[
  {
    "path": ".gitattributes",
    "content": "###############################################################################\n# Set default behavior to automatically normalize line endings.\n###############################################################################\n* text=auto\n\n###############################################################################\n# Set default behavior for command prompt diff.\n#\n# This is need for earlier builds of msysgit that does not have it on by\n# default for csharp files.\n# Note: This is only used by command line\n###############################################################################\n#*.cs     diff=csharp\n\n###############################################################################\n# Set the merge driver for project and solution files\n#\n# Merging from the command prompt will add diff markers to the files if there\n# are conflicts (Merging from VS is not affected by the settings below, in VS\n# the diff markers are never inserted). Diff markers may cause the following \n# file extensions to fail to load in VS. An alternative would be to treat\n# these files as binary and thus will always conflict and require user\n# intervention with every merge. To do so, just uncomment the entries below\n###############################################################################\n#*.sln       merge=binary\n#*.csproj    merge=binary\n#*.vbproj    merge=binary\n#*.vcxproj   merge=binary\n#*.vcproj    merge=binary\n#*.dbproj    merge=binary\n#*.fsproj    merge=binary\n#*.lsproj    merge=binary\n#*.wixproj   merge=binary\n#*.modelproj merge=binary\n#*.sqlproj   merge=binary\n#*.wwaproj   merge=binary\n\n###############################################################################\n# behavior for image files\n#\n# image files are treated as binary by default.\n###############################################################################\n#*.jpg   binary\n#*.png   binary\n#*.gif   binary\n\n###############################################################################\n# diff behavior for common document formats\n# \n# Convert binary document formats to text before diffing them. This feature\n# is only available from the command line. Turn it on by uncommenting the \n# entries below.\n###############################################################################\n#*.doc   diff=astextplain\n#*.DOC   diff=astextplain\n#*.docx  diff=astextplain\n#*.DOCX  diff=astextplain\n#*.dot   diff=astextplain\n#*.DOT   diff=astextplain\n#*.pdf   diff=astextplain\n#*.PDF   diff=astextplain\n#*.rtf   diff=astextplain\n#*.RTF   diff=astextplain\n\n*.reg text eol=crlf\n*.ini text eol=crlf\nREADME.md text eol=crlf\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\nTry the latest version first.\nGo [here](https://ci.appveyor.com/project/otya128/winevdm) and click `Environment: THIS_BUILD_IS_RECOMMENDED__VCXPROJ_BUILD=1`-> `Artifacts 1`-> `zip` to download the latest version.\n\n\n**Describe the bug**\nA clear and concise description of what the bug is.\n\n**Expected behavior**\nA clear and concise description of what you expected to happen.\n\n**Screenshots**\nIf applicable, add screenshots to help explain your problem.\n\n**Environment (please complete the following information):**\n - OS: [e.g. Windows 10 1903]\n - Version [e.g. version: 1523]\n\n**Additional context**\nAdd any other context about the problem here.\n\n\nIt is very helpful to provide a trace file if possible.\nPlease note that this file contains detailed information about the program.\n**Procedure**\n1. Run the command prompt.\n2. Set the environment variable:\n```cmd\nset WINEDEBUG=+all,-snoop,-ldt,-fixup,-module,-global,-local,-disasm,-syslevel,-thunk\n```\n3.\n```cmd\n*old-executable-file* 2> trace.txt\n```\n4. Upload trace.txt here.\n"
  },
  {
    "path": ".gitignore",
    "content": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.sln.docstates\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\nw[Dd]ebug/\nx64/\nbuild/\nbld/\n[Bb]in/\n[Oo]bj/\n\n# Roslyn cache directories\n*.ide/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n#NUNIT\n*.VisualState.xml\nTestResult.xml\n\n# Build Results of an ATL Project\n[Dd]ebugPS/\n[Rr]eleasePS/\ndlldata.c\n\n*_i.c\n*_p.c\n*_i.h\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opensdf\n*.sdf\n*.cachefile\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# JustCode is a .NET coding addin-in\n.JustCode\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# NCrunch\n_NCrunch_*\n.*crunch*.local.xml\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Web workbench (sass)\n.sass-cache/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.[Pp]ublish.xml\n*.azurePubxml\n## TODO: Comment the next line if you want to checkin your\n## web deploy settings but do note that will include unencrypted\n## passwords\n#*.pubxml\n\n# NuGet Packages Directory\npackages/*\n## TODO: If the tool you use requires repositories.config\n## uncomment the next line\n#!packages/repositories.config\n\n# Enable \"build/\" folder in the NuGet Packages folder since\n# NuGet packages use it for MSBuild targets.\n# This line needs to be after the ignore of the build folder\n# (and the packages folder if the line above has been uncommented)\n!packages/build/\n\n# Windows Azure Build Output\ncsx/\n*.build.csdef\n\n# Windows Store app package directory\nAppPackages/\n\n# Others\nsql/\n*.Cache\nClientBin/\n[Ss]tyle[Cc]op.*\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.pfx\n*.publishsettings\nnode_modules/\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\n\n# SQL Server files\n*.mdf\n*.ldf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n\n# Microsoft Fakes\nFakesAssemblies/\n\n# LightSwitch generated files\nGeneratedArtifacts/\n_Pvt_Extensions/\nModelManifest.xml\n*.db\n*.opendb\n*.tlog\n/.vs\n*16.asm\n*.i\n"
  },
  {
    "path": "BuildToolProperty.props",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ImportGroup Label=\"PropertySheets\" />\n  <PropertyGroup Label=\"UserMacros\">\n    <!-- BisonPath should point the directory containing bison.exe -->\n    <BisonPath>$(AsmPath)</BisonPath>\n    <!-- FlexPath should point the directory containing flex.exe -->\n    <FlexPath>$(AsmPath)</FlexPath>\n  </PropertyGroup>\n  <PropertyGroup>\n    <_PropertySheetDisplayName>BuildToolProperty</_PropertySheetDisplayName>\n  </PropertyGroup>\n  <ItemDefinitionGroup />\n  <ItemGroup>\n    <BuildMacro Include=\"BisonPath\">\n      <Value>$(BisonPath)</Value>\n    </BuildMacro>\n    <BuildMacro Include=\"FlexPath\">\n      <Value>$(FlexPath)</Value>\n    </BuildMacro>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.10.2)\n#-Dinline=__inline\nproject(winevdm)\nset(ASM_TOOL_DIR )\n# prevent wine error\nif (NOT(MSVC))\n    string(APPEND CMAKE_CXX_FLAGS \" -Wno-narrowing \")\nelse()\n    add_definitions(-DUSE_COMPILER_EXCEPTIONS -Dinline=__inline)\nendif()\n\nset(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})\nset(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})\nset(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})\nmacro(def_file_build32 file)\n    get_filename_component(name_we ${file} NAME_WE)\n    add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${name_we}.def\n    DEPENDS ${file}.spec convspec\n    COMMAND convspec ${CMAKE_CURRENT_LIST_DIR}/${file}.spec -DEF -32 > ${CMAKE_CURRENT_BINARY_DIR}/${name_we}.def)\n    add_custom_target(generate_def_${name_we} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${name_we}.def)\nendmacro()\nmacro(def_file_build file)\n    get_filename_component(name_we ${file} NAME_WE)\n    add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${name_we}.def\n    DEPENDS ${file}.spec convspec\n    COMMAND convspec ${CMAKE_CURRENT_LIST_DIR}/${file}.spec -DEF > ${CMAKE_CURRENT_BINARY_DIR}/${name_we}.def)\n    add_custom_target(generate_def_${name_we} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${name_we}.def)\nendmacro()\nmacro(spec_build file modname)\n    string(TOUPPER modname modname)\n    get_filename_component(name_we ${file} NAME_WE)\n    cmake_parse_arguments(SPEC_BUILD \"\" \"\" \"ARG\" ${ARGN})\n    add_custom_command(OUTPUT ${file}.obj ${file}.asm\n    DEPENDS ${file}.spec convspec\n    COMMAND convspec ${CMAKE_CURRENT_LIST_DIR}/${file}.spec ${SPEC_BUILD_ARG} ${modname} > ${file}.asm && ${ASM_TOOL_DIR}as --32 -o ${file}.obj ${file}.asm)\n    add_custom_target(generate_asm_${name_we} DEPENDS ${file}.obj)\n    if (MSVC)\n        set(CMAKE_SHARED_LINKER_FLAGS \"${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO\")\n    endif()\n    def_file_build(${file})\n    add_dependencies(${name_we} generate_asm_${name_we})\n    add_dependencies(${name_we} generate_def_${name_we})\n    set_target_properties(${name_we} PROPERTIES PREFIX \"\")\nendmacro()\nmacro(widl_build file_idl file_c file_h)\n    get_filename_component(name_we ${file_idl} NAME_WE)\n    add_custom_command(OUTPUT ${file_c} ${file_h}\n    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${file_idl} widl\n    COMMAND $<TARGET_FILE_DIR:widl>/widl.exe ${CMAKE_CURRENT_SOURCE_DIR}/${file_idl} -o ${file_c} && $<TARGET_FILE_DIR:widl>/widl.exe ${CMAKE_CURRENT_SOURCE_DIR}/${file_idl} -o ${file_h}\nWORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})\n    add_custom_target(generate_ifs_${name_we} DEPENDS ${file_c} ${file_h})\nendmacro()\n\nINCLUDE(CheckIncludeFiles)\nCHECK_INCLUDE_FILES(WinHvPlatform.h HAVE_WINHVPLATFORM_H)\n\ninclude_directories(BEFORE wow32)\nfind_package(BISON)\nfind_package(FLEX)\n\nadd_subdirectory(wine)\nadd_subdirectory(convspec)\nadd_subdirectory(winecrt0)\nadd_subdirectory(wow32)\nadd_subdirectory(krnl386)\nadd_subdirectory(user)\nadd_subdirectory(gdi)\nadd_subdirectory(win87em)\nadd_subdirectory(shell)\nadd_subdirectory(vm86)\nadd_subdirectory(avifile)\nadd_subdirectory(comm)\nadd_subdirectory(commctrl)\nadd_subdirectory(commdlg)\nadd_subdirectory(compobj)\nadd_subdirectory(ctl3d)\nadd_subdirectory(ctl3dv2)\nadd_subdirectory(ddeml)\nadd_subdirectory(dispdib)\nadd_subdirectory(display)\nadd_subdirectory(haxmvm)\nadd_subdirectory(keyboard)\nadd_subdirectory(lzexpand)\nadd_subdirectory(mmsystem)\nadd_subdirectory(mouse)\nadd_subdirectory(msacm)\nadd_subdirectory(msvideo)\nadd_subdirectory(nddeapi)\nadd_subdirectory(ole2)\nadd_subdirectory(ole2conv)\nadd_subdirectory(ole2disp)\nadd_subdirectory(ole2nls)\nadd_subdirectory(ole2prox)\nadd_subdirectory(ole2thk)\nadd_subdirectory(olecli)\nadd_subdirectory(olesvr)\nadd_subdirectory(regedit)\nadd_subdirectory(rmpatch)\nadd_subdirectory(sound)\nadd_subdirectory(storage)\nadd_subdirectory(system)\nadd_subdirectory(timer)\nadd_subdirectory(toolhelp)\nadd_subdirectory(typelib)\nadd_subdirectory(ver)\nadd_subdirectory(widl)\nadd_subdirectory(wifeman)\nadd_subdirectory(wing)\nadd_subdirectory(winhlp32)\nadd_subdirectory(winnls)\nadd_subdirectory(winoldap)\nadd_subdirectory(winsock)\nadd_subdirectory(winspool)\nadd_subdirectory(wpp)\nadd_subdirectory(otvdm)\nadd_subdirectory(gvm)\nadd_subdirectory(ntvdm)\nif (HAVE_WINHVPLATFORM_H)\n  add_subdirectory(whpxvm)\nendif()\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc.,\n 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicense is intended to guarantee your freedom to share and change free\nsoftware--to make sure the software is free for all its users.  This\nGeneral Public License applies to most of the Free Software\nFoundation's software and to any other program whose authors commit to\nusing it.  (Some other Free Software Foundation software is covered by\nthe GNU Lesser General Public License instead.)  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthis service if you wish), that you receive source code or can get it\nif you want it, that you can change the software or use pieces of it\nin new free programs; and that you know you can do these things.\n\n  To protect your rights, we need to make restrictions that forbid\nanyone to deny you these rights or to ask you to surrender the rights.\nThese restrictions translate to certain responsibilities for you if you\ndistribute copies of the software, or if you modify it.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must give the recipients all the rights that\nyou have.  You must make sure that they, too, receive or can get the\nsource code.  And you must show them these terms so they know their\nrights.\n\n  We protect your rights with two steps: (1) copyright the software, and\n(2) offer you this license which gives you legal permission to copy,\ndistribute and/or modify the software.\n\n  Also, for each author's protection and ours, we want to make certain\nthat everyone understands that there is no warranty for this free\nsoftware.  If the software is modified by someone else and passed on, we\nwant its recipients to know that what they have is not the original, so\nthat any problems introduced by others will not reflect on the original\nauthors' reputations.\n\n  Finally, any free program is threatened constantly by software\npatents.  We wish to avoid the danger that redistributors of a free\nprogram will individually obtain patent licenses, in effect making the\nprogram proprietary.  To prevent this, we have made it clear that any\npatent must be licensed for everyone's free use or not licensed at all.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                    GNU GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License applies to any program or other work which contains\na notice placed by the copyright holder saying it may be distributed\nunder the terms of this General Public License.  The \"Program\", below,\nrefers to any such program or work, and a \"work based on the Program\"\nmeans either the Program or any derivative work under copyright law:\nthat is to say, a work containing the Program or a portion of it,\neither verbatim or with modifications and/or translated into another\nlanguage.  (Hereinafter, translation is included without limitation in\nthe term \"modification\".)  Each licensee is addressed as \"you\".\n\nActivities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning the Program is not restricted, and the output from the Program\nis covered only if its contents constitute a work based on the\nProgram (independent of having been made by running the Program).\nWhether that is true depends on what the Program does.\n\n  1. You may copy and distribute verbatim copies of the Program's\nsource code as you receive it, in any medium, provided that you\nconspicuously and appropriately publish on each copy an appropriate\ncopyright notice and disclaimer of warranty; keep intact all the\nnotices that refer to this License and to the absence of any warranty;\nand give any other recipients of the Program a copy of this License\nalong with the Program.\n\nYou may charge a fee for the physical act of transferring a copy, and\nyou may at your option offer warranty protection in exchange for a fee.\n\n  2. You may modify your copy or copies of the Program or any portion\nof it, thus forming a work based on the Program, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) You must cause the modified files to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    b) You must cause any work that you distribute or publish, that in\n    whole or in part contains or is derived from the Program or any\n    part thereof, to be licensed as a whole at no charge to all third\n    parties under the terms of this License.\n\n    c) If the modified program normally reads commands interactively\n    when run, you must cause it, when started running for such\n    interactive use in the most ordinary way, to print or display an\n    announcement including an appropriate copyright notice and a\n    notice that there is no warranty (or else, saying that you provide\n    a warranty) and that users may redistribute the program under\n    these conditions, and telling the user how to view a copy of this\n    License.  (Exception: if the Program itself is interactive but\n    does not normally print such an announcement, your work based on\n    the Program is not required to print an announcement.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Program,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Program, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote it.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Program.\n\nIn addition, mere aggregation of another work not based on the Program\nwith the Program (or with a work based on the Program) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may copy and distribute the Program (or a work based on it,\nunder Section 2) in object code or executable form under the terms of\nSections 1 and 2 above provided that you also do one of the following:\n\n    a) Accompany it with the complete corresponding machine-readable\n    source code, which must be distributed under the terms of Sections\n    1 and 2 above on a medium customarily used for software interchange; or,\n\n    b) Accompany it with a written offer, valid for at least three\n    years, to give any third party, for a charge no more than your\n    cost of physically performing source distribution, a complete\n    machine-readable copy of the corresponding source code, to be\n    distributed under the terms of Sections 1 and 2 above on a medium\n    customarily used for software interchange; or,\n\n    c) Accompany it with the information you received as to the offer\n    to distribute corresponding source code.  (This alternative is\n    allowed only for noncommercial distribution and only if you\n    received the program in object code or executable form with such\n    an offer, in accord with Subsection b above.)\n\nThe source code for a work means the preferred form of the work for\nmaking modifications to it.  For an executable work, complete source\ncode means all the source code for all modules it contains, plus any\nassociated interface definition files, plus the scripts used to\ncontrol compilation and installation of the executable.  However, as a\nspecial exception, the source code distributed need not include\nanything that is normally distributed (in either source or binary\nform) with the major components (compiler, kernel, and so on) of the\noperating system on which the executable runs, unless that component\nitself accompanies the executable.\n\nIf distribution of executable or object code is made by offering\naccess to copy from a designated place, then offering equivalent\naccess to copy the source code from the same place counts as\ndistribution of the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  4. You may not copy, modify, sublicense, or distribute the Program\nexcept as expressly provided under this License.  Any attempt\notherwise to copy, modify, sublicense or distribute the Program is\nvoid, and will automatically terminate your rights under this License.\nHowever, parties who have received copies, or rights, from you under\nthis License will not have their licenses terminated so long as such\nparties remain in full compliance.\n\n  5. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Program or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Program (or any work based on the\nProgram), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Program or works based on it.\n\n  6. Each time you redistribute the Program (or any work based on the\nProgram), the recipient automatically receives a license from the\noriginal licensor to copy, distribute or modify the Program subject to\nthese terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties to\nthis License.\n\n  7. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Program at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Program by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Program.\n\nIf any portion of this section is held invalid or unenforceable under\nany particular circumstance, the balance of the section is intended to\napply and the section as a whole is intended to apply in other\ncircumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system, which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  8. If the distribution and/or use of the Program is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Program under this License\nmay add an explicit geographical distribution limitation excluding\nthose countries, so that distribution is permitted only in or among\ncountries not thus excluded.  In such case, this License incorporates\nthe limitation as if written in the body of this License.\n\n  9. The Free Software Foundation may publish revised and/or new versions\nof the General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Program\nspecifies a version number of this License which applies to it and \"any\nlater version\", you have the option of following the terms and conditions\neither of that version or of any later version published by the Free\nSoftware Foundation.  If the Program does not specify a version number of\nthis License, you may choose any version ever published by the Free Software\nFoundation.\n\n  10. If you wish to incorporate parts of the Program into other free\nprograms whose distribution conditions are different, write to the author\nto ask for permission.  For software which is copyrighted by the Free\nSoftware Foundation, write to the Free Software Foundation; we sometimes\nmake exceptions for this.  Our decision will be guided by the two goals\nof preserving the free status of all derivatives of our free software and\nof promoting the sharing and reuse of software generally.\n\n                            NO WARRANTY\n\n  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\nFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\nOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\nPROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\nOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\nTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\nPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\nREPAIR OR CORRECTION.\n\n  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\nREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\nINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\nOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\nTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\nYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\nPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGES.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software; you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation; either version 2 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License along\n    with this program; if not, write to the Free Software Foundation, Inc.,\n    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\n\nAlso add information on how to contact you by electronic and paper mail.\n\nIf the program is interactive, make it output a short notice like this\nwhen it starts in an interactive mode:\n\n    Gnomovision version 69, Copyright (C) year name of author\n    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, the commands you use may\nbe called something other than `show w' and `show c'; they could even be\nmouse-clicks or menu items--whatever suits your program.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the program, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n  `Gnomovision' (which makes passes at compilers) written by James Hacker.\n\n  <signature of Ty Coon>, 1 April 1989\n  Ty Coon, President of Vice\n\nThis General Public License does not permit incorporating your program into\nproprietary programs.  If your program is a subroutine library, you may\nconsider it more useful to permit linking proprietary applications with the\nlibrary.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.\n"
  },
  {
    "path": "PropertySheet.props",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ImportGroup Label=\"PropertySheets\" />\n  <PropertyGroup Label=\"UserMacros\">\n    <!-- AsmPath should point the directory containing as.exe(binutils), bison.exe and flex.exe -->\n    <AsmPath>C:\\msys32\\usr\\bin\\</AsmPath>\n  </PropertyGroup>\n  <PropertyGroup>\n    <_PropertySheetDisplayName>MacroPropertySheet</_PropertySheetDisplayName>\n    <IncludePath>$(SolutionDir)wow32;$(IncludePath)</IncludePath>\n  </PropertyGroup>\n  <ItemDefinitionGroup />\n  <ItemGroup>\n    <BuildMacro Include=\"AsmPath\">\n      <Value>$(AsmPath)</Value>\n    </BuildMacro>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "README.md",
    "content": "# winevdm on 64-bit Windows\r\n\r\n![screenshot](screenshot.PNG)\r\n\r\n[Download stable version](https://github.com/otya128/winevdm/releases)\r\n\r\n[Download latest version (unstable)](https://ci.appveyor.com/project/otya128/winevdm/)\r\n\r\n16-bit Windows (Windows 1.x, 2.x, 3.0, 3.1, etc.) on 64-bit Windows\r\n\r\nAn altered version of winevdm (a 16-bit Windows emulator), ported to 64-bit Windows.\r\n\r\n# How to run\r\n\r\n+ If you get an error that VCRUNTIME140.dll is missing, install [Microsoft Visual C++ Redistributable for Visual Studio 2017 (32-bit)](https://aka.ms/vs/15/release/vc_redist.x86.exe)\r\n+ Drag and drop Win16 executable file to otvdm.exe or execute otvdmw.exe.\r\n\r\n# How to install\r\n\r\n+ Download or compile\r\n+ Run \"install\" shortcut or right-click on install.inf and select \"Install\"\r\n+ You can execute Win16 binaries directly!\r\n\r\nIf the registry is initialized by Windows Update, perform the above procedure again.\r\n\r\nYou can uninstall it by running uninstall.reg.\r\n\r\n# Configuration\r\n\r\nSee [otvdm.ini](otvdm.ini).\r\n\r\n# How to compile(Visual Studio)\r\n\r\n+ Install Visual Studio 2017\r\n+ Edit PropertySheet.props\r\n+ Compile\r\n\r\n# How to compile(cmake)\r\n\r\n```sh\r\ngit clone https://github.com/otya128/winevdm.git\r\ncd winevdm\r\nmkdir build\r\ncd build\r\ncmake ..\r\nmake\r\n```\r\n\r\n# How does it work?\r\n\r\nThis program contains the following items\r\n\r\n+ CPU Emulator\r\n  + 64-bit Windows cannot modify LDT(NtSetInformationProcess(,ProcessLdtInformation,,) always returns error)\r\n+ wine based Win16->Win32 conversion codes:\r\n  ```c\r\n  BOOL16 WINAPI DestroyWindow16( HWND16 hwnd )\r\n  {\r\n      return DestroyWindow( WIN_Handle32(hwnd) );\r\n  }\r\n  ```\r\n  Relay routines from 16-bit to 32-bit are autogenerated by convspec\r\n  ```spec\r\n  53  pascal -ret16 DestroyWindow(word) DestroyWindow16\r\n  ```\r\n+ DOS emulation for Win16\r\n+ 16-bit <=> native HANDLE conversion\r\n+ Fix compatibility problems, fix compatibility problems\r\n\r\n## install.inf\r\n\r\nWhen 64-bit Windows detects a 16-bit installer, it has a mechanism to start an alternative installer which is not 16-bit.\r\nThis program uses it.\r\n\r\n## WINDOWS directory redirection\r\n\r\nSome Win16 programs try to save their settings in %WINDIR%\\<filename>.ini\r\n\r\nIn recent Windows, it is not allowed to save to %WINDIR%, so it redirects.\r\n\r\n# winevdm\r\n```bat\r\nwinevdm.exe [--app-name app.exe] command line\r\nwinevdm.exe CALC.EXE\r\n```\r\nIt can also run DOS executables (DOS emulator-like).\r\nYou can set the DOS version with the VDMDOSVER environment variable.\r\n\r\nDOS emulation is incomplete and it is recommended to use DOSBox or [MS-DOS Player](http://takeda-toshiya.my.coocan.jp/msdos/).\r\n"
  },
  {
    "path": "READMEJP.md",
    "content": "# winevdm on windows(64bit)\n<img src=\"screenshot.PNG\">\n\n[Download](https://github.com/otya128/winevdm/releases)\n\nwinevdm on windows(64bit)\n16bit用Windowsのプログラムを動かすプログラム\nwinevdmの移植版\n# コンパイルに必要そうなもの\n+ VC++\n+ gas\n\n# winevdm\n```bat\nwinevdm.exe [--app-name app.exe] command line\n\nwinevdm.exe CALC.EXE\n```\nDOS実行ファイルを実行することも可能(ただしDOSエミュレータは他に存在するためそれを使った方が確実)\nVDMDOSVER環境変数を設定するとDOSのバージョンを指定できる\n# convspec\nconvert wine spec file\nwinebuildから必要な部分を取り出しVC++で動かせるようにし、関数名の扱いなどを変え出力されたassemblyをVC++で扱えるようにした\n```bat\nconvspec .specfile modulename > asm\nconvspec .specfile -DEF > def\n\nconvspec commdlg.dll16.spec COMMDLG > commdlg.dll16.asm\nconvspec commdlg.dll16.spec -DEF > commdlg.def\nas --32 -o commdlg.dll16.obj commdlg.dll16.asm\n```\n# gdi\nGDI.EXE\n# krnl386\nKRNL386.EXE\n# user\nUSER.EXE\n# vm86\nCPU emulator\n# wine\nlibwine\n# wow32\nwow32.dll\n"
  },
  {
    "path": "appveyor.yml",
    "content": "version: dev{build}\nimage: Visual Studio 2017\nconfiguration: Release\nenvironment:\n  matrix:\n  - THIS_BUILD_IS_RECOMMENDED__VCXPROJ_BUILD: 1\n  - THIS_BUILD_IS_NOT_RECOMMENDED__GCC_CMAKE_BUILD: 1\n    APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015\nbuild:\n  parallel: true\n  verbosity: quiet\n\nfor:\n-\n  matrix:\n    only:\n      - THIS_BUILD_IS_NOT_RECOMMENDED__GCC_CMAKE_BUILD: 1\n  build_script:\n   ps: |\n     mkdir build\n     cd build\n     $env:MSYSTEM = \"MINGW32\"\n     $env:MSYSTEM_CARCH = \"i686\"\n     $env:MSYSTEM_CHOST = \"i686-w64-mingw32\"\n     $env:MSYSTEM_PREFIX = \"C:/msys64/mingw32\"\n     $env:Path = \"C:\\msys64\\mingw32\\bin;C:\\msys64\\usr\\local\\bin;C:\\msys64\\usr\\bin;\" + $env:Path\n     cmake -G\"MSYS Makefiles\" .. -DCMAKE_CXX_FLAGS=-w -DCMAKE_C_FLAGS=-w\n     if (0 -ne $LastExitCode)\n     {\n         throw \"Failed to execute cmake\"\n     }\n     make -j 2\n     if (0 -ne $LastExitCode)\n     {\n         throw \"Failed to execute make\"\n     }\n     mkdir otvdm-cmake-gcc-${env:APPVEYOR_REPO_BRANCH}-${env:APPVEYOR_BUILD_NUMBER}\n     ..\\tools\\package.ps1 -root ..\\ -src .\\ -dst otvdm-cmake-gcc-${env:APPVEYOR_REPO_BRANCH}-${env:APPVEYOR_BUILD_NUMBER} -objcopy \"C:\\msys64\\usr\\bin\\objcopy.exe\" -as \"as.exe\" -dll otvdm-cmake-gcc-${env:APPVEYOR_REPO_BRANCH}-${env:APPVEYOR_BUILD_NUMBER}\n     copy C:\\msys64\\mingw32\\bin\\libgcc_s_dw2-1.dll otvdm-cmake-gcc-${env:APPVEYOR_REPO_BRANCH}-${env:APPVEYOR_BUILD_NUMBER}\\\n     copy C:\\msys64\\mingw32\\bin\\libstdc++-6.dll otvdm-cmake-gcc-${env:APPVEYOR_REPO_BRANCH}-${env:APPVEYOR_BUILD_NUMBER}\\\n     copy C:\\mingw-w64\\i686-5.3.0-posix-dwarf-rt_v4-rev0\\mingw32\\bin\\libwinpthread-1.dll otvdm-cmake-gcc-${env:APPVEYOR_REPO_BRANCH}-${env:APPVEYOR_BUILD_NUMBER}\\\n     7z a ..\\otvdm-cmake-gcc-${env:APPVEYOR_REPO_BRANCH}-${env:APPVEYOR_BUILD_NUMBER}.zip otvdm-cmake-gcc-${env:APPVEYOR_REPO_BRANCH}-${env:APPVEYOR_BUILD_NUMBER}\n\n-\n  matrix:\n    only:\n      - THIS_BUILD_IS_RECOMMENDED__VCXPROJ_BUILD: 1\n  before_build:\n    ps: |\n      C:\\msys64\\usr\\bin\\as --version\n      echo \"<?xml version=\"\"1.0\"\" encoding=\"\"utf-8\"\"?>\n      <Project ToolsVersion=\"\"4.0\"\" xmlns=\"\"http://schemas.microsoft.com/developer/msbuild/2003\"\">\n        <ImportGroup Label=\"\"PropertySheets\"\" />\n        <PropertyGroup Label=\"\"UserMacros\"\">\n          <AsmPath>C:\\msys64\\usr\\bin\\</AsmPath>\n          <NtDllLibPath>`$(UniversalCRTSdkDir)Lib\\10.0.17134.0\\um\\x86\\</NtDllLibPath>\n        </PropertyGroup>\n        <PropertyGroup>\n          <_PropertySheetDisplayName>MacroPropertySheet</_PropertySheetDisplayName>\n          <IncludePath>`$(SolutionDir)wow32;`$(IncludePath)</IncludePath>\n        </PropertyGroup>\n        <ItemDefinitionGroup>\n          <ClCompile>\n            <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n            <PreprocessorDefinitions>__CI_VERSION=${env:APPVEYOR_BUILD_NUMBER};%(PreprocessorDefinitions)</PreprocessorDefinitions>\n            <WarningLevel>TurnOffAllWarnings</WarningLevel>\n          </ClCompile>\n        </ItemDefinitionGroup>\n        <ItemGroup>\n          <BuildMacro Include=\"\"AsmPath\"\">\n            <Value>`$(AsmPath)</Value>\n          </BuildMacro>\n          <BuildMacro Include=\"\"NtDllLibPath\"\">\n            <Value>`$(NtDllLibPath)</Value>\n          </BuildMacro>\n        </ItemGroup>\n      </Project>\n      \" > C:\\projects\\winevdm\\PropertySheet.props\n\n  before_package:\n    ps: |\n      .\\tools\\package.ps1 -root .\\ -src Release -dst otvdm-${env:APPVEYOR_REPO_BRANCH}-${env:APPVEYOR_BUILD_NUMBER} -objcopy \"C:\\msys64\\usr\\bin\\objcopy.exe\" -as \"C:\\msys64\\usr\\bin\\as.exe\"\n      7z a otvdm-${env:APPVEYOR_REPO_BRANCH}-${env:APPVEYOR_BUILD_NUMBER}.zip otvdm-${env:APPVEYOR_REPO_BRANCH}-${env:APPVEYOR_BUILD_NUMBER}\n\nartifacts:\n- path: '*.zip'\n  name: otvdm-Debug\n"
  },
  {
    "path": "avifile/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(avifile SHARED ${SOURCE} ${CMAKE_SOURCE_DIR}/dummy.c ${CMAKE_CURRENT_BINARY_DIR}/avifile.def avifile.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(avifile.dll16 avifile)\ntarget_link_libraries(avifile libwine winecrt0 krnl386 avifil32.lib)\nset_target_properties(avifile PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "avifile/Makefile.in",
    "content": "MODULE    = avifile.dll16\nIMPORTS   = avifil32\nEXTRADLLFLAGS = -m16 -Wb,--main-module,avifil32.dll\n"
  },
  {
    "path": "avifile/avifile.def",
    "content": "; File generated automatically from avifile\\avifile.dll16.spec; do not edit!\n\nLIBRARY avifile.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "avifile/avifile.dll16.spec",
    "content": "# I'm just using \"long\" instead of \"ptr\" for the interface pointers,\n# because they are 32-bit pointers, not converted to 16-bit format,\n# but the app doesn't really need to know, it should never need to\n# dereference the interface pointer itself (if we're lucky)...\n\n#1   stub     WEP\n2   stub     DLLGETCLASSOBJECT\n3   stub     DLLCANUNLOADNOW\n4   stub     ___EXPORTEDSTUB\n10  variable _IID_IAVIStream(0x00020021 0x00000000 0x000000c0 0x46000000)\n11  variable _IID_IAVIFile(0x00020020 0x00000000 0x000000c0 0x46000000)\n12  variable _IID_IAVIEditStream(0x00020024 0x00000000 0x000000c0 0x46000000)\n13  variable _IID_IGetFrame(0x00020023 0x00000000 0x000000c0 0x46000000)\n14  variable _CLSID_AVISimpleUnMarshal(0x00020009 0x00000000 0x000000c0 0x46000000)\n100 pascal   AVIFileInit() AVIFileInit\n101 pascal   AVIFileExit() AVIFileExit\n102 pascal   AVIFileOpen(ptr str word ptr) AVIFileOpenA\n103 pascal   AVIStreamOpenFromFile(ptr str long long word ptr) AVIStreamOpenFromFileA\n104 pascal   AVIStreamCreate(ptr long long ptr) AVIStreamCreate\n105 stub     AVIMAKECOMPRESSEDSTREAM\n106 stub     AVIMAKEFILEFROMSTREAMS\n107 stub     AVIMAKESTREAMFROMCLIPBOARD\n110 pascal   AVIStreamGetFrame(long long) AVIStreamGetFrame16\n111 pascal   AVIStreamGetFrameClose(long) AVIStreamGetFrameClose16\n112 pascal   AVIStreamGetFrameOpen(long ptr) AVIStreamGetFrameOpen16\n120 stub     _AVISAVE\n121 stub     AVISAVEV\n122 stub     AVISAVEOPTIONS\n123 pascal   AVIBuildFilter(str long word) AVIBuildFilterA\n124 pascal   AVISaveOptionsFree(word ptr) AVISaveOptionsFree\n130 pascal   AVIStreamStart(long) AVIStreamStart\n131 pascal   AVIStreamLength(long) AVIStreamLength\n132 pascal   AVIStreamTimeToSample(long long) AVIStreamTimeToSample\n133 pascal   AVIStreamSampleToTime(long long) AVIStreamSampleToTime\n140 pascal   AVIFileAddRef(long) AVIFileAddRef\n141 pascal   AVIFileRelease(long) AVIFileRelease\n142 pascal   AVIFileInfo(long ptr long) AVIFileInfoA\n143 pascal   AVIFileGetStream(long ptr long long) AVIFileGetStream\n144 pascal   AVIFileCreateStream(long ptr ptr) AVIFileCreateStream16\n146 pascal   AVIFileWriteData(long long ptr long) AVIFileWriteData\n147 pascal   AVIFileReadData(long long ptr ptr) AVIFileReadData\n148 pascal   AVIFileEndRecord(long) AVIFileEndRecord\n160 pascal   AVIStreamAddRef(long) AVIStreamAddRef\n161 pascal   AVIStreamRelease(long) AVIStreamRelease\n162 pascal   AVIStreamInfo(long ptr long) AVIStreamInfo16\n163 pascal   AVIStreamFindSample(long long long) AVIStreamFindSample\n164 pascal   AVIStreamReadFormat(long long ptr ptr) AVIStreamReadFormat\n165 pascal   AVIStreamReadData(long long ptr ptr) AVIStreamReadData\n166 pascal   AVIStreamWriteData(long long ptr long) AVIStreamWriteData\n167 pascal   AVIStreamRead(long long long ptr long ptr ptr) AVIStreamRead\n168 pascal   AVIStreamWrite(long long long ptr long long ptr ptr) AVIStreamWrite\n169 pascal   AVIStreamSetFormat(long long ptr long) AVIStreamSetFormat\n180 stub     EDITSTREAMCOPY\n181 stub     EDITSTREAMCUT\n182 stub     EDITSTREAMPASTE\n184 stub     CREATEEDITABLESTREAM\n185 stub     AVIPUTFILEONCLIPBOARD\n187 stub     AVIGETFROMCLIPBOARD\n188 stub     AVICLEARCLIPBOARD\n190 stub     EDITSTREAMCLONE\n191 stub     EDITSTREAMSETNAME\n192 stub     EDITSTREAMSETINFO\n200 stub     AVISTREAMBEGINSTREAMING\n201 stub     AVISTREAMENDSTREAMING\n"
  },
  {
    "path": "avifile/avifile.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n    <RootNamespace>avifile</RootNamespace>\n    <ProjectGuid>{3825B17A-681F-48CF-B9AD-5337B1F521C8}</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <Import Project=\"..\\PropertySheet.props\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\navifil32.lib</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\navifile.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\navifile.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\navifil32.lib</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"main.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"avifile.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"avifile.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Platform)'=='Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" AVIFILE &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Platform)'=='Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"avifile.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>\n"
  },
  {
    "path": "avifile/main.c",
    "content": "/*\n * Wrapper for 16 bit avifile functions\n *\n * Copyright 2016 Michael Müller\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"wine/winbase16.h\"\n#include \"winternl.h\"\n#include \"wingdi.h\"\n#include \"vfw.h\"\n\ntypedef struct _AVISTREAMINFO16 {\n    DWORD   fccType;\n    DWORD   fccHandler;\n    DWORD   dwFlags;\n    DWORD   dwCaps;\n    WORD    wPriority;\n    WORD    wLanguage;\n    DWORD   dwScale;\n    DWORD   dwRate;\n    DWORD   dwStart;\n    DWORD   dwLength;\n    DWORD   dwInitialFrames;\n    DWORD   dwSuggestedBufferSize;\n    DWORD   dwQuality;\n    DWORD   dwSampleSize;\n    RECT16  rcFrame;\n    DWORD   dwEditCount;\n    DWORD   dwFormatChangeCount;\n    CHAR    szName[64];\n} AVISTREAMINFO16, *LPAVISTREAMINFO16, *PAVISTREAMINFO16;\n\nstruct frame_wrapper16\n{\n    PGETFRAME pg;\n    PVOID ptr;\n    DWORD size;\n    WORD sel;\n    WORD count;\n};\n\nstatic void free_segptr_frame(struct frame_wrapper16 *wrapper)\n{\n    int i;\n\n    if (!wrapper->sel)\n        return;\n\n    for (i = 0; i < wrapper->count; i++)\n        FreeSelector16(wrapper->sel + (i << __AHSHIFT));\n\n    wrapper->sel = 0;\n}\n\nstatic SEGPTR alloc_segptr_frame(struct frame_wrapper16 *wrapper, void *ptr, DWORD size)\n{\n    int i;\n\n    if (wrapper->sel)\n    {\n        if (wrapper->ptr == ptr && wrapper->size == size)\n            return MAKESEGPTR(wrapper->sel, 0);\n        free_segptr_frame(wrapper);\n    }\n\n    wrapper->ptr    = ptr;\n    wrapper->size   = size;\n    wrapper->count  = (size + 0xffff) / 0x10000;\n    wrapper->sel    = AllocSelectorArray16(wrapper->count);\n    if (!wrapper->sel)\n        return 0;\n\n    for (i = 0; i < wrapper->count; i++)\n    {\n        SetSelectorBase(wrapper->sel + (i << __AHSHIFT), (DWORD)ptr + i * 0x10000);\n        SetSelectorLimit16(wrapper->sel + (i << __AHSHIFT), size - 1);\n        size -= 0x10000;\n    }\n\n    return MAKESEGPTR(wrapper->sel, 0);\n}\n\n/***********************************************************************\n *      AVIStreamGetFrameOpen   (AVIFILE.112)\n */\nPGETFRAME WINAPI AVIStreamGetFrameOpen16(PAVISTREAM pstream, LPBITMAPINFOHEADER lpbiWanted)\n{\n    struct frame_wrapper16 *wrapper;\n    PGETFRAME pg;\n\n    pg = AVIStreamGetFrameOpen(pstream, lpbiWanted);\n    if (!pg) return NULL;\n\n    wrapper = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*wrapper));\n    if (!wrapper)\n    {\n        AVIStreamGetFrameClose(pg);\n        return NULL;\n    }\n\n    wrapper->pg = pg;\n    return (PGETFRAME)wrapper;\n}\n\n/***********************************************************************\n *      AVIStreamGetFrame\t(AVIFILE.110)\n */\nSEGPTR WINAPI AVIStreamGetFrame16(PGETFRAME pg, LONG pos)\n{\n    struct frame_wrapper16 *wrapper = (void *)pg;\n    BITMAPINFOHEADER *bih;\n\n    if (!pg) return 0;\n\n    bih = AVIStreamGetFrame(wrapper->pg, pos);\n    if (bih)\n    {\n        DWORD size = bih->biSize + bih->biSizeImage;\n        return alloc_segptr_frame(wrapper, bih, size);\n    }\n\n    return 0;\n}\n\n\n/***********************************************************************\n *      AVIStreamGetFrameClose  (AVIFILE.111)\n */\nHRESULT WINAPI AVIStreamGetFrameClose16(PGETFRAME pg)\n{\n    struct frame_wrapper16 *wrapper = (void *)pg;\n    HRESULT hr;\n\n    if (!pg) return S_OK;\n\n    hr = AVIStreamGetFrameClose(wrapper->pg);\n    free_segptr_frame(wrapper);\n    HeapFree(GetProcessHeap(), 0, wrapper);\n    return hr;\n}\n\n/***********************************************************************\n *      AVIFileCreateStream (AVIFILE.144)\n */\nHRESULT WINAPI AVIFileCreateStream16(PAVIFILE pfile, PAVISTREAM *ppavi, LPAVISTREAMINFO16 asi16)\n{\n    AVISTREAMINFOA asi;\n\n    if (!asi16)\n        return AVIFileCreateStreamA(pfile, ppavi, NULL);\n\n    asi.fccType               = asi16->fccType;\n    asi.fccHandler            = asi16->fccHandler;\n    asi.dwFlags               = asi16->dwFlags;\n    asi.dwCaps                = asi16->dwCaps;\n    asi.wPriority             = asi16->wPriority;\n    asi.wLanguage             = asi16->wLanguage;\n    asi.dwScale               = asi16->dwScale;\n    asi.dwRate                = asi16->dwRate;\n    asi.dwStart               = asi16->dwStart;\n    asi.dwLength              = asi16->dwLength;\n    asi.dwInitialFrames       = asi16->dwInitialFrames;\n    asi.dwSuggestedBufferSize = asi16->dwSuggestedBufferSize;\n    asi.dwQuality             = asi16->dwQuality;\n    asi.dwSampleSize          = asi16->dwSampleSize;\n    asi.rcFrame.left          = asi16->rcFrame.left;\n    asi.rcFrame.top           = asi16->rcFrame.top;\n    asi.rcFrame.right         = asi16->rcFrame.right;\n    asi.rcFrame.bottom        = asi16->rcFrame.bottom;\n    asi.dwEditCount           = asi16->dwEditCount;\n    asi.dwFormatChangeCount   = asi16->dwFormatChangeCount;\n    strcpy( asi.szName, asi16->szName );\n\n    return AVIFileCreateStreamA(pfile, ppavi, &asi);\n}\n\n\n/***********************************************************************\n *      AVIStreamInfo       (AVIFILE.162)\n */\nHRESULT WINAPI AVIStreamInfo16(PAVISTREAM pstream, LPAVISTREAMINFO16 asi16, LONG size)\n{\n    AVISTREAMINFOA asi;\n    HRESULT hr;\n\n    if (!asi16)\n        return AVIStreamInfoA(pstream, NULL, size);\n\n    if (size < sizeof(AVISTREAMINFO16))\n        return AVIERR_BADSIZE;\n\n    hr = AVIStreamInfoA(pstream, &asi, sizeof(asi));\n    if (SUCCEEDED(hr))\n    {\n        asi16->fccType                = asi.fccType;\n        asi16->fccHandler             = asi.fccHandler;\n        asi16->dwFlags                = asi.dwFlags;\n        asi16->dwCaps                 = asi.dwCaps;\n        asi16->wPriority              = asi.wPriority;\n        asi16->wLanguage              = asi.wLanguage;\n        asi16->dwScale                = asi.dwScale;\n        asi16->dwRate                 = asi.dwRate;\n        asi16->dwStart                = asi.dwStart;\n        asi16->dwLength               = asi.dwLength;\n        asi16->dwInitialFrames        = asi.dwInitialFrames;\n        asi16->dwSuggestedBufferSize  = asi.dwSuggestedBufferSize;\n        asi16->dwQuality              = asi.dwQuality;\n        asi16->dwSampleSize           = asi.dwSampleSize;\n        asi16->rcFrame.left           = asi.rcFrame.left;\n        asi16->rcFrame.top            = asi.rcFrame.top;\n        asi16->rcFrame.right          = asi.rcFrame.right;\n        asi16->rcFrame.bottom         = asi.rcFrame.bottom;\n        asi16->dwEditCount            = asi.dwEditCount;\n        asi16->dwFormatChangeCount    = asi.dwFormatChangeCount;\n        strcpy( asi16->szName, asi.szName );\n    }\n\n    return hr;\n}\n"
  },
  {
    "path": "comm/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(comm SHARED ${SOURCE} ${PROJECT_SOURCE_DIR}/dummy.c ${CMAKE_CURRENT_BINARY_DIR}/comm.def comm.drv16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(comm.drv16 comm)\ntarget_link_libraries(comm libwine winecrt0 krnl386)\nset_target_properties(comm PROPERTIES SUFFIX \".drv16\")\n"
  },
  {
    "path": "comm/Makefile.in",
    "content": "MODULE    = comm.drv16\nEXTRADLLFLAGS = -m16\n"
  },
  {
    "path": "comm/comm.def",
    "content": "; File generated automatically from comm\\comm.drv16.spec; do not edit!\n\nLIBRARY comm.drv16\n\nEXPORTS\n  _wine_spec_dos_header; @1 DATA PRIVATE\n"
  },
  {
    "path": "comm/comm.drv16.spec",
    "content": "  1 stub INICOM\n  2 stub SETCOM\n  3 stub SETQUE\n  4 stub RECCOM\n  5 stub SNDCOM\n  6 stub CTX\n  7 stub TRMCOM\n  8 stub STACOM\n  9 stub CEXTFCN\n 10 stub CFLUSH\n 11 stub CEVT\n 12 stub CEVTGET\n 13 stub CSETBRK\n 14 stub CCLRBRK\n 15 stub GETDCB\n#16 stub WEP\n 17 stub SUSPENDOPENCOMMPORTS # win3.1\n 18 stub REACTIVATEOPENCOMMPORTS # win3.1\n 19 stub COMMWRITESTRING\n 20 stub READCOMMSTRING\n100 stub ENABLENOTIFICATION\n101 stub ordinal_only__win31\n"
  },
  {
    "path": "comm/comm.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>comm</RootNamespace>\n    <ProjectGuid>{3D889B37-09C8-4030-B815-830566CD57A3}</ProjectGuid>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.drv16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.drv16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\ncomm.def\n</ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\ncomm.def\n</ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <Object Include=\"comm.drv16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"comm.drv16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" COMM &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" COMM &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"comm.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "commctrl/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(commctrl SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/commctrl.def commctrl.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(commctrl.dll16 commctrl)\ntarget_link_libraries(commctrl libwine winecrt0 krnl386 user comctl32.lib)\nset_target_properties(commctrl PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "commctrl/commctrl.c",
    "content": "#include <Windows.h>\n#include <CommCtrl.h>\n#include \"wine/windef16.h\"\n#include \"wine/winbase16.h\"\n#include \"wine/winuser16.h\"\n#include \"wine/debug.h\"\n#include <WowNT32.h>\n\nWINE_DEFAULT_DEBUG_CHANNEL(commctrl);\n\n/* FIXME: CreateWindow(\"ToolbarWindow\") fail */\n#include <pshpack1.h>\n\ntypedef struct  {\n    INT16 iBitmap;\n    INT16 idCommand;\n    BYTE fsState;\n    BYTE fsStyle;\n    INT16 idsHelp; /* ? */\n} TBBUTTON16, NEAR* PTBBUTTON16, *LPTBBUTTON16;\ntypedef struct {\n    SEGPTR ini_section;\n    SEGPTR ini_file;\n} TBSAVEPARAMS16, *LPTBSAVEPARAMS16;\n#include <poppack.h>\n#define TOOLBARCLASSNAME16 \"ToolbarWindow\"\n#define STATUSCLASSNAME16 \"msctls_statusbar\"\nHINSTANCE16 hInstance16;\nWNDCLASSEXA toolbar_window_class = { sizeof(WNDCLASSEXA) };\nWNDCLASSEXA status_window_class = { sizeof(WNDCLASSEXA) };\nLRESULT WINAPI ToolbarWindowProc16(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);\nLRESULT WINAPI StatusWindowProc16(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);\nvoid WINAPI InitCommonControls16(void)\n{\n    static BOOL init;\n    if (init)\n        return;\n    init = TRUE;\n    InitCommonControls();\n    if (GetClassInfoExA(NULL, TOOLBARCLASSNAMEA, &toolbar_window_class))\n    {\n        WNDCLASSEXA cls16 = toolbar_window_class;\n        cls16.hInstance = hInstance16 = LoadLibrary16(\"COMMCTRL\");\n        cls16.lpszClassName = TOOLBARCLASSNAME16;\n        cls16.lpfnWndProc = ToolbarWindowProc16;\n        if (!RegisterClassExA(&cls16))\n        {\n            ERR(\"\\n\");\n        }\n    }\n    if (GetClassInfoExA(NULL, STATUSCLASSNAMEA, &status_window_class))\n    {\n        WNDCLASSEXA cls16 = status_window_class;\n        cls16.hInstance = hInstance16;\n        cls16.lpszClassName = STATUSCLASSNAME16;\n        cls16.lpfnWndProc = StatusWindowProc16;\n        if (!RegisterClassExA(&cls16))\n        {\n            ERR(\"\\n\");\n        }\n    }\n}\nLRESULT WINAPI StatusWindowProc16(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)\n{\n    switch (msg)\n    {\n    case SB_GETTEXTA:\n    case SB_SETTEXTA:\n    {\n        LPCSTR str = (LPCSTR)MapSL(lParam);\n        if (!HIWORD(str))\n        {\n            str = (LPCSTR)lParam;\n        }\n        return CallWindowProcA(status_window_class.lpfnWndProc, hwnd, msg, wParam, (LPARAM)str);\n    }\n    case SB_GETPARTS:\n    case SB_SETPARTS:\n    {\n        LPINT16 ary = (LPINT16)MapSL(lParam);\n        LRESULT result;\n        INT ary32[256];\n        if (wParam > 256)\n            return FALSE;\n        if (!HIWORD(ary))\n        {\n            break;\n        }\n        for (int i = 0; i < wParam; i++)\n        {\n            ary32[i] = ary[i];\n        }\n        result = CallWindowProcA(status_window_class.lpfnWndProc, hwnd, msg, wParam, (LPARAM)&ary32);\n        for (int i = 0; i < wParam; i++)\n        {\n            ary[i] = ary32[i];\n        }\n        return result;\n    }\n    case SB_GETBORDERS:\n    {\n        INT borders32[3];\n        INT16 *borders = MapSL(lParam);\n        LRESULT result;\n        int i;\n        if (!HIWORD(borders))\n            break;\n        result = CallWindowProcA(status_window_class.lpfnWndProc, hwnd, msg, wParam, (LPARAM)&borders32);\n        for (i = 0; i < 3; i++)\n            borders[i] = borders32[i];\n        return result;\n    }\n    }\n    return CallWindowProcA(status_window_class.lpfnWndProc, hwnd, msg, wParam, lParam);\n}\nvoid TBBUTTON16_32(LPTBBUTTON btn32, LPTBBUTTON16 lpButtons)\n{\n    btn32->iBitmap = lpButtons->iBitmap;\n    btn32->idCommand = lpButtons->idCommand;\n    btn32->fsState = lpButtons->fsState;\n    btn32->fsStyle = lpButtons->fsStyle;\n    btn32->dwData = lpButtons->idsHelp;\n    btn32->iString = 0;\n}\nvoid TBBUTTON32_16(LPTBBUTTON btn32, LPTBBUTTON16 lpButtons)\n{\n    lpButtons->iBitmap = btn32->iBitmap;\n    lpButtons->idCommand = btn32->idCommand;\n    lpButtons->fsState = btn32->fsState;\n    lpButtons->fsStyle = btn32->fsStyle;\n    lpButtons->idsHelp = btn32->dwData;\n}\nLRESULT WINAPI ToolbarWindowProc16(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)\n{\n    LRESULT result;\n    switch (msg)\n    {\n    case TB_BUTTONSTRUCTSIZE:\n    {\n        SetPropW(hwnd, L\"TB_BUTTONSTRUCTSIZE\", wParam);\n        wParam = sizeof(TBBUTTON);\n        break;\n    }\n    break;\n    case TB_ADDBITMAP:\n    {\n        HINSTANCE16 hInst16 = LOWORD(lParam);\n        WORD nID16 = HIWORD(lParam);\n        TBADDBITMAP tb32 = { 0 };\n        if (!hInst16)\n        {\n            tb32.nID = HBITMAP_32(nID16);\n        }\n        else\n        {\n            tb32.nID = HBITMAP_32(LoadBitmap16(hInst16, (LPCSTR)nID16));\n        }\n        lParam = &tb32;\n        return CallWindowProcA(toolbar_window_class.lpfnWndProc, hwnd, msg, wParam, lParam);\n    }\n    case TB_ADDBUTTONSA:\n    {\n        LPTBBUTTON16 btn = (LPTBBUTTON16)MapSL(lParam);\n        LPTBBUTTON btn32;\n        SIZE_T button_struct_size;\n        if (!HIWORD(btn))\n            break;\n        button_struct_size = GetPropW(hwnd, L\"TB_BUTTONSTRUCTSIZE\");\n        btn32 = HeapAlloc(GetProcessHeap(), 0, sizeof(TBBUTTON) * wParam);\n        for (int i = 0; i < wParam; i++)\n        {\n            TBBUTTON16_32(btn32 + i, (LPTBBUTTON16)((LPBYTE)btn + button_struct_size * i));\n        }\n        result = CallWindowProcA(toolbar_window_class.lpfnWndProc, hwnd, msg, wParam, (LPARAM)btn32);\n        HeapFree(GetProcessHeap(), 0, btn32);\n        return result;\n    }\n    case TB_SAVERESTOREA:\n    {\n        LPTBSAVEPARAMS16 sp = (LPTBSAVEPARAMS16)MapSL(lParam);\n        TBSAVEPARAMSA sp32 = { 0 };\n        if (!HIWORD(sp))\n            break;\n        if (!wParam)\n        {\n            sp32.hkr = NULL;\n            sp32.pszSubKey = (LPCSTR)MapSL(sp->ini_section);\n            sp32.pszValueName = (LPCSTR)MapSL(sp->ini_file);\n        }\n        /* ini file?? */\n        FIXME(\"TB_SAVERESTORE\\n\");\n        result = 0;\n        /* result = CallWindowProcA(toolbar_window_class.lpfnWndProc, hwnd, msg, wParam, (LPARAM)&sp32); */\n        if (wParam)\n        {\n            sp->ini_section = MapLS(sp32.pszSubKey);\n            sp->ini_file = MapLS(sp32.pszValueName);\n        }\n        return result;\n    }\n    case TB_INSERTBUTTONA:\n    {\n        TBBUTTON btn;\n        TBBUTTON16_32(&btn, (LPTBBUTTON16)MapSL(lParam));\n        result = CallWindowProcA(toolbar_window_class.lpfnWndProc, hwnd, msg, wParam, (LPARAM)&btn);\n        return result;\n    }\n    case TB_GETBUTTON:\n    {\n        TBBUTTON btn;\n        result = CallWindowProcA(toolbar_window_class.lpfnWndProc, hwnd, msg, wParam, (LPARAM)&btn);\n        TBBUTTON32_16(&btn, (LPTBBUTTON16)MapSL(lParam));\n        return result;\n    }\n    case TB_GETBUTTONTEXTA:\n        return CallWindowProcA(toolbar_window_class.lpfnWndProc, hwnd, msg, wParam, (LPARAM)MapSL(lParam));\n    default:\n        break;\n    }\n    return CallWindowProcA(toolbar_window_class.lpfnWndProc, hwnd, msg, wParam, lParam);\n}\n/* based on wine */\n\nHWND16 WINAPI CreateToolbarEx16(HWND16 hwnd, DWORD style /* window style */, UINT16 wID /* control id */, INT16 nBitmaps,\n    HINSTANCE16 hBMInst, WORD wBMID /* bitmap resource id or bitmap handle(hBMInst == NULL) */, LPTBBUTTON16 lpButtons,\n    INT16 iNumButtons, INT16 dxButton, INT16 dyButton,\n    INT16 dxBitmap, INT16 dyBitmap, UINT16 uStructSize)\n{\n    TBBUTTON buttons32 = { 0 };\n    HWND hwndTB;\n    HBITMAP bitmap32 = NULL;\n    InitCommonControls16();\n\n    hwndTB =\n        CreateWindowExA(0, TOOLBARCLASSNAME16, NULL, style|WS_CHILD, 0,0,100,30,\n                        HWND_32(hwnd), (HMENU)(DWORD_PTR)wID, hInstance16, NULL);\n    if(hwndTB) {\n\n        SendMessageA (hwndTB, TB_BUTTONSTRUCTSIZE, uStructSize, 0);\n\n       /* set bitmap and button size */\n       /*If CreateToolbarEx receives 0, windows sets default values*/\n       if (dxBitmap < 0)\n           dxBitmap = 16;\n       if (dyBitmap < 0)\n           dyBitmap = 16;\n       if (dxBitmap == 0 || dyBitmap == 0)\n           dxBitmap = dyBitmap = 16;\n       SendMessageA(hwndTB, TB_SETBITMAPSIZE, 0, MAKELPARAM(dxBitmap, dyBitmap));\n\n       if (dxButton < 0)\n           dxButton = dxBitmap;\n       if (dyButton < 0)\n           dyButton = dyBitmap;\n       /* TB_SETBUTTONSIZE -> TB_SETBITMAPSIZE bug introduced for Windows compatibility */\n       if (dxButton != 0 && dyButton != 0)\n            SendMessageA(hwndTB, TB_SETBITMAPSIZE, 0, MAKELPARAM(dxButton, dyButton));\n\n\n\t/* add bitmaps */\n\tif (nBitmaps > 0 || hBMInst == HINST_COMMCTRL)\n\t{\n            SendMessageA (hwndTB, TB_ADDBITMAP, nBitmaps, MAKELONG(hBMInst, wBMID));\n\t}\n\t/* add buttons */\n\tif(iNumButtons > 0)\n        SendMessageA (hwndTB, TB_ADDBUTTONSA, iNumButtons, (LPARAM)MapLS(lpButtons));\n    }\n    return HWND_16(hwndTB);\n}\n\nHWND16 WINAPI CreateStatusWindow16(LONG style, LPCSTR text, HWND16 hwndParent, UINT16 wid)\n{\n    HWND parent = HWND_32(hwndParent);\n    return HWND_16(CreateWindowA(STATUSCLASSNAME16, text, style,\n\t\t\t   CW_USEDEFAULT, CW_USEDEFAULT,\n\t\t\t   CW_USEDEFAULT, CW_USEDEFAULT,\n\t\t\t   parent, (HMENU)(DWORD_PTR)wid, 0, 0));\n}\nLPRECT RECT16_32(LPRECT rect32, LPRECT16 lprc)\n{\n    if (!lprc)\n        return NULL;\n    rect32->left = lprc->left;\n    rect32->right = lprc->right;\n    rect32->top = lprc->top;\n    rect32->bottom = lprc->bottom;\n    return rect32;\n}\nLPRECT16 RECT32_16(LPRECT rect32, LPRECT16 lprc)\n{\n    if (!lprc)\n        return NULL;\n    lprc->left = rect32->left;\n    lprc->right = rect32->right;\n    lprc->top = rect32->top;\n    lprc->bottom = rect32->bottom;\n    return lprc;\n}\n\nvoid WINAPI GetEffectiveClientRect16(HWND16 hWnd, LPRECT16 lprc, const INT16 *lpInfo)\n{\n    HWND hWnd32 = HWND_32(hWnd);\n    RECT rect32;\n    SIZE_T len = 0;\n    LPINT info32;\n    const INT16 *lpRun = lpInfo;\n    do\n    {\n        lpRun += 2;\n        if (*lpRun == 0)\n            break;\n        lpRun += 2;\n    } while (*lpRun);\n    len = (lpRun - lpInfo) + 1;\n    info32 = (LPINT)HeapAlloc(GetProcessHeap(), 0, len * sizeof(INT));\n    for (int i = 0; i < len; i++)\n    {\n        info32[i] = lpInfo[i];\n    }\n    GetEffectiveClientRect(hWnd32, RECT16_32(&rect32, lprc), info32);\n    RECT32_16(&rect32, lprc);\n    HeapFree(GetProcessHeap(), 0, info32);\n}\nstatic int find_sub_menu( HMENU *hmenu, HMENU16 target )\n{\n    int i, pos, count = GetMenuItemCount( *hmenu );\n\n    for (i = 0; i < count; i++)\n    {\n        HMENU sub = GetSubMenu( *hmenu, i );\n        if (!sub) continue;\n        if (HMENU_16(sub) == target) return i;\n        if ((pos = find_sub_menu( &sub, target )) != -1)\n        {\n            *hmenu = sub;\n            return pos;\n        }\n    }\n    return -1;\n}\n\n\n#include <pshpack1.h>\ntypedef struct\n{\n    WORD command_id_off;\n    WORD menu_id_off;\n    struct\n    {\n        WORD popup_id;\n        HMENU16 hPopup;\n    } popup_ids[1];\n} MENUHELP16;\n#include <poppack.h>\nstatic int get_menu_off(HMENU hMainMenu, HMENU hSubMenu)\n{\n    int i = 0;\n    int count = GetMenuItemCount(hMainMenu);\n    for (i = 0; i < count; i++)\n    {\n        HMENU s = GetSubMenu(hMainMenu, i);\n        if (s == hSubMenu)\n        {\n            return i;\n        }\n    }\n    return -1;\n}\n/* based on wine */\nVOID WINAPI\nMenuHelp16 (UINT16 uMsg, WPARAM16 wParam, LPARAM lParam, HMENU16 hMainMenu, HINSTANCE16 hInst, HWND16 hwndStatus, MENUHELP16 *lpwIDs)\n{\n    UINT uMenuID = 0;\n    WORD wIDItem = wParam;\n    WORD fwMenu = LOWORD(lParam);\n    HMENU hMenu = HMENU_32(HIWORD(lParam));\n\n    if (!IsWindow (HWND_32(hwndStatus)))\n\treturn;\n\n    switch (uMsg) {\n\tcase WM_MENUSELECT:\n\t    TRACE(\"WM_MENUSELECT wParam=0x%lX lParam=0x%lX\\n\",\n\t\t   wParam, lParam);\n\n            if ((fwMenu == 0xFFFF) && (hMenu == 0)) {\n                /* menu was closed */\n\t\tTRACE(\"menu was closed!\\n\");\n                SendMessageA (HWND_32(hwndStatus), SB_SIMPLE, FALSE, 0);\n            }\n\t    else {\n\t\t/* menu item was selected */\n\t\tif (fwMenu & MF_POPUP)\n        {\n            if (!uMenuID)\n            {\n                int i = 0;\n                HMENU hMainMenu32 = HMENU_32(hMainMenu);\n                HMENU hSubMenu = HMENU_32(wParam);\n                int off = get_menu_off(hMainMenu32, hSubMenu);\n                if (off != -1)\n                {\n                    uMenuID = off + lpwIDs->menu_id_off;\n                }\n                else\n                {\n                    while (TRUE)\n                    {\n                        if (lpwIDs->popup_ids[i].hPopup == 0 && lpwIDs->popup_ids[i].popup_id == 0)\n                            break;\n                        if (lpwIDs->popup_ids[i].hPopup == wIDItem)\n                        {\n                            uMenuID = lpwIDs->popup_ids[i].popup_id;\n                            break;\n                        }\n                        i++;\n                    }\n                }\n            }\n        }\n\t\telse\n\t\t    uMenuID = lpwIDs->command_id_off + (UINT)wIDItem;\n\t\tTRACE(\"uMenuID = %u\\n\", uMenuID);\n\n\t\tif (uMenuID) {\n\t\t    CHAR szText[256];\n\n\t\t    if (!LoadString16 (hInst, uMenuID, szText, ARRAYSIZE(szText)))\n\t\t\tszText[0] = '\\0';\n\n\t\t    SendMessageA (HWND_32(hwndStatus), SB_SETTEXTA,\n\t\t\t\t    255 | SBT_NOBORDERS, (LPARAM)szText);\n\t\t    SendMessageA (HWND_32(hwndStatus), SB_SIMPLE, TRUE, 0);\n\t\t}\n\t    }\n\t    break;\n\n        case WM_COMMAND :\n\t    TRACE(\"WM_COMMAND wParam=0x%lX lParam=0x%lX\\n\",\n\t\t   wParam, lParam);\n\t    /* WM_COMMAND is not invalid since it is documented\n\t     * in the windows api reference. So don't output\n             * any FIXME for WM_COMMAND\n             */\n\t    WARN(\"We don't care about the WM_COMMAND\\n\");\n\t    break;\n\n\tdefault:\n\t    FIXME(\"Invalid Message 0x%x!\\n\", uMsg);\n\t    break;\n    }\n}\n\nHBITMAP16 WINAPI CreateMappedBitmap16(HINSTANCE16 hInstance, INT16 idBitmap, UINT16 wFlags, LPCOLORMAP lpColorMap, INT16 iNumMaps)\n{\n    /* wine */\n    HGLOBAL16 hglb;\n    HRSRC16 hRsrc;\n    const BITMAPINFOHEADER *lpBitmap;\n    LPBITMAPINFOHEADER lpBitmapInfo;\n    UINT nSize, nColorTableSize, iColor;\n    RGBQUAD *pColorTable;\n    INT i, iMaps, nWidth, nHeight;\n    HDC hdcScreen;\n    HBITMAP hbm;\n    LPCOLORMAP sysColorMap;\n    COLORREF cRef;\n    COLORMAP internalColorMap[4] =\n\t{{0x000000, 0}, {0x808080, 0}, {0xC0C0C0, 0}, {0xFFFFFF, 0}};\n\n    /* initialize pointer to colortable and default color table */\n    if (lpColorMap) {\n\tiMaps = iNumMaps;\n\tsysColorMap = lpColorMap;\n    }\n    else {\n\tinternalColorMap[0].to = GetSysColor (COLOR_BTNTEXT);\n\tinternalColorMap[1].to = GetSysColor (COLOR_BTNSHADOW);\n\tinternalColorMap[2].to = GetSysColor (COLOR_BTNFACE);\n\tinternalColorMap[3].to = GetSysColor (COLOR_BTNHIGHLIGHT);\n\tiMaps = 4;\n\tsysColorMap = internalColorMap;\n    }\n\n    hRsrc = FindResource16 (hInstance, (LPSTR)idBitmap, (LPSTR)RT_BITMAP);\n    if (hRsrc == 0)\n\treturn 0;\n    hglb = LoadResource16 (hInstance, hRsrc);\n    if (hglb == 0)\n\treturn 0;\n    lpBitmap = LockResource16 (hglb);\n    if (lpBitmap == NULL)\n\treturn 0;\n\n    if (lpBitmap->biSize >= sizeof(BITMAPINFOHEADER) && lpBitmap->biClrUsed)\n        nColorTableSize = lpBitmap->biClrUsed;\n    else if (lpBitmap->biBitCount <= 8)\t\n        nColorTableSize = (1 << lpBitmap->biBitCount);\n    else\n        nColorTableSize = 0;\n    nSize = lpBitmap->biSize;\n    if (nSize == sizeof(BITMAPINFOHEADER) && lpBitmap->biCompression == BI_BITFIELDS)\n        nSize += 3 * sizeof(DWORD);\n    nSize += nColorTableSize * sizeof(RGBQUAD);\n    lpBitmapInfo = GlobalAlloc (GMEM_FIXED, nSize);\n    if (lpBitmapInfo == NULL)\n\treturn 0;\n    RtlMoveMemory (lpBitmapInfo, lpBitmap, nSize);\n\n    pColorTable = (RGBQUAD*)(((LPBYTE)lpBitmapInfo) + lpBitmapInfo->biSize);\n\n    for (iColor = 0; iColor < nColorTableSize; iColor++) {\n\tfor (i = 0; i < iMaps; i++) {\n            cRef = RGB(pColorTable[iColor].rgbRed,\n                       pColorTable[iColor].rgbGreen,\n                       pColorTable[iColor].rgbBlue);\n\t    if ( cRef  == sysColorMap[i].from) {\n#if 0\n\t\tif (wFlags & CBS_MASKED) {\n\t\t    if (sysColorMap[i].to != COLOR_BTNTEXT)\n\t\t\tpColorTable[iColor] = RGB(255, 255, 255);\n\t\t}\n\t\telse\n#endif\n                    pColorTable[iColor].rgbBlue  = GetBValue(sysColorMap[i].to);\n                    pColorTable[iColor].rgbGreen = GetGValue(sysColorMap[i].to);\n                    pColorTable[iColor].rgbRed   = GetRValue(sysColorMap[i].to);\n\t\tbreak;\n\t    }\n\t}\n    }\n    nWidth  = lpBitmapInfo->biWidth;\n    nHeight = lpBitmapInfo->biHeight;\n    hdcScreen = GetDC (NULL);\n    hbm = CreateCompatibleBitmap (hdcScreen, nWidth, nHeight);\n    if (hbm) {\n\tHDC hdcDst = CreateCompatibleDC (hdcScreen);\n\tHBITMAP hbmOld = SelectObject (hdcDst, hbm);\n\tconst BYTE *lpBits = (const BYTE *)lpBitmap + nSize;\n\tStretchDIBits (hdcDst, 0, 0, nWidth, nHeight, 0, 0, nWidth, nHeight,\n\t\t         lpBits, (LPBITMAPINFO)lpBitmapInfo, DIB_RGB_COLORS,\n\t\t         SRCCOPY);\n\tSelectObject (hdcDst, hbmOld);\n\tDeleteDC (hdcDst);\n    }\n    ReleaseDC (NULL, hdcScreen);\n    GlobalFree (lpBitmapInfo);\n    FreeResource16 (hglb);\n\n    return HBITMAP_16(hbm);\n}\n\nHWND16 WINAPI CreateToolbar16(HWND16 hwnd, DWORD style, UINT16 wID, INT16 nBitmaps, HINSTANCE16 hBMInst, UINT16 wBMID, LPTBBUTTON16 lpButtons, INT16 iNumButtons)\n{\n    return CreateToolbarEx16(hwnd, style | CCS_NODIVIDER, wID, nBitmaps,\n        hBMInst, wBMID, lpButtons,\n        iNumButtons, 0, 0, 0, 0, sizeof(TBBUTTON16));\n}\n\nBOOL16 WINAPI MakeDragList16(HWND16 hLB)\n{\n    return MakeDragList(HWND_32(hLB));\n}\n\nHWND16 WINAPI CreateHeaderWindow16(LONG a1, LPSTR a2, HWND16 a3, WORD a4)\n{\n    FIXME(\"(%08x,%s,%04x,%04x)\\n\", a1, debugstr_a(a2), a3, a4);\n    return 0;\n}\n"
  },
  {
    "path": "commctrl/commctrl.def",
    "content": "; File generated automatically from commctrl\\commctrl.dll16.spec; do not edit!\n\nLIBRARY commctrl.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "commctrl/commctrl.dll16.spec",
    "content": "16 stub CREATEUPDOWNCONTROL\n44 stub IMAGELIST_SETBKCOLOR\n339 stub DPA_SEARCH\n332 stub DPA_GETPTR\n336 stub DPA_DELETEPTR\n329 stub DPA_DESTROY\n334 stub DPA_INSERTPTR\n13 pascal -ret16 MakeDragList(word) MakeDragList16\n15 stub DRAWINSERT\n335 stub DPA_SETPTR\n20 pascal -ret16 CreateToolbarEx(word long word word word word ptr word word word word word word) CreateToolbarEx16\n328 stub DPA_CREATE\n4 pascal -ret16 GetEffectiveClientRect(word ptr ptr) GetEffectiveClientRect16\n45 stub IMAGELIST_GETBKCOLOR\n42 stub IMAGELIST_GETIMAGECOUNT\n333 stub DPA_GETPTRINDEX\n40 stub IMAGELIST_CREATE\n2 pascal -ret16 MenuHelp(word word long word word word ptr) MenuHelp16\n49 stub IMAGELIST_DRAW\n43 stub IMAGELIST_SETOVERLAYIMAGE\n160 stub CREATEPROPERTYSHEETPAGE\n5 stub DRAWSTATUSTEXT\n338 stub DPA_SORT\n8 pascal -ret16 CreateMappedBitmap(word word word ptr word) CreateMappedBitmap16\n3 stub SHOWHIDEMENUCTL\n161 stub DESTROYPROPERTYSHEETPAGE\n41 stub IMAGELIST_DESTROY\n17 pascal -ret16 InitCommonControls() InitCommonControls16\n14 stub LBITEMFROMPT\n6 pascal -ret16 CreateStatusWindow(long str word word) CreateStatusWindow16\n159 stub PROPERTYSHEET\n7 pascal -ret16 CreateToolbar(word long word word word word ptr word) CreateToolbar16\n331 stub DPA_CLONE\n54 stub IMAGELIST_REPLACEICON\n337 stub DPA_DELETEALLPTRS\n330 stub DPA_GROW\n46 stub IMAGELIST_ADD\n53 stub IMAGELIST_ADDICON\n\n9 pascal -ret16 CreateHeaderWindow(long str word word) CreateHeaderWindow16\n\n10 pascal -ret16 WritePrivateProfileStruct(str str ptr word str) WritePrivateProfileStruct16\n11 pascal -ret16 GetPrivateProfileStruct(str str ptr word str) GetPrivateProfileStruct16\n"
  },
  {
    "path": "commctrl/commctrl.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n    <RootNamespace>commctrl</RootNamespace>\n    <ProjectGuid>{CB9C6113-15AB-4DB9-A323-C2094A9A6E92}</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <Import Project=\"..\\PropertySheet.props\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n$(OutDir)user.lib;comctl32.lib;user32.lib;gdi32.lib</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\ncommctrl.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\ncommctrl.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n$(OutDir)user.lib;comctl32.lib;user32.lib;gdi32.lib</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"commctrl.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"commctrl.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"commctrl.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Platform)'=='Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" COMMCTRL &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Platform)'=='Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"commctrl.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "commdlg/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(commdlg SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/commdlg.def commdlg.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(commdlg.dll16 commdlg)\ntarget_link_libraries(commdlg libwine winecrt0 krnl386 user comdlg32.lib)\nset_target_properties(commdlg PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "commdlg/cdlg16.h",
    "content": "/*\n * Common Dialog Boxes interface (16 bit implementation)\n *\n * Copyright 1994 Martin Ayotte\n * Copyright 1996 Albrecht Kleine\n * Copyright 1998 Bertho A. Stultiens\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _WINE_DLL_CDLG16_H\n#define _WINE_DLL_CDLG16_H\n\n#include \"dlgs.h\"\n#include \"wine/windef16.h\"\n#include \"wine/winbase16.h\"\n#include \"wine/winuser16.h\"\n#include \"wownt32.h\"\n\n/* 16 bit api */\n\n#include \"pshpack1.h\"\n\ntypedef UINT16 (CALLBACK *LPOFNHOOKPROC16)(HWND16,UINT16,WPARAM16,LPARAM);\n\ntypedef struct {\n\tDWORD\t\tlStructSize;\n\tHWND16\t\thwndOwner;\n\tHINSTANCE16\thInstance;\n\tSEGPTR\t        lpstrFilter;\n\tSEGPTR          lpstrCustomFilter;\n\tDWORD\t\tnMaxCustFilter;\n\tDWORD\t\tnFilterIndex;\n\tSEGPTR          lpstrFile;\n\tDWORD\t\tnMaxFile;\n\tSEGPTR\t\tlpstrFileTitle;\n\tDWORD\t\tnMaxFileTitle;\n\tSEGPTR \t\tlpstrInitialDir;\n\tSEGPTR \t\tlpstrTitle;\n\tDWORD\t\tFlags;\n\tUINT16\t\tnFileOffset;\n\tUINT16\t\tnFileExtension;\n\tSEGPTR\t\tlpstrDefExt;\n\tLPARAM \t\tlCustData;\n\tLPOFNHOOKPROC16 lpfnHook;\n\tSEGPTR \t\tlpTemplateName;\n}   OPENFILENAME16,*LPOPENFILENAME16;\n\ntypedef UINT16 (CALLBACK *LPCCHOOKPROC16) (HWND16, UINT16, WPARAM16, LPARAM);\n\ntypedef struct {\n\tDWORD\t\tlStructSize;\n\tHWND16\t\thwndOwner;\n\tHWND16\t\thInstance;\n\tCOLORREF\trgbResult;\n\tSEGPTR          lpCustColors;\n\tDWORD \t\tFlags;\n\tLPARAM\t\tlCustData;\n        LPCCHOOKPROC16  lpfnHook;\n\tSEGPTR \t\tlpTemplateName;\n} CHOOSECOLOR16;\ntypedef CHOOSECOLOR16 *LPCHOOSECOLOR16;\n\ntypedef UINT16 (CALLBACK *LPFRHOOKPROC16)(HWND16,UINT16,WPARAM16,LPARAM);\ntypedef struct {\n\tDWORD\t\tlStructSize; \t\t/* size of this struct 0x20 */\n\tHWND16\t\thwndOwner; \t\t/* handle to owner's window */\n\tHINSTANCE16\thInstance; \t\t/* instance handle of.EXE that  */\n\t\t\t\t\t\t/* contains cust. dlg. template */\n\tDWORD\t\tFlags;                  /* one or more of the FR_?? */\n\tSEGPTR\t\tlpstrFindWhat;          /* ptr. to search string    */\n\tSEGPTR\t\tlpstrReplaceWith;       /* ptr. to replace string   */\n\tUINT16\t\twFindWhatLen;           /* size of find buffer      */\n\tUINT16 \t\twReplaceWithLen;        /* size of replace buffer   */\n\tLPARAM \t\tlCustData;              /* data passed to hook fn.  */\n        LPFRHOOKPROC16  lpfnHook;\n\tSEGPTR \t\tlpTemplateName;         /* custom template name     */\n} FINDREPLACE16, *LPFINDREPLACE16;\n\ntypedef UINT16 (CALLBACK *LPCFHOOKPROC16)(HWND16,UINT16,WPARAM16,LPARAM);\ntypedef struct\n{\n\tDWORD\t\t\tlStructSize;\n\tHWND16\t\t\thwndOwner;          /* caller's window handle   */\n\tHDC16          \t        hDC;                /* printer DC/IC or NULL    */\n\tSEGPTR                  lpLogFont;          /* ptr. to a LOGFONT struct */\n\tshort\t\t\tiPointSize;         /* 10 * size in points of selected font */\n\tDWORD\t\t\tFlags;              /* enum. type flags         */\n\tCOLORREF\t\trgbColors;          /* returned text color      */\n\tLPARAM\t                lCustData;          /* data passed to hook fn.  */\n\tLPCFHOOKPROC16          lpfnHook;\n\tSEGPTR\t\t\tlpTemplateName;     /* custom template name     */\n\tHINSTANCE16\t\thInstance;          /* instance handle of.EXE that   */\n\t\t\t\t\t/* contains cust. dlg. template  */\n\tSEGPTR\t\t\tlpszStyle;          /* return the style field here   */\n\t\t\t\t\t/* must be LF_FACESIZE or bigger */\n\tUINT16\t\t\tnFontType;          /* same value reported to the    */\n\t\t\t\t\t\t    /* EnumFonts callback with the   */\n\t\t\t\t\t\t    /* extra FONTTYPE_ bits added    */\n\tshort\t\t\tnSizeMin;           /* minimum pt size allowed & */\n\tshort\t\t\tnSizeMax;           /* max pt size allowed if    */\n\t\t\t\t\t/* CF_LIMITSIZE is used      */\n} CHOOSEFONT16, *LPCHOOSEFONT16;\n\n\ntypedef UINT16 (CALLBACK *LPPRINTHOOKPROC16) (HWND16, UINT16, WPARAM16, LPARAM);\ntypedef UINT16 (CALLBACK *LPSETUPHOOKPROC16) (HWND16, UINT16, WPARAM16, LPARAM);\ntypedef struct\n{\n    DWORD            lStructSize;\n    HWND16           hwndOwner;\n    HGLOBAL16        hDevMode;\n    HGLOBAL16        hDevNames;\n    HDC16            hDC;\n    DWORD            Flags;\n    WORD             nFromPage;\n    WORD             nToPage;\n    WORD             nMinPage;\n    WORD             nMaxPage;\n    WORD             nCopies;\n    HINSTANCE16      hInstance;\n    LPARAM           lCustData;\n    LPPRINTHOOKPROC16 lpfnPrintHook;\n    LPSETUPHOOKPROC16 lpfnSetupHook;\n    SEGPTR           lpPrintTemplateName;\n    SEGPTR           lpSetupTemplateName;\n    HGLOBAL16        hPrintTemplate;\n    HGLOBAL16        hSetupTemplate;\n} PRINTDLG16, *LPPRINTDLG16;\n\nBOOL16  WINAPI ChooseColor16(LPCHOOSECOLOR16 lpChCol);\nHWND16  WINAPI FindText16( SEGPTR find);\nBOOL16  WINAPI GetOpenFileName16(SEGPTR ofn);\nBOOL16  WINAPI GetSaveFileName16(SEGPTR ofn);\nBOOL16  WINAPI PrintDlg16( SEGPTR print);\nHWND16  WINAPI ReplaceText16( SEGPTR find);\nBOOL16  WINAPI ChooseFont16(SEGPTR);\nBOOL16 CALLBACK ColorDlgProc16( HWND16 hDlg16, UINT16 message, WPARAM16 wParam, LPARAM lParam );\nBOOL16 CALLBACK FileSaveDlgProc16(HWND16 hWnd16, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam);\nBOOL16 CALLBACK FileOpenDlgProc16(HWND16 hWnd16, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam);\nINT16 WINAPI FontFamilyEnumProc16( SEGPTR logfont, SEGPTR metrics, UINT16 nFontType, LPARAM lParam );\nINT16 WINAPI FontStyleEnumProc16( SEGPTR logfont, SEGPTR metrics, UINT16 nFontType, LPARAM lParam);\nBOOL16 CALLBACK FormatCharDlgProc16(HWND16 hDlg16, UINT16 message, WPARAM16 wParam, LPARAM lParam);\nshort WINAPI GetFileTitle16(LPCSTR lpFile, LPSTR lpTitle, UINT16 cbBuf);\nBOOL16 CALLBACK PrintDlgProc16(HWND16 hDlg16, UINT16 uMsg, WPARAM16 wParam, LPARAM lParam);\nBOOL16 CALLBACK PrintSetupDlgProc16(HWND16 hWnd16, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam);\n\ntypedef struct\n{\n    BYTE pop_eax;   //58\n    BYTE push;      //68\n    DWORD this_;\n    BYTE push_eax;  //50\n    BYTE mov_eax;   //B8\n    DWORD address;\n    BYTE jmp;       //FF E0\n    BYTE eax;       //E0\n    BOOL used;\n    SEGPTR segofn16;\n    SEGPTR func;\n    union\n    {\n        OPENFILENAME16 ofn16;\n        PRINTDLGA pd;\n    };\n} COMMDLGTHUNK;\nCOMMDLGTHUNK *allocate_thunk(SEGPTR ofnseg, SEGPTR func);\nvoid delete_thunk(LPVOID func);\n#include \"poppack.h\"\n\ntypedef struct\n{\n    HMENU16 hMenu16;\n    DLGPROC16 dlgProc;\n} dialog_data;\nDLGTEMPLATE *WINAPI dialog_template16_to_template32(HINSTANCE16 hInst, SEGPTR dlgTemplate16, DWORD *size, dialog_data *paramd);\n#endif /* _WINE_DLL_CDLG16_H */\n"
  },
  {
    "path": "commdlg/colordlg.c",
    "content": "/*\n * COMMDLG - Color Dialog\n *\n * Copyright 1994 Martin Ayotte\n * Copyright 1996 Albrecht Kleine\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n/* BUGS : still seems to not refresh correctly\n   sometimes, especially when 2 instances of the\n   dialog are loaded at the same time */\n\n#include <ctype.h>\n#include <stdlib.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <string.h>\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n#include \"commdlg.h\"\n#include \"wine/debug.h\"\n#include \"cdlg16.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(commdlg);\n\n\n/***********************************************************************\n *           ColorDlgProc   (COMMDLG.8)\n */\nBOOL16 CALLBACK ColorDlgProc16( HWND16 hDlg16, UINT16 message, WPARAM16 wParam, LPARAM lParam )\n{\n    FIXME( \"%04x %04x %04x %08lx: stub\\n\", hDlg16, message, wParam, lParam );\n    return FALSE;\n}\n\n/***********************************************************************\n *            ChooseColor  (COMMDLG.5)\n */\nBOOL16 WINAPI ChooseColor16( LPCHOOSECOLOR16 cc16 )\n{\n    CHOOSECOLORA cc32;\n    BOOL ret;\n\n    cc32.lStructSize  = sizeof(cc32);\n    cc32.hwndOwner    = HWND_32( cc16->hwndOwner );\n    cc32.rgbResult    = cc16->rgbResult;\n    cc32.lpCustColors = MapSL( cc16->lpCustColors );\n    cc32.Flags        = cc16->Flags & ~(CC_ENABLETEMPLATE | CC_ENABLETEMPLATEHANDLE | CC_ENABLEHOOK);\n    cc32.lCustData    = cc16->lCustData;\n    cc32.hInstance    = NULL;\n    cc32.lpfnHook     = NULL;\n    cc32.lpTemplateName = NULL;\n\n    if (cc16->Flags & (CC_ENABLETEMPLATE | CC_ENABLETEMPLATEHANDLE))\n        FIXME( \"custom templates no longer supported, using default\\n\" );\n    if (cc16->Flags & CC_ENABLEHOOK)\n        FIXME( \"custom hook %p no longer supported\\n\", cc16->lpfnHook );\n\n    if ((ret = ChooseColorA( &cc32 )))\n    {\n        cc16->rgbResult = cc32.rgbResult;\n    }\n    return ret;\n}\n"
  },
  {
    "path": "commdlg/commdlg.def",
    "content": "; File generated automatically from commdlg.dll16.spec; do not edit!\n\nLIBRARY commdlg.dll16\n\nEXPORTS\n  _wine_spec_dos_header;=.L__wine_spec_dos_header @1 DATA PRIVATE\n"
  },
  {
    "path": "commdlg/commdlg.dll16.spec",
    "content": "1   pascal -ret16 GetOpenFileName(segptr) GetOpenFileName16\n2   pascal -ret16 GetSaveFileName(segptr) GetSaveFileName16\n5   pascal -ret16 ChooseColor(ptr) ChooseColor16\n6   pascal   FileOpenDlgProc(word word word long) FileOpenDlgProc16\n7   pascal   FileSaveDlgProc(word word word long) FileSaveDlgProc16\n8   pascal   ColorDlgProc(word word word long) ColorDlgProc16\n#9   pascal  LOADALTERBITMAP exported, shared data\n11  pascal -ret16 FindText(segptr) FindText16\n12  pascal -ret16 ReplaceText(segptr) ReplaceText16\n13  pascal   FindTextDlgProc(word word word long) FindTextDlgProc16\n14  pascal   ReplaceTextDlgProc(word word word long) ReplaceTextDlgProc16\n15  pascal -ret16 ChooseFont(segptr) ChooseFont16\n16  pascal -ret16 FormatCharDlgProc(word word word long) FormatCharDlgProc16\n18  pascal -ret16 FontStyleEnumProc(ptr ptr word long)   FontStyleEnumProc16\n19  pascal -ret16 FontFamilyEnumProc(ptr ptr word long)  FontFamilyEnumProc16\n20  pascal -ret16 PrintDlg(segptr) PrintDlg16\n21  pascal   PrintDlgProc(word word word long) PrintDlgProc16\n22  pascal   PrintSetupDlgProc(word word word long) PrintSetupDlgProc16\n#23  pascal  EDITINTEGERONLY exported, shared data\n#25  pascal  WANTARROWS exported, shared data\n26  pascal   CommDlgExtendedError() CommDlgExtendedError16\n27  pascal -ret16 GetFileTitle(str ptr word) GetFileTitle16\n#28  pascal  WEP exported, shared data\n#29  pascal  DWLBSUBCLASS exported, shared data\n#30  pascal  DWUPARROWHACK exported, shared data\n#31  pascal  DWOKSUBCLASS exported, shared data\n"
  },
  {
    "path": "commdlg/commdlg.rc",
    "content": "#include \"resource.h\"\n\n#include \"winresrc.h\"\n\n/*  64 KiB dummy resource */\nIDB_BITMAP1             BITMAP                  \"dummy.bmp\"\n\n#define OPEN_FILE 1536\n#define SAVE_FILE 1537\n#define PRINT 1538\n#define PRINT_SETUP 1539\n#define FIND 1540\n#define REPLACE 1541\n#define CHOOSE_FONT 1543\n#define CHOOSE_COLOR CHOOSECOLOR\n\nOPEN_FILE DIALOG 36, 24, 275, 134\nSTYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\nCAPTION \"Open\"\nFONT 8, \"MS Shell Dlg\"\n{\n LTEXT \"File &Name:\", stc3, 6, 6, 76, 9\n EDITTEXT edt1, 6, 16, 90, 12, ES_AUTOHSCROLL | ES_OEMCONVERT | WS_BORDER | WS_TABSTOP\n LISTBOX lst1, 6, 32, 90, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP\n LTEXT \"&Directories:\", -1, 110, 6, 92, 9\n LTEXT \"\", stc1, 110, 18, 92, 9, SS_NOPREFIX | WS_GROUP\n LISTBOX lst2, 110, 32, 92, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP\n LTEXT \"List Files of &Type:\", stc2, 6, 104, 90, 9\n COMBOBOX cmb1, 6, 114, 90, 60, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP\n LTEXT \"Dri&ves:\", stc4, 110, 104, 92, 9\n COMBOBOX cmb2, 110, 114, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP\n DEFPUSHBUTTON \"Open\", IDOK, 208, 6, 60, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP\n PUSHBUTTON \"Cancel\", IDCANCEL, 208, 24, 60, 14, WS_GROUP | WS_TABSTOP\n PUSHBUTTON \"&Help\", pshHelp, 208, 46, 60, 14, WS_GROUP | WS_TABSTOP\n CHECKBOX \"&Read Only\", chx1, 208, 68, 65, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP\n}\n\n\nSAVE_FILE DIALOG 36, 24, 275, 134\nSTYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\nCAPTION \"Save As...\"\nFONT 8, \"MS Shell Dlg\"\n{\n LTEXT \"File &Name:\", stc3, 6, 6, 76, 9\n EDITTEXT edt1, 6, 16, 90, 12, ES_AUTOHSCROLL | ES_OEMCONVERT | WS_BORDER | WS_TABSTOP\n LISTBOX lst1, 6, 32, 90, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP\n LTEXT \"&Directories:\", -1, 110, 6, 92, 9\n LTEXT \"\", stc1, 110, 18, 92, 9, SS_NOPREFIX | WS_GROUP\n LISTBOX lst2, 110, 32, 92, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP\n LTEXT \"List Files of &Type:\", stc2, 6, 104, 90, 9\n COMBOBOX cmb1, 6, 114, 90, 60, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP\n LTEXT \"Dri&ves:\", stc4, 110, 104, 92, 9\n COMBOBOX cmb2, 110, 114, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP\n DEFPUSHBUTTON \"Save As\", IDOK, 208, 6, 60, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP\n PUSHBUTTON \"Cancel\", IDCANCEL, 208, 24, 60, 14, WS_GROUP | WS_TABSTOP\n PUSHBUTTON \"&Help\", pshHelp, 208, 46, 60, 14, WS_GROUP | WS_TABSTOP\n CHECKBOX \"&Read Only\", chx1, 208, 68, 65, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP\n}\n\n\nPRINT DIALOG 36, 24, 264, 134\nSTYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\nCAPTION \"Print\"\nFONT 8, \"MS Shell Dlg\"\n{\n LTEXT \"Printer:\", stc6, 6, 6, 40, 9\n LTEXT \"\", stc1, 60, 6, 150, 9\n GROUPBOX \"Print range\", grp1, 6, 30, 160, 65, BS_GROUPBOX\n RADIOBUTTON \"&All\", rad1, 16, 45, 60, 12\n RADIOBUTTON \"S&election\", rad2, 16, 60, 60, 12\n RADIOBUTTON \"&Pages\", rad4, 16, 75, 60, 12\n DEFPUSHBUTTON \"Print\", IDOK, 206, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP\n PUSHBUTTON \"Cancel\", IDCANCEL, 206, 24, 56, 14, WS_GROUP | WS_TABSTOP\n PUSHBUTTON \"&Setup\", psh1, 206, 46, 56, 14, WS_GROUP | WS_TABSTOP\n PUSHBUTTON \"&Help\", psh15, 206, 75, 56, 14, WS_GROUP | WS_TABSTOP\n LTEXT \"&From:\", stc2, 60, 80, 30, 9\n EDITTEXT edt1, 80, 78, 26, 12, ES_RIGHT | WS_BORDER | WS_TABSTOP\n LTEXT \"&To:\", stc3, 120, 80, 30, 9\n EDITTEXT edt2, 135, 78, 26, 12, ES_RIGHT | WS_BORDER | WS_TABSTOP\n LTEXT \"Print &Quality:\", stc4, 6, 100, 76, 9\n LTEXT \"&Copies:\", stc5, 180, 100, 29, 9\n EDITTEXT edt3, 205, 98, 26, 12, ES_RIGHT | WS_BORDER | WS_TABSTOP\n COMBOBOX cmb1, 80, 100, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP\n CHECKBOX \"Print to Fi&le\", chx1, 20, 120, 50, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP\n CHECKBOX \"Condensed\", chx2, 160, 120, 50, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP\n}\n\nPRINT_SETUP DIALOG 36, 24, 264, 134\nSTYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\nCAPTION \"Print Setup\"\nFONT 8, \"MS Shell Dlg\"\n{\n GROUPBOX \"Printer\", grp3, 6, 6, 180, 72, BS_GROUPBOX\n RADIOBUTTON \"&Default Printer\", rad3, 16, 16, 150, 12\n LTEXT \"[none]\", stc1, 35, 30, 120, 9\n RADIOBUTTON \"Specific &Printer\", rad4, 16, 44, 150, 12\n COMBOBOX cmb1, 35, 58, 145, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP\n DEFPUSHBUTTON \"OK\", IDOK, 206, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP\n PUSHBUTTON \"Cancel\", IDCANCEL, 206, 24, 56, 14, WS_GROUP | WS_TABSTOP\n PUSHBUTTON \"&Setup\", psh1, 206, 46, 56, 14, WS_GROUP | WS_TABSTOP\n GROUPBOX \"Orientation\", grp1, 6, 82, 100, 50, BS_GROUPBOX\n RADIOBUTTON \"Po&rtrait\", rad1, 50, 95, 50, 12\n RADIOBUTTON \"&Landscape\", rad2, 50, 110, 50, 12\n ICON \"LANDSCAP\", ico1, 10, 95, 32, 32\n GROUPBOX \"Paper\", grp2, 116, 82, 178, 50, BS_GROUPBOX\n LTEXT \"Si&ze\", stc2, 126, 95, 35, 9\n LTEXT \"&Source\", stc3, 126, 110, 35, 9\n COMBOBOX cmb2, 155, 95, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP\n COMBOBOX cmb3, 155, 110, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP\n}\n\n\nCHOOSE_FONT DIALOG  13, 54, 274, 147\nSTYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\nCAPTION \"Font\"\nFONT 8, \"MS Shell Dlg\"\n{\n    LTEXT           \"&Font:\",stc1 ,6,3,90,9\n    COMBOBOX        cmb1, 6,13,94,54,  CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL |\n                    CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE\n    LTEXT           \"Font St&yle:\",stc2 ,108,3,60,9\n    COMBOBOX        cmb2,108,13,64,54, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL |\n                    WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE\n    LTEXT           \"&Size:\",stc3,179,3,32,9\n    COMBOBOX        cmb3,179,13,32,54, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL |\n                    WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE | CBS_SORT\n    DEFPUSHBUTTON   \"OK\",IDOK,218,6,50,14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON\n    PUSHBUTTON      \"Cancel\",IDCANCEL,218,23,50,14,WS_GROUP | WS_TABSTOP\n    PUSHBUTTON      \"&Apply\", psh3,218,40,50,14,WS_GROUP | WS_TABSTOP\n    PUSHBUTTON      \"&Help\" , pshHelp,218,57,50,14,WS_GROUP | WS_TABSTOP\n    GROUPBOX        \"Effects\",grp1,6,72,84,36,WS_GROUP\n    CHECKBOX\t    \"Stri&keout\", chx1, 10,82,78,10, BS_AUTOCHECKBOX | WS_TABSTOP\n    CHECKBOX \t    \"&Underline\", chx2, 10,94,78,10, BS_AUTOCHECKBOX\n    LTEXT           \"&Color:\", stc4 ,6,114,80,9\n    COMBOBOX        cmb4,6,124,84,100,CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS |\n\t\t    CBS_AUTOHSCROLL |  WS_BORDER | WS_VSCROLL | WS_TABSTOP\n    GROUPBOX        \"Sample\",grp2,98,72,120,36,WS_GROUP\n    CTEXT           \"\",stc5,103,81,109,24,SS_NOPREFIX | NOT WS_VISIBLE\n    CTEXT           \"\",stc6,98,123,120,90,SS_NOPREFIX | NOT WS_GROUP\n//    LTEXT           \"Scr&ipt:\",stc7 ,98,114,40,9\n//    COMBOBOX        cmb5,98,124,120,90,CBS_DROPDOWNLIST | CBS_HASSTRINGS |\n//\t\t    CBS_AUTOHSCROLL |   WS_VSCROLL | WS_TABSTOP\n}\n\n/* Color dialog controls */\n#define IDC_COLOR_LUMBAR 702\n#define IDC_COLOR_EDIT_H 703\n#define IDC_COLOR_EDIT_S 704\n#define IDC_COLOR_EDIT_L 705\n#define IDC_COLOR_EDIT_R 706\n#define IDC_COLOR_EDIT_G 707\n#define IDC_COLOR_EDIT_B 708\n#define IDC_COLOR_RESULT 709\n#define IDC_COLOR_GRAPH  710\n#define IDC_COLOR_ADD    712\n#define IDC_COLOR_RES    713\n#define IDC_COLOR_DEFINE 719\n#define IDC_COLOR_PREDEF 720\n#define IDC_COLOR_USRDEF 721\n#define IDC_COLOR_HL     723\n#define IDC_COLOR_SL     724\n#define IDC_COLOR_LL     725\n#define IDC_COLOR_RL     726\n#define IDC_COLOR_GL     727\n#define IDC_COLOR_BL 728\n\nCHOOSE_COLOR DIALOG 36, 24, 300, 185\nSTYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU\nCAPTION \"Color\"\nFONT 8, \"MS Shell Dlg\"\n{\n LTEXT \"&Basic Colors:\",   stc1, 4,    4,  140, 10\n LTEXT \"&Custom Colors:\",  stc2, 4,   106, 140, 10\n LTEXT \"Color |  Sol&id\",  stc3, 150, 151,  48, 10\n LTEXT   \"&Red:\", IDC_COLOR_RL /*1094*/,247,126,27,10\n EDITTEXT IDC_COLOR_EDIT_R, 275,124,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP\n LTEXT   \"&Green:\", IDC_COLOR_GL /*1095*/,247,140,27,10\n EDITTEXT IDC_COLOR_EDIT_G, 275,138,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP\n LTEXT   \"&Blue:\", IDC_COLOR_BL /*1096*/,247,154,27,10\n EDITTEXT IDC_COLOR_EDIT_B, 275,152,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP\n LTEXT  \"&Hue:\" , IDC_COLOR_HL /*1091*/,200,126,24,10\n EDITTEXT IDC_COLOR_EDIT_H, 224,124,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP\n LTEXT  \"#msgctxt#Saturation#&Sat:\", IDC_COLOR_SL /*1092*/,200,140,24,10\n EDITTEXT IDC_COLOR_EDIT_S, 224,138,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP\n LTEXT  \"#msgctxt#Luminance#&Lum:\", IDC_COLOR_LL /*1093*/,200,154,24,10\n EDITTEXT IDC_COLOR_EDIT_L, 224,152,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP\n CONTROL \"\" , IDC_COLOR_PREDEF, \"STATIC\",SS_SIMPLE|WS_TABSTOP|WS_GROUP,4,14,140,86\n CONTROL \"\" , IDC_COLOR_USRDEF, \"STATIC\",SS_SIMPLE|WS_TABSTOP|WS_GROUP,4,116,140,28\n CONTROL \"\" , IDC_COLOR_GRAPH, \"STATIC\",WS_BORDER|SS_SIMPLE|WS_TABSTOP|WS_GROUP, 152,4,118,116\n CONTROL \"\" , IDC_COLOR_LUMBAR, \"STATIC\",SS_SIMPLE|WS_TABSTOP|WS_GROUP, 278,4,8,116\n CONTROL \"\" , IDC_COLOR_RESULT, \"STATIC\",SS_SIMPLE|WS_TABSTOP|WS_GROUP, 152,124,40,26\n DEFPUSHBUTTON \"OK\",  IDOK,  4, 167, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP\n PUSHBUTTON \"Cancel\", IDCANCEL, 58, 167, 50, 14, WS_GROUP | WS_TABSTOP\n PUSHBUTTON \"Help\", pshHelp,100,166, 44, 14\n PUSHBUTTON \"&Add to Custom Colors\",    IDC_COLOR_ADD /*1024*/, 152, 167, 144, 14, WS_GROUP | WS_TABSTOP\n PUSHBUTTON \"&Define Custom Colors >>\", IDC_COLOR_DEFINE /*1025*/,   4, 149, 142, 14, WS_GROUP | WS_TABSTOP\n PUSHBUTTON \"Color |  Sol&id\", IDC_COLOR_RES, 300,200,4,14   /* just a dummy */\n}\n\n"
  },
  {
    "path": "commdlg/commdlg.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{8914D84A-84BD-4F85-99AC-723F8AEABAEB}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>commdlg</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;COMMDLG_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)user.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;comdlg32.lib;user32.lib</AdditionalDependencies>\n      <ModuleDefinitionFile>commdlg.def</ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;COMMDLG_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ModuleDefinitionFile>commdlg.def</ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)user.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;comdlg32.lib;user32.lib</AdditionalDependencies>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"colordlg.c\" />\n    <ClCompile Include=\"filedlg.c\" />\n    <ClCompile Include=\"finddlg.c\" />\n    <ClCompile Include=\"fontdlg.c\" />\n    <ClCompile Include=\"printdlg.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"cdlg16.h\" />\n    <ClInclude Include=\"resource.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"commdlg.def\" />\n    <CustomBuild Include=\"commdlg.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" COMMDLG &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" COMMDLG &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"commdlg.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"commdlg.rc\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Image Include=\"dummy.bmp\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "commdlg/commdlg.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"ソース ファイル\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"ヘッダー ファイル\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"リソース ファイル\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"colordlg.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"filedlg.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"finddlg.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"fontdlg.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"printdlg.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"resource.h\">\n      <Filter>ヘッダー ファイル</Filter>\n    </ClInclude>\n    <ClInclude Include=\"cdlg16.h\">\n      <Filter>ヘッダー ファイル</Filter>\n    </ClInclude>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"commdlg.def\">\n      <Filter>ソース ファイル</Filter>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"commdlg.dll16.obj\">\n      <Filter>ソース ファイル</Filter>\n    </Object>\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"commdlg.dll16.spec\">\n      <Filter>ソース ファイル</Filter>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"commdlg.rc\">\n      <Filter>リソース ファイル</Filter>\n    </ResourceCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <Image Include=\"dummy.bmp\">\n      <Filter>リソース ファイル</Filter>\n    </Image>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "commdlg/filedlg.c",
    "content": "/*\n * COMMDLG - File Dialogs\n *\n * Copyright 1994 Martin Ayotte\n * Copyright 1996 Albrecht Kleine\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <assert.h>\n#include <stdarg.h>\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/winbase16.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n#include \"winternl.h\"\n#include \"commdlg.h\"\n#include \"cdlg16.h\"\n#include \"wine/debug.h\"\n#include <windows.h>\n#include \"resource.h\"\n#include <DbgHelp.h>\n\nWINE_DEFAULT_DEBUG_CHANNEL(commdlg);\n#define MAX_THUNK 5\nCOMMDLGTHUNK *thunk_array;\nUINT WMFILEOK;\nUINT WMHELPMSG;\nUINT WMFINDMSG;\nUINT WMCOLOROK;\nUINT WMSHAREVI;\nUINT WMWOWDirChange;\n\nLPDLGTEMPLATEA resource_to_dialog32(HINSTANCE16 hInst, LPCSTR name, WORD *res);\nLPDLGTEMPLATEA handle_to_dialog32(HGLOBAL16 hg, WORD *res);\n\nLRESULT WINAPI DIALOG_CallDialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, WNDPROC16 proc);\nstatic UINT_PTR CALLBACK thunk_hook(COMMDLGTHUNK *thunk, HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)\n{\n    /* window message hook? */\n    if (msg == WM_INITDIALOG || msg == WMFILEOK || msg == WMHELPMSG || msg == WMFINDMSG || msg == WMCOLOROK || msg == WMSHAREVI)\n    {\n        lp = thunk->segofn16;\n    }\n    UINT_PTR result = DIALOG_CallDialogProc(hwnd, msg, wp, lp, (WNDPROC16)thunk->func);\n    return result;\n}\n\nstatic void init_thunk()\n{\n    if (thunk_array)\n        return;\n    WMFILEOK = RegisterWindowMessageW(FILEOKSTRINGW);\n    WMHELPMSG = RegisterWindowMessageW(HELPMSGSTRINGW);\n    WMFINDMSG = RegisterWindowMessageW(FINDMSGSTRINGW);\n    WMCOLOROK = RegisterWindowMessageW(COLOROKSTRINGW);\n    WMSHAREVI = RegisterWindowMessageW(SHAREVISTRINGW);\n    /* undocumented */\n    WMWOWDirChange = RegisterWindowMessageW(L\"WOWDirChange\");\n    thunk_array = VirtualAlloc(NULL, MAX_THUNK * sizeof(COMMDLGTHUNK), MEM_COMMIT, PAGE_EXECUTE_READWRITE);\n}\n\nvoid delete_thunk(LPVOID func)\n{\n    if (func && (SIZE_T)thunk_array <= (SIZE_T)func && (SIZE_T)func <= (SIZE_T)(thunk_array + MAX_THUNK))\n    {\n        ((COMMDLGTHUNK*)func)->used = FALSE;\n    }\n}\n\nCOMMDLGTHUNK *allocate_thunk(SEGPTR ofnseg, SEGPTR func)\n{\n    init_thunk();\n    for (int i = 0; i < MAX_THUNK; i++)\n    {\n        if (!thunk_array[i].used)\n        {\n            thunk_array[i].pop_eax  = 0x58;\n            thunk_array[i].push     = 0x68;\n            thunk_array[i].this_    = (DWORD)(thunk_array + i);\n            thunk_array[i].push_eax = 0x50;\n            thunk_array[i].mov_eax  = 0xB8;\n            thunk_array[i].address  = (DWORD)thunk_hook;\n            thunk_array[i].jmp      = 0xFF;\n            thunk_array[i].eax      = 0xE0;\n            thunk_array[i].used     = TRUE;\n            thunk_array[i].func     = func;\n            thunk_array[i].segofn16 = ofnseg;\n            return thunk_array + i;\n        }\n    }\n    return NULL;\n}\n\n\nstatic inline WORD get_word( const char **ptr )\n{\n    WORD ret = *(WORD *)*ptr;\n    *ptr += sizeof(WORD);\n    return ret;\n}\n\nstatic inline void copy_string( WORD **out, const char **in, DWORD maxlen )\n{\n    DWORD len = MultiByteToWideChar( CP_ACP, 0, *in, -1, *out, maxlen );\n    *in += strlen(*in) + 1;\n    *out += len;\n}\n\nstatic inline void copy_dword( WORD **out, const char **in )\n{\n    *(DWORD *)*out = *(DWORD *)*in;\n    *in += sizeof(DWORD);\n    *out += sizeof(DWORD) / sizeof(WORD);\n}\n\nstatic LPDLGTEMPLATEA convert_dialog( const char *p, DWORD size )\n{\n    LPDLGTEMPLATEA dlg;\n    WORD len, count, *out, *end;\n\n    if (!(dlg = HeapAlloc( GetProcessHeap(), 0, size * 2 ))) return NULL;\n    out = (WORD *)dlg;\n    end = out + size;\n    copy_dword( &out, &p );  /* style */\n    *out++ = 0; *out++ = 0;  /* exstyle */\n    *out++ = count = (BYTE)*p++;  /* count */\n    *out++ = get_word( &p );  /* x */\n    *out++ = get_word( &p );  /* y */\n    *out++ = get_word( &p );  /* cx */\n    *out++ = get_word( &p );  /* cy */\n\n    if ((BYTE)*p == 0xff)  /* menu */\n    {\n        p++;\n        *out++ = 0xffff;\n        *out++ = get_word( &p );\n    }\n    else copy_string( &out, &p, end - out );\n\n    copy_string( &out, &p, end - out );  /* class */\n    copy_string( &out, &p, end - out );  /* caption */\n\n    if (dlg->style & DS_SETFONT)\n    {\n        *out++ = get_word( &p );  /* point size */\n        copy_string( &out, &p, end - out );  /* face name */\n    }\n\n    /* controls */\n    while (count--)\n    {\n        WORD x = get_word( &p );\n        WORD y = get_word( &p );\n        WORD cx = get_word( &p );\n        WORD cy = get_word( &p );\n        WORD id = get_word( &p );\n\n        out = (WORD *)(((UINT_PTR)out + 3) & ~3);\n\n        copy_dword( &out, &p );  /* style */\n        *out++ = 0; *out++ = 0;  /* exstyle */\n        *out++ = x;\n        *out++ = y;\n        *out++ = cx;\n        *out++ = cy;\n        *out++ = id;\n\n        if (*p & 0x80)  /* class */\n        {\n            *out++ = 0xffff;\n            *out++ = (BYTE)*p++;\n        }\n        else copy_string( &out, &p, end - out );\n\n        if (*p & 0x80)  /* window */\n        {\n            *out++ = 0xffff;\n            *out++ = get_word( &p );\n        }\n        else copy_string( &out, &p, end - out );\n\n        len = (BYTE)*p++;  /* data */\n        *out++ = (len + 1) & ~1;\n        memcpy( out, p, len );\n        p += len;\n        out += (len + 1) / sizeof(WORD);\n    }\n\n    assert( out <= end );\n    return dlg;\n}\n\nstatic UINT_PTR CALLBACK dummy_hook( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp )\n{\n    return FALSE;\n}\n\n/***********************************************************************\n *           FileOpenDlgProc   (COMMDLG.6)\n */\nBOOL16 CALLBACK FileOpenDlgProc16(HWND16 hWnd16, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam)\n{\n    FIXME( \"%04x %04x %04x %08lx: stub\\n\", hWnd16, wMsg, wParam, lParam );\n    return FALSE;\n}\n\n/***********************************************************************\n *           FileSaveDlgProc   (COMMDLG.7)\n */\nBOOL16 CALLBACK FileSaveDlgProc16(HWND16 hWnd16, UINT16 wMsg, WPARAM16 wParam, LPARAM lParam)\n{\n    FIXME( \"%04x %04x %04x %08lx: stub\\n\", hWnd16, wMsg, wParam, lParam );\n    return FALSE;\n}\n\nDWORD get_ofn_flag(DWORD flag)\n{\n    return (flag | OFN_NOLONGNAMES) & ~OFN_ENABLETEMPLATE;\n}\n/***********************************************************************\n *           GetOpenFileName   (COMMDLG.1)\n *\n * Creates a dialog box for the user to select a file to open.\n *\n * RETURNS\n *    TRUE on success: user selected a valid file\n *    FALSE on cancel, error, close or filename-does-not-fit-in-buffer.\n *\n * BUGS\n *    unknown, there are some FIXMEs left.\n */\nBOOL16 WINAPI GetOpenFileName16( SEGPTR ofn ) /* [in/out] address of structure with data*/\n{\n    LPOPENFILENAME16 lpofn = MapSL(ofn);\n    LPDLGTEMPLATEA template = NULL;\n    OPENFILENAMEA ofn32;\n    BOOL ret;\n    DWORD count;\n    WORD res = NULL;\n\n    if (!lpofn) return FALSE;\n    OPENFILENAME16 ofn16 = *lpofn;\n\n    ofn32.lStructSize       = OPENFILENAME_SIZE_VERSION_400A;\n    ofn32.hwndOwner         = HWND_32( lpofn->hwndOwner );\n    ofn32.lpstrFilter       = MapSL( lpofn->lpstrFilter );\n    ofn32.lpstrCustomFilter = MapSL( lpofn->lpstrCustomFilter );\n    ofn32.nMaxCustFilter    = lpofn->nMaxCustFilter;\n    ofn32.nFilterIndex      = lpofn->nFilterIndex;\n    ofn32.lpstrFile         = MapSL( lpofn->lpstrFile );\n    ofn32.nMaxFile          = lpofn->nMaxFile;\n    ofn32.lpstrFileTitle    = MapSL( lpofn->lpstrFileTitle );\n    ofn32.nMaxFileTitle     = lpofn->nMaxFileTitle;\n    ofn32.lpstrInitialDir   = MapSL( lpofn->lpstrInitialDir );\n    ofn32.lpstrTitle        = MapSL( lpofn->lpstrTitle );\n    ofn32.Flags             = get_ofn_flag(lpofn->Flags | OFN_ENABLEHOOK);\n    ofn32.nFileOffset       = lpofn->nFileOffset;\n    ofn32.nFileExtension    = lpofn->nFileExtension;\n    ofn32.lpstrDefExt       = MapSL( lpofn->lpstrDefExt );\n    ofn32.lCustData         = lpofn->lCustData;\n    ofn32.lpfnHook          = dummy_hook;  /* this is to force old 3.1 dialog style */\n    ofn32.lpTemplateName    = NULL;\n    ofn32.hInstance         = GetModuleHandleW(L\"commdlg.dll16\");\n\n    if ((lpofn->Flags & OFN_ENABLETEMPLATE) || (lpofn->Flags & OFN_ENABLETEMPLATEHANDLE))\n    {\n        if (lpofn->Flags & OFN_ENABLETEMPLATE)\n            template = resource_to_dialog32(lpofn->hInstance, MapSL(lpofn->lpTemplateName), &res);\n        else\n            template = handle_to_dialog32(lpofn->hInstance, &res);\n        ofn32.hInstance = template;\n        ofn32.Flags |= OFN_ENABLETEMPLATEHANDLE;\n    }\n\n    if (lpofn->Flags & OFN_ENABLEHOOK)\n    {\n        ofn32.lpfnHook = (LPOFNHOOKPROC)allocate_thunk(ofn, (SEGPTR)lpofn->lpfnHook);\n        ((COMMDLGTHUNK*)ofn32.lpfnHook)->ofn16 = ofn16;\n        if (!ofn32.lpfnHook)\n        {\n            ERR(\"could not allocate GetOpenFileName16 thunk\\n\");\n            ofn32.lpfnHook = dummy_hook;\n        }\n    }\n\n    if (ofn32.lpstrFile && ofn32.lpstrFile[0])\n        CharUpperBuffA(ofn32.lpstrFile, min(strlen(ofn32.lpstrFile), ofn32.nMaxFile));\n\n    ReleaseThunkLock(&count);\n    if ((ret = GetOpenFileNameA( &ofn32 )))\n    {\n        lpofn->nFilterIndex   = ofn32.nFilterIndex;\n        lpofn->nFileOffset    = ofn32.nFileOffset;\n        lpofn->nFileExtension = ofn32.nFileExtension;\n        if (ofn32.lpstrFile && ofn32.lpstrFile[0])\n            CharUpperBuffA(ofn32.lpstrFile, min(strlen(ofn32.lpstrFile), ofn32.nMaxFile));\n    }\n    RestoreThunkLock(count);\n    if (res)\n    {\n        if (lpofn->Flags & OFN_ENABLETEMPLATE)\n            FreeResource16(res);\n        else if (lpofn->Flags & OFN_ENABLETEMPLATEHANDLE)\n            WOWGlobalUnlock16(res);\n    }\n    delete_thunk(ofn32.lpfnHook);\n    HeapFree( GetProcessHeap(), 0, template );\n    return ret;\n}\n\n/***********************************************************************\n *           GetSaveFileName   (COMMDLG.2)\n *\n * Creates a dialog box for the user to select a file to save.\n *\n * RETURNS\n *    TRUE on success: user enters a valid file\n *    FALSE on cancel, error, close or filename-does-not-fit-in-buffer.\n *\n * BUGS\n *    unknown. There are some FIXMEs left.\n */\nBOOL16 WINAPI GetSaveFileName16( SEGPTR ofn ) /* [in/out] address of structure with data*/\n{\n    LPOPENFILENAME16 lpofn = MapSL(ofn);\n    LPDLGTEMPLATEA template = NULL;\n    OPENFILENAMEA ofn32;\n    BOOL ret;\n    DWORD count;\n    WORD res = NULL;\n\n    if (!lpofn) return FALSE;\n    OPENFILENAME16 ofn16 = *lpofn;\n\n    ofn32.lStructSize       = OPENFILENAME_SIZE_VERSION_400A;\n    ofn32.hwndOwner         = HWND_32( lpofn->hwndOwner );\n    ofn32.lpstrFilter       = MapSL( lpofn->lpstrFilter );\n    ofn32.lpstrCustomFilter = MapSL( lpofn->lpstrCustomFilter );\n    ofn32.nMaxCustFilter    = lpofn->nMaxCustFilter;\n    ofn32.nFilterIndex      = lpofn->nFilterIndex;\n    ofn32.lpstrFile         = MapSL( lpofn->lpstrFile );\n    ofn32.nMaxFile          = lpofn->nMaxFile;\n    ofn32.lpstrFileTitle    = MapSL( lpofn->lpstrFileTitle );\n    ofn32.nMaxFileTitle     = lpofn->nMaxFileTitle;\n    ofn32.lpstrInitialDir   = MapSL( lpofn->lpstrInitialDir );\n    ofn32.lpstrTitle        = MapSL( lpofn->lpstrTitle );\n    ofn32.Flags             = get_ofn_flag(lpofn->Flags | OFN_ENABLEHOOK);\n    ofn32.nFileOffset       = lpofn->nFileOffset;\n    ofn32.nFileExtension    = lpofn->nFileExtension;\n    ofn32.lpstrDefExt       = MapSL( lpofn->lpstrDefExt );\n    ofn32.lCustData         = lpofn->lCustData;\n    ofn32.lpfnHook          = dummy_hook;  /* this is to force old 3.1 dialog style */\n    ofn32.lpTemplateName    = NULL;\n    ofn32.hInstance         = GetModuleHandleW(L\"commdlg.dll16\");\n\n    if ((lpofn->Flags & OFN_ENABLETEMPLATE) || (lpofn->Flags & OFN_ENABLETEMPLATEHANDLE))\n    {\n        if (lpofn->Flags & OFN_ENABLETEMPLATE)\n            template = resource_to_dialog32(lpofn->hInstance, MapSL(lpofn->lpTemplateName), &res);\n        else\n            template = handle_to_dialog32(lpofn->hInstance, &res);\n        ofn32.hInstance = template;\n        ofn32.Flags |= OFN_ENABLETEMPLATEHANDLE;\n    }\n\n    if (lpofn->Flags & OFN_ENABLEHOOK)\n    {\n        ofn32.lpfnHook = (LPOFNHOOKPROC)allocate_thunk(ofn, (SEGPTR)lpofn->lpfnHook);\n        ((COMMDLGTHUNK*)ofn32.lpfnHook)->ofn16 = ofn16;\n        if (!ofn32.lpfnHook)\n        {\n            ERR(\"could not allocate GetOpenFileName16 thunk\\n\");\n            ofn32.lpfnHook = dummy_hook;\n        }\n    }\n    if (ofn32.lpstrFile && ofn32.lpstrFile[0])\n        CharUpperBuffA(ofn32.lpstrFile, min(strlen(ofn32.lpstrFile), ofn32.nMaxFile));\n\n    ReleaseThunkLock(&count);\n    if ((ret = GetSaveFileNameA( &ofn32 )))\n    {\n        lpofn->nFilterIndex   = ofn32.nFilterIndex;\n        lpofn->nFileOffset    = ofn32.nFileOffset;\n        lpofn->nFileExtension = ofn32.nFileExtension;\n        if (ofn32.lpstrFile && ofn32.lpstrFile[0])\n            CharUpperBuffA(ofn32.lpstrFile, min(strlen(ofn32.lpstrFile), ofn32.nMaxFile));\n    }\n    RestoreThunkLock(count);\n    if (res)\n    {\n        if (lpofn->Flags & OFN_ENABLETEMPLATE)\n            FreeResource16(res);\n        else if (lpofn->Flags & OFN_ENABLETEMPLATEHANDLE)\n            WOWGlobalUnlock16(res);\n    }\n    delete_thunk(ofn32.lpfnHook);\n    HeapFree( GetProcessHeap(), 0, template );\n    return ret;\n}\n\n\n/***********************************************************************\n *\tGetFileTitle\t\t(COMMDLG.27)\n */\nshort WINAPI GetFileTitle16(LPCSTR lpFile, LPSTR lpTitle, UINT16 cbBuf)\n{\n\treturn GetFileTitleA(lpFile, lpTitle, cbBuf);\n}\n"
  },
  {
    "path": "commdlg/finddlg.c",
    "content": "/*\n * COMMDLG - 16 bits Find & Replace Text Dialogs\n *\n * Copyright 1994 Martin Ayotte\n * Copyright 1996 Albrecht Kleine\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <ctype.h>\n#include <stdarg.h>\n#include <stdlib.h>\n#include <string.h>\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/winbase16.h\"\n#include \"wine/winuser16.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n#include \"commdlg.h\"\n#include \"cderr.h\"\n#include \"cdlg16.h\"\n\nLRESULT WINAPI DIALOG_CallDialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, WNDPROC16 proc);\n\nLPDLGTEMPLATEA resource_to_dialog32(HINSTANCE16 hInst, LPCSTR name, WORD *res);\nLPDLGTEMPLATEA handle_to_dialog32(HGLOBAL16 hg, WORD *res);\n\n/***********************************************************************\n *                              FINDDLG_WMCommand               [internal]\n */\nstatic LRESULT FINDDLG_WMCommand(HWND hWnd, WPARAM wParam,\n                                 HWND hwndOwner, LPDWORD lpFlags,\n                                 LPSTR lpstrFindWhat, WORD wFindWhatLen)\n{\n    int uFindReplaceMessage = RegisterWindowMessageA( FINDMSGSTRINGA );\n    int uHelpMessage = RegisterWindowMessageA( HELPMSGSTRINGA );\n\n    switch (LOWORD(wParam)) {\n\tcase IDOK:\n            GetDlgItemTextA(hWnd, edt1, lpstrFindWhat, wFindWhatLen);\n\t    if (IsDlgButtonChecked(hWnd, rad2))\n\t\t*lpFlags |= FR_DOWN;\n\t\telse *lpFlags &= ~FR_DOWN;\n\t    if (IsDlgButtonChecked(hWnd, chx1))\n\t\t*lpFlags |= FR_WHOLEWORD;\n\t\telse *lpFlags &= ~FR_WHOLEWORD;\n\t    if (IsDlgButtonChecked(hWnd, chx2))\n\t\t*lpFlags |= FR_MATCHCASE;\n\t\telse *lpFlags &= ~FR_MATCHCASE;\n            *lpFlags &= ~(FR_REPLACE | FR_REPLACEALL | FR_DIALOGTERM);\n\t    *lpFlags |= FR_FINDNEXT;\n\t    SendMessageW( hwndOwner, uFindReplaceMessage, 0,\n                          GetWindowLongPtrW(hWnd, DWLP_USER) );\n\t    return TRUE;\n\tcase IDCANCEL:\n            *lpFlags &= ~(FR_FINDNEXT | FR_REPLACE | FR_REPLACEALL);\n\t    *lpFlags |= FR_DIALOGTERM;\n\t    SendMessageW( hwndOwner, uFindReplaceMessage, 0,\n                          GetWindowLongPtrW(hWnd, DWLP_USER) );\n\t    DestroyWindow(hWnd);\n\t    return TRUE;\n\tcase pshHelp:\n\t    /* FIXME : should lpfr structure be passed as an argument ??? */\n\t    SendMessageA(hwndOwner, uHelpMessage, 0, 0);\n\t    return TRUE;\n    }\n    return FALSE;\n}\n\n\n/***********************************************************************\n *           find_text_dlgproc   (internal)\n */\nstatic INT_PTR CALLBACK find_text_dlgproc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)\n{\n    LPFINDREPLACE16 lpfr;\n    DWORD lpFlags;\n    LRESULT ret = FALSE;\n    if (wMsg == WM_INITDIALOG)\n    {\n        lpfr = MapSL(lParam);\n        SetWindowLongPtrW(hWnd, DWLP_USER, lParam);\n        lpfr->Flags &= ~(FR_FINDNEXT | FR_REPLACE | FR_REPLACEALL | FR_DIALOGTERM);\n        lpFlags = lpfr->Flags;\n        /*\n         * FIXME : If the initial FindWhat string is empty, we should disable the\n         * FindNext (IDOK) button.  Only after typing some text, the button should be\n         * enabled.\n         */\n        SetDlgItemTextA(hWnd, edt1, lpfr->lpstrFindWhat);\n        CheckRadioButton(hWnd, rad1, rad2, (lpFlags & FR_DOWN) ? rad2 : rad1);\n        if (lpFlags & (FR_HIDEUPDOWN | FR_NOUPDOWN)) {\n            EnableWindow(GetDlgItem(hWnd, rad1), FALSE);\n            EnableWindow(GetDlgItem(hWnd, rad2), FALSE);\n        }\n        if (lpFlags & FR_HIDEUPDOWN) {\n            ShowWindow(GetDlgItem(hWnd, rad1), SW_HIDE);\n            ShowWindow(GetDlgItem(hWnd, rad2), SW_HIDE);\n            ShowWindow(GetDlgItem(hWnd, grp1), SW_HIDE);\n        }\n        CheckDlgButton(hWnd, chx1, (lpFlags & FR_WHOLEWORD) ? 1 : 0);\n        if (lpFlags & (FR_HIDEWHOLEWORD | FR_NOWHOLEWORD))\n            EnableWindow(GetDlgItem(hWnd, chx1), FALSE);\n        if (lpFlags & FR_HIDEWHOLEWORD)\n            ShowWindow(GetDlgItem(hWnd, chx1), SW_HIDE);\n        CheckDlgButton(hWnd, chx2, (lpFlags & FR_MATCHCASE) ? 1 : 0);\n        if (lpFlags & (FR_HIDEMATCHCASE | FR_NOMATCHCASE))\n            EnableWindow(GetDlgItem(hWnd, chx2), FALSE);\n        if (lpFlags & FR_HIDEMATCHCASE)\n            ShowWindow(GetDlgItem(hWnd, chx2), SW_HIDE);\n        if (!(lpFlags & FR_SHOWHELP)) {\n            EnableWindow(GetDlgItem(hWnd, pshHelp), FALSE);\n            ShowWindow(GetDlgItem(hWnd, pshHelp), SW_HIDE);\n        }\n        ret = TRUE;\n        if (lpFlags & FR_ENABLEHOOK)\n            ret = DIALOG_CallDialogProc(hWnd, wMsg, wParam, lParam, lpfr->lpfnHook);\n        if (ret) ShowWindow(hWnd, SW_SHOWNORMAL);\n        return TRUE;\n    }\n    lpfr = MapSL(GetWindowLongPtrW(hWnd, DWLP_USER));\n    if (lpfr && (lpfr->Flags & FR_ENABLEHOOK))\n        ret = DIALOG_CallDialogProc(hWnd, wMsg, wParam, lParam, lpfr->lpfnHook);\n    if (!ret)\n    {\n        switch (wMsg)\n        {\n            case WM_COMMAND:\n                return FINDDLG_WMCommand(hWnd, wParam, HWND_32(lpfr->hwndOwner),\n                    &lpfr->Flags, MapSL(lpfr->lpstrFindWhat), lpfr->wFindWhatLen);\n        }\n    }\n    return FALSE;\n}\n\n\n/***********************************************************************\n *           FindText   (COMMDLG.11)\n */\nHWND16 WINAPI FindText16( SEGPTR find )\n{\n    FINDREPLACE16 *fr16 = MapSL( find );\n    LPDLGTEMPLATEA template = NULL;\n    HWND16 ret;\n\n    if ((fr16->Flags & FR_ENABLETEMPLATE) || (fr16->Flags & FR_ENABLETEMPLATEHANDLE))\n    {\n        if (fr16->Flags & FR_ENABLETEMPLATE)\n            template = resource_to_dialog32(fr16->hInstance, MapSL(fr16->lpTemplateName), NULL);\n        else\n            template = handle_to_dialog32(fr16->hInstance, NULL);\n        ret = HWND_16(CreateDialogIndirectParamA(fr16->hInstance, template,\n                                HWND_32(fr16->hwndOwner), find_text_dlgproc, find));\n        HeapFree(GetProcessHeap(), 0, template);\n    }\n    else\n        ret = HWND_16( CreateDialogParamA( GetModuleHandleA(\"comdlg32.dll\"), MAKEINTRESOURCEA(FINDDLGORD),\n                                        HWND_32(fr16->hwndOwner), find_text_dlgproc, find ));\n    return ret;\n}\n\n\n/***********************************************************************\n *           FindTextDlgProc   (COMMDLG.13)\n */\nBOOL16 CALLBACK FindTextDlgProc16(HWND16 hWnd16, UINT16 wMsg, WPARAM16 wParam,\n                                 LPARAM lParam)\n{\n    return find_text_dlgproc( HWND_32(hWnd16), wMsg, wParam, lParam );\n}\n\n\n/***********************************************************************\n *                              REPLACEDLG_WMInitDialog         [internal]\n */\nstatic LRESULT REPLACEDLG_WMInitDialog(HWND hWnd, LPARAM lParam,\n\t\t    LPDWORD lpFlags, LPCSTR lpstrFindWhat,\n\t\t    LPCSTR lpstrReplaceWith)\n{\n}\n\n\n/***********************************************************************\n *                              REPLACEDLG_WMCommand            [internal]\n */\nstatic LRESULT REPLACEDLG_WMCommand(HWND hWnd, WPARAM wParam,\n                                    HWND hwndOwner, LPDWORD lpFlags,\n                                    LPSTR lpstrFindWhat, WORD wFindWhatLen,\n                                    LPSTR lpstrReplaceWith, WORD wReplaceWithLen)\n{\n    int uFindReplaceMessage = RegisterWindowMessageA( FINDMSGSTRINGA );\n    int uHelpMessage = RegisterWindowMessageA( HELPMSGSTRINGA );\n\n    switch (LOWORD(wParam)) {\n\tcase IDOK:\n            GetDlgItemTextA(hWnd, edt1, lpstrFindWhat, wFindWhatLen);\n            GetDlgItemTextA(hWnd, edt2, lpstrReplaceWith, wReplaceWithLen);\n\t    if (IsDlgButtonChecked(hWnd, chx1))\n\t\t*lpFlags |= FR_WHOLEWORD;\n\t\telse *lpFlags &= ~FR_WHOLEWORD;\n\t    if (IsDlgButtonChecked(hWnd, chx2))\n\t\t*lpFlags |= FR_MATCHCASE;\n\t\telse *lpFlags &= ~FR_MATCHCASE;\n            *lpFlags &= ~(FR_REPLACE | FR_REPLACEALL | FR_DIALOGTERM);\n\t    *lpFlags |= FR_FINDNEXT;\n\t    SendMessageW( hwndOwner, uFindReplaceMessage, 0,\n                          GetWindowLongPtrW(hWnd, DWLP_USER) );\n\t    return TRUE;\n\tcase IDCANCEL:\n            *lpFlags &= ~(FR_FINDNEXT | FR_REPLACE | FR_REPLACEALL);\n\t    *lpFlags |= FR_DIALOGTERM;\n\t    SendMessageW( hwndOwner, uFindReplaceMessage, 0,\n                          GetWindowLongPtrW(hWnd, DWLP_USER) );\n\t    DestroyWindow(hWnd);\n\t    return TRUE;\n\tcase psh1:\n            GetDlgItemTextA(hWnd, edt1, lpstrFindWhat, wFindWhatLen);\n            GetDlgItemTextA(hWnd, edt2, lpstrReplaceWith, wReplaceWithLen);\n\t    if (IsDlgButtonChecked(hWnd, chx1))\n\t\t*lpFlags |= FR_WHOLEWORD;\n\t\telse *lpFlags &= ~FR_WHOLEWORD;\n\t    if (IsDlgButtonChecked(hWnd, chx2))\n\t\t*lpFlags |= FR_MATCHCASE;\n\t\telse *lpFlags &= ~FR_MATCHCASE;\n            *lpFlags &= ~(FR_FINDNEXT | FR_REPLACEALL | FR_DIALOGTERM);\n\t    *lpFlags |= FR_REPLACE;\n\t    SendMessageW( hwndOwner, uFindReplaceMessage, 0,\n                          GetWindowLongPtrW(hWnd, DWLP_USER) );\n\t    return TRUE;\n\tcase psh2:\n            GetDlgItemTextA(hWnd, edt1, lpstrFindWhat, wFindWhatLen);\n            GetDlgItemTextA(hWnd, edt2, lpstrReplaceWith, wReplaceWithLen);\n\t    if (IsDlgButtonChecked(hWnd, chx1))\n\t\t*lpFlags |= FR_WHOLEWORD;\n\t\telse *lpFlags &= ~FR_WHOLEWORD;\n\t    if (IsDlgButtonChecked(hWnd, chx2))\n\t\t*lpFlags |= FR_MATCHCASE;\n\t\telse *lpFlags &= ~FR_MATCHCASE;\n            *lpFlags &= ~(FR_FINDNEXT | FR_REPLACE | FR_DIALOGTERM);\n\t    *lpFlags |= FR_REPLACEALL;\n\t    SendMessageW( hwndOwner, uFindReplaceMessage, 0,\n                          GetWindowLongPtrW(hWnd, DWLP_USER) );\n\t    return TRUE;\n\tcase pshHelp:\n\t    /* FIXME : should lpfr structure be passed as an argument ??? */\n\t    SendMessageA(hwndOwner, uHelpMessage, 0, 0);\n\t    return TRUE;\n    }\n    return FALSE;\n}\n\n\n/***********************************************************************\n *           replace_text_dlgproc\n */\nstatic INT_PTR CALLBACK replace_text_dlgproc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)\n{\n    LPFINDREPLACE16 lpfr;\n    DWORD lpFlags;\n    LRESULT ret = FALSE;\n    if (wMsg == WM_INITDIALOG)\n    {\n        lpfr=MapSL(lParam);\n        SetWindowLongPtrW(hWnd, DWLP_USER, lParam);\n        lpfr->Flags &= ~(FR_FINDNEXT | FR_REPLACE | FR_REPLACEALL | FR_DIALOGTERM);\n        lpFlags = lpfr->Flags;\n        /*\n         * FIXME : If the initial FindWhat string is empty, we should disable the FindNext /\n         * Replace / ReplaceAll buttons.  Only after typing some text, the buttons should be\n         * enabled.\n         */\n        SetDlgItemTextA(hWnd, edt1, lpfr->lpstrFindWhat);\n        SetDlgItemTextA(hWnd, edt2, lpfr->lpstrReplaceWith);\n        CheckDlgButton(hWnd, chx1, (lpFlags & FR_WHOLEWORD) ? 1 : 0);\n        if (lpFlags & (FR_HIDEWHOLEWORD | FR_NOWHOLEWORD))\n            EnableWindow(GetDlgItem(hWnd, chx1), FALSE);\n        if (lpFlags & FR_HIDEWHOLEWORD)\n            ShowWindow(GetDlgItem(hWnd, chx1), SW_HIDE);\n        CheckDlgButton(hWnd, chx2, (lpFlags & FR_MATCHCASE) ? 1 : 0);\n        if (lpFlags & (FR_HIDEMATCHCASE | FR_NOMATCHCASE))\n            EnableWindow(GetDlgItem(hWnd, chx2), FALSE);\n        if (lpFlags & FR_HIDEMATCHCASE)\n            ShowWindow(GetDlgItem(hWnd, chx2), SW_HIDE);\n        if (!(lpFlags & FR_SHOWHELP)) {\n            EnableWindow(GetDlgItem(hWnd, pshHelp), FALSE);\n            ShowWindow(GetDlgItem(hWnd, pshHelp), SW_HIDE);\n        }\n        ret = TRUE;\n        if (lpFlags & FR_ENABLEHOOK)\n            ret = DIALOG_CallDialogProc(hWnd, wMsg, wParam, lParam, lpfr->lpfnHook);\n        if (ret) ShowWindow(hWnd, SW_SHOWNORMAL);\n        return TRUE;\n    }\n    lpfr = MapSL(GetWindowLongPtrW(hWnd, DWLP_USER));\n    if (lpfr && (lpfr->Flags & FR_ENABLEHOOK))\n        ret = DIALOG_CallDialogProc(hWnd, wMsg, wParam, lParam, lpfr->lpfnHook);\n    if (!ret)\n    {\n        switch (wMsg)\n        {\n            case WM_COMMAND:\n                return REPLACEDLG_WMCommand(hWnd, wParam, HWND_32(lpfr->hwndOwner),\n                        &lpfr->Flags, MapSL(lpfr->lpstrFindWhat),\n                        lpfr->wFindWhatLen, MapSL(lpfr->lpstrReplaceWith),\n                        lpfr->wReplaceWithLen);\n        }\n    }\n    return FALSE;\n}\n\n\n/***********************************************************************\n *           ReplaceText   (COMMDLG.12)\n */\nHWND16 WINAPI ReplaceText16( SEGPTR find )\n{\n    FINDREPLACE16 *fr16 = MapSL( find );\n    LPDLGTEMPLATEA template = NULL;\n    HWND16 ret;\n\n    if ((fr16->Flags & FR_ENABLETEMPLATE) || (fr16->Flags & FR_ENABLETEMPLATEHANDLE))\n    {\n        if (fr16->Flags & FR_ENABLETEMPLATE)\n            template = resource_to_dialog32(fr16->hInstance, MapSL(fr16->lpTemplateName), NULL);\n        else\n            template = handle_to_dialog32(fr16->hInstance, NULL);\n        ret = HWND_16(CreateDialogIndirectParamA(fr16->hInstance, template,\n                                HWND_32(fr16->hwndOwner), replace_text_dlgproc, find));\n        HeapFree(GetProcessHeap(), 0, template);\n    }\n    else\n        ret = HWND_16( CreateDialogParamA( GetModuleHandleA(\"comdlg32.dll\"), MAKEINTRESOURCEA(FINDDLGORD),\n                                        HWND_32(fr16->hwndOwner), replace_text_dlgproc, find ));\n    return ret;\n}\n\n\n/***********************************************************************\n *           ReplaceTextDlgProc   (COMMDLG.14)\n */\nBOOL16 CALLBACK ReplaceTextDlgProc16(HWND16 hWnd16, UINT16 wMsg, WPARAM16 wParam,\n                                    LPARAM lParam)\n{\n    return replace_text_dlgproc( HWND_32(hWnd16), wMsg, wParam, lParam );\n}\n\n\n/***********************************************************************\n *\tCommDlgExtendedError\t\t\t(COMMDLG.26)\n */\nDWORD WINAPI CommDlgExtendedError16(void)\n{\n    return CommDlgExtendedError();\n}\n"
  },
  {
    "path": "commdlg/fontdlg.c",
    "content": "/*\n * COMMDLG - Font Dialog\n *\n * Copyright 1994 Martin Ayotte\n * Copyright 1996 Albrecht Kleine\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <ctype.h>\n#include <stdlib.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <string.h>\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n#include \"wine/winbase16.h\"\n#include \"wine/winuser16.h\"\n#include \"commdlg.h\"\n#include \"wine/debug.h\"\n#include \"cderr.h\"\n#include \"cdlg16.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(commdlg);\n\nLPDLGTEMPLATEA resource_to_dialog32(HINSTANCE16 hInst, LPCSTR name, WORD *res);\nLPDLGTEMPLATEA handle_to_dialog32(HGLOBAL16 hg, WORD *res);\n\n/***********************************************************************\n *                FontFamilyEnumProc                     (COMMDLG.19)\n */\nINT16 WINAPI FontFamilyEnumProc16( SEGPTR logfont, SEGPTR metrics,\n                                   UINT16 nFontType, LPARAM lParam )\n{\n    FIXME( \"%08x %08x %u %lx\\n\", logfont, metrics, nFontType, lParam );\n    return 0;\n}\n\n/***********************************************************************\n *                 FontStyleEnumProc                     (COMMDLG.18)\n */\nINT16 WINAPI FontStyleEnumProc16( SEGPTR logfont, SEGPTR metrics,\n                                  UINT16 nFontType, LPARAM lParam )\n{\n    FIXME( \"%08x %08x %u %lx\\n\", logfont, metrics, nFontType, lParam );\n    return 0;\n}\n\n/***********************************************************************\n *                        ChooseFont   (COMMDLG.15)\n */\nBOOL16 WINAPI ChooseFont16(SEGPTR cf)\n{\n    LPCHOOSEFONT16 lpChFont = MapSL(cf);\n    CHOOSEFONTA cf32;\n    LOGFONTA lf32;\n    LOGFONT16 *font16;\n    LPDLGTEMPLATEA template = NULL;\n\n    if (!lpChFont) return FALSE;\n    font16 = MapSL(lpChFont->lpLogFont);\n\n    cf32.lStructSize = sizeof(CHOOSEFONTA);\n    cf32.hwndOwner = HWND_32(lpChFont->hwndOwner);\n    cf32.hDC = HDC_32(lpChFont->hDC);\n    cf32.iPointSize = lpChFont->iPointSize;\n    cf32.Flags = lpChFont->Flags & ~(CF_ENABLETEMPLATEHANDLE | CF_ENABLETEMPLATE | CF_ENABLEHOOK);\n    cf32.rgbColors = lpChFont->rgbColors;\n    cf32.lCustData = lpChFont->lCustData;\n    cf32.lpfnHook = NULL;\n    cf32.hInstance = GetModuleHandleA(\"comdlg32.dll\");\n    cf32.nFontType = lpChFont->nFontType;\n    cf32.nSizeMax = lpChFont->nSizeMax;\n    cf32.nSizeMin = lpChFont->nSizeMin;\n    cf32.lpLogFont = &lf32;\n\n    lf32.lfHeight = font16->lfHeight;\n    lf32.lfWidth = font16->lfWidth;\n    lf32.lfEscapement = font16->lfEscapement;\n    lf32.lfOrientation = font16->lfOrientation;\n    lf32.lfWeight = font16->lfWeight;\n    lf32.lfItalic = font16->lfItalic;\n    lf32.lfUnderline = font16->lfUnderline;\n    lf32.lfStrikeOut = font16->lfStrikeOut;\n    lf32.lfCharSet = font16->lfCharSet;\n    lf32.lfOutPrecision = font16->lfOutPrecision;\n    lf32.lfClipPrecision = font16->lfClipPrecision;\n    lf32.lfQuality = font16->lfQuality;\n    lf32.lfPitchAndFamily = font16->lfPitchAndFamily;\n    lstrcpynA( lf32.lfFaceName, font16->lfFaceName, LF_FACESIZE );\n\n    if ((lpChFont->Flags & CF_ENABLETEMPLATE) || (lpChFont->Flags & CF_ENABLETEMPLATEHANDLE))\n    {\n        if (lpChFont->Flags & CF_ENABLETEMPLATE)\n            template = resource_to_dialog32(lpChFont->hInstance, MapSL(lpChFont->lpTemplateName), NULL);\n        else\n            template = handle_to_dialog32(lpChFont->hInstance, NULL);\n        cf32.hInstance = (HGLOBAL)template;\n        cf32.Flags |= CF_ENABLETEMPLATEHANDLE;\n    }\n\n    if (lpChFont->Flags & CF_ENABLEHOOK)\n    {\n        COMMDLGTHUNK *thunk = allocate_thunk(cf, (SEGPTR)lpChFont->lpfnHook);\n        cf32.Flags |= CF_ENABLEHOOK;\n        cf32.lpfnHook = (LPCFHOOKPROC)thunk;\n    }\n\n    if (!ChooseFontA( &cf32 )) return FALSE;\n\n    lpChFont->iPointSize = cf32.iPointSize;\n    lpChFont->Flags = cf32.Flags;\n    lpChFont->rgbColors = cf32.rgbColors;\n    lpChFont->lCustData = cf32.lCustData;\n    lpChFont->nFontType = cf32.nFontType;\n\n    font16->lfHeight = lf32.lfHeight;\n    font16->lfWidth = lf32.lfWidth;\n    font16->lfEscapement = lf32.lfEscapement;\n    font16->lfOrientation = lf32.lfOrientation;\n    font16->lfWeight = lf32.lfWeight;\n    font16->lfItalic = lf32.lfItalic;\n    font16->lfUnderline = lf32.lfUnderline;\n    font16->lfStrikeOut = lf32.lfStrikeOut;\n    font16->lfCharSet = lf32.lfCharSet;\n    font16->lfOutPrecision = lf32.lfOutPrecision;\n    font16->lfClipPrecision = lf32.lfClipPrecision;\n    font16->lfQuality = lf32.lfQuality;\n    font16->lfPitchAndFamily = lf32.lfPitchAndFamily;\n    lstrcpynA( font16->lfFaceName, lf32.lfFaceName, LF_FACESIZE );\n    delete_thunk(cf32.lpfnHook);\n    HeapFree(GetProcessHeap(), 0, template);\n    return TRUE;\n}\n\n/***********************************************************************\n *           FormatCharDlgProc   (COMMDLG.16)\n             FIXME: 1. some strings are \"hardcoded\", but it's better load from sysres\n                    2. some CF_.. flags are not supported\n                    3. some TType extensions\n */\nBOOL16 CALLBACK FormatCharDlgProc16(HWND16 hDlg16, UINT16 message,\n\t\t\t\t   WPARAM16 wParam, LPARAM lParam)\n{\n    FIXME( \"%04x %04x %04x %08lx: stub\\n\", hDlg16, message, wParam, lParam );\n    return FALSE;\n}\n"
  },
  {
    "path": "commdlg/printdlg.c",
    "content": "/*\n * COMMDLG - Print Dialog\n *\n * Copyright 1994 Martin Ayotte\n * Copyright 1996 Albrecht Kleine\n * Copyright 1999 Klaas van Gend\n * Copyright 2000 Huw D M Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <ctype.h>\n#include <stdlib.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <string.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n#include \"wine/wingdi16.h\"\n#include \"winuser.h\"\n#include \"wine/winuser16.h\"\n#include \"commdlg.h\"\n#include \"dlgs.h\"\n#include \"wine/debug.h\"\n#include \"cderr.h\"\n#include \"winspool.h\"\n#include \"cdlg16.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(commdlg);\n/* Maximum length of a device name */\n#define CCHDEVICENAME16 32\n\n/* Maximum length of a paper name */\n#define CCHPAPERNAME16  64\n#pragma pack(push, 1)\ntypedef struct {\n    char  dmDeviceName[CCHDEVICENAME16];\n    UINT16  dmSpecVersion;\n    UINT16  dmDriverVersion;\n    UINT16  dmSize;\n    UINT16  dmDriverExtra;\n    DWORD dmFields;\n    INT16   dmOrientation;\n    INT16   dmPaperSize;\n    INT16   dmPaperLength;\n    INT16   dmPaperWidth;\n    INT16   dmScale;\n    INT16   dmCopies;\n    INT16   dmDefaultSource;\n    INT16   dmPrintQuality;\n    INT16   dmColor;\n    INT16   dmDuplex;\n    INT16   dmYResolution;\n    INT16   dmTTOption;\n} DEVMODE16, *LPDEVMODE16;\n#pragma pack(pop)\n//sizeof(DEVMODE16) != sizeof(DEVMODEA)\nvoid DEVMODE16To32(CONST DEVMODE16 *src, LPDEVMODEA dst)\n{\n    memcpy(dst->dmDeviceName, src->dmDeviceName, min(CCHDEVICENAME16, CCHDEVICENAME));\n    dst->dmDeviceName[CCHDEVICENAME - 1] = 0;\n    dst->dmSpecVersion = 0x30a;\n    dst->dmDriverVersion = src->dmDriverVersion;\n    dst->dmSize = sizeof(DEVMODEA);\n    dst->dmDriverExtra = 0;\n    dst->dmFields = src->dmFields & 0x7fbf;\n    dst->dmOrientation = src->dmOrientation;\n    dst->dmPaperSize = src->dmPaperSize;\n    dst->dmPaperLength = src->dmPaperLength;\n    dst->dmPaperWidth = src->dmPaperWidth;\n    dst->dmScale = src->dmScale;\n    dst->dmCopies = src->dmCopies;\n    dst->dmDefaultSource = src->dmDefaultSource;\n    dst->dmPrintQuality = src->dmPrintQuality;\n    dst->dmColor = src->dmColor;\n    dst->dmDuplex = src->dmDuplex;\n    dst->dmYResolution = src->dmYResolution;\n    dst->dmTTOption = src->dmTTOption;\n}\nvoid DEVMODE32To16(LPDEVMODE16 dst, const LPDEVMODEA src)\n{\n    memcpy(dst->dmDeviceName, src->dmDeviceName, min(CCHDEVICENAME16, CCHDEVICENAME));\n    dst->dmDeviceName[CCHDEVICENAME16 - 1] = 0;\n    dst->dmSpecVersion = 0x30a;\n    dst->dmDriverVersion = src->dmDriverVersion;\n    dst->dmSize = sizeof(DEVMODE16);\n    dst->dmDriverExtra = 0;\n    dst->dmFields = src->dmFields & 0x7fbf;\n    dst->dmOrientation = src->dmOrientation;\n    dst->dmPaperSize = src->dmPaperSize;\n    dst->dmPaperLength = src->dmPaperLength;\n    dst->dmPaperWidth = src->dmPaperWidth;\n    dst->dmScale = src->dmScale;\n    dst->dmCopies = src->dmCopies;\n    dst->dmDefaultSource = src->dmDefaultSource;\n    dst->dmPrintQuality = src->dmPrintQuality;\n    dst->dmColor = src->dmColor;\n    dst->dmDuplex = src->dmDuplex;\n    dst->dmYResolution = src->dmYResolution;\n    dst->dmTTOption = src->dmTTOption;\n}\n\nstatic void global_handle_to_16( HGLOBAL16 *h16, HGLOBAL handle )\n{\n    DWORD size;\n    HGLOBAL16 ret;\n\n    if (!handle) return;\n    size = GlobalSize( handle );\n    if (*h16) ret = GlobalReAlloc16( *h16, size, GMEM_MOVEABLE );\n    else ret = GlobalAlloc16( GMEM_MOVEABLE, size );\n    if (ret)\n    {\n        void *src = GlobalLock( handle );\n        void *dst = GlobalLock16( ret );\n        memcpy( dst, src, size );\n        GlobalUnlock( handle );\n        GlobalUnlock16( ret );\n        *h16 = ret;\n    }\n}\n\nstatic HGLOBAL global_handle_from_16( HGLOBAL16 handle )\n{\n    DWORD size;\n    HGLOBAL ret;\n\n    if (!handle) return 0;\n    size = GlobalSize16( handle );\n    if ((ret = GlobalAlloc( GMEM_MOVEABLE, size )))\n    {\n        void *src = GlobalLock16( handle );\n        void *dst = GlobalLock( ret );\n        memcpy( dst, src, size );\n        GlobalUnlock16( handle );\n        GlobalUnlock( ret );\n    }\n    return ret;\n}\n\nLPDLGTEMPLATEA resource_to_dialog32(HINSTANCE16 hInst, LPCSTR name, WORD *res)\n{\n    HRSRC16 reso = FindResource16(hInst, name, (LPCSTR)RT_DIALOG);\n    HGLOBAL16 handle = LoadResource16(hInst, reso);\n    DWORD size = SizeofResource16(hInst, reso);\n    SEGPTR ptr16 = WOWGlobalLock16(handle);\n    DWORD size2;\n\n    LPDLGTEMPLATEA r = dialog_template16_to_template32(hInst, ptr16, &size2, NULL);\n    if (!res)\n        FreeResource16(handle);\n    else\n        res = ptr16;\n    return r;\n}\n\nLPDLGTEMPLATEA handle_to_dialog32(HGLOBAL16 hg, WORD *res)\n{\n    DWORD size2;\n    SEGPTR ptr16 = WOWGlobalLock16(hg);\n    LPDLGTEMPLATEA r = dialog_template16_to_template32(NULL, ptr16, &size2, NULL);\n    if (!res)\n        WOWGlobalUnlock16(hg);\n    else\n        res = ptr16;\n    return r;\n}\n\n/**********************************************************************\n *\n *      16 bit commdlg\n */\n\n/***********************************************************************\n *           PrintDlg   (COMMDLG.20)\n *\n *  Displays the PRINT dialog box, which enables the user to specify\n *  specific properties of the print job.\n *\n * RETURNS\n *  nonzero if the user pressed the OK button\n *  zero    if the user cancelled the window or an error occurred\n *\n * BUGS\n *  * calls up to the 32-bit versions of the Dialogs, which look different\n *  * Customizing is *not* implemented.\n */\n\nBOOL16 WINAPI PrintDlg16( SEGPTR pd )\n{\n    LPPRINTDLG16 lppd = MapSL(pd);\n    PRINTDLGA pd32;\n    BOOL ret;\n    HINSTANCE16 hInst;\n    LPDLGTEMPLATEA template_setup = NULL;\n    LPDLGTEMPLATEA template_print = NULL;\n    HGLOBAL *hdma = NULL;\n    if (lppd->hDevMode)\n    {\n        hdma = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, sizeof(DEVMODEA));\n        DEVMODE16To32(GlobalLock16(lppd->hDevMode), GlobalLock(hdma));\n        GlobalUnlock(hdma);\n        GlobalUnlock16(lppd->hDevMode);\n    }\n\n    if (!lppd) return PrintDlgA(NULL); /* generate failure with CDERR_INITIALIZATION */\n\n    pd32.lStructSize = sizeof(pd32);\n    pd32.Flags       = lppd->Flags & ~(PD_ENABLEPRINTTEMPLATE | PD_ENABLEPRINTTEMPLATEHANDLE |\n                                       PD_ENABLESETUPTEMPLATE | PD_ENABLESETUPTEMPLATEHANDLE |\n                                       PD_ENABLEPRINTHOOK | PD_ENABLESETUPHOOK);\n    pd32.hwndOwner   = HWND_32(lppd->hwndOwner);\n    pd32.hDevMode    = hdma; \n    pd32.hDevNames   = global_handle_from_16( lppd->hDevNames );\n    pd32.nFromPage   = lppd->nFromPage;\n    pd32.nToPage     = lppd->nToPage;\n    pd32.nMinPage    = lppd->nMinPage;\n    pd32.nMaxPage    = lppd->nMaxPage;\n    pd32.nCopies     = lppd->nCopies;\n    pd32.lpfnPrintHook = NULL;\n    pd32.lpfnSetupHook = NULL;\n    hInst = lppd->hInstance;\n\n    if ((lppd->Flags & PD_ENABLEPRINTTEMPLATE) || (lppd->Flags & PD_ENABLEPRINTTEMPLATEHANDLE))\n    {\n        if (lppd->Flags & PD_ENABLEPRINTTEMPLATE)\n            template_print = resource_to_dialog32(hInst, MapSL(lppd->lpPrintTemplateName), NULL);\n        else\n            template_print = handle_to_dialog32(lppd->hPrintTemplate, NULL);\n        pd32.hPrintTemplate = (HGLOBAL)template_print;\n        pd32.Flags |= PD_ENABLEPRINTTEMPLATEHANDLE;\n    }\n    if ((lppd->Flags & PD_ENABLESETUPTEMPLATE) || (lppd->Flags & PD_ENABLESETUPTEMPLATEHANDLE))\n    {\n        if (lppd->Flags & PD_ENABLESETUPTEMPLATE)\n            template_setup = resource_to_dialog32(hInst, MapSL(lppd->lpSetupTemplateName), NULL);\n        else\n            template_setup = handle_to_dialog32(lppd->hSetupTemplate, NULL);\n        pd32.hSetupTemplate = (HGLOBAL)template_setup;\n        pd32.Flags |= PD_ENABLESETUPTEMPLATEHANDLE;\n    }\n    if (lppd->Flags & PD_ENABLEPRINTHOOK)\n    {\n        COMMDLGTHUNK *thunk = allocate_thunk(pd, (SEGPTR)lppd->lpfnPrintHook);\n        pd32.Flags |= PD_ENABLEPRINTHOOK;\n        pd32.lpfnPrintHook = (LPPRINTHOOKPROC)thunk;\n    }\n    if (lppd->Flags & PD_ENABLESETUPHOOK)\n    {\n        COMMDLGTHUNK *thunk = allocate_thunk(pd, (SEGPTR)lppd->lpfnSetupHook);\n        pd32.Flags |= PD_ENABLESETUPHOOK;\n        pd32.lpfnSetupHook = (LPSETUPHOOKPROC)thunk;\n    }\n\n    /* Generate failure with CDERR_STRUCTSIZE, when needed */\n    if (lppd->lStructSize != sizeof(PRINTDLG16)) pd32.lStructSize--;\n\n    if ((ret = PrintDlgA( &pd32 )))\n    {\n        lppd->hDC = HDC_16( pd32.hDC );\n        global_handle_to_16( &lppd->hDevNames, pd32.hDevNames );\n\n        lppd->nFromPage   = pd32.nFromPage;\n        lppd->nToPage     = pd32.nToPage;\n        lppd->nMinPage    = pd32.nMinPage;\n        lppd->nMaxPage    = pd32.nMaxPage;\n        lppd->nCopies     = pd32.nCopies;\n        if (pd32.hDevMode)\n        {\n            if (!lppd->hDevMode)\n                lppd->hDevMode = GlobalAlloc16(GMEM_MOVEABLE, sizeof(DEVMODE16));\n            DEVMODE32To16(GlobalLock16(lppd->hDevMode), GlobalLock(pd32.hDevMode));\n            GlobalUnlock(pd32.hDevMode);\n            GlobalUnlock16(lppd->hDevMode);\n        }\n    }\n    GlobalFree( pd32.hDevNames );\n    GlobalFree( pd32.hDevMode );\n    delete_thunk(pd32.lpfnPrintHook);\n    delete_thunk(pd32.lpfnSetupHook);\n    HeapFree(GetProcessHeap(), 0, template_setup);\n    HeapFree(GetProcessHeap(), 0, template_print);\n    return ret;\n}\n\n/***********************************************************************\n *           PrintDlgProc   (COMMDLG.21)\n */\nBOOL16 CALLBACK PrintDlgProc16(HWND16 hDlg16, UINT16 uMsg, WPARAM16 wParam, LPARAM lParam)\n{\n    FIXME( \"%04x %04x %04x %08lx: stub\\n\", hDlg16, uMsg, wParam, lParam );\n    return FALSE;\n}\n\n/***********************************************************************\n *           PrintSetupDlgProc   (COMMDLG.22)\n */\nBOOL16 CALLBACK PrintSetupDlgProc16(HWND16 hWnd16, UINT16 wMsg, WPARAM16 wParam,\n\t\t\t\t   LPARAM lParam)\n{\n  HWND hWnd = HWND_32(hWnd16);\n  switch (wMsg)\n    {\n    case WM_INITDIALOG:\n      TRACE(\"WM_INITDIALOG lParam=%08lX\\n\", lParam);\n      ShowWindow(hWnd, SW_SHOWNORMAL);\n      return (TRUE);\n    case WM_COMMAND:\n      switch (wParam) {\n      case IDOK:\n\tEndDialog(hWnd, TRUE);\n\treturn(TRUE);\n      case IDCANCEL:\n\tEndDialog(hWnd, FALSE);\n\treturn(TRUE);\n      }\n      return(FALSE);\n    }\n  return FALSE;\n}\n"
  },
  {
    "path": "commdlg/resource.h",
    "content": "//{{NO_DEPENDENCIES}}\n// Microsoft Visual C++ ŐꂽCN[h t@CB\n// commdlg.rc Ŏgp\n//\n#define IDB_BITMAP1                     101\n\n// Next default values for new objects\n// \n#ifdef APSTUDIO_INVOKED\n#ifndef APSTUDIO_READONLY_SYMBOLS\n#define _APS_NEXT_RESOURCE_VALUE        102\n#define _APS_NEXT_COMMAND_VALUE         40001\n#define _APS_NEXT_CONTROL_VALUE         1001\n#define _APS_NEXT_SYMED_VALUE           101\n#endif\n#endif\n"
  },
  {
    "path": "compobj/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(compobj SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/compobj.def compobj.dll16.obj)\ninclude_directories(../wine ${CMAKE_BINARY_DIR})\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(compobj.dll16 compobj)\ntarget_link_libraries(compobj libwine winecrt0 krnl386 ole2 ole32.lib)\nset_target_properties(compobj PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "compobj/Makefile.in",
    "content": "MODULE    = compobj.dll16\nIMPORTS   = uuid ole32 advapi32\nEXTRADLLFLAGS = -m16 -Wb,--main-module,ole32.dll\n\nC_SRCS = compobj.c\n"
  },
  {
    "path": "compobj/compobj.c",
    "content": "/*\n * 16 bit ole functions\n *\n * Copyright 1995 Martin von Loewis\n * Copyright 1998 Justin Bradford\n * Copyright 1999 Francis Beaudet\n * Copyright 1999 Sylvain St-Germain\n * Copyright 2002 Marcus Meissner\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <stdlib.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <string.h>\n#include <assert.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winuser.h\"\n#include \"objbase.h\"\n#include \"ole2.h\"\n#include \"rpc.h\"\n#include \"winerror.h\"\n#include \"winreg.h\"\n#include \"wownt32.h\"\n#include \"wtypes.h\"\n#include \"wine/unicode.h\"\n#include \"wine/winbase16.h\"\n\n#include \"wine/debug.h\"\n#include \"../ole2/ifs.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(ole);\nWINE_DECLARE_DEBUG_CHANNEL(olemalloc);\n\n#define CHARS_IN_GUID 39\n\n\nstatic HTASK16 hETask = 0;\nstatic WORD Table_ETask[62];\n\nstatic LPMALLOC16 currentMalloc16=NULL;\n\n/* --- IMalloc16 implementation */\n\n\ntypedef struct\n{\n        IMalloc16 IMalloc16_iface;\n        DWORD     ref;\n} IMalloc16Impl;\n\nstatic inline IMalloc16Impl *impl_from_IMalloc16(IMalloc16 *iface)\n{\n        return CONTAINING_RECORD(iface, IMalloc16Impl, IMalloc16_iface);\n}\n\n/******************************************************************************\n *\t\tIMalloc16_QueryInterface\t[COMPOBJ.500]\n */\nHRESULT CDECL IMalloc16_fnQueryInterface(IMalloc16* iface,REFIID refiid,LPVOID *obj) {\n        IMalloc16Impl *This = impl_from_IMalloc16(iface);\n\n\tTRACE_(olemalloc)(\"(%p)->QueryInterface(%s,%p)\\n\",This,debugstr_guid(refiid),obj);\n\tif (\t!memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown)) ||\n\t\t!memcmp(&IID_IMalloc,refiid,sizeof(IID_IMalloc))\n\t) {\n\t\t*obj = This;\n\t\treturn 0;\n\t}\n\treturn OLE_E_ENUM_NOMORE;\n}\n\n/******************************************************************************\n *\t\tIMalloc16_AddRef\t[COMPOBJ.501]\n */\nULONG CDECL IMalloc16_fnAddRef(IMalloc16* iface) {\n        IMalloc16Impl *This = impl_from_IMalloc16(iface);\n\n\tTRACE_(olemalloc)(\"(%p)->AddRef()\\n\",This);\n\treturn 1; /* cannot be freed */\n}\n\n/******************************************************************************\n *\t\tIMalloc16_Release\t[COMPOBJ.502]\n */\nULONG CDECL IMalloc16_fnRelease(IMalloc16* iface) {\n        IMalloc16Impl *This = impl_from_IMalloc16(iface);\n\n\tTRACE_(olemalloc)(\"(%p)->Release()\\n\",This);\n\treturn 1; /* cannot be freed */\n}\n\n/******************************************************************************\n * IMalloc16_Alloc [COMPOBJ.503]\n */\nSEGPTR CDECL IMalloc16_fnAlloc(IMalloc16* iface,DWORD cb) {\n        IMalloc16Impl *This = impl_from_IMalloc16(iface);\n\n        LPVOID a = HeapAlloc( GetProcessHeap(), 0, cb );\n        SEGPTR s = MapLS(a);\n\tTRACE_(olemalloc)(\"(%p)->Alloc(%d)=>%p(%04x:%04x)\\n\",This,cb,a,SELECTOROF(s),OFFSETOF(s));\n        return s;\n}\n\n/******************************************************************************\n * IMalloc16_Free [COMPOBJ.505]\n */\nVOID CDECL IMalloc16_fnFree(IMalloc16* iface,SEGPTR pv)\n{\n    void *ptr = MapSL(pv);\n    IMalloc16Impl *This = impl_from_IMalloc16(iface);\n    TRACE_(olemalloc)(\"(%p)->Free(%p(%04x:%04x))\\n\",This,ptr,SELECTOROF(pv),OFFSETOF(pv));\n//    UnMapLS(pv);\n    /*\n     * Corel Move 5.0 passes the allocated pointer plus 4 bytes.\n     * https://support.microsoft.com/en-us/help/286470/how-to-use-pageheap-exe-in-windows-xp-windows-2000-and-windows-server\n     * The Windows heap managers (all versions) have always guaranteed that the\n     * heap allocations have a start address that is 8-byte aligned (on 64-bit\n     * platforms the alignment is 16-bytes).\n     */\n    HeapFree( GetProcessHeap(), 0, (LPVOID)((SIZE_T)ptr & ~7) );\n}\n\n/******************************************************************************\n * IMalloc16_Realloc [COMPOBJ.504]\n */\nSEGPTR CDECL IMalloc16_fnRealloc(IMalloc16* iface,SEGPTR pv,DWORD cb)\n{\n    SEGPTR ret;\n    IMalloc16Impl *This = impl_from_IMalloc16(iface);\n\n    TRACE_(olemalloc)(\"(%p)->Realloc(%08x,%d)\\n\",This,pv,cb);\n    if (!pv)\n\tret = IMalloc16_fnAlloc(iface, cb);\n    else if (cb) {\n        ret = MapLS( HeapReAlloc( GetProcessHeap(), 0, MapSL(pv), cb ) );\n        UnMapLS(pv);\n    } else {\n\tIMalloc16_fnFree(iface, pv);\n\tret = 0;\n    }\n    return ret;\n}\n\n/******************************************************************************\n * IMalloc16_GetSize [COMPOBJ.506]\n */\nDWORD CDECL IMalloc16_fnGetSize(IMalloc16* iface,SEGPTR pv)\n{\n        IMalloc16Impl *This = impl_from_IMalloc16(iface);\n\n        TRACE_(olemalloc)(\"(%p)->GetSize(%08x)\\n\",This,pv);\n        return HeapSize( GetProcessHeap(), 0, MapSL(pv) );\n}\n\n/******************************************************************************\n * IMalloc16_DidAlloc [COMPOBJ.507]\n */\nINT16 CDECL IMalloc16_fnDidAlloc(IMalloc16* iface,LPVOID pv) {\n        IMalloc16Impl *This = impl_from_IMalloc16(iface);\n\n\tTRACE_(olemalloc)(\"(%p)->DidAlloc(%p)\\n\",This,pv);\n\treturn (INT16)-1;\n}\n\n/******************************************************************************\n * IMalloc16_HeapMinimize [COMPOBJ.508]\n */\nLPVOID CDECL IMalloc16_fnHeapMinimize(IMalloc16* iface) {\n        IMalloc16Impl *This = impl_from_IMalloc16(iface);\n\n\tTRACE_(olemalloc)(\"(%p)->HeapMinimize()\\n\",This);\n\treturn NULL;\n}\n\n/******************************************************************************\n * IMalloc16_Constructor [VTABLE]\n */\nstatic LPMALLOC16\nIMalloc16_Constructor(void)\n{\n    static IMalloc16Vtbl vt16;\n    static SEGPTR msegvt16;\n    IMalloc16Impl* This;\n    HMODULE16 hcomp = GetModuleHandle16(\"COMPOBJ\");\n\n    This = HeapAlloc( GetProcessHeap(), 0, sizeof(IMalloc16Impl) );\n    if (!msegvt16)\n    {\n#define VTENT(x) vt16.x = (void*)GetProcAddress16(hcomp,\"IMalloc16_\"#x);assert(vt16.x)\n        VTENT(QueryInterface);\n        VTENT(AddRef);\n        VTENT(Release);\n        VTENT(Alloc);\n        VTENT(Realloc);\n        VTENT(Free);\n        VTENT(GetSize);\n        VTENT(DidAlloc);\n        VTENT(HeapMinimize);\n#undef VTENT\n        msegvt16 = MapLS( &vt16 );\n    }\n    This->IMalloc16_iface.lpVtbl = (const IMalloc16Vtbl*)msegvt16;\n    This->ref = 1;\n    return (LPMALLOC16)MapLS( This );\n}\n\n\n/******************************************************************************\n *           CoBuildVersion [COMPOBJ.1]\n */\nDWORD WINAPI CoBuildVersion16(void)\n{\n    return CoBuildVersion();\n}\n\ntypedef struct\n{\n    SEGPTR malloc16;\n} ole16_task_data;\nstatic BOOL init_current_task_tls;\nstatic DWORD current_task_tls;\nstatic ole16_task_data *get_current_task_data()\n{\n    ole16_task_data *d;\n    if (!init_current_task_tls)\n    {\n        current_task_tls = TlsAlloc();\n        init_current_task_tls = TRUE;\n    }\n    d = (ole16_task_data*)TlsGetValue(current_task_tls);\n    if (!d)\n    {\n        d = (ole16_task_data*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(ole16_task_data));\n        TlsSetValue(current_task_tls, d);\n    }\n    return d;\n}\nSEGPTR shared_malloc16;\nHRESULT WINAPI get_task_imalloc16(SEGPTR *lpMalloc)\n{\n    ole16_task_data *d = get_current_task_data();\n    if (!d->malloc16)\n    {\n        *lpMalloc = 0;\n        ERR(\"CO_E_NOTINITIALIZED\\n\");\n        return CO_E_NOTINITIALIZED;\n    }\n    *lpMalloc = d->malloc16;\n    return S_OK;\n}\n/***********************************************************************\n *           CoGetMalloc    [COMPOBJ.4]\n *\n * Retrieve the current win16 IMalloc interface.\n *\n * RETURNS\n *\tThe current win16 IMalloc\n */\nHRESULT WINAPI CoGetMalloc16(\n    MEMCTX dwMemContext,\t/* [in] memory context */\n    SEGPTR * lpMalloc\t/* [out] current win16 malloc interface */\n) {\n    ole16_task_data *d;\n    if (dwMemContext == MEMCTX_SHARED)\n    {\n        if (!shared_malloc16)\n        {\n            shared_malloc16 = IMalloc16_Constructor();\n        }\n        *lpMalloc = shared_malloc16;\n        return S_OK;\n    }\n    d = get_current_task_data();\n    if (!d->malloc16)\n    {\n        *lpMalloc = 0;\n        ERR(\"CO_E_NOTINITIALIZED\\n\");\n        return CO_E_NOTINITIALIZED;\n    }\n    if (dwMemContext == MEMCTX_TASK)\n    {\n        *lpMalloc = d->malloc16;\n        IMalloc16_AddRef(d->malloc16);\n        return S_OK;\n    }\n    *lpMalloc = 0;\n    return E_INVALIDARG16;\n}\n\n/***********************************************************************\n *           CoCreateStandardMalloc [COMPOBJ.71]\n */\nHRESULT WINAPI CoCreateStandardMalloc16(MEMCTX dwMemContext,\n\t\t\t\t\t  SEGPTR *lpMalloc)\n{\n    /* FIXME: docu says we shouldn't return the same allocator as in\n     * CoGetMalloc16 */\n    *lpMalloc = IMalloc16_Constructor();\n    return S_OK;\n}\n\n/******************************************************************************\n *\t\tCoInitialize\t[COMPOBJ.2]\n * Set the win16 IMalloc used for memory management\n */\nHRESULT WINAPI CoInitialize16(\n\tSEGPTR lpReserved\t/* [in] pointer to win16 malloc interface */\n) {\n    ole16_task_data *d = get_current_task_data();\n    if (d->malloc16)\n        return S_FALSE;\n    if (!lpReserved)\n    {\n        lpReserved = IMalloc16_Constructor();\n    }\n    d->malloc16 = (LPMALLOC16)lpReserved;\n    TRACE(\"IMalloc->QueryInterface: %08x\\n\", GET_SEGPTR_METHOD_ADDR(IMalloc16, lpReserved, QueryInterface));\n    TRACE(\"IMalloc->AddRef: %08x\\n\", GET_SEGPTR_METHOD_ADDR(IMalloc16, lpReserved, AddRef));\n    TRACE(\"IMalloc->Release: %08x\\n\", GET_SEGPTR_METHOD_ADDR(IMalloc16, lpReserved, Release));\n    TRACE(\"IMalloc->Alloc: %08x\\n\", GET_SEGPTR_METHOD_ADDR(IMalloc16, lpReserved, Alloc));\n    TRACE(\"IMalloc->Realloc: %08x\\n\", GET_SEGPTR_METHOD_ADDR(IMalloc16, lpReserved, Realloc));\n    TRACE(\"IMalloc->Free: %08x\\n\", GET_SEGPTR_METHOD_ADDR(IMalloc16, lpReserved, Free));\n    TRACE(\"IMalloc->GetSize: %08x\\n\", GET_SEGPTR_METHOD_ADDR(IMalloc16, lpReserved, GetSize));\n    TRACE(\"IMalloc->DidAlloc: %08x\\n\", GET_SEGPTR_METHOD_ADDR(IMalloc16, lpReserved, DidAlloc));\n    TRACE(\"IMalloc->HeapMinimize: %08x\\n\", GET_SEGPTR_METHOD_ADDR(IMalloc16, lpReserved, HeapMinimize));\n    IMalloc16_AddRef(d->malloc16);\n    return S_OK;\n}\n\n/***********************************************************************\n *           CoUninitialize   [COMPOBJ.3]\n * Don't know what it does.\n * 3-Nov-98 -- this was originally misspelled, I changed it to what I\n *   believe is the correct spelling\n */\nvoid WINAPI CoUninitialize16(void)\n{\n  ole16_task_data *d = get_current_task_data();\n  TRACE(\"()\\n\");\n  if (d->malloc16)\n  {\n    IMalloc16_Release(d->malloc16);\n  }\n  CoFreeAllLibraries();\n}\n\n/***********************************************************************\n *           CoFreeUnusedLibraries [COMPOBJ.17]\n */\nvoid WINAPI CoFreeUnusedLibraries16(void)\n{\n    CoFreeUnusedLibraries();\n}\n\n/***********************************************************************\n *           IsEqualGUID [COMPOBJ.18]\n *\n * Compares two Unique Identifiers.\n *\n * RETURNS\n *\tTRUE if equal\n */\nBOOL16 WINAPI IsEqualGUID16(\n\tGUID* g1,\t/* [in] unique id 1 */\n\tGUID* g2)\t/* [in] unique id 2 */\n{\n    return !memcmp( g1, g2, sizeof(GUID) );\n}\n\nHRESULT WINAPI guid_str_to_clsid(LPCOLESTR16 idstr, CLSID *id);\nHRESULT WINAPI progid_to_clsid(LPCOLESTR16 idstr, CLSID *id);\nHRESULT WINAPI IIDFromString16(LPSTR lpsz, LPIID lpiid)\n{\n    HRESULT r;\n    if (!lpiid)\n        return E_INVALIDARG16;\n    if (!lpsz)\n    {\n        memset(lpiid, 0, sizeof(CLSID));\n        return S_OK;\n    }\n    r = guid_str_to_clsid((LPCOLESTR16)lpsz, (CLSID*)lpiid);\n    if (r == CO_E_CLASSSTRING)\n        r = CO_E_IIDSTRING;\n    return r;\n}\n\n/******************************************************************************\n *\t\tCLSIDFromString\t[COMPOBJ.20]\n * Converts a unique identifier from its string representation into\n * the GUID struct.\n *\n * Class id: DWORD-WORD-WORD-BYTES[2]-BYTES[6]\n *\n * RETURNS\n *\tthe converted GUID\n */\nHRESULT WINAPI CLSIDFromString16(\n\tLPCOLESTR16 idstr,\t/* [in] string representation of (guid or ProgId) */\n\tCLSID *id)\t\t/* [out] GUID converted from string */\n{\n    HRESULT r = guid_str_to_clsid(idstr, id);\n    if (SUCCEEDED(r))\n        return r;\n    return progid_to_clsid(idstr, id);\n}\nHRESULT WINAPI guid_str_to_clsid(LPCOLESTR16 idstr, CLSID *id)\n{\n  const BYTE *s;\n  int\ti;\n  BYTE table[256];\n\n  /* validate the CLSID string */\n  if (strlen(idstr) != 38)\n      goto invalid_guid;\n\n  s = (const BYTE *) idstr;\n  if ((s[0]!='{') || (s[9]!='-') || (s[14]!='-') || (s[19]!='-') || (s[24]!='-') || (s[37]!='}'))\n      goto invalid_guid;\n\n  for (i=1; i<37; i++) {\n    if ((i == 9)||(i == 14)||(i == 19)||(i == 24)) continue;\n    if (!(((s[i] >= '0') && (s[i] <= '9'))  ||\n          ((s[i] >= 'a') && (s[i] <= 'f'))  ||\n          ((s[i] >= 'A') && (s[i] <= 'F'))))\n        goto invalid_guid;\n  }\n\n  TRACE(\"%s -> %p\\n\", s, id);\n\n  /* quick lookup table */\n  memset(table, 0, 256);\n\n  for (i = 0; i < 10; i++) {\n    table['0' + i] = i;\n  }\n  for (i = 0; i < 6; i++) {\n    table['A' + i] = i+10;\n    table['a' + i] = i+10;\n  }\n\n  /* in form {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} */\n\n  id->Data1 = (table[s[1]] << 28 | table[s[2]] << 24 | table[s[3]] << 20 | table[s[4]] << 16 |\n               table[s[5]] << 12 | table[s[6]] << 8  | table[s[7]] << 4  | table[s[8]]);\n  id->Data2 = table[s[10]] << 12 | table[s[11]] << 8 | table[s[12]] << 4 | table[s[13]];\n  id->Data3 = table[s[15]] << 12 | table[s[16]] << 8 | table[s[17]] << 4 | table[s[18]];\n\n  /* these are just sequential bytes */\n  id->Data4[0] = table[s[20]] << 4 | table[s[21]];\n  id->Data4[1] = table[s[22]] << 4 | table[s[23]];\n  id->Data4[2] = table[s[25]] << 4 | table[s[26]];\n  id->Data4[3] = table[s[27]] << 4 | table[s[28]];\n  id->Data4[4] = table[s[29]] << 4 | table[s[30]];\n  id->Data4[5] = table[s[31]] << 4 | table[s[32]];\n  id->Data4[6] = table[s[33]] << 4 | table[s[34]];\n  id->Data4[7] = table[s[35]] << 4 | table[s[36]];\n\n  return S_OK;\n  invalid_guid:\n  return CO_E_CLASSSTRING;\n}\nHRESULT WINAPI progid_to_clsid(LPCOLESTR16 idstr, CLSID *id)\n{\n  HKEY hkey = NULL;\n  CHAR clsid[50];\n  DWORD cbclsid = sizeof(clsid);\n  LPOLESTR w;\n  HRESULT r;\n  if (RegOpenKey16(HKEY_CLASSES_ROOT, idstr, &hkey))\n  {\n      goto error;\n  }\n  if (RegQueryValue16(hkey, \"CLSID\", clsid, &cbclsid))\n  {\n      RegCloseKey16(hkey);\n      goto error;\n  }\n  RegCloseKey16(hkey);\n  return guid_str_to_clsid(clsid, id);\nerror:\n  w = strdupAtoW(idstr);\n  r = CLSIDFromString(w, id);\n  HeapFree(GetProcessHeap(), 0, w);\n  return hresult32_16(r);\n}\n\n/******************************************************************************\n *\t\t_xmalloc16\t[internal]\n * Allocates size bytes from the standard ole16 allocator.\n *\n * RETURNS\n *\tthe allocated segmented pointer and a HRESULT\n */\nstatic HRESULT\n_xmalloc16(DWORD size, SEGPTR *ptr) {\n  LPMALLOC16 mllc;\n  DWORD args[2];\n\n  if (get_task_imalloc16(&mllc))\n    return E_OUTOFMEMORY;\n\n  args[0] = (DWORD)mllc;\n  args[1] = size;\n  /* No need for a Callback entry, we have WOWCallback16Ex which does\n   * everything we need.\n   */\n  if (!WOWCallback16Ex(\n      (DWORD)((const IMalloc16Vtbl*)MapSL(\n\t  (SEGPTR)((LPMALLOC16)MapSL((SEGPTR)mllc))->lpVtbl  )\n      )->Alloc,\n      WCB16_CDECL,\n      2*sizeof(DWORD),\n      (LPVOID)args,\n      (LPDWORD)ptr\n  )) {\n      ERR(\"CallTo16 IMalloc16 (%d) failed\\n\",size);\n      return E_FAIL;\n  }\n  return S_OK;\n}\n\n/******************************************************************************\n *\t\tStringFromCLSID\t[COMPOBJ.19]\n *              StringFromIID   [COMPOBJ.14]\n * Converts a GUID into the respective string representation.\n * The target string is allocated using the OLE IMalloc.\n *\n * RETURNS\n *\tthe string representation and HRESULT\n */\n\nHRESULT WINAPI StringFromCLSID16(\n  REFCLSID id,\t\t/* [in] the GUID to be converted */\n  LPOLESTR16 *idstr )\t/* [out] a pointer to a to-be-allocated segmented pointer pointing to the resulting string */\n{\n    WCHAR buffer[40];\n    HRESULT ret;\n\n    ret = _xmalloc16(40,(SEGPTR*)idstr);\n    if (ret != S_OK)\n        return ret;\n    StringFromGUID2( id, buffer, 40 );\n    WideCharToMultiByte( CP_ACP, 0, buffer, -1, MapSL((SEGPTR)*idstr), 40, NULL, NULL );\n    return ret;\n}\n\n/******************************************************************************\n * ProgIDFromCLSID [COMPOBJ.62]\n *\n * Converts a class id into the respective Program ID. (By using a registry lookup)\n *\n * RETURNS\n *  S_OK on success\n *  riid associated with the progid\n */\nHRESULT WINAPI ProgIDFromCLSID16(\n  REFCLSID clsid, /* [in] class id as found in registry */\n  LPOLESTR16 *lplpszProgID )/* [out] associated Program ID */\n{\n    LPOLESTR progid;\n    HRESULT ret;\n\n    if (!lplpszProgID)\n    {\n        return E_INVALIDARG16;\n    }\n    ret = ProgIDFromCLSID( clsid, &progid );\n    if (ret == S_OK)\n    {\n        INT len = WideCharToMultiByte( CP_ACP, 0, progid, -1, NULL, 0, NULL, NULL );\n        ret = _xmalloc16(len, (SEGPTR*)lplpszProgID);\n        if (ret == S_OK)\n            WideCharToMultiByte( CP_ACP, 0, progid, -1, MapSL((SEGPTR)*lplpszProgID), len, NULL, NULL );\n        CoTaskMemFree( progid );\n    }\n    else\n    {\n        *lplpszProgID = 0;\n    }\n    return ret;\n}\n\n/***********************************************************************\n *           LookupETask (COMPOBJ.94)\n */\nHRESULT WINAPI LookupETask16(HTASK16 *hTask,LPVOID p) {\n\tFIXME(\"(%p,%p),stub!\\n\",hTask,p);\n\tif ((*hTask = GetCurrentTask()) == hETask) {\n\t\tmemcpy(p, Table_ETask, sizeof(Table_ETask));\n\t}\n\treturn 0;\n}\n\n/***********************************************************************\n *           SetETask (COMPOBJ.95)\n */\nHRESULT WINAPI SetETask16(HTASK16 hTask, LPVOID p) {\n        FIXME(\"(%04x,%p),stub!\\n\",hTask,p);\n\thETask = hTask;\n\treturn 0;\n}\n\n/***********************************************************************\n *           CALLOBJECTINWOW (COMPOBJ.201)\n */\nHRESULT WINAPI CallObjectInWOW(LPVOID p1,LPVOID p2) {\n\tFIXME(\"(%p,%p),stub!\\n\",p1,p2);\n\treturn 0;\n}\n\n/******************************************************************************\n *\t\tCoRegisterClassObject\t[COMPOBJ.5]\n *\n * Don't know where it registers it ...\n */\nHRESULT WINAPI CoRegisterClassObject16(\n\tREFCLSID rclsid,\n\t/*LPUNKNOWN16*/SEGPTR pUnk,\n\tDWORD dwClsContext, /* [in] CLSCTX flags indicating the context in which to run the executable */\n\tDWORD flags,        /* [in] REGCLS flags indicating how connections are made */\n\tLPDWORD lpdwRegister\n) {\n    HRESULT result;\n    TRACE(\"(%s,%p,0x%08x,0x%08x,%p)\\n\",\n\t\tdebugstr_guid(rclsid),pUnk,dwClsContext,flags,lpdwRegister\n\t);\n    result = hresult32_16(CoRegisterClassObject(rclsid, (IUnknown*)iface16_32(&IID_IUnknown, pUnk), dwClsContext, flags, lpdwRegister));\n    TRACE(\"%08x\\n\", result);\n    return result;\n}\n\n/******************************************************************************\n *      CoRevokeClassObject [COMPOBJ.6]\n *\n */\nHRESULT WINAPI CoRevokeClassObject16(DWORD dwRegister) /* [in] token on class obj */\n{\n    TRACE(\"(0x%08x)\\n\", dwRegister);\n    return hresult32_16(CoRevokeClassObject(dwRegister));\n}\n\n/******************************************************************************\n *              IsValidInterface        [COMPOBJ.23]\n *\n * Determines whether a pointer is a valid interface.\n *\n * PARAMS\n *  punk [I] Interface to be tested.\n *\n * RETURNS\n *  TRUE, if the passed pointer is a valid interface, or FALSE otherwise.\n */\nBOOL WINAPI IsValidInterface16(SEGPTR punk)\n{\n\tDWORD **ptr;\n\n\tif (IsBadReadPtr16(punk,4))\n\t\treturn FALSE;\n\tptr = MapSL(punk);\n\tif (IsBadReadPtr16((SEGPTR)ptr[0],4))\t/* check vtable ptr */\n\t\treturn FALSE;\n\tptr = MapSL((SEGPTR)ptr[0]);\t\t/* ptr to first method */\n\tif (IsBadReadPtr16((SEGPTR)ptr[0],2))\n\t\treturn FALSE;\n\treturn TRUE;\n}\n\n/******************************************************************************\n *      CoFileTimeToDosDateTime [COMPOBJ.30]\n */\nBOOL16 WINAPI CoFileTimeToDosDateTime16(const FILETIME *ft, LPWORD lpDosDate, LPWORD lpDosTime)\n{\n    return FileTimeToDosDateTime(ft, lpDosDate, lpDosTime);\n}\n\n/******************************************************************************\n *      CoDosDateTimeToFileTime [COMPOBJ.31]\n */\nBOOL16 WINAPI CoDosDateTimeToFileTime16(WORD wDosDate, WORD wDosTime, FILETIME *ft)\n{\n    return DosDateTimeToFileTime(wDosDate, wDosTime, ft);\n}\n\n/******************************************************************************\n *\t\tCoGetCurrentProcess\t[COMPOBJ.34]\n */\nDWORD WINAPI CoGetCurrentProcess16(void)\n{\n    return CoGetCurrentProcess();\n}\n\n/******************************************************************************\n *\t\tCoRegisterMessageFilter\t[COMPOBJ.27]\n */\nHRESULT WINAPI CoRegisterMessageFilter16(\n\tSEGPTR lpMessageFilter,\n\tSEGPTR *lplpMessageFilter\n) {\n    HRESULT result;\n    LPMESSAGEFILTER lpmsgf = NULL;\n\tTRACE(\"(%p,%p)\\n\",lpMessageFilter,lplpMessageFilter);\n    result = hresult32_16(CoRegisterMessageFilter((IMessageFilter*)iface16_32(&IID_IMessageFilter, lpMessageFilter), lplpMessageFilter ? &lpmsgf : NULL));\n    if (lplpMessageFilter)\n        *lplpMessageFilter = iface32_16(&IID_IMessageFilter, lpmsgf);\n\treturn result;\n}\n\n/******************************************************************************\n *\t\tCoLockObjectExternal\t[COMPOBJ.63]\n */\nHRESULT WINAPI CoLockObjectExternal16(\n    /*LPUNKNOWN*/SEGPTR pUnk,\t\t/* [in] object to be locked */\n    BOOL16 fLock,\t\t/* [in] do lock */\n    BOOL16 fLastUnlockReleases\t/* [in] ? */\n) {\n    TRACE(\"(%p,%d,%d)\\n\",pUnk,fLock,fLastUnlockReleases);\n    return CoLockObjectExternal((IUnknown*)iface16_32(&IID_IUnknown, pUnk), fLock, fLastUnlockReleases);\n}\n\n/***********************************************************************\n *           CoGetState [COMPOBJ.115]\n */\nHRESULT WINAPI CoGetState16(LPDWORD state)\n{\n    FIXME(\"(%p),stub!\\n\", state);\n\n    *state = 0;\n    return S_OK;\n}\n\n/***********************************************************************\n *      DllEntryPoint                   [COMPOBJ.116]\n *\n *    Initialization code for the COMPOBJ DLL\n *\n * RETURNS:\n */\nBOOL WINAPI COMPOBJ_DllEntryPoint(DWORD Reason, HINSTANCE16 hInst, WORD ds, WORD HeapSize, DWORD res1, WORD res2)\n{\n        TRACE(\"(%08x, %04x, %04x, %04x, %08x, %04x)\\n\", Reason, hInst, ds, HeapSize, res1, res2);\n        return TRUE;\n}\n\n/***********************************************************************\n *           CoMemAlloc [COMPOBJ.151]\n */\nSEGPTR WINAPI CoMemAlloc(DWORD size, MEMCTX dwMemContext, DWORD x) {\n\tHRESULT\t\thres;\n\tSEGPTR\t\tsegptr;\n\n\t/* FIXME: check context handling */\n\tTRACE(\"(%d, 0x%08x, 0x%08x)\\n\", size, dwMemContext, x);\n\thres = _xmalloc16(size, &segptr);\n\tif (hres != S_OK)\n\t\treturn 0;\n\treturn segptr;\n}\n\n/******************************************************************************\n *\t\tCLSIDFromProgID [COMPOBJ.61]\n *\n * Converts a program ID into the respective GUID.\n *\n * PARAMS\n *  progid       [I] program id as found in registry\n *  riid         [O] associated CLSID\n *\n * RETURNS\n *\tSuccess: S_OK\n *  Failure: CO_E_CLASSSTRING - the given ProgID cannot be found.\n */\nHRESULT WINAPI CLSIDFromProgID16(LPCOLESTR16 progid, LPCLSID riid)\n{\n\tchar\t*buf,buf2[80];\n\tLONG\tbuf2len;\n\tHKEY\txhkey;\n\n\tbuf = HeapAlloc(GetProcessHeap(),0,strlen(progid)+8);\n\tsprintf(buf,\"%s\\\\CLSID\",progid);\n\tif (RegOpenKey16(HKEY_CLASSES_ROOT,buf,&xhkey)) {\n\t\tHeapFree(GetProcessHeap(),0,buf);\n                return CO_E_CLASSSTRING;\n\t}\n\tHeapFree(GetProcessHeap(),0,buf);\n\tbuf2len = sizeof(buf2);\n\tif (RegQueryValue16(xhkey,NULL,buf2,&buf2len)) {\n\t\tRegCloseKey(xhkey);\n                return CO_E_CLASSSTRING;\n\t}\n\tRegCloseKey(xhkey);\n\treturn CLSIDFromString16(buf2,riid);\n}\n\n/******************************************************************************\n *\t\tStringFromGUID2\t[COMPOBJ.76]\n */\nINT16 WINAPI StringFromGUID216(REFGUID id, LPOLESTR16 str, INT16 cmax)\n{\n    static const char format[] = \"{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}\";\n    if (!id || cmax < CHARS_IN_GUID) return 0;\n    sprintf( str, format, id->Data1, id->Data2, id->Data3,\n             id->Data4[0], id->Data4[1], id->Data4[2], id->Data4[3],\n             id->Data4[4], id->Data4[5], id->Data4[6], id->Data4[7] );\n    return CHARS_IN_GUID;\n}\n\n\n/***********************************************************************\n *           CoFileTimeNow [COMPOBJ.82]\n */\nHRESULT WINAPI CoFileTimeNow16( FILETIME *lpFileTime )\n{\n    return CoFileTimeNow( lpFileTime );\n}\n\n/***********************************************************************\n *           CoGetClassObject [COMPOBJ.7]\n *\n */\nHRESULT WINAPI CoGetClassObject16(\n    SEGPTR rclsid, DWORD dwClsContext, COSERVERINFO *pServerInfo,\n    SEGPTR riid, SEGPTR ppv)\n{\n    LPVOID *ppvl = MapSL(ppv);\n    char idstr[CHARS_IN_GUID];\n    char buf_key[CHARS_IN_GUID+190], dllpath[MAX_PATH+1];\n    LONG dllpath_len = sizeof(dllpath);\n    HRESULT err_last = E_NOTIMPL16;\n\n    TRACE(\"CLSID: %s, IID: %s\\n\", debugstr_guid(MapSL(rclsid)), debugstr_guid(MapSL(riid)));\n\n    *ppvl = NULL;\n    StringFromGUID216(MapSL(rclsid), idstr, CHARS_IN_GUID);\n\n    if (pServerInfo) {\n        FIXME(\"pServerInfo->name=%s pAuthInfo=%p\\n\",\n              debugstr_w(pServerInfo->pwszName), pServerInfo->pAuthInfo);\n    }\n\n    if (CLSCTX_INPROC_SERVER & dwClsContext)\n    {\n\n        HMODULE16 dll;\n        FARPROC16 DllGetClassObject;\n\n        WORD args[6];\n        DWORD dwRet;\n\n        sprintf(buf_key, \"CLSID\\\\%s\\\\InprocServer\", idstr);\n        if (RegQueryValue16(HKEY_CLASSES_ROOT, buf_key, dllpath, &dllpath_len))\n        {\n            /* 64-bit COM...? */\n            sprintf(buf_key, \"CLSID\\\\%s\\\\InprocServer32\", idstr);\n            dllpath_len = sizeof(dllpath);\n            if (!RegQueryValue16(HKEY_CLASSES_ROOT, buf_key, dllpath, &dllpath_len))\n            {\n                PVOID pv = NULL;\n                HRESULT result;\n                result = CoGetClassObject((REFCLSID)MapSL(rclsid), CLSCTX_INPROC_SERVER, pServerInfo, (REFIID)MapSL(riid), &pv);\n                *(SEGPTR*)MapSL(ppv) = iface32_16((REFIID)MapSL(riid), pv);\n                return hresult32_16(result);\n            }\n            ERR(\"class %s not registered\\n\", debugstr_guid(MapSL(rclsid)));\n            err_last = REGDB_E_CLASSNOTREG;\n            goto fail_inproc;\n        }\n\n        dll = LoadLibrary16(dllpath);\n        if (dll < 32)\n        {\n            ERR(\"couldn't load in-process dll %s\\n\", debugstr_a(dllpath));\n            err_last = E_ACCESSDENIED16; /* FIXME: or should this be CO_E_DLLNOTFOUND? */\n            goto fail_inproc;\n        }\n\n        DllGetClassObject = GetProcAddress16(dll, \"DllGetClassObject\");\n        if (!DllGetClassObject)\n        {\n            ERR(\"couldn't find function DllGetClassObject in %s\\n\", debugstr_a(dllpath));\n            FreeLibrary16(dll);\n            err_last = CO_E_DLLNOTFOUND;\n            goto fail_inproc;\n        }\n\n        TRACE(\"calling DllGetClassObject %p\\n\", DllGetClassObject);\n        args[5] = SELECTOROF(rclsid);\n        args[4] = OFFSETOF(rclsid);\n        args[3] = SELECTOROF(riid);\n        args[2] = OFFSETOF(riid);\n        args[1] = SELECTOROF(ppv);\n        args[0] = OFFSETOF(ppv);\n        WOWCallback16Ex((DWORD) DllGetClassObject, WCB16_PASCAL, sizeof(args), args, &dwRet);\n        if (dwRet != S_OK)\n        {\n            ERR(\"DllGetClassObject returned error 0x%08x\\n\", dwRet);\n            FreeLibrary16(dll);\n            return dwRet;\n        }\n\n        return S_OK;\n    }\n\n    fail_inproc:\n    if (CLSCTX_LOCAL_SERVER & dwClsContext)\n    {\n        HRESULT result;\n        PVOID pv = NULL;\n        result = CoGetClassObject((REFCLSID)MapSL(rclsid), dwClsContext, pServerInfo, (REFIID)MapSL(riid), &pv);\n        *(SEGPTR*)MapSL(ppv) = iface32_16((REFCLSID)MapSL(riid), pv);\n        return hresult32_16(result);\n    }\n    fail_svr:\n    FIXME(\"semi-stub\\n\");\n    return err_last;\n}\n\n/******************************************************************************\n *\t\tCoCreateGuid [COMPOBJ.73]\n */\nHRESULT WINAPI CoCreateGuid16(GUID *pguid)\n{\n    return CoCreateGuid( pguid );\n}\n\n/***********************************************************************\n *           CoCreateInstance [COMPOBJ.13]\n */\nHRESULT WINAPI CoCreateInstance16(\n\t/* REFCLSID */SEGPTR srclsid,\n\tSEGPTR pUnkOuter,\n\tDWORD dwClsContext,\n\t/* REFIID */SEGPTR siid,\n\t/* SEGPTR* */SEGPTR sppv)\n{\n  LPVOID pv;\n  HRESULT result;\n  REFCLSID rclsid = (REFCLSID)MapSL(srclsid);\n  REFIID iid = (REFIID)MapSL(siid);\n  SEGPTR *ppv = (SEGPTR*)MapSL(sppv);\n  TRACE(\"(%s, %p, %x, %s, %p)\\n\",\n\tdebugstr_guid(rclsid), pUnkOuter, dwClsContext, debugstr_guid(iid),\n\tppv\n  );\n  result = CoCreateInstance(rclsid, (IUnknown*)iface16_32(&IID_IUnknown, pUnkOuter), dwClsContext, iid, &pv);\n  if (result == REGDB_E_CLASSNOTREG)\n  {\n      SEGPTR cf;\n      result = CoGetClassObject16(srclsid, dwClsContext, NULL, MapLS(&IID_IClassFactory), MapLS(&cf));\n      if (SUCCEEDED(result))\n      {\n          result = IClassFactory16_CreateInstance(cf, pUnkOuter, siid, sppv);\n          IClassFactory16_Release(cf);\n          return result;\n      }\n      return hresult32_16(result);\n  }\n  *ppv = iface32_16(iid, pv);\n  return hresult32_16(result);\n}\n\n/***********************************************************************\n *           CoDisconnectObject [COMPOBJ.15]\n */\nHRESULT WINAPI CoDisconnectObject16( /*LPUNKNOWN*/SEGPTR lpUnk, DWORD reserved )\n{\n  TRACE(\"(%p, 0x%08x)\\n\", lpUnk, reserved);\n  return hresult32_16(CoDisconnectObject((IUnknown*)iface16_32(&IID_IUnknown, lpUnk), reserved));\n}\n\nHRESULT WINAPI CoIsOle1Class16(REFCLSID rclsid)\n{\n    TRACE(\"(%p)\\n\", rclsid);\n    return hresult32_16(CoIsOle1Class(rclsid));\n}\n\nHRESULT WINAPI FnAssert16(LPCSTR expr, LPCSTR msg, LPCSTR file, WORD line)\n{\n    TRACE(\"(%s,%s,%s,%d)\\n\", debugstr_a(expr), debugstr_a(msg), debugstr_a(msg), line);\n    return S_OK;\n}\n\nHRESULT WINAPI CoGetTreatAsClass16(REFCLSID clsidOld, LPCLSID pClsidNew)\n{\n    HRESULT r;\n    TRACE(\"(%s,%p)\\n\", debugstr_guid(clsidOld), pClsidNew);\n    r = CoGetTreatAsClass(clsidOld, pClsidNew);\n    return hresult32_16(r);\n}\n\nHRESULT WINAPI CoTreatAsClass16(REFCLSID clsidOld, REFCLSID clsidNew)\n{\n    HRESULT r;\n    TRACE(\"(%s,%p)\\n\", debugstr_guid(clsidOld), debugstr_guid(clsidNew));\n    r = CoTreatAsClass(clsidOld, clsidNew);\n    if (r == REGDB_E_WRITEREGDB)\n    {\n        ERR(\"REGDB_E_WRITEREGDB\\n\");\n    }\n    return hresult32_16(r);\n}\n"
  },
  {
    "path": "compobj/compobj.def",
    "content": "; File generated automatically from ..\\compobj\\compobj.dll16.spec; do not edit!\n\nLIBRARY compobj.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n  get_task_imalloc16 @2\n  CoInitialize16 @3\n  CoUninitialize16 @4\n  StringFromGUID216 @5\n  CoCreateInstance16\n"
  },
  {
    "path": "compobj/compobj.dll16.spec",
    "content": "1 pascal CoBuildVersion() CoBuildVersion16\n2 pascal CoInitialize(long) CoInitialize16\n3 pascal CoUninitialize() CoUninitialize16\n4 pascal CoGetMalloc(long ptr) CoGetMalloc16\n5 pascal CoRegisterClassObject(ptr segptr long long ptr) CoRegisterClassObject16\n6 pascal CoRevokeClassObject(long) CoRevokeClassObject16\n7 pascal CoGetClassObject(segptr long ptr segptr segptr) CoGetClassObject16\n8 stub COMARSHALINTERFACE\n9 stub COUNMARSHALINTERFACE\n10 stub COLOADLIBRARY\n11 stub COFREELIBRARY\n12 stub COFREEALLLIBRARIES\n13 pascal CoCreateInstance(segptr segptr long segptr segptr) CoCreateInstance16\n14 pascal StringFromIID(ptr ptr) StringFromCLSID16\n15 pascal CoDisconnectObject(segptr long) CoDisconnectObject16\n16 stub CORELEASEMARSHALDATA\n17 pascal -ret16 CoFreeUnusedLibraries() CoFreeUnusedLibraries16\n18 pascal -ret16 IsEqualGUID(ptr ptr) IsEqualGUID16\n19 pascal StringFromCLSID(ptr ptr) StringFromCLSID16\n20 pascal CLSIDFromString(str ptr) CLSIDFromString16\n21 stub ISVALIDPTRIN\n22 stub ISVALIDPTROUT\n23 pascal IsValidInterface(segptr) IsValidInterface16\n24 stub ISVALIDIID\n25 stub RESULTFROMSCODE\n26 stub GETSCODE\n27 pascal CoRegisterMessageFilter(segptr ptr) CoRegisterMessageFilter16\n28 stub COISHANDLERCONNECTED\n29 stub SHRADDREF\n30 pascal -ret16 CoFileTimeToDosDateTime(ptr ptr ptr) CoFileTimeToDosDateTime16\n31 pascal -ret16 CoDosDateTimeToFileTime(word word ptr) CoDosDateTimeToFileTime16\n32 stub COMARSHALHRESULT\n33 stub COUNMARSHALHRESULT\n34 pascal CoGetCurrentProcess() CoGetCurrentProcess16\n35 stub SHRCREATE\n36 pascal CoIsOle1Class(ptr) CoIsOle1Class16\n37 variable _GUID_NULL(0x00000000 0x00000000 0x00000000 0x00000000)\n38 variable _IID_IUnknown(0x00000000 0x00000000 0x000000c0 0x46000000)\n39 variable _IID_IClassFactory(0x00000001 0x00000000 0x000000c0 0x46000000)\n40 variable _IID_IMalloc(0x00000002 0x00000000 0x000000c0 0x46000000)\n41 variable _IID_IMarshal(0x00000003 0x00000000 0x000000c0 0x46000000)\n42 variable _IID_IRpcChannel(0x00000004 0x00000000 0x000000c0 0x46000000)\n43 variable _IID_IRpcStub(0x00000005 0x00000000 0x000000c0 0x46000000)\n44 variable _IID_IStubManager(0x00000006 0x00000000 0x000000c0 0x46000000)\n45 variable _IID_IRpcProxy(0x00000007 0x00000000 0x000000c0 0x46000000)\n46 variable _IID_IProxyManager(0x00000008 0x00000000 0x000000c0 0x46000000)\n47 variable _IID_IPSFactory(0x00000009 0x00000000 0x000000c0 0x46000000)\n48 variable _IID_ILockBytes(0x0000000a 0x00000000 0x000000c0 0x46000000)\n49 variable _IID_IStorage(0x0000000b 0x00000000 0x000000c0 0x46000000)\n50 variable _IID_IStream(0x0000000c 0x00000000 0x000000c0 0x46000000)\n51 variable _IID_IEnumSTATSTG(0x0000000d 0x00000000 0x000000c0 0x46000000)\n52 variable _IID_IBindCtx(0x0000000e 0x00000000 0x000000c0 0x46000000)\n53 variable _IID_IMoniker(0x0000000f 0x00000000 0x000000c0 0x46000000)\n54 variable _IID_IRunningObjectTable(0x00000010 0x00000000 0x000000c0 0x46000000)\n55 variable _IID_IInternalMoniker(0x00000011 0x00000000 0x000000c0 0x46000000)\n56 variable _IID_IRootStorage(0x00000012 0x00000000 0x000000c0 0x46000000)\n57 variable _IID_IDfReserved1(0x00000013 0x00000000 0x000000c0 0x46000000)\n58 variable _IID_IDfReserved2(0x00000014 0x00000000 0x000000c0 0x46000000)\n59 variable _IID_IDfReserved3(0x00000015 0x00000000 0x000000c0 0x46000000)\n60 variable _IID_IMessageFilter(0x00000016 0x00000000 0x000000c0 0x46000000)\n61 pascal CLSIDFromProgID(str ptr) CLSIDFromProgID16\n62 pascal ProgIDFromCLSID(ptr ptr) ProgIDFromCLSID16\n63 pascal CoLockObjectExternal(segptr word word) CoLockObjectExternal16\n64 variable _CLSID_StdMarshal(0x00000017 0x00000000 0x000000c0 0x46000000)\n65 pascal CoGetTreatAsClass(ptr ptr) CoGetTreatAsClass16\n66 pascal CoTreatAsClass(ptr ptr) CoTreatAsClass16\n67 stub COGETSTANDARDMARSHAL\n68 stub PROPAGATERESULT\n69 pascal IIDFromString(str ptr) IIDFromString16\n70 variable _IID_IStdMarshalInfo(0x00000018 0x00000000 0x000000c0 0x46000000)\n71 pascal CoCreateStandardMalloc(long ptr) CoCreateStandardMalloc16\n72 variable _IID_IExternalConnection(0x00000019 0x00000000 0x000000c0 0x46000000)\n73 pascal CoCreateGuid(ptr) CoCreateGuid16\n75 pascal FnAssert(str str str word) FnAssert16\n76 pascal -ret16 StringFromGUID2(ptr ptr word) StringFromGUID216\n77 stub COGETCLASSEXT\n78 stub OLE1CLASSFROMCLSID2\n79 stub CLSIDFROMOLE1CLASS\n80 stub COOPENCLASSKEY\n81 stub GUIDFROMSTRING\n82 pascal CoFileTimeNow(ptr) CoFileTimeNow16\n83 stub REMALLOCOID\n84 stub REMFREEOID\n85 stub REMCREATEREMOTEHANDLER\n86 stub REMCONNECTTOOBJECT\n87 stub REMGETINFOFORCID\n88 stub LRPCCALL\n89 stub LRPCDISPATCH\n90 stub LRPCREGISTERMONITOR\n91 stub LRPCREVOKEMONITOR\n92 stub LRPCGETTHREADWINDOW\n93 stub TIMERCALLBACKPROC\n94 pascal LookupETask(ptr ptr) LookupETask16\n95 pascal -ret16 SetETask(word ptr) SetETask16\n96 stub LRPCFREEMONITORDATA\n97 stub REMLOOKUPSHUNK\n98 stub SHRGETSIZE\n99 stub CALLTHKMGRUNINITIALIZE\n100 stub ??0CARRAYFVALUE@@REC@KI@Z\n101 stub ??1CARRAYFVALUE@@REC@XZ\n102 stub ?ASSERTVALID@CARRAYFVALUE@@RFCXXZ\n103 stub ?FREEEXTRA@CARRAYFVALUE@@RECXXZ\n104 stub ?_GETAT@CARRAYFVALUE@@RFCPEXH@Z\n105 stub ?GETSIZE@CARRAYFVALUE@@RFCHXZ\n106 stub ?REMOVEALL@CARRAYFVALUE@@RECXXZ\n107 stub SHRDESTROY\n108 stub ?INDEXOF@CARRAYFVALUE@@RECHPEXII@Z\n109 stub ?INSERTAT@CARRAYFVALUE@@RECHHPEXH@Z\n110 stub COSETSTATE\n111 stub ?REMOVEAT@CARRAYFVALUE@@RECXHH@Z\n112 stub ?SETAT@CARRAYFVALUE@@RECXHPEX@Z\n113 stub ?SETATGROW@CARRAYFVALUE@@RECHHPEX@Z\n114 stub ?SETSIZE@CARRAYFVALUE@@RECHHH@Z\n115 pascal CoGetState(ptr) CoGetState16\n116 pascal DllEntryPoint(long word word word long word) COMPOBJ_DllEntryPoint\n117 stub ?RELEASE@CSTDMALLOC@@VEAKXZ\n118 stub ?ALLOC@CSTDMALLOC@@VEAPEXK@Z\n119 stub SHRRELEASE\n120 stub ?GETASSOCAT@CMAPKEYTOVALUE@@BFCPEUCASSOC@1@PEXIAEI@Z\n121 stub ?SETASSOCKEY@CMAPKEYTOVALUE@@BFCHPEUCASSOC@1@PEXI@Z\n122 stub ??1CMAPKEYTOVALUE@@REC@XZ\n123 stub ?GETASSOCKEYPTR@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@PEPEXPEI@Z\n124 stub ?NEWASSOC@CMAPKEYTOVALUE@@BECPEUCASSOC@1@IPEXI0@Z\n125 stub ?SIZEASSOC@CMAPKEYTOVALUE@@BFCIXZ\n126 stub ?FREEASSOC@CMAPKEYTOVALUE@@BECXPEUCASSOC@1@@Z\n127 stub ?GETSTARTPOSITION@CMAPKEYTOVALUE@@RFCPEXXZ\n128 stub ?GETNEXTASSOC@CMAPKEYTOVALUE@@RFCXPEPEXPEXPEI1@Z\n129 stub ?COMPAREASSOCKEY@CMAPKEYTOVALUE@@BFCHPEUCASSOC@1@PEXI@Z\n130 stub ?REMOVEHKEY@CMAPKEYTOVALUE@@RECHK@Z\n131 stub ?GETHKEY@CMAPKEYTOVALUE@@RFCKPEXI@Z\n132 stub ?GETCOUNT@CMAPKEYTOVALUE@@RFCHXZ\n133 stub ?LOOKUP@CMAPKEYTOVALUE@@RFCHPEXI0@Z\n134 stub ?GETASSOCVALUE@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@PEX@Z\n135 stub ?REMOVEKEY@CMAPKEYTOVALUE@@RECHPEXI@Z\n136 stub ?REMOVEALL@CMAPKEYTOVALUE@@RECXXZ\n137 stub SHRALLOC\n138 stub ?FREEASSOCKEY@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@@Z\n139 stub ?SETAT@CMAPKEYTOVALUE@@RECHPEXI0@Z\n140 stub ?LOOKUPHKEY@CMAPKEYTOVALUE@@RFCHKPEX@Z\n141 stub ?ASSERTVALID@CMAPKEYTOVALUE@@RFCXXZ\n142 stub ?SETASSOCVALUE@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@PEX@Z\n143 stub ?SETATHKEY@CMAPKEYTOVALUE@@RECHKPEX@Z\n144 stub ??0CMAPKEYTOVALUE@@REC@KIIHP7CIPEXI@ZI@Z\n145 stub ?INITHASHTABLE@CMAPKEYTOVALUE@@BECHXZ\n146 stub ?GETASSOCVALUEPTR@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@PEPEX@Z\n147 stub ?LOOKUPADD@CMAPKEYTOVALUE@@RFCHPEXI0@Z\n148 stub MKVDEFAULTHASHKEY\n149 stub DELETE16\n150 stub COMEMCTXOF\n151 pascal CoMemAlloc(long long long)\n152 stub COMEMFREE\n153 stub SHRREALLOC\n154 stub ___EXPORTEDSTUB\n155 stub LRPCREGISTERWIN32SMONITOR\n156 stub MYREMGETINFOFORCID\n157 stub SHRFREE\n158 stub OPNEW16\n159 stub ADDCOINFO\n160 stub CORUNMODALLOOP\n161 stub COHANDLEINCOMINGCALL\n162 stub COSETACKSTATE\n163 stub SHRDIDALLOC\n164 stub ?GETAT@CARRAYFVALUE@@RFCPEXH@Z\n165 stub ?GETUPPERBOUND@CARRAYFVALUE@@RFCHXZ\n166 stub OPDELETE16\n167 stub ?GETSIZEVALUE@CARRAYFVALUE@@RFCHXZ\n168 stub ?PROXY1632ADDREF@@ZAKPEVCPROXY1632@@@Z\n# FIXME: 169 is a duplicate of 97\n169 stub REMLOOKUPSHUNK_dup\n170 stub ?ISEMPTY@CMAPKEYTOVALUE@@RFCHXZ\n171 stub ?FREE@CSTDMALLOC@@VEAXPEX@Z\n172 stub CALLTHKMGRINITIALIZE\n173 stub ?REALLOC@CSTDMALLOC@@VEAPEXPEXK@Z\n174 stub ?SM16RHQI@@ZAPEXPEVCSM16RELEASEHANDLER@@AFUGUID@@PEPEX@Z\n175 stub ?PROXY1632METHOD10@@ZAKPEVCPROXY1632@@@Z\n# FIXME: 176 is a duplicate of 154\n176 stub ___EXPORTEDSTUB_dup\n177 stub ?PROXY1632METHOD20@@ZAKPEVCPROXY1632@@@Z\n178 stub ?PROXY1632METHOD11@@ZAKPEVCPROXY1632@@@Z\n179 stub ?PROXY1632METHOD30@@ZAKPEVCPROXY1632@@@Z\n180 stub ?PROXY1632METHOD21@@ZAKPEVCPROXY1632@@@Z\n181 stub ?PROXY1632METHOD12@@ZAKPEVCPROXY1632@@@Z\n182 stub ?PROXY1632METHOD31@@ZAKPEVCPROXY1632@@@Z\n183 stub ?PROXY1632METHOD22@@ZAKPEVCPROXY1632@@@Z\n184 stub ?PROXY1632METHOD13@@ZAKPEVCPROXY1632@@@Z\n185 stub ?GETSIZE@CSTDMALLOC@@VEAKPEX@Z\n186 stub ?PROXY1632METHOD23@@ZAKPEVCPROXY1632@@@Z\n187 stub ?PROXY1632METHOD14@@ZAKPEVCPROXY1632@@@Z\n188 stub ?PROXY1632METHOD24@@ZAKPEVCPROXY1632@@@Z\n189 stub ?PROXY1632METHOD15@@ZAKPEVCPROXY1632@@@Z\n190 stub ?PROXY1632METHOD25@@ZAKPEVCPROXY1632@@@Z\n191 stub ?PROXY1632METHOD16@@ZAKPEVCPROXY1632@@@Z\n192 stub ?PROXY1632METHOD26@@ZAKPEVCPROXY1632@@@Z\n193 stub ?PROXY1632METHOD17@@ZAKPEVCPROXY1632@@@Z\n194 stub ?PROXY1632METHOD27@@ZAKPEVCPROXY1632@@@Z\n195 stub ?PROXY1632METHOD18@@ZAKPEVCPROXY1632@@@Z\n196 stub ?PROXY1632METHOD28@@ZAKPEVCPROXY1632@@@Z\n197 stub ?ADDREF@CSTDMALLOC@@VEAKXZ\n198 stub ?PROXY1632METHOD19@@ZAKPEVCPROXY1632@@@Z\n199 stub ?PROXY1632METHOD29@@ZAKPEVCPROXY1632@@@Z\n200 stub CALL32INITIALIZE\n201 pascal CALLOBJECTINWOW(ptr ptr) CallObjectInWOW\n203 stub CALLOBJECTINWOWCHECKINIT\n204 stub CALLOBJECTINWOWCHECKTHKMGR\n205 stub CONVERTHR1632\n206 stub CONVERTHR3216\n207 stub ADDAPPCOMPATFLAG\n\n# WINE internal relays (for Win16 interfaces)\n500 cdecl IMalloc16_QueryInterface(ptr ptr ptr) IMalloc16_fnQueryInterface\n501 cdecl IMalloc16_AddRef(ptr) IMalloc16_fnAddRef\n502 cdecl IMalloc16_Release(ptr) IMalloc16_fnRelease\n503 cdecl IMalloc16_Alloc(ptr long) IMalloc16_fnAlloc\n504 cdecl IMalloc16_Realloc(ptr segptr long) IMalloc16_fnRealloc\n505 cdecl IMalloc16_Free(ptr segptr) IMalloc16_fnFree\n506 cdecl IMalloc16_GetSize(ptr segptr) IMalloc16_fnGetSize\n507 cdecl IMalloc16_DidAlloc(ptr segptr) IMalloc16_fnDidAlloc\n508 cdecl IMalloc16_HeapMinimize(ptr) IMalloc16_fnHeapMinimize\n\n@ stdcall -arch=win32 get_task_imalloc16(ptr)\n@ stdcall -arch=win32 CoInitialize16(long)\n@ stdcall -arch=win32 CoUninitialize16()\n@ stdcall -arch=win32 StringFromGUID216(ptr ptr long)\n@ stdcall -arch=win32 CoCreateInstance16(long long long long long)\n"
  },
  {
    "path": "compobj/compobj.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n    <RootNamespace>compobj</RootNamespace>\n    <ProjectGuid>{B88A001B-29A3-45C1-8FF9-A75CB7C7DCCF}</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <Import Project=\"..\\PropertySheet.props\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)ole2.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nuuid.lib;ole32.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\ncompobj.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\ncompobj.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)ole2.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nuuid.lib;ole32.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"compobj.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"compobj.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"compobj.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Platform)'=='Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" COMPOBJ &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Platform)'=='Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"compobj.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "convertwinefile/convertwinefile.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{782AFA35-AE4C-4BC1-9AC9-6D0075AF6AB7}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>convertwinefile</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"Shared\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.exe</TargetExt>\n    <TargetName>$(ProjectName)</TargetName>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <LinkIncremental>true</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <LinkIncremental>false</LinkIncremental>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>shlwapi.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>shlwapi.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"main.c\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "convertwinefile/convertwinefile.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"ソース ファイル\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"ヘッダー ファイル\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"リソース ファイル\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"main.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "convertwinefile/main.c",
    "content": "/*\n * Converts wine DLL source Makefiles to MSVC projects.\n * \n * Copyright (C) 2017 otya\n */\n#include <stdio.h>\n#include <shlwapi.h>\n#include <ctype.h>\n#include <string.h>\n#include <stdlib.h>\n#include <assert.h>\nconst char * getdirname(const char *path)\n{\n\tconst char *a = strpbrk(path, \"\\\\/\");\n\tif (!a) return path;\n\twhile (1)\n\t{\n\t\ta++;\n\t\tpath = a;\n\t\tif (!*a) return path;\n\t\ta = strpbrk(path, \"\\\\/\");\n\t\tif (!a) return path;\n\t}\n}\ninline static size_t memcount(const char* begin, char c, size_t n) {\n    size_t r = 0;\n    for (size_t i = 0; i < n; i++)\n        if (begin[i] == c)\n            r++;\n    return r;\n}\n/** Escape for cmd and xcopy MSVCRT command-line\n * JS: `\"${arg.replace(/(\\\\*)($|\")/g, '$1$1$2').replace(/\"/g, '\"\"')}\"`;\n */\nchar * escape(const char* op)\n{\n    // estimate size\n    size_t l = strlen(op);\n    size_t bufsz = 2 + l + memcount(op, '\\\\', l) + memcount(op, '\"', l) + 1;\n    char* ret = malloc(bufsz);\n    if (!ret) return ret;\n\n    size_t spos = 0, tpos = 0;\n    ret[tpos++]='\"';\n\n    // find quotes or end\n    const char* quote = NULL;\n    while ((quote = memchr(&op[spos], '\"', l)) || \n           (quote = op + l)) {\n        // Count consec backslash\n        const char* k;\n        for (k = quote - 1; *k == '\\\\'; k--) {\n            /* PASS */\n        }\n\n        // Copy up to and including k\n        size_t stertch = (k - op) - spos + 1;\n        memcpy(&ret[tpos], &op[spos], stertch);\n        spos += stertch;\n        tpos += stertch;\n\n        // Double backslashes\n        for (const char* s = k + 1; s < quote; s++) {\n            ret[tpos++]='\\\\';\n            ret[tpos++]='\\\\';\n            spos++;\n        }\n        assert(&op[spos] == quote);\n\n        // Double the quote\n        if (spos != l) {\n            ret[tpos++] = '\"';\n            ret[tpos++] = '\"';\n            spos++;\n        } else {\n          break;\n        }\n    }\n    ret[tpos++] = '\"';\n    ret[tpos] = '\\0';\n    return ret;\n}\n\n#define ESCAPE(Var) const char* e ## Var = escape(Var)\n#define E(Var)      (e ## Var)\n#define FESC(Var)   free(e ## Var)\n\nvoid copy(const char * src, const char *dst)\n{\n\tchar buf[512];\n    ESCAPE(src); ESCAPE(dst);\n\tint c = snprintf(buf, sizeof(buf), \"xcopy %s %s /I\", E(src), E(dst));\n    FESC(src); FESC(dst);\n    assert(c < sizeof(buf) - 1);\n\tsystem(buf);\n}\ntypedef struct\n{\n\tchar module[100];\n\tchar imports[32][32];\n\tchar csrcs[32][32];\n\tchar rcsrcs[32][32];\n} makein;\nchar *fgetsex(char *buffer, size_t bufsiz, FILE *fp)\n{\n\tif (!fgets(buffer, bufsiz, fp))\n\t\treturn NULL;\n\tsize_t len = strlen(buffer);\n\tif (buffer[len - 2] == '\\\\')\n\t{\n\t\tfgetsex(buffer + len - 3, bufsiz - len - 1, fp);\n\t\treturn buffer;\n\t}\n\treturn buffer;\n}\nconst char *skipspaces(const char *in)\n{\n\twhile (*in)\n\t{\n\t\tif (!isspace(*in))\n\t\t\treturn in;\n\t\tin++;\n\t}\n\treturn in;\n}\nconst char *getitem(const char *in, char *buf, size_t bufsiz)\n{\n\tin = skipspaces(in);\n\tif (*in == '\\0')\n\t\treturn 0;\n\tsize_t buflen = 0;\n\twhile (1)\n\t{\n\t\tif (isspace(*in))\n\t\t\tbreak;\n\t\tbuflen++;\n\t\tif (buflen < bufsiz)\n\t\t{\n\t\t\tbuf[buflen - 1] = *in;\n\t\t}\n\t\tin++;\n\t}\n\tif (buflen < bufsiz)\n\t{\n\t\tbuf[buflen] = '\\0';\n\t}\n\telse\n\t{\n\t\tbuf[bufsiz - 1] = '\\0';\n\t}\n\tin = skipspaces(in);\n\treturn in;\n}\nvoid parsemakein(FILE *fp, makein *in)\n{\n\tchar line[2048];\n\twhile (fgetsex(line, sizeof(line), fp))\n\t{\n\t\tconst char *linebuf = line;\n\t\tchar buf[128];\n\t\tlinebuf = getitem(linebuf, buf, sizeof(buf));\n\t\tif (!linebuf)\n\t\t\tcontinue;\n\t\tif (*linebuf != '=')\n\t\t{\n\t\t\tcontinue;\n\t\t}\n\t\tlinebuf++;\n\t\tlinebuf = skipspaces(linebuf);\n\t\tif (!strcmp(buf, \"MODULE\"))\n\t\t{\n\t\t\tlinebuf = getitem(linebuf, buf, sizeof(buf));\n\t\t\tstrncpy(in->module, buf, sizeof(in->module));\n\t\t}\n\t\tif (!strcmp(buf, \"IMPORTS\"))\n\t\t{\n\t\t\tfor (int i = 0; i < sizeof(in->imports); i++)\n\t\t\t{\n\t\t\t\tlinebuf = getitem(linebuf, buf, sizeof(buf));\n\t\t\t\tif (!linebuf) break;\n\t\t\t\tstrncpy(in->imports[i], buf, sizeof(in->imports[0]));\n\t\t\t}\n\t\t}\n\t\tif (!strcmp(buf, \"C_SRCS\"))\n\t\t{\n\t\t\tfor (int i = 0; i < sizeof(in->csrcs); i++)\n\t\t\t{\n\t\t\t\tlinebuf = getitem(linebuf, buf, sizeof(buf));\n\t\t\t\tif (!linebuf) break;\n\t\t\t\tstrncpy(in->csrcs[i], buf, sizeof(in->csrcs[0]));\n\t\t\t}\n\t\t}\n\t\tif (!strcmp(buf, \"RC_SRCS\"))\n\t\t{\n\t\t\tfor (int i = 0; i < sizeof(in->rcsrcs); i++)\n\t\t\t{\n\t\t\t\tlinebuf = getitem(linebuf, buf, sizeof(buf));\n\t\t\t\tif (!linebuf) break;\n\t\t\t\tstrncpy(in->rcsrcs[i], buf, sizeof(in->rcsrcs[0]));\n\t\t\t}\n\t\t}\n\t}\n}\ntypedef enum\n{\n\tTEMPLATE_NONE,\n\tTEMPLATE_TargetExt,\n\tTEMPLATE_ClCompile_PreprocessorDefinitions,\n\tTEMPLATE_Link_AdditionalDependencies,\n\tTEMPLATE_C_SRCS, TEMPLATE_DEF_FILE, TEMPLATE_OBJ_FILE, TEMPLATE_RootNamespace,\n    TEMPLATE_CUSTOM_SPEC, TEMPLATE_CUSTOM_COMMAND, TEMPLATE_DEF_FILE2\n\n} vcxpojlineattr;\ntypedef struct\n{\n\tvcxpojlineattr attr;\n\tconst char *line;\n}vcxpojline;\nvcxpojline vcxtemplate[] = {\n    { TEMPLATE_NONE,\"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?>\" },\n    { TEMPLATE_NONE,\"<Project DefaultTargets=\\\"Build\\\" ToolsVersion=\\\"14.0\\\" xmlns=\\\"http://schemas.microsoft.com/developer/msbuild/2003\\\">\" },\n    { TEMPLATE_NONE,\"  <ItemGroup Label=\\\"ProjectConfigurations\\\">\" },\n    { TEMPLATE_NONE,\"    <ProjectConfiguration Include=\\\"Debug|Win32\\\">\" },\n    { TEMPLATE_NONE,\"      <Configuration>Debug</Configuration>\" },\n    { TEMPLATE_NONE,\"      <Platform>Win32</Platform>\" },\n    { TEMPLATE_NONE,\"    </ProjectConfiguration>\" },\n    { TEMPLATE_NONE,\"    <ProjectConfiguration Include=\\\"Release|Win32\\\">\" },\n    { TEMPLATE_NONE,\"      <Configuration>Release</Configuration>\" },\n    { TEMPLATE_NONE,\"      <Platform>Win32</Platform>\" },\n    { TEMPLATE_NONE,\"    </ProjectConfiguration>\" },\n    { TEMPLATE_NONE,\"  </ItemGroup>\" },\n    { TEMPLATE_NONE,\"  <PropertyGroup Label=\\\"Globals\\\">\" },\n    //{ TEMPLATE_NONE,\"    <ProjectGuid>{B83EEE1C-F8DE-4F82-8928-67F1B142E5F2}</ProjectGuid>\" },\n    { TEMPLATE_NONE,\"    <Keyword>Win32Proj</Keyword>\" },\n    { TEMPLATE_NONE,\"    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\"},\n    { TEMPLATE_RootNamespace,\"    <RootNamespace>keyboard</RootNamespace>\" },\n    { TEMPLATE_NONE,\"  </PropertyGroup>\" },\n    { TEMPLATE_NONE,\"  <Import Project=\\\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\\\" />\" },\n    { TEMPLATE_NONE,\"  <PropertyGroup Condition=\\\"'$(Configuration)|$(Platform)'=='Debug|Win32'\\\" Label=\\\"Configuration\\\">\" },\n    { TEMPLATE_NONE,\"    <ConfigurationType>DynamicLibrary</ConfigurationType>\" },\n    { TEMPLATE_NONE,\"    <UseDebugLibraries>true</UseDebugLibraries>\" },\n    { TEMPLATE_NONE,\"    <PlatformToolset>v141</PlatformToolset>\" },\n    { TEMPLATE_NONE,\"    <CharacterSet>Unicode</CharacterSet>\" },\n    { TEMPLATE_NONE,\"  </PropertyGroup>\" },\n    { TEMPLATE_NONE,\"  <PropertyGroup Condition=\\\"'$(Configuration)|$(Platform)'=='Release|Win32'\\\" Label=\\\"Configuration\\\">\" },\n    { TEMPLATE_NONE,\"    <ConfigurationType>DynamicLibrary</ConfigurationType>\" },\n    { TEMPLATE_NONE,\"    <UseDebugLibraries>false</UseDebugLibraries>\" },\n    { TEMPLATE_NONE,\"    <PlatformToolset>v141</PlatformToolset>\" },\n    { TEMPLATE_NONE,\"    <WholeProgramOptimization>true</WholeProgramOptimization>\" },\n    { TEMPLATE_NONE,\"    <CharacterSet>Unicode</CharacterSet>\" },\n    { TEMPLATE_NONE,\"  </PropertyGroup>\" },\n    { TEMPLATE_NONE,\"  <Import Project=\\\"$(VCTargetsPath)\\Microsoft.Cpp.props\\\" />\" },\n    { TEMPLATE_NONE,\"  <ImportGroup Label=\\\"ExtensionSettings\\\">\" },\n    { TEMPLATE_NONE,\"  </ImportGroup>\" },\n    { TEMPLATE_NONE,\"  <ImportGroup Label=\\\"PropertySheets\\\" Condition=\\\"'$(Configuration)|$(Platform)'=='Debug|Win32'\\\">\" },\n    { TEMPLATE_NONE,\"    <Import Project=\\\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\\\" Condition=\\\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\\\" Label=\\\"LocalAppDataPlatform\\\" />\" },\n    { TEMPLATE_NONE,\"  </ImportGroup>\" },\n    { TEMPLATE_NONE,\"  <ImportGroup Label=\\\"PropertySheets\\\" Condition=\\\"'$(Configuration)|$(Platform)'=='Release|Win32'\\\">\" },\n    { TEMPLATE_NONE,\"    <Import Project=\\\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\\\" Condition=\\\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\\\" Label=\\\"LocalAppDataPlatform\\\" />\" },\n    { TEMPLATE_NONE,\"  </ImportGroup>\" },\n    { TEMPLATE_NONE,\"  <Import Project=\\\"..\\\\PropertySheet.props\\\" />\"},\n    { TEMPLATE_NONE,\"  <PropertyGroup Label=\\\"UserMacros\\\" />\" },\n    { TEMPLATE_NONE,\"  <PropertyGroup Condition=\\\"'$(Configuration)|$(Platform)'=='Debug|Win32'\\\">\" },\n    { TEMPLATE_NONE,\"    <LinkIncremental>true</LinkIncremental>\" },\n    { TEMPLATE_TargetExt,\"\" },\n    { TEMPLATE_NONE,\"  </PropertyGroup>\" },\n    { TEMPLATE_NONE,\"  <PropertyGroup Condition=\\\"'$(Configuration)|$(Platform)'=='Release|Win32'\\\">\" },\n    { TEMPLATE_NONE,\"    <LinkIncremental>false</LinkIncremental>\" },\n    { TEMPLATE_NONE,\"    <IntDir>Release\\</IntDir>\" },\n    { TEMPLATE_TargetExt,\"\" },\n    { TEMPLATE_NONE,\"  </PropertyGroup>\" },\n    { TEMPLATE_NONE,\"  <ItemDefinitionGroup Condition=\\\"'$(Configuration)|$(Platform)'=='Debug|Win32'\\\">\" },\n    { TEMPLATE_NONE,\"    <ClCompile>\" },\n    { TEMPLATE_NONE,\"      <PrecompiledHeader>\" },\n    { TEMPLATE_NONE,\"      </PrecompiledHeader>\" },\n    { TEMPLATE_NONE,\"      <WarningLevel>Level3</WarningLevel>\" },\n    { TEMPLATE_NONE,\"      <Optimization>Disabled</Optimization>\" },\n    { TEMPLATE_ClCompile_PreprocessorDefinitions,\"      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\" },\n    { TEMPLATE_NONE,\"      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\" },\n    { TEMPLATE_NONE,\"    </ClCompile>\" },\n    { TEMPLATE_NONE,\"    <Link>\" },\n    { TEMPLATE_NONE,\"      <SubSystem>Windows</SubSystem>\" },\n    { TEMPLATE_NONE,\"      <GenerateDebugInformation>true</GenerateDebugInformation>\" },\n    { TEMPLATE_NONE,\"      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)wow32.lib;$(OutDir)krnl386.lib;\" },\n    { TEMPLATE_Link_AdditionalDependencies,\"\" },\n    { TEMPLATE_NONE,\"%(AdditionalDependencies)</AdditionalDependencies>\" },\n    { TEMPLATE_NONE,\"      <GenerateDebugInformation>true</GenerateDebugInformation>\" },\n    { TEMPLATE_NONE,\"      <ModuleDefinitionFile>\" },\n    { TEMPLATE_DEF_FILE,\"\" },\n    { TEMPLATE_NONE,\"      </ModuleDefinitionFile>\" },\n    { TEMPLATE_NONE,\"    </Link>\" },\n    { TEMPLATE_NONE,\"  </ItemDefinitionGroup>\" },\n    { TEMPLATE_NONE,\"  <ItemDefinitionGroup Condition=\\\"'$(Configuration)|$(Platform)'=='Release|Win32'\\\">\" },\n    { TEMPLATE_NONE,\"    <ClCompile>\" },\n    { TEMPLATE_NONE,\"      <WarningLevel>Level3</WarningLevel>\" },\n    { TEMPLATE_NONE,\"      <PrecompiledHeader>\" },\n    { TEMPLATE_NONE,\"      </PrecompiledHeader>\" },\n    { TEMPLATE_NONE,\"      <Optimization>MaxSpeed</Optimization>\" },\n    { TEMPLATE_NONE,\"      <FunctionLevelLinking>true</FunctionLevelLinking>\" },\n    { TEMPLATE_NONE,\"      <IntrinsicFunctions>true</IntrinsicFunctions>\" },\n    { TEMPLATE_ClCompile_PreprocessorDefinitions,\"      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\" },\n    { TEMPLATE_NONE,\"      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\" },\n    { TEMPLATE_NONE,\"    </ClCompile>\" },\n    { TEMPLATE_NONE,\"    <Link>\" },\n    { TEMPLATE_NONE,\"      <SubSystem>Windows</SubSystem>\" },\n    { TEMPLATE_NONE,\"      <GenerateDebugInformation>true</GenerateDebugInformation>\" },\n    { TEMPLATE_NONE,\"      <EnableCOMDATFolding>true</EnableCOMDATFolding>\" },\n    { TEMPLATE_NONE,\"      <OptimizeReferences>true</OptimizeReferences>\" },\n    { TEMPLATE_NONE,\"      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\" },\n    { TEMPLATE_NONE,\"      <ModuleDefinitionFile>\" },\n    { TEMPLATE_DEF_FILE,\"\" },\n    { TEMPLATE_NONE,\"      </ModuleDefinitionFile>\" },\n    { TEMPLATE_NONE,\"      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)wow32.lib;$(OutDir)krnl386.lib;\" },\n    { TEMPLATE_Link_AdditionalDependencies,\"\" },\n    { TEMPLATE_NONE,\"%(AdditionalDependencies)</AdditionalDependencies>\" },\n    { TEMPLATE_NONE,\"    </Link>\" },\n    { TEMPLATE_NONE,\"  </ItemDefinitionGroup>\" },\n    { TEMPLATE_NONE,\"  <ItemGroup>\" },\n    { TEMPLATE_C_SRCS,\"    <ClCompile Include=\\\"keyboard.c\\\" />\" },\n    { TEMPLATE_NONE,\"  </ItemGroup>\" },\n    { TEMPLATE_NONE,\"  <ItemGroup>\" },\n    { TEMPLATE_OBJ_FILE,\"    <Object Include=\\\"keyboard.drv16.obj\\\" />\" },\n    { TEMPLATE_NONE,\"  </ItemGroup>\" },\n    { TEMPLATE_NONE, \"  <ItemGroup>\" },\n    { TEMPLATE_CUSTOM_SPEC, \"    <CustomBuild Include=\\\"%s.spec\\\">\" },\n    { TEMPLATE_NONE, \"      <FileType>Document</FileType>\" },\n    { TEMPLATE_CUSTOM_COMMAND, \"      <Command Condition=\\\"'$(Platform)'=='Win32'\\\">\\\"$(OutDir)convspec\\\" \\\"%%(Filename).spec\\\" %s &gt; \\\"%%(Filename).asm\\\" &amp;&amp; \\\"$(AsmPath)as\\\" --32 -o \\\"%%(Filename).obj\\\" \\\"%%(Filename).asm\\\"</Command>\" },\n    { TEMPLATE_NONE, \"      <Outputs Condition=\\\"'$(Platform)'=='Win32'\\\">%(Filename).obj</Outputs>\" },\n    { TEMPLATE_NONE, \"    </CustomBuild>\" },\n    { TEMPLATE_NONE, \"  </ItemGroup>\" },\n    { TEMPLATE_NONE, \"  <ItemGroup>\" },\n    { TEMPLATE_DEF_FILE2, \"    <None Include=\\\"%s.def\\\" />\\n\" },\n    { TEMPLATE_NONE, \"  </ItemGroup>\" },\n    { TEMPLATE_NONE,\"  <Import Project=\\\"$(VCTargetsPath)\\Microsoft.Cpp.targets\\\" />\" },\n    { TEMPLATE_NONE,\"  <ImportGroup Label=\\\"ExtensionTargets\\\">\" },\n    { TEMPLATE_NONE,\"  </ImportGroup>\" },\n    { TEMPLATE_NONE,\"</Project>\" }\n};\n#define GetArrayLength(A) (sizeof(A) / sizeof(A[0]))\nvoid generateVCproject(makein *in, FILE *out)\n{\n\tconst char * targetext = PathFindExtensionA(in->module);\n\tconst char target[128] = { 0 };\n\tstrncpy(target, in->module, strlen(in->module) - strlen(targetext));\n    for (int i = 0; i < GetArrayLength(vcxtemplate); i++)\n    {\n        if (vcxtemplate[i].attr == TEMPLATE_RootNamespace)\n        {\n            fprintf(out, \"    <RootNamespace>%s</RootNamespace>\\n\", target);\n\n        }\n        else if (vcxtemplate[i].attr == TEMPLATE_TargetExt)\n        {\n            fprintf(out, \"<TargetExt>%s</TargetExt>\\n\", targetext);\n        }\n        else if (vcxtemplate[i].attr == TEMPLATE_Link_AdditionalDependencies)\n        {\n            for (int j = 0; j < GetArrayLength(in->imports); j++)\n            {\n                if (!strlen(in->imports[j]))\n                    break;\n                fprintf(out, \"%s.lib;\", in->imports[j]);\n            }\n        }\n        else if (vcxtemplate[i].attr == TEMPLATE_C_SRCS)\n        {\n            for (int j = 0; j < GetArrayLength(in->csrcs); j++)\n            {\n                if (!strlen(in->csrcs[j]))\n                    break;\n                fprintf(out, \"    <ClCompile Include=\\\"%s\\\" />\\n\", in->csrcs[j]);\n            }\n        }\n        else if (vcxtemplate[i].attr == TEMPLATE_DEF_FILE)\n        {\n            fprintf(out, \"%s.def\\n\", target);\n        }\n        else if (vcxtemplate[i].attr == TEMPLATE_OBJ_FILE)\n        {\n            fprintf(out, \"    <Object Include=\\\"%s.obj\\\" />\\n\", in->module);\n        }\n        else if (vcxtemplate[i].attr == TEMPLATE_CUSTOM_SPEC)\n        {\n            fprintf(out, vcxtemplate[i].line, in->module);\n            fprintf(out, \"\\n\");\n        }\n        else if (vcxtemplate[i].attr == TEMPLATE_CUSTOM_COMMAND)\n        {\n            char mod[2445];\n            for (int j = 0; target[j]; j++)\n            {\n                mod[j] = toupper(target[j]);\n                if (!target[j + 1])\n                    mod[j + 1] = 0;\n            }\n            fprintf(out, vcxtemplate[i].line, mod);\n            fprintf(out, \"\\n\");\n        }\n        else if (vcxtemplate[i].attr == TEMPLATE_DEF_FILE2)\n        {\n            fprintf(out, vcxtemplate[i].line, target);\n        }\n\t\telse\n\t\t{\n\t\t\tfprintf(out, \"%s\\n\", vcxtemplate[i].line);\n\t\t}\n\n\t}\n}\nvoid generateDEF(makein *makedata, const char *spec, const char *path)\n{\n\tchar buf[512];\n    ESCAPE(spec);\n\tint c = snprintf(buf, sizeof(buf), \"convspec %s -DEF > \\\"%s\\\"\", E(spec), path);\n    FESC(spec);\n    assert(c < sizeof(buf) - 1);\n\tsystem(buf);\n}\nvoid generateASM(makein *makedata, const char *spec, const char *path, const char *mod)\n{\n\tchar buf[512];\n    ESCAPE(spec); ESCAPE(mod);\n\tint c = snprintf(buf, sizeof(buf), \"convspec %s %s > \\\"%s\\\"\", E(spec), E(mod), path);\n    FESC(spec); FESC(mod);\n    assert(c < sizeof(buf) - 1);\n\tsystem(buf);\n}\nint main(int argc, char **argv)\n{\n\tif (argc != 3)\n\t{\n        puts(\"Converts wine DLL source Makefiles to MSVC projects.\");\n\t\tputs(\"usage: convertwinefile <dll directory> <2>\");\n\t\treturn 0;\n\t}\n\tchar *dir = argv[1];\n\tchar *dir2 = argv[2];\n\tcopy(dir, dir2);\n\tmakein makedata = { 0 };\n\tchar makefile_in_path[MAX_PATH] = { 0 };\n\tstrncpy(makefile_in_path, dir2, sizeof(makefile_in_path));\n\tstrncat(makefile_in_path, \"/Makefile.in\", sizeof(makefile_in_path));\n\tFILE *makefile_in = fopen(makefile_in_path, \"r\");\n\tparsemakein(makefile_in, &makedata);\n\tfclose(makefile_in);\n\tchar proj_in_path[MAX_PATH] = { 0 };\n\tstrncpy(proj_in_path, dir2, sizeof(proj_in_path));\n\tstrncat(makefile_in_path, \"/\", sizeof(makefile_in_path));\n\tstrncat(makefile_in_path, \"/Makefile.in\", sizeof(makefile_in_path));\n\tchar projname[MAX_PATH] = { 0 };\n\tstrncpy(projname, PathFindFileNameA(dir2), sizeof(projname));\n\tPathRemoveExtensionA(projname);\n\tchar projpath[MAX_PATH] = { 0 };\n\tstrncpy(projpath, dir2, sizeof(projpath));\n\tPathAddBackslashA(projpath);\n\tstrncat(projpath, projname, MAX_PATH);//PathAppendA(projpath, projpath, projname);\n\tPathAddExtensionA(projpath, \".vcxproj\");\n\tFILE *proj = fopen(projpath, \"w+\");\n\tgenerateVCproject(&makedata, proj);\n\tfclose(proj);\n\tchar specpath[MAX_PATH] = { 0 };\n\tstrncpy(specpath, dir2, sizeof(specpath));\n\tPathAddBackslashA(specpath);\n\tstrncat(specpath, makedata.module, MAX_PATH);//\tPathAppendA(asmpath, asmpath, makedata.module);\n\tstrncat(specpath, \".spec\", MAX_PATH);\n\tchar defpath[MAX_PATH] = { 0 };\n\tstrncpy(defpath, dir2, sizeof(defpath));\n\tPathAddBackslashA(defpath);\n\tstrncat(defpath, projname, MAX_PATH);//\tPathAppendA(defpath, defpath, projname);\n\tPathAddExtensionA(defpath, \".def\");\n\tgenerateDEF(&makedata, specpath, defpath);\n\treturn 0;\n}\n"
  },
  {
    "path": "convspec/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c)\nadd_executable(convspec ${SOURCE})\ninclude_directories(../wine)\nadd_definitions(-D__i386__ -Dpopen=_popen -Dpclose=_pclose\n -Dstrncasecmp=_strnicmp -Dstrcasecmp=_stricmp)\nif (MSVC)\n    add_definitions(-DWINEBUILD_MSVC)\nendif()\n\n"
  },
  {
    "path": "convspec/build.h",
    "content": "/*\n * Copyright 1993 Robert J. Amstadt\n * Copyright 1995 Martin von Loewis\n * Copyright 1995, 1996, 1997 Alexandre Julliard\n * Copyright 1997 Eric Youngdale\n * Copyright 1999 Ulrich Weigand\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_BUILD_H\n#define __WINE_BUILD_H\n\n#ifndef __WINE_CONFIG_H\n# error You must include config.h to use this header\n#endif\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#ifndef max\n#define max(a,b)   (((a) > (b)) ? (a) : (b))\n#endif\n#ifndef min\n#define min(a,b)   (((a) < (b)) ? (a) : (b))\n#endif\n\ntypedef enum\n{\n    TYPE_VARIABLE,     /* variable */\n    TYPE_PASCAL,       /* pascal function (Win16) */\n    TYPE_ABS,          /* absolute value (Win16) */\n    TYPE_STUB,         /* unimplemented stub */\n    TYPE_STDCALL,      /* stdcall function (Win32) */\n    TYPE_CDECL,        /* cdecl function (Win32) */\n    TYPE_VARARGS,      /* varargs function (Win32) */\n    TYPE_THISCALL,     /* thiscall function (Win32 on i386) */\n    TYPE_EXTERN,       /* external symbol (Win32) */\n    TYPE_NBTYPES\n} ORD_TYPE;\n\ntypedef enum\n{\n    SPEC_WIN16,\n    SPEC_WIN32\n} SPEC_TYPE;\n\nenum arg_type\n{\n    ARG_WORD,     /* 16-bit word */\n    ARG_SWORD,    /* 16-bit signed word */\n    ARG_SEGPTR,   /* segmented pointer */\n    ARG_SEGSTR,   /* segmented pointer to Ansi string */\n    ARG_LONG,     /* long */\n    ARG_PTR,      /* pointer */\n    ARG_STR,      /* pointer to Ansi string */\n    ARG_WSTR,     /* pointer to Unicode string */\n    ARG_INT64,    /* 64-bit integer */\n    ARG_INT128,   /* 128-bit integer */\n    ARG_FLOAT,    /* 32-bit float */\n    ARG_DOUBLE,   /* 64-bit float */\n    ARG_MAXARG = ARG_DOUBLE\n};\n\n#define MAX_ARGUMENTS 32\n\ntypedef struct\n{\n    int n_values;\n    unsigned int *values;\n} ORD_VARIABLE;\n\ntypedef struct\n{\n    int           nb_args;\n    int           args_str_offset;\n    enum arg_type args[MAX_ARGUMENTS];\n} ORD_FUNCTION;\n\ntypedef struct\n{\n    unsigned short value;\n} ORD_ABS;\n\ntypedef struct\n{\n    ORD_TYPE    type;\n    int         ordinal;\n    int         lineno;\n    int         flags;\n    char       *name;         /* public name of this function */\n    char       *link_name;    /* name of the C symbol to link to */\n    char       *export_name;  /* name exported under for noname exports */\n    union\n    {\n        ORD_VARIABLE   var;\n        ORD_FUNCTION   func;\n        ORD_ABS        abs;\n    } u;\n} ORDDEF;\n\ntypedef struct\n{\n    char            *src_name;           /* file name of the source spec file */\n    char            *file_name;          /* file name of the dll */\n    char            *dll_name;           /* internal name of the dll */\n    char            *c_name;             /* internal name of the dll, as a C-compatible identifier */\n    char            *init_func;          /* initialization routine */\n    char            *main_module;        /* main Win32 module for Win16 specs */\n    SPEC_TYPE        type;               /* type of dll (Win16/Win32) */\n    int              base;               /* ordinal base */\n    int              limit;              /* ordinal limit */\n    int              stack_size;         /* exe stack size */\n    int              heap_size;          /* exe heap size */\n    int              nb_entry_points;    /* number of used entry points */\n    int              alloc_entry_points; /* number of allocated entry points */\n    int              nb_names;           /* number of entry points with names */\n    unsigned int     nb_resources;       /* number of resources */\n    int              characteristics;    /* characteristics for the PE header */\n    int              dll_characteristics;/* DLL characteristics for the PE header */\n    int              subsystem;          /* subsystem id */\n    int              subsystem_major;    /* subsystem version major number */\n    int              subsystem_minor;    /* subsystem version minor number */\n    ORDDEF          *entry_points;       /* dll entry points */\n    ORDDEF         **names;              /* array of entry point names (points into entry_points) */\n    ORDDEF         **ordinals;           /* array of dll ordinals (points into entry_points) */\n    struct resource *resources;          /* array of dll resources (format differs between Win16/Win32) */\n} DLLSPEC;\n\nenum target_cpu\n{\n    CPU_x86, CPU_x86_64, CPU_POWERPC, CPU_ARM, CPU_ARM64, CPU_LAST = CPU_ARM64\n};\n\nenum target_platform\n{\n    PLATFORM_UNSPECIFIED,\n    PLATFORM_APPLE,\n    PLATFORM_FREEBSD,\n    PLATFORM_SOLARIS,\n    PLATFORM_WINDOWS\n};\n\nextern char *target_alias;\nextern enum target_cpu target_cpu;\nextern enum target_platform target_platform;\n\nstruct strarray\n{\n    const char **str;\n    unsigned int count;\n    unsigned int max;\n};\n\n/* entry point flags */\n#define FLAG_NORELAY   0x01  /* don't use relay debugging for this function */\n#define FLAG_NONAME    0x02  /* don't export function by name */\n#define FLAG_RET16     0x04  /* function returns a 16-bit value */\n#define FLAG_RET64     0x08  /* function returns a 64-bit value */\n#define FLAG_REGISTER  0x10  /* use register calling convention */\n#define FLAG_PRIVATE   0x20  /* function is private (cannot be imported) */\n#define FLAG_ORDINAL   0x40  /* function should be imported by ordinal */\n#define FLAG_STKPROLOG 0x80  /* add stack adjust prolog for programs that hook exports */\n\n#define FLAG_FORWARD   0x100  /* function is a forwarded name */\n#define FLAG_EXT_LINK  0x200  /* function links to an external symbol */\n#define FLAG_EXPORT32  0x400  /* 32-bit export in 16-bit spec file */\n\n#define FLAG_CPU(cpu)  (0x01000 << (cpu))\n#define FLAG_CPU_MASK  (FLAG_CPU(CPU_LAST + 1) - FLAG_CPU(0))\n#define FLAG_CPU_WIN64 (FLAG_CPU(CPU_x86_64) | FLAG_CPU(CPU_ARM64))\n#define FLAG_CPU_WIN32 (FLAG_CPU_MASK & ~FLAG_CPU_WIN64)\n\n#define MAX_ORDINALS  65535\n\n/* some Windows constants */\n\n#define IMAGE_FILE_RELOCS_STRIPPED\t   0x0001 /* No relocation info */\n#define IMAGE_FILE_EXECUTABLE_IMAGE\t   0x0002\n#define IMAGE_FILE_LINE_NUMS_STRIPPED      0x0004\n#define IMAGE_FILE_LOCAL_SYMS_STRIPPED     0x0008\n#define IMAGE_FILE_AGGRESIVE_WS_TRIM\t   0x0010\n#define IMAGE_FILE_LARGE_ADDRESS_AWARE\t   0x0020\n#define IMAGE_FILE_16BIT_MACHINE\t   0x0040\n#define IMAGE_FILE_BYTES_REVERSED_LO\t   0x0080\n#define IMAGE_FILE_32BIT_MACHINE\t   0x0100\n#define IMAGE_FILE_DEBUG_STRIPPED\t   0x0200\n#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400\n#define IMAGE_FILE_NET_RUN_FROM_SWAP\t   0x0800\n#define IMAGE_FILE_SYSTEM\t\t   0x1000\n#define IMAGE_FILE_DLL\t\t\t   0x2000\n#define IMAGE_FILE_UP_SYSTEM_ONLY\t   0x4000\n#define IMAGE_FILE_BYTES_REVERSED_HI\t   0x8000\n\n#define IMAGE_DLLCHARACTERISTICS_NX_COMPAT 0x0100\n\n#define\tIMAGE_SUBSYSTEM_NATIVE      1\n#define\tIMAGE_SUBSYSTEM_WINDOWS_GUI 2\n#define\tIMAGE_SUBSYSTEM_WINDOWS_CUI 3\n#define\tIMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9\n\n/* global functions */\n\n#ifndef __GNUC__\n#define __attribute__(X)\n#endif\n\n#ifndef DECLSPEC_NORETURN\n# if defined(_MSC_VER) && (_MSC_VER >= 1200) && !defined(MIDL_PASS)\n#  define DECLSPEC_NORETURN __declspec(noreturn)\n# else\n#  define DECLSPEC_NORETURN __attribute__((noreturn))\n# endif\n#endif\n\nextern void *xmalloc (size_t size);\nextern void *xrealloc (void *ptr, size_t size);\nextern char *xstrdup( const char *str );\nextern char *strupper(char *s);\nextern int strendswith(const char* str, const char* end);\nextern char *strmake(const char* fmt, ...) __attribute__((__format__ (__printf__, 1, 2 )));\nextern struct strarray strarray_fromstring( const char *str, const char *delim );\nextern void strarray_add( struct strarray *array, ... );\nextern void strarray_addv( struct strarray *array, char * const *argv );\nextern void strarray_addall( struct strarray *array, struct strarray args );\nextern DECLSPEC_NORETURN void fatal_error( const char *msg, ... )\n   __attribute__ ((__format__ (__printf__, 1, 2)));\nextern DECLSPEC_NORETURN void fatal_perror( const char *msg, ... )\n   __attribute__ ((__format__ (__printf__, 1, 2)));\nextern void error( const char *msg, ... )\n   __attribute__ ((__format__ (__printf__, 1, 2)));\nextern void warning( const char *msg, ... )\n   __attribute__ ((__format__ (__printf__, 1, 2)));\nextern int output( const char *format, ... )\n   __attribute__ ((__format__ (__printf__, 1, 2)));\nextern void output_cfi( const char *format, ... )\n   __attribute__ ((__format__ (__printf__, 1, 2)));\nextern void spawn( struct strarray array );\nextern struct strarray find_tool( const char *name, const char * const *names );\nextern struct strarray get_as_command(void);\nextern struct strarray get_ld_command(void);\nextern const char *get_nm_command(void);\nextern void cleanup_tmp_files(void);\nextern char *get_temp_file_name( const char *prefix, const char *suffix );\nextern void output_standard_file_header(void);\nextern FILE *open_input_file( const char *srcdir, const char *name );\nextern void close_input_file( FILE *file );\nextern void dump_bytes( const void *buffer, unsigned int size );\nextern int remove_stdcall_decoration( char *name );\nextern void assemble_file( const char *src_file, const char *obj_file );\nextern DLLSPEC *alloc_dll_spec(void);\nextern void free_dll_spec( DLLSPEC *spec );\nextern char *make_c_identifier( const char *str );\nextern const char *get_stub_name( const ORDDEF *odp, const DLLSPEC *spec );\nextern int get_cpu_from_name( const char *name );\nextern unsigned int get_alignment(unsigned int align);\nextern unsigned int get_page_size(void);\nextern unsigned int get_ptr_size(void);\nextern unsigned int get_args_size( const ORDDEF *odp );\nextern const char *asm_name( const char *func );\nextern const char *func_declaration( const char *func );\nextern const char *asm_globl( const char *func );\nextern const char *get_asm_ptr_keyword(void);\nextern const char *get_asm_string_keyword(void);\nextern const char *get_asm_rodata_section(void);\nextern const char *get_asm_string_section(void);\nextern void output_function_size( const char *name );\nextern void output_gnu_stack_note(void);\n\nextern void add_import_dll( const char *name, const char *filename );\nextern void add_delayed_import( const char *name );\nextern void add_extra_ld_symbol( const char *name );\nextern void read_undef_symbols( DLLSPEC *spec, char **argv );\nextern void resolve_imports( DLLSPEC *spec );\nextern int is_undefined( const char *name );\nextern int has_imports(void);\nextern void output_get_pc_thunk(void);\nextern void output_module( DLLSPEC *spec );\nextern void output_stubs( DLLSPEC *spec );\nextern void output_imports( DLLSPEC *spec );\nextern void output_import_lib( DLLSPEC *spec, char **argv );\nextern void output_exports( DLLSPEC *spec );\nextern int load_res32_file( const char *name, DLLSPEC *spec );\nextern void output_resources( DLLSPEC *spec );\nextern void output_bin_resources( DLLSPEC *spec, unsigned int start_rva );\nextern void output_fake_module( DLLSPEC *spec );\nextern void output_def_file( DLLSPEC *spec, int include_private );\nextern void load_res16_file( const char *name, DLLSPEC *spec );\nextern void load_res16_from_buf( const unsigned char *buf, int size, DLLSPEC *spec );\nextern void output_res16_data( DLLSPEC *spec );\nextern void output_bin_res16_data( DLLSPEC *spec );\nextern void output_res16_directory( DLLSPEC *spec );\nextern void output_bin_res16_directory( DLLSPEC *spec, unsigned int data_offset );\nextern void output_spec16_file( DLLSPEC *spec );\nextern void output_fake_module16( DLLSPEC *spec16 );\nextern void output_res_o_file( DLLSPEC *spec );\nextern void output_asm_relays16(void);\n\nextern void BuildSpec32File( DLLSPEC *spec );\n\nextern void add_16bit_exports( DLLSPEC *spec32, DLLSPEC *spec16 );\nextern int parse_spec_file( FILE *file, DLLSPEC *spec );\nextern int parse_def_file( FILE *file, DLLSPEC *spec );\n\n/* buffer management */\n\nextern int byte_swapped;\nextern const char *input_buffer_filename;\nextern const unsigned char *input_buffer;\nextern size_t input_buffer_pos;\nextern size_t input_buffer_size;\nextern unsigned char *output_buffer;\nextern size_t output_buffer_pos;\nextern size_t output_buffer_size;\n\nextern void init_input_buffer( const char *file );\nextern void init_output_buffer(void);\nextern void flush_output_buffer(void);\nextern unsigned char get_byte(void);\nextern unsigned short get_word(void);\nextern unsigned int get_dword(void);\nextern void put_data( const void *data, size_t size );\nextern void put_byte( unsigned char val );\nextern void put_word( unsigned short val );\nextern void put_dword( unsigned int val );\nextern void put_qword( unsigned int val );\nextern void put_pword( unsigned int val );\nextern void align_output( unsigned int align );\n\n/* global variables */\n\nextern int current_line;\nextern int UsePIC;\nextern int nb_errors;\nextern int display_warnings;\nextern int kill_at;\nextern int verbose;\nextern int link_ext_symbols;\nextern int force_pointer_size;\nextern int unwind_tables;\n\nextern char *input_file_name;\nextern char *spec_file_name;\nextern FILE *output_file;\nextern const char *output_file_name;\n\nextern struct strarray lib_path;\nextern struct strarray as_command;\nextern struct strarray cc_command;\nextern struct strarray ld_command;\nextern struct strarray nm_command;\nextern char *cpu_option;\nextern char *arch_option;\nextern const char *float_abi_option;\nextern int thumb_mode;\nextern int needs_get_pc_thunk;\n\nextern const char *asm_name_stdcall16(const char *sym, ORDDEF *ord);\nconst char *asm_name_stdcall32(const char *sym, ORDDEF *ord);\n#endif  /* __WINE_BUILD_H */\n"
  },
  {
    "path": "convspec/convspec.c",
    "content": "// -*- tab-width: 4 -*-\n// # vim: set expandtab: ts=4 \n// Converts Win32 wine spec files to Win16 specs. Based on winebuild.\n// otya 2018\n#include <stdio.h>\n/* Stubs */\nstatic char *optarg;\nstatic int optind;\nstatic int opterr;\nstatic int optopt;\nstruct option;\nstruct option\n{\n    const char *name;\n    int has_arg;\n    int *flag;\n    int val;\n};\nstatic int getopt_long(int ___argc, char *const *___argv,\n    const char *__shortopts,\n    const struct option *__longopts, int *__longind)\n{\n    fprintf(stderr, \"getopt_long: stub\\n\");\n    return 0;\n}\nstatic int getopt_long_only(int ___argc, char *const *___argv,\n    const char *__shortopts,\n    const struct option *__longopts, int *__longind)\n{\n    fprintf(stderr, \"getopt_long_only: stub\\n\");\n    return 0;\n}\nint mkstemps(char *template, int suffix_len)\n{\n    fprintf(stderr, \"mkstemps: stub\\n\");\n    return 0;\n}\n#define main __main\n#include \"main.c.h\"\n#include \"ver.h\"\nchar *nb_lib_paths;\n#undef main\nstatic int parse_input_file(DLLSPEC *spec);\nint main(int argc, char* argv[])\n{\n    int add_ver = 0;\n\tif (argc <= 1)\n\t{\n\t\tprintf(\"wine spec file convert tool\\nusage: %s specfile(16bit only) module name [-EXE]\\n%s specfile(16bit only) -DEF\\n\", argv[0], argv[0]);\n\t\tfatal_error(\"file argument '%s' not allowed in this mode\\n\", argv[0]);\n\t}\n\tDLLSPEC *spec = alloc_dll_spec();\n\tspec_file_name = argv[1];\n\texec_mode = MODE_DLL;\n\tspec->type = SPEC_WIN16;\n\tspec->file_name = spec_file_name;\n    /* remove dir */\n    if (strrchr(spec->file_name, '\\\\'))\n    {\n        spec->file_name = strrchr(spec->file_name, '\\\\') + 1;\n    }\n    if (strrchr(spec->file_name, '/'))\n    {\n        spec->file_name = strrchr(spec->file_name, '/') + 1;\n    }\n    /* remove spec extension */\n    if (strstr(spec->file_name, \".spec\"))\n    {\n        spec->file_name = xstrdup(spec->file_name);\n        strstr(spec->file_name, \".spec\")[0] = '\\0';\n    }\n\toutput_file = stdout;\n    target_cpu = CPU_x86;\n    init_dll_name(spec);\n    if (argc > 2)\n    {\n        for (int i = 2; i < argc; i++)\n        {\n            if (!strcmp(argv[i], \"--heap\") && argc > i + 1)\n            {\n                spec->heap_size = atoi(argv[++i]);\n            }\n            else if (!strcmp(argv[i], \"-DEF\"))\n            {\n                exec_mode = MODE_DEF;\n            } \n            else if (!strcmp(argv[i], \"-EXE\"))\n            {\n                exec_mode = MODE_EXE;\n            }\n            else if (!strcmp(argv[i], \"-32\"))\n            {\n                spec->type = SPEC_WIN32;\n            }\n            else if (!strcmp(argv[i], \"-ver\"))\n            {\n                add_ver = 1;\n            }\n            else if (argv[i][0] != '-')\n            {\n                spec->main_module = xstrdup(argv[i]);\n                spec->dll_name = xstrdup(argv[i]);\n            }\n        }\n    }\n\telse\n\t{\n\t\tinit_dll_name(spec);\n\t}\n\tswitch (exec_mode)\n\t{\n\tcase MODE_DEF:\n\t\tif (!spec_file_name) fatal_error(\"missing .spec file\\n\");\n\t\tif (!parse_input_file(spec)) break;\n\t\toutput_def_file(spec, 1);\n\t\tbreak;\n\tcase MODE_DLL:\n\t\tif (spec->subsystem != IMAGE_SUBSYSTEM_NATIVE)\n\t\t\tspec->characteristics |= IMAGE_FILE_DLL;\n\t\t/* fall through */\n\tcase MODE_EXE:\n\t\tload_resources(argv, spec);\n\t\tload_import_libs(argv);\n\t\tif (spec_file_name && !parse_input_file(spec)) break;\n        if (add_ver)\n        {\n            char outname[13] = {0};\n            strncpy(outname, spec->dll_name, 12);\n            strcpy(ver_res + 0x144, outname);\n            load_res16_from_buf(ver_res, ver_res_len, spec);\n        }\n\t\tif (fake_module)\n\t\t{\n\t\t\tif (spec->type == SPEC_WIN16) output_fake_module16(spec);\n\t\t\telse output_fake_module(spec);\n\t\t\tbreak;\n\t\t}\n\t\t//read_undef_symbols(spec, argv);\n        if (spec->type == SPEC_WIN16 && exec_mode == MODE_EXE)\n            spec->init_func = xstrdup(\"__wine_spec_exe16_entry\");\n\t\tswitch (spec->type)\n\t\t{\n\t\tcase SPEC_WIN16:\n\t\t\toutput_spec16_file(spec);\n\t\t\tbreak;\n\t\tcase SPEC_WIN32:\n\t\t\tBuildSpec32File(spec);\n\t\t\tbreak;\n\t\tdefault: assert(0);\n\t\t}\n\t\tbreak;\n\t}\n\tif (nb_errors) exit(1);\n\treturn EXIT_SUCCESS;\n}\n\n"
  },
  {
    "path": "convspec/convspec.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{DC6BA231-C318-436F-8F5C-5E2CC73779E2}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>convspec</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WINEBUILD_MSVC;WIN32;_DEBUG;_CONSOLE;_LIB;__i386__;popen=_popen;pclose=_pclose\n;strncasecmp=_strnicmp;strcasecmp=_stricmp;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)libwine.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WINEBUILD_MSVC;WIN32;NDEBUG;_CONSOLE;_LIB;__i386__;popen=_popen;pclose=_pclose\n;strncasecmp=_strnicmp;strcasecmp=_stricmp;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClInclude Include=\"build.h\" />\n    <ClInclude Include=\"main.c.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"convspec.c\" />\n    <ClCompile Include=\"import.c\" />\n    <ClCompile Include=\"parser.c\" />\n    <ClCompile Include=\"relay.c\" />\n    <ClCompile Include=\"res16.c\" />\n    <ClCompile Include=\"res32.c\" />\n    <ClCompile Include=\"spec16.c\" />\n    <ClCompile Include=\"spec32.c\" />\n    <ClCompile Include=\"utils.c\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "convspec/convspec.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"ソース ファイル\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"ヘッダー ファイル\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"リソース ファイル\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"build.h\">\n      <Filter>ヘッダー ファイル</Filter>\n    </ClInclude>\n    <ClInclude Include=\"main.c.h\">\n      <Filter>ヘッダー ファイル</Filter>\n    </ClInclude>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"parser.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"utils.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"res16.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"spec16.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"import.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"relay.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"spec32.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"res32.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"convspec.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "convspec/import.c",
    "content": "/*\n * DLL imports support\n *\n * Copyright 2000, 2004 Alexandre Julliard\n * Copyright 2000 Eric Pouech\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <assert.h>\n#include <ctype.h>\n#include <fcntl.h>\n#include <stdio.h>\n#include <string.h>\n#include <stdarg.h>\n#ifdef HAVE_SYS_STAT_H\n# include <sys/stat.h>\n#endif\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n\n#include \"wine/list.h\"\n#include \"build.h\"\n\nstruct import_func\n{\n    const char *name;\n    const char *export_name;\n    int         ordinal;\n};\n\nstruct import\n{\n    struct list         entry;       /* entry in global dll list */\n    char               *dll_name;    /* exported file name of the dll */\n    char               *c_name;      /* dll name as a C-compatible identifier */\n    char               *full_name;   /* full name of the input file */\n    dev_t               dev;         /* device/inode of the input file */\n    ino_t               ino;\n    ORDDEF            **exports;     /* functions exported from this dll */\n    int                 nb_exports;  /* number of exported functions */\n    struct import_func *imports;     /* functions we want to import from this dll */\n    int                 nb_imports;  /* number of imported functions */\n    int                 max_imports; /* size of imports array */\n};\n\nstatic struct strarray undef_symbols;    /* list of undefined symbols */\nstatic struct strarray extra_ld_symbols; /* list of extra symbols that ld should resolve */\nstatic struct strarray delayed_imports;  /* list of delayed import dlls */\nstatic struct strarray ext_link_imports; /* list of external symbols to link to */\n\nstatic struct list dll_imports = LIST_INIT( dll_imports );\nstatic struct list dll_delayed = LIST_INIT( dll_delayed );\n\nstatic struct strarray as_files;\n\nstatic const char import_func_prefix[] = \"__wine$func$\";\nstatic const char import_ord_prefix[]  = \"__wine$ord$\";\n\nstatic inline const char *ppc_reg( int reg )\n{\n    static const char * const ppc_regs[32] = { \"r0\", \"r1\", \"r2\", \"r3\", \"r4\", \"r5\", \"r6\", \"r7\",\n                                               \"r8\", \"r9\", \"r10\",\"r11\",\"r12\",\"r13\",\"r14\",\"r15\",\n                                               \"r16\",\"r17\",\"r18\",\"r19\",\"r20\",\"r21\",\"r22\",\"r23\",\n                                               \"r24\",\"r25\",\"r26\",\"r27\",\"r28\",\"r29\",\"r30\",\"r31\" };\n    if (target_platform == PLATFORM_APPLE) return ppc_regs[reg];\n    return ppc_regs[reg] + 1;  /* skip the 'r' */\n}\n\n/* compare function names; helper for resolve_imports */\nstatic int name_cmp( const void *name, const void *entry )\n{\n    return strcmp( *(const char* const *)name, *(const char* const *)entry );\n}\n\n/* compare function names; helper for resolve_imports */\nstatic int func_cmp( const void *func1, const void *func2 )\n{\n    const ORDDEF *odp1 = *(const ORDDEF * const *)func1;\n    const ORDDEF *odp2 = *(const ORDDEF * const *)func2;\n    return strcmp( odp1->name ? odp1->name : odp1->export_name,\n                   odp2->name ? odp2->name : odp2->export_name );\n}\n\n/* remove a name from a name table */\nstatic inline void remove_name( struct strarray *table, unsigned int idx )\n{\n    assert( idx < table->count );\n    memmove( table->str + idx, table->str + idx + 1,\n             (table->count - idx - 1) * sizeof(*table->str) );\n    table->count--;\n}\n\n/* locate a name in a (sorted) list */\nstatic inline const char *find_name( const char *name, const struct strarray *table )\n{\n    char **res = NULL;\n\n    if (table->count) res = bsearch( &name, table->str, table->count, sizeof(*table->str), name_cmp );\n    return res ? *res : NULL;\n}\n\n/* sort a name table */\nstatic inline void sort_names( struct strarray *table )\n{\n    if (table->count) qsort( table->str, table->count, sizeof(*table->str), name_cmp );\n}\n\n/* locate an export in a (sorted) export list */\nstatic inline ORDDEF *find_export( const char *name, ORDDEF **table, int size )\n{\n    ORDDEF func, *odp, **res = NULL;\n\n    func.name = xstrdup(name);\n    func.ordinal = -1;\n    odp = &func;\n    if (table) res = bsearch( &odp, table, size, sizeof(*table), func_cmp );\n    free( func.name );\n    return res ? *res : NULL;\n}\n\n/* free an import structure */\nstatic void free_imports( struct import *imp )\n{\n    free( imp->exports );\n    free( imp->imports );\n    free( imp->dll_name );\n    free( imp->c_name );\n    free( imp->full_name );\n    free( imp );\n}\n\n/* check whether a given dll is imported in delayed mode */\nstatic int is_delayed_import( const char *name )\n{\n    unsigned int i;\n\n    for (i = 0; i < delayed_imports.count; i++)\n    {\n        if (!strcmp( delayed_imports.str[i], name )) return 1;\n    }\n    return 0;\n}\n\n/* find an imported dll from its name */\nstatic struct import *find_import_dll( const char *name )\n{\n    struct import *import;\n\n    LIST_FOR_EACH_ENTRY( import, &dll_imports, struct import, entry )\n        if (!strcasecmp( import->dll_name, name )) return import;\n    LIST_FOR_EACH_ENTRY( import, &dll_delayed, struct import, entry )\n        if (!strcasecmp( import->dll_name, name )) return import;\n    return NULL;\n}\n\n/* open the .so library for a given dll in a specified path */\nstatic char *try_library_path( const char *path, const char *name )\n{\n    char *buffer;\n    int fd;\n\n    buffer = strmake( \"%s/lib%s.def\", path, name );\n\n    /* check if the file exists */\n    if ((fd = open( buffer, O_RDONLY )) != -1)\n    {\n        close( fd );\n        return buffer;\n    }\n    free( buffer );\n    return NULL;\n}\n\n/* find the .def import library for a given dll */\nstatic char *find_library( const char *name )\n{\n    char *fullname;\n    unsigned int i;\n\n    for (i = 0; i < lib_path.count; i++)\n    {\n        if ((fullname = try_library_path( lib_path.str[i], name ))) return fullname;\n    }\n    fatal_error( \"could not open .def file for %s\\n\", name );\n    return NULL;\n}\n\n/* read in the list of exported symbols of an import library */\nstatic DLLSPEC *read_import_lib( struct import *imp )\n{\n    FILE *f;\n    int i;\n    struct stat stat;\n    struct import *prev_imp;\n    DLLSPEC *spec = alloc_dll_spec();\n\n    f = open_input_file( NULL, imp->full_name );\n    fstat( fileno(f), &stat );\n    imp->dev = stat.st_dev;\n    imp->ino = stat.st_ino;\n    if (!parse_def_file( f, spec )) exit( 1 );\n    close_input_file( f );\n\n    /* check if we already imported that library from a different file */\n    if ((prev_imp = find_import_dll( spec->file_name )))\n    {\n        if (prev_imp->dev != imp->dev || prev_imp->ino != imp->ino)\n            fatal_error( \"%s and %s have the same export name '%s'\\n\",\n                         prev_imp->full_name, imp->full_name, spec->file_name );\n        free_dll_spec( spec );\n        return NULL;  /* the same file was already loaded, ignore this one */\n    }\n\n    if (spec->nb_entry_points)\n    {\n        imp->exports = xmalloc( spec->nb_entry_points * sizeof(*imp->exports) );\n        for (i = 0; i < spec->nb_entry_points; i++)\n            imp->exports[imp->nb_exports++] = &spec->entry_points[i];\n        qsort( imp->exports, imp->nb_exports, sizeof(*imp->exports), func_cmp );\n    }\n    return spec;\n}\n\n/* build the dll exported name from the import lib name or path */\nstatic char *get_dll_name( const char *name, const char *filename )\n{\n    char *ret;\n\n    if (filename)\n    {\n        const char *basename = strrchr( filename, '/' );\n        if (!basename) basename = filename;\n        else basename++;\n        if (!strncmp( basename, \"lib\", 3 )) basename += 3;\n        ret = xmalloc( strlen(basename) + 5 );\n        strcpy( ret, basename );\n        if (strendswith( ret, \".def\" )) ret[strlen(ret)-4] = 0;\n    }\n    else\n    {\n        ret = xmalloc( strlen(name) + 5 );\n        strcpy( ret, name );\n    }\n    if (!strchr( ret, '.' )) strcat( ret, \".dll\" );\n    return ret;\n}\n\n/* add a dll to the list of imports */\nvoid add_import_dll( const char *name, const char *filename )\n{\n    DLLSPEC *spec;\n    char *dll_name = get_dll_name( name, filename );\n    struct import *imp = xmalloc( sizeof(*imp) );\n\n    memset( imp, 0, sizeof(*imp) );\n\n    if (filename) imp->full_name = xstrdup( filename );\n    else imp->full_name = find_library( name );\n\n    if (!(spec = read_import_lib( imp )))\n    {\n        free_imports( imp );\n        return;\n    }\n\n    imp->dll_name = spec->file_name ? spec->file_name : dll_name;\n    imp->c_name = make_c_identifier( imp->dll_name );\n\n    if (is_delayed_import( dll_name ))\n        list_add_tail( &dll_delayed, &imp->entry );\n    else\n        list_add_tail( &dll_imports, &imp->entry );\n}\n\n/* add a library to the list of delayed imports */\nvoid add_delayed_import( const char *name )\n{\n    struct import *imp;\n    char *fullname = get_dll_name( name, NULL );\n\n    strarray_add( &delayed_imports, fullname, NULL );\n    if ((imp = find_import_dll( fullname )))\n    {\n        list_remove( &imp->entry );\n        list_add_tail( &dll_delayed, &imp->entry );\n    }\n}\n\n/* add a symbol to the list of extra symbols that ld must resolve */\nvoid add_extra_ld_symbol( const char *name )\n{\n    strarray_add( &extra_ld_symbols, name, NULL );\n}\n\n/* retrieve an imported dll, adding one if necessary */\nstruct import *add_static_import_dll( const char *name )\n{\n    struct import *import;\n    char *dll_name = get_dll_name( name, NULL );\n\n    if ((import = find_import_dll( dll_name ))) return import;\n\n    import = xmalloc( sizeof(*import) );\n    memset( import, 0, sizeof(*import) );\n\n    import->dll_name = dll_name;\n    import->full_name = xstrdup( dll_name );\n    import->c_name = make_c_identifier( dll_name );\n\n    if (is_delayed_import( dll_name ))\n        list_add_tail( &dll_delayed, &import->entry );\n    else\n        list_add_tail( &dll_imports, &import->entry );\n    return import;\n}\n\n/* add a function to the list of imports from a given dll */\nstatic void add_import_func( struct import *imp, const char *name, const char *export_name, int ordinal )\n{\n    if (imp->nb_imports == imp->max_imports)\n    {\n        imp->max_imports *= 2;\n        if (imp->max_imports < 32) imp->max_imports = 32;\n        imp->imports = xrealloc( imp->imports, imp->max_imports * sizeof(*imp->imports) );\n    }\n    imp->imports[imp->nb_imports].name = name;\n    imp->imports[imp->nb_imports].export_name = export_name;\n    imp->imports[imp->nb_imports].ordinal = ordinal;\n    imp->nb_imports++;\n}\n\n/* add an import for an undefined function of the form __wine$func$ */\nstatic void add_undef_import( const char *name, int is_ordinal )\n{\n    char *p, *dll_name = xstrdup( name );\n    int ordinal = 0;\n    struct import *import;\n\n    if (!(p = strchr( dll_name, '$' ))) return;\n    *p++ = 0;\n    while (*p >= '0' && *p <= '9') ordinal = 10 * ordinal + *p++ - '0';\n    if (*p != '$') return;\n    p++;\n\n    import = add_static_import_dll( dll_name );\n    if (is_ordinal)\n        add_import_func( import, NULL, xstrdup( p ), ordinal );\n    else\n        add_import_func( import, xstrdup( p ), NULL, ordinal );\n}\n\n/* get the default entry point for a given spec file */\nstatic const char *get_default_entry_point( const DLLSPEC *spec )\n{\n    if (spec->characteristics & IMAGE_FILE_DLL) return \"__wine_spec_dll_entry\";\n    if (spec->subsystem == IMAGE_SUBSYSTEM_NATIVE) return \"__wine_spec_drv_entry\";\n    if (spec->type == SPEC_WIN16) return \"__wine_spec_exe16_entry\";\n    return \"__wine_spec_exe_entry\";\n}\n\n/* check if the spec file exports any stubs */\nstatic int has_stubs( const DLLSPEC *spec )\n{\n    int i;\n    for (i = 0; i < spec->nb_entry_points; i++)\n    {\n        ORDDEF *odp = &spec->entry_points[i];\n        if (odp->type == TYPE_STUB) return 1;\n    }\n    return 0;\n}\n\n/* add the extra undefined symbols that will be contained in the generated spec file itself */\nstatic void add_extra_undef_symbols( DLLSPEC *spec )\n{\n    if (!spec->init_func) spec->init_func = xstrdup( get_default_entry_point(spec) );\n    add_extra_ld_symbol( spec->init_func );\n    if (has_stubs( spec )) add_extra_ld_symbol( \"__wine_spec_unimplemented_stub\" );\n    if (delayed_imports.count) add_extra_ld_symbol( \"__wine_spec_delay_load\" );\n}\n\n/* check if a given imported dll is not needed, taking forwards into account */\nstatic int check_unused( const struct import* imp, const DLLSPEC *spec )\n{\n    int i;\n    const char *file_name = imp->dll_name;\n    size_t len = strlen( file_name );\n    const char *p = strchr( file_name, '.' );\n    if (p && !strcasecmp( p, \".dll\" )) len = p - file_name;\n\n    for (i = spec->base; i <= spec->limit; i++)\n    {\n        ORDDEF *odp = spec->ordinals[i];\n        if (!odp || !(odp->flags & FLAG_FORWARD)) continue;\n        if (!strncasecmp( odp->link_name, file_name, len ) &&\n            odp->link_name[len] == '.')\n            return 0;  /* found a forward, it is used */\n    }\n    return 1;\n}\n\n/* check if a given forward does exist in one of the imported dlls */\nstatic void check_undefined_forwards( DLLSPEC *spec )\n{\n    struct import *imp;\n    char *link_name, *api_name, *dll_name, *p;\n    int i;\n\n    for (i = 0; i < spec->nb_entry_points; i++)\n    {\n        ORDDEF *odp = &spec->entry_points[i];\n\n        if (!(odp->flags & FLAG_FORWARD)) continue;\n\n        link_name = xstrdup( odp->link_name );\n        p = strrchr( link_name, '.' );\n        *p = 0;\n        api_name = p + 1;\n        dll_name = get_dll_name( link_name, NULL );\n\n        if ((imp = find_import_dll( dll_name )))\n        {\n            if (!find_export( api_name, imp->exports, imp->nb_exports ))\n                warning( \"%s:%d: forward '%s' not found in %s\\n\",\n                         spec->src_name, odp->lineno, odp->link_name, imp->dll_name );\n        }\n        else warning( \"%s:%d: forward '%s' not found in the imported dll list\\n\",\n                      spec->src_name, odp->lineno, odp->link_name );\n        free( link_name );\n        free( dll_name );\n    }\n}\n\n/* flag the dll exports that link to an undefined symbol */\nstatic void check_undefined_exports( DLLSPEC *spec )\n{\n    int i;\n\n    for (i = 0; i < spec->nb_entry_points; i++)\n    {\n        ORDDEF *odp = &spec->entry_points[i];\n        if (odp->type == TYPE_STUB || odp->type == TYPE_ABS || odp->type == TYPE_VARIABLE) continue;\n        if (odp->flags & FLAG_FORWARD) continue;\n        if (find_name( odp->link_name, &undef_symbols ))\n        {\n            switch(odp->type)\n            {\n            case TYPE_PASCAL:\n            case TYPE_STDCALL:\n            case TYPE_CDECL:\n            case TYPE_VARARGS:\n            case TYPE_THISCALL:\n                if (link_ext_symbols)\n                {\n                    odp->flags |= FLAG_EXT_LINK;\n                    strarray_add( &ext_link_imports, odp->link_name, NULL );\n                }\n                else error( \"%s:%d: function '%s' not defined\\n\",\n                            spec->src_name, odp->lineno, odp->link_name );\n                break;\n            default:\n                error( \"%s:%d: external symbol '%s' is not a function\\n\",\n                       spec->src_name, odp->lineno, odp->link_name );\n                break;\n            }\n        }\n    }\n}\n\n/* create a .o file that references all the undefined symbols we want to resolve */\nstatic char *create_undef_symbols_file( DLLSPEC *spec )\n{\n    char *as_file, *obj_file;\n    int i;\n    unsigned int j;\n    FILE *f;\n\n    as_file = get_temp_file_name( output_file_name, \".s\" );\n    if (!(f = fopen( as_file, \"w\" ))) fatal_error( \"Cannot create %s\\n\", as_file );\n    fprintf( f, \"\\t.data\\n\" );\n\n    for (i = 0; i < spec->nb_entry_points; i++)\n    {\n        ORDDEF *odp = &spec->entry_points[i];\n        if (odp->type == TYPE_STUB || odp->type == TYPE_ABS || odp->type == TYPE_VARIABLE) continue;\n        if (odp->flags & FLAG_FORWARD) continue;\n        fprintf( f, \"\\t%s %s\\n\", get_asm_ptr_keyword(), asm_name(odp->link_name) );\n    }\n    for (j = 0; j < extra_ld_symbols.count; j++)\n        fprintf( f, \"\\t%s %s\\n\", get_asm_ptr_keyword(), asm_name(extra_ld_symbols.str[j]) );\n    fclose( f );\n\n    obj_file = get_temp_file_name( output_file_name, \".o\" );\n    assemble_file( as_file, obj_file );\n    return obj_file;\n}\n\n/* combine a list of object files with ld into a single object file */\n/* returns the name of the combined file */\nstatic const char *ldcombine_files( DLLSPEC *spec, char **argv )\n{\n    char *ld_tmp_file, *undef_file;\n    struct strarray args = get_ld_command();\n\n    undef_file = create_undef_symbols_file( spec );\n    ld_tmp_file = get_temp_file_name( output_file_name, \".o\" );\n\n    strarray_add( &args, \"-r\", \"-o\", ld_tmp_file, undef_file, NULL );\n    strarray_addv( &args, argv );\n    spawn( args );\n    return ld_tmp_file;\n}\n\n/* read in the list of undefined symbols */\nvoid read_undef_symbols( DLLSPEC *spec, char **argv )\n{\n    size_t prefix_len;\n    FILE *f;\n    const char *prog = get_nm_command();\n    char *cmd, buffer[1024], name_prefix[16];\n    int err;\n    const char *name;\n\n    if (!argv[0]) return;\n\n    add_extra_undef_symbols( spec );\n\n    strcpy( name_prefix, asm_name(\"\") );\n    prefix_len = strlen( name_prefix );\n\n    name = ldcombine_files( spec, argv );\n\n    cmd = strmake( \"%s -u %s\", prog, name );\n    if (!(f = popen( cmd, \"r\" )))\n        fatal_error( \"Cannot execute '%s'\\n\", cmd );\n\n    while (fgets( buffer, sizeof(buffer), f ))\n    {\n        char *p = buffer + strlen(buffer) - 1;\n        if (p < buffer) continue;\n        if (*p == '\\n') *p-- = 0;\n        p = buffer;\n        while (*p == ' ') p++;\n        if (p[0] == 'U' && p[1] == ' ' && p[2]) p += 2;\n        if (prefix_len && !strncmp( p, name_prefix, prefix_len )) p += prefix_len;\n        if (!strncmp( p, import_func_prefix, strlen(import_func_prefix) ))\n            add_undef_import( p + strlen( import_func_prefix ), 0 );\n        else if (!strncmp( p, import_ord_prefix, strlen(import_ord_prefix) ))\n            add_undef_import( p + strlen( import_ord_prefix ), 1 );\n        else strarray_add( &undef_symbols, xstrdup( p ), NULL );\n    }\n    if ((err = pclose( f ))) warning( \"%s failed with status %d\\n\", cmd, err );\n    free( cmd );\n}\n\nvoid resolve_dll_imports( DLLSPEC *spec, struct list *list )\n{\n    unsigned int j;\n    struct import *imp, *next;\n    ORDDEF *odp;\n\n    LIST_FOR_EACH_ENTRY_SAFE( imp, next, list, struct import, entry )\n    {\n        for (j = 0; j < undef_symbols.count; j++)\n        {\n            odp = find_export( undef_symbols.str[j], imp->exports, imp->nb_exports );\n            if (odp)\n            {\n                if (odp->flags & FLAG_PRIVATE) continue;\n                if (odp->type != TYPE_STDCALL && odp->type != TYPE_CDECL)\n                    warning( \"winebuild: Data export '%s' cannot be imported from %s\\n\",\n                             odp->link_name, imp->dll_name );\n                else\n                {\n                    add_import_func( imp, (odp->flags & FLAG_NONAME) ? NULL : odp->name,\n                                     odp->export_name, odp->ordinal );\n                    remove_name( &undef_symbols, j-- );\n                }\n            }\n        }\n        if (!imp->nb_imports)\n        {\n            /* the dll is not used, get rid of it */\n            if (check_unused( imp, spec ))\n                warning( \"winebuild: %s imported but no symbols used\\n\", imp->dll_name );\n            list_remove( &imp->entry );\n            free_imports( imp );\n        }\n    }\n}\n\n/* resolve the imports for a Win32 module */\nvoid resolve_imports( DLLSPEC *spec )\n{\n    check_undefined_forwards( spec );\n    resolve_dll_imports( spec, &dll_imports );\n    resolve_dll_imports( spec, &dll_delayed );\n    sort_names( &undef_symbols );\n    check_undefined_exports( spec );\n}\n\n/* check if symbol is still undefined */\nint is_undefined( const char *name )\n{\n    return find_name( name, &undef_symbols ) != NULL;\n}\n\n/* output the get_pc thunk if needed */\nvoid output_get_pc_thunk(void)\n{\n    assert( target_cpu == CPU_x86 );\n    output( \"\\n\\t.text\\n\" );\n    output( \"\\t.align %d\\n\", get_alignment(4) );\n    output( \"\\t%s\\n\", func_declaration(\"__wine_spec_get_pc_thunk_eax\") );\n    output( \"%s:\\n\", asm_name(\"__wine_spec_get_pc_thunk_eax\") );\n    output_cfi( \".cfi_startproc\" );\n    output( \"\\tmovl (%%esp),%%eax\\n\" );\n    output( \"\\tret\\n\" );\n    output_cfi( \".cfi_endproc\" );\n    output_function_size( \"__wine_spec_get_pc_thunk_eax\" );\n}\n\n/* output a single import thunk */\nstatic void output_import_thunk( const char *name, const char *table, int pos )\n{\n    output( \"\\n\\t.align %d\\n\", get_alignment(4) );\n    output( \"\\t%s\\n\", func_declaration(name) );\n    output( \"%s\\n\", asm_globl(name) );\n    output_cfi( \".cfi_startproc\" );\n\n    switch(target_cpu)\n    {\n    case CPU_x86:\n        if (!UsePIC)\n        {\n            output( \"\\tjmp *(%s+%d)\\n\", table, pos );\n        }\n        else\n        {\n            output( \"\\tcall %s\\n\", asm_name(\"__wine_spec_get_pc_thunk_eax\") );\n            output( \"1:\\tjmp *%s+%d-1b(%%eax)\\n\", table, pos );\n            needs_get_pc_thunk = 1;\n        }\n        break;\n    case CPU_x86_64:\n        output( \"\\tjmpq *%s+%d(%%rip)\\n\", table, pos );\n        break;\n    case CPU_ARM:\n        output( \"\\tldr IP,1f\\n\");\n        output( \"\\tldr PC,[PC,IP]\\n\" );\n        output( \"1:\\t.long %s+%u-(1b+4)\\n\", table, pos );\n        break;\n    case CPU_ARM64:\n        output( \"\\tadrp x9, %s\\n\", table );\n        output( \"\\tadd x9, x9, #:lo12:%s\\n\", table );\n        if (pos & 0xf000) output( \"\\tadd x9, x9, #%u\\n\", pos & 0xf000 );\n        if (pos & 0x0f00) output( \"\\tadd x9, x9, #%u\\n\", pos & 0x0f00 );\n        if (pos & 0x00f0) output( \"\\tadd x9, x9, #%u\\n\", pos & 0x00f0 );\n        if (pos & 0x000f) output( \"\\tadd x9, x9, #%u\\n\", pos & 0x000f );\n        output( \"\\tldur x9, [x9, #0]\\n\" );\n        output( \"\\tbr x9\\n\" );\n        break;\n    case CPU_POWERPC:\n        output( \"\\tmr %s, %s\\n\", ppc_reg(0), ppc_reg(31) );\n        if (target_platform == PLATFORM_APPLE)\n        {\n            output( \"\\tlis %s, ha16(%s+%d+32768)\\n\", ppc_reg(31), table, pos );\n            output( \"\\tla  %s, lo16(%s+%d)(%s)\\n\", ppc_reg(31), table, pos, ppc_reg(31) );\n        }\n        else\n        {\n            output( \"\\tlis %s, (%s+%d+32768)@h\\n\", ppc_reg(31), table, pos );\n            output( \"\\tla  %s, (%s+%d)@l(%s)\\n\", ppc_reg(31), table, pos, ppc_reg(31) );\n        }\n        output( \"\\tlwz   %s, 0(%s)\\n\", ppc_reg(31), ppc_reg(31) );\n        output( \"\\tmtctr %s\\n\", ppc_reg(31) );\n        output( \"\\tmr    %s, %s\\n\", ppc_reg(31), ppc_reg(0) );\n        output( \"\\tbctr\\n\" );\n        break;\n    }\n    output_cfi( \".cfi_endproc\" );\n    output_function_size( name );\n}\n\n/* check if we need an import directory */\nint has_imports(void)\n{\n    return !list_empty( &dll_imports );\n}\n\n/* output the import table of a Win32 module */\nstatic void output_immediate_imports(void)\n{\n    int i, j;\n    struct import *import;\n\n    if (list_empty( &dll_imports )) return;  /* no immediate imports */\n\n    /* main import header */\n\n    output( \"\\n/* import table */\\n\" );\n    output( \"\\n\\t.data\\n\" );\n    output( \"\\t.align %d\\n\", get_alignment(4) );\n    output( \".L__wine_spec_imports:\\n\" );\n\n    /* list of dlls */\n\n    j = 0;\n    LIST_FOR_EACH_ENTRY( import, &dll_imports, struct import, entry )\n    {\n        output( \"\\t.long .L__wine_spec_import_data_names+%d-.L__wine_spec_rva_base\\n\",  /* OriginalFirstThunk */\n                 j * get_ptr_size() );\n        output( \"\\t.long 0\\n\" );     /* TimeDateStamp */\n        output( \"\\t.long 0\\n\" );     /* ForwarderChain */\n        output( \"\\t.long .L__wine_spec_import_name_%s-.L__wine_spec_rva_base\\n\", /* Name */\n                 import->c_name );\n        output( \"\\t.long .L__wine_spec_import_data_ptrs+%d-.L__wine_spec_rva_base\\n\",  /* FirstThunk */\n                 j * get_ptr_size() );\n        j += import->nb_imports + 1;\n    }\n    output( \"\\t.long 0\\n\" );     /* OriginalFirstThunk */\n    output( \"\\t.long 0\\n\" );     /* TimeDateStamp */\n    output( \"\\t.long 0\\n\" );     /* ForwarderChain */\n    output( \"\\t.long 0\\n\" );     /* Name */\n    output( \"\\t.long 0\\n\" );     /* FirstThunk */\n\n    output( \"\\n\\t.align %d\\n\", get_alignment(get_ptr_size()) );\n    /* output the names twice, once for OriginalFirstThunk and once for FirstThunk */\n    for (i = 0; i < 2; i++)\n    {\n        output( \".L__wine_spec_import_data_%s:\\n\", i ? \"ptrs\" : \"names\" );\n        LIST_FOR_EACH_ENTRY( import, &dll_imports, struct import, entry )\n        {\n            for (j = 0; j < import->nb_imports; j++)\n            {\n                struct import_func *func = &import->imports[j];\n                if (func->name)\n                    output( \"\\t%s .L__wine_spec_import_data_%s_%s-.L__wine_spec_rva_base\\n\",\n                            get_asm_ptr_keyword(), import->c_name, func->name );\n                else\n                {\n                    if (get_ptr_size() == 8)\n                        output( \"\\t.quad 0x800000000000%04x\\n\", func->ordinal );\n                    else\n                        output( \"\\t.long 0x8000%04x\\n\", func->ordinal );\n                }\n            }\n            output( \"\\t%s 0\\n\", get_asm_ptr_keyword() );\n        }\n    }\n    output( \".L__wine_spec_imports_end:\\n\" );\n\n    LIST_FOR_EACH_ENTRY( import, &dll_imports, struct import, entry )\n    {\n        for (j = 0; j < import->nb_imports; j++)\n        {\n            struct import_func *func = &import->imports[j];\n            if (!func->name) continue;\n            output( \"\\t.align %d\\n\", get_alignment(2) );\n            output( \".L__wine_spec_import_data_%s_%s:\\n\", import->c_name, func->name );\n            output( \"\\t.short %d\\n\", func->ordinal );\n            output( \"\\t%s \\\"%s\\\"\\n\", get_asm_string_keyword(), func->name );\n        }\n    }\n\n    LIST_FOR_EACH_ENTRY( import, &dll_imports, struct import, entry )\n    {\n        output( \".L__wine_spec_import_name_%s:\\n\\t%s \\\"%s\\\"\\n\",\n                import->c_name, get_asm_string_keyword(), import->dll_name );\n    }\n}\n\n/* output the import thunks of a Win32 module */\nstatic void output_immediate_import_thunks(void)\n{\n    int j, pos;\n    struct import *import;\n    static const char import_thunks[] = \"__wine_spec_import_thunks\";\n\n    if (list_empty( &dll_imports )) return;\n\n    output( \"\\n/* immediate import thunks */\\n\\n\" );\n    output( \"\\t.text\\n\" );\n    output( \"\\t.align %d\\n\", get_alignment(8) );\n    output( \"%s:\\n\", asm_name(import_thunks));\n\n    pos = 0;\n    LIST_FOR_EACH_ENTRY( import, &dll_imports, struct import, entry )\n    {\n        for (j = 0; j < import->nb_imports; j++, pos += get_ptr_size())\n        {\n            struct import_func *func = &import->imports[j];\n            output_import_thunk( func->name ? func->name : func->export_name,\n                                 \".L__wine_spec_import_data_ptrs\", pos );\n        }\n        pos += get_ptr_size();\n    }\n    output_function_size( import_thunks );\n}\n\n/* output the delayed import table of a Win32 module */\nstatic void output_delayed_imports( const DLLSPEC *spec )\n{\n    int j, mod;\n    struct import *import;\n\n    if (list_empty( &dll_delayed )) return;\n\n    output( \"\\n/* delayed imports */\\n\\n\" );\n    output( \"\\t.data\\n\" );\n    output( \"\\t.align %d\\n\", get_alignment(get_ptr_size()) );\n    output( \"%s\\n\", asm_globl(\"__wine_spec_delay_imports\") );\n\n    /* list of dlls */\n\n    j = mod = 0;\n    LIST_FOR_EACH_ENTRY( import, &dll_delayed, struct import, entry )\n    {\n        output( \"\\t%s 0\\n\", get_asm_ptr_keyword() );   /* grAttrs */\n        output( \"\\t%s .L__wine_delay_name_%s\\n\",       /* szName */\n                 get_asm_ptr_keyword(), import->c_name );\n        output( \"\\t%s .L__wine_delay_modules+%d\\n\",    /* phmod */\n                 get_asm_ptr_keyword(), mod * get_ptr_size() );\n        output( \"\\t%s .L__wine_delay_IAT+%d\\n\",        /* pIAT */\n                 get_asm_ptr_keyword(), j * get_ptr_size() );\n        output( \"\\t%s .L__wine_delay_INT+%d\\n\",        /* pINT */\n                 get_asm_ptr_keyword(), j * get_ptr_size() );\n        output( \"\\t%s 0\\n\", get_asm_ptr_keyword() );   /* pBoundIAT */\n        output( \"\\t%s 0\\n\", get_asm_ptr_keyword() );   /* pUnloadIAT */\n        output( \"\\t%s 0\\n\", get_asm_ptr_keyword() );   /* dwTimeStamp */\n        j += import->nb_imports;\n        mod++;\n    }\n    output( \"\\t%s 0\\n\", get_asm_ptr_keyword() );   /* grAttrs */\n    output( \"\\t%s 0\\n\", get_asm_ptr_keyword() );   /* szName */\n    output( \"\\t%s 0\\n\", get_asm_ptr_keyword() );   /* phmod */\n    output( \"\\t%s 0\\n\", get_asm_ptr_keyword() );   /* pIAT */\n    output( \"\\t%s 0\\n\", get_asm_ptr_keyword() );   /* pINT */\n    output( \"\\t%s 0\\n\", get_asm_ptr_keyword() );   /* pBoundIAT */\n    output( \"\\t%s 0\\n\", get_asm_ptr_keyword() );   /* pUnloadIAT */\n    output( \"\\t%s 0\\n\", get_asm_ptr_keyword() );   /* dwTimeStamp */\n\n    output( \"\\n.L__wine_delay_IAT:\\n\" );\n    LIST_FOR_EACH_ENTRY( import, &dll_delayed, struct import, entry )\n    {\n        for (j = 0; j < import->nb_imports; j++)\n        {\n            struct import_func *func = &import->imports[j];\n            const char *name = func->name ? func->name : func->export_name;\n            output( \"\\t%s .L__wine_delay_imp_%s_%s\\n\",\n                    get_asm_ptr_keyword(), import->c_name, name );\n        }\n    }\n\n    output( \"\\n.L__wine_delay_INT:\\n\" );\n    LIST_FOR_EACH_ENTRY( import, &dll_delayed, struct import, entry )\n    {\n        for (j = 0; j < import->nb_imports; j++)\n        {\n            struct import_func *func = &import->imports[j];\n            if (!func->name)\n                output( \"\\t%s %d\\n\", get_asm_ptr_keyword(), func->ordinal );\n            else\n                output( \"\\t%s .L__wine_delay_data_%s_%s\\n\",\n                        get_asm_ptr_keyword(), import->c_name, func->name );\n        }\n    }\n\n    output( \"\\n.L__wine_delay_modules:\\n\" );\n    LIST_FOR_EACH_ENTRY( import, &dll_delayed, struct import, entry )\n    {\n        output( \"\\t%s 0\\n\", get_asm_ptr_keyword() );\n    }\n\n    LIST_FOR_EACH_ENTRY( import, &dll_delayed, struct import, entry )\n    {\n        output( \".L__wine_delay_name_%s:\\n\", import->c_name );\n        output( \"\\t%s \\\"%s\\\"\\n\", get_asm_string_keyword(), import->dll_name );\n    }\n\n    LIST_FOR_EACH_ENTRY( import, &dll_delayed, struct import, entry )\n    {\n        for (j = 0; j < import->nb_imports; j++)\n        {\n            struct import_func *func = &import->imports[j];\n            if (!func->name) continue;\n            output( \".L__wine_delay_data_%s_%s:\\n\", import->c_name, func->name );\n            output( \"\\t%s \\\"%s\\\"\\n\", get_asm_string_keyword(), func->name );\n        }\n    }\n    output_function_size( \"__wine_spec_delay_imports\" );\n}\n\n/* output the delayed import thunks of a Win32 module */\nstatic void output_delayed_import_thunks( const DLLSPEC *spec )\n{\n    int idx, j, pos, extra_stack_storage = 0;\n    struct import *import;\n    static const char delayed_import_loaders[] = \"__wine_spec_delayed_import_loaders\";\n    static const char delayed_import_thunks[] = \"__wine_spec_delayed_import_thunks\";\n\n    if (list_empty( &dll_delayed )) return;\n\n    output( \"\\n/* delayed import thunks */\\n\\n\" );\n    output( \"\\t.text\\n\" );\n    output( \"\\t.align %d\\n\", get_alignment(8) );\n    output( \"%s:\\n\", asm_name(delayed_import_loaders));\n    output( \"\\t%s\\n\", func_declaration(\"__wine_delay_load_asm\") );\n    output( \"%s:\\n\", asm_name(\"__wine_delay_load_asm\") );\n    output_cfi( \".cfi_startproc\" );\n    switch(target_cpu)\n    {\n    case CPU_x86:\n        output( \"\\tpushl %%ecx\\n\" );\n        output_cfi( \".cfi_adjust_cfa_offset 4\" );\n        output( \"\\tpushl %%edx\\n\" );\n        output_cfi( \".cfi_adjust_cfa_offset 4\" );\n        output( \"\\tpushl %%eax\\n\" );\n        output_cfi( \".cfi_adjust_cfa_offset 4\" );\n        output( \"\\tcall %s\\n\", asm_name(\"__wine_spec_delay_load\") );\n        output_cfi( \".cfi_adjust_cfa_offset -4\" );\n        output( \"\\tpopl %%edx\\n\" );\n        output_cfi( \".cfi_adjust_cfa_offset -4\" );\n        output( \"\\tpopl %%ecx\\n\" );\n        output_cfi( \".cfi_adjust_cfa_offset -4\" );\n        output( \"\\tjmp *%%eax\\n\" );\n        break;\n    case CPU_x86_64:\n        output( \"\\tsubq $0x98,%%rsp\\n\" );\n        output_cfi( \".cfi_adjust_cfa_offset 0x98\" );\n        output( \"\\tmovq %%rdx,0x88(%%rsp)\\n\" );\n        output( \"\\tmovq %%rcx,0x80(%%rsp)\\n\" );\n        output( \"\\tmovq %%r8,0x78(%%rsp)\\n\" );\n        output( \"\\tmovq %%r9,0x70(%%rsp)\\n\" );\n        output( \"\\tmovq %%r10,0x68(%%rsp)\\n\" );\n        output( \"\\tmovq %%r11,0x60(%%rsp)\\n\" );\n        output( \"\\tmovups %%xmm0,0x50(%%rsp)\\n\" );\n        output( \"\\tmovups %%xmm1,0x40(%%rsp)\\n\" );\n        output( \"\\tmovups %%xmm2,0x30(%%rsp)\\n\" );\n        output( \"\\tmovups %%xmm3,0x20(%%rsp)\\n\" );\n        output( \"\\tmovq %%rax,%%rcx\\n\" );\n        output( \"\\tcall %s\\n\", asm_name(\"__wine_spec_delay_load\") );\n        output( \"\\tmovups 0x20(%%rsp),%%xmm3\\n\" );\n        output( \"\\tmovups 0x30(%%rsp),%%xmm2\\n\" );\n        output( \"\\tmovups 0x40(%%rsp),%%xmm1\\n\" );\n        output( \"\\tmovups 0x50(%%rsp),%%xmm0\\n\" );\n        output( \"\\tmovq 0x60(%%rsp),%%r11\\n\" );\n        output( \"\\tmovq 0x68(%%rsp),%%r10\\n\" );\n        output( \"\\tmovq 0x70(%%rsp),%%r9\\n\" );\n        output( \"\\tmovq 0x78(%%rsp),%%r8\\n\" );\n        output( \"\\tmovq 0x80(%%rsp),%%rcx\\n\" );\n        output( \"\\tmovq 0x88(%%rsp),%%rdx\\n\" );\n        output( \"\\taddq $0x98,%%rsp\\n\" );\n        output_cfi( \".cfi_adjust_cfa_offset -0x98\" );\n        output( \"\\tjmp *%%rax\\n\" );\n        break;\n    case CPU_ARM:\n        output( \"\\tpush {r0-r3,FP,LR}\\n\" );\n        output( \"\\tmov r0,IP\\n\" );\n        output( \"\\tldr IP,2f\\n\");\n        output( \"\\tadd IP,PC\\n\");\n        output( \"\\tblx IP\\n\");\n        output( \"1:\\tmov IP,r0\\n\");\n        output( \"\\tpop {r0-r3,FP,LR}\\n\" );\n        output( \"\\tbx IP\\n\");\n        output( \"2:\\t.long %s-1b\\n\", asm_name(\"__wine_spec_delay_load\") );\n        break;\n    case CPU_ARM64:\n        output( \"\\tstp x29, x30, [sp,#-16]!\\n\" );\n        output( \"\\tmov x29, sp\\n\" );\n        output( \"\\tadrp x9, %s\\n\", asm_name(\"__wine_spec_delay_load\") );\n        output( \"\\tadd x9, x9, #:lo12:%s\\n\", asm_name(\"__wine_spec_delay_load\") );\n        output( \"\\tblr x9\\n\" );\n        output( \"\\tmov x9, x0\\n\" );\n        output( \"\\tldp x29, x30, [sp],#16\\n\" );\n        output( \"\\tldp x0, x1, [sp,#16]\\n\" );\n        output( \"\\tldp x2, x3, [sp,#32]\\n\" );\n        output( \"\\tldp x4, x5, [sp,#48]\\n\" );\n        output( \"\\tldp x6, x7, [sp],#80\\n\" );\n        output( \"\\tbr x9\\n\" ); /* or \"ret x9\" */\n        break;\n    case CPU_POWERPC:\n        if (target_platform == PLATFORM_APPLE) extra_stack_storage = 56;\n\n        /* Save all callee saved registers into a stackframe. */\n        output( \"\\tstwu %s, -%d(%s)\\n\",ppc_reg(1), 48+extra_stack_storage, ppc_reg(1));\n        output( \"\\tstw  %s, %d(%s)\\n\", ppc_reg(3),  4+extra_stack_storage, ppc_reg(1));\n        output( \"\\tstw  %s, %d(%s)\\n\", ppc_reg(4),  8+extra_stack_storage, ppc_reg(1));\n        output( \"\\tstw  %s, %d(%s)\\n\", ppc_reg(5), 12+extra_stack_storage, ppc_reg(1));\n        output( \"\\tstw  %s, %d(%s)\\n\", ppc_reg(6), 16+extra_stack_storage, ppc_reg(1));\n        output( \"\\tstw  %s, %d(%s)\\n\", ppc_reg(7), 20+extra_stack_storage, ppc_reg(1));\n        output( \"\\tstw  %s, %d(%s)\\n\", ppc_reg(8), 24+extra_stack_storage, ppc_reg(1));\n        output( \"\\tstw  %s, %d(%s)\\n\", ppc_reg(9), 28+extra_stack_storage, ppc_reg(1));\n        output( \"\\tstw  %s, %d(%s)\\n\", ppc_reg(10),32+extra_stack_storage, ppc_reg(1));\n        output( \"\\tstw  %s, %d(%s)\\n\", ppc_reg(11),36+extra_stack_storage, ppc_reg(1));\n        output( \"\\tstw  %s, %d(%s)\\n\", ppc_reg(12),40+extra_stack_storage, ppc_reg(1));\n\n        /* r0 -> r3 (arg1) */\n        output( \"\\tmr %s, %s\\n\", ppc_reg(3), ppc_reg(0));\n\n        /* save return address */\n        output( \"\\tmflr %s\\n\", ppc_reg(0));\n        output( \"\\tstw  %s, %d(%s)\\n\", ppc_reg(0), 44+extra_stack_storage, ppc_reg(1));\n\n        /* Call the __wine_delay_load function, arg1 is arg1. */\n        output( \"\\tbl %s\\n\", asm_name(\"__wine_spec_delay_load\") );\n\n        /* Load return value from call into ctr register */\n        output( \"\\tmtctr %s\\n\", ppc_reg(3));\n\n        /* restore all saved registers and drop stackframe. */\n        output( \"\\tlwz  %s, %d(%s)\\n\", ppc_reg(3),  4+extra_stack_storage, ppc_reg(1));\n        output( \"\\tlwz  %s, %d(%s)\\n\", ppc_reg(4),  8+extra_stack_storage, ppc_reg(1));\n        output( \"\\tlwz  %s, %d(%s)\\n\", ppc_reg(5), 12+extra_stack_storage, ppc_reg(1));\n        output( \"\\tlwz  %s, %d(%s)\\n\", ppc_reg(6), 16+extra_stack_storage, ppc_reg(1));\n        output( \"\\tlwz  %s, %d(%s)\\n\", ppc_reg(7), 20+extra_stack_storage, ppc_reg(1));\n        output( \"\\tlwz  %s, %d(%s)\\n\", ppc_reg(8), 24+extra_stack_storage, ppc_reg(1));\n        output( \"\\tlwz  %s, %d(%s)\\n\", ppc_reg(9), 28+extra_stack_storage, ppc_reg(1));\n        output( \"\\tlwz  %s, %d(%s)\\n\", ppc_reg(10),32+extra_stack_storage, ppc_reg(1));\n        output( \"\\tlwz  %s, %d(%s)\\n\", ppc_reg(11),36+extra_stack_storage, ppc_reg(1));\n        output( \"\\tlwz  %s, %d(%s)\\n\", ppc_reg(12),40+extra_stack_storage, ppc_reg(1));\n\n        /* Load return value from call into return register */\n        output( \"\\tlwz  %s,  %d(%s)\\n\", ppc_reg(0), 44+extra_stack_storage, ppc_reg(1));\n        output( \"\\tmtlr %s\\n\", ppc_reg(0));\n        output( \"\\taddi %s, %s, %d\\n\", ppc_reg(1), ppc_reg(1),  48+extra_stack_storage);\n\n        /* branch to ctr register. */\n        output( \"\\tbctr\\n\");\n        break;\n    }\n    output_cfi( \".cfi_endproc\" );\n    output_function_size( \"__wine_delay_load_asm\" );\n    output( \"\\n\" );\n\n    idx = 0;\n    LIST_FOR_EACH_ENTRY( import, &dll_delayed, struct import, entry )\n    {\n        for (j = 0; j < import->nb_imports; j++)\n        {\n            struct import_func *func = &import->imports[j];\n            const char *name = func->name ? func->name : func->export_name;\n\n            output( \".L__wine_delay_imp_%s_%s:\\n\", import->c_name, name );\n            output_cfi( \".cfi_startproc\" );\n            switch(target_cpu)\n            {\n            case CPU_x86:\n                output( \"\\tmovl $%d, %%eax\\n\", (idx << 16) | j );\n                output( \"\\tjmp %s\\n\", asm_name(\"__wine_delay_load_asm\") );\n                break;\n            case CPU_x86_64:\n                output( \"\\tmovq $%d,%%rax\\n\", (idx << 16) | j );\n                output( \"\\tjmp %s\\n\", asm_name(\"__wine_delay_load_asm\") );\n                break;\n            case CPU_ARM:\n            {\n                unsigned int mask, count = 0, val = (idx << 16) | j;\n\n                for (mask = 0xff; mask; mask <<= 8)\n                    if (val & mask) output( \"\\t%s IP,#%u\\n\", count++ ? \"add\" : \"mov\", val & mask );\n                if (!count) output( \"\\tmov IP,#0\\n\" );\n                output( \"\\tb %s\\n\", asm_name(\"__wine_delay_load_asm\") );\n                break;\n            }\n            case CPU_ARM64:\n                output( \"\\tstp x6, x7, [sp,#-80]!\\n\" );\n                output( \"\\tstp x4, x5, [sp,#48]\\n\" );\n                output( \"\\tstp x2, x3, [sp,#32]\\n\" );\n                output( \"\\tstp x0, x1, [sp,#16]\\n\" );\n                output( \"\\tmov x0, #%d\\n\", idx );\n                output( \"\\tmov x1, #16384\\n\" );\n                output( \"\\tmul x1, x0, x1\\n\" );\n                output( \"\\tmov x0, x1\\n\" );\n                output( \"\\tmov x1, #4\\n\" );\n                output( \"\\tmul x1, x0, x1\\n\" );\n                output( \"\\tmov x0, x1\\n\" );\n                output( \"\\tadd x0, x0, #%d\\n\", j );\n                output( \"\\tadr x9, %s\\n\", asm_name(\"__wine_delay_load_asm\") );\n                output( \"\\tbr x9\\n\" );\n                break;\n            case CPU_POWERPC:\n                switch(target_platform)\n                {\n                case PLATFORM_APPLE:\n                    /* On Darwin we can use r0 and r2 */\n                    /* Upper part in r2 */\n                    output( \"\\tlis %s, %d\\n\", ppc_reg(2), idx);\n                    /* Lower part + r2 -> r0, Note we can't use r0 directly */\n                    output( \"\\taddi %s, %s, %d\\n\", ppc_reg(0), ppc_reg(2), j);\n                    output( \"\\tb %s\\n\", asm_name(\"__wine_delay_load_asm\") );\n                    break;\n                default:\n                    /* On linux we can't use r2 since r2 is not a scratch register (hold the TOC) */\n                    /* Save r13 on the stack */\n                    output( \"\\taddi %s, %s, -0x4\\n\", ppc_reg(1), ppc_reg(1));\n                    output( \"\\tstw  %s, 0(%s)\\n\",    ppc_reg(13), ppc_reg(1));\n                    /* Upper part in r13 */\n                    output( \"\\tlis %s, %d\\n\", ppc_reg(13), idx);\n                    /* Lower part + r13 -> r0, Note we can't use r0 directly */\n                    output( \"\\taddi %s, %s, %d\\n\", ppc_reg(0), ppc_reg(13), j);\n                    /* Restore r13 */\n                    output( \"\\tstw  %s, 0(%s)\\n\",    ppc_reg(13), ppc_reg(1));\n                    output( \"\\taddic %s, %s, 0x4\\n\", ppc_reg(1), ppc_reg(1));\n                    output( \"\\tb %s\\n\", asm_name(\"__wine_delay_load_asm\") );\n                    break;\n                }\n                break;\n            }\n            output_cfi( \".cfi_endproc\" );\n        }\n        idx++;\n    }\n    output_function_size( delayed_import_loaders );\n\n    output( \"\\n\\t.align %d\\n\", get_alignment(get_ptr_size()) );\n    output( \"%s:\\n\", asm_name(delayed_import_thunks));\n    pos = 0;\n    LIST_FOR_EACH_ENTRY( import, &dll_delayed, struct import, entry )\n    {\n        for (j = 0; j < import->nb_imports; j++, pos += get_ptr_size())\n        {\n            struct import_func *func = &import->imports[j];\n            output_import_thunk( func->name ? func->name : func->export_name,\n                                 \".L__wine_delay_IAT\", pos );\n        }\n    }\n    output_function_size( delayed_import_thunks );\n}\n\n/* output import stubs for exported entry points that link to external symbols */\nstatic void output_external_link_imports( DLLSPEC *spec )\n{\n    unsigned int i, pos;\n\n    if (!ext_link_imports.count) return;  /* nothing to do */\n\n    sort_names( &ext_link_imports );\n\n    /* get rid of duplicate names */\n    for (i = 1; i < ext_link_imports.count; i++)\n    {\n        if (!strcmp( ext_link_imports.str[i-1], ext_link_imports.str[i] ))\n            remove_name( &ext_link_imports, i-- );\n    }\n\n    output( \"\\n/* external link thunks */\\n\\n\" );\n    output( \"\\t.data\\n\" );\n    output( \"\\t.align %d\\n\", get_alignment(get_ptr_size()) );\n    output( \".L__wine_spec_external_links:\\n\" );\n    for (i = 0; i < ext_link_imports.count; i++)\n        output( \"\\t%s %s\\n\", get_asm_ptr_keyword(), asm_name(ext_link_imports.str[i]) );\n\n    output( \"\\n\\t.text\\n\" );\n    output( \"\\t.align %d\\n\", get_alignment(get_ptr_size()) );\n    output( \"%s:\\n\", asm_name(\"__wine_spec_external_link_thunks\") );\n\n    for (i = pos = 0; i < ext_link_imports.count; i++)\n    {\n        char *buffer = strmake( \"__wine_spec_ext_link_%s\", ext_link_imports.str[i] );\n        output_import_thunk( buffer, \".L__wine_spec_external_links\", pos );\n        free( buffer );\n        pos += get_ptr_size();\n    }\n    output_function_size( \"__wine_spec_external_link_thunks\" );\n}\n\n/*******************************************************************\n *         output_stubs\n *\n * Output the functions for stub entry points\n */\nvoid output_stubs( DLLSPEC *spec )\n{\n    const char *name, *exp_name;\n    int i, count;\n\n    if (!has_stubs( spec )) return;\n\n    output( \"\\n/* stub functions */\\n\\n\" );\n    output( \"\\t.text\\n\" );\n\n    for (i = count = 0; i < spec->nb_entry_points; i++)\n    {\n        ORDDEF *odp = &spec->entry_points[i];\n        if (odp->type != TYPE_STUB) continue;\n\n        name = get_stub_name( odp, spec );\n        exp_name = odp->name ? odp->name : odp->export_name;\n        output( \"\\t.align %d\\n\", get_alignment(4) );\n        output( \"\\t%s\\n\", func_declaration(name) );\n        output( \"%s:\\n\", (name) );\n        output_cfi( \".cfi_startproc\" );\n\n        switch (target_cpu)\n        {\n        case CPU_x86:\n            /* flesh out the stub a bit to make safedisc happy */\n            output(\" \\tnop\\n\" );\n            output(\" \\tnop\\n\" );\n            output(\" \\tnop\\n\" );\n            output(\" \\tnop\\n\" );\n            output(\" \\tnop\\n\" );\n            output(\" \\tnop\\n\" );\n            output(\" \\tnop\\n\" );\n            output(\" \\tnop\\n\" );\n            output(\" \\tnop\\n\" );\n\n            output( \"\\tsubl $12,%%esp\\n\" );\n            output_cfi( \".cfi_adjust_cfa_offset 12\" );\n            if (UsePIC)\n            {\n                output( \"\\tcall %s\\n\", asm_name(\"__wine_spec_get_pc_thunk_eax\") );\n                output( \"1:\" );\n                needs_get_pc_thunk = 1;\n                if (exp_name)\n                {\n                    output( \"\\tleal .L%s_string-1b(%%eax),%%ecx\\n\", name );\n                    output( \"\\tmovl %%ecx,4(%%esp)\\n\" );\n                    count++;\n                }\n                else\n                    output( \"\\tmovl $%d,4(%%esp)\\n\", odp->ordinal );\n                output( \"\\tleal .L__wine_spec_file_name-1b(%%eax),%%ecx\\n\" );\n                output( \"\\tmovl %%ecx,(%%esp)\\n\" );\n            }\n            else\n            {\n                if (exp_name)\n                {\n                    output( \"\\tmovl $.L%s_string,4(%%esp)\\n\", name );\n                    count++;\n                }\n                else\n                    output( \"\\tmovl $%d,4(%%esp)\\n\", odp->ordinal );\n                output( \"\\tmovl $.L__wine_spec_file_name,(%%esp)\\n\" );\n            }\n            output( \"\\tcall %s\\n\", asm_name(\"__wine_spec_unimplemented_stub\") );\n            break;\n        case CPU_x86_64:\n            output( \"\\tsubq $8,%%rsp\\n\" );\n            output_cfi( \".cfi_adjust_cfa_offset 8\" );\n            output( \"\\tleaq .L__wine_spec_file_name(%%rip),%%rdi\\n\" );\n            if (exp_name)\n            {\n                output( \"leaq .L%s_string(%%rip),%%rsi\\n\", name );\n                count++;\n            }\n            else\n                output( \"\\tmovq $%d,%%rsi\\n\", odp->ordinal );\n            output( \"\\tcall %s\\n\", asm_name(\"__wine_spec_unimplemented_stub\") );\n            break;\n        case CPU_ARM:\n            output( \"\\tldr r0,2f\\n\");\n            output( \"\\tadd r0,PC\\n\");\n            output( \"\\tldr r1,2f+4\\n\");\n            output( \"1:\" );\n            if (exp_name)\n            {\n                output( \"\\tadd r1,PC\\n\");\n                count++;\n            }\n            output( \"\\tbl %s\\n\", asm_name(\"__wine_spec_unimplemented_stub\") );\n            output( \"2:\\t.long .L__wine_spec_file_name-1b\\n\" );\n            if (exp_name) output( \"\\t.long .L%s_string-2b\\n\", name );\n            else output( \"\\t.long %u\\n\", odp->ordinal );\n            break;\n        case CPU_ARM64:\n            output( \"\\tadrp x0, %s\\n\", asm_name(\"__wine_spec_file_name\") );\n            output( \"\\tadd x0, x0, #:lo12:%s\\n\", asm_name(\"__wine_spec_file_name\") );\n            if (exp_name)\n            {\n                output( \"\\tadrp x1, .L%s_string\\n\", name );\n                output( \"\\tadd x1, x1, #:lo12:.L%s_string\\n\", name );\n                count++;\n            }\n            else\n                output( \"\\tmov x1, %u\\n\", odp->ordinal );\n            output( \"\\tadrp x2, %s\\n\", asm_name(\"__wine_spec_unimplemented_stub\") );\n            output( \"\\tadd x2, x2, #:lo12:%s\\n\", asm_name(\"__wine_spec_unimplemented_stub\") );\n            output( \"\\tblr x2\\n\" );\n            break;\n        default:\n            assert(0);\n        }\n        output_cfi( \".cfi_endproc\" );\n        output_function_size( name );\n    }\n\n    if (count)\n    {\n        output( \"\\t%s\\n\", get_asm_string_section() );\n        for (i = 0; i < spec->nb_entry_points; i++)\n        {\n            ORDDEF *odp = &spec->entry_points[i];\n            if (odp->type != TYPE_STUB) continue;\n            exp_name = odp->name ? odp->name : odp->export_name;\n            if (exp_name)\n            {\n                name = get_stub_name( odp, spec );\n                output( \".L%s_string:\\n\", name );\n                output( \"\\t%s \\\"%s\\\"\\n\", get_asm_string_keyword(), exp_name );\n            }\n        }\n    }\n}\n\n/* output the import and delayed import tables of a Win32 module */\nvoid output_imports( DLLSPEC *spec )\n{\n    output_immediate_imports();\n    output_delayed_imports( spec );\n    output_immediate_import_thunks();\n    output_delayed_import_thunks( spec );\n    output_external_link_imports( spec );\n}\n\n/* create a new asm temp file */\nstatic void new_output_as_file( const char *prefix )\n{\n    char *name = get_temp_file_name( prefix, \".s\" );\n\n    if (output_file) fclose( output_file );\n    if (!(output_file = fopen( name, \"w\" )))\n        fatal_error( \"Unable to create output file '%s'\\n\", name );\n    strarray_add( &as_files, name, NULL );\n}\n\n/* assemble all the asm files */\nstatic void assemble_files( const char *prefix )\n{\n    unsigned int i;\n\n    if (output_file) fclose( output_file );\n    output_file = NULL;\n\n    for (i = 0; i < as_files.count; i++)\n    {\n        char *obj = get_temp_file_name( prefix, \".o\" );\n        assemble_file( as_files.str[i], obj );\n        as_files.str[i] = obj;\n    }\n}\n\n/* build a library from the current asm files and any additional object files in argv */\nstatic void build_library( const char *output_name, char **argv, int create )\n{\n    struct strarray args = find_tool( \"ar\", NULL );\n    struct strarray ranlib = find_tool( \"ranlib\", NULL );\n\n    strarray_add( &args, create ? \"rc\" : \"r\", output_name, NULL );\n    strarray_addall( &args, as_files );\n    strarray_addv( &args, argv );\n    if (create) unlink( output_name );\n    spawn( args );\n\n    strarray_add( &ranlib, output_name, NULL );\n    spawn( ranlib );\n}\n\n/* create a Windows-style import library */\nstatic void build_windows_import_lib( DLLSPEC *spec )\n{\n    struct strarray args;\n    char *def_file;\n    const char *as_flags, *m_flag;\n\n    def_file = get_temp_file_name( output_file_name, \".def\" );\n    fclose( output_file );\n    if (!(output_file = fopen( def_file, \"w\" )))\n        fatal_error( \"Unable to create output file '%s'\\n\", def_file );\n    output_def_file( spec, 0 );\n    fclose( output_file );\n    output_file = NULL;\n\n    args = find_tool( \"dlltool\", NULL );\n    switch (target_cpu)\n    {\n        case CPU_x86:\n            m_flag = \"i386\";\n            as_flags = \"--as-flags=--32\";\n            break;\n        case CPU_x86_64:\n            m_flag = \"i386:x86-64\";\n            as_flags = \"--as-flags=--64\";\n            break;\n        default:\n            m_flag = NULL;\n            break;\n    }\n    strarray_add( &args, \"-k\", \"-l\", output_file_name, \"-d\", def_file, NULL );\n    if (m_flag)\n        strarray_add( &args, \"-m\", m_flag, as_flags, NULL );\n    spawn( args );\n}\n\n/* create a Unix-style import library */\nstatic void build_unix_import_lib( DLLSPEC *spec )\n{\n    static const char valid_chars[] = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789._@\";\n    int i, total;\n    const char *name, *prefix;\n    char *dll_name = xstrdup( spec->file_name );\n\n    if (strendswith( dll_name, \".dll\" )) dll_name[strlen(dll_name) - 4] = 0;\n    if (strspn( dll_name, valid_chars ) < strlen( dll_name ))\n        fatal_error( \"%s contains invalid characters\\n\", spec->file_name );\n\n    /* entry points */\n\n    for (i = total = 0; i < spec->nb_entry_points; i++)\n    {\n        const ORDDEF *odp = &spec->entry_points[i];\n\n        if (odp->name) name = odp->name;\n        else if (odp->export_name) name = odp->export_name;\n        else continue;\n\n        if (odp->flags & FLAG_PRIVATE) continue;\n        total++;\n\n        /* C++ mangled names cannot be imported */\n        if (strpbrk( name, \"?@\" )) continue;\n\n        switch(odp->type)\n        {\n        case TYPE_VARARGS:\n        case TYPE_CDECL:\n        case TYPE_STDCALL:\n        case TYPE_THISCALL:\n            prefix = (!odp->name || (odp->flags & FLAG_ORDINAL)) ? import_ord_prefix : import_func_prefix;\n            new_output_as_file( spec->file_name );\n            output( \"\\t.text\\n\" );\n            output( \"\\n\\t.align %d\\n\", get_alignment( get_ptr_size() ));\n            output( \"\\t%s\\n\", func_declaration( name ) );\n            output( \"%s\\n\", asm_globl( name ) );\n            output( \"\\t%s %s%s$%u$%s\\n\", get_asm_ptr_keyword(),\n                    asm_name( prefix ), dll_name, odp->ordinal, name );\n            output_function_size( name );\n            output_gnu_stack_note();\n            break;\n\n        default:\n            break;\n        }\n    }\n    if (!total) warning( \"%s: Import library doesn't export anything\\n\", spec->file_name );\n\n    if (!as_files.count)  /* create a dummy file to avoid empty import libraries */\n    {\n        new_output_as_file( spec->file_name );\n        output( \"\\t.text\\n\" );\n    }\n\n    assemble_files( spec->file_name );\n    free( dll_name );\n}\n\n/* output an import library for a Win32 module and additional object files */\nvoid output_import_lib( DLLSPEC *spec, char **argv )\n{\n    if (target_platform == PLATFORM_WINDOWS)\n    {\n        build_windows_import_lib( spec );\n        if (argv[0]) build_library( output_file_name, argv, 0 );\n    }\n    else\n    {\n        build_unix_import_lib( spec );\n        build_library( output_file_name, argv, 1 );\n    }\n    output_file_name = NULL;\n}\n"
  },
  {
    "path": "convspec/main.c.h",
    "content": "/*\n * winebuild main function\n *\n * Copyright 1993 Robert J. Amstadt\n * Copyright 1995 Martin von Loewis\n * Copyright 1995, 1996, 1997 Alexandre Julliard\n * Copyright 1997 Eric Youngdale\n * Copyright 1999 Ulrich Weigand\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <assert.h>\n#include <stdio.h>\n#include <signal.h>\n#include <errno.h>\n#include <string.h>\n#include <stdarg.h>\n#include <ctype.h>\n#ifdef HAVE_GETOPT_H\n# include <getopt.h>\n#endif\n\n#include \"build.h\"\n\nint UsePIC = 0;\nint nb_errors = 0;\nint display_warnings = 0;\nint kill_at = 0;\nint verbose = 0;\nint link_ext_symbols = 0;\nint force_pointer_size = 0;\nint unwind_tables = 0;\n\n#ifdef __i386__\nenum target_cpu target_cpu = CPU_x86;\n#elif defined(__x86_64__)\nenum target_cpu target_cpu = CPU_x86_64;\n#elif defined(__powerpc__)\nenum target_cpu target_cpu = CPU_POWERPC;\n#elif defined(__arm__)\nenum target_cpu target_cpu = CPU_ARM;\n#elif defined(__aarch64__)\nenum target_cpu target_cpu = CPU_ARM64;\n#else\n#error Unsupported CPU\n#endif\n\n#ifdef __APPLE__\nenum target_platform target_platform = PLATFORM_APPLE;\n#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)\nenum target_platform target_platform = PLATFORM_FREEBSD;\n#elif defined(__sun)\nenum target_platform target_platform = PLATFORM_SOLARIS;\n#elif defined(_WIN32)\nenum target_platform target_platform = PLATFORM_WINDOWS;\n#else\nenum target_platform target_platform = PLATFORM_UNSPECIFIED;\n#endif\n\nchar *target_alias = NULL;\n\nchar *input_file_name = NULL;\nchar *spec_file_name = NULL;\nFILE *output_file = NULL;\nconst char *output_file_name = NULL;\nstatic const char *output_file_source_name;\nstatic int fake_module;\n\nstruct strarray lib_path = { 0 };\nstruct strarray as_command = { 0 };\nstruct strarray cc_command = { 0 };\nstruct strarray ld_command = { 0 };\nstruct strarray nm_command = { 0 };\nchar *cpu_option = NULL;\nchar *arch_option = NULL;\n#ifdef __SOFTFP__\nconst char *float_abi_option = \"soft\";\n#else\nconst char *float_abi_option = \"softfp\";\n#endif\n\n#ifdef __thumb__\nint thumb_mode = 1;\n#else\nint thumb_mode = 0;\n#endif\n\nstatic struct strarray res_files;\n\n/* execution mode */\nenum exec_mode_values\n{\n    MODE_NONE,\n    MODE_DLL,\n    MODE_EXE,\n    MODE_DEF,\n    MODE_IMPLIB,\n    MODE_RESOURCES\n};\n\nstatic enum exec_mode_values exec_mode = MODE_NONE;\n\nstatic const struct\n{\n    const char *name;\n    enum target_platform platform;\n} platform_names[] =\n{\n    { \"macos\",   PLATFORM_APPLE },\n    { \"darwin\",  PLATFORM_APPLE },\n    { \"freebsd\", PLATFORM_FREEBSD },\n    { \"solaris\", PLATFORM_SOLARIS },\n    { \"mingw32\", PLATFORM_WINDOWS },\n    { \"windows\", PLATFORM_WINDOWS },\n    { \"winnt\",   PLATFORM_WINDOWS }\n};\n\n/* set the dll file name from the input file name */\nstatic void set_dll_file_name( const char *name, DLLSPEC *spec )\n{\n    char *p;\n\n    if (spec->file_name) return;\n\n    if ((p = strrchr( name, '\\\\' ))) name = p + 1;\n    if ((p = strrchr( name, '/' ))) name = p + 1;\n    spec->file_name = xmalloc( strlen(name) + 5 );\n    strcpy( spec->file_name, name );\n    if ((p = strrchr( spec->file_name, '.' )))\n    {\n        if (!strcmp( p, \".spec\" ) || !strcmp( p, \".def\" )) *p = 0;\n    }\n}\n\n/* set the dll name from the file name */\nstatic void init_dll_name( DLLSPEC *spec )\n{\n    if (!spec->file_name && output_file_name)\n    {\n        char *p;\n        spec->file_name = xstrdup( output_file_name );\n        if ((p = strrchr( spec->file_name, '.' ))) *p = 0;\n    }\n    if (!spec->dll_name && spec->file_name)  /* set default name from file name */\n    {\n        char *p;\n        spec->dll_name = xstrdup( spec->file_name );\n        if ((p = strrchr( spec->dll_name, '.' ))) *p = 0;\n    }\n    spec->c_name = make_c_identifier( spec->dll_name );\n}\n\n/* set the dll subsystem */\nstatic void set_subsystem( const char *subsystem, DLLSPEC *spec )\n{\n    char *major, *minor, *str = xstrdup( subsystem );\n\n    if ((major = strchr( str, ':' ))) *major++ = 0;\n    if (!strcmp( str, \"native\" )) spec->subsystem = IMAGE_SUBSYSTEM_NATIVE;\n    else if (!strcmp( str, \"windows\" )) spec->subsystem = IMAGE_SUBSYSTEM_WINDOWS_GUI;\n    else if (!strcmp( str, \"console\" )) spec->subsystem = IMAGE_SUBSYSTEM_WINDOWS_CUI;\n    else if (!strcmp( str, \"wince\" ))   spec->subsystem = IMAGE_SUBSYSTEM_WINDOWS_CE_GUI;\n    else if (!strcmp( str, \"win16\" )) spec->type = SPEC_WIN16;\n    else fatal_error( \"Invalid subsystem name '%s'\\n\", subsystem );\n    if (major)\n    {\n        if ((minor = strchr( major, '.' )))\n        {\n            *minor++ = 0;\n            spec->subsystem_minor = atoi( minor );\n        }\n        spec->subsystem_major = atoi( major );\n    }\n    free( str );\n}\n\n/* set the target CPU and platform */\nstatic void set_target( const char *target )\n{\n    unsigned int i;\n    char *p, *platform, *spec = xstrdup( target );\n\n    /* target specification is in the form CPU-MANUFACTURER-OS or CPU-MANUFACTURER-KERNEL-OS */\n\n    target_alias = xstrdup( target );\n\n    /* get the CPU part */\n\n    if ((p = strchr( spec, '-' )))\n    {\n        int cpu;\n\n        *p++ = 0;\n        cpu = get_cpu_from_name( spec );\n        if (cpu == -1) fatal_error( \"Unrecognized CPU '%s'\\n\", spec );\n        target_cpu = cpu;\n        platform = p;\n        if ((p = strrchr( p, '-' ))) platform = p + 1;\n    }\n    else if (!strcmp( spec, \"mingw32\" ))\n    {\n        target_cpu = CPU_x86;\n        platform = spec;\n    }\n    else\n        fatal_error( \"Invalid target specification '%s'\\n\", target );\n\n    /* get the OS part */\n\n    target_platform = PLATFORM_UNSPECIFIED;  /* default value */\n    for (i = 0; i < sizeof(platform_names)/sizeof(platform_names[0]); i++)\n    {\n        if (!strncmp( platform_names[i].name, platform, strlen(platform_names[i].name) ))\n        {\n            target_platform = platform_names[i].platform;\n            break;\n        }\n    }\n\n    free( spec );\n}\n\n/* cleanup on program exit */\nstatic void cleanup(void)\n{\n    if (output_file_name) unlink( output_file_name );\n}\n\n/* clean things up when aborting on a signal */\nstatic void exit_on_signal( int sig )\n{\n    exit(1);  /* this will call atexit functions */\n}\n\n/*******************************************************************\n *         command-line option handling\n */\nstatic const char usage_str[] =\n\"Usage: winebuild [OPTIONS] [FILES]\\n\\n\"\n\"Options:\\n\"\n\"       --as-cmd=AS           Command to use for assembling (default: as)\\n\"\n\"   -b, --target=TARGET       Specify target CPU and platform for cross-compiling\\n\"\n\"       --cc-cmd=CC           C compiler to use for assembling (default: fall back to --as-cmd)\\n\"\n\"   -d, --delay-lib=LIB       Import the specified library in delayed mode\\n\"\n\"   -D SYM                    Ignored for C flags compatibility\\n\"\n\"   -e, --entry=FUNC          Set the DLL entry point function (default: DllMain)\\n\"\n\"   -E, --export=FILE         Export the symbols defined in the .spec or .def file\\n\"\n\"       --external-symbols    Allow linking to external symbols\\n\"\n\"   -f FLAGS                  Compiler flags (-fPIC and -fasynchronous-unwind-tables are supported)\\n\"\n\"   -F, --filename=DLLFILE    Set the DLL filename (default: from input file name)\\n\"\n\"       --fake-module         Create a fake binary module\\n\"\n\"   -h, --help                Display this help message\\n\"\n\"   -H, --heap=SIZE           Set the heap size for a Win16 dll\\n\"\n\"   -I DIR                    Ignored for C flags compatibility\\n\"\n\"   -k, --kill-at             Kill stdcall decorations in generated .def files\\n\"\n\"   -K, FLAGS                 Compiler flags (only -KPIC is supported)\\n\"\n\"       --large-address-aware Support an address space larger than 2Gb\\n\"\n\"       --ld-cmd=LD           Command to use for linking (default: ld)\\n\"\n\"   -l, --library=LIB         Import the specified library\\n\"\n\"   -L, --library-path=DIR    Look for imports libraries in DIR\\n\"\n\"   -m16, -m32, -m64          Force building 16-bit, 32-bit resp. 64-bit code\\n\"\n\"   -M, --main-module=MODULE  Set the name of the main module for a Win16 dll\\n\"\n\"       --nm-cmd=NM           Command to use to get undefined symbols (default: nm)\\n\"\n\"       --nxcompat=y|n        Set the NX compatibility flag (default: yes)\\n\"\n\"   -N, --dll-name=DLLNAME    Set the DLL name (default: from input file name)\\n\"\n\"   -o, --output=NAME         Set the output file name (default: stdout)\\n\"\n\"   -r, --res=RSRC.RES        Load resources from RSRC.RES\\n\"\n\"       --save-temps          Do not delete the generated intermediate files\\n\"\n\"       --subsystem=SUBSYS    Set the subsystem (one of native, windows, console, wince)\\n\"\n\"   -u, --undefined=SYMBOL    Add an undefined reference to SYMBOL when linking\\n\"\n\"   -v, --verbose             Display the programs invoked\\n\"\n\"       --version             Print the version and exit\\n\"\n\"   -w, --warnings            Turn on warnings\\n\"\n\"\\nMode options:\\n\"\n\"       --dll                 Build a .c file from a .spec or .def file\\n\"\n\"       --def                 Build a .def file from a .spec file\\n\"\n\"       --exe                 Build a .c file for an executable\\n\"\n\"       --implib              Build an import library\\n\"\n\"       --resources           Build a .o file for the resource files\\n\\n\"\n\"The mode options are mutually exclusive; you must specify one and only one.\\n\\n\";\n\nenum long_options_values\n{\n    LONG_OPT_DLL = 1,\n    LONG_OPT_DEF,\n    LONG_OPT_EXE,\n    LONG_OPT_IMPLIB,\n    LONG_OPT_ASCMD,\n    LONG_OPT_CCCMD,\n    LONG_OPT_EXTERNAL_SYMS,\n    LONG_OPT_FAKE_MODULE,\n    LONG_OPT_LARGE_ADDRESS_AWARE,\n    LONG_OPT_LDCMD,\n    LONG_OPT_NMCMD,\n    LONG_OPT_NXCOMPAT,\n    LONG_OPT_RESOURCES,\n    LONG_OPT_SAVE_TEMPS,\n    LONG_OPT_SUBSYSTEM,\n    LONG_OPT_VERSION\n};\n\nstatic const char short_options[] = \"C:D:E:F:H:I:K:L:M:N:b:d:e:f:hkl:m:o:r:u:vw\";\n\nstatic const struct option long_options[] =\n{\n    { \"dll\",           0, 0, LONG_OPT_DLL },\n    { \"def\",           0, 0, LONG_OPT_DEF },\n    { \"exe\",           0, 0, LONG_OPT_EXE },\n    { \"implib\",        0, 0, LONG_OPT_IMPLIB },\n    { \"as-cmd\",        1, 0, LONG_OPT_ASCMD },\n    { \"cc-cmd\",        1, 0, LONG_OPT_CCCMD },\n    { \"external-symbols\", 0, 0, LONG_OPT_EXTERNAL_SYMS },\n    { \"fake-module\",   0, 0, LONG_OPT_FAKE_MODULE },\n    { \"large-address-aware\", 0, 0, LONG_OPT_LARGE_ADDRESS_AWARE },\n    { \"ld-cmd\",        1, 0, LONG_OPT_LDCMD },\n    { \"nm-cmd\",        1, 0, LONG_OPT_NMCMD },\n    { \"nxcompat\",      1, 0, LONG_OPT_NXCOMPAT },\n    { \"resources\",     0, 0, LONG_OPT_RESOURCES },\n    { \"save-temps\",    0, 0, LONG_OPT_SAVE_TEMPS },\n    { \"subsystem\",     1, 0, LONG_OPT_SUBSYSTEM },\n    { \"version\",       0, 0, LONG_OPT_VERSION },\n    /* aliases for short options */\n    { \"target\",        1, 0, 'b' },\n    { \"delay-lib\",     1, 0, 'd' },\n    { \"export\",        1, 0, 'E' },\n    { \"entry\",         1, 0, 'e' },\n    { \"filename\",      1, 0, 'F' },\n    { \"help\",          0, 0, 'h' },\n    { \"heap\",          1, 0, 'H' },\n    { \"kill-at\",       0, 0, 'k' },\n    { \"library\",       1, 0, 'l' },\n    { \"library-path\",  1, 0, 'L' },\n    { \"main-module\",   1, 0, 'M' },\n    { \"dll-name\",      1, 0, 'N' },\n    { \"output\",        1, 0, 'o' },\n    { \"res\",           1, 0, 'r' },\n    { \"undefined\",     1, 0, 'u' },\n    { \"verbose\",       0, 0, 'v' },\n    { \"warnings\",      0, 0, 'w' },\n    { NULL,            0, 0, 0 }\n};\n\nstatic void usage( int exit_code )\n{\n    fprintf( stderr, \"%s\", usage_str );\n    exit( exit_code );\n}\n\nstatic void set_exec_mode( enum exec_mode_values mode )\n{\n    if (exec_mode != MODE_NONE) usage(1);\n    exec_mode = mode;\n}\n\n/* parse options from the argv array and remove all the recognized ones */\nstatic char **parse_options( int argc, char **argv, DLLSPEC *spec )\n{\n    char *p;\n    int optc;\n    int save_temps = 0;\n\n    while ((optc = getopt_long( argc, argv, short_options, long_options, NULL )) != -1)\n    {\n        switch(optc)\n        {\n        case 'D':\n            /* ignored */\n            break;\n        case 'E':\n            spec_file_name = xstrdup( optarg );\n            set_dll_file_name( optarg, spec );\n            break;\n        case 'F':\n            spec->file_name = xstrdup( optarg );\n            break;\n        case 'H':\n            if (!isdigit(optarg[0]))\n                fatal_error( \"Expected number argument with -H option instead of '%s'\\n\", optarg );\n            spec->heap_size = atoi(optarg);\n            if (spec->heap_size > 65535)\n                fatal_error( \"Invalid heap size %d, maximum is 65535\\n\", spec->heap_size );\n            break;\n        case 'I':\n            /* ignored */\n            break;\n        case 'K':\n            /* ignored, because cc generates correct code. */\n            break;\n        case 'L':\n            strarray_add( &lib_path, xstrdup( optarg ), NULL );\n            break;\n        case 'm':\n            if (!strcmp( optarg, \"16\" )) spec->type = SPEC_WIN16;\n            else if (!strcmp( optarg, \"32\" )) force_pointer_size = 4;\n            else if (!strcmp( optarg, \"64\" )) force_pointer_size = 8;\n            else if (!strcmp( optarg, \"arm\" )) thumb_mode = 0;\n            else if (!strcmp( optarg, \"thumb\" )) thumb_mode = 1;\n            else if (!strncmp( optarg, \"cpu=\", 4 )) cpu_option = xstrdup( optarg + 4 );\n            else if (!strncmp( optarg, \"arch=\", 5 )) arch_option = xstrdup( optarg + 5 );\n            else if (!strncmp( optarg, \"float-abi=\", 10 )) float_abi_option = xstrdup( optarg + 10 );\n            else fatal_error( \"Unknown -m option '%s'\\n\", optarg );\n            break;\n        case 'M':\n            spec->main_module = xstrdup( optarg );\n            break;\n        case 'N':\n            spec->dll_name = xstrdup( optarg );\n            break;\n        case 'b':\n            set_target( optarg );\n            break;\n        case 'd':\n            add_delayed_import( optarg );\n            break;\n        case 'e':\n            spec->init_func = xstrdup( optarg );\n            if ((p = strchr( spec->init_func, '@' ))) *p = 0;  /* kill stdcall decoration */\n            break;\n        case 'f':\n            if (!strcmp( optarg, \"PIC\") || !strcmp( optarg, \"pic\")) UsePIC = 1;\n            else if (!strcmp( optarg, \"asynchronous-unwind-tables\")) unwind_tables = 1;\n            else if (!strcmp( optarg, \"no-asynchronous-unwind-tables\")) unwind_tables = 0;\n            /* ignore all other flags */\n            break;\n        case 'h':\n            usage(0);\n            break;\n        case 'k':\n            kill_at = 1;\n            break;\n        case 'l':\n            add_import_dll( optarg, NULL );\n            break;\n        case 'o':\n            {\n                char *ext = strrchr( optarg, '.' );\n\n                if (unlink( optarg ) == -1 && errno != ENOENT)\n                    fatal_error( \"Unable to create output file '%s'\\n\", optarg );\n                if (ext && !strcmp( ext, \".o\" ))\n                {\n                    output_file_source_name = get_temp_file_name( optarg, \".s\" );\n                    if (!(output_file = fopen( output_file_source_name, \"w\" )))\n                        fatal_error( \"Unable to create output file '%s'\\n\", optarg );\n                }\n                else\n                {\n                    if (!(output_file = fopen( optarg, \"w\" )))\n                        fatal_error( \"Unable to create output file '%s'\\n\", optarg );\n                }\n                output_file_name = xstrdup(optarg);\n                atexit( cleanup );  /* make sure we remove the output file on exit */\n            }\n            break;\n        case 'r':\n            strarray_add( &res_files, xstrdup( optarg ), NULL );\n            break;\n        case 'u':\n            add_extra_ld_symbol( optarg );\n            break;\n        case 'v':\n            verbose++;\n            break;\n        case 'w':\n            display_warnings = 1;\n            break;\n        case LONG_OPT_DLL:\n            set_exec_mode( MODE_DLL );\n            break;\n        case LONG_OPT_DEF:\n            set_exec_mode( MODE_DEF );\n            break;\n        case LONG_OPT_EXE:\n            set_exec_mode( MODE_EXE );\n            if (!spec->subsystem) spec->subsystem = IMAGE_SUBSYSTEM_WINDOWS_GUI;\n            break;\n        case LONG_OPT_IMPLIB:\n            set_exec_mode( MODE_IMPLIB );\n            break;\n        case LONG_OPT_ASCMD:\n            as_command = strarray_fromstring( optarg, \" \" );\n            break;\n        case LONG_OPT_CCCMD:\n            cc_command = strarray_fromstring( optarg, \" \" );\n            break;\n        case LONG_OPT_FAKE_MODULE:\n            fake_module = 1;\n            break;\n        case LONG_OPT_EXTERNAL_SYMS:\n            link_ext_symbols = 1;\n            break;\n        case LONG_OPT_LARGE_ADDRESS_AWARE:\n            spec->characteristics |= IMAGE_FILE_LARGE_ADDRESS_AWARE;\n            break;\n        case LONG_OPT_LDCMD:\n            ld_command = strarray_fromstring( optarg, \" \" );\n            break;\n        case LONG_OPT_NMCMD:\n            nm_command = strarray_fromstring( optarg, \" \" );\n            break;\n        case LONG_OPT_NXCOMPAT:\n            if (optarg[0] == 'n' || optarg[0] == 'N')\n                spec->dll_characteristics &= ~IMAGE_DLLCHARACTERISTICS_NX_COMPAT;\n            break;\n        case LONG_OPT_RESOURCES:\n            set_exec_mode( MODE_RESOURCES );\n            break;\n        case LONG_OPT_SAVE_TEMPS:\n            save_temps = 1;\n            break;\n        case LONG_OPT_SUBSYSTEM:\n            set_subsystem( optarg, spec );\n            break;\n        case LONG_OPT_VERSION:\n            printf( \"winebuild version \" PACKAGE_VERSION \"\\n\" );\n            exit(0);\n        case '?':\n            usage(1);\n            break;\n        }\n    }\n\n    if (!save_temps) atexit( cleanup_tmp_files );\n\n    if (spec->file_name && !strchr( spec->file_name, '.' ))\n        strcat( spec->file_name, exec_mode == MODE_EXE ? \".exe\" : \".dll\" );\n    init_dll_name( spec );\n\n    switch (target_cpu)\n    {\n    case CPU_x86:\n        if (force_pointer_size == 8) target_cpu = CPU_x86_64;\n        break;\n    case CPU_x86_64:\n        if (force_pointer_size == 4) target_cpu = CPU_x86;\n        break;\n    default:\n        if (force_pointer_size == 8)\n            fatal_error( \"Cannot build 64-bit code for this CPU\\n\" );\n        break;\n    }\n\n    return &argv[optind];\n}\n\n\n/* load all specified resource files */\nstatic void load_resources( char *argv[], DLLSPEC *spec )\n{\n    int i;\n    char **ptr, **last;\n\n    switch (spec->type)\n    {\n    case SPEC_WIN16:\n        for (i = 0; i < res_files.count; i++) load_res16_file( res_files.str[i], spec );\n        break;\n\n    case SPEC_WIN32:\n        for (i = 0; i < res_files.count; i++)\n        {\n            if (!load_res32_file( res_files.str[i], spec ))\n                fatal_error( \"%s is not a valid Win32 resource file\\n\", res_files.str[i] );\n        }\n\n        /* load any resource file found in the remaining arguments */\n        for (ptr = last = argv; *ptr; ptr++)\n        {\n            if (!load_res32_file( *ptr, spec ))\n                *last++ = *ptr; /* not a resource file, keep it in the list */\n        }\n        *last = NULL;\n        break;\n    }\n}\n\n/* add input files that look like import libs to the import list */\nstatic void load_import_libs( char *argv[] )\n{\n    char **ptr, **last;\n\n    for (ptr = last = argv; *ptr; ptr++)\n    {\n        if (strendswith( *ptr, \".def\" ))\n            add_import_dll( NULL, *ptr );\n        else\n            *last++ = *ptr; /* not an import dll, keep it in the list */\n    }\n    *last = NULL;\n}\n\nstatic int parse_input_file( DLLSPEC *spec )\n{\n    FILE *input_file = open_input_file( NULL, spec_file_name );\n    char *extension = strrchr( spec_file_name, '.' );\n    int result;\n\n    spec->src_name = xstrdup( input_file_name );\n    if (extension && !strcmp( extension, \".def\" ))\n        result = parse_def_file( input_file, spec );\n    else\n        result = parse_spec_file( input_file, spec );\n    close_input_file( input_file );\n    return result;\n}\n\n\n/*******************************************************************\n *         main\n */\nint maiAn(int argc, char **argv)\n{\n    DLLSPEC *spec = alloc_dll_spec();\n\n#ifdef SIGHUP\n    signal( SIGHUP, exit_on_signal );\n#endif\n    signal( SIGTERM, exit_on_signal );\n    signal( SIGINT, exit_on_signal );\n\n    output_file = stdout;\n    argv = parse_options( argc, argv, spec );\n\n    switch(exec_mode)\n    {\n    case MODE_DLL:\n        if (spec->subsystem != IMAGE_SUBSYSTEM_NATIVE)\n            spec->characteristics |= IMAGE_FILE_DLL;\n        /* fall through */\n    case MODE_EXE:\n        load_resources( argv, spec );\n        load_import_libs( argv );\n        if (spec_file_name && !parse_input_file( spec )) break;\n        if (fake_module)\n        {\n            if (spec->type == SPEC_WIN16) output_fake_module16( spec );\n            else output_fake_module( spec );\n            break;\n        }\n        read_undef_symbols( spec, argv );\n        switch (spec->type)\n        {\n            case SPEC_WIN16:\n                output_spec16_file( spec );\n                break;\n            case SPEC_WIN32:\n                BuildSpec32File( spec );\n                break;\n            default: assert(0);\n        }\n        break;\n    case MODE_DEF:\n        if (argv[0]) fatal_error( \"file argument '%s' not allowed in this mode\\n\", argv[0] );\n        if (!spec_file_name) fatal_error( \"missing .spec file\\n\" );\n        if (!parse_input_file( spec )) break;\n        output_def_file( spec, 1 );\n        break;\n    case MODE_IMPLIB:\n        if (!spec_file_name) fatal_error( \"missing .spec file\\n\" );\n        if (!parse_input_file( spec )) break;\n        output_import_lib( spec, argv );\n        break;\n    case MODE_RESOURCES:\n        load_resources( argv, spec );\n        output_res_o_file( spec );\n        break;\n    default:\n        usage(1);\n        break;\n    }\n    if (nb_errors) exit(1);\n    if (output_file_name)\n    {\n        if (fclose( output_file ) < 0) fatal_perror( \"fclose\" );\n        if (output_file_source_name) assemble_file( output_file_source_name, output_file_name );\n        output_file_name = NULL;\n    }\n    return 0;\n}\n"
  },
  {
    "path": "convspec/parser.c",
    "content": "/*\n * Spec file parser\n *\n * Copyright 1993 Robert J. Amstadt\n * Copyright 1995 Martin von Loewis\n * Copyright 1995, 1996, 1997, 2004 Alexandre Julliard\n * Copyright 1997 Eric Youngdale\n * Copyright 1999 Ulrich Weigand\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <assert.h>\n#include <ctype.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include \"build.h\"\n\nint current_line = 0;\n\nstatic char ParseBuffer[512];\nstatic char TokenBuffer[512];\nstatic char *ParseNext = ParseBuffer;\nstatic FILE *input_file;\n\nstatic const char *separator_chars;\nstatic const char *comment_chars;\n\n/* valid characters in ordinal names */\nstatic const char valid_ordname_chars[] = \"/$:-_@?<>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\n\nstatic const char * const TypeNames[TYPE_NBTYPES] =\n{\n    \"variable\",     /* TYPE_VARIABLE */\n    \"pascal\",       /* TYPE_PASCAL */\n    \"equate\",       /* TYPE_ABS */\n    \"stub\",         /* TYPE_STUB */\n    \"stdcall\",      /* TYPE_STDCALL */\n    \"cdecl\",        /* TYPE_CDECL */\n    \"varargs\",      /* TYPE_VARARGS */\n    \"thiscall\",     /* TYPE_THISCALL */\n    \"extern\"        /* TYPE_EXTERN */\n};\n\nstatic const char * const FlagNames[] =\n{\n    \"norelay\",     /* FLAG_NORELAY */\n    \"noname\",      /* FLAG_NONAME */\n    \"ret16\",       /* FLAG_RET16 */\n    \"ret64\",       /* FLAG_RET64 */\n    \"register\",    /* FLAG_REGISTER */\n    \"private\",     /* FLAG_PRIVATE */\n    \"ordinal\",     /* FLAG_ORDINAL */\n    \"stkprolog\",   /* FLAG_STKPROLOG */\n    NULL\n};\n\nstatic const char * const ArgNames[ARG_MAXARG + 1] =\n{\n    \"word\",    /* ARG_WORD */\n    \"s_word\",  /* ARG_SWORD */\n    \"segptr\",  /* ARG_SEGPTR */\n    \"segstr\",  /* ARG_SEGSTR */\n    \"long\",    /* ARG_LONG */\n    \"ptr\",     /* ARG_PTR */\n    \"str\",     /* ARG_STR */\n    \"wstr\",    /* ARG_WSTR */\n    \"int64\",   /* ARG_INT64 */\n    \"int128\",  /* ARG_INT128 */\n    \"float\",   /* ARG_FLOAT */\n    \"double\"   /* ARG_DOUBLE */\n};\n\nstatic int IsNumberString(const char *s)\n{\n    while (*s) if (!isdigit(*s++)) return 0;\n    return 1;\n}\n\nstatic inline int is_token_separator( char ch )\n{\n    return strchr( separator_chars, ch ) != NULL;\n}\n\nstatic inline int is_token_comment( char ch )\n{\n    return strchr( comment_chars, ch ) != NULL;\n}\n\n/* get the next line from the input file, or return 0 if at eof */\nstatic int get_next_line(void)\n{\n    ParseNext = ParseBuffer;\n    current_line++;\n    return (fgets(ParseBuffer, sizeof(ParseBuffer), input_file) != NULL);\n}\n\nstatic const char * GetToken( int allow_eol )\n{\n    char *p;\n    char *token = TokenBuffer;\n\n    for (;;)\n    {\n        /* remove initial white space */\n        p = ParseNext;\n        while (isspace(*p)) p++;\n\n        if (*p == '\\\\' && p[1] == '\\n')  /* line continuation */\n        {\n            if (!get_next_line())\n            {\n                if (!allow_eol) error( \"Unexpected end of file\\n\" );\n                return NULL;\n            }\n        }\n        else break;\n    }\n\n    if ((*p == '\\0') || is_token_comment(*p))\n    {\n        if (!allow_eol) error( \"Declaration not terminated properly\\n\" );\n        return NULL;\n    }\n\n    /*\n     * Find end of token.\n     */\n    if (is_token_separator(*p))\n    {\n        /* a separator is always a complete token */\n        *token++ = *p++;\n    }\n    else while (*p != '\\0' && !is_token_separator(*p) && !isspace(*p))\n    {\n        if (*p == '\\\\') p++;\n        if (*p) *token++ = *p++;\n    }\n    *token = '\\0';\n    ParseNext = p;\n    return TokenBuffer;\n}\n\n\nstatic ORDDEF *add_entry_point( DLLSPEC *spec )\n{\n    ORDDEF *ret;\n\n    if (spec->nb_entry_points == spec->alloc_entry_points)\n    {\n        spec->alloc_entry_points += 128;\n        spec->entry_points = xrealloc( spec->entry_points,\n                                       spec->alloc_entry_points * sizeof(*spec->entry_points) );\n    }\n    ret = &spec->entry_points[spec->nb_entry_points++];\n    memset( ret, 0, sizeof(*ret) );\n    return ret;\n}\n\n/*******************************************************************\n *         parse_spec_variable\n *\n * Parse a variable definition in a .spec file.\n */\nstatic int parse_spec_variable( ORDDEF *odp, DLLSPEC *spec )\n{\n    char *endptr;\n    unsigned int *value_array;\n    int n_values;\n    int value_array_size;\n    const char *token;\n\n    if (spec->type == SPEC_WIN32)\n    {\n        error( \"'variable' not supported in Win32, use 'extern' instead\\n\" );\n        return 0;\n    }\n\n    if (!(token = GetToken(0))) return 0;\n    if (*token != '(')\n    {\n        error( \"Expected '(' got '%s'\\n\", token );\n        return 0;\n    }\n\n    n_values = 0;\n    value_array_size = 25;\n    value_array = xmalloc(sizeof(*value_array) * value_array_size);\n\n    for (;;)\n    {\n        if (!(token = GetToken(0)))\n        {\n            free( value_array );\n            return 0;\n        }\n\tif (*token == ')')\n\t    break;\n\n\tvalue_array[n_values++] = strtoul(token, &endptr, 0);\n\tif (n_values == value_array_size)\n\t{\n\t    value_array_size += 25;\n\t    value_array = xrealloc(value_array,\n\t\t\t\t   sizeof(*value_array) * value_array_size);\n\t}\n\n\tif (endptr == NULL || *endptr != '\\0')\n        {\n            error( \"Expected number value, got '%s'\\n\", token );\n            free( value_array );\n            return 0;\n        }\n    }\n\n    odp->u.var.n_values = n_values;\n    odp->u.var.values = xrealloc(value_array, sizeof(*value_array) * n_values);\n    return 1;\n}\n\n\n/*******************************************************************\n *         parse_spec_arguments\n *\n * Parse the arguments of an entry point.\n */\nstatic int parse_spec_arguments( ORDDEF *odp, DLLSPEC *spec, int optional )\n{\n    const char *token;\n    unsigned int i, arg;\n    int is_win32 = (spec->type == SPEC_WIN32) || (odp->flags & FLAG_EXPORT32);\n\n    if (!(token = GetToken( optional ))) return optional;\n    if (*token != '(')\n    {\n        error( \"Expected '(' got '%s'\\n\", token );\n        return 0;\n    }\n\n    odp->u.func.nb_args = 0;\n    for (i = 0; i < MAX_ARGUMENTS; i++)\n    {\n        if (!(token = GetToken(0))) return 0;\n\tif (*token == ')')\n\t    break;\n\n        for (arg = 0; arg <= ARG_MAXARG; arg++)\n            if (!strcmp( ArgNames[arg], token )) break;\n\n        if (arg > ARG_MAXARG)\n        {\n            error( \"Unknown argument type '%s'\\n\", token );\n            return 0;\n        }\n        if (is_win32) switch (arg)\n        {\n        case ARG_WORD:\n        case ARG_SWORD:\n        case ARG_SEGPTR:\n        case ARG_SEGSTR:\n            error( \"Argument type '%s' only allowed for Win16\\n\", token );\n            return 0;\n        }\n        odp->u.func.args[i] = arg;\n    }\n    if (*token != ')')\n    {\n        error( \"Too many arguments\\n\" );\n        return 0;\n    }\n\n    odp->u.func.nb_args = i;\n    if (odp->type == TYPE_THISCALL && (!i || odp->u.func.args[0] != ARG_PTR))\n    {\n        error( \"First argument of a thiscall function must be a pointer\\n\" );\n        return 0;\n    }\n    return 1;\n}\n\n\n/*******************************************************************\n *         parse_spec_export\n *\n * Parse an exported function definition in a .spec file.\n */\nstatic int parse_spec_export( ORDDEF *odp, DLLSPEC *spec )\n{\n    const char *token;\n    int is_win32 = (spec->type == SPEC_WIN32) || (odp->flags & FLAG_EXPORT32);\n\n    if (!is_win32 && odp->type == TYPE_STDCALL)\n    {\n        error( \"'stdcall' not supported for Win16\\n\" );\n        return 0;\n    }\n    if (!is_win32 && odp->type == TYPE_THISCALL)\n    {\n        error( \"'thiscall' not supported for Win16\\n\" );\n        return 0;\n    }\n    if (is_win32 && odp->type == TYPE_PASCAL)\n    {\n        error( \"'pascal' not supported for Win32\\n\" );\n        return 0;\n    }\n\n    if (!parse_spec_arguments( odp, spec, 0 )) return 0;\n\n    if (odp->type == TYPE_VARARGS)\n        odp->flags |= FLAG_NORELAY;  /* no relay debug possible for varags entry point */\n\n    if (!(token = GetToken(1)))\n    {\n        if (!strcmp( odp->name, \"@\" ))\n        {\n            error( \"Missing handler name for anonymous function\\n\" );\n            return 0;\n        }\n        odp->link_name = xstrdup( odp->name );\n    }\n    else\n    {\n        odp->link_name = xstrdup( token );\n        if (strchr( odp->link_name, '.' ))\n        {\n            if (!is_win32)\n            {\n                error( \"Forwarded functions not supported for Win16\\n\" );\n                return 0;\n            }\n            odp->flags |= FLAG_FORWARD;\n        }\n    }\n    if (target_cpu == CPU_x86 && odp->type == TYPE_THISCALL && !(odp->flags & FLAG_FORWARD))\n    {\n        char *link_name = strmake( \"__thiscall_%s\", odp->link_name );\n        free( odp->link_name );\n        odp->link_name = link_name;\n    }\n    return 1;\n}\n\n\n/*******************************************************************\n *         parse_spec_equate\n *\n * Parse an 'equate' definition in a .spec file.\n */\nstatic int parse_spec_equate( ORDDEF *odp, DLLSPEC *spec )\n{\n    char *endptr;\n    int value;\n    const char *token;\n\n    if (spec->type == SPEC_WIN32)\n    {\n        error( \"'equate' not supported for Win32\\n\" );\n        return 0;\n    }\n    if (!(token = GetToken(0))) return 0;\n    value = strtol(token, &endptr, 0);\n    if (endptr == NULL || *endptr != '\\0')\n    {\n        error( \"Expected number value, got '%s'\\n\", token );\n        return 0;\n    }\n    if (value < -0x8000 || value > 0xffff)\n    {\n        error( \"Value %d for absolute symbol doesn't fit in 16 bits\\n\", value );\n        value = 0;\n    }\n    odp->u.abs.value = value;\n    return 1;\n}\n\n\n/*******************************************************************\n *         parse_spec_stub\n *\n * Parse a 'stub' definition in a .spec file\n */\nstatic int parse_spec_stub( ORDDEF *odp, DLLSPEC *spec )\n{\n    odp->u.func.nb_args = -1;\n    odp->link_name = xstrdup(\"\");\n    /* don't bother generating stubs for Winelib */\n    if (odp->flags & FLAG_CPU_MASK)\n        odp->flags &= FLAG_CPU(CPU_x86) | FLAG_CPU(CPU_x86_64) | FLAG_CPU(CPU_ARM) | FLAG_CPU(CPU_ARM64);\n    else\n        odp->flags |= FLAG_CPU(CPU_x86) | FLAG_CPU(CPU_x86_64) | FLAG_CPU(CPU_ARM) | FLAG_CPU(CPU_ARM64);\n\n    return parse_spec_arguments( odp, spec, 1 );\n}\n\n\n/*******************************************************************\n *         parse_spec_extern\n *\n * Parse an 'extern' definition in a .spec file.\n */\nstatic int parse_spec_extern( ORDDEF *odp, DLLSPEC *spec )\n{\n    const char *token;\n\n    if (spec->type == SPEC_WIN16)\n    {\n        error( \"'extern' not supported for Win16, use 'variable' instead\\n\" );\n        return 0;\n    }\n    if (!(token = GetToken(1)))\n    {\n        if (!strcmp( odp->name, \"@\" ))\n        {\n            error( \"Missing handler name for anonymous extern\\n\" );\n            return 0;\n        }\n        odp->link_name = xstrdup( odp->name );\n    }\n    else\n    {\n        odp->link_name = xstrdup( token );\n        if (strchr( odp->link_name, '.' )) odp->flags |= FLAG_FORWARD;\n    }\n    return 1;\n}\n\n\n/*******************************************************************\n *         parse_spec_flags\n *\n * Parse the optional flags for an entry point in a .spec file.\n */\nstatic const char *parse_spec_flags( DLLSPEC *spec, ORDDEF *odp )\n{\n    unsigned int i;\n    const char *token;\n\n    do\n    {\n        if (!(token = GetToken(0))) break;\n        if (!strncmp( token, \"arch=\", 5))\n        {\n            char *args = xstrdup( token + 5 );\n            char *cpu_name = strtok( args, \",\" );\n            while (cpu_name)\n            {\n                if (!strcmp( cpu_name, \"win32\" ))\n                {\n                    if (spec->type == SPEC_WIN32)\n                        odp->flags |= FLAG_CPU_WIN32;\n                    else\n                        odp->flags |= FLAG_EXPORT32;\n                }\n                else if (!strcmp( cpu_name, \"win64\" ))\n                    odp->flags |= FLAG_CPU_WIN64;\n                else\n                {\n                    int cpu = get_cpu_from_name( cpu_name );\n                    if (cpu == -1)\n                    {\n                        error( \"Unknown architecture '%s'\\n\", cpu_name );\n                        return NULL;\n                    }\n                    odp->flags |= FLAG_CPU( cpu );\n                }\n                cpu_name = strtok( NULL, \",\" );\n            }\n            free( args );\n        }\n        else if (!strcmp( token, \"i386\" ))  /* backwards compatibility */\n        {\n            odp->flags |= FLAG_CPU(CPU_x86);\n        }\n        else\n        {\n            for (i = 0; FlagNames[i]; i++)\n                if (!strcmp( FlagNames[i], token )) break;\n            if (!FlagNames[i])\n            {\n                error( \"Unknown flag '%s'\\n\", token );\n                return NULL;\n            }\n            switch (1 << i)\n            {\n            case FLAG_RET16:\n            case FLAG_REGISTER:\n            case FLAG_STKPROLOG:\n                if (spec->type == SPEC_WIN32)\n                    error( \"Flag '%s' is not supported in Win32\\n\", FlagNames[i] );\n                break;\n            case FLAG_RET64:\n                if (spec->type == SPEC_WIN16)\n                    error( \"Flag '%s' is not supported in Win16\\n\", FlagNames[i] );\n                break;\n            }\n            odp->flags |= 1 << i;\n        }\n        token = GetToken(0);\n    } while (token && *token == '-');\n\n    return token;\n}\n\n\n/*******************************************************************\n *         parse_spec_ordinal\n *\n * Parse an ordinal definition in a .spec file.\n */\nstatic int parse_spec_ordinal( int ordinal, DLLSPEC *spec )\n{\n    const char *token;\n    size_t len;\n    ORDDEF *odp = add_entry_point( spec );\n\n    if (!(token = GetToken(0))) goto error;\n\n    for (odp->type = 0; odp->type < TYPE_NBTYPES; odp->type++)\n        if (TypeNames[odp->type] && !strcmp( token, TypeNames[odp->type] ))\n            break;\n\n    if (odp->type >= TYPE_NBTYPES)\n    {\n        error( \"Expected type after ordinal, found '%s' instead\\n\", token );\n        goto error;\n    }\n\n    if (!(token = GetToken(0))) goto error;\n    if (*token == '-' && !(token = parse_spec_flags( spec, odp ))) goto error;\n\n    if (ordinal == -1 && spec->type != SPEC_WIN32 && !(odp->flags & FLAG_EXPORT32))\n    {\n        error( \"'@' ordinals not supported for Win16\\n\" );\n        goto error;\n    }\n\n    odp->name = xstrdup( token );\n    odp->lineno = current_line;\n    odp->ordinal = ordinal;\n\n    len = strspn( odp->name, valid_ordname_chars );\n    if (len < strlen( odp->name ))\n    {\n        error( \"Character '%c' is not allowed in exported name '%s'\\n\", odp->name[len], odp->name );\n        goto error;\n    }\n\n    switch(odp->type)\n    {\n    case TYPE_VARIABLE:\n        if (!parse_spec_variable( odp, spec )) goto error;\n        break;\n    case TYPE_PASCAL:\n    case TYPE_STDCALL:\n    case TYPE_VARARGS:\n    case TYPE_CDECL:\n    case TYPE_THISCALL:\n        if (!parse_spec_export( odp, spec )) goto error;\n        break;\n    case TYPE_ABS:\n        if (!parse_spec_equate( odp, spec )) goto error;\n        break;\n    case TYPE_STUB:\n        if (!parse_spec_stub( odp, spec )) goto error;\n        break;\n    case TYPE_EXTERN:\n        if (!parse_spec_extern( odp, spec )) goto error;\n        break;\n    default:\n        assert( 0 );\n    }\n\n    if ((odp->flags & FLAG_CPU_MASK) && !(odp->flags & FLAG_CPU(target_cpu)))\n    {\n        /* ignore this entry point */\n        spec->nb_entry_points--;\n        return 1;\n    }\n\n    if (ordinal != -1)\n    {\n        if (!ordinal)\n        {\n            error( \"Ordinal 0 is not valid\\n\" );\n            goto error;\n        }\n        if (ordinal >= MAX_ORDINALS)\n        {\n            error( \"Ordinal number %d too large\\n\", ordinal );\n            goto error;\n        }\n        if (ordinal > spec->limit) spec->limit = ordinal;\n        if (ordinal < spec->base) spec->base = ordinal;\n        odp->ordinal = ordinal;\n    }\n\n    if (odp->type == TYPE_STDCALL && !(odp->flags & FLAG_PRIVATE))\n    {\n        if (!strcmp( odp->name, \"DllRegisterServer\" ) ||\n            !strcmp( odp->name, \"DllUnregisterServer\" ) ||\n            !strcmp( odp->name, \"DllMain\" ) ||\n            !strcmp( odp->name, \"DllGetClassObject\" ) ||\n            !strcmp( odp->name, \"DllGetVersion\" ) ||\n            !strcmp( odp->name, \"DllInstall\" ) ||\n            !strcmp( odp->name, \"DllCanUnloadNow\" ))\n        {\n            warning( \"Function %s should be marked private\\n\", odp->name );\n            if (strcmp( odp->name, odp->link_name ))\n                warning( \"Function %s should not use a different internal name (%s)\\n\",\n                         odp->name, odp->link_name );\n        }\n    }\n\n    if (!strcmp( odp->name, \"@\" ) || odp->flags & (FLAG_NONAME | FLAG_ORDINAL))\n    {\n        if (ordinal == -1)\n        {\n            if (!strcmp( odp->name, \"@\" ))\n                error( \"Nameless function needs an explicit ordinal number\\n\" );\n            else\n                error( \"Function imported by ordinal needs an explicit ordinal number\\n\" );\n            goto error;\n        }\n        if (spec->type != SPEC_WIN32)\n        {\n            error( \"Nameless functions not supported for Win16\\n\" );\n            goto error;\n        }\n        if (!strcmp( odp->name, \"@\" ))\n        {\n            free( odp->name );\n            odp->name = NULL;\n        }\n        else if (!(odp->flags & FLAG_ORDINAL))  /* -ordinal only affects the import library */\n        {\n            odp->export_name = odp->name;\n            odp->name = NULL;\n        }\n    }\n    return 1;\n\nerror:\n    spec->nb_entry_points--;\n    free( odp->name );\n    return 0;\n}\n\n\nstatic int name_compare( const void *ptr1, const void *ptr2 )\n{\n    const ORDDEF *odp1 = *(const ORDDEF * const *)ptr1;\n    const ORDDEF *odp2 = *(const ORDDEF * const *)ptr2;\n    const char *name1 = odp1->name ? odp1->name : odp1->export_name;\n    const char *name2 = odp2->name ? odp2->name : odp2->export_name;\n    return strcmp( name1, name2 );\n}\n\n/*******************************************************************\n *         assign_names\n *\n * Build the name array and catch duplicates.\n */\nstatic void assign_names( DLLSPEC *spec )\n{\n    int i, j, nb_exp_names = 0;\n    ORDDEF **all_names;\n\n    spec->nb_names = 0;\n    for (i = 0; i < spec->nb_entry_points; i++)\n        if (spec->entry_points[i].name) spec->nb_names++;\n        else if (spec->entry_points[i].export_name) nb_exp_names++;\n\n    if (!spec->nb_names && !nb_exp_names) return;\n\n    /* check for duplicates */\n\n    all_names = xmalloc( (spec->nb_names + nb_exp_names) * sizeof(all_names[0]) );\n    for (i = j = 0; i < spec->nb_entry_points; i++)\n        if (spec->entry_points[i].name || spec->entry_points[i].export_name)\n            all_names[j++] = &spec->entry_points[i];\n\n    qsort( all_names, j, sizeof(all_names[0]), name_compare );\n\n    for (i = 0; i < j - 1; i++)\n    {\n        const char *name1 = all_names[i]->name ? all_names[i]->name : all_names[i]->export_name;\n        const char *name2 = all_names[i+1]->name ? all_names[i+1]->name : all_names[i+1]->export_name;\n        if (!strcmp( name1, name2 ) &&\n            !((all_names[i]->flags ^ all_names[i+1]->flags) & FLAG_EXPORT32))\n        {\n            current_line = max( all_names[i]->lineno, all_names[i+1]->lineno );\n            error( \"'%s' redefined\\n%s:%d: First defined here\\n\",\n                   name1, input_file_name,\n                   min( all_names[i]->lineno, all_names[i+1]->lineno ) );\n        }\n    }\n    free( all_names );\n\n    if (spec->nb_names)\n    {\n        spec->names = xmalloc( spec->nb_names * sizeof(spec->names[0]) );\n        for (i = j = 0; i < spec->nb_entry_points; i++)\n            if (spec->entry_points[i].name) spec->names[j++] = &spec->entry_points[i];\n\n        /* sort the list of names */\n        qsort( spec->names, spec->nb_names, sizeof(spec->names[0]), name_compare );\n    }\n}\n\n/*******************************************************************\n *         assign_ordinals\n *\n * Build the ordinal array.\n */\nstatic void assign_ordinals( DLLSPEC *spec )\n{\n    int i, count, ordinal;\n\n    /* start assigning from base, or from 1 if no ordinal defined yet */\n\n    spec->base = MAX_ORDINALS;\n    spec->limit = 0;\n    for (i = 0; i < spec->nb_entry_points; i++)\n    {\n        ordinal = spec->entry_points[i].ordinal;\n        if (ordinal == -1) continue;\n        if (ordinal > spec->limit) spec->limit = ordinal;\n        if (ordinal < spec->base) spec->base = ordinal;\n    }\n    if (spec->base == MAX_ORDINALS) spec->base = 1;\n    if (spec->limit < spec->base) spec->limit = spec->base;\n\n    count = max( spec->limit + 1, spec->base + spec->nb_entry_points );\n    spec->ordinals = xmalloc( count * sizeof(spec->ordinals[0]) );\n    memset( spec->ordinals, 0, count * sizeof(spec->ordinals[0]) );\n\n    /* fill in all explicitly specified ordinals */\n    for (i = 0; i < spec->nb_entry_points; i++)\n    {\n        ordinal = spec->entry_points[i].ordinal;\n        if (ordinal == -1) continue;\n        if (spec->ordinals[ordinal])\n        {\n            current_line = max( spec->entry_points[i].lineno, spec->ordinals[ordinal]->lineno );\n            error( \"ordinal %d redefined\\n%s:%d: First defined here\\n\",\n                   ordinal, input_file_name,\n                   min( spec->entry_points[i].lineno, spec->ordinals[ordinal]->lineno ) );\n        }\n        else spec->ordinals[ordinal] = &spec->entry_points[i];\n    }\n\n    /* now assign ordinals to the rest */\n    for (i = 0, ordinal = spec->base; i < spec->nb_entry_points; i++)\n    {\n        if (spec->entry_points[i].ordinal != -1) continue;\n        while (spec->ordinals[ordinal]) ordinal++;\n        if (ordinal >= MAX_ORDINALS)\n        {\n            current_line = spec->entry_points[i].lineno;\n            fatal_error( \"Too many functions defined (max %d)\\n\", MAX_ORDINALS );\n        }\n        spec->entry_points[i].ordinal = ordinal;\n        spec->ordinals[ordinal] = &spec->entry_points[i];\n    }\n    if (ordinal > spec->limit) spec->limit = ordinal;\n}\n\n\n/*******************************************************************\n *         add_16bit_exports\n *\n * Add the necessary exports to the 32-bit counterpart of a 16-bit module.\n */\nvoid add_16bit_exports( DLLSPEC *spec32, DLLSPEC *spec16 )\n{\n    int i;\n    ORDDEF *odp;\n\n    spec32->file_name = xstrdup( spec16->file_name );\n    if (spec16->characteristics & IMAGE_FILE_DLL)\n    {\n        spec32->characteristics = IMAGE_FILE_DLL;\n        spec32->init_func = xstrdup( \"__wine_spec_dll_entry\" );\n    }\n\n    /* add an export for the NE module */\n\n    odp = add_entry_point( spec32 );\n    odp->type = TYPE_EXTERN;\n    odp->flags = FLAG_PRIVATE;\n    odp->name = xstrdup( \"__wine_spec_dos_header\" );\n    odp->lineno = 0;\n    odp->ordinal = 1;\n    odp->link_name = xstrdup( \".L__wine_spec_dos_header\" );\n\n    if (spec16->main_module)\n    {\n        odp = add_entry_point( spec32 );\n        odp->type = TYPE_EXTERN;\n        odp->flags = FLAG_PRIVATE;\n        odp->name = xstrdup( \"__wine_spec_main_module\" );\n        odp->lineno = 0;\n        odp->ordinal = 2;\n        odp->link_name = xstrdup( \".L__wine_spec_main_module\" );\n    }\n\n    /* add the explicit win32 exports */\n\n    for (i = 1; i <= spec16->limit; i++)\n    {\n        ORDDEF *odp16 = spec16->ordinals[i];\n\n        if (!odp16 || !odp16->name) continue;\n        if (!(odp16->flags & FLAG_EXPORT32)) continue;\n\n        odp = add_entry_point( spec32 );\n        odp->flags = odp16->flags & ~FLAG_EXPORT32;\n        odp->type = odp16->type;\n        odp->name = xstrdup( odp16->name );\n        odp->lineno = odp16->lineno;\n        odp->ordinal = -1;\n        odp->link_name = xstrdup( odp16->link_name );\n        odp->u.func.nb_args = odp16->u.func.nb_args;\n        if (odp->u.func.nb_args > 0) memcpy( odp->u.func.args, odp16->u.func.args,\n                                             odp->u.func.nb_args * sizeof(odp->u.func.args[0]) );\n    }\n\n    assign_names( spec32 );\n    assign_ordinals( spec32 );\n}\n\n\n/*******************************************************************\n *         parse_spec_file\n *\n * Parse a .spec file.\n */\nint parse_spec_file( FILE *file, DLLSPEC *spec )\n{\n    const char *token;\n\n    input_file = file;\n    current_line = 0;\n\n    comment_chars = \"#;\";\n    separator_chars = \"()-\";\n\n    while (get_next_line())\n    {\n        if (!(token = GetToken(1))) continue;\n        if (strcmp(token, \"@\") == 0)\n        {\n            if (!parse_spec_ordinal( -1, spec )) continue;\n        }\n        else if (IsNumberString(token))\n        {\n            if (!parse_spec_ordinal( atoi(token), spec )) continue;\n        }\n        else\n        {\n            error( \"Expected ordinal declaration, got '%s'\\n\", token );\n            continue;\n        }\n        if ((token = GetToken(1))) error( \"Syntax error near '%s'\\n\", token );\n    }\n\n    current_line = 0;  /* no longer parsing the input file */\n    assign_names( spec );\n    assign_ordinals( spec );\n    return !nb_errors;\n}\n\n\n/*******************************************************************\n *         parse_def_library\n *\n * Parse a LIBRARY declaration in a .def file.\n */\nstatic int parse_def_library( DLLSPEC *spec )\n{\n    const char *token = GetToken(1);\n\n    if (!token) return 1;\n    if (strcmp( token, \"BASE\" ))\n    {\n        free( spec->file_name );\n        spec->file_name = xstrdup( token );\n        if (!(token = GetToken(1))) return 1;\n    }\n    if (strcmp( token, \"BASE\" ))\n    {\n        error( \"Expected library name or BASE= declaration, got '%s'\\n\", token );\n        return 0;\n    }\n    if (!(token = GetToken(0))) return 0;\n    if (strcmp( token, \"=\" ))\n    {\n        error( \"Expected '=' after BASE, got '%s'\\n\", token );\n        return 0;\n    }\n    if (!(token = GetToken(0))) return 0;\n    /* FIXME: do something with base address */\n\n    return 1;\n}\n\n\n/*******************************************************************\n *         parse_def_stack_heap_size\n *\n * Parse a STACKSIZE or HEAPSIZE declaration in a .def file.\n */\nstatic int parse_def_stack_heap_size( int is_stack, DLLSPEC *spec )\n{\n    const char *token = GetToken(0);\n    char *end;\n    unsigned long size;\n\n    if (!token) return 0;\n    size = strtoul( token, &end, 0 );\n    if (*end)\n    {\n        error( \"Invalid number '%s'\\n\", token );\n        return 0;\n    }\n    if (is_stack) spec->stack_size = size / 1024;\n    else spec->heap_size = size / 1024;\n    if (!(token = GetToken(1))) return 1;\n    if (strcmp( token, \",\" ))\n    {\n        error( \"Expected ',' after size, got '%s'\\n\", token );\n        return 0;\n    }\n    if (!(token = GetToken(0))) return 0;\n    /* FIXME: do something with reserve size */\n    return 1;\n}\n\n\n/*******************************************************************\n *         parse_def_export\n *\n * Parse an export declaration in a .def file.\n */\nstatic int parse_def_export( char *name, DLLSPEC *spec )\n{\n    int i, args;\n    const char *token = GetToken(1);\n    ORDDEF *odp = add_entry_point( spec );\n\n    odp->lineno = current_line;\n    odp->ordinal = -1;\n    odp->name = name;\n    args = remove_stdcall_decoration( odp->name );\n    if (args == -1)\n    {\n        odp->type = TYPE_CDECL;\n        args = 0;\n    }\n    else\n    {\n        odp->type = TYPE_STDCALL;\n        args /= get_ptr_size();\n        if (args >= MAX_ARGUMENTS)\n        {\n            error( \"Too many arguments in stdcall function '%s'\\n\", odp->name );\n            return 0;\n        }\n        for (i = 0; i < args; i++) odp->u.func.args[i] = ARG_LONG;\n    }\n    odp->u.func.nb_args = args;\n\n    /* check for optional internal name */\n\n    if (token && !strcmp( token, \"=\" ))\n    {\n        if (!(token = GetToken(0))) goto error;\n        odp->link_name = xstrdup( token );\n        remove_stdcall_decoration( odp->link_name );\n        token = GetToken(1);\n    }\n    else\n    {\n      odp->link_name = xstrdup( name );\n    }\n\n    /* check for optional ordinal */\n\n    if (token && token[0] == '@')\n    {\n        int ordinal;\n\n        if (!IsNumberString( token+1 ))\n        {\n            error( \"Expected number after '@', got '%s'\\n\", token+1 );\n            goto error;\n        }\n        ordinal = atoi( token+1 );\n        if (!ordinal)\n        {\n            error( \"Ordinal 0 is not valid\\n\" );\n            goto error;\n        }\n        if (ordinal >= MAX_ORDINALS)\n        {\n            error( \"Ordinal number %d too large\\n\", ordinal );\n            goto error;\n        }\n        odp->ordinal = ordinal;\n        token = GetToken(1);\n    }\n\n    /* check for other optional keywords */\n\n    while (token)\n    {\n        if (!strcmp( token, \"NONAME\" ))\n        {\n            if (odp->ordinal == -1)\n            {\n                error( \"NONAME requires an ordinal\\n\" );\n                goto error;\n            }\n            odp->export_name = odp->name;\n            odp->name = NULL;\n            odp->flags |= FLAG_NONAME;\n        }\n        else if (!strcmp( token, \"PRIVATE\" ))\n        {\n            odp->flags |= FLAG_PRIVATE;\n        }\n        else if (!strcmp( token, \"DATA\" ))\n        {\n            odp->type = TYPE_EXTERN;\n        }\n        else\n        {\n            error( \"Garbage text '%s' found at end of export declaration\\n\", token );\n            goto error;\n        }\n        token = GetToken(1);\n    }\n    return 1;\n\nerror:\n    spec->nb_entry_points--;\n    free( odp->name );\n    return 0;\n}\n\n\n/*******************************************************************\n *         parse_def_file\n *\n * Parse a .def file.\n */\nint parse_def_file( FILE *file, DLLSPEC *spec )\n{\n    const char *token;\n    int in_exports = 0;\n\n    input_file = file;\n    current_line = 0;\n\n    comment_chars = \";\";\n    separator_chars = \",=\";\n\n    while (get_next_line())\n    {\n        if (!(token = GetToken(1))) continue;\n\n        if (!strcmp( token, \"LIBRARY\" ) || !strcmp( token, \"NAME\" ))\n        {\n            if (!parse_def_library( spec )) continue;\n            goto end_of_line;\n        }\n        else if (!strcmp( token, \"STACKSIZE\" ))\n        {\n            if (!parse_def_stack_heap_size( 1, spec )) continue;\n            goto end_of_line;\n        }\n        else if (!strcmp( token, \"HEAPSIZE\" ))\n        {\n            if (!parse_def_stack_heap_size( 0, spec )) continue;\n            goto end_of_line;\n        }\n        else if (!strcmp( token, \"EXPORTS\" ))\n        {\n            in_exports = 1;\n            if (!(token = GetToken(1))) continue;\n        }\n        else if (!strcmp( token, \"IMPORTS\" ))\n        {\n            in_exports = 0;\n            if (!(token = GetToken(1))) continue;\n        }\n        else if (!strcmp( token, \"SECTIONS\" ))\n        {\n            in_exports = 0;\n            if (!(token = GetToken(1))) continue;\n        }\n\n        if (!in_exports) continue;  /* ignore this line */\n        if (!parse_def_export( xstrdup(token), spec )) continue;\n\n    end_of_line:\n        if ((token = GetToken(1))) error( \"Syntax error near '%s'\\n\", token );\n    }\n\n    current_line = 0;  /* no longer parsing the input file */\n    assign_names( spec );\n    assign_ordinals( spec );\n    return !nb_errors;\n}\n"
  },
  {
    "path": "convspec/relay.c",
    "content": "/*\n * Relay calls helper routines\n *\n * Copyright 1993 Robert J. Amstadt\n * Copyright 1995 Martin von Loewis\n * Copyright 1995, 1996, 1997 Alexandre Julliard\n * Copyright 1997 Eric Youngdale\n * Copyright 1999 Ulrich Weigand\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <ctype.h>\n#include <stdarg.h>\n\n#include \"build.h\"\n\n/* offset of the stack pointer relative to %fs:(0) */\n#define STACKOFFSET (0xe10 + 0x20 * 0x4) /* FIELD_OFFSET(TEB,TlsSlots) + WOW32RESERVED_TLS_INDEX * 4*/ /* 0xc0 */ /* FIELD_OFFSET(TEB,WOW32Reserved) */\n\n/* fix this if the x86_thread_data structure is changed */\n#define GS_OFFSET  0x1d8  /* FIELD_OFFSET(TEB,SystemReserved2) + FIELD_OFFSET(struct x86_thread_data,gs) */\n\n\nstatic void function_header( const char *name )\n{\n    output( \"\\n\\t.align %d\\n\", get_alignment(4) );\n    output( \"\\t%s\\n\", func_declaration(strmake(\"_%s\", name)) );\n    output( \"%s\\n\", asm_globl(name) );\n}\n\n\n/*******************************************************************\n *         BuildCallFrom16Core\n *\n * This routine builds the core routines used in 16->32 thunks:\n * CallFrom16Word, CallFrom16Long, CallFrom16Register, and CallFrom16Thunk.\n *\n * These routines are intended to be called via a far call (with 32-bit\n * operand size) from 16-bit code.  The 16-bit code stub must push %bp,\n * the 32-bit entry point to be called, and the argument conversion\n * routine to be used (see stack layout below).\n *\n * The core routine completes the STACK16FRAME on the 16-bit stack and\n * switches to the 32-bit stack.  Then, the argument conversion routine\n * is called; it gets passed the 32-bit entry point and a pointer to the\n * 16-bit arguments (on the 16-bit stack) as parameters. (You can either\n * use conversion routines automatically generated by BuildCallFrom16,\n * or write your own for special purposes.)\n *\n * The conversion routine must call the 32-bit entry point, passing it\n * the converted arguments, and return its return value to the core.\n * After the conversion routine has returned, the core switches back\n * to the 16-bit stack, converts the return value to the DX:AX format\n * (CallFrom16Long), and returns to the 16-bit call stub.  All parameters,\n * including %bp, are popped off the stack.\n *\n * The 16-bit call stub now returns to the caller, popping the 16-bit\n * arguments if necessary (pascal calling convention).\n *\n * In the case of a 'register' function, CallFrom16Register fills a\n * CONTEXT86 structure with the values all registers had at the point\n * the first instruction of the 16-bit call stub was about to be\n * executed.  A pointer to this CONTEXT86 is passed as third parameter\n * to the argument conversion routine, which typically passes it on\n * to the called 32-bit entry point.\n *\n * CallFrom16Thunk is a special variant used by the implementation of\n * the Win95 16->32 thunk functions C16ThkSL and C16ThkSL01 and is\n * implemented as follows:\n * On entry, the EBX register is set up to contain a flat pointer to the\n * 16-bit stack such that EBX+22 points to the first argument.\n * Then, the entry point is called, while EBP is set up to point\n * to the return address (on the 32-bit stack).\n * The called function returns with CX set to the number of bytes\n * to be popped of the caller's stack.\n *\n * Stack layout upon entry to the core routine (STACK16FRAME):\n *  ...           ...\n * (sp+24) word   first 16-bit arg\n * (sp+22) word   cs\n * (sp+20) word   ip\n * (sp+18) word   bp\n * (sp+14) long   32-bit entry point (reused for Win16 mutex recursion count)\n * (sp+12) word   ip of actual entry point (necessary for relay debugging)\n * (sp+8)  long   relay (argument conversion) function entry point\n * (sp+4)  long   cs of 16-bit entry point\n * (sp)    long   ip of 16-bit entry point\n *\n * Added on the stack:\n * (sp-2)  word   saved gs\n * (sp-4)  word   saved fs\n * (sp-6)  word   saved es\n * (sp-8)  word   saved ds\n * (sp-12) long   saved ebp\n * (sp-16) long   saved ecx\n * (sp-20) long   saved edx\n * (sp-24) long   saved previous stack\n */\nstatic void BuildCallFrom16Core( int reg_func, int thunk )\n{\n    /* Function header */\n    if (thunk) function_header( \"__wine_call_from_16_thunk\" );\n    else if (reg_func) function_header( \"__wine_call_from_16_regs\" );\n    else function_header( \"__wine_call_from_16\" );\n\n    /* Create STACK16FRAME (except STACK32FRAME link) */\n    output( \"\\tpushw %%gs\\n\" );\n    output( \"\\tpushw %%fs\\n\" );\n    output( \"\\tpushw %%es\\n\" );\n    output( \"\\tpushw %%ds\\n\" );\n    output( \"\\tpushl %%ebp\\n\" );\n    output( \"\\tpushl %%ecx\\n\" );\n    output( \"\\tpushl %%edx\\n\" );\n\n    /* Save original EFlags register */\n    if (reg_func) output( \"\\tpushfl\\n\" );\n\n    if ( UsePIC )\n    {\n        output( \"\\tcall 1f\\n\" );\n        output( \"1:\\tpopl %%ecx\\n\" );\n        output( \"\\t.byte 0x2e\\n\\tmovl %s-1b(%%ecx),%%edx\\n\", asm_name(\"CallTo16_DataSelector\") );\n    }\n    else\n        output( \"\\t.byte 0x2e\\n\\tmovl %s,%%edx\\n\", asm_name(\"CallTo16_DataSelector\") );\n\n    /* Load 32-bit segment registers */\n    output( \"\\tmovw %%dx, %%ds\\n\" );\n    output( \"\\tmovw %%dx, %%es\\n\" );\n\n    if ( UsePIC )\n        output( \"\\tmovw %s-1b(%%ecx), %%fs\\n\", asm_name(\"CallTo16_TebSelector\") );\n    else\n        output( \"\\tmovw %s, %%fs\\n\", asm_name(\"CallTo16_TebSelector\") );\n\n    output( \"\\t.byte 0x64\\n\\tmov (%d),%%gs\\n\", GS_OFFSET );\n\n    /* Translate STACK16FRAME base to flat offset in %edx */\n    output( \"\\tmovw %%ss, %%dx\\n\" );\n    output( \"\\tandl $0xfff8, %%edx\\n\" );\n    output( \"\\tshrl $1, %%edx\\n\" );\n    if (UsePIC)\n    {\n        output( \"\\taddl wine_ldt_copy_ptr-1b(%%ecx),%%edx\\n\" );\n        output( \"\\tmovl (%%edx), %%edx\\n\" );\n    }\n    else\n    {\n        output( \"\\tmovl %s, %%ecx\\n\", asm_name(\"_imp__wine_ldt_copy\") );\n        output( \"\\tmovl 0(%%ecx,%%edx), %%edx\\n\" );\n    }\n    output( \"\\tmovzwl %%sp, %%ebp\\n\" );\n    output( \"\\tleal %d(%%ebp,%%edx), %%edx\\n\", reg_func ? 0 : -4 );\n\n    /* Get saved flags into %ecx */\n    if (reg_func) output( \"\\tpopl %%ecx\\n\" );\n\n    /* Get the 32-bit stack pointer from the TEB and complete STACK16FRAME */\n    output( \"\\t.byte 0x64\\n\\tmovl (%d), %%ebp\\n\", STACKOFFSET );\n    output( \"\\tpushl %%ebp\\n\" );\n\n    /* Switch stacks */\n    output( \"\\t.byte 0x64\\n\\tmovw %%ss, (%d)\\n\", STACKOFFSET + 2 );\n    output( \"\\t.byte 0x64\\n\\tmovw %%sp, (%d)\\n\", STACKOFFSET );\n    output( \"\\tpushl %%ds\\n\" );\n    output( \"\\tpopl %%ss\\n\" );\n    output( \"\\tmovl %%ebp, %%esp\\n\" );\n    output( \"\\taddl $0x20,%%ebp\\n\");  /* FIELD_OFFSET(STACK32FRAME,ebp) */\n\n\n    /* At this point:\n       STACK16FRAME is completely set up\n       DS, ES, SS: flat data segment\n       FS: current TEB\n       ESP: points to last STACK32FRAME\n       EBP: points to ebp member of last STACK32FRAME\n       EDX: points to current STACK16FRAME\n       ECX: contains saved flags\n       all other registers: unchanged */\n\n    /* Special case: C16ThkSL stub */\n    if ( thunk )\n    {\n        /* Set up registers as expected and call thunk */\n        output( \"\\tleal 0x1a(%%edx),%%ebx\\n\" );  /* sizeof(STACK16FRAME)-22 */\n        output( \"\\tleal -4(%%esp), %%ebp\\n\" );\n\n        output( \"\\tcall *0x26(%%edx)\\n\");  /* FIELD_OFFSET(STACK16FRAME,entry_point) */\n\n        /* Switch stack back */\n        output( \"\\t.byte 0x64\\n\\tmovw (%d), %%ss\\n\", STACKOFFSET+2 );\n        output( \"\\t.byte 0x64\\n\\tmovzwl (%d), %%esp\\n\", STACKOFFSET );\n        output( \"\\t.byte 0x64\\n\\tpopl (%d)\\n\", STACKOFFSET );\n\n        /* Restore registers and return directly to caller */\n        output( \"\\taddl $8, %%esp\\n\" );\n        output( \"\\tpopl %%ebp\\n\" );\n        output( \"\\tpopw %%ds\\n\" );\n        output( \"\\tpopw %%es\\n\" );\n        output( \"\\tpopw %%fs\\n\" );\n        output( \"\\tpopw %%gs\\n\" );\n        output( \"\\taddl $20, %%esp\\n\" );\n\n        output( \"\\txorb %%ch, %%ch\\n\" );\n        output( \"\\tpopl %%ebx\\n\" );\n        output( \"\\taddw %%cx, %%sp\\n\" );\n        output( \"\\tpush %%ebx\\n\" );\n\n        output( \"\\t.byte 0x66\\n\" );\n        output( \"\\tlret\\n\" );\n\n        output_function_size( \"__wine_call_from_16_thunk\" );\n        return;\n    }\n\n\n    /* Build register CONTEXT */\n    if ( reg_func )\n    {\n        output( \"\\tsubl $0x2cc,%%esp\\n\" );       /* sizeof(CONTEXT86) */\n\n        output( \"\\tmovl %%ecx,0xc0(%%esp)\\n\" );  /* EFlags */\n\n        output( \"\\tmovl %%eax,0xb0(%%esp)\\n\" );  /* Eax */\n        output( \"\\tmovl %%ebx,0xa4(%%esp)\\n\" );  /* Ebx */\n        output( \"\\tmovl %%esi,0xa0(%%esp)\\n\" );  /* Esi */\n        output( \"\\tmovl %%edi,0x9c(%%esp)\\n\" );  /* Edi */\n\n        output( \"\\tmovl 0x0c(%%edx),%%eax\\n\");   /* FIELD_OFFSET(STACK16FRAME,ebp) */\n        output( \"\\tmovl %%eax,0xb4(%%esp)\\n\" );  /* Ebp */\n        output( \"\\tmovl 0x08(%%edx),%%eax\\n\");   /* FIELD_OFFSET(STACK16FRAME,ecx) */\n        output( \"\\tmovl %%eax,0xac(%%esp)\\n\" );  /* Ecx */\n        output( \"\\tmovl 0x04(%%edx),%%eax\\n\");   /* FIELD_OFFSET(STACK16FRAME,edx) */\n        output( \"\\tmovl %%eax,0xa8(%%esp)\\n\" );  /* Edx */\n\n        output( \"\\tmovzwl 0x10(%%edx),%%eax\\n\"); /* FIELD_OFFSET(STACK16FRAME,ds) */\n        output( \"\\tmovl %%eax,0x98(%%esp)\\n\" );  /* SegDs */\n        output( \"\\tmovzwl 0x12(%%edx),%%eax\\n\"); /* FIELD_OFFSET(STACK16FRAME,es) */\n        output( \"\\tmovl %%eax,0x94(%%esp)\\n\" );  /* SegEs */\n        output( \"\\tmovzwl 0x14(%%edx),%%eax\\n\"); /* FIELD_OFFSET(STACK16FRAME,fs) */\n        output( \"\\tmovl %%eax,0x90(%%esp)\\n\" );  /* SegFs */\n        output( \"\\tmovzwl 0x16(%%edx),%%eax\\n\"); /* FIELD_OFFSET(STACK16FRAME,gs) */\n        output( \"\\tmovl %%eax,0x8c(%%esp)\\n\" );  /* SegGs */\n\n        output( \"\\tmovzwl 0x2e(%%edx),%%eax\\n\"); /* FIELD_OFFSET(STACK16FRAME,cs) */\n        output( \"\\tmovl %%eax,0xbc(%%esp)\\n\" );  /* SegCs */\n        output( \"\\tmovzwl 0x2c(%%edx),%%eax\\n\"); /* FIELD_OFFSET(STACK16FRAME,ip) */\n        output( \"\\tmovl %%eax,0xb8(%%esp)\\n\" );  /* Eip */\n\n        output( \"\\t.byte 0x64\\n\\tmovzwl (%d), %%eax\\n\", STACKOFFSET+2 );\n        output( \"\\tmovl %%eax,0xc8(%%esp)\\n\" );  /* SegSs */\n        output( \"\\t.byte 0x64\\n\\tmovzwl (%d), %%eax\\n\", STACKOFFSET );\n        output( \"\\taddl $0x2c,%%eax\\n\");         /* FIELD_OFFSET(STACK16FRAME,ip) */\n        output( \"\\tmovl %%eax,0xc4(%%esp)\\n\" );  /* Esp */\n#if 0\n        output( \"\\tfsave 0x1c(%%esp)\\n\" ); /* FloatSave */\n#endif\n\n        /* Push address of CONTEXT86 structure -- popped by the relay routine */\n        output( \"\\tmovl %%esp,%%eax\\n\" );\n        output( \"\\tandl $~15,%%esp\\n\" );\n        output( \"\\tsubl $4,%%esp\\n\" );\n        output( \"\\tpushl %%eax\\n\" );\n    }\n    else\n    {\n        output( \"\\tsubl $8,%%esp\\n\" );\n        output( \"\\tandl $~15,%%esp\\n\" );\n        output( \"\\taddl $8,%%esp\\n\" );\n    }\n\n    /* Call relay routine (which will call the API entry point) */\n    output( \"\\tleal 0x30(%%edx),%%eax\\n\" ); /* sizeof(STACK16FRAME) */\n    output( \"\\tpushl %%eax\\n\" );\n    output( \"\\tpushl 0x26(%%edx)\\n\");  /* FIELD_OFFSET(STACK16FRAME,entry_point) */\n    output( \"\\tcall *0x20(%%edx)\\n\");  /* FIELD_OFFSET(STACK16FRAME,relay) */\n\n    if ( reg_func )\n    {\n        output( \"\\tleal -748(%%ebp),%%ebx\\n\" ); /* sizeof(CONTEXT) + FIELD_OFFSET(STACK32FRAME,ebp) */\n\n        /* Switch stack back */\n        output( \"\\t.byte 0x64\\n\\tmovw (%d), %%ss\\n\", STACKOFFSET+2 );\n        output( \"\\t.byte 0x64\\n\\tmovzwl (%d), %%esp\\n\", STACKOFFSET );\n        output( \"\\t.byte 0x64\\n\\tpopl (%d)\\n\", STACKOFFSET );\n\n        /* Get return address to CallFrom16 stub */\n        output( \"\\taddw $0x14,%%sp\\n\" ); /* FIELD_OFFSET(STACK16FRAME,callfrom_ip)-4 */\n        output( \"\\tpopl %%eax\\n\" );\n        output( \"\\tpopl %%edx\\n\" );\n\n        /* Restore all registers from CONTEXT */\n        output( \"\\tmovw 0xc8(%%ebx),%%ss\\n\");   /* SegSs */\n        output( \"\\tmovl 0xc4(%%ebx),%%esp\\n\");  /* Esp */\n        output( \"\\taddl $4, %%esp\\n\" );  /* room for final return address */\n\n        output( \"\\tpushw 0xbc(%%ebx)\\n\");  /* SegCs */\n        output( \"\\tpushw 0xb8(%%ebx)\\n\");  /* Eip */\n        output( \"\\tpushl %%edx\\n\" );\n        output( \"\\tpushl %%eax\\n\" );\n        output( \"\\tpushl 0xc0(%%ebx)\\n\");  /* EFlags */\n        output( \"\\tpushl 0x98(%%ebx)\\n\");  /* SegDs */\n\n        output( \"\\tpushl 0x94(%%ebx)\\n\");  /* SegEs */\n        output( \"\\tpopl %%es\\n\" );\n        output( \"\\tpushl 0x90(%%ebx)\\n\");  /* SegFs */\n        output( \"\\tpopl %%fs\\n\" );\n        output( \"\\tpushl 0x8c(%%ebx)\\n\");  /* SegGs */\n        output( \"\\tpopl %%gs\\n\" );\n\n        output( \"\\tmovl 0xb4(%%ebx),%%ebp\\n\");  /* Ebp */\n        output( \"\\tmovl 0xa0(%%ebx),%%esi\\n\");  /* Esi */\n        output( \"\\tmovl 0x9c(%%ebx),%%edi\\n\");  /* Edi */\n        output( \"\\tmovl 0xb0(%%ebx),%%eax\\n\");  /* Eax */\n        output( \"\\tmovl 0xa8(%%ebx),%%edx\\n\");  /* Edx */\n        output( \"\\tmovl 0xac(%%ebx),%%ecx\\n\");  /* Ecx */\n        output( \"\\tmovl 0xa4(%%ebx),%%ebx\\n\");  /* Ebx */\n\n        output( \"\\tpopl %%ds\\n\" );\n        output( \"\\tpopfl\\n\" );\n        output( \"\\tlret\\n\" );\n\n        output_function_size( \"__wine_call_from_16_regs\" );\n    }\n    else\n    {\n        /* Switch stack back */\n        output( \"\\t.byte 0x64\\n\\tmovw (%d), %%ss\\n\", STACKOFFSET+2 );\n        output( \"\\t.byte 0x64\\n\\tmovzwl (%d), %%esp\\n\", STACKOFFSET );\n        output( \"\\t.byte 0x64\\n\\tpopl (%d)\\n\", STACKOFFSET );\n\n        /* Restore registers */\n        output( \"\\tpopl %%edx\\n\" );\n        output( \"\\tpopl %%ecx\\n\" );\n        output( \"\\tpopl %%ebp\\n\" );\n        output( \"\\tpopw %%ds\\n\" );\n        output( \"\\tpopw %%es\\n\" );\n        output( \"\\tpopw %%fs\\n\" );\n        output( \"\\tpopw %%gs\\n\" );\n\n        /* Return to return stub which will return to caller */\n        output( \"\\tlret $12\\n\" );\n\n        output_function_size( \"__wine_call_from_16\" );\n    }\n}\n\n\n/*******************************************************************\n *         BuildCallTo16Core\n *\n * This routine builds the core routines used in 32->16 thunks:\n *\n * extern DWORD WINAPI wine_call_to_16( FARPROC16 target, DWORD cbArgs, PEXCEPTION_HANDLER handler );\n * extern void WINAPI wine_call_to_16_regs( CONTEXT86 *context, DWORD cbArgs, PEXCEPTION_HANDLER handler );\n *\n * These routines can be called directly from 32-bit code.\n *\n * All routines expect that the 16-bit stack contents (arguments) and the\n * return address (segptr to CallTo16_Ret) were already set up by the\n * caller; nb_args must contain the number of bytes to be conserved.  The\n * 16-bit SS:SP will be set accordingly.\n *\n * All other registers are either taken from the CONTEXT86 structure\n * or else set to default values.  The target routine address is either\n * given directly or taken from the CONTEXT86.\n */\nstatic void BuildCallTo16Core( int reg_func )\n{\n    const char *name = reg_func ? \"__wine_call_to_16_regs\" : \"__wine_call_to_16\";\n\n    /* Function header */\n    function_header( name );\n\n    /* Function entry sequence */\n    output_cfi( \".cfi_startproc\" );\n    output( \"\\tpushl %%ebp\\n\" );\n    output_cfi( \".cfi_adjust_cfa_offset 4\" );\n    output_cfi( \".cfi_rel_offset %%ebp,0\" );\n    output( \"\\tmovl %%esp, %%ebp\\n\" );\n    output_cfi( \".cfi_def_cfa_register %%ebp\" );\n\n    /* Save the 32-bit registers */\n    output( \"\\tpushl %%ebx\\n\" );\n    output_cfi( \".cfi_rel_offset %%ebx,-4\" );\n    output( \"\\tpushl %%esi\\n\" );\n    output_cfi( \".cfi_rel_offset %%esi,-8\" );\n    output( \"\\tpushl %%edi\\n\" );\n    output_cfi( \".cfi_rel_offset %%edi,-12\" );\n    output( \"\\t.byte 0x64\\n\\tmov %%gs,(%d)\\n\", GS_OFFSET );\n\n    /* Setup exception frame */\n    output( \"\\t.byte 0x64\\n\\tpushl (%d)\\n\", STACKOFFSET );\n    output( \"\\tpushl 16(%%ebp)\\n\" ); /* handler */\n    output( \"\\t.byte 0x64\\n\\tpushl (0)\\n\" );\n    output( \"\\t.byte 0x64\\n\\tmovl %%esp,(0)\\n\" );\n\n    /* Call the actual CallTo16 routine (simulate a lcall) */\n    output( \"\\tpushl %%cs\\n\" );\n    output( \"\\tcall .L%s\\n\", name );\n\n    /* Remove exception frame */\n    output( \"\\t.byte 0x64\\n\\tpopl (0)\\n\" );\n    output( \"\\taddl $4, %%esp\\n\" );\n    output( \"\\t.byte 0x64\\n\\tpopl (%d)\\n\", STACKOFFSET );\n\n    if ( !reg_func )\n    {\n        /* Convert return value */\n        output( \"\\tandl $0xffff,%%eax\\n\" );\n        output( \"\\tshll $16,%%edx\\n\" );\n        output( \"\\torl %%edx,%%eax\\n\" );\n    }\n    else\n    {\n        /*\n         * Modify CONTEXT86 structure to contain new values\n         *\n         * NOTE:  We restore only EAX, EBX, EDX, EDX, EBP, and ESP.\n         *        The segment registers as well as ESI and EDI should\n         *        not be modified by a well-behaved 16-bit routine in\n         *        any case.  [If necessary, we could restore them as well,\n         *        at the cost of a somewhat less efficient return path.]\n         */\n\n        output( \"\\tmovl 0x14(%%esp),%%edi\\n\" ); /* FIELD_OFFSET(STACK32FRAME,target) - FIELD_OFFSET(STACK32FRAME,edi) */\n                /* everything above edi has been popped already */\n\n        output( \"\\tmovl %%eax,0xb0(%%edi)\\n\");  /* Eax */\n        output( \"\\tmovl %%ebx,0xa4(%%edi)\\n\");  /* Ebx */\n        output( \"\\tmovl %%ecx,0xac(%%edi)\\n\");  /* Ecx */\n        output( \"\\tmovl %%edx,0xa8(%%edi)\\n\");  /* Edx */\n        output( \"\\tmovl %%ebp,0xb4(%%edi)\\n\");  /* Ebp */\n        output( \"\\tmovl %%esi,0xc4(%%edi)\\n\");  /* Esp */\n                 /* The return glue code saved %esp into %esi */\n    }\n\n    /* Restore the 32-bit registers */\n    output( \"\\tpopl %%edi\\n\" );\n    output_cfi( \".cfi_same_value %%edi\" );\n    output( \"\\tpopl %%esi\\n\" );\n    output_cfi( \".cfi_same_value %%esi\" );\n    output( \"\\tpopl %%ebx\\n\" );\n    output_cfi( \".cfi_same_value %%ebx\" );\n\n    /* Function exit sequence */\n    output( \"\\tpopl %%ebp\\n\" );\n    output_cfi( \".cfi_def_cfa %%esp,4\" );\n    output_cfi( \".cfi_same_value %%ebp\" );\n    output( \"\\tret $12\\n\" );\n    output_cfi( \".cfi_endproc\" );\n\n\n    /* Start of the actual CallTo16 routine */\n\n    output( \".L%s:\\n\", name );\n\n    /* Switch to the 16-bit stack */\n    output( \"\\tmovl %%esp,%%edx\\n\" );\n    output( \"\\t.byte 0x64\\n\\tmovw (%d),%%ss\\n\", STACKOFFSET + 2);\n    output( \"\\t.byte 0x64\\n\\tmovw (%d),%%sp\\n\", STACKOFFSET );\n    output( \"\\t.byte 0x64\\n\\tmovl %%edx,(%d)\\n\", STACKOFFSET );\n\n    /* Make %bp point to the previous stackframe (built by CallFrom16) */\n    output( \"\\tmovzwl %%sp,%%ebp\\n\" );\n    output( \"\\tleal 0x2a(%%ebp),%%ebp\\n\");  /* FIELD_OFFSET(STACK16FRAME,bp) */\n\n    /* Add the specified offset to the new sp */\n    output( \"\\tsubw 0x2c(%%edx), %%sp\\n\");  /* FIELD_OFFSET(STACK32FRAME,nb_args) */\n\n    if (reg_func)\n    {\n        /* Push the called routine address */\n        output( \"\\tmovl 0x28(%%edx),%%edx\\n\");  /* FIELD_OFFSET(STACK32FRAME,target) */\n        output( \"\\tpushw 0xbc(%%edx)\\n\");  /* SegCs */\n        output( \"\\tpushw 0xb8(%%edx)\\n\");  /* Eip */\n\n        /* Get the registers */\n        output( \"\\tpushw 0x98(%%edx)\\n\");  /* SegDs */\n        output( \"\\tpushl 0x94(%%edx)\\n\");  /* SegEs */\n        output( \"\\tpopl %%es\\n\" );\n        output( \"\\tpushl 0x90(%%edx)\\n\");  /* SegFs */\n        output( \"\\tpopl %%fs\\n\" );\n        output( \"\\tpushl 0x8c(%%edx)\\n\");  /* SegGs */\n        output( \"\\tpopl %%gs\\n\" );\n        output( \"\\tmovl 0xb4(%%edx),%%ebp\\n\");  /* Ebp */\n        output( \"\\tmovl 0xa0(%%edx),%%esi\\n\");  /* Esi */\n        output( \"\\tmovl 0x9c(%%edx),%%edi\\n\");  /* Edi */\n        output( \"\\tmovl 0xb0(%%edx),%%eax\\n\");  /* Eax */\n        output( \"\\tmovl 0xa4(%%edx),%%ebx\\n\");  /* Ebx */\n        output( \"\\tmovl 0xac(%%edx),%%ecx\\n\");  /* Ecx */\n        output( \"\\tmovl 0xa8(%%edx),%%edx\\n\");  /* Edx */\n\n        /* Get the 16-bit ds */\n        output( \"\\tpopw %%ds\\n\" );\n    }\n    else  /* not a register function */\n    {\n        /* Push the called routine address */\n        output( \"\\tpushl 0x28(%%edx)\\n\"); /* FIELD_OFFSET(STACK32FRAME,target) */\n\n        /* Set %fs and %gs to the value saved by the last CallFrom16 */\n        output( \"\\tpushw -22(%%ebp)\\n\" ); /* FIELD_OFFSET(STACK16FRAME,fs)-FIELD_OFFSET(STACK16FRAME,bp) */\n        output( \"\\tpopw %%fs\\n\" );\n        output( \"\\tpushw -20(%%ebp)\\n\" ); /* FIELD_OFFSET(STACK16FRAME,gs)-FIELD_OFFSET(STACK16FRAME,bp) */\n        output( \"\\tpopw %%gs\\n\" );\n\n        /* Set %ds and %es (and %ax just in case) equal to %ss */\n        output( \"\\tmovw %%ss,%%ax\\n\" );\n        output( \"\\tmovw %%ax,%%ds\\n\" );\n        output( \"\\tmovw %%ax,%%es\\n\" );\n    }\n\n    /* Jump to the called routine */\n    output( \"\\t.byte 0x66\\n\" );\n    output( \"\\tlret\\n\" );\n\n    /* Function footer */\n    output_function_size( name );\n}\n\n\n/*******************************************************************\n *         BuildRet16Func\n *\n * Build the return code for 16-bit callbacks\n */\nstatic void BuildRet16Func(void)\n{\n    function_header( \"__wine_call_to_16_ret\" );\n\n    /* Save %esp into %esi */\n    output( \"\\tmovl %%esp,%%esi\\n\" );\n\n    /* Restore 32-bit segment registers */\n\n    output( \"\\t.byte 0x2e\\n\\tmovl %s\", asm_name(\"CallTo16_DataSelector\") );\n    output( \"-%s,%%edi\\n\", asm_name(\"__wine_call16_start\") );\n    output( \"\\tmovw %%di,%%ds\\n\" );\n    output( \"\\tmovw %%di,%%es\\n\" );\n\n    output( \"\\t.byte 0x2e\\n\\tmov %s\", asm_name(\"CallTo16_TebSelector\") );\n    output( \"-%s,%%fs\\n\", asm_name(\"__wine_call16_start\") );\n\n    output( \"\\t.byte 0x64\\n\\tmov (%d),%%gs\\n\", GS_OFFSET );\n\n    /* Restore the 32-bit stack */\n\n    output( \"\\tmovw %%di,%%ss\\n\" );\n    output( \"\\t.byte 0x64\\n\\tmovl (%d),%%esp\\n\", STACKOFFSET );\n\n    /* Return to caller */\n\n    output( \"\\tlret\\n\" );\n    output_function_size( \"__wine_call_to_16_ret\" );\n}\n\n\n/*******************************************************************\n *         BuildCallTo32CBClient\n *\n * Call a CBClient relay stub from 32-bit code (KERNEL.620).\n *\n * Since the relay stub is itself 32-bit, this should not be a problem;\n * unfortunately, the relay stubs are expected to switch back to a\n * 16-bit stack (and 16-bit code) after completion :-(\n *\n * This would conflict with our 16- vs. 32-bit stack handling, so\n * we simply switch *back* to our 32-bit stack before returning to\n * the caller ...\n *\n * The CBClient relay stub expects to be called with the following\n * 16-bit stack layout, and with ebp and ebx pointing into the 16-bit\n * stack at the designated places:\n *\n *    ...\n *  (ebp+14) original arguments to the callback routine\n *  (ebp+10) far return address to original caller\n *  (ebp+6)  Thunklet target address\n *  (ebp+2)  Thunklet relay ID code\n *  (ebp)    BP (saved by CBClientGlueSL)\n *  (ebp-2)  SI (saved by CBClientGlueSL)\n *  (ebp-4)  DI (saved by CBClientGlueSL)\n *  (ebp-6)  DS (saved by CBClientGlueSL)\n *\n *   ...     buffer space used by the 16-bit side glue for temp copies\n *\n *  (ebx+4)  far return address to 16-bit side glue code\n *  (ebx)    saved 16-bit ss:sp (pointing to ebx+4)\n *\n * The 32-bit side glue code accesses both the original arguments (via ebp)\n * and the temporary copies prepared by the 16-bit side glue (via ebx).\n * After completion, the stub will load ss:sp from the buffer at ebx\n * and perform a far return to 16-bit code.\n *\n * To trick the relay stub into returning to us, we replace the 16-bit\n * return address to the glue code by a cs:ip pair pointing to our\n * return entry point (the original return address is saved first).\n * Our return stub thus called will then reload the 32-bit ss:esp and\n * return to 32-bit code (by using and ss:esp value that we have also\n * pushed onto the 16-bit stack before and a cs:eip values found at\n * that position on the 32-bit stack).  The ss:esp to be restored is\n * found relative to the 16-bit stack pointer at:\n *\n *  (ebx-4)   ss  (flat)\n *  (ebx-8)   sp  (32-bit stack pointer)\n *\n * The second variant of this routine, CALL32_CBClientEx, which is used\n * to implement KERNEL.621, has to cope with yet another problem: Here,\n * the 32-bit side directly returns to the caller of the CBClient thunklet,\n * restoring registers saved by CBClientGlueSL and cleaning up the stack.\n * As we have to return to our 32-bit code first, we have to adapt the\n * layout of our temporary area so as to include values for the registers\n * that are to be restored, and later (in the implementation of KERNEL.621)\n * we *really* restore them. The return stub restores DS, DI, SI, and BP\n * from the stack, skips the next 8 bytes (CBClient relay code / target),\n * and then performs a lret NN, where NN is the number of arguments to be\n * removed. Thus, we prepare our temporary area as follows:\n *\n *     (ebx+22) 16-bit cs  (this segment)\n *     (ebx+20) 16-bit ip  ('16-bit' return entry point)\n *     (ebx+16) 32-bit ss  (flat)\n *     (ebx+12) 32-bit sp  (32-bit stack pointer)\n *     (ebx+10) 16-bit bp  (points to ebx+24)\n *     (ebx+8)  16-bit si  (ignored)\n *     (ebx+6)  16-bit di  (ignored)\n *     (ebx+4)  16-bit ds  (we actually use the flat DS here)\n *     (ebx+2)  16-bit ss  (16-bit stack segment)\n *     (ebx+0)  16-bit sp  (points to ebx+4)\n *\n * Note that we ensure that DS is not changed and remains the flat segment,\n * and the 32-bit stack pointer our own return stub needs fits just\n * perfectly into the 8 bytes that are skipped by the Windows stub.\n * One problem is that we have to determine the number of removed arguments,\n * as these have to be really removed in KERNEL.621. Thus, the BP value\n * that we place in the temporary area to be restored, contains the value\n * that SP would have if no arguments were removed. By comparing the actual\n * value of SP with this value in our return stub we can compute the number\n * of removed arguments. This is then returned to KERNEL.621.\n *\n * The stack layout of this function:\n * (ebp+20)  nArgs     pointer to variable receiving nr. of args (Ex only)\n * (ebp+16)  esi       pointer to caller's esi value\n * (ebp+12)  arg       ebp value to be set for relay stub\n * (ebp+8)   func      CBClient relay stub address\n * (ebp+4)   ret addr\n * (ebp)     ebp\n */\nstatic void BuildCallTo32CBClient( int isEx )\n{\n    function_header( isEx ? \"CALL32_CBClientEx\" : \"CALL32_CBClient\" );\n\n    /* Entry code */\n\n    output_cfi( \".cfi_startproc\" );\n    output( \"\\tpushl %%ebp\\n\" );\n    output_cfi( \".cfi_adjust_cfa_offset 4\" );\n    output_cfi( \".cfi_rel_offset %%ebp,0\" );\n    output( \"\\tmovl %%esp,%%ebp\\n\" );\n    output_cfi( \".cfi_def_cfa_register %%ebp\" );\n    output( \"\\tpushl %%edi\\n\" );\n    output_cfi( \".cfi_rel_offset %%edi,-4\" );\n    output( \"\\tpushl %%esi\\n\" );\n    output_cfi( \".cfi_rel_offset %%esi,-8\" );\n    output( \"\\tpushl %%ebx\\n\" );\n    output_cfi( \".cfi_rel_offset %%ebx,-12\" );\n\n    /* Get pointer to temporary area and save the 32-bit stack pointer */\n\n    output( \"\\tmovl 16(%%ebp), %%ebx\\n\" );\n    output( \"\\tleal -8(%%esp), %%eax\\n\" );\n\n    if ( !isEx )\n        output( \"\\tmovl %%eax, -8(%%ebx)\\n\" );\n    else\n        output( \"\\tmovl %%eax, 12(%%ebx)\\n\" );\n\n    /* Set up registers and call CBClient relay stub (simulating a far call) */\n\n    output( \"\\tmovl 20(%%ebp), %%esi\\n\" );\n    output( \"\\tmovl (%%esi), %%esi\\n\" );\n\n    output( \"\\tmovl 8(%%ebp), %%eax\\n\" );\n    output( \"\\tmovl 12(%%ebp), %%ebp\\n\" );\n\n    output( \"\\tpushl %%cs\\n\" );\n    output( \"\\tcall *%%eax\\n\" );\n\n    /* Return new esi value to caller */\n\n    output( \"\\tmovl 32(%%esp), %%edi\\n\" );\n    output( \"\\tmovl %%esi, (%%edi)\\n\" );\n\n    /* Return argument size to caller */\n    if ( isEx )\n    {\n        output( \"\\tmovl 36(%%esp), %%ebx\\n\" );\n        output( \"\\tmovl %%ebp, (%%ebx)\\n\" );\n    }\n\n    /* Restore registers and return */\n\n    output( \"\\tpopl %%ebx\\n\" );\n    output_cfi( \".cfi_same_value %%ebx\" );\n    output( \"\\tpopl %%esi\\n\" );\n    output_cfi( \".cfi_same_value %%esi\" );\n    output( \"\\tpopl %%edi\\n\" );\n    output_cfi( \".cfi_same_value %%edi\" );\n    output( \"\\tpopl %%ebp\\n\" );\n    output_cfi( \".cfi_def_cfa %%esp,4\" );\n    output_cfi( \".cfi_same_value %%ebp\" );\n    output( \"\\tret\\n\" );\n    output_cfi( \".cfi_endproc\" );\n    output_function_size( isEx ? \"CALL32_CBClientEx\" : \"CALL32_CBClient\" );\n\n    /* '16-bit' return stub */\n\n    function_header( isEx ? \"CALL32_CBClientEx_Ret\" : \"CALL32_CBClient_Ret\" );\n    if ( !isEx )\n    {\n        output( \"\\tmovzwl %%sp, %%ebx\\n\" );\n        output( \"\\tlssl %%ss:-16(%%ebx), %%esp\\n\" );\n    }\n    else\n    {\n        output( \"\\tmovzwl %%bp, %%ebx\\n\" );\n        output( \"\\tsubw %%bp, %%sp\\n\" );\n        output( \"\\tmovzwl %%sp, %%ebp\\n\" );\n        output( \"\\tlssl %%ss:-12(%%ebx), %%esp\\n\" );\n    }\n    output( \"\\tlret\\n\" );\n    output_function_size( isEx ? \"CALL32_CBClientEx_Ret\" : \"CALL32_CBClient_Ret\" );\n}\n\n\n/*******************************************************************\n *         output_asm_relays16\n *\n * Build all the 16-bit relay callbacks\n */\nvoid output_asm_relays16(void)\n{\n    /* File header */\n\n    output( \"\\t.text\\n\" );\n    output( \"%s:\\n\\n\", asm_name(\"__wine_spec_thunk_text_16\") );\n\n    output( \"%s\\n\", asm_globl(\"__wine_call16_start\") );\n\n    /* Standard CallFrom16 routine */\n    BuildCallFrom16Core( 0, 0 );\n\n    /* Register CallFrom16 routine */\n    BuildCallFrom16Core( 1, 0 );\n\n    /* C16ThkSL CallFrom16 routine */\n    BuildCallFrom16Core( 0, 1 );\n\n    /* Standard CallTo16 routine */\n    BuildCallTo16Core( 0 );\n\n    /* Register CallTo16 routine */\n    BuildCallTo16Core( 1 );\n\n    /* Standard CallTo16 return stub */\n    BuildRet16Func();\n\n    /* CBClientThunkSL routine */\n    BuildCallTo32CBClient( 0 );\n\n    /* CBClientThunkSLEx routine */\n    BuildCallTo32CBClient( 1  );\n\n    output( \"%s\\n\", asm_globl(\"__wine_call16_end\") );\n    output_function_size( \"__wine_spec_thunk_text_16\" );\n\n    /* Declare the return address and data selector variables */\n    output( \"\\n\\t.data\\n\\t.align %d\\n\", get_alignment(4) );\n    output( \"%s\\n\\t.long 0\\n\", asm_globl(\"CallTo16_DataSelector\") );\n    output( \"%s\\n\\t.long 0\\n\", asm_globl(\"CallTo16_TebSelector\") );\n    output(\"%s\\n\\t.long %s\\n\", asm_globl(\"__wine_call16_start_p\"), asm_name(\"__wine_call16_start\") );\n    output(\"%s\\n\\t.long %s\\n\", asm_globl(\"__wine_call16_end_p\"), asm_name(\"__wine_call16_end\") );\n    output(\"%s\\n\\t.long %s\\n\", asm_globl(\"__wine_call_to_16_ret_p\"), asm_name(\"__wine_call_to_16_ret\") );\n}\n"
  },
  {
    "path": "convspec/res16.c",
    "content": "/*\n * Builtin dlls resource support\n *\n * Copyright 2000 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <assert.h>\n#include <ctype.h>\n#include <stdlib.h>\n#include <string.h>\n#include <stdarg.h>\n#include <stdio.h>\n#ifdef HAVE_SYS_TYPES_H\n# include <sys/types.h>\n#endif\n#include <fcntl.h>\n\n#include \"build.h\"\n\n/* Unicode string or integer id */\nstruct string_id\n{\n    char  *str;  /* ptr to string */\n    unsigned short id;   /* integer id if str is NULL */\n};\n\n/* descriptor for a resource */\nstruct resource\n{\n    struct string_id type;\n    struct string_id name;\n    const void      *data;\n    unsigned int     name_offset;\n    unsigned int     data_size;\n    unsigned int     memopt;\n};\n\n/* type level of the resource tree */\nstruct res_type\n{\n    const struct string_id  *type;         /* type name */\n    struct resource         *res;          /* first resource of this type */\n    unsigned int             name_offset;  /* name offset if string */\n    unsigned int             nb_names;     /* total number of names */\n};\n\n/* top level of the resource tree */\nstruct res_tree\n{\n    struct res_type *types;                /* types array */\n    unsigned int     nb_types;             /* total number of types */\n};\n\n\nstatic inline struct resource *add_resource( DLLSPEC *spec )\n{\n    spec->resources = xrealloc( spec->resources, (spec->nb_resources + 1) * sizeof(*spec->resources) );\n    return &spec->resources[spec->nb_resources++];\n}\n\nstatic struct res_type *add_type( struct res_tree *tree, struct resource *res )\n{\n    struct res_type *type;\n    tree->types = xrealloc( tree->types, (tree->nb_types + 1) * sizeof(*tree->types) );\n    type = &tree->types[tree->nb_types++];\n    type->type        = &res->type;\n    type->res         = res;\n    type->nb_names    = 0;\n    return type;\n}\n\n/* get a string from the current resource file */\nstatic void get_string( struct string_id *str )\n{\n    unsigned char c = get_byte();\n\n    if (c == 0xff)\n    {\n        str->str = NULL;\n        str->id = get_word();\n    }\n    else\n    {\n        str->str = (char *)input_buffer + input_buffer_pos - 1;\n        str->id = 0;\n        while (get_byte()) /* nothing */;\n    }\n}\n\n/* load the next resource from the current file */\nstatic void load_next_resource( DLLSPEC *spec )\n{\n    struct resource *res = add_resource( spec );\n\n    get_string( &res->type );\n    get_string( &res->name );\n    res->memopt    = get_word();\n    res->data_size = get_dword();\n    res->data      = input_buffer + input_buffer_pos;\n    input_buffer_pos += res->data_size;\n    if (input_buffer_pos > input_buffer_size)\n        fatal_error( \"%s is a truncated/corrupted file\\n\", input_buffer_filename );\n}\n\n/* load a Win16 .res file */\nvoid load_res16_file( const char *name, DLLSPEC *spec )\n{\n    init_input_buffer( name );\n    while (input_buffer_pos < input_buffer_size) load_next_resource( spec );\n}\n\nvoid load_res16_from_buf( const unsigned char *buf, int size, DLLSPEC *spec )\n{\n    input_buffer = buf;\n    input_buffer_size = size;\n    input_buffer_pos = 0;\n    while (input_buffer_pos < input_buffer_size) load_next_resource( spec );\n}\n\n/* compare two strings/ids */\nstatic int cmp_string( const struct string_id *str1, const struct string_id *str2 )\n{\n    if (!str1->str)\n    {\n        if (!str2->str) return str1->id - str2->id;\n        return 1;  /* an id compares larger than a string */\n    }\n    if (!str2->str) return -1;\n    return strcasecmp( str1->str, str2->str );\n}\n\n/* compare two resources for sorting the resource directory */\n/* resources are stored first by type, then by name */\nstatic int cmp_res( const void *ptr1, const void *ptr2 )\n{\n    const struct resource *res1 = ptr1;\n    const struct resource *res2 = ptr2;\n    int ret;\n\n    if ((ret = cmp_string( &res1->type, &res2->type ))) return ret;\n    return cmp_string( &res1->name, &res2->name );\n}\n\n/* build the 2-level (type,name) resource tree */\nstatic struct res_tree *build_resource_tree( DLLSPEC *spec )\n{\n    unsigned int i, j, offset;\n    struct res_tree *tree;\n    struct res_type *type = NULL;\n    struct resource *res;\n\n    qsort( spec->resources, spec->nb_resources, sizeof(*spec->resources), cmp_res );\n\n    offset = 2;  /* alignment */\n    tree = xmalloc( sizeof(*tree) );\n    tree->types = NULL;\n    tree->nb_types = 0;\n\n    for (i = 0; i < spec->nb_resources; i++)\n    {\n        if (!i || cmp_string( &spec->resources[i].type, &spec->resources[i-1].type ))  /* new type */\n        {\n            type = add_type( tree, &spec->resources[i] );\n            offset += 8;\n        }\n        type->nb_names++;\n        offset += 12;\n    }\n    offset += 2;  /* terminator */\n\n    for (i = 0, type = tree->types; i < tree->nb_types; i++, type++)\n    {\n        if (type->type->str)\n        {\n            type->name_offset = offset;\n            offset += strlen(type->type->str) + 1;\n        }\n        else type->name_offset = type->type->id | 0x8000;\n\n        for (j = 0, res = type->res; j < type->nb_names; j++, res++)\n        {\n            if (res->name.str)\n            {\n                res->name_offset = offset;\n                offset += strlen(res->name.str) + 1;\n            }\n            else res->name_offset = res->name.id | 0x8000;\n        }\n    }\n    return tree;\n}\n\n/* free the resource tree */\nstatic void free_resource_tree( struct res_tree *tree )\n{\n    free( tree->types );\n    free( tree );\n}\n\n/* output a string preceded by its length */\nstatic void output_string( const char *str )\n{\n    unsigned int i, len = strlen(str);\n    output( \"\\t.byte 0x%02x\", len );\n    for (i = 0; i < len; i++) output( \",0x%02x\", (unsigned char)str[i] );\n    output( \" /* %s */\\n\", str );\n}\n\n/* output a string preceded by its length in binary format*/\nstatic void output_bin_string( const char *str )\n{\n    put_byte( strlen(str) );\n    while (*str) put_byte( *str++ );\n}\n\n/* output the resource data */\nvoid output_res16_data( DLLSPEC *spec )\n{\n    const struct resource *res;\n    unsigned int i;\n\n    for (i = 0, res = spec->resources; i < spec->nb_resources; i++, res++)\n    {\n        output( \".L__wine_spec_resource_%u:\\n\", i );\n        dump_bytes( res->data, res->data_size );\n    }\n}\n\n/* output the resource definitions */\nvoid output_res16_directory( DLLSPEC *spec )\n{\n    unsigned int i, j;\n    struct res_tree *tree;\n    const struct res_type *type;\n    const struct resource *res;\n\n    tree = build_resource_tree( spec );\n\n    output( \"\\n.L__wine_spec_ne_rsrctab:\\n\" );\n    output( \"\\t.short 0\\n\" );  /* alignment */\n\n    /* type and name structures */\n\n    for (i = 0, type = tree->types; i < tree->nb_types; i++, type++)\n    {\n        output( \"\\t.short 0x%04x,%u,0,0\\n\", type->name_offset, type->nb_names );\n\n        for (j = 0, res = type->res; j < type->nb_names; j++, res++)\n        {\n            output( \"\\t.short .L__wine_spec_resource_%lu-.L__wine_spec_dos_header,%u\\n\",\n                    (unsigned long)(res - spec->resources), res->data_size );\n            output( \"\\t.short 0x%04x,0x%04x,0,0\\n\", res->memopt, res->name_offset );\n        }\n    }\n    output( \"\\t.short 0\\n\" );  /* terminator */\n\n    /* name strings */\n\n    for (i = 0, type = tree->types; i < tree->nb_types; i++, type++)\n    {\n        if (type->type->str) output_string( type->type->str );\n        for (j = 0, res = type->res; j < type->nb_names; j++, res++)\n            if (res->name.str) output_string( res->name.str );\n    }\n    output( \"\\t.byte 0\\n\" );  /* names terminator */\n\n    free_resource_tree( tree );\n}\n\n/* output the resource data in binary format */\nvoid output_bin_res16_data( DLLSPEC *spec )\n{\n    const struct resource *res;\n    unsigned int i;\n\n    for (i = 0, res = spec->resources; i < spec->nb_resources; i++, res++)\n        put_data( res->data, res->data_size );\n}\n\n/* output the resource definitions in binary format */\nvoid output_bin_res16_directory( DLLSPEC *spec, unsigned int data_offset )\n{\n    unsigned int i, j;\n    struct res_tree *tree;\n    const struct res_type *type;\n    const struct resource *res;\n\n    tree = build_resource_tree( spec );\n\n    put_word( 0 );  /* alignment */\n\n    /* type and name structures */\n\n    for (i = 0, type = tree->types; i < tree->nb_types; i++, type++)\n    {\n        put_word( type->name_offset );\n        put_word( type->nb_names );\n        put_word( 0 );\n        put_word( 0 );\n\n        for (j = 0, res = type->res; j < type->nb_names; j++, res++)\n        {\n            put_word( data_offset );\n            put_word( res->data_size );\n            put_word( res->memopt );\n            put_word( res->name_offset );\n            put_word( 0 );\n            put_word( 0 );\n            data_offset += res->data_size;\n        }\n    }\n    put_word( 0 );  /* terminator */\n\n    /* name strings */\n\n    for (i = 0, type = tree->types; i < tree->nb_types; i++, type++)\n    {\n        if (type->type->str) output_bin_string( type->type->str );\n        for (j = 0, res = type->res; j < type->nb_names; j++, res++)\n            if (res->name.str) output_bin_string( res->name.str );\n    }\n    put_byte( 0 );  /* names terminator */\n\n    free_resource_tree( tree );\n}\n"
  },
  {
    "path": "convspec/res32.c",
    "content": "/*\n * Builtin dlls resource support\n *\n * Copyright 2000 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <assert.h>\n#include <ctype.h>\n#include <stdlib.h>\n#include <string.h>\n#include <stdarg.h>\n#include <stdio.h>\n#ifdef HAVE_SYS_TYPES_H\n# include <sys/types.h>\n#endif\n#include <fcntl.h>\n\n#include \"build.h\"\n\ntypedef unsigned short WCHAR;\n\n/* Unicode string or integer id */\nstruct string_id\n{\n    WCHAR *str;  /* ptr to Unicode string */\n    unsigned short id;   /* integer id if str is NULL */\n};\n\n/* descriptor for a resource */\nstruct resource\n{\n    struct string_id type;\n    struct string_id name;\n    const void      *data;\n    unsigned int     data_size;\n    unsigned int     data_offset;\n    unsigned short   mem_options;\n    unsigned short   lang;\n    unsigned int     version;\n};\n\n/* name level of the resource tree */\nstruct res_name\n{\n    const struct string_id  *name;         /* name */\n    struct resource         *res;          /* resource */\n    int                      nb_languages; /* number of languages */\n    unsigned int             dir_offset;   /* offset of directory in resource dir */\n    unsigned int             name_offset;  /* offset of name in resource dir */\n};\n\n/* type level of the resource tree */\nstruct res_type\n{\n    const struct string_id  *type;         /* type name */\n    struct res_name         *names;        /* names array */\n    unsigned int             nb_names;     /* total number of names */\n    unsigned int             nb_id_names;  /* number of names that have a numeric id */\n    unsigned int             dir_offset;   /* offset of directory in resource dir */\n    unsigned int             name_offset;  /* offset of type name in resource dir */\n};\n\n/* top level of the resource tree */\nstruct res_tree\n{\n    struct res_type *types;                /* types array */\n    unsigned int     nb_types;             /* total number of types */\n};\n\n/* size of a resource directory with n entries */\n#define RESOURCE_DIR_SIZE        (4 * sizeof(unsigned int))\n#define RESOURCE_DIR_ENTRY_SIZE  (2 * sizeof(unsigned int))\n#define RESOURCE_DATA_ENTRY_SIZE (4 * sizeof(unsigned int))\n#define RESDIR_SIZE(n)  (RESOURCE_DIR_SIZE + (n) * RESOURCE_DIR_ENTRY_SIZE)\n\n\nstatic inline struct resource *add_resource( DLLSPEC *spec )\n{\n    spec->resources = xrealloc( spec->resources, (spec->nb_resources + 1) * sizeof(spec->resources[0]) );\n    return &spec->resources[spec->nb_resources++];\n}\n\nstatic inline unsigned int strlenW( const WCHAR *str )\n{\n    const WCHAR *s = str;\n    while (*s) s++;\n    return s - str;\n}\n\nstatic inline int strcmpW( const WCHAR *str1, const WCHAR *str2 )\n{\n    while (*str1 && (*str1 == *str2)) { str1++; str2++; }\n    return *str1 - *str2;\n}\n\nstatic struct res_name *add_name( struct res_type *type, struct resource *res )\n{\n    struct res_name *name;\n    type->names = xrealloc( type->names, (type->nb_names + 1) * sizeof(*type->names) );\n    name = &type->names[type->nb_names++];\n    name->name         = &res->name;\n    name->res          = res;\n    name->nb_languages = 1;\n    if (!name->name->str) type->nb_id_names++;\n    return name;\n}\n\nstatic struct res_type *add_type( struct res_tree *tree, struct resource *res )\n{\n    struct res_type *type;\n    tree->types = xrealloc( tree->types, (tree->nb_types + 1) * sizeof(*tree->types) );\n    type = &tree->types[tree->nb_types++];\n    type->type        = &res->type;\n    type->names       = NULL;\n    type->nb_names    = 0;\n    type->nb_id_names = 0;\n    return type;\n}\n\n/* get a string from the current resource file */\nstatic void get_string( struct string_id *str )\n{\n    WCHAR wc = get_word();\n\n    if (wc == 0xffff)\n    {\n        str->str = NULL;\n        str->id = get_word();\n    }\n    else\n    {\n        WCHAR *p = xmalloc( (strlenW( (const WCHAR *)(input_buffer + input_buffer_pos) - 1) + 1) * sizeof(WCHAR) );\n        str->str = p;\n        str->id  = 0;\n        if ((*p++ = wc)) while ((*p++ = get_word()));\n    }\n}\n\n/* put a string into the resource file */\nstatic void put_string( const struct string_id *str )\n{\n    if (str->str)\n    {\n        const WCHAR *p = str->str;\n        while (*p) put_word( *p++ );\n        put_word( 0 );\n    }\n    else\n    {\n        put_word( 0xffff );\n        put_word( str->id );\n    }\n}\n\nstatic void dump_res_data( const struct resource *res )\n{\n    unsigned int i = 0;\n    unsigned int size = (res->data_size + 3) & ~3;\n\n    if (!size) return;\n\n    input_buffer = res->data;\n    input_buffer_pos  = 0;\n    input_buffer_size = size;\n\n    output( \"\\t.long \" );\n    while (size > 4)\n    {\n        if ((i++ % 16) == 15) output( \"0x%08x\\n\\t.long \", get_dword() );\n        else output( \"0x%08x,\", get_dword() );\n        size -= 4;\n    }\n    output( \"0x%08x\\n\", get_dword() );\n    assert( input_buffer_pos == input_buffer_size );\n}\n\n/* check the file header */\n/* all values must be zero except header size */\nstatic int check_header(void)\n{\n    unsigned int size;\n\n    if (get_dword()) return 0;        /* data size */\n    size = get_dword();               /* header size */\n    if (size == 0x20000000) byte_swapped = 1;\n    else if (size != 0x20) return 0;\n    if (get_word() != 0xffff || get_word()) return 0;  /* type, must be id 0 */\n    if (get_word() != 0xffff || get_word()) return 0;  /* name, must be id 0 */\n    if (get_dword()) return 0;        /* data version */\n    if (get_word()) return 0;         /* mem options */\n    if (get_word()) return 0;         /* language */\n    if (get_dword()) return 0;        /* version */\n    if (get_dword()) return 0;        /* characteristics */\n    return 1;\n}\n\n/* load the next resource from the current file */\nstatic void load_next_resource( DLLSPEC *spec )\n{\n    unsigned int hdr_size;\n    struct resource *res = add_resource( spec );\n\n    res->data_size = get_dword();\n    hdr_size = get_dword();\n    if (hdr_size & 3) fatal_error( \"%s header size not aligned\\n\", input_buffer_filename );\n    if (hdr_size < 32) fatal_error( \"%s invalid header size %u\\n\", input_buffer_filename, hdr_size );\n\n    res->data = input_buffer + input_buffer_pos - 2*sizeof(unsigned int) + hdr_size;\n    if ((const unsigned char *)res->data < input_buffer ||\n        (const unsigned char *)res->data >= input_buffer + input_buffer_size)\n        fatal_error( \"%s invalid header size %u\\n\", input_buffer_filename, hdr_size );\n    get_string( &res->type );\n    get_string( &res->name );\n    if (input_buffer_pos & 2) get_word();  /* align to dword boundary */\n    get_dword();                        /* skip data version */\n    res->mem_options = get_word();\n    res->lang = get_word();\n    res->version = get_dword();\n    get_dword();                        /* skip characteristics */\n\n    input_buffer_pos = ((const unsigned char *)res->data - input_buffer) + ((res->data_size + 3) & ~3);\n    input_buffer_pos = (input_buffer_pos + 3) & ~3;\n    if (input_buffer_pos > input_buffer_size)\n        fatal_error( \"%s is a truncated file\\n\", input_buffer_filename );\n}\n\n/* load a Win32 .res file */\nint load_res32_file( const char *name, DLLSPEC *spec )\n{\n    int ret;\n\n    init_input_buffer( name );\n\n    if ((ret = check_header()))\n    {\n        while (input_buffer_pos < input_buffer_size) load_next_resource( spec );\n    }\n    return ret;\n}\n\n/* compare two unicode strings/ids */\nstatic int cmp_string( const struct string_id *str1, const struct string_id *str2 )\n{\n    if (!str1->str)\n    {\n        if (!str2->str) return str1->id - str2->id;\n        return 1;  /* an id compares larger than a string */\n    }\n    if (!str2->str) return -1;\n    return strcmpW( str1->str, str2->str );\n}\n\n/* compare two resources for sorting the resource directory */\n/* resources are stored first by type, then by name, then by language */\nstatic int cmp_res( const void *ptr1, const void *ptr2 )\n{\n    const struct resource *res1 = ptr1;\n    const struct resource *res2 = ptr2;\n    int ret;\n\n    if ((ret = cmp_string( &res1->type, &res2->type ))) return ret;\n    if ((ret = cmp_string( &res1->name, &res2->name ))) return ret;\n    if ((ret = res1->lang - res2->lang)) return ret;\n    return res1->version - res2->version;\n}\n\nstatic char *format_res_string( const struct string_id *str )\n{\n    int i, len = str->str ? strlenW(str->str) + 1 : 5;\n    char *ret = xmalloc( len );\n\n    if (!str->str) sprintf( ret, \"%04x\", str->id );\n    else for (i = 0; i < len; i++) ret[i] = str->str[i];  /* dumb W->A conversion */\n    return ret;\n}\n\n/* get rid of duplicate resources with different versions */\nstatic void remove_duplicate_resources( DLLSPEC *spec )\n{\n    unsigned int i, n;\n\n    for (i = n = 0; i < spec->nb_resources; i++, n++)\n    {\n        if (i && !cmp_string( &spec->resources[i].type, &spec->resources[i-1].type ) &&\n            !cmp_string( &spec->resources[i].name, &spec->resources[i-1].name ) &&\n            spec->resources[i].lang == spec->resources[i-1].lang)\n        {\n            if (spec->resources[i].version == spec->resources[i-1].version)\n            {\n                char *type_str = format_res_string( &spec->resources[i].type );\n                char *name_str = format_res_string( &spec->resources[i].name );\n                error( \"winebuild: duplicate resource type %s name %s language %04x version %08x\\n\",\n                       type_str, name_str, spec->resources[i].lang, spec->resources[i].version );\n            }\n            else n--;  /* replace the previous one */\n        }\n        if (n < i) spec->resources[n] = spec->resources[i];\n    }\n    spec->nb_resources = n;\n}\n\n/* build the 3-level (type,name,language) resource tree */\nstatic struct res_tree *build_resource_tree( DLLSPEC *spec, unsigned int *dir_size )\n{\n    unsigned int i, k, n, offset, data_offset;\n    struct res_tree *tree;\n    struct res_type *type = NULL;\n    struct res_name *name = NULL;\n    struct resource *res;\n\n    qsort( spec->resources, spec->nb_resources, sizeof(*spec->resources), cmp_res );\n    remove_duplicate_resources( spec );\n\n    tree = xmalloc( sizeof(*tree) );\n    tree->types = NULL;\n    tree->nb_types = 0;\n\n    for (i = 0; i < spec->nb_resources; i++)\n    {\n        if (!i || cmp_string( &spec->resources[i].type, &spec->resources[i-1].type ))  /* new type */\n        {\n            type = add_type( tree, &spec->resources[i] );\n            name = add_name( type, &spec->resources[i] );\n        }\n        else if (cmp_string( &spec->resources[i].name, &spec->resources[i-1].name )) /* new name */\n        {\n            name = add_name( type, &spec->resources[i] );\n        }\n        else\n        {\n            name->nb_languages++;\n        }\n    }\n\n    /* compute the offsets */\n\n    offset = RESDIR_SIZE( tree->nb_types );\n    for (i = 0, type = tree->types; i < tree->nb_types; i++, type++)\n    {\n        type->dir_offset = offset;\n        offset += RESDIR_SIZE( type->nb_names );\n        for (n = 0, name = type->names; n < type->nb_names; n++, name++)\n        {\n            name->dir_offset = offset;\n            offset += RESDIR_SIZE( name->nb_languages );\n        }\n    }\n    data_offset = offset;\n    offset += spec->nb_resources * RESOURCE_DATA_ENTRY_SIZE;\n\n    for (i = 0, type = tree->types; i < tree->nb_types; i++, type++)\n    {\n        if (type->type->str)\n        {\n            type->name_offset = offset | 0x80000000;\n            offset += (strlenW(type->type->str)+1) * sizeof(WCHAR);\n        }\n        else type->name_offset = type->type->id;\n\n        for (n = 0, name = type->names; n < type->nb_names; n++, name++)\n        {\n            if (name->name->str)\n            {\n                name->name_offset = offset | 0x80000000;\n                offset += (strlenW(name->name->str)+1) * sizeof(WCHAR);\n            }\n            else name->name_offset = name->name->id;\n            for (k = 0, res = name->res; k < name->nb_languages; k++, res++)\n            {\n                unsigned int entry_offset = (res - spec->resources) * RESOURCE_DATA_ENTRY_SIZE;\n                res->data_offset = data_offset + entry_offset;\n            }\n        }\n    }\n    if (dir_size) *dir_size = (offset + 3) & ~3;\n    return tree;\n}\n\n/* free the resource tree */\nstatic void free_resource_tree( struct res_tree *tree )\n{\n    unsigned int i;\n\n    for (i = 0; i < tree->nb_types; i++) free( tree->types[i].names );\n    free( tree->types );\n    free( tree );\n}\n\n/* output a Unicode string */\nstatic void output_string( const WCHAR *name )\n{\n    int i, len = strlenW(name);\n    output( \"\\t.short 0x%04x\", len );\n    for (i = 0; i < len; i++) output( \",0x%04x\", name[i] );\n    output( \" /* \" );\n    for (i = 0; i < len; i++) output( \"%c\", isprint((char)name[i]) ? (char)name[i] : '?' );\n    output( \" */\\n\" );\n}\n\n/* output a resource directory */\nstatic inline void output_res_dir( unsigned int nb_names, unsigned int nb_ids )\n{\n    output( \"\\t.long 0\\n\" );  /* Characteristics */\n    output( \"\\t.long 0\\n\" );  /* TimeDateStamp */\n    output( \"\\t.short 0,0\\n\" );   /* Major/MinorVersion */\n    output( \"\\t.short %u,%u\\n\",   /* NumberOfNamed/IdEntries */\n             nb_names, nb_ids );\n}\n\n/* output the resource definitions */\nvoid output_resources( DLLSPEC *spec )\n{\n    int k, nb_id_types;\n    unsigned int i, n;\n    struct res_tree *tree;\n    struct res_type *type;\n    struct res_name *name;\n    const struct resource *res;\n\n    if (!spec->nb_resources) return;\n\n    tree = build_resource_tree( spec, NULL );\n\n    /* output the resource directories */\n\n    output( \"\\n/* resources */\\n\\n\" );\n    output( \"\\t.data\\n\" );\n    output( \"\\t.align %d\\n\", get_alignment(get_ptr_size()) );\n    output( \".L__wine_spec_resources:\\n\" );\n\n    for (i = nb_id_types = 0, type = tree->types; i < tree->nb_types; i++, type++)\n        if (!type->type->str) nb_id_types++;\n\n    output_res_dir( tree->nb_types - nb_id_types, nb_id_types );\n\n    /* dump the type directory */\n\n    for (i = 0, type = tree->types; i < tree->nb_types; i++, type++)\n        output( \"\\t.long 0x%08x,0x%08x\\n\",\n                 type->name_offset, type->dir_offset | 0x80000000 );\n\n    /* dump the names and languages directories */\n\n    for (i = 0, type = tree->types; i < tree->nb_types; i++, type++)\n    {\n        output_res_dir( type->nb_names - type->nb_id_names, type->nb_id_names );\n        for (n = 0, name = type->names; n < type->nb_names; n++, name++)\n            output( \"\\t.long 0x%08x,0x%08x\\n\",\n                     name->name_offset, name->dir_offset | 0x80000000 );\n\n        for (n = 0, name = type->names; n < type->nb_names; n++, name++)\n        {\n            output_res_dir( 0, name->nb_languages );\n            for (k = 0, res = name->res; k < name->nb_languages; k++, res++)\n                output( \"\\t.long 0x%08x,0x%08x\\n\", res->lang, res->data_offset );\n        }\n    }\n\n    /* dump the resource data entries */\n\n    for (i = 0, res = spec->resources; i < spec->nb_resources; i++, res++)\n        output( \"\\t.long .L__wine_spec_res_%d-.L__wine_spec_rva_base,%u,0,0\\n\",\n                i, res->data_size );\n\n    /* dump the name strings */\n\n    for (i = 0, type = tree->types; i < tree->nb_types; i++, type++)\n    {\n        if (type->type->str) output_string( type->type->str );\n        for (n = 0, name = type->names; n < type->nb_names; n++, name++)\n            if (name->name->str) output_string( name->name->str );\n    }\n\n    /* resource data */\n\n    for (i = 0, res = spec->resources; i < spec->nb_resources; i++, res++)\n    {\n        output( \"\\n\\t.align %d\\n\", get_alignment(get_ptr_size()) );\n        output( \".L__wine_spec_res_%d:\\n\", i );\n        dump_res_data( res );\n    }\n    output( \".L__wine_spec_resources_end:\\n\" );\n    output( \"\\t.byte 0\\n\" );\n\n    free_resource_tree( tree );\n}\n\n/* output a Unicode string in binary format */\nstatic void output_bin_string( const WCHAR *name )\n{\n    int i, len = strlenW(name);\n    put_word( len );\n    for (i = 0; i < len; i++) put_word( name[i] );\n}\n\n/* output a resource directory in binary format */\nstatic inline void output_bin_res_dir( unsigned int nb_names, unsigned int nb_ids )\n{\n    put_dword( 0 );        /* Characteristics */\n    put_dword( 0 );        /* TimeDateStamp */\n    put_word( 0 );         /* MajorVersion */\n    put_word( 0 );         /* MinorVersion */\n    put_word( nb_names );  /* NumberOfNamedEntries */\n    put_word( nb_ids );    /* NumberOfIdEntries */\n}\n\n/* output the resource definitions in binary format */\nvoid output_bin_resources( DLLSPEC *spec, unsigned int start_rva )\n{\n    int k, nb_id_types;\n    unsigned int i, n, data_offset;\n    struct res_tree *tree;\n    struct res_type *type;\n    struct res_name *name;\n    const struct resource *res;\n\n    if (!spec->nb_resources) return;\n\n    tree = build_resource_tree( spec, &data_offset );\n    init_output_buffer();\n\n    /* output the resource directories */\n\n    for (i = nb_id_types = 0, type = tree->types; i < tree->nb_types; i++, type++)\n        if (!type->type->str) nb_id_types++;\n\n    output_bin_res_dir( tree->nb_types - nb_id_types, nb_id_types );\n\n    /* dump the type directory */\n\n    for (i = 0, type = tree->types; i < tree->nb_types; i++, type++)\n    {\n        put_dword( type->name_offset );\n        put_dword( type->dir_offset | 0x80000000 );\n    }\n\n    /* dump the names and languages directories */\n\n    for (i = 0, type = tree->types; i < tree->nb_types; i++, type++)\n    {\n        output_bin_res_dir( type->nb_names - type->nb_id_names, type->nb_id_names );\n        for (n = 0, name = type->names; n < type->nb_names; n++, name++)\n        {\n            put_dword( name->name_offset );\n            put_dword( name->dir_offset | 0x80000000 );\n        }\n\n        for (n = 0, name = type->names; n < type->nb_names; n++, name++)\n        {\n            output_bin_res_dir( 0, name->nb_languages );\n            for (k = 0, res = name->res; k < name->nb_languages; k++, res++)\n            {\n                put_dword( res->lang );\n                put_dword( res->data_offset );\n            }\n        }\n    }\n\n    /* dump the resource data entries */\n\n    for (i = 0, res = spec->resources; i < spec->nb_resources; i++, res++)\n    {\n        put_dword( data_offset + start_rva );\n        put_dword( res->data_size );\n        put_dword( 0 );\n        put_dword( 0 );\n        data_offset += (res->data_size + 3) & ~3;\n    }\n\n    /* dump the name strings */\n\n    for (i = 0, type = tree->types; i < tree->nb_types; i++, type++)\n    {\n        if (type->type->str) output_bin_string( type->type->str );\n        for (n = 0, name = type->names; n < type->nb_names; n++, name++)\n            if (name->name->str) output_bin_string( name->name->str );\n    }\n\n    /* resource data */\n\n    align_output( 4 );\n    for (i = 0, res = spec->resources; i < spec->nb_resources; i++, res++)\n    {\n        put_data( res->data, res->data_size );\n        align_output( 4 );\n    }\n\n    free_resource_tree( tree );\n}\n\nstatic unsigned int get_resource_header_size( const struct resource *res )\n{\n    unsigned int size  = 5 * sizeof(unsigned int) + 2 * sizeof(unsigned short);\n\n    if (!res->type.str) size += 2 * sizeof(unsigned short);\n    else size += (strlenW(res->type.str) + 1) * sizeof(WCHAR);\n\n    if (!res->name.str) size += 2 * sizeof(unsigned short);\n    else size += (strlenW(res->name.str) + 1) * sizeof(WCHAR);\n\n    return size;\n}\n\n/* output the resources into a .o file */\nvoid output_res_o_file( DLLSPEC *spec )\n{\n    unsigned int i;\n    char *res_file = NULL;\n    const char *format;\n    int fd;\n    struct strarray args;\n\n    if (!spec->nb_resources) fatal_error( \"--resources mode needs at least one resource file as input\\n\" );\n    if (!output_file_name) fatal_error( \"No output file name specified\\n\" );\n\n    qsort( spec->resources, spec->nb_resources, sizeof(*spec->resources), cmp_res );\n    remove_duplicate_resources( spec );\n\n    byte_swapped = 0;\n    init_output_buffer();\n\n    put_dword( 0 );      /* ResSize */\n    put_dword( 32 );     /* HeaderSize */\n    put_word( 0xffff );  /* ResType */\n    put_word( 0x0000 );\n    put_word( 0xffff );  /* ResName */\n    put_word( 0x0000 );\n    put_dword( 0 );      /* DataVersion */\n    put_word( 0 );       /* Memory options */\n    put_word( 0 );       /* Language */\n    put_dword( 0 );      /* Version */\n    put_dword( 0 );      /* Characteristics */\n\n    for (i = 0; i < spec->nb_resources; i++)\n    {\n        unsigned int header_size = get_resource_header_size( &spec->resources[i] );\n\n        put_dword( spec->resources[i].data_size );\n        put_dword( (header_size + 3) & ~3 );\n        put_string( &spec->resources[i].type );\n        put_string( &spec->resources[i].name );\n        align_output( 4 );\n        put_dword( 0 );\n        put_word( spec->resources[i].mem_options );\n        put_word( spec->resources[i].lang );\n        put_dword( spec->resources[i].version );\n        put_dword( 0 );\n        put_data( spec->resources[i].data, spec->resources[i].data_size );\n        align_output( 4 );\n    }\n\n    /* if the output file name is a .res too, don't run the results through windres */\n    if (strendswith( output_file_name, \".res\"))\n    {\n        flush_output_buffer();\n        return;\n    }\n\n    res_file = get_temp_file_name( output_file_name, \".res\" );\n    if ((fd = open( res_file, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0600 )) == -1)\n        fatal_error( \"Cannot create %s\\n\", res_file );\n    if (write( fd, output_buffer, output_buffer_pos ) != output_buffer_pos)\n        fatal_error( \"Error writing to %s\\n\", res_file );\n    close( fd );\n    free( output_buffer );\n\n    args = find_tool( \"windres\", NULL );\n    switch (target_cpu)\n    {\n        case CPU_x86:\n            format = \"pe-i386\";\n            break;\n        case CPU_x86_64:\n            format = \"pe-x86-64\";\n            break;\n        default:\n            format = NULL;\n            break;\n    }\n    strarray_add( &args, \"-i\", res_file, \"-o\", output_file_name, NULL );\n    if (format)\n        strarray_add( &args, \"-F\", format, NULL );\n    spawn( args );\n\n    output_file_name = NULL;  /* so we don't try to assemble it */\n}\n"
  },
  {
    "path": "convspec/spec16.c",
    "content": "/*\n * 16-bit spec files\n *\n * Copyright 1993 Robert J. Amstadt\n * Copyright 1995 Martin von Loewis\n * Copyright 1995, 1996, 1997 Alexandre Julliard\n * Copyright 1997 Eric Youngdale\n * Copyright 1999 Ulrich Weigand\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <assert.h>\n#include <ctype.h>\n\n#include \"build.h\"\n\n#define NE_FFLAGS_SINGLEDATA 0x0001\n#define NE_FFLAGS_LIBMODULE  0x8000\n\n/* argument type flags for relay debugging */\nenum arg_types\n{\n    ARG16_NONE = 0, /* indicates end of arg list */\n    ARG16_WORD,     /* unsigned word */\n    ARG16_SWORD,    /* signed word */\n    ARG16_LONG,     /* long or segmented pointer */\n    ARG16_PTR,      /* linear pointer */\n    ARG16_STR,      /* linear pointer to null-terminated string */\n    ARG16_SEGSTR,   /* segmented pointer to null-terminated string */\n    ARG16_VARARG    /* start of varargs */\n};\n\n/* sequences of nops to fill a certain number of words */\nstatic const char * const nop_sequence[5] =\n{\n    \".byte 0x89,0xf6\",  /* mov %esi,%esi */\n    \".byte 0x8d,0x74,0x26,0x00\",  /* lea 0x00(%esi),%esi */\n    \".byte 0x8d,0xb6,0x00,0x00,0x00,0x00\",  /* lea 0x00000000(%esi),%esi */\n    \".byte 0x8d,0x74,0x26,0x00,0x8d,0x74,0x26,0x00\", /* lea 0x00(%esi),%esi; lea 0x00(%esi),%esi */\n    \".byte 0x8d,0x74,0x26,0x00,0x8d,0xb6,0x00,0x00,0x00,0x00\" /* lea 0x00(%esi),%esi; lea 0x00000000(%esi),%esi */\n};\n\nstatic inline int is_function( const ORDDEF *odp )\n{\n    if (odp->flags & FLAG_EXPORT32) return 0;\n    return (odp->type == TYPE_CDECL ||\n            odp->type == TYPE_PASCAL ||\n            odp->type == TYPE_VARARGS ||\n            odp->type == TYPE_STUB);\n}\n\nstatic const char *get_args_str( const ORDDEF *odp )\n{\n    static char buffer[MAX_ARGUMENTS*2+1];\n    int i;\n\n    buffer[0] = 0;\n    for (i = 0; i < odp->u.func.nb_args; i++)\n    {\n        switch (odp->u.func.args[i])\n        {\n        case ARG_WORD:   strcat( buffer, \"w\" ); break;\n        case ARG_SWORD:  strcat( buffer, \"s\" ); break;\n        case ARG_SEGSTR: strcat( buffer, \"T\" ); break;\n        case ARG_STR:    strcat( buffer, \"t\" ); break;\n        case ARG_LONG:\n        case ARG_FLOAT:\n        case ARG_SEGPTR: strcat( buffer, \"l\" ); break;\n        case ARG_PTR:\n        case ARG_WSTR:\n        case ARG_INT128: strcat( buffer, \"p\" ); break;\n        case ARG_INT64:\n        case ARG_DOUBLE: strcat( buffer, \"ll\" ); break;\n        }\n    }\n    return buffer;\n}\n\n/*******************************************************************\n *         output_entries\n *\n * Output entries for individual symbols in the entry table.\n */\nstatic void output_entries( DLLSPEC *spec, int first, int count )\n{\n    int i;\n\n    for (i = 0; i < count; i++)\n    {\n        ORDDEF *odp = spec->ordinals[first + i];\n        output( \"\\t.byte 0x03\\n\" );  /* flags: exported & public data */\n        switch (odp->type)\n        {\n        case TYPE_CDECL:\n        case TYPE_PASCAL:\n        case TYPE_VARARGS:\n        case TYPE_STUB:\n            output( \"\\t.short .L__wine_%s_%u-.L__wine_spec_code_segment\\n\", spec->c_name, first + i );\n            break;\n        case TYPE_VARIABLE:\n            output( \"\\t.short .L__wine_%s_%u-.L__wine_spec_data_segment\\n\", spec->c_name, first + i );\n            break;\n        case TYPE_ABS:\n            output( \"\\t.short 0x%04x  /* %s */\\n\",\n                     odp->u.abs.value, odp->name );\n            break;\n        default:\n            assert(0);\n        }\n    }\n}\n\n\n/*******************************************************************\n *         output_entry_table\n */\nstatic void output_entry_table( DLLSPEC *spec )\n{\n    int i, prev = 0, prev_sel = -1, bundle_count = 0;\n\n    for (i = 1; i <= spec->limit; i++)\n    {\n        int selector = 0;\n        ORDDEF *odp = spec->ordinals[i];\n        if (!odp) continue;\n        if (odp->flags & FLAG_EXPORT32) continue;\n\n        switch (odp->type)\n        {\n        case TYPE_CDECL:\n        case TYPE_PASCAL:\n        case TYPE_VARARGS:\n        case TYPE_STUB:\n            selector = 1;  /* Code selector */\n            break;\n        case TYPE_VARIABLE:\n            selector = 2;  /* Data selector */\n            break;\n        case TYPE_ABS:\n            selector = 0xfe;  /* Constant selector */\n            break;\n        default:\n            continue;\n        }\n\n        if (prev + 1 != i || prev_sel != selector || bundle_count == 255)\n        {\n            /* need to start a new bundle */\n\n            /* flush previous bundle */\n            if (bundle_count)\n            {\n                output( \"\\t/* %s.%d - %s.%d */\\n\",\n                         spec->dll_name, prev - bundle_count + 1, spec->dll_name, prev );\n                output( \"\\t.byte 0x%02x,0x%02x\\n\", bundle_count, prev_sel );\n                output_entries( spec, prev - bundle_count + 1, bundle_count );\n            }\n\n            if (prev + 1 != i)\n            {\n                int skip = i - (prev + 1);\n                while (skip > 255)\n                {\n                    output( \"\\t.byte 0xff,0x00\\n\" );\n                    skip -= 255;\n                }\n                output( \"\\t.byte 0x%02x,0x00\\n\", skip );\n            }\n\n            bundle_count = 0;\n            prev_sel = selector;\n        }\n        bundle_count++;\n        prev = i;\n    }\n\n    /* flush last bundle */\n    if (bundle_count)\n    {\n        output( \"\\t.byte 0x%02x,0x%02x\\n\", bundle_count, prev_sel );\n        output_entries( spec, prev - bundle_count + 1, bundle_count );\n    }\n    output( \"\\t.byte 0x00\\n\" );\n}\n\n\n/*******************************************************************\n *         output_resident_name\n */\nstatic void output_resident_name( const char *string, int ordinal )\n{\n    unsigned int i, len = strlen(string);\n\n    output( \"\\t.byte 0x%02x\", len );\n    for (i = 0; i < len; i++) output( \",0x%02x\", (unsigned char)toupper(string[i]) );\n    output( \" /* %s */\\n\", string );\n    output( \"\\t.short %u\\n\", ordinal );\n}\n\n\n/*******************************************************************\n *         get_callfrom16_name\n */\nstatic const char *get_callfrom16_name( const ORDDEF *odp )\n{\n    static char *buffer;\n\n    free( buffer );\n    buffer = strmake( \"%s_%s_%s_%d\",\n                      (odp->type == TYPE_PASCAL) ? \"p\" :\n                      (odp->type == TYPE_VARARGS) ? \"v\" : \"c\",\n                      (odp->flags & FLAG_REGISTER) ? \"regs\" :\n                      (odp->flags & FLAG_RET16) ? \"word\" : \"long\",\n                      get_args_str(odp),\n                      odp->ordinal );\n    return buffer;\n}\n\n\n/*******************************************************************\n *         get_relay_name\n */\nstatic const char *get_relay_name( const ORDDEF *odp )\n{\n    static char buffer[80];\n    char *p;\n\n    switch(odp->type)\n    {\n    case TYPE_PASCAL:\n        strcpy( buffer, \"p_\" );\n        break;\n    case TYPE_VARARGS:\n        strcpy( buffer, \"v_\" );\n        break;\n    case TYPE_CDECL:\n    case TYPE_STUB:\n        strcpy( buffer, \"c_\" );\n        break;\n    default:\n        assert(0);\n    }\n    strcat( buffer, get_args_str(odp) );\n    for (p = buffer + 2; *p; p++)\n    {\n        /* map string types to the corresponding plain pointer type */\n        if (*p == 't') *p = 'p';\n        else if (*p == 'T') *p = 'l';\n    }\n    if (odp->flags & FLAG_REGISTER) strcat( buffer, \"_regs\" );\n    snprintf(buffer + strlen(buffer), sizeof(buffer) - strlen(buffer), \"_%d\", odp->ordinal);\n    return buffer;\n}\n\n\n/*******************************************************************\n *         get_function_argsize\n */\nstatic int get_function_argsize( const ORDDEF *odp )\n{\n    int i, argsize = 0;\n\n    for (i = 0; i < odp->u.func.nb_args; i++)\n    {\n        switch (odp->u.func.args[i])\n        {\n        case ARG_WORD:\n        case ARG_SWORD:\n            argsize += 2;\n            break;\n        case ARG_SEGPTR:\n        case ARG_SEGSTR:\n        case ARG_LONG:\n        case ARG_PTR:\n        case ARG_STR:\n        case ARG_WSTR:\n        case ARG_FLOAT:\n        case ARG_INT128:\n            argsize += 4;\n            break;\n        case ARG_INT64:\n        case ARG_DOUBLE:\n            argsize += 8;\n            break;\n        }\n    }\n    return argsize;\n}\n\n\n/*******************************************************************\n *         output_call16_function\n *\n * Build a 16-bit-to-Wine callback glue function.\n *\n * The generated routines are intended to be used as argument conversion\n * routines to be called by the CallFrom16... core. Thus, the prototypes of\n * the generated routines are (see also CallFrom16):\n *\n *  extern WORD WINAPI __wine_spec_call16_C_xxx( FARPROC func, LPBYTE args );\n *  extern LONG WINAPI __wine_spec_call16_C_xxx( FARPROC func, LPBYTE args );\n *  extern void WINAPI __wine_spec_call16_C_xxx_regs( FARPROC func, LPBYTE args, CONTEXT86 *context );\n *\n * where 'C' is the calling convention ('p' for pascal or 'c' for cdecl),\n * and each 'x' is an argument  ('w'=word, 's'=signed word, 'l'=long,\n * 'p'=linear pointer, 't'=linear pointer to null-terminated string,\n * 'T'=segmented pointer to null-terminated string).\n *\n * The generated routines fetch the arguments from the 16-bit stack (pointed\n * to by 'args'); the offsets of the single argument values are computed\n * according to the calling convention and the argument types.  Then, the\n * 32-bit entry point is called with these arguments.\n *\n * For register functions, the arguments (if present) are converted just\n * the same as for normal functions, but in addition the CONTEXT86 pointer\n * filled with the current register values is passed to the 32-bit routine.\n */\nstatic void output_call16_function( ORDDEF *odp )\n{\n    char *name;\n    int i, pos, stack_words;\n    int argsize = get_function_argsize( odp );\n    int needs_ldt = (strpbrk( get_args_str( odp ), \"pt\" ) != NULL);\n\n    name = strmake( \".L__wine_spec_call16_%s\", get_relay_name(odp) );\n\n    output( \"\\t.align %d\\n\", get_alignment(4) );\n    output( \"\\t%s\\n\", func_declaration(name) );\n    output( \"%s:\\n\", name );\n    output_cfi( \".cfi_startproc\" );\n    output( \"\\tpushl %%ebp\\n\" );\n    output_cfi( \".cfi_adjust_cfa_offset 4\" );\n    output_cfi( \".cfi_rel_offset %%ebp,0\" );\n    output( \"\\tmovl %%esp,%%ebp\\n\" );\n    output_cfi( \".cfi_def_cfa_register %%ebp\" );\n    stack_words = 2;\n    if (needs_ldt)\n    {\n        output( \"\\tpushl %%esi\\n\" );\n        output_cfi( \".cfi_rel_offset %%esi,-4\" );\n        stack_words++;\n        if (UsePIC)\n        {\n            output( \"\\tcalll %s\\n\", asm_name(\"__wine_spec_get_pc_thunk_eax\") );\n            output( \"1:\\tmovl wine_ldt_copy_ptr-1b(%%eax),%%esi\\n\" );\n            needs_get_pc_thunk = 1;\n        }\n        else\n            output( \"\\tmovl $%s,%%esi\\n\", asm_name(\"_imp__wine_ldt_copy\") );\n    }\n\n    /* preserve 16-byte stack alignment */\n    stack_words += odp->u.func.nb_args;\n    for (i = 0; i < odp->u.func.nb_args; i++)\n        if (odp->u.func.args[i] == ARG_DOUBLE || odp->u.func.args[i] == ARG_INT64) stack_words++;\n    if ((odp->flags & FLAG_REGISTER) || (odp->type == TYPE_VARARGS)) stack_words++;\n    if (stack_words % 4) output( \"\\tsubl $%d,%%esp\\n\", 16 - 4 * (stack_words % 4) );\n\n    if (odp->u.func.nb_args || odp->type == TYPE_VARARGS)\n        output( \"\\tmovl 12(%%ebp),%%ecx\\n\" );  /* args */\n\n    if (odp->flags & FLAG_REGISTER)\n    {\n        output( \"\\tpushl 16(%%ebp)\\n\" );  /* context */\n    }\n    else if (odp->type == TYPE_VARARGS)\n    {\n        output( \"\\tleal %d(%%ecx),%%eax\\n\", argsize );\n        output( \"\\tpushl %%eax\\n\" );  /* va_list16 */\n    }\n\n    pos = (odp->type == TYPE_PASCAL) ? 0 : argsize;\n    for (i = odp->u.func.nb_args - 1; i >= 0; i--)\n    {\n        switch (odp->u.func.args[i])\n        {\n        case ARG_WORD:\n            if (odp->type != TYPE_PASCAL) pos -= 2;\n            output( \"\\tmovzwl %d(%%ecx),%%eax\\n\", pos );\n            output( \"\\tpushl %%eax\\n\" );\n            if (odp->type == TYPE_PASCAL) pos += 2;\n            break;\n\n        case ARG_SWORD:\n            if (odp->type != TYPE_PASCAL) pos -= 2;\n            output( \"\\tmovswl %d(%%ecx),%%eax\\n\", pos );\n            output( \"\\tpushl %%eax\\n\" );\n            if (odp->type == TYPE_PASCAL) pos += 2;\n            break;\n\n        case ARG_INT64:\n        case ARG_DOUBLE:\n            if (odp->type != TYPE_PASCAL) pos -= 4;\n            output( \"\\tpushl %d(%%ecx)\\n\", pos );\n            if (odp->type == TYPE_PASCAL) pos += 4;\n            /* fall through */\n        case ARG_LONG:\n        case ARG_FLOAT:\n        case ARG_SEGPTR:\n        case ARG_SEGSTR:\n            if (odp->type != TYPE_PASCAL) pos -= 4;\n            output( \"\\tpushl %d(%%ecx)\\n\", pos );\n            if (odp->type == TYPE_PASCAL) pos += 4;\n            break;\n\n        case ARG_PTR:\n        case ARG_STR:\n        case ARG_WSTR:\n        case ARG_INT128:\n            if (odp->type != TYPE_PASCAL) pos -= 4;\n            output( \"\\tmovzwl %d(%%ecx),%%edx\\n\", pos + 2 ); /* sel */\n            output( \"\\tshr $3,%%edx\\n\" );\n            output( \"\\tmovzwl %d(%%ecx),%%eax\\n\", pos ); /* offset */\n            output( \"\\taddl (%%esi,%%edx,4),%%eax\\n\" );\n            output( \"\\tpushl %%eax\\n\" );\n            if (odp->type == TYPE_PASCAL) pos += 4;\n            break;\n        }\n    }\n\n    output( \"\\tcalll *8(%%ebp)\\n\" );\n\n    if (needs_ldt)\n    {\n        output( \"\\tmovl -4(%%ebp),%%esi\\n\" );\n        output_cfi( \".cfi_same_value %%esi\" );\n    }\n    output( \"\\tleave\\n\" );\n    output_cfi( \".cfi_def_cfa %%esp,4\" );\n    output_cfi( \".cfi_same_value %%ebp\" );\n    output( \"\\tret\\n\" );\n    output_cfi( \".cfi_endproc\" );\n    output_function_size( name );\n    free( name );\n}\n\n\n/*******************************************************************\n *         callfrom16_type_compare\n *\n * Compare two callfrom16 sequences.\n */\nstatic int callfrom16_type_compare( const void *e1, const void *e2 )\n{\n    const ORDDEF *odp1 = *(const ORDDEF * const *)e1;\n    const ORDDEF *odp2 = *(const ORDDEF * const *)e2;\n    int retval;\n    int type1 = odp1->type;\n    int type2 = odp2->type;\n    char args1[80];\n\n    if (type1 == TYPE_STUB) type1 = TYPE_CDECL;\n    if (type2 == TYPE_STUB) type2 = TYPE_CDECL;\n\n    if ((retval = type1 - type2) != 0) return retval;\n\n    type1 = odp1->flags & (FLAG_RET16|FLAG_REGISTER);\n    type2 = odp2->flags & (FLAG_RET16|FLAG_REGISTER);\n\n    if ((retval = type1 - type2) != 0) return retval;\n\n    strcpy( args1, get_args_str( odp1 ));\n    return strcmp( args1, get_args_str( odp2 ));\n}\n\n\n/*******************************************************************\n *         relay_type_compare\n *\n * Same as callfrom16_type_compare but ignores differences that don't affect the resulting relay function.\n */\nstatic int relay_type_compare( const void *e1, const void *e2 )\n{\n    const ORDDEF *odp1 = *(const ORDDEF * const *)e1;\n    const ORDDEF *odp2 = *(const ORDDEF * const *)e2;\n    char name1[80];\n\n    strcpy( name1, get_relay_name(odp1) );\n    return strcmp( name1, get_relay_name(odp2) );\n}\n\n\n/*******************************************************************\n *         sort_func_list\n *\n * Sort a list of functions, removing duplicates.\n */\nstatic int sort_func_list( ORDDEF **list, int count,\n                           int (*compare)(const void *, const void *) )\n{\n    int i, j;\n\n    if (!count) return 0;\n    qsort( list, count, sizeof(*list), compare );\n\n    for (i = j = 0; i < count; i++)\n    {\n        if (compare( &list[j], &list[i] )) list[++j] = list[i];\n    }\n    return j + 1;\n}\n\n\n/*******************************************************************\n *         output_module16\n *\n * Output code for a 16-bit module.\n */\nstatic void output_module16( DLLSPEC *spec )\n{\n    ORDDEF **typelist;\n    ORDDEF *entry_point = NULL;\n    int i, j, nb_funcs;\n\n    /* store the main entry point as ordinal 0 */\n\n    if (!spec->ordinals)\n    {\n        assert(spec->limit == 0);\n        spec->ordinals = xmalloc( sizeof(spec->ordinals[0]) );\n        spec->ordinals[0] = NULL;\n    }\n    if (spec->init_func && !(spec->characteristics & IMAGE_FILE_DLL))\n    {\n        entry_point = xmalloc( sizeof(*entry_point) );\n        entry_point->type = TYPE_PASCAL;\n        entry_point->ordinal = 0;\n        entry_point->lineno = 0;\n        entry_point->flags = FLAG_REGISTER;\n        entry_point->name = NULL;\n        entry_point->link_name = xstrdup( spec->init_func );\n        entry_point->export_name = NULL;\n        entry_point->u.func.nb_args = 0;\n        assert( !spec->ordinals[0] );\n        spec->ordinals[0] = entry_point;\n    }\n\n    /* Build sorted list of all argument types, without duplicates */\n\n    typelist = xmalloc( (spec->limit + 1) * sizeof(*typelist) );\n\n    for (i = nb_funcs = 0; i <= spec->limit; i++)\n    {\n        ORDDEF *odp = spec->ordinals[i];\n        if (!odp) continue;\n        if (is_function( odp )) typelist[nb_funcs++] = odp;\n    }\n\n    /* nb_funcs = sort_func_list( typelist, nb_funcs, callfrom16_type_compare ); */\n\n    /* Output the module structure */\n\n    output( \"\\n/* module data */\\n\\n\" );\n    output( \"\\t.data\\n\" );\n    output( \"\\t.align %d\\n\", get_alignment(4) );\n    output( \"__wine_spec_dos_header:\\n\" );\n#ifdef WINEBUILD_MSVC\n    output( \"\\t.globl __wine_spec_dos_header\\n\" );\n    output( \".L__wine_spec_dos_header:\\n\" );\n    output( \"\\t.globl ___wine_spec_dos_header\\n\" );\n    output( \".L___wine_spec_dos_header:\\n\" );\n    output( \"___wine_spec_dos_header:\\n\" );\n#else\n    output( \".globl ___wine_spec_dos_header\\n\" );\n    output( \".L__wine_spec_dos_header:\\n\" );\n    output( \"___wine_spec_dos_header:\\n\" );\n#endif\n    output( \"\\t.short 0x5a4d\\n\" );                                         /* e_magic */\n    output( \"\\t.short 0x0040\\n\" );                                         /* e_cblp */\n    output( \"\\t.short 0x0001\\n\" );                                         /* e_cp */\n    output( \"\\t.short (.L__wine_spec_ne_header-.L__wine_spec_dos_header)/16\\n\" );/* e_crlc */\n    output( \"\\t.short 0\\n\" );                                              /* e_cparhdr */\n    output( \"\\t.short 0xffff\\n\" );                                         /* e_minalloc */\n    output( \"\\t.short 0\\n\" );                                              /* e_maxalloc */\n    output( \"\\t.short 0x00b8\\n\" );                                         /* e_ss */\n    output( \"\\t.short 0\\n\" );                                              /* e_sp */\n    output( \"\\t.short 0\\n\" );                                              /* e_csum */\n    output( \"\\t.short 0\\n\" );                                              /* e_ip */\n    output( \"\\t.short 0\\n\" );                                              /* e_cs */\n    output( \"\\t.short .L__wine_spec_ne_header-.L__wine_spec_dos_header\\n\" );/* e_lfarlc */\n    output( \"\\t.short 0\\n\" );                                              /* e_ovno */\n    output( \"\\t.short 0,0,0,0\\n\" );                                        /* e_res */\n    output( \"\\t.short 0\\n\" );                                              /* e_oemid */\n    output( \"\\t.short 0\\n\" );                                              /* e_oeminfo */\n    output( \"\\t.short 0,0,0,0,0,0,0,0,0,0\\n\" );                            /* e_res2 */\n    output( \"\\t.long .L__wine_spec_ne_header-.L__wine_spec_dos_header\\n\" );/* e_lfanew */\n    output( \".L__wine_spec_ne_header:\\n\" );\n    output( \"\\t.short 0x454e\\n\" );                                         /* ne_magic */\n    output( \"\\t.byte 0\\n\" );                                               /* ne_ver */\n    output( \"\\t.byte 0\\n\" );                                               /* ne_rev */\n    output( \"\\t.short .L__wine_spec_ne_enttab-.L__wine_spec_ne_header\\n\" );/* ne_enttab */\n    output( \"\\t.short .L__wine_spec_ne_enttab_end-.L__wine_spec_ne_enttab\\n\" );/* ne_cbenttab */\n    output( \"\\t.long 0\\n\" );                                               /* ne_crc */\n    output( \"\\t.short 0x%04x\\n\", NE_FFLAGS_SINGLEDATA |                    /* ne_flags */\n             ((spec->characteristics & IMAGE_FILE_DLL) ? NE_FFLAGS_LIBMODULE : 0) );\n    output( \"\\t.short 2\\n\" );                                              /* ne_autodata */\n    output( \"\\t.short %u\\n\", spec->heap_size );                            /* ne_heap */\n    output( \"\\t.short 0\\n\" );                                              /* ne_stack */\n    if (!entry_point) output( \"\\t.long 0\\n\" );                             /* ne_csip */\n    else output( \"\\t.short .L__wine_%s_0-.L__wine_spec_code_segment,1\\n\", spec->c_name );\n    output( \"\\t.short 0,2\\n\" );                                            /* ne_sssp */\n    output( \"\\t.short 2\\n\" );                                              /* ne_cseg */\n    output( \"\\t.short 0\\n\" );                                              /* ne_cmod */\n    output( \"\\t.short 0\\n\" );                                              /* ne_cbnrestab */\n    output( \"\\t.short .L__wine_spec_ne_segtab-.L__wine_spec_ne_header\\n\" );/* ne_segtab */\n    output( \"\\t.short .L__wine_spec_ne_rsrctab-.L__wine_spec_ne_header\\n\" );   /* ne_rsrctab */\n    output( \"\\t.short .L__wine_spec_ne_restab-.L__wine_spec_ne_header\\n\" );    /* ne_restab */\n    output( \"\\t.short .L__wine_spec_ne_modtab-.L__wine_spec_ne_header\\n\" );    /* ne_modtab */\n    output( \"\\t.short .L__wine_spec_ne_imptab-.L__wine_spec_ne_header\\n\" );    /* ne_imptab */\n    output( \"\\t.long 0\\n\" );                                   /* ne_nrestab */\n    output( \"\\t.short 0\\n\" );                                  /* ne_cmovent */\n    output( \"\\t.short 0\\n\" );                                  /* ne_align */\n    output( \"\\t.short 0\\n\" );                                  /* ne_cres */\n    output( \"\\t.byte 0x02\\n\" );                                /* ne_exetyp = NE_OSFLAGS_WINDOWS */\n    output( \"\\t.byte 0x08\\n\" );                                /* ne_flagsothers = NE_AFLAGS_FASTLOAD */\n    output( \"\\t.short 0\\n\" );                                  /* ne_pretthunks */\n    output( \"\\t.short 0\\n\" );                                  /* ne_psegrefbytes */\n    output( \"\\t.short 0\\n\" );                                  /* ne_swaparea */\n    output( \"\\t.short 0\\n\" );                                  /* ne_expver */\n\n    /* segment table */\n\n    output( \"\\n.L__wine_spec_ne_segtab:\\n\" );\n\n    /* code segment entry */\n\n    output( \"\\t.short .L__wine_spec_code_segment-.L__wine_spec_dos_header\\n\" );         /* filepos */\n    output( \"\\t.short .L__wine_spec_code_segment_end-.L__wine_spec_code_segment\\n\" );   /* size */\n    output( \"\\t.short 0x0000\\n\" );                                                      /* flags  */\n    output( \"\\t.short .L__wine_spec_code_segment_end-.L__wine_spec_code_segment\\n\" );   /* minsize */\n\n    /* data segment entry */\n\n    output( \"\\t.short .L__wine_spec_data_segment-.L__wine_spec_dos_header\\n\" );         /* filepos */\n    output( \"\\t.short .L__wine_spec_data_segment_end-.L__wine_spec_data_segment\\n\" );   /* size */\n    output( \"\\t.short 0x0001\\n\" );                                                      /* flags = NE_SEGFLAGS_DATA */\n    output( \"\\t.short .L__wine_spec_data_segment_end-.L__wine_spec_data_segment\\n\" );   /* minsize */\n\n    /* resource directory */\n\n    output_res16_directory( spec );\n\n    /* resident names table */\n\n    output( \"\\n\\t.align %d\\n\", get_alignment(2) );\n    output( \".L__wine_spec_ne_restab:\\n\" );\n    output_resident_name( spec->dll_name, 0 );\n    for (i = 1; i <= spec->limit; i++)\n    {\n        ORDDEF *odp = spec->ordinals[i];\n        if (!odp || !odp->name[0]) continue;\n        if (odp->flags & FLAG_EXPORT32) continue;\n        output_resident_name( odp->name, i );\n    }\n    output( \"\\t.byte 0\\n\" );\n\n    /* imported names table */\n\n    output( \"\\n\\t.align %d\\n\", get_alignment(2) );\n    output( \".L__wine_spec_ne_modtab:\\n\" );\n    output( \".L__wine_spec_ne_imptab:\\n\" );\n    output( \"\\t.byte 0,0\\n\" );\n\n    /* entry table */\n\n    output( \"\\n.L__wine_spec_ne_enttab:\\n\" );\n    output_entry_table( spec );\n    output( \".L__wine_spec_ne_enttab_end:\\n\" );\n\n    /* code segment */\n\n    output( \"\\n\\t.align %d\\n\", get_alignment(2) );\n    output( \".code16\\n\" );\n    output( \".L__wine_spec_code_segment:\\n\" );\n\n    for ( i = 0; i < nb_funcs; i++ )\n    {\n        unsigned int arg_types[2];\n        int nop_words, pos, argsize = 0;\n\n        if ( typelist[i]->type == TYPE_PASCAL )\n            argsize = get_function_argsize( typelist[i] );\n\n        /* build the arg types bit fields */\n        arg_types[0] = arg_types[1] = 0;\n        for (j = pos = 0; j < typelist[i]->u.func.nb_args && pos < 20; j++, pos++)\n        {\n            int type = 0;\n            switch (typelist[i]->u.func.args[j])\n            {\n            case ARG_WORD:   type = ARG16_WORD; break;\n            case ARG_SWORD:  type = ARG16_SWORD; break;\n            case ARG_SEGPTR: type = ARG16_LONG; break;\n            case ARG_SEGSTR: type = ARG16_SEGSTR; break;\n            case ARG_LONG:   type = ARG16_LONG; break;\n            case ARG_PTR:    type = ARG16_PTR; break;\n            case ARG_STR:    type = ARG16_STR; break;\n            case ARG_WSTR:   type = ARG16_PTR; break;\n            case ARG_FLOAT:  type = ARG16_LONG; break;\n            case ARG_INT128: type = ARG16_PTR; break;\n            case ARG_INT64:\n            case ARG_DOUBLE:\n                type = ARG16_LONG;\n                arg_types[pos / 10] |= type << (3 * (pos % 10));\n                pos++;\n                break;\n            }\n            if (pos < 20) arg_types[pos / 10] |= type << (3 * (pos % 10));\n        }\n        if (typelist[i]->type == TYPE_VARARGS && pos < 20)\n            arg_types[pos / 10] |= ARG16_VARARG << (3 * (pos % 10));\n\n        output( \".L__wine_spec_callfrom16_%s:\\n\", get_callfrom16_name(typelist[i]) );\n        output( \"\\tpushl $.L__wine_spec_call16_%s\\n\", get_relay_name(typelist[i]) );\n        output( \"\\tlcalll $0,$0\\n\" );\n\n        if (typelist[i]->flags & FLAG_REGISTER)\n        {\n            nop_words = 5;\n        }\n        else if (typelist[i]->flags & FLAG_RET16)\n        {\n            output( \"\\torw %%ax,%%ax\\n\" );\n            nop_words = 4;\n        }\n        else\n        {\n            output( \"\\tshld $16,%%eax,%%edx\\n\" );\n            output( \"\\torl %%eax,%%eax\\n\" );\n            nop_words = 1;\n        }\n\n        if (argsize)\n        {\n            output( \"\\tlretw $%u\\n\", argsize );\n            nop_words--;\n        }\n        else output( \"\\tlretw\\n\" );\n\n        output( \"\\tnop\\n\" );  /* so that the lretw is aligned */\n        if (nop_words) output( \"\\t%s\\n\", nop_sequence[nop_words-1] );\n\n        /* the movl is here so that the code contains only valid instructions, */\n        /* it's never actually executed, we only care about the arg_types[] values */\n        output( \"\\t.short 0x86c7\\n\" );\n        output( \"\\t.long 0x%08x,0x%08x\\n\", arg_types[0], arg_types[1] );\n    }\n\n    for (i = 0; i <= spec->limit; i++)\n    {\n        ORDDEF *odp = spec->ordinals[i];\n        if (!odp || !is_function( odp )) continue;\n        output( \".L__wine_%s_%u:\\n\", spec->c_name, i );\n        output( \"\\tpushw %%bp\\n\" );\n        if (odp->flags & FLAG_STKPROLOG)\n        {\n            output( \"\\tmovw %%sp, %%bp\\n\" );\n            output( \"\\tpushw $0x1234\\n\" );\n            output( \"\\tpopw %%bp\\n\" );\n            output( \"\\tpopw %%bp\\n\" );\n            output( \"\\tpushw %%bp\\n\" );\n        }\n        output( \"\\tpushl $%s\\n\",\n            odp->type == TYPE_PASCAL ? asm_name_stdcall16(odp->link_name, odp) : (odp->type == TYPE_STUB ? get_stub_name(odp, spec) : asm_name( odp->link_name )));\n        output( \"\\tcallw .L__wine_spec_callfrom16_%s\\n\", get_callfrom16_name( odp ) );\n    }\n    output( \".L__wine_spec_code_segment_end:\\n\" );\n\n    /* data segment */\n\n    output( \"\\n.L__wine_spec_data_segment:\\n\" );\n    output( \"\\t.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\\n\" );  /* instance data */\n    for (i = 0; i <= spec->limit; i++)\n    {\n        ORDDEF *odp = spec->ordinals[i];\n        if (!odp || odp->type != TYPE_VARIABLE) continue;\n        output( \".L__wine_%s_%u:\\n\", spec->c_name, i );\n        output( \"\\t.long \" );\n        for (j = 0; j < odp->u.var.n_values-1; j++)\n            output( \"0x%08x,\", odp->u.var.values[j] );\n        output( \"0x%08x\\n\", odp->u.var.values[j] );\n    }\n    output( \".L__wine_spec_data_segment_end:\\n\" );\n\n    /* resource data */\n\n    if (spec->nb_resources)\n    {\n        output( \"\\n.L__wine_spec_resource_data:\\n\" );\n        output_res16_data( spec );\n    }\n\n    output( \"\\t.byte 0\\n\" );  /* make sure the last symbol points to something */\n\n    /* relay functions */\n\n    nb_funcs = sort_func_list( typelist, nb_funcs, relay_type_compare );\n    if (nb_funcs)\n    {\n        output( \"\\n/* relay functions */\\n\\n\" );\n        output( \"\\t.text\\n\" );\n        for ( i = 0; i < nb_funcs; i++ ) output_call16_function( typelist[i] );\n        output( \"\\t.data\\n\" );\n        output( \"wine_ldt_copy_ptr:\\n\" );\n        output( \"\\t.long %s\\n\", asm_name(\"_imp__wine_ldt_copy\") );\n    }\n    output( \".code32\\n\" );\n\n    free( typelist );\n}\n\n\n/*******************************************************************\n *         output_spec16_file\n *\n * Output the complete data for a spec 16-bit file.\n */\nvoid output_spec16_file( DLLSPEC *spec16 )\n{\n    DLLSPEC *spec32 = alloc_dll_spec();\n\n    resolve_imports( spec16 );\n    add_16bit_exports( spec32, spec16 );\n\n    needs_get_pc_thunk = 0;\n    output_standard_file_header();\n    //output_module( spec32 );\n    output_module16( spec16 );\n    output_stubs( spec16 );\n    //output_exports( spec32 );\n    //output_imports( spec16 );\n    output( \"\\n\\t%s\\n\", get_asm_string_section() );\n    output( \"%s\\n\", asm_globl(\"__wine_spec_file_name\") );\n    output( \".L__wine_spec_file_name:\\n\" );\n    output( \"\\t%s \\\"%s\\\"\\n\", get_asm_string_keyword(), spec16->file_name );\n    if (1||is_undefined( \"__wine_call_from_16\" )) output_asm_relays16();\n    if (needs_get_pc_thunk) output_get_pc_thunk();\n    if (spec16->main_module)\n    {\n        output( \"\\n\\t%s\\n\", get_asm_string_section() );\n        output( \".L__wine_spec_main_module:\\n\" );\n        output( \"\\t%s \\\"%s\\\"\\n\", get_asm_string_keyword(), spec16->main_module );\n    }\n    output_gnu_stack_note();\n    free_dll_spec( spec32 );\n    output(\"%s:/*?*/\\n\", asm_name(\"_end\"));\n    flush_output_buffer();\n}\n\n/*******************************************************************\n *         output_fake_module16\n *\n * Create a fake 16-bit binary module.\n */\nvoid output_fake_module16( DLLSPEC *spec )\n{\n    static const unsigned char code_segment[] = { 0x90, 0xc3 };\n    static const unsigned char data_segment[16] = { 0 };\n    static const char fakedll_signature[] = \"Wine placeholder DLL\";\n    const unsigned int cseg = 2;\n    const unsigned int lfanew = (0x40 + sizeof(fakedll_signature) + 15) & ~15;\n    const unsigned int segtab = lfanew + 0x40;\n\n    unsigned int i, rsrctab, restab, namelen, modtab, imptab, enttab, cbenttab, codeseg, dataseg, rsrcdata;\n\n    init_output_buffer();\n\n    rsrctab = lfanew;\n    restab = segtab + 8 * cseg;\n    if (spec->nb_resources)\n    {\n        output_bin_res16_directory( spec, 0 );\n        align_output( 2 );\n        rsrctab = restab;\n        restab += output_buffer_pos;\n        free( output_buffer );\n        init_output_buffer();\n    }\n\n    namelen  = strlen( spec->dll_name );\n    modtab   = restab + ((namelen + 3) & ~1);\n    imptab   = modtab;\n    enttab   = modtab + 2;\n    cbenttab = 1;\n    codeseg  = (enttab + cbenttab + 1) & ~1;\n    dataseg  = codeseg + sizeof(code_segment);\n    rsrcdata = dataseg + sizeof(data_segment);\n\n    init_output_buffer();\n\n    put_word( 0x5a4d );       /* e_magic */\n    put_word( 0x40 );         /* e_cblp */\n    put_word( 0x01 );         /* e_cp */\n    put_word( 0 );            /* e_crlc */\n    put_word( lfanew / 16 );  /* e_cparhdr */\n    put_word( 0x0000 );       /* e_minalloc */\n    put_word( 0xffff );       /* e_maxalloc */\n    put_word( 0x0000 );       /* e_ss */\n    put_word( 0x00b8 );       /* e_sp */\n    put_word( 0 );            /* e_csum */\n    put_word( 0 );            /* e_ip */\n    put_word( 0 );            /* e_cs */\n    put_word( lfanew );       /* e_lfarlc */\n    put_word( 0 );            /* e_ovno */\n    put_dword( 0 );           /* e_res */\n    put_dword( 0 );\n    put_word( 0 );            /* e_oemid */\n    put_word( 0 );            /* e_oeminfo */\n    put_dword( 0 );           /* e_res2 */\n    put_dword( 0 );\n    put_dword( 0 );\n    put_dword( 0 );\n    put_dword( 0 );\n    put_dword( lfanew );\n\n    put_data( fakedll_signature, sizeof(fakedll_signature) );\n    align_output( 16 );\n\n    put_word( 0x454e );                    /* ne_magic */\n    put_byte( 0 );                         /* ne_ver */\n    put_byte( 0 );                         /* ne_rev */\n    put_word( enttab - lfanew );           /* ne_enttab */\n    put_word( cbenttab );                  /* ne_cbenttab */\n    put_dword( 0 );                        /* ne_crc */\n    put_word( NE_FFLAGS_SINGLEDATA |       /* ne_flags */\n              ((spec->characteristics & IMAGE_FILE_DLL) ? NE_FFLAGS_LIBMODULE : 0) );\n    put_word( 2 );                         /* ne_autodata */\n    put_word( spec->heap_size );           /* ne_heap */\n    put_word( 0 );                         /* ne_stack */\n    put_word( 0 ); put_word( 0 );          /* ne_csip */\n    put_word( 0 ); put_word( 2 );          /* ne_sssp */\n    put_word( cseg );                      /* ne_cseg */\n    put_word( 0 );                         /* ne_cmod */\n    put_word( 0 );                         /* ne_cbnrestab */\n    put_word( segtab - lfanew );           /* ne_segtab */\n    put_word( rsrctab - lfanew );          /* ne_rsrctab */\n    put_word( restab - lfanew );           /* ne_restab */\n    put_word( modtab - lfanew );           /* ne_modtab */\n    put_word( imptab - lfanew );           /* ne_imptab */\n    put_dword( 0 );                        /* ne_nrestab */\n    put_word( 0 );                         /* ne_cmovent */\n    put_word( 0 );                         /* ne_align */\n    put_word( 0 );                         /* ne_cres */\n    put_byte( 2 /*NE_OSFLAGS_WINDOWS*/ );  /* ne_exetyp */\n    put_byte( 8 /*NE_AFLAGS_FASTLOAD*/ );  /* ne_flagsothers */\n    put_word( 0 );                         /* ne_pretthunks */\n    put_word( 0 );                         /* ne_psegrefbytes */\n    put_word( 0 );                         /* ne_swaparea */\n    put_word( 0 );                         /* ne_expver */\n\n    /* segment table */\n    put_word( codeseg );\n    put_word( sizeof(code_segment) );\n    put_word( 0x0000 );\n    put_word( sizeof(code_segment) );\n    put_word( dataseg );\n    put_word( sizeof(data_segment) );\n    put_word( 0x0001 /* NE_SEGFLAGS_DATA */ );\n    put_word( sizeof(data_segment) );\n\n    /* resource directory */\n    if (spec->nb_resources)\n    {\n        output_bin_res16_directory( spec, rsrcdata );\n        align_output( 2 );\n    }\n\n    /* resident names table */\n    put_byte( namelen );\n    for (i = 0; i < namelen; i++) put_byte( toupper(spec->dll_name[i]) );\n    put_byte( 0 );\n    align_output( 2 );\n\n    /* imported names table */\n    put_word( 0 );\n\n    /* entry table */\n    put_byte( 0 );\n    align_output( 2 );\n\n    /* code segment */\n    put_data( code_segment, sizeof(code_segment) );\n\n    /* data segment */\n    put_data( data_segment, sizeof(data_segment) );\n\n    /* resource data */\n    output_bin_res16_data( spec );\n\n    flush_output_buffer();\n}\n"
  },
  {
    "path": "convspec/spec32.c",
    "content": "/*\n * 32-bit spec files\n *\n * Copyright 1993 Robert J. Amstadt\n * Copyright 1995 Martin von Loewis\n * Copyright 1995, 1996, 1997 Alexandre Julliard\n * Copyright 1997 Eric Youngdale\n * Copyright 1999 Ulrich Weigand\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <assert.h>\n#include <ctype.h>\n#include <stdarg.h>\n#include <string.h>\n\n#include \"build.h\"\n\n#define IMAGE_FILE_MACHINE_UNKNOWN 0\n#define IMAGE_FILE_MACHINE_I386    0x014c\n#define IMAGE_FILE_MACHINE_POWERPC 0x01f0\n#define IMAGE_FILE_MACHINE_AMD64   0x8664\n#define IMAGE_FILE_MACHINE_ARMNT   0x01C4\n#define IMAGE_FILE_MACHINE_ARM64   0xaa64\n\n#define IMAGE_SIZEOF_NT_OPTIONAL32_HEADER 224\n#define IMAGE_SIZEOF_NT_OPTIONAL64_HEADER 240\n\n#define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b\n#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b\n#define IMAGE_ROM_OPTIONAL_HDR_MAGIC  0x107\n\nint needs_get_pc_thunk = 0;\n\n/* check if entry point needs a relay thunk */\nstatic inline int needs_relay( const ORDDEF *odp )\n{\n    /* skip nonexistent entry points */\n    if (!odp) return 0;\n    /* skip non-functions */\n    switch (odp->type)\n    {\n    case TYPE_STDCALL:\n    case TYPE_CDECL:\n    case TYPE_THISCALL:\n        break;\n    case TYPE_STUB:\n        if (odp->u.func.nb_args != -1) break;\n        /* fall through */\n    default:\n        return 0;\n    }\n    /* skip norelay and forward entry points */\n    if (odp->flags & (FLAG_NORELAY|FLAG_FORWARD)) return 0;\n    return 1;\n}\n\nstatic int is_float_arg( const ORDDEF *odp, int arg )\n{\n    if (arg >= odp->u.func.nb_args) return 0;\n    return (odp->u.func.args[arg] == ARG_FLOAT || odp->u.func.args[arg] == ARG_DOUBLE);\n}\n\n/* check if dll will output relay thunks */\nstatic int has_relays( DLLSPEC *spec )\n{\n    int i;\n\n    if (target_cpu != CPU_x86 && target_cpu != CPU_x86_64 &&\n        target_cpu != CPU_ARM && target_cpu != CPU_ARM64)\n        return 0;\n\n    for (i = spec->base; i <= spec->limit; i++)\n    {\n        ORDDEF *odp = spec->ordinals[i];\n        if (needs_relay( odp )) return 1;\n    }\n    return 0;\n}\n\nstatic int cmp_func_args( const void *p1, const void *p2 )\n{\n    const ORDDEF *odp1 = *(const ORDDEF **)p1;\n    const ORDDEF *odp2 = *(const ORDDEF **)p2;\n\n    return odp2->u.func.nb_args - odp1->u.func.nb_args;\n}\n\nstatic void get_arg_string( ORDDEF *odp, char str[MAX_ARGUMENTS + 1] )\n{\n    int i;\n\n    for (i = 0; i < odp->u.func.nb_args; i++)\n    {\n        switch (odp->u.func.args[i])\n        {\n        case ARG_STR: str[i] = 's'; break;\n        case ARG_WSTR: str[i] = 'w'; break;\n        case ARG_FLOAT: str[i] = 'f'; break;\n        case ARG_DOUBLE: str[i] = 'd'; break;\n        case ARG_INT64:\n        case ARG_INT128:\n            if (get_ptr_size() == 4)\n            {\n                str[i] = (odp->u.func.args[i] == ARG_INT64) ? 'j' : 'k';\n                break;\n            }\n            /* fall through */\n        case ARG_LONG:\n        case ARG_PTR:\n        default:\n            str[i] = 'i';\n            break;\n        }\n    }\n    if (target_cpu == CPU_x86 && odp->type == TYPE_THISCALL) str[0] = 't';\n\n    /* append return value */\n    if (get_ptr_size() == 4 && (odp->flags & FLAG_RET64))\n        strcpy( str + i, \"J\" );\n    else\n        strcpy( str + i, \"I\" );\n}\n\n/*******************************************************************\n *         build_args_string\n */\nstatic char *build_args_string( DLLSPEC *spec )\n{\n    int i, count = 0, len = 1;\n    char *p, *buffer;\n    char str[MAX_ARGUMENTS + 2];\n    ORDDEF **funcs;\n\n    funcs = xmalloc( (spec->limit + 1 - spec->base) * sizeof(*funcs) );\n    for (i = spec->base; i <= spec->limit; i++)\n    {\n        ORDDEF *odp = spec->ordinals[i];\n\n        if (!needs_relay( odp )) continue;\n        funcs[count++] = odp;\n        len += odp->u.func.nb_args + 1;\n    }\n    /* sort functions by decreasing number of arguments */\n    qsort( funcs, count, sizeof(*funcs), cmp_func_args );\n    buffer = xmalloc( len );\n    buffer[0] = 0;\n    /* build the arguments string, reusing substrings where possible */\n    for (i = 0; i < count; i++)\n    {\n        get_arg_string( funcs[i], str );\n        if (!(p = strstr( buffer, str )))\n        {\n            p = buffer + strlen( buffer );\n            strcpy( p, str );\n        }\n        funcs[i]->u.func.args_str_offset = p - buffer;\n    }\n    free( funcs );\n    return buffer;\n}\n\n/*******************************************************************\n *         output_relay_debug\n *\n * Output entry points for relay debugging\n */\nstatic void output_relay_debug( DLLSPEC *spec )\n{\n    int i;\n\n    /* first the table of entry point offsets */\n\n    output( \"\\t%s\\n\", get_asm_rodata_section() );\n    output( \"\\t.align %d\\n\", get_alignment(4) );\n    output( \".L__wine_spec_relay_entry_point_offsets:\\n\" );\n\n    for (i = spec->base; i <= spec->limit; i++)\n    {\n        ORDDEF *odp = spec->ordinals[i];\n\n        if (needs_relay( odp ))\n            output( \"\\t.long .L__wine_spec_relay_entry_point_%d-__wine_spec_relay_entry_points\\n\", i );\n        else\n            output( \"\\t.long 0\\n\" );\n    }\n\n    /* then the strings of argument types */\n\n    output( \".L__wine_spec_relay_args_string:\\n\" );\n    output( \"\\t%s \\\"%s\\\"\\n\", get_asm_string_keyword(), build_args_string( spec ));\n\n    /* then the relay thunks */\n\n    output( \"\\t.text\\n\" );\n    output( \"__wine_spec_relay_entry_points:\\n\" );\n    output( \"\\tnop\\n\" );  /* to avoid 0 offset */\n\n    for (i = spec->base; i <= spec->limit; i++)\n    {\n        ORDDEF *odp = spec->ordinals[i];\n\n        if (!needs_relay( odp )) continue;\n\n        output( \"\\t.align %d\\n\", get_alignment(4) );\n        output( \".L__wine_spec_relay_entry_point_%d:\\n\", i );\n        output_cfi( \".cfi_startproc\" );\n\n        switch (target_cpu)\n        {\n        case CPU_x86:\n            if (odp->type == TYPE_THISCALL)  /* add the this pointer */\n            {\n                output( \"\\tpopl %%eax\\n\" );\n                output( \"\\tpushl %%ecx\\n\" );\n                output( \"\\tpushl %%eax\\n\" );\n            }\n            output( \"\\tpushl $%u\\n\", (odp->u.func.args_str_offset << 16) | (i - spec->base) );\n            output_cfi( \".cfi_adjust_cfa_offset 4\" );\n\n            if (UsePIC)\n            {\n                output( \"\\tcall %s\\n\", asm_name(\"__wine_spec_get_pc_thunk_eax\") );\n                output( \"1:\\tleal .L__wine_spec_relay_descr-1b(%%eax),%%eax\\n\" );\n                needs_get_pc_thunk = 1;\n            }\n            else output( \"\\tmovl $.L__wine_spec_relay_descr,%%eax\\n\" );\n            output( \"\\tpushl %%eax\\n\" );\n            output_cfi( \".cfi_adjust_cfa_offset 4\" );\n\n            output( \"\\tcall *4(%%eax)\\n\" );\n            output_cfi( \".cfi_adjust_cfa_offset -8\" );\n            if (odp->type == TYPE_STDCALL || odp->type == TYPE_THISCALL)\n                output( \"\\tret $%u\\n\", get_args_size( odp ));\n            else\n                output( \"\\tret\\n\" );\n            break;\n\n        case CPU_ARM:\n        {\n            unsigned int mask, val, count = 0;\n            int j, has_float = 0;\n\n            if (strcmp( float_abi_option, \"soft\" ))\n                for (j = 0; j < odp->u.func.nb_args && !has_float; j++)\n                    has_float = is_float_arg( odp, j );\n\n            val = (odp->u.func.args_str_offset << 16) | (i - spec->base);\n            output( \"\\tpush {r0-r3}\\n\" );\n            output( \"\\tmov r2, SP\\n\");\n            if (has_float) output( \"\\tvpush {s0-s15}\\n\" );\n            output( \"\\tpush {LR}\\n\" );\n            output( \"\\tsub SP, #4\\n\");\n            for (mask = 0xff; mask; mask <<= 8)\n                if (val & mask) output( \"\\t%s r1,#%u\\n\", count++ ? \"add\" : \"mov\", val & mask );\n            if (!count) output( \"\\tmov r1,#0\\n\" );\n            output( \"\\tldr r0, 2f\\n\");\n            output( \"\\tadd r0, PC\\n\");\n            output( \"\\tldr IP, [r0, #4]\\n\");\n            output( \"1:\\tblx IP\\n\");\n            output( \"\\tldr IP, [SP, #4]\\n\" );\n            output( \"\\tadd SP, #%u\\n\", 24 + (has_float ? 64 : 0) );\n            output( \"\\tbx IP\\n\");\n            output( \"2:\\t.long .L__wine_spec_relay_descr-1b\\n\" );\n            break;\n        }\n\n        case CPU_ARM64:\n            switch (odp->u.func.nb_args)\n            {\n            default:\n            case 8:\n            case 7:  output( \"\\tstp x6, x7, [SP,#-16]!\\n\" );\n            /* fall through */\n            case 6:\n            case 5:  output( \"\\tstp x4, x5, [SP,#-16]!\\n\" );\n            /* fall through */\n            case 4:\n            case 3:  output( \"\\tstp x2, x3, [SP,#-16]!\\n\" );\n            /* fall through */\n            case 2:\n            case 1:  output( \"\\tstp x0, x1, [SP,#-16]!\\n\" );\n            /* fall through */\n            case 0:  break;\n            }\n            output( \"\\tmov x2, SP\\n\");\n            output( \"\\tstp x29, x30, [SP,#-16]!\\n\" );\n            output( \"\\tstp x8, x9, [SP,#-16]!\\n\" );\n            output( \"\\tmov w1, #%u\\n\", odp->u.func.args_str_offset << 16 );\n            if (i - spec->base) output( \"\\tadd w1, w1, #%u\\n\", i - spec->base );\n            output( \"\\tadrp x0, .L__wine_spec_relay_descr\\n\");\n            output( \"\\tadd x0, x0, #:lo12:.L__wine_spec_relay_descr\\n\");\n            output( \"\\tldr x3, [x0, #8]\\n\");\n            output( \"\\tblr x3\\n\");\n            output( \"\\tadd SP, SP, #16\\n\" );\n            output( \"\\tldp x29, x30, [SP], #16\\n\" );\n            if (odp->u.func.nb_args)\n                output( \"\\tadd SP, SP, #%u\\n\", 8 * ((min(odp->u.func.nb_args, 8) + 1) & ~1) );\n            output( \"\\tret\\n\");\n            break;\n\n        case CPU_x86_64:\n            switch (odp->u.func.nb_args)\n            {\n            default: output( \"\\tmovq %%%s,32(%%rsp)\\n\", is_float_arg( odp, 3 ) ? \"xmm3\" : \"r9\" );\n            /* fall through */\n            case 3:  output( \"\\tmovq %%%s,24(%%rsp)\\n\", is_float_arg( odp, 2 ) ? \"xmm2\" : \"r8\" );\n            /* fall through */\n            case 2:  output( \"\\tmovq %%%s,16(%%rsp)\\n\", is_float_arg( odp, 1 ) ? \"xmm1\" : \"rdx\" );\n            /* fall through */\n            case 1:  output( \"\\tmovq %%%s,8(%%rsp)\\n\", is_float_arg( odp, 0 ) ? \"xmm0\" : \"rcx\" );\n            /* fall through */\n            case 0:  break;\n            }\n            output( \"\\tmovl $%u,%%edx\\n\", (odp->u.func.args_str_offset << 16) | (i - spec->base) );\n            output( \"\\tleaq .L__wine_spec_relay_descr(%%rip),%%rcx\\n\" );\n            output( \"\\tcallq *8(%%rcx)\\n\" );\n            output( \"\\tret\\n\" );\n            break;\n\n        default:\n            assert(0);\n        }\n        output_cfi( \".cfi_endproc\" );\n    }\n}\n\n/*******************************************************************\n *         output_exports\n *\n * Output the export table for a Win32 module.\n */\nvoid output_exports( DLLSPEC *spec )\n{\n    int i, fwd_size = 0;\n    int nr_exports = spec->base <= spec->limit ? spec->limit - spec->base + 1 : 0;\n\n    if (!nr_exports) return;\n\n    output( \"\\n/* export table */\\n\\n\" );\n    output( \"\\t.data\\n\" );\n    output( \"\\t.align %d\\n\", get_alignment(4) );\n    output( \".L__wine_spec_exports:\\n\" );\n\n    /* export directory header */\n\n    output( \"\\t.long 0\\n\" );                       /* Characteristics */\n    output( \"\\t.long 0\\n\" );                       /* TimeDateStamp */\n    output( \"\\t.long 0\\n\" );                       /* MajorVersion/MinorVersion */\n    output( \"\\t.long .L__wine_spec_exp_names-.L__wine_spec_rva_base\\n\" ); /* Name */\n    output( \"\\t.long %u\\n\", spec->base );          /* Base */\n    output( \"\\t.long %u\\n\", nr_exports );          /* NumberOfFunctions */\n    output( \"\\t.long %u\\n\", spec->nb_names );      /* NumberOfNames */\n    output( \"\\t.long .L__wine_spec_exports_funcs-.L__wine_spec_rva_base\\n\" ); /* AddressOfFunctions */\n    if (spec->nb_names)\n    {\n        output( \"\\t.long .L__wine_spec_exp_name_ptrs-.L__wine_spec_rva_base\\n\" ); /* AddressOfNames */\n        output( \"\\t.long .L__wine_spec_exp_ordinals-.L__wine_spec_rva_base\\n\" );  /* AddressOfNameOrdinals */\n    }\n    else\n    {\n        output( \"\\t.long 0\\n\" );  /* AddressOfNames */\n        output( \"\\t.long 0\\n\" );  /* AddressOfNameOrdinals */\n    }\n\n    /* output the function pointers */\n\n    output( \"\\n.L__wine_spec_exports_funcs:\\n\" );\n    for (i = spec->base; i <= spec->limit; i++)\n    {\n        ORDDEF *odp = spec->ordinals[i];\n        if (!odp) output( \"\\t%s 0\\n\", get_asm_ptr_keyword() );\n        else switch(odp->type)\n        {\n        case TYPE_EXTERN:\n        case TYPE_STDCALL:\n        case TYPE_VARARGS:\n        case TYPE_CDECL:\n        case TYPE_THISCALL:\n            if (odp->flags & FLAG_FORWARD)\n            {\n                output( \"\\t%s .L__wine_spec_forwards+%u\\n\", get_asm_ptr_keyword(), fwd_size );\n                fwd_size += strlen(odp->link_name) + 1;\n            }\n            else if (odp->flags & FLAG_EXT_LINK)\n            {\n                output( \"\\t%s %s_%s\\n\",\n                         get_asm_ptr_keyword(), asm_name(\"__wine_spec_ext_link\"), odp->link_name );\n            }\n            else\n            {\n                output( \"\\t%s %s\\n\", get_asm_ptr_keyword(), odp->type == TYPE_STDCALL ? asm_name_stdcall32(odp->link_name, odp) : asm_name(odp->link_name) );\n            }\n            break;\n        case TYPE_STUB:\n            output( \"\\t%s %s\\n\", get_asm_ptr_keyword(),\n                     asm_name( get_stub_name( odp, spec )) );\n            break;\n        default:\n            assert(0);\n        }\n    }\n\n    if (spec->nb_names)\n    {\n        /* output the function name pointers */\n\n        int namepos = strlen(spec->file_name) + 1;\n\n        output( \"\\n.L__wine_spec_exp_name_ptrs:\\n\" );\n        for (i = 0; i < spec->nb_names; i++)\n        {\n            output( \"\\t.long .L__wine_spec_exp_names+%u-.L__wine_spec_rva_base\\n\", namepos );\n            namepos += strlen(spec->names[i]->name) + 1;\n        }\n\n        /* output the function ordinals */\n\n        output( \"\\n.L__wine_spec_exp_ordinals:\\n\" );\n        for (i = 0; i < spec->nb_names; i++)\n        {\n            output( \"\\t.short %d\\n\", spec->names[i]->ordinal - spec->base );\n        }\n        if (spec->nb_names % 2)\n        {\n            output( \"\\t.short 0\\n\" );\n        }\n    }\n\n    /* output the export name strings */\n\n    output( \"\\n.L__wine_spec_exp_names:\\n\" );\n    output( \"\\t%s \\\"%s\\\"\\n\", get_asm_string_keyword(), spec->file_name );\n    for (i = 0; i < spec->nb_names; i++)\n        output( \"\\t%s \\\"%s\\\"\\n\",\n                 get_asm_string_keyword(), spec->names[i]->name );\n\n    /* output forward strings */\n\n    if (fwd_size)\n    {\n        output( \"\\n.L__wine_spec_forwards:\\n\" );\n        for (i = spec->base; i <= spec->limit; i++)\n        {\n            ORDDEF *odp = spec->ordinals[i];\n            if (odp && (odp->flags & FLAG_FORWARD))\n                output( \"\\t%s \\\"%s\\\"\\n\", get_asm_string_keyword(), odp->link_name );\n        }\n    }\n    output( \"\\t.align %d\\n\", get_alignment(get_ptr_size()) );\n    output( \".L__wine_spec_exports_end:\\n\" );\n\n    /* output relays */\n\n    if (!has_relays( spec ))\n    {\n        output( \"\\t%s 0\\n\", get_asm_ptr_keyword() );\n        return;\n    }\n\n    output( \".L__wine_spec_relay_descr:\\n\" );\n    output( \"\\t%s 0xdeb90002\\n\", get_asm_ptr_keyword() );  /* magic */\n    output( \"\\t%s 0\\n\", get_asm_ptr_keyword() );           /* relay func */\n    output( \"\\t%s 0\\n\", get_asm_ptr_keyword() );           /* private data */\n    output( \"\\t%s __wine_spec_relay_entry_points\\n\", get_asm_ptr_keyword() );\n    output( \"\\t%s .L__wine_spec_relay_entry_point_offsets\\n\", get_asm_ptr_keyword() );\n    output( \"\\t%s .L__wine_spec_relay_args_string\\n\", get_asm_ptr_keyword() );\n\n    output_relay_debug( spec );\n}\n\n\n/*******************************************************************\n *         output_asm_constructor\n *\n * Output code for calling a dll constructor.\n */\nstatic void output_asm_constructor( const char *constructor )\n{\n    if (target_platform == PLATFORM_APPLE)\n    {\n        /* Mach-O doesn't have an init section */\n        output( \"\\n\\t.mod_init_func\\n\" );\n        output( \"\\t.align %d\\n\", get_alignment(get_ptr_size()) );\n        output( \"\\t%s %s\\n\", get_asm_ptr_keyword(), asm_name(constructor) );\n    }\n    else\n    {\n        switch(target_cpu)\n        {\n        case CPU_x86:\n        case CPU_x86_64:\n            output( \"\\n\\t.section \\\".init\\\",\\\"ax\\\"\\n\" );\n            output( \"\\tcall %s\\n\", asm_name(constructor) );\n            break;\n        case CPU_ARM:\n            output( \"\\n\\t.section \\\".text\\\",\\\"ax\\\"\\n\" );\n            output( \"\\tblx %s\\n\", asm_name(constructor) );\n            break;\n        case CPU_ARM64:\n        case CPU_POWERPC:\n            output( \"\\n\\t.section \\\".init\\\",\\\"ax\\\"\\n\" );\n            output( \"\\tbl %s\\n\", asm_name(constructor) );\n            break;\n        }\n    }\n}\n\n\n/*******************************************************************\n *         output_module\n *\n * Output the module data.\n */\nvoid output_module( DLLSPEC *spec )\n{\n    int machine = 0;\n    unsigned int page_size = get_page_size();\n\n    /* Reserve some space for the PE header */\n\n    switch (target_platform)\n    {\n    case PLATFORM_APPLE:\n        output( \"\\t.text\\n\" );\n        output( \"\\t.align %d\\n\", get_alignment(page_size) );\n        output( \"__wine_spec_pe_header:\\n\" );\n        output( \"\\t.space 65536\\n\" );\n        break;\n    case PLATFORM_SOLARIS:\n        output( \"\\n\\t.section \\\".text\\\",\\\"ax\\\"\\n\" );\n        output( \"__wine_spec_pe_header:\\n\" );\n        output( \"\\t.skip %u\\n\", 65536 + page_size );\n        break;\n    default:\n        switch(target_cpu)\n        {\n        case CPU_x86:\n        case CPU_x86_64:\n            output( \"\\n\\t.section \\\".init\\\",\\\"ax\\\"\\n\" );\n            output( \"\\tjmp 1f\\n\" );\n            break;\n        case CPU_ARM:\n            output( \"\\n\\t.section \\\".text\\\",\\\"ax\\\"\\n\" );\n            output( \"\\tb 1f\\n\" );\n            break;\n        case CPU_ARM64:\n        case CPU_POWERPC:\n            output( \"\\n\\t.section \\\".init\\\",\\\"ax\\\"\\n\" );\n            output( \"\\tb 1f\\n\" );\n            break;\n        }\n        output( \"__wine_spec_pe_header:\\n\" );\n        output( \"\\t.skip %u\\n\", 65536 + page_size );\n        output( \"1:\\n\" );\n        break;\n    }\n\n    /* Output the NT header */\n\n    output( \"\\n\\t.data\\n\" );\n    output( \"\\t.align %d\\n\", get_alignment(get_ptr_size()) );\n    output( \"%s\\n\", asm_globl(\"__wine_spec_nt_header\") );\n    output( \".L__wine_spec_rva_base:\\n\" );\n\n    output( \"\\t.long 0x4550\\n\" );         /* Signature */\n    switch(target_cpu)\n    {\n    case CPU_x86:     machine = IMAGE_FILE_MACHINE_I386; break;\n    case CPU_x86_64:  machine = IMAGE_FILE_MACHINE_AMD64; break;\n    case CPU_POWERPC: machine = IMAGE_FILE_MACHINE_POWERPC; break;\n    case CPU_ARM:     machine = IMAGE_FILE_MACHINE_ARMNT; break;\n    case CPU_ARM64:   machine = IMAGE_FILE_MACHINE_ARM64; break;\n    }\n    output( \"\\t.short 0x%04x\\n\",          /* Machine */\n             machine );\n    output( \"\\t.short 0\\n\" );             /* NumberOfSections */\n    output( \"\\t.long 0\\n\" );              /* TimeDateStamp */\n    output( \"\\t.long 0\\n\" );              /* PointerToSymbolTable */\n    output( \"\\t.long 0\\n\" );              /* NumberOfSymbols */\n    output( \"\\t.short %d\\n\",              /* SizeOfOptionalHeader */\n             get_ptr_size() == 8 ? IMAGE_SIZEOF_NT_OPTIONAL64_HEADER : IMAGE_SIZEOF_NT_OPTIONAL32_HEADER );\n    output( \"\\t.short 0x%04x\\n\",          /* Characteristics */\n             spec->characteristics );\n    output( \"\\t.short 0x%04x\\n\",          /* Magic */\n             get_ptr_size() == 8 ? IMAGE_NT_OPTIONAL_HDR64_MAGIC : IMAGE_NT_OPTIONAL_HDR32_MAGIC );\n    output( \"\\t.byte 7\\n\" );              /* MajorLinkerVersion */\n    output( \"\\t.byte 10\\n\" );             /* MinorLinkerVersion */\n    output( \"\\t.long 0\\n\" );              /* SizeOfCode */\n    output( \"\\t.long 0\\n\" );              /* SizeOfInitializedData */\n    output( \"\\t.long 0\\n\" );              /* SizeOfUninitializedData */\n    /* note: we expand the AddressOfEntryPoint field on 64-bit by overwriting the BaseOfCode field */\n    output( \"\\t%s %s\\n\",                  /* AddressOfEntryPoint */\n            get_asm_ptr_keyword(), spec->init_func ? asm_name(spec->init_func) : \"0\" );\n    if (get_ptr_size() == 4)\n    {\n        output( \"\\t.long 0\\n\" );          /* BaseOfCode */\n        output( \"\\t.long 0\\n\" );          /* BaseOfData */\n    }\n    output( \"\\t%s __wine_spec_pe_header\\n\",         /* ImageBase */\n             get_asm_ptr_keyword() );\n    output( \"\\t.long %u\\n\", page_size );  /* SectionAlignment */\n    output( \"\\t.long %u\\n\", page_size );  /* FileAlignment */\n    output( \"\\t.short 1,0\\n\" );           /* Major/MinorOperatingSystemVersion */\n    output( \"\\t.short 0,0\\n\" );           /* Major/MinorImageVersion */\n    output( \"\\t.short %u,%u\\n\",           /* Major/MinorSubsystemVersion */\n             spec->subsystem_major, spec->subsystem_minor );\n    output( \"\\t.long 0\\n\" );                          /* Win32VersionValue */\n    output( \"\\t.long %s-.L__wine_spec_rva_base\\n\",    /* SizeOfImage */\n             asm_name(\"_end\") );\n    output( \"\\t.long %u\\n\", page_size );  /* SizeOfHeaders */\n    output( \"\\t.long 0\\n\" );              /* CheckSum */\n    output( \"\\t.short 0x%04x\\n\",          /* Subsystem */\n             spec->subsystem );\n    output( \"\\t.short 0x%04x\\n\",          /* DllCharacteristics */\n            spec->dll_characteristics );\n    output( \"\\t%s %u,%u\\n\",               /* SizeOfStackReserve/Commit */\n             get_asm_ptr_keyword(), (spec->stack_size ? spec->stack_size : 1024) * 1024, page_size );\n    output( \"\\t%s %u,%u\\n\",               /* SizeOfHeapReserve/Commit */\n             get_asm_ptr_keyword(), (spec->heap_size ? spec->heap_size : 1024) * 1024, page_size );\n    output( \"\\t.long 0\\n\" );              /* LoaderFlags */\n    output( \"\\t.long 16\\n\" );             /* NumberOfRvaAndSizes */\n\n    if (spec->base <= spec->limit)   /* DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT] */\n        output( \"\\t.long .L__wine_spec_exports-.L__wine_spec_rva_base,\"\n                 \".L__wine_spec_exports_end-.L__wine_spec_exports\\n\" );\n    else\n        output( \"\\t.long 0,0\\n\" );\n\n    if (has_imports())   /* DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT] */\n        output( \"\\t.long .L__wine_spec_imports-.L__wine_spec_rva_base,\"\n                 \".L__wine_spec_imports_end-.L__wine_spec_imports\\n\" );\n    else\n        output( \"\\t.long 0,0\\n\" );\n\n    if (spec->nb_resources)   /* DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE] */\n        output( \"\\t.long .L__wine_spec_resources-.L__wine_spec_rva_base,\"\n                 \".L__wine_spec_resources_end-.L__wine_spec_resources\\n\" );\n    else\n        output( \"\\t.long 0,0\\n\" );\n\n    output( \"\\t.long 0,0\\n\" );  /* DataDirectory[3] */\n    output( \"\\t.long 0,0\\n\" );  /* DataDirectory[4] */\n    output( \"\\t.long 0,0\\n\" );  /* DataDirectory[5] */\n    output( \"\\t.long 0,0\\n\" );  /* DataDirectory[6] */\n    output( \"\\t.long 0,0\\n\" );  /* DataDirectory[7] */\n    output( \"\\t.long 0,0\\n\" );  /* DataDirectory[8] */\n    output( \"\\t.long 0,0\\n\" );  /* DataDirectory[9] */\n    output( \"\\t.long 0,0\\n\" );  /* DataDirectory[10] */\n    output( \"\\t.long 0,0\\n\" );  /* DataDirectory[11] */\n    output( \"\\t.long 0,0\\n\" );  /* DataDirectory[12] */\n    output( \"\\t.long 0,0\\n\" );  /* DataDirectory[13] */\n    output( \"\\t.long 0,0\\n\" );  /* DataDirectory[14] */\n    output( \"\\t.long 0,0\\n\" );  /* DataDirectory[15] */\n\n    output( \"\\n\\t%s\\n\", get_asm_string_section() );\n    output( \"%s\\n\", asm_globl(\"__wine_spec_file_name\") );\n    output( \".L__wine_spec_file_name:\\n\" );\n    output( \"\\t%s \\\"%s\\\"\\n\", get_asm_string_keyword(), spec->file_name );\n    if (target_platform == PLATFORM_APPLE)\n        output( \"\\t.lcomm %s,4\\n\", asm_name(\"_end\") );\n\n    output_asm_constructor( \"__wine_spec_init_ctor\" );\n}\n\n\n/*******************************************************************\n *         BuildSpec32File\n *\n * Build a Win32 C file from a spec file.\n */\nvoid BuildSpec32File( DLLSPEC *spec )\n{\n    needs_get_pc_thunk = 0;\n    resolve_imports( spec );\n    output_standard_file_header();\n    output_module( spec );\n    output_stubs( spec );\n    output_exports( spec );\n    output_imports( spec );\n    if (needs_get_pc_thunk) output_get_pc_thunk();\n    output_resources( spec );\n    output_gnu_stack_note();\n}\n\n\n/*******************************************************************\n *         output_fake_module\n *\n * Build a fake binary module from a spec file.\n */\nvoid output_fake_module( DLLSPEC *spec )\n{\n    static const unsigned char dll_code_section[] = { 0x31, 0xc0,          /* xor %eax,%eax */\n                                                      0xc2, 0x0c, 0x00 };  /* ret $12 */\n\n    static const unsigned char exe_code_section[] = { 0xb8, 0x01, 0x00, 0x00, 0x00,  /* movl $1,%eax */\n                                                      0xc2, 0x04, 0x00 };            /* ret $4 */\n\n    static const char fakedll_signature[] = \"Wine placeholder DLL\";\n    const unsigned int page_size = get_page_size();\n    const unsigned int section_align = page_size;\n    const unsigned int file_align = 0x200;\n    const unsigned int reloc_size = 8;\n    const unsigned int lfanew = (0x40 + sizeof(fakedll_signature) + 15) & ~15;\n    const unsigned int nb_sections = 2 + (spec->nb_resources != 0);\n    const unsigned int text_size = (spec->characteristics & IMAGE_FILE_DLL) ?\n                                    sizeof(dll_code_section) : sizeof(exe_code_section);\n    unsigned char *resources;\n    unsigned int resources_size;\n    unsigned int image_size = 3 * section_align;\n\n    resolve_imports( spec );\n    output_bin_resources( spec, 3 * section_align );\n    resources = output_buffer;\n    resources_size = output_buffer_pos;\n    if (resources_size) image_size += (resources_size + section_align - 1) & ~(section_align - 1);\n\n    init_output_buffer();\n\n    put_word( 0x5a4d );       /* e_magic */\n    put_word( 0x40 );         /* e_cblp */\n    put_word( 0x01 );         /* e_cp */\n    put_word( 0 );            /* e_crlc */\n    put_word( lfanew / 16 );  /* e_cparhdr */\n    put_word( 0x0000 );       /* e_minalloc */\n    put_word( 0xffff );       /* e_maxalloc */\n    put_word( 0x0000 );       /* e_ss */\n    put_word( 0x00b8 );       /* e_sp */\n    put_word( 0 );            /* e_csum */\n    put_word( 0 );            /* e_ip */\n    put_word( 0 );            /* e_cs */\n    put_word( lfanew );       /* e_lfarlc */\n    put_word( 0 );            /* e_ovno */\n    put_dword( 0 );           /* e_res */\n    put_dword( 0 );\n    put_word( 0 );            /* e_oemid */\n    put_word( 0 );            /* e_oeminfo */\n    put_dword( 0 );           /* e_res2 */\n    put_dword( 0 );\n    put_dword( 0 );\n    put_dword( 0 );\n    put_dword( 0 );\n    put_dword( lfanew );\n\n    put_data( fakedll_signature, sizeof(fakedll_signature) );\n    align_output( 16 );\n\n    put_dword( 0x4550 );                             /* Signature */\n    switch(target_cpu)\n    {\n    case CPU_x86:     put_word( IMAGE_FILE_MACHINE_I386 ); break;\n    case CPU_x86_64:  put_word( IMAGE_FILE_MACHINE_AMD64 ); break;\n    case CPU_POWERPC: put_word( IMAGE_FILE_MACHINE_POWERPC ); break;\n    case CPU_ARM:     put_word( IMAGE_FILE_MACHINE_ARMNT ); break;\n    case CPU_ARM64:   put_word( IMAGE_FILE_MACHINE_ARM64 ); break;\n    }\n    put_word( nb_sections );                         /* NumberOfSections */\n    put_dword( 0 );                                  /* TimeDateStamp */\n    put_dword( 0 );                                  /* PointerToSymbolTable */\n    put_dword( 0 );                                  /* NumberOfSymbols */\n    put_word( get_ptr_size() == 8 ?\n              IMAGE_SIZEOF_NT_OPTIONAL64_HEADER :\n              IMAGE_SIZEOF_NT_OPTIONAL32_HEADER );   /* SizeOfOptionalHeader */\n    put_word( spec->characteristics );               /* Characteristics */\n    put_word( get_ptr_size() == 8 ?\n              IMAGE_NT_OPTIONAL_HDR64_MAGIC :\n              IMAGE_NT_OPTIONAL_HDR32_MAGIC );       /* Magic */\n    put_byte(  7 );                                  /* MajorLinkerVersion */\n    put_byte(  10 );                                 /* MinorLinkerVersion */\n    put_dword( text_size );                          /* SizeOfCode */\n    put_dword( 0 );                                  /* SizeOfInitializedData */\n    put_dword( 0 );                                  /* SizeOfUninitializedData */\n    put_dword( section_align );                      /* AddressOfEntryPoint */\n    put_dword( section_align );                      /* BaseOfCode */\n    if (get_ptr_size() == 4) put_dword( 0 );         /* BaseOfData */\n    put_pword( 0x10000000 );                         /* ImageBase */\n    put_dword( section_align );                      /* SectionAlignment */\n    put_dword( file_align );                         /* FileAlignment */\n    put_word( 1 );                                   /* MajorOperatingSystemVersion */\n    put_word( 0 );                                   /* MinorOperatingSystemVersion */\n    put_word( 0 );                                   /* MajorImageVersion */\n    put_word( 0 );                                   /* MinorImageVersion */\n    put_word( spec->subsystem_major );               /* MajorSubsystemVersion */\n    put_word( spec->subsystem_minor );               /* MinorSubsystemVersion */\n    put_dword( 0 );                                  /* Win32VersionValue */\n    put_dword( image_size );                         /* SizeOfImage */\n    put_dword( file_align );                         /* SizeOfHeaders */\n    put_dword( 0 );                                  /* CheckSum */\n    put_word( spec->subsystem );                     /* Subsystem */\n    put_word( spec->dll_characteristics );           /* DllCharacteristics */\n    put_pword( (spec->stack_size ? spec->stack_size : 1024) * 1024 ); /* SizeOfStackReserve */\n    put_pword( page_size );                          /* SizeOfStackCommit */\n    put_pword( (spec->heap_size ? spec->heap_size : 1024) * 1024 );   /* SizeOfHeapReserve */\n    put_pword( page_size );                          /* SizeOfHeapCommit */\n    put_dword( 0 );                                  /* LoaderFlags */\n    put_dword( 16 );                                 /* NumberOfRvaAndSizes */\n\n    put_dword( 0 ); put_dword( 0 );   /* DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT] */\n    put_dword( 0 ); put_dword( 0 );   /* DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT] */\n    if (resources_size)   /* DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE] */\n    {\n        put_dword( 3 * section_align );\n        put_dword( resources_size );\n    }\n    else\n    {\n        put_dword( 0 );\n        put_dword( 0 );\n    }\n\n    put_dword( 0 ); put_dword( 0 );   /* DataDirectory[IMAGE_DIRECTORY_ENTRY_EXCEPTION] */\n    put_dword( 0 ); put_dword( 0 );   /* DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY] */\n    put_dword( 2 * section_align );   /* DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC] */\n    put_dword( reloc_size );\n    put_dword( 0 ); put_dword( 0 );   /* DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG] */\n    put_dword( 0 ); put_dword( 0 );   /* DataDirectory[IMAGE_DIRECTORY_ENTRY_COPYRIGHT] */\n    put_dword( 0 ); put_dword( 0 );   /* DataDirectory[IMAGE_DIRECTORY_ENTRY_GLOBALPTR] */\n    put_dword( 0 ); put_dword( 0 );   /* DataDirectory[IMAGE_DIRECTORY_ENTRY_TLS] */\n    put_dword( 0 ); put_dword( 0 );   /* DataDirectory[IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG] */\n    put_dword( 0 ); put_dword( 0 );   /* DataDirectory[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT] */\n    put_dword( 0 ); put_dword( 0 );   /* DataDirectory[IMAGE_DIRECTORY_ENTRY_IAT] */\n    put_dword( 0 ); put_dword( 0 );   /* DataDirectory[IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT] */\n    put_dword( 0 ); put_dword( 0 );   /* DataDirectory[IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR] */\n    put_dword( 0 ); put_dword( 0 );   /* DataDirectory[15] */\n\n    /* .text section */\n    put_data( \".text\\0\\0\", 8 );    /* Name */\n    put_dword( section_align );    /* VirtualSize */\n    put_dword( section_align );    /* VirtualAddress */\n    put_dword( text_size );        /* SizeOfRawData */\n    put_dword( file_align );       /* PointerToRawData */\n    put_dword( 0 );                /* PointerToRelocations */\n    put_dword( 0 );                /* PointerToLinenumbers */\n    put_word( 0 );                 /* NumberOfRelocations */\n    put_word( 0 );                 /* NumberOfLinenumbers */\n    put_dword( 0x60000020 /* CNT_CODE|MEM_EXECUTE|MEM_READ */ ); /* Characteristics  */\n\n    /* .reloc section */\n    put_data( \".reloc\\0\", 8 );     /* Name */\n    put_dword( section_align );    /* VirtualSize */\n    put_dword( 2 * section_align );/* VirtualAddress */\n    put_dword( reloc_size );       /* SizeOfRawData */\n    put_dword( 2 * file_align );   /* PointerToRawData */\n    put_dword( 0 );                /* PointerToRelocations */\n    put_dword( 0 );                /* PointerToLinenumbers */\n    put_word( 0 );                 /* NumberOfRelocations */\n    put_word( 0 );                 /* NumberOfLinenumbers */\n    put_dword( 0x42000040 /* CNT_INITIALIZED_DATA|MEM_DISCARDABLE|MEM_READ */ ); /* Characteristics */\n\n    /* .rsrc section */\n    if (resources_size)\n    {\n        put_data( \".rsrc\\0\\0\", 8 );    /* Name */\n        put_dword( (resources_size + section_align - 1) & ~(section_align - 1) ); /* VirtualSize */\n        put_dword( 3 * section_align );/* VirtualAddress */\n        put_dword( resources_size );   /* SizeOfRawData */\n        put_dword( 3 * file_align );   /* PointerToRawData */\n        put_dword( 0 );                /* PointerToRelocations */\n        put_dword( 0 );                /* PointerToLinenumbers */\n        put_word( 0 );                 /* NumberOfRelocations */\n        put_word( 0 );                 /* NumberOfLinenumbers */\n        put_dword( 0x40000040 /* CNT_INITIALIZED_DATA|MEM_READ */ ); /* Characteristics */\n    }\n\n    /* .text contents */\n    align_output( file_align );\n    if (spec->characteristics & IMAGE_FILE_DLL)\n        put_data( dll_code_section, sizeof(dll_code_section) );\n    else\n        put_data( exe_code_section, sizeof(exe_code_section) );\n\n    /* .reloc contents */\n    align_output( file_align );\n    put_dword( 0 );   /* VirtualAddress */\n    put_dword( 0 );   /* SizeOfBlock */\n\n    /* .rsrc contents */\n    if (resources_size)\n    {\n        align_output( file_align );\n        put_data( resources, resources_size );\n    }\n    flush_output_buffer();\n}\n\n\n/*******************************************************************\n *         output_def_file\n *\n * Build a Win32 def file from a spec file.\n */\nvoid output_def_file( DLLSPEC *spec, int include_private )\n{\n    DLLSPEC *spec32 = NULL;\n    const char *name;\n    int i, total;\n\n    if (spec->type == SPEC_WIN16)\n    {\n        spec32 = alloc_dll_spec();\n        add_16bit_exports( spec32, spec );\n        spec = spec32;\n    }\n\n    if (spec_file_name)\n        output( \"; File generated automatically from %s; do not edit!\\n\\n\",\n                 spec_file_name );\n    else\n        output( \"; File generated automatically; do not edit!\\n\\n\" );\n\n    output( \"LIBRARY %s\\n\\n\", spec->file_name);\n    output( \"EXPORTS\\n\");\n\n#ifdef WINEBUILD_MSVC\n    kill_at = 1;\n#endif\n    /* Output the exports and relay entry points */\n\n    for (i = total = 0; i < spec->nb_entry_points; i++)\n    {\n        const ORDDEF *odp = &spec->entry_points[i];\n        int is_data = 0;\n\n        if (odp->name) name = odp->name;\n        else if (odp->export_name) name = odp->export_name;\n        else continue;\n\n        if (!(odp->flags & FLAG_PRIVATE)) total++;\n        else if (!include_private) continue;\n\n        if (odp->type == TYPE_STUB) continue;\n\n#ifndef WINEBUILD_MSVC\n        output( \"  %s\", name );\n#else\n        /* FIXME: workaround */\n        if (name && *name == '_')\n        {\n            output(\"  %s\", name);\n        }\n        else\n        {\n            output(\"  %s\", name);\n        }\n#endif\n\n        switch(odp->type)\n        {\n        case TYPE_EXTERN:\n            is_data = 1;\n            /* fall through */\n        case TYPE_VARARGS:\n        case TYPE_CDECL:\n        case TYPE_THISCALL:\n            /* try to reduce output */\n#ifndef WINEBUILD_MSVC\n#if 0\n            if(strcmp(name, odp->link_name) || (odp->flags & FLAG_FORWARD))\n                output( \"=%s\", odp->link_name );\n#endif\n#endif\n            break;\n        case TYPE_STDCALL:\n        {\n            int at_param = get_args_size( odp );\n            if (!kill_at && target_cpu == CPU_x86) output( \"@%d\", at_param );\n            if  (odp->flags & FLAG_FORWARD)\n            {\n                output( \"=%s\", odp->link_name );\n            }\n            else if (strcmp(name, odp->link_name)) /* try to reduce output */\n            {\n                output( \"=%s\", odp->link_name );\n                if (!kill_at && target_cpu == CPU_x86) output( \"@%d\", at_param );\n            }\n            else\n            {\n#ifndef WINEBUILD_MSVC\n                /* add-stdcall-alias */\n                if (!odp->name || (odp->flags & FLAG_ORDINAL)) output( \" NONAME\" );\n                if (is_data) output( \" DATA\" );\n                /* PRIVATE */\n#ifndef WINEBUILD_MSVC\n                if (odp->flags & FLAG_PRIVATE) output( \" PRIVATE\" );\n#endif\n                output( \"\\n\" );\n                output( \"  %s=%s\", name, name );\n                if (!kill_at && target_cpu == CPU_x86) output( \"@%d\", at_param );\n#endif\n            }\n            break;\n        }\n        default:\n            assert(0);\n        }\n        output( \" @%d\", odp->ordinal );\n        if (!odp->name || (odp->flags & FLAG_ORDINAL)) output( \" NONAME\" );\n        if (is_data) output( \" DATA\" );\n        /* PRIVATE */\n#ifndef WINEBUILD_MSVC\n        if (odp->flags & FLAG_PRIVATE) output( \" PRIVATE\" );\n#endif\n        output( \"\\n\" );\n    }\n    if (!total) warning( \"%s: Import library doesn't export anything\\n\", spec->file_name );\n    if (spec32) free_dll_spec( spec32 );\n}\n"
  },
  {
    "path": "convspec/utils.c",
    "content": "/*\n * Small utility functions for winebuild\n *\n * Copyright 2000 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <assert.h>\n#include <ctype.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#ifdef HAVE_SYS_STAT_H\n# include <sys/stat.h>\n#endif\n#ifdef HAVE_SYS_MMAN_H\n#include <sys/mman.h>\n#endif\n\n#include \"build.h\"\n\n#if defined(_WIN32) && !defined(__CYGWIN__)\n# define PATH_SEPARATOR ';'\n#else\n# define PATH_SEPARATOR ':'\n#endif\n\nstatic struct strarray tmp_files;\nstatic struct strarray empty_strarray;\n\nstatic const struct\n{\n    const char *name;\n    enum target_cpu cpu;\n} cpu_names[] =\n{\n    { \"i386\",    CPU_x86 },\n    { \"i486\",    CPU_x86 },\n    { \"i586\",    CPU_x86 },\n    { \"i686\",    CPU_x86 },\n    { \"i786\",    CPU_x86 },\n    { \"amd64\",   CPU_x86_64 },\n    { \"x86_64\",  CPU_x86_64 },\n    { \"powerpc\", CPU_POWERPC },\n    { \"arm\",     CPU_ARM },\n    { \"armv5\",   CPU_ARM },\n    { \"armv6\",   CPU_ARM },\n    { \"armv7\",   CPU_ARM },\n    { \"arm64\",   CPU_ARM64 },\n    { \"aarch64\", CPU_ARM64 },\n};\n\n/* atexit handler to clean tmp files */\nvoid cleanup_tmp_files(void)\n{\n    unsigned int i;\n    for (i = 0; i < tmp_files.count; i++) if (tmp_files.str[i]) unlink( tmp_files.str[i] );\n}\n\n\nvoid *xmalloc (size_t size)\n{\n    void *res;\n\n    res = malloc (size ? size : 1);\n    if (res == NULL)\n    {\n        fprintf (stderr, \"Virtual memory exhausted.\\n\");\n        exit (1);\n    }\n    return res;\n}\n\nvoid *xrealloc (void *ptr, size_t size)\n{\n    void *res = realloc (ptr, size);\n    if (size && res == NULL)\n    {\n        fprintf (stderr, \"Virtual memory exhausted.\\n\");\n        exit (1);\n    }\n    return res;\n}\n\nchar *xstrdup( const char *str )\n{\n    char *res = strdup( str );\n    if (!res)\n    {\n        fprintf (stderr, \"Virtual memory exhausted.\\n\");\n        exit (1);\n    }\n    return res;\n}\n\nchar *strupper(char *s)\n{\n    char *p;\n    for (p = s; *p; p++) *p = toupper(*p);\n    return s;\n}\n\nint strendswith(const char* str, const char* end)\n{\n    int l = strlen(str);\n    int m = strlen(end);\n    return l >= m && strcmp(str + l - m, end) == 0;\n}\n\nchar *strmake( const char* fmt, ... )\n{\n    int n;\n    size_t size = 100;\n    va_list ap;\n\n    for (;;)\n    {\n        char *p = xmalloc( size );\n        va_start( ap, fmt );\n\tn = vsnprintf( p, size, fmt, ap );\n\tva_end( ap );\n        if (n == -1) size *= 2;\n        else if ((size_t)n >= size) size = n + 1;\n        else return p;\n        free( p );\n    }\n}\n\nstatic struct strarray strarray_copy( struct strarray src )\n{\n    struct strarray array;\n    array.count = src.count;\n    array.max = src.max;\n    array.str = xmalloc( array.max * sizeof(*array.str) );\n    memcpy( array.str, src.str, array.count * sizeof(*array.str) );\n    return array;\n}\n\nstatic void strarray_add_one( struct strarray *array, const char *str )\n{\n    if (array->count == array->max)\n    {\n        array->max *= 2;\n        if (array->max < 16) array->max = 16;\n        array->str = xrealloc( array->str, array->max * sizeof(*array->str) );\n    }\n    array->str[array->count++] = str;\n}\n\nvoid strarray_add( struct strarray *array, ... )\n{\n    va_list valist;\n    const char *str;\n\n    va_start( valist, array );\n    while ((str = va_arg( valist, const char *))) strarray_add_one( array, str );\n    va_end( valist );\n}\n\nvoid strarray_addv( struct strarray *array, char * const *argv )\n{\n    while (*argv) strarray_add_one( array, *argv++ );\n}\n\nvoid strarray_addall( struct strarray *array, struct strarray args )\n{\n    unsigned int i;\n\n    for (i = 0; i < args.count; i++) strarray_add_one( array, args.str[i] );\n}\n\nstruct strarray strarray_fromstring( const char *str, const char *delim )\n{\n    const char *tok;\n    struct strarray array = empty_strarray;\n    char *buf = xstrdup( str );\n\n    for (tok = strtok( buf, delim ); tok; tok = strtok( NULL, delim ))\n\tstrarray_add_one( &array, strdup( tok ));\n\n    free( buf );\n    return array;\n}\n\nvoid fatal_error( const char *msg, ... )\n{\n    va_list valist;\n    va_start( valist, msg );\n    if (input_file_name)\n    {\n        fprintf( stderr, \"%s:\", input_file_name );\n        if (current_line)\n            fprintf( stderr, \"%d:\", current_line );\n        fputc( ' ', stderr );\n    }\n    else fprintf( stderr, \"winebuild: \" );\n    vfprintf( stderr, msg, valist );\n    va_end( valist );\n    exit(1);\n}\n\nvoid fatal_perror( const char *msg, ... )\n{\n    va_list valist;\n    va_start( valist, msg );\n    if (input_file_name)\n    {\n        fprintf( stderr, \"%s:\", input_file_name );\n        if (current_line)\n            fprintf( stderr, \"%d:\", current_line );\n        fputc( ' ', stderr );\n    }\n    vfprintf( stderr, msg, valist );\n    perror( \" \" );\n    va_end( valist );\n    exit(1);\n}\n\nvoid error( const char *msg, ... )\n{\n    va_list valist;\n    va_start( valist, msg );\n    if (input_file_name)\n    {\n        fprintf( stderr, \"%s:\", input_file_name );\n        if (current_line)\n            fprintf( stderr, \"%d:\", current_line );\n        fputc( ' ', stderr );\n    }\n    vfprintf( stderr, msg, valist );\n    va_end( valist );\n    nb_errors++;\n}\n\nvoid warning( const char *msg, ... )\n{\n    va_list valist;\n\n    if (!display_warnings) return;\n    va_start( valist, msg );\n    if (input_file_name)\n    {\n        fprintf( stderr, \"%s:\", input_file_name );\n        if (current_line)\n            fprintf( stderr, \"%d:\", current_line );\n        fputc( ' ', stderr );\n    }\n    fprintf( stderr, \"warning: \" );\n    vfprintf( stderr, msg, valist );\n    va_end( valist );\n}\n\nint output( const char *format, ... )\n{\n    int ret;\n    va_list valist;\n\n    va_start( valist, format );\n    ret = vfprintf( output_file, format, valist );\n    va_end( valist );\n    if (ret < 0) fatal_perror( \"Output error\" );\n    return ret;\n}\n\nvoid spawn( struct strarray args )\n{\n    unsigned int i;\n    int status;\n\n    strarray_add_one( &args, NULL );\n    if (verbose)\n        for (i = 0; args.str[i]; i++)\n            fprintf( stderr, \"%s%c\", args.str[i], args.str[i+1] ? ' ' : '\\n' );\n\n    if ((status = _spawnvp( _P_WAIT, args.str[0], args.str )))\n    {\n\tif (status > 0) fatal_error( \"%s failed with status %u\\n\", args.str[0], status );\n\telse fatal_perror( \"winebuild\" );\n\texit( 1 );\n    }\n}\n\n/* find a build tool in the path, trying the various names */\nstruct strarray find_tool( const char *name, const char * const *names )\n{\n    static char **dirs;\n    static unsigned int count, maxlen;\n\n    char *p, *file;\n    const char *alt_names[2];\n    unsigned int i, len;\n    struct stat st;\n\n    if (!dirs)\n    {\n        char *path;\n\n        /* split the path in directories */\n\n        if (!getenv( \"PATH\" )) fatal_error( \"PATH not set, cannot find required tools\\n\" );\n        path = xstrdup( getenv( \"PATH\" ));\n        for (p = path, count = 2; *p; p++) if (*p == PATH_SEPARATOR) count++;\n        dirs = xmalloc( count * sizeof(*dirs) );\n        count = 0;\n        dirs[count++] = p = path;\n        while (*p)\n        {\n            while (*p && *p != PATH_SEPARATOR) p++;\n            if (!*p) break;\n            *p++ = 0;\n            dirs[count++] = p;\n        }\n        for (i = 0; i < count; i++) maxlen = max( maxlen, strlen(dirs[i])+2 );\n    }\n\n    if (!names)\n    {\n        alt_names[0] = name;\n        alt_names[1] = NULL;\n        names = alt_names;\n    }\n\n    while (*names)\n    {\n        len = strlen(*names) + sizeof(EXEEXT) + 1;\n        if (target_alias)\n            len += strlen(target_alias) + 1;\n        file = xmalloc( maxlen + len );\n\n        for (i = 0; i < count; i++)\n        {\n            strcpy( file, dirs[i] );\n            p = file + strlen(file);\n            if (p == file) *p++ = '.';\n            if (p[-1] != '/') *p++ = '/';\n            if (target_alias)\n            {\n                strcpy( p, target_alias );\n                p += strlen(p);\n                *p++ = '-';\n            }\n            strcpy( p, *names );\n            strcat( p, EXEEXT );\n\n            if (!stat( file, &st ) && S_ISREG(st.st_mode) && (st.st_mode & 0111))\n            {\n                struct strarray ret = empty_strarray;\n                strarray_add_one( &ret, file );\n                return ret;\n            }\n        }\n        free( file );\n        names++;\n    }\n    fatal_error( \"cannot find the '%s' tool\\n\", name );\n}\n\nstruct strarray get_as_command(void)\n{\n    struct strarray args;\n\n    if (cc_command.count)\n    {\n        args = strarray_copy( cc_command );\n        strarray_add( &args, \"-xassembler\", \"-c\", NULL );\n        if (force_pointer_size)\n            strarray_add_one( &args, (force_pointer_size == 8) ? \"-m64\" : \"-m32\" );\n        if (cpu_option) strarray_add_one( &args, strmake(\"-mcpu=%s\", cpu_option) );\n        if (arch_option) strarray_add_one( &args, strmake(\"-march=%s\", arch_option) );\n        return args;\n    }\n\n    if (!as_command.count)\n    {\n        static const char * const commands[] = { \"gas\", \"as\", NULL };\n        as_command = find_tool( \"as\", commands );\n    }\n\n    args = strarray_copy( as_command );\n\n    if (force_pointer_size)\n    {\n        switch (target_platform)\n        {\n        case PLATFORM_APPLE:\n            strarray_add( &args, \"-arch\", (force_pointer_size == 8) ? \"x86_64\" : \"i386\", NULL );\n            break;\n        default:\n            switch(target_cpu)\n            {\n            case CPU_POWERPC:\n                strarray_add_one( &args, (force_pointer_size == 8) ? \"-a64\" : \"-a32\" );\n                break;\n            default:\n                strarray_add_one( &args, (force_pointer_size == 8) ? \"--64\" : \"--32\" );\n                break;\n            }\n            break;\n        }\n    }\n\n    if (cpu_option) strarray_add_one( &args, strmake(\"-mcpu=%s\", cpu_option) );\n    return args;\n}\n\nstruct strarray get_ld_command(void)\n{\n    struct strarray args;\n\n    if (!ld_command.count)\n    {\n        static const char * const commands[] = { \"ld\", \"gld\", NULL };\n        ld_command = find_tool( \"ld\", commands );\n    }\n\n    args = strarray_copy( ld_command );\n\n    if (force_pointer_size)\n    {\n        switch (target_platform)\n        {\n        case PLATFORM_APPLE:\n            strarray_add( &args, \"-arch\", (force_pointer_size == 8) ? \"x86_64\" : \"i386\", NULL );\n            break;\n        case PLATFORM_FREEBSD:\n            strarray_add( &args, \"-m\", (force_pointer_size == 8) ? \"elf_x86_64_fbsd\" : \"elf_i386_fbsd\", NULL );\n            break;\n        default:\n            switch(target_cpu)\n            {\n            case CPU_POWERPC:\n                strarray_add( &args, \"-m\", (force_pointer_size == 8) ? \"elf64ppc\" : \"elf32ppc\", NULL );\n                break;\n            default:\n                strarray_add( &args, \"-m\", (force_pointer_size == 8) ? \"elf_x86_64\" : \"elf_i386\", NULL );\n                break;\n            }\n            break;\n        }\n    }\n    return args;\n}\n\nconst char *get_nm_command(void)\n{\n    if (!nm_command.count)\n    {\n        static const char * const commands[] = { \"nm\", \"gnm\", NULL };\n        nm_command = find_tool( \"nm\", commands );\n    }\n    if (nm_command.count > 1)\n        fatal_error( \"multiple arguments in nm command not supported yet\\n\" );\n    return nm_command.str[0];\n}\n\n/* get a name for a temp file, automatically cleaned up on exit */\nchar *get_temp_file_name( const char *prefix, const char *suffix )\n{\n    char *name;\n    const char *ext, *basename;\n    int fd;\n\n    if (!prefix || !prefix[0]) prefix = \"winebuild\";\n    if (!suffix) suffix = \"\";\n    if ((basename = strrchr( prefix, '/' ))) basename++;\n    else basename = prefix;\n    if (!(ext = strchr( basename, '.' ))) ext = prefix + strlen(prefix);\n    name = xmalloc( sizeof(\"/tmp/\") + (ext - prefix) + sizeof(\".XXXXXX\") + strlen(suffix) );\n    memcpy( name, prefix, ext - prefix );\n    strcpy( name + (ext - prefix), \".XXXXXX\" );\n    strcat( name, suffix );\n\n    if ((fd = mkstemps( name, strlen(suffix) )) == -1)\n    {\n        strcpy( name, \"/tmp/\" );\n        memcpy( name + 5, basename, ext - basename );\n        strcpy( name + 5 + (ext - basename), \".XXXXXX\" );\n        strcat( name, suffix );\n        if ((fd = mkstemps( name, strlen(suffix) )) == -1)\n            fatal_error( \"could not generate a temp file\\n\" );\n    }\n\n    close( fd );\n    strarray_add_one( &tmp_files, name );\n    return name;\n}\n\n/*******************************************************************\n *         buffer management\n *\n * Function for reading from/writing to a memory buffer.\n */\n\nint byte_swapped = 0;\nconst char *input_buffer_filename;\nconst unsigned char *input_buffer;\nsize_t input_buffer_pos;\nsize_t input_buffer_size;\nunsigned char *output_buffer;\nsize_t output_buffer_pos;\nsize_t output_buffer_size;\n\nstatic void check_output_buffer_space( size_t size )\n{\n    if (output_buffer_pos + size >= output_buffer_size)\n    {\n        output_buffer_size = max( output_buffer_size * 2, output_buffer_pos + size );\n        output_buffer = xrealloc( output_buffer, output_buffer_size );\n    }\n}\n\nvoid init_input_buffer( const char *file )\n{\n    int fd;\n    struct stat st;\n\n    if ((fd = open( file, O_RDONLY | O_BINARY )) == -1) fatal_perror( \"Cannot open %s\", file );\n    if ((fstat( fd, &st ) == -1)) fatal_perror( \"Cannot stat %s\", file );\n    if (!st.st_size) fatal_error( \"%s is an empty file\\n\", file );\n#ifdef\tHAVE_MMAP\n    if ((input_buffer = mmap( NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0 )) == (void*)-1)\n#endif\n    {\n        unsigned char *buffer = xmalloc( st.st_size );\n        if (read( fd, buffer, st.st_size ) != st.st_size) fatal_error( \"Cannot read %s\\n\", file );\n        input_buffer = buffer;\n    }\n    close( fd );\n    input_buffer_filename = xstrdup( file );\n    input_buffer_size = st.st_size;\n    input_buffer_pos = 0;\n    byte_swapped = 0;\n}\n\nvoid init_output_buffer(void)\n{\n    output_buffer_size = 1024;\n    output_buffer_pos = 0;\n    output_buffer = xmalloc( output_buffer_size );\n}\n\nvoid flush_output_buffer(void)\n{\n    if (fwrite( output_buffer, 1, output_buffer_pos, output_file ) != output_buffer_pos)\n        fatal_error( \"Error writing to %s\\n\", output_file_name );\n    free( output_buffer );\n}\n\nunsigned char get_byte(void)\n{\n    if (input_buffer_pos >= input_buffer_size)\n        fatal_error( \"%s is a truncated file\\n\", input_buffer_filename );\n    return input_buffer[input_buffer_pos++];\n}\n\nunsigned short get_word(void)\n{\n    unsigned short ret;\n\n    if (input_buffer_pos + sizeof(ret) > input_buffer_size)\n        fatal_error( \"%s is a truncated file\\n\", input_buffer_filename );\n    memcpy( &ret, input_buffer + input_buffer_pos, sizeof(ret) );\n    if (byte_swapped) ret = (ret << 8) | (ret >> 8);\n    input_buffer_pos += sizeof(ret);\n    return ret;\n}\n\nunsigned int get_dword(void)\n{\n    unsigned int ret;\n\n    if (input_buffer_pos + sizeof(ret) > input_buffer_size)\n        fatal_error( \"%s is a truncated file\\n\", input_buffer_filename );\n    memcpy( &ret, input_buffer + input_buffer_pos, sizeof(ret) );\n    if (byte_swapped)\n        ret = ((ret << 24) | ((ret << 8) & 0x00ff0000) | ((ret >> 8) & 0x0000ff00) | (ret >> 24));\n    input_buffer_pos += sizeof(ret);\n    return ret;\n}\n\nvoid put_data( const void *data, size_t size )\n{\n    check_output_buffer_space( size );\n    memcpy( output_buffer + output_buffer_pos, data, size );\n    output_buffer_pos += size;\n}\n\nvoid put_byte( unsigned char val )\n{\n    check_output_buffer_space( 1 );\n    output_buffer[output_buffer_pos++] = val;\n}\n\nvoid put_word( unsigned short val )\n{\n    if (byte_swapped) val = (val << 8) | (val >> 8);\n    put_data( &val, sizeof(val) );\n}\n\nvoid put_dword( unsigned int val )\n{\n    if (byte_swapped)\n        val = ((val << 24) | ((val << 8) & 0x00ff0000) | ((val >> 8) & 0x0000ff00) | (val >> 24));\n    put_data( &val, sizeof(val) );\n}\n\nvoid put_qword( unsigned int val )\n{\n    if (byte_swapped)\n    {\n        put_dword( 0 );\n        put_dword( val );\n    }\n    else\n    {\n        put_dword( val );\n        put_dword( 0 );\n    }\n}\n\n/* pointer-sized word */\nvoid put_pword( unsigned int val )\n{\n    if (get_ptr_size() == 8) put_qword( val );\n    else put_dword( val );\n}\n\nvoid align_output( unsigned int align )\n{\n    size_t size = align - (output_buffer_pos % align);\n\n    if (size == align) return;\n    check_output_buffer_space( size );\n    memset( output_buffer + output_buffer_pos, 0, size );\n    output_buffer_pos += size;\n}\n\n/* output a standard header for generated files */\nvoid output_standard_file_header(void)\n{\n    if (spec_file_name)\n        output( \"/* File generated automatically from %s; do not edit! */\\n\", spec_file_name );\n    else\n        output( \"/* File generated automatically; do not edit! */\\n\" );\n    output( \"/* This file can be copied, modified and distributed without restriction. */\\n\\n\" );\n}\n\n/* dump a byte stream into the assembly code */\nvoid dump_bytes( const void *buffer, unsigned int size )\n{\n    unsigned int i;\n    const unsigned char *ptr = buffer;\n\n    if (!size) return;\n    output( \"\\t.byte \" );\n    for (i = 0; i < size - 1; i++, ptr++)\n    {\n        if ((i % 16) == 15) output( \"0x%02x\\n\\t.byte \", *ptr );\n        else output( \"0x%02x,\", *ptr );\n    }\n    output( \"0x%02x\\n\", *ptr );\n}\n\n\n/*******************************************************************\n *         open_input_file\n *\n * Open a file in the given srcdir and set the input_file_name global variable.\n */\nFILE *open_input_file( const char *srcdir, const char *name )\n{\n    char *fullname;\n    FILE *file = fopen( name, \"r\" );\n\n    if (!file && srcdir)\n    {\n        fullname = strmake( \"%s/%s\", srcdir, name );\n        file = fopen( fullname, \"r\" );\n    }\n    else fullname = xstrdup( name );\n\n    if (!file) fatal_error( \"Cannot open file '%s'\\n\", fullname );\n    input_file_name = fullname;\n    current_line = 1;\n    return file;\n}\n\n\n/*******************************************************************\n *         close_input_file\n *\n * Close the current input file (must have been opened with open_input_file).\n */\nvoid close_input_file( FILE *file )\n{\n    fclose( file );\n    free( input_file_name );\n    input_file_name = NULL;\n    current_line = 0;\n}\n\n\n/*******************************************************************\n *         remove_stdcall_decoration\n *\n * Remove a possible @xx suffix from a function name.\n * Return the numerical value of the suffix, or -1 if none.\n */\nint remove_stdcall_decoration( char *name )\n{\n    char *p, *end = strrchr( name, '@' );\n    if (!end || !end[1] || end == name) return -1;\n    if (target_cpu != CPU_x86) return -1;\n    /* make sure all the rest is digits */\n    for (p = end + 1; *p; p++) if (!isdigit(*p)) return -1;\n    *end = 0;\n    return atoi( end + 1 );\n}\n\n\n/*******************************************************************\n *         assemble_file\n *\n * Run a file through the assembler.\n */\nvoid assemble_file( const char *src_file, const char *obj_file )\n{\n    struct strarray args = get_as_command();\n    strarray_add( &args, \"-o\", obj_file, src_file, NULL );\n    spawn( args );\n}\n\n\n/*******************************************************************\n *         alloc_dll_spec\n *\n * Create a new dll spec file descriptor\n */\nDLLSPEC *alloc_dll_spec(void)\n{\n    DLLSPEC *spec;\n\n    spec = xmalloc( sizeof(*spec) );\n    memset( spec, 0, sizeof(*spec) );\n    spec->type               = SPEC_WIN32;\n    spec->base               = MAX_ORDINALS;\n    spec->characteristics    = IMAGE_FILE_EXECUTABLE_IMAGE;\n    spec->subsystem          = 0;\n    spec->subsystem_major    = 4;\n    spec->subsystem_minor    = 0;\n    if (get_ptr_size() > 4)\n        spec->characteristics |= IMAGE_FILE_LARGE_ADDRESS_AWARE;\n    else\n        spec->characteristics |= IMAGE_FILE_32BIT_MACHINE;\n    spec->dll_characteristics = IMAGE_DLLCHARACTERISTICS_NX_COMPAT;\n    return spec;\n}\n\n\n/*******************************************************************\n *         free_dll_spec\n *\n * Free dll spec file descriptor\n */\nvoid free_dll_spec( DLLSPEC *spec )\n{\n    int i;\n\n    for (i = 0; i < spec->nb_entry_points; i++)\n    {\n        ORDDEF *odp = &spec->entry_points[i];\n        free( odp->name );\n        free( odp->export_name );\n        free( odp->link_name );\n    }\n    free( spec->file_name );\n    free( spec->dll_name );\n    free( spec->c_name );\n    free( spec->init_func );\n    free( spec->entry_points );\n    free( spec->names );\n    free( spec->ordinals );\n    free( spec->resources );\n    free( spec );\n}\n\n\n/*******************************************************************\n *         make_c_identifier\n *\n * Map a string to a valid C identifier.\n */\nchar *make_c_identifier( const char *str )\n{\n    char *p, buffer[256];\n\n    for (p = buffer; *str && p < buffer+sizeof(buffer)-1; p++, str++)\n    {\n        if (isalnum(*str)) *p = *str;\n        else *p = '_';\n    }\n    *p = 0;\n    return xstrdup( buffer );\n}\n\n\n/*******************************************************************\n *         get_stub_name\n *\n * Generate an internal name for a stub entry point.\n */\nconst char *get_stub_name( const ORDDEF *odp, const DLLSPEC *spec )\n{\n    static char *buffer;\n\n    free( buffer );\n    if (odp->name || odp->export_name)\n    {\n        char *p;\n        buffer = strmake( \"__wine_stub_%s\", odp->name ? odp->name : odp->export_name );\n        /* make sure name is a legal C identifier */\n        for (p = buffer; *p; p++) if (!isalnum(*p) && *p != '_') break;\n        if (!*p) return buffer;\n        free( buffer );\n    }\n    buffer = strmake( \"__wine_stub_%s_%d\", make_c_identifier(spec->file_name), odp->ordinal );\n    return buffer;\n}\n\n/* parse a cpu name and return the corresponding value */\nint get_cpu_from_name( const char *name )\n{\n    unsigned int i;\n\n    for (i = 0; i < sizeof(cpu_names)/sizeof(cpu_names[0]); i++)\n        if (!strcmp( cpu_names[i].name, name )) return cpu_names[i].cpu;\n    return -1;\n}\n\n/*****************************************************************\n *  Function:    get_alignment\n *\n *  Description:\n *    According to the info page for gas, the .align directive behaves\n * differently on different systems.  On some architectures, the\n * argument of a .align directive is the number of bytes to pad to, so\n * to align on an 8-byte boundary you'd say\n *     .align 8\n * On other systems, the argument is \"the number of low-order zero bits\n * that the location counter must have after advancement.\"  So to\n * align on an 8-byte boundary you'd say\n *     .align 3\n *\n * The reason gas is written this way is that it's trying to mimic\n * native assemblers for the various architectures it runs on.  gas\n * provides other directives that work consistently across\n * architectures, but of course we want to work on all arches with or\n * without gas.  Hence this function.\n *\n *\n *  Parameters:\n *    align  --  the number of bytes to align to. Must be a power of 2.\n */\nunsigned int get_alignment(unsigned int align)\n{\n    unsigned int n;\n\n    assert( !(align & (align - 1)) );\n\n    switch(target_cpu)\n    {\n    case CPU_x86:\n    case CPU_x86_64:\n        if (target_platform != PLATFORM_APPLE) return align;\n        /* fall through */\n    case CPU_POWERPC:\n    case CPU_ARM:\n    case CPU_ARM64:\n        n = 0;\n        while ((1u << n) != align) n++;\n        return n;\n    }\n    /* unreached */\n    assert(0);\n    return 0;\n}\n\n/* return the page size for the target CPU */\nunsigned int get_page_size(void)\n{\n    switch(target_cpu)\n    {\n    case CPU_x86:\n    case CPU_x86_64:\n    case CPU_POWERPC:\n    case CPU_ARM:\n        return 0x1000;\n    case CPU_ARM64:\n        return 0x10000;\n    }\n    /* unreached */\n    assert(0);\n    return 0;\n}\n\n/* return the size of a pointer on the target CPU */\nunsigned int get_ptr_size(void)\n{\n    switch(target_cpu)\n    {\n    case CPU_x86:\n    case CPU_POWERPC:\n    case CPU_ARM:\n        return 4;\n    case CPU_x86_64:\n    case CPU_ARM64:\n        return 8;\n    }\n    /* unreached */\n    assert(0);\n    return 0;\n}\n\n/* return the total size in bytes of the arguments on the stack */\nunsigned int get_args_size( const ORDDEF *odp )\n{\n    int i, size;\n\n    for (i = size = 0; i < odp->u.func.nb_args; i++)\n    {\n        switch (odp->u.func.args[i])\n        {\n        case ARG_INT64:\n        case ARG_DOUBLE:\n            size += 8;\n            break;\n        case ARG_INT128:\n            /* int128 is passed as pointer on x86_64 */\n            if (target_cpu != CPU_x86_64)\n            {\n                size += 16;\n                break;\n            }\n            /* fall through */\n        default:\n            size += get_ptr_size();\n            break;\n        }\n    }\n    return size;\n}\nstatic int get_function_argsize16(const ORDDEF *odp)\n{\n    int i, argsize = 0;\n    for (i = 0; i < odp->u.func.nb_args; i++)\n    {\n        switch (odp->u.func.args[i])\n        {\n        case ARG_WORD:\n        case ARG_SWORD:\n            argsize += 2 + 2;\n            break;\n        case ARG_SEGPTR:\n        case ARG_SEGSTR:\n        case ARG_LONG:\n        case ARG_PTR:\n        case ARG_STR:\n        case ARG_WSTR:\n        case ARG_FLOAT:\n        case ARG_INT128:\n            argsize += 4;\n            break;\n        case ARG_INT64:\n        case ARG_DOUBLE:\n            argsize += 8;\n            break;\n        }\n    }\n    if (odp->flags & FLAG_REGISTER)\n        return argsize + 4;//ARG_PTR\n    return argsize;\n}\nconst char *asm_name_stdcall16(const char *sym, ORDDEF *ord)\n{\n    static char *buffer;\n    switch (target_platform)\n    {\n    case PLATFORM_APPLE:\n    case PLATFORM_WINDOWS:\n        if (sym[0] == '.' && sym[1] == 'L') return sym;\n        free(buffer);\n        if (ord->type == TYPE_VARARGS || strstr(sym, \"__wine_stub\") == sym)\n        {\n            buffer = strmake(\"_%s\", sym);\n        }\n        else\n        {\n            buffer = strmake(\"_%s@%d\", sym, get_function_argsize16(ord));\n        }\n        return buffer;\n    default:\n        return sym;\n    }\n}\nconst char *asm_name_stdcall32(const char *sym, ORDDEF *ord)\n{\n    static char *buffer;\n    switch (target_platform)\n    {\n    case PLATFORM_APPLE:\n    case PLATFORM_WINDOWS:\n        if (sym[0] == '.' && sym[1] == 'L') return sym;\n        free(buffer);\n        if (ord->type == TYPE_VARARGS || strstr(sym, \"__wine_stub\") == sym)\n        {\n            buffer = strmake(\"_%s\", sym);\n        }\n        else\n        {\n            buffer = strmake(\"_%s@%d\", sym, get_function_argsize16(ord));\n        }\n        return buffer;\n    default:\n        return sym;\n    }\n}\n\n/* return the assembly name for a C symbol */\nconst char *asm_name( const char *sym )\n{\n    static char *buffer;\n\n    switch (target_platform)\n    {\n    case PLATFORM_APPLE:\n    case PLATFORM_WINDOWS:\n        if (sym[0] == '.' && sym[1] == 'L') return sym;\n        free( buffer );\n        buffer = strmake( \"_%s\", sym );\n        return buffer;\n    default:\n        return sym;\n    }\n}\n\n/* return an assembly function declaration for a C function name */\nconst char *func_declaration( const char *func )\n{\n    static char *buffer;\n\n    switch (target_platform)\n    {\n    case PLATFORM_APPLE:\n        return \"\";\n    case PLATFORM_WINDOWS:\n        free( buffer );\n        buffer = strmake( \".def %s; .scl 2; .type 32; .endef\", func );\n        break;\n    default:\n        free( buffer );\n        switch(target_cpu)\n        {\n        case CPU_ARM:\n        case CPU_ARM64:\n            buffer = strmake( \".type %s,%%function\", func );\n            break;\n        default:\n            buffer = strmake( \".type %s,@function\", func );\n            break;\n        }\n        break;\n    }\n    return buffer;\n}\n\n/* output a size declaration for an assembly function */\nvoid output_function_size( const char *name )\n{\n    switch (target_platform)\n    {\n    case PLATFORM_APPLE:\n    case PLATFORM_WINDOWS:\n        break;\n    default:\n        output( \"\\t.size %s, .-%s\\n\", name, name );\n        break;\n    }\n}\n\n/* output a .cfi directive */\nvoid output_cfi( const char *format, ... )\n{\n    va_list valist;\n\n    if (!unwind_tables) return;\n    va_start( valist, format );\n    fputc( '\\t', output_file );\n    vfprintf( output_file, format, valist );\n    fputc( '\\n', output_file );\n    va_end( valist );\n}\n\n/* output the GNU note for non-exec stack */\nvoid output_gnu_stack_note(void)\n{\n    switch (target_platform)\n    {\n    case PLATFORM_WINDOWS:\n    case PLATFORM_APPLE:\n        break;\n    default:\n        switch(target_cpu)\n        {\n        case CPU_ARM:\n        case CPU_ARM64:\n            output( \"\\t.section .note.GNU-stack,\\\"\\\",%%progbits\\n\" );\n            break;\n        default:\n            output( \"\\t.section .note.GNU-stack,\\\"\\\",@progbits\\n\" );\n            break;\n        }\n        break;\n    }\n}\n\n/* return a global symbol declaration for an assembly symbol */\nconst char *asm_globl( const char *func )\n{\n    static char *buffer;\n\n    free( buffer );\n    switch (target_platform)\n    {\n    case PLATFORM_APPLE:\n        buffer = strmake( \"\\t.globl _%s\\n\\t.private_extern _%s\\n_%s:\", func, func, func );\n        break;\n    case PLATFORM_WINDOWS:\n        buffer = strmake( \"\\t.globl _%s\\n_%s:\", func, func );\n        break;\n    default:\n        buffer = strmake( \"\\t.globl %s\\n\\t.hidden %s\\n%s:\", func, func, func );\n        break;\n    }\n    return buffer;\n}\n\nconst char *get_asm_ptr_keyword(void)\n{\n    switch(get_ptr_size())\n    {\n    case 4: return \".long\";\n    case 8: return \".quad\";\n    }\n    assert(0);\n    return NULL;\n}\n\nconst char *get_asm_string_keyword(void)\n{\n    switch (target_platform)\n    {\n    case PLATFORM_APPLE:\n        return \".asciz\";\n    default:\n        return \".string\";\n    }\n}\n\nconst char *get_asm_rodata_section(void)\n{\n    switch (target_platform)\n    {\n    case PLATFORM_APPLE: return \".const\";\n    default:             return \".section .rodata\";\n    }\n}\n\nconst char *get_asm_string_section(void)\n{\n    switch (target_platform)\n    {\n    case PLATFORM_APPLE: return \".cstring\";\n    default:             return \".section .rodata\";\n    }\n}\n"
  },
  {
    "path": "convspec/ver.h",
    "content": "unsigned char ver_res[] = {\n  0xff, 0x10, 0x00, 0xff, 0x01, 0x00, 0x30, 0x00, 0xc0, 0x01, 0x00, 0x00,\n  0xc0, 0x01, 0x34, 0x00, 0x56, 0x53, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49,\n  0x4f, 0x4e, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x00, 0xbd, 0x04, 0xef, 0xfe,\n  0x00, 0x00, 0x01, 0x00, 0x0a, 0x00, 0x03, 0x00, 0xe7, 0x03, 0x00, 0x00,\n  0x0a, 0x00, 0x03, 0x00, 0xe7, 0x03, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00,\n  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00,\n  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0xc6, 0xc0, 0x5b,\n  0x54, 0x01, 0x00, 0x00, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69,\n  0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00,\n  0x30, 0x34, 0x31, 0x31, 0x30, 0x33, 0x41, 0x34, 0x00, 0x00, 0x00, 0x00,\n  0x24, 0x00, 0x13, 0x00, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x4e,\n  0x61, 0x6d, 0x65, 0x00, 0x44, 0x75, 0x6d, 0x6d, 0x79, 0x20, 0x43, 0x6f,\n  0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00,\n  0x20, 0x00, 0x0a, 0x00, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63,\n  0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x44, 0x75, 0x6d, 0x6d,\n  0x79, 0x20, 0x44, 0x4c, 0x4c, 0x00, 0x00, 0x00, 0x18, 0x00, 0x06, 0x00,\n  0x46, 0x69, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x00,\n  0x33, 0x2e, 0x31, 0x30, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x06, 0x00,\n  0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65,\n  0x00, 0x00, 0x00, 0x00, 0x44, 0x55, 0x4d, 0x4d, 0x59, 0x00, 0x00, 0x00,\n  0x3c, 0x00, 0x25, 0x00, 0x4c, 0x65, 0x67, 0x61, 0x6c, 0x43, 0x6f, 0x70,\n  0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x00, 0x00, 0x43, 0x6f, 0x70, 0x79,\n  0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x43, 0x29, 0x20, 0x44, 0x75,\n  0x6d, 0x6d, 0x79, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x2e, 0x20, 0x31, 0x39,\n  0x39, 0x31, 0x2d, 0x31, 0x39, 0x39, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00,\n  0x28, 0x00, 0x0d, 0x00, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c,\n  0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x00, 0x00, 0x00, 0x00,\n  0x44, 0x55, 0x4d, 0x4d, 0x59, 0x44, 0x4c, 0x4c, 0x2e, 0x44, 0x4c, 0x4c,\n  0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x26, 0x00, 0x50, 0x72, 0x6f, 0x64,\n  0x75, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x00, 0x44, 0x75, 0x6d, 0x6d,\n  0x79, 0x20, 0x28, 0x52, 0x29, 0x20, 0x44, 0x75, 0x6d, 0x6d, 0x79, 0x28,\n  0x54, 0x4d, 0x29, 0x20, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e,\n  0x67, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x00, 0x00, 0x00, 0x00,\n  0x1c, 0x00, 0x06, 0x00, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x56,\n  0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x33, 0x2e, 0x31, 0x30,\n  0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x56, 0x61, 0x72, 0x46,\n  0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x00, 0x14, 0x00, 0x04, 0x00,\n  0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00,\n  0x11, 0x04, 0xa4, 0x03\n};\nunsigned int ver_res_len = 460;\n"
  },
  {
    "path": "ctl3d/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(ctl3d SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/ctl3d.def ctl3d.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(ctl3d.dll16 ctl3d)\ntarget_link_libraries(ctl3d libwine winecrt0 krnl386 ctl3dv2)\nset_target_properties(ctl3d PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "ctl3d/Makefile.in",
    "content": "MODULE    = ctl3d.dll16\nIMPORTS   = user32\nEXTRADLLFLAGS = -m16 -Wb,--main-module,ctl3d32.dll\n\nC_SRCS = ctl3d.c\n"
  },
  {
    "path": "ctl3d/ctl3d.c",
    "content": "/*\n * 16-bit CTL3D and CTL3DV2 API stubs.\n *\n * Copyright (c) 2003 Dmitry Timoshkov\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"wine/winbase16.h\"\n#include \"wine/winuser16.h\"\n#include <WowNT32.h>\n"
  },
  {
    "path": "ctl3d/ctl3d.def",
    "content": "; File generated automatically from ..\\ctl3d\\ctl3d.dll16.spec; do not edit!\n\nLIBRARY ctl3d.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "ctl3d/ctl3d.dll16.spec",
    "content": "1  pascal -ret16 Ctl3dGetVer() Ctl3dGetVer16\n2  pascal -ret16 Ctl3dSubclassDlg(word word) Ctl3dSubclassDlg16\n3  pascal -ret16 Ctl3dSubclassCtl(word) Ctl3dSubclassCtl16\n4  pascal -ret16 Ctl3dCtlColor(word long) Ctl3dCtlColor16\n5  pascal -ret16 Ctl3dEnabled() Ctl3dEnabled16\n6  pascal -ret16 Ctl3dColorChange() Ctl3dColorChange16\n7  pascal BtnWndProc3d(word word word long) BtnWndProc3d16\n8  pascal EditWndProc3d(word word word long) EditWndProc3d16\n9  pascal ListWndProc3d(word word word long) ListWndProc3d16\n10 pascal ComboWndProc3d(word word word long) ComboWndProc3d16\n11 pascal StaticWndProc3d(word word word long) StaticWndProc3d16\n12 pascal -ret16 Ctl3dRegister(word) Ctl3dRegister16\n13 pascal -ret16 Ctl3dUnregister(word) Ctl3dUnregister16\n16 pascal -ret16 Ctl3dAutoSubclass(word) Ctl3dAutoSubclass16\n17 pascal Ctl3dDlgProc(word word word long) Ctl3dDlgProc16\n18 pascal -ret16 Ctl3dCtlColorEx(word word long) Ctl3dCtlColorEx16\n19 pascal -ret16 Ctl3dSetStyle(word long word) Ctl3dSetStyle16\n20 pascal Ctl3dDlgFramePaint(word word word long) Ctl3dDlgFramePaint16\n21 pascal -ret16 Ctl3dSubclassDlgEx(word long) Ctl3dSubclassDlgEx16\n22 pascal -ret16 Ctl3dWinIniChange() Ctl3dWinIniChange16\n23 pascal -ret16 Ctl3dIsAutoSubclass() Ctl3dIsAutoSubclass16\n24 pascal -ret16 Ctl3dUnAutoSubclass() Ctl3dUnAutoSubclass16\n25 pascal -ret16 Ctl3dSubclassCtlEx(word word) Ctl3dSubclassCtlEx16\n26 pascal -ret16 Ctl3dUnsubclassCtl(word) Ctl3dUnsubclassCtl16\n27 pascal -ret16 Ctl3dAutoSubclassEx(word long) Ctl3dAutoSubclassEx16\n"
  },
  {
    "path": "ctl3d/ctl3d.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>ctl3d</RootNamespace>\n    <ProjectGuid>{B1A8AC7F-6B94-4AD0-8471-2C44F3014B5A}</ProjectGuid>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)ctl3dv2.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nuser32.lib</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\nctl3d.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\nctl3d.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)ctl3dv2.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nuser32.lib</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"ctl3d.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"ctl3d.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"ctl3d.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" CTL3D &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" CTL3D &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "ctl3dv2/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(ctl3dv2 SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/ctl3dv2.def ctl3dv2.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(ctl3dv2.dll16 ctl3dv2)\ntarget_link_libraries(ctl3dv2 libwine winecrt0 krnl386 user)\nset_target_properties(ctl3dv2 PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "ctl3dv2/Makefile.in",
    "content": "MODULE    = ctl3dv2.dll16\nIMPORTS   = user32\nEXTRADLLFLAGS = -m16 -Wb,--main-module,ctl3d32.dll\n\nC_SRCS = ctl3d.c\n"
  },
  {
    "path": "ctl3dv2/ctl3d.c",
    "content": "/*\n * 16-bit CTL3D and CTL3DV2 API stubs.\n *\n * Copyright (c) 2003 Dmitry Timoshkov\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"wine/winbase16.h\"\n#include \"wine/winuser16.h\"\n#include <WowNT32.h>\n\n/* Ctl3dSubclassDlg */\n#define CTL3D_BUTTONS 0x0001\n#define CTL3D_LISTBOXES 0x0002\n#define CTL3D_EDITS 0x0004\n#define CTL3D_COMBOS 0x0008\n#define CTL3D_STATICTEXTS 0x0010\n#define CTL3D_STATICFRAMES 0x0020\n#define CTL3D_ALL 0xffff\n\n/* resource */\n#define CTL3D_3DCHECK 26567\n\n/* Ctl3dSubclassDlgEx */\n#define CTL3D_NODLGWINDOW 0x00010000\n/* WM_DLGBORDER result */\n#define WM_DLGBORDER (WM_USER + 3567)\n#define CTL3D_NOBORDER 0\n#define CTL3D_BORDER 1\n\n/* WM_DLGSUBCLASS result */\n#define WM_DLGSUBCLASS (WM_USER + 3568)\n#define CTL3D_NOSUBCLASS 0\n#define CTL3D_SUBCLASS 1\n\n#define CTLMSGOFFSET 3569\n#define CTL3D_CTLCOLOR (WM_USER + CTLMSGOFFSET)\n\nstruct autosubclass\n{\n    HHOOK hook;\n    DWORD type;\n};\n\nstatic DWORD autosubclass_index = NULL;\n\nstatic WNDPROC listbox_proc;\nstatic WNDPROC button_proc;\nstatic WNDPROC static_proc;\nstatic WNDPROC combo_proc;\nstatic WNDPROC edit_proc;\nstatic WNDPROC dialog_proc;\nLRESULT WINAPI __wine_call_wndproc(HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam, WNDPROC proc);\n\nBOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD reason, LPVOID lpvReserved)\n{\n    WNDCLASSA cls;\n    switch (reason)\n    {\n    case DLL_PROCESS_ATTACH:\n        if (GetClassInfoA(hinstDLL, \"LISTBOX\", &cls))\n            listbox_proc = cls.lpfnWndProc;\n        if (GetClassInfoA(hinstDLL, \"BUTTON\", &cls))\n            button_proc = cls.lpfnWndProc;\n        if (GetClassInfoA(hinstDLL, \"STATIC\", &cls))\n            static_proc = cls.lpfnWndProc;\n        if (GetClassInfoA(hinstDLL, \"COMBOBOX\", &cls))\n            combo_proc = cls.lpfnWndProc;\n        if (GetClassInfoA(hinstDLL, \"EDIT\", &cls))\n            edit_proc = cls.lpfnWndProc;\n        if (GetClassInfoA(hinstDLL, \"#32770\", &cls))\n            dialog_proc = cls.lpfnWndProc;\n        autosubclass_index = TlsAlloc();\n        break;\n    case DLL_PROCESS_DETACH:\n        TlsFree(autosubclass_index);\n        break;\n    case DLL_THREAD_DETACH:\n    {\n        struct autosubclass *asc = TlsGetValue(autosubclass_index);\n        if (asc)\n        {\n            UnhookWindowsHookEx(asc->hook);\n            HeapFree(GetProcessHeap(), 0, asc);\n        }\n        break;\n    }\n    }\n    return TRUE;\n}\n\nstatic void ctl3d_static(DWORD type, DWORD *style, DWORD *exstyle)\n{\n    switch (*style & 0xf)\n    {\n        case SS_BLACKFRAME:\n            if (type & CTL3D_STATICFRAMES)\n            {\n                *style &= ~SS_BLACKFRAME;\n                *exstyle |= WS_EX_CLIENTEDGE;\n            }\n            break;\n        case SS_GRAYFRAME:\n            if (type & CTL3D_STATICFRAMES)\n            {\n                *style &= ~SS_GRAYFRAME;\n                *style |= SS_ETCHEDFRAME;\n            }\n            break;\n        case SS_WHITEFRAME:\n            if (type & CTL3D_STATICFRAMES)\n            {\n                *style &= ~SS_WHITEFRAME;\n                *exstyle |= WS_EX_DLGMODALFRAME;\n            }\n            break;\n        case SS_BLACKRECT:\n            if (type & CTL3D_STATICTEXTS)\n            {\n                *style &= ~SS_BLACKRECT;\n                *exstyle |= WS_EX_CLIENTEDGE;\n            }\n            break;\n        case SS_GRAYRECT:\n            if (type & CTL3D_STATICTEXTS)\n            {\n                *style &= ~SS_GRAYRECT;\n                *style |= SS_ETCHEDFRAME;\n            }\n            break;\n        case SS_WHITERECT:\n            if (type & CTL3D_STATICTEXTS)\n            {\n                *style &= ~SS_WHITERECT;\n                *exstyle |= WS_EX_DLGMODALFRAME;\n            }\n            break;\n    }\n}                              \n\nstatic LRESULT CALLBACK subclassproc(INT code, WPARAM wp, LPARAM lp)\n{\n    struct autosubclass *asc = TlsGetValue(autosubclass_index);\n    if (code == HCBT_CREATEWND)\n    {\n        CBT_CREATEWNDA *cbt_cw = (CBT_CREATEWNDA *)lp;\n        char *cls = cbt_cw->lpcs->lpszClass;\n        if ((DWORD)cls & 0xffff0000)\n        {\n            if ((asc->type & CTL3D_EDITS) && (!strcmpi(cls, \"EDIT\")) || ((asc->type & CTL3D_LISTBOXES) && !strcmpi(cls, \"LISTBOX\")))\n            {\n                DWORD exstyle = cbt_cw->lpcs->dwExStyle | WS_EX_CLIENTEDGE;\n                SetWindowLongA(wp, GWL_EXSTYLE, exstyle);\n            }\n            if (!strcmpi(cls, \"STATIC\"))\n            {\n                DWORD style = cbt_cw->lpcs->style;\n                DWORD exstyle = cbt_cw->lpcs->dwExStyle;\n                ctl3d_static(asc->type, &style, &exstyle);\n                cbt_cw->lpcs->style = style;\n                cbt_cw->lpcs->dwExStyle = exstyle;\n                SetWindowLongA(wp, GWL_STYLE, style);\n                SetWindowLongA(wp, GWL_EXSTYLE, exstyle);\n            }\n        }\n    }\n    return CallNextHookEx(asc->hook, code, wp, lp);\n}\n\n/***********************************************************************\n *\t\tCtl3dAutoSubclassEx (CTL3DV2.27)\n */\nBOOL16 WINAPI Ctl3dAutoSubclassEx16(HINSTANCE16 hInst, DWORD type)\n{\n    struct autosubclass *asc = TlsGetValue(autosubclass_index);\n    if (!asc)\n    {\n        asc = (struct autosubclass *)HeapAlloc(GetProcessHeap(), 0, sizeof(struct autosubclass));\n        asc->hook = SetWindowsHookExA(WH_CBT, subclassproc, NULL, GetCurrentThreadId());\n        TlsSetValue(autosubclass_index, asc);\n    }\n    asc->type = type;\n    return TRUE;\n}\n\n/***********************************************************************\n *\t\tCtl3dAutoSubclass (CTL3DV2.16)\n */\nBOOL16 WINAPI Ctl3dAutoSubclass16(HINSTANCE16 hInst)\n{\n    Ctl3dAutoSubclassEx16(hInst, CTL3D_ALL);\n    return TRUE;\n}\n\n/***********************************************************************\n *\t\tCtl3dColorChange (CTL3DV2.6)\n */\nBOOL16 WINAPI Ctl3dColorChange16(void)\n{\n    return TRUE;\n}\n\n/***********************************************************************\n *\t\tCtl3dCtlColor (CTL3DV2.4)\n */\nHBRUSH WINAPI Ctl3dCtlColor16(HDC16 hdc, LONG hwnd)\n{\n    return 0;\n}\n\n/***********************************************************************\n *\t\tCtl3dCtlColorEx (CTL3DV2.18)\n */\nHBRUSH WINAPI Ctl3dCtlColorEx16(UINT16 msg, WPARAM16 wParam, LPARAM lParam)\n{\n    return 0;\n}\n\n/***********************************************************************\n *\t\tCtl3dDlgFramePaint (CTL3DV2.20)\n */\nLRESULT WINAPI Ctl3dDlgFramePaint16(HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam)\n{\n    return __wine_call_wndproc(hwnd, msg, wParam, lParam, DefWindowProcA);\n}\n\n/***********************************************************************\n *\t\tCtl3dEnabled (CTL3DV2.5)\n */\nBOOL16 WINAPI Ctl3dEnabled16(void)\n{\n    return FALSE;\n}\n\n/***********************************************************************\n *\t\tCtl3dGetVer (CTL3DV2.1)\n */\nWORD WINAPI Ctl3dGetVer16(void)\n{\n    return MAKEWORD(31,2);\n}\n\n/***********************************************************************\n *\t\tCtl3dIsAutoSubclass (CTL3DV2.23)\n */\nBOOL16 WINAPI Ctl3dIsAutoSubclass16(void)\n{\n    return TlsGetValue(autosubclass_index) ? TRUE : FALSE;\n}\n\n/***********************************************************************\n *\t\tCtl3dRegister (CTL3DV2.12)\n */\nBOOL16 WINAPI Ctl3dRegister16(HINSTANCE16 hInst)\n{\n    return TRUE;\n}\n\n\n/***********************************************************************\n*\t\tCtl3dSubclassCtlEx (CTL3DV2.25)\n*/\nBOOL16 WINAPI Ctl3dSubclassCtlEx16(HWND16 hwnd, INT16 type)\n{\n    HWND hwnd32 = HWND_32(hwnd);\n    char buf[200] = { 0 };\n    GetClassNameA(hwnd32, buf, sizeof(buf));\n    if ((type & CTL3D_EDITS) && (!strcmpi(buf, \"EDIT\")) || ((type & CTL3D_LISTBOXES) && !strcmpi(buf, \"LISTBOX\")))\n    {\n        SetWindowLongA(hwnd32, GWL_EXSTYLE, GetWindowLongA(hwnd32, GWL_EXSTYLE) | WS_EX_CLIENTEDGE);\n        SetWindowPos(hwnd32, 0, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_DRAWFRAME);\n    }\n    else if (!strcmpi(buf, \"STATIC\"))\n    {\n        DWORD style = GetWindowLongA(hwnd32, GWL_STYLE);\n        DWORD exstyle = GetWindowLongA(hwnd32, GWL_EXSTYLE);\n        ctl3d_static(type, &style, &exstyle);\n        SetWindowLongA(hwnd32, GWL_STYLE, style);\n        SetWindowLongA(hwnd32, GWL_EXSTYLE, exstyle);\n    }\n    return TRUE;\n}\n\n/***********************************************************************\n *\t\tCtl3dSubclassCtl (CTL3DV2.3)\n */\nBOOL16 WINAPI Ctl3dSubclassCtl16(HWND16 hwnd)\n{\n    return Ctl3dSubclassCtlEx16(hwnd, CTL3D_ALL);\n}\n\nstruct ctl3d_enumproc\n{\n    HWND parent;\n    DWORD types;\n};\nBOOL CALLBACK ctl3d_enumproc(HWND hwnd, LPARAM lparam)\n{\n    struct ctl3d_enumproc *data = (struct ctl3d_enumproc*)lparam;\n    if (GetParent(hwnd) != data->parent)\n        return TRUE;\n    Ctl3dSubclassCtlEx16(HWND_16(hwnd), data->types);\n}\n/***********************************************************************\n *\t\tCtl3dSubclassDlgEx (CTL3DV2.21)\n */\nBOOL16 WINAPI Ctl3dSubclassDlgEx16(HWND16 hwnd, DWORD types)\n{\n    struct ctl3d_enumproc data = { 0 };\n    data.parent = HWND_32(hwnd);\n    data.types = types;\n    EnumChildWindows(data.parent, ctl3d_enumproc, (LPARAM)&data);\n    return FALSE;\n}\n\n/***********************************************************************\n*\t\tCtl3dSubclassDlg (CTL3DV2.2)\n*/\nBOOL16 WINAPI Ctl3dSubclassDlg16(HWND16 hwnd, WORD types)\n{\n    return Ctl3dSubclassDlgEx16(hwnd, types);\n}\n\n/***********************************************************************\n *\t\tCtl3dUnAutoSubclass (CTL3DV2.24)\n */\nBOOL16 WINAPI Ctl3dUnAutoSubclass16(void)\n{\n    struct autosubclass *asc = TlsGetValue(autosubclass_index);\n    if (asc)\n    {\n        UnhookWindowsHookEx(asc->hook);\n        HeapFree(GetProcessHeap(), 0, asc);\n        TlsSetValue(autosubclass_index, 0);\n    }\n    return FALSE;\n}\n\n/***********************************************************************\n *\t\tCtl3dUnregister (CTL3DV2.13)\n */\nBOOL16 WINAPI Ctl3dUnregister16(HINSTANCE16 hInst)\n{\n    Ctl3dUnAutoSubclass16();\n    return TRUE;\n}\n\n/***********************************************************************\n *\t\tCtl3dUnsubclassCtl (CTL3DV2.26)\n */\nBOOL16 WINAPI Ctl3dUnsubclassCtl16(HWND16 hwnd)\n{\n    return FALSE;\n}\n\n/***********************************************************************\n *\t\tCtl3dWinIniChange (CTL3DV2.22)\n */\nvoid WINAPI Ctl3dWinIniChange16(void)\n{\n}\n\n/***********************************************************************\n *\t\tComboWndProc3d (CTL3DV2.10)\n */\nLRESULT WINAPI ComboWndProc3d16(HWND16 hwnd, UINT16 msg,WPARAM16 wparam, LPARAM lparam)\n{\n    return __wine_call_wndproc(hwnd, msg, wparam, lparam, combo_proc);\n}\n\n/***********************************************************************\n *\t\tBtnWndProc3d (CTL3DV2.7)\n */\nLRESULT WINAPI BtnWndProc3d16(HWND16 hwnd, UINT16 msg, WPARAM16 wparam, LPARAM lparam)\n{\n    return __wine_call_wndproc(hwnd, msg, wparam, lparam, button_proc);\n}\n\n/***********************************************************************\n *\t\tStaticWndProc3d (CTL3DV2.11)\n */\nLRESULT WINAPI StaticWndProc3d16(HWND16 hwnd, UINT16 msg, WPARAM16 wparam, LPARAM lparam)\n{\n    return __wine_call_wndproc(hwnd, msg, wparam, lparam, static_proc);\n}\n\n/***********************************************************************\n *\t\tEditWndProc3d (CTL3DV2.8)\n */\nLRESULT WINAPI EditWndProc3d16(HWND16 hwnd, UINT16 msg, WPARAM16 wparam, LPARAM lparam)\n{\n    return __wine_call_wndproc(hwnd, msg, wparam, lparam, edit_proc);\n}\n\n/***********************************************************************\n *\t\tListWndProc3d (CTL3DV2.9)\n */\nLRESULT WINAPI ListWndProc3d16(HWND16 hwnd, UINT16 msg, WPARAM16 wparam, LPARAM lparam)\n{\n    return __wine_call_wndproc(hwnd, msg, wparam, lparam, listbox_proc);\n}\n\n/***********************************************************************\n *\t\tCtl3dDlgProc (CTL3DV2.17)\n */\nLRESULT WINAPI Ctl3dDlgProc16(HWND16 hwnd, UINT16 msg, WPARAM16 wparam, LPARAM lparam)\n{\n    return __wine_call_wndproc(hwnd, msg, wparam, lparam, dialog_proc);\n}\n\nWORD WINAPI Ctl3dSetStyle16(WORD a1, SEGPTR a2, WORD a3)\n{\n    return 0;\n}\n"
  },
  {
    "path": "ctl3dv2/ctl3dv2.def",
    "content": "; File generated automatically from ..\\ctl3dv2\\ctl3dv2.dll16.spec; do not edit!\n\nLIBRARY ctl3dv2.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n  Ctl3dGetVer16\n  Ctl3dSubclassDlg16\n  Ctl3dSubclassCtl16\n  Ctl3dCtlColor16\n  Ctl3dEnabled16\n  Ctl3dColorChange16\n  BtnWndProc3d16\n  EditWndProc3d16\n  ListWndProc3d16\n  ComboWndProc3d16\n  StaticWndProc3d16\n  Ctl3dRegister16\n  Ctl3dUnregister16\n  Ctl3dAutoSubclass16\n  Ctl3dDlgProc16\n  Ctl3dCtlColorEx16\n  Ctl3dSetStyle16\n  Ctl3dDlgFramePaint16\n  Ctl3dSubclassDlgEx16\n  Ctl3dWinIniChange16\n  Ctl3dIsAutoSubclass16\n  Ctl3dUnAutoSubclass16\n  Ctl3dSubclassCtlEx16\n  Ctl3dUnsubclassCtl16\n  Ctl3dAutoSubclassEx16\n"
  },
  {
    "path": "ctl3dv2/ctl3dv2.dll16.spec",
    "content": "1  pascal -ret16 Ctl3dGetVer() Ctl3dGetVer16\n2  pascal -ret16 Ctl3dSubclassDlg(word word) Ctl3dSubclassDlg16\n3  pascal -ret16 Ctl3dSubclassCtl(word) Ctl3dSubclassCtl16\n4  pascal -ret16 Ctl3dCtlColor(word long) Ctl3dCtlColor16\n5  pascal -ret16 Ctl3dEnabled() Ctl3dEnabled16\n6  pascal -ret16 Ctl3dColorChange() Ctl3dColorChange16\n7  pascal BtnWndProc3d(word word word long) BtnWndProc3d16\n8  pascal EditWndProc3d(word word word long) EditWndProc3d16\n9  pascal ListWndProc3d(word word word long) ListWndProc3d16\n10 pascal ComboWndProc3d(word word word long) ComboWndProc3d16\n11 pascal StaticWndProc3d(word word word long) StaticWndProc3d16\n12 pascal -ret16 Ctl3dRegister(word) Ctl3dRegister16\n13 pascal -ret16 Ctl3dUnregister(word) Ctl3dUnregister16\n16 pascal -ret16 Ctl3dAutoSubclass(word) Ctl3dAutoSubclass16\n17 pascal Ctl3dDlgProc(word word word long) Ctl3dDlgProc16\n18 pascal -ret16 Ctl3dCtlColorEx(word word long) Ctl3dCtlColorEx16\n19 pascal -ret16 Ctl3dSetStyle(word long word) Ctl3dSetStyle16\n20 pascal Ctl3dDlgFramePaint(word word word long) Ctl3dDlgFramePaint16\n21 pascal -ret16 Ctl3dSubclassDlgEx(word long) Ctl3dSubclassDlgEx16\n22 pascal -ret16 Ctl3dWinIniChange() Ctl3dWinIniChange16\n23 pascal -ret16 Ctl3dIsAutoSubclass() Ctl3dIsAutoSubclass16\n24 pascal -ret16 Ctl3dUnAutoSubclass() Ctl3dUnAutoSubclass16\n25 pascal -ret16 Ctl3dSubclassCtlEx(word word) Ctl3dSubclassCtlEx16\n26 pascal -ret16 Ctl3dUnsubclassCtl(word) Ctl3dUnsubclassCtl16\n27 pascal -ret16 Ctl3dAutoSubclassEx(word long) Ctl3dAutoSubclassEx16\n\n@ stdcall -arch=win32 Ctl3dGetVer16()\n@ stdcall -arch=win32 Ctl3dSubclassDlg16(long long)\n@ stdcall -arch=win32 Ctl3dSubclassCtl16(long)\n@ stdcall -arch=win32 Ctl3dCtlColor16(long long)\n@ stdcall -arch=win32 Ctl3dEnabled16()\n@ stdcall -arch=win32 Ctl3dColorChange16()\n@ stdcall -arch=win32 BtnWndProc3d16(long long long long)\n@ stdcall -arch=win32 EditWndProc3d16(long long long long)\n@ stdcall -arch=win32 ListWndProc3d16(long long long long)\n@ stdcall -arch=win32 ComboWndProc3d16(long long long long)\n@ stdcall -arch=win32 StaticWndProc3d16(long long long long)\n@ stdcall -arch=win32 Ctl3dRegister16(long)\n@ stdcall -arch=win32 Ctl3dUnregister16(long)\n@ stdcall -arch=win32 Ctl3dAutoSubclass16(long)\n@ stdcall -arch=win32 Ctl3dDlgProc16(long long long long)\n@ stdcall -arch=win32 Ctl3dCtlColorEx16(long long long)\n@ stdcall -arch=win32 Ctl3dSetStyle16(long long long)\n@ stdcall -arch=win32 Ctl3dDlgFramePaint16(long long long long)\n@ stdcall -arch=win32 Ctl3dSubclassDlgEx16(long long)\n@ stdcall -arch=win32 Ctl3dWinIniChange16()\n@ stdcall -arch=win32 Ctl3dIsAutoSubclass16()\n@ stdcall -arch=win32 Ctl3dUnAutoSubclass16()\n@ stdcall -arch=win32 Ctl3dSubclassCtlEx16(long long)\n@ stdcall -arch=win32 Ctl3dUnsubclassCtl16(long)\n@ stdcall -arch=win32 Ctl3dAutoSubclassEx16(long long)\n"
  },
  {
    "path": "ctl3dv2/ctl3dv2.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>ctl3dv2</RootNamespace>\n    <ProjectGuid>{7F73550E-724D-4F7A-B192-35A764AC24D6}</ProjectGuid>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)user.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nuser32.lib</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\nctl3dv2.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\nctl3dv2.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)user.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nuser32.lib</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"ctl3d.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"ctl3dv2.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"ctl3dv2.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" CTL3DV2 &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" CTL3DV2 &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"ctl3dv2.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "ddeml/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(ddeml SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/ddeml.def ddeml.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(ddeml.dll16 ddeml)\ntarget_link_libraries(ddeml libwine winecrt0 krnl386)\nset_target_properties(ddeml PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "ddeml/Makefile.in",
    "content": "MODULE    = ddeml.dll16\nIMPORTS   = user32\nEXTRADLLFLAGS = -m16\n\nC_SRCS = ddeml.c\n"
  },
  {
    "path": "ddeml/ddeml.c",
    "content": "/*\n * DDEML library\n *\n * Copyright 1997 Alexandre Julliard\n * Copyright 1997 Len White\n * Copyright 1999 Keith Matthews\n * Copyright 2000 Corel\n * Copyright 2001,2002,2009 Eric Pouech\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdarg.h>\n#include <string.h>\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/windef16.h\"\n#include \"wine/winbase16.h\"\n#include \"wownt32.h\"\n#include \"dde.h\"\n#include \"ddeml.h\"\n#include \"winuser.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(ddeml);\n\n\ntypedef HDDEDATA (CALLBACK *PFNCALLBACK16)(UINT16,UINT16,HCONV,HSZ,HSZ,HDDEDATA,\n                                           DWORD,DWORD);\n\ntypedef struct\n{\n    UINT16  cb;\n    UINT16  wFlags;\n    UINT16  wCountryID;\n    INT16   iCodePage;\n    DWORD   dwLangID;\n    DWORD   dwSecurity;\n} CONVCONTEXT16, *LPCONVCONTEXT16;\n\ntypedef struct\n{\n    DWORD          cb;\n    DWORD          hUser;\n    HCONV          hConvPartner;\n    HSZ            hszSvcPartner;\n    HSZ            hszServiceReq;\n    HSZ            hszTopic;\n    HSZ            hszItem;\n    UINT16         wFmt;\n    UINT16         wType;\n    UINT16         wStatus;\n    UINT16         wConvst;\n    UINT16         wLastError;\n    HCONVLIST      hConvList;\n    CONVCONTEXT16  ConvCtxt;\n} CONVINFO16, *LPCONVINFO16;\n\nstatic void map1632_conv_context(CONVCONTEXT* cc32, const CONVCONTEXT16* cc16)\n{\n    cc32->cb = sizeof(*cc32);\n    cc32->wFlags = cc16->wFlags;\n    cc32->wCountryID = cc16->wCountryID;\n    cc32->iCodePage = cc16->iCodePage;\n    cc32->dwLangID = cc16->dwLangID;\n    cc32->dwSecurity = cc16->dwSecurity;\n}\n\nstatic void map3216_conv_context(CONVCONTEXT16* cc16, const CONVCONTEXT* cc32)\n{\n    cc16->cb = sizeof(*cc16);\n    cc16->wFlags = cc32->wFlags;\n    cc16->wCountryID = cc32->wCountryID;\n    cc16->iCodePage = cc32->iCodePage;\n    cc16->dwLangID = cc32->dwLangID;\n    cc16->dwSecurity = cc32->dwSecurity;\n}\n\n/******************************************************************\n *\t\tWDML_InvokeCallback16\n *\n *\n */\nstatic HDDEDATA\tCALLBACK WDML_InvokeCallback16(DWORD pfn16, UINT uType, UINT uFmt,\n                                               HCONV hConv, HSZ hsz1, HSZ hsz2,\n                                               HDDEDATA hdata, ULONG_PTR dwData1, ULONG_PTR dwData2)\n{\n    DWORD               d1 = 0;\n    HDDEDATA            ret;\n    CONVCONTEXT16       cc16;\n    WORD args[14];\n\n    switch (uType)\n    {\n    case XTYP_CONNECT:\n    case XTYP_WILDCONNECT:\n        if (dwData1)\n        {\n            map3216_conv_context(&cc16, (const CONVCONTEXT*)dwData1);\n            d1 = MapLS(&cc16);\n        }\n        break;\n    default:\n        d1 = dwData1;\n        break;\n    }\n    args[13] = uType;\n    args[12] = uFmt;\n    args[11] = HIWORD(hConv);\n    args[10] = LOWORD(hConv);\n    args[9]  = HIWORD(hsz1);\n    args[8]  = LOWORD(hsz1);\n    args[7]  = HIWORD(hsz2);\n    args[6]  = LOWORD(hsz2);\n    args[5]  = HIWORD(hdata);\n    args[4]  = LOWORD(hdata);\n    args[3]  = HIWORD(d1);\n    args[2]  = LOWORD(d1);\n    args[1]  = HIWORD(dwData2);\n    args[0]  = LOWORD(dwData2);\n    WOWCallback16Ex(pfn16, WCB16_PASCAL, sizeof(args), args, (DWORD *)&ret);\n\n    switch (uType)\n    {\n    case XTYP_CONNECT:\n    case XTYP_WILDCONNECT:\n        if (d1 != 0) UnMapLS(d1);\n        break;\n    }\n    return ret;\n}\n\n#define MAX_THUNKS      32\n/* As DDEML doesn't provide a way to get back to an InstanceID when\n * a callback is run, we use thunk in order to implement simply the\n * 32bit->16bit callback mechanism.\n * For each 16bit instance, we create a thunk, which will be passed as\n * a 32bit callback. This thunk also stores (in the code!) the 16bit\n * address of the 16bit callback, and passes it back to\n * WDML_InvokeCallback16.\n * The code below is mainly to create the thunks themselves\n */\n#include \"pshpack1.h\"\nstatic struct ddeml_thunk\n{\n    BYTE        popl_eax;        /* popl  %eax (return address) */\n    BYTE        pushl_func;      /* pushl $pfn16 (16bit callback function) */\n    SEGPTR      pfn16;\n    BYTE        pushl_eax;       /* pushl %eax */\n    BYTE        jmp;             /* ljmp WDML_InvokeCallback16 */\n    DWORD       callback;\n    DWORD       instId;          /* instance ID */\n} *DDEML16_Thunks;\n#include \"poppack.h\"\n\nstatic CRITICAL_SECTION ddeml_cs;\nstatic CRITICAL_SECTION_DEBUG critsect_debug =\n{\n    0, 0, &ddeml_cs,\n    { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },\n      0, 0, { (DWORD_PTR)(__FILE__ \": ddeml_cs\") }\n};\nstatic CRITICAL_SECTION ddeml_cs = { &critsect_debug, -1, 0, 0, 0, 0 };\n\nstatic struct ddeml_thunk*      DDEML_AddThunk(DWORD instId, DWORD pfn16)\n{\n    struct ddeml_thunk* thunk;\n\n    if (!DDEML16_Thunks)\n    {\n        DDEML16_Thunks = VirtualAlloc(NULL, MAX_THUNKS * sizeof(*DDEML16_Thunks), MEM_COMMIT,\n                                      PAGE_EXECUTE_READWRITE);\n        if (!DDEML16_Thunks) return NULL;\n        for (thunk = DDEML16_Thunks; thunk < &DDEML16_Thunks[MAX_THUNKS]; thunk++)\n        {\n            thunk->popl_eax     = 0x58;   /* popl  %eax */\n            thunk->pushl_func   = 0x68;   /* pushl $pfn16 */\n            thunk->pfn16        = 0;\n            thunk->pushl_eax    = 0x50;   /* pushl %eax */\n            thunk->jmp          = 0xe9;   /* jmp WDML_InvokeCallback16 */\n            thunk->callback     = (char *)WDML_InvokeCallback16 - (char *)(&thunk->callback + 1);\n            thunk->instId       = 0;\n        }\n    }\n    for (thunk = DDEML16_Thunks; thunk < &DDEML16_Thunks[MAX_THUNKS]; thunk++)\n    {\n        /* either instId is 0, and we're looking for an empty slot, or\n         * instId is an already existing instance, and we should find its thunk\n         */\n        if (thunk->instId == instId)\n        {\n            thunk->pfn16 = pfn16;\n            return thunk;\n        }\n    }\n    FIXME(\"Out of ddeml-thunks. Bump MAX_THUNKS\\n\");\n    return NULL;\n}\n\nHSZ hsz_progman;\nHSZ hsz_progman16;\nstatic void init_hsz()\n{\n    if (!hsz_progman)\n    {\n        hsz_progman = (HSZ)(ULONG_PTR)AddAtomA(\"Progman\");\n    }\n    if (!hsz_progman16)\n    {\n        hsz_progman16 = (HSZ)(ULONG_PTR)AddAtomA(\"Progman16\");\n    }\n}\nstatic HSZ service16_32(HSZ hsz)\n{\n    init_hsz();\n    if (hsz_progman == hsz)\n        return hsz_progman16;\n    return hsz;\n}\n\nstatic HSZ service32_16(HSZ hsz)\n{\n    init_hsz();\n    if (hsz_progman16 == hsz)\n        return hsz_progman;\n    return hsz;\n}\n\nstatic HSZ topic16_32(HSZ hsz)\n{\n    init_hsz();\n    if (hsz_progman == hsz)\n        return hsz_progman16;\n    return hsz;\n}\n\nstatic HSZ topic32_16(HSZ hsz)\n{\n    init_hsz();\n    if (hsz_progman16 == hsz)\n        return hsz_progman;\n    return hsz;\n}\n\n/******************************************************************************\n *            DdeInitialize   (DDEML.2)\n */\nUINT16 WINAPI DdeInitialize16(LPDWORD pidInst, PFNCALLBACK16 pfnCallback,\n\t\t\t      DWORD afCmd, DWORD ulRes)\n{\n    UINT16 ret;\n    DWORD count;\n    struct ddeml_thunk* thunk;\n    // Undocumented 0x800 causes DdeClientTransaction to call DdeUninitialize which will likely\n    // create a deadlock with XTYP_EXECUTE if the client and server are in the same process\n    afCmd &= ~0x800;\n    // MF_POSTMSGS causes also deadlocks in DdeDisconnect in the client thread\n    afCmd &= ~MF_POSTMSGS;\n\n    ReleaseThunkLock(&count);\n    EnterCriticalSection(&ddeml_cs);\n    if ((thunk = DDEML_AddThunk(*pidInst, (DWORD)pfnCallback)))\n    {\n        ret = DdeInitializeA(pidInst, (PFNCALLBACK)thunk, afCmd, ulRes);\n        if (ret == DMLERR_NO_ERROR) thunk->instId = *pidInst;\n    }\n    else ret = DMLERR_SYS_ERROR;\n    LeaveCriticalSection(&ddeml_cs);\n    RestoreThunkLock(count);\n    return ret;\n}\n\n/*****************************************************************\n *            DdeUninitialize   (DDEML.3)\n */\nBOOL16 WINAPI DdeUninitialize16(DWORD idInst)\n{\n    struct ddeml_thunk* thunk;\n    BOOL16              ret = FALSE;\n\n    if (!DdeUninitialize(idInst)) return FALSE;\n    EnterCriticalSection(&ddeml_cs);\n    for (thunk = DDEML16_Thunks; thunk < &DDEML16_Thunks[MAX_THUNKS]; thunk++)\n    {\n        if (thunk->instId == idInst)\n        {\n            thunk->instId = 0;\n            ret = TRUE;\n            break;\n        }\n    }\n    LeaveCriticalSection(&ddeml_cs);\n    if (!ret) FIXME(\"Should never happen\\n\");\n    return ret;\n}\n\n/*****************************************************************\n * DdeConnectList [DDEML.4]\n */\n\nHCONVLIST WINAPI DdeConnectList16(DWORD idInst, HSZ hszService, HSZ hszTopic,\n\t\t\t\t  HCONVLIST hConvList, LPCONVCONTEXT16 pCC16)\n{\n    CONVCONTEXT\t        cc;\n    CONVCONTEXT*\tpCC = NULL;\n\n    if (pCC16)\n        map1632_conv_context(pCC = &cc, pCC16);\n    return DdeConnectList(idInst, service16_32(hszService), topic16_32(hszTopic), hConvList, pCC);\n}\n\n/*****************************************************************\n * DdeQueryNextServer [DDEML.5]\n */\nHCONV WINAPI DdeQueryNextServer16(HCONVLIST hConvList, HCONV hConvPrev)\n{\n    return DdeQueryNextServer(hConvList, hConvPrev);\n}\n\n/*****************************************************************\n *            DdeDisconnectList (DDEML.6)\n */\nBOOL16 WINAPI DdeDisconnectList16(HCONVLIST hConvList)\n{\n    return (BOOL16)DdeDisconnectList(hConvList);\n}\n\n\n/*****************************************************************\n *\t\tDdeQueryString (DDEML.23)\n */\nDWORD WINAPI DdeQueryString16(DWORD idInst, HSZ hsz, LPSTR lpsz, DWORD cchMax,\n                              INT16 codepage)\n{\n    if (codepage != CP_WINANSI)\n    {\n        if (!codepage || (codepage == GetKBCodePage()))\n            WARN(\"Codepage %x supplied but only CP_WINANSI is supported\\n\", codepage);\n        else\n        {\n            ERR(\"Invalid codepage %x\\n\", codepage);\n            return DMLERR_INVALIDPARAMETER;\n        }\n    }\n\n    return DdeQueryStringA(idInst, hsz, lpsz, cchMax, CP_WINANSI);\n}\n\n/*****************************************************************\n *            DdeConnect   (DDEML.7)\n */\nHCONV WINAPI DdeConnect16(DWORD idInst, HSZ hszService, HSZ hszTopic,\n                          LPCONVCONTEXT16 pCC16)\n{\n    CONVCONTEXT\t        cc;\n    CONVCONTEXT*\tpCC = NULL;\n\n    if (pCC16)\n        map1632_conv_context(pCC = &cc, pCC16);\n    DWORD count;\n    ReleaseThunkLock(&count);\n    HCONV result = DdeConnect(idInst, service16_32(hszService), topic16_32(hszTopic), pCC);\n    RestoreThunkLock(count);\n    return result;\n}\n\n/*****************************************************************\n *            DdeDisconnect   (DDEML.8)\n */\nBOOL16 WINAPI DdeDisconnect16(HCONV hConv)\n{\n    return (BOOL16)DdeDisconnect(hConv);\n}\n\n/*****************************************************************\n *            DdeSetUserHandle (DDEML.10)\n */\nBOOL16 WINAPI DdeSetUserHandle16(HCONV hConv, DWORD id, DWORD hUser)\n{\n    return DdeSetUserHandle(hConv, id, hUser);\n}\n\n/*****************************************************************\n *            DdeCreateDataHandle (DDEML.14)\n */\nHDDEDATA WINAPI DdeCreateDataHandle16(DWORD idInst, LPBYTE pSrc, DWORD cb,\n                                      DWORD cbOff, HSZ hszItem, UINT16 wFmt,\n\t\t\t\t      UINT16 afCmd)\n{\n    return DdeCreateDataHandle(idInst, pSrc, cb, cbOff, hszItem, wFmt, afCmd);\n}\n\n/*****************************************************************\n *            DdeCreateStringHandle   (DDEML.21)\n */\nHSZ WINAPI DdeCreateStringHandle16(DWORD idInst, LPCSTR str, INT16 codepage)\n{\n    if (codepage != CP_WINANSI)\n    {\n        if (!codepage || (codepage == GetKBCodePage()))\n            WARN(\"Codepage %x supplied but only CP_WINANSI is supported\\n\", codepage);\n        else\n        {\n            ERR(\"Invalid codepage %x\\n\", codepage);\n            return DMLERR_INVALIDPARAMETER;\n        }\n    }\n    if (str && !stricmp(str, \"Progman\"))\n        str = \"Progman16\";\n  \n    return DdeCreateStringHandleA(idInst, str, CP_WINANSI);\n}\n\n/*****************************************************************\n *            DdeFreeStringHandle   (DDEML.22)\n */\nBOOL16 WINAPI DdeFreeStringHandle16(DWORD idInst, HSZ hsz)\n{\n    return (BOOL16)DdeFreeStringHandle(idInst, hsz);\n}\n\n/*****************************************************************\n *            DdeFreeDataHandle   (DDEML.19)\n */\nBOOL16 WINAPI DdeFreeDataHandle16(HDDEDATA hData)\n{\n    return (BOOL16)DdeFreeDataHandle(hData);\n}\n\n/*****************************************************************\n *            DdeKeepStringHandle   (DDEML.24)\n */\nBOOL16 WINAPI DdeKeepStringHandle16(DWORD idInst, HSZ hsz)\n{\n    return DdeKeepStringHandle(idInst, hsz);\n}\n\n/*****************************************************************\n *            DdeClientTransaction  (DDEML.11)\n */\nHDDEDATA WINAPI DdeClientTransaction16(LPVOID pData, DWORD cbData, HCONV hConv,\n                                       HSZ hszItem, UINT16 wFmt, UINT16 wType,\n                                       DWORD dwTimeout, LPDWORD pdwResult)\n{\n    if (cbData != (DWORD)-1)\n    {\n        /* pData is not a pointer if cbData is -1, so we linearize the address\n         * here rather than in the calling code. */\n        pData = MapSL((SEGPTR)pData);\n    }\n    HDDEDATA ret;\n    DWORD count;\n    ReleaseThunkLock(&count);\n    ret = DdeClientTransaction(pData, cbData, hConv, hszItem,\n                                wFmt, wType, dwTimeout, pdwResult);\n    RestoreThunkLock(count);\n    return ret;\n}\n\n/*****************************************************************\n *\n *            DdeAbandonTransaction (DDEML.12)\n *\n */\nBOOL16 WINAPI DdeAbandonTransaction16(DWORD idInst, HCONV hConv, DWORD idTransaction)\n{\n    return (BOOL16)DdeAbandonTransaction(idInst, hConv, idTransaction);\n}\n\n/*****************************************************************\n * DdePostAdvise [DDEML.13]\n */\nBOOL16 WINAPI DdePostAdvise16(DWORD idInst, HSZ hszTopic, HSZ hszItem)\n{\n    return (BOOL16)DdePostAdvise(idInst, topic16_32(hszTopic), hszItem);\n}\n\n/*****************************************************************\n *            DdeAddData (DDEML.15)\n */\nHDDEDATA WINAPI DdeAddData16(HDDEDATA hData, LPBYTE pSrc, DWORD cb, DWORD cbOff)\n{\n    return DdeAddData(hData, pSrc, cb, cbOff);\n}\n\n/*****************************************************************\n * DdeGetData [DDEML.16]\n */\nDWORD WINAPI DdeGetData16(HDDEDATA hData, LPBYTE pDst, DWORD cbMax, DWORD cbOff)\n{\n    return DdeGetData(hData, pDst, cbMax, cbOff);\n}\n\n/*****************************************************************\n *            DdeAccessData (DDEML.17)\n */\nLPBYTE WINAPI DdeAccessData16(HDDEDATA hData, LPDWORD pcbDataSize)\n{\n    FIXME(\"expect trouble\\n\");\n    /* FIXME: there's a memory leak here... */\n    return (LPBYTE)MapLS(DdeAccessData(hData, pcbDataSize));\n}\n\n/*****************************************************************\n *            DdeUnaccessData (DDEML.18)\n */\nBOOL16 WINAPI DdeUnaccessData16(HDDEDATA hData)\n{\n    return DdeUnaccessData(hData);\n}\n\n/*****************************************************************\n *            DdeEnableCallback (DDEML.26)\n */\nBOOL16 WINAPI DdeEnableCallback16(DWORD idInst, HCONV hConv, UINT16 wCmd)\n{\n    return DdeEnableCallback(idInst, hConv, wCmd);\n}\n\n/*****************************************************************\n *            DdeNameService  (DDEML.27)\n */\nHDDEDATA WINAPI DdeNameService16(DWORD idInst, HSZ hsz1, HSZ hsz2, UINT16 afCmd)\n{\n    return DdeNameService(idInst, service16_32(hsz1), hsz2, afCmd);\n}\n\n/*****************************************************************\n *            DdeGetLastError  (DDEML.20)\n */\nUINT16 WINAPI DdeGetLastError16(DWORD idInst)\n{\n    return (UINT16)DdeGetLastError(idInst);\n}\n\n/*****************************************************************\n *            DdeCmpStringHandles (DDEML.36)\n */\nINT16 WINAPI DdeCmpStringHandles16(HSZ hsz1, HSZ hsz2)\n{\n    return DdeCmpStringHandles(hsz1, hsz2);\n}\n\n/******************************************************************\n *\t\tDdeQueryConvInfo (DDEML.9)\n *\n */\nUINT16 WINAPI DdeQueryConvInfo16(HCONV hConv, DWORD idTransaction,\n                                 LPCONVINFO16 lpConvInfo)\n{\n    CONVINFO    ci32;\n    CONVINFO16  ci16;\n    UINT        ret;\n\n    ci32.cb = sizeof(ci32);\n    ci32.ConvCtxt.cb = sizeof(ci32.ConvCtxt);\n\n    ret = DdeQueryConvInfo(hConv, idTransaction, &ci32);\n    if (ret == 0) return 0;\n\n    ci16.cb = lpConvInfo->cb;\n    ci16.hUser = ci32.hUser;\n    ci16.hConvPartner = service32_16(ci32.hConvPartner);\n    ci16.hszSvcPartner = service32_16(ci32.hszSvcPartner);\n    ci16.hszServiceReq = service32_16(ci32.hszServiceReq);\n    ci16.hszTopic = topic32_16(ci32.hszTopic);\n    ci16.hszItem = topic32_16(ci32.hszItem);\n    ci16.wFmt = ci32.wFmt;\n    ci16.wType = ci32.wType;\n    ci16.wStatus = ci32.wStatus;\n    ci16.wConvst = ci32.wConvst;\n    ci16.wLastError = ci32.wLastError;\n    ci16.hConvList = ci32.hConvList;\n\n    map3216_conv_context(&ci16.ConvCtxt, &ci32.ConvCtxt);\n\n    memcpy(lpConvInfo, &ci16, lpConvInfo->cb);\n    return lpConvInfo->cb;\n}\n"
  },
  {
    "path": "ddeml/ddeml.def",
    "content": "; File generated automatically from ..\\ddeml\\ddeml.dll16.spec; do not edit!\n\nLIBRARY ddeml.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "ddeml/ddeml.dll16.spec",
    "content": "2 pascal -ret16 DdeInitialize(ptr segptr long long) DdeInitialize16\n3 pascal -ret16 DdeUninitialize(long) DdeUninitialize16\n4 pascal DdeConnectList(long long long long ptr) DdeConnectList16\n5 pascal DdeQueryNextServer(long long) DdeQueryNextServer16\n6 pascal -ret16 DdeDisconnectList(long) DdeDisconnectList16\n7 pascal DdeConnect(long long long ptr) DdeConnect16\n8 pascal -ret16 DdeDisconnect(long) DdeDisconnect16\n9 pascal -ret16 DdeQueryConvInfo(long long ptr) DdeQueryConvInfo16\n10 pascal -ret16 DdeSetUserHandle(long long long) DdeSetUserHandle16\n11 pascal DdeClientTransaction(long long long long word word long ptr) DdeClientTransaction16\n12 pascal -ret16 DdeAbandonTransaction(long long long) DdeAbandonTransaction16\n13 pascal -ret16 DdePostAdvise(long long long) DdePostAdvise16\n14 pascal DdeCreateDataHandle(long ptr long long long word word) DdeCreateDataHandle16\n15 pascal DdeAddData(long ptr long long) DdeAddData16\n16 pascal DdeGetData(long ptr long long) DdeGetData16\n17 pascal DdeAccessData(long ptr) DdeAccessData16\n18 pascal -ret16 DdeUnaccessData(long) DdeUnaccessData16\n19 pascal -ret16 DdeFreeDataHandle(long) DdeFreeDataHandle16\n20 pascal -ret16 DdeGetLastError(long) DdeGetLastError16\n21 pascal DdeCreateStringHandle(long str s_word) DdeCreateStringHandle16\n22 pascal -ret16 DdeFreeStringHandle(long long) DdeFreeStringHandle16\n23 pascal DdeQueryString(long long ptr long s_word) DdeQueryString16\n24 pascal -ret16 DdeKeepStringHandle(long long) DdeKeepStringHandle16\n\n26 pascal -ret16 DdeEnableCallback(long long word) DdeEnableCallback16\n27 pascal DdeNameService(long long long word) DdeNameService16\n\n36 pascal -ret16 DdeCmpStringHandles(long long) DdeCmpStringHandles16\n37 pascal DdeReconnect(long) DdeReconnect\n"
  },
  {
    "path": "ddeml/ddeml.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>ddeml</RootNamespace>\n    <ProjectGuid>{D4EED8A5-2B15-4299-9F65-D56383AC7848}</ProjectGuid>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nuser32.lib;</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\nddeml.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\nddeml.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nuser32.lib;</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"ddeml.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"ddeml.dll16.obj\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">as --32 -o ddeml.dll16.obj ddeml.dll16.asm</Command>\n      <AdditionalInputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">ddeml.dll16.asm;%(AdditionalInputs)</AdditionalInputs>\n    </Object>\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"ddeml.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" DDEML &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" DDEML &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "dispdib/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(dispdib SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/dispdib.def dispdib.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(dispdib.dll16 dispdib)\ntarget_link_libraries(dispdib libwine winecrt0 krnl386)\nset_target_properties(dispdib PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "dispdib/Makefile.in",
    "content": "MODULE    = dispdib.dll16\nEXTRADLLFLAGS = -m16\n\nC_SRCS = dispdib.c\n"
  },
  {
    "path": "dispdib/dispdib.c",
    "content": "/*\n * DISPDIB.dll\n *\n * Copyright 1998 Ove Kåven (with some help from Marcus Meissner)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n#include <string.h>\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n#include \"mmsystem.h\"\n#include \"wine/wingdi16.h\"\n#include \"windows/dispdib.h\"\n#include \"wine/debug.h\"\n#include \"../krnl386/dosexe.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(ddraw);\n\n#define width 320\n\nstatic HTASK16 owner = 0;\nstatic HDC dddc;\nstatic int height;\nstatic HWND ddhwnd;\nstatic INTPROC oldproc;\nstatic OUTPROC oldout[0x20];\nstatic INPROC oldin[0x20];\nstatic HANDLE running = 0;\nstatic BOOL vsync = FALSE;\nstatic BOOL hsync = FALSE;\nstatic LPVOID vram;\n\nstatic void draw()\n{\n    RECT rect;\n    int new_width, new_height;\n    const double r = 4.0 / 3.0;\n    HDC dc = GetDC(ddhwnd);\n    GetClientRect(ddhwnd, &rect);\n    /* aspect */\n    if (rect.right / r > rect.bottom)\n    {\n        new_height = rect.bottom;\n        new_width = rect.bottom * r;\n        RECT frect = rect;\n        frect.left = 0;\n        frect.right = (rect.right - new_width) / 2;\n        FillRect(dc, &frect, GetStockObject(DKGRAY_BRUSH));\n        frect.left = rect.right - (rect.right - new_width) / 2;\n        frect.right = rect.right;\n        FillRect(dc, &frect, GetStockObject(DKGRAY_BRUSH));\n    }\n    else\n    {\n        new_width = rect.right;\n        new_height = rect.right / r;\n        RECT frect = rect;\n        frect.top = 0;\n        frect.bottom = (rect.bottom - new_height) / 2;\n        FillRect(dc, &frect, GetStockObject(DKGRAY_BRUSH));\n        frect.top = rect.bottom - (rect.bottom - new_height) / 2;\n        frect.bottom = rect.bottom;\n        FillRect(dc, &frect, GetStockObject(DKGRAY_BRUSH));\n    }\n    StretchBlt(dc, (rect.right - new_width) / 2, (rect.bottom - new_height) / 2, new_width, new_height, dddc, 0, 0, width, height, SRCCOPY);\n    ReleaseDC(ddhwnd, dc);\n}\n\nstatic LRESULT CALLBACK ddwndproc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)\n{\n    static BOOL focus = FALSE, showcur = TRUE;\n    HWND parhwnd = (HWND)GetWindowLongA(hwnd, GWL_HWNDPARENT);\n    switch (uMsg)\n    {\n        case WM_KILLFOCUS:\n            if (!showcur)\n            {\n                ShowCursor(TRUE);\n                showcur = TRUE;\n            }\n        case WM_SETFOCUS:\n            focus = uMsg == WM_SETFOCUS;\n        case WM_KEYDOWN:\n        case WM_KEYUP:\n        case WM_CHAR:\n        case WM_DEADCHAR:\n        case WM_SYSKEYDOWN:\n        case WM_SYSKEYUP:\n        case WM_SYSCHAR:\n        case WM_SYSDEADCHAR:\n        case WM_UNICHAR:\n        case WM_TIMER:\n        case WM_CLOSE:\n            return CallWindowProcA((WNDPROC)GetWindowLongA(parhwnd, GWL_WNDPROC), parhwnd, uMsg, wParam, lParam);\n        case WM_SETCURSOR:\n            if ((LOWORD(lParam) == HTCLIENT) && focus && showcur)\n            {\n                ShowCursor(FALSE);\n                showcur = FALSE;\n            }\n            else if (((LOWORD(lParam) != HTCLIENT) || !focus) && !showcur)\n            {\n                ShowCursor(TRUE);\n                showcur = TRUE;\n            }\n            break;\n    }\n    if ((uMsg >= WM_MOUSEMOVE && uMsg <= WM_MBUTTONDOWN) || uMsg >= MM_JOY1MOVE)\n        return CallWindowProcA((WNDPROC)GetWindowLongA(parhwnd, GWL_WNDPROC), parhwnd, uMsg, wParam, lParam);\n    return DefWindowProcA(hwnd, uMsg, wParam, lParam);\n}\n\nstatic void CALLBACK retrace_cb(LPVOID arg, DWORD low, DWORD high)\n{\n    vsync = TRUE;\n    if (WaitForSingleObject(running, 0))\n    {\n        SetEvent(running);\n        ExitThread(0);\n    }\n    SetBitmapBits(GetCurrentObject(dddc, OBJ_BITMAP), width * height, vram);\n    draw();\n}\n\nstatic DWORD CALLBACK retrace_th(LPVOID arg)\n{\n    LARGE_INTEGER when;\n    HANDLE timer;\n\n    if (!(timer = CreateWaitableTimerA( NULL, FALSE, NULL ))) return 0;\n\n    when.u.LowPart = when.u.HighPart = 0;\n    SetWaitableTimer(timer, &when, 17, retrace_cb, arg, FALSE);\n    for (;;) SleepEx(INFINITE, TRUE);\n}\n\nstatic void start_retrace_timer()\n{\n    if (running) return;\n    if (height == 240) FIXME(\"240 px height doesn't work properly with direct fb access\\n\");\n    running = CreateEventA(NULL, TRUE, TRUE, NULL);\n    vram = MapSL((DWORD)GetProcAddress16(GetModuleHandle16(\"KERNEL\"), (LPCSTR)174) << 16);\n    CloseHandle(CreateThread(NULL, 0, retrace_th, NULL, 0, NULL));\n}\n\nstatic void WINAPI ddInt10Handler(CONTEXT *context)\n{\n    if (GetCurrentTask() != owner)\n    {\n        oldproc(context);\n        return;\n    }\n\n    switch (AH_reg(context))\n    {\n        case 0x00:\n            start_retrace_timer();\n            switch (AL_reg(context))\n            {\n                case 0x13:\n                    height = 200;\n                    break;\n                default:\n                    FIXME(\"Vid mode %#x not supported\\n\", AL_reg(context));\n                    break;\n             }\n             break;\n        case 0x10:\n             switch (AL_reg(context))\n             {\n                case 0x12:\n                {\n                    BYTE *ptr = MapSL(MAKESEGPTR(context->SegEs, DX_reg(context)));\n                    for (int i = BX_reg(context); i < CX_reg(context); i++)\n                    {\n                        RGBQUAD color;\n                        color.rgbRed =   (ptr[i * 3] << 2) | (ptr[i * 3] >> 4);\n                        color.rgbGreen = (ptr[i * 3 + 1] << 2) | (ptr[i * 3 + 1] >> 4);\n                        color.rgbBlue =  (ptr[i * 3 + 2] << 2) | (ptr[i * 3 + 2] >> 4);\n                        color.rgbReserved = 0;\n                        SetDIBColorTable(dddc, i & 0xff, 1, &color);\n                    }\n                }\n             }\n             break;       \n        default:\n            FIXME(\"Int 10 func: %#x unimplemented\\n\", AH_reg(context));\n            break;\n    }\n}\n\nstatic DWORD WINAPI ddVGAinHandler(int port, int size)\n{\n    if (GetCurrentTask() != owner)\n        return oldin[port - 0x3c0] ? oldin[port - 0x3c0](port, size) : 0;\n\n    DWORD ret = -1;\n\n    switch (port)\n    {\n        case 0x3da:\n        {\n            start_retrace_timer();\n            ret = vsync ? 9 : 0;\n            vsync = FALSE;\n            hsync = !hsync;\n            if (!ret) ret = hsync ? 1 : 0;\n            break;\n        }\n        default:\n            FIXME(\"vga port %#x unimplemented\\n\", port);\n            break;\n    }\n    return ret;\n}\n\nstatic void WINAPI ddVGAoutHandler(int port, int size, DWORD value)\n{\n    if (GetCurrentTask() != owner)\n    {\n        if (oldout[port - 0x3c0])\n            oldout[port - 0x3c0](port, size, value);\n        return;\n    }\n\n    if ((port & ~3) != 0x3c8) start_retrace_timer();\n\n    static BYTE dacidx;\n    static BYTE dacclr = 0;\n\n    switch (port)\n    {\n        case 0x3c8:\n            dacidx = value & 0xff;\n            dacclr = 0;\n            if (size == 1) break;\n            value >>= 8;\n        case 0x3c9:\n        {\n            RGBQUAD color;\n            GetDIBColorTable(dddc, dacidx, 1, &color);\n            switch (dacclr++)\n            {\n                case 0:\n                    color.rgbRed = (BYTE)value << 2;\n                    break;\n                case 1:\n                    color.rgbGreen = (BYTE)value << 2;\n                    break;\n                case 2:\n                    color.rgbBlue = (BYTE)value << 2;\n                    dacclr = 0;\n                    break;\n            }\n            SetDIBColorTable(dddc, dacidx, 1, &color);\n            if (!dacclr) dacidx++;\n            break;\n        }\n        default:\n            FIXME(\"vga port %#x unimplemented\\n\", port);\n            break;\n    }\n}\n\n/*********************************************************************\n *\tDisplayDib\t(DISPDIB.1)\n *\n *  Disables GDI and takes over the VGA screen to show DIBs in full screen.\n *\n * FLAGS\n *\n *  DISPLAYDIB_NOPALETTE: don't change palette\n *  DISPLAYDIB_NOCENTER: don't center bitmap\n *  DISPLAYDIB_NOWAIT: don't wait (for keypress) before returning\n *  DISPLAYDIB_BEGIN: start of multiple calls (does not restore the screen)\n *  DISPLAYDIB_END: end of multiple calls (restores the screen)\n *  DISPLAYDIB_MODE_DEFAULT: default display mode\n *  DISPLAYDIB_MODE_320x200x8: Standard VGA 320x200 256 colors\n *  DISPLAYDIB_MODE_320x240x8: Tweaked VGA 320x240 256 colors\n *\n * RETURNS\n *\n *  DISPLAYDIB_NOERROR: success\n *  DISPLAYDIB_NOTSUPPORTED: function not supported\n *  DISPLAYDIB_INVALIDDIB: null or invalid DIB header\n *  DISPLAYDIB_INVALIDFORMAT: invalid DIB format\n *  DISPLAYDIB_INVALIDTASK: not called from current task\n *\n * BUGS\n *\n *  Waiting for keypresses is not implemented.\n */\nWORD WINAPI DisplayDib(\n\t\tLPBITMAPINFO lpbi, /* [in] DIB header with resolution and palette */\n\t\tLPSTR lpBits,      /* [in] Bitmap bits to show */\n\t\tWORD wFlags        /* [in] */\n\t)\n{\n    HTASK16 task = GetCurrentTask();\n    if ((wFlags & DISPLAYDIB_BEGIN) && !owner)\n    {\n        switch (wFlags & DISPLAYDIB_MODE)\n        {\n                default:\n                    return DISPLAYDIB_NOTSUPPORTED;\n                case DISPLAYDIB_MODE_DEFAULT:\n                case DISPLAYDIB_MODE_320x200x8:\n                    height = 200;\n                    break;\n                case DISPLAYDIB_MODE_320x240x8:\n                    height = 240;\n                    break;\n        }\n        WNDCLASSA wc;\n        if (!GetClassInfoA(GetModuleHandleA(NULL), \"DispDibClass\", &wc))\n        {\n            WNDCLASSA ddwc = {0};\n            ddwc.style = CS_HREDRAW | CS_VREDRAW;\n            ddwc.lpfnWndProc = ddwndproc;\n            ddwc.hInstance = GetModuleHandleA(NULL);\n            ddwc.lpszClassName = \"DispDibClass\";\n            if (!RegisterClassA(&ddwc))\n                return DISPLAYDIB_NOTSUPPORTED;\n        }\n\n        owner = task;\n        dddc = CreateCompatibleDC(0);\n        BITMAPINFO *bmap = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 256*4 + sizeof(BITMAPINFOHEADER));\n        VOID *section;\n        bmap->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\n        bmap->bmiHeader.biWidth = width;\n        bmap->bmiHeader.biHeight = height;\n        bmap->bmiHeader.biPlanes = 1;\n        bmap->bmiHeader.biBitCount = 8;\n        HBITMAP ddbmap = CreateDIBSection(dddc, bmap, DIB_RGB_COLORS, &section, NULL, 0);\n        HeapFree(GetProcessHeap(), 0, bmap);\n        SelectObject(dddc, ddbmap);\n\n        char title[32] = \"\\0\";\n        HWND parhwnd = GetActiveWindow();\n        GetWindowTextA(parhwnd, title, 32);\n        if (title[0] == '\\0') GetModuleName16(GetCurrentTask(), title, 32);\n        ddhwnd = CreateWindowExA(0, \"DispDibClass\", title, WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT,\n                        CW_USEDEFAULT, 640, 480, parhwnd, NULL, GetModuleHandleA(NULL), NULL);\n        if (!ddhwnd)\n        {\n            owner = 0;\n            return DISPLAYDIB_NOTSUPPORTED;\n        }\n        oldproc = DOSVM_SetBuiltinVector(0x10, ddInt10Handler);\n        for (int i = 0; i < 0x20; i++)\n            DOSVM_setportcb(ddVGAoutHandler, ddVGAinHandler, i + 0x3c0, &oldout[i], &oldin[i]);\n        return DISPLAYDIB_NOERROR;\n    }\n    else if ((owner != task) || !owner)\n        return DISPLAYDIB_INVALIDTASK;\n    else if (wFlags & DISPLAYDIB_END)\n    {\n        DestroyWindow(ddhwnd);\n        DeleteDC(dddc);\n        DOSVM_SetBuiltinVector(0x10, oldproc);\n        for (int i = 0; i < 0x20; i++)\n            DOSVM_setportcb(oldout[i], oldin[i], i + 0x3c0, &oldout[i], &oldin[i]);\n        if (running)\n        {\n            ResetEvent(running);\n            WaitForSingleObject(running, INFINITE);\n            CloseHandle(running);\n            running = 0;\n        }\n        owner = 0;\n        return DISPLAYDIB_NOERROR;\n    }\n    if (!(wFlags & DISPLAYDIB_NOPALETTE))\n    {\n        if (!lpbi)\n            return DISPLAYDIB_INVALIDDIB;\n        SetDIBColorTable(dddc, 0, lpbi->bmiHeader.biClrUsed, (RGBQUAD *)&lpbi->bmiColors); \n    }\n    if(!(wFlags & /*DISPLAYDIB_NOIMAGE*/ 0x80))\n    {\n        if (!lpBits)\n            return DISPLAYDIB_INVALIDDIB;\n        SetDIBitsToDevice(dddc, 0, 0, width, height, 0, 0, 0, height, lpBits, lpbi, DIB_RGB_COLORS);\n        draw();\n    }\n    return DISPLAYDIB_NOERROR;\n}\n"
  },
  {
    "path": "dispdib/dispdib.def",
    "content": "; File generated automatically from dispdib\\dispdib.dll16.spec; do not edit!\n\nLIBRARY dispdib.dll16\n\nEXPORTS\n  _wine_spec_dos_header; @1 DATA PRIVATE\n"
  },
  {
    "path": "dispdib/dispdib.dll16.spec",
    "content": "1 pascal -ret16 DisplayDib(ptr ptr word) DisplayDib\n"
  },
  {
    "path": "dispdib/dispdib.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>dispdib</RootNamespace>\n    <ProjectGuid>{3D889B37-09C8-4030-B815-830566CD57A4}</ProjectGuid>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n%(AdditionalDependencies)</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\ndispdib.def\n</ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\ndispdib.def\n</ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"dispdib.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"dispdib.dll16.obj\">\n       <FileType>Document</FileType>\n       <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">as --32 -o dispdib.dll16.obj ddeml.dll16.asm</Command>\n       <AdditionalInputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">dispdib.dll16.asm;%(AdditionalInputs)</AdditionalInputs>\n    </Object>\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"dispdib.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" DISPDIB &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" DISPDIB &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"dispdib.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>\n"
  },
  {
    "path": "display/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(display SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/display.def display.drv16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(display.drv16 display)\ntarget_link_libraries(display libwine winecrt0 krnl386)\nset_target_properties(display PROPERTIES SUFFIX \".drv16\")\n"
  },
  {
    "path": "display/Makefile.in",
    "content": "MODULE    = display.drv16\nIMPORTS   = user32\n\nEXTRADLLFLAGS = -m16\n\nC_SRCS = display.c\n\nRC_SRCS = display.rc\n"
  },
  {
    "path": "display/display.c",
    "content": "/*\n * DISPLAY driver\n *\n * Copyright 1998 Ulrich Weigand\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n\n#include \"wine/debug.h\"\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/winuser16.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(cursor);\n\n#include \"pshpack1.h\"\ntypedef struct tagCURSORINFO16\n{\n    WORD wXMickeys;\n    WORD wYMickeys;\n} CURSORINFO16, *PCURSORINFO16, *LPCURSORINFO16;\n#include \"poppack.h\"\n\n/***********************************************************************\n *           Inquire\t\t\t(DISPLAY.101)\n */\nWORD WINAPI Inquire16(LPCURSORINFO16 lpCursorInfo)\n{\n    lpCursorInfo->wXMickeys = 1;\n    lpCursorInfo->wYMickeys = 1;\n\n    return sizeof(CURSORINFO16);\n}\n\n/***********************************************************************\n *           SetCursor\t\t\t(DISPLAY.102)\n */\nVOID WINAPI DISPLAY_SetCursor( struct tagCURSORICONINFO *lpCursor )\n{\n    FIXME(\"stub\\n\" );\n}\n\n/***********************************************************************\n *           MoveCursor\t\t\t(DISPLAY.103)\n */\nVOID WINAPI MoveCursor16( WORD wAbsX, WORD wAbsY )\n{\n    SetCursorPos( wAbsX, wAbsY );\n}\n\n/***********************************************************************\n *           CheckCursor                  (DISPLAY.104)\n */\nVOID WINAPI CheckCursor16( void )\n{\n    TRACE(\"stub\\n\" );\n}\n\n/***********************************************************************\n *           GetDriverResourceID                  (DISPLAY.450)\n *\n * Used by USER to check if driver contains better version of a builtin\n * resource than USER (yes, our DISPLAY does !).\n * wQueriedResID is the ID USER asks about.\n * lpsResName does often contain \"OEMBIN\".\n */\nDWORD WINAPI GetDriverResourceID16( WORD wQueriedResID, LPSTR lpsResName )\n{\n\tif (wQueriedResID == 3)\n\t\treturn (DWORD)1;\n\n\treturn (DWORD)wQueriedResID;\n}\n\n/***********************************************************************\n *           UserRepaintDisable\t\t\t(DISPLAY.500)\n */\nVOID WINAPI UserRepaintDisable16( BOOL16 disable )\n{\n    FIXME(\"stub\\n\");\n}\n\nWORD WINAPI SetPaletteTranslate16( WORD wNumEntries, LPBYTE lpTranslate)\n{\n    WARN(\"stub\\n\");\n    return 0;\n}\n"
  },
  {
    "path": "display/display.def",
    "content": "; File generated automatically from display\\display.drv16.spec; do not edit!\n\nLIBRARY display.drv16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "display/display.drv16.spec",
    "content": "1   stub BitBlt\n2   stub ColorInfo\n3   stub Control\n4   stub Disable\n5   stub Enable\n6   stub EnumFonts\n7   stub EnumObj\n8   stub Output\n9   stub Pixel\n10  stub RealizeObject\n11  stub StrBlt\n12  stub ScanLR\n13  stub DeviceMode\n14  stub ExtTextOut\n15  stub GetCharWidth\n16  stub DeviceBitmap\n17  stub FastBorder\n18  stub SetAttribute\n19  stub DeviceBitmapBits\n20  stub CreateBitmap\n21  stub DIBScreenBlt\n\n# ATI driver exports\n22 stub SetPalette\n23 stub GetPalette\n24 pascal -ret16 SetPaletteTranslate(word ptr) SetPaletteTranslate16\n25 stub GetPaletteTranslate\n26 stub UpdateColors\n27 stub StretchBlt\n28 stub StretchDIBits\n29 stub SelectBitmap\n30 stub BitmapBits\n31 stub ReEnable\n# these conflict with ordinals 19-21, thus relocated to 39-41 !\n39 stub DIBBlt\n40 stub CreateDIBitmap\n41 stub DIBToDevice\n# ATI driver end\n\n90  stub Do_Polylines\n91  stub Do_Scanlines\n92  stub SaveScreenBitmap\n101 pascal -ret16 Inquire(ptr) Inquire16\n102 pascal -ret16 SetCursor(ptr) DISPLAY_SetCursor\n103 pascal -ret16 MoveCursor(word word) MoveCursor16\n104 pascal -ret16 CheckCursor() CheckCursor16\n400 stub PExtTextOut\n401 stub PStrBlt\n402 stub RExtTextOut\n403 stub RStrBlt\n450 pascal GetDriverResourceID(word str) GetDriverResourceID16\n500 pascal -ret16 UserRepaintDisable(word) UserRepaintDisable16\n501 stub ORDINAL_ONLY1\n502 stub ORDINAL_ONLY2\n600 stub InkReady\n601 stub GetLPDevice\n"
  },
  {
    "path": "display/display.rc",
    "content": "/*\n * resource file for DISPLAY driver dll\n *\n * Copyright 1999 Andreas Mohr\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n1 OEMBIN\n{\n\t0x11,\t\t\t/* vertical thumb height (in pixels)  */\n\t0x11,\t\t\t/* horizontal thumb width (in pixels) */\n\t0x02,\t\t\t/* icon width (in pixels)             */\n\t0x02,\t\t\t/* icon height (in pixels)            */\n\t0x01,\t\t\t/* cursor width (in pixels)           */\n\t0x01,\t\t\t/* cursor height (in pixels)          */\n\t0x00,\t\t\t/* reserved                           */\n\t0x01,\t\t\t/* vertical-line width                */\n\t0x01,\t\t\t/* horizontal-line width              */\n\n\t/* default system color values */\n\t0x00d4d0c8L,\t/* scrollbar */\n\t0x00d4d0c8L,\t/* desktop */\n\t0x00800000L,\t/* active caption */\n\t0x00ffffffL,\t/* inactive caption */\n\t0x00ffffffL,\t/* menu */\n\t0x00ffffffL,\t/* window */\n\t0x00000000L,\t/* window frame */\n\t0x00000000L,\t/* menu text */\n\t0x00000000L,\t/* window text */\n\t0x00ffffffL,\t/* caption text */\n\t0x00d4d0c8L,\t/* active border */\n\t0x00d4d0c8L,\t/* inactive border */\n\t0x00ffffffL,\t/* app workspace */\n\t0x00800000L,\t/* hilite bk */\n\t0x00ffffffL,\t/* hilite text */\n\t0x00d4d0c8L,\t/* btn face */\n\t0x00808080L,\t/* btn shadow */\n\t0x00c0c0c0L,\t/* gray text */\n\t0x00000000L,\t/* btn text */\n\t0x00000000L\t\t/* inactive caption text */\n}\n\n/* @makedep: oic_hand.ico */\n1 ICON oic_hand.ico\n"
  },
  {
    "path": "display/display.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n    <RootNamespace>display</RootNamespace>\n    <ProjectGuid>{E0AF9E72-F364-481A-A6E5-63EA88DF684E}</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <Import Project=\"..\\PropertySheet.props\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.drv16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.drv16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nuser32.lib</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\ndisplay.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\ndisplay.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nuser32.lib</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"display.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"display.drv16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"display.drv16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Platform)'=='Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" DISPLAY &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Platform)'=='Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"display.def\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"display.rc\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "dummy.c",
    "content": "\n"
  },
  {
    "path": "gdi/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp)\nadd_library(gdi SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/gdi.def gdi.exe16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(gdi.exe16 GDI ARG --heap 65520)\ntarget_link_libraries(gdi libwine winecrt0 krnl386 user winspool)\nset_target_properties(gdi PROPERTIES SUFFIX \".exe16\")\n"
  },
  {
    "path": "gdi/bidi.c",
    "content": "/*\n * Win16 BiDi functions\n * Copyright 2000 Erez Volk\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n * NOTE: Right now, most of these functions do nothing.\n */\n\n#include <stdarg.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/wingdi16.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(gdi);\n\n/***********************************************************************\n *\t\tRawTextOut   (GDI.530)\n */\nLONG WINAPI RawTextOut16(HDC16 hdc, INT16 x, INT16 y, LPCSTR str, INT16 count)\n{\n    FIXME(\"(%04x,%d,%d,%s,%d)\\n\", hdc, x, y, debugstr_an(str, count), count);\n    return TextOut16(hdc, x, y, str, count);\n}\n\n/***********************************************************************\n *\t\tRawExtTextOut   (GDI.531)\n */\nLONG WINAPI RawExtTextOut16( HDC16 hdc, INT16 x, INT16 y, UINT16 flags,\n                            const RECT16 *lprect, LPCSTR str, UINT16 count,\n                            const INT16 *lpDx )\n{\n    FIXME(\"(%04x,%d,%d,%04x,%p,%s,%d,%p)\\n\", hdc, x, y, flags, lprect, \n        debugstr_an(str, count), count, lpDx);\n    return ExtTextOut16(hdc, x, y, flags, lprect, str, count, lpDx);\n}\n\n/***********************************************************************\n *\t\tRawGetTextExtent   (GDI.532)\n */\nLONG WINAPI RawGetTextExtent16(HDC16 hdc, LPCSTR lpszString, INT16 cbString )\n{\n      FIXME(\"(%04hx, %p, %hd): stub\\n\", hdc, lpszString, cbString);\n      return GetTextExtent16(hdc, lpszString, cbString);\n}\n\n/***********************************************************************\n *\t\tRawGetTextExtentEx   (GDI.533)\n */\nLONG WINAPI RawGetTextExtentEx16(void)\n{\n    FIXME(\"stub (no prototype)\\n\");\n    return 0;\n}\n\n/***********************************************************************\n *\t\tBiDiLayout   (GDI.536)\n */\nLONG WINAPI BiDiLayout16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiCreateTabString   (GDI.537)\n */\nLONG WINAPI BiDiCreateTabString16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiCreateString   (GDI.538)\n */\nLONG WINAPI BiDiCreateString16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiStringOut   (GDI.539)\n */\nLONG WINAPI BiDiStringOut16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiGlyphOut   (GDI.540)\n */\nLONG WINAPI BiDiGlyphOut16(WORD a1, WORD a2, WORD a3, WORD a4, LPCSTR a5, WORD a6, WORD a7, WORD a8)\n{\n    FIXME(\"stub(%04x,%04x,%04x,%04x,%s,%04x,%04x,%04x)\\n\", a1, a2, a3, a4, debugstr_a(a5), a6, a7, a8);\n    return 0;\n}\n\n/***********************************************************************\n *\t\tBiDiJustifyString   (GDI.541)\n */\nLONG WINAPI BiDiJustifyString16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiSetStringTabs   (GDI.542)\n */\nLONG WINAPI BiDiSetStringTabs16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiGetStringExtent   (GDI.543)\n */\nLONG WINAPI BiDiGetStringExtent16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiGetNextGlyph   (GDI.544)\n */\nLONG WINAPI BiDiGetNextGlyph16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiGetPrevGlyph   (GDI.545)\n */\nLONG WINAPI BiDiGetPrevGlyph16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiIsStringRTL   (GDI.546)\n */\nLONG WINAPI BiDiIsStringRTL16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiGlyphLength   (GDI.547)\n */\nLONG WINAPI BiDiGlyphLength16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiCaretStringToPel   (GDI.548)\n */\nLONG WINAPI BiDiCaretStringTopel16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiCaretPelToString   (GDI.549)\n */\nLONG WINAPI BiDiCaretPelToString16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiStringToGlyph   (GDI.550)\n */\nLONG WINAPI BiDiStringToGlyph16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiGlyphToString   (GDI.551)\n */\nLONG WINAPI BiDiGlyphToString16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiPelToGlyph   (GDI.552)\n */\nLONG WINAPI BiDiPelToGlyph16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiGlyphToPel   (GDI.553)\n */\nLONG WINAPI BiDiGlyphToPel16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiBounds   (GDI.554)\n */\nLONG WINAPI BiDiBounds16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiDeleteString   (GDI.555)\n */\nLONG WINAPI BiDiDeleteString16(WORD a1)\n{\n    FIXME(\"stub(%04x)\\n\", a1);\n    return 0;\n}\n\n/***********************************************************************\n *\t\tBiDiSetDefaults   (GDI.556)\n */\nLONG WINAPI BiDiSetDefaults16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiGetDefaults   (GDI.558)\n */\nLONG WINAPI BiDiGetDefaults16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiCalcString16   (GDI.559)\n */\nLONG WINAPI BiDiCalcString16(WORD a1, WORD a2, LPCSTR a3, WORD a4, WORD a5, WORD a6, WORD a7, WORD a8)\n{\n    FIXME(\"stub(%04x,%04x,%p,%04x,%04x,%04x,%04x,%04x)\\n\", a1, a2, a3, a4, a5, a6, a7, a8);\n    return 0;\n}\n\n/***********************************************************************\n *\t\tBiDiShape   (GDI.560)\n */\nLONG WINAPI BiDiShape16(WORD a1, WORD a2, WORD a3, WORD a4, WORD a5, WORD a6, WORD a7, WORD a8, WORD a9, WORD a10,\n                WORD a11, WORD a12, LPCSTR a13, WORD a14, WORD a15, WORD a16, WORD a17, WORD a18, WORD a19, WORD a20)\n{\n    FIXME(\"stub(%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,\", a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);\n    FIXME(\"%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%04x)\\n\", a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);\n    return 0;\n}\n\n/***********************************************************************\n *\t\tBiDiFontComplement   (GDI.561)\n */\nLONG WINAPI BiDiFontComplement16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiCalcTabString   (GDI.563)\n */\nLONG WINAPI BiDiCalcTabString16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiSetKashida   (GDI.564)\n */\nLONG WINAPI BiDiSetKashida16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiKExtTextOut   (GDI.565)\n */\nLONG WINAPI BiDiKExtTextOut16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiShapeEx   (GDI.566)\n */\nLONG WINAPI BiDiShapeEx16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiCreateStringEx   (GDI.569)\n */\nLONG WINAPI BiDiCreateStringEx16(WORD a1, WORD a2, WORD a3, LPVOID a4, WORD a5, WORD a6, WORD a7, WORD a8, WORD a9)\n{\n    FIXME(\"stub(%04x,%04x,%04x,%p,%04x,%04x,%04x,%04x,%04x)\\n\", a1, a2, a3, a4, a5, a6, a7, a8, a9);\n    return 0;\n}\n\n/***********************************************************************\n *\t\tGetUnicodeMap   (GDI.570)\n */\nLONG WINAPI GetUnicodeMap16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tGetTextExtentRtoL   (GDI.571)\n */\nLONG WINAPI GetTextExtentRtoL16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tGetHDCCharSet   (GDI.572)\n */\nLONG WINAPI GetHDCCharSet16(HDC16 a1)\n{\n    FIXME(\"stub(%04x)\\n\", a1);\n    return 0;\n}\n\n/***********************************************************************\n *\t\tBiDiLayoutEx   (GDI.573)\n */\nLONG WINAPI BiDiLayoutEx16(LPVOID a1, WORD a2, WORD a3, WORD a4, LPVOID a5, WORD a6, WORD a7, WORD a8, WORD a9, LPVOID a10, LPVOID a11, WORD a12, WORD a13, WORD a14)\n{\n    FIXME(\"stub(%p,%04x,%04x,%04x,%p,%04x,%04x,%04x,%04x,%p,%p,%04x,%04x,%04x)\\n\", a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14);\n    return 0;\n}\n\n/***********************************************************************\n *\t\tBiDiCreateTabStringEx   (GDI.574)\n */\nLONG WINAPI BiDiCreateTabStringEx16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiCalcTabStringEx   (GDI.575)\n */\nLONG WINAPI BiDiCalcTabStringEx16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tBiDiCalcStringEx   (GDI.576)\n */\nLONG WINAPI BiDiCalcStringEx16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n/***********************************************************************\n *\t\tSetTextCodePage   (GDI.588)\n */\nLONG WINAPI SetTextCodePage16(WORD a1, WORD a2)\n{\n    FIXME(\"stub(%04x,%04x)\\n\", a1, a2);\n    return 0;\n}\n\n/***********************************************************************\n *\t\tGetTextCodePage   (GDI.589)\n */\nLONG WINAPI GetTextCodePage16()\n{\n    FIXME(\"stub(np)\\n\");\n    return 0;\n}\n"
  },
  {
    "path": "gdi/env.c",
    "content": "/*\n * Driver Environment functions\n *\n * Note: This has NOTHING to do with the task/process environment!\n *\n * Copyright 1997 Marcus Meissner\n * Copyright 1998 Andreas Mohr\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <stdarg.h>\n#include <stdio.h>\n#include <string.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n#include \"wine/wingdi16.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(gdi);\n\ntypedef struct {\n        ATOM atom;\n\tHGLOBAL16 handle;\n} ENVTABLE;\n\nstatic ENVTABLE EnvTable[20];\n\nstatic ENVTABLE *SearchEnvTable(ATOM atom)\n{\n    INT16 i;\n\n    for (i = 19; i >= 0; i--) {\n      if (EnvTable[i].atom == atom)\n\treturn &EnvTable[i];\n    }\n    return NULL;\n}\n\nstatic ATOM GDI_GetNullPortAtom(void)\n{\n    static ATOM NullPortAtom = 0;\n    if (!NullPortAtom)\n    {\n        char NullPort[256];\n\n        GetProfileStringA( \"windows\", \"nullport\", \"none\",\n                             NullPort, sizeof(NullPort) );\n        NullPortAtom = AddAtomA( NullPort );\n    }\n    return NullPortAtom;\n}\n\nstatic ATOM PortNameToAtom(LPCSTR lpPortName, BOOL16 add)\n{\n    char buffer[256];\n\n    lstrcpynA( buffer, lpPortName, sizeof(buffer) );\n\n    if (buffer[0] && buffer[strlen(buffer)-1] == ':') buffer[strlen(buffer)-1] = 0;\n\n    if (add)\n        return AddAtomA(buffer);\n    else\n        return FindAtomA(buffer);\n}\n\n\n/***********************************************************************\n *           GetEnvironment   (GDI.133)\n */\nINT16 WINAPI GetEnvironment16(LPCSTR lpPortName, LPDEVMODEA lpdev, UINT16 nMaxSize)\n{\n    ATOM atom;\n    LPCSTR p;\n    ENVTABLE *env;\n    WORD size;\n\n    TRACE(\"('%s', %p, %d)\\n\", lpPortName, lpdev, nMaxSize);\n\n    if (!(atom = PortNameToAtom(lpPortName, FALSE)))\n\treturn 0;\n    if (atom == GDI_GetNullPortAtom())\n\tif (!(atom = FindAtomA((LPCSTR)lpdev)))\n\t    return 0;\n    if (!(env = SearchEnvTable(atom)))\n\treturn 0;\n    size = GlobalSize16(env->handle);\n    if (!lpdev) return 0;\n    if (size < nMaxSize) nMaxSize = size;\n    if (!(p = GlobalLock16(env->handle))) return 0;\n    memcpy(lpdev, p, nMaxSize);\n    GlobalUnlock16(env->handle);\n    return nMaxSize;\n}\n\n\n/***********************************************************************\n *          SetEnvironment   (GDI.132)\n */\nINT16 WINAPI SetEnvironment16(LPCSTR lpPortName, LPDEVMODEA lpdev, UINT16 nCount)\n{\n    ATOM atom;\n    BOOL16 nullport = FALSE;\n    LPCSTR port_name;\n    LPSTR device_mode;\n    ENVTABLE *env;\n    HGLOBAL16 handle;\n\n    TRACE(\"('%s', %p, %d)\\n\", lpPortName, lpdev, nCount);\n\n    if ((atom = PortNameToAtom(lpPortName, FALSE))) {\n\tif (atom == GDI_GetNullPortAtom()) {\n\t    nullport = TRUE;\n\t    atom = FindAtomA((LPCSTR)lpdev);\n\t}\n\tenv = SearchEnvTable(atom);\n        GlobalFree16(env->handle);\n        env->atom = 0;\n    }\n    if (nCount) { /* store DEVMODE struct */\n\tif (nullport)\n\t    port_name = (LPSTR)lpdev;\n        else\n\t    port_name = lpPortName;\n\n        if ((atom = PortNameToAtom(port_name, TRUE))\n\t && (env = SearchEnvTable(0))\n\t && (handle = GlobalAlloc16(GMEM_SHARE|GMEM_MOVEABLE, nCount))) {\n\t    if (!(device_mode = GlobalLock16(handle))) {\n\t        GlobalFree16(handle);\n\t        return 0;\n\t    }\n\t    env->atom = atom;\n\t    env->handle = handle;\n            memcpy(device_mode, lpdev, nCount);\n            GlobalUnlock16(handle);\n            return handle;\n\t}\n\telse return 0;\n    }\n    else return -1;\n}\n"
  },
  {
    "path": "gdi/gdi.c",
    "content": "/*\n * GDI 16-bit functions\n *\n * Copyright 2002 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n#include <stdlib.h>\n#include <math.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n#include \"wownt32.h\"\n#define ExtDeviceMode WINAPI ExtDeviceMode\n#include \"winspool.h\"\n#undef ExtDeviceMode\n#include \"wine/wingdi16.h\"\n#include \"wine/list.h\"\n#if 0\n#include \"wine/gdi_driver.h\"\n#endif\n#include \"wine/debug.h\"\n#include \"wine/exception.h\"\n#define STRSAFE_NO_DEPRECATE\n#include <strsafe.h>\n\n#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))\n#define DIBINDEX(n) MAKELONG((n),0x10FF)\n\nWINE_DEFAULT_DEBUG_CHANNEL(gdi);\n\n//#define HGDIOBJ_32(handle16)    ((HGDIOBJ)(ULONG_PTR)(handle16))\n//#define HGDIOBJ_16(handle32)    ((HGDIOBJ16)(ULONG_PTR)(handle32))\n__declspec(dllimport) HGDIOBJ16 K32HGDIOBJ_16(HGDIOBJ handle);\n__declspec(dllimport) HGDIOBJ K32HGDIOBJ_32(HGDIOBJ16 handle);\n#define HGDIOBJ_32(handle16)    (K32HGDIOBJ_32(handle16))\n#define HGDIOBJ_16(handle32)    (K32HGDIOBJ_16(handle32))\nvoid WINAPI K32WOWHandle16Destroy(HANDLE handle, WOW_HANDLE_TYPE type);\nstatic BYTE fix_font_charset(BYTE charset);\nint WINAPI set_realized_palette(HDC hdc);\nHPALETTE WINAPI get_realized_palette();\n\nstruct saved_visrgn\n{\n    struct list entry;\n    HDC         hdc;\n    HRGN        hrgn;\n};\n\nstatic struct list saved_regions = LIST_INIT( saved_regions );\n\nstatic HPALETTE16 hPrimaryPalette;\nstatic UINT16 syspaluse = SYSPAL_STATIC;\nstatic HGDIOBJ16 stock[STOCK_LAST + 2] = {0};\n\nvoid WINAPI DibMapGlobalMemory(WORD sel, void *base, DWORD size);\nvoid WINAPI DibUnmapGlobalMemory(void *base, DWORD size);\nvoid WINAPI GlobalMapInternal(WORD sel, void *base, DWORD size);\nstruct dib_driver\n{\n    struct list entry;\n    HDC         hdc;\n    HANDLE      hSection;\n    LPVOID      map;\n    HBITMAP     bitmap;\n    WORD        selector;\n    DWORD       size;\n    DWORD       padding;\n};\nstatic struct list dib_drivers = LIST_INIT(dib_drivers);\n\n// on windows 3.1 in 8bit color mode:\n// RGB() is matched to the 20 system colors\n// PALETTEINDEX() is a direct index to the dc palette, 0 if out of range\n// PALETTERGB() is matched to the dc palette\n// DIBINDEX() only applies to dib.drv dcs\n// color is treated as RGB() unless high byte is exactly 1, 2 or high word 0x10ff for DIBINDEX()\n//\n// on windows 10 in 24bit color mode:\n// RGB() is the direct color\n// PALETTEINDEX() is a direct index to the dc palette, 0 if out of range\n// PALETTERGB() is the direct color\n// DIBINDEX() is 0 for non-dib dcs\n// color is treated as PALETTEINDEX() if bit 16 is set else DIBINDEX() if bit 24 is set and byte 3 is 0xff\n//\n// ntvdm in 8bit color mode behaves like win3.1 with DIBINDEX()\nstatic COLORREF check_colorref(COLORREF color)\n{\n    int type = color >> 16;\n    if ((type != 0x10ff) && ((type & 0xff00) != 0x100) && ((type & 0xff00) != 0x200))\n        color &= 0xffffff;\n    return color;\n}\n\n// convert the colorref to a 8bpp dib compatible index value using the rules above\n// GDI should just look up PALETTERGB in the dib palette\nstatic COLORREF convert_colorref(COLORREF color)\n{\n    int type = color >> 24;\n    int index;\n    switch (type)\n    {\n        case 0:\n            index = GetNearestPaletteIndex(GetStockObject(DEFAULT_PALETTE), color);\n            if (index >= 10) index += 236;\n            return DIBINDEX(index);\n        case 1:\n            return DIBINDEX(color & 0xff);\n    }\n    return color;\n}\n     \n\n\nstatic void set_dib_colors(HDC hdc)\n{\n    PALETTEENTRY pal[256] = {0};\n    GetPaletteEntries(GetCurrentObject(hdc, OBJ_PAL), 0, 256, &pal);\n    for (int i = 0; i < 256; i++)\n    {\n        BYTE tmp = pal[i].peRed;\n        pal[i].peRed = pal[i].peBlue;\n        pal[i].peBlue = tmp;\n    }\n    SetDIBColorTable(hdc, 0, 256, &pal);\n}\n\n// some programs such as pirates use a palette with start offset 0\n// but the bitmap offsets every pixel by 10.  this is used to shortcut the\n// foreground palette reindex after realization.  it works because windows\n// will store the bitmap using foreground indexes but createbitmap and\n// setbitmapbits bypasses that.  other programs such as darkseed \n// check the value of the foreground indexes before calling setbitmapbits.\n// to make it work we'd have to reimplement all of gdi so just add a hack here\nstatic void set_dib_colors_for_screen(HDC hdc)\n{\n    char modulename[32];\n    GetModuleName16(GetCurrentTask(), modulename, 32);\n    if (strcmp(modulename, \"WINPIR\")) return set_dib_colors(hdc);\n    PALETTEENTRY pal[256] = {0};\n    PALETTEENTRY syspal[10];\n    PALETTEENTRY tmp;\n    GetPaletteEntries(GetCurrentObject(hdc, OBJ_PAL), 0, 256, &pal);\n    GetSystemPaletteEntries(hdc, 0, 10, &syspal);\n    for (int i = 235; i >= 0; i--)\n    {\n        tmp.peBlue = pal[i].peRed;\n        tmp.peGreen = pal[i].peGreen;\n        tmp.peRed = pal[i].peBlue;\n        pal[i + 10].peRed = tmp.peRed;\n        pal[i + 10].peGreen = tmp.peGreen;\n        pal[i + 10].peBlue = tmp.peBlue;\n    }\n    for (int i = 0; i < 10; i++)\n    {\n        pal[i].peBlue = syspal[i].peRed;\n        pal[i].peGreen = syspal[i].peGreen;\n        pal[i].peRed = syspal[i].peBlue;\n    }\n    SetDIBColorTable(hdc, 0, 256, &pal);\n}\n\n// hack so pirates won't read from the screen when the palette is blank\nstatic BOOL is_blank_palette(HPALETTE hpal)\n{\n    PALETTEENTRY pal[236];\n    int count = GetPaletteEntries(hpal, 0, 236, &pal);\n    for (int i = 0; i < count; i++)\n    {\n        if (((DWORD *)pal)[i] & 0xffffff)\n            return FALSE;\n    }\n    return TRUE;\n}\n\n/*\n * ############################################################################\n */\n\n#include <pshpack1.h>\n#define GDI_MAX_THUNKS      32\n\nstatic struct gdi_thunk\n{\n    BYTE                        popl_eax;       /* popl  %eax (return address) */\n    BYTE                        pushl_pfn16;    /* pushl pfn16 */\n    DWORD                       pfn16;          /* pfn16 */\n    BYTE                        pushl_eax;      /* pushl %eax */\n    BYTE                        jmp;            /* ljmp GDI_Callback3216 */\n    DWORD                       callback;\n    HDC16                       hdc;\n} *GDI_Thunks;\n\n#include <poppack.h>\n\n/**********************************************************************\n *           GDI_Callback3216\n */\nstatic BOOL CALLBACK GDI_Callback3216( DWORD pfn16, HDC hdc, INT code )\n{\n    if (pfn16)\n    {\n        WORD args[2];\n        DWORD ret;\n\n        args[1] = HDC_16(hdc);\n        args[0] = code;\n        WOWCallback16Ex( pfn16, WCB16_PASCAL, sizeof(args), args, &ret );\n        return LOWORD(ret);\n    }\n    return TRUE;\n}\n\n\n/******************************************************************\n *\t\tGDI_AddThunk\n *\n */\nstatic struct gdi_thunk* GDI_AddThunk(HDC16 dc16, ABORTPROC16 pfn16)\n{\n    struct gdi_thunk* thunk;\n\n    if (!GDI_Thunks)\n    {\n        GDI_Thunks = VirtualAlloc(NULL, GDI_MAX_THUNKS * sizeof(*GDI_Thunks),\n                                        MEM_COMMIT, PAGE_EXECUTE_READWRITE);\n        if (!GDI_Thunks)\n        {\n            return NULL;\n        }\n        for (thunk = GDI_Thunks; thunk < &GDI_Thunks[GDI_MAX_THUNKS]; thunk++)\n        {\n            thunk->popl_eax     = 0x58;   /* popl  %eax */\n            thunk->pushl_pfn16  = 0x68;   /* pushl pfn16 */\n            thunk->pfn16        = 0;\n            thunk->pushl_eax    = 0x50;   /* pushl %eax */\n            thunk->jmp          = 0xe9;   /* jmp GDI_Callback3216 */\n            thunk->callback     = (char *)GDI_Callback3216 - (char *)(&thunk->callback + 1);\n        }\n    }\n    for (thunk = GDI_Thunks; thunk < &GDI_Thunks[GDI_MAX_THUNKS]; thunk++)\n    {\n        if (thunk->pfn16 == 0)\n        {\n            thunk->pfn16 = (DWORD)pfn16;\n            thunk->hdc   = dc16;\n            return thunk;\n        }\n    }\n    FIXME(\"Out of mmdrv-thunks. Bump GDI_MAX_THUNKS\\n\");\n    return NULL;\n}\n\n/******************************************************************\n *\t\tGDI_DeleteThunk\n */\nstatic void    GDI_DeleteThunk(struct gdi_thunk* thunk)\n{\n    thunk->pfn16 = 0;\n}\n\n/******************************************************************\n *\t\tGDI_FindThunk\n */\nstatic struct gdi_thunk*        GDI_FindThunk(HDC16 hdc)\n{\n    struct gdi_thunk* thunk;\n\n    if (!GDI_Thunks) return NULL;\n    for (thunk = GDI_Thunks; thunk < &GDI_Thunks[GDI_MAX_THUNKS]; thunk++)\n    {\n        if (thunk->hdc == hdc)  return thunk;\n    }\n    return NULL;\n}\n\n/**********************************************************************\n *           QueryAbort   (GDI.155)\n *\n *  Calls the app's AbortProc function if avail.\n *\n * RETURNS\n * TRUE if no AbortProc avail or AbortProc wants to continue printing.\n * FALSE if AbortProc wants to abort printing.\n */\nBOOL16 WINAPI QueryAbort16(HDC16 hdc16, INT16 reserved)\n{\n    struct gdi_thunk* thunk = GDI_FindThunk(hdc16);\n\n    if (!thunk) {\n        ERR(\"Invalid hdc 0x%x\\n\", hdc16);\n\treturn FALSE;\n    }\n    return GDI_Callback3216( thunk->pfn16, HDC_32(hdc16), 0 );\n}\n\n\n/**********************************************************************\n *           SetAbortProc   (GDI.381)\n */\nINT16 WINAPI SetAbortProc16(HDC16 hdc16, ABORTPROC16 abrtprc)\n{\n    struct gdi_thunk*   thunk;\n\n    thunk = GDI_AddThunk(hdc16, abrtprc);\n    if (!thunk) return FALSE;\n    if (!SetAbortProc(HDC_32( hdc16 ), (ABORTPROC)thunk))\n    {\n        GDI_DeleteThunk(thunk);\n        return FALSE;\n    }\n    return TRUE;\n}\n\n/*\n * ############################################################################\n */\n\nstruct callback16_info\n{\n    FARPROC16 proc;\n    LPARAM    param;\n    INT       result;\n};\n\n/* callback for LineDDA16 */\nstatic void CALLBACK linedda_callback( INT x, INT y, LPARAM param )\n{\n    const struct callback16_info *info = (struct callback16_info *)param;\n    WORD args[4];\n\n    args[3] = x;\n    args[2] = y;\n    args[1] = HIWORD(info->param);\n    args[0] = LOWORD(info->param);\n    WOWCallback16Ex( (DWORD)info->proc, WCB16_PASCAL, sizeof(args), args, NULL );\n}\n\n/* callback for EnumObjects16 */\nstatic INT CALLBACK enum_pens_callback( void *ptr, LPARAM param )\n{\n    const struct callback16_info *info = (struct callback16_info *)param;\n    LOGPEN *pen = ptr;\n    LOGPEN16 pen16;\n    SEGPTR segptr;\n    DWORD ret;\n    WORD args[4];\n\n    pen16.lopnStyle   = pen->lopnStyle;\n    pen16.lopnWidth.x = pen->lopnWidth.x;\n    pen16.lopnWidth.y = pen->lopnWidth.y;\n    pen16.lopnColor   = pen->lopnColor;\n    segptr = MapLS( &pen16 );\n    args[3] = SELECTOROF(segptr);\n    args[2] = OFFSETOF(segptr);\n    args[1] = HIWORD(info->param);\n    args[0] = LOWORD(info->param);\n    WOWCallback16Ex( (DWORD)info->proc, WCB16_PASCAL, sizeof(args), args, &ret );\n    UnMapLS( segptr );\n    return LOWORD(ret);\n}\n\n/* callback for EnumObjects16 */\nstatic INT CALLBACK enum_brushes_callback( void *ptr, LPARAM param )\n{\n    const struct callback16_info *info = (struct callback16_info *)param;\n    LOGBRUSH *brush = ptr;\n    LOGBRUSH16 brush16;\n    SEGPTR segptr;\n    DWORD ret;\n    WORD args[4];\n\n    brush16.lbStyle = brush->lbStyle;\n    brush16.lbColor = brush->lbColor;\n    brush16.lbHatch = brush->lbHatch;\n    segptr = MapLS( &brush16 );\n    args[3] = SELECTOROF(segptr);\n    args[2] = OFFSETOF(segptr);\n    args[1] = HIWORD(info->param);\n    args[0] = LOWORD(info->param);\n    WOWCallback16Ex( (DWORD)info->proc, WCB16_PASCAL, sizeof(args), args, &ret );\n    UnMapLS( segptr );\n    return ret;\n}\n\nstatic BYTE fix_font_quality(LOGFONT16 *font16)\n{\n    static BOOL init_enable_antialias;\n    static BOOL enable_antialias;\n    static BYTE force_font_quality;\n    if (!init_enable_antialias)\n    {\n        init_enable_antialias = TRUE;\n        enable_antialias = krnl386_get_config_int(\"otvdm\", \"EnableFontAntialias\", FALSE);\n        force_font_quality = (BYTE)krnl386_get_config_int(\"otvdm\", \"ForceFontQuality\", -1);\n    }\n\n    if (font16->lfWidth && font16->lfHeight)\n        return font16->lfQuality;\n\n    if (force_font_quality != (BYTE)-1)\n        return force_font_quality;\n    if (enable_antialias)\n        return font16->lfQuality;\n    return NONANTIALIASED_QUALITY;\n}\n\n/* convert a LOGFONT16 to a LOGFONTA */\nstatic void logfont_16_to_A( const LOGFONT16 *font16, LPLOGFONTA font32 )\n{\n    font32->lfHeight = font16->lfHeight;\n    font32->lfWidth = font16->lfWidth;\n    font32->lfEscapement = font16->lfEscapement;\n    font32->lfOrientation = font16->lfOrientation;\n    font32->lfWeight = font16->lfWeight;\n    font32->lfItalic = font16->lfItalic;\n    font32->lfUnderline = font16->lfUnderline;\n    font32->lfStrikeOut = font16->lfStrikeOut;\n    font32->lfCharSet = fix_font_charset(font16->lfCharSet);\n    font32->lfOutPrecision = font16->lfOutPrecision;\n    font32->lfClipPrecision = font16->lfClipPrecision;\n    font32->lfQuality = fix_font_quality(font16);\n    font32->lfPitchAndFamily = font16->lfPitchAndFamily;\n    memcpy(font32->lfFaceName, font16->lfFaceName, LF_FACESIZE);\n    font32->lfFaceName[LF_FACESIZE-1] = 0;\n}\n\n/* convert a LOGFONTA to a LOGFONT16 */\nstatic void logfont_A_to_16( const LOGFONTA* font32, LPLOGFONT16 font16 )\n{\n    font16->lfHeight = font32->lfHeight;\n    font16->lfWidth = font32->lfWidth;\n    font16->lfEscapement = font32->lfEscapement;\n    font16->lfOrientation = font32->lfOrientation;\n    font16->lfWeight = font32->lfWeight;\n    font16->lfItalic = font32->lfItalic;\n    font16->lfUnderline = font32->lfUnderline;\n    font16->lfStrikeOut = font32->lfStrikeOut;\n    font16->lfCharSet = font32->lfCharSet;\n    font16->lfOutPrecision = font32->lfOutPrecision;\n    font16->lfClipPrecision = font32->lfClipPrecision;\n    font16->lfQuality = font32->lfQuality;\n    font16->lfPitchAndFamily = font32->lfPitchAndFamily;\n    memcpy(font16->lfFaceName, font32->lfFaceName, LF_FACESIZE);\n    font16->lfFaceName[LF_FACESIZE-1] = 0;\n}\n\n/* convert a ENUMLOGFONTEXA to a ENUMLOGFONTEX16 */\nstatic void enumlogfontex_A_to_16( const ENUMLOGFONTEXA *fontA,\n                                   LPENUMLOGFONTEX16 font16 )\n{\n    logfont_A_to_16( (const LOGFONTA *)fontA, (LPLOGFONT16)font16);\n\n    memcpy(font16->elfFullName, fontA->elfFullName, LF_FULLFACESIZE);\n    font16->elfFullName[LF_FULLFACESIZE-1] = '\\0';\n    memcpy(font16->elfStyle, fontA->elfStyle, LF_FACESIZE);\n    font16->elfStyle[LF_FACESIZE-1] = '\\0';\n    memcpy(font16->elfScript, fontA->elfScript, LF_FACESIZE);\n    font16->elfScript[LF_FACESIZE-1] = '\\0';\n}\n\n/* convert a NEWTEXTMETRICEXA to a NEWTEXTMETRICEX16 */\nstatic void newtextmetricex_A_to_16( const NEWTEXTMETRICEXA *ptmA,\n                                     LPNEWTEXTMETRICEX16 ptm16 )\n{\n    ptm16->ntmTm.tmHeight = ptmA->ntmTm.tmHeight;\n    ptm16->ntmTm.tmAscent = ptmA->ntmTm.tmAscent;\n    ptm16->ntmTm.tmDescent = ptmA->ntmTm.tmDescent;\n    ptm16->ntmTm.tmInternalLeading = ptmA->ntmTm.tmInternalLeading;\n    ptm16->ntmTm.tmExternalLeading = ptmA->ntmTm.tmExternalLeading;\n    ptm16->ntmTm.tmAveCharWidth = ptmA->ntmTm.tmAveCharWidth;\n    ptm16->ntmTm.tmMaxCharWidth = ptmA->ntmTm.tmMaxCharWidth;\n    ptm16->ntmTm.tmWeight = ptmA->ntmTm.tmWeight;\n    ptm16->ntmTm.tmOverhang = ptmA->ntmTm.tmOverhang;\n    ptm16->ntmTm.tmDigitizedAspectX = ptmA->ntmTm.tmDigitizedAspectX;\n    ptm16->ntmTm.tmDigitizedAspectY = ptmA->ntmTm.tmDigitizedAspectY;\n    ptm16->ntmTm.tmFirstChar = ptmA->ntmTm.tmFirstChar;\n    ptm16->ntmTm.tmLastChar = ptmA->ntmTm.tmLastChar;\n    ptm16->ntmTm.tmDefaultChar = ptmA->ntmTm.tmDefaultChar;\n    ptm16->ntmTm.tmBreakChar = ptmA->ntmTm.tmBreakChar;\n    ptm16->ntmTm.tmItalic = ptmA->ntmTm.tmItalic;\n    ptm16->ntmTm.tmUnderlined = ptmA->ntmTm.tmUnderlined;\n    ptm16->ntmTm.tmStruckOut = ptmA->ntmTm.tmStruckOut;\n    ptm16->ntmTm.tmPitchAndFamily = ptmA->ntmTm.tmPitchAndFamily;\n    ptm16->ntmTm.tmCharSet = ptmA->ntmTm.tmCharSet;\n    ptm16->ntmTm.ntmFlags = ptmA->ntmTm.ntmFlags;\n    ptm16->ntmTm.ntmSizeEM = ptmA->ntmTm.ntmSizeEM;\n    ptm16->ntmTm.ntmCellHeight = ptmA->ntmTm.ntmCellHeight;\n    ptm16->ntmTm.ntmAvgWidth = ptmA->ntmTm.ntmAvgWidth;\n    ptm16->ntmFontSig = ptmA->ntmFontSig;\n}\n\nstatic const char *font_list[] =\n{\n    \"\\x82\\x6c\\x82\\x72 \\x83\\x53\\x83\\x56\\x83\\x62\\x83\\x4e\", /* MS Gothic (Japanese font) */\n    \"\\x82\\x6c\\x82\\x72 \\x96\\xbe\\x92\\xa9\", /* MS Mincho (Japanese font) */\n\n    \"Arial\",\n    \"Courier New\",\n    \"Times New Roman\",\n    \"Wingdings\",\n    \"Symbol\",\n    \"CenturyOldst\",\n    \"Arial Narrow\",\n    \"Book Antiqua\",\n    \"Bookman Old Style\",\n    \"Century Gothic\",\n    \"Century Schoolbook\",\n    \"Monotype Corsiva\",\n    \"Monotype Sorts\",\n    \"Fences\",\n    \"MT Extra\",\n    \"Monotype Sorts\",\n    \"System\",\n    \"FixedSys\",\n    \"Modern\",\n    \"Script\",\n    \"Terminal\",\n    \"Roman\",\n    \"Small Fonts\",\n    \"MS Serif\",\n    \"MS Dialog\",\n    \"MS Sans Serif\",\n    \"MS LineDraw\",\n    \"Century\",\n    \"Algerian\",\n    \"Arial Rounded MT Bold\",\n    \"Braggadocio\",\n    \"Britannic Bold\",\n    \"Brush Script MT\",\n    \"Colonna MT\",\n    \"Desdemona\",\n    \"Footlight MT Light\",\n    \"Impact\",\n    \"Kino MT\",\n    \"Wide Latin\",\n    \"Matura MT Script Capitals\",\n    \"Playbill\",\n    \"Courier\",\n    \"Helvetica\",\n    \"Helv\",\n    \"Times\",\n    \"ITC Avant Garde Gothic\",\n    \"ITC Bookman\",\n    \"New Century Schoolbook\",\n    \"Palatino\",\n    \"ITC Zapf Chancery\",\n    \"ITC Zapf Dingbats\",\n    \"AvantGarde\",\n    \"Bookman\",\n    \"NewCenturySchlbk\",\n    \"Palatino\",\n    \"ZapfChancery\",\n    \"ZapfDingbats\",\n    \"AvantGarde\",\n    \"Bookman\",\n    \"NewCenturySchlbk\",\n    \"Palatino\",\n    \"ZapfChancery\",\n    \"ZapfDingbats\",\n    NULL\n};\n\nstatic struct list font_allowed_list = LIST_INIT(font_allowed_list);\n\nstatic struct list font_disallowed_list = LIST_INIT(font_disallowed_list);\n\nstruct font_entry\n{\n    struct list entry;\n    const char *font_name;\n};\n\nstatic void construct_allowed_font_list()\n{\n    int buf_size = 2048;\n    LPSTR font = HeapAlloc(GetProcessHeap(), 0, buf_size);\n    while (TRUE)\n    {\n        DWORD size = krnl386_get_config_string(\"EnumFontLimitation\", NULL, \"\", font, buf_size);\n        if (size < buf_size)\n        {\n            break;\n        }\n        buf_size *= 2;\n        font = HeapReAlloc(GetProcessHeap(), 0, font, buf_size);\n    }\n    while (TRUE)\n    {\n        size_t len = strlen(font);\n        struct font_entry *elem;\n        BOOL allowed;\n        if (len == 0)\n            break;\n        elem = (struct font_entry*)HeapAlloc(GetProcessHeap(), 0, sizeof(*elem));\n        allowed = krnl386_get_config_int(\"EnumFontLimitation\", font, 1);\n        elem->font_name = font;\n        if (allowed)\n        {\n            list_add_tail(&font_allowed_list, &elem->entry);\n        }\n        else\n        {\n            list_add_tail(&font_disallowed_list, &elem->entry);\n        }\n        font += len + 1;\n    }\n}\n\n/*\n * callback for EnumFontFamiliesEx16\n * Note: plf is really an ENUMLOGFONTEXA, and ptm is a NEWTEXTMETRICEXA.\n *       We have to use other types because of the FONTENUMPROCA definition.\n */\nstatic INT CALLBACK enum_font_callback( const LOGFONTA *plf,\n                                        const TEXTMETRICA *ptm, DWORD fType,\n                                        LPARAM param )\n{\n    struct callback16_info *info = (struct callback16_info *)param;\n    ENUMLOGFONTEX16 elfe16;\n    NEWTEXTMETRICEX16 ntm16;\n    SEGPTR segelfe16;\n    SEGPTR segntm16;\n    WORD args[7];\n    DWORD ret;\n    static BOOL enum_font_limitation_init;\n    static BOOL enum_font_limitation;\n\n    enumlogfontex_A_to_16((const ENUMLOGFONTEXA *)plf, &elfe16);\n    newtextmetricex_A_to_16((const NEWTEXTMETRICEXA *)ptm, &ntm16);\n    /* some old programs can not process many fonts(1000+) */\n    if (!enum_font_limitation_init)\n    {\n        enum_font_limitation_init = TRUE;\n        enum_font_limitation = krnl386_get_config_int(\"otvdm\", \"EnumFontLimitation\", FALSE);\n        if (enum_font_limitation)\n        {\n            construct_allowed_font_list();\n        }\n    }\n    if (enum_font_limitation)\n    {\n        /* TODO: configurable */\n        int i;\n        BOOL found = FALSE;\n        struct font_entry *font;\n        BOOL disallow = FALSE;\n\n        LIST_FOR_EACH_ENTRY(font, &font_disallowed_list, struct font_entry, entry)\n        {\n            if (!stricmp(elfe16.elfLogFont.lfFaceName, font->font_name))\n            {\n                disallow = TRUE;\n                break;\n            }\n        }\n        if (!disallow)\n        {\n            for (i = 0; font_list[i]; i++)\n            {\n                if (!stricmp(elfe16.elfLogFont.lfFaceName, font_list[i]))\n                {\n                    found = TRUE;\n                    break;\n                }\n            }\n        }\n        if (!found && !disallow)\n        {\n            LIST_FOR_EACH_ENTRY(font, &font_allowed_list, struct font_entry, entry)\n            {\n                if (!stricmp(elfe16.elfLogFont.lfFaceName, font->font_name))\n                {\n                    found = TRUE;\n                    break;\n                }\n            }\n        }\n        if (!found)\n        {\n            TRACE(\"font %s skipped.\\n\", elfe16.elfLogFont.lfFaceName);\n            return info->result;\n        }\n    }\n    segelfe16 = MapLS( &elfe16 );\n    segntm16 = MapLS( &ntm16 );\n    args[6] = SELECTOROF(segelfe16);\n    args[5] = OFFSETOF(segelfe16);\n    args[4] = SELECTOROF(segntm16);\n    args[3] = OFFSETOF(segntm16);\n    args[2] = fType;\n    args[1] = HIWORD(info->param);\n    args[0] = LOWORD(info->param);\n\n    WOWCallback16Ex( (DWORD)info->proc, WCB16_PASCAL, sizeof(args), args, &ret );\n    UnMapLS( segelfe16 );\n    UnMapLS( segntm16 );\n    return info->result = LOWORD(ret);\n}\n\nstruct dib_segptr_bits\n{\n    struct list entry;\n    HBITMAP16 bmp;\n    WORD      sel;\n    WORD      count;\n};\n\nstatic struct list dib_segptr_list = LIST_INIT( dib_segptr_list );\n\nstatic SEGPTR alloc_segptr_bits( HBITMAP bmp, void *bits32 )\n{\n    DIBSECTION dib;\n    unsigned int i, size;\n    struct dib_segptr_bits *bits;\n\n    if (!(bits = HeapAlloc( GetProcessHeap(), 0, sizeof(*bits) ))) return 0;\n\n    GetObjectW( bmp, sizeof(dib), &dib );\n    size = dib.dsBm.bmHeight * dib.dsBm.bmWidthBytes;\n\n    /* calculate number of sel's needed for size with 64K steps */\n    bits->bmp   = HBITMAP_16( bmp );\n    bits->count = (size + 0xffff) / 0x10000;\n    bits->sel   = AllocSelectorArray16( bits->count );\n    GlobalMapInternal(bits->sel, bits32, size);\n\n    for (i = 0; i < bits->count; i++)\n    {\n        SetSelectorBase(bits->sel + (i << __AHSHIFT), (DWORD)bits32 + i * 0x10000);\n        SetSelectorLimit16(bits->sel + (i << __AHSHIFT), size - 1); /* yep, limit is correct */\n        size -= 0x10000;\n    }\n    list_add_head( &dib_segptr_list, &bits->entry );\n    return MAKESEGPTR( bits->sel, 0 );\n}\n\nstatic void free_segptr_bits( HBITMAP16 bmp )\n{\n    unsigned int i;\n    struct dib_segptr_bits *bits;\n\n    LIST_FOR_EACH_ENTRY( bits, &dib_segptr_list, struct dib_segptr_bits, entry )\n    {\n        if (bits->bmp != bmp) continue;\n        for (i = 0; i < bits->count; i++) FreeSelector16( bits->sel + (i << __AHSHIFT) );\n\n        GlobalMapInternal(bits->sel, NULL, 0);\n        list_remove( &bits->entry );\n        HeapFree( GetProcessHeap(), 0, bits );\n        return;\n    }\n}\n\n#if 0\n/* window surface used to implement the DIB.DRV driver */\n\nstruct dib_window_surface\n{\n    struct window_surface header;\n    RECT                  bounds;\n    void                 *bits;\n    UINT                  info_size;\n    BITMAPINFO            info;   /* variable size, must be last */\n};\n\nstatic struct dib_window_surface *get_dib_surface( struct window_surface *surface )\n{\n    return (struct dib_window_surface *)surface;\n}\n\n/***********************************************************************\n *           dib_surface_lock\n */\nstatic void dib_surface_lock( struct window_surface *window_surface )\n{\n    /* nothing to do */\n}\n\n/***********************************************************************\n *           dib_surface_unlock\n */\nstatic void dib_surface_unlock( struct window_surface *window_surface )\n{\n    /* nothing to do */\n}\n\n/***********************************************************************\n *           dib_surface_get_bitmap_info\n */\nstatic void *dib_surface_get_bitmap_info( struct window_surface *window_surface, BITMAPINFO *info )\n{\n    struct dib_window_surface *surface = get_dib_surface( window_surface );\n\n    memcpy( info, &surface->info, surface->info_size );\n    return surface->bits;\n}\n\n/***********************************************************************\n *           dib_surface_get_bounds\n */\nstatic RECT *dib_surface_get_bounds( struct window_surface *window_surface )\n{\n    struct dib_window_surface *surface = get_dib_surface( window_surface );\n\n    return &surface->bounds;\n}\n\n/***********************************************************************\n *           dib_surface_set_region\n */\nstatic void dib_surface_set_region( struct window_surface *window_surface, HRGN region )\n{\n    /* nothing to do */\n}\n\n/***********************************************************************\n *           dib_surface_flush\n */\nstatic void dib_surface_flush( struct window_surface *window_surface )\n{\n    /* nothing to do */\n}\n\n/***********************************************************************\n *           dib_surface_destroy\n */\nstatic void dib_surface_destroy( struct window_surface *window_surface )\n{\n    struct dib_window_surface *surface = get_dib_surface( window_surface );\n\n    TRACE( \"freeing %p\\n\", surface );\n    HeapFree( GetProcessHeap(), 0, surface );\n}\n\nstatic const struct window_surface_funcs dib_surface_funcs =\n{\n    dib_surface_lock,\n    dib_surface_unlock,\n    dib_surface_get_bitmap_info,\n    dib_surface_get_bounds,\n    dib_surface_set_region,\n    dib_surface_flush,\n    dib_surface_destroy\n};\n\n/***********************************************************************\n *           create_surface\n */\nstatic struct window_surface *create_surface( const BITMAPINFO *info )\n{\n    struct dib_window_surface *surface;\n    int color = 0;\n\n    if (info->bmiHeader.biBitCount <= 8)\n        color = info->bmiHeader.biClrUsed ? info->bmiHeader.biClrUsed : (1 << info->bmiHeader.biBitCount);\n    else if (info->bmiHeader.biCompression == BI_BITFIELDS)\n        color = 3;\n\n    surface = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY,\n                         offsetof( struct dib_window_surface, info.bmiColors[color] ));\n    if (!surface) return NULL;\n\n    surface->header.funcs       = &dib_surface_funcs;\n    surface->header.rect.left   = 0;\n    surface->header.rect.top    = 0;\n    surface->header.rect.right  = info->bmiHeader.biWidth;\n    surface->header.rect.bottom = abs(info->bmiHeader.biHeight);\n    surface->header.ref         = 1;\n    surface->info_size          = offsetof( BITMAPINFO, bmiColors[color] );\n    surface->bits               = (char *)info + surface->info_size;\n    memcpy( &surface->info, info, surface->info_size );\n\n    TRACE( \"created %p %ux%u for info %p bits %p\\n\",\n           surface, surface->header.rect.right, surface->header.rect.bottom, info, surface->bits );\n    return &surface->header;\n}\n#endif\n\n\n/***********************************************************************\n *           SetBkColor    (GDI.1)\n */\nCOLORREF WINAPI SetBkColor16( HDC16 hdc, COLORREF color )\n{\n    return SetBkColor( HDC_32(hdc), check_colorref(color) );\n}\n\n\n/***********************************************************************\n *\t\tSetBkMode (GDI.2)\n */\nINT16 WINAPI SetBkMode16( HDC16 hdc, INT16 mode )\n{\n    return SetBkMode( HDC_32(hdc), mode );\n}\n\n\n/***********************************************************************\n *           SetMapMode    (GDI.3)\n */\nINT16 WINAPI SetMapMode16( HDC16 hdc, INT16 mode )\n{\n    return SetMapMode( HDC_32(hdc), mode );\n}\n\n\n/***********************************************************************\n *\t\tSetROP2\t(GDI.4)\n */\nINT16 WINAPI SetROP216( HDC16 hdc, INT16 mode )\n{\n    return SetROP2( HDC_32(hdc), mode );\n}\n\n\nINT WINAPI SetRelAbs(HDC \thdc,\n\tINT \tMode\n\t);\n/***********************************************************************\n *\t\tSetRelAbs (GDI.5)\n */\nINT16 WINAPI SetRelAbs16( HDC16 hdc, INT16 mode )\n{\n    return SetRelAbs( HDC_32(hdc), mode );\n}\n\n\n/***********************************************************************\n *\t\tSetPolyFillMode\t(GDI.6)\n */\nINT16 WINAPI SetPolyFillMode16( HDC16 hdc, INT16 mode )\n{\n    return SetPolyFillMode( HDC_32(hdc), mode );\n}\n\n\n/***********************************************************************\n *\t\tSetStretchBltMode (GDI.7)\n */\nINT16 WINAPI SetStretchBltMode16( HDC16 hdc, INT16 mode )\n{\n    return SetStretchBltMode( HDC_32(hdc), mode );\n}\n\n\n/***********************************************************************\n *           SetTextCharacterExtra    (GDI.8)\n */\nINT16 WINAPI SetTextCharacterExtra16( HDC16 hdc, INT16 extra )\n{\n    return SetTextCharacterExtra( HDC_32(hdc), extra );\n}\n\n\n/***********************************************************************\n *           SetTextColor    (GDI.9)\n */\nCOLORREF WINAPI SetTextColor16( HDC16 hdc, COLORREF color )\n{\n    return SetTextColor( HDC_32(hdc), check_colorref(color) );\n}\n\n\n/***********************************************************************\n *           SetTextJustification    (GDI.10)\n */\nINT16 WINAPI SetTextJustification16( HDC16 hdc, INT16 extra, INT16 breaks )\n{\n    return SetTextJustification( HDC_32(hdc), extra, breaks );\n}\n\n\n/***********************************************************************\n *           SetWindowOrg    (GDI.11)\n */\nDWORD WINAPI SetWindowOrg16( HDC16 hdc, INT16 x, INT16 y )\n{\n    POINT pt;\n    if (!SetWindowOrgEx( HDC_32(hdc), x, y, &pt )) return 0;\n    return MAKELONG( pt.x, pt.y );\n}\n\n\n/***********************************************************************\n *           SetWindowExt    (GDI.12)\n */\nDWORD WINAPI SetWindowExt16( HDC16 hdc, INT16 x, INT16 y )\n{\n    SIZE size;\n    if (!SetWindowExtEx( HDC_32(hdc), x, y, &size )) return 0;\n    return MAKELONG( size.cx, size.cy );\n}\n\n\n/***********************************************************************\n *           SetViewportOrg    (GDI.13)\n */\nDWORD WINAPI SetViewportOrg16( HDC16 hdc, INT16 x, INT16 y )\n{\n    POINT pt;\n    if (!SetViewportOrgEx( HDC_32(hdc), x, y, &pt )) return 0;\n    return MAKELONG( pt.x, pt.y );\n}\n\n\n/***********************************************************************\n *           SetViewportExt    (GDI.14)\n */\nDWORD WINAPI SetViewportExt16( HDC16 hdc, INT16 x, INT16 y )\n{\n    SIZE size;\n    if (!SetViewportExtEx( HDC_32(hdc), x, y, &size )) return 0;\n    return MAKELONG( size.cx, size.cy );\n}\n\n\n/***********************************************************************\n *           OffsetWindowOrg    (GDI.15)\n */\nDWORD WINAPI OffsetWindowOrg16( HDC16 hdc, INT16 x, INT16 y )\n{\n    POINT pt;\n    if (!OffsetWindowOrgEx( HDC_32(hdc), x, y, &pt )) return 0;\n    return MAKELONG( pt.x, pt.y );\n}\n\n\n/***********************************************************************\n *           ScaleWindowExt    (GDI.16)\n */\nDWORD WINAPI ScaleWindowExt16( HDC16 hdc, INT16 xNum, INT16 xDenom,\n                             INT16 yNum, INT16 yDenom )\n{\n    SIZE size;\n    if (!ScaleWindowExtEx( HDC_32(hdc), xNum, xDenom, yNum, yDenom, &size ))\n        return FALSE;\n    return MAKELONG( size.cx,  size.cy );\n}\n\n\n/***********************************************************************\n *           OffsetViewportOrg    (GDI.17)\n */\nDWORD WINAPI OffsetViewportOrg16( HDC16 hdc, INT16 x, INT16 y )\n{\n    POINT pt;\n    if (!OffsetViewportOrgEx( HDC_32(hdc), x, y, &pt )) return 0;\n    return MAKELONG( pt.x, pt.y );\n}\n\n\n/***********************************************************************\n *           ScaleViewportExt    (GDI.18)\n */\nDWORD WINAPI ScaleViewportExt16( HDC16 hdc, INT16 xNum, INT16 xDenom,\n                               INT16 yNum, INT16 yDenom )\n{\n    SIZE size;\n    if (!ScaleViewportExtEx( HDC_32(hdc), xNum, xDenom, yNum, yDenom, &size ))\n        return FALSE;\n    return MAKELONG( size.cx,  size.cy );\n}\n\n\n/***********************************************************************\n *           LineTo    (GDI.19)\n */\nBOOL16 WINAPI LineTo16( HDC16 hdc, INT16 x, INT16 y )\n{\n    return LineTo( HDC_32(hdc), x, y );\n}\n\n\n/***********************************************************************\n *           MoveTo    (GDI.20)\n */\nDWORD WINAPI MoveTo16( HDC16 hdc, INT16 x, INT16 y )\n{\n    POINT pt;\n\n    if (!MoveToEx( HDC_32(hdc), x, y, &pt )) return 0;\n    return MAKELONG(pt.x,pt.y);\n}\n\n\n/***********************************************************************\n *           ExcludeClipRect    (GDI.21)\n */\nINT16 WINAPI ExcludeClipRect16( HDC16 hdc, INT16 left, INT16 top,\n                                INT16 right, INT16 bottom )\n{\n    return ExcludeClipRect( HDC_32(hdc), left, top, right, bottom );\n}\n\n\n/***********************************************************************\n *           IntersectClipRect    (GDI.22)\n */\nINT16 WINAPI IntersectClipRect16( HDC16 hdc, INT16 left, INT16 top,\n                                  INT16 right, INT16 bottom )\n{\n    return IntersectClipRect( HDC_32(hdc), left, top, right, bottom );\n}\n\n\n/***********************************************************************\n *           Arc    (GDI.23)\n */\nBOOL16 WINAPI Arc16( HDC16 hdc, INT16 left, INT16 top, INT16 right,\n                     INT16 bottom, INT16 xstart, INT16 ystart,\n                     INT16 xend, INT16 yend )\n{\n    return Arc( HDC_32(hdc), left, top, right, bottom, xstart, ystart, xend, yend );\n}\n\n\n/***********************************************************************\n *           Ellipse    (GDI.24)\n */\nBOOL16 WINAPI Ellipse16( HDC16 hdc, INT16 left, INT16 top,\n                         INT16 right, INT16 bottom )\n{\n    return Ellipse( HDC_32(hdc), left, top, right, bottom );\n}\n\n\n/**********************************************************************\n *          FloodFill   (GDI.25)\n */\nBOOL16 WINAPI FloodFill16( HDC16 hdc, INT16 x, INT16 y, COLORREF color )\n{\n    return ExtFloodFill( HDC_32(hdc), x, y, check_colorref(color), FLOODFILLBORDER );\n}\n\n\n/***********************************************************************\n *           Pie    (GDI.26)\n */\nBOOL16 WINAPI Pie16( HDC16 hdc, INT16 left, INT16 top,\n                     INT16 right, INT16 bottom, INT16 xstart, INT16 ystart,\n                     INT16 xend, INT16 yend )\n{\n    return Pie( HDC_32(hdc), left, top, right, bottom, xstart, ystart, xend, yend );\n}\n\n\n/***********************************************************************\n *           Rectangle    (GDI.27)\n */\nBOOL16 WINAPI Rectangle16( HDC16 hdc, INT16 left, INT16 top,\n                           INT16 right, INT16 bottom )\n{\n    return Rectangle( HDC_32(hdc), left, top, right, bottom );\n}\n\n\n/***********************************************************************\n *           RoundRect    (GDI.28)\n */\nBOOL16 WINAPI RoundRect16( HDC16 hdc, INT16 left, INT16 top, INT16 right,\n                           INT16 bottom, INT16 ell_width, INT16 ell_height )\n{\n    return RoundRect( HDC_32(hdc), left, top, right, bottom, ell_width, ell_height );\n}\n\n\n/***********************************************************************\n *           PatBlt    (GDI.29)\n */\nBOOL16 WINAPI PatBlt16( HDC16 hdc, INT16 left, INT16 top,\n                        INT16 width, INT16 height, DWORD rop)\n{\n    return PatBlt( HDC_32(hdc), left, top, width, height, rop );\n}\n\n\n/***********************************************************************\n *           SaveDC    (GDI.30)\n */\nINT16 WINAPI SaveDC16( HDC16 hdc )\n{\n    return SaveDC( HDC_32(hdc) );\n}\n\n\n/***********************************************************************\n *           SetPixel    (GDI.31)\n */\nCOLORREF WINAPI SetPixel16( HDC16 hdc, INT16 x, INT16 y, COLORREF color )\n{\n    return SetPixel( HDC_32(hdc), x, y, check_colorref(color) );\n}\n\n\n/***********************************************************************\n *           OffsetClipRgn    (GDI.32)\n */\nINT16 WINAPI OffsetClipRgn16( HDC16 hdc, INT16 x, INT16 y )\n{\n    return OffsetClipRgn( HDC_32(hdc), x, y );\n}\n\n\n/***********************************************************************\n *           TextOut    (GDI.33)\n */\nBOOL16 WINAPI TextOut16( HDC16 hdc, INT16 x, INT16 y, LPCSTR str, INT16 count )\n{\n    return TextOutA( HDC_32(hdc), x, y, str, count );\n}\n\n\n\n/***********************************************************************\n *           BitBlt    (GDI.34)\n */\nBOOL16 WINAPI BitBlt16( HDC16 hdcDst, INT16 xDst, INT16 yDst, INT16 width,\n                        INT16 height, HDC16 hdcSrc, INT16 xSrc, INT16 ySrc,\n                        DWORD rop )\n{\n    return StretchBlt16(hdcDst, xDst, yDst, width, height, hdcSrc, xSrc, ySrc, width, height, rop);\n}\n\n\n/***********************************************************************\n *           StretchBlt    (GDI.35)\n */\nBOOL16 WINAPI StretchBlt16( HDC16 hdcDst, INT16 xDst, INT16 yDst,\n                            INT16 widthDst, INT16 heightDst,\n                            HDC16 hdcSrc, INT16 xSrc, INT16 ySrc,\n                            INT16 widthSrc, INT16 heightSrc, DWORD rop )\n{\n    HDC hdcsrc32 = HDC_32(hdcSrc);\n    HDC hdcdst32 = HDC_32(hdcDst);\n    if (krnl386_get_compat_mode(\"256color\") && krnl386_get_config_int(\"otvdm\", \"DIBPalette\", FALSE) && (GetDeviceCaps(hdcsrc32, TECHNOLOGY) == DT_RASDISPLAY))\n    {\n        DIBSECTION dib, dibdst;\n        HBITMAP hbmp = GetCurrentObject(hdcsrc32, OBJ_BITMAP);\n        int count = GetObject(hbmp, sizeof(DIBSECTION), &dib);\n        HBITMAP hbmpdst = GetCurrentObject(hdcdst32, OBJ_BITMAP);\n        int countdst = GetObject(hbmpdst, sizeof(DIBSECTION), &dibdst);\n        BOOL srcdib, dstdib;\n\n        if ((count == sizeof(DIBSECTION)) && (dib.dsBmih.biBitCount == 8) && !dib.dshSection && (GetPtr16(HBITMAP_16(hbmp), 1) == 0xd1b00001))\n            srcdib = TRUE;\n        if ((countdst == sizeof(DIBSECTION)) && (dibdst.dsBmih.biBitCount == 8) && !dibdst.dshSection && (GetPtr16(HBITMAP_16(hbmpdst), 1) == 0xd1b00001))\n            dstdib = TRUE;\n\n        if (srcdib && (GetObjectType(hdcdst32) == OBJ_DC))\n        {\n            HPALETTE realpal = get_realized_palette();\n            if (realpal != GetStockObject(DEFAULT_PALETTE))\n            {\n                HPALETTE oldpal = SelectPalette(hdcsrc32, realpal, FALSE);\n                set_dib_colors_for_screen(hdcsrc32);\n                BOOL16 ret = StretchBlt(hdcdst32, xDst, yDst, widthDst, heightDst, hdcsrc32, xSrc, ySrc, widthSrc, heightSrc, rop);\n                SelectPalette(hdcsrc32, oldpal, FALSE);\n                set_dib_colors(hdcsrc32);\n                return ret;\n            }\n        }\n        if (dstdib && (GetObjectType(hdcsrc32) == OBJ_DC))\n        {\n            HPALETTE realpal = get_realized_palette();\n            if (realpal != GetStockObject(DEFAULT_PALETTE))\n            {\n                if (is_blank_palette(realpal)) return 0;\n                HPALETTE oldpal = SelectPalette(hdcdst32, realpal, FALSE);\n                set_dib_colors_for_screen(hdcdst32);\n                BOOL16 ret = StretchBlt(hdcdst32, xDst, yDst, widthDst, heightDst, hdcsrc32, xSrc, ySrc, widthSrc, heightSrc, rop);\n                SelectPalette(hdcdst32, oldpal, FALSE);\n                set_dib_colors(hdcdst32);\n                return ret;\n            }\n        }\n        if (dstdib && (dib.dsBm.bmBitsPixel == 1))\n        {\n            COLORREF txcolor = GetTextColor(hdcdst32);\n            COLORREF bkcolor = GetBkColor(hdcdst32);\n            SetTextColor(hdcdst32, convert_colorref(txcolor));\n            SetBkColor(hdcdst32, convert_colorref(bkcolor));\n            BOOL16 ret = StretchBlt(hdcdst32, xDst, yDst, widthDst, heightDst, hdcsrc32, xSrc, ySrc, widthSrc, heightSrc, rop);\n            SetTextColor(hdcdst32, txcolor);\n            SetBkColor(hdcdst32, bkcolor);\n            return ret;\n        }\n        if (srcdib && (dibdst.dsBm.bmBitsPixel == 1))\n        {\n            COLORREF bkcolor = GetBkColor(hdcsrc32);\n            SetBkColor(hdcsrc32, convert_colorref(bkcolor));\n            BOOL16 ret = StretchBlt(hdcdst32, xDst, yDst, widthDst, heightDst, hdcsrc32, xSrc, ySrc, widthSrc, heightSrc, rop);\n            SetBkColor(hdcsrc32, bkcolor);\n            return ret;\n        }\n    }\n    return StretchBlt(hdcdst32, xDst, yDst, widthDst, heightDst, hdcsrc32, xSrc, ySrc, widthSrc, heightSrc, rop);\n}\n\n\n/**********************************************************************\n *          Polygon  (GDI.36)\n */\nBOOL16 WINAPI Polygon16( HDC16 hdc, const POINT16* pt, INT16 count )\n{\n    int i;\n    BOOL ret;\n    LPPOINT pt32 = HeapAlloc( GetProcessHeap(), 0, count*sizeof(POINT) );\n\n    if (!pt32) return FALSE;\n    for (i=count;i--;)\n    {\n        pt32[i].x = pt[i].x;\n        pt32[i].y = pt[i].y;\n    }\n    ret = Polygon(HDC_32(hdc),pt32,count);\n    HeapFree( GetProcessHeap(), 0, pt32 );\n    return ret;\n}\n\n\n/**********************************************************************\n *          Polyline  (GDI.37)\n */\nBOOL16 WINAPI Polyline16( HDC16 hdc, const POINT16* pt, INT16 count )\n{\n    int i;\n    BOOL16 ret;\n    LPPOINT pt32 = HeapAlloc( GetProcessHeap(), 0, count*sizeof(POINT) );\n\n    if (!pt32) return FALSE;\n    for (i=count;i--;)\n    {\n        pt32[i].x = pt[i].x;\n        pt32[i].y = pt[i].y;\n    }\n    ret = Polyline(HDC_32(hdc),pt32,count);\n    HeapFree( GetProcessHeap(), 0, pt32 );\n    return ret;\n}\n\n\n/***********************************************************************\n *            Escape   (GDI.38)\n */\nINT16 WINAPI Escape16( HDC16 hdc, INT16 escape, INT16 in_count, SEGPTR in_data, LPVOID out_data )\n{\n    INT ret;\n\n    switch(escape)\n    {\n    /* Escape(hdc,CLIP_TO_PATH,LPINT16,NULL) */\n    /* Escape(hdc,DRAFTMODE,LPINT16,NULL) */\n    /* Escape(hdc,ENUMPAPERBINS,LPINT16,LPSTR); */\n    /* Escape(hdc,EPSPRINTING,LPINT16,NULL) */\n    /* Escape(hdc,EXT_DEVICE_CAPS,LPINT16,LPDWORD) */\n    /* Escape(hdc,GETCOLORTABLE,LPINT16,LPDWORD) */\n    /* Escape(hdc,MOUSETRAILS,LPINT16,NULL) */\n    /* Escape(hdc,POSTSCRIPT_IGNORE,LPINT16,NULL) */\n    /* Escape(hdc,QUERYESCSUPPORT,LPINT16,NULL) */\n    /* Escape(hdc,SET_ARC_DIRECTION,LPINT16,NULL) */\n    /* Escape(hdc,SET_POLY_MODE,LPINT16,NULL) */\n    /* Escape(hdc,SET_SCREEN_ANGLE,LPINT16,NULL) */\n    /* Escape(hdc,SET_SPREAD,LPINT16,NULL) */\n    case CLIP_TO_PATH:\n    case DRAFTMODE:\n    case ENUMPAPERBINS:\n    case EPSPRINTING:\n    case EXT_DEVICE_CAPS:\n    case GETCOLORTABLE:\n    case MOUSETRAILS:\n    case POSTSCRIPT_IGNORE:\n    case QUERYESCSUPPORT:\n    case SET_ARC_DIRECTION:\n    case SET_POLY_MODE:\n    case SET_SCREEN_ANGLE:\n    case SET_SPREAD:\n    {\n        INT16 *ptr = MapSL(in_data);\n        INT data = *ptr;\n        return Escape( HDC_32(hdc), escape, sizeof(data), (LPCSTR)&data, out_data );\n    }\n\n    /* Escape(hdc,ENABLEDUPLEX,LPUINT16,NULL) */\n    case ENABLEDUPLEX:\n    {\n        UINT16 *ptr = MapSL(in_data);\n        UINT data = *ptr;\n        return Escape( HDC_32(hdc), escape, sizeof(data), (LPCSTR)&data, NULL );\n    }\n\n    /* Escape(hdc,GETPHYSPAGESIZE,NULL,LPPOINT16) */\n    /* Escape(hdc,GETPRINTINGOFFSET,NULL,LPPOINT16) */\n    /* Escape(hdc,GETSCALINGFACTOR,NULL,LPPOINT16) */\n    case GETPHYSPAGESIZE:\n    case GETPRINTINGOFFSET:\n    case GETSCALINGFACTOR:\n    {\n        POINT16 *ptr = out_data;\n        POINT pt32;\n        ret = Escape( HDC_32(hdc), escape, 0, NULL, &pt32 );\n        ptr->x = pt32.x;\n        ptr->y = pt32.y;\n        return ret;\n    }\n\n    /* Escape(hdc,ENABLEPAIRKERNING,LPINT16,LPINT16); */\n    /* Escape(hdc,ENABLERELATIVEWIDTHS,LPINT16,LPINT16); */\n    /* Escape(hdc,SETCOPYCOUNT,LPINT16,LPINT16) */\n    /* Escape(hdc,SETKERNTRACK,LPINT16,LPINT16) */\n    /* Escape(hdc,SETLINECAP,LPINT16,LPINT16) */\n    /* Escape(hdc,SETLINEJOIN,LPINT16,LPINT16) */\n    /* Escape(hdc,SETMITERLIMIT,LPINT16,LPINT16) */\n    case ENABLEPAIRKERNING:\n    case ENABLERELATIVEWIDTHS:\n    case SETCOPYCOUNT:\n    case SETKERNTRACK:\n    case SETLINECAP:\n    case SETLINEJOIN:\n    case SETMITERLIMIT:\n    case SETCHARSET:\n    {\n        INT16 *new = MapSL(in_data);\n        INT16 *old = out_data;\n        INT out, in = *new;\n        ret = Escape( HDC_32(hdc), escape, sizeof(in), (LPCSTR)&in, &out );\n        if (old)\n            *old = out;\n        return ret;\n    }\n\n    /* Escape(hdc,SETABORTPROC,ABORTPROC,NULL); */\n    case SETABORTPROC:\n        return SetAbortProc16( hdc, (ABORTPROC16)in_data );\n\n    /* Escape(hdc,STARTDOC,LPSTR,LPDOCINFO16);\n     * lpvOutData is actually a pointer to the DocInfo structure and used as\n     * a second input parameter */\n    case STARTDOC:\n        if (out_data)\n        {\n            ret = StartDoc16( hdc, out_data );\n            if (ret > 0) ret = StartPage( HDC_32(hdc) );\n            return ret;\n        }\n        return Escape( HDC_32(hdc), escape, in_count, MapSL(in_data), NULL );\n\n    /* Escape(hdc,SET_BOUNDS,LPRECT16,NULL); */\n    /* Escape(hdc,SET_CLIP_BOX,LPRECT16,NULL); */\n    case SET_BOUNDS:\n    case SET_CLIP_BOX:\n    {\n        RECT16 *rc16 = MapSL(in_data);\n        RECT rc;\n        rc.left   = rc16->left;\n        rc.top    = rc16->top;\n        rc.right  = rc16->right;\n        rc.bottom = rc16->bottom;\n        return Escape( HDC_32(hdc), escape, sizeof(rc), (LPCSTR)&rc, NULL );\n    }\n\n    /* Escape(hdc,NEXTBAND,NULL,LPRECT16); */\n    case NEXTBAND:\n    {\n        RECT rc;\n        RECT16 *rc16 = out_data;\n        ret = Escape( HDC_32(hdc), escape, 0, NULL, &rc );\n        rc16->left   = rc.left;\n        rc16->top    = rc.top;\n        rc16->right  = rc.right;\n        rc16->bottom = rc.bottom;\n        return ret;\n    }\n    /* Escape(hdc,DRAWPATTERNRECT,PRECT_STRUCT*,NULL); */\n    case DRAWPATTERNRECT:\n    {\n        DRAWPATRECT pr;\n        DRAWPATRECT16 *pr16 = MapSL(in_data);\n\n        pr.ptPosition.x = pr16->ptPosition.x;\n        pr.ptPosition.y = pr16->ptPosition.y;\n        pr.ptSize.x\t= pr16->ptSize.x;\n        pr.ptSize.y\t= pr16->ptSize.y;\n        pr.wStyle\t= pr16->wStyle;\n        pr.wPattern\t= pr16->wPattern;\n        return Escape( HDC_32(hdc), escape, sizeof(pr), (LPCSTR)&pr, NULL );\n    }\n\n    /* Escape(hdc,ABORTDOC,NULL,NULL); */\n    /* Escape(hdc,BANDINFO,BANDINFOSTRUCT*,BANDINFOSTRUCT*); */\n    /* Escape(hdc,BEGIN_PATH,NULL,NULL); */\n    /* Escape(hdc,ENDDOC,NULL,NULL); */\n    /* Escape(hdc,END_PATH,PATHINFO,NULL); */\n    /* Escape(hdc,EXTTEXTOUT,EXTTEXT_STRUCT*,NULL); */\n    /* Escape(hdc,FLUSHOUTPUT,NULL,NULL); */\n    /* Escape(hdc,GETFACENAME,NULL,LPSTR); */\n    /* Escape(hdc,GETPAIRKERNTABLE,NULL,KERNPAIR*); */\n    /* Escape(hdc,GETSETPAPERBINS,BinInfo*,BinInfo*); */\n    /* Escape(hdc,GETSETPRINTORIENT,ORIENT*,NULL); */\n    /* Escape(hdc,GETSETSCREENPARAMS,SCREENPARAMS*,SCREENPARAMS*); */\n    /* Escape(hdc,GETTECHNOLOGY,NULL,LPSTR); */\n    /* Escape(hdc,GETTRACKKERNTABLE,NULL,KERNTRACK*); */\n    /* Escape(hdc,MFCOMMENT,LPSTR,NULL); */\n    /* Escape(hdc,NEWFRAME,NULL,NULL); */\n    /* Escape(hdc,PASSTHROUGH,LPSTR,NULL); */\n    /* Escape(hdc,RESTORE_CTM,NULL,NULL); */\n    /* Escape(hdc,SAVE_CTM,NULL,NULL); */\n    /* Escape(hdc,SETALLJUSTVALUES,EXTTEXTDATA*,NULL); */\n    /* Escape(hdc,SETCOLORTABLE,COLORTABLE_STRUCT*,LPDWORD); */\n    /* Escape(hdc,SET_BACKGROUND_COLOR,LPDWORD,LPDWORD); */\n    /* Escape(hdc,TRANSFORM_CTM,LPSTR,NULL); */\n    case ABORTDOC:\n    case BANDINFO:\n    case BEGIN_PATH:\n    case ENDDOC:\n    case END_PATH:\n    case EXTTEXTOUT:\n    case FLUSHOUTPUT:\n    case GETFACENAME:\n    case GETPAIRKERNTABLE:\n    case GETSETPAPERBINS:\n    case GETSETPRINTORIENT:\n    case GETSETSCREENPARAMS:\n    case GETTECHNOLOGY:\n    case GETTRACKKERNTABLE:\n    case MFCOMMENT:\n    case NEWFRAME:\n    case PASSTHROUGH:\n    case RESTORE_CTM:\n    case SAVE_CTM:\n    case SETALLJUSTVALUES:\n    case SETCOLORTABLE:\n    case SET_BACKGROUND_COLOR:\n    case TRANSFORM_CTM:\n        /* pass it unmodified to the 32-bit function */\n        return Escape( HDC_32(hdc), escape, in_count, MapSL(in_data), out_data );\n\n    /* Escape(hdc,ENUMPAPERMETRICS,LPINT16,LPRECT16); */\n    /* Escape(hdc,GETEXTENDEDTEXTMETRICS,LPUINT16,EXTTEXTMETRIC*); */\n    /* Escape(hdc,GETEXTENTTABLE,LPSTR,LPINT16); */\n    /* Escape(hdc,GETSETPAPERMETRICS,LPRECT16,LPRECT16); */\n    /* Escape(hdc,GETVECTORBRUSHSIZE,LPLOGBRUSH16,LPPOINT16); */\n    /* Escape(hdc,GETVECTORPENSIZE,LPLOGPEN16,LPPOINT16); */\n    case ENUMPAPERMETRICS:\n    case GETEXTENDEDTEXTMETRICS:\n    case GETEXTENTTABLE:\n    case GETSETPAPERMETRICS:\n    case GETVECTORBRUSHSIZE:\n    case GETVECTORPENSIZE:\n    default:\n        FIXME(\"unknown/unsupported 16-bit escape %x (%d,%p,%p)\\n\",\n              escape, in_count, MapSL(in_data), out_data );\n        return Escape( HDC_32(hdc), escape, in_count, MapSL(in_data), out_data );\n    case 0xA1D:\n    {\n        /* get EUDC font size */\n        TEXTMETRICW tm;\n        SIZE16 *size = (SIZE16*)out_data;\n        if (GetTextMetricsW(HDC_32(hdc), &tm))\n        {\n            size->cx = size->cy = tm.tmHeight;\n            return TRUE;\n        }\n        return FALSE;\n    }\n    }\n}\n\n\n/***********************************************************************\n *           RestoreDC    (GDI.39)\n */\nBOOL16 WINAPI RestoreDC16( HDC16 hdc, INT16 level )\n{\n    return RestoreDC( HDC_32(hdc), level );\n}\n\n\n/***********************************************************************\n *           FillRgn    (GDI.40)\n */\nBOOL16 WINAPI FillRgn16( HDC16 hdc, HRGN16 hrgn, HBRUSH16 hbrush )\n{\n    return FillRgn( HDC_32(hdc), HRGN_32(hrgn), HBRUSH_32(hbrush) );\n}\n\n\n/***********************************************************************\n *           FrameRgn     (GDI.41)\n */\nBOOL16 WINAPI FrameRgn16( HDC16 hdc, HRGN16 hrgn, HBRUSH16 hbrush,\n                          INT16 nWidth, INT16 nHeight )\n{\n    return FrameRgn( HDC_32(hdc), HRGN_32(hrgn), HBRUSH_32(hbrush), nWidth, nHeight );\n}\n\n\n/***********************************************************************\n *           InvertRgn    (GDI.42)\n */\nBOOL16 WINAPI InvertRgn16( HDC16 hdc, HRGN16 hrgn )\n{\n    return InvertRgn( HDC_32(hdc), HRGN_32(hrgn) );\n}\n\n\n/***********************************************************************\n *           PaintRgn    (GDI.43)\n */\nBOOL16 WINAPI PaintRgn16( HDC16 hdc, HRGN16 hrgn )\n{\n    return PaintRgn( HDC_32(hdc), HRGN_32(hrgn) );\n}\n\n\n/***********************************************************************\n *           SelectClipRgn    (GDI.44)\n */\nINT16 WINAPI SelectClipRgn16( HDC16 hdc, HRGN16 hrgn )\n{\n    return SelectClipRgn( HDC_32(hdc), HRGN_32(hrgn) );\n}\n\n\n/***********************************************************************\n *           SelectObject    (GDI.45)\n */\nHGDIOBJ16 WINAPI SelectObject16( HDC16 hdc, HGDIOBJ16 handle )\n{\n    HDC hdc32 = HDC_32(hdc);\n    HGDIOBJ handle32 = HGDIOBJ_32(handle);\n    HGDIOBJ result = SelectObject( hdc32, handle32 );\n    DWORD type = GetObjectType(handle32);\n    if (krnl386_get_compat_mode(\"256color\") && krnl386_get_config_int(\"otvdm\", \"DIBPalette\", FALSE) && result && (type == OBJ_BITMAP) && (GetCurrentObject(hdc32, OBJ_PAL) != GetStockObject(DEFAULT_PALETTE)))\n    {\n        DIBSECTION dib;\n        int count = GetObject(handle32, sizeof(DIBSECTION), &dib);\n        if ((count == sizeof(DIBSECTION)) && (dib.dsBmih.biBitCount == 8) && !dib.dshSection && (GetPtr16(handle, 1) == 0xd1b00001))\n            set_dib_colors(hdc32);\n    }\n    return HGDIOBJ_16( result );\n}\n\n\n/***********************************************************************\n *           CombineRgn    (GDI.47)\n */\nINT16 WINAPI CombineRgn16(HRGN16 hDest, HRGN16 hSrc1, HRGN16 hSrc2, INT16 mode)\n{\n    return CombineRgn( HRGN_32(hDest), HRGN_32(hSrc1), HRGN_32(hSrc2), mode );\n}\n\n\n/***********************************************************************\n *           CreateBitmap    (GDI.48)\n */\nHBITMAP16 WINAPI CreateBitmap16( INT16 width, INT16 height, UINT16 planes,\n                                 UINT16 bpp, LPCVOID bits )\n{\n    if (krnl386_get_compat_mode(\"256color\") && (bpp == 8) && (planes == 1))\n    {\n        HBITMAP16 ret;\n        if (krnl386_get_config_int(\"otvdm\", \"DIBPalette\", FALSE))\n        {\n            HDC16 dc = CreateCompatibleDC16(NULL);\n            ret = CreateCompatibleBitmap16(dc, width, height);\n            if (bits)\n                SetBitmapBits(HBITMAP_32(ret), width * height, bits);\n            DeleteDC16(dc);\n        }\n        else\n        {\n            HDC dc = GetDC(NULL);\n            HBITMAP ret32 = CreateCompatibleBitmap(dc, width, height);\n            if (bits)\n            {\n                BITMAPINFO *bmap = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 256*2 + sizeof(BITMAPINFOHEADER));\n                UINT16 *colors = (UINT16 *)bmap->bmiColors;\n                VOID *section;\n                bmap->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\n                bmap->bmiHeader.biWidth = width;\n                bmap->bmiHeader.biHeight = -height;\n                bmap->bmiHeader.biPlanes = 1;\n                bmap->bmiHeader.biBitCount = 8;\n                for (int i = 0; i < 256; i++)\n                    colors[i] = i;\n                SetDIBits(dc, ret, 0, height, bits, bmap, DIB_PAL_COLORS);\n                HeapFree(GetProcessHeap(), 0, bmap);\n            }\n            ret = HBITMAP_16(ret32);\n            ReleaseDC(NULL, dc);\n        }\n        return ret;\n    }\n    else if ((planes == 1) && (bpp > 8))\n    {\n        HDC dc = GetDC(NULL);\n        if (bpp == GetDeviceCaps(dc, BITSPIXEL))\n        {\n            BITMAPINFO bmpinfo = {0};\n            VOID *bmp;\n            HDC16 dc16 = HDC_16(dc);\n            bmpinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\n            bmpinfo.bmiHeader.biWidth = width;\n            bmpinfo.bmiHeader.biHeight = -height;\n            bmpinfo.bmiHeader.biPlanes = 1;\n            bmpinfo.bmiHeader.biBitCount = bpp;\n            HBITMAP16 ret = CreateDIBSection16(dc16, &bmpinfo, DIB_RGB_COLORS, &bmp, NULL, NULL);\n            if (bits)\n                SetDIBits(dc, HBITMAP_32(ret), 0, height, bits, &bmpinfo, DIB_RGB_COLORS);\n            ReleaseDC(NULL, dc);\n            return ret;\n        }\n        ReleaseDC(NULL, dc);\n    }\n\n    return HBITMAP_16( CreateBitmap( width, height, planes & 0xff, bpp & 0xff, bits ) );\n}\n\n\n/***********************************************************************\n *           CreateBitmapIndirect    (GDI.49)\n */\nHBITMAP16 WINAPI CreateBitmapIndirect16( const BITMAP16 * bmp )\n{\n    return CreateBitmap16( bmp->bmWidth, bmp->bmHeight, bmp->bmPlanes,\n                           bmp->bmBitsPixel, MapSL( bmp->bmBits ) );\n}\n\n\n/***********************************************************************\n *           CreateBrushIndirect    (GDI.50)\n */\nHBRUSH16 WINAPI CreateBrushIndirect16( const LOGBRUSH16 * brush )\n{\n    LOGBRUSH brush32;\n\n    if (brush->lbStyle == BS_DIBPATTERN || brush->lbStyle == BS_DIBPATTERN8X8)\n        return CreateDIBPatternBrush16( brush->lbHatch, brush->lbColor );\n\n    if (brush->lbStyle == BS_NULL)\n        return GetStockObject16(NULL_BRUSH);\n\n    brush32.lbStyle = brush->lbStyle;\n    brush32.lbColor = brush->lbColor;\n    if (brush->lbStyle == BS_PATTERN)\n    {\n        brush32.lbHatch = HBITMAP_32(brush->lbHatch);\n    }\n    else\n        brush32.lbHatch = brush->lbHatch;\n    return HBRUSH_16( CreateBrushIndirect(&brush32) );\n}\n\n\n/***********************************************************************\n *           CreateCompatibleBitmap    (GDI.51)\n */\nHBITMAP16 WINAPI CreateCompatibleBitmap16( HDC16 hdc, INT16 width, INT16 height )\n{\n    HDC hdc32 = HDC_32(hdc);\n    if (krnl386_get_compat_mode(\"256color\") && krnl386_get_config_int(\"otvdm\", \"DIBPalette\", FALSE) && (GetDeviceCaps(hdc32, TECHNOLOGY) == DT_RASDISPLAY))\n    {\n        HBITMAP16 ret;\n        VOID *section;\n        BITMAPINFO *bmap = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 256*2 + sizeof(BITMAPINFOHEADER));\n        UINT16 *colors = (UINT16 *)bmap->bmiColors;\n        bmap->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\n        bmap->bmiHeader.biWidth = width;\n        bmap->bmiHeader.biHeight = -height;\n        bmap->bmiHeader.biPlanes = 1;\n        bmap->bmiHeader.biBitCount = 8;\n        for (int i = 0; i < 256; i++)\n            colors[i] = i;\n        ret = HBITMAP_16(CreateDIBSection(hdc32, bmap, DIB_PAL_COLORS, &section, NULL, NULL));\n        SetPtr16(ret, 0xd1b00001, 1);\n        HeapFree(GetProcessHeap(), 0, bmap);\n        return ret;\n    }\n    return HBITMAP_16( CreateCompatibleBitmap( hdc32, width, height ) );\n}\n\nBOOL16 WINAPI IsOldWindowsTask(HINSTANCE16 hInst);\nBYTE get_aflags(HMODULE16 hModule);\nHPALETTE16 WINAPI SelectPalette16(HDC16 hdc, HPALETTE16 hpal, BOOL16 bForceBackground);\n/***********************************************************************\n *           CreateCompatibleDC    (GDI.52)\n */\nHDC16 WINAPI CreateCompatibleDC16( HDC16 hdc )\n{\n    HDC hdc32 = CreateCompatibleDC( HDC_32(hdc) );\n    if (IsOldWindowsTask(GetCurrentTask()) && !(get_aflags(GetExePtr(GetCurrentTask())) & NE_AFLAGS_WIN2_PROTMODE) && (GetCurrentObject(hdc32, OBJ_FONT) == GetStockObject(SYSTEM_FONT)))\n        SelectObject(hdc32, GetStockObject(SYSTEM_FIXED_FONT));\n    if (krnl386_get_compat_mode(\"256color\") && krnl386_get_config_int(\"otvdm\", \"DIBPalette\", FALSE) && (GetDeviceCaps(hdc32, TECHNOLOGY) == DT_RASDISPLAY))\n        SelectPalette16(HDC_16(hdc32), HPALETTE_16(get_realized_palette()), FALSE);\n    return HDC_16(hdc32);\n}\n\n\nvoid add_dib_driver_entry(HBITMAP bitmap, HDC dc, HANDLE hSection, LPVOID bits, WORD selector, DWORD size, DWORD padding)\n{\n    struct dib_driver *drv = (struct dib_driver*)HeapAlloc(GetProcessHeap(), 0, sizeof(struct dib_driver));\n    drv->bitmap = bitmap;\n    drv->hdc = dc;\n    drv->hSection = hSection;\n    drv->map = bits;\n    drv->selector = selector;\n    drv->size = size;\n    drv->padding = padding;\n    list_add_head(&dib_drivers, &drv->entry);\n}\nstruct dib_driver *find_dib_driver(WORD selector)\n{\n    struct dib_driver *dib, *next;\n    LIST_FOR_EACH_ENTRY_SAFE(dib, next, &dib_drivers, struct dib_driver, entry)\n    {\n        if (dib->selector == selector)\n            return dib;\n    }\n    return NULL;\n}\n\nstruct\n{\n    BITMAPINFOHEADER bmi;\n    RGBQUAD colors[16];\n}  dib_pal_colors_hack =\n{\n    {0x28, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},\n    {{0, 0, 0}, {0, 0, 0x80}, {0, 0x80, 0}, {0, 0x80, 0x80}, {0x80, 0, 0}, {0x80, 0, 0x80},\n     {0x80, 0x80, 0}, {0xc0, 0xc0, 0xc0}, {0x80, 0x80, 0x80}, {0, 0, 0xff}, {0, 0xff, 0},\n     {0, 0xff, 0xff}, {0xff, 0, 0}, {0xff, 0, 0xff}, {0xff, 0xff, 0}, {0xff, 0xff, 0xff}}\n};\n\n/***********************************************************************\n *           CreateDC    (GDI.53)\n */\nHDC16 WINAPI CreateDC16( LPCSTR driver, LPCSTR device, LPCSTR output,\n                         SEGPTR segInitData )\n{\n    const DEVMODEA *initData = (const DEVMODEA*)MapSL(segInitData);\n    HDC16 dc;\n    HINSTANCE16 drv;\n    char tmp[256];\n    if (device && !strcmp(device, \"DefaultPrinter\"))\n    {\n        int len = 256;\n        if (GetDefaultPrinterA(tmp, &len))\n            device = tmp;\n    }\n\n#if 0\n    if (!lstrcmpiA( driver, \"dib\" ) || !lstrcmpiA( driver, \"dirdib\" ))\n    {\n        struct window_surface *surface;\n        HDC hdc;\n\n        if (!(surface = create_surface( (const BITMAPINFO *)initData ))) return 0;\n\n        if ((hdc = CreateDCA( \"DISPLAY\", NULL, NULL, NULL )))\n        {\n            __wine_set_visible_region( hdc, CreateRectRgnIndirect( &surface->rect ),\n                                       &surface->rect, &surface->rect, surface );\n            TRACE( \"returning hdc %p surface %p\\n\", hdc, surface );\n        }\n        window_surface_release( surface );\n        return HDC_16( hdc );\n    }\n#else\n    if (!lstrcmpiA(driver, \"dib\") || !lstrcmpiA(driver, \"dirdib\") || !lstrcmpiA(driver, \"dib.drv\") || !lstrcmpiA(driver, \"dirdib.drv\"))\n    {\n        void *pvBits;\n        HDC memdc = CreateCompatibleDC(NULL);\n        HBITMAP bitmap;\n        WORD selector = SELECTOROF(segInitData);\n        WORD offset = OFFSETOF(segInitData);\n        LPVOID base = MapSL(MAKESEGPTR(selector, 0));\n        DWORD limit = wine_ldt_copy.limit[selector >> __AHSHIFT] + 1;\n        volatile  BITMAPINFO *bmi = (const BITMAPINFO *)initData;\n        HANDLE hSection = INVALID_HANDLE_VALUE;\n        LPBYTE bits = NULL;\n        DWORD avail_size;\n        DWORD offset_align;\n        DWORD offset_bits;\n        if (segInitData == 0)\n        {\n            return HDC_16(memdc);\n        }\n        if (find_dib_driver(selector))\n        {\n            FIXME(\"Multiple DIB mappings on the same segment are not supported.\\n\");\n            return HDC_16(memdc);\n        }\n        // check for dib_pal_colors hack\n        if (bmi->bmiHeader.biBitCount <= 8) // does dib.drv support direct color modes?\n        {\n            int maxcolor = bmi->bmiHeader.biClrUsed ? bmi->bmiHeader.biClrUsed : 1 << bmi->bmiHeader.biBitCount;\n            offset_bits = offset + bmi->bmiHeader.biSize + maxcolor * sizeof(RGBQUAD);\n            int chkcolor = bmi->bmiHeader.biClrImportant ? bmi->bmiHeader.biClrImportant : maxcolor;\n            for (int i = 0; i < chkcolor; i++)\n            {\n                if (((WORD *)bmi->bmiColors)[i] != i) break;\n                if (i == (chkcolor - 1))\n                {\n                    dib_pal_colors_hack.bmi.biWidth = bmi->bmiHeader.biWidth;\n                    dib_pal_colors_hack.bmi.biHeight = bmi->bmiHeader.biHeight;\n                    dib_pal_colors_hack.bmi.biBitCount = bmi->bmiHeader.biBitCount;\n                    dib_pal_colors_hack.bmi.biClrUsed = min(maxcolor, 16);\n                    bmi = (BITMAPINFO *)&dib_pal_colors_hack;\n                    break;\n                }\n            }\n        }\n        else\n            offset_bits = offset + bmi->bmiHeader.biSize;\n#define DWORD_PADDING(x) (((x) + 3) & -4)\n        offset_align = DWORD_PADDING(offset_bits) - offset_bits;\n        avail_size = max(0x10000, limit);\n        hSection = CreateFileMappingW(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, avail_size + offset_align, NULL);\n        bits = (LPBYTE)MapViewOfFile(hSection, FILE_MAP_WRITE, 0, 0, 0);\n        memcpy(bits + offset_align, base, limit);\n        bitmap = CreateDIBSection(NULL, bmi, DIB_RGB_COLORS, &pvBits, hSection, offset_align + offset_bits);\n        SelectObject(memdc, bitmap);\n        DibMapGlobalMemory(selector, (LPBYTE)bits + offset_align, avail_size);\n        if (bmi->bmiHeader.biClrUsed)\n            SetDIBColorTable(memdc, 0, bmi->bmiHeader.biClrUsed, &bmi->bmiColors);\n        add_dib_driver_entry(bitmap, memdc, hSection, bits, selector, avail_size, offset_align);\n        return HDC_16(memdc);\n    }\n#endif\n    if (!driver || !stricmp(driver, \"winspool\"))\n    {\n        if (!initData || !IsValidDevmodeA(initData, initData->dmSize + initData->dmDriverExtra))\n        {\n            LONG size = ExtDeviceMode(NULL, NULL, NULL, device, output, NULL, NULL, 0);\n            char *dma = (char *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);\n            ExtDeviceMode(NULL, NULL, (LPDEVMODEA)dma, device, output, NULL, NULL, DM_COPY);\n            HDC16 ret = HDC_16(CreateDCA(driver, device, output, (LPDEVMODEA)dma));\n            HeapFree(GetProcessHeap(), 0, (LPVOID)dma);\n            return ret;\n        }\n        else\n        {\n            DEVMODEA dma = {0};\n            memcpy(&dma, initData, initData->dmSize);\n            dma.dmSize = sizeof(DEVMODEA);\n            dma.dmDriverExtra = 0;\n            return HDC_16( CreateDCA( driver, device, output, &dma ) );\n        }\n    }\n    \n    dc = HDC_16( CreateDCA( driver, device, output, initData ) );\n\n    if (dc)\n        return dc;\n    drv = LoadLibrary16(driver);\n    if (drv == 2)\n    {\n        char buf[MAX_PATH];\n        *buf = 0;\n        StringCchCatA(buf, ARRAYSIZE(buf), driver);\n        StringCchCatA(buf, ARRAYSIZE(buf), \".DRV\");\n        drv = LoadLibrary16(buf);\n    }\n    if (drv < 32)\n    {\n        ERR(\"DC driver %s not found\\n\", debugstr_a(driver));\n        return 0;\n    }\n    FIXME(\"DC driver %s not supported\\n\", debugstr_a(driver));\n    return CreateDC16(\"DIB\", NULL, NULL, NULL);\n}\n\n\n/***********************************************************************\n *           CreateEllipticRgn    (GDI.54)\n */\nHRGN16 WINAPI CreateEllipticRgn16( INT16 left, INT16 top, INT16 right, INT16 bottom )\n{\n    return HRGN_16( CreateEllipticRgn( left, top, right, bottom ) );\n}\n\n\n/***********************************************************************\n *           CreateEllipticRgnIndirect    (GDI.55)\n */\nHRGN16 WINAPI CreateEllipticRgnIndirect16( const RECT16 *rect )\n{\n    return HRGN_16( CreateEllipticRgn( rect->left, rect->top, rect->right, rect->bottom ) );\n}\n\n\nstatic BYTE fix_font_charset(BYTE charset)\n{\n    //windows 3.1(JP) behaviour\n    if (GetACP() == 932/*sjis*/)\n    {\n        if (charset != ANSI_CHARSET && charset != DEFAULT_CHARSET && charset != SYMBOL_CHARSET && charset != OEM_CHARSET)\n        {\n            charset = SHIFTJIS_CHARSET;\n        }\n    }\n    return charset;\n}\n\n/***********************************************************************\n *           CreateFontIndirect   (GDI.57)\n */\nHFONT16 WINAPI CreateFontIndirect16( const LOGFONT16 *plf16 )\n{\n    HFONT ret;\n    if (plf16)\n    {\n        LOGFONTA lfA;\n        logfont_16_to_A( plf16, &lfA );\n        if (lfA.lfCharSet == 0xfe)\n            lfA.lfCharSet = 0xfd;\n        ret = CreateFontIndirectA( &lfA );\n        TRACE(\"(%d, %d, %04X, %04X, %04X, %02X, %02X, %02X, %02X, %02X, %02X, %02X, %s) = %04X\\n\", plf16->lfHeight, plf16->lfWidth, plf16->lfEscapement, plf16->lfOrientation, plf16->lfWeight\n            , plf16->lfItalic, plf16->lfUnderline, plf16->lfStrikeOut, plf16->lfCharSet, plf16->lfOutPrecision, plf16->lfClipPrecision\n            , plf16->lfPitchAndFamily, debugstr_a(plf16->lfFaceName), (int)HFONT_16(ret));\n    }\n    else ret = CreateFontIndirectA( NULL );\n    return HFONT_16(ret);\n}\n\n/***********************************************************************\n*           CreateFont    (GDI.56)\n*/\nHFONT16 WINAPI CreateFont16(INT16 height, INT16 width, INT16 esc, INT16 orient,\n    INT16 weight, BYTE italic, BYTE underline,\n    BYTE strikeout, BYTE charset, BYTE outpres,\n    BYTE clippres, BYTE quality, BYTE pitch,\n    LPCSTR name)\n{\n    LOGFONT16 lf16 = { 0 };\n    lf16.lfHeight = height;\n    lf16.lfWidth = width;\n    lf16.lfEscapement = esc;\n    lf16.lfOrientation = orient;\n    lf16.lfWeight = weight;\n    lf16.lfItalic = italic;\n    lf16.lfUnderline = underline;\n    lf16.lfStrikeOut = strikeout;\n    lf16.lfCharSet = charset;\n    lf16.lfOutPrecision = outpres;\n    lf16.lfClipPrecision = clippres;\n    lf16.lfQuality = quality;\n    lf16.lfPitchAndFamily = pitch;\n    if (name)\n        memcpy(lf16.lfFaceName, name, min(LF_FACESIZE - 1, strlen(name) + 1));\n    return CreateFontIndirect16(&lf16);\n}\n\n/***********************************************************************\n *           CreateHatchBrush    (GDI.58)\n */\nHBRUSH16 WINAPI CreateHatchBrush16( INT16 style, COLORREF color )\n{\n    return HBRUSH_16( CreateHatchBrush( style, check_colorref(color) ) );\n}\n\n\n/***********************************************************************\n *           CreatePatternBrush    (GDI.60)\n */\nHBRUSH16 WINAPI CreatePatternBrush16( HBITMAP16 hbitmap )\n{\n    return HBRUSH_16( CreatePatternBrush( HBITMAP_32(hbitmap) ));\n}\n\n\n/***********************************************************************\n *           CreatePen    (GDI.61)\n */\nHPEN16 WINAPI CreatePen16( INT16 style, INT16 width, COLORREF color )\n{\n    LOGPEN logpen;\n\n    if (style == PS_NULL)\n        return GetStockObject16(NULL_PEN);\n\n    logpen.lopnStyle = style;\n    logpen.lopnWidth.x = width;\n    logpen.lopnWidth.y = 0;\n    logpen.lopnColor = check_colorref(color);\n    return HPEN_16( CreatePenIndirect( &logpen ) );\n}\n\n\n/***********************************************************************\n *           CreatePenIndirect    (GDI.62)\n */\nHPEN16 WINAPI CreatePenIndirect16( const LOGPEN16 * pen )\n{\n    LOGPEN logpen;\n\n    if (pen->lopnStyle == PS_NULL)\n        return GetStockObject16(NULL_PEN);\n    \n    if (pen->lopnStyle > PS_INSIDEFRAME) return 0;\n    logpen.lopnStyle   = pen->lopnStyle;\n    logpen.lopnWidth.x = pen->lopnWidth.x;\n    logpen.lopnWidth.y = pen->lopnWidth.y;\n    logpen.lopnColor   = pen->lopnColor;\n    return HPEN_16( CreatePenIndirect( &logpen ) );\n}\n\n\n/***********************************************************************\n *           CreatePolygonRgn    (GDI.63)\n */\nHRGN16 WINAPI CreatePolygonRgn16( const POINT16 * points, INT16 count, INT16 mode )\n{\n    return CreatePolyPolygonRgn16( points, &count, 1, mode );\n}\n\n\n/***********************************************************************\n *           CreateRectRgn    (GDI.64)\n *\n * NOTE: cf. SetRectRgn16\n */\nHRGN16 WINAPI CreateRectRgn16( INT16 left, INT16 top, INT16 right, INT16 bottom )\n{\n    HRGN hrgn;\n\n    if (left < right) hrgn = CreateRectRgn( left, top, right, bottom );\n    else hrgn = CreateRectRgn( 0, 0, 0, 0 );\n    return HRGN_16(hrgn);\n}\n\n\n/***********************************************************************\n *           CreateRectRgnIndirect    (GDI.65)\n */\nHRGN16 WINAPI CreateRectRgnIndirect16( const RECT16* rect )\n{\n    return CreateRectRgn16( rect->left, rect->top, rect->right, rect->bottom );\n}\n\n\n/***********************************************************************\n *           CreateSolidBrush    (GDI.66)\n */\nHBRUSH16 WINAPI CreateSolidBrush16( COLORREF color )\n{\n    return HBRUSH_16( CreateSolidBrush( check_colorref(color) ) );\n}\n\n\nvoid delete_dib_driver(HDC hdc)\n{\n    struct dib_driver *dib, *next;\n    LIST_FOR_EACH_ENTRY_SAFE(dib, next, &dib_drivers, struct dib_driver, entry)\n    {\n        if (dib->hdc != hdc) continue;\n        list_remove(&dib->entry);\n        DibUnmapGlobalMemory((LPBYTE)dib->map + dib->padding, dib->size);\n        DeleteObject(dib->bitmap);\n        UnmapViewOfFile(dib->map);\n        CloseHandle(dib->hSection);\n        HeapFree(GetProcessHeap(), 0, dib);\n    }\n}\n/***********************************************************************\n *           DeleteDC    (GDI.68)\n */\nBOOL16 WINAPI DeleteDC16( HDC16 hdc )\n{\n    HDC hdc32 = HDC_32(hdc);\n    if (krnl386_get_compat_mode(\"256color\") && krnl386_get_config_int(\"otvdm\", \"DIBPalette\", FALSE) && (GetDeviceCaps(hdc32, TECHNOLOGY) == DT_RASDISPLAY))\n        SelectPalette(hdc32, GetStockObject(DEFAULT_PALETTE), FALSE);\n    if (DeleteDC( hdc32 ))\n    {\n        struct saved_visrgn *saved, *next;\n        struct gdi_thunk* thunk;\n\n        if ((thunk = GDI_FindThunk(hdc))) GDI_DeleteThunk(thunk);\n\n        LIST_FOR_EACH_ENTRY_SAFE( saved, next, &saved_regions, struct saved_visrgn, entry )\n        {\n            if (saved->hdc != hdc32) continue;\n            list_remove( &saved->entry );\n            DeleteObject( saved->hrgn );\n            HeapFree( GetProcessHeap(), 0, saved );\n        }\n        delete_dib_driver(hdc32);\n        K32WOWHandle16Destroy(hdc32, WOW_TYPE_HDC /* GDIOBJ */);\n        return TRUE;\n    }\n    else if (!GetObjectType(hdc32))\n        return TRUE; // Assume object was already released, dc cache may make this unnecessary\n    return FALSE;\n}\n\n\n/***********************************************************************\n *           DeleteObject    (GDI.69)\n *           SysDeleteObject (GDI.605)\n */\nBOOL16 WINAPI DeleteObject16( HGDIOBJ16 obj )\n{\n    HANDLE object = HGDIOBJ_32(obj);\n    BOOL result;\n    int type = GetObjectType(object);\n    static BOOL (*haxmvm_DeleteObject)(HGDIOBJ);\n    static BOOL init;\n    if (!init)\n    {\n        HMODULE haxmvm = GetModuleHandleW(L\"haxmvm\");\n        haxmvm_DeleteObject = haxmvm ? (BOOL(*)(HGDIOBJ))GetProcAddress(haxmvm, \"haxmvm_DeleteObject\") : NULL;\n        init = TRUE;\n    }\n    for (int i = 0; i <= STOCK_LAST + 1; i++)\n        if (obj == stock[i]) return TRUE;\n    if (type == OBJ_BITMAP) free_segptr_bits( obj );\n    else if ((type == OBJ_PAL) && GetPtr16(object, 1))\n    {\n        HeapFree(GetProcessHeap(), 0, GetPtr16(object, 1));\n        SetPtr16(object, NULL, 1);\n    }\n    if (haxmvm_DeleteObject)\n    {\n        result = haxmvm_DeleteObject(object);\n    }\n    else\n    {\n        result = DeleteObject( object );\n    }\n    if (result)\n    {\n        K32WOWHandle16Destroy(object, WOW_TYPE_HDC /* GDIOBJ */);\n    }\n    else\n    {\n        if (type == OBJ_PAL)\n           return TRUE;\n    }\n    return result;\n}\n\n\n/***********************************************************************\n *           EnumFonts      (GDI.70)\n */\nINT16 WINAPI EnumFonts16( HDC16 hDC, LPCSTR lpName, FONTENUMPROC16 efproc,\n                          LPARAM lpData )\n{\n    struct callback16_info info;\n\n    info.proc = (FARPROC16)efproc;\n    info.param = lpData;\n    info.result = 1;\n    /* Don't call EnumFontFamilies! */\n    return EnumFontsA(HDC_32(hDC), lpName, enum_font_callback, (LPARAM)&info);\n}\n\n\n/***********************************************************************\n *           EnumObjects    (GDI.71)\n */\nINT16 WINAPI EnumObjects16( HDC16 hdc, INT16 obj, GOBJENUMPROC16 proc, LPARAM lParam )\n{\n    struct callback16_info info;\n\n    info.proc  = (FARPROC16)proc;\n    info.param = lParam;\n    switch(obj)\n    {\n    case OBJ_PEN:\n        return EnumObjects( HDC_32(hdc), OBJ_PEN, enum_pens_callback, (LPARAM)&info );\n    case OBJ_BRUSH:\n        return EnumObjects( HDC_32(hdc), OBJ_BRUSH, enum_brushes_callback, (LPARAM)&info );\n    }\n    return 0;\n}\n\n\n/***********************************************************************\n *           EqualRgn    (GDI.72)\n */\nBOOL16 WINAPI EqualRgn16( HRGN16 rgn1, HRGN16 rgn2 )\n{\n    return EqualRgn( HRGN_32(rgn1), HRGN_32(rgn2) );\n}\n\n\n/***********************************************************************\n *           GetBitmapBits    (GDI.74)\n */\nLONG WINAPI GetBitmapBits16( HBITMAP16 hbitmap, LONG count, LPVOID buffer )\n{\n    return GetBitmapBits( HBITMAP_32(hbitmap), count, buffer );\n}\n\n\n/***********************************************************************\n *\t\tGetBkColor (GDI.75)\n */\nCOLORREF WINAPI GetBkColor16( HDC16 hdc )\n{\n    return GetBkColor( HDC_32(hdc) );\n}\n\n\n/***********************************************************************\n *\t\tGetBkMode (GDI.76)\n */\nINT16 WINAPI GetBkMode16( HDC16 hdc )\n{\n    return GetBkMode( HDC_32(hdc) );\n}\n\n\n/***********************************************************************\n *           GetClipBox    (GDI.77)\n */\nINT16 WINAPI GetClipBox16( HDC16 hdc, LPRECT16 rect )\n{\n    RECT rect32;\n    INT ret = GetClipBox( HDC_32(hdc), &rect32 );\n\n    if (ret != ERROR)\n    {\n        rect->left   = rect32.left;\n        rect->top    = rect32.top;\n        rect->right  = rect32.right;\n        rect->bottom = rect32.bottom;\n    }\n    return ret;\n}\n\n\n/***********************************************************************\n *\t\tGetCurrentPosition (GDI.78)\n */\nDWORD WINAPI GetCurrentPosition16( HDC16 hdc )\n{\n    POINT pt32;\n    if (!GetCurrentPositionEx( HDC_32(hdc), &pt32 )) return 0;\n    return MAKELONG( pt32.x, pt32.y );\n}\n\n\n/***********************************************************************\n *           GetDCOrg    (GDI.79)\n */\nDWORD WINAPI GetDCOrg16( HDC16 hdc )\n{\n    POINT pt;\n    if (GetDCOrgEx( HDC_32(hdc), &pt )) return MAKELONG( pt.x, pt.y );\n    return 0;\n}\n\n\n/***********************************************************************\n *           GetDeviceCaps    (GDI.80)\n */\nINT16 WINAPI GetDeviceCaps16( HDC16 hdc, INT16 cap )\n{\n    HDC hdc32 = HDC_32(hdc);\n    INT16 ret = GetDeviceCaps( hdc32, cap );\n    /* some apps don't expect -1 and think it's a B&W screen */\n    if (krnl386_get_compat_mode(\"256color\") && (GetDeviceCaps(hdc32, TECHNOLOGY) == DT_RASDISPLAY))\n    {\n        switch (cap)\n        {\n            case BITSPIXEL:\n                ret = 8;\n                break;\n            case SIZEPALETTE:\n                ret = 256;\n                break;\n            case RASTERCAPS:\n                ret |= RC_PALETTE;\n                break;\n            case NUMCOLORS:\n                ret = 20;\n                break;\n        }\n    }\n    else if (((cap == NUMCOLORS) || (cap == NUMPENS)) && (ret == -1)) ret = 2048;\n    else if (cap == VREFRESH) ret = 1;\n    if (krnl386_get_compat_mode(\"640X480\") && (GetDeviceCaps(hdc32, TECHNOLOGY) == DT_RASDISPLAY))\n    {\n        switch (cap)\n        {\n            case HORZRES:\n                ret = 640;\n                break;\n            case VERTRES:\n                ret = 480;\n                break;\n            case HORZSIZE:\n                ret = 169;\n                break;\n            case VERTSIZE:\n                ret = 127;\n                break;\n        }\n    }\n    int newdpi = krnl386_get_config_int(\"otvdm\", \"AdjustDPI\", FALSE);\n    if (newdpi)\n    {\n        switch (cap)\n        {\n            case LOGPIXELSX:\n                ret = newdpi;\n                break;\n            case LOGPIXELSY:\n                ret = newdpi;\n                break;\n        }\n    }\n\n    return ret;\n}\n\n\n/***********************************************************************\n *\t\tGetMapMode (GDI.81)\n */\nINT16 WINAPI GetMapMode16( HDC16 hdc )\n{\n    return GetMapMode( HDC_32(hdc) );\n}\n\n\n/***********************************************************************\n *           GetObject    (GDI.82)\n */\nINT16 WINAPI GetObject16( HGDIOBJ16 handle16, INT16 count, LPVOID buffer )\n{\n    HGDIOBJ handle = HGDIOBJ_32( handle16 );\n    switch( GetObjectType( handle ))\n    {\n    case OBJ_PEN:\n        if (buffer)\n        {\n            LOGPEN16 *pen16 = buffer;\n            LOGPEN pen;\n\n            if (count < sizeof(LOGPEN16)) return 0;\n            if (!GetObjectW( handle, sizeof(pen), &pen )) return 0;\n\n            pen16->lopnStyle   = pen.lopnStyle;\n            pen16->lopnColor   = pen.lopnColor;\n            pen16->lopnWidth.x = pen.lopnWidth.x;\n            pen16->lopnWidth.y = pen.lopnWidth.y;\n        }\n        return sizeof(LOGPEN16);\n\n    case OBJ_BRUSH:\n        if (buffer)\n        {\n            LOGBRUSH brush;\n            LOGBRUSH16 brush16;\n\n            if (!GetObjectW( handle, sizeof(brush), &brush )) return 0;\n            brush16.lbStyle = brush.lbStyle;\n            brush16.lbColor = brush.lbColor;\n            brush16.lbHatch = brush.lbHatch;\n            if (count > sizeof(brush16)) count = sizeof(brush16);\n            memcpy( buffer, &brush16, count );\n            return count;\n        }\n        return sizeof(LOGBRUSH16);\n\n    case OBJ_PAL:\n        return GetObjectW( handle, count, buffer );\n\n    case OBJ_FONT:\n        if (buffer)\n        {\n            LOGFONTA font;\n            LOGFONT16 font16;\n\n            if (!GetObjectA( handle, sizeof(font), &font )) return 0;\n            logfont_A_to_16( &font, &font16 );\n            if (count > sizeof(font16)) count = sizeof(font16);\n            memcpy( buffer, &font16, count );\n            return count;\n        }\n        return sizeof(LOGFONT16);\n\n    case OBJ_BITMAP:\n        {\n            DIBSECTION dib;\n            INT size;\n            BITMAP16 bmp16;\n\n            if (!(size = GetObjectW( handle, sizeof(dib), &dib ))) return 0;\n            if (size == sizeof(DIBSECTION) && count > sizeof(BITMAP16))\n            {\n                FIXME(\"not implemented for DIBs: count %d\\n\", count);\n                return 0;\n            }\n            else\n            {\n\t\tif (!buffer) return sizeof(BITMAP16);\n                bmp16.bmType       = dib.dsBm.bmType;\n                bmp16.bmWidth      = dib.dsBm.bmWidth;\n                bmp16.bmHeight     = dib.dsBm.bmHeight;\n                bmp16.bmWidthBytes = dib.dsBm.bmWidthBytes;\n                bmp16.bmPlanes     = dib.dsBm.bmPlanes;\n                bmp16.bmBitsPixel  = dib.dsBm.bmBitsPixel;\n                bmp16.bmBits       = 0;\n            \tmemcpy(buffer, &bmp16, count);\n\t\treturn count;\n\t    }\n        }\n\n    default:\n        return 0;\n    }\n}\n\n\n/***********************************************************************\n *           GetPixel    (GDI.83)\n */\nCOLORREF WINAPI GetPixel16( HDC16 hdc, INT16 x, INT16 y )\n{\n    return GetPixel( HDC_32(hdc), x, y );\n}\n\n\n/***********************************************************************\n *\t\tGetPolyFillMode (GDI.84)\n */\nINT16 WINAPI GetPolyFillMode16( HDC16 hdc )\n{\n    return GetPolyFillMode( HDC_32(hdc) );\n}\n\n\n/***********************************************************************\n *\t\tGetROP2 (GDI.85)\n */\nINT16 WINAPI GetROP216( HDC16 hdc )\n{\n    return GetROP2( HDC_32(hdc) );\n}\n\nDWORD WINAPI GetRelAbs(_In_ HDC \thdc,\n\t_In_ DWORD \tdwIgnore\n\t);\n/***********************************************************************\n *\t\tGetRelAbs (GDI.86)\n */\nINT16 WINAPI GetRelAbs16( HDC16 hdc )\n{\n    return GetRelAbs( HDC_32(hdc), 0 );\n}\n\n\n/***********************************************************************\n *           GetStockObject    (GDI.87)\n */\nHGDIOBJ16 WINAPI GetStockObject16( INT16 obj )\n{\n    if (IsOldWindowsTask(GetCurrentTask()) && !(get_aflags(GetExePtr(GetCurrentTask())) & NE_AFLAGS_WIN2_PROTMODE) && (obj == SYSTEM_FONT))\n        obj = SYSTEM_FIXED_FONT;\n    HGDIOBJ16 ret = HGDIOBJ_16( GetStockObject( obj ) );\n    if (ret && (obj <= STOCK_LAST))\n        stock[obj] = ret;\n    return ret;\n}\n\n\n/***********************************************************************\n *\t\tGetStretchBltMode (GDI.88)\n */\nINT16 WINAPI GetStretchBltMode16( HDC16 hdc )\n{\n    return GetStretchBltMode( HDC_32(hdc) );\n}\n\n\n/***********************************************************************\n *           GetTextCharacterExtra    (GDI.89)\n */\nINT16 WINAPI GetTextCharacterExtra16( HDC16 hdc )\n{\n    return GetTextCharacterExtra( HDC_32(hdc) );\n}\n\n\n/***********************************************************************\n *\t\tGetTextColor (GDI.90)\n */\nCOLORREF WINAPI GetTextColor16( HDC16 hdc )\n{\n    return GetTextColor( HDC_32(hdc) );\n}\n\n// for old fon vector fonts\n// Windows 10 only returns the extent based on the relative angle between the orientation and escapement\n// but ignores the absolute angles\n// Windows XP is mostly the same but calculates the full extent when the relative angle is 0\n// Windows 3.1 returns the full extent but rounds the relative angle down to 0, 90, 180 or 270 degrees\nstatic void check_font_rotation(HDC hdc, SIZE16 *box)\n{\n    if (LOWORD(LOBYTE(GetVersion())) >= 0x6)\n    {\n        TEXTMETRICA tm;\n        GetTextMetricsA(hdc, &tm);\n        if((tm.tmPitchAndFamily & (TMPF_VECTOR | TMPF_TRUETYPE)) != TMPF_VECTOR)\n            return;\n        HFONT hfont = GetCurrentObject(hdc, OBJ_FONT);\n        LOGFONT lfont;\n        GetObject(hfont, sizeof(LOGFONT), &lfont);\n        if (lfont.lfEscapement == lfont.lfOrientation)\n        {\n            int angle = lfont.lfEscapement % 1800;\n            const float d2r = 3.14159265358979323846 / 1800;\n            if (angle)\n            {\n                int x = box->cx, y = box->cy;\n                box->cx = (y * cosf((900 - angle) * d2r)) + (x * fabsf(cosf(angle * d2r)));\n                box->cy = (x * cosf((900 - angle) * d2r)) + (y * fabsf(cosf(angle * d2r)));\n            }\n        }\n    }\n}\n\n/***********************************************************************\n *           GetTextExtent    (GDI.91)\n */\nDWORD WINAPI GetTextExtent16( HDC16 hdc, LPCSTR str, INT16 count )\n{\n    SIZE16 size;\n    DWORD ret;\n    __TRY\n    {\n        if (!GetTextExtentPoint16( hdc, str, count, &size ))\n        {\n            ret = 0;\n        }\n        else\n        {\n            ret = MAKELONG( size.cx, size.cy );\n        }\n    }\n    __EXCEPT_ALL\n    {\n        return 0;\n    }\n    __ENDTRY\n    return ret;\n}\n\n\n/***********************************************************************\n *           GetTextFace    (GDI.92)\n */\nINT16 WINAPI GetTextFace16( HDC16 hdc, INT16 count, LPSTR name )\n{\n    return GetTextFaceA( HDC_32(hdc), count, name );\n}\n\n\n/***********************************************************************\n *           GetTextMetrics    (GDI.93)\n */\nBOOL16 WINAPI GetTextMetrics16( HDC16 hdc, TEXTMETRIC16 *tm )\n{\n    TEXTMETRICA tm32;\n\n    if (!tm) return FALSE;\n\n    if (!GetTextMetricsA( HDC_32(hdc), &tm32 )) return FALSE;\n\n    tm->tmHeight           = tm32.tmHeight;\n    tm->tmAscent           = tm32.tmAscent;\n    tm->tmDescent          = tm32.tmDescent;\n    tm->tmInternalLeading  = tm32.tmInternalLeading;\n    tm->tmExternalLeading  = tm32.tmExternalLeading;\n    tm->tmAveCharWidth     = tm32.tmAveCharWidth;\n    tm->tmMaxCharWidth     = tm32.tmMaxCharWidth;\n    tm->tmWeight           = tm32.tmWeight;\n    tm->tmOverhang         = tm32.tmOverhang;\n    tm->tmDigitizedAspectX = tm32.tmDigitizedAspectX;\n    tm->tmDigitizedAspectY = tm32.tmDigitizedAspectY;\n    tm->tmFirstChar        = tm32.tmFirstChar;\n    tm->tmLastChar         = tm32.tmLastChar;\n    tm->tmDefaultChar      = tm32.tmDefaultChar;\n    tm->tmBreakChar        = tm32.tmBreakChar;\n    tm->tmItalic           = tm32.tmItalic;\n    tm->tmUnderlined       = tm32.tmUnderlined;\n    tm->tmStruckOut        = tm32.tmStruckOut;\n    tm->tmPitchAndFamily   = tm32.tmPitchAndFamily;\n    tm->tmCharSet          = tm32.tmCharSet;\n    return TRUE;\n}\n\n\n/***********************************************************************\n *\t\tGetViewportExt (GDI.94)\n */\nDWORD WINAPI GetViewportExt16( HDC16 hdc )\n{\n    SIZE size;\n    if (!GetViewportExtEx( HDC_32(hdc), &size )) return 0;\n    return MAKELONG( size.cx, size.cy );\n}\n\n\n/***********************************************************************\n *\t\tGetViewportOrg (GDI.95)\n */\nDWORD WINAPI GetViewportOrg16( HDC16 hdc )\n{\n    POINT pt;\n    if (!GetViewportOrgEx( HDC_32(hdc), &pt )) return 0;\n    return MAKELONG( pt.x, pt.y );\n}\n\n\n/***********************************************************************\n *\t\tGetWindowExt (GDI.96)\n */\nDWORD WINAPI GetWindowExt16( HDC16 hdc )\n{\n    SIZE size;\n    if (!GetWindowExtEx( HDC_32(hdc), &size )) return 0;\n    return MAKELONG( size.cx, size.cy );\n}\n\n\n/***********************************************************************\n *\t\tGetWindowOrg (GDI.97)\n */\nDWORD WINAPI GetWindowOrg16( HDC16 hdc )\n{\n    POINT pt;\n    if (!GetWindowOrgEx( HDC_32(hdc), &pt )) return 0;\n    return MAKELONG( pt.x, pt.y );\n}\n\n\n\n\n/**********************************************************************\n *           LineDDA   (GDI.100)\n */\nvoid WINAPI LineDDA16( INT16 nXStart, INT16 nYStart, INT16 nXEnd,\n                       INT16 nYEnd, LINEDDAPROC16 proc, LPARAM lParam )\n{\n    struct callback16_info info;\n    info.proc  = (FARPROC16)proc;\n    info.param = lParam;\n    LineDDA( nXStart, nYStart, nXEnd, nYEnd, linedda_callback, (LPARAM)&info );\n}\n\n\n/***********************************************************************\n *           OffsetRgn    (GDI.101)\n */\nINT16 WINAPI OffsetRgn16( HRGN16 hrgn, INT16 x, INT16 y )\n{\n    return OffsetRgn( HRGN_32(hrgn), x, y );\n}\n\n\n/***********************************************************************\n *           PtVisible    (GDI.103)\n */\nBOOL16 WINAPI PtVisible16( HDC16 hdc, INT16 x, INT16 y )\n{\n    return PtVisible( HDC_32(hdc), x, y );\n}\n\n\n/***********************************************************************\n *           SelectVisRgn   (GDI.105)\n */\nINT16 WINAPI SelectVisRgn16( HDC16 hdc, HRGN16 hrgn )\n{\n    FIXME( \"%04x %04x no longer supported\\n\", hdc, hrgn );\n    return ERROR;\n}\n\n\n/***********************************************************************\n *           SetBitmapBits    (GDI.106)\n */\nLONG WINAPI SetBitmapBits16( HBITMAP16 hbitmap, LONG count, LPCVOID buffer )\n{\n    HBITMAP hbmp32 = HBITMAP_32(hbitmap);\n    BITMAP bmp;\n    if (GetObject(hbmp32, sizeof(BITMAP), &bmp) != sizeof(BITMAP))\n        return 0;\n    if (krnl386_get_compat_mode(\"256color\") && (bmp.bmBitsPixel > 8))\n    {\n        HDC dc = CreateCompatibleDC(NULL);\n        BITMAPINFO *bmap = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 256*2 + sizeof(BITMAPINFOHEADER));\n        UINT16 *colors = (UINT16 *)bmap->bmiColors;\n        bmap->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\n        bmap->bmiHeader.biWidth = bmp.bmWidth;\n        bmap->bmiHeader.biHeight = -(count / bmp.bmWidth);\n        bmap->bmiHeader.biPlanes = 1;\n        bmap->bmiHeader.biBitCount = 8;\n        for (int i = 0; i < 256; i++)\n            colors[i] = i;\n        HPALETTE oldpal = GetCurrentObject(dc, OBJ_PAL);\n        if (krnl386_get_config_int(\"otvdm\", \"DIBPalette\", FALSE))\n            SelectPalette(dc, get_realized_palette(), FALSE);\n        int ret = SetDIBits(dc, hbmp32, 0, abs(bmap->bmiHeader.biHeight), buffer, bmap, DIB_PAL_COLORS);\n        HeapFree(GetProcessHeap(), 0, bmap);\n        SelectPalette(dc, oldpal, FALSE);\n        DeleteDC(dc);\n        return ret * bmp.bmWidth;\n    }\n\n    DWORD size = bmp.bmHeight * bmp.bmWidthBytes;\n    return SetBitmapBits( hbmp32, min(size, count), buffer );\n}\n\n#include <pshpack1.h>\ntypedef struct\n{\n    SHORT dfVersion;\t\t/* Version */\n    LONG dfSize;\t\t/* Total File Size */\n    char dfCopyright[60];\t/* Copyright notice */\n    FONTINFO16 fi;\t\t/* FONTINFO structure */\n} WINFNT;\n#include <poppack.h>\n\nLPCSTR krnl386_search_executable_file(LPCSTR lpFile, LPSTR buf, SIZE_T size, BOOL search_builtin);\nNE_TYPEINFO *get_resource_table(HMODULE16 hmod, LPCSTR type, LPBYTE *restab);\n/***********************************************************************\n *           AddFontResource    (GDI.119)\n */\nINT16 WINAPI AddFontResource16( LPCSTR filename )\n{\n    int ret = 0;\n    LPCSTR filenameold = filename;\n    char filebuf[MAX_PATH];\n    char module[MAX_PATH];\n\n    if (!HIWORD(filename))\n    {\n        if (!GetModuleFileName16(filename, module, MAX_PATH))\n            return 0;\n        filename = module;\n    }\n\n    filename = krnl386_search_executable_file(filename, filebuf, MAX_PATH, FALSE);\n    TRACE(\"(%s(%s))\\n\", debugstr_a(filenameold), debugstr_a(filename));\n    ret = AddFontResourceExA(filename, FR_PRIVATE, 0);\n    if (ret) return ret;\n\n    // try to load 0x100 version bitmap font by converting to a 0x200 font\n    // which Windows can load\n    HINSTANCE16 mod = 0;\n    HANDLE fh, mh;\n    NE_NAMEINFO *name;\n    int count = 0;\n    LPVOID font;\n    if ((mod = LoadLibrary16(filename)) >= 32)\n    {\n        NE_TYPEINFO *type = get_resource_table(mod, RT_FONT, NULL);\n        if (!type)\n        {\n            FreeLibrary16(mod);\n            return 0;\n        }\n        count = type->count;\n        name = (NE_NAMEINFO*)(type + 1);\n    }\n    else\n    {\n        fh = CreateFileA(filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);\n        if(fh == INVALID_HANDLE_VALUE)\n            return 0;\n        mh = CreateFileMappingA(fh, filename, PAGE_READONLY, 0, 0, NULL);\n        font = MapViewOfFile(mh, FILE_MAP_READ, 0, 0, 0);\n        count = 1;\n        mod = 0;\n    }\n    char *dst = HeapAlloc(GetProcessHeap(), 0, 65536);\n    HGLOBAL16 mem = 0;\n    __TRY\n    {\n        for(int num = 0; num < count; num++)\n        {\n            WINFNT *fnt;\n            int size;\n            if(mod)\n            {\n                if (mem)\n                    FreeResource16(mem);\n                HRSRC16 res = FindResource16(mod, name->id, 8);\n                mem = LoadResource16(mod, res);\n                font = LockResource16(mem);\n                size = SizeofResource16(mod, res);\n                name++;\n            }\n            else\n                size = GetFileSize(fh, NULL);\n\n            fnt = font;\n\n            if (fnt->dfVersion != 0x100)\n            {\n                int fnum;\n                if (AddFontMemResourceEx(font, fnt->dfSize, 0, &fnum))\n                {\n                    TRACE(\"Added %d fonts\\n\", fnum);\n                    ret += fnum;\n                }\n                continue;\n            }\n            if((size < 117) || (fnt->fi.dfType & 1))\n                continue;\n\n            memcpy(dst, font, 118);\n            int fontsize = (unsigned char)fnt->fi.dfLastChar - (unsigned char)fnt->fi.dfFirstChar + 2;\n            WORD *charoff = (char *)font + 117;\n            WORD *ncharoff = dst + 118;\n            int hdrsize = 118 + (fontsize * 4);\n\n            if(size < (117 + (fnt->fi.dfPixWidth ? (fontsize * 2) : 0) + (fnt->fi.dfWidthBytes * fnt->fi.dfPixHeight)))\n            {\n                TRACE(\"Font corrupt\\n\");\n                continue;\n            }\n\n            for(int i = 0; i < (fontsize - 1); i++)\n            {\n                ncharoff[i * 2] = fnt->fi.dfPixWidth ? fnt->fi.dfPixWidth : charoff[i + 1] - charoff[i];\n                ncharoff[(i * 2) + 1] = i ? (((ncharoff[(i * 2) - 2] + 7) / 8) * fnt->fi.dfPixHeight) + ncharoff[(i * 2) - 1] : hdrsize;\n            }\n            ncharoff[(fontsize - 1) * 2] = ncharoff[((fontsize - 1) * 2) + 1] = 0;\n            int rowwid = fnt->fi.dfWidthBytes;\n            int nbitsize = ncharoff[(fontsize * 2) - 3] + (((ncharoff[(fontsize * 2) - 4] + 7) / 8) * fnt->fi.dfPixHeight) - hdrsize;\n            char *bitdata = (char *)font + fnt->fi.dfBitsOffset;\n            char *nbitdata = dst + hdrsize;\n            for(int i = 0; i < (fontsize - 1); i++)\n            {\n                int addr = ncharoff[(i * 2) + 1] - hdrsize;\n                int bytewid = (ncharoff[i * 2] + 7) / 8;\n                for(int j = 0; j < fnt->fi.dfPixHeight; j++)\n                {\n                    for(int k = 0; k < bytewid; k++)\n                    {\n                        WORD bits = *(WORD *)(bitdata + (rowwid * j) + ((fnt->fi.dfPixWidth ? fnt->fi.dfPixWidth : charoff[i]) / 8) + k);\n                        bits = (bits >> 8) | (bits << 8);\n                        bits <<= charoff[i] % 8;\n                        nbitdata[addr + j + (k * fnt->fi.dfPixHeight)] = bits >> 8;\n                    }\n                }\n            }\n            strncpy(dst + hdrsize + nbitsize, (char *)font + fnt->fi.dfFace, 256);\n            int namelen = strlen(dst + hdrsize + nbitsize);\n            if (namelen > 256)\n                namelen = 256;\n            fnt = dst;\n            fnt->dfVersion = 0x200;\n            fnt->fi.dfBitsOffset = hdrsize;\n            fnt->fi.dfFace = hdrsize + nbitsize;\n            fnt->dfSize = fnt->fi.dfFace + namelen + 1;\n            if (fnt->fi.dfCharSet == 0xfe) // pagemaker fonts have charset 0xfe which windows 10 treats as utf-8\n                fnt->fi.dfCharSet = 0xfd;\t\n            int fnum;\n            if (AddFontMemResourceEx(dst, fnt->dfSize, 0, &fnum))\n            {\n                TRACE(\"Added %d fonts\\n\", fnum);\n                ret += fnum;\n            }\n        }\n    }\n    __EXCEPT_ALL\n    {\n        ERR(\"Failed to load old font\\n\");\n    }\n    __ENDTRY\n    if(mod)\n    {\n        if (mem)\n            FreeResource16(mem);\n        FreeLibrary16(mod);\n    }\n    else\n    {\n        UnmapViewOfFile(font);\n        CloseHandle(mh);\n        CloseHandle(fh);\n    }\n    HeapFree(GetProcessHeap(), 0, dst);\n    return ret;\n}\n\n\n/***********************************************************************\n *           Death    (GDI.121)\n *\n * Disables GDI, switches back to text mode.\n * We don't have to do anything here,\n * just let console support handle everything\n */\nvoid WINAPI Death16(HDC16 hdc)\n{\n    MESSAGE(\"Death(%04x) called. Application enters text mode...\\n\", hdc);\n}\n\n\n/***********************************************************************\n *           Resurrection    (GDI.122)\n *\n * Restores GDI functionality\n */\nvoid WINAPI Resurrection16(HDC16 hdc,\n                           WORD w1, WORD w2, WORD w3, WORD w4, WORD w5, WORD w6)\n{\n    MESSAGE(\"Resurrection(%04x, %04x, %04x, %04x, %04x, %04x, %04x) called. Application left text mode.\\n\",\n            hdc, w1, w2, w3, w4, w5, w6);\n}\n\n\n/***********************************************************************\n *           MulDiv   (GDI.128)\n */\nINT16 WINAPI MulDiv16( INT16 nMultiplicand, INT16 nMultiplier, INT16 nDivisor)\n{\n    INT ret;\n    if (!nDivisor) return -32768;\n    /* We want to deal with a positive divisor to simplify the logic. */\n    if (nDivisor < 0)\n    {\n      nMultiplicand = - nMultiplicand;\n      nDivisor = -nDivisor;\n    }\n    /* If the result is positive, we \"add\" to round. else,\n     * we subtract to round. */\n    if ( ( (nMultiplicand <  0) && (nMultiplier <  0) ) ||\n         ( (nMultiplicand >= 0) && (nMultiplier >= 0) ) )\n        ret = (((int)nMultiplicand * nMultiplier) + (nDivisor/2)) / nDivisor;\n    else\n        ret = (((int)nMultiplicand * nMultiplier) - (nDivisor/2)) / nDivisor;\n    if ((ret > 32767) || (ret < -32767)) return -32768;\n    return (INT16) ret;\n}\n\n\n/***********************************************************************\n *           GetRgnBox    (GDI.134)\n */\nINT16 WINAPI GetRgnBox16( HRGN16 hrgn, LPRECT16 rect )\n{\n    RECT r;\n    INT16 ret = GetRgnBox( HRGN_32(hrgn), &r );\n    rect->left   = r.left;\n    rect->top    = r.top;\n    rect->right  = r.right;\n    rect->bottom = r.bottom;\n    return ret;\n}\n\n\n/***********************************************************************\n *           RemoveFontResource    (GDI.136)\n */\nBOOL16 WINAPI RemoveFontResource16( LPCSTR filename)\n{\n    char filebuf[MAX_PATH];\n    char module[MAX_PATH];\n\n    if (!HIWORD(filename))\n    {\n        if (!GetModuleFileName16(filename, module, MAX_PATH))\n            return 0;\n        filename = module;\n    }\n    filename = krnl386_search_executable_file(filename, filebuf, MAX_PATH, FALSE);\n    return RemoveFontResourceExA(filename, FR_PRIVATE, 0);\n}\n\n\n/***********************************************************************\n *           SetBrushOrg    (GDI.148)\n */\nDWORD WINAPI SetBrushOrg16( HDC16 hdc, INT16 x, INT16 y )\n{\n    POINT dcpt;\n    POINT pt;\n\n    if (GetDCOrgEx(HDC_32(hdc), &dcpt))\n    {\n        x -= dcpt.x;\n        y -= dcpt.y;\n        if (!SetBrushOrgEx(HDC_32(hdc), x, y, &pt)) return 0;\n        pt.x += dcpt.x;\n        pt.y += dcpt.y;\n    }\n    return MAKELONG( pt.x, pt.y );\n}\n\n\n/***********************************************************************\n *\t\tGetBrushOrg (GDI.149)\n */\nDWORD WINAPI GetBrushOrg16( HDC16 hdc )\n{\n    POINT dcpt;\n    POINT pt;\n    if (GetDCOrgEx(HDC_32(hdc), &dcpt))\n    {\n        if (!GetBrushOrgEx(HDC_32(hdc), &pt)) return 0;\n        pt.x += dcpt.x;\n        pt.y += dcpt.y;\n    }\n    return MAKELONG( pt.x, pt.y );\n}\n\n\n/***********************************************************************\n *           UnrealizeObject    (GDI.150)\n */\nBOOL16 WINAPI UnrealizeObject16( HGDIOBJ16 obj )\n{\n    return UnrealizeObject( HGDIOBJ_32(obj) );\n}\n\n\n/***********************************************************************\n *           CreateIC    (GDI.153)\n */\nHDC16 WINAPI CreateIC16( LPCSTR driver, LPCSTR device, LPCSTR output,\n                         const DEVMODEA* initData )\n{\n    char tmp[256];\n    if (device && !strcmp(device, \"DefaultPrinter\"))\n    {\n        int len = 256;\n        if (GetDefaultPrinterA(tmp, &len))\n            device = tmp;\n    }\n    if (initData && (!driver || !stricmp(driver, \"winspool\")))\n    {\n        DEVMODEA dma = {0};\n        if (!IsValidDevmodeA(initData, initData->dmSize + initData->dmDriverExtra))\n            initData = NULL;\n        else\n        {\n            memcpy(&dma, initData, initData->dmSize);\n            dma.dmSize = sizeof(DEVMODEA);\n            dma.dmDriverExtra = 0;\n            return HDC_16( CreateICA( driver, device, output, &dma ) );\n        }\n    }\n    else if (!stricmp(driver, \"dib\"))\n        driver = \"DISPLAY\";\n    return HDC_16( CreateICA( driver, device, output, initData ) );\n}\n\n\n/***********************************************************************\n *           GetNearestColor   (GDI.154)\n */\nCOLORREF WINAPI GetNearestColor16( HDC16 hdc, COLORREF color )\n{\n    return GetNearestColor( HDC_32(hdc), check_colorref(color) );\n}\n\n\n/***********************************************************************\n *           CreateDiscardableBitmap    (GDI.156)\n */\nHBITMAP16 WINAPI CreateDiscardableBitmap16( HDC16 hdc, INT16 width, INT16 height )\n{\n    return HBITMAP_16( CreateDiscardableBitmap( HDC_32(hdc), width, height ) );\n}\n\n\n/***********************************************************************\n *           PtInRegion    (GDI.161)\n */\nBOOL16 WINAPI PtInRegion16( HRGN16 hrgn, INT16 x, INT16 y )\n{\n    return PtInRegion( HRGN_32(hrgn), x, y );\n}\n\n\n/***********************************************************************\n *           GetBitmapDimension    (GDI.162)\n */\nDWORD WINAPI GetBitmapDimension16( HBITMAP16 hbitmap )\n{\n    SIZE16 size;\n    if (!GetBitmapDimensionEx16( hbitmap, &size )) return 0;\n    return MAKELONG( size.cx, size.cy );\n}\n\n\n/***********************************************************************\n *           SetBitmapDimension    (GDI.163)\n */\nDWORD WINAPI SetBitmapDimension16( HBITMAP16 hbitmap, INT16 x, INT16 y )\n{\n    SIZE16 size;\n    if (!SetBitmapDimensionEx16( hbitmap, x, y, &size )) return 0;\n    return MAKELONG( size.cx, size.cy );\n}\n\n\n/***********************************************************************\n *           SetRectRgn    (GDI.172)\n *\n * NOTE: Win 3.1 sets region to empty if left > right\n */\nvoid WINAPI SetRectRgn16( HRGN16 hrgn, INT16 left, INT16 top, INT16 right, INT16 bottom )\n{\n    if (left < right) SetRectRgn( HRGN_32(hrgn), left, top, right, bottom );\n    else SetRectRgn( HRGN_32(hrgn), 0, 0, 0, 0 );\n}\n\n\n/******************************************************************\n *             PlayMetaFileRecord   (GDI.176)\n */\nvoid WINAPI PlayMetaFileRecord16( HDC16 hdc, HANDLETABLE16 *ht, METARECORD *mr, UINT16 handles )\n{\n    HANDLETABLE *ht32 = HeapAlloc( GetProcessHeap(), 0, FIELD_OFFSET(HANDLETABLE, objectHandle[handles] ));\n    unsigned int i;\n\n    for (i = 0; i < handles; i++) ht32->objectHandle[i] = HGDIOBJ_32(ht->objectHandle[i]);\n    PlayMetaFileRecord( HDC_32(hdc), ht32, mr, handles );\n    for (i = 0; i < handles; i++) ht->objectHandle[i] = HGDIOBJ_16(ht32->objectHandle[i]);\n    HeapFree( GetProcessHeap(), 0, ht32 );\n}\n\n\n/***********************************************************************\n *           SetDCHook   (GDI.190)\n */\nBOOL16 WINAPI SetDCHook16( HDC16 hdc16, FARPROC16 hookProc, DWORD dwHookData )\n{\n    FIXME( \"%04x %p %x: not supported\\n\", hdc16, hookProc, dwHookData );\n    return FALSE;\n}\n\n\n/***********************************************************************\n *           GetDCHook   (GDI.191)\n */\nDWORD WINAPI GetDCHook16( HDC16 hdc16, FARPROC16 *phookProc )\n{\n    FIXME( \"%04x: not supported\\n\", hdc16 );\n    return 0;\n}\n\n\n/***********************************************************************\n *           SetHookFlags   (GDI.192)\n */\nWORD WINAPI SetHookFlags16( HDC16 hdc, WORD flags )\n{\n    FIXME( \"%04x %x: not supported\\n\", hdc, flags );\n    return 0;\n}\n\n\n/***********************************************************************\n *           SetBoundsRect    (GDI.193)\n */\nUINT16 WINAPI SetBoundsRect16( HDC16 hdc, const RECT16* rect, UINT16 flags )\n{\n    if (rect)\n    {\n        RECT rect32;\n        rect32.left   = rect->left;\n        rect32.top    = rect->top;\n        rect32.right  = rect->right;\n        rect32.bottom = rect->bottom;\n        return SetBoundsRect( HDC_32( hdc ), &rect32, flags );\n    }\n    else return SetBoundsRect( HDC_32( hdc ), NULL, flags );\n}\n\n\n/***********************************************************************\n *           GetBoundsRect    (GDI.194)\n */\nUINT16 WINAPI GetBoundsRect16( HDC16 hdc, LPRECT16 rect, UINT16 flags)\n{\n    RECT rect32;\n    UINT ret = GetBoundsRect( HDC_32( hdc ), &rect32, flags );\n    if (rect)\n    {\n        rect->left   = rect32.left;\n        rect->top    = rect32.top;\n        rect->right  = rect32.right;\n        rect->bottom = rect32.bottom;\n    }\n    return ret;\n}\n\n\n/***********************************************************************\n *\t\tEngineEnumerateFont (GDI.300)\n */\nWORD WINAPI EngineEnumerateFont16(LPSTR fontname, FARPROC16 proc, DWORD data )\n{\n    FIXME(\"(%s,%p,%x),stub\\n\",fontname,proc,data);\n    return 0;\n}\n\n\n/***********************************************************************\n *\t\tEngineDeleteFont (GDI.301)\n */\nWORD WINAPI EngineDeleteFont16(LPFONTINFO16 lpFontInfo)\n{\n    WORD handle;\n\n    /*\tuntested, don't know if it works.\n\tWe seem to access some structure that is located after the\n\tFONTINFO. The FONTINFO documentation says that there may\n\tfollow some char-width table or font bitmap or vector info.\n\tI think it is some kind of font bitmap that begins at offset 0x52,\n\tas FONTINFO goes up to 0x51.\n\tIf this is correct, everything should be implemented correctly.\n    */\n    if ( ((lpFontInfo->dfType & (RASTER_FONTTYPE|DEVICE_FONTTYPE)) == (RASTER_FONTTYPE|DEVICE_FONTTYPE))\n         && (LOWORD(lpFontInfo->dfFace) == LOWORD(lpFontInfo)+0x6e)\n         && (handle = *(WORD *)(lpFontInfo+0x54)) )\n    {\n        *(WORD *)(lpFontInfo+0x54) = 0;\n        GlobalFree16(handle);\n    }\n    return 1;\n}\n\n\n/***********************************************************************\n *\t\tEngineRealizeFont (GDI.302)\n */\nWORD WINAPI EngineRealizeFont16(LPLOGFONT16 lplogFont, LPTEXTXFORM16 lptextxform, LPFONTINFO16 lpfontInfo)\n{\n    FIXME(\"(%p,%p,%p),stub\\n\",lplogFont,lptextxform,lpfontInfo);\n\n    return 0;\n}\n\n\n/***********************************************************************\n *\t\tEngineRealizeFontExt (GDI.315)\n */\nWORD WINAPI EngineRealizeFontExt16(LONG l1, LONG l2, LONG l3, LONG l4)\n{\n    FIXME(\"(%08x,%08x,%08x,%08x),stub\\n\",l1,l2,l3,l4);\n\n    return 0;\n}\n\n\n/***********************************************************************\n *\t\tEngineGetCharWidth (GDI.303)\n */\nWORD WINAPI EngineGetCharWidth16(LPFONTINFO16 lpFontInfo, BYTE firstChar, BYTE lastChar, LPINT16 buffer)\n{\n    int i;\n\n    for (i = firstChar; i <= lastChar; i++)\n       FIXME(\" returns font's average width for range %d to %d\\n\", firstChar, lastChar);\n    *buffer++ = lpFontInfo->dfAvgWidth; /* insert some charwidth functionality here; use average width for now */\n    return 1;\n}\n\n\n/***********************************************************************\n *\t\tEngineSetFontContext (GDI.304)\n */\nWORD WINAPI EngineSetFontContext16(LPFONTINFO16 lpFontInfo, WORD data)\n{\n   FIXME(\"stub?\\n\");\n   return 0;\n}\n\n/***********************************************************************\n *\t\tEngineGetGlyphBMP (GDI.305)\n */\nWORD WINAPI EngineGetGlyphBMP16(WORD word, LPFONTINFO16 lpFontInfo, WORD w1, WORD w2,\n                              LPSTR string, DWORD dword, /*LPBITMAPMETRICS16*/ LPVOID metrics)\n{\n    FIXME(\"stub?\\n\");\n    return 0;\n}\n\n\n/***********************************************************************\n *\t\tEngineMakeFontDir (GDI.306)\n */\nDWORD WINAPI EngineMakeFontDir16(HDC16 hdc, LPFONTDIR16 fontdir, LPCSTR string)\n{\n    FIXME(\" stub! (always fails)\\n\");\n    return ~0UL; /* error */\n}\n\n\n/***********************************************************************\n *           GetCharABCWidths   (GDI.307)\n */\nBOOL16 WINAPI GetCharABCWidths16( HDC16 hdc, UINT16 firstChar, UINT16 lastChar, LPABC16 abc )\n{\n    BOOL ret;\n    UINT i;\n    LPABC abc32 = HeapAlloc( GetProcessHeap(), 0, sizeof(ABC) * (lastChar - firstChar + 1) );\n\n    if ((ret = GetCharABCWidthsA( HDC_32(hdc), firstChar, lastChar, abc32 )))\n    {\n        for (i = firstChar; i <= lastChar; i++)\n        {\n            abc[i-firstChar].abcA = abc32[i-firstChar].abcA;\n            abc[i-firstChar].abcB = abc32[i-firstChar].abcB;\n            abc[i-firstChar].abcC = abc32[i-firstChar].abcC;\n        }\n    }\n    HeapFree( GetProcessHeap(), 0, abc32 );\n    return ret;\n}\n\n\n/***********************************************************************\n *           GetOutlineTextMetrics (GDI.308)\n *\n * Gets metrics for TrueType fonts.\n *\n * PARAMS\n *    hdc    [In]  Handle of device context\n *    cbData [In]  Size of metric data array\n *    lpOTM  [Out] Address of metric data array\n *\n * RETURNS\n *    Success: Non-zero or size of required buffer\n *    Failure: 0\n *\n * NOTES\n *    lpOTM should be LPOUTLINETEXTMETRIC\n */\nUINT16 WINAPI GetOutlineTextMetrics16( HDC16 hdc, UINT16 cbData,\n                                       LPOUTLINETEXTMETRIC16 lpOTM )\n{\n    HDC hdc32 = HDC_32(hdc);\n    int offset = sizeof(OUTLINETEXTMETRICA) - sizeof(*lpOTM);\n    if (!lpOTM)\n    {\n        UINT buf_size = GetOutlineTextMetricsA(hdc32, NULL, NULL);\n        if (buf_size == 0)\n            return 0;\n        return buf_size - offset;\n    }\n    if (cbData < sizeof(OUTLINETEXTMETRIC16))\n        return 0;\n    /* extra data size for strings */\n    SIZE_T exsize = cbData - sizeof(*lpOTM);\n\n    LPOUTLINETEXTMETRICA otm32 = HeapAlloc(GetProcessHeap(), 0, sizeof(OUTLINETEXTMETRICA) + exsize);\n    otm32->otmSize = sizeof(*otm32) + exsize;\n    UINT result = GetOutlineTextMetricsA(hdc32, sizeof(*otm32) + exsize, otm32);\n    if (result == 0)\n    {\n        HeapFree(GetProcessHeap(), 0, otm32);\n        return 0;\n    }\n    lpOTM->otmSize = otm32->otmSize - offset;\n    lpOTM->otmTextMetrics.tmHeight = otm32->otmTextMetrics.tmHeight;\n    lpOTM->otmTextMetrics.tmAscent = otm32->otmTextMetrics.tmAscent;\n    lpOTM->otmTextMetrics.tmDescent = otm32->otmTextMetrics.tmDescent;\n    lpOTM->otmTextMetrics.tmInternalLeading = otm32->otmTextMetrics.tmInternalLeading;\n    lpOTM->otmTextMetrics.tmExternalLeading = otm32->otmTextMetrics.tmExternalLeading;\n    lpOTM->otmTextMetrics.tmAveCharWidth = otm32->otmTextMetrics.tmAveCharWidth;\n    lpOTM->otmTextMetrics.tmMaxCharWidth = otm32->otmTextMetrics.tmMaxCharWidth;\n    lpOTM->otmTextMetrics.tmWeight = otm32->otmTextMetrics.tmWeight;\n    lpOTM->otmTextMetrics.tmOverhang = otm32->otmTextMetrics.tmOverhang;\n    lpOTM->otmTextMetrics.tmDigitizedAspectX = otm32->otmTextMetrics.tmDigitizedAspectX;\n    lpOTM->otmTextMetrics.tmDigitizedAspectY = otm32->otmTextMetrics.tmDigitizedAspectY;\n    lpOTM->otmTextMetrics.tmFirstChar = otm32->otmTextMetrics.tmFirstChar;\n    lpOTM->otmTextMetrics.tmLastChar = otm32->otmTextMetrics.tmLastChar;\n    lpOTM->otmTextMetrics.tmDefaultChar = otm32->otmTextMetrics.tmDefaultChar;\n    lpOTM->otmTextMetrics.tmBreakChar = otm32->otmTextMetrics.tmBreakChar;\n    lpOTM->otmTextMetrics.tmItalic = otm32->otmTextMetrics.tmItalic;\n    lpOTM->otmTextMetrics.tmUnderlined = otm32->otmTextMetrics.tmUnderlined;\n    lpOTM->otmTextMetrics.tmStruckOut = otm32->otmTextMetrics.tmStruckOut;\n    lpOTM->otmTextMetrics.tmPitchAndFamily = otm32->otmTextMetrics.tmPitchAndFamily;\n    lpOTM->otmTextMetrics.tmCharSet = otm32->otmTextMetrics.tmCharSet;\n    lpOTM->otmFiller = otm32->otmFiller;\n    lpOTM->otmPanoseNumber = otm32->otmPanoseNumber;\n    lpOTM->otmfsSelection = otm32->otmfsSelection;\n    lpOTM->otmfsType = otm32->otmfsType;\n    lpOTM->otmsCharSlopeRise = otm32->otmsCharSlopeRise;\n    lpOTM->otmsCharSlopeRun = otm32->otmsCharSlopeRun;\n    lpOTM->otmItalicAngle = otm32->otmItalicAngle;\n    lpOTM->otmEMSquare = otm32->otmEMSquare;\n    lpOTM->otmAscent = otm32->otmAscent;\n    lpOTM->otmDescent = otm32->otmDescent;\n    lpOTM->otmLineGap = otm32->otmLineGap;\n    lpOTM->otmsCapEmHeight = otm32->otmsCapEmHeight;\n    lpOTM->otmsXHeight = otm32->otmsXHeight;\n    lpOTM->otmrcFontBox.left = otm32->otmrcFontBox.left;\n    lpOTM->otmrcFontBox.top = otm32->otmrcFontBox.top;\n    lpOTM->otmrcFontBox.right = otm32->otmrcFontBox.right;\n    lpOTM->otmrcFontBox.bottom = otm32->otmrcFontBox.bottom;\n    lpOTM->otmMacAscent = otm32->otmMacAscent;\n    lpOTM->otmMacDescent = otm32->otmMacDescent;\n    lpOTM->otmMacLineGap = otm32->otmMacLineGap;\n    lpOTM->otmusMinimumPPEM = otm32->otmusMinimumPPEM;\n    lpOTM->otmptSubscriptSize.x = otm32->otmptSubscriptSize.x;\n    lpOTM->otmptSubscriptSize.y = otm32->otmptSubscriptSize.y;\n    lpOTM->otmptSubscriptOffset.x = otm32->otmptSubscriptOffset.x;\n    lpOTM->otmptSubscriptOffset.y = otm32->otmptSubscriptOffset.y;\n    lpOTM->otmptSuperscriptSize.x = otm32->otmptSuperscriptSize.x;\n    lpOTM->otmptSuperscriptSize.y = otm32->otmptSuperscriptSize.y;\n    lpOTM->otmptSuperscriptOffset.x = otm32->otmptSuperscriptOffset.x;\n    lpOTM->otmptSuperscriptOffset.y = otm32->otmptSuperscriptOffset.y;\n    lpOTM->otmsStrikeoutSize = otm32->otmsStrikeoutSize;\n    lpOTM->otmsStrikeoutPosition = otm32->otmsStrikeoutPosition;\n    lpOTM->otmsUnderscorePosition = otm32->otmsUnderscorePosition;\n    lpOTM->otmsUnderscoreSize = otm32->otmsUnderscoreSize;\n    lpOTM->otmpFamilyName = otm32->otmpFamilyName ? (SIZE_T)otm32->otmpFamilyName - offset : 0;\n    lpOTM->otmpFaceName = otm32->otmpFaceName ? (SIZE_T)otm32->otmpFaceName - offset : 0;\n    lpOTM->otmpStyleName = otm32->otmpStyleName ? (SIZE_T)otm32->otmpStyleName - offset : 0;\n    lpOTM->otmpFullName = otm32->otmpFullName ? (SIZE_T)otm32->otmpFullName - offset : 0;\n    memcpy((LPBYTE)lpOTM + sizeof(*lpOTM), (LPBYTE)otm32 + sizeof(*otm32), result - sizeof(*otm32));\n    HeapFree(GetProcessHeap(), 0, otm32);\n    return result - offset;\n}\n\n\n/***********************************************************************\n *           GetGlyphOutline    (GDI.309)\n */\nDWORD WINAPI GetGlyphOutline16( HDC16 hdc, UINT16 uChar, UINT16 fuFormat,\n                                LPGLYPHMETRICS16 lpgm, DWORD cbBuffer,\n                                LPVOID lpBuffer, const MAT2 *lpmat2 )\n{\n    DWORD ret;\n    GLYPHMETRICS gm32;\n\n    ret = GetGlyphOutlineA( HDC_32(hdc), uChar, fuFormat, &gm32, cbBuffer, lpBuffer, lpmat2);\n    if (ret && ret != GDI_ERROR)\n    {\n        lpgm->gmBlackBoxX = gm32.gmBlackBoxX;\n        lpgm->gmBlackBoxY = gm32.gmBlackBoxY;\n        lpgm->gmptGlyphOrigin.x = gm32.gmptGlyphOrigin.x;\n        lpgm->gmptGlyphOrigin.y = gm32.gmptGlyphOrigin.y;\n        lpgm->gmCellIncX = gm32.gmCellIncX;\n        lpgm->gmCellIncY = gm32.gmCellIncY;\n    }\n    return ret;\n}\n\n\n/***********************************************************************\n *           CreateScalableFontResource   (GDI.310)\n */\nBOOL16 WINAPI CreateScalableFontResource16( UINT16 fHidden, LPCSTR lpszResourceFile,\n                                            LPCSTR fontFile, LPCSTR path )\n{\n    return CreateScalableFontResourceA( fHidden, lpszResourceFile, fontFile, path );\n}\n\n\n/*************************************************************************\n *             GetFontData    (GDI.311)\n *\n */\nDWORD WINAPI GetFontData16( HDC16 hdc, DWORD table, DWORD offset, LPVOID buffer, DWORD count )\n{\n    return GetFontData( HDC_32(hdc), table, offset, buffer, count );\n}\n\n\n/*************************************************************************\n *             GetRasterizerCaps   (GDI.313)\n */\nBOOL16 WINAPI GetRasterizerCaps16( LPRASTERIZER_STATUS lprs, UINT16 cbNumBytes )\n{\n    /* LPRASTERIZER_STATUS must be aligned */\n    BYTE caps_buf[100] = { 0 };\n    LPRASTERIZER_STATUS cap = caps_buf + (sizeof(SIZE_T) - (SIZE_T)caps_buf % sizeof(SIZE_T));\n    if (GetRasterizerCaps(cap, cbNumBytes))\n    {\n        memcpy(lprs, cap, min(cbNumBytes, sizeof(RASTERIZER_STATUS)));\n        return TRUE;\n    }\n    else\n    {\n        return FALSE;\n    }\n}\n\n\n/***********************************************************************\n *             EnumFontFamilies    (GDI.330)\n */\nINT16 WINAPI EnumFontFamilies16( HDC16 hDC, LPCSTR lpFamily,\n                                 FONTENUMPROC16 efproc, LPARAM lpData )\n{\n    struct callback16_info info;\n\n    info.proc = (FARPROC16)efproc;\n    info.param = lpData;\n    info.result = 1;\n    return EnumFontFamiliesA(HDC_32(hDC), lpFamily, enum_font_callback, (LPARAM)&info);\n}\n\n\n/*************************************************************************\n *             GetKerningPairs   (GDI.332)\n *\n */\nINT16 WINAPI GetKerningPairs16( HDC16 hdc, INT16 count, LPKERNINGPAIR16 pairs )\n{\n    KERNINGPAIR *pairs32;\n    INT i, ret;\n\n    if (!count) return 0;\n\n    if (!(pairs32 = HeapAlloc( GetProcessHeap(), 0, count * sizeof(*pairs32) ))) return 0;\n    if ((ret = GetKerningPairsA( HDC_32(hdc), count, pairs32 )))\n    {\n        for (i = 0; i < ret; i++)\n        {\n            pairs->wFirst      = pairs32->wFirst;\n            pairs->wSecond     = pairs32->wSecond;\n            pairs->iKernAmount = pairs32->iKernAmount;\n        }\n    }\n    HeapFree( GetProcessHeap(), 0, pairs32 );\n    return ret;\n}\n\n\n\n/***********************************************************************\n *\t\tGetTextAlign (GDI.345)\n */\nUINT16 WINAPI GetTextAlign16( HDC16 hdc )\n{\n    return GetTextAlign( HDC_32(hdc) );\n}\n\n\n/***********************************************************************\n *           SetTextAlign    (GDI.346)\n */\nUINT16 WINAPI SetTextAlign16( HDC16 hdc, UINT16 align )\n{\n    return SetTextAlign( HDC_32(hdc), align );\n}\n\n\n/***********************************************************************\n *           Chord    (GDI.348)\n */\nBOOL16 WINAPI Chord16( HDC16 hdc, INT16 left, INT16 top,\n                       INT16 right, INT16 bottom, INT16 xstart, INT16 ystart,\n                       INT16 xend, INT16 yend )\n{\n    return Chord( HDC_32(hdc), left, top, right, bottom, xstart, ystart, xend, yend );\n}\n\n\n/***********************************************************************\n *           SetMapperFlags    (GDI.349)\n */\nDWORD WINAPI SetMapperFlags16( HDC16 hdc, DWORD flags )\n{\n    return SetMapperFlags( HDC_32(hdc), flags );\n}\n\n\n/***********************************************************************\n *           GetCharWidth    (GDI.350)\n */\nBOOL16 WINAPI GetCharWidth16( HDC16 hdc, UINT16 firstChar, UINT16 lastChar, LPINT16 buffer )\n{\n    BOOL retVal = FALSE;\n    TEXTMETRIC tm = {0};\n    HDC hdc32 = HDC_32(hdc);\n    GetTextMetricsA(hdc32, &tm);\n\n    if( firstChar != lastChar )\n    {\n        LPINT buf32 = HeapAlloc(GetProcessHeap(), 0, sizeof(INT)*(1 + (lastChar - firstChar)));\n        if( buf32 )\n        {\n            LPINT obuf32 = buf32;\n            UINT i;\n\n            retVal = GetCharWidth32A( hdc32, firstChar, lastChar, buf32);\n            if (retVal)\n            {\n                for (i = firstChar; i <= lastChar; i++) *buffer++ = (*buf32++) + tm.tmOverhang;\n            }\n            HeapFree(GetProcessHeap(), 0, obuf32);\n        }\n    }\n    else /* happens quite often to warrant a special treatment */\n    {\n        INT chWidth;\n        retVal = GetCharWidth32A( hdc32, firstChar, lastChar, &chWidth );\n        *buffer = chWidth + tm.tmOverhang;\n    }\n    return retVal;\n}\n\n\n/***********************************************************************\n *           ExtTextOut   (GDI.351)\n */\nBOOL16 WINAPI ExtTextOut16( HDC16 hdc, INT16 x, INT16 y, UINT16 flags,\n                            const RECT16 *lprect, LPCSTR str, UINT16 count,\n                            const INT16 *lpDx )\n{\n    BOOL        ret;\n    int         i;\n    RECT        rect32;\n    LPINT       lpdx32 = NULL;\n\n    if (lpDx) {\n        lpdx32 = HeapAlloc( GetProcessHeap(),0, sizeof(INT)*count );\n        if(lpdx32 == NULL) return FALSE;\n        for (i=count;i--;) lpdx32[i]=lpDx[i];\n    }\n    if (lprect)\n    {\n        rect32.left   = lprect->left;\n        rect32.top    = lprect->top;\n        rect32.right  = lprect->right;\n        rect32.bottom = lprect->bottom;\n    }\n    ret = ExtTextOutA(HDC_32(hdc), x, y, flags, lprect ? &rect32 : NULL, str, count, lpdx32);\n    HeapFree( GetProcessHeap(), 0, lpdx32 );\n    return ret;\n}\n\n\n/***********************************************************************\n *           CreatePalette    (GDI.360)\n */\nHPALETTE16 WINAPI CreatePalette16( const LOGPALETTE* palette )\n{\n    return HPALETTE_16( CreatePalette( palette ) );\n}\n\n\n/***********************************************************************\n *           GDISelectPalette   (GDI.361)\n */\nHPALETTE16 WINAPI GDISelectPalette16( HDC16 hdc, HPALETTE16 hpalette, WORD wBkg )\n{\n    HPALETTE16 ret = HPALETTE_16( SelectPalette( HDC_32(hdc), HPALETTE_32(hpalette), wBkg ));\n    if (ret && !wBkg) hPrimaryPalette = hpalette;\n    return ret;\n}\n\n\n/***********************************************************************\n *           GDIRealizePalette   (GDI.362)\n */\nUINT16 WINAPI GDIRealizePalette16( HDC16 hdc )\n{\n    HDC hdc32 = HDC_32(hdc);\n    if (krnl386_get_compat_mode(\"256color\") && krnl386_get_config_int(\"otvdm\", \"DIBPalette\", FALSE) && (GetDeviceCaps(hdc32, TECHNOLOGY) == DT_RASDISPLAY) &&\n        (GetObjectType(hdc32) == OBJ_DC))\n        set_realized_palette(hdc32);\n    return RealizePalette(hdc32);\n}\n\n\n/***********************************************************************\n *           GetPaletteEntries    (GDI.363)\n */\nUINT16 WINAPI GetPaletteEntries16( HPALETTE16 hpalette, UINT16 start,\n                                   UINT16 count, LPPALETTEENTRY entries )\n{\n    return GetPaletteEntries( HPALETTE_32(hpalette), start, count, entries );\n}\n\nstatic WINAPI paint_all_windows(HWND hwnd, LPARAM lparam)\n{\n    BOOL found = FALSE;\n    DWORD *wndlist = (DWORD *)lparam;\n    for (int j = 1; j <= wndlist[0]; j++)\n    {\n        if (wndlist[j] == hwnd)\n        {\n            found = TRUE;\n            break;\n        }\n    }\n    if (!found)\n        RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW);\n    return FALSE;\n}\n\nBOOL update_palette(HPALETTE16 hpalette)\n{\n    HPALETTE hpal32 = HPALETTE_32(hpalette);\n    if (GetObjectType(hpal32) != OBJ_PAL) return;\n    DWORD *dclist = GetPtr16(hpalette, 1);\n    DWORD *wndlist = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (dclist[0] + 1) * 4);\n    for (int i = 1; i < dclist[0]; i++)\n    {\n        if (dclist[i])\n        {\n            HDC hdc32 = HDC_32(dclist[i] & 0xffff);\n            if (!GetObjectType(hdc32) || (GetCurrentObject(hdc32, OBJ_PAL) != hpal32))\n            {\n                dclist[i] = 0;\n                continue;\n            }\n            HWND hwnd = WindowFromDC(hdc32);\n            if (hwnd)\n            {\n                BOOL found = FALSE;\n                for (int j = 1; j <= wndlist[0]; j++)\n                {\n                    if (wndlist[j] == hwnd)\n                    {\n                        found = TRUE;\n                        break;\n                    }\n                }\n                if (!found)\n                {\n                    wndlist[wndlist[0] + 1] = hwnd;\n                    wndlist[0]++;\n                    RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW);\n                }\n            }\n            else if (krnl386_get_config_int(\"otvdm\", \"DIBPalette\", FALSE))\n            {\n                DIBSECTION dib;\n                HBITMAP bitmap = GetCurrentObject(hdc32, OBJ_BITMAP);\n                int ret = GetObject(bitmap, sizeof(DIBSECTION), &dib);\n                if ((ret == sizeof(DIBSECTION)) && (dib.dsBmih.biBitCount == 8) && !dib.dshSection && (GetPtr16(HBITMAP_16(bitmap), 1) == 0xd1b00001))\n                    set_dib_colors(hdc32);\n            }\n        }\n    }\n    if (krnl386_get_config_int(\"otvdm\", \"DIBPalette\", FALSE) && (hpal32 == get_realized_palette()))\n        EnumThreadWindows(GetCurrentThreadId(), paint_all_windows, wndlist);\n    HeapFree(GetProcessHeap(), 0, wndlist);\n}\n\n/***********************************************************************\n *           SetPaletteEntries    (GDI.364)\n */\nUINT16 WINAPI SetPaletteEntries16( HPALETTE16 hpalette, UINT16 start,\n                                   UINT16 count, const PALETTEENTRY *entries )\n{\n    UINT16 ret = SetPaletteEntries( HPALETTE_32(hpalette), start, count, entries );\n    if (GetPtr16(hpalette, 1)) update_palette(hpalette);\n    return ret;\n}\n\n\n/**********************************************************************\n *            UpdateColors   (GDI.366)\n */\nINT16 WINAPI UpdateColors16( HDC16 hdc )\n{\n    UpdateColors( HDC_32(hdc) );\n    return TRUE;\n}\n\n/***********************************************************************\n *           AnimatePalette   (GDI.367)\n */\nvoid WINAPI AnimatePalette16( HPALETTE16 hpalette, UINT16 StartIndex,\n                              UINT16 NumEntries, const PALETTEENTRY* PaletteColors)\n{\n    AnimatePalette(HPALETTE_32(hpalette), StartIndex, NumEntries, PaletteColors);\n    if (GetPtr16(hpalette, 1)) update_palette(hpalette);\n}\n\n\n/***********************************************************************\n *           ResizePalette   (GDI.368)\n */\nBOOL16 WINAPI ResizePalette16( HPALETTE16 hpalette, UINT16 cEntries )\n{\n    return ResizePalette( HPALETTE_32(hpalette), cEntries );\n}\n\n\n/***********************************************************************\n *           GetNearestPaletteIndex   (GDI.370)\n */\nUINT16 WINAPI GetNearestPaletteIndex16( HPALETTE16 hpalette, COLORREF color )\n{\n    return GetNearestPaletteIndex( HPALETTE_32(hpalette), check_colorref(color) );\n}\n\n\n/**********************************************************************\n *          ExtFloodFill   (GDI.372)\n */\nBOOL16 WINAPI ExtFloodFill16( HDC16 hdc, INT16 x, INT16 y, COLORREF color,\n                              UINT16 fillType )\n{\n    return ExtFloodFill( HDC_32(hdc), x, y, check_colorref(color), fillType );\n}\n\n\n/***********************************************************************\n *           SetSystemPaletteUse   (GDI.373)\n */\nUINT16 WINAPI SetSystemPaletteUse16( HDC16 hdc, UINT16 use )\n{\n    syspaluse = use;\n    return SetSystemPaletteUse( HDC_32(hdc), use );\n}\n\n\n/***********************************************************************\n *           GetSystemPaletteUse   (GDI.374)\n */\nUINT16 WINAPI GetSystemPaletteUse16( HDC16 hdc )\n{\n    UINT16 ret = GetSystemPaletteUse( HDC_32(hdc) );\n    if (!ret && krnl386_get_compat_mode(\"256color\"))\n         ret = syspaluse;\n    return ret;\n}\n\n\n/***********************************************************************\n *           GetSystemPaletteEntries   (GDI.375)\n */\nUINT16 WINAPI GetSystemPaletteEntries16( HDC16 hdc, UINT16 start, UINT16 count,\n                                         LPPALETTEENTRY entries )\n{\n    if (krnl386_get_compat_mode(\"256color\") && krnl386_get_config_int(\"otvdm\", \"DIBPalette\", FALSE))\n    {\n        HPALETTE hpal = get_realized_palette();\n        if (hpal == GetStockObject(DEFAULT_PALETTE))\n        {\n            GetSystemPaletteEntries( HDC_32(hdc), start, count, entries );\n            return min(count, 256 - start);\n        }\n        UINT ret = GetPaletteEntries(hpal, start, count, entries);\n        return ret;\n    }\n    return GetSystemPaletteEntries( HDC_32(hdc), start, count, entries );\n}\n\n\n/***********************************************************************\n *           ResetDC    (GDI.376)\n */\nHDC16 WINAPI ResetDC16( HDC16 hdc, const DEVMODEA *devmode )\n{\n    DEVMODEA dma = {0};\n    if (!IsValidDevmodeA(devmode, devmode->dmSize + devmode->dmDriverExtra))\n        return NULL;\n    memcpy(&dma, devmode, devmode->dmSize);\n    dma.dmSize = sizeof(DEVMODEA);\n    dma.dmDriverExtra = 0;\n    if (!dma.dmDeviceName[0]) dma.dmDeviceName[0] = '.';\n    return HDC_16( ResetDCA( HDC_32(hdc), &dma ) );\n}\n\n/******************************************************************\n *           StartDoc   (GDI.377)\n */\nINT16 WINAPI StartDoc16( HDC16 hdc, const DOCINFO16 *lpdoc )\n{\n    DOCINFOA docA;\n    DWORD count;\n    INT16 ret;\n\n    docA.cbSize = sizeof(DOCINFOA);\n    docA.lpszDocName = MapSL(lpdoc->lpszDocName);\n    docA.lpszOutput = MapSL(lpdoc->lpszOutput);\n    if(lpdoc->cbSize > offsetof(DOCINFO16,lpszDatatype))\n        docA.lpszDatatype = MapSL(lpdoc->lpszDatatype);\n    else\n        docA.lpszDatatype = NULL;\n    if(lpdoc->cbSize > offsetof(DOCINFO16,fwType))\n        docA.fwType = lpdoc->fwType;\n    else\n        docA.fwType = 0;\n    ReleaseThunkLock(&count);\n    ret = StartDocA( HDC_32(hdc), &docA );\n    // if startdoc tries to show a save file dialog but the active window\n    // disappears then it'll fail, try again and it should find a new window\n    if ((ret < 0) && (GetLastError() == ERROR_INVALID_WINDOW_HANDLE))\n        ret = StartDocA( HDC_32(hdc), &docA );\n    RestoreThunkLock(count);\n    return ret;\n}\n\n\n/******************************************************************\n *           EndDoc   (GDI.378)\n */\nINT16 WINAPI EndDoc16( HDC16 hdc )\n{\n    return EndDoc( HDC_32(hdc) );\n}\n\n\n/******************************************************************\n *           StartPage   (GDI.379)\n */\nINT16 WINAPI StartPage16( HDC16 hdc )\n{\n    return StartPage( HDC_32(hdc) );\n}\n\n\n/******************************************************************\n *           EndPage   (GDI.380)\n */\nINT16 WINAPI EndPage16( HDC16 hdc )\n{\n    return EndPage( HDC_32(hdc) );\n}\n\n\n/******************************************************************************\n *           AbortDoc   (GDI.382)\n */\nINT16 WINAPI AbortDoc16( HDC16 hdc )\n{\n    return AbortDoc( HDC_32(hdc) );\n}\n\n\n/***********************************************************************\n *           FastWindowFrame    (GDI.400)\n */\nBOOL16 WINAPI FastWindowFrame16( HDC16 hdc, const RECT16 *rect,\n                               INT16 width, INT16 height, DWORD rop )\n{\n    HDC hdc32 = HDC_32(hdc);\n    HBRUSH hbrush = SelectObject( hdc32, GetStockObject( GRAY_BRUSH ) );\n    PatBlt( hdc32, rect->left, rect->top,\n            rect->right - rect->left - width, height, rop );\n    PatBlt( hdc32, rect->left, rect->top + height, width,\n            rect->bottom - rect->top - height, rop );\n    PatBlt( hdc32, rect->left + width, rect->bottom - 1,\n            rect->right - rect->left - width, -height, rop );\n    PatBlt( hdc32, rect->right - 1, rect->top, -width,\n            rect->bottom - rect->top - height, rop );\n    SelectObject( hdc32, hbrush );\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           GdiInit2     (GDI.403)\n *\n * See \"Undocumented Windows\"\n *\n * PARAMS\n *   h1 [I] GDI object\n *   h2 [I] global data\n */\nHANDLE16 WINAPI GdiInit216( HANDLE16 h1, HANDLE16 h2 )\n{\n    FIXME(\"(%04x, %04x), stub.\\n\", h1, h2);\n    if (h2 == 0xffff) return 0xffff; /* undefined return value */\n    return h1; /* FIXME: should be the memory handle of h1 */\n}\n\n\n/***********************************************************************\n *           FinalGdiInit     (GDI.405)\n */\nvoid WINAPI FinalGdiInit16( HBRUSH16 hPattern /* [in] fill pattern of desktop */ )\n{\n}\n\n\n/***********************************************************************\n *           CreateUserBitmap    (GDI.407)\n */\nHBITMAP16 WINAPI CreateUserBitmap16( INT16 width, INT16 height, UINT16 planes,\n                                     UINT16 bpp, LPCVOID bits )\n{\n    return CreateBitmap16( width, height, planes, bpp, bits );\n}\n\n\n/***********************************************************************\n *           CreateUserDiscardableBitmap    (GDI.409)\n */\nHBITMAP16 WINAPI CreateUserDiscardableBitmap16( WORD dummy, INT16 width, INT16 height )\n{\n    HDC hdc = CreateDCA( \"DISPLAY\", NULL, NULL, NULL );\n    HBITMAP ret = CreateCompatibleBitmap( hdc, width, height );\n    DeleteDC( hdc );\n    return HBITMAP_16(ret);\n}\n\n\n/***********************************************************************\n *\t\tGetCurLogFont (GDI.411)\n */\nHFONT16 WINAPI GetCurLogFont16( HDC16 hdc )\n{\n    return HFONT_16( GetCurrentObject( HDC_32(hdc), OBJ_FONT ) );\n}\n\nstatic DWORD rle_size(int type, const VOID *bits)\n{\n    DWORD ret = 0;\n    __TRY\n    {\n        DWORD offset = 0;\n        BYTE *data = (BYTE *)bits;\n        BOOL loop = TRUE;\n        do\n        {\n            if (!data[offset++])\n            {\n                BYTE byte = data[offset++];\n                switch (byte)\n                {\n                    case 0:\n                        break;\n                    case 1:\n                        ret = offset;\n                        loop = FALSE;\n                        break;\n                    default:\n                        offset += byte / type;\n                        offset = (offset + 1) & ~1;\n                        break;\n                }\n            }\n            else\n                offset++;\n        }\n        while (loop);\n    }\n    __EXCEPT_ALL\n    {\n        ERR(\"bad bitmap, type %d\", type);\n    }\n    __ENDTRY\n    return ret;\n}\n\n\n/***********************************************************************\n *           StretchDIBits   (GDI.439)\n */\nINT16 WINAPI StretchDIBits16( HDC16 hdc, INT16 xDst, INT16 yDst, INT16 widthDst,\n                              INT16 heightDst, INT16 xSrc, INT16 ySrc, INT16 widthSrc,\n                              INT16 heightSrc, const VOID *bits,\n                              const BITMAPINFO *info, UINT16 wUsage, DWORD dwRop )\n{\n    BITMAPINFO *bmp = NULL;\n    INT16 ret;\n    HDC hdc32 = HDC_32(hdc);\n    if ((info->bmiHeader.biCompression == BI_RLE4) || (info->bmiHeader.biCompression == BI_RLE8))\n    {\n        int hdrsize = info->bmiHeader.biSize + ((info->bmiHeader.biClrUsed ? info->bmiHeader.biClrUsed :\n                        (info->bmiHeader.biBitCount == 4 ? 16 : 256)) * (wUsage == DIB_PAL_COLORS ? 2 : 4));\n\n        bmp = HeapAlloc(GetProcessHeap(), 0, hdrsize);\n        memcpy(bmp, info, hdrsize);\n        bmp->bmiHeader.biSizeImage = rle_size(info->bmiHeader.biCompression, bits);\n    }\n    else if (krnl386_get_compat_mode(\"256color\") && krnl386_get_config_int(\"otvdm\", \"DIBPalette\", FALSE) && (GetDeviceCaps(hdc32, TECHNOLOGY) == DT_RASDISPLAY) && (info->bmiHeader.biBitCount == 8)) // this doesn't support RLE8 right now\n    {\n        DIBSECTION dib;\n        HBITMAP hbmp = GetCurrentObject(hdc32, OBJ_BITMAP);\n        int count = GetObject(hbmp, sizeof(DIBSECTION), &dib);\n        if ((count == sizeof(DIBSECTION)) && (dib.dsBmih.biBitCount == 8) && !dib.dshSection && (GetPtr16(HBITMAP_16(hbmp), 1) == 0xd1b00001))\n        {\n            char *section;\n            HPALETTE hpal = GetCurrentObject(hdc32, OBJ_PAL);\n            HBITMAP hbmpsrc = CreateDIBSection(hdc32, info, wUsage, &section, NULL, 0);\n            HDC hdcsrc = CreateCompatibleDC(hdc32);\n            HPALETTE oldpal = SelectPalette(hdcsrc, hpal, FALSE);\n            HBITMAP oldbmp = SelectObject(hdcsrc, hbmpsrc);\n            memcpy(section, bits, ((info->bmiHeader.biWidth + 3) & ~3) * (ySrc + heightSrc));\n            INT16 ret = StretchBlt(hdc32, xDst, yDst, widthDst, heightDst, hdcsrc, xSrc, ySrc, widthSrc, heightSrc, dwRop);\n            SelectPalette(hdcsrc, oldpal, FALSE);\n            SelectObject(hdcsrc, oldbmp);\n            DeleteObject(hbmpsrc);\n            DeleteDC(hdcsrc);\n            return ret;\n        }\n    }\n    ret = StretchDIBits( hdc32, xDst, yDst, widthDst, heightDst,\n                          xSrc, ySrc, widthSrc, heightSrc, bits,\n                          bmp ? bmp : info, wUsage, dwRop );\n    if (bmp)\n        HeapFree(GetProcessHeap(), 0, bmp);\n    return ret;\n}\n\n\n/***********************************************************************\n *           SetDIBits    (GDI.440)\n */\nINT16 WINAPI SetDIBits16( HDC16 hdc, HBITMAP16 hbitmap, UINT16 startscan,\n                          UINT16 lines, LPCVOID bits, const BITMAPINFO *info,\n                          UINT16 coloruse )\n{\n    HBITMAP hbitmap32 = HBITMAP_32(hbitmap);\n    if (krnl386_get_compat_mode(\"256color\"))\n    {\n        // the conversion from 8bpp->1bpp on winxp+ (even in 256 color mode) is different than win31/95 and wine\n        // the problem shows in The Even More Incredible Machine where the sprites are almost completely masked out\n        // the cause is that nt scans the dib pallette for the back color and marks the first found match as the\n        // only index to be 1 and all others are 0, win31 does the match by checking every pixel so if there are \n        // multiple colors that match the back color nt will ignore all but one while win31 will find them all\n        // TEMIM hits this problem, by converting to 32bpp the issue is bypassed\n        // TODO: SetDIBitsFromDevice, 4bpp dibs may also be affected\n        BITMAP bmap;\n        int ret = GetObject(hbitmap32, sizeof(BITMAP), &bmap);\n        if ((bmap.bmPlanes == 1) && (bmap.bmBitsPixel == 1) && (info->bmiHeader.biBitCount == 8))\n        {\n            HDC hdcscr = GetDC(NULL);\n            HDC hdcsrc = CreateCompatibleDC(hdcscr);\n            HDC hdcdst = HDC_32(hdc);\n            HBITMAP hbmp = CreateCompatibleBitmap(hdcscr, info->bmiHeader.biWidth, info->bmiHeader.biHeight);\n            HBITMAP origbmp1 = SelectObject(hdcsrc, hbmp);\n            int start = info->bmiHeader.biHeight - lines - startscan;\n            ReleaseDC(hdcscr, NULL);\n            SaveDC(hdcdst);\n            SelectObject(hdcdst, hbitmap32);\n            SetDIBits(hdcsrc, hbmp, startscan, lines, bits, info, coloruse);\n            BitBlt(hdcdst, 0, start, info->bmiHeader.biWidth, lines, hdcsrc, 0, start, SRCCOPY);\n            SelectObject(hdcsrc, origbmp1);\n            DeleteObject(hbmp);\n            DeleteDC(hdcsrc);\n            RestoreDC(hdcdst, -1);\n            return lines;\n        }\n    }\n    BITMAPINFO *bmp = NULL;\n    INT16 ret;\n    if (((info->bmiHeader.biCompression == BI_RLE4) || (info->bmiHeader.biCompression == BI_RLE8)) && !info->bmiHeader.biSizeImage)\n    {\n        int hdrsize = info->bmiHeader.biSize + ((info->bmiHeader.biClrUsed ? info->bmiHeader.biClrUsed :\n                        (info->bmiHeader.biBitCount == 4 ? 16 : 256)) * (coloruse == DIB_PAL_COLORS ? 2 : 4));\n\n        bmp = HeapAlloc(GetProcessHeap(), 0, hdrsize);\n        memcpy(bmp, info, hdrsize);\n        bmp->bmiHeader.biSizeImage = rle_size(info->bmiHeader.biCompression, bits);\n    }\n\n    ret = SetDIBits( HDC_32(hdc), hbitmap32, startscan, lines, bits, bmp ? bmp : info, coloruse );\n    if (bmp)\n        HeapFree(GetProcessHeap(), 0, bmp);\n    return ret;\n}\n\n\n/***********************************************************************\n *           GetDIBits    (GDI.441)\n */\nINT16 WINAPI GetDIBits16( HDC16 hdc, HBITMAP16 hbitmap, UINT16 startscan,\n                          UINT16 lines, LPVOID bits, BITMAPINFO * info,\n                          UINT16 coloruse )\n{\n    if (lines > info->bmiHeader.biHeight)\n    {\n        lines = info->bmiHeader.biHeight;\n    }\n    return GetDIBits( HDC_32(hdc), HBITMAP_32(hbitmap), startscan, lines, bits, info, coloruse );\n}\n\n\n/***********************************************************************\n *           CreateDIBitmap    (GDI.442)\n */\nHBITMAP16 WINAPI CreateDIBitmap16( HDC16 hdc, const BITMAPINFOHEADER * header,\n                                   DWORD init, LPCVOID bits, const BITMAPINFO * data,\n                                   UINT16 coloruse )\n{\n    BITMAPINFO *bmp = NULL;\n    HBITMAP16 ret;\n    if (data && ((data->bmiHeader.biCompression == BI_RLE4) || (data->bmiHeader.biCompression == BI_RLE8)))\n    {\n        int hdrsize = data->bmiHeader.biSize + ((data->bmiHeader.biClrUsed ? data->bmiHeader.biClrUsed :\n                        (data->bmiHeader.biBitCount == 4 ? 16 : 256)) * (coloruse == DIB_PAL_COLORS ? 2 : 4));\n\n        bmp = HeapAlloc(GetProcessHeap(), 0, hdrsize);\n        memcpy(bmp, data, hdrsize);\n        bmp->bmiHeader.biSizeImage = rle_size(data->bmiHeader.biCompression, bits);\n    }\n    if (krnl386_get_compat_mode(\"256color\") && krnl386_get_config_int(\"otvdm\", \"DIBPalette\", FALSE))\n    {\n        HDC16 hdc2 = CreateCompatibleDC16(hdc);\n        HDC hdc232 = HDC_32(hdc2);\n        ret = CreateCompatibleBitmap16(hdc2, header->biWidth, header->biHeight);\n        HBITMAP hbmp = HDC_32(ret);\n        HBITMAP oldbmp = SelectObject(hdc232, hbmp);\n        if (GetObjectType(HDC_32(hdc)) == OBJ_DC)\n           set_dib_colors(hdc232);\n        SetDIBits(hdc232, hbmp, 0, data->bmiHeader.biHeight, bits, bmp ? bmp : data, coloruse);\n        SelectObject(hdc232, oldbmp);\n        DeleteDC16(hdc2);\n    }\n    else\n        ret = HBITMAP_16( CreateDIBitmap( HDC_32(hdc), header, init, bits, bmp ? bmp : data, coloruse ) );\n    if (bmp)\n        HeapFree(GetProcessHeap(), 0, bmp);\n    return ret;\n}\n\n\n/***********************************************************************\n *           SetDIBitsToDevice    (GDI.443)\n */\nINT16 WINAPI SetDIBitsToDevice16( HDC16 hdc, INT16 xDest, INT16 yDest, INT16 cx,\n                                  INT16 cy, INT16 xSrc, INT16 ySrc, UINT16 startscan,\n                                  UINT16 lines, LPCVOID bits, const BITMAPINFO *info,\n                                  UINT16 coloruse )\n{\n    return SetDIBitsToDevice( HDC_32(hdc), xDest, yDest, cx, cy, xSrc, ySrc,\n                              startscan, lines, bits, info, coloruse );\n}\n\n\n/***********************************************************************\n *           CreateRoundRectRgn    (GDI.444)\n *\n * If either ellipse dimension is zero we call CreateRectRgn16 for its\n * `special' behaviour. -ve ellipse dimensions can result in GPFs under win3.1\n * we just let CreateRoundRectRgn convert them to +ve values.\n */\n\nHRGN16 WINAPI CreateRoundRectRgn16( INT16 left, INT16 top, INT16 right, INT16 bottom,\n                                    INT16 ellipse_width, INT16 ellipse_height )\n{\n    if( ellipse_width == 0 || ellipse_height == 0 )\n        return CreateRectRgn16( left, top, right, bottom );\n    else\n        return HRGN_16( CreateRoundRectRgn( left, top, right, bottom,\n                                            ellipse_width, ellipse_height ));\n}\n\n\n/***********************************************************************\n *           CreateDIBPatternBrush    (GDI.445)\n */\nHBRUSH16 WINAPI CreateDIBPatternBrush16( HGLOBAL16 hbitmap, UINT16 coloruse )\n{\n    BITMAPINFO *bmi;\n    HBRUSH16 ret;\n\n    if (!(bmi = GlobalLock16( hbitmap ))) return 0;\n    ret = HBRUSH_16( CreateDIBPatternBrushPt( bmi, coloruse ));\n    GlobalUnlock16( hbitmap );\n    return ret;\n}\n\n\n/**********************************************************************\n *          PolyPolygon (GDI.450)\n */\nBOOL16 WINAPI PolyPolygon16( HDC16 hdc, const POINT16* pt, const INT16* counts,\n                             UINT16 polygons )\n{\n    int         i,nrpts;\n    LPPOINT     pt32;\n    LPINT       counts32;\n    BOOL16      ret;\n\n    nrpts=0;\n    for (i=polygons;i--;)\n        nrpts+=counts[i];\n    pt32 = HeapAlloc( GetProcessHeap(), 0, sizeof(POINT)*nrpts);\n    if(pt32 == NULL) return FALSE;\n    for (i=nrpts;i--;)\n    {\n        pt32[i].x = pt[i].x;\n        pt32[i].y = pt[i].y;\n    }\n    counts32 = HeapAlloc( GetProcessHeap(), 0, polygons*sizeof(INT) );\n    if(counts32 == NULL) {\n        HeapFree( GetProcessHeap(), 0, pt32 );\n        return FALSE;\n    }\n    for (i=polygons;i--;) counts32[i]=counts[i];\n\n    ret = PolyPolygon(HDC_32(hdc),pt32,counts32,polygons);\n    HeapFree( GetProcessHeap(), 0, counts32 );\n    HeapFree( GetProcessHeap(), 0, pt32 );\n    return ret;\n}\n\n\n/***********************************************************************\n *           CreatePolyPolygonRgn    (GDI.451)\n */\nHRGN16 WINAPI CreatePolyPolygonRgn16( const POINT16 *points,\n                                      const INT16 *count, INT16 nbpolygons, INT16 mode )\n{\n    HRGN hrgn;\n    int i, npts = 0;\n    INT *count32;\n    POINT *points32;\n\n    for (i = 0; i < nbpolygons; i++) npts += count[i];\n    points32 = HeapAlloc( GetProcessHeap(), 0, npts * sizeof(POINT) );\n    for (i = 0; i < npts; i++)\n    {\n        points32[i].x = points[i].x;\n        points32[i].y = points[i].y;\n    }\n\n    count32 = HeapAlloc( GetProcessHeap(), 0, nbpolygons * sizeof(INT) );\n    for (i = 0; i < nbpolygons; i++) count32[i] = count[i];\n    hrgn = CreatePolyPolygonRgn( points32, count32, nbpolygons, mode );\n    HeapFree( GetProcessHeap(), 0, count32 );\n    HeapFree( GetProcessHeap(), 0, points32 );\n    return HRGN_16(hrgn);\n}\n\n\n/***********************************************************************\n *           GdiSeeGdiDo   (GDI.452)\n */\nDWORD WINAPI GdiSeeGdiDo16( WORD wReqType, WORD wParam1, WORD wParam2,\n                          WORD wParam3 )\n{\n    DWORD ret = ~0U;\n\n    switch (wReqType)\n    {\n    case 0x0001:  /* LocalAlloc */\n        WARN(\"LocalAlloc16(%x, %x): ignoring\\n\", wParam1, wParam3);\n        ret = 0;\n        break;\n    case 0x0002:  /* LocalFree */\n        WARN(\"LocalFree16(%x): ignoring\\n\", wParam1);\n        ret = 0;\n        break;\n    case 0x0003:  /* LocalCompact */\n        WARN(\"LocalCompact16(%x): ignoring\\n\", wParam3);\n        ret = 65000; /* lie about the amount of free space */\n        break;\n    case 0x0103:  /* LocalHeap */\n        WARN(\"LocalHeap16(): ignoring\\n\");\n        break;\n    default:\n        WARN(\"(wReqType=%04x): Unknown\\n\", wReqType);\n        break;\n    }\n    return ret;\n}\n\n\n/***********************************************************************\n *           SetObjectOwner    (GDI.461)\n */\nvoid WINAPI SetObjectOwner16( HGDIOBJ16 handle, HANDLE16 owner )\n{\n    /* Nothing to do */\n}\n\n\n/***********************************************************************\n *           IsGDIObject    (GDI.462)\n *\n * returns type of object if valid (W95 system programming secrets p. 264-5)\n */\nBOOL16 WINAPI IsGDIObject16( HGDIOBJ16 handle16 )\n{\n    static const BYTE type_map[] =\n    {\n        0,  /* bad */\n        1,  /* OBJ_PEN */\n        2,  /* OBJ_BRUSH */\n        7,  /* OBJ_DC */\n        9,  /* OBJ_METADC */\n        4,  /* OBJ_PAL */\n        3,  /* OBJ_FONT */\n        5,  /* OBJ_BITMAP */\n        6,  /* OBJ_REGION */\n        10, /* OBJ_METAFILE */\n        7,  /* OBJ_MEMDC */\n        0,  /* OBJ_EXTPEN */\n        9,  /* OBJ_ENHMETADC */\n        12, /* OBJ_ENHMETAFILE */\n        0   /* OBJ_COLORSPACE */\n    };\n\n    UINT type = GetObjectType( HGDIOBJ_32( handle16 ));\n\n    if (type >= ARRAY_SIZE(type_map)) return FALSE;\n    return type_map[type];\n}\n\n\n/***********************************************************************\n *           RectVisible    (GDI.465)\n *           RectVisibleOld (GDI.104)\n */\nBOOL16 WINAPI RectVisible16( HDC16 hdc, const RECT16* rect16 )\n{\n    RECT rect;\n\n    rect.left   = rect16->left;\n    rect.top    = rect16->top;\n    rect.right  = rect16->right;\n    rect.bottom = rect16->bottom;\n    return RectVisible( HDC_32(hdc), &rect );\n}\n\n\n/***********************************************************************\n *           RectInRegion    (GDI.466)\n *           RectInRegionOld (GDI.181)\n */\nBOOL16 WINAPI RectInRegion16( HRGN16 hrgn, const RECT16 *rect )\n{\n    RECT r32;\n\n    r32.left   = rect->left;\n    r32.top    = rect->top;\n    r32.right  = rect->right;\n    r32.bottom = rect->bottom;\n    return RectInRegion( HRGN_32(hrgn), &r32 );\n}\n\n\n/***********************************************************************\n *           GetBitmapDimensionEx    (GDI.468)\n */\nBOOL16 WINAPI GetBitmapDimensionEx16( HBITMAP16 hbitmap, LPSIZE16 size )\n{\n    SIZE size32;\n    BOOL ret = GetBitmapDimensionEx( HBITMAP_32(hbitmap), &size32 );\n\n    if (ret)\n    {\n        size->cx = size32.cx;\n        size->cy = size32.cy;\n    }\n    return ret;\n}\n\n\n/***********************************************************************\n *\t\tGetBrushOrgEx (GDI.469)\n */\nBOOL16 WINAPI GetBrushOrgEx16( HDC16 hdc, LPPOINT16 pt )\n{\n    POINT pt32;\n    if (!GetBrushOrgEx( HDC_32(hdc), &pt32 )) return FALSE;\n    pt->x = pt32.x;\n    pt->y = pt32.y;\n    return TRUE;\n}\n\n\n/***********************************************************************\n *\t\tGetCurrentPositionEx (GDI.470)\n */\nBOOL16 WINAPI GetCurrentPositionEx16( HDC16 hdc, LPPOINT16 pt )\n{\n    POINT pt32;\n    if (!GetCurrentPositionEx( HDC_32(hdc), &pt32 )) return FALSE;\n    pt->x = pt32.x;\n    pt->y = pt32.y;\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           GetTextExtentPoint    (GDI.471)\n *\n * FIXME: Should this have a bug for compatibility?\n * Original Windows versions of GetTextExtentPoint{A,W} have documented\n * bugs (-> MSDN KB q147647.txt).\n */\nBOOL16 WINAPI GetTextExtentPoint16( HDC16 hdc, LPCSTR str, INT16 count, LPSIZE16 size )\n{\n    SIZE size32;\n    HDC hdc32 = HDC_32(hdc);\n    TEXTMETRICA tm;\n    GetTextMetricsA(hdc32, &tm);\n    BOOL ret = GetTextExtentPoint32A( hdc32, str, count, &size32 );\n\n    if (ret)\n    {\n        size->cx = size32.cx + tm.tmOverhang;\n        size->cy = size32.cy;\n        check_font_rotation( hdc32, size ); \n    }\n    return ret;\n}\n\n\n/***********************************************************************\n *\t\tGetViewportExtEx (GDI.472)\n */\nBOOL16 WINAPI GetViewportExtEx16( HDC16 hdc, LPSIZE16 size )\n{\n    SIZE size32;\n    if (!GetViewportExtEx( HDC_32(hdc), &size32 )) return FALSE;\n    size->cx = size32.cx;\n    size->cy = size32.cy;\n    return TRUE;\n}\n\n\n/***********************************************************************\n *\t\tGetViewportOrgEx (GDI.473)\n */\nBOOL16 WINAPI GetViewportOrgEx16( HDC16 hdc, LPPOINT16 pt )\n{\n    POINT pt32;\n    if (!GetViewportOrgEx( HDC_32(hdc), &pt32 )) return FALSE;\n    pt->x = pt32.x;\n    pt->y = pt32.y;\n    return TRUE;\n}\n\n\n/***********************************************************************\n *\t\tGetWindowExtEx (GDI.474)\n */\nBOOL16 WINAPI GetWindowExtEx16( HDC16 hdc, LPSIZE16 size )\n{\n    SIZE size32;\n    if (!GetWindowExtEx( HDC_32(hdc), &size32 )) return FALSE;\n    size->cx = size32.cx;\n    size->cy = size32.cy;\n    return TRUE;\n}\n\n\n/***********************************************************************\n *\t\tGetWindowOrgEx (GDI.475)\n */\nBOOL16 WINAPI GetWindowOrgEx16( HDC16 hdc, LPPOINT16 pt )\n{\n    POINT pt32;\n    if (!GetWindowOrgEx( HDC_32(hdc), &pt32 )) return FALSE;\n    pt->x = pt32.x;\n    pt->y = pt32.y;\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           OffsetViewportOrgEx    (GDI.476)\n */\nBOOL16 WINAPI OffsetViewportOrgEx16( HDC16 hdc, INT16 x, INT16 y, LPPOINT16 pt)\n{\n    POINT pt32;\n    BOOL16 ret = OffsetViewportOrgEx( HDC_32(hdc), x, y, &pt32 );\n    if (pt)\n    {\n        pt->x = pt32.x;\n        pt->y = pt32.y;\n    }\n    return ret;\n}\n\n\n/***********************************************************************\n *           OffsetWindowOrgEx    (GDI.477)\n */\nBOOL16 WINAPI OffsetWindowOrgEx16( HDC16 hdc, INT16 x, INT16 y, LPPOINT16 pt )\n{\n    POINT pt32;\n    BOOL16 ret = OffsetWindowOrgEx( HDC_32(hdc), x, y, &pt32 );\n    if (pt)\n    {\n        pt->x = pt32.x;\n        pt->y = pt32.y;\n    }\n    return ret;\n}\n\n\n/***********************************************************************\n *           SetBitmapDimensionEx    (GDI.478)\n */\nBOOL16 WINAPI SetBitmapDimensionEx16( HBITMAP16 hbitmap, INT16 x, INT16 y, LPSIZE16 prevSize )\n{\n    SIZE size32;\n    BOOL ret = SetBitmapDimensionEx( HBITMAP_32(hbitmap), x, y, &size32 );\n\n    if (ret && prevSize)\n    {\n        prevSize->cx = size32.cx;\n        prevSize->cy = size32.cy;\n    }\n    return ret;\n}\n\n\n/***********************************************************************\n *           SetViewportExtEx    (GDI.479)\n */\nBOOL16 WINAPI SetViewportExtEx16( HDC16 hdc, INT16 x, INT16 y, LPSIZE16 size )\n{\n    SIZE size32;\n    BOOL16 ret = SetViewportExtEx( HDC_32(hdc), x, y, &size32 );\n    if (size) { size->cx = size32.cx; size->cy = size32.cy; }\n    return ret;\n}\n\n\n/***********************************************************************\n *           SetViewportOrgEx    (GDI.480)\n */\nBOOL16 WINAPI SetViewportOrgEx16( HDC16 hdc, INT16 x, INT16 y, LPPOINT16 pt )\n{\n    POINT pt32;\n    BOOL16 ret = SetViewportOrgEx( HDC_32(hdc), x, y, &pt32 );\n    if (pt)\n    {\n        pt->x = pt32.x;\n        pt->y = pt32.y;\n    }\n    return ret;\n}\n\n\n/***********************************************************************\n *           SetWindowExtEx    (GDI.481)\n */\nBOOL16 WINAPI SetWindowExtEx16( HDC16 hdc, INT16 x, INT16 y, LPSIZE16 size )\n{\n    SIZE size32;\n    BOOL16 ret = SetWindowExtEx( HDC_32(hdc), x, y, &size32 );\n    if (size) { size->cx = size32.cx; size->cy = size32.cy; }\n    return ret;\n}\n\n\n/***********************************************************************\n *           SetWindowOrgEx    (GDI.482)\n */\nBOOL16 WINAPI SetWindowOrgEx16( HDC16 hdc, INT16 x, INT16 y, LPPOINT16 pt )\n{\n    POINT pt32;\n    BOOL16 ret = SetWindowOrgEx( HDC_32(hdc), x, y, &pt32 );\n    if (pt)\n    {\n        pt->x = pt32.x;\n        pt->y = pt32.y;\n    }\n    return ret;\n}\n\n\n/***********************************************************************\n *           MoveToEx    (GDI.483)\n */\nBOOL16 WINAPI MoveToEx16( HDC16 hdc, INT16 x, INT16 y, LPPOINT16 pt )\n{\n    POINT pt32;\n\n    if (!MoveToEx( HDC_32(hdc), x, y, &pt32 )) return FALSE;\n    if (pt)\n    {\n        pt->x = pt32.x;\n        pt->y = pt32.y;\n    }\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           ScaleViewportExtEx    (GDI.484)\n */\nBOOL16 WINAPI ScaleViewportExtEx16( HDC16 hdc, INT16 xNum, INT16 xDenom,\n                                    INT16 yNum, INT16 yDenom, LPSIZE16 size )\n{\n    SIZE size32;\n    BOOL16 ret = ScaleViewportExtEx( HDC_32(hdc), xNum, xDenom, yNum, yDenom,\n                                       &size32 );\n    if (size) { size->cx = size32.cx; size->cy = size32.cy; }\n    return ret;\n}\n\n\n/***********************************************************************\n *           ScaleWindowExtEx    (GDI.485)\n */\nBOOL16 WINAPI ScaleWindowExtEx16( HDC16 hdc, INT16 xNum, INT16 xDenom,\n                                  INT16 yNum, INT16 yDenom, LPSIZE16 size )\n{\n    SIZE size32;\n    BOOL16 ret = ScaleWindowExtEx( HDC_32(hdc), xNum, xDenom, yNum, yDenom,\n                                     &size32 );\n    if (size) { size->cx = size32.cx; size->cy = size32.cy; }\n    return ret;\n}\n\n\n/***********************************************************************\n *           GetAspectRatioFilterEx  (GDI.486)\n */\nBOOL16 WINAPI GetAspectRatioFilterEx16( HDC16 hdc, LPSIZE16 pAspectRatio )\n{\n    FIXME(\"(%04x, %p): -- Empty Stub !\\n\", hdc, pAspectRatio);\n    return FALSE;\n}\n\n\n/******************************************************************************\n *           PolyBezier  (GDI.502)\n */\nBOOL16 WINAPI PolyBezier16( HDC16 hdc, const POINT16* lppt, INT16 cPoints )\n{\n    int i;\n    BOOL16 ret;\n    LPPOINT pt32 = HeapAlloc( GetProcessHeap(), 0, cPoints*sizeof(POINT) );\n    if(!pt32) return FALSE;\n    for (i=cPoints;i--;)\n    {\n        pt32[i].x = lppt[i].x;\n        pt32[i].y = lppt[i].y;\n    }\n    ret= PolyBezier(HDC_32(hdc), pt32, cPoints);\n    HeapFree( GetProcessHeap(), 0, pt32 );\n    return ret;\n}\n\n\n/******************************************************************************\n *           PolyBezierTo  (GDI.503)\n */\nBOOL16 WINAPI PolyBezierTo16( HDC16 hdc, const POINT16* lppt, INT16 cPoints )\n{\n    int i;\n    BOOL16 ret;\n    LPPOINT pt32 = HeapAlloc( GetProcessHeap(), 0,\n                                           cPoints*sizeof(POINT) );\n    if(!pt32) return FALSE;\n    for (i=cPoints;i--;)\n    {\n        pt32[i].x = lppt[i].x;\n        pt32[i].y = lppt[i].y;\n    }\n    ret= PolyBezierTo(HDC_32(hdc), pt32, cPoints);\n    HeapFree( GetProcessHeap(), 0, pt32 );\n    return ret;\n}\n\n\n/******************************************************************************\n *           ExtSelectClipRgn   (GDI.508)\n */\nINT16 WINAPI ExtSelectClipRgn16( HDC16 hdc, HRGN16 hrgn, INT16 fnMode )\n{\n  return ExtSelectClipRgn( HDC_32(hdc), HRGN_32(hrgn), fnMode);\n}\n\n\n/***********************************************************************\n *           AbortPath    (GDI.511)\n */\nBOOL16 WINAPI AbortPath16(HDC16 hdc)\n{\n    return AbortPath( HDC_32(hdc) );\n}\n\n\n/***********************************************************************\n *           BeginPath    (GDI.512)\n */\nBOOL16 WINAPI BeginPath16(HDC16 hdc)\n{\n    return BeginPath( HDC_32(hdc) );\n}\n\n\n/***********************************************************************\n *           CloseFigure    (GDI.513)\n */\nBOOL16 WINAPI CloseFigure16(HDC16 hdc)\n{\n    return CloseFigure( HDC_32(hdc) );\n}\n\n\n/***********************************************************************\n *           EndPath    (GDI.514)\n */\nBOOL16 WINAPI EndPath16(HDC16 hdc)\n{\n    return EndPath( HDC_32(hdc) );\n}\n\n\n/***********************************************************************\n *           FillPath    (GDI.515)\n */\nBOOL16 WINAPI FillPath16(HDC16 hdc)\n{\n    return FillPath( HDC_32(hdc) );\n}\n\n\n/*******************************************************************\n *           FlattenPath    (GDI.516)\n */\nBOOL16 WINAPI FlattenPath16(HDC16 hdc)\n{\n    return FlattenPath( HDC_32(hdc) );\n}\n\n\n/***********************************************************************\n *           GetPath    (GDI.517)\n */\nINT16 WINAPI GetPath16(HDC16 hdc, LPPOINT16 pPoints, LPBYTE pTypes, INT16 nSize)\n{\n    FIXME(\"(%d,%p,%p): stub\\n\",hdc,pPoints,pTypes);\n    return 0;\n}\n\n\n/***********************************************************************\n *           PathToRegion    (GDI.518)\n */\nHRGN16 WINAPI PathToRegion16(HDC16 hdc)\n{\n    return HRGN_16( PathToRegion( HDC_32(hdc) ));\n}\n\n\n/***********************************************************************\n *           SelectClipPath    (GDI.519)\n */\nBOOL16 WINAPI SelectClipPath16(HDC16 hdc, INT16 iMode)\n{\n    return SelectClipPath( HDC_32(hdc), iMode );\n}\n\n\n/*******************************************************************\n *           StrokeAndFillPath    (GDI.520)\n */\nBOOL16 WINAPI StrokeAndFillPath16(HDC16 hdc)\n{\n    return StrokeAndFillPath( HDC_32(hdc) );\n}\n\n\n/*******************************************************************\n *           StrokePath    (GDI.521)\n */\nBOOL16 WINAPI StrokePath16(HDC16 hdc)\n{\n    return StrokePath( HDC_32(hdc) );\n}\n\n\n/*******************************************************************\n *           WidenPath    (GDI.522)\n */\nBOOL16 WINAPI WidenPath16(HDC16 hdc)\n{\n    return WidenPath( HDC_32(hdc) );\n}\n\n\n/***********************************************************************\n *\t\tGetArcDirection (GDI.524)\n */\nINT16 WINAPI GetArcDirection16( HDC16 hdc )\n{\n    return GetArcDirection( HDC_32(hdc) );\n}\n\n\n/***********************************************************************\n *           SetArcDirection    (GDI.525)\n */\nINT16 WINAPI SetArcDirection16( HDC16 hdc, INT16 nDirection )\n{\n    return SetArcDirection( HDC_32(hdc), (INT)nDirection );\n}\n\n\n/***********************************************************************\n *           CreateHalftonePalette (GDI.529)\n */\nHPALETTE16 WINAPI CreateHalftonePalette16( HDC16 hdc )\n{\n    return HPALETTE_16( CreateHalftonePalette( HDC_32(hdc) ));\n}\n\n\n/***********************************************************************\n *           SetDIBColorTable    (GDI.602)\n */\nUINT16 WINAPI SetDIBColorTable16( HDC16 hdc, UINT16 startpos, UINT16 entries, RGBQUAD *colors )\n{\n    return SetDIBColorTable( HDC_32(hdc), startpos, entries, colors );\n}\n\n\n/***********************************************************************\n *           GetDIBColorTable    (GDI.603)\n */\nUINT16 WINAPI GetDIBColorTable16( HDC16 hdc, UINT16 startpos, UINT16 entries, RGBQUAD *colors )\n{\n    return GetDIBColorTable( HDC_32(hdc), startpos, entries, colors );\n}\n\n\n/***********************************************************************\n *           GetRegionData   (GDI.607)\n *\n * FIXME: is LPRGNDATA the same in Win16 and Win32 ?\n */\nDWORD WINAPI GetRegionData16( HRGN16 hrgn, DWORD count, LPRGNDATA rgndata )\n{\n    return GetRegionData( HRGN_32(hrgn), count, rgndata );\n}\n\n\n/***********************************************************************\n *           GdiFreeResources   (GDI.609)\n */\nWORD WINAPI GdiFreeResources16( DWORD reserve )\n{\n    return 90; /* lie about it, it shouldn't matter */\n}\n\n\n/***********************************************************************\n *           GdiSignalProc32     (GDI.610)\n */\nWORD WINAPI GdiSignalProc( UINT uCode, DWORD dwThreadOrProcessID,\n                           DWORD dwFlags, HMODULE16 hModule )\n{\n    return 0;\n}\n\n\n/***********************************************************************\n *           GetTextCharset   (GDI.612)\n */\nUINT16 WINAPI GetTextCharset16( HDC16 hdc )\n{\n    return GetTextCharset( HDC_32(hdc) );\n}\n\n\n/***********************************************************************\n *           EnumFontFamiliesEx (GDI.613)\n */\nINT16 WINAPI EnumFontFamiliesEx16( HDC16 hdc, LPLOGFONT16 plf,\n                                   FONTENUMPROC16 proc, LPARAM lParam,\n                                   DWORD dwFlags)\n{\n    struct callback16_info info;\n    LOGFONTA lfA, *plfA;\n\n    info.proc  = (FARPROC16)proc;\n    info.param = lParam;\n    info.result = 1;\n\n    if (plf)\n    {\n        logfont_16_to_A(plf, &lfA);\n        plfA = &lfA;\n    }\n    else plfA = NULL;\n\n    return EnumFontFamiliesExA( HDC_32(hdc), plfA, enum_font_callback,\n                                (LPARAM)&info, dwFlags );\n}\n\n\n/*************************************************************************\n *             GetFontLanguageInfo   (GDI.616)\n */\nDWORD WINAPI GetFontLanguageInfo16( HDC16 hdc )\n{\n    return GetFontLanguageInfo( HDC_32(hdc) );\n}\n\n\n/***********************************************************************\n *           SetLayout   (GDI.1000)\n *\n * Sets left->right or right->left text layout flags of a dc.\n */\nBOOL16 WINAPI SetLayout16( HDC16 hdc, DWORD layout )\n{\n    return SetLayout( HDC_32(hdc), layout );\n}\n\n\n/***********************************************************************\n *           SetSolidBrush   (GDI.604)\n *\n * Change the color of a solid brush.\n *\n * PARAMS\n *  hBrush   [I] Brush to change the color of\n *  newColor [I] New color for hBrush\n *\n * RETURNS\n *  Success: TRUE. The color of hBrush is set to newColor.\n *  Failure: FALSE.\n *\n * FIXME\n *  This function is undocumented and untested. The implementation may\n *  not be correct.\n */\nBOOL16 WINAPI SetSolidBrush16(HBRUSH16 hBrush, COLORREF newColor )\n{\n    FIXME( \"%04x %08x no longer supported\\n\", hBrush, newColor );\n    return FALSE;\n}\n\n\n/***********************************************************************\n *           Copy   (GDI.250)\n */\nvoid WINAPI Copy16( LPVOID src, LPVOID dst, WORD size )\n{\n    memcpy( dst, src, size );\n}\n\n/***********************************************************************\n *           RealizeDefaultPalette    (GDI.365)\n */\nUINT16 WINAPI RealizeDefaultPalette16( HDC16 hdc )\n{\n    FIXME( \"%04x semi-stub\\n\", hdc );\n    return GDIRealizePalette16( hdc );\n}\n\n/***********************************************************************\n *           IsDCCurrentPalette   (GDI.412)\n */\nBOOL16 WINAPI IsDCCurrentPalette16(HDC16 hDC)\n{\n    return HPALETTE_16( GetCurrentObject( HDC_32(hDC), OBJ_PAL )) == hPrimaryPalette;\n}\n\n/*********************************************************************\n *           SetMagicColors   (GDI.606)\n */\nVOID WINAPI SetMagicColors16(HDC16 hDC, COLORREF color, UINT16 index)\n{\n    FIXME(\"(hDC %04x, color %04x, index %04x): stub\\n\", hDC, (int)color, index);\n\n}\n\n\n/***********************************************************************\n *           DPtoLP    (GDI.67)\n */\nBOOL16 WINAPI DPtoLP16( HDC16 hdc, LPPOINT16 points, INT16 count )\n{\n    POINT points32[8], *pt32 = points32;\n    int i;\n    BOOL ret;\n\n    if (count > 8)\n    {\n        if (!(pt32 = HeapAlloc( GetProcessHeap(), 0, count * sizeof(*pt32) ))) return FALSE;\n    }\n    for (i = 0; i < count; i++)\n    {\n        pt32[i].x = points[i].x;\n        pt32[i].y = points[i].y;\n    }\n    if ((ret = DPtoLP( HDC_32(hdc), pt32, count )))\n    {\n        for (i = 0; i < count; i++)\n        {\n            if (pt32[i].x >= 0x8000) points[i].x = 0x7fff;\n            else if (pt32[i].x < (LONG)0xffff8000) points[i].x = 0x8000;\n            else points[i].x = pt32[i].x;\n            if (pt32[i].y >= 0x8000) points[i].y = 0x7fff;\n            else if (pt32[i].y < (LONG)0xffff8000) points[i].y = 0x8000;\n            else points[i].y = pt32[i].y;\n        }\n    }\n    if (pt32 != points32) HeapFree( GetProcessHeap(), 0, pt32 );\n    return ret;\n}\n\n\n/***********************************************************************\n *           LPtoDP    (GDI.99)\n */\nBOOL16 WINAPI LPtoDP16( HDC16 hdc, LPPOINT16 points, INT16 count )\n{\n    POINT points32[8], *pt32 = points32;\n    int i;\n    BOOL ret;\n\n    if (count > 8)\n    {\n        if (!(pt32 = HeapAlloc( GetProcessHeap(), 0, count * sizeof(*pt32) ))) return FALSE;\n    }\n    for (i = 0; i < count; i++)\n    {\n        pt32[i].x = points[i].x;\n        pt32[i].y = points[i].y;\n    }\n    if ((ret = LPtoDP( HDC_32(hdc), pt32, count )))\n    {\n        for (i = 0; i < count; i++)\n        {\n            if (pt32[i].x >= 0x8000) points[i].x = 0x7fff;\n            else if (pt32[i].x < (LONG)0xffff8000) points[i].x = 0x8000;\n            else points[i].x = pt32[i].x;\n            if (pt32[i].y >= 0x8000) points[i].y = 0x7fff;\n            else if (pt32[i].y < (LONG)0xffff8000) points[i].y = 0x8000;\n            else points[i].y = pt32[i].y;\n        }\n    }\n    if (pt32 != points32) HeapFree( GetProcessHeap(), 0, pt32 );\n    return ret;\n}\n\n\n/***********************************************************************\n *           GetDCState   (GDI.179)\n */\nHDC16 WINAPI GetDCState16( HDC16 hdc )\n{\n    ERR( \"no longer supported\\n\" );\n    return 0;\n}\n\n\n/***********************************************************************\n *           SetDCState   (GDI.180)\n */\nvoid WINAPI SetDCState16( HDC16 hdc, HDC16 hdcs )\n{\n    ERR( \"no longer supported\\n\" );\n}\n\n/***********************************************************************\n *           SetDCOrg   (GDI.117)\n */\nDWORD WINAPI SetDCOrg16( HDC16 hdc16, INT16 x, INT16 y )\n{\n    FIXME( \"%04x %d,%d no longer supported\\n\", hdc16, x, y );\n    return 0;\n}\n\n\n/***********************************************************************\n *\t\tInquireVisRgn   (GDI.131)\n */\nHRGN16 WINAPI InquireVisRgn16( HDC16 hdc )\n{\n    static HRGN hrgn;\n\n    if (!hrgn) hrgn = CreateRectRgn( 0, 0, 0, 0 );\n    GetRandomRgn( HDC_32(hdc), hrgn, SYSRGN );\n    return HRGN_16(hrgn);\n}\n\n\n/***********************************************************************\n *           OffsetVisRgn    (GDI.102)\n */\nINT16 WINAPI OffsetVisRgn16( HDC16 hdc16, INT16 x, INT16 y )\n{\n    FIXME( \"%04x %d,%d no longer supported\\n\", hdc16, x, y );\n    return ERROR;\n}\n\n\n/***********************************************************************\n *           ExcludeVisRect   (GDI.73)\n */\nINT16 WINAPI ExcludeVisRect16( HDC16 hdc16, INT16 left, INT16 top, INT16 right, INT16 bottom )\n{\n    FIXME( \"%04x %d,%d-%d,%d no longer supported\\n\", hdc16, left, top, right, bottom );\n    return ERROR;\n}\n\n\n/***********************************************************************\n *           IntersectVisRect   (GDI.98)\n */\nINT16 WINAPI IntersectVisRect16( HDC16 hdc16, INT16 left, INT16 top, INT16 right, INT16 bottom )\n{\n    FIXME( \"%04x %d,%d-%d,%d no longer supported\\n\", hdc16, left, top, right, bottom );\n    return ERROR;\n}\n\n\n/***********************************************************************\n *           SaveVisRgn   (GDI.129)\n */\nHRGN16 WINAPI SaveVisRgn16( HDC16 hdc16 )\n{\n    FIXME( \"%04x no longer supported\\n\", hdc16 );\n    return 0;\n}\n\n\n/***********************************************************************\n *           RestoreVisRgn   (GDI.130)\n */\nINT16 WINAPI RestoreVisRgn16( HDC16 hdc16 )\n{\n    FIXME( \"%04x no longer supported\\n\", hdc16 );\n    return ERROR;\n}\n\n\n/***********************************************************************\n *\t\tGetClipRgn (GDI.173)\n */\nHRGN16 WINAPI GetClipRgn16( HDC16 hdc )\n{\n    static HRGN hrgn;\n\n    if (!hrgn) hrgn = CreateRectRgn( 0, 0, 0, 0 );\n    GetClipRgn( HDC_32(hdc), hrgn );\n    return HRGN_16(hrgn);\n}\n\n\n/***********************************************************************\n *           MakeObjectPrivate    (GDI.463)\n *\n * What does that mean ?\n * Some little docu can be found in \"Undocumented Windows\",\n * but this is basically useless.\n */\nvoid WINAPI MakeObjectPrivate16( HGDIOBJ16 handle16, BOOL16 private )\n{\n    FIXME( \"stub: %x %u\\n\", handle16, private );\n}\n\n/***********************************************************************\n *           CreateDIBSection    (GDI.489)\n */\nHBITMAP16 WINAPI CreateDIBSection16 (HDC16 hdc, const BITMAPINFO *bmi, UINT16 usage,\n                                     SEGPTR *bits16, HANDLE section, DWORD offset)\n{\n    LPVOID bits32;\n    HBITMAP hbitmap;\n\n    hbitmap = CreateDIBSection( HDC_32(hdc), bmi, usage, &bits32, section, offset );\n    if (hbitmap && bits32 && bits16) *bits16 = alloc_segptr_bits( hbitmap, bits32 );\n    return HBITMAP_16(hbitmap);\n}\n\nvoid WINAPI GdiTaskTermination16(WORD arg1)\n{\n    FIXME(\"(%04x)\\n\", arg1);\n}\nWORD WINAPI GetPhysicalFontHandle16(WORD arg1/* dc? */)\n{\n    FIXME(\"(%04x)\\n\", arg1);\n    return 0;\n}\nWORD WINAPI GdiMoveBitmap16(WORD arg1)\n{\n    FIXME(\"(%04x)\\n\", arg1);\n    return 0;\n}\nBOOL16 WINAPI IsDCDirty16(WORD arg1, SEGPTR arg2)\n{\n    FIXME(\"(%04x,%08x)\\n\", arg1, arg2);\n    return 0;\n}\nvoid WINAPI UnicodeToAnsi16(SEGPTR arg1, SEGPTR arg2)\n{\n    FIXME(\"(%08x,%08x)\\n\", arg1, arg2);\n    return 0;\n}\nvoid WINAPI ShrinkGdiHeap16()\n{\n    FIXME(\"()\\n\");\n}\nDWORD WINAPI GetAspectRatioFilter16(WORD arg1)\n{\n    FIXME(\"(%04x)\\n\", arg1);\n    return 0;\n}\nWORD WINAPI SelectBitmap16(WORD arg1, WORD arg2)\n{\n    FIXME(\"(%04x)\\n\", arg1);\n    return SelectObject16(arg1, arg2);\n}\n\nWORD WINAPI GetFontAssocStatus16(HDC16 hdc)\n{\n    static BOOL load;\n    static FARPROC GetFontAssocStatus;\n    if (!load)\n    {\n        load = TRUE;\n        GetFontAssocStatus = GetProcAddress(GetModuleHandleW(L\"GDI32\"), \"GetFontAssocStatus\");\n    }\n    if (!GetFontAssocStatus)\n    {\n        ERR(\"(%04x)\\n\", hdc);\n        return 0;\n    }\n    return ((ULONG(WINAPI*)(HDC))GetFontAssocStatus)(HDC_32(hdc));\n}\n\n// style\n// bit 1: scan direction 0 = left to right 1 = right to left\n// bit 7: match type 0 = color 1 = not color\n\nWORD WINAPI ScanLR16(HDC16 hdc, WORD x, WORD y, DWORD color, WORD style)\n{\n    HDC hdc32 = HDC_32(hdc);\n    if (!hdc32 || (GetDeviceCaps(hdc32, TECHNOLOGY) != DT_RASDISPLAY))\n    {\n        ERR(\"Invalid DC (%04x)\\n\", hdc);\n        return -1;\n    }\n    COLORREF pixel = GetPixel(hdc32, x, y);\n    if (pixel == CLR_INVALID)\n        return 0x8000; // out of range\n    for (int i = x; (i <= 0xffff) && (i >= 0); (style & 2) ? i-- : i++)\n    {\n        pixel = GetPixel(hdc32, i, y);\n        if (pixel == CLR_INVALID)\n            return -1;\n        if ((style & 0x80) ? (pixel != color) : (pixel == color))\n            return i;\n    }\n    return -1;\n}\n        \n\nLPCSTR RedirectSystemDir(LPCSTR path, LPSTR to, size_t max_len);\n\nBOOL WINAPI DllEntryPoint(DWORD fdwReason, HINSTANCE hinstDLL, WORD ds,\n                          WORD wHeapSize, DWORD dwReserved1, WORD wReserved2)\n{\n    switch (fdwReason)\n    {\n    case DLL_PROCESS_ATTACH:\n    {\n        static BOOL init = FALSE;\n        if (init == TRUE)\n            break;\n        init = TRUE;\n        WIN32_FIND_DATAA fileinfo = {0};\n        char syspath[MAX_PATH];\n        char fonfile[MAX_PATH];\n        char origsyspath[MAX_PATH];\n        GetWindowsDirectoryA(origsyspath, MAX_PATH);\n        StringCchCatA(origsyspath, MAX_PATH, \"\\\\system\\\\\");\n        RedirectSystemDir(origsyspath, syspath, MAX_PATH);\n        strcpy(fonfile, syspath);\n        StringCchCatA(fonfile, MAX_PATH, \"*.*\");\n        HANDLE file = FindFirstFileA(fonfile, &fileinfo);\n        if (file == INVALID_HANDLE_VALUE)\n            break;\n\n        BOOL ret;\n        do\n        {\n            LPCSTR *ext = fileinfo.cFileName + strlen(fileinfo.cFileName) - 4;\n            if (!stricmp(ext, \".ttf\") || !stricmp(ext, \".fon\"))\n            {\n                strcpy(fonfile, syspath);\n                strcat(fonfile, fileinfo.cFileName);\n                AddFontResource16(fonfile);\n            }\n            ret = FindNextFileA(file, &fileinfo);\n        } while (ret);\n        for (int i = 0; i <= STOCK_LAST; i++) GetStockObject16(i);\n        HDC dc = CreateCompatibleDC(NULL);\n        stock[STOCK_LAST + 1] = HGDIOBJ_16(GetCurrentObject(dc, OBJ_BITMAP));\n        DeleteDC(dc);\n        FindClose(file);\n        break;\n    }\n    case DLL_PROCESS_DETACH:\n        break;\n    }\n    return TRUE;\n}\n\nHFONT16 WINAPI GetSystemIconFont16()\n{\n    // only known to be used by Simplified Chinese progman\n    // uses SPI_GETICONTITLELOGFONT if this returns 0\n    return 0;\n}\n"
  },
  {
    "path": "gdi/gdi.def",
    "content": "; File generated automatically from gdi.exe16.spec; do not edit!\n\nLIBRARY gdi.exe16\n\nEXPORTS\n  _wine_spec_dos_header;=.L__wine_spec_dos_header @1 DATA PRIVATE\n"
  },
  {
    "path": "gdi/gdi.exe16.spec",
    "content": "1   pascal   SetBkColor(word long) SetBkColor16\n2   pascal -ret16 SetBkMode(word word) SetBkMode16\n3   pascal -ret16 SetMapMode(word word) SetMapMode16\n4   pascal -ret16 SetROP2(word word) SetROP216\n5   pascal -ret16 SetRelAbs(word word) SetRelAbs16\n6   pascal -ret16 SetPolyFillMode(word word) SetPolyFillMode16\n7   pascal -ret16 SetStretchBltMode(word word) SetStretchBltMode16\n8   pascal -ret16 SetTextCharacterExtra(word s_word) SetTextCharacterExtra16\n9   pascal   SetTextColor(word long) SetTextColor16\n10  pascal -ret16 SetTextJustification(word s_word s_word) SetTextJustification16\n11  pascal   SetWindowOrg(word s_word s_word) SetWindowOrg16\n12  pascal   SetWindowExt(word s_word s_word) SetWindowExt16\n13  pascal   SetViewportOrg(word s_word s_word) SetViewportOrg16\n14  pascal   SetViewportExt(word s_word s_word) SetViewportExt16\n15  pascal   OffsetWindowOrg(word s_word s_word) OffsetWindowOrg16\n16  pascal   ScaleWindowExt(word s_word s_word s_word s_word) ScaleWindowExt16\n17  pascal   OffsetViewportOrg(word s_word s_word) OffsetViewportOrg16\n18  pascal ScaleViewportExt(word s_word s_word s_word s_word) ScaleViewportExt16\n19  pascal -ret16 LineTo(word s_word s_word) LineTo16\n20  pascal   MoveTo(word s_word s_word) MoveTo16\n21  pascal -ret16 ExcludeClipRect(word s_word s_word s_word s_word) ExcludeClipRect16\n22  pascal -ret16 IntersectClipRect(word s_word s_word s_word s_word) IntersectClipRect16\n23  pascal -ret16 Arc(word s_word s_word s_word s_word s_word s_word s_word s_word) Arc16\n24  pascal -ret16 Ellipse(word s_word s_word s_word s_word) Ellipse16\n25  pascal -ret16 FloodFill(word s_word s_word long) FloodFill16\n26  pascal -ret16 Pie(word s_word s_word s_word s_word s_word s_word s_word s_word) Pie16\n27  pascal -ret16 Rectangle(word s_word s_word s_word s_word) Rectangle16\n28  pascal -ret16 RoundRect(word s_word s_word s_word s_word s_word s_word) RoundRect16\n29  pascal -ret16 PatBlt(word s_word s_word s_word s_word long) PatBlt16\n30  pascal -ret16 SaveDC(word) SaveDC16\n31  pascal   SetPixel(word s_word s_word long) SetPixel16\n32  pascal -ret16 OffsetClipRgn(word s_word s_word) OffsetClipRgn16\n33  pascal -ret16 TextOut(word s_word s_word str word) TextOut16\n34  pascal -ret16 BitBlt( word s_word s_word s_word s_word word s_word s_word long) BitBlt16\n35  pascal -ret16 StretchBlt(word s_word s_word s_word s_word word s_word s_word s_word s_word long) StretchBlt16\n36  pascal -ret16 Polygon (word ptr word) Polygon16\n37  pascal -ret16 Polyline (word ptr word) Polyline16\n38  pascal   Escape(word word word segptr ptr) Escape16\n39  pascal -ret16 RestoreDC(word s_word) RestoreDC16\n40  pascal -ret16 FillRgn(word word word) FillRgn16\n41  pascal -ret16 FrameRgn(word word word word word) FrameRgn16\n42  pascal -ret16 InvertRgn(word word) InvertRgn16\n43  pascal -ret16 PaintRgn(word word) PaintRgn16\n44  pascal -ret16 SelectClipRgn(word word) SelectClipRgn16\n45  pascal -ret16 SelectObject(word word) SelectObject16\n46  stub BITMAPBITS # W1.1, W2.0\n47  pascal -ret16 CombineRgn(word word word s_word) CombineRgn16\n48  pascal -ret16 CreateBitmap(word word word word ptr) CreateBitmap16\n49  pascal -ret16 CreateBitmapIndirect(ptr) CreateBitmapIndirect16\n50  pascal -ret16 CreateBrushIndirect(ptr) CreateBrushIndirect16\n51  pascal -ret16 CreateCompatibleBitmap(word word word) CreateCompatibleBitmap16\n52  pascal -ret16 CreateCompatibleDC(word) CreateCompatibleDC16\n53  pascal -ret16 CreateDC(str str str segptr) CreateDC16\n54  pascal -ret16 CreateEllipticRgn(s_word s_word s_word s_word) CreateEllipticRgn16\n55  pascal -ret16 CreateEllipticRgnIndirect(ptr) CreateEllipticRgnIndirect16\n56  pascal -ret16 CreateFont(s_word s_word s_word s_word s_word word word word word word word word word str) CreateFont16\n57  pascal -ret16 CreateFontIndirect(ptr) CreateFontIndirect16\n58  pascal -ret16 CreateHatchBrush(word long) CreateHatchBrush16\n#59 ??? (not even in W1.1, W2.0)\n60  pascal -ret16 CreatePatternBrush(word) CreatePatternBrush16\n61  pascal -ret16 CreatePen(s_word s_word long) CreatePen16\n62  pascal -ret16 CreatePenIndirect(ptr) CreatePenIndirect16\n63  pascal -ret16 CreatePolygonRgn(ptr word word) CreatePolygonRgn16\n64  pascal -ret16 CreateRectRgn(s_word s_word s_word s_word) CreateRectRgn16\n65  pascal -ret16 CreateRectRgnIndirect(ptr) CreateRectRgnIndirect16\n66  pascal -ret16 CreateSolidBrush(long) CreateSolidBrush16\n67  pascal -ret16 DPtoLP(word ptr s_word) DPtoLP16\n68  pascal -ret16 DeleteDC(word) DeleteDC16\n69  pascal -ret16 DeleteObject(word) DeleteObject16\n70  pascal -ret16 EnumFonts(word str segptr long) EnumFonts16\n71  pascal -ret16 EnumObjects(word word segptr long) EnumObjects16\n72  pascal -ret16 EqualRgn(word word) EqualRgn16\n73  pascal -ret16 ExcludeVisRect(word s_word s_word s_word s_word) ExcludeVisRect16\n74  pascal   GetBitmapBits(word long ptr) GetBitmapBits16\n75  pascal   GetBkColor(word) GetBkColor16\n76  pascal -ret16 GetBkMode(word) GetBkMode16\n77  pascal -ret16 GetClipBox(word ptr) GetClipBox16\n78  pascal   GetCurrentPosition(word) GetCurrentPosition16\n79  pascal   GetDCOrg(word) GetDCOrg16\n80  pascal -ret16 GetDeviceCaps(word s_word) GetDeviceCaps16\n81  pascal -ret16 GetMapMode(word) GetMapMode16\n82  pascal -ret16 GetObject(word s_word ptr) GetObject16\n83  pascal   GetPixel(word s_word s_word) GetPixel16\n84  pascal -ret16 GetPolyFillMode(word) GetPolyFillMode16\n85  pascal -ret16 GetROP2(word) GetROP216\n86  pascal -ret16 GetRelAbs(word) GetRelAbs16\n87  pascal -ret16 GetStockObject(word) GetStockObject16\n88  pascal -ret16 GetStretchBltMode(word) GetStretchBltMode16\n89  pascal -ret16 GetTextCharacterExtra(word) GetTextCharacterExtra16\n90  pascal   GetTextColor(word) GetTextColor16\n91  pascal   GetTextExtent(word ptr s_word) GetTextExtent16\n92  pascal -ret16 GetTextFace(word s_word ptr) GetTextFace16\n93  pascal -ret16 GetTextMetrics(word ptr) GetTextMetrics16\n94  pascal   GetViewportExt(word) GetViewportExt16\n95  pascal   GetViewportOrg(word) GetViewportOrg16\n96  pascal   GetWindowExt(word) GetWindowExt16\n97  pascal   GetWindowOrg(word) GetWindowOrg16\n98  pascal -ret16 IntersectVisRect(word s_word s_word s_word s_word) IntersectVisRect16\n99  pascal -ret16 LPtoDP(word ptr s_word) LPtoDP16\n100 pascal -ret16 LineDDA(s_word s_word s_word s_word segptr long) LineDDA16\n101 pascal -ret16 OffsetRgn(word s_word s_word) OffsetRgn16\n102 pascal -ret16 OffsetVisRgn(word s_word s_word) OffsetVisRgn16\n103 pascal -ret16 PtVisible(word s_word s_word) PtVisible16\n104 pascal -ret16 RectVisibleOld(word ptr) RectVisible16 # also named RECTVISIBLE\n105 pascal -ret16 SelectVisRgn(word word) SelectVisRgn16\n106 pascal   SetBitmapBits(word long ptr) SetBitmapBits16\n# ??? (not even in W1.1)\n117 pascal   SetDCOrg(word s_word s_word) SetDCOrg16\n# 118 stub InternalCreateDC # W1.1, W2.0\n118 pascal -ret16 GetSystemIconFont() GetSystemIconFont16\n119 pascal -ret16 AddFontResource(str) AddFontResource16\n120 stub GetContinuingTextExtent # W1.1, W2.0\n121 pascal -ret16 Death(word) Death16\n122 pascal -ret16 Resurrection(word word word word word word word) Resurrection16\n123 pascal -ret16 PlayMetaFile(word word) PlayMetaFile16\n124 pascal -ret16 GetMetaFile(str) GetMetaFile16\n125 pascal -ret16 CreateMetaFile(str) CreateMetaFile16\n126 pascal -ret16 CloseMetaFile(word) CloseMetaFile16\n127 pascal -ret16 DeleteMetaFile(word) DeleteMetaFile16\n128 pascal -ret16 MulDiv(s_word s_word s_word) MulDiv16\n129 pascal -ret16 SaveVisRgn(word) SaveVisRgn16\n130 pascal -ret16 RestoreVisRgn(word) RestoreVisRgn16\n131 pascal -ret16 InquireVisRgn(word) InquireVisRgn16\n132 pascal -ret16 SetEnvironment(str str word) SetEnvironment16\n133 pascal -ret16 GetEnvironment(str str word) GetEnvironment16\n134 pascal -ret16 GetRgnBox(word ptr) GetRgnBox16\n135 pascal -ret16 ScanLR(word word word long word) ScanLR16\n136 pascal -ret16 RemoveFontResource(str) RemoveFontResource16\n#137 - 147 removed sometime after W2.0\n137 stub GSV\n138 stub DPXlate\n139 stub SetWinViewExt\n140 stub ScaleExt\n141 stub WordSet\n142 stub RectStuff\n143 stub OffsetOrg\n144 stub LockDC # < W2.0\n145 stub UnlockDC # < W2.0\n146 stub LockUnlock # < W2.0\n147 stub GDI_FarFrame\n148 pascal SetBrushOrg(word s_word s_word) SetBrushOrg16\n149 pascal GetBrushOrg(word) GetBrushOrg16\n150 pascal -ret16 UnrealizeObject(word) UnrealizeObject16\n151 pascal -ret16 CopyMetaFile(word str) CopyMetaFile16\n152 stub GDIInitApp # W1.1, W2.0\n153 pascal -ret16 CreateIC(str str str ptr) CreateIC16\n154 pascal   GetNearestColor(word long) GetNearestColor16\n155 pascal -ret16 QueryAbort(word word) QueryAbort16\n156 pascal -ret16 CreateDiscardableBitmap(word word word) CreateDiscardableBitmap16\n157 stub CompatibleBitmap # W1.1, W2.0\n158 stub EnumCallback\n159 pascal -ret16 GetMetaFileBits(word) GetMetaFileBits16\n160 pascal -ret16 SetMetaFileBits(word) SetMetaFileBits16\n161 pascal -ret16 PtInRegion(word s_word s_word) PtInRegion16\n162 pascal   GetBitmapDimension(word) GetBitmapDimension16\n163 pascal   SetBitmapDimension(word s_word s_word) SetBitmapDimension16\n164 stub PixToLine # W1.1, W2.0\n#165 - 200 not in W1.1\n169 pascal -ret16 IsDCDirty(word segptr) IsDCDirty16\n170 stub SetDCStatus\n171 stub LVBUNION # W2.0 (only ?)\n172 pascal -ret16 SetRectRgn(word s_word s_word s_word s_word) SetRectRgn16\n173 pascal -ret16 GetClipRgn(word) GetClipRgn16\n174 stub BLOAT # W2.0 (only ?) ROTFL ! ;-))\n175 pascal -ret16 EnumMetaFile(word word segptr long) EnumMetaFile16\n176 pascal -ret16 PlayMetaFileRecord(word ptr ptr word) PlayMetaFileRecord16\n177 stub RCOS # W2.0 (only ?)\n178 stub RSIN # W2.0 (only ?)\n179 pascal -ret16 GetDCState(word) GetDCState16\n180 pascal -ret16 SetDCState(word word) SetDCState16\n181 pascal -ret16 RectInRegionOld(word ptr) RectInRegion16 # also named RECTINREGION\n182 stub REQUESTSEM # W2.0 (only ?)\n183 stub CLEARSEM # W2.0 (only ?)\n184 stub STUFFVISIBLE # W2.0 (only ?)\n185 stub STUFFINREGION # W2.0 (only ?)\n186 stub DELETEABOVELINEFONTS # W2.0 (only ?)\n188 stub GetTextExtentEx\n190 pascal -ret16 SetDCHook(word segptr long) SetDCHook16\n191 pascal   GetDCHook(word ptr) GetDCHook16\n192 pascal -ret16 SetHookFlags(word word) SetHookFlags16\n193 pascal -ret16 SetBoundsRect(word ptr word) SetBoundsRect16\n194 pascal -ret16 GetBoundsRect(word ptr word) GetBoundsRect16\n195 pascal -ret16 SelectBitmap(word word) SelectBitmap16\n196 pascal -ret16 SetMetaFileBitsBetter(word) SetMetaFileBitsBetter16\n201 stub DMBITBLT\n202 stub DMCOLORINFO\n206 stub dmEnumDFonts\n207 stub DMENUMOBJ\n208 stub DMOUTPUT\n209 stub DMPIXEL\n210 stub dmRealizeObject\n211 stub DMSTRBLT\n212 stub DMSCANLR\n213 stub BRUTE\n214 stub DMEXTTEXTOUT\n215 stub DMGETCHARWIDTH\n216 stub DMSTRETCHBLT\n217 stub DMDIBBITS\n218 stub DMSTRETCHDIBITS\n219 stub DMSETDIBTODEV\n220 stub DMTRANSPOSE\n230 pascal -ret16 CreatePQ(word) CreatePQ16\n231 pascal -ret16 MinPQ(word) MinPQ16\n232 pascal -ret16 ExtractPQ(word) ExtractPQ16\n233 pascal -ret16 InsertPQ(word word word) InsertPQ16\n234 pascal -ret16 SizePQ(word word) SizePQ16\n235 pascal -ret16 DeletePQ(word) DeletePQ16\n240 pascal -ret16 OpenJob(str str word) OpenJob16\n241 pascal -ret16 WriteSpool(word ptr word) WriteSpool16\n242 pascal -ret16 WriteDialog(word str word) WriteDialog16\n243 pascal -ret16 CloseJob(word) CloseJob16\n244 pascal -ret16 DeleteJob(word word) DeleteJob16\n245 pascal   GetSpoolJob(word ptr) GetSpoolJob16\n246 pascal -ret16 StartSpoolPage(word) StartSpoolPage16\n247 pascal -ret16 EndSpoolPage(word) EndSpoolPage16\n248 stub QueryJob\n250 pascal -ret16 Copy(ptr ptr word) Copy16\n253 stub DeleteSpoolPage\n254 pascal -ret16 SpoolFile(ptr ptr ptr ptr) SpoolFile16\n267 stub StartDocPrintEra\n268 stub StartPagePrinter\n269 stub WritePrinter\n270 stub EndPagePrinter\n271 stub AbortPrinter\n272 stub EndDocPrinter\n274 stub ClosePrinter\n280 stub GetRealDriverInfo\n281 pascal   DrvSetPrinterData(str str long ptr long) DrvSetPrinterData16\n282 pascal   DrvGetPrinterData(str str ptr ptr long ptr) DrvGetPrinterData16\n299 stub ENGINEGETCHARWIDTHEX\n300 pascal   EngineEnumerateFont(str segptr long) EngineEnumerateFont16\n301 pascal -ret16 EngineDeleteFont(ptr) EngineDeleteFont16\n302 pascal   EngineRealizeFont(ptr ptr ptr) EngineRealizeFont16\n303 pascal -ret16 EngineGetCharWidth(ptr word word ptr) EngineGetCharWidth16\n304 pascal -ret16 EngineSetFontContext(ptr word) EngineSetFontContext16\n305 pascal -ret16 EngineGetGlyphBMP(word ptr word word ptr long ptr) EngineGetGlyphBMP16\n306 pascal   EngineMakeFontDir(word ptr ptr) EngineMakeFontDir16\n307 pascal -ret16 GetCharABCWidths(word word word ptr) GetCharABCWidths16\n308 pascal -ret16 GetOutlineTextMetrics(word word ptr) GetOutlineTextMetrics16\n309 pascal   GetGlyphOutline(word word word ptr long ptr ptr) GetGlyphOutline16\n310 pascal -ret16 CreateScalableFontResource(word str str str) CreateScalableFontResource16\n311 pascal   GetFontData(word long long ptr long) GetFontData16\n312 stub ConvertOutLineFontFile\n313 pascal -ret16 GetRasterizerCaps(ptr word) GetRasterizerCaps16\n314 stub EngineExtTextOut\n315 pascal   EngineRealizeFontExt(long long long long) EngineRealizeFontExt16\n316 stub EngineGetCharWidthStr\n317 stub EngineGetGlyphBmpExt\n330 pascal -ret16 EnumFontFamilies(word str segptr long) EnumFontFamilies16\n332 pascal -ret16 GetKerningPairs(word word ptr) GetKerningPairs16\n345 pascal -ret16 GetTextAlign(word) GetTextAlign16\n346 pascal -ret16 SetTextAlign(word word) SetTextAlign16\n347 stub MFDRAWTEXT # W2.0 (only ?)\n348 pascal -ret16 Chord(word s_word s_word s_word s_word s_word s_word s_word s_word) Chord16\n349 pascal   SetMapperFlags(word long) SetMapperFlags16\n350 pascal -ret16 GetCharWidth(word word word ptr) GetCharWidth16\n351 pascal -ret16 ExtTextOut(word s_word s_word word ptr str word ptr) ExtTextOut16\n352 pascal -ret16 GetPhysicalFontHandle(word) GetPhysicalFontHandle16\n353 pascal GetAspectRatioFilter(word) GetAspectRatioFilter16\n354 pascal -ret16 ShrinkGDIHeap() ShrinkGdiHeap16\n355 stub FTrapping0\n360 pascal -ret16 CreatePalette(ptr) CreatePalette16\n361 pascal -ret16 GDISelectPalette(word word word) GDISelectPalette16\n362 pascal -ret16 GDIRealizePalette(word) GDIRealizePalette16\n363 pascal -ret16 GetPaletteEntries(word word word ptr) GetPaletteEntries16\n364 pascal -ret16 SetPaletteEntries(word word word ptr) SetPaletteEntries16\n365 pascal -ret16 RealizeDefaultPalette(word) RealizeDefaultPalette16\n366 pascal -ret16 UpdateColors(word) UpdateColors16\n367 pascal -ret16 AnimatePalette(word word word ptr) AnimatePalette16\n368 pascal -ret16 ResizePalette(word word) ResizePalette16\n370 pascal -ret16 GetNearestPaletteIndex(word long) GetNearestPaletteIndex16\n372 pascal -ret16 ExtFloodFill(word s_word s_word long word) ExtFloodFill16\n373 pascal -ret16 SetSystemPaletteUse(word word) SetSystemPaletteUse16\n374 pascal -ret16 GetSystemPaletteUse(word) GetSystemPaletteUse16\n375 pascal -ret16 GetSystemPaletteEntries(word word word ptr) GetSystemPaletteEntries16\n376 pascal -ret16 ResetDC(word ptr) ResetDC16\n377 pascal -ret16 StartDoc(word ptr) StartDoc16\n378 pascal -ret16 EndDoc(word) EndDoc16\n379 pascal -ret16 StartPage(word) StartPage16\n380 pascal -ret16 EndPage(word) EndPage16\n381 pascal -ret16 SetAbortProc(word segptr) SetAbortProc16\n382 pascal -ret16 AbortDoc(word) AbortDoc16\n400 pascal -ret16 FastWindowFrame(word ptr s_word s_word long) FastWindowFrame16\n401 pascal -ret16 GdiMoveBitmap(word) GdiMoveBitmap16\n402 stub GDIGETBITSGLOBAL # W2.0 (only ?)\n403 pascal -ret16 GdiInit2(word word) GdiInit216\n404 stub GetTTGlyphIndexMap\n405 pascal -ret16 FinalGdiInit(word) FinalGdiInit16\n406 stub CREATEREALBITMAPINDIRECT # W2.0 (only ?)\n407 pascal -ret16 CreateUserBitmap(word word word word ptr) CreateUserBitmap16\n408 stub CREATEREALBITMAP # W2.0 (only ?)\n409 pascal -ret16 CreateUserDiscardableBitmap(word word word) CreateUserDiscardableBitmap16\n410 pascal -ret16 IsValidMetaFile (word) IsValidMetaFile16\n411 pascal -ret16 GetCurLogFont(word) GetCurLogFont16\n412 pascal -ret16 IsDCCurrentPalette(word) IsDCCurrentPalette16\n439 pascal -ret16 StretchDIBits (word s_word s_word s_word s_word s_word s_word s_word s_word ptr ptr word long) StretchDIBits16\n440 pascal -ret16 SetDIBits(word word word word ptr ptr word) SetDIBits16\n441 pascal -ret16 GetDIBits(word word word word ptr ptr word) GetDIBits16\n442 pascal -ret16 CreateDIBitmap(word ptr long ptr ptr word) CreateDIBitmap16\n443 pascal -ret16 SetDIBitsToDevice(word s_word s_word s_word s_word s_word s_word word word ptr ptr word) SetDIBitsToDevice16\n444 pascal -ret16 CreateRoundRectRgn(s_word s_word s_word s_word s_word s_word) CreateRoundRectRgn16\n445 pascal -ret16 CreateDIBPatternBrush(word word) CreateDIBPatternBrush16\n449 stub DEVICECOLORMATCH\n450 pascal -ret16 PolyPolygon(word ptr ptr word) PolyPolygon16\n451 pascal -ret16 CreatePolyPolygonRgn(ptr ptr word word) CreatePolyPolygonRgn16\n452 pascal   GdiSeeGdiDo(word word word word) GdiSeeGdiDo16\n460 pascal -ret16 GdiTaskTermination(word) GdiTaskTermination16\n461 pascal -ret16 SetObjectOwner(word word) SetObjectOwner16\n462 pascal -ret16 IsGDIObject(word) IsGDIObject16\n463 pascal -ret16 MakeObjectPrivate(word word) MakeObjectPrivate16\n464 stub FIXUPBOGUSPUBLISHERMETAFILE\n465 pascal -ret16 RectVisible(word ptr) RectVisible16 # RECTVISIBLE_EHH ??\n466 pascal -ret16 RectInRegion(word ptr) RectInRegion16 # RECTINREGION_EHH ??\n467 pascal -ret16 UnicodeToAnsi(segptr segptr) UnicodeToAnsi16\n468 pascal -ret16 GetBitmapDimensionEx(word ptr) GetBitmapDimensionEx16\n469 pascal -ret16 GetBrushOrgEx(word ptr) GetBrushOrgEx16\n470 pascal -ret16 GetCurrentPositionEx(word ptr) GetCurrentPositionEx16\n471 pascal -ret16 GetTextExtentPoint(word ptr s_word ptr) GetTextExtentPoint16\n472 pascal -ret16 GetViewportExtEx(word ptr) GetViewportExtEx16\n473 pascal -ret16 GetViewportOrgEx(word ptr) GetViewportOrgEx16\n474 pascal -ret16 GetWindowExtEx(word ptr) GetWindowExtEx16\n475 pascal -ret16 GetWindowOrgEx(word ptr) GetWindowOrgEx16\n476 pascal -ret16 OffsetViewportOrgEx(word s_word s_word ptr) OffsetViewportOrgEx16\n477 pascal -ret16 OffsetWindowOrgEx(word s_word s_word ptr) OffsetWindowOrgEx16\n478 pascal -ret16 SetBitmapDimensionEx(word s_word s_word ptr) SetBitmapDimensionEx16\n479 pascal -ret16 SetViewportExtEx(word s_word s_word ptr) SetViewportExtEx16\n480 pascal -ret16 SetViewportOrgEx(word s_word s_word ptr) SetViewportOrgEx16\n481 pascal -ret16 SetWindowExtEx(word s_word s_word ptr) SetWindowExtEx16\n482 pascal -ret16 SetWindowOrgEx(word s_word s_word ptr) SetWindowOrgEx16\n483 pascal -ret16 MoveToEx(word s_word s_word ptr) MoveToEx16\n484 pascal -ret16 ScaleViewportExtEx(word s_word s_word s_word s_word ptr) ScaleViewportExtEx16\n485 pascal -ret16 ScaleWindowExtEx(word s_word s_word s_word s_word ptr) ScaleWindowExtEx16\n486 pascal -ret16 GetAspectRatioFilterEx(word ptr) GetAspectRatioFilterEx16\n488 pascal -ret16 GetFontAssocStatus(word) GetFontAssocStatus16\n489 pascal -ret16 CreateDIBSection(word ptr word ptr long long) CreateDIBSection16\n490 stub CloseEnhMetafile\n#490 stub POLYLINEWOW # conflicts with CloseEnhMetaFile !!\n491 stub CopyEnhMetafile\n492 stub CreateEnhMetafile\n493 stub DeleteEnhMetafile\n495 stub GDIComment\n496 stub GetEnhMetafile\n497 stub GetEnhMetafileBits\n498 stub GetEnhMetafileDescription\n499 stub GetEnhMetafileHeader\n501 stub GetEnhMetafilePaletteEntries\n502 pascal -ret16 PolyBezier(word ptr word) PolyBezier16\n503 pascal -ret16 PolyBezierTo(word ptr word) PolyBezierTo16\n504 stub PlayEnhMetafileRecord\n505 stub SetEnhMetafileBits\n506 stub SetMetaRgn\n508 pascal -ret16 ExtSelectClipRgn(word word word) ExtSelectClipRgn16\n511 pascal -ret16 AbortPath(word) AbortPath16\n512 pascal -ret16 BeginPath(word) BeginPath16\n513 pascal -ret16 CloseFigure(word) CloseFigure16\n514 pascal -ret16 EndPath(word) EndPath16\n515 pascal -ret16 FillPath(word) FillPath16\n516 pascal -ret16 FlattenPath(word) FlattenPath16\n517 pascal -ret16 GetPath(word ptr ptr word) GetPath16\n518 pascal -ret16 PathToRegion(word) PathToRegion16\n519 pascal -ret16 SelectClipPath(word word) SelectClipPath16\n520 pascal -ret16 StrokeAndFillPath(word) StrokeAndFillPath16\n521 pascal -ret16 StrokePath(word) StrokePath16\n522 pascal -ret16 WidenPath(word) WidenPath16\n523 stub ExtCreatePen\n524 pascal -ret16 GetArcDirection(word) GetArcDirection16\n525 pascal -ret16 SetArcDirection(word word) SetArcDirection16\n526 stub GetMiterLimit\n527 stub SetMiterLimit\n528 stub GDIParametersInfo\n529 pascal -ret16 CreateHalftonePalette(word) CreateHalftonePalette16\n# Hebrew version API's\n530 pascal -ret16 RawTextOut(word s_word s_word str word) RawTextOut16\n531 pascal -ret16 RawExtTextOut(word s_word s_word word ptr str word ptr) RawExtTextOut16\n532 pascal -ret16 RawGetTextExtent(word str word) RawGetTextExtent16\n533 pascal -ret16 RawGetTextExtentEx() RawGetTextExtentEx16\n536 pascal -ret16 BiDiLayout() BiDiLayout16\n537 pascal -ret16 BiDiCreateTabString() BiDiCreateTabString16\n538 pascal -ret16 BiDiCreateString() BiDiCreateString16\n539 pascal -ret16 BiDiStringOut() BiDiStringOut16\n540 pascal -ret16 BiDiGlyphOut(word word word word str word word word) BiDiGlyphOut16\n541 pascal -ret16 BiDiJustifyString() BiDiJustifyString16\n542 pascal -ret16 BiDiSetStringTabs() BiDiSetStringTabs16\n543 pascal -ret16 BiDiGetStringExtent() BiDiGetStringExtent16\n544 pascal -ret16 BiDiGetNextGlyph() BiDiGetNextGlyph16\n545 pascal -ret16 BiDiGetPrevGlyph() BiDiGetPrevGlyph16\n546 pascal -ret16 BiDiIsStringRTL() BiDiIsStringRTL16\n547 pascal -ret16 BiDiGlyphLength() BiDiGlyphLength16\n548 pascal -ret16 BiDiCaretStringToPel() BiDiCaretStringTopel16\n549 pascal -ret16 BiDiCaretPelToString() BiDiCaretPelToString16\n550 pascal -ret16 BiDiStringToGlyph() BiDiStringToGlyph16\n551 pascal -ret16 BiDiGlyphToString() BiDiGlyphToString16\n552 pascal -ret16 BiDiPelToGlyph() BiDiPelToGlyph16\n553 pascal -ret16 BiDiGlyphToPel() BiDiGlyphToPel16\n554 pascal -ret16 BiDiBounds() BiDiBounds16\n555 pascal -ret16 BiDiDeleteString(word) BiDiDeleteString16\n556 pascal -ret16 BiDiSetDefaults() BiDiSetDefaults16\n558 pascal -ret16 BiDiGetDefaults() BiDiGetDefaults16\n559 pascal -ret16 BiDiCalcString(word word ptr word word word word word) BiDiCalcString16\n560 pascal -ret16 BiDiShape(word word word word word word word word word word word word word word word word word word word word) BiDiShape16\n561 pascal -ret16 BiDiFontComplement() BiDiFontComplement16\n563 pascal -ret16 BiDiCalcTabString() BiDiCalcTabString16\n564 pascal -ret16 BiDiSetKashida() BiDiSetKashida16\n565 pascal -ret16 BiDiKExtTextOut() BiDiKExtTextOut16\n566 pascal -ret16 BiDiShapeEx() BiDiShapeEx16\n569 pascal -ret16 BiDiCreateStringEx(word word word ptr word word word word word) BiDiCreateStringEx16\n570 pascal -ret16 GetUnicodeMap() GetUnicodeMap16\n571 pascal -ret16 GetTextExtentRtoL() GetTextExtentRtoL16\n572 pascal -ret16 GetHDCCharSet(word) GetHDCCharSet16\n573 pascal -ret16 BiDiLayoutEx(ptr word word word ptr word word word word ptr ptr word word word) BiDiLayoutEx16\n574 pascal -ret16 BiDiCreateTabStringEx() BiDiCreateTabStringEx16\n575 pascal -ret16 BiDiCalcTabStringEx() BiDiCalcTabStringEx16\n576 pascal -ret16 BiDiCalcStringEx() BiDiCalcStringEx16\n588 pascal -ret16 SetTextCodePage(word word) SetTextCodePage16\n589 pascal -ret16 GetTextCodePage() GetTextCodePage16\n602 pascal -ret16 SetDIBColorTable(word word word ptr) SetDIBColorTable16\n603 pascal -ret16 GetDIBColorTable(word word word ptr) GetDIBColorTable16\n604 pascal -ret16 SetSolidBrush(word long) SetSolidBrush16\n605 pascal -ret16 SysDeleteObject(word) DeleteObject16    # ???\n606 pascal -ret16 SetMagicColors(word long word) SetMagicColors16\n607 pascal   GetRegionData(word long ptr) GetRegionData16\n608 stub ExtCreateRegion\n609 pascal -ret16 GdiFreeResources(long) GdiFreeResources16\n610 pascal -ret16 GdiSignalProc32(long long long word) GdiSignalProc\n611 stub GetRandomRgn\n612 pascal -ret16 GetTextCharset(word) GetTextCharset16\n613 pascal -ret16 EnumFontFamiliesEx(word ptr segptr long long) EnumFontFamiliesEx16\n614 stub AddLpkToGDI\n615 stub GetCharacterPlacement\n616 pascal   GetFontLanguageInfo(word) GetFontLanguageInfo16\n650 stub BuildInverseTableDIB\n701 stub GDITHKCONNECTIONDATALS\n702 stub FT_GDIFTHKTHKCONNECTIONDATA\n703 stub FDTHKCONNECTIONDATASL\n704 stub ICMTHKCONNECTIONDATASL\n820 stub ICMCreateTransform\n821 stub ICMDeleteTransform\n822 stub ICMTranslateRGB\n823 stub ICMTranslateRGBs\n824 stub ICMCheckColorsInGamut\n1000 pascal -ret16 SetLayout(word long) SetLayout16\n1001 stub GetLayout\n\n5000 pascal DllEntryPoint(long word word word long word) DllEntryPoint\n"
  },
  {
    "path": "gdi/gdi.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{0EBCFB5B-3092-4E06-A007-CA50B1DA3298}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>gdi</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.exe16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <TargetExt>.exe16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;GDI_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)krnl386.lib;$(OutDir)user.lib;$(OutDir)libwine.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;advapi32.lib;winspool.lib</AdditionalDependencies>\n      <ModuleDefinitionFile>gdi.def</ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;GDI_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ModuleDefinitionFile>gdi.def</ModuleDefinitionFile>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)krnl386.lib;$(OutDir)user.lib;$(OutDir)libwine.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;advapi32.lib;winspool.lib</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"bidi.c\" />\n    <ClCompile Include=\"env.c\" />\n    <ClCompile Include=\"gdi.c\" />\n    <ClCompile Include=\"metafile.c\" />\n    <ClCompile Include=\"printdrv.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"gdi.exe16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"gdi.def\" />\n    <CustomBuild Include=\"gdi.exe16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" --heap 65520 GDI &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" --heap 65520 GDI &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>\n"
  },
  {
    "path": "gdi/gdi.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"ソース ファイル\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"ヘッダー ファイル\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"リソース ファイル\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"gdi.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"metafile.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"printdrv.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"bidi.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"env.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"gdi.exe16.obj\">\n      <Filter>ソース ファイル</Filter>\n    </Object>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"gdi.def\">\n      <Filter>ソース ファイル</Filter>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"gdi.exe16.spec\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "gdi/metafile.c",
    "content": "/*\n * Metafile functions\n *\n * Copyright  David W. Metcalfe, 1994\n * Copyright  Niels de Carpentier, 1996\n * Copyright  Albrecht Kleine, 1996\n * Copyright  Huw Davies, 1996\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <string.h>\n#include <fcntl.h>\n\n#include \"wine/winbase16.h\"\n#include \"wine/wingdi16.h\"\n#include \"wownt32.h\"\n#include \"winreg.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(metafile);\n\n#define METAFILE_MEMORY 1\n#define METAFILE_DISK   2\n#define MFHEADERSIZE (sizeof(METAHEADER))\n#define MFVERSION 0x300\n\n/******************************************************************\n *         MF_GetMetaHeader16\n *\n * Returns ptr to METAHEADER associated with HMETAFILE16\n * Should be followed by call to MF_ReleaseMetaHeader16\n */\nstatic METAHEADER *MF_GetMetaHeader16( HMETAFILE16 hmf )\n{\n    return GlobalLock16(hmf);\n}\n\n/******************************************************************\n *         MF_ReleaseMetaHeader16\n *\n * Releases METAHEADER associated with HMETAFILE16\n */\nstatic BOOL16 MF_ReleaseMetaHeader16( HMETAFILE16 hmf )\n{\n    return GlobalUnlock16( hmf );\n}\n\n/******************************************************************\n *         create_metafile16\n *\n * Create a 16-bit metafile from a 32-bit one. The 32-bit one is deleted.\n */\nstatic HMETAFILE16 create_metafile16( HMETAFILE hmf )\n{\n    UINT size;\n    HMETAFILE16 hmf16;\n\n    if (!hmf) return 0;\n    size = GetMetaFileBitsEx( hmf, 0, NULL );\n    hmf16 = GlobalAlloc16( GMEM_MOVEABLE, size );\n    if (hmf16)\n    {\n        void *buffer = GlobalLock16( hmf16 );\n        GetMetaFileBitsEx( hmf, size, buffer );\n        GlobalUnlock16( hmf16 );\n    }\n    DeleteMetaFile( hmf );\n    return hmf16;\n}\n\n/******************************************************************\n *         create_metafile32\n *\n * Create a 32-bit metafile from a 16-bit one.\n */\nstatic HMETAFILE create_metafile32( HMETAFILE16 hmf16 )\n{\n    METAHEADER *mh = MF_GetMetaHeader16( hmf16 );\n    if (!mh) return 0;\n    return SetMetaFileBitsEx( /*mh->mtSize * 2*/GlobalSize16(hmf16), (BYTE *)mh );\n}\n\n/**********************************************************************\n *\t     CreateMetaFile     (GDI.125)\n */\nHDC16 WINAPI CreateMetaFile16( LPCSTR filename )\n{\n    return HDC_16( CreateMetaFileA( filename ) );\n}\n\n/******************************************************************\n *\t     CloseMetaFile     (GDI.126)\n */\nHMETAFILE16 WINAPI CloseMetaFile16(HDC16 hdc)\n{\n    return create_metafile16( CloseMetaFile( HDC_32(hdc) ));\n}\n\n/******************************************************************\n *\t     DeleteMetaFile   (GDI.127)\n */\nBOOL16 WINAPI DeleteMetaFile16(  HMETAFILE16 hmf )\n{\n    return !GlobalFree16( hmf );\n}\n\n/******************************************************************\n *         GetMetaFile   (GDI.124)\n */\nHMETAFILE16 WINAPI GetMetaFile16( LPCSTR lpFilename )\n{\n    return create_metafile16( GetMetaFileA( lpFilename ));\n}\n\n/******************************************************************\n *         CopyMetaFile   (GDI.151)\n */\nHMETAFILE16 WINAPI CopyMetaFile16( HMETAFILE16 hSrcMetaFile, LPCSTR lpFilename)\n{\n    HMETAFILE hmf = create_metafile32( hSrcMetaFile );\n    HMETAFILE hmf2 = CopyMetaFileA( hmf, lpFilename );\n    DeleteMetaFile( hmf );\n    return create_metafile16( hmf2 );\n}\n\n/******************************************************************\n *         IsValidMetaFile   (GDI.410)\n *\n *  Attempts to check if a given metafile is correctly formatted.\n *  Currently, the only things verified are several properties of the\n *  header.\n *\n * RETURNS\n *  TRUE if hmf passes some tests for being a valid metafile, FALSE otherwise.\n *\n * BUGS\n *  This is not exactly what windows does, see _Undocumented_Windows_\n *  for details.\n */\nBOOL16 WINAPI IsValidMetaFile16(HMETAFILE16 hmf)\n{\n    BOOL16 res=FALSE;\n    METAHEADER *mh = MF_GetMetaHeader16(hmf);\n    if (mh) {\n        if (mh->mtType == METAFILE_MEMORY || mh->mtType == METAFILE_DISK)\n\t    if (mh->mtHeaderSize == MFHEADERSIZE/sizeof(INT16))\n\t        if (mh->mtVersion == MFVERSION)\n\t\t    res=TRUE;\n\tMF_ReleaseMetaHeader16(hmf);\n    }\n    TRACE(\"IsValidMetaFile %x => %d\\n\",hmf,res);\n    return res;\n}\n\n/******************************************************************\n *         PlayMetaFile   (GDI.123)\n *\n */\nBOOL16 WINAPI PlayMetaFile16( HDC16 hdc, HMETAFILE16 hmf16 )\n{\n    HMETAFILE hmf = create_metafile32( hmf16 );\n    BOOL ret = PlayMetaFile( HDC_32(hdc), hmf );\n    DeleteMetaFile( hmf );\n    return ret;\n}\n\n\n#define META_EOF 0x0000\ntypedef struct\n{\n    LPARAM lpData;\n    SEGPTR spht;\n    WORD seg;\n    WORD offset;\n    SEGPTR record;\n    HMETAFILE hmf32;\n    SEGPTR lpEnumFunc;\n    WORD max;\n} enum_metafile_data;\nint CALLBACK EnumMetaFileCallback(HDC hdc, HANDLETABLE *lpht, METARECORD *lpMR, int nObj, LPARAM param)\n{\n    enum_metafile_data *d = (enum_metafile_data*)param;\n    HANDLETABLE16 *lpht16;\n    int i;\n    WORD args[8];\n    DWORD ret;\n    lpht16 = MapSL(d->spht);\n    for (i = 0; i < nObj; i++)\n    {\n        lpht16->objectHandle[i] = HDC_16(lpht->objectHandle[i]);\n    }\n    if (lpMR->rdSize > d->max)\n    {\n        ERR(\"\\n\");\n    }\n    DWORD siz = lpMR->rdSize * 2;\n    memcpy(MapSL(d->record), lpMR, siz);\n\n    args[7] = HDC_16(hdc);\n    args[6] = SELECTOROF(d->spht);\n    args[5] = OFFSETOF(d->spht);\n    args[4] = SELECTOROF(d->record);\n    args[3] = OFFSETOF(d->record);\n    args[2] = nObj;\n    args[1] = HIWORD(d->lpData);\n    args[0] = LOWORD(d->lpData);\n    WOWCallback16Ex((DWORD)d->lpEnumFunc, WCB16_PASCAL, sizeof(args), args, &ret);\n    memcpy(lpMR, MapSL(d->record), siz);\n    lpht16 = MapSL(d->spht);\n    for (i = 0; i < nObj; i++)\n    {\n        lpht->objectHandle[i] = HDC_32(lpht16->objectHandle[i]);\n    }\n    return LOWORD(ret);\n}\n\n/******************************************************************\n *            EnumMetaFile   (GDI.175)\n *\n */\nBOOL16 WINAPI EnumMetaFile16( HDC16 hdc16, HMETAFILE16 hmf,\n\t\t\t      MFENUMPROC16 lpEnumFunc, LPARAM lpData )\n{\n#if 1\n    METAHEADER *mh = MF_GetMetaHeader16(hmf);\n    HMETAFILE hmf32 = create_metafile32(hmf);\n    enum_metafile_data param;\n    BOOL r;\n    HGLOBAL16 hHT;\n    param.lpData = lpData;\n    hHT = GlobalAlloc16(GMEM_MOVEABLE | GMEM_ZEROINIT,\n        FIELD_OFFSET(HANDLETABLE16, objectHandle[mh->mtNoObjects]));\n    HGLOBAL16 record = GlobalAlloc16(GMEM_MOVEABLE | GMEM_ZEROINIT, mh->mtMaxRecord * 2);\n    param.max = mh->mtMaxRecord;\n    param.spht = WOWGlobalLock16(hHT);\n    param.lpEnumFunc = lpEnumFunc;\n    param.seg = hmf | 7;\n    param.hmf32 = hmf32;\n    param.record = WOWGlobalLock16(record);\n    r = EnumMetaFile(HDC_32(hdc16), hmf32, EnumMetaFileCallback, &param);\n    DeleteMetaFile(hmf32);\n    GlobalFree16(hHT);\n    GlobalFree16(record);\n    /* twice */\n    MF_ReleaseMetaHeader16(hmf);\n    MF_ReleaseMetaHeader16(hmf);\n    return r;\n#else\n    METAHEADER *mh = MF_GetMetaHeader16(hmf);\n    METARECORD *mr;\n    HANDLETABLE16 *ht;\n    HDC hdc = HDC_32(hdc16);\n    HGLOBAL16 hHT;\n    SEGPTR spht;\n    unsigned int offset = 0;\n    WORD i, seg;\n    HPEN hPen;\n    HBRUSH hBrush;\n    HFONT hFont;\n    WORD args[8];\n    BOOL16 result = TRUE;\n\n    TRACE(\"(%p, %04x, %p, %08lx)\\n\", hdc, hmf, lpEnumFunc, lpData);\n\n    if(!mh) return FALSE;\n\n    /* save the current pen, brush and font */\n    hPen = GetCurrentObject(hdc, OBJ_PEN);\n    hBrush = GetCurrentObject(hdc, OBJ_BRUSH);\n    hFont = GetCurrentObject(hdc, OBJ_FONT);\n\n    /* create the handle table */\n\n    hHT = GlobalAlloc16(GMEM_MOVEABLE | GMEM_ZEROINIT,\n            FIELD_OFFSET(HANDLETABLE16, objectHandle[mh->mtNoObjects]));\n    spht = WOWGlobalLock16(hHT);\n\n    seg = hmf | 7;\n    offset = mh->mtHeaderSize * 2;\n\n    /* loop through metafile records */\n\n    args[7] = hdc16;\n    args[6] = SELECTOROF(spht);\n    args[5] = OFFSETOF(spht);\n    args[4] = seg + (HIWORD(offset) << __AHSHIFT);\n    args[3] = LOWORD(offset);\n    args[2] = mh->mtNoObjects;\n    args[1] = HIWORD(lpData);\n    args[0] = LOWORD(lpData);\n\n    while (offset < (mh->mtSize * 2))\n    {\n        DWORD ret;\n\n\tmr = (METARECORD *)((char *)mh + offset);\n\n    if (mr->rdFunction == META_EOF) {\n        TRACE(\"Got META_EOF so stopping\\n\");\n        break;\n    }\n        WOWCallback16Ex( (DWORD)lpEnumFunc, WCB16_PASCAL, sizeof(args), args, &ret );\n        if (!LOWORD(ret))\n\t{\n\t    result = FALSE;\n\t    break;\n\t}\n\n\toffset += (mr->rdSize * 2);\n        args[4] = seg + (HIWORD(offset) << __AHSHIFT);\n        args[3] = LOWORD(offset);\n    }\n\n    SelectObject(hdc, hBrush);\n    SelectObject(hdc, hPen);\n    SelectObject(hdc, hFont);\n\n    ht = GlobalLock16(hHT);\n\n    /* free objects in handle table */\n    for(i = 0; i < mh->mtNoObjects; i++)\n      if(*(ht->objectHandle + i) != 0)\n        DeleteObject( (HGDIOBJ)(ULONG_PTR)(*(ht->objectHandle + i) ));\n\n    /* free handle table */\n    GlobalFree16(hHT);\n    MF_ReleaseMetaHeader16(hmf);\n    return result;\n#endif\n}\n\n/******************************************************************\n *         GetMetaFileBits   (GDI.159)\n *\n * Trade in a metafile object handle for a handle to the metafile memory.\n *\n * PARAMS\n *  hmf [I] metafile handle\n */\n\nHGLOBAL16 WINAPI GetMetaFileBits16( HMETAFILE16 hmf )\n{\n    TRACE(\"hMem out: %04x\\n\", hmf);\n    return hmf;\n}\n\n/******************************************************************\n *         SetMetaFileBits   (GDI.160)\n *\n * Trade in a metafile memory handle for a handle to a metafile object.\n * The memory region should hold a proper metafile, otherwise\n * problems will occur when it is used. Validity of the memory is not\n * checked. The function is essentially just the identity function.\n *\n * PARAMS\n *  hMem [I] handle to a memory region holding a metafile\n *\n * RETURNS\n *  Handle to a metafile on success, NULL on failure..\n */\nHMETAFILE16 WINAPI SetMetaFileBits16( HGLOBAL16 hMem )\n{\n    TRACE(\"hmf out: %04x\\n\", hMem);\n\n    return hMem;\n}\n\n/******************************************************************\n *         SetMetaFileBitsBetter   (GDI.196)\n *\n * Trade in a metafile memory handle for a handle to a metafile object,\n * making a cursory check (using IsValidMetaFile()) that the memory\n * handle points to a valid metafile.\n *\n * RETURNS\n *  Handle to a metafile on success, NULL on failure..\n */\nHMETAFILE16 WINAPI SetMetaFileBitsBetter16( HMETAFILE16 hMeta )\n{\n    if( IsValidMetaFile16( hMeta ) )\n        return GlobalReAlloc16( hMeta, 0, GMEM_SHARE | GMEM_NODISCARD | GMEM_MODIFY);\n    return 0;\n}\n"
  },
  {
    "path": "gdi/printdrv.c",
    "content": "/*\n * Implementation of some printer driver bits\n *\n * Copyright 1996 John Harvey\n * Copyright 1998 Huw Davies\n * Copyright 1998 Andreas Mohr\n * Copyright 1999 Klaas van Gend\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdarg.h>\n#include <stdio.h>\n#include <signal.h>\n#include <stdlib.h>\n#include <string.h>\n#include <ctype.h>\n#include <errno.h>\n#ifdef HAVE_IO_H\n# include <io.h>\n#endif\n#ifdef HAVE_SYS_WAIT_H\n# include <sys/wait.h>\n#endif\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#include <fcntl.h>\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winuser.h\"\n#include \"wine/winbase16.h\"\n#include \"wine/wingdi16.h\"\n#include \"winspool.h\"\n#include \"winerror.h\"\n#include \"winreg.h\"\n#include \"wownt32.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(print);\n\nstatic const char PrinterModel[]      = \"Printer Model\";\nstatic const char DefaultDevMode[]    = \"Default DevMode\";\nstatic const char PrinterDriverData[] = \"PrinterDriverData\";\nstatic const char Printers[]          = \"System\\\\CurrentControlSet\\\\Control\\\\Print\\\\Printers\\\\\";\n\n/****************** misc. printer related functions */\n\n/*\n * The following function should implement a queuing system\n */\nstruct hpq\n{\n    struct hpq \t*next;\n    int\t\t tag;\n    int\t\t key;\n};\n\nstatic struct hpq *hpqueue;\n\n/**********************************************************************\n *           CreatePQ   (GDI.230)\n *\n */\nHPQ16 WINAPI CreatePQ16(INT16 size)\n{\n#if 0\n    HGLOBAL16 hpq = 0;\n    WORD tmp_size;\n    LPWORD pPQ;\n\n    tmp_size = size << 2;\n    if (!(hpq = GlobalAlloc16(GMEM_SHARE|GMEM_MOVEABLE, tmp_size + 8)))\n       return 0xffff;\n    pPQ = GlobalLock16(hpq);\n    *pPQ++ = 0;\n    *pPQ++ = tmp_size;\n    *pPQ++ = 0;\n    *pPQ++ = 0;\n    GlobalUnlock16(hpq);\n\n    return (HPQ16)hpq;\n#else\n    FIXME(\"(%d): stub\\n\",size);\n    return 1;\n#endif\n}\n\n/**********************************************************************\n *           DeletePQ   (GDI.235)\n *\n */\nINT16 WINAPI DeletePQ16(HPQ16 hPQ)\n{\n    return GlobalFree16(hPQ);\n}\n\n/**********************************************************************\n *           ExtractPQ   (GDI.232)\n *\n */\nINT16 WINAPI ExtractPQ16(HPQ16 hPQ)\n{\n    struct hpq *queue, *prev, *current, *currentPrev;\n    int key = 0, tag = -1;\n    prev = NULL;\n    queue = current = hpqueue;\n    if (current)\n        key = current->key;\n\n    while (current)\n    {\n        currentPrev = current;\n        current = current->next;\n        if (current)\n        {\n            if (current->key < key)\n            {\n                queue = current;\n                prev = currentPrev;\n            }\n        }\n    }\n    if (queue)\n    {\n        tag = queue->tag;\n\n        if (prev)\n            prev->next = queue->next;\n        else\n            hpqueue = queue->next;\n        HeapFree(GetProcessHeap(), 0, queue);\n    }\n\n    TRACE(\"%x got tag %d key %d\\n\", hPQ, tag, key);\n\n    return tag;\n}\n\n/**********************************************************************\n *           InsertPQ   (GDI.233)\n *\n */\nINT16 WINAPI InsertPQ16(HPQ16 hPQ, INT16 tag, INT16 key)\n{\n    struct hpq *queueItem = HeapAlloc(GetProcessHeap(), 0, sizeof(struct hpq));\n    if(queueItem == NULL) {\n        ERR(\"Memory exhausted!\\n\");\n        return FALSE;\n    }\n    queueItem->next = hpqueue;\n    hpqueue = queueItem;\n    queueItem->key = key;\n    queueItem->tag = tag;\n\n    FIXME(\"(%x %d %d): stub???\\n\", hPQ, tag, key);\n    return TRUE;\n}\n\n/**********************************************************************\n *           MinPQ   (GDI.231)\n *\n */\nINT16 WINAPI MinPQ16(HPQ16 hPQ)\n{\n    FIXME(\"(%x): stub\\n\", hPQ);\n    return 0;\n}\n\n/**********************************************************************\n *           SizePQ   (GDI.234)\n *\n */\nINT16 WINAPI SizePQ16(HPQ16 hPQ, INT16 sizechange)\n{\n    FIXME(\"(%x %d): stub\\n\", hPQ, sizechange);\n    return -1;\n}\n\n\n\n/*\n * The following functions implement part of the spooling process to\n * print manager.  I would like to see wine have a version of print managers\n * that used LPR/LPD.  For simplicity print jobs will be sent to a file for\n * now.\n */\n#ifdef HAVE_UNISTD_H\ntypedef struct PRINTJOB\n{\n    char\t*pszOutput;\n    char \t*pszTitle;\n    HDC16  \thDC;\n    HANDLE16 \thHandle;\n    int\t\tnIndex;\n    int\t\tfd;\n    pid_t       pid;\n} PRINTJOB, *PPRINTJOB;\n#define MAX_PRINT_JOBS 1\n#define SP_OK 1\n\nstatic PPRINTJOB gPrintJobsTable[MAX_PRINT_JOBS];\n\n\nstatic PPRINTJOB FindPrintJobFromHandle(HANDLE16 hHandle)\n{\n    return gPrintJobsTable[0];\n}\n#endif\n#ifdef HAVE_UNISTD_H\n\nstatic int CreateSpoolFile(LPCSTR pszOutput, pid_t *out_pid)\n{\n    int fd=-1;\n    char psCmd[1024];\n    const char *psCmdP = psCmd;\n    HKEY hkey;\n\n    /* TTD convert the 'output device' into a spool file name */\n\n    if (pszOutput == NULL || *pszOutput == '\\0' || out_pid == NULL)\n      return -1;\n\n    *out_pid = -1;\n\n    psCmd[0] = 0;\n    /* @@ Wine registry key: HKCU\\Software\\Wine\\Printing\\Spooler */\n    if(!RegOpenKeyA(HKEY_CURRENT_USER, \"Software\\\\Wine\\\\Printing\\\\Spooler\", &hkey))\n    {\n        DWORD type, count = sizeof(psCmd);\n        RegQueryValueExA(hkey, pszOutput, 0, &type, (LPBYTE)psCmd, &count);\n        RegCloseKey(hkey);\n    }\n    if (!psCmd[0] && !strncmp(\"LPR:\",pszOutput,4))\n        sprintf(psCmd,\"|lpr -P'%s'\",pszOutput+4);\n\n    TRACE(\"Got printerSpoolCommand '%s' for output device '%s'\\n\",\n\t  psCmd, pszOutput);\n    if (!*psCmd)\n        psCmdP = pszOutput;\n    else\n    {\n        while (*psCmdP && isspace(*psCmdP))\n        {\n            psCmdP++;\n        }\n        if (!*psCmdP)\n            return -1;\n    }\n    TRACE(\"command: '%s'\\n\", psCmdP);\n#ifdef HAVE_FORK\n    if (*psCmdP == '|')\n    {\n        int fds[2];\n        if (pipe(fds)) {\n\t    ERR(\"pipe() failed!\\n\");\n            return -1;\n\t}\n        if ((*out_pid = fork()) == 0)\n        {\n            psCmdP++;\n\n            TRACE(\"In child need to exec %s\\n\",psCmdP);\n            close(0);\n            dup2(fds[0],0);\n            close (fds[1]);\n\n            /* reset signals that we previously set to SIG_IGN */\n            signal( SIGPIPE, SIG_DFL );\n\n            execl(\"/bin/sh\", \"/bin/sh\", \"-c\", psCmdP, NULL);\n            _exit(1);\n\n        }\n        close (fds[0]);\n        fd = fds[1];\n        TRACE(\"Need to execute a cmnd and pipe the output to it\\n\");\n    }\n    else\n#endif\n    {\n        char *buffer;\n        WCHAR psCmdPW[MAX_PATH];\n\n        TRACE(\"Just assume it's a file\\n\");\n\n        /**\n         * The file name can be dos based, we have to find its\n         * corresponding Unix file name.\n         */\n        MultiByteToWideChar(CP_ACP, 0, psCmdP, -1, psCmdPW, MAX_PATH);\n        if ((buffer = wine_get_unix_file_name(psCmdPW)))\n        {\n            if ((fd = open(buffer, O_CREAT | O_TRUNC | O_WRONLY, 0666)) < 0)\n            {\n                ERR(\"Failed to create spool file '%s' ('%s'). (error %s)\\n\",\n                    buffer, psCmdP, strerror(errno));\n            }\n            HeapFree(GetProcessHeap(), 0, buffer);\n        }\n    }\n    return fd;\n}\nstatic int FreePrintJob(HANDLE16 hJob)\n{\n    int nRet = SP_ERROR;\n    PPRINTJOB pPrintJob;\n\n    pPrintJob = FindPrintJobFromHandle(hJob);\n    if (pPrintJob != NULL)\n    {\n\tnRet = SP_OK;\n\tgPrintJobsTable[pPrintJob->nIndex] = NULL;\n\tHeapFree(GetProcessHeap(), 0, pPrintJob->pszOutput);\n\tHeapFree(GetProcessHeap(), 0, pPrintJob->pszTitle);\n\tif (pPrintJob->fd >= 0) close(pPrintJob->fd);\n\tif (pPrintJob->pid > 0)\n\t{\n\t    pid_t wret;\n            int status;\n            do {\n                wret = waitpid(pPrintJob->pid, &status, 0);\n            } while (wret < 0 && errno == EINTR);\n            if (wret < 0 || !WIFEXITED(status) || WEXITSTATUS(status))\n                nRet = SP_ERROR;\n\t}\n\tHeapFree(GetProcessHeap(), 0, pPrintJob);\n    }\n    return nRet;\n}\n#endif\n\n/**********************************************************************\n *           OpenJob   (GDI.240)\n *\n */\nHPJOB16 WINAPI OpenJob16(LPCSTR lpOutput, LPCSTR lpTitle, HDC16 hDC)\n{\n#ifdef HAVE_UNISTD_H\n    HPJOB16 hHandle = (HPJOB16)SP_ERROR;\n    PPRINTJOB pPrintJob;\n\n    TRACE(\"'%s' '%s' %04x\\n\", lpOutput, lpTitle, hDC);\n\n    pPrintJob = gPrintJobsTable[0];\n    if (pPrintJob == NULL)\n    {\n\tint fd;\n\tpid_t pid;\n\n\t/* Try and create a spool file */\n\tfd = CreateSpoolFile(lpOutput, &pid);\n\tif (fd >= 0)\n\t{\n\t    pPrintJob = HeapAlloc(GetProcessHeap(), 0, sizeof(PRINTJOB));\n            if(pPrintJob == NULL) {\n                WARN(\"Memory exhausted!\\n\");\n                return hHandle;\n            }\n\n            hHandle = 1;\n\n\t    pPrintJob->pszOutput = HeapAlloc(GetProcessHeap(), 0, strlen(lpOutput)+1);\n\t    strcpy( pPrintJob->pszOutput, lpOutput );\n\t    if(lpTitle)\n            {\n\t        pPrintJob->pszTitle = HeapAlloc(GetProcessHeap(), 0, strlen(lpTitle)+1);\n\t        strcpy( pPrintJob->pszTitle, lpTitle );\n            }\n\t    pPrintJob->hDC = hDC;\n\t    pPrintJob->fd = fd;\n\t    pPrintJob->pid = pid;\n\t    pPrintJob->nIndex = 0;\n\t    pPrintJob->hHandle = hHandle;\n\t    gPrintJobsTable[pPrintJob->nIndex] = pPrintJob;\n\t}\n    }\n    TRACE(\"return %04x\\n\", hHandle);\n    return hHandle;\n#endif\n\tFIXME(\"stub\");\n}\n\n/**********************************************************************\n *           CloseJob   (GDI.243)\n *\n */\nINT16 WINAPI CloseJob16(HPJOB16 hJob)\n{\n#ifdef HAVE_UNISTD_H\n    int nRet = SP_ERROR;\n    PPRINTJOB pPrintJob;\n\n    TRACE(\"%04x\\n\", hJob);\n\n    pPrintJob = FindPrintJobFromHandle(hJob);\n    if (pPrintJob != NULL)\n    {\n\tFreePrintJob(hJob);\n\tnRet  = 1;\n    }\n    return nRet;\n#endif\n}\n\n/**********************************************************************\n *           WriteSpool   (GDI.241)\n *\n */\nINT16 WINAPI WriteSpool16(HPJOB16 hJob, LPSTR lpData, INT16 cch)\n{\n#ifdef HAVE_UNISTD_H\n    int nRet = SP_ERROR;\n    PPRINTJOB pPrintJob;\n\n    TRACE(\"%04x %p %04x\\n\", hJob, lpData, cch);\n\n    pPrintJob = FindPrintJobFromHandle(hJob);\n    if (pPrintJob != NULL && pPrintJob->fd >= 0 && cch)\n    {\n\tif (write(pPrintJob->fd, lpData, cch) != cch)\n\t  nRet = SP_OUTOFDISK;\n\telse\n\t  nRet = cch;\n#if 0\n\t/* FIXME: We just cannot call 16 bit functions from here, since we\n\t * have acquired several locks (DC). And we do not really need to.\n\t */\n\tif (pPrintJob->hDC == 0) {\n\t    TRACE(\"hDC == 0 so no QueryAbort\\n\");\n\t}\n        else if (!(QueryAbort16(pPrintJob->hDC, (nRet == SP_OUTOFDISK) ? nRet : 0 )))\n\t{\n\t    CloseJob16(hJob); /* printing aborted */\n\t    nRet = SP_APPABORT;\n\t}\n#endif\n    }\n    return nRet;\n#endif\n}\n\ntypedef INT (WINAPI *MSGBOX_PROC)( HWND, LPCSTR, LPCSTR, UINT );\n\n/**********************************************************************\n *           WriteDialog   (GDI.242)\n *\n */\nINT16 WINAPI WriteDialog16(HPJOB16 hJob, LPSTR lpMsg, INT16 cchMsg)\n{\n    HMODULE mod;\n    MSGBOX_PROC pMessageBoxA;\n    INT16 ret = 0;\n\n    TRACE(\"%04x %04x '%s'\\n\", hJob,  cchMsg, lpMsg);\n\n    if ((mod = GetModuleHandleA(\"user32.dll\")))\n    {\n        if ((pMessageBoxA = (MSGBOX_PROC)GetProcAddress( mod, \"MessageBoxA\" )))\n            ret = pMessageBoxA(0, lpMsg, \"Printing Error\", MB_OKCANCEL);\n    }\n    return ret;\n}\n\n\n/**********************************************************************\n *           DeleteJob  (GDI.244)\n *\n */\nINT16 WINAPI DeleteJob16(HPJOB16 hJob, INT16 nNotUsed)\n{\n    int nRet;\n\n    TRACE(\"%04x\\n\", hJob);\n\n    //nRet = FreePrintJob(hJob);\n    return nRet;\n}\n\n/*\n * The following two function would allow a page to be sent to the printer\n * when it has been processed.  For simplicity they haven't been implemented.\n * This means a whole job has to be processed before it is sent to the printer.\n */\n\n/**********************************************************************\n *           StartSpoolPage   (GDI.246)\n *\n */\nINT16 WINAPI StartSpoolPage16(HPJOB16 hJob)\n{\n    FIXME(\"StartSpoolPage GDI.246 unimplemented\\n\");\n    return 1;\n\n}\n\n\n/**********************************************************************\n *           EndSpoolPage   (GDI.247)\n *\n */\nINT16 WINAPI EndSpoolPage16(HPJOB16 hJob)\n{\n    FIXME(\"EndSpoolPage GDI.247 unimplemented\\n\");\n    return 1;\n}\n\n\n/**********************************************************************\n *           GetSpoolJob   (GDI.245)\n *\n */\nDWORD WINAPI GetSpoolJob16(int nOption, LONG param)\n{\n    DWORD retval = 0;\n    TRACE(\"In GetSpoolJob param 0x%x noption %d\\n\",param, nOption);\n    return retval;\n}\n\n\n/******************************************************************\n *                  DrvGetPrinterDataInternal\n *\n * Helper for DrvGetPrinterData\n */\nstatic DWORD DrvGetPrinterDataInternal(LPCSTR RegStr_Printer,\nLPBYTE lpPrinterData, int cbData, int what)\n{\n    DWORD res = -1;\n    HKEY hkey;\n    DWORD dwType, cbQueryData;\n\n    if (!(RegOpenKeyA(HKEY_LOCAL_MACHINE, RegStr_Printer, &hkey))) {\n        if (what == INT_PD_DEFAULT_DEVMODE) { /* \"Default DevMode\" */\n            if (!(RegQueryValueExA(hkey, DefaultDevMode, 0, &dwType, 0, &cbQueryData))) {\n                if (!lpPrinterData)\n\t\t    res = cbQueryData;\n\t\telse if ((cbQueryData) && (cbQueryData <= cbData)) {\n\t\t    cbQueryData = cbData;\n\t\t    if (RegQueryValueExA(hkey, DefaultDevMode, 0,\n\t\t\t\t&dwType, lpPrinterData, &cbQueryData))\n\t\t        res = cbQueryData;\n\t\t}\n\t    }\n\t} else { /* \"Printer Driver\" */\n\t    cbQueryData = 32;\n\t    RegQueryValueExA(hkey, \"Printer Driver\", 0,\n\t\t\t&dwType, lpPrinterData, &cbQueryData);\n\t    res = cbQueryData;\n\t}\n    }\n    if (hkey) RegCloseKey(hkey);\n    return res;\n}\n\n/******************************************************************\n *                DrvGetPrinterData     (GDI.282)\n *\n */\nDWORD WINAPI DrvGetPrinterData16(LPSTR lpPrinter, LPSTR lpProfile,\n                               LPDWORD lpType, LPBYTE lpPrinterData,\n                               int cbData, LPDWORD lpNeeded)\n{\n    LPSTR RegStr_Printer;\n    HKEY hkey = 0, hkey2 = 0;\n    DWORD res = 0;\n    DWORD dwType, PrinterAttr, cbPrinterAttr, SetData, size;\n\n    if (HIWORD(lpPrinter))\n            TRACE(\"printer %s\\n\",lpPrinter);\n    else\n            TRACE(\"printer %p\\n\",lpPrinter);\n    if (HIWORD(lpProfile))\n            TRACE(\"profile %s\\n\",lpProfile);\n    else\n            TRACE(\"profile %p\\n\",lpProfile);\n    TRACE(\"lpType %p\\n\",lpType);\n\n    if ((!lpPrinter) || (!lpProfile) || (!lpNeeded))\n\treturn ERROR_INVALID_PARAMETER;\n\n    RegStr_Printer = HeapAlloc(GetProcessHeap(), 0,\n                               strlen(Printers) + strlen(lpPrinter) + 2);\n    strcpy(RegStr_Printer, Printers);\n    strcat(RegStr_Printer, lpPrinter);\n\n    if ((PtrToUlong(lpProfile) == INT_PD_DEFAULT_DEVMODE) || (HIWORD(lpProfile) &&\n    (!strcmp(lpProfile, DefaultDevMode)))) {\n\tsize = DrvGetPrinterDataInternal(RegStr_Printer, lpPrinterData, cbData,\n\t\t\t\t\t INT_PD_DEFAULT_DEVMODE);\n\tif (size+1) {\n\t    *lpNeeded = size;\n\t    if ((lpPrinterData) && (*lpNeeded > cbData))\n\t\tres = ERROR_MORE_DATA;\n\t}\n\telse res = ERROR_INVALID_PRINTER_NAME;\n    }\n    else\n    if ((PtrToUlong(lpProfile) == INT_PD_DEFAULT_MODEL) || (HIWORD(lpProfile) &&\n    (!strcmp(lpProfile, PrinterModel)))) {\n\t*lpNeeded = 32;\n\tif (!lpPrinterData) goto failed;\n\tif (cbData < 32) {\n\t    res = ERROR_MORE_DATA;\n\t    goto failed;\n\t}\n\tsize = DrvGetPrinterDataInternal(RegStr_Printer, lpPrinterData, cbData,\n\t\t\t\t\t INT_PD_DEFAULT_MODEL);\n\tif ((size+1) && (lpType))\n\t    *lpType = REG_SZ;\n\telse\n\t    res = ERROR_INVALID_PRINTER_NAME;\n    }\n    else\n    {\n\tif ((res = RegOpenKeyA(HKEY_LOCAL_MACHINE, RegStr_Printer, &hkey)))\n\t    goto failed;\n        cbPrinterAttr = 4;\n        if ((res = RegQueryValueExA(hkey, \"Attributes\", 0,\n                        &dwType, (LPBYTE)&PrinterAttr, &cbPrinterAttr)))\n\t    goto failed;\n\tif ((res = RegOpenKeyA(hkey, PrinterDriverData, &hkey2)))\n\t    goto failed;\n        *lpNeeded = cbData;\n        res = RegQueryValueExA(hkey2, lpProfile, 0,\n                lpType, lpPrinterData, lpNeeded);\n        if ((res != ERROR_CANTREAD) &&\n         ((PrinterAttr &\n        (PRINTER_ATTRIBUTE_ENABLE_BIDI|PRINTER_ATTRIBUTE_NETWORK))\n        == PRINTER_ATTRIBUTE_NETWORK))\n        {\n\t    if (!(res) && (*lpType == REG_DWORD) && (*(LPDWORD)lpPrinterData == -1))\n\t        res = ERROR_INVALID_DATA;\n\t}\n\telse\n        {\n\t    SetData = -1;\n\t    RegSetValueExA(hkey2, lpProfile, 0, REG_DWORD, (LPBYTE)&SetData, 4); /* no result returned */\n\t}\n    }\n\nfailed:\n    if (hkey2) RegCloseKey(hkey2);\n    if (hkey) RegCloseKey(hkey);\n    HeapFree(GetProcessHeap(), 0, RegStr_Printer);\n    return res;\n}\n\n\n/******************************************************************\n *                 DrvSetPrinterData     (GDI.281)\n *\n */\nDWORD WINAPI DrvSetPrinterData16(LPSTR lpPrinter, LPSTR lpProfile,\n                               DWORD lpType, LPBYTE lpPrinterData,\n                               DWORD dwSize)\n{\n    LPSTR RegStr_Printer;\n    HKEY hkey = 0;\n    DWORD res = 0;\n\n    if (HIWORD(lpPrinter))\n            TRACE(\"printer %s\\n\",lpPrinter);\n    else\n            TRACE(\"printer %p\\n\",lpPrinter);\n    if (HIWORD(lpProfile))\n            TRACE(\"profile %s\\n\",lpProfile);\n    else\n            TRACE(\"profile %p\\n\",lpProfile);\n    TRACE(\"lpType %08x\\n\",lpType);\n\n    if ((!lpPrinter) || (!lpProfile) ||\n    (PtrToUlong(lpProfile) == INT_PD_DEFAULT_MODEL) || (HIWORD(lpProfile) &&\n    (!strcmp(lpProfile, PrinterModel))))\n\treturn ERROR_INVALID_PARAMETER;\n\n    RegStr_Printer = HeapAlloc(GetProcessHeap(), 0,\n\t\t\tstrlen(Printers) + strlen(lpPrinter) + 2);\n    strcpy(RegStr_Printer, Printers);\n    strcat(RegStr_Printer, lpPrinter);\n\n    if ((PtrToUlong(lpProfile) == INT_PD_DEFAULT_DEVMODE) || (HIWORD(lpProfile) &&\n    (!strcmp(lpProfile, DefaultDevMode)))) {\n\tif ( RegOpenKeyA(HKEY_LOCAL_MACHINE, RegStr_Printer, &hkey)\n\t     != ERROR_SUCCESS ||\n\t     RegSetValueExA(hkey, DefaultDevMode, 0, REG_BINARY,\n\t\t\t      lpPrinterData, dwSize) != ERROR_SUCCESS )\n\t        res = ERROR_INVALID_PRINTER_NAME;\n    }\n    else\n    {\n\tstrcat(RegStr_Printer, \"\\\\\");\n\n\tif( (res = RegOpenKeyA(HKEY_LOCAL_MACHINE, RegStr_Printer, &hkey)) ==\n\t    ERROR_SUCCESS ) {\n\n\t    if (!lpPrinterData)\n\t        res = RegDeleteValueA(hkey, lpProfile);\n\t    else\n                res = RegSetValueExA(hkey, lpProfile, 0, lpType,\n\t\t\t\t       lpPrinterData, dwSize);\n\t}\n    }\n\n    if (hkey) RegCloseKey(hkey);\n    HeapFree(GetProcessHeap(), 0, RegStr_Printer);\n    return res;\n}\n\nHANDLE16 WINAPI SpoolFile16(LPCSTR printer, LPCSTR port, LPCSTR job, LPCSTR file)\n{\n    HANDLE hprinter;\n    HANDLE16 ret = SP_ERROR;\n    if (!OpenPrinterA(printer, &hprinter, NULL))\n        return SP_ERROR;\n\n    DOC_INFO_1 dinfo;\n    dinfo.pDocName = job;\n    dinfo.pOutputFile = NULL;\n    dinfo.pDatatype = \"RAW\";\n    \n    if (!StartDocPrinterA(hprinter, 1, &dinfo))\n        goto outprn;\n\n    HFILE fd = CreateFileA(file, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);\n    if (fd == INVALID_HANDLE_VALUE)\n        goto outfile;\n\n    while (1)\n    {\n        char buf[1024];\n        int read, write;\n        if (!ReadFile(fd, &buf, 1024, &read, NULL) || !read)\n            break;\n        if (!WritePrinter(hprinter, &buf, read, &write))\n            goto outfile;\n    }\n    ret = 1;\noutfile:\n    CloseHandle(fd);\n    EndDocPrinter(hprinter);\noutprn:\n    ClosePrinter(hprinter);\n\n    return ret;\n}\n"
  },
  {
    "path": "gvm/CMakeLists.txt",
    "content": "add_library(gvm SHARED gvm.c)\ninclude_directories(../wine)\nadd_definitions(-D__i386__ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN=)\ntarget_link_libraries(gvm libwine)\nset_target_properties(gvm PROPERTIES PREFIX \"\")\n"
  },
  {
    "path": "gvm/gvm-interface.h",
    "content": "/*\n * QEMU GVM support\n *\n * Copyright IBM, Corp. 2008\n *\n * Authors:\n *  Anthony Liguori   <aliguori@us.ibm.com>\n *\n * Copyright (c) 2017 Intel Corporation\n *  Written by:\n *  Haitao Shan <hshan@google.com>\n *\n * This work is licensed under the terms of the GNU GPL, version 2 or later.\n * See the COPYING file in the top-level directory.\n *\n */\n\n#ifndef GVM_INTERFACE_H\n#define GVM_INTERFACE_H\n\n#ifdef _WIN32\n#include <windows.h>\n#include <winioctl.h>\n#include <windef.h>\n#endif\n#include <memory.h>\n#include <malloc.h>\n#include <string.h>\n#include <stdio.h>\n\n#define __u8 uint8_t\n#define __u16 uint16_t\n#define __u32 uint32_t\n#define __u64 uint64_t\n#define __s8 int8_t\n#define __s16 int16_t\n#define __s32 int32_t\n#define __s64 int64_t\n\n/*\n * GVM x86 specific structures and definitions\n *\n */\n\n#define DE_VECTOR 0\n#define DB_VECTOR 1\n#define BP_VECTOR 3\n#define OF_VECTOR 4\n#define BR_VECTOR 5\n#define UD_VECTOR 6\n#define NM_VECTOR 7\n#define DF_VECTOR 8\n#define TS_VECTOR 10\n#define NP_VECTOR 11\n#define SS_VECTOR 12\n#define GP_VECTOR 13\n#define PF_VECTOR 14\n#define MF_VECTOR 16\n#define AC_VECTOR 17\n#define MC_VECTOR 18\n#define XM_VECTOR 19\n#define VE_VECTOR 20\n\n/* Architectural interrupt line count. */\n#define GVM_NR_INTERRUPTS 256\n\nstruct gvm_memory_alias {\n\t__u32 slot;  /* this has a different namespace than memory slots */\n\t__u32 flags;\n\t__u64 guest_phys_addr;\n\t__u64 memory_size;\n\t__u64 target_phys_addr;\n};\n\n/* for GVM_GET_IRQCHIP and GVM_SET_IRQCHIP */\nstruct gvm_pic_state {\n\t__u8 last_irr;\t/* edge detection */\n\t__u8 irr;\t\t/* interrupt request register */\n\t__u8 imr;\t\t/* interrupt mask register */\n\t__u8 isr;\t\t/* interrupt service register */\n\t__u8 priority_add;\t/* highest irq priority */\n\t__u8 irq_base;\n\t__u8 read_reg_select;\n\t__u8 poll;\n\t__u8 special_mask;\n\t__u8 init_state;\n\t__u8 auto_eoi;\n\t__u8 rotate_on_auto_eoi;\n\t__u8 special_fully_nested_mode;\n\t__u8 init4;\t\t/* true if 4 byte init */\n\t__u8 elcr;\t\t/* PIIX edge/trigger selection */\n\t__u8 elcr_mask;\n};\n\n#define GVM_IOAPIC_NUM_PINS  24\nstruct gvm_ioapic_state {\n\t__u64 base_address;\n\t__u32 ioregsel;\n\t__u32 id;\n\t__u32 irr;\n\t__u32 pad;\n\tunion {\n\t\t__u64 bits;\n\t\tstruct {\n\t\t\t__u8 vector;\n\t\t\t__u8 delivery_mode:3;\n\t\t\t__u8 dest_mode:1;\n\t\t\t__u8 delivery_status:1;\n\t\t\t__u8 polarity:1;\n\t\t\t__u8 remote_irr:1;\n\t\t\t__u8 trig_mode:1;\n\t\t\t__u8 mask:1;\n\t\t\t__u8 reserve:7;\n\t\t\t__u8 reserved[4];\n\t\t\t__u8 dest_id;\n\t\t} fields;\n\t} redirtbl[GVM_IOAPIC_NUM_PINS];\n};\n\n#define GVM_IRQCHIP_PIC_MASTER   0\n#define GVM_IRQCHIP_PIC_SLAVE    1\n#define GVM_IRQCHIP_IOAPIC       2\n#define GVM_NR_IRQCHIPS          3\n\n#define GVM_RUN_X86_SMM\t\t (1 << 0)\n\n/* for GVM_GET_REGS and GVM_SET_REGS */\nstruct gvm_regs {\n\t/* out (GVM_GET_REGS) / in (GVM_SET_REGS) */\n\t__u64 rax, rbx, rcx, rdx;\n\t__u64 rsi, rdi, rsp, rbp;\n\t__u64 r8,  r9,  r10, r11;\n\t__u64 r12, r13, r14, r15;\n\t__u64 rip, rflags;\n};\n\n/* for GVM_GET_LAPIC and GVM_SET_LAPIC */\n#define GVM_APIC_REG_SIZE 0x400\nstruct gvm_lapic_state {\n\tchar regs[GVM_APIC_REG_SIZE];\n};\n\nstruct gvm_segment {\n\t__u64 base;\n\t__u32 limit;\n\t__u16 selector;\n\t__u8  type;\n\t__u8  present, dpl, db, s, l, g, avl;\n\t__u8  unusable;\n\t__u8  padding;\n};\n\nstruct gvm_dtable {\n\t__u64 base;\n\t__u16 limit;\n\t__u16 padding[3];\n};\n\n\n/* for GVM_GET_SREGS and GVM_SET_SREGS */\nstruct gvm_sregs {\n\t/* out (GVM_GET_SREGS) / in (GVM_SET_SREGS) */\n\tstruct gvm_segment cs, ds, es, fs, gs, ss;\n\tstruct gvm_segment tr, ldt;\n\tstruct gvm_dtable gdt, idt;\n\t__u64 cr0, cr2, cr3, cr4, cr8;\n\t__u64 efer;\n\t__u64 apic_base;\n\t__u64 interrupt_bitmap[(GVM_NR_INTERRUPTS + 63) / 64];\n};\n\n/* for GVM_GET_FPU and GVM_SET_FPU */\nstruct gvm_fpu {\n\t__u8  fpr[8][16];\n\t__u16 fcw;\n\t__u16 fsw;\n\t__u8  ftwx;  /* in fxsave format */\n\t__u8  pad1;\n\t__u16 last_opcode;\n\t__u64 last_ip;\n\t__u64 last_dp;\n\t__u8  xmm[16][16];\n\t__u32 mxcsr;\n\t__u32 pad2;\n};\n\nstruct gvm_msr_entry {\n\t__u32 index;\n\t__u32 reserved;\n\t__u64 data;\n};\n\n/* for GVM_GET_MSRS and GVM_SET_MSRS */\nstruct gvm_msrs {\n\t__u32 nmsrs; /* number of msrs in entries */\n\t__u32 pad;\n\n\tstruct gvm_msr_entry entries[0];\n};\n\n/* for GVM_GET_MSR_INDEX_LIST */\nstruct gvm_msr_list {\n\t__u32 nmsrs; /* number of msrs in entries */\n\t__u32 indices[0];\n};\n\nstruct gvm_cpuid_entry {\n\t__u32 function;\n\t__u32 index;\n\t__u32 flags;\n\t__u32 eax;\n\t__u32 ebx;\n\t__u32 ecx;\n\t__u32 edx;\n\t__u32 padding[3];\n};\n\n#define GVM_CPUID_FLAG_SIGNIFCANT_INDEX\t\t(1 << 0)\n#define GVM_CPUID_FLAG_STATEFUL_FUNC\t\t(1 << 1)\n#define GVM_CPUID_FLAG_STATE_READ_NEXT\t\t(1 << 2)\n\n/* for GVM_SET_CPUID */\nstruct gvm_cpuid {\n\t__u32 nent;\n\t__u32 padding;\n\tstruct gvm_cpuid_entry entries[0];\n};\n\nstruct gvm_debug_exit_arch {\n\t__u32 exception;\n\t__u32 pad;\n\t__u64 pc;\n\t__u64 dr6;\n\t__u64 dr7;\n};\n\n#define GVM_GUESTDBG_USE_SW_BP\t\t0x00010000\n#define GVM_GUESTDBG_USE_HW_BP\t\t0x00020000\n#define GVM_GUESTDBG_INJECT_DB\t\t0x00040000\n#define GVM_GUESTDBG_INJECT_BP\t\t0x00080000\n\n/* for GVM_SET_GUEST_DEBUG */\nstruct gvm_guest_debug_arch {\n\t__u64 debugreg[8];\n};\n\n/* When set in flags, include corresponding fields on GVM_SET_VCPU_EVENTS */\n#define GVM_VCPUEVENT_VALID_NMI_PENDING\t0x00000001\n#define GVM_VCPUEVENT_VALID_SIPI_VECTOR\t0x00000002\n#define GVM_VCPUEVENT_VALID_SHADOW\t0x00000004\n#define GVM_VCPUEVENT_VALID_SMM\t\t0x00000008\n\n/* Interrupt shadow states */\n#define GVM_X86_SHADOW_INT_MOV_SS\t0x01\n#define GVM_X86_SHADOW_INT_STI\t\t0x02\n\n/* for GVM_GET/SET_VCPU_EVENTS */\nstruct gvm_vcpu_events {\n\tstruct {\n\t\t__u8 injected;\n\t\t__u8 nr;\n\t\t__u8 has_error_code;\n\t\t__u8 pad;\n\t\t__u32 error_code;\n\t} exception;\n\tstruct {\n\t\t__u8 injected;\n\t\t__u8 nr;\n\t\t__u8 soft;\n\t\t__u8 shadow;\n\t} interrupt;\n\tstruct {\n\t\t__u8 injected;\n\t\t__u8 pending;\n\t\t__u8 masked;\n\t\t__u8 pad;\n\t} nmi;\n\t__u32 sipi_vector;\n\t__u32 flags;\n\tstruct {\n\t\t__u8 smm;\n\t\t__u8 pending;\n\t\t__u8 smm_inside_nmi;\n\t\t__u8 latched_init;\n\t} smi;\n\t__u32 reserved[9];\n};\n\n/* for GVM_GET/SET_DEBUGREGS */\nstruct gvm_debugregs {\n\t__u64 db[4];\n\t__u64 dr6;\n\t__u64 dr7;\n\t__u64 flags;\n\t__u64 reserved[9];\n};\n\n/* for GVM_CAP_XSAVE */\nstruct gvm_xsave {\n\t__u32 region[1024];\n};\n\n#define GVM_MAX_XCRS\t16\n\nstruct gvm_xcr {\n\t__u32 xcr;\n\t__u32 reserved;\n\t__u64 value;\n};\n\nstruct gvm_xcrs {\n\t__u32 nr_xcrs;\n\t__u32 flags;\n\tstruct gvm_xcr xcrs[GVM_MAX_XCRS];\n\t__u64 padding[16];\n};\n\n/* definition of registers in gvm_run */\nstruct gvm_sync_regs {\n    __u32 dummy[0];\n};\n\n#define GVM_X86_QUIRK_LINT0_REENABLED\t(1 << 0)\n#define GVM_X86_QUIRK_CD_NW_CLEARED\t(1 << 1)\n\n#define FILE_DEVICE_GVM 0xE3E3\n\n/* Macros to convert Linux style ioctl to Windows */\n#define __IO(a,b) CTL_CODE(FILE_DEVICE_GVM, b, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define __IOR(a,b,c) __IO(a,b)\n#define __IOW(a,b,c) __IO(a,b)\n#define __IOWR(a,b,c) __IO(a,b)\n\n#define GVM_API_VERSION 1\n\n/* for GVM_CREATE_MEMORY_REGION */\nstruct gvm_memory_region {\n\t__u32 slot;\n\t__u32 flags;\n\t__u64 guest_phys_addr;\n\t__u64 memory_size; /* bytes */\n};\n\n/* for GVM_SET_USER_MEMORY_REGION */\nstruct gvm_userspace_memory_region {\n\t__u32 slot;\n\t__u32 flags;\n\t__u64 guest_phys_addr;\n\t__u64 memory_size; /* bytes */\n\t__u64 userspace_addr; /* start of the userspace allocated memory */\n};\n\n/*\n * The bit 0 ~ bit 15 of gvm_memory_region::flags are visible for userspace,\n * other bits are reserved for gvm internal use which are defined in\n * include/linux/gvm_host.h.\n */\n#define GVM_MEM_LOG_DIRTY_PAGES\t(1UL << 0)\n#define GVM_MEM_READONLY\t(1UL << 1)\n\n/* for GVM_IRQ_LINE */\nstruct gvm_irq_level {\n\t/*\n\t * ACPI gsi notion of irq.\n\t * For IA-64 (APIC model) IOAPIC0: irq 0-23; IOAPIC1: irq 24-47..\n\t * For X86 (standard AT mode) PIC0/1: irq 0-15. IOAPIC0: 0-23..\n\t * For ARM: See Documentation/virtual/gvm/api.txt\n\t */\n\tunion {\n\t\t__u32 irq;\n\t\t__s32 status;\n\t};\n\t__u32 level;\n};\n\n\nstruct gvm_irqchip {\n\t__u32 chip_id;\n\t__u32 pad;\n        union {\n\t\tchar dummy[512];  /* reserving space */\n                struct gvm_pic_state pic;\n\t\tstruct gvm_ioapic_state ioapic;\n\t} chip;\n};\n\n#define GVM_EXIT_UNKNOWN          0\n#define GVM_EXIT_EXCEPTION        1\n#define GVM_EXIT_IO               2\n#define GVM_EXIT_HYPERCALL        3\n#define GVM_EXIT_DEBUG            4\n#define GVM_EXIT_HLT              5\n#define GVM_EXIT_MMIO             6\n#define GVM_EXIT_IRQ_WINDOW_OPEN  7\n#define GVM_EXIT_SHUTDOWN         8\n#define GVM_EXIT_FAIL_ENTRY       9\n#define GVM_EXIT_INTR             10\n#define GVM_EXIT_SET_TPR          11\n#define GVM_EXIT_TPR_ACCESS       12\n#define GVM_EXIT_NMI              16\n#define GVM_EXIT_INTERNAL_ERROR   17\n#define GVM_EXIT_OSI              18\n#define GVM_EXIT_PAPR_HCALL\t  19\n#define GVM_EXIT_WATCHDOG         21\n#define GVM_EXIT_EPR              23\n#define GVM_EXIT_SYSTEM_EVENT     24\n#define GVM_EXIT_IOAPIC_EOI       26\n\n/* For GVM_EXIT_INTERNAL_ERROR */\n/* Emulate instruction failed. */\n#define GVM_INTERNAL_ERROR_EMULATION\t1\n/* Encounter unexpected simultaneous exceptions. */\n#define GVM_INTERNAL_ERROR_SIMUL_EX\t2\n/* Encounter unexpected vm-exit due to delivery event. */\n#define GVM_INTERNAL_ERROR_DELIVERY_EV\t3\n\n/* for GVM_RUN, returned by mmap(vcpu_fd, offset=0) */\nstruct gvm_run {\n\t/* in */\n\t__u8 request_interrupt_window;\n\t__u8 user_event_pending;\n\t__u8 padding1[6];\n\n\t/* out */\n\t__u32 exit_reason;\n\t__u8 ready_for_interrupt_injection;\n\t__u8 if_flag;\n\t__u16 flags;\n\n\t/* in (pre_gvm_run), out (post_gvm_run) */\n\t__u64 cr8;\n\t__u64 apic_base;\n\n\tunion {\n\t\t/* GVM_EXIT_UNKNOWN */\n\t\tstruct {\n\t\t\t__u64 hardware_exit_reason;\n\t\t} hw;\n\t\t/* GVM_EXIT_FAIL_ENTRY */\n\t\tstruct {\n\t\t\t__u64 hardware_entry_failure_reason;\n\t\t} fail_entry;\n\t\t/* GVM_EXIT_EXCEPTION */\n\t\tstruct {\n\t\t\t__u32 exception;\n\t\t\t__u32 error_code;\n\t\t} ex;\n\t\t/* GVM_EXIT_IO */\n\t\tstruct {\n#define GVM_EXIT_IO_IN  0\n#define GVM_EXIT_IO_OUT 1\n\t\t\t__u8 direction;\n\t\t\t__u8 size; /* bytes */\n\t\t\t__u16 port;\n\t\t\t__u32 count;\n\t\t\t__u64 data_offset; /* relative to gvm_run start */\n\t\t} io;\n\t\t/* GVM_EXIT_DEBUG */\n\t\tstruct {\n\t\t\tstruct gvm_debug_exit_arch arch;\n\t\t} debug;\n\t\t/* GVM_EXIT_MMIO */\n\t\tstruct {\n\t\t\t__u64 phys_addr;\n\t\t\t__u8  data[8];\n\t\t\t__u32 len;\n\t\t\t__u8  is_write;\n\t\t} mmio;\n\t\t/* GVM_EXIT_HYPERCALL */\n\t\tstruct {\n\t\t\t__u64 nr;\n\t\t\t__u64 args[6];\n\t\t\t__u64 ret;\n\t\t\t__u32 longmode;\n\t\t\t__u32 pad;\n\t\t} hypercall;\n\t\t/* GVM_EXIT_TPR_ACCESS */\n\t\tstruct {\n\t\t\t__u64 rip;\n\t\t\t__u32 is_write;\n\t\t\t__u32 pad;\n\t\t} tpr_access;\n\t\t/* GVM_EXIT_INTERNAL_ERROR */\n\t\tstruct {\n\t\t\t__u32 suberror;\n\t\t\t/* Available with GVM_CAP_INTERNAL_ERROR_DATA: */\n\t\t\t__u32 ndata;\n\t\t\t__u64 data[16];\n\t\t} internal;\n\t\t/* GVM_EXIT_OSI */\n\t\tstruct {\n\t\t\t__u64 gprs[32];\n\t\t} osi;\n\t\t/* GVM_EXIT_PAPR_HCALL */\n\t\tstruct {\n\t\t\t__u64 nr;\n\t\t\t__u64 ret;\n\t\t\t__u64 args[9];\n\t\t} papr_hcall;\n\t\t/* GVM_EXIT_EPR */\n\t\tstruct {\n\t\t\t__u32 epr;\n\t\t} epr;\n\t\t/* GVM_EXIT_SYSTEM_EVENT */\n\t\tstruct {\n#define GVM_SYSTEM_EVENT_SHUTDOWN       1\n#define GVM_SYSTEM_EVENT_RESET          2\n#define GVM_SYSTEM_EVENT_CRASH          3\n\t\t\t__u32 type;\n\t\t\t__u64 flags;\n\t\t} system_event;\n\t\t/* GVM_EXIT_IOAPIC_EOI */\n\t\tstruct {\n\t\t\t__u8 vector;\n\t\t} eoi;\n\t\t/* Fix the size of the union. */\n\t\tchar padding[256];\n\t};\n\n\t/*\n\t * shared registers between gvm and userspace.\n\t * gvm_valid_regs specifies the register classes set by the host\n\t * gvm_dirty_regs specified the register classes dirtied by userspace\n\t * struct gvm_sync_regs is architecture specific, as well as the\n\t * bits for gvm_valid_regs and gvm_dirty_regs\n\t */\n\t__u64 gvm_valid_regs;\n\t__u64 gvm_dirty_regs;\n\tunion {\n\t\tstruct gvm_sync_regs regs;\n\t\tchar padding[2048];\n\t} s;\n};\n\n/* for GVM_TRANSLATE */\nstruct gvm_translation {\n\t/* in */\n\t__u64 linear_address;\n\n\t/* out */\n\t__u64 physical_address;\n\t__u8  valid;\n\t__u8  writeable;\n\t__u8  usermode;\n\t__u8  pad[5];\n};\n\n/* for GVM_INTERRUPT */\nstruct gvm_interrupt {\n\t/* in */\n\t__u32 irq;\n};\n\n/* for GVM_GET_DIRTY_LOG */\nstruct gvm_dirty_log {\n\t__u32 slot;\n\t__u32 padding1;\n\tunion {\n\t\tvoid *dirty_bitmap; /* one bit per page */\n\t\t__u64 padding2;\n\t};\n};\n\n/* for GVM_TPR_ACCESS_REPORTING */\nstruct gvm_tpr_access_ctl {\n\t__u32 enabled;\n\t__u32 flags;\n\t__u32 reserved[8];\n};\n\n/* for GVM_SET_VAPIC_ADDR */\nstruct gvm_vapic_addr {\n\t__u64 vapic_addr;\n};\n\n/* for GVM_SET_MP_STATE */\n\n/* not all states are valid on all architectures */\n#define GVM_MP_STATE_RUNNABLE          0\n#define GVM_MP_STATE_UNINITIALIZED     1\n#define GVM_MP_STATE_INIT_RECEIVED     2\n#define GVM_MP_STATE_HALTED            3\n#define GVM_MP_STATE_SIPI_RECEIVED     4\n#define GVM_MP_STATE_STOPPED           5\n#define GVM_MP_STATE_CHECK_STOP        6\n#define GVM_MP_STATE_OPERATING         7\n#define GVM_MP_STATE_LOAD              8\n\nstruct gvm_mp_state {\n\t__u32 mp_state;\n};\n\n/* for GVM_SET_GUEST_DEBUG */\n\n#define GVM_GUESTDBG_ENABLE\t\t0x00000001\n#define GVM_GUESTDBG_SINGLESTEP\t\t0x00000002\n\nstruct gvm_guest_debug {\n\t__u32 control;\n\t__u32 pad;\n\tstruct gvm_guest_debug_arch arch;\n};\n\n/* for GVM_ENABLE_CAP */\nstruct gvm_enable_cap {\n\t/* in */\n\t__u32 cap;\n\t__u32 flags;\n\t__u64 args[4];\n\t__u8  pad[64];\n};\n\n/*\n * ioctls for /dev/gvm fds:\n */\n#define GVM_GET_API_VERSION       __IO(GVMIO,   0x00)\n#define GVM_CREATE_VM             __IO(GVMIO,   0x01) /* returns a VM fd */\n#define GVM_GET_MSR_INDEX_LIST    __IOWR(GVMIO, 0x02, struct gvm_msr_list)\n/*\n * Check if a gvm extension is available.  Argument is extension number,\n * return is 1 (yes) or 0 (no, sorry).\n */\n#define GVM_CHECK_EXTENSION       __IO(GVMIO,   0x03)\n/*\n * Get size for mmap(vcpu_fd)\n */\n#define GVM_GET_VCPU_MMAP_SIZE    __IO(GVMIO,   0x04) /* in bytes */\n#define GVM_GET_SUPPORTED_CPUID   __IOWR(GVMIO, 0x05, struct gvm_cpuid)\n#define GVM_GET_EMULATED_CPUID\t  __IOWR(GVMIO, 0x09, struct gvm_cpuid)\n/*\n * Extension capability list.\n */\n#define GVM_CAP_IRQCHIP\t  0\n#define GVM_CAP_HLT\t  1\n#define GVM_CAP_MMU_SHADOW_CACHE_CONTROL 2\n#define GVM_CAP_VAPIC 6\n#define GVM_CAP_NR_VCPUS 9       /* returns recommended max vcpus per vm */\n#define GVM_CAP_NR_MEMSLOTS 10   /* returns max memory slots per vm */\n#define GVM_CAP_SYNC_MMU 16  /* Changes to host mmap are reflected in guest */\n#define GVM_CAP_IOMMU 18\n#define GVM_CAP_USER_NMI 22\n#define GVM_CAP_IRQ_ROUTING 25\n#define GVM_CAP_SET_BOOT_CPU_ID 34\n#define GVM_CAP_SET_IDENTITY_MAP_ADDR 37\n#define GVM_CAP_PCI_SEGMENT 47\n#define GVM_CAP_INTR_SHADOW 49\n#define GVM_CAP_ENABLE_CAP 54\n#define GVM_CAP_XSAVE 55\n#define GVM_CAP_XCRS 56\n#define GVM_CAP_MAX_VCPUS 66       /* returns max vcpus per vm */\n#define GVM_CAP_SW_TLB 69\n#define GVM_CAP_SYNC_REGS 74\n#define GVM_CAP_READONLY_MEM 81\n#define GVM_CAP_EXT_EMUL_CPUID 95\n#define GVM_CAP_IOAPIC_POLARITY_IGNORED 97\n#define GVM_CAP_ENABLE_CAP_VM 98\n#define GVM_CAP_VM_ATTRIBUTES 101\n#define GVM_CAP_CHECK_EXTENSION_VM 105\n#define GVM_CAP_DISABLE_QUIRKS 116\n#define GVM_CAP_X86_SMM 117\n#define GVM_CAP_MULTI_ADDRESS_SPACE 118\n#define GVM_CAP_GUEST_DEBUG_HW_BPS 119\n#define GVM_CAP_GUEST_DEBUG_HW_WPS 120\n#define GVM_CAP_VCPU_ATTRIBUTES 127\n#define GVM_CAP_MAX_VCPU_ID 128\n#define GVM_CAP_X2APIC_API 129\n#define GVM_CAP_MSI_DEVID 131\n\nstruct gvm_irq_routing_irqchip {\n\t__u32 irqchip;\n\t__u32 pin;\n};\n\nstruct gvm_irq_routing_msi {\n\t__u32 address_lo;\n\t__u32 address_hi;\n\t__u32 data;\n\tunion {\n\t\t__u32 pad;\n\t\t__u32 devid;\n\t};\n};\n\nstruct gvm_irq_routing_hv_sint {\n\t__u32 vcpu;\n\t__u32 sint;\n};\n\n/* gsi routing entry types */\n#define GVM_IRQ_ROUTING_IRQCHIP 1\n#define GVM_IRQ_ROUTING_MSI 2\n#define GVM_IRQ_ROUTING_HV_SINT 4\n\nstruct gvm_irq_routing_entry {\n\t__u32 gsi;\n\t__u32 type;\n\t__u32 flags;\n\t__u32 pad;\n\tunion {\n\t\tstruct gvm_irq_routing_irqchip irqchip;\n\t\tstruct gvm_irq_routing_msi msi;\n\t\tstruct gvm_irq_routing_hv_sint hv_sint;\n\t\t__u32 pad[8];\n\t} u;\n};\n\nstruct gvm_irq_routing {\n\t__u32 nr;\n\t__u32 flags;\n\tstruct gvm_irq_routing_entry entries[0];\n};\n\n/* For GVM_CAP_SW_TLB */\n\n#define GVM_MMU_FSL_BOOKE_NOHV\t\t0\n#define GVM_MMU_FSL_BOOKE_HV\t\t1\n\nstruct gvm_config_tlb {\n\t__u64 params;\n\t__u64 array;\n\t__u32 mmu_type;\n\t__u32 array_len;\n};\n\nstruct gvm_dirty_tlb {\n\t__u64 bitmap;\n\t__u32 num_dirty;\n};\n\n/* Available with GVM_CAP_ONE_REG */\n\n#define GVM_REG_ARCH_MASK\t0xff00000000000000ULL\n#define GVM_REG_GENERIC\t\t0x0000000000000000ULL\n\n/*\n * Architecture specific registers are to be defined in arch headers and\n * ORed with the arch identifier.\n */\n#define GVM_REG_PPC\t\t0x1000000000000000ULL\n#define GVM_REG_X86\t\t0x2000000000000000ULL\n#define GVM_REG_IA64\t\t0x3000000000000000ULL\n#define GVM_REG_ARM\t\t0x4000000000000000ULL\n#define GVM_REG_S390\t\t0x5000000000000000ULL\n#define GVM_REG_ARM64\t\t0x6000000000000000ULL\n#define GVM_REG_MIPS\t\t0x7000000000000000ULL\n\n#define GVM_REG_SIZE_SHIFT\t52\n#define GVM_REG_SIZE_MASK\t0x00f0000000000000ULL\n#define GVM_REG_SIZE_U8\t\t0x0000000000000000ULL\n#define GVM_REG_SIZE_U16\t0x0010000000000000ULL\n#define GVM_REG_SIZE_U32\t0x0020000000000000ULL\n#define GVM_REG_SIZE_U64\t0x0030000000000000ULL\n#define GVM_REG_SIZE_U128\t0x0040000000000000ULL\n#define GVM_REG_SIZE_U256\t0x0050000000000000ULL\n#define GVM_REG_SIZE_U512\t0x0060000000000000ULL\n#define GVM_REG_SIZE_U1024\t0x0070000000000000ULL\n\nstruct gvm_reg_list {\n\t__u64 n; /* number of regs */\n\t__u64 reg[0];\n};\n\nstruct gvm_one_reg {\n\t__u64 id;\n\t__u64 addr;\n};\n\n#define GVM_MSI_VALID_DEVID\t(1U << 0)\nstruct gvm_msi {\n\t__u32 address_lo;\n\t__u32 address_hi;\n\t__u32 data;\n\t__u32 flags;\n\t__u32 devid;\n\t__u8  pad[12];\n};\n\n/*\n * ioctls for VM fds\n */\n#define GVM_SET_MEMORY_REGION     __IOW(GVMIO,  0x40, struct gvm_memory_region)\n/*\n * GVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns\n * a vcpu fd.\n */\n#define GVM_CREATE_VCPU           __IO(GVMIO,   0x41)\n#define GVM_GET_DIRTY_LOG         __IOW(GVMIO,  0x42, struct gvm_dirty_log)\n/* GVM_SET_MEMORY_ALIAS is obsolete: */\n#define GVM_SET_MEMORY_ALIAS      __IOW(GVMIO,  0x43, struct gvm_memory_alias)\n#define GVM_SET_NR_MMU_PAGES      __IO(GVMIO,   0x44)\n#define GVM_GET_NR_MMU_PAGES      __IO(GVMIO,   0x45)\n#define GVM_SET_USER_MEMORY_REGION __IOW(GVMIO, 0x46, \\\n\t\t\t\t\tstruct gvm_userspace_memory_region)\n#define GVM_SET_TSS_ADDR          __IO(GVMIO,   0x47)\n#define GVM_SET_IDENTITY_MAP_ADDR __IOW(GVMIO,  0x48, __u64)\n#define GVM_KICK_VCPU             __IO(GVMIO,   0x49)\n\n/* Device model IOC */\n#define GVM_CREATE_IRQCHIP        __IO(GVMIO,   0x60)\n#define GVM_GET_IRQCHIP           __IOWR(GVMIO, 0x62, struct gvm_irqchip)\n#define GVM_SET_IRQCHIP           __IOR(GVMIO,  0x63, struct gvm_irqchip)\n#define GVM_IRQ_LINE_STATUS       __IOWR(GVMIO, 0x67, struct gvm_irq_level)\n#define GVM_SET_GSI_ROUTING       __IOW(GVMIO,  0x6a, struct gvm_irq_routing)\n/* deprecated, replaced by GVM_ASSIGN_DEV_IRQ */\n#define GVM_ASSIGN_IRQ            __GVM_DEPRECATED_VM_R_0x70\n#define GVM_ASSIGN_DEV_IRQ        __IOW(GVMIO,  0x70, struct gvm_assigned_irq)\n#define GVM_REINJECT_CONTROL      __IO(GVMIO,   0x71)\n#define GVM_SET_BOOT_CPU_ID       __IO(GVMIO,   0x78)\n\n/*\n * ioctls for vcpu fds\n */\n#define GVM_RUN                   __IO(GVMIO,   0x80)\n#define GVM_VCPU_MMAP             __IO(GVMIO,   0x87)\n#define GVM_GET_REGS              __IOR(GVMIO,  0x81, struct gvm_regs)\n#define GVM_SET_REGS              __IOW(GVMIO,  0x82, struct gvm_regs)\n#define GVM_GET_SREGS             __IOR(GVMIO,  0x83, struct gvm_sregs)\n#define GVM_SET_SREGS             __IOW(GVMIO,  0x84, struct gvm_sregs)\n#define GVM_TRANSLATE             __IOWR(GVMIO, 0x85, struct gvm_translation)\n#define GVM_INTERRUPT             __IOW(GVMIO,  0x86, struct gvm_interrupt)\n#define GVM_GET_MSRS              __IOWR(GVMIO, 0x88, struct gvm_msrs)\n#define GVM_SET_MSRS              __IOW(GVMIO,  0x89, struct gvm_msrs)\n#define GVM_GET_FPU               __IOR(GVMIO,  0x8c, struct gvm_fpu)\n#define GVM_SET_FPU               __IOW(GVMIO,  0x8d, struct gvm_fpu)\n#define GVM_GET_LAPIC             __IOR(GVMIO,  0x8e, struct gvm_lapic_state)\n#define GVM_SET_LAPIC             __IOW(GVMIO,  0x8f, struct gvm_lapic_state)\n#define GVM_SET_CPUID             __IOW(GVMIO,  0x90, struct gvm_cpuid)\n#define GVM_GET_CPUID             __IOWR(GVMIO, 0x91, struct gvm_cpuid)\n/* Available with GVM_CAP_VAPIC */\n#define GVM_TPR_ACCESS_REPORTING  __IOWR(GVMIO, 0x92, struct gvm_tpr_access_ctl)\n/* Available with GVM_CAP_VAPIC */\n#define GVM_SET_VAPIC_ADDR        __IOW(GVMIO,  0x93, struct gvm_vapic_addr)\n#define GVM_GET_MP_STATE          __IOR(GVMIO,  0x98, struct gvm_mp_state)\n#define GVM_SET_MP_STATE          __IOW(GVMIO,  0x99, struct gvm_mp_state)\n/* Available with GVM_CAP_USER_NMI */\n#define GVM_NMI                   __IO(GVMIO,   0x9a)\n/* Available with GVM_CAP_SET_GUEST_DEBUG */\n#define GVM_SET_GUEST_DEBUG       __IOW(GVMIO,  0x9b, struct gvm_guest_debug)\n/* Available with GVM_CAP_VCPU_EVENTS */\n#define GVM_GET_VCPU_EVENTS       __IOR(GVMIO,  0x9f, struct gvm_vcpu_events)\n#define GVM_SET_VCPU_EVENTS       __IOW(GVMIO,  0xa0, struct gvm_vcpu_events)\n/* Available with GVM_CAP_DEBUGREGS */\n#define GVM_GET_DEBUGREGS         __IOR(GVMIO,  0xa1, struct gvm_debugregs)\n#define GVM_SET_DEBUGREGS         __IOW(GVMIO,  0xa2, struct gvm_debugregs)\n/*\n * vcpu version available with GVM_ENABLE_CAP\n * vm version available with GVM_CAP_ENABLE_CAP_VM\n */\n#define GVM_ENABLE_CAP            __IOW(GVMIO,  0xa3, struct gvm_enable_cap)\n/* Available with GVM_CAP_XSAVE */\n#define GVM_GET_XSAVE\t\t  __IOR(GVMIO,  0xa4, struct gvm_xsave)\n#define GVM_SET_XSAVE\t\t  __IOW(GVMIO,  0xa5, struct gvm_xsave)\n/* Available with GVM_CAP_XCRS */\n#define GVM_GET_XCRS\t\t  __IOR(GVMIO,  0xa6, struct gvm_xcrs)\n#define GVM_SET_XCRS\t\t  __IOW(GVMIO,  0xa7, struct gvm_xcrs)\n/* Available with GVM_CAP_SW_TLB */\n#define GVM_DIRTY_TLB\t\t  __IOW(GVMIO,  0xaa, struct gvm_dirty_tlb)\n/* Available with GVM_CAP_X86_SMM */\n#define GVM_SMI                   __IO(GVMIO,   0xb7)\n\n#define GVM_X2APIC_API_USE_32BIT_IDS            (1ULL << 0)\n#define GVM_X2APIC_API_DISABLE_BROADCAST_QUIRK  (1ULL << 1)\n\n#endif /*GVM_INTERFACE_H */\n"
  },
  {
    "path": "gvm/gvm.c",
    "content": "#include \"gvm.h\"\n\n#include \"../krnl386/kernel16_private.h\"\n#include \"wownt32.h\"\n\nBOOL initflag;\nUINT8 *mem;\n#define KRNL386 \"krnl386.exe16\"\nBOOL is_single_step = FALSE;\n\n\nDWORD WINAPI panic_msgbox(LPVOID data)\n{\n    MessageBoxA(NULL, (LPCSTR)data, \"GVM Hypervisor error\", MB_OK | MB_ICONERROR);\n    HeapFree(GetProcessHeap(), 0, data);\n    return 0;\n}\n#define PANIC_HRESULT(msg, hresult) panic_hresult(msg, hresult, __FUNCTION__, __LINE__)\n#ifdef _MSC_VER\n#define PANIC(msg, ...) panic(\"%s:%d\\n\" msg, __FUNCTION__, __LINE__, __VA_ARGS__)\n#else\n#define PANIC(msg, ...) panic(\"%s:%d\\n\" msg, __FUNCTION__, __LINE__ __VA_OPT__(,) __VA_ARGS__)\n#endif\n\n/* _Noreturn */\nvoid panic(const char *msg, ...)\n{\n    LPSTR buffer = HeapAlloc(GetProcessHeap(), 0, 512);\n    DWORD threadId;\n    va_list arg;\n\n    va_start(arg, msg);\n    vsnprintf(buffer, 512, msg, arg);\n    va_end(arg);\n    HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)panic_msgbox, buffer, 0, &threadId);\n    WaitForSingleObject(hThread, INFINITE);\n    ExitThread(1);\n    return;\n}\n\n/* _Noreturn */\nvoid panic_hresult(const char *msg, HRESULT result, const char *func, int line)\n{\n    LPSTR buffer = HeapAlloc(GetProcessHeap(), 0, 512);\n    DWORD threadId;\n    LPSTR err_str = NULL;\n    FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, result, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&err_str, 0, NULL);\n    snprintf(buffer, 512, \"%s:%d\\n%s HRESULT=%s(%08x)\", func, line, msg, err_str, result);\n    LocalFree(err_str);\n    HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)panic_msgbox, buffer, 0, &threadId);\n    WaitForSingleObject(hThread, INFINITE);\n    ExitThread(1);\n    return;\n}\n\nstatic HMODULE krnl386 = 0;\n\n\nPVOID dynamic_setWOW32Reserved(PVOID w)\n{\n    static PVOID(*setWOW32Reserved)(PVOID);\n    if (!setWOW32Reserved)\n    {\n        if (!krnl386)\n            krnl386 = LoadLibraryA(KRNL386);\n        setWOW32Reserved = (PVOID(*)(PVOID))GetProcAddress(krnl386, \"setWOW32Reserved\");\n    }\n    return setWOW32Reserved(w);\n}\nPVOID dynamic_getWOW32Reserved()\n{\n    static PVOID(*getWOW32Reserved)();\n    if (!getWOW32Reserved)\n    {\n        if (!krnl386)\n            krnl386 = LoadLibraryA(KRNL386);\n        getWOW32Reserved = (PVOID(*)())GetProcAddress(krnl386, \"getWOW32Reserved\");\n    }\n    return getWOW32Reserved();\n}\nWINE_VM86_TEB_INFO *dynamic_getGdiTebBatch()\n{\n    static WINE_VM86_TEB_INFO*(*getGdiTebBatch)();\n    if (!getGdiTebBatch)\n    {\n        if (!krnl386)\n            krnl386 = LoadLibraryA(KRNL386);\n        getGdiTebBatch = (WINE_VM86_TEB_INFO*(*)())GetProcAddress(krnl386, \"getGdiTebBatch\");\n    }\n    return getGdiTebBatch();\n}\nvoid dynamic__wine_call_int_handler(CONTEXT *context, BYTE intnum)\n{\n    static void(*__wine_call_int_handler)(CONTEXT *context, BYTE intnum);\n    if (!__wine_call_int_handler)\n    {\n        if (!krnl386)\n            krnl386 = LoadLibraryA(KRNL386);\n        __wine_call_int_handler = (void(*)(CONTEXT *context, BYTE intnum))GetProcAddress(krnl386, \"__wine_call_int_handler\");\n    }\n    __wine_call_int_handler(context, intnum);\n}\n/***********************************************************************\n*           SELECTOR_SetEntries\n*\n* Set the LDT entries for an array of selectors.\n*/\nstatic BOOL SELECTOR_SetEntries(WORD sel, const void *base, DWORD size, unsigned char flags)\n{\n    LDT_ENTRY entry;\n    WORD i, count;\n\n    wine_ldt_set_base(&entry, base);\n    wine_ldt_set_limit(&entry, size - 1);\n    wine_ldt_set_flags(&entry, flags);\n    count = (size + 0xffff) / 0x10000;\n    for (i = 0; i < count; i++)\n    {\n        if (wine_ldt_set_entry(sel + (i << 3), &entry) < 0) return FALSE;\n        wine_ldt_set_base(&entry, (char*)wine_ldt_get_base(&entry) + 0x10000);\n        /* yep, Windows sets limit like that, not 64K sel units */\n        wine_ldt_set_limit(&entry, wine_ldt_get_limit(&entry) - 0x10000);\n    }\n    return TRUE;\n}\nvoid wine_ldt_free_entries(unsigned short sel, int count);\n/***********************************************************************\n*           SELECTOR_AllocBlock\n*\n* Allocate selectors for a block of linear memory.\n*/\nWORD SELECTOR_AllocBlock(const void *base, DWORD size, unsigned char flags)\n{\n    WORD sel, count;\n\n    if (!size) return 0;\n    count = (size + 0xffff) / 0x10000;\n    if ((sel = wine_ldt_alloc_entries(count)))\n    {\n        if (SELECTOR_SetEntries(sel, base, size, flags)) return sel;\n        wine_ldt_free_entries(sel, count);\n        sel = 0;\n    }\n    return sel;\n}\n__declspec(dllimport) LDT_ENTRY wine_ldt[8192];\n\nLDT_ENTRY gdt[];\nvoid load_seg(struct gvm_segment *segment, WORD sel)\n{\n    const LDT_ENTRY *entry = (sel & 0x4 || (sel >> 3) >= 512) ? wine_ldt : gdt;\n    segment->selector = sel;\n    segment->base = (UINT64)wine_ldt_get_base(entry + (sel >> 3));\n    segment->limit =  (UINT64)wine_ldt_get_limit(entry + (sel >> 3));\n    segment->type = entry[sel >> 3].HighWord.Bits.Type & 15;\n    segment->s = entry[sel >> 3].HighWord.Bits.Type >> 4;\n    segment->dpl = entry[sel >> 3].HighWord.Bits.Dpl;\n    segment->present = entry[sel >> 3].HighWord.Bits.Pres;\n    segment->avl = entry[sel >> 3].HighWord.Bits.Sys;\n    segment->l = entry[sel >> 3].HighWord.Bits.Reserved_0;\n    segment->db = entry[sel >> 3].HighWord.Bits.Default_Big;\n    segment->g = entry[sel >> 3].HighWord.Bits.Granularity;\n}\n\nvoid set_eflags(struct gvm_vcpu_state *state, DWORD eflags)\n{\n    *(uint32*)&state->regs.rflags = eflags | 2 | 0x3000 | (is_single_step ? 0x100 : 0) | 0x200;\n}\n\nvoid load_context_to_state(CONTEXT *context, vcpu_state *state)\n{\n    load_seg(get_gs(state), (WORD)context->SegGs);\n    load_seg(get_fs(state), (WORD)context->SegFs);\n    load_seg(get_es(state), (WORD)context->SegEs);\n    load_seg(get_ds(state), (WORD)context->SegDs);\n    load_seg(get_cs(state), (WORD)context->SegCs);\n    load_seg(get_ss(state), (WORD)context->SegSs);\n\n    set_edi(state, context->Edi);\n    set_esi(state, context->Esi);\n    set_ebx(state, context->Ebx);\n    set_edx(state, context->Edx);\n    set_ecx(state, context->Ecx);\n    set_eax(state, context->Eax);\n\n    set_ebp(state, context->Ebp);\n    set_eip(state, context->Eip);\n    set_eflags(state, context->EFlags);\n    set_esp(state, context->Esp);\n}\n\nvoid save_context_from_state(CONTEXT *context, vcpu_state *state)\n{\n    context->SegGs = get_seg_selector(get_gs(state));\n    context->SegFs = get_seg_selector(get_fs(state));\n    context->SegEs = get_seg_selector(get_es(state));\n    context->SegDs = get_seg_selector(get_ds(state));\n    context->SegCs = get_seg_selector(get_cs(state));\n    context->SegSs = get_seg_selector(get_ss(state));\n\n    context->Edi = get_edi(state);\n    context->Esi = get_esi(state);\n    context->Ebx = get_ebx(state);\n    context->Edx = get_edx(state);\n    context->Ecx = get_ecx(state);\n    context->Eax = get_eax(state);\n\n    context->Ebp = get_ebp(state);\n    context->Eip = get_eip(state);\n    context->EFlags = get_eflags(state) & ~2;\n    context->Esp = get_esp(state);\n    dynamic_setWOW32Reserved((PVOID)(get_seg_selector(get_ss(state)) << 16 | get_sp(state)));\n}\n\n#include <pshpack1.h>\ntypedef enum\n{\n    INT_GATE_TASK = 5,\n    INT_GATE_INT16 = 6,\n    INT_GATE_TRAP16 = 7,\n    INT_GATE_INT32 = 0xE,\n    INT_GATE_TRAP32 = 0xF,\n} interrupt_gate_type;\ntypedef struct\n{\n    WORD offset_low;\n    WORD selector;\n    BYTE reserved;\n    union\n    {\n        struct\n        {\n            BYTE type : 4 /* INT_GATE_TASK */, S : 1, DPL : 2, P : 1;\n        };\n        BYTE data;\n    };\n    WORD offset_high;\n} interrupt_gate;\n_STATIC_ASSERT(sizeof(interrupt_gate) == 8);\n#include <poppack.h>\n\n\nLPVOID trap_int;\n\n#ifdef _MSC_VER\n__declspec(align(4096))\n#endif\ninterrupt_gate idt[256];\n#ifdef __GNUC__\n__attribute__ ((aligned(4096)))\n#endif\n;\n#ifdef _MSC_VER\n__declspec(align(4096))\n#endif\nLDT_ENTRY gdt[512] = { 0 };\n#ifdef __GNUC__\n__attribute__ ((aligned(4096)))\n#endif\n;\nWORD seg_cs;\nWORD seg_ds;\n\ntypedef DWORD (*DOSVM_inport_t)(int port, int size);\ntypedef void (*DOSVM_outport_t)(int port, int size, DWORD value);\nDOSVM_inport_t DOSVM_inport;\nDOSVM_outport_t DOSVM_outport;\n\nHANDLE inject_event;\nCRITICAL_SECTION inject_crit_section;\ntypedef VOID (WINAPI *GetpWin16Lock_t)(SYSLEVEL **lock);\nGetpWin16Lock_t pGetpWin16Lock;\nSYSLEVEL *win16_syslevel;\ntypedef BOOL(WINAPI *WOWCallback16Ex_t)(DWORD vpfn16, DWORD dwFlags,\n    DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode);\nWOWCallback16Ex_t pWOWCallback16Ex;\ntypedef BOOL (WINAPI *vm_inject_t)(DWORD vpfn16, DWORD dwFlags,\n    DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode);\nBOOL WINAPI vm_inject(DWORD vpfn16, DWORD dwFlags,\n    DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode);\n__declspec(dllexport) DWORD wine_call_to_16_vm86(DWORD target, DWORD cbArgs, PEXCEPTION_HANDLER handler,\n    void(*from16_reg)(void),\n    LONG(*__wine_call_from_16)(void),\n    int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context),\n    void(*__wine_call_to_16_ret)(void),\n    int dasm,\n    BOOL vm86,\n    void *memory_base,\n    pm_interrupt_handler pih);\n\nstatic CRITICAL_SECTION running_critical_section;\n\nstatic HANDLE hDevice;\nstatic HANDLE hVM;\n#ifdef _MSC_VER\n__declspec(thread)\n#elif defined(__GUNC__)\n__thread\n#else\n_Thread_local\n#endif\nHANDLE hVCPU;\nstatic void init_vcpu();\nstatic HANDLE get_vcpu_handle()\n{\n    if (!hVCPU)\n    {\n        init_vcpu();\n    }\n    return hVCPU;\n}\n#ifdef _MSC_VER\n__declspec(thread)\n#elif defined(__GUNC__)\n__thread\n#else\n_Thread_local\n#endif\nstruct gvm_run *gvm_run;\n\n\nstatic void get_vcpu_regs(vcpu_state *state)\n{\n    if (!DeviceIoControl(get_vcpu_handle(), GVM_GET_REGS, NULL, 0, &state->regs, sizeof(state->regs), NULL, NULL))\n    {\n        PANIC(\"GVM_GET_REGS\");\n        return;\n    }\n    if (!DeviceIoControl(get_vcpu_handle(), GVM_GET_SREGS, NULL, 0, &state->sregs, sizeof(state->sregs), NULL, NULL))\n    {\n        PANIC(\"GVM_GET_SREGS\");\n        return;\n    }\n}\n\nstatic void set_vcpu_regs(vcpu_state *state)\n{\n    if (!DeviceIoControl(get_vcpu_handle(), GVM_SET_REGS, &state->regs, sizeof(state->regs), NULL, 0, NULL, NULL))\n    {\n        PANIC(\"GVM_SET_REGS\");\n        return;\n    }\n    if (!DeviceIoControl(get_vcpu_handle(), GVM_SET_SREGS, &state->sregs, sizeof(state->sregs), NULL, 0, NULL, NULL))\n    {\n        PANIC(\"GVM_SET_SREGS\");\n        return;\n    }\n}\n\nunsigned long vcpu_id = 0;\nstatic void init_vcpu()\n{\n    struct gvm_vcpu_state state;\n    LONGLONG handle64;\n    if (!DeviceIoControl(hVM, GVM_CREATE_VCPU, &vcpu_id, sizeof(vcpu_id), &handle64, sizeof(handle64), NULL, NULL))\n    {\n        PANIC(\"failed to create vcpu\");\n        return;\n    }\n    InterlockedAdd(&vcpu_id, 1);\n    hVCPU = (HANDLE)handle64;\n    if (!DeviceIoControl(get_vcpu_handle(), GVM_VCPU_MMAP, NULL, 0, &handle64, sizeof(handle64), NULL, NULL))\n    {\n        PANIC(\"GVM_VCPU_MMAP\");\n        return;\n    }\n    gvm_run = (struct gvm_run*)handle64;\n    get_vcpu_regs(&state);\n    /* setup initial states */\n    state.sregs.gdt.base = (UINT64)gdt;\n    state.sregs.gdt.limit = 0x7ff;\n\n    state.sregs.ldt.selector = 0x18;\n    state.sregs.ldt.base = (UINT64)&wine_ldt[0];\n    state.sregs.ldt.limit = 65535;\n\n    UINT32 *tss = (UINT32 *)gdt + 0x200;\n    state.sregs.tr.selector = 0x18;\n    state.sregs.tr.base = (UINT64)tss;\n    state.sregs.tr.limit = 0x64;\n    state.sregs.tr.type = 11;\n    state.sregs.tr.present = 1;\n\n    state.sregs.idt.limit = 0x8 * 256 - 1;\n    state.sregs.idt.base = (SIZE_T)&idt[0];\n    state.sregs.cr0 |= 1;\n    state.regs.rflags |= 0x200;\n    set_vcpu_regs(&state);\n}\nBOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)\n{\n    if (fdwReason != DLL_THREAD_DETACH)\n    {\n        return TRUE;\n    }\n    if (hVCPU)\n    {\n        CloseHandle(hVCPU);\n        hVCPU = NULL;\n        gvm_run = NULL;\n    }\n    return TRUE;\n}\nBOOL init_vm86(BOOL vm86)\n{\n    int type = 0;\n    LONGLONG handle64;\n    InitializeCriticalSection(&running_critical_section);\n#ifdef _MSC_VER\n    __asm\n    {\n        mov seg_cs, cs\n        mov seg_ds, ds\n    }\n#else\n    seg_cs = wine_get_cs();\n    seg_ds = wine_get_ds();\n#endif\n    hDevice = CreateFileA(\"\\\\\\\\.\\\\gvm\", GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);\n    if (!hDevice)\n    {\n        PANIC(\"failed to open gvm\");\n        return FALSE;\n    }\n    if (!DeviceIoControl(hDevice, GVM_CREATE_VM, &type, sizeof(type), &handle64, sizeof(handle64), NULL, NULL))\n    {\n        PANIC(\"failed to create vm\");\n        return FALSE;\n    }\n    hVM = (HANDLE)handle64;\n    trap_int = VirtualAlloc(NULL, 0x10000, MEM_COMMIT, PAGE_READWRITE);\n    DWORD trap_addr = (DWORD)trap_int;\n    gdt[1].BaseLow = trap_addr & 0xffff;\n    gdt[1].HighWord.Bytes.BaseMid = (trap_addr >> 16) & 0xff;\n    gdt[1].HighWord.Bytes.BaseHi = (trap_addr >> 24) & 0xff;\n    gdt[1].LimitLow = 0xffff;\n    gdt[1].HighWord.Bytes.Flags1 = 0x9b;\n    gdt[1].HighWord.Bytes.Flags2 = 0x40;\n    gdt[2].BaseLow = trap_addr & 0xffff;\n    gdt[2].HighWord.Bytes.BaseMid = (trap_addr >> 16) & 0xff;\n    gdt[2].HighWord.Bytes.BaseHi = (trap_addr >> 24) & 0xff;\n    gdt[2].LimitLow = 0xffff;\n    gdt[2].HighWord.Bytes.Flags1 = 0x93;\n    gdt[2].HighWord.Bytes.Flags2 = 0x40;\n    GetThreadSelectorEntry(GetCurrentThread(), seg_cs, gdt + (seg_cs >> 3));\n    GetThreadSelectorEntry(GetCurrentThread(), seg_ds, gdt + (seg_ds >> 3));\n    UINT32 *tss = (UINT32 *)gdt + 0x200;\n    tss[1] = 0x10000; // SP0\n    tss[2] = 0x10; // SS0\n\n    for (int i = 0; i < 256; i++)\n    {\n        idt[i].DPL = 3;\n        idt[i].type = INT_GATE_INT32;\n        idt[i].selector = 0x0b;\n        idt[i].P = 1;\n        idt[i].offset_low = i;\n        idt[i].offset_high = 0;\n    }\n    memset(trap_int, 0xF4, 256); /* hlt */\n    ((char *)trap_int)[256] = 0xcf; /* iret */\n    if (!krnl386)\n        krnl386 = LoadLibraryA(KRNL386);\n    pWOWCallback16Ex = (WOWCallback16Ex_t)GetProcAddress(krnl386, \"K32WOWCallback16Ex\");\n    void(WINAPI *set_vm_inject_cb)(vm_inject_t) = (void(WINAPI *)(vm_inject_t))GetProcAddress(krnl386, \"set_vm_inject_cb\");\n    set_vm_inject_cb(vm_inject);\n    inject_event = CreateEventW(NULL, TRUE, FALSE, NULL);\n    InitializeCriticalSection(&inject_crit_section);\n    pGetpWin16Lock = (GetpWin16Lock_t)GetProcAddress(krnl386, \"GetpWin16Lock\");\n    pGetpWin16Lock(&win16_syslevel);\n    DOSVM_inport = (DOSVM_inport_t)GetProcAddress(krnl386, \"DOSVM_inport\");\n    DOSVM_outport = (DOSVM_outport_t)GetProcAddress(krnl386, \"DOSVM_outport\");\n    return TRUE;\n}\n\nvoid PUSH16(struct gvm_vcpu_state *state, WORD val)\n{\n    if (state->sregs.ss.db)\n    {\n        *(uint32*)&state->regs.rsp -= 2;\n        LPWORD stack = (LPWORD)(state->sregs.ss.base + (uint32)state->regs.rsp);\n        *stack = val;\n    }\n    else\n    {\n        *(uint16*)&state->regs.rsp -= 2;\n        LPWORD stack = (LPWORD)(state->sregs.ss.base + (uint16)state->regs.rsp);\n        *stack = val;\n    }\n}\nvoid PUSH32(struct gvm_vcpu_state *state, DWORD val)\n{\n    if (state->sregs.ss.db)\n    {\n        *(uint32*)&state->regs.rsp -= 4;\n        LPDWORD stack = (LPDWORD)(state->sregs.ss.base + (uint32)state->regs.rsp);\n        *stack = val;\n    }\n    else\n    {\n        *(uint16*)&state->regs.rsp -= 4;\n        LPDWORD stack = (LPDWORD)(state->sregs.ss.base + (uint16)state->regs.rsp);\n        *stack = val;\n    }\n}\nWORD POP16(struct gvm_vcpu_state *state)\n{\n    if (state->sregs.ss.db)\n    {\n        LPWORD stack = (LPWORD)(state->sregs.ss.base + (uint32)state->regs.rsp);\n        *(uint32*)&state->regs.rsp += 2;\n        return *stack;\n    }\n    else\n    {\n        LPWORD stack = (LPWORD)(state->sregs.ss.base + (uint16)state->regs.rsp);\n        *(uint16*)&state->regs.rsp += 2;\n        return *stack;\n    }\n}\nDWORD POP32(struct gvm_vcpu_state *state)\n{\n    if (state->sregs.ss.db)\n    {\n        LPDWORD stack = (LPDWORD)(state->sregs.ss.base + (uint32)state->regs.rsp);\n        *(uint32*)&state->regs.rsp += 4;\n        return *stack;\n    }\n    else\n    {\n        LPDWORD stack = (LPDWORD)(state->sregs.ss.base + (uint16)state->regs.rsp);\n        *(uint16*)&state->regs.rsp += 4;\n        return *stack;\n    }\n}\nWORD PEEK16(struct gvm_vcpu_state *state, int i)\n{\n    if (state->sregs.ss.db)\n    {\n        LPWORD stack = (LPWORD)(state->sregs.ss.base + (uint32)state->regs.rsp);\n        return stack[i];\n    }\n    else\n    {\n        LPWORD stack = (LPWORD)(state->sregs.ss.base + (uint16)state->regs.rsp);\n        return stack[i];\n    }\n}\nDWORD PEEK32(struct gvm_vcpu_state *state, int i)\n{\n    if (state->sregs.ss.db)\n    {\n        LPDWORD stack = (LPDWORD)(state->sregs.ss.base + (uint32)state->regs.rsp);\n        return stack[i];\n    }\n    else\n    {\n        LPDWORD stack = (LPDWORD)(state->sregs.ss.base + (uint16)state->regs.rsp);\n        return stack[i];\n    }\n}\n\nvoid relay(LPVOID relay_func, BOOL reg, vcpu_state *state, DWORD ret_addr, DWORD cbArgs, PEXCEPTION_HANDLER handler, DWORD old_frame16)\n{\n    unsigned char *stack1 = (unsigned char*)(get_seg_base(get_ss(state))+ get_sp(state));\n    unsigned char *stack = stack1;\n    /*\n    * (sp+24) word   first 16-bit arg\n    * (sp+22) word   cs\n    * (sp+20) word   ip\n    * (sp+18) word   bp\n    * (sp+14) long   32-bit entry point (reused for Win16 mutex recursion count)\n    * (sp+12) word   ip of actual entry point (necessary for relay debugging)\n    * (sp+8)  long   relay (argument conversion) function entry point\n    * (sp+4)  long   cs of 16-bit entry point\n    * (sp)    long   ip of 16-bit entry point\n    */\n    DWORD ip = *(DWORD*)stack;\n    stack += sizeof(DWORD);\n    DWORD cs = *(DWORD*)stack;\n    stack += sizeof(DWORD);\n    DWORD relay = *(DWORD*)stack;\n    stack += sizeof(DWORD);\n    WORD ip2 = *(WORD*)stack;\n    stack += sizeof(WORD);\n    DWORD entry = *(DWORD*)stack;\n    //for debug\n    void *entryf = (void*)entry;\n    stack += sizeof(DWORD);\n    WORD bp = *(WORD*)stack;\n    stack += sizeof(WORD);\n    WORD ip19 = *(WORD*)stack;\n    stack += sizeof(WORD);\n    WORD cs16 = *(WORD*)stack;\n    stack += sizeof(WORD);\n    WORD *args = (WORD*)stack;\n    set_eip(state, ip);\n    load_seg(get_cs(state), (WORD)cs);\n#include <pshpack1.h>\n    /* 16-bit stack layout after __wine_call_from_16() */\n    typedef struct _STACK16FRAME\n    {\n        struct STACK32FRAME *frame32;        /* 00 32-bit frame from last CallTo16() */\n        DWORD         edx;            /* 04 saved registers */\n        DWORD         ecx;            /* 08 */\n        DWORD         ebp;            /* 0c */\n        WORD          ds;             /* 10 */\n        WORD          es;             /* 12 */\n        WORD          fs;             /* 14 */\n        WORD          gs;             /* 16 */\n        DWORD         callfrom_ip;    /* 18 callfrom tail IP */\n        DWORD         module_cs;      /* 1c module code segment */\n        DWORD         relay;          /* 20 relay function address */\n        WORD          entry_ip;       /* 22 entry point IP */\n        DWORD         entry_point;    /* 26 API entry point to call, reused as mutex count */\n        WORD          bp;             /* 2a 16-bit stack frame chain */\n        WORD          ip;             /* 2c return address */\n        WORD          cs;             /* 2e */\n    } STACK16FRAME;\n#include <poppack.h>\n    CONTEXT context;\n    STACK32FRAME dummy_stack32 = { 0 };\n    dummy_stack32.retaddr = ret_addr;\n    dummy_stack32.nb_args = cbArgs;\n    dummy_stack32.frame.Handler = handler;\n    DWORD osp = get_esp(state);\n    PUSH16(state, get_seg_selector(get_gs(state)));\n    PUSH16(state, get_seg_selector(get_fs(state)));\n    PUSH16(state, get_seg_selector(get_es(state)));\n    PUSH16(state, get_seg_selector(get_ds(state)));\n    PUSH32(state, get_ebp(state));\n    PUSH32(state, get_ecx(state));\n    PUSH32(state, get_edx(state));\n    PUSH32(state, osp);\n    save_context_from_state(&context, state);\n    STACK16FRAME *oa = (STACK16FRAME*)wine_ldt_get_ptr((WORD)context.SegSs, context.Esp);\n    DWORD ooo = (WORD)context.Esp;\n    int off = 0;\n    if (reg)\n    {\n        context.Esp = osp + (SIZE_T)stack - (SIZE_T)stack1 - 4;\n        off = ooo - context.Esp;\n        context.Ebp = (context.Ebp & ~0xffff) | bp;\n        context.Eip = ip19;\n        context.SegCs = cs16;\n    }\n    int fret;\n    LPVOID old;\n    PCONTEXT pctx = NULL;\n#if _MSC_VER\n    __asm\n    {\n        mov old, esp\n        push cbArgs\n        push old /* target(esp) */\n        push retaddr /* retaddr */\n        push ebp\n        push ebx\n        push esi\n        push edi\n        push old_frame16 /* frame16 */\n        /* set up exception handler */\n        push handler\n        mov  eax, fs:[0]\n        push eax\n        mov dummy_stack32.frame.Next, eax\n        mov  fs : [0], esp\n        push cs\n        push 0\n        mov eax, [oa]\n        mov[eax], esp\n        lea eax, [context]\n        push eax\n        push args\n        push entry\n        call relay_func\n        add esp, 12 + 8\n        mov fret, eax\n        pop dword ptr fs : [0]\n        pop eax\n        jmp skip\n        retaddr :\n        mov pctx, ecx\n        skip:\n        mov esp, old\n    }\n#else\n    fret = ((int(*)(void *entry_point, unsigned char *args16, CONTEXT *context))relay_func)((void*)entry, (unsigned char*)args, &context);\n#endif\n    if (!reg)\n    {\n        set_eax(state, fret);\n    }\n    if (pctx)\n    {\n        /* Throw16 */\n        context = *pctx;\n        reg = TRUE;\n    }\n    if (!reg)\n    {\n        set_eax(state, fret);\n        context.SegSs = ((size_t)dynamic_getWOW32Reserved() >> 16) & 0xFFFF;\n        context.Esp = ((size_t)dynamic_getWOW32Reserved()) & 0xFFFF;\n        oa = (STACK16FRAME*)wine_ldt_get_ptr(context.SegSs, context.Esp);\n    }\n    else\n    {\n        oa = (STACK16FRAME*)wine_ldt_get_ptr(context.SegSs, context.Esp + off);\n    }\n    if (reg)\n        set_eax(state, (DWORD)context.Eax);\n    set_ecx(state, reg ? (DWORD)context.Ecx : (DWORD)oa->ecx);\n    if (reg)\n        set_edx(state, (DWORD)context.Edx);\n    else\n        set_edx(state, (DWORD)oa->edx);\n    set_ebx(state, (DWORD)context.Ebx);\n    set_esp(state, (DWORD)context.Esp);\n    set_ebp(state, (DWORD)context.Ebp);\n    set_esi(state, (DWORD)context.Esi);\n    set_edi(state, (DWORD)context.Edi);\n    load_seg(get_es(state), reg ? (WORD)context.SegEs : (WORD)oa->es);\n    load_seg(get_ss(state), (WORD)context.SegSs);\n    load_seg(get_ds(state), reg ? (WORD)context.SegDs : (WORD)oa->ds);\n    //ES, CS, SS, DS, FS, GS\n    /* Some programs expect that gs is not a valid selector! */\n    /* Some programs expect that fs is not a valid selector! */\n    /* win16 sets 0? */\n    load_seg(get_fs(state), 0);\n    load_seg(get_gs(state), 0);\n    if (reg)\n    {\n        if (!(ip19 != context.Eip || cs16 != context.SegCs))\n        {\n            context.Eip = oa->callfrom_ip;\n            context.SegCs = oa->module_cs;\n        }\n        else\n        {\n            /* CS:IP changed! */\n            context.Eip = context.Eip;\n        }\n        set_esp(state, context.Esp);\n        set_ebp(state, context.Ebp);\n    }\n    else\n    {\n        set_sp(state, context.Esp + 0x2c);\n        set_bp(state, bp);\n    }\n    set_eflags(state, context.EFlags);\n    set_eip(state, context.Eip);\n    load_seg(get_cs(state), (WORD)context.SegCs);\n}\n\nLPBYTE get_base_addr(WORD sel)\n{\n    return wine_ldt_get_base(wine_ldt + (sel >> 3));\n}\ntypedef int disassemble_debug_t(char *buffer, UINT8 *oprom, BOOL op_size, UINT64 eip);\nstatic disassemble_debug_t *disassemble_debug;\nstatic void trace(vcpu_state *state, uint16 cs, uint32 eip, uint16 ss, uint32 esp, uint32 eflags)\n{\n    char buf[512];\n    UINT8 *d = get_base_addr(cs) + eip;\n\n    if (!disassemble_debug)\n    {\n        disassemble_debug = (disassemble_debug_t*)GetProcAddress(LoadLibraryA(\"vm86.dll\"), \"disassemble_debug\");\n    }\n    int len = disassemble_debug(buf, d, (wine_ldt_get_flags(wine_ldt + (cs >> 3)) & WINE_LDT_FLAGS_32BIT) == WINE_LDT_FLAGS_32BIT, eip);\n    int i;\n    fprintf(stderr, \"%04x:%04x\\t\", cs, eip);\n    for (i = 0; i < len; i++)\n    {\n        fprintf(stderr, \"%02x\", d[i]);\n    }\n    fprintf(stderr, \"\\t%s\\n\", buf);\n    eflags &= ~2;\n    eflags &= ~0x100;\n    if (get_seg_selector(get_fs(state)) || get_seg_selector(get_gs(state)))\n    {\n        fprintf(stderr,\n            \"EAX:%04X,ECX:%04X,EDX:%04X,EBX:%04X,\"\n            \"ESP:%04X,EBP:%04X,ESI:%04X,EDI:%04X,\"\n            \"ES:%04X,CS:%04X,SS:%04X,DS:%04X,FS:%04x,GS:%04x,\"\n            \"IP:%04X,stack:%08X,\"\n            \"EFLAGS:%08X\"\n            \"\\n\",\n            get_eax(state), get_ecx(state), get_edx(state), get_ebx(state),\n            esp, get_ebp(state), get_esi(state), get_edi(state),\n            get_seg_selector(get_es(state)), cs, ss, get_seg_selector(get_ds(state)), get_seg_selector(get_fs(state)), get_seg_selector(get_gs(state)),\n            eip, *(LPDWORD)(get_base_addr(ss) + esp),\n            eflags\n        );\n    }\n    else\n    {\n        fprintf(stderr,\n            \"EAX:%04X,ECX:%04X,EDX:%04X,EBX:%04X,\"\n            \"ESP:%04X,EBP:%04X,ESI:%04X,EDI:%04X,\"\n            \"ES:%04X,CS:%04X,SS:%04X,DS:%04X,\"\n            \"IP:%04X,stack:%08X,\"\n            \"EFLAGS:%08X\"\n            \"\\n\",\n            get_eax(state), get_ecx(state), get_edx(state), get_ebx(state),\n            esp, get_ebp(state), get_esi(state), get_edi(state),\n            get_seg_selector(get_es(state)), cs, ss, get_seg_selector(get_ds(state)),\n            eip, *(LPDWORD)(get_base_addr(ss) + esp),\n            eflags\n        );\n    }\n}\nBOOL has_x86_exception_err(WORD num)\n{\n    switch (num)\n    {\n    case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:\n        return FALSE;\n    case 8:\n        return TRUE;\n    case 9:\n        return FALSE;\n    case 10:case 11:case 12:case 13:case 14:\n        return TRUE;\n    case 15:case 16:\n        return FALSE;\n    case 17:\n        return TRUE;\n    case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:\n        return FALSE;\n    case 30:\n        return TRUE;\n    case 31:\n        return FALSE;\n    }\n    return FALSE;\n}\n\nvolatile struct\n{\n    BOOL inject;\n    DWORD vpfn16;\n    DWORD dwFlags;\n    DWORD cbArgs;\n    LPVOID pArgs;\n    LPDWORD pdwRetCode;\n} vm_inject_state;\nBOOL WINAPI vm_inject(DWORD vpfn16, DWORD dwFlags,\n    DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode)\n{\n    /* FIXME */\n    return TRUE;\n}\n    \nvoid vm_inject_call(SEGPTR ret_addr, PEXCEPTION_HANDLER handler,\n    void(*from16_reg)(void),\n    LONG(*__wine_call_from_16)(void),\n    int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context),\n    void(*__wine_call_to_16_ret)(void),\n    int dasm,\n    pm_interrupt_handler pih, CONTEXT *context)\n{\n    DWORD ret;\n    EnterCriticalSection(&inject_crit_section);\n    static char intstack[4096];\n    static WORD intstksel = 0;\n    if (!intstksel)\n        intstksel = SELECTOR_AllocBlock(intstack, 4096, WINE_LDT_FLAGS_DATA);\n                    \n    WORD sp = context->Esp;\n    DWORD ss_base = get_base_addr(context->SegSs);\n    if (wine_ldt_get_flags(wine_ldt + (context->SegSs >> 3)) & WINE_LDT_FLAGS_32BIT) // don't call int handler on a large stack\n    {\n        ss_base = (DWORD)intstack;\n        sp = 4096;\n        dynamic_setWOW32Reserved((PVOID)MAKESEGPTR(intstksel, 4096));\n    }\n    {\n        char *stack = ss_base + sp - vm_inject_state.cbArgs;\n        vm_inject_state.inject = FALSE;\n        memcpy(stack, vm_inject_state.pArgs, vm_inject_state.cbArgs);\n        /* push return address */\n        stack -= sizeof(SEGPTR);\n        *((SEGPTR *)stack) = ret_addr;\n        vm_inject_state.cbArgs += sizeof(SEGPTR);\n    }\n    LeaveCriticalSection(&inject_crit_section);\n    ret = wine_call_to_16_vm86(vm_inject_state.vpfn16, vm_inject_state.cbArgs, handler, from16_reg, __wine_call_from_16, relay_call_from_16, __wine_call_to_16_ret, dasm, FALSE, NULL, pih);\n    if (vm_inject_state.pdwRetCode)\n        *vm_inject_state.pdwRetCode = ret;\n    SetEvent(inject_event);\n}\n\nBOOL syscall_init = FALSE;\nstatic int compare(const void *a1, const void *a2)\n{\n    SIZE_T lhs = *(const SIZE_T*)a1;\n    SIZE_T rhs = *(const SIZE_T*)a2;\n    if (lhs == rhs)\n        return 0;\n    if (lhs < rhs)\n        return -1;\n    return 1;\n}\nvoid vm86main(CONTEXT *context, DWORD csip, DWORD sssp, DWORD cbArgs, PEXCEPTION_HANDLER handler,\n    void(*from16_reg)(void),\n    LONG(*__wine_call_from_16)(void),\n    int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context),\n    void(*__wine_call_to_16_ret)(void),\n    int dasm,\n    pm_interrupt_handler pih\n)\n{\n    DWORD old_frame16 = PtrToUlong(dynamic_getWOW32Reserved());\n    EnterCriticalSection(&running_critical_section);\n    if (!syscall_init)\n    {\n        SIZE_T pages[4] = { (SIZE_T)from16_reg & ~0xfff, (SIZE_T)__wine_call_from_16 & ~0xfff, (SIZE_T)__wine_call_to_16_ret & ~0xfff, 0x80000000 };\n        int i;\n        SIZE_T map_addr = 0x000;\n        qsort((void*)pages, sizeof(pages) / sizeof(pages[0]), sizeof(pages[0]), compare);\n        for (i = 0; i < sizeof(pages) / sizeof(pages[0]); i++)\n        {\n            SIZE_T len = pages[i] - map_addr;\n            struct gvm_userspace_memory_region mem;\n            if (pages[i] > map_addr)\n            {\n                mem.slot = i;\n                mem.guest_phys_addr = map_addr;\n                mem.userspace_addr = map_addr;\n                mem.memory_size = len;\n                mem.flags = 0;\n                if (!DeviceIoControl(hVM, GVM_SET_USER_MEMORY_REGION, &mem, sizeof(mem), NULL, 0, NULL, NULL))\n                {\n                    PANIC(\"GVM_SET_USER_MEMORY_REGION\");\n                    return;\n                }\n            }\n            map_addr = pages[i] + 4096;\n        }\n        syscall_init = TRUE;\n    }\n    is_single_step = dasm;\n    DWORD ret_addr;\n    vcpu_state state;\n    {\n        get_vcpu_regs(&state);\n        load_seg(get_gs(&state), (WORD)0);\n        load_seg(get_fs(&state), (WORD)0);\n        if (!csip)\n        {\n            load_seg(get_es(&state), (WORD)context->SegEs);\n            load_seg(get_ds(&state), (WORD)context->SegDs);\n            load_seg(get_cs(&state), (WORD)context->SegCs);\n            load_seg(get_ss(&state), (WORD)context->SegSs);\n\n            set_edi(&state, context->Edi);\n            set_esi(&state, context->Esi);\n            set_ebx(&state, context->Ebx);\n            set_edx(&state, context->Edx);\n            set_ecx(&state, context->Ecx);\n            set_eax(&state, context->Eax);\n\n            set_ebp(&state, context->Ebp);\n            set_eip(&state, context->Eip);\n            set_eflags(&state, context->EFlags);\n            set_esp(&state, context->Esp - cbArgs);\n        }\n        else\n        {\n            load_seg(get_cs(&state), (WORD)SELECTOROF(csip));\n            load_seg(get_ss(&state), (WORD)SELECTOROF(sssp));\n            set_eip(&state, OFFSETOF(csip));\n            set_esp(&state, OFFSETOF(sssp) - cbArgs);\n        }\n        set_vcpu_regs(&state);\n        unsigned char *stack = (unsigned char*)get_seg_base(get_ss(&state))+ get_esp(&state);\n        ret_addr = (*(LPDWORD)stack);\n    }\n    vcpu_state state2 = state;\n    if (is_single_step)\n    {\n        trace(&state2, get_seg_selector(get_cs(&state2)), get_eip(&state2), get_seg_selector(get_ss(&state2)), get_esp(&state2), get_eflags(&state2));\n    }\n    while (TRUE)\n    {\n        if (get_seg_selector(get_cs(&state2)) == (ret_addr >> 16) && get_ip(&state2) == (ret_addr & 0xFFFF))\n        {\n            set_vcpu_regs(&state2);\n            break;\n        }\n        if (!DeviceIoControl(get_vcpu_handle(), GVM_RUN, NULL, 0, NULL, 0, NULL, NULL))\n        {\n            LeaveCriticalSection(&running_critical_section);\n            PANIC(\"GVM_RUN\");\n            return;\n        }\n        get_vcpu_regs(&state2);\n        UINT32 ptr = get_seg_base(get_cs(&state2)) + get_eip(&state2);\n        /* TODO: PIO */\n        switch (gvm_run->exit_reason)\n        {\n        case GVM_EXIT_INTERNAL_ERROR:\n        case GVM_EXIT_HLT:\n            if (((DWORD)ptr >= (DWORD)trap_int) && ((DWORD)ptr <= ((DWORD)trap_int + 256)))\n            {\n                int intvec = ((DWORD)ptr & 0xff) - 1;\n                BOOL has_err = has_x86_exception_err(intvec);\n                DWORD err = has_err ? PEEK32(&state2, 0) : 0;\n                DWORD eip = PEEK32(&state2, (has_err ? 1 : 0) + 0);\n                DWORD cs = PEEK32(&state2, (has_err ? 1 : 0) + 1);\n                DWORD flags = PEEK32(&state2, (has_err ? 1 : 0) + 2);\n                DWORD old_esp = PEEK32(&state2, (has_err ? 1 : 0) + 3);\n                DWORD old_ss = PEEK32(&state2, (has_err ? 1 : 0) + 4);\n                if (intvec == 6 /* #UD??????? */ && cs == (ret_addr >> 16) && eip == (ret_addr & 0xFFFF) || eip == from16_reg || eip == __wine_call_from_16)\n                {\n                    if (has_err)\n                    {\n                        err = POP32(&state2);\n                    }\n                    DWORD eip = POP32(&state2);\n                    DWORD cs = POP32(&state2);\n                    DWORD eflags = POP32(&state2);\n                    DWORD esp = POP32(&state2);\n                    DWORD ss = POP32(&state2);\n                    load_seg(get_cs(&state2), (WORD)cs);\n                    set_eip(&state2, eip);\n                    load_seg(get_ss(&state2), (WORD)ss);\n                    set_esp(&state2, esp);\n                    set_eflags(&state2, flags);\n                    ptr = get_seg_base(get_cs(&state2)) + get_eip(&state2);\n                    if (get_seg_selector(get_cs(&state2)) == (ret_addr >> 16) && get_ip(&state2) == (ret_addr & 0xFFFF))\n                    {\n                        set_vcpu_regs(&state2);\n                        break;\n                    }\n                    if (ptr == from16_reg || ptr == __wine_call_from_16)\n                    {\n                        LeaveCriticalSection(&running_critical_section);\n                        relay(relay_call_from_16, ptr == from16_reg, &state2, ret_addr, cbArgs, handler, old_frame16);\n                        EnterCriticalSection(&running_critical_section);\n                    }\n                    else\n                    {\n                        PANIC(\"\");\n                    }\n                    set_vcpu_regs(&state2);\n                    break;\n                }\n                const char *name = NULL;\n                switch (intvec)\n                {\n                case 0: name = \"#DE\"; break;\n                case 2: name = \"int 2h\"; break;\n                case 4: name = \"#OF\"; break;\n                case 6: name = \"#UD\"; break;\n                case 7: name = \"#NM\"; break;\n                case 8: name = \"#DF\"; break;\n                case 10: name = \"#TS\"; break;\n                case 11: name = \"#NP\"; break;\n                case 12: name = \"#SS\"; break;\n                case 13: name = \"#GP\"; break;\n                case 14: name = \"#PF\"; break;\n                }\n                set_eip(&state2, 256);\n                if (name)\n                {\n                    DWORD cpusig[4];\n#ifdef _MSC_VER\n                    __cpuid(cpusig, 0);\n#else\n                    __cpuid(0, cpusig[0], cpusig[1], cpusig[2], cpusig[3]);\n#endif\n                    fprintf(stderr, \"cpu type %x %x %x %x\\n\", cpusig[0], cpusig[1], cpusig[2], cpusig[3]);\n                    trace(&state2, cs, eip, (WORD)old_ss, old_esp, flags);\n                    PANIC(\"exception %s\", name);\n                }\n                else\n                {\n                    DWORD eip = POP32(&state2);\n                    DWORD cs = POP32(&state2);\n                    DWORD eflags = POP32(&state2);\n                    DWORD esp = POP32(&state2);\n                    DWORD ss = POP32(&state2);\n                    load_seg(get_cs(&state2), (WORD)cs);\n                    set_eip(&state2, eip);\n                    load_seg(get_ss(&state2), (WORD)ss);\n                    set_esp(&state2, esp);\n                    CONTEXT ctx;\n                    save_context_from_state(&ctx, &state2);\n                    set_vcpu_regs(&state2);\n                    LeaveCriticalSection(&running_critical_section);\n                    dynamic__wine_call_int_handler(&ctx, intvec);\n                    EnterCriticalSection(&running_critical_section);\n                    load_context_to_state(&ctx, &state2);\n                    set_vcpu_regs(&state2);\n                }\n            }\n            break;\n        default:\n            PANIC(\"%d\", gvm_run->exit_reason);\n            break;\n        }\n    }\n    save_context_from_state(context, &state2);\n    LeaveCriticalSection(&running_critical_section);\n}\n\n__declspec(dllexport) DWORD wine_call_to_16_vm86(DWORD target, DWORD cbArgs, PEXCEPTION_HANDLER handler,\n    void(*from16_reg)(void),\n    LONG(*__wine_call_from_16)(void),\n    int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context),\n    void(*__wine_call_to_16_ret)(void),\n    int dasm,\n    BOOL vm86,\n    void *memory_base,\n    pm_interrupt_handler pih)\n{\n\n    mem = vm86 ? (UINT8*)memory_base : NULL;\n    if (!initflag)\n        initflag = init_vm86(vm86);\n    CONTEXT context = { 0 };\n    vm86main(&context, target, (DWORD)dynamic_getWOW32Reserved(), cbArgs, handler, from16_reg, __wine_call_from_16, relay_call_from_16, __wine_call_to_16_ret, dasm, pih);\n    return (context.Eax & 0xffff) | context.Edx << 16;\n}\n__declspec(dllexport) void wine_call_to_16_regs_vm86(CONTEXT *context, DWORD cbArgs, PEXCEPTION_HANDLER handler,\n    void(*from16_reg)(void),\n    LONG(*__wine_call_from_16)(void),\n    int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context),\n    void(*__wine_call_to_16_ret)(void),\n    int dasm,\n    BOOL vm86,\n    void *memory_base,\n    pm_interrupt_handler pih\n)\n{\n    mem = vm86 ? (UINT8*)memory_base : NULL;\n    if (!initflag)\n        initflag = init_vm86(vm86);\n    vm86main(context, 0, 0, cbArgs, handler, from16_reg, __wine_call_from_16, relay_call_from_16, __wine_call_to_16_ret, dasm, pih);\n\n\n}\n"
  },
  {
    "path": "gvm/gvm.def",
    "content": ""
  },
  {
    "path": "gvm/gvm.h",
    "content": "#pragma once\n#include <stdint.h>\n#include \"gvm-interface.h\"\n#include <stdio.h>\n#include <windows.h>\n\nstruct gvm_vcpu_state\n{\n    struct gvm_regs regs;\n    struct gvm_sregs sregs;\n};\n\ntypedef UINT16 uint16;\ntypedef UINT32 uint32;\ntypedef UINT64 uint64;\n/* register utils */\ntypedef struct gvm_vcpu_state vcpu_state;\ntypedef struct gvm_segment segment;\n/* 16-bit regs */\nstatic inline uint16 get_ax(vcpu_state *state)\n{\n    return (uint16)state->regs.rax;\n}\n\nstatic inline uint16 get_cx(vcpu_state *state)\n{\n    return (uint16)state->regs.rcx;\n}\n\nstatic inline uint16 get_dx(vcpu_state *state)\n{\n    return (uint16)state->regs.rdx;\n}\n\nstatic inline uint16 get_bx(vcpu_state *state)\n{\n    return (uint16)state->regs.rbx;\n}\n\nstatic inline uint16 get_sp(vcpu_state *state)\n{\n    return (uint16)state->regs.rsp;\n}\n\nstatic inline uint16 get_bp(vcpu_state *state)\n{\n    return (uint16)state->regs.rbp;\n}\n\nstatic inline uint16 get_si(vcpu_state *state)\n{\n    return (uint16)state->regs.rsi;\n}\n\nstatic inline uint16 get_di(vcpu_state *state)\n{\n    return (uint16)state->regs.rdi;\n}\n\nstatic inline uint16 get_ip(vcpu_state *state)\n{\n    return (uint16)state->regs.rip;\n}\n\nstatic inline uint16 get_flags(vcpu_state *state)\n{\n    return (uint16)state->regs.rflags;\n}\n\nstatic inline uint16 set_ax(vcpu_state *state, uint16 val)\n{\n    return *(uint16*)&state->regs.rax = val;\n}\n\nstatic inline uint16 set_cx(vcpu_state *state, uint16 val)\n{\n    return *(uint16*)&state->regs.rcx = val;\n}\n\nstatic inline uint16 set_dx(vcpu_state *state, uint16 val)\n{\n    return *(uint16*)&state->regs.rdx = val;\n}\n\nstatic inline uint16 set_bx(vcpu_state *state, uint16 val)\n{\n    return *(uint16*)&state->regs.rbx = val;\n}\n\nstatic inline uint16 set_sp(vcpu_state *state, uint16 val)\n{\n    return *(uint16*)&state->regs.rsp = val;\n}\n\nstatic inline uint16 set_bp(vcpu_state *state, uint16 val)\n{\n    return *(uint16*)&state->regs.rbp = val;\n}\n\nstatic inline uint16 set_si(vcpu_state *state, uint16 val)\n{\n    return *(uint16*)&state->regs.rsi = val;\n}\n\nstatic inline uint16 set_di(vcpu_state *state, uint16 val)\n{\n    return *(uint16*)&state->regs.rdi = val;\n}\n\nstatic inline uint16 set_ip(vcpu_state *state, uint16 val)\n{\n    return *(uint16*)&state->regs.rip = val;\n}\n\nstatic inline segment *get_es(vcpu_state *state)\n{\n    return &state->sregs.es;\n}\n\nstatic inline segment *get_cs(vcpu_state *state)\n{\n    return &state->sregs.cs;\n}\n\nstatic inline segment *get_ss(vcpu_state *state)\n{\n    return &state->sregs.ss;\n}\n\nstatic inline segment *get_ds(vcpu_state *state)\n{\n    return &state->sregs.ds;\n}\n\nstatic inline segment *get_fs(vcpu_state *state)\n{\n    return &state->sregs.fs;\n}\n\nstatic inline segment *get_gs(vcpu_state *state)\n{\n    return &state->sregs.gs;\n}\n\nstatic inline uint16 get_seg_selector(segment *seg)\n{\n    return seg->selector;\n}\n\nstatic inline uint32 get_seg_base(segment *seg)\n{\n    return (uint32)seg->base;\n}\n\nstatic inline uint32 get_seg_limit(segment *seg)\n{\n    return seg->limit;\n}\n\n/* 32-bit regs */\n\nstatic inline uint32 get_eax(vcpu_state *state)\n{\n    return (uint32)state->regs.rax;\n}\n\nstatic inline uint32 get_ecx(vcpu_state *state)\n{\n    return (uint32)state->regs.rcx;\n}\n\nstatic inline uint32 get_edx(vcpu_state *state)\n{\n    return (uint32)state->regs.rdx;\n}\n\nstatic inline uint32 get_ebx(vcpu_state *state)\n{\n    return (uint32)state->regs.rbx;\n}\n\nstatic inline uint32 get_esp(vcpu_state *state)\n{\n    return (uint32)state->regs.rsp;\n}\n\nstatic inline uint32 get_ebp(vcpu_state *state)\n{\n    return (uint32)state->regs.rbp;\n}\n\nstatic inline uint32 get_esi(vcpu_state *state)\n{\n    return (uint32)state->regs.rsi;\n}\n\nstatic inline uint32 get_edi(vcpu_state *state)\n{\n    return (uint32)state->regs.rdi;\n}\n\nstatic inline uint32 get_eip(vcpu_state *state)\n{\n    return (uint32)state->regs.rip;\n}\n\nstatic inline uint32 get_eflags(vcpu_state *state)\n{\n    return (uint32)state->regs.rflags;\n}\n\nstatic inline uint32 set_eax(vcpu_state *state, uint32 val)\n{\n    return *(uint32*)&state->regs.rax = val;\n}\n\nstatic inline uint32 set_ecx(vcpu_state *state, uint32 val)\n{\n    return *(uint32*)&state->regs.rcx = val;\n}\n\nstatic inline uint32 set_edx(vcpu_state *state, uint32 val)\n{\n    return *(uint32*)&state->regs.rdx = val;\n}\n\nstatic inline uint32 set_ebx(vcpu_state *state, uint32 val)\n{\n    return *(uint32*)&state->regs.rbx = val;\n}\n\nstatic inline uint32 set_esp(vcpu_state *state, uint32 val)\n{\n    return *(uint32*)&state->regs.rsp = val;\n}\n\nstatic inline uint32 set_ebp(vcpu_state *state, uint32 val)\n{\n    return *(uint32*)&state->regs.rbp = val;\n}\n\nstatic inline uint32 set_esi(vcpu_state *state, uint32 val)\n{\n    return *(uint32*)&state->regs.rsi = val;\n}\n\nstatic inline uint32 set_edi(vcpu_state *state, uint32 val)\n{\n    return *(uint32*)&state->regs.rdi = val;\n}\n\nstatic inline uint32 set_eip(vcpu_state *state, uint32 val)\n{\n    return *(uint32*)&state->regs.rip = val;\n}\n"
  },
  {
    "path": "gvm/gvm.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <VCProjectVersion>15.0</VCProjectVersion>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>gvm</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n    <ProjectGuid>{258FD007-046D-4625-BB5A-B7934B71934F}</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"Shared\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>__i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;WIN32;__i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;NDEBUG;_CONSOLE;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <PrecompiledHeaderFile />\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)libwine.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <ModuleDefinitionFile>gvm.def</ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>__i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;WIN32;__i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;_DEBUG;_CONSOLE;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <PrecompiledHeaderFile />\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)libwine.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <ModuleDefinitionFile>gvm.def</ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"gvm.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"gvm-interface.h\" />\n    <ClInclude Include=\"gvm.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"gvm.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "gvm/gvm.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"ソース ファイル\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"ヘッダー ファイル\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"リソース ファイル\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"gvm.h\">\n      <Filter>ヘッダー ファイル</Filter>\n    </ClInclude>\n    <ClInclude Include=\"gvm-interface.h\">\n      <Filter>ヘッダー ファイル</Filter>\n    </ClInclude>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"gvm.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"gvm.def\">\n      <Filter>ソース ファイル</Filter>\n    </None>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "haxmvm/CMakeLists.txt",
    "content": "add_library(haxmvm SHARED haxmvm.c)\ninclude_directories(../wine)\nadd_definitions(-D__i386__ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN=)\ntarget_link_libraries(haxmvm libwine)\nset_target_properties(haxmvm PROPERTIES PREFIX \"\")\n"
  },
  {
    "path": "haxmvm/haxmvm.c",
    "content": "#include \"haxmvm.h\"\n\n#include \"../krnl386/kernel16_private.h\"\n\nBOOL initflag;\nUINT8 *mem;\n#define KRNL386 \"krnl386.exe16\"\nBOOL is_single_step = FALSE;\nDWORD WINAPI panic_msgbox(LPVOID data)\n{\n    MessageBoxA(NULL, (LPCSTR)data, \"Hypervisor error\", MB_OK | MB_ICONERROR);\n    HeapFree(GetProcessHeap(), 0, data);\n    return 0;\n}\nvoid haxmvm_panic(const char *fmt, ...)\n{\n    LPSTR buffer = HeapAlloc(GetProcessHeap(), 0, 512);\n    DWORD threadId;\n    va_list arg;\n\n    va_start(arg, fmt);\n    vsnprintf(buffer, 512, fmt, arg);\n    va_end(arg);\n    buffer[512 - 1] = '\\0';\n    HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)panic_msgbox, buffer, 0, &threadId);\n    WaitForSingleObject(hThread, INFINITE);\n    ExitThread(1);\n}\nPVOID dynamic_setWOW32Reserved(PVOID w)\n{\n    static PVOID(*setWOW32Reserved)(PVOID);\n    if (!setWOW32Reserved)\n    {\n        HMODULE krnl386 = LoadLibraryA(KRNL386);\n        setWOW32Reserved = (PVOID(*)(PVOID))GetProcAddress(krnl386, \"setWOW32Reserved\");\n    }\n    return setWOW32Reserved(w);\n}\nPVOID dynamic_getWOW32Reserved()\n{\n    static PVOID(*getWOW32Reserved)();\n    if (!getWOW32Reserved)\n    {\n        HMODULE krnl386 = LoadLibraryA(KRNL386);\n        getWOW32Reserved = (PVOID(*)())GetProcAddress(krnl386, \"getWOW32Reserved\");\n    }\n    return getWOW32Reserved();\n}\nWINE_VM86_TEB_INFO *dynamic_getGdiTebBatch()\n{\n    static WINE_VM86_TEB_INFO*(*getGdiTebBatch)();\n    if (!getGdiTebBatch)\n    {\n        HMODULE krnl386 = LoadLibraryA(KRNL386);\n        getGdiTebBatch = (WINE_VM86_TEB_INFO*(*)())GetProcAddress(krnl386, \"getGdiTebBatch\");\n    }\n    return getGdiTebBatch();\n}\nvoid dynamic__wine_call_int_handler(CONTEXT *context, BYTE intnum)\n{\n    static void(*__wine_call_int_handler)(CONTEXT *context, BYTE intnum);\n    if (!__wine_call_int_handler)\n    {\n        HMODULE krnl386 = LoadLibraryA(KRNL386);\n        __wine_call_int_handler = (void(*)(CONTEXT *context, BYTE intnum))GetProcAddress(krnl386, \"__wine_call_int_handler\");\n    }\n    __wine_call_int_handler(context, intnum);\n}\n/***********************************************************************\n*           SELECTOR_SetEntries\n*\n* Set the LDT entries for an array of selectors.\n*/\nstatic BOOL SELECTOR_SetEntries(WORD sel, const void *base, DWORD size, unsigned char flags)\n{\n    LDT_ENTRY entry;\n    WORD i, count;\n\n    wine_ldt_set_base(&entry, base);\n    wine_ldt_set_limit(&entry, size - 1);\n    wine_ldt_set_flags(&entry, flags);\n    count = (size + 0xffff) / 0x10000;\n    for (i = 0; i < count; i++)\n    {\n        if (wine_ldt_set_entry(sel + (i << 3), &entry) < 0) return FALSE;\n        wine_ldt_set_base(&entry, (char*)wine_ldt_get_base(&entry) + 0x10000);\n        /* yep, Windows sets limit like that, not 64K sel units */\n        wine_ldt_set_limit(&entry, wine_ldt_get_limit(&entry) - 0x10000);\n    }\n    return TRUE;\n}\nvoid wine_ldt_free_entries(unsigned short sel, int count);\n/***********************************************************************\n*           SELECTOR_AllocBlock\n*\n* Allocate selectors for a block of linear memory.\n*/\nWORD SELECTOR_AllocBlock(const void *base, DWORD size, unsigned char flags)\n{\n    WORD sel, count;\n\n    if (!size) return 0;\n    count = (size + 0xffff) / 0x10000;\n    if ((sel = wine_ldt_alloc_entries(count)))\n    {\n        if (SELECTOR_SetEntries(sel, base, size, flags)) return sel;\n        wine_ldt_free_entries(sel, count);\n        sel = 0;\n    }\n    return sel;\n}\n__declspec(dllimport) LDT_ENTRY wine_ldt[8192];\n\nHANDLE hSystem;\nHANDLE hVM;\nHANDLE hVCPU;\nstruct hax_tunnel *tunnel;\n // 2MB is enough for 0x00000000-0x7fffffff plus 1 page for the pagedir \n#ifdef _MSC_VER\n__declspec(align(4096))\n#endif\nDWORD\n#ifdef __GNUC__\n__attribute__ ((aligned(4096)))\n#endif\nguestpt[0x80400] = {0}\n\n;\n\nLDT_ENTRY gdt[];\nvoid load_seg(segment_desc_t *segment, WORD sel)\n{\n    const LDT_ENTRY *entry = (sel & 0x4 || (sel >> 3) >= 512) ? wine_ldt : gdt;\n    segment->selector = sel;\n    segment->base = (uint64)wine_ldt_get_base(entry + (sel >> 3));\n    segment->limit =  (uint64)wine_ldt_get_limit(entry + (sel >> 3));\n    segment->type = entry[sel >> 3].HighWord.Bits.Type;\n    segment->present = entry[sel >> 3].HighWord.Bits.Pres;\n    segment->operand_size = entry[sel >> 3].HighWord.Bits.Default_Big;\n    segment->dpl = entry[sel >> 3].HighWord.Bits.Dpl;\n    segment->granularity = entry[sel >> 3].HighWord.Bits.Granularity;\n    segment->null = 0;\n    segment->desc = entry[sel >> 3].HighWord.Bits.Type >> 4;\n    if (!sel || !segment->type || !segment->present)\n        segment->ar = 0;\n}\n \nvoid set_eflags(struct vcpu_state_t *state, DWORD eflags)\n{\n    state->_eflags = eflags | 2 | 0x3000 | (is_single_step ? 0x100 : 0);\n}\nvoid load_context_to_state(CONTEXT *context, struct vcpu_state_t *state)\n{\n    DWORD bytes;\n    load_seg(&state->_gs, (WORD)context->SegGs);\n    load_seg(&state->_fs, (WORD)context->SegFs);\n    load_seg(&state->_es, (WORD)context->SegEs);\n    load_seg(&state->_ds, (WORD)context->SegDs);\n    load_seg(&state->_cs, (WORD)context->SegCs);\n    load_seg(&state->_ss, (WORD)context->SegSs);\n\n    state->_edi = context->Edi;\n    state->_esi = context->Esi;\n    state->_ebx = context->Ebx;\n    state->_edx = context->Edx;\n    state->_ecx = context->Ecx;\n    state->_eax = context->Eax;\n\n    state->_ebp = context->Ebp;\n    state->_eip = context->Eip;\n    set_eflags(state, context->EFlags);\n    state->_esp = context->Esp;\n}\n\nvoid load_context(CONTEXT *context)\n{\n    DWORD bytes;\n    struct vcpu_state_t state;\n    if (!DeviceIoControl(hVCPU, HAX_VCPU_GET_REGS, NULL, 0, &state, sizeof(state), &bytes, NULL))\n        return;\n    load_seg(&state._gs, (WORD)context->SegGs);\n    load_seg(&state._fs, (WORD)context->SegFs);\n    load_seg(&state._es, (WORD)context->SegEs);\n    load_seg(&state._ds, (WORD)context->SegDs);\n    load_seg(&state._cs, (WORD)context->SegCs);\n    load_seg(&state._ss, (WORD)context->SegSs);\n\n    state._edi = context->Edi;\n    state._esi = context->Esi;\n    state._ebx = context->Ebx;\n    state._edx = context->Edx;\n    state._ecx = context->Ecx;\n    state._eax = context->Eax;\n\n    state._ebp = context->Ebp;\n    state._eip = context->Eip;\n    set_eflags(&state, context->EFlags);\n    state._esp = context->Esp;\n\n    if (!DeviceIoControl(hVCPU, HAX_VCPU_SET_REGS, &state, sizeof(state), NULL, 0, &bytes, NULL))\n        return;\n}\n\nvoid save_context_from_state(CONTEXT *context, struct vcpu_state_t *state)\n{\n    context->SegGs = state->_gs.selector;\n    context->SegFs = state->_fs.selector;\n    context->SegEs = state->_es.selector;\n    context->SegDs = state->_ds.selector;\n    context->SegCs = state->_cs.selector;\n    context->SegSs = state->_ss.selector;\n\n    context->Edi = state->_edi;\n    context->Esi = state->_esi;\n    context->Ebx = state->_ebx;\n    context->Edx = state->_edx;\n    context->Ecx = state->_ecx;\n    context->Eax = state->_eax;\n\n    context->Ebp = state->_ebp;\n    context->Eip = state->_eip;\n    context->EFlags = state->_eflags & ~2;\n    context->Esp = state->_esp;\n    dynamic_setWOW32Reserved((PVOID)(state->_ss.selector << 16 | state->_sp));\n}\nvoid save_context(CONTEXT *context)\n{\n    DWORD bytes;\n    struct vcpu_state_t state;\n    if (!DeviceIoControl(hVCPU, HAX_VCPU_GET_REGS, NULL, 0, &state, sizeof(state), &bytes, NULL))\n        return;\n    save_context_from_state(context, &state);\n    context->EFlags &= ~0x200;\n}\n#include <pshpack1.h>\ntypedef enum\n{\n    INT_GATE_TASK = 5,\n    INT_GATE_INT16 = 6,\n    INT_GATE_TRAP16 = 7,\n    INT_GATE_INT32 = 0xE,\n    INT_GATE_TRAP32 = 0xF,\n} interrupt_gate_type;\ntypedef struct\n{\n    WORD offset_low;\n    WORD selector;\n    BYTE reserved;\n    union\n    {\n        struct\n        {\n            BYTE type : 4 /* INT_GATE_TASK */, S : 1, DPL : 2, P : 1;\n        };\n        BYTE data;\n    };\n    WORD offset_high;\n} interrupt_gate;\n_STATIC_ASSERT(sizeof(interrupt_gate) == 8);\n#include <poppack.h>\n\n#define HAXMVM_STR2(s) #s\n#define HAXMVM_STR(s) HAXMVM_STR2(s)\n#ifdef _MSC_VER\n#define HAXMVM_ERR fprintf(stderr, __FUNCTION__ \"(\"  HAXMVM_STR(__LINE__)  \") HAXM err.\\n\");\n#define HAXMVM_ERRF(fmt, ...) fprintf(stderr, __FUNCTION__ \"(\"  HAXMVM_STR(__LINE__)  \") \" fmt \"\\n\", __VA_ARGS__);\n#else\n#define HAXMVM_ERR fprintf(stderr, \"%s(\"  HAXMVM_STR(__LINE__)  \") HAXM err.\\n\", __FUNCTION__);\n#define HAXMVM_ERRF(fmt, ...) fprintf(stderr, \"%s(\"  HAXMVM_STR(__LINE__)  \") \" fmt \"\\n\", __FUNCTION__, ##__VA_ARGS__);\n#endif\nLPVOID trap_int;\n\n#ifdef _MSC_VER\n__declspec(align(4096))\n#endif\ninterrupt_gate idt[256];\n#ifdef __GNUC__\n__attribute__ ((aligned(4096)))\n#endif\n;\n#ifdef _MSC_VER\n__declspec(align(4096))\n#endif\nLDT_ENTRY gdt[512] = { 0 };\n#ifdef __GNUC__\n__attribute__ ((aligned(4096)))\n#endif\n;\nWORD seg_cs;\nWORD seg_ds;\n\nstatic BOOL set_ram(struct hax_set_ram_info *pram)\n{\n    DWORD bytes;\n    struct hax_set_ram_info ram = *pram;\n    ram.flags = HAX_RAM_INFO_STANDALONE;\n    if (!DeviceIoControl(hVM, HAX_VM_IOCTL_SET_RAM, &ram, sizeof(struct hax_set_ram_info), NULL, 0, &bytes, NULL))\n        return FALSE;\n    DWORD physaddr = ram.pa_start / 4096;\n    for (DWORD i = 0; i < (ram.size / 4096); i++)\n    {\n        DWORD pte = physaddr + i;\n        guestpt[pte] = (pte << 12) | 7;\n    }\n    return TRUE;\n}\n\n#define dprintf(...) //fprintf(stderr, __VA_ARGS__)\n\nstatic CRITICAL_SECTION crst;\nstatic CRITICAL_SECTION_DEBUG critsect_debug =\n{\n    0, 0, &crst,\n    { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },\n      0, 0, { (DWORD_PTR)(__FILE__ \": crst\") }\n};\nstatic CRITICAL_SECTION crst = { &critsect_debug, -1, 0, 0, 0, 0 };\nvoid alloc_ram(uint32_t addr, uint32_t size)\n{\n    MEMORY_BASIC_INFORMATION mbi;\n    struct hax_set_ram_info ram = { 0 };\n    BOOL protect = 0;\n    DWORD old = 0;\n    ram.pa_start = addr;\n    ram.size = size;\n    ram.va = addr;\n    if (VirtualQuery(ram.va, &mbi, sizeof(MEMORY_BASIC_INFORMATION)))\n    {\n        if (!(mbi.Protect & PAGE_EXECUTE_READWRITE) && !(mbi.Protect & PAGE_READWRITE))\n        {\n            protect = VirtualProtect(ram.va, 4096, PAGE_EXECUTE_READWRITE, &old);\n        }\n    }\n    dprintf(\"alloc = %08x\\n\", ram.va);\n    if (!set_ram(&ram))\n    {\n        HAXMVM_ERRF(\"SET_RAM\");\n    }\n    if (protect && 0)\n    {\n        VirtualProtect(ram.va, 4096, old, &old);\n    }\n}\n\nstatic void intel_vt_x_workaround_update_entry(int sel, const LDT_ENTRY *entry)\n{\n    DWORD bytes;\n    uint32 start = ((uint32)wine_ldt_get_base(entry) & ~0xfff);\n    uint32 size = 0;\n    EnterCriticalSection(&crst);\n    for (uint32 i = start; i <= ((uint32)wine_ldt_get_base(entry) + wine_ldt_get_limit(entry)); i += 4096)\n    {\n        if (!i || guestpt[i / 4096])\n        {\n            continue;\n        }\n        alloc_ram(i, 4096);\n    }\n    LeaveCriticalSection(&crst);\n}\n\n/*\n * WOW64 syscall entry:\n * B8 XX XX XX XX mov eax,XXXXX\n * BA XX XX XX XX mov edx,_Wow64SystemServiceCall@0\n * FF D2          call edx\n * C2 XX XX       ret xx\n * 90             nop\n */\n#include <pshpack1.h>\nstruct wow64_syscall\n{\n    BYTE mov_eax;\n    DWORD num;\n    BYTE mov_edx;\n    DWORD Wow64SystemServiceCall;\n    WORD call_edx;\n    BYTE ret;\n    WORD ret_n;\n    BYTE nop;\n};\nstruct hooked_syscall\n{\n    BYTE jmp_rel;\n    DWORD address;\n};\n#include <poppack.h>\nBOOL hook_nt_syscall(struct wow64_syscall **old_syscall, LPVOID hook_func, LPCSTR hook_dll, LPCSTR hook_func_name)\n{\n    HMODULE dll = GetModuleHandleA(hook_dll);\n    LPVOID func = (LPVOID)GetProcAddress(dll, hook_func_name);\n    struct wow64_syscall *syscall = (struct wow64_syscall*)func;\n    MEMORY_BASIC_INFORMATION mbi;\n    DWORD old;\n    if (!func)\n    {\n        return FALSE;\n    }\n    if (syscall->mov_eax != 0xb8 || syscall->mov_edx != 0xba || syscall->call_edx != 0xd2ff || syscall->ret != 0xc2 || syscall->nop != 0x90)\n    {\n        return FALSE;\n    }\n    if (!VirtualQuery(syscall, &mbi, sizeof(mbi)))\n    {\n        return FALSE;\n    }\n    VirtualProtect(mbi.BaseAddress, mbi.RegionSize, PAGE_EXECUTE_READWRITE, &old);\n    *old_syscall = VirtualAlloc(NULL, 4096, MEM_COMMIT, PAGE_EXECUTE_READWRITE);\n    **old_syscall = *syscall;\n    ((struct hooked_syscall*)syscall)->jmp_rel = 0xe9;\n    ((struct hooked_syscall*)syscall)->address = (char*)hook_func - (char*)(&((struct hooked_syscall*)syscall)->address + 1);\n    VirtualProtect(mbi.BaseAddress, mbi.RegionSize, old, &old);\n    return TRUE;\n}\n\nstatic void discard_memory(PVOID BaseAddress, ULONG RegionSize)\n{\n    DWORD physaddr = (DWORD)BaseAddress / 4096;\n    for (DWORD i = 0; i < (RegionSize / 4096); i++)\n    {\n        DWORD pte = physaddr + i;\n        if (sizeof(guestpt) / sizeof(guestpt[0]) <= pte)\n            *(int*)0 = 0;\n        if (guestpt[pte])\n        {\n            struct hax_set_ram_info ram = { pte * 4096, 4096, HAX_RAM_INFO_INVALID };\n\n            if (!DeviceIoControl(hVM, HAX_VM_IOCTL_SET_RAM, &ram, sizeof(ram), NULL, 0, NULL, NULL))\n            {\n                HAXMVM_ERRF(\"Failed to discard memory %p\", pte);\n            }\n            guestpt[pte] = 0;\n        }\n    }\n}\n\nstruct wow64_syscall *old_NtFreeVirtualMemory;\nNTSTATUS NTAPI hook_NtFreeVirtualMemory(HANDLE ProcessHandle, PVOID *BaseAddress, PULONG RegionSize, ULONG FreeType)\n{\n    NTSTATUS result = ((NTSTATUS(NTAPI*)(HANDLE, PVOID*, PULONG, ULONG))old_NtFreeVirtualMemory)(ProcessHandle, BaseAddress, RegionSize, FreeType);\n    if (NT_SUCCESS(result))\n    {\n        discard_memory(*BaseAddress, *RegionSize);\n    }\n    return result;\n}\n\n__declspec(dllexport) BOOL haxmvm_DeleteObject(HANDLE hobj)\n{\n    DIBSECTION dib;\n    BOOL discard = FALSE;\n    MEMORY_BASIC_INFORMATION mbi;\n    BOOL result;\n    if (GetObjectType(hobj) == OBJ_BITMAP && GetObjectW(hobj, sizeof(dib), &dib) == sizeof(dib))\n    {\n        if (VirtualQuery(dib.dsBm.bmBits, &mbi, sizeof(mbi)))\n        {\n            discard = mbi.State == MEM_COMMIT;\n        }\n    }\n    result = DeleteObject(hobj);\n    if (result && discard)\n    {\n        discard_memory(mbi.BaseAddress, mbi.RegionSize);\n    }\n    return result;\n}\n\n\nBOOL init_vm86(BOOL vm86)\n{\n    if (!hook_nt_syscall(&old_NtFreeVirtualMemory, hook_NtFreeVirtualMemory, \"ntdll\", \"NtFreeVirtualMemory\"))\n    {\n        HAXMVM_ERRF(\"Failed to hook NtFreeVirtualMemory.\");\n    }\n#ifdef _MSC_VER\n    __asm\n    {\n        mov seg_cs, cs\n        mov seg_ds, ds\n    }\n#else\n    seg_cs = wine_get_cs();\n    seg_ds = wine_get_ds();\n#endif\n    hSystem = CreateFileW(L\"\\\\\\\\.\\\\HAX\", 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);\n    if (hSystem == INVALID_HANDLE_VALUE)\n    {\n        HAXMVM_ERRF(\"HAXM is not installed.\\n\");\n        return FALSE;\n    }\n    struct hax_module_version ver;\n    DWORD bytes;\n    if (!DeviceIoControl(hSystem, HAX_IOCTL_VERSION, NULL, NULL, &ver, sizeof(ver), &bytes, NULL))\n    {\n        HAXMVM_ERRF(\"VERSION\");\n        return FALSE;\n    }\n    uint32_t vm_id;\n    if (!DeviceIoControl(hSystem, HAX_IOCTL_CREATE_VM, NULL, NULL, &vm_id, sizeof(vm_id), &bytes, NULL))\n    {\n        HAXMVM_ERRF(\"CREATE_VM\");\n        return FALSE;\n    }\n    WCHAR buf[1000];\n    swprintf_s(buf, RTL_NUMBER_OF(buf), L\"\\\\\\\\.\\\\hax_vm%02d\", vm_id);\n    hVM = CreateFileW(buf, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);\n    if (hVM == INVALID_HANDLE_VALUE)\n    {\n        HAXMVM_ERRF(\"Could not create vm.\");\n        return FALSE;\n    }\n    uint32_t vcpu_id;\n    struct hax_qemu_version verq;\n    /* 3~ enable fast mmio */\n    verq.cur_version = 1;\n    verq.least_version = 0;\n    if (!DeviceIoControl(hVM, HAX_VM_IOCTL_NOTIFY_QEMU_VERSION, &verq, sizeof(verq), NULL, 0, &bytes, NULL))\n    {\n    }\n    vcpu_id = 1;\n    if (!DeviceIoControl(hVM, HAX_VM_IOCTL_VCPU_CREATE, &vcpu_id, sizeof(vcpu_id), NULL, 0, &bytes, NULL))\n    {\n        HAXMVM_ERRF(\"could not create vcpu.\");\n        return FALSE;\n    }\n    swprintf_s(buf, RTL_NUMBER_OF(buf), L\"\\\\\\\\.\\\\hax_vm%02d_vcpu%02d\", vm_id, vcpu_id);\n    hVCPU = CreateFileW(buf, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);\n    struct hax_tunnel_info tunnel_info;\n    if (!DeviceIoControl(hVCPU, HAX_VCPU_IOCTL_SETUP_TUNNEL, NULL, 0, &tunnel_info, sizeof(tunnel_info), &bytes, NULL))\n    {\n        HAXMVM_ERRF(\"SETUP_TUNNEL\");\n        return FALSE;\n    }\n    /* memory mapping */\n    struct hax_alloc_ram_info alloc_ram = { 0 };\n    struct hax_set_ram_info ram = { 0 };\n    MEMORY_BASIC_INFORMATION mbi = { 0 };\n    trap_int = VirtualAlloc(NULL, 0x10000, MEM_COMMIT, PAGE_READWRITE);\n    alloc_ram.size = 0x201000;\n    alloc_ram.va = (uint64_t)guestpt;\n    if (!DeviceIoControl(hVM, HAX_VM_IOCTL_ALLOC_RAM, &alloc_ram, sizeof(alloc_ram), NULL, 0, &bytes, NULL))\n    {\n        HAXMVM_ERRF(\"ALLOC_RAM\");\n        return FALSE;\n    }\n    ram.pa_start = (uint64_t)guestpt;\n    ram.size = 0x201000;\n    ram.va = (uint64_t)guestpt;\n    if (!DeviceIoControl(hVM, HAX_VM_IOCTL_SET_RAM, &ram, sizeof(ram), NULL, 0, &bytes, NULL))\n    {\n        HAXMVM_ERRF(\"SET_RAM\");\n        return FALSE;\n    }\n    // fill in the pagedir\n    for (int i = 0; i < 512; i++)\n        guestpt[0x80000 + i] = ((DWORD)guestpt + 4096 * i) | 7;\n    tunnel = (struct hax_tunnel*)tunnel_info.va;\n    struct vcpu_state_t state;\n    if (!DeviceIoControl(hVCPU, HAX_VCPU_GET_REGS, NULL, 0, &state, sizeof(state), &bytes, NULL))\n    {\n        HAXMVM_ERRF(\"GET_REGS\");\n        return FALSE;\n    }\n    /* setup initial states */\n    state._gdt.base = (uint64)gdt;\n    state._gdt.limit = 0x7ff;\n    DWORD trap_addr = (DWORD)trap_int;\n    gdt[1].BaseLow = trap_addr & 0xffff;\n    gdt[1].HighWord.Bytes.BaseMid = (trap_addr >> 16) & 0xff;\n    gdt[1].HighWord.Bytes.BaseHi = (trap_addr >> 24) & 0xff;\n    gdt[1].LimitLow = 0xffff;\n    gdt[1].HighWord.Bytes.Flags1 = 0x9b;\n    gdt[1].HighWord.Bytes.Flags2 = 0x40;\n    gdt[2].BaseLow = trap_addr & 0xffff;\n    gdt[2].HighWord.Bytes.BaseMid = (trap_addr >> 16) & 0xff;\n    gdt[2].HighWord.Bytes.BaseHi = (trap_addr >> 24) & 0xff;\n    gdt[2].LimitLow = 0xffff;\n    gdt[2].HighWord.Bytes.Flags1 = 0x93;\n    gdt[2].HighWord.Bytes.Flags2 = 0x40;\n    GetThreadSelectorEntry(GetCurrentThread(), seg_cs, gdt + (seg_cs >> 3));\n    GetThreadSelectorEntry(GetCurrentThread(), seg_ds, gdt + (seg_ds >> 3));\n\n    state._ldt.selector = 0x18;\n    state._ldt.base = (uint64)&wine_ldt[0];\n    state._ldt.limit = 65535;\n    \n    UINT32 *tss = (UINT32 *)gdt + 0x200;\n    state._tr.selector = 0x18;\n    state._tr.base = (uint64)tss;\n    state._tr.limit = 0x64;\n    state._tr.ar = 0x8b;\n    tss[1] = 0x10000; // SP0\n    tss[2] = 0x10; // SS0\n\n    state._idt.limit = 0x8 * 256 - 1;\n    state._idt.base = (SIZE_T)&idt[0];\n    state._cr3 = guestpt + 0x80000;\n    state._cr0 |= 0x80000001;\n    state._eflags |= 0x200;\n    for (int i = 0; i < 256; i++)\n    {\n        idt[i].DPL = 3;\n        idt[i].type = INT_GATE_INT32;\n        idt[i].selector = 0x0b;\n        idt[i].P = 1;\n        idt[i].offset_low = i;\n        idt[i].offset_high = 0;\n    }\n    memset(trap_int, 0xF4, 256); /* hlt */\n    ((char *)trap_int)[256] = 0xcf; /* iret */\n    ram.pa_start =  (uint64_t)&idt;\n    ram.size = 4096;\n    ram.va =  (uint64_t)&idt;\n    if (!set_ram(&ram))\n    {\n        HAXMVM_ERRF(\"SET_RAM\\n\");\n        return FALSE;\n    }\n    ram.pa_start =  (uint64_t)&wine_ldt & ~0xfff;\n    ram.size = 65536 + 4096;\n    ram.va =  (uint64_t)&wine_ldt & ~0xfff;\n    if (!set_ram(&ram))\n    {\n        HAXMVM_ERRF(\"SET_RAM\\n\");\n        return FALSE;\n    }\n    ram.pa_start = (uint64_t)trap_int;\n    ram.size = 0x10000;\n    ram.va = (uint64_t)trap_int;\n    if (!set_ram(&ram))\n    {\n        HAXMVM_ERRF(\"SET_RAM\");\n        return FALSE;\n    }\n    ram.pa_start = (uint64_t)&gdt;\n    ram.size = 0x1000;\n    ram.va = (uint64_t)&gdt;\n    if (!set_ram(&ram))\n    {\n        HAXMVM_ERRF(\"SET_RAM\");\n        return FALSE;\n    }\n    if (!DeviceIoControl(hVCPU, HAX_VCPU_SET_REGS, &state, sizeof(state), NULL, 0, &bytes, NULL))\n    {\n        HAXMVM_ERRF(\"SET_REGS\");\n        return FALSE;\n    }\n    ((void(*)(void(*intel_vt_x_workaround_update_entry)(const LDT_ENTRY *entry)))GetProcAddress(GetModuleHandleA(\"libwine\"), \"set_intel_vt_x_workaround\"))(intel_vt_x_workaround_update_entry);\n    return TRUE;\n}\n\nBOOL vm_exit()\n{\n    CloseHandle(hVCPU);\n    CloseHandle(hVM);\n    CloseHandle(hSystem);\n    return TRUE;\n}\n\nvoid PUSH16(struct vcpu_state_t *state, WORD val)\n{\n    if (state->_ss.operand_size)\n    {\n        state->_esp -= 2;\n        unsigned char *stack = (unsigned char*)(state->_ss.base + state->_esp);\n        *(LPWORD)stack = val;\n    }\n    else\n    {\n        state->_sp -= 2;\n        unsigned char *stack = (unsigned char*)(state->_ss.base + state->_sp);\n        *(LPWORD)stack = val;\n    }\n}\nvoid PUSH32(struct vcpu_state_t *state, DWORD val)\n{\n    if (state->_ss.operand_size)\n    {\n        state->_esp -= 4;\n        unsigned char *stack = (unsigned char*)(state->_ss.base + state->_esp);\n        *(LPDWORD)stack = val;\n    }\n    else\n    {\n        state->_sp -= 4;\n        unsigned char *stack = (unsigned char*)(state->_ss.base + state->_sp);\n        *(LPDWORD)stack = val;\n    }\n}\nWORD POP16(struct vcpu_state_t *state)\n{\n    if (state->_ss.operand_size)\n    {\n        LPWORD stack = (LPWORD)(state->_ss.base + state->_esp);\n        state->_esp += 2;\n        return *stack;\n    }\n    else\n    {\n        LPWORD stack = (LPWORD)(state->_ss.base + state->_sp);\n        state->_sp += 2;\n        return *stack;\n    }\n}\nDWORD POP32(struct vcpu_state_t *state)\n{\n    if (state->_ss.operand_size)\n    {\n        LPDWORD stack = (LPDWORD)(state->_ss.base + state->_esp);\n        state->_esp += 4;\n        return *stack;\n    }\n    else\n    {\n        LPDWORD stack = (LPDWORD)(state->_ss.base + state->_sp);\n        state->_sp += 4;\n        return *stack;\n    }\n}\nWORD PEEK16(struct vcpu_state_t *state, int i)\n{\n    if (state->_ss.operand_size)\n    {\n        LPWORD stack = (LPWORD)(state->_ss.base + state->_esp);\n        return stack[i];\n    }\n    else\n    {\n        LPWORD stack = (LPWORD)(state->_ss.base + state->_sp);\n        return stack[i];\n    }\n}\nDWORD PEEK32(struct vcpu_state_t *state, int i)\n{\n    if (state->_ss.operand_size)\n    {\n        LPDWORD stack = (LPDWORD)(state->_ss.base + state->_esp);\n        return stack[i];\n    }\n    else\n    {\n        LPDWORD stack = (LPDWORD)(state->_ss.base + state->_sp);\n        return stack[i];\n    }\n}\nvoid relay(LPVOID relay_func, BOOL reg, struct vcpu_state_t *state, DWORD ret_addr, DWORD cbArgs, PEXCEPTION_HANDLER handler, DWORD old_frame16)\n{\n    unsigned char *stack1 = (unsigned char*)(state->_ss.base + state->_sp);\n    unsigned char *stack = stack1;\n    /*\n    * (sp+24) word   first 16-bit arg\n    * (sp+22) word   cs\n    * (sp+20) word   ip\n    * (sp+18) word   bp\n    * (sp+14) long   32-bit entry point (reused for Win16 mutex recursion count)\n    * (sp+12) word   ip of actual entry point (necessary for relay debugging)\n    * (sp+8)  long   relay (argument conversion) function entry point\n    * (sp+4)  long   cs of 16-bit entry point\n    * (sp)    long   ip of 16-bit entry point\n    */\n    DWORD ip = *(DWORD*)stack;\n    stack += sizeof(DWORD);\n    DWORD cs = *(DWORD*)stack;\n    stack += sizeof(DWORD);\n    DWORD relay = *(DWORD*)stack;\n    stack += sizeof(DWORD);\n    WORD ip2 = *(WORD*)stack;\n    stack += sizeof(WORD);\n    DWORD entry = *(DWORD*)stack;\n    //for debug\n    void *entryf = (void*)entry;\n    stack += sizeof(DWORD);\n    WORD bp = *(WORD*)stack;\n    stack += sizeof(WORD);\n    WORD ip19 = *(WORD*)stack;\n    stack += sizeof(WORD);\n    WORD cs16 = *(WORD*)stack;\n    stack += sizeof(WORD);\n    WORD *args = (WORD*)stack;\n    state->_eip = ip;\n    load_seg(&state->_cs, (WORD)cs);\n#include <pshpack1.h>\n    /* 16-bit stack layout after __wine_call_from_16() */\n    typedef struct _STACK16FRAME\n    {\n        struct STACK32FRAME *frame32;        /* 00 32-bit frame from last CallTo16() */\n        DWORD         edx;            /* 04 saved registers */\n        DWORD         ecx;            /* 08 */\n        DWORD         ebp;            /* 0c */\n        WORD          ds;             /* 10 */\n        WORD          es;             /* 12 */\n        WORD          fs;             /* 14 */\n        WORD          gs;             /* 16 */\n        DWORD         callfrom_ip;    /* 18 callfrom tail IP */\n        DWORD         module_cs;      /* 1c module code segment */\n        DWORD         relay;          /* 20 relay function address */\n        WORD          entry_ip;       /* 22 entry point IP */\n        DWORD         entry_point;    /* 26 API entry point to call, reused as mutex count */\n        WORD          bp;             /* 2a 16-bit stack frame chain */\n        WORD          ip;             /* 2c return address */\n        WORD          cs;             /* 2e */\n    } STACK16FRAME;\n#include <poppack.h>\n    CONTEXT context;\n    STACK32FRAME dummy_stack32 = { 0 };\n    dummy_stack32.retaddr = ret_addr;\n    dummy_stack32.nb_args = cbArgs;\n    dummy_stack32.frame.Handler = handler;\n    DWORD osp = state->_esp;\n    PUSH16(state, state->_gs.selector);\n    PUSH16(state, state->_fs.selector);\n    PUSH16(state, state->_es.selector);\n    PUSH16(state, state->_ds.selector);\n    PUSH32(state, state->_ebp);\n    PUSH32(state, state->_ecx);\n    PUSH32(state, state->_edx);\n    PUSH32(state, osp);\n    save_context_from_state(&context, state);\n    STACK16FRAME *oa = (STACK16FRAME*)wine_ldt_get_ptr((WORD)context.SegSs, context.Esp);\n    DWORD ooo = (WORD)context.Esp;\n    int off = 0;\n    if (reg)\n    {\n        context.Esp = osp + (SIZE_T)stack - (SIZE_T)stack1 - 4;\n        off = ooo - context.Esp;\n        context.Ebp = (context.Ebp & ~0xffff) | bp;\n        context.Eip = ip19;\n        context.SegCs = cs16;\n    }\n    int fret;\n    LPVOID old;\n    PCONTEXT pctx = NULL;\n#if _MSC_VER\n    __asm\n    {\n        mov old, esp\n        push cbArgs\n        push old /* target(esp) */\n        push retaddr /* retaddr */\n        push ebp\n        push ebx\n        push esi\n        push edi\n        push old_frame16 /* frame16 */\n        /* set up exception handler */\n        push handler\n        mov  eax, fs:[0]\n        push eax\n        mov dummy_stack32.frame.Next, eax\n        mov  fs : [0], esp\n        push cs\n        push 0\n        mov eax, [oa]\n        mov[eax], esp\n        lea eax, [context]\n        push eax\n        push args\n        push entry\n        call relay_func\n        add esp, 12 + 8\n        mov fret, eax\n        pop dword ptr fs : [0]\n        pop eax\n        jmp skip\n        retaddr :\n        mov pctx, ecx\n        skip:\n        mov esp, old\n    }\n#else\n    fret = ((int(*)(void *entry_point, unsigned char *args16, CONTEXT *context))relay_func)((void*)entry, (unsigned char*)args, &context);\n#endif\n    if (!reg)\n    {\n        state->_eax = fret;\n    }\n    if (pctx)\n    {\n        /* Throw16 */\n        context = *pctx;\n        reg = TRUE;\n    }\n    if (!reg)\n    {\n        state->_eax = fret;\n        context.SegSs = ((size_t)dynamic_getWOW32Reserved() >> 16) & 0xFFFF;\n        context.Esp = ((size_t)dynamic_getWOW32Reserved()) & 0xFFFF;\n        oa = (STACK16FRAME*)wine_ldt_get_ptr(context.SegSs, context.Esp);\n    }\n    else\n    {\n        oa = (STACK16FRAME*)wine_ldt_get_ptr(context.SegSs, context.Esp + off);\n    }\n    if (reg) state->_eax = (DWORD)context.Eax;\n    state->_ecx = reg ? (DWORD)context.Ecx : (DWORD)oa->ecx;\n    if (reg) state->_edx = (DWORD)context.Edx;\n    else\n        state->_edx = (DWORD)oa->edx;\n    state->_ebx = (DWORD)context.Ebx;\n    state->_esp = (DWORD)context.Esp;\n    state->_ebp = (DWORD)context.Ebp;\n    state->_esi = (DWORD)context.Esi;\n    state->_edi = (DWORD)context.Edi;\n    load_seg(&state->_es, reg ? (WORD)context.SegEs : (WORD)oa->es);\n    load_seg(&state->_ss, (WORD)context.SegSs);\n    load_seg(&state->_ds, reg ? (WORD)context.SegDs : (WORD)oa->ds);\n    //ES, CS, SS, DS, FS, GS\n    /* Some programs expect that gs is not a valid selector! */\n    /* Some programs expect that fs is not a valid selector! */\n    /* win16 sets 0? */\n    load_seg(&state->_fs, 0);//(WORD)context.SegFs == reg_fs ? 0 : context.SegFs;\n    load_seg(&state->_gs, 0);//(WORD)context.SegGs == reg_gs ? 0 : context.SegGs;\n    if (reg)\n    {\n        if (!(ip19 != context.Eip || cs16 != context.SegCs))\n        {\n            context.Eip = oa->callfrom_ip;\n            context.SegCs = oa->module_cs;\n        }\n        else\n        {\n            /* CS:IP changed! */\n            context.Eip = context.Eip;\n        }\n        state->_esp = context.Esp;\n        state->_ebp = context.Ebp;\n    }\n    else\n    {\n        state->_esp = osp + 18 + 2;\n        state->_esp -= (ooo - context.Esp);\n        WORD bpp = state->_esp;\n        state->_esp = context.Esp + 0x2c;\n        state->_bp = bp;\n    }\n    set_eflags(state, context.EFlags);\n    state->_eip = context.Eip;\n    load_seg(&state->_cs, (WORD)context.SegCs);\n}\n\nLPBYTE get_base_addr(WORD sel)\n{\n    return wine_ldt_get_base(wine_ldt + (sel >> 3));\n}\nstatic uint64 dr7;\nvoid set_break_point(struct vcpu_state_t *state, WORD sel, DWORD addr, int breakpoint)\n{\n    LPBYTE base = get_base_addr(sel);\n    if (!base)\n        return;\n    if (wine_ldt_get_limit(wine_ldt + (sel >> 3)) < addr)\n        return;\n    uint64 linear = (uint64)base + addr;\n    switch (breakpoint)\n    {\n    case 0:\n        state->_dr0 = linear;\n        break;\n    case 1:\n        state->_dr1 = linear;\n        break;\n    case 2:\n        state->_dr2 = linear;\n        break;\n    case 3:\n        state->_dr3 = linear;\n        break;\n    default:\n        return;\n    }\n    state->_dr7 |= (1 << (2 * breakpoint + 1)) | (0 << (18 + 4 * breakpoint));\n    state->_dr6 = 0;\n}\ntypedef int disassemble_debug_t(char *buffer, UINT8 *oprom, BOOL op_size, UINT64 eip);\nstatic disassemble_debug_t *disassemble_debug;\nstatic void trace(struct vcpu_state_t *state, uint16 cs, uint32 eip, uint16 ss, uint32 esp, uint32 eflags)\n{\n    char buf[512];\n    UINT8 *d = get_base_addr(cs) + eip;\n\n    if (!disassemble_debug)\n    {\n        disassemble_debug = (disassemble_debug_t*)GetProcAddress(LoadLibraryA(\"vm86.dll\"), \"disassemble_debug\");\n    }\n    int len = disassemble_debug(buf, d, (wine_ldt_get_flags(wine_ldt + (cs >> 3)) & WINE_LDT_FLAGS_32BIT) == WINE_LDT_FLAGS_32BIT, eip);\n    int i;\n    fprintf(stderr, \"%04x:%04x\\t\", cs, eip);\n    for (i = 0; i < len; i++)\n    {\n        fprintf(stderr, \"%02x\", d[i]);\n    }\n    fprintf(stderr, \"\\t%s\\n\", buf);\n    eflags &= ~2;\n    eflags &= ~0x100;\n    eflags |= 0x200;\n    if (state->_fs.selector || state->_gs.selector)\n    {\n        fprintf(stderr,\n            \"EAX:%04X,ECX:%04X,EDX:%04X,EBX:%04X,\"\n            \"ESP:%04X,EBP:%04X,ESI:%04X,EDI:%04X,\"\n            \"ES:%04X,CS:%04X,SS:%04X,DS:%04X,FS:%04x,GS:%04x,\"\n            \"IP:%04X,stack:%08X,\"\n            \"EFLAGS:%08X\"\n            \"\\n\",\n            state->_eax, state->_ecx, state->_edx, state->_ebx,\n            esp, state->_ebp, state->_esi, state->_edi,\n            state->_es.selector, cs, ss, state->_ds.selector, state->_fs.selector, state->_gs.selector,\n            eip, *(LPDWORD)(get_base_addr(ss) + esp),\n            eflags\n        );\n    }\n    else\n    {\n        fprintf(stderr,\n            \"EAX:%04X,ECX:%04X,EDX:%04X,EBX:%04X,\"\n            \"ESP:%04X,EBP:%04X,ESI:%04X,EDI:%04X,\"\n            \"ES:%04X,CS:%04X,SS:%04X,DS:%04X,\"\n            \"IP:%04X,stack:%08X,\"\n            \"EFLAGS:%08X\"\n            \"\\n\",\n            state->_eax, state->_ecx, state->_edx, state->_ebx,\n            esp, state->_ebp, state->_esi, state->_edi,\n            state->_es.selector, cs, ss, state->_ds.selector,\n            eip, *(LPDWORD)(get_base_addr(ss) + esp),\n            eflags\n        );\n    }\n}\nBOOL has_x86_exception_err(WORD num)\n{\n    switch (num)\n    {\n    case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:\n        return FALSE;\n    case 8:\n        return TRUE;\n    case 9:\n        return FALSE;\n    case 10:case 11:case 12:case 13:case 14:\n        return TRUE;\n    case 15:case 16:\n        return FALSE;\n    case 17:\n        return TRUE;\n    case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:\n        return FALSE;\n    case 30:\n        return TRUE;\n    case 31:\n        return FALSE;\n    }\n    return FALSE;\n}\n\nBOOL workaround_watcom(struct vcpu_state_t *state, uint16 cs, uint32 eip)\n{\n    /* workaround for Watcom C 8.5 win386 startup */\n    const unsigned char startup[] = {\n        0xbf, 0x02, 0x00,\n        0x26, 0x8a, 0x2f,\n        0x26, 0x8a, 0x0f,\n        0x3a, 0xe9,\n        0x74, 0xf9,\n        0x26, 0x8a, 0x0f,\n        0x26, 0x3a, 0x0f,\n        0x75, 0x10,\n        0x2d, 0x01, 0x00,\n        0x83, 0xda, 0x00,\n        0x8a, 0xec,\n        0x0a, 0xe8,\n        0x0a, 0xee,\n        0x0a, 0xea,\n        0x75, 0xeb,\n        0x4f,\n        0x75, 0xe5,\n        0xf7, 0xda,\n        0xf7, 0xd8,\n        0x83, 0xda, 0x00,\n        0xb9, 0x6e, 0x00,\n    };\n    const unsigned char *code = get_base_addr(cs) + eip;\n    if (!memcmp(code - sizeof(startup), startup, sizeof(startup)) && code[0] == 0xf7 && code[1] == 0xf1) /* div ax, cx */\n    {\n        state->_dx = 0;\n        return TRUE;\n    }\n    return FALSE;\n}\n\nBOOL syscall_init = FALSE;\nLPBYTE syscall_trap = FALSE;\nvoid fstsw(WORD* a);\nvoid vm86main(CONTEXT *context, DWORD cbArgs, PEXCEPTION_HANDLER handler,\n    void(*from16_reg)(void),\n    LONG(*__wine_call_from_16)(void),\n    int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context),\n    void(*__wine_call_to_16_ret)(void),\n    int dasm,\n    pm_interrupt_handler pih\n)\n{\n    DWORD old_frame16 = PtrToUlong(dynamic_getWOW32Reserved());\n    if (!initflag)\n    {\n        haxmvm_panic(\"Could not initialize the hypervisor.\\nHAXM may not be installed.\\n\");\n    }\n    if (tunnel->_exit_status == HAX_EXIT_STATECHANGE)\n    {\n        haxmvm_panic(\"hypervisor is panicked!!!\");\n    }\n    if (!syscall_init)\n    {\n        SIZE_T page1 = (SIZE_T)from16_reg / 4096 * 4096;\n        SIZE_T page2 = (SIZE_T)__wine_call_from_16 / 4096 * 4096;\n        SIZE_T page3 = (SIZE_T)__wine_call_to_16_ret / 4096 * 4096;\n        LPBYTE trap = syscall_trap = (LPBYTE)VirtualAlloc(NULL, 4096, MEM_COMMIT, PAGE_READWRITE);\n        memset(trap, 0xEE, 4096); /* out forces a vmexit from user mode without modifing any registers */\n        struct hax_alloc_ram_info alloc_ram = { 0 };\n        struct hax_set_ram_info ram = { 0 };\n        alloc_ram.size = 4096;\n        alloc_ram.va = trap;\n        DWORD bytes;\n        if (!DeviceIoControl(hVM, HAX_VM_IOCTL_ALLOC_RAM, &alloc_ram, sizeof(alloc_ram), NULL, 0, &bytes, NULL))\n        {\n            HAXMVM_ERRF(\"ALLOC_RAM\");\n        }\n        ram.pa_start = (SIZE_T)trap;\n        ram.size = (SIZE_T)4096;\n        ram.va = (SIZE_T)trap;\n        if (!DeviceIoControl(hVM, HAX_VM_IOCTL_SET_RAM, &ram, sizeof(ram), NULL, 0, &bytes, NULL))\n        {\n            HAXMVM_ERRF(\"SET_RAM\\n\");\n        }\n        guestpt[page1 >> 12] = (DWORD)trap | 7;\n        guestpt[page2 >> 12] = (DWORD)trap | 7;\n        guestpt[page3 >> 12] = (DWORD)trap | 7;\n        syscall_init = TRUE;\n    }\n    is_single_step = dasm;\n    MEMORY_BASIC_INFORMATION mbi;\n    DWORD bytes;\n    DWORD ret_addr;\n    struct vcpu_state_t state_ini;\n    {\n\n        DWORD bytes;\n        struct vcpu_state_t state;\n        if (!DeviceIoControl(hVCPU, HAX_VCPU_GET_REGS, NULL, 0, &state, sizeof(state), &bytes, NULL))\n            HAXMVM_ERRF(\"GET_REGS\");\n        load_seg(&state._gs, (WORD)0);\n        load_seg(&state._fs, (WORD)0);\n        load_seg(&state._es, (WORD)context->SegEs);\n        load_seg(&state._ds, (WORD)context->SegDs);\n        load_seg(&state._cs, (WORD)context->SegCs);\n        load_seg(&state._ss, (WORD)context->SegSs);\n\n        state._edi = context->Edi;\n        state._esi = context->Esi;\n        state._ebx = context->Ebx;\n        state._edx = context->Edx;\n        state._ecx = context->Ecx;\n        state._eax = context->Eax;\n\n        state._ebp = context->Ebp;\n        state._eip = context->Eip;\n        set_eflags(&state, context->EFlags);\n        state._esp = context->Esp - cbArgs;\n\n        if (!DeviceIoControl(hVCPU, HAX_VCPU_SET_REGS, &state, sizeof(state), NULL, 0, &bytes, NULL))\n            HAXMVM_ERRF(\"SET_REGS\");\n        unsigned char *stack = (unsigned char*)state._ss.base + state._esp;\n        ret_addr = (*(LPDWORD)stack) + 1;\n    }\n\n    struct vcpu_state_t state2;\n    DeviceIoControl(hVCPU, HAX_VCPU_GET_REGS, NULL, 0, &state2, sizeof(state2), &bytes, NULL);\n    if (is_single_step)\n    {\n        trace(&state2, state2._cs.selector, state2._eip, state2._ss.selector, state2._esp, state2._eflags);\n    }\n    while (TRUE)\n    {\n        dprintf(\"run %04X:%04X(base:%04llX) ESP:%08X F:%08X CS:%08X\\n\", state2._cs.selector, state2._eip, state2._cs.base, state2._esp, state2._eflags, state2._cs.ar);\n        if (state2._cs.selector == (ret_addr >> 16) && state2._eip == (ret_addr & 0xFFFF))\n        {\n            if (!DeviceIoControl(hVCPU, HAX_VCPU_SET_REGS, &state2, sizeof(state2), NULL, 0, &bytes, NULL))\n            {\n                HAXMVM_ERRF(\"SET_REGS\");\n            }\n            break;\n        }\n        if (is_single_step)\n        {\n            /* Debug exception */\n            fprintf(stderr, \"%04x:%04x EAX:%04x EDX:%04x EF:%04x %p\\n\", state2._cs.selector, state2._eip,\n                state2._eax, state2._edx, state2._eflags, (LPBYTE)state2._cs.base + state2._eip);\n        }\n        if (!DeviceIoControl(hVCPU, HAX_VCPU_IOCTL_RUN, NULL, 0, NULL, 0, &bytes, NULL))\n            return;\n        DeviceIoControl(hVCPU, HAX_VCPU_GET_REGS, NULL, 0, &state2, sizeof(state2), &bytes, NULL);\n        dprintf(\"end %04X:%04X(base:%04llX) ESP:%08X F:%08X\\n\", state2._cs.selector, state2._eip, state2._cs.base, state2._esp, state2._eflags);\n        if (state2._cs.selector == (ret_addr >> 16) && state2._eip == (ret_addr & 0xFFFF))\n        {\n            if (!DeviceIoControl(hVCPU, HAX_VCPU_SET_REGS, &state2, sizeof(state2), NULL, 0, &bytes, NULL))\n            {\n                HAXMVM_ERRF(\"SET_REGS\");\n            }\n            break;\n        }\n        LPVOID ptr = (LPBYTE)state2._cs.base + state2._eip;\n        switch(tunnel->_exit_status)\n        {\n            case HAX_EXIT_IO:\n                if (tunnel->io._direction == HAX_IO_OUT)\n                {\n                    LPBYTE ptr2 = (LPBYTE)ptr - 1;\n                    BOOL is_reg = ptr2 == from16_reg;\n                    if (is_reg || ptr2 == __wine_call_from_16)\n                    {\n                        relay(relay_call_from_16, is_reg, &state2, ret_addr, cbArgs, handler, old_frame16);\n                        if (!DeviceIoControl(hVCPU, HAX_VCPU_SET_REGS, &state2, sizeof(state2), NULL, 0, &bytes, NULL))\n                        {\n                            HAXMVM_ERRF(\"SET_REGS\");\n                        }\n                        break;\n                    }\n\t            }\n                else if (tunnel->io._direction == HAX_IO_IN)\n                {\n                    printf(\"\");\n                }\n                break;\n            case HAX_EXIT_HLT:\n                if (((DWORD)ptr >= (DWORD)trap_int) && ((DWORD)ptr <= ((DWORD)trap_int + 256)))\n                {\n                    int intvec = ((DWORD)ptr & 0xff) - 1;\n                    BOOL has_err = has_x86_exception_err(intvec);\n                    DWORD err = has_err ? PEEK32(&state2, 0) : 0;\n                    DWORD eip = PEEK32(&state2, (has_err ? 1 : 0) + 0);\n                    DWORD cs = PEEK32(&state2, (has_err ? 1 : 0) + 1);\n                    DWORD flags = PEEK32(&state2, (has_err ? 1 : 0) + 2);\n                    DWORD old_esp = PEEK32(&state2, (has_err ? 1 : 0) + 3);\n                    DWORD old_ss = PEEK32(&state2, (has_err ? 1 : 0) + 4);\n                    const char *name = NULL;\n                    switch (intvec)\n                    {\n                    case 0: name = \"#DE\"; break;\n                    case 2: name = \"int 2h\"; break;\n                    case 4: name = \"#OF\"; break;\n                    case 6: name = \"#UD\"; break;\n                    case 7: name = \"#NM\"; break;\n                    case 8: name = \"#DF\"; break;\n                    case 10: name = \"#TS\"; break;\n                    case 11: name = \"#NP\"; break;\n                    case 12: name = \"#SS\"; break;\n                    case 13: name = \"#GP\"; break;\n                    case 14: name = \"#PF\"; break;\n                    }\n                    state2._eip = 256;\n                    if (intvec == 1 && (state2._dr6 & 15 || is_single_step))\n                    {\n                        if (state2._dr6 & 15)\n                        {\n                            if (state2._dr6 & 1)\n                            {\n                                fprintf(stderr, \"breakpoint 0\\n\");\n                            }\n                            if (state2._dr6 & 2)\n                            {\n                                fprintf(stderr, \"breakpoint 1\\n\");\n                            }\n                            if (state2._dr6 & 4)\n                            {\n                                fprintf(stderr, \"breakpoint 2\\n\");\n                            }\n                            if (state2._dr6 & 8)\n                            {\n                                fprintf(stderr, \"breakpoint 3\\n\");\n                            }\n                            state2._dr6 = 0;\n                            flags |= 0x100;\n                            dr7 = state2._dr7;\n                            state2._dr7 = 0;\n                            /* breakpoint -> disable -> step -> enable */\n                        }\n                        else if (!is_single_step)\n                        {\n                            flags &= ~0x100;\n                            state2._dr7 = dr7;\n                        }\n                        trace(&state2, cs, eip, old_ss, old_esp, flags);\n                        state2._eip = 256;\n                        break;\n                    }\n                    dprintf(\"err:%X flg:%08X %04X:%04X\\n\", err, flags, cs, eip);\n                    if (intvec == 0x0e)\n                    {\n                        alloc_ram(state2._cr2 & ~0xfff, 4096);\n                        state2._esp += 4;\n                    }\n                    else if (name)\n                    {\n                        if (intvec == 0)\n                        {\n                            if (workaround_watcom(&state2, cs, eip))\n                            {\n                                break;\n                            }\n                        }\n                        if (intvec == 0x0d)\n                        {\n                            if (err == 0x40)\n                            {\n                                /* many startups access the BDA directly */\n                                static WORD dosmem_0040H = 0;\n                                if (!dosmem_0040H)\n                                {\n                                    DWORD(WINAPI *GetProcAddress16)(HMODULE16, LPCSTR);\n                                    HMODULE16(WINAPI *GetModuleHandle16)(LPCSTR);\n                                    static HMODULE krnl386;\n                                    if (!krnl386)\n                                        krnl386 = LoadLibraryA(KRNL386);\n                                    GetProcAddress16 = (DWORD(WINAPI *)(HMODULE16, LPCSTR))GetProcAddress(krnl386, \"GetProcAddress16\");\n                                    GetModuleHandle16 = (HMODULE16(WINAPI *)(LPCSTR))GetProcAddress(krnl386, \"GetModuleHandle16\");\n                                    dosmem_0040H = (WORD)GetProcAddress16(GetModuleHandle16(\"KERNEL\"), (LPCSTR)193);\n                                    (void(*)(void))GetProcAddress(krnl386, \"DOSVM_start_bios_timer\")();\n                                }\n                                err = POP32(&state2);\n                                eip = POP32(&state2);\n                                cs = POP32(&state2);\n                                flags = POP32(&state2);\n                                old_esp = POP32(&state2);\n                                old_ss = POP32(&state2);\n                                /* allocate segment 40h */\n                                LPLDT_ENTRY entry = wine_ldt + (dosmem_0040H >> __AHSHIFT);\n                                gdt[0x40 >> __AHSHIFT] = *entry;\n                                load_seg(&state2._cs, cs);\n                                state2._eip = eip;\n                                set_eflags(&state2, flags & ~0x10000);\n                                load_seg(&state2._ss, old_ss);\n                                state2._esp = old_esp;\n                                break;\n                            }\n                        }\n                        DWORD handler = pih(intvec, MAKESEGPTR(cs, eip));\n                        if (!handler)\n                        {\n                            trace(&state2, cs, eip, old_ss, old_esp, flags);\n                            HAXMVM_ERRF(\"%s %02x %04x %04x:%04x %04x:%04x\", name, intvec, err, cs, eip, old_ss, old_esp);\n                            HAXMVM_ERRF(\"%04X:%04X(base:%04llX) ESP:%08X\", state2._cs.selector, state2._eip, state2._cs.base, state2._esp);\n                            HAXMVM_ERRF(\"exception\");\n                            haxmvm_panic(\"exception %s\", name);\n                        }\n                        if (has_err)\n                        {\n                            err = POP32(&state2);\n                        }\n                        eip = POP32(&state2);\n                        cs = POP32(&state2);\n                        flags = POP32(&state2);\n                        old_esp = POP32(&state2);\n                        old_ss = POP32(&state2);\n                        state2._eip = OFFSETOF(handler);\n                        set_eflags(&state2, flags);\n                        load_seg(&state2._cs, SELECTOROF(handler));\n                        load_seg(&state2._ss, old_ss);\n                        state2._esp = old_esp;\n                    }\n                    else\n                    {\n                            DWORD eip = POP32(&state2);\n                            DWORD cs = POP32(&state2);\n                            DWORD eflags = POP32(&state2);\n                            DWORD esp = POP32(&state2);\n                            DWORD ss = POP32(&state2);\n                            load_seg(&state2._cs, (WORD)cs);\n                            state2._eip = eip;\n                            load_seg(&state2._ss, (WORD)ss);\n                            state2._esp = esp;\n                            CONTEXT ctx;\n                            save_context_from_state(&ctx, &state2);\n                            if (!DeviceIoControl(hVCPU, HAX_VCPU_SET_REGS, &state2, sizeof(state2), NULL, 0, &bytes, NULL))\n                            {\n                                    HAXMVM_ERRF(\"SET_REGS\");\n                            }\n                            if (intvec == 0x10) // redirect fpu errors to int 13h\n                            {\n                                WORD sw;\n                                fstsw(&sw);\n                                if (sw & 0x80)\n                                    intvec = 2;\n                            }\n                            dynamic__wine_call_int_handler(&ctx, intvec);\n                            load_context_to_state(&ctx, &state2);\n                     }\n                }\n                break;\n            case HAX_EXIT_INTERRUPT: //TODO: vm_inject\n                break;\n            case HAX_EXIT_STATECHANGE:\n            default:\n                HAXMVM_ERRF(\"%04X:%04X(base:%04llX) ESP:%08X\", state2._cs.selector, state2._eip, state2._cs.base, state2._esp);\n                HAXMVM_ERRF(\"hypervisor is panicked!!!\");\n                haxmvm_panic(\"hypervisor is panicked!!!\");\n        }\n        if (!DeviceIoControl(hVCPU, HAX_VCPU_SET_REGS, &state2, sizeof(state2), NULL, 0, &bytes, NULL))\n        {\n                HAXMVM_ERRF(\"SET_REGS\");\n        }\n    }\n    save_context(context);\n}\n\n__declspec(dllexport) DWORD wine_call_to_16_vm86(DWORD target, DWORD cbArgs, PEXCEPTION_HANDLER handler,\n    void(*from16_reg)(void),\n    LONG(*__wine_call_from_16)(void),\n    int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context),\n    void(*__wine_call_to_16_ret)(void),\n    int dasm,\n    BOOL vm86,\n    void *memory_base,\n    pm_interrupt_handler pih)\n{\n\n    mem = vm86 ? (UINT8*)memory_base : NULL;\n    if (!initflag)\n        initflag = init_vm86(vm86);\n    CONTEXT context;\n    PVOID oldstack = dynamic_getWOW32Reserved();\n    save_context(&context);\n    //why??\n    dynamic_setWOW32Reserved(oldstack);\n    context.SegSs = ((size_t)dynamic_getWOW32Reserved() >> 16) & 0xFFFF;\n    context.Esp = ((size_t)dynamic_getWOW32Reserved()) & 0xFFFF;\n    context.SegCs = target >> 16;\n    context.Eip = target & 0xFFFF;//i386_jmp_far(target >> 16, target & 0xFFFF);\n    vm86main(&context, cbArgs, handler, from16_reg, __wine_call_from_16, relay_call_from_16, __wine_call_to_16_ret, dasm, pih);\n    return (context.Eax & 0xffff) | context.Edx << 16;\n}\n__declspec(dllexport) void wine_call_to_16_regs_vm86(CONTEXT *context, DWORD cbArgs, PEXCEPTION_HANDLER handler,\n    void(*from16_reg)(void),\n    LONG(*__wine_call_from_16)(void),\n    int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context),\n    void(*__wine_call_to_16_ret)(void),\n    int dasm,\n    BOOL vm86,\n    void *memory_base,\n    pm_interrupt_handler pih\n)\n{\n    mem = vm86 ? (UINT8*)memory_base : NULL;\n    if (!initflag)\n        initflag = init_vm86(vm86);\n    vm86main(context, cbArgs, handler, from16_reg, __wine_call_from_16, relay_call_from_16, __wine_call_to_16_ret, dasm, pih);\n\n\n}\n\nSIZE_T base = 0;\nSIZE_T x87func = 0x200 - 0x10;\nvoid callx87(const char *addr, LPCVOID eax)\n{\n    DWORD bytes;\n    struct vcpu_state_t state;\n    DeviceIoControl(hVCPU, HAX_VCPU_GET_REGS, NULL, 0, &state, sizeof(state), &bytes, NULL);\n    state._rip = addr;\n    state._eax = eax;\n    load_seg(&state._cs, seg_cs);\n    load_seg(&state._ds, seg_ds);\n    while (TRUE)\n    {\n        DeviceIoControl(hVCPU, HAX_VCPU_SET_REGS, &state, sizeof(state), NULL, 0, &bytes, NULL);\n        if (!DeviceIoControl(hVCPU, HAX_VCPU_IOCTL_RUN, NULL, 0, NULL, 0, &bytes, NULL))\n            return;\n        DeviceIoControl(hVCPU, HAX_VCPU_GET_REGS, NULL, 0, &state, sizeof(state), &bytes, NULL);\n        if (tunnel->_exit_status == HAX_EXIT_HLT)\n        {\n            struct vcpu_state_t state2 = state;\n            LPVOID ptr = (LPBYTE)state2._cs.base + state2._eip;\n            if (((DWORD)ptr >= (DWORD)trap_int) && ((DWORD)ptr <= ((DWORD)trap_int + 256)))\n            {\n                int intvec = ((DWORD)ptr & 0xff) - 1;\n                state2._eip = 256;\n                if (intvec == 0x0e)\n                {\n                    alloc_ram(state2._cr2 & ~0xfff, 4096);\n                    state2._esp += 4;\n                }\n                else\n                    break;\n            }\n            else\n                break;\n            state = state2;\n        }\n        else\n            break;\n    }\n    if (tunnel->_exit_status == HAX_EXIT_STATECHANGE)\n    {\n        HAXMVM_ERRF(\"hypervisor is panicked!!!\");\n        haxmvm_panic(\"win87em: hypervisor is panicked!!!\");\n    }\n}\n/* x87 service functions */\nstatic BOOL get_fpu_regs(struct fx_layout *fx)\n{\n    if (!DeviceIoControl(hVCPU, HAX_VCPU_IOCTL_GET_FPU, NULL, 0, fx, sizeof(*fx), NULL, NULL))\n    {\n        HAXMVM_ERRF(\"HAX_VCPU_IOCTL_GET_FPU\");\n        return FALSE;\n    }\n    return TRUE;\n}\nstatic BOOL set_fpu_regs(struct fx_layout *fx)\n{\n    if (!DeviceIoControl(hVCPU, HAX_VCPU_IOCTL_SET_FPU, fx, sizeof(*fx), NULL, 0, NULL, NULL))\n    {\n        HAXMVM_ERRF(\"HAX_VCPU_IOCTL_SET_FPU\");\n        return FALSE;\n    }\n    return TRUE;\n}\nvoid fldcw(WORD a)\n{\n    struct fx_layout fx;\n    if (!get_fpu_regs(&fx))\n    {\n        return;\n    }\n    fx.fcw = a;\n    if (!set_fpu_regs(&fx))\n    {\n        return;\n    }\n}\nvoid wait()\n{\n    char instr[] = { 0x9b, 0xee }; /* wait */\n    callx87(instr, NULL);\n}\nvoid fninit()\n{\n    char instr[] = { 0xdb, 0xe3, 0xee }; /* fninit */\n    callx87(instr, NULL);\n}\nvoid fstcw(WORD* a)\n{\n    struct fx_layout fx;\n    if (!get_fpu_regs(&fx))\n    {\n        return;\n    }\n    *a = fx.fcw;\n}\nvoid fstsw(WORD* a)\n{\n    struct fx_layout fx;\n    if (!get_fpu_regs(&fx))\n    {\n        return;\n    }\n    *a = fx.fsw;\n}\nvoid frndint()\n{\n    char instr[] = { 0xd9, 0xfc, 0xee }; /* frndint */\n    callx87(instr, NULL);\n}\nvoid fclex()\n{\n    char instr[] = { 0xdb, 0xe2, 0xee }; /* fnclex */\n    callx87(instr, NULL);\n}\nvoid fsave(char* a)\n{\n    char instr[] = { 0xdd, 0x30, 0xee }; /* fnsave [eax] */\n    callx87(instr, a);\n}\nvoid frstor(const char* a)\n{\n    char instr[] = { 0xdd, 0x20, 0xee }; /* frstor [eax] */\n    callx87(instr, a);\n}\nvoid fstenv32(char* a)\n{\n    const char instr[] = { 0xd9, 0x30, 0xee }; /* fnstenv dword ptr [eax] */\n    callx87(instr, a);\n}\ntypedef void(*fldcw_t)(WORD);\ntypedef void(*wait_t)();\ntypedef void(*fninit_t)();\ntypedef void(*fstcw_t)(WORD*);\ntypedef void(*fstsw_t)(WORD*);\ntypedef void(*frndint_t)();\ntypedef void(*fclex_t)();\ntypedef void(*fsave_t)(char*);\ntypedef void(*fstenv32_t)(char*);\ntypedef void(*frstor_t)(const char*);\ntypedef DWORD(*fistp_t)(WORD);\ntypedef struct\n{\n    fldcw_t fldcw;\n    wait_t wait;\n    fninit_t fninit;\n    fstcw_t fstcw;\n    fstsw_t fstsw;\n    frndint_t frndint;\n    fclex_t fclex;\n    fsave_t fsave;\n    frstor_t frstor;\n    fstenv32_t fstenv32;\n    fistp_t fistp;\n} x87function;\n__declspec(dllexport) void load_x87function(x87function *func)\n{\n    func->fclex = fclex;\n    func->fldcw = fldcw;\n    func->fninit = fninit;\n    func->frndint = frndint;\n    func->frstor = frstor;\n    func->fsave = fsave;\n    func->fstcw = fstcw;\n    func->fstsw = fstsw;\n    func->wait = wait;\n    func->fstenv32 = fstenv32;\n}\n"
  },
  {
    "path": "haxmvm/haxmvm.h",
    "content": "#pragma once\n#include <stdio.h>\n#include <windows.h>\n#include <winioctl.h>\n// Signed Types\ntypedef signed char         int8;\ntypedef signed short        int16;\ntypedef signed int          int32;\ntypedef signed long long    int64;\n\n// Unsigned Types\ntypedef unsigned char       uint8;\ntypedef unsigned short      uint16;\ntypedef unsigned int        uint32;\ntypedef unsigned int        uint;\ntypedef unsigned long long  uint64;\ntypedef unsigned long       ulong;\n\ntypedef unsigned char       uint8_t;\ntypedef unsigned short      uint16_t;\ntypedef unsigned int        uint32_t;\ntypedef unsigned long long  uint64_t;\ntypedef unsigned long       ulong_t;\n\n/* Common typedef for all platform */\ntypedef uint64 hax_pa_t;\ntypedef uint64 hax_pfn_t;\ntypedef uint64 paddr_t;\ntypedef uint64 vaddr_t;\n\n#include <pshpack1.h>\nstruct hax_module_version {\n    uint32_t compat_version;\n    uint32_t cur_version;\n};\nstruct vmx_msr {\n    uint64_t entry;\n    uint64_t value;\n};\n#define HAX_MAX_MSR_ARRAY 0x20\nstruct hax_msr_data {\n    uint16_t nr_msr;\n    uint16_t done;\n    uint16_t pad[2];\n    struct vmx_msr entries[HAX_MAX_MSR_ARRAY];\n};\nstruct hax_set_ram_info {\n    uint64_t pa_start;\n    uint32_t size;\n    uint8_t flags;\n    uint8_t pad[3];\n    uint64_t va;\n};\n\nstruct hax_alloc_ram_info {\n    uint32_t size;\n    uint32_t pad;\n    uint64_t va;\n};\nunion interruptibility_state_t {\n    uint32 raw;\n    struct {\n        uint32 sti_blocking : 1;\n        uint32 movss_blocking : 1;\n        uint32 smi_blocking : 1;\n        uint32 nmi_blocking : 1;\n        uint32 reserved : 28;\n    };\n    uint64_t pad;\n};\n\ntypedef union interruptibility_state_t interruptibility_state_t;\n\nstruct segment_desc_t {\n    uint16 selector;\n    uint16 _dummy;\n    uint32 limit;\n    uint64 base;\n    union {\n        struct {\n            uint32 type : 4;\n            uint32 desc : 1;\n            uint32 dpl : 2;\n            uint32 present : 1;\n            uint32 : 4;\n                     uint32 available : 1;\n                     uint32 long_mode : 1;\n                     uint32 operand_size : 1;\n                     uint32 granularity : 1;\n                     uint32 null : 1;\n                     uint32 : 15;\n        };\n        uint32 ar;\n    };\n    uint32 ipad;\n};\n\ntypedef struct segment_desc_t segment_desc_t;\n\nstruct vcpu_state_t {\n    union {\n        uint64 _regs[16];\n        struct {\n            union {\n                struct {\n                    uint8 _al,\n                        _ah;\n                };\n                uint16    _ax;\n                uint32    _eax;\n                uint64    _rax;\n            };\n            union {\n                struct {\n                    uint8 _cl,\n                        _ch;\n                };\n                uint16    _cx;\n                uint32    _ecx;\n                uint64    _rcx;\n            };\n            union {\n                struct {\n                    uint8 _dl,\n                        _dh;\n                };\n                uint16    _dx;\n                uint32    _edx;\n                uint64    _rdx;\n            };\n            union {\n                struct {\n                    uint8 _bl,\n                        _bh;\n                };\n                uint16    _bx;\n                uint32    _ebx;\n                uint64    _rbx;\n            };\n            union {\n                uint16    _sp;\n                uint32    _esp;\n                uint64    _rsp;\n            };\n            union {\n                uint16    _bp;\n                uint32    _ebp;\n                uint64    _rbp;\n            };\n            union {\n                uint16    _si;\n                uint32    _esi;\n                uint64    _rsi;\n            };\n            union {\n                uint16    _di;\n                uint32    _edi;\n                uint64    _rdi;\n            };\n\n            uint64 _r8;\n            uint64 _r9;\n            uint64 _r10;\n            uint64 _r11;\n            uint64 _r12;\n            uint64 _r13;\n            uint64 _r14;\n            uint64 _r15;\n        };\n    };\n\n    union {\n        uint32 _eip;\n        uint64 _rip;\n    };\n\n    union {\n        uint32 _eflags;\n        uint64 _rflags;\n    };\n\n    segment_desc_t _cs;\n    segment_desc_t _ss;\n    segment_desc_t _ds;\n    segment_desc_t _es;\n    segment_desc_t _fs;\n    segment_desc_t _gs;\n    segment_desc_t _ldt;\n    segment_desc_t _tr;\n\n    segment_desc_t _gdt;\n    segment_desc_t _idt;\n\n    uint64 _cr0;\n    uint64 _cr2;\n    uint64 _cr3;\n    uint64 _cr4;\n\n    uint64 _dr0;\n    uint64 _dr1;\n    uint64 _dr2;\n    uint64 _dr3;\n    uint64 _dr6;\n    uint64 _dr7;\n    uint64 _pde;\n\n    uint32 _efer;\n\n    uint32 _sysenter_cs;\n    uint64 _sysenter_eip;\n    uint64 _sysenter_esp;\n\n    uint32 _activity_state;\n    uint32 pad;\n    interruptibility_state_t _interruptibility_state;\n};\n\n/* This interface is support only after API version 2 */\nstruct hax_qemu_version {\n    /* Current API version in QEMU*/\n    uint32_t cur_version;\n    /* The least API version supported by QEMU */\n    uint32_t least_version;\n};\n#define HAX_IO_OUT 0\n#define HAX_IO_IN  1\n\nstruct hax_tunnel_info {\n    uint64_t va;\n    uint64_t io_va;\n    uint16_t size;\n    uint16_t pad[3];\n};\ntypedef enum exit_status {\n    HAX_EXIT_IO = 1,\n    HAX_EXIT_MMIO,\n    HAX_EXIT_REALMODE,\n    HAX_EXIT_INTERRUPT,\n    HAX_EXIT_UNKNOWN,\n    HAX_EXIT_HLT,\n    HAX_EXIT_STATECHANGE,\n    HAX_EXIT_PAUSED,\n    HAX_EXIT_FAST_MMIO,\n    HAX_EXIT_PAGEFAULT\n} exit_status;\ntypedef enum exit_reason {\n    EXIT_INTERRUPT_WIN = 0x07,\n    EXIT_HLT = 0x0c,\n    EXIT_INTERRUPT = 0x30\n} exit_reason;\nstruct hax_tunnel {\n    exit_reason _exit_reason;\n    uint32_t pad0;\n    exit_status _exit_status;/* exit_status */\n    uint32_t user_event_pending;\n    int ready_for_interrupt_injection;\n    int request_interrupt_window;\n\n    union {\n        struct {\n            uint8_t _direction;\n            uint8_t _df;\n            uint16_t _size;\n            uint16_t _port;\n            uint16_t _count;\n            /* Followed owned by HAXM, QEMU should not touch them */\n            /* bit 1 is 1 means string io */\n            uint8_t _flags;\n            uint8_t _pad0;\n            uint16_t _pad1;\n            uint32_t _pad2;\n            vaddr_t _vaddr;\n        } io;\n        struct {\n            paddr_t gla;\n        } mmio;\n        struct {\n            paddr_t gpa;\n#define HAX_PAGEFAULT_ACC_R  (1 << 0)\n#define HAX_PAGEFAULT_ACC_W  (1 << 1)\n#define HAX_PAGEFAULT_ACC_X  (1 << 2)\n#define HAX_PAGEFAULT_PERM_R (1 << 4)\n#define HAX_PAGEFAULT_PERM_W (1 << 5)\n#define HAX_PAGEFAULT_PERM_X (1 << 6)\n            uint32_t flags;\n            uint32_t reserved1;\n            uint64_t reserved2;\n        } pagefault;\n        struct {\n            paddr_t dummy;\n        } state;\n    };\n    uint64_t apic_base;\n};\nenum run_flag {\n    HAX_EXIT = 0,\n    HAX_RESUME = 1\n};\n\n#define HAX_RAM_INFO_ROM (1 << 0)\n#define HAX_RAM_INFO_STANDALONE (1 << 6)\n#define HAX_RAM_INFO_INVALID (1 << 7)\n#include <poppack.h>\nstruct hax_vcpu_mem {\n    uint32_t size;\n    uint64_t uva;\n    void *kva;\n    void *hinfo;\n};\n\n#include <pshpack8.h>\nstruct fx_layout {\n    uint16  fcw;\n    uint16  fsw;\n    uint8   ftw;\n    uint8   res1;\n    uint16  fop;\n    union {\n        struct {\n            uint32  fip;\n            uint16  fcs;\n            uint16  res2;\n        };\n        uint64  fpu_ip;\n    };\n    union {\n        struct {\n            uint32  fdp;\n            uint16  fds;\n            uint16  res3;\n        };\n        uint64  fpu_dp;\n    };\n    uint32  mxcsr;\n    uint32  mxcsr_mask;\n    uint8   st_mm[8][16];\n    uint8   mmx_1[8][16];\n    uint8   mmx_2[8][16];\n    uint8   pad[96];\n};\n#include <poppack.h>\n\n\n#define HAX_CAP_STATUS_WORKING     (1 << 0)\n#define HAX_CAP_MEMQUOTA           (1 << 1)\n#define HAX_CAP_WORKSTATUS_MASK    0x01\n\n#define HAX_CAP_FAILREASON_VT      (1 << 0)\n#define HAX_CAP_FAILREASON_NX      (1 << 1)\n\n#define HAX_CAP_EPT                (1 << 0)\n#define HAX_CAP_FASTMMIO           (1 << 1)\n#define HAX_CAP_UG                 (1 << 2)\n#define HAX_CAP_64BIT_RAMBLOCK     (1 << 3)\n#define HAX_CAP_64BIT_SETRAM       (1 << 4)\n#define HAX_CAP_TUNNEL_PAGE        (1 << 5)\n#define HAX_CAP_RAM_PROTECTION     (1 << 6)\n#define HAX_CAP_DEBUG              (1 << 7)\n#define HAX_CAP_IMPLICIT_RAMBLOCK  (1 << 8)\n#include <pshpack1.h>\nstruct hax_capabilityinfo {\n    /*\n     * bit 0: 1 - working, 0 - not working, possibly because NT/NX disabled\n     * bit 1: 1 - memory limitation working, 0 - no memory limitation\n     */\n    uint16_t wstatus;\n    /*\n     * valid when not working\n     * bit0: VT not enabeld\n     * bit1: NX not enabled\n     */\n     /*\n      * valid when working\n      * bit0: EPT enabled\n      * bit1: fastMMIO\n      */\n    uint16_t winfo;\n    uint32_t win_refcount;\n    uint64_t mem_quota;\n};\n#include <poppack.h>\n\n#define HAX_DEVICE_TYPE 0x4000\n\n#define HAX_IOCTL_VERSION \\\n        CTL_CODE(HAX_DEVICE_TYPE, 0x900, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define HAX_IOCTL_CREATE_VM \\\n        CTL_CODE(HAX_DEVICE_TYPE, 0x901, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define HAX_IOCTL_CAPABILITY \\\n        CTL_CODE(HAX_DEVICE_TYPE, 0x910, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define HAX_IOCTL_SET_MEMLIMIT \\\n        CTL_CODE(HAX_DEVICE_TYPE, 0x911, METHOD_BUFFERED, FILE_ANY_ACCESS)\n\n#define HAX_VM_IOCTL_VCPU_CREATE \\\n        CTL_CODE(HAX_DEVICE_TYPE, 0x902, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define HAX_VM_IOCTL_ALLOC_RAM \\\n        CTL_CODE(HAX_DEVICE_TYPE, 0x903, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define HAX_VM_IOCTL_SET_RAM \\\n        CTL_CODE(HAX_DEVICE_TYPE, 0x904, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define HAX_VM_IOCTL_VCPU_DESTROY \\\n        CTL_CODE(HAX_DEVICE_TYPE, 0x905, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define HAX_VM_IOCTL_ADD_RAMBLOCK \\\n        CTL_CODE(HAX_DEVICE_TYPE, 0x913, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define HAX_VM_IOCTL_SET_RAM2 \\\n        CTL_CODE(HAX_DEVICE_TYPE, 0x914, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define HAX_VM_IOCTL_PROTECT_RAM \\\n        CTL_CODE(HAX_DEVICE_TYPE, 0x915, METHOD_BUFFERED, FILE_ANY_ACCESS)\n\n#define HAX_VCPU_IOCTL_RUN \\\n        CTL_CODE(HAX_DEVICE_TYPE, 0x906, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define HAX_VCPU_IOCTL_SET_MSRS \\\n        CTL_CODE(HAX_DEVICE_TYPE, 0x907, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define HAX_VCPU_IOCTL_GET_MSRS \\\n        CTL_CODE(HAX_DEVICE_TYPE, 0x908, METHOD_BUFFERED, FILE_ANY_ACCESS)\n\n#define HAX_VCPU_IOCTL_SET_FPU \\\n        CTL_CODE(HAX_DEVICE_TYPE, 0x909, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define HAX_VCPU_IOCTL_GET_FPU \\\n        CTL_CODE(HAX_DEVICE_TYPE, 0x90a, METHOD_BUFFERED, FILE_ANY_ACCESS)\n\n#define HAX_VCPU_IOCTL_SETUP_TUNNEL \\\n        CTL_CODE(HAX_DEVICE_TYPE, 0x90b, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define HAX_VCPU_IOCTL_INTERRUPT \\\n        CTL_CODE(HAX_DEVICE_TYPE, 0x90c, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define HAX_VCPU_SET_REGS \\\n        CTL_CODE(HAX_DEVICE_TYPE, 0x90d, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define HAX_VCPU_GET_REGS \\\n        CTL_CODE(HAX_DEVICE_TYPE, 0x90e, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define HAX_VCPU_IOCTL_KICKOFF \\\n        CTL_CODE(HAX_DEVICE_TYPE, 0x90f, METHOD_BUFFERED, FILE_ANY_ACCESS)\n\n/* API version 2.0 */\n#define HAX_VM_IOCTL_NOTIFY_QEMU_VERSION \\\n        CTL_CODE(HAX_DEVICE_TYPE, 0x910, METHOD_BUFFERED, FILE_ANY_ACCESS)\n\n\n"
  },
  {
    "path": "haxmvm/haxmvm.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <VCProjectVersion>15.0</VCProjectVersion>\n    <ProjectGuid>{55AC3B70-9AFB-498C-BEC6-F56AF538FEDF}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>haxmvm</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"Shared\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <LinkIncremental>true</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <LinkIncremental>false</LinkIncremental>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>__i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;WIN32;__i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;NDEBUG;_CONSOLE;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <PrecompiledHeaderFile />\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)libwine.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>__i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;WIN32;__i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;_DEBUG;_CONSOLE;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <PrecompiledHeaderFile />\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)libwine.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <ClCompile>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>__i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;_DEBUG;_CONSOLE;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <PrecompiledHeaderFile />\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)libwine.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <ClCompile>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>__i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;NDEBUG;_CONSOLE;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <PrecompiledHeaderFile />\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)libwine.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"haxmvm.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"haxmvm.h\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>\n"
  },
  {
    "path": "haxmvm/haxmvm.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"ソース ファイル\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"ヘッダー ファイル\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"リソース ファイル\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"haxmvm.h\">\n      <Filter>ヘッダー ファイル</Filter>\n    </ClInclude>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"haxmvm.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "install.inf",
    "content": "[Version]\nSignature=\"$Windows NT$\"\n\n[DefaultInstall.ntamd64]\nDelReg=DefaultInstall.ntamd64.DelReg\nAddReg=DefaultInstall.ntamd64.AddReg\n\n[DefaultInstall.ntamd64.DelReg]\nHKLM,%NtVdm64%\\OTVDM\nHKLM,%NtVdm64%\\OTVDM,,0x4000\n\n[DefaultInstall.ntamd64.AddReg]\nHKLM,%NtVdm64%\\0OTVDM,CommandLine,,%CommandLine%\nHKLM,%NtVdm64%\\0OTVDM,InternalName,,*\nHKLM,%NtVdm64%\\0OTVDM,ProductName,,*\nHKLM,%NtVdm64%\\0OTVDM,ProductVersion,,*\nHKLM,%NtVdm64%\\0OTVDM,MappedExeName,,%01%\\%MappedExeName%\nHKLM,%NtVdm64%\\0OTVDM,CommandLine,0x4000,%CommandLine%\nHKLM,%NtVdm64%\\0OTVDM,InternalName,0x4000,*\nHKLM,%NtVdm64%\\0OTVDM,ProductName,0x4000,*\nHKLM,%NtVdm64%\\0OTVDM,ProductVersion,0x4000,*\nHKLM,%NtVdm64%\\0OTVDM,MappedExeName,0x4000,%01%\\%MappedExeName%\n\n[Strings]\nNtVdm64=SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NtVdm64\nCommandLine=\" --ntvdm64: \"\"%m\"\" --ntvdm64-args: %c\"\n;If you want to hide the console window, change otvdm.exe to otvdmw.exe\nMappedExeName=otvdm.exe\n"
  },
  {
    "path": "installw.inf",
    "content": "[Version]\nSignature=\"$Windows NT$\"\n\n[DefaultInstall.ntamd64]\nDelReg=DefaultInstall.ntamd64.DelReg\nAddReg=DefaultInstall.ntamd64.AddReg\n\n[DefaultInstall.ntamd64.DelReg]\nHKLM,%NtVdm64%\\OTVDM\nHKLM,%NtVdm64%\\OTVDM,,0x4000\n\n[DefaultInstall.ntamd64.AddReg]\nHKLM,%NtVdm64%\\0OTVDM,CommandLine,,%CommandLine%\nHKLM,%NtVdm64%\\0OTVDM,InternalName,,*\nHKLM,%NtVdm64%\\0OTVDM,ProductName,,*\nHKLM,%NtVdm64%\\0OTVDM,ProductVersion,,*\nHKLM,%NtVdm64%\\0OTVDM,MappedExeName,,%01%\\%MappedExeName%\nHKLM,%NtVdm64%\\0OTVDM,CommandLine,0x4000,%CommandLine%\nHKLM,%NtVdm64%\\0OTVDM,InternalName,0x4000,*\nHKLM,%NtVdm64%\\0OTVDM,ProductName,0x4000,*\nHKLM,%NtVdm64%\\0OTVDM,ProductVersion,0x4000,*\nHKLM,%NtVdm64%\\0OTVDM,MappedExeName,0x4000,%01%\\%MappedExeName%\n\n[Strings]\nNtVdm64=SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NtVdm64\nCommandLine=\" --ntvdm64: \"\"%m\"\" --ntvdm64-args: %c\"\n;If you want to hide the console window, change otvdm.exe to otvdmw.exe\nMappedExeName=otvdmw.exe\n"
  },
  {
    "path": "keyboard/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(keyboard SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/keyboard.def keyboard.drv16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(keyboard.drv16 keyboard)\ntarget_link_libraries(keyboard libwine winecrt0 krnl386)\nset_target_properties(keyboard PROPERTIES SUFFIX \".drv16\")\n"
  },
  {
    "path": "keyboard/keyboard.c",
    "content": "/*\n * KEYBOARD driver\n *\n * Copyright 1993 Bob Amstadt\n * Copyright 1996 Albrecht Kleine\n * Copyright 1997 David Faure\n * Copyright 1998 Morten Welinder\n * Copyright 1998 Ulrich Weigand\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n#include <stdlib.h>\n#include <string.h>\n#include <ctype.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n#include \"winerror.h\"\n#include \"wine/winuser16.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(keyboard);\n\n#include \"pshpack1.h\"\ntypedef struct _KBINFO\n{\n    BYTE Begin_First_Range;\n    BYTE End_First_Range;\n    BYTE Begin_Second_Range;\n    BYTE End_Second_Range;\n    WORD StateSize;\n} KBINFO, *LPKBINFO;\n#include \"poppack.h\"\n\nstatic FARPROC16 DefKeybEventProc;\nstatic LPBYTE pKeyStateTable;\n\n/***********************************************************************\n *\t\tInquire (KEYBOARD.1)\n */\nWORD WINAPI Inquire16(LPKBINFO kbInfo)\n{\n  kbInfo->Begin_First_Range = 0;\n  kbInfo->End_First_Range = 0;\n  kbInfo->Begin_Second_Range = 0;\n  kbInfo->End_Second_Range = 0;\n  kbInfo->StateSize = 16;\n\n  return sizeof(KBINFO);\n}\n\n/***********************************************************************\n *\t\tEnable (KEYBOARD.2)\n */\nVOID WINAPI Enable16( FARPROC16 proc, LPBYTE lpKeyState )\n{\n    DefKeybEventProc = proc;\n    pKeyStateTable = lpKeyState;\n\n    memset( lpKeyState, 0, 256 ); /* all states to false */\n}\n\n/***********************************************************************\n *\t\tDisable (KEYBOARD.3)\n */\nVOID WINAPI Disable16(VOID)\n{\n    DefKeybEventProc = NULL;\n    pKeyStateTable = NULL;\n}\n\n/****************************************************************************\n *\t\tToAscii (KEYBOARD.4)\n */\nINT16 WINAPI ToAscii16(UINT16 virtKey,UINT16 scanCode, LPBYTE lpKeyState,\n                       LPVOID lpChar, UINT16 flags)\n{\n    return ToAscii( virtKey, scanCode, lpKeyState, lpChar, flags );\n}\n\n/***********************************************************************\n *           AnsiToOem   (KEYBOARD.5)\n */\nINT16 WINAPI AnsiToOem16( LPCSTR s, LPSTR d )\n{\n    CharToOemA( s, d );\n    return -1;\n}\n\n/***********************************************************************\n *           OemToAnsi   (KEYBOARD.6)\n */\nINT16 WINAPI OemToAnsi16( LPCSTR s, LPSTR d )\n{\n    OemToCharA( s, d );\n    return -1;\n}\n\n/**********************************************************************\n *\t\tSetSpeed (KEYBOARD.7)\n */\nWORD WINAPI SetSpeed16(WORD unused)\n{\n    FIXME(\"(%04x): stub\\n\", unused);\n    return 0xffff;\n}\n\n/**********************************************************************\n *\t\tScreenSwitchEnable (KEYBOARD.100)\n */\nVOID WINAPI ScreenSwitchEnable16(WORD unused)\n{\n  FIXME(\"(%04x): stub\\n\", unused);\n}\n\n/**********************************************************************\n *\t\tOemKeyScan (KEYBOARD.128)\n */\nDWORD WINAPI OemKeyScan16(WORD wOemChar)\n{\n    return OemKeyScan( wOemChar );\n}\n\n/**********************************************************************\n *\t\tVkKeyScan (KEYBOARD.129)\n */\nWORD WINAPI VkKeyScan16(CHAR cChar)\n{\n    return VkKeyScanA( cChar );\n}\n\n/******************************************************************************\n *\t\tGetKeyboardType (KEYBOARD.130)\n */\nINT16 WINAPI GetKeyboardType16(INT16 nTypeFlag)\n{\n    return GetKeyboardType( nTypeFlag );\n}\n\n/******************************************************************************\n *\t\tMapVirtualKey (KEYBOARD.131)\n *\n * MapVirtualKey translates keycodes from one format to another\n */\nUINT16 WINAPI MapVirtualKey16(UINT16 wCode, UINT16 wMapType)\n{\n    return MapVirtualKeyA(wCode,wMapType);\n}\n\n/****************************************************************************\n *\t\tGetKBCodePage (KEYBOARD.132)\n */\nINT16 WINAPI GetKBCodePage16(void)\n{\n    return GetKBCodePage();\n}\n\n/****************************************************************************\n *\t\tGetKeyNameText (KEYBOARD.133)\n */\nINT16 WINAPI GetKeyNameText16(LONG lParam, LPSTR lpBuffer, INT16 nSize)\n{\n    return GetKeyNameTextA( lParam, lpBuffer, nSize );\n}\n\n/***********************************************************************\n *           AnsiToOemBuff   (KEYBOARD.134)\n */\nvoid WINAPI AnsiToOemBuff16( LPCSTR s, LPSTR d, UINT16 len )\n{\n    if (len != 0) CharToOemBuffA( s, d, len );\n}\n\n/***********************************************************************\n *           OemToAnsiBuff   (KEYBOARD.135)\n */\nvoid WINAPI OemToAnsiBuff16( LPCSTR s, LPSTR d, UINT16 len )\n{\n    if (len != 0) OemToCharBuffA( s, d, len );\n}\n"
  },
  {
    "path": "keyboard/keyboard.def",
    "content": "; File generated automatically from keyboard.drv16.spec; do not edit!\n\nLIBRARY keyboard.drv16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "keyboard/keyboard.drv16.spec",
    "content": "1   pascal -ret16 Inquire(ptr) Inquire16\n2   pascal -ret16 Enable(segptr ptr) Enable16\n3   pascal -ret16 Disable() Disable16\n4   pascal -ret16 ToAscii(word word ptr ptr word) ToAscii16\n5   pascal -ret16 AnsiToOem(str ptr) AnsiToOem16\n6   pascal -ret16 OemToAnsi(str ptr) OemToAnsi16\n7   pascal -ret16 SetSpeed(word) SetSpeed16\n#8   stub WEP\n9   stub INQUIREEX\n10  stub TOASCIIEX\n11  stub VKKEYSCANEX\n12  stub MAPVIRTUALKEYEX\n13  stub NEWTABLEEX\n14  stub __EXPORTEDSTUB\n\n100\tpascal\tScreenSwitchEnable(word) ScreenSwitchEnable16\n#126\tpascal\tGetTableSeg\n#127\tpascal\tNewTable\n128 pascal OemKeyScan(word) OemKeyScan16\n129 pascal -ret16 VkKeyScan(word) VkKeyScan16\n130 pascal -ret16 GetKeyboardType(word) GetKeyboardType16\n131 pascal -ret16 MapVirtualKey(word word) MapVirtualKey16\n132 pascal -ret16 GetKBCodePage() GetKBCodePage16\n133 pascal -ret16 GetKeyNameText(long ptr word) GetKeyNameText16\n134 pascal -ret16 AnsiToOemBuff(ptr ptr word) AnsiToOemBuff16\n135 pascal -ret16 OemToAnsiBuff(ptr ptr word) OemToAnsiBuff16\n#136\tpascal\tEnableKbSysReq\n#137\tpascal\tGetBiosKeyProc\n"
  },
  {
    "path": "keyboard/keyboard.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{B83EEE1C-F8DE-4F82-8928-67F1B142E5F2}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>keyboard</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.drv16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <TargetExt>.drv16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;KEYBOARD_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;kernel32.lib;user32.lib</AdditionalDependencies>\n      <ModuleDefinitionFile>keyboard.def</ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;KEYBOARD_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>keyboard.def</ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;kernel32.lib;user32.lib</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"keyboard.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"keyboard.def\" />\n    <CustomBuild Include=\"keyboard.drv16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" KEYBOARD &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" KEYBOARD &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"keyboard.drv16.obj\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "keyboard/keyboard.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"ソース ファイル\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"ヘッダー ファイル\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"リソース ファイル\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"keyboard.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"keyboard.def\">\n      <Filter>ソース ファイル</Filter>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"keyboard.drv16.obj\">\n      <Filter>ソース ファイル</Filter>\n    </Object>\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"keyboard.drv16.spec\">\n      <Filter>ソース ファイル</Filter>\n    </CustomBuild>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "krnl386/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp)\nadd_library(krnl386 SHARED ${SOURCE} krnl386.exe16.obj ${CMAKE_CURRENT_BINARY_DIR}/krnl386.def)\ninclude_directories(../wine)\nadd_definitions(-DMZ_SUPPORTED -DENABLEREDIRECTSYSTEMDIR -D_X86_ -D__WINESRC__ -D__i386__  -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__  -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(krnl386.exe16 KERNEL ARG --heap 65520)\ntarget_link_libraries(krnl386 libwine winecrt0 lz32.lib ntdll.lib ddraw.lib dsound.lib)\nset_target_properties(krnl386 PROPERTIES SUFFIX \".exe16\")\n"
  },
  {
    "path": "krnl386/Makefile.in",
    "content": "MODULE    = krnl386.exe16\nIMPORTLIB = kernel\nIMPORTS   = winecrt0 kernel32 ntdll\nDELAYIMPORTS = ddraw dsound user32\nEXTRADLLFLAGS = -m16 -nodefaultlibs -Wb,--dll-name,kernel\n\nC_SRCS = \\\n\tatom.c \\\n\tdma.c \\\n\tdosaspi.c \\\n\tdosdev.c \\\n\tdosexe.c \\\n\tdosmem.c \\\n\tdosvm.c \\\n\terror.c \\\n\tfile.c \\\n\tfpu.c \\\n\tglobal.c \\\n\tinstr.c \\\n\tint09.c \\\n\tint10.c \\\n\tint13.c \\\n\tint15.c \\\n\tint16.c \\\n\tint21.c \\\n\tint25.c \\\n\tint26.c \\\n\tint2f.c \\\n\tint31.c \\\n\tint33.c \\\n\tint67.c \\\n\tinterrupts.c \\\n\tioports.c \\\n\tkernel.c \\\n\tlocal.c \\\n\tne_module.c \\\n\tne_segment.c \\\n\tregistry.c \\\n\trelay.c \\\n\tresource.c \\\n\tselector.c \\\n\tsnoop.c \\\n\tsoundblaster.c \\\n\tsyslevel.c \\\n\ttask.c \\\n\tthunk.c \\\n\ttimer.c \\\n\tutthunk.c \\\n\tvga.c \\\n\tvxd.c \\\n\twowthunk.c\n\nRC_SRCS = version.rc\n"
  },
  {
    "path": "krnl386/atom.c",
    "content": "/*\n * Atom table functions - 16 bit variant\n *\n * Copyright 1993, 1994, 1995 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n/*\n * Warning: The code assumes that LocalAlloc() returns a block aligned\n * on a 4-bytes boundary (because of the shifting done in\n * HANDLETOATOM).  If this is not the case, the allocation code will\n * have to be changed.\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdlib.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <string.h>\n#include <ctype.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winerror.h\"\n#include \"winternl.h\"\n\n#include \"wine/unicode.h\"\n#include \"wine/winbase16.h\"\n#include \"kernel16_private.h\"\n\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(atom);\n\n#define DEFAULT_ATOMTABLE_SIZE    37\n#define MAX_ATOM_LEN              255\n\n#define ATOMTOHANDLE(atom)        ((HANDLE16)(atom) << 2)\n#define HANDLETOATOM(handle)      ((ATOM)(0xc000 | ((handle) >> 2)))\n\ntypedef struct\n{\n    HANDLE16    next;\n    WORD        refCount;\n    BYTE        length;\n    CHAR        str[1];\n} ATOMENTRY;\n\ntypedef struct\n{\n    WORD        size;\n    HANDLE16    entries[1];\n} ATOMTABLE;\n\n\n/***********************************************************************\n *           ATOM_GetTable\n *\n * Return a pointer to the atom table of a given segment, creating\n * it if necessary.\n *\n * RETURNS\n *\tPointer to table: Success\n *\tNULL: Failure\n */\nstatic ATOMTABLE *ATOM_GetTable( BOOL create  /* [in] Create */ )\n{\n    INSTANCEDATA *ptr = MapSL( MAKESEGPTR( CURRENT_DS, 0 ) );\n    if (ptr->atomtable)\n    {\n        ATOMTABLE *table = (ATOMTABLE *)((char *)ptr + ptr->atomtable);\n        if (table->size) return table;\n    }\n    if (!create) return NULL;\n    if (!InitAtomTable16( 0 )) return NULL;\n    /* Reload ptr in case it moved in linear memory */\n    ptr = MapSL( MAKESEGPTR( CURRENT_DS, 0 ) );\n    return (ATOMTABLE *)((char *)ptr + ptr->atomtable);\n}\n\n\n/***********************************************************************\n *           ATOM_Hash\n * RETURNS\n *\tThe hash value for the input string\n */\nstatic WORD ATOM_Hash(\n            WORD entries, /* [in] Total number of entries */\n            LPCSTR str,   /* [in] Pointer to string to hash */\n            WORD len      /* [in] Length of string */\n) {\n    WORD i, hash = 0;\n\n    TRACE(\"%x, %s, %x\\n\", entries, str, len);\n\n    for (i = 0; i < len; i++) hash ^= toupper(str[i]) + i;\n    return hash % entries;\n}\n\n\n/***********************************************************************\n *           ATOM_IsIntAtomA\n */\nstatic BOOL ATOM_IsIntAtomA(LPCSTR atomstr,WORD *atomid)\n{\n    UINT atom = 0;\n    if (!HIWORD(atomstr)) atom = LOWORD(atomstr);\n    else\n    {\n        if (*atomstr++ != '#') return FALSE;\n        while (*atomstr >= '0' && *atomstr <= '9')\n        {\n            atom = atom * 10 + *atomstr - '0';\n            atomstr++;\n        }\n        if (*atomstr) return FALSE;\n    }\n    if (atom >= MAXINTATOM)\n    {\n        SetLastError( ERROR_INVALID_PARAMETER );\n        atom = 0;\n    }\n    *atomid = atom;\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           ATOM_MakePtr\n *\n * Make an ATOMENTRY pointer from a handle (obtained from GetAtomHandle()).\n */\nstatic inline ATOMENTRY *ATOM_MakePtr( HANDLE16 handle /* [in] Handle */ )\n{\n    return MapSL( MAKESEGPTR( CURRENT_DS, handle ) );\n}\n\n\n/***********************************************************************\n *           InitAtomTable   (KERNEL.68)\n */\nWORD WINAPI InitAtomTable16( WORD entries )\n{\n    int i;\n    HANDLE16 handle;\n    ATOMTABLE *table;\n\n      /* Allocate the table */\n\n    if (!entries) entries = DEFAULT_ATOMTABLE_SIZE;  /* sanity check */\n    handle = LocalAlloc16( LMEM_FIXED, FIELD_OFFSET( ATOMTABLE, entries[entries] ));\n    if (!handle) return 0;\n    table = MapSL( MAKESEGPTR( CURRENT_DS, handle ) );\n    table->size = entries;\n    for (i = 0; i < entries; i++) table->entries[i] = 0;\n\n      /* Store a pointer to the table in the instance data */\n\n    ((INSTANCEDATA *)MapSL( MAKESEGPTR( CURRENT_DS, 0 )))->atomtable = handle;\n    return handle;\n}\n\n/***********************************************************************\n *           GetAtomHandle   (KERNEL.73)\n */\nHANDLE16 WINAPI GetAtomHandle16( ATOM atom )\n{\n    if (atom < MAXINTATOM) return 0;\n    return ATOMTOHANDLE( atom );\n}\n\n\n/***********************************************************************\n *           AddAtom   (KERNEL.70)\n *\n * Windows DWORD aligns the atom entry size.\n * The remaining unused string space created by the alignment\n * gets padded with '\\0's in a certain way to ensure\n * that at least one trailing '\\0' remains.\n *\n * RETURNS\n *\tAtom: Success\n *\t0: Failure\n */\nATOM WINAPI AddAtom16( LPCSTR str )\n{\n    char buffer[MAX_ATOM_LEN+1];\n    WORD hash;\n    HANDLE16 entry;\n    ATOMENTRY * entryPtr;\n    ATOMTABLE * table;\n    int len, ae_len;\n    WORD iatom;\n\n    if (ATOM_IsIntAtomA( str, &iatom )) return iatom;\n\n    TRACE(\"%s\\n\",debugstr_a(str));\n    if (strlen(str) >= 256)\n        return INVALID_ATOM;\n\n    if (!(table = ATOM_GetTable( TRUE ))) return 0;\n\n    /* Make a copy of the string to be sure it doesn't move in linear memory. */\n    lstrcpynA( buffer, str, sizeof(buffer) );\n\n    len = strlen( buffer );\n    hash = ATOM_Hash( table->size, buffer, len );\n    entry = table->entries[hash];\n    while (entry)\n    {\n        entryPtr = ATOM_MakePtr( entry );\n        if ((entryPtr->length == len) &&\n            (!strncasecmp( entryPtr->str, buffer, len )))\n        {\n            entryPtr->refCount++;\n            TRACE(\"-- existing 0x%x\\n\", entry);\n            return HANDLETOATOM( entry );\n        }\n        entry = entryPtr->next;\n    }\n\n    ae_len = (sizeof(ATOMENTRY)+len+3) & ~3;\n    entry = LocalAlloc16( LMEM_FIXED, ae_len );\n    if (!entry) return 0;\n    /* Reload the table ptr in case it moved in linear memory */\n    table = ATOM_GetTable( FALSE );\n    entryPtr = ATOM_MakePtr( entry );\n    entryPtr->next = table->entries[hash];\n    entryPtr->refCount = 1;\n    entryPtr->length = len;\n    memcpy( entryPtr->str, buffer, len);\n    /* Some applications _need_ the '\\0' padding provided by memset */\n    /* Note that 1 byte of the str is accounted for in the ATOMENTRY struct */\n    memset( entryPtr->str+len, 0, ae_len - sizeof(ATOMENTRY) - (len - 1));\n    table->entries[hash] = entry;\n    TRACE(\"-- new 0x%x\\n\", entry);\n    return HANDLETOATOM( entry );\n}\n\n\n/***********************************************************************\n *           DeleteAtom   (KERNEL.71)\n */\nATOM WINAPI DeleteAtom16( ATOM atom )\n{\n    ATOMENTRY * entryPtr;\n    ATOMTABLE * table;\n    HANDLE16 entry, *prevEntry;\n    WORD hash;\n\n    if (atom < MAXINTATOM) return 0;  /* Integer atom */\n\n    TRACE(\"0x%x\\n\",atom);\n\n    if (!(table = ATOM_GetTable( FALSE ))) return 0;\n    entry = ATOMTOHANDLE( atom );\n    entryPtr = ATOM_MakePtr( entry );\n\n    /* Find previous atom */\n    hash = ATOM_Hash( table->size, entryPtr->str, entryPtr->length );\n    prevEntry = &table->entries[hash];\n    while (*prevEntry && *prevEntry != entry)\n    {\n        ATOMENTRY * prevEntryPtr = ATOM_MakePtr( *prevEntry );\n        prevEntry = &prevEntryPtr->next;\n    }\n    if (!*prevEntry) return atom;\n\n    /* Delete atom */\n    if (--entryPtr->refCount == 0)\n    {\n        *prevEntry = entryPtr->next;\n        LocalFree16( entry );\n    }\n    return 0;\n}\n\n\n/***********************************************************************\n *           FindAtom   (KERNEL.69)\n */\nATOM WINAPI FindAtom16( LPCSTR str )\n{\n    ATOMTABLE * table;\n    WORD hash,iatom;\n    HANDLE16 entry;\n    int len;\n\n    TRACE(\"%s\\n\",debugstr_a(str));\n\n    if (ATOM_IsIntAtomA( str, &iatom )) return iatom;\n    if ((len = strlen( str )) > 255) len = 255;\n    if (!(table = ATOM_GetTable( FALSE ))) return 0;\n    hash = ATOM_Hash( table->size, str, len );\n    entry = table->entries[hash];\n    while (entry)\n    {\n        ATOMENTRY * entryPtr = ATOM_MakePtr( entry );\n        if ((entryPtr->length == len) &&\n            (!strncasecmp( entryPtr->str, str, len )))\n        {\n            TRACE(\"-- found %x\\n\", entry);\n            return HANDLETOATOM( entry );\n        }\n        entry = entryPtr->next;\n    }\n    TRACE(\"-- not found\\n\");\n    return 0;\n}\n\n\n/***********************************************************************\n *           GetAtomName   (KERNEL.72)\n */\nUINT16 WINAPI GetAtomName16( ATOM atom, LPSTR buffer, INT16 count )\n{\n    ATOMENTRY * entryPtr;\n    HANDLE16 entry;\n    char * strPtr;\n    INT len;\n    char text[8];\n\n    TRACE(\"%x\\n\",atom);\n\n    if (!count) return 0;\n    if (atom == INVALID_ATOM)\n        return 0;\n    if (atom < MAXINTATOM)\n    {\n        sprintf( text, \"#%d\", atom );\n        len = strlen(text);\n        strPtr = text;\n    }\n    else\n    {\n        if (!ATOM_GetTable( FALSE )) return 0;\n        entry = ATOMTOHANDLE( atom );\n        entryPtr = ATOM_MakePtr( entry );\n        len = entryPtr->length;\n        strPtr = entryPtr->str;\n    }\n    if (len >= count) len = count-1;\n    memcpy( buffer, strPtr, len );\n    buffer[len] = '\\0';\n    return len;\n}\n"
  },
  {
    "path": "krnl386/compat.c",
    "content": "#include <Windows.h>\n#include \"kernel16_private.h\"\n\n// this only currently will get the flags for the first task\n// it might be work on a per-task basis\nstatic char modes[256];\n\nBOOL WINAPI krnl386_get_compat_mode(const LPCSTR mode)\n{\n    int size = strlen(mode);\n    if (size >= 256)\n        return FALSE;\n    char lowermode[256];\n    for (int i = 0; i < size; i++)\n        lowermode[i] = tolower(mode[i]);\n    lowermode[size] = '\\0';\n    return strstr(modes, lowermode) ? TRUE : FALSE;\n}\n\nvoid WINAPI krnl386_set_compat_path(const LPCSTR path)\n{\n    HKEY hkey;\n    LSTATUS stat = RegOpenKeyA(HKEY_CURRENT_USER, \"Software\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\AppCompatFlags\\\\Layers\", &hkey);\n    modes[0] = '\\0';\n    if (stat)\n        return;\n    int size = 256;\n    int type;\n    char drive[MAX_PATH];\n    char smvalue[256];\n    char *value = path;\n    strncpy(drive, path, 3);\n    drive[3] = '\\0';\n    type = GetDriveTypeA(drive);\n    if ((type == DRIVE_CDROM) || (type == DRIVE_REMOVABLE) || (type == DRIVE_REMOTE))\n    {\n        // Based on reactos layer.c\n        HANDLE FindHandle;\n        WIN32_FIND_DATAA FindData;\n        DWORD SignMedia = 0;\n        char *filepath = strrchr(path, '\\\\');\n        if (!filepath)\n                return;\n        int len = filepath - path + 1;\n        strncpy(drive, path, len);\n        int count = 9;\n        drive[len] = '*';\n        drive[len + 1] = '\\0';\n        FindHandle = FindFirstFileA(drive, &FindData);\n        if (FindHandle != INVALID_HANDLE_VALUE)\n        {\n            do\n            {\n                if (!(FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && FindData.nFileSizeLow)\n                {\n                    SignMedia = ((SignMedia << 1) | (SignMedia >> 31)) ^ FindData.nFileSizeLow;\n                    count--;\n                }\n            } while (FindNextFileA(FindHandle, &FindData) && count);\n            FindClose(FindHandle);\n        }\n        drive[len - 1] = '\\0';\n        filepath = strrchr(drive, '\\\\');\n        if (!filepath)\n            filepath = path + 3;\n        else\n            filepath = path + (filepath - drive) + 1;\n        snprintf(smvalue, 256, \"SIGN.MEDIA=%X %s\", SignMedia, filepath);\n        value = smvalue;\n    }\n\n    stat = RegQueryValueExA(hkey, value, 0, &type, &modes, &size);\n    RegCloseKey(hkey);\n    if (stat || (type != REG_SZ))\n    {\n        modes[0] = '\\0';\n        return;\n    }\n    for (int i = 0; i < size; i++)\n        modes[i] = tolower(modes[i]);\n    return;\n}\n\nULONG WINAPI get_windows_build()\n{\n    static ULONG build = 0;\n    if (build) return build;\n    RTL_OSVERSIONINFOEXW winver;\n    if (RtlGetVersion(&winver))\n        return 0;\n    build = winver.dwBuildNumber;\n    return build;\n}\n"
  },
  {
    "path": "krnl386/conf.c",
    "content": "#include <Windows.h>\nstatic BOOL init;\n\nstatic CHAR filename[MAX_PATH];\nstatic CRITICAL_SECTION critical_section;\nDWORD WINAPI krnl386_get_config_string(LPCSTR appname, LPCSTR keyname, LPCSTR def, LPSTR ret, DWORD size);\nDWORD WINAPI krnl386_get_config_int(LPCSTR appname, LPCSTR keyname, INT def);\nvoid init_config()\n{\n    init = TRUE;\n    InitializeCriticalSection(&critical_section);\n    EnterCriticalSection(&critical_section);\n    DWORD filename_len;\n    filename_len = GetModuleFileNameA(GetModuleHandleA(NULL), filename, MAX_PATH);\n    if (!filename_len)\n        return 0;\n    CHAR ininame[] = \"otvdm.ini\";\n    if (_countof(ininame) + filename_len >= MAX_PATH)\n        return 0;\n    LPSTR last = strrchr(filename, '\\\\');\n    memcpy(last + 1, ininame, sizeof(ininame));\n\n    LeaveCriticalSection(&critical_section);\n}\nDWORD WINAPI krnl386_get_config_string(LPCSTR appname, LPCSTR keyname, LPCSTR def, LPSTR ret, DWORD size)\n{\n    if (!init)\n        init_config();\n    EnterCriticalSection(&critical_section);\n    DWORD result = GetPrivateProfileStringA(appname, keyname, def, ret, size, filename);\n    LeaveCriticalSection(&critical_section);\n    return result;\n}\n\nDWORD WINAPI krnl386_get_config_int(LPCSTR appname, LPCSTR keyname, INT def)\n{\n    if (!init)\n        init_config();\n    EnterCriticalSection(&critical_section);\n    DWORD result = GetPrivateProfileIntA(appname, keyname, def, filename);\n    LeaveCriticalSection(&critical_section);\n    return result;\n}\n"
  },
  {
    "path": "krnl386/dma.c",
    "content": "/*\n * DMA Emulation\n *\n * Copyright 2002 Christian Costa\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <stdarg.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"dosexe.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(dma);\n\n/* Internal registers of the 2 DMA chips which control 8 DMA channels */\nstatic DWORD DMA_BaseAddress[8];\nstatic WORD  DMA_ByteCount[8];\nstatic DWORD DMA_CurrentBaseAddress[8];\nstatic WORD  DMA_CurrentByteCount[8];\nstatic BYTE  DMA_Command[8];\nstatic BYTE  DMA_Mask[2]={0x0F,0x0F};\nstatic BYTE  DMA_Status[2]={0x00,0x00};\nstatic BOOL  DMA_Toggle[2]={FALSE,FALSE};\n\n/*\n * DMA_Transfer : Try to perform a transfer of reqlen elements (8 or 16 bits)\n * on the specified channel and return the elements transferred\n */\nint DMA_Transfer(int channel,int reqlen,void* buffer)\n{\n    int i,size,ret=0;\n    int opmode,increment,autoinit,trmode,dmachip;\n    int regmode = DMA_Command[channel];\n    char *p,*dmabuf;\n\n    dmabuf = buffer;\n    dmachip = (channel<4) ? 0 : 1;\n\n    TRACE(\"DMA_Command = %x reqlen=%d\\n\",regmode,reqlen);\n\n    /* Exit if channel is masked */\n    if (DMA_Mask[dmachip]&(1<<(channel&3)))\n        return 0;\n\n    opmode = (regmode & 0xC0) >> 6;\n    increment = !(regmode & 0x20);\n    autoinit = regmode & 0x10;\n    trmode = (regmode & 0x0C) >> 2;\n\n    /* Transfer size : 8 bits for channels 0..3, 16 bits for channels 4..7 */\n    size = (channel<4) ? 1 : 2;\n\n    /* Process operating mode */\n    switch(opmode)\n    {\n    case 0:\n        /* Request mode */\n        FIXME(\"Request Mode - Not Implemented\\n\");\n        return 0;\n    case 1:\n        /* Single Mode */\n        break;\n    case 2:\n        /* Request mode */\n        FIXME(\"Block Mode - Not Implemented\\n\");\n        return 0;\n    case 3:\n        /* Cascade Mode */\n        ERR(\"Cascade Mode should not be used by regular apps\\n\");\n        return 0;\n    }\n\n    /* Perform one the 4 transfer modes */\n    if (trmode == 4) {\n        /* Illegal */\n        ERR(\"DMA Transfer Type Illegal\\n\");\n        return 0;\n    }\n\n    ret = min(DMA_CurrentByteCount[channel],reqlen);\n\n    /* Update DMA registers */\n    DMA_CurrentByteCount[channel]-=ret;\n    if (increment)\n        DMA_CurrentBaseAddress[channel] += ret * size;\n    else\n        DMA_CurrentBaseAddress[channel] -= ret * size;\n\n    switch(trmode)\n    {\n    case 0:\n        /* Verification (no real transfer)*/\n        TRACE(\"Verification DMA operation\\n\");\n        break;\n    case 1:\n        /* Write */\n        TRACE(\"Perform Write transfer of %d bytes at %x with count %x\\n\",ret,\n            DMA_CurrentBaseAddress[channel],DMA_CurrentByteCount[channel]);\n        if (increment)\n            memcpy((void*)DMA_CurrentBaseAddress[channel],dmabuf,ret*size);\n        else\n            for(i=0,p=(char*)DMA_CurrentBaseAddress[channel];i<ret*size;i++)\n                /* FIXME: possible endianness issue for 16 bits DMA */\n                *(p-i) = dmabuf[i];\n        break;\n    case 2:\n        /* Read */\n        TRACE(\"Perform Read transfer of %d bytes at %x with count %x\\n\",ret,\n            DMA_CurrentBaseAddress[channel],DMA_CurrentByteCount[channel]);\n        if (increment)\n            memcpy(dmabuf,(void*)DMA_CurrentBaseAddress[channel],ret*size);\n        else\n            for(i=0,p=(char*)DMA_CurrentBaseAddress[channel];i<ret*size;i++)\n                /* FIXME: possible endianness issue for 16 bits DMA */\n                dmabuf[i] = *(p-i);\n        break;\n    }\n\n    /* Check for end of transfer */\n    if (DMA_CurrentByteCount[channel]==0) {\n        TRACE(\"DMA buffer empty\\n\");\n\n        /* Update status register of the DMA chip corresponding to the channel */\n        DMA_Status[dmachip] |= 1 << (channel & 0x3); /* Mark transfer as finished */\n        DMA_Status[dmachip] &= ~(1 << ((channel & 0x3) + 4)); /* Reset soft request if any */\n\n        if (autoinit) {\n            /* Reload Current* register to their initial values */\n            DMA_CurrentBaseAddress[channel] = DMA_BaseAddress[channel];\n            DMA_CurrentByteCount[channel] = DMA_ByteCount[channel];\n        }\n    }\n\n    return ret;\n}\n\n\nvoid DMA_ioport_out( WORD port, BYTE val )\n{\n    int channel,dmachip;\n\n    switch(port)\n    {\n    case 0x00:\n    case 0x02:\n    case 0x04:\n    case 0x06:\n    case 0xC0:\n    case 0xC4:\n    case 0xC8:\n    case 0xCC:\n        /* Base Address*/\n        channel = (port&0xC0)?((port-0xC0)>>2):(port>>1);\n        dmachip = (channel<4) ? 0 : 1;\n        if (!DMA_Toggle[dmachip])\n            DMA_BaseAddress[channel]=(DMA_BaseAddress[channel] & ~0xFF)|(val & 0xFF);\n        else {\n            DMA_BaseAddress[channel]=(DMA_BaseAddress[channel] & (~(0xFF << 8)))|((val & 0xFF) << 8);\n            DMA_CurrentBaseAddress[channel] = DMA_BaseAddress[channel];\n            TRACE(\"Write Base Address = %x\\n\",DMA_BaseAddress[channel]);\n        }\n        DMA_Toggle[dmachip] = !DMA_Toggle[dmachip];\n        break;\n\n    case 0x01:\n    case 0x03:\n    case 0x05:\n    case 0x07:\n    case 0xC2:\n    case 0xC6:\n    case 0xCA:\n    case 0xCE:\n        /* Count*/\n        channel = ((port-1)&0xC0)?(((port-1)-0xC0)>>2):(port>>1);\n        dmachip = (channel<4) ? 0 : 1;\n        if (!DMA_Toggle[dmachip])\n            DMA_ByteCount[channel]=(DMA_ByteCount[channel] & ~0xFF)|((val+1) & 0xFF);\n        else {\n            DMA_ByteCount[channel]=(DMA_ByteCount[channel] & (~(0xFF << 8)))|(((val+1) & 0xFF) << 8);\n            DMA_CurrentByteCount[channel] = DMA_ByteCount[channel];\n            TRACE(\"Write Count = %x.\\n\",DMA_ByteCount[channel]);\n        }\n        DMA_Toggle[dmachip] = !DMA_Toggle[dmachip];\n        break;\n\n    /* Low Page Base Address */\n    case 0x87: DMA_BaseAddress[0]=(DMA_BaseAddress[0] & 0xFF00FFFF)|((val & 0xFF) << 16); break;\n    case 0x83: DMA_BaseAddress[1]=(DMA_BaseAddress[1] & 0xFF00FFFF)|((val & 0xFF) << 16); break;\n    case 0x81: DMA_BaseAddress[2]=(DMA_BaseAddress[2] & 0xFF00FFFF)|((val & 0xFF) << 16); break;\n    case 0x82: DMA_BaseAddress[3]=(DMA_BaseAddress[3] & 0xFF00FFFF)|((val & 0xFF) << 16); break;\n    case 0x8B: DMA_BaseAddress[5]=(DMA_BaseAddress[5] & 0xFF00FFFF)|((val & 0xFF) << 16); break;\n    case 0x89: DMA_BaseAddress[6]=(DMA_BaseAddress[6] & 0xFF00FFFF)|((val & 0xFF) << 16); break;\n    case 0x8A: DMA_BaseAddress[7]=(DMA_BaseAddress[7] & 0xFF00FFFF)|((val & 0xFF) << 16); break;\n\n    /* Low Page Base Address (only 4 lower bits are significant) */\n    case 0x487: DMA_BaseAddress[0]=(DMA_BaseAddress[0] & 0x00FFFFFF)|((val & 0x0F) << 24); break;\n    case 0x483: DMA_BaseAddress[1]=(DMA_BaseAddress[1] & 0x00FFFFFF)|((val & 0x0F) << 24); break;\n    case 0x481: DMA_BaseAddress[2]=(DMA_BaseAddress[2] & 0x00FFFFFF)|((val & 0x0F) << 24); break;\n    case 0x482: DMA_BaseAddress[3]=(DMA_BaseAddress[3] & 0x00FFFFFF)|((val & 0x0F) << 24); break;\n    case 0x48B: DMA_BaseAddress[5]=(DMA_BaseAddress[5] & 0x00FFFFFF)|((val & 0x0F) << 24); break;\n    case 0x489: DMA_BaseAddress[6]=(DMA_BaseAddress[6] & 0x00FFFFFF)|((val & 0x0F) << 24); break;\n    case 0x48A: DMA_BaseAddress[7]=(DMA_BaseAddress[7] & 0x00FFFFFF)|((val & 0x0F) << 24); break;\n\n    case 0x08:\n    case 0xD0:\n        /* Command */\n        FIXME(\"Write Command (%x) - Not Implemented\\n\",val);\n        break;\n\n    case 0x0B:\n    case 0xD6:\n        /* Mode */\n        TRACE(\"Write Mode (%x)\\n\",val);\n        DMA_Command[((port==0xD6)?4:0)+(val&0x3)]=val;\n        switch(val>>6)\n        {\n        case 0:\n            /* Request mode */\n            FIXME(\"Request Mode - Not Implemented\\n\");\n            break;\n        case 1:\n            /* Single Mode */\n            break;\n        case 2:\n            /* Block mode */\n            FIXME(\"Block Mode - Not Implemented\\n\");\n            break;\n        case 3:\n            /* Cascade Mode */\n            ERR(\"Cascade Mode should not be used by regular apps\\n\");\n            break;\n        }\n        break;\n\n    case 0x0A:\n    case 0xD4:\n        /* Write Single Mask Bit */\n        TRACE(\"Write Single Mask Bit (%x)\\n\",val);\n        dmachip = (port==0x0A) ? 0 : 1;\n        if (val&4)\n            DMA_Mask[dmachip] |= 1<<(val&3);\n        else\n            DMA_Mask[dmachip] &= ~(1<<(val&3));\n        break;\n\n    case 0x0F:\n    case 0xDE:\n        /* Write All Mask Bits (only 4 lower bits are significant */\n        FIXME(\"Write All Mask Bits (%x)\\n\",val);\n        dmachip = (port==0x0F) ? 0 : 1;\n        DMA_Mask[dmachip] = val & 0x0F;\n        break;\n\n    case 0x09:\n    case 0xD2:\n        /* Software DRQx Request */\n        FIXME(\"Software DRQx Request (%x) - Not Implemented\\n\",val);\n        break;\n\n    case 0x0C:\n    case 0xD8:\n        /* Reset DMA Pointer Flip-Flop */\n        TRACE(\"Reset Flip-Flop\\n\");\n        DMA_Toggle[port==0xD8]=FALSE;\n        break;\n\n    case 0x0D:\n    case 0xDA:\n        /* Master Reset */\n        TRACE(\"Master Reset\\n\");\n        dmachip = (port==0x0D) ? 0 : 1;\n        /* Reset DMA Pointer Flip-Flop */\n        DMA_Toggle[dmachip]=FALSE;\n        /* Mask all channels */\n        DMA_Mask[dmachip] = 0x0F;\n        break;\n\n    case 0x0E:\n    case 0xDC:\n        /* Reset Mask Register */\n        FIXME(\"Reset Mask Register\\n\");\n        dmachip = (port==0x0E) ? 0 : 1;\n        /* Unmask all channels */\n        DMA_Mask[dmachip] = 0x00;\n        break;\n    }\n}\n\nBYTE DMA_ioport_in( WORD port )\n{\n    int channel,dmachip;\n    BYTE res = 0;\n\n    switch(port)\n    {\n    case 0x00:\n    case 0x02:\n    case 0x04:\n    case 0x06:\n    case 0xC0:\n    case 0xC4:\n    case 0xC8:\n    case 0xCC:\n        /* Base Address*/\n        channel = (port&0xC0)?((port-0xC0)>>2):(port>>1);\n        dmachip = (channel<4) ? 0 : 1;\n        if (!DMA_Toggle[dmachip])\n            res = DMA_CurrentBaseAddress[channel] & 0xFF;\n        else {\n            res = (DMA_CurrentBaseAddress[channel] & (0xFF << 8))>>8;\n            TRACE(\"Read Current Base Address = %x\\n\",DMA_CurrentBaseAddress[channel]);\n        }\n        DMA_Toggle[dmachip] = !DMA_Toggle[dmachip];\n        break;\n\n    case 0x01:\n    case 0x03:\n    case 0x05:\n    case 0x07:\n    case 0xC2:\n    case 0xC6:\n    case 0xCA:\n    case 0xCE:\n        /* Count*/\n        channel = ((port-1)&0xC0)?(((port-1)-0xC0)>>2):(port>>1);\n        dmachip = (channel<4) ? 0 : 1;\n        if (!DMA_Toggle[dmachip])\n            res = DMA_CurrentByteCount[channel];\n        else {\n            res = DMA_CurrentByteCount[channel] >> 8;\n            TRACE(\"Read Current Count = %x.\\n\",DMA_CurrentByteCount[channel]);\n        }\n        DMA_Toggle[dmachip] = !DMA_Toggle[dmachip];\n        break;\n\n    /* Low Page Base Address */\n    case 0x87: res = DMA_BaseAddress[0] >> 16; break;\n    case 0x83: res = DMA_BaseAddress[1] >> 16; break;\n    case 0x81: res = DMA_BaseAddress[2] >> 16; break;\n    case 0x82: res = DMA_BaseAddress[3] >> 16; break;\n    case 0x8B: res = DMA_BaseAddress[5] >> 16; break;\n    case 0x89: res = DMA_BaseAddress[6] >> 16; break;\n    case 0x8A: res = DMA_BaseAddress[7] >> 16; break;\n\n    /* High Page Base Address */\n    case 0x487: res = DMA_BaseAddress[0] >> 24; break;\n    case 0x483: res = DMA_BaseAddress[1] >> 24; break;\n    case 0x481: res = DMA_BaseAddress[2] >> 24; break;\n    case 0x482: res = DMA_BaseAddress[3] >> 24; break;\n    case 0x48B: res = DMA_BaseAddress[5] >> 24; break;\n    case 0x489: res = DMA_BaseAddress[6] >> 24; break;\n    case 0x48A: res = DMA_BaseAddress[7] >> 24; break;\n\n    case 0x08:\n    case 0xD0:\n        /* Status */\n        TRACE(\"Status Register Read\\n\");\n        res = DMA_Status[(port==0x08)?0:1];\n        break;\n\n    case 0x0D:\n    case 0xDA:\n        /* Temporary */\n        FIXME(\"Temporary Register Read- Not Implemented\\n\");\n        break;\n    }\n    return res;\n}\n"
  },
  {
    "path": "krnl386/dosaspi.c",
    "content": "/*\n * Copyright 2000 David Elliott\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <stdarg.h>\n#include <string.h>\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/windef16.h\"\n#include \"wine/winaspi.h\"\n#include \"wine/debug.h\"\n#include \"dosexe.h\"\n#include \"winerror.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(aspi);\n\nstatic HINSTANCE hWNASPI32 = INVALID_HANDLE_VALUE;\nstatic DWORD (__cdecl *pSendASPI32Command) (LPSRB) = NULL;\n\nstatic void\nDOSASPI_PostProc( SRB_ExecSCSICmd *lpPRB )\n{\n\tDWORD ptrSRB;\n\tLPSRB16 lpSRB16;\n\n\n\tmemcpy(&ptrSRB,lpPRB->SenseArea + lpPRB->SRB_SenseLen,sizeof(DWORD));\n\tTRACE(\"Copying data back to DOS client at 0x%8x\\n\",ptrSRB);\n\tlpSRB16 = PTR_REAL_TO_LIN(SELECTOROF(ptrSRB),OFFSETOF(ptrSRB));\n\tlpSRB16->cmd.SRB_TargStat = lpPRB->SRB_TargStat;\n\tlpSRB16->cmd.SRB_HaStat = lpPRB->SRB_HaStat;\n\tmemcpy(lpSRB16->cmd.CDBByte + lpSRB16->cmd.SRB_CDBLen,lpPRB->SenseArea,lpSRB16->cmd.SRB_SenseLen);\n\n\t/* Now do posting */\n\tif( lpPRB->SRB_Status == SS_SECURITY_VIOLATION )\n\t{\n\t\t/* SS_SECURITY_VIOLATION isn't defined in DOS ASPI */\n\t\tTRACE(\"Returning SS_NO_DEVICE for SS_SECURITY_VIOLATION\\n\");\n\t\tlpPRB->SRB_Status = SS_NO_DEVICE;\n\t}\n\n\tlpSRB16->cmd.SRB_Status = lpPRB->SRB_Status;\n\tTRACE(\"SRB_Status = 0x%x\\n\", lpPRB->SRB_Status);\n\n\tHeapFree(GetProcessHeap(),0,lpPRB);\n\n\tif( (lpSRB16->cmd.SRB_Flags & SRB_POSTING) && lpSRB16->cmd.SRB_PostProc )\n\t{\n\t\tCONTEXT ctx;\n/* The stack should look like this on entry to proc\n * NOTE: the SDK draws the following diagram bass awkwardly, use this one\n * to avoid being confused.  Remember, the act of pushing something on\n * an intel stack involves decreasing the stack pointer by the size of\n * the data, and then copying the data at the new SP.\n */\n/***************************\n * ... Other crap that is already on the stack ...\n * Segment of SRB Pointer\t\t<- SP+6\n * Offset of SRB Pointer\t\t<- SP+4\n * Segment of return address\t\t<- SP+2\n * Offset of return address\t\t<- SP+0\n */\n\t\t/* FIXME: I am about 99% sure what is here is correct,\n\t\t * but this code has never been tested (and probably\n\t\t * won't be either until someone finds a DOS program\n\t\t * that actually uses a Post Routine) */\n\n\t\t/* Zero everything */\n\t\tmemset(&ctx, 0, sizeof(ctx));\n                ctx.EFlags |= V86_FLAG;\n\n\t\t/* CS:IP is routine to call */\n\t\tctx.SegCs = SELECTOROF(lpSRB16->cmd.SRB_PostProc);\n\t\tctx.Eip   = OFFSETOF(lpSRB16->cmd.SRB_PostProc);\n\t\t/* DPMI_CallRMProc will push the pointer to the stack\n\t\t * it is given (in this case &ptrSRB) with length\n\t\t * 2*sizeof(WORD), that is, it copies the contents\n\t\t * of ptrSRB onto the stack, and decs sp by 2*sizeof(WORD).\n\t\t * After doing that, it pushes the return address\n\t\t * onto the stack (so we don't need to worry about that)\n\t\t * So the stack should be okay for the PostProc\n\t\t */\n\t\tif(DPMI_CallRMProc(&ctx, (LPWORD)&ptrSRB, 2, FALSE))\n\t\t{\n\t\t\tTRACE(\"DPMI_CallRMProc returned nonzero (error) status\\n\");\n\t\t}\n\t} /* if ((SRB_Flags&SRB_POSTING) && SRB_PostProc) */\n}\n\nstatic\nDWORD ASPI_SendASPIDOSCommand(DWORD ptrSRB)\n{\n\tPSRB_ExecSCSICmd lpPRB;\n\tDWORD retval;\n\tunion tagSRB16 * lpSRB16;\n\n\tlpSRB16 = PTR_REAL_TO_LIN(SELECTOROF(ptrSRB),OFFSETOF(ptrSRB));\n\n\tretval = SS_ERR;\n\tswitch( lpSRB16->common.SRB_Cmd )\n\t{\n\tcase SC_HA_INQUIRY:\n\t\tTRACE(\"SC_HA_INQUIRY\\n\");\n\t\t/* Format is identical in this case */\n\t\tretval = (*pSendASPI32Command)((LPSRB)lpSRB16);\n\t\tbreak;\n\tcase SC_GET_DEV_TYPE:\n\t\tTRACE(\"SC_GET_DEV_TYPE\\n\");\n\t\t/* Format is identical in this case */\n\t\tretval = (*pSendASPI32Command)((LPSRB)lpSRB16);\n\t\tbreak;\n\tcase SC_EXEC_SCSI_CMD:\n\t\tTRACE(\"SC_EXEC_SCSI_CMD\\n\");\n\t\tTRACE(\"Copying data from DOS client at 0x%8x\\n\",ptrSRB);\n\t\tlpPRB = HeapAlloc(GetProcessHeap(),0,sizeof(SRB)+lpSRB16->cmd.SRB_SenseLen+sizeof(DWORD));\n#define srb_dos_to_w32(name) \\\n\t\tlpPRB->SRB_##name = lpSRB16->cmd.SRB_##name\n\n\t\tsrb_dos_to_w32(Cmd);\n\t\tsrb_dos_to_w32(Status);\n\t\tsrb_dos_to_w32(HaId);\n\t\tsrb_dos_to_w32(BufLen);\n\t\tsrb_dos_to_w32(SenseLen);\n\t\tsrb_dos_to_w32(CDBLen);\n\t\tsrb_dos_to_w32(Target);\n\t\tsrb_dos_to_w32(Lun);\n#undef srb_dos_to_w32\n\n\t\t/* Allow certain flags to go on to WNASPI32, we also need\n\t\t * to make sure SRB_POSTING is enabled */\n\t\tlpPRB->SRB_Flags = SRB_POSTING | (lpSRB16->cmd.SRB_Flags&(SRB_DIR_IN|SRB_DIR_OUT|SRB_ENABLE_RESIDUAL_COUNT));\n\n\t\t/* Pointer to data buffer */\n\t\tlpPRB->SRB_BufPointer = PTR_REAL_TO_LIN(SELECTOROF(lpSRB16->cmd.SRB_BufPointer),\n                                                        OFFSETOF(lpSRB16->cmd.SRB_BufPointer));\n\t\t/* Copy CDB in */\n\t\tmemcpy(&lpPRB->CDBByte[0],&lpSRB16->cmd.CDBByte[0],lpSRB16->cmd.SRB_CDBLen);\n\n\t\t/* Set post proc to our post proc */\n\t\tlpPRB->SRB_PostProc = DOSASPI_PostProc;\n\n\t\t/* Stick the DWORD after all the sense info */\n\t\tmemcpy(lpPRB->SenseArea + lpPRB->SRB_SenseLen,&ptrSRB,sizeof(DWORD));\n\t\tretval = (*pSendASPI32Command)((LPSRB)lpPRB);\n\t\tbreak;\n\tcase SC_ABORT_SRB:\n\t\tTRACE(\"SC_ABORT_SRB\\n\");\n\t\t/* Would need some sort of table of active shit */\n\t\tbreak;\n\tcase SC_RESET_DEV:\n\t\tTRACE(\"SC_RESET_DEV\\n\");\n\t\tbreak;\n\tdefault:\n\t\tTRACE(\"Unknown command code\\n\");\n\t\tbreak;\n\t}\n\n\tTRACE(\"Returning %x\\n\", retval );\n\treturn retval;\n}\n\nstatic void WINAPI ASPI_DOS_func(CONTEXT *context)\n{\n\tWORD *stack = CTX_SEG_OFF_TO_LIN(context, context->SegSs, context->Esp);\n\tDWORD ptrSRB = *(DWORD *)&stack[2];\n\n\tASPI_SendASPIDOSCommand(ptrSRB);\n\n\t/* simulate a normal RETF sequence as required by DPMI CallRMProcFar */\n\tcontext->Eip = *(stack++);\n\tcontext->SegCs  = *(stack++);\n\tcontext->Esp += 2*sizeof(WORD);\n}\n\n\n/**********************************************************************\n *\t    ASPIHandler\n *\n * returns the address of a real mode callback to ASPI_DOS_func()\n */\nvoid DOSVM_ASPIHandler( CONTEXT *context )\n{\n\tFARPROC16 *p = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx);\n\tTRACE(\"DOS ASPI opening\\n\");\n\tif ((CX_reg(context) == 4) || (CX_reg(context) == 5))\n\t{\n\t\tif( hWNASPI32 == INVALID_HANDLE_VALUE )\n\t\t{\n\t\t\tTRACE(\"Loading WNASPI32\\n\");\n\t\t\thWNASPI32 = LoadLibraryExA(\"WNASPI32\", 0, 0);\n\t\t}\n\n\t\tif( hWNASPI32 == INVALID_HANDLE_VALUE )\n\t\t{\n\t\t\tERR(\"Error loading WNASPI32\\n\");\n\t\t\tgoto error_exit;\n\t\t}\n\n\t\t/* Get SendASPI32Command by Ordinal 2 */\n\t\t/* Cast to correct argument/return types */\n\t\tpSendASPI32Command = (DWORD (*)(LPSRB))GetProcAddress(hWNASPI32, (LPCSTR)2);\n\t\tif( !pSendASPI32Command )\n\t\t{\n\t\t\tERR(\"Error getting ordinal 2 from WNASPI32\\n\");\n\t\t\tgoto error_exit;\n\t\t}\n\n\t\t*p = DPMI_AllocInternalRMCB(ASPI_DOS_func);\n\t\tTRACE(\"allocated real mode proc %p\\n\", *p);\n\t\tSET_AX( context, CX_reg(context) );\n\n\t\treturn;\n\t}\nerror_exit:\n\t/* Return some error... General Failure sounds okay */\n\tSET_AX( context, ERROR_GEN_FAILURE );\n\tSET_CFLAG(context);\n}\n"
  },
  {
    "path": "krnl386/dosdev.c",
    "content": "/*\n * DOS devices\n *\n * Copyright 1999 Ove Kåven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdlib.h>\n#include <string.h>\n#include \"wine/winbase16.h\"\n#include \"dosexe.h\"\n#include \"wine/debug.h\"\n\n#include \"pshpack1.h\"\n\n/* Warning: need to return LOL ptr w/ offset 0 (&ptr_first_DPB) to programs ! */\ntypedef struct _DOS_LISTOFLISTS\n{\n    WORD  CX_Int21_5e01;        /* -24d contents of CX from INT 21/AX=5E01h */\n    WORD  LRU_count_FCB_cache;  /* -22d */\n    WORD  LRU_count_FCB_open;   /* -20d */\n    DWORD OEM_func_handler;     /* -18d OEM function of INT 21/AH=F8h */\n    WORD  INT21_offset;         /* -14d offset in DOS CS of code to return from INT 21 call */\n    WORD  sharing_retry_count;  /* -12d */\n    WORD  sharing_retry_delay;  /* -10d */\n    DWORD ptr_disk_buf;         /* -8d ptr to current disk buf */\n    WORD  offs_unread_CON;      /* -4d pointer in DOS data segment of unread CON input */\n    WORD  seg_first_MCB;        /* -2d */\n    DWORD ptr_first_DPB;        /* 00 */\n    DWORD ptr_first_SysFileTable; /* 04 */\n    DWORD ptr_clock_dev_hdr;    /* 08 */\n    DWORD ptr_CON_dev_hdr;      /* 0C */\n    WORD  max_byte_per_sec;     /* 10 maximum bytes per sector of any block device */\n    DWORD ptr_disk_buf_info;    /* 12 */\n    DWORD ptr_array_CDS;        /* 16 current directory structure */\n    DWORD ptr_sys_FCB;          /* 1A */\n    WORD  nr_protect_FCB;       /* 1E */\n    BYTE  nr_block_dev;         /* 20 */\n    BYTE  nr_avail_drive_letters; /* 21 */\n    DOS_DEVICE_HEADER NUL_dev;  /* 22 */\n    BYTE  nr_drives_JOINed;     /* 34 */\n    WORD  ptr_spec_prg_names;   /* 35 */\n    DWORD ptr_SETVER_prg_list;  /* 37 */\n    WORD DOS_HIGH_A20_func_offs;/* 3B */\n    WORD PSP_last_exec;         /* 3D if DOS in HMA: PSP of program executed last; if DOS low: 0000h */\n    WORD BUFFERS_val;           /* 3F */\n    WORD BUFFERS_nr_lookahead;  /* 41 */\n    BYTE boot_drive;            /* 43 */\n    BYTE flag_DWORD_moves;      /* 44 01h for 386+, 00h otherwise */\n    WORD size_extended_mem;     /* 45 size of extended mem in KB */\n    SEGPTR wine_rm_lol;         /* -- wine: Real mode pointer to LOL */\n    SEGPTR wine_pm_lol;         /* -- wine: Protected mode pointer to LOL */\n} DOS_LISTOFLISTS;\n\n#include \"poppack.h\"\n\n#define CON_BUFFER 128\n\nenum strategy { SYSTEM_STRATEGY_NUL, SYSTEM_STRATEGY_CON, NB_SYSTEM_STRATEGIES };\n\nstatic void *strategy_data[NB_SYSTEM_STRATEGIES];\n\n#define LJMP 0xea\n\n\n/* prototypes */\nstatic void WINAPI nul_strategy(CONTEXT*ctx);\nstatic void WINAPI nul_interrupt(CONTEXT*ctx);\nstatic void WINAPI con_strategy(CONTEXT*ctx);\nstatic void WINAPI con_interrupt(CONTEXT*ctx);\n\n/* devices */\nstatic const WINEDEV devs[] =\n{\n  { \"NUL     \",\n    ATTR_CHAR|ATTR_NUL|ATTR_DEVICE,\n    nul_strategy, nul_interrupt },\n\n  { \"CON     \",\n    ATTR_CHAR|ATTR_STDIN|ATTR_STDOUT|ATTR_FASTCON|ATTR_NOTEOF|ATTR_DEVICE,\n    con_strategy, con_interrupt }\n};\n\n#define NR_DEVS (sizeof(devs)/sizeof(WINEDEV))\n\n/* DOS data segment */\ntypedef struct\n{\n    DOS_LISTOFLISTS    lol;\n    DOS_DEVICE_HEADER  dev[NR_DEVS-1];\n    DOS_DEVICE_HEADER *last_dev; /* ptr to last registered device driver */\n    WINEDEV_THUNK      thunk[NR_DEVS];\n    REQ_IO             req;\n    BYTE               buffer[CON_BUFFER];\n\n} DOS_DATASEG;\n\n#define DOS_DATASEG_OFF(xxx) FIELD_OFFSET(DOS_DATASEG, xxx)\n\nstatic DWORD DOS_LOLSeg;\n\nstatic struct _DOS_LISTOFLISTS * DOSMEM_LOL(void)\n{\n    return PTR_REAL_TO_LIN(HIWORD(DOS_LOLSeg),0);\n}\n\n\n/* the device implementations */\nstatic void do_lret(CONTEXT*ctx)\n{\n  WORD *stack = CTX_SEG_OFF_TO_LIN(ctx, ctx->SegSs, ctx->Esp);\n\n  ctx->Eip   = *(stack++);\n  ctx->SegCs = *(stack++);\n  ctx->Esp  += 2*sizeof(WORD);\n}\n\nstatic void do_strategy(CONTEXT*ctx, int id, int extra)\n{\n  REQUEST_HEADER *hdr = CTX_SEG_OFF_TO_LIN(ctx, ctx->SegEs, ctx->Ebx);\n  void **hdr_ptr = strategy_data[id];\n\n  if (!hdr_ptr) {\n    hdr_ptr = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(void *)+extra);\n    strategy_data[id] = hdr_ptr;\n  }\n  *hdr_ptr = hdr;\n  do_lret(ctx);\n}\n\nstatic REQUEST_HEADER * get_hdr(int id, void**extra)\n{\n  void **hdr_ptr = strategy_data[id];\n  if (extra)\n    *extra = hdr_ptr ? (void*)(hdr_ptr+1) : NULL;\n  return hdr_ptr ? *hdr_ptr : NULL;\n}\n\nstatic void WINAPI nul_strategy(CONTEXT*ctx)\n{\n  do_strategy(ctx, SYSTEM_STRATEGY_NUL, 0);\n}\n\nstatic void WINAPI nul_interrupt(CONTEXT*ctx)\n{\n  REQUEST_HEADER *hdr = get_hdr(SYSTEM_STRATEGY_NUL, NULL);\n  /* eat everything and recycle nothing */\n  switch (hdr->command) {\n  case CMD_INPUT:\n    ((REQ_IO*)hdr)->count = 0;\n    hdr->status = STAT_DONE;\n    break;\n  case CMD_SAFEINPUT:\n    hdr->status = STAT_DONE|STAT_BUSY;\n    break;\n  default:\n    hdr->status = STAT_DONE;\n  }\n  do_lret(ctx);\n}\n\nstatic void WINAPI con_strategy(CONTEXT*ctx)\n{\n  do_strategy(ctx, SYSTEM_STRATEGY_CON, sizeof(int));\n}\n\nstatic void WINAPI con_interrupt(CONTEXT*ctx)\n{\n  int *scan;\n  REQUEST_HEADER *hdr = get_hdr(SYSTEM_STRATEGY_CON,(void **)&scan);\n  BIOSDATA *bios = DOSVM_BiosData();\n  WORD CurOfs = bios->NextKbdCharPtr;\n  DOS_LISTOFLISTS *lol = DOSMEM_LOL();\n  DOS_DATASEG *dataseg = (DOS_DATASEG *)lol;\n  BYTE *linebuffer = dataseg->buffer;\n  BYTE *curbuffer = (lol->offs_unread_CON) ?\n    (((BYTE*)dataseg) + lol->offs_unread_CON) : NULL;\n  DOS_DEVICE_HEADER *con = dataseg->dev;\n  DWORD w;\n\n  switch (hdr->command) {\n  case CMD_INPUT:\n    {\n      REQ_IO *io = (REQ_IO *)hdr;\n      WORD count = io->count, len = 0;\n      BYTE *buffer = CTX_SEG_OFF_TO_LIN(ctx,\n\t\t\t\t\tSELECTOROF(io->buffer),\n\t\t\t\t\t(DWORD)OFFSETOF(io->buffer));\n\n      hdr->status = STAT_BUSY;\n      /* first, check whether we already have data in line buffer */\n      if (curbuffer) {\n\t/* yep, copy as much as we can */\n\tBYTE data = 0;\n\twhile ((len<count) && (data != '\\r')) {\n\t  data = *curbuffer++;\n\t  buffer[len++] = data;\n\t}\n\tif (data == '\\r') {\n\t  /* line buffer emptied */\n\t  lol->offs_unread_CON = 0;\n\t  curbuffer = NULL;\n\t  /* if we're not in raw mode, call it a day */\n\t  if (!(con->attr & ATTR_RAW)) {\n\t    hdr->status = STAT_DONE;\n\t    io->count = len;\n\t    break;\n\t  }\n\t} else {\n\t  /* still some data left */\n\t  lol->offs_unread_CON = curbuffer - (BYTE*)lol;\n\t  /* but buffer was filled, we're done */\n\t  hdr->status = STAT_DONE;\n\t  io->count = len;\n\t  break;\n\t}\n      }\n\n      /* if we're in raw mode, we just need to fill the buffer */\n      if (con->attr & ATTR_RAW) {\n\twhile (len<count) {\n\t  WORD data;\n\n\t  /* do we have a waiting scancode? */\n\t  if (*scan) {\n\t    /* yes, store scancode in buffer */\n\t    buffer[len++] = *scan;\n\t    *scan = 0;\n\t    if (len==count) break;\n\t  }\n\n\t  /* check for new keyboard input */\n\t  while (CurOfs == bios->FirstKbdCharPtr) {\n\t    /* no input available yet, so wait... */\n\t    DOSVM_Wait( ctx );\n\t  }\n\t  /* read from keyboard queue (call int16?) */\n\t  data = ((WORD*)bios)[CurOfs];\n\t  CurOfs += 2;\n\t  if (CurOfs >= bios->KbdBufferEnd) CurOfs = bios->KbdBufferStart;\n\t  bios->NextKbdCharPtr = CurOfs;\n\t  /* if it's an extended key, save scancode */\n\t  if (LOBYTE(data) == 0) *scan = HIBYTE(data);\n\t  /* store ASCII char in buffer */\n\t  buffer[len++] = LOBYTE(data);\n\t}\n      } else {\n\t/* we're not in raw mode, so we need to do line input... */\n\twhile (TRUE) {\n\t  WORD data;\n\t  /* check for new keyboard input */\n\t  while (CurOfs == bios->FirstKbdCharPtr) {\n\t    /* no input available yet, so wait... */\n\t    DOSVM_Wait( ctx );\n\t  }\n\t  /* read from keyboard queue (call int16?) */\n\t  data = ((WORD*)bios)[CurOfs];\n\t  CurOfs += 2;\n\t  if (CurOfs >= bios->KbdBufferEnd) CurOfs = bios->KbdBufferStart;\n\t  bios->NextKbdCharPtr = CurOfs;\n\n\t  if (LOBYTE(data) == '\\r') {\n\t    /* it's the return key, we're done */\n\t    linebuffer[len++] = LOBYTE(data);\n\t    break;\n\t  }\n\t  else if (LOBYTE(data) >= ' ') {\n\t    /* a character */\n\t    if ((len+1)<CON_BUFFER) {\n\t      linebuffer[len] = LOBYTE(data);\n\t      WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), &linebuffer[len++], 1, &w, NULL);\n\t    }\n\t    /* else beep, but I don't like noise */\n\t  }\n\t  else switch (LOBYTE(data)) {\n\t  case '\\b':\n\t    if (len>0) {\n\t      len--;\n\t      WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), \"\\b \\b\", 3, &w, NULL);\n\t    }\n\t    break;\n\t  }\n\t}\n\tif (len > count) {\n\t  /* save rest of line for later */\n\t  lol->offs_unread_CON = linebuffer - (BYTE*)lol + count;\n\t  len = count;\n\t}\n\tmemcpy(buffer, linebuffer, len);\n      }\n      hdr->status = STAT_DONE;\n      io->count = len;\n    }\n    break;\n  case CMD_SAFEINPUT:\n    if (curbuffer) {\n      /* some line input waiting */\n      hdr->status = STAT_DONE;\n      ((REQ_SAFEINPUT*)hdr)->data = *curbuffer;\n    }\n    else if (con->attr & ATTR_RAW) {\n      if (CurOfs == bios->FirstKbdCharPtr) {\n\t/* no input */\n\thdr->status = STAT_DONE|STAT_BUSY;\n      } else {\n\t/* some keyboard input waiting */\n\thdr->status = STAT_DONE;\n\t((REQ_SAFEINPUT*)hdr)->data = ((BYTE*)bios)[CurOfs];\n      }\n    } else {\n      /* no line input */\n      hdr->status = STAT_DONE|STAT_BUSY;\n    }\n    break;\n  case CMD_INSTATUS:\n    if (curbuffer) {\n      /* we have data */\n      hdr->status = STAT_DONE;\n    }\n    else if (con->attr & ATTR_RAW) {\n      if (CurOfs == bios->FirstKbdCharPtr) {\n\t/* no input */\n\thdr->status = STAT_DONE|STAT_BUSY;\n      } else {\n\t/* some keyboard input waiting */\n\thdr->status = STAT_DONE;\n      }\n    } else {\n      /* no line input */\n      hdr->status = STAT_DONE|STAT_BUSY;\n    }\n\n    break;\n  case CMD_INFLUSH:\n    /* flush line and keyboard queue */\n    lol->offs_unread_CON = 0;\n    bios->NextKbdCharPtr = bios->FirstKbdCharPtr;\n    break;\n  case CMD_OUTPUT:\n  case CMD_SAFEOUTPUT:\n    {\n      REQ_IO *io = (REQ_IO *)hdr;\n      BYTE *buffer = CTX_SEG_OFF_TO_LIN(ctx,\n\t\t\t\t\tSELECTOROF(io->buffer),\n\t\t\t\t\t(DWORD)OFFSETOF(io->buffer));\n      DWORD result = 0;\n      WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), buffer, io->count, &result, NULL);\n      io->count = result;\n      hdr->status = STAT_DONE;\n    }\n    break;\n  default:\n    hdr->status = STAT_DONE;\n  }\n  do_lret(ctx);\n}\n\nstatic void InitListOfLists(DOS_LISTOFLISTS *DOS_LOL)\n{\n/*\nOutput of DOS 6.22:\n\n0133:0020                    6A 13-33 01 CC 00 33 01 59 00         j.3...3.Y.\n0133:0030  70 00 00 00 72 02 00 02-6D 00 33 01 00 00 2E 05   p...r...m.3.....\n0133:0040  00 00 FC 04 00 00 03 08-92 21 11 E0 04 80 C6 0D   .........!......\n0133:0050  CC 0D 4E 55 4C 20 20 20-20 20 00 00 00 00 00 00   ..NUL     ......\n0133:0060  00 4B BA C1 06 14 00 00-00 03 01 00 04 70 CE FF   .K...........p..\n0133:0070  FF 00 00 00 00 00 00 00-00 01 00 00 0D 05 00 00   ................\n0133:0080  00 FF FF 00 00 00 00 FE-00 00 F8 03 FF 9F 70 02   ..............p.\n0133:0090  D0 44 C8 FD D4 44 C8 FD-D4 44 C8 FD D0 44 C8 FD   .D...D...D...D..\n0133:00A0  D0 44 C8 FD D0 44                                 .D...D\n*/\n  DOS_LOL->CX_Int21_5e01\t\t= 0x0;\n  DOS_LOL->LRU_count_FCB_cache\t= 0x0;\n  DOS_LOL->LRU_count_FCB_open\t\t= 0x0;\n  DOS_LOL->OEM_func_handler\t\t= -1; /* not available */\n  DOS_LOL->INT21_offset\t\t= 0x0;\n  DOS_LOL->sharing_retry_count\t= 3;\n  DOS_LOL->sharing_retry_delay\t= 1;\n  DOS_LOL->ptr_disk_buf\t\t= 0x0;\n  DOS_LOL->offs_unread_CON\t\t= 0x0;\n  DOS_LOL->seg_first_MCB\t\t= 0x0;\n  DOS_LOL->ptr_first_DPB\t\t= 0x0;\n  DOS_LOL->ptr_first_SysFileTable\t= 0x0;\n  DOS_LOL->ptr_clock_dev_hdr\t\t= 0x0;\n  DOS_LOL->ptr_CON_dev_hdr\t\t= 0x0;\n  DOS_LOL->max_byte_per_sec\t\t= 512;\n  DOS_LOL->ptr_disk_buf_info\t\t= 0x0;\n  DOS_LOL->ptr_array_CDS\t\t= 0x0;\n  DOS_LOL->ptr_sys_FCB\t\t= 0x0;\n  DOS_LOL->nr_protect_FCB\t\t= 0x0;\n  DOS_LOL->nr_block_dev\t\t= 0x0;\n  DOS_LOL->nr_avail_drive_letters\t= 26; /* A - Z */\n  DOS_LOL->nr_drives_JOINed\t\t= 0x0;\n  DOS_LOL->ptr_spec_prg_names\t\t= 0x0;\n  DOS_LOL->ptr_SETVER_prg_list\t= 0x0; /* no SETVER list */\n  DOS_LOL->DOS_HIGH_A20_func_offs\t= 0x0;\n  DOS_LOL->PSP_last_exec\t\t= 0x0;\n  DOS_LOL->BUFFERS_val\t\t= 99; /* maximum: 99 */\n  DOS_LOL->BUFFERS_nr_lookahead\t= 8; /* maximum: 8 */\n  DOS_LOL->boot_drive\t\t\t= 3; /* C: */\n  DOS_LOL->flag_DWORD_moves\t\t= 0x01; /* i386+ */\n  DOS_LOL->size_extended_mem\t\t= 0xf000; /* very high value */\n}\n\nvoid DOSDEV_SetupDevice(const WINEDEV * devinfo,\n\t\t\tWORD seg, WORD off_dev, WORD off_thunk)\n{\n  DOS_DEVICE_HEADER *dev = PTR_REAL_TO_LIN(seg, off_dev);\n  WINEDEV_THUNK *thunk = PTR_REAL_TO_LIN(seg, off_thunk);\n  DOS_DATASEG *dataseg = (DOS_DATASEG*)DOSMEM_LOL();\n\n  dev->attr = devinfo->attr;\n  dev->strategy  = off_thunk + FIELD_OFFSET(WINEDEV_THUNK, ljmp1);\n  dev->interrupt = off_thunk + FIELD_OFFSET(WINEDEV_THUNK, ljmp2);\n  memcpy(dev->name, devinfo->name, 8);\n\n  thunk->ljmp1     = LJMP;\n  thunk->strategy  = DPMI_AllocInternalRMCB(devinfo->strategy);\n  thunk->ljmp2     = LJMP;\n  thunk->interrupt = DPMI_AllocInternalRMCB(devinfo->interrupt);\n\n  dev->next_dev = NONEXT;\n  if (dataseg->last_dev)\n      dataseg->last_dev->next_dev = MAKESEGPTR(seg, off_dev);\n  dataseg->last_dev = dev;\n}\n\nvoid DOSDEV_InstallDOSDevices(void)\n{\n  DOS_DATASEG *dataseg;\n  WORD seg;\n  WORD selector;\n  unsigned int n;\n\n  /* allocate DOS data segment or something */\n  dataseg = DOSVM_AllocDataUMB( sizeof(DOS_DATASEG), &seg, &selector );\n\n  DOS_LOLSeg = MAKESEGPTR( seg, 0 );\n  DOSMEM_LOL()->wine_rm_lol = \n      MAKESEGPTR( seg, FIELD_OFFSET(DOS_LISTOFLISTS, ptr_first_DPB) );\n  DOSMEM_LOL()->wine_pm_lol = \n      MAKESEGPTR( selector, FIELD_OFFSET(DOS_LISTOFLISTS, ptr_first_DPB) );\n\n  /* initialize the magnificent List Of Lists */\n  InitListOfLists(&dataseg->lol);\n\n  /* Set up first device (NUL) */\n  dataseg->last_dev = NULL;\n  DOSDEV_SetupDevice( &devs[0],\n\t\t      seg,\n\t\t      DOS_DATASEG_OFF(lol.NUL_dev),\n\t\t      DOS_DATASEG_OFF(thunk[0]) );\n\n  /* Set up the remaining devices */\n  for (n = 1; n < NR_DEVS; n++)\n    DOSDEV_SetupDevice( &devs[n],\n\t\t\tseg,\n\t\t\tDOS_DATASEG_OFF(dev[n-1]),\n\t\t\tDOS_DATASEG_OFF(thunk[n]) );\n\n  /* CON is device 1 */\n  dataseg->lol.ptr_CON_dev_hdr = MAKESEGPTR(seg, DOS_DATASEG_OFF(dev[0]));\n}\n\nvoid DOSDEV_SetSharingRetry(WORD delay, WORD count)\n{\n    DOSMEM_LOL()->sharing_retry_delay = delay;\n    if (count) DOSMEM_LOL()->sharing_retry_count = count;\n}\n\nSEGPTR DOSDEV_GetLOL(BOOL v86)\n{\n    if (v86) return DOSMEM_LOL()->wine_rm_lol;\n    else return DOSMEM_LOL()->wine_pm_lol;\n}\n"
  },
  {
    "path": "krnl386/dosexe.c",
    "content": "/*\n * DOS (MZ) loader\n *\n * Copyright 1998 Ove Kåven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n * Note: This code hasn't been completely cleaned up yet.\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdarg.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <fcntl.h>\n#include <signal.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#include <sys/types.h>\n#ifdef HAVE_SYS_STAT_H\n# include <sys/stat.h>\n#endif\n#ifdef HAVE_SYS_TIME_H\n# include <sys/time.h>\n#endif\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/winbase16.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n#include \"winerror.h\"\n#include \"wine/debug.h\"\n#include \"kernel16_private.h\"\n#include \"dosexe.h\"\n#include \"vga.h\"\n#include \"../toolhelp/toolhelp.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(module);\n\nstatic BOOL DOSVM_isdosexe;\n\n/**********************************************************************\n *          DOSVM_IsWin16\n * \n * Return TRUE if we are in Windows process.\n */\nBOOL DOSVM_IsWin16(void)\n{\n  return !DOSVM_isdosexe;\n}\n\n/**********************************************************************\n *          DOSVM_Exit\n */\nvoid DOSVM_Exit( WORD retval )\n{\n    DWORD count;\n\n    TOOLHELP_CallNotify(NFY_EXITTASK, retval);\n    ReleaseThunkLock( &count );\n    ExitThread( retval );\n}\n\n\n#ifdef MZ_SUPPORTED\n\n#define BIOS_DATA_SEGMENT 0x40\n#define PSP_SIZE 0x10\n\n#define SEG16(ptr,seg) ((LPVOID)((BYTE*)ptr+((DWORD)(seg)<<4)))\n#define SEGPTR16(ptr,segptr) ((LPVOID)((BYTE*)ptr+((DWORD)SELECTOROF(segptr)<<4)+OFFSETOF(segptr)))\n\n/* structures for EXEC */\n\n#include \"pshpack1.h\"\n\ntypedef struct {\n  WORD env_seg;\n  DWORD cmdline;\n  DWORD fcb1;\n  DWORD fcb2;\n  WORD init_sp;\n  WORD init_ss;\n  WORD init_ip;\n  WORD init_cs;\n} ExecBlock;\n\ntypedef struct {\n  WORD load_seg;\n  WORD rel_seg;\n} OverlayBlock;\n\n#include \"poppack.h\"\n\n/* global variables */\n\npid_t dosvm_pid;\n\nstatic WORD init_cs,init_ip,init_ss,init_sp;\nstatic HANDLE dosvm_thread, loop_thread;\nstatic DWORD dosvm_tid, loop_tid;\n\nstatic DWORD MZ_Launch( LPCSTR cmdtail, int length );\nstatic BOOL MZ_InitTask(void);\n\nstatic void MZ_CreatePSP( LPVOID lpPSP, WORD env, WORD par )\n{\n  PDB16*psp=lpPSP;\n\n  psp->int20=0x20CD; /* int 20 */\n  /* some programs use this to calculate how much memory they need */\n  psp->nextParagraph=0x9FFF; /* FIXME: use a real value */\n  /* FIXME: dispatcher */\n  psp->savedint22 = DOSVM_GetRMHandler(0x22);\n  psp->savedint23 = DOSVM_GetRMHandler(0x23);\n  psp->savedint24 = DOSVM_GetRMHandler(0x24);\n  psp->parentPSP=par;\n  psp->environment=env;\n  /* FIXME: more PSP stuff */\n}\n\nextern char *DOSMEM_dosmem;\nstatic void MZ_FillPSP( LPVOID lpPSP, LPCSTR cmdtail, int length )\n{\n    PDB16 *psp = (PDB16*)lpPSP;\n\n    if(length > 127) \n    {\n        WARN( \"Command tail truncated! (length %d)\\n\", length );\n        length = 126;\n    }\n\n    psp->cmdLine[0] = length;\n\n    /*\n     * Length of exactly 127 bytes means that full command line is \n     * stored in environment variable CMDLINE and PSP contains \n     * command tail truncated to 126 bytes.\n     */\n    if(length == 127)\n        length = 126;\n\n    if(length > 0)\n        memmove(psp->cmdLine+1, cmdtail, length);\n\n    psp->cmdLine[length+1] = '\\r';\n\n    /* FIXME: more PSP stuff */\n}\n\nstatic WORD MZ_InitEnvironment( LPCSTR env, LPCSTR name )\n{\n unsigned sz=0;\n unsigned i=0;\n WORD seg;\n LPSTR envblk;\n\n if (env) {\n  /* get size of environment block */\n  while (env[sz++]) sz+=strlen(env+sz)+1;\n } else sz++;\n /* allocate it */\n envblk=DOSMEM_AllocBlock(sz+sizeof(WORD)+strlen(name)+1,&seg);\n /* fill it */\n if (env) {\n  memcpy(envblk,env,sz);\n } else envblk[0]=0;\n /* DOS environment variables are uppercase */\n while (envblk[i]){\n  while (envblk[i] != '='){\n   if (envblk[i]>='a' && envblk[i] <= 'z'){\n    envblk[i] -= 32;\n   }\n   i++;\n  }\n  i += strlen(envblk+i) + 1;\n }\n /* DOS 3.x: the block contains 1 additional string */\n *(WORD*)(envblk+sz)=1;\n /* being the program name itself */\n strcpy(envblk+sz+sizeof(WORD),name);\n return seg;\n}\n\nstatic BOOL MZ_InitMemory(void)\n{\n    /* initialize the memory */\n    TRACE(\"Initializing DOS memory structures\\n\");\n    DOSMEM_MapDosLayout();\n    DOSDEV_InstallDOSDevices();\n    MSCDEX_InstallCDROM();\n\n    return TRUE;\n}\n\nstatic BOOL MZ_DoLoadImage( HANDLE hFile, LPCSTR filename, OverlayBlock *oblk, WORD par_env_seg )\n{\n  IMAGE_DOS_HEADER mz_header;\n  DWORD image_start,image_size,min_size,max_size,avail;\n  BYTE*psp_start,*load_start;\n  LPSTR oldenv = 0;\n  int x, old_com=0, alloc;\n  SEGPTR reloc;\n  WORD env_seg, load_seg, rel_seg, oldpsp_seg;\n  DWORD len;\n\n  if (DOSVM_psp) {\n    /* DOS process already running, inherit from it */\n    PDB16* par_psp;\n    alloc=0;\n    oldpsp_seg = DOSVM_psp;\n    if( !par_env_seg) {  \n        par_psp = (PDB16*)PTR_REAL_TO_LIN(DOSVM_psp, 0);\n        oldenv = (LPSTR)((DWORD)PTR_REAL_TO_LIN(par_psp->environment, 0));\n    }\n  } else {\n    /* allocate new DOS process, inheriting from Wine environment */\n    alloc=1;\n    oldpsp_seg = 0;\n    if( !par_env_seg)\n        oldenv = GetEnvironmentStringsA();\n  }\n\n SetFilePointer(hFile,0,NULL,FILE_BEGIN);\n if (   !ReadFile(hFile,&mz_header,sizeof(mz_header),&len,NULL)\n     || len != sizeof(mz_header)\n     || mz_header.e_magic != IMAGE_DOS_SIGNATURE) {\n  const char *p = strrchr( filename, '.' );\n  if (!p || strcasecmp( p, \".com\" ))  /* check for .COM extension */\n  {\n      SetLastError(ERROR_BAD_FORMAT);\n      goto load_error;\n  }\n  old_com=1; /* assume .COM file */\n  image_start=0;\n  image_size=GetFileSize(hFile,NULL);\n  min_size=0x10000; max_size=0x100000;\n  mz_header.e_crlc=0;\n  mz_header.e_ss=0; mz_header.e_sp=0xFFFE;\n  mz_header.e_cs=0; mz_header.e_ip=0x100;\n } else {\n  /* calculate load size */\n  image_start=mz_header.e_cparhdr<<4;\n  image_size=mz_header.e_cp<<9; /* pages are 512 bytes */\n  /* From Ralf Brown Interrupt List: If the word at offset 02h is 4, it should\n   * be treated as 00h, since pre-1.10 versions of the MS linker set it that\n   * way. */\n  if ((mz_header.e_cblp!=0)&&(mz_header.e_cblp!=4)) image_size-=512-mz_header.e_cblp;\n  image_size-=image_start;\n  min_size=image_size+((DWORD)mz_header.e_minalloc<<4)+(PSP_SIZE<<4);\n  max_size=image_size+((DWORD)mz_header.e_maxalloc<<4)+(PSP_SIZE<<4);\n }\n\n  if (alloc) MZ_InitMemory();\n\n  if (oblk) {\n    /* load overlay into preallocated memory */\n    load_seg=oblk->load_seg;\n    rel_seg=oblk->rel_seg;\n    load_start=(LPBYTE)((DWORD)load_seg<<4);\n  } else {\n    /* allocate environment block */\n    if( par_env_seg)\n        env_seg = par_env_seg;\n    else\n        env_seg=MZ_InitEnvironment(oldenv, filename);\n    if (alloc)\n        FreeEnvironmentStringsA( oldenv);\n\n    /* allocate memory for the executable */\n    TRACE(\"Allocating DOS memory (min=%d, max=%d)\\n\",min_size,max_size);\n    avail=DOSMEM_Available();\n    if (avail<min_size) {\n      ERR(\"insufficient DOS memory\\n\");\n      SetLastError(ERROR_NOT_ENOUGH_MEMORY);\n      goto load_error;\n    }\n    if (avail>max_size) avail=max_size;\n    psp_start=DOSMEM_AllocBlock(avail,&DOSVM_psp);\n    if (!psp_start) {\n      ERR(\"error allocating DOS memory\\n\");\n      SetLastError(ERROR_NOT_ENOUGH_MEMORY);\n      goto load_error;\n    }\n    load_seg=DOSVM_psp+(old_com?0:PSP_SIZE);\n    rel_seg=load_seg;\n    load_start=psp_start+(PSP_SIZE<<4);\n    MZ_CreatePSP(psp_start, env_seg, oldpsp_seg);\n  }\n\n /* load executable image */\n TRACE(\"loading DOS %s image, %08x bytes\\n\",old_com?\"COM\":\"EXE\",image_size);\n SetFilePointer(hFile,image_start,NULL,FILE_BEGIN);\n if (!ReadFile(hFile,load_start,image_size,&len,NULL) || len != image_size) {\n  /* check if this is due to the workaround for the pre-1.10 MS linker and we\n     really had only 4 bytes on the last page */\n  if (mz_header.e_cblp != 4 || image_size - len != 512 - 4) {\n    SetLastError(ERROR_BAD_FORMAT);\n    goto load_error;\n  }\n }\n\n if (mz_header.e_crlc) {\n  /* load relocation table */\n  TRACE(\"loading DOS EXE relocation table, %d entries\\n\",mz_header.e_crlc);\n  /* FIXME: is this too slow without read buffering? */\n  SetFilePointer(hFile,mz_header.e_lfarlc,NULL,FILE_BEGIN);\n  for (x=0; x<mz_header.e_crlc; x++) {\n   if (!ReadFile(hFile,&reloc,sizeof(reloc),&len,NULL) || len != sizeof(reloc)) {\n    SetLastError(ERROR_BAD_FORMAT);\n    goto load_error;\n   }\n   *(WORD*)SEGPTR16(load_start,reloc)+=rel_seg;\n  }\n }\n\n  if (!oblk) {\n    init_cs = load_seg+mz_header.e_cs;\n    init_ip = mz_header.e_ip;\n    init_ss = load_seg+mz_header.e_ss;\n    init_sp = mz_header.e_sp;\n    if (old_com){\n      /* .COM files exit with ret. Make sure they jump to psp start (=int 20) */\n      WORD* stack = PTR_REAL_TO_LIN(init_ss, init_sp);\n      *stack = 0;\n    }\n\n    TRACE(\"entry point: %04x:%04x\\n\",init_cs,init_ip);\n  }\n\n  if (alloc && !MZ_InitTask()) {\n    SetLastError(ERROR_GEN_FAILURE);\n    return FALSE;\n  }\n\n  return TRUE;\n\nload_error:\n  DOSVM_psp = oldpsp_seg;\n\n  return FALSE;\n}\n\n/***********************************************************************\n *\t\t__wine_load_dos_exe (KERNEL.@)\n *\n * Called from WineVDM when a new real-mode DOS process is started.\n * Loads DOS program into memory and executes the program.\n */\nvoid __wine_load_dos_exe( LPCSTR filename, LPCSTR cmdline )\n{\n    char dos_cmdtail[126];\n    int  dos_length = 0;\n\n    HANDLE hFile = CreateFileA( filename, GENERIC_READ, FILE_SHARE_READ, \n                                NULL, OPEN_EXISTING, 0, 0 );\n    if (hFile == INVALID_HANDLE_VALUE) return;\n    DOSVM_isdosexe = TRUE;\n    DOSMEM_InitDosMemory();\n\n    if(cmdline && *cmdline)\n    {\n        dos_length = strlen(cmdline);\n        memmove( dos_cmdtail + 1, cmdline, \n                 (dos_length < 125) ? dos_length : 125 );\n\n        /* Non-empty command tail always starts with at least one space. */\n        dos_cmdtail[0] = ' ';\n        dos_length++;\n\n        /*\n         * If command tail is longer than 126 characters,\n         * set tail length to 127 and fill CMDLINE environment variable \n         * with full command line (this includes filename).\n         */\n        if (dos_length > 126)\n        {\n            char *cmd = HeapAlloc( GetProcessHeap(), 0, \n                                   dos_length + strlen(filename) + 4 );\n            char *ptr = cmd;\n\n            if (!cmd)\n                return;\n\n            /*\n             * Append filename. If path includes spaces, quote the path.\n             */\n            if (strchr(filename, ' '))\n            {\n                *ptr++ = '\\\"';\n                strcpy( ptr, filename );\n                ptr += strlen(filename);                   \n                *ptr++ = '\\\"';\n            }\n            else\n            {\n                strcpy( ptr, filename );\n                ptr += strlen(filename);  \n            }\n\n            /*\n             * Append command tail.\n             */\n            if (cmdline[0] != ' ')\n                *ptr++ = ' ';\n            strcpy( ptr, cmdline );\n\n            /*\n             * Set environment variable. This will be passed to\n             * new DOS process.\n             */\n            if (!SetEnvironmentVariableA( \"CMDLINE\", cmd ))\n            {\n                HeapFree(GetProcessHeap(), 0, cmd );\n                return;\n            }\n\n            HeapFree(GetProcessHeap(), 0, cmd );\n            dos_length = 127;\n        }\n    }\n\n    AllocConsole();\n    SetConsoleTitleA(filename);\n\n    if (MZ_DoLoadImage( hFile, filename, NULL, 0 ))\n    {\n        DWORD err = MZ_Launch( dos_cmdtail, dos_length );\n        /* if we get back here it failed */\n        SetLastError( err );\n    }\n}\n\n/***********************************************************************\n *\t\tMZ_Exec\n *\n * this may only be called from existing DOS processes\n */\nBOOL MZ_Exec( CONTEXT *context, LPCSTR filename, BYTE func, LPVOID paramblk )\n{\n  DWORD binType;\n  STARTUPINFOA st;\n  PROCESS_INFORMATION pe;\n  HANDLE hFile;\n\n  BOOL ret = FALSE;\n\n  if(!GetBinaryTypeA(filename, &binType))   /* determine what kind of binary this is */\n  {\n    return FALSE; /* binary is not an executable */\n  }\n\n  /* handle non-dos executables */\n  if(binType != SCS_DOS_BINARY)\n  {\n    if(func == 0) /* load and execute */\n    {\n      LPSTR fullCmdLine;\n      WORD fullCmdLength;\n      LPBYTE psp_start = (LPBYTE)PTR_REAL_TO_LIN(DOSVM_psp, 0);\n      PDB16 *psp = (PDB16 *)psp_start;\n      ExecBlock *blk = paramblk;\n      LPBYTE cmdline = PTR_REAL_TO_LIN(SELECTOROF(blk->cmdline),OFFSETOF(blk->cmdline));\n      LPBYTE envblock = PTR_REAL_TO_LIN(psp->environment, 0);\n      int    cmdLength = cmdline[0];\n\n      /*\n       * If cmdLength is 127, command tail is truncated and environment \n       * variable CMDLINE should contain full command line \n       * (this includes filename).\n       */\n      if (cmdLength == 127)\n      {\n          FIXME( \"CMDLINE argument passing is unimplemented.\\n\" );\n          cmdLength = 126; /* FIXME */\n      }\n\n      fullCmdLength = (strlen(filename) + 1) + cmdLength + 1; /* filename + space + cmdline + terminating null character */\n\n      fullCmdLine = HeapAlloc(GetProcessHeap(), 0, fullCmdLength);\n      if(!fullCmdLine) return FALSE; /* return false on memory alloc failure */\n\n      /* build the full command line from the executable file and the command line being passed in */\n      snprintf(fullCmdLine, fullCmdLength, \"%s \", filename); /* start off with the executable filename and a space */\n      memcpy(fullCmdLine + strlen(fullCmdLine), cmdline + 1, cmdLength); /* append cmdline onto the end */\n      fullCmdLine[fullCmdLength - 1] = 0; /* null terminate string */\n\n      ZeroMemory (&st, sizeof(STARTUPINFOA));\n      st.cb = sizeof(STARTUPINFOA);\n      ret = CreateProcessA (NULL, fullCmdLine, NULL, NULL, TRUE, 0, envblock, NULL, &st, &pe);\n\n      /* wait for the app to finish and clean up PROCESS_INFORMATION handles */\n      if(ret)\n      {\n        WaitForSingleObject(pe.hProcess, INFINITE);  /* wait here until the child process is complete */\n        CloseHandle(pe.hProcess);\n        CloseHandle(pe.hThread);\n      }\n\n      HeapFree(GetProcessHeap(), 0, fullCmdLine);  /* free the memory we allocated */\n    }\n    else\n    {\n      FIXME(\"EXEC type of %d not implemented for non-dos executables\\n\", func);\n      ret = FALSE;\n    }\n\n    return ret;\n  } /* if(binType != SCS_DOS_BINARY) */\n\n\n  /* handle dos executables */\n\n  hFile = CreateFileA( filename, GENERIC_READ, FILE_SHARE_READ,\n\t\t\t     NULL, OPEN_EXISTING, 0, 0);\n  if (hFile == INVALID_HANDLE_VALUE) return FALSE;\n\n  switch (func) {\n  case 0: /* load and execute */\n  case 1: /* load but don't execute */\n    {\n      /* save current process's return SS:SP now */\n      LPBYTE psp_start = (LPBYTE)PTR_REAL_TO_LIN(DOSVM_psp, 0);\n      PDB16 *psp = (PDB16 *)psp_start;\n      psp->saveStack = (DWORD)MAKESEGPTR(context->SegSs, LOWORD(context->Esp));\n    }\n    ret = MZ_DoLoadImage( hFile, filename, NULL, ((ExecBlock *)paramblk)->env_seg );\n    if (ret) {\n      /* MZ_LoadImage created a new PSP and loaded new values into it,\n       * let's work on the new values now */\n      LPBYTE psp_start = (LPBYTE)PTR_REAL_TO_LIN(DOSVM_psp, 0);\n      ExecBlock *blk = paramblk;\n      LPBYTE cmdline = PTR_REAL_TO_LIN(SELECTOROF(blk->cmdline),OFFSETOF(blk->cmdline));\n\n      /* First character contains the length of the command line. */\n      MZ_FillPSP(psp_start, (LPSTR)cmdline + 1, cmdline[0]);\n\n      /* the lame MS-DOS engineers decided that the return address should be in int22 */\n      DOSVM_SetRMHandler(0x22, (FARPROC16)MAKESEGPTR(context->SegCs, LOWORD(context->Eip)));\n      if (func) {\n\t/* don't execute, just return startup state */\n        /*\n         * From Ralph Brown:\n         *  For function 01h, the AX value to be passed to the child program \n         *  is put on top of the child's stack\n         */\n        LPBYTE stack;\n        init_sp -= 2;\n        stack = CTX_SEG_OFF_TO_LIN(context, init_ss, init_sp);\n        /* FIXME: push AX correctly */\n        stack[0] = 0x00;    /* push AL */\n        stack[1] = 0x00;    /* push AH */\n\t\n\tblk->init_cs = init_cs;\n\tblk->init_ip = init_ip;\n\tblk->init_ss = init_ss;\n\tblk->init_sp = init_sp;\n      } else {\n\t/* execute by making us return to new process */\n\tcontext->SegCs = init_cs;\n\tcontext->Eip   = init_ip;\n\tcontext->SegSs = init_ss;\n\tcontext->Esp   = init_sp;\n\tcontext->SegDs = DOSVM_psp;\n\tcontext->SegEs = DOSVM_psp;\n\tcontext->Eax   = 0;\n      }\n    }\n    break;\n  case 3: /* load overlay */\n    {\n      OverlayBlock *blk = paramblk;\n      ret = MZ_DoLoadImage( hFile, filename, blk, 0);\n    }\n    break;\n  default:\n    FIXME(\"EXEC load type %d not implemented\\n\", func);\n    SetLastError(ERROR_INVALID_FUNCTION);\n    break;\n  }\n  CloseHandle(hFile);\n  return ret;\n}\n\n/***********************************************************************\n *\t\tMZ_AllocDPMITask\n */\nvoid MZ_AllocDPMITask( void )\n{\n  MZ_InitMemory();\n  MZ_InitTask();\n}\n\n/***********************************************************************\n *\t\tMZ_RunInThread\n */\nvoid MZ_RunInThread( PAPCFUNC proc, ULONG_PTR arg )\n{\n  if (loop_thread) {\n    DOS_SPC spc;\n    HANDLE event;\n\n    spc.proc = proc;\n    spc.arg = arg;\n    event = CreateEventW(NULL, TRUE, FALSE, NULL);\n    PostThreadMessageA(loop_tid, WM_USER + 1, (WPARAM)event, (LPARAM)&spc);\n    WaitForSingleObject(event, INFINITE);\n    CloseHandle(event);\n  } else\n    proc(arg);\n}\nvoid *dosvm_vm86_teb_info;\nstatic DWORD WINAPI MZ_DOSVM( LPVOID lpExtra )\n{\n  CONTEXT context;\n  INT ret;\n\n  dosvm_pid = getpid();\n\n  memset( &context, 0, sizeof(context) );\n  context.SegCs  = init_cs;\n  context.Eip    = init_ip;\n  context.SegSs  = init_ss;\n  context.Esp    = init_sp;\n  context.SegDs  = DOSVM_psp;\n  context.SegEs  = DOSVM_psp;\n  context.EFlags = V86_FLAG | VIF_MASK;\n  DOSVM_SetTimer(0x10000);\n  dosvm_vm86_teb_info = get_vm86_teb_info();\n  ret = DOSVM_Enter( &context );\n  if (ret == -1) ret = GetLastError();\n  dosvm_pid = 0;\n  return ret;\n}\n\nstatic BOOL MZ_InitTask(void)\n{\n  if (!DuplicateHandle(GetCurrentProcess(), GetCurrentThread(),\n                       GetCurrentProcess(), &loop_thread,\n                       0, FALSE, DUPLICATE_SAME_ACCESS))\n    return FALSE;\n  dosvm_thread = CreateThread(NULL, 0, MZ_DOSVM, NULL, CREATE_SUSPENDED, &dosvm_tid);\n  if (!dosvm_thread) {\n    CloseHandle(loop_thread);\n    loop_thread = 0;\n    return FALSE;\n  }\n  loop_tid = GetCurrentThreadId();\n  return TRUE;\n}\n\nstatic DWORD MZ_Launch( LPCSTR cmdtail, int length )\n{\n  TDB *pTask = GlobalLock16( GetCurrentTask() );\n  BYTE *psp_start = PTR_REAL_TO_LIN( DOSVM_psp, 0 );\n  DWORD rv;\n  SYSLEVEL *lock;\n  MSG msg;\n\n  MZ_FillPSP(psp_start, cmdtail, length);\n  pTask->flags |= TDBF_WINOLDAP;\n\n  /* DTA is set to PSP:0080h when a program is started. */\n  pTask->dta = MAKESEGPTR( DOSVM_psp, 0x80 );\n\n  GetpWin16Lock( &lock );\n  _LeaveSysLevel( lock );\n\n  /* force the message queue to be created */\n  PeekMessageW(&msg, NULL, WM_USER + 1, WM_USER + 1, PM_NOREMOVE);\n\n  ResumeThread(dosvm_thread);\n  rv = DOSVM_Loop(dosvm_thread);\n\n  CloseHandle(dosvm_thread);\n  dosvm_thread = 0; dosvm_tid = 0;\n  CloseHandle(loop_thread);\n  loop_thread = 0; loop_tid = 0;\n  if (rv) return rv;\n\n  VGA_Clean();\n  ExitProcess(0);\n}\n\n/***********************************************************************\n *\t\tMZ_Exit\n */\nvoid MZ_Exit( CONTEXT *context, BOOL cs_psp, WORD retval )\n{\n  if (DOSVM_psp) {\n    WORD psp_seg = cs_psp ? context->SegCs : DOSVM_psp;\n    LPBYTE psp_start = (LPBYTE)PTR_REAL_TO_LIN(psp_seg, 0);\n    PDB16 *psp = (PDB16 *)psp_start;\n    WORD parpsp = psp->parentPSP; /* check for parent DOS process */\n    if (parpsp) {\n      /* retrieve parent's return address */\n      FARPROC16 retaddr = DOSVM_GetRMHandler(0x22);\n      /* restore interrupts */\n      DOSVM_SetRMHandler(0x22, psp->savedint22);\n      DOSVM_SetRMHandler(0x23, psp->savedint23);\n      DOSVM_SetRMHandler(0x24, psp->savedint24);\n      /* FIXME: deallocate file handles etc */\n      /* free process's associated memory\n       * FIXME: walk memory and deallocate all blocks owned by process */\n      DOSMEM_FreeBlock( PTR_REAL_TO_LIN(psp->environment,0) );\n      DOSMEM_FreeBlock( PTR_REAL_TO_LIN(DOSVM_psp,0) );\n      /* switch to parent's PSP */\n      DOSVM_psp = parpsp;\n      psp_start = (LPBYTE)((DWORD)PTR_REAL_TO_LIN(parpsp, 0));\n      psp = (PDB16 *)psp_start;\n      /* now return to parent */\n      DOSVM_retval = retval;\n      context->SegCs = SELECTOROF(retaddr);\n      context->Eip   = OFFSETOF(retaddr);\n      context->SegSs = SELECTOROF(psp->saveStack);\n      context->Esp   = OFFSETOF(psp->saveStack);\n      return;\n    } else\n      TRACE(\"killing DOS task\\n\");\n  }\n  DOSVM_Exit( retval );\n}\n\n\n/***********************************************************************\n *\t\tMZ_Current\n */\nBOOL MZ_Current( void )\n{\n  return (dosvm_pid != 0); /* FIXME: do a better check */\n}\n\n#else /* !MZ_SUPPORTED */\n\n/***********************************************************************\n *\t\t__wine_load_dos_exe (KERNEL.@)\n */\nvoid __wine_load_dos_exe( LPCSTR filename, LPCSTR cmdline )\n{\n    SetLastError( ERROR_NOT_SUPPORTED );\n}\n\n/***********************************************************************\n *\t\tMZ_Exec\n */\nBOOL MZ_Exec( CONTEXT *context, LPCSTR filename, BYTE func, LPVOID paramblk )\n{\n  /* can't happen */\n  SetLastError(ERROR_BAD_FORMAT);\n  return FALSE;\n}\n\n/***********************************************************************\n *\t\tMZ_AllocDPMITask\n */\nvoid MZ_AllocDPMITask( void )\n{\n    FIXME(\"Actual real-mode calls not supported on this platform!\\n\");\n}\n\n/***********************************************************************\n *\t\tMZ_RunInThread\n */\nvoid MZ_RunInThread( PAPCFUNC proc, ULONG_PTR arg )\n{\n    proc(arg);\n}\n\n/***********************************************************************\n *\t\tMZ_Exit\n */\nvoid MZ_Exit( CONTEXT *context, BOOL cs_psp, WORD retval )\n{\n  DOSVM_Exit( retval );\n}\n\n/***********************************************************************\n *\t\tMZ_Current\n */\nBOOL MZ_Current( void )\n{\n    return FALSE;\n}\n\n#endif /* !MZ_SUPPORTED */\n"
  },
  {
    "path": "krnl386/dosexe.h",
    "content": "/*\n * DOS EXE loader\n *\n * Copyright 1998 Ove Kåven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DOSEXE_H\n#define __WINE_DOSEXE_H\n\n#include <stdarg.h>\n#include <sys/types.h>\n\n#include \"windef.h\"\n#include \"wine/library.h\"\n#include \"wine/windef16.h\"\n#include \"winbase.h\"\n#include \"winnt.h\"     /* for PCONTEXT */\n#include \"wincon.h\"    /* for MOUSE_EVENT_RECORD */\n\n#ifndef DECLSPEC_HIDDEN\n#define DECLSPEC_HIDDEN\n#endif\n\n#define MAX_DOS_DRIVES  26\n\nstruct _DOSEVENT;\n\ntypedef struct {\n  PAPCFUNC proc;\n  ULONG_PTR arg;\n} DOS_SPC;\ntypedef int pid_t;\nextern pid_t dosvm_pid DECLSPEC_HIDDEN;\n\n/* amount of space reserved for relay stack */\n#define DOSVM_RELAY_DATA_SIZE 4096\n\n/* various real-mode code stubs */\nstruct DPMI_segments\n{\n    WORD wrap_seg;\n    WORD xms_seg;\n    WORD dpmi_seg;\n    WORD dpmi_sel;\n    WORD int48_sel;\n    WORD int16_sel;\n    WORD relay_code_sel;\n    WORD relay_data_sel;\n};\n\n/* 48-bit segmented pointers for DOS DPMI32 */\ntypedef struct {\n  WORD  selector;\n  DWORD offset;\n} SEGPTR48, FARPROC48;\n\ntypedef void (*DOSRELAY)(CONTEXT*,void*);\ntypedef void (WINAPI *RMCBPROC)(CONTEXT*);\ntypedef void (WINAPI *INTPROC)(CONTEXT*);\ntypedef void (WINAPI *OUTPROC)(int port, int size, DWORD value);\ntypedef DWORD (WINAPI *INPROC)(int port, int size);\n\n#define DOS_PRIORITY_REALTIME 0  /* IRQ0 */\n#define DOS_PRIORITY_KEYBOARD 1  /* IRQ1 */\n#define DOS_PRIORITY_VGA      2  /* IRQ9 */\n#define DOS_PRIORITY_MOUSE    5  /* IRQ12 */\n#define DOS_PRIORITY_SERIAL   10 /* IRQ4 */\n\nextern WORD DOSVM_psp DECLSPEC_HIDDEN;     /* psp of current DOS task */\nextern WORD DOSVM_retval DECLSPEC_HIDDEN;  /* return value of previous DOS task */\nextern struct DPMI_segments *DOSVM_dpmi_segments DECLSPEC_HIDDEN;\n\n#if defined(linux) && defined(__i386__) && defined(HAVE_SYS_VM86_H)\n# define MZ_SUPPORTED\n#endif /* linux-i386 */\n\n/*\n * Declare some CONTEXT.EFlags bits.\n * IF_MASK is only pushed into real mode stack.\n */\n#define V86_FLAG 0x00020000\n#define TF_MASK  0x00000100\n#define IF_MASK  0x00000200\n#define VIF_MASK 0x00080000\n#define VIP_MASK 0x00100000\n\n#define ADD_LOWORD(dw,val)  ((dw) = ((dw) & 0xffff0000) | LOWORD((DWORD)(dw)+(val)))\n\n#define PTR_REAL_TO_LIN(seg,off) ((void*)(((unsigned int)(seg) << 4) + LOWORD(off) + (size_t)DOSMEM_dosmem))\n\n/* NOTE: Interrupts might get called from four modes: real mode, 16-bit,\n *       32-bit segmented (DPMI32) and 32-bit linear (via DeviceIoControl).\n *       For automatic conversion of pointer\n *       parameters, interrupt handlers should use CTX_SEG_OFF_TO_LIN with\n *       the contents of a segment register as second and the contents of\n *       a *32-bit* general register as third parameter, e.g.\n *          CTX_SEG_OFF_TO_LIN( context, DS_reg(context), EDX_reg(context) )\n *       This will generate a linear pointer in all three cases:\n *         Real-Mode:   Seg*16 + LOWORD(Offset)\n *         16-bit:      convert (Seg, LOWORD(Offset)) to linear\n *         32-bit segmented: convert (Seg, Offset) to linear\n *         32-bit linear:    use Offset as linear address (DeviceIoControl!)\n *\n *       Real-mode is recognized by checking the V86 bit in the flags register,\n *       32-bit linear mode is recognized by checking whether 'seg' is\n *       a system selector (0 counts also as 32-bit segment) and 32-bit\n *       segmented mode is recognized by checking whether 'seg' is 32-bit\n *       selector which is neither system selector nor zero.\n */\n#define CTX_SEG_OFF_TO_LIN(context,seg,off) \\\n    (ISV86(context) ? PTR_REAL_TO_LIN((seg),(off)) : wine_ldt_get_ptr((seg),(off)))\n\n#define INT_BARF(context,num) \\\n    ERR( \"int%x: unknown/not implemented parameters:\\n\" \\\n                     \"int%x: AX %04x, BX %04x, CX %04x, DX %04x, \" \\\n                     \"SI %04x, DI %04x, DS %04x, ES %04x\\n\", \\\n             (num), (num), LOWORD((context)->Eax), LOWORD((context)->Ebx), \\\n             LOWORD((context)->Ecx), LOWORD((context)->Edx), LOWORD((context)->Esi), \\\n             LOWORD((context)->Edi), (WORD)(context)->SegDs, (WORD)(context)->SegEs )\n\n/* pushing on stack in 16 bit needs segment wrap around */\n#define PUSH_WORD16(context,val) \\\n    *((WORD*)CTX_SEG_OFF_TO_LIN((context), \\\n        (context)->SegSs, ADD_LOWORD( context->Esp, -2 ) )) = (val)\n\n/* Macros for easier access to i386 context registers */\n\n#define AX_reg(context)      ((WORD)(context)->Eax)\n#define BX_reg(context)      ((WORD)(context)->Ebx)\n#define CX_reg(context)      ((WORD)(context)->Ecx)\n#define DX_reg(context)      ((WORD)(context)->Edx)\n#define SI_reg(context)      ((WORD)(context)->Esi)\n#define DI_reg(context)      ((WORD)(context)->Edi)\n\n#define AL_reg(context)      ((BYTE)(context)->Eax)\n#define AH_reg(context)      ((BYTE)((context)->Eax >> 8))\n#define BL_reg(context)      ((BYTE)(context)->Ebx)\n#define BH_reg(context)      ((BYTE)((context)->Ebx >> 8))\n#define CL_reg(context)      ((BYTE)(context)->Ecx)\n#define CH_reg(context)      ((BYTE)((context)->Ecx >> 8))\n#define DL_reg(context)      ((BYTE)(context)->Edx)\n#define DH_reg(context)      ((BYTE)((context)->Edx >> 8))\n\n#define SET_CFLAG(context)   ((context)->EFlags |= 0x0001)\n#define RESET_CFLAG(context) ((context)->EFlags &= ~0x0001)\n#define SET_ZFLAG(context)   ((context)->EFlags |= 0x0040)\n#define RESET_ZFLAG(context) ((context)->EFlags &= ~0x0040)\n#define ISV86(context)       ((context)->EFlags & 0x00020000)\n\n#define SET_AX(context,val)  ((void)((context)->Eax = ((context)->Eax & ~0xffff) | (WORD)(val)))\n#define SET_BX(context,val)  ((void)((context)->Ebx = ((context)->Ebx & ~0xffff) | (WORD)(val)))\n#define SET_CX(context,val)  ((void)((context)->Ecx = ((context)->Ecx & ~0xffff) | (WORD)(val)))\n#define SET_DX(context,val)  ((void)((context)->Edx = ((context)->Edx & ~0xffff) | (WORD)(val)))\n#define SET_SI(context,val)  ((void)((context)->Esi = ((context)->Esi & ~0xffff) | (WORD)(val)))\n#define SET_DI(context,val)  ((void)((context)->Edi = ((context)->Edi & ~0xffff) | (WORD)(val)))\n\n#define SET_AL(context,val)  ((void)((context)->Eax = ((context)->Eax & ~0xff) | (BYTE)(val)))\n#define SET_BL(context,val)  ((void)((context)->Ebx = ((context)->Ebx & ~0xff) | (BYTE)(val)))\n#define SET_CL(context,val)  ((void)((context)->Ecx = ((context)->Ecx & ~0xff) | (BYTE)(val)))\n#define SET_DL(context,val)  ((void)((context)->Edx = ((context)->Edx & ~0xff) | (BYTE)(val)))\n\n#define SET_AH(context,val)  ((void)((context)->Eax = ((context)->Eax & ~0xff00) | (((BYTE)(val)) << 8)))\n#define SET_BH(context,val)  ((void)((context)->Ebx = ((context)->Ebx & ~0xff00) | (((BYTE)(val)) << 8)))\n#define SET_CH(context,val)  ((void)((context)->Ecx = ((context)->Ecx & ~0xff00) | (((BYTE)(val)) << 8)))\n#define SET_DH(context,val)  ((void)((context)->Edx = ((context)->Edx & ~0xff00) | (((BYTE)(val)) << 8)))\n\n#include <pshpack1.h>\n\ntypedef struct\n{\n    WORD  Com1Addr;                  /* 00: COM1 I/O address */\n    WORD  Com2Addr;                  /* 02: COM2 I/O address */\n    WORD  Com3Addr;                  /* 04: COM3 I/O address */\n    WORD  Com4Addr;                  /* 06: COM4 I/O address */\n    WORD  Lpt1Addr;                  /* 08: LPT1 I/O address */\n    WORD  Lpt2Addr;                  /* 0a: LPT2 I/O address */\n    WORD  Lpt3Addr;                  /* 0c: LPT3 I/O address */\n    WORD  Lpt4Addr;                  /* 0e: LPT4 I/O address */\n    WORD  InstalledHardware;         /* 10: Installed hardware flags */\n    BYTE  POSTstatus;                /* 12: Power-On Self Test status */\n    WORD  MemSize;                   /* 13: Base memory size in Kb */\n    WORD  unused1;                   /* 15: Manufacturing test scratch pad */\n    BYTE  KbdFlags1;                 /* 17: Keyboard flags 1 */\n    BYTE  KbdFlags2;                 /* 18: Keyboard flags 2 */\n    BYTE  unused2;                   /* 19: Keyboard driver workspace */\n    WORD  NextKbdCharPtr;            /* 1a: Next character in kbd buffer */\n    WORD  FirstKbdCharPtr;           /* 1c: First character in kbd buffer */\n    WORD  KbdBuffer[16];             /* 1e: Keyboard buffer */\n    BYTE  DisketteStatus1;           /* 3e: Diskette recalibrate status */\n    BYTE  DisketteStatus2;           /* 3f: Diskette motor status */\n    BYTE  DisketteStatus3;           /* 40: Diskette motor timeout */\n    BYTE  DisketteStatus4;           /* 41: Diskette last operation status */\n    BYTE  DiskStatus[7];             /* 42: Disk status/command bytes */\n    BYTE  VideoMode;                 /* 49: Video mode */\n    WORD  VideoColumns;              /* 4a: Number of columns */\n    WORD  VideoPageSize;             /* 4c: Video page size in bytes */\n    WORD  VideoPageStartAddr;        /* 4e: Video page start address */\n    BYTE  VideoCursorPos[16];        /* 50: Cursor position for 8 pages, column/row order */\n    WORD  VideoCursorType;           /* 60: Video cursor type */\n    BYTE  VideoCurPage;              /* 62: Video current page */\n    WORD  VideoCtrlAddr;             /* 63: Video controller address */\n    BYTE  VideoReg1;                 /* 65: Video mode select register */\n    BYTE  VideoReg2;                 /* 66: Video CGA palette register */\n    DWORD ResetEntry;                /* 67: Warm reset entry point */\n    BYTE  LastIRQ;                   /* 6b: Last unexpected interrupt */\n    DWORD Ticks;                     /* 6c: Ticks since midnight */\n    BYTE  TicksOverflow;             /* 70: Timer overflow if past midnight */\n    BYTE  CtrlBreakFlag;             /* 71: Ctrl-Break flag */\n    WORD  ResetFlag;                 /* 72: POST Reset flag */\n    BYTE  DiskOpStatus;              /* 74: Last hard-disk operation status */\n    BYTE  NbHardDisks;               /* 75: Number of hard disks */\n    BYTE  DiskCtrlByte;              /* 76: Disk control byte */\n    BYTE  DiskIOPort;                /* 77: Disk I/O port offset */\n    BYTE  LptTimeout[4];             /* 78: Timeouts for parallel ports */\n    BYTE  ComTimeout[4];             /* 7c: Timeouts for serial ports */\n    WORD  KbdBufferStart;            /* 80: Keyboard buffer start */\n    WORD  KbdBufferEnd;              /* 82: Keyboard buffer end */\n    BYTE  RowsOnScreenMinus1;        /* 84: EGA only */\n    WORD  BytesPerChar;              /* 85: EGA only */\n    BYTE  ModeOptions;               /* 87: EGA only */\n    BYTE  FeatureBitsSwitches;       /* 88: EGA only */\n    BYTE  VGASettings;               /* 89: VGA misc settings */\n    BYTE  DisplayCombination;        /* 8A: VGA display combinations */\n    BYTE  DiskDataRate;              /* 8B: Last disk data rate selected */\n} BIOSDATA;\n\n#include <poppack.h>\n\n/* Device driver header */\n\n#define NONEXT ((DWORD)-1)\n\n#define ATTR_STDIN     0x0001\n#define ATTR_STDOUT    0x0002\n#define ATTR_NUL       0x0004\n#define ATTR_CLOCK     0x0008\n#define ATTR_FASTCON   0x0010\n#define ATTR_RAW       0x0020\n#define ATTR_NOTEOF    0x0040\n#define ATTR_DEVICE    0x0080\n#define ATTR_REMOVABLE 0x0800\n#define ATTR_NONIBM    0x2000 /* block devices */\n#define ATTR_UNTILBUSY 0x2000 /* char devices */\n#define ATTR_IOCTL     0x4000\n#define ATTR_CHAR      0x8000\n\n#include <pshpack1.h>\n\ntypedef struct\n{\n    DWORD next_dev;\n    WORD  attr;\n    WORD  strategy;\n    WORD  interrupt;\n    char  name[8];\n} DOS_DEVICE_HEADER;\n\n#include <poppack.h>\n\n/* DOS Device requests */\n\n#define CMD_INIT       0\n#define CMD_MEDIACHECK 1 /* block devices */\n#define CMD_BUILDBPB   2 /* block devices */\n#define CMD_INIOCTL    3\n#define CMD_INPUT      4 /* read data */\n#define CMD_SAFEINPUT  5 /* \"non-destructive input no wait\", char devices */\n#define CMD_INSTATUS   6 /* char devices */\n#define CMD_INFLUSH    7 /* char devices */\n#define CMD_OUTPUT     8 /* write data */\n#define CMD_SAFEOUTPUT 9 /* write data with verify */\n#define CMD_OUTSTATUS 10 /* char devices */\n#define CMD_OUTFLUSH  11 /* char devices */\n#define CMD_OUTIOCTL  12\n#define CMD_DEVOPEN   13\n#define CMD_DEVCLOSE  14\n#define CMD_REMOVABLE 15 /* block devices */\n#define CMD_UNTILBUSY 16 /* output until busy */\n\n#define STAT_MASK  0x00FF\n#define STAT_DONE  0x0100\n#define STAT_BUSY  0x0200\n#define STAT_ERROR 0x8000\n\n#include <pshpack1.h>\n\ntypedef struct {\n    BYTE size;          /* length of header + data */\n    BYTE unit;          /* unit (block devices only) */\n    BYTE command;\n    WORD status;\n    BYTE reserved[8];\n} REQUEST_HEADER;\n\ntypedef struct {\n    REQUEST_HEADER hdr;\n    BYTE media;         /* media descriptor from BPB */\n    SEGPTR buffer;\n    WORD count;         /* byte/sector count */\n    WORD sector;        /* starting sector (block devices) */\n    DWORD volume;       /* volume ID (block devices) */\n} REQ_IO;\n\ntypedef struct {\n    REQUEST_HEADER hdr;\n    BYTE data;\n} REQ_SAFEINPUT;\n\n/* WINE device driver thunk from RM */\ntypedef struct {\n    BYTE ljmp1;\n    FARPROC16 strategy;\n    BYTE ljmp2;\n    FARPROC16 interrupt;\n} WINEDEV_THUNK;\n\n#include <poppack.h>\n\n/* Device driver info (used for initialization) */\ntypedef struct\n{\n    char name[8];\n    WORD attr;\n    RMCBPROC strategy;\n    RMCBPROC interrupt;\n} WINEDEV;\n\n/* dosexe.c */\nextern BOOL MZ_Exec( CONTEXT *context, LPCSTR filename, BYTE func, LPVOID paramblk ) DECLSPEC_HIDDEN;\nextern void MZ_Exit( CONTEXT *context, BOOL cs_psp, WORD retval ) DECLSPEC_HIDDEN;\nextern BOOL MZ_Current( void ) DECLSPEC_HIDDEN;\nextern void MZ_AllocDPMITask( void ) DECLSPEC_HIDDEN;\nextern void MZ_RunInThread( PAPCFUNC proc, ULONG_PTR arg ) DECLSPEC_HIDDEN;\nextern BOOL DOSVM_IsWin16(void) DECLSPEC_HIDDEN;\nextern void DOSVM_Exit( WORD retval ) DECLSPEC_HIDDEN;\n\n/* dosvm.c */\nextern void DOSVM_SendQueuedEvents( CONTEXT * ) DECLSPEC_HIDDEN;\nextern void WINAPI DOSVM_AcknowledgeIRQ( CONTEXT * ) DECLSPEC_HIDDEN;\nextern INT DOSVM_Enter( CONTEXT *context ) DECLSPEC_HIDDEN;\nextern void DOSVM_Wait( CONTEXT * ) DECLSPEC_HIDDEN;\nextern DWORD DOSVM_Loop( HANDLE hThread ) DECLSPEC_HIDDEN;\nextern void DOSVM_QueueEvent( INT irq, INT priority, DOSRELAY relay, LPVOID data ) DECLSPEC_HIDDEN;\nextern void DOSVM_PIC_ioport_out( WORD port, BYTE val ) DECLSPEC_HIDDEN;\nextern void DOSVM_SetTimer( UINT ticks ) DECLSPEC_HIDDEN;\nextern LPVOID DOSVM_AllocDataUMB(DWORD, WORD *, WORD *) DECLSPEC_HIDDEN;\nextern void DOSVM_InitSegments(void) DECLSPEC_HIDDEN;\n\n/* devices.c */\nextern void DOSDEV_InstallDOSDevices(void) DECLSPEC_HIDDEN;\nextern void DOSDEV_SetupDevice(const WINEDEV * devinfo,\n                               WORD seg, WORD off_dev, WORD off_thunk) DECLSPEC_HIDDEN;\nextern void DOSDEV_SetSharingRetry(WORD delay, WORD count) DECLSPEC_HIDDEN;\nextern SEGPTR DOSDEV_GetLOL(BOOL v86) DECLSPEC_HIDDEN;\n\n/* dma.c */\nextern int DMA_Transfer(int channel,int reqlength,void* buffer) DECLSPEC_HIDDEN;\nextern void DMA_ioport_out( WORD port, BYTE val ) DECLSPEC_HIDDEN;\nextern BYTE DMA_ioport_in( WORD port ) DECLSPEC_HIDDEN;\n\n/* dosaspi.c */\nextern void DOSVM_ASPIHandler(CONTEXT*) DECLSPEC_HIDDEN;\n\n/* dosmem.c */\nextern BIOSDATA *DOSVM_BiosData( void ) DECLSPEC_HIDDEN;\n__declspec(dllexport) extern void DOSVM_start_bios_timer(void) DECLSPEC_HIDDEN;\n\n/* fpu.c */\nextern void WINAPI DOSVM_Int34Handler(CONTEXT*) DECLSPEC_HIDDEN;\nextern void WINAPI DOSVM_Int35Handler(CONTEXT*) DECLSPEC_HIDDEN;\nextern void WINAPI DOSVM_Int36Handler(CONTEXT*) DECLSPEC_HIDDEN;\nextern void WINAPI DOSVM_Int37Handler(CONTEXT*) DECLSPEC_HIDDEN;\nextern void WINAPI DOSVM_Int38Handler(CONTEXT*) DECLSPEC_HIDDEN;\nextern void WINAPI DOSVM_Int39Handler(CONTEXT*) DECLSPEC_HIDDEN;\nextern void WINAPI DOSVM_Int3aHandler(CONTEXT*) DECLSPEC_HIDDEN;\nextern void WINAPI DOSVM_Int3bHandler(CONTEXT*) DECLSPEC_HIDDEN;\nextern void WINAPI DOSVM_Int3cHandler(CONTEXT*) DECLSPEC_HIDDEN;\nextern void WINAPI DOSVM_Int3dHandler(CONTEXT*) DECLSPEC_HIDDEN;\nextern void WINAPI DOSVM_Int3eHandler(CONTEXT*) DECLSPEC_HIDDEN;\n\n/* int09.c */\nextern void WINAPI DOSVM_Int09Handler(CONTEXT*) DECLSPEC_HIDDEN;\nextern void DOSVM_Int09SendScan(BYTE scan,BYTE ascii) DECLSPEC_HIDDEN;\nextern BYTE DOSVM_Int09ReadScan(BYTE*ascii) DECLSPEC_HIDDEN;\n\n/* int10.c */\nextern void WINAPI DOSVM_Int10Handler(CONTEXT*) DECLSPEC_HIDDEN;\nextern void DOSVM_PutChar(BYTE ascii) DECLSPEC_HIDDEN;\n\n/* int13.c */\nextern void WINAPI DOSVM_Int13Handler(CONTEXT*) DECLSPEC_HIDDEN;\n\n/* int15.c */\nextern void WINAPI DOSVM_Int15Handler(CONTEXT*) DECLSPEC_HIDDEN;\n\n/* int16.c */\nextern void WINAPI DOSVM_Int16Handler(CONTEXT*) DECLSPEC_HIDDEN;\nextern BOOL DOSVM_Int16ReadChar( BYTE *, BYTE *, CONTEXT * ) DECLSPEC_HIDDEN;\nextern BOOL DOSVM_Int16AddChar(BYTE ascii, BYTE scan) DECLSPEC_HIDDEN;\n\n/* int21.c */\nextern void WINAPI DOSVM_Int21Handler(CONTEXT*) DECLSPEC_HIDDEN;\n\n/* int25.c */\nBOOL DOSVM_RawRead( BYTE, DWORD, DWORD, BYTE *, BOOL ) DECLSPEC_HIDDEN;\nvoid WINAPI DOSVM_Int25Handler( CONTEXT * ) DECLSPEC_HIDDEN;\n\n/* int26.c */\nBOOL DOSVM_RawWrite( BYTE, DWORD, DWORD, BYTE *, BOOL ) DECLSPEC_HIDDEN;\nvoid WINAPI DOSVM_Int26Handler( CONTEXT * ) DECLSPEC_HIDDEN;\n\n/* int2f.c */\nextern void WINAPI DOSVM_Int2fHandler(CONTEXT*) DECLSPEC_HIDDEN;\nextern void MSCDEX_InstallCDROM(void) DECLSPEC_HIDDEN;\n\n/* int31.c */\nextern void WINAPI DOSVM_Int31Handler(CONTEXT*) DECLSPEC_HIDDEN;\nextern void WINAPI DOSVM_RawModeSwitchHandler(CONTEXT*) DECLSPEC_HIDDEN;\nextern BOOL DOSVM_IsDos32(void) DECLSPEC_HIDDEN;\nextern FARPROC16 DPMI_AllocInternalRMCB(RMCBPROC) DECLSPEC_HIDDEN;\nextern int DPMI_CallRMProc(CONTEXT*,LPWORD,int,int) DECLSPEC_HIDDEN;\nextern BOOL DOSVM_CheckWrappers(CONTEXT*) DECLSPEC_HIDDEN;\n\n/* int33.c */\nextern void WINAPI DOSVM_Int33Handler(CONTEXT*) DECLSPEC_HIDDEN;\nextern void DOSVM_Int33Message(UINT,WPARAM,LPARAM) DECLSPEC_HIDDEN;\nextern void DOSVM_Int33Console(MOUSE_EVENT_RECORD*) DECLSPEC_HIDDEN;\n\n/* int67.c */\nextern void WINAPI DOSVM_Int67Handler(CONTEXT*) DECLSPEC_HIDDEN;\nextern void EMS_Ioctl_Handler(CONTEXT*) DECLSPEC_HIDDEN;\n\n/* interrupts.c */\nextern void        __wine_call_int_handler( CONTEXT *, BYTE ) DECLSPEC_HIDDEN;\nextern void        DOSVM_CallBuiltinHandler( CONTEXT *, BYTE ) DECLSPEC_HIDDEN;\nextern BOOL        DOSVM_EmulateInterruptPM( CONTEXT *, BYTE ) DECLSPEC_HIDDEN;\nextern BOOL        DOSVM_EmulateInterruptRM( CONTEXT *, BYTE ) DECLSPEC_HIDDEN;\nextern FARPROC16   DOSVM_GetPMHandler16( BYTE ) DECLSPEC_HIDDEN;\nextern FARPROC48   DOSVM_GetPMHandler48( BYTE ) DECLSPEC_HIDDEN;\nextern FARPROC16   DOSVM_GetRMHandler( BYTE ) DECLSPEC_HIDDEN;\nextern void        DOSVM_HardwareInterruptPM( CONTEXT *, BYTE ) DECLSPEC_HIDDEN;\nextern void        DOSVM_HardwareInterruptRM( CONTEXT *, BYTE ) DECLSPEC_HIDDEN;\nextern void        DOSVM_SetPMHandler16( BYTE, FARPROC16 ) DECLSPEC_HIDDEN;\nextern void        DOSVM_SetPMHandler48( BYTE, FARPROC48 ) DECLSPEC_HIDDEN;\nextern void        DOSVM_SetRMHandler( BYTE, FARPROC16 ) DECLSPEC_HIDDEN;\n\n/* ioports.c */\nextern DWORD DOSVM_inport( int port, int size, CONTEXT *ctx ) DECLSPEC_HIDDEN;\nextern void DOSVM_outport( int port, int size, DWORD value, CONTEXT *ctx ) DECLSPEC_HIDDEN;\nextern void DOSVM_setportcb(OUTPROC outproc, INPROC inproc, int port, OUTPROC *oldout, INPROC* oldin) DECLSPEC_HIDDEN;\n\n/* relay.c */\nvoid DOSVM_RelayHandler( CONTEXT * ) DECLSPEC_HIDDEN;\nvoid DOSVM_BuildCallFrame( CONTEXT *, DOSRELAY, LPVOID ) DECLSPEC_HIDDEN;\n\n/* soundblaster.c */\nextern void SB_ioport_out( WORD port, BYTE val ) DECLSPEC_HIDDEN;\nextern BYTE SB_ioport_in( WORD port ) DECLSPEC_HIDDEN;\n\n/* timer.c */\nextern void WINAPI DOSVM_Int08Handler(CONTEXT*) DECLSPEC_HIDDEN;\n\nextern char *DOSMEM_dosmem;\n\nextern void *dosvm_vm86_teb_info;\n\n\n#endif /* __WINE_DOSEXE_H */\n"
  },
  {
    "path": "krnl386/dosmem.c",
    "content": "/*\n * DOS memory emulation\n *\n * Copyright 1995 Alexandre Julliard\n * Copyright 1996 Marcus Meissner\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <signal.h>\n#include <stdarg.h>\n#include <stdlib.h>\n#include <string.h>\n#include <sys/types.h>\n#ifdef HAVE_SYS_MMAN_H\n# include <sys/mman.h>\n#endif\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"excpt.h\"\n#include \"winternl.h\"\n#include \"wine/winbase16.h\"\n\n#include \"kernel16_private.h\"\n#include \"dosexe.h\"\n#include \"wine/debug.h\"\n#include \"windows/wownt32.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(dosmem);\nWINE_DECLARE_DEBUG_CHANNEL(selector);\n\nWORD DOSMEM_0000H;        /* segment at 0:0 */\nWORD DOSMEM_BiosDataSeg;  /* BIOS data segment at 0x40:0 */\nWORD DOSMEM_BiosSysSeg;   /* BIOS ROM segment at 0xf000:0 */\n\n/* DOS memory highest address (including HMA) */\n#define DOSMEM_SIZE             0x110000\n#define DOSMEM_64KB             0x10000\n\n/*\n * Memory Control Block (MCB) definition\n * FIXME: implement Allocation Strategy\n */\n\n#define MCB_DUMP(mc) \\\n    TRACE (\"MCB_DUMP base=%p type=%02xh psp=%04xh size=%04xh\\n\", mc, mc->type, mc->psp , mc->size )\n\n#define MCB_NEXT(mc) \\\n    (MCB*) ((mc->type==MCB_TYPE_LAST) ? NULL : (char*)(mc) + ((mc->size + 1) << 4) )\n\n/* FIXME: should we check more? */\n#define MCB_VALID(mc) \\\n    ((mc->type==MCB_TYPE_NORMAL) || (mc->type==MCB_TYPE_LAST))\n\n\n#define MCB_TYPE_NORMAL    0x4d\n#define MCB_TYPE_LAST      0x5a\n\n#define MCB_PSP_DOS        0x0060\n#define MCB_PSP_FREE       0\n\n#include \"pshpack1.h\"\ntypedef struct {\n    BYTE type;\n    WORD psp;     /* segment of owner psp */\n    WORD size;    /* in paragraphs */\n    BYTE pad[3];\n    BYTE name[8];\n} MCB;\n#include \"poppack.h\"\n\n/*\n#define __DOSMEM_DEBUG__\n */\n\n#define VM_STUB(x) (0x90CF00CD|(x<<8)) /* INT x; IRET; NOP */\n#define VM_STUB_SEGMENT 0xf000         /* BIOS segment */\n\n/* FIXME: this should be moved to the LOL */\nstatic MCB* DOSMEM_root_block;\n\n/* when looking at DOS and real mode memory, we activate in three different\n * modes, depending the situation.\n * 1/ By default (protected mode), the first MB of memory (actually 0x110000,\n *    when you also look at the HMA part) is always reserved, whatever you do.\n *    We allocated some PM selectors to this memory, even if this area is not\n *    committed at startup\n * 2/ if a program tries to use the memory through the selectors, we actually\n *    commit this memory, made of: BIOS segment, but also some system \n *    information, usually low in memory that we map for the circumstance also\n *    in the BIOS segment, so that we keep the low memory protected (for NULL\n *    pointer deref catching for example). In this case, we're still in PM\n *    mode, accessing part of the \"physical\" real mode memory. In fact, we don't\n *    map all the first meg, we keep 64k uncommitted to still catch NULL \n *    pointers dereference\n * 3/ if the process enters the real mode, then we (also) commit the full first\n *    MB of memory (and also initialize the DOS structures in it).\n */\n\n/* DOS memory base (linear in process address space) */\n/*static*/ char *DOSMEM_dosmem;\nstatic char *DOSMEM_sysmem;\n/* number of bytes protected from _dosmem. 0 when DOS memory is initialized, \n * 64k otherwise to trap NULL pointers deref */\nstatic DWORD DOSMEM_protect;\n\nstatic LONG WINAPI dosmem_handler(EXCEPTION_POINTERS* except);\nstatic void *vectored_handler;\n\n/***********************************************************************\n *           DOSMEM_FillIsrTable\n *\n * Fill the interrupt table with fake BIOS calls to BIOSSEG (0xf000).\n *\n * NOTES:\n * Linux normally only traps INTs performed from or destined to BIOSSEG\n * for us to handle, if the int_revectored table is empty. Filling the\n * interrupt table with calls to INT stubs in BIOSSEG allows DOS programs\n * to hook interrupts, as well as use their familiar retf tricks to call\n * them, AND let Wine handle any unhooked interrupts transparently.\n */\nstatic void DOSMEM_FillIsrTable(void)\n{\n    SEGPTR *isr = (SEGPTR*)DOSMEM_sysmem;\n    int x;\n\n    for (x=0; x<256; x++) isr[x]=MAKESEGPTR(VM_STUB_SEGMENT,x*4);\n}\n\nstatic void DOSMEM_MakeIsrStubs(void)\n{\n    DWORD *stub = (DWORD*)(DOSMEM_dosmem + (VM_STUB_SEGMENT << 4));\n    int x;\n\n    for (x=0; x<256; x++) stub[x]=VM_STUB(x);\n}\n\nBIOSDATA* DOSVM_BiosData(void)\n{\n    return (BIOSDATA *)(DOSMEM_sysmem + 0x400);\n}\n\n/**********************************************************************\n *          DOSMEM_GetTicksSinceMidnight\n *\n * Return number of clock ticks since midnight.\n */\nstatic DWORD DOSMEM_GetTicksSinceMidnight(void)\n{\n    SYSTEMTIME time;\n\n    /* This should give us the (approximately) correct\n     * 18.206 clock ticks per second since midnight.\n     */\n\n    GetLocalTime( &time );\n\n    return (((time.wHour * 3600 + time.wMinute * 60 +\n              time.wSecond) * 18206) / 1000) +\n             (time.wMilliseconds * 1000 / 54927);\n}\n\n/***********************************************************************\n *           DOSMEM_FillBiosSegments\n *\n * Fill the BIOS data segment with dummy values.\n */\nstatic void DOSMEM_FillBiosSegments(void)\n{\n    BYTE *pBiosSys = (BYTE*)DOSMEM_dosmem + 0xf0000;\n    BYTE *pBiosROMTable = pBiosSys+0xe6f5;\n    BIOSDATA *pBiosData = DOSVM_BiosData();\n    static const char bios_date[] = \"13/01/99\";\n\n      /* Clear all unused values */\n    memset( pBiosData, 0, sizeof(*pBiosData) );\n\n    /* FIXME: should check the number of configured drives and ports */\n    pBiosData->Com1Addr             = 0x3f8;\n    pBiosData->Com2Addr             = 0x2f8;\n    pBiosData->Lpt1Addr             = 0x378;\n    pBiosData->Lpt2Addr             = 0x278;\n    pBiosData->InstalledHardware    = 0x5463;\n    pBiosData->MemSize              = 640;\n    pBiosData->NextKbdCharPtr       = 0x1e;\n    pBiosData->FirstKbdCharPtr      = 0x1e;\n    pBiosData->VideoMode            = 3;\n    pBiosData->VideoColumns         = 80;\n    pBiosData->VideoPageSize        = 80 * 25 * 2;\n    pBiosData->VideoPageStartAddr   = 0xb800;\n    pBiosData->VideoCtrlAddr        = 0x3d4;\n    pBiosData->Ticks                = DOSMEM_GetTicksSinceMidnight();\n    pBiosData->NbHardDisks          = 2;\n    pBiosData->KbdBufferStart       = 0x1e;\n    pBiosData->KbdBufferEnd         = 0x3e;\n    pBiosData->RowsOnScreenMinus1   = 24;\n    pBiosData->BytesPerChar         = 0x10;\n    pBiosData->ModeOptions          = 0x64;\n    pBiosData->FeatureBitsSwitches  = 0xf9;\n    pBiosData->VGASettings          = 0x51;\n    pBiosData->DisplayCombination   = 0x08;\n    pBiosData->DiskDataRate         = 0;\n\n    /* fill ROM configuration table (values from Award) */\n    *(pBiosROMTable+0x0)\t= 0x08; /* number of bytes following LO */\n    *(pBiosROMTable+0x1)\t= 0x00; /* number of bytes following HI */\n    *(pBiosROMTable+0x2)\t= 0xfc; /* model */\n    *(pBiosROMTable+0x3)\t= 0x01; /* submodel */\n    *(pBiosROMTable+0x4)\t= 0x00; /* BIOS revision */\n    *(pBiosROMTable+0x5)\t= 0x74; /* feature byte 1 */\n    *(pBiosROMTable+0x6)\t= 0x00; /* feature byte 2 */\n    *(pBiosROMTable+0x7)\t= 0x00; /* feature byte 3 */\n    *(pBiosROMTable+0x8)\t= 0x00; /* feature byte 4 */\n    *(pBiosROMTable+0x9)\t= 0x00; /* feature byte 5 */\n\n    /* BIOS date string */\n    memcpy(pBiosSys+0xfff5, bios_date, sizeof bios_date);\n\n    /* BIOS ID */\n    *(pBiosSys+0xfffe) = 0xfc;\n\n    /* Reboot vector (f000:fff0 or ffff:0000) */\n    *(DWORD*)(pBiosSys + 0xfff0) = VM_STUB(0x19);\n}\n\nBOOL WINAPI vm_inject(DWORD vpfn16, DWORD dwFlags,\n        DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode);\n\n/***********************************************************************\n *           BiosTick\n *\n * Increment the BIOS tick counter. Called by timer signal handler.\n */\nstatic void CALLBACK BiosTick( LPVOID arg, DWORD low, DWORD high )\n{\n    FARPROC16 tickhndlr = DOSVM_GetPMHandler16(8);\n    BIOSDATA *pBiosData = arg;\n    pBiosData->Ticks++;\n    // TODO: fix PIT\n    if (tickhndlr && (tickhndlr != (FARPROC16)MAKESEGPTR(DOSVM_dpmi_segments->int16_sel, 5 * 8)))\n    {\n        DWORD ret;\n        WORD dummyflags;\n        vm_inject(tickhndlr, WCB16_PASCAL, 2, &dummyflags, &ret);\n    }\n}\n\n/***********************************************************************\n *           timer_thread\n */\nstatic DWORD CALLBACK timer_thread( void *arg )\n{\n    LARGE_INTEGER when;\n    HANDLE timer;\n\n    if (!(timer = CreateWaitableTimerA( NULL, FALSE, NULL ))) return 0;\n\n    when.u.LowPart = when.u.HighPart = 0;\n    SetWaitableTimer( timer, &when, 55 /* actually 54.925 */, BiosTick, arg, FALSE );\n    for (;;) SleepEx( INFINITE, TRUE );\n}\n\n/***********************************************************************\n *           DOSVM_start_bios_timer\n *\n * Start the BIOS ticks timer when the app accesses selector 0x40.\n */\n__declspec(dllexport) void DOSVM_start_bios_timer(void)\n{\n    static LONG running;\n\n    if (!InterlockedExchange( &running, 1 ))\n        CloseHandle( CreateThread( NULL, 0, timer_thread, DOSVM_BiosData(), 0, NULL ));\n}\n\n/***********************************************************************\n *           DOSMEM_Collapse\n *\n * Helper function for internal use only.\n * Attach all following free blocks to this one, even if this one is not free.\n */\nstatic void DOSMEM_Collapse( MCB* mcb )\n{\n    MCB* next = MCB_NEXT( mcb );\n\n    while (next && next->psp == MCB_PSP_FREE)\n    {\n        mcb->size = mcb->size + next->size + 1;\n        mcb->type = next->type;    /* make sure keeping MCB_TYPE_LAST */\n        next = MCB_NEXT( next );\n    }\n}\n\n/******************************************************************\n *\t\tDOSMEM_InitDosMemory\n */\nBOOL DOSMEM_InitDosMemory(void)\n{\n\t//FIXME\n\t//emulatorgasubeki\n\t//ERR(\"NOTIMPL\");\n\t//return TRUE;\n    static BOOL done;\n    static HANDLE hRunOnce;\n    DWORD old_prot;\n\n    if (done) return TRUE;\n\n    /* FIXME: this isn't 100% thread safe, as we won't catch accesses while initializing */\n    if (hRunOnce == 0)\n    {\n\tHANDLE hEvent = CreateEventW( NULL, TRUE, FALSE, NULL );\n        if (InterlockedCompareExchangePointer( &hRunOnce, hEvent, 0 ) == 0)\n\t{\n            BOOL ret;\n            DWORD reserve;\n\n\t    /* ok, we're the winning thread */\n            if (!(ret = VirtualProtect( DOSMEM_dosmem + DOSMEM_protect,\n                                        DOSMEM_SIZE - DOSMEM_protect,\n                                        PAGE_READWRITE, &old_prot )))\n                ERR(\"Cannot load access low 1Mb, DOS subsystem unavailable\\n\");\n            RemoveVectoredExceptionHandler( vectored_handler );\n\n            /*\n             * Reserve either:\n             * - lowest 64k for NULL pointer catching (Win16)\n             * - lowest 1k for interrupt handlers and\n             *   another 0.5k for BIOS, DOS and intra-application\n             *   areas (DOS)\n             */\n            if (DOSMEM_dosmem != DOSMEM_sysmem)\n                reserve = 0x10000; /* 64k */\n            else\n                reserve = 0x600; /* 1.5k */\n\n            /*\n             * Set DOS memory base and initialize conventional memory.\n             */\n            DOSMEM_FillBiosSegments();\n            DOSMEM_FillIsrTable();\n\n            /* align root block to paragraph */\n            DOSMEM_root_block = (MCB*)(DOSMEM_dosmem + reserve);\n            DOSMEM_root_block->type = MCB_TYPE_LAST;\n            DOSMEM_root_block->psp = MCB_PSP_FREE;\n            DOSMEM_root_block->size = (DOSMEM_dosmem + 0x9fffc  - ((char*)DOSMEM_root_block)) >> 4;\n\n            TRACE(\"DOS conventional memory initialized, %d bytes free.\\n\",\n                  DOSMEM_Available());\n\n            DOSVM_InitSegments();\n\n            SetEvent( hRunOnce );\n            done = TRUE;\n            return ret;\n\t}\n\t/* someone beat us here... */\n\tCloseHandle( hEvent );\n    }\n\n    /* and wait for the winner to have finished */\n    WaitForSingleObject( hRunOnce, INFINITE );\n    return TRUE;\n}\n\n/******************************************************************\n *\t\tdosmem_handler\n *\n * Handler to catch access to our 1MB address space reserved for real memory\n */\nstatic LONG WINAPI dosmem_handler(EXCEPTION_POINTERS* except)\n{\n    if (except->ExceptionRecord->ExceptionCode == EXCEPTION_ACCESS_VIOLATION)\n    {\n        char *addr = (char *)except->ExceptionRecord->ExceptionInformation[1];\n        if (addr >= DOSMEM_dosmem + DOSMEM_protect && addr < DOSMEM_dosmem + DOSMEM_SIZE)\n        {\n            if (DOSMEM_InitDosMemory()) return EXCEPTION_CONTINUE_EXECUTION;\n        }\n    }\n    return EXCEPTION_CONTINUE_SEARCH;\n}\n\n/***********************************************************************\n *           DOSMEM_Init\n *\n * Create the dos memory segments, and store them into the KERNEL\n * exported values.\n */\nBOOL DOSMEM_Init(void)\n{\n    void *addr = (void *)1;\n    SIZE_T size = DOSMEM_SIZE - 1;\n\n    if (NtAllocateVirtualMemory( GetCurrentProcess(), &addr, 0, &size,\n                                 MEM_RESERVE | MEM_COMMIT, PAGE_NOACCESS ))\n\t{\n\t\taddr = 0;\n\t\tif (NtAllocateVirtualMemory(GetCurrentProcess(), &addr, 0, &size,\n\t\t\tMEM_RESERVE | MEM_COMMIT, PAGE_NOACCESS))\n\t\t{\n\t\t\tERR(\"Cannot allocate DOS memory\\n\");\n\t\t\t//ExitProcess(1);\n\t\t}\n    }\n\n    if (addr <= (void *)DOSMEM_64KB)\n    {\n        DOSMEM_dosmem = 0;\n        DOSMEM_protect = DOSMEM_64KB;\n        DOSMEM_sysmem = (char *)0xf0000;  /* store sysmem in high addresses for now */\n    }\n    else\n    {\n        WARN( \"First megabyte not available for DOS address space.\\n\" );\n        DOSMEM_dosmem = addr;\n        DOSMEM_protect = 0;\n        DOSMEM_sysmem = DOSMEM_dosmem;\n    }\n\n    vectored_handler = AddVectoredExceptionHandler(FALSE, dosmem_handler);\n    DOSMEM_0000H = GLOBAL_CreateBlock( GMEM_FIXED, DOSMEM_sysmem,\n                                       DOSMEM_64KB, 0, WINE_LDT_FLAGS_DATA, 0 );\n    DOSMEM_BiosDataSeg = GLOBAL_CreateBlock( GMEM_FIXED, DOSMEM_sysmem + 0x400,\n                                             0x100, 0, WINE_LDT_FLAGS_DATA, 0 );\n    DOSMEM_BiosSysSeg = GLOBAL_CreateBlock( GMEM_FIXED, DOSMEM_dosmem + 0xf0000,\n                                            DOSMEM_64KB, 0, WINE_LDT_FLAGS_DATA, 0 );\n\n    return TRUE;\n}\n\n/***********************************************************************\n *           DOSMEM_MapLinearToDos\n *\n * Linear address to the DOS address space.\n */\nUINT DOSMEM_MapLinearToDos(LPVOID ptr)\n{\n    if (((char*)ptr >= DOSMEM_dosmem) &&\n        ((char*)ptr < DOSMEM_dosmem + DOSMEM_SIZE))\n          return (char *)ptr - DOSMEM_dosmem;\n    return (UINT)ptr;\n}\n\n\n/***********************************************************************\n *           DOSMEM_MapDosToLinear\n *\n * DOS linear address to the linear address space.\n */\nLPVOID DOSMEM_MapDosToLinear(UINT ptr)\n{\n    if (ptr < DOSMEM_SIZE) return DOSMEM_dosmem + ptr;\n    return (LPVOID)ptr;\n}\n\n\n/***********************************************************************\n *           DOSMEM_MapRealToLinear\n *\n * Real mode DOS address into a linear pointer\n */\nLPVOID DOSMEM_MapRealToLinear(DWORD x)\n{\n   LPVOID       lin;\n\n   lin = DOSMEM_dosmem + HIWORD(x) * 16 + LOWORD(x);\n   TRACE_(selector)(\"(0x%08x) returns %p.\\n\", x, lin );\n   return lin;\n}\n\n/***********************************************************************\n *           DOSMEM_AllocBlock\n *\n * Carve a chunk of the DOS memory block (without selector).\n */\nLPVOID DOSMEM_AllocBlock(UINT size, UINT16* pseg)\n{\n    MCB *curr;\n    MCB *next = NULL;\n    WORD psp;\n\n    DOSMEM_InitDosMemory();\n\n    curr = DOSMEM_root_block;\n    if (!(psp = DOSVM_psp)) psp = MCB_PSP_DOS;\n\n    if (pseg) *pseg = 0;\n\n    TRACE( \"(%04xh)\\n\", size );\n\n    /* round up to paragraph */\n    size = (size + 15) >> 4;\n\n#ifdef __DOSMEM_DEBUG__\n    DOSMEM_Available();     /* checks the whole MCB list */\n#endif\n\n    /* loop over all MCB and search the next large enough MCB */\n    while (curr)\n    {\n        if (!MCB_VALID (curr))\n        {\n            ERR( \"MCB List Corrupt\\n\" );\n            MCB_DUMP( curr );\n            return NULL;\n        }\n        if (curr->psp == MCB_PSP_FREE)\n        {\n            DOSMEM_Collapse( curr );\n            /* is it large enough (one paragraph for the MCB)? */\n            if (curr->size >= size)\n            {\n                if (curr->size > size)\n                {\n                    /* split curr */\n                    next = (MCB *) ((char*) curr + ((size+1) << 4));\n                    next->psp = MCB_PSP_FREE;\n                    next->size = curr->size - (size+1);\n                    next->type = curr->type;\n                    curr->type = MCB_TYPE_NORMAL;\n                    curr->size = size;\n                }\n                /* curr is the found block */\n                curr->psp = psp;\n                if( pseg ) *pseg = (((char*)curr) + 16 - DOSMEM_dosmem) >> 4;\n                return (LPVOID) ((char*)curr + 16);\n            }\n        }\n        curr = MCB_NEXT(curr);\n    }\n    return NULL;\n}\n\n/***********************************************************************\n *           DOSMEM_FreeBlock\n */\nBOOL DOSMEM_FreeBlock(void* ptr)\n{\n    MCB* mcb = (MCB*) ((char*)ptr - 16);\n\n    TRACE( \"(%p)\\n\", ptr );\n\n#ifdef __DOSMEM_DEBUG__\n    DOSMEM_Available();\n#endif\n\n    if (!MCB_VALID (mcb))\n    {\n        ERR( \"MCB invalid\\n\" );\n        MCB_DUMP( mcb );\n        return FALSE;\n    }\n\n    mcb->psp = MCB_PSP_FREE;\n    DOSMEM_Collapse( mcb );\n    return TRUE;\n}\n\n/***********************************************************************\n *           DOSMEM_ResizeBlock\n *\n * Resize DOS memory block in place. Returns block size or -1 on error.\n *\n * If exact is TRUE, returned value is either old or requested block\n * size. If exact is FALSE, block is expanded even if there is not\n * enough space for full requested block size.\n *\n * TODO: return also biggest block size\n */\nUINT DOSMEM_ResizeBlock(void *ptr, UINT size, BOOL exact)\n{\n    MCB* mcb = (MCB*) ((char*)ptr - 16);\n    MCB* next;\n\n    TRACE( \"(%p,%04xh,%s)\\n\", ptr, size, exact ? \"TRUE\" : \"FALSE\" );\n\n    /* round up to paragraph */\n    size = (size + 15) >> 4;\n\n#ifdef __DOSMEM_DEBUG__\n    DOSMEM_Available();\n#endif\n\n    if (!MCB_VALID (mcb))\n    {\n        ERR( \"MCB invalid\\n\" );\n        MCB_DUMP( mcb );\n        return -1;\n    }\n\n    /* resize needed? */\n    if (mcb->size == size)\n        return size << 4;\n\n    /* collapse free blocks */\n    DOSMEM_Collapse( mcb );\n\n    /* shrink mcb ? */\n    if (mcb->size > size)\n    {\n        next = (MCB *) ((char*)mcb + ((size+1) << 4));\n        next->type = mcb->type;\n        next->psp = MCB_PSP_FREE;\n        next->size = mcb->size - (size+1);\n        mcb->type = MCB_TYPE_NORMAL;\n        mcb->size = size;\n        return size << 4;\n    }\n\n    if (!exact)\n    {\n        return mcb->size << 4;\n    }\n\n    return -1;\n}\n\n/***********************************************************************\n *           DOSMEM_Available\n */\nUINT DOSMEM_Available(void)\n{\n    UINT  available = 0;\n    UINT  total = 0;\n    MCB *curr = DOSMEM_root_block;\n    /* loop over all MCB and search the largest free MCB */\n    while (curr)\n    {\n#ifdef __DOSMEM_DEBUG__\n        MCB_DUMP( curr );\n#endif\n        if (!MCB_VALID (curr))\n        {\n            ERR( \"MCB List Corrupt\\n\" );\n            MCB_DUMP( curr );\n            return 0;\n        }\n        if (curr->psp == MCB_PSP_FREE &&\n            curr->size > available )\n            available = curr->size;\n\n        total += curr->size + 1;\n        curr = MCB_NEXT( curr );\n    }\n    TRACE( \" %04xh of %04xh paragraphs available\\n\", available, total );\n    return available << 4;\n}\n\n/******************************************************************\n *\t\tDOSMEM_MapDosLayout\n *\n * Initialize the first MB of memory to look like a real DOS setup\n */\nBOOL DOSMEM_MapDosLayout(void)\n{\n    static BOOL already_mapped;\n    DWORD old_prot;\n\n    if (!already_mapped)\n    {\n        if (DOSMEM_dosmem || !VirtualProtect( NULL, DOSMEM_SIZE, PAGE_EXECUTE_READWRITE, &old_prot ))\n        {\n            //ERR( \"Need full access to the first megabyte for DOS mode\\n\" );\n            //ExitProcess(1);\n            WARN( \"Need full access to the first megabyte for DOS mode\\n\" );\n        }\n        /* copy the BIOS and ISR area down */\n        memcpy( DOSMEM_dosmem, DOSMEM_sysmem, 0x400 + 0x100 );\n        DOSMEM_sysmem = DOSMEM_dosmem;\n        SetSelectorBase( DOSMEM_0000H, 0 );\n        SetSelectorBase( DOSMEM_BiosDataSeg, 0x400 );\n        /* we may now need the actual interrupt stubs, and since we've just moved the\n         * interrupt vector table away, we can fill the area with stubs instead... */\n        DOSMEM_MakeIsrStubs();\n        already_mapped = TRUE;\n    }\n    return TRUE;\n}\n"
  },
  {
    "path": "krnl386/dosvm.c",
    "content": "/*\n * DOS Virtual Machine\n *\n * Copyright 1998 Ove Kåven\n * Copyright 2002 Jukka Heinonen\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n * Note: This code hasn't been completely cleaned up yet.\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdarg.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <errno.h>\n#include <fcntl.h>\n#include <signal.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#ifdef HAVE_SYS_TIME_H\n# include <sys/time.h>\n#endif\n#include <sys/types.h>\n\n#include \"wine/winbase16.h\"\n#include \"wine/exception.h\"\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winternl.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n#include \"windows/wownt32.h\"\n#include \"winnt.h\"\n#include \"wincon.h\"\n\n#include \"dosexe.h\"\n#include \"wine/debug.h\"\n#include \"excpt.h\"\n\n#include \"kernel16_private.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(int);\n#ifdef MZ_SUPPORTED\nWINE_DECLARE_DEBUG_CHANNEL(module);\nWINE_DECLARE_DEBUG_CHANNEL(relay);\n#endif\n\nWORD DOSVM_psp = 0;\nWORD DOSVM_retval = 0;\n\n/*\n * Wine DOS memory layout above 640k:\n *\n *   a0000 - affff : VGA graphics         (vga.c)\n *   b0000 - bffff : Monochrome text      (unused)\n *   b8000 - bffff : VGA text             (vga.c)\n *   c0000 - cffff : EMS frame            (int67.c)\n *   d0000 - effff : Free memory for UMBs (himem.c)\n *   f0000 - fffff : BIOS stuff           (msdos/dosmem.c)\n *  100000 -10ffff : High memory area     (unused)\n */\n\n/*\n * Table of real mode segments and protected mode selectors\n * for code stubs and other miscellaneous storage.\n */\nstruct DPMI_segments *DOSVM_dpmi_segments = NULL;\n\n/*\n * First and last address available for upper memory blocks.\n */\n#define DOSVM_UMB_BOTTOM 0xd0000\n#define DOSVM_UMB_TOP    0xeffff\n\n/*\n * First free address for upper memory blocks.\n */\nstatic DWORD DOSVM_umb_free = DOSVM_UMB_BOTTOM;\n\n\ntypedef struct _DOSEVENT {\n  int irq,priority;\n  DOSRELAY relay;\n  void *data;\n  struct _DOSEVENT *next;\n} DOSEVENT, *LPDOSEVENT;\n\nstatic struct _DOSEVENT *pending_event, *current_event;\nstatic HANDLE event_notifier;\n\nstatic CRITICAL_SECTION qcrit;\nstatic CRITICAL_SECTION_DEBUG critsect_debug =\n{\n    0, 0, &qcrit,\n    { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },\n      0, 0, { (DWORD_PTR)(__FILE__ \": qcrit\") }\n};\nstatic CRITICAL_SECTION qcrit = { &critsect_debug, -1, 0, 0, 0, 0 };\n\n\n/***********************************************************************\n *              DOSVM_HasPendingEvents\n *\n * Return true if there are pending events that are not\n * blocked by currently active event.\n */\nstatic BOOL DOSVM_HasPendingEvents( void )\n{   \n    if (!pending_event)\n        return FALSE;\n\n    if (!current_event)\n        return TRUE;\n\n    if (pending_event->priority < current_event->priority)\n        return TRUE;\n\n    return FALSE;\n}\n\n\n/***********************************************************************\n *              DOSVM_SendOneEvent\n *\n * Process single pending event.\n *\n * This function should be called with queue critical section locked. \n * The function temporarily releases the critical section if it is \n * possible that internal interrupt handler or user procedure will \n * be called. This is because we may otherwise get a deadlock if\n * another thread is waiting for the same critical section.\n */\nstatic void DOSVM_SendOneEvent( CONTEXT *context )\n{\n    LPDOSEVENT event = pending_event;\n\n    /* Remove from pending events list. */\n    pending_event = event->next;\n\n    /* Process active event. */\n    if (event->irq >= 0) \n    {\n        BYTE intnum = (event->irq < 8) ?\n            (event->irq + 8) : (event->irq - 8 + 0x70);\n            \n        /* Event is an IRQ, move it to current events list. */\n        event->next = current_event;\n        current_event = event;\n\n        TRACE( \"Dispatching IRQ %d.\\n\", event->irq );\n\n        if (ISV86(context))\n        {\n            /* \n             * Note that if DOSVM_HardwareInterruptRM calls an internal \n             * interrupt directly, current_event might be cleared \n             * (and event freed) in this call.\n             */\n            LeaveCriticalSection(&qcrit);\n            DOSVM_HardwareInterruptRM( context, intnum );\n            EnterCriticalSection(&qcrit);\n        }\n        else\n        {\n            /*\n             * This routine only modifies current context so it is\n             * not necessary to release critical section.\n             */\n            DOSVM_HardwareInterruptPM( context, intnum );\n        }\n    } \n    else \n    {\n        /* Callback event. */\n        TRACE( \"Dispatching callback event.\\n\" );\n\n        if (ISV86(context))\n        {\n            /*\n             * Call relay immediately in real mode.\n             */\n            LeaveCriticalSection(&qcrit);\n            (*event->relay)( context, event->data );\n            EnterCriticalSection(&qcrit);\n        }\n        else\n        {\n            /*\n             * Force return to relay code. We do not want to\n             * call relay directly because we may be inside a signal handler.\n             */\n            DOSVM_BuildCallFrame( context, event->relay, event->data );\n        }\n\n        HeapFree(GetProcessHeap(), 0, event);\n    }\n}\n\n\n/***********************************************************************\n *              DOSVM_SendQueuedEvents\n *\n * As long as context instruction pointer stays unmodified,\n * process all pending events that are not blocked by currently\n * active event.\n *\n * This routine assumes that caller has already cleared TEB.vm86_pending \n * and checked that interrupts are enabled.\n */\nvoid DOSVM_SendQueuedEvents( CONTEXT *context )\n{   \n    DWORD old_cs = context->SegCs;\n    DWORD old_ip = context->Eip;\n\n    EnterCriticalSection(&qcrit);\n\n    TRACE( \"Called in %s mode %s events pending (time=%d)\\n\",\n           ISV86(context) ? \"real\" : \"protected\",\n           DOSVM_HasPendingEvents() ? \"with\" : \"without\",\n           GetTickCount() );\n    TRACE( \"cs:ip=%04x:%08x, ss:sp=%04x:%08x\\n\",\n           context->SegCs, context->Eip, context->SegSs, context->Esp);\n\n    while (context->SegCs == old_cs &&\n           context->Eip == old_ip &&\n           DOSVM_HasPendingEvents())\n    {\n        DOSVM_SendOneEvent(context);\n\n        /*\n         * Event handling may have turned pending events flag on.\n         * We disable it here because this prevents some\n         * unnecessary calls to this function.\n         */\n        get_vm86_teb_info()->vm86_pending = 0;\n    }\n\n#ifdef MZ_SUPPORTED\n\n    if (DOSVM_HasPendingEvents())\n    {\n        /*\n         * Interrupts disabled, but there are still\n         * pending events, make sure that pending flag is turned on.\n         */\n        TRACE( \"Another event is pending, setting VIP flag.\\n\" );\n        get_vm86_teb_info()->vm86_pending |= VIP_MASK;\n    }\n\n#else\n\n    FIXME(\"No DOS .exe file support on this platform (yet)\\n\");\n\n#endif /* MZ_SUPPORTED */\n\n    LeaveCriticalSection(&qcrit);\n}\n\n\n#ifdef MZ_SUPPORTED\n/***********************************************************************\n *\t\tDOSVM_QueueEvent\n */\nvoid DOSVM_QueueEvent( INT irq, INT priority, DOSRELAY relay, LPVOID data)\n{\n  LPDOSEVENT event, cur, prev;\n  BOOL       old_pending;\n\n  if (MZ_Current()) {\n    event = HeapAlloc(GetProcessHeap(), 0, sizeof(DOSEVENT));\n    if (!event) {\n      ERR(\"out of memory allocating event entry\\n\");\n      return;\n    }\n    event->irq = irq; event->priority = priority;\n    event->relay = relay; event->data = data;\n\n    EnterCriticalSection(&qcrit);\n    old_pending = DOSVM_HasPendingEvents();\n\n    /* insert event into linked list, in order *after*\n     * all earlier events of higher or equal priority */\n    cur = pending_event; prev = NULL;\n    while (cur && cur->priority<=priority) {\n      prev = cur;\n      cur = cur->next;\n    }\n    event->next = cur;\n    if (prev) prev->next = event;\n    else pending_event = event;\n\n    if (!old_pending && DOSVM_HasPendingEvents()) {\n      TRACE(\"new event queued, signalling (time=%d)\\n\", GetTickCount());\n      \n      /* Alert VM86 thread about the new event. */\n      //ERR(\"kill(%d, %d)\\n\", dosvm_pid, 12);\n      //see dlls/ntdll/signal_i386.c\n      //get vm's thread teb\n      ((WINE_VM86_TEB_INFO*)dosvm_vm86_teb_info)->vm86_pending |= VIP_MASK;\n      //=> VM thread\n      //kill(dosvm_pid,SIGUSR2);\n\n      /* Wake up DOSVM_Wait so that it can serve pending events. */\n      SetEvent(event_notifier);\n    } else {\n      TRACE(\"new event queued (time=%d)\\n\", GetTickCount());\n    }\n\n    LeaveCriticalSection(&qcrit);\n  } else {\n    /* DOS subsystem not running */\n    /* (this probably means that we're running a win16 app\n     *  which uses DPMI to thunk down to DOS services) */\n    if (irq<0) {\n      /* callback event, perform it with dummy context */\n      CONTEXT context;\n      memset(&context,0,sizeof(context));\n      (*relay)(&context,data);\n    } else {\n      ERR(\"IRQ without DOS task: should not happen\\n\");\n    }\n  }\n}\n\nstatic void DOSVM_ProcessConsole(void)\n{\n  INPUT_RECORD msg;\n  DWORD res;\n  BYTE scan, ascii;\n\n  if (ReadConsoleInputA(GetStdHandle(STD_INPUT_HANDLE),&msg,1,&res)) {\n    switch (msg.EventType) {\n    case KEY_EVENT:\n      scan = msg.Event.KeyEvent.wVirtualScanCode;\n      ascii = msg.Event.KeyEvent.uChar.AsciiChar;\n      TRACE(\"scan %02x, ascii %02x\\n\", scan, ascii);\n\n      /* set the \"break\" (release) flag if key released */\n      if (!msg.Event.KeyEvent.bKeyDown) scan |= 0x80;\n\n      /* check whether extended bit is set,\n       * and if so, queue the extension prefix */\n      if (msg.Event.KeyEvent.dwControlKeyState & ENHANCED_KEY) {\n        DOSVM_Int09SendScan(0xE0,0);\n      }\n      DOSVM_Int09SendScan(scan, ascii);\n      break;\n    case MOUSE_EVENT:\n      DOSVM_Int33Console(&msg.Event.MouseEvent);\n      break;\n    case WINDOW_BUFFER_SIZE_EVENT:\n      FIXME(\"unhandled WINDOW_BUFFER_SIZE_EVENT.\\n\");\n      break;\n    case MENU_EVENT:\n      FIXME(\"unhandled MENU_EVENT.\\n\");\n      break;\n    case FOCUS_EVENT:\n      FIXME(\"unhandled FOCUS_EVENT.\\n\");\n      break;\n    default:\n      FIXME(\"unknown console event: %d\\n\", msg.EventType);\n    }\n  }\n}\n\nstatic void DOSVM_ProcessMessage(MSG *msg)\n{\n  BYTE scan = 0;\n\n  TRACE(\"got message %04x, wparam=%08lx, lparam=%08lx\\n\",msg->message,msg->wParam,msg->lParam);\n  if ((msg->message>=WM_MOUSEFIRST)&&\n      (msg->message<=WM_MOUSELAST)) {\n    DOSVM_Int33Message(msg->message,msg->wParam,msg->lParam);\n  } else {\n    switch (msg->message) {\n    case WM_KEYUP:\n      scan = 0x80;\n    case WM_KEYDOWN:\n      scan |= (msg->lParam >> 16) & 0x7f;\n\n      /* check whether extended bit is set,\n       * and if so, queue the extension prefix */\n      if (msg->lParam & 0x1000000) {\n\t/* FIXME: some keys (function keys) have\n\t * extended bit set even when they shouldn't,\n\t * should check for them */\n\tDOSVM_Int09SendScan(0xE0,0);\n      }\n      DOSVM_Int09SendScan(scan,0);\n      break;\n    }\n  }\n}\n\n\n/***********************************************************************\n *\t\tDOSVM_Wait\n *\n * Wait for asynchronous events. This routine temporarily enables\n * interrupts and waits until some asynchronous event has been \n * processed.\n */\nvoid DOSVM_Wait( CONTEXT *waitctx )\n{\n    if (DOSVM_HasPendingEvents())\n    {\n        CONTEXT context = *waitctx;\n        \n        /*\n         * If DOSVM_Wait is called from protected mode we emulate\n         * interrupt reflection and convert context into real mode context.\n         * This is actually the correct thing to do as long as DOSVM_Wait\n         * is only called from those interrupt functions that DPMI reflects\n         * to real mode.\n         *\n         * FIXME: Need to think about where to place real mode stack.\n         * FIXME: If DOSVM_Wait calls are nested stack gets corrupted.\n         *        Can this really happen?\n         */\n        if (!ISV86(&context))\n        {\n            context.EFlags |= V86_FLAG;\n            context.SegSs = 0xffff;\n            context.Esp = 0;\n        }\n\n        context.EFlags |= VIF_MASK;\n        context.SegCs = 0;\n        context.Eip = 0;\n\n        DOSVM_SendQueuedEvents(&context);\n\n        if(context.SegCs || context.Eip)\n            DPMI_CallRMProc( &context, NULL, 0, TRUE );\n    }\n    else\n    {\n        HANDLE objs[2];\n        int    objc = DOSVM_IsWin16() ? 2 : 1;\n        DWORD  waitret;\n\n        objs[0] = event_notifier;\n        objs[1] = GetStdHandle(STD_INPUT_HANDLE);\n\n        waitret = MsgWaitForMultipleObjects( objc, objs, FALSE, \n                                             INFINITE, QS_ALLINPUT );\n        \n        if (waitret == WAIT_OBJECT_0)\n        {\n            /*\n             * New pending event has been queued, we ignore it\n             * here because it will be processed on next call to\n             * DOSVM_Wait.\n             */\n        }\n        else if (objc == 2 && waitret == WAIT_OBJECT_0 + 1)\n        {\n            DOSVM_ProcessConsole();\n        }\n        else if (waitret == WAIT_OBJECT_0 + objc)\n        {\n            MSG msg;\n            while (PeekMessageA(&msg,0,0,0,PM_REMOVE|PM_NOYIELD)) \n            {\n                /* got a message */\n                DOSVM_ProcessMessage(&msg);\n                /* we don't need a TranslateMessage here */\n                DispatchMessageA(&msg);\n            }\n        }\n        else\n        {\n            ERR_(module)( \"dosvm wait error=%d\\n\", GetLastError() );\n        }\n    }\n}\n\n\nDWORD DOSVM_Loop( HANDLE hThread )\n{\n  HANDLE objs[2];\n  int count = 0;\n  MSG msg;\n  DWORD waitret;\n\n  objs[count++] = hThread;\n  DWORD ununsed;\n  if (GetConsoleMode( GetStdHandle(STD_INPUT_HANDLE), &ununsed))\n      objs[count++] = GetStdHandle(STD_INPUT_HANDLE);\n\n  for(;;) {\n      TRACE_(int)(\"waiting for action\\n\");\n      waitret = MsgWaitForMultipleObjects(count, objs, FALSE, INFINITE, QS_ALLINPUT);\n      if (waitret == WAIT_OBJECT_0) {\n         DWORD rv;\n         if(!GetExitCodeThread(hThread, &rv)) {\n             ERR(\"Failed to get thread exit code!\\n\");\n             rv = 0;\n         }\n         return rv;\n      }\n      else if (waitret == WAIT_OBJECT_0 + count) {\n          while (PeekMessageA(&msg,0,0,0,PM_REMOVE)) {\n              if (msg.hwnd) {\n                  /* it's a window message */\n                  DOSVM_ProcessMessage(&msg);\n                  DispatchMessageA(&msg);\n              } else {\n                  /* it's a thread message */\n                  switch (msg.message) {\n                  case WM_QUIT:\n                      /* stop this madness!! */\n                      return 0;\n                  case WM_USER + 1:\n                      /* run passed procedure in this thread */\n                      /* (sort of like APC, but we signal the completion) */\n                      {\n                          DOS_SPC *spc = (DOS_SPC *)msg.lParam;\n                          TRACE_(int)(\"calling %p with arg %08lx\\n\", spc->proc, spc->arg);\n                          (spc->proc)(spc->arg);\n                          TRACE_(int)(\"done, signalling event %lx\\n\", msg.wParam);\n                          SetEvent( (HANDLE)msg.wParam );\n                      }\n                      break;\n                  default:\n                      DispatchMessageA(&msg);\n                  }\n              }\n          }\n      }\n      else if (waitret == WAIT_OBJECT_0 + 1)\n      {\n          DOSVM_ProcessConsole();\n      }\n      else\n      {\n          ERR_(int)(\"MsgWaitForMultipleObjects returned unexpected value.\\n\");\n          return 0;\n      }\n  }\n}\n\nstatic LONG WINAPI exception_handler(EXCEPTION_POINTERS *eptr)\n{\n  EXCEPTION_RECORD *rec = eptr->ExceptionRecord;\n  CONTEXT *context = eptr->ContextRecord;\n\n  int arg = rec->ExceptionInformation[0];\n  BOOL ret;\n  context = *(CONTEXT**)(&rec->ExceptionInformation[1]);\n  switch(rec->ExceptionCode) {\n  case EXCEPTION_VM86_INTx:\n    TRACE_(relay)(\"Call DOS int 0x%02x ret=%04x:%04x\\n\"\n                  \" eax=%08x ebx=%08x ecx=%08x edx=%08x esi=%08x edi=%08x\\n\"\n                  \" ebp=%08x esp=%08x ds=%04x es=%04x fs=%04x gs=%04x flags=%08x\\n\",\n                  arg, context->SegCs, context->Eip,\n                  context->Eax, context->Ebx, context->Ecx, context->Edx, context->Esi, context->Edi,\n                  context->Ebp, context->Esp, context->SegDs, context->SegEs, context->SegFs, context->SegGs,\n                  context->EFlags );\n    ret = DOSVM_EmulateInterruptRM( context, arg );\n    TRACE_(relay)(\"Ret  DOS int 0x%02x ret=%04x:%04x\\n\"\n                  \" eax=%08x ebx=%08x ecx=%08x edx=%08x esi=%08x edi=%08x\\n\"\n                  \" ebp=%08x esp=%08x ds=%04x es=%04x fs=%04x gs=%04x flags=%08x\\n\",\n                  arg, context->SegCs, context->Eip,\n                  context->Eax, context->Ebx, context->Ecx, context->Edx, context->Esi, context->Edi,\n                  context->Ebp, context->Esp, context->SegDs, context->SegEs,\n                  context->SegFs, context->SegGs, context->EFlags );\n    return ret ? EXCEPTION_CONTINUE_EXECUTION : EXCEPTION_EXECUTE_HANDLER;\n\n  case EXCEPTION_VM86_STI:\n  /* case EXCEPTION_VM86_PICRETURN: */\n    if (!ISV86(context))\n      ERR( \"Protected mode STI caught by real mode handler!\\n\" );\n    DOSVM_SendQueuedEvents(context);\n    return EXCEPTION_CONTINUE_EXECUTION;\n  \n  case EXCEPTION_SINGLE_STEP:\n      ret = DOSVM_EmulateInterruptRM( context, 1 );\n    return ret ? EXCEPTION_CONTINUE_EXECUTION : EXCEPTION_EXECUTE_HANDLER;\n  \n  case EXCEPTION_BREAKPOINT:\n      ret = DOSVM_EmulateInterruptRM( context, 3 );\n    return ret ? EXCEPTION_CONTINUE_EXECUTION : EXCEPTION_EXECUTE_HANDLER;\n  \n  }\n  return EXCEPTION_CONTINUE_SEARCH;\n}\n\nINT DOSVM_Enter( CONTEXT *context )\n{\n  INT ret = 0;\n  if (!ISV86(context))\n      ERR( \"Called with protected mode context!\\n\" );\n\n  __TRY\n  {\n      if (!WOWCallback16Ex( 0, WCB16_REGS, 0, NULL, (DWORD *)context )) ret = -1;\n      TRACE_(module)( \"ret %d err %u\\n\", ret, GetLastError() );\n  }\n  __EXCEPT(exception_handler)\n  {\n    TRACE_(module)( \"leaving vm86 mode\\n\" );\n  }\n  __ENDTRY\n\n  return ret;\n}\n\n/***********************************************************************\n *\t\tDOSVM_PIC_ioport_out\n */\nvoid DOSVM_PIC_ioport_out( WORD port, BYTE val)\n{\n    if (port != 0x20)\n    {\n        FIXME( \"Unsupported PIC port %04x\\n\", port );\n    }\n    else if (val == 0x20 || (val >= 0x60 && val <= 0x67)) \n    {\n        EnterCriticalSection(&qcrit);\n\n        if (!current_event)\n        {\n            WARN( \"%s without active IRQ\\n\",\n                  val == 0x20 ? \"EOI\" : \"Specific EOI\" );\n        }\n        else if (val != 0x20 && val - 0x60 != current_event->irq)\n        {\n            WARN( \"Specific EOI but current IRQ %d is not %d\\n\", \n                  current_event->irq, val - 0x60 );\n        }\n        else\n        {\n            LPDOSEVENT event = current_event;\n\n            TRACE( \"Received %s for current IRQ %d, clearing event\\n\",\n                   val == 0x20 ? \"EOI\" : \"Specific EOI\", event->irq );\n\n            current_event = event->next;\n            if (event->relay)\n                (*event->relay)(NULL,event->data);\n            HeapFree(GetProcessHeap(), 0, event);\n\n            if (DOSVM_HasPendingEvents()) \n            {\n                TRACE( \"Another event pending, setting pending flag\\n\" );\n                get_vm86_teb_info()->vm86_pending |= VIP_MASK;\n            }\n        }\n\n        LeaveCriticalSection(&qcrit);\n    } \n    else \n    {\n        FIXME( \"Unrecognized PIC command %02x\\n\", val );\n    }\n}\n\n#else /* !MZ_SUPPORTED */\n\n/***********************************************************************\n *\t\tDOSVM_Enter\n */\nINT DOSVM_Enter( CONTEXT *context )\n{\n    SetLastError( ERROR_NOT_SUPPORTED );\n    return -1;\n}\n\n/***********************************************************************\n *\t\tDOSVM_Wait\n */\nvoid DOSVM_Wait( CONTEXT *waitctx ) { }\n\n/***********************************************************************\n *\t\tDOSVM_PIC_ioport_out\n */\nvoid DOSVM_PIC_ioport_out( WORD port, BYTE val) {}\n\n/***********************************************************************\n *\t\tDOSVM_QueueEvent\n */\nvoid DOSVM_QueueEvent( INT irq, INT priority, DOSRELAY relay, LPVOID data)\n{\n  if (irq<0) {\n    /* callback event, perform it with dummy context */\n    CONTEXT context;\n    memset(&context,0,sizeof(context));\n    (*relay)(&context,data);\n  } else {\n    ERR(\"IRQ without DOS task: should not happen\\n\");\n  }\n}\n\n#endif /* MZ_SUPPORTED */\n\n\n/**********************************************************************\n *         DOSVM_AcknowledgeIRQ\n *\n * This routine should be called by all internal IRQ handlers.\n */\nvoid WINAPI DOSVM_AcknowledgeIRQ( CONTEXT *context )\n{\n    /*\n     * Send EOI to PIC.\n     */\n    DOSVM_PIC_ioport_out( 0x20, 0x20 );\n\n    /*\n     * Protected mode IRQ handlers are supposed\n     * to turn VIF flag on before they return.\n     */\n    if (!ISV86(context))\n        get_vm86_teb_info()->dpmi_vif = 1;\n}\n\n\n/***********************************************************************\n *           DOSVM_AllocUMB\n *\n * Allocate upper memory block (UMB) from upper memory.\n * Returned pointer is aligned to 16-byte (paragraph) boundary.\n *\n * This routine is only for allocating static storage for\n * Wine internal uses. Allocated memory can be accessed from\n * real mode, memory is taken from area already mapped and reserved\n * by Wine and the allocation has very little memory and speed\n * overhead. Use of this routine also preserves precious DOS\n * conventional memory.\n */\nLPVOID DOSVM_umb_bottom = DOSVM_UMB_BOTTOM;\nLPVOID DOSVM_umb_top = DOSVM_UMB_TOP;\nstatic LPVOID DOSVM_AllocUMB( DWORD size )\n{\n\t//not wine\n\tif (DOSVM_UMB_BOTTOM == DOSVM_umb_free)\n\t{\n        DOSVM_umb_free = (size_t)DOSMEM_dosmem + DOSVM_umb_free;\n\t\t//DOSVM_umb_free = malloc(DOSVM_UMB_TOP - DOSVM_UMB_BOTTOM);\n\t\tDOSVM_umb_bottom = DOSVM_umb_free;\n\t\tDOSVM_umb_top = (BYTE*)DOSVM_umb_bottom + DOSVM_UMB_TOP - DOSVM_UMB_BOTTOM;\n\t\t//LPVOID ret = VirtualAlloc(DOSVM_UMB_BOTTOM, DOSVM_UMB_TOP - DOSVM_UMB_BOTTOM, MEM_COMMIT, PAGE_READWRITE);//DOSVM_UMB_TOP    0xeffff\n\t}\n\tif (DOSVM_umb_bottom != DOSVM_UMB_BOTTOM) {\n\t\tLPVOID ptr = (LPVOID)DOSVM_umb_free;\n\n\t\tsize = ((size + 15) >> 4) << 4;\n\n\t\tif (DOSVM_umb_free + size - 1 > DOSVM_umb_top) {\n\t\t\tERR(\"Out of upper memory area.\\n\");\n\t\t\treturn 0;\n\t\t}\n\n\t\tDOSVM_umb_free += size;\n\t\treturn ptr;\n\n\t}\n\t//\n  LPVOID ptr = (LPVOID)DOSVM_umb_free;\n\n  size = ((size + 15) >> 4) << 4;\n\n  if(DOSVM_umb_free + size - 1 > DOSVM_UMB_TOP) {\n    ERR(\"Out of upper memory area.\\n\");\n    return 0;\n  }\n\n  DOSVM_umb_free += size;\n  return ptr;\n}\n\n\n/**********************************************************************\n *          alloc_selector\n *\n * Allocate a selector corresponding to a real mode address.\n * size must be < 64k.\n */\nstatic WORD alloc_selector( void *base, DWORD size, unsigned char flags )\n{\n    WORD sel = wine_ldt_alloc_entries( 1 );\n\n    if (sel)\n    {\n        LDT_ENTRY entry;\n        wine_ldt_set_base( &entry, base );\n        wine_ldt_set_limit( &entry, size - 1 );\n        wine_ldt_set_flags( &entry, flags );\n        wine_ldt_set_entry( sel, &entry );\n    }\n    return sel;\n}\n\n\n/***********************************************************************\n *           DOSVM_AllocCodeUMB\n *\n * Allocate upper memory block for storing code stubs.\n * Initializes real mode segment and 16-bit protected mode selector\n * for the allocated code block.\n *\n * FIXME: should allocate a single PM selector for the whole UMB range.\n */\nstatic LPVOID DOSVM_AllocCodeUMB( DWORD size, WORD *segment, WORD *selector )\n{\n  LPVOID ptr = DOSVM_AllocUMB( size );\n\n  if (segment)\n    *segment = ((DWORD)ptr - (DWORD)DOSMEM_dosmem) >> 4;\n\n  if (selector)\n    *selector = alloc_selector( ptr, size, WINE_LDT_FLAGS_CODE );\n\n  return ptr;\n}\n\n\n/***********************************************************************\n *           DOSVM_AllocDataUMB\n *\n * Allocate upper memory block for storing data.\n * Initializes real mode segment and 16-bit protected mode selector\n * for the allocated data block.\n */\nLPVOID DOSVM_AllocDataUMB( DWORD size, WORD *segment, WORD *selector )\n{\n  LPVOID ptr = DOSVM_AllocUMB( size );\n\n  if (segment)\n    *segment = ((DWORD)ptr - (DWORD)DOSMEM_dosmem) >> 4;\n\n  if (selector)\n    *selector = alloc_selector( ptr, size, WINE_LDT_FLAGS_DATA );\n\n  return ptr;\n}\n\n\n/***********************************************************************\n *           DOSVM_InitSegments\n *\n * Initializes DOSVM_dpmi_segments. Allocates required memory and\n * sets up segments and selectors for accessing the memory.\n */\nvoid DOSVM_InitSegments(void)\n{\n    DWORD old_prot;\n\tLPSTR ptr;\n    int   i;\n\n    static const char wrap_code[]={\n     0xCD,0x31, /* int $0x31 */\n     0xCB       /* lret */\n    };\n\n    static const char enter_xms[]=\n    {\n        /* XMS hookable entry point */\n        0xEB,0x03,           /* jmp entry */\n        0x90,0x90,0x90,      /* nop;nop;nop */\n                             /* entry: */\n        /* real entry point */\n        /* for simplicity, we'll just use the same hook as DPMI below */\n        0xCD,0x31,           /* int $0x31 */\n        0xCB                 /* lret */\n    };\n\n    static const char enter_pm[]=\n    {\n        0x50,                /* pushw %ax */\n        0x52,                /* pushw %dx */\n        0x55,                /* pushw %bp */\n        0x89,0xE5,           /* movw %sp,%bp */\n        /* get return CS */\n        0x8B,0x56,0x08,      /* movw 8(%bp),%dx */\n        /* just call int 31 here to get into protected mode... */\n        /* it'll check whether it was called from dpmi_seg... */\n        0xCD,0x31,           /* int $0x31 */\n        /* we are now in the context of a 16-bit relay call */\n        /* need to fixup our stack;\n         * 16-bit relay return address will be lost,\n         * but we won't worry quite yet\n         */\n        0x8E,0xD0,           /* movw %ax,%ss */\n        0x66,0x0F,0xB7,0xE5, /* movzwl %bp,%esp */\n        /* set return CS */\n        0x89,0x56,0x08,      /* movw %dx,8(%bp) */\n        0x5D,                /* popw %bp */\n        0x5A,                /* popw %dx */\n        0x58,                /* popw %ax */\n        0xfb,                /* sti, enable and check virtual interrupts */\n        0xCB                 /* lret */\n    };\n\n    static const char relay[]=\n    {\n        0xca, 0x04, 0x00, /* 16-bit far return and pop 4 bytes (relay void* arg) */\n        0xcd, 0x31,       /* int 31 */\n        0xfb, 0x66, 0xcb  /* sti and 32-bit far return */\n    };\n\n    /*\n     * Allocate pointer array.\n     */\n    DOSVM_dpmi_segments = DOSVM_AllocUMB( sizeof(struct DPMI_segments) );\n\n    /*\n     * RM / offset 0: Exit from real mode.\n     * RM / offset 2: Points to lret opcode.\n     */\n    ptr = DOSVM_AllocCodeUMB( sizeof(wrap_code),\n                              &DOSVM_dpmi_segments->wrap_seg, 0 );\n    memcpy( ptr, wrap_code, sizeof(wrap_code) );\n\n    /*\n     * RM / offset 0: XMS driver entry.\n     */\n    ptr = DOSVM_AllocCodeUMB( sizeof(enter_xms),\n                              &DOSVM_dpmi_segments->xms_seg, 0 );\n    memcpy( ptr, enter_xms, sizeof(enter_xms) );\n\n    /*\n     * RM / offset 0: Switch to DPMI.\n     * PM / offset 8: DPMI raw mode switch.\n     */\n    ptr = DOSVM_AllocCodeUMB( sizeof(enter_pm),\n                              &DOSVM_dpmi_segments->dpmi_seg,\n                              &DOSVM_dpmi_segments->dpmi_sel );\n    memcpy( ptr, enter_pm, sizeof(enter_pm) );\n\n    /*\n     * PM / offset N*6: Interrupt N in DPMI32.\n     */\n    ptr = DOSVM_AllocCodeUMB( 6 * 256,\n                              0, &DOSVM_dpmi_segments->int48_sel );\n    for(i=0; i<256; i++) {\n        /*\n         * Each 32-bit interrupt handler is 6 bytes:\n         * 0xCD,<i>            = int <i> (nested 16-bit interrupt)\n         * 0x66,0xCA,0x04,0x00 = ret 4   (32-bit far return and pop 4 bytes / eflags)\n         */\n        ptr[i * 6 + 0] = 0xCD;\n        ptr[i * 6 + 1] = i;\n        ptr[i * 6 + 2] = 0x66;\n        ptr[i * 6 + 3] = 0xCA;\n        ptr[i * 6 + 4] = 0x04;\n        ptr[i * 6 + 5] = 0x00;\n    }\n\n    /*\n     * PM / offset N*5: Interrupt N in 16-bit protected mode.\n     */\n    ptr = DOSVM_AllocCodeUMB( 5 * 256,\n                              0, &DOSVM_dpmi_segments->int16_sel );\n    for(i=0; i<256; i++) {\n        /*\n         * Each 16-bit interrupt handler is 5 bytes:\n         * 0xCD,<i>       = int <i> (interrupt)\n         * 0xCA,0x02,0x00 = ret 2   (16-bit far return and pop 2 bytes / eflags)\n         */\n        ptr[i * 5 + 0] = 0xCD;\n        ptr[i * 5 + 1] = i;\n        ptr[i * 5 + 2] = 0xCA;\n        ptr[i * 5 + 3] = 0x02;\n        ptr[i * 5 + 4] = 0x00;\n    }\n\n    // replace int 8 with a far ret so it doesn't cause a DF trap\n    ptr[8 * 5 + 0] = 0xCA;\n    ptr[8 * 5 + 1] = 0x02;\n    ptr[8 * 5 + 2] = 0x00;\n\n    /*\n     * PM / offset 0: Stub where __wine_call_from_16_regs returns.\n     * PM / offset 3: Stub which swaps back to 32-bit application code/stack.\n     * PM / offset 5: Stub which enables interrupts\n     */\n    ptr = DOSVM_AllocCodeUMB( sizeof(relay),\n                              0,  &DOSVM_dpmi_segments->relay_code_sel);\n    memcpy( ptr, relay, sizeof(relay) );\n\n    /*\n     * Space for 16-bit stack used by relay code.\n     */\n    ptr = DOSVM_AllocDataUMB( DOSVM_RELAY_DATA_SIZE,\n                              0, &DOSVM_dpmi_segments->relay_data_sel);\n    memset( ptr, 0, DOSVM_RELAY_DATA_SIZE );\n\n    /*\n     * As we store code in UMB we should make sure it is executable\n     */\n    VirtualProtect((void *)DOSVM_UMB_BOTTOM, DOSVM_UMB_TOP - DOSVM_UMB_BOTTOM, PAGE_EXECUTE_READWRITE, &old_prot);\n\n    event_notifier = CreateEventW(NULL, FALSE, FALSE, NULL);\n}\n"
  },
  {
    "path": "krnl386/error.c",
    "content": "/*\n * Log internal errors\n *\n * Copyright 1997 Andrew Taylor\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdlib.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <string.h>\n\n#include \"windef.h\"\n#include \"wine/winbase16.h\"\n#include \"wine/debug.h\"\n\n#include \"kernel16_private.h\"\n\n/* LogParamError and LogError values */\n\n/* Error modifier bits */\n#define ERR_WARNING             0x8000\n#define ERR_PARAM               0x4000\n\n#define ERR_SIZE_MASK           0x3000\n#define ERR_BYTE                0x1000\n#define ERR_WORD                0x2000\n#define ERR_DWORD               0x3000\n\n\n/* LogParamError() values */\n\n/* Generic parameter values */\n#define ERR_BAD_VALUE           0x6001\n#define ERR_BAD_FLAGS           0x6002\n#define ERR_BAD_INDEX           0x6003\n#define ERR_BAD_DVALUE          0x7004\n#define ERR_BAD_DFLAGS          0x7005\n#define ERR_BAD_DINDEX          0x7006\n#define ERR_BAD_PTR             0x7007\n#define ERR_BAD_FUNC_PTR        0x7008\n#define ERR_BAD_SELECTOR        0x6009\n#define ERR_BAD_STRING_PTR      0x700a\n#define ERR_BAD_HANDLE          0x600b\n\n/* KERNEL parameter errors */\n#define ERR_BAD_HINSTANCE       0x6020\n#define ERR_BAD_HMODULE         0x6021\n#define ERR_BAD_GLOBAL_HANDLE   0x6022\n#define ERR_BAD_LOCAL_HANDLE    0x6023\n#define ERR_BAD_ATOM            0x6024\n#define ERR_BAD_HFILE           0x6025\n\n/* USER parameter errors */\n#define ERR_BAD_HWND            0x6040\n#define ERR_BAD_HMENU           0x6041\n#define ERR_BAD_HCURSOR         0x6042\n#define ERR_BAD_HICON           0x6043\n#define ERR_BAD_HDWP            0x6044\n#define ERR_BAD_CID             0x6045\n#define ERR_BAD_HDRVR           0x6046\n\n/* GDI parameter errors */\n#define ERR_BAD_COORDS          0x7060\n#define ERR_BAD_GDI_OBJECT      0x6061\n#define ERR_BAD_HDC             0x6062\n#define ERR_BAD_HPEN            0x6063\n#define ERR_BAD_HFONT           0x6064\n#define ERR_BAD_HBRUSH          0x6065\n#define ERR_BAD_HBITMAP         0x6066\n#define ERR_BAD_HRGN            0x6067\n#define ERR_BAD_HPALETTE        0x6068\n#define ERR_BAD_HMETAFILE       0x6069\n\n\n/* LogError() values */\n\n/* KERNEL errors */\n#define ERR_GALLOC              0x0001\n#define ERR_GREALLOC            0x0002\n#define ERR_GLOCK               0x0003\n#define ERR_LALLOC              0x0004\n#define ERR_LREALLOC            0x0005\n#define ERR_LLOCK               0x0006\n#define ERR_ALLOCRES            0x0007\n#define ERR_LOCKRES             0x0008\n#define ERR_LOADMODULE          0x0009\n\n/* USER errors */\n#define ERR_CREATEDLG           0x0040\n#define ERR_CREATEDLG2          0x0041\n#define ERR_REGISTERCLASS       0x0042\n#define ERR_DCBUSY              0x0043\n#define ERR_CREATEWND           0x0044\n#define ERR_STRUCEXTRA          0x0045\n#define ERR_LOADSTR             0x0046\n#define ERR_LOADMENU            0x0047\n#define ERR_NESTEDBEGINPAINT    0x0048\n#define ERR_BADINDEX            0x0049\n#define ERR_CREATEMENU          0x004a\n\n/* GDI errors */\n#define ERR_CREATEDC            0x0080\n#define ERR_CREATEMETA          0x0081\n#define ERR_DELOBJSELECTED      0x0082\n#define ERR_SELBITMAP           0x0083\n\n\n#define ErrorString(manifest) { manifest, # manifest }\n\nstatic const struct {\n\tint constant;\n\tconst char *name;\n} ErrorStrings[] = {\n\n\tErrorString(ERR_GALLOC),\n\tErrorString(ERR_GREALLOC),\n\tErrorString(ERR_GLOCK),\n\tErrorString(ERR_LALLOC),\n\tErrorString(ERR_LREALLOC),\n\tErrorString(ERR_LLOCK),\n\tErrorString(ERR_ALLOCRES),\n\tErrorString(ERR_LOCKRES),\n\tErrorString(ERR_LOADMODULE),\n\tErrorString(ERR_CREATEDLG),\n\tErrorString(ERR_CREATEDLG2),\n\tErrorString(ERR_REGISTERCLASS),\n\tErrorString(ERR_DCBUSY),\n\tErrorString(ERR_CREATEWND),\n\tErrorString(ERR_STRUCEXTRA),\n\tErrorString(ERR_LOADSTR),\n\tErrorString(ERR_LOADMENU),\n\tErrorString(ERR_NESTEDBEGINPAINT),\n\tErrorString(ERR_BADINDEX),\n\tErrorString(ERR_CREATEMENU),\n\tErrorString(ERR_CREATEDC),\n\tErrorString(ERR_CREATEMETA),\n\tErrorString(ERR_DELOBJSELECTED),\n\tErrorString(ERR_SELBITMAP)\n};\n\nstatic const struct {\n\tint constant;\n\tconst char *name;\n} ParamErrorStrings[] = {\n\n\tErrorString(ERR_BAD_VALUE),\n\tErrorString(ERR_BAD_FLAGS),\n\tErrorString(ERR_BAD_INDEX),\n\tErrorString(ERR_BAD_DVALUE),\n\tErrorString(ERR_BAD_DFLAGS),\n\tErrorString(ERR_BAD_DINDEX),\n\tErrorString(ERR_BAD_PTR),\n\tErrorString(ERR_BAD_FUNC_PTR),\n\tErrorString(ERR_BAD_SELECTOR),\n\tErrorString(ERR_BAD_STRING_PTR),\n\tErrorString(ERR_BAD_HANDLE),\n\tErrorString(ERR_BAD_HINSTANCE),\n\tErrorString(ERR_BAD_HMODULE),\n\tErrorString(ERR_BAD_GLOBAL_HANDLE),\n\tErrorString(ERR_BAD_LOCAL_HANDLE),\n\tErrorString(ERR_BAD_ATOM),\n\tErrorString(ERR_BAD_HFILE),\n\tErrorString(ERR_BAD_HWND),\n\tErrorString(ERR_BAD_HMENU),\n\tErrorString(ERR_BAD_HCURSOR),\n\tErrorString(ERR_BAD_HICON),\n\tErrorString(ERR_BAD_HDWP),\n\tErrorString(ERR_BAD_CID),\n\tErrorString(ERR_BAD_HDRVR),\n\tErrorString(ERR_BAD_COORDS),\n\tErrorString(ERR_BAD_GDI_OBJECT),\n\tErrorString(ERR_BAD_HDC),\n\tErrorString(ERR_BAD_HPEN),\n\tErrorString(ERR_BAD_HFONT),\n\tErrorString(ERR_BAD_HBRUSH),\n\tErrorString(ERR_BAD_HBITMAP),\n\tErrorString(ERR_BAD_HRGN),\n\tErrorString(ERR_BAD_HPALETTE),\n\tErrorString(ERR_BAD_HMETAFILE)\n};\n\n#undef  ErrorString\n\n/***********************************************************************\n*\tGetErrorString (internal)\n*/\nstatic const char *GetErrorString(UINT16 uErr)\n{\n  static char buffer[80];\n  unsigned int n;\n\n  for (n = 0; n < ARRAY_SIZE(ErrorStrings); n++) {\n    if (uErr == ErrorStrings[n].constant)\n      return ErrorStrings[n].name;\n  }\n\n  sprintf(buffer, \"%x\", uErr);\n  return buffer;\n}\n\n\n/***********************************************************************\n*\tGetParamErrorString (internal)\n*/\nstatic const char *GetParamErrorString(UINT16 uErr) {\n\tstatic char buffer[80];\n\n\tif (uErr & ERR_WARNING) {\n\t\tstrcpy(buffer, \"ERR_WARNING | \");\n\t\tuErr &= ~ERR_WARNING;\n\t} else\n\t\tbuffer[0] = '\\0';\n\n\t{\n\t\tunsigned int n;\n\n\t\tfor (n = 0; n < ARRAY_SIZE(ParamErrorStrings); n++) {\n\t\t\tif (uErr == ParamErrorStrings[n].constant) {\n\t\t\t\tstrcat(buffer, ParamErrorStrings[n].name);\n\t\t\t\treturn buffer;\n\t\t\t}\n\t\t}\n\t}\n\n\tsprintf(buffer + strlen(buffer), \"%x\", uErr);\n\treturn buffer;\n}\n\n\n/***********************************************************************\n *\t\tSetLastError (KERNEL.147)\n */\nvoid WINAPI SetLastError16( DWORD error )\n{\n    SetLastError( error );\n}\n\n\n/***********************************************************************\n *\t\tGetLastError (KERNEL.148)\n */\nDWORD WINAPI GetLastError16(void)\n{\n    return GetLastError();\n}\n\n\n/***********************************************************************\n*\tLogError (KERNEL.324)\n*/\nVOID WINAPI LogError16(UINT16 uErr, LPVOID lpvInfo)\n{\n\tMESSAGE(\"(%s, %p)\\n\", GetErrorString(uErr), lpvInfo);\n}\n\n\n/***********************************************************************\n*\tLogParamError (KERNEL.325)\n*/\nvoid WINAPI LogParamError16(UINT16 uErr, FARPROC16 lpfn, LPVOID lpvParam)\n{\n\t/* FIXME: is it possible to get the module name/function\n\t * from the lpfn param?\n\t */\n\tMESSAGE(\"(%s, %p, %p)\\n\", GetParamErrorString(uErr), lpfn, lpvParam);\n}\n\n/***********************************************************************\n*\tK327 (KERNEL.327)\n*/\nvoid WINAPI HandleParamError( CONTEXT *context )\n{\n\tUINT16 uErr = LOWORD(context->Ebx);\n        FARPROC16 lpfn = (FARPROC16)MAKESEGPTR( context->SegCs, context->Eip );\n        LPVOID lpvParam = (LPVOID)MAKELONG( LOWORD(context->Eax), LOWORD(context->Ecx) );\n\n\tLogParamError16( uErr, lpfn, lpvParam );\n\n\tif (!(uErr & ERR_WARNING))\n\t{\n\t\t/* Abort current procedure: Unwind stack frame and jump\n\t\t   to error handler (location at [bp-2]) */\n\n\t\tWORD *stack = MapSL( MAKESEGPTR( context->SegSs, LOWORD(context->Ebp) ));\n\t\tcontext->Esp = LOWORD(context->Ebp) - 2;\n\t\tcontext->Ebp = stack[0] & 0xfffe;\n\n\t\tcontext->Eip = stack[-1];\n\n\t\tcontext->Eax = context->Ecx = context->Edx = 0;\n\t\tcontext->SegEs = 0;\n\t}\n}\n"
  },
  {
    "path": "krnl386/file.c",
    "content": "/*\n * File handling functions\n *\n * Copyright 1993 John Burton\n * Copyright 1996 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n * TODO:\n *    Fix the CopyFileEx methods to implement the \"extended\" functionality.\n *    Right now, they simply call the CopyFile method.\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdarg.h>\n#include <stdio.h>\n#include <assert.h>\n\n#include \"winerror.h\"\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winternl.h\"\n#include \"wine/winbase16.h\"\n#include \"kernel16_private.h\"\n#include \"wine/unicode.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(file);\n\n#include <shlwapi.h>\n#include <imagehlp.h>\n#include <aclapi.h>\n#pragma comment(lib, \"imagehlp.lib\")\n#pragma comment(lib, \"shlwapi.lib\")\n#ifdef ENABLEREDIRECTSYSTEMDIR\nBOOL EnableRedirectSystemDir = TRUE;\n#else\nBOOL EnableRedirectSystemDir = FALSE;\n#endif\nconst char *GetRedirectWindowsDir();\nstatic void RedirectPrivateProfileStringWindowsDir(LPCSTR filename, LPCSTR output);\n\nNTSYSAPI\nNTSTATUS\nNTAPI\nNtAccessCheck(IN PSECURITY_DESCRIPTOR SecurityDescriptor,\n    IN HANDLE TokenHandle,\n    IN ACCESS_MASK DesiredAccess,\n    IN PGENERIC_MAPPING GenericMapping,\n    OUT PPRIVILEGE_SET PrivilegeSet OPTIONAL,\n    IN OUT PULONG PrivilegeSetLength,\n    OUT PACCESS_MASK GrantedAccess,\n    OUT PNTSTATUS AccessStatus);\nBOOL can_write_directory(LPCSTR path)\n{\n    HANDLE hToken = INVALID_HANDLE_VALUE, hTokenImpersonation = INVALID_HANDLE_VALUE;\n    PSECURITY_DESCRIPTOR pSecurityDescriptor = NULL;\n    GENERIC_MAPPING genericMapping = { 0 };\n    PRIVILEGE_SET privilegeSet = { 0 };\n    NTSTATUS accessStatus = 0;\n    DWORD dwDesiredAccess = FILE_GENERIC_WRITE;\n    DWORD dwSize = sizeof(PRIVILEGE_SET);\n    DWORD dwGrantedAccess = 0;\n    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_DUPLICATE, &hToken))\n        goto fail;\n    if (!DuplicateTokenEx(hToken, GENERIC_ALL, NULL, SecurityImpersonation, TokenImpersonation, &hTokenImpersonation))\n        goto fail;\n    if (GetNamedSecurityInfoA(path, SE_FILE_OBJECT, OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION, NULL, NULL, NULL, NULL, &pSecurityDescriptor) != ERROR_SUCCESS)\n        goto fail;\n    genericMapping.GenericRead = FILE_GENERIC_READ;\n    genericMapping.GenericWrite = FILE_GENERIC_WRITE;\n    genericMapping.GenericExecute = FILE_GENERIC_EXECUTE;\n    genericMapping.GenericAll = FILE_ALL_ACCESS;\n    MapGenericMask(&dwDesiredAccess, &genericMapping);\n    /* Because app compatibility layer hooks AccessCheck and returns incorrect result, call NtAccessCheck. (NS_WRPMitigation::APIHook_AccessCheck) */\n    if (!NT_SUCCESS(NtAccessCheck(pSecurityDescriptor, hTokenImpersonation, dwDesiredAccess, &genericMapping, &privilegeSet, &dwSize, &dwGrantedAccess, &accessStatus)))\n        goto fail;\nfail:\n    CloseHandle(hToken);\n    CloseHandle(hTokenImpersonation);\n    LocalFree(pSecurityDescriptor);\n    return NT_SUCCESS(accessStatus);\n}\nBOOL is_readonly_directory(LPCSTR path)\n{\n    DWORD attr = GetFileAttributesA(path);\n    if (attr == -1)\n        return FALSE;\n    if (GetDriveTypeA(path) == DRIVE_CDROM)\n        return TRUE;\n    return (attr & FILE_ATTRIBUTE_READONLY) == FILE_ATTRIBUTE_READONLY;\n}\n__declspec(dllexport) LPCSTR RedirectDriveRoot(LPCSTR path, LPSTR to, size_t max_len, BOOL silence)\n{\n    LPCSTR path_old = path;\n    enum WRITABLE_CACHE\n    {\n        NOTCACHED,\n        ALLOWED,\n        DENIED,\n        READONLY,\n    };\n    static enum WRITABLE_CACHE writable_cache[26];\n    char drive = path ? path[0] : 0;\n    char root[4] = { drive, ':', '\\\\', 0 };\n    char drive_buf[5] = { '.', '.', '\\\\', drive, 0 };\n    if (!path)\n        return NULL;\n    if (!(path[0] && path[1] == ':' && (path[2] == 0 || path[2] == '\\\\' || path[2] == '/')))\n        return path;\n    if (!((path[0] >= 'A' && path[0] <= 'Z') || (path[0] >= 'a' && path[0] <= 'z')))\n        return path;\n    if (drive >= 'a' && drive <= 'z')\n    {\n        drive -= 'a' - 'A';\n    }\n    path += 2;\n    if (path[0])\n        path += 1;\n    if (strchr(path, '\\\\'))\n        return path_old;\n    if (strchr(path, '/'))\n        return path_old;\n    if (writable_cache[drive - 'A'] == NOTCACHED)\n    {\n        if (is_readonly_directory(root))\n        {\n            writable_cache[drive - 'A'] = READONLY;\n            return path_old;\n        }\n        if (can_write_directory(root))\n        {\n            writable_cache[drive - 'A'] = ALLOWED;\n            return path_old;\n        }\n        else\n        {\n            writable_cache[drive - 'A'] = DENIED;\n        }\n    }\n    else\n    {\n        if (writable_cache[drive - 'A'] == ALLOWED || writable_cache[drive - 'A'] == READONLY)\n        {\n            return path_old;\n        }\n    }\n\n    PathCombineA(to, GetRedirectWindowsDir(), drive_buf);\n    CreateDirectoryA(to, NULL);\n    PathCombineA(to, to, path);\n    if (!silence)\n    {\n        ERR(\"%s => %s\\n\", path_old, to);\n    }\n    return to;\n}\n/* buf: X:\\XXX\\YYY\\C\\ZZZ => C:\\ZZZ */\nvoid UnredirectDriveRoot(LPSTR buf, SIZE_T buf_len)\n{\n    char drive_root[MAX_PATH];\n    PathCombineA(drive_root, GetRedirectWindowsDir(), \"..\\\\\");\n    if (memcmp(drive_root, buf, min(strlen(buf), strlen(drive_root))) == 0)\n    {\n        LPCSTR drive_dir = buf + strlen(drive_root);\n        if (drive_dir[0] >= 'A' && drive_dir[0] <= 'Z' && drive_dir[1] == '\\\\')\n        {\n            buf[0] = drive_dir[0];\n            buf[1] = ':';\n            buf[2] = '\\\\';\n            memmove(buf + 3, drive_dir + 2, strlen(drive_dir + 2) + 1);\n        }\n        return;\n    }\n    return;\n}\n\n/*\n * C:\\WINDOWS-> redirected windows dir\n * C:\\WINDOWS\\SYSTEM32 -> redirected windows dir\\SYSTEM\n */\n__declspec(dllexport) LPCSTR RedirectSystemDir(LPCSTR path, LPSTR to, size_t max_len)\n{\n\tchar dirbuf[240];\n\tif (!EnableRedirectSystemDir) return path;\n\tchar buf[MAX_PATH];\n\tif (!PathCanonicalizeA(buf, path))\n\t{\n\t\treturn path;\n\t}\n\tchar bufwdir[MAX_PATH];\n    GetWindowsDirectoryA(bufwdir, MAX_PATH);\n    size_t windir_len = strlen(bufwdir);\n\tif (PathCommonPrefixA(buf, bufwdir, NULL) < windir_len)\n\t{\n\t\treturn path;\n\t}\n\tif (!PathAppendA(bufwdir, \"system32\"))\n\t{\n\t\treturn path;\n\t}\n\t//system32->system\n\tif (PathCommonPrefixA(buf, bufwdir, NULL) >= strlen(bufwdir))\n\t{\n\t\tmemcpy(buf + strlen(bufwdir) - 2, buf + strlen(bufwdir), strlen(buf) - strlen(bufwdir) + 1);\n\t}\n\t//.\\windir\\ \n\tdirbuf[0] = '\\0';\n\tchar *dir = &dirbuf[0];\n\tGetModuleFileNameA(GetModuleHandleA(\"otvdm.exe\"), dir, MAX_PATH);\n\tchar *file = PathFindFileNameA(dir);\n\tif (file != dir) *file = '\\0';\n\tif (!PathAppendA(dir, GetRedirectWindowsDir()))\n\t\treturn path;\n\tif (!PathAppendA(dir, buf + windir_len))\n\t\treturn path;\n\tif (strlen(dir) >= max_len)\n\t\treturn path;\n\tfile = PathFindFileNameA(dir);\n\tchar f = *file;\n\t*file = '\\0';\n\tGetShortPathNameA(dir, to, max_len);\n\t*file = f;\n\tPathCombineA(to, to, file);\n\treturn to;\n}\n\nNTSYSAPI NTSTATUS NTAPI RtlUpcaseUnicodeStringToOemString(\n    POEM_STRING      DestinationString,\n    PCUNICODE_STRING SourceString,\n    BOOLEAN          AllocateDestinationString\n);\nstatic LPWSTR strdupAtoW(LPCSTR str)\n{\n    LPWSTR ret;\n    INT len;\n\n    if (!str) return NULL;\n    len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);\n    ret = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));\n    if (ret) MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len);\n    return ret;\n}\nstatic LPWSTR strdupOEMtoW(LPCSTR str)\n{\n    LPWSTR ret;\n    INT len;\n\n    if (!str) return NULL;\n    len = MultiByteToWideChar(CP_OEMCP, 0, str, -1, NULL, 0);\n    ret = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));\n    if (ret) MultiByteToWideChar(CP_OEMCP, 0, str, -1, ret, len);\n    return ret;\n}\nstatic LPCSTR strdupWtoOEM(LPCWSTR str)\n{\n    LPSTR ret;\n    INT len;\n\n    if (!str) return NULL;\n    len = WideCharToMultiByte(CP_OEMCP, 0, str, -1, NULL, 0, NULL, NULL);\n    ret = HeapAlloc(GetProcessHeap(), 0, len * sizeof(CHAR));\n    if (ret) WideCharToMultiByte(CP_OEMCP, 0, str, -1, ret, len, NULL, NULL);\n    return ret;\n}\n\n#define DOS_TABLE_SIZE 256\n\nstatic HANDLE *FILE_GetTable()\n{\n    static DWORD dos_handles_index = NULL;\n    if (!dos_handles_index) dos_handles_index = TlsAlloc();\n    HANDLE *dos_handles = TlsGetValue(dos_handles_index);\n    if (!dos_handles)\n    {\n        dos_handles = (HANDLE *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(HANDLE)*256);\n        TlsSetValue(dos_handles_index, dos_handles);\n    }\n    return dos_handles;\n}\n\n// only call at task exit\nvoid FILE_CloseAll()\n{\n    HANDLE *dos_handles = FILE_GetTable();\n    for (int i = 0; i < 256; i++)\n    {\n        if (dos_handles[i])\n            CloseHandle(dos_handles[i]);\n    }\n    HeapFree(GetProcessHeap(), 0, dos_handles);\n}\n\n/***********************************************************************\n *           FILE_InitProcessDosHandles\n *\n * Allocates the default DOS handles for a process. Called either by\n * Win32HandleToDosFileHandle below or by the DOSVM stuff.\n */\nstatic void FILE_InitProcessDosHandles( void )\n{\n    HANDLE hStdInput, hStdOutput, hStdError, hNull;\n    static BOOL init_done /* = FALSE */;\n    HANDLE cp = GetCurrentProcess();\n\n    if (init_done) return;\n    HANDLE *dos_handles = FILE_GetTable();\n    init_done = TRUE;\n    hStdInput = GetStdHandle(STD_INPUT_HANDLE);\n    hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);\n    hStdError = GetStdHandle(STD_ERROR_HANDLE);\n    hNull = CreateFileA(\"NUL\", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);\n    /* Invalid console handles need to translate to real DOS handles in a new process */\n    if (!hStdInput) hStdInput = hNull;\n    if (!hStdOutput) hStdOutput = hNull;\n    if (!hStdError) hStdError = hNull;\n    DuplicateHandle(cp, hStdInput, cp, &dos_handles[0], 0, TRUE, DUPLICATE_SAME_ACCESS);\n    DuplicateHandle(cp, hStdOutput, cp, &dos_handles[1], 0, TRUE, DUPLICATE_SAME_ACCESS);\n    DuplicateHandle(cp, hStdError, cp, &dos_handles[2], 0, TRUE, DUPLICATE_SAME_ACCESS);\n    DuplicateHandle(cp, hStdError, cp, &dos_handles[3], 0, TRUE, DUPLICATE_SAME_ACCESS);\n    DuplicateHandle(cp, hStdError, cp, &dos_handles[4], 0, TRUE, DUPLICATE_SAME_ACCESS);\n    CloseHandle(hNull);\n}\n\n/***********************************************************************\n *           DosFileHandleToWin32Handle   (KERNEL32.20)\n *\n * Return the Win32 handle for a DOS handle.\n *\n * Note: this is not exactly right, since on Win95 the Win32 handles\n *       are on top of DOS handles and we do it the other way\n *       around. Should be good enough though.\n */\nHANDLE WINAPI DosFileHandleToWin32Handle( HFILE handle )\n{\n    HFILE16 hfile = (HFILE16)handle;\n    if (hfile < 5) FILE_InitProcessDosHandles();\n    HANDLE *dos_handles = FILE_GetTable();\n    if ((hfile >= DOS_TABLE_SIZE) || !dos_handles[hfile])\n    {\n        SetLastError( ERROR_INVALID_HANDLE );\n        return INVALID_HANDLE_VALUE;\n    }\n    return dos_handles[hfile];\n}\n\n/***********************************************************************\n *           Win32HandleToDosFileHandle   (KERNEL32.21)\n *\n * Allocate a DOS handle for a Win32 handle. The Win32 handle is no\n * longer valid after this function (even on failure).\n *\n * Note: this is not exactly right, since on Win95 the Win32 handles\n *       are on top of DOS handles and we do it the other way\n *       around. Should be good enough though.\n */\nHFILE WINAPI Win32HandleToDosFileHandle( HANDLE handle )\n{\n    int i;\n\n    if (!handle || (handle == INVALID_HANDLE_VALUE))\n        return HFILE_ERROR;\n    HANDLE *dos_handles = FILE_GetTable();\n    for (i = 5; i < DOS_TABLE_SIZE; i++)\n        if (dos_handles[i] == handle) return (HFILE)i;\n    for (i = 5; i < DOS_TABLE_SIZE; i++)\n        if (!dos_handles[i])\n        {\n            dos_handles[i] = handle;\n            TRACE(\"Got %d for h32 %p\\n\", i, handle );\n            return (HFILE)i;\n        }\n    CloseHandle( handle );\n    SetLastError( ERROR_TOO_MANY_OPEN_FILES );\n    return HFILE_ERROR;\n}\n\n/***********************************************************************\n *           DisposeLZ32Handle   (KERNEL32.22)\n *\n * Note: this is not entirely correct, we should only close the\n *       32-bit handle and not the 16-bit one, but we cannot do\n *       this because of the way our DOS handles are implemented.\n *       It shouldn't break anything though.\n */\nBOOL16 WINAPI DeleteDosFileHandle( HANDLE handle )\n{\n    int i;\n\n    if (!handle || (handle == INVALID_HANDLE_VALUE)) return;\n\n    HANDLE *dos_handles = FILE_GetTable();\n    for (i = 5; i < DOS_TABLE_SIZE; i++)\n        if (dos_handles[i] == handle)\n        {\n            dos_handles[i] = 0;\n            return TRUE;\n        }\n    return FALSE;\n}\n\n/***********************************************************************\n *           GetProfileInt   (KERNEL.57)\n */\nUINT16 WINAPI GetProfileInt16( LPCSTR section, LPCSTR entry, INT16 def_val )\n{\n    return GetPrivateProfileInt16( section, entry, def_val, \"win.ini\" );\n}\n\nint CALLBACK enum_ini_font(const LOGFONT *lf, const TEXTMETRIC *tm, DWORD type, LPARAM lParam)\n{\n    char *name = (char *)lParam;\n    return strncmp(name, lf->lfFaceName, strlen(lf->lfFaceName));\n}\n\n/***********************************************************************\n *           GetProfileString   (KERNEL.58)\n */\nINT16 WINAPI GetProfileString16( LPCSTR section, LPCSTR entry, LPCSTR def_val,\n                                 LPSTR buffer, UINT16 len )\n{\n    char tmp[256];\n    int tmplen = 256;\n    if (section && entry && !stricmp(section, \"devices\") && !stricmp(entry, \"DefaultPrinter\"))\n    {\n        if (GetDefaultPrinterA(tmp, &tmplen))\n            entry = tmp;\n    }\n    INT16 ret = GetPrivateProfileString16( section, entry, def_val,\n                                      buffer, len, \"win.ini\" );\n    if (ret && section && entry && !stricmp(section, \"windows\") && !stricmp(entry, \"device\"))\n    {\n        char *comma = strchr(buffer, ',');\n        if (!comma && ((len - 1) == ret))\n        {\n            ret = GetPrivateProfileString16( section, entry, def_val,\n                                      tmp, tmplen, \"win.ini\" );\n            comma = strchr(tmp, ',');\n            if (comma && (len > (strlen(comma) + 14)))\n            {\n                strcpy(buffer, \"DefaultPrinter\");\n                strcpy(buffer + 14, comma);\n            }\n        }\n        else if (comma && ((comma - buffer) > 32))\n        {\n            strcpy(buffer, \"DefaultPrinter\");\n            strcpy(buffer + 14, comma);\n        }\n        ret = strlen(buffer);\n    }\n    else if (!ret && section && !stricmp(section, \"fonts\"))\n    {\n        LOGFONTA lf;\n        HDC hdc = GetDC(0);\n        lf.lfCharSet = DEFAULT_CHARSET;\n        lf.lfPitchAndFamily = 0;\n        lf.lfFaceName[0] = 0;\n        ret = EnumFontFamiliesExA(hdc, &lf, enum_ini_font, entry, 0);\n        ReleaseDC(0, hdc);\n        if (!ret)\n            strncpy(buffer, \"vgaoem.fon\", len); // actual filename is unavailable\n        return !ret ? strnlen(buffer, len) : 0;\n    }\n    else if (ret && !PathIsRelativeA(buffer) && PathFileExistsA(buffer))\n    {\n        int cnt = GetShortPathNameA(buffer, tmp, len <= 256 ? len : 256);\n        if (cnt)\n            strcpy(buffer, tmp);\n    }\n    return ret;\n}\n\n/***********************************************************************\n *           WriteProfileString   (KERNEL.59)\n */\nBOOL16 WINAPI WriteProfileString16( LPCSTR section, LPCSTR entry,\n                                    LPCSTR string )\n{\n    return WritePrivateProfileString16( section, entry, string, \"win.ini\" );\n}\n\n\n/* get the search path for the current module; helper for OpenFile16 */\n/*static */char *get_search_path(void)\n{\n    UINT len, i;\n    char *ret, *p, module[OFS_MAXPATHNAME];\n\n    module[0] = 0;\n    if (GetCurrentTask() && GetModuleFileName16( GetCurrentTask(), module, sizeof(module) ))\n    {\n        if (!(p = strrchr( module, '\\\\' ))) p = module;\n        *p = 0;\n    }\n    char windir[MAX_PATH];\n    char windir2[MAX_PATH];\n    char realwinsys[MAX_PATH];\n    char *windir3;\n    GetWindowsDirectoryA(windir, MAX_PATH);\n    windir3 = RedirectSystemDir(windir, windir2, MAX_PATH);\n    char vdmpath[MAX_PATH];\n    GetModuleFileNameA(GetModuleHandleA(NULL), vdmpath, MAX_PATH);\n    PathRemoveFileSpecA(vdmpath);\n    GetShortPathNameA(vdmpath, vdmpath, MAX_PATH);\n    strcpy(realwinsys, windir);\n    strcat(realwinsys, \"\\\\SYSTEM\");\n\n    len = (strlen(vdmpath) + 1 + 2 +                                              /* search order: first current dir */\n           GetSystemDirectory16( NULL, 0 ) + 1 +            /* then system dir */\n           strlen(windir3) + 1 +            /* then windows dir */\n           strlen( module ) + 1 +                           /* then module path */\n           GetEnvironmentVariableA( \"PATH16\", NULL, 0 ) + 1 + /* then look in PATH */\n           strlen(realwinsys) + 1); /* then the real windows system dir */\n    if (!(ret = HeapAlloc( GetProcessHeap(), 0, len ))) return NULL;\n    strcpy(ret, \".;\");\n    p = ret + 2;\n    strcpy(p, vdmpath);\n    p += strlen(vdmpath);\n    *p++ = ';';\n\n    GetSystemDirectory16( p, ret + len - p );\n    p += strlen( p );\n    *p++ = ';';\n    strcpy(p, windir3);//GetWindowsDirectoryA( p, ret + len - p );\n    p += strlen( p );\n    *p++ = ';';\n    if (module[0])\n    {\n        strcpy( p, module );\n        p += strlen( p );\n        *p++ = ';';\n    }\n    i = GetEnvironmentVariableA(\"PATH16\", p, ret + len - p);\n    if (i)\n    {\n        p += i;\n        *p++ = ';';\n    }\n    strcpy(p, realwinsys);\n    return ret;\n}\nchar *krnl386_get_search_path(void)\n{\n    return get_search_path();\n}\n#define STRSAFE_NO_DEPRECATE\n#include <strsafe.h>\nLPCSTR krnl386_search_executable_file(LPCSTR lpFile, LPSTR buf, SIZE_T size, BOOL search_builtin)\n{\n    char *path = krnl386_get_search_path();\n    LPCSTR result = lpFile;\n    if (SearchPathA(path, lpFile, NULL, size, buf, NULL))\n    {\n        result = buf;\n    }\n    else\n    {\n        char dlldir[MAX_PATH];\n        GetDllDirectoryA(MAX_PATH, dlldir);\n        if (SearchPathA(dlldir, lpFile, NULL, size, buf, NULL))\n        {\n            result = buf;\n        }\n    }\n    if (result == lpFile && search_builtin)\n    {\n        char filewin32[MAX_PATH];\n        LPSTR ext = PathFindExtensionA(lpFile);\n        if (ext && !stricmp(ext, \".dll\") || !stricmp(ext, \".exe\") || !stricmp(ext, \".drv\"))\n        {\n            filewin32[0] = '\\0';\n            if (StringCbCatA(filewin32, ARRAYSIZE(filewin32), lpFile) == S_OK &&\n                StringCbCatA(filewin32, ARRAYSIZE(filewin32), \"16\") == S_OK)\n            {\n                if (SearchPathA(path, filewin32, NULL, size, buf, NULL))\n                {\n                    result = buf;\n                }\n                else\n                {\n                    char dlldir[MAX_PATH];\n                    GetDllDirectoryA(MAX_PATH, dlldir);\n                    if (SearchPathA(dlldir, filewin32, NULL, size, buf, NULL))\n                    {\n                        result = buf;\n                    }\n                }\n            }\n        }\n    }\n    HeapFree(GetProcessHeap(), 0, path);\n    return result;\n}\n\n/***********************************************************************\n *              create_file_OF\n *\n * Wrapper for CreateFile that takes OF_* mode flags.\n */\nstatic HANDLE create_file_OF( LPCWSTR path, INT mode )\n{\n    DWORD access, sharing, creation;\n\n    if (mode & OF_CREATE)\n    {\n        creation = CREATE_ALWAYS;\n        access = GENERIC_READ | GENERIC_WRITE;\n    }\n    else\n    {\n        creation = OPEN_EXISTING;\n        switch(mode & 0x03)\n        {\n        case OF_READ:      access = GENERIC_READ; break;\n        case OF_WRITE:     access = GENERIC_WRITE; break;\n        case OF_READWRITE: access = GENERIC_READ | GENERIC_WRITE; break;\n        default:           access = 0; break;\n        }\n    }\n\n    switch(mode & 0x70)\n    {\n    case OF_SHARE_EXCLUSIVE:  sharing = 0; break;\n    case OF_SHARE_DENY_WRITE: sharing = FILE_SHARE_READ; break;\n    case OF_SHARE_DENY_READ:  sharing = FILE_SHARE_WRITE; break;\n    case OF_SHARE_DENY_NONE:\n    case OF_SHARE_COMPAT:\n    default:                  sharing = FILE_SHARE_READ | FILE_SHARE_WRITE; break;\n    }\n    return CreateFileW( path, access, sharing | FILE_SHARE_DELETE, NULL, creation, FILE_ATTRIBUTE_NORMAL, 0 );\n}\n/***********************************************************************\n *           OpenFile   (KERNEL.74)\n *           OpenFileEx (KERNEL.360)\n */\nHFILE16 WINAPI WIN16_OpenFile16( LPCSTR name, SEGPTR ofs, UINT16 mode )\n{\n    CURRENT_STACK16->es = SELECTOROF(ofs);\n    return OpenFile16(name, MapSL(ofs), mode);\n}\n\nHFILE16 WINAPI OpenFile16( LPCSTR name, OFSTRUCT *ofs, UINT16 mode )\n{\n    HFILE hFileRet = 0;\n    HANDLE handle = INVALID_HANDLE_VALUE;\n    FILETIME filetime;\n    WORD filedatetime[2];\n    OEM_STRING oem;\n    UNICODE_STRING uni;\n    FILETIME lfiletime;\n    WCHAR pathname[sizeof(ofs->szPathName)];\n    LPWSTR namew;\n    const WCHAR *p, *filename;\n    CHAR buf[OFS_MAXPATHNAME];\n    CHAR redir[MAX_PATH];\n    BOOL result;\n    oem.Buffer = ofs->szPathName;\n    oem.Length = 0;\n    oem.MaximumLength = sizeof(ofs->szPathName);\n\n    if (!ofs) return HFILE_ERROR;\n\n    TRACE(\"%s %s %s %s%s%s%s%s%s%s%s%s\\n\",debugstr_a(name),\n          ((mode & 0x3 )==OF_READ)?\"OF_READ\":\n          ((mode & 0x3 )==OF_WRITE)?\"OF_WRITE\":\n          ((mode & 0x3 )==OF_READWRITE)?\"OF_READWRITE\":\"unknown\",\n          ((mode & 0x70 )==OF_SHARE_COMPAT)?\"OF_SHARE_COMPAT\":\n          ((mode & 0x70 )==OF_SHARE_DENY_NONE)?\"OF_SHARE_DENY_NONE\":\n          ((mode & 0x70 )==OF_SHARE_DENY_READ)?\"OF_SHARE_DENY_READ\":\n          ((mode & 0x70 )==OF_SHARE_DENY_WRITE)?\"OF_SHARE_DENY_WRITE\":\n          ((mode & 0x70 )==OF_SHARE_EXCLUSIVE)?\"OF_SHARE_EXCLUSIVE\":\"unknown\",\n          ((mode & OF_PARSE )==OF_PARSE)?\"OF_PARSE \":\"\",\n          ((mode & OF_DELETE )==OF_DELETE)?\"OF_DELETE \":\"\",\n          ((mode & OF_VERIFY )==OF_VERIFY)?\"OF_VERIFY \":\"\",\n          ((mode & OF_SEARCH )==OF_SEARCH)?\"OF_SEARCH \":\"\",\n          ((mode & OF_CANCEL )==OF_CANCEL)?\"OF_CANCEL \":\"\",\n          ((mode & OF_CREATE )==OF_CREATE)?\"OF_CREATE \":\"\",\n          ((mode & OF_PROMPT )==OF_PROMPT)?\"OF_PROMPT \":\"\",\n          ((mode & OF_EXIST )==OF_EXIST)?\"OF_EXIST \":\"\",\n          ((mode & OF_REOPEN )==OF_REOPEN)?\"OF_REOPEN \":\"\"\n        );\n    name = RedirectSystemDir(name, redir, MAX_PATH);\n\n    if ((mode & (OF_CREATE | OF_SHARE_EXCLUSIVE)) == (OF_CREATE | OF_SHARE_EXCLUSIVE))\n    {\n        mode &= ~OF_SHARE_EXCLUSIVE;\n    }\n\n    {\n        ofs->cBytes = sizeof(OFSTRUCT);\n        ofs->nErrCode = 0;\n        if (mode & OF_REOPEN) name = ofs->szPathName;\n\n        if (!name)\n        {\n            return HFILE_ERROR;\n        }\n        name = RedirectDriveRoot(name, buf, ARRAY_SIZE(buf), FALSE);\n        if (mode & OF_REOPEN)\n            namew = strdupOEMtoW(name);\n        else\n            namew = strdupAtoW(name);\n\n        /* the watcom 10.6 IDE relies on a valid path returned in ofs->szPathName\n           Are there any cases where getting the path here is wrong?\n           Uwe Bonnes 1997 Apr 2 */\n        if (!*namew)\n        {\n            /* empty path => cwd */\n            result = GetCurrentDirectoryW(sizeof(ofs->szPathName), pathname);\n            if (result)\n            {\n                size_t len = wcslen(pathname);\n                if (len < sizeof(ofs->szPathName) - 1 && pathname[len - 1] != '\\\\' && pathname[len - 1] != '/')\n                {\n                    pathname[len] = '\\\\';\n                    pathname[len + 1] = 0;\n                }\n            }\n            if (result && !(mode & OF_PARSE))\n            {\n                SetLastError(ERROR_FILE_NOT_FOUND);\n                RtlInitUnicodeString(&uni, pathname);\n                if (!NT_SUCCESS(RtlUpcaseUnicodeStringToOemString(&oem, &uni, FALSE)))\n                {\n                    ERR(\"RtlUpcaseUnicodeStringToOemString failed\\n\");\n                    ofs->szPathName[0] = '\\0';\n                }\n                goto error;\n            }\n        }\n        else\n        {\n            result = GetFullPathNameW(namew, sizeof(ofs->szPathName), pathname, NULL);\n        }\n        if (!result)\n        {\n            RtlInitUnicodeString(&uni, namew);\n            if (!NT_SUCCESS(RtlUpcaseUnicodeStringToOemString(&oem, &uni, FALSE)))\n            {\n                ERR(\"RtlUpcaseUnicodeStringToOemString failed\\n\");\n                ofs->szPathName[0] = '\\0';\n            }\n            goto error;\n        }\n\n        /* If OF_SEARCH is set, ignore the given path */\n\n        filename = namew;\n        if ((mode & OF_SEARCH) && !(mode & OF_REOPEN))\n        {\n            /* First try the file name as is */\n            if (GetFileAttributesW( filename ) != INVALID_FILE_ATTRIBUTES) filename = NULL;\n            else\n            {\n                /* Now remove the path */\n                if (filename[0] && (filename[1] == ':')) filename += 2;\n                if ((p = wcsrchr( filename, '\\\\' ))) filename = p + 1;\n                if ((p = wcsrchr( filename, '/' ))) filename = p + 1;\n                if (!filename[0])\n                {\n                    RtlInitUnicodeString(&uni, filename);\n                    if (!NT_SUCCESS(RtlUpcaseUnicodeStringToOemString(&oem, &uni, FALSE)))\n                    {\n                        ERR(\"RtlUpcaseUnicodeStringToOemString failed\\n\");\n                        ofs->szPathName[0] = '\\0';\n                    }\n                    SetLastError( ERROR_FILE_NOT_FOUND );\n                    goto error;\n                }\n            }\n        }\n\n        /* Now look for the file */\n\n        if (!(mode & OF_PARSE) && !(mode & OF_CREATE) && filename)\n        {\n            BOOL found;\n            char *path = get_search_path();\n            WCHAR *pathw;\n\n            if (!path)\n            {\n                RtlInitUnicodeString(&uni, filename);\n                if (!NT_SUCCESS(RtlUpcaseUnicodeStringToOemString(&oem, &uni, FALSE)))\n                {\n                    ERR(\"RtlUpcaseUnicodeStringToOemString failed\\n\");\n                    ofs->szPathName[0] = '\\0';\n                }\n                goto error;\n            }\n            if (!wcsicmp(pathname, L\"\\\\\\\\.\\\\nul\"))\n                found = TRUE;\n            else\n            {\n                pathw = strdupAtoW(path);\n                found = SearchPathW( pathw, filename, NULL, sizeof(ofs->szPathName),\n                                     pathname, NULL );\n                HeapFree( GetProcessHeap(), 0, path );\n                HeapFree( GetProcessHeap(), 0, pathw );\n            }\n            if (!found)\n            {\n                RtlInitUnicodeString(&uni, pathname);\n                if (!NT_SUCCESS(RtlUpcaseUnicodeStringToOemString(&oem, &uni, FALSE)))\n                {\n                    ERR(\"RtlUpcaseUnicodeStringToOemString failed\\n\");\n                    ofs->szPathName[0] = '\\0';\n                }\n                goto error;\n            }\n        }\n\n        TRACE(\"found %s\\n\", debugstr_w(pathname) );\n\n        if (mode & OF_DELETE)\n        {\n            RtlInitUnicodeString(&uni, pathname);\n            if (!NT_SUCCESS(RtlUpcaseUnicodeStringToOemString(&oem, &uni, FALSE)))\n            {\n                ERR(\"RtlUpcaseUnicodeStringToOemString failed\\n\");\n                ofs->szPathName[0] = '\\0';\n            }\n            if (!DeleteFileW(pathname)) goto error;\n            TRACE(\"(%s): OF_DELETE return = OK\\n\", name);\n            HeapFree(GetProcessHeap(), 0, namew);\n            return 1;\n        }\n\n        GetShortPathNameW(pathname, pathname, ARRAY_SIZE(pathname));\n        if (pathname[0] && pathname[wcslen(pathname) - 1] == '\\\\')\n        {\n            SetLastError(ERROR_FILE_NOT_FOUND);\n            handle = INVALID_HANDLE_VALUE;\n            hFileRet = HFILE_ERROR16;\n        }\n        else if (!(mode & OF_PARSE))\n        {\n            handle = create_file_OF(pathname, mode);\n        }\n        RtlInitUnicodeString(&uni, pathname);\n        if (!NT_SUCCESS(RtlUpcaseUnicodeStringToOemString(&oem, &uni, FALSE)))\n        {\n            ERR(\"RtlUpcaseUnicodeStringToOemString failed\\n\");\n            ofs->szPathName[0] = '\\0';\n        }\n        UnredirectDriveRoot(ofs->szPathName, ARRAY_SIZE(ofs->szPathName));\n        if (!(mode & OF_PARSE))\n        {\n            if (handle == INVALID_HANDLE_VALUE) goto error;\n        }\n\n        if (mode & OF_PARSE)\n        {\n            SYSTEMTIME systime;\n            GetSystemTime(&systime);\n            SystemTimeToFileTime(&systime, &filetime);\n        }\n        else\n        {\n            GetFileTime( handle, NULL, NULL, &filetime );\n        }\n        FileTimeToLocalFileTime(&filetime, &lfiletime);\n        FileTimeToDosDateTime( &lfiletime, &filedatetime[0], &filedatetime[1] );\n        if ((mode & OF_VERIFY) && (mode & OF_REOPEN))\n        {\n            if (ofs->Reserved1 != filedatetime[0] || ofs->Reserved2 != filedatetime[1] )\n            {\n                CloseHandle( handle );\n                WARN(\"(%s): OF_VERIFY failed\\n\", name );\n                /* FIXME: what error here? */\n                SetLastError( ERROR_FILE_NOT_FOUND );\n                goto error;\n            }\n        }\n        ofs->Reserved1 = filedatetime[0];\n        ofs->Reserved2 = filedatetime[1];\n    }\n\n    if (!(mode & OF_PARSE))\n    {\n        hFileRet = Win32HandleToDosFileHandle(handle);\n        TRACE(\"(%s): OK, return = %p\\n\", name, handle);\n    }\n    if (hFileRet == HFILE_ERROR16) goto error;\n    HeapFree(GetProcessHeap(), 0, namew);\n    if (!(mode & OF_PARSE) && mode & OF_EXIST) _lclose16( hFileRet ); /* Return the handle, but close it first */\n    return hFileRet;\n\nerror:  /* We get here if there was an error opening the file */\n    ofs->nErrCode = GetLastError();\n    WARN(\"(%s): return = HFILE_ERROR error= %d\\n\", name,ofs->nErrCode );\n    HeapFree(GetProcessHeap(), 0, namew);\n    return HFILE_ERROR16;\n}\n\n\n/***********************************************************************\n *           _lclose   (KERNEL.81)\n */\nHFILE16 WINAPI _lclose16( HFILE16 hFile )\n{\n    HANDLE *dos_handles = FILE_GetTable();\n    if ((hFile >= DOS_TABLE_SIZE) || !dos_handles[hFile])\n    {\n        SetLastError( ERROR_INVALID_HANDLE );\n        return HFILE_ERROR16;\n    }\n    TRACE(\"%d (handle32=%p)\\n\", hFile, dos_handles[hFile] );\n    CloseHandle( dos_handles[hFile] );\n    dos_handles[hFile] = 0;\n    return 0;\n}\n\n/***********************************************************************\n *           _lcreat   (KERNEL.83)\n */\nHFILE16 WINAPI _lcreat16( LPCSTR path, INT16 attr )\n{\n    CHAR buf[MAX_PATH];\n    path = RedirectSystemDir(path, buf, MAX_PATH);\n    path = RedirectDriveRoot(path, buf, MAX_PATH, FALSE);\n    return Win32HandleToDosFileHandle( (HANDLE)_lcreat( path, attr ) );\n}\n\n/***********************************************************************\n *           _llseek   (KERNEL.84)\n */\nLONG WINAPI _llseek16( HFILE16 hFile, LONG lOffset, INT16 nOrigin )\n{\n    HANDLE fd = DosFileHandleToWin32Handle(hFile);\n    LONG high = 0;\n    DWORD offset = (DWORD)lOffset;\n    switch (nOrigin)\n    {\n        case FILE_BEGIN:\n            break;\n        case FILE_END:\n            offset += GetFileSize(fd, NULL);\n            break;\n        case FILE_CURRENT:\n            offset += SetFilePointer(fd, 0, NULL, FILE_CURRENT);\n            break;\n        default:\n            SetLastError(ERROR_INVALID_PARAMETER);\n            return -1;\n    }\n    return SetFilePointer(fd, offset, &high, FILE_BEGIN);\n}\n\n\n/***********************************************************************\n *           _lopen   (KERNEL.85)\n */\nHFILE16 WINAPI _lopen16( LPCSTR path, INT16 mode )\n{\n    CHAR buf[MAX_PATH];\n    path = RedirectSystemDir(path, buf, MAX_PATH);\n    path = RedirectDriveRoot(path, buf, MAX_PATH, FALSE);\n    return Win32HandleToDosFileHandle( (HANDLE)_lopen( path, mode ) );\n}\n\n\n/***********************************************************************\n *           _lread16 (internal)\n */\nUINT16 WINAPI _lread16( HFILE16 hFile, LPVOID buffer, UINT16 count )\n{\n    return (UINT16)_lread((HFILE)DosFileHandleToWin32Handle(hFile), buffer, (LONG)count );\n}\n\n\n/***********************************************************************\n *           _lwrite   (KERNEL.86)\n */\nUINT16 WINAPI _lwrite16( HFILE16 hFile, LPCSTR buffer, UINT16 count )\n{\n    return (UINT16)_hwrite( (HFILE)DosFileHandleToWin32Handle(hFile), buffer, (LONG)count );\n}\n\n/***********************************************************************\n *           _hread (KERNEL.349)\n */\nLONG WINAPI WIN16_hread( HFILE16 hFile, SEGPTR buffer, LONG count )\n{\n    LONG maxlen;\n\n    TRACE(\"%d %08x %d\\n\", hFile, (DWORD)buffer, count );\n\n    /* Some programs pass a count larger than the allocated buffer */\n    maxlen = GetSelectorLimit16( SELECTOROF(buffer) ) - OFFSETOF(buffer) + 1;\n    if (count > maxlen)\n    {\n        LPVOID temp_buffer = HeapAlloc(GetProcessHeap(), 0, count);\n        HFILE result = _lread((HFILE)DosFileHandleToWin32Handle(hFile), temp_buffer, count );\n        if (result != HFILE_ERROR)\n        {\n            memcpy(MapSL(buffer), temp_buffer, (size_t)result);\n        }\n        HeapFree(GetProcessHeap(), 0, temp_buffer);\n        return result;\n    }\n\n    return _lread((HFILE)DosFileHandleToWin32Handle(hFile), MapSL(buffer), count );\n}\n\n\n/***********************************************************************\n *           _lread (KERNEL.82)\n */\nUINT16 WINAPI WIN16_lread( HFILE16 hFile, SEGPTR buffer, UINT16 count )\n{\n    return (UINT16)WIN16_hread( hFile, buffer, (LONG)count );\n}\n\n\n/***********************************************************************\n *           _hwrite   (KERNEL.350)\n */\nLONG WINAPI _hwrite16( HFILE16 hFile, LPCSTR buffer, LONG count )\n{\n    return _hwrite( (HFILE)DosFileHandleToWin32Handle(hFile), buffer, count );\n}\n\n\n/***********************************************************************\n *           GetTempDrive   (KERNEL.92)\n * A closer look at krnl386.exe shows what the SDK doesn't mention:\n *\n * returns:\n *   AL: driveletter\n *   AH: ':'\t\t- yes, some kernel code even does stosw with\n *                            the returned AX.\n *   DX: 1 for success\n */\nUINT WINAPI GetTempDrive( BYTE ignored )\n{\n    WCHAR buffer[MAX_PATH];\n    BYTE ret;\n\n    if (GetTempPathW( MAX_PATH, buffer )) ret = (BYTE)toupperW(buffer[0]);\n    else ret = 'C';\n    return MAKELONG( ret | (':' << 8), 1 );\n}\n\n\n#define MAX_TEMP_PATH 144\n/***********************************************************************\n *           GetTempFileName   (KERNEL.97)\n */\nUINT16 WINAPI GetTempFileName16( BYTE drive, LPCSTR prefix, UINT16 unique,\n                                 LPSTR buffer )\n{\n    char temppath[MAX_TEMP_PATH];\n    char *unique_buf;\n\n    if (!(drive & ~TF_FORCEDRIVE)) /* drive 0 means current default drive */\n    {\n        WCHAR curdir[MAX_PATH];\n        DWORD r = GetCurrentDirectoryW(MAX_PATH, curdir);\n        if (r >= MAX_PATH || r == 0 || curdir[1] != ':')\n        {\n            ERR(\"could not get current drive\\n\");\n            return 0;\n        }\n        drive |= curdir[0];\n    }\n\n    if (drive & TF_FORCEDRIVE)\n    {\n        /* C:~preuuuu.TMP */\n        sprintf(temppath, \"%c:\", drive & ~TF_FORCEDRIVE);\n    }\n    else\n    {\n        DWORD r = GetTempPathA(MAX_TEMP_PATH, temppath);\n        if (r >= MAX_TEMP_PATH)\n        {\n            ERR(\"temp path is too long\\n\");\n            return 0;\n        }\n        if (r < 3)\n        {\n            return 0;\n        }\n    }\n    GetShortPathNameA(temppath, temppath, MAX_TEMP_PATH);\n    if (strlen(temppath) + 12 /* ~preuuuu.TMP */ >= MAX_TEMP_PATH - 1)\n    {\n        ERR(\"temp path is too long\\n\");\n        return 0;\n    }\n    unique_buf = temppath + strlen(temppath);\n    *unique_buf++ = '~';\n    if (prefix[0])\n    {\n        *unique_buf++ = prefix[0];\n        if (prefix[1])\n        {\n            *unique_buf++ = prefix[1];\n            if (prefix[2])\n            {\n                *unique_buf++ = prefix[2];\n            }\n        }\n    }\n\n    if (!unique)\n    {\n        int num = GetTickCount() & 0xffff;\n        if (num == 0)\n        {\n            num = 1;\n        }\n        unique = num;\n        do\n        {\n            HANDLE handle;\n            sprintf(unique_buf, \"%04X.TMP\", unique);\n\n            handle = CreateFileA(temppath, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);\n            if (handle != INVALID_HANDLE_VALUE)\n            {\n                CloseHandle(handle);\n                break;\n            }\n            if (GetLastError() == ERROR_ACCESS_DENIED)\n            {\n                ERR(\"%s ERROR_ACCESS_DENIED\\n\", temppath);\n            }\n            if (GetLastError() != ERROR_FILE_EXISTS &&\n                GetLastError() != ERROR_SHARING_VIOLATION)\n                break;\n            if (!(++unique & 0xffff)) unique = 1;\n        } while (unique != num);\n    }\n    else\n    {\n        sprintf(unique_buf, \"%04X.TMP\", unique);\n    }\n    if (strlen(temppath) + 1 > MAX_TEMP_PATH)\n    {\n        ERR(\"temp path is too long\\n\");\n        return 0;\n    }\n    else\n    {\n        strcpy(buffer, temppath);\n    }\n\n    return unique;\n}\n\n\ntypedef const char* (*ini_redirect_str_func)();\ntypedef int(*ini_redirect_int_func)();\nstruct ini_redirect_data\n{\n    const char *file;\n    const char *section;\n    const char *entry;\n    const char *value;\n    ini_redirect_str_func get_str;\n    ini_redirect_int_func get_int;\n    BOOL overwrite_section;\n};\nint system_ini_keyboard_type()\n{\n    return GetKeyboardType(0);\n}\nint system_ini_keyboard_subtype()\n{\n    return GetKeyboardType(1);\n}\nstatic const char *system_ini_boot_language_dll()\n{\n    switch (GetUserDefaultUILanguage())\n    {\n        case 1030:\n        case 1035:\n        case 1039:\n        case 1044:\n        case 1053:\n            return \"langsca.dll\";\n        case 1043:\n            return \"langdut.dll\";\n        case 2057:\n        case 3084:\n        case 1040:\n        case 2070:\n        case 3082:\n            return \"langeng.dll\";\n        case 1036:\n            return \"langfrn.dll\";\n        case 1031:\n            return \"langger.dll\";\n        case 1034:\n            return \"langspa.dll\";\n        case 1033:\n        default:\n            return \"\";\n    }\n}\nconst char *system_init_boot_description_language_dll()\n{\n    LANGID lang = GetUserDefaultUILanguage();\n    static char buf[256];\n    if (GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_SNATIVELANGNAME, buf, ARRAY_SIZE(buf)))\n    {\n        return buf;\n    }\n    return \"English (American)\";\n}\nconst char *system_init_boot_description_keyboard_typ()\n{\n    char buf[KL_NAMELENGTH];\n    if (GetKeyboardLayoutNameA(buf))\n    {\n        HKEY hkey;\n        HKEY hkey2;\n        static char buf2[256];\n        DWORD cb = ARRAY_SIZE(buf2);\n        if (RegOpenKeyA(HKEY_LOCAL_MACHINE, \"SYSTEM\\\\CurrentControlSet\\\\Control\\\\Keyboard Layouts\\\\\", &hkey) == ERROR_SUCCESS)\n        {\n            if (RegOpenKeyA(hkey, buf, &hkey2) == ERROR_SUCCESS)\n            {\n                LRESULT result = RegQueryValueExA(hkey2, \"Layout Text\", NULL, NULL, buf2, &cb);\n                RegCloseKey(hkey2);\n                RegCloseKey(hkey);\n                if (result == ERROR_SUCCESS)\n                {\n                    return buf2;\n                }\n            }\n            else\n            {\n                RegCloseKey(hkey);\n            }\n        }\n    }\n    return \"Enhanced 101 or 102 key US and Non US keyboards\";\n}\nint system_init_boot_description_codepage()\n{\n    return GetACP();\n}\n/* HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\WOW */\n/* HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows NT\\CurrentVersion\\IniFileMapping */\n/* HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\IniFileMapping */\nstruct ini_redirect_data ini_redirect_list[] =\n{\n    {\"system.ini\", \"boot\", \"sound.drv\", \"sound.drv\"},\n    {\"system.ini\", \"boot\", \"comm.drv\", \"comm.drv\"},\n    {\"system.ini\", \"boot\", \"keyboard.drv\", \"keyboard.drv\"},\n    {\"system.ini\", \"boot\", \"system.drv\", \"system.drv\"},\n    {\"system.ini\", \"boot\", \"display.drv\", \"display.drv\"},\n    {\"system.ini\", \"boot\", \"shell\", \"progman.exe\"},\n    {\"system.ini\", \"boot\", \"mouse.drv\", \"mouse.drv\"},\n    {\"system.ini\", \"boot\", \"network.drv\", \"network.drv\"},\n    {\"system.ini\", \"boot\", \"language.dll\", NULL, system_ini_boot_language_dll},\n    {\"system.ini\", \"boot\", \"drivers\", \"mmsystem.dll\"},\n    /* {\"system.ini\", \"boot\", \"oemfonts.fon\", \"\", NULL}, */\n    /* {\"system.ini\", \"boot\", \"fixedfon.fon\", \"\", NULL}, */\n    /* {\"system.ini\", \"boot\", \"fonts.fon\", \"\", NULL}, */\n\n\n    {\"system.ini\", \"keyboard\", \"type\", NULL, NULL, system_ini_keyboard_type},\n    {\"system.ini\", \"keyboard\", \"subtype\", NULL, NULL, system_ini_keyboard_subtype},\n    {\"system.ini\", \"keyboard\", \"keyboard.dll\", \"\"},\n\n    {\"system.ini\", \"boot.description\", \"system.drv\", \"MS-DOS or PC-DOS System\"},\n    /* {\"system.ini\", \"boot.description\", \"aspect\", \"100,96,96\"}, */\n    {\"system.ini\", \"boot.description\", \"display.drv\", \"VGA\"},\n    {\"system.ini\", \"boot.description\", \"keyboard.typ\", NULL, system_init_boot_description_keyboard_typ},\n    {\"system.ini\", \"boot.description\", \"mouse.drv\", \"Microsoft, or IBM PS/2\"},\n    {\"system.ini\", \"boot.description\", \"network.drv\", \"LAN Support\"},\n    {\"system.ini\", \"boot.description\", \"language.dll\", NULL, system_init_boot_description_language_dll},\n    {\"system.ini\", \"boot.description\", \"codepage\", NULL, NULL, system_init_boot_description_codepage},\n    /* {\"system.ini\", \"boot.description\", \"woafont.fon\", \"\"}, */\n\n    /* HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\MCI (Only available in 32-bit windows) */\n    {\"system.ini\", \"mci\", \"AVIVideo\", \"mciavi.drv\"},\n\n    {\"system.ini\", \"mci\", \"Sequencer\", \"mciseq.drv\"},\n    {\"system.ini\", \"mci\", \"CDAudio\", \"mcicda.drv\"},\n    {\"system.ini\", \"mci\", \"WaveAudio\", \"mciwave.drv\"},\n\n    /* MPEGVideo! */\n    {\"system.ini\", \"mci\", \"MPEGVideo\", \"mciqtz.drv\"},\n\n    /*\n    HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\MCI Extensions\n    HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows NT\\CurrentVersion\\MCI Extensions\n    */\n#if 0\n    {\"win.ini\", \"mci extensions\", \"aiff\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"dat\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"m2t\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mpa\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"wmx\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"Mid\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"wmv\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"m3u\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"avi\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"ivf\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"wvx\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"m4v\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mts\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mp4v\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mp2v\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"adts\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"wma\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mpeg\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"tts\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mpv2\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"au\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"3gpp\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"m4a\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"wax\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"aif\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"asx\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"Wav\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"m2ts\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mov\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"wpl\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"aac\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"3gp2\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mp4\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mp3\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mp2\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"wm\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"adt\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"cda\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"3g2\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"asf\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mod\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"m1v\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"ts\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"rmi\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mpg\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"3gp\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"aifc\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mpe\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"m2v\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"snd\", \"MPEGVideo\"},\n#else\n    {\"win.ini\", \"mci extensions\", \"Mid\", \"Sequencer\"},\n    {\"win.ini\", \"mci extensions\", \"Wav\", \"WaveAudio\"},\n    {\"win.ini\", \"mci extensions\", \"avi\", \"avivideo\"},\n    {\"win.ini\", \"mci extensions\", \"cda\", \"CDAudio\"},\n\n    {\"win.ini\", \"mci extensions\", \"rmi\", \"Sequencer\"},\n    {\"win.ini\", \"mci extensions\", \"wma\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"m4v\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"m4a\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"aac\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mp4\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mov\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mp3\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mpg\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mp2\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"dat\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"m2t\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mpa\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"wmx\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"wmv\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"m3u\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"ivf\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mts\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"au\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mpe\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mod\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"aif\", \"MPEGVideo\"},\n    /* When there are many extensions, MPLAYER causes buffer overflow. */\n    /*\n    {\"win.ini\", \"mci extensions\", \"wax\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"asx\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"wpl\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"wm\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"adt\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"3g2\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"asf\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"m1v\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"tts\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"ts\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"wvx\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"3gp\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"m2v\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"snd\", \"MPEGVideo\"},\n\n    {\"win.ini\", \"mci extensions\", \"mpeg\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mp4v\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mp2v\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"adts\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"aifc\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"3gp2\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"m2ts\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"aiff\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"mpv2\", \"MPEGVideo\"},\n    {\"win.ini\", \"mci extensions\", \"3gpp\", \"MPEGVideo\"},\n    */\n#endif\n    /* overwrite section */\n    {\"win.ini\", \"mci extensions\", NULL, NULL, NULL, NULL, TRUE},\n};\n\n/***********************************************************************\n *           GetPrivateProfileInt   (KERNEL.127)\n */\nUINT16 WINAPI GetPrivateProfileInt16( LPCSTR section, LPCSTR entry,\n                                      INT16 def_val, LPCSTR filename )\n{\n    /* we used to have some elaborate return value limitation (<= -32768 etc.)\n     * here, but Win98SE doesn't care about this at all, so I deleted it.\n     * AFAIR versions prior to Win9x had these limits, though. */\n    char ini[MAX_PATH];\n\n    LPCSTR filename_file = PathFindFileNameA(filename);\n    for (int i = 0; i < ARRAY_SIZE(ini_redirect_list); i++)\n    {\n        if (!ini_redirect_list[i].entry)\n        {\n            continue;\n        }\n        if (!stricmp(ini_redirect_list[i].file, filename_file) && !stricmp(section, ini_redirect_list[i].section) && !stricmp(entry, ini_redirect_list[i].entry))\n        {\n            if (ini_redirect_list[i].get_int)\n                return ini_redirect_list[i].get_int();\n        }\n    }\n    RedirectPrivateProfileStringWindowsDir(filename,ini);\n    return (INT16)GetPrivateProfileIntA(section,entry,def_val,ini);\n}\n\n\nchar windowsPath[MAX_PATH];\nconst char *GetRedirectWindowsDir()\n{\n    if (*windowsPath != '\\0')\n        return windowsPath;\n#ifdef ENABLEREDIRECTSYSTEMDIR\n    GetModuleFileNameA(GetModuleHandleA(NULL), windowsPath, MAX_PATH);\n    PathRemoveFileSpecA(windowsPath);\n    char ini[MAX_PATH];\n    krnl386_get_config_string(\"otvdm\", \"WINDIR\", \"WINDOWS\", ini, sizeof(ini));\n    PathCombineA(windowsPath, windowsPath, ini);\n    GetShortPathNameA(windowsPath, windowsPath, sizeof(windowsPath));\n    PathRemoveBackslashA(windowsPath);\n    if (strstr(windowsPath, \"\\\\\\\\\") || strstr(windowsPath, \"/\"))\n    {\n        ERR(\"WINDIR %s is not a correct path.\\n\", windowsPath);\n    }\n    return windowsPath;\n#else\n    GetWindowsDirectoryA(windowsPath, sizeof(windowsPath));\n    GetShortPathNameA(windowsPath, windowsPath, sizeof(windowsPath));\n    return windowsPath;\n#endif\n}\n\nstatic void RedirectPrivateProfileStringWindowsDir(LPCSTR filename, LPCSTR output)\n{\n    if (!filename)\n        filename = \"win.ini\";\n    if (PathIsFileSpecA(filename) && !strchr(filename, '/'))\n    {\n        PathCombineA(output, GetRedirectWindowsDir(), filename);\n    }\n    else\n    {\n        strcpy(output, filename);\n    }\n}\nstatic BOOL append_ini_section(LPSTR data, SIZE_T *buf_pos, SIZE_T len, LPCSTR entry)\n{\n    SIZE_T ent_len = strlen(entry) + 1;\n    memcpy(data + *buf_pos, entry, min(ent_len, len - *buf_pos - 2));\n    *buf_pos += min(ent_len, len - *buf_pos - 2);\n    data[*buf_pos] = '\\0';\n    data[*buf_pos + 1] = '\\0';\n    return TRUE;\n}\nstatic int construct_redirected_ini_section(LPCSTR section, LPSTR data, UINT16 size, LPCSTR filename)\n{\n    LPCSTR filename_file = PathFindFileNameA(filename);\n    SIZE_T buf_pos = 0;\n    if (size == 0)\n    {\n        return 0;\n    }\n    if (size == 1)\n    {\n        data[0] = '\\0';\n        return 0;\n    }\n    data[0] = '\\0';\n    data[1] = '\\0';\n    if (size == 2)\n    {\n        return 0;\n    }\n    for (int i = 0; i < ARRAY_SIZE(ini_redirect_list); i++)\n    {\n        if (!ini_redirect_list[i].entry)\n        {\n            continue;\n        }\n        if (!stricmp(ini_redirect_list[i].file, filename_file) && !stricmp(section, ini_redirect_list[i].section))\n        {\n            if (!append_ini_section(data, &buf_pos, size, ini_redirect_list[i].entry))\n            {\n                break;\n            }\n        }\n    }\n    return buf_pos;\n}\n/***********************************************************************\n *           GetPrivateProfileString   (KERNEL.128)\n */\nINT16 WINAPI GetPrivateProfileString16( LPCSTR section, LPCSTR entry,\n                                        LPCSTR def_val, LPSTR buffer,\n                                        UINT16 len, LPCSTR filename )\n{\n    char filenamebuf[MAX_PATH];\n    BOOL overwrite_section = FALSE;\n    TRACE(\"%s %s %s\\n\", filename, section, entry);\n    if (!section || !filename)\n    {\n        if (buffer && len) buffer[0] = 0;\n        return 0;\n    }\n    LPCSTR filename_file = PathFindFileNameA(filename);\n    if (entry)\n    {\n        for (int i = 0; i < ARRAY_SIZE(ini_redirect_list); i++)\n        {\n            if (!ini_redirect_list[i].entry)\n            {\n                continue;\n            }\n            if (!stricmp(ini_redirect_list[i].file, filename_file) && !stricmp(section, ini_redirect_list[i].section) && !stricmp(entry, ini_redirect_list[i].entry))\n            {\n                LPCSTR val = ini_redirect_list[i].value;\n                SIZE_T size;\n                if (!val && ini_redirect_list[i].get_str)\n                {\n                    val = ini_redirect_list[i].get_str();\n                }\n                if (!val)\n                {\n                    break;\n                }\n                if (len == 0)\n                {\n                    return 0;\n                }\n                else if (len == 1)\n                {\n                    buffer[0] = '\\0';\n                    return 0;\n                }\n                size = min(strlen(val), len - 1);\n                memcpy(buffer, val, size);\n                buffer[size] = '\\0';\n                return strlen(buffer);\n            }\n        }\n    }\n    else\n    {\n        for (int i = 0; i < ARRAY_SIZE(ini_redirect_list); i++)\n        {\n            if (ini_redirect_list[i].entry)\n            {\n                continue;\n            }\n            if (ini_redirect_list[i].overwrite_section && !stricmp(ini_redirect_list[i].file, filename_file) && !stricmp(section, ini_redirect_list[i].section))\n            {\n                overwrite_section = TRUE;\n            }\n        }\n    }\n    RedirectPrivateProfileStringWindowsDir(filename, filenamebuf);\n    filename = filenamebuf;\n    TRACE(\"(%s, %s, %s, %p, %u, %s)\\n\", debugstr_a(section), debugstr_a(entry),\n          debugstr_a(def_val), buffer, len, debugstr_a(filename));\n\n    /* len = 0 means unlimited buffer length (windows bug?) */\n    if (!entry && len == 0)\n    {\n        len = 0xffff;\n    }\n    if (!entry)\n    {\n        /* We have to return the list of keys in the section but without the values\n         * so we need to massage the results of GetPrivateProfileSectionA.\n         */\n        UINT ret, oldlen = len, size = min( len, 1024 );\n        LPSTR data, src;\n\n        if (overwrite_section)\n            return construct_redirected_ini_section(section, buffer, oldlen, filename);\n        for (;;)\n        {\n            if (!(data = HeapAlloc(GetProcessHeap(), 0, size ))) return 0;\n            ret = GetPrivateProfileSectionA( section, data, size, filename );\n            if (!ret)\n            {\n                HeapFree( GetProcessHeap(), 0, data );\n                ret = construct_redirected_ini_section(section, buffer, oldlen, filename);\n                if (!ret)\n                    ret = GetPrivateProfileStringA(section, entry, def_val, buffer, len, filename);\n                return ret;\n            }\n            if (ret != size - 2) break;\n            /* overflow, try again */\n            size *= 2;\n            HeapFree( GetProcessHeap(), 0, data );\n        }\n\n        src = data;\n        while (len && *src)\n        {\n            char *p = strchr( src, '=' );\n\n            /* A valid entry is formed by name = value */\n            if (!p)\n            {\n                src += strlen(src) + 1;\n                continue;\n            }\n            if (p - src < len)\n            {\n                memcpy( buffer, src, p - src );\n                buffer += p - src;\n                *buffer++ = 0;\n                len -= (p - src) + 1;\n                src += strlen(src) + 1;\n            }\n            else  /* overflow */\n            {\n                memcpy( buffer, src, len );\n                buffer += len;\n                len = 0;\n            }\n        }\n        HeapFree( GetProcessHeap(), 0, data );\n\n        if (len)\n        {\n            *buffer = 0;\n            return oldlen - len;\n        }\n        if (oldlen > 2)\n        {\n            buffer[-2] = 0;\n            buffer[-1] = 0;\n            return oldlen - 2;\n        }\n        return 0;\n    }\n    return GetPrivateProfileStringA( section, entry, def_val, buffer, len, filename );\n}\n\nstatic BOOL16 check_write_profile_error(LPCSTR filename, DWORD error)\n{\n    if (error == ERROR_ACCESS_DENIED)\n    {\n        OFSTRUCT ofstr;\n        HFILE ret = OpenFile(filename, &ofstr, OF_EXIST);\n        if (ret != HFILE_ERROR)\n        {\n            WARN(\"Failed to write profile data because it was redirected to the registry\");\n            return TRUE; // fake success, any written data can't be read anyway\n        }\n    }\n    return FALSE;\n}\n\n/***********************************************************************\n *           WritePrivateProfileString   (KERNEL.129)\n */\nBOOL16 WINAPI WritePrivateProfileString16( LPCSTR section, LPCSTR entry,\n                                           LPCSTR string, LPCSTR filename )\n{\n    char filenamebuf[MAX_PATH];\n    RedirectPrivateProfileStringWindowsDir(filename, &filenamebuf);\n    filename = filenamebuf;\n    BOOL ret = WritePrivateProfileStringA(section,entry,string,filename);\n    if (!ret)\n        return check_write_profile_error(filename, GetLastError());\n    return ret;\n}\n\n\n/***********************************************************************\n *           GetWindowsDirectory   (KERNEL.134)\n */\nUINT16 WINAPI GetWindowsDirectory16( LPSTR path, UINT16 count )\n{\n    const char *w = GetRedirectWindowsDir();\n    UINT16 len = strlen(w);\n    if (len + 1 > count)\n        return strlen(w) + 1;\n    strcpy(path, w);\n    return len;\n    //return GetWindowsDirectoryA( path, count );\n}\n\n\n/***********************************************************************\n *           GetSystemDirectory   (KERNEL.135)\n */\nUINT16 WINAPI GetSystemDirectory16( LPSTR path, UINT16 count )\n{\n    static const char system16[] = \"\\\\SYSTEM\";\n    char windir[MAX_PATH];\n    UINT16 len;\n\n    len = GetWindowsDirectory16(windir, sizeof(windir) - sizeof(system16) + 1) + sizeof(system16);\n    if (count >= len)\n    {\n        lstrcpyA(path, windir);\n        lstrcatA(path, system16);\n        len--;  /* space for the terminating zero is not included on success */\n    }\n    return len;\n}\n\n\n/***********************************************************************\n *           GetDriveType   (KERNEL.136)\n * Get the type of a drive in Win16.\n *\n * RETURNS\n *  The type of the Drive. For a list see GetDriveTypeW from kernel32.\n *\n * NOTES\n *  Note that it returns DRIVE_REMOTE for CD-ROMs, since MSCDEX uses the\n *  remote drive API. The return value DRIVE_REMOTE for CD-ROMs has been\n *  verified on Win 3.11 and Windows 95. Some programs rely on it, so don't\n *  do any pseudo-clever changes.\n */\nUINT16 WINAPI GetDriveType16( UINT16 drive ) /* [in] number (NOT letter) of drive */\n{\n    UINT type;\n    WCHAR root[3];\n\n    root[0] = 'A' + drive;\n    root[1] = ':';\n    root[2] = 0;\n    type = GetDriveTypeW( root );\n    if (type == DRIVE_CDROM) type = DRIVE_REMOTE;\n    else if (type == DRIVE_NO_ROOT_DIR) type = DRIVE_UNKNOWN;\n    return type;\n}\n\n\n/***********************************************************************\n *           GetProfileSectionNames   (KERNEL.142)\n */\nWORD WINAPI GetProfileSectionNames16(LPSTR buffer, WORD size)\n\n{\n    return GetPrivateProfileSectionNamesA(buffer,size,\"win.ini\");\n}\n\n\n/***********************************************************************\n *           GetPrivateProfileSectionNames   (KERNEL.143)\n */\nWORD WINAPI GetPrivateProfileSectionNames16( LPSTR buffer, WORD size,\n                                             LPCSTR filename )\n{\n    return GetPrivateProfileSectionNamesA(buffer,size,filename);\n}\n\n\n/***********************************************************************\n *           CreateDirectory   (KERNEL.144)\n */\nBOOL16 WINAPI CreateDirectory16( LPCSTR path, LPVOID dummy )\n{\n    return CreateDirectoryA( path, NULL );\n}\n\n\n/***********************************************************************\n *           RemoveDirectory   (KERNEL.145)\n */\nBOOL16 WINAPI RemoveDirectory16( LPCSTR path )\n{\n    return RemoveDirectoryA( path );\n}\n\n\n/***********************************************************************\n *           DeleteFile   (KERNEL.146)\n */\nBOOL16 WINAPI DeleteFile16( LPCSTR path )\n{\n    return DeleteFileA( path );\n}\n\n\n/***********************************************************************\n *           SetHandleCount   (KERNEL.199)\n */\nUINT16 WINAPI SetHandleCount16( UINT16 count )\n{\n    return SetHandleCount( count );\n}\n\n\n/***********************************************************************\n *           GetShortPathName   (KERNEL.274)\n */\nWORD WINAPI GetShortPathName16( LPCSTR longpath, LPSTR shortpath, WORD len )\n{\n    return GetShortPathNameA( longpath, shortpath, len );\n}\n\n\n/***********************************************************************\n *           WriteOutProfiles   (KERNEL.315)\n */\nvoid WINAPI WriteOutProfiles16(void)\n{\n    WritePrivateProfileSectionW( NULL, NULL, NULL );\n}\n\n\n/***********************************************************************\n *           WritePrivateProfileStruct (KERNEL.406)\n */\nBOOL16 WINAPI WritePrivateProfileStruct16 (LPCSTR section, LPCSTR key,\n                                           LPVOID buf, UINT16 bufsize, LPCSTR filename)\n{\n    char filenamebuf[MAX_PATH];\n    RedirectPrivateProfileStringWindowsDir(filename, &filenamebuf);\n    filename = filenamebuf;\n    return WritePrivateProfileStructA( section, key, buf, bufsize, filename );\n}\n\n\n/***********************************************************************\n *           GetPrivateProfileStruct (KERNEL.407)\n */\nBOOL16 WINAPI GetPrivateProfileStruct16(LPCSTR section, LPCSTR key,\n                                        LPVOID buf, UINT16 len, LPCSTR filename)\n{\n    char filenamebuf[MAX_PATH];\n    RedirectPrivateProfileStringWindowsDir(filename, &filenamebuf);\n    filename = filenamebuf;\n    return GetPrivateProfileStructA( section, key, buf, len, filename );\n}\n\n\n/***********************************************************************\n *           GetCurrentDirectory   (KERNEL.411)\n */\nUINT16 WINAPI GetCurrentDirectory16( UINT16 buflen, LPSTR buf )\n{\n    return GetCurrentDirectoryA( buflen, buf );\n}\n\n\n/***********************************************************************\n *           SetCurrentDirectory   (KERNEL.412)\n */\nBOOL16 WINAPI SetCurrentDirectory16( LPCSTR dir )\n{\n    char fulldir[MAX_PATH];\n\n    if (!GetFullPathNameA( dir, MAX_PATH, fulldir, NULL )) return FALSE;\n\n    if (!SetCurrentDirectoryA( dir )) return FALSE;\n\n    if (fulldir[0] && fulldir[1] == ':')\n    {\n        TDB *pTask = GlobalLock16( GetCurrentTask() );\n        char env_var[4] = \"=A:\";\n\n        env_var[1] = fulldir[0];\n        SetEnvironmentVariableA( env_var, fulldir );\n\n        /* update the directory in the TDB */\n        if (pTask)\n        {\n            pTask->curdrive = 0x80 | (fulldir[0] - 'A');\n            GetShortPathNameA( fulldir + 2, pTask->curdir, sizeof(pTask->curdir) );\n        }\n    }\n    return TRUE;\n}\n\n\n/*************************************************************************\n *           FindFirstFile   (KERNEL.413)\n */\nHANDLE16 WINAPI FindFirstFile16( LPCSTR path, WIN32_FIND_DATAA *data )\n{\n    HGLOBAL16 h16;\n    HANDLE handle, *ptr;\n\n    if (!(h16 = GlobalAlloc16( GMEM_MOVEABLE, sizeof(handle) ))) return INVALID_HANDLE_VALUE16;\n    ptr = GlobalLock16( h16 );\n    *ptr = handle = FindFirstFileA( path, data );\n    GlobalUnlock16( h16 );\n\n    if (handle == INVALID_HANDLE_VALUE)\n    {\n        GlobalFree16( h16 );\n        h16 = INVALID_HANDLE_VALUE16;\n    }\n    return h16;\n}\n\n\n/*************************************************************************\n *           FindNextFile   (KERNEL.414)\n */\nBOOL16 WINAPI FindNextFile16( HANDLE16 handle, WIN32_FIND_DATAA *data )\n{\n    HANDLE *ptr;\n    BOOL ret = FALSE;\n\n    if ((handle == INVALID_HANDLE_VALUE16) || !(ptr = GlobalLock16( handle )))\n    {\n        SetLastError( ERROR_INVALID_HANDLE );\n        return ret;\n    }\n    ret = FindNextFileA( *ptr, data );\n    GlobalUnlock16( handle );\n    return ret;\n}\n\n\n/*************************************************************************\n *           FindClose   (KERNEL.415)\n */\nBOOL16 WINAPI FindClose16( HANDLE16 handle )\n{\n    HANDLE *ptr;\n\n    if ((handle == INVALID_HANDLE_VALUE16) || !(ptr = GlobalLock16( handle )))\n    {\n        SetLastError( ERROR_INVALID_HANDLE );\n        return FALSE;\n    }\n    FindClose( *ptr );\n    GlobalUnlock16( handle );\n    GlobalFree16( handle );\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           WritePrivateProfileSection   (KERNEL.416)\n */\nBOOL16 WINAPI WritePrivateProfileSection16( LPCSTR section,\n                                            LPCSTR string, LPCSTR filename )\n{\n    return WritePrivateProfileSectionA( section, string, filename );\n}\n\n\n/***********************************************************************\n *           WriteProfileSection   (KERNEL.417)\n */\nBOOL16 WINAPI WriteProfileSection16( LPCSTR section, LPCSTR keys_n_values)\n{\n    return WritePrivateProfileSection16( section, keys_n_values, \"win.ini\");\n}\n\n\n/***********************************************************************\n *           GetPrivateProfileSection   (KERNEL.418)\n */\nINT16 WINAPI GetPrivateProfileSection16( LPCSTR section, LPSTR buffer,\n                                         UINT16 len, LPCSTR filename )\n{\n    return GetPrivateProfileSectionA( section, buffer, len, filename );\n}\n\n\n/***********************************************************************\n *           GetProfileSection   (KERNEL.419)\n */\nINT16 WINAPI GetProfileSection16( LPCSTR section, LPSTR buffer, UINT16 len )\n{\n    return GetPrivateProfileSection16( section, buffer, len, \"win.ini\" );\n}\n\n\n/**************************************************************************\n *           GetFileAttributes   (KERNEL.420)\n */\nDWORD WINAPI GetFileAttributes16( LPCSTR name )\n{\n    return GetFileAttributesA( name );\n}\n\n\n/**************************************************************************\n *              SetFileAttributes\t(KERNEL.421)\n */\nBOOL16 WINAPI SetFileAttributes16( LPCSTR lpFileName, DWORD attributes )\n{\n    return SetFileAttributesA( lpFileName, attributes );\n}\n\n\n/***********************************************************************\n *           GetDiskFreeSpace   (KERNEL.422)\n */\nBOOL16 WINAPI GetDiskFreeSpace16( LPCSTR root, LPDWORD cluster_sectors,\n                                  LPDWORD sector_bytes, LPDWORD free_clusters,\n                                  LPDWORD total_clusters )\n{\n    return GetDiskFreeSpaceA( root, cluster_sectors, sector_bytes,\n                                free_clusters, total_clusters );\n}\n\n/***********************************************************************\n *\tFileCDR (KERNEL.130)\n */\nFARPROC16 WINAPI FileCDR16(FARPROC16 x)\n{\n    FIXME(\"(%p): stub\\n\", x);\n    return (FARPROC16)TRUE;\n}\n"
  },
  {
    "path": "krnl386/fpu.c",
    "content": "/*\n * DOS interrupt 34->3e handlers.  All FPU interrupt code should be\n * moved into this file.\n *\n * Copyright 2002 Robert 'Admiral' Coeyman\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdlib.h>\n#include \"dosexe.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(int);\n\n/*\n *  The actual work is done by a single routine.\n */\n\nstatic void FPU_ModifyCode(CONTEXT *context, BYTE Opcode);\n\n\n/**********************************************************************\n *          DOSVM_Int34Handler\n *\n * Handler for int 34 (FLOATING POINT EMULATION - Opcode 0xd8).\n *\n *  The interrupt list isn't specific about what this interrupt\n *  actually does. [ interrup.m ]\n */\nvoid WINAPI DOSVM_Int34Handler(CONTEXT *context)\n{\n    TRACE(\"Int 0x34 called-- FP opcode 0xd8\\n\");\n    FPU_ModifyCode(context, 0xd8);\n}\n\n\n/**********************************************************************\n *          DOSVM_Int35Handler\n *\n * Handler for int 35 (FLOATING POINT EMULATION - Opcode 0xd9).\n *\n *  The interrupt list isn't specific about what this interrupt\n *  actually does. [ interrup.m ]\n */\nvoid WINAPI DOSVM_Int35Handler(CONTEXT *context)\n{\n    TRACE(\"Int 0x35 called-- FP opcode 0xd9\\n\");\n    FPU_ModifyCode(context, 0xd9);\n}\n\n\n/**********************************************************************\n *          DOSVM_Int36Handler\n *\n * Handler for int 36 (FLOATING POINT EMULATION - Opcode 0xda).\n *\n *  The interrupt list isn't specific about what this interrupt\n *  actually does. [ interrup.m ]\n */\nvoid WINAPI DOSVM_Int36Handler(CONTEXT *context)\n{\n    TRACE(\"Int 0x36 called-- FP opcode 0xda\\n\");\n    FPU_ModifyCode(context, 0xda);\n}\n\n\n/**********************************************************************\n *          DOSVM_Int37Handler\n *\n * Handler for int 37 (FLOATING POINT EMULATION - Opcode 0xdb).\n *\n *  The interrupt list isn't specific about what this interrupt\n *  actually does. [ interrup.m ]\n */\nvoid WINAPI DOSVM_Int37Handler(CONTEXT *context)\n{\n    TRACE(\"Int 0x37 called-- FP opcode 0xdb\\n\");\n    FPU_ModifyCode(context, 0xdb);\n}\n\n\n/**********************************************************************\n *          DOSVM_Int38Handler\n *\n * Handler for int 38 (FLOATING POINT EMULATION - Opcode 0xdc).\n *\n *  Between versions 3.0 and 5.01, the original PC-MOS API call that\n *  was here was moved to int 0xd4.\n *\n *  The interrupt list isn't specific about what this interrupt\n *  actually does. [ interrup.m ]\n */\nvoid WINAPI DOSVM_Int38Handler(CONTEXT *context)\n{\n    TRACE(\"Int 0x38 called-- FP opcode 0xdc\\n\");\n    FPU_ModifyCode(context, 0xdc);\n}\n\n\n/**********************************************************************\n *          DOSVM_Int39Handler\n *\n * Handler for int 39 (FLOATING POINT EMULATION - Opcode 0xdd).\n *\n *  The interrupt list isn't specific about what this interrupt\n *  actually does. [ interrup.m ]\n */\nvoid WINAPI DOSVM_Int39Handler(CONTEXT *context)\n{\n    TRACE(\"Int 0x39 called-- FP opcode 0xdd\\n\");\n    FPU_ModifyCode(context, 0xdd);\n}\n\n\n/**********************************************************************\n *          DOSVM_Int3aHandler\n *\n * Handler for int 3a (FLOATING POINT EMULATION - Opcode 0xde).\n *\n *  The interrupt list isn't specific about what this interrupt\n *  actually does. [ interrup.m ]\n */\nvoid WINAPI DOSVM_Int3aHandler(CONTEXT *context)\n{\n    TRACE(\"Int 0x3a called-- FP opcode 0xde\\n\");\n    FPU_ModifyCode(context, 0xde);\n}\n\n\n/**********************************************************************\n *          DOSVM_Int3bHandler\n *\n * Handler for int 3B (FLOATING POINT EMULATION - Opcode 0xdf).\n *\n *  The interrupt list isn't specific about what this interrupt\n *  actually does. [ interrup.m ]\n */\nvoid WINAPI DOSVM_Int3bHandler(CONTEXT *context)\n{\n    TRACE(\"Int 0x3b called-- FP opcode 0xdf\\n\");\n    FPU_ModifyCode(context, 0xdf);\n}\n\n\n/**********************************************************************\n *          DOSVM_Int3cHandler\n *\n * Handler for int 3C (FLOATING POINT EMULATION - INSTRUCTIONS WITH SEGMENT OVERRIDE).\n *\n *  Generated code is CD 3C xy mm ... (CD = int | 3C = this interrupt)\n *   xy is a modified ESC code and mm is the modR/M byte.\n *   xy byte seems to be encoded as ss011xxx  or ss000xxx\n *   ss= segment override.\n *     00 -> DS\n *     01 -> SS\n *     10 -> CS\n *     11 -> ES\n *\n *  11011xxx should be the opcode instruction.\n */\nvoid WINAPI DOSVM_Int3cHandler(CONTEXT *context)\n{\n    FIXME(\"Int 3C NOT Implemented\\n\");\n    INT_BARF(context, 0x3c);\n}\n\n\n/**********************************************************************\n *          DOSVM_Int3dHandler\n *\n * Handler for int 3D (FLOATING POINT EMULATION - Standalone FWAIT).\n *\n *  Opcode 0x90 is a NOP.  It just fills space where the 3D was.\n */\nvoid WINAPI DOSVM_Int3dHandler(CONTEXT *context)\n{\n    TRACE(\"Int 0x3d called-- Standalone FWAIT\\n\");\n    FPU_ModifyCode(context, 0x90);\n}\n\n\n/**********************************************************************\n *          DOSVM_Int3eHandler\n *\n * FLOATING POINT EMULATION -- Borland \"Shortcut\" call.\n *  The two bytes following the int 3E instruction are\n *  the subcode and a NOP ( 0x90 ), except for subcodes DC and DE\n *  where the second byte is the register count.\n *\n *  Direct access 4.0 modifies and does not restore this vector.\n *\n */\nvoid WINAPI DOSVM_Int3eHandler(CONTEXT *context)\n{\n    FIXME(\"Int 3E NOT Implemented\\n\");\n    INT_BARF(context, 0x3e);\n}\n\n\n/**********************************************************************\n *          FPU_ModifyCode\n *\n *   This is the function that inserts the 0x9b fwait instruction\n *   and the actual FPU opcode into the program.\n *           -A.C.\n *\n *               Code thanks to Ove Kaaven\n */\nstatic void FPU_ModifyCode(CONTEXT *context, BYTE Opcode)\n{\n    BYTE *code = CTX_SEG_OFF_TO_LIN(context, context->SegCs, context->Eip);\n\n    /*\n     * All *NIX systems should have a real or kernel emulated FPU.\n     */\n\n    code[-2] = 0x9b;          /* The fwait instruction */\n    code[-1] = Opcode;        /* Insert the opcode     */\n\n    if ( ISV86(context) && LOWORD(context->Eip) < 2 )\n        FIXME(\"Backed up over a real mode segment boundary in FPU code.\\n\");\n\n    context->Eip -= 2; /* back up the return address 2 bytes */\n\n    TRACE(\"Modified code in FPU int call to 0x9b 0x%x\\n\",Opcode);\n}\n"
  },
  {
    "path": "krnl386/global.c",
    "content": "/*\n * Global heap functions\n *\n * Copyright 1995 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n/* 0xffff sometimes seems to mean: CURRENT_DS */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <sys/types.h>\n#include <stdlib.h>\n#include <time.h>\n#include <stdio.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#include <string.h>\n#ifdef HAVE_SYS_PARAM_H\n#include <sys/param.h>\n#endif\n#ifdef HAVE_SYS_SYSCTL_H\n#include <sys/sysctl.h>\n#endif\n\n#include \"wine/winbase16.h\"\n#include \"winternl.h\"\n#include \"kernel16_private.h\"\n#include \"wine/debug.h\"\n#include \"winuser.h\"\n#include \"wingdi.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(global);\n\n  /* Global arena block */\ntypedef struct\n{\n    void     *base;          /* Base address (0 if discarded) */\n    DWORD     size;          /* Size in bytes (0 indicates a free block) */\n    HGLOBAL16 handle;        /* Handle for this block */\n    HGLOBAL16 hOwner;        /* Owner of this block */\n    BYTE      lockCount;     /* Count of GlobalFix() calls */\n    BYTE      pageLockCount; /* Count of GlobalPageLock() calls */\n    BYTE      flags;         /* Allocation flags */\n    BYTE      selCount;      /* Number of selectors allocated for this block */\n    DWORD     dib_avail_size;\n    WORD      wSeg;\n    WORD      wType;\n    HGLOBAL   link_hndl;\n    BYTE      pad[0x10 - 4 - 2 - 2 - 4];     /* win31 GLOBALARENA size = 0x20 */\n} GLOBALARENA;\n\n  /* Flags definitions */\n#define GA_MOVEABLE     0x02  /* same as GMEM_MOVEABLE */\n#define GA_DGROUP       0x04\n#define GA_DISCARDABLE  0x08\n#define GA_IPCSHARE     0x10  /* same as GMEM_DDESHARE */\n#define GA_DOSMEM       0x20\n\n/* Arena array (FIXME) */\nstatic GLOBALARENA *pGlobalArena;\nstatic int globalArenaSize;\nstatic DWORD *selTable;\n\n#define GLOBAL_MAX_ALLOC_SIZE 0x00ff0000  /* Largest allocation is 16M - 64K */\n#define GLOBAL_MAX_COUNT      8192        /* Max number of allocated blocks */\n\n#define VALID_HANDLE(handle) (((handle)&4)&&(((handle)>>__AHSHIFT)<globalArenaSize))\n#define GET_ARENA_PTR(handle)  (pGlobalArena + ((handle) >> __AHSHIFT))\n\nstatic HANDLE get_win16_heap(void)\n{\n    static HANDLE win16_heap;\n\n    /* we create global memory block with execute permission. The access can be limited\n     * for 16-bit code on selector level */\n    if (!win16_heap) win16_heap = HeapCreate(HEAP_CREATE_ENABLE_EXECUTE, 0, 0);\n    return win16_heap;\n}\n\nstatic void clear_sel_table(WORD sel, WORD selcount)\n{\n    for (int i = 0; i < selcount; i++)\n    {\n        selTable[(sel + i) >> __AHSHIFT] = 0;\n    }\n}\nstatic void set_sel_table(WORD sel, WORD selcount)\n{\n    for (int i = 0; i < selcount; i++)\n    {\n        selTable[(sel + i) >> __AHSHIFT] = (sel >> __AHSHIFT) * sizeof(GLOBALARENA);\n    }\n}\n\n\n/***********************************************************************\n *           GLOBAL_GetArena\n *\n * Return the arena for a given selector, growing the arena array if needed.\n */\nstatic GLOBALARENA *GLOBAL_GetArena( WORD sel, WORD selcount )\n{\n    if (((sel >> __AHSHIFT) + selcount) > globalArenaSize)\n    {\n        int newsize = ((sel >> __AHSHIFT) + selcount + 0xff) & ~0xff;\n\n        if (!pGlobalArena)\n        {\n            SIZE_T size;\n            pThhook->SelTableLen = GLOBAL_MAX_COUNT * sizeof(DWORD);\n            size = GLOBAL_MAX_COUNT * sizeof(GLOBALARENA) + 0x80 /* unknown */ + pThhook->SelTableLen;\n            pGlobalArena = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, size);\n            if (!pGlobalArena) return 0;\n            WORD sel = SELECTOR_AllocBlock(pGlobalArena, 0x10000, WINE_LDT_FLAGS_DATA);\n            SetSelectorLimit16(sel, size - 1);\n            pThhook->hGlobalHeap = sel;\n            pThhook->pGlobalHeap = sel;\n            pThhook->SelTableStart = GLOBAL_MAX_COUNT * sizeof(GLOBALARENA) + 0x80; /* 0x00040080; */\n            selTable = (DWORD*)((BYTE*)(pGlobalArena) + pThhook->SelTableStart);\n            set_sel_table(sel, 1);\n        }\n        if (newsize > GLOBAL_MAX_COUNT) return 0;\n        globalArenaSize = newsize;\n    }\n    return pGlobalArena + (sel >> __AHSHIFT);\n}\n\nvoid debug_handles(void)\n{\n    int printed=0;\n    int i;\n    for (i = globalArenaSize-1 ; i>=0 ; i--) {\n\tif (pGlobalArena[i].size!=0 && (pGlobalArena[i].handle & 0x8000)){\n\t    printed=1;\n\t    DPRINTF(\"0x%08x, \",pGlobalArena[i].handle);\n\t}\n    }\n    if (printed)\n\tDPRINTF(\"\\n\");\n}\n\n\n/***********************************************************************\n *           GLOBAL_CreateBlock\n *\n * Create a global heap block for a fixed range of linear memory.\n */\nHGLOBAL16 GLOBAL_CreateBlock( WORD flags, void *ptr, DWORD size,\n                              HGLOBAL16 hOwner, unsigned char selflags, WORD sel )\n{\n    WORD selcount;\n    GLOBALARENA *pArena;\n\n      /* Allocate the selector(s) */\n\n    if (sel)\n    {\n        if (size > 65536)\n        {\n            ERR(\"prealloced sel must not be larger than 65536\");\n            return 0;\n        }\n        WORD descflags = selflags & 0x40 ? (selflags & ~0x40) | 0x4000 : selflags;\n        SELECTOR_ReallocBlock(sel, ptr, size);\n        SelectorAccessRights16(sel, 1, descflags);\n    }\n    else\n        sel = SELECTOR_AllocBlock( ptr, size, selflags );\n    if (!sel) return 0;\n    selcount = (size + 0xffff) / 0x10000;\n\n    if (!(pArena = GLOBAL_GetArena( sel, selcount )))\n    {\n        SELECTOR_FreeBlock( sel );\n        return 0;\n    }\n\n      /* Fill the arena block */\n\n    pArena->base = ptr;\n    pArena->size = size == 1 && ptr == NULL ? 0 : GetSelectorLimit16(sel) + 1;\n    pArena->handle = (flags & GMEM_MOVEABLE) ? sel - 1 : sel;\n    pArena->hOwner = hOwner;\n    pArena->lockCount = 0;\n    pArena->pageLockCount = 0;\n    pArena->wSeg = 0;\n    pArena->wType = GT_UNKNOWN;\n    pArena->flags = flags & GA_MOVEABLE;\n    pArena->link_hndl = NULL;\n    if (flags & GMEM_DISCARDABLE) pArena->flags |= GA_DISCARDABLE;\n    if (flags & GMEM_DDESHARE) pArena->flags |= GA_IPCSHARE;\n    if (!(selflags & (WINE_LDT_FLAGS_CODE^WINE_LDT_FLAGS_DATA))) pArena->flags |= GA_DGROUP;\n    pArena->selCount = selcount;\n    if (selcount > 1)  /* clear the next arena blocks */\n        memset( pArena + 1, 0, (selcount - 1) * sizeof(GLOBALARENA) );\n\n    set_sel_table(sel, selcount);\n    return pArena->handle;\n}\n\n\n/***********************************************************************\n *           GLOBAL_FreeBlock\n *\n * Free a block allocated by GLOBAL_CreateBlock, without touching\n * the associated linear memory range.\n */\nBOOL16 GLOBAL_FreeBlock( HGLOBAL16 handle )\n{\n    WORD sel;\n    GLOBALARENA *pArena;\n\n    if (!handle) return TRUE;\n    sel = GlobalHandleToSel16( handle );\n    if (!VALID_HANDLE(sel)) return FALSE;\n    pArena = GET_ARENA_PTR(sel);\n    SELECTOR_FreeBlock( sel );\n    clear_sel_table(sel, pArena->selCount);\n    memset( pArena, 0, sizeof(GLOBALARENA) );\n    return TRUE;\n}\n\n/***********************************************************************\n *           GLOBAL_MoveBlock\n */\nBOOL16 GLOBAL_MoveBlock( HGLOBAL16 handle, void *ptr, DWORD size )\n{\n    WORD sel;\n    GLOBALARENA *pArena;\n\n    if (!handle) return TRUE;\n    sel = GlobalHandleToSel16( handle );\n    if (!VALID_HANDLE(sel)) return FALSE;\n    pArena = GET_ARENA_PTR(sel);\n    if (pArena->selCount != 1)\n        return FALSE;\n\n    pArena->base = ptr;\n    pArena->size = size;\n    SELECTOR_ReallocBlock( sel, ptr, size );\n    return TRUE;\n}\n\n/***********************************************************************\n *           GLOBAL_Alloc\n *\n * Implementation of GlobalAlloc16()\n */\nHGLOBAL16 GLOBAL_Alloc( UINT16 flags, DWORD size, HGLOBAL16 hOwner, unsigned char selflags, WORD sel )\n{\n    void *ptr;\n    HGLOBAL16 handle;\n\n    TRACE(\"%d flags=%04x\\n\", size, flags );\n\n    /* If size is 0, create a discarded block */\n\n    if (size == 0) return GLOBAL_CreateBlock( flags, NULL, 1, hOwner, selflags, sel );\n\n    /* Fixup the size */\n    DWORD fixup_size = (size < 0x10000) ? 0x1f : 0xfff; // selectors larger than 64k need page granularity\n\n    if (size > GLOBAL_MAX_ALLOC_SIZE) return 0;\n    size = (size + fixup_size) & ~fixup_size;\n\n    /* Allocate the linear memory */\n    ptr = HeapAlloc( get_win16_heap(), 0, size);\n      /* FIXME: free discardable blocks and try again? */\n    if (!ptr) return 0;\n\n      /* Allocate the selector(s) */\n\n    handle = GLOBAL_CreateBlock( flags, ptr, size, hOwner, selflags, sel );\n    if (!handle)\n    {\n        HeapFree( get_win16_heap(), 0, ptr );\n        return 0;\n    }\n\n    if (flags & GMEM_ZEROINIT) memset( ptr, 0, size );\n    else if (size > 100) // some programs depend on the block not being cleared also work around bug in procyan2\n    {\n        for (int i = 1; i < 22; i++)\n            ((char *)ptr)[size - i] = 0xff;\n    }\n    else ((char *)ptr)[size - 1] = 0xff;\n    return handle;\n}\nWORD GLOBAL_GetSegNum(HGLOBAL16 hg)\n{\n    return GET_ARENA_PTR(hg)->wSeg;\n}\n\nvoid GLOBAL_SetSeg(HGLOBAL16 hg, WORD wSeg, WORD type)\n{\n    GET_ARENA_PTR(hg)->wSeg = wSeg;\n    GET_ARENA_PTR(hg)->wType = type;\n}\n\nHGLOBAL GLOBAL_GetLink(HGLOBAL16 hg)\n{\n    return GET_ARENA_PTR(hg)->link_hndl;\n}\n\nvoid GLOBAL_SetLink(HGLOBAL16 hg16, HGLOBAL hg)\n{\n    GET_ARENA_PTR(hg16)->link_hndl = hg;\n}\n\nHGLOBAL16 GLOBAL_FindLink(HGLOBAL hg)\n{\n    int i;\n    GLOBALARENA *pArena = pGlobalArena;\n    for (i = 0; i < globalArenaSize; i++, pArena++)\n    {\n        if ((pArena->size != 0) && (pArena->link_hndl == hg))\n            return pArena->handle;\n    }\n    return 0;\n}\n\n/***********************************************************************\n *           GlobalAlloc     (KERNEL.15)\n *           GlobalAlloc16   (KERNEL32.24)\n *\n * Allocate a global memory object.\n *\n * RETURNS\n *\tHandle: Success\n *\tNULL: Failure\n */\nHGLOBAL16 WINAPI GlobalAlloc16(\n                 UINT16 flags, /* [in] Object allocation attributes */\n                 DWORD size    /* [in] Number of bytes to allocate */\n) {\n    HANDLE16 owner = GetCurrentPDB16();\n\n    if (flags & GMEM_DDESHARE)\n    {\n        /* make it owned by the calling module */\n        STACK16FRAME *frame = CURRENT_STACK16;\n        owner = GetExePtr( frame->cs );\n    }\n    HGLOBAL16 handle = GLOBAL_Alloc( flags, size, owner, WINE_LDT_FLAGS_DATA, 0 );\n    if (!handle)\n    {\n        ERR(\"Could not allocate %04X,%08X\\n\", flags, size);\n    }\n    return handle;\n}\n\n\n/***********************************************************************\n *           GlobalReAlloc     (KERNEL.16)\n *\n * Change the size or attributes of a global memory object.\n *\n * RETURNS\n *\tHandle: Success\n *\tNULL: Failure\n */\nHGLOBAL16 WINAPI GlobalReAlloc16(\n                 HGLOBAL16 handle, /* [in] Handle of global memory object */\n                 DWORD size,       /* [in] New size of block */\n                 UINT16 flags      /* [in] How to reallocate object */\n) {\n    WORD selcount;\n    DWORD oldsize;\n    void *ptr, *newptr;\n    GLOBALARENA *pArena, *pNewArena;\n    WORD sel = GlobalHandleToSel16( handle );\n    HANDLE heap = get_win16_heap();\n\n    TRACE(\"%04x %d flags=%04x\\n\",\n                    handle, size, flags );\n    if (!handle) return 0;\n\n    if (!VALID_HANDLE(handle))\n    {\n        WARN(\"Invalid handle 0x%04x!\\n\", handle);\n        return 0;\n    }\n    pArena = GET_ARENA_PTR( handle );\n\n    if (pArena->wType == GT_INTERNAL)\n        return 0;\n      /* Discard the block if requested */\n\n    if ((size == 0) && (flags & GMEM_MOVEABLE) && !(flags & GMEM_MODIFY))\n    {\n        if (!(pArena->flags & GA_MOVEABLE) ||\n            !(pArena->flags & GA_DISCARDABLE) ||\n            (pArena->lockCount > 0) || (pArena->pageLockCount > 0)) return 0;\n\n        if (pArena->dib_avail_size)\n        {\n            FIXME(\"DIB.DRV\\n\");\n        }\n        else if (pArena->flags & GA_DOSMEM)\n            DOSMEM_FreeBlock( pArena->base );\n        else\n            HeapFree( heap, 0, pArena->base );\n        pArena->base = 0;\n\n        /* Note: we rely on the fact that SELECTOR_ReallocBlock won't\n         * change the selector if we are shrinking the block.\n\t * FIXME: shouldn't we keep selectors until the block is deleted?\n\t */\n        SELECTOR_ReallocBlock( sel, 0, 1 );\n        return handle;\n    }\n\n      /* Change the flags */\n\n    if (flags & GMEM_MODIFY)\n    {\n          /* Change the flags, leaving GA_DGROUP alone */\n        pArena->flags = (pArena->flags & GA_DGROUP) | (flags & GA_MOVEABLE);\n        if (flags & GMEM_DISCARDABLE) pArena->flags |= GA_DISCARDABLE;\n        return handle;\n    }\n\n\n      /* Fixup the size */\n    DWORD fixup_size = 0x1f;\n    BOOL old = IsOldWindowsTask(GetCurrentTask());\n    DWORD add_size = old ? 0x100 : 0;\n    if (size + add_size > 0x10000)\n        add_size = 0;\n\n    if (size > GLOBAL_MAX_ALLOC_SIZE - (fixup_size + 1)) return 0;\n    if (size == 0) size = fixup_size + 1;\n    else size = (size + fixup_size) & ~fixup_size;\n\n      /* Reallocate the linear memory */\n\n    ptr = pArena->base;\n    oldsize = pArena->size;\n    TRACE(\"oldbase %p oldsize %08x newsize %08x\\n\", ptr,oldsize,size);\n    if (ptr && (size == oldsize)) return handle;  /* Nothing to do */\n\n    if (pArena->dib_avail_size)\n    {\n        if (size > pArena->dib_avail_size)\n        {\n            ERR(\"could not realloc dib memory\\n\");\n            return 0;\n        }\n        pArena->size = size;\n        SetSelectorLimit16(sel, size - 1);\n        return handle;\n    }\n    if (pArena->flags & GA_DOSMEM)\n    {\n        if (DOSMEM_ResizeBlock(ptr, size, TRUE) == size) \n            newptr = ptr;\n        else if(pArena->pageLockCount > 0)\n            newptr = 0;\n        else\n        {\n            newptr = DOSMEM_AllocBlock( size, NULL );\n            if (newptr)\n            {\n                memcpy( newptr, ptr, oldsize );\n                DOSMEM_FreeBlock( ptr );\n            }\n        }\n    }\n    else\n    {\n        /*\n         * if more than one reader (e.g. some pointer has been \n         * given out by GetVDMPointer32W16),\n         * only try to realloc in place\n         */\n\n\tif (ptr)\n            newptr = HeapReAlloc( heap,\n\t\t(pArena->pageLockCount > 0) ? HEAP_REALLOC_IN_PLACE_ONLY : 0, \n                              ptr, size + add_size );\n\telse\n            newptr = HeapAlloc( heap, 0, size + add_size );\n\n    }\n\n    if (!newptr)\n    {\n        FIXME(\"Realloc failed lock %d\\n\",pArena->pageLockCount);\n        if (pArena->pageLockCount <1)\n        {\n            if (pArena->flags & GA_DOSMEM)\n                DOSMEM_FreeBlock( pArena->base );\n            else\n                HeapFree( heap, 0, ptr );\n            SELECTOR_FreeBlock( sel );\n            memset( pArena, 0, sizeof(GLOBALARENA) );\n        }\n        return 0;\n    }\n    ptr = newptr;\n\n      /* Reallocate the selector(s) */\n\n    sel = SELECTOR_ReallocBlock( sel, ptr, size + add_size);\n    if (!sel)\n    {\n        if (pArena->flags & GA_DOSMEM)\n            DOSMEM_FreeBlock( pArena->base );\n        else\n            HeapFree( heap, 0, ptr );\n        memset( pArena, 0, sizeof(GLOBALARENA) );\n        return 0;\n    }\n    selcount = (size + 0xffff) / 0x10000;\n\n    if (!(pNewArena = GLOBAL_GetArena( sel, selcount )))\n    {\n        if (pArena->flags & GA_DOSMEM)\n            DOSMEM_FreeBlock( pArena->base );\n        else\n            HeapFree( heap, 0, ptr );\n        SELECTOR_FreeBlock( sel );\n        return 0;\n    }\n\n      /* Fill the new arena block\n         As we may have used HEAP_REALLOC_IN_PLACE_ONLY, areas may overlap*/\n\n    if (pNewArena != pArena)\n    {\n        clear_sel_table( handle, pArena->selCount );\n        memmove( pNewArena, pArena, sizeof(GLOBALARENA) );\n        memset( pArena, 0, sizeof(GLOBALARENA) );\n        set_sel_table( pNewArena->handle, selcount );\n    }\n    pNewArena->base = ptr;\n    pNewArena->size = GetSelectorLimit16(sel) + 1 - add_size;\n    pNewArena->selCount = selcount;\n    pNewArena->handle = (pNewArena->flags & GA_MOVEABLE) ? sel - 1 : sel;\n\n    if (selcount > 1)  /* clear the next arena blocks */\n        memset( pNewArena + 1, 0, (selcount - 1) * sizeof(GLOBALARENA) );\n\n    if ((oldsize < size) && (flags & GMEM_ZEROINIT))\n        memset( (char *)ptr + oldsize, 0, size - oldsize );\n    return !(pNewArena->handle ^ handle & ~1) ? handle : pNewArena->handle;\n}\n\nstatic void check_gptr(HANDLE src)\n{\n    BOOL valid = FALSE;\n    if ((DWORD)src & 4)\n    {\n        if (GlobalFlags(src) != GMEM_INVALID_HANDLE)\n            valid = TRUE;\n    }\n    else\n    {\n        if (HeapValidate(GetProcessHeap(), 0, src))\n            valid = TRUE;\n    }\n    if (valid)\n        GlobalFree(src);\n}\n\n/***********************************************************************\n *           GlobalFree     (KERNEL.17)\n *           GlobalFree16   (KERNEL32.31)\n * RETURNS\n *\tNULL: Success\n *\tHandle: Failure\n */\nHGLOBAL16 WINAPI GlobalFree16(\n                 HGLOBAL16 handle /* [in] Handle of global memory object */\n) {\n    void *ptr;\n\n    if (!VALID_HANDLE(handle))\n    {\n        WARN(\"Invalid handle 0x%04x passed to GlobalFree16!\\n\",handle);\n        return 0;\n    }\n    GLOBALARENA *pArena = GET_ARENA_PTR(handle);\n    ptr = pArena->base;\n    if (pArena->wType == GT_INTERNAL)\n        return 0;\n\n    TRACE(\"%04x\\n\", handle );\n    if (pArena->dib_avail_size)\n    {\n        FIXME(\"DIB.DRV\\n\");\n        return 0;\n    }\n    HGLOBAL ddehndl = GLOBAL_GetLink(handle);\n    if (!GLOBAL_FreeBlock( handle )) return handle;  /* failed */\n    HeapFree( get_win16_heap(), 0, ptr );\n    if (ddehndl) check_gptr(ddehndl);\n    return 0;\n}\n\n\n/**********************************************************************\n *           K32WOWGlobalLock16         (KERNEL32.60)\n */\nSEGPTR WINAPI K32WOWGlobalLock16( HGLOBAL16 handle )\n{\n    WORD sel = GlobalHandleToSel16( handle );\n    TRACE(\"(%04x) -> %08x\\n\", handle, MAKELONG( 0, sel ) );\n\n    if (handle)\n    {\n\tif (handle == (HGLOBAL16)-1) handle = CURRENT_DS;\n\n\tif (!VALID_HANDLE(handle)) {\n\t    WARN(\"Invalid handle 0x%04x passed to WIN16_GlobalLock16!\\n\",handle);\n\t    sel = 0;\n\t}\n\telse if (!GET_ARENA_PTR(handle)->base)\n            sel = 0;\n        else if ((GET_ARENA_PTR(handle)->flags & GA_DISCARDABLE) || IsOldWindowsTask(GetCurrentTask()))\n            GET_ARENA_PTR(handle)->lockCount++;\n    }\n\n    return MAKESEGPTR( sel, 0 );\n\n}\n\n/*\nWOW32\nGLOBALALLOC\ngs=0000,fs=0000,es=16e7,ds=16e7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000\ngs=0000,fs=0000,es=0000,ds=16e7,edi=00000000,esi=00000000,ebx=000016ce,edx=00040002,ecx=000016ce,eax=000016ce\nGLOBALLOCK\ngs=0000,fs=0000,es=16e7,ds=16e7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000\ngs=0000,fs=0000,es=0000,ds=16e7,edi=00000000,esi=00000000,ebx=00000000,edx=000016cf,ecx=000016cf,eax=00000000\nGLOBALUNLOCK\ngs=0000,fs=0000,es=16e7,ds=16e7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000\ngs=0000,fs=0000,es=0000,ds=16e7,edi=00000000,esi=00000000,ebx=00000000,edx=000016ce,ecx=00000000,eax=00000000\nGLOBALREALLOC\ngs=0000,fs=0000,es=16e7,ds=16e7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000\ngs=0000,fs=0000,es=0000,ds=16e7,edi=00000000,esi=00000000,ebx=000002a0,edx=00000000,ecx=000016ce,eax=000016ce\nGLOBALSIZE\ngs=0000,fs=0000,es=16e7,ds=16e7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000\ngs=0000,fs=0000,es=0000,ds=16e7,edi=00000000,esi=00000000,ebx=0000267e,edx=00000000,ecx=00000200,eax=00002000\nGLOBALHANDLE\ngs=0000,fs=0000,es=16e7,ds=16e7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000\ngs=0000,fs=0000,es=16e7,ds=16e7,edi=00000000,esi=00000000,ebx=00002676,edx=000016cf,ecx=00000000,eax=000016ce\nGLOBALFLAGS\ngs=0000,fs=0000,es=16e7,ds=16e7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000\ngs=0000,fs=0000,es=0000,ds=16e7,edi=00000000,esi=00000000,ebx=0000267e,edx=000016cf,ecx=00000000,eax=00000000\nGLOBALFREE\ngs=0000,fs=0000,es=16e7,ds=16e7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000\ngs=0000,fs=0000,es=0000,ds=16e7,edi=00000000,esi=00000000,ebx=00000fc0,edx=00000000,ecx=00000000,eax=00000000\n\nGLOBALALLOC\ngs=0000,fs=0000,es=16e7,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd\ngs=0000,fs=0000,es=0000,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=000016ce,edx=00040002,ecx=000016ce,eax=000016ce\nGLOBALLOCK\ngs=0000,fs=0000,es=16e7,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd\ngs=0000,fs=0000,es=0000,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcd16cf,ecx=cdcd16cf,eax=00000000\nGLOBALUNLOCK\ngs=0000,fs=0000,es=16e7,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd\ngs=0000,fs=0000,es=0000,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcd16ce,ecx=cdcd0000,eax=00000000\nGLOBALREALLOC\ngs=0000,fs=0000,es=16e7,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd\ngs=0000,fs=0000,es=0000,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=000002a0,edx=00000000,ecx=000016ce,eax=000016ce\nGLOBALSIZE\ngs=0000,fs=0000,es=16e7,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd\ngs=0000,fs=0000,es=0000,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcd267e,edx=cdcd0000,ecx=cdcd0200,eax=00002000\nGLOBALHANDLE\ngs=0000,fs=0000,es=16e7,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd\ngs=0000,fs=0000,es=16e7,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcd2676,edx=cdcd16cf,ecx=cdcdcdcd,eax=000016ce\nGLOBALFLAGS\ngs=0000,fs=0000,es=16e7,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd\ngs=0000,fs=0000,es=0000,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcd267e,edx=cdcd16cf,ecx=cdcd0000,eax=00000000\nGLOBALFREE\ngs=0000,fs=0000,es=16e7,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd\ngs=0000,fs=0000,es=0000,ds=16e7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=00000fc0,edx=00000000,ecx=cdcd0000,eax=00000000\n\nWIN31\nGLOBALALLOC\ngs=0000,fs=0000,es=1de7,ds=1de7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000\ngs=0000,fs=0000,es=0000,ds=1de7,edi=00000000,esi=00000000,ebx=00001dce,edx=810b0002,ecx=00001dce,eax=00001dce\nGLOBALLOCK\ngs=0000,fs=0000,es=1de7,ds=1de7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000\ngs=0000,fs=0000,es=0000,ds=1de7,edi=00000000,esi=00000000,ebx=00000000,edx=00001dcf,ecx=00001dcf,eax=00000000\nGLOBALUNLOCK\ngs=0000,fs=0000,es=1de7,ds=1de7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000\ngs=0000,fs=0000,es=0000,ds=1de7,edi=00000000,esi=00000000,ebx=00000000,edx=00001dce,ecx=00000000,eax=00000000\nGLOBALREALLOC\ngs=0000,fs=0000,es=1de7,ds=1de7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000\ngs=0000,fs=0000,es=0000,ds=1de7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00001dce,eax=00001dce\nGLOBALSIZE\ngs=0000,fs=0000,es=1de7,ds=1de7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000\ngs=0000,fs=0000,es=0000,ds=1de7,edi=00000000,esi=00000000,ebx=0000267e,edx=00000000,ecx=00000200,eax=00002000\nGLOBALHANDLE\ngs=0000,fs=0000,es=1de7,ds=1de7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000\ngs=0000,fs=0000,es=1de7,ds=1de7,edi=00000000,esi=00000000,ebx=00002676,edx=00001dcf,ecx=00000000,eax=00001dce\nGLOBALFLAGS\ngs=0000,fs=0000,es=1de7,ds=1de7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000\ngs=0000,fs=0000,es=0000,ds=1de7,edi=00000000,esi=00000000,ebx=0000267e,edx=00001dcf,ecx=00000000,eax=00000000\nGLOBALFREE\ngs=0000,fs=0000,es=1de7,ds=1de7,edi=00000000,esi=00000000,ebx=00000000,edx=00000000,ecx=00000000,eax=00000000\ngs=0000,fs=0000,es=0000,ds=1de7,edi=00000000,esi=00000000,ebx=00004c20,edx=00000000,ecx=00000000,eax=00000000\n\nGLOBALALLOC\ngs=0000,fs=0000,es=1de7,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd\ngs=0000,fs=0000,es=0000,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=00001dce,edx=810b0002,ecx=00001dce,eax=00001dce\nGLOBALLOCK\ngs=0000,fs=0000,es=1de7,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd\ngs=0000,fs=0000,es=0000,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcd1dcf,ecx=cdcd1dcf,eax=00000000\nGLOBALUNLOCK\ngs=0000,fs=0000,es=1de7,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd\ngs=0000,fs=0000,es=0000,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcd1dce,ecx=cdcd0000,eax=00000000\nGLOBALREALLOC\ngs=0000,fs=0000,es=1de7,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd\ngs=0000,fs=0000,es=0000,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=00000000,edx=00000000,ecx=00001dce,eax=00001dce\nGLOBALSIZE\ngs=0000,fs=0000,es=1de7,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd\ngs=0000,fs=0000,es=0000,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcd267e,edx=cdcd0000,ecx=cdcd0200,eax=00002000\nGLOBALHANDLE\ngs=0000,fs=0000,es=1de7,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd\ngs=0000,fs=0000,es=1de7,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcd2676,edx=cdcd1dcf,ecx=cdcdcdcd,eax=00001dce\nGLOBALFLAGS\ngs=0000,fs=0000,es=1de7,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd\ngs=0000,fs=0000,es=0000,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcd267e,edx=cdcd1dcf,ecx=cdcd0000,eax=00000000\nGLOBALFREE\ngs=0000,fs=0000,es=1de7,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=cdcdcdcd,edx=cdcdcdcd,ecx=cdcdcdcd,eax=cdcdcdcd\ngs=0000,fs=0000,es=0000,ds=1de7,edi=cdcdcdcd,esi=cdcdcdcd,ebx=00004bc0,edx=00000000,ecx=cdcd0000,eax=00000000\n\nGLOBALALLOC\nes=0 ecx=ebx=eax=handle\nedx=???\nGLOBALLOCK\nes=0 cx=dx=segment\neax=offset\nGLOBALUNLOCK\nes=0 dx=handle\neax=result\ncx=0?result?\nGLOBALREALLOC\nes=0 ecx=eax=handle\nedx=0?\nebx=???\nGLOBALSIZE\nes=0 eax=size(low)\ncx=size>>4?\ndx=size(high)\nbx=???\nGLOBALHANDLE\nes=es\neax=handle dx=segment\nbx=???\nGLOBALFLAGS\nes=0 eax=result\ncx=0?result?\ndx=segment\nbx=???\nGLOBALFREE\nes=0 eax=result\ncx=0?result?\nedx=0?result?\nebx=???\n*/\n/* yes, win16 sets es to 0 */\n\nvoid WINAPI WIN16_GlobalAlloc16(UINT16 flags, DWORD size, CONTEXT *context)\n{\n    context->SegEs= 0;\n    context->Ecx = context->Ebx = context->Eax = GlobalAlloc16(flags, size);\n}\n\n/***********************************************************************\n *           GlobalLock   (KERNEL.18)\n *\n * This is the GlobalLock16() function used by 16-bit code.\n */\nSEGPTR WINAPI WIN16_GlobalLock16(HGLOBAL16 handle)\n{\n    SEGPTR ret = K32WOWGlobalLock16(handle);\n    CURRENT_STACK16->ecx &= ~0xffff;\n    CURRENT_STACK16->ecx |= SELECTOROF(ret);  /* selector must be returned in CX as well */\n    CURRENT_STACK16->es = 0;\n    return ret;\n}\n\nHGLOBAL16 WINAPI WIN16_GlobalReAlloc16(HGLOBAL16 handle, DWORD size, UINT16 flags)\n{\n    CURRENT_STACK16->es = 0;\n    return CURRENT_STACK16->ecx = GlobalReAlloc16(handle, size, flags);\n}\nDWORD WINAPI WIN16_GlobalSize16(HGLOBAL16 handle)\n{\n    DWORD size = GlobalSize16(handle);\n    CURRENT_STACK16->es = 0;\n    CURRENT_STACK16->ecx &= ~0xffff;\n    CURRENT_STACK16->ecx |= (WORD)((size >> 4) & 0xffff);\n    return size;\n}\nDWORD WINAPI WIN16_GlobalFlags16(HGLOBAL16 handle)\n{\n    CURRENT_STACK16->es = 0;\n    return MAKELONG(GlobalFlags16(handle), GlobalHandleToSel16(handle));\n}\nDWORD WINAPI WIN16_GlobalFree16(HGLOBAL16 handle)\n{\n    CURRENT_STACK16->es = 0;\n    CURRENT_STACK16->fs = 0;\n    CURRENT_STACK16->gs = 0;\n    return GlobalFree16(handle);\n}\nvoid regen_icon(HICON16 icon);\nDWORD WINAPI WIN16_GlobalUnlock16(HGLOBAL16 handle)\n{\n    DWORD ret = MAKELONG(GlobalUnlock16(handle), handle);\n    CURRENT_STACK16->es = 0;\n    if (!ret) return 0;\n    GLOBALARENA *pArena = GET_ARENA_PTR(handle);\n    if (pArena->wType == (GT_RESOURCE | (12 << 4))) // GD_CURSOR\n    {\n        static void (*regen_icon)(HICON16) = 0;\n        if (!regen_icon)\n            regen_icon = (void (*)(HICON16))GetProcAddress(GetModuleHandle(\"user.exe16\"), \"regen_icon\");\n        regen_icon((HICON16)handle);\n    }\n    return ret;\n}\n\n\n/***********************************************************************\n *           GlobalLock16   (KERNEL32.25)\n *\n * This is the GlobalLock16() function used by 32-bit code.\n *\n * RETURNS\n *\tPointer to first byte of memory block\n *\tNULL: Failure\n */\nLPVOID WINAPI GlobalLock16(\n              HGLOBAL16 handle /* [in] Handle of global memory object */\n) {\n    if (!handle) return 0;\n    if (!VALID_HANDLE(handle))\n        return 0;\n    // don't use IsOldWindowsTask here as it'll cause an infinite loop\n    if (GET_ARENA_PTR(handle)->flags & GA_DISCARDABLE)\n        GET_ARENA_PTR(handle)->lockCount++;\n    return GET_ARENA_PTR(handle)->base;\n}\n\n\n/***********************************************************************\n *           GlobalUnlock     (KERNEL.19)\n *           GlobalUnlock16   (KERNEL32.26)\n * NOTES\n *\tShould the return values be cast to booleans?\n *\n * RETURNS\n *\tTRUE: Object is still locked\n *\tFALSE: Object is unlocked\n */\nBOOL16 WINAPI GlobalUnlock16(\n              HGLOBAL16 handle /* [in] Handle of global memory object */\n) {\n    GLOBALARENA *pArena = GET_ARENA_PTR(handle);\n    if (!VALID_HANDLE(handle)) {\n\tWARN(\"Invalid handle 0x%04x passed to GlobalUnlock16!\\n\",handle);\n        return FALSE;\n    }\n    TRACE(\"%04x\\n\", handle );\n    if (pArena->lockCount) pArena->lockCount--;\n    if (CURRENT_STACK16)\n        CURRENT_STACK16->es = 0;\n    return pArena->lockCount;\n}\n\nBOOL16 WINAPI WIN32_GlobalUnlock16(\n              HGLOBAL16 handle /* [in] Handle of global memory object */\n) {\n    GLOBALARENA *pArena = GET_ARENA_PTR(handle);\n    if (!VALID_HANDLE(handle)) {\n\tWARN(\"Invalid handle 0x%04x passed to GlobalUnlock16!\\n\",handle);\n        return FALSE;\n    }\n    TRACE(\"%04x\\n\", handle );\n    if (pArena->lockCount) pArena->lockCount--;\n    return pArena->lockCount;\n}\n\n\n/***********************************************************************\n *     GlobalChangeLockCount               (KERNEL.365)\n *\n * This is declared as a register function as it has to preserve\n * *all* registers, even AX/DX !\n *\n */\nvoid WINAPI GlobalChangeLockCount16( HGLOBAL16 handle, INT16 delta, CONTEXT *context )\n{\n    if ( delta == 1 )\n        GlobalLock16( handle );\n    else if ( delta == -1 )\n        GlobalUnlock16( handle );\n    else\n        ERR(\"(%04X, %d): strange delta value\\n\", handle, delta );\n}\n\n/***********************************************************************\n *           GlobalSize     (KERNEL.20)\n *           GlobalSize16   (KERNEL32.32)\n * \n * Get the current size of a global memory object.\n *\n * RETURNS\n *\tSize in bytes of object\n *\t0: Failure\n */\nDWORD WINAPI GlobalSize16(\n             HGLOBAL16 handle /* [in] Handle of global memory object */\n) {\n    TRACE(\"%04x\\n\", handle );\n    if (!handle) return 0;\n    if (!VALID_HANDLE(handle))\n\treturn 0;\n    return GET_ARENA_PTR(handle)->size;\n}\n\n\n/***********************************************************************\n *           GlobalHandle   (KERNEL.21)\n *\n * Get the handle associated with a pointer to the global memory block.\n *\n * NOTES\n *\tWhy is GlobalHandleToSel used here with the sel as input?\n *\n * RETURNS\n *\tHandle: Success\n *\tNULL: Failure\n */\nDWORD WINAPI GlobalHandle16(\n             WORD sel /* [in] Address of global memory block */\n) {\n    TRACE(\"%04x\\n\", sel );\n    if (!VALID_HANDLE(sel)) {\n\tWARN(\"Invalid handle 0x%04x passed to GlobalHandle16!\\n\",sel);\n\treturn 0;\n    }\n    WORD handle = GET_ARENA_PTR(sel)->handle;\n    if (!handle)\n        return 0;\n    return MAKELONG( handle, GlobalHandleToSel16(sel) );\n}\n\n/***********************************************************************\n *           GlobalHandleNoRIP   (KERNEL.159)\n */\nDWORD WINAPI GlobalHandleNoRIP16( WORD sel )\n{\n    int i;\n    for (i = globalArenaSize-1 ; i>=0 ; i--) {\n        if (pGlobalArena[i].size!=0 && pGlobalArena[i].handle == sel)\n\t\treturn MAKELONG( GET_ARENA_PTR(sel)->handle, GlobalHandleToSel16(sel) );\n    }\n    return 0;\n}\n\n\n/***********************************************************************\n *           GlobalFlags     (KERNEL.22)\n *\n * Get information about a global memory object.\n *\n * NOTES\n *\tShould this return GMEM_INVALID_HANDLE instead of 0 on invalid\n *\thandle?\n *\n * RETURNS\n *\tValue specifying flags and lock count\n *\tGMEM_INVALID_HANDLE: Invalid handle\n */\nUINT16 WINAPI GlobalFlags16(\n              HGLOBAL16 handle /* [in] Handle of global memory object */\n) {\n    GLOBALARENA *pArena;\n\n    TRACE(\"%04x\\n\", handle );\n    if (!VALID_HANDLE(handle)) {\n\tWARN(\"Invalid handle 0x%04x passed to GlobalFlags16!\\n\",handle);\n\treturn 0;\n    }\n    pArena = GET_ARENA_PTR(handle);\n    return pArena->lockCount |\n           ((pArena->flags & GA_DISCARDABLE) ? GMEM_DISCARDABLE : 0) |\n           ((pArena->base == 0) ? GMEM_DISCARDED : 0);\n}\n\n\n/***********************************************************************\n *           LockSegment   (KERNEL.23)\n */\nHGLOBAL16 WINAPI LockSegment16( HGLOBAL16 handle )\n{\n    TRACE(\"%04x\\n\", handle );\n    if (handle == (HGLOBAL16)-1) handle = CURRENT_DS;\n    if (!VALID_HANDLE(handle)) {\n\tWARN(\"Invalid handle 0x%04x passed to LockSegment16!\\n\",handle);\n\treturn 0;\n    }\n    if ((GET_ARENA_PTR(handle)->flags & GA_DISCARDABLE) || IsOldWindowsTask(GetCurrentTask()))\n        GET_ARENA_PTR(handle)->lockCount++;\n    return handle;\n}\n\n\n/***********************************************************************\n *           UnlockSegment   (KERNEL.24)\n */\nvoid WINAPI UnlockSegment16( HGLOBAL16 handle )\n{\n    TRACE(\"%04x\\n\", handle );\n    if (handle == (HGLOBAL16)-1) handle = CURRENT_DS;\n    if (!VALID_HANDLE(handle)) {\n\tWARN(\"Invalid handle 0x%04x passed to UnlockSegment16!\\n\",handle);\n\treturn;\n    }\n    if(GET_ARENA_PTR(handle)->lockCount) GET_ARENA_PTR(handle)->lockCount--;\n    /* FIXME: this ought to return the lock count in CX (go figure...) */\n}\n\n\n/***********************************************************************\n *           GlobalCompact   (KERNEL.25)\n */\nDWORD WINAPI GlobalCompact16( DWORD desired )\n{\n    return GLOBAL_MAX_ALLOC_SIZE;\n}\n\n\n/***********************************************************************\n *           GlobalFreeAll   (KERNEL.26)\n */\nvoid WINAPI GlobalFreeAll16( HGLOBAL16 owner )\n{\n    int i;\n    GLOBALARENA *pArena;\n\n    pArena = pGlobalArena;\n    for (i = 0; i < globalArenaSize; i++, pArena++)\n    {\n        if ((pArena->size != 0) && (pArena->hOwner == owner))\n            GlobalFree16( pArena->handle );\n    }\n}\n\n\n/***********************************************************************\n *           GlobalWire     (KERNEL.111)\n *           GlobalWire16   (KERNEL32.29)\n */\nSEGPTR WINAPI GlobalWire16( HGLOBAL16 handle )\n{\n    return WIN16_GlobalLock16( handle );\n}\n\n\n/***********************************************************************\n *           GlobalUnWire     (KERNEL.112)\n *           GlobalUnWire16   (KERNEL32.30)\n */\nBOOL16 WINAPI GlobalUnWire16( HGLOBAL16 handle )\n{\n    return !GlobalUnlock16( handle );\n}\n\n\n/***********************************************************************\n *           SetSwapAreaSize   (KERNEL.106)\n */\nLONG WINAPI SetSwapAreaSize16( WORD size )\n{\n    FIXME(\"(%d) - stub!\\n\", size );\n    return MAKELONG( size, 0xffff );\n}\n\n\n/***********************************************************************\n *           GlobalLRUOldest   (KERNEL.163)\n */\nHGLOBAL16 WINAPI GlobalLRUOldest16( HGLOBAL16 handle )\n{\n    TRACE(\"%04x\\n\", handle );\n    if (handle == (HGLOBAL16)-1) handle = CURRENT_DS;\n    return handle;\n}\n\n\n/***********************************************************************\n *           GlobalLRUNewest   (KERNEL.164)\n */\nHGLOBAL16 WINAPI GlobalLRUNewest16( HGLOBAL16 handle )\n{\n    TRACE(\"%04x\\n\", handle );\n    if (handle == (HGLOBAL16)-1) handle = CURRENT_DS;\n    return handle;\n}\n\n\n/***********************************************************************\n *           GetFreeSpace   (KERNEL.169)\n */\nDWORD WINAPI GetFreeSpace16( UINT16 wFlags )\n{\n    MEMORYSTATUS ms;\n    GlobalMemoryStatus( &ms );\n    return min(ms.dwAvailVirtual, 102400000);\n}\n\n/***********************************************************************\n *           GlobalDOSAlloc   (KERNEL.184)\n *\n * Allocate memory in the first MB.\n *\n * RETURNS\n *\tAddress (HW=Paragraph segment; LW=Selector)\n */\nDWORD WINAPI GlobalDOSAlloc16(\n             DWORD size /* [in] Number of bytes to be allocated */\n) {\n   UINT16    uParagraph;\n   LPVOID    lpBlock;\n   DWORD fixup_size = 0x1f;\n   size = (size + fixup_size) & ~fixup_size;\n   lpBlock = DOSMEM_AllocBlock(size, &uParagraph);\n\n   if( lpBlock )\n   {\n       HMODULE16 hModule = GetModuleHandle16(\"KERNEL\");\n       WORD\t wSelector;\n       GLOBALARENA *pArena;\n\n       wSelector = GLOBAL_CreateBlock(GMEM_FIXED, lpBlock, size, hModule, WINE_LDT_FLAGS_DATA, 0 );\n       pArena = GET_ARENA_PTR(wSelector);\n       pArena->flags |= GA_DOSMEM;\n       return MAKELONG(wSelector,uParagraph);\n   }\n   return 0;\n}\n\n\n/***********************************************************************\n *           GlobalDOSFree      (KERNEL.185)\n *\n * Free memory allocated with GlobalDOSAlloc\n *\n * RETURNS\n *\tNULL: Success\n *\tsel: Failure\n */\nWORD WINAPI GlobalDOSFree16(\n            WORD sel /* [in] Selector */\n) {\n   DWORD   block = GetSelectorBase(sel);\n\n   if( block && block < 0x100000 )\n   {\n       LPVOID lpBlock = DOSMEM_MapDosToLinear( block );\n       if( DOSMEM_FreeBlock( lpBlock ) )\n\t   GLOBAL_FreeBlock( sel );\n       sel = 0;\n   }\n   return sel;\n}\n\n\n/***********************************************************************\n *           GlobalPageLock   (KERNEL.191)\n *           GlobalSmartPageLock(KERNEL.230)\n */\nWORD WINAPI GlobalPageLock16( HGLOBAL16 handle )\n{\n    TRACE(\"%04x\\n\", handle );\n    if (!VALID_HANDLE(handle)) {\n\tWARN(\"Invalid handle 0x%04x passed to GlobalPageLock!\\n\",handle);\n\treturn 0;\n    }\n    return ++(GET_ARENA_PTR(handle)->pageLockCount);\n}\n\n\n/***********************************************************************\n *           GlobalPageUnlock   (KERNEL.192)\n *           GlobalSmartPageUnlock(KERNEL.231)\n */\nWORD WINAPI GlobalPageUnlock16( HGLOBAL16 handle )\n{\n    TRACE(\"%04x\\n\", handle );\n    if (!VALID_HANDLE(handle)) {\n\tWARN(\"Invalid handle 0x%04x passed to GlobalPageUnlock!\\n\",handle);\n\treturn 0;\n    }\n    return --(GET_ARENA_PTR(handle)->pageLockCount);\n}\n\n\n/***********************************************************************\n *           GlobalFix     (KERNEL.197)\n *           GlobalFix16   (KERNEL32.27)\n */\nWORD WINAPI GlobalFix16( HGLOBAL16 handle )\n{\n    TRACE(\"%04x\\n\", handle );\n    if (!VALID_HANDLE(handle)) {\n\tWARN(\"Invalid handle 0x%04x passed to GlobalFix16!\\n\",handle);\n\treturn 0;\n    }\n    if ((GET_ARENA_PTR(handle)->flags & GA_DISCARDABLE) || IsOldWindowsTask(GetCurrentTask()))\n        GET_ARENA_PTR(handle)->lockCount++;\n\n    return GlobalHandleToSel16(handle);\n}\n\n\n/***********************************************************************\n *           GlobalUnfix     (KERNEL.198)\n *           GlobalUnfix16   (KERNEL32.28)\n */\nvoid WINAPI GlobalUnfix16( HGLOBAL16 handle )\n{\n    TRACE(\"%04x\\n\", handle );\n    if (!VALID_HANDLE(handle)) {\n\tWARN(\"Invalid handle 0x%04x passed to GlobalUnfix16!\\n\",handle);\n\treturn;\n    }\n    if (GET_ARENA_PTR(handle)->lockCount)\n        GET_ARENA_PTR(handle)->lockCount--;\n}\n\n\n/***********************************************************************\n *           FarSetOwner   (KERNEL.403)\n */\nvoid WINAPI FarSetOwner16( HGLOBAL16 handle, HANDLE16 hOwner )\n{\n    if (!VALID_HANDLE(handle)) {\n\tWARN(\"Invalid handle 0x%04x passed to FarSetOwner!\\n\",handle);\n\treturn;\n    }\n    GET_ARENA_PTR(handle)->hOwner = hOwner;\n}\n\n\n/***********************************************************************\n *           FarGetOwner   (KERNEL.404)\n */\nHANDLE16 WINAPI FarGetOwner16( HGLOBAL16 handle )\n{\n    if (!VALID_HANDLE(handle)) {\n\tWARN(\"Invalid handle 0x%04x passed to FarGetOwner!\\n\",handle);\n\treturn 0;\n    }\n    return GET_ARENA_PTR(handle)->hOwner;\n}\n\n\n/************************************************************************\n *              GlobalMasterHandle (KERNEL.28)\n *\n *\n * Should return selector and handle of the information structure for\n * the global heap. selector and handle are stored in the THHOOK as\n * pGlobalHeap and hGlobalHeap.\n * As Wine doesn't have this structure, we return both values as zero\n * Applications should interpret this as \"No Global Heap\"\n */\nDWORD WINAPI GlobalMasterHandle16(void)\n{\n    DWORD ret = 0;\n    FIXME(\": stub\\n\");\n    // some real mode programs don't check for null, provide enough to prevent crashes\n    if (IsOldWindowsTask(GetCurrentTask()))\n    {\n        // this is an early form of LOCALHEAPINFO\n        static WORD dummyheap[0x18];\n        static WORD sel = 0;\n        if (!sel)\n        {\n            sel = AllocSelector16(0);\n            SetSelectorBase(sel, (DWORD)dummyheap);\n            SetSelectorLimit16(sel, 0x30);\n            SelectorAccessRights16(sel, 1, 0); // data, readonly\n            dummyheap[0] = 'Z'; // check value don't care so pretend MCB end of chain\n            dummyheap[2] = 0; // count is 0\n            dummyheap[3] = sel; // start of chain\n            dummyheap[4] = sel; // pretend MCB pointer\n            dummyheap[18] = -1; // unknown\n        }\n        ret = sel << 16;\n    }\n    return ret;\n}\n\n/***********************************************************************\n *           GlobalHandleToSel   (TOOLHELP.50)\n *\n * FIXME: This is in TOOLHELP but we keep a copy here for now.\n */\nWORD WINAPI GlobalHandleToSel16( HGLOBAL16 handle )\n{\n    if (!handle) return 0;\n    if (!VALID_HANDLE(handle)) {\n\tWARN(\"Invalid handle 0x%04x passed to GlobalHandleToSel!\\n\",handle);\n\treturn 0;\n    }\n    if (!(handle & 7))\n    {\n        WARN(\"Program attempted invalid selector conversion\\n\" );\n        return handle - 1;\n    }\n    return handle | 7;\n}\n\n\n/***********************************************************************\n *           GetFreeMemInfo   (KERNEL.316)\n */\nDWORD WINAPI GetFreeMemInfo16(void)\n{\n    SYSTEM_BASIC_INFORMATION info;\n    MEMORYSTATUS status;\n\n    NtQuerySystemInformation( SystemBasicInformation, &info, sizeof(info), NULL );\n    GlobalMemoryStatus( &status );\n    return MAKELONG( status.dwTotalVirtual / info.PageSize, status.dwAvailVirtual / info.PageSize );\n}\n\n/***********************************************************************\n *           A20Proc   (KERNEL.165)\n */\nvoid WINAPI A20Proc16( WORD unused )\n{\n    /* this is also a NOP in Windows */\n}\n\n/***********************************************************************\n *           LimitEMSPages   (KERNEL.156)\n */\nDWORD WINAPI LimitEMSPages16( DWORD unused )\n{\n    return 0;\n}\n\nvoid WINAPI DibMapGlobalMemory(WORD sel, void *base, DWORD size)\n{\n    GLOBALARENA *pArena = GET_ARENA_PTR(sel);\n    int i;\n    if (!sel) /* not hglobal */\n    {\n        SetSelectorBase(sel, base);\n        return;\n    }\n    pArena->dib_avail_size = size;\n    pArena->base = base;\n    for (i = 0; i < pArena->selCount; i++)\n    {\n        SetSelectorBase(sel + i * 8, (LPBYTE)base + i * 0x10000);\n    }\n}\n\nvoid WINAPI DibUnmapGlobalMemory(void *base, DWORD size)\n{\n    int i;\n    LPVOID heap = HeapAlloc(get_win16_heap(), 0, size);\n    memcpy(heap, base, size);\n    for (i = 0; i < globalArenaSize; i++)\n    {\n        GLOBALARENA *pArena = pGlobalArena + i;\n        if (!pArena->dib_avail_size)\n            continue;\n        if (pArena->base >= base && (LPBYTE)pArena->base < (LPBYTE)base + size)\n        {\n            pArena->dib_avail_size = 0;\n            pArena->base = (LPBYTE)heap + ((SIZE_T)pArena->base - (SIZE_T)base);\n            for (i = 0; i < pArena->selCount; i++)\n                SetSelectorBase(pArena->handle + i * 8, (LPBYTE)pArena->base + i * 0x10000);\n        }\n    }\n}\n\nvoid WINAPI GlobalMapInternal(WORD sel, void *base, DWORD size)\n{\n    GLOBALARENA *pArena = GET_ARENA_PTR(sel);\n    if (!sel)\n        return;\n    if (!base || !size)\n    {\n        memset(pArena, 0, sizeof(GLOBALARENA));\n        return;\n    }\n    pArena->base = base;\n    pArena->size = size;\n    pArena->wType = GT_INTERNAL;\n}\n"
  },
  {
    "path": "krnl386/instr.c",
    "content": "/*\n * Emulation of privileged instructions\n *\n * Copyright 1995 Alexandre Julliard\n * Copyright 2005 Ivan Leo Puoti\n * Copyright 2005 Laurent Pinchart\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdarg.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winternl.h\"\n#include \"wine/winuser16.h\"\n#include \"excpt.h\"\n#include \"wine/debug.h\"\n#include \"kernel16_private.h\"\n#include \"dosexe.h\"\n#include \"wine/exception.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(int);\nWINE_DECLARE_DEBUG_CHANNEL(io);\n\n/* macros to set parts of a DWORD */\n#define SET_LOWORD(dw,val)  ((dw) = ((dw) & 0xffff0000) | LOWORD(val))\n#define SET_LOBYTE(dw,val)  ((dw) = ((dw) & 0xffffff00) | LOBYTE(val))\n#define ADD_LOWORD(dw,val)  ((dw) = ((dw) & 0xffff0000) | LOWORD((DWORD)(dw)+(val)))\n#define ISV86(context)      ((context)->EFlags & 0x00020000)\n\nstatic inline void add_stack( CONTEXT *context, int offset )\n{\n    if (ISV86(context) || !IS_SELECTOR_32BIT(context->SegSs))\n        ADD_LOWORD( context->Esp, offset );\n    else\n        context->Esp += offset;\n}\n\nstatic inline void *make_ptr( CONTEXT *context, DWORD seg, DWORD off, int long_addr )\n{\n    if (ISV86(context)) return (void *)((seg << 4) + LOWORD(off));\n    if (wine_ldt_is_system(seg)) return (void *)off;\n    if (!long_addr) off = LOWORD(off);\n    return (char *) MapSL( MAKESEGPTR( seg, 0 ) ) + off;\n}\n\nstatic inline void *get_stack( CONTEXT *context )\n{\n    if (ISV86(context)) return (void *)((context->SegSs << 4) + LOWORD(context->Esp));\n    return wine_ldt_get_ptr( context->SegSs, context->Esp );\n}\n\n#include \"pshpack1.h\"\nstruct idtr\n{\n    WORD  limit;\n    BYTE *base;\n};\n#include \"poppack.h\"\n\nstatic LDT_ENTRY idt[256];\n\nstatic inline struct idtr get_idtr(void)\n{\n    struct idtr ret;\n#if defined(__i386__) && defined(__GNUC__)\n    __asm__( \"sidtl %0\" : \"=m\" (ret) );\n#else\n    ret.base = (BYTE *)idt;\n    ret.limit = sizeof(idt) - 1;\n#endif\n    return ret;\n}\n\n\n/***********************************************************************\n *           INSTR_ReplaceSelector\n *\n * Try to replace an invalid selector by a valid one.\n * The only selector where it is allowed to do \"mov ax,40;mov es,ax\"\n * is the so called 'bimodal' selector 0x40, which points to the BIOS\n * data segment. Used by (at least) Borland products (and programs compiled\n * using Borland products).\n *\n * See Undocumented Windows, Chapter 5, __0040.\n */\nstatic BOOL INSTR_ReplaceSelector( CONTEXT *context, WORD *sel )\n{\n    if (*sel == 0x40)\n    {\n        DOSVM_start_bios_timer();\n        *sel = DOSMEM_BiosDataSeg;\n        return TRUE;\n    }\n    return FALSE;  /* Can't replace selector, crashdump */\n}\n\n\n/* store an operand into a register */\nstatic void store_reg_word( CONTEXT *context, BYTE regmodrm, const BYTE *addr, int long_op )\n{\n    switch((regmodrm >> 3) & 7)\n    {\n    case 0:\n        if (long_op) context->Eax = *(const DWORD *)addr;\n        else SET_LOWORD(context->Eax, *(const WORD *)addr);\n        break;\n    case 1:\n        if (long_op) context->Ecx = *(const DWORD *)addr;\n        else SET_LOWORD(context->Ecx, *(const WORD *)addr);\n        break;\n    case 2:\n        if (long_op) context->Edx = *(const DWORD *)addr;\n        else SET_LOWORD(context->Edx, *(const WORD *)addr);\n        break;\n    case 3:\n        if (long_op) context->Ebx = *(const DWORD *)addr;\n        else SET_LOWORD(context->Ebx, *(const WORD *)addr);\n        break;\n    case 4:\n        if (long_op) context->Esp = *(const DWORD *)addr;\n        else SET_LOWORD(context->Esp, *(const WORD *)addr);\n        break;\n    case 5:\n        if (long_op) context->Ebp = *(const DWORD *)addr;\n        else SET_LOWORD(context->Ebp, *(const WORD *)addr);\n        break;\n    case 6:\n        if (long_op) context->Esi = *(const DWORD *)addr;\n        else SET_LOWORD(context->Esi, *(const WORD *)addr);\n        break;\n    case 7:\n        if (long_op) context->Edi = *(const DWORD *)addr;\n        else SET_LOWORD(context->Edi, *(const WORD *)addr);\n        break;\n    }\n}\n\n/* store an operand into a byte register */\nstatic void store_reg_byte( CONTEXT *context, BYTE regmodrm, const BYTE *addr )\n{\n    switch((regmodrm >> 3) & 7)\n    {\n    case 0: context->Eax = (context->Eax & 0xffffff00) | *addr; break;\n    case 1: context->Ecx = (context->Ecx & 0xffffff00) | *addr; break;\n    case 2: context->Edx = (context->Edx & 0xffffff00) | *addr; break;\n    case 3: context->Ebx = (context->Ebx & 0xffffff00) | *addr; break;\n    case 4: context->Eax = (context->Eax & 0xffff00ff) | (*addr << 8); break;\n    case 5: context->Ecx = (context->Ecx & 0xffff00ff) | (*addr << 8); break;\n    case 6: context->Edx = (context->Edx & 0xffff00ff) | (*addr << 8); break;\n    case 7: context->Ebx = (context->Ebx & 0xffff00ff) | (*addr << 8); break;\n    }\n}\n\n/***********************************************************************\n *           INSTR_GetOperandAddr\n *\n * Return the address of an instruction operand (from the mod/rm byte).\n */\nstatic BYTE *INSTR_GetOperandAddr( CONTEXT *context, BYTE *instr,\n                                   int long_addr, int segprefix, int *len )\n{\n    int mod, rm, base = 0, index = 0, ss = 0, seg = 0, off;\n    LDT_ENTRY entry;\n\n#define GET_VAL(val,type) \\\n    { *val = *(type *)instr; instr += sizeof(type); *len += sizeof(type); }\n\n    *len = 0;\n    GET_VAL( &mod, BYTE );\n    rm = mod & 7;\n    mod >>= 6;\n\n    if (mod == 3)\n    {\n        switch(rm)\n        {\n        case 0: return (BYTE *)&context->Eax;\n        case 1: return (BYTE *)&context->Ecx;\n        case 2: return (BYTE *)&context->Edx;\n        case 3: return (BYTE *)&context->Ebx;\n        case 4: return (BYTE *)&context->Esp;\n        case 5: return (BYTE *)&context->Ebp;\n        case 6: return (BYTE *)&context->Esi;\n        case 7: return (BYTE *)&context->Edi;\n        }\n    }\n\n    if (long_addr)\n    {\n        if (rm == 4)\n        {\n            BYTE sib;\n            GET_VAL( &sib, BYTE );\n            rm = sib & 7;\n            ss = sib >> 6;\n            switch((sib >> 3) & 7)\n            {\n            case 0: index = context->Eax; break;\n            case 1: index = context->Ecx; break;\n            case 2: index = context->Edx; break;\n            case 3: index = context->Ebx; break;\n            case 4: index = 0; break;\n            case 5: index = context->Ebp; break;\n            case 6: index = context->Esi; break;\n            case 7: index = context->Edi; break;\n            }\n        }\n\n        switch(rm)\n        {\n        case 0: base = context->Eax; seg = context->SegDs; break;\n        case 1: base = context->Ecx; seg = context->SegDs; break;\n        case 2: base = context->Edx; seg = context->SegDs; break;\n        case 3: base = context->Ebx; seg = context->SegDs; break;\n        case 4: base = context->Esp; seg = context->SegSs; break;\n        case 5: base = context->Ebp; seg = context->SegSs; break;\n        case 6: base = context->Esi; seg = context->SegDs; break;\n        case 7: base = context->Edi; seg = context->SegDs; break;\n        }\n        switch (mod)\n        {\n        case 0:\n            if (rm == 5)  /* special case: ds:(disp32) */\n            {\n                GET_VAL( &base, DWORD );\n                seg = context->SegDs;\n            }\n            break;\n\n        case 1:  /* 8-bit disp */\n            GET_VAL( &off, BYTE );\n            base += (signed char)off;\n            break;\n\n        case 2:  /* 32-bit disp */\n            GET_VAL( &off, DWORD );\n            base += (signed long)off;\n            break;\n        }\n    }\n    else  /* short address */\n    {\n        switch(rm)\n        {\n        case 0:  /* ds:(bx,si) */\n            base = LOWORD(context->Ebx) + LOWORD(context->Esi);\n            seg  = context->SegDs;\n            break;\n        case 1:  /* ds:(bx,di) */\n            base = LOWORD(context->Ebx) + LOWORD(context->Edi);\n            seg  = context->SegDs;\n            break;\n        case 2:  /* ss:(bp,si) */\n            base = LOWORD(context->Ebp) + LOWORD(context->Esi);\n            seg  = context->SegSs;\n            break;\n        case 3:  /* ss:(bp,di) */\n            base = LOWORD(context->Ebp) + LOWORD(context->Edi);\n            seg  = context->SegSs;\n            break;\n        case 4:  /* ds:(si) */\n            base = LOWORD(context->Esi);\n            seg  = context->SegDs;\n            break;\n        case 5:  /* ds:(di) */\n            base = LOWORD(context->Edi);\n            seg  = context->SegDs;\n            break;\n        case 6:  /* ss:(bp) */\n            base = LOWORD(context->Ebp);\n            seg  = context->SegSs;\n            break;\n        case 7:  /* ds:(bx) */\n            base = LOWORD(context->Ebx);\n            seg  = context->SegDs;\n            break;\n        }\n\n        switch(mod)\n        {\n        case 0:\n            if (rm == 6)  /* special case: ds:(disp16) */\n            {\n                GET_VAL( &base, WORD );\n                seg  = context->SegDs;\n            }\n            break;\n\n        case 1:  /* 8-bit disp */\n            GET_VAL( &off, BYTE );\n            base += (signed char)off;\n            break;\n\n        case 2:  /* 16-bit disp */\n            GET_VAL( &off, WORD );\n            base += (signed short)off;\n            break;\n        }\n        base &= 0xffff;\n    }\n    if (segprefix != -1) seg = segprefix;\n\n    /* Make sure the segment and offset are valid */\n    if (wine_ldt_is_system(seg)) return (BYTE *)(base + (index << ss));\n    if ((seg & 7) != 7) return NULL;\n    wine_ldt_get_entry( seg, &entry );\n    if (wine_ldt_is_empty( &entry )) return NULL;\n    if (wine_ldt_get_limit(&entry) < (base + (index << ss))) return NULL;\n    return (BYTE *)wine_ldt_get_base(&entry) + base + (index << ss);\n#undef GET_VAL\n}\n\n\n/***********************************************************************\n *           INSTR_EmulateLDS\n *\n * Emulate the LDS (and LES,LFS,etc.) instruction.\n */\nstatic BOOL INSTR_EmulateLDS( CONTEXT *context, BYTE *instr, int long_op,\n                              int long_addr, int segprefix, int *len )\n{\n    WORD seg;\n    BYTE *regmodrm = instr + 1 + (*instr == 0x0f);\n    BYTE *addr = INSTR_GetOperandAddr( context, regmodrm,\n                                       long_addr, segprefix, len );\n    if (!addr)\n        return FALSE;  /* Unable to emulate it */\n    seg = *(WORD *)(addr + (long_op ? 4 : 2));\n\n    if (!INSTR_ReplaceSelector( context, &seg ))\n        return FALSE;  /* Unable to emulate it */\n\n    /* Now store the offset in the correct register */\n\n    store_reg_word( context, *regmodrm, addr, long_op );\n\n    /* Store the correct segment in the segment register */\n\n    switch(*instr)\n    {\n    case 0xc4: context->SegEs = seg; break;  /* les */\n    case 0xc5: context->SegDs = seg; break;  /* lds */\n    case 0x0f: switch(instr[1])\n               {\n               case 0xb2: context->SegSs = seg; break;  /* lss */\n               case 0xb4: context->SegFs = seg; break;  /* lfs */\n               case 0xb5: context->SegGs = seg; break;  /* lgs */\n               }\n               break;\n    }\n\n    /* Add the opcode size to the total length */\n\n    *len += 1 + (*instr == 0x0f);\n    return TRUE;\n}\n\n/***********************************************************************\n *           INSTR_inport\n *\n * input on an I/O port\n */\nstatic DWORD INSTR_inport( WORD port, int size, CONTEXT *context )\n{\n    DWORD res = DOSVM_inport( port, size, context );\n\n    if (TRACE_ON(io))\n    {\n        switch(size)\n        {\n        case 1:\n            TRACE_(io)( \"0x%x < %02x @ %04x:%04x\\n\", port, LOBYTE(res),\n                     (WORD)context->SegCs, LOWORD(context->Eip));\n            break;\n        case 2:\n            TRACE_(io)( \"0x%x < %04x @ %04x:%04x\\n\", port, LOWORD(res),\n                     (WORD)context->SegCs, LOWORD(context->Eip));\n            break;\n        case 4:\n            TRACE_(io)( \"0x%x < %08x @ %04x:%04x\\n\", port, res,\n                     (WORD)context->SegCs, LOWORD(context->Eip));\n            break;\n        }\n    }\n    return res;\n}\n\n\n/***********************************************************************\n *           INSTR_outport\n *\n * output on an I/O port\n */\nstatic void INSTR_outport( WORD port, int size, DWORD val, CONTEXT *context )\n{\n    DOSVM_outport( port, size, val, context );\n\n    if (TRACE_ON(io))\n    {\n        switch(size)\n        {\n        case 1:\n            TRACE_(io)(\"0x%x > %02x @ %04x:%04x\\n\", port, LOBYTE(val),\n                    (WORD)context->SegCs, LOWORD(context->Eip));\n            break;\n        case 2:\n            TRACE_(io)(\"0x%x > %04x @ %04x:%04x\\n\", port, LOWORD(val),\n                    (WORD)context->SegCs, LOWORD(context->Eip));\n            break;\n        case 4:\n            TRACE_(io)(\"0x%x > %08x @ %04x:%04x\\n\", port, val,\n                    (WORD)context->SegCs, LOWORD(context->Eip));\n            break;\n        }\n    }\n}\n\n\n/***********************************************************************\n *           __wine_emulate_instruction\n *\n * Emulate a privileged instruction.\n * Returns exception continuation status.\n */\nDWORD __wine_emulate_instruction( EXCEPTION_RECORD *rec, CONTEXT *context )\n{\n    int prefix, segprefix, prefixlen, len, repX, long_op, long_addr;\n    BYTE *instr;\n\n    long_op = long_addr = (!ISV86(context) && IS_SELECTOR_32BIT(context->SegCs));\n    instr = make_ptr( context, context->SegCs, context->Eip, TRUE );\n    if (!instr) return ExceptionContinueSearch;\n\n    /* First handle any possible prefix */\n\n    segprefix = -1;  /* no prefix */\n    prefix = 1;\n    repX = 0;\n    prefixlen = 0;\n    while(prefix)\n    {\n        switch(*instr)\n        {\n        case 0x2e:\n            segprefix = context->SegCs;\n            break;\n        case 0x36:\n            segprefix = context->SegSs;\n            break;\n        case 0x3e:\n            segprefix = context->SegDs;\n            break;\n        case 0x26:\n            segprefix = context->SegEs;\n            break;\n        case 0x64:\n            segprefix = context->SegFs;\n            break;\n        case 0x65:\n            segprefix = context->SegGs;\n            break;\n        case 0x66:\n            long_op = !long_op;  /* opcode size prefix */\n            break;\n        case 0x67:\n            long_addr = !long_addr;  /* addr size prefix */\n            break;\n        case 0xf0:  /* lock */\n\t    break;\n        case 0xf2:  /* repne */\n\t    repX = 1;\n\t    break;\n        case 0xf3:  /* repe */\n\t    repX = 2;\n            break;\n        default:\n            prefix = 0;  /* no more prefixes */\n            break;\n        }\n        if (prefix)\n        {\n            instr++;\n            prefixlen++;\n        }\n    }\n\n    /* Now look at the actual instruction */\n\n    switch(*instr)\n    {\n        case 0x07: /* pop es */\n        case 0x17: /* pop ss */\n        case 0x1f: /* pop ds */\n            {\n                WORD seg = *(WORD *)get_stack( context );\n                if (INSTR_ReplaceSelector( context, &seg ))\n                {\n                    switch(*instr)\n                    {\n                    case 0x07: context->SegEs = seg; break;\n                    case 0x17: context->SegSs = seg; break;\n                    case 0x1f: context->SegDs = seg; break;\n                    }\n                    add_stack(context, long_op ? 4 : 2);\n                    context->Eip += prefixlen + 1;\n                    return ExceptionContinueExecution;\n                }\n            }\n            break;  /* Unable to emulate it */\n\n        case 0x0f: /* extended instruction */\n            switch(instr[1])\n            {\n            case 0x22: /* mov %eax, %crX */\n                switch (instr[2])\n                {\n                case 0xc0:\n                    FIXME(\"mov %%eax, %%cr0 at 0x%08x, EAX=0x%08x\\n\",\n                          context->Eip,context->Eax );\n                          context->Eip += prefixlen+3;\n                    return ExceptionContinueExecution;\n                default:\n                    break; /* Fallthrough to bad instruction handling */\n                }\n                break; /* Fallthrough to bad instruction handling */\n            case 0x20: /* mov %crX, %eax */\n                switch (instr[2])\n                {\n                case 0xe0: /* mov %cr4, %eax */\n                    /* CR4 register: See linux/arch/i386/mm/init.c, X86_CR4_ defs\n                     * bit 0: VME Virtual Mode Exception ?\n                     * bit 1: PVI Protected mode Virtual Interrupt\n                     * bit 2: TSD Timestamp disable\n                     * bit 3: DE  Debugging extensions\n                     * bit 4: PSE Page size extensions\n                     * bit 5: PAE Physical address extension\n                     * bit 6: MCE Machine check enable\n                     * bit 7: PGE Enable global pages\n                     * bit 8: PCE Enable performance counters at IPL3\n                     */\n                    FIXME(\"mov %%cr4, %%eax at 0x%08x\\n\",context->Eip);\n                    context->Eax = 0;\n                    context->Eip += prefixlen+3;\n                    return ExceptionContinueExecution;\n                case 0xc0: /* mov %cr0, %eax */\n                    FIXME(\"mov %%cr0, %%eax at 0x%08x\\n\",context->Eip);\n                    context->Eax = 0x10; /* FIXME: set more bits ? */\n                    context->Eip += prefixlen+3;\n                    return ExceptionContinueExecution;\n                default: /* Fallthrough to illegal instruction */\n                    break;\n                }\n                /* Fallthrough to illegal instruction */\n                break;\n            case 0x21: /* mov %drX, %eax */\n                switch (instr[2])\n                {\n                case 0xc8: /* mov %dr1, %eax */\n                    TRACE(\"mov %%dr1, %%eax at 0x%08x\\n\",context->Eip);\n                    context->Eax = context->Dr1;\n                    context->Eip += prefixlen+3;\n                    return ExceptionContinueExecution;\n                case 0xf8: /* mov %dr7, %eax */\n                    TRACE(\"mov %%dr7, %%eax at 0x%08x\\n\",context->Eip);\n                    context->Eax = 0x400;\n                    context->Eip += prefixlen+3;\n                    return ExceptionContinueExecution;\n                }\n                FIXME(\"Unsupported DR register, eip+2 is %02x\\n\", instr[2]);\n                /* fallthrough to illegal instruction */\n                break;\n            case 0x23: /* mov %eax, %drX */\n                switch (instr[2])\n                {\n                case 0xc8: /* mov %eax, %dr1 */\n                    context->Dr1 = context->Eax;\n                    context->Eip += prefixlen+3;\n                    return ExceptionContinueExecution;\n                }\n                FIXME(\"Unsupported DR register, eip+2 is %02x\\n\", instr[2]);\n                /* fallthrough to illegal instruction */\n                break;\n            case 0xa1: /* pop fs */\n                {\n                    WORD seg = *(WORD *)get_stack( context );\n                    if (INSTR_ReplaceSelector( context, &seg ))\n                    {\n                        context->SegFs = seg;\n                        add_stack(context, long_op ? 4 : 2);\n                        context->Eip += prefixlen + 2;\n                        return ExceptionContinueExecution;\n                    }\n                }\n                break;\n            case 0xa9: /* pop gs */\n                {\n                    WORD seg = *(WORD *)get_stack( context );\n                    if (INSTR_ReplaceSelector( context, &seg ))\n                    {\n                        context->SegGs = seg;\n                        add_stack(context, long_op ? 4 : 2);\n                        context->Eip += prefixlen + 2;\n                        return ExceptionContinueExecution;\n                    }\n                }\n                break;\n            case 0xb2: /* lss addr,reg */\n            case 0xb4: /* lfs addr,reg */\n            case 0xb5: /* lgs addr,reg */\n                if (INSTR_EmulateLDS( context, instr, long_op,\n                                      long_addr, segprefix, &len ))\n                {\n                    context->Eip += prefixlen + len;\n                    return ExceptionContinueExecution;\n                }\n                break;\n            }\n            break;  /* Unable to emulate it */\n\n        case 0x6c: /* insb     */\n        case 0x6d: /* insw/d   */\n        case 0x6e: /* outsb    */\n        case 0x6f: /* outsw/d  */\n\t    {\n\t      int typ = *instr;  /* Just in case it's overwritten.  */\n\t      int outp = (typ >= 0x6e);\n\t      unsigned long count = repX ?\n                          (long_addr ? context->Ecx : LOWORD(context->Ecx)) : 1;\n\t      int opsize = (typ & 1) ? (long_op ? 4 : 2) : 1;\n\t      int step = (context->EFlags & 0x400) ? -opsize : +opsize;\n\t      int seg;\n\n\t      if (outp)\n              {\n\t\t/* Check if there is a segment prefix override and honour it */\n\t\tseg = segprefix == -1 ? context->SegDs : segprefix;\n\t\t/* FIXME: Check segment is readable.  */\n              }\n\t      else\n              {\n\t\tseg = context->SegEs;\n\t\t/* FIXME: Check segment is writable.  */\n              }\n\n\t      if (repX)\n              {\n\t\tif (long_addr) context->Ecx = 0;\n\t\telse SET_LOWORD(context->Ecx,0);\n              }\n\n\t      while (count-- > 0)\n\t\t{\n\t\t  void *data;\n                  WORD dx = LOWORD(context->Edx);\n\t\t  if (outp)\n                  {\n                      data = make_ptr( context, seg, context->Esi, long_addr );\n                      if (long_addr) context->Esi += step;\n                      else ADD_LOWORD(context->Esi,step);\n                  }\n\t\t  else\n                  {\n                      data = make_ptr( context, seg, context->Edi, long_addr );\n                      if (long_addr) context->Edi += step;\n                      else ADD_LOWORD(context->Edi,step);\n                  }\n\n\t\t  switch (typ)\n                  {\n\t\t    case 0x6c:\n\t\t      *(BYTE *)data = INSTR_inport( dx, 1, context );\n\t\t      break;\n\t\t    case 0x6d:\n\t\t      if (long_op)\n                          *(DWORD *)data = INSTR_inport( dx, 4, context );\n\t\t      else\n                          *(WORD *)data = INSTR_inport( dx, 2, context );\n\t\t      break;\n\t\t    case 0x6e:\n                        INSTR_outport( dx, 1, *(BYTE *)data, context );\n                        break;\n\t\t    case 0x6f:\n                        if (long_op)\n                            INSTR_outport( dx, 4, *(DWORD *)data, context );\n                        else\n                            INSTR_outport( dx, 2, *(WORD *)data, context );\n                        break;\n\t\t    }\n\t\t}\n              context->Eip += prefixlen + 1;\n\t    }\n            return ExceptionContinueExecution;\n\n        case 0x8a: /* mov Eb, Gb */\n        case 0x8b: /* mov Ev, Gv */\n            {\n                BYTE *data = INSTR_GetOperandAddr(context, instr + 1, long_addr,\n                                                  segprefix, &len);\n                unsigned int data_size = (*instr == 0x8b) ? (long_op ? 4 : 2) : 1;\n                struct idtr idtr = get_idtr();\n                unsigned int offset = data - idtr.base;\n\n                if (offset <= idtr.limit + 1 - data_size)\n                {\n                    idt[1].LimitLow = 0x100; /* FIXME */\n                    idt[2].LimitLow = 0x11E; /* FIXME */\n                    idt[3].LimitLow = 0x500; /* FIXME */\n\n                    switch (*instr)\n                    {\n                    case 0x8a: store_reg_byte( context, instr[1], (BYTE *)idt + offset ); break;\n                    case 0x8b: store_reg_word( context, instr[1], (BYTE *)idt + offset, long_op ); break;\n                    }\n                    context->Eip += prefixlen + len + 1;\n                    return ExceptionContinueExecution;\n                }\n            }\n            break;  /* Unable to emulate it */\n\n        case 0x8e: /* mov XX,segment_reg */\n            {\n                WORD seg;\n                BYTE *addr = INSTR_GetOperandAddr(context, instr + 1,\n                                                  long_addr, segprefix, &len );\n                if (!addr)\n                    break;  /* Unable to emulate it */\n                seg = *(WORD *)addr;\n                if (!INSTR_ReplaceSelector( context, &seg ))\n                    break;  /* Unable to emulate it */\n\n                switch((instr[1] >> 3) & 7)\n                {\n                case 0:\n                    context->SegEs = seg;\n                    context->Eip += prefixlen + len + 1;\n                    return ExceptionContinueExecution;\n                case 1:  /* cs */\n                    break;\n                case 2:\n                    context->SegSs = seg;\n                    context->Eip += prefixlen + len + 1;\n                    return ExceptionContinueExecution;\n                case 3:\n                    context->SegDs = seg;\n                    context->Eip += prefixlen + len + 1;\n                    return ExceptionContinueExecution;\n                case 4:\n                    context->SegFs = seg;\n                    context->Eip += prefixlen + len + 1;\n                    return ExceptionContinueExecution;\n                case 5:\n                    context->SegGs = seg;\n                    context->Eip += prefixlen + len + 1;\n                    return ExceptionContinueExecution;\n                case 6:  /* unused */\n                case 7:  /* unused */\n                    break;\n                }\n            }\n            break;  /* Unable to emulate it */\n\n        case 0xc4: /* les addr,reg */\n        case 0xc5: /* lds addr,reg */\n            if (INSTR_EmulateLDS( context, instr, long_op,\n                                  long_addr, segprefix, &len ))\n            {\n                context->Eip += prefixlen + len;\n                return ExceptionContinueExecution;\n            }\n            break;  /* Unable to emulate it */\n\n        case 0xcd: /* int <XX> */\n            context->Eip += prefixlen + 2;\n            if (DOSVM_EmulateInterruptPM( context, instr[1] )) return ExceptionContinueExecution;\n            context->Eip -= prefixlen + 2;  /* restore eip */\n            break;  /* Unable to emulate it */\n\n        case 0xcf: /* iret */\n            if (wine_ldt_is_system(context->SegCs)) break;  /* don't emulate it in 32-bit code */\n            if (long_op)\n            {\n                DWORD *stack = get_stack( context );\n                context->Eip = *stack++;\n                context->SegCs  = *stack++;\n                context->EFlags = *stack;\n                add_stack(context, 3*sizeof(DWORD));  /* Pop the return address and flags */\n            }\n            else\n            {\n                WORD *stack = get_stack( context );\n                context->Eip = *stack++;\n                context->SegCs  = *stack++;\n                SET_LOWORD(context->EFlags,*stack);\n                add_stack(context, 3*sizeof(WORD));  /* Pop the return address and flags */\n            }\n            return ExceptionContinueExecution;\n\n        case 0xe4: /* inb al,XX */\n            SET_LOBYTE(context->Eax,INSTR_inport( instr[1], 1, context ));\n            context->Eip += prefixlen + 2;\n            return ExceptionContinueExecution;\n\n        case 0xe5: /* in (e)ax,XX */\n            if (long_op)\n                context->Eax = INSTR_inport( instr[1], 4, context );\n            else\n                SET_LOWORD(context->Eax, INSTR_inport( instr[1], 2, context ));\n            context->Eip += prefixlen + 2;\n            return ExceptionContinueExecution;\n\n        case 0xe6: /* outb XX,al */\n            INSTR_outport( instr[1], 1, LOBYTE(context->Eax), context );\n            context->Eip += prefixlen + 2;\n            return ExceptionContinueExecution;\n\n        case 0xe7: /* out XX,(e)ax */\n            if (long_op)\n                INSTR_outport( instr[1], 4, context->Eax, context );\n            else\n                INSTR_outport( instr[1], 2, LOWORD(context->Eax), context );\n            context->Eip += prefixlen + 2;\n            return ExceptionContinueExecution;\n\n        case 0xec: /* inb al,dx */\n            SET_LOBYTE(context->Eax, INSTR_inport( LOWORD(context->Edx), 1, context ) );\n            context->Eip += prefixlen + 1;\n            return ExceptionContinueExecution;\n\n        case 0xed: /* in (e)ax,dx */\n            if (long_op)\n                context->Eax = INSTR_inport( LOWORD(context->Edx), 4, context );\n            else\n                SET_LOWORD(context->Eax, INSTR_inport( LOWORD(context->Edx), 2, context ));\n            context->Eip += prefixlen + 1;\n            return ExceptionContinueExecution;\n\n        case 0xee: /* outb dx,al */\n            INSTR_outport( LOWORD(context->Edx), 1, LOBYTE(context->Eax), context );\n            context->Eip += prefixlen + 1;\n            return ExceptionContinueExecution;\n\n        case 0xef: /* out dx,(e)ax */\n            if (long_op)\n                INSTR_outport( LOWORD(context->Edx), 4, context->Eax, context );\n            else\n                INSTR_outport( LOWORD(context->Edx), 2, LOWORD(context->Eax), context );\n            context->Eip += prefixlen + 1;\n            return ExceptionContinueExecution;\n\n        case 0xfa: /* cli */\n            get_vm86_teb_info()->dpmi_vif = 0;\n            context->Eip += prefixlen + 1;\n            return ExceptionContinueExecution;\n\n        case 0xfb: /* sti */\n            get_vm86_teb_info()->dpmi_vif = 1;\n            context->Eip += prefixlen + 1;\n            if (get_vm86_teb_info()->vm86_pending)\n            {\n                get_vm86_teb_info()->vm86_pending = 0;\n                rec->ExceptionCode = EXCEPTION_VM86_STI;\n                break; /* Handle the pending event. */\n            }\n            return ExceptionContinueExecution;\n    }\n    return ExceptionContinueSearch;  /* Unable to emulate it */\n}\n\n\n/***********************************************************************\n *           INSTR_vectored_handler\n *\n * Vectored exception handler used to emulate protected instructions\n * from 32-bit code.\n */\nLONG CALLBACK INSTR_vectored_handler( EXCEPTION_POINTERS *ptrs )\n{\n    EXCEPTION_RECORD *record = ptrs->ExceptionRecord;\n    CONTEXT *context = ptrs->ContextRecord;\n\n    if (wine_ldt_is_system(context->SegCs) &&\n        (record->ExceptionCode == EXCEPTION_ACCESS_VIOLATION ||\n         record->ExceptionCode == EXCEPTION_PRIV_INSTRUCTION))\n    {\n        if (__wine_emulate_instruction( record, context ) == ExceptionContinueExecution)\n            return EXCEPTION_CONTINUE_EXECUTION;\n    }\n    return EXCEPTION_CONTINUE_SEARCH;\n}\n\n\n/***********************************************************************\n *           DOS3Call         (KERNEL.102)\n */\nvoid WINAPI DOS3Call( CONTEXT *context )\n{\n    __wine_call_int_handler( context, 0x21 );\n}\n\n\n/***********************************************************************\n *           NetBIOSCall      (KERNEL.103)\n */\nvoid WINAPI NetBIOSCall16( CONTEXT *context )\n{\n    __wine_call_int_handler( context, 0x5c );\n}\n\n\n/***********************************************************************\n *\t\tGetSetKernelDOSProc (KERNEL.311)\n */\nFARPROC16 WINAPI GetSetKernelDOSProc16( FARPROC16 DosProc )\n{\n    FIXME(\"(DosProc=%p): stub\\n\", DosProc);\n    return NULL;\n}\n"
  },
  {
    "path": "krnl386/int09.c",
    "content": "/*\n * DOS interrupt 09h handler (IRQ1 - KEYBOARD)\n *\n * Copyright 1999 Ove Kåven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n#include \"wine/debug.h\"\n#include \"dosexe.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(int);\n\n#define QUEUELEN 31\n\nstatic struct\n{\n  BYTE queuelen,queue[QUEUELEN],ascii[QUEUELEN];\n} kbdinfo;\n\n\n/*\n * Update the BIOS data segment's keyboard status flags (mem 0x40:0x17/0x18)\n * if modifier/special keys have been pressed.\n * FIXME: we merely toggle key status and don't actively set it instead,\n * so we might be out of sync with the real current system status of these keys.\n * Probably doesn't matter too much, though.\n */\nstatic void DOSVM_Int09UpdateKbdStatusFlags(BYTE scan, BOOL extended, BIOSDATA *data, BOOL *modifier)\n{\n    BYTE realscan = scan & 0x7f; /* remove 0x80 make/break flag */\n    BYTE bit1 = 255, bit2 = 255;\n    INPUT_RECORD msg;\n    DWORD res;\n\n    *modifier = TRUE;\n\n    switch (realscan)\n    {\n      case 0x36: /* r shift */\n\t      bit1 = 0;\n\t      break;\n      case 0x2a: /* l shift */\n\t      bit1 = 1;\n\t      break;\n      case 0x1d: /* l/r control */\n\t      bit1 = 2;\n\t      if (!extended) /* left control only */\n\t\t  bit2 = 0;\n\t      break;\n      case 0x37: /* SysRq inner parts */\n\t      /* SysRq scan code sequence: 38, e0, 37, e0, b7, b8 */\n\t      FIXME(\"SysRq not handled yet.\\n\");\n\t      break;\n      case 0x38: /* l/r menu/alt, SysRq outer parts */\n\t      bit1 = 3;\n\t      if (!extended) /* left alt only */\n\t          bit2 = 1;\n\t      break;\n      case 0x46: /* scroll lock */\n\t      bit1 = 4;\n\t      if (!extended) /* left ctrl only */\n\t          bit2 = 4;\n\t      break;\n      case 0x45: /* num lock, pause */\n\t      if (extended) /* distinguish from non-extended Pause key */\n              { /* num lock */\n\t          bit1 = 5;\n\t          bit2 = 5;\n              }\n\t      else\n              { /* pause */\n                  if (!(scan & 0x80)) /* \"make\" code */\n                      bit2 = 3;\n              }\n\t      break;\n      case 0x3a: /* caps lock */\n\t      bit1 = 6;\n\t      bit2 = 6;\n\t      break;\n      case 0x52: /* insert */\n\t      bit1 = 7;\n\t      bit2 = 7;\n\t      *modifier = FALSE; /* insert is no modifier: thus pass to int16 */\n\t      break;\n    }\n    /* now that we know which bits to set, update them */\n    if (!(scan & 0x80)) /* \"make\" code (keypress) */\n    {\n        if (bit2 != 255)\n        {\n\t    if (bit2 == 3)\n\t    {\n                data->KbdFlags2 |= 1 << bit2; /* set \"Pause\" flag */\n                TRACE(\"PAUSE key, sleeping !\\n\");\n                /* wait for keypress to unlock pause */\n\t\tdo {\n                    Sleep(55);\n\t\t} while (!(ReadConsoleInputA(GetStdHandle(STD_INPUT_HANDLE),&msg,1,&res) && (msg.EventType == KEY_EVENT)));\n                data->KbdFlags2 &= ~(1 << bit2); /* release \"Pause\" flag */\n            }\n\t    else\n                data->KbdFlags2 |= 1 << bit2;\n        }\n        if (bit1 != 255)\n        {\n            if (bit1 < 4) /* key \"pressed\" flag */\n\t        data->KbdFlags1 |= 1 << bit1;\n            else /* key \"active\" flag */\n                data->KbdFlags1 ^= 1 << bit1;\n        }\n    }\n    else /* \"break\" / release */\n    {\n        if (bit2 != 255)\n            data->KbdFlags2 &= ~(1 << bit2);\n        if (bit1 < 4) /* is it a key \"pressed\" bit ? */\n\t    data->KbdFlags1 &= ~(1 << bit1);\n    }\n    TRACE(\"ext. %d, bits %d/%d, KbdFlags %02x/%02x\\n\", extended, bit1, bit2, data->KbdFlags1, data->KbdFlags2);\n}\n\n/**********************************************************************\n *\t    DOSVM_Int09Handler\n *\n * Handler for int 09h.\n * See http://www.execpc.com/~geezer/osd/kbd/ for a very good description\n * of keyboard mapping modes.\n */\nvoid WINAPI DOSVM_Int09Handler( CONTEXT *context )\n{\n  BIOSDATA *data = DOSVM_BiosData();\n  BYTE ascii, scan = DOSVM_Int09ReadScan(&ascii);\n  BYTE realscan = scan & 0x7f; /* remove 0x80 make/break flag */\n  BOOL modifier = FALSE;\n  static BOOL extended = FALSE; /* indicates start of extended key sequence */\n  BYTE ch[2];\n  int cnt, c2;\n\n  TRACE(\"scan=%02x, ascii=%02x[%c]\\n\",scan, ascii, ascii ? ascii : ' ');\n\n  if (scan == 0xe0) /* extended keycode */\n      extended = TRUE;\n  \n  /* check for keys concerning keyboard status flags */\n  if ((realscan == 0x52 /* insert */)\n  ||  (realscan == 0x3a /* caps lock */)\n  ||  (realscan == 0x45 /* num lock (extended) or pause/break */)\n  ||  (realscan == 0x46 /* scroll lock */)\n  ||  (realscan == 0x2a /* l shift */)\n  ||  (realscan == 0x36 /* r shift */)\n  ||  (realscan == 0x37 /* SysRq */)\n  ||  (realscan == 0x38 /* l/r menu/alt, SysRq */)\n  ||  (realscan == 0x1d /* l/r control */))\n      DOSVM_Int09UpdateKbdStatusFlags(scan, extended, data, &modifier);\n\n  if (scan != 0xe0)\n      extended = FALSE; /* reset extended flag now */\n\n  /* only interested in \"make\" (press) codes, not \"break\" (release),\n   * and also not in \"modifier key only\" (w/o ascii) notifications */\n  if (!(scan & 0x80) && !(modifier && !ascii))\n  {\n    if (ascii) {\n      /* we already have an ASCII code, no translation necessary */\n      if (data->KbdFlags1 & 8) /* Alt key ? */\n\tch[0] = 0; /* ASCII code needs to be 0 if Alt also pressed */\n      else\n        ch[0] = ascii;\n      /* FIXME: need to handle things such as Shift-F1 etc. */\n      cnt = 1;\n    } else {\n      /* translate */\n      UINT vkey = MapVirtualKeyA(scan&0x7f, 1);\n      BYTE keystate[256];\n      GetKeyboardState(keystate);\n      cnt = ToAscii(vkey, scan, keystate, (LPWORD)ch, 0);\n    }\n    if (cnt>0) {\n      for (c2=0; c2<cnt; c2++)\n        DOSVM_Int16AddChar(ch[c2], scan);\n    } else\n    if (cnt==0) {\n      /* FIXME: need to handle things like shift-F-keys,\n       * 0xE0 extended keys, etc */\n      DOSVM_Int16AddChar(0, scan);\n    }\n  }\n\n  DOSVM_AcknowledgeIRQ( context );\n}\n\nstatic void KbdRelay( CONTEXT *context, void *data )\n{\n  if (kbdinfo.queuelen) {\n    /* cleanup operation, called from DOSVM_PIC_ioport_out:\n     * we'll remove current scancode from keyboard buffer here,\n     * rather than in ReadScan, because some DOS apps depend on\n     * the scancode being available for reading multiple times... */\n    if (--kbdinfo.queuelen) {\n      memmove(kbdinfo.queue,kbdinfo.queue+1,kbdinfo.queuelen);\n      memmove(kbdinfo.ascii,kbdinfo.ascii+1,kbdinfo.queuelen);\n    }\n  }\n}\n\nvoid DOSVM_Int09SendScan( BYTE scan, BYTE ascii )\n{\n  if (kbdinfo.queuelen == QUEUELEN) {\n    ERR(\"keyboard queue overflow\\n\");\n    return;\n  }\n  /* add scancode to queue */\n  kbdinfo.queue[kbdinfo.queuelen] = scan;\n  kbdinfo.ascii[kbdinfo.queuelen++] = ascii;\n  /* tell app to read it by triggering IRQ 1 (int 09) */\n  DOSVM_QueueEvent(1,DOS_PRIORITY_KEYBOARD,KbdRelay,NULL);\n}\n\nBYTE DOSVM_Int09ReadScan( BYTE*ascii )\n{\n    if (ascii) *ascii = kbdinfo.ascii[0];\n    return kbdinfo.queue[0];\n}\n"
  },
  {
    "path": "krnl386/int10.c",
    "content": "/*\n * BIOS interrupt 10h handler\n *\n * Copyright 1998 Ove Kåven\n * Copyright 1998 Joseph Pranevich\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <stdlib.h>\n#include <stddef.h>\n\n#include \"vga.h\"\n#include \"wine/debug.h\"\n#include \"dosexe.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(int);\n\n/*\n * Display combination code for active display.\n *\n * Values (hex):\n * 00 - no display\n * 01 - monochrome adapter w/ monochrome display\n * 02 - CGA w/ color display\n * 03 - reserved\n * 04 - EGA w/ color display\n * 05 - EGA w/ monochrome display\n * 06 - PGA w/ color display\n * 07 - VGA w/ monochrome analog display\n * 08 - VGA w/ color analog display\n * 09 - reserved\n * 0A - MCGA w/ digital color display\n * 0B - MCGA w/ monochrome analog display\n * 0C - MCGA w/ color analog display\n * FF - unknown display type\n */\n#define INT10_DCC 0x08\n\n#include \"pshpack1.h\"\n\n/*\n * Structure for DOS data that can be accessed directly from applications.\n * This structure must be correctly packed.\n */\ntypedef struct _INT10_HEAP {\n    BYTE  StaticModeSupport[7];     /* modes supported 1..7 */\n    BYTE  StaticScanlineSupport;    /* scan lines supported */\n    BYTE  StaticNumberCharBlocks;   /* total number of char blocks */\n    BYTE  StaticActiveCharBlocks;   /* max number of active char blocks */\n    WORD  StaticMiscFlags;          /* misc function support flags */\n    WORD  StaticReserved1;          /* reserved */\n    BYTE  StaticSavePointerFlags;   /* save pointer function flags */\n    BYTE  StaticReserved2;          /* reserved */\n\n    WORD  VesaCurrentMode;\n    WORD  VesaModeList[64];\n    char  VesaOEMName[32];\n    char  VesaProductName[32];\n    char  VesaProductRev[32];\n    char  VesaVendorName[32];\n\n    WORD  WineHeapSegment;\n} INT10_HEAP;\n\n/*\n * Structure for VBE Mode Info Block. See the VBE 3.0 standard for details.\n * This structure must be correctly packed.\n */\nstruct _ModeInfoBlock {\n    WORD  ModeAttributes;       /* 0x00 */\n    BYTE  WinAAttributes;       /* 0x02 */\n    BYTE  WinBAttributes;       /* 0x03 */\n    WORD  WinGranularity;       /* 0x04 */\n    WORD  WinSize;              /* 0x06 */\n    WORD  WinASegment;          /* 0x08 */\n    WORD  WinBSegment;          /* 0x0A */\n    DWORD WinFuncPtr;           /* 0x0C */\n    WORD  BytesPerScanLine;     /* 0x10 */\n    /* mandatory for VBE 1.2+ */\n    WORD  XResolution;          /* 0x12 */\n    WORD  YResolution;          /* 0x14 */\n    BYTE  XCharSize;            /* 0x16 */\n    BYTE  YCharSize;            /* 0x17 */\n    BYTE  NumberOfPlanes;       /* 0x18 */\n    BYTE  BitsPerPixel;         /* 0x19 */\n    BYTE  NumberOfBanks;        /* 0x1A */\n    BYTE  MemoryModel;          /* 0x1B */\n    BYTE  BankSize;             /* 0x1C */\n    BYTE  NumberOfImagePages;   /* 0x1D */\n    BYTE  Reserved1;            /* 0x1E */\n    BYTE  RedMaskSize;          /* 0x1F */\n    BYTE  RedFieldPosition;     /* 0x20 */\n    BYTE  GreenMaskSize;        /* 0x21 */\n    BYTE  GreenFieldPosition;   /* 0x22 */\n    BYTE  BlueMaskSize;         /* 0x23 */\n    BYTE  BlueFieldPosition;    /* 0x24 */\n    BYTE  RsvdMaskSize;         /* 0x25 */\n    BYTE  RsvdFieldPosition;    /* 0x26 */\n    BYTE  DirectColorModeInfo;  /* 0x27 */\n    /* mandatory for VBE 2.0+ */\n    DWORD PhysBasePtr;          /* 0x28 */\n    DWORD Reserved2;            /* 0x2C */\n    WORD  Reserved3;            /* 0x30 */\n    /* mandatory for VBE 3.0+ */\n    WORD  LinBytesPerScanLine;  /* 0x32 */\n    BYTE  BnkNumberOfImagePages;/* 0x34 */\n    BYTE  LinNumberOfImagePages;/* 0x35 */\n    BYTE  LinRedMaskSize;       /* 0x36 */\n    BYTE  LinRedFieldPosition;  /* 0x37 */\n    BYTE  LinGreenMaskSize;     /* 0x38 */\n    BYTE  LinGreenFieldPosition;/* 0x39 */\n    BYTE  LinBlueMaskSize;      /* 0x3A */\n    BYTE  LinBlueFieldPosition; /* 0x3B */\n    BYTE  LinRsvdMaskSize;      /* 0x3C */\n    BYTE  LinRsvdFieldPosition; /* 0x3D */\n    DWORD MaxPixelClock;        /* 0x3E */\n    BYTE  Reserved4[190];       /* 0x42 */\n};\n\n#include \"poppack.h\"\n\n/* True if video mode is a vesa mode, false otherwise.\n * More correct would be to use something like (x > 0xff || x == 0x6a)\n * but as long as we have only the standard VGA and VESA modes this is ok too */\n#define IS_VESA_MODE(x)         ((x) >= 0x6a)\n\n/* Forward declarations. */\nstatic INT10_HEAP *INT10_GetHeap(void);\nstatic void INT10_SetCursorPos(BIOSDATA*, unsigned, unsigned, unsigned);\n\n/**********************************************************************\n *         INT10_FillControllerInformation\n *\n * Fill 256-byte (VBE1.x) or 512-byte buffer (VBE2.0+) with\n * capabilities of the video controller.\n */\nstatic void INT10_FillControllerInformation( BYTE *buffer )\n{\n    INT10_HEAP *heap = INT10_GetHeap();\n\n    /* 00 - BYTE[4]: signature */\n    memmove( buffer, \"VESA\", 4 );\n\n    /* 04 - WORD: version number */\n    *(WORD*)(buffer + 4) = 0x0300; /* version 3.0 */\n    \n    /* 06 - DWORD: pointer to OEM name */\n    *(SEGPTR*)(buffer + 6) = MAKESEGPTR( heap->WineHeapSegment,\n                                         offsetof(INT10_HEAP,\n                                                  VesaOEMName) );\n\n    /*\n     * 10 - DWORD: capabilities flags \n     * Bits:\n     *    0 - DAC can be switched into 8-bit mode\n     *    1 - non-VGA controller\n     *    2 - programmed DAC with blank bit\n     *    3 - controller supports hardware stereoscopic signalling\n     *    4 - =0 stereo signalling via external VESA stereo connector\n     *        =1 stereo signalling via VESA EVC connector\n     *    5 - controller supports hardware mouse cursor\n     *    6 - controller supports hardware clipping\n     *    7 - controller supports transparent BitBLT\n     * 8-31 - reserved (0)\n     */\n    *(DWORD*)(buffer + 10) = 0; /* FIXME */\n    \n    /* 14 - DWORD: pointer to list of supported VESA and OEM video modes */\n    *(SEGPTR*)(buffer + 14) = MAKESEGPTR( heap->WineHeapSegment,\n                                          offsetof(INT10_HEAP,\n                                                   VesaModeList) );\n\n    /* 18 - WORD: total amount of video memory in 64K blocks */\n    *(WORD*)(buffer + 18) = 16; /* FIXME */\n\n    /* 20 - WORD: OEM software version (BCD, high byte = major) */\n    *(WORD*)(buffer + 20) = 0x0100; /* version 1.0 */\n\n    /* 22 - DWORD: pointer to vendor name */\n    *(SEGPTR*)(buffer + 22) = MAKESEGPTR( heap->WineHeapSegment,\n                                          offsetof(INT10_HEAP,\n                                                   VesaVendorName) );\n\n    /* 26 - DWORD: pointer to product name */\n    *(SEGPTR*)(buffer + 26) = MAKESEGPTR( heap->WineHeapSegment,\n                                          offsetof(INT10_HEAP,\n                                                   VesaProductName) );\n\n    /* 30 - DWORD: pointer to product revision string */\n    *(SEGPTR*)(buffer + 30) = MAKESEGPTR( heap->WineHeapSegment,\n                                          offsetof(INT10_HEAP,\n                                                   VesaProductRev) );\n\n    /* 34 - WORD: VBE/AF version (if capabilities bit 3 set) */\n    *(WORD*)(buffer + 34) = 0;\n\n    /*\n     * 36 - DWORD: pointer to list of accelerated modes \n     *             (if capabilities bit 3 set) \n     */\n    *(SEGPTR*)(buffer + 36) = 0;\n\n    /* 40 - BYTE[216]: reserved for VBE implementation, set to zero */\n    memset( buffer + 40, 0, 216 );\n\n    /* \n     * 256 - BYTE[256]: reserved for VBE3.0 implementation, \n     *                  ignored in order to support older programs\n     */\n}\n\nextern int   vga_fb_size;\nextern char *vga_fb_data;\n\n/**********************************************************************\n *         INT10_FillModeInformation\n *\n * Fill 256-byte buffer with extended information about display mode.\n *\n * Returns FALSE if mode is unknown and TRUE is mode is known\n * even if it is not supported.\n */\nstatic BOOL INT10_FillModeInformation( struct _ModeInfoBlock *mib, WORD mode )\n{\n    const VGA_MODE *ptr = VGA_GetModeInfo( mode );\n    if (!ptr)\n        return FALSE;\n\n    /*\n     * 00 - WORD: mode attributes\n     * Bits:\n     *     0 - Mode supported by present hardware configuration.\n     *     1 - Optional information available. Must be =1 for VBE v1.2+.\n     *     2 - BIOS output supported.\n     *         Int10 functions 01, 02, 06, 07, 09, 0a and 0e are supported.\n     *     3 - Set if color, clear if monochrome.\n     *     4 - Set if graphics mode, clear if text mode.\n     *     5 - Mode is not VGA-compatible if set.\n     *         VGA-compatible modes support standard VGA I/O ports.\n     *     6 - Bank-switched (or windowed) mode is not supported if set.\n     *     7 - Linear framebuffer mode supported.\n     *     8 - Double scanning supported.\n     *     9 - Interlaced operation supported.\n     *    10 - Triple buffering supported.\n     *    11 - Stereoscopic display supported.\n     *    12 - Dual display start address supported.\n     * 13-15 - Reserved.\n     */\n    {\n        WORD attr = 0x0082; /* set optional info available */\n        /* Enable color mode - if both Colors & Depth are 0, then assume monochrome*/\n        if (ptr->Colors || ptr->Depth)\n        {\n            attr |= 0x0008;\n        }\n\n        /*\n         * FIXME: Attribute handling is incomplete.\n         */\n\n        /* Mode supported? */\n        if (ptr->Supported)\n        {\n            attr |= 0x0001;  /* set display mode supported */\n        }\n\n        /* Graphical mode? */\n        if (ptr->ModeType != TEXT)\n        {\n            attr |= 0x0010;  /* set graphics mode on (text mode off) */\n        }\n\n        /* Not VGA-compatible? */\n        if (IS_VESA_MODE(mode))\n            attr |= 0x0020;    /* disable VGA ports */\n\n        mib->ModeAttributes = attr;\n    }\n\n    /*\n     * 02 - BYTE[2]: window attributes, window A and window B\n     * Bits:\n     *   0 - Window exists.\n     *   1 - Window is readable.\n     *   2 - Window is writable.\n     * 3-7 - Reserved.\n     */\n    mib->WinAAttributes = 0x07; /* window A exists, readable and writable */\n    mib->WinBAttributes = 0x00; /* window B not supported */\n\n    /* 04 - WORD: window granularity in KB */\n    mib->WinGranularity = 64;\n\n    /* 06 - WORD: window size in KB */\n    mib->WinSize = 64;\n\n    /* 08 - WORD[2]: start segments, window A and window B */\n    mib->WinASegment = 0xa000; /* window A segment */\n    mib->WinBSegment = 0x0000; /* window B not supported */\n\n    /* 12 - DWORD: window positioning function */\n    mib->WinFuncPtr = 0; /* not supported */\n    \n    /* 16 - WORD: bytes per scan line */\n    /* FIXME: is this always correct? */\n    mib->BytesPerScanLine = ptr->Width * (ptr->Depth ? (ptr->Depth + 7) / 8 : 1);\n\n    /* 18 - WORD: width in pixels (graphics) or characters (text) */\n    if (ptr->ModeType == TEXT)\n    {\n        mib->XResolution = ptr->TextCols;\n    }\n    else\n    {\n        mib->XResolution = ptr->Width;\n    }\n\n    /* 20 - WORD: height in pixels (graphics) or characters (text) */\n    if (ptr->ModeType == TEXT)\n    {\n        mib->YResolution = ptr->TextRows;\n    }\n    else\n    {\n        mib->YResolution = ptr->Height;\n    }\n\n    /* 22 - BYTE: width of character cell in pixels */\n    mib->XCharSize = ptr->CharWidth;\n\n    /* 23 - BYTE: height of character cell in pixels */\n    mib->YCharSize = ptr->CharHeight;\n\n    /* 24 - BYTE: number of memory planes */\n    mib->NumberOfPlanes = 1; /* FIXME */\n\n    /* 25 - BYTE: number of bits per pixel */\n    mib->BitsPerPixel = ptr->Depth; /* FIXME: text modes? reserved bits? */\n\n    /* 26 - BYTE: number of banks */\n    mib->NumberOfBanks = 1; /* FIXME */\n\n    /*\n     * 27 - BYTE: memory model type\n     * Values (hex):\n     *    00 - Text mode\n     *    01 - CGA graphics\n     *    02 - Hercules graphics\n     *    03 - Planar\n     *    04 - Packed pixel\n     *    05 - Non-chain 4, 256 color\n     *    06 - Direct color\n     *    07 - YUV\n     * 08-0F - Reserved for VESA.\n     * 10-FF - OEM memory models.\n     */\n    if (ptr->ModeType == TEXT)\n        mib->MemoryModel = 0; /* text mode */\n    else\n        mib->MemoryModel = 3; /* FIXME */\n\n    /* 28 - BYTE: size of bank in KB */\n    mib->BankSize = 0; /* FIXME */\n\n    /* 29 - BYTE: number of image pages (less one) in video RAM */\n    mib->NumberOfImagePages = (ptr->ScreenPages)-1;\n\n    /* 30 - BYTE: reserved (0x00 for VBE 1.0-2.0, 0x01 for VBE 3.0) */\n    mib->Reserved1 = 0x01;\n\n    /* \n     * 31,33,35 - BYTE: red/green/blue mask size \n     * Size of red/green/blue color component in bits.\n     * 32,34,36 - BYTE: red/green/blue field position \n     * Bit position of the least significant bit of red/green/blue color\n     * component.\n     * Both should be only used when the memory model is direct color or YUV\n     * but \"Imperium Romanum\" uses this field even when the memory model is\n     * planar. So always fill this field when we have a depth bigger than 8,\n     * otherwise set them to zero.\n     */\n    switch (ptr->Depth) {\n        case 24:\n            mib->RedMaskSize = 8;\n            mib->GreenMaskSize = 8;\n            mib->BlueMaskSize = 8;\n            mib->RsvdMaskSize = 0;\n            mib->RedFieldPosition = 16;\n            mib->GreenFieldPosition = 8;\n            mib->BlueFieldPosition = 0;\n            mib->RsvdFieldPosition = 0;\n            break;\n        case 16:\n            mib->RedMaskSize = 5;\n            mib->GreenMaskSize = 6;\n            mib->BlueMaskSize = 5;\n            mib->RsvdMaskSize = 0;\n            mib->RedFieldPosition = 11;\n            mib->GreenFieldPosition = 5;\n            mib->BlueFieldPosition = 0;\n            mib->RsvdFieldPosition = 0;\n            break;\n        case 15:\n            mib->RedMaskSize = 5;\n            mib->GreenMaskSize = 5;\n            mib->BlueMaskSize = 5;\n            mib->RsvdMaskSize = 1;\n            mib->RedFieldPosition = 10;\n            mib->GreenFieldPosition = 5;\n            mib->BlueFieldPosition = 0;\n            mib->RsvdFieldPosition = 15;\n            break;\n        default:\n            mib->RedMaskSize = 0;\n            mib->GreenMaskSize = 0;\n            mib->BlueMaskSize = 0;\n            mib->RsvdMaskSize = 0;\n            mib->RedFieldPosition = 0;\n            mib->GreenFieldPosition = 0;\n            mib->BlueFieldPosition = 0;\n            mib->RsvdFieldPosition = 0;\n            break;\n    }\n\n    /*\n     * 39 - BYTE: direct color mode info \n     * Bits:\n     * 0 - Set if color ramp is programmable.\n     * 1 - Set if bytes in reserved field may be used by application.\n     */\n    mib->DirectColorModeInfo = 0; /* not supported */\n\n    /* 40 - DWORD: physical address of linear video buffer */\n    if (!vga_fb_data)\n    {\n        vga_fb_data = VirtualAlloc(NULL, 4*1024*1024, MEM_COMMIT, PAGE_READWRITE);\n        vga_fb_size = 4*1024*1024;  // enough to fix largest resolution\n    }\n    mib->PhysBasePtr = vga_fb_data;\n\n    /* 44 - DWORD: reserved, always zero */\n    mib->Reserved2 = 0;\n\n    /* 48 - WORD: reserved, always zero */\n    mib->Reserved3 = 0;\n\n    /* 50 - WORD: bytes per scan line in linear modes */\n    mib->LinBytesPerScanLine = mib->BytesPerScanLine;\n\n    /* 52 - BYTE: number of images (less one) for banked video modes */\n    mib->BnkNumberOfImagePages = 0; /* FIXME */\n\n    /* 53 - BYTE: number of images (less one) for linear video modes */\n    mib->LinNumberOfImagePages = mib->BnkNumberOfImagePages;\n\n    /* 54 - BYTE: red mask size (linear modes) */\n    mib->LinRedMaskSize = mib->RedMaskSize;\n\n    /* 55 - BYTE: red field position (linear modes) */\n    mib->LinRedFieldPosition = mib->RedFieldPosition;\n\n    /* 56 - BYTE: green mask size (linear modes) */\n    mib->LinGreenMaskSize = mib->GreenMaskSize;\n\n    /* 57 - BYTE: green field size (linear modes) */\n    mib->LinGreenFieldPosition = mib->GreenFieldPosition;\n\n    /* 58 - BYTE: blue mask size (linear modes) */\n    mib->LinBlueMaskSize = mib->BlueMaskSize;\n\n    /* 59 - BYTE: blue field position (linear modes) */\n    mib->LinBlueFieldPosition = mib->BlueFieldPosition;\n\n    /* 60 - BYTE: reserved mask size (linear modes) */\n    mib->LinRsvdMaskSize = mib->RsvdMaskSize;\n\n    /* 61 - BYTE: reserved mask position (linear modes) */\n    mib->LinRsvdFieldPosition = mib->RsvdFieldPosition;\n\n    /* 62 - DWORD: maximum pixel clock for graphics video mode, in Hz */\n    mib->MaxPixelClock = 0; /* FIXME */\n\n    /* 66 - BYTE[190]: reserved, set to zero */\n    memset( mib->Reserved4, 0, 190 );\n\n    return TRUE;\n}\n\n\n/**********************************************************************\n *         INT10_FillStateInformation\n *\n * Fill 64-byte buffer with VGA state and functionality information.\n */\nstatic void INT10_FillStateInformation( BYTE *buffer, BIOSDATA *data )\n{\n    INT10_HEAP *heap = INT10_GetHeap();\n\n    /* 00 - DWORD: address of static functionality table */\n    *(SEGPTR*)(buffer + 0) = MAKESEGPTR( heap->WineHeapSegment,\n                                         offsetof(INT10_HEAP, \n                                                  StaticModeSupport) );\n\n    /* 04 - BYTE[30]: copy of BIOS data starting from 0x49 (VideoMode) */\n    memmove( buffer + 4, &data->VideoMode, 30 );\n\n    /* 34 - BYTE: number of rows - 1 */\n    buffer[34] = data->RowsOnScreenMinus1;\n\n    /* 35 - WORD: bytes/character */\n    *(WORD*)(buffer + 35) = data->BytesPerChar;\n\n    /* 37 - BYTE: display combination code of active display */\n    buffer[37] = INT10_DCC;\n\n    /* 38 - BYTE: DCC of alternate display */\n    buffer[38] = 0; /* no secondary display */\n\n    /* 39 - WORD: number of colors supported in current mode (0000h = mono) */\n    *(WORD*)(buffer + 39) = 16; /* FIXME */\n\n    /* 41 - BYTE: number of pages supported in current mode */\n    buffer[41] = 1; /* FIXME */\n\n    /*\n     * 42 - BYTE: number of scan lines active\n     * Values (hex):\n     * 00 = 200\n     * 01 = 350\n     * 02 = 400\n     * 03 = 480\n     */\n    buffer[42] = 3; /* FIXME */\n\n    /* 43 - BYTE: primary character block */\n    buffer[43] = 0; /* FIXME */\n\n    /* 44 - BYTE: secondary character block */\n    buffer[44] = 0; /* FIXME */\n\n    /*\n     * 45 - BYTE: miscellaneous flags\n     * Bits:\n     * 0 - all modes on all displays on\n     * 1 - gray summing on\n     * 2 - monochrome display attached\n     * 3 - default palette loading disabled\n     * 4 - cursor emulation enabled\n     * 5 - 0 = intensity; 1 = blinking\n     * 6 - flat-panel display is active\n     * 7 - unused (0)\n     */\n    /* FIXME: Correct value? */\n    buffer[45] =\n        (data->VGASettings & 0x0f) |\n        ((data->ModeOptions & 1) << 4); /* cursor emulation */\n\n    /*\n     * 46 - BYTE: non-VGA mode support \n     * Bits:\n     *   0 - BIOS supports information return for adapter interface\n     *   1 - adapter interface driver required\n     *   2 - 16-bit VGA graphics present\n     *   3 - =1 MFI attributes enabled\n     *       =0 VGA attributes enabled\n     *   4 - 132-column mode supported\n     * 5-7 - reserved\n     */\n     buffer[46] = 0; /* FIXME: correct value? */\n\n     /* 47 - BYTE[2]: reserved, set to zero */\n     memset( buffer + 47, 0, 2 );\n\n     /*\n      * 49 - BYTE: video memory available\n      * Values (hex):\n      * 00 - 64K\n      * 01 - 128K\n      * 02 - 192K\n      * 03 - 256K\n      */\n     buffer[49] = (data->ModeOptions & 0x60) >> 5; /* FIXME */\n\n     /*\n      * 50 - BYTE: save pointer state flags\n      * Bits:\n      *   0 - 512 character set active\n      *   1 - dynamic save area present\n      *   2 - alpha font override active\n      *   3 - graphics font override active\n      *   4 - palette override active\n      *   5 - DCC override active\n      * 6-7 - unused (0)\n      */\n     buffer[50] = heap->StaticSavePointerFlags;\n\n     /*\n      * 51 - BYTE: display information and status \n      * Bits:\n      *   0 - flat-panel display attached\n      *   1 - flat-panel display active\n      *   2 - color display\n      * 3-6 - reserved\n      *   7 - 640x480 flat-panel can be used simultaneously with CRT\n      */\n     buffer[51] = 4; /* FIXME: correct value? */\n\n     /* 52 - BYTE[12]: reserved, set to zero */\n     memset( buffer + 52, 0, 12 );\n}\n\n\n/**********************************************************************\n *         INT10_GetHeap\n */\nstatic INT10_HEAP *INT10_GetHeap( void )\n{\n    static INT10_HEAP *heap_pointer = 0;\n\n    if (!heap_pointer)\n    {\n        WORD segment;\n        int  i;\n\n        heap_pointer = DOSVM_AllocDataUMB( sizeof(INT10_HEAP), \n                                           &segment,\n                                           0 );\n\n        for (i = 0; i < 7; i++)\n            heap_pointer->StaticModeSupport[i] = 0xff; /* FIXME */\n\n        heap_pointer->StaticScanlineSupport = 7;  /* FIXME */\n        heap_pointer->StaticNumberCharBlocks = 0; /* FIXME */\n        heap_pointer->StaticActiveCharBlocks = 0; /* FIXME */\n        heap_pointer->StaticMiscFlags = 0x8ff;    /* FIXME */\n        heap_pointer->StaticReserved1 = 0;\n        heap_pointer->StaticSavePointerFlags = 0x3f; /* FIXME */\n        heap_pointer->StaticReserved2 = 0;\n\n        for (i=0; TRUE; i++)\n        {\n            heap_pointer->VesaModeList[i] = VGA_modelist[i].Mode;\n            if (VGA_modelist[i].Mode == 0xffff)\n                break;\n        }\n\n        strcpy( heap_pointer->VesaOEMName, \"WINE SVGA BOARD\" );\n        strcpy( heap_pointer->VesaVendorName, \"WINE\" );\n        strcpy( heap_pointer->VesaProductName, \"WINE SVGA\" );\n        strcpy( heap_pointer->VesaProductRev, \"2008\" );\n        \n        heap_pointer->VesaCurrentMode = 0; /* Initialized later. */\n        heap_pointer->WineHeapSegment = segment;\n    }\n\n    return heap_pointer;\n}\n\n\n/**********************************************************************\n *         INT10_SetVideoMode\n *\n * Change current video mode to any VGA or VESA mode.\n * Returns TRUE if mode is supported.\n *\n * Mode bitfields:\n * 0-6: .. Mode number (combined with bit 8).\n *   7: =0 Clear screen.\n *      =1 Preserve display memory on mode change (VGA modes).\n *   8: =0 VGA mode.\n *      =1 VESA mode.\n *   9: .. Reserved, must be zero.\n *  10: .. Reserved, must be zero.\n *  11: =0 Use default refresh rate.\n *      =1 Use user specified refresh rate.\n *  12: .. Reserved, must be zero.\n *  13: .. Reserved, must be zero.\n *  14: =0 Use windowed frame buffer model.\n *      =1 Use linear frame buffer model.\n *  15: =0 Clear screen.\n *      =1 Preserve display memory on mode change (VESA modes).\n */\nstatic BOOL INT10_SetVideoMode( BIOSDATA *data, WORD mode )\n{\n    const VGA_MODE *ptr = VGA_GetModeInfo( mode );\n    INT10_HEAP *heap = INT10_GetHeap();\n    BOOL clearScreen = TRUE;\n\n    if (!ptr)\n        return FALSE;\n\n    /*\n     * Check for VGA and VESA preserve video memory flag.\n     */\n    if ((mode & 0x0080) || (mode & 0x8000))\n        clearScreen = FALSE;\n\n    /*\n     * Note that we do not mask out flags here on purpose.\n     */\n    heap->VesaCurrentMode = mode;\n    if (mode <= 0xff)\n        data->VideoMode = mode;\n    else\n        data->VideoMode = 0;\n\n    if (ptr->ModeType == TEXT)\n    {\n        /* Text mode. */\n        TRACE( \"Setting %s %dx%d text mode (screen %s)\\n\", \n               IS_VESA_MODE(mode) ? \"VESA\" : \"VGA\", \n               ptr->TextCols, ptr->TextRows,\n               clearScreen ? \"cleared\" : \"preserved\" );\n\n        /*\n         * FIXME: We should check here if alpha mode could be set.\n         */\n        VGA_SetAlphaMode( ptr->TextCols, ptr->TextRows );\n\n        data->VideoColumns = ptr->TextCols;\n        data->RowsOnScreenMinus1 = ptr->TextRows - 1;\n\n        if (clearScreen)\n        {            \n            VGA_ClearText( 0, 0, ptr->TextCols-1, ptr->TextRows-1, 0x07 );\n            INT10_SetCursorPos( data, 0, 0, 0 );\n            VGA_SetCursorPos( 0, 0 );            \n        }\n    }\n    else\n    {\n        /* Graphics mode. */\n        TRACE( \"Setting %s %dx%dx%d graphics mode (screen %s)\\n\", \n               IS_VESA_MODE(mode) ? \"VESA\" : \"VGA\", \n               ptr->Width, ptr->Height, ptr->Depth,\n               clearScreen ? \"cleared\" : \"preserved\" );\n\n        if (!VGA_SetMode(mode))\n            return FALSE;\n    }\n\n    return TRUE;\n}\n\n\n/**********************************************************************\n *         INT10_GetCursorPos\n */\nstatic void INT10_GetCursorPos(BIOSDATA*data,unsigned page,unsigned*X,unsigned*Y)\n{\n    *X = data->VideoCursorPos[page*2];   /* column */\n    *Y = data->VideoCursorPos[page*2+1]; /* row */\n}\n\n\n/**********************************************************************\n *         INT10_SetCursorPos\n */\nstatic void INT10_SetCursorPos(BIOSDATA*data,unsigned page,unsigned X,unsigned Y)\n{\n    data->VideoCursorPos[page*2] = X;\n    data->VideoCursorPos[page*2+1] = Y;\n}\n\n\n/**********************************************************************\n *         INT10_InitializeVideoMode\n *\n * The first time this function is called VGA emulation is set to the\n * default text mode.\n */\nstatic void INT10_InitializeVideoMode( BIOSDATA *data )\n{\n  static BOOL already_initialized = FALSE;\n  unsigned    width;\n  unsigned    height;\n\n  if(already_initialized)\n    return;\n  already_initialized = TRUE;\n\n  VGA_InitAlphaMode(&width, &height);\n\n  /*\n   * FIXME: Add more mappings between initial size and\n   *        text modes.\n   */\n  if (width >= 80 && height >= 25)\n      INT10_SetVideoMode( data, 0x03 );\n  else\n      INT10_SetVideoMode( data, 0x01 );\n}\n\n\n/**********************************************************************\n *          INT10_HandleVESA\n *\n * Handler for VESA functions (int10 function 0x4f).\n */\nstatic void INT10_HandleVESA( CONTEXT *context )\n{\n    BIOSDATA *data = DOSVM_BiosData();\n\n    switch(AL_reg(context)) {\n\n    case 0x00: /* RETURN CONTROLLER INFORMATION */\n        TRACE( \"VESA RETURN CONTROLLER INFORMATION\\n\" );\n        {\n            BYTE *ptr = CTX_SEG_OFF_TO_LIN(context,\n                                           context->SegEs, \n                                           context->Edi);\n            INT10_FillControllerInformation( ptr );\n            SET_AL( context, 0x4f );\n            SET_AH( context, 0x00 ); /* 0x00 = successful 0x01 = failed */\n        }\n        break;\n\n    case 0x01: /* RETURN MODE INFORMATION */\n        TRACE( \"VESA RETURN MODE INFORMATION %04x\\n\", CX_reg(context) );\n        {\n            struct _ModeInfoBlock *ptr = CTX_SEG_OFF_TO_LIN(context,\n                                                            context->SegEs, \n                                                            context->Edi);\n            SET_AL( context, 0x4f );\n            if (INT10_FillModeInformation( ptr, CX_reg(context) ))\n                SET_AH( context, 0x00 ); /* status: success */\n            else\n                SET_AH( context, 0x01 ); /* status: failed */\n        }\n        break;\n\n    case 0x02: /* SET SuperVGA VIDEO MODE */\n        TRACE( \"Set VESA video mode %04x\\n\", BX_reg(context) );\n        SET_AL( context, 0x4f ); /* function supported */\n        if (INT10_SetVideoMode( data, BX_reg(context) ))\n            SET_AH( context, 0x00 ); /* success */\n        else\n            SET_AH( context, 0x01 ); /* failed */\n        break;\n\n    case 0x03: /* VESA SuperVGA BIOS - GET CURRENT VIDEO MODE */\n        SET_AL( context, 0x4f );\n        SET_AH( context, 0x00 );\n        SET_BX( context, INT10_GetHeap()->VesaCurrentMode );\n        break;\n\n    case 0x04: /* VESA SuperVGA BIOS - SAVE/RESTORE SuperVGA VIDEO STATE */\n        ERR(\"VESA SAVE/RESTORE Video State - Not Implemented\\n\");\n        /* AL_reg(context) = 0x4f; = supported so not set since not implemented */\n        /* maybe we should do this instead ? */\n        /* AH_reg(context = 0x01;  not implemented so just fail */\n        break;\n\n    case 0x05: /* VESA SuperVGA BIOS - CPU VIDEO MEMORY CONTROL */\n        /*\n         * This subfunction supports only Window A (BL_reg == 0) and\n         * it assumes that window granularity is 64k.\n         */\n        switch(BH_reg(context)) {\n        case 0x00: /* select video memory window */\n            SET_AL( context, 0x4f ); /* function supported */\n            if(BL_reg(context) == 0) {\n                VGA_SetWindowStart(DX_reg(context) * 64 * 1024);\n                SET_AH( context, 0x00 ); /* status: successful */\n            } else\n                SET_AH( context, 0x01 ); /* status: failed */\n            break;\n        case 0x01: /* get video memory window */\n            SET_AL( context, 0x4f ); /* function supported */\n            if(BL_reg(context) == 0) {\n                SET_DX( context, VGA_GetWindowStart() / 64 / 1024 );\n                SET_AH( context, 0x00 ); /* status: successful */\n            } else\n                SET_AH( context, 0x01 ); /* status: failed */\n            break;\n\tdefault:\n            INT_BARF( context, 0x10 );\n\t}\n        break;\n\n    case 0x06: /* VESA GET/SET LOGICAL SCAN LINE LENGTH */\n        ERR(\"VESA GET/SET LOGICAL SCAN LINE LENGTH - Not Implemented\\n\");\n        /* AL_reg(context) = 0x4f; = supported so not set since not implemented */\n        /* maybe we should do this instead ? */\n        /* AH_reg(context = 0x001; not implemented so just fail */\n        break;\n\n    case 0x07: /* GET/SET DISPLAY START */\n        ERR(\"VESA GET/SET DISPLAY START - Not Implemented\\n\");\n        /* AL_reg(context) = 0x4f; = supported so not set since not implemented */\n        /* maybe we should do this instead ? */\n        /* AH_reg(context = 0x001; not implemented so just fail */\n        break;\n\n    case 0x08: /* GET/SET DAC PALETTE CONTROL */\n        ERR(\"VESA GET/SET DAC PALETTE CONTROL- Not Implemented\\n\");\n        /* AL_reg(context) = 0x4f; = supported so not set since not implemented */\n        /* maybe we should do this instead ? */\n        /* AH_reg(context = 0x001; not implemented so just fail */\n        break;\n\n    case 0x09: /* SET PALETTE ENTRIES */\n        FIXME(\"VESA Set palette entries - not implemented\\n\");\n        break;\n\n    case 0x0a: /* GET PROTECTED-MODE CODE */\n        FIXME(\"VESA Get protected-mode code - not implemented\\n\");\n        break;\n\n    case 0x10: /* Display Power Management Extensions */\n        FIXME(\"VESA Display Power Management Extensions - not implemented\\n\");\n        break;\n\n    case 0xef:  /* get video mode for hercules-compatibles   */\n        /* There's no reason to really support this  */\n        /* is there?....................(A.C.)       */\n        TRACE(\"Just report the video not hercules compatible\\n\");\n        SET_DX( context, 0xffff );\n        break;\n\n    case 0xff: /* Turn VESA ON/OFF */\n        /* I don't know what to do */\n        break;\n\n    default:\n        FIXME(\"VESA Function (0x%x) - Not Supported\\n\", AH_reg(context));\n        break;\n    }\n}\n\n\n/**********************************************************************\n *\t    DOSVM_Int10Handler\n *\n * Handler for int 10h (video).\n *\n * NOTE:\n *    Most INT 10 functions for text-mode, CGA, EGA, and VGA cards\n *    are present in this list. (SVGA and XGA are not) That is not\n *    to say that all these functions should be supported, but if\n *    anyone is brain-damaged enough to want to emulate one of these\n *    beasts then this should get you started.\n *\n * NOTE:\n *    Several common graphical extensions used by Microsoft hook\n *    off of here. I have *not* added them to this list (yet). They\n *    include:\n *\n *    MSHERC.COM - More functionality for Hercules cards.\n *    EGA.SYS (also MOUSE.COM) - More for EGA cards.\n *\n *    Yes, MS also added this support into their mouse driver. Don't\n *    ask me, I don't work for them.\n *\n * Joseph Pranevich - 9/98\n *\n *  Jess Haas 2/99\n *\tAdded support for Vesa. It is not complete but is a start.\n *\tNOTE: Im not sure if I did all this right or if any of it works.\n *\tCurrently I don't have a program that uses Vesa that actually gets far\n *\tenough without crashing to do vesa stuff.\n *\n *      Added additional vga graphic support - 3/99\n */\nvoid WINAPI DOSVM_Int10Handler( CONTEXT *context )\n{\n    BIOSDATA *data = DOSVM_BiosData();\n\n    INT10_InitializeVideoMode( data );\n\n    switch(AH_reg(context)) {\n\n    case 0x00: /* SET VIDEO MODE */\n        TRACE( \"Set VGA video mode %02x\\n\", AL_reg(context) );\n        if (!INT10_SetVideoMode( data, AL_reg(context) ))\n            FIXME( \"Unsupported VGA video mode requested: %#x\\n\", \n                   AL_reg(context) );\n        break;\n\n    case 0x01: /* SET CURSOR SHAPE */\n        TRACE(\"Set Cursor Shape start %d end %d options %d\\n\",\n              CH_reg(context) & 0x1f,\n              CL_reg(context) & 0x1f,\n              CH_reg(context) & 0xe0);\n        data->VideoCursorType = CX_reg(context); /* direct copy */\n\tVGA_SetCursorShape(CH_reg(context), CL_reg(context));\n        break;\n\n    case 0x02: /* SET CURSOR POSITION */\n        /* BH = Page Number */ /* Not supported */\n        /* DH = Row */ /* 0 is left */\n        /* DL = Column */ /* 0 is top */\n        INT10_SetCursorPos(data,BH_reg(context),DL_reg(context),DH_reg(context));\n        if (BH_reg(context))\n        {\n           FIXME(\"Set Cursor Position: Cannot set to page %d\\n\",\n              BH_reg(context));\n        }\n        else\n        {\n           VGA_SetCursorPos(DL_reg(context), DH_reg(context));\n           TRACE(\"Set Cursor Position: %d/%d\\n\", DL_reg(context),\n              DH_reg(context));\n        }\n        break;\n\n    case 0x03: /* GET CURSOR POSITION AND SIZE */\n        {\n          unsigned row, col;\n\n          TRACE(\"Get cursor position and size (page %d)\\n\", BH_reg(context));\n          SET_CX( context, data->VideoCursorType );\n          INT10_GetCursorPos(data,BH_reg(context),&col,&row);\n          SET_DH( context, row );\n          SET_DL( context, col );\n          TRACE(\"Cursor Position: %d/%d\\n\", DL_reg(context), DH_reg(context));\n        }\n        break;\n\n    case 0x04: /* READ LIGHT PEN POSITION */\n        FIXME(\"Read Light Pen Position - Not Supported\\n\");\n        SET_AH( context, 0x00 ); /* Not down */\n        break;\n\n    case 0x05: /* SELECT ACTIVE DISPLAY PAGE */\n        FIXME(\"Select Active Display Page (%d) - Not Supported\\n\", AL_reg(context));\n        data->VideoCurPage = AL_reg(context);\n        break;\n\n    case 0x06: /* SCROLL UP WINDOW */\n        /* AL = Lines to scroll */\n        /* BH = Attribute */\n        /* CH,CL = row, col upper-left */\n        /* DH,DL = row, col lower-right */\n        TRACE(\"Scroll Up Window %d\\n\", AL_reg(context));\n\n        if (AL_reg(context) == 0)\n            VGA_ClearText( CH_reg(context), CL_reg(context),\n                           DH_reg(context), DL_reg(context),\n                           BH_reg(context) );\n        else\n            VGA_ScrollUpText( CH_reg(context), CL_reg(context),\n                              DH_reg(context), DL_reg(context),\n                              AL_reg(context), BH_reg(context) );\n        break;\n\n    case 0x07: /* SCROLL DOWN WINDOW */\n        /* AL = Lines to scroll */\n        /* BH = Attribute */\n        /* CH,CL = row, col upper-left */\n        /* DH,DL = row, col lower-right */\n        TRACE(\"Scroll Down Window %d\\n\", AL_reg(context));\n\n        if (AL_reg(context) == 0)\n            VGA_ClearText( CH_reg(context), CL_reg(context),\n                           DH_reg(context), DL_reg(context),\n                           BH_reg(context) );\n        else\n            VGA_ScrollDownText( CH_reg(context), CL_reg(context),\n                                DH_reg(context), DL_reg(context),\n                                AL_reg(context), BH_reg(context) );\n        break;\n\n    case 0x08: /* READ CHARACTER AND ATTRIBUTE AT CURSOR POSITION */\n        {\n            if (BH_reg(context)) /* Write to different page */\n            {\n                FIXME(\"Read character and attribute at cursor position -\"\n                      \" Can't read from non-0 page\\n\");\n                SET_AL( context, ' ' ); /* That page is blank */\n                SET_AH( context, 7 );\n            }\n            else\n           {\n                BYTE ascii, attr;\n                TRACE(\"Read Character and Attribute at Cursor Position\\n\");\n                VGA_GetCharacterAtCursor(&ascii, &attr);\n                SET_AL( context, ascii );\n                SET_AH( context, attr );\n            }\n        }\n        break;\n\n    case 0x09: /* WRITE CHARACTER AND ATTRIBUTE AT CURSOR POSITION */\n    case 0x0a: /* WRITE CHARACTER ONLY AT CURSOR POSITION */\n       /* AL = Character to display. */\n       /* BH = Page Number */ /* We can't write to non-0 pages, yet. */\n       /* BL = Attribute / Color */\n       /* CX = Times to Write Char */\n       /* Note here that the cursor is not advanced. */\n       {\n           unsigned row, col;\n\n           INT10_GetCursorPos(data,BH_reg(context),&col,&row);\n           VGA_WriteChars(col, row,\n                          AL_reg(context),\n                          (AH_reg(context) == 0x09) ? BL_reg(context) : -1,\n                          CX_reg(context));\n           if (CX_reg(context) > 1)\n              TRACE(\"Write Character%s at Cursor Position (Rep. %d): %c\\n\",\n                    (AH_reg(context) == 0x09) ? \" and Attribute\" : \"\",\n                 CX_reg(context), AL_reg(context));\n           else\n              TRACE(\"Write Character%s at Cursor Position: %c\\n\",\n                    (AH_reg(context) == 0x09) ? \" and Attribute\" : \"\",\n                AL_reg(context));\n       }\n       break;\n\n    case 0x0b:\n        switch (BH_reg(context)) {\n        case 0x00: /* SET BACKGROUND/BORDER COLOR */\n            /* In text modes, this sets only the border... */\n            /* According to the interrupt list and one of my books. */\n            /* Funny though that Beyond Zork seems to indicate that it\n               also sets up the default background attributes for clears\n               and scrolls... */\n            /* Bear in mind here that we do not want to change,\n               apparently, the foreground or attribute of the background\n               with this call, so we should check first to see what the\n               foreground already is... FIXME */\n\n            /* For CGA modes, background color change is the same as writing\n               to I/O address 0x3d9 bit 4  */\n            if(data->VideoMode >= 4 && data->VideoMode <= 6)\n            {\n              VGA_SetBright((BL_reg(context) & 0x10) != 0);\n              VGA_UpdatePalette();\n            }\n            else FIXME(\"Set Background/Border Color: %d/%d\\n\",\n              BH_reg(context), BL_reg(context));\n            break;\n        case 0x01: /* SET PALETTE */\n\n            /* For CGA modes, palette color change is the same as writing\n               to I/O address 0x3d9 bit 5 */\n            if(data->VideoMode >= 4 && data->VideoMode <= 6)\n\t    {\n              VGA_SetPaletteIndex(BL_reg(context) & 1);\n              VGA_UpdatePalette();\n            }\n            else FIXME(\"Set Palette - Not Supported: %02X\\n\", BL_reg(context));\n            break;\n        default:\n            FIXME(\"INT 10 AH = 0x0b BH = 0x%x - Unknown\\n\",\n               BH_reg(context));\n            break;\n        }\n        break;\n\n    case 0x0c: /* WRITE GRAPHICS PIXEL */\n\n        /* Only supported in CGA mode for now */\n        if(data->VideoMode >= 4 && data->VideoMode <= 6)\n        {\n          VGA_WritePixel(AL_reg(context), BH_reg(context), CX_reg(context), DX_reg(context));\n        }\n        else FIXME(\"Write pixel not implemented for current mode\\n\");\n        break;\n\n    case 0x0d: /* READ GRAPHICS PIXEL */\n        /* Not in graphics mode, can ignore w/o error */\n        FIXME(\"Read Graphics Pixel - Not Supported\\n\");\n        break;\n\n    case 0x0e: /* TELETYPE OUTPUT */\n        TRACE(\"Teletype Output\\n\");\n        DOSVM_PutChar(AL_reg(context));\n        break;\n\n    case 0x0f: /* GET CURRENT VIDEO MODE */\n        TRACE(\"Get current video mode: -> mode %d, columns %d\\n\", data->VideoMode, data->VideoColumns);\n        /* Note: This should not be a constant value. */\n        SET_AL( context, data->VideoMode );\n        SET_AH( context, data->VideoColumns );\n        SET_BH( context, 0 ); /* Display page 0 */\n        break;\n\n    case 0x10:\n        switch (AL_reg(context)) {\n        case 0x00: /* SET SINGLE PALETTE REGISTER - A.C. */\n            TRACE(\"Set Single Palette Register - Reg 0x0%x Value 0x0%x\\n\",\n\t\tBL_reg(context),BH_reg(context));\n\t\t/* BH is the value  BL is the register */\n\t\tVGA_SetColor16((int)BL_reg(context),(int)BH_reg(context));\n            break;\n        case 0x01: /* SET BORDER (OVERSCAN) */\n            /* Text terminals have no overscan */\n\t    /* I'm setting it anyway. - A.C.   */\n            TRACE(\"Set Border (Overscan) - Ignored but set.\\n\");\n\t    VGA_SetColor16(16,(int)BH_reg(context));\n            break;\n        case 0x02: /* SET ALL PALETTE REGISTERS - A.C.*/\n            TRACE(\"Set all palette registers\\n\");\n\t\t/* ES:DX points to a 17 byte table of colors */\n\t\t/* No return data listed */\n\t\t/* I'll have to update my table and the default palette */\n               VGA_Set16Palette(CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edx));\n            break;\n        case 0x03: /* TOGGLE INTENSITY/BLINKING BIT */\n            FIXME(\"Toggle Intensity/Blinking Bit - Not Supported\\n\");\n            break;\n        case 0x07: /* GET INDIVIDUAL PALETTE REGISTER  - A.C.*/\n            TRACE(\"Get Individual Palette Register 0x0%x\\n\",BL_reg(context));\n\t\t/* BL is register to read [ 0-15 ] BH is return value */\n\t        SET_BH( context, VGA_GetColor16((int)BL_reg(context)) );\n            break;\n        case 0x08: /* READ OVERSCAN (BORDER COLOR) REGISTER  - A.C. */\n            TRACE(\"Read Overscan (Border Color) Register\\n\");\n\t        SET_BH( context, VGA_GetColor16(16) );\n            break;\n        case 0x09: /* READ ALL PALETTE REGISTERS AND OVERSCAN REGISTER - A.C.*/\n            TRACE(\"Read All Palette Registers and Overscan Register\\n\");\n\t\t/* ES:DX points to a 17 byte table where the results */\n\t\t/*  of this call should be stored.                   */\n               VGA_Get16Palette(CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edx));\n            break;\n        case 0x10: /* SET INDIVIDUAL DAC REGISTER */\n            {\n                PALETTEENTRY paldat;\n\n                TRACE(\"Set Individual DAC register\\n\");\n                paldat.peRed   = DH_reg(context);\n                paldat.peGreen = CH_reg(context);\n                paldat.peBlue  = CL_reg(context);\n                paldat.peFlags = 0;\n                VGA_SetPalette(&paldat,BX_reg(context)&0xFF,1);\n            }\n            break;\n        case 0x12: /* SET BLOCK OF DAC REGISTERS */\n            {\n                int i;\n                PALETTEENTRY paldat;\n                BYTE *pt;\n\n                TRACE(\"Set Block of DAC registers\\n\");\n                pt = CTX_SEG_OFF_TO_LIN(context,context->SegEs,context->Edx);\n\t\tfor (i=0;i<CX_reg(context);i++)\n                {\n                    paldat.peRed   = (*(pt+i*3+0)) << 2;\n                    paldat.peGreen = (*(pt+i*3+1)) << 2;\n                    paldat.peBlue  = (*(pt+i*3+2)) << 2;\n                    paldat.peFlags = 0;\n                    VGA_SetPalette(&paldat,(BX_reg(context)+i)&0xFF,1);\n                }\n            }\n            break;\n        case 0x13: /* SELECT VIDEO DAC COLOR PAGE */\n            FIXME(\"Select video DAC color page - Not Supported\\n\");\n            break;\n        case 0x15: /* READ INDIVIDUAL DAC REGISTER */\n            FIXME(\"Read individual DAC register - Not Supported\\n\");\n            break;\n        case 0x17: /* READ BLOCK OF DAC REGISTERS */\n            FIXME(\"Read block of DAC registers - Not Supported\\n\");\n            break;\n        case 0x18: /* SET PEL MASK */\n            FIXME(\"Set PEL mask - Not Supported\\n\");\n            break;\n        case 0x19: /* READ PEL MASK */\n            FIXME(\"Read PEL mask - Not Supported\\n\");\n            break;\n        case 0x1a: /* GET VIDEO DAC COLOR PAGE STATE */\n            FIXME(\"Get video DAC color page state - Not Supported\\n\");\n            break;\n        case 0x1b: /* PERFORM GRAY-SCALE SUMMING */\n            FIXME(\"Perform Gray-scale summing - Not Supported\\n\");\n            break;\n        default:\n            FIXME(\"INT 10 AH = 0x10 AL = 0x%x - Unknown\\n\",\n               AL_reg(context));\n            break;\n        }\n        break;\n\n    case 0x11: /* TEXT MODE CHARGEN */\n        /* Note that second subfunction is *almost* identical. */\n        /* See INTERRUPT.A for details. */\n        switch (AL_reg(context)) {\n        case 0x00: /* LOAD USER SPECIFIED PATTERNS */\n        case 0x10:\n            FIXME(\"Load User Specified Patterns - Not Supported\\n\");\n            break;\n        case 0x01: /* LOAD ROM MONOCHROME PATTERNS */\n        case 0x11:\n            FIXME(\"Load ROM Monochrome Patterns - Not Supported\\n\");\n            break;\n        case 0x02: /* LOAD ROM 8x8 DOUBLE-DOT PATTERNS */\n        case 0x12:\n            FIXME(\n                \"Load ROM 8x8 Double Dot Patterns - Not Supported\\n\");\n            break;\n        case 0x03: /* SET BLOCK SPECIFIER */\n            FIXME(\"Set Block Specifier - Not Supported\\n\");\n            break;\n        case 0x04: /* LOAD ROM 8x16 CHARACTER SET */\n        case 0x14:\n            FIXME(\"Load ROM 8x16 Character Set - Not Supported\\n\");\n            break;\n        case 0x20: /* SET USER 8x16 GRAPHICS CHARS */\n            FIXME(\"Set User 8x16 Graphics Chars - Not Supported\\n\");\n            break;\n        case 0x21: /* SET USER GRAPICS CHARACTERS */\n            FIXME(\"Set User Graphics Characters - Not Supported\\n\");\n            break;\n        case 0x22: /* SET ROM 8x14 GRAPHICS CHARS */\n            FIXME(\"Set ROM 8x14 Graphics Chars - Not Supported\\n\");\n            break;\n        case 0x23: /* SET ROM 8x8 DBL DOT CHARS */\n            FIXME(\n                \"Set ROM 8x8 Dbl Dot Chars (Graphics) - Not Supported\\n\");\n            break;\n        case 0x24: /* LOAD 8x16 GRAPHIC CHARS */\n            FIXME(\"Load 8x16 Graphic Chars - Not Supported\\n\");\n            break;\n        case 0x30: /* GET FONT INFORMATION */\n            FIXME(\"Get Font Information - Not Supported\\n\");\n            break;\n        default:\n            FIXME(\"INT 10 AH = 0x11 AL = 0x%x - Unknown\\n\",\n               AL_reg(context));\n            break;\n        }\n        break;\n\n    case 0x12: /* ALTERNATE FUNCTION SELECT */\n        switch (BL_reg(context)) {\n        case 0x10: /* GET EGA INFO */\n            TRACE(\"EGA info requested\\n\");\n            SET_BH( context, 0x00 );   /* Color screen */\n            SET_BL( context, data->ModeOptions >> 5 ); /* EGA memory size */\n            SET_CX( context, data->FeatureBitsSwitches );\n            break;\n        case 0x20: /* ALTERNATE PRTSC */\n            FIXME(\"Install Alternate Print Screen - Not Supported\\n\");\n            break;\n        case 0x30: /* SELECT VERTICAL RESOLUTION */\n            FIXME(\"Select vertical resolution - not supported\\n\");\n            break;\n        case 0x31: /* ENABLE/DISABLE DEFAULT PALETTE LOADING */\n            FIXME(\"Default palette loading - not supported\\n\");\n            data->VGASettings =\n                (data->VGASettings & 0xf7) |\n                ((AL_reg(context) == 1) << 3);\n            break;\n        case 0x32: /* ENABLE/DISABLE VIDEO ADDRESSING */\n            FIXME(\"Video Addressing - Not Supported\\n\");\n            break;\n        case 0x33: /* ENABLE/DISABLE GRAY SCALE SUMMING */\n            FIXME(\"Gray Scale Summing - Not Supported\\n\");\n            break;\n        case 0x34: /* ENABLE/DISABLE CURSOR EMULATION */\n            TRACE(\"Set cursor emulation to %d\\n\", AL_reg(context));\n            data->ModeOptions =\n                (data->ModeOptions & 0xfe)|(AL_reg(context) == 1);\n            break;\n        case 0x36: /* VIDEO ADDRESS CONTROL */\n            FIXME(\"Video Address Control - Not Supported\\n\");\n            break;\n        default:\n            FIXME(\"INT 10 AH = 0x11 AL = 0x%x - Unknown\\n\",\n               AL_reg(context));\n            break;\n        }\n        break;\n\n    case 0x13: /* WRITE STRING */\n        /* This one does not imply that string be at cursor. */\n        FIXME(\"Write String - Not Supported\\n\");\n        break;\n\n    case 0x1a:\n        switch (AL_reg(context)) {\n        case 0x00: /* GET DISPLAY COMBINATION CODE */\n            TRACE(\"Get Display Combination Code\\n\");\n            SET_AL( context, 0x1a );      /* Function supported */\n            SET_BL( context, INT10_DCC ); /* Active display */\n            SET_BH( context, 0x00 );      /* No alternate display */\n            break;\n        case 0x01: /* SET DISPLAY COMBINATION CODE */\n            FIXME(\"Set Display Combination Code - Not Supported\\n\");\n            break;\n        default:\n            FIXME(\"INT 10 AH = 0x1a AL = 0x%x - Unknown\\n\",\n               AL_reg(context));\n            break;\n        }\n    break;\n\n    case 0x1b: /* FUNCTIONALITY/STATE INFORMATION */\n        TRACE(\"Get functionality/state information\\n\");\n        if (BX_reg(context) == 0x0000)\n        {\n            BYTE *ptr = CTX_SEG_OFF_TO_LIN(context,\n                                           context->SegEs, \n                                           context->Edi);\n            SET_AL( context, 0x1b ); /* Function is supported */\n            INT10_FillStateInformation( ptr, data );\n        }\n        break;\n\n    case 0x1c: /* SAVE/RESTORE VIDEO STATE */\n        FIXME(\"Save/Restore Video State - Not Supported\\n\");\n        break;\n\n        case 0xef:  /* get video mode for hercules-compatibles   */\n                    /* There's no reason to really support this  */\n                    /* is there?....................(A.C.)       */\n                TRACE(\"Just report the video not hercules compatible\\n\");\n                SET_DX( context, 0xffff );\n                break;\n\n    case 0x4f: /* VESA */\n        INT10_HandleVESA(context);\n        break;\n\n    case 0xfe: /* GET SHADOW BUFFER */\n        TRACE( \"GET SHADOW BUFFER %x:%x - ignored\\n\",\n               context->SegEs, DI_reg(context) );\n        break;\n\n    default:\n        FIXME(\"Unknown - 0x%x\\n\", AH_reg(context));\n        INT_BARF( context, 0x10 );\n    }\n}\n\n\n/**********************************************************************\n *         DOSVM_PutChar\n *\n * Write single character to VGA console at the current \n * cursor position and updates the BIOS cursor position.\n */\nvoid DOSVM_PutChar( BYTE ascii )\n{\n  BIOSDATA *data = DOSVM_BiosData();\n  unsigned  xpos, ypos;\n\n  TRACE(\"char: 0x%02x(%c)\\n\", ascii, ascii);\n\n  INT10_InitializeVideoMode( data );\n\n  VGA_PutChar( ascii );\n  VGA_GetCursorPos( &xpos, &ypos );\n  INT10_SetCursorPos( data, 0, xpos, ypos );\n}\n"
  },
  {
    "path": "krnl386/int13.c",
    "content": "/*\n * BIOS interrupt 13h handler\n *\n * Copyright 1997 Andreas Mohr\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <stdlib.h>\n#include <sys/types.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n\n#ifdef HAVE_SYS_IOCTL_H\n# include <sys/ioctl.h>\n#endif\n#include <fcntl.h>\n#ifdef linux\n#ifdef HAVE_LINUX_COMPILER_H\n#include <linux/compiler.h>\n#endif\n# include <linux/fd.h>\n#endif\n\n#include \"dosexe.h\"\n#include \"wine/server.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(int);\n\n\n/*\n * Status of last int13 operation.\n */\nstatic BYTE INT13_last_status;\n\n\n/**********************************************************************\n *         INT13_SetStatus\n *\n * Write status to AH register and set carry flag on error (AH != 0).\n *\n * Despite what Ralf Brown says, at least functions 0x06 and 0x07 \n * seem to set carry, too.\n */\nstatic void INT13_SetStatus( CONTEXT *context, BYTE status )\n{\n    INT13_last_status = status;\n\n    SET_AH( context, status );\n\n    if (status)\n        SET_CFLAG( context );\n    else\n        RESET_CFLAG( context );        \n}\n\n\n/**********************************************************************\n *\t    INT13_ReadFloppyParams\n *\n * Read floppy disk parameters.\n */\nstatic void INT13_ReadFloppyParams( CONTEXT *context )\n{\n#ifdef linux\n    static const BYTE floppy_params[2][13] =\n    {\n        { 0xaf, 0x02, 0x25, 0x02, 0x12, 0x1b, 0xff, 0x6c, 0xf6, 0x0f, 0x08 },\n        { 0xaf, 0x02, 0x25, 0x02, 0x12, 0x1b, 0xff, 0x6c, 0xf6, 0x0f, 0x08 }\n    };\n\n    static const DWORD drive_type_info[7]={\n        0x0000, /* none */\n        0x2709, /* 360 K */\n        0x4f0f, /* 1.2 M */\n        0x4f09, /* 720 K */\n        0x4f12, /* 1.44 M */\n        0x4f24, /* 2.88 M */\n        0x4f24  /* 2.88 M */\n    };\n\n    unsigned int i;\n    unsigned int nr_of_drives = 0;\n    BYTE drive_nr = DL_reg( context );\n    int floppy_fd;\n    int r;\n    struct floppy_drive_params floppy_parm;\n    WCHAR root[] = {'A',':','\\\\',0}, drive_root[] = {'\\\\','\\\\','.','\\\\','A',':',0};\n    HANDLE h;\n\n    TRACE(\"in  [ EDX=%08x ]\\n\", context->Edx );\n\n    SET_AL( context, 0 );\n    SET_BX( context, 0 );\n    SET_CX( context, 0 );\n    SET_DH( context, 0 );\n\n    for (i = 0; i < MAX_DOS_DRIVES; i++, root[0]++)\n        if (GetDriveTypeW(root) == DRIVE_REMOVABLE) nr_of_drives++;\n    SET_DL( context, nr_of_drives );\n\n    if (drive_nr > 1) { \n        /* invalid drive ? */\n        INT13_SetStatus( context, 0x07 ); /* drive parameter activity failed */\n        return;\n    }\n\n    drive_root[4] = 'A' + drive_nr;\n    h = CreateFileW(drive_root, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,\n                    FILE_FLAG_BACKUP_SEMANTICS, NULL);\n    if (h == INVALID_HANDLE_VALUE ||\n        wine_server_handle_to_fd(h, FILE_READ_DATA, &floppy_fd, NULL))\n    {\n        WARN(\"Can't determine floppy geometry !\\n\");\n        INT13_SetStatus( context, 0x07 ); /* drive parameter activity failed */\n        return;\n    }\n    r = ioctl(floppy_fd, FDGETDRVPRM, &floppy_parm);\n    wine_server_release_fd( h, floppy_fd );\n    CloseHandle(h);\n\n    if(r<0)\n    {\n        INT13_SetStatus( context, 0x07 ); /* drive parameter activity failed */\n        return;\n    }\n\n    SET_BL( context, floppy_parm.cmos );\n\n    /*\n     * CH = low eight bits of max cyl\n     * CL = max sec nr (bits 5-0),\n     *      hi two bits of max cyl (bits 7-6)\n     * DH = max head nr \n     */\n    if(BL_reg( context ) && BL_reg( context ) < 7)\n    {\n        SET_DH( context, 0x01 );\n        SET_CX( context, drive_type_info[BL_reg( context )] );\n    }\n\n    context->Edi = (DWORD)floppy_params[drive_nr];\n\n    if(!context->Edi)\n    {\n        ERR(\"Get floppy params failed for drive %d\\n\", drive_nr);\n        INT13_SetStatus( context, 0x07 ); /* drive parameter activity failed */\n        return;\n    }\n\n    TRACE(\"out [ EAX=%08x EBX=%08x ECX=%08x EDX=%08x EDI=%08x ]\\n\",\n          context->Eax, context->Ebx, context->Ecx, context->Edx, context->Edi);\n\n    INT13_SetStatus( context, 0x00 ); /* success */\n\n    /* FIXME: Word exits quietly if we return with no error. Why? */\n    FIXME(\"Returned ERROR!\\n\");\n    SET_CFLAG( context );\n\n#else\n    INT13_SetStatus( context, 0x01 ); /* invalid function */\n#endif\n}\n\n\n/**********************************************************************\n *         DOSVM_Int13Handler\n *\n * Handler for int 13h (disk I/O).\n */\nvoid WINAPI DOSVM_Int13Handler( CONTEXT *context )\n{\n    TRACE( \"AH=%02x\\n\", AH_reg( context ) );\n\n    switch( AH_reg( context ) )\n    {\n    case 0x00: /* RESET DISK SYSTEM */\n        INT13_SetStatus( context, 0x00 ); /* success */\n        break;\n\n    case 0x01: /* STATUS OF DISK SYSTEM */\n        INT13_SetStatus( context, INT13_last_status );\n        break;\n\n    case 0x02: /* READ SECTORS INTO MEMORY */\n        SET_AL( context, 0 ); /* number of sectors transferred */\n        INT13_SetStatus( context, 0x00 ); /* success */\n        break;\n\n    case 0x03: /* WRITE SECTORS FROM MEMORY */\n        SET_AL( context, 0 ); /* number of sectors transferred */\n        INT13_SetStatus( context, 0x00 ); /* success */\n        break;\n\n    case 0x04: /* VERIFY DISK SECTOR(S) */\n        SET_AL( context, 0 ); /* number of sectors verified */\n        INT13_SetStatus( context, 0x00 ); /* success */\n        break;\n\n    case 0x05: /* FORMAT TRACK */\n    case 0x06: /* FORMAT TRACK AND SET BAD SECTOR FLAGS */\n    case 0x07: /* FORMAT DRIVE STARTING AT GIVEN TRACK  */\n        INT13_SetStatus( context, 0x0c ); /* unsupported track or invalid media */\n        break;\n\n    case 0x08: /* GET DRIVE PARAMETERS  */\n        if (DL_reg( context ) & 0x80) \n        {\n            /* hard disk ? */\n            INT13_SetStatus( context, 0x07 ); /* drive parameter activity failed */\n        }\n        else\n        { \n            /* floppy disk */\n            INT13_ReadFloppyParams( context );\n        }\n        break;\n\n    case 0x09: /* INITIALIZE CONTROLLER WITH DRIVE PARAMETERS */\n    case 0x0a: /* FIXED DISK - READ LONG */\n    case 0x0b: /* FIXED DISK - WRITE LONG */\n    case 0x0c: /* SEEK TO CYLINDER */\n    case 0x0d: /* ALTERNATE RESET HARD DISK */\n        INT13_SetStatus( context, 0x00 ); /* success */\n        break;\n\n    case 0x0e: /* READ SECTOR BUFFER */\n    case 0x0f: /* WRITE SECTOR BUFFER */\n        INT13_SetStatus( context, 0x01 ); /* invalid function */\n        break;\n\n    case 0x10: /* CHECK IF DRIVE READY */\n    case 0x11: /* RECALIBRATE DRIVE */\n        INT13_SetStatus( context, 0x00 ); /* success */\n        break;\n\n    case 0x12: /* CONTROLLER RAM DIAGNOSTIC */\n    case 0x13: /* DRIVE DIAGNOSTIC */\n        INT13_SetStatus( context, 0x01 ); /* invalid function */\n        break;\n\n    case 0x14: /* CONTROLLER INTERNAL DIAGNOSTIC */\n        INT13_SetStatus( context, 0x00 ); /* success */\n        break;\n\n    case 0x15: /* GET DISK TYPE */\n        if (DL_reg( context ) & 0x80) \n        {\n            /* hard disk ? */\n            INT13_SetStatus( context, 0x00 ); /* success */\n            /* type is fixed disk, overwrites status */\n            SET_AH( context, 0x03 );\n        }\n        else\n        { \n            /* floppy disk */\n            INT13_SetStatus( context, 0x00 ); /* success */\n            /* type is floppy with change detection, overwrites status */\n            SET_AH( context, 0x02 );\n        }\n        break;\n\n    case 0x16: /* FLOPPY - CHANGE OF DISK STATUS */\n        INT13_SetStatus( context, 0x00 ); /* success */\n        break;\n\n    case 0x17: /* SET DISK TYPE FOR FORMAT */\n        if (DL_reg( context ) < 4)\n            INT13_SetStatus( context, 0x00 ); /* successful completion */\n        else\n            INT13_SetStatus( context, 0x01 ); /* error */\n        break;\n\n    case 0x18: /* SET MEDIA TYPE FOR FORMAT */\n        if (DL_reg( context ) < 4)\n            INT13_SetStatus( context, 0x00 ); /* success */\n        else\n            INT13_SetStatus( context, 0x01 ); /* error */\n        break;\n\n    case 0x19: /* FIXED DISK - PARK HEADS */\n        INT13_SetStatus( context, 0x00 ); /* success */\n        break;\n\n    default:\n        INT_BARF( context, 0x13 );\n        INT13_SetStatus( context, 0x01 ); /* invalid function */\n    } \n}\n"
  },
  {
    "path": "krnl386/int15.c",
    "content": "/*\n * BIOS interrupt 15h handler\n *\n * Copyright 1997 Jan Willamowius\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdlib.h>\n#include \"dosexe.h\"\n#include \"wine/debug.h\"\n#include \"wine/winbase16.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(int);\n\n\n/**********************************************************************\n *\t    DOSVM_Int15Handler\n *\n * Handler for int 15h\n */\nvoid WINAPI DOSVM_Int15Handler( CONTEXT *context )\n{\n    switch(AH_reg(context))\n    {\n    case 0x4f: /*catch keyboard*/\n        FIXME(\"INT15: intercept keyboard not handled yet\\n\");\n        break;\n    case 0x83: /* start timer*/\n        switch(AL_reg(context))\n        {\n        case 0x00: /* Start Timer*/\n            FIXME(\"INT15: Start Timer not handled yet\\n\");\n            break;\n        case 0x01: /* stop  timer*/\n            FIXME(\"INT15: Stop Timer not handled yet\\n\");\n            break;\n        }\n        break;\n    case 0x84: /* read joystick information */\n        FIXME(\"Read joystick information not implemented\\n\");\n\n        /* FIXME: report status as if no game port exists */\n        switch(DX_reg(context))\n        {\n        case 0x0: /* read joystick switches */\n            SET_AL( context, 0x0 ); /* all switches open */\n            break;\n        case 0x1: /* read joystick position */\n            SET_AX( context, 0x0 );\n            SET_BX( context, 0x0 );\n            SET_CX( context, 0x0 );\n            SET_DX( context, 0x0 );\n            break;\n\tdefault:\n            INT_BARF( context, 0x15 );\n            break;\n        }\n\n        RESET_CFLAG(context);\n        break;\n    case 0x85: /* sysreq - key  used*/\n        FIXME(\"INT15: SysReq - Key not handled yet\\n\");\n        break;\n    case 0x86: /* wait*/\n        FIXME(\"INT15: Wait not correctly handled yet\\n\");\n        if ( AL_reg( context ) != 0x00 ) ERR(\"Invalid Input to Int15 function 0x86h AL != 0x00\\n\");\n        break;\n    case 0x87: /* move memory regions*/\n        FIXME(\"INT15: Move memory regions not implemented\\n\");\n        break;\n\n    case 0x88: /* get size of memory above 1 M */\n        SET_AX( context, 64 );  /* FIXME: are 64K ok? */\n        RESET_CFLAG(context);\n        break;\n    case 0x89: /*  Switch to protected mode*/\n        FIXME(\"INT15: switching to protected mode not supported\\n\");\n        break;\n    case 0x90:/* OS hook  - Device busy*/\n        FIXME(\"INT15: OS hook - device busy\\n\");\n        break;\n    case 0x91: /* OS hook -  Device post*/\n        FIXME(\"INT15: OS hook - device post\\n\");\n        break;\n\n    case 0xc0: /* GET CONFIGURATION */\n        if (ISV86(context))\n        {\n            /* real mode segment */\n            context->SegEs = 0xf000;\n        }\n        else\n        {\n            /* KERNEL.194: __F000H - protected mode selector */\n            FARPROC16 proc = GetProcAddress16( GetModuleHandle16(\"KERNEL\"),\n                                               (LPCSTR)(ULONG_PTR)194 );\n            context->SegEs = LOWORD(proc);\n        }\n        SET_BX( context, 0xe6f5 );\n        SET_AH( context, 0x0 );\n        RESET_CFLAG(context);\n        break;\n\n    case 0xc2:\n\tswitch(AL_reg(context))\n\t{\n\tcase 0x00: /* Enable-Disable Pointing Device (mouse) */\n\t    /* BH = newstate, 00h = disabled 01h = enabled */\n\t    switch(BH_reg(context))\n\t    {\n\t        case 0x00:\n\t    \t    FIXME(\"Disable Pointing Device - not implemented\\n\");\n\t\t    break;\n\t    \tcase 0x01:\n\t    \t    FIXME(\"Enable Pointing Device - not implemented\\n\");\n\t\t    break;\n\t    \tdefault:\n\t\t    INT_BARF( context, 0x15 );\n\t\t    break;\n\t    }\n\t    SET_AH( context, 0x00 ); /* successful */\n\t    break;\n\tcase 0x02: /* Set Sampling Rate */\n\t    /* BH = sampling rate */\n\t    FIXME(\"Set Sampling Rate - not implemented\\n\");\n\t    SET_AH( context, 0x00 ); /* successful */\n\t    break;\n\tcase 0x04: /* Get Pointing Device Type */\n\t    FIXME(\"Get Pointing Device Type - not implemented\\n\");\n            /* FIXME: BH = Device id, What is it supposed to be? */\n\t    SET_BH( context, 0x01 );\n\t    break;\n\tdefault:\n\t    INT_BARF( context, 0x15 );\n\t}\n        break;\n    case 0xc3: /* set carry flag, so BorlandRTM doesn't  assume a Vectra/PS2*/\n\tFIXME(\"INT15: 0xc3\\n\");\n\tSET_AH( context , 0x86 );\n\tbreak;\n    case 0xc4: /*  BIOS POS Program option select  */\n\tFIXME(\"INT15: option 0xc4 not handled!\\n\");\n\tbreak;\n\n    default:\n        INT_BARF( context, 0x15 );\n    }\n}\n"
  },
  {
    "path": "krnl386/int16.c",
    "content": "/*\n * DOS interrupt 16h handler\n *\n * Copyright 1998 Joseph Pranevich\n * Copyright 1999 Ove Kåven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <stdlib.h>\n#include <string.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n\n#include \"dosexe.h\"\n#include \"wincon.h\"\n#include \"wine/debug.h\"\n#include \"windef.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(int);\n\n/**********************************************************************\n *\t    DOSVM_Int16Handler\n *\n * Handler for int 16h (keyboard)\n *\n * NOTE:\n *\n *    KEYB.COM (DOS >3.2) adds functions to this interrupt, they are\n *    not currently listed here.\n */\n\nvoid WINAPI DOSVM_Int16Handler( CONTEXT *context )\n{\n   BIOSDATA *data = NULL;\n   BYTE ascii, scan;\n\n   switch (AH_reg(context)) {\n\n   case 0x00: /* Get Keystroke */\n      /* Returns: AH = Scan code\n                  AL = ASCII character */\n      TRACE(\"Get Keystroke\\n\");\n      DOSVM_Int16ReadChar(&ascii, &scan, context);\n      SET_AL( context, ascii );\n      SET_AH( context, scan );\n      break;\n\n   case 0x01: /* Check for Keystroke */\n      /* Returns: ZF set if no keystroke */\n      /*          AH = Scan code */\n      /*          AL = ASCII character */\n      TRACE(\"Check for Keystroke\\n\");\n      if (!DOSVM_Int16ReadChar(&ascii, &scan, NULL))\n      {\n          SET_ZFLAG(context);\n      }\n      else\n      {\n          SET_AL( context, ascii );\n          SET_AH( context, scan );\n          RESET_ZFLAG(context);\n      }\n      /* don't miss the opportunity to break some tight timing loop in DOS\n       * programs causing 100% CPU usage (by doing a Sleep here) */\n      Sleep(5);\n      break;\n\n   case 0x02: /* Get Shift Flags */\n\n      /* read value from BIOS data segment's keyboard status flags field */\n      data = DOSVM_BiosData();\n      SET_AL( context, data->KbdFlags1 );\n\n      TRACE(\"Get Shift Flags: returning 0x%02x\\n\", AL_reg(context));\n      break;\n\n   case 0x03: /* Set Typematic Rate and Delay */\n      FIXME(\"Set Typematic Rate and Delay - Not Supported\\n\");\n      break;\n      \n   case 0x05:/*simulate  Keystroke*/ \n      FIXME(\"Simulating a keystroke is not supported yet\\n\");\n      break;\n\n   case 0x09: /* Get Keyboard Functionality */\n      FIXME(\"Get Keyboard Functionality - Not Supported\\n\");\n      /* As a temporary measure, say that \"nothing\" is supported... */\n      SET_AL( context, 0 );\n      break;\n\n   case 0x0a: /* Get Keyboard ID */\n      FIXME(\"Get Keyboard ID - Not Supported\\n\");\n      break;\n\n   case 0x10: /* Get Enhanced Keystroke */\n      TRACE(\"Get Enhanced Keystroke - Partially supported\\n\");\n      /* Returns: AH = Scan code\n                  AL = ASCII character */\n      DOSVM_Int16ReadChar(&ascii, &scan, context);\n      SET_AL( context, ascii );\n      SET_AH( context, scan );\n      break;\n\n\n   case 0x11: /* Check for Enhanced Keystroke */\n      /* Returns: ZF set if no keystroke */\n      /*          AH = Scan code */\n      /*          AL = ASCII character */\n      TRACE(\"Check for Enhanced Keystroke - Partially supported\\n\");\n      if (!DOSVM_Int16ReadChar(&ascii, &scan, NULL))\n      {\n          SET_ZFLAG(context);\n      }\n      else\n      {\n          SET_AL( context, ascii );\n          SET_AH( context, scan );\n          RESET_ZFLAG(context);\n      }\n      break;\n\n   case 0x12: /* Get Extended Shift States */\n      FIXME(\"Get Extended Shift States - Not Supported\\n\");\n      break;\n\n   default:\n      FIXME(\"Unknown INT 16 function - 0x%x\\n\", AH_reg(context));\n      break;\n\n   }\n}\n\n/**********************************************************************\n *\t    DOSVM_Int16ReadChar\n *\n * Either peek into keyboard buffer or wait for next keystroke.\n *\n * If waitctx is NULL, return TRUE if buffer had keystrokes and\n * FALSE if buffer is empty. Returned keystroke will be left into buffer.\n * \n * If waitctx is non-NULL, wait until keystrokes are available.\n * Return value will always be TRUE and returned keystroke will be\n * removed from buffer.\n */\nBOOL DOSVM_Int16ReadChar(BYTE *ascii, BYTE *scan, CONTEXT *waitctx)\n{\n    BIOSDATA *data = DOSVM_BiosData();\n    WORD CurOfs = data->NextKbdCharPtr;\n\n    /* check if there's data in buffer */\n    if (waitctx)\n    {\n        /* wait until input is available... */\n        while (CurOfs == data->FirstKbdCharPtr)\n            DOSVM_Wait( waitctx );\n    }\n    else\n    {\n        if (CurOfs == data->FirstKbdCharPtr)\n            return FALSE;\n    }\n\n    /* read from keyboard queue */\n    TRACE( \"(%p,%p,%p) -> %02x %02x\\n\", ascii, scan, waitctx,\n           ((BYTE*)data)[CurOfs], ((BYTE*)data)[CurOfs+1] );\n\n    if (ascii) *ascii = ((BYTE*)data)[CurOfs];\n    if (scan) *scan = ((BYTE*)data)[CurOfs+1];\n\n    if (waitctx) \n    {\n        CurOfs += 2;\n        if (CurOfs >= data->KbdBufferEnd) CurOfs = data->KbdBufferStart;\n        data->NextKbdCharPtr = CurOfs;\n    }\n\n    return TRUE;\n}\n\nBOOL DOSVM_Int16AddChar(BYTE ascii,BYTE scan)\n{\n  BIOSDATA *data = DOSVM_BiosData();\n  WORD CurOfs = data->FirstKbdCharPtr;\n  WORD NextOfs = CurOfs + 2;\n\n  TRACE(\"(%02x,%02x)\\n\",ascii,scan);\n  if (NextOfs >= data->KbdBufferEnd) NextOfs = data->KbdBufferStart;\n  /* check if buffer is full */\n  if (NextOfs == data->NextKbdCharPtr) return FALSE;\n\n  /* okay, insert character in ring buffer */\n  ((BYTE*)data)[CurOfs] = ascii;\n  ((BYTE*)data)[CurOfs+1] = scan;\n\n  data->FirstKbdCharPtr = NextOfs;\n  return TRUE;\n}\n"
  },
  {
    "path": "krnl386/int21.c",
    "content": "/*\n * DOS interrupt 21h handler\n *\n * Copyright 1993, 1994 Erik Bos\n * Copyright 1996 Alexandre Julliard\n * Copyright 1997 Andreas Mohr\n * Copyright 1998 Uwe Bonnes\n * Copyright 1998, 1999 Ove Kaaven\n * Copyright 2003 Thomas Mertes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdarg.h>\n#include <stdio.h>\n#include <stddef.h>\n\n#ifdef HAVE_SYS_STAT_H\n# include <sys/stat.h>\n#endif\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winreg.h\"\n#include \"winternl.h\"\n#include \"wine/winbase16.h\"\n#include \"kernel16_private.h\"\n#include \"dosexe.h\"\n#include \"winerror.h\"\n#include \"winuser.h\"\n#include \"wine/unicode.h\"\n#include \"wine/server.h\"\n#include \"wine/debug.h\"\n#include \"wine/exception.h\"\n\nBOOL    WINAPI VerifyConsoleIoHandle(HANDLE);\n/*\n * Note:\n * - Most of the file related functions are wrong. NT's kernel32\n *   doesn't maintain a per drive current directory, while DOS does. \n *   We should in fact keep track in here of those per drive\n *   directories, and use this info while dealing with partial paths\n *   (drive defined, but only relative paths). This could even be\n *   created as an array of CDS (there should be an entry for that in\n *   the LOL)\n */\n\n/*\n * Forward declarations.\n */\nstatic BOOL INT21_RenameFile( CONTEXT *context );\n\nWINE_DEFAULT_DEBUG_CHANNEL(int21);\n\n\n#include \"pshpack1.h\"\n\n/*\n * Extended Drive Parameter Block.\n * This structure is compatible with standard DOS4+ DPB and \n * extended DOS7 DPB.\n */\ntypedef struct _INT21_DPB {\n    BYTE   drive;                /* 00 drive number (0=A, ...) */\n    BYTE   unit;                 /* 01 unit number within device driver */\n    WORD   sector_bytes;         /* 02 bytes per sector */\n    BYTE   cluster_sectors;      /* 04 highest sector number within a cluster */\n    BYTE   shift;                /* 05 shift count to convert clusters into sectors */\n    WORD   num_reserved;         /* 06 reserved sectors at beginning of drive */\n    BYTE   num_FAT;              /* 08 number of FATs */\n    WORD   num_root_entries;     /* 09 number of root directory entries */\n    WORD   first_data_sector;    /* 0b number of first sector containing user data */\n    WORD   num_clusters1;        /* 0d highest cluster number (number of data clusters + 1) */\n    WORD   sectors_per_FAT;      /* 0f number of sectors per FAT */\n    WORD   first_dir_sector;     /* 11 sector number of first directory sector */\n    SEGPTR driver_header;        /* 13 address of device driver header */\n    BYTE   media_ID;             /* 17 media ID byte */\n    BYTE   access_flag;          /* 18 0x00 if disk accessed, 0xff if not */\n    SEGPTR next;                 /* 19 pointer to next DPB */\n    WORD   search_cluster1;      /* 1d cluster at which to start search for free space */\n    WORD   free_clusters_lo;     /* 1f number of free clusters on drive or 0xffff if unknown */\n    WORD   free_clusters_hi;     /* 21 hiword of clusters_free */\n    WORD   mirroring_flags;      /* 23 active FAT/mirroring flags */\n    WORD   info_sector;          /* 25 sector number of file system info sector or 0xffff for none */\n    WORD   spare_boot_sector;    /* 27 sector number of backup boot sector or 0xffff for none */\n    DWORD  first_cluster_sector; /* 29 sector number of the first cluster */\n    DWORD  num_clusters2;        /* 2d maximum cluster number */\n    DWORD  fat_clusters;         /* 31 number of clusters occupied by FAT */\n    DWORD  root_cluster;         /* 35 cluster number of start of root directory */\n    DWORD  search_cluster2;      /* 39 cluster at which to start searching for free space */\n} INT21_DPB;\n\n\n/*\n * Structure for DOS data that can be accessed directly from applications.\n * Real and protected mode pointers will be returned to this structure so\n * the structure must be correctly packed.\n */\ntypedef struct _INT21_HEAP {\n    WORD uppercase_size;             /* Size of the following table in bytes */\n    BYTE uppercase_table[128];       /* Uppercase equivalents of chars from 0x80 to 0xff. */\n\n    WORD lowercase_size;             /* Size of the following table in bytes */\n    BYTE lowercase_table[256];       /* Lowercase equivalents of chars from 0x00 to 0xff. */\n\n    WORD collating_size;             /* Size of the following table in bytes */\n    BYTE collating_table[256];       /* Values used to sort characters from 0x00 to 0xff. */\n\n    WORD filename_size;              /* Size of the following filename data in bytes */\n    BYTE filename_reserved1;         /* 0x01 for MS-DOS 3.30-6.00 */\n    BYTE filename_lowest;            /* Lowest permissible character value for filename */\n    BYTE filename_highest;           /* Highest permissible character value for filename */\n    BYTE filename_reserved2;         /* 0x00 for MS-DOS 3.30-6.00 */\n    BYTE filename_exclude_first;     /* First illegal character in permissible range */\n    BYTE filename_exclude_last;      /* Last illegal character in permissible range */\n    BYTE filename_reserved3;         /* 0x02 for MS-DOS 3.30-6.00 */\n    BYTE filename_illegal_size;      /* Number of terminators in the following table */\n    BYTE filename_illegal_table[16]; /* Characters which terminate a filename */\n\n    WORD dbcs_size;                  /* Number of valid ranges in the following table */\n    BYTE dbcs_table[16];             /* Start/end bytes for N ranges and 00/00 as terminator */\n\n    BYTE      misc_indos;                    /* Interrupt 21 nesting flag */\n    WORD      misc_segment;                  /* Real mode segment for INT21_HEAP */\n    WORD      misc_selector;                 /* Protected mode selector for INT21_HEAP */\n    INT21_DPB misc_dpb_list[MAX_DOS_DRIVES]; /* Drive parameter blocks for all drives */\n\n} INT21_HEAP;\n\n\nstruct FCB {\n    BYTE  drive_number;\n    CHAR  file_name[8];\n    CHAR  file_extension[3];\n    WORD  current_block_number;\n    WORD  logical_record_size;\n    DWORD file_size;\n    WORD  date_of_last_write;\n    WORD  time_of_last_write;\n    BYTE  file_number;\n    BYTE  attributes;\n    WORD  starting_cluster;\n    WORD  sequence_number;\n    BYTE  file_attributes;\n    BYTE  unused;\n    BYTE  record_within_current_block;\n    BYTE  random_access_record_number[4];\n};\n\n\nstruct XFCB {\n    BYTE  xfcb_signature;\n    BYTE  reserved[5];\n    BYTE  xfcb_file_attribute;\n    BYTE  fcb[37];\n};\n\n/* DTA layout for FindFirst/FindNext */\ntypedef struct\n{\n    BYTE   drive;        /* 00 drive letter */\n    char   mask[11];     /* 01 search template */\n    BYTE   search_attr;  /* 0c search attributes */\n    WORD   count;        /* 0d entry count within directory */\n    WORD   cluster;      /* 0f cluster of parent directory */\n    WCHAR *fullPath;     /* 11 full path (was: reserved) */\n    BYTE   fileattr;     /* 15 file attributes */\n    WORD   filetime;     /* 16 file time */\n    WORD   filedate;     /* 18 file date */\n    DWORD  filesize;     /* 1a file size */\n    char   filename[13]; /* 1e file name + extension */\n} FINDFILE_DTA;\n\n/* FCB layout for FindFirstFCB/FindNextFCB */\ntypedef struct\n{\n    BYTE   drive;                /* 00 drive letter */\n    char   filename[11];         /* 01 filename 8+3 format */\n    int    count;                /* 0c entry count (was: reserved) */\n    WCHAR *fullPath;             /* 10 full path (was: reserved) */\n} FINDFILE_FCB;\n\n/* DOS directory entry for FindFirstFCB/FindNextFCB */\ntypedef struct\n{\n    char   filename[11];         /* 00 filename 8+3 format */\n    BYTE   fileattr;             /* 0b file attributes */\n    BYTE   reserved[10];         /* 0c reserved */\n    WORD   filetime;             /* 16 file time */\n    WORD   filedate;             /* 18 file date */\n    WORD   cluster;              /* 1a file first cluster */\n    DWORD  filesize;             /* 1c file size */\n} DOS_DIRENTRY_LAYOUT;\n\n#include \"poppack.h\"\n\n/* dos file attributes */\n#define FA_NORMAL    0x00        /* Normal file, no attributes */\n#define FA_RDONLY    0x01        /* Read only attribute */\n#define FA_HIDDEN    0x02        /* Hidden file */\n#define FA_SYSTEM    0x04        /* System file */\n#define FA_LABEL     0x08        /* Volume label */\n#define FA_DIRECTORY 0x10        /* Directory */\n#define FA_ARCHIVE   0x20        /* Archive */\n#define FA_UNUSED    0x40        /* Unused */\n\n/* Error codes */\n#define ER_NoNetwork         0x49\n\n/* Error classes */\n#define EC_OutOfResource     0x01\n#define EC_Temporary         0x02\n#define EC_AccessDenied      0x03\n#define EC_InternalError     0x04\n#define EC_HardwareFailure   0x05\n#define EC_SystemFailure     0x06\n#define EC_ProgramError      0x07\n#define EC_NotFound          0x08\n#define EC_MediaError        0x0b\n#define EC_Exists            0x0c\n#define EC_Unknown           0x0d\n\n/* Suggested actions */\n#define SA_Retry             0x01\n#define SA_DelayedRetry      0x02\n#define SA_Prompt            0x03\n#define SA_Abort             0x04\n#define SA_Ignore            0x06\n#define SA_Ask4Retry         0x07\n\n/* Error locus */\n#define EL_Unknown           0x01\n#define EL_Disk              0x02\n#define EL_Network           0x03\n#define EL_Serial            0x04\n#define EL_Memory            0x05\n\n/* BIOS Keyboard Scancodes */\n#define KEY_LEFT        0x4B\n#define KEY_RIGHT       0x4D\n#define KEY_UP          0x48\n#define KEY_DOWN        0x50\n#define KEY_IC          0x52 /* insert char */\n#define KEY_DC          0x53 /* delete char */\n#define KEY_BACKSPACE   0x0E\n#define KEY_HOME        0x47\n#define KEY_END         0x4F\n#define KEY_NPAGE       0x49\n#define KEY_PPAGE       0x51\n\nstatic int brk_flag;\n\nstruct magic_device\n{\n    WCHAR  name[10];\n    HANDLE handle;\n    LARGE_INTEGER index;\n    void (*ioctl_handler)(CONTEXT *);\n};\n\nstatic void INT21_IoctlScsiMgrHandler( CONTEXT * );\nstatic void INT21_IoctlHPScanHandler( CONTEXT * );\n\nBOOL16 WINAPI WIN32_GlobalUnlock16(HGLOBAL16 handle); \n\nstatic struct magic_device magic_devices[] =\n{\n    { {'s','c','s','i','m','g','r','$',0}, NULL, { { 0, 0 } }, INT21_IoctlScsiMgrHandler },\n    { {'e','m','m','x','x','x','x','0',0}, NULL, { { 0, 0 } }, EMS_Ioctl_Handler },\n    { {'h','p','s','c','a','n',0},         NULL, { { 0, 0 } }, INT21_IoctlHPScanHandler },\n};\n\n/* Many calls translate a drive argument like this:\n   drive number (00h = default, 01h = A:, etc)\n   */\n/******************************************************************\n *\t\tINT21_DriveName\n *\n * Many calls translate a drive argument like this:\n * drive number (00h = default, 01h = A:, etc)\n */\nstatic const char *INT21_DriveName(int drive)\n{\n    if (drive > 0) \n    {\n        if (drive <= 26) return wine_dbg_sprintf(\"%c:\", 'A' + drive - 1);\n        else return wine_dbg_sprintf( \"<Bad drive: %d>\", drive);\n    }\n    return \"default\";\n}\n\n/***********************************************************************\n *           INT21_GetCurrentDrive\n *\n * Return current drive using scheme (0=A:, 1=B:, 2=C:, ...) or\n * MAX_DOS_DRIVES on error.\n */\nstatic BYTE INT21_GetCurrentDrive(void)\n{\n    WCHAR current_directory[MAX_PATH];\n\n    if (!GetCurrentDirectoryW( MAX_PATH, current_directory ) ||\n        current_directory[1] != ':')\n    {\n        TRACE( \"Failed to get current drive.\\n\" );\n        return MAX_DOS_DRIVES;\n    }\n\n    return toupperW( current_directory[0] ) - 'A';\n}\n\n\n/***********************************************************************\n *           INT21_MapDrive\n *\n * Convert drive number from scheme (0=default, 1=A:, 2=B:, ...) into\n * scheme (0=A:, 1=B:, 2=C:, ...) or MAX_DOS_DRIVES on error.\n */\nstatic BYTE INT21_MapDrive( BYTE drive )\n{\n    if (drive)\n    {\n        WCHAR drivespec[] = {'A', ':', 0};\n        UINT  drivetype;\n\n        drivespec[0] += drive - 1;\n        drivetype = GetDriveTypeW( drivespec );\n\n        if (drivetype == DRIVE_UNKNOWN || drivetype == DRIVE_NO_ROOT_DIR)\n            return MAX_DOS_DRIVES;\n\n        return drive - 1;\n    }\n\n    return INT21_GetCurrentDrive();\n}\n\n\n/***********************************************************************\n *           INT21_SetCurrentDrive\n *\n * Set current drive. Uses scheme (0=A:, 1=B:, 2=C:, ...).\n */\nstatic void INT21_SetCurrentDrive( BYTE drive )\n{\n    WCHAR drivespec[] = {'A', ':', 0};\n\n    drivespec[0] += drive;\n\n    if (!SetCurrentDirectoryW( drivespec ))\n        TRACE( \"Failed to set current drive.\\n\" );\n}\n\n\n/***********************************************************************\n *           INT21_ReadChar\n *\n * Reads a character from the standard input.\n * Extended keycodes will be returned as two separate characters.\n */\nstatic BOOL INT21_ReadChar( BYTE *input, CONTEXT *waitctx )\n{\n    static BYTE pending_scan = 0;\n\n    if (pending_scan)\n    {\n        if (input)\n            *input = pending_scan;\n        if (waitctx)\n            pending_scan = 0;\n        return TRUE;\n    }\n    else\n    {\n        BYTE ascii;\n        BYTE scan;\n        if (!DOSVM_Int16ReadChar( &ascii, &scan, waitctx ))\n            return FALSE;\n\n        if (input)\n            *input = ascii;\n        if (waitctx && !ascii)\n            pending_scan = scan;\n        return TRUE;\n    }\n}\n\n\n/***********************************************************************\n *           INT21_GetSystemCountryCode\n *\n * Return DOS country code for default system locale.\n */\nstatic WORD INT21_GetSystemCountryCode( void )\n{\n    LCID locale = LOCALE_USER_DEFAULT;\n    char LCdata[80];\n\n    GetLocaleInfoA(locale, LOCALE_ICOUNTRY, LCdata, sizeof(LCdata));\n    return atoi(LCdata);\n}\n\n\n#pragma pack(1)\ntypedef struct {\n    UINT16 date_format;\n    char currency_symbol[5];\n    char thou_sep[2];\n    char dec_sep[2];\n    char date_sep[2];\n    char time_sep[2];\n    char currency_format;\n    char currency_dec_digits;\n    char time_format;\n    DWORD case_map;\n    char list_sep[2];\n    char reserved[10];\n} country_info_t;\n#pragma pack()\n/***********************************************************************\n *           INT21_FillCountryInformation\n *\n * Fill 34-byte buffer with country information data using\n * default system locale.\n */\nstatic int INT21_FillCountryInformation( BYTE *dst, int size )\n{\n    BYTE buffer[0x22] = { 0 };\n    static DWORD casemap;\n    LCID locale = LOCALE_USER_DEFAULT;\n    char LCdata[80];\n    country_info_t *ci = (country_info_t*)buffer;\n    if (!casemap)\n    {\n        /*\n        in\n            AL: char (80h <= AL)\n        out\n            AL: upper case char (80h <= AL)\n        */\n        static char casemap_routine[] =\n        {\n            /* FIXME: Get from locale */\n            0xcb /* retf */\n        };\n        WORD seg;\n        LPVOID ptr = DOSMEM_AllocBlock(sizeof(casemap_routine), &seg);\n        memcpy(ptr, casemap_routine, sizeof(casemap_routine));\n        casemap = MAKESEGPTR(seg, 0);\n    }\n\n    GetLocaleInfoA(locale, LOCALE_ICURRDIGITS, LCdata, sizeof(LCdata));\n    ci->currency_dec_digits = atoi(LCdata);\n    GetLocaleInfoA(locale, LOCALE_ICURRENCY, LCdata, sizeof(LCdata));\n    ci->currency_format = *LCdata - '0';\n    GetLocaleInfoA(locale, LOCALE_IDATE, LCdata, sizeof(LCdata));\n    ci->date_format = *LCdata - '0';\n    GetLocaleInfoA(locale, LOCALE_SCURRENCY, LCdata, sizeof(LCdata));\n    memcpy(&ci->currency_symbol, LCdata, 4);\n    GetLocaleInfoA(locale, LOCALE_SDATE, LCdata, sizeof(LCdata));\n    *ci->date_sep = *LCdata;\n    GetLocaleInfoA(locale, LOCALE_SDECIMAL, LCdata, sizeof(LCdata));\n    *ci->dec_sep = *LCdata;\n    GetLocaleInfoA(locale, LOCALE_SLIST, LCdata, sizeof(LCdata));\n    *ci->list_sep = *LCdata;\n    GetLocaleInfoA(locale, LOCALE_STHOUSAND, LCdata, sizeof(LCdata));\n    *ci->thou_sep = *LCdata;\n    GetLocaleInfoA(locale, LOCALE_STIME, LCdata, sizeof(LCdata));\n    *ci->time_sep = *LCdata;\n    GetLocaleInfoA(locale, LOCALE_STIMEFORMAT, LCdata, sizeof(LCdata));\n    if (strchr(LCdata, 'H') != NULL) {\n        ci->time_format = 1;\n    }\n    ci->case_map = casemap;\n    /* 24 - BYTE[10]: Reserved */\n    memset( buffer + 24, 0, 10 );\n    memcpy( dst, buffer, size );\n}\n\n\nvoid msdos_dbcs_table_update(LPBYTE tbl)\n{\n    #define DBCS_SIZE 0x12\n    int active_code_page = GetConsoleCP();\n    UINT8 dbcs_data[DBCS_SIZE];\n    memset(dbcs_data, 0, sizeof(dbcs_data));\n\n    CPINFO info;\n    GetCPInfo(active_code_page, &info);\n\n    if (info.MaxCharSize != 1) {\n        for (int i = 0;; i += 2) {\n            UINT8 lo = info.LeadByte[i + 0];\n            UINT8 hi = info.LeadByte[i + 1];\n            dbcs_data[2 + i + 0] = lo;\n            dbcs_data[2 + i + 1] = hi;\n            if (lo == 0 && hi == 0) {\n                dbcs_data[0] = i + 2;\n                break;\n            }\n        }\n    }\n    else {\n        dbcs_data[0] = 2;\t// ???\n    }\n    memcpy(tbl, dbcs_data, sizeof(dbcs_data));\n}\n/***********************************************************************\n *           INT21_FillHeap\n *\n * Initialize DOS heap.\n *\n * Filename Terminator Table of w2k DE NTVDM:\n * 16 00 01 00 FF 00 00 20-02 0E 2E 22 2F 5C 5B 5D  ....... ...\"/\\[]\n * 3A 7C 3C 3E 2B 3D 3B 2C-00                       :|<>+=;,\n */\nstatic void INT21_FillHeap( INT21_HEAP *heap )\n{\n    static const char terminators[] = \".\\\"/\\\\[]:|<>+=;,\";\n    int i;\n\n    /*\n     * Uppercase table.\n     */\n    heap->uppercase_size = 128;\n    for (i = 0; i < 128; i++) \n        heap->uppercase_table[i] = toupper( 128 + i );\n\n    /*\n     * Lowercase table.\n     */\n    heap->lowercase_size = 256;\n    for (i = 0; i < 256; i++) \n        heap->lowercase_table[i] = tolower( i );\n    \n    /*\n     * Collating table.\n     */\n    heap->collating_size = 256;\n    for (i = 0; i < 256; i++) \n        heap->collating_table[i] = i;\n\n    /*\n     * Filename table.\n     */\n    heap->filename_size = 8 + strlen(terminators);\n    heap->filename_illegal_size = strlen(terminators);\n    memcpy( heap->filename_illegal_table, terminators, heap->filename_illegal_size );\n\n    heap->filename_reserved1 = 0x01;\n    heap->filename_lowest = 0x00;\n    heap->filename_highest = 0xff;\n    heap->filename_reserved2 = 0x00;    \n    heap->filename_exclude_first = 0x00;\n    heap->filename_exclude_last = 0x20;\n    heap->filename_reserved3 = 0x02;\n\n    /*\n     * DBCS lead byte table. This table is empty.\n     */\n    msdos_dbcs_table_update( &heap->dbcs_size );\n\n    /*\n     * Initialize InDos flag.\n     */\n    heap->misc_indos = 0;\n\n    /*\n     * FIXME: Should drive parameter blocks (DPB) be\n     *        initialized here and linked to DOS LOL?\n     */\n}\n\n\n/***********************************************************************\n *           INT21_GetHeapPointer\n *\n * Get pointer for DOS heap (INT21_HEAP).\n * Creates and initializes heap on first call.\n */\nstatic INT21_HEAP *INT21_GetHeapPointer( void )\n{\n    static INT21_HEAP *heap_pointer = NULL;\n\n    if (!heap_pointer)\n    {\n        WORD heap_segment;\n        WORD heap_selector;\n\n        heap_pointer = DOSVM_AllocDataUMB( sizeof(INT21_HEAP), \n                                           &heap_segment,\n                                           &heap_selector );\n\n        heap_pointer->misc_segment  = heap_segment;\n        heap_pointer->misc_selector = heap_selector;\n        INT21_FillHeap( heap_pointer );\n    }\n\n    return heap_pointer;\n}\n\n\n/***********************************************************************\n *           INT21_GetHeapSelector\n *\n * Get segment/selector for DOS heap (INT21_HEAP).\n * Creates and initializes heap on first call.\n */\nstatic WORD INT21_GetHeapSelector( CONTEXT *context )\n{\n    INT21_HEAP *heap = INT21_GetHeapPointer();\n\n    if (!ISV86(context) && DOSVM_IsWin16())\n        return heap->misc_selector;\n    else\n        return heap->misc_segment;\n}\n\n\n/***********************************************************************\n *           INT21_FillDrivePB\n *\n * Fill DOS heap drive parameter block for the specified drive.\n * Return TRUE if drive was valid and there were\n * no errors while reading drive information.\n */\nstatic BOOL INT21_FillDrivePB( BYTE drive )\n{\n    WCHAR       drivespec[] = {'A', ':', 0};\n    INT21_HEAP *heap = INT21_GetHeapPointer();\n    INT21_DPB  *dpb;\n    UINT        drivetype;\n    DWORD       cluster_sectors;\n    DWORD       sector_bytes;\n    DWORD       free_clusters;\n    DWORD       total_clusters;\n\n    if (drive >= MAX_DOS_DRIVES)\n        return FALSE;\n\n    dpb = &heap->misc_dpb_list[drive];\n    drivespec[0] += drive;\n    drivetype = GetDriveTypeW( drivespec );\n\n    /*\n     * FIXME: Does this check work correctly with floppy/cdrom drives?\n     */\n    if (drivetype == DRIVE_NO_ROOT_DIR || drivetype == DRIVE_UNKNOWN)\n        return FALSE;\n\n    /*\n     * FIXME: Does this check work correctly with floppy/cdrom drives?\n     */\n    if (!GetDiskFreeSpaceW( drivespec, &cluster_sectors, &sector_bytes,\n                            &free_clusters, &total_clusters ))\n        return FALSE;\n\n    /*\n     * FIXME: Most of the values listed below are incorrect.\n     *        All values should be validated.\n     */\n \n    dpb->drive           = drive;\n    dpb->unit            = 0;\n    dpb->sector_bytes    = sector_bytes;\n    dpb->cluster_sectors = cluster_sectors - 1;\n\n    dpb->shift = 0;\n    while (cluster_sectors > 1)\n    {\n        cluster_sectors /= 2;\n        dpb->shift++;\n    }\n\n    dpb->num_reserved         = 0;\n    dpb->num_FAT              = (drivetype == DRIVE_FIXED) ? 2 : 1;\n    dpb->num_root_entries     = 2;\n    dpb->first_data_sector    = 2;\n    dpb->num_clusters1        = total_clusters;\n    dpb->sectors_per_FAT      = 1;\n    dpb->first_dir_sector     = 1;\n    dpb->driver_header        = 0;\n    dpb->media_ID             = (drivetype == DRIVE_FIXED) ? 0xF8 : 0xF0;\n    dpb->access_flag          = 0;\n    dpb->next                 = 0;\n    dpb->search_cluster1      = 0;\n    dpb->free_clusters_lo     = LOWORD(free_clusters);\n    dpb->free_clusters_hi     = HIWORD(free_clusters);\n    dpb->mirroring_flags      = 0;\n    dpb->info_sector          = 0xffff;\n    dpb->spare_boot_sector    = 0xffff;\n    dpb->first_cluster_sector = 0;\n    dpb->num_clusters2        = total_clusters;\n    dpb->fat_clusters         = 32;\n    dpb->root_cluster         = 0;\n    dpb->search_cluster2      = 0;\n\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           INT21_GetCurrentDirectory\n *\n * Handler for:\n * - function 0x47\n * - subfunction 0x47 of function 0x71\n */\nstatic BOOL INT21_GetCurrentDirectory( CONTEXT *context, BOOL islong )\n{\n    char  *buffer = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Esi);\n    BYTE   drive = INT21_MapDrive( DL_reg(context) );\n    WCHAR  pathW[MAX_PATH];\n    char   pathA[MAX_PATH];\n    WCHAR *ptr = pathW;\n    size_t len;\n\n    TRACE( \"drive %d\\n\", DL_reg(context) );\n\n    if (drive == MAX_DOS_DRIVES)\n    {\n        SetLastError(ERROR_INVALID_DRIVE);\n        return FALSE;\n    }\n    \n    /*\n     * Grab current directory.\n     */\n\n    if (!GetCurrentDirectoryW( MAX_PATH, pathW )) return FALSE;\n\n    if (toupperW(pathW[0]) - 'A' != drive || pathW[1] != ':')\n    {\n        /* cwd is not on the requested drive, get the environment string instead */\n\n        WCHAR env_var[4];\n\n        env_var[0] = '=';\n        env_var[1] = 'A' + drive;\n        env_var[2] = ':';\n        env_var[3] = 0;\n        if (!GetEnvironmentVariableW( env_var, pathW, MAX_PATH ))\n        {\n            pathW[0] = 'A' + drive;\n            pathW[1] = ':';\n            pathW[2] = '\\\\';\n            pathW[3] = '\\0';\n        }\n    }\n\n    /*\n     * Convert into short format.\n     */\n\n    if (!islong)\n    {\n        DWORD result = GetShortPathNameW( pathW, pathW, MAX_PATH );\n        if (!result)\n            return FALSE;\n        if (result > MAX_PATH)\n        {\n            WARN( \"Short path too long!\\n\" );\n            SetLastError(ERROR_NETWORK_BUSY); /* Internal Wine error. */\n            return FALSE;\n        }\n    }\n\n    /*\n     * The returned pathname does not include \n     * the drive letter, colon or leading backslash.\n     */\n\n    if (ptr[0] == '\\\\')\n    {\n        /*\n         * FIXME: We should probably just strip host part from name...\n         */\n        FIXME( \"UNC names are not supported.\\n\" );\n        SetLastError(ERROR_NETWORK_BUSY); /* Internal Wine error. */\n        return FALSE;\n    }\n    else if (!ptr[0] || ptr[1] != ':' || ptr[2] != '\\\\')\n    {\n        WARN( \"Path is neither UNC nor DOS path: %s\\n\",\n              wine_dbgstr_w(ptr) );\n        SetLastError(ERROR_NETWORK_BUSY); /* Internal Wine error. */\n        return FALSE;\n    }\n    else\n    {\n        /* Remove drive letter, colon and leading backslash. */\n        ptr += 3;\n    }\n\n    /*\n     * Convert into OEM string.\n     */\n    \n    if (!WideCharToMultiByte(CP_OEMCP, 0, ptr, -1, pathA, \n                             MAX_PATH, NULL, NULL))\n    {\n        WARN( \"Cannot convert path!\\n\" );\n        SetLastError(ERROR_NETWORK_BUSY); /* Internal Wine error. */\n        return FALSE;\n    }\n\n    /*\n     * Success.\n     */\n\n    if (!islong)\n    {\n        /* Undocumented success code. */\n        SET_AX( context, 0x0100 );\n        \n        /* Truncate buffer to 64 bytes. */\n        pathA[63] = 0;\n    }\n\n    TRACE( \"%c:=%s\\n\", 'A' + drive, pathA );\n\n    strcpy( buffer, pathA );\n    while (*buffer) { *buffer = toupper(*buffer); buffer++; }\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           INT21_SetCurrentDirectory\n *\n * Handler for:\n * - function 0x3b\n * - subfunction 0x3b of function 0x71\n */\nstatic BOOL INT21_SetCurrentDirectory( CONTEXT *context )\n{\n    WCHAR dirW1[MAX_PATH];\n    WCHAR dirW[MAX_PATH];\n    WCHAR env_var[4];\n    DWORD attr;\n    char *dirA = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx);\n    BYTE  drive = INT21_GetCurrentDrive();\n    BOOL  result;\n\n    TRACE( \"SET CURRENT DIRECTORY %s\\n\", dirA );\n\n    MultiByteToWideChar(CP_OEMCP, 0, dirA, -1, dirW1, MAX_PATH);\n    if (!GetFullPathNameW( dirW1, MAX_PATH, dirW, NULL )) return FALSE;\n\n    attr = GetFileAttributesW( dirW );\n    if (attr == INVALID_FILE_ATTRIBUTES || !(attr & FILE_ATTRIBUTE_DIRECTORY))\n    {\n        SetLastError( ERROR_PATH_NOT_FOUND );\n        return FALSE;\n    }\n\n    env_var[0] = '=';\n    env_var[1] = dirW[0];\n    env_var[2] = ':';\n    env_var[3] = 0;\n    result = SetEnvironmentVariableW( env_var, dirW );\n\n    /* only set current directory if on the current drive */\n    if (result && (toupperW(dirW[0]) - 'A' == drive)) result = SetCurrentDirectoryW( dirW );\n\n    return result;\n}\n\n/***********************************************************************\n *           INT21_CreateMagicDeviceHandle\n *\n * Create a dummy file handle for a \"magic\" device.\n */\nstatic HANDLE INT21_CreateMagicDeviceHandle( LPCWSTR name )\n{\n    static const WCHAR prefixW[] = {'\\\\','?','?','\\\\','u','n','i','x'};\n    const char *dir = wine_get_server_dir();\n    int len;\n    HANDLE ret;\n    NTSTATUS status;\n    OBJECT_ATTRIBUTES attr;\n    UNICODE_STRING nameW;\n    IO_STATUS_BLOCK io;\n\n    len = MultiByteToWideChar( CP_UNIXCP, 0, dir, -1, NULL, 0 );\n    nameW.Length = sizeof(prefixW) + (len + strlenW( name )) * sizeof(WCHAR);\n    nameW.MaximumLength = nameW.Length + sizeof(WCHAR);\n    if (!(nameW.Buffer = HeapAlloc( GetProcessHeap(), 0, nameW.MaximumLength )))\n    {\n        SetLastError( ERROR_NOT_ENOUGH_MEMORY );\n        return 0;\n    }\n    memcpy( nameW.Buffer, prefixW, sizeof(prefixW) );\n    MultiByteToWideChar( CP_UNIXCP, 0, dir, -1, nameW.Buffer + ARRAY_SIZE(prefixW), len );\n    len += ARRAY_SIZE(prefixW);\n    nameW.Buffer[len-1] = '/';\n    strcpyW( nameW.Buffer + len, name );\n\n    attr.Length = sizeof(attr);\n    attr.RootDirectory = 0;\n    attr.Attributes = 0;\n    attr.ObjectName = &nameW;\n    attr.SecurityDescriptor = NULL;\n    attr.SecurityQualityOfService = NULL;\n\n    status = NtCreateFile( &ret, GENERIC_READ|GENERIC_WRITE|SYNCHRONIZE, &attr, &io, NULL, 0,\n                           FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OPEN_IF,\n                           FILE_SYNCHRONOUS_IO_ALERT, NULL, 0 );\n    if (status)\n    {\n        ret = 0;\n        SetLastError( RtlNtStatusToDosError(status) );\n    }\n    RtlFreeUnicodeString( &nameW );\n    return ret;\n}\n\n\n/***********************************************************************\n *           INT21_OpenMagicDevice\n *\n * Open a file handle for \"magic\" devices like EMMXXXX0.\n */\nstatic HANDLE INT21_OpenMagicDevice( LPCWSTR name, DWORD access )\n{\n    unsigned int i;\n    const WCHAR *p;\n    HANDLE handle;\n\n    if (name[0] && (name[1] == ':')) name += 2;\n    if ((p = strrchrW( name, '/' ))) name = p + 1;\n    if ((p = strrchrW( name, '\\\\' ))) name = p + 1;\n\n    for (i = 0; i < ARRAY_SIZE(magic_devices); i++)\n    {\n        int len = strlenW( magic_devices[i].name );\n        if (!strncmpiW( magic_devices[i].name, name, len ) &&\n            (!name[len] || name[len] == '.' || name[len] == ':')) break;\n    }\n    if (i == ARRAY_SIZE(magic_devices)) return 0;\n\n    if (!magic_devices[i].handle) /* need to open it */\n    {\n        IO_STATUS_BLOCK io;\n        FILE_INTERNAL_INFORMATION info;\n\n        if (!(handle = INT21_CreateMagicDeviceHandle( magic_devices[i].name ))) return 0;\n\n        NtQueryInformationFile( handle, &io, &info, sizeof(info), FileInternalInformation );\n        magic_devices[i].index = info.IndexNumber;\n        magic_devices[i].handle = handle;\n    }\n    if (!DuplicateHandle( GetCurrentProcess(), magic_devices[i].handle,\n                          GetCurrentProcess(), &handle, access, FALSE, 0 )) handle = 0;\n    return handle;\n}\n\n\n/***********************************************************************\n *           INT21_CreateFile\n *\n * Handler for:\n * - function 0x3c\n * - function 0x3d\n * - function 0x5b\n * - function 0x6c\n * - subfunction 0x6c of function 0x71\n */\nstatic BOOL INT21_CreateFile( CONTEXT *context,\n                              DWORD      pathSegOff,\n                              BOOL       returnStatus,\n                              WORD       dosAccessShare,\n                              BYTE       dosAction )\n{\n    WORD   dosStatus;\n    char  *pathA = CTX_SEG_OFF_TO_LIN(context, context->SegDs, pathSegOff);\n    WCHAR  pathW[MAX_PATH];   \n    DWORD  winAccess;\n    DWORD  winAttributes;\n    HANDLE winHandle;\n    DWORD  winMode;\n    DWORD  winSharing;\n    char   redir_buf[MAX_PATH];\n    BOOL   retry = FALSE;\n\n    TRACE( \"CreateFile called: function=%02x, action=%02x, access/share=%04x, \"\n           \"create flags=%04x, file=%s.\\n\",\n           AH_reg(context), dosAction, dosAccessShare, CX_reg(context), pathA );\n\n    /*\n     * Application tried to create/open a file whose name \n     * ends with a backslash. This is not allowed.\n     *\n     * FIXME: This needs to be validated, especially the return value.\n     */\n    if (pathA[strlen(pathA) - 1] == '/')\n    {\n        SetLastError( ERROR_FILE_NOT_FOUND );\n        return FALSE;\n    }\n\n    /*\n     * Convert DOS action flags into Win32 creation disposition parameter.\n     */ \n    switch(dosAction)\n    {\n    case 0x01:\n        winMode = OPEN_EXISTING;\n        break;\n    case 0x02:\n        winMode = TRUNCATE_EXISTING;\n        break;\n    case 0x10:\n        winMode = CREATE_NEW;\n        break;\n    case 0x11:\n        winMode = OPEN_ALWAYS;\n        break;\n    case 0x12:\n        winMode = CREATE_ALWAYS;\n        break;\n    default:\n        SetLastError( ERROR_INVALID_PARAMETER );\n        return FALSE;\n    }\n\n    /*\n     * Convert DOS access/share flags into Win32 desired access parameter.\n     */ \n    switch(dosAccessShare & 0x07)\n    {\n    case OF_READ:\n        winAccess = GENERIC_READ;\n        break;\n    case OF_WRITE:\n        winAccess = GENERIC_WRITE;\n        break;\n    case OF_READWRITE:\n        winAccess = GENERIC_READ | GENERIC_WRITE;\n        break;\n    case 0x04:\n        /*\n         * Read-only, do not modify file's last-access time (DOS7).\n         *\n         * FIXME: How to prevent modification of last-access time?\n         */\n        winAccess = GENERIC_READ;\n        break;\n    default:\n        winAccess = 0;\n    }\n\n    /*\n     * Convert DOS access/share flags into Win32 share mode parameter.\n     */ \n    switch(dosAccessShare & 0x70)\n    {\n    case OF_SHARE_EXCLUSIVE:  \n        winSharing = 0; \n        break;\n    case OF_SHARE_DENY_WRITE: \n        winSharing = FILE_SHARE_READ; \n        break;\n    case OF_SHARE_DENY_READ:  \n        winSharing = FILE_SHARE_WRITE; \n        break;\n    case OF_SHARE_DENY_NONE:\n    case OF_SHARE_COMPAT:\n    default:\n        winSharing = FILE_SHARE_READ | FILE_SHARE_WRITE;\n    }\n\n    /*\n     * FIXME: Bit (dosAccessShare & 0x80) represents inheritance.\n     *        What to do with this bit?\n     * FIXME: Bits in the high byte of dosAccessShare are not supported.\n     *        See both function 0x6c and subfunction 0x6c of function 0x71 for\n     *        definition of these bits.\n     */\n\n    /*\n     * Convert DOS create attributes into Win32 flags and attributes parameter.\n     */\n    if (winMode == OPEN_EXISTING || winMode == TRUNCATE_EXISTING)\n    {\n        winAttributes = 0;\n    }\n    else\n    {        \n        WORD dosAttributes = CX_reg(context);\n\n        if (dosAttributes & FA_LABEL)\n        {\n            /*\n             * Application tried to create volume label entry.\n             * This is difficult to support so we do not allow it.\n             *\n             * FIXME: If volume does not already have a label, \n             *        this function is supposed to succeed.\n             */\n            SetLastError( ERROR_ACCESS_DENIED );\n            return TRUE;\n        }\n\n        winAttributes = dosAttributes & \n            (FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN | \n             FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_ARCHIVE);\n    }\n\n\tpathA = RedirectSystemDir(pathA, redir_buf, MAX_PATH);\n    /*\n     * Open the file.\n     */\n    if (winMode == CREATE_NEW || winMode == CREATE_ALWAYS)\n    {\n        pathA = RedirectDriveRoot(pathA, redir_buf, MAX_PATH, FALSE);\n    }\n    retry:\n    MultiByteToWideChar(CP_OEMCP, 0, pathA, -1, pathW, MAX_PATH);\n\n    if (dosAction == 0x12)\n        DeleteFileW(pathW);\n\n    if ((winHandle = INT21_OpenMagicDevice( pathW, winAccess )))\n    {\n        dosStatus = 1;\n    }\n    else\n    {\n        winHandle = CreateFileW( pathW, winAccess, winSharing, NULL,\n                                 winMode, winAttributes, 0 );\n        /* DOS allows opening files on a CDROM R/W */\n        if( winHandle == INVALID_HANDLE_VALUE &&\n                (GetLastError() == ERROR_WRITE_PROTECT ||\n                 GetLastError() == ERROR_ACCESS_DENIED)) {\n            winHandle = CreateFileW( pathW, winAccess & ~GENERIC_WRITE,\n                    winSharing, NULL, winMode, winAttributes, 0 );\n        }\n\n        if (winHandle == INVALID_HANDLE_VALUE)\n        {\n            if (retry)\n                return FALSE;\n            pathA = RedirectDriveRoot(pathA, redir_buf, MAX_PATH, FALSE);\n            retry = TRUE;\n            goto retry;\n        }\n\n        /*\n         * Determine DOS file status.\n         *\n         * 1 = file opened\n         * 2 = file created\n         * 3 = file replaced\n         */\n        switch(winMode)\n        {\n        case OPEN_EXISTING:\n            dosStatus = 1;\n            break;\n        case TRUNCATE_EXISTING:\n            dosStatus = 3;\n            break;\n        case CREATE_NEW:\n            dosStatus = 2;\n            break;\n        case OPEN_ALWAYS:\n            dosStatus = (GetLastError() == ERROR_ALREADY_EXISTS) ? 1 : 2;\n            break;\n        case CREATE_ALWAYS:\n            dosStatus = (GetLastError() == ERROR_ALREADY_EXISTS) ? 3 : 2;\n            break;\n        default:\n            dosStatus = 0;\n        }\n    }\n\n    /*\n     * Return DOS file handle and DOS status.\n     */\n    SET_AX( context, Win32HandleToDosFileHandle(winHandle) );\n\n    if (returnStatus)\n        SET_CX( context, dosStatus );\n\n    TRACE( \"CreateFile finished: handle=%d, status=%d.\\n\", \n           AX_reg(context), dosStatus );\n\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           INT21_BufferedInput\n *\n * Handler for function 0x0a and reading from console using\n * function 0x3f.\n *\n * Reads a string of characters from standard input until\n * enter key is pressed. Returns either number of characters \n * read from console including terminating CR or \n * zero if capacity was zero.\n */\nstatic WORD INT21_BufferedInput( CONTEXT *context, BYTE *ptr, WORD capacity )\n{\n    BYTE length = 0;\n\n    /*\n     * Return immediately if capacity is zero.\n     */\n    if (capacity == 0)\n        return 0;\n\n    while(TRUE)\n    {\n        BYTE ascii;\n        BYTE scan;\n\n        DOSVM_Int16ReadChar( &ascii, &scan, context );\n\n        if (ascii == '\\r' || ascii == '\\n')\n        {\n            ptr[length] = '\\r';\n            return length + 1;\n        }\n\n        /*\n         * DOS handles only backspace and KEY_LEFT\n         *        perhaps we should do more\n         */\n        if (ascii == '\\b' || scan == KEY_LEFT)\n        {\n            if (length==0) continue;\n            DOSVM_PutChar( '\\b' );\n            length--;\n            continue;\n        }\n\n        /*\n         * If the buffer becomes filled to within one byte of\n         * capacity, DOS rejects all further characters up to,\n         * but not including, the terminating carriage return.\n         */\n        if (ascii != 0 && length < capacity-1)\n        {\n            DOSVM_PutChar( ascii );\n            ptr[length] = ascii;\n            length++;\n        }\n    }\n}\n\n\n/***********************************************************************\n *           INT21_GetCurrentDTA\n */\nstatic BYTE *INT21_GetCurrentDTA( CONTEXT *context )\n{\n    TDB *pTask = GlobalLock16(GetCurrentTask());\n\n    /* FIXME: This assumes DTA was set correctly! */\n    return CTX_SEG_OFF_TO_LIN( context, SELECTOROF(pTask->dta),\n                               OFFSETOF(pTask->dta) );\n}\n\n\n/***********************************************************************\n *           INT21_OpenFileUsingFCB\n *\n * Handler for function 0x0f.\n *\n * PARAMS\n *  DX:DX [I/O] File control block (FCB or XFCB) of unopened file\n *\n * RETURNS (in AL)\n *  0x00: successful\n *  0xff: failed\n *\n * NOTES\n *  Opens a FCB file for read/write in compatibility mode. Upon calling\n *  the FCB must have the drive_number, file_name, and file_extension\n *  fields filled and all other bytes cleared.\n */\nstatic void INT21_OpenFileUsingFCB( CONTEXT *context )\n{\n    struct FCB *fcb;\n    struct XFCB *xfcb;\n    char file_path[16];\n    char *pos;\n    HANDLE handle;\n    HFILE16 hfile16;\n    BY_HANDLE_FILE_INFORMATION info;\n    BYTE AL_result;\n\n    fcb = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx);\n    if (fcb->drive_number == 0xff) {\n        xfcb = (struct XFCB *) fcb;\n        fcb = (struct FCB *) xfcb->fcb;\n    } /* if */\n\n    AL_result = 0;\n    file_path[0] = 'A' + INT21_MapDrive( fcb->drive_number );\n\n    if (AL_result == 0) {\n        file_path[1] = ':';\n        pos = &file_path[2];\n        memcpy(pos, fcb->file_name, 8);\n        pos[8] = ' ';\n        pos[9] = '\\0';\n        pos = strchr(pos, ' ');\n        *pos = '.';\n        pos++;\n        memcpy(pos, fcb->file_extension, 3);\n        pos[3] = ' ';\n        pos[4] = '\\0';\n        pos = strchr(pos, ' ');\n        *pos = '\\0';\n\n        handle = (HANDLE) _lopen(file_path, OF_READWRITE);\n        if (handle == INVALID_HANDLE_VALUE) {\n            TRACE(\"_lopen(\\\"%s\\\") failed: INVALID_HANDLE_VALUE\\n\", file_path);\n            AL_result = 0xff; /* failed */\n        } else {\n            hfile16 = Win32HandleToDosFileHandle(handle);\n            if (hfile16 == HFILE_ERROR16) {\n                TRACE(\"Win32HandleToDosFileHandle(%p) failed: HFILE_ERROR\\n\", handle);\n                CloseHandle(handle);\n                AL_result = 0xff; /* failed */\n            } else if (hfile16 > 255) {\n                TRACE(\"hfile16 (=%d) larger than 255 for \\\"%s\\\"\\n\", hfile16, file_path);\n                _lclose16(hfile16);\n                AL_result = 0xff; /* failed */\n            } else {\n                if (!GetFileInformationByHandle(handle, &info)) {\n                    TRACE(\"GetFileInformationByHandle(%d, %p) for \\\"%s\\\" failed\\n\",\n                          hfile16, handle, file_path);\n                    _lclose16(hfile16);\n                    AL_result = 0xff; /* failed */\n                } else {\n                    fcb->drive_number = file_path[0] - 'A' + 1;\n                    fcb->current_block_number = 0;\n                    fcb->logical_record_size = 128;\n                    fcb->file_size = info.nFileSizeLow;\n                    FileTimeToDosDateTime(&info.ftLastWriteTime,\n                        &fcb->date_of_last_write, &fcb->time_of_last_write);\n                    fcb->file_number = hfile16;\n                    fcb->attributes = 0xc2;\n                    fcb->starting_cluster = 0; /* don't know correct init value */\n                    fcb->sequence_number = 0; /* don't know correct init value */\n                    fcb->file_attributes = info.dwFileAttributes;\n                    /* The following fields are not initialized */\n                    /* by the native function: */\n                    /* unused */\n                    /* record_within_current_block */\n                    /* random_access_record_number */\n\n                    TRACE(\"successful opened file \\\"%s\\\" as %d (handle %p)\\n\",\n                          file_path, hfile16, handle);\n                    AL_result = 0x00; /* successful */\n                } /* if */\n            } /* if */\n        } /* if */\n    } /* if */\n    SET_AL(context, AL_result);\n}\n\n\n/***********************************************************************\n *           INT21_CloseFileUsingFCB\n *\n * Handler for function 0x10.\n *\n * PARAMS\n *  DX:DX [I/O] File control block (FCB or XFCB) of open file\n *\n * RETURNS (in AL)\n *  0x00: successful\n *  0xff: failed\n *\n * NOTES\n *  Closes a FCB file.\n */\nstatic void INT21_CloseFileUsingFCB( CONTEXT *context )\n{\n    struct FCB *fcb;\n    struct XFCB *xfcb;\n    BYTE AL_result;\n\n    fcb = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx);\n    if (fcb->drive_number == 0xff) {\n        xfcb = (struct XFCB *) fcb;\n        fcb = (struct FCB *) xfcb->fcb;\n    } /* if */\n\n    if (_lclose16((HFILE16) fcb->file_number) != 0) {\n        TRACE(\"_lclose16(%d) failed\\n\", fcb->file_number);\n        AL_result = 0xff; /* failed */\n    } else {\n        TRACE(\"successful closed file %d\\n\", fcb->file_number);\n        AL_result = 0x00; /* successful */\n    } /* if */\n    SET_AL(context, AL_result);\n}\n\n\n/***********************************************************************\n *           INT21_SequentialReadFromFCB\n *\n * Handler for function 0x14.\n *\n * PARAMS\n *  DX:DX [I/O] File control block (FCB or XFCB) of open file\n *\n * RETURNS (in AL)\n *  0: successful\n *  1: end of file, no data read\n *  2: segment wrap in DTA, no data read (not returned now)\n *  3: end of file, partial record read\n *\n * NOTES\n *  Reads a record with the size FCB->logical_record_size from the FCB\n *  to the disk transfer area. The position of the record is specified\n *  with FCB->current_block_number and FCB->record_within_current_block.\n *  Then FCB->current_block_number and FCB->record_within_current_block\n *  are updated to point to the next record. If a partial record is\n *  read, it is filled with zeros up to the FCB->logical_record_size.\n */\nstatic void INT21_SequentialReadFromFCB( CONTEXT *context )\n{\n    struct FCB *fcb;\n    struct XFCB *xfcb;\n    HANDLE handle;\n    DWORD record_number;\n    DWORD position;\n    BYTE *disk_transfer_area;\n    UINT bytes_read;\n    BYTE AL_result;\n\n    fcb = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx);\n    if (fcb->drive_number == 0xff) {\n        xfcb = (struct XFCB *) fcb;\n        fcb = (struct FCB *) xfcb->fcb;\n    } /* if */\n\n    handle = DosFileHandleToWin32Handle((HFILE16) fcb->file_number);\n    if (handle == INVALID_HANDLE_VALUE) {\n        TRACE(\"DosFileHandleToWin32Handle(%d) failed: INVALID_HANDLE_VALUE\\n\",\n            fcb->file_number);\n        AL_result = 0x01; /* end of file, no data read */\n    } else {\n        record_number = 128 * fcb->current_block_number + fcb->record_within_current_block;\n        position = SetFilePointer(handle, record_number * fcb->logical_record_size, NULL, 0);\n        if (position != record_number * fcb->logical_record_size) {\n            TRACE(\"seek(%d, %d, 0) failed with %u\\n\",\n                  fcb->file_number, record_number * fcb->logical_record_size, position);\n            AL_result = 0x01; /* end of file, no data read */\n        } else {\n            disk_transfer_area = INT21_GetCurrentDTA(context);\n            bytes_read = _lread((HFILE) handle, disk_transfer_area, fcb->logical_record_size);\n            if (bytes_read != fcb->logical_record_size) {\n                TRACE(\"_lread(%d, %p, %d) failed with %d\\n\",\n                      fcb->file_number, disk_transfer_area, fcb->logical_record_size, bytes_read);\n                if (bytes_read == 0) {\n                    AL_result = 0x01; /* end of file, no data read */\n                } else {\n                    memset(&disk_transfer_area[bytes_read], 0, fcb->logical_record_size - bytes_read);\n                    AL_result = 0x03; /* end of file, partial record read */\n                } /* if */\n            } else {\n                TRACE(\"successful read %d bytes from record %d (position %u) of file %d (handle %p)\\n\",\n                    bytes_read, record_number, position, fcb->file_number, handle);\n                AL_result = 0x00; /* successful */\n            } /* if */\n        } /* if */\n    } /* if */\n    if (AL_result == 0x00 || AL_result == 0x03) {\n        if (fcb->record_within_current_block == 127) {\n            fcb->record_within_current_block = 0;\n            fcb->current_block_number++;\n        } else {\n            fcb->record_within_current_block++;\n        } /* if */\n    } /* if */\n    SET_AL(context, AL_result);\n}\n\n\n/***********************************************************************\n *           INT21_SequentialWriteToFCB\n *\n * Handler for function 0x15.\n *\n * PARAMS\n *  DX:DX [I/O] File control block (FCB or XFCB) of open file\n *\n * RETURNS (in AL)\n *  0: successful\n *  1: disk full\n *  2: segment wrap in DTA (not returned now)\n *\n * NOTES\n *  Writes a record with the size FCB->logical_record_size from the disk\n *  transfer area to the FCB. The position of the record is specified\n *  with FCB->current_block_number and FCB->record_within_current_block.\n *  Then FCB->current_block_number and FCB->record_within_current_block\n *  are updated to point to the next record. \n */\nstatic void INT21_SequentialWriteToFCB( CONTEXT *context )\n{\n    struct FCB *fcb;\n    struct XFCB *xfcb;\n    HANDLE handle;\n    DWORD record_number;\n    DWORD position;\n    BYTE *disk_transfer_area;\n    UINT bytes_written;\n    BYTE AL_result;\n\n    fcb = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx);\n    if (fcb->drive_number == 0xff) {\n        xfcb = (struct XFCB *) fcb;\n        fcb = (struct FCB *) xfcb->fcb;\n    } /* if */\n\n    handle = DosFileHandleToWin32Handle((HFILE16) fcb->file_number);\n    if (handle == INVALID_HANDLE_VALUE) {\n        TRACE(\"DosFileHandleToWin32Handle(%d) failed: INVALID_HANDLE_VALUE\\n\",\n            fcb->file_number);\n        AL_result = 0x01; /* disk full */\n    } else {\n        record_number = 128 * fcb->current_block_number + fcb->record_within_current_block;\n        position = SetFilePointer(handle, record_number * fcb->logical_record_size, NULL, 0);\n        if (position != record_number * fcb->logical_record_size) {\n            TRACE(\"seek(%d, %d, 0) failed with %u\\n\",\n                  fcb->file_number, record_number * fcb->logical_record_size, position);\n            AL_result = 0x01; /* disk full */\n        } else {\n            disk_transfer_area = INT21_GetCurrentDTA(context);\n            bytes_written = _lwrite((HFILE) handle, (LPCSTR)disk_transfer_area, fcb->logical_record_size);\n            if (bytes_written != fcb->logical_record_size) {\n                TRACE(\"_lwrite(%d, %p, %d) failed with %d\\n\",\n                      fcb->file_number, disk_transfer_area, fcb->logical_record_size, bytes_written);\n                AL_result = 0x01; /* disk full */\n            } else {\n                TRACE(\"successful written %d bytes from record %d (position %u) of file %d (handle %p)\\n\",\n                    bytes_written, record_number, position, fcb->file_number, handle);\n                AL_result = 0x00; /* successful */\n            } /* if */\n        } /* if */\n    } /* if */\n    if (AL_result == 0x00) {\n        if (fcb->record_within_current_block == 127) {\n            fcb->record_within_current_block = 0;\n            fcb->current_block_number++;\n        } else {\n            fcb->record_within_current_block++;\n        } /* if */\n    } /* if */\n    SET_AL(context, AL_result);\n}\n\n\n/***********************************************************************\n *           INT21_ReadRandomRecordFromFCB\n *\n * Handler for function 0x21.\n *\n * PARAMS\n *  DX:DX [I/O] File control block (FCB or XFCB) of open file\n *\n * RETURNS (in AL)\n *  0: successful\n *  1: end of file, no data read\n *  2: segment wrap in DTA, no data read (not returned now)\n *  3: end of file, partial record read\n *\n * NOTES\n *  Reads a record with the size FCB->logical_record_size from\n *  the FCB to the disk transfer area. The position of the record\n *  is specified with FCB->random_access_record_number. The\n *  FCB->random_access_record_number is not updated. If a partial record\n *  is read, it is filled with zeros up to the FCB->logical_record_size.\n */\nstatic void INT21_ReadRandomRecordFromFCB( CONTEXT *context )\n{\n    struct FCB *fcb;\n    struct XFCB *xfcb;\n    HANDLE handle;\n    DWORD record_number;\n    DWORD position;\n    BYTE *disk_transfer_area;\n    UINT bytes_read;\n    BYTE AL_result;\n\n    fcb = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx);\n    if (fcb->drive_number == 0xff) {\n        xfcb = (struct XFCB *) fcb;\n        fcb = (struct FCB *) xfcb->fcb;\n    } /* if */\n\n    memcpy(&record_number, fcb->random_access_record_number, 4);\n    handle = DosFileHandleToWin32Handle((HFILE16) fcb->file_number);\n    if (handle == INVALID_HANDLE_VALUE) {\n        TRACE(\"DosFileHandleToWin32Handle(%d) failed: INVALID_HANDLE_VALUE\\n\",\n            fcb->file_number);\n        AL_result = 0x01; /* end of file, no data read */\n    } else {\n        position = SetFilePointer(handle, record_number * fcb->logical_record_size, NULL, 0);\n        if (position != record_number * fcb->logical_record_size) {\n            TRACE(\"seek(%d, %d, 0) failed with %u\\n\",\n                  fcb->file_number, record_number * fcb->logical_record_size, position);\n            AL_result = 0x01; /* end of file, no data read */\n        } else {\n            disk_transfer_area = INT21_GetCurrentDTA(context);\n            bytes_read = _lread((HFILE) handle, disk_transfer_area, fcb->logical_record_size);\n            if (bytes_read != fcb->logical_record_size) {\n                TRACE(\"_lread(%d, %p, %d) failed with %d\\n\",\n                      fcb->file_number, disk_transfer_area, fcb->logical_record_size, bytes_read);\n                if (bytes_read == 0) {\n                    AL_result = 0x01; /* end of file, no data read */\n                } else {\n                    memset(&disk_transfer_area[bytes_read], 0, fcb->logical_record_size - bytes_read);\n                    AL_result = 0x03; /* end of file, partial record read */\n                } /* if */\n            } else {\n                TRACE(\"successful read %d bytes from record %d (position %u) of file %d (handle %p)\\n\",\n                    bytes_read, record_number, position, fcb->file_number, handle);\n                AL_result = 0x00; /* successful */\n            } /* if */\n        } /* if */\n    } /* if */\n    fcb->current_block_number = record_number / 128;\n    fcb->record_within_current_block = record_number % 128;\n    SET_AL(context, AL_result);\n}\n\n\n/***********************************************************************\n *           INT21_WriteRandomRecordToFCB\n *\n * Handler for function 0x22.\n *\n * PARAMS\n *  DX:DX [I/O] File control block (FCB or XFCB) of open file\n *\n * RETURNS (in AL)\n *  0: successful\n *  1: disk full\n *  2: segment wrap in DTA (not returned now)\n *\n * NOTES\n *  Writes a record with the size FCB->logical_record_size from\n *  the disk transfer area to the FCB. The position of the record\n *  is specified with FCB->random_access_record_number. The\n *  FCB->random_access_record_number is not updated.\n */\nstatic void INT21_WriteRandomRecordToFCB( CONTEXT *context )\n{\n    struct FCB *fcb;\n    struct XFCB *xfcb;\n    HANDLE handle;\n    DWORD record_number;\n    DWORD position;\n    BYTE *disk_transfer_area;\n    UINT bytes_written;\n    BYTE AL_result;\n\n    fcb = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx);\n    if (fcb->drive_number == 0xff) {\n        xfcb = (struct XFCB *) fcb;\n        fcb = (struct FCB *) xfcb->fcb;\n    } /* if */\n\n    memcpy(&record_number, fcb->random_access_record_number, 4);\n    handle = DosFileHandleToWin32Handle((HFILE16) fcb->file_number);\n    if (handle == INVALID_HANDLE_VALUE) {\n        TRACE(\"DosFileHandleToWin32Handle(%d) failed: INVALID_HANDLE_VALUE\\n\",\n            fcb->file_number);\n        AL_result = 0x01; /* disk full */\n    } else {\n        position = SetFilePointer(handle, record_number * fcb->logical_record_size, NULL, 0);\n        if (position != record_number * fcb->logical_record_size) {\n            TRACE(\"seek(%d, %d, 0) failed with %u\\n\",\n                  fcb->file_number, record_number * fcb->logical_record_size, position);\n            AL_result = 0x01; /* disk full */\n        } else {\n            disk_transfer_area = INT21_GetCurrentDTA(context);\n            bytes_written = _lwrite((HFILE) handle, (LPCSTR)disk_transfer_area, fcb->logical_record_size);\n            if (bytes_written != fcb->logical_record_size) {\n                TRACE(\"_lwrite(%d, %p, %d) failed with %d\\n\",\n                      fcb->file_number, disk_transfer_area, fcb->logical_record_size, bytes_written);\n                AL_result = 0x01; /* disk full */\n            } else {\n                TRACE(\"successful written %d bytes from record %d (position %u) of file %d (handle %p)\\n\",\n                    bytes_written, record_number, position, fcb->file_number, handle);\n                AL_result = 0x00; /* successful */\n            } /* if */\n        } /* if */\n    } /* if */\n    fcb->current_block_number = record_number / 128;\n    fcb->record_within_current_block = record_number % 128;\n    SET_AL(context, AL_result);\n}\n\n\n/***********************************************************************\n *           INT21_RandomBlockReadFromFCB\n *\n * Handler for function 0x27.\n *\n * PARAMS\n *  CX    [I/O] Number of records to read\n *  DX:DX [I/O] File control block (FCB or XFCB) of open file\n *\n * RETURNS (in AL)\n *  0: successful\n *  1: end of file, no data read\n *  2: segment wrap in DTA, no data read (not returned now)\n *  3: end of file, partial record read\n *\n * NOTES\n *  Reads several records with the size FCB->logical_record_size from\n *  the FCB to the disk transfer area. The number of records to be\n *  read is specified in the CX register. The position of the first\n *  record is specified with FCB->random_access_record_number. The\n *  FCB->random_access_record_number, the FCB->current_block_number\n *  and FCB->record_within_current_block are updated to point to the\n *  next record after the records read. If a partial record is read,\n *  it is filled with zeros up to the FCB->logical_record_size. The\n *  CX register is set to the number of successfully read records.\n */\nstatic void INT21_RandomBlockReadFromFCB( CONTEXT *context )\n{\n    struct FCB *fcb;\n    struct XFCB *xfcb;\n    HANDLE handle;\n    DWORD record_number;\n    DWORD position;\n    BYTE *disk_transfer_area;\n    UINT records_requested;\n    UINT bytes_requested;\n    UINT bytes_read;\n    UINT records_read;\n    BYTE AL_result;\n\n    fcb = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx);\n    if (fcb->drive_number == 0xff) {\n        xfcb = (struct XFCB *) fcb;\n        fcb = (struct FCB *) xfcb->fcb;\n    } /* if */\n\n    memcpy(&record_number, fcb->random_access_record_number, 4);\n    handle = DosFileHandleToWin32Handle((HFILE16) fcb->file_number);\n    if (handle == INVALID_HANDLE_VALUE) {\n        TRACE(\"DosFileHandleToWin32Handle(%d) failed: INVALID_HANDLE_VALUE\\n\",\n            fcb->file_number);\n        records_read = 0;\n        AL_result = 0x01; /* end of file, no data read */\n    } else {\n        position = SetFilePointer(handle, record_number * fcb->logical_record_size, NULL, 0);\n        if (position != record_number * fcb->logical_record_size) {\n            TRACE(\"seek(%d, %d, 0) failed with %u\\n\",\n                  fcb->file_number, record_number * fcb->logical_record_size, position);\n            records_read = 0;\n            AL_result = 0x01; /* end of file, no data read */\n        } else {\n            disk_transfer_area = INT21_GetCurrentDTA(context);\n            records_requested = CX_reg(context);\n            bytes_requested = records_requested * fcb->logical_record_size;\n            bytes_read = _lread((HFILE) handle, disk_transfer_area, bytes_requested);\n            if (bytes_read != bytes_requested) {\n                TRACE(\"_lread(%d, %p, %d) failed with %d\\n\",\n                      fcb->file_number, disk_transfer_area, bytes_requested, bytes_read);\n                records_read = bytes_read / fcb->logical_record_size;\n                if (bytes_read % fcb->logical_record_size == 0) {\n                    AL_result = 0x01; /* end of file, no data read */\n                } else {\n                    records_read++;\n                    memset(&disk_transfer_area[bytes_read], 0, records_read * fcb->logical_record_size - bytes_read);\n                    AL_result = 0x03; /* end of file, partial record read */\n                } /* if */\n            } else {\n                TRACE(\"successful read %d bytes from record %d (position %u) of file %d (handle %p)\\n\",\n                    bytes_read, record_number, position, fcb->file_number, handle);\n                records_read = records_requested;\n                AL_result = 0x00; /* successful */\n            } /* if */\n        } /* if */\n    } /* if */\n    record_number += records_read;\n    memcpy(fcb->random_access_record_number, &record_number, 4);\n    fcb->current_block_number = record_number / 128;\n    fcb->record_within_current_block = record_number % 128;\n    SET_CX(context, records_read);\n    SET_AL(context, AL_result);\n}\n\n\n/***********************************************************************\n *           INT21_RandomBlockWriteToFCB\n *\n * Handler for function 0x28.\n *\n * PARAMS\n *  CX    [I/O] Number of records to write\n *  DX:DX [I/O] File control block (FCB or XFCB) of open file\n *\n * RETURNS (in AL)\n *  0: successful\n *  1: disk full\n *  2: segment wrap in DTA (not returned now)\n *\n * NOTES\n *  Writes several records with the size FCB->logical_record_size from\n *  the disk transfer area to the FCB. The number of records to be\n *  written is specified in the CX register. The position of the first\n *  record is specified with FCB->random_access_record_number. The\n *  FCB->random_access_record_number, the FCB->current_block_number\n *  and FCB->record_within_current_block are updated to point to the\n *  next record after the records written. The CX register is set to\n *  the number of successfully written records.\n */\nstatic void INT21_RandomBlockWriteToFCB( CONTEXT *context )\n{\n    struct FCB *fcb;\n    struct XFCB *xfcb;\n    HANDLE handle;\n    DWORD record_number;\n    DWORD position;\n    BYTE *disk_transfer_area;\n    UINT records_requested;\n    UINT bytes_requested;\n    UINT bytes_written;\n    UINT records_written;\n    BYTE AL_result;\n\n    fcb = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx);\n    if (fcb->drive_number == 0xff) {\n        xfcb = (struct XFCB *) fcb;\n        fcb = (struct FCB *) xfcb->fcb;\n    } /* if */\n\n    memcpy(&record_number, fcb->random_access_record_number, 4);\n    handle = DosFileHandleToWin32Handle((HFILE16) fcb->file_number);\n    if (handle == INVALID_HANDLE_VALUE) {\n        TRACE(\"DosFileHandleToWin32Handle(%d) failed: INVALID_HANDLE_VALUE\\n\",\n            fcb->file_number);\n        records_written = 0;\n        AL_result = 0x01; /* disk full */\n    } else {\n        position = SetFilePointer(handle, record_number * fcb->logical_record_size, NULL, 0);\n        if (position != record_number * fcb->logical_record_size) {\n            TRACE(\"seek(%d, %d, 0) failed with %u\\n\",\n                  fcb->file_number, record_number * fcb->logical_record_size, position);\n            records_written = 0;\n            AL_result = 0x01; /* disk full */\n        } else {\n            disk_transfer_area = INT21_GetCurrentDTA(context);\n            records_requested = CX_reg(context);\n            bytes_requested = records_requested * fcb->logical_record_size;\n            bytes_written = _lwrite((HFILE) handle, (LPCSTR)disk_transfer_area, bytes_requested);\n            if (bytes_written != bytes_requested) {\n                TRACE(\"_lwrite(%d, %p, %d) failed with %d\\n\",\n                      fcb->file_number, disk_transfer_area, bytes_requested, bytes_written);\n                records_written = bytes_written / fcb->logical_record_size;\n                AL_result = 0x01; /* disk full */\n            } else {\n                TRACE(\"successful write %d bytes from record %d (position %u) of file %d (handle %p)\\n\",\n                    bytes_written, record_number, position, fcb->file_number, handle);\n                records_written = records_requested;\n                AL_result = 0x00; /* successful */\n            } /* if */\n        } /* if */\n    } /* if */\n    record_number += records_written;\n    memcpy(fcb->random_access_record_number, &record_number, 4);\n    fcb->current_block_number = record_number / 128;\n    fcb->record_within_current_block = record_number % 128;\n    SET_CX(context, records_written);\n    SET_AL(context, AL_result);\n}\n\n\n/***********************************************************************\n *           INT21_CreateDirectory\n *\n * Handler for:\n * - function 0x39\n * - subfunction 0x39 of function 0x71\n * - subfunction 0xff of function 0x43 (CL == 0x39)\n */\nstatic BOOL INT21_CreateDirectory( CONTEXT *context )\n{\n    WCHAR dirW[MAX_PATH];\n    char *dirA = CTX_SEG_OFF_TO_LIN(context,\n                                    context->SegDs, \n                                    context->Edx);\n\n    TRACE( \"CREATE DIRECTORY %s\\n\", dirA );\n\n    MultiByteToWideChar(CP_OEMCP, 0, dirA, -1, dirW, MAX_PATH);\n\n    if (CreateDirectoryW(dirW, NULL))\n        return TRUE;\n\n    /*\n     * FIXME: CreateDirectory's LastErrors will clash with the ones\n     *        used by DOS. AH=39 only returns 3 (path not found) and \n     *        5 (access denied), while CreateDirectory return several\n     *        ones. Remap some of them. -Marcus\n     */\n    switch (GetLastError()) \n    {\n    case ERROR_ALREADY_EXISTS:\n    case ERROR_FILENAME_EXCED_RANGE:\n    case ERROR_DISK_FULL:\n        SetLastError(ERROR_ACCESS_DENIED);\n        break;\n    default: \n        break;\n    }\n\n    return FALSE;\n}\n\n\n/***********************************************************************\n *           INT21_ExtendedCountryInformation\n *\n * Handler for function 0x65.\n */\nstatic void INT21_ExtendedCountryInformation( CONTEXT *context )\n{\n    BYTE *dataptr = CTX_SEG_OFF_TO_LIN( context, context->SegEs, context->Edi );\n    BYTE buffsize = CX_reg (context);\n    \n    TRACE( \"GET EXTENDED COUNTRY INFORMATION, subfunction %02x\\n\",\n           AL_reg(context) );\n\n    /*\n     * Check subfunctions that are passed country and code page.\n     */\n    if (AL_reg(context) >= 0x01 && AL_reg(context) <= 0x07)\n    {\n        WORD country = DX_reg(context);\n        WORD codepage = BX_reg(context);\n\n        if (country != 0xffff && country != INT21_GetSystemCountryCode())\n            FIXME( \"Requested info on non-default country %04x\\n\", country );\n\n        if (codepage != 0xffff && codepage != GetOEMCP())\n            FIXME( \"Requested info on non-default code page %04x\\n\", codepage );\n    }\n\n    switch (AL_reg(context)) {\n    case 0x00: /* SET GENERAL INTERNATIONALIZATION INFO */\n        INT_BARF( context, 0x21 );\n        SET_CFLAG( context );\n        break;\n\n    case 0x01: /* GET GENERAL INTERNATIONALIZATION INFO */\n        TRACE( \"Get general internationalization info\\n\" );\n        dataptr[0] = AL_reg(context); /* Info ID */\n        *(WORD*)(dataptr+1) = 38; /* Size of the following info */\n        *(WORD*)(dataptr+3) = INT21_GetSystemCountryCode(); /* Country ID */\n        *(WORD*)(dataptr+5) = GetOEMCP(); /* Code page */\n        /* FIXME: fill buffer partially up to buffsize bytes*/\n        if (buffsize > 8){\n            INT21_FillCountryInformation( dataptr + 7, buffsize >= 0x29 ? 0x22 : buffsize - 0x7);\n            SET_CX( context, buffsize >= 0x29 ? 0x29 : buffsize); /* Size of returned info */\n        }else{\n            SET_CX( context, 0x07 ); /* Size of returned info */        \n        }\n        break;\n        \n    case 0x02: /* GET POINTER TO UPPERCASE TABLE */\n    case 0x04: /* GET POINTER TO FILENAME UPPERCASE TABLE */\n        TRACE( \"Get pointer to uppercase table\\n\" );\n        dataptr[0] = AL_reg(context); /* Info ID */\n        *(DWORD*)(dataptr+1) = MAKESEGPTR( INT21_GetHeapSelector( context ),\n                                           offsetof(INT21_HEAP, uppercase_size) );\n        SET_CX( context, 5 ); /* Size of returned info */\n        break;\n\n    case 0x03: /* GET POINTER TO LOWERCASE TABLE */\n        TRACE( \"Get pointer to lowercase table\\n\" );\n        dataptr[0] = 0x03; /* Info ID */\n        *(DWORD*)(dataptr+1) = MAKESEGPTR( INT21_GetHeapSelector( context ),\n                                           offsetof(INT21_HEAP, lowercase_size) );\n        SET_CX( context, 5 ); /* Size of returned info */\n        break;\n\n    case 0x05: /* GET POINTER TO FILENAME TERMINATOR TABLE */\n        TRACE(\"Get pointer to filename terminator table\\n\");\n        dataptr[0] = 0x05; /* Info ID */\n        *(DWORD*)(dataptr+1) = MAKESEGPTR( INT21_GetHeapSelector( context ),\n                                           offsetof(INT21_HEAP, filename_size) );\n        SET_CX( context, 5 ); /* Size of returned info */\n        break;\n\n    case 0x06: /* GET POINTER TO COLLATING SEQUENCE TABLE */\n        TRACE(\"Get pointer to collating sequence table\\n\");\n        dataptr[0] = 0x06; /* Info ID */\n        *(DWORD*)(dataptr+1) = MAKESEGPTR( INT21_GetHeapSelector( context ),\n                                           offsetof(INT21_HEAP, collating_size) );\n        SET_CX( context, 5 ); /* Size of returned info */\n        break;\n\n    case 0x07: /* GET POINTER TO DBCS LEAD BYTE TABLE */\n        TRACE(\"Get pointer to DBCS lead byte table\\n\");\n        dataptr[0] = 0x07; /* Info ID */\n        *(DWORD*)(dataptr+1) = MAKESEGPTR( INT21_GetHeapSelector( context ),\n                                           offsetof(INT21_HEAP, dbcs_size) );\n        SET_CX( context, 5 ); /* Size of returned info */\n        break;\n\n    case 0x20: /* CAPITALIZE CHARACTER */\n    case 0xa0: /* CAPITALIZE FILENAME CHARACTER */\n        TRACE(\"Convert char to uppercase\\n\");\n        SET_DL( context, toupper(DL_reg(context)) );\n        break;\n\n    case 0x21: /* CAPITALIZE STRING */\n    case 0xa1: /* CAPITALIZE COUNTED FILENAME STRING */\n        TRACE(\"Convert string to uppercase with length\\n\");\n        {\n            char *ptr = CTX_SEG_OFF_TO_LIN( context, context->SegDs,\n                                            context->Edx );\n            WORD len = CX_reg(context);\n            while (len--) { *ptr = toupper(*ptr); ptr++; }\n        }\n        break;\n\n    case 0x22: /* CAPITALIZE ASCIIZ STRING */\n    case 0xa2: /* CAPITALIZE ASCIIZ FILENAME */\n        TRACE(\"Convert ASCIIZ string to uppercase\\n\");\n        {\n            char *p = CTX_SEG_OFF_TO_LIN( context, context->SegDs, context->Edx );\n            for ( ; *p; p++) *p = toupper(*p);\n        }\n        break;\n\n    case 0x23: /* DETERMINE IF CHARACTER REPRESENTS YES/NO RESPONSE */\n        INT_BARF( context, 0x21 );\n        SET_CFLAG( context );\n        break;\n\n    default:\n        INT_BARF( context, 0x21 );\n        SET_CFLAG(context);\n        break;\n    }\n}\n\n\n/***********************************************************************\n *           INT21_FileAttributes\n *\n * Handler for:\n * - function 0x43\n * - subfunction 0x43 of function 0x71\n */\nstatic BOOL INT21_FileAttributes( CONTEXT *context,\n                                  BYTE       subfunction,\n                                  BOOL       islong )\n{\n    WCHAR fileW[MAX_PATH];\n    char *fileA = CTX_SEG_OFF_TO_LIN(context, \n                                     context->SegDs, \n                                     context->Edx);\n\tCHAR filebuf[MAX_PATH];\n\tfileA = RedirectSystemDir(fileA, filebuf, MAX_PATH);\n    HANDLE   handle;\n    BOOL     status;\n    FILETIME filetime;\n    DWORD    result;\n    WORD     date, time;\n    int      len;\n\n    switch (subfunction)\n    {\n    case 0x00: /* GET FILE ATTRIBUTES */\n        TRACE( \"GET FILE ATTRIBUTES for %s\\n\", fileA );\n        len = MultiByteToWideChar(CP_OEMCP, 0, fileA, -1, fileW, MAX_PATH);\n\n        /* Winbench 96 Disk Test fails if we don't complain\n         * about a filename that ends in \\\n         */\n        if (!len || (fileW[len-1] == '/') || (fileW[len-1] == '\\\\'))\n            return FALSE;\n\n        result = GetFileAttributesW( fileW );\n        if (result == INVALID_FILE_ATTRIBUTES)\n            return FALSE;\n        else\n        {\n            result &= 0xff;\n            SET_CX( context, (WORD)result );\n            if (!islong)\n                SET_AX( context, (WORD)result ); /* DR DOS */\n        }\n        break;\n\n    case 0x01: /* SET FILE ATTRIBUTES */\n        TRACE( \"SET FILE ATTRIBUTES 0x%02x for %s\\n\", \n               CX_reg(context), fileA );\n        MultiByteToWideChar(CP_OEMCP, 0, fileA, -1, fileW, MAX_PATH);\n\n        if (!SetFileAttributesW( fileW, CX_reg(context) ))\n            return FALSE;\n        break;\n\n    case 0x02: /* GET COMPRESSED FILE SIZE */\n        TRACE( \"GET COMPRESSED FILE SIZE for %s\\n\", fileA );\n        MultiByteToWideChar(CP_OEMCP, 0, fileA, -1, fileW, MAX_PATH);\n\n        result = GetCompressedFileSizeW( fileW, NULL );\n        if (result == INVALID_FILE_SIZE)\n            return FALSE;\n        else\n        {\n            SET_AX( context, LOWORD(result) );\n            SET_DX( context, HIWORD(result) );\n        }\n        break;\n\n    case 0x03: /* SET FILE LAST-WRITTEN DATE AND TIME */\n        if (!islong)\n            INT_BARF( context, 0x21 );\n        else\n        {\n            TRACE( \"SET FILE LAST-WRITTEN DATE AND TIME, file %s\\n\", fileA );\n            MultiByteToWideChar(CP_OEMCP, 0, fileA, -1, fileW, MAX_PATH);\n\n            handle = CreateFileW( fileW, GENERIC_WRITE, \n                                  FILE_SHARE_READ | FILE_SHARE_WRITE, \n                                  NULL, OPEN_EXISTING, 0, 0 );\n            if (handle == INVALID_HANDLE_VALUE)\n                return FALSE;\n\n            DosDateTimeToFileTime( DI_reg(context), \n                                   CX_reg(context),\n                                   &filetime );\n            status = SetFileTime( handle, NULL, NULL, &filetime );\n\n            CloseHandle( handle );\n            return status;\n        }\n        break;\n\n    case 0x04: /* GET FILE LAST-WRITTEN DATE AND TIME */\n        if (!islong)\n            INT_BARF( context, 0x21 );\n        else\n        {\n            TRACE( \"GET FILE LAST-WRITTEN DATE AND TIME, file %s\\n\", fileA );\n            MultiByteToWideChar(CP_OEMCP, 0, fileA, -1, fileW, MAX_PATH);\n\n            handle = CreateFileW( fileW, GENERIC_READ, \n                                  FILE_SHARE_READ | FILE_SHARE_WRITE, \n                                  NULL, OPEN_EXISTING, 0, 0 );\n            if (handle == INVALID_HANDLE_VALUE)\n                return FALSE;\n\n            status = GetFileTime( handle, NULL, NULL, &filetime );\n            if (status)\n            {\n                FileTimeToDosDateTime( &filetime, &date, &time );\n                SET_DI( context, date );\n                SET_CX( context, time );\n            }\n\n            CloseHandle( handle );\n            return status;\n        }\n        break;\n\n    case 0x05: /* SET FILE LAST ACCESS DATE */\n        if (!islong)\n            INT_BARF( context, 0x21 );\n        else\n        {\n            TRACE( \"SET FILE LAST ACCESS DATE, file %s\\n\", fileA );\n            MultiByteToWideChar(CP_OEMCP, 0, fileA, -1, fileW, MAX_PATH);\n\n            handle = CreateFileW( fileW, GENERIC_WRITE, \n                                  FILE_SHARE_READ | FILE_SHARE_WRITE, \n                                  NULL, OPEN_EXISTING, 0, 0 );\n            if (handle == INVALID_HANDLE_VALUE)\n                return FALSE;\n\n            DosDateTimeToFileTime( DI_reg(context), \n                                   0,\n                                   &filetime );\n            status = SetFileTime( handle, NULL, &filetime, NULL );\n\n            CloseHandle( handle );\n            return status;\n        }\n        break;\n\n    case 0x06: /* GET FILE LAST ACCESS DATE */\n        if (!islong)\n            INT_BARF( context, 0x21 );\n        else\n        {\n            TRACE( \"GET FILE LAST ACCESS DATE, file %s\\n\", fileA );\n            MultiByteToWideChar(CP_OEMCP, 0, fileA, -1, fileW, MAX_PATH);\n\n            handle = CreateFileW( fileW, GENERIC_READ, \n                                  FILE_SHARE_READ | FILE_SHARE_WRITE, \n                                  NULL, OPEN_EXISTING, 0, 0 );\n            if (handle == INVALID_HANDLE_VALUE)\n                return FALSE;\n\n            status = GetFileTime( handle, NULL, &filetime, NULL );\n            if (status)\n            {\n                FileTimeToDosDateTime( &filetime, &date, NULL );\n                SET_DI( context, date );\n            }\n\n            CloseHandle( handle );\n            return status;\n        }\n        break;\n\n    case 0x07: /* SET FILE CREATION DATE AND TIME */\n        if (!islong)\n            INT_BARF( context, 0x21 );\n        else\n        {\n            TRACE( \"SET FILE CREATION DATE AND TIME, file %s\\n\", fileA );\n            MultiByteToWideChar(CP_OEMCP, 0, fileA, -1, fileW, MAX_PATH);\n\n            handle = CreateFileW( fileW, GENERIC_WRITE,\n                                  FILE_SHARE_READ | FILE_SHARE_WRITE, \n                                  NULL, OPEN_EXISTING, 0, 0 );\n            if (handle == INVALID_HANDLE_VALUE)\n                return FALSE;\n            \n            /*\n             * FIXME: SI has number of 10-millisecond units past time in CX.\n             */\n            DosDateTimeToFileTime( DI_reg(context),\n                                   CX_reg(context),\n                                   &filetime );\n            status = SetFileTime( handle, &filetime, NULL, NULL );\n\n            CloseHandle( handle );\n            return status;\n        }\n        break;\n\n    case 0x08: /* GET FILE CREATION DATE AND TIME */\n        if (!islong)\n            INT_BARF( context, 0x21 );\n        else\n        {\n            TRACE( \"GET FILE CREATION DATE AND TIME, file %s\\n\", fileA );\n            MultiByteToWideChar(CP_OEMCP, 0, fileA, -1, fileW, MAX_PATH);\n\n            handle = CreateFileW( fileW, GENERIC_READ, \n                                  FILE_SHARE_READ | FILE_SHARE_WRITE, \n                                  NULL, OPEN_EXISTING, 0, 0 );\n            if (handle == INVALID_HANDLE_VALUE)\n                return FALSE;\n\n            status = GetFileTime( handle, &filetime, NULL, NULL );\n            if (status)\n            {            \n                FileTimeToDosDateTime( &filetime, &date, &time );\n                SET_DI( context, date );\n                SET_CX( context, time );\n                /*\n                 * FIXME: SI has number of 10-millisecond units past \n                 *        time in CX.\n                 */\n                SET_SI( context, 0 );\n            }\n\n            CloseHandle(handle);\n            return status;\n        }\n        break;\n\n    case 0xff: /* EXTENDED-LENGTH FILENAME OPERATIONS */\n        if (islong || context->Ebp != 0x5053)\n            INT_BARF( context, 0x21 );\n        else\n        {\n            switch(CL_reg(context))\n            {\n            case 0x39:\n                if (!INT21_CreateDirectory( context ))\n                    return FALSE;\n                break;\n\n            case 0x56:\n                if (!INT21_RenameFile( context ))\n                    return FALSE;\n                break;\n\n            default:\n                INT_BARF( context, 0x21 );\n            }\n        }\n        break;\n\n    default:\n        INT_BARF( context, 0x21 );\n    }\n\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           INT21_FileDateTime\n *\n * Handler for function 0x57.\n */\nstatic BOOL INT21_FileDateTime( CONTEXT *context )\n{\n    HANDLE   handle = DosFileHandleToWin32Handle(BX_reg(context));\n    FILETIME filetime;\n    WORD     date, time;\n\n    switch (AL_reg(context)) {\n    case 0x00:  /* Get last-written stamp */\n        TRACE( \"GET FILE LAST-WRITTEN DATE AND TIME, handle %d\\n\",\n               BX_reg(context) );\n        {\n            if (!GetFileTime( handle, NULL, NULL, &filetime ))\n                return FALSE;\n            FileTimeToDosDateTime( &filetime, &date, &time );\n            SET_DX( context, date );\n            SET_CX( context, time );\n            break;\n        }\n\n    case 0x01:  /* Set last-written stamp */\n        TRACE( \"SET FILE LAST-WRITTEN DATE AND TIME, handle %d\\n\",\n               BX_reg(context) );\n        {\n            DWORD typ = GetFileType(handle);\n            /* is device file */\n            if (typ != FILE_TYPE_DISK || BX_reg(context) < 5 /* dup? */)\n            {\n                /* always success */\n                break;\n            }\n            DosDateTimeToFileTime( DX_reg(context), \n                                   CX_reg(context),\n                                   &filetime );\n            if (!SetFileTime( handle, NULL, NULL, &filetime ))\n                return FALSE;\n            break;\n        }\n\n    case 0x04:  /* Get last access stamp, DOS 7 */\n        TRACE( \"GET FILE LAST ACCESS DATE AND TIME, handle %d\\n\",\n               BX_reg(context) );\n        {\n            if (!GetFileTime( handle, NULL, &filetime, NULL ))\n                return FALSE;\n            FileTimeToDosDateTime( &filetime, &date, &time );\n            SET_DX( context, date );\n            SET_CX( context, time );\n            break;\n        }\n\n    case 0x05:  /* Set last access stamp, DOS 7 */\n        TRACE( \"SET FILE LAST ACCESS DATE AND TIME, handle %d\\n\",\n               BX_reg(context) );\n        {\n            DosDateTimeToFileTime( DX_reg(context), \n                                   CX_reg(context),\n                                   &filetime );\n            if (!SetFileTime( handle, NULL, &filetime, NULL ))\n                return FALSE;\n            break;\n        }\n\n    case 0x06:  /* Get creation stamp, DOS 7 */\n        TRACE( \"GET FILE CREATION DATE AND TIME, handle %d\\n\",\n               BX_reg(context) );\n        {\n            if (!GetFileTime( handle, &filetime, NULL, NULL ))\n                return FALSE;\n            FileTimeToDosDateTime( &filetime, &date, &time );\n            SET_DX( context, date );\n            SET_CX( context, time );\n            /*\n             * FIXME: SI has number of 10-millisecond units past time in CX.\n             */\n            SET_SI( context, 0 );\n            break;\n        }\n\n    case 0x07:  /* Set creation stamp, DOS 7 */\n        TRACE( \"SET FILE CREATION DATE AND TIME, handle %d\\n\",\n               BX_reg(context) );\n        {\n            /*\n             * FIXME: SI has number of 10-millisecond units past time in CX.\n             */\n            DosDateTimeToFileTime( DX_reg(context), \n                                   CX_reg(context),\n                                   &filetime );\n            if (!SetFileTime( handle, &filetime, NULL, NULL ))\n                return FALSE;\n            break;\n        }\n\n    default:\n        INT_BARF( context, 0x21 );\n        break;\n    }\n\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           INT21_GetPSP\n *\n * Handler for functions 0x51 and 0x62.\n */\nstatic void INT21_GetPSP( CONTEXT *context )\n{\n    TRACE( \"GET CURRENT PSP ADDRESS (%02x)\\n\", AH_reg(context) );\n\n    /*\n     * FIXME: should we return the original DOS PSP upon\n     *        Windows startup ? \n     */\n    if (!ISV86(context) && DOSVM_IsWin16())\n        SET_BX( context, LOWORD(GetCurrentPDB16()) );\n    else\n        SET_BX( context, DOSVM_psp );\n}\n\nstatic inline void setword( BYTE *ptr, WORD w )\n{\n    ptr[0] = (BYTE)w;\n    ptr[1] = (BYTE)(w >> 8);\n}\n\nstatic void CreateBPB(int drive, BYTE *data, BOOL16 limited)\n/* limited == TRUE is used with INT 0x21/0x440d */\n{\n    /* FIXME: we're forcing some values without checking that those are valid */\n    if (drive > 1) \n    {\n        setword(data, 512);\n        data[2] = 2;\n        setword(&data[3], 0);\n        data[5] = 2;\n        setword(&data[6], 240);\n        setword(&data[8], 64000);\n        data[0x0a] = 0xf8;\n        setword(&data[0x0b], 40);\n        setword(&data[0x0d], 56);\n        setword(&data[0x0f], 2);\n        setword(&data[0x11], 0);\n        if (!limited) \n        {\n            setword(&data[0x1f], 800);\n            data[0x21] = 5;\n            setword(&data[0x22], 1);\n        }\n    }\n    else\n    { /* 1.44mb */\n        setword(data, 512);\n        data[2] = 2;\n        setword(&data[3], 0);\n        data[5] = 2;\n        setword(&data[6], 240);\n        setword(&data[8], 2880);\n        data[0x0a] = 0xf8;\n        setword(&data[0x0b], 6);\n        setword(&data[0x0d], 18);\n        setword(&data[0x0f], 2);\n        setword(&data[0x11], 0);\n        if (!limited) \n        {\n            setword(&data[0x1f], 80);\n            data[0x21] = 7;\n            setword(&data[0x22], 2);\n        }\n    }\n}\n\nstatic inline DWORD INT21_Ioctl_CylHeadSect2Lin(DWORD cyl, WORD head, WORD sec, WORD cyl_cnt,\n                                                 WORD head_cnt, WORD sec_cnt)\n{\n    DWORD res = (cyl * head_cnt*sec_cnt + head * sec_cnt + sec);\n    return res;\n}\n\n/***********************************************************************\n *           INT21_Ioctl_Block\n *\n * Handler for block device IOCTLs.\n */\nstatic void INT21_Ioctl_Block( CONTEXT *context )\n{\n    BYTE *dataptr;\n    BYTE  drive = INT21_MapDrive( BL_reg(context) );\n    WCHAR drivespec[] = {'A', ':', '\\\\', 0};\n    UINT  drivetype;\n\n    drivespec[0] += drive;\n    drivetype = GetDriveTypeW( drivespec );\n\n    RESET_CFLAG(context);\n    if (drivetype == DRIVE_UNKNOWN || drivetype == DRIVE_NO_ROOT_DIR)\n    {\n        TRACE( \"IOCTL - SUBFUNCTION %d - INVALID DRIVE %c:\\n\", \n               AL_reg(context), 'A' + drive );\n        SetLastError( ERROR_INVALID_DRIVE );\n        SET_AX( context, ERROR_INVALID_DRIVE );\n        SET_CFLAG( context );\n        return;\n    }\n\n    switch (AL_reg(context))\n    {\n    case 0x04: /* READ FROM BLOCK DEVICE CONTROL CHANNEL */\n    case 0x05: /* WRITE TO BLOCK DEVICE CONTROL CHANNEL */\n        INT_BARF( context, 0x21 );\n        break;\n\n    case 0x08: /* CHECK IF BLOCK DEVICE REMOVABLE */\n        TRACE( \"IOCTL - CHECK IF BLOCK DEVICE REMOVABLE - %c:\\n\",\n               'A' + drive );\n\n        if (drivetype == DRIVE_REMOVABLE)\n            SET_AX( context, 0 ); /* removable */\n        else\n            SET_AX( context, 1 ); /* not removable */\n        break;\n\n    case 0x09: /* CHECK IF BLOCK DEVICE REMOTE */\n        TRACE( \"IOCTL - CHECK IF BLOCK DEVICE REMOTE - %c:\\n\",\n               'A' + drive );\n\n        if (drivetype == DRIVE_REMOTE)\n            SET_DX( context, (1<<9) | (1<<12) ); /* remote + no direct IO */\n        else if (drivetype == DRIVE_CDROM)\n            /* CDROM should be set to remote. If it set the app will\n             * call int2f to check if it cdrom or remote drive. */\n            SET_DX( context, (1<<12) );\n        else if (drivetype == DRIVE_FIXED)\n            /* This should define if drive support 0x0d, 0x0f and 0x08\n             * requests. The local fixed drive should do. */\n            SET_DX( context, (1<<11) );\n        else\n            SET_DX( context, 0 ); /* FIXME: use driver attr here */\n        break;\n\n    case 0x0d: /* GENERIC BLOCK DEVICE REQUEST */\n        /* Get pointer to IOCTL parameter block */\n        dataptr = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx);\n\n        switch (CX_reg(context))\n        {\n        case 0x0841: /* write logical device track */\n            TRACE( \"GENERIC IOCTL - Write logical device track - %c:\\n\",\n                   'A' + drive);\n            {\n                WORD head   = *(WORD *)(dataptr+1);\n                WORD cyl    = *(WORD *)(dataptr+3);\n                WORD sect   = *(WORD *)(dataptr+5);\n                WORD nrsect = *(WORD *)(dataptr+7);\n                BYTE *data  = CTX_SEG_OFF_TO_LIN(context, *(WORD *)(dataptr+11), *(WORD *)(dataptr+9));\n                WORD cyl_cnt, head_cnt, sec_cnt;\n\n                /* FIXME: we're faking some values here */\n                if (drive > 1)\n                {\n                    /* cyl_cnt = 0x300;\n                    head_cnt = 16;\n                    sec_cnt = 255; */\n                    SET_AX( context, ERROR_WRITE_FAULT );\n                    SET_CFLAG(context);\n                    break;\n                }\n                else\n                { /* floppy */\n                    cyl_cnt = 80;\n                    head_cnt = 2;\n                    sec_cnt = 18;\n                }\n\n                if (!DOSVM_RawWrite(drive, INT21_Ioctl_CylHeadSect2Lin(cyl, head, sect, cyl_cnt, head_cnt, sec_cnt), nrsect, data, FALSE))\n                {\n                    SET_AX( context, ERROR_WRITE_FAULT );\n                    SET_CFLAG(context);\n                }\n            }\n            break;\n\n        case 0x084a: /* lock logical volume */\n            TRACE( \"GENERIC IOCTL - Lock logical volume, level %d mode %d - %c:\\n\",\n                   BH_reg(context), DX_reg(context), 'A' + drive );\n            break;\n\n        case 0x0860: /* get device parameters */\n            /* FIXME: we're faking some values here */\n            /* used by w4wgrp's winfile */\n            memset(dataptr, 0, 0x20); /* DOS 6.22 uses 0x20 bytes */\n            dataptr[0] = 0x04;\n            dataptr[6] = 0; /* media type */\n            if (drive > 1)\n            {\n                dataptr[1] = 0x05; /* fixed disk */\n                setword(&dataptr[2], 0x01); /* non removable */\n                setword(&dataptr[4], 0x300); /* # of cylinders */\n            }\n            else\n            {\n                dataptr[1] = 0x07; /* block dev, floppy */\n                setword(&dataptr[2], 0x02); /* removable */\n                setword(&dataptr[4], 80); /* # of cylinders */\n            }\n            CreateBPB(drive, &dataptr[7], TRUE);\n            RESET_CFLAG(context);\n            break;\n\n        case 0x0861: /* read logical device track */\n            TRACE( \"GENERIC IOCTL - Read logical device track - %c:\\n\",\n                   'A' + drive);\n            {\n                WORD head   = *(WORD *)(dataptr+1);\n                WORD cyl    = *(WORD *)(dataptr+3);\n                WORD sect   = *(WORD *)(dataptr+5);\n                WORD nrsect = *(WORD *)(dataptr+7);\n                BYTE *data  = CTX_SEG_OFF_TO_LIN(context, *(WORD *)(dataptr+11), *(WORD *)(dataptr+9));\n                WORD cyl_cnt, head_cnt, sec_cnt;\n\n                /* FIXME: we're faking some values here */\n                if (drive > 1)\n                {\n                    cyl_cnt = 0x300;\n                    head_cnt = 16;\n                    sec_cnt = 255;\n                }\n                else\n                { /* floppy */\n                    cyl_cnt = 80;\n                    head_cnt = 2;\n                    sec_cnt = 18;\n                }\n\n                if (!DOSVM_RawRead(drive, INT21_Ioctl_CylHeadSect2Lin(cyl, head, sect, cyl_cnt, head_cnt, sec_cnt), nrsect, data, FALSE))\n                {\n                    SET_AX( context, ERROR_READ_FAULT );\n                    SET_CFLAG(context);\n                }\n            }\n            break;\n\n        case 0x0866: /* get volume serial number */\n            {\n                WCHAR\tlabel[12],fsname[9];\n                DWORD\tserial;\n                TRACE( \"GENERIC IOCTL - Get media id - %c:\\n\",\n                       'A' + drive );\n\n                GetVolumeInformationW(drivespec, label, 12, &serial, NULL, NULL, fsname, 9);\n                *(WORD*)dataptr\t= 0;\n                memcpy(dataptr+2,&serial,4);\n                WideCharToMultiByte(CP_OEMCP, 0, label, 11, (LPSTR)dataptr + 6, 11, NULL, NULL);\n                WideCharToMultiByte(CP_OEMCP, 0, fsname, 8, (LPSTR)dataptr + 17, 8, NULL, NULL);\n            }\n            break;\n\n        case 0x086a: /* unlock logical volume */\n            TRACE( \"GENERIC IOCTL - Logical volume unlocked - %c:\\n\", \n                   'A' + drive );\n            break;\n\n        case 0x086f: /* get drive map information */\n            memset(dataptr+1, '\\0', dataptr[0]-1);\n            dataptr[1] = dataptr[0];\n            dataptr[2] = 0x07; /* protected mode driver; no eject; no notification */\n            dataptr[3] = 0xFF; /* no physical drive */\n            break;\n\n        case 0x0872:\n            /* Trial and error implementation */\n            SET_AX( context, drivetype == DRIVE_UNKNOWN ? 0x0f : 0x01 );\n            SET_CFLAG(context);\t/* Seems to be set all the time */\n            break;\n\n        default:\n            INT_BARF( context, 0x21 );            \n        }\n        break;\n\n    case 0x0e: /* GET LOGICAL DRIVE MAP */\n        TRACE( \"IOCTL - GET LOGICAL DRIVE MAP - %c:\\n\",\n               'A' + drive );\n        /* FIXME: this is not correct if drive has mappings */\n        SET_AL( context, 0 ); /* drive has no mapping */\n        break;\n\n    case 0x0f: /* SET LOGICAL DRIVE MAP */\n        TRACE(\"IOCTL - SET LOGICAL DRIVE MAP for drive %s\\n\",\n              INT21_DriveName( BL_reg(context)));\n        /* FIXME: as of today, we don't support logical drive mapping... */\n        SET_AL( context, 0 );\n        break;\n\n    case 0x11: /* QUERY GENERIC IOCTL CAPABILITY */\n    default:\n        INT_BARF( context, 0x21 );\n    }\n}\n\n\n/***********************************************************************\n *           INT21_IoctlScsiMgrHandler\n *\n * IOCTL handler for the SCSIMGR device.\n */\nstatic void INT21_IoctlScsiMgrHandler( CONTEXT *context )\n{\n    switch (AL_reg(context))\n    {\n    case 0x00: /* GET DEVICE INFORMATION */\n        SET_DX( context, 0xc0c0 );\n        break;\n\n    case 0x02: /* READ FROM CHARACTER DEVICE CONTROL CHANNEL */\n        DOSVM_ASPIHandler(context);\n        break;\n\n    case 0x0a: /* CHECK IF HANDLE IS REMOTE */\n        SET_DX( context, 0 );\n        break;\n\n    case 0x01: /* SET DEVICE INFORMATION */\n    case 0x03: /* WRITE TO CHARACTER DEVICE CONTROL CHANNEL */\n    case 0x06: /* GET INPUT STATUS */\n    case 0x07: /* GET OUTPUT STATUS */\n    case 0x0c: /* GENERIC CHARACTER DEVICE REQUEST */\n    case 0x10: /* QUERY GENERIC IOCTL CAPABILITY */\n    default:\n        INT_BARF( context, 0x21 );\n        break;\n    }\n}\n\n\n/***********************************************************************\n *           INT21_IoctlHPScanHandler\n *\n * IOCTL handler for the HPSCAN device.\n */\nstatic void INT21_IoctlHPScanHandler( CONTEXT *context )\n{\n    switch (AL_reg(context))\n    {\n    case 0x00: /* GET DEVICE INFORMATION */\n        SET_DX( context, 0xc0c0 );\n        break;\n\n    case 0x0a: /* CHECK IF HANDLE IS REMOTE */\n        SET_DX( context, 0 );\n        break;\n\n    case 0x01: /* SET DEVICE INFORMATION */\n    case 0x02: /* READ FROM CHARACTER DEVICE CONTROL CHANNEL */\n    case 0x03: /* WRITE TO CHARACTER DEVICE CONTROL CHANNEL */\n    case 0x06: /* GET INPUT STATUS */\n    case 0x07: /* GET OUTPUT STATUS */\n    case 0x0c: /* GENERIC CHARACTER DEVICE REQUEST */\n    case 0x10: /* QUERY GENERIC IOCTL CAPABILITY */\n    default:\n        INT_BARF( context, 0x21 );\n        break;\n    }\n}\n\n\n/***********************************************************************\n *           INT21_Ioctl_Char\n *\n * Handler for character device IOCTLs.\n */\nstatic void INT21_Ioctl_Char( CONTEXT *context )\n{\n    int status;\n    BOOL IsConsoleIOHandle = FALSE;\n    IO_STATUS_BLOCK io;\n    FILE_INTERNAL_INFORMATION info;\n    DWORD mode;\n    HANDLE handle = DosFileHandleToWin32Handle(BX_reg(context));\n\n    status = NtQueryInformationFile( handle, &io, &info, sizeof(info), FileInternalInformation );\n    if (status)\n    {\n        if( GetConsoleMode(handle, &mode) )\n            IsConsoleIOHandle = TRUE;\n        else {\n            SET_AX( context, RtlNtStatusToDosError(status) );\n            SET_CFLAG( context );\n            return;\n        }\n    } else {\n        UINT i;\n        for (i = 0; i < ARRAY_SIZE(magic_devices); i++)\n        {\n            if (!magic_devices[i].handle) continue;\n            if (magic_devices[i].index.QuadPart == info.IndexNumber.QuadPart)\n            {\n                /* found it */\n                magic_devices[i].ioctl_handler( context );\n                return;\n            }\n        }\n    }\n\n    /* no magic device found, do default handling */\n\n    switch (AL_reg(context))\n    {\n    case 0x00: /* GET DEVICE INFORMATION */\n        TRACE( \"IOCTL - GET DEVICE INFORMATION - %d\\n\", BX_reg(context) );\n        if (IsConsoleIOHandle || GetFileType(handle) == FILE_TYPE_CHAR)\n        {\n            /*\n             * Returns attribute word in DX: \n             *   Bit 14 - Device driver can process IOCTL requests.\n             *   Bit 13 - Output until busy supported.\n             *   Bit 11 - Driver supports OPEN/CLOSE calls.\n             *   Bit  8 - Unknown.\n             *   Bit  7 - Set (indicates device).\n             *   Bit  6 - EOF on input.\n             *   Bit  5 - Raw (binary) mode.\n             *   Bit  4 - Device is special (uses int29).\n             *   Bit  3 - Clock device.\n             *   Bit  2 - NUL device.\n             *   Bit  1 - Console output device.\n             *   Bit  0 - Console input device.\n             */\n            SET_DX( context, IsConsoleIOHandle ? 0x80c3 : 0x80c0 /* FIXME */ );\n        }\n        else\n        {\n            /*\n             * Returns attribute word in DX: \n             *   Bit 15    - File is remote.\n             *   Bit 14    - Don't set file date/time on closing.\n             *   Bit 11    - Media not removable.\n             *   Bit  8    - Generate int24 if no disk space on write \n             *               or read past end of file\n             *   Bit  7    - Clear (indicates file).\n             *   Bit  6    - File has not been written.\n             *   Bit  5..0 - Drive number (0=A:,...)\n             *\n             * FIXME: Should check if file is on remote or removable drive.\n             * FIXME: Should use drive file is located on (and not current).\n             */\n            SET_DX( context, 0x0140 + INT21_GetCurrentDrive() );\n        }\n        break;\n\n    case 0x0a: /* CHECK IF HANDLE IS REMOTE */\n        TRACE( \"IOCTL - CHECK IF HANDLE IS REMOTE - %d\\n\", BX_reg(context) );\n        /*\n         * Returns attribute word in DX:\n         *   Bit 15 - Set if remote.\n         *   Bit 14 - Set if date/time not set on close.\n         *\n         * FIXME: Should check if file is on remote drive.\n         */\n        SET_DX( context, 0 );\n        break;\n\n    case 0x01: /* SET DEVICE INFORMATION */\n    case 0x02: /* READ FROM CHARACTER DEVICE CONTROL CHANNEL */\n    case 0x03: /* WRITE TO CHARACTER DEVICE CONTROL CHANNEL */\n    case 0x06: /* GET INPUT STATUS */\n    case 0x07: /* GET OUTPUT STATUS */\n    case 0x0c: /* GENERIC CHARACTER DEVICE REQUEST */\n    case 0x10: /* QUERY GENERIC IOCTL CAPABILITY */\n    default:\n        INT_BARF( context, 0x21 );\n        break;\n    }\n}\n\n\n/***********************************************************************\n *           INT21_Ioctl\n *\n * Handler for function 0x44.\n */\nstatic void INT21_Ioctl( CONTEXT *context )\n{\n    switch (AL_reg(context))\n    {\n    case 0x00:\n    case 0x01:\n    case 0x02:\n    case 0x03:\n        INT21_Ioctl_Char( context );\n        break;\n\n    case 0x04:\n    case 0x05:\n        INT21_Ioctl_Block( context );\n        break;\n\n    case 0x06:\n    case 0x07:\n        INT21_Ioctl_Char( context );\n        break;\n\n    case 0x08:\n    case 0x09:\n        INT21_Ioctl_Block( context );\n        break;\n\n    case 0x0a:\n        INT21_Ioctl_Char( context );\n        break;\n\n    case 0x0b: /* SET SHARING RETRY COUNT */\n        TRACE( \"SET SHARING RETRY COUNT: Pause %d, retries %d.\\n\",\n               CX_reg(context), DX_reg(context) );\n        if (!CX_reg(context))\n        {\n            SET_AX( context, 1 );\n            SET_CFLAG( context );\n        }\n        else\n        {\n            DOSDEV_SetSharingRetry( CX_reg(context), DX_reg(context) );\n            RESET_CFLAG( context );\n        }\n        break;\n\n    case 0x0c:\n        INT21_Ioctl_Char( context );\n        break;\n\n    case 0x0d:\n    case 0x0e:\n    case 0x0f:\n        INT21_Ioctl_Block( context );\n        break;\n\n    case 0x10:\n        INT21_Ioctl_Char( context );\n        break;\n\n    case 0x11:\n        INT21_Ioctl_Block( context );\n        break;\n\n    case 0x12: /*  DR DOS - DETERMINE DOS TYPE (OBSOLETE FUNCTION) */\n        TRACE( \"DR DOS - DETERMINE DOS TYPE (OBSOLETE FUNCTION)\\n\" );\n        SET_CFLAG(context);        /* Error / This is not DR DOS. */\n        SET_AX( context, 0x0001 ); /* Invalid function */\n        break;\n\n    case 0x52: /* DR DOS - DETERMINE DOS TYPE */\n        TRACE( \"DR DOS - DETERMINE DOS TYPE\\n\" );\n        SET_CFLAG(context);        /* Error / This is not DR DOS. */\n        SET_AX( context, 0x0001 ); /* Invalid function */\n        break;\n\n    case 0xe0:  /* Sun PC-NFS API */\n        TRACE( \"Sun PC-NFS API\\n\" );\n        /* not installed */\n        break;\n\n    default:\n        INT_BARF( context, 0x21 );\n    }\n}\n\n\n/***********************************************************************\n *           INT21_Fat32\n *\n * Handler for function 0x73.\n */\nstatic BOOL INT21_Fat32( CONTEXT *context )\n{\n    switch (AL_reg(context))\n    {\n    case 0x02: /* FAT32 - GET EXTENDED DPB */\n        {\n            BYTE drive = INT21_MapDrive( DL_reg(context) );\n            WORD *ptr = CTX_SEG_OFF_TO_LIN(context, \n                                           context->SegEs, context->Edi);\n            INT21_DPB *target = (INT21_DPB*)(ptr + 1);\n            INT21_DPB *source;\n\n            TRACE( \"FAT32 - GET EXTENDED DPB %d\\n\", DL_reg(context) );\n\n            if ( CX_reg(context) < sizeof(INT21_DPB) + 2 || *ptr < sizeof(INT21_DPB) )\n            {\n                SetLastError( ERROR_BAD_LENGTH );\n                return FALSE;\n            }\n\n            if ( !INT21_FillDrivePB( drive ) )\n            {\n                SetLastError( ERROR_INVALID_DRIVE );\n                return FALSE;\n            }\n\n            source = &INT21_GetHeapPointer()->misc_dpb_list[drive];\n\n            *ptr = sizeof(INT21_DPB);\n            *target = *source;\n\n            if (LOWORD(context->Esi) != 0xF1A6)\n            {\n                target->driver_header = 0;\n                target->next          = 0;\n            }\n            else\n            {\n                FIXME( \"Caller requested driver and next DPB pointers!\\n\" );\n            }\n        }\n        break;\n\n    case 0x03: /* FAT32 - GET EXTENDED FREE SPACE ON DRIVE */\n        {\n            WCHAR dirW[MAX_PATH];\n            char *dirA = CTX_SEG_OFF_TO_LIN( context,\n                                             context->SegDs, context->Edx );\n            BYTE *data = CTX_SEG_OFF_TO_LIN( context, \n                                             context->SegEs, context->Edi );\n            DWORD cluster_sectors;\n            DWORD sector_bytes;\n            DWORD free_clusters;\n            DWORD total_clusters;\n\n            TRACE( \"FAT32 - GET EXTENDED FREE SPACE ON DRIVE %s\\n\", dirA );\n            MultiByteToWideChar(CP_OEMCP, 0, dirA, -1, dirW, MAX_PATH);\n\n            if (CX_reg(context) < 44)\n            {\n                SetLastError( ERROR_BAD_LENGTH );\n                return FALSE;\n            }\n\n            if (!GetDiskFreeSpaceW( dirW, &cluster_sectors, &sector_bytes,\n                                    &free_clusters, &total_clusters ))\n                return FALSE;\n\n            *(WORD*) (data +  0) = 44; /* size of structure */\n            *(WORD*) (data +  2) = 0;  /* version */\n            *(DWORD*)(data +  4) = cluster_sectors;\n            *(DWORD*)(data +  8) = sector_bytes;\n            *(DWORD*)(data + 12) = free_clusters;\n            *(DWORD*)(data + 16) = total_clusters;\n\n            /*\n             * Below we have free/total sectors and\n             * free/total allocation units without adjustment\n             * for compression. We fake both using cluster information.\n             */\n            *(DWORD*)(data + 20) = free_clusters * cluster_sectors;\n            *(DWORD*)(data + 24) = total_clusters * cluster_sectors;\n            *(DWORD*)(data + 28) = free_clusters;\n            *(DWORD*)(data + 32) = total_clusters;\n            \n            /*\n             * Between (data + 36) and (data + 43) there\n             * are eight reserved bytes.\n             */\n        }\n        break;\n\n    default:\n        INT_BARF( context, 0x21 );\n    }\n\n    return TRUE;\n}\n\nstatic void INT21_ConvertFindDataWtoA(WIN32_FIND_DATAA *dataA,\n                                      const WIN32_FIND_DATAW *dataW)\n{\n    dataA->dwFileAttributes = dataW->dwFileAttributes;\n    dataA->ftCreationTime   = dataW->ftCreationTime;\n    dataA->ftLastAccessTime = dataW->ftLastAccessTime;\n    dataA->ftLastWriteTime  = dataW->ftLastWriteTime;\n    dataA->nFileSizeHigh    = dataW->nFileSizeHigh;\n    dataA->nFileSizeLow     = dataW->nFileSizeLow;\n    WideCharToMultiByte( CP_OEMCP, 0, dataW->cFileName, -1,\n                         dataA->cFileName, sizeof(dataA->cFileName), NULL, NULL );\n    WideCharToMultiByte( CP_OEMCP, 0, dataW->cAlternateFileName, -1,\n                         dataA->cAlternateFileName, sizeof(dataA->cAlternateFileName), NULL, NULL );\n}\n\n/***********************************************************************\n *           INT21_LongFilename\n *\n * Handler for function 0x71.\n */\nstatic void INT21_LongFilename( CONTEXT *context )\n{\n    BOOL bSetDOSExtendedError = FALSE;\n    WCHAR pathW[MAX_PATH];\n    char* pathA;\n\n    switch (AL_reg(context))\n    {\n    case 0x0d: /* RESET DRIVE */\n        INT_BARF( context, 0x21 );\n        break;\n\n    case 0x39: /* LONG FILENAME - MAKE DIRECTORY */\n        if (!INT21_CreateDirectory( context ))\n            bSetDOSExtendedError = TRUE;\n        break;\n\n    case 0x3a: /* LONG FILENAME - REMOVE DIRECTORY */\n        pathA = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx);\n\n        TRACE( \"LONG FILENAME - REMOVE DIRECTORY %s\\n\", pathA);\n        MultiByteToWideChar(CP_OEMCP, 0, pathA, -1, pathW, MAX_PATH);\n        if (!RemoveDirectoryW( pathW )) bSetDOSExtendedError = TRUE;\n        break;\n\n    case 0x3b: /* LONG FILENAME - CHANGE DIRECTORY */\n        if (!INT21_SetCurrentDirectory( context ))\n            bSetDOSExtendedError = TRUE;\n        break;\n\n    case 0x41: /* LONG FILENAME - DELETE FILE */\n        pathA = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx);\n\n        TRACE( \"LONG FILENAME - DELETE FILE %s\\n\", pathA );\n        MultiByteToWideChar(CP_OEMCP, 0, pathA, -1, pathW, MAX_PATH);\n\n        if (!DeleteFileW( pathW )) bSetDOSExtendedError = TRUE;\n        break;\n\n    case 0x43: /* LONG FILENAME - EXTENDED GET/SET FILE ATTRIBUTES */\n        if (!INT21_FileAttributes( context, BL_reg(context), TRUE ))\n            bSetDOSExtendedError = TRUE;\n        break;\n\n    case 0x47: /* LONG FILENAME - GET CURRENT DIRECTORY */\n        if (!INT21_GetCurrentDirectory( context, TRUE ))\n            bSetDOSExtendedError = TRUE;\n        break;\n\n    case 0x4e: /* LONG FILENAME - FIND FIRST MATCHING FILE */\n        {\n            HANDLE              handle;\n            HGLOBAL16           h16;\n            WIN32_FIND_DATAW    dataW;\n            WIN32_FIND_DATAA*   dataA;\n\n            pathA = CTX_SEG_OFF_TO_LIN(context, context->SegDs,context->Edx);\n            TRACE(\" LONG FILENAME - FIND FIRST MATCHING FILE for %s\\n\", pathA);\n\n            MultiByteToWideChar(CP_OEMCP, 0, pathA, -1, pathW, MAX_PATH);\n            handle = FindFirstFileW(pathW, &dataW);\n\n            dataA = CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edi);\n            if (handle != INVALID_HANDLE_VALUE && \n                (h16 = GlobalAlloc16(GMEM_MOVEABLE, sizeof(handle))))\n            {\n                HANDLE* ptr = GlobalLock16( h16 );\n                *ptr = handle;\n                WIN32_GlobalUnlock16( h16 );\n                SET_AX( context, h16 );\n                INT21_ConvertFindDataWtoA(dataA, &dataW);\n            }\n            else\n            {           \n                if (handle != INVALID_HANDLE_VALUE) FindClose(handle);\n                SET_AX( context, INVALID_HANDLE_VALUE16);\n                bSetDOSExtendedError = TRUE;\n            }\n        }\n        break;\n\n    case 0x4f: /* LONG FILENAME - FIND NEXT MATCHING FILE */\n        {\n            HGLOBAL16           h16 = BX_reg(context);\n            HANDLE*             ptr;\n            WIN32_FIND_DATAW    dataW;\n            WIN32_FIND_DATAA*   dataA;\n\n            TRACE(\"LONG FILENAME - FIND NEXT MATCHING FILE for handle %d\\n\",\n                  BX_reg(context));\n\n            dataA = CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edi);\n\n            if (h16 != INVALID_HANDLE_VALUE16 && (ptr = GlobalLock16( h16 )))\n            {\n                if (!FindNextFileW(*ptr, &dataW)) bSetDOSExtendedError = TRUE;\n                else INT21_ConvertFindDataWtoA(dataA, &dataW);\n                WIN32_GlobalUnlock16( h16 );\n            }\n            else\n            {\n                SetLastError( ERROR_INVALID_HANDLE );\n                bSetDOSExtendedError = TRUE;\n            }\n        }\n        break;\n\n    case 0x56: /* LONG FILENAME - RENAME FILE */\n        if (!INT21_RenameFile(context))\n            bSetDOSExtendedError = TRUE;\n        break;\n\n    case 0x60: /* LONG FILENAME - CONVERT PATH */\n        {\n            WCHAR   res[MAX_PATH];\n\n            switch (CL_reg(context))\n            {\n            case 0x00:  /* \"truename\" - Canonicalize path */\n                /* \n                 * FIXME: This is not 100% equal to 0x01 case, \n                 *        if you fix this, fix int21 subfunction 0x60, too.\n                 */\n\n            case 0x01:  /* Get short filename or path */\n                MultiByteToWideChar(CP_OEMCP, 0, CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Esi), -1, pathW, MAX_PATH);\n                if (!GetShortPathNameW(pathW, res, 67))\n                    bSetDOSExtendedError = TRUE;\n                else\n                {\n                    SET_AX( context, 0 );\n                    WideCharToMultiByte(CP_OEMCP, 0, res, -1, \n                                        CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edi), \n                                        67, NULL, NULL);\n                }\n                break;\n\t    \n            case 0x02:  /* Get canonical long filename or path */\n                MultiByteToWideChar(CP_OEMCP, 0, CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Esi), -1, pathW, MAX_PATH);\n                if (!GetFullPathNameW(pathW, 128, res, NULL))\n                    bSetDOSExtendedError = TRUE;\n                else\n                {\n                    SET_AX( context, 0 );\n                    WideCharToMultiByte(CP_OEMCP, 0, res, -1, \n                                        CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edi), \n                                        128, NULL, NULL);\n                }\n                break;\n            default:\n                FIXME(\"Unimplemented long file name function:\\n\");\n                INT_BARF( context, 0x21 );\n                SET_CFLAG(context);\n                SET_AL( context, 0 );\n                break;\n            }\n        }\n        break;\n\n    case 0x6c: /* LONG FILENAME - CREATE OR OPEN FILE */\n        if (!INT21_CreateFile( context, context->Esi, TRUE,\n                               BX_reg(context), DL_reg(context) ))\n            bSetDOSExtendedError = TRUE;\n        break;\n\n    case 0xa0: /* LONG FILENAME - GET VOLUME INFORMATION */\n        {\n            DWORD filename_len, flags;\n            WCHAR dstW[8];\n\n            pathA = CTX_SEG_OFF_TO_LIN(context, context->SegDs,context->Edx);\n\n            TRACE(\"LONG FILENAME - GET VOLUME INFORMATION for drive having root dir '%s'.\\n\", pathA);\n            SET_AX( context, 0 );\n            MultiByteToWideChar(CP_OEMCP, 0, pathA, -1, pathW, MAX_PATH);\n            if (!GetVolumeInformationW( pathW, NULL, 0, NULL, &filename_len,\n                                        &flags, dstW, 8 ))\n            {\n                INT_BARF( context, 0x21 );\n                SET_CFLAG(context);\n                break;\n            }\n            SET_BX( context, flags | 0x4000 ); /* support for LFN functions */\n            SET_CX( context, filename_len );\n            SET_DX( context, MAX_PATH ); /* FIXME: which len if DRIVE_SHORT_NAMES ? */\n            WideCharToMultiByte(CP_OEMCP, 0, dstW, -1, \n                                CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edi), \n                                8, NULL, NULL);\n        }\n        break;\n\n    case 0xa1: /* LONG FILENAME - \"FindClose\" - TERMINATE DIRECTORY SEARCH */\n        {\n            HGLOBAL16 h16 = BX_reg(context);\n            HANDLE* ptr;\n\n            TRACE(\"LONG FILENAME - FINDCLOSE for handle %d\\n\",\n                  BX_reg(context));\n            if (h16 != INVALID_HANDLE_VALUE16 && (ptr = GlobalLock16( h16 )))\n            {\n                if (!FindClose( *ptr )) bSetDOSExtendedError = TRUE;\n                WIN32_GlobalUnlock16( h16 );\n                GlobalFree16( h16 );\n            }\n            else\n            {\n                SetLastError( ERROR_INVALID_HANDLE );\n                bSetDOSExtendedError = TRUE;\n            }\n        }\n        break;\n          \n    case 0xa6: /* LONG FILENAME - GET FILE INFO BY HANDLE */\n        {\n            HANDLE handle = DosFileHandleToWin32Handle(BX_reg(context));\n            BY_HANDLE_FILE_INFORMATION *info =\n                CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx);\n            \n            TRACE( \"LONG FILENAME - GET FILE INFO BY HANDLE\\n\" );\n            \n            if (!GetFileInformationByHandle(handle, info))\n                bSetDOSExtendedError = TRUE;\n        }\n        break;\n\n    case 0xa7: /* LONG FILENAME - CONVERT TIME */\n        switch (BL_reg(context))\n        {\n        case 0x00: /* FILE TIME TO DOS TIME */\n            {\n                WORD      date, time;\n                FILETIME *filetime = CTX_SEG_OFF_TO_LIN(context,\n                                                        context->SegDs,\n                                                        context->Esi);\n\n                TRACE( \"LONG FILENAME - FILE TIME TO DOS TIME\\n\" );\n\n                FileTimeToDosDateTime( filetime, &date, &time );\n\n                SET_DX( context, date );\n                SET_CX( context, time );\n\n                /*\n                 * FIXME: BH has number of 10-millisecond units \n                 * past time in CX.\n                 */\n                SET_BH( context, 0 );\n            }\n            break;\n\n        case 0x01: /* DOS TIME TO FILE TIME */\n            {\n                FILETIME *filetime = CTX_SEG_OFF_TO_LIN(context,\n                                                        context->SegEs,\n                                                        context->Edi);\n\n                TRACE( \"LONG FILENAME - DOS TIME TO FILE TIME\\n\" );\n\n                /*\n                 * FIXME: BH has number of 10-millisecond units \n                 * past time in CX.\n                 */\n                DosDateTimeToFileTime( DX_reg(context), CX_reg(context),\n                                       filetime );\n            }\n            break;\n\n        default:\n            INT_BARF( context, 0x21 );\n            break;\n        }\n        break;\n\n    case 0xa8: /* LONG FILENAME - GENERATE SHORT FILENAME */\n    case 0xa9: /* LONG FILENAME - SERVER CREATE OR OPEN FILE */\n    case 0xaa: /* LONG FILENAME - SUBST */\n    default:\n        FIXME(\"Unimplemented long file name function:\\n\");\n        INT_BARF( context, 0x21 );\n        SET_CFLAG(context);\n        SET_AL( context, 0 );\n        break;\n    }\n\n    if (bSetDOSExtendedError)\n    {\n        SET_AX( context, GetLastError() );\n        SET_CFLAG( context );\n    }\n}\n\n\n/***********************************************************************\n *           INT21_RenameFile\n *\n * Handler for:\n * - function 0x56\n * - subfunction 0x56 of function 0x71\n * - subfunction 0xff of function 0x43 (CL == 0x56)\n */\nstatic BOOL INT21_RenameFile( CONTEXT *context )\n{\n    WCHAR fromW[MAX_PATH];\n    WCHAR toW[MAX_PATH];\n    char *fromA = CTX_SEG_OFF_TO_LIN(context, \n                                     context->SegDs,context->Edx);\n    char *toA = CTX_SEG_OFF_TO_LIN(context, \n                                   context->SegEs,context->Edi);\n\n    TRACE( \"RENAME FILE %s to %s\\n\", fromA, toA );\n    MultiByteToWideChar(CP_OEMCP, 0, fromA, -1, fromW, MAX_PATH);\n    MultiByteToWideChar(CP_OEMCP, 0, toA, -1, toW, MAX_PATH);\n\n    return MoveFileW( fromW, toW );\n}\n\n\n/***********************************************************************\n *           INT21_NetworkFunc\n *\n * Handler for:\n * - function 0x5e\n */\nstatic BOOL INT21_NetworkFunc (CONTEXT *context)\n{\n    switch (AL_reg(context)) \n    {\n    case 0x00: /* Get machine name. */\n        {\n            WCHAR dstW[MAX_COMPUTERNAME_LENGTH + 1];\n            DWORD s = ARRAY_SIZE(dstW);\n            int len;\n\n            char *dst = CTX_SEG_OFF_TO_LIN (context,context->SegDs,context->Edx);\n            TRACE(\"getting machine name to %p\\n\", dst);\n            if (!GetComputerNameW(dstW, &s) ||\n                !WideCharToMultiByte(CP_OEMCP, 0, dstW, -1, dst, 16, NULL, NULL))\n            {\n                WARN(\"failed!\\n\");\n                SetLastError( ER_NoNetwork );\n                return TRUE;\n            }\n            for (len = strlen(dst); len < 15; len++) dst[len] = ' ';\n            dst[15] = 0;\n            SET_CH( context, 1 ); /* Valid */\n            SET_CL( context, 1 ); /* NETbios number??? */\n            TRACE(\"returning %s\\n\", debugstr_an(dst, 16));\n            return FALSE;\n        }\n\n    default:\n        SetLastError( ER_NoNetwork );\n        return TRUE;\n    }\n}\n\n/******************************************************************\n *\t\tINT21_GetDiskSerialNumber\n *\n */\nstatic int INT21_GetDiskSerialNumber( CONTEXT *context )\n{\n    BYTE *dataptr = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx);\n    WCHAR path[] = {'A',':','\\\\',0}, label[11];\n    DWORD serial;\n\n    path[0] += INT21_MapDrive(BL_reg(context));\n    if (!GetVolumeInformationW( path, label, 11, &serial, NULL, NULL, NULL, 0))\n    {\n        SetLastError( ERROR_INVALID_DRIVE );\n        return 0;\n    }\n\n    *(WORD *)dataptr = 0;\n    memcpy(dataptr + 2, &serial, sizeof(DWORD));\n    WideCharToMultiByte(CP_OEMCP, 0, label, 11, (LPSTR)dataptr + 6, 11, NULL, NULL);\n    memcpy(dataptr + 17, \"FAT16   \", 8);\n    return 1;\n}\n\n\n/******************************************************************\n *\t\tINT21_SetDiskSerialNumber\n *\n */\nstatic BOOL INT21_SetDiskSerialNumber( CONTEXT *context )\n{\n#if 0\n    BYTE *dataptr = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx);\n    int drive = INT21_MapDrive(BL_reg(context));\n\n    if (!is_valid_drive(drive))\n    {\n        SetLastError( ERROR_INVALID_DRIVE );\n        return FALSE;\n    }\n\n    DRIVE_SetSerialNumber( drive, *(DWORD *)(dataptr + 2) );\n    return TRUE;\n#else\n    FIXME(\"Setting drive serial number is no longer supported\\n\");\n    SetLastError( ERROR_NOT_SUPPORTED );\n    return FALSE;\n#endif\n}\n\n\n/******************************************************************\n *\t\tINT21_GetFreeDiskSpace\n *\n */\nstatic BOOL INT21_GetFreeDiskSpace( CONTEXT *context )\n{\n    DWORD cluster_sectors, sector_bytes, free_clusters, total_clusters;\n    WCHAR root[] = {'A',':','\\\\',0};\n    const DWORD max_clusters = 0x3d83;\n    const DWORD max_sectors_per_cluster = 0x7f;\n    const DWORD max_bytes_per_sector = 0x200;\n\n    root[0] += INT21_MapDrive(DL_reg(context));\n    if (!GetDiskFreeSpaceW( root, &cluster_sectors, &sector_bytes,\n                            &free_clusters, &total_clusters ))\n        return FALSE;\n\n    /* Some old win31 apps (Lotus SmartSuite 5.1) crap out if there's too\n     * much disk space, so Windows XP seems to apply the following limits:\n     *  cluster_sectors <= 0x7f\n     *  sector size <= 0x200\n     *  clusters <= 0x3D83\n     * This means total reported space is limited to about 1GB.\n     */\n\n    /* Make sure bytes-per-sector is in [, max] */\n    while (sector_bytes > max_bytes_per_sector) {\n        sector_bytes >>= 1;\n        free_clusters <<= 1;\n        total_clusters <<= 1;\n    }\n    /* Then make sure sectors-per-cluster is in [max/2, max]. */\n    while (cluster_sectors <= max_sectors_per_cluster/2) {\n        cluster_sectors <<= 1;\n        free_clusters >>= 1;\n        total_clusters >>= 1;\n    }\n    while (cluster_sectors > max_sectors_per_cluster) {\n        cluster_sectors >>= 1;\n        free_clusters <<= 1;\n        total_clusters <<= 1;\n    }\n\n    /* scale up sectors_per_cluster to exactly max_sectors_per_cluster.\n     * We could skip this, but that would impose an artificially low\n     * limit on reported disk space.\n     * To avoid overflow, first apply a preliminary cap on sector count;\n     * this will not affect the correctness of the final result,\n     * because if the preliminary cap hits, the final one will, too.\n     */\n    if (total_clusters > 4 * max_clusters)\n        total_clusters = 4 * max_clusters;\n    if (free_clusters > 4 * max_clusters)\n        free_clusters = 4 * max_clusters;\n    if (cluster_sectors < max_sectors_per_cluster) {\n        free_clusters *= cluster_sectors;\n        free_clusters /= max_sectors_per_cluster;\n        total_clusters *= cluster_sectors;\n        total_clusters /= max_sectors_per_cluster;\n        cluster_sectors = max_sectors_per_cluster;\n    }\n\n    /* Finally, apply real cluster count cap. */\n    if (total_clusters > max_clusters)\n        total_clusters = max_clusters;\n    if (free_clusters > max_clusters)\n        free_clusters = max_clusters;\n\n    SET_AX( context, cluster_sectors );\n    SET_BX( context, free_clusters );\n    SET_CX( context, sector_bytes );\n    SET_DX( context, total_clusters );\n    return TRUE;\n}\n\n/******************************************************************\n *\t\tINT21_GetDriveAllocInfo\n *\n */\nstatic BOOL INT21_GetDriveAllocInfo( CONTEXT *context, BYTE drive )\n{\n    INT21_DPB  *dpb;\n\n    drive = INT21_MapDrive( drive );\n    if (!INT21_FillDrivePB( drive )) return FALSE;\n    dpb = &(INT21_GetHeapPointer()->misc_dpb_list[drive]);\n    SET_AL( context, dpb->cluster_sectors + 1 );\n    SET_CX( context, dpb->sector_bytes );\n    SET_DX( context, dpb->num_clusters1 );\n\n    context->SegDs = INT21_GetHeapSelector( context );\n    SET_BX( context, offsetof( INT21_HEAP, misc_dpb_list[drive].media_ID ) );\n    return TRUE;\n}\n\n/***********************************************************************\n *           INT21_GetExtendedError\n */\nstatic void INT21_GetExtendedError( CONTEXT *context )\n{\n    BYTE class, action, locus;\n    WORD error = GetLastError();\n\n    switch(error)\n    {\n    case ERROR_SUCCESS:\n        class = action = locus = 0;\n        break;\n    case ERROR_DIR_NOT_EMPTY:\n        class  = EC_Exists;\n        action = SA_Ignore;\n        locus  = EL_Disk;\n        break;\n    case ERROR_ACCESS_DENIED:\n        class  = EC_AccessDenied;\n        action = SA_Abort;\n        locus  = EL_Disk;\n        break;\n    case ERROR_CANNOT_MAKE:\n        class  = EC_AccessDenied;\n        action = SA_Abort;\n        locus  = EL_Unknown;\n        break;\n    case ERROR_DISK_FULL:\n    case ERROR_HANDLE_DISK_FULL:\n        class  = EC_MediaError;\n        action = SA_Abort;\n        locus  = EL_Disk;\n        break;\n    case ERROR_FILE_EXISTS:\n    case ERROR_ALREADY_EXISTS:\n        class  = EC_Exists;\n        action = SA_Abort;\n        locus  = EL_Disk;\n        break;\n    case ERROR_FILE_NOT_FOUND:\n    case ERROR_PATH_NOT_FOUND:\n    case ERROR_INVALID_NAME:\n        class  = EC_NotFound;\n        action = SA_Abort;\n        locus  = EL_Disk;\n        break;\n    case ERROR_GEN_FAILURE:\n        class  = EC_SystemFailure;\n        action = SA_Abort;\n        locus  = EL_Unknown;\n        break;\n    case ERROR_INVALID_DRIVE:\n        class  = EC_MediaError;\n        action = SA_Abort;\n        locus  = EL_Disk;\n        break;\n    case ERROR_INVALID_HANDLE:\n        class  = EC_ProgramError;\n        action = SA_Abort;\n        locus  = EL_Disk;\n        break;\n    case ERROR_LOCK_VIOLATION:\n        class  = EC_AccessDenied;\n        action = SA_Abort;\n        locus  = EL_Disk;\n        break;\n    case ERROR_NO_MORE_FILES:\n        class  = EC_NotFound;\n        action = SA_Prompt;\n        locus  = EL_Disk;\n        break;\n    case ER_NoNetwork:\n        class  = EC_NotFound;\n        action = SA_Abort;\n        locus  = EL_Network;\n        break;\n    case ERROR_NOT_ENOUGH_MEMORY:\n        class  = EC_OutOfResource;\n        action = SA_Abort;\n        locus  = EL_Memory;\n        break;\n    case ERROR_SEEK:\n        class  = EC_NotFound;\n        action = SA_Ignore;\n        locus  = EL_Disk;\n        break;\n    case ERROR_SHARING_VIOLATION:\n        class  = EC_Temporary;\n        action = SA_Retry;\n        locus  = EL_Disk;\n        break;\n    case ERROR_TOO_MANY_OPEN_FILES:\n        class  = EC_ProgramError;\n        action = SA_Abort;\n        locus  = EL_Disk;\n        break;\n    default:\n        FIXME(\"Unknown error %d\\n\", error );\n        class  = EC_SystemFailure;\n        action = SA_Abort;\n        locus  = EL_Unknown;\n        break;\n    }\n    TRACE(\"GET EXTENDED ERROR code 0x%02x class 0x%02x action 0x%02x locus %02x\\n\",\n           error, class, action, locus );\n    SET_AX( context, error );\n    SET_BH( context, class );\n    SET_BL( context, action );\n    SET_CH( context, locus );\n}\n\nstatic BOOL INT21_CreateTempFile( CONTEXT *context )\n{\n    static int counter = 0;\n    char *name = CTX_SEG_OFF_TO_LIN(context,  context->SegDs, context->Edx );\n    char *p = name + strlen(name);\n\n    /* despite what Ralf Brown says, some programs seem to call without\n     * ending backslash (DOS accepts that, so we accept it too) */\n    if ((p == name) || (p[-1] != '\\\\')) *p++ = '\\\\';\n\n    for (;;)\n    {\n        sprintf( p, \"wine%04x.%03d\", (int)getpid(), counter );\n        counter = (counter + 1) % 1000;\n\n        SET_AX( context, \n                Win32HandleToDosFileHandle( \n                    CreateFileA( name, GENERIC_READ | GENERIC_WRITE,\n                                 FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,\n                                 CREATE_NEW, 0, 0 ) ) );\n        if (AX_reg(context) != HFILE_ERROR16)\n        {\n            TRACE(\"created %s\\n\", name );\n            return TRUE;\n        }\n        if (GetLastError() != ERROR_FILE_EXISTS) return FALSE;\n    }\n}\n\n/***********************************************************************\n *           DOSFS_ToDosFCBFormat\n *\n * Convert a file name to DOS FCB format (8+3 chars, padded with blanks),\n * expanding wild cards and converting to upper-case in the process.\n * File name can be terminated by '\\0', '\\\\' or '/'.\n * Return FALSE if the name is not a valid DOS name.\n * 'buffer' must be at least 12 characters long.\n */\n/* Chars we don't want to see in DOS file names */\nstatic BOOL INT21_ToDosFCBFormat( LPCWSTR name, LPWSTR buffer )\n{\n    static const WCHAR invalid_chars[] = {'*','?','<','>','|','\\\\','\"','+','=',',',';','[',']',' ','\\345',0};\n    LPCWSTR p = name;\n    int i;\n\n    /* Check for \".\" and \"..\" */\n    if (*p == '.')\n    {\n        p++;\n        buffer[0] = '.';\n        for(i = 1; i < 11; i++) buffer[i] = ' ';\n        buffer[11] = 0;\n        if (*p == '.')\n        {\n            buffer[1] = '.';\n            p++;\n        }\n        return (!*p || (*p == '/') || (*p == '\\\\'));\n    }\n\n    for (i = 0; i < 8; i++)\n    {\n        switch(*p)\n        {\n        case '\\0':\n        case '\\\\':\n        case '/':\n        case '.':\n            buffer[i] = ' ';\n            break;\n        case '?':\n            p++;\n            /* fall through */\n        case '*':\n            buffer[i] = '?';\n            break;\n        default:\n            if (strchrW( invalid_chars, *p )) return FALSE;\n            buffer[i] = toupperW(*p);\n            p++;\n            break;\n        }\n    }\n\n    if (*p == '*')\n    {\n        /* Skip all chars after wildcard up to first dot */\n        while (*p && (*p != '/') && (*p != '\\\\') && (*p != '.')) p++;\n    }\n    else\n    {\n        /* Check if name too long */\n        if (*p && (*p != '/') && (*p != '\\\\') && (*p != '.')) return FALSE;\n    }\n    if (*p == '.') p++;  /* Skip dot */\n\n    for (i = 8; i < 11; i++)\n    {\n        switch(*p)\n        {\n        case '\\0':\n        case '\\\\':\n        case '/':\n            buffer[i] = ' ';\n            break;\n        case '.':\n            return FALSE;  /* Second extension not allowed */\n        case '?':\n            p++;\n            /* fall through */\n        case '*':\n            buffer[i] = '?';\n            break;\n        default:\n            if (strchrW( invalid_chars, *p )) return FALSE;\n            buffer[i] = toupperW(*p);\n            p++;\n            break;\n        }\n    }\n    buffer[11] = '\\0';\n\n    /* at most 3 character of the extension are processed\n     * is something behind this ?\n     */\n    while (*p == '*' || *p == ' ') p++; /* skip wildcards and spaces */\n    return (!*p || (*p == '/') || (*p == '\\\\'));\n}\n\nstatic HANDLE       INT21_FindHandle;\nstatic const WCHAR *INT21_FindPath; /* will point to current dta->fullPath search */\n\n/******************************************************************\n *\t\tINT21_FindFirst\n */\nstatic BOOL INT21_FindFirst( CONTEXT *context )\n{\n    WCHAR *p, *q;\n    const char *path;\n    FINDFILE_DTA *dta = (FINDFILE_DTA *)INT21_GetCurrentDTA(context);\n    WCHAR maskW[12], pathW[MAX_PATH];\n    static const WCHAR wildcardW[] = {'*','.','*',0};\n\n    path = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx);\n    MultiByteToWideChar(CP_OEMCP, 0, path, -1, pathW, MAX_PATH);\n\n    p = strrchrW( pathW, '\\\\');\n    q = strrchrW( pathW, '/');\n    if (q>p) p = q;\n    if (!p)\n    {\n        if (pathW[0] && pathW[1] == ':') p = pathW + 2;\n        else p = pathW;\n    }\n    else p++;\n\n    /* Note: terminating NULL in dta->mask overwrites dta->search_attr\n     *       (doesn't matter as it is set below anyway)\n     */\n    if (!INT21_ToDosFCBFormat( p, maskW ))\n    {\n        SetLastError( ERROR_NO_MORE_FILES );\n        SET_AX( context, ERROR_NO_MORE_FILES );\n        SET_CFLAG(context);\n        return FALSE;\n    }\n    WideCharToMultiByte(CP_OEMCP, 0, maskW, 12, dta->mask, sizeof(dta->mask), NULL, NULL);\n\n    dta->fullPath = HeapAlloc( GetProcessHeap(), 0, sizeof(wildcardW) + (p - pathW)*sizeof(WCHAR) );\n    memcpy( dta->fullPath, pathW, (p - pathW) * sizeof(WCHAR) );\n    memcpy( dta->fullPath + (p - pathW), wildcardW, sizeof(wildcardW) );\n    /* we must have a fully qualified file name in dta->fullPath\n     * (we could have a UNC path, but this would lead to some errors later on)\n     */\n    dta->drive = toupperW(dta->fullPath[0]) - 'A';\n    dta->count = 0;\n    dta->search_attr = CL_reg(context);\n    return TRUE;\n}\n\n/******************************************************************\n *\t\tmatch_short\n *\n * Check is a short path name (DTA unicode) matches a mask (FCB ansi)\n */\nstatic BOOL match_short(LPCWSTR shortW, LPCSTR maskA)\n{\n    WCHAR mask[11], file[12];\n    int i;\n\n    if (!INT21_ToDosFCBFormat( shortW, file )) return FALSE;\n    MultiByteToWideChar(CP_OEMCP, 0, maskA, 11, mask, 11);\n    for (i = 0; i < 11; i++)\n        if (mask[i] != '?' && mask[i] != file[i]) return FALSE;\n    return TRUE;\n}\n\nstatic unsigned INT21_FindHelper(LPCWSTR fullPath, unsigned drive, unsigned count, \n                                 LPCSTR mask, unsigned search_attr, \n                                 WIN32_FIND_DATAW* entry)\n{\n    unsigned ncalls;\n    const int attr_win32 = (-1 & ~(FA_NORMAL | FA_RDONLY | FA_HIDDEN | FA_SYSTEM | FA_LABEL | FA_DIRECTORY | FA_ARCHIVE | FA_UNUSED));\n    const WCHAR croot[] = {'C',':','\\\\','*','.','*','\\0'};\n    char name[9] = {0};\n    GetModuleName16(GetCurrentTask(), name, 9);\n    BOOL skip_large = !stricmp(name, \"acmsetup\") && !wcsicmp(fullPath, croot);\n\n    if ((search_attr & ~(FA_UNUSED | FA_ARCHIVE | FA_RDONLY | attr_win32)) == FA_LABEL)\n    {\n        WCHAR path[] = {' ',':','\\\\',0};\n        WCHAR volname[MAX_PATH];\n\n        if (count) return 0;\n        path[0] = drive + 'A';\n        volname[0] = '\\0';\n        entry->cAlternateFileName[0] = '\\0';\n        if (!GetVolumeInformationW(path, volname, MAX_PATH, NULL, NULL, NULL, NULL, 0)) return 0;\n        if (!volname[0]) return 0;\n        RtlSecondsSince1970ToTime( 0, (LARGE_INTEGER *)&entry->ftCreationTime );\n        RtlSecondsSince1970ToTime( 0, (LARGE_INTEGER *)&entry->ftLastAccessTime );\n        RtlSecondsSince1970ToTime( 0, (LARGE_INTEGER *)&entry->ftLastWriteTime );\n        entry->dwFileAttributes = FA_LABEL;\n        entry->nFileSizeHigh = entry->nFileSizeLow = 0;\n        entry->cAlternateFileName[12] = '\\0'; \n        wcsncpy(entry->cAlternateFileName, volname, 8);\n        if (wcslen(volname) > 8)\n        {\n            entry->cAlternateFileName[8] = '.';\n            wcsncpy(entry->cAlternateFileName + 9, volname + 8, 3);\n        }\n        TRACE(\"returning %s as label\\n\", debugstr_w(entry->cAlternateFileName));\n        return 1;\n    }\n\n    if (!INT21_FindHandle || INT21_FindPath != fullPath || count == 0)\n    {\n        if (INT21_FindHandle) FindClose(INT21_FindHandle);\n        INT21_FindHandle = FindFirstFileW(fullPath, entry);\n        if (INT21_FindHandle == INVALID_HANDLE_VALUE)\n        {\n            INT21_FindHandle = 0;\n            return 0;\n        }\n        INT21_FindPath = fullPath;\n        /* we need to resync search */\n        ncalls = count;\n    }\n    else ncalls = 1;\n\n    while (ncalls-- != 0)\n    {\n        if (!FindNextFileW(INT21_FindHandle, entry))\n        {\n            FindClose(INT21_FindHandle); INT21_FindHandle = 0;\n            return 0;\n        }\n    }\n    while (count < 0xffff)\n    {\n        if (skip_large && (entry->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))\n        {\n            const WCHAR *skip_dirs[] =\n                    {(const WCHAR []){'U','s','e','r','s','\\0'},\n                     (const WCHAR []){'P','r','o','g','r','a','m',' ','F','i','l','e','s',' ','(','x','8','6',')','\\0'},\n                     (const WCHAR []){'P','r','o','g','r','a','m',' ','F','i','l','e','s','\\0'},\n                     (const WCHAR []){'P','r','o','g','r','a','m','D','a','t','a','\\0'},\n                     (const WCHAR []){'W','i','n','d','o','w','s','\\0'},\n                     (const WCHAR []){'D','o','c','u','m','e','n','t','s',' ','a','n','d',' ','S','e','t','t','i','n','g','s','\\0'}};\n\n            for (int i = 0; i < ARRAY_SIZE(skip_dirs); i++)\n            {\n                if (!wcscmp(entry->cFileName, skip_dirs[i]))\n                {\n                    if (!FindNextFileW(INT21_FindHandle, entry))\n                    {\n                        FindClose(INT21_FindHandle); INT21_FindHandle = 0;\n                        return 0;\n                    }\n                    if (!(entry->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))\n                        break;\n                    i = -1;\n                }\n            }\n        }\n        count++;\n        /* Check the file attributes, and path */\n        if (!(entry->dwFileAttributes & ~attr_win32 & ~search_attr) &&\n            match_short(entry->cAlternateFileName[0] ? entry->cAlternateFileName : entry->cFileName,\n                        mask))\n        {\n            entry->dwFileAttributes &= ~attr_win32;\n            return count;\n        }\n        if (!FindNextFileW(INT21_FindHandle, entry))\n        {\n            FindClose(INT21_FindHandle); INT21_FindHandle = 0;\n            return 0;\n        }\n    }\n    WARN(\"Too many directory entries in %s\\n\", debugstr_w(fullPath) );\n    return 0;\n}\n\n/******************************************************************\n *\t\tINT21_FindNext\n */\nstatic BOOL INT21_FindNext( CONTEXT *context )\n{\n    FINDFILE_DTA *dta = (FINDFILE_DTA *)INT21_GetCurrentDTA(context);\n    DWORD attr = dta->search_attr | FA_UNUSED | FA_ARCHIVE | FA_RDONLY;\n    WIN32_FIND_DATAW entry;\n    int n;\n\n    if (!dta->fullPath) return FALSE;\n\n    n = INT21_FindHelper(dta->fullPath, dta->drive, dta->count, \n                         dta->mask, attr, &entry);\n    if (n)\n    {\n        dta->fileattr = entry.dwFileAttributes;\n        dta->filesize = entry.nFileSizeLow;\n        FileTimeToDosDateTime( entry.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ? &entry.ftCreationTime : &entry.ftLastWriteTime, &dta->filedate, &dta->filetime );\n        memset(dta->filename, 0, 13);\n        if (entry.cAlternateFileName[0])\n        {\n            /* shoud be UPPER CASE */\n            for (int i = 0; i < 13; i++)\n                entry.cAlternateFileName[i] = toupperW(entry.cAlternateFileName[i]);\n            WideCharToMultiByte(CP_OEMCP, 0, entry.cAlternateFileName, -1,\n                                dta->filename, 13, NULL, NULL);\n        }\n        else\n        {\n            /* shoud be UPPER CASE */\n            for (int i = 0; i < 13; i++)\n                entry.cFileName[i] = toupperW(entry.cFileName[i]);\n            WideCharToMultiByte(CP_OEMCP, 0, entry.cFileName, -1, dta->filename, 13, NULL, NULL);\n        }\n\n        if (!memchr(dta->mask,'?',11))\n        {\n            /* wildcardless search, release resources in case no findnext will\n             * be issued, and as a workaround in case file creation messes up\n             * findnext, as sometimes happens with pkunzip\n             */\n            HeapFree( GetProcessHeap(), 0, dta->fullPath );\n            INT21_FindPath = dta->fullPath = NULL;\n        }\n        dta->count = n;\n        return TRUE;\n    }\n    HeapFree( GetProcessHeap(), 0, dta->fullPath );\n    INT21_FindPath = dta->fullPath = NULL;\n    return FALSE;\n}\n\n/* microsoft's programmers should be shot for using CP/M style int21\n   calls in Windows for Workgroup's winfile.exe */\n\n/******************************************************************\n *\t\tINT21_FindFirstFCB\n *\n */\nstatic BOOL INT21_FindFirstFCB( CONTEXT *context )\n{\n    BYTE *fcb = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx);\n    FINDFILE_FCB *pFCB;\n    int drive;\n    WCHAR p[] = {' ',':',};\n\n    if (*fcb == 0xff) pFCB = (FINDFILE_FCB *)(fcb + 7);\n    else pFCB = (FINDFILE_FCB *)fcb;\n    drive = INT21_MapDrive( pFCB->drive );\n    if (drive == MAX_DOS_DRIVES) return FALSE;\n\n    p[0] = 'A' + drive;\n    pFCB->fullPath = HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR));\n    if (!pFCB->fullPath) return FALSE;\n    GetLongPathNameW(p, pFCB->fullPath, MAX_PATH);\n    pFCB->count = 0;\n    return TRUE;\n}\n\n/******************************************************************\n *\t\tINT21_FindNextFCB\n *\n */\nstatic BOOL INT21_FindNextFCB( CONTEXT *context )\n{\n    BYTE *fcb = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx);\n    FINDFILE_FCB *pFCB;\n    LPBYTE pResult = INT21_GetCurrentDTA(context);\n    DOS_DIRENTRY_LAYOUT *ddl;\n    WIN32_FIND_DATAW entry;\n    BYTE attr;\n    int n;\n    WCHAR nameW[12];\n\n    if (*fcb == 0xff) /* extended FCB ? */\n    {\n        attr = fcb[6];\n        pFCB = (FINDFILE_FCB *)(fcb + 7);\n    }\n    else\n    {\n        attr = 0;\n        pFCB = (FINDFILE_FCB *)fcb;\n    }\n\n    if (!pFCB->fullPath) return FALSE;\n    n = INT21_FindHelper(pFCB->fullPath, INT21_MapDrive( pFCB->drive ),\n                         pFCB->count, pFCB->filename, attr, &entry);\n    if (!n)\n    {\n        HeapFree( GetProcessHeap(), 0, pFCB->fullPath );\n        INT21_FindPath = pFCB->fullPath = NULL;\n        return FALSE;\n    }\n    pFCB->count += n;\n\n    if (*fcb == 0xff)\n    {\n        /* place extended FCB header before pResult if called with extended FCB */\n\t*pResult = 0xff;\n\t pResult += 6; /* leave reserved field behind */\n\t*pResult++ = entry.dwFileAttributes;\n    }\n    *pResult++ = INT21_MapDrive( pFCB->drive ); /* DOS_DIRENTRY_LAYOUT after current drive number */\n    ddl = (DOS_DIRENTRY_LAYOUT*)pResult;\n    ddl->fileattr = entry.dwFileAttributes;\n    ddl->cluster  = 0;  /* what else? */\n    ddl->filesize = entry.nFileSizeLow;\n    memset( ddl->reserved, 0, sizeof(ddl->reserved) );\n    FileTimeToDosDateTime( &entry.ftLastWriteTime,\n                           &ddl->filedate, &ddl->filetime );\n\n    /* Convert file name to FCB format */\n    if (entry.cAlternateFileName[0])\n    {\n        if (entry.dwFileAttributes == FA_LABEL)\n        {\n            wcsncpy(nameW, entry.cAlternateFileName, 8);\n            if (entry.cAlternateFileName[8] == '.')\n                wcsncpy(nameW + 8, entry.cAlternateFileName + 9, 3);\n        }\n        else\n            INT21_ToDosFCBFormat( entry.cAlternateFileName, nameW );\n    }\n    else\n        INT21_ToDosFCBFormat( entry.cFileName, nameW );\n    WideCharToMultiByte(CP_OEMCP, 0, nameW, 11, ddl->filename, 11, NULL, NULL);\n    return TRUE;\n}\n\n\n/******************************************************************\n *\t\tINT21_ParseFileNameIntoFCB\n *\n */\nstatic void INT21_ParseFileNameIntoFCB( CONTEXT *context )\n{\n    char *filename =\n        CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Esi );\n    char *fcb =\n        CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edi );\n    char *s;\n    WCHAR *buffer;\n    WCHAR fcbW[12];\n    INT buffer_len, len;\n\n    SET_AL( context, 0xff ); /* failed */\n\n    TRACE(\"filename: '%s'\\n\", filename);\n\n    s = filename;\n    while (*s && (*s != ' ') && (*s != '\\r') && (*s != '\\n'))\n        s++;\n    len = filename - s;\n\n    buffer_len = MultiByteToWideChar(CP_OEMCP, 0, filename, len, NULL, 0);\n    buffer = HeapAlloc( GetProcessHeap(), 0, (buffer_len + 1) * sizeof(WCHAR));\n    len = MultiByteToWideChar(CP_OEMCP, 0, filename, len, buffer, buffer_len);\n    buffer[len] = 0;\n    INT21_ToDosFCBFormat(buffer, fcbW);\n    HeapFree(GetProcessHeap(), 0, buffer);\n    WideCharToMultiByte(CP_OEMCP, 0, fcbW, 12, fcb + 1, 12, NULL, NULL);\n    *fcb = 0;\n    TRACE(\"FCB: '%s'\\n\", fcb + 1);\n\n    SET_AL( context, ((strchr(filename, '*')) || (strchr(filename, '$'))) != 0 );\n\n    /* point DS:SI to first unparsed character */\n    SET_SI( context, context->Esi + (int)s - (int)filename );\n}\n\nstatic BOOL     INT21_Dup2(HFILE16 hFile1, HFILE16 hFile2)\n{\n    HFILE16     res = HFILE_ERROR16;\n    HANDLE      handle, new_handle;\n#define DOS_TABLE_SIZE  256\n    DWORD       map[DOS_TABLE_SIZE / 32];\n    int         i;\n\n    handle = DosFileHandleToWin32Handle(hFile1);\n    if (handle == INVALID_HANDLE_VALUE)\n        return FALSE;\n\n    _lclose16(hFile2);\n    /* now loop to allocate the same one... */\n    memset(map, 0, sizeof(map));\n    for (i = 0; i < DOS_TABLE_SIZE; i++)\n    {\n        if (!DuplicateHandle(GetCurrentProcess(), handle,\n                             GetCurrentProcess(), &new_handle,\n                             0, FALSE, DUPLICATE_SAME_ACCESS))\n        {\n            res = HFILE_ERROR16;\n            break;\n        }\n        res = Win32HandleToDosFileHandle(new_handle);\n        if (res == HFILE_ERROR16 || res == hFile2) break;\n        map[res / 32] |= 1 << (res % 32);\n    }\n    /* clean up the allocated slots */\n    for (i = 0; i < DOS_TABLE_SIZE; i++)\n    {\n        if (map[i / 32] & (1 << (i % 32)))\n            _lclose16((HFILE16)i);\n    }\n    return res == hFile2;\n}\n\n\n/***********************************************************************\n *           DOSVM_Int21Handler\n *\n * Interrupt 0x21 handler.\n */\nvoid WINAPI DOSVM_Int21Handler( CONTEXT *context )\n{\n    BOOL bSetDOSExtendedError = FALSE;\n\n    TRACE( \"AX=%04x BX=%04x CX=%04x DX=%04x \"\n           \"SI=%04x DI=%04x DS=%04x ES=%04x EFL=%08x\\n\",\n           AX_reg(context), BX_reg(context), \n           CX_reg(context), DX_reg(context),\n           SI_reg(context), DI_reg(context),\n           (WORD)context->SegDs, (WORD)context->SegEs,\n           context->EFlags );\n\n   /*\n    * Extended error is used by (at least) functions 0x2f to 0x62.\n    * Function 0x59 returns extended error and error should not\n    * be cleared before handling the function.\n    */\n    if (AH_reg(context) >= 0x2f && AH_reg(context) != 0x59) \n        SetLastError(0);\n\n    RESET_CFLAG(context); /* Not sure if this is a good idea. */\n\n    switch(AH_reg(context))\n    {\n    case 0x00: /* TERMINATE PROGRAM */\n        TRACE(\"TERMINATE PROGRAM\\n\");\n        if (DOSVM_IsWin16())\n            DOSVM_Exit( 0 );\n        else if(ISV86(context))\n            MZ_Exit( context, FALSE, 0 );\n        else\n            ERR( \"Called from DOS protected mode\\n\" );\n        break;\n\n    case 0x01: /* READ CHARACTER FROM STANDARD INPUT, WITH ECHO */\n        {\n            BYTE ascii;\n            TRACE(\"DIRECT CHARACTER INPUT WITH ECHO\\n\");\n            INT21_ReadChar( &ascii, context );\n            SET_AL( context, ascii );\n            /*\n             * FIXME: What to echo when extended keycodes are read?\n             */\n            DOSVM_PutChar(AL_reg(context));\n        }\n        break;\n\n    case 0x02: /* WRITE CHARACTER TO STANDARD OUTPUT */\n        TRACE(\"Write Character to Standard Output\\n\");\n        DOSVM_PutChar(DL_reg(context));\n        break;\n\n   case 0x04: /* WRITE CHARACTER TO STDAUX */\n   {\n       static BOOL fixme_once;\n       if (!fixme_once)\n       {\n           fixme_once = TRUE;\n           FIXME(\"WRITE CHARACTER TO STDAUX\\n\");\n       }\n       DPRINTF(\"%c\", DL_reg(context));\n   }\n       break;\n    case 0x03: /* READ CHARACTER FROM STDAUX  */\n    case 0x05: /* WRITE CHARACTER TO PRINTER */\n        INT_BARF( context, 0x21 );\n        break;\n\n    case 0x06: /* DIRECT CONSOLE IN/OUTPUT */\n        if (DL_reg(context) == 0xff) \n        {\n            TRACE(\"Direct Console Input\\n\");\n\n            if (INT21_ReadChar( NULL, NULL ))\n            {\n                BYTE ascii;\n                INT21_ReadChar( &ascii, context );\n                SET_AL( context, ascii );\n                RESET_ZFLAG( context );\n            }\n            else\n            {\n                /* no character available */\n                SET_AL( context, 0 );\n                SET_ZFLAG( context );\n            }\n        } \n        else \n        {\n            TRACE(\"Direct Console Output\\n\");\n            DOSVM_PutChar(DL_reg(context));\n            /*\n             * At least DOS versions 2.1-7.0 return character \n             * that was written in AL register.\n             */\n            SET_AL( context, DL_reg(context) );\n        }\n        break;\n\n    case 0x07: /* DIRECT CHARACTER INPUT WITHOUT ECHO */\n        {\n            BYTE ascii;\n            TRACE(\"DIRECT CHARACTER INPUT WITHOUT ECHO\\n\");\n            INT21_ReadChar( &ascii, context );\n            SET_AL( context, ascii );\n        }\n        break;\n\n    case 0x08: /* CHARACTER INPUT WITHOUT ECHO */\n        {\n            BYTE ascii;\n            TRACE(\"CHARACTER INPUT WITHOUT ECHO\\n\");\n            INT21_ReadChar( &ascii, context );\n            SET_AL( context, ascii );\n        }\n        break;\n\n    case 0x09: /* WRITE STRING TO STANDARD OUTPUT */\n        TRACE(\"WRITE '$'-terminated string from %04X:%04X to stdout\\n\",\n\t      context->SegDs, DX_reg(context) );\n        {\n            LPSTR data = CTX_SEG_OFF_TO_LIN( context, \n                                             context->SegDs, context->Edx );\n            LPSTR p = data;\n            DWORD w;\n            /*\n             * Do NOT use strchr() to calculate the string length,\n             * as '\\0' is valid string content, too!\n             * Maybe we should check for non-'$' strings, but DOS doesn't.\n             */\n            while (*p != '$') p++;\n\n            if (DOSVM_IsWin16())\n                WriteFile( DosFileHandleToWin32Handle(1), \n                           data, p - data, &w, NULL );\n            else\n                for(; data != p; data++)\n                    DOSVM_PutChar( *data );\n\n            SET_AL( context, '$' ); /* yes, '$' (0x24) gets returned in AL */\n        }\n        break;\n\n    case 0x0a: /* BUFFERED INPUT */\n        {\n            BYTE *ptr = CTX_SEG_OFF_TO_LIN(context,\n                                           context->SegDs,\n                                           context->Edx);\n            WORD result;\n\n            TRACE( \"BUFFERED INPUT (size=%d)\\n\", ptr[0] );\n\n            /*\n             * FIXME: Some documents state that\n             *        ptr[1] holds number of chars from last input which \n             *        may be recalled on entry, other documents do not mention\n             *        this at all.\n             */\n            if (ptr[1])\n                TRACE( \"Handle old chars in buffer!\\n\" );\n\n            /*\n             * ptr[0] - capacity (includes terminating CR)\n             * ptr[1] - characters read (excludes terminating CR)\n             */\n            result = INT21_BufferedInput( context, ptr + 2, ptr[0] );\n            if (result > 0)\n                ptr[1] = (BYTE)result - 1;\n            else\n                ptr[1] = 0;\n        }\n        break;\n\n    case 0x0b: /* GET STDIN STATUS */\n        TRACE( \"GET STDIN STATUS\\n\" );\n        {\n            if (INT21_ReadChar( NULL, NULL ))\n                SET_AL( context, 0xff ); /* character available */\n            else\n                SET_AL( context, 0 ); /* no character available */\n        }\n        break;\n\n    case 0x0c: /* FLUSH BUFFER AND READ STANDARD INPUT */\n        {\n            BYTE al = AL_reg(context); /* Input function to execute after flush. */\n\n            TRACE( \"FLUSH BUFFER AND READ STANDARD INPUT - 0x%02x\\n\", al );\n\n            /* FIXME: buffers are not flushed */\n\n            /*\n             * If AL is one of 0x01, 0x06, 0x07, 0x08, or 0x0a,\n             * int21 function identified by AL will be called.\n             */\n            if(al == 0x01 || al == 0x06 || al == 0x07 || al == 0x08 || al == 0x0a)\n            {\n                SET_AH( context, al );\n                DOSVM_Int21Handler( context );\n            }\n        }\n        break;\n\n    case 0x0d: /* DISK BUFFER FLUSH */\n        TRACE(\"DISK BUFFER FLUSH ignored\\n\");\n        break;\n\n    case 0x0e: /* SELECT DEFAULT DRIVE */\n        TRACE( \"SELECT DEFAULT DRIVE - %c:\\n\", 'A' + DL_reg(context) );\n        INT21_SetCurrentDrive( DL_reg(context) );\n        SET_AL( context, MAX_DOS_DRIVES );\n        break;\n\n    case 0x0f: /* OPEN FILE USING FCB */\n        INT21_OpenFileUsingFCB( context );\n        break;\n\n    case 0x10: /* CLOSE FILE USING FCB */\n        INT21_CloseFileUsingFCB( context );\n        break;\n\n    case 0x11: /* FIND FIRST MATCHING FILE USING FCB */\n\tTRACE(\"FIND FIRST MATCHING FILE USING FCB %p\\n\",\n\t      CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx));\n        if (!INT21_FindFirstFCB(context))\n        {\n            SET_AL( context, 0xff );\n            break;\n        }\n        /* else fall through */\n\n    case 0x12: /* FIND NEXT MATCHING FILE USING FCB */\n        SET_AL( context, INT21_FindNextFCB(context) ? 0x00 : 0xff );\n        break;\n\n     case 0x13: /* DELETE FILE USING FCB */\n        INT_BARF( context, 0x21 );\n        break;\n\n    case 0x14: /* SEQUENTIAL READ FROM FCB FILE */\n        INT21_SequentialReadFromFCB( context );\n        break;\n\n    case 0x15: /* SEQUENTIAL WRITE TO FCB FILE */\n        INT21_SequentialWriteToFCB( context );\n        break;\n\n    case 0x16: /* CREATE OR TRUNCATE FILE USING FCB */\n    case 0x17: /* RENAME FILE USING FCB */\n        INT_BARF( context, 0x21 );\n        break;\n\n    case 0x18: /* NULL FUNCTION FOR CP/M COMPATIBILITY */\n        SET_AL( context, 0 );\n        break;\n\n    case 0x19: /* GET CURRENT DEFAULT DRIVE */\n        SET_AL( context, INT21_GetCurrentDrive() );\n        TRACE( \"GET CURRENT DRIVE -> %c:\\n\", 'A' + AL_reg( context ) );\n        break;\n\n    case 0x1a: /* SET DISK TRANSFER AREA ADDRESS */\n        TRACE( \"SET DISK TRANSFER AREA ADDRESS %04X:%04X\\n\",\n               context->SegDs, DX_reg(context) );\n        {\n            TDB *task = GlobalLock16( GetCurrentTask() );\n            task->dta = MAKESEGPTR( context->SegDs, DX_reg(context) );\n        }\n        break;\n\n    case 0x1b: /* GET ALLOCATION INFORMATION FOR DEFAULT DRIVE */\n        if (!INT21_GetDriveAllocInfo(context, 0))\n            SET_AX( context, 0xffff );\n        break;\n\n    case 0x1c: /* GET ALLOCATION INFORMATION FOR SPECIFIC DRIVE */\n        if (!INT21_GetDriveAllocInfo(context, DL_reg(context)))\n            SET_AX( context, 0xffff );\n        break;\n\n    case 0x1d: /* NULL FUNCTION FOR CP/M COMPATIBILITY */\n    case 0x1e: /* NULL FUNCTION FOR CP/M COMPATIBILITY */\n        SET_AL( context, 0 );\n        break;\n\n    case 0x1f: /* GET DRIVE PARAMETER BLOCK FOR DEFAULT DRIVE */\n        {\n            BYTE drive = INT21_MapDrive( 0 ); \n            TRACE( \"GET DPB FOR DEFAULT DRIVE\\n\" );\n\n            if (INT21_FillDrivePB( drive ))\n            {\n                SET_AL( context, 0x00 ); /* success */\n                SET_BX( context, offsetof( INT21_HEAP, misc_dpb_list[drive] ) );\n                context->SegDs = INT21_GetHeapSelector( context );\n            }\n            else\n            {\n                SET_AL( context, 0xff ); /* invalid or network drive */\n            }\n        }\n        break;\n\n    case 0x20: /* NULL FUNCTION FOR CP/M COMPATIBILITY */\n        SET_AL( context, 0 );\n        break;\n\n    case 0x21: /* READ RANDOM RECORD FROM FCB FILE */\n        INT21_ReadRandomRecordFromFCB( context );\n        break;\n\n    case 0x22: /* WRITE RANDOM RECORD TO FCB FILE */\n        INT21_WriteRandomRecordToFCB( context );\n        break;\n\n    case 0x23: /* GET FILE SIZE FOR FCB */\n    case 0x24: /* SET RANDOM RECORD NUMBER FOR FCB */\n        INT_BARF( context, 0x21 );\n        break;\n\n    case 0x25: /* SET INTERRUPT VECTOR */\n        TRACE(\"SET INTERRUPT VECTOR 0x%02x\\n\",AL_reg(context));\n        {\n            FARPROC16 ptr = (FARPROC16)MAKESEGPTR( context->SegDs, DX_reg(context) );\n            if (AL_reg(context) == 8)\n                DOSVM_start_bios_timer();\n            if (!ISV86(context) && DOSVM_IsWin16())\n                DOSVM_SetPMHandler16(  AL_reg(context), ptr );\n            else\n                DOSVM_SetRMHandler( AL_reg(context), ptr );\n        }\n        break;\n\n    case 0x26: /* CREATE NEW PROGRAM SEGMENT PREFIX */\n        INT_BARF( context, 0x21 );\n        break;\n\n    case 0x27: /* RANDOM BLOCK READ FROM FCB FILE */\n        INT21_RandomBlockReadFromFCB( context );\n        break;\n\n    case 0x28: /* RANDOM BLOCK WRITE TO FCB FILE */\n        INT21_RandomBlockWriteToFCB( context );\n        break;\n\n    case 0x29: /* PARSE FILENAME INTO FCB */\n        INT21_ParseFileNameIntoFCB(context);\n        break;\n\n    case 0x2a: /* GET SYSTEM DATE */\n        TRACE( \"GET SYSTEM DATE\\n\" );\n        {\n            SYSTEMTIME systime;\n            GetLocalTime( &systime );\n            SET_CX( context, systime.wYear );\n            SET_DH( context, systime.wMonth );\n            SET_DL( context, systime.wDay );\n            SET_AL( context, systime.wDayOfWeek );\n        }\n        break;\n\n    case 0x2b: /* SET SYSTEM DATE */\n        TRACE( \"SET SYSTEM DATE\\n\" );\n        {\n            WORD year  = CX_reg(context);\n            BYTE month = DH_reg(context);\n            BYTE day   = DL_reg(context);\n\n            if (year  >= 1980 && year  <= 2099 &&\n                month >= 1    && month <= 12   &&\n                day   >= 1    && day   <= 31)\n            {\n                FIXME( \"SetSystemDate(%02d/%02d/%04d): not allowed\\n\",\n                       day, month, year );\n                SET_AL( context, 0 );  /* Let's pretend we succeeded */\n            }\n            else\n            {\n                SET_AL( context, 0xff ); /* invalid date */\n                TRACE( \"SetSystemDate(%02d/%02d/%04d): invalid date\\n\",\n                       day, month, year );\n            }\n        }\n        break;\n\n    case 0x2c: /* GET SYSTEM TIME */\n        TRACE( \"GET SYSTEM TIME\\n\" );\n        {\n            SYSTEMTIME systime;\n            GetLocalTime( &systime );\n            SET_CH( context, systime.wHour );\n            SET_CL( context, systime.wMinute );\n            SET_DH( context, systime.wSecond );\n            SET_DL( context, systime.wMilliseconds / 10 );\n        }\n        break;\n\n    case 0x2d: /* SET SYSTEM TIME */\n        if( CH_reg(context) >= 24 || CL_reg(context) >= 60 || DH_reg(context) >= 60 || DL_reg(context) >= 100 ) {\n            TRACE(\"SetSystemTime(%02d:%02d:%02d.%02d): wrong time\\n\",\n              CH_reg(context), CL_reg(context),\n              DH_reg(context), DL_reg(context) );\n            SET_AL( context, 0xFF );\n        }\n        else\n        {\n            FIXME(\"SetSystemTime(%02d:%02d:%02d.%02d): not allowed\\n\",\n                  CH_reg(context), CL_reg(context),\n                  DH_reg(context), DL_reg(context) );\n            SET_AL( context, 0 );  /* Let's pretend we succeeded */\n        }\n        break;\n\n    case 0x2e: /* SET VERIFY FLAG */\n        TRACE(\"SET VERIFY FLAG ignored\\n\");\n        /* we cannot change the behaviour anyway, so just ignore it */\n        break;\n\n    case 0x2f: /* GET DISK TRANSFER AREA ADDRESS */\n        TRACE( \"GET DISK TRANSFER AREA ADDRESS\\n\" );\n        {\n            TDB *task = GlobalLock16( GetCurrentTask() );\n            context->SegEs = SELECTOROF( task->dta );\n            SET_BX( context, OFFSETOF( task->dta ) );\n        }\n        break;\n\n    case 0x30: /* GET DOS VERSION */\n        TRACE( \"GET DOS VERSION - %s requested\\n\",\n               (AL_reg(context) == 0x00) ? \"OEM number\" : \"version flag\" );\n\n        if (AL_reg(context) == 0x00)\n            SET_BH( context, 0xff ); /* OEM number => undefined */\n        else\n            SET_BH( context, 0x08 ); /* version flag => DOS is in ROM */\n\n        SET_AL( context, HIBYTE(HIWORD(GetVersion16())) ); /* major version */\n        SET_AH( context, LOBYTE(HIWORD(GetVersion16())) ); /* minor version */\n\n        SET_BL( context, 0x12 );     /* 0x123456 is 24-bit Wine's serial # */\n        SET_CX( context, 0x3456 );\n        break;\n\n    case 0x31: /* TERMINATE AND STAY RESIDENT */\n        FIXME(\"TERMINATE AND STAY RESIDENT stub\\n\");\n        break;\n\n    case 0x32: /* GET DOS DRIVE PARAMETER BLOCK FOR SPECIFIC DRIVE */\n        {\n            BYTE drive = INT21_MapDrive( DL_reg(context) );           \n            TRACE( \"GET DPB FOR SPECIFIC DRIVE %d\\n\", DL_reg(context) );\n\n            if (INT21_FillDrivePB( drive ))\n            {\n                SET_AL( context, 0x00 ); /* success */\n                SET_BX( context, offsetof( INT21_HEAP, misc_dpb_list[drive] ) );\n                context->SegDs = INT21_GetHeapSelector( context );\n            }\n            else\n            {\n                SET_AL( context, 0xff ); /* invalid or network drive */\n            }\n        }\n        break;\n\n    case 0x33: /* MULTIPLEXED */\n        switch (AL_reg(context))\n        {\n        case 0x00: /* GET CURRENT EXTENDED BREAK STATE */\n            TRACE(\"GET CURRENT EXTENDED BREAK STATE\\n\");\n            SET_DL( context, brk_flag );\n            break;\n\n        case 0x01: /* SET EXTENDED BREAK STATE */\n            TRACE(\"SET CURRENT EXTENDED BREAK STATE\\n\");\n            brk_flag = (DL_reg(context) > 0) ? 1 : 0;\n            break;\n\n        case 0x02: /* GET AND SET EXTENDED CONTROL-BREAK CHECKING STATE*/\n            TRACE(\"GET AND SET EXTENDED CONTROL-BREAK CHECKING STATE\\n\");\n            /* ugly coding in order to stay reentrant */\n            if (DL_reg(context))\n            {\n                SET_DL( context, brk_flag );\n                brk_flag = 1;\n            }\n            else\n            {\n                SET_DL( context, brk_flag );\n                brk_flag = 0;\n            }\n            break;\n\n        case 0x05: /* GET BOOT DRIVE */\n            TRACE(\"GET BOOT DRIVE\\n\");\n            SET_DL( context, 3 );\n            /* c: is Wine's bootdrive (a: is 1)*/\n            break;\n\n        case 0x06: /* GET TRUE VERSION NUMBER */\n            TRACE(\"GET TRUE VERSION NUMBER\\n\");\n            SET_BL( context, HIBYTE(HIWORD(GetVersion16())) ); /* major */\n            SET_BH( context, LOBYTE(HIWORD(GetVersion16())) ); /* minor */\n            SET_DL( context, 0x00 ); /* revision */\n            SET_DH( context, 0x08 ); /* DOS is in ROM */\n            break;\n\n        default:\n            INT_BARF( context, 0x21 );\n            break;\n        }\n        break;\n\n    case 0x34: /* GET ADDRESS OF INDOS FLAG */\n        TRACE( \"GET ADDRESS OF INDOS FLAG\\n\" );\n        context->SegEs = INT21_GetHeapSelector( context );\n        SET_BX( context, offsetof(INT21_HEAP, misc_indos) );\n        break;\n\n    case 0x35: /* GET INTERRUPT VECTOR */\n        TRACE(\"GET INTERRUPT VECTOR 0x%02x\\n\",AL_reg(context));\n        {\n            FARPROC16 addr;\n            if (!ISV86(context) && DOSVM_IsWin16())\n                addr = DOSVM_GetPMHandler16( AL_reg(context) );\n            else\n                addr = DOSVM_GetRMHandler( AL_reg(context) );\n            context->SegEs = SELECTOROF(addr);\n            SET_BX( context, OFFSETOF(addr) );\n        }\n        break;\n\n    case 0x36: /* GET FREE DISK SPACE */\n\tTRACE(\"GET FREE DISK SPACE FOR DRIVE %s (limited to about 1GB)\\n\",\n\t      INT21_DriveName( DL_reg(context) ));\n        if (!INT21_GetFreeDiskSpace(context)) SET_AX( context, 0xffff );\n        break;\n\n    case 0x37: /* SWITCHAR */\n        {\n            switch (AL_reg(context))\n            {\n            case 0x00: /* \"SWITCHAR\" - GET SWITCH CHARACTER */\n                TRACE( \"SWITCHAR - GET SWITCH CHARACTER\\n\" );\n                SET_AL( context, 0x00 ); /* success*/\n                SET_DL( context, '/' );\n                break;\n            case 0x01: /*\"SWITCHAR\" - SET SWITCH CHARACTER*/\n                FIXME( \"SWITCHAR - SET SWITCH CHARACTER: %c\\n\",\n                       DL_reg( context ));\n                SET_AL( context, 0x00 ); /* success*/\n                break;\n            default:\n                INT_BARF( context, 0x21 );\n                break;\n            }\n\t}\n\tbreak;\n\n    case 0x38: /* GET COUNTRY-SPECIFIC INFORMATION */\n        TRACE( \"GET COUNTRY-SPECIFIC INFORMATION\\n\" );\n        if (AL_reg(context))\n        {\n            WORD country = AL_reg(context);\n            if (country == 0xff)\n                country = BX_reg(context);\n            if (country != INT21_GetSystemCountryCode()) {\n                FIXME( \"Requested info on non-default country %04x\\n\", country );\n                SET_AX(context, 2);\n                SET_CFLAG(context);\n            }\n        }\n        if(AX_reg(context) != 2 )\n        {\n            INT21_FillCountryInformation( CTX_SEG_OFF_TO_LIN(context,\n                                                             context->SegDs,\n                                                             context->Edx), 0x22 );\n            SET_AX( context, INT21_GetSystemCountryCode() );\n            SET_BX( context, INT21_GetSystemCountryCode() );\n            RESET_CFLAG(context);\n        }\n        break;\n\n    case 0x39: /* \"MKDIR\" - CREATE SUBDIRECTORY */\n        if (!INT21_CreateDirectory( context ))\n            bSetDOSExtendedError = TRUE;\n        else\n            RESET_CFLAG(context);\n        break;\n\n    case 0x3a: /* \"RMDIR\" - REMOVE DIRECTORY */\n        {\n            WCHAR dirW[MAX_PATH];\n            char *dirA = CTX_SEG_OFF_TO_LIN(context,\n                                            context->SegDs, context->Edx);\n\n            TRACE( \"REMOVE DIRECTORY %s\\n\", dirA );\n\n            MultiByteToWideChar(CP_OEMCP, 0, dirA, -1, dirW, MAX_PATH);\n\n            if (!RemoveDirectoryW( dirW ))\n                bSetDOSExtendedError = TRUE;\n            else\n                RESET_CFLAG(context);\n        }\n        break;\n\n    case 0x3b: /* \"CHDIR\" - SET CURRENT DIRECTORY */\n        if (!INT21_SetCurrentDirectory( context ))\n            bSetDOSExtendedError = TRUE;\n        else\n            RESET_CFLAG(context);\n        break;\n\n    case 0x3c: /* \"CREAT\" - CREATE OR TRUNCATE FILE */\n        if (!INT21_CreateFile( context, context->Edx, FALSE, \n                               OF_READWRITE | OF_SHARE_COMPAT, 0x12 ))\n            bSetDOSExtendedError = TRUE;\n        else\n            RESET_CFLAG(context);\n        break;\n\n    case 0x3d: /* \"OPEN\" - OPEN EXISTING FILE */\n        if (!INT21_CreateFile( context, context->Edx, FALSE, \n                               AL_reg(context), 0x01 ))\n            bSetDOSExtendedError = TRUE;\n        else\n            RESET_CFLAG(context);\n        break;\n\n    case 0x3e: /* \"CLOSE\" - CLOSE FILE */\n        TRACE( \"CLOSE handle %d\\n\", BX_reg(context) );\n        if (_lclose16( BX_reg(context) ) == HFILE_ERROR16)\n            bSetDOSExtendedError = TRUE;\n        else\n            RESET_CFLAG(context);\n        break;\n\n    case 0x3f: /* \"READ\" - READ FROM FILE OR DEVICE */\n        TRACE( \"READ from %d to %04X:%04X for %d bytes\\n\",\n               BX_reg(context),\n               context->SegDs,\n               DX_reg(context),\n               CX_reg(context) );\n        {\n            DWORD result;\n            WORD  count  = CX_reg(context);\n            BYTE *buffer = CTX_SEG_OFF_TO_LIN( context, \n                                               context->SegDs,\n                                               context->Edx );\n\n            /* Some programs pass a count larger than the allocated buffer */\n            if (DOSVM_IsWin16())\n            {\n                WORD sel = context->SegDs;\n                if (!sel)\n                {\n                    buffer = MapSL(MAKELONG(context->Edx & 0xffff, DOSMEM_0000H));\n                    sel = DOSMEM_0000H;\n                }\n\n                DWORD maxcount = GetSelectorLimit16( sel )\n                    - DX_reg(context) + 1;\n                if (count > maxcount)\n                    count = maxcount;\n            }\n\n            /*\n             * FIXME: Reading from console (BX=1) in DOS mode\n             *        does not work as it is supposed to work.\n             */\n\n            RESET_CFLAG(context); /* set if error */\n            if (!DOSVM_IsWin16() && BX_reg(context) == 0)\n            {\n                result = INT21_BufferedInput( context, buffer, count );\n                SET_AX( context, (WORD)result );\n            }\n            else if (ReadFile( DosFileHandleToWin32Handle(BX_reg(context)),\n                               buffer, count, &result, NULL ))\n                SET_AX( context, (WORD)result );\n            else\n                bSetDOSExtendedError = TRUE;\n        }\n        break;\n\n    case 0x40:  /* \"WRITE\" - WRITE TO FILE OR DEVICE */\n        TRACE( \"WRITE from %04X:%04X to handle %d for %d byte\\n\",\n               context->SegDs, DX_reg(context),\n               BX_reg(context), CX_reg(context) );\n        {\n            char *ptr = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx);\n\n            if (!DOSVM_IsWin16() && \n                (BX_reg(context) == 1 || BX_reg(context) == 2))\n            {\n                int i;\n                for(i=0; i<CX_reg(context); i++)\n                    DOSVM_PutChar(ptr[i]);\n                SET_AX(context, CX_reg(context));\n                RESET_CFLAG(context);\n            }\n            else\n            {\n                HFILE handle = (HFILE)DosFileHandleToWin32Handle(BX_reg(context));\n                if (!context->SegDs) ptr = MapSL(MAKELONG(context->Edx & 0xffff, DOSMEM_0000H));\n                LONG result = _hwrite( handle, ptr, CX_reg(context) );\n                if (result == HFILE_ERROR)\n                    bSetDOSExtendedError = TRUE;\n                else\n                {\n                    SET_AX( context, (WORD)result );\n                    RESET_CFLAG(context);\n                }\n            }\n        }\n        break;\n\n    case 0x41: /* \"UNLINK\" - DELETE FILE */\n        {\n            WCHAR fileW[MAX_PATH];\n            CHAR buf[MAX_PATH];\n            int count = 0;\n            char *fileA = CTX_SEG_OFF_TO_LIN(context, \n                                             context->SegDs, \n                                             context->Edx);\n            retry:\n            TRACE( \"UNLINK %s\\n\", fileA );\n            MultiByteToWideChar(CP_OEMCP, 0, fileA, -1, fileW, MAX_PATH);\n\n            if (!DeleteFileW( fileW ))\n            {\n                if (!count)\n                {\n                    fileA = RedirectSystemDir(fileA, buf, MAX_PATH);\n                    fileA = RedirectDriveRoot(fileA, buf, MAX_PATH, FALSE);\n                    count = 1;\n                    goto retry;\n                }\n                bSetDOSExtendedError = TRUE;\n            }\n            else\n                RESET_CFLAG(context);\n        }\n        break;\n\n    case 0x42: /* \"LSEEK\" - SET CURRENT FILE POSITION */\n        TRACE( \"LSEEK handle %d offset %d from %s\\n\",\n               BX_reg(context), \n               MAKELONG( DX_reg(context), CX_reg(context) ),\n               (AL_reg(context) == 0) ? \n               \"start of file\" : ((AL_reg(context) == 1) ? \n                                  \"current file position\" : \"end of file\") );\n        {\n            HANDLE handle = DosFileHandleToWin32Handle(BX_reg(context));\n            LONG   offset = MAKELONG( DX_reg(context), CX_reg(context) );\n            DWORD  status = SetFilePointer( handle, offset, \n                                            NULL, AL_reg(context) );\n            if (status == INVALID_SET_FILE_POINTER)\n                bSetDOSExtendedError = TRUE;\n            else\n            {\n                SET_AX( context, LOWORD(status) );\n                SET_DX( context, HIWORD(status) );\n                RESET_CFLAG(context);\n            }\n        }\n        break;\n\n    case 0x43: /* FILE ATTRIBUTES */\n        if (!INT21_FileAttributes( context, AL_reg(context), FALSE ))\n            bSetDOSExtendedError = TRUE;\n        else\n            RESET_CFLAG(context);\n        break;\n\n    case 0x44: /* IOCTL */\n        INT21_Ioctl( context );\n        break;\n\n    case 0x45: /* \"DUP\" - DUPLICATE FILE HANDLE */\n        TRACE( \"DUPLICATE FILE HANDLE %d\\n\", BX_reg(context) );\n        {\n            HANDLE handle32;\n            HFILE  handle16 = HFILE_ERROR;\n\n            if (DuplicateHandle( GetCurrentProcess(),\n                                 DosFileHandleToWin32Handle(BX_reg(context)),\n                                 GetCurrentProcess(), \n                                 &handle32,\n                                 0, TRUE, DUPLICATE_SAME_ACCESS ))\n                handle16 = Win32HandleToDosFileHandle(handle32);\n\n            if (handle16 == HFILE_ERROR)\n                bSetDOSExtendedError = TRUE;\n            else\n            {\n                SET_AX( context, handle16 );\n                RESET_CFLAG(context);\n            }\n        }\n        break;\n\n    case 0x46: /* \"DUP2\", \"FORCEDUP\" - FORCE DUPLICATE FILE HANDLE */\n        TRACE( \"FORCEDUP - FORCE DUPLICATE FILE HANDLE %d to %d\\n\",\n               BX_reg(context), CX_reg(context) );\n        if (!INT21_Dup2(BX_reg(context), CX_reg(context)))\n            bSetDOSExtendedError = TRUE;\n        else\n            RESET_CFLAG(context);\n        break;\n\n    case 0x47: /* \"CWD\" - GET CURRENT DIRECTORY */\n        if (!INT21_GetCurrentDirectory( context, FALSE ))\n            bSetDOSExtendedError = TRUE;\n        else\n            RESET_CFLAG(context);\n        break;\n\n    case 0x48: /* ALLOCATE MEMORY */\n        TRACE( \"ALLOCATE MEMORY for %d paragraphs\\n\", BX_reg(context) );\n        {\n            WORD  selector = 0;\n            DWORD bytes = (DWORD)BX_reg(context) << 4;\n\n            if (!ISV86(context) && DOSVM_IsWin16())\n                selector = GlobalAlloc16( GMEM_FIXED, bytes );\n            else\n                DOSMEM_AllocBlock( bytes, &selector );\n\n            if (selector)\n            {\n                SET_AX( context, selector );\n                RESET_CFLAG(context);\n            }\n            else\n            {\n                SET_CFLAG(context);\n                SET_AX( context, 0x0008 ); /* insufficient memory */\n                SET_BX( context, DOSMEM_Available() >> 4 );\n            }\n        }\n\tbreak;\n\n    case 0x49: /* FREE MEMORY */\n        TRACE( \"FREE MEMORY segment %04X\\n\", context->SegEs );\n        {\n            BOOL ok;\n            \n            if (!ISV86(context) && DOSVM_IsWin16())\n            {\n                ok = !GlobalFree16( context->SegEs );\n\n                /* If we don't reset ES_reg, we will fail in the relay code */\n                if (ok)\n                    context->SegEs = 0;\n            }\n            else\n                ok = context->SegEs && DOSMEM_FreeBlock( PTR_REAL_TO_LIN(context->SegEs, 0) );\n\n            if (!ok)\n            {\n                TRACE(\"FREE MEMORY failed\\n\");\n                SET_CFLAG(context);\n                SET_AX( context, 0x0009 ); /* memory block address invalid */\n            }\n\t}\n        break;\n\n    case 0x4a: /* RESIZE MEMORY BLOCK */\n        TRACE( \"RESIZE MEMORY segment %04X to %d paragraphs\\n\",\n               context->SegEs, BX_reg(context) );\n        {\n            DWORD newsize = (DWORD)BX_reg(context) << 4;\n            \n            if (!ISV86(context) && DOSVM_IsWin16())\n            {\n                FIXME( \"Resize memory block - unsupported under Win16\\n\" );\n                SET_CFLAG(context);\n            }\n            else\n            {\n                LPVOID address = (size_t)(context->SegEs << 4) + DOSMEM_dosmem;\n                UINT blocksize = DOSMEM_ResizeBlock( address, newsize, FALSE );\n\n                RESET_CFLAG(context);\n                if (blocksize == (UINT)-1)\n                {\n                    SET_CFLAG( context );\n                    SET_AX( context, 0x0009 ); /* illegal address */\n                }\n                else if(blocksize != newsize)\n                {\n                    SET_CFLAG( context );\n                    SET_AX( context, 0x0008 );    /* insufficient memory */\n                    SET_BX( context, blocksize >> 4 ); /* new block size */\n                }\n            }\n        }\n        break;\n\n    case 0x4b: /* \"EXEC\" - LOAD AND/OR EXECUTE PROGRAM */\n        {\n            char *program = CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Edx);\n            BYTE *paramblk = CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Ebx);\n\n            TRACE( \"EXEC %s\\n\", program );\n\n            RESET_CFLAG(context);\n            if (DOSVM_IsWin16())\n            {\n                HINSTANCE16 instance = WinExec16( program, SW_NORMAL );\n                if (instance < 32)\n                {\n                    SET_CFLAG( context );\n                    SET_AX( context, instance );\n                }\n            }\n            else\n            {\n                if (!MZ_Exec( context, program, AL_reg(context), paramblk))\n                    bSetDOSExtendedError = TRUE;\n            }\n        }\n        break;\n\n    case 0x4c: /* \"EXIT\" - TERMINATE WITH RETURN CODE */\n        TRACE( \"EXIT with return code %d\\n\", AL_reg(context) );\n        if (DOSVM_IsWin16())\n            DOSVM_Exit( AL_reg(context) );\n        else if(ISV86(context))\n            MZ_Exit( context, FALSE, AL_reg(context) );\n        else\n        {\n            /*\n             * Exit from DPMI.\n             */            \n            ULONG_PTR rv = AL_reg(context);\n            RaiseException( EXCEPTION_VM86_INTx, 0, 1, &rv );\n        }\n        break;\n\n    case 0x4d: /* GET RETURN CODE */\n        TRACE(\"GET RETURN CODE (ERRORLEVEL)\\n\");\n        SET_AX( context, DOSVM_retval );\n        DOSVM_retval = 0;\n        break;\n\n    case 0x4e: /* \"FINDFIRST\" - FIND FIRST MATCHING FILE */\n        TRACE(\"FINDFIRST mask 0x%04x spec %s\\n\",CX_reg(context),\n\t      (LPCSTR)CTX_SEG_OFF_TO_LIN(context,  context->SegDs, context->Edx));\n        if (!INT21_FindFirst(context)) break;\n        /* fall through */\n\n    case 0x4f: /* \"FINDNEXT\" - FIND NEXT MATCHING FILE */\n        TRACE(\"FINDNEXT\\n\");\n        if (!INT21_FindNext(context))\n        {\n            DWORD err = ERROR_NO_MORE_FILES;\n            if (GetLastError() == ERROR_PATH_NOT_FOUND)\n            {\n                /* other errors? */\n                err = ERROR_PATH_NOT_FOUND;\n            }\n            SetLastError(err);\n            SET_AX( context, err );\n            SET_CFLAG(context);\n        }\n        else SET_AX( context, 0 );  /* OK */\n        break;\n\n    case 0x50: /* SET CURRENT PROCESS ID (SET PSP ADDRESS) */\n        TRACE(\"SET CURRENT PROCESS ID (SET PSP ADDRESS)\\n\");\n        DOSVM_psp = BX_reg(context);\n        break;\n\n    case 0x51: /* GET PSP ADDRESS */\n        INT21_GetPSP( context );\n        break;\n\n    case 0x52: /* \"SYSVARS\" - GET LIST OF LISTS */\n        {\n            SEGPTR ptr = DOSDEV_GetLOL( ISV86(context) || !DOSVM_IsWin16() );\n            context->SegEs = SELECTOROF(ptr);\n            SET_BX( context, OFFSETOF(ptr) );\n        }\n        break;\n\n    case 0x54: /* Get Verify Flag */\n        TRACE(\"Get Verify Flag - Not Supported\\n\");\n        SET_AL( context, 0x00 );  /* pretend we can tell. 00h = off 01h = on */\n        break;\n\n    case 0x56: /* \"RENAME\" - RENAME FILE */\n        if (!INT21_RenameFile( context ))\n            bSetDOSExtendedError = TRUE;\n        else\n            RESET_CFLAG(context);\n        break;\n\n    case 0x57: /* FILE DATE AND TIME */\n        if (!INT21_FileDateTime( context ))\n            bSetDOSExtendedError = TRUE;\n        else\n            RESET_CFLAG(context);\n        break;\n\n    case 0x58: /* GET OR SET MEMORY ALLOCATION STRATEGY */\n        switch (AL_reg(context))\n        {\n        case 0x00: /* GET MEMORY ALLOCATION STRATEGY */\n            TRACE( \"GET MEMORY ALLOCATION STRATEGY\\n\" );\n            SET_AX( context, 0 ); /* low memory first fit */\n            break;\n\n        case 0x01: /* SET ALLOCATION STRATEGY */\n            TRACE( \"SET MEMORY ALLOCATION STRATEGY to %d - ignored\\n\",\n                   BL_reg(context) );\n            break;\n\n        case 0x02: /* GET UMB LINK STATE */\n            TRACE( \"GET UMB LINK STATE\\n\" );\n            SET_AL( context, 0 ); /* UMBs not part of DOS memory chain */\n            break;\n\n        case 0x03: /* SET UMB LINK STATE */\n            TRACE( \"SET UMB LINK STATE to %d - ignored\\n\",\n                   BX_reg(context) );\n            break;\n\n        default:\n            INT_BARF( context, 0x21 );\n        }\n        break;\n\n    case 0x59: /* GET EXTENDED ERROR INFO */\n        INT21_GetExtendedError( context );\n        break;\n\n    case 0x5a: /* CREATE TEMPORARY FILE */\n        TRACE(\"CREATE TEMPORARY FILE\\n\");\n        bSetDOSExtendedError = !INT21_CreateTempFile(context);\n        break;\n\n    case 0x5b: /* CREATE NEW FILE */ \n        if (!INT21_CreateFile( context, context->Edx, FALSE,\n                               OF_READWRITE | OF_SHARE_COMPAT, 0x10 ))\n            bSetDOSExtendedError = TRUE;\n        else\n            RESET_CFLAG(context);\n        break;\n\n    case 0x5c: /* \"FLOCK\" - RECORD LOCKING */\n        {\n            DWORD  offset = MAKELONG(DX_reg(context), CX_reg(context));\n            DWORD  length = MAKELONG(DI_reg(context), SI_reg(context));\n            HANDLE handle = DosFileHandleToWin32Handle(BX_reg(context));\n\n            RESET_CFLAG(context);\n            switch (AL_reg(context))\n            {\n            case 0x00: /* LOCK */\n                TRACE( \"lock handle %d offset %d length %d\\n\",\n                       BX_reg(context), offset, length );\n                if (!LockFile( handle, offset, 0, length, 0 ))\n                    bSetDOSExtendedError = TRUE;\n                break;\n\n            case 0x01: /* UNLOCK */\n                TRACE( \"unlock handle %d offset %d length %d\\n\",\n                       BX_reg(context), offset, length );\n                if (!UnlockFile( handle, offset, 0, length, 0 ))\n                    bSetDOSExtendedError = TRUE;\n                break;\n\n            default:\n                INT_BARF( context, 0x21 );\n            }\n        }\n        break;\n\n    case 0x5d: /* NETWORK 5D */\n        FIXME( \"Network function 5D not implemented.\\n\" );\n        SetLastError( ER_NoNetwork );\n        bSetDOSExtendedError = TRUE;\n        break;\n\n    case 0x5e: /* NETWORK 5E */\n        bSetDOSExtendedError = INT21_NetworkFunc( context);\n        break;\n\n    case 0x5f: /* NETWORK 5F */\n        /* FIXME: supporting this would need to 1:\n         * - implement per drive current directory (as kernel32 doesn't)\n         * - assign enabled/disabled flag on a per drive basis\n         */\n        /* network software not installed */\n        TRACE(\"NETWORK function AX=%04x not implemented\\n\",AX_reg(context));\n        SetLastError( ER_NoNetwork );\n        bSetDOSExtendedError = TRUE;\n        break;\n\n    case 0x60: /* \"TRUENAME\" - CANONICALIZE FILENAME OR PATH */\n        {\n            WCHAR       pathW[MAX_PATH], res[MAX_PATH];\n            /* FIXME: likely to be broken */\n\n            TRACE(\"TRUENAME %s\\n\",\n                  (LPCSTR)CTX_SEG_OFF_TO_LIN(context, context->SegDs,context->Esi));\n            MultiByteToWideChar(CP_OEMCP, 0, CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Esi), -1, pathW, MAX_PATH);\n            if (!GetFullPathNameW( pathW, 128, res, NULL ))\n\t\tbSetDOSExtendedError = TRUE;\n            else\n            {\n                SET_AX( context, 0 );\n                WideCharToMultiByte(CP_OEMCP, 0, res, -1, \n                                    CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edi), \n                                    128, NULL, NULL);\n            }\n        }\n        break;\n\n    case 0x61: /* UNUSED */\n        SET_AL( context, 0 );\n        break;\n\n    case 0x62: /* GET PSP ADDRESS */\n        INT21_GetPSP( context );\n        break;\n\n    case 0x63: /* MISC. LANGUAGE SUPPORT */\n        switch (AL_reg(context)) {\n        case 0x00: /* GET DOUBLE BYTE CHARACTER SET LEAD-BYTE TABLE */\n            TRACE( \"GET DOUBLE BYTE CHARACTER SET LEAD-BYTE TABLE\\n\" );\n            context->SegDs = INT21_GetHeapSelector( context );\n            SET_SI( context, offsetof(INT21_HEAP, dbcs_table) );\n            SET_AL( context, 0 ); /* success */\n            break;\n        }\n        break;\n\n    case 0x64: /* OS/2 DOS BOX */\n        INT_BARF( context, 0x21 );\n        SET_CFLAG(context);\n    \tbreak;\n\n    case 0x65: /* EXTENDED COUNTRY INFORMATION */\n        INT21_ExtendedCountryInformation( context );\n        break;\n\n    case 0x66: /* GLOBAL CODE PAGE TABLE */\n        switch (AL_reg(context))\n        {\n        case 0x01:\n            TRACE( \"GET GLOBAL CODE PAGE TABLE\\n\" );\n            SET_BX( context, GetOEMCP() );\n            SET_DX( context, GetOEMCP() );\n            break;\n        case 0x02:\n            FIXME( \"SET GLOBAL CODE PAGE TABLE, active %d, system %d - ignored\\n\",\n                   BX_reg(context), DX_reg(context) );\n            break;\n        }\n        break;\n\n    case 0x67: /* SET HANDLE COUNT */\n        TRACE( \"SET HANDLE COUNT to %d\\n\", BX_reg(context) );\n        if (SetHandleCount( BX_reg(context) ) < BX_reg(context) )\n            bSetDOSExtendedError = TRUE;\n        break;\n\n    case 0x68: /* \"FFLUSH\" - COMMIT FILE */\n        TRACE( \"FFLUSH - handle %d\\n\", BX_reg(context) );\n        if (!FlushFileBuffers( DosFileHandleToWin32Handle(BX_reg(context)) ) &&\n                GetLastError() != ERROR_ACCESS_DENIED)\n            bSetDOSExtendedError = TRUE;\n        break;\n\n    case 0x69: /* DISK SERIAL NUMBER */\n        switch (AL_reg(context))\n        {\n        case 0x00:\n\t    TRACE(\"GET DISK SERIAL NUMBER for drive %s\\n\",\n\t\t  INT21_DriveName(BL_reg(context)));\n            if (!INT21_GetDiskSerialNumber(context)) bSetDOSExtendedError = TRUE;\n            else SET_AX( context, 0 );\n            break;\n\n        case 0x01:\n\t    TRACE(\"SET DISK SERIAL NUMBER for drive %s\\n\",\n\t\t  INT21_DriveName(BL_reg(context)));\n            if (!INT21_SetDiskSerialNumber(context)) bSetDOSExtendedError = TRUE;\n            else SET_AX( context, 1 );\n            break;\n        }\n        break;\n\n    case 0x6a: /* COMMIT FILE */\n        TRACE( \"COMMIT FILE - handle %d\\n\", BX_reg(context) );\n        if (!FlushFileBuffers( DosFileHandleToWin32Handle(BX_reg(context)) ) &&\n                GetLastError() != ERROR_ACCESS_DENIED)\n            bSetDOSExtendedError = TRUE;\n        break;\n\n    case 0x6b: /* NULL FUNCTION FOR CP/M COMPATIBILITY */\n        SET_AL( context, 0 );\n        break;\n\n    case 0x6c: /* EXTENDED OPEN/CREATE */\n        if (!INT21_CreateFile( context, context->Esi, TRUE,\n                               BX_reg(context), DL_reg(context) ))\n            bSetDOSExtendedError = TRUE;\n        break;\n\n    case 0x70: /* MSDOS 7 - GET/SET INTERNATIONALIZATION INFORMATION */\n        FIXME( \"MS-DOS 7 - GET/SET INTERNATIONALIZATION INFORMATION\\n\" );\n        SET_CFLAG( context );\n        SET_AL( context, 0 );\n        break;\n\n    case 0x71: /* MSDOS 7 - LONG FILENAME FUNCTIONS */\n        INT21_LongFilename( context );\n        break;\n\n    case 0x73: /* MSDOS7 - FAT32 */\n        RESET_CFLAG( context );\n        if (!INT21_Fat32( context ))\n            bSetDOSExtendedError = TRUE;\n        break;\n\n    case 0xdc: /* CONNECTION SERVICES - GET CONNECTION NUMBER */\n        TRACE( \"CONNECTION SERVICES - GET CONNECTION NUMBER - ignored\\n\" );\n        break;\n\n    case 0xea: /* NOVELL NETWARE - RETURN SHELL VERSION */\n        TRACE( \"NOVELL NETWARE - RETURN SHELL VERSION - ignored\\n\" );\n        break;\n\n    case 0xff: /* DOS32 EXTENDER (DOS/4GW) - API */\n\t/* we don't implement a DOS32 extender */\n        TRACE( \"DOS32 EXTENDER API - ignored\\n\" );\n        break;\n\n    default:\n        INT_BARF( context, 0x21 );\n        break;\n\n    } /* END OF SWITCH */\n\n    /* Set general error condition. */\n    if (bSetDOSExtendedError)\n    {\n        SET_AX( context, GetLastError() );\n        SET_CFLAG( context );\n    }\n\n    /* Print error code if carry flag is set. */\n    if (context->EFlags & 0x0001)\n        TRACE(\"failed, error %d\\n\", GetLastError() );\n\n    TRACE( \"returning: AX=%04x BX=%04x CX=%04x DX=%04x \"\n           \"SI=%04x DI=%04x DS=%04x ES=%04x EFL=%08x\\n\",\n           AX_reg(context), BX_reg(context), \n           CX_reg(context), DX_reg(context), \n           SI_reg(context), DI_reg(context),\n           (WORD)context->SegDs, (WORD)context->SegEs,\n           context->EFlags );\n}\n"
  },
  {
    "path": "krnl386/int25.c",
    "content": "/*\n * DOS interrupt 25h handler\n *\n * Copyright 1997 Andreas Mohr\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <string.h>\n#include <fcntl.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#include \"dosexe.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(int);\n\n\n/***********************************************************************\n *           DOSVM_RawRead\n *\n * Read raw sectors from a device.\n */\nBOOL DOSVM_RawRead(BYTE drive, DWORD begin, DWORD nr_sect, BYTE *dataptr, BOOL fake_success)\n{    \n    WCHAR root[] = {'\\\\','\\\\','.','\\\\','A',':',0};\n    HANDLE h;\n\n    TRACE( \"abs diskread, drive %d, sector %d, \"\n           \"count %d, buffer %p\\n\",\n           drive, begin, nr_sect, dataptr );\n\n    root[4] += drive;\n    h = CreateFileW(root, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,\n                    FILE_FLAG_BACKUP_SEMANTICS, NULL);\n    if (h != INVALID_HANDLE_VALUE)\n    {\n        DWORD r;\n        SetFilePointer(h, begin * 512, NULL, SEEK_SET );\n        /* FIXME: check errors */\n        ReadFile(h, dataptr, nr_sect * 512, &r, NULL );\n        CloseHandle(h);\n    }\n    else\n    {\n        memset( dataptr, 0, nr_sect * 512 );\n        if (fake_success)\n        {\n            /* FIXME: explain what happens here */\n            if (begin == 0 && nr_sect > 1) *(dataptr + 512) = 0xf8;\n            if (begin == 1) *dataptr = 0xf8;\n        }\n        else\n            return FALSE;\n    }\n\n    return TRUE;\n}\n\n\n/**********************************************************************\n *\t    DOSVM_Int25Handler\n *\n * Handler for int 25h (absolute disk read).\n */\nvoid WINAPI DOSVM_Int25Handler( CONTEXT *context )\n{\n    WCHAR drivespec[] = {'A', ':', '\\\\', 0};\n    BYTE *dataptr = CTX_SEG_OFF_TO_LIN( context, context->SegDs, context->Ebx );\n    DWORD begin;\n    DWORD length;\n\n    PUSH_WORD16(context, (WORD)context->EFlags);\n    drivespec[0] += AL_reg( context );\n\n    if (GetDriveTypeW( drivespec ) == DRIVE_NO_ROOT_DIR || \n        GetDriveTypeW( drivespec ) == DRIVE_UNKNOWN)\n    {\n        SET_CFLAG( context );\n        SET_AX( context, 0x0201 ); /* unknown unit */\n        return;\n    }\n\n    if (CX_reg( context ) == 0xffff)\n    {\n        begin   = *(DWORD *)dataptr;\n        length  = *(WORD *)(dataptr + 4);\n        dataptr = (BYTE *)CTX_SEG_OFF_TO_LIN( context,\n                                              *(WORD *)(dataptr + 8), \n                                              *(DWORD *)(dataptr + 6) );\n    }\n    else\n    {\n        begin  = DX_reg( context );\n        length = CX_reg( context );\n    }\n\n    DOSVM_RawRead( AL_reg( context ), begin, length, dataptr, TRUE );\n    RESET_CFLAG( context );\n}\n"
  },
  {
    "path": "krnl386/int26.c",
    "content": "/*\n * DOS interrupt 26h handler\n *\n * Copyright 1997 Andreas Mohr\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <fcntl.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#include \"dosexe.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(int);\n\n\n/***********************************************************************\n *           DOSVM_RawWrite\n *\n * Write raw sectors to a device.\n */\nBOOL DOSVM_RawWrite(BYTE drive, DWORD begin, DWORD nr_sect, BYTE *dataptr, BOOL fake_success)\n{\n    WCHAR root[] = {'\\\\','\\\\','.','\\\\','A',':',0};\n    HANDLE h;\n    DWORD w;\n\n    TRACE( \"abs diskwrite, drive %d, sector %d, \"\n           \"count %d, buffer %p\\n\",\n           drive, begin, nr_sect, dataptr );\n\n    root[4] += drive;\n    h = CreateFileW(root, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING,\n                    0, NULL);\n    if (h != INVALID_HANDLE_VALUE)\n    {\n        SetFilePointer(h, begin * 512, NULL, SEEK_SET );\n        /* FIXME: check errors */\n        WriteFile( h, dataptr, nr_sect * 512, &w, NULL );\n        CloseHandle( h );\n    }\n    else if (!fake_success)\n        return FALSE;\n\n    return TRUE;\n}\n\n\n/**********************************************************************\n *\t    DOSVM_Int26Handler\n *\n * Handler for int 26h (absolute disk write).\n */\nvoid WINAPI DOSVM_Int26Handler( CONTEXT *context )\n{\n    WCHAR drivespec[] = {'A', ':', '\\\\', 0};\n    BYTE *dataptr = CTX_SEG_OFF_TO_LIN( context, context->SegDs, context->Ebx );\n    DWORD begin;\n    DWORD length;\n\n    drivespec[0] += AL_reg( context );\n\n    if (GetDriveTypeW( drivespec ) == DRIVE_NO_ROOT_DIR || \n        GetDriveTypeW( drivespec ) == DRIVE_UNKNOWN)\n    {\n        SET_CFLAG( context );\n        SET_AX( context, 0x0201 ); /* unknown unit */\n        return;\n    }\n\n    if (CX_reg( context ) == 0xffff)\n    {\n        begin   = *(DWORD *)dataptr;\n        length  = *(WORD *)(dataptr + 4);\n        dataptr = (BYTE *)CTX_SEG_OFF_TO_LIN( context,\n                                              *(WORD *)(dataptr + 8), \n                                              *(DWORD *)(dataptr + 6) );\n    }\n    else\n    {\n        begin  = DX_reg( context );\n        length = CX_reg( context );\n    }\n\n    DOSVM_RawWrite( AL_reg( context ), begin, length, dataptr, TRUE );\n    RESET_CFLAG( context );\n}\n"
  },
  {
    "path": "krnl386/int2f.c",
    "content": "/* -*- tab-width: 8; c-basic-offset: 4 -*- */\n/*\n * DOS interrupt 2fh handler\n *\n *  Cdrom - device driver emulation - Audio features.\n *     Copyright (c) 1998 Petr Tomasek <tomasek@etf.cuni.cz>\n *     Copyright (c) 1999,2002 Eric Pouech\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <string.h>\n\n#include \"ntstatus.h\"\n#define WIN32_NO_STATUS\n#define NONAMELESSUNION\n#include \"wine/winbase16.h\"\n#include \"wine/debug.h\"\n#include \"winternl.h\"\n#include \"winioctl.h\"\n#include \"ntddstor.h\"\n#include \"ntddcdrm.h\"\n#include \"dosexe.h\"\n#include \"kernel16_private.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(int);\n\n/* base KERNEL ordinal number for VxDs */\n#define VXD_BASE 900\n\ntypedef struct\n{\n    DOS_DEVICE_HEADER hdr;\n\n    WORD  reserved;             /* must be 0 */\n    BYTE  drive;                /* drive letter (0=A:, 1=B:, ...) */\n    BYTE  units;                /* number of supported units */\n} CDROM_DEVICE_HEADER;\n\ntypedef struct\n{\n    CDROM_DEVICE_HEADER hdr;\n    WINEDEV_THUNK thunk;\n\n    WORD  cdrom_segment;        /* Real mode segment for CDROM_HEAP */\n    WORD  cdrom_selector;\t/* Protected mode selector for CDROM_HEAP */\n} CDROM_HEAP;\n\nstatic void do_int2f_16( CONTEXT *context );\nstatic void MSCDEX_Handler( CONTEXT *context );\n\n/**********************************************************************\n *          DOSVM_Int2fHandler\n *\n * Handler for int 2fh (multiplex).\n */\nvoid WINAPI DOSVM_Int2fHandler( CONTEXT *context )\n{\n    TRACE(\"Subfunction 0x%X\\n\", AX_reg(context));\n\n    switch(AH_reg(context))\n    {\n    case 0x10:\n        SET_AL( context, 0xff ); /* share is installed */\n        break;\n\n    case 0x11:  /* Network Redirector / IFSFUNC */\n        switch (LOBYTE(context->Eax))\n        {\n        case 0x00:  /* Install check */\n            /* not installed */\n            break;\n        case 0x80:  /* Enhanced services - Install check */\n            /* not installed */\n            break;\n        default:\n           INT_BARF( context, 0x2f );\n            break;\n        }\n        break;\n\n    case 0x12:\n        switch (LOBYTE(context->Eax))\n        {\n        case 0x2e: /* get or set DOS error table address */\n            switch (DL_reg(context))\n            {\n            /* Four tables: even commands are 'get', odd are 'set' */\n            /* DOS 5.0+ ignores \"set\" commands */\n            case 0x01:\n            case 0x03:\n            case 0x05:\n            case 0x07:\n            case 0x09:\n                break;\n            /* Instead of having a message table in DOS-space, */\n            /* we can use a special case for MS-DOS to force   */\n            /* the secondary interface.                               */\n            case 0x00:\n            case 0x02:\n            case 0x04:\n            case 0x06:\n                context->SegEs = 0x0001;\n                SET_DI( context, 0x0000 );\n                break;\n            case 0x08:\n                FIXME(\"No real-mode handler for errors yet! (bye!)\\n\");\n                break;\n            default:\n                INT_BARF(context, 0x2f);\n            }\n            break;\n        default:\n           INT_BARF(context, 0x2f);\n        }\n        break;\n\n    case 0x15: /* mscdex */\n        MSCDEX_Handler(context);\n        break;\n\n    case 0x16:\n        do_int2f_16( context );\n        break;\n\n    case 0x1a: /* ANSI.SYS / AVATAR.SYS Install Check */\n        /* Not supported yet, do nothing */\n        break;\n\n    case 0x43:\n#if 1\n       switch (LOBYTE(context->Eax))\n       {\n       case 0x00:   /* XMS v2+ installation check */\n           WARN(\"XMS is not fully implemented\\n\");\n           SET_AL( context, 0x80 );\n           break;\n       case 0x10:   /* XMS v2+ get driver address */\n       {\n            context->SegEs = DOSVM_dpmi_segments->xms_seg;\n            SET_BX( context, 0 );\n            break;\n       }\n       default:\n           INT_BARF( context, 0x2f );\n       }\n#else\n       FIXME(\"check for XMS (not supported)\\n\");\n       SET_AL( context, 0x42 ); /* != 0x80 */\n#endif\n       break;\n\n    case 0x45:\n       switch (LOBYTE(context->Eax))\n       {\n       case 0x00:\n       case 0x01:\n       case 0x02:\n       case 0x03:\n       case 0x04:\n       case 0x05:\n       case 0x06:\n       case 0x07:\n       case 0x08:\n           /* Microsoft Profiler - not installed */\n           break;\n       default:\n            INT_BARF( context, 0x2f );\n       }\n       break;\n\n    case 0x4a:\n        switch(LOBYTE(context->Eax))\n        {\n       case 0x10:  /* smartdrv */\n           break;  /* not installed */\n        case 0x11:  /* dblspace */\n            break;  /* not installed */\n        case 0x12:  /* realtime compression interface */\n            break;  /* not installed */\n        case 0x32:  /* patch IO.SYS (???) */\n            break;  /* we have no IO.SYS, so we can't patch it :-/ */\n        default:\n            INT_BARF( context, 0x2f );\n        }\n        break;\n    case 0x4b:\n       switch(LOBYTE(context->Eax))\n       {\n       case 0x01:\n       case 0x02:\n       case 0x03:\n       case 0x04:\n       case 0x05:\n           FIXME(\"Task Switcher - not implemented\\n\");\n           break;\n       default:\n           INT_BARF( context, 0x2f );\n       }\n       break;\n    case 0x4f:\n        switch (LOBYTE(context->Eax))\n        {\n        case 0x01: /*get code page*/\n            SET_AX(context, 0);\n            SET_BX(context, GetConsoleCP());\n            break;\n        default:\n            INT_BARF(context, 0x2f);\n            SET_AX(context, 1);\n            SET_CFLAG(context);\n\n        }\n        break;\n    case 0x56:  /* INTERLNK */\n       switch(LOBYTE(context->Eax))\n       {\n       case 0x01:  /* check if redirected drive */\n           SET_AL( context, 0 ); /* not redirected */\n           break;\n       default:\n           INT_BARF( context, 0x2f );\n       }\n       break;\n    case 0x7a:  /* NOVELL NetWare */\n        switch (LOBYTE(context->Eax))\n        {\n       case 0x0:  /* Low-level Netware installation check AL=0 not installed.*/\n            SET_AL( context, 0 );\n            break;\n        case 0x20:  /* Get VLM Call Address */\n            /* return nothing -> NetWare not installed */\n            break;\n        default:\n           INT_BARF( context, 0x2f );\n            break;\n        }\n        break;\n    case 0xb7:  /* append */\n        SET_AL( context, 0 ); /* not installed */\n        break;\n    case 0xb8:  /* network */\n        switch (LOBYTE(context->Eax))\n        {\n        case 0x00:  /* Install check */\n            /* not installed */\n            break;\n        default:\n           INT_BARF( context, 0x2f );\n            break;\n        }\n        break;\n    case 0xbc:\n\tif (AL_reg(context) == 0x00 && BX_reg(context) == 0x3f3f) {\n\t    /* MVSOUND.SYS - Install check: not installed */\n\t} else { \n\t    INT_BARF( context, 0x2f );\n\t}\n       break;\n    case 0xbd:  /* some Novell network install check ??? */\n        SET_AX( context, 0xa5a5 ); /* pretend to have Novell IPX installed */\n       break;\n    case 0xbf:  /* REDIRIFS.EXE */\n        switch (LOBYTE(context->Eax))\n        {\n        case 0x00:  /* Install check */\n            /* not installed */\n            break;\n        default:\n           INT_BARF( context, 0x2f );\n            break;\n        }\n        break;\n    case 0xd2:\n       switch(LOBYTE(context->Eax))\n       {\n       case 0x01: /* Quarterdeck RPCI - QEMM/QRAM - PCL-838.EXE functions */\n           if(BX_reg(context) == 0x5145 && CX_reg(context) == 0x4D4D\n             && DX_reg(context) == 0x3432)\n               TRACE(\"Check for QEMM v5.0+ (not installed)\\n\");\n           break;\n       default:\n           INT_BARF( context, 0x2f );\n           break;\n       }\n       break;\n    case 0xd7:  /* Banyan Vines */\n        switch (LOBYTE(context->Eax))\n        {\n        case 0x01:  /* Install check - Get Int Number */\n            /* not installed */\n            break;\n        default:\n           INT_BARF( context, 0x2f );\n            break;\n        }\n        break;\n    case 0xde:\n       switch(LOBYTE(context->Eax))\n       {\n       case 0x01:   /* Quarterdeck QDPMI.SYS - DESQview */\n           if(BX_reg(context) == 0x4450 && CX_reg(context) == 0x4d49\n             && DX_reg(context) == 0x8f4f)\n               TRACE(\"Check for QDPMI.SYS (not installed)\\n\");\n           break;\n       default:\n           INT_BARF( context, 0x2f );\n           break;\n       }\n       break;\n    case 0xfa:  /* Watcom debugger check, returns 0x666 if installed */\n        break;\n    case 0x40:\n        switch (LOBYTE(context->Eax))\n        {\n        case 0x00:\n            SET_AL(context, 0xff);\n            break;\n        default:\n            INT_BARF( context, 0x2f );\n            break;\n        }\n        break;\n    default:\n        INT_BARF( context, 0x2f );\n        break;\n    }\n}\n\n\n/**********************************************************************\n *         do_int2f_16\n */\nstatic void do_int2f_16( CONTEXT *context )\n{\n    DWORD addr;\n\n    switch(LOBYTE(context->Eax))\n    {\n    case 0x00:  /* Windows enhanced mode installation check */\n        SET_AX( context, LOWORD(GetVersion16()) );\n        break;\n\n    case 0x0a:  /* Get Windows version and type */\n        SET_AX( context, 0 );\n        SET_BX( context, (LOWORD(GetVersion16()) << 8) | (LOWORD(GetVersion16()) >> 8) );\n        SET_CX( context, 3 );\n        break;\n\n    case 0x0b:  /* Identify Windows-aware TSRs */\n        /* we don't have any pre-Windows TSRs */\n        break;\n\n    case 0x11:  /* Get Shell Parameters - (SHELL= in CONFIG.SYS) */\n        /* We can mock this up. But not today... */\n        FIXME(\"Get Shell Parameters\\n\");\n        break;\n\n    case 0x80:  /* Release time-slice */\n       /* Linux sched_yield() still keeps burning CPU cycles\n        * if the current process is the only one in highest priority list\n        * (as Linux will immediately return to this process to waste\n        * more CPU cycles), so sched_yield() is essentially useless for us\n        * (poor API, if you ask me: its return code should indicate\n        * whether other processes did run in between, in order for us\n        * to be able to decide whether to do an additional Sleep() or not...)\n        * Thus we better unconditionally use a well-balanced Sleep()\n        * instead to really make sure the process calling int 0x2f/0x1680\n        * *doesn't* use 100% CPU...\n        */\n       Sleep(55); /* just wait 55ms (one \"timer tick\") for now. */\n       SET_AL( context, 0 );\n        break;\n\n    case 0x81: /* Begin critical section.  */\n        /* FIXME? */\n        break;\n\n    case 0x82: /* End critical section.  */\n        /* FIXME? */\n        break;\n\n    case 0x83:  /* Return Current Virtual Machine ID */\n        /* Virtual Machines are usually created/destroyed when Windows runs\n         * DOS programs. Since we never do, we are always in the System VM.\n         * According to Ralf Brown's Interrupt List, never return 0. But it\n         * seems to work okay (returning 0), just to be sure we return 1.\n         */\n       SET_BX( context, 1 ); /* VM 1 is probably the System VM */\n       break;\n\n    case 0x84:  /* Get device API entry point */\n        {\n            HMODULE16 mod = GetModuleHandle16(\"kernel\");\n            addr = (DWORD)GetProcAddress16( mod, (LPCSTR)(VXD_BASE + BX_reg(context)) );\n            if (!addr)  /* not supported */\n                ERR(\"Accessing unknown VxD %04x - Expect a failure now.\\n\", BX_reg(context) );\n            context->SegEs = SELECTOROF(addr);\n            SET_DI( context, OFFSETOF(addr) );\n        }\n       break;\n\n    case 0x86:  /* DPMI detect mode */\n        SET_AX( context, 0 );  /* Running under DPMI */\n        break;\n\n    case 0x87: /* DPMI installation check */\n        {\n           SYSTEM_INFO si;\n           GetSystemInfo(&si);\n           SET_AX( context, 0x0000 ); /* DPMI Installed */\n            SET_BX( context, 0x0001 ); /* 32bits available */\n            SET_CL( context, si.wProcessorLevel );\n            SET_DX( context, 0x005a ); /* DPMI major/minor 0.90 */\n            SET_SI( context, 0 );      /* # of para. of DOS extended private data */\n            context->SegEs = DOSVM_dpmi_segments->dpmi_seg;\n            SET_DI( context, 0 );      /* ES:DI is DPMI switch entry point */\n            break;\n        }\n    case 0x8a:  /* DPMI get vendor-specific API entry point. */\n       /* The 1.0 specs say this should work with all 0.9 hosts.  */\n       break;\n\n    default:\n        INT_BARF( context, 0x2f );\n    }\n}\n\n/* FIXME: this macro may have to be changed on architectures where <size> reads/writes\n * must be <size> aligned\n * <size> could be WORD, DWORD...\n * in this case, we would need two macros, one for read, the other one for write\n * Note: PTR_AT can be used as an l-value\n */\n#define        PTR_AT(_ptr, _ofs, _typ)        (*((_typ*)(((char*)_ptr)+(_ofs))))\n\n/* Use #if 1 if you want full int 2f debug... normal users can leave it at 0 */\n#if 0\n/**********************************************************************\n *         MSCDEX_Dump                                 [internal]\n *\n * Dumps mscdex requests to int debug channel.\n */\nstatic void    MSCDEX_Dump(char* pfx, BYTE* req, int dorealmode)\n{\n    int        i;\n    BYTE       buf[2048];\n    BYTE*      ptr;\n    BYTE*      ios;\n\n    ptr = buf;\n    ptr += sprintf(ptr, \"%s\\tCommand => \", pfx);\n    for (i = 0; i < req[0]; i++) {\n       ptr += sprintf(ptr, \"%02x \", req[i]);\n    }\n\n    switch (req[2]) {\n    case 3:\n    case 12:\n       ptr += sprintf(ptr, \"\\n\\t\\t\\t\\tIO_struct => \");\n       ios = (dorealmode) ? PTR_REAL_TO_LIN( PTR_AT(req, 16, WORD), PTR_AT(req, 14, WORD)) :\n                             MapSL(MAKESEGPTR(PTR_AT(req, 16, WORD), PTR_AT(req, 14, WORD)));\n\n       for (i = 0; i < PTR_AT(req, 18, WORD); i++) {\n           ptr += sprintf(ptr, \"%02x \", ios[i]);\n           if ((i & 0x1F) == 0x1F) {\n               *ptr++ = '\\n';\n               *ptr = 0;\n           }\n       }\n       break;\n    }\n    TRACE(\"%s\\n\", buf);\n}\n#else\n#define MSCDEX_Dump(pfx, req, drm)\n#endif\n\n#define CDFRAMES_PERSEC                 75\n#define CDFRAMES_PERMIN                 (CDFRAMES_PERSEC * 60)\n#define FRAME_OF_ADDR(a)        ((a)[1] * CDFRAMES_PERMIN + (a)[2] * CDFRAMES_PERSEC + (a)[3])\n#define FRAME_OF_TOC(toc, idx)  FRAME_OF_ADDR((toc).TrackData[idx - (toc).FirstTrack].Address)\n#define CTRL_OF_TOC(toc, idx)   (((toc).TrackData[idx - (toc).FirstTrack].Control << 4) | \\\n                                  (toc).TrackData[idx - (toc).FirstTrack].Adr)\n\nstatic void    MSCDEX_StoreMSF(DWORD frame, BYTE* val)\n{\n    val[3] = 0;        /* zero */\n    val[2] = frame / CDFRAMES_PERMIN; /* minutes */\n    val[1] = (frame / CDFRAMES_PERSEC) % 60; /* seconds */\n    val[0] = frame % CDFRAMES_PERSEC; /* frames */\n}\n\nstatic BOOL is_cdrom(int drive)\n{\n    char root[] = \"A:\\\\\";\n    root[0] += drive;\n    return (GetDriveTypeA(root) == DRIVE_CDROM);\n}\n\n/***********************************************************************\n *           CDROM_FillHeap\n *\n * Initialize CDROM heap.\n *\n */\nstatic void CDROM_FillHeap( CDROM_HEAP *heap )\n{\n    int drive, count;\n\n    /* Count the number of contiguous CDROM drives\n     */\n    for (drive = count = 0; drive < 26; drive++) {\n        if (is_cdrom(drive)) {\n            while (is_cdrom(drive + count)) count++;\n            break;\n        }\n    }\n    TRACE(\"Installation check: %d cdroms, starting at %d\\n\", count, drive);\n    heap->hdr.drive = (drive < 26) ? drive : 0;\n    heap->hdr.units = count;\n    heap->hdr.reserved = 0;\n}\n\n/**********************************************************************\n *         CDROM_GetHeap\n *\n * Get pointer for CDROM heap (CDROM_HEAP).\n * Creates and initializes heap on first call.\n */\nstatic CDROM_HEAP *CDROM_GetHeap( void )\n{\n    static CDROM_HEAP *heap_pointer = NULL;\n\n    if ( !heap_pointer )\n    {\n        WORD heap_segment;\n        WORD heap_selector;\n\n        /* allocate a new DOS data segment */\n        heap_pointer = DOSVM_AllocDataUMB( sizeof(CDROM_HEAP),\n                                           &heap_segment,\n                                           &heap_selector );\n\n        heap_pointer->cdrom_segment  = heap_segment;\n        heap_pointer->cdrom_selector = heap_selector;\n        CDROM_FillHeap( heap_pointer );\n    }\n\n    return heap_pointer;\n}\n\nstatic void MSCDEX_Request(BYTE *driver_request, BOOL dorealmode)\n{\n    BYTE*       io_stru;\n    BYTE        Error = 255; /* No Error */\n    char        devName[] = \"\\\\\\\\.\\\\@:\";\n    HANDLE      h;\n    CDROM_TOC                   toc;\n    CDROM_SUB_Q_DATA_FORMAT     fmt;\n    SUB_Q_CHANNEL_DATA          data;\n    DWORD                       br;\n    BOOL                        present = TRUE;\n\n    /* FIXME\n     * the following tests are wrong because lots of functions don't require the\n     * tray to be closed with a CD inside\n     */\n    TRACE(\"CDROM device driver -> command <%d>\\n\", driver_request[2]);\n\n    MSCDEX_Dump(\"Beg\", driver_request, dorealmode);\n\n    /* set status to 0 */\n    PTR_AT(driver_request, 3, WORD) = 0;\n    devName[4] = 'A' + CDROM_GetHeap()->hdr.drive + driver_request[1];\n    h = CreateFileA(devName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0);\n    if (h == INVALID_HANDLE_VALUE) {\n        WARN(\"Couldn't open cdrom handle\\n\");\n        driver_request[4] |= 0x80;\n        driver_request[3] = 1;  /* unknown unit */\n        return;\n    }\n\n    fmt.Format = IOCTL_CDROM_CURRENT_POSITION;\n    if (!DeviceIoControl(h, IOCTL_CDROM_READ_TOC, NULL, 0, &toc, sizeof(toc), &br, NULL) ||\n        !DeviceIoControl(h, IOCTL_CDROM_READ_Q_CHANNEL, &fmt, sizeof(fmt),\n                         &data, sizeof(data), &br, NULL)) {\n        if (GetLastError() == STATUS_NO_MEDIA_IN_DEVICE)\n        {\n            if (driver_request[2] != 6 && driver_request[2] != 15)\n            {\n                driver_request[4] |= 0x80;\n                driver_request[3] = 2; /* drive not ready */\n                CloseHandle(h);\n                return;\n            }\n            present = FALSE;\n        }\n        else\n        {\n            driver_request[4] |= 0x80;\n            driver_request[3] = 1;     /* unknown unit */\n            CloseHandle(h);\n            return;\n        }\n    }\n\n    switch (driver_request[2]) {\n    case 3:\n        io_stru = (dorealmode) ?\n            PTR_REAL_TO_LIN( PTR_AT(driver_request, 16, WORD), PTR_AT(driver_request, 14, WORD) ) :\n            MapSL( MAKESEGPTR(PTR_AT(driver_request, 16, WORD), PTR_AT(driver_request, 14, WORD)));\n\n        TRACE(\" --> IOCTL INPUT <%d>\\n\", io_stru[0]);\n        switch (io_stru[0]) {\n#if 0\n        case 0: /* Get device Header */\n        {\n            static  LPSTR ptr = 0;\n            if (ptr == 0)   {\n                ptr = SEGPTR_ALLOC(22);\n                PTR_AT(ptr,  0, DWORD) = ~1;        /* Next Device Driver */\n                PTR_AT(ptr,  4,  WORD) = 0xC800;    /* Device attributes  */\n                PTR_AT(ptr,  6,  WORD) = 0x1234;    /* Pointer to device strategy routine: FIXME */\n                PTR_AT(ptr,  8,  WORD) = 0x3142;    /* Pointer to device interrupt routine: FIXME */\n                PTR_AT(ptr, 10,  char) = 'W';       /* 8-byte character device name field */\n                PTR_AT(ptr, 11,  char) = 'I';\n                PTR_AT(ptr, 12,  char) = 'N';\n                PTR_AT(ptr, 13,  char) = 'E';\n                PTR_AT(ptr, 14,  char) = '_';\n                PTR_AT(ptr, 15,  char) = 'C';\n                PTR_AT(ptr, 16,  char) = 'D';\n                PTR_AT(ptr, 17,  char) = '_';\n                PTR_AT(ptr, 18,  WORD) = 0;         /* Reserved (must be zero) */\n                PTR_AT(ptr, 20,  BYTE) = 0;         /* Drive letter (must be zero) */\n                PTR_AT(ptr, 21,  BYTE) = 1;         /* Number of units supported (one or more) FIXME*/\n            }\n            PTR_AT(io_stru, DWORD,  0) = SEGPTR_GET(ptr);\n        }\n        break;\n#endif\n\n        case 1: /* location of head */\n            switch (io_stru[1]) {\n            case 0:\n                PTR_AT(io_stru, 2, DWORD) =\n                    FRAME_OF_ADDR(data.CurrentPosition.AbsoluteAddress);\n                break;\n            case 1:\n                MSCDEX_StoreMSF(FRAME_OF_ADDR(data.CurrentPosition.AbsoluteAddress),\n                                io_stru + 2);\n                break;\n            default:\n                ERR(\"CD-ROM driver: unsupported addressing mode !!\\n\");\n                Error = 0x0c;\n            }\n            TRACE(\" ----> HEAD LOCATION <%d>\\n\", PTR_AT(io_stru, 2, DWORD));\n            break;\n\n        case 4: /* Audio channel info */\n            io_stru[1] = 0;\n            io_stru[2] = 0xff;\n            io_stru[3] = 1;\n            io_stru[4] = 0xff;\n            io_stru[5] = 2;\n            io_stru[6] = 0;\n            io_stru[7] = 3;\n            io_stru[8] = 0;\n            TRACE(\" ----> AUDIO CHANNEL INFO\\n\");\n            break;\n\n        case 6: /* device status */\n            PTR_AT(io_stru, 1, DWORD) = 0x00000290;\n            /* 290 =>\n             * 1        Supports HSG and Red Book addressing modes\n             * 0        Supports audio channel manipulation\n             *\n             * 1        Supports prefetching requests\n             * 0        Reserved\n             * 0        No interleaving\n             * 1        Data read and plays audio/video tracks\n             *\n             * 0        Read only\n             * 0        Supports only cooked reading\n             * 0        Door locked\n             * 0        see below (Door closed/opened)\n             */\n            if (!present) PTR_AT(io_stru, 1, DWORD) |= 1;\n            TRACE(\" ----> DEVICE STATUS <0x%08x>\\n\", PTR_AT(io_stru, 1, DWORD));\n            break;\n\n        case 8: /* Volume size */\n            PTR_AT(io_stru, 1, DWORD) = FRAME_OF_TOC(toc, toc.LastTrack + 1) -\n                FRAME_OF_TOC(toc, toc.FirstTrack) - 1;\n            TRACE(\" ----> VOLUME SIZE <%d>\\n\", PTR_AT(io_stru, 1, DWORD));\n            break;\n\n        case 9: /* media changed ? */\n            /* answers don't know... -1/1 for yes/no would be better */\n            io_stru[1] = 0; /* FIXME? 1? */\n            TRACE(\" ----> MEDIA CHANGED <%d>\\n\", io_stru[1]);\n            break;\n\n        case 10: /* audio disk info */\n            io_stru[1] = toc.FirstTrack; /* starting track of the disc */\n            io_stru[2] = toc.LastTrack;  /* ending track */\n            MSCDEX_StoreMSF(FRAME_OF_TOC(toc, toc.LastTrack + 1) -\n                            FRAME_OF_TOC(toc, toc.FirstTrack) - 1, io_stru + 3);\n\n            TRACE(\" ----> AUDIO DISK INFO <%d-%d/%08x>\\n\",\n                  io_stru[1], io_stru[2], PTR_AT(io_stru, 3, DWORD));\n            break;\n\n        case 11: /* audio track info */\n            if (io_stru[1] >= toc.FirstTrack && io_stru[1] <= toc.LastTrack) {\n                MSCDEX_StoreMSF(FRAME_OF_TOC(toc, io_stru[1]), io_stru + 2);\n                /* starting point if the track */\n                io_stru[6] = CTRL_OF_TOC(toc, io_stru[1]);\n            } else {\n                PTR_AT(io_stru, 2, DWORD) = 0;\n                io_stru[6] = 0;\n            }\n            TRACE(\" ----> AUDIO TRACK INFO[%d] = [%08x:%d]\\n\",\n                  io_stru[1], PTR_AT(io_stru, 2, DWORD), io_stru[6]);\n            break;\n\n        case 12: /* get Q-Channel info */\n            io_stru[1] = CTRL_OF_TOC(toc, data.CurrentPosition.TrackNumber);\n            io_stru[2] = data.CurrentPosition.TrackNumber;\n            io_stru[3] = 0; /* FIXME ?? */\n\n            /* why the heck did MS use another format for 0MSF information... sigh */\n            {\n                BYTE    bTmp[4];\n\n                MSCDEX_StoreMSF(FRAME_OF_ADDR(data.CurrentPosition.TrackRelativeAddress), bTmp);\n                io_stru[ 4] = bTmp[2];\n                io_stru[ 5] = bTmp[1];\n                io_stru[ 6] = bTmp[0];\n                io_stru[ 7] = 0;\n\n                MSCDEX_StoreMSF(FRAME_OF_ADDR(data.CurrentPosition.AbsoluteAddress), bTmp);\n                io_stru[ 8] = bTmp[2];\n                io_stru[ 9] = bTmp[1];\n                io_stru[10] = bTmp[0];\n                io_stru[11] = 0;\n            }\n            TRACE(\"Q-Channel info: Ctrl/adr=%02x TNO=%02x X=%02x rtt=%02x:%02x:%02x rtd=%02x:%02x:%02x (cf=%08x, tp=%08x)\\n\",\n                  io_stru[ 1], io_stru[ 2], io_stru[ 3],\n                  io_stru[ 4], io_stru[ 5], io_stru[ 6],\n                  io_stru[ 8], io_stru[ 9], io_stru[10],\n                  FRAME_OF_ADDR(data.CurrentPosition.AbsoluteAddress),\n                  FRAME_OF_TOC(toc, data.CurrentPosition.TrackNumber));\n            break;\n\n        case 15: /* Audio status info */\n            /* !!!! FIXME FIXME FIXME !! */\n            PTR_AT(io_stru, 1,  WORD) = 2 | ((data.CurrentPosition.Header.AudioStatus == AUDIO_STATUS_PAUSED) ? 1 : 0);\n            if (!present) {\n                PTR_AT(io_stru, 3, DWORD) = 0;\n                PTR_AT(io_stru, 7, DWORD) = 0;\n            } else {\n                PTR_AT(io_stru, 3, DWORD) = FRAME_OF_TOC(toc, toc.FirstTrack);\n                PTR_AT(io_stru, 7, DWORD) = FRAME_OF_TOC(toc, toc.LastTrack + 1);\n            }\n            TRACE(\"Audio status info: status=%04x startLoc=%d endLoc=%d\\n\",\n                  PTR_AT(io_stru, 1, WORD), PTR_AT(io_stru, 3, DWORD), PTR_AT(io_stru, 7, DWORD));\n            break;\n\n        default:\n            FIXME(\"IOCTL INPUT: Unimplemented <%d>!!\\n\", io_stru[0]);\n            Error = 0x0c;\n            break;\n        }\n        break;\n\n    case 12:\n        io_stru = (dorealmode) ?\n            PTR_REAL_TO_LIN( PTR_AT(driver_request, 16, WORD), PTR_AT(driver_request, 14, WORD)) :\n            MapSL( MAKESEGPTR(PTR_AT(driver_request, 16, WORD), PTR_AT(driver_request, 14, WORD)));\n\n        TRACE(\" --> IOCTL OUTPUT <%d>\\n\", io_stru[0]);\n        switch (io_stru[0]) {\n        case 0: /* eject */\n            DeviceIoControl(h, IOCTL_STORAGE_EJECT_MEDIA, NULL, 0, NULL, 0, &br, NULL);\n            TRACE(\" ----> EJECT\\n\");\n            break;\n        case 2: /* reset drive */\n            DeviceIoControl(h, IOCTL_STORAGE_RESET_DEVICE, NULL, 0, NULL, 0, &br, NULL);\n            TRACE(\" ----> RESET\\n\");\n            break;\n        case 3: /* Audio Channel Control */\n            FIXME(\" ----> AUDIO CHANNEL CONTROL (NIY)\\n\");\n            break;\n        case 5: /* close tray */\n            DeviceIoControl(h, IOCTL_STORAGE_LOAD_MEDIA, NULL, 0, NULL, 0, &br, NULL);\n            TRACE(\" ----> CLOSE TRAY\\n\");\n            break;\n        default:\n            FIXME(\" IOCTL OUTPUT: Unimplemented <%d>!!\\n\", io_stru[0]);\n            Error = 0x0c;\n            break;\n        }\n        break;\n\n    case 128: /* read long */\n    {\n        LPVOID              dst = MapSL(MAKESEGPTR(PTR_AT(driver_request, 16, WORD),\n                                                   PTR_AT(driver_request, 14, WORD)));\n        DWORD               at = PTR_AT(driver_request, 20, DWORD);\n        WORD                num = PTR_AT(driver_request, 18, WORD);\n        RAW_READ_INFO       rri;\n\n        switch (driver_request[13]) {\n        case 1: /* Red book addressing mode = 0:m:s:f */\n            /* FIXME : frame <=> msf conversion routines could be shared\n             * between mscdex and mcicda\n             */\n            at = LOBYTE(HIWORD(at)) * CDFRAMES_PERMIN +\n                HIBYTE(LOWORD(at)) * CDFRAMES_PERSEC +\n                LOBYTE(LOWORD(at));\n            /* fall through */\n        case 0: /* HSG addressing mode */\n            switch (PTR_AT(driver_request, 24, BYTE))\n            {\n            case 0: /* cooked */\n                ReadFile(h, dst, num * 2048, &br, NULL);\n                break;\n            case 1:\n                /* FIXME: computation is wrong */\n                rri.DiskOffset.u.HighPart = 0;\n                rri.DiskOffset.u.LowPart = at << 11;\n                rri.TrackMode = YellowMode2;\n                rri.SectorCount = num;\n                DeviceIoControl(h, IOCTL_CDROM_RAW_READ, &rri, sizeof(rri),\n                                dst, num * 2352, &br, NULL);\n                break;\n            default:\n                ERR(\"Unsupported read mode !!\\n\");\n                Error = 0x0c;\n                break;\n            }\n            break;\n        default:\n            ERR(\"Unsupported address mode !!\\n\");\n            Error = 0x0c;\n            break;\n        }\n    }\n    break;\n\n    case 131: /* seek */\n    {\n        DWORD                       at;\n        CDROM_SEEK_AUDIO_MSF        seek;\n\n        at = PTR_AT(driver_request, 20, DWORD);\n\n        TRACE(\" --> SEEK AUDIO mode :<0x%02X>, [%d]\\n\", driver_request[13], at);\n\n        switch (driver_request[13]) {\n        case 1: /* Red book addressing mode = 0:m:s:f */\n            /* FIXME : frame <=> msf conversion routines could be shared\n             * between mscdex and mcicda\n             */\n            at = LOBYTE(HIWORD(at)) * CDFRAMES_PERMIN +\n                HIBYTE(LOWORD(at)) * CDFRAMES_PERSEC +\n                LOBYTE(LOWORD(at));\n            /* fall through */\n        case 0: /* HSG addressing mode */\n            seek.M = at / CDFRAMES_PERMIN;\n            seek.S = (at / CDFRAMES_PERSEC) % 60;\n            seek.F = at % CDFRAMES_PERSEC;\n            DeviceIoControl(h, IOCTL_CDROM_SEEK_AUDIO_MSF, &seek, sizeof(seek),\n                            NULL, 0, &br, NULL);\n            break;\n        default:\n            ERR(\"Unsupported address mode !!\\n\");\n            Error = 0x0c;\n            break;\n        }\n    }\n    break;\n\n    case 132: /* play */\n    {\n        DWORD                       beg, end;\n        CDROM_PLAY_AUDIO_MSF        play;\n\n        beg = end = PTR_AT(driver_request, 14, DWORD);\n        end += PTR_AT(driver_request, 18, DWORD);\n\n        TRACE(\" --> PLAY AUDIO mode :<0x%02X>, [%d-%d]\\n\", driver_request[13], beg, end);\n\n        switch (driver_request[13]) {\n        case 1:\n            /* Red book addressing mode = 0:m:s:f */\n            /* FIXME : frame <=> msf conversion routines could be shared\n             * between mscdex and mcicda\n             */\n            beg = LOBYTE(LOWORD(beg)) * CDFRAMES_PERMIN +\n                HIBYTE(LOWORD(beg)) * CDFRAMES_PERSEC +\n                LOBYTE(HIWORD(beg));\n            end = LOBYTE(LOWORD(end)) * CDFRAMES_PERMIN +\n                HIBYTE(LOWORD(end)) * CDFRAMES_PERSEC +\n                LOBYTE(HIWORD(end));\n            /* fall through */\n        case 0: /* HSG addressing mode */\n            play.StartingM = beg / CDFRAMES_PERMIN;\n            play.StartingS = (beg / CDFRAMES_PERSEC) % 60;\n            play.StartingF = beg % CDFRAMES_PERSEC;\n            play.EndingM   = end / CDFRAMES_PERMIN;\n            play.EndingS   = (end / CDFRAMES_PERSEC) % 60;\n            play.EndingF   = end % CDFRAMES_PERSEC;\n            DeviceIoControl(h, IOCTL_CDROM_PLAY_AUDIO_MSF, &play, sizeof(play),\n                            NULL, 0, &br, NULL);\n            break;\n        default:\n            ERR(\"Unsupported address mode !!\\n\");\n            Error = 0x0c;\n            break;\n        }\n    }\n    break;\n\n    case 133:\n        if (data.CurrentPosition.Header.AudioStatus == AUDIO_STATUS_IN_PROGRESS) {\n            DeviceIoControl(h, IOCTL_CDROM_PAUSE_AUDIO, NULL, 0, NULL, 0, &br, NULL);\n            TRACE(\" --> STOP AUDIO (Paused)\\n\");\n        } else {\n            DeviceIoControl(h, IOCTL_CDROM_STOP_AUDIO, NULL, 0, NULL, 0, &br, NULL);\n            TRACE(\" --> STOP AUDIO (Stopped)\\n\");\n        }\n        break;\n\n    case 136:\n        TRACE(\" --> RESUME AUDIO\\n\");\n        DeviceIoControl(h, IOCTL_CDROM_PAUSE_AUDIO, NULL, 0, NULL, 0, &br, NULL);\n        break;\n\n    default:\n        FIXME(\" ioctl unimplemented <%d>\\n\", driver_request[2]);\n        Error = 0x0c;\n    }\n\n    /* setting error codes if any */\n    if (Error < 255) {\n        driver_request[4] |= 0x80;\n        driver_request[3] = Error;\n    }\n\n    CloseHandle(h);\n    /* setting status bits\n     * 3 == playing && done\n     * 1 == done\n     */\n    driver_request[4] |=\n        (data.CurrentPosition.Header.AudioStatus == AUDIO_STATUS_IN_PROGRESS) ? 3 : 1;\n\n    MSCDEX_Dump(\"End\", driver_request, dorealmode);\n}\n\nstatic void MSCDEX_Handler(CONTEXT* context)\n{\n    int        drive, count;\n    char*      p;\n\n    switch (LOBYTE(context->Eax)) {\n    case 0x00: /* Installation check */\n       /* Count the number of contiguous CDROM drives\n        */\n       for (drive = count = 0; drive < 26; drive++) {\n           if (is_cdrom(drive)) {\n               while (is_cdrom(drive + count)) count++;\n               break;\n           }\n       }\n       TRACE(\"Installation check: %d cdroms, starting at %d\\n\", count, drive);\n       SET_BX( context, count );\n       SET_CX( context, (drive < 26) ? drive : 0 );\n       break;\n\n    case 0x01: /* get drive device list */\n       {\n           CDROM_HEAP*          cdrom_heap = CDROM_GetHeap();\n           CDROM_DEVICE_HEADER* dev = &cdrom_heap->hdr;\n           SEGPTR ptr_dev = ISV86(context)\n               ? MAKESEGPTR( cdrom_heap->cdrom_segment,\n                             FIELD_OFFSET(CDROM_HEAP, hdr) )\n               : MAKESEGPTR( cdrom_heap->cdrom_selector,\n                             FIELD_OFFSET(CDROM_HEAP, hdr) );\n\n           p = CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Ebx);\n           for (drive = 0; drive < dev->units; drive++) {\n               *p = drive; /* subunit */\n               ++p;\n               *(DWORD*)p = ptr_dev;\n               p += sizeof(DWORD);\n           }\n           TRACE(\"Get drive device list\\n\");\n       }\n       break;\n\n    case 0x0B: /* drive check */\n       SET_AX( context, is_cdrom(CX_reg(context)) );\n       SET_BX( context, 0xADAD );\n       break;\n\n    case 0x0C: /* get version */\n       SET_BX( context, 0x020a );\n       TRACE(\"Version number => %04x\\n\", BX_reg(context));\n       break;\n\n    case 0x0D: /* get drive letters */\n       p = CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Ebx);\n       for (drive = 0; drive < 26; drive++) {\n           if (is_cdrom(drive)) *p++ = drive;\n       }\n       TRACE(\"Get drive letters\\n\");\n       break;\n\n    case 0x10: /* direct driver access */\n       {\n           BYTE*       driver_request;\n           CDROM_HEAP* cdrom_heap = CDROM_GetHeap();\n\n           if (!is_cdrom(CX_reg(context))) {\n               WARN(\"Request made doesn't match a CD ROM drive (%d)\\n\", CX_reg(context));\n               SET_CFLAG( context );\n               SET_AX( context, 0x000f ); /* invalid drive */\n               return;\n           }\n\n           driver_request = CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Ebx);\n\n           if (!driver_request) {\n               /* FIXME - to be deleted ?? */\n               ERR(\"ES:BX==0 ! SEGFAULT ?\\n\");\n               ERR(\"-->BX=0x%04x, ES=0x%04x, DS=0x%04x, CX=0x%04x\\n\",\n                   BX_reg(context), context->SegEs, context->SegDs, CX_reg(context));\n               driver_request[4] |= 0x80;\n               driver_request[3] = 5;  /* bad request length */\n               return;\n           }\n\n           driver_request[1] = CX_reg(context) - cdrom_heap->hdr.drive;\n           MSCDEX_Request(driver_request, ISV86(context));\n       }\n       break;\n    default:\n       FIXME(\"Unimplemented MSCDEX function 0x%02X.\\n\", LOBYTE(context->Eax));\n       break;\n    }\n}\n\n/* prototypes */\nstatic void WINAPI cdrom_strategy(CONTEXT*ctx);\nstatic void WINAPI cdrom_interrupt(CONTEXT*ctx);\n\n/* device info */\nstatic const WINEDEV cdromdev =\n{\n    \"WINE_CD_\",\n    ATTR_CHAR|ATTR_REMOVABLE|ATTR_IOCTL,\n    cdrom_strategy, cdrom_interrupt\n};\n\nstatic REQUEST_HEADER *cdrom_driver_request;\n\n/* Return to caller */\nstatic void do_lret(CONTEXT*ctx)\n{\n    WORD *stack = CTX_SEG_OFF_TO_LIN(ctx, ctx->SegSs, ctx->Esp);\n\n    ctx->Eip   = *(stack++);\n    ctx->SegCs = *(stack++);\n    ctx->Esp  += 2*sizeof(WORD);\n}\n\nstatic void WINAPI cdrom_strategy(CONTEXT*ctx)\n{\n    cdrom_driver_request = CTX_SEG_OFF_TO_LIN(ctx, ctx->SegEs, ctx->Ebx);\n    do_lret( ctx );\n}\n\nstatic void WINAPI cdrom_interrupt(CONTEXT*ctx)\n{\n    if (cdrom_driver_request->unit > CDROM_GetHeap()->hdr.units)\n        cdrom_driver_request->status = STAT_ERROR | 1; /* unknown unit */\n    else\n        MSCDEX_Request((BYTE*)cdrom_driver_request, ISV86(ctx));\n\n    do_lret( ctx );\n}\n\n/**********************************************************************\n *         MSCDEX_InstallCDROM  [internal]\n *\n * Install the CDROM driver into the DOS device driver chain.\n */\nvoid MSCDEX_InstallCDROM(void)\n{\n    CDROM_HEAP *cdrom_heap = CDROM_GetHeap();\n\n    DOSDEV_SetupDevice( &cdromdev,\n                        cdrom_heap->cdrom_segment,\n                        FIELD_OFFSET(CDROM_HEAP, hdr),\n                        FIELD_OFFSET(CDROM_HEAP, thunk) );\n}\n"
  },
  {
    "path": "krnl386/int31.c",
    "content": "/*\n * DPMI 0.9 emulation\n *\n * Copyright 1995 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdarg.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winternl.h\"\n#include \"wine/winbase16.h\"\n#include \"windows/wownt32.h\"\n#include \"kernel16_private.h\"\n#include \"dosexe.h\"\n\n#include \"excpt.h\"\n#include \"wine/debug.h\"\n#include \"wine/exception.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(int31);\n\n/* Structure for real-mode callbacks */\ntypedef struct\n{\n    DWORD edi;\n    DWORD esi;\n    DWORD ebp;\n    DWORD reserved;\n    DWORD ebx;\n    DWORD edx;\n    DWORD ecx;\n    DWORD eax;\n    WORD  fl;\n    WORD  es;\n    WORD  ds;\n    WORD  fs;\n    WORD  gs;\n    WORD  ip;\n    WORD  cs;\n    WORD  sp;\n    WORD  ss;\n} REALMODECALL;\n\ntypedef struct tagRMCB {\n    DWORD address;\n    DWORD proc_ofs,proc_sel;\n    DWORD regs_ofs,regs_sel;\n    struct tagRMCB *next;\n} RMCB;\n\nstatic RMCB *FirstRMCB = NULL;\nstatic WORD dpmi_flag;\nstatic void* lastvalloced = NULL;\nstatic BYTE DPMI_retval;\n\n#include \"pshpack1.h\"\n\ntypedef struct {\n WORD Handle;\n DWORD Offset;\n} MOVEOFS;\n\ntypedef struct {\n DWORD Length;\n MOVEOFS Source;\n MOVEOFS Dest;\n} MOVESTRUCT;\n\n#include \"poppack.h\"\n\n/**********************************************************************\n *          DOSVM_IsDos32\n * \n * Return TRUE if we are in 32-bit protected mode DOS process.\n */\nBOOL DOSVM_IsDos32(void)\n{\n  return (dpmi_flag & 1) != 0;\n}\n\n\n/**********************************************************************\n *          alloc_pm_selector\n *\n * Allocate a 64k sized selector corresponding to a real mode segment.\n */\nstatic WORD alloc_pm_selector( WORD seg, unsigned char flags )\n{\n    WORD sel = wine_ldt_alloc_entries( 1 );\n\n    if (sel)\n    {\n        LDT_ENTRY entry;\n        wine_ldt_set_base( &entry, PTR_REAL_TO_LIN(seg, 0) );\n        wine_ldt_set_limit( &entry, 0xffff );\n        wine_ldt_set_flags( &entry, flags );\n        wine_ldt_set_entry( sel, &entry );\n    }\n    return sel;\n}\n\n\n/**********************************************************************\n *          dpmi_exception_handler\n *\n * Handle EXCEPTION_VM86_STI exceptions generated\n * when there are pending asynchronous events.\n */\nstatic LONG WINAPI dpmi_exception_handler(EXCEPTION_POINTERS *eptr)\n{\n    EXCEPTION_RECORD *rec = eptr->ExceptionRecord;\n    CONTEXT *context = eptr->ContextRecord;\n\n    if (rec->ExceptionCode == EXCEPTION_VM86_STI)\n    {\n        if (ISV86(context))\n            ERR( \"Real mode STI caught by protected mode handler!\\n\" );\n        DOSVM_SendQueuedEvents(context);\n        return EXCEPTION_CONTINUE_EXECUTION;\n    }\n    else if (rec->ExceptionCode == EXCEPTION_VM86_INTx)\n    {\n        if (ISV86(context))\n            ERR( \"Real mode INTx caught by protected mode handler!\\n\" );\n        DPMI_retval = (BYTE)rec->ExceptionInformation[0];\n        return EXCEPTION_EXECUTE_HANDLER;\n    }\n\n    return EXCEPTION_CONTINUE_SEARCH;\n}\n\n\n/**********************************************************************\n *\t    INT_GetRealModeContext\n */\nstatic void INT_GetRealModeContext( REALMODECALL *call, CONTEXT *context )\n{\n    context->Eax    = call->eax;\n    context->Ebx    = call->ebx;\n    context->Ecx    = call->ecx;\n    context->Edx    = call->edx;\n    context->Esi    = call->esi;\n    context->Edi    = call->edi;\n    context->Ebp    = call->ebp;\n    context->EFlags = call->fl | V86_FLAG;\n    context->Eip    = call->ip;\n    context->Esp    = call->sp;\n    context->SegCs  = call->cs;\n    context->SegDs  = call->ds;\n    context->SegEs  = call->es;\n    context->SegFs  = call->fs;\n    context->SegGs  = call->gs;\n    context->SegSs  = call->ss;\n}\n\n\n/**********************************************************************\n *\t    INT_SetRealModeContext\n */\nstatic void INT_SetRealModeContext( REALMODECALL *call, CONTEXT *context, BOOL mod_csip_ssssp )\n{\n    call->eax = context->Eax;\n    call->ebx = context->Ebx;\n    call->ecx = context->Ecx;\n    call->edx = context->Edx;\n    call->esi = context->Esi;\n    call->edi = context->Edi;\n    call->ebp = context->Ebp;\n    call->fl  = LOWORD(context->EFlags);\n    if (mod_csip_ssssp)\n    {\n        call->ip = LOWORD(context->Eip);\n        call->sp = LOWORD(context->Esp);\n        call->cs = context->SegCs;\n        call->ss = context->SegSs;\n    }\n    call->ds  = context->SegDs;\n    call->es  = context->SegEs;\n    call->fs  = context->SegFs;\n    call->gs  = context->SegGs;\n}\n\n/**********************************************************************\n *          DPMI_xalloc\n * special virtualalloc, allocates linearly monoton growing memory.\n * (the usual VirtualAlloc does not satisfy that restriction)\n */\nstatic LPVOID DPMI_xalloc( DWORD len ) \n{\n    LPVOID  ret;\n    LPVOID  oldlastv = lastvalloced;\n\n    if (lastvalloced) \n    {\n        int xflag = 0;\n\n        ret = NULL;\n        while (!ret) \n        {\n            ret = VirtualAlloc( lastvalloced, len,\n                                MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE );\n            if (!ret)\n                lastvalloced = (char *) lastvalloced + 0x10000;\n\n            /* we failed to allocate one in the first round.\n             * try non-linear\n             */\n            if (!xflag && (lastvalloced<oldlastv)) \n            { \n                /* wrapped */\n                FIXME( \"failed to allocate linearly growing memory (%u bytes), \"\n                       \"using non-linear growing...\\n\", len );\n                xflag++;\n            }\n\n            /* if we even fail to allocate something in the next\n             * round, return NULL\n             */\n            if ((xflag==1) && (lastvalloced >= oldlastv))\n                xflag++;\n\n            if ((xflag==2) && (lastvalloced < oldlastv)) {\n                FIXME( \"failed to allocate any memory of %u bytes!\\n\", len );\n                return NULL;\n            }\n        }\n    } \n    else\n    {\n        ret = VirtualAlloc( NULL, len, \n                            MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE );\n    }\n\n    lastvalloced = (LPVOID)(((DWORD)ret+len+0xffff)&~0xffff);\n    return ret;\n}\n\n/**********************************************************************\n *          DPMI_xfree\n */\nstatic void DPMI_xfree( LPVOID ptr ) \n{\n    VirtualFree( ptr, 0, MEM_RELEASE );\n}\n\n/**********************************************************************\n *          DPMI_xrealloc\n *\n * FIXME: perhaps we could grow this mapped area... \n */\nstatic LPVOID DPMI_xrealloc( LPVOID ptr, DWORD newsize )\n{\n    MEMORY_BASIC_INFORMATION        mbi;\n\n    if (ptr)\n    {\n        LPVOID newptr;\n\n        if (!VirtualQuery(ptr,&mbi,sizeof(mbi)))\n        {\n            FIXME( \"realloc of DPMI_xallocd region %p?\\n\", ptr );\n            return NULL;\n        }\n\n        if (mbi.State == MEM_FREE)\n        {\n            FIXME( \"realloc of DPMI_xallocd region %p?\\n\", ptr );\n            return NULL;\n        }\n\n        /* We do not shrink allocated memory. most reallocs\n         * only do grows anyway\n         */\n        if (newsize <= mbi.RegionSize)\n            return ptr;\n\n        newptr = DPMI_xalloc( newsize );\n        if (!newptr)\n            return NULL;\n\n        memcpy( newptr, ptr, mbi.RegionSize );\n        DPMI_xfree( ptr );\n\n        return newptr;\n    }\n\n    return DPMI_xalloc( newsize );\n}\n\n\nextern void DPMI_CallRMCB32(RMCB *rmcb, UINT16 ss, DWORD esp, UINT16*es, DWORD*edi);\n#if 0 /* original code, which early gccs puke on */\n{\n    int _clobber;\n    __asm__ __volatile__(\n        \"pushl %%ebp\\n\"\n        \"pushl %%ebx\\n\"\n        \"pushl %%es\\n\"\n        \"pushl %%ds\\n\"\n        \"pushfl\\n\"\n        \"mov %7,%%es\\n\"\n        \"mov %5,%%ds\\n\"\n        \".byte 0x36, 0xff, 0x18\\n\" /* lcall *%ss:(%eax) */\n        \"popl %%ds\\n\"\n        \"mov %%es,%0\\n\"\n        \"popl %%es\\n\"\n        \"popl %%ebx\\n\"\n        \"popl %%ebp\\n\"\n    : \"=d\" (*es), \"=D\" (*edi), \"=S\" (_clobber), \"=a\" (_clobber), \"=c\" (_clobber)\n    : \"0\" (ss), \"2\" (esp),\n      \"4\" (rmcb->regs_sel), \"1\" (rmcb->regs_ofs),\n      \"3\" (&rmcb->proc_ofs) );\n}\n#else /* code generated by a gcc new enough */\n;\n__ASM_GLOBAL_FUNC(_DPMI_CallRMCB32,\n    \"pushl %ebp\\n\\t\"\n    __ASM_CFI(\".cfi_adjust_cfa_offset 4\\n\\t\")\n    __ASM_CFI(\".cfi_rel_offset %ebp,0\\n\\t\")\n    \"movl %esp,%ebp\\n\\t\"\n    __ASM_CFI(\".cfi_def_cfa_register %ebp\\n\\t\")\n    \"pushl %edi\\n\\t\"\n    __ASM_CFI(\".cfi_rel_offset %edi,-4\\n\\t\")\n    \"pushl %esi\\n\\t\"\n    __ASM_CFI(\".cfi_rel_offset %esi,-8\\n\\t\")\n    \"movl 0x8(%ebp),%eax\\n\\t\"\n    \"movl 0x10(%ebp),%esi\\n\\t\"\n    \"movl 0xc(%ebp),%edx\\n\\t\"\n    \"movl 0x10(%eax),%ecx\\n\\t\"\n    \"movl 0xc(%eax),%edi\\n\\t\"\n    \"addl $0x4,%eax\\n\\t\"\n    \"pushl %ebp\\n\\t\"\n    \"pushl %ebx\\n\\t\"\n    \"pushl %es\\n\\t\"\n    \"pushl %ds\\n\\t\"\n    \"pushfl\\n\\t\"\n    \"mov %cx,%es\\n\\t\"\n    \"mov %dx,%ds\\n\\t\"\n    \".byte 0x36, 0xff, 0x18\\n\\t\" /* lcall *%ss:(%eax) */\n    \"popl %ds\\n\\t\"\n    \"mov %es,%dx\\n\\t\"\n    \"popl %es\\n\\t\"\n    \"popl %ebx\\n\\t\"\n    \"popl %ebp\\n\\t\"\n    \"movl 0x14(%ebp),%eax\\n\\t\"\n    \"movw %dx,(%eax)\\n\\t\"\n    \"movl 0x18(%ebp),%edx\\n\\t\"\n    \"movl %edi,(%edx)\\n\\t\"\n    \"popl %esi\\n\\t\"\n    __ASM_CFI(\".cfi_same_value %esi\\n\\t\")\n    \"popl %edi\\n\\t\"\n    __ASM_CFI(\".cfi_same_value %edi\\n\\t\")\n    \"leave\\n\\t\"\n    __ASM_CFI(\".cfi_def_cfa %esp,4\\n\\t\")\n    __ASM_CFI(\".cfi_same_value %ebp\\n\\t\")\n    \"ret\")\n#endif\n\n/**********************************************************************\n *\t    DPMI_CallRMCBProc\n *\n * This routine does the hard work of calling a callback procedure.\n */\nstatic void DPMI_CallRMCBProc( CONTEXT *context, RMCB *rmcb, WORD flag )\n{\n    DWORD old_vif = get_vm86_teb_info()->dpmi_vif;\n\n    /* Disable virtual interrupts. */\n    get_vm86_teb_info()->dpmi_vif = 0;\n\n    if (wine_ldt_is_system( rmcb->proc_sel )) {\n        /* Wine-internal RMCB, call directly */\n        ((RMCBPROC)rmcb->proc_ofs)(context);\n    } else __TRY {\n        UINT16 ss,es;\n        DWORD esp,edi;\n\n        INT_SetRealModeContext(MapSL(MAKESEGPTR( rmcb->regs_sel, rmcb->regs_ofs )), context, TRUE);\n        ss = alloc_pm_selector( context->SegSs, WINE_LDT_FLAGS_DATA );\n        esp = context->Esp;\n\n        FIXME(\"untested!\\n\");\n\n        /* The called proc ends with an IRET, and takes these parameters:\n         * DS:ESI = pointer to real-mode SS:SP\n         * ES:EDI = pointer to real-mode call structure\n         * It returns:\n         * ES:EDI = pointer to real-mode call structure (may be a copy)\n         * It is the proc's responsibility to change the return CS:IP in the\n         * real-mode call structure. */\n        if (flag & 1) {\n            /* 32-bit DPMI client */\n            DPMI_CallRMCB32(rmcb, ss, esp, &es, &edi);\n        } else {\n            /* 16-bit DPMI client */\n            CONTEXT ctx = *context;\n            ctx.SegCs = rmcb->proc_sel;\n            ctx.Eip   = rmcb->proc_ofs;\n            ctx.SegDs = ss;\n            ctx.Esi   = esp;\n            ctx.SegEs = rmcb->regs_sel;\n            ctx.Edi   = rmcb->regs_ofs;\n            /* FIXME: I'm pretty sure this isn't right - should push flags first */\n            WOWCallback16Ex( 0, WCB16_REGS, 0, NULL, (DWORD *)&ctx );\n            es = ctx.SegEs;\n            edi = ctx.Edi;\n        }\n        wine_ldt_free_entries( ss, 1 );\n        INT_GetRealModeContext( MapSL( MAKESEGPTR( es, edi )), context);\n    } __EXCEPT(dpmi_exception_handler) { } __ENDTRY\n\n    /* Restore virtual interrupt flag. */\n    get_vm86_teb_info()->dpmi_vif = old_vif;\n}\n\n\n/**********************************************************************\n *\t    DPMI_CallRMProc\n *\n * This routine does the hard work of calling a real mode procedure.\n */\nint DPMI_CallRMProc( CONTEXT *context, LPWORD stack, int args, int iret )\n{\n    LPWORD stack16;\n    LPVOID addr = NULL; /* avoid gcc warning */\n    RMCB *CurrRMCB;\n    BOOL alloc = FALSE, already = FALSE;\n    BYTE *code;\n\n    TRACE(\"EAX=%08x EBX=%08x ECX=%08x EDX=%08x\\n\",\n                 context->Eax, context->Ebx, context->Ecx, context->Edx );\n    TRACE(\"ESI=%08x EDI=%08x ES=%04x DS=%04x CS:IP=%04x:%04x, %d WORD arguments, %s\\n\",\n                 context->Esi, context->Edi, context->SegEs, context->SegDs,\n                 context->SegCs, LOWORD(context->Eip), args, iret?\"IRET\":\"FAR\" );\n\ncallrmproc_again:\n\n/* there might be some code that just jumps to RMCBs or the like,\n   in which case following the jumps here might get us to a shortcut */\n    code = CTX_SEG_OFF_TO_LIN(context, context->SegCs, context->Eip);\n    switch (*code) {\n    case 0xe9: /* JMP NEAR */\n      context->Eip += 3 + *(WORD *)(code+1);\n      /* yeah, I know these gotos don't look good... */\n      goto callrmproc_again;\n    case 0xea: /* JMP FAR */\n      context->Eip = *(WORD *)(code+1);\n      context->SegCs = *(WORD *)(code+3);\n      /* ...but since the label is there anyway... */\n      goto callrmproc_again;\n    case 0xeb: /* JMP SHORT */\n      context->Eip += 2 + *(signed char *)(code+1);\n      /* ...because of other gotos below, so... */\n      goto callrmproc_again;\n    }\n\n/* shortcut for chaining to internal interrupt handlers */\n    if ((context->SegCs == 0xF000) && iret)\n    {\n        DOSVM_CallBuiltinHandler( context, LOWORD(context->Eip)/4 );\n        return 0;\n    }\n\n/* shortcut for RMCBs */\n    CurrRMCB = FirstRMCB;\n\n    while (CurrRMCB && (HIWORD(CurrRMCB->address) != context->SegCs))\n        CurrRMCB = CurrRMCB->next;\n\n    if (!CurrRMCB && !MZ_Current())\n    {\n        FIXME(\"DPMI real-mode call using DOS VM task system, not fully tested!\\n\");\n        TRACE(\"creating VM86 task\\n\");\n        MZ_AllocDPMITask();\n    }\n    if (!already) {\n        if (!context->SegSs) {\n            alloc = TRUE; /* allocate default stack */\n            stack16 = addr = DOSMEM_AllocBlock( 64, (UINT16 *)&(context->SegSs) );\n            context->Esp = 64-2;\n            stack16 += 32-1;\n            if (!addr) {\n                ERR(\"could not allocate default stack\\n\");\n                return 1;\n            }\n        } else {\n            stack16 = CTX_SEG_OFF_TO_LIN(context, context->SegSs, context->Esp);\n        }\n        context->Esp -= (args + (iret?1:0)) * sizeof(WORD);\n        stack16 -= args;\n        if (args) memcpy(stack16, stack, args*sizeof(WORD) );\n        /* push flags if iret */\n        if (iret) {\n            stack16--; args++;\n            *stack16 = LOWORD(context->EFlags);\n        }\n        /* push return address (return to interrupt wrapper) */\n        *(--stack16) = DOSVM_dpmi_segments->wrap_seg;\n        *(--stack16) = 0;\n        /* adjust stack */\n        context->Esp -= 2*sizeof(WORD);\n        already = TRUE;\n    }\n\n    if (CurrRMCB) {\n        /* RMCB call, invoke protected-mode handler directly */\n        DPMI_CallRMCBProc(context, CurrRMCB, dpmi_flag);\n        /* check if we returned to where we thought we would */\n        if ((context->SegCs != DOSVM_dpmi_segments->wrap_seg) ||\n            (LOWORD(context->Eip) != 0)) {\n            /* we need to continue at different address in real-mode space,\n               so we need to set it all up for real mode again */\n            goto callrmproc_again;\n        }\n    } else {\n        TRACE(\"entering real mode...\\n\");\n        DOSVM_Enter( context );\n        TRACE(\"returned from real-mode call\\n\");\n    }\n    if (alloc) DOSMEM_FreeBlock( addr );\n    return 0;\n}\n\n\n/**********************************************************************\n *\t    CallRMInt\n */\nstatic void DOSVM_CallRMInt( CONTEXT *context )\n{\n    CONTEXT realmode_ctx;\n    FARPROC16 rm_int = DOSVM_GetRMHandler( BL_reg(context) );\n    REALMODECALL *call = CTX_SEG_OFF_TO_LIN( context, \n                                             context->SegEs, \n                                             context->Edi );\n    INT_GetRealModeContext( call, &realmode_ctx );\n\n    /* we need to check if a real-mode program has hooked the interrupt */\n    if (HIWORD(rm_int)!=0xF000) {\n        /* yup, which means we need to switch to real mode... */\n        realmode_ctx.SegCs = HIWORD(rm_int);\n        realmode_ctx.Eip   = LOWORD(rm_int);\n        if (DPMI_CallRMProc( &realmode_ctx, NULL, 0, TRUE))\n          SET_CFLAG(context);\n    } else {\n        RESET_CFLAG(context);\n        /* use the IP we have instead of BL_reg, in case some apps\n           decide to move interrupts around for whatever reason... */\n        DOSVM_CallBuiltinHandler( &realmode_ctx, LOWORD(rm_int)/4 );\n    }\n    INT_SetRealModeContext( call, &realmode_ctx, FALSE );\n}\n\n\n/**********************************************************************\n *\t    CallRMProc\n */\nstatic void DOSVM_CallRMProc( CONTEXT *context, int iret )\n{\n    REALMODECALL *p = CTX_SEG_OFF_TO_LIN( context, \n                                          context->SegEs, \n                                          context->Edi );\n    CONTEXT context16;\n\n    TRACE(\"RealModeCall: EAX=%08x EBX=%08x ECX=%08x EDX=%08x\\n\",\n          p->eax, p->ebx, p->ecx, p->edx);\n    TRACE(\"              ESI=%08x EDI=%08x ES=%04x DS=%04x CS:IP=%04x:%04x, %d WORD arguments, %s\\n\",\n          p->esi, p->edi, p->es, p->ds, p->cs, p->ip, CX_reg(context), iret?\"IRET\":\"FAR\" );\n\n    if (!(p->cs) && !(p->ip)) { /* remove this check\n                                   if Int21/6501 case map function\n                                   has been implemented */\n        SET_CFLAG(context);\n        return;\n     }\n    INT_GetRealModeContext(p, &context16);\n    DPMI_CallRMProc( &context16, ((LPWORD)MapSL(MAKESEGPTR(context->SegSs, LOWORD(context->Esp))))+3,\n                     CX_reg(context), iret );\n    INT_SetRealModeContext(p, &context16, FALSE);\n}\n\n\n/* (see dosmem.c, function DOSMEM_InitDPMI) */\nstatic void StartPM( CONTEXT *context )\n{\n    UINT16 cs, ss, ds, es;\n    CONTEXT pm_ctx;\n    PDB16 *psp = (PDB16 *)PTR_REAL_TO_LIN(DOSVM_psp, 0);\n    HANDLE16 env_seg = psp->environment;\n    unsigned char selflags = WINE_LDT_FLAGS_DATA;\n\n    RESET_CFLAG(context);\n    dpmi_flag = AX_reg(context);\n/* our mode switch wrapper have placed the desired CS into DX */\n    cs = alloc_pm_selector( context->Edx, WINE_LDT_FLAGS_CODE );\n/* due to a flaw in some CPUs (at least mine), it is best to mark stack segments as 32-bit if they\n   can be used in 32-bit code. Otherwise, these CPUs may not set the high word of esp during a\n   ring transition (from kernel code) to the 16-bit stack, and this causes trouble if executing\n   32-bit code using this stack. */\n    if (dpmi_flag & 1) selflags |= WINE_LDT_FLAGS_32BIT;\n    ss = alloc_pm_selector( context->SegSs, selflags );\n/* do the same for the data segments, just in case */\n    if (context->SegDs == context->SegSs) ds = ss;\n    else ds = alloc_pm_selector( context->SegDs, selflags );\n    es = alloc_pm_selector( DOSVM_psp, selflags );\n/* convert environment pointer, as the spec says, but we're a bit lazy about the size here... */\n    psp->environment = alloc_pm_selector( env_seg, WINE_LDT_FLAGS_DATA );\n\n    pm_ctx = *context;\n    pm_ctx.SegCs = DOSVM_dpmi_segments->dpmi_sel;\n/* our mode switch wrapper expects the new CS in DX, and the new SS in AX */\n    pm_ctx.Eax   = ss;\n    pm_ctx.Edx   = cs;\n    pm_ctx.SegDs = ds;\n    pm_ctx.SegEs = es;\n    pm_ctx.SegFs = wine_get_fs();\n    pm_ctx.SegGs = wine_get_gs();\n    pm_ctx.EFlags &= ~V86_FLAG;\n\n    TRACE(\"DOS program is now entering %d-bit protected mode\\n\", \n          DOSVM_IsDos32() ? 32 : 16);\n\n    __TRY \n    {\n        WOWCallback16Ex( 0, WCB16_REGS, 0, NULL, (DWORD *)&pm_ctx );\n    } \n    __EXCEPT(dpmi_exception_handler) \n    { \n    } \n    __ENDTRY\n\n    TRACE( \"Protected mode DOS program is terminating\\n\" );\n\n    /*\n     * FIXME: Instead of calling DOSVM_Exit, we should release all\n     *        allocated protected mode resources and call MZ_Exit\n     *        using real mode context. See DPMI specification.\n     */\n    DOSVM_Exit( DPMI_retval );\n\n#if 0\n    wine_ldt_free_entries( psp->environment, 1 );\n    psp->environment = env_seg;\n    wine_ldt_free_entries(es,1);\n    if (ds != ss) wine_ldt_free_entries(ds,1);\n    wine_ldt_free_entries(ss,1);\n    wine_ldt_free_entries(cs,1);\n#endif\n}\n\nstatic RMCB *DPMI_AllocRMCB( void )\n{\n    RMCB *NewRMCB = HeapAlloc(GetProcessHeap(), 0, sizeof(RMCB));\n    UINT16 uParagraph;\n\n    if (NewRMCB)\n    {\n\tLPVOID RMCBmem = DOSMEM_AllocBlock(4, &uParagraph);\n\tLPBYTE p = RMCBmem;\n\n\t*p++ = 0xcd; /* RMCB: */\n\t*p++ = 0x31; /* int $0x31 */\n/* it is the called procedure's task to change the return CS:EIP\n   the DPMI 0.9 spec states that if it doesn't, it will be called again */\n\t*p++ = 0xeb;\n\t*p++ = 0xfc; /* jmp RMCB */\n\tNewRMCB->address = MAKELONG(0, uParagraph);\n\tNewRMCB->next = FirstRMCB;\n\tFirstRMCB = NewRMCB;\n    }\n    return NewRMCB;\n}\n\n\nFARPROC16 DPMI_AllocInternalRMCB( RMCBPROC proc )\n{\n    RMCB *NewRMCB = DPMI_AllocRMCB();\n\n    if (NewRMCB) {\n        NewRMCB->proc_ofs = (DWORD)proc;\n        NewRMCB->proc_sel = 0;\n        NewRMCB->regs_ofs = 0;\n        NewRMCB->regs_sel = 0;\n        return (FARPROC16)(NewRMCB->address);\n    }\n    return NULL;\n}\n\n\nstatic BOOL DPMI_FreeRMCB( DWORD address )\n{\n    RMCB *CurrRMCB = FirstRMCB;\n    RMCB *PrevRMCB = NULL;\n\n    while (CurrRMCB && (CurrRMCB->address != address))\n    {\n\tPrevRMCB = CurrRMCB;\n\tCurrRMCB = CurrRMCB->next;\n    }\n    if (CurrRMCB)\n    {\n\tif (PrevRMCB)\n\tPrevRMCB->next = CurrRMCB->next;\n\t    else\n\tFirstRMCB = CurrRMCB->next;\n\tDOSMEM_FreeBlock(PTR_REAL_TO_LIN(SELECTOROF(CurrRMCB->address),OFFSETOF(CurrRMCB->address)));\n\tHeapFree(GetProcessHeap(), 0, CurrRMCB);\n        return TRUE;\n    }\n    return FALSE;\n}\n\n\n/**********************************************************************\n *\t    DOSVM_RawModeSwitchHandler\n *\n * DPMI Raw Mode Switch handler\n */\nvoid WINAPI DOSVM_RawModeSwitchHandler( CONTEXT *context )\n{\n  CONTEXT rm_ctx;\n  int ret;\n\n  /* initialize real-mode context as per spec */\n  memset(&rm_ctx, 0, sizeof(rm_ctx));\n  rm_ctx.SegDs  = AX_reg(context);\n  rm_ctx.SegEs  = CX_reg(context);\n  rm_ctx.SegSs  = DX_reg(context);\n  rm_ctx.Esp    = context->Ebx;\n  rm_ctx.SegCs  = SI_reg(context);\n  rm_ctx.Eip    = context->Edi;\n  rm_ctx.Ebp    = context->Ebp;\n  rm_ctx.SegFs  = 0;\n  rm_ctx.SegGs  = 0;\n\n  /* Copy interrupt state. */\n  if (get_vm86_teb_info()->dpmi_vif)\n      rm_ctx.EFlags = V86_FLAG | VIF_MASK;\n  else\n      rm_ctx.EFlags = V86_FLAG;\n\n  /* enter real mode again */\n  TRACE(\"re-entering real mode at %04x:%04x\\n\",rm_ctx.SegCs,rm_ctx.Eip);\n  ret = DOSVM_Enter( &rm_ctx );\n  /* when the real-mode stuff call its mode switch address,\n     DOSVM_Enter will return and we will continue here */\n\n  if (ret<0) {\n    ERR(\"Sync lost!\\n\");\n    /* if the sync was lost, there's no way to recover */\n    ExitProcess(1);\n  }\n\n  /* alter protected-mode context as per spec */\n  context->SegDs   = LOWORD(rm_ctx.Eax);\n  context->SegEs   = LOWORD(rm_ctx.Ecx);\n  context->SegSs   = LOWORD(rm_ctx.Edx);\n  context->Esp     = rm_ctx.Ebx;\n  context->SegCs   = LOWORD(rm_ctx.Esi);\n  context->Eip     = rm_ctx.Edi;\n  context->Ebp     = rm_ctx.Ebp;\n  context->SegFs   = 0;\n  context->SegGs   = 0;\n\n  /* Copy interrupt state. */\n  if (rm_ctx.EFlags & VIF_MASK)\n      get_vm86_teb_info()->dpmi_vif = 1;\n  else\n      get_vm86_teb_info()->dpmi_vif = 0;\n\n  /* Return to new address and hope that we didn't mess up */\n  TRACE(\"re-entering protected mode at %04x:%08x\\n\",\n      context->SegCs, context->Eip);\n}\n\n\n/**********************************************************************\n *\t    AllocRMCB\n */\nstatic void DOSVM_AllocRMCB( CONTEXT *context )\n{\n    RMCB *NewRMCB = DPMI_AllocRMCB();\n\n    TRACE(\"Function to call: %04x:%04x\\n\", (WORD)context->SegDs, SI_reg(context) );\n\n    if (NewRMCB)\n    {\n       NewRMCB->proc_ofs = DOSVM_IsDos32() ? context->Esi : LOWORD(context->Esi);\n\tNewRMCB->proc_sel = context->SegDs;\n       NewRMCB->regs_ofs = DOSVM_IsDos32() ? context->Edi : LOWORD(context->Edi);\n\tNewRMCB->regs_sel = context->SegEs;\n\tSET_CX( context, HIWORD(NewRMCB->address) );\n\tSET_DX( context, LOWORD(NewRMCB->address) );\n    }\n    else\n    {\n\tSET_AX( context, 0x8015 ); /* callback unavailable */\n\tSET_CFLAG(context);\n    }\n}\n\n\n/**********************************************************************\n *\t    FreeRMCB\n */\nstatic void DOSVM_FreeRMCB( CONTEXT *context )\n{\n    FIXME(\"callback address: %04x:%04x\\n\",\n          CX_reg(context), DX_reg(context));\n\n    if (!DPMI_FreeRMCB(MAKELONG(DX_reg(context), CX_reg(context)))) {\n\tSET_AX( context, 0x8024 ); /* invalid callback address */\n\tSET_CFLAG(context);\n    }\n}\n\n\nstatic BYTE * XMS_Offset( MOVEOFS *ofs )\n{\n    if (ofs->Handle) return (BYTE*)GlobalLock16(ofs->Handle)+ofs->Offset;\n    else return PTR_REAL_TO_LIN(SELECTOROF(ofs->Offset),OFFSETOF(ofs->Offset));\n}\n\n/**********************************************************************\n *\t    XMS_Handler\n */\nstatic void XMS_Handler( CONTEXT *context )\n{\n    switch(AH_reg(context))\n    {\n    case 0x00:   /* Get XMS version number */\n        TRACE(\"get XMS version number\\n\");\n        SET_AX( context, 0x0200 ); /* 2.0 */\n        SET_BX( context, 0x0000 ); /* internal revision */\n        SET_DX( context, 0x0001 ); /* HMA exists */\n        break;\n    case 0x08:   /* Query Free Extended Memory */\n    {\n        MEMORYSTATUS status;\n\n        TRACE(\"query free extended memory\\n\");\n        GlobalMemoryStatus( &status );\n        SET_DX( context, status.dwAvailVirtual >> 10 );\n        SET_AX( context, status.dwAvailVirtual >> 10 );\n        TRACE(\"returning largest %dK, total %dK\\n\", AX_reg(context), DX_reg(context));\n    }\n    break;\n    case 0x09:   /* Allocate Extended Memory Block */\n        TRACE(\"allocate extended memory block (%dK)\\n\",\n            DX_reg(context));\n\tSET_DX( context, GlobalAlloc16(GMEM_MOVEABLE, (DWORD)DX_reg(context)<<10) );\n\tSET_AX( context, DX_reg(context) ? 1 : 0 );\n\tif (!DX_reg(context)) SET_BL( context, 0xA0 ); /* out of memory */\n\tbreak;\n    case 0x0a:   /* Free Extended Memory Block */\n\tTRACE(\"free extended memory block %04x\\n\",DX_reg(context));\n       if(!DX_reg(context) || GlobalFree16(DX_reg(context))) {\n         SET_AX( context, 0 );    /* failure */\n         SET_BL( context, 0xa2 ); /* invalid handle */\n       } else\n         SET_AX( context, 1 );    /* success */\n\tbreak;\n    case 0x0b:   /* Move Extended Memory Block */\n    {\n\tMOVESTRUCT*move=CTX_SEG_OFF_TO_LIN(context,\n\t    context->SegDs,context->Esi);\n        BYTE*src,*dst;\n        TRACE(\"move extended memory block\\n\");\n        src=XMS_Offset(&move->Source);\n        dst=XMS_Offset(&move->Dest);\n\tmemcpy(dst,src,move->Length);\n\tif (move->Source.Handle) GlobalUnlock16(move->Source.Handle);\n\tif (move->Dest.Handle) GlobalUnlock16(move->Dest.Handle);\n\tbreak;\n    }\n    case 0x88:   /* Query Any Free Extended Memory */\n    {\n        MEMORYSTATUS status;\n        SYSTEM_INFO  info;\n\n        TRACE(\"query any free extended memory\\n\");\n\n        GlobalMemoryStatus( &status );\n        GetSystemInfo( &info );\n        context->Eax = status.dwAvailVirtual >> 10;\n        context->Edx = status.dwAvailVirtual >> 10;\n        context->Ecx = (DWORD)info.lpMaximumApplicationAddress;\n        SET_BL( context, 0 ); /* No errors. */\n\n        TRACE(\"returning largest %dK, total %dK, highest 0x%x\\n\",\n              context->Eax, context->Edx, context->Ecx);\n    }\n    break;\n    default:\n        INT_BARF( context, 0x31 );\n        SET_AX( context, 0x0000 ); /* failure */\n        SET_BL( context, 0x80 );   /* function not implemented */\n        break;\n    }\n}\n\n\n/**********************************************************************\n *         DOSVM_CheckWrappers\n *\n * Check if this was really a wrapper call instead of an interrupt.\n */\nBOOL DOSVM_CheckWrappers( CONTEXT *context )\n{\n    if (context->SegCs==DOSVM_dpmi_segments->dpmi_seg) {\n        /* This is the protected mode switch */\n        StartPM(context);\n        return TRUE;\n    }\n    else if (context->SegCs==DOSVM_dpmi_segments->xms_seg)\n    {\n        /* This is the XMS driver entry point */\n        XMS_Handler(context);\n        return TRUE;\n    }\n    else\n    {\n        /* Check for RMCB */\n        RMCB *CurrRMCB = FirstRMCB;\n\n        while (CurrRMCB && (HIWORD(CurrRMCB->address) != context->SegCs))\n            CurrRMCB = CurrRMCB->next;\n\n        if (CurrRMCB) {\n            /* RMCB call, propagate to protected-mode handler */\n            DPMI_CallRMCBProc(context, CurrRMCB, dpmi_flag);\n            return TRUE;\n        }\n    }\n\n    return FALSE;\n}\n\n/**********************************************************************\n *         DOSVM_Int31Handler\n *\n * Handler for int 31h (DPMI).\n */\nvoid WINAPI DOSVM_Int31Handler( CONTEXT *context )\n{\n    RESET_CFLAG(context);\n    switch(AX_reg(context))\n    {\n    case 0x0000:  /* Allocate LDT descriptors */\n        TRACE( \"allocate LDT descriptors (%d)\\n\", CX_reg(context) );\n        {\n            WORD sel =  AllocSelectorArray16( CX_reg(context) );\n            if(!sel) \n            {\n               TRACE( \"failed\\n\" );\n               SET_AX( context, 0x8011 ); /* descriptor unavailable */\n               SET_CFLAG( context );\n            } \n            else \n            { \n                TRACE( \"success, array starts at 0x%04x\\n\", sel );\n                SET_AX( context, sel );      \n            }\n        }\n        break;\n\n    case 0x0001:  /* Free LDT descriptor */\n        TRACE( \"free LDT descriptor (0x%04x)\\n\", BX_reg(context) );\n        if (FreeSelector16( BX_reg(context) ))\n        {\n            SET_AX( context, 0x8022 );  /* invalid selector */\n            SET_CFLAG( context );\n        }\n        else\n        {\n            /* If a segment register contains the selector being freed, */\n            /* set it to zero. */\n            if (!((context->SegDs^BX_reg(context)) & ~3)) context->SegDs = 0;\n            if (!((context->SegEs^BX_reg(context)) & ~3)) context->SegEs = 0;\n            if (!((context->SegFs^BX_reg(context)) & ~3)) context->SegFs = 0;\n            if (!((context->SegGs^BX_reg(context)) & ~3)) context->SegGs = 0;\n        }\n        break;\n\n    case 0x0002:  /* Real mode segment to descriptor */\n        TRACE( \"real mode segment to descriptor (0x%04x)\\n\", BX_reg(context) );\n        {\n            WORD entryPoint = 0;  /* KERNEL entry point for descriptor */\n            switch(BX_reg(context))\n            {\n            case 0x0000: entryPoint = 183; break;  /* __0000H */\n            case 0x0040: entryPoint = 193; break;  /* __0040H */\n            case 0xa000: entryPoint = 174; break;  /* __A000H */\n            case 0xb000: entryPoint = 181; break;  /* __B000H */\n            case 0xb800: entryPoint = 182; break;  /* __B800H */\n            case 0xc000: entryPoint = 195; break;  /* __C000H */\n            case 0xd000: entryPoint = 179; break;  /* __D000H */\n            case 0xe000: entryPoint = 190; break;  /* __E000H */\n            case 0xf000: entryPoint = 194; break;  /* __F000H */\n            default:\n                FIXME(\"Real mode segment (%x) to descriptor: no longer supported\\n\",\n                      BX_reg(context));\n                SET_CFLAG( context );\n                break;\n            }\n            if (entryPoint)\n            {\n                FARPROC16 proc = GetProcAddress16( GetModuleHandle16( \"KERNEL\" ),\n                                                   (LPCSTR)(ULONG_PTR)entryPoint );\n                SET_AX( context, LOWORD(proc) );\n            }\n        }\n        break;\n\n    case 0x0003:  /* Get next selector increment */\n        TRACE(\"get selector increment (__AHINCR)\\n\");\n        context->Eax = __AHINCR;\n        break;\n\n    case 0x0004:  /* Lock selector (not supported) */\n        FIXME(\"lock selector not supported\\n\");\n        context->Eax = 0;  /* FIXME: is this a correct return value? */\n        break;\n\n    case 0x0005:  /* Unlock selector (not supported) */\n        FIXME(\"unlock selector not supported\\n\");\n        context->Eax = 0;  /* FIXME: is this a correct return value? */\n        break;\n\n    case 0x0006:  /* Get selector base address */\n        TRACE( \"get selector base address (0x%04x)\\n\", BX_reg(context) );\n        {\n            LDT_ENTRY entry;\n            WORD sel = BX_reg(context);\n            wine_ldt_get_entry( sel, &entry );\n            if (wine_ldt_is_empty(&entry))\n            {\n                context->Eax = 0x8022;  /* invalid selector */\n                SET_CFLAG(context);\n            }\n            else\n            {\n                void *base = GetSelectorBase(sel);\n                SET_CX( context, HIWORD(base) );\n                SET_DX( context, LOWORD(base) );\n            }\n        }\n        break;\n\n    case 0x0007:  /* Set selector base address */\n        {\n            DWORD base = MAKELONG( DX_reg(context), CX_reg(context) );\n            WORD  sel = BX_reg(context);\n            TRACE( \"set selector base address (0x%04x,0x%08x)\\n\", sel, base );\n\n            /* check if Win16 app wants to access lower 64K of DOS memory */\n            if (base < 0x10000 && DOSVM_IsWin16())\n                DOSMEM_MapDosLayout();\n\n            SetSelectorBase( sel, base );\n        }\n        break;\n\n    case 0x0008:  /* Set selector limit */\n        {\n            DWORD limit = MAKELONG( DX_reg(context), CX_reg(context) );\n            TRACE( \"set selector limit (0x%04x,0x%08x)\\n\",\n                   BX_reg(context), limit );\n            SetSelectorLimit16( BX_reg(context), limit );\n        }\n        break;\n\n    case 0x0009:  /* Set selector access rights */\n        TRACE( \"set selector access rights(0x%04x,0x%04x)\\n\",\n               BX_reg(context), CX_reg(context) );\n        SelectorAccessRights16( BX_reg(context), 1, CX_reg(context) );\n        break;\n\n    case 0x000a:  /* Allocate selector alias */\n        TRACE( \"allocate selector alias (0x%04x)\\n\", BX_reg(context) );\n        SET_AX( context, AllocCStoDSAlias16( BX_reg(context) ) );\n        if (!AX_reg(context))\n        {\n            SET_AX( context, 0x8011 );  /* descriptor unavailable */\n            SET_CFLAG(context);\n        }\n        break;\n\n    case 0x000b:  /* Get descriptor */\n        TRACE( \"get descriptor (0x%04x)\\n\", BX_reg(context) );\n        {\n            LDT_ENTRY *entry = CTX_SEG_OFF_TO_LIN( context, context->SegEs,\n                                                   context->Edi );\n            wine_ldt_get_entry( BX_reg(context), entry );\n        }\n        break;\n\n    case 0x000c:  /* Set descriptor */\n        TRACE( \"set descriptor (0x%04x)\\n\", BX_reg(context) );\n        {\n            LDT_ENTRY *entry = CTX_SEG_OFF_TO_LIN( context, context->SegEs,\n                                                   context->Edi );\n            wine_ldt_set_entry( BX_reg(context), entry );\n        }\n        break;\n\n    case 0x000d:  /* Allocate specific LDT descriptor */\n        TRACE( \"allocate descriptor (0x%04x)\\n\", BX_reg(context) );\n        if (!(BX_reg(context) & 4))\n        {\n            SET_AX( context, 0x8022 ); /* gdt descriptor */\n            SET_CFLAG( context );\n        }\n        else\n        {\n            LDT_ENTRY entry;\n            WORD sel = BX_reg(context);\n            wine_ldt_get_entry(sel, &entry);\n            if (wine_ldt_copy.flags[sel >> __AHSHIFT] & WINE_LDT_FLAGS_ALLOCATED)\n            {\n                SET_AX( context, 0x8011 ); /* descriptor unavailable */\n                SET_CFLAG( context );\n            }\n            else\n            {\n                wine_ldt_copy.flags[sel >> __AHSHIFT] |= WINE_LDT_FLAGS_ALLOCATED;\n                wine_ldt_set_flags(&entry, WINE_LDT_FLAGS_DATA);\n                wine_ldt_set_base(&entry, 0);\n                wine_ldt_set_limit(&entry, 0);\n                wine_ldt_set_entry(sel, &entry);\n            }\n        }\n        break;\n\n    case 0x000e:  /* Get Multiple Descriptors (1.0) */\n        FIXME( \"get multiple descriptors - unimplemented\\n\" );\n        break;\n\n    case 0x000f:  /* Set Multiple Descriptors (1.0) */\n        FIXME( \"set multiple descriptors - unimplemented\\n\" );\n        break;\n\n    case 0x0100:  /* Allocate DOS memory block */\n        TRACE( \"allocate DOS memory block (0x%x paragraphs)\\n\", BX_reg(context) );\n        {\n            DWORD dw = GlobalDOSAlloc16( (DWORD)BX_reg(context) << 4 );\n            if (dw) {\n                SET_AX( context, HIWORD(dw) );\n                SET_DX( context, LOWORD(dw) );\n            } else {\n                SET_AX( context, 0x0008 ); /* insufficient memory */\n                SET_BX( context, DOSMEM_Available() >> 4 );\n                SET_CFLAG(context);\n            }\n            break;\n        }\n\n    case 0x0101:  /* Free DOS memory block */\n        TRACE( \"free DOS memory block (0x%04x)\\n\", DX_reg(context) );\n        {\n            WORD error = GlobalDOSFree16( DX_reg(context) );\n            if (error) {\n                SET_AX( context, 0x0009 ); /* memory block address invalid */\n                SET_CFLAG( context );\n            }\n        }\n        break;\n\n    case 0x0102: /* Resize DOS Memory Block */\n        FIXME( \"resize DOS memory block (0x%04x, 0x%x paragraphs) - unimplemented\\n\", \n               DX_reg(context), BX_reg(context) );\n        break;\n\n    case 0x0200: /* get real mode interrupt vector */\n        TRACE( \"get realmode interrupt vector (0x%02x)\\n\",\n               BL_reg(context) );\n        {\n            FARPROC16 proc = DOSVM_GetRMHandler( BL_reg(context) );\n            SET_CX( context, SELECTOROF(proc) );\n            SET_DX( context, OFFSETOF(proc) );\n        }\n        break;\n\n    case 0x0201: /* set real mode interrupt vector */\n        TRACE( \"set realmode interrupt vector (0x%02x, 0x%04x:0x%04x)\\n\", \n               BL_reg(context), CX_reg(context), DX_reg(context) );\n        DOSVM_SetRMHandler( BL_reg(context), \n                            (FARPROC16)MAKESEGPTR(CX_reg(context), DX_reg(context)) );\n        break;\n\n    case 0x0202:  /* Get Processor Exception Handler Vector */\n        FIXME( \"Get Processor Exception Handler Vector (0x%02x)\\n\",\n               BL_reg(context) );\n        if (DOSVM_IsDos32()) \n        {\n            SET_CX( context, 0 );\n            context->Edx = 0;\n        } \n        else \n        {\n            SET_CX( context, 0 );\n            SET_DX( context, 0 );\n        }\n        break;\n\n    case 0x0203:  /* Set Processor Exception Handler Vector */\n         FIXME( \"Set Processor Exception Handler Vector (0x%02x)\\n\",\n                BL_reg(context) );\n         break;\n\n    case 0x0204:  /* Get protected mode interrupt vector */\n        TRACE(\"get protected mode interrupt handler (0x%02x)\\n\",\n              BL_reg(context));\n        if (DOSVM_IsDos32()) \n        {\n            FARPROC48 handler = DOSVM_GetPMHandler48( BL_reg(context) );\n            SET_CX( context, handler.selector );\n            context->Edx = handler.offset;\n        } \n        else \n        {\n            FARPROC16 handler = DOSVM_GetPMHandler16( BL_reg(context) );\n            SET_CX( context, SELECTOROF(handler) );\n            SET_DX( context, OFFSETOF(handler) );\n        }\n        break;\n\n    case 0x0205:  /* Set protected mode interrupt vector */\n        TRACE(\"set protected mode interrupt handler (0x%02x,0x%04x:0x%08x)\\n\",\n              BL_reg(context), CX_reg(context), context->Edx);\n        if (DOSVM_IsDos32()) \n        {\n            FARPROC48 handler;\n            handler.selector = CX_reg(context);\n            handler.offset = context->Edx;\n            DOSVM_SetPMHandler48( BL_reg(context), handler );\n        } \n        else \n        {\n            FARPROC16 handler;\n            handler = (FARPROC16)MAKESEGPTR( CX_reg(context), DX_reg(context)); \n            DOSVM_SetPMHandler16( BL_reg(context), handler );\n        }\n        break;\n\n    case 0x0300:  /* Simulate real mode interrupt */\n        TRACE( \"Simulate real mode interrupt %02x.\\n\", BL_reg(context));\n        DOSVM_CallRMInt( context );\n        break;\n\n    case 0x0301:  /* Call real mode procedure with far return */\n        TRACE( \"Call real mode procedure with far return.\\n\" );\n        DOSVM_CallRMProc( context, FALSE );\n        break;\n\n    case 0x0302:  /* Call real mode procedure with interrupt return */\n        TRACE( \"Call real mode procedure with interrupt return.\\n\" );\n        DOSVM_CallRMProc( context, TRUE );\n        break;\n\n    case 0x0303:  /* Allocate Real Mode Callback Address */\n        TRACE( \"Allocate real mode callback address.\\n\" );\n        DOSVM_AllocRMCB( context );\n        break;\n\n    case 0x0304:  /* Free Real Mode Callback Address */\n        TRACE( \"Free real mode callback address.\\n\" );\n        DOSVM_FreeRMCB( context );\n        break;\n\n    case 0x0305:  /* Get State Save/Restore Addresses */\n        TRACE(\"get state save/restore addresses\\n\");\n        /* we probably won't need this kind of state saving */\n        SET_AX( context, 0 );\n\n        /* real mode: just point to the lret */\n        SET_BX( context, DOSVM_dpmi_segments->wrap_seg );\n        SET_CX( context, 2 );\n\n        /* protected mode: don't have any handler yet... */\n        /* FIXME: Use DI in 16-bit DPMI and EDI in 32-bit DPMI */\n        FIXME(\"no protected-mode dummy state save/restore handler yet\\n\");\n        SET_SI( context, 0 );\n        context->Edi = 0;\n        break;\n\n    case 0x0306:  /* Get Raw Mode Switch Addresses */\n        TRACE(\"get raw mode switch addresses\\n\");\n\n        /* real mode, point to standard DPMI return wrapper */\n        SET_BX( context, DOSVM_dpmi_segments->wrap_seg );\n        SET_CX( context, 0 );\n\n        /* protected mode, point to DPMI call wrapper */\n        /* FIXME: Use DI in 16-bit DPMI and EDI in 32-bit DPMI */\n        /* FIXME: Doesn't work in DPMI32... */\n        SET_SI( context, DOSVM_dpmi_segments->dpmi_sel );\n        context->Edi = 8; /* offset of the INT 0x31 call */\n        break;\n\n    case 0x0400:  /* Get DPMI version */\n        TRACE(\"get DPMI version\\n\");\n        {\n            SYSTEM_INFO si;\n\n            GetSystemInfo(&si);\n            SET_AX( context, 0x005a );  /* DPMI version 0.90 */\n            SET_BX( context, 0x0005 );  /* Flags: 32-bit, virtual memory */\n            SET_CL( context, si.wProcessorLevel );\n            SET_DX( context, 0x0870 );  /* Master/slave interrupt controller base */\n        }\n        break;\n\n    case 0x0401:  /* Get DPMI Capabilities (1.0) */\n        FIXME( \"get dpmi capabilities - unimplemented\\n\");\n        break;\n\n    case 0x0500:  /* Get free memory information */\n        TRACE(\"get free memory information\\n\");\n        {\n            MEMORYSTATUS status;\n            SYSTEM_BASIC_INFORMATION sbi;\n\n            /* the layout is just the same as MEMMANINFO, but without\n             * the dwSize entry.\n             */\n            struct\n            {\n                DWORD dwLargestFreeBlock;\n                DWORD dwMaxPagesAvailable;\n                DWORD dwMaxPagesLockable;\n                DWORD dwTotalLinearSpace;\n                DWORD dwTotalUnlockedPages;\n                DWORD dwFreePages;\n                DWORD dwTotalPages;\n                DWORD dwFreeLinearSpace;\n                DWORD dwSwapFilePages;\n                WORD  wPageSize;\n            } *info = CTX_SEG_OFF_TO_LIN( context, context->SegEs, context->Edi );\n\n            GlobalMemoryStatus( &status );\n            NtQuerySystemInformation( SystemBasicInformation, &sbi, sizeof(sbi), NULL );\n\n            info->wPageSize            = sbi.PageSize;\n            info->dwLargestFreeBlock   = min(status.dwAvailVirtual, 102400000);\n            info->dwMaxPagesAvailable  = info->dwLargestFreeBlock / info->wPageSize;\n            info->dwMaxPagesLockable   = info->dwMaxPagesAvailable;\n            info->dwTotalLinearSpace   = min(status.dwTotalVirtual, 102400000) / info->wPageSize;\n            info->dwTotalUnlockedPages = info->dwTotalLinearSpace;\n            info->dwFreePages          = info->dwMaxPagesAvailable;\n            info->dwTotalPages         = info->dwTotalLinearSpace;\n            info->dwFreeLinearSpace    = info->dwMaxPagesAvailable;\n            info->dwSwapFilePages      = status.dwTotalPageFile / info->wPageSize;\n            break;\n        }\n\n    case 0x0501:  /* Allocate memory block */\n        {\n            DWORD size = MAKELONG( CX_reg(context), BX_reg(context) );\n            BYTE *ptr;\n\n            TRACE( \"allocate memory block (%u bytes)\\n\", size );\n\n            ptr = DPMI_xalloc( size );\n            TRACE( \"%p\\n\", ptr );\n            if (!ptr)\n            {\n                SET_AX( context, 0x8012 );  /* linear memory not available */\n                SET_CFLAG(context);\n            } \n            else \n            {\n                SET_BX( context, HIWORD(ptr) );\n                SET_CX( context, LOWORD(ptr) );\n                SET_SI( context, HIWORD(ptr) );\n                SET_DI( context, LOWORD(ptr) );\n            }\n            break;\n        }\n\n    case 0x0502:  /* Free memory block */\n        {\n            DWORD handle = MAKELONG( DI_reg(context), SI_reg(context) );\n            TRACE( \"free memory block (0x%08x)\\n\", handle );\n            DPMI_xfree( (void *)handle );\n        }\n        break;\n\n    case 0x0503:  /* Resize memory block */\n        {\n            DWORD size = MAKELONG( CX_reg(context), BX_reg(context) );\n            DWORD handle = MAKELONG( DI_reg(context), SI_reg(context) );\n            BYTE *ptr;\n\n            TRACE( \"resize memory block (0x%08x, %u bytes)\\n\", handle, size );\n\n            ptr = DPMI_xrealloc( (void *)handle, size );\n            if (!ptr)\n            {\n                SET_AX( context, 0x8012 );  /* linear memory not available */\n                SET_CFLAG(context);\n            } else {\n                SET_BX( context, HIWORD(ptr) );\n                SET_CX( context, LOWORD(ptr) );\n                SET_SI( context, HIWORD(ptr) );\n                SET_DI( context, LOWORD(ptr) );\n            }\n        }\n        break;\n\n    case 0x0507:  /* Set page attributes (1.0) */\n        FIXME( \"set page attributes - unimplemented\\n\" );\n        break;  /* Just ignore it */\n\n    case 0x0600:  /* Lock linear region */\n        TRACE( \"lock linear region - ignored (no paging)\\n\" );\n        break;\n\n    case 0x0601:  /* Unlock linear region */\n        TRACE( \"unlock linear region - ignored (no paging)\\n\" );\n        break;\n\n    case 0x0602:  /* Mark real mode region as pageable */\n        TRACE( \"mark real mode region as pageable - ignored (no paging)\\n\" );\n        break;\n\n    case 0x0603:  /* Relock real mode region */\n        TRACE( \"relock real mode region - ignored (no paging)\\n\" );\n        break;\n\n    case 0x0604:  /* Get page size */\n    {\n        SYSTEM_BASIC_INFORMATION info;\n        TRACE(\"get pagesize\\n\");\n        NtQuerySystemInformation( SystemBasicInformation, &info, sizeof(info), NULL );\n        SET_BX( context, HIWORD(info.PageSize) );\n        SET_CX( context, LOWORD(info.PageSize) );\n        break;\n    }\n    case 0x0700: /* Mark pages as paging candidates */\n        TRACE( \"mark pages as paging candidates - ignored (no paging)\\n\" );\n        break;\n\n    case 0x0701: /* Discard pages */\n        TRACE( \"discard pages - ignored (no paging)\\n\" );\n        break;\n\n    case 0x0702:  /* Mark page as demand-paging candidate */\n        TRACE( \"mark page as demand-paging candidate - ignored (no paging)\\n\" );\n        break;\n\n    case 0x0703:  /* Discard page contents */\n        TRACE( \"discard page contents - ignored (no paging)\\n\" );\n        break;\n\n    case 0x0800:  /* Physical address mapping */\n        FIXME( \"physical address mapping (0x%08x) - unimplemented\\n\",\n               MAKELONG(CX_reg(context),BX_reg(context)) );\n        break;\n\n    case 0x0900:  /* Get and Disable Virtual Interrupt State */\n        TRACE( \"Get and Disable Virtual Interrupt State: %d\\n\",\n               get_vm86_teb_info()->dpmi_vif );\n        SET_AL( context, get_vm86_teb_info()->dpmi_vif ? 1 : 0 );\n        get_vm86_teb_info()->dpmi_vif = 0;\n        break;\n\n    case 0x0901:  /* Get and Enable Virtual Interrupt State */\n        TRACE( \"Get and Enable Virtual Interrupt State: %d\\n\",\n               get_vm86_teb_info()->dpmi_vif );\n        SET_AL( context, get_vm86_teb_info()->dpmi_vif ? 1 : 0 );\n        get_vm86_teb_info()->dpmi_vif = 1;\n        break;\n\n    case 0x0902:  /* Get Virtual Interrupt State */\n        TRACE( \"Get Virtual Interrupt State: %d\\n\",\n               get_vm86_teb_info()->dpmi_vif );\n        SET_AL( context, get_vm86_teb_info()->dpmi_vif ? 1 : 0 );\n        break;\n\n    case 0x0e00:  /* Get Coprocessor Status (1.0) */\n        /*\n         * Return status in AX bits:\n         * B0    - MPv (MP bit in the virtual MSW/CR0)\n         *         0 = numeric coprocessor is disabled for this client\n         *         1 = numeric coprocessor is enabled for this client\n         * B1    - EMv (EM bit in the virtual MSW/CR0)\n         *         0 = client is not emulating coprocessor instructions\n         *         1 = client is emulating coprocessor instructions\n         * B2    - MPr (MP bit from the actual MSW/CR0)\n         *         0 = numeric coprocessor is not present\n         *         1 = numeric coprocessor is present\n         * B3    - EMr (EM bit from the actual MSW/CR0)\n         *         0 = host is not emulating coprocessor instructions\n         *         1 = host is emulating coprocessor instructions\n         * B4-B7 - coprocessor type\n         *         00H = no coprocessor\n         *         02H = 80287\n         *         03H = 80387\n         *         04H = 80486 with numeric coprocessor\n         *         05H-0FH = reserved for future numeric processors\n         */\n        TRACE( \"Get Coprocessor Status\\n\" );\n        SET_AX( context, 69 ); /* 486, coprocessor present and enabled */ \n        break;\n\n    case 0x0e01: /* Set Coprocessor Emulation (1.0) */\n        /*\n         * See function 0x0e00.\n         * BX bit B0 is new value for MPv.\n         * BX bit B1 is new value for EMv.\n         */\n        if (BX_reg(context) != 1)\n            FIXME( \"Set Coprocessor Emulation to %d - unimplemented\\n\", \n                   BX_reg(context) );\n        else\n            TRACE( \"Set Coprocessor Emulation - ignored\\n\" );\n        break;\n\n    default:\n        INT_BARF( context, 0x31 );\n        SET_AX( context, 0x8001 );  /* unsupported function */\n        SET_CFLAG(context);\n        break;\n    }  \n}\n"
  },
  {
    "path": "krnl386/int33.c",
    "content": "/*\n * DOS interrupt 33h handler\n *\n * Copyright 1999 Ove Kåven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n#include \"dosexe.h\"\n#include \"vga.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(int);\n\nstatic struct\n{\n    WORD x, y, but;\n    WORD lbcount, rbcount, rlastx, rlasty, llastx, llasty;\n    FARPROC16 callback;\n    WORD callmask;\n    WORD VMPratio, HMPratio, oldx, oldy;\n    WORD hide_count;\n} mouse_info;\n\n\n/**********************************************************************\n *          INT33_ResetMouse\n *\n * Handler for:\n * - subfunction 0x00 (reset mouse)\n * - subfunction 0x21 (software reset)\n */\nstatic void INT33_ResetMouse( CONTEXT *context )\n{\n    memset( &mouse_info, 0, sizeof(mouse_info) );\n    \n    /* Set the default mickey/pixel ratio */\n    mouse_info.HMPratio = 8;\n    mouse_info.VMPratio = 16;\n\n    /* Hide the mouse cursor */\n    mouse_info.hide_count = 1;\n    VGA_ShowMouse( FALSE );    \n\n    if (context)\n    {\n        SET_AX( context, 0xFFFF ); /* driver installed */\n        SET_BX( context, 3 );      /* number of buttons */\n    }\n}\n\n\n/**********************************************************************\n *\t    DOSVM_Int33Handler\n *\n * Handler for int 33h (MS MOUSE).\n */\nvoid WINAPI DOSVM_Int33Handler( CONTEXT *context )\n{\n    switch (AX_reg(context))\n    {\n    case 0x0000:\n        TRACE(\"Reset mouse driver and request status\\n\");\n        INT33_ResetMouse( context );\n        break;\n\n    case 0x0001:\n        TRACE(\"Show mouse cursor, old hide count: %d\\n\",\n              mouse_info.hide_count);\n        if (mouse_info.hide_count >= 1)\n            mouse_info.hide_count--;\n        if (!mouse_info.hide_count)\n            VGA_ShowMouse( TRUE );\n        break;\n\n    case 0x0002:\n        TRACE(\"Hide mouse cursor, old hide count: %d\\n\",\n              mouse_info.hide_count);\n        if(!mouse_info.hide_count)\n            VGA_ShowMouse( FALSE );            \n        mouse_info.hide_count++;\n        break;\n\n    case 0x0003:\n        TRACE(\"Return mouse position and button status: (%d,%d) and %d\\n\",\n              mouse_info.x, mouse_info.y, mouse_info.but);\n        SET_BX( context, mouse_info.but );\n        SET_CX( context, mouse_info.x );\n        SET_DX( context, mouse_info.y );\n        break;\n\n    case 0x0004:\n        FIXME(\"Position mouse cursor\\n\");\n        break;\n\n    case 0x0005:\n        TRACE(\"Return Mouse button press Information for %s mouse button\\n\",\n              BX_reg(context) ? \"right\" : \"left\");\n        if (BX_reg(context)) \n        {\n            SET_BX( context, mouse_info.rbcount );\n            mouse_info.rbcount = 0;\n            SET_CX( context, mouse_info.rlastx );\n            SET_DX( context, mouse_info.rlasty );\n        } \n        else \n        {\n            SET_BX( context, mouse_info.lbcount );\n            mouse_info.lbcount = 0;\n            SET_CX( context, mouse_info.llastx );\n            SET_DX( context, mouse_info.llasty );\n        }\n        SET_AX( context, mouse_info.but );\n        break;\n\n    case 0x0007:\n        FIXME(\"Define horizontal mouse cursor range %d..%d\\n\",\n              CX_reg(context), DX_reg(context));\n        break;\n\n    case 0x0008:\n        FIXME(\"Define vertical mouse cursor range %d..%d\\n\",\n              CX_reg(context), DX_reg(context));\n        break;\n\n    case 0x0009:\n        FIXME(\"Define graphics mouse cursor\\n\");\n        break;\n\n    case 0x000A:\n        FIXME(\"Define text mouse cursor\\n\");\n        break;\n\n    case 0x000B:\n        TRACE(\"Read Mouse motion counters\\n\");\n        {\n            int dx = ((int)mouse_info.x - (int)mouse_info.oldx)\n                * (mouse_info.HMPratio / 8);\n            int dy = ((int)mouse_info.y - (int)mouse_info.oldy)\n                * (mouse_info.VMPratio / 8);\n\n            SET_CX( context, (WORD)dx );\n            SET_DX( context, (WORD)dy );\n\n            mouse_info.oldx = mouse_info.x;\n            mouse_info.oldy = mouse_info.y;\n        }\n        break;\n\n    case 0x000C:\n        TRACE(\"Define mouse interrupt subroutine\\n\");\n        mouse_info.callmask = CX_reg(context);\n        mouse_info.callback = (FARPROC16)MAKESEGPTR(context->SegEs, \n                                                    DX_reg(context));\n        break;\n\n    case 0x000F:\n        TRACE(\"Set mickey/pixel ratio\\n\");\n        mouse_info.HMPratio = CX_reg(context);\n        mouse_info.VMPratio = DX_reg(context);\n        break;\n\n    case 0x0010:\n        FIXME(\"Define screen region for update\\n\");\n        break;\n\n    case 0x0015:\n        TRACE(\"Get mouse driver state and memory requirements\\n\");\n        SET_BX(context, sizeof(mouse_info));\n        break;\n\n    case 0x0021:\n        TRACE(\"Software reset\\n\");\n        INT33_ResetMouse( context );\n        break;\n\n    default:\n        INT_BARF(context,0x33);\n    }\n}\n\ntypedef struct {\n  FARPROC16 proc;\n  WORD mask,but,x,y,mx,my;\n} MCALLDATA;\n\nstatic void MouseRelay(CONTEXT *context,void *mdata)\n{\n  MCALLDATA *data = mdata;\n  CONTEXT ctx = *context;\n\n  if (!ISV86(&ctx))\n  {\n      ctx.EFlags |= V86_FLAG;\n      ctx.SegSs = 0; /* Allocate new stack. */\n  }\n\n  ctx.Eax   = data->mask;\n  ctx.Ebx   = data->but;\n  ctx.Ecx   = data->x;\n  ctx.Edx   = data->y;\n  ctx.Esi   = data->mx;\n  ctx.Edi   = data->my;\n  ctx.SegCs = SELECTOROF(data->proc);\n  ctx.Eip   = OFFSETOF(data->proc);\n  HeapFree(GetProcessHeap(), 0, data);\n  DPMI_CallRMProc(&ctx, NULL, 0, 0);\n}\n\nstatic void QueueMouseRelay(DWORD mx, DWORD my, WORD mask)\n{\n  mouse_info.x = mx;\n  mouse_info.y = my;\n\n  /* Left button down */\n  if(mask & 0x02) {\n    mouse_info.but |= 0x01;\n    mouse_info.llastx = mx;\n    mouse_info.llasty = my;\n    mouse_info.lbcount++;\n  }\n\n  /* Left button up */\n  if(mask & 0x04) {\n    mouse_info.but &= ~0x01;\n  }\n\n  /* Right button down */\n  if(mask & 0x08) {\n    mouse_info.but |= 0x02;\n    mouse_info.rlastx = mx;\n    mouse_info.rlasty = my;\n    mouse_info.rbcount++;\n  }\n\n  /* Right button up */\n  if(mask & 0x10) {\n    mouse_info.but &= ~0x02;\n  }\n\n  /* Middle button down */\n  if(mask & 0x20) {\n    mouse_info.but |= 0x04;\n  }\n\n  /* Middle button up */\n  if(mask & 0x40) {\n    mouse_info.but &= ~0x04;\n  }\n\n  if ((mask & mouse_info.callmask) && mouse_info.callback) {\n    MCALLDATA *data = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MCALLDATA));\n    data->proc = mouse_info.callback;\n    data->mask = mask & mouse_info.callmask;\n    data->but = mouse_info.but;\n    data->x = mouse_info.x;\n    data->y = mouse_info.y;\n\n    /*\n     * Fake mickeys. \n     *\n     * FIXME: This is not entirely correct. If mouse if moved to the edge\n     *        of the screen, mouse will stop moving and mickeys won't\n     *        be updated even though they should be.\n     */\n    data->mx = mouse_info.x * (mouse_info.HMPratio / 8);\n    data->my = mouse_info.y * (mouse_info.VMPratio / 8);\n\n    DOSVM_QueueEvent(-1, DOS_PRIORITY_MOUSE, MouseRelay, data);\n  }\n}\n\nvoid DOSVM_Int33Message(UINT message,WPARAM wParam,LPARAM lParam)\n{\n  WORD mask = 0;\n  unsigned Height, Width, SX=1, SY=1;\n\n  if (VGA_GetMode(&Height, &Width, NULL)) {\n    /* may need to do some coordinate scaling */\n    if (Width)\n      SX = 640/Width;\n    if (!SX) SX=1;\n  }\n\n  switch (message) {\n  case WM_MOUSEMOVE:\n    mask |= 0x01;\n    break;\n  case WM_LBUTTONDOWN:\n  case WM_LBUTTONDBLCLK:\n    mask |= 0x02;\n    break;\n  case WM_LBUTTONUP:\n    mask |= 0x04;\n    break;\n  case WM_RBUTTONDOWN:\n  case WM_RBUTTONDBLCLK:\n    mask |= 0x08;\n    break;\n  case WM_RBUTTONUP:\n    mask |= 0x10;\n    break;\n  case WM_MBUTTONDOWN:\n  case WM_MBUTTONDBLCLK:\n    mask |= 0x20;\n    break;\n  case WM_MBUTTONUP:\n    mask |= 0x40;\n    break;\n  }\n\n  QueueMouseRelay(LOWORD(lParam) * SX,\n                 HIWORD(lParam) * SY,\n                 mask);\n}\n\nvoid DOSVM_Int33Console(MOUSE_EVENT_RECORD *record)\n{\n  unsigned Height, Width;\n  WORD mask = 0;\n  BOOL newLeftButton = record->dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED;\n  BOOL oldLeftButton = mouse_info.but & 0x01;\n  BOOL newRightButton = record->dwButtonState & RIGHTMOST_BUTTON_PRESSED;\n  BOOL oldRightButton = mouse_info.but & 0x02;\n  BOOL newMiddleButton = record->dwButtonState & FROM_LEFT_2ND_BUTTON_PRESSED;\n  BOOL oldMiddleButton = mouse_info.but & 0x04;\n\n  if(newLeftButton && !oldLeftButton)\n    mask |= 0x02;\n  else if(!newLeftButton && oldLeftButton)\n    mask |= 0x04;\n\n  if(newRightButton && !oldRightButton)\n    mask |= 0x08;\n  else if(!newRightButton && oldRightButton)\n    mask |= 0x10;\n\n  if(newMiddleButton && !oldMiddleButton)\n    mask |= 0x20;\n  else if(!newMiddleButton && oldMiddleButton)\n    mask |= 0x40;\n  \n  if (VGA_GetAlphaMode(&Width, &Height))\n    QueueMouseRelay( 640 / Width * record->dwMousePosition.X,\n                     200 / Height * record->dwMousePosition.Y,\n                     mask );\n}\n"
  },
  {
    "path": "krnl386/int67.c",
    "content": "/*\n * Int67 (EMS) emulation\n *\n * Copyright 2002 Jukka Heinonen\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <assert.h>\n#include \"wine/winbase16.h\"\n#include \"dosexe.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(int);\n\n/*\n * EMS page size == 16 kilobytes.\n */\n#define EMS_PAGE_SIZE (16*1024)\n\n/*\n * Linear address of EMS page.\n */\n#define EMS_PAGE_ADDRESS(base,page) (((char*)base) + EMS_PAGE_SIZE * page)\n\n/*\n * Maximum number of pages that can be allocated using EMS.\n */\n#define EMS_MAX_PAGES 1024\n\n/*\n * Maximum number of EMS handles (allocated blocks).\n */\n#define EMS_MAX_HANDLES 256\n\n/*\n * Global EMM Import Record.\n * Applications can get address of this record\n * and directly access allocated memory if they use\n * IOCTL interface.\n *\n * FIXME: Missing lots of fields, packing is not correct.\n */\n\nstatic struct {\n  struct {\n    UCHAR hindex;  /* handle number */\n    BYTE  flags;   /* bit 0: normal handle rather than system handle */\n    char  name[8]; /* handle name */\n    WORD  pages;   /* allocated pages */\n    void *address; /* physical address*/\n  } handle[EMS_MAX_HANDLES];\n\n  /* Wine specific fields... */\n\n  int   used_pages;     /* Number of allocated pages. */\n  void *frame_address;  /* Address of 64k EMS page frame */\n  WORD  frame_selector; /* Segment of 64k EMS page frame */\n\n  struct {\n    UCHAR hindex;       /* handle number */\n    WORD  logical_page; /* logical page */\n  } mapping[4];\n\n  struct {\n    UCHAR hindex;       /* handle number */\n    WORD  logical_page; /* logical page */\n  } mapping_save_area[EMS_MAX_HANDLES][4];\n\n} *EMS_record;\n\n/**********************************************************************\n *          EMS_init\n *\n * Allocates and initialized page frame and EMS global import record.\n */\nstatic void EMS_init(void)\n{\n  /*\n   * Start of 64k EMS frame.\n   */\n  ULONG base = 0xc0000;\n\n  if(EMS_record)\n    return;\n\n  EMS_record = HeapAlloc(GetProcessHeap(),\n                         HEAP_ZERO_MEMORY,\n                         sizeof(*EMS_record));\n\n  EMS_record->frame_address = (void *)base;\n  EMS_record->frame_selector = base >> 4;\n}\n\n/**********************************************************************\n *          EMS_alloc\n *\n * Get handle and allocate memory.\n */\nstatic void EMS_alloc( CONTEXT *context )\n{\n  int hindex = 1; /* handle zero is reserved for system */\n\n  while(hindex < EMS_MAX_HANDLES && EMS_record->handle[hindex].address)\n    hindex++;\n\n  if(hindex == EMS_MAX_HANDLES) {\n    SET_AH( context, 0x85 ); /* status: no more handles available */\n  } else {\n    int   pages = BX_reg(context);\n    void *buffer = HeapAlloc( GetProcessHeap(), 0, pages * EMS_PAGE_SIZE );\n\n    if(!buffer) {\n      SET_AH( context, 0x88 ); /* status: insufficient pages available */\n    } else {\n      EMS_record->handle[hindex].address = buffer;\n      EMS_record->handle[hindex].pages = pages;\n      EMS_record->used_pages += pages;\n\n      SET_DX( context, hindex ); /* handle to allocated memory*/\n      SET_AH( context, 0 );      /* status: ok */\n    }\n  }\n}\n\n/**********************************************************************\n *          EMS_access_name\n *\n * Get/set handle name.\n */\nstatic void EMS_access_name( CONTEXT *context )\n{\n  char *ptr;\n  int hindex = DX_reg(context);\n  if(hindex < 0 || hindex >= EMS_MAX_HANDLES) {\n    SET_AH( context, 0x83 ); /* invalid handle */\n    return;\n  }\n\n  switch (AL_reg(context)) {\n  case 0x00: /* get name */\n    ptr = PTR_REAL_TO_LIN(context->SegEs, DI_reg(context));\n    memcpy(ptr, EMS_record->handle[hindex].name, 8);\n    SET_AH( context, 0 );\n    break;\n\n  case 0x01: /* set name */\n    ptr = PTR_REAL_TO_LIN(context->SegDs, SI_reg(context));\n    memcpy(EMS_record->handle[hindex].name, ptr, 8);\n    SET_AH( context, 0 );\n    break;\n\n  default:\n    INT_BARF(context,0x67);\n    break;\n  }\n}\n\n/**********************************************************************\n *          EMS_map\n *\n * Map logical page into physical page.\n */\nstatic BYTE EMS_map( WORD physical_page, WORD new_hindex, WORD new_logical_page )\n{\n  int   old_hindex;\n  int   old_logical_page;\n  void *physical_address;\n\n  if(physical_page > 3)\n    return 0x8b; /* status: invalid physical page */\n\n  old_hindex = EMS_record->mapping[physical_page].hindex;\n  old_logical_page = EMS_record->mapping[physical_page].logical_page;\n  physical_address = EMS_PAGE_ADDRESS(EMS_record->frame_address, physical_page);\n\n  /* unmap old page */\n  if(old_hindex) {\n    void *ptr = EMS_PAGE_ADDRESS(EMS_record->handle[old_hindex].address,\n                                 old_logical_page);\n    memcpy(ptr, physical_address, EMS_PAGE_SIZE);\n  }\n\n  /* map new page */\n  if(new_hindex && new_logical_page != 0xffff) {\n    void *ptr = EMS_PAGE_ADDRESS(EMS_record->handle[new_hindex].address,\n                                 new_logical_page);\n\n    if(new_hindex >= EMS_MAX_HANDLES || !EMS_record->handle[new_hindex].address)\n      return 0x83; /* status: invalid handle */\n\n    if(new_logical_page >= EMS_record->handle[new_hindex].pages)\n      return 0x8a; /* status: invalid logical page */\n\n    memcpy(physical_address, ptr, EMS_PAGE_SIZE);\n    EMS_record->mapping[physical_page].hindex = new_hindex;\n    EMS_record->mapping[physical_page].logical_page = new_logical_page;\n  } else {\n    EMS_record->mapping[physical_page].hindex = 0;\n    EMS_record->mapping[physical_page].logical_page = 0;\n  }\n\n  return 0; /* status: ok */\n}\n\n/**********************************************************************\n *          EMS_map_multiple\n *\n * Map multiple logical pages into physical pages.\n */\nstatic void EMS_map_multiple( CONTEXT *context )\n{\n  WORD *ptr = PTR_REAL_TO_LIN(context->SegDs, SI_reg(context));\n  BYTE  status = 0;\n  int   i;\n\n  for(i=0; i<CX_reg(context) && !status; i++, ptr += 2)\n    switch(AL_reg(context)) {\n    case 0x00:\n      status = EMS_map( ptr[1],\n                       DX_reg(context), ptr[0] );\n      break;\n    case 0x01:\n      status = EMS_map( (ptr[1] - EMS_record->frame_selector) >> 10,\n                       DX_reg(context), ptr[0] );\n      break;\n    default:\n      status = 0x8f; /* status: undefined subfunction */\n    }\n\n  SET_AH( context, status );\n}\n\n/**********************************************************************\n *          EMS_free\n *\n * Free memory and release handle.\n */\nstatic void EMS_free( CONTEXT *context )\n{\n  int hindex = DX_reg(context);\n  int i;\n\n  if(hindex < 0 || hindex >= EMS_MAX_HANDLES) {\n    SET_AH( context, 0x83 ); /* status: invalid handle */\n    return;\n  }\n\n  if(!EMS_record->handle[hindex].address) {\n    SET_AH( context, 0 ); /* status: ok */\n    return;\n  }\n\n  EMS_record->used_pages -= EMS_record->handle[hindex].pages;\n\n  /* unmap pages */\n  for(i=0; i<4; i++)\n    if(EMS_record->mapping[i].hindex == hindex)\n      EMS_record->mapping[i].hindex = 0;\n\n  /* free block */\n  HeapFree( GetProcessHeap(), 0, EMS_record->handle[hindex].address );\n  EMS_record->handle[hindex].address = 0;\n\n  SET_AH( context, 0 );    /* status: ok */\n}\n\n/**********************************************************************\n *          EMS_save_context\n *\n * Save physical page mappings into handle specific save area.\n */\nstatic void EMS_save_context( CONTEXT *context )\n{\n  WORD h = DX_reg(context);\n  int  i;\n\n  for(i=0; i<4; i++) {\n    EMS_record->mapping_save_area[h][i].hindex = EMS_record->mapping[i].hindex;\n    EMS_record->mapping_save_area[h][i].logical_page = EMS_record->mapping[i].logical_page;\n  }\n\n  SET_AX( context, 0 ); /* status: ok */\n}\n\n\n/**********************************************************************\n *          EMS_restore_context\n *\n * Restore physical page mappings from handle specific save area.\n */\nstatic void EMS_restore_context( CONTEXT *context )\n{\n  WORD handle = DX_reg(context);\n  int  i;\n\n  for(i=0; i<4; i++) {\n    int hindex       = EMS_record->mapping_save_area[handle][i].hindex;\n    int logical_page = EMS_record->mapping_save_area[handle][i].logical_page;\n\n    if(EMS_map( i, hindex, logical_page )) {\n      SET_AX( context, 0x8e ); /* status: restore of mapping context failed */\n      return;\n    }\n  }\n\n  SET_AX( context, 0 ); /* status: ok */\n}\n\n/**********************************************************************\n *          DOSVM_Int67Handler\n *\n * Handler for interrupt 67h EMS routines.\n */\nvoid WINAPI DOSVM_Int67Handler( CONTEXT *context )\n{\n  switch (AH_reg(context)) {\n\n  case 0x40: /* EMS - GET MANAGER STATUS */\n    SET_AH( context, 0 ); /* status: ok */\n    break;\n\n  case 0x41: /* EMS - GET PAGE FRAME SEGMENT */\n    EMS_init();\n    SET_BX( context, EMS_record->frame_selector ); /* segment of page frame */\n    SET_AH( context, 0 );                          /* status: ok */\n    break;\n\n  case 0x42: /* EMS - GET NUMBER OF PAGES */\n    EMS_init();\n    /* unallocated 16k pages */\n    SET_BX( context, EMS_MAX_PAGES - EMS_record->used_pages );\n    /* total number of 16k pages */\n    SET_DX( context, EMS_MAX_PAGES );\n    /* status: ok */\n    SET_AH( context, 0 );\n    break;\n\n  case 0x43: /* EMS - GET HANDLE AND ALLOCATE MEMORY */\n    EMS_init();\n    EMS_alloc(context);\n    break;\n\n  case 0x44: /* EMS - MAP MEMORY */\n    EMS_init();\n    SET_AH( context, EMS_map( AL_reg(context), DX_reg(context), BX_reg(context) ) );\n    break;\n\n  case 0x45: /* EMS - RELEASE HANDLE AND MEMORY */\n    EMS_init();\n    EMS_free(context);\n    break;\n\n  case 0x46: /* EMS - GET EMM VERSION */\n    SET_AL( context, 0x40 ); /* version 4.0 */\n    SET_AH( context, 0 );    /* status: ok */\n    break;\n\n  case 0x47: /* EMS - SAVE MAPPING CONTEXT */\n    EMS_init();\n    EMS_save_context(context);\n    break;\n\n  case 0x48: /* EMS - RESTORE MAPPING CONTEXT */\n    EMS_init();\n    EMS_restore_context(context);\n    break;\n\n  case 0x49: /* EMS - reserved - GET I/O PORT ADDRESSES */\n  case 0x4a: /* EMS - reserved - GET TRANSLATION ARRAY */\n    INT_BARF(context,0x67);\n    break;\n\n  case 0x4b: /* EMS - GET NUMBER OF EMM HANDLES */\n    SET_BX( context, EMS_MAX_HANDLES ); /* EMM handles */\n    SET_AH( context, 0 );               /* status: ok */\n    break;\n\n  case 0x4c: /* EMS - GET PAGES OWNED BY HANDLE */\n  case 0x4d: /* EMS - GET PAGES FOR ALL HANDLES */\n  case 0x4e: /* EMS - GET OR SET PAGE MAP */\n  case 0x4f: /* EMS 4.0 - GET/SET PARTIAL PAGE MAP */\n    INT_BARF(context,0x67);\n    break;\n\n  case 0x50: /* EMS 4.0 - MAP/UNMAP MULTIPLE HANDLE PAGES */\n    EMS_init();\n    EMS_map_multiple(context);\n    break;\n\n  case 0x51: /* EMS 4.0 - REALLOCATE PAGES */\n  case 0x52: /* EMS 4.0 - GET/SET HANDLE ATTRIBUTES */\n    INT_BARF(context,0x67);\n    break;\n\n  case 0x53: /* EMS 4.0 - GET/SET HANDLE NAME */\n    EMS_init();\n    EMS_access_name(context);\n    break;\n\n  case 0x54: /* EMS 4.0 - GET HANDLE DIRECTORY */\n  case 0x55: /* EMS 4.0 - ALTER PAGE MAP AND JUMP */\n  case 0x56: /* EMS 4.0 - ALTER PAGE MAP AND CALL */\n  case 0x57: /* EMS 4.0 - MOVE/EXCHANGE MEMORY REGION */\n  case 0x58: /* EMS 4.0 - GET MAPPABLE PHYSICAL ADDRESS ARRAY */\n    INT_BARF(context,0x67);\n    break;\n\n  case 0x59: /* EMS 4.0 - GET EXPANDED MEMORY HARDWARE INFORMATION */\n    if(AL_reg(context) == 0x01) {\n      EMS_init();\n      /* unallocated raw pages */\n      SET_BX( context, EMS_MAX_PAGES - EMS_record->used_pages );\n      /* total number raw pages */\n      SET_DX( context, EMS_MAX_PAGES );\n      /* status: ok */\n      SET_AH( context, 0 );\n    } else\n      INT_BARF(context,0x67);\n    break;\n\n  case 0x5a: /* EMS 4.0 - ALLOCATE STANDARD/RAW PAGES */\n  case 0x5b: /* EMS 4.0 - ALTERNATE MAP REGISTER SET */\n  case 0x5c: /* EMS 4.0 - PREPARE EXPANDED MEMORY HARDWARE FOR WARM BOOT */\n  case 0x5d: /* EMS 4.0 - ENABLE/DISABLE OS FUNCTION SET FUNCTIONS */\n    INT_BARF(context,0x67);\n    break;\n\n  case 0xde: /* Virtual Control Program Interface (VCPI) */\n    if(AL_reg(context) == 0x00) {\n      /*\n       * VCPI INSTALLATION CHECK\n       * (AH_reg() != 0) means VCPI is not present\n       */\n      TRACE(\"- VCPI installation check\\n\");\n      return;\n    } else\n      INT_BARF(context,0x67);\n    break;\n\n  default:\n    INT_BARF(context,0x67);\n  }\n}\n\n\n/**********************************************************************\n *          EMS_Ioctl_Handler\n *\n * Handler for interrupt 21h IOCTL routine for device \"EMMXXXX0\".\n */\nvoid EMS_Ioctl_Handler( CONTEXT *context )\n{\n  assert(AH_reg(context) == 0x44);\n\n  switch (AL_reg(context)) {\n  case 0x00: /* IOCTL - GET DEVICE INFORMATION */\n      RESET_CFLAG(context); /* operation was successful */\n      SET_DX( context, 0x4080 ); /* bit 14 (support ioctl read) and\n                                 * bit 7 (is_device) */\n      break;\n\n  case 0x02: /* EMS - GET MEMORY MANAGER INFORMATION */\n      /*\n       * This is what is called \"Windows Global EMM Import Specification\".\n       * Undocumented of course! Supports three requests:\n       * GET API ENTRY POINT\n       * GET EMM IMPORT STRUCTURE ADDRESS\n       * GET MEMORY MANAGER VERSION\n       */\n      INT_BARF(context,0x21);\n      break;\n\n  case 0x07: /* IOCTL - GET OUTPUT STATUS */\n      RESET_CFLAG(context); /* operation was successful */\n      SET_AL( context, 0xff ); /* device is ready */\n      break;\n\n  default:\n      INT_BARF(context,0x21);\n      break;\n  }\n}\n"
  },
  {
    "path": "krnl386/interrupts.c",
    "content": "/*\n * Interrupt emulation\n *\n * Copyright 2002 Jukka Heinonen\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <stdio.h>\n\n#include \"wine/winbase16.h\"\n#include \"kernel16_private.h\"\n#include \"dosexe.h\"\n#include \"winternl.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(int);\nWINE_DECLARE_DEBUG_CHANNEL(relay);\n\n#define BCD_TO_BIN(x) ((x&15) + (x>>4)*10)\n#define BIN_TO_BCD(x) ((x%10) + ((x/10)<<4))\n\nstatic void WINAPI DOSVM_Int01Handler(CONTEXT*);\nstatic void WINAPI DOSVM_Int03Handler(CONTEXT*);\nstatic void WINAPI DOSVM_Int06Handler(CONTEXT*);\nstatic void WINAPI DOSVM_Int11Handler(CONTEXT*);\nstatic void WINAPI DOSVM_Int12Handler(CONTEXT*);\nstatic void WINAPI DOSVM_Int17Handler(CONTEXT*);\nstatic void WINAPI DOSVM_Int19Handler(CONTEXT*);\nstatic void WINAPI DOSVM_Int1aHandler(CONTEXT*);\nstatic void WINAPI DOSVM_Int20Handler(CONTEXT*);\nstatic void WINAPI DOSVM_Int29Handler(CONTEXT*);\nstatic void WINAPI DOSVM_Int2aHandler(CONTEXT*);\nstatic void WINAPI DOSVM_Int41Handler(CONTEXT*);\nstatic void WINAPI DOSVM_Int4bHandler(CONTEXT*);\nstatic void WINAPI DOSVM_Int5cHandler(CONTEXT*);\nstatic void WINAPI DOSVM_DefaultHandler(CONTEXT*);\n\nstatic FARPROC16     DOSVM_Vectors16[256];\nstatic FARPROC48     DOSVM_Vectors48[256];\nstatic INTPROC DOSVM_VectorsBuiltin[] =\n{\n  /* 00 */ 0,                  DOSVM_Int01Handler, 0,                  DOSVM_Int03Handler,\n  /* 04 */ 0,                  0,                  DOSVM_Int06Handler, 0,\n  /* 08 */ DOSVM_Int08Handler, DOSVM_Int09Handler, 0,                  0,\n  /* 0C */ 0,                  0,                  0,                  0,\n  /* 10 */ DOSVM_Int10Handler, DOSVM_Int11Handler, DOSVM_Int12Handler, DOSVM_Int13Handler,\n  /* 14 */ 0,                  DOSVM_Int15Handler, DOSVM_Int16Handler, DOSVM_Int17Handler,\n  /* 18 */ 0,                  DOSVM_Int19Handler, DOSVM_Int1aHandler, 0,\n  /* 1C */ 0,                  0,                  0,                  0,\n  /* 20 */ DOSVM_Int20Handler, DOSVM_Int21Handler, 0,                  0,\n  /* 24 */ 0,                  DOSVM_Int25Handler, DOSVM_Int26Handler, 0,\n  /* 28 */ 0,                  DOSVM_Int29Handler, DOSVM_Int2aHandler, 0,\n  /* 2C */ 0,                  0,                  0,                  DOSVM_Int2fHandler,\n  /* 30 */ 0,                  DOSVM_Int31Handler, 0,                  DOSVM_Int33Handler,\n  /* 34 */ DOSVM_Int34Handler, DOSVM_Int35Handler, DOSVM_Int36Handler, DOSVM_Int37Handler,\n  /* 38 */ DOSVM_Int38Handler, DOSVM_Int39Handler, DOSVM_Int3aHandler, DOSVM_Int3bHandler,\n  /* 3C */ DOSVM_Int3cHandler, DOSVM_Int3dHandler, DOSVM_Int3eHandler, 0,\n  /* 40 */ 0,                  DOSVM_Int41Handler, 0,                  0,\n  /* 44 */ 0,                  0,                  0,                  0,\n  /* 48 */ 0,                  0,                  0,                  DOSVM_Int4bHandler,\n  /* 4C */ 0,                  0,                  0,                  0,\n  /* 50 */ 0,                  0,                  0,                  0,\n  /* 54 */ 0,                  0,                  0,                  0,\n  /* 58 */ 0,                  0,                  0,                  0,\n  /* 5C */ DOSVM_Int5cHandler, 0,                  0,                  0,\n  /* 60 */ 0,                  0,                  0,                  0,\n  /* 64 */ 0,                  0,                  0,                  DOSVM_Int67Handler,\n  /* 68 */ DOSVM_DefaultHandler\n};\n\n\n/*\n * Sizes of real mode and protected mode interrupt stubs.\n */\n#define DOSVM_STUB_RM   4\n#define DOSVM_STUB_PM16 5\n#define DOSVM_STUB_PM48 6\n\nINTPROC DOSVM_SetBuiltinVector(BYTE intnum, INTPROC handler)\n{\n    if (intnum < ARRAY_SIZE(DOSVM_VectorsBuiltin)) {\n        INTPROC ret = DOSVM_VectorsBuiltin[intnum];\n        DOSVM_VectorsBuiltin[intnum] = handler;\n        return ret;\n    }\n    WARN(\"failed to set builtin int%x\\n\", intnum );\n    return NULL;\n}\n\n/**********************************************************************\n *         DOSVM_GetRMVector\n *\n * Return pointer to real mode interrupt vector. These are not at fixed \n * location because those Win16 programs that do not use any real mode \n * code have protected NULL pointer catching block at low linear memory \n * and interrupt vectors have been moved to another location.\n */\nstatic FARPROC16* DOSVM_GetRMVector( BYTE intnum )\n{\n    LDT_ENTRY entry;\n    FARPROC16 proc;\n\n    proc = GetProcAddress16( GetModuleHandle16( \"KERNEL\" ), \n                             (LPCSTR)(ULONG_PTR)183 );\n    wine_ldt_get_entry( LOWORD(proc), &entry );\n\n    return (FARPROC16*)wine_ldt_get_base( &entry ) + intnum;\n}\n\n\n/**********************************************************************\n *         DOSVM_IsIRQ\n *\n * Return TRUE if interrupt is an IRQ.\n */\nstatic BOOL DOSVM_IsIRQ( BYTE intnum )\n{\n    if (intnum >= 0x08 && intnum <= 0x0f)\n        return TRUE;\n\n    if (intnum >= 0x70 && intnum <= 0x77)\n        return TRUE;\n\n    return FALSE;\n}\n\n\n/**********************************************************************\n *         DOSVM_DefaultHandler\n *\n * Default interrupt handler. This will be used to emulate all\n * interrupts that don't have their own interrupt handler.\n */\nstatic void WINAPI DOSVM_DefaultHandler( CONTEXT *context )\n{\n}\n\n\n/**********************************************************************\n *         DOSVM_GetBuiltinHandler\n *\n * Return Wine interrupt handler procedure for a given interrupt.\n */\nstatic INTPROC DOSVM_GetBuiltinHandler( BYTE intnum )\n{\n    if (intnum < ARRAY_SIZE(DOSVM_VectorsBuiltin)) {\n        INTPROC proc = DOSVM_VectorsBuiltin[intnum];\n        if (proc)\n            return proc;\n    }\n\n    WARN(\"int%x not implemented, returning dummy handler\\n\", intnum );\n\n    if (DOSVM_IsIRQ(intnum))\n        return DOSVM_AcknowledgeIRQ;\n\n    return DOSVM_DefaultHandler;\n}\n\n\n/**********************************************************************\n *          DOSVM_IntProcRelay\n *\n * Simple DOSRELAY that interprets its argument as INTPROC and calls it.\n */\nstatic void DOSVM_IntProcRelay( CONTEXT *context, LPVOID data )\n{\n    INTPROC proc = (INTPROC)data;\n    proc(context);\n}\n\n\n/**********************************************************************\n *          DOSVM_PrepareIRQ\n *\n */\nstatic void DOSVM_PrepareIRQ( CONTEXT *context, BOOL isbuiltin )\n{\n    /* Disable virtual interrupts. */\n    get_vm86_teb_info()->dpmi_vif = 0;\n\n    if (!isbuiltin)\n    {\n        DWORD *stack = CTX_SEG_OFF_TO_LIN(context, \n                                          context->SegSs,\n                                          context->Esp);\n\n        /* Push return address to stack. */\n        *(--stack) = context->SegCs;\n        *(--stack) = context->Eip;\n        context->Esp += -8;\n\n        /* Jump to enable interrupts stub. */\n        context->SegCs = DOSVM_dpmi_segments->relay_code_sel;\n        context->Eip   = 5;\n    }\n}\n\n\n/**********************************************************************\n *          DOSVM_PushFlags\n *\n * This routine is used to make default int25 and int26 handlers leave the \n * original eflags into stack. In order to do this, stack is manipulated\n * so that it actually contains two copies of eflags, one of which is\n * popped during return from interrupt handler.\n */\nstatic void DOSVM_PushFlags( CONTEXT *context, BOOL islong, BOOL isstub )\n{\n    if (islong)\n    {\n        DWORD *stack = CTX_SEG_OFF_TO_LIN(context, \n                                          context->SegSs, \n                                          context->Esp);\n        context->Esp += -4; /* One item will be added to stack. */\n\n        if (isstub)\n        {\n            DWORD ip = stack[0];\n            DWORD cs = stack[1];\n            stack += 2; /* Pop ip and cs. */\n            *(--stack) = context->EFlags;\n            *(--stack) = cs;\n            *(--stack) = ip;\n        }\n        else\n            *(--stack) = context->EFlags;            \n    }\n    else\n    {\n        WORD *stack = CTX_SEG_OFF_TO_LIN(context, \n                                         context->SegSs, \n                                         context->Esp);\n        ADD_LOWORD( context->Esp, -2 ); /* One item will be added to stack. */\n\n        if (isstub)\n        {\n            WORD ip = stack[0];\n            WORD cs = stack[1];\n            stack += 2; /* Pop ip and cs. */\n            *(--stack) = LOWORD(context->EFlags);\n            *(--stack) = cs;\n            *(--stack) = ip;\n        }\n        else\n            *(--stack) = LOWORD(context->EFlags);\n    }\n}\n\n\n/**********************************************************************\n *         DOSVM_EmulateInterruptPM\n *\n * Emulate software interrupt in 16-bit or 32-bit protected mode.\n * Called from signal handler when intXX opcode is executed. \n *\n * Pushes interrupt frame to stack and changes instruction \n * pointer to interrupt handler.\n */\nBOOL DOSVM_EmulateInterruptPM( CONTEXT *context, BYTE intnum )\n{\n    TRACE_(relay)(\"Call DOS int 0x%02x ret=%04x:%08x\\n\"\n                  \"  eax=%08x ebx=%08x ecx=%08x edx=%08x\\n\"\n                  \"  esi=%08x edi=%08x ebp=%08x esp=%08x\\n\"\n                  \"  ds=%04x es=%04x fs=%04x gs=%04x ss=%04x flags=%08x\\n\",\n                  intnum, context->SegCs, context->Eip,\n                  context->Eax, context->Ebx, context->Ecx, context->Edx,\n                  context->Esi, context->Edi, context->Ebp, context->Esp,\n                  context->SegDs, context->SegEs, context->SegFs, context->SegGs,\n                  context->SegSs, context->EFlags );\n\n    DOSMEM_InitDosMemory();\n\n    if (context->SegCs == DOSVM_dpmi_segments->dpmi_sel)\n    {\n        DOSVM_BuildCallFrame( context, \n                              DOSVM_IntProcRelay,\n                              DOSVM_RawModeSwitchHandler );\n    }\n    else if (context->SegCs == DOSVM_dpmi_segments->relay_code_sel)\n    {\n        /*\n         * This must not be called using DOSVM_BuildCallFrame.\n         */\n        DOSVM_RelayHandler( context );\n    }\n    else if (context->SegCs == DOSVM_dpmi_segments->int48_sel)\n    {\n        /* Restore original flags stored into the stack by the caller. */\n        DWORD *stack = CTX_SEG_OFF_TO_LIN(context, \n                                          context->SegSs, context->Esp);\n        context->EFlags = stack[2];\n\n        if (intnum != context->Eip / DOSVM_STUB_PM48)\n            WARN( \"interrupt stub has been modified \"\n                  \"(interrupt is %02x, interrupt stub is %02x)\\n\",\n                  intnum, context->Eip/DOSVM_STUB_PM48 );\n\n        TRACE( \"builtin interrupt %02x has been branched to\\n\", intnum );\n\n        if (intnum == 0x25 || intnum == 0x26)\n            DOSVM_PushFlags( context, TRUE, TRUE );\n\n        DOSVM_BuildCallFrame( context, \n                              DOSVM_IntProcRelay,\n                              DOSVM_GetBuiltinHandler(intnum) );\n    }\n    else if (context->SegCs == DOSVM_dpmi_segments->int16_sel)\n    {\n        /* Restore original flags stored into the stack by the caller. */\n        WORD *stack = CTX_SEG_OFF_TO_LIN(context, \n                                         context->SegSs, context->Esp);\n        context->EFlags = (DWORD)MAKELONG( stack[2], HIWORD(context->EFlags) );\n\n        if (intnum != context->Eip / DOSVM_STUB_PM16)\n            WARN( \"interrupt stub has been modified \"\n                  \"(interrupt is %02x, interrupt stub is %02x)\\n\",\n                  intnum, context->Eip/DOSVM_STUB_PM16 );\n\n        TRACE( \"builtin interrupt %02x has been branched to\\n\", intnum );\n\n        if (intnum == 0x25 || intnum == 0x26)\n            DOSVM_PushFlags( context, FALSE, TRUE );\n\n        DOSVM_BuildCallFrame( context, \n                              DOSVM_IntProcRelay, \n                              DOSVM_GetBuiltinHandler(intnum) );\n    }\n    else if (wine_ldt_is_system(context->SegCs))\n    {\n        INTPROC proc;\n        if (intnum >= ARRAY_SIZE(DOSVM_VectorsBuiltin)) return FALSE;\n        if (!(proc = DOSVM_VectorsBuiltin[intnum])) return FALSE;\n        proc( context );\n    }\n    else\n    {\n        DOSVM_HardwareInterruptPM( context, intnum );\n    }\n    return TRUE;\n}\n\n\n/**********************************************************************\n *         DOSVM_HardwareInterruptPM\n *\n * Emulate call to interrupt handler in 16-bit or 32-bit protected mode.\n *\n * Pushes interrupt frame to stack and changes instruction \n * pointer to interrupt handler.\n */\nvoid DOSVM_HardwareInterruptPM( CONTEXT *context, BYTE intnum )\n{\n    if(DOSVM_IsDos32())\n    {\n        FARPROC48 addr = DOSVM_GetPMHandler48( intnum );\n        \n        if (addr.selector == DOSVM_dpmi_segments->int48_sel)\n        {\n            TRACE( \"builtin interrupt %02x has been invoked \"\n                   \"(through vector %02x)\\n\",\n                   addr.offset / DOSVM_STUB_PM48, intnum );\n\n            if (intnum == 0x25 || intnum == 0x26)\n                DOSVM_PushFlags( context, TRUE, FALSE );\n            else if (DOSVM_IsIRQ(intnum))\n                DOSVM_PrepareIRQ( context, TRUE );\n\n            DOSVM_BuildCallFrame( context,\n                                  DOSVM_IntProcRelay,\n                                  DOSVM_GetBuiltinHandler(\n                                      addr.offset/DOSVM_STUB_PM48 ) );\n        }\n        else\n        {\n            DWORD *stack;\n            \n            TRACE( \"invoking hooked interrupt %02x at %04x:%08x\\n\",\n                   intnum, addr.selector, addr.offset );\n            \n            if (DOSVM_IsIRQ(intnum))\n                DOSVM_PrepareIRQ( context, FALSE );\n\n            /* Push the flags and return address on the stack */\n            stack = CTX_SEG_OFF_TO_LIN(context, context->SegSs, context->Esp);\n            *(--stack) = context->EFlags;\n            *(--stack) = context->SegCs;\n            *(--stack) = context->Eip;\n            context->Esp += -12;\n\n            /* Jump to the interrupt handler */\n            context->SegCs  = addr.selector;\n            context->Eip = addr.offset;\n        }\n    }\n    else\n    {\n        FARPROC16 addr = DOSVM_GetPMHandler16( intnum );\n\n        if (SELECTOROF(addr) == DOSVM_dpmi_segments->int16_sel)\n        {\n            TRACE( \"builtin interrupt %02x has been invoked \"\n                   \"(through vector %02x)\\n\", \n                   OFFSETOF(addr)/DOSVM_STUB_PM16, intnum );\n\n            if (intnum == 0x25 || intnum == 0x26)\n                DOSVM_PushFlags( context, FALSE, FALSE );\n            else if (DOSVM_IsIRQ(intnum))\n                DOSVM_PrepareIRQ( context, TRUE );\n\n            DOSVM_BuildCallFrame( context, \n                                  DOSVM_IntProcRelay,\n                                  DOSVM_GetBuiltinHandler(\n                                      OFFSETOF(addr)/DOSVM_STUB_PM16 ) );\n        }\n        else\n        {\n            TRACE( \"invoking hooked interrupt %02x at %04x:%04x\\n\", \n                   intnum, SELECTOROF(addr), OFFSETOF(addr) );\n\n            if (DOSVM_IsIRQ(intnum))\n                DOSVM_PrepareIRQ( context, FALSE );\n\n            /* Push the flags and return address on the stack */\n            PUSH_WORD16( context, LOWORD(context->EFlags) );\n            PUSH_WORD16( context, context->SegCs );\n            PUSH_WORD16( context, LOWORD(context->Eip) );\n\n            /* Jump to the interrupt handler */\n            context->SegCs =  HIWORD(addr);\n            context->Eip = LOWORD(addr);\n        }\n    }\n}\n\n\n/**********************************************************************\n *         DOSVM_EmulateInterruptRM\n *\n * Emulate software interrupt in real mode.\n * Called from VM86 emulation when intXX opcode is executed. \n *\n * Either calls directly builtin handler or pushes interrupt frame to \n * stack and changes instruction pointer to interrupt handler.\n *\n * Returns FALSE if this interrupt was caused by return \n * from real mode wrapper.\n */\nBOOL DOSVM_EmulateInterruptRM( CONTEXT *context, BYTE intnum )\n{\n    TRACE_(relay)(\"Call DOS int 0x%02x ret=%04x:%08x\\n\"\n                  \"  eax=%08x ebx=%08x ecx=%08x edx=%08x\\n\"\n                  \"  esi=%08x edi=%08x ebp=%08x esp=%08x\\n\"\n                  \"  ds=%04x es=%04x fs=%04x gs=%04x ss=%04x flags=%08x\\n\",\n                  intnum, context->SegCs, context->Eip,\n                  context->Eax, context->Ebx, context->Ecx, context->Edx,\n                  context->Esi, context->Edi, context->Ebp, context->Esp,\n                  context->SegDs, context->SegEs, context->SegFs, context->SegGs,\n                  context->SegSs, context->EFlags );\n\n    /* check for our real-mode hooks */\n    if (intnum == 0x31)\n    {\n        /* is this exit from real-mode wrapper */\n        if (context->SegCs == DOSVM_dpmi_segments->wrap_seg)\n            return FALSE;\n\n        if (DOSVM_CheckWrappers( context ))\n            return TRUE;\n    }\n\n    /* check if the call is from our fake BIOS interrupt stubs */\n    if (context->SegCs==0xf000)\n    {\n        /* Restore original flags stored into the stack by the caller. */\n        WORD *stack = CTX_SEG_OFF_TO_LIN(context, \n                                         context->SegSs, context->Esp);\n        context->EFlags = (DWORD)MAKELONG( stack[2], HIWORD(context->EFlags) );\n\n        if (intnum != context->Eip / DOSVM_STUB_RM)\n            WARN( \"interrupt stub has been modified \"\n                  \"(interrupt is %02x, interrupt stub is %02x)\\n\",\n                  intnum, context->Eip/DOSVM_STUB_RM );\n\n        TRACE( \"builtin interrupt %02x has been branched to\\n\", intnum );\n        \n        DOSVM_CallBuiltinHandler( context, intnum );\n\n        /* Real mode stubs use IRET so we must put flags back into stack. */\n        stack[2] = LOWORD(context->EFlags);\n    }\n    else\n    {\n        DOSVM_HardwareInterruptRM( context, intnum );\n    }\n\n    return TRUE;\n}\n\n\n/**********************************************************************\n *         DOSVM_HardwareInterruptRM\n *\n * Emulate call to interrupt handler in real mode.\n *\n * Either calls directly builtin handler or pushes interrupt frame to \n * stack and changes instruction pointer to interrupt handler.\n */\nvoid DOSVM_HardwareInterruptRM( CONTEXT *context, BYTE intnum )\n{\n     FARPROC16 handler = DOSVM_GetRMHandler( intnum );\n\n     /* check if the call goes to an unhooked interrupt */\n     if (SELECTOROF(handler) == 0xf000) \n     {\n         /* if so, call it directly */\n         TRACE( \"builtin interrupt %02x has been invoked \"\n                \"(through vector %02x)\\n\", \n                OFFSETOF(handler)/DOSVM_STUB_RM, intnum );\n         DOSVM_CallBuiltinHandler( context, OFFSETOF(handler)/DOSVM_STUB_RM );\n     }\n     else \n     {\n         /* the interrupt is hooked, simulate interrupt in DOS space */ \n         WORD  flag  = LOWORD( context->EFlags );\n\n         TRACE( \"invoking hooked interrupt %02x at %04x:%04x\\n\", \n                intnum, SELECTOROF(handler), OFFSETOF(handler) );\n\n         /* Copy virtual interrupt flag to pushed interrupt flag. */\n         if (context->EFlags & VIF_MASK)\n             flag |= IF_MASK;\n         else \n             flag &= ~IF_MASK;\n\n         PUSH_WORD16( context, flag );\n         PUSH_WORD16( context, context->SegCs );\n         PUSH_WORD16( context, LOWORD( context->Eip ));\n         \n         context->SegCs = SELECTOROF( handler );\n         context->Eip   = OFFSETOF( handler );\n\n         /* Clear virtual interrupt flag and trap flag. */\n         context->EFlags &= ~(VIF_MASK | TF_MASK);\n     }\n}\n\n\n/**********************************************************************\n *          DOSVM_GetRMHandler\n *\n * Return the real mode interrupt vector for a given interrupt.\n */\nFARPROC16 DOSVM_GetRMHandler( BYTE intnum )\n{\n  return *DOSVM_GetRMVector( intnum );\n}\n\n\n/**********************************************************************\n *          DOSVM_SetRMHandler\n *\n * Set the real mode interrupt handler for a given interrupt.\n */\nvoid DOSVM_SetRMHandler( BYTE intnum, FARPROC16 handler )\n{\n  TRACE(\"Set real mode interrupt vector %02x <- %04x:%04x\\n\",\n       intnum, HIWORD(handler), LOWORD(handler) );\n  *DOSVM_GetRMVector( intnum ) = handler;\n}\n\n\n/**********************************************************************\n *          DOSVM_GetPMHandler16\n *\n * Return the protected mode interrupt vector for a given interrupt.\n */\nFARPROC16 DOSVM_GetPMHandler16( BYTE intnum )\n{\n    TDB *pTask;\n    FARPROC16 proc = 0;\n\n    pTask = GlobalLock16(GetCurrentTask());\n    if (pTask)\n    {\n        switch( intnum )\n        {\n        case 0x00:\n            proc = pTask->int0;\n            break;\n        case 0x02:\n            proc = pTask->int2;\n            break;\n        case 0x04:\n            proc = pTask->int4;\n            break;\n        case 0x06:\n            proc = pTask->int6;\n            break;\n        case 0x07:\n            proc = pTask->int7;\n            break;\n        case 0x3e:\n            proc = pTask->int3e;\n            break;\n        case 0x75:\n            proc = pTask->int75;\n            break;\n        }\n        if( proc )\n            return proc;\n    }\n    if (!DOSVM_Vectors16[intnum])\n    {\n\t\tif (!DOSVM_dpmi_segments) return NULL;\n        proc = (FARPROC16)MAKESEGPTR( DOSVM_dpmi_segments->int16_sel,\n                                                DOSVM_STUB_PM16 * intnum );\n        DOSVM_Vectors16[intnum] = proc;\n    }\n    return DOSVM_Vectors16[intnum];\n}\n\n\n/**********************************************************************\n *          DOSVM_SetPMHandler16\n *\n * Set the protected mode interrupt handler for a given interrupt.\n */\nvoid DOSVM_SetPMHandler16( BYTE intnum, FARPROC16 handler )\n{\n  TDB *pTask;\n\n  TRACE(\"Set protected mode interrupt vector %02x <- %04x:%04x\\n\",\n       intnum, HIWORD(handler), LOWORD(handler) );\n\n  pTask = GlobalLock16(GetCurrentTask());\n  if (!pTask)\n    return;\n  switch( intnum )\n  {\n  case 0x00:\n    pTask->int0 = handler;\n    break;\n  case 0x02:\n    pTask->int2 = handler;\n    break;\n  case 0x04:\n    pTask->int4 = handler;\n    break;\n  case 0x06:\n    pTask->int6 = handler;\n    break;\n  case 0x07:\n    pTask->int7 = handler;\n    break;\n  case 0x3e:\n    pTask->int3e = handler;\n    break;\n  case 0x75:\n    pTask->int75 = handler;\n    break;\n  default:\n    DOSVM_Vectors16[intnum] = handler;\n    break;\n  }\n}\n\n\n/**********************************************************************\n *         DOSVM_GetPMHandler48\n *\n * Return the protected mode interrupt vector for a given interrupt.\n * Used to get 48-bit pointer for 32-bit interrupt handlers in DPMI32.\n */\nFARPROC48 DOSVM_GetPMHandler48( BYTE intnum )\n{\n  if (!DOSVM_Vectors48[intnum].selector)\n  {\n    DOSVM_Vectors48[intnum].selector = DOSVM_dpmi_segments->int48_sel;\n    DOSVM_Vectors48[intnum].offset = DOSVM_STUB_PM48 * intnum;\n  }\n  return DOSVM_Vectors48[intnum];\n}\n\n\n/**********************************************************************\n *         DOSVM_SetPMHandler48\n *\n * Set the protected mode interrupt handler for a given interrupt.\n * Used to set 48-bit pointer for 32-bit interrupt handlers in DPMI32.\n */\nvoid DOSVM_SetPMHandler48( BYTE intnum, FARPROC48 handler )\n{\n  TRACE(\"Set 32-bit protected mode interrupt vector %02x <- %04x:%08x\\n\",\n       intnum, handler.selector, handler.offset );\n  DOSVM_Vectors48[intnum] = handler;\n}\n\n\n/**********************************************************************\n *         DOSVM_CallBuiltinHandler\n *\n * Execute Wine interrupt handler procedure.\n */\nvoid DOSVM_CallBuiltinHandler( CONTEXT *context, BYTE intnum )\n{\n    /*\n     * FIXME: Make all builtin interrupt calls go via this routine.\n     * FIXME: Check for PM->RM interrupt reflection.\n     * FIXME: Check for RM->PM interrupt reflection.\n     */\n\n  INTPROC proc = DOSVM_GetBuiltinHandler( intnum );\n  proc( context );\n}\n\n\n/**********************************************************************\n *         __wine_call_int_handler    (KERNEL.@)\n */\nvoid __wine_call_int_handler( CONTEXT *context, BYTE intnum )\n{\n    DOSMEM_InitDosMemory();\n    DOSVM_CallBuiltinHandler( context, intnum );\n}\n\n\n/**********************************************************************\n *\t    DOSVM_Int11Handler\n *\n * Handler for int 11h (get equipment list).\n *\n *\n * Borrowed from Ralph Brown's interrupt lists:\n *\n *   bits 15-14: number of parallel devices\n *   bit     13: [Conv] Internal modem\n *   bit     12: reserved\n *   bits 11- 9: number of serial devices\n *   bit      8: reserved\n *   bits  7- 6: number of diskette drives minus one\n *   bits  5- 4: Initial video mode:\n *                 00b = EGA,VGA,PGA\n *                 01b = 40 x 25 color\n *                 10b = 80 x 25 color\n *                 11b = 80 x 25 mono\n *   bit      3: reserved\n *   bit      2: [PS] =1 if pointing device\n *               [non-PS] reserved\n *   bit      1: =1 if math co-processor\n *   bit      0: =1 if diskette available for boot\n *\n *\n * Currently the only of these bits correctly set are:\n *\n *   bits 15-14   } Added by William Owen Smith,\n *   bits 11-9    } wos@dcs.warwick.ac.uk\n *   bits 7-6\n *   bit  2       (always set)  ( bit 2 = 4 )\n *   bit  1       } Robert 'Admiral' Coeyman\n *                  All *nix systems either have a math processor or\n *\t\t     emulate one.\n */\nstatic void WINAPI DOSVM_Int11Handler( CONTEXT *context )\n{\n    int diskdrives = 0;\n    int parallelports = 0;\n    int serialports = 0;\n    int x;\n\n    if (GetDriveTypeA(\"A:\\\\\") == DRIVE_REMOVABLE) diskdrives++;\n    if (GetDriveTypeA(\"B:\\\\\") == DRIVE_REMOVABLE) diskdrives++;\n    if (diskdrives) diskdrives--;\n\n    for (x=0; x < 9; x++)\n    {\n        HANDLE handle;\n        char file[10];\n\n        /* serial port name */\n        sprintf( file, \"\\\\\\\\.\\\\COM%d\", x+1 );\n        handle = CreateFileA( file, 0, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0 );\n        if (handle != INVALID_HANDLE_VALUE)\n        {\n            CloseHandle( handle );\n            serialports++;\n        }\n\n        sprintf( file, \"\\\\\\\\.\\\\LPT%d\", x+1 );\n        handle = CreateFileA( file, 0, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0 );\n        if (handle != INVALID_HANDLE_VALUE)\n        {\n            CloseHandle( handle );\n            parallelports++;\n        }\n    }\n\n    if (serialports > 7) /* 3 bits -- maximum value = 7 */\n        serialports = 7;\n\n    if (parallelports > 3) /* 2 bits -- maximum value = 3 */\n        parallelports = 3;\n\n    SET_AX( context,\n            (diskdrives << 6) | (serialports << 9) | (parallelports << 14) | 0x06 );\n}\n\n\n/**********************************************************************\n *         DOSVM_Int12Handler\n *\n * Handler for int 12h (get memory size).\n */\nstatic void WINAPI DOSVM_Int12Handler( CONTEXT *context )\n{\n    SET_AX( context, 640 );\n}\n\n\n/**********************************************************************\n *          DOSVM_Int17Handler\n *\n * Handler for int 17h (printer - output character).\n */\nstatic void WINAPI DOSVM_Int17Handler( CONTEXT *context )\n{\n    switch( AH_reg(context) )\n    {\n       case 0x00:/* Send character*/\n            FIXME(\"Send character not supported yet\\n\");\n            SET_AH( context, 0x00 );/*Timeout*/\n            break;\n        case 0x01:              /* PRINTER - INITIALIZE */\n            FIXME(\"Initialize Printer - Not Supported\\n\");\n            SET_AH( context, 0x30 ); /* selected | out of paper */\n            break;\n        case 0x02:              /* PRINTER - GET STATUS */\n            FIXME(\"Get Printer Status - Not Supported\\n\");\n            break;\n        default:\n            SET_AH( context, 0 ); /* time out */\n            INT_BARF( context, 0x17 );\n    }\n}\n\n\n/**********************************************************************\n *          DOSVM_Int19Handler\n *\n * Handler for int 19h (Reboot).\n */\nstatic void WINAPI DOSVM_Int19Handler( CONTEXT *context )\n{\n    TRACE( \"Attempted Reboot\\n\" );\n    ExitProcess(0);\n}\n\n\n/**********************************************************************\n *         DOSVM_Int1aHandler\n *\n * Handler for int 1ah.\n */\nstatic void WINAPI DOSVM_Int1aHandler( CONTEXT *context )\n{\n    switch(AH_reg(context))\n    {\n    case 0x00: /* GET SYSTEM TIME */\n        {\n            DOSVM_start_bios_timer();\n            BIOSDATA *data = DOSVM_BiosData();\n            SET_CX( context, HIWORD(data->Ticks) );\n            SET_DX( context, LOWORD(data->Ticks) );\n            SET_AL( context, 0 ); /* FIXME: midnight flag is unsupported */\n            TRACE( \"GET SYSTEM TIME - ticks=%d\\n\", data->Ticks );\n        }\n        break;\n\n    case 0x01: /* SET SYSTEM TIME */\n        FIXME( \"SET SYSTEM TIME - not allowed\\n\" );\n        break;\n\n    case 0x02: /* GET REAL-TIME CLOCK TIME */\n        TRACE( \"GET REAL-TIME CLOCK TIME\\n\" );\n        {\n            SYSTEMTIME systime;\n            GetLocalTime( &systime );\n            SET_CH( context, BIN_TO_BCD(systime.wHour) );\n            SET_CL( context, BIN_TO_BCD(systime.wMinute) );\n            SET_DH( context, BIN_TO_BCD(systime.wSecond) );\n            SET_DL( context, 0 ); /* FIXME: assume no daylight saving */\n            RESET_CFLAG(context);\n        }\n        break;\n\n    case 0x03: /* SET REAL-TIME CLOCK TIME */\n        FIXME( \"SET REAL-TIME CLOCK TIME - not allowed\\n\" );\n        break;\n\n    case 0x04: /* GET REAL-TIME CLOCK DATE */\n        TRACE( \"GET REAL-TIME CLOCK DATE\\n\" );\n        {\n            SYSTEMTIME systime;\n            GetLocalTime( &systime );\n            SET_CH( context, BIN_TO_BCD(systime.wYear / 100) );\n            SET_CL( context, BIN_TO_BCD(systime.wYear % 100) );\n            SET_DH( context, BIN_TO_BCD(systime.wMonth) );\n            SET_DL( context, BIN_TO_BCD(systime.wDay) );\n            RESET_CFLAG(context);\n        }\n        break;\n\n    case 0x05: /* SET REAL-TIME CLOCK DATE */\n        FIXME( \"SET REAL-TIME CLOCK DATE - not allowed\\n\" );\n        break;\n\n    case 0x06: /* SET ALARM */\n        FIXME( \"SET ALARM - unimplemented\\n\" );\n        break;\n\n    case 0x07: /* CANCEL ALARM */\n        FIXME( \"CANCEL ALARM - unimplemented\\n\" );\n        break;\n\n    case 0x08: /* SET RTC ACTIVATED POWER ON MODE */\n    case 0x09: /* READ RTC ALARM TIME AND STATUS */\n    case 0x0a: /* READ SYSTEM-TIMER DAY COUNTER */\n    case 0x0b: /* SET SYSTEM-TIMER DAY COUNTER */\n    case 0x0c: /* SET RTC DATE/TIME ACTIVATED POWER-ON MODE */\n    case 0x0d: /* RESET RTC DATE/TIME ACTIVATED POWER-ON MODE */\n    case 0x0e: /* GET RTC DATE/TIME ALARM AND STATUS */\n    case 0x0f: /* INITIALIZE REAL-TIME CLOCK */\n        INT_BARF( context, 0x1a );\n        break;\n\n    case 0xb0:\n        if (CX_reg(context) == 0x4d52 &&\n            DX_reg(context) == 0x4349 &&\n            AL_reg(context) == 0x01)\n        {\n            /*\n             * Microsoft Real-Time Compression Interface (MRCI).\n             * Ignoring this call indicates MRCI is not supported.\n             */\n            TRACE( \"Microsoft Real-Time Compression Interface - not supported\\n\" );\n        }\n        else\n        {\n            INT_BARF(context, 0x1a);\n        }\n        break;\n\n    default:\n        INT_BARF( context, 0x1a );\n    }\n}\n\n\n/**********************************************************************\n *\t    DOSVM_Int20Handler\n *\n * Handler for int 20h.\n */\nstatic void WINAPI DOSVM_Int20Handler( CONTEXT *context )\n{\n    if (DOSVM_IsWin16())\n        DOSVM_Exit( 0 );\n    else if(ISV86(context))\n        MZ_Exit( context, TRUE, 0 );\n    else\n        ERR( \"Called from DOS protected mode\\n\" );\n}\n\n\n/**********************************************************************\n *\t    DOSVM_Int29Handler\n *\n * Handler for int 29h (fast console output)\n */\nstatic void WINAPI DOSVM_Int29Handler( CONTEXT *context )\n{\n   /* Yes, it seems that this is really all this interrupt does. */\n   DOSVM_PutChar(AL_reg(context));\n}\n\n\n/**********************************************************************\n *         DOSVM_Int2aHandler\n *\n * Handler for int 2ah (network).\n */\nstatic void WINAPI DOSVM_Int2aHandler( CONTEXT *context )\n{\n    switch(AH_reg(context))\n    {\n    case 0x00:                             /* NETWORK INSTALLATION CHECK */\n        break;\n\n    default:\n       INT_BARF( context, 0x2a );\n    }\n}\n\n\n/***********************************************************************\n *           DOSVM_Int41Handler\n */\nstatic void WINAPI DOSVM_Int41Handler( CONTEXT *context )\n{\n    if ( ISV86(context) )\n    {\n        /* Real-mode debugger services */\n        switch ( AX_reg(context) )\n        {\n        default:\n            INT_BARF( context, 0x41 );\n            break;\n        }\n    }\n    else\n    {\n        /* Protected-mode debugger services */\n        switch ( AX_reg(context) )\n        {\n        case 0x4f:\n        case 0x50:\n        case 0x150:\n        case 0x51:\n        case 0x52:\n        case 0x152:\n        case 0x59:\n        case 0x5a:\n        case 0x5b:\n        case 0x5c:\n        case 0x5d:\n            /* Notifies the debugger of a lot of stuff. We simply ignore it\n               for now, but some of the info might actually be useful ... */\n            break;\n\n        default:\n            INT_BARF( context, 0x41 );\n            break;\n        }\n    }\n}\n\n\n/***********************************************************************\n *           DOSVM_Int4bHandler\n *\n */\nstatic void WINAPI DOSVM_Int4bHandler( CONTEXT *context )\n{\n    switch(AH_reg(context))\n    {\n    case 0x81: /* Virtual DMA Spec (IBM SCSI interface) */\n        if(AL_reg(context) != 0x02) /* if not install check */\n        {\n            SET_CFLAG(context);\n            SET_AL( context, 0x0f ); /* function is not implemented */\n        }\n        break;\n    default:\n        INT_BARF(context, 0x4b);\n    }\n}\n\n\n/***********************************************************************\n *           DOSVM_Int5cHandler\n *\n * Called from NetBIOSCall16.\n */\nstatic void WINAPI DOSVM_Int5cHandler( CONTEXT *context )\n{\n    BYTE* ptr;\n    ptr = MapSL( MAKESEGPTR(context->SegEs,BX_reg(context)) );\n    if (!ptr)\n        ERR(\"Invalid context\\n\");\n    else\n    {\n        FIXME(\"(%p): command code %02x (ignored)\\n\",context, *ptr);\n        *(ptr+0x01) = 0xFB; /* NetBIOS emulator not found */\n    }\n    SET_AL( context, 0xFB );\n}\nstatic void WINAPI DOSVM_Int01Handler(CONTEXT *context)\n{\n    HMODULE toolhelp = GetModuleHandleA(\"toolhelp.dll16\");\n    WORD flags;\n    flags = context->EFlags;\n    context->EFlags = flags & ~0x100; /* TF */\n    SEGPTR stack = MAKESEGPTR(context->SegSs, context->Esp);\n    if (!toolhelp)\n    {\n        ERR(\"INT01\\n\");\n        return;\n    }\n    FARPROC16 intcb = ((FARPROC16(WINAPI *)(SEGPTR *, SEGPTR, WORD, WORD, WORD))GetProcAddress(toolhelp, \"get_intcb\"))(&stack, MAKESEGPTR(context->SegCs, context->Eip), flags, 1, context->Eax);\n    if (intcb)\n    {\n        context->SegSs = SELECTOROF(stack);\n        context->Esp = OFFSETOF(stack);\n        context->SegCs = SELECTOROF(intcb);\n        context->Eip = OFFSETOF(intcb);\n    }\n}\n\nstatic void WINAPI DOSVM_Int03Handler(CONTEXT *context)\n{\n    HMODULE toolhelp = GetModuleHandleA(\"toolhelp.dll16\");\n    if (!toolhelp)\n        return;\n    SEGPTR stack = MAKESEGPTR(context->SegSs, context->Esp);\n    FARPROC16 intcb = ((FARPROC16(WINAPI *)(SEGPTR *, SEGPTR, WORD, WORD, WORD))GetProcAddress(toolhelp, \"get_intcb\"))(&stack, MAKESEGPTR(context->SegCs, context->Eip), context->EFlags, 3, context->Eax);\n    if (intcb)\n    {\n        context->SegSs = SELECTOROF(stack);\n        context->Esp = OFFSETOF(stack);\n        context->SegCs = SELECTOROF(intcb);\n        context->Eip = OFFSETOF(intcb);\n    }\n}\n\nvoid vdd_req(char func, CONTEXT *context);\n\n/* NTVDM BOP stub */\nstatic void WINAPI DOSVM_Int06Handler(CONTEXT *context)\n{\n    LPBYTE insn = (LPBYTE)CTX_SEG_OFF_TO_LIN(context, context->SegCs, context->Eip);\n    if (insn[0] == 0xc4 && insn[1] == 0xc4 && insn[2] == 0x58)\n        vdd_req(insn[3], context);\n}\n"
  },
  {
    "path": "krnl386/ioports.c",
    "content": "/*\n * Emulation of processor ioports.\n *\n * Copyright 1995 Morten Welinder\n * Copyright 1998 Andreas Mohr, Ove Kaaven\n * Copyright 2001 Uwe Bonnes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n/* Known problems:\n   - only a few ports are emulated.\n   - real-time clock in \"cmos\" is bogus.  A nifty alarm() setup could\n     fix that, I guess.\n*/\n\n#include \"config.h\"\n\n#include <stdarg.h>\n#include <stdlib.h>\n#include <sys/types.h>\n#ifdef HAVE_SYS_STAT_H\n# include <sys/stat.h>\n#endif\n\n#ifdef HAVE_PPDEV\n#include <fcntl.h>\n#include <errno.h>\n#ifdef HAVE_SYS_IOCTL_H\n# include <sys/ioctl.h>\n#endif\n#ifdef HAVE_LINUX_IOCTL_H\n# include <linux/ioctl.h>\n#endif\n#include <linux/ppdev.h>\n#endif\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winnls.h\"\n#include \"winreg.h\"\n#include \"winternl.h\"\n#include \"kernel16_private.h\"\n#include \"dosexe.h\"\n#include \"vga.h\"\n#include \"wine/unicode.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(int);\n\n#if defined(linux) && !defined(__ANDROID__)\n# define DIRECT_IO_ACCESS\n#else\n# undef DIRECT_IO_ACCESS\n#endif\n\nOUTPROC outcb[1024] = {0};\nINPROC incb[1024] = {0};\n\nstatic struct {\n    WORD\tcountmax;\n    WORD\tlatch;\n    BYTE\tctrlbyte_ch;\n    BYTE\tflags;\n    LONG64\tstart_time;\n} tmr_8253[3] = {\n    {0xFFFF,\t0,\t0x36,\t0,\t0},\n    {0x0012,\t0,\t0x74,\t0,\t0},\n    {0x0001,\t0,\t0xB6,\t0,\t0},\n};\n/* two byte read in progress */\n#define TMR_RTOGGLE 0x01\n/* two byte write in progress */\n#define TMR_WTOGGLE 0x02\n/* latch contains data */\n#define TMR_LATCHED 0x04\n/* counter is in update phase */\n#define TMR_UPDATE  0x08\n/* readback status request */\n#define TMR_STATUS  0x10\n\n\nstatic BYTE parport_8255[4] = {0x4f, 0x20, 0xff, 0xff};\n\nstatic BYTE cmosaddress;\n\nstatic BOOL cmos_image_initialized = FALSE;\n\nstatic BYTE cmosimage[64] =\n{\n  0x27, /* 0x00: seconds */\n  0x34, /* 0X01: seconds alarm */\n  0x31, /* 0x02: minutes */\n  0x47, /* 0x03: minutes alarm */\n  0x16, /* 0x04: hour */\n  0x15, /* 0x05: hour alarm */\n  0x00, /* 0x06: week day */\n  0x01, /* 0x07: month day */\n  0x04, /* 0x08: month */\n  0x94, /* 0x09: year */\n  0x26, /* 0x0a: state A */\n  0x02, /* 0x0b: state B */\n  0x50, /* 0x0c: state C */\n  0x80, /* 0x0d: state D */\n  0x00, /* 0x0e: state diagnostic */\n  0x00, /* 0x0f: state state shutdown */\n  0x40, /* 0x10: floppy type */\n  0xb1, /* 0x11: reserved */\n  0x00, /* 0x12: HD type */\n  0x9c, /* 0x13: reserved */\n  0x01, /* 0x14: equipment */\n  0x80, /* 0x15: low base memory */\n  0x02, /* 0x16: high base memory (0x280 => 640KB) */\n  0x00, /* 0x17: low extended memory */\n  0x3b, /* 0x18: high extended memory (0x3b00 => 15MB) */\n  0x00, /* 0x19: HD 1 extended type byte */\n  0x00, /* 0x1a: HD 2 extended type byte */\n  0xad, /* 0x1b: reserved */\n  0x02, /* 0x1c: reserved */\n  0x10, /* 0x1d: reserved */\n  0x00, /* 0x1e: reserved */\n  0x00, /* 0x1f: installed features */\n  0x08, /* 0x20: HD 1 low cylinder number */\n  0x00, /* 0x21: HD 1 high cylinder number */\n  0x00, /* 0x22: HD 1 heads */\n  0x26, /* 0x23: HD 1 low pre-compensation start */\n  0x00, /* 0x24: HD 1 high pre-compensation start */\n  0x00, /* 0x25: HD 1 low landing zone */\n  0x00, /* 0x26: HD 1 high landing zone */\n  0x00, /* 0x27: HD 1 sectors */\n  0x00, /* 0x28: options 1 */\n  0x00, /* 0x29: reserved */\n  0x00, /* 0x2a: reserved */\n  0x00, /* 0x2b: options 2 */\n  0x00, /* 0x2c: options 3 */\n  0x3f, /* 0x2d: reserved  */\n  0xcc, /* 0x2e: low CMOS ram checksum (computed automatically) */\n  0xcc, /* 0x2f: high CMOS ram checksum (computed automatically) */\n  0x00, /* 0x30: low extended memory byte */\n  0x1c, /* 0x31: high extended memory byte */\n  0x19, /* 0x32: century byte */\n  0x81, /* 0x33: setup information */\n  0x00, /* 0x34: CPU speed */\n  0x0e, /* 0x35: HD 2 low cylinder number */\n  0x00, /* 0x36: HD 2 high cylinder number */\n  0x80, /* 0x37: HD 2 heads */\n  0x1b, /* 0x38: HD 2 low pre-compensation start */\n  0x7b, /* 0x39: HD 2 high pre-compensation start */\n  0x21, /* 0x3a: HD 2 low landing zone */\n  0x00, /* 0x3b: HD 2 high landing zone */\n  0x00, /* 0x3c: HD 2 sectors */\n  0x00, /* 0x3d: reserved */\n  0x05, /* 0x3e: reserved */\n  0x5f  /* 0x3f: reserved */\n};\n\nstatic void IO_FixCMOSCheckSum(void)\n{\n\tWORD sum = 0;\n\tint i;\n\n\tfor (i=0x10; i < 0x2d; i++)\n\t\tsum += cmosimage[i];\n\tcmosimage[0x2e] = sum >> 8; /* yes, this IS hi byte !! */\n\tcmosimage[0x2f] = sum & 0xff;\n\tTRACE(\"calculated hi %02x, lo %02x\\n\", cmosimage[0x2e], cmosimage[0x2f]);\n}\n\n#ifdef DIRECT_IO_ACCESS\n\nextern int iopl(int level);\nstatic char do_direct_port_access = -1;\nstatic char port_permissions[0x10000];\n\n#define IO_READ  1\n#define IO_WRITE 2\n\n#endif  /* DIRECT_IO_ACCESS */\n\n#ifdef HAVE_PPDEV\nstatic int do_pp_port_access = -1; /* -1: uninitialized, 1: not available\n\t\t\t\t       0: available);*/\n#endif\n\n#define BCD2BIN(a) \\\n((a)%10 + ((a)>>4)%10*10 + ((a)>>8)%10*100 + ((a)>>12)%10*1000)\n#define BIN2BCD(a) \\\n((a)%10 | (a)/10%10<<4 | (a)/100%10<<8 | (a)/1000%10<<12)\n\n\nstatic void set_timer(unsigned timer)\n{\n    DWORD val = tmr_8253[timer].countmax;\n\n    if (tmr_8253[timer].ctrlbyte_ch & 0x01)\n        val = BCD2BIN(val);\n\n    tmr_8253[timer].flags &= ~TMR_UPDATE;\n    if (!QueryPerformanceCounter((LARGE_INTEGER*)&tmr_8253[timer].start_time))\n        WARN(\"QueryPerformanceCounter should not fail!\\n\");\n\n    switch (timer) {\n        case 0: /* System timer counter divisor */\n            DOSVM_SetTimer(val);\n            break;\n        case 1: /* RAM refresh */\n            FIXME(\"RAM refresh counter handling not implemented !\\n\");\n            break;\n        case 2: /* cassette & speaker */\n            /* speaker on ? */\n            if ((parport_8255[1] & 3) == 3)\n            {\n                TRACE(\"Beep (freq: %d) !\\n\", 1193180 / val);\n                Beep(1193180 / val, 20);\n            }\n            break;\n    }\n}\n\n\nstatic WORD get_timer_val(unsigned timer)\n{\n    LARGE_INTEGER time;\n    WORD maxval, val = tmr_8253[timer].countmax;\n    BYTE mode = tmr_8253[timer].ctrlbyte_ch >> 1 & 0x07;\n\n    /* This is not strictly correct. In most cases the old countdown should\n     * finish normally (by counting down to 0) or halt and not jump to 0.\n     * But we are calculating and not counting, so this seems to be a good\n     * solution and should work well with most (all?) programs\n     */\n    if (tmr_8253[timer].flags & TMR_UPDATE)\n        return 0;\n\n    if (!QueryPerformanceCounter(&time))\n        WARN(\"QueryPerformanceCounter should not fail!\\n\");\n\n    time.QuadPart -= tmr_8253[timer].start_time;\n    if (tmr_8253[timer].ctrlbyte_ch & 0x01)\n        val = BCD2BIN(val);\n\n    switch ( mode )\n    {\n        case 0:\n        case 1:\n        case 4:\n        case 5:\n            maxval = tmr_8253[timer].ctrlbyte_ch & 0x01 ? 9999 : 0xFFFF;\n            break;\n        case 2:\n        case 3:\n            maxval = val;\n            break;\n        default:\n            ERR(\"Invalid PIT mode: %d\\n\", mode);\n            return 0;\n    }\n\n    val = (val - time.QuadPart) % (maxval + 1);\n    if (tmr_8253[timer].ctrlbyte_ch & 0x01)\n        val = BIN2BCD(val);\n\n    return val;\n}\n\n\n/**********************************************************************\n *\t    IO_port_init\n */\n\n/* set_IO_permissions(int val1, int val)\n * Helper function for IO_port_init\n */\n#ifdef DIRECT_IO_ACCESS\nstatic void set_IO_permissions(int val1, int val, char rw)\n{\n\tint j;\n\tif (val1 != -1) {\n\t\tif (val == -1) val = 0x3ff;\n\t\tfor (j = val1; j <= val; j++)\n\t\t\tport_permissions[j] |= rw;\n\n\t\tdo_direct_port_access = 1;\n\n\t\tval1 = -1;\n\t} else if (val != -1) {\n\t\tdo_direct_port_access = 1;\n\n\t\tport_permissions[val] |= rw;\n\t}\n\n}\n\n/* do_IO_port_init_read_or_write(char* temp, char rw)\n * Helper function for IO_port_init\n */\n\nstatic void do_IO_port_init_read_or_write(const WCHAR *str, char rw)\n{\n    int val, val1;\n    unsigned int i;\n    WCHAR *end;\n    static const WCHAR allW[] = {'a','l','l',0};\n\n    if (!strcmpiW(str, allW))\n    {\n        for (i=0; i < sizeof(port_permissions); i++)\n            port_permissions[i] |= rw;\n    }\n    else\n    {\n        val = -1;\n        val1 = -1;\n        while (*str)\n        {\n            switch(*str)\n            {\n            case ',':\n            case ' ':\n            case '\\t':\n                set_IO_permissions(val1, val, rw);\n                val1 = -1;\n                val = -1;\n                str++;\n                break;\n            case '-':\n                val1 = val;\n                if (val1 == -1) val1 = 0;\n                str++;\n                break;\n            default:\n                if (isdigitW(*str))\n                {\n                    val = strtoulW( str, &end, 0 );\n                    if (end == str)\n                    {\n                        val = -1;\n                        str++;\n                    }\n                    else str = end;\n                }\n                break;\n            }\n        }\n        set_IO_permissions(val1, val, rw);\n    }\n}\n\nstatic inline BYTE inb( WORD port )\n{\n    BYTE b;\n    __asm__ __volatile__( \"inb %w1,%0\" : \"=a\" (b) : \"d\" (port) );\n    return b;\n}\n\nstatic inline WORD inw( WORD port )\n{\n    WORD w;\n    __asm__ __volatile__( \"inw %w1,%0\" : \"=a\" (w) : \"d\" (port) );\n    return w;\n}\n\nstatic inline DWORD inl( WORD port )\n{\n    DWORD dw;\n    __asm__ __volatile__( \"inl %w1,%0\" : \"=a\" (dw) : \"d\" (port) );\n    return dw;\n}\n\nstatic inline void outb( BYTE value, WORD port )\n{\n    __asm__ __volatile__( \"outb %b0,%w1\" : : \"a\" (value), \"d\" (port) );\n}\n\nstatic inline void outw( WORD value, WORD port )\n{\n    __asm__ __volatile__( \"outw %w0,%w1\" : : \"a\" (value), \"d\" (port) );\n}\n\nstatic inline void outl( DWORD value, WORD port )\n{\n    __asm__ __volatile__( \"outl %0,%w1\" : : \"a\" (value), \"d\" (port) );\n}\n\nstatic void IO_port_init(void)\n{\n    char tmp[1024];\n    HANDLE root, hkey;\n    DWORD dummy;\n    OBJECT_ATTRIBUTES attr;\n    UNICODE_STRING nameW;\n\n    static const WCHAR portsW[] = {'S','o','f','t','w','a','r','e','\\\\',\n                                   'W','i','n','e','\\\\','V','D','M','\\\\','P','o','r','t','s',0};\n    static const WCHAR readW[] = {'r','e','a','d',0};\n    static const WCHAR writeW[] = {'w','r','i','t','e',0};\n\n    do_direct_port_access = 0;\n    /* Can we do that? */\n    if (!iopl(3))\n    {\n        iopl(0);\n\n        RtlOpenCurrentUser( KEY_ALL_ACCESS, &root );\n        attr.Length = sizeof(attr);\n        attr.RootDirectory = root;\n        attr.ObjectName = &nameW;\n        attr.Attributes = 0;\n        attr.SecurityDescriptor = NULL;\n        attr.SecurityQualityOfService = NULL;\n        RtlInitUnicodeString( &nameW, portsW );\n\n        /* @@ Wine registry key: HKCU\\Software\\Wine\\VDM\\Ports */\n        if (!NtOpenKey( &hkey, KEY_ALL_ACCESS, &attr ))\n        {\n            RtlInitUnicodeString( &nameW, readW );\n            if (!NtQueryValueKey( hkey, &nameW, KeyValuePartialInformation, tmp, sizeof(tmp), &dummy ))\n            {\n                WCHAR *str = (WCHAR *)((KEY_VALUE_PARTIAL_INFORMATION *)tmp)->Data;\n                do_IO_port_init_read_or_write(str, IO_READ);\n            }\n            RtlInitUnicodeString( &nameW, writeW );\n            if (!NtQueryValueKey( hkey, &nameW, KeyValuePartialInformation, tmp, sizeof(tmp), &dummy ))\n            {\n                WCHAR *str = (WCHAR *)((KEY_VALUE_PARTIAL_INFORMATION *)tmp)->Data;\n                do_IO_port_init_read_or_write(str, IO_WRITE);\n            }\n            NtClose( hkey );\n        }\n        NtClose( root );\n    }\n}\n\n#endif  /* DIRECT_IO_ACCESS */\n\n\n#ifdef HAVE_PPDEV\n\ntypedef struct _PPDEVICESTRUCT{\n  int fd; /* NULL if device not available */\n  char *devicename;\n  int userbase; /* where wine thinks the ports are */\n  DWORD lastaccess; /* or NULL if release */\n  int timeout; /* time in second of inactivity to release the port */\n} PPDeviceStruct;\n\nstatic PPDeviceStruct PPDeviceList[5];\nstatic int PPDeviceNum=0;\n\nstatic int IO_pp_sort(const void *p1,const  void *p2)\n{\n    return ((const PPDeviceStruct*)p1)->userbase - ((const PPDeviceStruct*)p2)->userbase;\n}\n\n/* IO_pp_init\n *\n * Read the ppdev entries from registry, open the device and check\n * for necessary IOCTRL\n * Report verbose about possible errors\n */\nstatic char IO_pp_init(void)\n{\n    char name[80];\n    char buffer[256];\n    HANDLE root, hkey;\n    int i,idx=0,fd,res,userbase,nports=0;\n    char * timeout;\n    char ret=1;\n    int lasterror;\n    OBJECT_ATTRIBUTES attr;\n    UNICODE_STRING nameW;\n\n    static const WCHAR configW[] = {'S','o','f','t','w','a','r','e','\\\\',\n                                    'W','i','n','e','\\\\','V','D','M','\\\\','p','p','d','e','v',0};\n\n    TRACE(\"\\n\");\n\n    RtlOpenCurrentUser( KEY_ALL_ACCESS, &root );\n    attr.Length = sizeof(attr);\n    attr.RootDirectory = root;\n    attr.ObjectName = &nameW;\n    attr.Attributes = 0;\n    attr.SecurityDescriptor = NULL;\n    attr.SecurityQualityOfService = NULL;\n    RtlInitUnicodeString( &nameW, configW );\n\n    /* @@ Wine registry key: HKCU\\Software\\Wine\\VDM\\ppdev */\n    if (NtOpenKey( &hkey, KEY_ALL_ACCESS, &attr )) hkey = 0;\n    NtClose( root );\n    if (!hkey) return 1;\n\n    for (;;)\n    {\n        DWORD total_size, len;\n        char temp[256];\n        KEY_VALUE_FULL_INFORMATION *info = (KEY_VALUE_FULL_INFORMATION *)temp;\n\n        if (NtEnumerateValueKey( hkey, idx, KeyValueFullInformation,\n                                 temp, sizeof(temp), &total_size )) break;\n        if (info->Type != REG_SZ) break;\n\n        RtlUnicodeToMultiByteN( name, sizeof(name)-1, &len, info->Name, info->NameLength );\n        name[len] = 0;\n        RtlUnicodeToMultiByteN( buffer, sizeof(buffer)-1, &len,\n                                (WCHAR *)(temp + info->DataOffset), total_size-info->DataOffset );\n        buffer[len] = 0;\n\n\tidx++;\n\tif(nports >4)\n\t  {\n\t    FIXME(\"Make the PPDeviceList larger than 5 elements\\n\");\n\t    break;\n\t  }\n\tTRACE(\"Device '%s' at virtual userbase '%s'\\n\", buffer,name);\n\ttimeout = strchr(buffer,',');\n\tif (timeout)\n\t  *timeout++=0;\n\tfd=open(buffer,O_RDWR);\n\tlasterror=errno;\n\tif (fd == -1)\n\t  {\n\t    WARN(\"Configuration: No access to %s Cause: %s\\n\",buffer,strerror(lasterror));\n\t    WARN(\"Rejecting configuration item\\n\");\n\t    if (lasterror == ENODEV)\n\t      ERR(\"Is the ppdev module loaded?\\n\");\n\t    continue;\n\t  }\n        userbase = strtol(name, NULL, 16);\n\tif ( errno == ERANGE)\n\t  {\n\t    WARN(\"Configuration: Invalid base %s for %s\\n\",name,buffer);\n\t    WARN(\"Rejecting configuration item\\n\");\n\t    continue;\n\t  }\n\tif (ioctl (fd,PPCLAIM,0))\n\t  {\n\t    ERR(\"PPCLAIM rejected %s\\n\",buffer);\n\t    ERR(\"Perhaps the device is already in use or nonexistent\\n\");\n\t    continue;\n\t  }\n\tif (nports > 0)\n\t  {\n\t    for (i=0; i<= nports; i++)\n\t      {\n\t\tif (PPDeviceList[i].userbase == userbase)\n\t\t  {\n\t\t    WARN(\"Configuration: %s uses the same virtual ports as %s\\n\",\n\t\t\t buffer,PPDeviceList[0].devicename);\n\t\t    WARN(\"Configuration: Rejecting configuration item\\n\");\n\t\t    userbase = 0;\n\t\t    break;\n\t\t  }\n\t      }\n\t    if (!userbase) continue;\n\t  }\n\t/* Check for the minimum required IOCTLS */\n\tif ((ioctl(fd,PPRDATA,&res))||\n\t    (ioctl(fd,PPRSTATUS,&res))||\n\t    (ioctl(fd,PPRCONTROL,&res)))\n\t  {\n\t    ERR(\"PPUSER IOCTL not available for parport device %s\\n\",buffer);\n\t    continue;\n\t  }\n\tif (ioctl (fd,PPRELEASE,0))\n\t  {\n\t    ERR(\"PPRELEASE rejected %s\\n\",buffer);\n\t    ERR(\"Perhaps the device is already in use or nonexistent\\n\");\n\t    continue;\n\t  }\n\tPPDeviceList[nports].devicename = HeapAlloc(GetProcessHeap(), 0, sizeof(buffer)+1);\n\tif (!PPDeviceList[nports].devicename)\n\t  {\n\t    ERR(\"No (more) space for devicename\\n\");\n\t    break;\n\t  }\n\tstrcpy(PPDeviceList[nports].devicename,buffer);\n\tPPDeviceList[nports].fd = fd;\n\tPPDeviceList[nports].userbase = userbase;\n\tPPDeviceList[nports].lastaccess=GetTickCount();\n\tif (timeout)\n\t  {\n            PPDeviceList[nports].timeout = strtol(timeout, NULL, 10);\n\t    if (errno == ERANGE)\n\t      {\n\t\tWARN(\"Configuration: Invalid timeout %s in configuration for %s, Setting to 0\\n\",\n\t\t     timeout,buffer);\n\t\tPPDeviceList[nports].timeout = 0;\n\t      }\n\t  }\n\telse\n\t  PPDeviceList[nports].timeout = 0;\n\tnports++;\n    }\n    TRACE(\"found %d ports\\n\",nports);\n    NtClose( hkey );\n\n    PPDeviceNum= nports;\n    if (nports > 1)\n      /* sort in ascending order for userbase for faster access */\n      qsort (PPDeviceList,PPDeviceNum,sizeof(PPDeviceStruct),IO_pp_sort);\n\n    if (nports)\n      ret=0;\n    for (idx= 0;idx<PPDeviceNum; idx++)\n      TRACE(\"found device %s userbase %x fd %x timeout %d\\n\",\n\t    PPDeviceList[idx].devicename, PPDeviceList[idx].userbase,\n\t    PPDeviceList[idx].fd,PPDeviceList[idx].timeout);\n    /* FIXME:\n       register a timer callback perhaps every 30 seconds to release unused ports\n       Set lastaccess = 0 as indicator when port was released\n    */\n    return ret;\n}\n\n/* IO_pp_do_access\n *\n * Do the actual IOCTL\n * Return NULL on success\n */\nstatic int IO_pp_do_access(int idx,int ppctl, DWORD* res)\n{\n  int ret;\n  if (ioctl(PPDeviceList[idx].fd,PPCLAIM,0))\n    {\n      ERR(\"Can't reclaim device %s, PPUSER/PPDEV handling confused\\n\",\n\t  PPDeviceList[idx].devicename);\n      return 1;\n    }\n  ret = ioctl(PPDeviceList[idx].fd,ppctl,res);\n  if (ioctl(PPDeviceList[idx].fd,PPRELEASE,0))\n    {\n      ERR(\"Can't release device %s, PPUSER/PPDEV handling confused\\n\",\n\t  PPDeviceList[idx].devicename);\n      return 1;\n    }\n  return ret;\n\n}\n\n/* IO_pp_inp\n *\n * Check if we can satisfy the INP command with some of the configured PPDEV device\n * Return NULL on success\n */\nstatic int IO_pp_inp(int port, DWORD* res)\n{\n    int idx,j=0;\n\n    for (idx=0;idx<PPDeviceNum ;idx++)\n      {\n       j = port - PPDeviceList[idx].userbase;\n       if (j <0) return 1;\n       switch (j)\n         {\n         case 0:\n           return IO_pp_do_access(idx,PPRDATA,res);\n         case 1:\n           return IO_pp_do_access(idx,PPRSTATUS,res);\n         case 2:\n           return IO_pp_do_access(idx,PPRCONTROL,res);\n         case 0x400:\n         case 0x402:\n         case 3:\n         case 4:\n         case 0x401:\n           FIXME(\"Port 0x%x not accessible for reading with ppdev\\n\",port);\n           FIXME(\"If this is causing problems, try direct port access\\n\");\n           return 1;\n         default:\n           break;\n         }\n      }\n    return 1;\n}\n\n/* IO_pp_outp\n *\n * Check if we can satisfy the OUTP command with some of the configured PPDEV device\n * Return NULL on success\n */\nstatic BOOL IO_pp_outp(int port, DWORD* res)\n{\n    int idx,j=0;\n\n    for (idx=0;idx<PPDeviceNum ;idx++)\n      {\n       j = port - PPDeviceList[idx].userbase;\n       if (j <0) return 1;\n       switch (j)\n         {\n         case 0:\n           return IO_pp_do_access(idx,PPWDATA,res);\n         case 2:\n\t   {\n\t     /* We can't switch port direction via PPWCONTROL,\n\t\tso do it via PPDATADIR\n\t     */\n\t     DWORD mode = *res & 0x20;\n\t     IO_pp_do_access(idx,PPDATADIR,&mode);\n\t     mode = (*res & ~0x20);\n\t     return IO_pp_do_access(idx,PPWCONTROL,&mode);\n\t   }\n\n         case 1:\n         case 0x400:\n         case 0x402:\n         case 3:\n         case 4:\n         case 0x401:\n           FIXME(\"Port %d not accessible for writing with ppdev\\n\",port);\n           FIXME(\"If this is causing problems, try direct port access\\n\");\n           return 1;\n         default:\n           break;\n         }\n      }\n    return TRUE;\n}\n\n#endif  /* HAVE_PPDEV */\n\nvoid DOSVM_setportcb(OUTPROC outproc, INPROC inproc, int port, OUTPROC *oldout, INPROC *oldin)\n{\n    if (port < 0 || port >= ARRAY_SIZE(incb))\n        return;\n\n    *oldout = outcb[port];\n    *oldin = incb[port];\n    outcb[port] = outproc;\n    incb[port] = inproc;\n}\n\nBOOL vdd_io_read(int port, int size, WORD *val, CONTEXT *ctx);\nBOOL vdd_io_write(int port, int size, WORD val, CONTEXT *ctx);\n\n/**********************************************************************\n *\t    DOSVM_inport\n *\n * Note: The size argument has to be handled correctly _externally_\n * (as we always return a DWORD)\n */\nDWORD DOSVM_inport( int port, int size, CONTEXT* ctx )\n{\n    DWORD res = ~0U;\n\n    TRACE(\"%d-byte value from port 0x%04x\\n\", size, port );\n\n    if (0 <= port && port < ARRAY_SIZE(incb) && incb[port]) return incb[port](port, size);\n\n    DOSMEM_InitDosMemory();\n\n#ifdef HAVE_PPDEV\n    if (do_pp_port_access == -1) do_pp_port_access =IO_pp_init();\n    if ((do_pp_port_access == 0 ) && (size == 1))\n    {\n        if (!IO_pp_inp(port,&res)) return res;\n    }\n#endif\n\n#ifdef DIRECT_IO_ACCESS\n    if (do_direct_port_access == -1) IO_port_init();\n    if ((do_direct_port_access)\n        /* Make sure we have access to the port */\n        && (port_permissions[port] & IO_READ))\n    {\n        iopl(3);\n        switch(size)\n        {\n        case 1: res = inb( port ); break;\n        case 2: res = inw( port ); break;\n        case 4: res = inl( port ); break;\n        }\n        iopl(0);\n        return res;\n    }\n#endif\n\n    switch (size)\n    {\n        case 4:\n            res |= DOSVM_inport(port, 2, ctx);\n            res |= DOSVM_inport(port + 2, 2, ctx) << 16;\n            return res;\n        case 2:\n            if (!vdd_io_read(port, 2, &res, ctx))\n            {\n                res |= DOSVM_inport(port, 1, ctx);\n                res |= DOSVM_inport(port + 1, 1, ctx) << 8;\n            }\n            return res;\n        case 1:\n            if (vdd_io_read(port, 1, &res, ctx))\n                return res;\n    }\n    switch (port)\n    {\n    case 0x40:\n    case 0x41:\n    case 0x42:\n        {\n            BYTE chan = port & 3;\n            WORD tempval = tmr_8253[chan].flags & TMR_LATCHED\n                ? tmr_8253[chan].latch : get_timer_val(chan);\n\n            if (tmr_8253[chan].flags & TMR_STATUS)\n            {\n                WARN(\"Read-back status\\n\");\n                /* We differ slightly from the spec:\n                 * - TMR_UPDATE is already set with the first write\n                 *   of a two byte counter update\n                 * - 0x80 should be set if OUT signal is 1 (high)\n                 */\n                tmr_8253[chan].flags &= ~TMR_STATUS;\n                res = (tmr_8253[chan].ctrlbyte_ch & 0x3F) |\n                    (tmr_8253[chan].flags & TMR_UPDATE ? 0x40 : 0x00);\n                break;\n            }\n            switch ((tmr_8253[chan].ctrlbyte_ch & 0x30) >> 4)\n            {\n            case 0:\n                res = 0; /* shouldn't happen? */\n                break;\n            case 1: /* read lo byte */\n                res = (BYTE)tempval;\n                tmr_8253[chan].flags &= ~TMR_LATCHED;\n                break;\n            case 3: /* read lo byte, then hi byte */\n                tmr_8253[chan].flags ^= TMR_RTOGGLE; /* toggle */\n                if (tmr_8253[chan].flags & TMR_RTOGGLE)\n                {\n                    res = (BYTE)tempval;\n                    break;\n                }\n                /* else [fall through if read hi byte !] */\n            case 2: /* read hi byte */\n                res = (BYTE)(tempval >> 8);\n                tmr_8253[chan].flags &= ~TMR_LATCHED;\n                break;\n            }\n        }\n        break;\n    case 0x60:\n        res = DOSVM_Int09ReadScan(NULL);\n        break;\n    case 0x61:\n        res = (DWORD)parport_8255[1];\n        break;\n    case 0x62:\n        res = (DWORD)parport_8255[2];\n        break;\n    case 0x70:\n        res = (DWORD)cmosaddress;\n        break;\n    case 0x71:\n        if (!cmos_image_initialized)\n        {\n            IO_FixCMOSCheckSum();\n            cmos_image_initialized = TRUE;\n        }\n        res = (DWORD)cmosimage[cmosaddress & 0x3f];\n        break;\n    case 0x200:\n    case 0x201:\n        res = ~0U; /* no joystick */\n        break;\n    case 0x22a:\n    case 0x22c:\n    case 0x22e:\n        res = (DWORD)SB_ioport_in( port );\n\tbreak;\n    /* VGA read registers */\n    case 0x3b4:  /* CRT Controller Register - Index (MDA) */\n    case 0x3b5:  /* CRT Controller Register - Other (MDA) */\n    case 0x3ba:  /* General Register - Input status 1 (MDA) */\n    case 0x3c0:  /* Attribute Controller - Address */\n    case 0x3c1:  /* Attribute Controller - Other */\n    case 0x3c2:  /* General Register - Input status 0 */\n    case 0x3c3:  /* General Register - Video subsystem enable */\n    case 0x3c4:  /* Sequencer Register - Address */\n    case 0x3c5:  /* Sequencer Register - Other */\n    case 0x3c6:\n    case 0x3c7:  /* General Register -  DAC State */\n    case 0x3c8:\n    case 0x3c9:\n    case 0x3ca:  /* General Register - Feature control */\n    case 0x3cb:\n    case 0x3cc:  /* General Register - Misc output */\n    case 0x3cd:\n    case 0x3ce:  /* Graphics Controller Register - Address */\n    case 0x3cf:  /* Graphics Controller Register - Other */\n    case 0x3d0:\n    case 0x3d1:\n    case 0x3d2:\n    case 0x3d3:\n    case 0x3d4:  /* CRT Controller Register - Index (CGA) */\n    case 0x3d5:  /* CRT Controller Register - Other (CGA) */\n    case 0x3d6:\n    case 0x3d7:\n    case 0x3d8:\n    case 0x3d9:\n    case 0x3da:\n    case 0x3db:\n    case 0x3dc:\n    case 0x3dd:\n    case 0x3de:\n    case 0x3df:\n        if (size > 1)\n            FIXME(\"Trying to read more than one byte from VGA!\\n\");\n        res = (DWORD)VGA_ioport_in( port );\n        break;\n    case 0x00:\n    case 0x01:\n    case 0x02:\n    case 0x03:\n    case 0x04:\n    case 0x05:\n    case 0x06:\n    case 0x07:\n    case 0xC0:\n    case 0xC2:\n    case 0xC4:\n    case 0xC6:\n    case 0xC8:\n    case 0xCA:\n    case 0xCC:\n    case 0xCE:\n    case 0x87:\n    case 0x83:\n    case 0x81:\n    case 0x82:\n    case 0x8B:\n    case 0x89:\n    case 0x8A:\n    case 0x487:\n    case 0x483:\n    case 0x481:\n    case 0x482:\n    case 0x48B:\n    case 0x489:\n    case 0x48A:\n    case 0x08:\n    case 0xD0:\n    case 0x0D:\n    case 0xDA:\n        res = (DWORD)DMA_ioport_in( port );\n        break;\n    default:\n        WARN(\"Direct I/O read attempted from port %x\\n\", port);\n        break;\n    }\n    return res;\n}\n\n\n/**********************************************************************\n *\t    DOSVM_outport\n */\nvoid DOSVM_outport( int port, int size, DWORD value, CONTEXT *ctx )\n{\n    TRACE(\"IO: 0x%x (%d-byte value) to port 0x%04x\\n\", value, size, port );\n\n    if (0 <= port && port < ARRAY_SIZE(outcb) && outcb[port]) return outcb[port](port, size, value);\n\n    DOSMEM_InitDosMemory();\n\n#ifdef HAVE_PPDEV\n    if (do_pp_port_access == -1) do_pp_port_access = IO_pp_init();\n    if ((do_pp_port_access == 0) && (size == 1))\n    {\n        if (!IO_pp_outp(port,&value)) return;\n    }\n#endif\n\n#ifdef DIRECT_IO_ACCESS\n\n    if (do_direct_port_access == -1) IO_port_init();\n    if ((do_direct_port_access)\n        /* Make sure we have access to the port */\n        && (port_permissions[port] & IO_WRITE))\n    {\n        iopl(3);\n        switch(size)\n        {\n        case 1: outb( LOBYTE(value), port ); break;\n        case 2: outw( LOWORD(value), port ); break;\n        case 4: outl( value, port ); break;\n        }\n        iopl(0);\n        return;\n    }\n#endif\n\n    switch (size)\n    {\n        case 4:\n            DOSVM_outport(port, 2, value & 0xffff, ctx);\n            DOSVM_outport(port + 2, 2, value >> 16, ctx);\n            return;\n        case 2:\n            if (!vdd_io_write(port, 2, value, ctx))\n            {\n                DOSVM_outport(port, 1, value & 0xff, ctx);\n                DOSVM_outport(port + 1, 1, value >> 8, ctx);\n            }\n            return;\n        case 1:\n            if (vdd_io_write(port, 1, value, ctx))\n                return;\n    }\n    switch (port)\n    {\n    case 0x20:\n        DOSVM_PIC_ioport_out( port, (BYTE)value );\n        break;\n    case 0x40:\n    case 0x41:\n    case 0x42:\n        {\n            BYTE chan = port & 3;\n\n            tmr_8253[chan].flags |= TMR_UPDATE;\n            switch ((tmr_8253[chan].ctrlbyte_ch & 0x30) >> 4)\n            {\n            case 0:\n                break; /* shouldn't happen? */\n            case 1: /* write lo byte */\n                tmr_8253[chan].countmax =\n                    (tmr_8253[chan].countmax & 0xff00) | (BYTE)value;\n                break;\n            case 3: /* write lo byte, then hi byte */\n                tmr_8253[chan].flags ^= TMR_WTOGGLE; /* toggle */\n                if (tmr_8253[chan].flags & TMR_WTOGGLE)\n                {\n                    tmr_8253[chan].countmax =\n                        (tmr_8253[chan].countmax & 0xff00) | (BYTE)value;\n                    break;\n                }\n                /* else [fall through if write hi byte !] */\n            case 2: /* write hi byte */\n                tmr_8253[chan].countmax =\n                    (tmr_8253[chan].countmax & 0x00ff) | ((BYTE)value << 8);\n                break;\n            }\n            /* if programming is finished, update to new value */\n            if ((tmr_8253[chan].ctrlbyte_ch & 0x30) &&\n                !(tmr_8253[chan].flags & TMR_WTOGGLE))\n                set_timer(chan);\n        }\n        break;\n    case 0x43:\n       {\n           BYTE chan = ((BYTE)value & 0xc0) >> 6;\n           /* ctrl byte for specific timer channel */\n           if (chan == 3)\n           {\n               if ( !(value & 0x20) )\n               {\n                   if ((value & 0x02) && !(tmr_8253[0].flags & TMR_LATCHED))\n                   {\n                       tmr_8253[0].flags |= TMR_LATCHED;\n                       tmr_8253[0].latch = get_timer_val(0);\n                   }\n                   if ((value & 0x04) && !(tmr_8253[1].flags & TMR_LATCHED))\n                   {\n                       tmr_8253[1].flags |= TMR_LATCHED;\n                       tmr_8253[1].latch = get_timer_val(1);\n                   }\n                   if ((value & 0x08) && !(tmr_8253[2].flags & TMR_LATCHED))\n                   {\n                       tmr_8253[2].flags |= TMR_LATCHED;\n                       tmr_8253[2].latch = get_timer_val(2);\n                   }\n               }\n\n               if ( !(value & 0x10) )\n               {\n                   if (value & 0x02)\n                       tmr_8253[0].flags |= TMR_STATUS;\n                   if (value & 0x04)\n                       tmr_8253[1].flags |= TMR_STATUS;\n                   if (value & 0x08)\n                       tmr_8253[2].flags |= TMR_STATUS;\n               }\n               break;\n           }\n           switch (((BYTE)value & 0x30) >> 4)\n           {\n           case 0:\t/* latch timer */\n               if ( !(tmr_8253[chan].flags & TMR_LATCHED) )\n               {\n                   tmr_8253[chan].flags |= TMR_LATCHED;\n                   tmr_8253[chan].latch = get_timer_val(chan);\n               }\n               break;\n           case 1:\t/* write lo byte only */\n           case 2:\t/* write hi byte only */\n           case 3:\t/* write lo byte, then hi byte */\n               tmr_8253[chan].ctrlbyte_ch = (BYTE)value;\n               tmr_8253[chan].countmax = 0;\n               tmr_8253[chan].flags = TMR_UPDATE;\n               break;\n           }\n       }\n       break;\n    case 0x61:\n        parport_8255[1] = (BYTE)value;\n        if (((parport_8255[1] & 3) == 3) && (tmr_8253[2].countmax != 1))\n        {\n            if (tmr_8253[2].countmax == 0)\n            {\n                ERR(\"Beep tmr_8253[2].countmax == 0 !\\n\", tmr_8253[2].countmax);\n                break;\n            }\n            TRACE(\"Beep (freq: %d) !\\n\", 1193180 / tmr_8253[2].countmax);\n            Beep(1193180 / tmr_8253[2].countmax, 20);\n        }\n        break;\n    case 0x70:\n        cmosaddress = (BYTE)value & 0x7f;\n        break;\n    case 0x71:\n        if (!cmos_image_initialized)\n        {\n            IO_FixCMOSCheckSum();\n            cmos_image_initialized = TRUE;\n        }\n        cmosimage[cmosaddress & 0x3f] = (BYTE)value;\n        break;\n    case 0x226:\n    case 0x22c:\n        SB_ioport_out( port, (BYTE)value );\n        break;\n    /* VGA Write registers */\n    case 0x3b4:  /* CRT Controller Register - Index (MDA) */\n    case 0x3b5:  /* CRT Controller Register - Other (MDA) */\n    case 0x3ba:  /* General Register - Feature Control */\n    case 0x3c0:  /* Attribute Controller - Address/Other */\n    case 0x3c1:\n    case 0x3c2:  /* General Register - Misc output */\n    case 0x3c3:  /* General Register - Video subsystem enable */\n    case 0x3c4:  /* Sequencer Register - Address */\n    case 0x3c5:  /* Sequencer Register - Other */\n    case 0x3c6:\n    case 0x3c7:\n    case 0x3c8:\n    case 0x3c9:\n    case 0x3ca:\n    case 0x3cb:\n    case 0x3cc:\n    case 0x3cd:\n    case 0x3ce:  /* Graphics Controller Register - Address */\n    case 0x3cf:  /* Graphics Controller Register - Other */\n    case 0x3d0:\n    case 0x3d1:\n    case 0x3d2:\n    case 0x3d3:\n    case 0x3d4:  /* CRT Controller Register - Index (CGA) */\n    case 0x3d5:  /* CRT Controller Register - Other (CGA) */\n    case 0x3d6:\n    case 0x3d7:\n    case 0x3d8:\n    case 0x3d9:\n    case 0x3da:\n    case 0x3db:\n    case 0x3dc:\n    case 0x3dd:\n    case 0x3de:\n    case 0x3df:\n        VGA_ioport_out( port, LOBYTE(value) );\n        if(size > 1) {\n            VGA_ioport_out( port+1, HIBYTE(value) );\n            if(size > 2) {\n                VGA_ioport_out( port+2, LOBYTE(HIWORD(value)) );\n                VGA_ioport_out( port+3, HIBYTE(HIWORD(value)) );\n            }\n        }\n        break;\n    case 0x00:\n    case 0x01:\n    case 0x02:\n    case 0x03:\n    case 0x04:\n    case 0x05:\n    case 0x06:\n    case 0x07:\n    case 0xC0:\n    case 0xC2:\n    case 0xC4:\n    case 0xC6:\n    case 0xC8:\n    case 0xCA:\n    case 0xCC:\n    case 0xCE:\n    case 0x87:\n    case 0x83:\n    case 0x81:\n    case 0x82:\n    case 0x8B:\n    case 0x89:\n    case 0x8A:\n    case 0x487:\n    case 0x483:\n    case 0x481:\n    case 0x482:\n    case 0x48B:\n    case 0x489:\n    case 0x48A:\n    case 0x08:\n    case 0xD0:\n    case 0x0B:\n    case 0xD6:\n    case 0x0A:\n    case 0xD4:\n    case 0x0F:\n    case 0xDE:\n    case 0x09:\n    case 0xD2:\n    case 0x0C:\n    case 0xD8:\n    case 0x0D:\n    case 0xDA:\n    case 0x0E:\n    case 0xDC:\n        DMA_ioport_out( port, (BYTE)value );\n        break;\n    default:\n        WARN(\"Direct I/O write attempted to port %x\\n\", port );\n        break;\n    }\n}\n"
  },
  {
    "path": "krnl386/kernel.c",
    "content": "/*\n * 16-bit kernel initialization code\n *\n * Copyright 2000 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n#include <stdio.h>\n\n#define WINE_NO_INLINE_STRING\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winternl.h\"\n#include \"windows/wownt32.h\"\n#include \"wine/winuser16.h\"\n\n#include \"kernel16_private.h\"\n#include \"../toolhelp/toolhelp.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(module);\n\nextern DWORD WINAPI GetProcessFlags( DWORD processid );\n\nstatic DWORD process_dword;\nextern HANDLE vm_idle_event;\n\nDWORD kernel_thread_data_tls = TLS_OUT_OF_INDEXES;\n/***********************************************************************\n *           KERNEL thread initialisation routine\n */\nstatic void thread_attach(void)\n{\n    TlsSetValue(kernel_thread_data_tls, HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(struct kernel_thread_data)));\n    /* allocate the 16-bit stack (FIXME: should be done lazily) */\n\tHGLOBAL16 hstack = WOWGlobalAlloc16(GMEM_FIXED, 0x10000);\n\tkernel_get_thread_data()->stack_sel = GlobalHandleToSel16(hstack);\n\tsetWOW32Reserved((void *)MAKESEGPTR(kernel_get_thread_data()->stack_sel,\n                                                        0x10000 - sizeof(STACK16FRAME) ));\n\tmemset((char *)GlobalLock16(hstack) + 0x10000 - sizeof(STACK16FRAME), 0, sizeof(STACK16FRAME));\n\tTlsSetValue(64, 0); // force allocation of TlsExpansionSlots\n}\n\n\n/***********************************************************************\n *           KERNEL thread finalisation routine\n */\nstatic void thread_detach(void)\n{\n    if (!kernel_get_thread_data())\n        return;\n    /* free the 16-bit stack */\n    WOWGlobalFree16( kernel_get_thread_data()->stack_sel );\n    setWOW32Reserved(0);\n    if (NtCurrentTeb()->Tib.SubSystemTib || kernel_get_thread_data()->htask16) TASK_ExitTask();\n    HeapFree(GetProcessHeap(), 0, TlsGetValue(kernel_thread_data_tls));\n}\n\nconst char *GetRedirectWindowsDir();\nvoid init_wow_handle();\nLPCSTR RedirectSystemDir(LPCSTR path, LPSTR to, size_t max_len);\n\nstatic void redirect_current_dir()\n{\n    char curdir[MAX_PATH];\n    char curdir16[MAX_PATH];\n    LPCSTR redirected;\n    GetCurrentDirectoryA(MAX_PATH, curdir);\n    redirected = RedirectSystemDir(curdir, curdir16, MAX_PATH);\n    if (redirected == curdir16)\n    {\n        ERR(\"current directory: %s -> %s\\n\", curdir, curdir16);\n        SetCurrentDirectoryA(redirected);\n    }\n    for (int i = 'A'; i <= 'Z'; i++)\n    {\n        char env[] = { '=', i, ':', '\\0' };\n        if (GetEnvironmentVariableA(env, curdir, MAX_PATH))\n        {\n            redirected = RedirectSystemDir(curdir, curdir16, MAX_PATH);\n            if (redirected == curdir16)\n            {\n                TRACE(\"current directory(env): %s -> %s\\n\", curdir, curdir16);\n                SetEnvironmentVariableA(env, redirected);\n            }\n        }\n    }\n}\n\nLONG CALLBACK fflush_vectored_handler(EXCEPTION_POINTERS *ptrs)\n{\n#if defined(_MSC_VER) || defined(__MINGW32__)\n    _flushall();\n#else\n    fflush(stderr); /* _flushlbf */\n#endif\n    return EXCEPTION_CONTINUE_SEARCH;\n}\n\n/**************************************************************************\n *\t\tDllMain\n */\nDWORD WOW32ReservedTls;\nBOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved )\n{\n    switch(reason)\n    {\n    case DLL_PROCESS_ATTACH:\n    {\n        DWORD tls[TLS_MINIMUM_AVAILABLE];\n\n        for (int i = 0; i < TLS_MINIMUM_AVAILABLE; i++)\n        {\n            tls[i] = 0xffffffff;\n        }\n        BOOL allocated = FALSE;\n        for (int i = 0; i < TLS_MINIMUM_AVAILABLE; i++)\n        {\n            tls[i] = TlsAlloc();\n            if (tls[i] == WOW32RESERVED_TLS_INDEX)\n            {\n                allocated = TRUE;\n                break;\n            }\n        }\n        for (int i = 0; i < TLS_MINIMUM_AVAILABLE; i++)\n        {\n            if (tls[i] != 0xffffffff && tls[i] != WOW32RESERVED_TLS_INDEX)\n            {\n                TlsFree(tls[i]);\n            }\n        }\n        WOW32ReservedTls = WOW32RESERVED_TLS_INDEX;\n        if (!allocated)\n        {\n            WOW32ReservedTls = TlsAlloc();\n            WARN(\"could not allocate WOW32RESERVED_TLS_INDEX!!\\n\");\n        }\n        kernel_thread_data_tls = TlsAlloc();\n        TlsSetValue(kernel_thread_data_tls, HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(struct kernel_thread_data)));\n        /* init redirect dir */\n        GetRedirectWindowsDir();\n        init_wow_handle();\n        redirect_current_dir();\n    }\n        if (LoadLibrary16( \"krnl386.exe\" ) < 32) return FALSE;\n        /* fall through */\n    case DLL_THREAD_ATTACH:\n        thread_attach();\n        break;\n    case DLL_THREAD_DETACH:\n        thread_detach();\n        break;\n    }\n    return TRUE;\n}\n\n\n/**************************************************************************\n *\t\tDllEntryPoint   (KERNEL.669)\n */\nBOOL WINAPI KERNEL_DllEntryPoint( DWORD reasion, HINSTANCE16 inst, WORD ds,\n                                  WORD heap, DWORD reserved1, WORD reserved2 )\n{\n    static BOOL done;\n\n    /* the entry point can be called multiple times */\n    if (done) return TRUE;\n    done = TRUE;\n\n    /* create the shared heap for broken win95 native dlls */\n    HeapCreate( HEAP_SHARED, 0, 0 );\n\n    /* setup emulation of protected instructions from 32-bit code */\n    if (GetVersion() & 0x80000000) RtlAddVectoredExceptionHandler( TRUE, INSTR_vectored_handler );\n\n    /* Initialize 16-bit thunking entry points */\n    if (!WOWTHUNK_Init()) return FALSE;\n\n    /* Initialize DOS memory */\n    if (!DOSMEM_Init()) return FALSE;\n\n    /* Initialize special KERNEL entry points */\n\n    NE_SetEntryPoint( inst, 178, GetWinFlags16() );\n\n    NE_SetEntryPoint( inst, 454, wine_get_cs() );\n    NE_SetEntryPoint( inst, 455, wine_get_ds() );\n\n    NE_SetEntryPoint( inst, 183, DOSMEM_0000H );       /* KERNEL.183: __0000H */\n    NE_SetEntryPoint( inst, 173, DOSMEM_BiosSysSeg );  /* KERNEL.173: __ROMBIOS */\n    NE_SetEntryPoint( inst, 193, DOSMEM_BiosDataSeg ); /* KERNEL.193: __0040H */\n    NE_SetEntryPoint( inst, 194, DOSMEM_BiosSysSeg );  /* KERNEL.194: __F000H */\n    /* Initialize KERNEL.THHOOK */\n    TASK_InstallTHHook(MapSL((SEGPTR)GetProcAddress16( inst, (LPCSTR)332 )));\n    TASK_CreateMainTask();\n\n    /* Initialize the real-mode selector entry points */\n#define SET_ENTRY_POINT( num, addr ) \\\n    NE_SetEntryPoint( inst, (num), GLOBAL_CreateBlock( GMEM_FIXED, \\\n                      DOSMEM_MapDosToLinear(addr), 0x10000, inst, \\\n                      WINE_LDT_FLAGS_DATA, 0 ))\n\n    SET_ENTRY_POINT( 174, 0xa0000 );  /* KERNEL.174: __A000H */\n    SET_ENTRY_POINT( 181, 0xb0000 );  /* KERNEL.181: __B000H */\n    SET_ENTRY_POINT( 182, 0xb8000 );  /* KERNEL.182: __B800H */\n    SET_ENTRY_POINT( 195, 0xc0000 );  /* KERNEL.195: __C000H */\n    SET_ENTRY_POINT( 179, 0xd0000 );  /* KERNEL.179: __D000H */\n    SET_ENTRY_POINT( 190, 0xe0000 );  /* KERNEL.190: __E000H */\n#undef SET_ENTRY_POINT\n\n    /* Force loading of some dlls */\n    LoadLibrary16( \"system.drv\" );\n    LoadLibrary16( \"comm.drv\" );\n    LoadLibrary16( \"timer.drv\" );\n\n    char dllname[MAX_PATH];\n    krnl386_get_config_string(\"otvdm\", \"vm\", \"vm86.dll\", dllname, sizeof(dllname));\n    HMODULE vm = LoadLibraryA(dllname);\n    func_wine_call_to_16_vm86 = (wine_call_to_16_vm86_t)GetProcAddress(vm, \"wine_call_to_16_vm86\");\n    func_wine_call_to_16_regs_vm86 = (wine_call_to_16_regs_vm86_t)GetProcAddress(vm, \"wine_call_to_16_regs_vm86\");\n    RtlAddVectoredExceptionHandler(FALSE, fflush_vectored_handler);\n\n    vm_idle_event = CreateEvent(NULL, TRUE, TRUE, NULL);\n    return TRUE;\n}\n\nWORD get_env_dos_version()\n{\n    char buffer1[100];\n    char buffer[100];\n    krnl386_get_config_string(\"otvdm\", \"VDMDOSVER\", \"\", buffer1, sizeof(buffer1));\n    DWORD result = GetEnvironmentVariableA(\"VDMDOSVER\", buffer, sizeof(buffer));\n    LPSTR version = buffer;\n    if (result == 0 || result > sizeof(buffer))\n        version = buffer1;\n    if (version[0] == 0)\n        return 0;\n    int v1 = 0, v2 = 0;\n    sscanf(version, \"%d.%d\", &v1, &v2);\n    if (v2 <= 9)\n        v2 *= 10;\n    return v1 << 8 | v2;\n}\nWORD get_env_win_version()\n{\n    char buffer1[100];\n    char buffer[100];\n    krnl386_get_config_string(\"otvdm\", \"WINVER\", \"\", buffer1, sizeof(buffer1));\n    DWORD result = GetEnvironmentVariableA(\"WINVER\", buffer, sizeof(buffer));\n    LPSTR version = buffer;\n    if (result == 0 || result > sizeof(buffer))\n        version = buffer1;\n    if (version[0] == 0)\n        return 0;\n    int v1 = 0, v2 = 0;\n    sscanf(version, \"%d.%d\", &v1, &v2);\n    if (v2 <= 9)\n        v2 *= 10;\n    return v2 << 8 | v1;\n}\n/***********************************************************************\n *         GetVersion   (KERNEL.3)\n */\nDWORD WINAPI GetVersion16(void)\n{\n    static WORD dosver, winver;\n\n    if (!dosver)  /* not determined yet */\n    {\n        RTL_OSVERSIONINFOEXW info;\n\n        info.dwOSVersionInfoSize = sizeof(info);\n        if (RtlGetVersion( &info )) return 0;\n\n        if (info.dwMajorVersion <= 3)\n            winver = MAKEWORD( info.dwMajorVersion, info.dwMinorVersion );\n        else\n            winver = MAKEWORD( 3, 95 );\n\n        switch(info.dwPlatformId)\n        {\n        case VER_PLATFORM_WIN32s:\n            switch(MAKELONG( info.dwMinorVersion, info.dwMajorVersion ))\n            {\n            case 0x0200:\n                dosver = 0x0303;  /* DOS 3.3 for Windows 2.0 */\n                break;\n            case 0x0300:\n                dosver = 0x0500;  /* DOS 5.0 for Windows 3.0 */\n                break;\n            default:\n                dosver = 0x0616;  /* DOS 6.22 for Windows 3.1 and later */\n                break;\n            }\n            break;\n        case VER_PLATFORM_WIN32_WINDOWS:\n            /* DOS 8.0 for WinME, 7.0 for Win95/98 */\n            if (info.dwMinorVersion >= 90) dosver = 0x0800;\n            else dosver = 0x0700;\n            break;\n        case VER_PLATFORM_WIN32_NT:\n            dosver = 0x0532;  /* always DOS 5.50 for NT */\n            break;\n        }\n        TRACE( \"DOS %d.%02d Win %d.%02d\\n\",\n               HIBYTE(dosver), LOBYTE(dosver), LOBYTE(winver), HIBYTE(winver) );\n        WORD dosver_env = get_env_dos_version();\n        WORD winver_env = get_env_win_version();\n        if (dosver_env)\n        {\n            dosver = dosver_env;\n        }\n        if (winver_env)\n        {\n            winver = winver_env;\n        }\n        TRACE(\"DOS %d.%02d Win %d.%02d\\n\",\n            HIBYTE(dosver_env), LOBYTE(dosver_env), LOBYTE(winver_env), HIBYTE(winver_env));\n    }\n    return MAKELONG( winver, dosver );\n}\n\n/***********************************************************************\n *\t\tReserved1 (KERNEL.77)\n */\nSEGPTR WINAPI KERNEL_AnsiNext16(SEGPTR current)\n{\n    return (*(char *)MapSL(current)) ? current + 1 : current;\n}\n\n/***********************************************************************\n *\t\tReserved2(KERNEL.78)\n */\nSEGPTR WINAPI KERNEL_AnsiPrev16( SEGPTR start, SEGPTR current )\n{\n    return (current==start)?start:current-1;\n}\n\n/***********************************************************************\n *\t\tReserved3 (KERNEL.79)\n */\nSEGPTR WINAPI KERNEL_AnsiUpper16( SEGPTR strOrChar )\n{\n    /* uppercase only one char if strOrChar < 0x10000 */\n    if (HIWORD(strOrChar))\n    {\n        char *s = MapSL(strOrChar);\n        while (*s)\n        {\n            *s = toupper(*s);\n            s++;\n        }\n        return strOrChar;\n    }\n    else return toupper((char)strOrChar);\n}\n\n/***********************************************************************\n *\t\tReserved4 (KERNEL.80)\n */\nSEGPTR WINAPI KERNEL_AnsiLower16( SEGPTR strOrChar )\n{\n    /* lowercase only one char if strOrChar < 0x10000 */\n    if (HIWORD(strOrChar))\n    {\n        char *s = MapSL(strOrChar);\n        while (*s)\n        {\n            *s = tolower(*s);\n            s++;\n        }\n        return strOrChar;\n    }\n    else return tolower((char)strOrChar);\n}\n\n/***********************************************************************\n *\t\tReserved5 (KERNEL.87)\n */\nINT16 WINAPI KERNEL_lstrcmp16( LPCSTR str1, LPCSTR str2 )\n{\n    int ret = strcmp( str1, str2 );\n\n    /* Looks too complicated, but in optimized strcpy we might get\n     * a 32bit wide difference and would truncate it to 16 bit, so\n     * erroneously returning equality. */\n    if (ret < 0) return -1;\n    if (ret > 0) return  1;\n    return 0;\n}\n\n/***********************************************************************\n *           lstrcpy   (KERNEL.88)\n */\nSEGPTR WINAPI lstrcpy16( SEGPTR dst, LPCSTR src )\n{\n    if (!lstrcpyA( MapSL(dst), src )) dst = 0;\n    return dst;\n}\n\n/***********************************************************************\n *           lstrcat   (KERNEL.89)\n */\nSEGPTR WINAPI lstrcat16( SEGPTR dst, LPCSTR src )\n{\n    if (!lstrcatA( MapSL(dst), src )) dst = 0;\n    return dst;\n}\n\n/***********************************************************************\n *           lstrlen   (KERNEL.90)\n */\nINT16 WINAPI lstrlen16( LPCSTR str )\n{\n    return (INT16)lstrlenA( str );\n}\n\n/***********************************************************************\n *           OutputDebugString   (KERNEL.115)\n */\nvoid WINAPI OutputDebugString16( LPCSTR str, CONTEXT *ctx )\n{\n    OutputDebugStringA( str );\n}\n\nstatic BOOL config_IAmNotNT()\n{\n    BOOL init = FALSE;\n    BOOL IAmNotNT = FALSE;\n    if (init)\n        return IAmNotNT;\n    IAmNotNT = krnl386_get_config_int(\"otvdm\", \"IAmNotNT\", FALSE);\n    init = TRUE;\n    return IAmNotNT;\n}\n\n/***********************************************************************\n *          GetWinFlags   (KERNEL.132)\n */\nDWORD WINAPI GetWinFlags16(void)\n{\n    static const long cpuflags[5] = { WF_CPU086, WF_CPU186, WF_CPU286, WF_CPU386, WF_CPU486 };\n    SYSTEM_INFO si;\n    OSVERSIONINFOA ovi;\n    DWORD result;\n\n    GetSystemInfo(&si);\n\n    /* There doesn't seem to be any Pentium flag.  */\n    result = cpuflags[min(si.wProcessorLevel, 4)] | WF_ENHANCED | WF_PMODE | WF_80x87 | WF_PAGING;\n    if (si.wProcessorLevel >= 4) result |= WF_HASCPUID;\n    ovi.dwOSVersionInfoSize = sizeof(ovi);\n    GetVersionExA(&ovi);\n    if (!config_IAmNotNT() && ovi.dwPlatformId == VER_PLATFORM_WIN32_NT)\n        result |= WF_WIN32WOW; /* undocumented WF_WINNT */\n    return result;\n}\n\n/***********************************************************************\n *         GetVersionEx   (KERNEL.149)\n */\nBOOL16 WINAPI GetVersionEx16(OSVERSIONINFO16 *v)\n{\n    OSVERSIONINFOA info;\n\n    if (v->dwOSVersionInfoSize < sizeof(OSVERSIONINFO16))\n    {\n        WARN(\"wrong OSVERSIONINFO size from app\\n\");\n        return FALSE;\n    }\n\n    info.dwOSVersionInfoSize = sizeof(info);\n    if (!GetVersionExA( &info )) return FALSE;\n\n    v->dwMajorVersion = info.dwMajorVersion;\n    v->dwMinorVersion = info.dwMinorVersion;\n    v->dwBuildNumber  = info.dwBuildNumber;\n    v->dwPlatformId   = info.dwPlatformId;\n    strcpy( v->szCSDVersion, info.szCSDVersion );\n    return TRUE;\n}\n/***********************************************************************\n *           DebugBreak   (KERNEL.203)\n */\nvoid WINAPI DebugBreak16( CONTEXT *context )\n{\n/*\n    EXCEPTION_RECORD rec;\n\n    rec.ExceptionCode    = EXCEPTION_BREAKPOINT;\n    rec.ExceptionFlags   = 0;\n    rec.ExceptionRecord  = NULL;\n    rec.ExceptionAddress = (LPVOID)context->Eip;\n    rec.NumberParameters = 0;\n    NtRaiseException( &rec, context, TRUE );\n*/\n    __wine_call_int_handler(context, 3);\n}\n\n/***********************************************************************\n *           K329                    (KERNEL.329)\n *\n * TODO:\n * Should fill lpBuffer only if DBO_BUFFERFILL has been set by SetWinDebugInfo()\n */\nvoid WINAPI DebugFillBuffer(LPSTR lpBuffer, WORD wBytes)\n{\n    memset(lpBuffer, 0xf9 /* DBGFILL_BUFFER */, wBytes);\n}\n\n/***********************************************************************\n *           DiagQuery                          (KERNEL.339)\n *\n * returns TRUE if Win called with \"/b\" (bootlog.txt)\n */\nBOOL16 WINAPI DiagQuery16(void)\n{\n    return FALSE;\n}\n\n/***********************************************************************\n *           DiagOutput                         (KERNEL.340)\n *\n * writes a debug string into <windir>\\bootlog.txt\n */\nvoid WINAPI DiagOutput16(LPCSTR str)\n{\n    /* FIXME */\n    TRACE(\"DIAGOUTPUT:%s\\n\", debugstr_a(str));\n}\n\n/***********************************************************************\n *           hmemcpy   (KERNEL.348)\n */\nvoid WINAPI hmemcpy16( LPVOID dst, LPCVOID src, LONG count )\n{\n    memcpy( dst, src, count );\n}\n\n/***********************************************************************\n *           lstrcpyn   (KERNEL.353)\n */\nSEGPTR WINAPI lstrcpyn16( SEGPTR dst, LPCSTR src, INT16 n )\n{\n    if (!lstrcpynA( MapSL(dst), src, n )) return 0;\n    return dst;\n}\n\n/***********************************************************************\n *           lstrcatn   (KERNEL.352)\n */\nSEGPTR WINAPI lstrcatn16( SEGPTR dst, LPCSTR src, INT16 n )\n{\n    LPSTR p = MapSL(dst);\n    LPSTR start = p;\n\n    while (*p) p++;\n    if ((n -= (p - start)) <= 0) return dst;\n    lstrcpynA( p, src, n );\n    return dst;\n}\n\n#if 0  /* Not used at this time. This is here for documentation only */\n\n/* WINDEBUGINFO flags values */\n#define WDI_OPTIONS         0x0001\n#define WDI_FILTER          0x0002\n#define WDI_ALLOCBREAK      0x0004\n\n/* dwOptions values */\n#define DBO_CHECKHEAP       0x0001\n#define DBO_BUFFERFILL      0x0004\n#define DBO_DISABLEGPTRAPPING 0x0010\n#define DBO_CHECKFREE       0x0020\n\n#define DBO_SILENT          0x8000\n\n#define DBO_TRACEBREAK      0x2000\n#define DBO_WARNINGBREAK    0x1000\n#define DBO_NOERRORBREAK    0x0800\n#define DBO_NOFATALBREAK    0x0400\n#define DBO_INT3BREAK       0x0100\n\n/* DebugOutput flags values */\n#define DBF_TRACE           0x0000\n#define DBF_WARNING         0x4000\n#define DBF_ERROR           0x8000\n#define DBF_FATAL           0xc000\n\n/* dwFilter values */\n#define DBF_KERNEL          0x1000\n#define DBF_KRN_MEMMAN      0x0001\n#define DBF_KRN_LOADMODULE  0x0002\n#define DBF_KRN_SEGMENTLOAD 0x0004\n#define DBF_USER            0x0800\n#define DBF_GDI             0x0400\n#define DBF_MMSYSTEM        0x0040\n#define DBF_PENWIN          0x0020\n#define DBF_APPLICATION     0x0008\n#define DBF_DRIVER          0x0010\n\n#endif /* NOLOGERROR */\n\n/***********************************************************************\n *          GetWinDebugInfo   (KERNEL.355)\n */\nBOOL16 WINAPI GetWinDebugInfo16(WINDEBUGINFO16 *lpwdi, UINT16 flags)\n{\n    FIXME(\"(%p,%d): stub returning FALSE\\n\", lpwdi, flags);\n    /* FALSE means not in debugging mode/version */\n    /* Can this type of debugging be used in wine ? */\n    /* Constants: WDI_OPTIONS WDI_FILTER WDI_ALLOCBREAK */\n    return FALSE;\n}\n\n/***********************************************************************\n *          SetWinDebugInfo   (KERNEL.356)\n */\nBOOL16 WINAPI SetWinDebugInfo16(WINDEBUGINFO16 *lpwdi)\n{\n    FIXME(\"(%p): stub returning FALSE\\n\", lpwdi);\n    /* FALSE means not in debugging mode/version */\n    /* Can this type of debugging be used in wine ? */\n    /* Constants: WDI_OPTIONS WDI_FILTER WDI_ALLOCBREAK */\n    return FALSE;\n}\n\n/***********************************************************************\n *           UnicodeToAnsi   (KERNEL.434)\n */\nINT16 WINAPI UnicodeToAnsi16( LPCWSTR src, LPSTR dst, INT16 codepage )\n{\n    if ( codepage == -1 ) codepage = CP_ACP;\n    return WideCharToMultiByte( codepage, 0, src, -1, dst, 0x7fffffff, NULL, NULL );\n}\n\n/***********************************************************************\n *       VWin32_EventCreate\t(KERNEL.442)\n */\nHANDLE WINAPI VWin32_EventCreate(VOID)\n{\n    HANDLE hEvent = CreateEventW( NULL, FALSE, 0, NULL );\n    return ConvertToGlobalHandle( hEvent );\n}\n\n/***********************************************************************\n *       VWin32_EventDestroy\t(KERNEL.443)\n */\nVOID WINAPI VWin32_EventDestroy(HANDLE event)\n{\n    CloseHandle( event );\n}\n\n/***********************************************************************\n *       VWin32_EventWait\t(KERNEL.450)\n */\nVOID WINAPI VWin32_EventWait(HANDLE event)\n{\n    DWORD mutex_count;\n\n    ReleaseThunkLock( &mutex_count );\n    WaitForSingleObject( event, INFINITE );\n    RestoreThunkLock( mutex_count );\n}\n\n/***********************************************************************\n *       VWin32_EventSet\t(KERNEL.451)\n *       KERNEL_479             (KERNEL.479)\n */\nVOID WINAPI VWin32_EventSet(HANDLE event)\n{\n    SetEvent( event );\n}\n\n/***********************************************************************\n *           GetProcAddress32   \t\t(KERNEL.453)\n */\nFARPROC WINAPI GetProcAddress32_16( HMODULE hModule, LPCSTR function )\n{\n    /* FIXME: we used to disable snoop when returning proc for Win16 subsystem */\n    return GetProcAddress( hModule, function );\n}\n\n/***********************************************************************\n *           CreateW32Event    (KERNEL.457)\n */\nHANDLE WINAPI CreateW32Event( BOOL manual_reset, BOOL initial_state )\n{\n    return CreateEventW( NULL, manual_reset, initial_state, NULL );\n}\n\n/***********************************************************************\n *           SetW32Event (KERNEL.458)\n */\nBOOL WINAPI SetW32Event( HANDLE handle )\n{\n    return SetEvent( handle );\n}\n\n/***********************************************************************\n *           ResetW32Event (KERNEL.459)\n */\nBOOL WINAPI ResetW32Event( HANDLE handle )\n{\n    return ResetEvent( handle );\n}\n\n/***********************************************************************\n *           WaitForSingleObject   (KERNEL.460)\n */\nDWORD WINAPI WaitForSingleObject16( HANDLE handle, DWORD timeout )\n{\n    DWORD retval, mutex_count;\n\n    ReleaseThunkLock( &mutex_count );\n    retval = WaitForSingleObject( handle, timeout );\n    RestoreThunkLock( mutex_count );\n    return retval;\n}\n\n/***********************************************************************\n *           WaitForMultipleObjects   (KERNEL.461)\n */\nDWORD WINAPI WaitForMultipleObjects16( DWORD count, const HANDLE *handles,\n                                       BOOL wait_all, DWORD timeout )\n{\n    DWORD retval, mutex_count;\n\n    ReleaseThunkLock( &mutex_count );\n    retval = WaitForMultipleObjectsEx( count, handles, wait_all, timeout, FALSE );\n    RestoreThunkLock( mutex_count );\n    return retval;\n}\n\n/***********************************************************************\n *\t\tGetCurrentThreadId (KERNEL.462)\n */\nDWORD WINAPI GetCurrentThreadId16(void)\n{\n    return GetCurrentThreadId();\n}\n/***********************************************************************\n *           ExitProcess   (KERNEL.466)\n */\nvoid WINAPI ExitProcess16( WORD status )\n{\n    DWORD count;\n    ReleaseThunkLock( &count );\n    ExitProcess( status );\n}\n/***********************************************************************\n *\t\tGetCurrentProcessId (KERNEL.471)\n */\nDWORD WINAPI GetCurrentProcessId16(void)\n{\n    return GetCurrentProcessId();\n}\n\n/*********************************************************************\n *           CloseW32Handle (KERNEL.474)\n */\nBOOL WINAPI CloseW32Handle( HANDLE handle )\n{\n    return CloseHandle( handle );\n}\n\n/***********************************************************************\n *           ConvertToGlobalHandle   (KERNEL.476)\n */\nHANDLE WINAPI ConvertToGlobalHandle16( HANDLE handle )\n{\n    return ConvertToGlobalHandle( handle );\n}\n\n/*********************************************************************\n *           MapProcessHandle   (KERNEL.483)\n */\nDWORD WINAPI MapProcessHandle( HANDLE hProcess )\n{\n    return GetProcessId( hProcess );\n}\n\n/***********************************************************************\n *           SetProcessDword    (KERNEL.484)\n * 'Of course you cannot directly access Windows internal structures'\n */\nvoid WINAPI SetProcessDword( DWORD dwProcessID, INT offset, DWORD value )\n{\n    TRACE(\"(%d, %d)\\n\", dwProcessID, offset );\n\n    if (dwProcessID && dwProcessID != GetCurrentProcessId())\n    {\n        ERR(\"%d: process %x not accessible\\n\", offset, dwProcessID);\n        return;\n    }\n\n    switch ( offset )\n    {\n    case GPD_APP_COMPAT_FLAGS:\n    case GPD_LOAD_DONE_EVENT:\n    case GPD_HINSTANCE16:\n    case GPD_WINDOWS_VERSION:\n    case GPD_THDB:\n    case GPD_PDB:\n    case GPD_STARTF_SHELLDATA:\n    case GPD_STARTF_HOTKEY:\n    case GPD_STARTF_SHOWWINDOW:\n    case GPD_STARTF_SIZE:\n    case GPD_STARTF_POSITION:\n    case GPD_STARTF_FLAGS:\n    case GPD_PARENT:\n    case GPD_FLAGS:\n        ERR(\"Not allowed to modify offset %d\\n\", offset );\n        break;\n    case GPD_USERDATA:\n        process_dword = value;\n        break;\n    default:\n        ERR(\"Unknown offset %d\\n\", offset );\n        break;\n    }\n}\n\n/***********************************************************************\n *           GetProcessDword    (KERNEL.485)\n * 'Of course you cannot directly access Windows internal structures'\n */\nDWORD WINAPI GetProcessDword( DWORD dwProcessID, INT offset )\n{\n    DWORD               x, y;\n    STARTUPINFOW        siw;\n\n    TRACE(\"(%d, %d)\\n\", dwProcessID, offset );\n\n    if (dwProcessID && dwProcessID != GetCurrentProcessId())\n    {\n        ERR(\"%d: process %x not accessible\\n\", offset, dwProcessID);\n        return 0;\n    }\n\n    switch ( offset )\n    {\n    case GPD_APP_COMPAT_FLAGS:\n        return GetAppCompatFlags16(0);\n    case GPD_LOAD_DONE_EVENT:\n        return 0;\n    case GPD_HINSTANCE16:\n        return GetTaskDS16();\n    case GPD_WINDOWS_VERSION:\n        return GetExeVersion16();\n    case GPD_THDB:\n        return (DWORD_PTR)NtCurrentTeb() - 0x10 /* FIXME */;\n    case GPD_PDB:\n        return (DWORD_PTR)NtCurrentTeb()->Peb; /* FIXME: truncating a pointer */\n    case GPD_STARTF_SHELLDATA: /* return stdoutput handle from startupinfo ??? */\n        GetStartupInfoW(&siw);\n        return HandleToULong(siw.hStdOutput);\n    case GPD_STARTF_HOTKEY: /* return stdinput handle from startupinfo ??? */\n        GetStartupInfoW(&siw);\n        return HandleToULong(siw.hStdInput);\n    case GPD_STARTF_SHOWWINDOW:\n        GetStartupInfoW(&siw);\n        return siw.wShowWindow;\n    case GPD_STARTF_SIZE:\n        GetStartupInfoW(&siw);\n        x = siw.dwXSize;\n        if ( (INT)x == CW_USEDEFAULT ) x = CW_USEDEFAULT16;\n        y = siw.dwYSize;\n        if ( (INT)y == CW_USEDEFAULT ) y = CW_USEDEFAULT16;\n        return MAKELONG( x, y );\n    case GPD_STARTF_POSITION:\n        GetStartupInfoW(&siw);\n        x = siw.dwX;\n        if ( (INT)x == CW_USEDEFAULT ) x = CW_USEDEFAULT16;\n        y = siw.dwY;\n        if ( (INT)y == CW_USEDEFAULT ) y = CW_USEDEFAULT16;\n        return MAKELONG( x, y );\n    case GPD_STARTF_FLAGS:\n        GetStartupInfoW(&siw);\n        return siw.dwFlags;\n    case GPD_PARENT:\n        return 0;\n    case GPD_FLAGS:\n        return GetProcessFlags(0);\n    case GPD_USERDATA:\n        return process_dword;\n    default:\n        ERR(\"Unknown offset %d\\n\", offset );\n        return 0;\n    }\n}\n\n/***********************************************************************\n *           FreeLibrary32 (KERNEL.486)\n */\nBOOL WINAPI FreeLibrary32_16( HINSTANCE module )\n{\n    return FreeLibrary( module );\n}\n\n/***********************************************************************\n *              GetModuleFileName32     (KERNEL.487)\n */\nDWORD WINAPI GetModuleFileName32_16( HMODULE module, LPSTR buffer, DWORD size )\n{\n    return GetModuleFileNameA( module, buffer, size );\n}\n\n/***********************************************************************\n *              GetModuleHandle32        (KERNEL.488)\n */\nHMODULE WINAPI GetModuleHandle32_16(LPCSTR module)\n{\n    return GetModuleHandleA( module );\n}\n\n/***********************************************************************\n *\t\tRegisterServiceProcess (KERNEL.491)\n */\nDWORD WINAPI RegisterServiceProcess16( DWORD dwProcessId, DWORD dwType )\n{\n    return 1; /* success */\n}\n\n/***********************************************************************\n *           WaitForMultipleObjectsEx   (KERNEL.495)\n */\nDWORD WINAPI WaitForMultipleObjectsEx16( DWORD count, const HANDLE *handles,\n                                         BOOL wait_all, DWORD timeout, BOOL alertable )\n{\n    DWORD retval, mutex_count;\n\n    ReleaseThunkLock( &mutex_count );\n    retval = WaitForMultipleObjectsEx( count, handles, wait_all, timeout, alertable );\n    RestoreThunkLock( mutex_count );\n    return retval;\n}\n\n/**********************************************************************\n * VWin32_BoostThreadGroup   (KERNEL.535)\n */\nVOID WINAPI VWin32_BoostThreadGroup( DWORD threadId, INT boost )\n{\n    FIXME(\"(0x%08x,%d): stub\\n\", threadId, boost);\n}\n\n\n/**********************************************************************\n * VWin32_BoostThreadStatic   (KERNEL.536)\n */\nVOID WINAPI VWin32_BoostThreadStatic( DWORD threadId, INT boost )\n{\n    FIXME(\"(0x%08x,%d): stub\\n\", threadId, boost);\n}\n\n/***********************************************************************\n *\t\tEnableDos (KERNEL.41)\n *\t\tDisableDos (KERNEL.42)\n *\t\tGetLastDiskChange (KERNEL.98)\n *\t\tValidateCodeSegments (KERNEL.100)\n *\t\tKbdRst (KERNEL.123)\n *\t\tEnableKernel (KERNEL.124)\n *\t\tDisableKernel (KERNEL.125)\n *\t\tValidateFreeSpaces (KERNEL.200)\n *\t\tK237 (KERNEL.237)\n *\t\tBUNNY_351 (KERNEL.351)\n *\t\tPIGLET_361 (KERNEL.361)\n *\n * Entry point for kernel functions that do nothing.\n */\nLONG WINAPI KERNEL_nop(void)\n{\n    return 0;\n}\n\n/***********************************************************************\n *           ToolHelpHook                             (KERNEL.341)\n *\tsee \"Undocumented Windows\"\n */\nFARPROC16 WINAPI ToolHelpHook16(FARPROC16 func)\n{\n    static FARPROC16 hook;\n\n    FIXME(\"(%p), stub.\\n\", func);\n    return InterlockedExchangePointer( (void **)&hook, func );\n}\n\n/* thunk for 16-bit CreateThread */\nstruct thread_args\n{\n    FARPROC16 proc;\n    DWORD     param;\n};\n\nstatic DWORD CALLBACK start_thread16( LPVOID threadArgs )\n{\n    struct thread_args args = *(struct thread_args *)threadArgs;\n    HeapFree( GetProcessHeap(), 0, threadArgs );\n    return K32WOWCallback16( (DWORD)args.proc, args.param );\n}\n\n/***********************************************************************\n *           CreateThread16   (KERNEL.441)\n */\nHANDLE WINAPI CreateThread16( SECURITY_ATTRIBUTES *sa, DWORD stack,\n                              FARPROC16 start, SEGPTR param,\n                              DWORD flags, LPDWORD id )\n{\n    struct thread_args *args = HeapAlloc( GetProcessHeap(), 0, sizeof(*args) );\n    if (!args) return INVALID_HANDLE_VALUE;\n    args->proc = start;\n    args->param = param;\n    return CreateThread( sa, stack, start_thread16, args, flags, id );\n}\n\n/***********************************************************************\n *           _DebugOutput                    (KERNEL.328)\n */\nvoid WINAPIV _DebugOutput( WORD flags, LPCSTR spec, VA_LIST16 valist )\n{\n    char caller[101];\n\n    /* Decode caller address */\n    if (!GetModuleName16( GetExePtr(CURRENT_STACK16->cs), caller, sizeof(caller) ))\n        sprintf( caller, \"%04X:%04X\", CURRENT_STACK16->cs, CURRENT_STACK16->ip );\n\n    /* FIXME: cannot use wvsnprintf16 from kernel */\n    /* wvsnprintf16( temp, sizeof(temp), spec, valist ); */\n\n    /* Output */\n    FIXME(\"%s %04x %s\\n\", caller, flags, debugstr_a(spec) );\n}\n\n\n\n#define FRAME_FAR 0\n#define FRAME_NEAR 1\nvoid fill_stack_trace_entry(STACKTRACEENTRY *ste)\n{\n    ste->hModule = GetExePtr(ste->wCS);\n    ste->wSegment = GLOBAL_GetSegNum(ste->wCS);\n}\n/*\n * StackTrace:\n * 1.KRNL386.EXE!WAITEVENT+0x46(win31)\n * 2.USER.EXE\n * 3....\n */\nstatic SEGPTR waitevent;\n/***********************************************************************\n *\t\tStackTraceFirst (TOOLHELP.66)\n */\nBOOL16 WINAPI StackTraceFirst16(STACKTRACEENTRY *ste, HTASK16 htask)\n{\n    if (ste->dwSize != sizeof(*ste))\n        return 0;\n    TDB *tdb = (TDB*)GlobalLock16(htask);\n    if (!waitevent)\n        waitevent = GetProcAddress16(GetModuleHandle16(\"KERNEL\"), \"WAITEVENT\");\n    if (GetCurrentTask() == htask)\n        return FALSE;\n    SEGPTR stack16 = PtrToUlong(TebTlsGetValue(tdb->teb, WOW32ReservedTls));\n    STACK16FRAME *frm = ((STACK16FRAME*)MapSL(stack16));\n    ste->hTask = htask;\n    ste->wBP = OFFSETOF(stack16) + FIELD_OFFSET(STACK16FRAME, bp);\n    ste->wFlags = FRAME_FAR;\n    ste->wSS = SELECTOROF(stack16);\n    ste->wIP = OFFSETOF(waitevent);\n    ste->wCS = SELECTOROF(waitevent);\n    fill_stack_trace_entry(ste);\n    return TRUE;\n}\n\n/***********************************************************************\n *\t\tStackTraceCSIPFirst (TOOLHELP.67)\n */\nBOOL16 WINAPI StackTraceCSIPFirst16(STACKTRACEENTRY *ste, WORD wSS, WORD wCS, WORD wIP, WORD wBP)\n{\n    if (ste->dwSize != sizeof(*ste))\n        return 0;\n    ste->hTask = GetCurrentTask();\n    ste->wSS = wSS;\n    ste->wCS = wCS;\n    ste->wIP = wIP;\n    ste->wBP = wBP;\n    ste->wFlags = FRAME_FAR;\n    fill_stack_trace_entry(ste);\n    return TRUE;\n}\n\n/***********************************************************************\n *\t\tStackTraceNext (TOOLHELP.68)\n */\nBOOL16 WINAPI StackTraceNext16(STACKTRACEENTRY *ste)\n{\n    if (ste->dwSize != sizeof(*ste))\n        return 0;\n    LPWORD s = (LPWORD)MapSL(MAKESEGPTR(ste->wSS, ste->wBP));\n    DWORD old_ebp = *s;\n    DWORD ret_addr = *(LPDWORD)(s + 1);\n    if (!waitevent)\n        waitevent = GetProcAddress16(GetModuleHandle16(\"KERNEL\"), \"WAITEVENT\");\n    if (ste->wBP >= old_ebp || ste->wBP == 0 || IsBadReadPtr16(MAKESEGPTR(ste->wSS, old_ebp), 6))\n        return FALSE;\n    if (MAKESEGPTR(ste->wCS, ste->wIP) == waitevent)\n    {\n        TDB *tdb = (TDB*)GlobalLock16(ste->hTask);\n        SEGPTR stack16 = PtrToUlong(TebTlsGetValue(tdb->teb, WOW32ReservedTls));\n        STACK16FRAME *frm = ((STACK16FRAME*)MapSL(stack16));\n        ste->wIP = frm->callfrom_ip;\n        ste->wCS = frm->module_cs;\n        return TRUE;\n    }\n    ste->wIP = OFFSETOF(ret_addr);\n    if (IsBadCodePtr16(ret_addr))\n        ste->wFlags = FRAME_NEAR;\n    else\n    {\n        ste->wCS = SELECTOROF(ret_addr);\n        ste->wFlags = FRAME_FAR;\n    }\n    ste->wBP = old_ebp;\n    fill_stack_trace_entry(ste);\n    return TRUE;\n}\n\n/***********************************************************************\n *           TaskSetCSIP16                    (TOOLHELP.81)\n */\nBOOL WINAPI TaskSetCSIP16(HTASK16 htask, WORD cs, WORD ip)\n{\n    TDB *tdb = (TDB*)GlobalLock16(htask);\n    if (GetCurrentTask() == htask)\n        return FALSE;\n    STACK16FRAME *frm = ((STACK16FRAME*)MapSL(PtrToUlong(TebTlsGetValue(tdb->teb, WOW32ReservedTls))));\n    frm->cs = cs;\n    frm->ip = ip;\n    return TRUE;\n}\n\n/***********************************************************************\n *           TaskGetCSIP16                    (TOOLHELP.82)\n */\nDWORD WINAPI TaskGetCSIP16(HTASK16 htask)\n{\n    TDB *tdb = (TDB*)GlobalLock16(htask);\n    if (GetCurrentTask() == htask)\n        return 0;\n    STACK16FRAME *frm = ((STACK16FRAME*)MapSL(PtrToUlong(TebTlsGetValue(tdb->teb, WOW32ReservedTls))));\n    return MAKESEGPTR(frm->cs, frm->ip);\n}\n\n/***********************************************************************\n *           TaskSwitch16                    (TOOLHELP.83)\n */\nBOOL WINAPI TaskSwitch16(HTASK16 htask, SEGPTR dwNewCSIP)\n{\n    BOOL s = TaskSetCSIP16(htask, SELECTOROF(dwNewCSIP), OFFSETOF(dwNewCSIP));\n    if (s)\n    {\n        PostThreadMessageA(HTASK_32(htask), 0, 0, 0);\n        DirectedYield16(htask);\n    }\n    return s;\n}\n"
  },
  {
    "path": "krnl386/kernel16_private.h",
    "content": "/*\n * Kernel 16-bit private definitions\n *\n * Copyright 1995 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_KERNEL16_PRIVATE_H\n#define __WINE_KERNEL16_PRIVATE_H\n#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))\n#define USE_NATIVE\n#ifdef USE_NATIVE\n//#define NtCurrentTeb NtCurrentTeb_WINTERNL_H\n#define IMAGE_OS2_SIGNATURE_LX 0x584C     /* LX */\n#endif\n#include \"wine/winbase16.h\"\n//#include \"windows/winreg.h\"\n//#include \"windows/winternl.h\"\n#ifdef USE_NATIVE\n#undef _TEB\n#undef TEB\n#undef PTEB\n#undef _PEB\n#undef PEB\n#undef PPEB\n#undef NtCurrentTeb\n#undef _EXCEPTION_REGISTRATION_RECORD\n#undef EXCEPTION_REGISTRATION_RECORD\n#undef _SYSTEM_BASIC_INFORMATION\n#undef SYSTEM_BASIC_INFORMATION\n#undef PSYSTEM_BASIC_INFORMATION\n#define FileDirectoryInformation FileDirectoryInformation__\n#define _FILE_INFORMATION_CLASS _FILE_INFORMATION_CLASS__\n#define FILE_INFORMATION_CLASS FILE_INFORMATION_CLASS__\n#define _RTL_USER_PROCESS_PARAMETERS _RTL_USER_PROCESS_PARAMETERS__\n#define RTL_USER_PROCESS_PARAMETERS RTL_USER_PROCESS_PARAMETERS__\n#define PRTL_USER_PROCESS_PARAMETERS PRTL_USER_PROCESS_PARAMETERS__\n//#define _NT_TIB _NT_TIB__\n//#define NT_TIB NT_TIB__\n//#define PNT_TIB PNT_TIB__\n#define _SYSTEM_BASIC_INFORMATION _SYSTEM_BASIC_INFORMATION__\n#define SYSTEM_BASIC_INFORMATION SYSTEM_BASIC_INFORMATION__\n#define PSYSTEM_BASIC_INFORMATION PSYSTEM_BASIC_INFORMATION__\n//#define _EXCEPTION_REGISTRATION_RECORD _EXCEPTION_REGISTRATION_RECORD__\n//#define EXCEPTION_REGISTRATION_RECORD EXCEPTION_REGISTRATION_RECORD__\n#define _TEB _TEB_WINTERNL_H\n#define TEB TEB_WINTERNL_H\n#define PTEB PTEB_WINTERNL_H\n#define _PEB _PEB_WINTERNL_H\n#define PEB PEB_WINTERNL_H\n#define PPEB PPEB_WINTERNL_H\n#define NtCurrentTeb NtCurrentTeb__\n#undef _WINTERNL_\n#include \"winreg.h\"\n#include \"winternl.h\"\n#undef _TEB\n#undef TEB\n#undef PTEB\n#undef _PEB\n#undef PEB\n#undef PPEB\n#undef NtCurrentTeb\n#undef _EXCEPTION_REGISTRATION_RECORD\n#undef EXCEPTION_REGISTRATION_RECORD\n#undef _SYSTEM_BASIC_INFORMATION\n#undef SYSTEM_BASIC_INFORMATION\n#undef PSYSTEM_BASIC_INFORMATION\n#undef _RTL_USER_PROCESS_PARAMETERS\n#undef RTL_USER_PROCESS_PARAMETERS\n#undef PRTL_USER_PROCESS_PARAMETERS\n#undef _FILE_INFORMATION_CLASS\n#undef FILE_INFORMATION_CLASS\n#undef FileDirectoryInformation\n\n\n#undef _SYSTEM_BASIC_INFORMATION__\n#undef SYSTEM_BASIC_INFORMATION__\n#undef PSYSTEM_BASIC_INFORMATION__\n#undef _EXCEPTION_REGISTRATION_RECORD__\n#undef EXCEPTION_REGISTRATION_RECORD__\n#undef _TEB_WINTERNL_H\n#undef TEB_WINTERNL_H\n#undef PTEB_WINTERNL_H\n#undef _PEB_WINTERNL_H\n#undef PEB_WINTERNL_H\n#undef PPEB_WINTERNL_H\n#undef NtCurrentTeb__\n\n#undef _NT_TIB\n#undef NT_TIB\n#undef PNT_TIB\n#undef _SYSTEM_BASIC_INFORMATION //_SYSTEM_BASIC_INFORMATION__\n#undef SYSTEM_BASIC_INFORMATION //SYSTEM_BASIC_INFORMATION__\n#undef PSYSTEM_BASIC_INFORMATION //PSYSTEM_BASIC_INFORMATION__\n#undef _EXCEPTION_REGISTRATION_RECORD //_EXCEPTION_REGISTRATION_RECORD__\n#undef EXCEPTION_REGISTRATION_RECORD //EXCEPTION_REGISTRATION_RECORD__\n#undef _TEB //_TEB_WINTERNL_H\n#undef TEB //TEB_WINTERNL_H\n#undef PTEB //PTEB_WINTERNL_H\n#undef _PEB //_PEB_WINTERNL_H\n#undef PEB //PEB_WINTERNL_H\n#undef PPEB//// PPEB_WINTERNL_H\n#undef NtCurrentTeb// NtCurrentTeb__\n#ifdef _TEB\n#error aaa\n#endif\n\ntypedef struct _GDI_TEB_BATCH\n{\n\tULONG  Offset;\n\tHANDLE HDC;\n\tULONG  Buffer[0x136];\n} GDI_TEB_BATCH;\n\ntypedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME\n{\n\tstruct _RTL_ACTIVATION_CONTEXT_STACK_FRAME *Previous;\n\tstruct _ACTIVATION_CONTEXT                 *ActivationContext;\n\tULONG                                       Flags;\n} RTL_ACTIVATION_CONTEXT_STACK_FRAME, *PRTL_ACTIVATION_CONTEXT_STACK_FRAME;\ntypedef struct _ACTIVATION_CONTEXT_STACK\n{\n\tULONG                               Flags;\n\tULONG                               NextCookieSequenceNumber;\n\tRTL_ACTIVATION_CONTEXT_STACK_FRAME *ActiveFrame;\n\tLIST_ENTRY                          FrameListCache;\n} ACTIVATION_CONTEXT_STACK, *PACTIVATION_CONTEXT_STACK;\n\ntypedef struct tagRTL_BITMAP {\n\tULONG  SizeOfBitMap; /* Number of bits in the bitmap */\n\tPULONG Buffer; /* Bitmap data, assumed sized to a DWORD boundary */\n} RTL_BITMAP, *PRTL_BITMAP;\n\ntypedef struct RTL_DRIVE_LETTER_CURDIR\n{\n\tUSHORT              Flags;\n\tUSHORT              Length;\n\tULONG               TimeStamp;\n\tUNICODE_STRING      DosPath;\n} RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;\ntypedef struct _CURDIR\n{\n\tUNICODE_STRING DosPath;\n\tPVOID Handle;\n} CURDIR, *PCURDIR;\ntypedef struct _RTL_USER_PROCESS_PARAMETERS\n{\n\tULONG               AllocationSize;\n\tULONG               Size;\n\tULONG               Flags;\n\tULONG               DebugFlags;\n\tHANDLE              ConsoleHandle;\n\tULONG               ConsoleFlags;\n\tHANDLE              hStdInput;\n\tHANDLE              hStdOutput;\n\tHANDLE              hStdError;\n\tCURDIR              CurrentDirectory;\n\tUNICODE_STRING      DllPath;\n\tUNICODE_STRING      ImagePathName;\n\tUNICODE_STRING      CommandLine;\n\tPWSTR               Environment;\n\tULONG               dwX;\n\tULONG               dwY;\n\tULONG               dwXSize;\n\tULONG               dwYSize;\n\tULONG               dwXCountChars;\n\tULONG               dwYCountChars;\n\tULONG               dwFillAttribute;\n\tULONG               dwFlags;\n\tULONG               wShowWindow;\n\tUNICODE_STRING      WindowTitle;\n\tUNICODE_STRING      Desktop;\n\tUNICODE_STRING      ShellInfo;\n\tUNICODE_STRING      RuntimeInfo;\n\tRTL_DRIVE_LETTER_CURDIR DLCurrentDirectory[0x20];\n} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;\n#define WOW32RESERVED_TLS_INDEX 0x20\n__declspec(dllexport) PVOID getWOW32Reserved();\n__declspec(dllexport) PVOID setWOW32Reserved(PVOID);\n/*\n* The exception frame, used for registering exception handlers\n* Win32 cares only about this, but compilers generally emit\n* larger exception frames for their own use.\n*/\n/*\nstruct _EXCEPTION_REGISTRATION_RECORD;\n\ntypedef DWORD(*PEXCEPTION_HANDLER)(PEXCEPTION_RECORD, struct _EXCEPTION_REGISTRATION_RECORD*,\n\tPCONTEXT, struct _EXCEPTION_REGISTRATION_RECORD **);\ntypedef struct _EXCEPTION_REGISTRATION_RECORD\n{\n\tstruct _EXCEPTION_REGISTRATION_RECORD *Prev;\n\tPEXCEPTION_HANDLER       Handler;\n} EXCEPTION_REGISTRATION_RECORD;*/\n#undef _PEB\n/***********************************************************************\n* PEB data structure\n*/\ntypedef struct _PEB\n{                                                                 /* win32/win64 */\n\tBOOLEAN                      InheritedAddressSpace;             /* 000/000 */\n\tBOOLEAN                      ReadImageFileExecOptions;          /* 001/001 */\n\tBOOLEAN                      BeingDebugged;                     /* 002/002 */\n\tBOOLEAN                      SpareBool;                         /* 003/003 */\n\tHANDLE                       Mutant;                            /* 004/008 */\n\tHMODULE                      ImageBaseAddress;                  /* 008/010 */\n\tPPEB_LDR_DATA                LdrData;                           /* 00c/018 */\n\tRTL_USER_PROCESS_PARAMETERS *ProcessParameters;                 /* 010/020 */\n\tPVOID                        SubSystemData;                     /* 014/028 */\n\tHANDLE                       ProcessHeap;                       /* 018/030 */\n\tPRTL_CRITICAL_SECTION        FastPebLock;                       /* 01c/038 */\n\tPVOID /*PPEBLOCKROUTINE*/    FastPebLockRoutine;                /* 020/040 */\n\tPVOID /*PPEBLOCKROUTINE*/    FastPebUnlockRoutine;              /* 024/048 */\n\tULONG                        EnvironmentUpdateCount;            /* 028/050 */\n\tPVOID                        KernelCallbackTable;               /* 02c/058 */\n\tULONG                        Reserved[2];                       /* 030/060 */\n\tPVOID /*PPEB_FREE_BLOCK*/    FreeList;                          /* 038/068 */\n\tULONG                        TlsExpansionCounter;               /* 03c/070 */\n\tPRTL_BITMAP                  TlsBitmap;                         /* 040/078 */\n\tULONG                        TlsBitmapBits[2];                  /* 044/080 */\n\tPVOID                        ReadOnlySharedMemoryBase;          /* 04c/088 */\n\tPVOID                        ReadOnlySharedMemoryHeap;          /* 050/090 */\n\tPVOID                       *ReadOnlyStaticServerData;          /* 054/098 */\n\tPVOID                        AnsiCodePageData;                  /* 058/0a0 */\n\tPVOID                        OemCodePageData;                   /* 05c/0a8 */\n\tPVOID                        UnicodeCaseTableData;              /* 060/0b0 */\n\tULONG                        NumberOfProcessors;                /* 064/0b8 */\n\tULONG                        NtGlobalFlag;                      /* 068/0bc */\n\tLARGE_INTEGER                CriticalSectionTimeout;            /* 070/0c0 */\n\tSIZE_T                       HeapSegmentReserve;                /* 078/0c8 */\n\tSIZE_T                       HeapSegmentCommit;                 /* 07c/0d0 */\n\tSIZE_T                       HeapDeCommitTotalFreeThreshold;    /* 080/0d8 */\n\tSIZE_T                       HeapDeCommitFreeBlockThreshold;    /* 084/0e0 */\n\tULONG                        NumberOfHeaps;                     /* 088/0e8 */\n\tULONG                        MaximumNumberOfHeaps;              /* 08c/0ec */\n\tPVOID                       *ProcessHeaps;                      /* 090/0f0 */\n\tPVOID                        GdiSharedHandleTable;              /* 094/0f8 */\n\tPVOID                        ProcessStarterHelper;              /* 098/100 */\n\tPVOID                        GdiDCAttributeList;                /* 09c/108 */\n\tPVOID                        LoaderLock;                        /* 0a0/110 */\n\tULONG                        OSMajorVersion;                    /* 0a4/118 */\n\tULONG                        OSMinorVersion;                    /* 0a8/11c */\n\tULONG                        OSBuildNumber;                     /* 0ac/120 */\n\tULONG                        OSPlatformId;                      /* 0b0/124 */\n\tULONG                        ImageSubSystem;                    /* 0b4/128 */\n\tULONG                        ImageSubSystemMajorVersion;        /* 0b8/12c */\n\tULONG                        ImageSubSystemMinorVersion;        /* 0bc/130 */\n\tULONG                        ImageProcessAffinityMask;          /* 0c0/134 */\n\tHANDLE                       GdiHandleBuffer[28];               /* 0c4/138 */\n\tULONG                        unknown[6];                        /* 134/218 */\n\tPVOID                        PostProcessInitRoutine;            /* 14c/230 */\n\tPRTL_BITMAP                  TlsExpansionBitmap;                /* 150/238 */\n\tULONG                        TlsExpansionBitmapBits[32];        /* 154/240 */\n\tULONG                        SessionId;                         /* 1d4/2c0 */\n\tULARGE_INTEGER               AppCompatFlags;                    /* 1d8/2c8 */\n\tULARGE_INTEGER               AppCompatFlagsUser;                /* 1e0/2d0 */\n\tPVOID                        ShimData;                          /* 1e8/2d8 */\n\tPVOID                        AppCompatInfo;                     /* 1ec/2e0 */\n\tUNICODE_STRING               CSDVersion;                        /* 1f0/2e8 */\n\tPVOID                        ActivationContextData;             /* 1f8/2f8 */\n\tPVOID                        ProcessAssemblyStorageMap;         /* 1fc/300 */\n\tPVOID                        SystemDefaultActivationData;       /* 200/308 */\n\tPVOID                        SystemAssemblyStorageMap;          /* 204/310 */\n\tSIZE_T                       MinimumStackCommit;                /* 208/318 */\n\tPVOID                       *FlsCallback;                       /* 20c/320 */\n\tLIST_ENTRY                   FlsListHead;                       /* 210/328 */\n\tPRTL_BITMAP                  FlsBitmap;                         /* 218/338 */\n\tULONG                        FlsBitmapBits[4];                  /* 21c/340 */\n} PEB, *PPEB;\n/***********************************************************************\n* TEB data structure\n*/\ntypedef struct _TEB\n{                                                                 /* win32/win64 */\n\tNT_TIB                       Tib;                               /* 000/0000 */\n\tPVOID                        EnvironmentPointer;                /* 01c/0038 */\n\tCLIENT_ID                    ClientId;                          /* 020/0040 */\n\tPVOID                        ActiveRpcHandle;                   /* 028/0050 */\n\tPVOID                        ThreadLocalStoragePointer;         /* 02c/0058 */\n\tPPEB                         Peb;                               /* 030/0060 */\n\tULONG                        LastErrorValue;                    /* 034/0068 */\n\tULONG                        CountOfOwnedCriticalSections;      /* 038/006c */\n\tPVOID                        CsrClientThread;                   /* 03c/0070 */\n\tPVOID                        Win32ThreadInfo;                   /* 040/0078 */\n\tULONG                        Win32ClientInfo[31];               /* 044/0080 used for user32 private data in Wine */\n\tPVOID                        __WOW32Reserved__;                     /* 0c0/0100 */\n\tULONG                        CurrentLocale;                     /* 0c4/0108 */\n\tULONG                        FpSoftwareStatusRegister;          /* 0c8/010c */\n\tPVOID                        SystemReserved1[54];               /* 0cc/0110 used for kernel32 private data in Wine */\n\tLONG                         ExceptionCode;                     /* 1a4/02c0 */\n\tACTIVATION_CONTEXT_STACK     ActivationContextStack;            /* 1a8/02c8 */\n\tBYTE                         SpareBytes1[24];                   /* 1bc/02e8 used for ntdll private data in Wine */\n\tPVOID                        SystemReserved2[10];               /* 1d4/0300 used for ntdll private data in Wine =>x86_thread_data(dlls/ntdll/signal_i386.c) */\n\tGDI_TEB_BATCH                GdiTebBatch;                       /* 1fc/0350 used for vm86 private data in Wine */\n\tHANDLE                       gdiRgn;                            /* 6dc/0838 */\n\tHANDLE                       gdiPen;                            /* 6e0/0840 */\n\tHANDLE                       gdiBrush;                          /* 6e4/0848 */\n\tCLIENT_ID                    RealClientId;                      /* 6e8/0850 */\n\tHANDLE                       GdiCachedProcessHandle;            /* 6f0/0860 */\n\tULONG                        GdiClientPID;                      /* 6f4/0868 */\n\tULONG                        GdiClientTID;                      /* 6f8/086c */\n\tPVOID                        GdiThreadLocaleInfo;               /* 6fc/0870 */\n\tULONG                        UserReserved[5];                   /* 700/0878 */\n\tPVOID                        glDispachTable[280];               /* 714/0890 */\n\tPVOID                        glReserved1[26];                   /* b74/1150 */\n\tPVOID                        glReserved2;                       /* bdc/1220 */\n\tPVOID                        glSectionInfo;                     /* be0/1228 */\n\tPVOID                        glSection;                         /* be4/1230 */\n\tPVOID                        glTable;                           /* be8/1238 */\n\tPVOID                        glCurrentRC;                       /* bec/1240 */\n\tPVOID                        glContext;                         /* bf0/1248 */\n\tULONG                        LastStatusValue;                   /* bf4/1250 */\n\tUNICODE_STRING               StaticUnicodeString;               /* bf8/1258 used by advapi32 */\n\tWCHAR                        StaticUnicodeBuffer[261];          /* c00/1268 used by advapi32 */\n\tPVOID                        DeallocationStack;                 /* e0c/1478 */\n\tPVOID                        TlsSlots[64];                      /* e10/1480 */\n\tLIST_ENTRY                   TlsLinks;                          /* f10/1680 */\n\tPVOID                        Vdm;                               /* f18/1690 */\n\tPVOID                        ReservedForNtRpc;                  /* f1c/1698 */\n\tPVOID                        DbgSsReserved[2];                  /* f20/16a0 */\n\tULONG                        HardErrorDisabled;                 /* f28/16b0 */\n\tPVOID                        Instrumentation[16];               /* f2c/16b8 */\n\tPVOID                        WinSockData;                       /* f6c/1738 */\n\tULONG                        GdiBatchCount;                     /* f70/1740 */\n\tULONG                        Spare2;                            /* f74/1744 */\n\tPVOID                        Spare3;                            /* f78/1748 */\n\tPVOID                        Spare4;                            /* f7c/1750 */\n\tPVOID                        ReservedForOle;                    /* f80/1758 */\n\tULONG                        WaitingOnLoaderLock;               /* f84/1760 */\n\tPVOID                        Reserved5[3];                      /* f88/1768 */\n\tPVOID                       *TlsExpansionSlots;                 /* f94/1780 */\n\tULONG                        ImpersonationLocale;               /* f98/1788 */\n\tULONG                        IsImpersonating;                   /* f9c/178c */\n\tPVOID                        NlsCache;                          /* fa0/1790 */\n\tPVOID                        ShimData;                          /* fa4/1798 */\n\tULONG                        HeapVirtualAffinity;               /* fa8/17a0 */\n\tPVOID                        CurrentTransactionHandle;          /* fac/17a8 */\n\tPVOID                        ActiveFrame;                       /* fb0/17b0 */\n#ifdef _WIN64\n\tPVOID                        unknown[2];                        /*     17b8 */\n#endif\n\tPVOID                       *FlsSlots;                          /* fb4/17c8 */\n} TEB, *PTEB;\n\n#ifdef _MSC_VER\n__inline struct _TEB * NtCurrentTeb(void) { return (struct _TEB *) (ULONG_PTR)__readfsdword(PcTeb); }\n#else\nstatic FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)\n{\n    struct _TEB *teb;\n    __asm__(\".byte 0x64\\n\\tmovl (0x18),%0\" : \"=r\" (teb));\n    return teb;\n}\n\n#endif\n/*************************************************************************\n* Loader structures\n*\n* Those are not part of standard Winternl.h\n*/\ntypedef struct _LDR_MODULE\n{\n\tLIST_ENTRY          InLoadOrderModuleList;\n\tLIST_ENTRY          InMemoryOrderModuleList;\n\tLIST_ENTRY          InInitializationOrderModuleList;\n\tvoid*               BaseAddress;\n\tvoid*               EntryPoint;\n\tULONG               SizeOfImage;\n\tUNICODE_STRING      FullDllName;\n\tUNICODE_STRING      BaseDllName;\n\tULONG               Flags;\n\tSHORT               LoadCount;\n\tSHORT               TlsIndex;\n\tHANDLE              SectionHandle;\n\tULONG               CheckSum;\n\tULONG               TimeDateStamp;\n\tHANDLE              ActivationContext;\n} LDR_MODULE, *PLDR_MODULE;\n/* those defines are (some of the) regular LDR_MODULE.Flags values */\n#define LDR_IMAGE_IS_DLL                0x00000004\n#define LDR_LOAD_IN_PROGRESS            0x00001000\n#define LDR_UNLOAD_IN_PROGRESS          0x00002000\n#define LDR_NO_DLL_CALLS                0x00040000\n#define LDR_PROCESS_ATTACHED            0x00080000\n#define LDR_MODULE_REBASED              0x00200000\n\n/* these ones is Wine specific */\n#define LDR_DONT_RESOLVE_REFS           0x40000000\n#define LDR_WINE_INTERNAL               0x80000000\n\n/* flag for LdrAddRefDll */\n#define LDR_ADDREF_DLL_PIN              0x00000001\n\n/* Wine extensions: call register function, context ptr is passed in the return value LPDWORD */\n#define WCB16_REGS       2\n#define WCB16_REGS_LONG  4  /* function uses 32-bit lret */\n/* Windows Exit Procedure flag values */\n#define\tWEP_FREE_DLL        0\n#define\tWEP_SYSTEM_EXIT     1\n//wine winbase.h\n#define OF_SEARCH             0x0400   /* Used without OF_REOPEN */\n/* GetTempFileName() Flags */\n#define TF_FORCEDRIVE\t        0x80\n//winnt.h\n/* This flag allows it to create heaps shared by all processes under win95,\nFIXME: correct name */\n#define HEAP_SHARED                     0x04000000\n//winternl.h\n\n/* System Information Class 0x00 */\n\ntypedef struct _SYSTEM_BASIC_INFORMATION {\n#ifdef __WINESRC__\n\tDWORD     unknown;\n\tULONG     KeMaximumIncrement;\n\tULONG     PageSize;\n\tULONG     MmNumberOfPhysicalPages;\n\tULONG     MmLowestPhysicalPage;\n\tULONG     MmHighestPhysicalPage;\n\tULONG_PTR AllocationGranularity;\n\tPVOID     LowestUserAddress;\n\tPVOID     HighestUserAddress;\n\tULONG_PTR ActiveProcessorsAffinityMask;\n\tBYTE      NumberOfProcessors;\n#else\n\tBYTE Reserved1[24];\n\tPVOID Reserved2[4];\n\tCCHAR NumberOfProcessors;\n#endif\n} SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;\n//wine winternl.h\n\ntypedef enum _KEY_VALUE_INFORMATION_CLASS {\n\tKeyValueBasicInformation,\n\tKeyValueFullInformation,\n\tKeyValuePartialInformation,\n\tKeyValueFullInformationAlign64,\n\tKeyValuePartialInformationAlign64\n} KEY_VALUE_INFORMATION_CLASS;\n#endif\ntypedef struct _KEY_VALUE_PARTIAL_INFORMATION {\n\tULONG TitleIndex;\n\tULONG Type;\n\tULONG DataLength;\n\tUCHAR Data[1];\n} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;\n/* FIXME: private structure for vm86 mode, stored in teb->GdiTebBatch */\ntypedef struct\n{\n\tDWORD        dpmi_vif;\n\tDWORD        vm86_pending;\n} WINE_VM86_TEB_INFO;\n\n__declspec(dllexport) WINE_VM86_TEB_INFO *getGdiTebBatch();\nstatic inline WINE_VM86_TEB_INFO *get_vm86_teb_info(void)\n{\n    return getGdiTebBatch();// (WINE_VM86_TEB_INFO *)&NtCurrentTeb()->GdiTebBatch;\n}\n\n/* The thread information for 16-bit threads */\n/* NtCurrentTeb()->SubSystemTib points to this */\ntypedef struct\n{\n\tvoid           *unknown;    /* 00 unknown */\n\tUNICODE_STRING *exe_name;   /* 04 exe module name */\n\n\t/* the following fields do not exist under Windows */\n\tUNICODE_STRING  exe_str;    /* exe name string pointed to by exe_name */\n\tCURDIR          curdir;     /* current directory */\n\tWCHAR           curdir_buffer[MAX_PATH];\n} WIN16_SUBSYSTEM_TIB;\n\n#include \"pshpack1.h\"\n\n/* In-memory module structure. See 'Windows Internals' p. 219 */\ntypedef struct _NE_MODULE\n{\n    WORD      ne_magic;         /* 00 'NE' signature */\n    WORD      count;            /* 02 Usage count (ne_ver/ne_rev on disk) */\n    WORD      ne_enttab;        /* 04 Near ptr to entry table */\n    HMODULE16 next;             /* 06 Selector to next module (ne_cbenttab on disk) */\n    WORD      dgroup_entry;     /* 08 Near ptr to segment entry for DGROUP (ne_crc on disk) */\n    WORD      fileinfo;         /* 0a Near ptr to file info (OFSTRUCT) (ne_crc on disk) */\n    WORD      ne_flags;         /* 0c Module flags */\n    WORD      ne_autodata;      /* 0e Logical segment for DGROUP */\n    WORD      ne_heap;          /* 10 Initial heap size */\n    WORD      ne_stack;         /* 12 Initial stack size */\n    DWORD     ne_csip;          /* 14 Initial cs:ip */\n    DWORD     ne_sssp;          /* 18 Initial ss:sp */\n    WORD      ne_cseg;          /* 1c Number of segments in segment table */\n    WORD      ne_cmod;          /* 1e Number of module references */\n    WORD      ne_cbnrestab;     /* 20 Size of non-resident names table */\n    WORD      ne_segtab;        /* 22 Near ptr to segment table */\n    WORD      ne_rsrctab;       /* 24 Near ptr to resource table */\n    WORD      ne_restab;        /* 26 Near ptr to resident names table */\n    WORD      ne_modtab;        /* 28 Near ptr to module reference table */\n    WORD      ne_imptab;        /* 2a Near ptr to imported names table */\n    DWORD     ne_nrestab;       /* 2c File offset of non-resident names table */\n    WORD      ne_cmovent;       /* 30 Number of moveable entries in entry table*/\n    WORD      ne_align;         /* 32 Alignment shift count */\n    WORD      ne_cres;          /* 34 # of resource segments */\n    BYTE      ne_exetyp;        /* 36 Operating system flags */\n    BYTE      ne_flagsothers;   /* 37 Misc. flags */\n    HANDLE16  dlls_to_init;     /* 38 List of DLLs to initialize (ne_pretthunks on disk) */\n    HANDLE16  nrname_handle;    /* 3a Handle to non-resident name table (ne_psegrefbytes on disk) */\n    WORD      ne_swaparea;      /* 3c Min. swap area size */\n    WORD      ne_expver;        /* 3e Expected Windows version */\n    /* From here, these are extra fields not present in normal Windows */\n    HMODULE   module32;         /* PE module handle for Win32 modules */\n    HMODULE   owner32;          /* PE module containing this one for 16-bit builtins */\n    HMODULE16 self;             /* Handle for this module */\n    WORD      self_loading_sel; /* Selector used for self-loading apps. */\n    LPVOID    rsrc32_map;       /* HRSRC 16->32 map (for 32-bit modules) */\n    LPCVOID   mapping;          /* mapping of the binary file */\n    SIZE_T    mapping_size;     /* size of the file mapping */\n} NE_MODULE;\n\ntypedef struct\n{\n    BYTE type;\n    BYTE flags;\n    BYTE segnum;\n    WORD offs;\n} ET_ENTRY;\n\ntypedef struct\n{\n    WORD first; /* ordinal */\n    WORD last;  /* ordinal */\n    WORD next;  /* bundle */\n} ET_BUNDLE;\n\n\n  /* In-memory segment table */\ntypedef struct\n{\n    WORD      filepos;   /* Position in file, in sectors */\n    WORD      size;      /* Segment size on disk */\n    WORD      flags;     /* Segment flags */\n    WORD      minsize;   /* Min. size of segment in memory */\n    HANDLE16  hSeg;      /* Selector or handle (selector - 1) of segment in memory */\n} SEGTABLEENTRY;\n\n/* this structure is always located at offset 0 of the DGROUP segment */\ntypedef struct\n{\n    WORD null;        /* Always 0 */\n    DWORD old_ss_sp;  /* Stack pointer; used by SwitchTaskTo() */\n    WORD heap;        /* Pointer to the local heap information (if any) */\n    WORD atomtable;   /* Pointer to the local atom table (if any) */\n    WORD stacktop;    /* Top of the stack */\n    WORD stackmin;    /* Lowest stack address used so far */\n    WORD stackbottom; /* Bottom of the stack */\n} INSTANCEDATA;\n\n/* relay entry points */\n\ntypedef struct\n{\n    BYTE   pushw_bp;               /* pushw %bp */\n    WORD   pushl;                  /* pushl $target */\n    void  *target;\n    BYTE   call;                   /* call CALLFROM16 */\n    short  callfrom16;\n} ENTRYPOINT16;\n\ntypedef struct\n{\n    WORD   pushl;                  /* pushl $relay */\n    void  *relay;\n    WORD   lcall;                  /* lcall __FLATCS__:glue */\n    void  *glue;\n    WORD   flatcs;\n    BYTE   ret[12];                 /* return sequence */\n    WORD   movl;                   /* movl arg_types[1],arg_types[0](%esi) */\n    DWORD  arg_types[2];           /* type of each argument */\n} CALLFROM16;\n\n/* THHOOK Kernel Data Structure */\ntypedef struct _THHOOK\n{\n    HANDLE16   hGlobalHeap;         /* 00 (handle BURGERMASTER) */\n    WORD       pGlobalHeap;         /* 02 (selector BURGERMASTER) */\n    HMODULE16  hExeHead;            /* 04 hFirstModule */\n    HMODULE16  hExeSweep;           /* 06 (unused) */\n    HANDLE16   TopPDB;              /* 08 (handle of KERNEL PDB) */\n    HANDLE16   HeadPDB;             /* 0A (first PDB in list) */\n    HANDLE16   TopSizePDB;          /* 0C (unused) */\n    HTASK16    HeadTDB;             /* 0E hFirstTask */\n    HTASK16    CurTDB;              /* 10 hCurrentTask */\n    HTASK16    LoadTDB;             /* 12 (unused) */\n    HTASK16    LockTDB;             /* 14 hLockedTask */\n    WORD       SelTableLen;         /* 16 (bytes) 0x2000 * 4 */\n    DWORD      SelTableStart;       /* 18 offset in hGlobalHeap */\n} THHOOK;\n\nextern LONG __wine_call_from_16(void);\nextern void __wine_call_from_16_regs(void);\n\nextern THHOOK *pThhook DECLSPEC_HIDDEN;\n\n#include \"poppack.h\"\n\n#define NE_SEG_TABLE(pModule) \\\n    ((SEGTABLEENTRY *)((char *)(pModule) + (pModule)->ne_segtab))\n\n#define NE_MODULE_NAME(pModule) \\\n    (((OFSTRUCT *)((char*)(pModule) + (pModule)->fileinfo))->szPathName)\n\n#define NE_GET_DATA(pModule,offset,size) \\\n    ((const void *)(((offset)+(size) <= pModule->mapping_size) ? \\\n                    (const char *)pModule->mapping + (offset) : NULL))\n\n#define NE_READ_DATA(pModule,buffer,offset,size) \\\n    (((offset)+(size) <= pModule->mapping_size) ? \\\n     (memcpy( buffer, (const char *)pModule->mapping + (offset), (size) ), TRUE) : FALSE)\n\n#define CURRENT_STACK16 ((STACK16FRAME*)MapSL(PtrToUlong(getWOW32Reserved())))\n#define CURRENT_DS      (CURRENT_STACK16->ds)\n\n/* push bytes on the 16-bit stack of a thread; return a segptr to the first pushed byte */\nstatic inline SEGPTR stack16_push( int size )\n{\n    STACK16FRAME *frame = CURRENT_STACK16;\n    memmove( (char*)frame - size, frame, sizeof(*frame) );\n\tsetWOW32Reserved((char *)getWOW32Reserved() - size);\n    return (SEGPTR)((char *)getWOW32Reserved() + sizeof(*frame));\n}\n\n/* pop bytes from the 16-bit stack of a thread */\nstatic inline void stack16_pop( int size )\n{\n    STACK16FRAME *frame = CURRENT_STACK16;\n    memmove( (char*)frame + size, frame, sizeof(*frame) );\n\tsetWOW32Reserved((char *)getWOW32Reserved() + size);\n}\n\n/* dosmem.c */\nextern BOOL   DOSMEM_Init(void) DECLSPEC_HIDDEN;\nextern BOOL   DOSMEM_InitDosMemory(void) DECLSPEC_HIDDEN;\nextern LPVOID DOSMEM_MapRealToLinear(DWORD) DECLSPEC_HIDDEN; /* real-mode to linear */\nextern LPVOID DOSMEM_MapDosToLinear(UINT) DECLSPEC_HIDDEN;   /* linear DOS to Wine */\nextern UINT   DOSMEM_MapLinearToDos(LPVOID) DECLSPEC_HIDDEN; /* linear Wine to DOS */\nextern BOOL   DOSMEM_MapDosLayout(void) DECLSPEC_HIDDEN;\nextern LPVOID DOSMEM_AllocBlock(UINT size, WORD* p) DECLSPEC_HIDDEN;\nextern BOOL   DOSMEM_FreeBlock(void* ptr) DECLSPEC_HIDDEN;\nextern UINT   DOSMEM_ResizeBlock(void* ptr, UINT size, BOOL exact) DECLSPEC_HIDDEN;\nextern UINT   DOSMEM_Available(void) DECLSPEC_HIDDEN;\n\n/* global16.c */\nextern HGLOBAL16 GLOBAL_CreateBlock( UINT16 flags, void *ptr, DWORD size,\n                                     HGLOBAL16 hOwner, unsigned char selflags, WORD sel ) DECLSPEC_HIDDEN;\nextern BOOL16 GLOBAL_FreeBlock( HGLOBAL16 handle ) DECLSPEC_HIDDEN;\nextern BOOL16 GLOBAL_MoveBlock( HGLOBAL16 handle, void *ptr, DWORD size ) DECLSPEC_HIDDEN;\nextern HGLOBAL16 GLOBAL_Alloc( WORD flags, DWORD size, HGLOBAL16 hOwner, unsigned char selflags, WORD sel ) DECLSPEC_HIDDEN;\n\n/* instr.c */\nextern DWORD __wine_emulate_instruction( EXCEPTION_RECORD *rec, CONTEXT *context ) DECLSPEC_HIDDEN;\nextern LONG CALLBACK INSTR_vectored_handler( EXCEPTION_POINTERS *ptrs ) DECLSPEC_HIDDEN;\n\n/* ne_module.c */\nextern NE_MODULE *NE_GetPtr( HMODULE16 hModule ) DECLSPEC_HIDDEN;\nextern WORD NE_GetOrdinal( HMODULE16 hModule, const char *name ) DECLSPEC_HIDDEN;\nextern FARPROC16 WINAPI NE_GetEntryPoint( HMODULE16 hModule, WORD ordinal ) DECLSPEC_HIDDEN;\nextern FARPROC16 NE_GetEntryPointEx( HMODULE16 hModule, WORD ordinal, BOOL16 snoop ) DECLSPEC_HIDDEN;\nextern BOOL16 NE_SetEntryPoint( HMODULE16 hModule, WORD ordinal, WORD offset ) DECLSPEC_HIDDEN;\nextern DWORD NE_StartTask(void) DECLSPEC_HIDDEN;\n\n/* ne_segment.c */\nextern BOOL NE_LoadSegment( NE_MODULE *pModule, WORD segnum ) DECLSPEC_HIDDEN;\nextern BOOL NE_LoadAllSegments( NE_MODULE *pModule ) DECLSPEC_HIDDEN;\nextern BOOL NE_CreateSegment( NE_MODULE *pModule, int segnum, WORD sel ) DECLSPEC_HIDDEN;\nextern BOOL NE_CreateAllSegments( NE_MODULE *pModule ) DECLSPEC_HIDDEN;\nextern HINSTANCE16 NE_GetInstance( NE_MODULE *pModule ) DECLSPEC_HIDDEN;\nextern void NE_InitializeDLLs( HMODULE16 hModule, SEGPTR cmdline ) DECLSPEC_HIDDEN;\nextern void NE_DllProcessAttach( HMODULE16 hModule ) DECLSPEC_HIDDEN;\nextern void NE_CallUserSignalProc( HMODULE16 hModule, UINT16 code, WORD arg1, WORD arg2, WORD arg3 ) DECLSPEC_HIDDEN;\n\n/* selector.c */\nextern WORD SELECTOR_AllocBlock( const void *base, DWORD size, unsigned char flags ) DECLSPEC_HIDDEN;\nextern WORD SELECTOR_ReallocBlock( WORD sel, const void *base, DWORD size ) DECLSPEC_HIDDEN;\nextern void SELECTOR_FreeBlock( WORD sel ) DECLSPEC_HIDDEN;\n#define IS_SELECTOR_32BIT(sel) \\\n   (wine_ldt_is_system(sel) || (wine_ldt_copy.flags[LOWORD(sel) >> 3] & WINE_LDT_FLAGS_32BIT))\n\n/* relay16.c */\nextern int relay_call_from_16( void *entry_point, unsigned char *args16, CONTEXT *context ) DECLSPEC_HIDDEN;\nextern void RELAY16_InitDebugLists(void) DECLSPEC_HIDDEN;\n\n/* snoop16.c */\nextern void SNOOP16_RegisterDLL(HMODULE16,LPCSTR) DECLSPEC_HIDDEN;\nextern FARPROC16 SNOOP16_GetProcAddress16(HMODULE16,DWORD,FARPROC16) DECLSPEC_HIDDEN;\nextern BOOL SNOOP16_ShowDebugmsgSnoop(const char *dll,int ord,const char *fname) DECLSPEC_HIDDEN;\n\n/* syslevel.c */\nextern VOID SYSLEVEL_CheckNotLevel( INT level ) DECLSPEC_HIDDEN;\n\n/* task.c */\nextern void TASK_CreateMainTask(void) DECLSPEC_HIDDEN;\nextern HTASK16 TASK_SpawnTask( NE_MODULE *pModule, WORD cmdShow,\n                               LPCSTR cmdline, BYTE len, HANDLE *hThread, LPCSTR curdir ) DECLSPEC_HIDDEN;\nextern void TASK_ExitTask(void) DECLSPEC_HIDDEN;\nextern HTASK16 TASK_GetTaskFromThread( DWORD thread ) DECLSPEC_HIDDEN;\nextern TDB *TASK_GetCurrent(void) DECLSPEC_HIDDEN;\nextern void TASK_InstallTHHook( THHOOK *pNewThook ) DECLSPEC_HIDDEN;\n\nextern BOOL WOWTHUNK_Init(void) DECLSPEC_HIDDEN;\n\nextern WORD DOSMEM_0000H DECLSPEC_HIDDEN;\nextern WORD DOSMEM_BiosDataSeg DECLSPEC_HIDDEN;\nextern WORD DOSMEM_BiosSysSeg DECLSPEC_HIDDEN;\nextern DWORD CallTo16_DataSelector DECLSPEC_HIDDEN;\nextern DWORD CallTo16_TebSelector DECLSPEC_HIDDEN;\nextern SEGPTR CALL32_CBClient_RetAddr DECLSPEC_HIDDEN;\nextern SEGPTR CALL32_CBClientEx_RetAddr DECLSPEC_HIDDEN;\n\nstruct tagSYSLEVEL;\n\nBOOL WINAPI TebTlsSetValue(TEB *teb, DWORD index, LPVOID value);\nLPVOID WINAPI TebTlsGetValue(TEB *teb, DWORD index);\nextern DWORD kernel_thread_data_tls;\n\nstruct kernel_thread_data\n{\n    WORD                stack_sel;      /* 16-bit stack selector */\n    WORD                htask16;        /* Win16 task handle */\n    DWORD               sys_count[4];   /* syslevel mutex entry counters */\n    struct tagSYSLEVEL *sys_mutex[4];   /* syslevel mutex pointers */\n    HANDLE              idle_event;     /* input idle event */\n    int                 curdir_len;     /* current dir buffer length */\n    char               *true_curdir;    /* true current dir */\n    char               *curdir_buf;     /* current dir buffer */\n    HANDLE              yield_event;    /* yield event */\n    HANDLE              yield_wait_event;/* yield event */\n    void               *pad[30];        /* change this if you add fields! */\n};\n\n__declspec(dllexport) struct kernel_thread_data *tls_get_kernel_thread_data();\nstatic inline struct kernel_thread_data *kernel_get_thread_data(void)\n{\n    return tls_get_kernel_thread_data();//(struct kernel_thread_data *)NtCurrentTeb()->SystemReserved1;\n}\n\n/* Push a DWORD on the 32-bit stack */\nstatic inline void stack32_push( CONTEXT *context, DWORD val )\n{\n    context->Esp -= sizeof(DWORD);\n    *(DWORD *)context->Esp = val;\n}\n\n/* Pop a DWORD from the 32-bit stack */\nstatic inline DWORD stack32_pop( CONTEXT *context )\n{\n    DWORD ret = *(DWORD *)context->Esp;\n    context->Esp += sizeof(DWORD);\n    return ret;\n}\n\n#ifndef _MSC_VER\n#define DEFINE_REGS_ENTRYPOINT(name) \\\n    __ASM_STDCALL_FUNC( name, 0,                                        \\\n                        \"pushl %ebp\\n\\t\"                                \\\n                        __ASM_CFI(\".cfi_adjust_cfa_offset 4\\n\\t\")       \\\n                        __ASM_CFI(\".cfi_rel_offset %ebp,0\\n\\t\")         \\\n                        \"movl %esp,%ebp\\n\\t\"                            \\\n                        __ASM_CFI(\".cfi_def_cfa_register %ebp\\n\\t\")     \\\n                        \"leal -(0x2cc+4)(%esp),%esp\\n\\t\"  /* sizeof(CONTEXT) + space for %eax */ \\\n                        \"movl %eax,-4(%ebp)\\n\\t\"                        \\\n                        \"pushl %esp\\n\\t\"             /* context */      \\\n                        \"call \" __ASM_NAME(\"RtlCaptureContext\") __ASM_STDCALL(4) \"\\n\\t\" \\\n                        \"movl -4(%ebp),%eax\\n\\t\"                        \\\n                        \"movl %eax,0xb0(%esp)\\n\\t\"   /* context->Eax */ \\\n                        \"pushl %esp\\n\\t\"             /* context */      \\\n                        \"call \" __ASM_NAME(\"__regs_\") #name __ASM_STDCALL(4) \"\\n\\t\" \\\n                        \"pushl %esp\\n\\t\"             /* context */      \\\n                        \"pushl $-2\\n\\t\"   /* GetCurrentThread() */      \\\n                        \"call \" __ASM_NAME(\"NtSetContextThread\") __ASM_STDCALL(8) \"\\n\\t\" \\\n                        \"ret\" ) /* fake ret to make copy protections happy */\n#else\n#undef DEFINE_REGS_ENTRYPOINT\n#define DEFINE_REGS_ENTRYPOINT(name) void __stdcall name(){ERR(\"notimpl:DEFINE_REGS_ENTRYPOINT(\" #name \")\\n\");}\n//void __stdcall name(__declspec(align(0)) struct {__declspec(align(0)) char reg;__declspec(align(0))char a[args];} a){ERR(\"notimpl:DEFINE_REGS_ENTRYPOINT(\" #name \")\\n\");}\n#endif\n#define __ms_va_list va_list\n#define __ms_va_start va_start\n#define __ms_va_end va_end\n//??\n#define PEXCEPTION_HANDLER PEXCEPTION_ROUTINE\n//ntdef.h\ntypedef enum _EVENT_TYPE {\n    NotificationEvent,\n    SynchronizationEvent\n} EVENT_TYPE;\n#define CP_UNIXCP CP_ACP\n//winternl.h\n\n#ifdef _MSC_VER\ntypedef struct _FILE_INTERNAL_INFORMATION {\n\tLARGE_INTEGER IndexNumber;\n} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;\n//ntifs.h\ntypedef enum _FILE_INFORMATION_CLASS {\n\tFileDirectoryInformation = 1,\n\tFileFullDirectoryInformation,\n\tFileBothDirectoryInformation,\n\tFileBasicInformation,\n\tFileStandardInformation,\n\tFileInternalInformation,\n\tFileEaInformation,\n\tFileAccessInformation,\n\tFileNameInformation,\n\tFileRenameInformation,\n\tFileLinkInformation,\n\tFileNamesInformation,\n\tFileDispositionInformation,\n\tFilePositionInformation,\n\tFileFullEaInformation,\n\tFileModeInformation,\n\tFileAlignmentInformation,\n\tFileAllInformation,\n\tFileAllocationInformation,\n\tFileEndOfFileInformation,\n\tFileAlternateNameInformation,\n\tFileStreamInformation,\n\tFilePipeInformation,\n\tFilePipeLocalInformation,\n\tFilePipeRemoteInformation,\n\tFileMailslotQueryInformation,\n\tFileMailslotSetInformation,\n\tFileCompressionInformation,\n\tFileObjectIdInformation,\n\tFileCompletionInformation,\n\tFileMoveClusterInformation,\n\tFileQuotaInformation,\n\tFileReparsePointInformation,\n\tFileNetworkOpenInformation,\n\tFileAttributeTagInformation,\n\tFileTrackingInformation,\n\tFileIdBothDirectoryInformation,\n\tFileIdFullDirectoryInformation,\n\tFileValidDataLengthInformation,\n\tFileShortNameInformation,\n\tFileIoCompletionNotificationInformation,\n\tFileIoStatusBlockRangeInformation,\n\tFileIoPriorityHintInformation,\n\tFileSfioReserveInformation,\n\tFileSfioVolumeInformation,\n\tFileHardLinkInformation,\n\tFileProcessIdsUsingFileInformation,\n\tFileNormalizedNameInformation,\n\tFileNetworkPhysicalNameInformation,\n\tFileIdGlobalTxDirectoryInformation,\n\tFileIsRemoteDeviceInformation,\n\tFileAttributeCacheInformation,\n\tFileNumaNodeInformation,\n\tFileStandardLinkInformation,\n\tFileRemoteProtocolInformation,\n\tFileReplaceCompletionInformation,\n\tFileMaximumInformation\n} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;\n#endif\n/*typedef NTSTATUS(WINAPI *PNtAllocateVirtualMemory)(HANDLE ProcessHandle,\n\tPVOID *BaseAddress,\n\tULONG_PTR ZeroBits,\n\tPSIZE_T RegionSize,\n\tULONG AllocationType,\n\tULONG Protect);\nstatic inline NTSTATUS NtAllocateVirtualMemory(HANDLE ProcessHandle,\n\tPVOID *BaseAddress,\n\tULONG_PTR ZeroBits,\n\tPSIZE_T RegionSize,\n\tULONG AllocationType,\n\tULONG Protect)\n{\n\tstatic PNtAllocateVirtualMemory NtAllocateVirtualMemory = 0;\n\tif (!NtAllocateVirtualMemory)\n\t\tNtAllocateVirtualMemory = (PNtAllocateVirtualMemory)GetProcAddress(GetModuleHandle(\"NTDLL.DLL\"), \"NtAllocateVirtualMemory\");\n\treturn NtAllocateVirtualMemory(ProcessHandle,\n\t\tBaseAddress,\n\t\tZeroBits,\n\t\tRegionSize,\n\t\tAllocationType,\n\t\tProtect);\n}*/\n//PNtAllocateVirtualMemory NtAllocateVirtualMemory = (PNtAllocateVirtualMemory)GetProcAddress(GetModuleHandle(\"NTDLL.DLL\"), \"NtAllocateVirtualMemory\");\nNTSYSAPI NTSTATUS  WINAPI NtAllocateVirtualMemory(HANDLE, PVOID*, ULONG, SIZE_T*, ULONG, ULONG);\nNTSTATUS\nNTAPI\nNtRaiseException(IN PEXCEPTION_RECORD ExceptionRecord,\nIN PCONTEXT Context,\nIN BOOLEAN FirstChance);\nNTSYSAPI NTSTATUS  WINAPI NtSetEvent(HANDLE, PULONG);\n#ifdef _MSC_VER\nNTSYSAPI HANDLE    WINAPI RtlCreateHeap(ULONG, PVOID, SIZE_T, SIZE_T, PVOID, PVOID);\nNTSYSAPI NTSTATUS  WINAPI NtQueryInformationFile(HANDLE, PIO_STATUS_BLOCK, PVOID, LONG, FILE_INFORMATION_CLASS);\n#endif\nNTSYSAPI NTSTATUS  WINAPI NtCreateEvent(PHANDLE, ACCESS_MASK, const OBJECT_ATTRIBUTES *, EVENT_TYPE, BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI NtResetEvent(HANDLE, PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtOpenKey(PHANDLE, ACCESS_MASK, const OBJECT_ATTRIBUTES *);\nNTSYSAPI NTSTATUS  WINAPI NtQueryValueKey(HANDLE, const UNICODE_STRING *, KEY_VALUE_INFORMATION_CLASS, void *, DWORD, DWORD *);\nNTSYSAPI NTSTATUS  WINAPI RtlEnterCriticalSection(RTL_CRITICAL_SECTION *);\nNTSYSAPI NTSTATUS  WINAPI RtlLeaveCriticalSection(RTL_CRITICAL_SECTION *);\nNTSYSAPI PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE);\nNTSYSAPI BOOLEAN   WINAPI RtlCreateUnicodeString(PUNICODE_STRING, LPCWSTR);\nNTSYSAPI void      WINAPI RtlAcquirePebLock(void);\nNTSYSAPI void      WINAPI RtlReleasePebLock(void);\nNTSYSAPI NTSTATUS  WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION *);\nNTSYSAPI PVOID     WINAPI RtlAllocateHeap(HANDLE, ULONG, SIZE_T);\nNTSYSAPI NTSTATUS  WINAPI RtlOpenCurrentUser(ACCESS_MASK, PHANDLE);\nNTSYSAPI CHAR      WINAPI RtlUpperChar(CHAR);\nNTSYSAPI PVOID     WINAPI RtlAddVectoredExceptionHandler(ULONG, PVECTORED_EXCEPTION_HANDLER);\nNTSYSAPI NTSTATUS  WINAPI RtlGetVersion(RTL_OSVERSIONINFOEXW*);\nNTSYSAPI void      WINAPI RtlSecondsSince1970ToTime(DWORD, LARGE_INTEGER *);\n# define strncasecmp _strnicmp\n# define strcasecmp _stricmp\nHANDLE WINAPI ConvertToGlobalHandle(HANDLE);\nNTSYSAPI void WINAPI DbgBreakPoint(void);\nNTSYSAPI NTSTATUS  WINAPI LdrFindEntryForAddress(const void*, PLDR_MODULE*);\n\n//vm\n\ntypedef SEGPTR(*pm_interrupt_handler)(WORD num, DWORD addr);\n\ntypedef DWORD(*wine_call_to_16_vm86_t)(DWORD target, DWORD cbArgs, PEXCEPTION_HANDLER handler,\n    void(*from16_reg)(void),\n    LONG(*__wine_call_from_16)(void),\n    int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context),\n    void(*__wine_call_to_16_ret)(void),\n    int dasm,\n    BOOL vm86,\n    void *memory_base,\n    pm_interrupt_handler pih);\ntypedef void(*wine_call_to_16_regs_vm86_t)(CONTEXT *context, DWORD cbArgs, PEXCEPTION_HANDLER handler,\n    void(*from16_reg)(void),\n    LONG(*__wine_call_from_16)(void),\n    int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context),\n    void(*__wine_call_to_16_ret)(void),\n    int dasm,\n    BOOL vm86,\n    void *memory_base,\n    pm_interrupt_handler pih\n    );\nextern wine_call_to_16_vm86_t func_wine_call_to_16_vm86;\nextern wine_call_to_16_regs_vm86_t func_wine_call_to_16_regs_vm86;\n\nchar *get_search_path(void);\n\nvoid switch_directory(struct kernel_thread_data *thread_data);\n\nBOOL16 WINAPI IsOldWindowsTask(HINSTANCE16);\n\n/* wType values */\n#define GT_UNKNOWN      0\n#define GT_DGROUP       1\n#define GT_DATA         2\n#define GT_CODE         3\n#define GT_TASK         4\n#define GT_RESOURCE     5\n#define GT_MODULE       6\n#define GT_FREE         7\n#define GT_INTERNAL     8\n#define GT_SENTINEL     9\n#define GT_BURGERMASTER 10\nvoid GLOBAL_SetSeg(HGLOBAL16 hg, WORD wSeg, WORD type);\nWORD GLOBAL_GetSegNum(HGLOBAL16 hg);\n\n__declspec(dllexport) LPCSTR RedirectDriveRoot(LPCSTR path, LPSTR to, size_t max_len, BOOL silence);\n__declspec(dllexport) LPCSTR RedirectSystemDir(LPCSTR path, LPSTR to, size_t max_len);\n\n#endif  /* __WINE_KERNEL16_PRIVATE_H */\n"
  },
  {
    "path": "krnl386/krnl386.def",
    "content": "; File generated automatically from krnl386.exe16.spec; do not edit!\n\nLIBRARY krnl386.exe16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA; =.L__wine_spec_dos_header @1 DATA ;PRIVATE\n  ;VxDCall0=VxDCall @2\n  ;VxDCall1=VxDCall @3\n  ;VxDCall2=VxDCall @4\n  ;VxDCall3=VxDCall @5\n  ;VxDCall4=VxDCall @6\n  ;VxDCall5=VxDCall @7\n  ;VxDCall6=VxDCall @8\n  ;VxDCall7=VxDCall @9\n  ;VxDCall8=VxDCall @10\n  k32CharToOemA @11\n  k32CharToOemBuffA @12\n  k32OemToCharA @13\n  k32OemToCharBuffA @14\n  k32LoadStringA @15\n  k32wsprintfA @16\n  k32wvsprintfA @17\n  ;CommonUnimpStub @18\n  GetProcessDword @19\n  DosFileHandleToWin32Handle @20\n  Win32HandleToDosFileHandle @21\n  DeleteDosFileHandle @22\n  GlobalAlloc16 @23\n  GlobalLock16 @24\n  GlobalUnlock16 @25\n  GlobalFix16 @26\n  GlobalUnfix16 @27\n  GlobalWire16 @28\n  GlobalUnWire16 @29\n  GlobalFree16 @30\n  GlobalSize16 @31\n  HouseCleanLogicallyDeadHandles @32\n  GetWin16DOSEnv @33\n  LoadLibrary16 @34\n  FreeLibrary16 @35\n  GetProcAddress16=WIN32_GetProcAddress16 @36\n  ;AllocMappedBuffer @37\n  ;FreeMappedBuffer @38\n  ;OT_32ThkLSF @39\n  ThunkInitLSF @40\n  ;LogApiThkLSF @41\n  ThunkInitLS @42\n  ;LogApiThkSL @43\n  ;Common32ThkLS @44\n  ThunkInitSL @45\n  ;LogCBThkSL @46\n  ReleaseThunkLock @47\n  RestoreThunkLock @48\n  ;W32S_BackTo32 @49\n  GetThunkBuff @50\n  GetThunkStuff @51\n  K32WOWCallback16 @52\n  K32WOWCallback16Ex @53\n  K32WOWGetVDMPointer @54\n  K32WOWHandle32 @55\n  K32WOWHandle16 @56\n  K32WOWGlobalAlloc16 @57\n  K32WOWGlobalLock16 @58\n  K32WOWGlobalUnlock16 @59\n  K32WOWGlobalFree16 @60\n  K32WOWGlobalAllocLock16 @61\n  K32WOWGlobalUnlockFree16 @62\n  K32WOWGlobalLockSize16 @63\n  K32WOWYield16 @64\n  K32WOWDirectedYield16 @65\n  K32WOWGetVDMPointerFix @66\n  K32WOWGetVDMPointerUnfix @67\n  K32WOWGetDescriptor @68\n  _KERNEL32_86 @69\n  SSOnBigStack @70\n  SSCall @71\n  FT_PrologPrime @72\n  QT_ThunkPrime @73\n  PK16FNF @74\n  GetPK16SysVar @75\n  GetpWin16Lock @76\n  _CheckNotSysLevel @77\n  _ConfirmSysLevel @78\n  _ConfirmWin16Lock @79\n  _EnterSysLevel @80\n  _LeaveSysLevel @81\n  _KERNEL32_99 @82\n  _KERNEL32_100 @83\n  AllocSLCallback @84\n  ;FT_Exit0 @85\n  ;FT_Exit12 @86\n  ;FT_Exit16 @87\n  ;FT_Exit20 @88\n  ;FT_Exit24 @89\n  ;FT_Exit28 @90\n  ;FT_Exit32 @91\n  ;FT_Exit36 @92\n  ;FT_Exit40 @93\n  ;FT_Exit44 @94\n  ;FT_Exit48 @95\n  ;FT_Exit4 @96\n  ;FT_Exit52 @97\n  ;FT_Exit56 @98\n  ;FT_Exit8 @99\n  FT_Prolog @100\n  ;FT_Thunk @101\n  FreeSLCallback @102\n  Get16DLLAddress @103\n  ;K32Thk1632Epilog @104\n  ;K32Thk1632Prolog @105\n  ;MapHInstLS @106\n  ;MapHInstLS_PN @107\n  ;MapHInstSL @108\n  ;MapHInstSL_PN @109\n  MapHModuleLS @110\n  MapHModuleSL @111\n  MapLS @112\n  MapSL @113\n  MapSLFix @114\n  PrivateFreeLibrary @115\n  PrivateLoadLibrary @116\n  QT_Thunk @117\n  ;SMapLS @118\n  ;SMapLS_IP_EBP_12 @119\n  ;SMapLS_IP_EBP_16 @120\n  ;SMapLS_IP_EBP_20 @121\n  ;SMapLS_IP_EBP_24 @122\n  ;SMapLS_IP_EBP_28 @123\n  ;SMapLS_IP_EBP_32 @124\n  ;SMapLS_IP_EBP_36 @125\n  ;SMapLS_IP_EBP_40 @126\n  ;SMapLS_IP_EBP_8 @127\n  ;SUnMapLS @128\n  ;SUnMapLS_IP_EBP_12 @129\n  ;SUnMapLS_IP_EBP_16 @130\n  ;SUnMapLS_IP_EBP_20 @131\n  ;SUnMapLS_IP_EBP_24 @132\n  ;SUnMapLS_IP_EBP_28 @133\n  ;SUnMapLS_IP_EBP_32 @134\n  ;SUnMapLS_IP_EBP_36 @135\n  ;SUnMapLS_IP_EBP_40 @136\n  ;SUnMapLS_IP_EBP_8 @137\n  ThunkConnect32 @138\n  UTRegister @139\n  UTUnRegister @140\n  UnMapLS @141\n  ;UnMapSLFixArray @142\n  _lclose16 @143\n  AllocSelectorArray16 @144\n  FarGetOwner16 @145\n  FarSetOwner16 @146\n  FindResource16 @147\n  FreeResource16 @148\n  FreeSelector16 @149\n  GetCurrentPDB16 @150\n  GetCurrentTask @151\n  GetDOSEnvironment16 @152\n  GetExePtr @153\n  GetExeVersion16\n  GetExpWinVer16 @154\n  GetModuleHandle16 @155\n  GlobalReAlloc16 @156\n  InitTask16 @157\n  IsBadReadPtr16 @158\n  IsTask16 @159\n  LoadModule16 @160\n  LoadResource16 @161\n  LocalAlloc16 @162\n  LocalInit16 @163\n  LocalLock16 @164\n  LocalUnlock16 @165\n  LocalReAlloc16 @166\n  LocalFree16 @167\n  LocalSize16 @168\n  LocalCompact16 @169\n  LocalCountFree16 @170\n  LocalHeapSize16 @171\n  LockResource16 @172\n  SetSelectorBase @173\n  SetSelectorLimit16 @174\n  SizeofResource16 @175\n  WinExec16 @176\n  __wine_call_int_handler @177\n  __wine_load_dos_exe @178\n  __wine_vxd_open @179 PRIVATE\n  __wine_vxd_get_proc @180 PRIVATE\n  IsOldWindowsTask @181\n  GetProcessFlags @182\n\n  krnl386_get_config_string\n  krnl386_get_config_int\n  krnl386_get_compat_mode\n  krnl386_set_compat_path\n\n  GetModuleFileName16\n  GetModuleName16\n  _EnterWin16Lock\n  _LeaveWin16Lock\n  IsRealModeTask\n  AllocDStoCSAlias16\n\n  RegCloseKey16\n  RegCreateKey16\n  RegDeleteKey16\n  RegDeleteValue16\n  RegEnumKey16\n  RegEnumValue16\n  RegFlushKey16\n  RegOpenKey16\n  RegQueryValue16\n  RegQueryValueEx16\n  RegSetValue16\n  RegSetValueEx16\n  K32WOWHandle16Destroy\n  K32WOWHandle16DestroyHint\n\n  DOSVM_inport\n  DOSVM_outport\n  DOSVM_setportcb\n  DOSVM_SetBuiltinVector\n  DOSVM_GetPMHandler16\n  DOSVM_SetPMHandler16\n  krnl386_get_search_path\n  krnl386_search_executable_file\n  get_aflags\n  DibMapGlobalMemory\n  DibUnmapGlobalMemory\n  GlobalMapInternal\n  make_thunk_32\n  free_thunk_32\n  get_resource_table\n  WritePrivateProfileStruct16\n  GetPrivateProfileStruct16\n  StackTraceFirst16\n  StackTraceCSIPFirst16\n  StackTraceNext16\n  TaskSetCSIP16\n  TaskGetCSIP16\n  TaskSwitch16\n  GLOBAL_GetLink\n  GLOBAL_SetLink\n  GLOBAL_FindLink\n  GLOBAL_SetSeg\n  vm_inject\n  set_vm_inject_cb\n  get_idle_event\n  get_windows_build\n  GetSelectorLimit16\n\n  getAL\n  getAH\n  getAX\n  getEAX\n  getBL\n  getBH\n  getBX\n  getEBX\n  getCL\n  getCH\n  getCX\n  getECX\n  getDL\n  getDH\n  getDX\n  getEDX\n  getSP\n  getESP\n  getBP\n  getEBP\n  getSI\n  getESI\n  getDI\n  getEDI\n  setAL\n  setAH\n  setAX\n  setEAX\n  setBL\n  setBH\n  setBX\n  setEBX\n  setCL\n  setCH\n  setCX\n  setECX\n  setDL\n  setDH\n  setDX\n  setEDX\n  setSP\n  setESP\n  setBP\n  setEBP\n  setSI\n  setESI\n  setDI\n  setEDI\n  getDS\n  getES\n  getCS\n  getSS\n  getFS\n  getGS\n  setDS\n  setES\n  setCS\n  setSS\n  setFS\n  setGS\n  getIP\n  getEIP\n  setIP\n  setEIP\n  getCF\n  getPF\n  getAF\n  getZF\n  getSF\n  getIF\n  getDF\n  getOF\n  setCF\n  setPF\n  setAF\n  setZF\n  setSF\n  setIF\n  setDF\n  setOF\n  VDDInstallIOHook\n  VDDDeInstallIOHook\n  MGetVdmPointer\n"
  },
  {
    "path": "krnl386/krnl386.exe16.spec",
    "content": "# 1-207 are the basic functions, those are (with minor variations)\n# present in win31, win95 and nt351\n\n1   stub FatalExit\n2   pascal -ret16 ExitKernel() ExitKernel16\n3   pascal GetVersion() GetVersion16\n4   pascal -ret16 LocalInit(word word word) LocalInit16\n5   pascal -ret16 LocalAlloc(word word) LocalAlloc16\n6   pascal -ret16 LocalReAlloc(word word word) LocalReAlloc16\n7   pascal -ret16 LocalFree(word) LocalFree16\n8   pascal LocalLock(word) LocalLock16\n9   pascal -ret16 LocalUnlock(word) LocalUnlock16\n10  pascal -ret16 LocalSize(word) LocalSize16\n11  pascal -ret16 LocalHandle(word) LocalHandle16\n12  pascal -ret16 LocalFlags(word) LocalFlags16\n13  pascal -ret16 LocalCompact(word) LocalCompact16\n14  pascal LocalNotify(long) LocalNotify16\n15  pascal -register GlobalAlloc(word long) WIN16_GlobalAlloc16\n16  pascal -ret16 GlobalReAlloc(word long word) WIN16_GlobalReAlloc16\n17  pascal GlobalFree(word) WIN16_GlobalFree16\n18  pascal GlobalLock(word) WIN16_GlobalLock16\n19  pascal GlobalUnlock(word) WIN16_GlobalUnlock16\n20  pascal GlobalSize(word) WIN16_GlobalSize16\n21  pascal GlobalHandle(word) GlobalHandle16\n22  pascal GlobalFlags(word) WIN16_GlobalFlags16\n23  pascal -ret16 LockSegment(word) LockSegment16\n24  pascal -ret16 UnlockSegment(word) UnlockSegment16\n25  pascal GlobalCompact(long) GlobalCompact16\n26  pascal -ret16 GlobalFreeAll(word) GlobalFreeAll16\n27  pascal -ret16 GetModuleName(word ptr word) GetModuleName16 # W1.1: SETSWAPHOOK, W2.0: nothing !\n28  pascal   GlobalMasterHandle() GlobalMasterHandle16\n29  pascal -ret16 Yield() Yield16\n30  pascal -ret16 WaitEvent(word) WaitEvent16\n31  pascal -ret16 PostEvent(word) PostEvent16\n32  pascal -ret16 SetPriority(word s_word) SetPriority16\n33  pascal -ret16 LockCurrentTask(word) LockCurrentTask16\n34  pascal -ret16 SetTaskQueue(word word) SetTaskQueue16\n35  pascal -ret16 GetTaskQueue(word) GetTaskQueue16\n36  pascal   GetCurrentTask() WIN16_GetCurrentTask\n37  pascal GetCurrentPDB() GetCurrentPDB16\n38  pascal   SetTaskSignalProc(word segptr) SetTaskSignalProc\n39  stub     SetTaskSwitchProc      # W1.1, W2.0\n40  stub     SetTaskInterchange     # W1.1, W2.0\n41  pascal -ret16 EnableDos() KERNEL_nop\n42  pascal -ret16 DisableDos() KERNEL_nop\n43  stub     IsScreenGrab           # W1.1, W2.0\n44  stub     BuildPDB               # W1.1, W2.0\n45  pascal -ret16 LoadModule(str ptr) LoadModule16\n46  pascal -ret16 FreeModule(word) FreeModule16\n47  pascal   GetModuleHandle(segstr) WIN16_GetModuleHandle\n48  pascal -ret16 GetModuleUsage(word) GetModuleUsage16\n49  pascal -ret16 GetModuleFileName(word ptr s_word) GetModuleFileName16\n50  pascal GetProcAddress(word str) WIN16_GetProcAddress16\n51  pascal MakeProcInstance(segptr word) MakeProcInstance16\n52  pascal -ret16 FreeProcInstance(segptr) FreeProcInstance16\n53  stub CallProcInstance\n54  pascal -ret16 GetInstanceData(word word word) GetInstanceData16\n55  pascal -register Catch(segptr) Catch16\n56  pascal -register Throw(ptr word) Throw16\n57  pascal -ret16 GetProfileInt(str str s_word) GetProfileInt16\n58  pascal -ret16 GetProfileString(str str str ptr word) GetProfileString16\n59  pascal -ret16 WriteProfileString(str str str) WriteProfileString16\n60  pascal -ret16 FindResource(word str str) FindResource16\n61  pascal -ret16 LoadResource(word word) LoadResource16\n62  pascal LockResource(word) WIN16_LockResource16\n63  pascal -ret16 FreeResource(word) FreeResource16\n64  pascal -ret16 AccessResource(word word) AccessResource16\n65  pascal SizeofResource(word word) SizeofResource16\n66  pascal -ret16 AllocResource(word word long) AllocResource16\n67  pascal SetResourceHandler(word str segptr) SetResourceHandler16\n68  pascal -ret16 InitAtomTable(word) InitAtomTable16\n69  pascal -ret16 FindAtom(str) FindAtom16\n70  pascal -ret16 AddAtom(str) AddAtom16\n71  pascal -ret16 DeleteAtom(word) DeleteAtom16\n72  pascal -ret16 GetAtomName(word ptr word) GetAtomName16\n73  pascal -ret16 GetAtomHandle(word) GetAtomHandle16\n74  pascal -ret16 OpenFile(str long word) WIN16_OpenFile16\n75  stub OpenPathName\n76  stub DeletePathName\n# Reserved*: old Win 2.x functions now moved to USER (Win 3.0+)\n77  pascal Reserved1(segptr) KERNEL_AnsiNext16\n78  pascal Reserved2(segptr segptr) KERNEL_AnsiPrev16\n79  pascal Reserved3(segstr) KERNEL_AnsiUpper16\n80  pascal Reserved4(segstr) KERNEL_AnsiLower16\n81  pascal -ret16 _lclose(word) _lclose16\n82  pascal -ret16 _lread(word segptr word) WIN16_lread\n83  pascal -ret16 _lcreat(str word) _lcreat16\n84  pascal   _llseek(word long word) _llseek16\n85  pascal -ret16 _lopen(str word) _lopen16\n86  pascal -ret16 _lwrite(word ptr word) _lwrite16\n87  pascal -ret16 Reserved5(str str) KERNEL_lstrcmp16\n88  pascal   lstrcpy(segptr str) lstrcpy16\n89  pascal   lstrcat(segstr str) lstrcat16\n90  pascal -ret16 lstrlen(str) lstrlen16\n91  pascal -register InitTask() InitTask16\n92  pascal   GetTempDrive(word) GetTempDrive\n93  pascal GetCodeHandle(segptr) GetCodeHandle16\n94  pascal -ret16 DefineHandleTable(word) DefineHandleTable16\n95  pascal -ret16 -stkprolog LoadLibrary(str) LoadLibrary16\n96  pascal FreeLibrary(word) WIN16_FreeLibrary16\n97  pascal -ret16 GetTempFileName(word str word ptr) GetTempFileName16\n98  pascal -ret16 GetLastDiskChange() KERNEL_nop\n99  stub GetLPErrMode\n100 pascal -ret16 ValidateCodeSegments() KERNEL_nop\n101 stub NoHookDosCall\n102 pascal -register DOS3Call() DOS3Call\n103 pascal -register NetBIOSCall() NetBIOSCall16\n104 pascal -ret16 GetCodeInfo(segptr ptr) GetCodeInfo16\n105 pascal -ret16 GetExeVersion() GetExeVersion16\n106 pascal SetSwapAreaSize(word) SetSwapAreaSize16\n107 pascal -ret16 SetErrorMode(word) SetErrorMode16\n108 pascal -ret16 SwitchStackTo(word word word) SwitchStackTo16 # STO in W2.0\n109 pascal -register SwitchStackBack(word word word) SwitchStackBack16 # SBACK in W2.0\n110 pascal   PatchCodeHandle(word) PatchCodeHandle16\n111 pascal   GlobalWire(word) GlobalWire16\n112 pascal -ret16 GlobalUnWire(word) GlobalUnWire16\n113 equate __AHSHIFT 3\n114 equate __AHINCR 8\n115 pascal -register OutputDebugString(str) OutputDebugString16\n116 stub InitLib\n117 pascal -ret16 OldYield() OldYield16\n118 pascal -ret16 GetTaskQueueDS() GetTaskQueueDS16\n119 pascal -ret16 GetTaskQueueES() GetTaskQueueES16\n120 stub UndefDynLink\n121 pascal -ret16 LocalShrink(word word) LocalShrink16\n122 pascal -ret16 IsTaskLocked() IsTaskLocked16\n123 pascal -ret16 KbdRst() KERNEL_nop\n124 pascal -ret16 EnableKernel() KERNEL_nop\n125 pascal -ret16 DisableKernel() KERNEL_nop\n126 stub MemoryFreed\n127 pascal -ret16 GetPrivateProfileInt(str str s_word str) GetPrivateProfileInt16\n128 pascal -ret16 GetPrivateProfileString(str str str ptr word str) GetPrivateProfileString16\n129 pascal -ret16 WritePrivateProfileString(str str str str) WritePrivateProfileString16\n130 pascal FileCDR(ptr) FileCDR16\n131 pascal GetDOSEnvironment() GetDOSEnvironment16\n132 pascal GetWinFlags() GetWinFlags16\n133 pascal -ret16 GetExePtr(word) WIN16_GetExePtr\n134 pascal -ret16 GetWindowsDirectory(ptr word) GetWindowsDirectory16\n135 pascal -ret16 GetSystemDirectory(ptr word) GetSystemDirectory16\n136 pascal -ret16 GetDriveType(word) GetDriveType16\n137 pascal -ret16 FatalAppExit(word str) FatalAppExit16\n138 pascal GetHeapSpaces(word) GetHeapSpaces16\n139 stub DoSignal\n140 pascal -ret16 SetSigHandler(segptr ptr ptr word word) SetSigHandler16\n141 stub InitTask1\n142 pascal -ret16 GetProfileSectionNames(ptr word) GetProfileSectionNames16\n143 pascal -ret16 GetPrivateProfileSectionNames(ptr word str) GetPrivateProfileSectionNames16\n144 pascal -ret16 CreateDirectory(ptr ptr) CreateDirectory16\n145 pascal -ret16 RemoveDirectory(ptr) RemoveDirectory16\n146 pascal -ret16 DeleteFile(ptr) DeleteFile16\n147 pascal -ret16 SetLastError(long) SetLastError16\n148 pascal GetLastError() GetLastError16\n149 pascal -ret16 GetVersionEx(ptr) GetVersionEx16\n150 pascal -ret16 DirectedYield(word) DirectedYield16\n151 stub WinOldApCall\n152 pascal -ret16 GetNumTasks() GetNumTasks16\n154 pascal -ret16 GlobalNotify(segptr) GlobalNotify16\n155 pascal -ret16 GetTaskDS() GetTaskDS16\n156 pascal   LimitEMSPages(long) LimitEMSPages16\n157 pascal   GetCurPID(long) GetCurPID16\n158 pascal -ret16 IsWinOldApTask(word) IsWinOldApTask16\n159 pascal GlobalHandleNoRIP(word) GlobalHandleNoRIP16\n160 stub EMSCopy\n161 pascal -ret16 LocalCountFree() LocalCountFree16\n162 pascal -ret16 LocalHeapSize() LocalHeapSize16\n163 pascal -ret16 GlobalLRUOldest(word) GlobalLRUOldest16\n164 pascal -ret16 GlobalLRUNewest(word) GlobalLRUNewest16\n165 pascal -ret16 A20Proc(word) A20Proc16\n166 pascal -ret16 WinExec(str word) WinExec16\n167 pascal -ret16 GetExpWinVer(word) GetExpWinVer16\n168 pascal -ret16 DirectResAlloc(word word word) DirectResAlloc16\n169 pascal GetFreeSpace(word) GetFreeSpace16\n170 pascal -ret16 AllocCStoDSAlias(word) AllocCStoDSAlias16\n171 pascal -ret16 AllocDStoCSAlias(word) AllocDStoCSAlias16\n172 pascal -ret16 AllocAlias(word) AllocCStoDSAlias16\n173 equate __ROMBIOS 0\n174 equate __A000H 0\n175 pascal -ret16 AllocSelector(word) AllocSelector16\n176 pascal -ret16 FreeSelector(word) WIN16_FreeSelector16\n177 pascal -ret16 PrestoChangoSelector(word word) PrestoChangoSelector16\n178 equate __WINFLAGS 0x413\n179 equate __D000H 0\n180 pascal LongPtrAdd(long long) LongPtrAdd16\n181 equate __B000H 0\n182 equate __B800H 0\n183 equate __0000H 0\n184 pascal GlobalDOSAlloc(long) GlobalDOSAlloc16\n185 pascal -ret16 GlobalDOSFree(word) GlobalDOSFree16\n186 pascal GetSelectorBase(word) GetSelectorBase\n187 pascal -ret16 SetSelectorBase(word long) SetSelectorBase\n188 pascal GetSelectorLimit(word) GetSelectorLimit16\n189 pascal -ret16 SetSelectorLimit(word long) SetSelectorLimit16\n190 equate __E000H 0\n191 pascal -ret16 GlobalPageLock(word) GlobalPageLock16\n192 pascal -ret16 GlobalPageUnlock(word) GlobalPageUnlock16\n193 equate __0040H 0\n194 equate __F000H 0\n195 equate __C000H 0\n196 pascal -ret16 SelectorAccessRights(word word word) SelectorAccessRights16\n197 pascal -ret16 GlobalFix(word) GlobalFix16\n198 pascal -ret16 GlobalUnfix(word) GlobalUnfix16\n199 pascal -ret16 SetHandleCount(word) SetHandleCount16\n200 pascal -ret16 ValidateFreeSpaces() KERNEL_nop\n201 stub ReplaceInst\n202 stub RegisterPtrace\n203 pascal -register DebugBreak() DebugBreak16\n204 stub SwapRecording\n205 stub CVWBreak\n206 pascal -ret16 AllocSelectorArray(word) AllocSelectorArray16\n207 pascal -ret16 IsDBCSLeadByte(word) IsDBCSLeadByte\n\n\n# 208-237 are Win95 extensions; a few of those are also present in WinNT\n\n208 pascal K208(word long long long) Local32Init16\n209 pascal K209(long long word long) Local32Alloc16\n210 pascal K210(long long word long long) Local32ReAlloc16\n211 pascal K211(long long word) Local32Free16\n213 pascal K213(long long word word) Local32Translate16\n214 pascal K214(long long word) Local32Size16\n215 pascal K215(long word) Local32ValidHandle16  # Win95 only -- CONFLICT!\n#215 stub WOWShouldWeSayWin95                  # WinNT only -- CONFLICT!\n216 pascal RegEnumKey(long long ptr long) RegEnumKey16                    # Both 95/NT\n217 pascal RegOpenKey(long str ptr) RegOpenKey16                          # Both 95/NT\n218 pascal RegCreateKey(long str ptr) RegCreateKey16\n219 pascal RegDeleteKey(long str) RegDeleteKey16\n220 pascal RegCloseKey(long) RegCloseKey16                                # Both 95/NT\n221 pascal RegSetValue(long str long ptr long) RegSetValue16\n222 pascal RegDeleteValue(long str) RegDeleteValue16\n223 pascal RegEnumValue(long long ptr ptr ptr ptr ptr ptr) RegEnumValue16 # Both 95/NT\n224 pascal RegQueryValue(long str ptr ptr) RegQueryValue16\n225 pascal RegQueryValueEx(long str ptr ptr ptr ptr) RegQueryValueEx16\n226 pascal RegSetValueEx(long str long long ptr long) RegSetValueEx16\n227 pascal RegFlushKey(long) RegFlushKey16\n228 pascal -ret16 K228(word) GetExePtr\n229 pascal -ret16 K229(long) Local32GetSegment16\n230 pascal GlobalSmartPageLock(word) GlobalPageLock16 #?\n231 pascal GlobalSmartPageUnlock(word) GlobalPageUnlock16 #?\n232 stub RegLoadKey\n233 stub RegUnloadKey\n234 stub RegSaveKey\n235 stub InvalidateNlsCache\n236 stub GetProductName\n237 pascal -ret16 K237() KERNEL_nop\n\n\n# 262-274 are WinNT extensions; those are not present in Win95\n\n262 stub WOWWaitForMsgAndEvent\n263 stub WOWMsgBox\n273 stub K273\n274 pascal -ret16 GetShortPathName(str ptr word) GetShortPathName16\n\n\n# 310-356 are again shared between all versions\n\n310 pascal -ret16 LocalHandleDelta(word) LocalHandleDelta16\n311 pascal GetSetKernelDOSProc(ptr) GetSetKernelDOSProc16\n314 stub DebugDefineSegment\n315 pascal -ret16 WriteOutProfiles() WriteOutProfiles16\n316 pascal GetFreeMemInfo() GetFreeMemInfo16\n318 stub FatalExitHook\n319 stub FlushCachedFileHandle\n320 pascal -ret16 IsTask(word) IsTask16\n323 pascal -ret16 IsRomModule(word) IsRomModule16\n324 pascal -ret16 LogError(word ptr) LogError16\n325 pascal -ret16 LogParamError(word ptr ptr) LogParamError16\n326 pascal -ret16 IsRomFile(word) IsRomFile16\n327 pascal -register K327() HandleParamError\n328 varargs -ret16 _DebugOutput(word str) _DebugOutput\n329 pascal -ret16 K329(str word) DebugFillBuffer\n332 variable THHOOK(0 0 0 0 0 0 0 0)\n334 pascal -ret16 IsBadReadPtr(segptr word) IsBadReadPtr16\n335 pascal -ret16 IsBadWritePtr(segptr word) IsBadWritePtr16\n336 pascal -ret16 IsBadCodePtr(segptr) IsBadCodePtr16\n337 pascal -ret16 IsBadStringPtr(segptr word) IsBadStringPtr16\n338 pascal -ret16 HasGPHandler(segptr) HasGPHandler16\n339 pascal -ret16 DiagQuery() DiagQuery16\n340 pascal -ret16 DiagOutput(str) DiagOutput16\n341 pascal ToolHelpHook(ptr) ToolHelpHook16\n342 variable __GP(0 0)\n343 stub RegisterWinOldApHook\n344 stub GetWinOldApHooks\n345 pascal -ret16 IsSharedSelector(word) IsSharedSelector16\n346 pascal -ret16 IsBadHugeReadPtr(segptr long) IsBadHugeReadPtr16\n347 pascal -ret16 IsBadHugeWritePtr(segptr long) IsBadHugeWritePtr16\n348 pascal -ret16 hmemcpy(ptr ptr long) hmemcpy16\n349 pascal   _hread(word segptr long) WIN16_hread\n350 pascal   _hwrite(word ptr long) _hwrite16\n351 pascal -ret16 BUNNY_351() KERNEL_nop\n352 pascal   lstrcatn(segstr str word) lstrcatn16\n353 pascal   lstrcpyn(segptr str word) lstrcpyn16\n354 pascal   GetAppCompatFlags(word) GetAppCompatFlags16\n355 pascal -ret16 GetWinDebugInfo(ptr word) GetWinDebugInfo16\n356 pascal -ret16 SetWinDebugInfo(ptr) SetWinDebugInfo16\n\n\n# 357-365 are present in Win95 only\n# Note that from here on most of the Win95-only functions are exported\n# ordinal-only; the names given here are mostly guesses :-)\n\n357 pascal MapSL(segptr) MapSL\n358 pascal MapLS(long) MapLS\n359 pascal UnMapLS(segptr) UnMapLS\n360 pascal -ret16 OpenFileEx(str ptr word) OpenFile16\n361 pascal -ret16 PIGLET_361() KERNEL_nop\n362 stub ThunkTerminateProcess\n365 pascal -register GlobalChangeLockCount(word word) GlobalChangeLockCount16\n\n\n# 403-404 are common to all versions\n\n403 pascal -ret16 FarSetOwner(word word) FarSetOwner16 # aka K403\n404 pascal -ret16 FarGetOwner(word) FarGetOwner16 # aka K404\n\n\n# 406-494 are present only in Win95\n\n406 pascal -ret16 WritePrivateProfileStruct(str str ptr word str) WritePrivateProfileStruct16\n407 pascal -ret16 GetPrivateProfileStruct(str str ptr word str) GetPrivateProfileStruct16\n408 stub KERNEL_408\n409 stub KERNEL_409\n410 stub CreateProcessFromWinExec\n411 pascal   GetCurrentDirectory(long ptr) GetCurrentDirectory16\n412 pascal -ret16 SetCurrentDirectory(ptr) SetCurrentDirectory16\n413 pascal -ret16 FindFirstFile(ptr ptr) FindFirstFile16\n414 pascal -ret16 FindNextFile(word ptr) FindNextFile16\n415 pascal -ret16 FindClose(word) FindClose16\n416 pascal -ret16 WritePrivateProfileSection(str str str) WritePrivateProfileSection16\n417 pascal -ret16 WriteProfileSection(str str) WriteProfileSection16\n418 pascal -ret16 GetPrivateProfileSection(str ptr word str) GetPrivateProfileSection16\n419 pascal -ret16 GetProfileSection(str ptr word) GetProfileSection16\n420 pascal   GetFileAttributes(ptr) GetFileAttributes16\n421 pascal -ret16 SetFileAttributes(ptr long) SetFileAttributes16\n422 pascal -ret16 GetDiskFreeSpace(ptr ptr ptr ptr ptr) GetDiskFreeSpace16\n423 pascal -ret16 LogApiThk(str) LogApiThk\n431 pascal -ret16 IsPeFormat(str word) IsPeFormat16\n432 stub FileTimeToLocalFileTime\n434 pascal -ret16 UnicodeToAnsi(ptr ptr word) UnicodeToAnsi16\n435 stub GetTaskFlags\n436 pascal -ret16 _ConfirmSysLevel(ptr) _ConfirmSysLevel\n437 pascal -ret16 _CheckNotSysLevel(ptr) _CheckNotSysLevel\n438 pascal -ret16 _CreateSysLevel(ptr long) _CreateSysLevel\n439 pascal -ret16 _EnterSysLevel(ptr) _EnterSysLevel\n440 pascal -ret16 _LeaveSysLevel(ptr) _LeaveSysLevel\n441 pascal CreateThread16(ptr long segptr segptr long ptr) CreateThread16\n442 pascal VWin32_EventCreate() VWin32_EventCreate\n443 pascal VWin32_EventDestroy(long) VWin32_EventDestroy\n444 pascal -ret16 Local32Info(ptr word) Local32Info16\n445 pascal -ret16 Local32First(ptr word) Local32First16\n446 pascal -ret16 Local32Next(ptr) Local32Next16\n447 pascal -ret16 WIN32_OldYield() WIN32_OldYield16\n448 stub KERNEL_448\n449 pascal GetpWin16Lock() GetpWin16Lock16\n450 pascal VWin32_EventWait(long) VWin32_EventWait\n451 pascal VWin32_EventSet(long) VWin32_EventSet\n452 pascal LoadLibrary32(str) LoadLibrary32_16\n453 pascal GetProcAddress32(long str) GetProcAddress32_16\n454 equate __FLATCS 0   # initialized by BUILTIN_Init()\n455 equate __FLATDS 0   # initialized by BUILTIN_Init()\n456 pascal DefResourceHandler(word word word) NE_DefResourceHandler\n457 pascal CreateW32Event(long long) CreateW32Event\n458 pascal SetW32Event(long) SetW32Event\n459 pascal ResetW32Event(long) ResetW32Event\n460 pascal WaitForSingleObject(long long) WaitForSingleObject16\n461 pascal WaitForMultipleObjects(long ptr long long) WaitForMultipleObjects16\n462 pascal GetCurrentThreadId() GetCurrentThreadId16\n463 pascal SetThreadQueue(long word) SetThreadQueue16\n464 pascal GetThreadQueue(long) GetThreadQueue16\n465 stub NukeProcess\n466 pascal -ret16 ExitProcess(word) ExitProcess16\n467 stub WOACreateConsole\n468 stub WOASpawnConApp\n469 stub WOAGimmeTitle\n470 stub WOADestroyConsole\n471 pascal GetCurrentProcessId() GetCurrentProcessId16\n472 pascal -register MapHInstLS() MapHInstLS16\n473 pascal -register MapHInstSL() MapHInstSL16\n474 pascal CloseW32Handle(long) CloseW32Handle\n475 pascal -ret16 GetTEBSelectorFS() GetTEBSelectorFS16\n476 pascal ConvertToGlobalHandle(long) ConvertToGlobalHandle16\n477 stub WOAFullScreen\n478 stub WOATerminateProcess\n479 pascal KERNEL_479(long) VWin32_EventSet  # ???\n480 pascal -ret16 _EnterWin16Lock() _EnterWin16Lock\n481 pascal -ret16 _LeaveWin16Lock() _LeaveWin16Lock\n482 pascal LoadSystemLibrary32(str) LoadLibrary32_16   # FIXME!\n483 pascal MapProcessHandle(long) MapProcessHandle\n484 pascal SetProcessDword(long s_word long) SetProcessDword\n485 pascal GetProcessDword(long s_word) GetProcessDword\n486 pascal FreeLibrary32(long) FreeLibrary32_16\n487 pascal GetModuleFileName32(long str word) GetModuleFileName32_16\n488 pascal GetModuleHandle32(str) GetModuleHandle32_16\n489 stub KERNEL_489  # VWin32_BoostWithDecay\n490 pascal -ret16 KERNEL_490(word) KERNEL_490\n491 pascal RegisterServiceProcess(long long) RegisterServiceProcess16\n492 stub WOAAbort\n493 pascal -ret16 UTInit(long long long long) UTInit16\n494 stub KERNEL_494\n\n# 495 is present only in Win98\n495 pascal WaitForMultipleObjectsEx(long ptr long long long) WaitForMultipleObjectsEx16\n\n# 500-544 are WinNT extensions; some are also available in Win95\n\n500 varargs WOW16Call(word word word) WOW16Call\n501 stub KDDBGOUT                                               # Both NT/95 (?)\n502 stub WOWGETNEXTVDMCOMMAND\n503 stub WOWREGISTERSHELLWINDOWHANDLE\n504 stub WOWLOADMODULE\n505 stub WOWQUERYPERFORMANCECOUNTER\n506 stub WOWCURSORICONOP\n#507 stub WOWCURSORICONOP # conflict with 506 !\n507 stub WOWFAILEDEXEC\n#508 stub WOWFAILEDEXEC # conflict with 507 ! (something broken here ?)\n508 stub WOWCLOSECOMPORT\n#509 stub WOWCLOSECOMPORT # conflict with 508 !\n#509 stub WOWKILLREMOTETASK\n511 stub WOWKILLREMOTETASK\n512 stub WOWQUERYDEBUG\n513 pascal LoadLibraryEx32W(str long long) LoadLibraryEx32W16   # Both NT/95\n514 pascal FreeLibrary32W(long) FreeLibrary32W16                # Both NT/95\n515 pascal GetProcAddress32W(long str) GetProcAddress32W16      # Both NT/95\n516 pascal GetVDMPointer32W(segptr word) GetVDMPointer32W16     # Both NT/95\n517 varargs CallProc32W(long long long) CallProc32W16           # Both NT/95\n518 varargs _CallProcEx32W(long long long) CallProcEx32W16      # Both NT/95\n519 stub EXITKERNELTHUNK\n# the __MOD_ variables are WORD datareferences, the current values are invented.\n520 equate __MOD_KERNEL 4200\n521 equate __MOD_DKERNEL 4201\n522 equate __MOD_USER 4203\n523 equate __MOD_DUSER 4204\n524 equate __MOD_GDI 4205\n525 equate __MOD_DGDI 4206\n526 equate __MOD_KEYBOARD 4207\n527 equate __MOD_SOUND 4208\n528 equate __MOD_SHELL 4209\n529 equate __MOD_WINSOCK 4210\n530 equate __MOD_TOOLHELP 4211\n531 equate __MOD_MMEDIA 4212\n532 equate __MOD_COMMDLG 4213\n541 stub WOWSETEXITONLASTAPP\n544 stub WOWSETCOMPATHANDLE\n\n\n# 531-568 are Win95-only extensions.\n# NOTE: Ordinals 531,532,541 clash with the WinNT extensions given above! Argh!\n\n#531 stub ConvertClipboardHandleLS\n#532 stub ConvertClipboardHandleSL\n533 stub ConvertDDEHandleLS\n534 stub ConvertDDEHandleSL\n535 pascal VWin32_BoostThreadGroup(long long) VWin32_BoostThreadGroup\n536 pascal VWin32_BoostThreadStatic(long long) VWin32_BoostThreadStatic\n537 stub KERNEL_537\n538 stub ThunkTheTemplateHandle\n540 stub KERNEL_540\n#541 stub KERNEL_541\n542 stub KERNEL_542\n543 stub KERNEL_543\n560 pascal SetThunkletCallbackGlue(long segptr) SetThunkletCallbackGlue16\n561 pascal AllocLSThunkletCallback(segptr long) AllocLSThunkletCallback16\n562 pascal AllocSLThunkletCallback(long long) AllocSLThunkletCallback16\n563 pascal FindLSThunkletCallback(segptr long) FindLSThunkletCallback\n564 pascal FindSLThunkletCallback(long long) FindSLThunkletCallback\n566 stub KERNEL_566  # (thunklet) FIXME!!!\n567 pascal AllocLSThunkletCallbackEx(segptr long word) AllocLSThunkletCallbackEx16\n568 pascal AllocSLThunkletCallbackEx(long long word) AllocSLThunkletCallbackEx16\n\n\n# 600-653 are Win95 only\n\n600 stub AllocCodeAlias\n601 stub FreeCodeAlias\n602 pascal -ret16 GetDummyModuleHandleDS() GetDummyModuleHandleDS16\n603 stub KERNEL_603  # OutputDebugString (?)\n604 pascal -register CBClientGlueSL() CBClientGlueSL\n# FIXME: 605 is duplicate of 562\n605 pascal AllocSLThunkletCallback_dup(long long) AllocSLThunkletCallback16\n# FIXME: 606 is duplicate of 561\n606 pascal AllocLSThunkletCallback_dup(segptr long) AllocLSThunkletCallback16\n607 pascal AllocLSThunkletSysthunk(segptr long long) AllocLSThunkletSysthunk16\n608 pascal AllocSLThunkletSysthunk(long segptr long) AllocSLThunkletSysthunk16\n# FIXME: 609 is duplicate of 563\n609 pascal FindLSThunkletCallback_dup(segptr long) FindLSThunkletCallback\n# FIXME: 610 is duplicate of 562\n610 pascal FindSLThunkletCallback_dup(long long) FindSLThunkletCallback\n611 pascal -ret16 FreeThunklet(long long) FreeThunklet16\n612 pascal -ret16 IsSLThunklet(ptr) IsSLThunklet16\n613 stub HugeMapLS\n614 stub HugeUnMapLS\n615 pascal -ret16 ConvertDialog32To16(long long long) ConvertDialog32To16\n616 pascal -ret16 ConvertMenu32To16(long long long) ConvertMenu32To16\n617 pascal -ret16 GetMenu32Size(ptr) GetMenu32Size16\n618 pascal -ret16 GetDialog32Size(ptr) GetDialog32Size16\n619 pascal -ret16 RegisterCBClient(word segptr long) RegisterCBClient16\n620 pascal -register CBClientThunkSL() CBClientThunkSL\n621 pascal -register CBClientThunkSLEx() CBClientThunkSLEx\n622 pascal -ret16 UnRegisterCBClient(word segptr long) UnRegisterCBClient16\n623 pascal -ret16 InitCBClient(long) InitCBClient16\n624 pascal SetFastQueue(long long) SetFastQueue16\n625 pascal GetFastQueue() GetFastQueue16\n626 stub SmashEnvironment\n627 pascal -ret16 IsBadFlatReadWritePtr(segptr long word) IsBadFlatReadWritePtr16\n630 pascal -register C16ThkSL() C16ThkSL\n631 pascal -register C16ThkSL01() C16ThkSL01\n651 pascal ThunkConnect16(str str word long ptr str word) ThunkConnect16\n652 stub IsThreadId\n653 stub OkWithKernelToChangeUsers\n\n# Extra Wine internal functions for thunking and self-loader\n\n666 pascal UTGlue16(ptr long ptr long) UTGlue16\n667 pascal EntryAddrProc(word word) EntryAddrProc16\n668 pascal MyAlloc(word word word) MyAlloc16\n669 pascal -ret16 DllEntryPoint(long word word word long word) KERNEL_DllEntryPoint\n\n# 700-704 are Win95 only\n\n700 pascal SSInit() SSInit16\n701 stub SSOnBigStack\n702 stub SSCall\n703 stub CallProc32WFix\n704 pascal -register SSConfirmSmallStack() SSConfirmSmallStack\n\n# Win95 krnl386.exe also exports ordinals 802-864,\n# however, those seem to be only callback stubs that are\n# never called directly by other modules ...\n\n################################################################\n# VxD entry points\n#\n 901 pascal -register __wine_vxd_vmm() __wine_vxd_vmm\n 905 pascal -register __wine_vxd_timer() __wine_vxd_timer\n 909 pascal -register __wine_vxd_reboot() __wine_vxd_reboot\n 910 pascal -register __wine_vxd_vdd() __wine_vxd_vdd\n 912 pascal -register __wine_vxd_vmd() __wine_vxd_vmd\n 914 pascal -register __wine_vxd_comm() __wine_vxd_comm\n#915 pascal -register __wine_vxd_printer() __wine_vxd_printer\n 923 pascal -register __wine_vxd_shell() __wine_vxd_shell\n 933 pascal -register __wine_vxd_pagefile() __wine_vxd_pagefile\n 938 pascal -register __wine_vxd_apm() __wine_vxd_apm\n 939 pascal -register __wine_vxd_vxdloader() __wine_vxd_vxdloader\n 945 pascal -register __wine_vxd_win32s() __wine_vxd_win32s\n 951 pascal -register __wine_vxd_configmg() __wine_vxd_configmg\n 955 pascal -register __wine_vxd_enable() __wine_vxd_enable\n1990 pascal -register __wine_vxd_timerapi() __wine_vxd_timerapi\n\n################################################################\n# 32-bit version of the various 16-bit functions exported by kernel32\n#\n@ stdcall -arch=win32 -norelay VxDCall0() VxDCall\n@ stdcall -arch=win32 -norelay VxDCall1() VxDCall\n@ stdcall -arch=win32 -norelay VxDCall2() VxDCall\n@ stdcall -arch=win32 -norelay VxDCall3() VxDCall\n@ stdcall -arch=win32 -norelay VxDCall4() VxDCall\n@ stdcall -arch=win32 -norelay VxDCall5() VxDCall\n@ stdcall -arch=win32 -norelay VxDCall6() VxDCall\n@ stdcall -arch=win32 -norelay VxDCall7() VxDCall\n@ stdcall -arch=win32 -norelay VxDCall8() VxDCall\n@ stdcall -arch=win32 k32CharToOemA(str ptr)\n@ stdcall -arch=win32 k32CharToOemBuffA(str ptr long)\n@ stdcall -arch=win32 k32OemToCharA(ptr ptr)\n@ stdcall -arch=win32 k32OemToCharBuffA(ptr ptr long)\n@ stdcall -arch=win32 k32LoadStringA(long long ptr long)\n@ varargs -arch=win32 k32wsprintfA(str str)\n@ stdcall -arch=win32 k32wvsprintfA(ptr str ptr)\n@ stdcall -arch=win32 -norelay CommonUnimpStub()\n@ stdcall -arch=win32 GetProcessDword(long long)\n@ stdcall -arch=win32 DosFileHandleToWin32Handle(long)\n@ stdcall -arch=win32 Win32HandleToDosFileHandle(long)\n@ stdcall -arch=win32 DeleteDosFileHandle(long)\n@ stdcall -arch=win32 GlobalAlloc16(long long)\n@ stdcall -arch=win32 GlobalLock16(long)\n@ stdcall -arch=win32 GlobalUnlock16(long)\n@ stdcall -arch=win32 GlobalFix16(long)\n@ stdcall -arch=win32 GlobalUnfix16(long)\n@ stdcall -arch=win32 GlobalWire16(long)\n@ stdcall -arch=win32 GlobalUnWire16(long)\n@ stdcall -arch=win32 GlobalFree16(long)\n@ stdcall -arch=win32 GlobalSize16(long)\n@ stdcall -arch=win32 HouseCleanLogicallyDeadHandles()\n@ stdcall -arch=win32 GetWin16DOSEnv()\n@ stdcall -arch=win32 LoadLibrary16(str)\n@ stdcall -arch=win32 FreeLibrary16(long)\n@ stdcall -arch=win32 GetProcAddress16(long str) WIN32_GetProcAddress16\n@ stdcall -arch=win32 -norelay AllocMappedBuffer()\n@ stdcall -arch=win32 -norelay FreeMappedBuffer()\n@ stdcall -arch=win32 -norelay OT_32ThkLSF()\n@ stdcall -arch=win32 ThunkInitLSF(ptr str long str str)\n@ stdcall -arch=win32 -norelay LogApiThkLSF(str)\n@ stdcall -arch=win32 ThunkInitLS(ptr str long str str)\n@ stdcall -arch=win32 -norelay LogApiThkSL(str)\n@ stdcall -arch=win32 -norelay Common32ThkLS()\n@ stdcall -arch=win32 ThunkInitSL(ptr str long str str)\n@ stdcall -arch=win32 -norelay LogCBThkSL(str)\n@ stdcall -arch=win32 ReleaseThunkLock(ptr)\n@ stdcall -arch=win32 RestoreThunkLock(long)\n@ stdcall -arch=win32 -norelay W32S_BackTo32()\n@ stdcall -arch=win32 GetThunkBuff()\n@ stdcall -arch=win32 GetThunkStuff(str str)\n@ stdcall -arch=win32 K32WOWCallback16(long long)\n@ stdcall -arch=win32 K32WOWCallback16Ex(long long long ptr ptr)\n@ stdcall -arch=win32 K32WOWGetVDMPointer(long long long)\n@ stdcall -arch=win32 K32WOWHandle32(long long)\n@ stdcall -arch=win32 K32WOWHandle16(long long)\n@ stdcall -arch=win32 K32WOWGlobalAlloc16(long long)\n@ stdcall -arch=win32 K32WOWGlobalLock16(long)\n@ stdcall -arch=win32 K32WOWGlobalUnlock16(long)\n@ stdcall -arch=win32 K32WOWGlobalFree16(long)\n@ stdcall -arch=win32 K32WOWGlobalAllocLock16(long long ptr)\n@ stdcall -arch=win32 K32WOWGlobalUnlockFree16(long)\n@ stdcall -arch=win32 K32WOWGlobalLockSize16(long ptr)\n@ stdcall -arch=win32 K32WOWYield16()\n@ stdcall -arch=win32 K32WOWDirectedYield16(long)\n@ stdcall -arch=win32 K32WOWGetVDMPointerFix(long long long)\n@ stdcall -arch=win32 K32WOWGetVDMPointerUnfix(long)\n@ stdcall -arch=win32 K32WOWGetDescriptor(long ptr)\n@ stdcall -arch=win32 _KERNEL32_86(ptr)\n@ stdcall -arch=win32 SSOnBigStack()\n@ varargs -arch=win32 SSCall(long long ptr)\n@ stdcall -arch=win32 -norelay FT_PrologPrime()\n@ stdcall -arch=win32 -norelay QT_ThunkPrime()\n@ stdcall -arch=win32 PK16FNF(ptr)\n@ stdcall -arch=win32 GetPK16SysVar()\n@ stdcall -arch=win32 GetpWin16Lock(ptr)\n@ stdcall -arch=win32 _CheckNotSysLevel(ptr)\n@ stdcall -arch=win32 _ConfirmSysLevel(ptr)\n@ stdcall -arch=win32 _ConfirmWin16Lock()\n@ stdcall -arch=win32 _EnterSysLevel(ptr)\n@ stdcall -arch=win32 _LeaveSysLevel(ptr)\n@ stdcall -arch=win32 _KERNEL32_99(long)\n@ stdcall -arch=win32 _KERNEL32_100(long long long)\n\n@ stdcall -arch=win32 AllocSLCallback(long long)\n@ stdcall -arch=win32 -norelay FT_Exit0()\n@ stdcall -arch=win32 -norelay FT_Exit12()\n@ stdcall -arch=win32 -norelay FT_Exit16()\n@ stdcall -arch=win32 -norelay FT_Exit20()\n@ stdcall -arch=win32 -norelay FT_Exit24()\n@ stdcall -arch=win32 -norelay FT_Exit28()\n@ stdcall -arch=win32 -norelay FT_Exit32()\n@ stdcall -arch=win32 -norelay FT_Exit36()\n@ stdcall -arch=win32 -norelay FT_Exit40()\n@ stdcall -arch=win32 -norelay FT_Exit44()\n@ stdcall -arch=win32 -norelay FT_Exit48()\n@ stdcall -arch=win32 -norelay FT_Exit4()\n@ stdcall -arch=win32 -norelay FT_Exit52()\n@ stdcall -arch=win32 -norelay FT_Exit56()\n@ stdcall -arch=win32 -norelay FT_Exit8()\n@ stdcall -arch=win32 -norelay FT_Prolog()\n@ stdcall -arch=win32 -norelay FT_Thunk()\n@ stdcall -arch=win32 FreeSLCallback(long)\n@ stdcall -arch=win32 Get16DLLAddress(long str)\n@ stdcall -arch=win32 -norelay K32Thk1632Epilog()\n@ stdcall -arch=win32 -norelay K32Thk1632Prolog()\n@ stdcall -arch=win32 -norelay MapHInstLS()\n@ stdcall -arch=win32 -norelay MapHInstLS_PN()\n@ stdcall -arch=win32 -norelay MapHInstSL()\n@ stdcall -arch=win32 -norelay MapHInstSL_PN()\n@ stdcall -arch=win32 MapHModuleLS(long)\n@ stdcall -arch=win32 MapHModuleSL(long)\n@ stdcall -arch=win32 MapLS(ptr)\n@ stdcall -arch=win32 MapSL(long)\n@ stdcall -arch=win32 MapSLFix(long)\n@ stdcall -arch=win32 PrivateFreeLibrary(long)\n@ stdcall -arch=win32 PrivateLoadLibrary(str)\n@ stdcall -arch=win32 -norelay QT_Thunk()\n@ stdcall -arch=win32 -norelay SMapLS()\n@ stdcall -arch=win32 -norelay SMapLS_IP_EBP_12()\n@ stdcall -arch=win32 -norelay SMapLS_IP_EBP_16()\n@ stdcall -arch=win32 -norelay SMapLS_IP_EBP_20()\n@ stdcall -arch=win32 -norelay SMapLS_IP_EBP_24()\n@ stdcall -arch=win32 -norelay SMapLS_IP_EBP_28()\n@ stdcall -arch=win32 -norelay SMapLS_IP_EBP_32()\n@ stdcall -arch=win32 -norelay SMapLS_IP_EBP_36()\n@ stdcall -arch=win32 -norelay SMapLS_IP_EBP_40()\n@ stdcall -arch=win32 -norelay SMapLS_IP_EBP_8()\n@ stdcall -arch=win32 -norelay SUnMapLS()\n@ stdcall -arch=win32 -norelay SUnMapLS_IP_EBP_12()\n@ stdcall -arch=win32 -norelay SUnMapLS_IP_EBP_16()\n@ stdcall -arch=win32 -norelay SUnMapLS_IP_EBP_20()\n@ stdcall -arch=win32 -norelay SUnMapLS_IP_EBP_24()\n@ stdcall -arch=win32 -norelay SUnMapLS_IP_EBP_28()\n@ stdcall -arch=win32 -norelay SUnMapLS_IP_EBP_32()\n@ stdcall -arch=win32 -norelay SUnMapLS_IP_EBP_36()\n@ stdcall -arch=win32 -norelay SUnMapLS_IP_EBP_40()\n@ stdcall -arch=win32 -norelay SUnMapLS_IP_EBP_8()\n@ stdcall -arch=win32 ThunkConnect32(ptr str str str ptr long)\n@ stdcall -arch=win32 UTRegister(long str str str ptr ptr ptr)\n@ stdcall -arch=win32 UTUnRegister(long)\n@ stdcall -arch=win32 UnMapLS(long)\n@ stdcall -arch=win32 -norelay UnMapSLFixArray(long long)\n@ stdcall -arch=win32 _lclose16(long)\n\n################################################################\n# 16-bit symbols not available from kernel32 but used by other 16-bit dlls\n#\n@ stdcall -arch=win32 AllocSelectorArray16(long)\n@ stdcall -arch=win32 FarGetOwner16(long)\n@ stdcall -arch=win32 FarSetOwner16(long long)\n@ stdcall -arch=win32 FindResource16(long str str)\n@ stdcall -arch=win32 FreeResource16(long)\n@ stdcall -arch=win32 FreeSelector16(long)\n@ stdcall -arch=win32 GetCurrentPDB16()\n@ stdcall -arch=win32 GetCurrentTask()\n@ stdcall -arch=win32 GetDOSEnvironment16()\n@ stdcall -arch=win32 GetExePtr(long)\n@ stdcall -arch=win32 GetExeVersion16()\n@ stdcall -arch=win32 GetExpWinVer16(long)\n@ stdcall -arch=win32 GetModuleHandle16(str)\n@ stdcall -arch=win32 GlobalReAlloc16(long long long)\n@ stdcall -arch=win32 InitTask16(ptr)\n@ stdcall -arch=win32 IsBadReadPtr16(long long)\n@ stdcall -arch=win32 IsTask16(long)\n@ stdcall -arch=win32 LoadModule16(str ptr)\n@ stdcall -arch=win32 LoadResource16(long long)\n@ stdcall -arch=win32 LocalAlloc16(long long)\n@ stdcall -arch=win32 LocalInit16(long long long)\n@ stdcall -arch=win32 LocalLock16(long)\n@ stdcall -arch=win32 LocalUnlock16(long)\n@ stdcall -arch=win32 LocalReAlloc16(long long long)\n@ stdcall -arch=win32 LocalFree16(long)\n@ stdcall -arch=win32 LocalSize16(long)\n@ stdcall -arch=win32 LocalCompact16(long)\n@ stdcall -arch=win32 LocalCountFree16()\n@ stdcall -arch=win32 LocalHeapSize16()\n@ stdcall -arch=win32 LockResource16(long)\n@ stdcall -arch=win32 SetSelectorBase(long long)\n@ stdcall -arch=win32 SetSelectorLimit16(long long)\n@ stdcall -arch=win32 GetSelectorLimit16(long)\n@ stdcall -arch=win32 SizeofResource16(long long)\n@ stdcall -arch=win32 WinExec16(str long)\n\n################################################################\n# Wine internal extensions\n#\n# All functions must be prefixed with '__wine_' (for internal functions)\n# or 'wine_' (for user-visible functions) to avoid namespace conflicts.\n\n# DOS support\n@ cdecl -arch=win32 __wine_call_int_handler(ptr long)\n@ cdecl -arch=win32 __wine_load_dos_exe(str str)\n\n# VxDs\n@ cdecl -arch=win32 -private __wine_vxd_open(wstr long ptr)\n@ cdecl -arch=win32 -private __wine_vxd_get_proc(long)\n\n@ stdcall -arch=win32 IsOldWindowsTask(long)\n@ stdcall -arch=win32 GetProcessFlags(long)\n@ stdcall -arch=win32 krnl386_get_config_string(str str str ptr long)\n@ stdcall -arch=win32 krnl386_get_config_int(str str long)\n@ stdcall -arch=win32 krnl386_get_compat_mode(str)\n@ stdcall -arch=win32 krnl386_set_compat_path(str)\n@ stdcall -arch=win32 GetModuleFileName16(long ptr long)\n@ stdcall -arch=win32 GetModuleName16(long ptr long)\n@ stdcall -arch=win32 _EnterWin16Lock()\n@ stdcall -arch=win32 _LeaveWin16Lock()\n@ stdcall -arch=win32 IsRealModeTask(long)\n@ stdcall -arch=win32 RegCloseKey16(ptr)\n@ stdcall -arch=win32 RegCreateKey16(ptr str ptr)\n@ stdcall -arch=win32 RegDeleteKey16(ptr str)\n@ stdcall -arch=win32 RegEnumKey16(ptr long ptr long)\n@ stdcall -arch=win32 RegFlushKey16(ptr)\n@ stdcall -arch=win32 RegOpenKey16(ptr str ptr)\n@ stdcall -arch=win32 RegQueryValue16(ptr str ptr ptr)\n@ stdcall -arch=win32 RegQueryValueEx16(ptr str ptr ptr ptr ptr)\n@ stdcall -arch=win32 RegSetValue16(ptr str long ptr long)\n@ stdcall -arch=win32 RegSetValueEx16(ptr str long long ptr long)\n@ stdcall -arch=win32 K32WOWHandle16Destroy(ptr long)\n@ stdcall -arch=win32 K32WOWHandle16DestroyHint(ptr long)\n@ cdecl -arch=win32 DOSVM_inport(long long)\n@ cdecl -arch=win32 DOSVM_outport(long long long)\n@ cdecl -arch=win32 DOSVM_setportcb(ptr ptr long ptr ptr)\n@ cdecl -arch=win32 DOSVM_SetBuiltinVector(long ptr)\n@ cdecl -arch=win32 DOSVM_GetPMHandler16(long long)\n@ cdecl -arch=win32 DOSVM_SetPMHandler16(long long)\n@ cdecl -arch=win32 krnl386_get_search_path()\n@ cdecl -arch=win32 krnl386_search_executable_file(str ptr long long)\n@ stdcall -arch=win32 DibMapGlobalMemory(long ptr long)\n@ stdcall -arch=win32 DibUnmapGlobalMemory(ptr long)\n@ stdcall -arch=win32 GlobalMapInternal(long ptr long)\n@ cdecl -arch=win32 make_thunk_32(ptr str str long long long)\n@ cdecl -arch=win32 free_thunk_32(long)\n@ cdecl -arch=win32 get_resource_table(long str ptr)\n@ cdecl -arch=win32 get_aflags(long)\n@ stdcall -arch=win32 WritePrivateProfileStruct16(str str ptr long str)\n@ stdcall -arch=win32 GetPrivateProfileStruct16(str str ptr long str)\n@ stdcall -arch=win32 StackTraceFirst16(ptr long)\n@ stdcall -arch=win32 StackTraceCSIPFirst16(ptr long long long long)\n@ stdcall -arch=win32 StackTraceNext16(ptr)\n@ stdcall -arch=win32 TaskSetCSIP16(long long long)\n@ stdcall -arch=win32 TaskGetCSIP16(long)\n@ stdcall -arch=win32 TaskSwitch16(long long)\n@ stdcall -arch=win32 AllocDStoCSAlias16(long)\n@ cdecl -arch=win32 GLOBAL_GetLink(long)\n@ cdecl -arch=win32 GLOBAL_SetLink(long long)\n@ cdecl -arch=win32 GLOBAL_FindLink(long)\n@ cdecl -arch=win32 GLOBAL_SetSeg(long long long)\n@ stdcall -arch=win32 set_vm_inject_cb(long)\n@ stdcall -arch=win32 vm_inject(long long long long long)\n@ stdcall -arch=win32 get_idle_event()\n@ stdcall -arch=win32 get_windows_build()\n\n#VDD apis\n@ stdcall -arch=win32 getAL()\n@ stdcall -arch=win32 getAH()\n@ stdcall -arch=win32 getAX()\n@ stdcall -arch=win32 getEAX()\n@ stdcall -arch=win32 getBL()\n@ stdcall -arch=win32 getBH()\n@ stdcall -arch=win32 getBX()\n@ stdcall -arch=win32 getEBX()\n@ stdcall -arch=win32 getCL()\n@ stdcall -arch=win32 getCH()\n@ stdcall -arch=win32 getCX()\n@ stdcall -arch=win32 getECX()\n@ stdcall -arch=win32 getDL()\n@ stdcall -arch=win32 getDH()\n@ stdcall -arch=win32 getDX()\n@ stdcall -arch=win32 getEDX()\n@ stdcall -arch=win32 getSP()\n@ stdcall -arch=win32 getESP()\n@ stdcall -arch=win32 getBP()\n@ stdcall -arch=win32 getEBP()\n@ stdcall -arch=win32 getSI()\n@ stdcall -arch=win32 getESI()\n@ stdcall -arch=win32 getDI()\n@ stdcall -arch=win32 getEDI()\n@ stdcall -arch=win32 setAL(long)\n@ stdcall -arch=win32 setAH(long)\n@ stdcall -arch=win32 setAX(long)\n@ stdcall -arch=win32 setEAX(long)\n@ stdcall -arch=win32 setBL(long)\n@ stdcall -arch=win32 setBH(long)\n@ stdcall -arch=win32 setBX(long)\n@ stdcall -arch=win32 setEBX(long)\n@ stdcall -arch=win32 setCL(long)\n@ stdcall -arch=win32 setCH(long)\n@ stdcall -arch=win32 setCX(long)\n@ stdcall -arch=win32 setECX(long)\n@ stdcall -arch=win32 setDL(long)\n@ stdcall -arch=win32 setDH(long)\n@ stdcall -arch=win32 setDX(long)\n@ stdcall -arch=win32 setEDX(long)\n@ stdcall -arch=win32 setSP(long)\n@ stdcall -arch=win32 setESP(long)\n@ stdcall -arch=win32 setBP(long)\n@ stdcall -arch=win32 setEBP(long)\n@ stdcall -arch=win32 setSI(long)\n@ stdcall -arch=win32 setESI(long)\n@ stdcall -arch=win32 setDI(long)\n@ stdcall -arch=win32 setEDI(long)\n@ stdcall -arch=win32 getDS()\n@ stdcall -arch=win32 getES()\n@ stdcall -arch=win32 getCS()\n@ stdcall -arch=win32 getSS()\n@ stdcall -arch=win32 getFS()\n@ stdcall -arch=win32 getGS()\n@ stdcall -arch=win32 setDS(long)\n@ stdcall -arch=win32 setES(long)\n@ stdcall -arch=win32 setCS(long)\n@ stdcall -arch=win32 setSS(long)\n@ stdcall -arch=win32 setFS(long)\n@ stdcall -arch=win32 setGS(long)\n@ stdcall -arch=win32 getIP()\n@ stdcall -arch=win32 getEIP()\n@ stdcall -arch=win32 setIP(long)\n@ stdcall -arch=win32 setEIP(long)\n@ stdcall -arch=win32 getCF()\n@ stdcall -arch=win32 getPF()\n@ stdcall -arch=win32 getAF()\n@ stdcall -arch=win32 getZF()\n@ stdcall -arch=win32 getSF()\n@ stdcall -arch=win32 getIF()\n@ stdcall -arch=win32 getDF()\n@ stdcall -arch=win32 getOF()\n@ stdcall -arch=win32 setCF(long)\n@ stdcall -arch=win32 setPF(long)\n@ stdcall -arch=win32 setAF(long)\n@ stdcall -arch=win32 setZF(long)\n@ stdcall -arch=win32 setSF(long)\n@ stdcall -arch=win32 setIF(long)\n@ stdcall -arch=win32 setDF(long)\n@ stdcall -arch=win32 setOF(long)\n@ stdcall -arch=win32 VDDInstallIOHook(long long ptr ptr)\n@ stdcall -arch=win32 VDDDeInstallIOHook(long long ptr)\n@ stdcall -arch=win32 MGetVdmPointer(long long long)\n"
  },
  {
    "path": "krnl386/krnl386.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{D3F34C25-272C-4E4F-9B6F-BE7ABB472966}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>krnl386</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n    <Import Project=\"$(VCTargetsPath)\\BuildCustomizations\\masm.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <IncludePath>../wine;$(IncludePath)</IncludePath>\n    <TargetName>$(ProjectName)</TargetName>\n    <TargetExt>.exe16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <TargetExt>.exe16</TargetExt>\n    <IncludePath>../wine;$(VC_IncludePath);$(WindowsSDK_IncludePath);</IncludePath>\n    <IgnoreImportLibrary>false</IgnoreImportLibrary>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>_DEBUG;MZ_SUPPORTED;ENABLEREDIRECTSYSTEMDIR;WIN32;_WINDOWS;_USRDLL;KRNL386_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=</PreprocessorDefinitions>\n      <ObjectFileName>$(IntDir)</ObjectFileName>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;lz32.lib;$(OutDir)libwine.lib;ntdll.lib;ddraw.lib;dsound.lib;kernel32.lib;advapi32.lib;user32.lib;shell32.lib;gdi32.lib;winspool.lib</AdditionalDependencies>\n      <ModuleDefinitionFile>krnl386.def</ModuleDefinitionFile>\n      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>NDEBUG;MZ_SUPPORTED;ENABLEREDIRECTSYSTEMDIR;WIN32;_WINDOWS;_USRDLL;KRNL386_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=</PreprocessorDefinitions>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;lz32.lib;$(OutDir)libwine.lib;ntdll.lib;ddraw.lib;dsound.lib;kernel32.lib;advapi32.lib;user32.lib;shell32.lib;gdi32.lib;winspool.lib</AdditionalDependencies>\n      <ForceFileOutput>\n      </ForceFileOutput>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>krnl386.def</ModuleDefinitionFile>\n      <DelayLoadDLLs>\n      </DelayLoadDLLs>\n      <IgnoreSpecificDefaultLibraries>\n      </IgnoreSpecificDefaultLibraries>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"atom.c\" />\n    <ClCompile Include=\"conf.c\" />\n    <ClCompile Include=\"compat.c\" />\n    <ClCompile Include=\"dma.c\" />\n    <ClCompile Include=\"dosaspi.c\" />\n    <ClCompile Include=\"dosdev.c\" />\n    <ClCompile Include=\"dosexe.c\" />\n    <ClCompile Include=\"dosmem.c\" />\n    <ClCompile Include=\"dosvm.c\" />\n    <ClCompile Include=\"error.c\" />\n    <ClCompile Include=\"file.c\" />\n    <ClCompile Include=\"fpu.c\" />\n    <ClCompile Include=\"global.c\" />\n    <ClCompile Include=\"instr.c\" />\n    <ClCompile Include=\"int09.c\" />\n    <ClCompile Include=\"int10.c\" />\n    <ClCompile Include=\"int13.c\" />\n    <ClCompile Include=\"int15.c\" />\n    <ClCompile Include=\"int16.c\" />\n    <ClCompile Include=\"int21.c\" />\n    <ClCompile Include=\"int25.c\" />\n    <ClCompile Include=\"int26.c\" />\n    <ClCompile Include=\"int2f.c\" />\n    <ClCompile Include=\"int31.c\" />\n    <ClCompile Include=\"int33.c\" />\n    <ClCompile Include=\"int67.c\" />\n    <ClCompile Include=\"interrupts.c\" />\n    <ClCompile Include=\"ioports.c\" />\n    <ClCompile Include=\"kernel.c\" />\n    <ClCompile Include=\"local.c\" />\n    <ClCompile Include=\"ne_module.c\" />\n    <ClCompile Include=\"ne_segment.c\" />\n    <ClCompile Include=\"registry.c\" />\n    <ClCompile Include=\"relay.c\" />\n    <ClCompile Include=\"resource.c\" />\n    <ClCompile Include=\"selector.c\" />\n    <ClCompile Include=\"snoop.c\" />\n    <ClCompile Include=\"soundblaster.c\" />\n    <ClCompile Include=\"stub.c\" />\n    <ClCompile Include=\"syslevel.c\" />\n    <ClCompile Include=\"task.c\">\n      <PreprocessorDefinitions Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">WIN32;NDEBUG;_WINDOWS;_USRDLL;KRNL386_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=</PreprocessorDefinitions>\n    </ClCompile>\n    <ClCompile Include=\"thunk.c\" />\n    <ClCompile Include=\"timer.c\" />\n    <ClCompile Include=\"utthunk.c\" />\n    <ClCompile Include=\"vdd.c\" />\n    <ClCompile Include=\"vga.c\" />\n    <ClCompile Include=\"vxd.c\" />\n    <ClCompile Include=\"wowthunk.c\" />\n    <ClCompile Include=\"wow_handle.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"dosexe.h\" />\n    <ClInclude Include=\"vga.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"krnl386.def\" />\n    <CustomBuild Include=\"krnl386.exe16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" KERNEL &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" KERNEL &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"krnl386.exe16.obj\">\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</ExcludedFromBuild>\n    </Object>\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n    <Import Project=\"$(VCTargetsPath)\\BuildCustomizations\\masm.targets\" />\n  </ImportGroup>\n</Project>\n"
  },
  {
    "path": "krnl386/krnl386.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"ソース ファイル\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"ヘッダー ファイル\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"リソース ファイル\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"ne_segment.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"ne_module.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"atom.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"fpu.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"global.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"instr.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"error.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"file.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"kernel.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"local.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"thunk.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"timer.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"utthunk.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"registry.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"relay.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"resource.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"selector.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"snoop.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"soundblaster.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"syslevel.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"task.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"vxd.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"wowthunk.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"vga.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"dma.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"dosaspi.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"dosdev.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"dosexe.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"dosmem.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"dosvm.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"interrupts.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"ioports.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"int2f.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"int09.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"int10.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"int13.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"int15.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"int16.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"int21.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"int25.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"int26.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"int31.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"int33.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"int67.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"stub.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"wow_handle.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"conf.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"vga.h\">\n      <Filter>ソース ファイル</Filter>\n    </ClInclude>\n    <ClInclude Include=\"dosexe.h\">\n      <Filter>ソース ファイル</Filter>\n    </ClInclude>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"krnl386.def\">\n      <Filter>ソース ファイル</Filter>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"krnl386.exe16.obj\">\n      <Filter>ソース ファイル</Filter>\n    </Object>\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"krnl386.exe16.spec\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "krnl386/local.c",
    "content": "/*\n * 16-bit local heap functions\n *\n * Copyright 1995 Alexandre Julliard\n * Copyright 1996 Huw Davies\n * Copyright 1998 Ulrich Weigand\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n/*\n * Note:\n * All local heap functions need the current DS as first parameter\n * when called from the emulation library, so they take one more\n * parameter than usual.\n */\n\n#include \"config.h\"\n\n#define NONAMELESSUNION\n\n#include <stdlib.h>\n#include <string.h>\n#include \"wine/winbase16.h\"\n#include \"windows/wownt32.h\"\n#include \"winternl.h\"\n#include \"kernel16_private.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(local);\n\ntypedef struct\n{\n/* Arena header */\n    WORD prev;          /* Previous arena | arena type */\n    WORD next;          /* Next arena */\n/* Start of the memory block or free-list info */\n    WORD size;          /* Size of the free block */\n    WORD free_prev;     /* Previous free block */\n    WORD free_next;     /* Next free block */\n} LOCALARENA;\n\n#define ARENA_HEADER_SIZE      4\n#define ARENA_HEADER( handle) ((handle) - ARENA_HEADER_SIZE)\n\n  /* Arena types (stored in 'prev' field of the arena) */\n#define LOCAL_ARENA_FREE       0\n#define LOCAL_ARENA_FIXED      1\n\n/* LocalNotify() msgs */\n\n#define LN_OUTOFMEM\t0\n#define LN_MOVE\t\t1\n#define LN_DISCARD\t2\n\n/* Layout of a handle entry table\n *\n * WORD                     count of entries\n * LOCALHANDLEENTRY[count]  entries\n * WORD                     near ptr to next table\n */\ntypedef struct\n{\n    WORD addr;                /* Address of the MOVEABLE block */\n    BYTE flags;               /* Flags for this block */\n    BYTE lock;                /* Lock count */\n} LOCALHANDLEENTRY;\n\n/*\n * We make addr = 4n + 2 and set *((WORD *)addr - 1) = &addr like Windows does\n * in case something actually relies on this.\n *\n * An unused handle has lock = flags = 0xff. In windows addr is that of next\n * free handle, at the moment in wine we set it to 0.\n *\n * A discarded block's handle has lock = addr = 0 and flags = 0x40\n * (LMEM_DISCARDED >> 8)\n */\n\n#define MOVEABLE_PREFIX sizeof(HLOCAL16)\n\n\n#include \"pshpack1.h\"\n\ntypedef struct\n{\n    WORD check;                 /* 00 Heap checking flag */\n    WORD freeze;                /* 02 Heap frozen flag */\n    WORD items;                 /* 04 Count of items on the heap */\n    WORD first;                 /* 06 First item of the heap */\n    WORD pad1;                  /* 08 Always 0 */\n    WORD last;                  /* 0a Last item of the heap */\n    WORD pad2;                  /* 0c Always 0 */\n    BYTE ncompact;              /* 0e Compactions counter */\n    BYTE dislevel;              /* 0f Discard level */\n    DWORD distotal;             /* 10 Total bytes discarded */\n    WORD htable;                /* 14 Pointer to handle table */\n    WORD hfree;                 /* 16 Pointer to free handle table */\n    WORD hdelta;                /* 18 Delta to expand the handle table */\n    WORD expand;                /* 1a Pointer to expand function (unused) */\n    WORD pstat;                 /* 1c Pointer to status structure (unused) */\n    FARPROC16 notify;           /* 1e Pointer to LocalNotify() function */\n    WORD lock;                  /* 22 Lock count for the heap */\n    WORD extra;                 /* 24 Extra bytes to allocate when expanding */\n    WORD minsize;               /* 26 Minimum size of the heap */\n    WORD magic;                 /* 28 Magic number */\n} LOCALHEAPINFO;\n\ntypedef struct\n{\n    DWORD dwSize;                /* 00 */\n    DWORD dwMemReserved;         /* 04 */\n    DWORD dwMemCommitted;        /* 08 */\n    DWORD dwTotalFree;           /* 0C */\n    DWORD dwLargestFreeBlock;    /* 10 */\n    DWORD dwcFreeHandles;        /* 14 */\n} LOCAL32INFO;\n\ntypedef struct\n{\n    DWORD dwSize;                /* 00 */\n    WORD hHandle;                /* 04 */\n    DWORD dwAddress;             /* 06 */\n    DWORD dwSizeBlock;           /* 0A */\n    WORD wFlags;                 /* 0E */\n    WORD wType;                  /* 10 */\n    WORD hHeap;                  /* 12 */\n    WORD wHeapType;              /* 14 */\n    DWORD dwNext;                /* 16 */\n    DWORD dwNextAlt;             /* 1A */\n} LOCAL32ENTRY;\n\n#include \"poppack.h\"\n\n#define LOCAL_HEAP_MAGIC  0x484c  /* 'LH' */\n\n  /* All local heap allocations are aligned on 4-byte boundaries */\n#define LALIGN(word)          (((word) + 3) & ~3)\n\n#define ARENA_PTR(ptr,arena)       ((LOCALARENA *)((char *)(ptr)+(arena)))\n#define ARENA_PREV(ptr,arena)      (ARENA_PTR((ptr),(arena))->prev & ~3)\n#define ARENA_NEXT(ptr,arena)      (ARENA_PTR((ptr),(arena))->next)\n#define ARENA_FLAGS(ptr,arena)     (ARENA_PTR((ptr),(arena))->prev & 3)\n\n  /* determine whether the handle belongs to a fixed or a moveable block */\n#define HANDLE_FIXED(handle) (((handle) & 3) == 0)\n#define HANDLE_MOVEABLE(handle) (((handle) & 3) == 2)\n\n\n/* 32-bit heap definitions */\n\n#define HTABLE_SIZE      0x10000\n#define HTABLE_PAGESIZE  0x1000\n#define HTABLE_NPAGES    (HTABLE_SIZE / HTABLE_PAGESIZE)\n\n#include \"pshpack1.h\"\ntypedef struct _LOCAL32HEADER\n{\n    WORD     freeListFirst[HTABLE_NPAGES];\n    WORD     freeListSize[HTABLE_NPAGES];\n    WORD     freeListLast[HTABLE_NPAGES];\n\n    DWORD    selectorTableOffset;\n    WORD     selectorTableSize;\n    WORD     selectorDelta;\n\n    DWORD    segment;\n    LPBYTE   base;\n\n    DWORD    limit;\n    DWORD    flags;\n\n    DWORD    magic;\n    HANDLE heap;\n\n} LOCAL32HEADER;\n#include \"poppack.h\"\n\n#define LOCAL32_MAGIC    ((DWORD)('L' | ('H'<<8) | ('3'<<16) | ('2'<<24)))\n\n\nstatic inline BOOL16 call_notify_func( FARPROC16 proc, WORD msg, HLOCAL16 handle, WORD arg )\n{\n    DWORD ret;\n    WORD args[3];\n\n    if (!proc) return FALSE;\n    args[2] = msg;\n    args[1] = handle;\n    args[0] = arg;\n    WOWCallback16Ex( (DWORD)proc, WCB16_PASCAL, sizeof(args), args, &ret );\n    return LOWORD(ret);\n}\n\n\n/***********************************************************************\n *           LOCAL_GetHeap\n *\n * Return a pointer to the local heap, making sure it exists.\n */\nstatic LOCALHEAPINFO *LOCAL_GetHeap( HANDLE16 ds )\n{\n    LOCALHEAPINFO *pInfo;\n    INSTANCEDATA *ptr = MapSL( MAKESEGPTR( ds, 0 ));\n    TRACE(\"Heap at %p, %04x\\n\", ptr, (ptr != NULL ? ptr->heap : 0xFFFF));\n    if (!ptr || !ptr->heap) return NULL;\n    if (IsBadReadPtr16( (SEGPTR)MAKELONG(ptr->heap,ds), sizeof(LOCALHEAPINFO)))\n    {\n\tWARN(\"Bad pointer\\n\");\n        return NULL;\n    }\n    pInfo = (LOCALHEAPINFO*)((char*)ptr + ptr->heap);\n    if (pInfo->magic != LOCAL_HEAP_MAGIC)\n    {\n\tWARN(\"Bad magic\\n\");\n\treturn NULL;\n    }\n    return pInfo;\n}\n\n\n/***********************************************************************\n *           LOCAL_MakeBlockFree\n *\n * Make a block free, inserting it in the free-list.\n * 'block' is the handle of the block arena; 'baseptr' points to\n * the beginning of the data segment containing the heap.\n */\nstatic void LOCAL_MakeBlockFree( char *baseptr, WORD block )\n{\n    LOCALARENA *pArena, *pNext;\n    WORD next;\n\n      /* Mark the block as free */\n\n    pArena = ARENA_PTR( baseptr, block );\n    pArena->prev = (pArena->prev & ~3) | LOCAL_ARENA_FREE;\n    pArena->size = pArena->next - block;\n\n      /* Find the next free block (last block is always free) */\n\n    next = pArena->next;\n    for (;;)\n    {\n        pNext = ARENA_PTR( baseptr, next );\n        if ((pNext->prev & 3) == LOCAL_ARENA_FREE) break;\n        next = pNext->next;\n    }\n\n    TRACE(\"%04x, next %04x\\n\", block, next );\n      /* Insert the free block in the free-list */\n\n    pArena->free_prev = pNext->free_prev;\n    pArena->free_next = next;\n    ARENA_PTR(baseptr,pNext->free_prev)->free_next = block;\n    pNext->free_prev  = block;\n}\n\n\n/***********************************************************************\n *           LOCAL_RemoveFreeBlock\n *\n * Remove a block from the free-list.\n * 'block' is the handle of the block arena; 'baseptr' points to\n * the beginning of the data segment containing the heap.\n */\nstatic void LOCAL_RemoveFreeBlock( char *baseptr, WORD block )\n{\n      /* Mark the block as fixed */\n\n    LOCALARENA *pArena = ARENA_PTR( baseptr, block );\n    pArena->prev = (pArena->prev & ~3) | LOCAL_ARENA_FIXED;\n\n      /* Remove it from the list */\n\n    ARENA_PTR(baseptr,pArena->free_prev)->free_next = pArena->free_next;\n    ARENA_PTR(baseptr,pArena->free_next)->free_prev = pArena->free_prev;\n}\n\n\n/***********************************************************************\n *           LOCAL_AddBlock\n *\n * Insert a new block in the heap.\n * 'new' is the handle of the new block arena; 'baseptr' points to\n * the beginning of the data segment containing the heap; 'prev' is\n * the block before the new one.\n */\nstatic void LOCAL_AddBlock( char *baseptr, WORD prev, WORD new )\n{\n    LOCALARENA *pPrev = ARENA_PTR( baseptr, prev );\n    LOCALARENA *pNew  = ARENA_PTR( baseptr, new );\n\n    pNew->prev = (prev & ~3) | LOCAL_ARENA_FIXED;\n    pNew->next = pPrev->next;\n    ARENA_PTR(baseptr,pPrev->next)->prev &= 3;\n    ARENA_PTR(baseptr,pPrev->next)->prev |= new;\n    pPrev->next = new;\n}\n\n\n/***********************************************************************\n *           LOCAL_RemoveBlock\n *\n * Remove a block from the heap.\n * 'block' is the handle of the block arena; 'baseptr' points to\n * the beginning of the data segment containing the heap.\n */\nstatic void LOCAL_RemoveBlock( char *baseptr, WORD block )\n{\n    LOCALARENA *pArena, *pTmp;\n\n      /* Remove the block from the free-list */\n\n    TRACE(\"\\n\");\n    pArena = ARENA_PTR( baseptr, block );\n    if ((pArena->prev & 3) == LOCAL_ARENA_FREE)\n        LOCAL_RemoveFreeBlock( baseptr, block );\n\n      /* If the previous block is free, expand its size */\n\n    pTmp = ARENA_PTR( baseptr, pArena->prev & ~3 );\n    if ((pTmp->prev & 3) == LOCAL_ARENA_FREE)\n        pTmp->size += pArena->next - block;\n\n      /* Remove the block from the linked list */\n\n    pTmp->next = pArena->next;\n    pTmp = ARENA_PTR( baseptr, pArena->next );\n    pTmp->prev = (pTmp->prev & 3) | (pArena->prev & ~3);\n}\n\n\n/***********************************************************************\n *           LOCAL_PrintHeap\n */\nstatic void LOCAL_PrintHeap( HANDLE16 ds )\n{\n    char *ptr;\n    LOCALHEAPINFO *pInfo;\n    WORD arena;\n\n    /* FIXME - the test should be done when calling the function!\n               plus is not clear that we should print this info\n               only when TRACE_ON is on! */\n    if(!TRACE_ON(local)) return;\n\n    ptr = MapSL( MAKESEGPTR( ds, 0 ));\n    pInfo = LOCAL_GetHeap( ds );\n\n    if (!pInfo)\n    {\n        ERR( \"Local Heap corrupted!  ds=%04x\\n\", ds );\n        return;\n    }\n    TRACE( \"Local Heap  ds=%04x first=%04x last=%04x items=%d\\n\",\n             ds, pInfo->first, pInfo->last, pInfo->items );\n\n    arena = pInfo->first;\n    for (;;)\n    {\n        LOCALARENA *pArena = ARENA_PTR(ptr,arena);\n        TRACE( \"  %04x: prev=%04x next=%04x type=%d\\n\", arena,\n               pArena->prev & ~3, pArena->next, pArena->prev & 3 );\n        if (arena == pInfo->first)\n\t{\n            TRACE( \"        size=%d free_prev=%04x free_next=%04x\\n\",\n                     pArena->size, pArena->free_prev, pArena->free_next );\n\t}\n        if ((pArena->prev & 3) == LOCAL_ARENA_FREE)\n        {\n            TRACE( \"        size=%d free_prev=%04x free_next=%04x\\n\",\n                     pArena->size, pArena->free_prev, pArena->free_next );\n            if (pArena->next == arena) break;  /* last one */\n            if (ARENA_PTR(ptr,pArena->free_next)->free_prev != arena)\n            {\n                TRACE( \"*** arena->free_next->free_prev != arena\\n\" );\n                break;\n            }\n        }\n        if (pArena->next == arena)\n        {\n            TRACE( \"*** last block is not marked free\\n\" );\n            break;\n        }\n        if ((ARENA_PTR(ptr,pArena->next)->prev & ~3) != arena)\n        {\n            TRACE( \"*** arena->next->prev != arena (%04x, %04x)\\n\",\n                     pArena->next, ARENA_PTR(ptr,pArena->next)->prev);\n            break;\n        }\n        arena = pArena->next;\n    }\n}\n\n#ifdef HEAP_VALIDATE\nstatic BOOL LOCAL_Validate(WORD ds, HANDLE16 handle)\n{\n    char *ptr;\n    LOCALHEAPINFO *pInfo;\n    ptr = MapSL(MAKESEGPTR(ds, 0));\n    if(!(pInfo = LOCAL_GetHeap(ds)))\n        return FALSE;\n    if (IsBadReadPtr16(MAKESEGPTR(ds, handle), 2))\n        goto fail;\n\n    if(HANDLE_MOVEABLE(handle))\n    {\n        LOCALHANDLEENTRY *pEntry = (LOCALHANDLEENTRY *)(ptr + handle);\n        HANDLE16 nhandle = pEntry->addr - MOVEABLE_PREFIX;\n        if (ARENA_PTR(ptr, ARENA_HEADER(nhandle))->size != handle) goto fail;\n        handle = nhandle;\n    }\n    handle = ARENA_HEADER(handle);\n    if (ARENA_NEXT(ptr, ARENA_PREV(ptr, handle)) != handle) goto fail;\n    if (ARENA_PREV(ptr, ARENA_NEXT(ptr, handle)) != handle) goto fail;\n    return TRUE;\nfail:\n    ERR(\"invalid handle %04x\\n\", handle);\n    return FALSE;\n}\n#endif\n/***********************************************************************\n *           LocalInit   (KERNEL.4)\n */\nBOOL16 WINAPI LocalInit16( HANDLE16 selector, WORD start, WORD end )\n{\n    char *ptr;\n    WORD heapInfoArena, freeArena, lastArena;\n    LOCALHEAPINFO *pHeapInfo;\n    LOCALARENA *pArena, *pFirstArena, *pLastArena;\n    BOOL16 ret = FALSE;\n\n      /* The initial layout of the heap is: */\n      /* - first arena         (FIXED)      */\n      /* - heap info structure (FIXED)      */\n      /* - large free block    (FREE)       */\n      /* - last arena          (FREE)       */\n\n    TRACE(\"%04x %04x-%04x\\n\", selector, start, end);\n    if (!selector) selector = CURRENT_DS;\n\n    if (TRACE_ON(local))\n    {\n        /* If TRACE_ON(local) is set, the global heap blocks are */\n        /* cleared before use, so we can test for double initialization. */\n        if (LOCAL_GetHeap(selector))\n        {\n            ERR(\"Heap %04x initialized twice.\\n\", selector);\n            LOCAL_PrintHeap(selector);\n        }\n    }\n\n    if (start == 0)\n    {\n        /* start == 0 means: put the local heap at the end of the segment */\n\n        DWORD size = GlobalSize16( GlobalHandle16( selector ) );\n\tstart = (WORD)(size > 0xffff ? 0xffff : size) - 1;\n        if ( end > 0xfffe ) end = 0xfffe;\n        start -= end;\n        end += start;\n    }\n    ptr = MapSL( MAKESEGPTR( selector, 0 ) );\n\n    start = LALIGN( max( start, sizeof(INSTANCEDATA) ) );\n    heapInfoArena = LALIGN(start + sizeof(LOCALARENA) );\n    freeArena = LALIGN( heapInfoArena + ARENA_HEADER_SIZE\n                        + sizeof(LOCALHEAPINFO) );\n    lastArena = (end - sizeof(LOCALARENA)) & ~3;\n\n      /* Make sure there's enough space.       */\n\n    if (freeArena + sizeof(LOCALARENA) >= lastArena) goto done;\n\n      /* Initialise the first arena */\n\n    pFirstArena = ARENA_PTR( ptr, start );\n    pFirstArena->prev      = start | LOCAL_ARENA_FIXED;\n    pFirstArena->next      = heapInfoArena;\n    pFirstArena->size      = LALIGN(sizeof(LOCALARENA));\n    pFirstArena->free_prev = start;  /* this one */\n    pFirstArena->free_next = freeArena;\n\n      /* Initialise the arena of the heap info structure */\n\n    pArena = ARENA_PTR( ptr, heapInfoArena );\n    pArena->prev = start | LOCAL_ARENA_FIXED;\n    pArena->next = freeArena;\n\n      /* Initialise the heap info structure */\n\n    pHeapInfo = (LOCALHEAPINFO *) (ptr + heapInfoArena + ARENA_HEADER_SIZE );\n    memset( pHeapInfo, 0, sizeof(LOCALHEAPINFO) );\n    pHeapInfo->items   = 4;\n    pHeapInfo->first   = start;\n    pHeapInfo->last    = lastArena;\n    pHeapInfo->htable  = 0;\n    pHeapInfo->hdelta  = 0x20;\n    pHeapInfo->extra   = 0x200;\n    pHeapInfo->minsize = lastArena - freeArena;\n    pHeapInfo->magic   = LOCAL_HEAP_MAGIC;\n\n      /* Initialise the large free block */\n\n    pArena = ARENA_PTR( ptr, freeArena );\n    pArena->prev      = heapInfoArena | LOCAL_ARENA_FREE;\n    pArena->next      = lastArena;\n    pArena->size      = lastArena - freeArena;\n    pArena->free_prev = start;\n    pArena->free_next = lastArena;\n\n      /* Initialise the last block */\n\n    pLastArena = ARENA_PTR( ptr, lastArena );\n    pLastArena->prev      = freeArena | LOCAL_ARENA_FREE;\n    pLastArena->next      = lastArena;  /* this one */\n    pLastArena->size      = LALIGN(sizeof(LOCALARENA));\n    pLastArena->free_prev = freeArena;\n    pLastArena->free_next = lastArena;  /* this one */\n\n      /* Store the local heap address in the instance data */\n\n    ((INSTANCEDATA *)ptr)->heap = heapInfoArena + ARENA_HEADER_SIZE;\n    LOCAL_PrintHeap( selector );\n    ret = TRUE;\n\n done:\n    if (CURRENT_STACK16)\n        CURRENT_STACK16->ecx = ret;  /* must be returned in cx too */\n    return ret;\n}\n\n\n/***********************************************************************\n *           LOCAL_GrowHeap\n */\nstatic BOOL16 LOCAL_GrowHeap( HANDLE16 ds, DWORD newsize )\n{\n    HANDLE16 hseg;\n    LONG oldsize;\n    LONG end;\n    LOCALHEAPINFO *pHeapInfo;\n    WORD freeArena, lastArena;\n    LOCALARENA *pArena, *pLastArena;\n    char *ptr;\n\n    hseg = GlobalHandle16( ds );\n    /* maybe mem allocated by Virtual*() ? */\n    if (!hseg) return FALSE;\n\n    oldsize = GlobalSize16( hseg );\n    /* if nothing can be gained, return */\n    if (oldsize > 0xfff0) return FALSE;\n    hseg = GlobalReAlloc16( hseg, newsize, GMEM_FIXED );\n    if (!hseg)\n        return 0;\n    ptr = MapSL( MAKESEGPTR( ds, 0 ) );\n    pHeapInfo = LOCAL_GetHeap( ds );\n    if (pHeapInfo == NULL) {\n\tERR(\"Heap not found\\n\" );\n\treturn FALSE;\n    }\n    end = GlobalSize16( hseg );\n    lastArena = (end - sizeof(LOCALARENA)) & ~3;\n\n      /* Update the HeapInfo */\n    pHeapInfo->items++;\n    freeArena = pHeapInfo->last;\n    pHeapInfo->last = lastArena;\n    pHeapInfo->minsize += end - oldsize;\n\n      /* grow the old last block */\n    pArena = ARENA_PTR( ptr, freeArena );\n    pArena->size      = lastArena - freeArena;\n    pArena->next      = lastArena;\n    pArena->free_next = lastArena;\n\n      /* Initialise the new last block */\n\n    pLastArena = ARENA_PTR( ptr, lastArena );\n    pLastArena->prev      = freeArena | LOCAL_ARENA_FREE;\n    pLastArena->next      = lastArena;  /* this one */\n    pLastArena->size      = LALIGN(sizeof(LOCALARENA));\n    pLastArena->free_prev = freeArena;\n    pLastArena->free_next = lastArena;  /* this one */\n\n    /* If block before freeArena is also free then merge them */\n    if((ARENA_PTR(ptr, (pArena->prev & ~3))->prev & 3) == LOCAL_ARENA_FREE)\n    {\n        LOCAL_RemoveBlock(ptr, freeArena);\n        pHeapInfo->items--;\n    }\n\n    TRACE(\"Heap expanded\\n\" );\n    LOCAL_PrintHeap( ds );\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           LOCAL_FreeArena\n */\nstatic HLOCAL16 LOCAL_FreeArena( WORD ds, WORD arena )\n{\n    char *ptr = MapSL( MAKESEGPTR( ds, 0 ) );\n    LOCALHEAPINFO *pInfo;\n    LOCALARENA *pArena, *pPrev;\n\n    TRACE(\"%04x ds=%04x\\n\", arena, ds );\n    if (!(pInfo = LOCAL_GetHeap( ds ))) return arena;\n\n    pArena = ARENA_PTR( ptr, arena );\n    if ((pArena->prev & 3) == LOCAL_ARENA_FREE)\n    {\n\t/* shouldn't happen */\n        ERR(\"Trying to free block %04x twice!\\n\",\n                 arena );\n\tLOCAL_PrintHeap( ds );\n\treturn arena;\n    }\n\n      /* Check if we can merge with the previous block */\n\n    pPrev = ARENA_PTR( ptr, pArena->prev & ~3 );\n    if ((pPrev->prev & 3) == LOCAL_ARENA_FREE)\n    {\n        arena  = pArena->prev & ~3;\n        pArena = pPrev;\n        LOCAL_RemoveBlock( ptr, pPrev->next );\n        pInfo->items--;\n    }\n    else  /* Make a new free block */\n    {\n        LOCAL_MakeBlockFree( ptr, arena );\n    }\n\n      /* Check if we can merge with the next block */\n\n    if ((pArena->next == pArena->free_next) &&\n        (pArena->next != pInfo->last))\n    {\n        LOCAL_RemoveBlock( ptr, pArena->next );\n        pInfo->items--;\n    }\n    return 0;\n}\n\n\n/***********************************************************************\n *           LOCAL_ShrinkArena\n *\n * Shrink an arena by creating a free block at its end if possible.\n * 'size' includes the arena header, and must be aligned.\n */\nstatic WORD LOCAL_ShrinkArena( WORD ds, WORD arena, WORD size, BOOL fromend )\n{\n    char *ptr = MapSL( MAKESEGPTR( ds, 0 ) );\n    LOCALARENA *pArena = ARENA_PTR( ptr, arena );\n\n    if (arena + size + LALIGN(sizeof(LOCALARENA)) < pArena->next)\n    {\n        LOCALHEAPINFO *pInfo = LOCAL_GetHeap( ds );\n        if (!pInfo) return;\n        pInfo->items++;\n        if (!fromend)\n        {\n            LOCAL_AddBlock( ptr, arena, arena + size );\n            LOCAL_FreeArena( ds, arena + size );\n            return arena;\n        }\n        else\n        {\n            LOCAL_AddBlock( ptr, arena, arena + pArena->size - size );\n            pArena->size -= size;\n            return arena + pArena->size;\n        }\n    }\n    return arena;\n}\n\n\n/***********************************************************************\n *           LOCAL_GrowArenaDownward\n *\n * Grow an arena downward by using the previous arena (must be free).\n */\nstatic void LOCAL_GrowArenaDownward( WORD ds, WORD arena, WORD newsize )\n{\n    char *ptr = MapSL( MAKESEGPTR( ds, 0 ) );\n    LOCALHEAPINFO *pInfo;\n    LOCALARENA *pArena = ARENA_PTR( ptr, arena );\n    WORD prevArena = pArena->prev & ~3;\n    LOCALARENA *pPrevArena = ARENA_PTR( ptr, prevArena );\n    WORD offset, size;\n    char *p;\n\n    if (!(pInfo = LOCAL_GetHeap( ds ))) return;\n    offset = pPrevArena->size;\n    size = pArena->next - arena - ARENA_HEADER_SIZE;\n    LOCAL_RemoveFreeBlock( ptr, prevArena );\n    LOCAL_RemoveBlock( ptr, arena );\n    pInfo->items--;\n    p = (char *)pPrevArena + ARENA_HEADER_SIZE;\n    while (offset < size)\n    {\n        memcpy( p, p + offset, offset );\n        p += offset;\n        size -= offset;\n    }\n    if (size) memcpy( p, p + offset, size );\n    LOCAL_ShrinkArena( ds, prevArena, newsize, FALSE );\n}\n\n\n\n/***********************************************************************\n *           LOCAL_GrowArenaUpward\n *\n * Grow an arena upward by using the next arena (must be free and big\n * enough). Newsize includes the arena header and must be aligned.\n */\nstatic void LOCAL_GrowArenaUpward( WORD ds, WORD arena, WORD newsize )\n{\n    char *ptr = MapSL( MAKESEGPTR( ds, 0 ) );\n    LOCALHEAPINFO *pInfo;\n    LOCALARENA *pArena = ARENA_PTR( ptr, arena );\n    WORD nextArena = pArena->next;\n\n    if (!(pInfo = LOCAL_GetHeap( ds ))) return;\n    LOCAL_RemoveBlock( ptr, nextArena );\n    pInfo->items--;\n    LOCAL_ShrinkArena( ds, arena, newsize, FALSE );\n}\n\n\n/***********************************************************************\n *           LOCAL_GetFreeSpace\n */\nstatic WORD LOCAL_GetFreeSpace(WORD ds, WORD countdiscard)\n{\n    char *ptr = MapSL( MAKESEGPTR( ds, 0 ) );\n    LOCALHEAPINFO *pInfo;\n    LOCALARENA *pArena;\n    WORD arena;\n    WORD freespace = 0;\n\n    if (!(pInfo = LOCAL_GetHeap( ds )))\n    {\n        ERR(\"Local heap not found\\n\" );\n        LOCAL_PrintHeap(ds);\n        return 0;\n    }\n    arena = pInfo->first;\n    pArena = ARENA_PTR( ptr, arena );\n    while (arena != pArena->free_next)\n    {\n        arena = pArena->free_next;\n        pArena = ARENA_PTR( ptr, arena );\n        if (pArena->size >= freespace) freespace = pArena->size;\n    }\n    /* FIXME doesn't yet calculate space that would become free if everything\n       were discarded when countdiscard == 1 */\n    if (freespace < ARENA_HEADER_SIZE) freespace = 0;\n    else freespace -= ARENA_HEADER_SIZE;\n    return freespace;\n}\n\n\n/***********************************************************************\n *           LOCAL_Compact\n */\nstatic UINT16 LOCAL_Compact( HANDLE16 ds, UINT16 minfree, UINT16 flags )\n{\n    char *ptr = MapSL( MAKESEGPTR( ds, 0 ) );\n    LOCALHEAPINFO *pInfo;\n    LOCALARENA *pArena, *pMoveArena, *pFinalArena;\n    WORD arena, movearena, finalarena, table;\n    WORD count, movesize, size;\n    WORD freespace;\n    LOCALHANDLEENTRY *pEntry;\n\n    if (!(pInfo = LOCAL_GetHeap( ds )))\n    {\n        ERR(\"Local heap not found\\n\" );\n        LOCAL_PrintHeap(ds);\n        return 0;\n    }\n    TRACE(\"ds = %04x, minfree = %04x, flags = %04x\\n\",\n\t\t ds, minfree, flags);\n    freespace = LOCAL_GetFreeSpace(ds, minfree ? 0 : 1);\n    if(freespace >= minfree || (flags & LMEM_NOCOMPACT))\n    {\n        TRACE(\"Returning %04x.\\n\", freespace);\n        return freespace;\n    }\n    TRACE(\"Compacting heap %04x.\\n\", ds);\n    table = pInfo->htable;\n    while(table)\n    {\n        pEntry = (LOCALHANDLEENTRY *)(ptr + table + sizeof(WORD));\n        for(count = *(WORD *)(ptr + table); count > 0; count--, pEntry++)\n        {\n            if((pEntry->lock == 0) && (pEntry->flags != (LMEM_DISCARDED >> 8)))\n            {\n                /* OK we can move this one if we want */\n                TRACE(\"handle %04x (block %04x) can be moved.\\n\",\n\t\t\t     (WORD)((char *)pEntry - ptr), pEntry->addr);\n                movearena = ARENA_HEADER(pEntry->addr - MOVEABLE_PREFIX);\n                pMoveArena = ARENA_PTR(ptr, movearena);\n                movesize = pMoveArena->next - movearena;\n                arena = pInfo->first;\n                pArena = ARENA_PTR(ptr, arena);\n                size = 0xffff;\n                finalarena = 0;\n                /* Try to find the smallest arena that will do, */\n                /* which is below us in memory */\n                for(;;)\n                {\n                    arena = pArena->free_next;\n                    pArena = ARENA_PTR(ptr, arena);\n                    if(arena >= movearena)\n                        break;\n                    if(arena == pArena->free_next)\n                        break;\n                    if((pArena->size >= movesize) && (pArena->size < size))\n                    {\n                        size = pArena->size;\n                        finalarena = arena;\n                    }\n                }\n                if (finalarena) /* Actually got somewhere to move */\n                {\n                    TRACE(\"Moving it to %04x.\\n\", finalarena);\n                    pFinalArena = ARENA_PTR(ptr, finalarena);\n                    size = pFinalArena->size;\n                    LOCAL_RemoveFreeBlock(ptr, finalarena);\n                    LOCAL_ShrinkArena( ds, finalarena, movesize, FALSE );\n                    /* Copy the arena to its new location */\n                    memcpy((char *)pFinalArena + ARENA_HEADER_SIZE,\n                           (char *)pMoveArena + ARENA_HEADER_SIZE,\n                           movesize - ARENA_HEADER_SIZE );\n                    /* Free the old location */\n                    LOCAL_FreeArena(ds, movearena);\n                    call_notify_func(pInfo->notify, LN_MOVE,\n                                     (WORD)((char *)pEntry - ptr), pEntry->addr);\n                    /* Update handle table entry */\n                    pEntry->addr = finalarena + ARENA_HEADER_SIZE + MOVEABLE_PREFIX;\n                }\n                else if((ARENA_PTR(ptr, pMoveArena->prev & ~3)->prev & 3)\n\t\t\t       == LOCAL_ARENA_FREE)\n                {\n                    /* Previous arena is free (but < movesize)  */\n                    /* so we can 'slide' movearena down into it */\n                    finalarena = pMoveArena->prev & ~3;\n                    LOCAL_GrowArenaDownward( ds, movearena, movesize );\n                    /* Update handle table entry */\n                    pEntry->addr = finalarena + ARENA_HEADER_SIZE + MOVEABLE_PREFIX;\n                }\n            }\n        }\n        table = *(WORD *)pEntry;\n    }\n    freespace = LOCAL_GetFreeSpace(ds, minfree ? 0 : 1);\n    if(freespace >= minfree || (flags & LMEM_NODISCARD))\n    {\n        TRACE(\"Returning %04x.\\n\", freespace);\n        return freespace;\n    }\n\n    table = pInfo->htable;\n    while(table)\n    {\n        pEntry = (LOCALHANDLEENTRY *)(ptr + table + sizeof(WORD));\n        for(count = *(WORD *)(ptr + table); count > 0; count--, pEntry++)\n        {\n            if(pEntry->addr && pEntry->lock == 0 &&\n\t     (pEntry->flags & (LMEM_DISCARDABLE >> 8)))\n\t    {\n                TRACE(\"Discarding handle %04x (block %04x).\\n\",\n                              (char *)pEntry - ptr, pEntry->addr);\n                LOCAL_FreeArena(ds, ARENA_HEADER(pEntry->addr - MOVEABLE_PREFIX));\n                call_notify_func(pInfo->notify, LN_DISCARD, (char *)pEntry - ptr, pEntry->flags);\n                pEntry->addr = 0;\n                pEntry->flags = (LMEM_DISCARDED >> 8);\n            }\n        }\n        table = *(WORD *)pEntry;\n    }\n    return LOCAL_Compact(ds, 0xffff, LMEM_NODISCARD);\n}\n\n\n/***********************************************************************\n *           LOCAL_FindFreeBlock\n */\nstatic HLOCAL16 LOCAL_FindFreeBlock( HANDLE16 ds, WORD size, WORD flags )\n{\n    char *ptr = MapSL( MAKESEGPTR( ds, 0 ) );\n    LOCALHEAPINFO *pInfo;\n    LOCALARENA *pArena;\n    WORD arena, found = 0;\n\n    if (!(pInfo = LOCAL_GetHeap( ds )))\n    {\n        ERR(\"Local heap not found\\n\" );\n\tLOCAL_PrintHeap(ds);\n\treturn 0;\n    }\n\n    arena = pInfo->first;\n    pArena = ARENA_PTR( ptr, arena );\n    for (;;) {\n        arena = pArena->free_next;\n        pArena = ARENA_PTR( ptr, arena );\n        if (arena == pArena->free_next) break;\n        if (pArena->size >= size) {\n            if (!(flags & LMEM_MOVEABLE)) return arena;\n            else found = arena;\n        }\n    }\n    if (found) return found;\n    TRACE(\"not enough space\\n\" );\n    LOCAL_PrintHeap(ds);\n    return 0;\n}\n\n\n/***********************************************************************\n *           get_heap_name\n */\nstatic const char *get_heap_name( WORD ds )\n{\n    HINSTANCE16 inst = LoadLibrary16( \"GDI\" );\n    if (ds == GlobalHandleToSel16( inst ))\n    {\n        FreeLibrary16( inst );\n        return \"GDI\";\n    }\n    FreeLibrary16( inst );\n    inst = LoadLibrary16( \"USER\" );\n    if (ds == GlobalHandleToSel16( inst ))\n    {\n        FreeLibrary16( inst );\n        return \"USER\";\n    }\n    FreeLibrary16( inst );\n    return \"local\";\n}\n\nSEGPTR WINAPI K32WOWGlobalLock16(HGLOBAL16 handle);\n/***********************************************************************\n *           LOCAL_GetBlock\n * The segment may get moved around in this function, so all callers\n * should reset their pointer variables.\n */\nstatic HLOCAL16 LOCAL_GetBlock( HANDLE16 ds, DWORD size, WORD flags )\n{\n    char *ptr = MapSL( MAKESEGPTR( ds, 0 ) );\n    LOCALHEAPINFO *pInfo;\n    LOCALARENA *pArena;\n    WORD arena;\n\n    if (!(pInfo = LOCAL_GetHeap( ds )))\n    {\n        DWORD addr = K32WOWGlobalLock16(ds);\n        if (addr)\n        {\n            LocalInit16(ds, addr & 0xFFFF, (addr & 0xFFFF) + GlobalSize16(ds));\n            GlobalUnlock16(ds);\n            pInfo = LOCAL_GetHeap(ds);\n        }\n        else\n        {\n            ERR(\"Local heap not found\\n\");\n            LOCAL_PrintHeap(ds);\n            return 0;\n        }\n    }\n\n    size += ARENA_HEADER_SIZE;\n    size = LALIGN( max( size, sizeof(LOCALARENA) ) );\n    if (size >= 0x10000)\n    {\n        return 0;\n    }\n\n#if 0\nnotify_done:\n#endif\n      /* Find a suitable free block */\n    arena = LOCAL_FindFreeBlock( ds, size, flags );\n    if (arena == 0) {\n\t/* no space: try to make some */\n\tLOCAL_Compact( ds, size, flags );\n\tarena = LOCAL_FindFreeBlock( ds, size, flags );\n    }\n    if (arena == 0) {\n\t/* still no space: try to grow the segment */\n        DWORD new_heap_size = GlobalSize16(ds) + size + pInfo->extra - ARENA_PTR(ptr, pInfo->last)->size + 0x24 /* FIXME: It is not perfect. */;\n\tif (!(LOCAL_GrowHeap( ds, min(0x10000, new_heap_size) )))\n\t{\n#if 0\n\t    /* FIXME: doesn't work correctly yet */\n\t    if (call_notify_func(pInfo->notify, LN_OUTOFMEM, ds - 20, size)) /* FIXME: \"size\" correct ? (should indicate bytes needed) */\n\t\tgoto notify_done;\n#endif\n            WARN( \"not enough space in %s heap %04x for %d bytes\\n\",\n                 get_heap_name(ds), ds, size );\n\t    return 0;\n\t}\n\tptr = MapSL( MAKESEGPTR( ds, 0 ) );\n\tpInfo = LOCAL_GetHeap( ds );\n\tarena = LOCAL_FindFreeBlock( ds, size, flags );\n    }\n    if (arena == 0) {\n        WARN( \"not enough space in %s heap %04x for %d bytes\\n\",\n             get_heap_name(ds), ds, size );\n#if 0\n        /* FIXME: \"size\" correct ? (should indicate bytes needed) */\n        if (call_notify_func(pInfo->notify, LN_OUTOFMEM, ds, size)) goto notify_done;\n#endif\n\treturn 0;\n    }\n\n      /* Make a block out of the free arena */\n    pArena = ARENA_PTR( ptr, arena );\n    TRACE(\"size = %04x, arena %04x size %04x\\n\", size, arena, pArena->size );\n    if (flags & LMEM_MOVEABLE)\n    {\n        WORD narena = LOCAL_ShrinkArena( ds, arena, size, TRUE );\n        if (narena == arena)\n            LOCAL_RemoveFreeBlock( ptr, arena );\n        arena = narena;\n        pArena = ARENA_PTR( ptr, arena );\n    }\n    else\n    {\n        LOCAL_RemoveFreeBlock( ptr, arena );\n        LOCAL_ShrinkArena( ds, arena, size, FALSE );\n    }\n\n    if (flags & LMEM_ZEROINIT)\n\tmemset((char *)pArena + ARENA_HEADER_SIZE, 0, pArena->next - arena - ARENA_HEADER_SIZE);\n    return arena + ARENA_HEADER_SIZE;\n}\n\n\n/***********************************************************************\n *           LOCAL_NewHTable\n */\nstatic BOOL16 LOCAL_NewHTable( HANDLE16 ds )\n{\n    char *ptr;\n    LOCALHEAPINFO *pInfo;\n    LOCALHANDLEENTRY *pEntry;\n    HLOCAL16 handle;\n    int i;\n\n    TRACE(\"\\n\" );\n    if (!(pInfo = LOCAL_GetHeap( ds )))\n    {\n        ERR(\"Local heap not found\\n\");\n        LOCAL_PrintHeap(ds);\n        return FALSE;\n    }\n\n    if (!(handle = LOCAL_GetBlock( ds, pInfo->hdelta * sizeof(LOCALHANDLEENTRY)\n                                   + 2 * sizeof(WORD), LMEM_FIXED )))\n        return FALSE;\n    if (!(ptr = MapSL( MAKESEGPTR( ds, 0 ) )))\n        ERR(\"ptr == NULL after GetBlock.\\n\");\n    if (!(pInfo = LOCAL_GetHeap( ds )))\n        ERR(\"pInfo == NULL after GetBlock.\\n\");\n\n    /* Fill the entry table */\n\n    *(WORD *)(ptr + handle) = pInfo->hdelta;\n    pEntry = (LOCALHANDLEENTRY *)(ptr + handle + sizeof(WORD));\n    for (i = pInfo->hdelta; i > 0; i--, pEntry++) {\n\tpEntry->lock = pEntry->flags = 0xff;\n\tpEntry->addr = 0;\n    }\n    *(WORD *)pEntry = pInfo->htable;\n    pInfo->htable = handle;\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           LOCAL_GetNewHandleEntry\n */\nstatic HLOCAL16 LOCAL_GetNewHandleEntry( HANDLE16 ds )\n{\n    char *ptr = MapSL( MAKESEGPTR( ds, 0 ) );\n    LOCALHEAPINFO *pInfo;\n    LOCALHANDLEENTRY *pEntry = NULL;\n    WORD table;\n\n    if (!(pInfo = LOCAL_GetHeap( ds )))\n    {\n        ERR(\"Local heap not found\\n\");\n\tLOCAL_PrintHeap(ds);\n\treturn 0;\n    }\n\n    /* Find a free slot in existing tables */\n\n    table = pInfo->htable;\n    while (table)\n    {\n        WORD count = *(WORD *)(ptr + table);\n        pEntry = (LOCALHANDLEENTRY *)(ptr + table + sizeof(WORD));\n        for (; count > 0; count--, pEntry++)\n            if (pEntry->lock == 0xff) break;\n        if (count) break;\n        table = *(WORD *)pEntry;\n    }\n\n    if (!table)  /* We need to create a new table */\n    {\n        if (!LOCAL_NewHTable( ds )) return 0;\n\tptr = MapSL( MAKESEGPTR( ds, 0 ) );\n\tpInfo = LOCAL_GetHeap( ds );\n        pEntry = (LOCALHANDLEENTRY *)(ptr + pInfo->htable + sizeof(WORD));\n    }\n\n    /* Now allocate this entry */\n\n    pEntry->lock = 0;\n    pEntry->flags = 0;\n    TRACE(\"(%04x): %04x\\n\", ds, ((char *)pEntry - ptr) );\n    return (HLOCAL16)((char *)pEntry - ptr);\n}\n\n\n/***********************************************************************\n *           LOCAL_FreeHandleEntry\n *\n * Free a handle table entry.\n */\nstatic void LOCAL_FreeHandleEntry( HANDLE16 ds, HLOCAL16 handle )\n{\n    char *ptr = MapSL( MAKESEGPTR( ds, 0 ) );\n    LOCALHANDLEENTRY *pEntry = (LOCALHANDLEENTRY *)(ptr + handle);\n    LOCALHEAPINFO *pInfo;\n    WORD *pTable;\n    WORD table, count, i;\n\n    if (!(pInfo = LOCAL_GetHeap( ds ))) return;\n\n    /* Find the table where this handle comes from */\n\n    pTable = &pInfo->htable;\n    while (*pTable)\n    {\n        WORD size = (*(WORD *)(ptr + *pTable)) * sizeof(LOCALHANDLEENTRY);\n        if ((handle >= *pTable + sizeof(WORD)) &&\n            (handle < *pTable + sizeof(WORD) + size)) break;  /* Found it */\n        pTable = (WORD *)(ptr + *pTable + sizeof(WORD) + size);\n    }\n    if (!*pTable)\n    {\n        ERR(\"Invalid entry %04x\\n\", handle);\n        LOCAL_PrintHeap( ds );\n        return;\n    }\n\n    /* Make the entry free */\n\n    pEntry->addr = 0;  /* just in case */\n    pEntry->lock = 0xff;\n    pEntry->flags = 0xff;\n    /* Now check if all entries in this table are free */\n\n    table = *pTable;\n    pEntry = (LOCALHANDLEENTRY *)(ptr + table + sizeof(WORD));\n    count = *(WORD *)(ptr + table);\n    for (i = count; i > 0; i--, pEntry++) if (pEntry->lock != 0xff) return;\n\n    /* Remove the table from the linked list and free it */\n\n    TRACE(\"(%04x): freeing table %04x\\n\", ds, table);\n    *pTable = *(WORD *)pEntry;\n    LOCAL_FreeArena( ds, ARENA_HEADER( table ) );\n}\n\n\n/***********************************************************************\n *           LocalFree   (KERNEL.7)\n */\nHLOCAL16 WINAPI LocalFree16( HLOCAL16 handle )\n{\n    HANDLE16 ds = CURRENT_DS;\n    char *ptr = MapSL( MAKESEGPTR( ds, 0 ) );\n\n    TRACE(\"%04x ds=%04x\\n\", handle, ds );\n\n    if (!handle) { WARN(\"Handle is 0.\\n\" ); return 0; }\n#ifdef HEAP_VALIDATE\n    if (!LOCAL_Validate(ds, handle)) return handle;\n#endif\n    if (HANDLE_FIXED( handle ))\n    {\n        if (!LOCAL_FreeArena( ds, ARENA_HEADER( handle ) )) return 0;  /* OK */\n        else return handle;  /* couldn't free it */\n    }\n    else\n    {\n        LOCALHANDLEENTRY *pEntry = (LOCALHANDLEENTRY *)(ptr + handle);\n        if (pEntry->flags != (LMEM_DISCARDED >> 8))\n        {\n            TRACE(\"real block at %04x\\n\", pEntry->addr );\n            if (LOCAL_FreeArena( ds, ARENA_HEADER(pEntry->addr - MOVEABLE_PREFIX) ))\n                return handle; /* couldn't free it */\n        }\n        LOCAL_FreeHandleEntry( ds, handle );\n        return 0;  /* OK */\n    }\n}\n\n\n/***********************************************************************\n *           LocalAlloc   (KERNEL.5)\n */\nHLOCAL16 WINAPI LocalAlloc16( UINT16 flags, WORD size )\n{\n    HANDLE16 ds = CURRENT_DS;\n    HLOCAL16 handle = 0;\n    char *ptr;\n\n    TRACE(\"%04x %d ds=%04x\\n\", flags, size, ds );\n\n    if(size > 0 && size <= 4) size = 5;\n    if (flags & LMEM_MOVEABLE)\n    {\n\tLOCALHANDLEENTRY *plhe;\n\tHLOCAL16 hmem;\n\n\tif(size)\n\t{\n\t    if (!(hmem = LOCAL_GetBlock( ds, size + MOVEABLE_PREFIX, flags )))\n\t\tgoto exit;\n        }\n\telse /* We just need to allocate a discarded handle */\n\t    hmem = 0;\n\tif (!(handle = LOCAL_GetNewHandleEntry( ds )))\n        {\n\t    WARN(\"Couldn't get handle.\\n\");\n\t    if(hmem)\n\t\tLOCAL_FreeArena( ds, ARENA_HEADER(hmem) );\n\t    goto exit;\n\t}\n\tptr = MapSL( MAKESEGPTR( ds, 0 ) );\n\tplhe = (LOCALHANDLEENTRY *)(ptr + handle);\n\tplhe->lock = 0;\n\tif(hmem)\n\t{\n\t    plhe->addr = hmem + MOVEABLE_PREFIX;\n\t    plhe->flags = (BYTE)((flags & 0x0f00) >> 8);\n\t    *(HLOCAL16 *)(ptr + hmem) = handle;\n\t}\n\telse\n\t{\n\t    plhe->addr = 0;\n\t    plhe->flags = LMEM_DISCARDED >> 8;\n        }\n    }\n    else /* FIXED */\n    {\n\tif(size) handle = LOCAL_GetBlock( ds, size, flags );\n    }\n\nexit:\n    CURRENT_STACK16->ecx = handle;  /* must be returned in cx too */\n    return handle;\n}\n\n\n/***********************************************************************\n *           LocalReAlloc   (KERNEL.6)\n */\nHLOCAL16 WINAPI LocalReAlloc16( HLOCAL16 handle, WORD size, UINT16 flags )\n{\n    HANDLE16 ds = CURRENT_DS;\n    char *ptr = MapSL( MAKESEGPTR( ds, 0 ) );\n    LOCALHEAPINFO *pInfo;\n    LOCALARENA *pArena, *pNext;\n    LOCALHANDLEENTRY *pEntry = NULL;\n    WORD arena, oldsize;\n    HLOCAL16 hmem, blockhandle;\n    LONG nextarena;\n\n    if (!handle) return 0;\n    if(HANDLE_MOVEABLE(handle) &&\n     ((LOCALHANDLEENTRY *)(ptr + handle))->lock == 0xff) /* An unused handle */\n\treturn 0;\n\n    TRACE(\"%04x %d %04x ds=%04x\\n\", handle, size, flags, ds );\n    if (!(pInfo = LOCAL_GetHeap( ds ))) return 0;\n\n    if (HANDLE_FIXED( handle ))\n\tblockhandle = handle;\n    else\n    {\n\tpEntry = (LOCALHANDLEENTRY *) (ptr + handle);\n\tif(pEntry->flags == (LMEM_DISCARDED >> 8))\n        {\n\t    HLOCAL16 hl;\n\t    if(pEntry->addr)\n\t\tWARN(\"Dicarded block has non-zero addr.\\n\");\n\t    TRACE(\"ReAllocating discarded block\\n\");\n\t    if(size <= 4) size = 5;\n\t    if (!(hl = LOCAL_GetBlock( ds, size + MOVEABLE_PREFIX, flags)))\n\t\treturn 0;\n            ptr = MapSL( MAKESEGPTR( ds, 0 ) );  /* Reload ptr */\n            pEntry = (LOCALHANDLEENTRY *) (ptr + handle);\n\t    pEntry->addr = hl + MOVEABLE_PREFIX;\n            pEntry->flags = 0;\n            pEntry->lock = 0;\n\t    *(HLOCAL16 *)(ptr + hl) = handle;\n            return handle;\n\t}\n\tif (((blockhandle = pEntry->addr - MOVEABLE_PREFIX) & 3) != 0)\n\t{\n\t    ERR(\"(%04x,%04x): invalid handle\\n\",\n                     ds, handle );\n\t    return 0;\n        }\n\tif (*(HLOCAL16 *)(ptr + blockhandle) != handle) {\n\t    ERR(\"Back ptr to handle is invalid\\n\");\n\t    return 0;\n        }\n    }\n\n    if (flags & LMEM_MODIFY)\n    {\n        if (HANDLE_MOVEABLE(handle))\n\t{\n\t    pEntry = (LOCALHANDLEENTRY *)(ptr + handle);\n\t    pEntry->flags = (flags & 0x0f00) >> 8;\n\t    TRACE(\"Changing flags to %x.\\n\", pEntry->flags);\n\t}\n\treturn handle;\n    }\n\n    if (!size)\n    {\n        if (flags & LMEM_MOVEABLE)\n        {\n\t    if (HANDLE_FIXED(handle))\n\t    {\n                TRACE(\"Freeing fixed block.\\n\");\n                return LocalFree16( handle );\n            }\n\t    else /* Moveable block */\n\t    {\n\t\tpEntry = (LOCALHANDLEENTRY *)(ptr + handle);\n\t\tif (pEntry->lock == 0)\n\t\t{\n\t\t    /* discards moveable blocks */\n                    TRACE(\"Discarding block\\n\");\n                    LOCAL_FreeArena(ds, ARENA_HEADER(pEntry->addr - MOVEABLE_PREFIX));\n                    pEntry->addr = 0;\n                    pEntry->flags = (LMEM_DISCARDED >> 8);\n                    return handle;\n\t        }\n\t    }\n\t    return 0;\n        }\n        else if(flags == 0)\n        {\n            pEntry = (LOCALHANDLEENTRY *)(ptr + handle);\n            if (pEntry->lock == 0)\n            {\n\t\t/* Frees block */\n\t\treturn LocalFree16( handle );\n\t    }\n        }\n        return 0;\n    }\n\n    arena = ARENA_HEADER( blockhandle );\n    TRACE(\"arena is %04x\\n\", arena );\n    pArena = ARENA_PTR( ptr, arena );\n\n    if(size <= 4) size = 5;\n    if(HANDLE_MOVEABLE(handle)) size += MOVEABLE_PREFIX;\n    oldsize = pArena->next - arena - ARENA_HEADER_SIZE;\n    nextarena = LALIGN(blockhandle + size);\n\n      /* Check for size reduction */\n\n    if (nextarena <= pArena->next)\n    {\n\tTRACE(\"size reduction, making new free block\\n\");\n\tLOCAL_ShrinkArena(ds, arena, nextarena - arena, FALSE);\n        TRACE(\"returning %04x\\n\", handle );\n        return handle;\n    }\n\n      /* Check if the next block is free and large enough */\n\n    pNext = ARENA_PTR( ptr, pArena->next );\n    if (((pNext->prev & 3) == LOCAL_ARENA_FREE) &&\n        (nextarena <= pNext->next))\n    {\n\tTRACE(\"size increase, making new free block\\n\");\n        LOCAL_GrowArenaUpward(ds, arena, nextarena - arena);\n        if (flags & LMEM_ZEROINIT)\n        {\n            char *oldend = (char *)pArena + ARENA_HEADER_SIZE + oldsize;\n            char *newend = ptr + pArena->next;\n            TRACE(\"Clearing memory from %p to %p (DS -> %p)\\n\", oldend, newend, ptr);\n            memset(oldend, 0, newend - oldend);\n        }\n\n        TRACE(\"returning %04x\\n\", handle );\n        return handle;\n    }\n\n    /* Now we have to allocate a new block, but not if (fixed block or locked\n       block) and no LMEM_MOVEABLE */\n\n    if (!(flags & LMEM_MOVEABLE))\n    {\n\tif (HANDLE_FIXED(handle))\n        {\n            ERR(\"Needed to move fixed block, but LMEM_MOVEABLE not specified.\\n\");\n            return 0;\n        }\n\telse\n\t{\n\t    if(((LOCALHANDLEENTRY *)(ptr + handle))->lock != 0)\n\t    {\n\t\tERR(\"Needed to move locked block, but LMEM_MOVEABLE not specified.\\n\");\n\t\treturn 0;\n\t    }\n        }\n    }\n\n    hmem = LOCAL_GetBlock( ds, size, flags );\n    ptr = MapSL( MAKESEGPTR( ds, 0 ));  /* Reload ptr                             */\n    if(HANDLE_MOVEABLE(handle))         /* LOCAL_GetBlock might have triggered    */\n    {                                   /* a compaction, which might in turn have */\n      pEntry = (LOCALHANDLEENTRY *)(ptr + handle);\n      blockhandle = pEntry->addr - MOVEABLE_PREFIX; /* moved the very block we are resizing */\n      arena = ARENA_HEADER( blockhandle );   /* thus, we reload arena, too        */\n    }\n    if (!hmem)\n    {\n        int blksize = oldsize;\n        LOCALARENA *pPrev = ARENA_PTR( ptr, pArena->prev & ~3 );\n        if ((pPrev->prev & 3) == LOCAL_ARENA_FREE)\n            blksize += pPrev->size + ARENA_HEADER_SIZE;\n        if ((pNext->prev & 3) == LOCAL_ARENA_FREE)\n            blksize += pNext->size + ARENA_HEADER_SIZE;\n        if (blksize >= size)\n        {\n            /* Remove the block from the heap and try again */\n            LPSTR buffer = HeapAlloc( GetProcessHeap(), 0, oldsize );\n            if (!buffer) return 0;\n            memcpy( buffer, ptr + arena + ARENA_HEADER_SIZE, oldsize );\n            LOCAL_FreeArena( ds, arena );\n            if (!(hmem = LOCAL_GetBlock( ds, size, flags )))\n            {\n                // shouldn't happen\n                if (!(hmem = LOCAL_GetBlock( ds, oldsize, flags )))\n                {\n                    ERR(\"Can't restore saved block\\n\" );\n                    HeapFree( GetProcessHeap(), 0, buffer );\n                    return 0;\n                }\n                size = oldsize;\n            }\n            ptr = MapSL( MAKESEGPTR( ds, 0 ) );  /* Reload ptr */\n            memcpy( ptr + hmem, buffer, oldsize );\n            HeapFree( GetProcessHeap(), 0, buffer );\n        }\n    }\n    else\n    {\n        memcpy( ptr + hmem, ptr + (arena + ARENA_HEADER_SIZE), oldsize );\n        LOCAL_FreeArena( ds, arena );\n    }\n    if (HANDLE_MOVEABLE( handle ))\n    {\n\tTRACE(\"fixing handle\\n\");\n        pEntry = (LOCALHANDLEENTRY *)(ptr + handle);\n        pEntry->addr = hmem + MOVEABLE_PREFIX;\n\t/* Back ptr should still be correct */\n\tif(*(HLOCAL16 *)(ptr + hmem) != handle)\n\t    ERR(\"back ptr is invalid.\\n\");\n\thmem = handle;\n    }\n    if (size == oldsize) hmem = 0;  /* Realloc failed */\n    TRACE(\"returning %04x\\n\", hmem );\n    return hmem;\n}\n\n\n/***********************************************************************\n *           LOCAL_InternalLock\n */\nstatic HLOCAL16 LOCAL_InternalLock( LPSTR heap, HLOCAL16 handle )\n{\n    HLOCAL16 old_handle = handle;\n\n    if (HANDLE_MOVEABLE(handle))\n    {\n        LOCALHANDLEENTRY *pEntry = (LOCALHANDLEENTRY *)(heap + handle);\n        if (pEntry->flags == (LMEM_DISCARDED >> 8)) return 0;\n        if (pEntry->lock < 0xfe) pEntry->lock++;\n        handle = pEntry->addr;\n    }\n    TRACE(\"%04x returning %04x\\n\", old_handle, handle );\n    return handle;\n}\n\n\n/***********************************************************************\n *           LocalUnlock   (KERNEL.9)\n */\nBOOL16 WINAPI LocalUnlock16( HLOCAL16 handle )\n{\n    HANDLE16 ds = CURRENT_DS;\n    char *ptr = MapSL( MAKESEGPTR( ds, 0 ) );\n\n    TRACE(\"%04x\\n\", handle );\n    if (HANDLE_MOVEABLE(handle))\n    {\n        LOCALHANDLEENTRY *pEntry = (LOCALHANDLEENTRY *)(ptr + handle);\n        if (!pEntry->lock || (pEntry->lock == 0xff)) return FALSE;\n        /* For moveable block, return the new lock count */\n        /* (see _Windows_Internals_ p. 197) */\n        return --pEntry->lock;\n    }\n    else return FALSE;\n}\n\n\n/***********************************************************************\n *           LocalSize   (KERNEL.10)\n */\nUINT16 WINAPI LocalSize16( HLOCAL16 handle )\n{\n    HANDLE16 ds = CURRENT_DS;\n    char *ptr = MapSL( MAKESEGPTR( ds, 0 ) );\n    LOCALARENA *pArena;\n\n    TRACE(\"%04x ds=%04x\\n\", handle, ds );\n\n    if (!handle) return 0;\n    if (HANDLE_MOVEABLE( handle ))\n    {\n        handle = *(WORD *)(ptr + handle);\n        if (!handle) return 0;\n        pArena = ARENA_PTR( ptr, ARENA_HEADER(handle - MOVEABLE_PREFIX) );\n    }\n    else\n        pArena = ARENA_PTR( ptr, ARENA_HEADER(handle) );\n\n    return pArena->next - handle;\n}\n\n\n/***********************************************************************\n *           LocalFlags   (KERNEL.12)\n */\nUINT16 WINAPI LocalFlags16( HLOCAL16 handle )\n{\n    HANDLE16 ds = CURRENT_DS;\n    char *ptr = MapSL( MAKESEGPTR( ds, 0 ) );\n\n    if (HANDLE_MOVEABLE(handle))\n    {\n        LOCALHANDLEENTRY *pEntry = (LOCALHANDLEENTRY *)(ptr + handle);\n        TRACE(\"(%04x,%04x): returning %04x\\n\",\n                       ds, handle, pEntry->lock | (pEntry->flags << 8) );\n        return pEntry->lock | (pEntry->flags << 8);\n    }\n    else\n    {\n        TRACE(\"(%04x,%04x): returning 0\\n\",\n                       ds, handle );\n        return 0;\n    }\n}\n\n\n/***********************************************************************\n *           LocalHeapSize   (KERNEL.162)\n */\nWORD WINAPI LocalHeapSize16(void)\n{\n    HANDLE16 ds = CURRENT_DS;\n    LOCALHEAPINFO *pInfo = LOCAL_GetHeap( ds );\n    return pInfo ? pInfo->last - pInfo->first : 0;\n}\n\n\n/***********************************************************************\n *           LocalCountFree   (KERNEL.161)\n */\nWORD WINAPI LocalCountFree16(void)\n{\n    HANDLE16 ds = CURRENT_DS;\n    WORD arena, total;\n    LOCALARENA *pArena;\n    LOCALHEAPINFO *pInfo;\n    char *ptr = MapSL( MAKESEGPTR( ds, 0 ) );\n\n    if (!(pInfo = LOCAL_GetHeap( ds )))\n    {\n        ERR(\"(%04x): Local heap not found\\n\", ds );\n\tLOCAL_PrintHeap( ds );\n\treturn 0;\n    }\n\n    total = 0;\n    arena = pInfo->first;\n    pArena = ARENA_PTR( ptr, arena );\n    for (;;)\n    {\n        arena = pArena->free_next;\n        pArena = ARENA_PTR( ptr, arena );\n\tif (arena == pArena->free_next) break;\n        total += pArena->size;\n    }\n    TRACE(\"(%04x): returning %d\\n\", ds, total);\n    return total;\n}\n\n\n/***********************************************************************\n *           LocalHandle   (KERNEL.11)\n */\nHLOCAL16 WINAPI LocalHandle16( WORD addr )\n{\n    HANDLE16 ds = CURRENT_DS;\n    char *ptr = MapSL( MAKESEGPTR( ds, 0 ) );\n    LOCALHEAPINFO *pInfo;\n    WORD table;\n\n    if (!(pInfo = LOCAL_GetHeap( ds )))\n    {\n        ERR(\"(%04x): Local heap not found\\n\", ds );\n\tLOCAL_PrintHeap( ds );\n\treturn 0;\n    }\n\n    /* Find the address in the entry tables */\n\n    table = pInfo->htable;\n    while (table)\n    {\n        WORD count = *(WORD *)(ptr + table);\n        LOCALHANDLEENTRY *pEntry = (LOCALHANDLEENTRY*)(ptr+table+sizeof(WORD));\n        for (; count > 0; count--, pEntry++)\n            if (pEntry->addr == addr) return (HLOCAL16)((char *)pEntry - ptr);\n        table = *(WORD *)pEntry;\n    }\n\n    return (HLOCAL16)addr;  /* Fixed block handle is addr */\n}\n\n\n\n\n/***********************************************************************\n *           LocalLock   (KERNEL.8)\n *\n * Note: only the offset part of the pointer is returned by the relay code.\n */\nSEGPTR WINAPI LocalLock16( HLOCAL16 handle )\n{\n    WORD ds = CURRENT_DS;\n    char *ptr = MapSL( MAKESEGPTR( ds, 0 ) );\n    return MAKESEGPTR( ds, LOCAL_InternalLock( ptr, handle ) );\n}\n\n\n/***********************************************************************\n *           LocalCompact   (KERNEL.13)\n */\nUINT16 WINAPI LocalCompact16( UINT16 minfree )\n{\n    TRACE(\"%04x\\n\", minfree );\n    return LOCAL_Compact( CURRENT_DS, minfree, 0 );\n}\n\n\n/***********************************************************************\n *           LocalNotify   (KERNEL.14)\n *\n * Installs a callback function that is called for local memory events\n * Callback function prototype is\n * BOOL16 NotifyFunc(WORD wMsg, HLOCAL16 hMem, WORD wArg)\n * wMsg:\n * - LN_OUTOFMEM\n *   NotifyFunc seems to be responsible for allocating some memory,\n *   returns TRUE for success.\n *   wArg = number of bytes needed additionally\n * - LN_MOVE\n *   hMem = handle; wArg = old mem location\n * - LN_DISCARD\n *   NotifyFunc seems to be strongly encouraged to return TRUE,\n *   otherwise LogError() gets called.\n *   hMem = handle; wArg = flags\n */\nFARPROC16 WINAPI LocalNotify16( FARPROC16 func )\n{\n    LOCALHEAPINFO *pInfo;\n    FARPROC16 oldNotify;\n    HANDLE16 ds = CURRENT_DS;\n\n    if (!(pInfo = LOCAL_GetHeap( ds )))\n    {\n        ERR(\"(%04x): Local heap not found\\n\", ds );\n\tLOCAL_PrintHeap( ds );\n\treturn 0;\n    }\n    TRACE(\"(%04x): %p\\n\", ds, func );\n    FIXME(\"Half implemented\\n\");\n    oldNotify = pInfo->notify;\n    pInfo->notify = func;\n    return oldNotify;\n}\n\n\n/***********************************************************************\n *           LocalShrink   (KERNEL.121)\n */\nUINT16 WINAPI LocalShrink16( HGLOBAL16 handle, UINT16 newsize )\n{\n    WARN(\"(%04x %04x)\\n\", handle, newsize );\n    if (!handle)\n        handle = CURRENT_DS;\n    else\n        handle |= 1;\n    /* always grow */\n    LOCAL_GrowHeap(handle, 0x10000);\n    return newsize;\n}\n\n\n/***********************************************************************\n *           GetHeapSpaces   (KERNEL.138)\n */\nDWORD WINAPI GetHeapSpaces16( HMODULE16 module )\n{\n    NE_MODULE *pModule;\n    WORD oldDS = CURRENT_DS;\n    DWORD spaces;\n\n    if (!(pModule = NE_GetPtr( module ))) return 0;\n    CURRENT_DS = GlobalHandleToSel16((NE_SEG_TABLE( pModule ) + pModule->ne_autodata - 1)->hSeg);\n    spaces = MAKELONG( LocalCountFree16(), LocalHeapSize16() );\n    CURRENT_DS = oldDS;\n    return spaces;\n}\n\n\n/***********************************************************************\n *           LocalHandleDelta   (KERNEL.310)\n */\nWORD WINAPI LocalHandleDelta16( WORD delta )\n{\n    LOCALHEAPINFO *pInfo;\n\n    if (!(pInfo = LOCAL_GetHeap( CURRENT_DS )))\n    {\n        ERR(\"Local heap not found\\n\");\n\tLOCAL_PrintHeap( CURRENT_DS );\n\treturn 0;\n    }\n    if (delta) pInfo->hdelta = delta;\n    TRACE(\"returning %04x\\n\", pInfo->hdelta);\n    return pInfo->hdelta;\n}\n\n\n/***********************************************************************\n * 32-bit local heap functions (Win95; undocumented)\n */\n\n/***********************************************************************\n *           K208   (KERNEL.208)\n */\nHANDLE WINAPI Local32Init16( WORD segment, DWORD tableSize,\n                             DWORD heapSize, DWORD flags )\n{\n    DWORD totSize, segSize = 0;\n    LPBYTE base;\n    LOCAL32HEADER *header;\n    HANDLE heap;\n    WORD *selectorTable;\n    WORD selectorEven, selectorOdd;\n    int i, nrBlocks;\n\n    /* Determine new heap size */\n\n    if ( segment )\n    {\n        if ( (segSize = GetSelectorLimit16( segment )) == 0 )\n            return 0;\n        else\n            segSize++;\n    }\n\n    if ( heapSize == (DWORD)-1 )\n        heapSize = 1024*1024;   /* FIXME */\n\n    heapSize = (heapSize + 0xffff) & 0xffff0000;\n    segSize  = (segSize  + 0x0fff) & 0xfffff000;\n    totSize  = segSize + HTABLE_SIZE + heapSize;\n\n\n    /* Allocate memory and initialize heap */\n\n    if ( !(base = VirtualAlloc( NULL, totSize, MEM_RESERVE, PAGE_READWRITE )) )\n        return 0;\n\n    if ( !VirtualAlloc( base, segSize + HTABLE_PAGESIZE,\n                        MEM_COMMIT, PAGE_READWRITE ) )\n    {\n        VirtualFree( base, 0, MEM_RELEASE );\n        return 0;\n    }\n\n    if (!(heap = RtlCreateHeap( 0, base + segSize + HTABLE_SIZE, heapSize, 0x10000, NULL, NULL )))\n    {\n        VirtualFree( base, 0, MEM_RELEASE );\n        return 0;\n    }\n\n\n    /* Set up header and handle table */\n\n    header = (LOCAL32HEADER *)(base + segSize);\n    header->base    = base;\n    header->limit   = HTABLE_PAGESIZE-1;\n    header->flags   = 0;\n    header->magic   = LOCAL32_MAGIC;\n    header->heap    = heap;\n\n    header->freeListFirst[0] = sizeof(LOCAL32HEADER);\n    header->freeListLast[0]  = HTABLE_PAGESIZE - 4;\n    header->freeListSize[0]  = (HTABLE_PAGESIZE - sizeof(LOCAL32HEADER)) / 4;\n\n    for (i = header->freeListFirst[0]; i < header->freeListLast[0]; i += 4)\n        *(DWORD *)((LPBYTE)header + i) = i+4;\n\n    header->freeListFirst[1] = 0xffff;\n\n\n    /* Set up selector table */\n\n    nrBlocks      = (totSize + 0x7fff) >> 15;\n    selectorTable = HeapAlloc( header->heap,  0, nrBlocks * 2 );\n    selectorEven  = SELECTOR_AllocBlock( base, totSize, WINE_LDT_FLAGS_DATA );\n    selectorOdd   = SELECTOR_AllocBlock( base + 0x8000, totSize - 0x8000, WINE_LDT_FLAGS_DATA );\n    if ( !selectorTable || !selectorEven || !selectorOdd )\n    {\n        HeapFree( header->heap, 0, selectorTable );\n        if ( selectorEven  ) SELECTOR_FreeBlock( selectorEven );\n        if ( selectorOdd   ) SELECTOR_FreeBlock( selectorOdd );\n        HeapDestroy( header->heap );\n        VirtualFree( base, 0, MEM_RELEASE );\n        return 0;\n    }\n\n    header->selectorTableOffset = (LPBYTE)selectorTable - header->base;\n    header->selectorTableSize   = nrBlocks * 4;  /* ??? Win95 does it this way! */\n    header->selectorDelta       = selectorEven - selectorOdd;\n    header->segment             = segment? segment : selectorEven;\n\n    for (i = 0; i < nrBlocks; i++)\n        selectorTable[i] = (i & 1)? selectorOdd  + ((i >> 1) << __AHSHIFT)\n                                  : selectorEven + ((i >> 1) << __AHSHIFT);\n\n    /* Move old segment */\n\n    if ( segment )\n    {\n        /* FIXME: This is somewhat ugly and relies on implementation\n                  details about 16-bit global memory handles ... */\n\n        LPBYTE oldBase = (LPBYTE)GetSelectorBase( segment );\n        memcpy( base, oldBase, segSize );\n        GLOBAL_MoveBlock( segment, base, totSize );\n        HeapFree( GetProcessHeap(), 0, oldBase );\n    }\n\n    return header;\n}\n\n/***********************************************************************\n *           Local32_SearchHandle\n */\nstatic LPDWORD Local32_SearchHandle( LOCAL32HEADER *header, DWORD addr )\n{\n    LPDWORD handle;\n\n    for ( handle = (LPDWORD)((LPBYTE)header + sizeof(LOCAL32HEADER));\n          handle < (LPDWORD)((LPBYTE)header + header->limit);\n          handle++)\n    {\n        if (*handle == addr)\n            return handle;\n    }\n\n    return NULL;\n}\n\n/***********************************************************************\n *           Local32_ToHandle\n */\nstatic VOID Local32_ToHandle( LOCAL32HEADER *header, INT16 type,\n                              DWORD addr, LPDWORD *handle, LPBYTE *ptr )\n{\n    *handle = NULL;\n    *ptr    = NULL;\n\n    switch (type)\n    {\n        case -2:    /* 16:16 pointer, no handles */\n            *ptr    = MapSL( addr );\n            *handle = (LPDWORD)*ptr;\n            break;\n\n        case -1:    /* 32-bit offset, no handles */\n            *ptr    = header->base + addr;\n            *handle = (LPDWORD)*ptr;\n            break;\n\n        case 0:     /* handle */\n            if (    addr >= sizeof(LOCAL32HEADER)\n                 && addr <  header->limit && !(addr & 3)\n                 && *(LPDWORD)((LPBYTE)header + addr) >= HTABLE_SIZE )\n            {\n                *handle = (LPDWORD)((LPBYTE)header + addr);\n                *ptr    = header->base + **handle;\n            }\n            break;\n\n        case 1:     /* 16:16 pointer */\n            *ptr    = MapSL( addr );\n            *handle = Local32_SearchHandle( header, *ptr - header->base );\n            break;\n\n        case 2:     /* 32-bit offset */\n            *ptr    = header->base + addr;\n            *handle = Local32_SearchHandle( header, *ptr - header->base );\n            break;\n    }\n}\n\n/***********************************************************************\n *           Local32_FromHandle\n */\nstatic VOID Local32_FromHandle( LOCAL32HEADER *header, INT16 type,\n                                DWORD *addr, LPDWORD handle, LPBYTE ptr )\n{\n    *addr = 0;\n    switch (type)\n    {\n        case -2:    /* 16:16 pointer */\n        case  1:\n        {\n            WORD *selTable = (LPWORD)(header->base + header->selectorTableOffset);\n            DWORD offset   = ptr - header->base;\n            *addr = MAKELONG( offset & 0x7fff, selTable[offset >> 15] );\n        }\n        break;\n\n        case -1:    /* 32-bit offset */\n        case  2:\n            *addr = ptr - header->base;\n            break;\n\n        case  0:    /* handle */\n            *addr = (LPBYTE)handle - (LPBYTE)header;\n            break;\n    }\n}\n\n/***********************************************************************\n *           K209   (KERNEL.209)\n */\nDWORD WINAPI Local32Alloc16( HANDLE heap, DWORD size, INT16 type, DWORD flags )\n{\n    LOCAL32HEADER *header = heap;\n    LPDWORD handle;\n    LPBYTE ptr;\n    DWORD addr;\n\n    /* Allocate memory */\n    ptr = HeapAlloc( header->heap,\n                     (flags & LMEM_MOVEABLE)? HEAP_ZERO_MEMORY : 0, size );\n    if (!ptr) return 0;\n\n\n    /* Allocate handle if requested */\n    if (type >= 0)\n    {\n        int page, i;\n\n        /* Find first page of handle table with free slots */\n        for (page = 0; page < HTABLE_NPAGES; page++)\n            if (header->freeListFirst[page] != 0)\n                break;\n        if (page == HTABLE_NPAGES)\n        {\n            WARN(\"Out of handles!\\n\" );\n            HeapFree( header->heap, 0, ptr );\n            return 0;\n        }\n\n        /* If virgin page, initialize it */\n        if (header->freeListFirst[page] == 0xffff)\n        {\n            if ( !VirtualAlloc( (LPBYTE)header + (page << 12),\n                                0x1000, MEM_COMMIT, PAGE_READWRITE ) )\n            {\n                WARN(\"Cannot grow handle table!\\n\" );\n                HeapFree( header->heap, 0, ptr );\n                return 0;\n            }\n\n            header->limit += HTABLE_PAGESIZE;\n\n            header->freeListFirst[page] = 0;\n            header->freeListLast[page]  = HTABLE_PAGESIZE - 4;\n            header->freeListSize[page]  = HTABLE_PAGESIZE / 4;\n\n            for (i = 0; i < HTABLE_PAGESIZE; i += 4)\n                *(DWORD *)((LPBYTE)header + i) = i+4;\n\n            if (page < HTABLE_NPAGES-1)\n                header->freeListFirst[page+1] = 0xffff;\n        }\n\n        /* Allocate handle slot from page */\n        handle = (LPDWORD)((LPBYTE)header + header->freeListFirst[page]);\n        if (--header->freeListSize[page] == 0)\n            header->freeListFirst[page] = header->freeListLast[page] = 0;\n        else\n            header->freeListFirst[page] = *handle;\n\n        /* Store 32-bit offset in handle slot */\n        *handle = ptr - header->base;\n    }\n    else\n    {\n        handle = (LPDWORD)ptr;\n        header->flags |= 1;\n    }\n\n\n    /* Convert handle to requested output type */\n    Local32_FromHandle( header, type, &addr, handle, ptr );\n    return addr;\n}\n\n/***********************************************************************\n *           K210   (KERNEL.210)\n */\nDWORD WINAPI Local32ReAlloc16( HANDLE heap, DWORD addr, INT16 type,\n                             DWORD size, DWORD flags )\n{\n    LOCAL32HEADER *header = heap;\n    LPDWORD handle;\n    LPBYTE ptr;\n\n    if (!addr)\n        return Local32Alloc16( heap, size, type, flags );\n\n    /* Retrieve handle and pointer */\n    Local32_ToHandle( header, type, addr, &handle, &ptr );\n    if (!handle) return FALSE;\n\n    /* Reallocate memory block */\n    ptr = HeapReAlloc( header->heap,\n                       (flags & LMEM_MOVEABLE)? HEAP_ZERO_MEMORY : 0,\n                       ptr, size );\n    if (!ptr) return 0;\n\n    /* Modify handle */\n    if (type >= 0)\n        *handle = ptr - header->base;\n    else\n        handle = (LPDWORD)ptr;\n\n    /* Convert handle to requested output type */\n    Local32_FromHandle( header, type, &addr, handle, ptr );\n    return addr;\n}\n\n/***********************************************************************\n *           K211   (KERNEL.211)\n */\nBOOL WINAPI Local32Free16( HANDLE heap, DWORD addr, INT16 type )\n{\n    LOCAL32HEADER *header = heap;\n    LPDWORD handle;\n    LPBYTE ptr;\n\n    /* Retrieve handle and pointer */\n    Local32_ToHandle( header, type, addr, &handle, &ptr );\n    if (!handle) return FALSE;\n\n    /* Free handle if necessary */\n    if (type >= 0)\n    {\n        int offset = (LPBYTE)handle - (LPBYTE)header;\n        int page   = offset >> 12;\n\n        /* Return handle slot to page free list */\n        if (header->freeListSize[page]++ == 0)\n            header->freeListFirst[page] = header->freeListLast[page]  = offset;\n        else\n            *(LPDWORD)((LPBYTE)header + header->freeListLast[page]) = offset,\n            header->freeListLast[page] = offset;\n\n        *handle = 0;\n\n        /* Shrink handle table when possible */\n        while (page > 0 && header->freeListSize[page] == HTABLE_PAGESIZE / 4)\n        {\n            if ( VirtualFree( (LPBYTE)header +\n                              (header->limit & ~(HTABLE_PAGESIZE-1)),\n                              HTABLE_PAGESIZE, MEM_DECOMMIT ) )\n                break;\n\n            header->limit -= HTABLE_PAGESIZE;\n            header->freeListFirst[page] = 0xffff;\n            page--;\n        }\n    }\n\n    /* Free memory */\n    return HeapFree( header->heap, 0, ptr );\n}\n\n/***********************************************************************\n *           K213   (KERNEL.213)\n */\nDWORD WINAPI Local32Translate16( HANDLE heap, DWORD addr, INT16 type1, INT16 type2 )\n{\n    LOCAL32HEADER *header = heap;\n    LPDWORD handle;\n    LPBYTE ptr;\n\n    Local32_ToHandle( header, type1, addr, &handle, &ptr );\n    if (!handle) return 0;\n\n    Local32_FromHandle( header, type2, &addr, handle, ptr );\n    return addr;\n}\n\n/***********************************************************************\n *           K214   (KERNEL.214)\n */\nDWORD WINAPI Local32Size16( HANDLE heap, DWORD addr, INT16 type )\n{\n    LOCAL32HEADER *header = heap;\n    LPDWORD handle;\n    LPBYTE ptr;\n\n    Local32_ToHandle( header, type, addr, &handle, &ptr );\n    if (!handle) return 0;\n\n    return HeapSize( header->heap, 0, ptr );\n}\n\n/***********************************************************************\n *           K215   (KERNEL.215)\n */\nBOOL WINAPI Local32ValidHandle16( HANDLE heap, WORD addr )\n{\n    LOCAL32HEADER *header = heap;\n    LPDWORD handle;\n    LPBYTE ptr;\n\n    Local32_ToHandle( header, 0, addr, &handle, &ptr );\n    return handle != NULL;\n}\n\n/***********************************************************************\n *           K229   (KERNEL.229)\n */\nWORD WINAPI Local32GetSegment16( HANDLE heap )\n{\n    LOCAL32HEADER *header = heap;\n    return header->segment;\n}\n\n/***********************************************************************\n *           Local32_GetHeap\n */\nstatic LOCAL32HEADER *Local32_GetHeap( HGLOBAL16 handle )\n{\n    WORD selector = GlobalHandleToSel16( handle );\n    DWORD base  = GetSelectorBase( selector );\n    DWORD limit = GetSelectorLimit16( selector );\n\n    /* Hmmm. This is a somewhat stupid heuristic, but Windows 95 does\n       it this way ... */\n\n    if ( limit > 0x10000 && ((LOCAL32HEADER *)base)->magic == LOCAL32_MAGIC )\n        return (LOCAL32HEADER *)base;\n\n    base  += 0x10000;\n    limit -= 0x10000;\n\n    if ( limit > 0x10000 && ((LOCAL32HEADER *)base)->magic == LOCAL32_MAGIC )\n        return (LOCAL32HEADER *)base;\n\n    return NULL;\n}\n\n/***********************************************************************\n *           Local32Info   (KERNEL.444)\n */\nBOOL16 WINAPI Local32Info16( LOCAL32INFO *pLocal32Info, HGLOBAL16 handle )\n{\n    PROCESS_HEAP_ENTRY entry;\n    int i;\n\n    LOCAL32HEADER *header = Local32_GetHeap( handle );\n    if ( !header ) return FALSE;\n\n    if ( !pLocal32Info || pLocal32Info->dwSize < sizeof(LOCAL32INFO) )\n        return FALSE;\n\n    pLocal32Info->dwMemReserved = 0;\n    pLocal32Info->dwMemCommitted = 0;\n    pLocal32Info->dwTotalFree = 0;\n    pLocal32Info->dwLargestFreeBlock = 0;\n\n    while (HeapWalk( header->heap, &entry ))\n    {\n        if (entry.wFlags & PROCESS_HEAP_REGION)\n        {\n            pLocal32Info->dwMemReserved += entry.u.Region.dwCommittedSize\n                                           + entry.u.Region.dwUnCommittedSize;\n            pLocal32Info->dwMemCommitted = entry.u.Region.dwCommittedSize;\n        }\n        else if (!(entry.wFlags & PROCESS_HEAP_ENTRY_BUSY))\n        {\n            DWORD size = entry.cbData + entry.cbOverhead;\n            pLocal32Info->dwTotalFree += size;\n            if (size > pLocal32Info->dwLargestFreeBlock) pLocal32Info->dwLargestFreeBlock = size;\n        }\n    }\n\n    pLocal32Info->dwcFreeHandles = 0;\n    for ( i = 0; i < HTABLE_NPAGES; i++ )\n    {\n        if ( header->freeListFirst[i] == 0xffff ) break;\n        pLocal32Info->dwcFreeHandles += header->freeListSize[i];\n    }\n    pLocal32Info->dwcFreeHandles += (HTABLE_NPAGES - i) * HTABLE_PAGESIZE/4;\n\n    return TRUE;\n}\n\n/***********************************************************************\n *           Local32First   (KERNEL.445)\n */\nBOOL16 WINAPI Local32First16( LOCAL32ENTRY *pLocal32Entry, HGLOBAL16 handle )\n{\n    FIXME(\"(%p, %04X): stub!\\n\", pLocal32Entry, handle );\n    return FALSE;\n}\n\n/***********************************************************************\n *           Local32Next   (KERNEL.446)\n */\nBOOL16 WINAPI Local32Next16( LOCAL32ENTRY *pLocal32Entry )\n{\n    FIXME(\"(%p): stub!\\n\", pLocal32Entry );\n    return FALSE;\n}\n"
  },
  {
    "path": "krnl386/ne_module.c",
    "content": "/*\n * NE modules\n *\n * Copyright 1995 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <assert.h>\n#include <fcntl.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#include <ctype.h>\n\n#include \"windef.h\"\n#include \"wine/winbase16.h\"\n#include \"windows/wownt32.h\"\n#include \"winternl.h\"\n#include \"kernel16_private.h\"\n#include \"wine/exception.h\"\n#include \"wine/debug.h\"\n#include \"winuser.h\"\n#include \"shellapi.h\"\n#include \"shlwapi.h\"\n#include \"../toolhelp/toolhelp.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(module);\nWINE_DECLARE_DEBUG_CHANNEL(loaddll);\nWINE_DECLARE_DEBUG_CHANNEL(relay);\nWINE_DECLARE_DEBUG_CHANNEL(winediag);\n\n#include \"pshpack1.h\"\ntypedef struct _GPHANDLERDEF\n{\n    WORD selector;\n    WORD rangeStart;\n    WORD rangeEnd;\n    WORD handler;\n} GPHANDLERDEF;\n#include \"poppack.h\"\n\n/*\n * Segment table entry\n */\nstruct ne_segment_table_entry_s\n{\n    WORD seg_data_offset;   /* Sector offset of segment data\t*/\n    WORD seg_data_length;   /* Length of segment data\t\t*/\n    WORD seg_flags;         /* Flags associated with this segment\t*/\n    WORD min_alloc;         /* Minimum allocation size for this\t*/\n};\n\n#define hFirstModule (pThhook->hExeHead)\n\nstatic HINSTANCE16 NE_LoadModule( LPCSTR name, BOOL lib_only );\nstatic BOOL16 NE_FreeModule( HMODULE16 hModule, BOOL call_wep, BOOL cleanup );\n\nstatic HINSTANCE16 MODULE_LoadModule16( LPCSTR libname, BOOL implicit, BOOL lib_only, SEGPTR cmdline );\n\nstatic HMODULE16 NE_GetModuleByFilename( LPCSTR name );\n\nBOOL16 WINAPI WIN32_GlobalUnlock16(HGLOBAL16 handle); \n\n/* patch all the flat cs references of the code segment if necessary */\nstatic inline void patch_code_segment( NE_MODULE *pModule )\n{\n    int i;\n    CALLFROM16 *call;\n    SEGTABLEENTRY *pSeg = NE_SEG_TABLE( pModule );\n\n    for (i = 0; i < pModule->ne_cseg; i++, pSeg++)\n        if (!(pSeg->flags & NE_SEGFLAGS_DATA)) break;  /* found the code segment */\n\n    call = GlobalLock16( pSeg->hSeg );\n\n    /* patch glue code address and code selector */\n    for (i = 0; call[i].pushl == 0x6866; i++)\n    {\n        if (call[i].ret[0] == 0xca || call[i].ret[0] == 0xcb)  /* register entry point? */\n            call[i].glue = __wine_call_from_16_regs;\n        else\n            call[i].glue = __wine_call_from_16;\n        call[i].flatcs = wine_get_cs();\n    }\n\n    if (TRACE_ON(relay))  /* patch relay functions to all point to relay_call_from_16 */\n        for (i = 0; call[i].pushl == 0x6866; i++) call[i].relay = relay_call_from_16;\n}\n\n\n/***********************************************************************\n *           contains_path\n */\nstatic inline BOOL contains_path( LPCSTR name )\n{\n    return ((*name && (name[1] == ':')) || strchr(name, '/') || strchr(name, '\\\\'));\n}\n\n\n/***********************************************************************\n *              NE_strcasecmp\n *\n * locale-independent case conversion for module lookups\n */\nstatic int NE_strcasecmp( const char *str1, const char *str2 )\n{\n    int ret = 0;\n    for ( ; ; str1++, str2++)\n        if ((ret = RtlUpperChar(*str1) - RtlUpperChar(*str2)) || !*str1) break;\n    return ret;\n}\n\n\n/***********************************************************************\n *              NE_strncasecmp\n *\n * locale-independent case conversion for module lookups\n */\nstatic int NE_strncasecmp( const char *str1, const char *str2, int len )\n{\n    int ret = 0;\n    for ( ; len > 0; len--, str1++, str2++)\n        if ((ret = RtlUpperChar(*str1) - RtlUpperChar(*str2)) || !*str1) break;\n    return ret;\n}\n\n\n/***********************************************************************\n *           NE_GetPtr\n */\nNE_MODULE *NE_GetPtr( HMODULE16 hModule )\n{\n    return GlobalLock16( GetExePtr(hModule) );\n}\n\n\n/**********************************************************************\n *           NE_RegisterModule\n */\nstatic void NE_RegisterModule( NE_MODULE *pModule )\n{\n    pModule->next = hFirstModule;\n    hFirstModule = pModule->self;\n}\n\n\n/***********************************************************************\n *           NE_DumpModule\n */\nvoid NE_DumpModule( HMODULE16 hModule )\n{\n    int i, ordinal;\n    SEGTABLEENTRY *pSeg;\n    BYTE *pstr;\n    WORD *pword;\n    NE_MODULE *pModule;\n    ET_BUNDLE *bundle;\n    ET_ENTRY *entry;\n\n    if (!(pModule = NE_GetPtr( hModule )))\n    {\n        ERR( \"**** %04x is not a module handle\\n\", hModule );\n        return;\n    }\n\n      /* Dump the module info */\n    TRACE( \"---\\n\" );\n    TRACE( \"Module %04x:\\n\", hModule );\n    TRACE( \"count=%d flags=%04x heap=%d stack=%d\\n\",\n             pModule->count, pModule->ne_flags,\n             pModule->ne_heap, pModule->ne_stack );\n    TRACE( \"cs:ip=%04x:%04x ss:sp=%04x:%04x ds=%04x nb seg=%d modrefs=%d\\n\",\n             SELECTOROF(pModule->ne_csip), OFFSETOF(pModule->ne_csip),\n             SELECTOROF(pModule->ne_sssp), OFFSETOF(pModule->ne_sssp),\n             pModule->ne_autodata, pModule->ne_cseg, pModule->ne_cmod );\n    TRACE( \"os_flags=%d swap_area=%d version=%04x\\n\",\n             pModule->ne_exetyp, pModule->ne_swaparea, pModule->ne_expver );\n    if (pModule->ne_flags & NE_FFLAGS_WIN32)\n        TRACE( \"PE module=%p\\n\", pModule->module32 );\n\n      /* Dump the file info */\n    TRACE( \"---\\n\" );\n    TRACE( \"Filename: '%s'\\n\", NE_MODULE_NAME(pModule) );\n\n      /* Dump the segment table */\n    TRACE( \"---\\n\" );\n    TRACE( \"Segment table:\\n\" );\n    pSeg = NE_SEG_TABLE( pModule );\n    for (i = 0; i < pModule->ne_cseg; i++, pSeg++)\n        TRACE( \"%02x: pos=%d size=%d flags=%04x minsize=%d hSeg=%04x\\n\",\n                 i + 1, pSeg->filepos, pSeg->size, pSeg->flags,\n                 pSeg->minsize, pSeg->hSeg );\n\n      /* Dump the resource table */\n    TRACE( \"---\\n\" );\n    TRACE( \"Resource table:\\n\" );\n    if (pModule->ne_rsrctab)\n    {\n        pword = (WORD *)((BYTE *)pModule + pModule->ne_rsrctab);\n        TRACE( \"Alignment: %d\\n\", *pword++ );\n        while (*pword)\n        {\n            NE_TYPEINFO *ptr = (NE_TYPEINFO *)pword;\n            NE_NAMEINFO *pname = (NE_NAMEINFO *)(ptr + 1);\n            TRACE( \"id=%04x count=%d\\n\", ptr->type_id, ptr->count );\n            for (i = 0; i < ptr->count; i++, pname++)\n                TRACE( \"offset=%d len=%d id=%04x\\n\",\n\t\t      pname->offset, pname->length, pname->id );\n            pword = (WORD *)pname;\n        }\n    }\n    else TRACE( \"None\\n\" );\n\n      /* Dump the resident name table */\n    TRACE( \"---\\n\" );\n    TRACE( \"Resident-name table:\\n\" );\n    pstr = (BYTE*) pModule + pModule->ne_restab;\n    while (*pstr)\n    {\n        TRACE( \"%*.*s: %d\\n\", *pstr, *pstr, pstr + 1,\n                 *(WORD *)(pstr + *pstr + 1) );\n        pstr += *pstr + 1 + sizeof(WORD);\n    }\n\n      /* Dump the module reference table */\n    TRACE( \"---\\n\" );\n    TRACE( \"Module ref table:\\n\" );\n    if (pModule->ne_modtab)\n    {\n        pword = (WORD *)((BYTE *)pModule + pModule->ne_modtab);\n        for (i = 0; i < pModule->ne_cmod; i++, pword++)\n        {\n            char name[10];\n            GetModuleName16( *pword, name, sizeof(name) );\n            TRACE( \"%d: %04x -> '%s'\\n\", i, *pword, name );\n        }\n    }\n    else TRACE( \"None\\n\" );\n\n      /* Dump the entry table */\n    TRACE( \"---\\n\" );\n    TRACE( \"Entry table:\\n\" );\n    bundle = (ET_BUNDLE *)((BYTE *)pModule+pModule->ne_enttab);\n    do {\n        entry = (ET_ENTRY *)((BYTE *)bundle+6);\n        TRACE( \"Bundle %d-%d: %02x\\n\", bundle->first, bundle->last, entry->type);\n        ordinal = bundle->first;\n        while (ordinal < bundle->last)\n        {\n            if (entry->type == 0xff)\n                TRACE(\"%d: %02x:%04x (moveable)\\n\", ordinal++, entry->segnum, entry->offs);\n            else\n                TRACE(\"%d: %02x:%04x (fixed)\\n\", ordinal++, entry->segnum, entry->offs);\n            entry++;\n        }\n    } while ( (bundle->next) && (bundle = ((ET_BUNDLE *)((BYTE *)pModule + bundle->next))) );\n\n    /* Dump the non-resident names table */\n    TRACE( \"---\\n\" );\n    TRACE( \"Non-resident names table:\\n\" );\n    if (pModule->nrname_handle)\n    {\n        pstr = GlobalLock16( pModule->nrname_handle );\n        while (*pstr)\n        {\n            TRACE( \"%*.*s: %d\\n\", *pstr, *pstr, pstr + 1,\n                   *(WORD *)(pstr + *pstr + 1) );\n            pstr += *pstr + 1 + sizeof(WORD);\n        }\n    }\n    TRACE( \"\\n\" );\n}\n\n\n/***********************************************************************\n *           NE_WalkModules\n *\n * Walk the module list and print the modules.\n */\nvoid NE_WalkModules(void)\n{\n    HMODULE16 hModule = hFirstModule;\n    MESSAGE( \"Module Flags Name\\n\" );\n    while (hModule)\n    {\n        NE_MODULE *pModule = NE_GetPtr( hModule );\n        if (!pModule)\n        {\n            MESSAGE( \"Bad module %04x in list\\n\", hModule );\n            return;\n        }\n        MESSAGE( \" %04x  %04x  %.*s\\n\", hModule, pModule->ne_flags,\n                 *((char *)pModule + pModule->ne_restab),\n                 (char *)pModule + pModule->ne_restab + 1 );\n        hModule = pModule->next;\n    }\n}\n\n\n__declspec(dllexport) void NE_DumpAllModules(void)\n{\n    HMODULE16 hModule = hFirstModule;\n    MESSAGE(\"Module Flags Name Flag\\n\");\n    while (hModule)\n    {\n        NE_MODULE *pModule = NE_GetPtr(hModule);\n        char tab[13] = { ' ', ' ', ' ', ' ', ' ', ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ', ' ' };\n        if (!pModule)\n        {\n            MESSAGE(\"Bad module %04x in list\\n\", hModule);\n            return;\n        }\n        char buffer[1024];\n        buffer[0] = '\\0';\n        char *cbuf = buffer;\n        if (pModule->ne_flags & NE_FFLAGS_SINGLEDATA) cbuf += sprintf(cbuf, \"%s\", \"SINGLEDATA | \");\n        if (pModule->ne_flags & NE_FFLAGS_MULTIPLEDATA) cbuf += sprintf(cbuf, \"%s\", \"MULTIPLEDATA | \");\n        if (pModule->ne_flags & NE_FFLAGS_WIN32) cbuf += sprintf(cbuf, \"%s\", \"WIN32 | \");\n        if (pModule->ne_flags & NE_FFLAGS_BUILTIN) cbuf += sprintf(cbuf, \"%s\", \"BUILTIN | \");\n        if (pModule->ne_flags & NE_FFLAGS_FRAMEBUF) cbuf += sprintf(cbuf, \"%s\", \"FRAMEBUF | \");\n        if (pModule->ne_flags & NE_FFLAGS_CONSOLE) cbuf += sprintf(cbuf, \"%s\", \"CONSOLE | \");\n        if (pModule->ne_flags & NE_FFLAGS_GUI) cbuf += sprintf(cbuf, \"%s\", \"GUI | \");\n        if (pModule->ne_flags & NE_FFLAGS_SELFLOAD) cbuf += sprintf(cbuf, \"%s\", \"SELFLOAD | \");\n        if (pModule->ne_flags & NE_FFLAGS_LINKERROR) cbuf += sprintf(cbuf, \"%s\", \"LINKERROR | \");\n        if (pModule->ne_flags & NE_FFLAGS_CALLWEP) cbuf += sprintf(cbuf, \"%s\", \"CALLWEP | \");\n        if (pModule->ne_flags & NE_FFLAGS_LIBMODULE) cbuf += sprintf(cbuf, \"%s\", \"LIBMODULE | \");\n        \n        if (cbuf != buffer)\n        {\n            if (cbuf[-1] == ' ' && cbuf[-2] == '|' && cbuf[-3] == ' ')\n                cbuf[-3] = '\\0';\n        }\n        MESSAGE(\" %04x\\t%04x\\t%.*s%.*s%s\\n\", hModule, pModule->ne_flags,\n            *((char *)pModule + pModule->ne_restab),\n            (char *)pModule + pModule->ne_restab + 1,\n            12 - *((char *)pModule + pModule->ne_restab), tab,\n            buffer);\n        if (TRACE_ON(module))\n            NE_DumpModule(hModule);\n        hModule = pModule->next;\n    }\n}\n\n/***********************************************************************\n *           NE_InitResourceHandler\n *\n * Fill in 'resloader' fields in the resource table.\n */\nstatic void NE_InitResourceHandler( HMODULE16 hModule )\n{\n    static FARPROC16 proc;\n\n    NE_TYPEINFO *pTypeInfo;\n    NE_MODULE *pModule;\n\n    if (!(pModule = NE_GetPtr( hModule )) || !pModule->ne_rsrctab) return;\n\n    TRACE(\"InitResourceHandler[%04x]\\n\", hModule );\n\n    if (!proc) proc = GetProcAddress16( GetModuleHandle16(\"KERNEL\"), \"DefResourceHandler\" );\n\n    pTypeInfo = (NE_TYPEINFO *)((char *)pModule + pModule->ne_rsrctab + 2);\n    while(pTypeInfo->type_id)\n    {\n        memcpy_unaligned( &pTypeInfo->resloader, &proc, sizeof(FARPROC16) );\n        pTypeInfo = (NE_TYPEINFO *)((char*)(pTypeInfo + 1) + pTypeInfo->count * sizeof(NE_NAMEINFO));\n    }\n}\n\n\n/***********************************************************************\n *           NE_GetOrdinal\n *\n * Lookup the ordinal for a given name.\n */\nWORD NE_GetOrdinal( HMODULE16 hModule, const char *name )\n{\n    char buffer[256], *p;\n    BYTE *cpnt;\n    BYTE len;\n    NE_MODULE *pModule;\n\n    if (!(pModule = NE_GetPtr( hModule ))) return 0;\n    if (pModule->ne_flags & NE_FFLAGS_WIN32) return 0;\n\n    TRACE(\"(%04x,'%s')\\n\", hModule, name );\n\n      /* First handle names of the form '#xxxx' */\n\n    if (name[0] == '#') return atoi( name + 1 );\n\n      /* Now copy and uppercase the string */\n\n    strcpy( buffer, name );\n    for (p = buffer; *p; p++) *p = RtlUpperChar(*p);\n    len = p - buffer;\n\n      /* First search the resident names */\n\n    cpnt = (BYTE *)pModule + pModule->ne_restab;\n\n      /* Skip the first entry (module name) */\n    cpnt += *cpnt + 1 + sizeof(WORD);\n    while (*cpnt)\n    {\n        if ((*cpnt == len) && !memcmp( cpnt+1, buffer, len ))\n        {\n            WORD ordinal;\n            memcpy( &ordinal, cpnt + *cpnt + 1, sizeof(ordinal) );\n            TRACE(\"  Found: ordinal=%d\\n\", ordinal );\n            return ordinal;\n        }\n        cpnt += *cpnt + 1 + sizeof(WORD);\n    }\n\n      /* Now search the non-resident names table */\n\n    if (!pModule->nrname_handle) return 0;  /* No non-resident table */\n    cpnt = GlobalLock16( pModule->nrname_handle );\n\n      /* Skip the first entry (module description string) */\n    cpnt += *cpnt + 1 + sizeof(WORD);\n    while (*cpnt)\n    {\n        if ((*cpnt == len) && !memcmp( cpnt+1, buffer, len ))\n        {\n            WORD ordinal;\n            memcpy( &ordinal, cpnt + *cpnt + 1, sizeof(ordinal) );\n            TRACE(\"  Found: ordinal=%d\\n\", ordinal );\n            return ordinal;\n        }\n        cpnt += *cpnt + 1 + sizeof(WORD);\n    }\n    return 0;\n}\n\n\n/***********************************************************************\n *\t\tNE_GetEntryPoint\n */\nFARPROC16 WINAPI NE_GetEntryPoint( HMODULE16 hModule, WORD ordinal )\n{\n    return NE_GetEntryPointEx( hModule, ordinal, TRUE );\n}\n\n/***********************************************************************\n *\t\tNE_GetEntryPointEx\n */\nFARPROC16 NE_GetEntryPointEx( HMODULE16 hModule, WORD ordinal, BOOL16 snoop )\n{\n    NE_MODULE *pModule;\n    WORD sel, offset, i;\n\n    ET_ENTRY *entry;\n    ET_BUNDLE *bundle;\n\n    if (!(pModule = NE_GetPtr( hModule ))) return 0;\n    assert( !(pModule->ne_flags & NE_FFLAGS_WIN32) );\n\n    bundle = (ET_BUNDLE *)((BYTE *)pModule + pModule->ne_enttab);\n    while ((ordinal < bundle->first + 1) || (ordinal > bundle->last))\n    {\n        if (!(bundle->next))\n            return 0;\n        bundle = (ET_BUNDLE *)((BYTE *)pModule + bundle->next);\n    }\n\n    entry = (ET_ENTRY *)((BYTE *)bundle+6);\n    for (i=0; i < (ordinal - bundle->first - 1); i++)\n        entry++;\n\n    sel = entry->segnum;\n    memcpy( &offset, &entry->offs, sizeof(WORD) );\n\n    if (sel == 0xfe) sel = 0xffff;  /* constant entry */\n    else sel = GlobalHandleToSel16(NE_SEG_TABLE(pModule)[sel-1].hSeg);\n    if (sel==0xffff)\n        return (FARPROC16)MAKESEGPTR( sel, offset );\n    if (!snoop)\n        return (FARPROC16)MAKESEGPTR( sel, offset );\n    else\n        return SNOOP16_GetProcAddress16(hModule,ordinal,(FARPROC16)MAKESEGPTR( sel, offset ));\n}\n\n\n/***********************************************************************\n *\t\tEntryAddrProc (KERNEL.667) Wine-specific export\n *\n * Return the entry point for a given ordinal.\n */\nFARPROC16 WINAPI EntryAddrProc16( HMODULE16 hModule, WORD ordinal )\n{\n    FARPROC16 ret = NE_GetEntryPointEx( hModule, ordinal, TRUE );\n    CURRENT_STACK16->ecx = hModule; /* FIXME: might be incorrect value */\n    return ret;\n}\n\n/***********************************************************************\n *           NE_SetEntryPoint\n *\n * Change the value of an entry point. Use with caution!\n * It can only change the offset value, not the selector.\n */\nBOOL16 NE_SetEntryPoint( HMODULE16 hModule, WORD ordinal, WORD offset )\n{\n    NE_MODULE *pModule;\n    ET_ENTRY *entry;\n    ET_BUNDLE *bundle;\n    int i;\n\n    if (!(pModule = NE_GetPtr( hModule ))) return FALSE;\n    assert( !(pModule->ne_flags & NE_FFLAGS_WIN32) );\n\n    bundle = (ET_BUNDLE *)((BYTE *)pModule + pModule->ne_enttab);\n    while ((ordinal < bundle->first + 1) || (ordinal > bundle->last))\n    {\n        bundle = (ET_BUNDLE *)((BYTE *)pModule + bundle->next);\n        if (!bundle->next) return FALSE;\n    }\n\n    entry = (ET_ENTRY *)((BYTE *)bundle+6);\n    for (i=0; i < (ordinal - bundle->first - 1); i++)\n        entry++;\n\n    memcpy( &entry->offs, &offset, sizeof(WORD) );\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           build_bundle_data\n *\n * Build the entry table bundle data from the on-disk format. Helper for build_module.\n */\nstatic void *build_bundle_data( NE_MODULE *pModule, void *dest, const BYTE *table )\n{\n    ET_BUNDLE *oldbundle, *bundle = dest;\n    ET_ENTRY *entry;\n    BYTE nr_entries, type;\n\n    memset(bundle, 0, sizeof(ET_BUNDLE)); /* in case no entry table exists */\n    entry = (ET_ENTRY *)((BYTE *)bundle+6);\n\n    while ((nr_entries = *table++))\n    {\n        if ((type = *table++))\n        {\n            bundle->last += nr_entries;\n            if (type == 0xff)\n            {\n                while (nr_entries--)\n                {\n                    entry->type   = type;\n                    entry->flags  = *table++;\n                    table += sizeof(WORD);\n                    entry->segnum = *table++;\n                    entry->offs   = *(const WORD *)table;\n                    table += sizeof(WORD);\n                    entry++;\n                }\n            }\n            else\n            {\n                while (nr_entries--)\n                {\n                    entry->type   = type;\n                    entry->flags  = *table++;\n                    entry->segnum = type;\n                    entry->offs   = *(const WORD *)table;\n                    table += sizeof(WORD);\n                    entry++;\n                }\n            }\n        }\n        else\n        {\n            if (bundle->first == bundle->last)\n            {\n                bundle->first += nr_entries;\n                bundle->last += nr_entries;\n            }\n            else\n            {\n                oldbundle = bundle;\n                oldbundle->next = (char *)entry - (char *)pModule;\n                bundle = (ET_BUNDLE *)entry;\n                bundle->first = bundle->last = oldbundle->last + nr_entries;\n                bundle->next = 0;\n                entry = (ET_ENTRY*)(((BYTE*)entry)+sizeof(ET_BUNDLE));\n            }\n        }\n    }\n    return entry;\n}\n\n\n/***********************************************************************\n *           build_module\n *\n * Build the in-memory module from the on-disk data.\n */\nstatic HMODULE16 build_module( const void *mapping, SIZE_T mapping_size, LPCSTR path )\n{\n    const IMAGE_DOS_HEADER *mz_header = mapping;\n    const IMAGE_OS2_HEADER *ne_header;\n    const struct ne_segment_table_entry_s *pSeg;\n    const void *ptr;\n    int i;\n    size_t size;\n    HMODULE16 hModule;\n    NE_MODULE *pModule;\n    BYTE *buffer, *pData, *end;\n    OFSTRUCT *ofs;\n\n    if (mapping_size < sizeof(*mz_header)) return ERROR_BAD_FORMAT;\n    if (mz_header->e_magic != IMAGE_DOS_SIGNATURE) return ERROR_BAD_FORMAT;\n    ne_header = (const IMAGE_OS2_HEADER *)((const char *)mapping + mz_header->e_lfanew);\n    if (mz_header->e_lfanew + sizeof(*ne_header) > mapping_size) return ERROR_BAD_FORMAT;\n    if (ne_header->ne_magic == IMAGE_NT_SIGNATURE) return 21;  /* win32 exe */\n    if (ne_header->ne_magic == IMAGE_OS2_SIGNATURE_LX)\n    {\n        MESSAGE(\"Sorry, %s is an OS/2 linear executable (LX) file!\\n\", path);\n        return 12;\n    }\n    if (ne_header->ne_magic != IMAGE_OS2_SIGNATURE) return ERROR_BAD_FORMAT;\n\n    /* We now have a valid NE header */\n\n    /* check to be able to fall back to loading OS/2 programs as DOS\n     * FIXME: should this check be reversed in order to be less strict?\n     * (only fail for OS/2 ne_exetyp 0x01 here?) */\n    if (ne_header->ne_exetyp == NE_OSFLAGS_OS2 || ne_header->ne_exetyp == 3 /* DOS executable */)\n    {\n        return ERROR_BAD_FORMAT;\n    }\n\n    size = sizeof(NE_MODULE) +\n             /* segment table */\n           ne_header->ne_cseg * sizeof(SEGTABLEENTRY) +\n             /* resource table */\n           ne_header->ne_restab - ne_header->ne_rsrctab +\n             /* resident names table */\n           ne_header->ne_modtab - ne_header->ne_restab +\n             /* module ref table */\n           ne_header->ne_cmod * sizeof(WORD) +\n             /* imported names table */\n           ne_header->ne_enttab - ne_header->ne_imptab +\n             /* entry table length */\n           ne_header->ne_cbenttab +\n             /* entry table extra conversion space */\n           sizeof(ET_BUNDLE) +\n           2 * (ne_header->ne_cbenttab - ne_header->ne_cmovent*6) +\n             /* loaded file info */\n           sizeof(OFSTRUCT) - sizeof(ofs->szPathName) + strlen(path) + 1;\n\n    hModule = GlobalAlloc16( GMEM_FIXED | GMEM_ZEROINIT, size );\n    if (!hModule)\n    {\n        ERR_(winediag)( \"Failed to create module for %s, 16-bit LDT support may be missing.\\n\",\n                        debugstr_a(path) );\n        return ERROR_BAD_FORMAT;\n    }\n    GLOBAL_SetSeg(hModule, 0, GT_MODULE);\n\n    FarSetOwner16( hModule, hModule );\n    pModule = GlobalLock16( hModule );\n    memcpy( pModule, ne_header, sizeof(*ne_header) );\n\n    if (pModule->ne_exetyp != 0x02 && pModule->ne_exetyp != 0x04)\n        ERR(\"exe type is not windows or windows/386. (typ:%02x, ver:%04x)\\n\", pModule->ne_exetyp, pModule->ne_expver);\n    \n    /* win95:0x400 */\n    if (pModule->ne_expver >= 0x500)\n        pModule->ne_expver = 0;\n\n    pModule->count = 0;\n    /* check programs for default minimal stack size */\n    if (!(pModule->ne_flags & NE_FFLAGS_LIBMODULE) && (pModule->ne_stack < 0x1400))\n        pModule->ne_stack = 0x1400;\n\n    pModule->self         = hModule;\n    pModule->mapping      = mapping;\n    pModule->mapping_size = mapping_size;\n\n    pData = (BYTE *)(pModule + 1);\n\n    /* Clear internal Wine flags in case they are set in the EXE file */\n\n    pModule->ne_flags &= ~(NE_FFLAGS_BUILTIN | NE_FFLAGS_WIN32);\n\n    /* Get the segment table */\n\n    pModule->ne_segtab = pData - (BYTE *)pModule;\n    if (!(pSeg = NE_GET_DATA( pModule, mz_header->e_lfanew + ne_header->ne_segtab,\n                              ne_header->ne_cseg * sizeof(struct ne_segment_table_entry_s) )))\n        goto failed;\n    for (i = ne_header->ne_cseg; i > 0; i--, pSeg++)\n    {\n        memcpy( pData, pSeg, sizeof(*pSeg) );\n        pData += sizeof(SEGTABLEENTRY);\n    }\n\n    /* Get the resource table */\n\n    if (ne_header->ne_rsrctab < ne_header->ne_restab)\n    {\n        pModule->ne_rsrctab = pData - (BYTE *)pModule;\n        if (!NE_READ_DATA( pModule, pData, mz_header->e_lfanew + ne_header->ne_rsrctab,\n                           ne_header->ne_restab - ne_header->ne_rsrctab )) goto failed;\n        pData += ne_header->ne_restab - ne_header->ne_rsrctab;\n    }\n    else pModule->ne_rsrctab = 0;  /* No resource table */\n\n    /* Get the resident names table */\n\n    pModule->ne_restab = pData - (BYTE *)pModule;\n    if (!NE_READ_DATA( pModule, pData, mz_header->e_lfanew + ne_header->ne_restab,\n                       ne_header->ne_modtab - ne_header->ne_restab )) goto failed;\n\n    /* The module name is CAPITALIZED. */\n\n    for (i = 1; i <= *pData; i++)\n    {\n        pData[i] = toupper(pData[i]);\n    }\n\n    pData += ne_header->ne_modtab - ne_header->ne_restab;\n\n    /* Get the module references table */\n\n    if (ne_header->ne_cmod > 0)\n    {\n        pModule->ne_modtab = pData - (BYTE *)pModule;\n        if (!NE_READ_DATA( pModule, pData, mz_header->e_lfanew + ne_header->ne_modtab,\n                           ne_header->ne_cmod * sizeof(WORD) )) goto failed;\n        pData += ne_header->ne_cmod * sizeof(WORD);\n    }\n    else pModule->ne_modtab = 0;  /* No module references */\n\n    /* Get the imported names table */\n\n    pModule->ne_imptab = pData - (BYTE *)pModule;\n    if (!NE_READ_DATA( pModule, pData, mz_header->e_lfanew + ne_header->ne_imptab,\n                       ne_header->ne_enttab - ne_header->ne_imptab )) goto failed;\n    pData += ne_header->ne_enttab - ne_header->ne_imptab;\n\n    /* Load entry table, convert it to the optimized version used by Windows */\n\n    pModule->ne_enttab = pData - (BYTE *)pModule;\n    if (!(ptr = NE_GET_DATA( pModule, mz_header->e_lfanew + ne_header->ne_enttab,\n                             ne_header->ne_cbenttab ))) goto failed;\n    end = build_bundle_data( pModule, pData, ptr );\n\n    pData += ne_header->ne_cbenttab + sizeof(ET_BUNDLE) +\n        2 * (ne_header->ne_cbenttab - ne_header->ne_cmovent*6);\n\n    if (end > pData)\n    {\n        FIXME( \"not enough space for entry table for %s\\n\", debugstr_a(path) );\n        goto failed;\n    }\n\n    /* Store the filename information */\n\n    pModule->fileinfo = pData - (BYTE *)pModule;\n    ofs = (OFSTRUCT *)pData;\n    ofs->cBytes = sizeof(OFSTRUCT) - sizeof(ofs->szPathName) + strlen(path);\n    ofs->fFixedDisk = 1;\n    strcpy( ofs->szPathName, path );\n    pData += ofs->cBytes + 1;\n    assert( (BYTE *)pModule + size <= pData );\n\n    /* Get the non-resident names table */\n\n    if (ne_header->ne_cbnrestab)\n    {\n        pModule->nrname_handle = GlobalAlloc16( 0, ne_header->ne_cbnrestab );\n        if (!pModule->nrname_handle) goto failed;\n        FarSetOwner16( pModule->nrname_handle, hModule );\n        buffer = GlobalLock16( pModule->nrname_handle );\n        if (!NE_READ_DATA( pModule, buffer, ne_header->ne_nrestab, ne_header->ne_cbnrestab ))\n        {\n            GlobalFree16( pModule->nrname_handle );\n            pModule->nrname_handle = 0;\n        }\n    }\n    else pModule->nrname_handle = 0;\n\n    /* Allocate a segment for the implicitly-loaded DLLs */\n\n    if (pModule->ne_cmod)\n    {\n        pModule->dlls_to_init = GlobalAlloc16( GMEM_ZEROINIT,\n                                               (pModule->ne_cmod+1)*sizeof(HMODULE16) );\n        if (!pModule->dlls_to_init)\n        {\n            if (pModule->nrname_handle) GlobalFree16( pModule->nrname_handle );\n            goto failed;\n        }\n        FarSetOwner16( pModule->dlls_to_init, hModule );\n    }\n    else pModule->dlls_to_init = 0;\n\n    NE_RegisterModule( pModule );\n    return hModule;\n\nfailed:\n    GlobalFree16( hModule );\n    return ERROR_BAD_FORMAT;\n}\n\n\n/***********************************************************************\n *           NE_LoadDLLs\n *\n * Load all DLLs implicitly linked to a module.\n */\nWINUSERAPI\nint\nWINAPI\nMessageBoxA(\n_In_opt_ HWND hWnd,\n_In_opt_ LPCSTR lpText,\n_In_opt_ LPCSTR lpCaption,\n_In_ UINT uType);\nstatic BOOL NE_LoadDLLs( NE_MODULE *pModule )\n{\n    int i;\n    WORD *pModRef = (WORD *)((char *)pModule + pModule->ne_modtab);\n    WORD *pDLLs = GlobalLock16( pModule->dlls_to_init );\n\n    for (i = 0; i < pModule->ne_cmod; i++, pModRef++)\n    {\n        char buffer[260], *p;\n        BYTE *pstr = (BYTE *)pModule + pModule->ne_imptab + *pModRef;\n        memcpy( buffer, pstr + 1, *pstr );\n        *(buffer + *pstr) = 0; /* terminate it */\n\n        TRACE(\"Loading '%s'\\n\", buffer );\n        if (!(*pModRef = GetModuleHandle16( buffer )))\n        {\n            /* If the DLL is not loaded yet, load it and store */\n            /* its handle in the list of DLLs to initialize.   */\n            HMODULE16 hDLL = 0;\n            BOOL without_ext = FALSE;\n\n            /* Append .DLL (Windows >= 3.00) or .EXE (Windows < 3.00) to name if no extension present */\n            if (!(p = strrchr(buffer, '.')) || strchr(p, '/') || strchr(p, '\\\\'))\n            {\n                LPSTR buf = buffer + strlen(buffer);\n                without_ext = TRUE;\n                hDLL = MODULE_LoadModule16(buffer, TRUE, TRUE, NULL);\n                if (hDLL < 32)\n                {\n                    HMODULE16 exe;\n                    buf[0] = 0;\n                    strcat(buffer, \".EXE\");\n                    exe = MODULE_LoadModule16(buffer, TRUE, TRUE, NULL);\n                    if (exe >= 32)\n                    {\n                        hDLL = exe;\n                    }\n                    else\n                    {\n                        buf[0] = 0;\n                        strcat(buffer, \".DLL\");\n                    }\n                }\n            }\n            else\n            {\n                hDLL = MODULE_LoadModule16(buffer, TRUE, TRUE, NULL);\n            }\n\n            if (hDLL < 32)\n            {\n                /* FIXME: cleanup what was done */\n\t\t\t\tchar msg[256];\n\t\t\t\tif (strlen(\"Could not load '' required by '', error=\") + 10 + 1 + strlen(buffer) + *((BYTE*)pModule + pModule->ne_restab) < 256)\n\t\t\t\t{\n\t\t\t\t\tsprintf(msg, \"Could not load '%s' required by '%.*s', error=%d\\n\",\n\t\t\t\t\t\tbuffer, *((BYTE*)pModule + pModule->ne_restab),\n\t\t\t\t\t\t(char *)pModule + pModule->ne_restab + 1, hDLL);\n\t\t\t\t\tMessageBoxA(NULL, msg, NULL, 0);\n\t\t\t\t}\n\t\t\t\tMESSAGE(\"Could not load '%s' required by '%.*s', error=%d\\n\",\n                     buffer, *((BYTE*)pModule + pModule->ne_restab),\n                     (char *)pModule + pModule->ne_restab + 1, hDLL );\n                return FALSE;\n            }\n            *pModRef = GetExePtr( hDLL );\n            *pDLLs++ = *pModRef;\n        }\n        else  /* Increment the reference count of the DLL */\n        {\n            NE_MODULE *pOldDLL = NE_GetPtr( *pModRef );\n            if (pOldDLL) pOldDLL->count++;\n        }\n    }\n    return TRUE;\n}\n\n\n/**********************************************************************\n *\t    NE_DoLoadModule\n *\n * Load first instance of NE module from file.\n *\n * pModule must point to a module structure prepared by build_module.\n * This routine must never be called twice on a module.\n */\nstatic HINSTANCE16 NE_DoLoadModule( NE_MODULE *pModule )\n{\n    /* Allocate the segments for this module */\n\n    if (!NE_CreateAllSegments( pModule ))\n        return ERROR_NOT_ENOUGH_MEMORY; /* 8 */\n\n    /* Load the referenced DLLs */\n\n    if (!NE_LoadDLLs( pModule ))\n        return ERROR_FILE_NOT_FOUND; /* 2 */\n\n    /* Load the segments */\n\n    NE_LoadAllSegments( pModule );\n\n    /* Make sure the usage count is 1 on the first loading of  */\n    /* the module, even if it contains circular DLL references */\n\n    pModule->count = 1;\n\n    return NE_GetInstance( pModule );\n}\n\n/**********************************************************************\n *\t    NE_LoadModule\n *\n * Load first instance of NE module. (Note: caller is responsible for\n * ensuring the module isn't already loaded!)\n *\n * If the module turns out to be an executable module, only a\n * handle to a module stub is returned; this needs to be initialized\n * by calling NE_DoLoadModule later, in the context of the newly\n * created process.\n *\n * If lib_only is TRUE, however, the module is perforce treated\n * like a DLL module, even if it is an executable module.\n *\n */\nstatic HINSTANCE16 NE_LoadModule( LPCSTR name, BOOL lib_only )\n{\n    NE_MODULE *pModule;\n    HMODULE16 hModule;\n    HINSTANCE16 hInstance;\n    HFILE16 hFile;\n    OFSTRUCT ofs;\n    HANDLE mapping;\n    void *ptr;\n    MEMORY_BASIC_INFORMATION info;\n\n    /* Open file */\n    if ((hFile = OpenFile16( name, &ofs, OF_READ|OF_SHARE_DENY_WRITE )) == HFILE_ERROR16)\n        return ERROR_FILE_NOT_FOUND;\n\n    mapping = CreateFileMappingW( DosFileHandleToWin32Handle(hFile), NULL, PAGE_WRITECOPY, 0, 0, NULL );\n    _lclose16( hFile );\n    if (!mapping) return ERROR_BAD_FORMAT;\n\n    ptr = MapViewOfFile( mapping, FILE_MAP_COPY, 0, 0, 0 );\n    CloseHandle( mapping );\n    if (!ptr) return ERROR_BAD_FORMAT;\n\n    VirtualQuery( ptr, &info, sizeof(info) );\n    hModule = build_module( ptr, info.RegionSize, ofs.szPathName );\n\n    if (hModule < 32)\n    {\n        UnmapViewOfFile( ptr );\n        return hModule;\n    }\n\n    SNOOP16_RegisterDLL( hModule, ofs.szPathName );\n    NE_InitResourceHandler( hModule );\n\n    pModule = NE_GetPtr( hModule );\n\n    if ( !lib_only && !( pModule->ne_flags & NE_FFLAGS_LIBMODULE ) )\n        return hModule;\n\n    hInstance = NE_DoLoadModule( pModule );\n    if ( hInstance < 32 )\n    {\n        /* cleanup ... */\n        NE_FreeModule( hModule, 0, 0 );\n    }\n\n    return hInstance;\n}\n\n\n/***********************************************************************\n *           NE_DoLoadBuiltinModule\n *\n * Load a built-in Win16 module. Helper function for NE_LoadBuiltinModule.\n */\nstatic HMODULE16 NE_DoLoadBuiltinModule( const IMAGE_DOS_HEADER *mz_header, const char *file_name,\n                                         HMODULE owner32 )\n{\n    NE_MODULE *pModule;\n    HMODULE16 hModule;\n    HINSTANCE16 hInstance;\n    SIZE_T mapping_size = ~0UL;  /* assume builtins don't contain invalid offsets... */\n    char abs_file_name[MAX_PATH];\n\n    if (strlen(file_name) < 2 || file_name[1] != ':')\n    {\n        char sys_dir[OFS_MAXPATHNAME];\n        GetSystemDirectory16(sys_dir, OFS_MAXPATHNAME);\n        PathCombineA(abs_file_name, sys_dir, file_name);\n        if (!*PathFindExtensionA(abs_file_name))\n            PathAddExtensionA(abs_file_name, \".DLL\");\n        strupr(abs_file_name);\n        if (PathFileExistsA(abs_file_name))\n        {\n            file_name = abs_file_name;\n        }\n    }\n    hModule = build_module( mz_header, mapping_size, file_name );\n    if (hModule < 32) return hModule;\n    pModule = GlobalLock16( hModule );\n    pModule->ne_flags |= NE_FFLAGS_BUILTIN;\n    pModule->owner32 = owner32;\n\n    /* fake the expected version the module should have according to the current Windows version */\n    pModule->ne_expver = MAKEWORD( NtCurrentTeb()->Peb->OSMajorVersion,\n                                   NtCurrentTeb()->Peb->OSMinorVersion );\n\n    hInstance = NE_DoLoadModule( pModule );\n    if (hInstance < 32) NE_FreeModule( hModule, 0, 0 );\n\n    NE_InitResourceHandler( hModule );\n\n    if (pModule->ne_heap)\n    {\n        SEGTABLEENTRY *pSeg = NE_SEG_TABLE( pModule ) + pModule->ne_autodata - 1;\n        unsigned int size = pSeg->minsize + pModule->ne_heap;\n        if (size > 0xfffe) size = 0xfffe;\n        LocalInit16( GlobalHandleToSel16(pSeg->hSeg), pSeg->minsize, size );\n    }\n\n    patch_code_segment( pModule );\n\n    return hInstance;\n}\n\n// list of programs that should load native rather than built in dlls\nstatic BOOL builtin_override(const char *lib)\n{\n    const char list[][2][10] = {{\"SCW\", \"TYPELIB\"}};\n    char name[10] = {0};\n    HANDLE task = GetCurrentTask();\n    if (!task) return FALSE;\n    GetModuleName16(task, &name, sizeof(name));\n    for (int i = 0; i < ARRAY_SIZE(list); i++)\n    {\n        if (!strcmp(name, list[i][0]) && !strcmp(lib, list[i][1]))\n            return TRUE;\n    }\n    return FALSE;\n}\n\nLPCSTR krnl386_search_executable_file(LPCSTR lpFile, LPSTR buf, SIZE_T size, BOOL search_builtin);\n/**********************************************************************\n *\t    MODULE_LoadModule16\n *\n * Load a NE module in the order of the loadorder specification.\n * The caller is responsible that the module is not loaded already.\n *\n */\nstatic HINSTANCE16 MODULE_LoadModule16( LPCSTR libname, BOOL implicit, BOOL lib_only, SEGPTR cmdline )\n{\n    HINSTANCE16 hinst = 2;\n    HMODULE16 hModule;\n    HMODULE mod32 = 0;\n    NE_MODULE *pModule;\n    const IMAGE_DOS_HEADER *descr = NULL;\n    const char *file_name = NULL;\n    char dllname[32];\n    const char *basename, *main_module, *p;\n\n    /* strip path information */\n\n    basename = libname;\n    if (basename[0] && basename[1] == ':') basename += 2;  /* strip drive specification */\n    if ((p = strrchr( basename, '\\\\' ))) basename = p + 1;\n    if ((p = strrchr( basename, '/' ))) basename = p + 1;\n\n    if (strlen(basename) < sizeof(dllname)-6)\n    {\n        DWORD count;\n        char *q;\n        char path32[MAX_PATH];\n\n\n        strcpy( dllname, basename );\n        q = strrchr( dllname, '.' );\n        if (!q) strcat( dllname, \".dll\" );\n        for (q = dllname; *q; q++) if (*q >= 'A' && *q <= 'Z') *q += 32;\n\n        strcpy( q, \"16\" );\n        if (krnl386_search_executable_file(dllname, path32, sizeof(path32), TRUE) != dllname)\n        {\n            ReleaseThunkLock(&count);\n            mod32 = LoadLibraryA( dllname );\n        }\n        if (mod32 && !builtin_override(basename))\n        {\n\t\t\tif (!(descr = (void *)GetProcAddress(mod32, \"_wine_spec_dos_header\")) && !(descr = (void *)GetProcAddress(mod32, \"__wine_spec_dos_header\")))\n            {\n                WARN( \"loaded %s but does not contain a 16-bit module\\n\", debugstr_a(dllname) );\n                FreeLibrary( mod32 );\n            }\n            else\n            {\n                TRACE( \"found %s with embedded 16-bit module\\n\", debugstr_a(dllname) );\n                file_name = basename;\n\n                /* if module has a 32-bit owner, match the load order of the owner */\n                if ((main_module = (void *)GetProcAddress( mod32, \"__wine_spec_main_module\" )))\n                {\n                    LDR_MODULE *ldr;\n                    HMODULE main_owner = LoadLibraryA( main_module );\n\n                    if (!main_owner)\n                    {\n                        WARN( \"couldn't load owner %s for 16-bit dll %s\\n\", main_module, dllname );\n                        FreeLibrary( mod32 );\n                        RestoreThunkLock( count );\n                        return ERROR_FILE_NOT_FOUND;\n                    }\n                    /* check if module was loaded native */\n                    if (LdrFindEntryForAddress( main_owner, &ldr ) || !(ldr->Flags & LDR_WINE_INTERNAL))\n                    {\n                        FreeLibrary( mod32 );\n                        descr = NULL;\n                    }\n                    FreeLibrary( main_owner );\n                }\n            }\n            RestoreThunkLock(count);\n        }\n\n        /* loading the 32-bit library can have the side effect of loading the module */\n        /* if so, simply incr the ref count and return the module */\n        if (descr && (hModule = GetModuleHandle16( libname )))\n        {\n            TRACE( \"module %s already loaded by owner\\n\", libname );\n            pModule = NE_GetPtr( hModule );\n            if (pModule) pModule->count++;\n            FreeLibrary( mod32 );\n            return hModule;\n        }\n    }\n\n    if (descr)\n    {\n        TRACE(\"Trying built-in '%s'\\n\", libname);\n        hinst = NE_DoLoadBuiltinModule( descr, file_name, mod32 );\n        if (hinst > 32) TRACE_(loaddll)(\"Loaded module %s : builtin\\n\", debugstr_a(file_name));\n        else FreeLibrary( mod32 );\n    }\n    else\n    {\n        char *q;\n        strcpy( dllname, basename );\n        q = strrchr( dllname, '.' );\n        if (!q) strcat( dllname, (GetExeVersion16() >= 0x0300) ? \".dll\" : \".exe\" );\n        TRACE(\"Trying native dll '%s'\\n\", !q ? dllname : libname);\n        hinst = NE_LoadModule(!q ? dllname : libname, lib_only);\n        if (hinst > 32) TRACE_(loaddll)(\"Loaded module %s : native\\n\", debugstr_a(libname));\n    }\n\n    if (hinst > 32 && !implicit)\n    {\n        hModule = GetModuleHandle16(libname);\n        if(!hModule)\n        {\n            ERR(\"Serious trouble. Just loaded module '%s' (hinst=0x%04x), but can't get module handle. Filename too long ?\\n\",\n                libname, hinst);\n            return ERROR_INVALID_HANDLE;\n        }\n\n        pModule = NE_GetPtr(hModule);\n        if(!pModule)\n        {\n            ERR(\"Serious trouble. Just loaded module '%s' (hinst=0x%04x), but can't get NE_MODULE pointer\\n\",\n                libname, hinst);\n            return ERROR_INVALID_HANDLE;\n        }\n\n        TRACE(\"Loaded module '%s' at 0x%04x.\\n\", libname, hinst);\n\n        /*\n         * Call initialization routines for all loaded DLLs. Note that\n         * when we load implicitly linked DLLs this will be done by InitTask().\n         */\n        if(pModule->ne_flags & NE_FFLAGS_LIBMODULE)\n        {\n            NE_InitializeDLLs(hModule, cmdline);\n            NE_DllProcessAttach(hModule);\n        }\n        else DOSMEM_InitDosMemory();  /* we will be running a 16-bit task, setup DOS memory */\n    }\n    return hinst;       /* The last error that occurred */\n}\n\n\n/**********************************************************************\n *          NE_CreateThread\n *\n * Create the thread for a 16-bit module.\n */\nstatic HINSTANCE16 NE_CreateThread( NE_MODULE *pModule, WORD cmdShow, LPCSTR cmdline, LPCSTR curdir )\n{\n    HANDLE hThread;\n    TDB *pTask;\n    HTASK16 hTask;\n    HINSTANCE16 instance = 0;\n\n    if (!(hTask = TASK_SpawnTask( pModule, cmdShow, cmdline + 1, *cmdline, &hThread, curdir )))\n        return 0;\n\n    /* Post event to start the task */\n    PostEvent16( hTask );\n\n    /* Wait until we get the instance handle */\n    do\n    {\n        DirectedYield16( hTask );\n        if (!IsTask16( hTask ))  /* thread has died */\n        {\n            DWORD exit_code, count;\n            ReleaseThunkLock(&count);\n            while (1)\n            {\n                GetExitCodeThread( hThread, &exit_code );\n                if (exit_code != STILL_ACTIVE)\n                    break;\n                WaitForSingleObject( hThread, 500 );\n            }\n            RestoreThunkLock(count);\n            CloseHandle( hThread );\n            return hTask; // return something that looks like an hinstance\n        }\n        if (!(pTask = GlobalLock16( hTask ))) break;\n        instance = pTask->hInstance;\n        WIN32_GlobalUnlock16( hTask );\n    } while (!instance);\n\n    CloseHandle( hThread );\n    return instance;\n}\n\n\n\ntypedef struct tagLOADPARMS32 {\n    LPSTR lpEnvAddress;\n    LPSTR lpCmdLine;\n    LPSTR lpCmdShow;\n    DWORD dwReserved;\n} LOADPARMS32;\n/**********************************************************************\n*\t    LoadModule    (KERNEL32.@)\n*/\nHANDLE WINAPI LoadModule_wine_implementation(LPCSTR name, LPVOID paramBlock, HANDLE *result)\n{\n    LOADPARMS32 *params = paramBlock;\n    PROCESS_INFORMATION info;\n    STARTUPINFOA startup;\n    DWORD ret;\n    LPSTR cmdline, p;\n    char filename[MAX_PATH];\n    BYTE len;\n    DWORD error;\n\n    if (!name) return ERROR_FILE_NOT_FOUND;\n\n    if (!SearchPathA(NULL, name, \".exe\", sizeof(filename), filename, NULL) &&\n        !SearchPathA(NULL, name, NULL, sizeof(filename), filename, NULL))\n        return GetLastError();\n\n    len = (BYTE)params->lpCmdLine[0];\n    if (!(cmdline = HeapAlloc(GetProcessHeap(), 0, strlen(filename) + len + 4)))\n        return ERROR_NOT_ENOUGH_MEMORY;\n\n    sprintf(cmdline, \"\\\"%s\\\"\", filename);\n    p = cmdline + strlen(cmdline);\n    *p++ = ' ';\n    memcpy(p, params->lpCmdLine + 1, len);\n    p[len] = 0;\n\n    memset(&startup, 0, sizeof(startup));\n    startup.cb = sizeof(startup);\n    if (params->lpCmdShow)\n    {\n        startup.dwFlags = STARTF_USESHOWWINDOW;\n        startup.wShowWindow = ((WORD *)params->lpCmdShow)[1];\n    }\n\n    if (CreateProcessA(filename, cmdline, NULL, NULL, FALSE, 0,\n        params->lpEnvAddress, NULL, &startup, &info))\n    {\n        /* Give 30 seconds to the app to come up */\n        if (WaitForInputIdle(info.hProcess, 30000) == WAIT_FAILED)\n            WARN(\"WaitForInputIdle failed: Error %d\\n\", GetLastError());\n        /* Close off the handles */\n        CloseHandle(info.hThread);\n        *result = info.hProcess;\n        ret = 33;\n    }\n    else if ((error = GetLastError()) >= 32)\n    {\n        FIXME(\"Strange error set by CreateProcess: %u\\n\", error);\n        ret = 11;\n        /**/\n#ifndef ERROR_ELEVATION_REQUIRED\n#define ERROR_ELEVATION_REQUIRED 740L\n#endif\n        if (error == ERROR_ELEVATION_REQUIRED)\n        {\n            char exename[MAX_PATH];\n            int len = krnl386_get_config_string(\"otvdm\", \"ElevationShim\", \"\", exename, sizeof(exename));\n            SHELLEXECUTEINFOA sei = { 0 };\n            sei.cbSize = sizeof(sei);\n            sei.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_CLASSNAME | SEE_MASK_WAITFORINPUTIDLE;\n            sei.lpFile = len ? exename : filename;\n            sei.lpParameters = len ? cmdline : p;\n            sei.nShow = startup.dwFlags ? startup.wShowWindow : SW_NORMAL;\n            sei.lpVerb = \"runas\";\n            sei.lpClass = \"exefile\";\n            if (ShellExecuteExA(&sei))\n                *result = sei.hProcess;\n            else \n                ERR(\"ShellExecute Failed err = %u, %d\\n\", GetLastError(), sei.hInstApp);\n            ret = sei.hInstApp;\n        }\n        /**/\n    }\n\n    HeapFree(GetProcessHeap(), 0, cmdline);\n    return ret;\n}\nLPCSTR RedirectSystemDir(LPCSTR path, LPSTR to, size_t max_len);\n/**********************************************************************\n *          LoadModule      (KERNEL.45)\n */\nHINSTANCE16 WINAPI LoadModule16( LPCSTR name, LPVOID paramBlock )\n{\n    BOOL lib_only = !paramBlock || (paramBlock == (LPVOID)-1);\n    LOADPARAMS16 *params;\n    HMODULE16 hModule;\n    NE_MODULE *pModule;\n    LPSTR cmdline;\n    WORD cmdShow = 1; /* SW_SHOWNORMAL but we don't want to include winuser.h here */\n\n    if (name == NULL) return 0;\n\n    char buf[MAX_PATH];\n    name = RedirectSystemDir(name, buf, MAX_PATH);\n    TRACE(\"name %s, paramBlock %p\\n\", name, paramBlock);\n\n    /* Load module */\n\n    if ( (hModule = NE_GetModuleByFilename(name) ) != 0 )\n    {\n        /* Special case: second instance of an already loaded NE module */\n\n        if ( !( pModule = NE_GetPtr( hModule ) ) ) return ERROR_BAD_FORMAT;\n        if ( pModule->module32 ) return (HINSTANCE16)21;\n\n        /* Increment refcount */\n\n        TRACE(\"%04x count %d\\n\", hModule, (INT16)pModule->count);\n        pModule->count++;\n    }\n    else\n    {\n        /* Main case: load first instance of NE module */\n        params = paramBlock;\n        SEGPTR cmdline = IsBadReadPtr(params, 8) ? NULL : params->cmdLine;\n        if ((hModule = MODULE_LoadModule16(name, FALSE, lib_only, cmdline)) < 32)\n        {\n            if (hModule == 21/* win32 */)\n            {\n                LOADPARMS32 paramBlock32;\n                if (lib_only)\n                {\n                    return (HINSTANCE16)21;\n                }\n                paramBlock32.lpEnvAddress = GlobalLock16(params->hEnvironment);\n                DWORD showCmd32[2];\n                paramBlock32.lpCmdLine = MapSL(params->cmdLine);\n                paramBlock32.lpCmdShow = MapSL(params->showCmd);\n                paramBlock32.dwReserved = 0;\n                HANDLE hProcess = 0;\n                DWORD result = LoadModule_wine_implementation(name, &paramBlock32, &hProcess);/* win32 returns 33 */\n                WIN32_GlobalUnlock16(params->hEnvironment);\n                if (result < 32)\n                    return result;\n                char cmdlineBuf[_countof(\"WINOLDAP.MOD -WoAWoW32XXXXXXXX\")];\n                sprintf(cmdlineBuf, \"WINOLDAP.MOD -WoAWoW32%x\", (SIZE_T)hProcess);\n                return WinExec16(cmdlineBuf, 1);/* wow32 returns winoldap.mod hinstance */\n            }\n            return hModule;\n        }\n\n        if ( !(pModule = NE_GetPtr( hModule )) )\n            return ERROR_BAD_FORMAT;\n    }\n\n    /* If library module, we just retrieve the instance handle */\n\n    if ( ( pModule->ne_flags & NE_FFLAGS_LIBMODULE ) || lib_only )\n        return NE_GetInstance( pModule );\n\n    /*\n     *  At this point, we need to create a new process.\n     *\n     *  pModule points either to an already loaded module, whose refcount\n     *  has already been incremented (to avoid having the module vanish\n     *  in the meantime), or else to a stub module which contains only header\n     *  information.\n     */\n    params = paramBlock;\n    if (params->showCmd)\n        cmdShow = ((WORD *)MapSL( params->showCmd ))[1];\n    cmdline = MapSL( params->cmdLine );\n    LPCSTR curdir = NULL;\n    /* current directory */\n    if (params->hEnvironment == 0x0bef)\n    {\n        curdir = (LPCSTR)params->reserved;\n    }\n    return NE_CreateThread( pModule, cmdShow, cmdline, curdir);\n}\n\n\nBOOL WINAPI TOOLHELP_CallNotify(WORD wID, DWORD dwData)\n{\n    /* toolhelp.dll16 may be unloaded? */\n    HMODULE hmod = GetModuleHandleW(L\"toolhelp.dll16\");\n    BOOL(WINAPI*pTOOLHELP_CallNotify)(WORD wID, DWORD dwData) = hmod ? (BOOL(WINAPI*)(WORD wID, DWORD dwData))GetProcAddress(hmod, \"TOOLHELP_CallNotify\") : NULL;\n    if (pTOOLHELP_CallNotify)\n        return pTOOLHELP_CallNotify(wID, dwData);\n    return FALSE;\n}\n/**********************************************************************\n *          NE_StartTask\n *\n * Startup code for a new 16-bit task.\n */\nDWORD NE_StartTask(void)\n{\n    TDB *pTask = TASK_GetCurrent();\n    NE_MODULE *pModule = NE_GetPtr( pTask->hModule );\n    HINSTANCE16 hInstance, hPrevInstance;\n    SEGTABLEENTRY *pSegTable = NE_SEG_TABLE( pModule );\n    WORD sp;\n\n    if ( pModule->count > 0 )\n    {\n        /* Second instance of an already loaded NE module */\n        /* Note that the refcount was already incremented by the parent */\n\n        hPrevInstance = NE_GetInstance( pModule );\n\n        if ( pModule->ne_autodata )\n            if ( NE_CreateSegment( pModule, pModule->ne_autodata, 0 ) )\n                NE_LoadSegment( pModule, pModule->ne_autodata );\n\n        hInstance = NE_GetInstance( pModule );\n        TRACE(\"created second instance %04x[%d] of instance %04x.\\n\", hInstance, pModule->ne_autodata, hPrevInstance);\n\n    }\n    else\n    {\n        /* Load first instance of NE module */\n\n        pModule->ne_flags |= NE_FFLAGS_GUI;  /* FIXME: is this necessary? */\n        pModule->ne_flags |= NE_FFLAGS_MULTIPLEDATA;  /* Windows sets this flag. */\n\n        hInstance = NE_DoLoadModule( pModule );\n        hPrevInstance = 0;\n    }\n\n    if ( hInstance >= 32 )\n    {\n        CONTEXT context;\n\n        /* Enter instance handles into task struct */\n\n        pTask->hInstance = hInstance;\n        pTask->hPrevInstance = hPrevInstance;\n\n        /* Use DGROUP for 16-bit stack */\n\n        if (!(sp = OFFSETOF(pModule->ne_sssp)))\n            sp = pSegTable[SELECTOROF(pModule->ne_sssp)-1].minsize + pModule->ne_stack;\n        sp &= ~1;\n        sp += 4;\n        setWOW32Reserved((void *)MAKESEGPTR(GlobalHandleToSel16(hInstance), sp));\n\n        /* Registers at initialization must be:\n         * ax   zero\n         * bx   stack size in bytes\n         * cx   heap size in bytes\n         * si   previous app instance\n         * di   current app instance\n         * bp   zero\n         * es   selector to the PSP\n         * ds   dgroup of the application\n         * ss   stack selector\n         * sp   top of the stack\n         */\n        memset( &context, 0, sizeof(context) );\n        context.SegCs  = GlobalHandleToSel16(pSegTable[SELECTOROF(pModule->ne_csip) - 1].hSeg);\n        context.SegDs  = GlobalHandleToSel16(pTask->hInstance);\n        context.SegEs  = pTask->hPDB;\n        context.SegFs  = wine_get_fs();\n        context.SegGs  = wine_get_gs();\n        context.Eip    = OFFSETOF(pModule->ne_csip);\n        context.Ebx    = pModule->ne_stack;\n        context.Ecx    = pModule->ne_heap;\n        context.Edi    = pTask->hInstance;\n        context.Esi    = pTask->hPrevInstance;\n        TOOLHELP_CallNotify(NFY_STARTTASK, MAKESEGPTR(context.SegCs, context.Eip));\n\n        /* Now call 16-bit entry point */\n\n        TRACE(\"Starting main program: cs:ip=%04x:%04x ds=%04x ss:sp=%04x:%04x\\n\",\n              context.SegCs, context.Eip, context.SegDs,\n\t\t\t  SELECTOROF(getWOW32Reserved()),\n\t\t\t  OFFSETOF(getWOW32Reserved()));\n\n        WOWCallback16Ex( 0, WCB16_REGS, 0, NULL, (DWORD *)&context );\n        DOSVM_Exit( LOWORD(context.Eax) );\n    }\n    return hInstance;  /* error code */\n}\n\n/***********************************************************************\n *           LoadLibrary     (KERNEL.95)\n *           LoadLibrary16   (KERNEL32.35)\n */\nHINSTANCE16 WINAPI LoadLibrary16( LPCSTR libname )\n{\n    return LoadModule16(libname, (LPVOID)-1 );\n}\n\n\n/**********************************************************************\n *\t    MODULE_CallWEP\n *\n * Call a DLL's WEP, allowing it to shut down.\n * FIXME: we always pass the WEP WEP_FREE_DLL, never WEP_SYSTEM_EXIT\n */\nstatic BOOL16 MODULE_CallWEP( HMODULE16 hModule )\n{\n    BOOL16 ret;\n    FARPROC16 WEP = GetProcAddress16( hModule, \"WEP\" );\n    if (!WEP) return FALSE;\n\n    __TRY\n    {\n        WORD args[1];\n        DWORD dwRet;\n\n        args[0] = WEP_FREE_DLL;\n        WOWCallback16Ex( (DWORD)WEP, WCB16_PASCAL, sizeof(args), args, &dwRet );\n        ret = LOWORD(dwRet);\n    }\n    __EXCEPT_PAGE_FAULT\n    {\n        WARN(\"Page fault\\n\");\n        ret = 0;\n    }\n    __ENDTRY\n\n    return ret;\n}\n\n\n/**********************************************************************\n *\t    NE_FreeModule\n *\n * Implementation of FreeModule16().\n */\nstatic BOOL16 NE_FreeModule( HMODULE16 hModule, BOOL call_wep, BOOL cleanup )\n{\n    HMODULE16 *hPrevModule;\n    NE_MODULE *pModule;\n    HMODULE16 *pModRef;\n    int i;\n\n    if (!(pModule = NE_GetPtr( hModule ))) return FALSE;\n    hModule = pModule->self;\n\n    HMODULE owner32 = pModule->owner32;\n\n    TRACE(\"%04x count %d\\n\", hModule, (INT16)pModule->count );\n\n    if (((INT16)(--pModule->count)) > 0 ) return TRUE;\n    else pModule->count = 0;\n\n    /* Free the objects owned by the DLL module */\n    if (cleanup)\n    {\n        if (pModule->ne_flags & NE_FFLAGS_LIBMODULE)\n            TOOLHELP_CallNotify(NFY_DELMODULE, hModule);\n        NE_CallUserSignalProc( hModule, USIG16_DLL_UNLOAD, 0, 0, 0 );\n    }\n\n    if (call_wep && !(pModule->ne_flags & NE_FFLAGS_WIN32))\n    {\n        if (pModule->ne_flags & NE_FFLAGS_LIBMODULE)\n        {\n            if (pModule->ne_cseg != 0)\n            {\n                MODULE_CallWEP( hModule );\n            }\n        }\n        else\n        {\n            call_wep = FALSE;  /* We are freeing a task -> no more WEPs */\n        }\n    }\n\n    TRACE_(loaddll)(\"Unloaded module %s : %s\\n\", debugstr_a(NE_MODULE_NAME(pModule)),\n                    (pModule->ne_flags & NE_FFLAGS_BUILTIN) ? \"builtin\" : \"native\");\n\n    /* Clear magic number just in case */\n\n    pModule->ne_magic = pModule->self = 0;\n    if (!owner32 && pModule->mapping) UnmapViewOfFile( pModule->mapping );\n\n      /* Remove it from the linked list */\n\n    hPrevModule = &hFirstModule;\n    while (*hPrevModule && (*hPrevModule != hModule))\n    {\n        hPrevModule = &(NE_GetPtr( *hPrevModule ))->next;\n    }\n    if (*hPrevModule) *hPrevModule = pModule->next;\n\n    /* Free the referenced modules */\n\n    pModRef = (HMODULE16*)((char *)pModule + pModule->ne_modtab);\n    for (i = 0; i < pModule->ne_cmod; i++, pModRef++)\n    {\n        NE_FreeModule( *pModRef, call_wep, cleanup );\n    }\n\n    /* Free the module storage */\n\n    GlobalFreeAll16( hModule );\n    \n    if (owner32)\n    {\n        DWORD count;\n        ReleaseThunkLock(&count);\n        FreeLibrary(owner32);\n        RestoreThunkLock(count);\n    }       \n    return TRUE;\n}\n\n\n/**********************************************************************\n *\t    FreeModule    (KERNEL.46)\n */\nBOOL16 WINAPI FreeModule16( HMODULE16 hModule )\n{\n    return NE_FreeModule( hModule, TRUE, TRUE );\n}\n\nDWORD WINAPI WIN16_FreeLibrary16(HINSTANCE16 handle)\n{\n    FreeLibrary16(handle);\n    return MAKELONG(0, CURRENT_STACK16->cs);\n}\n\n/***********************************************************************\n *           FreeLibrary     (KERNEL.96)\n *           FreeLibrary16   (KERNEL32.36)\n */\nvoid WINAPI FreeLibrary16( HINSTANCE16 handle )\n{\n    TRACE(\"%04x\\n\", handle );\n    FreeModule16( handle );\n}\n\n\n/***********************************************************************\n *          GetModuleHandle16 (KERNEL32.@)\n */\nHMODULE16 WINAPI GetModuleHandle16( LPCSTR name )\n{\n    HMODULE16\thModule;\n    LPSTR\ts;\n    BYTE\tlen, *name_table;\n    char\ttmpstr[MAX_PATH];\n    NE_MODULE *pModule;\n\n    TRACE(\"(%s)\\n\", name);\n\n    if (!HIWORD(name)) return GetExePtr(LOWORD(name));\n\n    len = strlen(name);\n    if (!len) return 0;\n\n    lstrcpynA(tmpstr, name, sizeof(tmpstr));\n\n    /* If 'name' matches exactly the module name of a module:\n     * Return its handle.\n     */\n    for (hModule = hFirstModule; hModule ; hModule = pModule->next)\n    {\n\tpModule = NE_GetPtr( hModule );\n        if (!pModule) break;\n        if (pModule->ne_flags & NE_FFLAGS_WIN32) continue;\n\n        name_table = (BYTE *)pModule + pModule->ne_restab;\n        if ((*name_table == len) && !strncmp(name, (char*) name_table+1, len))\n            return hModule;\n    }\n\n    /* If uppercased 'name' matches exactly the module name of a module:\n     * Return its handle\n     */\n    for (s = tmpstr; *s; s++) *s = RtlUpperChar(*s);\n\n    for (hModule = hFirstModule; hModule ; hModule = pModule->next)\n    {\n\tpModule = NE_GetPtr( hModule );\n        if (!pModule) break;\n        if (pModule->ne_flags & NE_FFLAGS_WIN32) continue;\n\n        name_table = (BYTE *)pModule + pModule->ne_restab;\n        if ((*name_table == len) && !strncmp(tmpstr, (const char*)name_table+1, len))\n            return hModule;\n    }\n\n    /* If the base filename of 'name' matches the base filename of the module\n     * filename of some module (case-insensitive compare):\n     * Return its handle.\n     */\n\n    /* basename: search backwards in passed name to \\ / or : */\n    s = tmpstr + strlen(tmpstr);\n    while (s > tmpstr)\n    {\n        if (s[-1]=='/' || s[-1]=='\\\\' || s[-1]==':')\n\t\tbreak;\n\ts--;\n    }\n\n    /* search this in loaded filename list */\n    for (hModule = hFirstModule; hModule ; hModule = pModule->next)\n    {\n        char\t\t*loadedfn;\n\tOFSTRUCT\t*ofs;\n\n\tpModule = NE_GetPtr( hModule );\n        if (!pModule) break;\n\tif (!pModule->fileinfo) continue;\n        if (pModule->ne_flags & NE_FFLAGS_WIN32) continue;\n\n        ofs = (OFSTRUCT*)((BYTE *)pModule + pModule->fileinfo);\n\tloadedfn = ((char*)ofs->szPathName) + strlen(ofs->szPathName);\n\t/* basename: search backwards in pathname to \\ / or : */\n\twhile (loadedfn > (char*)ofs->szPathName)\n\t{\n\t    if (loadedfn[-1]=='/' || loadedfn[-1]=='\\\\' || loadedfn[-1]==':')\n\t\t    break;\n\t    loadedfn--;\n\t}\n\t/* case insensitive compare ... */\n\tif (!NE_strcasecmp(loadedfn, s))\n\t    return hModule;\n    }\n    return 0;\n}\n\n\n/**********************************************************************\n *\t    GetModuleName    (KERNEL.27)\n */\nBOOL16 WINAPI GetModuleName16( HINSTANCE16 hinst, LPSTR buf, INT16 count )\n{\n    NE_MODULE *pModule;\n    BYTE *p;\n\n    if (!(pModule = NE_GetPtr( hinst ))) return FALSE;\n    p = (BYTE *)pModule + pModule->ne_restab;\n    if (count > *p) count = *p + 1;\n    if (count > 0)\n    {\n        memcpy( buf, p + 1, count - 1 );\n        buf[count-1] = '\\0';\n    }\n    return TRUE;\n}\n\n\n/**********************************************************************\n *\t    GetModuleFileName      (KERNEL.49)\n *\n * See also: GetModuleFileNameA\n *\n * This function returns short paths when the modules version field is < 4.0).\n *\n * Even if invoked by second instance of a program,\n * it still returns path of first one.\n */\nINT16 WINAPI GetModuleFileName16( HINSTANCE16 hModule, LPSTR lpFileName,\n                                  INT16 nSize )\n{\n    NE_MODULE *pModule;\n\n    /* Win95 does not query hModule if set to 0 !\n     * Is this wrong or maybe Win3.1 only ? */\n    if (!hModule) hModule = GetCurrentTask();\n\n    if (!(pModule = NE_GetPtr( hModule ))) return 0;\n    lstrcpynA( lpFileName, NE_MODULE_NAME(pModule), nSize );\n    if (pModule->ne_expver < 0x400)\n        GetShortPathNameA(NE_MODULE_NAME(pModule), lpFileName, nSize);\n    TRACE(\"%04x -> '%s'\\n\", hModule, lpFileName );\n    return strlen(lpFileName);\n}\n\n\n/**********************************************************************\n *\t    GetModuleUsage    (KERNEL.48)\n */\nINT16 WINAPI GetModuleUsage16( HINSTANCE16 hModule )\n{\n    NE_MODULE *pModule = NE_GetPtr( hModule );\n    return pModule ? pModule->count : 0;\n}\n\n\n/**********************************************************************\n *\t    GetExpWinVer    (KERNEL.167)\n */\nWORD WINAPI GetExpWinVer16( HMODULE16 hModule )\n{\n    NE_MODULE *pModule = NE_GetPtr( hModule );\n    if ( !pModule ) return 0;\n    return pModule->ne_expver;\n}\n\nBYTE get_aflags( HMODULE16 hModule )\n{\n    NE_MODULE *pModule = NE_GetPtr( hModule );\n    if ( !pModule ) return 0;\n    return pModule->ne_flagsothers;\n}  \n\n/***********************************************************************\n *           WinExec     (KERNEL.166)\n */\nHINSTANCE16 WINAPI WinExec16(LPCSTR lpCmdLine, UINT16 nCmdShow)\n{\n    LPCSTR p, args = NULL;\n    LPCSTR name_beg, name_end;\n    LPSTR name, cmdline;\n    int arglen;\n    HINSTANCE16 ret;\n    char buffer[MAX_PATH];\n    LOADPARAMS16 params;\n    WORD showCmd[2];\n\n    if (*lpCmdLine == '\"') /* has to be only one and only at beginning ! */\n    {\n        name_beg = lpCmdLine + 1;\n        p = strchr(lpCmdLine + 1, '\"');\n        if (p)\n        {\n            name_end = p;\n            args = strchr(p, ' ');\n        }\n        else /* yes, even valid with trailing '\"' missing */\n            name_end = lpCmdLine + strlen(lpCmdLine);\n    }\n    else\n    {\n        name_beg = lpCmdLine;\n        args = strchr(lpCmdLine, ' ');\n        name_end = args ? args : lpCmdLine + strlen(lpCmdLine);\n    }\n\n    if ((name_beg == lpCmdLine) && (!args))\n    { /* just use the original cmdline string as file name */\n        name = (LPSTR)lpCmdLine;\n    }\n    else\n    {\n        if (!(name = HeapAlloc(GetProcessHeap(), 0, name_end - name_beg + 1)))\n            return ERROR_NOT_ENOUGH_MEMORY;\n        memcpy(name, name_beg, name_end - name_beg);\n        name[name_end - name_beg] = '\\0';\n    }\n\n    if (args)\n    {\n        BOOL done = FALSE;\n        args++;\n        // workaround for msvc 1.5\n        if (StrStrIA(name, \"wintee32\"))\n        {\n            char fixargs[128];\n            char *harg = strstr(args, \"-h\");\n            if (harg)\n            {\n                int pos;\n                HWND16 hwnd;\n                sscanf(harg, \"-h%hx%n\", &hwnd, &pos);\n                memcpy(fixargs, args, (int)(harg - args));\n                sprintf(fixargs + (int)(harg - args), \"-h%x%s\", HWND_32(hwnd), args + pos);\n                arglen = strlen(fixargs);\n                cmdline = HeapAlloc(GetProcessHeap(), 0, 2 + arglen);\n                strcpy(cmdline + 1, fixargs);\n                done = TRUE;\n            }\n        }\n        if (!done)\n        {\n            arglen = strlen(args);\n            cmdline = HeapAlloc(GetProcessHeap(), 0, 2 + arglen);\n            strcpy(cmdline + 1, args);\n        }\n        cmdline[0] = (BYTE)arglen;\n    }\n    else\n    {\n        cmdline = HeapAlloc(GetProcessHeap(), 0, 2);\n        cmdline[0] = cmdline[1] = 0;\n    }\n\n    TRACE(\"name: '%s', cmdline: '%.*s'\\n\", name, cmdline[0], &cmdline[1]);\n\n    showCmd[0] = 2;\n    showCmd[1] = nCmdShow;\n\n    params.hEnvironment = 0;\n    params.cmdLine = MapLS(cmdline);\n    params.showCmd = MapLS(showCmd);\n    params.reserved = 0;\n\n    char *path = get_search_path();\n    char builtinbuffer[MAX_PATH];\n    //first, search built-in modules\n    BOOL enough_buffer = FALSE;\n    if (strlen(name) + 7 < MAX_PATH)\n    {\n        enough_buffer = TRUE;\n    }\n    if (enough_buffer)\n    {\n        strcpy(builtinbuffer, name);\n        char *q = strrchr(builtinbuffer, '.');\n        if (!q) strcat(builtinbuffer, \".exe\");\n        for (q = builtinbuffer; *q; q++) if (*q >= 'A' && *q <= 'Z') *q += 32;\n\n        strcpy(q, \"16\");\n    }\n    if (enough_buffer && SearchPathA(path, builtinbuffer, \"\", sizeof(buffer), buffer, NULL))\n    {\n        //remove 16\n        buffer[strlen(buffer) - 2] = 0;\n        ret = LoadModule16(buffer, &params);\n    }\n    else if (SearchPathA( path, name, \".exe\", sizeof(buffer), buffer, NULL ))\n    {\n        ret = LoadModule16( buffer, &params );\n    }\n    else if (!contains_path( name ))  /* try 16-bit builtin */\n    {\n        lstrcpynA( buffer, name, sizeof(buffer) );\n        if (strlen( buffer ) < sizeof(buffer) - 4 && !strchr( buffer, '.' )) strcat( buffer, \".exe\" );\n        ret = LoadModule16( buffer, &params );\n        if ((ret == ERROR_FILE_NOT_FOUND) && SearchPathA( NULL, name, \".exe\", sizeof(buffer), buffer, NULL ))\n            ret = 21;  // check the real path for a host 32bit or 64bit exe\n    }\n    else ret = ERROR_FILE_NOT_FOUND;\n\n    HeapFree(GetProcessHeap(), 0, path);\n    UnMapLS( params.cmdLine );\n    UnMapLS( params.showCmd );\n\n    HeapFree( GetProcessHeap(), 0, cmdline );\n    if (name != lpCmdLine) HeapFree( GetProcessHeap(), 0, name );\n\n    if (ret == 21 || ret == ERROR_BAD_FORMAT)  /* 32-bit module or unknown executable*/\n    {\n        LOADPARAMS16 params;\n        WORD showCmd[2];\n        showCmd[0] = 2;\n        showCmd[1] = nCmdShow;\n\n        arglen = strlen( lpCmdLine );\n        cmdline = HeapAlloc( GetProcessHeap(), 0, arglen + 1 );\n        cmdline[0] = (BYTE)arglen;\n        memcpy( cmdline + 1, lpCmdLine, arglen );\n\n        params.hEnvironment = 0;\n        params.cmdLine = MapLS( cmdline );\n        params.showCmd = MapLS( showCmd );\n        params.reserved = 0;\n\n        ret = LoadModule16( \"winoldap.mod\", &params );\n        UnMapLS( params.cmdLine );\n        UnMapLS( params.showCmd );\n    }\n    else if (ret > 31)\n    {\n        HTASK16 curtask = pThhook->HeadTDB;\n        while (curtask)\n        {\n            TDB *curtdb = (TDB *)GlobalLock16(curtask);\n            if (curtdb->hInstance == ret)\n            {\n                DWORD count;\n                struct kernel_thread_data *chdthd = (struct kernel_thread_data *)TebTlsGetValue(curtdb->teb, kernel_thread_data_tls);\n                MSG msg;\n                DWORD timeout = GetTickCount() + 30000;\n                ReleaseThunkLock(&count);\n                do\n                {\n                    DWORD wret = MsgWaitForMultipleObjects(1, &chdthd->idle_event, FALSE, timeout - GetTickCount(), QS_SENDMESSAGE);\n                    if (wret != (WAIT_OBJECT_0 + 1))\n                        break;\n                    PeekMessage(&msg, NULL, 0, 0, PM_REMOVE | PM_QS_SENDMESSAGE);\n                } while (GetTickCount() < timeout);\n                RestoreThunkLock(count);\n                WIN32_GlobalUnlock16(curtask);\n                break;\n            }\n            TDB *lasttask = curtask;\n            curtask = curtdb->hNext;\n            WIN32_GlobalUnlock16(lasttask);\n        }\n\n    }\n    return ret;\n}\n\nFARPROC16 WINAPI WIN16_GetProcAddress16(HMODULE16 hModule, LPCSTR name)\n{\n    FARPROC16 proc16 = GetProcAddress16(hModule, name);\n    //proc16 = 0000:0000 (fail) => cx = 0\n    CURRENT_STACK16->ecx = (CURRENT_STACK16->ecx & 0xffff0000) | SELECTOROF(proc16) | OFFSETOF(proc16);\n    return proc16;\n}\n/***********************************************************************\n *           GetProcAddress   (KERNEL.50)\n */\nFARPROC16 WINAPI GetProcAddress16( HMODULE16 hModule, LPCSTR name )\n{\n    WORD ordinal;\n    FARPROC16 ret;\n\n    if (!hModule) hModule = GetCurrentTask();\n    hModule = GetExePtr( hModule );\n\n    if (HIWORD(name) != 0)\n    {\n        ordinal = NE_GetOrdinal( hModule, name );\n        TRACE(\"%04x '%s'\\n\", hModule, name );\n    }\n    else\n    {\n        ordinal = LOWORD(name);\n        TRACE(\"%04x %04x\\n\", hModule, ordinal );\n    }\n    if (!ordinal) return NULL;\n\n    ret = NE_GetEntryPoint( hModule, ordinal );\n\n    TRACE(\"returning %p\\n\", ret );\n    return ret;\n}\n\n\n/***************************************************************************\n *              HasGPHandler                    (KERNEL.338)\n */\nSEGPTR WINAPI HasGPHandler16( SEGPTR address )\n{\n    HMODULE16 hModule;\n    int gpOrdinal;\n    SEGPTR gpPtr;\n    GPHANDLERDEF *gpHandler;\n\n    if (    (hModule = FarGetOwner16( SELECTOROF(address) )) != 0\n         && (gpOrdinal = NE_GetOrdinal( hModule, \"__GP\" )) != 0\n         && (gpPtr = (SEGPTR)NE_GetEntryPointEx( hModule, gpOrdinal, FALSE )) != 0\n         && !IsBadReadPtr16( gpPtr, sizeof(GPHANDLERDEF) )\n         && (gpHandler = MapSL( gpPtr )) != NULL )\n    {\n        while (gpHandler->selector)\n        {\n            if (    SELECTOROF(address) == gpHandler->selector\n                 && OFFSETOF(address)   >= gpHandler->rangeStart\n                 && OFFSETOF(address)   <  gpHandler->rangeEnd  )\n                return MAKESEGPTR( gpHandler->selector, gpHandler->handler );\n            gpHandler++;\n        }\n    }\n\n    return 0;\n}\n\n\n/**********************************************************************\n *\t    GetModuleHandle    (KERNEL.47)\n *\n * Find a module from a module name.\n *\n * NOTE: The current implementation works the same way the Windows 95 one\n *\t does. Do not try to 'fix' it, fix the callers.\n *\t + It does not do ANY extension handling (except that strange .EXE bit)!\n *\t + It does not care about paths, just about basenames. (same as Windows)\n *\n * RETURNS\n *   LOWORD:\n *\tthe win16 module handle if found\n * \t0 if not\n *   HIWORD (undocumented, see \"Undocumented Windows\", chapter 5):\n *\tAlways hFirstModule\n */\nDWORD WINAPI WIN16_GetModuleHandle( SEGPTR name )\n{\n    if (HIWORD(name) == 0)\n        return MAKELONG(GetExePtr( (HINSTANCE16)name), hFirstModule );\n    return MAKELONG(GetModuleHandle16( MapSL(name)), hFirstModule );\n}\n\n/**********************************************************************\n *\t    NE_GetModuleByFilename\n */\nstatic HMODULE16 NE_GetModuleByFilename( LPCSTR name )\n{\n    HMODULE16   hModule;\n    LPSTR       s, p;\n    BYTE        len, *name_table;\n    char        tmpstr[MAX_PATH];\n    NE_MODULE *pModule;\n\n    lstrcpynA(tmpstr, name, sizeof(tmpstr));\n\n    /* If the base filename of 'name' matches the base filename of the module\n     * filename of some module (case-insensitive compare):\n     * Return its handle.\n     */\n\n    /* basename: search backwards in passed name to \\ / or : */\n    s = tmpstr + strlen(tmpstr);\n    while (s > tmpstr)\n    {\n        if (s[-1]=='/' || s[-1]=='\\\\' || s[-1]==':')\n                break;\n        s--;\n    }\n\n    /* search this in loaded filename list */\n    for (hModule = hFirstModule; hModule ; hModule = pModule->next)\n    {\n        char            *loadedfn;\n        OFSTRUCT        *ofs;\n\n        pModule = NE_GetPtr( hModule );\n        if (!pModule) break;\n        if (!pModule->fileinfo) continue;\n        if (pModule->ne_flags & NE_FFLAGS_WIN32) continue;\n\n        ofs = (OFSTRUCT*)((BYTE *)pModule + pModule->fileinfo);\n        loadedfn = ((char*)ofs->szPathName) + strlen(ofs->szPathName);\n        /* basename: search backwards in pathname to \\ / or : */\n        while (loadedfn > (char*)ofs->szPathName)\n        {\n            if (loadedfn[-1]=='/' || loadedfn[-1]=='\\\\' || loadedfn[-1]==':')\n                    break;\n            loadedfn--;\n        }\n        /* case insensitive compare ... */\n        if (!NE_strcasecmp(loadedfn, s))\n            return hModule;\n    }\n    /* If basename (without ext) matches the module name of a module:\n     * Return its handle.\n     */\n\n    if ( (p = strchr( s, '.' )) != NULL ) *p = '\\0';\n    len = strlen(s);\n\n    for (hModule = hFirstModule; hModule ; hModule = pModule->next)\n    {\n        pModule = NE_GetPtr( hModule );\n        if (!pModule) break;\n        if (pModule->ne_flags & NE_FFLAGS_WIN32) continue;\n\n        name_table = (BYTE *)pModule + pModule->ne_restab;\n        if ((*name_table == len) && !NE_strncasecmp(s, (const char*)name_table+1, len))\n            return hModule;\n    }\n\n    return 0;\n}\n\n/***********************************************************************\n *           GetProcAddress16   (KERNEL32.37)\n * Get procaddress in 16bit module from win32... (kernel32 undoc. ordinal func)\n */\nFARPROC16 WINAPI WIN32_GetProcAddress16( HMODULE hModule, LPCSTR name )\n{\n    if (!hModule) return 0;\n    if (HIWORD(hModule))\n    {\n        WARN(\"hModule is Win32 handle (%p)\\n\", hModule );\n        return 0;\n    }\n    return GetProcAddress16( LOWORD(hModule), name );\n}\n\n/***************************************************************************\n *          IsRomModule    (KERNEL.323)\n */\nBOOL16 WINAPI IsRomModule16( HMODULE16 unused )\n{\n    return FALSE;\n}\n\n/***************************************************************************\n *          IsRomFile    (KERNEL.326)\n */\nBOOL16 WINAPI IsRomFile16( HFILE16 unused )\n{\n    return FALSE;\n}\n\n/***********************************************************************\n *           create_dummy_module\n *\n * Create a dummy NE module for Win32 or Winelib.\n */\nstatic HMODULE16 create_dummy_module( HMODULE module32 )\n{\n    HMODULE16 hModule;\n    NE_MODULE *pModule;\n    SEGTABLEENTRY *pSegment;\n    char *pStr;\n    unsigned int len;\n    const char *basename, *s;\n    OFSTRUCT *ofs;\n    int of_size, size;\n    char filename[MAX_PATH];\n    IMAGE_NT_HEADERS *nt = RtlImageNtHeader( module32 );\n\n    if (!nt) return ERROR_BAD_FORMAT;\n\n    /* Extract base filename */\n    len = GetModuleFileNameA( module32, filename, sizeof(filename) );\n    if (!len || len >= sizeof(filename)) return ERROR_BAD_FORMAT;\n    basename = strrchr(filename, '\\\\');\n    if (!basename) basename = filename;\n    else basename++;\n    len = strlen(basename);\n    if ((s = strchr(basename, '.'))) len = s - basename;\n\n    /* Allocate module */\n    of_size = sizeof(OFSTRUCT) - sizeof(ofs->szPathName)\n                    + strlen(filename) + 1;\n    size = sizeof(NE_MODULE) +\n                 /* loaded file info */\n                 ((of_size + 3) & ~3) +\n                 /* segment table: DS,CS */\n                 2 * sizeof(SEGTABLEENTRY) +\n                 /* name table */\n                 len + 2 +\n                 /* several empty tables */\n                 8;\n\n    hModule = GlobalAlloc16( GMEM_MOVEABLE | GMEM_ZEROINIT, size );\n    if (!hModule) return ERROR_BAD_FORMAT;\n    GLOBAL_SetSeg(hModule, 0, GT_MODULE);\n\n    FarSetOwner16( hModule, hModule );\n    pModule = GlobalLock16( hModule );\n\n    /* Set all used entries */\n    pModule->ne_magic         = IMAGE_OS2_SIGNATURE;\n    pModule->count            = 1;\n    pModule->next             = 0;\n    pModule->ne_flags         = NE_FFLAGS_WIN32;\n    pModule->ne_autodata      = 0;\n    pModule->ne_sssp          = MAKESEGPTR( 0, 1 );\n    pModule->ne_csip          = MAKESEGPTR( 0, 2 );\n    pModule->ne_heap          = 0;\n    pModule->ne_stack         = 0;\n    pModule->ne_cseg          = 2;\n    pModule->ne_cmod          = 0;\n    pModule->ne_cbnrestab     = 0;\n    pModule->fileinfo         = sizeof(NE_MODULE);\n    pModule->ne_exetyp        = NE_OSFLAGS_WINDOWS;\n    pModule->self             = hModule;\n    pModule->module32         = module32;\n\n    /* Set version and flags */\n    pModule->ne_expver = ((nt->OptionalHeader.MajorSubsystemVersion & 0xff) << 8 ) |\n                          (nt->OptionalHeader.MinorSubsystemVersion & 0xff);\n    if (nt->FileHeader.Characteristics & IMAGE_FILE_DLL)\n        pModule->ne_flags |= NE_FFLAGS_LIBMODULE | NE_FFLAGS_SINGLEDATA;\n\n    /* Set loaded file information */\n    ofs = (OFSTRUCT *)(pModule + 1);\n    memset( ofs, 0, of_size );\n    ofs->cBytes = of_size < 256 ? of_size : 255;   /* FIXME */\n    strcpy( ofs->szPathName, filename );\n\n    pSegment = (SEGTABLEENTRY*)((char*)(pModule + 1) + ((of_size + 3) & ~3));\n    pModule->ne_segtab = (char *)pSegment - (char *)pModule;\n    /* Data segment */\n    pSegment->size    = 0;\n    pSegment->flags   = NE_SEGFLAGS_DATA;\n    pSegment->minsize = 0x1000;\n    pSegment++;\n    /* Code segment */\n    pSegment->flags   = 0;\n    pSegment++;\n\n    /* Module name */\n    pStr = (char *)pSegment;\n    pModule->ne_restab = pStr - (char *)pModule;\n    assert(len<256);\n    *pStr = len;\n    lstrcpynA( pStr+1, basename, len+1 );\n    pStr += len+2;\n\n    /* All tables zero terminated */\n    pModule->ne_rsrctab = pModule->ne_imptab = pModule->ne_enttab = pStr - (char *)pModule;\n\n    NE_RegisterModule( pModule );\n    pModule->owner32 = LoadLibraryA( filename );  /* increment the ref count of the 32-bit module */\n    return hModule;\n}\n\n/***********************************************************************\n *           PrivateLoadLibrary       (KERNEL32.@)\n *\n * FIXME: rough guesswork, don't know what \"Private\" means\n */\nHINSTANCE16 WINAPI PrivateLoadLibrary(LPCSTR libname)\n{\n    return LoadLibrary16(libname);\n}\n\n/***********************************************************************\n *           PrivateFreeLibrary       (KERNEL32.@)\n *\n * FIXME: rough guesswork, don't know what \"Private\" means\n */\nvoid WINAPI PrivateFreeLibrary(HINSTANCE16 handle)\n{\n    FreeLibrary16(handle);\n}\n\n/***********************************************************************\n *           LoadLibrary32        (KERNEL.452)\n *           LoadSystemLibrary32  (KERNEL.482)\n */\nHMODULE WINAPI LoadLibrary32_16( LPCSTR libname )\n{\n    HMODULE hModule;\n    DWORD count;\n\n    ReleaseThunkLock( &count );\n    hModule = LoadLibraryA( libname );\n    RestoreThunkLock( count );\n    return hModule;\n}\n\n/***************************************************************************\n *\t\tMapHModuleLS\t\t\t(KERNEL32.@)\n */\nHMODULE16 WINAPI MapHModuleLS(HMODULE hmod)\n{\n    HMODULE16 ret;\n    NE_MODULE *pModule;\n\n    if (!hmod)\n        return TASK_GetCurrent()->hInstance;\n    if (!HIWORD(hmod))\n        return LOWORD(hmod); /* we already have a 16 bit module handle */\n    pModule = GlobalLock16(hFirstModule);\n    while (pModule)  {\n        if (pModule->module32 == hmod)\n            return pModule->self;\n        pModule = GlobalLock16(pModule->next);\n    }\n    if ((ret = create_dummy_module( hmod )) < 32)\n    {\n        SetLastError(ret);\n        ret = 0;\n    }\n    return ret;\n}\n\n/***************************************************************************\n *\t\tMapHModuleSL\t\t\t(KERNEL32.@)\n */\nHMODULE WINAPI MapHModuleSL(HMODULE16 hmod)\n{\n    NE_MODULE *pModule;\n\n    if (!hmod) {\n        TDB *pTask = TASK_GetCurrent();\n        hmod = pTask->hModule;\n    }\n    pModule = GlobalLock16(hmod);\n    if ((pModule->ne_magic != IMAGE_OS2_SIGNATURE) || !(pModule->ne_flags & NE_FFLAGS_WIN32))\n        return 0;\n    return pModule->module32;\n}\n\n/***************************************************************************\n *\t\tMapHInstLS\t\t\t(KERNEL.472)\n */\nvoid WINAPI MapHInstLS16( CONTEXT *context )\n{\n    context->Eax = MapHModuleLS( (HMODULE)context->Eax );\n}\n\n/***************************************************************************\n *\t\tMapHInstSL\t\t\t(KERNEL.473)\n */\nvoid WINAPI MapHInstSL16( CONTEXT *context )\n{\n    context->Eax = (DWORD)MapHModuleSL( context->Eax );\n}\n#define MAPHINST\n#ifdef MAPHINST\n/***************************************************************************\n *\t\tMapHInstLS\t\t\t(KERNEL32.@)\n */\n__ASM_STDCALL_FUNC( MapHInstLS, 0,\n                   \"pushl %eax\\n\\t\"\n                   \"call \" __ASM_NAME(\"MapHModuleLS\") __ASM_STDCALL(4) \"\\n\\t\"\n                   \"ret\" )\n\n/***************************************************************************\n *\t\tMapHInstSL\t\t\t(KERNEL32.@)\n */\n__ASM_STDCALL_FUNC( MapHInstSL, 0,\n                   \"pushl %eax\\n\\t\"\n                   \"call \" __ASM_NAME(\"MapHModuleSL\") __ASM_STDCALL(4) \"\\n\\t\"\n                   \"ret\" )\n\n/***************************************************************************\n *\t\tMapHInstLS_PN\t\t\t(KERNEL32.@)\n */\n__ASM_STDCALL_FUNC( MapHInstLS_PN, 0,\n                   \"testl %eax,%eax\\n\\t\"\n                   \"jz 1f\\n\\t\"\n                   \"pushl %eax\\n\\t\"\n                   \"call \" __ASM_NAME(\"MapHModuleLS\") __ASM_STDCALL(4) \"\\n\"\n                   \"1:\\tret\" )\n\n/***************************************************************************\n *\t\tMapHInstSL_PN\t\t\t(KERNEL32.@)\n */\n__ASM_STDCALL_FUNC( MapHInstSL_PN, 0,\n                   \"andl $0xffff,%eax\\n\\t\"\n                   \"jz 1f\\n\\t\"\n                   \"pushl %eax\\n\\t\"\n                   \"call \" __ASM_NAME(\"MapHModuleSL\") __ASM_STDCALL(4) \"\\n\"\n                   \"1:\\tret\" )\n\n#endif\n"
  },
  {
    "path": "krnl386/ne_segment.c",
    "content": "/*\n * NE segment loading\n *\n * Copyright 1993 Robert J. Amstadt\n * Copyright 1995 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <assert.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <sys/types.h>\n#include <fcntl.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#include <ctype.h>\n#include <string.h>\n\n#include \"wine/winbase16.h\"\n#include \"windows/wownt32.h\"\n#include \"winternl.h\"\n#include \"wine/library.h\"\n#include \"kernel16_private.h\"\n#include \"wine/debug.h\"\n#include \"../toolhelp/toolhelp.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(fixup);\nWINE_DECLARE_DEBUG_CHANNEL(dll);\nWINE_DECLARE_DEBUG_CHANNEL(module);\n\n/*\n * Relocation table entry\n */\nstruct relocation_entry_s\n{\n    BYTE address_type;    /* Relocation address type */\n    BYTE relocation_type; /* Relocation type */\n    WORD offset;          /* Offset in segment to fixup */\n    WORD target1;         /* Target specification */\n    WORD target2;         /* Target specification */\n};\n\n/*\n * Relocation address types\n */\n#define NE_RADDR_LOWBYTE      0\n#define NE_RADDR_SELECTOR     2\n#define NE_RADDR_POINTER32    3\n#define NE_RADDR_OFFSET16     5\n#define NE_RADDR_POINTER48    11\n#define NE_RADDR_OFFSET32     13\n\n/*\n * Relocation types\n */\n#define NE_RELTYPE_INTERNAL  0\n#define NE_RELTYPE_ORDINAL   1\n#define NE_RELTYPE_NAME      2\n#define NE_RELTYPE_OSFIXUP   3\n#define NE_RELFLAG_ADDITIVE  4\n\n/* Self-loading modules contain this structure in their first segment */\ntypedef struct\n{\n    WORD      version;       /* Must be \"A0\" (0x3041) */\n    WORD      reserved;\n    FARPROC16 BootApp;       /* startup procedure */\n    FARPROC16 LoadAppSeg;    /* procedure to load a segment */\n    FARPROC16 reserved2;\n    FARPROC16 MyAlloc;       /* memory allocation procedure,\n                              * wine must write this field */\n    FARPROC16 EntryAddrProc;\n    FARPROC16 ExitProc;      /* exit procedure */\n    WORD      reserved3[4];\n    FARPROC16 SetOwner;      /* Set Owner procedure, exported by wine */\n} SELFLOADHEADER;\n\n#define SEL(x) ((x)|1)\n\nstatic void NE_FixupSegmentPrologs(NE_MODULE *pModule, WORD segnum);\n\n\n/***********************************************************************\n *           NE_GetRelocAddrName\n */\nstatic const char *NE_GetRelocAddrName( BYTE addr_type, int additive )\n{\n    switch(addr_type & 0x7f)\n    {\n    case NE_RADDR_LOWBYTE:   return additive ? \"BYTE add\" : \"BYTE\";\n    case NE_RADDR_OFFSET16:  return additive ? \"OFFSET16 add\" : \"OFFSET16\";\n    case NE_RADDR_POINTER32: return additive ? \"POINTER32 add\" : \"POINTER32\";\n    case NE_RADDR_SELECTOR:  return additive ? \"SELECTOR add\" : \"SELECTOR\";\n    case NE_RADDR_POINTER48: return additive ? \"POINTER48 add\" : \"POINTER48\";\n    case NE_RADDR_OFFSET32:  return additive ? \"OFFSET32 add\" : \"OFFSET32\";\n    }\n    return \"???\";\n}\n\n\n/***********************************************************************\n *           NE_OpenFile\n */\nstatic HFILE16 NE_OpenFile( NE_MODULE *pModule )\n{\n    char *name = NE_MODULE_NAME( pModule );\n    HANDLE handle = CreateFileA( name, GENERIC_READ, FILE_SHARE_READ,\n                                 NULL, OPEN_EXISTING, 0, 0 );\n\n    if (handle == INVALID_HANDLE_VALUE)\n    {\n        ERR( \"Can't open file '%s' for module %04x\\n\", name, pModule->self );\n        return HFILE_ERROR;\n    }\n    return Win32HandleToDosFileHandle( handle );\n}\n\n\n/***********************************************************************\n *           apply_relocations\n *\n * Apply relocations to a segment. Helper for NE_LoadSegment.\n */\nstatic inline BOOL apply_relocations( NE_MODULE *pModule, const struct relocation_entry_s *rep,\n                                      int count, int segnum )\n{\n    BYTE *func_name;\n    char buffer[256];\n    int i, ordinal;\n    WORD offset, *sp;\n    HMODULE16 module;\n    FARPROC16 address = 0;\n    HMODULE16 *pModuleTable = (HMODULE16 *)((char *)pModule + pModule->ne_modtab);\n    SEGTABLEENTRY *pSegTable = NE_SEG_TABLE( pModule );\n    SEGTABLEENTRY *pSeg = pSegTable + segnum - 1;\n\n    /*\n     * Go through the relocation table one entry at a time.\n     */\n    for (i = 0; i < count; i++, rep++)\n    {\n        /*\n         * Get the target address corresponding to this entry.\n         */\n\n        /* If additive, there is no target chain list. Instead, add source\n           and target */\n        int additive = rep->relocation_type & NE_RELFLAG_ADDITIVE;\n        switch (rep->relocation_type & 3)\n        {\n        case NE_RELTYPE_ORDINAL:\n            module = pModuleTable[rep->target1-1];\n            ordinal = rep->target2;\n            address = NE_GetEntryPoint( module, ordinal );\n            if (!address)\n            {\n                NE_MODULE *pTarget = NE_GetPtr( module );\n                if (!pTarget)\n                    WARN_(module)(\"Module not found: %04x, reference %d of module %*.*s\\n\",\n                             module, rep->target1,\n                             *((BYTE *)pModule + pModule->ne_restab),\n                             *((BYTE *)pModule + pModule->ne_restab),\n                             (char *)pModule + pModule->ne_restab + 1 );\n                else\n                {\n                    ERR(\"No implementation for %.*s.%d, setting to 0xdeadbeef\\n\",\n                            *((BYTE *)pTarget + pTarget->ne_restab),\n                            (char *)pTarget + pTarget->ne_restab + 1,\n                            ordinal );\n                    address = (FARPROC16)0xdeadbeef;\n                }\n            }\n            if (TRACE_ON(fixup))\n            {\n                NE_MODULE *pTarget = NE_GetPtr( module );\n                TRACE(\"%d: %.*s.%d=%04x:%04x %s\\n\", i + 1,\n                       *((BYTE *)pTarget + pTarget->ne_restab),\n                       (char *)pTarget + pTarget->ne_restab + 1,\n                       ordinal, HIWORD(address), LOWORD(address),\n                       NE_GetRelocAddrName( rep->address_type, additive ) );\n            }\n            break;\n\n        case NE_RELTYPE_NAME:\n            module = pModuleTable[rep->target1-1];\n            func_name = (BYTE *)pModule + pModule->ne_imptab + rep->target2;\n            memcpy( buffer, func_name+1, *func_name );\n            buffer[*func_name] = '\\0';\n            ordinal = NE_GetOrdinal( module, buffer );\n            address = NE_GetEntryPoint( module, ordinal );\n\n            if (ERR_ON(fixup) && !address)\n            {\n                NE_MODULE *pTarget = NE_GetPtr( module );\n                ERR(\"No implementation for %.*s.%s, setting to 0xdeadbeef\\n\",\n                    *((BYTE *)pTarget + pTarget->ne_restab),\n                    (char *)pTarget + pTarget->ne_restab + 1, buffer );\n            }\n            if (!address) address = (FARPROC16) 0xdeadbeef;\n            if (TRACE_ON(fixup))\n            {\n                NE_MODULE *pTarget = NE_GetPtr( module );\n                TRACE(\"%d: %.*s.%s=%04x:%04x %s\\n\", i + 1,\n                       *((BYTE *)pTarget + pTarget->ne_restab),\n                       (char *)pTarget + pTarget->ne_restab + 1,\n                       buffer, HIWORD(address), LOWORD(address),\n                       NE_GetRelocAddrName( rep->address_type, additive ) );\n            }\n            break;\n\n        case NE_RELTYPE_INTERNAL:\n            if ((rep->target1 & 0xff) == 0xff)\n            {\n                address  = NE_GetEntryPoint( pModule->self, rep->target2 );\n            }\n            else\n            {\n                address = (FARPROC16)MAKESEGPTR( SEL(pSegTable[(rep->target1 & 0xff)-1].hSeg), rep->target2 );\n            }\n\n            TRACE(\"%d: %04x:%04x %s\\n\",\n                  i + 1, HIWORD(address), LOWORD(address),\n                  NE_GetRelocAddrName( rep->address_type, additive ) );\n            break;\n\n        case NE_RELTYPE_OSFIXUP:\n            /* Relocation type 7:\n             *\n             *    These appear to be used as fixups for the Windows\n             * floating point emulator.  Let's just ignore them and\n             * try to use the hardware floating point.  Linux should\n             * successfully emulate the coprocessor if it doesn't\n             * exist.\n             */\n            TRACE(\"%d: TYPE %d, OFFSET %04x, TARGET %04x %04x %s\\n\",\n                  i + 1, rep->relocation_type, rep->offset,\n                  rep->target1, rep->target2,\n                  NE_GetRelocAddrName( rep->address_type, additive ) );\n            continue;\n        }\n\n        offset  = rep->offset;\n\n        /* Apparently, high bit of address_type is sometimes set; */\n        /* we ignore it for now */\n        if (rep->address_type > NE_RADDR_OFFSET32)\n        {\n            char module[10];\n            GetModuleName16( pModule->self, module, sizeof(module) );\n            ERR(\"WARNING: module %s: unknown reloc addr type = 0x%02x. Please report.\\n\",\n                 module, rep->address_type );\n        }\n\n        if (additive)\n        {\n            sp = MapSL( MAKESEGPTR( SEL(pSeg->hSeg), offset ) );\n            TRACE(\"    %04x:%04x\\n\", offset, *sp );\n            switch (rep->address_type & 0x7f)\n            {\n            case NE_RADDR_LOWBYTE:\n                *(BYTE *)sp += LOBYTE((int)address);\n                break;\n            case NE_RADDR_OFFSET16:\n                *sp += LOWORD(address);\n                break;\n            case NE_RADDR_POINTER32:\n                *sp += LOWORD(address);\n                *(sp+1) = HIWORD(address);\n                break;\n            case NE_RADDR_SELECTOR:\n                /* Borland creates additive records with offset zero. Strange, but OK */\n                if (*sp)\n                    ERR(\"Additive selector to %04x.Please report\\n\",*sp);\n                else\n                    *sp = HIWORD(address);\n                break;\n            default:\n                goto unknown;\n            }\n        }\n        else  /* non-additive fixup */\n        {\n            do\n            {\n                WORD next_offset;\n\n                sp = MapSL( MAKESEGPTR( SEL(pSeg->hSeg), offset ) );\n                next_offset = *sp;\n                TRACE(\"    %04x:%04x\\n\", offset, *sp );\n                switch (rep->address_type & 0x7f)\n                {\n                case NE_RADDR_LOWBYTE:\n                    *(BYTE *)sp = LOBYTE((int)address);\n                    break;\n                case NE_RADDR_OFFSET16:\n                    *sp = LOWORD(address);\n                    break;\n                case NE_RADDR_POINTER32:\n                    *(FARPROC16 *)sp = address;\n                    break;\n                case NE_RADDR_SELECTOR:\n                    *sp = SELECTOROF(address);\n                    break;\n                default:\n                    goto unknown;\n                }\n                if (next_offset == offset) break;  /* avoid infinite loop */\n                if (next_offset >= GlobalSize16(pSeg->hSeg)) break;\n                offset = next_offset;\n            } while (offset != 0xffff);\n        }\n    }\n    return TRUE;\n\nunknown:\n    WARN(\"WARNING: %d: unknown ADDR TYPE %d,  \"\n         \"TYPE %d,  OFFSET %04x,  TARGET %04x %04x\\n\",\n         i + 1, rep->address_type, rep->relocation_type,\n         rep->offset, rep->target1, rep->target2);\n    return FALSE;\n}\n\nstatic void notify_load_seg(NE_MODULE *pModule, WORD segnum, SEGTABLEENTRY *pSeg)\n{\n    NFYLOADSEG nf;\n    SEGPTR s = MapLS(&nf);\n    nf.dwSize = sizeof(NFYLOADSEG);\n    nf.wSelector = pSeg->hSeg | 1;\n    nf.wSegNum = segnum;\n    nf.wType = pSeg->flags;\n    nf.wcInstance = 0; /* FIXME */\n    nf.lpstrModuleName = MAKESEGPTR(pModule->self, pModule->ne_restab + 1);\n    TOOLHELP_CallNotify(NFY_LOADSEG, s);\n    UnMapLS(s);\n}\n\n/***********************************************************************\n *           NE_LoadSegment\n */\nBOOL NE_LoadSegment( NE_MODULE *pModule, WORD segnum )\n{\n    WORD count;\n    DWORD pos;\n    const struct relocation_entry_s *rep;\n    int size;\n    SEGTABLEENTRY *pSegTable = NE_SEG_TABLE( pModule );\n    SEGTABLEENTRY *pSeg = pSegTable + segnum - 1;\n\n    if (pSeg->flags & NE_SEGFLAGS_LOADED)\n    {\n\t/* self-loader ? -> already loaded it */\n\tif (pModule->ne_flags & NE_FFLAGS_SELFLOAD)\n\t    return TRUE;\n\n\t/* leave, except for DGROUP, as this may be the second instance */\n\tif (segnum != pModule->ne_autodata)\n            return TRUE;\n    }\n\n    if (!pSeg->filepos && !(pModule->ne_flags & NE_FFLAGS_SELFLOAD))\n        return TRUE;  /* No file image, just return */\n\n    TRACE_(module)(\"Loading segment %d, hSeg=%04x, flags=%04x\\n\",\n                    segnum, pSeg->hSeg, pSeg->flags );\n    pos = pSeg->filepos << pModule->ne_align;\n    if (pSeg->size) size = pSeg->size;\n    else size = pSeg->minsize ? pSeg->minsize : 0x10000;\n\n    if (pModule->ne_flags & NE_FFLAGS_SELFLOAD && segnum > 1)\n    {\n \t/* Implement self-loading segments */\n \tSELFLOADHEADER *selfloadheader;\n        void *oldstack;\n        HFILE16 hFile16;\n        WORD args[3];\n        DWORD ret;\n\n \tselfloadheader = MapSL( MAKESEGPTR(SEL(pSegTable->hSeg),0) );\n        oldstack = getWOW32Reserved();\n\t\tsetWOW32Reserved((void *)MAKESEGPTR(pModule->self_loading_sel,\n                                                           0xff00 - sizeof(STACK16FRAME)));\n\n        hFile16 = NE_OpenFile( pModule );\n        TRACE_(dll)(\"Call LoadAppSegProc(hmodule=0x%04x,hf=%x,segnum=%d)\\n\",\n                    pModule->self,hFile16,segnum );\n        args[2] = pModule->self;\n        args[1] = hFile16;\n        args[0] = segnum;\n        WOWCallback16Ex( (DWORD)selfloadheader->LoadAppSeg, WCB16_PASCAL, sizeof(args), args, &ret );\n        TRACE_(dll)(\"Ret LoadAppSegProc: hSeg=0x%04x\\n\", pSeg->hSeg);\n        _lclose16( hFile16 );\n\t\tsetWOW32Reserved(oldstack);\n\n        if (ret)\n        {\n            pSeg->hSeg = LOWORD(ret);\n            pSeg->flags |= NE_SEGFLAGS_LOADED;\n        }\n        return TRUE;\n    }\n    else if (!(pSeg->flags & NE_SEGFLAGS_ITERATED))\n    {\n        void *mem = GlobalLock16(pSeg->hSeg);\n        if (!NE_READ_DATA( pModule, mem, pos, size ))\n            return FALSE;\n        pos += size;\n    }\n    else\n    {\n        /*\n          The following bit of code for \"iterated segments\" was written without\n          any documentation on the format of these segments. It seems to work,\n          but may be missing something.\n        */\n        const char *buff = NE_GET_DATA( pModule, pos, size );\n        const char* curr = buff;\n        char *mem = GlobalLock16(pSeg->hSeg);\n\n        pos += size;\n        if (buff == NULL) return FALSE;\n\n        while(curr < buff + size) {\n            unsigned int rept = ((const short *)curr)[0];\n            unsigned int len =  ((const short *)curr)[1];\n\n            curr += 2*sizeof(short);\n            while (rept--)\n            {\n                memcpy( mem, curr, len );\n                mem += len;\n            }\n            curr += len;\n        }\n    }\n    \n    pSeg->flags |= NE_SEGFLAGS_LOADED;\n\n    notify_load_seg(pModule, segnum, pSeg);\n\n    /* Perform exported function prolog fixups */\n    NE_FixupSegmentPrologs( pModule, segnum );\n\n    if (!(pSeg->flags & NE_SEGFLAGS_RELOC_DATA))\n        return TRUE;  /* No relocation data, we are done */\n\n    if (!NE_READ_DATA( pModule, &count, pos, sizeof(count) ) || !count) return TRUE;\n    pos += sizeof(count);\n\n    TRACE(\"Fixups for %.*s, segment %d, hSeg %04x\\n\",\n          *((BYTE *)pModule + pModule->ne_restab),\n          (char *)pModule + pModule->ne_restab + 1,\n          segnum, pSeg->hSeg );\n\n    if (!(rep = NE_GET_DATA( pModule, pos, count * sizeof(struct relocation_entry_s) )))\n        return FALSE;\n\n    return apply_relocations( pModule, rep, count, segnum );\n}\n\n\n/***********************************************************************\n *           NE_LoadAllSegments\n */\nBOOL NE_LoadAllSegments( NE_MODULE *pModule )\n{\n    int i;\n    SEGTABLEENTRY * pSegTable = NE_SEG_TABLE(pModule);\n\n    if ((pModule->ne_expver < 0x300) && !(pModule->ne_flags & NE_FFLAGS_BUILTIN) && !GetModuleHandle16(\"RMPATCH\"))\n        LoadLibrary16(\"RMPATCH.DLL\");\n\n    if (pModule->ne_flags & NE_FFLAGS_SELFLOAD)\n    {\n        HFILE16 hFile16;\n        HGLOBAL16 sel;\n        /* Handle self-loading modules */\n        SELFLOADHEADER *selfloadheader;\n        HMODULE16 mod = GetModuleHandle16(\"KERNEL\");\n        void *oldstack;\n        WORD args[2];\n\n        TRACE_(module)(\"%.*s is a self-loading module!\\n\",\n                       *((BYTE*)pModule + pModule->ne_restab),\n                       (char *)pModule + pModule->ne_restab + 1);\n        if (!NE_LoadSegment( pModule, 1 )) return FALSE;\n        selfloadheader = MapSL( MAKESEGPTR(SEL(pSegTable->hSeg), 0) );\n        selfloadheader->EntryAddrProc = GetProcAddress16(mod,\"EntryAddrProc\");\n        selfloadheader->MyAlloc       = GetProcAddress16(mod,\"MyAlloc\");\n        selfloadheader->SetOwner      = GetProcAddress16(mod,\"FarSetOwner\");\n        sel = GlobalAlloc16( GMEM_ZEROINIT, 0xFF00 );\n        pModule->self_loading_sel = SEL(sel);\n        FarSetOwner16( sel, pModule->self );\n\t\toldstack = getWOW32Reserved();\n        setWOW32Reserved((void *)MAKESEGPTR(pModule->self_loading_sel,\n                                                           0xff00 - sizeof(STACK16FRAME) ));\n\n        hFile16 = NE_OpenFile(pModule);\n        TRACE_(dll)(\"CallBootAppProc(hModule=0x%04x,hf=0x%04x)\\n\",\n              pModule->self,hFile16);\n        args[1] = pModule->self;\n        args[0] = hFile16;\n        WOWCallback16Ex( (DWORD)selfloadheader->BootApp, WCB16_PASCAL, sizeof(args), args, NULL );\n\tTRACE_(dll)(\"Return from CallBootAppProc\\n\");\n        _lclose16(hFile16);\n\t\tsetWOW32Reserved(oldstack);\n\n        for (i = 2; i <= pModule->ne_cseg; i++)\n            if (!NE_LoadSegment( pModule, i )) return FALSE;\n    }\n    else\n    {\n        for (i = 1; i <= pModule->ne_cseg; i++)\n            if (!NE_LoadSegment( pModule, i )) return FALSE;\n    }\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           NE_FixupSegmentPrologs\n *\n * Fixup exported functions prologs of one segment\n */\nstatic void NE_FixupSegmentPrologs(NE_MODULE *pModule, WORD segnum)\n{\n    SEGTABLEENTRY *pSegTable = NE_SEG_TABLE( pModule );\n    ET_BUNDLE *bundle;\n    ET_ENTRY *entry;\n    WORD dgroup, num_entries, sel = SEL(pSegTable[segnum-1].hSeg);\n    BYTE *pSeg, *pFunc;\n\n    TRACE(\"(%d);\\n\", segnum);\n\n    if (pSegTable[segnum-1].flags & NE_SEGFLAGS_DATA)\n    {\n\tpSegTable[segnum-1].flags |= NE_SEGFLAGS_LOADED;\n\treturn;\n    }\n\n    if (!pModule->ne_autodata) return;\n\n    if (!pSegTable[pModule->ne_autodata-1].hSeg) return;\n    dgroup = SEL(pSegTable[pModule->ne_autodata-1].hSeg);\n\n    pSeg = MapSL( MAKESEGPTR(sel, 0) );\n\n    bundle = (ET_BUNDLE *)((BYTE *)pModule+pModule->ne_enttab);\n\n    do {\n        TRACE(\"num_entries: %d, bundle: %p, next: %04x, pSeg: %p\\n\", bundle->last - bundle->first, bundle, bundle->next, pSeg);\n        if (!(num_entries = bundle->last - bundle->first))\n            return;\n        entry = (ET_ENTRY *)((BYTE *)bundle+6);\n        while (num_entries--)\n        {\n            /*TRACE(\"entry: %p, entry->segnum: %d, entry->offs: %04x\\n\", entry, entry->segnum, entry->offs);*/\n            if (entry->segnum == segnum)\n            {\n                pFunc = pSeg+entry->offs;\n                TRACE(\"pFunc: %p, *(DWORD *)pFunc: %08x, num_entries: %d\\n\", pFunc, *(DWORD *)pFunc, num_entries);\n                if (*(pFunc+2) == 0x90) /* nop */\n                {\n                    if (*(WORD *)pFunc == 0x581e) /* push ds, pop ax */\n                    {\n                        TRACE(\"patch %04x:%04x -> mov ax, ds\\n\", sel, entry->offs);\n                        *(WORD *)pFunc = 0xd88c; /* mov ax, ds */\n                    }\n\n                    if (*(WORD *)pFunc == 0xd88c) /* mov ax, ds */\n                    {\n                        if ((entry->flags & 2)) /* public data ? */\n                        {\n                            TRACE(\"patch %04x:%04x -> mov ax, dgroup [%04x]\\n\", sel, entry->offs, dgroup);\n                            *pFunc = 0xb8; /* mov ax, */\n                            *(WORD *)(pFunc+1) = dgroup;\n                        }\n                        else if ((pModule->ne_flags & NE_FFLAGS_MULTIPLEDATA)\n                                 && (entry->flags & 1)) /* exported ? */\n                        {\n                            TRACE(\"patch %04x:%04x -> nop, nop\\n\", sel, entry->offs);\n                            *(WORD *)pFunc = 0x9090; /* nop, nop */\n                        }\n                    }\n                }\n            }\n            entry++;\n        }\n    } while ( (bundle->next) && (bundle = ((ET_BUNDLE *)((BYTE *)pModule + bundle->next))) );\n}\n\n\n/***********************************************************************\n *           PatchCodeHandle (KERNEL.110)\n *\n * Needed for self-loading modules.\n */\nDWORD WINAPI PatchCodeHandle16(HANDLE16 hSeg)\n{\n    WORD segnum;\n    WORD sel = SEL(hSeg);\n    NE_MODULE *pModule = NE_GetPtr(FarGetOwner16(sel));\n    SEGTABLEENTRY *pSegTable = NE_SEG_TABLE(pModule);\n\n    TRACE_(module)(\"(%04x);\\n\", hSeg);\n\n    /* find the segment number of the module that belongs to hSeg */\n    for (segnum = 1; segnum <= pModule->ne_cseg; segnum++)\n    {\n\tif (SEL(pSegTable[segnum-1].hSeg) == sel)\n\t{\n\t    NE_FixupSegmentPrologs(pModule, segnum);\n\t    break;\n        }\n    }\n\n    return MAKELONG(hSeg, sel);\n}\n\n\n/***********************************************************************\n *           NE_GetDLLInitParams\n */\nstatic VOID NE_GetDLLInitParams( NE_MODULE *pModule,\n\t\t\t\t WORD *hInst, WORD *ds, WORD *heap )\n{\n    SEGTABLEENTRY *pSegTable = NE_SEG_TABLE( pModule );\n\n    if (!(pModule->ne_flags & NE_FFLAGS_SINGLEDATA))\n    {\n        if (pModule->ne_flags & NE_FFLAGS_MULTIPLEDATA || pModule->ne_autodata)\n        {\n            /* Not SINGLEDATA */\n            ERR_(dll)(\"Library is not marked SINGLEDATA\\n\");\n            exit(1);\n        }\n        else  /* DATA NONE DLL */\n        {\n            *ds = 0;\n            *heap = 0;\n        }\n    }\n    else  /* DATA SINGLE DLL */\n    {\n\tif (pModule->ne_autodata) {\n            *ds   = SEL(pSegTable[pModule->ne_autodata-1].hSeg);\n            *heap = pModule->ne_heap;\n\t}\n\telse /* hmm, DLL has no dgroup,\n\t\tbut why has it NE_FFLAGS_SINGLEDATA set ?\n\t\tBuggy DLL compiler ? */\n\t{\n            *ds   = 0;\n            *heap = 0;\n\t}\n    }\n\n    *hInst = *ds ? GlobalHandle16(*ds) : pModule->self;\n}\n\n\n/***********************************************************************\n *           NE_InitDLL\n *\n * Call the DLL initialization code\n */\nstatic BOOL NE_InitDLL( NE_MODULE *pModule, SEGPTR cmdline )\n{\n    SEGTABLEENTRY *pSegTable;\n    WORD hInst, ds, heap;\n    CONTEXT context;\n\n    pSegTable = NE_SEG_TABLE( pModule );\n\n    if (!(pModule->ne_flags & NE_FFLAGS_LIBMODULE) ||\n        (pModule->ne_flags & NE_FFLAGS_WIN32)) return TRUE; /*not a library*/\n\n    /* Call USER signal handler for Win3.1 compatibility. */\n    NE_CallUserSignalProc( pModule->self, USIG16_DLL_LOAD, 0, 0, 0 );\n\n    // look though segments for load failures if dll is selfloading\n    if (pModule->ne_flags & NE_FFLAGS_SELFLOAD)\n    {\n        for (int i = 2; i <= pModule->ne_cseg; i++)\n            NE_LoadSegment( pModule, i );\n    }\n\n    if (!SELECTOROF(pModule->ne_csip)) return TRUE;  /* no initialization code */\n\n\n    /* Registers at initialization must be:\n     * cx     heap size\n     * di     library instance\n     * ds     data segment if any\n     * es:si  command line\n     */\n\n    memset( &context, 0, sizeof(context) );\n\n    NE_GetDLLInitParams( pModule, &hInst, &ds, &heap );\n\n    context.Ecx = heap;\n    context.Edi = hInst;\n    context.SegDs = ds;\n    if (cmdline)\n    {\n        context.SegEs = HIWORD(cmdline);\n        context.Esi = LOWORD(cmdline);\n    }\n    else\n        context.SegEs = ds;   /* who knows ... */\n    context.SegFs = wine_get_fs();\n    context.SegGs = wine_get_gs();\n    context.SegCs = SEL(pSegTable[SELECTOROF(pModule->ne_csip)-1].hSeg);\n    context.Eip   = OFFSETOF(pModule->ne_csip);\n    context.Ebp   = OFFSETOF(getWOW32Reserved()) + FIELD_OFFSET(STACK16FRAME,bp);\n\n    {\n        NFYSTARTDLL nf;\n        SEGPTR s = MapLS(&nf);\n        SEGPTR save = getWOW32Reserved();\n        nf.dwSize = sizeof(NFYSTARTDLL);\n        nf.hModule = pModule->self;\n        nf.wCS = context.SegCs;\n        nf.wIP = context.Eip;\n        TOOLHELP_CallNotify(NFY_STARTDLL, s);\n        UnMapLS(s);\n        setWOW32Reserved(save);\n    }\n    pModule->ne_csip = 0;  /* Don't initialize it twice */\n    TRACE_(dll)(\"Calling LibMain for %.*s, cs:ip=%04x:%04x ds=%04x di=%04x cx=%04x\\n\",\n                *((BYTE*)pModule + pModule->ne_restab),\n                (char *)pModule + pModule->ne_restab + 1,\n                context.SegCs, context.Eip, context.SegDs,\n                LOWORD(context.Edi), LOWORD(context.Ecx) );\n    WOWCallback16Ex( 0, WCB16_REGS, 0, NULL, (DWORD *)&context );\n    return TRUE;\n}\n\n/***********************************************************************\n *           NE_InitializeDLLs\n *\n * Recursively initialize all DLLs (according to the order in which\n * they where loaded).\n */\nvoid NE_InitializeDLLs( HMODULE16 hModule, SEGPTR cmdline )\n{\n    NE_MODULE *pModule;\n    HMODULE16 *pDLL;\n\n    if (!(pModule = NE_GetPtr( hModule ))) return;\n    assert( !(pModule->ne_flags & NE_FFLAGS_WIN32) );\n\n    if (pModule->dlls_to_init)\n    {\n\tHGLOBAL16 to_init = pModule->dlls_to_init;\n\tpModule->dlls_to_init = 0;\n        for (pDLL = GlobalLock16( to_init ); *pDLL; pDLL++)\n        {\n            NE_InitializeDLLs( *pDLL, NULL );\n        }\n        GlobalFree16( to_init );\n    }\n    NE_InitDLL( pModule, cmdline );\n}\n\n\n/**********************************************************************\n *\t    NE_CallUserSignalProc\n *\n * According to \"Undocumented Windows\", the task signal proc is\n * bypassed for module load/unload notifications, and the USER signal\n * proc is called directly instead. This is what this function does.\n */\ntypedef DWORD (WINAPI *pSignalProc)( HANDLE16 module, UINT16 code, UINT16 exit,\n                                     HINSTANCE16 inst, HQUEUE16 queue );\n\nvoid NE_CallUserSignalProc( HMODULE16 hModule, UINT16 code, WORD arg1, WORD arg2, WORD arg3 )\n{\n    FARPROC16 proc;\n    HMODULE16 user = GetModuleHandle16(\"user.exe\");\n\n    if (!user) return;\n    if ((proc = GetProcAddress16( user, \"SignalProc\" )))\n    {\n        /* USER is always a builtin dll */\n        pSignalProc sigproc = (pSignalProc)((ENTRYPOINT16 *)MapSL( (SEGPTR)proc ))->target;\n        sigproc( hModule, code, arg1, arg2, arg3 );\n    }\n}\n\n\n/***********************************************************************\n *           NE_CallDllEntryPoint\n *\n * Call the DllEntryPoint of DLLs with subsystem >= 4.0\n */\ntypedef DWORD (WINAPI *WinNEEntryProc)(DWORD,WORD,WORD,WORD,DWORD,WORD);\n\nstatic void NE_CallDllEntryPoint( NE_MODULE *pModule, DWORD dwReason )\n{\n    WORD hInst, ds, heap;\n    FARPROC16 entryPoint;\n\n    if (!(pModule->ne_flags & NE_FFLAGS_LIBMODULE)) return;\n    if (!(pModule->ne_flags & NE_FFLAGS_BUILTIN) && pModule->ne_expver < 0x0400) return;\n    if (!(entryPoint = GetProcAddress16( pModule->self, \"DllEntryPoint\" ))) return;\n\n    NE_GetDLLInitParams( pModule, &hInst, &ds, &heap );\n\n    TRACE_(dll)( \"Calling %s DllEntryPoint, cs:ip=%04x:%04x\\n\",\n                 NE_MODULE_NAME( pModule ),\n                 SELECTOROF(entryPoint), OFFSETOF(entryPoint) );\n\n    if ( pModule->ne_flags & NE_FFLAGS_BUILTIN )\n    {\n        WinNEEntryProc entryProc = (WinNEEntryProc)((ENTRYPOINT16 *)MapSL( (SEGPTR)entryPoint ))->target;\n\n        entryProc( dwReason, hInst, ds, heap, 0, 0 );\n    }\n    else\n    {\n        CONTEXT context;\n        WORD args[8];\n\n        memset( &context, 0, sizeof(context) );\n        context.SegDs = ds;\n        context.SegEs = ds;   /* who knows ... */\n        context.SegFs = wine_get_fs();\n        context.SegGs = wine_get_gs();\n        context.SegCs = HIWORD(entryPoint);\n        context.Eip   = LOWORD(entryPoint);\n        context.Ebp   = OFFSETOF(getWOW32Reserved()) + FIELD_OFFSET(STACK16FRAME,bp);\n\n        args[7] = HIWORD(dwReason);\n        args[6] = LOWORD(dwReason);\n        args[5] = hInst;\n        args[4] = ds;\n        args[3] = heap;\n        args[2] = 0;     /* HIWORD(dwReserved1) */\n        args[1] = 0;     /* LOWORD(dwReserved1) */\n        args[0] = 0;     /* wReserved2 */\n        WOWCallback16Ex( 0, WCB16_REGS, sizeof(args), args, (DWORD *)&context );\n    }\n}\n\n/***********************************************************************\n *           NE_DllProcessAttach\n *\n * Call the DllEntryPoint of all modules this one (recursively)\n * depends on, according to the order in which they were loaded.\n *\n * Note that --as opposed to the PE module case-- there is no notion\n * of 'module loaded into a process' for NE modules, and hence we\n * have no place to store the fact that the DllEntryPoint of a\n * given module was already called on behalf of this process (e.g.\n * due to some earlier LoadLibrary16 call).\n *\n * Thus, we just call the DllEntryPoint twice in that case.  Win9x\n * appears to behave this way as well ...\n *\n * This routine must only be called with the Win16Lock held.\n *\n * FIXME:  We should actually abort loading in case the DllEntryPoint\n *         returns FALSE ...\n *\n */\n\nstruct ne_init_list\n{\n    int count;\n    int size;\n    NE_MODULE **module;\n};\n\nstatic void add_to_init_list( struct ne_init_list *list, NE_MODULE *hModule )\n{\n    NE_MODULE **newModule = NULL;\n    if ( list->count == list->size )\n    {\n        int newSize = list->size + 128;\n\n\tif (list->module) \n            newModule = HeapReAlloc( GetProcessHeap(), 0,\n                                             list->module, newSize*sizeof(NE_MODULE *) );\n\telse\n            newModule = HeapAlloc( GetProcessHeap(), 0,\n                                             newSize*sizeof(NE_MODULE *) );\n        if ( !newModule )\n        {\n            FIXME_(dll)(\"Out of memory!\\n\");\n            return;\n        }\n\n        list->module = newModule;\n        list->size   = newSize;\n    }\n\n    list->module[list->count++] = hModule;\n}\n\nstatic void free_init_list( struct ne_init_list *list )\n{\n    if ( list->module )\n    {\n        HeapFree( GetProcessHeap(), 0, list->module );\n        memset( list, 0, sizeof(*list) );\n    }\n}\n\nstatic void fill_init_list( struct ne_init_list *list, HMODULE16 hModule )\n{\n    NE_MODULE *pModule;\n    HMODULE16 *pModRef;\n    int i;\n\n    if (!(pModule = NE_GetPtr( hModule ))) return;\n    assert( !(pModule->ne_flags & NE_FFLAGS_WIN32) );\n\n    /* Never add a module twice */\n    for ( i = 0; i < list->count; i++ )\n        if ( list->module[i] == pModule )\n            return;\n\n    /* Check for recursive call */\n    if ( pModule->ne_flagsothers & 0x80 ) return;\n\n    TRACE_(dll)(\"(%s) - START\\n\", NE_MODULE_NAME(pModule) );\n\n    /* Tag current module to prevent recursive loop */\n    pModule->ne_flagsothers |= 0x80;\n\n    /* Recursively attach all DLLs this one depends on */\n    pModRef = (HMODULE16 *)((char *)pModule + pModule->ne_modtab);\n    for ( i = 0; i < pModule->ne_cmod; i++ )\n        if ( pModRef[i] ) fill_init_list( list, pModRef[i] );\n\n    /* Add current module */\n    add_to_init_list( list, pModule );\n\n    /* Remove recursion flag */\n    pModule->ne_flagsothers &= ~0x80;\n\n    TRACE_(dll)(\"(%s) - END\\n\", NE_MODULE_NAME(pModule) );\n}\n\nstatic void call_init_list( struct ne_init_list *list )\n{\n    int i;\n    for ( i = 0; i < list->count; i++ )\n        NE_CallDllEntryPoint( list->module[i], DLL_PROCESS_ATTACH );\n}\n\nvoid NE_DllProcessAttach( HMODULE16 hModule )\n{\n    struct ne_init_list list;\n    memset( &list, 0, sizeof(list) );\n\n    fill_init_list( &list, hModule );\n    call_init_list( &list );\n    free_init_list( &list );\n}\n\n\n/***********************************************************************\n *           NE_Ne2MemFlags\n *\n * This function translates NE segment flags to GlobalAlloc flags\n */\nstatic WORD NE_Ne2MemFlags(WORD flags)\n{\n    WORD memflags = 0;\n#if 1\n    if (flags & NE_SEGFLAGS_DISCARDABLE)\n      memflags |= GMEM_DISCARDABLE;\n    if (flags & NE_SEGFLAGS_MOVEABLE ||\n\t( ! (flags & NE_SEGFLAGS_DATA) &&\n\t  ! (flags & NE_SEGFLAGS_LOADED) &&\n\t  ! (flags & NE_SEGFLAGS_ALLOCATED)\n\t )\n\t)\n      memflags |= GMEM_MOVEABLE;\n    memflags |= GMEM_ZEROINIT;\n#else\n    memflags = GMEM_ZEROINIT | GMEM_FIXED;\n#endif\n    return memflags;\n}\n\n/***********************************************************************\n *           MyAlloc   (KERNEL.668) Wine-specific export\n *\n * MyAlloc() function for self-loading apps.\n */\nDWORD WINAPI MyAlloc16( WORD wFlags, WORD wSize, WORD wElem )\n{\n    DWORD size = wSize << wElem;\n    HANDLE16 hMem = 0;\n    WORD gflags = NE_Ne2MemFlags(wFlags);\n\n    hMem = GlobalAlloc16(gflags, size);\n\n    if ( ((wFlags & 0x7) != 0x1) && /* DATA */\n         ((wFlags & 0x7) != 0x7) ) /* DATA|ALLOCATED|LOADED */\n    {\n        WORD hSel = SEL(hMem);\n        WORD access = SelectorAccessRights16(hSel,0,0);\n\n        access |= 2<<2; /* SEGMENT_CODE */\n        SelectorAccessRights16(hSel,1,access);\n    }\n    return MAKELONG(SEL(hMem), hMem);\n}\n\n/***********************************************************************\n *           NE_GetInstance\n */\nHINSTANCE16 NE_GetInstance( NE_MODULE *pModule )\n{\n    if ( !pModule->ne_autodata )\n        return pModule->self;\n    else\n    {\n        SEGTABLEENTRY *pSeg;\n        pSeg = NE_SEG_TABLE( pModule ) + pModule->ne_autodata - 1;\n        return pSeg->hSeg;\n    }\n}\n\n/***********************************************************************\n *           NE_CreateSegment\n */\nBOOL NE_CreateSegment( NE_MODULE *pModule, int segnum, WORD sel )\n{\n    SEGTABLEENTRY *pSeg = NE_SEG_TABLE( pModule ) + segnum - 1;\n    int minsize;\n    unsigned char selflags;\n\n    assert( !(pModule->ne_flags & NE_FFLAGS_WIN32) );\n\n    if ( segnum < 1 || segnum > pModule->ne_cseg )\n        return FALSE;\n\n    if ( (pModule->ne_flags & NE_FFLAGS_SELFLOAD) && segnum != 1 )\n        return TRUE;    /* selfloader allocates segment itself */\n\n    if ( (pSeg->flags & NE_SEGFLAGS_ALLOCATED) && segnum != pModule->ne_autodata )\n        return TRUE;    /* all but DGROUP only allocated once */\n\n    if (pSeg->minsize)\n    {\n        minsize = pSeg->minsize + 2;\n\n        if ( segnum == pModule->ne_autodata )\n        {\n            minsize += pModule->ne_stack;\n            if (pModule->ne_heap > 0 && pModule->ne_heap < 0x800)\n            {\n                if (minsize + 0x800 > 0x10000)\n                {\n                    if (pModule->ne_heap < 0x100)\n                    {\n                        pModule->ne_heap = 0x100;\n                    }\n                }\n                else\n                {\n                    pModule->ne_heap = 0x800;\n                }\n            }\n            minsize += pModule->ne_heap;\n            if (minsize >= 0x10000)\n                minsize = 0x10000;\n        }\n    }\n    else\n        minsize = 0x10000;\n\n    selflags = (pSeg->flags & NE_SEGFLAGS_DATA) ? WINE_LDT_FLAGS_DATA : WINE_LDT_FLAGS_CODE;\n    if (pSeg->flags & NE_SEGFLAGS_32BIT) selflags |= WINE_LDT_FLAGS_32BIT;\n    if (pModule->ne_expver < 0x300 && !(pModule->ne_flags & NE_FFLAGS_BUILTIN))\n        selflags &= ~WINE_LDT_FLAGS_32BIT;\n    pSeg->hSeg = GLOBAL_Alloc( NE_Ne2MemFlags(pSeg->flags), minsize, pModule->self, selflags, sel ? sel : AllocSelector16(0) );\n    GLOBAL_SetSeg(pSeg->hSeg, segnum, (pSeg->flags & NE_SEGFLAGS_DATA) ? 2 : 3);\n    if (!pSeg->hSeg) return FALSE;\n\n    pSeg->flags |= NE_SEGFLAGS_ALLOCATED;\n    return TRUE;\n}\n\n/***********************************************************************\n *           NE_CreateAllSegments\n */\nBOOL NE_CreateAllSegments( NE_MODULE *pModule )\n{\n    int i;\n    if (pModule->ne_cseg)\n    {\n        WORD sel = AllocSelectorArray16(pModule->ne_cseg);\n        if (!sel)\n            return FALSE;\n        for ( i = 1; i <= pModule->ne_cseg; i++ )\n            if ( !NE_CreateSegment( pModule, i, sel + ((i - 1) << __AHSHIFT)) )\n                return FALSE;\n    }\n\n    pModule->dgroup_entry = pModule->ne_autodata ? pModule->ne_segtab +\n                            (pModule->ne_autodata - 1) * sizeof(SEGTABLEENTRY) : 0;\n    return TRUE;\n}\n\n\n/**********************************************************************\n *\t    IsSharedSelector    (KERNEL.345)\n */\nBOOL16 WINAPI IsSharedSelector16( HANDLE16 selector )\n{\n    /* Check whether the selector belongs to a DLL */\n    NE_MODULE *pModule = NE_GetPtr( selector );\n    if (!pModule) return FALSE;\n    return (pModule->ne_flags & NE_FFLAGS_LIBMODULE) != 0;\n}\n"
  },
  {
    "path": "krnl386/registry.c",
    "content": "/*\n * 16-bit registry functions\n *\n * Copyright 1996 Marcus Meissner\n * Copyright 1998 Matthew Becker\n * Copyright 1999 Sylvain St-Germain\n * Copyright 2002 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winreg.h\"\n#include \"wine/debug.h\"\n#include \"wine/winbase16.h\"\n#include \"wine/exception.h\"\n#include \"kernel16_private.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(reg);\n\nNTSYSAPI NTSTATUS  WINAPI NtCreateKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);\n\nstatic DWORD (WINAPI *pRegCloseKey)(HKEY);\nstatic DWORD (WINAPI *pRegCreateKeyA)(HKEY,LPCSTR,PHKEY);\nstatic DWORD (WINAPI *pRegDeleteKeyA)(HKEY,LPCSTR);\nstatic DWORD (WINAPI *pRegDeleteValueA)(HKEY,LPCSTR);\nstatic DWORD (WINAPI *pRegEnumKeyA)(HKEY,DWORD,LPSTR,DWORD);\nstatic DWORD (WINAPI *pRegEnumValueA)(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD);\nstatic DWORD (WINAPI *pRegFlushKey)(HKEY);\nstatic DWORD (WINAPI *pRegOpenKeyA)(HKEY,LPCSTR,PHKEY);\nstatic DWORD (WINAPI *pRegQueryValueA)(HKEY,LPCSTR,LPSTR,LPLONG);\nstatic DWORD (WINAPI *pRegQueryValueExA)(HKEY,LPCSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD);\nstatic DWORD (WINAPI *pRegSetValueA)(HKEY,LPCSTR,DWORD,LPCSTR,DWORD);\nstatic DWORD (WINAPI *pRegSetValueExA)(HKEY,LPCSTR,DWORD,DWORD,const BYTE*,DWORD);\n\nstatic HMODULE advapi32;\n\nstatic BOOL enable_registry_redirection;\nstatic HKEY registry_redirection_root;\nstatic HKEY registry_redirection_classes;\nstatic HKEY registry_redirection_current_user;\nstatic HKEY registry_redirection_local_machine;\n\n/* 0 and 1 are valid rootkeys in win16 shell.dll and are used by\n * some programs. Do not remove those cases. -MM\n */\nstatic inline void fix_win16_hkey( HKEY *hkey )\n{\n    if (*hkey == 0 || *hkey == (HKEY)1) *hkey = HKEY_CLASSES_ROOT;\n    if (enable_registry_redirection && *hkey == HKEY_CLASSES_ROOT)\n    {\n        *hkey = registry_redirection_classes;\n    }\n    if (enable_registry_redirection && *hkey == HKEY_CURRENT_USER)\n    {\n        *hkey = registry_redirection_current_user;\n    }\n    if (enable_registry_redirection && *hkey == HKEY_LOCAL_MACHINE)\n    {\n        *hkey = registry_redirection_local_machine;\n    }\n}\n\nstatic BOOL is_redir_root_key(HKEY key)\n{\n    if (!enable_registry_redirection)\n        return FALSE;\n    return key == registry_redirection_classes;\n}\nstatic void init_func_ptrs(void)\n{\n    enable_registry_redirection = krnl386_get_config_int(\"otvdm\", \"EnableRegistryRedirection\", FALSE);\n    if (enable_registry_redirection)\n    {\n        LONG result = 0;\n        result = result || RegCreateKeyExA(HKEY_CURRENT_USER, \"Software\\\\otvdm\\\\\", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &registry_redirection_root, NULL);\n        result = result || RegCreateKeyExA(HKEY_CURRENT_USER, \"Software\\\\otvdm\\\\HKEY_CLASSES_ROOT\\\\\", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &registry_redirection_classes, NULL);\n        result = result || RegCreateKeyExA(HKEY_CURRENT_USER, \"Software\\\\otvdm\\\\HKEY_CURRENT_USER\\\\\", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &registry_redirection_current_user, NULL);\n        result = result || RegCreateKeyExA(HKEY_CURRENT_USER, \"Software\\\\otvdm\\\\HKEY_LOCAL_MACHINE\\\\\", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &registry_redirection_local_machine, NULL);\n        if (result)\n        {\n            ERR(\"Could not init EnableRegistryRedirection\\n\");\n            enable_registry_redirection = FALSE;\n        }\n    }\n    advapi32 = LoadLibraryA(\"advapi32.dll\");\n    if (!advapi32)\n    {\n        ERR( \"Unable to load advapi32.dll\\n\" );\n        ExitProcess(1);\n    }\n#define GET_PTR(name)  p##name = (void *)GetProcAddress(advapi32,#name);\n    GET_PTR( RegCloseKey );\n    GET_PTR( RegCreateKeyA );\n    GET_PTR( RegDeleteKeyA );\n    GET_PTR( RegDeleteValueA );\n    GET_PTR( RegEnumKeyA );\n    GET_PTR( RegEnumValueA );\n    GET_PTR( RegFlushKey );\n    GET_PTR( RegOpenKeyA );\n    GET_PTR( RegQueryValueA );\n    GET_PTR( RegQueryValueExA );\n    GET_PTR( RegSetValueA );\n    GET_PTR( RegSetValueExA );\n#undef GET_PTR\n}\n\n\nstatic BOOL is_empty(LPCSTR name)\n{\n    return name == NULL || name[0] == 0;\n}\n\n/******************************************************************************\n *           RegEnumKey   [KERNEL.216]\n */\nDWORD WINAPI RegEnumKey16( HKEY hkey, DWORD index, LPSTR name, DWORD name_len )\n{\n    if (!advapi32) init_func_ptrs();\n    fix_win16_hkey( &hkey );\n    DWORD result = pRegEnumKeyA( hkey, index, name, name_len );\n    return result;\n}\n\nstatic void fix_redir_key(PHKEY retkey, LPDWORD result)\n{\n    if (!enable_registry_redirection)\n        return;\n    if (*retkey == registry_redirection_classes)\n    {\n        *retkey = HKEY_CLASSES_ROOT;\n    }\n    if (*retkey == registry_redirection_local_machine)\n    {\n        *retkey = HKEY_LOCAL_MACHINE;\n    }\n    if (*retkey == registry_redirection_current_user)\n    {\n        *retkey = HKEY_CURRENT_USER;\n    }\n}\n\n/******************************************************************************\n *           RegOpenKey   [KERNEL.217]\n */\nDWORD WINAPI RegOpenKey16( HKEY hkey, LPCSTR name, PHKEY retkey )\n{\n    if (!advapi32) init_func_ptrs();\n    fix_win16_hkey( &hkey );\n    DWORD result = pRegOpenKeyA( hkey, name, retkey );\n    fix_redir_key(retkey, &result);\n    return result;\n}\n\nstatic LPWSTR strdupAtoW(LPCSTR str)\n{\n    LPWSTR ret;\n    INT len;\n\n    if (!str) return NULL;\n    len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);\n    ret = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));\n    if (ret) MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len);\n    return ret;\n}\n\n/******************************************************************************\n *           RegCreateKey   [KERNEL.218]\n */\nDWORD WINAPI RegCreateKey16( HKEY hkey, LPCSTR name, PHKEY retkey )\n{\n    if (!advapi32) init_func_ptrs();\n    fix_win16_hkey( &hkey );\n    DWORD result;\n    TRACE(\"%x %s\\n\", hkey, name);\n    if (is_redir_root_key(hkey) && is_empty(name))\n    {\n        *retkey = hkey;\n        fix_redir_key(retkey, &result);\n        return ERROR_SUCCESS;\n    }\n    // try to create with write access\n    result = RegCreateKeyExA(hkey, name, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, retkey, NULL);\n    // try to redirect to HKEY_CURRENT_USER if possible\n    if (name && !enable_registry_redirection && (result != ERROR_SUCCESS))\n    {\n        if (hkey == HKEY_CLASSES_ROOT)\n        {\n            const char softclass[] = \"Software\\\\Classes\\\\\";\n            char *hkcukey = HeapAlloc(GetProcessHeap(), 0, 17 + strlen(name) + 1);\n            strcpy(hkcukey, softclass);\n            strcat(hkcukey, name);\n            result = RegCreateKeyExA(HKEY_CURRENT_USER, hkcukey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, retkey, NULL);\n            if (result == ERROR_SUCCESS)\n                WARN(\"HKCR CreateKey redirected to HKCU\\n\");\n            HeapFree(GetProcessHeap(), 0, hkcukey);\n        }\n        else if(hkey < 0x80000000)\n        {\n            // regcreatekeyex will convert hkcu\\software\\classes subkeys into hkcr so try ntcreatekey\n            UNICODE_STRING nameU;\n            OBJECT_ATTRIBUTES objattr;\n            WCHAR *nameW = strdupAtoW(name);\n            DWORD dis, ret;\n            RtlCreateUnicodeString(&nameU, nameW);\n            HeapFree(GetProcessHeap(), 0, nameW);\n            InitializeObjectAttributes(&objattr, &nameU, 0, hkey, NULL);\n            ret = NtCreateKey(retkey, KEY_ALL_ACCESS, &objattr, 0, NULL, REG_OPTION_NON_VOLATILE, &dis);\n            result = RtlNtStatusToDosError(ret);\n            RtlFreeUnicodeString(&nameU);\n        }\n    }\n    // failed, try to open for reading\n    if (result != ERROR_SUCCESS)\n        result = RegOpenKeyA(hkey, name, retkey);\n    fix_redir_key(retkey, &result);\n    TRACE(\"%x, %x\\n\", result, *retkey);\n    return result;\n}\n\n/******************************************************************************\n *           RegDeleteKey   [KERNEL.219]\n */\nDWORD WINAPI RegDeleteKey16( HKEY hkey, LPCSTR name )\n{\n    if (!advapi32) init_func_ptrs();\n    fix_win16_hkey( &hkey );\n    if (is_redir_root_key(hkey) && is_empty(name))\n        return ERROR_SUCCESS;\n    DWORD result = pRegDeleteKeyA( hkey, name );\n    return result;\n}\n\n/******************************************************************************\n *           RegCloseKey   [KERNEL.220]\n */\nDWORD WINAPI RegCloseKey16( HKEY hkey )\n{\n    if (!advapi32) init_func_ptrs();\n    TRACE(\"%x\\n\", hkey);\n    fix_win16_hkey( &hkey );\n    if (is_redir_root_key(hkey))\n        return ERROR_SUCCESS;\n    DWORD result = pRegCloseKey( hkey );\n    return result;\n}\n\n/******************************************************************************\n *           RegSetValue   [KERNEL.221]\n */\nDWORD WINAPI RegSetValue16( HKEY hkey, LPCSTR name, DWORD type, LPCSTR data, DWORD count )\n{\n    HKEY subkey;\n    DWORD result;\n    if (type != REG_SZ) return 7; // ntvdm returns 7 in this case for some reason\n    if (!advapi32) init_func_ptrs();\n    fix_win16_hkey( &hkey );\n    __TRY\n    {\n        count = strlen(data);\n    }\n    __EXCEPT_ALL\n    {\n        return ERROR_INVALID_PARAMETER;\n    }\n    __ENDTRY\n    if (!name)\n        return RegSetValueEx16(hkey, NULL, 0, type, data, count);\n\n    result = RegCreateKey16(hkey, name, &subkey);\n    if (result == ERROR_SUCCESS)\n    {\n        result = RegSetValueEx16(subkey, NULL, 0, type, data, count);\n        RegCloseKey16(subkey);\n    }\n    return result;\n}\n\n/******************************************************************************\n *           RegDeleteValue  [KERNEL.222]\n */\nDWORD WINAPI RegDeleteValue16( HKEY hkey, LPSTR name )\n{\n    if (!advapi32) init_func_ptrs();\n    fix_win16_hkey( &hkey );\n    if (is_redir_root_key(hkey) && is_empty(name))\n        return ERROR_SUCCESS;\n    DWORD result = pRegDeleteValueA( hkey, name );\n    return result;\n}\n\n/******************************************************************************\n *           RegEnumValue   [KERNEL.223]\n */\nDWORD WINAPI RegEnumValue16( HKEY hkey, DWORD index, LPSTR value, LPDWORD val_count,\n                             LPDWORD reserved, LPDWORD type, LPBYTE data, LPDWORD count )\n{\n    if (!advapi32) init_func_ptrs();\n    fix_win16_hkey( &hkey );\n    DWORD result = pRegEnumValueA( hkey, index, value, val_count, reserved, type, data, count );\n    return result;\n}\n\n/******************************************************************************\n *           RegQueryValue   [KERNEL.224]\n *\n * NOTES\n *    Is this HACK still applicable?\n *\n * HACK\n *    The 16bit RegQueryValue doesn't handle selectorblocks anyway, so we just\n *    mask out the high 16 bit.  This (not so much incidentally) hopefully fixes\n *    Aldus FH4)\n */\nDWORD WINAPI RegQueryValue16( HKEY hkey, LPCSTR name, LPSTR data, LPDWORD count )\n{\n    if (!advapi32) init_func_ptrs();\n    fix_win16_hkey( &hkey );\n    if (count) *count &= 0xffff;\n    DWORD incount = *count;\n    DWORD result = pRegQueryValueA( hkey, name, data, (LONG*) count );\n    if (result == ERROR_MORE_DATA)\n    {\n        DWORD realcount = *count + 1;\n        char *buf = HeapAlloc(GetProcessHeap(), 0, realcount);\n        result = pRegQueryValueA(hkey, name, buf, &realcount);\n        memcpy(data, buf, incount);\n        HeapFree(GetProcessHeap(), 0, buf);\n        *count = incount;\n    }\n    return result;\n}\n\n/******************************************************************************\n *           RegQueryValueEx   [KERNEL.225]\n */\nDWORD WINAPI RegQueryValueEx16( HKEY hkey, LPCSTR name, LPDWORD reserved, LPDWORD type,\n                                LPBYTE data, LPDWORD count )\n{\n    if (!advapi32) init_func_ptrs();\n    fix_win16_hkey( &hkey );\n    DWORD result = pRegQueryValueExA( hkey, name, reserved, type, data, count );\n    return result;\n}\n\n/******************************************************************************\n *           RegSetValueEx   [KERNEL.226]\n */\nDWORD WINAPI RegSetValueEx16( HKEY hkey, LPCSTR name, DWORD reserved, DWORD type,\n                              const BYTE *data, DWORD count )\n{\n    if (!advapi32) init_func_ptrs();\n    fix_win16_hkey( &hkey );\n    DWORD result = pRegSetValueExA( hkey, name, reserved, type, data, count );\n    return result;\n}\n\n/******************************************************************************\n *           RegFlushKey   [KERNEL.227]\n */\nDWORD WINAPI RegFlushKey16( HKEY hkey )\n{\n    if (!advapi32) init_func_ptrs();\n    fix_win16_hkey( &hkey );\n    DWORD result = pRegFlushKey( hkey );\n    return result;\n}\n"
  },
  {
    "path": "krnl386/relay.c",
    "content": "/*\n * Copyright 1993 Robert J. Amstadt\n * Copyright 1995 Alexandre Julliard\n * Copyright 2002 Jukka Heinonen\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <assert.h>\n#include <stdlib.h>\n#include <string.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <stddef.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/winbase16.h\"\n#include \"winternl.h\"\n#include \"kernel16_private.h\"\n#include \"dosexe.h\"\n#include \"wine/unicode.h\"\n#include \"wine/library.h\"\n#include \"wine/debug.h\"\n#include \"windows/wownt32.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(relay);\n\n#include <pshpack1.h>\ntypedef struct {\n    BYTE pushw_bp;\n    WORD pushl;\n    DWORD funcptr;\n    BYTE call_near;\n    short call_to;\n    CALLFROM16 call;\n    BOOL used;\n    LPCSTR name;\n} PROC16_RELAY;\nstatic PROC16_RELAY *thunk32_relay_array;\nstatic WORD thunk32_relay_segment;\n/*\n * Magic DWORD used to check stack integrity.\n */\n#define RELAY_MAGIC 0xabcdef00\n\n/*\n * Memory block for temporary 16-bit stacks used with relay calls.\n */\ntypedef struct {\n    DWORD inuse;          /* non-zero if stack block is in use */\n    DWORD eip;            /* saved ip */\n    DWORD seg_cs;         /* saved cs */\n    DWORD esp;            /* saved sp */\n    DWORD seg_ss;         /* saved ss */\n    DWORD stack_bottom;   /* guard dword */\n    BYTE  stack[256-7*4]; /* 16-bit stack */\n    DWORD stack_top;      /* guard dword */\n} RELAY_Stack16;\n\n\nstatic const WCHAR **debug_relay_excludelist;\nstatic const WCHAR **debug_relay_includelist;\nstatic const WCHAR **debug_snoop_excludelist;\nstatic const WCHAR **debug_snoop_includelist;\n\n/* compare an ASCII and a Unicode string without depending on the current codepage */\nstatic inline int strcmpiAW( const char *strA, const WCHAR *strW )\n{\n    while (*strA && (toupperW((unsigned char)*strA) == toupperW(*strW))) { strA++; strW++; }\n    return toupperW((unsigned char)*strA) - toupperW(*strW);\n}\n\n/* compare an ASCII and a Unicode string without depending on the current codepage */\nstatic inline int strncmpiAW( const char *strA, const WCHAR *strW, int n )\n{\n    int ret = 0;\n    for ( ; n > 0; n--, strA++, strW++)\n        if ((ret = toupperW((unsigned char)*strA) - toupperW(*strW)) || !*strA) break;\n    return ret;\n}\n\n/***********************************************************************\n *           build_list\n *\n * Build a function list from a ';'-separated string.\n */\nstatic const WCHAR **build_list( const WCHAR *buffer )\n{\n    int count = 1;\n    const WCHAR *p = buffer;\n    const WCHAR **ret;\n\n    while ((p = strchrW( p, ';' )))\n    {\n        count++;\n        p++;\n    }\n    /* allocate count+1 pointers, plus the space for a copy of the string */\n    if ((ret = RtlAllocateHeap( GetProcessHeap(), 0,\n                                (count+1) * sizeof(WCHAR*) + (strlenW(buffer)+1) * sizeof(WCHAR) )))\n    {\n        WCHAR *str = (WCHAR *)(ret + count + 1);\n        WCHAR *p = str;\n\n        strcpyW( str, buffer );\n        count = 0;\n        for (;;)\n        {\n            ret[count++] = p;\n            if (!(p = strchrW( p, ';' ))) break;\n            *p++ = 0;\n        }\n        ret[count++] = NULL;\n    }\n    return ret;\n}\n\n\n/***********************************************************************\n *           RELAY16_InitDebugLists\n *\n * Build the relay include/exclude function lists.\n */\nvoid RELAY16_InitDebugLists(void)\n{\n    OBJECT_ATTRIBUTES attr;\n    UNICODE_STRING name;\n    char buffer[1024];\n    HANDLE root, hkey;\n    DWORD count;\n    WCHAR *str;\n    static const WCHAR configW[] = {'S','o','f','t','w','a','r','e','\\\\',\n                                    'W','i','n','e','\\\\',\n                                    'D','e','b','u','g',0};\n    static const WCHAR RelayIncludeW[] = {'R','e','l','a','y','I','n','c','l','u','d','e',0};\n    static const WCHAR RelayExcludeW[] = {'R','e','l','a','y','E','x','c','l','u','d','e',0};\n    static const WCHAR SnoopIncludeW[] = {'S','n','o','o','p','I','n','c','l','u','d','e',0};\n    static const WCHAR SnoopExcludeW[] = {'S','n','o','o','p','E','x','c','l','u','d','e',0};\n\n    RtlOpenCurrentUser( KEY_READ, &root );\n    attr.Length = sizeof(attr);\n    attr.RootDirectory = root;\n    attr.ObjectName = &name;\n    attr.Attributes = 0;\n    attr.SecurityDescriptor = NULL;\n    attr.SecurityQualityOfService = NULL;\n    RtlInitUnicodeString( &name, configW );\n\n    /* @@ Wine registry key: HKCU\\Software\\Wine\\Debug */\n    if (NtOpenKey( &hkey, KEY_READ, &attr )) hkey = 0;\n    NtClose( root );\n    if (!hkey) return;\n\n    str = (WCHAR *)((KEY_VALUE_PARTIAL_INFORMATION *)buffer)->Data;\n    RtlInitUnicodeString( &name, RelayIncludeW );\n    if (!NtQueryValueKey( hkey, &name, KeyValuePartialInformation, buffer, sizeof(buffer), &count ))\n    {\n        debug_relay_includelist = build_list( str );\n    }\n\n    RtlInitUnicodeString( &name, RelayExcludeW );\n    if (!NtQueryValueKey( hkey, &name, KeyValuePartialInformation, buffer, sizeof(buffer), &count ))\n    {\n        debug_relay_excludelist = build_list( str );\n    }\n\n    RtlInitUnicodeString( &name, SnoopIncludeW );\n    if (!NtQueryValueKey( hkey, &name, KeyValuePartialInformation, buffer, sizeof(buffer), &count ))\n    {\n        debug_snoop_includelist = build_list( str );\n    }\n\n    RtlInitUnicodeString( &name, SnoopExcludeW );\n    if (!NtQueryValueKey( hkey, &name, KeyValuePartialInformation, buffer, sizeof(buffer), &count ))\n    {\n        debug_snoop_excludelist = build_list( str );\n    }\n    NtClose( hkey );\n}\n\n\n/***********************************************************************\n *           check_list\n *\n * Check if a given module and function is in the list.\n */\nstatic BOOL check_list( const char *module, int ordinal, const char *func, const WCHAR **list )\n{\n    char ord_str[10];\n\n    sprintf( ord_str, \"%d\", ordinal );\n    for(; *list; list++)\n    {\n        const WCHAR *p = strrchrW( *list, '.' );\n        if (p && p > *list)  /* check module and function */\n        {\n            int len = p - *list;\n            if (strncmpiAW( module, *list, len-1 ) || module[len]) continue;\n            if (p[1] == '*' && !p[2]) return TRUE;\n            if (!strcmpiAW( ord_str, p + 1 )) return TRUE;\n            if (func && !strcmpiAW( func, p + 1 )) return TRUE;\n        }\n        else  /* function only */\n        {\n            if (func && !strcmpiAW( func, *list )) return TRUE;\n        }\n    }\n    return FALSE;\n}\n\n\n/***********************************************************************\n *           RELAY_ShowDebugmsgRelay\n *\n * Simple function to decide if a particular debugging message is\n * wanted.\n */\nstatic BOOL RELAY_ShowDebugmsgRelay(const char *module, int ordinal, const char *func)\n{\n    if (debug_relay_excludelist && check_list( module, ordinal, func, debug_relay_excludelist ))\n        return FALSE;\n    if (debug_relay_includelist && !check_list( module, ordinal, func, debug_relay_includelist ))\n        return FALSE;\n    return TRUE;\n}\n\n\n/***********************************************************************\n *          SNOOP16_ShowDebugmsgSnoop\n *\n * Simple function to decide if a particular debugging message is\n * wanted.\n */\nBOOL SNOOP16_ShowDebugmsgSnoop(const char *module, int ordinal, const char *func)\n{\n    if (debug_snoop_excludelist && check_list( module, ordinal, func, debug_snoop_excludelist ))\n        return FALSE;\n    if (debug_snoop_includelist && !check_list( module, ordinal, func, debug_snoop_includelist ))\n        return FALSE;\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           get_entry_point\n *\n * Return the ordinal, name, and type info corresponding to a CS:IP address.\n */\nstatic const CALLFROM16 *get_entry_point( STACK16FRAME *frame, LPSTR module, LPSTR func, WORD *pOrd )\n{\n    WORD i, max_offset;\n    register BYTE *p;\n    NE_MODULE *pModule;\n    ET_BUNDLE *bundle;\n    ET_ENTRY *entry;\n\n    *pOrd = 0;\n    if (frame->module_cs == thunk32_relay_segment)\n    {\n        strcpy(func, thunk32_relay_array[frame->entry_ip / sizeof(*thunk32_relay_array)].name);\n        strcpy(module, \"(thunk)\");\n        *pOrd = 0;\n        goto end;\n    }\n    if (!(pModule = NE_GetPtr(FarGetOwner16(GlobalHandle16(frame->module_cs)))))\n    {\n        module[0] = '\\0';\n        func[0] = '\\0';\n        return NULL;\n    }\n\n    max_offset = 0;\n    bundle = (ET_BUNDLE *)((BYTE *)pModule + pModule->ne_enttab);\n    do\n    {\n        entry = (ET_ENTRY *)((BYTE *)bundle+6);\n\tfor (i = bundle->first + 1; i <= bundle->last; i++)\n        {\n\t    if ((entry->offs < frame->entry_ip)\n\t    && (entry->segnum == 1) /* code segment ? */\n\t    && (entry->offs >= max_offset))\n            {\n\t\tmax_offset = entry->offs;\n\t\t*pOrd = i;\n            }\n\t    entry++;\n        }\n    } while ( (bundle->next)\n\t   && (bundle = (ET_BUNDLE *)((BYTE *)pModule+bundle->next)));\n\n    /* Search for the name in the resident names table */\n    /* (built-in modules have no non-resident table)   */\n\n    p = (BYTE *)pModule + pModule->ne_restab;\n    memcpy( module, p + 1, *p );\n    module[*p] = 0;\n\n    while (*p)\n    {\n        p += *p + 1 + sizeof(WORD);\n        if (*(WORD *)(p + *p + 1) == *pOrd) break;\n    }\n    memcpy( func, p + 1, *p );\n    func[*p] = 0;\n\n    end:\n    /* Retrieve entry point call structure */\n    p = MapSL( MAKESEGPTR( frame->module_cs, frame->callfrom_ip ) );\n    /* p now points to lret, get the start of CALLFROM16 structure */\n    return (CALLFROM16 *)(p - FIELD_OFFSET( CALLFROM16, ret ));\n}\n#ifdef _MSC_VER\nextern int call_entry_point(void *func, int nb_args, const int *args)\n{\n\t//ERR(\"call_entry_point(%p, %d, %p)\", func, nb_args, args);\n\tsize_t oldESP;\n\t__asm\n\t{\n\t\tmov oldESP, ESP\n\t}\n\tint a;\n\tfor (int i = nb_args - 1; i >= 0; i--)\n\t{\n\t\ta = args[i];\n\t\t__asm\n\t\t{\n\t\t\tpush a\n\t\t}\n\t}\n\tint ret;\n\t__asm\n\t{\n\t\tcall func\n\t\tmov ret, eax\n\t\tmov ESP, oldESP\n\t}\n\t\n\t//((int(WINAPI*)(void))func)();\n\treturn ret;\n}\n#else\nextern int call_entry_point( void *func, int nb_args, const int *args );\n__ASM_GLOBAL_FUNC( _call_entry_point,\n                   \"pushl %ebp\\n\\t\"\n                   __ASM_CFI(\".cfi_adjust_cfa_offset 4\\n\\t\")\n                   __ASM_CFI(\".cfi_rel_offset %ebp,0\\n\\t\")\n                   \"movl %esp,%ebp\\n\\t\"\n                   __ASM_CFI(\".cfi_def_cfa_register %ebp\\n\\t\")\n                   \"pushl %esi\\n\\t\"\n                   __ASM_CFI(\".cfi_rel_offset %esi,-4\\n\\t\")\n                   \"pushl %edi\\n\\t\"\n                   __ASM_CFI(\".cfi_rel_offset %edi,-8\\n\\t\")\n                   \"movl 12(%ebp),%edx\\n\\t\"\n                   \"shll $2,%edx\\n\\t\"\n                   \"jz 1f\\n\\t\"\n                   \"subl %edx,%esp\\n\\t\"\n                   \"andl $~15,%esp\\n\\t\"\n                   \"movl 12(%ebp),%ecx\\n\\t\"\n                   \"movl 16(%ebp),%esi\\n\\t\"\n                   \"movl %esp,%edi\\n\\t\"\n                   \"cld\\n\\t\"\n                   \"rep; movsl\\n\"\n                   \"1:\\tcall *8(%ebp)\\n\\t\"\n                   \"leal -8(%ebp),%esp\\n\\t\"\n                   \"popl %edi\\n\\t\"\n                   __ASM_CFI(\".cfi_same_value %edi\\n\\t\")\n                   \"popl %esi\\n\\t\"\n                   __ASM_CFI(\".cfi_same_value %esi\\n\\t\")\n                   \"popl %ebp\\n\\t\"\n                   __ASM_CFI(\".cfi_def_cfa %esp,4\\n\\t\")\n                   __ASM_CFI(\".cfi_same_value %ebp\\n\\t\")\n                   \"ret\" )\n#endif\n\n/***********************************************************************\n *           relay_call_from_16_no_debug\n *\n * Same as relay_call_from_16 but doesn't print any debug information.\n */\nstatic int relay_call_from_16_no_debug( void *entry_point, unsigned char *args16, CONTEXT *context,\n                                        const CALLFROM16 *call )\n{\n    unsigned int i, j, nb_args = 0;\n    int args32[20];\n\n    /* look for the ret instruction */\n    for (j = 0; j < ARRAY_SIZE(call->ret); j++)\n        if (call->ret[j] == 0xca || call->ret[j] == 0xcb) break;\n\n    if (call->ret[j] == 0xcb)  /* cdecl */\n    {\n        for (i = 0; i < 20; i++, nb_args++)\n        {\n            int type = (call->arg_types[i / 10] >> (3 * (i % 10))) & 7;\n\n            if (type == ARG_NONE) break;\n            switch(type)\n            {\n            case ARG_WORD:\n                args32[nb_args] = *(WORD *)args16;\n                args16 += sizeof(WORD);\n                break;\n            case ARG_SWORD:\n                args32[nb_args] = *(short *)args16;\n                args16 += sizeof(WORD);\n                break;\n            case ARG_LONG:\n            case ARG_SEGSTR:\n                args32[nb_args] = *(int *)args16;\n                args16 += sizeof(int);\n                break;\n            case ARG_PTR:\n            case ARG_STR:\n                args32[nb_args] = (int)MapSL( *(SEGPTR *)args16 );\n                args16 += sizeof(SEGPTR);\n                break;\n            case ARG_VARARG:\n                args32[nb_args] = (int)args16;\n                break;\n            default:\n                break;\n            }\n        }\n    }\n    else  /* not cdecl */\n    {\n        /* Start with the last arg */\n        args16 += call->ret[j + 1];\n        for (i = 0; i < 20; i++, nb_args++)\n        {\n            int type = (call->arg_types[i / 10] >> (3 * (i % 10))) & 7;\n\n            if (type == ARG_NONE) break;\n            switch(type)\n            {\n            case ARG_WORD:\n                args16 -= sizeof(WORD);\n                args32[nb_args] = *(WORD *)args16;\n                break;\n            case ARG_SWORD:\n                args16 -= sizeof(WORD);\n                args32[nb_args] = *(short *)args16;\n                break;\n            case ARG_LONG:\n            case ARG_SEGSTR:\n                args16 -= sizeof(int);\n                args32[nb_args] = *(int *)args16;\n                break;\n            case ARG_PTR:\n            case ARG_STR:\n                args16 -= sizeof(SEGPTR);\n                args32[nb_args] = (int)MapSL( *(SEGPTR *)args16 );\n                break;\n            default:\n                break;\n            }\n        }\n    }\n\n    if (!j)  /* register function */\n        args32[nb_args++] = (int)context;\n\n    SYSLEVEL_CheckNotLevel( 2 );\n\n    return call_entry_point( entry_point, nb_args, args32 );\n}\n\n\n__declspec(dllexport) void vm_debug_get_entry_point(char *module, char *func, WORD *ordinal, STACK16FRAME *frame)\n{\n    if (!frame)\n        frame = CURRENT_STACK16;\n    //FIXME:security\n    const CALLFROM16 *call;\n    call = get_entry_point(frame, module, func, ordinal);\n}\n/***********************************************************************\n *           relay_call_from_16\n *\n * Replacement for the 16-bit relay functions when relay debugging is on.\n */\nint relay_call_from_16( void *entry_point, unsigned char *args16, CONTEXT *context )\n{\n    STACK16FRAME *frame;\n    WORD ordinal;\n    unsigned int i, j, nb_args = 0;\n    int ret_val, args32[20];\n    char module[10], func[64];\n    const CALLFROM16 *call;\n\n    frame = CURRENT_STACK16;\n    call = get_entry_point( frame, module, func, &ordinal );\n    if (!call)\n    {\n        if (frame->relay != relay_call_from_16)\n        {\n            /* workaround for snoop */\n            return ((int(WINAPI/*stdcall?*/*)(void *entry_point, unsigned char *args16, CONTEXT *context))(frame->relay))(entry_point, args16, context);\n        }\n    }\n    if (!TRACE_ON(relay) || !RELAY_ShowDebugmsgRelay( module, ordinal, func ))\n        return relay_call_from_16_no_debug( entry_point, args16, context, call );\n\n    DPRINTF( \"%04x:Call %s.%d: %s(\",GetCurrentThreadId(), module, ordinal, func );\n\n    /* look for the ret instruction */\n    for (j = 0; j < ARRAY_SIZE(call->ret); j++)\n        if (call->ret[j] == 0xca || call->ret[j] == 0xcb) break;\n\n    if (call->ret[j] == 0xcb)  /* cdecl */\n    {\n        for (i = 0; i < 20; i++, nb_args++)\n        {\n            int type = (call->arg_types[i / 10] >> (3 * (i % 10))) & 7;\n\n            if (type == ARG_NONE) break;\n            if (i) DPRINTF( \",\" );\n            switch(type)\n            {\n            case ARG_WORD:\n                DPRINTF( \"%04x\", *(WORD *)args16 );\n                args32[nb_args] = *(WORD *)args16;\n                args16 += sizeof(WORD);\n                break;\n            case ARG_SWORD:\n                DPRINTF( \"%04x\", *(WORD *)args16 );\n                args32[nb_args] = *(short *)args16;\n                args16 += sizeof(WORD);\n                break;\n            case ARG_LONG:\n                DPRINTF( \"%08x\", *(int *)args16 );\n                args32[nb_args] = *(int *)args16;\n                args16 += sizeof(int);\n                break;\n            case ARG_PTR:\n                DPRINTF( \"%04x:%04x\", *(WORD *)(args16+2), *(WORD *)args16 );\n                args32[nb_args] = (int)MapSL( *(SEGPTR *)args16 );\n                args16 += sizeof(SEGPTR);\n                break;\n            case ARG_STR:\n                DPRINTF( \"%08x %s\", *(int *)args16,\n                         debugstr_a( MapSL(*(SEGPTR *)args16 )));\n                args32[nb_args] = (int)MapSL( *(SEGPTR *)args16 );\n                args16 += sizeof(int);\n                break;\n            case ARG_SEGSTR:\n                DPRINTF( \"%04x:%04x %s\", *(WORD *)(args16+2), *(WORD *)args16,\n                         debugstr_a( MapSL(*(SEGPTR *)args16 )) );\n                args32[nb_args] = *(SEGPTR *)args16;\n                args16 += sizeof(SEGPTR);\n                break;\n            case ARG_VARARG:\n                DPRINTF( \"...\" );\n                args32[nb_args] = (int)args16;\n                break;\n            default:\n                break;\n            }\n        }\n    }\n    else  /* not cdecl */\n    {\n        /* Start with the last arg */\n        args16 += call->ret[j + 1];\n        for (i = 0; i < 20; i++, nb_args++)\n        {\n            int type = (call->arg_types[i / 10] >> (3 * (i % 10))) & 7;\n\n            if (type == ARG_NONE) break;\n            if (i) DPRINTF( \",\" );\n            switch(type)\n            {\n            case ARG_WORD:\n                args16 -= sizeof(WORD);\n                args32[nb_args] = *(WORD *)args16;\n                DPRINTF( \"%04x\", *(WORD *)args16 );\n                break;\n            case ARG_SWORD:\n                args16 -= sizeof(WORD);\n                args32[nb_args] = *(short *)args16;\n                DPRINTF( \"%04x\", *(WORD *)args16 );\n                break;\n            case ARG_LONG:\n                args16 -= sizeof(int);\n                args32[nb_args] = *(int *)args16;\n                DPRINTF( \"%08x\", *(int *)args16 );\n                break;\n            case ARG_PTR:\n                args16 -= sizeof(SEGPTR);\n                args32[nb_args] = (int)MapSL( *(SEGPTR *)args16 );\n                DPRINTF( \"%04x:%04x\", *(WORD *)(args16+2), *(WORD *)args16 );\n                break;\n            case ARG_STR:\n                args16 -= sizeof(int);\n                args32[nb_args] = (int)MapSL( *(SEGPTR *)args16 );\n                DPRINTF( \"%08x %s\", *(int *)args16,\n                         debugstr_a( MapSL(*(SEGPTR *)args16 )));\n                break;\n            case ARG_SEGSTR:\n                args16 -= sizeof(SEGPTR);\n                args32[nb_args] = *(SEGPTR *)args16;\n                DPRINTF( \"%04x:%04x %s\", *(WORD *)(args16+2), *(WORD *)args16,\n                         debugstr_a( MapSL(*(SEGPTR *)args16 )) );\n                break;\n            case ARG_VARARG:\n                DPRINTF( \"...\" );\n                args32[nb_args] = (int)args16;\n                break;\n            default:\n                break;\n            }\n        }\n    }\n\n    DPRINTF( \") ret=%04x:%04x ds=%04x\\n\", frame->cs, frame->ip, frame->ds );\n\n    if (!j)  /* register function */\n    {\n        args32[nb_args++] = (int)context;\n        DPRINTF(\"     AX=%04x BX=%04x CX=%04x DX=%04x SI=%04x DI=%04x ES=%04x EFL=%08x\\n\",\n                (WORD)context->Eax, (WORD)context->Ebx, (WORD)context->Ecx,\n                (WORD)context->Edx, (WORD)context->Esi, (WORD)context->Edi,\n                (WORD)context->SegEs, context->EFlags );\n    }\n\n    SYSLEVEL_CheckNotLevel( 2 );\n\n    ret_val = call_entry_point( entry_point, nb_args, args32 );\n\n    SYSLEVEL_CheckNotLevel( 2 );\n\n    DPRINTF( \"%04x:Ret  %s.%d: %s() \",GetCurrentThreadId(), module, ordinal, func );\n    if (!j)  /* register function */\n    {\n        DPRINTF(\"retval=none ret=%04x:%04x ds=%04x\\n\",\n                (WORD)context->SegCs, LOWORD(context->Eip), (WORD)context->SegDs);\n        DPRINTF(\"     AX=%04x BX=%04x CX=%04x DX=%04x SI=%04x DI=%04x ES=%04x EFL=%08x\\n\",\n                (WORD)context->Eax, (WORD)context->Ebx, (WORD)context->Ecx,\n                (WORD)context->Edx, (WORD)context->Esi, (WORD)context->Edi,\n                (WORD)context->SegEs, context->EFlags );\n    }\n    else\n    {\n        frame = CURRENT_STACK16;  /* might have be changed by the entry point */\n        if (j == 1)  /* 16-bit return sequence */\n            DPRINTF( \"retval=%04x ret=%04x:%04x ds=%04x\\n\",\n                     ret_val & 0xffff, frame->cs, frame->ip, frame->ds );\n        else\n            DPRINTF( \"retval=%08x ret=%04x:%04x ds=%04x\\n\",\n                     ret_val, frame->cs, frame->ip, frame->ds );\n    }\n    return ret_val;\n}\n\n/**********************************************************************\n *          RELAY_GetPointer\n *\n * Get pointer to stack block when given esp pointing to 16-bit stack\n * inside relay data segment.\n */\nstatic RELAY_Stack16 *RELAY_GetPointer( DWORD offset )\n{\n    offset = offset / sizeof(RELAY_Stack16) * sizeof(RELAY_Stack16);\n    return MapSL(MAKESEGPTR(DOSVM_dpmi_segments->relay_data_sel, offset));\n}\n\n\n/**********************************************************************\n *          RELAY_MakeShortContext\n *\n * Allocate separate 16-bit stack, make stack pointer point to this\n * stack and make code pointer point to stub that restores everything.\n * So, after this routine, SS and CS are guaranteed to be 16-bit.\n *\n * Note: This might be called from signal handler, so the stack\n *       allocation algorithm must be signal safe.\n */\nstatic void RELAY_MakeShortContext( CONTEXT *context )\n{\n    DWORD offset = offsetof(RELAY_Stack16, stack_top);\n    RELAY_Stack16 *stack = RELAY_GetPointer( 0 );\n\n    while (stack->inuse && offset < DOSVM_RELAY_DATA_SIZE) {\n        stack++;\n        offset += sizeof(RELAY_Stack16);\n    }\n\n    if (offset >= DOSVM_RELAY_DATA_SIZE)\n        ERR( \"Too many nested interrupts!\\n\" );\n\n    stack->inuse = 1;\n    stack->eip = context->Eip;\n    stack->seg_cs = context->SegCs;\n    stack->esp = context->Esp;\n    stack->seg_ss = context->SegSs;\n\n    stack->stack_bottom = RELAY_MAGIC;\n    stack->stack_top = RELAY_MAGIC;\n\n    context->SegSs = DOSVM_dpmi_segments->relay_data_sel;\n    context->Esp = offset;\n    context->SegCs = DOSVM_dpmi_segments->relay_code_sel;\n    context->Eip = 3;\n}\n\n\n/**********************************************************************\n *          RELAY_RelayStub\n *\n * This stub is called by __wine_call_from_16_regs in order to marshall\n * relay parameters.\n */\nstatic void __stdcall RELAY_RelayStub( DOSRELAY proc, unsigned char *args, CONTEXT *context )\n{\n    if (proc)\n    {\n        RELAY_Stack16 *stack = RELAY_GetPointer( context->Esp );\n\n        DWORD old_seg_cs = context->SegCs;\n        DWORD old_eip    = context->Eip;\n        DWORD old_seg_ss = context->SegSs;\n        DWORD old_esp    = context->Esp;\n\n        context->SegCs = stack->seg_cs;\n        context->Eip   = stack->eip;\n        context->SegSs = stack->seg_ss;\n        context->Esp   = stack->esp;\n\n        proc( context, *(LPVOID *)args );\n\n        stack->seg_cs = context->SegCs;\n        stack->eip    = context->Eip;\n        stack->seg_ss = context->SegSs;\n        stack->esp    = context->Esp;\n\n        context->SegCs = old_seg_cs;\n        context->Eip   = old_eip;\n        context->SegSs = old_seg_ss;\n        context->Esp   = old_esp;\n    }\n}\n\n\n/**********************************************************************\n *          DOSVM_RelayHandler\n *\n * Restore saved code and stack pointers and release stack block.\n */\nvoid DOSVM_RelayHandler( CONTEXT *context )\n{\n    RELAY_Stack16 *stack = RELAY_GetPointer( context->Esp );\n\n    context->SegSs = stack->seg_ss;\n    context->Esp = stack->esp;\n    context->SegCs = stack->seg_cs;\n    context->Eip = stack->eip;\n\n    if (!stack->inuse ||\n        stack->stack_bottom != RELAY_MAGIC ||\n        stack->stack_top != RELAY_MAGIC)\n        ERR( \"Stack corrupted!\\n\" );\n\n    stack->inuse = 0;\n}\n\n\n/**********************************************************************\n *          DOSVM_BuildCallFrame\n *\n * Modifies the context so that return to context calls DOSRELAY and\n * only after return from DOSRELAY the original context will be returned to.\n */\nvoid DOSVM_BuildCallFrame( CONTEXT *context, DOSRELAY relay, LPVOID data )\n{\n    WORD  code_sel = DOSVM_dpmi_segments->relay_code_sel;\n\n    /*\n     * Allocate separate stack for relay call.\n     */\n    RELAY_MakeShortContext( context );\n\n    /*\n     * Build call frame.\n     */\n    PUSH_WORD16( context, HIWORD(data) );            /* argument.hiword */\n    PUSH_WORD16( context, LOWORD(data) );            /* argument.loword */\n    PUSH_WORD16( context, context->SegCs );          /* STACK16FRAME.cs */\n    PUSH_WORD16( context, LOWORD(context->Eip) );    /* STACK16FRAME.ip */\n    PUSH_WORD16( context, LOWORD(context->Ebp) );    /* STACK16FRAME.bp */\n    PUSH_WORD16( context, HIWORD(relay) );           /* STACK16FRAME.entry_point.hiword */\n    PUSH_WORD16( context, LOWORD(relay) );           /* STACK16FRAME.entry_point.loword */\n    PUSH_WORD16( context, 0 );                       /* STACK16FRAME.entry_ip */\n    PUSH_WORD16( context, HIWORD(RELAY_RelayStub) ); /* STACK16FRAME.relay.hiword */\n    PUSH_WORD16( context, LOWORD(RELAY_RelayStub) ); /* STACK16FRAME.relay.loword */\n    PUSH_WORD16( context, 0 );                       /* STACK16FRAME.module_cs.hiword */\n    PUSH_WORD16( context, code_sel );                /* STACK16FRAME.module_cs.loword */\n    PUSH_WORD16( context, 0 );                       /* STACK16FRAME.callfrom_ip.hiword */\n    PUSH_WORD16( context, 0 );                       /* STACK16FRAME.callfrom_ip.loword */\n\n    /*\n     * Adjust code pointer.\n     */\n    context->SegCs = wine_get_cs();\n    context->Eip = (DWORD)__wine_call_from_16_regs;\n}\nstatic CALLFROM16 ret_pascal_32bit_template;\nstatic CALLFROM16 ret_cdecl_32bit_template;\n\nstatic void init_arg_types(unsigned int *arg_types, const char *args, int *arg_size)\n{\n    int nop_words, pos, j;\n    size_t len = strlen(args);\n\n\n    /* build the arg types bit fields */\n    arg_types[0] = arg_types[1] = 0;\n    for (j = pos = 0; j < len && pos < 20; j++, pos++)\n    {\n        int type = 0;\n        switch (args[j])\n        {\n        case 'w':\n            *arg_size += 2;\n            type = ARG_WORD;\n            break;\n        case 's':\n            *arg_size += 4;\n            type = ARG_LONG;\n            break;\n        case 'l':\n            *arg_size += 4;\n            type = ARG_LONG;\n            break;\n        case 'p':\n            *arg_size += 4;\n            type = ARG_PTR;\n            break;\n        case 'S':\n            *arg_size += 4;\n            type = ARG_STR;\n            break;\n        }\n        if (pos < 20) arg_types[pos / 10] |= type << (3 * (pos % 10));\n    }\n}\nstatic BOOL init_template;\nstatic void init_template_func(CALLFROM16 *dest, const char *func)\n{\n    HMODULE16 krnl;\n    const unsigned char *ret32;\n    krnl = GetModuleHandle16(\"KERNEL\");\n    ret32 = (const unsigned char *)MapSL(GetProcAddress16(krnl, func));\n    assert(\n        ret32[0] == 0x55 /* push bp */ && ret32[1] == 0x66 /* prefix */ &&\n        ret32[2] == 0x68 /* push */ && ret32[7] == 0xe8 /* call rel */);\n    *dest = *(CALLFROM16*)(ret32 + RTL_SIZEOF_THROUGH_FIELD(ENTRYPOINT16, callfrom16) + ((ENTRYPOINT16*)ret32)->callfrom16);\n}\n/*\nw: word\nl: long\np: ptr\ns: segptr\nS: str\nmake_thunk_32(func, \"lpws\", \"name\", TRUE, FALSE, FALSE)\n*/\nSEGPTR make_thunk_32(void *funcptr, const char *arguments, const char *name, BOOL ret_32bit, BOOL reg_func, BOOL is_cdecl)\n{\n    PROC16_RELAY *relay;\n    int arg_size = 0;\n    assert(!reg_func);\n    assert(ret_32bit);\n    if (!thunk32_relay_array)\n    {\n        thunk32_relay_segment = GLOBAL_Alloc(GMEM_ZEROINIT, 0x10000, GetModuleHandle16(\"KERNEL\"), WINE_LDT_FLAGS_CODE, 0);\n        thunk32_relay_array = GlobalLock16(thunk32_relay_segment);\n    }\n    for (int i = 0; i < 0x10000 / sizeof(PROC16_RELAY); i++)\n    {\n        if (!thunk32_relay_array[i].used)\n        {\n            relay = thunk32_relay_array + i;\n            break;\n        }\n    }\n    relay->used = TRUE;\n    relay->pushw_bp = 0x55;\n    relay->pushl = 0x6866;\n    relay->funcptr = (DWORD)funcptr;\n    relay->call_near = 0xe8;\n    relay->call_to = 0;\n    relay->name = name;\n    if (!init_template)\n    {\n        init_template_func(&ret_pascal_32bit_template, \"GetCodeHandle\");\n        init_template_func(&ret_cdecl_32bit_template, \"WOW16Call\");\n    }\n    if (is_cdecl)\n    {\n        relay->call = ret_cdecl_32bit_template;\n    }\n    else\n    {\n        relay->call = ret_pascal_32bit_template;\n    }\n    init_arg_types(&relay->call.arg_types, arguments, &arg_size);\n    if (!is_cdecl)\n    {\n        int i;\n        for (i = 0; i < ARRAY_SIZE(relay->call.ret); i++)\n        {\n            if (relay->call.ret[i] == 0xca)\n            {\n                relay->call.ret[i + 1] = arg_size;\n                break;\n            }\n        }\n    }\n    return MAKESEGPTR(thunk32_relay_segment, (relay - thunk32_relay_array) * sizeof(PROC16_RELAY));\n}\nvoid free_thunk_32(SEGPTR thunk)\n{\n    ((PROC16_RELAY*)MapSL(thunk))->used = FALSE;\n}\n\ntypedef BOOL (WINAPI *vm_inject_t)(DWORD vpfn16, DWORD dwFlags,\n    DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode);\n\nstatic vm_inject_t vm_inject_cb = NULL;\n\nvoid WINAPI set_vm_inject_cb(vm_inject_t cb)\n{\n    if (!vm_inject_cb)\n        vm_inject_cb = cb;\n}\n\nBOOL WINAPI vm_inject(DWORD vpfn16, DWORD dwFlags,\n        DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode)\n{\n    if (!vm_inject_cb)\n        return WOWCallback16Ex(vpfn16, dwFlags, cbArgs, pArgs, pdwRetCode);\n    return vm_inject_cb(vpfn16, dwFlags, cbArgs, pArgs, pdwRetCode);\n}\n"
  },
  {
    "path": "krnl386/resource.c",
    "content": "/*\n * 16-bit resource functions\n *\n * Copyright 1993 Robert J. Amstadt\n * Copyright 1997 Alex Korobka\n * Copyright 1998 Ulrich Weigand\n * Copyright 1995, 2003 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdarg.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <sys/types.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"windows/wownt32.h\"\n#include \"wine/winbase16.h\"\n#include \"wine/winuser16.h\"\n#include \"wine/unicode.h\"\n#include \"kernel16_private.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(resource);\n\n/* handle conversions */\n#define HRSRC_32(h16)   ((HRSRC)(ULONG_PTR)(h16))\n#define HGLOBAL_32(h16) ((HGLOBAL)(ULONG_PTR)(h16))\n\nstatic inline NE_MODULE *get_module( HMODULE16 mod )\n{\n    if (!mod) mod = TASK_GetCurrent()->hModule;\n    return NE_GetPtr( mod );\n}\n\n#define HRSRC_MAP_BLOCKSIZE 16\n\ntypedef struct _HRSRC_ELEM\n{\n    HRSRC hRsrc;\n    WORD  type;\n} HRSRC_ELEM;\n\ntypedef struct _HRSRC_MAP\n{\n    int nAlloc;\n    int nUsed;\n    HRSRC_ELEM *elem;\n} HRSRC_MAP;\n\n\n/**********************************************************************\n *          MapHRsrc32To16\n */\nstatic HRSRC16 MapHRsrc32To16( NE_MODULE *pModule, HRSRC hRsrc32, WORD type )\n{\n    HRSRC_MAP *map = pModule->rsrc32_map;\n    HRSRC_ELEM *newElem;\n    int i;\n\n    /* On first call, initialize HRSRC map */\n    if ( !map )\n    {\n        if ( !(map = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(HRSRC_MAP) ) ) )\n        {\n            ERR(\"Cannot allocate HRSRC map\\n\" );\n            return 0;\n        }\n        pModule->rsrc32_map = map;\n    }\n\n    /* Check whether HRSRC32 already in map */\n    for ( i = 0; i < map->nUsed; i++ )\n        if ( map->elem[i].hRsrc == hRsrc32 )\n            return (HRSRC16)(i + 1);\n\n    /* If no space left, grow table */\n    if ( map->nUsed == map->nAlloc )\n    {\n\n\tif (map->elem)\n    \t    newElem = HeapReAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY,\n                    map->elem, (map->nAlloc + HRSRC_MAP_BLOCKSIZE) * sizeof(HRSRC_ELEM) );\n\telse\n    \t    newElem = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY,\n                    (map->nAlloc + HRSRC_MAP_BLOCKSIZE) * sizeof(HRSRC_ELEM) );\n\n        if ( !newElem )\n        {\n            ERR(\"Cannot grow HRSRC map\\n\" );\n            return 0;\n        }\n        map->elem = newElem;\n        map->nAlloc += HRSRC_MAP_BLOCKSIZE;\n    }\n\n    /* Add HRSRC32 to table */\n    map->elem[map->nUsed].hRsrc = hRsrc32;\n    map->elem[map->nUsed].type  = type;\n    map->nUsed++;\n\n    return (HRSRC16)map->nUsed;\n}\n\n/**********************************************************************\n *          MapHRsrc16To32\n */\nstatic HRSRC MapHRsrc16To32( NE_MODULE *pModule, HRSRC16 hRsrc16 )\n{\n    HRSRC_MAP *map = pModule->rsrc32_map;\n    if ( !map || !hRsrc16 || hRsrc16 > map->nUsed ) return 0;\n\n    return map->elem[hRsrc16-1].hRsrc;\n}\n\n/**********************************************************************\n *          MapHRsrc16ToType\n */\nstatic WORD MapHRsrc16ToType( NE_MODULE *pModule, HRSRC16 hRsrc16 )\n{\n    HRSRC_MAP *map = pModule->rsrc32_map;\n    if ( !map || !hRsrc16 || hRsrc16 > map->nUsed ) return 0;\n\n    return map->elem[hRsrc16-1].type;\n}\n\n\n/**********************************************************************\n *          get_res_name\n *\n * Convert a resource name from '#xxx' form to numerical id.\n */\nstatic inline LPCSTR get_res_name( LPCSTR name )\n{\n    if (HIWORD(name) && name[0] == '#') name = MAKEINTRESOURCEA( atoi( name + 1 ) );\n    return name;\n}\n\n\n/**********************************************************************\n *          next_typeinfo\n */\nstatic inline NE_TYPEINFO *next_typeinfo( NE_TYPEINFO *info )\n{\n    return (NE_TYPEINFO *)((char*)(info + 1) + info->count * sizeof(NE_NAMEINFO));\n}\n\n\n/**********************************************************************\n *          get_default_res_handler\n */\nstatic inline FARPROC16 get_default_res_handler(void)\n{\n    static FARPROC16 handler;\n\n    if (!handler) handler = GetProcAddress16( GetModuleHandle16(\"KERNEL\"), \"DefResourceHandler\" );\n    return handler;\n}\n\n\n/***********************************************************************\n *           NE_FindNameTableId\n *\n * Find the type and resource id from their names.\n * Return value is MAKELONG( typeId, resId ), or 0 if not found.\n */\nstatic DWORD NE_FindNameTableId( NE_MODULE *pModule, LPCSTR typeId, LPCSTR resId )\n{\n    NE_TYPEINFO *pTypeInfo = (NE_TYPEINFO *)((char *)pModule + pModule->ne_rsrctab + 2);\n    NE_NAMEINFO *pNameInfo;\n    HGLOBAL16 handle;\n    WORD *p;\n    DWORD ret = 0;\n    int count;\n\n    for (; pTypeInfo->type_id != 0;\n           pTypeInfo = (NE_TYPEINFO *)((char*)(pTypeInfo+1) +\n                                        pTypeInfo->count * sizeof(NE_NAMEINFO)))\n    {\n        if (pTypeInfo->type_id != 0x800f) continue;\n        pNameInfo = (NE_NAMEINFO *)(pTypeInfo + 1);\n        for (count = pTypeInfo->count; count > 0; count--, pNameInfo++)\n        {\n            TRACE(\"NameTable entry: type=%04x id=%04x\\n\",\n                              pTypeInfo->type_id, pNameInfo->id );\n            handle = LoadResource16( pModule->self,\n                                     (HRSRC16)((char *)pNameInfo - (char *)pModule) );\n            for(p = LockResource16(handle); p && *p; p = (WORD *)((char*)p+*p))\n            {\n                TRACE(\"  type=%04x '%s' id=%04x '%s'\\n\",\n                                  p[1], (char *)(p+3), p[2],\n                                  (char *)(p+3)+strlen((char *)(p+3))+1 );\n                /* Check for correct type */\n\n                if (p[1] & 0x8000)\n                {\n                    if (!HIWORD(typeId)) continue;\n                    if (strcasecmp( typeId, (char *)(p + 3) )) continue;\n                }\n                else if (HIWORD(typeId) || (((DWORD)typeId & ~0x8000)!= p[1]))\n                  continue;\n\n                /* Now check for the id */\n\n                if (p[2] & 0x8000)\n                {\n                    if (HIWORD(resId))\n                    {\n                        if (strcasecmp( resId, (char*)(p+3)+strlen((char*)(p+3))+1 ))\n                            continue;\n                    }\n                    else\n                    {\n                        if (LOWORD(resId) != p[2])\n                            continue;\n                    }\n                }\n                else if (HIWORD(resId) || ((LOWORD(resId) & ~0x8000) != p[2]))\n                  continue;\n\n                /* If we get here, we've found the entry */\n\n                TRACE(\"  Found!\\n\" );\n                ret = MAKELONG( p[1], p[2] );\n                break;\n            }\n            FreeResource16( handle );\n            if (ret) return ret;\n        }\n    }\n    return 0;\n}\n\n\n/***********************************************************************\n *           NE_FindTypeSection\n *\n * Find header struct for a particular resource type.\n */\nstatic NE_TYPEINFO *NE_FindTypeSection( LPBYTE pResTab, NE_TYPEINFO *pTypeInfo, LPCSTR typeId )\n{\n    /* start from pTypeInfo */\n\n    if (HIWORD(typeId) != 0)  /* Named type */\n    {\n        LPCSTR str = typeId;\n        BYTE len = strlen( str );\n        while (pTypeInfo->type_id)\n        {\n            if (!(pTypeInfo->type_id & 0x8000))\n            {\n                BYTE *p = pResTab + pTypeInfo->type_id;\n                if ((*p == len) && !strncasecmp( (char*)p+1, str, len ))\n                {\n                    TRACE(\"  Found type '%s'\\n\", str );\n                    return pTypeInfo;\n                }\n            }\n            TRACE(\"  Skipping type %04x\\n\", pTypeInfo->type_id );\n            pTypeInfo = next_typeinfo(pTypeInfo);\n        }\n    }\n    else  /* Numeric type id */\n    {\n        WORD id = LOWORD(typeId) | 0x8000;\n        while (pTypeInfo->type_id)\n        {\n            if (pTypeInfo->type_id == id)\n            {\n                TRACE(\"  Found type %04x\\n\", id );\n                return pTypeInfo;\n            }\n            TRACE(\"  Skipping type %04x\\n\", pTypeInfo->type_id );\n            pTypeInfo = next_typeinfo(pTypeInfo);\n        }\n    }\n    return NULL;\n}\n\n\n/***********************************************************************\n *           NE_FindResourceFromType\n *\n * Find a resource once the type info structure has been found.\n */\nstatic NE_NAMEINFO *NE_FindResourceFromType( LPBYTE pResTab, NE_TYPEINFO *pTypeInfo, LPCSTR resId )\n{\n    BYTE *p;\n    int count;\n    NE_NAMEINFO *pNameInfo = (NE_NAMEINFO *)(pTypeInfo + 1);\n\n    if (HIWORD(resId) != 0)  /* Named resource */\n    {\n        LPCSTR str = resId;\n        BYTE len = strlen( str );\n        for (count = pTypeInfo->count; count > 0; count--, pNameInfo++)\n        {\n            if (pNameInfo->id & 0x8000) continue;\n            p = pResTab + pNameInfo->id;\n            if ((*p == len) && !strncasecmp( (char*)p+1, str, len ))\n                return pNameInfo;\n        }\n    }\n    else  /* Numeric resource id */\n    {\n        WORD id = LOWORD(resId) | 0x8000;\n        for (count = pTypeInfo->count; count > 0; count--, pNameInfo++)\n            if (pNameInfo->id == id) return pNameInfo;\n    }\n    return NULL;\n}\n\n\n/***********************************************************************\n *           DefResourceHandler (KERNEL.456)\n *\n * This is the default LoadProc() function.\n */\nHGLOBAL16 WINAPI NE_DefResourceHandler( HGLOBAL16 hMemObj, HMODULE16 hModule,\n                                        HRSRC16 hRsrc )\n{\n    HGLOBAL16 handle;\n    WORD sizeShift;\n    NE_NAMEINFO* pNameInfo;\n    NE_MODULE* pModule = NE_GetPtr( hModule );\n\n    if (!pModule) return 0;\n\n    sizeShift = *(WORD *)((char *)pModule + pModule->ne_rsrctab);\n    pNameInfo = (NE_NAMEINFO *)((char *)pModule + hRsrc);\n\n    if ( hMemObj )\n        handle = GlobalReAlloc16( hMemObj, pNameInfo->length << sizeShift, 0 );\n    else\n        handle = AllocResource16( hModule, hRsrc, 0 );\n\n    if (handle)\n    {\n        if (!NE_READ_DATA( pModule, GlobalLock16( handle ),\n                           (int)pNameInfo->offset << sizeShift,\n                           (int)pNameInfo->length << sizeShift ))\n        {\n            GlobalFree16( handle );\n            handle = 0;\n        }\n    }\n    return handle;\n}\n\n\n/**********************************************************************\n *\tSetResourceHandler\t(KERNEL.67)\n */\nFARPROC16 WINAPI SetResourceHandler16( HMODULE16 hModule, LPCSTR typeId, FARPROC16 resourceHandler )\n{\n    LPBYTE pResTab;\n    NE_TYPEINFO *pTypeInfo;\n    FARPROC16 prevHandler = NULL;\n    NE_MODULE *pModule = NE_GetPtr( hModule );\n\n    if (!pModule || !pModule->ne_rsrctab) return NULL;\n\n    pResTab = (LPBYTE)pModule + pModule->ne_rsrctab;\n    pTypeInfo = (NE_TYPEINFO *)(pResTab + 2);\n\n    TRACE(\"module=%04x type=%s\\n\", hModule, debugstr_a(typeId) );\n\n    for (;;)\n    {\n        if (!(pTypeInfo = NE_FindTypeSection( pResTab, pTypeInfo, typeId )))\n            break;\n        memcpy_unaligned( &prevHandler, &pTypeInfo->resloader, sizeof(FARPROC16) );\n        memcpy_unaligned( &pTypeInfo->resloader, &resourceHandler, sizeof(FARPROC16) );\n        pTypeInfo = next_typeinfo(pTypeInfo);\n    }\n    if (!prevHandler) prevHandler = get_default_res_handler();\n    return prevHandler;\n}\n\nstatic inline DWORD get_dword(LPCVOID *p)\n{\n    DWORD ret = *(const DWORD *)*p;\n    *p = (const DWORD *)*p + 1;\n    return ret;\n}\n\nstatic inline void put_dword(LPVOID *p, DWORD d)\n{\n    *(DWORD*)*p = d;\n    *p = (DWORD *)*p + 1;\n}\n\nstatic inline WORD get_word(LPCVOID *p)\n{\n    WORD ret = *(const WORD *)*p;\n    *p = (const WORD *)*p + 1;\n    return ret;\n}\n\nstatic inline void put_word(LPVOID *p, WORD w)\n{\n    *(WORD*)*p = w;\n    *p = (WORD *)*p + 1;\n}\n\nstatic inline BYTE get_byte(LPCVOID *p)\n{\n    BYTE ret = *(const BYTE *)*p;\n    *p = (const BYTE *)*p + 1;\n    return ret;\n}\n\nstatic inline void put_byte(LPVOID *p, BYTE b)\n{\n    *(BYTE *)*p = b;\n    *p = (BYTE *)*p + 1;\n}\n\n/* convert a resource name */\nstatic void convert_name( LPVOID *dst, LPCVOID *src )\n{\n    int len;\n    switch (*(const WORD *)*src)\n    {\n    case 0x0000:\n        get_word( src );\n        put_byte( dst, 0 );\n        break;\n    case 0xffff:\n        get_word( src );\n        put_byte( dst, 0xff );\n        put_word( dst, get_word(src) );\n        break;\n    default:\n        len = WideCharToMultiByte( CP_ACP, 0, *src, -1, *dst, 0x7fffffff, NULL,NULL );\n        *dst = (char *)*dst + len;\n        *src = (LPCWSTR)*src + strlenW( *src ) + 1;\n        break;\n    }\n}\n\n/**********************************************************************\n *\t    ConvertDialog32To16   (KERNEL.615)\n */\nVOID WINAPI ConvertDialog32To16( LPCVOID dialog32, DWORD size, LPVOID dialog16 )\n{\n    WORD nbItems, data, dialogEx;\n    DWORD style;\n\n    style = get_dword( &dialog32 );\n    put_dword( &dialog16, style );\n    dialogEx = (style == 0xffff0001);  /* DIALOGEX resource */\n    if (dialogEx)\n    {\n        put_dword( &dialog16, get_dword( &dialog32 ) );  /* helpID */\n        put_dword( &dialog16, get_dword( &dialog32 ) );  /* exStyle */\n        style = get_dword( &dialog32 );\n        put_dword( &dialog16, style );                   /* style */\n    }\n    else\n        dialog32 = (const DWORD *)dialog32 + 1; /* exStyle ignored in 16-bit standard dialog */\n\n    nbItems = get_word( &dialog32 );\n    put_byte( &dialog16, nbItems );\n    put_word( &dialog16, get_word( &dialog32 ) ); /* x */\n    put_word( &dialog16, get_word( &dialog32 ) ); /* y */\n    put_word( &dialog16, get_word( &dialog32 ) ); /* cx */\n    put_word( &dialog16, get_word( &dialog32 ) ); /* cy */\n\n    /* Transfer menu name */\n    convert_name( &dialog16, &dialog32 );\n\n    /* Transfer class name */\n    convert_name( &dialog16, &dialog32 );\n\n    /* Transfer window caption */\n    WideCharToMultiByte( CP_ACP, 0, dialog32, -1, dialog16, 0x7fffffff, NULL, NULL );\n    dialog16 = (LPSTR)dialog16 + strlen( dialog16 ) + 1;\n    dialog32 = (LPCWSTR)dialog32 + strlenW( dialog32 ) + 1;\n\n    /* Transfer font info */\n    if (style & DS_SETFONT)\n    {\n        put_word( &dialog16, get_word( &dialog32 ) );  /* pointSize */\n        if (dialogEx)\n        {\n            put_word( &dialog16, get_word( &dialog32 ) ); /* weight */\n            put_word( &dialog16, get_word( &dialog32 ) ); /* italic */\n        }\n        WideCharToMultiByte( CP_ACP, 0, dialog32, -1, dialog16, 0x7fffffff, NULL, NULL );  /* faceName */\n        dialog16 = (LPSTR)dialog16 + strlen( dialog16 ) + 1;\n        dialog32 = (LPCWSTR)dialog32 + strlenW( dialog32 ) + 1;\n    }\n\n    /* Transfer dialog items */\n    while (nbItems)\n    {\n        /* align on DWORD boundary (32-bit only) */\n        dialog32 = (LPCVOID)(((UINT_PTR)dialog32 + 3) & ~3);\n\n        if (dialogEx)\n        {\n            put_dword( &dialog16, get_dword( &dialog32 ) ); /* helpID */\n            put_dword( &dialog16, get_dword( &dialog32 ) ); /* exStyle */\n            put_dword( &dialog16, get_dword( &dialog32 ) ); /* style */\n        }\n        else\n        {\n            style = get_dword( &dialog32 );          /* save style */\n            dialog32 = (const DWORD *)dialog32 + 1;  /* ignore exStyle */\n        }\n\n        put_word( &dialog16, get_word( &dialog32 ) ); /* x */\n        put_word( &dialog16, get_word( &dialog32 ) ); /* y */\n        put_word( &dialog16, get_word( &dialog32 ) ); /* cx */\n        put_word( &dialog16, get_word( &dialog32 ) ); /* cy */\n\n        if (dialogEx)\n            put_dword( &dialog16, get_dword( &dialog32 ) ); /* ID */\n        else\n        {\n            put_word( &dialog16, get_word( &dialog32 ) ); /* ID */\n            put_dword( &dialog16, style );  /* style from above */\n        }\n\n        /* Transfer class name */\n        switch (*(const WORD *)dialog32)\n        {\n        case 0x0000:\n            get_word( &dialog32 );\n            put_byte( &dialog16, 0 );\n            break;\n        case 0xffff:\n            get_word( &dialog32 );\n            put_byte( &dialog16, get_word( &dialog32 ) );\n            break;\n        default:\n            WideCharToMultiByte( CP_ACP, 0, dialog32, -1, dialog16, 0x7fffffff, NULL, NULL );\n            dialog16 = (LPSTR)dialog16 + strlen( dialog16 ) + 1;\n            dialog32 = (LPCWSTR)dialog32 + strlenW( dialog32 ) + 1;\n            break;\n        }\n\n        /* Transfer window name */\n        convert_name( &dialog16, &dialog32 );\n\n        /* Transfer data */\n        data = get_word( &dialog32 );\n        if (dialogEx)\n            put_word(&dialog16, data);\n        else\n            put_byte(&dialog16,(BYTE)data);\n\n        if (data)\n        {\n            memcpy( dialog16, dialog32, data );\n            dialog16 = (BYTE *)dialog16 + data;\n            dialog32 = (const BYTE *)dialog32 + data;\n        }\n\n        /* Next item */\n        nbItems--;\n    }\n}\n\n\n/**********************************************************************\n *\t    GetDialog32Size   (KERNEL.618)\n */\nWORD WINAPI GetDialog32Size16( LPCVOID dialog32 )\n{\n    LPCVOID p = dialog32;\n    WORD nbItems, data, dialogEx;\n    DWORD style;\n\n    style = get_dword(&p);\n    dialogEx = (style == 0xffff0001);  /* DIALOGEX resource */\n    if (dialogEx)\n    {\n        p = (const DWORD *)p + 1; /* helpID */\n        p = (const DWORD *)p + 1; /* exStyle */\n        style = get_dword(&p); /* style */\n    }\n    else\n        p = (const DWORD *)p + 1; /* exStyle */\n\n    nbItems = get_word(&p);\n    p = (const WORD *)p + 1; /* x */\n    p = (const WORD *)p + 1; /* y */\n    p = (const WORD *)p + 1; /* cx */\n    p = (const WORD *)p + 1; /* cy */\n\n    /* Skip menu name */\n    switch (*(const WORD *)p)\n    {\n    case 0x0000:  p = (const WORD *)p + 1; break;\n    case 0xffff:  p = (const WORD *)p + 2; break;\n    default:      p = (LPCWSTR)p + strlenW( p ) + 1; break;\n    }\n\n    /* Skip class name */\n    switch (*(const WORD *)p)\n    {\n    case 0x0000:  p = (const WORD *)p + 1; break;\n    case 0xffff:  p = (const WORD *)p + 2; break;\n    default:      p = (LPCWSTR)p + strlenW( p ) + 1; break;\n    }\n\n    /* Skip window caption */\n    p = (LPCWSTR)p + strlenW( p ) + 1;\n\n    /* Skip font info */\n    if (style & DS_SETFONT)\n    {\n        p = (const WORD *)p + 1;  /* pointSize */\n        if (dialogEx)\n        {\n            p = (const WORD *)p + 1; /* weight */\n            p = (const WORD *)p + 1; /* italic */\n        }\n        p = (LPCWSTR)p + strlenW( p ) + 1;  /* faceName */\n    }\n\n    /* Skip dialog items */\n    while (nbItems)\n    {\n        /* align on DWORD boundary */\n        p = (LPCVOID)(((UINT_PTR)p + 3) & ~3);\n\n        if (dialogEx)\n        {\n            p = (const DWORD *)p + 1; /* helpID */\n            p = (const DWORD *)p + 1; /* exStyle */\n            p = (const DWORD *)p + 1; /* style */\n        }\n        else\n        {\n            p = (const DWORD *)p + 1; /* style */\n            p = (const DWORD *)p + 1; /* exStyle */\n        }\n\n        p = (const WORD *)p + 1; /* x */\n        p = (const WORD *)p + 1; /* y */\n        p = (const WORD *)p + 1; /* cx */\n        p = (const WORD *)p + 1; /* cy */\n\n        if (dialogEx)\n            p = (const DWORD *)p + 1; /* ID */\n        else\n            p = (const WORD *)p + 1; /* ID */\n\n        /* Skip class name */\n        switch (*(const WORD *)p)\n        {\n        case 0x0000:  p = (const WORD *)p + 1; break;\n        case 0xffff:  p = (const WORD *)p + 2; break;\n        default:      p = (LPCWSTR)p + strlenW( p ) + 1; break;\n        }\n\n        /* Skip window name */\n        switch (*(const WORD *)p)\n        {\n        case 0x0000:  p = (const WORD *)p + 1; break;\n        case 0xffff:  p = (const WORD *)p + 2; break;\n        default:      p = (LPCWSTR)p + strlenW( p ) + 1; break;\n        }\n\n        /* Skip data */\n        data = get_word(&p);\n        p = (const BYTE *)p + data;\n\n        /* Next item */\n        nbItems--;\n    }\n\n    return (WORD)((LPCSTR)p - (LPCSTR)dialog32);\n}\n\n\n/**********************************************************************\n *\t    ConvertMenu32To16   (KERNEL.616)\n */\nVOID WINAPI ConvertMenu32To16( LPCVOID menu32, DWORD size, LPVOID menu16 )\n{\n    WORD version, headersize, flags, level = 1;\n\n    version = get_word( &menu32 );\n    headersize = get_word( &menu32 );\n    put_word( &menu16, version );\n    put_word( &menu16, headersize );\n    if ( headersize )\n    {\n        memcpy( menu16, menu32, headersize );\n        menu16 = (BYTE *)menu16 + headersize;\n        menu32 = (const BYTE *)menu32 + headersize;\n    }\n\n    while ( level )\n        if ( version == 0 )  /* standard */\n        {\n            flags = get_word( &menu32 );\n            put_word( &menu16, flags );\n            if ( !(flags & MF_POPUP) )\n                put_word( &menu16, get_word( &menu32 ) );  /* ID */\n            else\n                level++;\n\n            WideCharToMultiByte( CP_ACP, 0, menu32, -1, menu16, 0x7fffffff, NULL, NULL );\n            menu16 = (LPSTR)menu16 + strlen( menu16 ) + 1;\n            menu32 = (LPCWSTR)menu32 + strlenW( menu32 ) + 1;\n\n            if ( flags & MF_END )\n                level--;\n        }\n        else  /* extended */\n        {\n            put_dword( &menu16, get_dword( &menu32 ) );  /* fType */\n            put_dword( &menu16, get_dword( &menu32 ) );  /* fState */\n            put_word( &menu16, get_dword( &menu32 ) );   /* ID */\n            flags = get_word( &menu32 );\n            put_byte(&menu16,flags);\n\n            WideCharToMultiByte( CP_ACP, 0, menu32, -1, menu16, 0x7fffffff, NULL, NULL );\n            menu16 = (LPSTR)menu16 + strlen( menu16 ) + 1;\n            menu32 = (LPCWSTR)menu32 + strlenW( menu32 ) + 1;\n\n            /* align on DWORD boundary (32-bit only) */\n            menu32 = (LPCVOID)(((UINT_PTR)menu32 + 3) & ~3);\n\n            /* If popup, transfer helpid */\n            if ( flags & 1)\n            {\n                put_dword( &menu16, get_dword( &menu32 ) );\n                level++;\n            }\n\n            if ( flags & MF_END )\n                level--;\n        }\n}\n\n\n/**********************************************************************\n *\t    GetMenu32Size   (KERNEL.617)\n */\nWORD WINAPI GetMenu32Size16( LPCVOID menu32 )\n{\n    LPCVOID p = menu32;\n    WORD version, headersize, flags, level = 1;\n\n    version = get_word(&p);\n    headersize = get_word(&p);\n    p = (const BYTE *)p + headersize;\n\n    while ( level )\n        if ( version == 0 )  /* standard */\n        {\n            flags = get_word(&p);\n            if ( !(flags & MF_POPUP) )\n                p = (const WORD *)p + 1;  /* ID */\n            else\n                level++;\n\n            p = (LPCWSTR)p + strlenW( p ) + 1;\n\n            if ( flags & MF_END )\n                level--;\n        }\n        else  /* extended */\n        {\n            p = (const DWORD *)p + 1; /* fType */\n            p = (const DWORD *)p + 1; /* fState */\n            p = (const DWORD *)p + 1; /* ID */\n            flags = get_word(&p);\n\n            p = (LPCWSTR)p + strlenW( p ) + 1;\n\n            /* align on DWORD boundary (32-bit only) */\n            p = (LPCVOID)(((UINT_PTR)p + 3) & ~3);\n\n            /* If popup, skip helpid */\n            if ( flags & 1)\n            {\n                p = (const DWORD *)p + 1;\n                level++;\n            }\n\n            if ( flags & MF_END )\n                level--;\n        }\n\n    return (WORD)((LPCSTR)p - (LPCSTR)menu32);\n}\n\n\n/**********************************************************************\n *\t    ConvertAccelerator32To16\n */\nstatic void ConvertAccelerator32To16( LPCVOID acc32, DWORD size, LPVOID acc16 )\n{\n    BYTE type;\n\n    do\n    {\n        /* Copy type */\n        type = get_byte(&acc32);\n        put_byte(&acc16, type);\n        /* Skip padding */\n        get_byte(&acc32);\n        /* Copy event and IDval */\n        put_word(&acc16, get_word(&acc32));\n        put_word(&acc16, get_word(&acc32));\n        /* Skip padding */\n        get_word(&acc32);\n\n    } while ( !( type & 0x80 ) );\n}\n\n\n/**********************************************************************\n *\t    NE_LoadPEResource\n */\nstatic HGLOBAL16 NE_LoadPEResource( NE_MODULE *pModule, WORD type, LPCVOID bits, DWORD size )\n{\n    HGLOBAL16 handle;\n\n    TRACE(\"module=%04x type=%04x\\n\", pModule->self, type );\n\n    handle = GlobalAlloc16( 0, size );\n\n    switch (type)\n    {\n    case (WORD)RT_MENU:\n        ConvertMenu32To16( bits, size, GlobalLock16( handle ) );\n        break;\n    case (WORD)RT_DIALOG:\n        ConvertDialog32To16( bits, size, GlobalLock16( handle ) );\n        break;\n    case (WORD)RT_ACCELERATOR:\n        ConvertAccelerator32To16( bits, size, GlobalLock16( handle ) );\n        break;\n    case (WORD)RT_STRING:\n        FIXME(\"not yet implemented!\\n\" );\n        /* fall through */\n    default:\n        memcpy( GlobalLock16( handle ), bits, size );\n        break;\n    }\n    return handle;\n}\n\n\n/**********************************************************************\n *\t    AllocResource    (KERNEL.66)\n */\nHGLOBAL16 WINAPI AllocResource16( HMODULE16 hModule, HRSRC16 hRsrc, DWORD size)\n{\n    NE_NAMEINFO *pNameInfo=NULL;\n    WORD sizeShift;\n    HGLOBAL16 ret;\n\n    NE_MODULE *pModule = NE_GetPtr( hModule );\n    if (!pModule || !pModule->ne_rsrctab || !hRsrc) return 0;\n\n    TRACE(\"module=%04x res=%04x size=%d\\n\", hModule, hRsrc, size );\n\n    sizeShift = *(WORD *)((char *)pModule + pModule->ne_rsrctab);\n    pNameInfo = (NE_NAMEINFO*)((char*)pModule + hRsrc);\n    if (size < (DWORD)pNameInfo->length << sizeShift)\n        size = (DWORD)pNameInfo->length << sizeShift;\n    ret = GlobalAlloc16( GMEM_FIXED, size );\n    if (ret) FarSetOwner16( ret, hModule );\n    return ret;\n}\n\n\n/**********************************************************************\n *      DirectResAlloc    (KERNEL.168)\n *\n * Check Schulman, p. 232 for details\n */\nHGLOBAL16 WINAPI DirectResAlloc16( HINSTANCE16 hInstance, WORD wType,\n                                 UINT16 wSize )\n{\n    HGLOBAL16 ret;\n    TRACE(\"(%04x,%04x,%04x)\\n\", hInstance, wType, wSize );\n    if (!(hInstance = GetExePtr( hInstance ))) return 0;\n    if(wType != 0x10)\t/* 0x10 is the only observed value, passed from\n                           CreateCursorIndirect. */\n        TRACE(\"(wType=%x)\\n\", wType);\n    ret = GlobalAlloc16( GMEM_MOVEABLE, wSize );\n    if (ret) FarSetOwner16( ret, hInstance );\n    return ret;\n}\n\n\n/**********************************************************************\n *          AccessResource (KERNEL.64)\n */\nINT16 WINAPI AccessResource16( HINSTANCE16 hModule, HRSRC16 hRsrc )\n{\n    HFILE16 fd;\n    NE_MODULE *pModule = NE_GetPtr( hModule );\n\n    if (!pModule || !pModule->ne_rsrctab || !hRsrc) return -1;\n\n    TRACE(\"module=%04x res=%04x\\n\", pModule->self, hRsrc );\n\n    if ((fd = _lopen16( NE_MODULE_NAME(pModule), OF_READ )) != HFILE_ERROR16)\n    {\n        WORD sizeShift = *(WORD *)((char *)pModule + pModule->ne_rsrctab);\n        NE_NAMEINFO *pNameInfo = (NE_NAMEINFO*)((char*)pModule + hRsrc);\n        _llseek16( fd, (int)pNameInfo->offset << sizeShift, SEEK_SET );\n    }\n    return fd;\n}\n\n\n/**********************************************************************\n *          FindResource     (KERNEL.60)\n */\nHRSRC16 WINAPI FindResource16( HMODULE16 hModule, LPCSTR name, LPCSTR type )\n{\n    NE_TYPEINFO *pTypeInfo;\n    NE_NAMEINFO *pNameInfo;\n    LPBYTE pResTab;\n    NE_MODULE *pModule = get_module( hModule );\n\n    if (!pModule) return 0;\n\n    if (pModule->module32 || (pModule->ne_flags & NE_FFLAGS_BUILTIN))\n    {\n        /* 32-bit PE module */\n        HMODULE m32 = (pModule->ne_flags & NE_FFLAGS_BUILTIN) ? pModule->owner32 : pModule->module32;\n        HRSRC hRsrc32 = FindResourceA( m32, name, type );\n        if (!hRsrc32) return 0;\n        return MapHRsrc32To16( pModule, hRsrc32, HIWORD(type) ? 0 : LOWORD(type) );\n    }\n\n    TRACE(\"module=%04x name=%s type=%s\\n\", pModule->self, debugstr_a(name), debugstr_a(type) );\n\n    if (!pModule->ne_rsrctab) return 0;\n\n    type = get_res_name( type );\n    name = get_res_name( name );\n\n    if (HIWORD(type) || HIWORD(name))\n    {\n        DWORD id = NE_FindNameTableId( pModule, type, name );\n        if (id)  /* found */\n        {\n            type = (LPCSTR)(ULONG_PTR)LOWORD(id);\n            name = (LPCSTR)(ULONG_PTR)HIWORD(id);\n        }\n    }\n    pResTab = (LPBYTE)pModule + pModule->ne_rsrctab;\n    pTypeInfo = (NE_TYPEINFO *)( pResTab + 2 );\n\n    for (;;)\n    {\n        if (!(pTypeInfo = NE_FindTypeSection( pResTab, pTypeInfo, type ))) break;\n        if ((pNameInfo = NE_FindResourceFromType( pResTab, pTypeInfo, name )))\n        {\n            TRACE(\"    Found id %p\\n\", name );\n            return (HRSRC16)( (char *)pNameInfo - (char *)pModule );\n        }\n        pTypeInfo = next_typeinfo(pTypeInfo);\n    }\n    return 0;\n}\n\nNE_TYPEINFO *get_resource_table(HMODULE16 hmod, LPCSTR type, LPBYTE *restab)\n{\n    NE_MODULE *pModule = get_module(hmod);\n    if (!pModule || pModule->module32 || (pModule->ne_flags & NE_FFLAGS_BUILTIN) || !pModule->ne_rsrctab)\n        return NULL;\n    LPBYTE pResTab = (LPBYTE)pModule + pModule->ne_rsrctab;\n    if (restab) *restab = pResTab;\n    type = get_res_name(type);\n    return NE_FindTypeSection(pResTab, (NE_TYPEINFO *)(pResTab + 2), type);\n}\n\n/**********************************************************************\n *          LoadResource     (KERNEL.61)\n */\nHGLOBAL16 WINAPI LoadResource16( HMODULE16 hModule, HRSRC16 hRsrc )\n{\n    NE_TYPEINFO *pTypeInfo;\n    NE_NAMEINFO *pNameInfo = NULL;\n    NE_MODULE *pModule = get_module( hModule );\n    int d;\n\n    if (!hRsrc || !pModule) return 0;\n\n    if (pModule->module32 || (pModule->ne_flags & NE_FFLAGS_BUILTIN))\n    {\n        /* load 32-bit resource and convert it */\n        HMODULE m32 = (pModule->ne_flags & NE_FFLAGS_BUILTIN) ? pModule->owner32 : pModule->module32;\n        HRSRC hRsrc32 = MapHRsrc16To32( pModule, hRsrc );\n        WORD type     = MapHRsrc16ToType( pModule, hRsrc );\n        HGLOBAL hMem  = LoadResource( m32, hRsrc32 );\n        DWORD size    = SizeofResource( m32, hRsrc32 );\n        if (!hMem) return 0;\n        return NE_LoadPEResource( pModule, type, LockResource( hMem ), size );\n    }\n\n    /* first, verify hRsrc (just an offset from pModule to the needed pNameInfo) */\n\n    d = pModule->ne_rsrctab + 2;\n    pTypeInfo = (NE_TYPEINFO *)((char *)pModule + d);\n    while( hRsrc > d )\n    {\n        if (pTypeInfo->type_id == 0) break; /* terminal entry */\n        d += sizeof(NE_TYPEINFO) + pTypeInfo->count * sizeof(NE_NAMEINFO);\n        if (hRsrc < d)\n        {\n            if( ((d - hRsrc)%sizeof(NE_NAMEINFO)) == 0 )\n            {\n                pNameInfo = (NE_NAMEINFO *)((char *)pModule + hRsrc);\n                break;\n            }\n            else break; /* NE_NAMEINFO boundary mismatch */\n        }\n        pTypeInfo = (NE_TYPEINFO *)((char *)pModule + d);\n    }\n\n    if (pNameInfo)\n    {\n        if (pNameInfo->handle && GlobalHandle16(pNameInfo->handle) && !(GlobalFlags16(pNameInfo->handle) & GMEM_DISCARDED) && pNameInfo->usage)\n        {\n            pNameInfo->usage++;\n            TRACE(\"  Already loaded, new count=%d\\n\", pNameInfo->usage );\n        }\n        else\n        {\n            FARPROC16 resloader;\n            memcpy_unaligned( &resloader, &pTypeInfo->resloader, sizeof(FARPROC16) );\n            if (resloader && resloader != get_default_res_handler())\n            {\n                WORD args[3];\n                DWORD ret;\n\n                args[2] = pNameInfo->handle;\n                args[1] = pModule->self;\n                args[0] = hRsrc;\n                WOWCallback16Ex( (DWORD)resloader, WCB16_PASCAL, sizeof(args), args, &ret );\n                pNameInfo->handle = LOWORD(ret);\n            }\n            else\n                pNameInfo->handle = NE_DefResourceHandler( pNameInfo->handle, pModule->self, hRsrc );\n\n            if (pNameInfo->handle)\n            {\n                pNameInfo->usage++;\n                pNameInfo->flags |= NE_SEGFLAGS_LOADED;\n            }\n        }\n        return pNameInfo->handle;\n    }\n    return 0;\n}\n\n\n/**********************************************************************\n *          LockResource   (KERNEL.62)\n */\nSEGPTR WINAPI WIN16_LockResource16( HGLOBAL16 handle )\n{\n    TRACE(\"(%04x)\\n\", handle );\n    /* May need to reload the resource if discarded */\n    return WOWGlobalLock16( handle );\n}\n\n\n/**********************************************************************\n *          LockResource16 (KERNEL32.@)\n */\nLPVOID WINAPI LockResource16( HGLOBAL16 handle )\n{\n    return MapSL( WIN16_LockResource16(handle) );\n}\n\n\n/**********************************************************************\n *          SizeofResource   (KERNEL.65)\n */\nDWORD WINAPI SizeofResource16( HMODULE16 hModule, HRSRC16 hRsrc )\n{\n    NE_MODULE *pModule;\n\n    TRACE(\"(%x, %x)\\n\", hModule, hRsrc );\n\n    if (!hRsrc) return 0;\n    if (!(pModule = get_module( hModule ))) return 0;\n    if (pModule->ne_rsrctab)\n    {\n        WORD sizeShift = *(WORD *)((char *)pModule + pModule->ne_rsrctab);\n        NE_NAMEINFO *pNameInfo = (NE_NAMEINFO*)((char*)pModule + hRsrc);\n        return (DWORD)pNameInfo->length << sizeShift;\n    }\n    if (pModule->module32 || (pModule->ne_flags & NE_FFLAGS_BUILTIN))\n    {\n        /* 32-bit PE module */\n        HMODULE m32 = (pModule->ne_flags & NE_FFLAGS_BUILTIN) ? pModule->owner32 : pModule->module32;\n        return SizeofResource( m32, MapHRsrc16To32( pModule, hRsrc ) );\n    }\n    return 0;\n}\n\n\n/**********************************************************************\n *          FreeResource     (KERNEL.63)\n */\nBOOL16 WINAPI FreeResource16( HGLOBAL16 handle )\n{\n    FARPROC16 proc;\n    HMODULE16 user;\n    NE_MODULE *pModule = NE_GetPtr( FarGetOwner16( handle ) );\n    handle = GlobalHandleToSel16(handle);\n\n    TRACE(\"(%04x)\\n\", handle );\n\n    /* Try NE resource first */\n\n    if (pModule && pModule->ne_rsrctab)\n    {\n        NE_TYPEINFO *pTypeInfo = (NE_TYPEINFO *)((char *)pModule + pModule->ne_rsrctab + 2);\n        while (pTypeInfo->type_id)\n        {\n            WORD count;\n            NE_NAMEINFO *pNameInfo = (NE_NAMEINFO *)(pTypeInfo + 1);\n            for (count = pTypeInfo->count; count > 0; count--)\n            {\n                if (pNameInfo->handle == handle)\n                {\n                    if (pNameInfo->usage > 0)\n                    {\n                        pNameInfo->usage--;\n                        if (pNameInfo->usage != 0)\n                        {\n                            return handle;\n                        }\n                    }\n                    else if (!pNameInfo->usage && IsOldWindowsTask(GetCurrentTask()))\n                        return TRUE;\n                    return FALSE;\n                }\n                pNameInfo++;\n            }\n            pTypeInfo = (NE_TYPEINFO *)pNameInfo;\n        }\n    }\n\n    /* If this failed, call USER.DestroyIcon32; this will check\n       whether it is a shared cursor/icon; if not it will call\n       GlobalFree16() */\n    user = GetModuleHandle16( \"user\" );\n    if (user && (proc = GetProcAddress16( user, \"DestroyIcon32\" )))\n    {\n        WORD args[2];\n        DWORD result;\n\n        args[1] = handle;\n        args[0] = 1;  /* CID_RESOURCE */\n        WOWCallback16Ex( (SEGPTR)proc, WCB16_PASCAL, sizeof(args), args, &result );\n        return LOWORD(result) ? 0 : 1;\n    }\n    else\n        return GlobalFree16( handle );\n}\n/*************************************************************************\n*\t\t\tUSER32_LoadResource\n*/\nstatic BYTE * USER32_LoadResource(LPBYTE peimage, NE_NAMEINFO* pNInfo, WORD sizeShift, ULONG *uSize)\n{\n\tTRACE(\"%p %p 0x%08x\\n\", peimage, pNInfo, sizeShift);\n\n\t*uSize = (DWORD)pNInfo->length << sizeShift;\n\treturn peimage + ((DWORD)pNInfo->offset << sizeShift);\n}\ntypedef struct\n{\n\tBYTE        bWidth;          /* Width, in pixels, of the image\t*/\n\tBYTE        bHeight;         /* Height, in pixels, of the image\t*/\n\tBYTE        bColorCount;     /* Number of colors in image (0 if >=8bpp) */\n\tBYTE        bReserved;       /* Reserved ( must be 0)\t\t*/\n\tWORD        wPlanes;         /* Color Planes\t\t\t*/\n\tWORD        wBitCount;       /* Bits per pixel\t\t\t*/\n\tDWORD       dwBytesInRes;    /* How many bytes in this resource?\t*/\n\tDWORD       dwImageOffset;   /* Where in the file is this image?\t*/\n} icoICONDIRENTRY, *LPicoICONDIRENTRY;\ntypedef struct\n{\n\tWORD            idReserved;   /* Reserved (must be 0) */\n\tWORD            idType;       /* Resource Type (RES_ICON or RES_CURSOR) */\n\tWORD            idCount;      /* How many images */\n\ticoICONDIRENTRY idEntries[1]; /* An entry for each image (idCount of 'em) */\n} icoICONDIR, *LPicoICONDIR;\n/*************************************************************************\n*                      ICO_LoadIcon\n*/\nstatic BYTE * ICO_LoadIcon(LPBYTE peimage, LPicoICONDIRENTRY lpiIDE, ULONG *uSize)\n{\n\tTRACE(\"%p %p\\n\", peimage, lpiIDE);\n\n\t*uSize = lpiIDE->dwBytesInRes;\n\treturn peimage + lpiIDE->dwImageOffset;\n}\n\n__declspec(dllexport) HICON NE_ExtractIcon(LPCSTR lpszExeFileName,\n\tHICON * RetPtr,\n\tINT nIconIndex,\n\tUINT nIcons,\n\tUINT cxDesired,\n\tUINT cyDesired,\n\tUINT *pIconId,\n\tUINT flags)\n{\n\t//user32/exticon.c\n\n\tUINT\t\tret = 0;\n\tUINT\t\tcx1, cx2, cy1, cy2;\n\tLPBYTE\t\tpData;\n\tDWORD\t\tsig;\n\tHANDLE\t\thFile;\n\tUINT16\t\ticonDirCount = 0, iconCount = 0;\n\tLPBYTE\t\timage;\n\tHANDLE\t\tfmapping;\n\tDWORD\t\tfsizeh, fsizel;\n\tWCHAR\t\tszExePath[MAX_PATH];\n\tDWORD\t\tdwSearchReturn;\n\n    char *path = get_search_path();\n\tdwSearchReturn = SearchPathA(NULL, lpszExeFileName, NULL, sizeof(szExePath) / sizeof(szExePath[0]), szExePath, NULL);\n    HeapFree(GetProcessHeap(), 0, path);\n\tif ((dwSearchReturn == 0) || (dwSearchReturn > sizeof(szExePath) / sizeof(szExePath[0])))\n\t{\n\t\tWARN(\"File %s not found or path too long\\n\", debugstr_a(lpszExeFileName));\n\t\treturn -1;\n\t}\n\thFile = CreateFileA(szExePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0);\n\tif (hFile == INVALID_HANDLE_VALUE) return 0;\n\tfsizel = GetFileSize(hFile, &fsizeh);\n\n\t/* Map the file */\n\tfmapping = CreateFileMappingA(hFile, NULL, PAGE_READONLY | SEC_COMMIT, 0, 0, NULL);\n\tCloseHandle(hFile);\n\tif (!fmapping)\n\t{\n\t\tWARN(\"CreateFileMapping error %d\\n\", GetLastError());\n\t\treturn 0xFFFFFFFF;\n\t}\n\n\tif (!(image = MapViewOfFile(fmapping, FILE_MAP_READ, 0, 0, 0)))\n\t{\n\t\tWARN(\"MapViewOfFile error %d\\n\", GetLastError());\n\t\tCloseHandle(fmapping);\n\t\treturn 0xFFFFFFFF;\n\t}\n\tCloseHandle(fmapping);\n\tcx1 = LOWORD(cxDesired);\n\tcx2 = HIWORD(cxDesired);\n\tcy1 = LOWORD(cyDesired);\n\tcy2 = HIWORD(cyDesired);\n\n\tif (pIconId) /* Invalidate first icon identifier */\n\t\t*pIconId = 0xFFFFFFFF;\n\n\tif (!pIconId) /* if no icon identifier array present use the icon handle array as intermediate storage */\n\t\tpIconId = (UINT*)RetPtr;\n\tconst IMAGE_DOS_HEADER *mz_header = image;\n\tconst IMAGE_OS2_HEADER *ne_header;\n\n\tif (fsizel < sizeof(*mz_header)) goto end;\n\tif (mz_header->e_magic != IMAGE_DOS_SIGNATURE) goto end;\n\tne_header = (const IMAGE_OS2_HEADER *)((const char *)image + mz_header->e_lfanew);\n\tif (mz_header->e_lfanew + sizeof(*ne_header) > fsizel) goto end;\n\tif (ne_header->ne_magic == IMAGE_NT_SIGNATURE) goto end;  /* win32 exe */\n\tif (ne_header->ne_magic != IMAGE_OS2_SIGNATURE) goto end;\n\n\tpData = image + mz_header->e_lfanew + ne_header->ne_rsrctab;\n\t/* end ico file */\n\tif (ne_header->ne_rsrctab < ne_header->ne_restab)\n\t{\n\t\tBYTE\t\t*pCIDir = 0;\n\t\tNE_TYPEINFO\t*pTInfo = (NE_TYPEINFO*)(pData + 2);\n\t\tNE_NAMEINFO\t*pIconStorage = NULL;\n\t\tNE_NAMEINFO\t*pIconDir = NULL;\n\t\tLPicoICONDIR\tlpiID = NULL;\n\t\tULONG\t\tuSize = 0;\n\n\n\t\tif (pData == (BYTE*)-1)\n\t\t{\n\t\t\tFIXME(\"ICO_GetIconDirectory\\n\");\n\t\t\t/*\n\t\t    pCIDir = ICO_GetIconDirectory(peimage, &lpiID, &uSize);\t// check for .ICO file \n\t\t\tif (pCIDir)\n\t\t\t{\n\t\t\t\ticonDirCount = 1; iconCount = lpiID->idCount;\n\t\t\t\tTRACE(\"-- icon found %p 0x%08x 0x%08x 0x%08x\\n\", pCIDir, uSize, iconDirCount, iconCount);\n\t\t\t}\n\t\t\t*/\n\t\t}\n\t\telse while (pTInfo->type_id && !(pIconStorage && pIconDir))\n\t\t{\n\t\t\tif (pTInfo->type_id == NE_RSCTYPE_GROUP_ICON)\t/* find icon directory and icon repository */\n\t\t\t{\n\t\t\t\ticonDirCount = pTInfo->count;\n\t\t\t\tpIconDir = ((NE_NAMEINFO*)(pTInfo + 1));\n\t\t\t\tTRACE(\"\\tfound directory - %i icon families\\n\", iconDirCount);\n\t\t\t}\n\t\t\tif (pTInfo->type_id == NE_RSCTYPE_ICON)\n\t\t\t{\n\t\t\t\ticonCount = pTInfo->count;\n\t\t\t\tpIconStorage = ((NE_NAMEINFO*)(pTInfo + 1));\n\t\t\t\tTRACE(\"\\ttotal icons - %i\\n\", iconCount);\n\t\t\t}\n\t\t\tpTInfo = (NE_TYPEINFO *)((char*)(pTInfo + 1) + pTInfo->count*sizeof(NE_NAMEINFO));\n\t\t}\n\n\t\tif ((pIconStorage && pIconDir) || lpiID)\t  /* load resources and create icons */\n\t\t{\n\t\t\tif (nIcons == 0)\n\t\t\t{\n\t\t\t\tret = iconDirCount;\n\t\t\t\tif (lpiID)\t/* *.ico file, deallocate heap pointer*/\n\t\t\t\t\tHeapFree(GetProcessHeap(), 0, pCIDir);\n\t\t\t}\n\t\t\telse if (nIconIndex < iconDirCount)\n\t\t\t{\n\t\t\t\tUINT16   i, icon;\n\t\t\t\tif (nIcons > iconDirCount - nIconIndex)\n\t\t\t\t\tnIcons = iconDirCount - nIconIndex;\n\n\t\t\t\tfor (i = 0; i < nIcons; i++)\n\t\t\t\t{\n\t\t\t\t\t/* .ICO files have only one icon directory */\n\t\t\t\t\tif (lpiID == NULL)\t/* not *.ico */\n\t\t\t\t\t\tpCIDir = USER32_LoadResource(image, pIconDir + i + nIconIndex, *(WORD*)pData, &uSize);\n\t\t\t\t\tpIconId[i] = LookupIconIdFromDirectoryEx(pCIDir, TRUE, cx1, cy1, flags);\n\t\t\t\t\tif (cx2 && cy2) pIconId[++i] = LookupIconIdFromDirectoryEx(pCIDir, TRUE, cx2, cy2, flags);\n\t\t\t\t}\n\t\t\t\tif (lpiID)\t/* *.ico file, deallocate heap pointer*/\n\t\t\t\t\tHeapFree(GetProcessHeap(), 0, pCIDir);\n\n\t\t\t\tfor (icon = 0; icon < nIcons; icon++)\n\t\t\t\t{\n\t\t\t\t\tpCIDir = NULL;\n\t\t\t\t\tif (lpiID)\n\t\t\t\t\t\tpCIDir = ICO_LoadIcon(image, lpiID->idEntries + (int)pIconId[icon], &uSize);\n\t\t\t\t\telse\n\t\t\t\t\t\tfor (i = 0; i < iconCount; i++)\n\t\t\t\t\t\t\tif (pIconStorage[i].id == ((int)pIconId[icon] | 0x8000))\n\t\t\t\t\t\t\t\tpCIDir = USER32_LoadResource(image, pIconStorage + i, *(WORD*)pData, &uSize);\n\n\t\t\t\t\tif (pCIDir)\n\t\t\t\t\t{\n\t\t\t\t\t\tRetPtr[icon] = CreateIconFromResourceEx(pCIDir, uSize, TRUE, 0x00030000,\n\t\t\t\t\t\t\tcx1, cy1, flags);\n\t\t\t\t\t\tif (cx2 && cy2)\n\t\t\t\t\t\t\tRetPtr[++icon] = CreateIconFromResourceEx(pCIDir, uSize, TRUE, 0x00030000,\n\t\t\t\t\t\t\tcx2, cy2, flags);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tRetPtr[icon] = 0;\n\t\t\t\t}\n\t\t\t\tret = icon;\t/* return number of retrieved icons */\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t{\n\n\t}\n\tend:\n\tUnmapViewOfFile(image);\t/* success */\n\treturn ret;\n}\n\n\n"
  },
  {
    "path": "krnl386/selector.c",
    "content": "/*\n * Selector manipulation functions\n *\n * Copyright 1995 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <string.h>\n\n#include \"wine/winbase16.h\"\n#include \"wine/debug.h\"\n#include \"kernel16_private.h\"\n#include \"wine/server.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(selector);\n\n#define LDT_SIZE 8192\n\n/* get the number of selectors needed to cover up to the selector limit */\nstatic inline WORD get_sel_count( WORD sel )\n{\n    return (wine_ldt_copy.limit[sel >> __AHSHIFT] >> 16) + 1;\n}\n\n\n/***********************************************************************\n *           AllocSelectorArray   (KERNEL.206)\n */\nWORD WINAPI AllocSelectorArray16( WORD count )\n{\n    WORD i, sel = wine_ldt_alloc_entries( count );\n\n    if (sel)\n    {\n        LDT_ENTRY entry;\n        wine_ldt_set_base( &entry, 0 );\n        wine_ldt_set_limit( &entry, 1 ); /* avoid 0 base and limit */\n        wine_ldt_set_flags( &entry, WINE_LDT_FLAGS_DATA );\n        for (i = 0; i < count; i++)\n        {\n            if (wine_ldt_set_entry( sel + (i << __AHSHIFT), &entry ) < 0)\n            {\n                wine_ldt_free_entries( sel, count );\n                return 0;\n            }\n        }\n    }\n    return sel;\n}\n\n\n/***********************************************************************\n *           AllocSelector   (KERNEL.175)\n */\nWORD WINAPI AllocSelector16( WORD sel )\n{\n    WORD newsel, count, i;\n\n    count = sel ? get_sel_count(sel) : 1;\n    newsel = wine_ldt_alloc_entries( count );\n    TRACE(\"(%04x): returning %04x\\n\", sel, newsel );\n    if (!newsel) return 0;\n    if (!sel) return newsel;  /* nothing to copy */\n    LDT_ENTRY entry, nentry;\n    wine_ldt_get_entry(sel, &entry);\n    wine_ldt_set_flags(&nentry, wine_ldt_get_flags(&entry));\n    for (i = 0; i < count; i++)\n    {\n        wine_ldt_set_limit(&nentry, wine_ldt_get_limit(&entry) - (0x10000 * i));\n        wine_ldt_set_base(&nentry, (DWORD)wine_ldt_get_base(&entry) + (0x10000 * i));\n        wine_ldt_set_entry(newsel + (i << __AHSHIFT), &nentry);\n    }\n    return newsel;\n}\n\nDWORD WINAPI WIN16_FreeSelector16(WORD sel)\n{\n    CURRENT_STACK16->es = 0;\n    return FreeSelector16(sel);\n}\n\n/***********************************************************************\n *           FreeSelector   (KERNEL.176)\n */\nWORD WINAPI FreeSelector16( WORD sel )\n{\n    LDT_ENTRY entry;\n\n    wine_ldt_get_entry( sel, &entry );\n    if (wine_ldt_is_empty( &entry )) return sel;  /* error */\n    /* Check if we are freeing current %fs selector */\n    if (!((wine_get_fs() ^ sel) & ~3))\n        WARN(\"Freeing %%fs selector (%04x), not good.\\n\", wine_get_fs() );\n    wine_ldt_free_entries( sel, 1 );\n    return 0;\n}\n\n\n/***********************************************************************\n *           SELECTOR_SetEntries\n *\n * Set the LDT entries for an array of selectors.\n */\nstatic BOOL SELECTOR_SetEntries( WORD sel, const void *base, DWORD size, unsigned char flags )\n{\n    LDT_ENTRY entry;\n    WORD i, count;\n\n    wine_ldt_set_base( &entry, base );\n    wine_ldt_set_limit( &entry, size - 1 );\n    wine_ldt_set_flags( &entry, flags );\n    count = (size + 0xffff) / 0x10000;\n    for (i = 0; i < count; i++)\n    {\n        if (wine_ldt_set_entry( sel + (i << __AHSHIFT), &entry ) < 0) return FALSE;\n        wine_ldt_set_base( &entry, (char*)wine_ldt_get_base(&entry) + 0x10000);\n        /* yep, Windows sets limit like that, not 64K sel units */\n        wine_ldt_set_limit( &entry, wine_ldt_get_limit(&entry) - 0x10000 );\n    }\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           SELECTOR_AllocBlock\n *\n * Allocate selectors for a block of linear memory.\n */\nWORD SELECTOR_AllocBlock( const void *base, DWORD size, unsigned char flags )\n{\n    WORD sel, count;\n\n    if (!size) return 0;\n    count = (size + 0xffff) / 0x10000;\n    if ((sel = wine_ldt_alloc_entries( count )))\n    {\n        if (SELECTOR_SetEntries( sel, base, size, flags )) return sel;\n        wine_ldt_free_entries( sel, count );\n        sel = 0;\n    }\n    return sel;\n}\n\n\n/***********************************************************************\n *           SELECTOR_FreeBlock\n *\n * Free a block of selectors.\n */\nvoid SELECTOR_FreeBlock( WORD sel )\n{\n    WORD i, count = get_sel_count( sel );\n\n    TRACE(\"(%04x,%d)\\n\", sel, count );\n    for (i = 0; i < count; i++) FreeSelector16( sel + (i << __AHSHIFT) );\n}\n\n\n/***********************************************************************\n *           SELECTOR_ReallocBlock\n *\n * Change the size of a block of selectors.\n */\nWORD SELECTOR_ReallocBlock( WORD sel, const void *base, DWORD size )\n{\n    LDT_ENTRY entry;\n    int oldcount, newcount;\n\n    if (!size) size = 1;\n    wine_ldt_get_entry( sel, &entry );\n    oldcount = (wine_ldt_get_limit(&entry) >> 16) + 1;\n    newcount = (size + 0xffff) >> 16;\n\n    sel = wine_ldt_realloc_entries( sel, oldcount, newcount );\n    if (sel) SELECTOR_SetEntries( sel, base, size, wine_ldt_get_flags(&entry) );\n    return sel;\n}\n\n\n/***********************************************************************\n *           PrestoChangoSelector   (KERNEL.177)\n */\nWORD WINAPI PrestoChangoSelector16( WORD selSrc, WORD selDst )\n{\n    LDT_ENTRY entry;\n    wine_ldt_get_entry( selSrc, &entry );\n    /* toggle the executable bit */\n    entry.HighWord.Bits.Type ^= (WINE_LDT_FLAGS_CODE ^ WINE_LDT_FLAGS_DATA);\n    wine_ldt_set_entry( selDst, &entry );\n    return selDst;\n}\n\n\n/***********************************************************************\n *           AllocCStoDSAlias   (KERNEL.170)\n *           AllocAlias         (KERNEL.172)\n */\nWORD WINAPI AllocCStoDSAlias16( WORD sel )\n{\n    WORD newsel;\n    LDT_ENTRY entry;\n\n    newsel = wine_ldt_alloc_entries( 1 );\n    TRACE(\"(%04x): returning %04x\\n\",\n                      sel, newsel );\n    if (!newsel) return 0;\n    wine_ldt_get_entry( sel, &entry );\n    entry.HighWord.Bits.Type = WINE_LDT_FLAGS_DATA;\n    if (wine_ldt_set_entry( newsel, &entry ) >= 0) return newsel;\n    wine_ldt_free_entries( newsel, 1 );\n    return 0;\n}\n\n\n/***********************************************************************\n *           AllocDStoCSAlias   (KERNEL.171)\n */\nWORD WINAPI AllocDStoCSAlias16( WORD sel )\n{\n    WORD newsel;\n    LDT_ENTRY entry;\n\n    newsel = wine_ldt_alloc_entries( 1 );\n    TRACE(\"(%04x): returning %04x\\n\",\n                      sel, newsel );\n    if (!newsel) return 0;\n    wine_ldt_get_entry( sel, &entry );\n    entry.HighWord.Bits.Type = WINE_LDT_FLAGS_CODE;\n    if (wine_ldt_set_entry( newsel, &entry ) >= 0) return newsel;\n    wine_ldt_free_entries( newsel, 1 );\n    return 0;\n}\n\n\n/***********************************************************************\n *           LongPtrAdd   (KERNEL.180)\n */\nSEGPTR WINAPI LongPtrAdd16( DWORD ptr, DWORD add )\n{\n    LDT_ENTRY entry;\n    wine_ldt_get_entry( SELECTOROF(ptr), &entry );\n    wine_ldt_set_base( &entry, (char *)wine_ldt_get_base(&entry) + add );\n    wine_ldt_set_entry( SELECTOROF(ptr), &entry );\n    CURRENT_STACK16->es = 0;\n    return ptr;\n}\n\n\n/***********************************************************************\n *             GetSelectorBase   (KERNEL.186)\n */\nDWORD WINAPI GetSelectorBase( WORD sel )\n{\n    void *base = wine_ldt_copy.base[sel >> __AHSHIFT];\n\n    /* if base points into DOSMEM, assume we have to\n     * return pointer into physical lower 1MB */\n\n    return DOSMEM_MapLinearToDos( base );\n}\n\n\n/***********************************************************************\n *             SetSelectorBase   (KERNEL.187)\n */\nWORD WINAPI SetSelectorBase( WORD sel, DWORD base )\n{\n    LDT_ENTRY entry;\n    wine_ldt_get_entry( sel, &entry );\n    wine_ldt_set_base( &entry, DOSMEM_MapDosToLinear(base) );\n    if (wine_ldt_set_entry( sel, &entry ) < 0) sel = 0;\n    return sel;\n}\n\n\n/***********************************************************************\n *           GetSelectorLimit   (KERNEL.188)\n */\nDWORD WINAPI GetSelectorLimit16( WORD sel )\n{\n    return wine_ldt_copy.limit[sel >> __AHSHIFT];\n}\n\n\n/***********************************************************************\n *           SetSelectorLimit   (KERNEL.189)\n */\nWORD WINAPI SetSelectorLimit16( WORD sel, DWORD limit )\n{\n    LDT_ENTRY entry;\n    wine_ldt_get_entry( sel, &entry );\n    wine_ldt_set_limit( &entry, limit );\n    if (wine_ldt_set_entry( sel, &entry ) < 0) sel = 0;\n    return sel;\n}\n\n\n/***********************************************************************\n *           SelectorAccessRights   (KERNEL.196)\n */\nWORD WINAPI SelectorAccessRights16( WORD sel, WORD op, WORD val )\n{\n    LDT_ENTRY entry;\n    wine_ldt_get_entry( sel, &entry );\n\n    if (op == 0)  /* get */\n    {\n        return entry.HighWord.Bytes.Flags1 | ((entry.HighWord.Bytes.Flags2 & 0xf0) << 8);\n    }\n    else  /* set */\n    {\n        entry.HighWord.Bytes.Flags1 = LOBYTE(val) | 0xf0;\n        entry.HighWord.Bytes.Flags2 = (entry.HighWord.Bytes.Flags2 & 0x0f) | (HIBYTE(val) & 0xf0);\n        wine_ldt_set_entry( sel, &entry );\n        return 0;\n    }\n}\n\n\n/***********************************************************************\n *           IsBadCodePtr   (KERNEL.336)\n */\nBOOL16 WINAPI IsBadCodePtr16( SEGPTR lpfn )\n{\n    WORD sel;\n    LDT_ENTRY entry;\n\n    sel = SELECTOROF(lpfn);\n    if (!sel) return TRUE;\n    wine_ldt_get_entry( sel, &entry );\n    if (wine_ldt_is_empty( &entry )) return TRUE;\n    /* check for code segment, ignoring conforming, read-only and accessed bits */\n    if ((entry.HighWord.Bits.Type ^ WINE_LDT_FLAGS_CODE) & 0x18) return TRUE;\n    if (OFFSETOF(lpfn) > wine_ldt_get_limit(&entry)) return TRUE;\n    return FALSE;\n}\n\n\n/***********************************************************************\n *           IsBadStringPtr   (KERNEL.337)\n */\nBOOL16 WINAPI IsBadStringPtr16( SEGPTR ptr, UINT16 size )\n{\n    WORD sel;\n    LDT_ENTRY entry;\n\n    sel = SELECTOROF(ptr);\n    if (!sel) return TRUE;\n    wine_ldt_get_entry( sel, &entry );\n    if (wine_ldt_is_empty( &entry )) return TRUE;\n    /* check for data or readable code segment */\n    if (!(entry.HighWord.Bits.Type & 0x10)) return TRUE;  /* system descriptor */\n    if ((entry.HighWord.Bits.Type & 0x0a) == 0x08) return TRUE;  /* non-readable code segment */\n    if (strlen(MapSL(ptr)) < size) size = strlen(MapSL(ptr)) + 1;\n    if (size && (OFFSETOF(ptr) + size - 1 > wine_ldt_get_limit(&entry))) return TRUE;\n    return FALSE;\n}\n\n\n/***********************************************************************\n *           IsBadHugeReadPtr   (KERNEL.346)\n */\nBOOL16 WINAPI IsBadHugeReadPtr16( SEGPTR ptr, DWORD size )\n{\n    WORD sel;\n    LDT_ENTRY entry;\n\n    sel = SELECTOROF(ptr);\n    if (!sel) return TRUE;\n    wine_ldt_get_entry( sel, &entry );\n    if (wine_ldt_is_empty( &entry )) return TRUE;\n    /* check for data or readable code segment */\n    if (!(entry.HighWord.Bits.Type & 0x10)) return TRUE;  /* system descriptor */\n    if ((entry.HighWord.Bits.Type & 0x0a) == 0x08) return TRUE;  /* non-readable code segment */\n    if (size && (OFFSETOF(ptr) + size - 1 > wine_ldt_get_limit( &entry ))) return TRUE;\n    return FALSE;\n}\n\n\n/***********************************************************************\n *           IsBadHugeWritePtr   (KERNEL.347)\n */\nBOOL16 WINAPI IsBadHugeWritePtr16( SEGPTR ptr, DWORD size )\n{\n    WORD sel;\n    LDT_ENTRY entry;\n\n    sel = SELECTOROF(ptr);\n    if (!sel) return TRUE;\n    wine_ldt_get_entry( sel, &entry );\n    if (wine_ldt_is_empty( &entry )) return TRUE;\n    /* check for writable data segment, ignoring expand-down and accessed flags */\n    if ((entry.HighWord.Bits.Type ^ WINE_LDT_FLAGS_DATA) & ~5) return TRUE;\n    if (size && (OFFSETOF(ptr) + size - 1 > wine_ldt_get_limit( &entry ))) return TRUE;\n    return FALSE;\n}\n\n/***********************************************************************\n *           IsBadReadPtr   (KERNEL.334)\n */\nBOOL16 WINAPI IsBadReadPtr16( SEGPTR ptr, UINT16 size )\n{\n    return IsBadHugeReadPtr16( ptr, size );\n}\n\n\n/***********************************************************************\n *           IsBadWritePtr   (KERNEL.335)\n */\nBOOL16 WINAPI IsBadWritePtr16( SEGPTR ptr, UINT16 size )\n{\n    return IsBadHugeWritePtr16( ptr, size );\n}\n\n\n/***********************************************************************\n *           IsBadFlatReadWritePtr   (KERNEL.627)\n */\nBOOL16 WINAPI IsBadFlatReadWritePtr16( SEGPTR ptr, DWORD size, BOOL16 bWrite )\n{\n    return bWrite? IsBadHugeWritePtr16( ptr, size )\n                 : IsBadHugeReadPtr16( ptr, size );\n}\n\n\n/************************************* Win95 pointer mapping functions *\n *\n */\n\nstruct mapls_entry\n{\n    struct mapls_entry *next;\n    void               *addr;   /* linear address */\n    int                 count;  /* ref count */\n    WORD                sel;    /* selector */\n};\n\nstatic struct mapls_entry *first_entry;\n\n\n/***********************************************************************\n *           MapLS   (KERNEL32.@)\n *           MapLS   (KERNEL.358)\n *\n * Maps linear pointer to segmented.\n */\nSEGPTR WINAPI MapLS( LPCVOID ptr )\n{\n    struct mapls_entry *entry, *free = NULL;\n    const void *base;\n    SEGPTR ret = 0;\n\n    if (!HIWORD(ptr)) return (SEGPTR)LOWORD(ptr);\n\n    base = (const char *)ptr - ((ULONG_PTR)ptr & 0x7fff);\n    HeapLock( GetProcessHeap() );\n    for (entry = first_entry; entry; entry = entry->next)\n    {\n        if (entry->addr == base) break;\n        if (!entry->count) free = entry;\n    }\n\n    if (!entry)\n    {\n        LDT_ENTRY ldt;\n        if (!free)  /* no free entry found, create a new one */\n        {\n            if (!(free = HeapAlloc( GetProcessHeap(), 0, sizeof(*free) ))) goto done;\n            if (!(free->sel = SELECTOR_AllocBlock( base, 0x10000, WINE_LDT_FLAGS_DATA )))\n            {\n                HeapFree( GetProcessHeap(), 0, free );\n                goto done;\n            }\n            free->count = 0;\n            free->next = first_entry;\n            first_entry = free;\n        }\n        wine_ldt_get_entry(free->sel, &ldt);\n        wine_ldt_set_base(&ldt, (DWORD)base);\n        wine_ldt_set_entry(free->sel, &ldt);\n        free->addr = (void*)base;\n        entry = free;\n    }\n    entry->count++;\n    ret = MAKESEGPTR( entry->sel, (const char *)ptr - (char *)entry->addr );\n done:\n    HeapUnlock( GetProcessHeap() );\n    return ret;\n}\n\n/***********************************************************************\n *           UnMapLS   (KERNEL32.@)\n *           UnMapLS   (KERNEL.359)\n *\n * Free mapped selector.\n */\nvoid WINAPI UnMapLS( SEGPTR sptr )\n{\n    struct mapls_entry *entry;\n    WORD sel = SELECTOROF(sptr);\n\n    if (sel)\n    {\n        HeapLock( GetProcessHeap() );\n        for (entry = first_entry; entry; entry = entry->next) if (entry->sel == sel) break;\n        if (entry && entry->count > 0) entry->count--;\n        HeapUnlock( GetProcessHeap() );\n    }\n}\n\n/***********************************************************************\n *           MapSL   (KERNEL32.@)\n *           MapSL   (KERNEL.357)\n *\n * Maps fixed segmented pointer to linear.\n */\nLPVOID WINAPI MapSL( SEGPTR sptr )\n{\n    if (!(SELECTOROF(sptr) & 4)) return OFFSETOF(sptr);\n    return (char *)wine_ldt_copy.base[SELECTOROF(sptr) >> __AHSHIFT] + OFFSETOF(sptr);\n}\n\n/***********************************************************************\n *           MapSLFix   (KERNEL32.@)\n *\n * FIXME: MapSLFix and UnMapSLFixArray should probably prevent\n * unexpected linear address change when GlobalCompact() shuffles\n * moveable blocks.\n */\n\nLPVOID WINAPI MapSLFix( SEGPTR sptr )\n{\n    return MapSL(sptr);\n}\n\n\n/***********************************************************************\n *           UnMapSLFixArray   (KERNEL32.@)\n *\n * Must not change EAX, hence defined as asm function.\n */\n__ASM_STDCALL_FUNC( UnMapSLFixArray, 8, \"ret $8\" )\n\n/***********************************************************************\n *\t\tSMapLS (KERNEL32.@)\n */\n__ASM_STDCALL_FUNC( SMapLS, 0,\n                   \"xor %edx,%edx\\n\\t\"\n                   \"testl $0xffff0000,%eax\\n\\t\"\n                   \"jz 1f\\n\\t\"\n                   \"pushl %eax\\n\\t\"\n                   \"call \" __ASM_NAME(\"MapLS\") __ASM_STDCALL(4) \"\\n\\t\"\n                   \"movl %eax,%edx\\n\"\n                   \"1:\\tret\" )\n\n/***********************************************************************\n *\t\tSUnMapLS (KERNEL32.@)\n */\n__ASM_STDCALL_FUNC( SUnMapLS, 0,\n                   \"pushl %eax\\n\\t\"  /* preserve eax */\n                   \"pushl %eax\\n\\t\"\n                   \"call \" __ASM_NAME(\"UnMapLS\") __ASM_STDCALL(4) \"\\n\\t\"\n                   \"popl %eax\\n\\t\"\n                   \"ret\" )\n\n/***********************************************************************\n *\t\tSMapLS_IP_EBP_8 (KERNEL32.@)\n *\n * These functions map linear pointers at [EBP+xxx] to segmented pointers\n * and return them.\n * Win95 uses some kind of alias structs, which it stores in [EBP+x] to\n * unravel them at SUnMapLS. We just store the segmented pointer there.\n */\n__ASM_STDCALL_FUNC( SMapLS_IP_EBP_8, 0,\n                    \"movl 8(%ebp),%eax\\n\\t\"\n                    \"call \" __ASM_NAME(\"SMapLS\") __ASM_STDCALL(4) \"\\n\\t\"\n                    \"movl %edx,8(%ebp)\\n\\t\"\n                    \"ret\" )\n\n/***********************************************************************\n *\t\tSMapLS_IP_EBP_12 (KERNEL32.@)\n */\n__ASM_STDCALL_FUNC( SMapLS_IP_EBP_12, 0,\n                    \"movl 12(%ebp),%eax\\n\\t\"\n                    \"call \" __ASM_NAME(\"SMapLS\") __ASM_STDCALL(4) \"\\n\\t\"\n                    \"movl %edx,12(%ebp)\\n\\t\"\n                    \"ret\" )\n\n/***********************************************************************\n *\t\tSMapLS_IP_EBP_16 (KERNEL32.@)\n */\n__ASM_STDCALL_FUNC( SMapLS_IP_EBP_16, 0,\n                    \"movl 16(%ebp),%eax\\n\\t\"\n                    \"call \" __ASM_NAME(\"SMapLS\") __ASM_STDCALL(4) \"\\n\\t\"\n                    \"movl %edx,16(%ebp)\\n\\t\"\n                    \"ret\" )\n\n/***********************************************************************\n *\t\tSMapLS_IP_EBP_20 (KERNEL32.@)\n */\n__ASM_STDCALL_FUNC( SMapLS_IP_EBP_20, 0,\n                    \"movl 20(%ebp),%eax\\n\\t\"\n                    \"call \" __ASM_NAME(\"SMapLS\") __ASM_STDCALL(4) \"\\n\\t\"\n                    \"movl %edx,20(%ebp)\\n\\t\"\n                    \"ret\" )\n\n/***********************************************************************\n *\t\tSMapLS_IP_EBP_24 (KERNEL32.@)\n */\n__ASM_STDCALL_FUNC( SMapLS_IP_EBP_24, 0,\n                    \"movl 24(%ebp),%eax\\n\\t\"\n                    \"call \" __ASM_NAME(\"SMapLS\") __ASM_STDCALL(4) \"\\n\\t\"\n                    \"movl %edx,24(%ebp)\\n\\t\"\n                    \"ret\" )\n\n/***********************************************************************\n *\t\tSMapLS_IP_EBP_28 (KERNEL32.@)\n */\n__ASM_STDCALL_FUNC( SMapLS_IP_EBP_28, 0,\n                    \"movl 28(%ebp),%eax\\n\\t\"\n                    \"call \" __ASM_NAME(\"SMapLS\") __ASM_STDCALL(4) \"\\n\\t\"\n                    \"movl %edx,28(%ebp)\\n\\t\"\n                    \"ret\" )\n\n/***********************************************************************\n *\t\tSMapLS_IP_EBP_32 (KERNEL32.@)\n */\n__ASM_STDCALL_FUNC( SMapLS_IP_EBP_32, 0,\n                    \"movl 32(%ebp),%eax\\n\\t\"\n                    \"call \" __ASM_NAME(\"SMapLS\") __ASM_STDCALL(4) \"\\n\\t\"\n                    \"movl %edx,32(%ebp)\\n\\t\"\n                    \"ret\" )\n\n/***********************************************************************\n *\t\tSMapLS_IP_EBP_36 (KERNEL32.@)\n */\n__ASM_STDCALL_FUNC( SMapLS_IP_EBP_36, 0,\n                    \"movl 36(%ebp),%eax\\n\\t\"\n                    \"call \" __ASM_NAME(\"SMapLS\") __ASM_STDCALL(4) \"\\n\\t\"\n                    \"movl %edx,36(%ebp)\\n\\t\"\n                    \"ret\" )\n\n/***********************************************************************\n *\t\tSMapLS_IP_EBP_40 (KERNEL32.@)\n */\n__ASM_STDCALL_FUNC( SMapLS_IP_EBP_40, 0,\n                    \"movl 40(%ebp),%eax\\n\\t\"\n                    \"call \" __ASM_NAME(\"SMapLS\") __ASM_STDCALL(4) \"\\n\\t\"\n                    \"movl %edx,40(%ebp)\\n\\t\"\n                    \"ret\" )\n\n/***********************************************************************\n *\t\tSUnMapLS_IP_EBP_8 (KERNEL32.@)\n */\n__ASM_STDCALL_FUNC( SUnMapLS_IP_EBP_8, 0,\n                    \"pushl %eax\\n\\t\"  /* preserve eax */\n                    \"pushl 8(%ebp)\\n\\t\"\n                    \"call \" __ASM_NAME(\"UnMapLS\") __ASM_STDCALL(4) \"\\n\\t\"\n                    \"movl $0,8(%ebp)\\n\\t\"\n                    \"popl %eax\\n\\t\"\n                    \"ret\" )\n\n/***********************************************************************\n *\t\tSUnMapLS_IP_EBP_12 (KERNEL32.@)\n */\n__ASM_STDCALL_FUNC( SUnMapLS_IP_EBP_12, 0,\n                    \"pushl %eax\\n\\t\"  /* preserve eax */\n                    \"pushl 12(%ebp)\\n\\t\"\n                    \"call \" __ASM_NAME(\"UnMapLS\") __ASM_STDCALL(4) \"\\n\\t\"\n                    \"movl $0,12(%ebp)\\n\\t\"\n                    \"popl %eax\\n\\t\"\n                    \"ret\" )\n\n/***********************************************************************\n *\t\tSUnMapLS_IP_EBP_16 (KERNEL32.@)\n */\n__ASM_STDCALL_FUNC( SUnMapLS_IP_EBP_16, 0,\n                    \"pushl %eax\\n\\t\"  /* preserve eax */\n                    \"pushl 16(%ebp)\\n\\t\"\n                    \"call \" __ASM_NAME(\"UnMapLS\") __ASM_STDCALL(4) \"\\n\\t\"\n                    \"movl $0,16(%ebp)\\n\\t\"\n                    \"popl %eax\\n\\t\"\n                    \"ret\" )\n\n/***********************************************************************\n *\t\tSUnMapLS_IP_EBP_20 (KERNEL32.@)\n */\n__ASM_STDCALL_FUNC( SUnMapLS_IP_EBP_20, 0,\n                    \"pushl %eax\\n\\t\"  /* preserve eax */\n                    \"pushl 20(%ebp)\\n\\t\"\n                    \"call \" __ASM_NAME(\"UnMapLS\") __ASM_STDCALL(4) \"\\n\\t\"\n                    \"movl $0,20(%ebp)\\n\\t\"\n                    \"popl %eax\\n\\t\"\n                    \"ret\" )\n\n/***********************************************************************\n *\t\tSUnMapLS_IP_EBP_24 (KERNEL32.@)\n */\n__ASM_STDCALL_FUNC( SUnMapLS_IP_EBP_24, 0,\n                    \"pushl %eax\\n\\t\"  /* preserve eax */\n                    \"pushl 24(%ebp)\\n\\t\"\n                    \"call \" __ASM_NAME(\"UnMapLS\") __ASM_STDCALL(4) \"\\n\\t\"\n                    \"movl $0,24(%ebp)\\n\\t\"\n                    \"popl %eax\\n\\t\"\n                    \"ret\" )\n\n/***********************************************************************\n *\t\tSUnMapLS_IP_EBP_28 (KERNEL32.@)\n */\n__ASM_STDCALL_FUNC( SUnMapLS_IP_EBP_28, 0,\n                    \"pushl %eax\\n\\t\"  /* preserve eax */\n                    \"pushl 28(%ebp)\\n\\t\"\n                    \"call \" __ASM_NAME(\"UnMapLS\") __ASM_STDCALL(4) \"\\n\\t\"\n                    \"movl $0,28(%ebp)\\n\\t\"\n                    \"popl %eax\\n\\t\"\n                    \"ret\" )\n\n/***********************************************************************\n *\t\tSUnMapLS_IP_EBP_32 (KERNEL32.@)\n */\n__ASM_STDCALL_FUNC( SUnMapLS_IP_EBP_32, 0,\n                    \"pushl %eax\\n\\t\"  /* preserve eax */\n                    \"pushl 32(%ebp)\\n\\t\"\n                    \"call \" __ASM_NAME(\"UnMapLS\") __ASM_STDCALL(4) \"\\n\\t\"\n                    \"movl $0,32(%ebp)\\n\\t\"\n                    \"popl %eax\\n\\t\"\n                    \"ret\" )\n\n/***********************************************************************\n *\t\tSUnMapLS_IP_EBP_36 (KERNEL32.@)\n */\n__ASM_STDCALL_FUNC( SUnMapLS_IP_EBP_36, 0,\n                    \"pushl %eax\\n\\t\"  /* preserve eax */\n                    \"pushl 36(%ebp)\\n\\t\"\n                    \"call \" __ASM_NAME(\"UnMapLS\") __ASM_STDCALL(4) \"\\n\\t\"\n                    \"movl $0,36(%ebp)\\n\\t\"\n                    \"popl %eax\\n\\t\"\n                    \"ret\" )\n\n/***********************************************************************\n *\t\tSUnMapLS_IP_EBP_40 (KERNEL32.@)\n */\n__ASM_STDCALL_FUNC( SUnMapLS_IP_EBP_40, 0,\n                    \"pushl %eax\\n\\t\"  /* preserve eax */\n                    \"pushl 40(%ebp)\\n\\t\"\n                    \"call \" __ASM_NAME(\"UnMapLS\") __ASM_STDCALL(4) \"\\n\\t\"\n                    \"movl $0,40(%ebp)\\n\\t\"\n                    \"popl %eax\\n\\t\"\n                    \"ret\" )\n"
  },
  {
    "path": "krnl386/snoop.c",
    "content": "/*\n * 386-specific Win16 dll<->dll snooping functions\n *\n * Copyright 1998 Marcus Meissner\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <assert.h>\n#include <string.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winnt.h\"\n#include \"wine/winbase16.h\"\n#include \"winternl.h\"\n#include \"wine/library.h\"\n#include \"kernel16_private.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(snoop);\n\n#include \"pshpack1.h\"\n\nstatic void WINAPI SNOOP16_Entry(FARPROC proc, LPBYTE args, CONTEXT *context);\nstatic void WINAPI SNOOP16_Return(FARPROC proc, LPBYTE args, CONTEXT *context);\n\ntypedef\tstruct tagSNOOP16_FUN {\n\t/* code part */\n\tBYTE\t\tlcall;\t\t/* 0x9a call absolute with segment */\n\tDWORD\t\tsnr;\n\t/* unreached */\n\tint\t\tnrofargs;\n\tFARPROC16\torigfun;\n\tchar\t\t*name;\n} SNOOP16_FUN;\n\ntypedef struct tagSNOOP16_DLL {\n\tHMODULE16\thmod;\n\tHANDLE16\tfunhandle;\n\tSNOOP16_FUN\t*funs;\n\tstruct tagSNOOP16_DLL\t*next;\n\tchar name[1];\n} SNOOP16_DLL;\n\ntypedef struct tagSNOOP16_RETURNENTRY {\n\t/* code part */\n\tBYTE\t\tlcall;\t\t/* 0x9a call absolute with segment */\n\tDWORD\t\tsnr;\n\t/* unreached */\n\tFARPROC16\torigreturn;\n\tSNOOP16_DLL\t*dll;\n\tDWORD\t\tordinal;\n\tWORD\t\torigSP;\n\tWORD\t\t*args;\t\t/* saved args across a stdcall */\n} SNOOP16_RETURNENTRY;\n\ntypedef struct tagSNOOP16_RETURNENTRIES {\n\tSNOOP16_RETURNENTRY entry[65500/sizeof(SNOOP16_RETURNENTRY)];\n\tHANDLE16\trethandle;\n\tstruct tagSNOOP16_RETURNENTRIES\t*next;\n} SNOOP16_RETURNENTRIES;\n\ntypedef struct tagSNOOP16_RELAY {\n\tWORD\t\tpushbp;\t\t/* 0x5566 */\n\tBYTE\t\tpusheax;\t/* 0x50 */\n\tWORD\t\tpushax;\t\t/* 0x5066 */\n\tBYTE\t\tpushl;\t\t/* 0x68 */\n\tDWORD\t\trealfun;\t/* SNOOP16_Return */\n\tBYTE\t\tlcall;\t\t/* 0x9a call absolute with segment */\n\tDWORD\t\tcallfromregs;\n\tWORD\t\tseg;\n        WORD\t\tlret;           /* 0xcb66 */\n} SNOOP16_RELAY;\n\n#include \"poppack.h\"\n\nstatic\tSNOOP16_DLL\t\t*firstdll = NULL;\nstatic\tSNOOP16_RETURNENTRIES \t*firstrets = NULL;\nstatic\tSNOOP16_RELAY\t\t*snr;\nstatic\tHANDLE16\t\txsnr = 0;\n\nvoid\nSNOOP16_RegisterDLL(HMODULE16 hModule,LPCSTR name) {\n\tSNOOP16_DLL\t**dll = &(firstdll);\n\tconst char\t*p;\n\tchar\t\t*q;\n\n\tif (!TRACE_ON(snoop)) return;\n\n        TRACE(\"hmod=%x, name=%s\\n\", hModule, name);\n\n    if (strstr(name, \"WEBLNK16.API\"))\n    {\n        return;\n    }\n\tif (!snr) {\n\t\txsnr=GLOBAL_Alloc(GMEM_ZEROINIT,2*sizeof(*snr),0,WINE_LDT_FLAGS_CODE|WINE_LDT_FLAGS_32BIT,0);\n\t\tsnr = GlobalLock16(xsnr);\n\t\tsnr[0].pushbp\t= 0x5566;\n\t\tsnr[0].pusheax\t= 0x50;\n\t\tsnr[0].pushax\t= 0x5066;\n\t\tsnr[0].pushl\t= 0x68;\n\t\tsnr[0].realfun\t= (DWORD)SNOOP16_Entry;\n\t\tsnr[0].lcall \t= 0x9a;\n\t\tsnr[0].callfromregs = (DWORD)__wine_call_from_16_regs;\n\t\tsnr[0].seg      = wine_get_cs();\n\t\tsnr[0].lret     = 0xcb66;\n\n\t\tsnr[1].pushbp\t= 0x5566;\n\t\tsnr[1].pusheax\t= 0x50;\n\t\tsnr[1].pushax\t= 0x5066;\n\t\tsnr[1].pushl\t= 0x68;\n\t\tsnr[1].realfun\t= (DWORD)SNOOP16_Return;\n\t\tsnr[1].lcall \t= 0x9a;\n\t\tsnr[1].callfromregs = (DWORD)__wine_call_from_16_regs;\n\t\tsnr[1].seg      = wine_get_cs();\n\t\tsnr[1].lret     = 0xcb66;\n\t}\n\twhile (*dll) {\n\t\tif ((*dll)->hmod == hModule)\n                {\n                    /* another dll, loaded at the same address */\n                    GlobalUnlock16((*dll)->funhandle);\n                    GlobalFree16((*dll)->funhandle);\n                    break;\n                }\n\t\tdll = &((*dll)->next);\n\t}\n\n\tif (*dll)\n\t\t*dll = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, *dll, sizeof(SNOOP16_DLL)+strlen(name));\n\telse\n\t\t*dll = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(SNOOP16_DLL)+strlen(name));\t\n\n\t(*dll)->next\t= NULL;\n\t(*dll)->hmod\t= hModule;\n\tif ((p=strrchr(name,'\\\\')))\n\t\tname = p+1;\n\tstrcpy( (*dll)->name, name );\n\tif ((q=strrchr((*dll)->name,'.')))\n\t\t*q='\\0';\n\t(*dll)->funhandle = GlobalHandleToSel16(GLOBAL_Alloc(GMEM_ZEROINIT,65535,0,WINE_LDT_FLAGS_CODE,0));\n\t(*dll)->funs = GlobalLock16((*dll)->funhandle);\n\tif (!(*dll)->funs) {\n\t\tHeapFree(GetProcessHeap(),0,*dll);\n\t\tFIXME(\"out of memory\\n\");\n\t\treturn;\n\t}\n}\n\nFARPROC16\nSNOOP16_GetProcAddress16(HMODULE16 hmod,DWORD ordinal,FARPROC16 origfun) {\n\tSNOOP16_DLL\t\t\t*dll = firstdll;\n\tSNOOP16_FUN\t\t\t*fun;\n\tNE_MODULE\t\t\t*pModule = NE_GetPtr(hmod);\n\tunsigned char\t\t\t*cpnt;\n\tchar\t\t\t\tname[200];\n\n\tif (!TRACE_ON(snoop) || !pModule || !HIWORD(origfun))\n\t\treturn origfun;\n\tif (!*(LPBYTE)MapSL((SEGPTR)origfun)) /* 0x00 is an impossible opcode, possible dataref. */\n\t\treturn origfun;\n\twhile (dll) {\n\t\tif (hmod == dll->hmod)\n\t\t\tbreak;\n\t\tdll=dll->next;\n\t}\n\tif (!dll)\t/* probably internal */\n\t\treturn origfun;\n\tif (ordinal>65535/sizeof(SNOOP16_FUN))\n\t\treturn origfun;\n\tfun = dll->funs+ordinal;\n\t/* already done? */\n\tfun->lcall \t= 0x9a;\n\tfun->snr\t= MAKELONG(0,xsnr);\n\tfun->origfun\t= origfun;\n\tif (fun->name)\n\t\treturn (FARPROC16)(SEGPTR)MAKELONG(((char*)fun-(char*)dll->funs),dll->funhandle);\n\tcpnt = (unsigned char *)pModule + pModule->ne_restab;\n\twhile (*cpnt) {\n\t\tcpnt += *cpnt + 1 + sizeof(WORD);\n\t\tif (*(WORD*)(cpnt+*cpnt+1) == ordinal) {\n\t\t\tsprintf(name,\"%.*s\",*cpnt,cpnt+1);\n\t\t\tbreak;\n\t\t}\n\t}\n\t/* Now search the non-resident names table */\n\n\tif (!*cpnt && pModule->nrname_handle) {\n\t\tcpnt = GlobalLock16( pModule->nrname_handle );\n\t\twhile (*cpnt) {\n\t\t\tcpnt += *cpnt + 1 + sizeof(WORD);\n\t\t\tif (*(WORD*)(cpnt+*cpnt+1) == ordinal) {\n\t\t\t\t    sprintf(name,\"%.*s\",*cpnt,cpnt+1);\n\t\t\t\t    break;\n\t\t\t}\n\t\t}\n\t}\n\tif (*cpnt)\n        {\n            fun->name = HeapAlloc(GetProcessHeap(),0,strlen(name)+1);\n            strcpy( fun->name, name );\n        }\n\telse\n            fun->name = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,1); /* empty string */\n\n\tif (!SNOOP16_ShowDebugmsgSnoop(dll->name, ordinal, fun->name))\n\t\treturn origfun;\n\n\t/* more magic. do not try to snoop thunk data entries (MMSYSTEM) */\n\tif (strchr(fun->name,'_')) {\n\t\tchar *s=strchr(fun->name,'_');\n\n\t\tif (!strncasecmp(s,\"_thunkdata\",10)) {\n\t\t\tHeapFree(GetProcessHeap(),0,fun->name);\n\t\t\tfun->name = NULL;\n\t\t\treturn origfun;\n\t\t}\n\t}\n\tfun->lcall \t= 0x9a;\n\tfun->snr\t= MAKELONG(0,xsnr);\n\tfun->origfun\t= origfun;\n\tfun->nrofargs\t= -1;\n\treturn (FARPROC16)(SEGPTR)MAKELONG(((char*)fun-(char*)dll->funs),dll->funhandle);\n}\n\n#define CALLER1REF (*(DWORD*)(MapSL( MAKESEGPTR(context->SegSs,LOWORD(context->Esp)+4))))\nstatic void WINAPI SNOOP16_Entry(FARPROC proc, LPBYTE args, CONTEXT *context) {\n\tDWORD\t\tordinal=0;\n\tDWORD\t\tentry=(DWORD)MapSL( MAKESEGPTR(context->SegCs,LOWORD(context->Eip)) )-5;\n\tWORD\t\txcs = context->SegCs;\n\tSNOOP16_DLL\t*dll = firstdll;\n\tSNOOP16_FUN\t*fun = NULL;\n\tSNOOP16_RETURNENTRIES\t**rets = &firstrets;\n\tSNOOP16_RETURNENTRY\t*ret;\n\tunsigned\ti=0;\n\tint\t\tmax;\n\n\twhile (dll) {\n\t\tif (xcs == dll->funhandle) {\n\t\t\tfun = (SNOOP16_FUN*)entry;\n\t\t\tordinal = fun-dll->funs;\n\t\t\tbreak;\n\t\t}\n\t\tdll=dll->next;\n\t}\n\tif (!dll) {\n\t\tFIXME(\"entrypoint 0x%08x not found\\n\",entry);\n\t\treturn; /* oops */\n\t}\n\twhile (*rets) {\n\t\tfor (i=0;i<ARRAY_SIZE((*rets)->entry);i++)\n\t\t\tif (!(*rets)->entry[i].origreturn)\n\t\t\t\tbreak;\n\t\tif (i!=ARRAY_SIZE((*rets)->entry))\n\t\t\tbreak;\n\t\trets = &((*rets)->next);\n\t}\n\tif (!*rets) {\n\t\tHANDLE16 hand = GlobalHandleToSel16(GLOBAL_Alloc(GMEM_ZEROINIT,65535,0,WINE_LDT_FLAGS_CODE,0));\n\t\t*rets = GlobalLock16(hand);\n\t\t(*rets)->rethandle = hand;\n\t\ti = 0;\t/* entry 0 is free */\n\t}\n\tret = &((*rets)->entry[i]);\n\tret->lcall \t= 0x9a;\n\tret->snr\t= MAKELONG(sizeof(SNOOP16_RELAY),xsnr);\n\tret->origreturn\t= (FARPROC16)CALLER1REF;\n\tCALLER1REF\t= MAKELONG((char*)&(ret->lcall)-(char*)((*rets)->entry),(*rets)->rethandle);\n\tret->dll\t= dll;\n\tret->args\t= NULL;\n\tret->ordinal\t= ordinal;\n    context->Esp += 4;;\n\tret->origSP\t= LOWORD(context->Esp);\n\n\tcontext->Eip= LOWORD(fun->origfun);\n\tcontext->SegCs = HIWORD(fun->origfun);\n\n\n\tDPRINTF(\"%04x:CALL %s.%d: %s(\",GetCurrentThreadId(), dll->name,ordinal,fun->name);\n\tif (fun->nrofargs>0) {\n\t\tmax = fun->nrofargs;\n\t\tif (max>16) max=16;\n\t\tfor (i=max;i--;)\n\t\t\tDPRINTF(\"%04x%s\",*(WORD*)((char *) MapSL( MAKESEGPTR(context->SegSs,LOWORD(context->Esp)) )+8+sizeof(WORD)*i),i?\",\":\"\");\n\t\tif (max!=fun->nrofargs)\n\t\t\tDPRINTF(\" ...\");\n\t} else if (fun->nrofargs<0) {\n\t\tDPRINTF(\"<unknown, check return>\");\n\t\tret->args = HeapAlloc(GetProcessHeap(),0,16*sizeof(WORD));\n\t\tmemcpy(ret->args,(LPBYTE)((char *) MapSL( MAKESEGPTR(context->SegSs,LOWORD(context->Esp)) )+8),sizeof(WORD)*16);\n\t}\n\tDPRINTF(\") ret=%04x:%04x\\n\",HIWORD(ret->origreturn),LOWORD(ret->origreturn));\n}\n\nstatic void WINAPI SNOOP16_Return(FARPROC proc, LPBYTE args, CONTEXT *context) {\n\tSNOOP16_RETURNENTRY\t*ret = (SNOOP16_RETURNENTRY*)((char *) MapSL( MAKESEGPTR(context->SegCs,LOWORD(context->Eip)) )-5);\n\n\t/* We haven't found out the nrofargs yet. If we called a cdecl\n\t * function it is too late anyway and we can just set '0' (which\n\t * will be the difference between orig and current SP\n\t * If pascal -> everything ok.\n\t */\n    context->Esp += 4;\n\tif (ret->dll->funs[ret->ordinal].nrofargs<0) {\n\t\tret->dll->funs[ret->ordinal].nrofargs=(LOWORD(context->Esp)-ret->origSP-4)/2;\n\t}\n\tcontext->Eip = LOWORD(ret->origreturn);\n\tcontext->SegCs  = HIWORD(ret->origreturn);\n        DPRINTF(\"%04x:RET  %s.%d: %s(\",\n                GetCurrentThreadId(),ret->dll->name,ret->ordinal,\n                ret->dll->funs[ret->ordinal].name);\n\tif (ret->args) {\n\t\tint\ti,max;\n\n\t\tmax = ret->dll->funs[ret->ordinal].nrofargs;\n\t\tif (max>16)\n\t\t\tmax=16;\n\t\tif (max<0)\n\t\t\tmax=0;\n\n\t\tfor (i=max;i--;)\n\t\t\tDPRINTF(\"%04x%s\",ret->args[i],i?\",\":\"\");\n\t\tif (max!=ret->dll->funs[ret->ordinal].nrofargs)\n\t\t\tDPRINTF(\" ...\");\n\t\tHeapFree(GetProcessHeap(),0,ret->args);\n\t\tret->args = NULL;\n\t}\n        DPRINTF(\") retval = %04x:%04x ret=%04x:%04x\\n\",\n                (WORD)context->Edx,(WORD)context->Eax,\n                HIWORD(ret->origreturn),LOWORD(ret->origreturn));\n\tret->origreturn = NULL; /* mark as empty */\n}\n"
  },
  {
    "path": "krnl386/soundblaster.c",
    "content": "/*\n * Soundblaster Emulation\n *\n * Copyright 2002 Christian Costa\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <stdarg.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"dosexe.h\"\n#include \"wine/debug.h\"\n#include \"wingdi.h\"\n#include \"mmsystem.h\"\n#include \"dsound.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(sblaster);\n\n/* Board Configuration */\n/* FIXME: Should be in a config file */\n#define SB_IRQ 5\n#define SB_IRQ_PRI 11\n#define SB_DMA 1\n\n/* Soundblaster state */\nstatic int SampleMode;         /* Mono / Stereo */\nstatic int SampleRate;\nstatic int SamplesCount;\nstatic BYTE DSP_Command[256];  /* Store param numbers in bytes for each command */\nstatic BYTE DSP_InBuffer[10];  /* Store DSP command bytes parameters from host */\nstatic int InSize;             /* Nb of bytes in InBuffer */\nstatic BYTE DSP_OutBuffer[10]; /* Store DSP information bytes to host */\nstatic int OutSize;            /* Nb of bytes in InBuffer */\nstatic int command;            /* Current command */\nstatic BOOL end_sound_loop = FALSE;\nstatic BOOL dma_enable = FALSE;\n\n/* The maximum size of a dma transfer can be 65536 */\n#define DMATRFSIZE 1024\n\n/* DMA can perform 8 or 16-bit transfer */\nstatic BYTE dma_buffer[DMATRFSIZE*2];\n\n/* Direct Sound buffer config */\n#define DSBUFLEN 4096 /* FIXME: Only this value seems to work */\n\n/* Direct Sound playback stuff */\nstatic LPDIRECTSOUND lpdsound;\nstatic LPDIRECTSOUNDBUFFER lpdsbuf;\nstatic DSBUFFERDESC buf_desc;\nstatic WAVEFORMATEX wav_fmt;\nstatic HANDLE SB_Thread;\nstatic UINT buf_off;\nextern HWND vga_hwnd;\n\n/* SB_Poll performs DMA transfers and fills the Direct Sound Buffer */\nstatic DWORD CALLBACK SB_Poll( void *dummy )\n{\n    HRESULT result;\n    LPBYTE lpbuf1 = NULL;\n    LPBYTE lpbuf2 = NULL;\n    DWORD dwsize1 = 0;\n    DWORD dwsize2 = 0;\n    DWORD dwbyteswritten1 = 0;\n    DWORD dwbyteswritten2 = 0;\n    int size;\n\n    /* FIXME: this loop must be improved */\n    while(!end_sound_loop)\n    {\n        Sleep(10);\n\n        if (dma_enable) {\n            size = DMA_Transfer(SB_DMA,min(DMATRFSIZE,SamplesCount),dma_buffer);\n        } else\n            continue;\n\n        result = IDirectSoundBuffer_Lock(lpdsbuf,buf_off,size,(LPVOID *)&lpbuf1,&dwsize1,(LPVOID *)&lpbuf2,&dwsize2,0);\n        if (result != DS_OK) {\n\t  ERR(\"Unable to lock sound buffer !\\n\");\n          continue;\n        }\n\n        dwbyteswritten1 = min(size,dwsize1);\n        memcpy(lpbuf1,dma_buffer,dwbyteswritten1);\n        if (size>dwsize1) {\n            dwbyteswritten2 = min(size - dwbyteswritten1,dwsize2);\n            memcpy(lpbuf2,dma_buffer+dwbyteswritten1,dwbyteswritten2);\n        }\n        buf_off = (buf_off + dwbyteswritten1 + dwbyteswritten2) % DSBUFLEN;\n\n        result = IDirectSoundBuffer_Unlock(lpdsbuf,lpbuf1,dwbyteswritten1,lpbuf2,dwbyteswritten2);\n        if (result!=DS_OK)\n\t    ERR(\"Unable to unlock sound buffer !\\n\");\n\n        SamplesCount -= size;\n        if (!SamplesCount) {\n            DOSVM_QueueEvent(SB_IRQ,SB_IRQ_PRI,NULL,NULL);\n            dma_enable = FALSE;\n        }\n    }\n    return 0;\n}\n\nstatic BOOL SB_Init(void)\n{\n    HRESULT result;\n\n    if (!lpdsound) {\n        result = DirectSoundCreate(NULL,&lpdsound,NULL);\n        if (result != DS_OK) {\n            ERR(\"Unable to initialize Sound Subsystem err = %x !\\n\",result);\n            return FALSE;\n        }\n\n        /* FIXME: To uncomment when :\n           - SetCooperative level is correctly implemented\n           - an always valid and non changing handle to a windows  (vga_hwnd) is available\n             (this surely needs some work in vga.c)\n        result = IDirectSound_SetCooperativeLevel(lpdsound,vga_hwnd,DSSCL_EXCLUSIVE|DSSCL_PRIORITY);\n        if (result != DS_OK) {\n            ERR(\"Can't set cooperative level !\\n\");\n            return FALSE;\n        }\n        */\n\n        /* Default format */\n        wav_fmt.wFormatTag = WAVE_FORMAT_PCM;\n        wav_fmt.nChannels = 1;\n        wav_fmt.nSamplesPerSec = 22050;\n        wav_fmt.nAvgBytesPerSec = 22050;\n        wav_fmt.nBlockAlign = 1;\n        wav_fmt.wBitsPerSample = 8;\n        wav_fmt.cbSize = 0;\n\n        memset(&buf_desc,0,sizeof(DSBUFFERDESC));\n        buf_desc.dwSize = sizeof(DSBUFFERDESC);\n        buf_desc.dwBufferBytes = DSBUFLEN;\n        buf_desc.lpwfxFormat = &wav_fmt;\n        result = IDirectSound_CreateSoundBuffer(lpdsound,&buf_desc,&lpdsbuf,NULL);\n        if (result != DS_OK) {\n            ERR(\"Can't create sound buffer !\\n\");\n            return FALSE;\n        }\n\n        result = IDirectSoundBuffer_Play(lpdsbuf,0, 0, DSBPLAY_LOOPING);\n        if (result != DS_OK) {\n            ERR(\"Can't start playing !\\n\");\n            return FALSE;\n        }\n\n        buf_off = 0;\n        end_sound_loop = FALSE;\n        SB_Thread = CreateThread(NULL, 0, SB_Poll, NULL, 0, NULL);\n        TRACE(\"thread\\n\");\n        if (!SB_Thread) {\n            ERR(\"Can't create thread !\\n\");\n            return FALSE;\n        }\n    }\n    return TRUE;\n}\n\nstatic void SB_Reset(void)\n{\n    int i;\n\n    for(i=0;i<256;i++)\n        DSP_Command[i]=0;\n\n    /* Set Time Constant */\n    DSP_Command[0x40]=1;\n    /* Generate IRQ */\n    DSP_Command[0xF2]=0;\n    /* DMA DAC 8-bits */\n    DSP_Command[0x14]=2;\n    /* Generic DAC/ADC DMA (16-bit, 8-bit) */\n    for(i=0xB0;i<=0xCF;i++)\n        DSP_Command[i]=3;\n    /* DSP Identification */\n    DSP_Command[0xE0]=1;\n\n    /* Clear command and input buffer */\n    command = -1;\n    InSize = 0;\n\n    /* Put a garbage value in the output buffer */\n    OutSize = 1;\n    if (SB_Init())\n        /* All right, let's put the magic value for autodetection */\n        DSP_OutBuffer[0] = 0xaa;\n    else\n        /* Something is wrong, put 0 to failed autodetection */\n        DSP_OutBuffer[0] = 0x00;\n}\n\n/* Find a standard sampling rate for DirectSound */\nstatic int SB_StdSampleRate(int SampleRate)\n{\n  if (SampleRate>((44100+48000)/2)) return 48000;\n  if (SampleRate>((32000+44100)/2)) return 44100;\n  if (SampleRate>((24000+32000)/2)) return 32000;\n  if (SampleRate>((22050+24000)/2)) return 24000;\n  if (SampleRate>((16000+22050)/2)) return 22050;\n  if (SampleRate>((12000+16000)/2)) return 16000;\n  if (SampleRate>((11025+12000)/2)) return 12000;\n  if (SampleRate>((8000+11025)/2))  return 11025;\n  return 8000;\n}\n\nvoid SB_ioport_out( WORD port, BYTE val )\n{\n    switch(port)\n    {\n    /* DSP - Reset */\n    case 0x226:\n        TRACE(\"Resetting DSP.\\n\");\n        SB_Reset();\n        break;\n    /* DSP - Write Data or Command */\n    case 0x22c:\n        TRACE(\"val=%x\\n\",val);\n        if (command == -1) {\n          /* Clear input buffer and set the current command */\n          command = val;\n          InSize = 0;\n        }\n        if (InSize!=DSP_Command[command])\n\t   /* Fill the input buffer the command parameters if any */\n           DSP_InBuffer[InSize++]=val;\n        else {\n\t    /* Process command */\n            switch(command)\n            {\n            case 0x10: /* SB */\n                FIXME(\"Direct DAC (8-bit) - Not Implemented\\n\");\n                break;\n            case 0x14: /* SB */\n                SamplesCount = DSP_InBuffer[1]+(val<<8)+1;\n                TRACE(\"DMA DAC (8-bit) for %x samples\\n\",SamplesCount);\n                dma_enable = TRUE;\n                break;\n            case 0x20:\n                FIXME(\"Direct ADC (8-bit) - Not Implemented\\n\");\n                break;\n            case 0x24: /* SB */\n                FIXME(\"DMA ADC (8-bit) - Not Implemented\\n\");\n                break;\n            case 0x40: /* SB */\n                SampleRate = 1000000/(256-val);\n                TRACE(\"Set Time Constant (%d <-> %d Hz => %d Hz)\\n\",DSP_InBuffer[0],\n                    SampleRate,SB_StdSampleRate(SampleRate));\n                SampleRate = SB_StdSampleRate(SampleRate);\n                wav_fmt.nSamplesPerSec = SampleRate;\n                wav_fmt.nAvgBytesPerSec = SampleRate;\n                IDirectSoundBuffer_SetFormat(lpdsbuf,&wav_fmt);\n                break;\n\t    /* case 0xBX/0xCX -> See below */\n            case 0xD0: /* SB */\n                TRACE(\"Halt DMA operation (8-bit)\\n\");\n                dma_enable = FALSE;\n                break;\n            case 0xD1: /* SB */\n                FIXME(\"Enable Speaker - Not Implemented\\n\");\n                break;\n            case 0xD3: /* SB */\n                FIXME(\"Disable Speaker - Not Implemented\\n\");\n                break;\n            case 0xD4: /* SB */\n                FIXME(\"Continue DMA operation (8-bit) - Not Implemented\\n\");\n                break;\n            case 0xD8: /* SB */\n                FIXME(\"Speaker Status - Not Implemented\\n\");\n                break;\n\t    case 0xE0: /* SB 2.0 */\n                TRACE(\"DSP Identification\\n\");\n                DSP_OutBuffer[OutSize++] = ~val;\n                break;\n            case 0xE1: /* SB */\n               TRACE(\"DSP Version\\n\");\n               OutSize=2;\n               DSP_OutBuffer[0]=0; /* returns version 1.0 */\n               DSP_OutBuffer[1]=1;\n                break;\n            case 0xF2: /* SB */\n                TRACE(\"IRQ Request (8-bit)\\n\");\n                DOSVM_QueueEvent(SB_IRQ,SB_IRQ_PRI,NULL,NULL);\n                break;\n            default:\n\t      if (((command&0xF0)==0xB0)||((DSP_InBuffer[0]&0xF0)==0xC0)) {\n\t\t    /* SB16 */\n                    FIXME(\"Generic DAC/ADC DMA (16-bit, 8-bit) - %d % d\\n\",command,DSP_InBuffer[1]);\n                    if (command&0x02)\n\t\t        FIXME(\"Generic DAC/ADC fifo mode not supported\\n\");\n                    if (command&0x04)\n\t\t        FIXME(\"Generic DAC/ADC autoinit dma mode not supported\\n\");\n                    if (command&0x08)\n\t\t        FIXME(\"Generic DAC/ADC adc mode not supported\\n\");\n                    switch(command>>4) {\n                    case 0xB:\n\t\t        FIXME(\"Generic DAC/ADC 8-bit not supported\\n\");\n                        SampleMode = 0;\n                        break;\n                    case 0xC:\n\t\t        FIXME(\"Generic DAC/ADC 16-bit not supported\\n\");\n                        SampleMode = 1;\n                        break;\n                    default:\n\t\t        ERR(\"Generic DAC/ADC resolution unknown\\n\");\n                        break;\n                    }\n                    if (DSP_InBuffer[1]&0x010)\n\t\t        FIXME(\"Generic DAC/ADC signed sample mode not supported\\n\");\n                    if (DSP_InBuffer[1]&0x020)\n\t\t        FIXME(\"Generic DAC/ADC stereo mode not supported\\n\");\n                    SamplesCount = DSP_InBuffer[2]+(val<<8)+1;\n                    TRACE(\"Generic DMA for %x samples\\n\",SamplesCount);\n                    dma_enable = TRUE;\n\t        }\n                else\n                    FIXME(\"DSP command %x not supported\\n\",val);\n            }\n            /* Empty the input buffer and end the command */\n            InSize = 0;\n            command = -1;\n        }\n    }\n}\n\nBYTE SB_ioport_in( WORD port )\n{\n    BYTE res = 0;\n\n    switch(port)\n    {\n    /* DSP Read Data */\n    case 0x22a:\n        /* Value in the read buffer */\n      if (OutSize)\n          res = DSP_OutBuffer[--OutSize];\n      else\n\t  /* return the last byte */\n\t  res = DSP_OutBuffer[0];\n      break;\n    /* DSP - Write Buffer Status */\n    case 0x22c:\n        /* DSP always ready for writing */\n        res = 0x00;\n        break;\n    /* DSP - Data Available Status */\n    /* DSP - IRQ Acknowledge, 8-bit */\n    case 0x22e:\n        /* DSP data availability check */\n        if (OutSize)\n            res = 0x80;\n        else\n\t    res = 0x00;\n        break;\n    }\n    return res;\n}\n"
  },
  {
    "path": "krnl386/stub.c",
    "content": "#include \"kernel16_private.h\"\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdarg.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winternl.h\"\n#include \"wine/winbase16.h\"\n#include \"windows/wownt32.h\"\n#include \"kernel16_private.h\"\n#include \"dosexe.h\"\n\n#include \"excpt.h\"\n#include \"wine/debug.h\"\n#include \"wine/exception.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(stub);\nvoid DPMI_PendingEventCheck(void)\n{\n    FIXME(\"DPMI_PendingEventCheck\\n\");\n}\nvoid DPMI_PendingEventCheck_Cleanup(void)\n{\n    FIXME(\"DPMI_PendingEventCheck_Cleanup\\n\");\n}\nvoid DPMI_PendingEventCheck_Return(void)\n{\n    FIXME(\"DPMI_PendingEventCheck_Return\\n\");\n}\n//int31.c\ntypedef struct tagRMCB {\n    DWORD address;\n    DWORD proc_ofs, proc_sel;\n    DWORD regs_ofs, regs_sel;\n    struct tagRMCB *next;\n} RMCB;\n#ifdef _MSC_VER\nvoid DPMI_CallRMCB32(RMCB *rmcb, UINT16 ss, DWORD esp, UINT16*es, DWORD*edi)\n{\n    ERR(\"NOTIMPL:DPMI_CallRMCB32(%p, %u, %u, %p, %p)\\n\", rmcb, ss, esp, es, edi);\n}\n#endif\n/* Process flags */\n#define PDB32_DEBUGGED      0x0001  /* Process is being debugged */\n#define PDB32_WIN16_PROC    0x0008  /* Win16 process */\n#define PDB32_DOS_PROC      0x0010  /* Dos process */\n#define PDB32_CONSOLE_PROC  0x0020  /* Console process */\n#define PDB32_FILE_APIS_OEM 0x0040  /* File APIs are OEM */\n#define PDB32_WIN32S_PROC   0x8000  /* Win32s process */\n/***********************************************************************\n*           GetProcessFlags    (KERNEL32.@)\n*/\nDWORD WINAPI GetProcessFlags(DWORD processid)\n{\n    IMAGE_NT_HEADERS *nt;\n    DWORD flags = 0;\n\n    if (processid && processid != GetCurrentProcessId()) return 0;\n\n    if ((nt = RtlImageNtHeader(NtCurrentTeb()->Peb->ImageBaseAddress)))\n    {\n        if (nt->OptionalHeader.Subsystem == IMAGE_SUBSYSTEM_WINDOWS_CUI)\n            flags |= PDB32_CONSOLE_PROC;\n    }\n    if (!AreFileApisANSI()) flags |= PDB32_FILE_APIS_OEM;\n    if (IsDebuggerPresent()) flags |= PDB32_DEBUGGED;\n    return flags;\n}\ntypedef BOOL(WINAPI *PVerifyConsoleIoHandle)(HANDLE);\nBOOL WINAPI VerifyConsoleIoHandle(HANDLE h)\n{\n    static PVerifyConsoleIoHandle func = 0;\n    if (!func)\n        func = GetProcAddress(GetModuleHandleA(\"kernel32.dll\"), \"VerifyConsoleIoHandle\");\n    if (!func)\n    {\n        ERR(\"can't load kernel32!VerifyConsoleIoHandle\\n\");\n    }\n    return func(h);\n}\ntypedef HANDLE(WINAPI *PConvertToGlobalHandle)(HANDLE);\nHANDLE WINAPI ConvertToGlobalHandle(HANDLE hSrc)\n{\n    static PConvertToGlobalHandle func = 0;\n    if (!func)\n        func = GetProcAddress(GetModuleHandleA(\"kernel32.dll\"), \"ConvertToGlobalHandle\");\n    if (!func)\n    {\n        ERR(\"can't load kernel32!ConvertToGlobalHandle\\n\");\n    }\n    return func(hSrc);\n}\n\nWINE_DECLARE_DEBUG_CHANNEL(disasm);\n\nstatic int get_debug_mode()\n{\n    return TRACE_ON(disasm);\n}\nDWORD wine_pm_interrupt_handler(WORD num, DWORD addr)\n{\n    HTASK16 hTask = GetCurrentTask();\n    TDB *pTask = GlobalLock16(hTask);\n    if (!pTask)\n        return 0;\n    DWORD handler = 0;\n    switch (num)\n    {\n    case 0:\n        handler = pTask->int0;\n        break;\n    case 2:\n        handler = pTask->int2;\n        break;\n    case 0x0d:\n        /* FIXME: push addr? */\n        /* handler = HasGPHandler16(addr); */\n        break;\n    case 4:\n        handler = pTask->int4;\n        break;\n    case 6:\n        handler = pTask->int6;\n        break;\n    case 7:\n        handler = pTask->int7;\n        break;\n    case 0x3e:\n        handler = pTask->int3e;\n        break;\n    case 0x75:\n        handler = pTask->int75;\n        break;\n    }\n    GlobalUnlock16(hTask);\n    return handler;\n}\n\nextern LPVOID *__wine_call_to_16_ret_p;\nwine_call_to_16_vm86_t func_wine_call_to_16_vm86;\nwine_call_to_16_regs_vm86_t func_wine_call_to_16_regs_vm86;\nDWORD WINAPI wine_call_to_16(FARPROC16 target, DWORD cbArgs, PEXCEPTION_HANDLER handler)\n{\n    return func_wine_call_to_16_vm86(target, cbArgs, handler, __wine_call_from_16_regs, __wine_call_from_16, relay_call_from_16, __wine_call_to_16_ret_p, get_debug_mode(), FALSE, DOSMEM_dosmem, wine_pm_interrupt_handler);\n}\nvoid WINAPI wine_call_to_16_regs(CONTEXT *context, DWORD cbArgs, PEXCEPTION_HANDLER handler)\n{\n    //why??\n    context->SegSs = SELECTOROF(getWOW32Reserved());\n    context->Esp = OFFSETOF(getWOW32Reserved());\n    func_wine_call_to_16_regs_vm86(context, cbArgs, handler, __wine_call_from_16_regs, __wine_call_from_16, relay_call_from_16, __wine_call_to_16_ret_p, get_debug_mode(), FALSE, DOSMEM_dosmem, wine_pm_interrupt_handler);\n}\nvoid __wine_enter_vm86(CONTEXT *context)\n{\n    func_wine_call_to_16_regs_vm86(context, NULL, NULL, __wine_call_from_16_regs, __wine_call_from_16, relay_call_from_16, __wine_call_to_16_ret_p, get_debug_mode(), TRUE, DOSMEM_dosmem, wine_pm_interrupt_handler);\n}\nBOOL16 WINAPI IsDBCSLeadByte16(BYTE TestChar)\n{\n    TRACE(\"IsDBCSLeadByte16(%c)\\n\", TestChar);\n    return IsDBCSLeadByte(TestChar);\n}\nextern DWORD WOW32ReservedTls;\n__declspec(dllexport) PVOID getWOW32Reserved()\n{\n    /* TlsGetValue clears win32 last error! */\n    /* GetLastError() is called by INT21_GetExtendedError(FIXME?) */\n    return TebTlsGetValue(NtCurrentTeb(), WOW32ReservedTls);\n}\n__declspec(dllexport) PVOID setWOW32Reserved(PVOID w)\n{\n    return TebTlsSetValue(NtCurrentTeb(), WOW32ReservedTls, w);\n}\n\n__declspec(thread) WINE_VM86_TEB_INFO GdiTebBatch;\n__declspec(dllexport) WINE_VM86_TEB_INFO *getGdiTebBatch()\n{\n    return &GdiTebBatch;\n}\n\nextern DWORD kernel_thread_data_tls;\n__declspec(dllexport) struct kernel_thread_data *tls_get_kernel_thread_data()\n{\n    return (struct kernel_thread_data*)TebTlsGetValue(NtCurrentTeb(), kernel_thread_data_tls);\n}\n"
  },
  {
    "path": "krnl386/syslevel.c",
    "content": "/*\n * Win32 'syslevel' routines\n *\n * Copyright 1998 Ulrich Weigand\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <stdarg.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#include <sys/types.h>\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winternl.h\"\n#include \"wine/winbase16.h\"\n#include \"kernel16_private.h\"\n#include \"wine/library.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(syslevel);\n\nstatic SYSLEVEL Win16Mutex;\nstatic CRITICAL_SECTION_DEBUG critsect_debug =\n{\n    0, 0, &Win16Mutex.crst,\n    { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },\n      0, 0, { (DWORD_PTR)(__FILE__ \": Win16Mutex\") }\n};\nstatic SYSLEVEL Win16Mutex = { { &critsect_debug, -1, 0, 0, 0, 0 }, 1 };\n\nHANDLE vm_idle_event;\n\nHANDLE WINAPI get_idle_event()\n{\n    return vm_idle_event;\n}\n\n/************************************************************************\n *           GetpWin16Lock    (KERNEL32.93)\n */\nVOID WINAPI GetpWin16Lock(SYSLEVEL **lock)\n{\n    *lock = &Win16Mutex;\n}\n\n/************************************************************************\n *           GetpWin16Lock    (KERNEL.449)\n */\nSEGPTR WINAPI GetpWin16Lock16(void)\n{\n    static SYSLEVEL *w16Mutex;\n    static SEGPTR segpWin16Mutex;\n\n    if (!segpWin16Mutex)\n    {\n        w16Mutex = &Win16Mutex;\n        segpWin16Mutex = MapLS( &w16Mutex );\n    }\n    return segpWin16Mutex;\n}\n\n/************************************************************************\n *           _CreateSysLevel    (KERNEL.438)\n */\nVOID WINAPI _CreateSysLevel(SYSLEVEL *lock, INT level)\n{\n    RtlInitializeCriticalSection( &lock->crst );\n    lock->level = level;\n\n    TRACE(\"(%p, %d): handle is %p\\n\",\n                  lock, level, lock->crst.LockSemaphore );\n}\n\n/************************************************************************\n *           _EnterSysLevel    (KERNEL32.97)\n *           _EnterSysLevel    (KERNEL.439)\n */\nVOID WINAPI _EnterSysLevel(SYSLEVEL *lock)\n{\n    struct kernel_thread_data *thread_data = kernel_get_thread_data();\n    int i;\n\n    TRACE(\"(%p, level %d): thread %x count before %d\\n\",\n          lock, lock->level, GetCurrentThreadId(), thread_data->sys_count[lock->level] );\n\n    for ( i = 3; i > lock->level; i-- )\n        if ( thread_data->sys_count[i] > 0 )\n        {\n            ERR(\"(%p, level %d): Holding %p, level %d. Expect deadlock!\\n\",\n                        lock, lock->level, thread_data->sys_mutex[i], i );\n        }\n\n    RtlEnterCriticalSection( &lock->crst );\n    if (thread_data->yield_wait_event)\n    {\n        HANDLE event = thread_data->yield_wait_event;\n        DWORD mutex_count, count;\n        RtlLeaveCriticalSection(&lock->crst);\n        mutex_count = _ConfirmSysLevel(lock);\n        count = mutex_count;\n        /* release lock */\n        while (count-- > 0)\n        {\n            if (--thread_data->sys_count[lock->level] == 0)\n                thread_data->sys_mutex[lock->level] = NULL;\n            RtlLeaveCriticalSection(&lock->crst);\n        }\n        WaitForSingleObject(event, INFINITE);\n        count = mutex_count;\n        /* restore lock */\n        while (count-- > 0)\n        {\n            thread_data->sys_count[lock->level]++;\n            thread_data->sys_mutex[lock->level] = lock;\n            RtlEnterCriticalSection(&lock->crst);\n        }\n        RtlEnterCriticalSection(&lock->crst);\n        CloseHandle(event);\n    }\n    switch_directory(thread_data);\n    thread_data->sys_count[lock->level]++;\n    thread_data->sys_mutex[lock->level] = lock;\n    if (thread_data->yield_event)\n        SetEvent(thread_data->yield_event);\n\n    TRACE(\"(%p, level %d): thread %x count after  %d\\n\",\n          lock, lock->level, GetCurrentThreadId(), thread_data->sys_count[lock->level] );\n\n    if (lock == &Win16Mutex)\n    {\n        CallTo16_TebSelector = wine_get_fs();\n        ResetEvent(vm_idle_event);\n    }\n}\n\n/************************************************************************\n *           _LeaveSysLevel    (KERNEL32.98)\n *           _LeaveSysLevel    (KERNEL.440)\n */\nVOID WINAPI _LeaveSysLevel(SYSLEVEL *lock)\n{\n    struct kernel_thread_data *thread_data = kernel_get_thread_data();\n\n    TRACE(\"(%p, level %d): thread %x count before %d\\n\",\n          lock, lock->level, GetCurrentThreadId(), thread_data->sys_count[lock->level] );\n\n    if ( thread_data->sys_count[lock->level] <= 0 || thread_data->sys_mutex[lock->level] != lock )\n    {\n        ERR(\"(%p, level %d): Invalid state: count %d mutex %p.\\n\",\n                    lock, lock->level, thread_data->sys_count[lock->level],\n                    thread_data->sys_mutex[lock->level] );\n    }\n    else\n    {\n        if ( --thread_data->sys_count[lock->level] == 0 )\n            thread_data->sys_mutex[lock->level] = NULL;\n    }\n\n    RtlLeaveCriticalSection( &lock->crst );\n    \n    if ((lock == &Win16Mutex) && !Win16Mutex.crst.OwningThread) SetEvent(vm_idle_event);\n\n    TRACE(\"(%p, level %d): thread %x count after  %d\\n\",\n          lock, lock->level, GetCurrentThreadId(), thread_data->sys_count[lock->level] );\n}\n\n/************************************************************************\n *\t\t@ (KERNEL32.86)\n */\nVOID WINAPI _KERNEL32_86(SYSLEVEL *lock)\n{\n    _LeaveSysLevel(lock);\n}\n\n/************************************************************************\n *           _ConfirmSysLevel    (KERNEL32.95)\n *           _ConfirmSysLevel    (KERNEL.436)\n */\nDWORD WINAPI _ConfirmSysLevel(SYSLEVEL *lock)\n{\n    if ( lock && lock->crst.OwningThread == ULongToHandle(GetCurrentThreadId()) )\n        return lock->crst.RecursionCount;\n    else\n        return 0L;\n}\n\n/************************************************************************\n *           _CheckNotSysLevel    (KERNEL32.94)\n *           _CheckNotSysLevel    (KERNEL.437)\n */\nVOID WINAPI _CheckNotSysLevel(SYSLEVEL *lock)\n{\n    if (lock && lock->crst.OwningThread == ULongToHandle(GetCurrentThreadId()) &&\n        lock->crst.RecursionCount)\n    {\n        ERR( \"Holding lock %p level %d\\n\", lock, lock->level );\n        DbgBreakPoint();\n    }\n}\n\n\n/************************************************************************\n *           _EnterWin16Lock\t\t\t[KERNEL.480]\n */\nVOID WINAPI _EnterWin16Lock(void)\n{\n    _EnterSysLevel(&Win16Mutex);\n}\n\n/************************************************************************\n *           _LeaveWin16Lock\t\t[KERNEL.481]\n */\nVOID WINAPI _LeaveWin16Lock(void)\n{\n    _LeaveSysLevel(&Win16Mutex);\n}\n\n/************************************************************************\n *           _ConfirmWin16Lock    (KERNEL32.96)\n */\nDWORD WINAPI _ConfirmWin16Lock(void)\n{\n    return _ConfirmSysLevel(&Win16Mutex);\n}\n\n/************************************************************************\n *           ReleaseThunkLock    (KERNEL32.48)\n */\nVOID WINAPI ReleaseThunkLock(DWORD *mutex_count)\n{\n    DWORD count = _ConfirmSysLevel(&Win16Mutex);\n    *mutex_count = count;\n\n    while (count-- > 0)\n        _LeaveSysLevel(&Win16Mutex);\n}\n\n/************************************************************************\n *           RestoreThunkLock    (KERNEL32.49)\n */\nVOID WINAPI RestoreThunkLock(DWORD mutex_count)\n{\n    while (mutex_count-- > 0)\n        _EnterSysLevel(&Win16Mutex);\n}\n\n/************************************************************************\n *           SYSLEVEL_CheckNotLevel\n */\nVOID SYSLEVEL_CheckNotLevel( INT level )\n{\n    INT i;\n\n    for ( i = 3; i >= level; i-- )\n        if ( kernel_get_thread_data()->sys_count[i] > 0 )\n        {\n            ERR(\"(%d): Holding lock of level %d!\\n\",\n                       level, i );\n            DbgBreakPoint();\n            break;\n        }\n}\n"
  },
  {
    "path": "krnl386/task.c",
    "content": "/*\n * Task functions\n *\n * Copyright 1995 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n#include \"wine/exception.h\"\n\n#include <stdarg.h>\n#include <stdlib.h>\n#include <string.h>\n#include <assert.h>\n#include <stdio.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n#include \"winnt.h\"\n#include \"windows/wownt32.h\"\n#include \"winuser.h\"\n#include \"ntstatus.h\"\n\n#include \"wine/winbase16.h\"\n#include \"winternl.h\"\n#include \"kernel16_private.h\"\n\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(task);\n\n/* Workaround for ReactOS */\nBOOL is_reactos()\n{\n    static BOOL detected;\n    static BOOL is;\n    HKEY hKey;\n    CHAR name[100];\n    DWORD dwType, dwSize = sizeof(name);\n    if (detected)\n        return is;\n    detected = TRUE;\n    if (ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, \"SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\", 0, KEY_QUERY_VALUE, &hKey))\n        return FALSE;\n    if (ERROR_SUCCESS != RegQueryValueExA(hKey, \"ProductName\", NULL, &dwType, (LPBYTE)name, &dwSize))\n    {\n        RegCloseKey(hKey);\n        return FALSE;\n    }\n    RegCloseKey(hKey);\n    if (dwType != REG_SZ)\n        return FALSE;\n    is = strstr(name, \"ReactOS\") != NULL;\n    return is;\n}\n#include \"pshpack1.h\"\n\nstruct thunk\n{\n    BYTE      movw;\n    HANDLE16  instance;\n    BYTE      ljmp;\n    FARPROC16 func;\n};\n\n/* Segment containing MakeProcInstance() thunks */\ntypedef struct\n{\n    WORD  next;       /* Selector of next segment */\n    WORD  magic;      /* Thunks signature */\n    WORD  unused;\n    WORD  free;       /* Head of the free list */\n    struct thunk thunks[1];\n} THUNKS;\n\n#include \"poppack.h\"\n\n#define THUNK_MAGIC  ('P' | ('T' << 8))\n\n  /* Min. number of thunks allocated when creating a new segment */\n#define MIN_THUNKS  32\n\n#define TDB_MAGIC    ('T' | ('D' << 8))\n\nstatic THHOOK DefaultThhook;\nTHHOOK *pThhook = &DefaultThhook;\n\n#define hFirstTask   (pThhook->HeadTDB)\n#define hLockedTask  (pThhook->LockTDB)\n\nstatic UINT16 nTaskCount = 0;\n\nstatic HTASK16 initial_task, main_task;\n\nBOOL WINAPI TebTlsSetValue(TEB *teb, DWORD index, LPVOID value)\n{\n    if (index < TLS_MINIMUM_AVAILABLE)\n    {\n        teb->TlsSlots[index] = value;\n    }\n    else\n    {\n        index -= TLS_MINIMUM_AVAILABLE;\n        if (index >= 8 * sizeof(teb->Peb->TlsExpansionBitmapBits))\n        {\n            return FALSE;\n        }\n        teb->TlsExpansionSlots[index] = value;\n    }\n    return TRUE;\n}\n\nLPVOID WINAPI TebTlsGetValue(TEB *teb, DWORD index)\n{\n    LPVOID ret;\n\n    if (index < TLS_MINIMUM_AVAILABLE)\n    {\n        ret = teb->TlsSlots[index];\n    }\n    else\n    {\n        index -= TLS_MINIMUM_AVAILABLE;\n        if (index >= 8 * sizeof(teb->Peb->TlsExpansionBitmapBits))\n        {\n            return NULL;\n        }\n        if (!teb->TlsExpansionSlots) ret = NULL;\n        else ret = teb->TlsExpansionSlots[index];\n    }\n    return ret;\n}\nstatic DWORD curdir_tls_index = -1;\n\nstatic HTASK16 task_old = NULL;\nstatic struct kernel_thread_data *task_old_data = NULL;\n/***********************************************************************\n *\t     TASK_InstallTHHook\n */\nvoid TASK_InstallTHHook( THHOOK *pNewThhook )\n{\n     THHOOK *pOldThhook = pThhook;\n\n     pThhook = pNewThhook? pNewThhook : &DefaultThhook;\n\n     *pThhook = *pOldThhook;\n}\n\n/***********************************************************************\n *\t     TASK_GetPtr\n */\nstatic TDB *TASK_GetPtr( HTASK16 hTask )\n{\n    return GlobalLock16( hTask );\n}\n\n\n/***********************************************************************\n *\t     TASK_GetCurrent\n */\nTDB *TASK_GetCurrent(void)\n{\n    return TASK_GetPtr( GetCurrentTask() );\n}\n\n\n/***********************************************************************\n *           TASK_LinkTask\n */\nstatic void TASK_LinkTask( HTASK16 hTask )\n{\n    HTASK16 *prevTask;\n    TDB *pTask;\n\n    if (!(pTask = TASK_GetPtr( hTask ))) return;\n    prevTask = &hFirstTask;\n    while (*prevTask)\n    {\n        TDB *prevTaskPtr = TASK_GetPtr( *prevTask );\n        if (prevTaskPtr->priority >= pTask->priority) break;\n        prevTask = &prevTaskPtr->hNext;\n    }\n    pTask->hNext = *prevTask;\n    *prevTask = hTask;\n    nTaskCount++;\n}\n\n\n/***********************************************************************\n *           TASK_UnlinkTask\n */\nstatic void TASK_UnlinkTask( HTASK16 hTask )\n{\n    HTASK16 *prevTask;\n    TDB *pTask;\n\n    prevTask = &hFirstTask;\n    while (*prevTask && (*prevTask != hTask))\n    {\n        pTask = TASK_GetPtr( *prevTask );\n        prevTask = &pTask->hNext;\n    }\n    if (*prevTask)\n    {\n        pTask = TASK_GetPtr( *prevTask );\n        *prevTask = pTask->hNext;\n        pTask->hNext = 0;\n        nTaskCount--;\n    }\n}\n\n\n/***********************************************************************\n *           TASK_CreateThunks\n *\n * Create a thunk free-list in segment 'handle', starting from offset 'offset'\n * and containing 'count' entries.\n */\nstatic void TASK_CreateThunks( HGLOBAL16 handle, WORD offset, WORD count )\n{\n    int i;\n    THUNKS *pThunk;\n\n    pThunk = (THUNKS *)((BYTE *)GlobalLock16( handle ) + offset);\n    pThunk->next = 0;\n    pThunk->magic = THUNK_MAGIC;\n    pThunk->free = FIELD_OFFSET( THUNKS, thunks );\n    for (i = 0; i < count-1; i++)\n        *(WORD *)&pThunk->thunks[i] = FIELD_OFFSET( THUNKS, thunks[i+1] );\n    *(WORD *)&pThunk->thunks[i] = 0;  /* Last thunk */\n}\n\n\n/***********************************************************************\n *           TASK_AllocThunk\n *\n * Allocate a thunk for MakeProcInstance().\n */\nstatic SEGPTR TASK_AllocThunk(void)\n{\n    TDB *pTask;\n    THUNKS *pThunk;\n    WORD sel, base;\n\n    if (!(pTask = TASK_GetCurrent())) return 0;\n    sel = pTask->hCSAlias;\n    pThunk = (THUNKS *)pTask->thunks;\n    base = (char *)pThunk - (char *)pTask;\n    while (!pThunk->free)\n    {\n        sel = pThunk->next;\n        if (!sel)  /* Allocate a new segment */\n        {\n            sel = GLOBAL_Alloc( GMEM_FIXED, FIELD_OFFSET( THUNKS, thunks[MIN_THUNKS] ),\n                                pTask->hPDB, WINE_LDT_FLAGS_CODE, 0 );\n            if (!sel) return 0;\n            TASK_CreateThunks( sel, 0, MIN_THUNKS );\n            pThunk->next = sel;\n        }\n        pThunk = GlobalLock16( sel );\n        base = 0;\n    }\n    base += pThunk->free;\n    pThunk->free = *(WORD *)((BYTE *)pThunk + pThunk->free);\n    return MAKESEGPTR( sel, base );\n}\n\n\n/***********************************************************************\n *           TASK_FreeThunk\n *\n * Free a MakeProcInstance() thunk.\n */\nstatic BOOL TASK_FreeThunk( SEGPTR thunk )\n{\n    TDB *pTask;\n    THUNKS *pThunk;\n    WORD sel, base;\n\n    if (!(pTask = TASK_GetCurrent())) return FALSE;\n    sel = pTask->hCSAlias;\n    pThunk = (THUNKS *)pTask->thunks;\n    base = (char *)pThunk - (char *)pTask;\n    while (sel && (sel != HIWORD(thunk)))\n    {\n        sel = pThunk->next;\n        pThunk = GlobalLock16( sel );\n        base = 0;\n    }\n    if (!sel) return FALSE;\n    *(WORD *)((BYTE *)pThunk + LOWORD(thunk) - base) = pThunk->free;\n    pThunk->free = LOWORD(thunk) - base;\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           TASK_Create\n *\n * NOTE: This routine might be called by a Win32 thread. Thus, we need\n *       to be careful to protect global data structures. We do this\n *       by entering the Win16Lock while linking the task into the\n *       global task list.\n */\nstatic TDB *TASK_Create( NE_MODULE *pModule, UINT16 cmdShow, LPCSTR cmdline, BYTE len )\n{\n    HTASK16 hTask;\n    TDB *pTask;\n    FARPROC16 proc;\n    char curdir[MAX_PATH];\n    HMODULE16 hModule = pModule ? pModule->self : 0;\n\n      /* Allocate the task structure */\n\n    hTask = GlobalAlloc16( GMEM_FIXED | GMEM_ZEROINIT, sizeof(TDB) );\n    if (!hTask) return NULL;\n    GLOBAL_SetSeg(hTask, 0, GT_TASK);\n    pTask = TASK_GetPtr( hTask );\n    FarSetOwner16( hTask, hModule );\n\n    /* Fill the task structure */\n\n    pTask->hSelf = hTask;\n\n    pTask->version       = pModule ? pModule->ne_expver : 0x0400;\n    pTask->hModule       = hModule;\n    pTask->hParent       = GetCurrentTask();\n    pTask->magic         = TDB_MAGIC;\n    pTask->nCmdShow      = cmdShow;\n\n    GetCurrentDirectoryA( sizeof(curdir), curdir );\n    GetShortPathNameA( curdir, curdir, sizeof(curdir) );\n    pTask->curdrive = (curdir[0] - 'A') | 0x80;\n    lstrcpynA( pTask->curdir, curdir + 2, sizeof(pTask->curdir) );\n\n      /* Create the thunks block */\n\n    TASK_CreateThunks( hTask, (char *)pTask->thunks - (char *)pTask, 7 );\n\n      /* Copy the module name */\n\n    if (hModule)\n    {\n        char name[sizeof(pTask->module_name)+1];\n        size_t len;\n        GetModuleName16( hModule, name, sizeof(name) );\n        len = strlen(name) + 1;\n        memcpy(pTask->module_name, name, min(len,sizeof(pTask->module_name)));\n        pTask->compat_flags = GetProfileIntA( \"Compatibility\", name, 0 );\n    }\n\n      /* Allocate a selector for the PDB */\n\n    pTask->hPDB = GLOBAL_CreateBlock( GMEM_FIXED, &pTask->pdb, sizeof(PDB16),\n                                      hModule, WINE_LDT_FLAGS_DATA, 0 );\n\n      /* Fill the PDB */\n\n    pTask->pdb.int20 = 0x20cd;\n    pTask->pdb.dispatcher[0] = 0x9a;  /* ljmp */\n    proc = GetProcAddress16( GetModuleHandle16(\"KERNEL\"), \"DOS3Call\" );\n    memcpy( &pTask->pdb.dispatcher[1], &proc, sizeof(proc) );\n    pTask->pdb.savedint22 = 0;\n    pTask->pdb.savedint23 = 0;\n    pTask->pdb.savedint24 = 0;\n    pTask->pdb.fileHandlesPtr =\n        MAKESEGPTR( GlobalHandleToSel16(pTask->hPDB), FIELD_OFFSET( PDB16, fileHandles ));\n    pTask->pdb.hFileHandles = 0;\n    memset( pTask->pdb.fileHandles, 0xff, sizeof(pTask->pdb.fileHandles) );\n    /* FIXME: should we make a copy of the environment? */\n    pTask->pdb.environment    = SELECTOROF(GetDOSEnvironment16());\n    pTask->pdb.nbFiles        = 20;\n\n    /* Fill the command line */\n\n    if (!cmdline)\n    {\n        cmdline = GetCommandLineA();\n        /* remove the first word (program name) */\n        if (*cmdline == '\"')\n            if (!(cmdline = strchr( cmdline+1, '\"' ))) cmdline = GetCommandLineA();\n        while (*cmdline && (*cmdline != ' ') && (*cmdline != '\\t')) cmdline++;\n        while ((*cmdline == ' ') || (*cmdline == '\\t')) cmdline++;\n        len = strlen(cmdline);\n    }\n    if (len >= sizeof(pTask->pdb.cmdLine)) len = sizeof(pTask->pdb.cmdLine)-2;\n    pTask->pdb.cmdLine[0] = len;\n    memcpy( pTask->pdb.cmdLine + 1, cmdline, len );\n    if (len == 0)\n    {\n        pTask->pdb.cmdLine[len+1] = 0x0d; /* Actual windows behaviour(but why?) */\n    }\n\n    TRACE(\"cmdline='%.*s' task=%04x\\n\", len, cmdline, hTask );\n\n      /* Allocate a code segment alias for the TDB */\n\n    pTask->hCSAlias = GLOBAL_CreateBlock( GMEM_FIXED, pTask, sizeof(TDB),\n                                          pTask->hPDB, WINE_LDT_FLAGS_CODE, 0 );\n\n      /* Default DTA overwrites command line */\n\n    pTask->dta = MAKESEGPTR( pTask->hPDB, FIELD_OFFSET( PDB16, cmdLine ));\n\n    /* Create scheduler event for 16-bit tasks */\n\n    if ( !(pTask->flags & TDBF_WIN32) )\n        NtCreateEvent( &pTask->hEvent, EVENT_ALL_ACCESS, NULL, NotificationEvent, FALSE );\n\n    if (!initial_task) initial_task = hTask;\n\n    return pTask;\n}\n\n\n/***********************************************************************\n *           TASK_DeleteTask\n */\nstatic void TASK_DeleteTask( HTASK16 hTask )\n{\n    TDB *pTask;\n    HGLOBAL16 hPDB;\n\n    if (!(pTask = TASK_GetPtr( hTask ))) return;\n    HeapFree(GetProcessHeap(), 0, TebTlsGetValue(pTask->teb, curdir_tls_index));\n    if (task_old == hTask)\n    {\n        task_old = 0;\n        task_old_data = NULL;\n        TlsSetValue(curdir_tls_index, 0xdead);\n    }\n    hPDB = pTask->hPDB;\n\n    pTask->magic = 0xdead; /* invalidate signature */\n\n    /* Free the selector aliases */\n\n    GLOBAL_FreeBlock( pTask->hCSAlias );\n    GLOBAL_FreeBlock( pTask->hPDB );\n\n    /* Free the task module */\n\n    HMODULE16 hmod = pTask->hModule;\n    FreeModule16( hmod );\n\n    /* Is the module still loaded? if so update hinstance if needed */\n    NE_MODULE *pmod = NE_GetPtr(hmod);\n    if (pmod)\n    {\n        HTASK16 prev = hFirstTask;\n        TDB *prevTDB;\n        while (prev)\n        {\n            prevTDB = TASK_GetPtr(prev);\n            if (prevTDB->hModule == hmod)\n            {\n                if (!pmod->ne_autodata)\n                    pmod->self = prevTDB->hInstance;\n                else\n                {\n                    SEGTABLEENTRY *pSeg = NE_SEG_TABLE( pmod ) + pmod->ne_autodata - 1;\n                    pSeg->hSeg = prevTDB->hInstance;\n                }\n                break;\n            }\n            prev = prevTDB->hNext;\n        }\n    }\n\n    /* Free the task structure itself */\n\n    GlobalFree16( hTask );\n\n    /* Free all memory used by this task (including the 32-bit stack, */\n    /* the environment block and the thunk segments). */\n\n    GlobalFreeAll16( hPDB );\n}\n\n\n/***********************************************************************\n *           TASK_CreateMainTask\n *\n * Create a task for the main (32-bit) process.\n */\nvoid TASK_CreateMainTask(void)\n{\n    TDB *pTask;\n    STARTUPINFOA startup_info;\n    UINT cmdShow = 1; /* SW_SHOWNORMAL but we don't want to include winuser.h here */\n\n    GetStartupInfoA( &startup_info );\n    if (startup_info.dwFlags & STARTF_USESHOWWINDOW) cmdShow = startup_info.wShowWindow;\n    pTask = TASK_Create( NULL, cmdShow, NULL, 0 );\n    if (!pTask)\n    {\n        ERR(\"could not create task for main process\\n\");\n        ExitProcess(1);\n    }\n\n    pTask->flags        |= TDBF_WIN32;\n    pTask->hInstance     = 0;\n    pTask->hPrevInstance = 0;\n    pTask->teb           = NtCurrentTeb();\n\n    /* Add the task to the linked list */\n    /* (no need to get the win16 lock, we are the only thread at this point) */\n    TASK_LinkTask( pTask->hSelf );\n    main_task = pTask->hSelf;\n}\n\n\nstruct create_data\n{\n    TDB                 *task;\n    WIN16_SUBSYSTEM_TIB *tib;\n    LPCSTR               curdir;\n};\n\n/* allocate the win16 TIB for a new 16-bit task */\nstatic WIN16_SUBSYSTEM_TIB *allocate_win16_tib( TDB *pTask )\n{\n    WCHAR path[MAX_PATH];\n    WIN16_SUBSYSTEM_TIB *tib;\n    UNICODE_STRING *curdir;\n    NE_MODULE *pModule = NE_GetPtr( pTask->hModule );\n\n    if (!(tib = HeapAlloc( GetProcessHeap(), 0, sizeof(*tib) ))) return NULL;\n    MultiByteToWideChar( CP_ACP, 0, NE_MODULE_NAME(pModule), -1, path, MAX_PATH );\n    GetLongPathNameW( path, path, MAX_PATH );\n    if (RtlCreateUnicodeString( &tib->exe_str, path )) tib->exe_name = &tib->exe_str;\n    else tib->exe_name = NULL;\n\n    RtlAcquirePebLock();\n    if (NtCurrentTeb()->Tib.SubSystemTib)\n        curdir = &((WIN16_SUBSYSTEM_TIB *)NtCurrentTeb()->Tib.SubSystemTib)->curdir.DosPath;\n    else\n        curdir = &NtCurrentTeb()->Peb->ProcessParameters->CurrentDirectory.DosPath;\n    tib->curdir.DosPath.MaximumLength = sizeof(tib->curdir_buffer);\n    tib->curdir.DosPath.Length = min( curdir->Length, tib->curdir.DosPath.MaximumLength-sizeof(WCHAR) );\n    tib->curdir.DosPath.Buffer = tib->curdir_buffer;\n    tib->curdir.Handle = 0;\n    memcpy( tib->curdir_buffer, curdir->Buffer, tib->curdir.DosPath.Length );\n    tib->curdir_buffer[tib->curdir.DosPath.Length/sizeof(WCHAR)] = 0;\n    RtlReleasePebLock();\n    return tib;\n}\n\nstatic inline void free_win16_tib( WIN16_SUBSYSTEM_TIB *tib )\n{\n    if (tib->exe_name) RtlFreeUnicodeString( tib->exe_name );\n    HeapFree( GetProcessHeap(), 0, tib );\n}\n\nstatic void set_thread_internal_windows_ver(DWORD version)\n{\n    /* In WOW64, NtCurrentTeb()->Win32ClientInfo is not used */\n    BOOL iswow64 = FALSE;\n    LPDWORD lpdwExpWinVer;\n    IsWow64Process(GetCurrentProcess(), &iswow64);\n    typedef struct\n    {\n        DWORD64 CI_flags;\n        DWORD64 cSpins;\n        DWORD dwExpWinVer;\n        DWORD dwCompatFlags;\n        /* teb->Peb->AppCompatFlagsUser.LowPart */\n        DWORD dwCompatFlags2;\n        /* ... */\n    } CLIENTINFO64, *LPCLIENTINFO64;\n    typedef struct\n    {\n        DWORD CI_flags;\n        DWORD cSpins;\n        DWORD dwExpWinVer;\n        DWORD dwCompatFlags;\n        /* teb->Peb->AppCompatFlagsUser.LowPart */\n        DWORD dwCompatFlags2;\n        /* ... */\n    } CLIENTINFO32, *LPCLIENTINFO32;\n    if (iswow64)\n    {\n#if 0\n        /* only works in windows 10 */\n        SSIZE_T teb_wow64teboffset = *(PSSIZE_T)((LPBYTE)NtCurrentTeb() + 0x0FDC);\n        LPBYTE wow64teb = (LPBYTE)NtCurrentTeb() + teb_wow64teboffset;\n#else\n        LPBYTE wow64teb = *(LPBYTE*)((LPBYTE)NtCurrentTeb() + 0x0F70);\n#endif\n        LPCLIENTINFO64 wow64teb_Win32ClientInfo = (LPCLIENTINFO64)(wow64teb + 0x800);\n        lpdwExpWinVer = &wow64teb_Win32ClientInfo->dwExpWinVer;\n    }\n    else\n    {\n        /* NT 5.0 and higher */\n        LPBYTE teb = (LPBYTE)NtCurrentTeb();\n        LPCLIENTINFO32 teb_Win32ClientInfo = (LPCLIENTINFO32)(teb + 0x06CC);\n        lpdwExpWinVer = &teb_Win32ClientInfo->dwExpWinVer;\n    }\n    if (*lpdwExpWinVer == 0)\n    {\n        MSG msg;\n        /* init user32 */\n        PeekMessageW(&msg, NULL, 0, 0, 0);\n    }\n    *lpdwExpWinVer = version;\n}\n\nstatic void cwd_warning(void)\n{\n    char cd[MAX_PATH];\n    DWORD result;\n    GetCurrentDirectoryA(MAX_PATH, cd);\n    result = GetShortPathNameA(cd, cd, MAX_PATH);\n    if (result < MAX_PATH && result > 0)\n    {\n        char *c = cd;\n        while (c != (char*)1)\n        {\n            char *next = strchr(c, '\\\\');\n            if (next - c > 8)\n            {\n                char *ext = strchr(c, '.');\n                if (!ext || (ext - c > 8 || next - (ext + 1) > 3))\n                {\n                    ERR(\"could not get 8.3 filename. %s\\n\", cd);\n                    break;\n                }\n            }\n            c = next + 1;\n        }\n        if (strlen(cd) > 60)\n        {\n            ERR(\"current directory is too long. %s\\n\", cd);\n        }\n    }\n}\n\n/* startup routine for a new 16-bit thread */\nstatic DWORD CALLBACK task_start( LPVOID p )\n{\n    struct create_data *data = p;\n    TDB *pTask = data->task;\n    DWORD ret;\n\n    kernel_get_thread_data()->htask16 = pTask->hSelf;\n    kernel_get_thread_data()->idle_event = CreateEventA(NULL, TRUE, FALSE, NULL);\n    if (!is_reactos())\n        NtCurrentTeb()->Tib.SubSystemTib = data->tib;\n\n    set_thread_internal_windows_ver(0x30A);\n\n    _EnterWin16Lock();\n    TASK_LinkTask( pTask->hSelf );\n    pTask->teb = NtCurrentTeb();\n    typedef HRESULT(WINAPI *SetThreadDescription_t)(HANDLE hThread, PCWSTR lpThreadDescription);\n    static BOOL init_SetThreadDescription = FALSE;\n    static SetThreadDescription_t SetThreadDescription;\n    if (!init_SetThreadDescription)\n    {\n        init_SetThreadDescription = TRUE;\n        SetThreadDescription = (SetThreadDescription_t)GetProcAddress(GetModuleHandleW(L\"kernel32\"), \"SetThreadDescription\");\n    }\n    if (SetThreadDescription) /* Windows 10 1607~ */\n    {\n        WCHAR buf[1025];\n        buf[0] = 0;\n        CHAR mod_name[9];\n        memcpy(mod_name, pTask->module_name, 8);\n        mod_name[8] = 0;\n        wsprintfW(buf, L\"%S(%s)\", mod_name, data->tib->exe_name->Buffer);\n        SetThreadDescription(GetCurrentThread(), buf);\n    }\n    if (data->curdir)\n        SetCurrentDirectory16(data->curdir);\n    cwd_warning();\n    HeapFree(GetProcessHeap(), 0, data);\n#ifdef _MSC_VER\n    __try\n#endif\n    {\n        ret = NE_StartTask();\n    }\n#ifdef _MSC_VER\n    __except (IsDebuggerPresent() ? EXCEPTION_CONTINUE_SEARCH : EXCEPTION_EXECUTE_HANDLER)\n#endif\n    {\n\n    }\n    _LeaveWin16Lock();\n    return ret;\n}\n\n\n/***********************************************************************\n *           TASK_SpawnTask\n *\n * Spawn a new 16-bit task.\n */\nHTASK16 TASK_SpawnTask( NE_MODULE *pModule, WORD cmdShow,\n                        LPCSTR cmdline, BYTE len, HANDLE *hThread, LPCSTR curdir )\n{\n    struct create_data *data = NULL;\n    WIN16_SUBSYSTEM_TIB *tib;\n    TDB *pTask;\n\n    if (!(pTask = TASK_Create( pModule, cmdShow, cmdline, len ))) return 0;\n    if (!(tib = allocate_win16_tib( pTask ))) goto failed;\n    if (!(data = HeapAlloc( GetProcessHeap(), 0, sizeof(*data)))) goto failed;\n    data->task = pTask;\n    data->tib = tib;\n    data->curdir = curdir;\n    if (!(*hThread = CreateThread( NULL, 0, task_start, data, 0, NULL ))) goto failed;\n    return pTask->hSelf;\n\nfailed:\n    if (tib) free_win16_tib( tib );\n    HeapFree( GetProcessHeap(), 0, data );\n    TASK_DeleteTask( pTask->hSelf );\n    return 0;\n}\n\n\n/***********************************************************************\n *           TASK_GetTaskFromThread\n */\nHTASK16 TASK_GetTaskFromThread( DWORD thread )\n{\n    TDB *p = TASK_GetPtr( hFirstTask );\n    while (p)\n    {\n        if (p->teb->ClientId.UniqueThread == (HANDLE)thread) return p->hSelf;\n        p = TASK_GetPtr( p->hNext );\n    }\n    return 0;\n}\n\n\n/***********************************************************************\n *           TASK_CallTaskSignalProc\n */\nstatic void TASK_CallTaskSignalProc( UINT16 uCode, HANDLE16 hTaskOrModule )\n{\n    WORD args[5];\n    TDB *pTask = TASK_GetCurrent();\n\n    if ( !pTask || !pTask->userhandler ) return;\n\n    args[4] = hTaskOrModule;\n    args[3] = uCode;\n    args[2] = 0;\n    args[1] = pTask->hInstance;\n    args[0] = pTask->hQueue;\n    WOWCallback16Ex( (DWORD)pTask->userhandler, WCB16_PASCAL, sizeof(args), args, NULL );\n}\n\n\nstatic void exit_toolhelp()\n{\n    HMODULE toolhelp = GetModuleHandleA(\"TOOLHELP.DLL16\");\n    BOOL16(WINAPI*InterruptUnRegister16)(HTASK16);\n    BOOL16(WINAPI*NotifyUnRegister16)(HTASK16);\n    if (!toolhelp)\n        return;\n    InterruptUnRegister16 = (BOOL16(WINAPI*)(HTASK16))GetProcAddress(toolhelp, \"InterruptUnRegister16\");\n    NotifyUnRegister16 = (BOOL16(WINAPI*)(HTASK16))GetProcAddress(toolhelp, \"NotifyUnRegister16\");\n    InterruptUnRegister16(0);\n    NotifyUnRegister16(0);\n}\n\nvoid FILE_CloseAll();\n/***********************************************************************\n *           TASK_ExitTask\n */\nvoid TASK_ExitTask(void)\n{\n    WIN16_SUBSYSTEM_TIB *tib;\n    TDB *pTask;\n    DWORD lockCount;\n\n    /* Enter the Win16Lock to protect global data structures */\n    _EnterWin16Lock();\n\n    pTask = TASK_GetCurrent();\n    if ( !pTask )\n    {\n        _LeaveWin16Lock();\n        return;\n    }\n\n    TRACE(\"Killing task %04x\\n\", pTask->hSelf );\n\n    /* Perform USER cleanup */\n\n    TASK_CallTaskSignalProc( USIG16_TERMINATION, pTask->hSelf );\n    NE_CallUserSignalProc(pTask->hSelf, USIG16_TERMINATION, 0, 0, 0);\n\n    /* TOOLHELP */\n    exit_toolhelp();\n\n    /* Remove the task from the list to be sure we never switch back to it */\n    TASK_UnlinkTask( pTask->hSelf );\n    SetEvent(kernel_get_thread_data()->idle_event);\n    CloseHandle(kernel_get_thread_data()->idle_event);\n    FILE_CloseAll();\n\n    if (!nTaskCount || (nTaskCount == 1 && hFirstTask == initial_task))\n    {\n        TRACE(\"this is the last task, exiting\\n\" );\n        ExitKernel16();\n    }\n\n    pTask->nEvents = 0;\n\n    if ( hLockedTask == pTask->hSelf )\n        hLockedTask = 0;\n\n    TASK_DeleteTask( pTask->hSelf );\n\n    if ((tib = NtCurrentTeb()->Tib.SubSystemTib))\n    {\n        free_win16_tib( tib );\n        NtCurrentTeb()->Tib.SubSystemTib = NULL;\n    }\n\n    /* ... and completely release the Win16Lock, just in case. */\n    ReleaseThunkLock( &lockCount );\n}\n\nstatic DWORD WINAPI call_exit(LPVOID params)\n{\n    exit(0);\n    return 0;\n}\n\n/***********************************************************************\n *           ExitKernel (KERNEL.2)\n *\n * Clean-up everything and exit the Wine process.\n */\nvoid WINAPI ExitKernel16(void)\n{\n    WriteOutProfiles16();\n    CloseHandle(CreateThread(NULL, 0, call_exit, NULL, 0, NULL));\n}\n\n\n/***********************************************************************\n *           InitTask  (KERNEL.91)\n *\n * Called by the application startup code.\n */\nvoid WINAPI InitTask16( CONTEXT *context )\n{\n    TDB *pTask;\n    INSTANCEDATA *pinstance;\n    SEGPTR ptr;\n\n    context->Eax = 0;\n    if (!(pTask = TASK_GetCurrent())) return;\n\n    /* Note: we need to trust that BX/CX contain the stack/heap sizes,\n       as some apps, notably Visual Basic apps, *modify* the heap/stack\n       size of the instance data segment before calling InitTask() */\n\n    /* Initialize the INSTANCEDATA structure */\n    pinstance = MapSL( MAKESEGPTR(CURRENT_DS, 0) );\n    pinstance->stackmin    = OFFSETOF(getWOW32Reserved()) + sizeof( STACK16FRAME );\n    pinstance->stackbottom = pinstance->stackmin; /* yup, that's right. Confused me too. */\n    pinstance->stacktop    = ( pinstance->stackmin > LOWORD(context->Ebx) ?\n                               pinstance->stackmin - LOWORD(context->Ebx) : 0 ) + 150;\n\n    /* Initialize the local heap */\n    if (LOWORD(context->Ecx))\n        LocalInit16( GlobalHandleToSel16(pTask->hInstance), 0, LOWORD(context->Ecx) );\n\n    /* Initialize implicitly loaded DLLs */\n    NE_InitializeDLLs( pTask->hModule, NULL );\n    NE_DllProcessAttach( pTask->hModule );\n\n    /* Registers on return are:\n     * ax     1 if OK, 0 on error\n     * cx     stack limit in bytes\n     * dx     cmdShow parameter\n     * si     instance handle of the previous instance\n     * di     instance handle of the new task\n     * es:bx  pointer to command line inside PSP\n     *\n     * 0 (=%bp) is pushed on the stack\n     */\n    ptr = stack16_push( sizeof(WORD) );\n    *(WORD *)MapSL(ptr) = 0;\n    context->Esp -= 2;\n\n    context->Eax = 1;\n\n    if (!pTask->pdb.cmdLine[0]) context->Ebx = 0x80;\n    else\n    {\n        LPBYTE p = &pTask->pdb.cmdLine[1];\n        while ((*p == ' ') || (*p == '\\t')) p++;\n        context->Ebx = 0x80 + (p - pTask->pdb.cmdLine);\n    }\n    context->Ecx   = pinstance->stacktop;\n    context->Edx   = pTask->nCmdShow;\n    context->Esi   = (DWORD)pTask->hPrevInstance;\n    context->Edi   = (DWORD)pTask->hInstance;\n    context->SegEs = (WORD)pTask->hPDB;\n}\n\n\n/***********************************************************************\n *           WaitEvent  (KERNEL.30)\n */\nBOOL16 WINAPI WaitEvent16( HTASK16 hTask )\n{\n    TDB *pTask;\n\n    if (!hTask) hTask = GetCurrentTask();\n    pTask = TASK_GetPtr( hTask );\n\n    if (pTask->flags & TDBF_WIN32)\n    {\n        FIXME(\"called for Win32 thread (%04x)!\\n\", GetCurrentThreadId());\n        return TRUE;\n    }\n\n    if (pTask->nEvents > 0)\n    {\n        pTask->nEvents--;\n        return FALSE;\n    }\n\n    if (pTask->teb == NtCurrentTeb())\n    {\n        DWORD lockCount;\n\n        NtResetEvent( pTask->hEvent, NULL );\n        ReleaseThunkLock( &lockCount );\n        SYSLEVEL_CheckNotLevel( 1 );\n        WaitForSingleObject( pTask->hEvent, INFINITE );\n        RestoreThunkLock( lockCount );\n        if (pTask->nEvents > 0) pTask->nEvents--;\n    }\n    else FIXME(\"for other task %04x cur=%04x\\n\",pTask->hSelf,GetCurrentTask());\n\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           PostEvent  (KERNEL.31)\n */\nvoid WINAPI PostEvent16( HTASK16 hTask )\n{\n    TDB *pTask;\n\n    if (!hTask) hTask = GetCurrentTask();\n    if (!(pTask = TASK_GetPtr( hTask ))) return;\n\n    if (pTask->flags & TDBF_WIN32)\n    {\n        FIXME(\"called for Win32 thread (%04x)!\\n\", (DWORD)pTask->teb->ClientId.UniqueThread );\n        return;\n    }\n\n    pTask->nEvents++;\n\n    if (pTask->nEvents == 1) NtSetEvent( pTask->hEvent, NULL );\n}\n\n\n/***********************************************************************\n *           SetPriority  (KERNEL.32)\n */\nvoid WINAPI SetPriority16( HTASK16 hTask, INT16 delta )\n{\n    TDB *pTask;\n    INT16 newpriority;\n\n    if (!hTask) hTask = GetCurrentTask();\n    if (!(pTask = TASK_GetPtr( hTask ))) return;\n    newpriority = pTask->priority + delta;\n    if (newpriority < -32) newpriority = -32;\n    else if (newpriority > 15) newpriority = 15;\n\n    pTask->priority = newpriority + 1;\n    TASK_UnlinkTask( pTask->hSelf );\n    TASK_LinkTask( pTask->hSelf );\n    pTask->priority--;\n}\n\n\n/***********************************************************************\n *           LockCurrentTask  (KERNEL.33)\n */\nHTASK16 WINAPI LockCurrentTask16( BOOL16 bLock )\n{\n    if (bLock) hLockedTask = GetCurrentTask();\n    else hLockedTask = 0;\n    return hLockedTask;\n}\n\n\n/***********************************************************************\n *           IsTaskLocked  (KERNEL.122)\n */\nHTASK16 WINAPI IsTaskLocked16(void)\n{\n    return hLockedTask;\n}\n\n\n/***********************************************************************\n *           OldYield  (KERNEL.117)\n */\nvoid WINAPI OldYield16(void)\n{\n   DWORD count;\n\n   SetEvent(tls_get_kernel_thread_data()->idle_event);\n   ReleaseThunkLock(&count);\n   RestoreThunkLock(count);\n}\n\n/***********************************************************************\n *           WIN32_OldYield  (KERNEL.447)\n */\nvoid WINAPI WIN32_OldYield16(void)\n{\n   DWORD count;\n\n   SetEvent(tls_get_kernel_thread_data()->idle_event);\n   ReleaseThunkLock(&count);\n   RestoreThunkLock(count);\n}\n\n/***********************************************************************\n *           DirectedYield  (KERNEL.150)\n */\nvoid WINAPI DirectedYield16( HTASK16 hTask )\n{\n    TDB *tdb = TASK_GetPtr(hTask);\n    DWORD count;\n    struct kernel_thread_data *chdthd;\n    HTASK task;\n    BOOL failed = FALSE;\n    HTASK current = GetCurrentTask();\n    if (!tdb->teb)\n    {\n        OldYield16();\n        return;\n    }\n    SetEvent(tls_get_kernel_thread_data()->idle_event);\n    task = hFirstTask;\n    chdthd = (struct kernel_thread_data *)TebTlsGetValue(tdb->teb, kernel_thread_data_tls);\n    if (chdthd->yield_event)\n    {\n        WARN(\"nested DirectedYield doesnt work.\\n\");\n        OldYield16();\n        return;\n    }\n    task = hFirstTask;\n    while (task)\n    {\n        tdb = TASK_GetPtr(task);\n        struct kernel_thread_data *td = (struct kernel_thread_data *)TebTlsGetValue(tdb->teb, kernel_thread_data_tls);\n        if (td->yield_event)\n        {\n            if (td->htask16 == current)\n            {\n                DWORD count;\n                SetEvent(tls_get_kernel_thread_data()->idle_event);\n                ReleaseThunkLock(&count);\n                Sleep(10);\n                RestoreThunkLock(count);\n                return;\n            }\n            failed = TRUE;\n        }\n        if (td->yield_wait_event)\n        {\n            failed = TRUE;\n            return;\n        }\n        task = tdb->hNext;\n    }\n    if (failed)\n    {\n        WARN(\"nested DirectedYield doesnt work.\\n\");\n        OldYield16();\n        return;\n    }\n    chdthd->yield_event = CreateEventA(NULL, TRUE, FALSE, NULL);\n    task = hFirstTask;\n    /* All threads expect hTask or current task are locked by yield_wait_event */\n    while (task)\n    {\n        tdb = TASK_GetPtr(task);\n        if (task != hTask && tdb->teb->ClientId.UniqueThread != GetCurrentThreadId())\n        {\n            struct kernel_thread_data *td = (struct kernel_thread_data *)TebTlsGetValue(tdb->teb, kernel_thread_data_tls);\n            td->yield_wait_event = CreateEventA(NULL, TRUE, FALSE, NULL);\n        }\n        task = tdb->hNext;\n    }\n    ReleaseThunkLock(&count);\n    /*\n     * In win16, if hTask doesn't wait events, another task will be executed.\n     * Here, wait until timeout.\n     */\n    WaitForSingleObject(chdthd->yield_event, 100);\n    RestoreThunkLock(count);\n    CloseHandle(chdthd->yield_event);\n    chdthd->yield_event = NULL;\n    task = hFirstTask;\n    while (task)\n    {\n        tdb = TASK_GetPtr(task);\n        if (task != hTask && tdb->teb->ClientId.UniqueThread != GetCurrentThreadId())\n        {\n            struct kernel_thread_data *td = (struct kernel_thread_data *)TebTlsGetValue(tdb->teb, kernel_thread_data_tls);\n            SetEvent(td->yield_wait_event);\n            td->yield_wait_event = NULL;\n        }\n        task = tdb->hNext;\n    }\n}\n\n/***********************************************************************\n *           Yield  (KERNEL.29)\n */\nvoid WINAPI Yield16(void)\n{\n    TDB *pCurTask = TASK_GetCurrent();\n\n    if (pCurTask && pCurTask->hQueue)\n    {\n        DWORD count;\n        ReleaseThunkLock(&count);\n        HMODULE mod = GetModuleHandleA( \"user32.dll\" );\n        if (mod)\n        {\n            BOOL (WINAPI *pPeekMessageW)( MSG *msg, HWND hwnd, UINT first, UINT last, UINT flags );\n            pPeekMessageW = (void *)GetProcAddress( mod, \"PeekMessageW\" );\n            if (pPeekMessageW)\n            {\n                MSG msg;\n                pPeekMessageW( &msg, 0, 0, 0, PM_REMOVE | PM_QS_SENDMESSAGE );\n                RestoreThunkLock(count);\n                return;\n            }\n        }\n        RestoreThunkLock(count);\n    }\n    OldYield16();\n}\n\n/***********************************************************************\n *           KERNEL_490  (KERNEL.490)\n */\nHTASK16 WINAPI KERNEL_490( HTASK16 someTask )\n{\n    if ( !someTask ) return 0;\n\n    FIXME(\"(%04x): stub\\n\", someTask );\n    return 0;\n}\n\n/***********************************************************************\n *           MakeProcInstance  (KERNEL.51)\n */\nFARPROC16 WINAPI MakeProcInstance16( FARPROC16 func, HANDLE16 hInstance )\n{\n    struct thunk *thunk;\n    BYTE *lfunc;\n    SEGPTR thunkaddr;\n    WORD hInstanceSelector;\n\n    hInstanceSelector = GlobalHandleToSel16(hInstance);\n\n    TRACE(\"(%p, %04x);\\n\", func, hInstance);\n\n    if (!HIWORD(func)) {\n      /* Win95 actually protects via SEH, but this is better for debugging */\n      WARN(\"Ouch ! Called with invalid func %p !\\n\", func);\n      return NULL;\n    }\n\n    if ( (GlobalHandleToSel16(CURRENT_DS) != hInstanceSelector)\n      && (hInstance != 0)\n      && (hInstance != 0xffff) )\n    {\n\t/* calling MPI with a foreign DSEG is invalid ! */\n        WARN(\"Problem with hInstance? Got %04x, using %04x instead\\n\",\n                   hInstance,CURRENT_DS);\n    }\n\n    /* Always use the DSEG that MPI was entered with.\n     * We used to set hInstance to GetTaskDS16(), but this should be wrong\n     * as CURRENT_DS provides the DSEG value we need.\n     * (\"calling\" DS, *not* \"task\" DS !) */\n    hInstanceSelector = CURRENT_DS;\n    hInstance = GlobalHandle16(hInstanceSelector);\n\n    /* no thunking for DLLs */\n    if (NE_GetPtr(FarGetOwner16(hInstance))->ne_flags & NE_FFLAGS_LIBMODULE)\n\treturn func;\n\n    thunkaddr = TASK_AllocThunk();\n    if (!thunkaddr) return NULL;\n    thunk = MapSL( thunkaddr );\n    lfunc = MapSL( (SEGPTR)func );\n\n    TRACE(\"(%p,%04x): got thunk %08x\\n\", func, hInstance, thunkaddr );\n    if (((lfunc[0]==0x8c) && (lfunc[1]==0xd8)) || /* movw %ds, %ax */\n    \t((lfunc[0]==0x1e) && (lfunc[1]==0x58))    /* pushw %ds, popw %ax */\n    ) {\n    \tWARN(\"This was the (in)famous \\\"thunk useless\\\" warning. We thought we have to overwrite with nop;nop;, but this isn't true.\\n\");\n    }\n\n    thunk->movw     = 0xb8;    /* movw instance, %ax */\n    thunk->instance = hInstanceSelector;\n    thunk->ljmp     = 0xea;    /* ljmp func */\n    thunk->func     = func;\n    return (FARPROC16)thunkaddr;\n    /* CX reg indicates if thunkaddr != NULL, implement if needed */\n}\n\n\n/***********************************************************************\n *           FreeProcInstance  (KERNEL.52)\n */\nvoid WINAPI FreeProcInstance16( FARPROC16 func )\n{\n    TRACE(\"(%p)\\n\", func );\n    TASK_FreeThunk( (SEGPTR)func );\n}\n\n/**********************************************************************\n *\t    TASK_GetCodeSegment\n *\n * Helper function for GetCodeHandle/GetCodeInfo: Retrieve the module\n * and logical segment number of a given code segment.\n *\n * 'proc' either *is* already a pair of module handle and segment number,\n * in which case there's nothing to do.  Otherwise, it is a pointer to\n * a function, and we need to retrieve the code segment.  If the pointer\n * happens to point to a thunk, we'll retrieve info about the code segment\n * where the function pointed to by the thunk resides, not the thunk itself.\n *\n * FIXME: if 'proc' is a SNOOP16 return stub, we should retrieve info about\n *        the function the snoop code will return to ...\n *\n */\nstatic BOOL TASK_GetCodeSegment( FARPROC16 proc, NE_MODULE **ppModule,\n                                 SEGTABLEENTRY **ppSeg, int *pSegNr )\n{\n    NE_MODULE *pModule = NULL;\n    SEGTABLEENTRY *pSeg = NULL;\n    int segNr=0;\n\n    /* Try pair of module handle / segment number */\n    pModule = GlobalLock16( HIWORD( proc ) );\n    if ( pModule && pModule->ne_magic == IMAGE_OS2_SIGNATURE )\n    {\n        segNr = LOWORD( proc );\n        if ( segNr && segNr <= pModule->ne_cseg )\n            pSeg = NE_SEG_TABLE( pModule ) + segNr-1;\n    }\n\n    /* Try thunk or function */\n    else\n    {\n        BYTE *thunk = MapSL( (SEGPTR)proc );\n        WORD selector;\n\n        if ((thunk[0] == 0xb8) && (thunk[3] == 0xea))\n            selector = thunk[6] + (thunk[7] << 8);\n        else\n            selector = HIWORD( proc );\n\n        pModule = NE_GetPtr( GlobalHandle16( selector ) );\n        pSeg = pModule? NE_SEG_TABLE( pModule ) : NULL;\n\n        if ( pModule )\n            for ( segNr = 1; segNr <= pModule->ne_cseg; segNr++, pSeg++ )\n                if ( GlobalHandleToSel16(pSeg->hSeg) == selector )\n                    break;\n\n        if ( pModule && segNr > pModule->ne_cseg )\n            pSeg = NULL;\n    }\n\n    /* Abort if segment not found */\n\n    if ( !pModule || !pSeg )\n        return FALSE;\n\n    /* Return segment data */\n\n    if ( ppModule ) *ppModule = pModule;\n    if ( ppSeg    ) *ppSeg    = pSeg;\n    if ( pSegNr   ) *pSegNr   = segNr;\n\n    return TRUE;\n}\n\n/**********************************************************************\n *\t    GetCodeHandle    (KERNEL.93)\n */\nDWORD WINAPI GetCodeHandle16( FARPROC16 proc )\n{\n    SEGTABLEENTRY *pSeg;\n\n    if ( !TASK_GetCodeSegment( proc, NULL, &pSeg, NULL ) )\n        return 0;\n\n    return MAKELONG( pSeg->hSeg, GlobalHandleToSel16(pSeg->hSeg) );\n}\n\n/**********************************************************************\n *\t    GetCodeInfo    (KERNEL.104)\n */\nBOOL16 WINAPI GetCodeInfo16( FARPROC16 proc, SEGINFO *segInfo )\n{\n    NE_MODULE *pModule;\n    SEGTABLEENTRY *pSeg;\n    int segNr;\n\n    if ( !TASK_GetCodeSegment( proc, &pModule, &pSeg, &segNr ) )\n        return FALSE;\n\n    /* Fill in segment information */\n\n    segInfo->offSegment = pSeg->filepos;\n    segInfo->cbSegment  = pSeg->size;\n    segInfo->flags      = pSeg->flags;\n    segInfo->cbAlloc    = pSeg->minsize;\n    segInfo->h          = pSeg->hSeg;\n    segInfo->alignShift = pModule->ne_align;\n\n    if ( segNr == pModule->ne_autodata )\n        segInfo->cbAlloc += pModule->ne_heap + pModule->ne_stack;\n\n    /* Return module handle in %es */\n\n    CURRENT_STACK16->es = GlobalHandleToSel16( pModule->self );\n\n    return TRUE;\n}\n\n\n/**********************************************************************\n *          DefineHandleTable    (KERNEL.94)\n */\nBOOL16 WINAPI DefineHandleTable16( WORD wOffset )\n{\n    FIXME(\"(%04x): stub ?\\n\", wOffset);\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           SetTaskQueue  (KERNEL.34)\n */\nHQUEUE16 WINAPI SetTaskQueue16( HTASK16 hTask, HQUEUE16 hQueue )\n{\n    TDB *tdb;\n    HQUEUE16 old;\n    if (!hTask)\n        hTask = GetCurrentTask();\n    tdb = (TDB*)GlobalLock16(hTask);\n    old = tdb->hQueue;\n    tdb->hQueue = hQueue;\n    return old;\n}\n\n\n/***********************************************************************\n *           GetTaskQueue  (KERNEL.35)\n */\nHQUEUE16 WINAPI GetTaskQueue16( HTASK16 hTask )\n{\n    TDB *tdb;\n    if (!hTask)\n        hTask = GetCurrentTask();\n    tdb = (TDB*)GlobalLock16(hTask);\n    return tdb->hQueue;\n}\n\n/***********************************************************************\n *           SetThreadQueue  (KERNEL.463)\n */\nHQUEUE16 WINAPI SetThreadQueue16( DWORD thread, HQUEUE16 hQueue )\n{\n    FIXME( \"stub, should not get called\\n\" );\n    return 0xbeef;\n}\n\n/***********************************************************************\n *           GetThreadQueue  (KERNEL.464)\n */\nHQUEUE16 WINAPI GetThreadQueue16( DWORD thread )\n{\n    FIXME( \"stub, should not get called\\n\" );\n    return 0xbeef;\n}\n\n/***********************************************************************\n *           SetFastQueue  (KERNEL.624)\n */\nVOID WINAPI SetFastQueue16( DWORD thread, HQUEUE16 hQueue )\n{\n    FIXME( \"stub, should not get called\\n\" );\n}\n\n/***********************************************************************\n *           GetFastQueue  (KERNEL.625)\n */\nHQUEUE16 WINAPI GetFastQueue16( void )\n{\n    FIXME( \"stub, should not get called\\n\" );\n    return 0xbeef;\n}\n\n/***********************************************************************\n *           SwitchStackTo   (KERNEL.108)\n */\nvoid WINAPI SwitchStackTo16( WORD seg, WORD ptr, WORD top )\n{\n    STACK16FRAME *oldFrame, *newFrame;\n    INSTANCEDATA *pData;\n    UINT16 copySize;\n\n    if (!(pData = GlobalLock16( seg ))) return;\n    TRACE(\"old=%04x:%04x new=%04x:%04x\\n\",\n          SELECTOROF( getWOW32Reserved() ),\n          OFFSETOF( getWOW32Reserved() ), seg, ptr );\n\n    /* Save the old stack */\n\n    oldFrame = CURRENT_STACK16;\n    /* pop frame + args and push bp */\n    pData->old_ss_sp   = (SEGPTR)getWOW32Reserved() + sizeof(STACK16FRAME)\n                           + 2 * sizeof(WORD);\n    *(WORD *)MapSL(pData->old_ss_sp) = oldFrame->bp;\n    pData->stacktop    = top;\n    pData->stackmin    = ptr;\n    pData->stackbottom = ptr;\n\n    /* Switch to the new stack */\n\n    /* Note: we need to take the 3 arguments into account; otherwise,\n     * the stack will underflow upon return from this function.\n     */\n    copySize = oldFrame->bp - OFFSETOF(pData->old_ss_sp);\n    copySize += 3 * sizeof(WORD) + sizeof(STACK16FRAME);\n\tsetWOW32Reserved((void *)MAKESEGPTR(seg, ptr - copySize));\n    newFrame = CURRENT_STACK16;\n\n    /* Copy the stack frame and the local variables to the new stack */\n\n    memmove( newFrame, oldFrame, copySize );\n    newFrame->bp = ptr;\n    *(WORD *)MapSL( MAKESEGPTR( seg, ptr ) ) = 0;  /* clear previous bp */\n}\n\n\n/***********************************************************************\n *           SwitchStackBack   (KERNEL.109)\n */\nvoid WINAPI SwitchStackBack16( WORD dummy1, WORD dummy2, WORD dummy3, CONTEXT *context )\n{\n    STACK16FRAME *oldFrame, *newFrame;\n    INSTANCEDATA *pData;\n\n\tif (!(pData = GlobalLock16(SELECTOROF(getWOW32Reserved()))))\n        return;\n    if (!pData->old_ss_sp)\n    {\n        WARN(\"No previous SwitchStackTo\\n\" );\n        return;\n    }\n    TRACE(\"restoring stack %04x:%04x -> %04x:%04x\\n\",\n          SELECTOROF(getWOW32Reserved()), OFFSETOF(getWOW32Reserved()),\n          SELECTOROF(pData->old_ss_sp), OFFSETOF(pData->old_ss_sp) );\n\n    oldFrame = CURRENT_STACK16;\n\n    /* Pop bp from the previous stack */\n\n    context->Ebp = (context->Ebp & ~0xffff) | *(WORD *)MapSL(pData->old_ss_sp);\n    pData->old_ss_sp += sizeof(WORD);\n\n    /* Switch back to the old stack */\n\n\tsetWOW32Reserved((void *)(pData->old_ss_sp - sizeof(STACK16FRAME) - 6));\n    context->SegSs = SELECTOROF(pData->old_ss_sp);\n    context->Esp   = OFFSETOF(pData->old_ss_sp) - sizeof(DWORD) + 4 - sizeof(STACK16FRAME) + 44 - 6; /*ret addr*/\n    pData->old_ss_sp = 0;\n\n    /* Build a stack frame for the return */\n\n    newFrame = CURRENT_STACK16;\n    newFrame->frame32     = oldFrame->frame32;\n    newFrame->module_cs   = oldFrame->module_cs;\n    newFrame->callfrom_ip = oldFrame->callfrom_ip;\n    newFrame->entry_ip    = oldFrame->entry_ip;\n    newFrame->cs          = oldFrame->cs;\n    newFrame->ip          = oldFrame->ip;\n}\n\n\n/***********************************************************************\n *           GetTaskQueueDS  (KERNEL.118)\n */\nvoid WINAPI GetTaskQueueDS16(void)\n{\n    CURRENT_STACK16->ds = GlobalHandleToSel16( GetTaskQueue16(0) );\n}\n\n\n/***********************************************************************\n *           GetTaskQueueES  (KERNEL.119)\n */\nvoid WINAPI GetTaskQueueES16(void)\n{\n    CURRENT_STACK16->es = GlobalHandleToSel16( GetTaskQueue16(0) );\n}\n\n\n/***********************************************************************\n *           GetCurrentTask   (KERNEL32.@)\n */\nHTASK16 WINAPI GetCurrentTask(void)\n{\n    HTASK16 ret = kernel_get_thread_data()->htask16;\n    if (!ret) ret = main_task;\n    return ret;\n}\n\n/***********************************************************************\n *           GetCurrentTask   (KERNEL.36)\n */\nDWORD WINAPI WIN16_GetCurrentTask(void)\n{\n    /* This is the version used by relay code; the first task is */\n    /* returned in the high word of the result */\n    return MAKELONG( GetCurrentTask(), hFirstTask );\n}\n\n\n/***********************************************************************\n *           GetCurrentPDB   (KERNEL.37)\n *\n * UNDOC: returns PSP of KERNEL in high word\n */\nDWORD WINAPI GetCurrentPDB16(void)\n{\n    TDB *pTask;\n\n    if (!(pTask = TASK_GetCurrent())) return 0;\n    return MAKELONG(pTask->hPDB, 0); /* FIXME */\n}\n\n\n/***********************************************************************\n *           GetCurPID   (KERNEL.157)\n */\nDWORD WINAPI GetCurPID16( DWORD unused )\n{\n    return 0;\n}\n\n\n/***********************************************************************\n *           GetInstanceData   (KERNEL.54)\n */\nINT16 WINAPI GetInstanceData16( HINSTANCE16 instance, WORD buffer, INT16 len )\n{\n    char *ptr = GlobalLock16( instance );\n    if (!ptr || !len) return 0;\n    if ((int)buffer + len >= 0x10000) len = 0x10000 - buffer;\n    memcpy( (char *)GlobalLock16(CURRENT_DS) + buffer, ptr + buffer, len );\n    return len;\n}\n\n\n/***********************************************************************\n *           GetExeVersion   (KERNEL.105)\n */\nWORD WINAPI GetExeVersion16(void)\n{\n    TDB *pTask;\n\n    if (!(pTask = TASK_GetCurrent())) return 0;\n    return pTask->version;\n}\n\n\n/***********************************************************************\n *           SetErrorMode   (KERNEL.107)\n */\nUINT16 WINAPI SetErrorMode16( UINT16 mode )\n{\n    TDB *pTask;\n    if (!(pTask = TASK_GetCurrent())) return 0;\n    pTask->error_mode = mode;\n    return SetErrorMode( mode );\n}\n\n\n/***********************************************************************\n *           GetNumTasks   (KERNEL.152)\n */\nUINT16 WINAPI GetNumTasks16(void)\n{\n    return nTaskCount;\n}\n\n\n/***********************************************************************\n *           GetTaskDS   (KERNEL.155)\n *\n * Note: this function apparently returns a DWORD with LOWORD == HIWORD.\n * I don't think we need to bother with this.\n */\nHINSTANCE16 WINAPI GetTaskDS16(void)\n{\n    TDB *pTask;\n\n    if (!(pTask = TASK_GetCurrent())) return 0;\n    return GlobalHandleToSel16(pTask->hInstance);\n}\n\n/***********************************************************************\n *           GetDummyModuleHandleDS   (KERNEL.602)\n */\nWORD WINAPI GetDummyModuleHandleDS16(void)\n{\n    TDB *pTask;\n    WORD selector;\n\n    if (!(pTask = TASK_GetCurrent())) return 0;\n    if (!(pTask->flags & TDBF_WIN32)) return 0;\n    selector = GlobalHandleToSel16( pTask->hModule );\n    CURRENT_DS = selector;\n    return selector;\n}\n\n/***********************************************************************\n *           IsTask   (KERNEL.320)\n */\nBOOL16 WINAPI IsTask16( HTASK16 hTask )\n{\n    TDB *pTask;\n\n    if (!(pTask = TASK_GetPtr( hTask ))) return FALSE;\n    if (GlobalSize16( hTask ) < sizeof(TDB)) return FALSE;\n    return (pTask->magic == TDB_MAGIC);\n}\n\n\n/***********************************************************************\n *           IsWinOldApTask   (KERNEL.158)\n */\nBOOL16 WINAPI IsWinOldApTask16( HTASK16 hTask )\n{\n\tTDB *tdb = TASK_GetPtr(hTask);\n    if (!tdb)\n        return FALSE;\n    NE_MODULE *ne_mod = NE_GetPtr(tdb->hModule);\n    if (!ne_mod)\n        return FALSE;\n\tif (!ne_mod->ne_expver)\n\t\treturn TRUE;\n    /* should return bit 0 of byte 0x48 in PSP */\n    return FALSE;\n}\n\nBOOL16 WINAPI IsOldWindowsTask(HINSTANCE16 hInst)\n{\n    HMODULE16 hmod = GetExePtr(hInst);\n    if (!hmod)\n        return FALSE;\n    NE_MODULE *ne_mod = NE_GetPtr(hmod);\n    if (!ne_mod)\n        return FALSE;\n\tif (ne_mod->ne_expver < 0x300)\n\t\treturn TRUE;\n\treturn FALSE;\n}\n\n/* FIXME: Windows 2.x/386 programs run in protected mode?? */\nBOOL WINAPI IsRealModeTask(HINSTANCE16 hInst)\n{\n    return IsOldWindowsTask(hInst);\n}\n\n/***********************************************************************\n *           SetTaskSignalProc   (KERNEL.38)\n */\nFARPROC16 WINAPI SetTaskSignalProc( HTASK16 hTask, FARPROC16 proc )\n{\n    TDB *pTask;\n    FARPROC16 oldProc;\n\n    if (!hTask) hTask = GetCurrentTask();\n    if (!(pTask = TASK_GetPtr( hTask ))) return NULL;\n    oldProc = pTask->userhandler;\n    pTask->userhandler = proc;\n    return oldProc;\n}\n\n/***********************************************************************\n *           SetSigHandler   (KERNEL.140)\n */\nWORD WINAPI SetSigHandler16( FARPROC16 newhandler, FARPROC16* oldhandler,\n                           UINT16 *oldmode, UINT16 newmode, UINT16 flag )\n{\n    FIXME(\"(%p,%p,%p,%d,%d), unimplemented.\\n\",\n\t  newhandler,oldhandler,oldmode,newmode,flag );\n\n    if (flag != 1) return 0;\n    if (!newmode) newhandler = NULL;  /* Default handler */\n    if (newmode != 4)\n    {\n        TDB *pTask;\n\n        if (!(pTask = TASK_GetCurrent())) return 0;\n        if (oldmode) *oldmode = pTask->signal_flags;\n        pTask->signal_flags = newmode;\n        if (oldhandler) *oldhandler = pTask->sighandler;\n        pTask->sighandler = newhandler;\n    }\n    return 0;\n}\n\n\n/***********************************************************************\n *           GlobalNotify   (KERNEL.154)\n *\n * Note that GlobalNotify does _not_ return the old NotifyProc\n * -- contrary to LocalNotify !!\n */\nVOID WINAPI GlobalNotify16( FARPROC16 proc )\n{\n    TDB *pTask;\n\n    if (!(pTask = TASK_GetCurrent())) return;\n    pTask->discardhandler = proc;\n}\n\n\n/***********************************************************************\n *           GetExePtrHelper\n */\nstatic inline HMODULE16 GetExePtrHelper( HANDLE16 handle, HTASK16 *hTask )\n{\n    char *ptr;\n    HANDLE16 owner;\n\n      /* Check for module handle */\n\n    if (!(ptr = GlobalLock16( handle ))) return 0;\n    if (((NE_MODULE *)ptr)->ne_magic == IMAGE_OS2_SIGNATURE) return handle;\n\n      /* Search for this handle inside all tasks */\n\n    *hTask = hFirstTask;\n    while (*hTask)\n    {\n        TDB *pTask = TASK_GetPtr( *hTask );\n        if ((*hTask == handle) ||\n            (pTask->hInstance == handle) ||\n            (pTask->hQueue == handle) ||\n            (pTask->hPDB == handle)) return pTask->hModule;\n        *hTask = pTask->hNext;\n    }\n\n      /* Check the owner for module handle */\n\n    owner = FarGetOwner16( handle );\n    if (!(ptr = GlobalLock16( owner ))) return 0;\n    if (((NE_MODULE *)ptr)->ne_magic == IMAGE_OS2_SIGNATURE) return owner;\n\n      /* Search for the owner inside all tasks */\n\n    *hTask = hFirstTask;\n    while (*hTask)\n    {\n        TDB *pTask = TASK_GetPtr( *hTask );\n        if ((*hTask == owner) ||\n            (pTask->hInstance == owner) ||\n            (pTask->hQueue == owner) ||\n            (pTask->hPDB == owner)) return pTask->hModule;\n        *hTask = pTask->hNext;\n    }\n\n    return 0;\n}\n\n/***********************************************************************\n *           GetExePtr   (KERNEL.133)\n */\nHMODULE16 WINAPI WIN16_GetExePtr( HANDLE16 handle )\n{\n    HTASK16 hTask = 0;\n    HMODULE16 hModule = GetExePtrHelper( handle, &hTask );\n    STACK16FRAME *frame = CURRENT_STACK16;\n    frame->ecx = hModule;\n    if (hTask) frame->es = hTask;\n    return hModule;\n}\n\n\n/***********************************************************************\n *           K228   (KERNEL.228)\n */\nHMODULE16 WINAPI GetExePtr( HANDLE16 handle )\n{\n    HTASK16 hTask = 0;\n    return GetExePtrHelper( handle, &hTask );\n}\n\n\ntypedef INT (WINAPI *MessageBoxA_funcptr)(HWND hWnd, LPCSTR text, LPCSTR title, UINT type);\n\nNTSYSCALLAPI\nNTSTATUS\nNTAPI\nNtRaiseHardError(\n    _In_ NTSTATUS ErrorStatus,\n    _In_ ULONG NumberOfParameters,\n    _In_ ULONG UnicodeStringParameterMask,\n    _In_ PULONG_PTR Parameters,\n    _In_ ULONG ValidResponseOptions,\n    _Out_ PULONG Response\n);\n#define HARDERROR_OVERRIDE_ERRORMODE        0x10000000\n\ntypedef enum _HARDERROR_RESPONSE_OPTION\n{\n    OptionAbortRetryIgnore,\n    OptionOk,\n    OptionOkCancel,\n    OptionRetryCancel,\n    OptionYesNo,\n    OptionYesNoCancel,\n    OptionShutdownSystem,\n    OptionOkNoWait,\n    OptionCancelTryContinue\n} HARDERROR_RESPONSE_OPTION, *PHARDERROR_RESPONSE_OPTION;\n/**************************************************************************\n *           FatalAppExit   (KERNEL.137)\n */\nvoid WINAPI FatalAppExit16( UINT16 action, LPCSTR str )\n{\n    TDB *pTask = TASK_GetCurrent();\n\n    if (!pTask || !(pTask->error_mode & SEM_NOGPFAULTERRORBOX))\n    {\n        UNICODE_STRING uni;\n        ANSI_STRING ansi;\n        ULONG response;\n        PUNICODE_STRING puni;\n        RtlInitAnsiString(&ansi, str);\n        RtlAnsiStringToUnicodeString(&uni, &ansi, TRUE);\n        puni = &uni;\n        NTSTATUS status = NtRaiseHardError(STATUS_FATAL_APP_EXIT | HARDERROR_OVERRIDE_ERRORMODE, 1, 1, (PULONG_PTR)&puni /* pointer to pointer to UNICODE_STRING */, OptionOk, &response);\n        RtlFreeUnicodeString(&uni);\n        if (status == STATUS_NOT_IMPLEMENTED)\n        {\n            HMODULE mod = GetModuleHandleA( \"user32.dll\" );\n            if (mod)\n            {\n                MessageBoxA_funcptr pMessageBoxA = (MessageBoxA_funcptr)GetProcAddress( mod, \"MessageBoxA\" );\n                if (pMessageBoxA)\n                {\n                    pMessageBoxA( 0, str, NULL, MB_SYSTEMMODAL | MB_OK );\n                    goto done;\n                }\n            }\n        }\n        ERR( \"%s\\n\", debugstr_a(str) );\n    }\n done:\n    ExitThread(0xff);\n}\n\n\n/***********************************************************************\n *           GetAppCompatFlags   (KERNEL.354)\n */\nDWORD WINAPI GetAppCompatFlags16( HTASK16 hTask )\n{\n    TDB *pTask;\n\n    if (!hTask) hTask = GetCurrentTask();\n    if (!(pTask=TASK_GetPtr( hTask ))) return 0;\n    if (GlobalSize16(hTask) < sizeof(TDB)) return 0;\n    return pTask->compat_flags;\n}\n\n\nconst char *env_var_limitation[] =\n{\n    \"COMSPEC\", \"TEMP\", \"TMP\", \"PROCESSOR_ARCHITECTURE\"\n};\nstatic BOOL env_var_limit(const char *v)\n{\n    static BOOL init;\n    int i;\n    static BOOL limit;\n    if (!init)\n    {\n        limit = krnl386_get_config_int(\"otvdm\", \"EnvironmentVariableLimitation\", TRUE);\n    }\n    if (!limit)\n        return TRUE;\n    SIZE_T len = strchr(v, '=') ? strchr(v, '=') - v : strlen(v);\n    if ((len > 1) && (v[len - 1] == '\\x16'))\n        return TRUE;\n    for (i = 0; i < ARRAY_SIZE(env_var_limitation); i++)\n    {\n        if (strlen(env_var_limitation[i]) == len && !memicmp(v, env_var_limitation[i], len))\n            return TRUE;\n    }\n    return FALSE;\n}\n\nstatic void parse_autoexec()\n{\n    BOOL pathfound = FALSE;\n    char autoexec_path[MAX_PATH];\n    int len = 0;\n    RedirectDriveRoot(\"C:\\\\AUTOEXEC.BAT\", &autoexec_path, MAX_PATH, TRUE);\n    FILE *aeb = fopen(autoexec_path, \"r\");\n    if (aeb)\n    {\n        while (!feof(aeb))\n        {\n            char line[1024], name[128], var[256], newvar[512], *ptr;\n            int pos;\n            ptr = fgets(&line, 1024, aeb);\n            if (!ptr)\n                continue;\n            pos = strlen(line);\n            if (line[pos - 1] == '\\n')\n                line[pos - 1] = '\\0';\n            pos = strspn(line, \" \\t\");\n            if (!strnicmp(line, \"SET \", 4))\n            {\n                pos = strspn(line + pos + 4, \" \") + pos + 4;\n                ptr = strchr(line + pos, '=');\n                if (!ptr)\n                    continue;\n                int namelen = (int)(ptr - line) - pos;\n                if (namelen >= 125)\n                    continue;\n                strncpy(name, line + pos, namelen);\n                strncpy(var, ptr + 1, 256);\n                name[namelen] = '\\0';\n                if (!strlen(var))\n                    continue;\n            }\n            else if (!strnicmp(line, \"PATH\", 4))\n            {\n                pos = strspn(line + pos + 4, \" \") + pos + 4;\n                if (line[pos] == '=')\n                {\n                    pos++;\n                    pos = strspn(line + pos, \" \") + pos;\n                }\n                if (!strlen(line + pos))\n                    continue;\n                strcpy(name, \"PATH\");\n                strncpy(var, line + pos, 256);\n            }\n            else\n                continue;\n\n            // use host env var if it exists and will be copied\n            if (env_var_limit(name) && GetEnvironmentVariable(name, NULL, 0))\n                continue;\n\n            // special handling for path because we want to include path16 but exclude the host path\n            if (!strcmp(name, \"PATH\"))\n            {\n                char path[MAX_PATH];\n                if (ptr = strstr(var, \"%PATH%\"))\n                    strcpy(ptr, ptr + 6);\n                if (GetEnvironmentVariable(\"PATH\\x16\", path, MAX_PATH))\n                {\n                    strcat(var, \";\");\n                    strcat(var, path);\n                }\n                if (GetEnvironmentVariable(\"PATH16\", path, MAX_PATH) && !pathfound)\n                {\n                    strcat(var, \";\");\n                    strcat(var, path);\n                }\n                pathfound = TRUE;\n            }\n            strcat(name, \"\\x16\");\n            ExpandEnvironmentStringsA(var, newvar, 512);\n            SetEnvironmentVariable(name, newvar);\n        }\n        fclose(aeb);\n    }\n    // at least one program requires some kind of path\n    char path[MAX_PATH];\n    if (!pathfound)\n    {\n        if (!GetEnvironmentVariable(\"PATH16\", path, MAX_PATH))\n            RedirectSystemDir(\"C:\\\\WINDOWS\\\\\", path, MAX_PATH);\n        SetEnvironmentVariable(\"PATH\\x16\", path);\n    }\n    GetEnvironmentVariable(\"PATH\\x16\", path, MAX_PATH);\n    SetEnvironmentVariable(\"PATH16\", path);\n}\n\n/***********************************************************************\n *           GetDOSEnvironment     (KERNEL.131)\n *\n * Note: the environment is allocated once, it doesn't track changes\n * made using the Win32 API. This shouldn't matter.\n *\n * Format of a 16-bit environment block:\n * ASCIIZ   string 1 (xx=yy format)\n * ...\n * ASCIIZ   string n\n * BYTE     0\n * WORD     1\n * ASCIIZ   program name (e.g. C:\\WINDOWS\\SYSTEM\\KRNL386.EXE)\n */\nSEGPTR WINAPI GetDOSEnvironment16(void)\n{\n    static const char ENV_program_name[] = \"C:\\\\WINDOWS\\\\SYSTEM\\\\KRNL386.EXE\";\n    static HGLOBAL16 handle;  /* handle to the 16 bit environment */\n\n    if (!handle)\n    {\n        DWORD size = 0;\n        LPSTR p, env;\n\n        parse_autoexec();\n\n        p = env = GetEnvironmentStringsA();\n        while (*p)\n        {\n            if (env_var_limit(p))\n            {\n                size += strlen(p) + 1;\n            }\n            p += strlen(p) + 1;\n        }\n        size++;  /* skip last null */\n        size += sizeof(WORD) + sizeof(ENV_program_name) + 1;\n        handle = GlobalAlloc16( GMEM_FIXED, size );\n        if (handle)\n        {\n            WORD one = 1;\n            LPSTR env16 = GlobalLock16( handle );\n            LPSTR env16p = env16;\n            p = env;\n            while (*p)\n            {\n                if (env_var_limit(p))\n                {\n                    int i;\n                    for (i = 0; i < strlen(p) + 1; i++)\n                    {\n                        if (p[i] == '=')\n                        {\n                            if (i && (p[i - 1] == '\\x16'))\n                            {\n                                i--;\n                                p++;\n                            }\n                            break;\n                        }\n                        env16p[i] = toupper(p[i]);\n                    }\n                    memcpy(env16p + i, p + i, strlen(p + i) + 1);\n                    env16p += strlen(p) + 1;\n                }\n                p += strlen(p) + 1;\n            }\n            *env16p = 0;\n            env16p++;\n            memcpy( env16p, &one, sizeof(one));\n            env16p += sizeof(one);\n            memcpy( env16p, ENV_program_name, sizeof(ENV_program_name));\n            GlobalUnlock16( handle );\n        }\n        FreeEnvironmentStringsA( env );\n    }\n    return WOWGlobalLock16( handle );\n}\n\n/*\nEmulate an independent current directory for each task\n*/\nvoid switch_directory(struct kernel_thread_data *thread_data)\n{\n    if (!thread_data->htask16)\n        return;\n    if (curdir_tls_index == -1)\n    {\n        curdir_tls_index = TlsAlloc();\n    }\n    if (task_old != thread_data->htask16)\n    {\n        TDB *tdb = TASK_GetCurrent();\n        if (!thread_data->curdir_len)\n        {\n            thread_data->curdir_len = 32768;\n            thread_data->true_curdir = HeapAlloc(GetProcessHeap(), 0, thread_data->curdir_len * 2);\n            thread_data->true_curdir[0] = (tdb->curdrive & ~0x80) + 'A';\n            thread_data->true_curdir[1] = ':';\n            thread_data->curdir_buf = thread_data->true_curdir + thread_data->curdir_len;\n            TebTlsSetValue(tdb->teb ? tdb->teb : NtCurrentTeb(), curdir_tls_index, thread_data->true_curdir);\n\n            GetCurrentDirectoryA(thread_data->curdir_len, thread_data->true_curdir);\n            GetShortPathNameA(thread_data->true_curdir, thread_data->true_curdir, thread_data->curdir_len);\n            memcpy(thread_data->curdir_buf, thread_data->true_curdir, thread_data->curdir_len);\n            SetCurrentDirectory16(thread_data->true_curdir);\n        }\n        if (TlsGetValue(curdir_tls_index) == 0xdead)\n        {\n            task_old = NULL;\n            task_old_data = NULL;\n            return;\n        }\n        if (!task_old || !task_old_data || !task_old_data->curdir_buf)\n        {\n            task_old = NULL;\n            task_old_data = NULL;\n        }\n        if (task_old)\n        {\n            /*\n            save current directory\n            curdir_buf -> new curdir\n            true_curdir-> old curdir\n            tdb->curdir-> old curdir\n            */\n            GetCurrentDirectoryA(task_old_data->curdir_len, task_old_data->curdir_buf);\n            if (strcmp(task_old_data->curdir_buf, task_old_data->true_curdir))\n            {\n                /* changed */\n                GetShortPathNameA(task_old_data->curdir_buf, task_old_data->curdir_buf, task_old_data->curdir_len);\n                strcpy(task_old_data->true_curdir, task_old_data->curdir_buf);\n                TDB *old = ((TDB*)GlobalLock16(task_old_data->htask16));\n                GetShortPathNameA(task_old_data->true_curdir + 2, old->curdir, sizeof(old->curdir));\n                GetShortPathNameA(task_old_data->true_curdir, task_old_data->true_curdir, task_old_data->curdir_len);\n                if (!thread_data->htask16)\n                    old = NULL;\n                old->curdrive = 0x80 | (task_old_data->true_curdir[0] - 'A');\n                GlobalUnlock16(task_old_data->htask16);\n                /*\n                curdir_buf -> new curdir\n                true_curdir-> new curdir\n                tdb->curdir-> new curdir\n                */\n                TRACE(\"%.*s %p save cur dir %s\\n\", 8, old->module_name, old, task_old_data->true_curdir);\n            }\n        }\n        /* restore current directory */\n        SetCurrentDirectoryA(thread_data->true_curdir);\n        task_old_data = thread_data;\n        task_old = thread_data->htask16;\n    }\n}\n"
  },
  {
    "path": "krnl386/thunk.c",
    "content": "/*\n * KERNEL32 thunks and other undocumented stuff\n *\n * Copyright 1996, 1997 Alexandre Julliard\n * Copyright 1997, 1998 Marcus Meissner\n * Copyright 1998       Ulrich Weigand\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <string.h>\n#include <sys/types.h>\n#include <stdarg.h>\n#include <stdio.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winerror.h\"\n#include \"winternl.h\"\n#include \"windows/wownt32.h\"\n#include \"wine/winbase16.h\"\n\n#include \"wine/debug.h\"\n#include \"wine/library.h\"\n#include \"kernel16_private.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(thunk);\n\nstruct ThunkDataCommon\n{\n    char                   magic[4];         /* 00 */\n    DWORD                  checksum;         /* 04 */\n};\n\nstruct ThunkDataLS16\n{\n    struct ThunkDataCommon common;           /* 00 */\n    SEGPTR                 targetTable;      /* 08 */\n    DWORD                  firstTime;        /* 0C */\n};\n\nstruct ThunkDataLS32\n{\n    struct ThunkDataCommon common;           /* 00 */\n    DWORD *                targetTable;      /* 08 */\n    char                   lateBinding[4];   /* 0C */\n    DWORD                  flags;            /* 10 */\n    DWORD                  reserved1;        /* 14 */\n    DWORD                  reserved2;        /* 18 */\n    DWORD                  offsetQTThunk;    /* 1C */\n    DWORD                  offsetFTProlog;   /* 20 */\n};\n\nstruct ThunkDataSL16\n{\n    struct ThunkDataCommon common;            /* 00 */\n    DWORD                  flags1;            /* 08 */\n    DWORD                  reserved1;         /* 0C */\n    struct ThunkDataSL *   fpData;            /* 10 */\n    SEGPTR                 spData;            /* 14 */\n    DWORD                  reserved2;         /* 18 */\n    char                   lateBinding[4];    /* 1C */\n    DWORD                  flags2;            /* 20 */\n    DWORD                  reserved3;         /* 20 */\n    SEGPTR                 apiDatabase;       /* 28 */\n};\n\nstruct ThunkDataSL32\n{\n    struct ThunkDataCommon common;            /* 00 */\n    DWORD                  reserved1;         /* 08 */\n    struct ThunkDataSL *   data;              /* 0C */\n    char                   lateBinding[4];    /* 10 */\n    DWORD                  flags;             /* 14 */\n    DWORD                  reserved2;         /* 18 */\n    DWORD                  reserved3;         /* 1C */\n    DWORD                  offsetTargetTable; /* 20 */\n};\n\nstruct ThunkDataSL\n{\n#if 0\n    This structure differs from the Win95 original,\n    but this should not matter since it is strictly internal to\n    the thunk handling routines in KRNL386 / KERNEL32.\n\n    For reference, here is the Win95 layout:\n\n    struct ThunkDataCommon common;            /* 00 */\n    DWORD                  flags1;            /* 08 */\n    SEGPTR                 apiDatabase;       /* 0C */\n    WORD                   exePtr;            /* 10 */\n    WORD                   segMBA;            /* 12 */\n    DWORD                  lenMBATotal;       /* 14 */\n    DWORD                  lenMBAUsed;        /* 18 */\n    DWORD                  flags2;            /* 1C */\n    char                   pszDll16[256];     /* 20 */\n    char                   pszDll32[256];     /*120 */\n\n    We do it differently since all our thunk handling is done\n    by 32-bit code. Therefore we do not need to provide\n    easy access to this data, especially the process target\n    table database, for 16-bit code.\n#endif\n\n    struct ThunkDataCommon common;\n    DWORD                  flags1;\n    struct SLApiDB *       apiDB;\n    struct SLTargetDB *    targetDB;\n    DWORD                  flags2;\n    char                   pszDll16[256];\n    char                   pszDll32[256];\n};\n\nstruct SLTargetDB\n{\n     struct SLTargetDB *   next;\n     DWORD                 process;\n     DWORD *               targetTable;\n};\n\nstruct SLApiDB\n{\n    DWORD                  nrArgBytes;\n    DWORD                  errorReturnValue;\n};\n\nSEGPTR CALL32_CBClient_RetAddr = 0;\nSEGPTR CALL32_CBClientEx_RetAddr = 0;\n\nextern int call_entry_point( void *func, int nb_args, const DWORD *args );\nextern void __wine_call_from_16_thunk(void);\nDEFINE_REGS_ENTRYPOINT( FT_Prolog )\nDEFINE_REGS_ENTRYPOINT( FT_PrologPrime )\nDEFINE_REGS_ENTRYPOINT( QT_Thunk )\nDEFINE_REGS_ENTRYPOINT( QT_ThunkPrime )\n\n/***********************************************************************\n *                                                                     *\n *                 Win95 internal thunks                               *\n *                                                                     *\n ***********************************************************************/\n\n/***********************************************************************\n *           LogApiThk    (KERNEL.423)\n */\nvoid WINAPI LogApiThk( LPSTR func )\n{\n    TRACE( \"%s\\n\", debugstr_a(func) );\n}\n\n/***********************************************************************\n *           LogApiThkLSF    (KERNEL32.42)\n *\n * NOTE: needs to preserve all registers!\n */\n__ASM_STDCALL_FUNC( LogApiThkLSF, 4, \"ret $4\" )\n\n/***********************************************************************\n *           LogApiThkSL    (KERNEL32.44)\n *\n * NOTE: needs to preserve all registers!\n */\n__ASM_STDCALL_FUNC( LogApiThkSL, 4, \"ret $4\" )\n\n/***********************************************************************\n *           LogCBThkSL    (KERNEL32.47)\n *\n * NOTE: needs to preserve all registers!\n */\n__ASM_STDCALL_FUNC( LogCBThkSL, 4, \"ret $4\" )\n\n/***********************************************************************\n * Generates a FT_Prolog call.\n *\n *  0FB6D1                  movzbl edx,cl\n *  8B1495xxxxxxxx\t    mov edx,[4*edx + targetTable]\n *  68xxxxxxxx\t\t    push FT_Prolog\n *  C3\t\t\t    lret\n */\nstatic void _write_ftprolog(LPBYTE relayCode ,DWORD *targetTable) {\n\tLPBYTE\tx;\n\n\tx\t= relayCode;\n\t*x++\t= 0x0f;*x++=0xb6;*x++=0xd1; /* movzbl edx,cl */\n\t*x++\t= 0x8B;*x++=0x14;*x++=0x95;*(DWORD**)x= targetTable;\n\tx+=4;\t/* mov edx, [4*edx + targetTable] */\n\t*x++\t= 0x68; *(void **)x = FT_Prolog;\n\tx+=4; \t/* push FT_Prolog */\n\t*x++\t= 0xC3;\t\t/* lret */\n\t/* fill rest with 0xCC / int 3 */\n}\n\n/***********************************************************************\n *\t_write_qtthunk\t\t\t\t\t(internal)\n * Generates a QT_Thunk style call.\n *\n *  33C9                    xor ecx, ecx\n *  8A4DFC                  mov cl , [ebp-04]\n *  8B148Dxxxxxxxx          mov edx, [4*ecx + targetTable]\n *  B8yyyyyyyy              mov eax, QT_Thunk\n *  FFE0                    jmp eax\n */\nstatic void _write_qtthunk(\n\tLPBYTE relayCode,\t/* [in] start of QT_Thunk stub */\n\tDWORD *targetTable\t/* [in] start of thunk (for index lookup) */\n) {\n\tLPBYTE\tx;\n\n\tx\t= relayCode;\n\t*x++\t= 0x33;*x++=0xC9; /* xor ecx,ecx */\n\t*x++\t= 0x8A;*x++=0x4D;*x++=0xFC; /* movb cl,[ebp-04] */\n\t*x++\t= 0x8B;*x++=0x14;*x++=0x8D;*(DWORD**)x= targetTable;\n\tx+=4;\t/* mov edx, [4*ecx + targetTable */\n\t*x++\t= 0xB8; *(void **)x = QT_Thunk;\n\tx+=4; \t/* mov eax , QT_Thunk */\n\t*x++\t= 0xFF; *x++ = 0xE0;\t/* jmp eax */\n\t/* should fill the rest of the 32 bytes with 0xCC */\n}\n\n/***********************************************************************\n *           _loadthunk\n */\nstatic LPVOID _loadthunk(LPCSTR module, LPCSTR func, LPCSTR module32,\n                         struct ThunkDataCommon *TD32, DWORD checksum)\n{\n    struct ThunkDataCommon *TD16;\n    HMODULE16 hmod;\n    int ordinal;\n    static BOOL done;\n\n    if (!done)\n    {\n        LoadLibrary16( \"gdi.exe\" );\n        LoadLibrary16( \"user.exe\" );\n        done = TRUE;\n    }\n\n    if ((hmod = LoadLibrary16(module)) <= 32)\n    {\n        ERR(\"(%s, %s, %s): Unable to load '%s', error %d\\n\",\n                   module, func, module32, module, hmod);\n        return 0;\n    }\n\n    if (   !(ordinal = NE_GetOrdinal(hmod, func))\n        || !(TD16 = MapSL((SEGPTR)NE_GetEntryPointEx(hmod, ordinal, FALSE))))\n    {\n        ERR(\"Unable to find thunk data '%s' in %s, required by %s (conflicting/incorrect DLL versions !?).\\n\",\n                   func, module, module32);\n        return 0;\n    }\n\n    if (TD32 && memcmp(TD16->magic, TD32->magic, 4))\n    {\n        ERR(\"(%s, %s, %s): Bad magic %c%c%c%c (should be %c%c%c%c)\\n\",\n                   module, func, module32,\n                   TD16->magic[0], TD16->magic[1], TD16->magic[2], TD16->magic[3],\n                   TD32->magic[0], TD32->magic[1], TD32->magic[2], TD32->magic[3]);\n        return 0;\n    }\n\n    if (TD32 && TD16->checksum != TD32->checksum)\n    {\n        ERR(\"(%s, %s, %s): Wrong checksum %08x (should be %08x)\\n\",\n                   module, func, module32, TD16->checksum, TD32->checksum);\n        return 0;\n    }\n\n    if (!TD32 && checksum && checksum != *(LPDWORD)TD16)\n    {\n        ERR(\"(%s, %s, %s): Wrong checksum %08x (should be %08x)\\n\",\n                   module, func, module32, *(LPDWORD)TD16, checksum);\n        return 0;\n    }\n\n    return TD16;\n}\n\n/***********************************************************************\n *           GetThunkStuff    (KERNEL32.53)\n */\nLPVOID WINAPI GetThunkStuff(LPCSTR module, LPCSTR func)\n{\n    return _loadthunk(module, func, \"<kernel>\", NULL, 0L);\n}\n\n/***********************************************************************\n *           GetThunkBuff    (KERNEL32.52)\n * Returns a pointer to ThkBuf in the 16bit library SYSTHUNK.DLL.\n */\nLPVOID WINAPI GetThunkBuff(void)\n{\n    return GetThunkStuff(\"SYSTHUNK.DLL\", \"ThkBuf\");\n}\n\n/***********************************************************************\n *\t\tThunkConnect32\t\t(KERNEL32.@)\n * Connects a 32bit and a 16bit thunkbuffer.\n */\nUINT WINAPI ThunkConnect32(\n\tstruct ThunkDataCommon *TD,  /* [in/out] thunkbuffer */\n\tLPSTR thunkfun16,            /* [in] win16 thunkfunction */\n\tLPSTR module16,              /* [in] name of win16 dll */\n\tLPSTR module32,              /* [in] name of win32 dll */\n\tHMODULE hmod32,            /* [in] hmodule of win32 dll */\n\tDWORD dwReason               /* [in] initialisation argument */\n) {\n    BOOL directionSL;\n\n    if (!strncmp(TD->magic, \"SL01\", 4))\n    {\n        directionSL = TRUE;\n\n        TRACE(\"SL01 thunk %s (%p) <- %s (%s), Reason: %d\\n\",\n              module32, TD, module16, thunkfun16, dwReason);\n    }\n    else if (!strncmp(TD->magic, \"LS01\", 4))\n    {\n        directionSL = FALSE;\n\n        TRACE(\"LS01 thunk %s (%p) -> %s (%s), Reason: %d\\n\",\n              module32, TD, module16, thunkfun16, dwReason);\n    }\n    else\n    {\n        ERR(\"Invalid magic %c%c%c%c\\n\",\n                   TD->magic[0], TD->magic[1], TD->magic[2], TD->magic[3]);\n        return 0;\n    }\n\n    switch (dwReason)\n    {\n        case DLL_PROCESS_ATTACH:\n        {\n            struct ThunkDataCommon *TD16;\n            if (!(TD16 = _loadthunk(module16, thunkfun16, module32, TD, 0L)))\n                return 0;\n\n            if (directionSL)\n            {\n                struct ThunkDataSL32 *SL32 = (struct ThunkDataSL32 *)TD;\n                struct ThunkDataSL16 *SL16 = (struct ThunkDataSL16 *)TD16;\n                struct SLTargetDB *tdb;\n\n                if (SL16->fpData == NULL)\n                {\n                    ERR(\"ThunkConnect16 was not called!\\n\");\n                    return 0;\n                }\n\n                SL32->data = SL16->fpData;\n\n                tdb = HeapAlloc(GetProcessHeap(), 0, sizeof(*tdb));\n                tdb->process = GetCurrentProcessId();\n                tdb->targetTable = (DWORD *)(thunkfun16 + SL32->offsetTargetTable);\n\n                tdb->next = SL32->data->targetDB;   /* FIXME: not thread-safe! */\n                SL32->data->targetDB = tdb;\n\n                TRACE(\"Process %08x allocated TargetDB entry for ThunkDataSL %p\\n\",\n                      GetCurrentProcessId(), SL32->data);\n            }\n            else\n            {\n                struct ThunkDataLS32 *LS32 = (struct ThunkDataLS32 *)TD;\n                struct ThunkDataLS16 *LS16 = (struct ThunkDataLS16 *)TD16;\n\n                LS32->targetTable = MapSL(LS16->targetTable);\n\n                /* write QT_Thunk and FT_Prolog stubs */\n                _write_qtthunk ((LPBYTE)TD + LS32->offsetQTThunk,  LS32->targetTable);\n                _write_ftprolog((LPBYTE)TD + LS32->offsetFTProlog, LS32->targetTable);\n            }\n            break;\n        }\n\n        case DLL_PROCESS_DETACH:\n            /* FIXME: cleanup */\n            break;\n    }\n\n    return 1;\n}\n\n/**********************************************************************\n * \t\tQT_Thunk\t\t\t(KERNEL32.@)\n *\n * The target address is in EDX.\n * The 16bit arguments start at ESP.\n * The number of 16bit argument bytes is EBP-ESP-0x40 (64 Byte thunksetup).\n * So the stack layout is 16bit argument bytes and then the 64 byte\n * scratch buffer.\n * The scratch buffer is used as work space by Windows' QT_Thunk\n * function.\n * As the programs unfortunately don't always provide a fixed size\n * scratch buffer (danger, stack corruption ahead !!), we simply resort\n * to copying over the whole EBP-ESP range to the 16bit stack\n * (as there's no way to safely figure out the param count\n * due to this misbehaviour of some programs).\n * [ok]\n *\n * See DDJ article 9614c for a very good description of QT_Thunk (also\n * available online !).\n *\n * FIXME: DDJ talks of certain register usage rules; I'm not sure\n * whether we cover this 100%.\n */\nvoid WINAPI __regs_QT_Thunk( CONTEXT *context )\n{\n    CONTEXT context16;\n    DWORD argsize;\n\n    context16 = *context;\n\n    context16.SegFs = wine_get_fs();\n    context16.SegGs = wine_get_gs();\n    context16.SegCs = HIWORD(context->Edx);\n    context16.Eip   = LOWORD(context->Edx);\n    /* point EBP to the STACK16FRAME on the stack\n     * for the call_to_16 to set up the register content on calling */\n    context16.Ebp   = OFFSETOF(getWOW32Reserved()) + FIELD_OFFSET(STACK16FRAME,bp);\n\n    /*\n     * used to be (problematic):\n     * argsize = context->Ebp - context->Esp - 0x40;\n     * due to some programs abusing the API, we better assume the full\n     * EBP - ESP range for copying instead: */\n    argsize = context->Ebp - context->Esp;\n\n    /* ok, too much is insane; let's limit param count a bit again */\n    if (argsize > 64)\n\targsize = 64; /* 32 WORDs */\n\n    WOWCallback16Ex( 0, WCB16_REGS, argsize, (void *)context->Esp, (DWORD *)&context16 );\n    context->Eax = context16.Eax;\n    context->Edx = context16.Edx;\n    context->Ecx = context16.Ecx;\n\n    /* make sure to update the Win32 ESP, too, in order to throw away\n     * the number of parameters that the Win16 function\n     * accepted (that it popped from the corresponding Win16 stack) */\n    context->Esp +=   LOWORD(context16.Esp) -\n                        ( OFFSETOF(getWOW32Reserved()) - argsize );\n}\n\n\n/**********************************************************************\n * \t\tFT_Prolog\t\t\t(KERNEL32.@)\n *\n * The set of FT_... thunk routines is used instead of QT_Thunk,\n * if structures have to be converted from 32-bit to 16-bit\n * (change of member alignment, conversion of members).\n *\n * The thunk function (as created by the thunk compiler) calls\n * FT_Prolog at the beginning, to set up a stack frame and\n * allocate a 64 byte buffer on the stack.\n * The input parameters (target address and some flags) are\n * saved for later use by FT_Thunk.\n *\n * Input:  EDX  16-bit target address (SEGPTR)\n *         CX   bits  0..7   target number (in target table)\n *              bits  8..9   some flags (unclear???)\n *              bits 10..15  number of DWORD arguments\n *\n * Output: A new stackframe is created, and a 64 byte buffer\n *         allocated on the stack. The layout of the stack\n *         on return is as follows:\n *\n *  (ebp+4)  return address to caller of thunk function\n *  (ebp)    old EBP\n *  (ebp-4)  saved EBX register of caller\n *  (ebp-8)  saved ESI register of caller\n *  (ebp-12) saved EDI register of caller\n *  (ebp-16) saved ECX register, containing flags\n *  (ebp-20) bitmap containing parameters that are to be converted\n *           by FT_Thunk; it is initialized to 0 by FT_Prolog and\n *           filled in by the thunk code before calling FT_Thunk\n *  (ebp-24)\n *    ...    (unclear)\n *  (ebp-44)\n *  (ebp-48) saved EAX register of caller (unclear, never restored???)\n *  (ebp-52) saved EDX register, containing 16-bit thunk target\n *  (ebp-56)\n *    ...    (unclear)\n *  (ebp-64)\n *\n *  ESP is EBP-64 after return.\n *\n */\nvoid WINAPI __regs_FT_Prolog( CONTEXT *context )\n{\n    /* Build stack frame */\n    stack32_push(context, context->Ebp);\n    context->Ebp = context->Esp;\n\n    /* Allocate 64-byte Thunk Buffer */\n    context->Esp -= 64;\n    memset((char *)context->Esp, '\\0', 64);\n\n    /* Store Flags (ECX) and Target Address (EDX) */\n    /* Save other registers to be restored later */\n    *(DWORD *)(context->Ebp -  4) = context->Ebx;\n    *(DWORD *)(context->Ebp -  8) = context->Esi;\n    *(DWORD *)(context->Ebp - 12) = context->Edi;\n    *(DWORD *)(context->Ebp - 16) = context->Ecx;\n\n    *(DWORD *)(context->Ebp - 48) = context->Eax;\n    *(DWORD *)(context->Ebp - 52) = context->Edx;\n}\n\n/**********************************************************************\n * \t\tFT_Thunk\t\t\t(KERNEL32.@)\n *\n * This routine performs the actual call to 16-bit code,\n * similar to QT_Thunk. The differences are:\n *  - The call target is taken from the buffer created by FT_Prolog\n *  - Those arguments requested by the thunk code (by setting the\n *    corresponding bit in the bitmap at EBP-20) are converted\n *    from 32-bit pointers to segmented pointers (those pointers\n *    are guaranteed to point to structures copied to the stack\n *    by the thunk code, so we always use the 16-bit stack selector\n *    for those addresses).\n *\n *    The bit #i of EBP-20 corresponds here to the DWORD starting at\n *    ESP+4 + 2*i.\n *\n * FIXME: It is unclear what happens if there are more than 32 WORDs\n *        of arguments, so that the single DWORD bitmap is no longer\n *        sufficient ...\n */\nvoid WINAPI __regs_FT_Thunk( CONTEXT *context )\n{\n    DWORD mapESPrelative = *(DWORD *)(context->Ebp - 20);\n    DWORD callTarget     = *(DWORD *)(context->Ebp - 52);\n\n    CONTEXT context16;\n    DWORD i, argsize;\n    DWORD newstack[32];\n    LPBYTE oldstack;\n\n    context16 = *context;\n\n    context16.SegFs = wine_get_fs();\n    context16.SegGs = wine_get_gs();\n    context16.SegCs = HIWORD(callTarget);\n    context16.Eip   = LOWORD(callTarget);\n    context16.Ebp   = OFFSETOF(getWOW32Reserved()) + FIELD_OFFSET(STACK16FRAME,bp);\n\n    argsize  = context->Ebp-context->Esp-0x40;\n    if (argsize > sizeof(newstack)) argsize = sizeof(newstack);\n    oldstack = (LPBYTE)context->Esp;\n\n    memcpy( newstack, oldstack, argsize );\n\n    for (i = 0; i < 32; i++)\t/* NOTE: What about > 32 arguments? */\n\tif (mapESPrelative & (1 << i))\n\t{\n\t    SEGPTR *arg = (SEGPTR *)newstack[i];\n\t    *arg = MAKESEGPTR(SELECTOROF(getWOW32Reserved()),\n                              OFFSETOF(getWOW32Reserved()) - argsize\n                              + (*(LPBYTE *)arg - oldstack));\n\t}\n\n    WOWCallback16Ex( 0, WCB16_REGS, argsize, newstack, (DWORD *)&context16 );\n    context->Eax = context16.Eax;\n    context->Edx = context16.Edx;\n    context->Ecx = context16.Ecx;\n\n    context->Esp +=   LOWORD(context16.Esp) -\n                        ( OFFSETOF(getWOW32Reserved()) - argsize );\n\n    /* Copy modified buffers back to 32-bit stack */\n    memcpy( oldstack, newstack, argsize );\n}\nDEFINE_REGS_ENTRYPOINT( FT_Thunk )\n\n/***********************************************************************\n *\t\tFT_Exit0 (KERNEL32.@)\n *\t\tFT_Exit4 (KERNEL32.@)\n *\t\tFT_Exit8 (KERNEL32.@)\n *\t\tFT_Exit12 (KERNEL32.@)\n *\t\tFT_Exit16 (KERNEL32.@)\n *\t\tFT_Exit20 (KERNEL32.@)\n *\t\tFT_Exit24 (KERNEL32.@)\n *\t\tFT_Exit28 (KERNEL32.@)\n *\t\tFT_Exit32 (KERNEL32.@)\n *\t\tFT_Exit36 (KERNEL32.@)\n *\t\tFT_Exit40 (KERNEL32.@)\n *\t\tFT_Exit44 (KERNEL32.@)\n *\t\tFT_Exit48 (KERNEL32.@)\n *\t\tFT_Exit52 (KERNEL32.@)\n *\t\tFT_Exit56 (KERNEL32.@)\n *\n * One of the FT_ExitNN functions is called at the end of the thunk code.\n * It removes the stack frame created by FT_Prolog, moves the function\n * return from EBX to EAX (yes, FT_Thunk did use EAX for the return\n * value, but the thunk code has moved it from EAX to EBX in the\n * meantime ... :-), restores the caller's EBX, ESI, and EDI registers,\n * and perform a return to the CALLER of the thunk code (while removing\n * the given number of arguments from the caller's stack).\n */\n#define FT_EXIT_RESTORE_REGS \\\n    \"movl %ebx,%eax\\n\\t\" \\\n    \"movl -4(%ebp),%ebx\\n\\t\" \\\n    \"movl -8(%ebp),%esi\\n\\t\" \\\n    \"movl -12(%ebp),%edi\\n\\t\" \\\n    \"leave\\n\\t\"\n\n#define DEFINE_FT_Exit(n) \\\n    __ASM_STDCALL_FUNC( FT_Exit ## n, 0, FT_EXIT_RESTORE_REGS \"ret $\" #n )\n\n\nDEFINE_FT_Exit(0)\nDEFINE_FT_Exit(4)\nDEFINE_FT_Exit(8)\nDEFINE_FT_Exit(12)\nDEFINE_FT_Exit(16)\nDEFINE_FT_Exit(20)\nDEFINE_FT_Exit(24)\nDEFINE_FT_Exit(28)\nDEFINE_FT_Exit(32)\nDEFINE_FT_Exit(36)\nDEFINE_FT_Exit(40)\nDEFINE_FT_Exit(44)\nDEFINE_FT_Exit(48)\nDEFINE_FT_Exit(52)\nDEFINE_FT_Exit(56)\n\n\n/***********************************************************************\n * \t\tThunkInitLS \t(KERNEL32.43)\n * A thunkbuffer link routine\n * The thunkbuf looks like:\n *\n *\t00: DWORD\tlength\t\t? don't know exactly\n *\t04: SEGPTR\tptr\t\t? where does it point to?\n * The pointer ptr is written into the first DWORD of 'thunk'.\n * (probably correctly implemented)\n * [ok probably]\n * RETURNS\n *\tsegmented pointer to thunk?\n */\nDWORD WINAPI ThunkInitLS(\n\tLPDWORD thunk,\t/* [in] win32 thunk */\n\tLPCSTR thkbuf,\t/* [in] thkbuffer name in win16 dll */\n\tDWORD len,\t/* [in] thkbuffer length */\n\tLPCSTR dll16,\t/* [in] name of win16 dll */\n\tLPCSTR dll32\t/* [in] name of win32 dll (FIXME: not used?) */\n) {\n\tLPDWORD\t\taddr;\n\n\tif (!(addr = _loadthunk( dll16, thkbuf, dll32, NULL, len )))\n\t\treturn 0;\n\n\tif (!addr[1])\n\t\treturn 0;\n\t*thunk = addr[1];\n\n\treturn addr[1];\n}\n\n/***********************************************************************\n * \t\tCommon32ThkLS \t(KERNEL32.45)\n *\n * This is another 32->16 thunk, independent of the QT_Thunk/FT_Thunk\n * style thunks. The basic difference is that the parameter conversion\n * is done completely on the *16-bit* side here. Thus we do not call\n * the 16-bit target directly, but call a common entry point instead.\n * This entry function then calls the target according to the target\n * number passed in the DI register.\n *\n * Input:  EAX    SEGPTR to the common 16-bit entry point\n *         CX     offset in thunk table (target number * 4)\n *         DX     error return value if execution fails (unclear???)\n *         EDX.HI number of DWORD parameters\n *\n * (Note that we need to move the thunk table offset from CX to DI !)\n *\n * The called 16-bit stub expects its stack to look like this:\n *     ...\n *   (esp+40)  32-bit arguments\n *     ...\n *   (esp+8)   32 byte of stack space available as buffer\n *   (esp)     8 byte return address for use with 0x66 lret\n *\n * The called 16-bit stub uses a 0x66 lret to return to 32-bit code,\n * and uses the EAX register to return a DWORD return value.\n * Thus we need to use a special assembly glue routine\n * (CallRegisterLongProc instead of CallRegisterShortProc).\n *\n * Finally, we return to the caller, popping the arguments off\n * the stack.  The number of arguments to be popped is returned\n * in the BL register by the called 16-bit routine.\n *\n */\nvoid WINAPI __regs_Common32ThkLS( CONTEXT *context )\n{\n    CONTEXT context16;\n    DWORD argsize;\n\n    context16 = *context;\n\n    context16.SegFs = wine_get_fs();\n    context16.SegGs = wine_get_gs();\n    context16.Edi   = LOWORD(context->Ecx);\n    context16.SegCs = HIWORD(context->Eax);\n    context16.Eip   = LOWORD(context->Eax);\n    context16.Ebp   = OFFSETOF(getWOW32Reserved()) + FIELD_OFFSET(STACK16FRAME,bp);\n\n    argsize = HIWORD(context->Edx) * 4;\n\n    /* FIXME: hack for stupid USER32 CallbackGlueLS routine */\n    if (context->Edx == context->Eip)\n        argsize = 6 * 4;\n\n    /* Note: the first 32 bytes we copy are just garbage from the 32-bit stack, in order to reserve\n     *       the space. It is safe to do that since the register function prefix has reserved\n     *       a lot more space than that below context->Esp.\n     */\n    WOWCallback16Ex( 0, WCB16_REGS, argsize + 32, (LPBYTE)context->Esp - 32, (DWORD *)&context16 );\n    context->Eax = context16.Eax;\n\n    /* Clean up caller's stack frame */\n    context->Esp += LOBYTE(context16.Ebx);\n}\nDEFINE_REGS_ENTRYPOINT( Common32ThkLS )\n\n/***********************************************************************\n *\t\tOT_32ThkLSF\t(KERNEL32.40)\n *\n * YET Another 32->16 thunk. The difference to Common32ThkLS is that\n * argument processing is done on both the 32-bit and the 16-bit side:\n * The 32-bit side prepares arguments, copying them onto the stack.\n *\n * When this routine is called, the first word on the stack is the\n * number of argument bytes prepared by the 32-bit code, and EDX\n * contains the 16-bit target address.\n *\n * The called 16-bit routine is another relaycode, doing further\n * argument processing and then calling the real 16-bit target\n * whose address is stored at [bp-04].\n *\n * The call proceeds using a normal CallRegisterShortProc.\n * After return from the 16-bit relaycode, the arguments need\n * to be copied *back* to the 32-bit stack, since the 32-bit\n * relaycode processes output parameters.\n *\n * Note that we copy twice the number of arguments, since some of the\n * 16-bit relaycodes in SYSTHUNK.DLL directly access the original\n * arguments of the caller!\n *\n * (Note that this function seems only to be used for\n *  OLECLI32 -> OLECLI and OLESVR32 -> OLESVR thunking.)\n */\nvoid WINAPI __regs_OT_32ThkLSF( CONTEXT *context )\n{\n    CONTEXT context16;\n    DWORD argsize;\n\n    context16 = *context;\n\n    context16.SegFs = wine_get_fs();\n    context16.SegGs = wine_get_gs();\n    context16.SegCs = HIWORD(context->Edx);\n    context16.Eip   = LOWORD(context->Edx);\n    context16.Ebp   = OFFSETOF(getWOW32Reserved()) + FIELD_OFFSET(STACK16FRAME,bp);\n\n    argsize = 2 * *(WORD *)context->Esp + 2;\n\n    WOWCallback16Ex( 0, WCB16_REGS, argsize, (void *)context->Esp, (DWORD *)&context16 );\n    context->Eax = context16.Eax;\n    context->Edx = context16.Edx;\n\n    /* Copy modified buffers back to 32-bit stack */\n    memcpy( (LPBYTE)context->Esp,\n            (LPBYTE)CURRENT_STACK16 - argsize, argsize );\n\n    context->Esp +=   LOWORD(context16.Esp) -\n                        ( OFFSETOF(getWOW32Reserved()) - argsize );\n}\nDEFINE_REGS_ENTRYPOINT( OT_32ThkLSF )\n\n/***********************************************************************\n *\t\tThunkInitLSF\t\t(KERNEL32.41)\n * A thunk setup routine.\n * Expects a pointer to a preinitialized thunkbuffer in the first argument\n * looking like:\n *|\t00..03:\t\tunknown\t(pointer, check _41, _43, _46)\n *|\t04: EB1E\t\tjmp +0x20\n *|\n *|\t06..23:\t\tunknown (space for replacement code, check .90)\n *|\n *|\t24:>E800000000\t\tcall offset 29\n *|\t29:>58\t\t\tpop eax\t\t   ( target of call )\n *|\t2A: 2D25000000\t\tsub eax,0x00000025 ( now points to offset 4 )\n *|\t2F: BAxxxxxxxx\t\tmov edx,xxxxxxxx\n *|\t34: 68yyyyyyyy\t\tpush KERNEL32.90\n *|\t39: C3\t\t\tret\n *|\n *|\t3A: EB1E\t\tjmp +0x20\n *|\t3E ... 59:\tunknown (space for replacement code?)\n *|\t5A: E8xxxxxxxx\t\tcall <32bitoffset xxxxxxxx>\n *|\t5F: 5A\t\t\tpop edx\n *|\t60: 81EA25xxxxxx\tsub edx, 0x25xxxxxx\n *|\t66: 52\t\t\tpush edx\n *|\t67: 68xxxxxxxx\t\tpush xxxxxxxx\n *|\t6C: 68yyyyyyyy\t\tpush KERNEL32.89\n *|\t71: C3\t\t\tret\n *|\t72: end?\n * This function checks if the code is there, and replaces the yyyyyyyy entries\n * by the functionpointers.\n * The thunkbuf looks like:\n *\n *|\t00: DWORD\tlength\t\t? don't know exactly\n *|\t04: SEGPTR\tptr\t\t? where does it point to?\n * The segpointer ptr is written into the first DWORD of 'thunk'.\n * [ok probably]\n * RETURNS\n *\tunclear, pointer to win16 thkbuffer?\n */\nLPVOID WINAPI ThunkInitLSF(\n\tLPBYTE thunk,\t/* [in] win32 thunk */\n\tLPCSTR thkbuf,\t/* [in] thkbuffer name in win16 dll */\n\tDWORD len,\t/* [in] length of thkbuffer */\n\tLPCSTR dll16,\t/* [in] name of win16 dll */\n\tLPCSTR dll32\t/* [in] name of win32 dll */\n) {\n\tLPDWORD\t\taddr,addr2;\n\n\t/* FIXME: add checks for valid code ... */\n\t/* write pointers to kernel32.89 and kernel32.90 (+ordinal base of 1) */\n\t*(void **)(thunk+0x35) = QT_ThunkPrime;\n\t*(void **)(thunk+0x6D) = FT_PrologPrime;\n\n\tif (!(addr = _loadthunk( dll16, thkbuf, dll32, NULL, len )))\n\t\treturn 0;\n\n\taddr2 = MapSL(addr[1]);\n\tif (HIWORD(addr2))\n\t\t*(DWORD*)thunk = (DWORD)addr2;\n\n\treturn addr2;\n}\n\n/***********************************************************************\n *\t\tFT_PrologPrime\t\t\t(KERNEL32.89)\n *\n * This function is called from the relay code installed by\n * ThunkInitLSF. It replaces the location from where it was\n * called by a standard FT_Prolog call stub (which is 'primed'\n * by inserting the correct target table pointer).\n * Finally, it calls that stub.\n *\n * Input:  ECX    target number + flags (passed through to FT_Prolog)\n *        (ESP)   offset of location where target table pointer\n *                is stored, relative to the start of the relay code\n *        (ESP+4) pointer to start of relay code\n *                (this is where the FT_Prolog call stub gets written to)\n *\n * Note: The two DWORD arguments get popped off the stack.\n *\n */\nvoid WINAPI __regs_FT_PrologPrime( CONTEXT *context )\n{\n    DWORD  targetTableOffset;\n    LPBYTE relayCode;\n\n    /* Compensate for the fact that the Wine register relay code thought\n       we were being called, although we were in fact jumped to */\n    context->Esp -= 4;\n\n    /* Write FT_Prolog call stub */\n    targetTableOffset = stack32_pop(context);\n    relayCode = (LPBYTE)stack32_pop(context);\n    _write_ftprolog( relayCode, *(DWORD **)(relayCode+targetTableOffset) );\n\n    /* Jump to the call stub just created */\n    context->Eip = (DWORD)relayCode;\n}\n\n/***********************************************************************\n *\t\tQT_ThunkPrime\t\t\t(KERNEL32.90)\n *\n * This function corresponds to FT_PrologPrime, but installs a\n * call stub for QT_Thunk instead.\n *\n * Input: (EBP-4) target number (passed through to QT_Thunk)\n *         EDX    target table pointer location offset\n *         EAX    start of relay code\n *\n */\nvoid WINAPI __regs_QT_ThunkPrime( CONTEXT *context )\n{\n    DWORD  targetTableOffset;\n    LPBYTE relayCode;\n\n    /* Compensate for the fact that the Wine register relay code thought\n       we were being called, although we were in fact jumped to */\n    context->Esp -= 4;\n\n    /* Write QT_Thunk call stub */\n    targetTableOffset = context->Edx;\n    relayCode = (LPBYTE)context->Eax;\n    _write_qtthunk( relayCode, *(DWORD **)(relayCode+targetTableOffset) );\n\n    /* Jump to the call stub just created */\n    context->Eip = (DWORD)relayCode;\n}\n\n/***********************************************************************\n *\t\tThunkInitSL (KERNEL32.46)\n * Another thunkbuf link routine.\n * The start of the thunkbuf looks like this:\n * \t00: DWORD\tlength\n *\t04: SEGPTR\taddress for thunkbuffer pointer\n * [ok probably]\n *\n * RETURNS\n *  Nothing.\n */\nVOID WINAPI ThunkInitSL(\n\tLPBYTE thunk,\t\t/* [in] start of thunkbuffer */\n\tLPCSTR thkbuf,\t\t/* [in] name/ordinal of thunkbuffer in win16 dll */\n\tDWORD len,\t\t/* [in] length of thunkbuffer */\n\tLPCSTR dll16,\t\t/* [in] name of win16 dll containing the thkbuf */\n\tLPCSTR dll32\t\t/* [in] win32 dll. FIXME: strange, unused */\n) {\n\tLPDWORD\t\taddr;\n\n\tif (!(addr = _loadthunk( dll16, thkbuf, dll32, NULL, len )))\n\t\treturn;\n\n\t*(DWORD*)MapSL(addr[1]) = (DWORD)thunk;\n}\n\n/**********************************************************************\n *           SSInit\t\t(KERNEL.700)\n * RETURNS\n *\tTRUE for success.\n */\nBOOL WINAPI SSInit16(void)\n{\n    return TRUE;\n}\n\n/**********************************************************************\n *           SSOnBigStack\t(KERNEL32.87)\n * Check if thunking is initialized (ss selector set up etc.)\n * We do that differently, so just return TRUE.\n * [ok]\n * RETURNS\n *\tTRUE for success.\n */\nBOOL WINAPI SSOnBigStack(void)\n{\n    TRACE(\"Yes, thunking is initialized\\n\");\n    return TRUE;\n}\n\n/**********************************************************************\n *           SSConfirmSmallStack     (KERNEL.704)\n *\n * Abort if not on small stack.\n *\n * This must be a register routine as it has to preserve *all* registers.\n */\nvoid WINAPI SSConfirmSmallStack( CONTEXT *context )\n{\n    /* We are always on the small stack while in 16-bit code ... */\n}\n\n/**********************************************************************\n *           SSCall (KERNEL32.88)\n * One of the real thunking functions. This one seems to be for 32<->32\n * thunks. It should probably be capable of crossing processboundaries.\n *\n * And YES, I've seen nr=48 (somewhere in the Win95 32<->16 OLE coupling)\n * [ok]\n *\n * RETURNS\n *  Thunked function result.\n */\nDWORD WINAPIV SSCall(\n\tDWORD nr,\t/* [in] number of argument bytes */\n\tDWORD flags,\t/* [in] FIXME: flags ? */\n\tFARPROC fun,\t/* [in] function to call */\n\t...\t\t/* [in/out] arguments */\n) {\n    DWORD i,ret;\n    DWORD *args = ((DWORD *)&fun) + 1;\n\n    if(TRACE_ON(thunk))\n    {\n      DPRINTF(\"(%d,0x%08x,%p,[\",nr,flags,fun);\n      for (i=0;i<nr/4;i++)\n          DPRINTF(\"0x%08x,\",args[i]);\n      DPRINTF(\"])\\n\");\n    }\n    ret = call_entry_point( fun, nr / sizeof(DWORD), args );\n    TRACE(\" returning %d ...\\n\",ret);\n    return ret;\n}\n\n/**********************************************************************\n *           W32S_BackTo32                      (KERNEL32.51)\n */\nvoid WINAPI __regs_W32S_BackTo32( CONTEXT *context )\n{\n    LPDWORD stack = (LPDWORD)context->Esp;\n    FARPROC proc = (FARPROC)context->Eip;\n\n    context->Eax = call_entry_point( proc, 10, stack + 1 );\n    context->Eip = stack32_pop(context);\n}\nDEFINE_REGS_ENTRYPOINT( W32S_BackTo32 )\n\n/**********************************************************************\n *\t\t\tAllocSLCallback\t\t(KERNEL32.@)\n *\n * Allocate a 16->32 callback.\n *\n * NOTES\n * Win95 uses some structchains for callbacks. It allocates them\n * in blocks of 100 entries, size 32 bytes each, layout:\n * blockstart:\n *| \t0:\tPTR\tnextblockstart\n *|\t4:\tentry\t*first;\n *|\t8:\tWORD\tsel ( start points to blockstart)\n *|\tA:\tWORD\tunknown\n * 100xentry:\n *|\t00..17:\t\tCode\n *|\t18:\tPDB\t*owning_process;\n *|\t1C:\tPTR\tblockstart\n *\n * We ignore this for now. (Just a note for further developers)\n * FIXME: use this method, so we don't waste selectors...\n *\n * Following code is then generated by AllocSLCallback. The code is 16 bit, so\n * the 0x66 prefix switches from word->long registers.\n *\n *|\t665A\t\tpop\tedx\n *|\t6668x arg2 x \tpushl\t<arg2>\n *|\t6652\t\tpush\tedx\n *|\tEAx arg1 x\tjmpf\t<arg1>\n *\n * returns the startaddress of this thunk.\n *\n * Note, that they look very similar to the ones allocates by THUNK_Alloc.\n * RETURNS\n *\tA segmented pointer to the start of the thunk\n */\nDWORD WINAPI\nAllocSLCallback(\n\tDWORD finalizer,\t/* [in] Finalizer function */\n\tDWORD callback\t\t/* [in] Callback function */\n) {\n\tLPBYTE\tx,thunk = HeapAlloc( GetProcessHeap(), 0, 32 );\n\tWORD\tsel;\n\n\tx=thunk;\n\t*x++=0x66;*x++=0x5a;\t\t\t\t/* popl edx */\n\t*x++=0x66;*x++=0x68;*(DWORD*)x=finalizer;x+=4;\t/* pushl finalizer */\n\t*x++=0x66;*x++=0x52;\t\t\t\t/* pushl edx */\n\t*x++=0xea;*(DWORD*)x=callback;x+=4;\t\t/* jmpf callback */\n\n\t*(DWORD*)(thunk+18) = GetCurrentProcessId();\n\n\tsel = SELECTOR_AllocBlock( thunk, 32, WINE_LDT_FLAGS_CODE );\n\treturn (sel<<16)|0;\n}\n\n/**********************************************************************\n * \t\tFreeSLCallback\t\t(KERNEL32.@)\n * Frees the specified 16->32 callback\n *\n * RETURNS\n *  Nothing.\n */\nvoid WINAPI\nFreeSLCallback(\n\tDWORD x\t/* [in] 16 bit callback (segmented pointer?) */\n) {\n\tFIXME(\"(0x%08x): stub\\n\",x);\n}\n\n/**********************************************************************\n * \t\tAllocMappedBuffer\t(KERNEL32.38)\n *\n * This is an undocumented KERNEL32 function that\n * SMapLS's a GlobalAlloc'ed buffer.\n *\n * RETURNS\n *       EDI register: pointer to buffer\n *\n * NOTES\n *       The buffer is preceded by 8 bytes:\n *        ...\n *       edi+0   buffer\n *       edi-4   SEGPTR to buffer\n *       edi-8   some magic Win95 needs for SUnMapLS\n *               (we use it for the memory handle)\n *\n *       The SEGPTR is used by the caller!\n */\nvoid WINAPI __regs_AllocMappedBuffer(\n              CONTEXT *context /* [in] EDI register: size of buffer to allocate */\n) {\n    HGLOBAL handle = GlobalAlloc(0, context->Edi + 8);\n    DWORD *buffer = GlobalLock(handle);\n    DWORD ptr = 0;\n\n    if (buffer)\n        if (!(ptr = MapLS(buffer + 2)))\n        {\n            GlobalUnlock(handle);\n            GlobalFree(handle);\n        }\n\n    if (!ptr)\n        context->Eax = context->Edi = 0;\n    else\n    {\n        buffer[0] = (DWORD)handle;\n        buffer[1] = ptr;\n\n        context->Eax = ptr;\n        context->Edi = (DWORD)(buffer + 2);\n    }\n}\nDEFINE_REGS_ENTRYPOINT( AllocMappedBuffer )\n\n/**********************************************************************\n * \t\tFreeMappedBuffer\t(KERNEL32.39)\n *\n * Free a buffer allocated by AllocMappedBuffer\n *\n * RETURNS\n *  Nothing.\n */\nvoid WINAPI __regs_FreeMappedBuffer(\n              CONTEXT *context /* [in] EDI register: pointer to buffer */\n) {\n    if (context->Edi)\n    {\n        DWORD *buffer = (DWORD *)context->Edi - 2;\n\n        UnMapLS(buffer[1]);\n\n        GlobalUnlock((HGLOBAL)buffer[0]);\n        GlobalFree((HGLOBAL)buffer[0]);\n    }\n}\nDEFINE_REGS_ENTRYPOINT( FreeMappedBuffer )\n\n/**********************************************************************\n * \t\tGetTEBSelectorFS\t(KERNEL.475)\n * \tSet the 16-bit %fs to the 32-bit %fs (current TEB selector)\n */\nvoid WINAPI GetTEBSelectorFS16(void)\n{\n    CURRENT_STACK16->fs = wine_get_fs();\n}\n\n/**********************************************************************\n * \t\tIsPeFormat\t\t(KERNEL.431)\n *\n * Determine if a file is a PE format executable.\n *\n * RETURNS\n *  TRUE, if it is.\n *  FALSE if the file could not be opened or is not a PE file.\n *\n * NOTES\n *  If fn is given as NULL then the function expects hf16 to be valid.\n */\nBOOL16 WINAPI IsPeFormat16(\n\tLPSTR\tfn,\t/* [in] Filename to the executable */\n\tHFILE16 hf16)\t/* [in] An open file handle */\n{\n    BOOL ret = FALSE;\n    IMAGE_DOS_HEADER mzh;\n    OFSTRUCT ofs;\n    DWORD xmagic;\n\n    if (fn) hf16 = OpenFile16(fn,&ofs,OF_READ);\n    if (hf16 == HFILE_ERROR16) return FALSE;\n    _llseek16(hf16,0,SEEK_SET);\n    if (sizeof(mzh)!=_lread16(hf16,&mzh,sizeof(mzh))) goto done;\n    if (mzh.e_magic!=IMAGE_DOS_SIGNATURE) goto done;\n    _llseek16(hf16,mzh.e_lfanew,SEEK_SET);\n    if (sizeof(DWORD)!=_lread16(hf16,&xmagic,sizeof(DWORD))) goto done;\n    ret = (xmagic == IMAGE_NT_SIGNATURE);\n done:\n    _lclose16(hf16);\n    return ret;\n}\n\n\n/***********************************************************************\n *           K32Thk1632Prolog\t\t\t(KERNEL32.@)\n */\nvoid WINAPI __regs_K32Thk1632Prolog( CONTEXT *context )\n{\n   LPBYTE code = (LPBYTE)context->Eip - 5;\n\n   /* Arrrgh! SYSTHUNK.DLL just has to re-implement another method\n      of 16->32 thunks instead of using one of the standard methods!\n      This means that SYSTHUNK.DLL itself switches to a 32-bit stack,\n      and does a far call to the 32-bit code segment of OLECLI32/OLESVR32.\n      Unfortunately, our CallTo/CallFrom mechanism is therefore completely\n      bypassed, which means it will crash the next time the 32-bit OLE\n      code thunks down again to 16-bit (this *will* happen!).\n\n      The following hack tries to recognize this situation.\n      This is possible since the called stubs in OLECLI32/OLESVR32 all\n      look exactly the same:\n        00   E8xxxxxxxx    call K32Thk1632Prolog\n        05   FF55FC        call [ebp-04]\n        08   E8xxxxxxxx    call K32Thk1632Epilog\n        0D   66CB          retf\n\n      If we recognize this situation, we try to simulate the actions\n      of our CallTo/CallFrom mechanism by copying the 16-bit stack\n      to our 32-bit stack, creating a proper STACK16FRAME and\n      updating cur_stack. */\n\n   if (   code[5] == 0xFF && code[6] == 0x55 && code[7] == 0xFC\n       && code[13] == 0x66 && code[14] == 0xCB)\n   {\n      DWORD argSize = context->Ebp - context->Esp;\n      char *stack16 = (char *)context->Esp - 4;\n      STACK16FRAME *frame16 = (STACK16FRAME *)stack16 - 1;\n      STACK32FRAME *frame32 = getWOW32Reserved();\n      char *stack32 = (char *)frame32 - argSize;\n      WORD  stackSel  = SELECTOROF(frame32->frame16);\n      DWORD stackBase = GetSelectorBase(stackSel);\n\n      TRACE(\"before SYSTHUNK hack: EBP: %08x ESP: %08x cur_stack: %p\\n\",\n            context->Ebp, context->Esp, getWOW32Reserved());\n\n      memset(frame16, '\\0', sizeof(STACK16FRAME));\n      frame16->frame32 = frame32;\n      frame16->ebp = context->Ebp;\n\n      memcpy(stack32, stack16, argSize);\n\t  setWOW32Reserved((void *)MAKESEGPTR(stackSel, (DWORD)frame16 - stackBase));\n\n      context->Esp = (DWORD)stack32 + 4;\n      context->Ebp = context->Esp + argSize;\n\n      TRACE(\"after  SYSTHUNK hack: EBP: %08x ESP: %08x cur_stack: %p\\n\",\n            context->Ebp, context->Esp, getWOW32Reserved());\n   }\n\n    /* entry_point is never used again once the entry point has\n       been called.  Thus we re-use it to hold the Win16Lock count */\n   ReleaseThunkLock(&CURRENT_STACK16->entry_point);\n}\nDEFINE_REGS_ENTRYPOINT( K32Thk1632Prolog )\n\n/***********************************************************************\n *           K32Thk1632Epilog\t\t\t(KERNEL32.@)\n */\nvoid WINAPI __regs_K32Thk1632Epilog( CONTEXT *context )\n{\n   LPBYTE code = (LPBYTE)context->Eip - 13;\n\n   RestoreThunkLock(CURRENT_STACK16->entry_point);\n\n   /* We undo the SYSTHUNK hack if necessary. See K32Thk1632Prolog. */\n\n   if (   code[5] == 0xFF && code[6] == 0x55 && code[7] == 0xFC\n       && code[13] == 0x66 && code[14] == 0xCB)\n   {\n      STACK16FRAME *frame16 = MapSL((SEGPTR)getWOW32Reserved());\n      char *stack16 = (char *)(frame16 + 1);\n      DWORD argSize = frame16->ebp - (DWORD)stack16;\n      char *stack32 = (char *)frame16->frame32 - argSize;\n\n      DWORD nArgsPopped = context->Esp - (DWORD)stack32;\n\n      TRACE(\"before SYSTHUNK hack: EBP: %08x ESP: %08x cur_stack: %p\\n\",\n            context->Ebp, context->Esp, getWOW32Reserved());\n\n      setWOW32Reserved(frame16->frame32);\n\n      context->Esp = (DWORD)stack16 + nArgsPopped;\n      context->Ebp = frame16->ebp;\n\n      TRACE(\"after  SYSTHUNK hack: EBP: %08x ESP: %08x cur_stack: %p\\n\",\n            context->Ebp, context->Esp, getWOW32Reserved());\n   }\n}\nDEFINE_REGS_ENTRYPOINT( K32Thk1632Epilog )\n\n/*********************************************************************\n *                   PK16FNF [KERNEL32.91]\n *\n *  This routine fills in the supplied 13-byte (8.3 plus terminator)\n *  string buffer with the 8.3 filename of a recently loaded 16-bit\n *  module.  It is unknown exactly what modules trigger this\n *  mechanism or what purpose this serves.  Win98 Explorer (and\n *  probably also Win95 with IE 4 shell integration) calls this\n *  several times during initialization.\n *\n *  FIXME: find out what this really does and make it work.\n */\nvoid WINAPI PK16FNF(LPSTR strPtr)\n{\n       FIXME(\"(%p): stub\\n\", strPtr);\n\n       /* fill in a fake filename that'll be easy to recognize */\n       strcpy(strPtr, \"WINESTUB.FIX\");\n}\n\n/***********************************************************************\n * 16->32 Flat Thunk routines:\n */\n\n/***********************************************************************\n *              ThunkConnect16          (KERNEL.651)\n * Connects a 32bit and a 16bit thunkbuffer.\n */\nUINT WINAPI ThunkConnect16(\n        LPSTR module16,              /* [in] name of win16 dll */\n        LPSTR module32,              /* [in] name of win32 dll */\n        HINSTANCE16 hInst16,         /* [in] hInst of win16 dll */\n        DWORD dwReason,              /* [in] initialisation argument */\n        struct ThunkDataCommon *TD,  /* [in/out] thunkbuffer */\n        LPSTR thunkfun32,            /* [in] win32 thunkfunction */\n        WORD cs                      /* [in] CS of win16 dll */\n) {\n    BOOL directionSL;\n\n    if (!strncmp(TD->magic, \"SL01\", 4))\n    {\n        directionSL = TRUE;\n\n        TRACE(\"SL01 thunk %s (%p) -> %s (%s), Reason: %d\\n\",\n              module16, TD, module32, thunkfun32, dwReason);\n    }\n    else if (!strncmp(TD->magic, \"LS01\", 4))\n    {\n        directionSL = FALSE;\n\n        TRACE(\"LS01 thunk %s (%p) <- %s (%s), Reason: %d\\n\",\n              module16, TD, module32, thunkfun32, dwReason);\n    }\n    else\n    {\n        ERR(\"Invalid magic %c%c%c%c\\n\",\n            TD->magic[0], TD->magic[1], TD->magic[2], TD->magic[3]);\n        return 0;\n    }\n\n    switch (dwReason)\n    {\n        case DLL_PROCESS_ATTACH:\n            if (directionSL)\n            {\n                struct ThunkDataSL16 *SL16 = (struct ThunkDataSL16 *)TD;\n                struct ThunkDataSL   *SL   = SL16->fpData;\n\n                if (SL == NULL)\n                {\n                    SL = HeapAlloc(GetProcessHeap(), 0, sizeof(*SL));\n\n                    SL->common   = SL16->common;\n                    SL->flags1   = SL16->flags1;\n                    SL->flags2   = SL16->flags2;\n\n                    SL->apiDB    = MapSL(SL16->apiDatabase);\n                    SL->targetDB = NULL;\n\n                    lstrcpynA(SL->pszDll16, module16, 255);\n                    lstrcpynA(SL->pszDll32, module32, 255);\n\n                    /* We should create a SEGPTR to the ThunkDataSL,\n                       but since the contents are not in the original format,\n                       any access to this by 16-bit code would crash anyway. */\n                    SL16->spData = 0;\n                    SL16->fpData = SL;\n                }\n\n\n                if (SL->flags2 & 0x80000000)\n                {\n                    TRACE(\"Preloading 32-bit library\\n\");\n                    LoadLibraryA(module32);\n                }\n            }\n            else\n            {\n                /* nothing to do */\n            }\n            break;\n\n        case DLL_PROCESS_DETACH:\n            /* FIXME: cleanup */\n            break;\n    }\n\n    return 1;\n}\n\n\n/***********************************************************************\n *           C16ThkSL                           (KERNEL.630)\n */\n\nvoid WINAPI C16ThkSL(CONTEXT *context)\n{\n    LPBYTE stub = MapSL(context->Eax), x = stub;\n    WORD cs = wine_get_cs();\n    WORD ds = wine_get_ds();\n\n    /* We produce the following code:\n     *\n     *   mov ax, __FLATDS\n     *   mov es, ax\n     *   movzx ecx, cx\n     *   mov edx, es:[ecx + $EDX]\n     *   push bp\n     *   push edx\n     *   push dx\n     *   push edx\n     *   call __FLATCS:__wine_call_from_16_thunk\n     */\n\n    *x++ = 0xB8; *(WORD *)x = ds; x += sizeof(WORD);\n    *x++ = 0x8E; *x++ = 0xC0;\n    *x++ = 0x66; *x++ = 0x0F; *x++ = 0xB7; *x++ = 0xC9;\n    *x++ = 0x67; *x++ = 0x66; *x++ = 0x26; *x++ = 0x8B;\n                 *x++ = 0x91; *(DWORD *)x = context->Edx; x += sizeof(DWORD);\n\n    *x++ = 0x55;\n    *x++ = 0x66; *x++ = 0x52;\n    *x++ = 0x52;\n    *x++ = 0x66; *x++ = 0x52;\n    *x++ = 0x66; *x++ = 0x9A;\n    *(void **)x = __wine_call_from_16_thunk; x += sizeof(void *);\n    *(WORD *)x = cs; x += sizeof(WORD);\n\n    /* Jump to the stub code just created */\n    context->Eip = LOWORD(context->Eax);\n    context->SegCs  = HIWORD(context->Eax);\n\n    /* Since C16ThkSL got called by a jmp, we need to leave the\n       original return address on the stack */\n    context->Esp -= 4;\n}\n\n/***********************************************************************\n *           C16ThkSL01                         (KERNEL.631)\n */\n\nvoid WINAPI C16ThkSL01(CONTEXT *context)\n{\n    LPBYTE stub = MapSL(context->Eax), x = stub;\n\n    if (stub)\n    {\n        struct ThunkDataSL16 *SL16 = MapSL(context->Edx);\n        struct ThunkDataSL *td = SL16->fpData;\n\n        DWORD procAddress = (DWORD)GetProcAddress16(GetModuleHandle16(\"KERNEL\"), (LPCSTR)631);\n        WORD cs = wine_get_cs();\n\n        if (!td)\n        {\n            ERR(\"ThunkConnect16 was not called!\\n\");\n            return;\n        }\n\n        TRACE(\"Creating stub for ThunkDataSL %p\\n\", td);\n\n\n        /* We produce the following code:\n         *\n         *   xor eax, eax\n         *   mov edx, $td\n         *   call C16ThkSL01\n         *   push bp\n         *   push edx\n         *   push dx\n         *   push edx\n         *   call __FLATCS:__wine_call_from_16_thunk\n         */\n\n        *x++ = 0x66; *x++ = 0x33; *x++ = 0xC0;\n        *x++ = 0x66; *x++ = 0xBA; *(void **)x = td; x += sizeof(void *);\n        *x++ = 0x9A; *(DWORD *)x = procAddress; x += sizeof(DWORD);\n\n        *x++ = 0x55;\n        *x++ = 0x66; *x++ = 0x52;\n        *x++ = 0x52;\n        *x++ = 0x66; *x++ = 0x52;\n        *x++ = 0x66; *x++ = 0x9A;\n        *(void **)x = __wine_call_from_16_thunk; x += sizeof(void *);\n        *(WORD *)x = cs; x += sizeof(WORD);\n\n        /* Jump to the stub code just created */\n        context->Eip = LOWORD(context->Eax);\n        context->SegCs  = HIWORD(context->Eax);\n\n        /* Since C16ThkSL01 got called by a jmp, we need to leave the\n           original return address on the stack */\n        context->Esp -= 4;\n    }\n    else\n    {\n        struct ThunkDataSL *td = (struct ThunkDataSL *)context->Edx;\n        DWORD targetNr = LOWORD(context->Ecx) / 4;\n        struct SLTargetDB *tdb;\n\n        TRACE(\"Process %08x calling target %d of ThunkDataSL %p\\n\",\n              GetCurrentProcessId(), targetNr, td);\n\n        for (tdb = td->targetDB; tdb; tdb = tdb->next)\n            if (tdb->process == GetCurrentProcessId())\n                break;\n\n        if (!tdb)\n        {\n            TRACE(\"Loading 32-bit library %s\\n\", td->pszDll32);\n            LoadLibraryA(td->pszDll32);\n\n            for (tdb = td->targetDB; tdb; tdb = tdb->next)\n                if (tdb->process == GetCurrentProcessId())\n                    break;\n        }\n\n        if (tdb)\n        {\n            context->Edx = tdb->targetTable[targetNr];\n\n            TRACE(\"Call target is %08x\\n\", context->Edx);\n        }\n        else\n        {\n            WORD *stack = MapSL( MAKESEGPTR(context->SegSs, LOWORD(context->Esp)) );\n            context->Edx = (context->Edx & ~0xffff) | HIWORD(td->apiDB[targetNr].errorReturnValue);\n            context->Eax = (context->Eax & ~0xffff) | LOWORD(td->apiDB[targetNr].errorReturnValue);\n            context->Eip = stack[2];\n            context->SegCs  = stack[3];\n            context->Esp += td->apiDB[targetNr].nrArgBytes + 4;\n\n            ERR(\"Process %08x did not ThunkConnect32 %s to %s\\n\",\n                GetCurrentProcessId(), td->pszDll32, td->pszDll16);\n        }\n    }\n}\n\n\n/***********************************************************************\n * 16<->32 Thunklet/Callback API:\n */\n\n#include \"pshpack1.h\"\ntypedef struct _THUNKLET\n{\n    BYTE        prefix_target;\n    BYTE        pushl_target;\n    DWORD       target;\n\n    BYTE        prefix_relay;\n    BYTE        pushl_relay;\n    DWORD       relay;\n\n    BYTE        jmp_glue;\n    DWORD       glue;\n\n    BYTE        type;\n    HINSTANCE16 owner;\n    struct _THUNKLET *next;\n} THUNKLET;\n#include \"poppack.h\"\n\n#define THUNKLET_TYPE_LS  1\n#define THUNKLET_TYPE_SL  2\n\nstatic HANDLE  ThunkletHeap = 0;\nstatic WORD ThunkletCodeSel;\nstatic THUNKLET *ThunkletAnchor = NULL;\n\nstatic FARPROC ThunkletSysthunkGlueLS = 0;\nstatic SEGPTR    ThunkletSysthunkGlueSL = 0;\n\nstatic FARPROC ThunkletCallbackGlueLS = 0;\nstatic SEGPTR    ThunkletCallbackGlueSL = 0;\n\n\n/* map a thunk allocated on ThunkletHeap to a 16-bit pointer */\nstatic inline SEGPTR get_segptr( void *thunk )\n{\n    if (!thunk) return 0;\n    return MAKESEGPTR( ThunkletCodeSel, (char *)thunk - (char *)ThunkletHeap );\n}\n\n/***********************************************************************\n *           THUNK_Init\n */\nstatic BOOL THUNK_Init(void)\n{\n    LPBYTE thunk;\n\n    ThunkletHeap = HeapCreate( HEAP_CREATE_ENABLE_EXECUTE, 0x10000, 0x10000 );\n    if (!ThunkletHeap) return FALSE;\n\n    ThunkletCodeSel = SELECTOR_AllocBlock( ThunkletHeap, 0x10000, WINE_LDT_FLAGS_CODE );\n\n    thunk = HeapAlloc( ThunkletHeap, 0, 5 );\n    if (!thunk) return FALSE;\n\n    ThunkletSysthunkGlueLS = (FARPROC)thunk;\n    *thunk++ = 0x58;                             /* popl eax */\n    *thunk++ = 0xC3;                             /* ret      */\n\n    ThunkletSysthunkGlueSL = get_segptr( thunk );\n    *thunk++ = 0x66; *thunk++ = 0x58;            /* popl eax */\n    *thunk++ = 0xCB;                             /* lret     */\n\n    return TRUE;\n}\n\n/***********************************************************************\n *     SetThunkletCallbackGlue             (KERNEL.560)\n */\nvoid WINAPI SetThunkletCallbackGlue16( FARPROC glueLS, SEGPTR glueSL )\n{\n    ThunkletCallbackGlueLS = glueLS;\n    ThunkletCallbackGlueSL = glueSL;\n}\n\n\n/***********************************************************************\n *     THUNK_FindThunklet\n */\nstatic THUNKLET *THUNK_FindThunklet( DWORD target, DWORD relay,\n                                     DWORD glue, BYTE type )\n{\n    THUNKLET *thunk;\n\n    for (thunk = ThunkletAnchor; thunk; thunk = thunk->next)\n        if (    thunk->type   == type\n             && thunk->target == target\n             && thunk->relay  == relay\n             && ( type == THUNKLET_TYPE_LS ?\n                    ( thunk->glue == glue - (DWORD)&thunk->type )\n                  : ( thunk->glue == glue ) ) )\n            return thunk;\n\n     return NULL;\n}\n\n/***********************************************************************\n *     THUNK_AllocLSThunklet\n */\nstatic FARPROC THUNK_AllocLSThunklet( SEGPTR target, DWORD relay,\n                                      FARPROC glue, HTASK16 owner )\n{\n    THUNKLET *thunk = THUNK_FindThunklet( (DWORD)target, relay, (DWORD)glue,\n                                          THUNKLET_TYPE_LS );\n    if (!thunk)\n    {\n        TDB *pTask = GlobalLock16( owner );\n\n        if (!ThunkletHeap) THUNK_Init();\n        if ( !(thunk = HeapAlloc( ThunkletHeap, 0, sizeof(THUNKLET) )) )\n            return 0;\n\n        thunk->prefix_target = thunk->prefix_relay = 0x90;\n        thunk->pushl_target  = thunk->pushl_relay  = 0x68;\n        thunk->jmp_glue = 0xE9;\n\n        thunk->target  = (DWORD)target;\n        thunk->relay   = relay;\n        thunk->glue    = (DWORD)glue - (DWORD)&thunk->type;\n\n        thunk->type    = THUNKLET_TYPE_LS;\n        thunk->owner   = pTask? pTask->hInstance : 0;\n\n        thunk->next    = ThunkletAnchor;\n        ThunkletAnchor = thunk;\n    }\n\n    return (FARPROC)thunk;\n}\n\n/***********************************************************************\n *     THUNK_AllocSLThunklet\n */\nstatic SEGPTR THUNK_AllocSLThunklet( FARPROC target, DWORD relay,\n                                     SEGPTR glue, HTASK16 owner )\n{\n    THUNKLET *thunk = THUNK_FindThunklet( (DWORD)target, relay, (DWORD)glue,\n                                          THUNKLET_TYPE_SL );\n    if (!thunk)\n    {\n        TDB *pTask = GlobalLock16( owner );\n\n        if (!ThunkletHeap) THUNK_Init();\n        if ( !(thunk = HeapAlloc( ThunkletHeap, 0, sizeof(THUNKLET) )) )\n            return 0;\n\n        thunk->prefix_target = thunk->prefix_relay = 0x66;\n        thunk->pushl_target  = thunk->pushl_relay  = 0x68;\n        thunk->jmp_glue = 0xEA;\n\n        thunk->target  = (DWORD)target;\n        thunk->relay   = relay;\n        thunk->glue    = (DWORD)glue;\n\n        thunk->type    = THUNKLET_TYPE_SL;\n        thunk->owner   = pTask? pTask->hInstance : 0;\n\n        thunk->next    = ThunkletAnchor;\n        ThunkletAnchor = thunk;\n    }\n\n    return get_segptr( thunk );\n}\n\n/**********************************************************************\n *     IsLSThunklet\n */\nstatic BOOL16 IsLSThunklet( THUNKLET *thunk )\n{\n    return    thunk->prefix_target == 0x90 && thunk->pushl_target == 0x68\n           && thunk->prefix_relay  == 0x90 && thunk->pushl_relay  == 0x68\n           && thunk->jmp_glue == 0xE9 && thunk->type == THUNKLET_TYPE_LS;\n}\n\n/**********************************************************************\n *     IsSLThunklet                        (KERNEL.612)\n */\nBOOL16 WINAPI IsSLThunklet16( THUNKLET *thunk )\n{\n    return    thunk->prefix_target == 0x66 && thunk->pushl_target == 0x68\n           && thunk->prefix_relay  == 0x66 && thunk->pushl_relay  == 0x68\n           && thunk->jmp_glue == 0xEA && thunk->type == THUNKLET_TYPE_SL;\n}\n\n\n\n/***********************************************************************\n *     AllocLSThunkletSysthunk             (KERNEL.607)\n */\nFARPROC WINAPI AllocLSThunkletSysthunk16( SEGPTR target,\n                                          FARPROC relay, DWORD dummy )\n{\n    if (!ThunkletSysthunkGlueLS) THUNK_Init();\n    return THUNK_AllocLSThunklet( (SEGPTR)relay, (DWORD)target,\n                                  ThunkletSysthunkGlueLS, GetCurrentTask() );\n}\n\n/***********************************************************************\n *     AllocSLThunkletSysthunk             (KERNEL.608)\n */\nSEGPTR WINAPI AllocSLThunkletSysthunk16( FARPROC target,\n                                       SEGPTR relay, DWORD dummy )\n{\n    if (!ThunkletSysthunkGlueSL) THUNK_Init();\n    return THUNK_AllocSLThunklet( (FARPROC)relay, (DWORD)target,\n                                  ThunkletSysthunkGlueSL, GetCurrentTask() );\n}\n\n\n/***********************************************************************\n *     AllocLSThunkletCallbackEx           (KERNEL.567)\n */\nFARPROC WINAPI AllocLSThunkletCallbackEx16( SEGPTR target,\n                                            DWORD relay, HTASK16 task )\n{\n    THUNKLET *thunk = MapSL( target );\n    if ( !thunk ) return NULL;\n\n    if (   IsSLThunklet16( thunk ) && thunk->relay == relay\n        && thunk->glue == (DWORD)ThunkletCallbackGlueSL )\n        return (FARPROC)thunk->target;\n\n    return THUNK_AllocLSThunklet( target, relay,\n                                  ThunkletCallbackGlueLS, task );\n}\n\n/***********************************************************************\n *     AllocSLThunkletCallbackEx           (KERNEL.568)\n */\nSEGPTR WINAPI AllocSLThunkletCallbackEx16( FARPROC target,\n                                         DWORD relay, HTASK16 task )\n{\n    THUNKLET *thunk = (THUNKLET *)target;\n    if ( !thunk ) return 0;\n\n    if (   IsLSThunklet( thunk ) && thunk->relay == relay\n        && thunk->glue == (DWORD)ThunkletCallbackGlueLS - (DWORD)&thunk->type )\n        return (SEGPTR)thunk->target;\n\n    return THUNK_AllocSLThunklet( target, relay,\n                                  ThunkletCallbackGlueSL, task );\n}\n\n/***********************************************************************\n *     AllocLSThunkletCallback             (KERNEL.561)\n *     AllocLSThunkletCallback_dup         (KERNEL.606)\n */\nFARPROC WINAPI AllocLSThunkletCallback16( SEGPTR target, DWORD relay )\n{\n    return AllocLSThunkletCallbackEx16( target, relay, GetCurrentTask() );\n}\n\n/***********************************************************************\n *     AllocSLThunkletCallback             (KERNEL.562)\n *     AllocSLThunkletCallback_dup         (KERNEL.605)\n */\nSEGPTR WINAPI AllocSLThunkletCallback16( FARPROC target, DWORD relay )\n{\n    return AllocSLThunkletCallbackEx16( target, relay, GetCurrentTask() );\n}\n\n/***********************************************************************\n *     FindLSThunkletCallback              (KERNEL.563)\n *     FindLSThunkletCallback_dup          (KERNEL.609)\n */\nFARPROC WINAPI FindLSThunkletCallback( SEGPTR target, DWORD relay )\n{\n    THUNKLET *thunk = MapSL( target );\n    if (   thunk && IsSLThunklet16( thunk ) && thunk->relay == relay\n        && thunk->glue == (DWORD)ThunkletCallbackGlueSL )\n        return (FARPROC)thunk->target;\n\n    thunk = THUNK_FindThunklet( (DWORD)target, relay,\n                                (DWORD)ThunkletCallbackGlueLS,\n                                THUNKLET_TYPE_LS );\n    return (FARPROC)thunk;\n}\n\n/***********************************************************************\n *     FindSLThunkletCallback              (KERNEL.564)\n *     FindSLThunkletCallback_dup          (KERNEL.610)\n */\nSEGPTR WINAPI FindSLThunkletCallback( FARPROC target, DWORD relay )\n{\n    THUNKLET *thunk = (THUNKLET *)target;\n    if (   thunk && IsLSThunklet( thunk ) && thunk->relay == relay\n        && thunk->glue == (DWORD)ThunkletCallbackGlueLS - (DWORD)&thunk->type )\n        return (SEGPTR)thunk->target;\n\n    thunk = THUNK_FindThunklet( (DWORD)target, relay,\n                                (DWORD)ThunkletCallbackGlueSL,\n                                THUNKLET_TYPE_SL );\n    return get_segptr( thunk );\n}\n\n\n/***********************************************************************\n *     FreeThunklet            (KERNEL.611)\n */\nBOOL16 WINAPI FreeThunklet16( DWORD unused1, DWORD unused2 )\n{\n    return FALSE;\n}\n\n\n/***********************************************************************\n * Callback Client API\n */\n\n#define N_CBC_FIXED    20\n#define N_CBC_VARIABLE 10\n#define N_CBC_TOTAL    (N_CBC_FIXED + N_CBC_VARIABLE)\n\nstatic SEGPTR CBClientRelay16[ N_CBC_TOTAL ];\nstatic FARPROC *CBClientRelay32[ N_CBC_TOTAL ];\n\n/***********************************************************************\n *     RegisterCBClient                    (KERNEL.619)\n */\nINT16 WINAPI RegisterCBClient16( INT16 wCBCId,\n                                 SEGPTR relay16, FARPROC *relay32 )\n{\n    /* Search for free Callback ID */\n    if ( wCBCId == -1 )\n        for ( wCBCId = N_CBC_FIXED; wCBCId < N_CBC_TOTAL; wCBCId++ )\n            if ( !CBClientRelay16[ wCBCId ] )\n                break;\n\n    /* Register Callback ID */\n    if ( wCBCId > 0 && wCBCId < N_CBC_TOTAL )\n    {\n        CBClientRelay16[ wCBCId ] = relay16;\n        CBClientRelay32[ wCBCId ] = relay32;\n    }\n    else\n        wCBCId = 0;\n\n    return wCBCId;\n}\n\n/***********************************************************************\n *     UnRegisterCBClient                  (KERNEL.622)\n */\nINT16 WINAPI UnRegisterCBClient16( INT16 wCBCId,\n                                   SEGPTR relay16, FARPROC *relay32 )\n{\n    if (    wCBCId >= N_CBC_FIXED && wCBCId < N_CBC_TOTAL\n         && CBClientRelay16[ wCBCId ] == relay16\n         && CBClientRelay32[ wCBCId ] == relay32 )\n    {\n        CBClientRelay16[ wCBCId ] = 0;\n        CBClientRelay32[ wCBCId ] = 0;\n    }\n    else\n        wCBCId = 0;\n\n    return wCBCId;\n}\n\n\n/***********************************************************************\n *     InitCBClient                        (KERNEL.623)\n */\nvoid WINAPI InitCBClient16( FARPROC glueLS )\n{\n    HMODULE16 kernel = GetModuleHandle16( \"KERNEL\" );\n    SEGPTR glueSL = (SEGPTR)GetProcAddress16( kernel, (LPCSTR)604 );\n\n    SetThunkletCallbackGlue16( glueLS, glueSL );\n}\n\n/***********************************************************************\n *     CBClientGlueSL                      (KERNEL.604)\n */\nvoid WINAPI CBClientGlueSL( CONTEXT *context )\n{\n    /* Create stack frame */\n    SEGPTR stackSeg = stack16_push( 12 );\n    LPWORD stackLin = MapSL( stackSeg );\n    SEGPTR glue, *glueTab;\n\n    stackLin[3] = (WORD)context->Ebp;\n    stackLin[2] = (WORD)context->Esi;\n    stackLin[1] = (WORD)context->Edi;\n    stackLin[0] = (WORD)context->SegDs;\n\n    context->Ebp = OFFSETOF( stackSeg ) + 6;\n    context->Esp = OFFSETOF( stackSeg ) - 4;\n    context->SegGs = 0;\n\n    /* Jump to 16-bit relay code */\n    glueTab = MapSL( CBClientRelay16[ stackLin[5] ] );\n    glue = glueTab[ stackLin[4] ];\n    context->SegCs = SELECTOROF( glue );\n    context->Eip   = OFFSETOF  ( glue );\n}\n\n/***********************************************************************\n *     CBClientThunkSL                      (KERNEL.620)\n */\nextern DWORD CALL32_CBClient( FARPROC proc, LPWORD args, WORD *stackLin, DWORD *esi );\nvoid WINAPI CBClientThunkSL( CONTEXT *context )\n{\n    /* Call 32-bit relay code */\n\n    LPWORD args = MapSL( MAKESEGPTR( context->SegSs, LOWORD(context->Ebp) ) );\n    FARPROC proc = CBClientRelay32[ args[2] ][ args[1] ];\n\n    /* fill temporary area for the asm code (see comments in winebuild) */\n    SEGPTR stack = stack16_push( 12 );\n    LPWORD stackLin = MapSL(stack);\n    /* stackLin[0] and stackLin[1] reserved for the 32-bit stack ptr */\n    stackLin[2] = wine_get_ss();\n    stackLin[3] = 0;\n    stackLin[4] = OFFSETOF(stack) + 12;\n    stackLin[5] = SELECTOROF(stack);\n    stackLin[6] = OFFSETOF(CALL32_CBClientEx_RetAddr);  /* overwrite return address */\n    stackLin[7] = SELECTOROF(CALL32_CBClientEx_RetAddr);\n    context->Eax = CALL32_CBClient( proc, args, stackLin + 4, &context->Esi );\n    stack16_pop( 12 );\n}\n\n/***********************************************************************\n *     CBClientThunkSLEx                    (KERNEL.621)\n */\nextern DWORD CALL32_CBClientEx( FARPROC proc, LPWORD args, WORD *stackLin, DWORD *esi, INT *nArgs );\nvoid WINAPI CBClientThunkSLEx( CONTEXT *context )\n{\n    /* Call 32-bit relay code */\n\n    LPWORD args = MapSL( MAKESEGPTR( context->SegSs, LOWORD(context->Ebp) ) );\n    FARPROC proc = CBClientRelay32[ args[2] ][ args[1] ];\n    INT nArgs;\n    LPWORD stackLin;\n\n    /* fill temporary area for the asm code (see comments in winebuild) */\n    SEGPTR stack = stack16_push( 24 );\n    stackLin = MapSL(stack);\n    stackLin[0] = OFFSETOF(stack) + 4;\n    stackLin[1] = SELECTOROF(stack);\n    stackLin[2] = wine_get_ds();\n    stackLin[5] = OFFSETOF(stack) + 24;\n    /* stackLin[6] and stackLin[7] reserved for the 32-bit stack ptr */\n    stackLin[8] = wine_get_ss();\n    stackLin[9] = 0;\n    stackLin[10] = OFFSETOF(CALL32_CBClientEx_RetAddr);\n    stackLin[11] = SELECTOROF(CALL32_CBClientEx_RetAddr);\n\n    context->Eax = CALL32_CBClientEx( proc, args, stackLin, &context->Esi, &nArgs );\n    stack16_pop( 24 );\n\n    /* Restore registers saved by CBClientGlueSL */\n    stackLin = (LPWORD)((LPBYTE)CURRENT_STACK16 + sizeof(STACK16FRAME) - 4);\n    context->Ebp = (context->Ebp & ~0xffff) | stackLin[3];\n    context->Esi = (context->Esi & ~0xffff) | stackLin[2];\n    context->Edi = (context->Edi & ~0xffff) | stackLin[1];\n    context->SegDs = stackLin[0];\n    context->Esp += 16+nArgs;\n\n    /* Return to caller of CBClient thunklet */\n    context->SegCs = stackLin[9];\n    context->Eip   = stackLin[8];\n}\n\n\n/***********************************************************************\n *           Get16DLLAddress       (KERNEL32.@)\n *\n * This function is used by a Win32s DLL if it wants to call a Win16 function.\n * A 16:16 segmented pointer to the function is returned.\n * Written without any docu.\n */\nSEGPTR WINAPI Get16DLLAddress(HMODULE16 handle, LPSTR func_name)\n{\n    static WORD code_sel32;\n    FARPROC16 proc_16;\n    LPBYTE thunk;\n\n    if (!code_sel32)\n    {\n        if (!ThunkletHeap) THUNK_Init();\n        code_sel32 = SELECTOR_AllocBlock( ThunkletHeap, 0x10000,\n                                          WINE_LDT_FLAGS_CODE | WINE_LDT_FLAGS_32BIT );\n        if (!code_sel32) return 0;\n    }\n    if (!(thunk = HeapAlloc( ThunkletHeap, 0, 32 ))) return 0;\n\n    if (!handle) handle = GetModuleHandle16(\"WIN32S16\");\n    proc_16 = GetProcAddress16(handle, func_name);\n\n    /* movl proc_16, $edx */\n    *thunk++ = 0xba;\n    *(FARPROC16 *)thunk = proc_16;\n    thunk += sizeof(FARPROC16);\n\n     /* jmpl QT_Thunk */\n    *thunk++ = 0xea;\n    *(void **)thunk = QT_Thunk;\n    thunk += sizeof(FARPROC16);\n    *(WORD *)thunk = wine_get_cs();\n\n    return MAKESEGPTR( code_sel32, (char *)thunk - (char *)ThunkletHeap );\n}\n\n\n/***********************************************************************\n *\t\tGetWin16DOSEnv\t\t\t(KERNEL32.34)\n * Returns some internal value.... probably the default environment database?\n */\nDWORD WINAPI GetWin16DOSEnv(void)\n{\n\tFIXME(\"stub, returning 0\\n\");\n\treturn 0;\n}\n\n/**********************************************************************\n *           GetPK16SysVar    (KERNEL32.92)\n */\nLPVOID WINAPI GetPK16SysVar(void)\n{\n    static BYTE PK16SysVar[128];\n\n    FIXME(\"()\\n\");\n    return PK16SysVar;\n}\n\n/**********************************************************************\n *           CommonUnimpStub    (KERNEL32.17)\n */\nint WINAPI DECLSPEC_HIDDEN __regs_CommonUnimpStub( const char *name, int type )\n{\n    FIXME(\"generic stub %s\\n\", debugstr_a(name));\n\n    switch (type)\n    {\n    case 15:  return -1;\n    case 14:  return ERROR_CALL_NOT_IMPLEMENTED;\n    case 13:  return ERROR_NOT_SUPPORTED;\n    case 1:   return 1;\n    default:  return 0;\n    }\n}\n__ASM_STDCALL_FUNC( CommonUnimpStub, 0,\n                    \"pushl %ecx\\n\\t\"\n                    __ASM_CFI(\".cfi_adjust_cfa_offset 4\\n\\t\")\n                    \"shrl $4,%ecx\\n\\t\"\n                    \"andl $0xf,%ecx\\n\\t\"\n                    \"pushl %ecx\\n\\t\"\n                    __ASM_CFI(\".cfi_adjust_cfa_offset 4\\n\\t\")\n                    \"pushl %eax\\n\\t\"\n                    __ASM_CFI(\".cfi_adjust_cfa_offset 4\\n\\t\")\n                    \"call \" __ASM_NAME(\"__regs_CommonUnimpStub\") __ASM_STDCALL(8) \"\\n\\t\"\n                    __ASM_CFI(\".cfi_adjust_cfa_offset -8\\n\\t\")\n                    \"popl %ecx\\n\\t\"\n                    __ASM_CFI(\".cfi_adjust_cfa_offset -4\\n\\t\")\n                    \"andl $0xf,%ecx\\n\\t\"\n                    \"movl (%esp),%edx\\n\\t\"\n                    \"leal (%esp,%ecx,4),%esp\\n\\t\"\n                    \"movl %edx,(%esp)\\n\\t\"\n                    \"ret\" )\n\n/**********************************************************************\n *           HouseCleanLogicallyDeadHandles    (KERNEL32.33)\n */\nvoid WINAPI HouseCleanLogicallyDeadHandles(void)\n{\n    /* Whatever this is supposed to do, our handles probably\n       don't need it :-) */\n}\n\n/**********************************************************************\n *\t\t@ (KERNEL32.100)\n */\nBOOL WINAPI _KERNEL32_100(HANDLE threadid,DWORD exitcode,DWORD x)\n{\n\tFIXME(\"(%p,%d,0x%08x): stub\\n\",threadid,exitcode,x);\n\treturn TRUE;\n}\n\n/**********************************************************************\n *\t\t@ (KERNEL32.99)\n *\n * Checks whether the clock has to be switched from daylight\n * savings time to standard time or vice versa.\n *\n */\nDWORD WINAPI _KERNEL32_99(DWORD x)\n{\n\tFIXME(\"(0x%08x): stub\\n\",x);\n\treturn 1;\n}\n\n\n/***********************************************************************\n * Helper for k32 family functions\n */\nstatic void *user32_proc_address(const char *proc_name)\n{\n    static HMODULE hUser32;\n\n    if(!hUser32) hUser32 = LoadLibraryA(\"user32.dll\");\n    return GetProcAddress(hUser32, proc_name);\n}\n\n/***********************************************************************\n *\t\tk32CharToOemBuffA   (KERNEL32.11)\n */\nBOOL WINAPI k32CharToOemBuffA(LPCSTR s, LPSTR d, DWORD len)\n{\n    WCHAR *bufW;\n\n    if ((bufW = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) )))\n    {\n        MultiByteToWideChar( CP_ACP, 0, s, len, bufW, len );\n        WideCharToMultiByte( CP_OEMCP, 0, bufW, len, d, len, NULL, NULL );\n        HeapFree( GetProcessHeap(), 0, bufW );\n    }\n    return TRUE;\n}\n\n/***********************************************************************\n *\t\tk32CharToOemA   (KERNEL32.10)\n */\nBOOL WINAPI k32CharToOemA(LPCSTR s, LPSTR d)\n{\n    if (!s || !d) return TRUE;\n    return k32CharToOemBuffA( s, d, strlen(s) + 1 );\n}\n\n/***********************************************************************\n *\t\tk32OemToCharBuffA   (KERNEL32.13)\n */\nBOOL WINAPI k32OemToCharBuffA(LPCSTR s, LPSTR d, DWORD len)\n{\n    WCHAR *bufW;\n\n    if ((bufW = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) )))\n    {\n        MultiByteToWideChar( CP_OEMCP, 0, s, len, bufW, len );\n        WideCharToMultiByte( CP_ACP, 0, bufW, len, d, len, NULL, NULL );\n        HeapFree( GetProcessHeap(), 0, bufW );\n    }\n    return TRUE;\n}\n\n/***********************************************************************\n *\t\tk32OemToCharA   (KERNEL32.12)\n */\nBOOL WINAPI k32OemToCharA(LPCSTR s, LPSTR d)\n{\n    return k32OemToCharBuffA( s, d, strlen(s) + 1 );\n}\n\n/**********************************************************************\n *\t\tk32LoadStringA   (KERNEL32.14)\n */\nINT WINAPI k32LoadStringA(HINSTANCE instance, UINT resource_id,\n                          LPSTR buffer, INT buflen)\n{\n    static INT (WINAPI *pLoadStringA)(HINSTANCE, UINT, LPSTR, INT);\n\n    if(!pLoadStringA) pLoadStringA = user32_proc_address(\"LoadStringA\");\n    return pLoadStringA(instance, resource_id, buffer, buflen);\n}\n\n/***********************************************************************\n *\t\tk32wvsprintfA   (KERNEL32.16)\n */\nINT WINAPI k32wvsprintfA(LPSTR buffer, LPCSTR spec, __ms_va_list args)\n{\n    static INT (WINAPI *pwvsprintfA)(LPSTR, LPCSTR, __ms_va_list);\n\n    if(!pwvsprintfA) pwvsprintfA = user32_proc_address(\"wvsprintfA\");\n    return (*pwvsprintfA)(buffer, spec, args);\n}\n\n/***********************************************************************\n *\t\tk32wsprintfA   (KERNEL32.15)\n */\nINT WINAPIV k32wsprintfA(LPSTR buffer, LPCSTR spec, ...)\n{\n    __ms_va_list args;\n    INT res;\n\n    __ms_va_start(args, spec);\n    res = k32wvsprintfA(buffer, spec, args);\n    __ms_va_end(args);\n    return res;\n}\n\n/**********************************************************************\n *\t     Catch    (KERNEL.55)\n *\n * Real prototype is:\n *   INT16 WINAPI Catch( LPCATCHBUF lpbuf );\n */\nvoid WINAPI Catch16( SEGPTR lpbuf16, CONTEXT *context )\n{\n    /* Note: we don't save the current ss, as the catch buffer is */\n    /* only 9 words long. Hopefully no one will have the silly    */\n    /* idea to change the current stack before calling Throw()... */\n\n    /* Windows uses:\n     * lpbuf[0] = ip\n     * lpbuf[1] = cs\n     * lpbuf[2] = sp\n     * lpbuf[3] = bp\n     * lpbuf[4] = si\n     * lpbuf[5] = di\n     * lpbuf[6] = ds\n     * lpbuf[7] = unused\n     * lpbuf[8] = ss\n     */\n\n    LPCATCHBUF lpbuf = MapSL(lpbuf16);\n    lpbuf[0] = LOWORD(context->Eip);\n    lpbuf[1] = context->SegCs;\n    /* Windows pushes 4 more words before saving sp */\n    lpbuf[2] = LOWORD(context->Esp) - 4 * sizeof(WORD);\n    lpbuf[3] = LOWORD(context->Ebp);\n    lpbuf[4] = LOWORD(context->Esi);\n    lpbuf[5] = LOWORD(context->Edi);\n    lpbuf[6] = context->SegDs;\n    lpbuf[7] = 0;\n    lpbuf[8] = context->SegSs;\n    context->Eax &= ~0xffff;  /* Return 0 */\n    context->Ebx = OFFSETOF(lpbuf16);\n    context->SegEs = SELECTOROF(lpbuf16);\n}\n\n#include \"wine/exception.h\"\n#include <ntstatus.h>\nLONG WINAPI Throw16VectoredExceptionHandler(struct _EXCEPTION_POINTERS *ExceptionInfo)\n{\n    if (ExceptionInfo->ExceptionRecord->ExceptionCode == STATUS_INVALID_DISPOSITION)\n        return EXCEPTION_CONTINUE_EXECUTION;\n    return EXCEPTION_CONTINUE_SEARCH;\n}\nLONG WINAPI Throw16ExceptionFilter(struct _EXCEPTION_POINTERS *ExceptionInfo)\n{\n    /* KiUserCallbackExceptionHandler throws STATUS_FATAL_USER_CALLBACK_EXCEPTION*/\n    if (ExceptionInfo->ExceptionRecord->ExceptionCode == STATUS_UNWIND)\n        return EXCEPTION_CONTINUE_EXECUTION;\n    return EXCEPTION_CONTINUE_SEARCH;\n}\n\n/**********************************************************************\n *\t     Throw    (KERNEL.56)\n *\n * Real prototype is:\n *   INT16 WINAPI Throw( LPCATCHBUF lpbuf, INT16 retval );\n */\nvoid WINAPI Throw16( LPCATCHBUF lpbuf, INT16 retval, CONTEXT *context )\n{\n    STACK16FRAME *pFrame;\n    STACK16FRAME *pFramePrev = NULL;\n    STACK32FRAME *frame32;\n    LPVOID v;\n    LPTOP_LEVEL_EXCEPTION_FILTER old_filter;\n\n    context->Eax = (context->Eax & ~0xffff) | (WORD)retval;\n\n    /* Find the frame32 corresponding to the frame16 we are jumping to */\n    pFrame = CURRENT_STACK16;\n    frame32 = pFrame->frame32;\n    while (frame32 && frame32->frame16)\n    {\n        if (SELECTOROF(frame32->frame16) != SELECTOROF(getWOW32Reserved()))\n        {\n            if (0)\n            {\n                FIXME(\"Switching stack segment with Throw() not supported; expect crash now\\n\");\n            }\n            break;\n        }\n        if (OFFSETOF(frame32->frame16) < OFFSETOF(getWOW32Reserved()))\n            break;  /* Something strange is going on */\n        if (OFFSETOF(frame32->frame16) > lpbuf[2])\n        {\n            /* We found the right frame */\n            pFrame->frame32 = frame32;\n            break;\n        }\n        frame32 = (pFramePrev = (STACK16FRAME *)MapSL(frame32->frame16))->frame32;\n    }\n    if (pFramePrev)\n        memmove(pFramePrev, pFrame, sizeof(STACK16FRAME));\n    context->Eip    = lpbuf[0];\n    context->SegCs  = lpbuf[1];\n    context->Esp    = lpbuf[2] + 4 * sizeof(WORD) - sizeof(WORD) - sizeof(WORD) /*extra arg*/;\n    context->Ebp    = lpbuf[3];\n    context->Esi    = lpbuf[4];\n    context->Edi    = lpbuf[5];\n    context->SegDs  = lpbuf[6];\n    context->Esp += 0x0c;\n    if (0)\n    {\n        if (lpbuf[8] != context->SegSs)\n            ERR(\"Switching stack segment with Throw() not supported; expect crash now\\n\");\n    }\n    context->SegSs = lpbuf[8];\n    old_filter = SetUnhandledExceptionFilter(Throw16ExceptionFilter);\n    v = AddVectoredExceptionHandler(0, Throw16VectoredExceptionHandler);\n#if defined(_MSC_VER)\n    __asm\n    {\n        push        edi\n        push        ebx\n        push        esi\n        push        0\n        push        0\n        push        0\n        mov         eax, dword ptr[pFrame]\n        mov         ecx, dword ptr[eax]\n        add         ecx, 8\n        push        ecx\n        call        RtlUnwind\n        pop esi\n        pop ebx\n        pop edi\n    }\n#else\n    RtlUnwind(&pFrame->frame32->frame, NULL, NULL, 0);\n#endif\n    RemoveVectoredExceptionHandler(v);\n    SetUnhandledExceptionFilter(old_filter);\n    /* long jump to (relay_call_from_16) */\n#if defined(_MSC_VER)\n    __asm\n    {\n        mov eax, fs:[0]\n        mov eax, [eax]\n        mov fs:[0], eax\n        mov ecx, dword ptr context\n        mov eax, frame32\n        mov edi, dword ptr [eax + 0x14]\n        mov ebp, dword ptr [eax + 0x20]\n        mov esi, dword ptr [eax +  0x18]\n        mov ebx, dword ptr [eax + 0x24]\n        mov esp, dword ptr [eax + 0x28]\n        jmp ebx\n    }\n#endif\n}\n\n\n/*\n *  16-bit WOW routines (in KERNEL)\n */\n\n/**********************************************************************\n *           GetVDMPointer32W      (KERNEL.516)\n */\nDWORD WINAPI GetVDMPointer32W16( SEGPTR vp, UINT16 fMode )\n{\n    //GlobalPageLock16(GlobalHandle16(SELECTOROF(vp))); // FIXME: needed for win95 compat?\n    return (DWORD)K32WOWGetVDMPointer( vp, 0, (DWORD)fMode );\n}\n\n/***********************************************************************\n *           LoadLibraryEx32W      (KERNEL.513)\n */\nDWORD WINAPI LoadLibraryEx32W16( LPCSTR lpszLibFile, DWORD hFile, DWORD dwFlags )\n{\n    HMODULE hModule;\n    DWORD mutex_count;\n\n    ReleaseThunkLock( &mutex_count );\n    hModule = LoadLibraryExA( lpszLibFile, (HANDLE)hFile, dwFlags );\n    RestoreThunkLock( mutex_count );\n\n    return (DWORD)hModule;\n}\n\n// workaround for dsinterface.dll\nstatic DWORD DSI_InitializeDirectSound = 0;\nstatic DWORD DSI_InitializeSound = 0;\n// workaround for user32.dll\nstatic DWORD USER32_SetScrollInfo = 0;\n// workaround for wsock32.dll\nstatic DWORD WSOCK32_WSAAsyncSelect = 0;\n\n/***********************************************************************\n *           GetProcAddress32W     (KERNEL.515)\n */\nDWORD WINAPI GetProcAddress32W16( DWORD hModule, LPCSTR lpszProc )\n{\n    DWORD ret = (DWORD)GetProcAddress( (HMODULE)hModule, lpszProc );\n    if (!strcmp(lpszProc, \"InitializeDirectSound\"))\n        DSI_InitializeDirectSound = ret;\n    else if(!strcmp(lpszProc, \"InitializeSound\"))\n        DSI_InitializeSound = ret;\n    else if(!strcmp(lpszProc, \"SetScrollInfo\"))\n        USER32_SetScrollInfo = ret;\n    else if(!strcmp(lpszProc, \"WSAAsyncSelect\"))\n        WSOCK32_WSAAsyncSelect = ret;\n    return ret;\n}\n\n/***********************************************************************\n *           FreeLibrary32W        (KERNEL.514)\n */\nDWORD WINAPI FreeLibrary32W16( DWORD hLibModule )\n{\n    BOOL retv;\n    DWORD mutex_count;\n\n    ReleaseThunkLock( &mutex_count );\n    retv = FreeLibrary( (HMODULE)hLibModule );\n    RestoreThunkLock( mutex_count );\n    return (DWORD)retv;\n}\n\n\n#define CPEX_DEST_STDCALL   0x00000000\n#define CPEX_DEST_CDECL     0x80000000\n\n/**********************************************************************\n *           WOW_CallProc32W\n */\nstatic DWORD WOW_CallProc32W16( FARPROC proc32, DWORD nrofargs, DWORD *args )\n{\n    DWORD ret;\n    DWORD mutex_count;\n\n    if ((proc32 == DSI_InitializeDirectSound) || (proc32 == DSI_InitializeSound) || (proc32 == USER32_SetScrollInfo))\n        args[0] = HWND_32(args[0]);\n    else if (proc32 == WSOCK32_WSAAsyncSelect)\n        args[1] = HWND_32(args[1]);\n\n    ReleaseThunkLock( &mutex_count );\n    if (!proc32) ret = 0;\n    else ret = call_entry_point( proc32, nrofargs & ~CPEX_DEST_CDECL, args );\n    RestoreThunkLock( mutex_count );\n\n    TRACE(\"returns %08x\\n\",ret);\n    return ret;\n}\n\n/**********************************************************************\n *           CallProc32W           (KERNEL.517)\n */\nDWORD WINAPIV CallProc32W16( DWORD nrofargs, DWORD argconvmask, FARPROC proc32, VA_LIST16 valist )\n{\n    DWORD args[32];\n    unsigned int i;\n\n    TRACE(\"(%d,%d,%p args[\",nrofargs,argconvmask,proc32);\n\n    for (i=0;i<nrofargs;i++)\n    {\n        if (argconvmask & (1<<i))\n        {\n            SEGPTR ptr = VA_ARG16( valist, SEGPTR );\n            /* pascal convention, have to reverse the arguments order */\n            DWORD arg = (DWORD)MapSL(ptr);\n            if (!HIWORD(arg))\n                arg = 0;\n            args[nrofargs - i - 1] = arg;\n            TRACE(\"%08x(%p),\",ptr,MapSL(ptr));\n        }\n        else\n        {\n            DWORD arg = VA_ARG16( valist, DWORD );\n            /* pascal convention, have to reverse the arguments order */\n            args[nrofargs - i - 1] = arg;\n            TRACE(\"%d,\", arg);\n        }\n    }\n    TRACE(\"])\\n\");\n\n    /* POP nrofargs DWORD arguments and 3 DWORD parameters */\n    stack16_pop( (3 + nrofargs) * sizeof(DWORD) );\n\n    return WOW_CallProc32W16( proc32, nrofargs, args );\n}\n\n/**********************************************************************\n *           _CallProcEx32W         (KERNEL.518)\n */\nDWORD WINAPIV CallProcEx32W16( DWORD nrofargs, DWORD argconvmask, FARPROC proc32, VA_LIST16 valist )\n{\n    DWORD args[32];\n    unsigned int i, count = min( 32, nrofargs & ~CPEX_DEST_CDECL );\n\n    TRACE(\"(%s,%d,%d,%p args[\", nrofargs & CPEX_DEST_CDECL ? \"cdecl\": \"stdcall\",\n          nrofargs & ~CPEX_DEST_CDECL, argconvmask, proc32);\n\n    for (i = 0; i < count; i++)\n    {\n        if (argconvmask & (1<<i))\n        {\n            SEGPTR ptr = VA_ARG16( valist, SEGPTR );\n            args[i] = (DWORD)MapSL(ptr);\n            TRACE(\"%08x(%p),\",ptr,MapSL(ptr));\n        }\n        else\n        {\n            DWORD arg = VA_ARG16( valist, DWORD );\n            args[i] = arg;\n            TRACE(\"%d,\", arg);\n        }\n    }\n    TRACE(\"])\\n\");\n    return WOW_CallProc32W16( proc32, nrofargs, args );\n}\n\n\n/**********************************************************************\n *           WOW16Call               (KERNEL.500)\n *\n * FIXME!!!\n *\n */\nDWORD WINAPIV WOW16Call(WORD x, WORD y, WORD z, VA_LIST16 args)\n{\n        int     i;\n        DWORD   calladdr;\n        FIXME(\"(0x%04x,0x%04x,%d),calling (\",x,y,z);\n\n        for (i=0;i<x/2;i++) {\n                WORD    a = VA_ARG16(args,WORD);\n                DPRINTF(\"%04x \",a);\n        }\n        calladdr = VA_ARG16(args,DWORD);\n        stack16_pop( 3*sizeof(WORD) + x + sizeof(DWORD) );\n        DPRINTF(\") calling address was 0x%08x\\n\",calladdr);\n        return 0;\n}\n"
  },
  {
    "path": "krnl386/timer.c",
    "content": "/*\n * 8253/8254 Programmable Interval Timer (PIT) emulation\n *\n * Copyright 2003 Jukka Heinonen\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include \"dosexe.h\"\n#include \"wine/debug.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(int);\n\n/*\n * FIXME: Use QueryPerformanceCounter for\n *        more precise GetTimer implementation.\n * FIXME: Use QueryPerformanceCounter (or GetTimer implementation)\n *        in timer tick routine to compensate for lost ticks. \n *        This should also make it possible to\n *        emulate really fast timers.\n * FIXME: Support special timer modes in addition to periodic mode.\n * FIXME: Use timeSetEvent, NtSetEvent or timer thread for more precise\n *        timing.\n * FIXME: Move Win16 timer emulation code here.\n */\n\n/* The PC clocks ticks at 1193180 Hz. */\n#define TIMER_FREQ 1193180\n\n/* How many timer IRQs can be pending at any time. */\n#define TIMER_MAX_PENDING 20\n\n/* Unique system timer identifier. */\nstatic UINT_PTR TIMER_id = 0;\n\n/* Time when timer IRQ was last queued. */\nstatic DWORD TIMER_stamp = 0;\n\n/* Timer ticks between timer IRQs. */\nstatic UINT TIMER_ticks = 0;\n\n/* Number of pending timer IRQs. */\nstatic LONG TIMER_pending = 0;\n\n/* Number of milliseconds between IRQs. */\nstatic DWORD TIMER_millis = 0;\n\n/*********************************************************************** \n *              TIMER_Relay\n *\n * Decrement the number of pending IRQs after IRQ handler has been \n * called. This function will be called even if application has its \n * own IRQ handler that does not jump to builtin IRQ handler.\n */\nstatic void TIMER_Relay( CONTEXT *context, void *data )\n{\n    InterlockedDecrement( &TIMER_pending );\n}\n\n\n/***********************************************************************\n *              TIMER_TimerProc\n */\nstatic void CALLBACK TIMER_TimerProc( HWND     hwnd,\n                                      UINT     uMsg,\n                                      UINT_PTR idEvent,\n                                      DWORD    dwTime )\n{\n    LONG pending = InterlockedIncrement( &TIMER_pending );\n    DWORD delta = (dwTime >= TIMER_stamp) ?\n        (dwTime - TIMER_stamp) : (0xffffffff - (TIMER_stamp - dwTime));\n\n    if (pending >= TIMER_MAX_PENDING)\n    {\n\n        if (delta >= 60000)\n        {\n            ERR( \"DOS timer has been stuck for 60 seconds...\\n\" );\n            TIMER_stamp = dwTime;\n        }\n\n        InterlockedDecrement( &TIMER_pending );\n    }\n    else\n    {\n        DWORD i;\n\n        /* Calculate the number of valid timer interrupts we can generate */\n        DWORD count = delta / TIMER_millis;\n\n        /* Forward the timestamp with the time used */\n        TIMER_stamp += (count * TIMER_millis);\n\n        /* Generate interrupts */\n        for(i=0;i<count;i++)\n        {\n          DOSVM_QueueEvent( 0, DOS_PRIORITY_REALTIME, TIMER_Relay, NULL );\n        }\n    }\n}\n\n\n/***********************************************************************\n *              TIMER_DoSetTimer\n */\nstatic void WINAPI TIMER_DoSetTimer( ULONG_PTR arg )\n{\n    INT millis = MulDiv( arg, 1000, TIMER_FREQ );\n\n    /* sanity check - too fast timer */\n    if (millis < 1)\n        millis = 1;\n\n    TRACE_(int)( \"setting timer tick delay to %d ms\\n\", millis );\n\n    if (TIMER_id)\n        KillTimer( NULL, TIMER_id );\n\n    TIMER_id = SetTimer( NULL, 0, millis, TIMER_TimerProc );\n    TIMER_stamp = GetTickCount();\n    TIMER_ticks = arg;\n\n    /* Remember number of milliseconds to wait */\n    TIMER_millis = millis;\n}\n\n\n/***********************************************************************\n *              DOSVM_SetTimer\n */\nvoid DOSVM_SetTimer( UINT ticks )\n{\n    /* PIT interprets zero as a maximum length delay. */\n    if (ticks == 0)\n        ticks = 0x10000;\n\n    if (!DOSVM_IsWin16())\n        MZ_RunInThread( TIMER_DoSetTimer, ticks );\n}\n\n\n/***********************************************************************\n *              DOSVM_Int08Handler\n *\n * DOS interrupt 08h handler (IRQ0 - TIMER).\n */\nvoid WINAPI DOSVM_Int08Handler( CONTEXT *context )\n{\n    BIOSDATA *bios_data      = DOSVM_BiosData();\n    CONTEXT nested_context = *context;\n    FARPROC16 int1c_proc     = DOSVM_GetRMHandler( 0x1c );\n    \n    nested_context.SegCs = SELECTOROF(int1c_proc);\n    nested_context.Eip   = OFFSETOF(int1c_proc);\n\n    /*\n     * Update BIOS ticks since midnight.\n     *\n     * FIXME: What to do when number of ticks exceeds ticks per day?\n     */\n    bios_data->Ticks++;\n\n    /*\n     * If IRQ is called from protected mode, convert\n     * context into VM86 context. Stack is invalidated so\n     * that DPMI_CallRMProc allocates a new stack.\n     */\n    if (!ISV86(&nested_context))\n    {\n        nested_context.EFlags |= V86_FLAG;\n        nested_context.SegSs = 0;\n    }\n\n    /*\n     * Call interrupt 0x1c.\n     */\n    DPMI_CallRMProc( &nested_context, NULL, 0, TRUE );\n\n    DOSVM_AcknowledgeIRQ( context );\n}\n"
  },
  {
    "path": "krnl386/utthunk.c",
    "content": "/*\n * Win32s Universal Thunk API\n *\n * Copyright 1999 Ulrich Weigand\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n\n#include \"wine/winbase16.h\"\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winternl.h\"\n#include \"windows/wownt32.h\"\n#include \"wine/debug.h\"\n#include \"kernel16_private.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(thunk);\n\n#include \"pshpack1.h\"\n\ntypedef struct\n{\n    BYTE    popl_eax;\n    BYTE    pushl;\n    DWORD   target;\n    BYTE    pushl_eax;\n    BYTE    ljmp;\n    DWORD   utglue16;\n\n} UT16THUNK;\n\ntypedef struct\n{\n    BYTE    popl_eax;\n    BYTE    pushl;\n    DWORD   target;\n    BYTE    pushl_eax;\n    BYTE    jmp;\n    DWORD   utglue32;\n\n} UT32THUNK;\n\n#include \"poppack.h\"\n\ntypedef struct _UTINFO\n{\n    struct _UTINFO    *next;\n    HMODULE            hModule;\n    HMODULE16          hModule16;\n\n    UT16THUNK          ut16;\n    UT32THUNK          ut32;\n\n} UTINFO;\n\nstatic UTINFO *UT_head; /* head of Universal Thunk list */\n\ntypedef DWORD (CALLBACK *UTGLUEPROC)( LPVOID lpBuff, DWORD dwUserDefined );\n\nBOOL WINAPI UTRegister( HMODULE hModule, LPSTR lpsz16BITDLL,\n                        LPSTR lpszInitName, LPSTR lpszProcName,\n                        FARPROC *ppfn32Thunk, FARPROC pfnUT32CallBack,\n                        LPVOID lpBuff );\n\nVOID WINAPI UTUnRegister( HMODULE hModule );\n\n\n/****************************************************************************\n *\t\tUTGlue16 (KERNEL.666) (KERNEL Wine-specific export)\n */\nDWORD WINAPI UTGlue16( LPVOID lpBuff, DWORD dwUserDefined, SEGPTR *translationList,\n\t\t       UTGLUEPROC target )\n{\n    INT i;\n\n    /* Convert arguments to flat pointers */\n\n    if ( translationList )\n        for ( i = 0; translationList[i]; i++ )\n        {\n            LPVOID flatPtr = MapSL( translationList[i] );\n            *(LPVOID *)flatPtr = MapSL( *(SEGPTR *)flatPtr );\n        }\n\n    /* Call 32-bit routine */\n\n    return target( lpBuff, dwUserDefined );\n}\n\n/****************************************************************************\n *\t\tUTGlue32\n */\nstatic DWORD WINAPI UTGlue32( FARPROC16 target, LPVOID lpBuff, DWORD dwUserDefined,\n                              LPVOID translationList[] )\n{\n    SEGPTR segBuff, *segptrList = NULL;\n    INT i, nList = 0;\n    DWORD retv;\n    WORD args[4];\n\n    /* Convert arguments to SEGPTRs */\n\n    if ( translationList )\n        for ( nList = 0; translationList[nList]; nList++ )\n            ;\n\n    if ( nList )\n    {\n        segptrList = HeapAlloc( GetProcessHeap(), 0, sizeof(SEGPTR)*nList );\n        if ( !segptrList )\n        {\n            FIXME(\"Unable to allocate segptrList!\\n\" );\n            return 0;\n        }\n\n        for ( i = 0; i < nList; i++ )\n            segptrList[i] = *(SEGPTR *)translationList[i]\n                          = MapLS( *(LPVOID *)translationList[i] );\n    }\n\n    segBuff = MapLS( lpBuff );\n\n    /* Call 16-bit routine */\n\n    args[3] = SELECTOROF(segBuff);\n    args[2] = OFFSETOF(segBuff);\n    args[1] = HIWORD(dwUserDefined);\n    args[0] = LOWORD(dwUserDefined);\n    WOWCallback16Ex( (DWORD)target, WCB16_PASCAL, sizeof(args), args, &retv );\n\n    /* Free temporary selectors */\n\n    UnMapLS( segBuff );\n\n    if ( nList )\n    {\n        for ( i = 0; i < nList; i++ )\n            UnMapLS( segptrList[i] );\n\n        HeapFree( GetProcessHeap(), 0, segptrList );\n    }\n\n    return retv;\n}\n\n/****************************************************************************\n *\t\tUTAlloc\n */\nstatic UTINFO *UTAlloc( HMODULE hModule, HMODULE16 hModule16,\n                        FARPROC16 target16, FARPROC target32 )\n{\n    static FARPROC16 UTGlue16_Segptr = NULL;\n    UTINFO *ut;\n\n    if ( !UTGlue16_Segptr )\n    {\n        HMODULE16 hMod = GetModuleHandle16( \"KERNEL\" );\n        UTGlue16_Segptr = GetProcAddress16( hMod, \"UTGlue16\" );\n        if ( !UTGlue16_Segptr ) return NULL;\n    }\n\n    ut = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(UTINFO) );\n    if ( !ut ) return NULL;\n\n    ut->hModule   = hModule;\n    ut->hModule16 = hModule16;\n\n    ut->ut16.popl_eax  = 0x58;\n    ut->ut16.pushl     = 0x68;\n    ut->ut16.target    = (DWORD)target32;\n    ut->ut16.pushl_eax = 0x50;\n    ut->ut16.ljmp      = 0xea;\n    ut->ut16.utglue16  = (DWORD)UTGlue16_Segptr;\n\n    ut->ut32.popl_eax  = 0x58;\n    ut->ut32.pushl     = 0x68;\n    ut->ut32.target    = (DWORD)target16;\n    ut->ut32.pushl_eax = 0x50;\n    ut->ut32.jmp       = 0xe9;\n    ut->ut32.utglue32  = (DWORD)UTGlue32 - ((DWORD)&ut->ut32.utglue32 + sizeof(DWORD));\n\n    ut->next = UT_head;\n    UT_head = ut;\n\n    return ut;\n}\n\n/****************************************************************************\n *\t\tUTFree\n */\nstatic void UTFree( UTINFO *ut )\n{\n    UTINFO **ptr;\n\n    for ( ptr = &UT_head; *ptr; ptr = &(*ptr)->next )\n        if ( *ptr == ut )\n        {\n            *ptr = ut->next;\n            break;\n        }\n\n    HeapFree( GetProcessHeap(), 0, ut );\n}\n\n/****************************************************************************\n *\t\tUTFind\n */\nstatic UTINFO *UTFind( HMODULE hModule )\n{\n    UTINFO *ut;\n\n    for ( ut = UT_head; ut; ut =ut->next )\n        if ( ut->hModule == hModule )\n            break;\n\n    return ut;\n}\n\n\n/****************************************************************************\n *\t\tUTRegister (KERNEL32.@)\n */\nBOOL WINAPI UTRegister( HMODULE hModule, LPSTR lpsz16BITDLL,\n                        LPSTR lpszInitName, LPSTR lpszProcName,\n                        FARPROC *ppfn32Thunk, FARPROC pfnUT32CallBack,\n                        LPVOID lpBuff )\n{\n    UTINFO *ut;\n    HMODULE16 hModule16;\n    FARPROC16 target16, init16;\n    static BOOL done;\n\n    if (!done)\n    {\n        LoadLibrary16( \"gdi.exe\" );\n        LoadLibrary16( \"user.exe\" );\n        done = TRUE;\n    }\n\n    /* Load 16-bit DLL and get UTProc16 entry point */\n\n    if (   (hModule16 = LoadLibrary16( lpsz16BITDLL )) <= 32\n        || (target16  = GetProcAddress16( hModule16, lpszProcName )) == 0 )\n        return FALSE;\n\n    /* Allocate UTINFO struct */\n\n    RtlAcquirePebLock();\n    if ( (ut = UTFind( hModule )) != NULL )\n        ut = NULL;\n    else\n        ut = UTAlloc( hModule, hModule16, target16, pfnUT32CallBack );\n    RtlReleasePebLock();\n\n    if ( !ut )\n    {\n        FreeLibrary16( hModule16 );\n        return FALSE;\n    }\n\n    /* Call UTInit16 if present */\n\n    if (     lpszInitName\n         && (init16 = GetProcAddress16( hModule16, lpszInitName )) != 0 )\n    {\n        SEGPTR callback = MapLS( &ut->ut16 );\n        SEGPTR segBuff  = MapLS( lpBuff );\n        WORD args[4];\n        DWORD ret;\n\n        args[3] = SELECTOROF(callback);\n        args[2] = OFFSETOF(callback);\n        args[1] = SELECTOROF(segBuff);\n        args[0] = OFFSETOF(segBuff);\n        WOWCallback16Ex( (DWORD)init16, WCB16_PASCAL, sizeof(args), args, &ret );\n        UnMapLS( segBuff );\n        UnMapLS( callback );\n        if (!ret)\n        {\n            UTUnRegister( hModule );\n            return FALSE;\n        }\n    }\n\n    /* Return 32-bit thunk */\n\n    *ppfn32Thunk = (FARPROC) &ut->ut32;\n\n    return TRUE;\n}\n\n/****************************************************************************\n *\t\tUTUnRegister (KERNEL32.@)\n */\nVOID WINAPI UTUnRegister( HMODULE hModule )\n{\n    UTINFO *ut;\n    HMODULE16 hModule16 = 0;\n\n    RtlAcquirePebLock();\n    ut = UTFind( hModule );\n    if ( ut )\n    {\n        hModule16 = ut->hModule16;\n        UTFree( ut );\n    }\n    RtlReleasePebLock();\n\n    if ( hModule16 )\n        FreeLibrary16( hModule16 );\n}\n\n/****************************************************************************\n *\t\tUTInit     (KERNEL.493)\n */\nWORD WINAPI UTInit16( DWORD x1, DWORD x2, DWORD x3, DWORD x4 )\n{\n    FIXME(\"(%08x, %08x, %08x, %08x): stub\\n\", x1, x2, x3, x4 );\n    return 0;\n}\n"
  },
  {
    "path": "krnl386/vdd.c",
    "content": "#include <windows.h>\n#include \"kernel16_private.h\"\n#include \"dosexe.h\"\n#include \"windows/wownt32.h\"\n\ntypedef struct\n{\n    HMODULE hvdd;\n    FARPROC dispatch;\n} vdd_module_t;\n\nstatic vdd_module_t vdd_modules[5] = {0};\nstatic CONTEXT *last_context = NULL;\n\nvoid vdd_req(char func, CONTEXT *context)\n{\n    /*\n     * RegisterModule\n     * DS:SI DLL\n     * ES:DI init func name\n     * DS:BX dispatch routine name\n     */\n    if (func == 0x00)\n    {\n        LPCSTR dll = (LPCSTR)CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Esi);\n        LPCSTR init = (LPCSTR)CTX_SEG_OFF_TO_LIN(context, context->SegEs, context->Edi);\n        LPCSTR dispatch = (LPCSTR)CTX_SEG_OFF_TO_LIN(context, context->SegDs, context->Ebx);\n        context->Eip += 4;\n        HMODULE hVdd = LoadLibraryA(dll);\n        if (!hVdd)\n        {\n            SET_CFLAG(context);\n            SET_AX(context, GetLastError());\n            return;\n        }\n        FARPROC pfnInit = GetProcAddress(hVdd, init);\n        FARPROC pfnDispatch = GetProcAddress(hVdd, dispatch);\n        int i;\n        for (i = 0; i < 5; i++)\n        {\n            if (!vdd_modules[i].hvdd)\n            {\n                vdd_modules[i].hvdd = hVdd;\n                vdd_modules[i].dispatch = pfnDispatch;\n                break;\n            }\n        }\n        if (i == 5)\n        {\n            FreeLibrary(hVdd);\n            SET_CFLAG(context);\n            SET_AX(context, 4);\n            return;\n        }            \n        RESET_CFLAG(context);\n        SET_AX(context, i);\n        if (pfnInit)\n        {\n            pfnInit();\n        }\n    }\n    /* UnregisterModule */\n    else if (func == 0x01)\n    {\n        WORD handle = LOWORD(context->Eax);\n        context->Eip += 4;\n        if ((handle > 5) || !vdd_modules[handle].hvdd)\n            return; // ntvdm exits here\n        FreeLibrary(vdd_modules[handle].hvdd);\n        vdd_modules[handle].hvdd = 0;\n    }\n    /* DispatchCall */\n    else if (func == 0x02)\n    {\n        WORD handle = LOWORD(context->Eax);\n        context->Eip += 4;\n        if ((handle > 5) || !vdd_modules[handle].hvdd)\n            return; // ntvdm exits here\n        last_context = context;\n        vdd_modules[handle].dispatch();\n        last_context = NULL;\n    }\n}\n\n#define GET_LO_BYTE_REG(reg) ((BYTE)(last_context ? last_context->reg : 0))\n#define GET_HI_BYTE_REG(reg) ((BYTE)((last_context ? last_context->reg : 0) >> 8))\n#define GET_WORD_REG(reg) ((WORD)(last_context ? last_context->reg : 0))\n#define GET_DWORD_REG(reg) (last_context ? last_context->reg : 0)\n\n#define SET_LO_BYTE_REG(reg, val) { if (last_context) last_context->reg = ((last_context->reg & ~0xff) | val); }\n#define SET_HI_BYTE_REG(reg, val) { if (last_context) last_context->reg = ((last_context->reg & ~0xff00) | (val << 8)); }\n#define SET_WORD_REG(reg, val) { if (last_context) last_context->reg = ((last_context->reg & ~0xffff) | val); }\n#define SET_DWORD_REG(reg, val) { if (last_context) last_context->reg = val; }\n\n#define GET_FLAG(bit) (last_context ? (last_context->EFlags >> bit) & 1 : 0)\n#define SET_FLAG(bit, val) { if (last_context) last_context->EFlags = ((last_context->EFlags & ~(1 << bit)) | ((val & 1) << bit)); }\n\nBYTE WINAPI getAL()\n{\n    return GET_LO_BYTE_REG(Eax);\n}\n\nBYTE WINAPI getAH()\n{\n    return GET_HI_BYTE_REG(Eax);\n}\n\nWORD WINAPI getAX()\n{\n    return GET_WORD_REG(Eax);\n}\n\nDWORD WINAPI getEAX()\n{\n    return GET_DWORD_REG(Eax);\n}\n\nBYTE WINAPI getBL()\n{\n    return GET_LO_BYTE_REG(Ebx);\n}\n\nBYTE WINAPI getBH()\n{\n    return GET_HI_BYTE_REG(Ebx);\n}\n\nWORD WINAPI getBX()\n{\n    return GET_WORD_REG(Ebx);\n}\n\nDWORD WINAPI getEBX()\n{\n    return GET_DWORD_REG(Ebx);\n}\n\nBYTE WINAPI getCL()\n{\n    return GET_LO_BYTE_REG(Ecx);\n}\n\nBYTE WINAPI getCH()\n{\n    return GET_HI_BYTE_REG(Ecx);\n}\n\nWORD WINAPI getCX()\n{\n    return GET_WORD_REG(Ecx);\n}\n\nDWORD WINAPI getECX()\n{\n    return GET_DWORD_REG(Ecx);\n}\n\nBYTE WINAPI getDL()\n{\n    return GET_LO_BYTE_REG(Edx);\n}\n\nBYTE WINAPI getDH()\n{\n    return GET_HI_BYTE_REG(Edx);\n}\n\nWORD WINAPI getDX()\n{\n    return GET_WORD_REG(Edx);\n}\n\nDWORD WINAPI getEDX()\n{\n    return GET_DWORD_REG(Edx);\n}\n\nWORD WINAPI getSP()\n{\n    return GET_WORD_REG(Esp);\n}\n\nDWORD WINAPI getESP()\n{\n    return GET_DWORD_REG(Esp);\n}\n\nWORD WINAPI getBP()\n{\n    return GET_WORD_REG(Ebp);\n}\n\nDWORD WINAPI getEBP()\n{\n    return GET_DWORD_REG(Ebp);\n}\n\nWORD WINAPI getSI()\n{\n    return GET_WORD_REG(Esi);\n}\n\nDWORD WINAPI getESI()\n{\n    return GET_DWORD_REG(Esi);\n}\n\nWORD WINAPI getDI()\n{\n    return GET_WORD_REG(Edi);\n}\n\nDWORD WINAPI getEDI()\n{\n    return GET_DWORD_REG(Edi);\n}\n\nvoid WINAPI setAL(BYTE val)\n{\n    SET_LO_BYTE_REG(Eax, val);\n}\n\nvoid WINAPI setAH(BYTE val)\n{\n    SET_HI_BYTE_REG(Eax, val);\n}\n\nvoid WINAPI setAX(WORD val)\n{\n    SET_WORD_REG(Eax, val);\n}\n\nvoid WINAPI setEAX(DWORD val)\n{\n    SET_DWORD_REG(Eax, val);\n}\n\nvoid WINAPI setBL(BYTE val)\n{\n    SET_LO_BYTE_REG(Ebx, val);\n}\n\nvoid WINAPI setBH(BYTE val)\n{\n    SET_HI_BYTE_REG(Ebx, val);\n}\n\nvoid WINAPI setBX(WORD val)\n{\n    SET_WORD_REG(Ebx, val);\n}\n\nvoid WINAPI setEBX(DWORD val)\n{\n    SET_DWORD_REG(Ebx, val);\n}\n\nvoid WINAPI setCL(BYTE val)\n{\n    SET_LO_BYTE_REG(Ecx, val);\n}\n\nvoid WINAPI setCH(BYTE val)\n{\n    SET_HI_BYTE_REG(Ecx, val);\n}\n\nvoid WINAPI setCX(DWORD val)\n{\n    SET_WORD_REG(Ecx, val);\n}\n\nvoid WINAPI setECX(BYTE val)\n{\n    SET_DWORD_REG(Ecx, val);\n}\n\nvoid WINAPI setDL(BYTE val)\n{\n    SET_LO_BYTE_REG(Edx, val);\n}\n\nvoid WINAPI setDH(BYTE val)\n{\n    SET_HI_BYTE_REG(Edx, val);\n}\n\nvoid WINAPI setDX(WORD val)\n{\n    SET_WORD_REG(Edx, val);\n}\n\nvoid WINAPI setEDX(DWORD val)\n{\n    SET_DWORD_REG(Edx, val);\n}\n\nvoid WINAPI setSP(WORD val)\n{\n    SET_WORD_REG(Esp, val);\n}\n\nvoid WINAPI setESP(DWORD val)\n{\n    SET_DWORD_REG(Esp, val);\n}\n\nvoid WINAPI setBP(WORD val)\n{\n    SET_WORD_REG(Ebp, val);\n}\n\nvoid WINAPI setEBP(DWORD val)\n{\n    SET_DWORD_REG(Ebp, val);\n}\n\nvoid WINAPI setSI(WORD val)\n{\n    SET_WORD_REG(Esi, val);\n}\n\nvoid WINAPI setESI(DWORD val)\n{\n    SET_DWORD_REG(Esi, val);\n}\n\nvoid WINAPI setDI(WORD val)\n{\n    SET_WORD_REG(Edi, val);\n}\n\nvoid WINAPI setEDI(DWORD val)\n{\n    SET_DWORD_REG(Edi, val);\n}\n\nWORD WINAPI getDS()\n{\n    return GET_WORD_REG(SegDs);\n}\n\nWORD WINAPI getES()\n{\n    return GET_WORD_REG(SegEs);\n}\n\nWORD WINAPI getCS()\n{\n    return GET_WORD_REG(SegCs);\n}\n\nWORD WINAPI getSS()\n{\n    return GET_WORD_REG(SegSs);\n}\n\nWORD WINAPI getFS()\n{\n    return GET_WORD_REG(SegFs);\n}\n\nWORD WINAPI getGS()\n{\n    return GET_WORD_REG(SegGs);\n}\n\nvoid WINAPI setDS(WORD val)\n{\n    SET_WORD_REG(SegDs, val);\n}\n\nvoid WINAPI setES(WORD val)\n{\n    SET_WORD_REG(SegEs, val);\n}\n\nvoid WINAPI setCS(WORD val)\n{\n    SET_WORD_REG(SegCs, val);\n}\n\nvoid WINAPI setSS(WORD val)\n{\n    SET_WORD_REG(SegSs, val);\n}\n\nvoid WINAPI setFS(WORD val)\n{\n    SET_WORD_REG(SegFs, val);\n}\n\nvoid WINAPI setGS(WORD val)\n{\n    SET_WORD_REG(SegGs, val);\n}\n\nWORD WINAPI getIP()\n{\n    return GET_WORD_REG(Eip);\n}\n\nWORD WINAPI getEIP()\n{\n    return GET_DWORD_REG(Eip);\n}\n\nvoid WINAPI setIP(WORD val)\n{\n    SET_WORD_REG(Eip, val);\n}\n\nvoid WINAPI setEIP(DWORD val)\n{\n    SET_DWORD_REG(Eip, val);\n}\n\nDWORD WINAPI getCF()\n{\n    return GET_FLAG(0);\n}\n\nDWORD WINAPI getPF()\n{\n    return GET_FLAG(2);\n}\n\nDWORD WINAPI getAF()\n{\n    return GET_FLAG(4);\n}\n\nDWORD WINAPI getZF()\n{\n    return GET_FLAG(6);\n}\n\nDWORD WINAPI getSF()\n{\n    return GET_FLAG(7);\n}\n\nDWORD WINAPI getIF()\n{\n    return GET_FLAG(9);\n}\n\nDWORD WINAPI getDF()\n{\n    return GET_FLAG(10);\n}\n\nDWORD WINAPI getOF()\n{\n    return GET_FLAG(11);\n}\n\nvoid WINAPI setCF(DWORD val)\n{\n    SET_FLAG(0, val);\n}\n\nvoid WINAPI setPF(DWORD val)\n{\n    SET_FLAG(2, val);\n}\n\nvoid WINAPI setAF(DWORD val)\n{\n    SET_FLAG(4, val);\n}\n\nvoid WINAPI setZF(DWORD val)\n{\n    SET_FLAG(6, val);\n}\n\nvoid WINAPI setSF(DWORD val)\n{\n    SET_FLAG(7, val);\n}\n\nvoid WINAPI setIF(DWORD val)\n{\n    SET_FLAG(9, val);\n}\n\nvoid WINAPI setDF(DWORD val)\n{\n    SET_FLAG(10, val);\n}\n\nvoid WINAPI setOF(DWORD val)\n{\n    SET_FLAG(11, val);\n}\n\ntypedef VOID (WINAPI *PFNVDD_INB)(WORD iport, PBYTE data);\ntypedef VOID (WINAPI *PFNVDD_INW)(WORD iport, PWORD data);\ntypedef VOID (WINAPI *PFNVDD_INSB)(WORD iport, PBYTE data, WORD count);\ntypedef VOID (WINAPI *PFNVDD_INSW)(WORD iport, PWORD data, WORD count);\ntypedef VOID (WINAPI *PFNVDD_OUTB)(WORD iport, BYTE data);\ntypedef VOID (WINAPI *PFNVDD_OUTW)(WORD iport, WORD data);\ntypedef VOID (WINAPI *PFNVDD_OUTSB)(WORD iport, PBYTE data, WORD count);\ntypedef VOID (WINAPI *PFNVDD_OUTSW)(WORD iport, PWORD data, WORD count);\n\ntypedef struct _VDD_IO_HANDLERS\n{\n  PFNVDD_INB inb_handler;\n  PFNVDD_INW inw_handler;\n  PFNVDD_INSB insb_handler;\n  PFNVDD_INSW insw_handler;\n  PFNVDD_OUTB outb_handler;\n  PFNVDD_OUTW outw_handler;\n  PFNVDD_OUTSB outsb_handler;\n  PFNVDD_OUTSW outsw_handler;\n} VDD_IO_HANDLERS, *PVDD_IO_HANDLERS;\n \ntypedef struct _VDD_IO_PORTRANGE\n{\n  WORD First;\n  WORD Last;\n} VDD_IO_PORTRANGE, *PVDD_IO_PORTRANGE;\n\ntypedef struct\n{\n    HANDLE hvdd;\n    VDD_IO_HANDLERS io_funcs;\n    WORD io_range_len;\n    PVDD_IO_PORTRANGE io_range;\n} vdd_io_t;\n\nstatic vdd_io_t vdd_io[5] = {0};\n \nBOOL WINAPI VDDInstallIOHook(HANDLE hvdd, WORD cPortRange, PVDD_IO_PORTRANGE pPortRange, PVDD_IO_HANDLERS IOhandler)\n{\n    int handle = (int)hvdd;\n    int found = -1;\n    for (int i = 0; i < 5; i++)\n    {\n        if (!vdd_io[i].hvdd)\n            found = i;\n        if (vdd_io[i].hvdd == hvdd)\n            return FALSE;\n    }\n    if (found == -1 || !IOhandler->inb_handler || !IOhandler->outb_handler)\n        return FALSE;\n\n    vdd_io[found].hvdd = hvdd;\n    memcpy(&vdd_io[found].io_funcs, IOhandler, sizeof(VDD_IO_HANDLERS));\n    vdd_io[found].io_range_len = cPortRange;\n    vdd_io[found].io_range = (PVDD_IO_PORTRANGE)HeapAlloc(GetProcessHeap(), 0, cPortRange * sizeof(VDD_IO_PORTRANGE));\n    memcpy(vdd_io[found].io_range, pPortRange, cPortRange * sizeof(VDD_IO_PORTRANGE));\n    return TRUE;\n}\n\nvoid WINAPI VDDDeInstallIOHook(HANDLE hvdd, WORD cPortRange, PVDD_IO_PORTRANGE pPortRange)\n{\n    int handle = (int)hvdd;\n    int i;\n    for (i = 0; i < 5; i++)\n    {\n        if (hvdd == vdd_io[i].hvdd)\n            break;\n    }\n    if (i >= 5)\n        return;\n\n    vdd_io[i].hvdd = NULL;\n    HeapFree(GetProcessHeap(), 0, vdd_io[i].io_range);\n    return;\n}\n\nBOOL vdd_io_read(int port, int size, WORD *val, CONTEXT *ctx)\n{\n    for (int i = 0; i < 5; i++)\n    {\n        if (vdd_io[i].hvdd)\n        {\n            for (int j = 0; j < vdd_io[i].io_range_len; j++)\n            {\n                if ((vdd_io[i].io_range[j].First <= port) && (vdd_io[i].io_range[j].Last >= port))\n                {\n                    last_context = ctx;\n                    switch (size)\n                    {\n                        case 2:\n                            if (vdd_io[i].io_funcs.inw_handler)\n                                vdd_io[i].io_funcs.inw_handler(port, val);\n                            else\n                            {\n                                vdd_io[i].io_funcs.inb_handler(port, (BYTE *)val);\n                                vdd_io[i].io_funcs.inb_handler(port + 1, ((BYTE *)val) + 1);\n                            }\n                        case 1:\n                             vdd_io[i].io_funcs.inb_handler(port, (BYTE *)val);\n                    }\n                    last_context = NULL;\n                    return TRUE;\n                }\n            }\n        }\n    }\n    return FALSE;\n}\n\nBOOL vdd_io_write(int port, int size, WORD val, CONTEXT *ctx)\n{\n    for (int i = 0; i < 5; i++)\n    {\n        if (vdd_io[i].hvdd)\n        {\n            for (int j = 0; j < vdd_io[i].io_range_len; j++)\n            {\n                if ((vdd_io[i].io_range[j].First <= port) && (vdd_io[i].io_range[j].Last >= port))\n                {\n                    last_context = ctx;\n                    switch (size)\n                    {\n                        case 2:\n                            if (vdd_io[i].io_funcs.outw_handler)\n                                vdd_io[i].io_funcs.outw_handler(port, val);\n                            else\n                            {\n                                vdd_io[i].io_funcs.outb_handler(port, val);\n                                vdd_io[i].io_funcs.outb_handler(port + 1, val >> 8);\n                            }\n                        case 1:\n                             vdd_io[i].io_funcs.outb_handler(port, val);\n                    }\n                    last_context = NULL;\n                    return TRUE;\n                }\n            }\n        }\n    }\n    return FALSE;\n}\n\nBYTE *WINAPI MGetVdmPointer(DWORD addr, DWORD size, BOOL protmode)\n{\n    return (BYTE *)K32WOWGetVDMPointer(addr, size, protmode);\n}\n"
  },
  {
    "path": "krnl386/version.rc",
    "content": "/*\n * Copyright 2001 Dmitry Timoshkov\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#define WINE_FILEVERSION 1,0,0,0\n#define WINE_FILEVERSION_STR \"1.0\"\n#define WINE_FILEDESCRIPTION_STR \"Wine core dll\"\n#define WINE_FILENAME_STR \"krnl386.exe\"\n\n#include \"wine/wine_common_ver.rc\"\n"
  },
  {
    "path": "krnl386/vga.c",
    "content": "/*\n * VGA hardware emulation\n *\n * Copyright 1998 Ove Kåven (with some help from Marcus Meissner)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n#include <string.h>\n\n#define NONAMELESSUNION\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n#include \"wincon.h\"\n#include \"winnls.h\"\n#include \"dosexe.h\"\n#include \"vga.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(ddraw);\n\n\nstatic BOOL vga_retrace_vertical;\nstatic BOOL vga_retrace_horizontal;\n\n/*\n * Size and location of VGA controller window to framebuffer.\n *\n * Note: We support only single window even though some\n *       controllers support two. This should not be changed unless\n *       there are programs that depend on having two windows.\n */\n#define VGA_WINDOW_SIZE  (64 * 1024)\n#define VGA_WINDOW_START ((char *)0xa0000)\n\n/*\n * Size and location of CGA controller window to framebuffer.\n */\n#define CGA_WINDOW_SIZE  (32 * 1024)\n#define CGA_WINDOW_START ((char *)0xb8000)\n\n/*\n * VGA controller memory is emulated using linear framebuffer.\n * This frambuffer also acts as an interface\n * between VGA controller emulation and DirectDraw.\n *\n * vga_fb_width: Display width in pixels. Can be modified when\n *               display mode is changed.\n * vga_fb_height: Display height in pixels. Can be modified when\n *                display mode is changed.\n * vga_fb_depth: Number of bits used to store single pixel color information.\n *               Each pixel uses (vga_fb_depth+7)/8 bytes because\n *               1-16 color modes are mapped to 256 color mode.\n *               Can be modified when display mode is changed.\n * vga_fb_pitch: How many bytes to add to pointer in order to move\n *               from one row to another. This is fixed in VGA modes,\n *               but can be modified in SVGA modes.\n * vga_fb_offset: Offset added to framebuffer start address in order\n *                to find the display origin. Programs use this to do\n *                double buffering and to scroll display. The value can\n *                be modified in VGA and SVGA modes.\n * vga_fb_size: How many bytes are allocated to framebuffer.\n *              VGA framebuffers are always larger than display size and\n *              SVGA framebuffers may also be.\n * vga_fb_data: Pointer to framebuffer start.\n * vga_fb_window: Offset of 64k window 0xa0000 in bytes from framebuffer start.\n *                This value is >= 0, if mode uses linear framebuffer and\n *                -1, if mode uses color planes. This value is fixed\n *                in all modes except 0x13 (256 color VGA) where\n *                0 means normal mode and -1 means Mode-X (unchained mode).\n */\nstatic int   vga_fb_width;\nstatic int   vga_fb_height;\nstatic int   vga_fb_depth;\nstatic int   vga_fb_pitch;\nstatic int   vga_fb_offset;\nint   vga_fb_size = 0;\nchar *vga_fb_data = 0;\nstatic int   vga_fb_window = 0;\nstatic int   vga_fb_window_size;\nstatic char *vga_fb_window_data;\nstatic PALETTEENTRY *vga_fb_palette;\nstatic unsigned vga_fb_palette_index;\nstatic unsigned vga_fb_palette_size;\nstatic BOOL  vga_fb_bright;\nstatic BOOL  vga_fb_enabled;\n\n/*\n * VGA text mode data.\n *\n * vga_text_attr: Current active attribute.\n * vga_text_old: Last data sent to console. \n *               This is used to optimize console updates.\n * vga_text_width:  Width of the text display in characters.\n * vga_text_height: Height of the text display in characters.\n * vga_text_x: Current cursor X-position. Starts from zero.\n * vga_text_y: Current cursor Y-position. Starts from zero.\n * vga_text_console: TRUE if stdout is console, \n *                   FALSE if it is regular file.\n */\nstatic BYTE  vga_text_attr;\nstatic char *vga_text_old = NULL;\nstatic BYTE  vga_text_width;\nstatic BYTE  vga_text_height;\nstatic BYTE  vga_text_x;\nstatic BYTE  vga_text_y;\nstatic BOOL  vga_text_console;\n\n/*\n * VGA controller ports 0x3c0, 0x3c4, 0x3ce and 0x3d4 are\n * indexed registers. These ports are used to select VGA controller\n * subregister that can be written to or read from using ports 0x3c1,\n * 0x3c5, 0x3cf or 0x3d5. Selected subregister indexes are\n * stored in variables vga_index_*.\n *\n * Port 0x3c0 is special because it is both index and\n * data-write register. Flip-flop vga_address_3c0 tells whether\n * the port acts currently as an address register. Reading from port\n * 0x3da resets the flip-flop to address mode.\n */\nstatic BYTE vga_index_3c0;\nstatic BYTE vga_index_3c4;\nstatic BYTE vga_index_3ce;\nstatic BYTE vga_index_3d4;\nstatic BOOL vga_address_3c0 = TRUE;\n\n/*\n * List of supported video modes.\n *\n * should be expanded to contain most or all information\n * as required for SVGA VESA mode info block for VESA BIOS subsystem 1 (see _ModeInfoBlock)\n * this will allow proper support for FIXME items in VGA/VESA mode configuration\n *\n * FIXME - verify and define support for VESA modes\n * FIXME - add # bit planes, # video memory banks, & memory model\n */\nstatic WORD VGA_CurrentMode;\nstatic BOOL CGA_ColorComposite = FALSE;  /* behave like composite monitor */\n\nconst VGA_MODE VGA_modelist[] =\n{\n    /* Mode, ModeType, TextCols, TextRows, CharWidth, CharHeight, Width, Height, Depth, Colors, ScreenPages, Supported*/\n    /* VGA modes */\n    {0x0000,    TEXT, 40, 25,  9, 16,  360,  400,  0,  16, 8, TRUE},   /* VGA/CGA text mode 0 */\n    {0x0001,    TEXT, 40, 25,  9, 16,  360,  400,  0,  16, 8, TRUE},   /* VGA/CGA text mode 1 */\n    {0x0002,    TEXT, 80, 25,  9, 16,  360,  400,  0,  16, 8, TRUE},   /* VGA/CGA text mode 2 */\n    {0x0003,    TEXT, 80, 25,  9, 16,  360,  400,  0,  16, 8, TRUE},   /* VGA/CGA text mode 3 */\n    {0x0004, GRAPHIC, 40, 25,  8,  8,  320,  200,  2,   4, 1, TRUE},   /* VGA/CGA graphics mode 4 */\n    {0x0005, GRAPHIC, 40, 25,  8,  8,  320,  200,  2,   4, 1, TRUE},   /* VGA/CGA graphics mode 5 */\n    {0x0006, GRAPHIC, 80, 25,  8,  8,  640,  200,  1,   2, 1, TRUE},   /* VGA/CGA graphics mode 6 */\n    {0x0007,    TEXT, 80, 25,  9, 16,  720,  400,  0,   0, 8, FALSE},   /* VGA text mode 7 - FIXME bad default address */\n    {0x000d, GRAPHIC, 40, 25,  8,  8,  320,  200,  4,  16, 8, FALSE},   /* VGA graphics mode 13 */\n    {0x000e, GRAPHIC, 80, 25,  8,  8,  640,  200,  4,  16, 4, FALSE},   /* VGA graphics mode 14 */\n    {0x000f, GRAPHIC, 80, 25,  8, 14,  640,  350,  0,   0, 2, FALSE},   /* VGA graphics mode 15 */\n    {0x0010, GRAPHIC, 80, 25,  8, 14,  640,  350,  4,  16, 2, FALSE},   /* VGA graphics mode 16 */\n    {0x0011, GRAPHIC, 80, 30,  8, 16,  640,  480,  1,   2, 1, FALSE},   /* VGA graphics mode 17 */\n    {0x0012, GRAPHIC, 80, 30,  8, 16,  640,  480,  4,  16, 1, FALSE},   /* VGA graphics mode 18 */\n    {0x0013, GRAPHIC, 40, 25,  8,  8,  320,  200,  8, 256, 1, TRUE},   /* VGA graphics mode 19 */\n    /* VESA 7-bit modes */\n    {0x006a, GRAPHIC,  0,  0,  0,  0,  800,  600,  4,  16, 1, TRUE},   /* VESA graphics mode, same as 0x102 */\n    /* VESA 15-bit modes */\n    {0x0100, GRAPHIC,  0,  0,  0,  0,  640,  400,  8, 256, 1, TRUE},   /* VESA graphics mode */\n    {0x0101, GRAPHIC,  0,  0,  0,  0,  640,  480,  8, 256, 1, TRUE},   /* VESA graphics mode */\n    {0x0102, GRAPHIC,  0,  0,  0,  0,  800,  600,  4,  16, 1, TRUE},   /* VESA graphics mode */\n    {0x0103, GRAPHIC,  0,  0,  0,  0,  800,  600,  8, 256, 1, TRUE},   /* VESA graphics mode */\n    {0x0104, GRAPHIC,  0,  0,  0,  0, 1024,  768,  4,  16, 1, TRUE},   /* VESA graphics mode */\n    {0x0105, GRAPHIC,  0,  0,  0,  0, 1024,  768,  8, 256, 1, TRUE},   /* VESA graphics mode */\n    {0x0106, GRAPHIC,  0,  0,  0,  0, 1280, 1024,  4,  16, 1, TRUE},   /* VESA graphics mode */\n    {0x0107, GRAPHIC,  0,  0,  0,  0, 1280, 1024,  8, 256, 1, TRUE},   /* VESA graphics mode */\n    {0x0108,    TEXT,  0,  0,  0,  0,   80,   60,  0,   0, 1, TRUE},   /* VESA text mode */\n    {0x0109,    TEXT,  0,  0,  0,  0,  132,   25,  0,   0, 1, TRUE},   /* VESA text mode */\n    {0x010a,    TEXT,  0,  0,  0,  0,  132,   43,  0,   0, 1, TRUE},   /* VESA text mode */\n    {0x010b,    TEXT,  0,  0,  0,  0,  132,   50,  0,   0, 1, TRUE},   /* VESA text mode */\n    {0x010c,    TEXT,  0,  0,  0,  0,  132,   60,  0,   0, 1, TRUE},   /* VESA text mode */\n    /* VESA 1.2 modes */\n    {0x010d, GRAPHIC,  0,  0,  0,  0,  320,  200, 15,   0, 1, TRUE},   /* VESA graphics mode, 32K colors */\n    {0x010e, GRAPHIC,  0,  0,  0,  0,  320,  200, 16,   0, 1, TRUE},   /* VESA graphics mode, 64K colors */\n    {0x010f, GRAPHIC,  0,  0,  0,  0,  320,  200, 24,   0, 1, TRUE},   /* VESA graphics mode, 16.8 Million colors */\n    {0x0110, GRAPHIC,  0,  0,  0,  0,  640,  480, 15,   0, 1, TRUE},   /* VESA graphics mode, 32K colors */\n    {0x0111, GRAPHIC,  0,  0,  0,  0,  640,  480, 16,   0, 1, TRUE},   /* VESA graphics mode, 64K colors */\n    {0x0112, GRAPHIC,  0,  0,  0,  0,  640,  480, 24,   0, 1, TRUE},   /* VESA graphics mode, 16.8 Million colors */\n    {0x0113, GRAPHIC,  0,  0,  0,  0,  800,  600, 15,   0, 1, TRUE},   /* VESA graphics mode, 32K colors */\n    {0x0114, GRAPHIC,  0,  0,  0,  0,  800,  600, 16,   0, 1, TRUE},   /* VESA graphics mode, 64K colors */\n    {0x0115, GRAPHIC,  0,  0,  0,  0,  800,  600, 24,   0, 1, TRUE},   /* VESA graphics mode, 16.8 Million colors */\n    {0x0116, GRAPHIC,  0,  0,  0,  0, 1024,  768, 15,   0, 1, TRUE},   /* VESA graphics mode, 32K colors */\n    {0x0117, GRAPHIC,  0,  0,  0,  0, 1024,  768, 16,   0, 1, TRUE},   /* VESA graphics mode, 64K colors */\n    {0x0118, GRAPHIC,  0,  0,  0,  0, 1024,  768, 24,   0, 1, TRUE},   /* VESA graphics mode, 16.8 Million colors */\n    {0x0119, GRAPHIC,  0,  0,  0,  0, 1280, 1024, 15,   0, 1, TRUE},   /* VESA graphics mode, 32K colors */\n    {0x011a, GRAPHIC,  0,  0,  0,  0, 1280, 1024, 16,   0, 1, TRUE},   /* VESA graphics mode, 64K colors */\n    {0x011b, GRAPHIC,  0,  0,  0,  0, 1280, 1024, 24,   0, 1, TRUE},   /* VESA graphics mode, 16.8 Million colors */\n    {0xffff,    TEXT,  0,  0,  0,  0,    0,    0,  0,   0, 1, FALSE}\n};\n\n/*\n * This mutex is used to protect VGA state during asynchronous\n * screen updates (see VGA_Poll). It makes sure that VGA state changes\n * are atomic and the user interface is protected from flicker and\n * corruption.\n *\n * The mutex actually serializes VGA operations and the screen update. \n * Which means that whenever VGA_Poll occurs, application stalls if it \n * tries to modify VGA state. This is not how real VGA adapters work,\n * but it makes timing and correctness issues much easier to deal with.\n */\nstatic CRITICAL_SECTION vga_lock;\nstatic CRITICAL_SECTION_DEBUG critsect_debug =\n{\n    0, 0, &vga_lock,\n    { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },\n      0, 0, { (DWORD_PTR)(__FILE__ \": vga_lock\") }\n};\nstatic CRITICAL_SECTION vga_lock = { &critsect_debug, -1, 0, 0, 0, 0 };\n\nstatic void CALLBACK VGA_Poll( LPVOID arg, DWORD low, DWORD high );\n\nstatic HWND vga_hwnd = NULL;\n\n/*\n * CGA palette 1\n */\nstatic PALETTEENTRY cga_palette1[] = {\n  {0x00, 0x00, 0x00}, /* 0 - Black */\n  {0x00, 0xAA, 0xAA}, /* 1 - Cyan */\n  {0xAA, 0x00, 0xAA}, /* 2 - Magenta */\n  {0xAA, 0xAA, 0xAA}  /* 3 - White */\n};\n\n/*\n * CGA palette 1 in the bright variant\n * intensities, when signalled to do so\n * in register 0x3d9\n */\nstatic PALETTEENTRY cga_palette1_bright[] = {\n  {0x00, 0x00, 0x00}, /* 0 - Black */\n  {0x55, 0xFF, 0xFF}, /* 1 - Light cyan */\n  {0xFF, 0x55, 0xFF}, /* 2 - Light magenta */\n  {0xFF, 0xFF, 0xFF}, /* 3 - Bright White */\n};\n\n/*\n * CGA palette 2\n */\nstatic PALETTEENTRY cga_palette2[] = {\n  {0x00, 0x00, 0x00}, /* 0 - Black */\n  {0x00, 0xAA, 0x00}, /* 1 - Green */\n  {0xAA, 0x00, 0x00}, /* 2 - Red */\n  {0xAA, 0x55, 0x00}  /* 3 - Brown */\n};\n\n/*\n * CGA palette 2 in the bright variant\n * intensities, when signalled to do so\n * in register 0x3d9\n */\nstatic PALETTEENTRY cga_palette2_bright[] = {\n  {0x00, 0x00, 0x00}, /* 0 - Black */\n  {0x55, 0xFF, 0x55}, /* 1 - Light green */\n  {0xFF, 0x55, 0x55}, /* 2 - Light red */\n  {0xFF, 0xFF, 0x55}, /* 3 - Yellow */\n};\n\n/*\n *  VGA Palette Registers, in actual 16 bit color\n *  port 3C0H - 6 bit rgbRGB format\n *\n *  16 color accesses will use these pointers and insert\n *  entries from the 64-color palette (mode 18) into the default\n *  palette.   --Robert 'Admiral' Coeyman\n */\nstatic char vga_16_palette[17]={\n  0x00,  /* 0 - Black         */\n  0x01,  /* 1 - Blue          */\n  0x02,  /* 2 - Green         */\n  0x03,  /* 3 - Cyan          */\n  0x04,  /* 4 - Red           */\n  0x05,  /* 5 - Magenta       */\n  0x14,  /* 6 - Brown         */\n  0x07,  /* 7 - White (Light gray)        */\n  0x38,  /* 8 - Dark gray     */\n  0x39,  /* 9 - Light blue    */\n  0x3a,  /* A - Light green   */\n  0x3b,  /* B - Light cyan    */\n  0x3c,  /* C - Light red     */\n  0x3d,  /* D - Light magenta */\n  0x3e,  /* E - Yellow        */\n  0x3f,  /* F - Bright White (White) */\n  0x00   /* Border Color      */\n};\n\n/*\n *  Mode 19 Default Color Register Setting\n *  DAC palette registers, converted from actual 18 bit color to 24.\n */\nstatic PALETTEENTRY vga_def_palette[256]={\n/* red  green  blue */\n  /* 16 colors in IRGB values */\n  {0x00, 0x00, 0x00}, /* 0 (0) - Black */\n  {0x00, 0x00, 0xAA}, /* 1 (1) - Blue */\n  {0x00, 0xAA, 0x00}, /* 2 (2) - Green */\n  {0x00, 0xAA, 0xAA}, /* 3 (3) - Cyan */\n  {0xAA, 0x00, 0x00}, /* 4 (4) - Red */\n  {0xAA, 0x00, 0xAA}, /* 5 (5) - Magenta */\n  {0xAA, 0x55, 0x00}, /* 6 (6) - Brown */\n  {0xAA, 0xAA, 0xAA}, /* 7 (7) - White (Light gray) */\n  {0x55, 0x55, 0x55}, /* 8 (8) - Dark gray */\n  {0x55, 0x55, 0xFF}, /* 9 (9) - Light blue */\n  {0x55, 0xFF, 0x55}, /* 10 (A) - Light green */\n  {0x55, 0xFF, 0xFF}, /* 11 (B) - Light cyan */\n  {0xFF, 0x55, 0x55}, /* 12 (C) - Light red */\n  {0xFF, 0x55, 0xFF}, /* 13 (D) - Light magenta */\n  {0xFF, 0xFF, 0x55}, /* 14 (E) -  Yellow */\n  {0xFF, 0xFF, 0xFF}, /* 15 (F) - Bright White (White) */\n  /* 16 shades of gray */\n  {0x00, 0x00, 0x00}, /* 16 (10) */\n  {0x10, 0x10, 0x10}, /* 17 (11) */\n  {0x20, 0x20, 0x20}, /* 18 (12) */\n  {0x35, 0x35, 0x35}, /* 19 (13) */\n  {0x45, 0x45, 0x45}, /* 20 (14) */\n  {0x55, 0x55, 0x55}, /* 21 (15) */\n  {0x65, 0x65, 0x65}, /* 22 (16) */\n  {0x75, 0x75, 0x75}, /* 23 (17) */\n  {0x8A, 0x8A, 0x8A}, /* 24 (18) */\n  {0x9A, 0x9A, 0x9A}, /* 25 (19) */\n  {0xAA, 0xAA, 0xAA}, /* 26 (1A) */\n  {0xBA, 0xBA, 0xBA}, /* 27 (1B) */\n  {0xCA, 0xCA, 0xCA}, /* 28 (1C) */\n  {0xDF, 0xDF, 0xDF}, /* 29 (1D) */\n  {0xEF, 0xEF, 0xEF}, /* 30 (1E) */\n  {0xFF, 0xFF, 0xFF}, /* 31 (1F) */\n  /* High Intensity group - 72 colors in 1/3 saturation groups (20H-37H high) */\n  {0x00, 0x00, 0xFF}, /* 32 (20) */\n  {0x41, 0x00, 0xFF}, /* 33 (21) */\n  {0x82, 0x00, 0xFF}, /* 34 (22) */\n  {0xBE, 0x00, 0xFF}, /* 35 (23) */\n  {0xFF, 0x00, 0xFF}, /* 36 (24) */\n  {0xFF, 0x00, 0xBE}, /* 37 (25) */\n  {0xFF, 0x00, 0x82}, /* 38 (26) */\n  {0xFF, 0x00, 0x41}, /* 39 (27) */\n  {0xFF, 0x00, 0x00}, /* 40 (28) */\n  {0xFF, 0x41, 0x00}, /* 41 (29) */\n  {0xFF, 0x82, 0x00}, /* 42 (2A) */\n  {0xFF, 0xBE, 0x00}, /* 43 (2B) */\n  {0xFF, 0xFF, 0x00}, /* 44 (2C) */\n  {0xBE, 0xFF, 0x00}, /* 45 (2D) */\n  {0x82, 0xFF, 0x00}, /* 46 (2E) */\n  {0x41, 0xFF, 0x00}, /* 47 (2F) */\n  {0x00, 0xFF, 0x00}, /* 48 (30) */\n  {0x00, 0xFF, 0x41}, /* 49 (31) */\n  {0x00, 0xFF, 0x82}, /* 50 (32) */\n  {0x00, 0xFF, 0xBE}, /* 51 (33) */\n  {0x00, 0xFF, 0xFF}, /* 52 (34) */\n  {0x00, 0xBE, 0xFF}, /* 53 (35) */\n  {0x00, 0x82, 0xFF}, /* 54 (36) */\n  {0x00, 0x41, 0xFF}, /* 55 (37) */\n  /* High Intensity group - 72 colors in 2/3 saturation groups (38H-4FH moderate) */\n  {0x82, 0x82, 0xFF}, /* 56 (38) */\n  {0x9E, 0x82, 0xFF}, /* 57 (39) */\n  {0xBE, 0x82, 0xFF}, /* 58 (3A) */\n  {0xDF, 0x82, 0xFF}, /* 59 (3B) */\n  {0xFF, 0x82, 0xFF}, /* 60 (3C) */\n  {0xFF, 0x82, 0xDF}, /* 61 (3D) */\n  {0xFF, 0x82, 0xBE}, /* 62 (3E) */\n  {0xFF, 0x82, 0x9E}, /* 63 (3F) */\n  {0xFF, 0x82, 0x82}, /* 64 (40) */\n  {0xFF, 0x9E, 0x82}, /* 65 (41) */\n  {0xFF, 0xBE, 0x82}, /* 66 (42) */\n  {0xFF, 0xDF, 0x82}, /* 67 (43) */\n  {0xFF, 0xFF, 0x82}, /* 68 (44) */\n  {0xDF, 0xFF, 0x82}, /* 69 (45) */\n  {0xBE, 0xFF, 0x82}, /* 70 (46) */\n  {0x9E, 0xFF, 0x82}, /* 71 (47) */\n  {0x82, 0xFF, 0x82}, /* 72 (48) */\n  {0x82, 0xFF, 0x9E}, /* 73 (49) */\n  {0x82, 0xFF, 0xBE}, /* 74 (4A) */\n  {0x82, 0xFF, 0xDF}, /* 75 (4B) */\n  {0x82, 0xFF, 0xFF}, /* 76 (4C) */\n  {0x82, 0xDF, 0xFF}, /* 77 (4D) */\n  {0x82, 0xBE, 0xFF}, /* 78 (4E) */\n  {0x82, 0x9E, 0xFF}, /* 79 (4F) */\n  /* High Intensity group - 72 colors in 3/3 saturation groups (50H-67H low) */\n  {0xBA, 0xBA, 0xFF}, /* 80 (50) */\n  {0xCA, 0xBA, 0xFF}, /* 81 (51) */\n  {0xDF, 0xBA, 0xFF}, /* 82 (52) */\n  {0xEF, 0xBA, 0xFF}, /* 83 (53) */\n  {0xFF, 0xBA, 0xFF}, /* 84 (54) */\n  {0xFF, 0xBA, 0xEF}, /* 85 (55) */\n  {0xFF, 0xBA, 0xDF}, /* 86 (56) */\n  {0xFF, 0xBA, 0xCA}, /* 87 (57) */\n  {0xFF, 0xBA, 0xBA}, /* 88 (58) */\n  {0xFF, 0xCA, 0xBA}, /* 89 (59) */\n  {0xFF, 0xDF, 0xBA}, /* 90 (5A) */\n  {0xFF, 0xEF, 0xBA}, /* 91 (5B) */\n  {0xFF, 0xFF, 0xBA}, /* 92 (5C) */\n  {0xEF, 0xFF, 0xBA}, /* 93 (5D) */\n  {0xDF, 0xFF, 0xBA}, /* 94 (5E) */\n  {0xCA, 0xFF, 0xBA}, /* 95 (5F) */\n  {0xBA, 0xFF, 0xBA}, /* 96 (60) */\n  {0xBA, 0xFF, 0xCA}, /* 97 (61) */\n  {0xBA, 0xFF, 0xDF}, /* 98 (62) */\n  {0xBA, 0xFF, 0xEF}, /* 99 (63) */\n  {0xBA, 0xFF, 0xFF}, /* 100 (64) */\n  {0xBA, 0xEF, 0xFF}, /* 101 (65) */\n  {0xBA, 0xDF, 0xFF}, /* 102 (66) */\n  {0xBA, 0xCA, 0xFF}, /* 103 (67) */\n  /* Medium Intensity group - 72 colors in 1/3 saturation groups (68H-7FH high) */\n  {0x00, 0x00, 0x71}, /* 104 (68) */\n  {0x1C, 0x00, 0x71}, /* 105 (69) */\n  {0x39, 0x00, 0x71}, /* 106 (6A) */\n  {0x55, 0x00, 0x71}, /* 107 (6B) */\n  {0x71, 0x00, 0x71}, /* 108 (6C) */\n  {0x71, 0x00, 0x55}, /* 109 (6D) */\n  {0x71, 0x00, 0x39}, /* 110 (6E) */\n  {0x71, 0x00, 0x1C}, /* 111 (6F) */\n  {0x71, 0x00, 0x00}, /* 112 (70) */\n  {0x71, 0x1C, 0x00}, /* 113 (71) */\n  {0x71, 0x39, 0x00}, /* 114 (72) */\n  {0x71, 0x55, 0x00}, /* 115 (73) */\n  {0x71, 0x71, 0x00}, /* 116 (74) */\n  {0x55, 0x71, 0x00}, /* 117 (75) */\n  {0x39, 0x71, 0x00}, /* 118 (76) */\n  {0x1C, 0x71, 0x00}, /* 119 (77) */\n  {0x00, 0x71, 0x00}, /* 120 (78) */\n  {0x00, 0x71, 0x1C}, /* 121 (79) */\n  {0x00, 0x71, 0x39}, /* 122 (7A) */\n  {0x00, 0x71, 0x55}, /* 123 (7B) */\n  {0x00, 0x71, 0x71}, /* 124 (7C) */\n  {0x00, 0x55, 0x71}, /* 125 (7D) */\n  {0x00, 0x39, 0x71}, /* 126 (7E) */\n  {0x00, 0x1C, 0x71}, /* 127 (7F) */\n  /* Medium Intensity group - 72 colors in 2/3 saturation groups (80H-97H moderate) */\n  {0x39, 0x39, 0x71}, /* 128 (80) */\n  {0x45, 0x39, 0x71}, /* 129 (81) */\n  {0x55, 0x39, 0x71}, /* 130 (82) */\n  {0x61, 0x39, 0x71}, /* 131 (83) */\n  {0x71, 0x39, 0x71}, /* 132 (84) */\n  {0x71, 0x39, 0x61}, /* 133 (85) */\n  {0x71, 0x39, 0x55}, /* 134 (86) */\n  {0x71, 0x39, 0x45}, /* 135 (87) */\n  {0x71, 0x39, 0x39}, /* 136 (88) */\n  {0x71, 0x45, 0x39}, /* 137 (89) */\n  {0x71, 0x55, 0x39}, /* 138 (8A) */\n  {0x71, 0x61, 0x39}, /* 139 (8B) */\n  {0x71, 0x71, 0x39}, /* 140 (8C) */\n  {0x61, 0x71, 0x39}, /* 141 (8D) */\n  {0x55, 0x71, 0x39}, /* 142 (8E) */\n  {0x45, 0x71, 0x39}, /* 143 (8F) */\n  {0x39, 0x71, 0x39}, /* 144 (90) */\n  {0x39, 0x71, 0x45}, /* 145 (91) */\n  {0x39, 0x71, 0x55}, /* 146 (92) */\n  {0x39, 0x71, 0x61}, /* 147 (93) */\n  {0x39, 0x71, 0x71}, /* 148 (94) */\n  {0x39, 0x61, 0x71}, /* 149 (95) */\n  {0x39, 0x55, 0x71}, /* 150 (96) */\n  {0x39, 0x45, 0x71}, /* 151 (97) */\n  /* Medium Intensity group - 72 colors in 3/3 saturation groups (98H-AFH low) */\n  {0x51, 0x51, 0x71}, /* 152 (98) */\n  {0x59, 0x51, 0x71}, /* 153 (99) */\n  {0x61, 0x51, 0x71}, /* 154 (9A) */\n  {0x69, 0x51, 0x71}, /* 155 (9B) */\n  {0x71, 0x51, 0x71}, /* 156 (9C) */\n  {0x71, 0x51, 0x69}, /* 157 (9D) */\n  {0x71, 0x51, 0x61}, /* 158 (9E) */\n  {0x71, 0x51, 0x59}, /* 159 (9F) */\n  {0x71, 0x51, 0x51}, /* 160 (A0) */\n  {0x71, 0x59, 0x51}, /* 161 (A1) */\n  {0x71, 0x61, 0x51}, /* 162 (A2) */\n  {0x71, 0x69, 0x51}, /* 163 (A3) */\n  {0x71, 0x71, 0x51}, /* 164 (A4) */\n  {0x69, 0x71, 0x51}, /* 165 (A5) */\n  {0x61, 0x71, 0x51}, /* 166 (A6) */\n  {0x59, 0x71, 0x51}, /* 167 (A7) */\n  {0x51, 0x71, 0x51}, /* 168 (A8) */\n  {0x51, 0x71, 0x59}, /* 169 (A9) */\n  {0x51, 0x71, 0x61}, /* 170 (AA) */\n  {0x51, 0x71, 0x69}, /* 171 (AB) */\n  {0x51, 0x71, 0x71}, /* 172 (AC) */\n  {0x51, 0x69, 0x71}, /* 173 (AD) */\n  {0x51, 0x61, 0x71}, /* 174 (AE) */\n  {0x51, 0x59, 0x71}, /* 175 (AF) */\n  /* Low Intensity group - 72 colors in 1/3 saturation groups (B0H-C7H high) */\n  {0x00, 0x00, 0x41}, /* 176 (B0) */\n  {0x10, 0x00, 0x41}, /* 177 (B1) */\n  {0x20, 0x00, 0x41}, /* 178 (B2) */\n  {0x31, 0x00, 0x41}, /* 179 (B3) */\n  {0x41, 0x00, 0x41}, /* 180 (B4) */\n  {0x41, 0x00, 0x31}, /* 181 (B5) */\n  {0x41, 0x00, 0x20}, /* 182 (B6) */\n  {0x41, 0x00, 0x10}, /* 183 (B7) */\n  {0x41, 0x00, 0x00}, /* 184 (B8) */\n  {0x41, 0x10, 0x00}, /* 185 (B9) */\n  {0x41, 0x20, 0x00}, /* 186 (BA) */\n  {0x41, 0x31, 0x00}, /* 187 (BB) */\n  {0x41, 0x41, 0x00}, /* 188 (BC) */\n  {0x31, 0x41, 0x00}, /* 189 (BD) */\n  {0x20, 0x41, 0x00}, /* 190 (BE) */\n  {0x10, 0x41, 0x00}, /* 191 (BF) */\n  {0x00, 0x41, 0x00}, /* 192 (C0) */\n  {0x00, 0x41, 0x10}, /* 193 (C1) */\n  {0x00, 0x41, 0x20}, /* 194 (C2) */\n  {0x00, 0x41, 0x31}, /* 195 (C3) */\n  {0x00, 0x41, 0x41}, /* 196 (C4) */\n  {0x00, 0x31, 0x41}, /* 197 (C5) */\n  {0x00, 0x20, 0x41}, /* 198 (C6) */\n  {0x00, 0x10, 0x41}, /* 199 (C7) */\n  /* Low Intensity group - 72 colors in 2/3 saturation groups (C8H-DFH moderate) */\n  {0x20, 0x20, 0x41}, /* 200 (C8) */\n  {0x28, 0x20, 0x41}, /* 201 (C9) */\n  {0x31, 0x20, 0x41}, /* 202 (CA) */\n  {0x39, 0x20, 0x41}, /* 203 (CB) */\n  {0x41, 0x20, 0x41}, /* 204 (CC) */\n  {0x41, 0x20, 0x39}, /* 205 (CD) */\n  {0x41, 0x20, 0x31}, /* 206 (CE) */\n  {0x41, 0x20, 0x28}, /* 207 (CF) */\n  {0x41, 0x20, 0x20}, /* 208 (D0) */\n  {0x41, 0x28, 0x20}, /* 209 (D1) */\n  {0x41, 0x31, 0x20}, /* 210 (D2) */\n  {0x41, 0x39, 0x20}, /* 211 (D3) */\n  {0x41, 0x41, 0x20}, /* 212 (D4) */\n  {0x39, 0x41, 0x20}, /* 213 (D5) */\n  {0x31, 0x41, 0x20}, /* 214 (D6) */\n  {0x28, 0x41, 0x20}, /* 215 (D7) */\n  {0x20, 0x41, 0x20}, /* 216 (D8) */\n  {0x20, 0x41, 0x28}, /* 217 (D9) */\n  {0x20, 0x41, 0x31}, /* 218 (DA) */\n  {0x20, 0x41, 0x39}, /* 219 (DB) */\n  {0x20, 0x41, 0x41}, /* 220 (DC) */\n  {0x20, 0x39, 0x41}, /* 221 (DD) */\n  {0x20, 0x31, 0x41}, /* 222 (DE) */\n  {0x20, 0x28, 0x41}, /* 223 (DF) */\n  /* Low Intensity group - 72 colors in 3/3 saturation groups (E0H-F7H low) */\n  {0x2D, 0x2D, 0x41}, /* 223 (E0) */\n  {0x31, 0x2D, 0x41}, /* 224 (E1) */\n  {0x35, 0x2D, 0x41}, /* 225 (E2) */\n  {0x3D, 0x2D, 0x41}, /* 226 (E3) */\n  {0x41, 0x2D, 0x41}, /* 227 (E4) */\n  {0x41, 0x2D, 0x3D}, /* 228 (E5) */\n  {0x41, 0x2D, 0x35}, /* 229 (E6) */\n  {0x41, 0x2D, 0x31}, /* 230 (E7) */\n  {0x41, 0x2D, 0x2D}, /* 231 (E8) */\n  {0x41, 0x31, 0x2D}, /* 232 (E9) */\n  {0x41, 0x35, 0x2D}, /* 233 (EA) */\n  {0x41, 0x3D, 0x2D}, /* 234 (EB) */\n  {0x41, 0x41, 0x2D}, /* 235 (EC) */\n  {0x3D, 0x41, 0x2D}, /* 236 (ED) */\n  {0x35, 0x41, 0x2D}, /* 237 (EE) */\n  {0x31, 0x41, 0x2D}, /* 238 (EF) */\n  {0x2D, 0x41, 0x2D}, /* 239 (F0) */\n  {0x2D, 0x41, 0x31}, /* 240 (F1) */\n  {0x2D, 0x41, 0x35}, /* 241 (F2) */\n  {0x2D, 0x41, 0x3D}, /* 242 (F3) */\n  {0x2D, 0x41, 0x41}, /* 243 (F4) */\n  {0x2D, 0x3D, 0x41}, /* 244 (F5) */\n  {0x2D, 0x35, 0x41}, /* 245 (F6) */\n  {0x2D, 0x31, 0x41}, /* 246 (F7) */\n  /* Fill up remainder of palettes with black */\n  {0,0,0}\n};\n\n/*\n *  Mode 18 Default Color Register Setting\n *  DAC palette registers, converted from actual 18 bit color to 24.\n *\n *  This palette is the dos default, converted from 18 bit color to 24.\n *  It contains only 64 entries of colors--all others are zeros.\n *      --Robert 'Admiral' Coeyman\n */\nstatic PALETTEENTRY vga_def64_palette[256]={\n/* red  green  blue */\n  {0x00, 0x00, 0x00}, /* 0x00      Black      */\n  {0x00, 0x00, 0xaa}, /* 0x01      Blue       */\n  {0x00, 0xaa, 0x00}, /* 0x02      Green      */\n  {0x00, 0xaa, 0xaa}, /* 0x03      Cyan       */\n  {0xaa, 0x00, 0x00}, /* 0x04      Red        */\n  {0xaa, 0x00, 0xaa}, /* 0x05      Magenta    */\n  {0xaa, 0xaa, 0x00}, /* 0x06      */\n  {0xaa, 0xaa, 0xaa}, /* 0x07      White (Light Gray) */\n  {0x00, 0x00, 0x55}, /* 0x08      */\n  {0x00, 0x00, 0xff}, /* 0x09      */\n  {0x00, 0xaa, 0x55}, /* 0x0a      */\n  {0x00, 0xaa, 0xff}, /* 0x0b      */\n  {0xaa, 0x00, 0x55}, /* 0x0c      */\n  {0xaa, 0x00, 0xff}, /* 0x0d      */\n  {0xaa, 0xaa, 0x55}, /* 0x0e      */\n  {0xaa, 0xaa, 0xff}, /* 0x0f      */\n  {0x00, 0x55, 0x00}, /* 0x10      */\n  {0x00, 0x55, 0xaa}, /* 0x11      */\n  {0x00, 0xff, 0x00}, /* 0x12      */\n  {0x00, 0xff, 0xaa}, /* 0x13      */\n  {0xaa, 0x55, 0x00}, /* 0x14      Brown      */\n  {0xaa, 0x55, 0xaa}, /* 0x15      */\n  {0xaa, 0xff, 0x00}, /* 0x16      */\n  {0xaa, 0xff, 0xaa}, /* 0x17      */\n  {0x00, 0x55, 0x55}, /* 0x18      */\n  {0x00, 0x55, 0xff}, /* 0x19      */\n  {0x00, 0xff, 0x55}, /* 0x1a      */\n  {0x00, 0xff, 0xff}, /* 0x1b      */\n  {0xaa, 0x55, 0x55}, /* 0x1c      */\n  {0xaa, 0x55, 0xff}, /* 0x1d      */\n  {0xaa, 0xff, 0x55}, /* 0x1e      */\n  {0xaa, 0xff, 0xff}, /* 0x1f      */\n  {0x55, 0x00, 0x00}, /* 0x20      */\n  {0x55, 0x00, 0xaa}, /* 0x21      */\n  {0x55, 0xaa, 0x00}, /* 0x22      */\n  {0x55, 0xaa, 0xaa}, /* 0x23      */\n  {0xff, 0x00, 0x00}, /* 0x24      */\n  {0xff, 0x00, 0xaa}, /* 0x25      */\n  {0xff, 0xaa, 0x00}, /* 0x26      */\n  {0xff, 0xaa, 0xaa}, /* 0x27      */\n  {0x55, 0x00, 0x55}, /* 0x28      */\n  {0x55, 0x00, 0xff}, /* 0x29      */\n  {0x55, 0xaa, 0x55}, /* 0x2a      */\n  {0x55, 0xaa, 0xff}, /* 0x2b      */\n  {0xff, 0x00, 0x55}, /* 0x2c      */\n  {0xff, 0x00, 0xff}, /* 0x2d      */\n  {0xff, 0xaa, 0x55}, /* 0x2e      */\n  {0xff, 0xaa, 0xff}, /* 0x2f      */\n  {0x55, 0x55, 0x00}, /* 0x30      */\n  {0x55, 0x55, 0xaa}, /* 0x31      */\n  {0x55, 0xff, 0x00}, /* 0x32      */\n  {0x55, 0xff, 0xaa}, /* 0x33      */\n  {0xff, 0x55, 0x00}, /* 0x34      */\n  {0xff, 0x55, 0xaa}, /* 0x35      */\n  {0xff, 0xff, 0x00}, /* 0x36      */\n  {0xff, 0xff, 0xaa}, /* 0x37      */\n  {0x55, 0x55, 0x55}, /* 0x38      Dark Gray     */\n  {0x55, 0x55, 0xff}, /* 0x39      Light Blue    */\n  {0x55, 0xff, 0x55}, /* 0x3a      Light Green   */\n  {0x55, 0xff, 0xff}, /* 0x3b      Light Cyan    */\n  {0xff, 0x55, 0x55}, /* 0x3c      Light Red     */\n  {0xff, 0x55, 0xff}, /* 0x3d      Light Magenta */\n  {0xff, 0xff, 0x55}, /* 0x3e      Yellow        */\n  {0xff, 0xff, 0xff}, /* 0x3f      White         */\n  {0,0,0} /* The next 192 entries are all zeros  */\n};\n\nstatic HANDLE VGA_timer;\nstatic HANDLE VGA_timer_thread;\n\n/* set the timer rate; called in the polling thread context */\nstatic void CALLBACK set_timer_rate( ULONG_PTR arg )\n{\n    LARGE_INTEGER when;\n\n    when.u.LowPart = when.u.HighPart = 0;\n    SetWaitableTimer( VGA_timer, &when, arg, VGA_Poll, 0, FALSE );\n}\n\nstatic DWORD CALLBACK VGA_TimerThread( ULONG_PTR Rate )\n{\n    set_timer_rate(Rate);\n    for (;;) SleepEx( INFINITE, TRUE );\n    return 0;\n}\n\nstatic void VGA_DeinstallTimer(void)\n{\n    if (VGA_timer_thread)\n    {\n        /*\n         * Make sure the update thread is not holding\n         * system resources when we kill it.\n         *\n         * Now, we only need to worry about update thread\n         * getting terminated while in EnterCriticalSection \n         * or WaitForMultipleObjectsEx.\n         *\n         * FIXME: Is this a problem?\n         */\n        EnterCriticalSection(&vga_lock);\n\n        CancelWaitableTimer( VGA_timer );\n        CloseHandle( VGA_timer );\n        QueueUserAPC(ExitThread, VGA_timer_thread, 0);\n        LeaveCriticalSection(&vga_lock); /* !! */\n        WaitForSingleObject(VGA_timer_thread, INFINITE);\n        EnterCriticalSection(&vga_lock);\n        CloseHandle( VGA_timer_thread );\n        VGA_timer_thread = 0;\n\n        LeaveCriticalSection(&vga_lock);\n\n        /*\n         * Synchronize display. This makes sure that\n         * changes to display become visible even if program \n         * terminates before update thread had time to run.\n         */\n        VGA_Poll( 0, 0, 0 );\n    }\n}\n\nstatic void VGA_InstallTimer(unsigned Rate)\n{\n    if (!VGA_timer_thread)\n    {\n        VGA_timer = CreateWaitableTimerA( NULL, FALSE, NULL );\n        /* Occasionally calling QueueUserAPC immediately after creating a thread will fail */\n        VGA_timer_thread = CreateThread( NULL, 0, VGA_TimerThread, (ULONG_PTR)Rate, 0, NULL );\n    }\n    else\n    {\n        QueueUserAPC( set_timer_rate, VGA_timer_thread, (ULONG_PTR)Rate );\n    }\n}\n\nstatic BOOL VGA_IsTimerRunning(void)\n{\n    return VGA_timer_thread != 0;\n}\n\nstatic HANDLE VGA_AlphaConsole(void)\n{\n    /* this assumes that no Win32 redirection has taken place, but then again,\n     * only 16-bit apps are likely to use this part of Wine... */\n    return GetStdHandle(STD_OUTPUT_HANDLE);\n}\n\nstatic char*VGA_AlphaBuffer(void)\n{\n    return (char *)0xb8000 + (size_t)DOSMEM_dosmem;\n}\n\n/*** GRAPHICS MODE ***/\n\ntypedef struct {\n  unsigned Xres, Yres, Depth;\n  BOOL ret;\n} ModeSet;\n\n\n/**********************************************************************\n *         VGA_SyncWindow\n *\n * Copy VGA window into framebuffer (if argument is TRUE) or\n * part of framebuffer into VGA window (if argument is FALSE).\n */\nstatic void VGA_SyncWindow( BOOL target_is_fb )\n{\n    int size = vga_fb_window_size;\n\n    /* Window does not overlap framebuffer. */\n    if (vga_fb_window >= vga_fb_size)\n        return;\n\n    /* Check if window overlaps framebuffer only partially. */\n    if (vga_fb_size - vga_fb_window < vga_fb_window_size)\n        size = vga_fb_size - vga_fb_window;\n\n    if (target_is_fb)\n        memmove( vga_fb_data + vga_fb_window, vga_fb_window_data, size );\n    else\n        memmove( vga_fb_window_data, vga_fb_data + vga_fb_window, size );\n}\n\n\nstatic void WINAPI VGA_DoExit(ULONG_PTR arg)\n{\n    VGA_DeinstallTimer();\n    DestroyWindow(vga_hwnd);\n    vga_hwnd = NULL;\n    VirtualFree(vga_fb_data, 0, MEM_RELEASE);\n    vga_fb_data = NULL;\n}\n\nModeSet vga_mode;\nHDC vga_dc;\nHBITMAP vga_bitmap;\nPALETTEENTRY *vga_palette;\nstatic void WINAPI VGA_DoSetMode(ULONG_PTR arg)\n{\n    HRESULT\tres;\n    ModeSet *par = (ModeSet *)arg;\n    LPLOGPALETTE pal;\n    BITMAPINFO binfo = { 0 };\n    par->ret = FALSE;\n    vga_mode = *par;\n\n    if (vga_hwnd) VGA_DoExit(0);\n    if (!vga_hwnd)\n    {\n        vga_retrace_vertical = vga_retrace_horizontal = FALSE;\n        /* poll every 20ms (50fps should provide adequate responsiveness) */\n        VGA_InstallTimer(20);\n    }\n    par->ret = TRUE;\n    return;\n}\n\n/**********************************************************************\\\n* VGA_GetModeInfo\n*\n* Returns mode information, given mode number\n\\**********************************************************************/\nconst VGA_MODE *VGA_GetModeInfo(WORD mode)\n{\n    const VGA_MODE *ModeInfo = VGA_modelist;\n\n    /*\n     * Filter out flags.\n     */\n    mode &= 0x17f;\n\n    while (ModeInfo->Mode != 0xffff)\n    {\n        if (ModeInfo->Mode == mode)\n            return ModeInfo;\n        ModeInfo++;\n    }\n    return NULL;\n}\n\nstatic BOOL VGA_SetGraphicMode(WORD mode)\n{\n    ModeSet par;\n    int     newSize;\n\n    /* get info on VGA mode & set appropriately */\n    const VGA_MODE *ModeInfo = VGA_GetModeInfo(VGA_CurrentMode);\n    /* check if we're assuming composite display */\n    if ((mode == 6) && (CGA_ColorComposite))\n    {\n       vga_fb_width = (ModeInfo->Width / 4);\n       vga_fb_height = ModeInfo->Height;\n       vga_fb_depth = (ModeInfo->Depth * 4);\n    }\n    else\n    {\n       vga_fb_width = ModeInfo->Width;\n       vga_fb_height = ModeInfo->Height;\n       vga_fb_depth = ModeInfo->Depth;\n    }\n    vga_fb_offset = 0;\n    vga_fb_pitch = vga_fb_width * ((vga_fb_depth + 7) / 8);\n\n    newSize = vga_fb_width * vga_fb_height * ((vga_fb_depth + 7) / 8);\n    if(newSize < 256 * 1024)\n      newSize = 256 * 1024;\n\n    if(vga_fb_width >= 640 || vga_fb_height >= 480) {\n      par.Xres = vga_fb_width;\n      par.Yres = vga_fb_height;\n    } else {\n      par.Xres = vga_fb_width;\n      par.Yres = vga_fb_height;\n    }\n\n    /* Setup window */\n    if(vga_fb_depth >= 8)\n    {\n      vga_fb_window_data = (SIZE_T)DOSMEM_dosmem + VGA_WINDOW_START;\n      vga_fb_window_size = VGA_WINDOW_SIZE;\n      vga_fb_palette = vga_def_palette;\n      vga_fb_palette_size = 256;\n    }\n    else\n    {\n      vga_fb_window_data = (SIZE_T)DOSMEM_dosmem + CGA_WINDOW_START;\n      vga_fb_window_size = CGA_WINDOW_SIZE;\n      if(vga_fb_depth == 2)\n      {\n        /* Select default 2 bit CGA palette */\n        vga_fb_palette = cga_palette1;\n        vga_fb_palette_size = 4;\n      }\n      else\n      {\n        /* Top of VGA palette is same as 4 bit CGA palette */\n        vga_fb_palette = vga_def_palette;\n        vga_fb_palette_size = 16;\n      }\n\n      vga_fb_palette_index = 0;\n      vga_fb_bright = 0;\n    }\n\n    /* Clean the HW buffer */\n    memset(vga_fb_window_data, 0x00, vga_fb_window_size);\n\n    /* Reset window start */\n    VGA_SetWindowStart(0);\n\n    par.Depth = (vga_fb_depth < 8) ? 8 : vga_fb_depth;\n\n    if (vga_palette)\n        HeapFree(GetProcessHeap(), 0, vga_palette);\n    vga_palette = HeapAlloc(GetProcessHeap(), 0, sizeof(PALETTEENTRY) * vga_fb_palette_size);\n    memcpy(vga_palette, vga_fb_palette, sizeof(PALETTEENTRY) * vga_fb_palette_size);\n    MZ_RunInThread(VGA_DoSetMode, (ULONG_PTR)&par);\n    return par.ret;\n}\n\nBOOL VGA_SetMode(WORD mode)\n{\n    const VGA_MODE *ModeInfo;\n    BIOSDATA *bda = DOSVM_BiosData();\n    /* get info on VGA mode & set appropriately */\n    VGA_CurrentMode = mode;\n    ModeInfo = VGA_GetModeInfo(VGA_CurrentMode);\n    /*\n     *  xxxxxxx1 = 80x25 text\n     *  xxxxxxx0 = 40x25 text (default)\n     *  xxxxxx1x = graphics (320x200)\n     *  xxxxxx0x = text\n     *  xxxxx1xx = B/W\n     *  xxxxx0xx = color\n     *  xxxx1xxx = enable video signal\n     *  xxx1xxxx = 640x200 B/W graphics\n     *  xx1xxxxx = blink\n     */\n    bda->VideoReg1 = 0;\n    bda->VideoReg1 |= ModeInfo->ModeType == TEXT;\n    bda->VideoReg1 |= ModeInfo->Width == 320 ? 2 : 0;\n    bda->VideoReg1 |= ModeInfo->ModeType == TEXT || ModeInfo->Colors == 1 ? 4 : 0;\n    bda->VideoReg1 |= ModeInfo->Width == 640 ? 16 : 0;\n\n    /* check if mode is supported */\n    if (ModeInfo->Supported)\n    {\n       FIXME(\"Setting VGA mode %i - Supported mode - Improve reporting of missing capabilities for modes & modetypes.\\n\", mode);\n    }\n    else\n    {\n       FIXME(\"Setting VGA mode %i - Unsupported mode - Will doubtfully work at all, but we'll try anyways.\\n\", mode);\n    }\n\n    /* set up graphic or text display */\n    if (ModeInfo->ModeType == TEXT)\n    {\n       VGA_SetAlphaMode(ModeInfo->TextCols, ModeInfo->TextRows);\n    }\n    else\n    {\n       return VGA_SetGraphicMode(mode);\n    }\n    return TRUE; /* assume all good & return TRUE */\n}\n\nBOOL VGA_GetMode(unsigned *Height, unsigned *Width, unsigned *Depth)\n{\n    if (!vga_hwnd) return FALSE;\n    if (Height)\n        *Height = vga_mode.Yres;\n    if (Width)\n        *Width = vga_mode.Xres;\n    if (Depth)\n        *Depth = vga_mode.Depth;\n    return TRUE;\n}\n\nstatic void VGA_Exit(void)\n{\n    if (vga_hwnd) MZ_RunInThread(VGA_DoExit, 0);\n}\n\nvoid VGA_SetPalette(PALETTEENTRY *pal, int start, int len)\n{\n    if (start < 0 || start + len > vga_fb_palette_size)\n    {\n        ERR(\"out of range\\n\");\n    }\n    if (!vga_palette)\n    {\n        ERR(\"vga_palette == NULL\\n\");\n        return NULL;\n    }\n    memcpy(vga_palette + start, pal, len * sizeof(*pal));\n}\n\n/* set a single [char wide] color in 16 color mode. */\nvoid VGA_SetColor16(int reg,int color)\n{\n    PALETTEENTRY *pal;\n\n    if (!vga_hwnd) return;\n    pal = &vga_def64_palette[color];\n    VGA_SetPalette(pal, reg, color);\n    vga_16_palette[reg]=(char)color;\n}\n\n/* Get a single [char wide] color in 16 color mode. */\nchar VGA_GetColor16(int reg)\n{\n\n    if (!vga_hwnd) return 0;\n    return vga_16_palette[reg];\n}\n\n/* set all 17 [char wide] colors at once in 16 color mode. */\nvoid VGA_Set16Palette(char *Table)\n{\n\tPALETTEENTRY *pal;\n\tint c;\n\n    if (!vga_hwnd) return;         /* return if we're in text only mode */\n    memcpy( Table, vga_16_palette, 17 ); /* copy the entries into the table */\n    for (c = 0; c < 17; c++) {                                /* 17 entries */\n        pal = &vga_def64_palette[(int)vga_16_palette[c]];  /* get color  */\n        VGA_SetPalette(pal, c, 1); /* set entry  */\n        TRACE(\"Palette register %d set to %d\\n\", c, (int)vga_16_palette[c]);\n    } /* end of the counting loop */\n}\n\n/* Get all 17 [ char wide ] colors at once in 16 color mode. */\nvoid VGA_Get16Palette(char *Table)\n{\n\n    if (!vga_hwnd) return;         /* return if we're in text only mode */\n    memcpy( vga_16_palette, Table, 17 ); /* copy the entries into the table */\n}\n\nSIZE_T bitmap_buffer_size;\nLPSTR bitmap_buffer;\nstatic LPSTR VGA_Lock(unsigned*Pitch,unsigned*Height,unsigned*Width,unsigned*Depth)\n{\n    BITMAPINFO binfo = { 0 };\n    binfo.bmiHeader.biSize = sizeof(binfo.bmiHeader);\n    binfo.bmiHeader.biWidth = vga_mode.Xres;\n    binfo.bmiHeader.biHeight = vga_mode.Yres;\n    binfo.bmiHeader.biPlanes = 1;\n    binfo.bmiHeader.biBitCount = 24;\n    if (!vga_hwnd) return NULL;\n    if (!bitmap_buffer)\n    {\n        bitmap_buffer = HeapAlloc(GetProcessHeap(), 0, vga_mode.Xres * vga_mode.Yres * 3);\n    }\n    if (!GetDIBits(vga_dc, vga_bitmap, 0, vga_mode.Yres, bitmap_buffer, &binfo, DIB_RGB_COLORS))\n    {\n        return NULL;\n    }\n    /* FIXME: padding */\n    *Pitch = binfo.bmiHeader.biWidth * 3;\n    VGA_GetMode(Height, Width, Depth);\n    return bitmap_buffer;\n}\n\nstatic void paint_bitmap();\nstatic void VGA_Unlock(void)\n{\n    BITMAPINFO binfo = { 0 };\n    binfo.bmiHeader.biSize = sizeof(binfo.bmiHeader);\n    binfo.bmiHeader.biWidth = vga_mode.Xres;\n    binfo.bmiHeader.biHeight = vga_mode.Yres;\n    binfo.bmiHeader.biPlanes = 1;\n    binfo.bmiHeader.biBitCount = 24;\n    if (!SetDIBits(vga_dc, vga_bitmap, 0, vga_mode.Yres, bitmap_buffer, &binfo, DIB_RGB_COLORS))\n    {\n        return;\n    }\n    paint_bitmap();\n}\nstatic void paint_bitmap()\n{\n    RECT rect;\n    int width, height;\n    int new_width, new_height;\n    double r = (double)vga_mode.Xres / vga_mode.Yres;\n    HDC dc = GetDC(vga_hwnd);\n    GetClientRect(vga_hwnd, &rect);\n    /* aspect */\n    width = rect.right - rect.left;\n    height = rect.bottom - rect.top;\n    if (width / r > height)\n    {\n        new_height = height;\n        new_width = height * r;\n        RECT frect = rect;\n        frect.left = 0;\n        frect.right = (width - new_width) / 2;\n        FillRect(dc, &frect, GetStockObject(DKGRAY_BRUSH));\n        frect.left = rect.right - (width - new_width) / 2;\n        frect.right = rect.right;\n        FillRect(dc, &frect, GetStockObject(DKGRAY_BRUSH));\n    }\n    else\n    {\n        new_width = width;\n        new_height = width / r;\n        RECT frect = rect;\n        frect.top = 0;\n        frect.bottom = (height - new_height) / 2;\n        FillRect(dc, &frect, GetStockObject(DKGRAY_BRUSH));\n        frect.top = rect.bottom - (height - new_height) / 2;\n        frect.bottom = rect.bottom;\n        FillRect(dc, &frect, GetStockObject(DKGRAY_BRUSH));\n    }\n    StretchBlt(dc, (width - new_width) / 2, (height - new_height) / 2, new_width, new_height, vga_dc, 0, 0, vga_mode.Xres, vga_mode.Yres, SRCCOPY);\n}\n\n/*\n * Set start of 64k window at 0xa0000 in bytes.\n * If value is -1, initialize color plane support.\n * If value is >= 0, window contains direct copy of framebuffer.\n */\nvoid VGA_SetWindowStart(int start)\n{\n    if(start == vga_fb_window)\n        return;\n\n    EnterCriticalSection(&vga_lock);\n\n    if(vga_fb_window == -1)\n        FIXME(\"Remove VGA memory emulation.\\n\");\n    else\n        VGA_SyncWindow( TRUE );\n\n    vga_fb_window = start;\n\n    if(vga_fb_window == -1)\n        FIXME(\"Install VGA memory emulation.\\n\");\n    else\n        VGA_SyncWindow( FALSE );\n\n    LeaveCriticalSection(&vga_lock);\n}\n\n/*\n * Get start of 64k window at 0xa0000 in bytes.\n * Value is -1 in color plane modes.\n */\nint VGA_GetWindowStart(void)\n{\n    return vga_fb_window;\n}\n\n\n/**********************************************************************\n *         VGA_DoShowMouse\n *\n * Callback for VGA_ShowMouse.\n */\nstatic void WINAPI VGA_DoShowMouse( ULONG_PTR show )\n{\n    INT rv;\n\n    do\n    {\n        rv = ShowCursor( show );\n    }\n    while( show ? (rv < 0) : (rv >= 0) );\n}\n\n\n/**********************************************************************\n *         VGA_ShowMouse\n *\n * If argument is TRUE, unconditionally show mouse cursor.\n * If argument is FALSE, unconditionally hide mouse cursor.\n * This only works in graphics mode.\n */\nvoid VGA_ShowMouse( BOOL show )\n{\n    if (vga_hwnd)\n        MZ_RunInThread( VGA_DoShowMouse, (ULONG_PTR)show );\n}\n\n\n/**********************************************************************\n *         VGA_UpdatePalette\n *\n * Update the current palette\n *\n * Note: When updating the current CGA palette, palette index 0\n * refers to palette2, and index 1 is palette1 (default palette)\n */\nvoid VGA_UpdatePalette(void)\n{\n  /* Figure out which palette is used now */\n  if(vga_fb_bright)\n  {\n    if(vga_fb_palette_index == 0)\n    {\n      vga_fb_palette = cga_palette2_bright;\n    }\n    else if(vga_fb_palette_index == 1)\n    {\n      vga_fb_palette = cga_palette1_bright;\n    }\n  }\n  else\n  {\n    if(vga_fb_palette_index == 0)\n    {\n      vga_fb_palette = cga_palette2;\n    }\n    else if(vga_fb_palette_index == 1)\n    {\n      vga_fb_palette = cga_palette1;\n    }\n  }\n\n  /* Now update the palette */\n  VGA_SetPalette(vga_fb_palette,0,4);\n}\n\n/**********************************************************************\n *         VGA_SetBright\n *\n * Select if using a \"bright\" palette or not.\n * This is a property of the CGA controller\n */\nvoid VGA_SetBright(BOOL bright)\n{\n  TRACE(\"%i\\n\", bright);\n\n  /* Remember the \"bright\" value used by the CGA controller */\n  vga_fb_bright = bright;\n}\n\n/**********************************************************************\n *         VGA_SetEnabled\n *\n * Select if output is enabled or disabled\n * This is a property of the CGA controller\n */\nstatic void VGA_SetEnabled(BOOL enabled)\n{\n  TRACE(\"%i\\n\", enabled);\n\n  /* Check if going from enabled to disabled */\n  if(vga_fb_enabled && !enabled)\n  {\n    /* Clear frame buffer */\n    memset(vga_fb_window_data, 0x00, vga_fb_window_size);\n  }\n\n  /* Remember the \"enabled\" value */\n  vga_fb_enabled = enabled;\n}\n\n/**********************************************************************\n *         VGA_SetPaletteIndex\n *\n * Select the index of the palette which is currently in use\n * This is a property of the CGA controller\n */\nvoid VGA_SetPaletteIndex(unsigned index)\n{\n  TRACE(\"%i\\n\", index);\n\n  /* Remember the palette index, which is only used by CGA for now */\n  vga_fb_palette_index = index;\n}\n\n/**********************************************************************\n *         VGA_WritePixel\n *\n * Write data to the framebuffer\n * This is a property of the CGA controller, but might be supported\n * later by other framebuffer types\n */\nvoid VGA_WritePixel(unsigned color, unsigned page, unsigned col, unsigned row)\n{\n  int off;\n  int bits;\n  int pos;\n\n  /* Calculate CGA byte offset */\n  char *data = vga_fb_window_data;\n  off = row & 1 ? (8 * 1024) : 0;\n  off += (80 * (row/2));\n  off += col/4;\n\n  /* Calculate bits offset */\n  pos = 6 - (col%4 * 2);\n\n  /* Clear current data */\n  bits = 0x03 << pos;\n  data[off] &= ~bits;\n\n  /* Set new data */\n  bits = color << pos;\n  data[off] |= bits;\n}\n\n/*** TEXT MODE ***/\n\n/* prepare the text mode video memory copy that is used to only\n * update the video memory line that did get updated. */\nstatic void VGA_PrepareVideoMemCopy(unsigned Xres, unsigned Yres)\n{\n    char *p, *p2;\n    unsigned int i;\n\n    /*\n     * Allocate space for char + attr.\n     */\n\n    if (vga_text_old)\n        vga_text_old = HeapReAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, \n                                vga_text_old, Xres * Yres * 2 );\n    else\n        vga_text_old = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, \n                                 Xres * Yres * 2 );\n    p = VGA_AlphaBuffer();\n    p2 = vga_text_old;\n\n    /* make sure the video mem copy contains the exact opposite of our\n     * actual text mode memory area to make sure the screen\n     * does get updated fully initially */\n    for (i=0; i < Xres*Yres*2; i++)\n\t*p2++ = *p++ ^ 0xff; /* XOR it */\n}\n\n/**********************************************************************\n *         VGA_SetAlphaMode\n *\n * Set VGA emulation to text mode.\n */\nvoid VGA_SetAlphaMode(unsigned Xres,unsigned Yres)\n{\n    VGA_Exit();\n    VGA_DeinstallTimer();\n    \n    VGA_PrepareVideoMemCopy(Xres, Yres);\n    vga_text_width = Xres;\n    vga_text_height = Yres;\n\n    if (vga_text_x >= vga_text_width || vga_text_y >= vga_text_height)\n        VGA_SetCursorPos(0,0);\n\n    if(vga_text_console) {\n        COORD size;\n        size.X = Xres;\n        size.Y = Yres;\n        SetConsoleScreenBufferSize( VGA_AlphaConsole(), size );\n\n        /* poll every 30ms (33fps should provide adequate responsiveness) */\n        VGA_InstallTimer(30);\n    }\n}\n\n/**********************************************************************\n *         VGA_InitAlphaMode\n *\n * Initialize VGA text mode handling and return default text mode.\n * This function does not set VGA emulation to text mode.\n */\nvoid VGA_InitAlphaMode(unsigned*Xres,unsigned*Yres)\n{\n    CONSOLE_SCREEN_BUFFER_INFO info;\n\n    if(GetConsoleScreenBufferInfo( VGA_AlphaConsole(), &info ))\n    {\n        vga_text_console = TRUE;\n        vga_text_x = info.dwCursorPosition.X;\n        vga_text_y = info.dwCursorPosition.Y;\n        vga_text_attr = info.wAttributes;\n        *Xres = info.dwSize.X;\n        *Yres = info.dwSize.Y;\n    } \n    else\n    {\n        vga_text_console = FALSE;\n        vga_text_x = 0;\n        vga_text_y = 0;\n        vga_text_attr = 0x0f;\n        *Xres = 80;\n        *Yres = 25;\n    }\n}\n\n/**********************************************************************\n *         VGA_GetAlphaMode\n *\n * Get current text mode. Returns TRUE and sets resolution if\n * any VGA text mode has been initialized.\n */\nBOOL VGA_GetAlphaMode(unsigned*Xres,unsigned*Yres)\n{\n    if (vga_text_width != 0 && vga_text_height != 0) {\n        *Xres = vga_text_width;\n        *Yres = vga_text_height;\n        return TRUE;\n    } else\n        return FALSE;\n}\n\nvoid VGA_SetCursorShape(unsigned char start_options, unsigned char end)\n{\n    CONSOLE_CURSOR_INFO cci;\n\n    /* standard cursor settings:\n     * 0x0607 == CGA, 0x0b0c == monochrome, 0x0d0e == EGA/VGA */\n\n    /* calculate percentage from bottom - assuming VGA (bottom 0x0e) */\n    cci.dwSize = ((end & 0x1f) - (start_options & 0x1f))/0x0e * 100;\n    if (!cci.dwSize) cci.dwSize++; /* NULL cursor would make SCCI() fail ! */\n    cci.bVisible = ((start_options & 0x60) != 0x20); /* invisible ? */\n\n    SetConsoleCursorInfo(VGA_AlphaConsole(),&cci);\n}\n\nvoid VGA_SetCursorPos(unsigned X,unsigned Y)\n{\n    vga_text_x = X;\n    vga_text_y = Y;\n}\n\nvoid VGA_GetCursorPos(unsigned*X,unsigned*Y)\n{\n    if (X) *X = vga_text_x;\n    if (Y) *Y = vga_text_y;\n}\n\nstatic void VGA_PutCharAt(unsigned x, unsigned y, BYTE ascii, int attr)\n{\n    const VGA_MODE *ModeInfo = VGA_GetModeInfo(VGA_CurrentMode);\n    if ( ModeInfo->ModeType == TEXT )\n    {\n       char *dat = VGA_AlphaBuffer() + ((vga_text_width * y + x) * 2);\n       dat[0] = ascii;\n       if (attr>=0)\n          dat[1] = attr;\n    }\n    else\n    {\n       FIXME(\"Write %c at (%i,%i) - not yet supported in graphic modes.\\n\", (char)ascii, x, y);\n    }\n}\n\nvoid VGA_WriteChars(unsigned X,unsigned Y,unsigned ch,int attr,int count)\n{\n    EnterCriticalSection(&vga_lock);\n\n    while (count--) \n        VGA_PutCharAt(X + count, Y, ch, attr);\n\n    LeaveCriticalSection(&vga_lock);\n}\n\nvoid VGA_PutChar(BYTE ascii)\n{\n    DWORD w;\n\n    EnterCriticalSection(&vga_lock);\n\n    switch(ascii) {\n    case '\\b':\n        if (vga_text_x)\n        {\n            vga_text_x--;\n            VGA_PutCharAt(vga_text_x, vga_text_y, ' ', 0);\n        }\n        break;\n\n    case '\\t':\n        vga_text_x += ((vga_text_x + 8) & ~7) - vga_text_x;\n        break;\n\n    case '\\n':\n        vga_text_y++;\n        vga_text_x = 0;\n        break;\n\n    case '\\a':\n        break;\n\n    case '\\r':\n        vga_text_x = 0;\n        break;\n\n    default:\n        VGA_PutCharAt(vga_text_x, vga_text_y, ascii, vga_text_attr);\n        vga_text_x++;\n    }\n\n    if (vga_text_x >= vga_text_width)\n    {\n        vga_text_x = 0;\n        vga_text_y++;\n    }\n\n    if (vga_text_y >= vga_text_height)\n    {\n        vga_text_y = vga_text_height - 1;\n        VGA_ScrollUpText( 0, 0, \n                          vga_text_height - 1, vga_text_width - 1, \n                          1, vga_text_attr );\n    }\n\n    /*\n     * If we don't have a console, write directly to standard output.\n     */\n    if(!vga_text_console)\n        WriteFile(VGA_AlphaConsole(), &ascii, 1, &w, NULL);\n\n    LeaveCriticalSection(&vga_lock);\n}\n\nvoid VGA_ClearText(unsigned row1, unsigned col1,\n                   unsigned row2, unsigned col2,\n                   BYTE attr)\n{\n    unsigned x, y;\n    const VGA_MODE *ModeInfo;\n\n    EnterCriticalSection(&vga_lock);\n    ModeInfo = VGA_GetModeInfo(VGA_CurrentMode);\n    if (ModeInfo->ModeType != TEXT)\n    {\n        FIXME(\"not yet supported in graphic modes.\\n\");\n        LeaveCriticalSection(&vga_lock);\n        return;\n    }\n\n    for(y=row1; y<=row2; y++)\n        for(x=col1; x<=col2; x++)\n            VGA_PutCharAt(x, y, 0x20, attr);\n\n    LeaveCriticalSection(&vga_lock);\n}\n\nvoid VGA_ScrollUpText(unsigned row1,  unsigned col1,\n                      unsigned row2,  unsigned col2,\n                      unsigned lines, BYTE attr)\n{\n    char    *buffer = VGA_AlphaBuffer();\n    unsigned y;\n\n    EnterCriticalSection(&vga_lock);\n\n    /*\n     * Scroll buffer.\n     */\n    for (y = row1; y <= row2 - lines; y++)\n        memmove( buffer + col1 + y * vga_text_width * 2,\n                 buffer + col1 + (y + lines) * vga_text_width * 2,\n                 (col2 - col1 + 1) * 2 );\n\n    /*\n     * Fill exposed lines.\n     */\n    for (y = max(row1, row2 - lines + 1); y <= row2; y++)\n        VGA_WriteChars( col1, y, ' ', attr, col2 - col1 + 1 );\n\n    LeaveCriticalSection(&vga_lock);\n}\n\nvoid VGA_ScrollDownText(unsigned row1,  unsigned col1,\n                        unsigned row2,  unsigned col2,\n                        unsigned lines, BYTE attr)\n{\n    char    *buffer = VGA_AlphaBuffer();\n    unsigned y;\n\n    EnterCriticalSection(&vga_lock);\n\n    /*\n     * Scroll buffer.\n     */\n    for (y = row2; y >= row1 + lines; y--)\n        memmove( buffer + col1 + y * vga_text_width * 2,\n                 buffer + col1 + (y - lines) * vga_text_width * 2,\n                 (col2 - col1 + 1) * 2 );\n\n    /*\n     * Fill exposed lines.\n     */\n    for (y = row1; y <= min(row1 + lines - 1, row2); y++)\n        VGA_WriteChars( col1, y, ' ', attr, col2 - col1 + 1 );\n\n    LeaveCriticalSection(&vga_lock);\n}\n\nvoid VGA_GetCharacterAtCursor(BYTE *ascii, BYTE *attr)\n{\n    char *dat;\n\n    dat = VGA_AlphaBuffer() + ((vga_text_width * vga_text_y + vga_text_x) * 2);\n\n    *ascii = dat[0];\n    *attr = dat[1];\n}\n\n\n/*** CONTROL ***/\n\n/* FIXME: optimize by doing this only if the data has actually changed\n *        (in a way similar to DIBSection, perhaps) */\nstatic void VGA_Poll_Graphics(void)\n{\n  unsigned int Pitch, Height, Width, X, Y;\n  char *surf;\n  BYTE *dat = vga_fb_data + vga_fb_offset;\n  int   bpp = (vga_fb_depth + 7) / 8;\n\n  surf = VGA_Lock(&Pitch,&Height,&Width,NULL);\n  if (!surf) return;\n\n  /*\n   * Synchronize framebuffer contents.\n   */\n  if (!(VGA_CurrentMode & 0x4000) && (vga_fb_window != -1))\n      VGA_SyncWindow( TRUE );\n\n  /*\n   * CGA framebuffer (160x200) - CGA_ColorComposite, special subtype of mode 6\n   * This buffer is encoded as following:\n   * - 4 bit pr. pixel, 2 pixels per byte\n   * - 80 bytes per row\n   * - Every second line has an offset of 8096\n   */\n  if(vga_fb_depth == 4 && vga_fb_width == 160 && vga_fb_height == 200){\n      FIXME(\"\\n\");\n    WORD off = 0;\n    BYTE bits = 4;\n    BYTE value;\n    for(Y=0; Y<vga_fb_height; Y++, surf+=(Pitch*2)){\n      for(X=0; X<vga_fb_width; X++){\n        off = Y & 1 ? (8 * 1024) : 0;\n        off += (80 * (Y/2));\n        off += X/2;\n        value = (dat[off] >> bits) & 0xF;\n        surf[(X*4)+0] = value;\n        surf[(X*4)+1] = value;\n        surf[(X*4)+2] = value;\n        surf[(X*4)+3] = value;\n        surf[(X*4)+Pitch+0] = value;\n        surf[(X*4)+Pitch+1] = value;\n        surf[(X*4)+Pitch+2] = value;\n        surf[(X*4)+Pitch+3] = value;\n        bits -= 4;\n        bits &= 7;\n      }\n    }\n  }\n\n  /*\n   * CGA framebuffer (320x200)\n   * This buffer is encoded as following:\n   * - 2 bits per color, 4 pixels per byte\n   * - 80 bytes per row\n   * - Every second line has an offset of 8096\n   */\n  else if(vga_fb_depth == 2 && vga_fb_width == 320 && vga_fb_height == 200){\n      FIXME(\"\\n\");\n    WORD off = 0;\n    BYTE bits = 6;\n    BYTE value;\n    /* Iterate over the rows */\n    for(Y=0; Y<vga_fb_height; Y++, surf+=(Pitch*2)){\n      for(X=0; X<vga_fb_width; X++){\n        off = Y & 1 ? (8 * 1024) : 0;\n        off += (80 * (Y/2));\n        off += X/4;\n        value = (dat[off] >> bits) & 0x3;\n        surf[(X*2)] = value;\n        surf[(X*2)+1] = value;\n        surf[(X*2)+Pitch] = value;\n        surf[(X*2)+Pitch+1] = value;\n        bits -= 2;\n        bits &= 7;\n      }\n    }\n  }\n\n  /*\n   * Double VGA framebuffer (320x200 -> 640x400), if needed.\n   */\n  else if(Height >= 2 * vga_fb_height && Width >= 2 * vga_fb_width && bpp == 1)\n  {\n    FIXME(\"\\n\");\n    for (Y=0; Y<vga_fb_height; Y++,surf+=Pitch*2,dat+=vga_fb_pitch)\n      for (X=0; X<vga_fb_width; X++) {\n       BYTE value = dat[X];\n       surf[X*2] = value;\n       surf[X*2+1] = value;\n       surf[X*2+Pitch] = value;\n       surf[X*2+Pitch+1] = value;\n      }\n  }\n  /*\n   * Linear Buffer, including mode 19\n   */\n  else\n  {\n      surf += Pitch * Height;\n      for (Y = 0; Y < Height; Y++)\n      {\n          surf -= Pitch;\n          for (X = 0; X < Width; X++)\n          {\n              PALETTEENTRY e = vga_palette[dat[X]];\n              surf[X * 3 + 0] = e.peBlue;\n              surf[X * 3 + 1] = e.peGreen;\n              surf[X * 3 + 2] = e.peRed;\n          }\n          dat += vga_fb_pitch;\n      }\n  }\n\n  VGA_Unlock();\n}\n\n/* https://en.wikipedia.org/wiki/Code_page_897 */\nstatic WCHAR cp932_table[] =\n{\n    /* 00 */ 0,\n    /* 01 */ 0x2554,\n    /* 02 */ 0x2557,\n    /* 03 */ 0x255a,\n    /* 04 */ 0x255d,\n    /* 05 */ 0x2551,\n    /* 06 */ 0x2550,\n    /* 07 */ 0xffec,\n    /* 08 */ 0,\n    /* 09 */ 0xffee,\n    /* 0a */ 0,\n    /* 0b */ 0x303f,\n    /* 0c */ 0,\n    /* 0d */ 0,\n    /* 0e */ 0xffed,\n    /* 0f */ 0x263c,\n    /* 10 */ 0x256c,\n    /* 11 */ 0,\n    /* 12 */ 0x2195,\n    /* 13 */ 0,\n    /* 14 */ 0x2593,\n    /* 15 */ 0x2569,\n    /* 16 */ 0x2566,\n    /* 17 */ 0x2563,\n    /* 18 */ 0,\n    /* 19 */ 0x2560,\n    /* 1a */ 0x2591,\n    /* 1b */ 0x21b5,\n    /* 1c */ 0xffea,\n    /* 1d */ 0xffe8,\n    /* 1e */ 0xffeb,\n    /* 1f */ 0xffe9,\n};\nstatic int detect_console(HANDLE con, int y, BOOL *is_raster_font)\n{\n    CHAR_INFO ch[2];\n    CHAR_INFO ch_read[2];\n    COORD siz, off;\n    SMALL_RECT dest;\n    ch[0].Char.UnicodeChar = 0x3042; /* HIRAGANA LETTER A */\n    ch[0].Attributes = COMMON_LVB_LEADING_BYTE;\n    ch[1].Char.UnicodeChar = 0x3042; /* HIRAGANA LETTER A */\n    ch[1].Attributes = COMMON_LVB_TRAILING_BYTE;\n    dest.Top = y;\n    dest.Bottom = y;\n    dest.Left = 0;\n    dest.Right = 2;\n    siz.X = 2;\n    siz.Y = 1;\n    off.X = 0;\n    off.Y = 0;\n    WriteConsoleOutputW(con, ch, siz, off, &dest);\n    ReadConsoleOutputW(con, ch_read, siz, off, &dest);\n    if (ch_read[1].Char.UnicodeChar == 0)\n    {\n        *is_raster_font = TRUE;\n    }\n}\nstatic void VGA_Poll_Text(void)\n{\n    unsigned char *dat, *old, *p_line;\n    unsigned int X, Y;\n    CHAR_INFO ch[256]; /* that should suffice for the largest text width */\n    WCHAR ch_char[256];\n    WORD ch_attr[256];\n    COORD siz, off;\n    SMALL_RECT dest;\n    HANDLE con = VGA_AlphaConsole();\n    BOOL linechanged = FALSE; /* video memory area differs from stored copy? */\n    UINT cp = GetConsoleCP();\n\n    /* Synchronize cursor position. */\n    off.X = vga_text_x;\n    off.Y = vga_text_y;\n    SetConsoleCursorPosition(con,off);\n\n    dat = VGA_AlphaBuffer();\n    old = vga_text_old; /* pointer to stored video mem copy */\n    siz.X = vga_text_width; siz.Y = 1;\n    off.X = 0; off.Y = 0;\n\n    if (cp == 932)\n    {\n        static BOOL console_detected;\n        static BOOL is_raster_font;\n        /* copy from virtual VGA frame buffer to console */\n        for (Y = 0; Y < vga_text_height; Y++)\n        {\n            COORD coord = { 0, Y };\n            DWORD written;\n            linechanged = memcmp(dat, old, vga_text_width * 2);\n            if (linechanged)\n            {\n                BOOL lead = FALSE;\n                int char_x = 0;\n                if (!console_detected)\n                {\n                    detect_console(con, Y, &is_raster_font);\n                    console_detected = TRUE;\n                }\n                /*TRACE(\"line %d changed\\n\", Y);*/\n                p_line = dat;\n                for (X = 0; X < vga_text_width; X++)\n                {\n                    char c[3];\n                    WCHAR wc;\n                    ch_char[char_x] = ch[X].Char.UnicodeChar = *p_line++;\n                    if (!ch_char[char_x])\n                        ch_char[char_x] = ch[X].Char.UnicodeChar = ' ';\n                    ch_attr[X] = ch[X].Attributes = *p_line++;\n                    if (lead)\n                    {\n                        c[0] = *(p_line - 4);\n                        c[1] = *(p_line - 2);\n                        c[2] = 0;\n                        MultiByteToWideChar(cp, 0, c, 2, &wc, 1);\n                        ch_char[char_x - 1] = wc;\n                        char_x--;\n                        ch[X - 1].Char.UnicodeChar = wc;\n                        ch[X - 1].Attributes |= COMMON_LVB_LEADING_BYTE;\n                        ch[X].Attributes |= COMMON_LVB_TRAILING_BYTE;\n                        ch[X].Char.UnicodeChar = wc;\n                        lead = FALSE;\n                    }\n                    else\n                    {\n                        if (!IsDBCSLeadByteEx(cp, ch_char[char_x]))\n                        {\n                            c[0] = ch_char[char_x];\n                            c[1] = 0;\n                            wc = c[0];\n                            MultiByteToWideChar(cp, 0, c, 1, &wc, 1);\n                            if (ARRAYSIZE(cp932_table) > wc)\n                            {\n                                wc = cp932_table[wc];\n                            }\n                            ch_char[char_x] = wc;\n                            ch[X].Char.UnicodeChar = wc;\n                        }\n                        else\n                        {\n                            lead = TRUE;\n                        }\n                    }\n                    char_x++;\n                }\n                ch_char[char_x] = 0;\n                dest.Top = Y; dest.Bottom = Y;\n                if (is_raster_font)\n                {\n                    WriteConsoleOutputCharacterW(con, ch_char, char_x, coord, &written);\n                    WriteConsoleOutputAttribute(con, ch_attr, vga_text_width, coord, &written);\n                }\n                else\n                {\n                    dest.Left = 0; dest.Right = vga_text_width + 1;\n                    WriteConsoleOutputW(con, ch, siz, off, &dest);\n                }\n                memcpy(old, dat, vga_text_width * 2);\n            }\n            /* advance to next text line */\n            dat += vga_text_width * 2;\n            old += vga_text_width * 2;\n        }\n        return;\n    }\n    /* copy from virtual VGA frame buffer to console */\n    for (Y=0; Y<vga_text_height; Y++) {\n\tlinechanged = memcmp(dat, old, vga_text_width*2);\n\tif (linechanged)\n\t{\n\t    /*TRACE(\"line %d changed\\n\", Y);*/\n\t    p_line = dat;\n            for (X=0; X<vga_text_width; X++) {\n                ch[X].Char.AsciiChar = *p_line++;\n                /* WriteConsoleOutputA doesn't like \"dead\" chars */\n                if (ch[X].Char.AsciiChar == '\\0')\n                    ch[X].Char.AsciiChar = ' ';\n                ch[X].Attributes = *p_line++;\n            }\n            dest.Top=Y; dest.Bottom=Y;\n            dest.Left=0; dest.Right=vga_text_width+1;\n            WriteConsoleOutputA(con, ch, siz, off, &dest);\n\t    memcpy(old, dat, vga_text_width*2);\n\t}\n\t/* advance to next text line */\n\tdat += vga_text_width*2;\n\told += vga_text_width*2;\n    }\n}\n\n\nstatic LRESULT WINAPI VGA_WindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)\n{\n    switch (Msg)\n    {\n    case WM_PAINT:\n        paint_bitmap();\n        return;\n    default:\n        break;\n    }\n    return DefWindowProcA(hWnd, Msg, wParam, lParam);\n}\nstatic DWORD WINAPI init_vga_window()\n{\n    WNDCLASSA wc = { 0 };\n    ModeSet *par = (ModeSet *)&vga_mode;\n    RECT rect = { 0, 0, par->Xres, par->Yres };\n    if (par->Xres == 0)\n        return;\n    if (vga_hwnd)\n        return 0;\n    wc.style = CS_HREDRAW | CS_VREDRAW | CS_NOCLOSE | CS_OWNDC;\n    wc.lpfnWndProc = VGA_WindowProc;\n    wc.hbrBackground = COLOR_WINDOW + 1;\n    wc.hCursor = LoadCursorA(NULL, IDC_ARROW);\n    wc.hInstance = GetModuleHandleA(NULL);\n    wc.lpszClassName = \"VGA\";\n    RegisterClassA(&wc);\n    AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW | WS_VISIBLE, FALSE);\n    vga_hwnd = CreateWindowExA(0, \"VGA\", \"VGA\", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 0,\n        rect.right - rect.left, rect.bottom - rect.top, 0, 0, 0, NULL);\n    if (!vga_hwnd)\n    {\n        ERR(\"Failed to create VGA window.\\n\");\n        return;\n    }\n    vga_dc = CreateCompatibleDC(GetDC(vga_hwnd));\n    vga_bitmap = CreateCompatibleBitmap(GetDC(NULL), par->Xres, par->Yres);\n    SelectObject(vga_dc, vga_bitmap);\n    if (!vga_fb_data)\n    {\n        vga_fb_data = VirtualAlloc(NULL, 4*1024*1024, MEM_COMMIT, PAGE_READWRITE);\n        vga_fb_size = 4*1024*1024;  // enough to fix largest resolution\n    }\n    if (!vga_bitmap)\n    {\n        ERR(\"Failed to create vga_bitmap\\n\");\n        return;\n    }\n    return 0;\n}\nstatic void CALLBACK VGA_Poll( LPVOID arg, DWORD low, DWORD high )\n{\n    MSG msg;\n    if (PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE))\n    {\n        TranslateMessage(&msg);\n        DispatchMessageW(&msg);\n    }\n    EnterCriticalSection(&vga_lock);\n\n    init_vga_window();\n    if (vga_hwnd)\n        VGA_Poll_Graphics();\n    else\n        VGA_Poll_Text();\n\n    /*\n     * Fake start of retrace.\n     */\n    vga_retrace_vertical = TRUE;\n\n    LeaveCriticalSection(&vga_lock);\n}\n\nstatic BYTE palreg,palcnt;\nstatic PALETTEENTRY paldat;\n\nvoid VGA_ioport_out( WORD port, BYTE val )\n{\n    switch (port) {\n        /* General Register - Feature Control */\n        case 0x3ba:\n           FIXME(\"Unsupported VGA register: general register - feature control 0x%04x (value 0x%02x)\\n\", port, val);\n           break;\n        /* Attribute Controller - Address/Other */\n        case 0x3c0:\n           if (vga_address_3c0)\n               vga_index_3c0 = val;\n           else\n               FIXME(\"Unsupported index, VGA attribute controller register 0x3c0: 0x%02x (value 0x%02x)\\n\",\n                     vga_index_3c0, val);\n           vga_address_3c0 = !vga_address_3c0;\n           break;\n        /* General Register - Misc output */\n        case 0x3c2:\n           FIXME(\"Unsupported VGA register: general register - misc output 0x%04x (value 0x%02x)\\n\", port, val);\n           break;\n        /* General Register - Video subsystem enable */\n        case 0x3c3:\n           FIXME(\"Unsupported VGA register: general register - video subsystem enable 0x%04x (value 0x%02x)\\n\", port, val);\n           break;\n        /* Sequencer Register - Address */\n        case 0x3c4:\n           vga_index_3c4 = val;\n           break;\n        /* Sequencer Register - Other */\n        case 0x3c5:\n          switch(vga_index_3c4) {\n               case 0x04: /* Sequencer: Memory Mode Register */\n                  if(vga_fb_depth == 8)\n                      VGA_SetWindowStart((val & 8) ? 0 : -1);\n                  else\n                      FIXME(\"Memory Mode Register not supported in this mode.\\n\");\n                  break;\n               default:\n                  FIXME(\"Unsupported index, VGA sequencer register 0x3c4: 0x%02x (value 0x%02x)\\n\",\n                        vga_index_3c4, val);\n           }\n           break;\n        case 0x3c8:\n            palreg=val; palcnt=0; break;\n        case 0x3c9:\n            ((BYTE*)&paldat)[palcnt++]=val << 2;\n            if (palcnt==3) {\n                VGA_SetPalette(&paldat,palreg++,1);\n                palcnt=0;\n            }\n            break;\n        /* Graphics Controller Register - Address */\n        case 0x3ce:\n            vga_index_3ce = val;\n           break;\n        /* Graphics Controller Register - Other */\n        case 0x3cf:\n           FIXME(\"Unsupported index, VGA graphics controller register - other 0x3ce: 0x%02x (value 0x%02x)\\n\",\n                 vga_index_3ce, val);\n           break;\n        /* CRT Controller Register - Index (MDA) */\n        case 0x3b4:\n        /* CRT Controller Register - Index (CGA) */\n        case 0x3d4:\n           vga_index_3d4 = val;\n           break;\n        /* CRT Controller Register - Other (MDA) */\n        case 0x3b5:\n        /* CRT Controller Register - Other (CGA) */\n        case 0x3d5:\n           FIXME(\"Unsupported index, VGA crt controller register 0x3b4/0x3d4: 0x%02x (value 0x%02x)\\n\",\n                 vga_index_3d4, val);\n           break;\n        /* Mode control register - 6845 Motorola (MDA) */\n        case 0x3b8:\n        /* Mode control register - 6845 Motorola (CGA) */\n        case 0x3d8:\n           /*\n            *  xxxxxxx1 = 80x25 text\n            *  xxxxxxx0 = 40x25 text (default)\n            *  xxxxxx1x = graphics (320x200)\n            *  xxxxxx0x = text\n            *  xxxxx1xx = B/W\n            *  xxxxx0xx = color\n            *  xxxx1xxx = enable video signal\n            *  xxx1xxxx = 640x200 B/W graphics\n            *  xx1xxxxx = blink\n            */\n\n           /* check bits 6 and 7 */\n           if (val & 0xC0)\n           {\n              FIXME(\"Unsupported value, VGA register 0x3d8: 0x%02x - bits 7 and 6 not supported.\\n\", val);\n           }\n           /* check bits 5 - blink on */\n           if (val & 0x20)\n           {\n              FIXME(\"Unsupported value, VGA register 0x3d8: 0x%02x (bit 5) - blink is not supported.\\n\", val);\n           }\n           /* Enable Video Signal (bit 3) - Set the enabled bit */\n           VGA_SetEnabled((val & 0x08) != 0);\n\n           /* xxx1x010 - Detect 160x200, 16 color mode (CGA composite) */\n           if( (val & 0x17) == 0x12 )\n           {\n             /* Switch to 160x200x4 composite mode - special case of mode 6 */\n             CGA_ColorComposite = TRUE;\n             VGA_SetMode(6);\n           }\n           else\n           {\n             /* turn off composite colors otherwise, including 320x200 (80x200 16 color) */\n             CGA_ColorComposite = FALSE;\n           }\n\n           /* xxx0x100 - Detect VGA mode 0 */\n           if( (val & 0x17) == 0x04 )\n           {\n             VGA_SetMode(0);\n           }\n           /* xxx0x000 - Detect VGA mode 1 */\n           else if( (val & 0x17) == 0x00 )\n           {\n             VGA_SetMode(1);\n           }\n           /* xxx0x101 - Detect VGA mode 2 */\n           else if( (val & 0x17) == 0x05 )\n           {\n             VGA_SetMode(2);\n           }\n           /* xxx0x001 - Detect VGA mode 3 */\n           else if( (val & 0x17) == 0x01 )\n           {\n             VGA_SetMode(3);\n           }\n           /* xxx0x010 - Detect VGA mode 4 */\n           else if( (val & 0x17) == 0x02 )\n           {\n             VGA_SetMode(4);\n           }\n           /* xxx0x110 - Detect VGA mode 5 */\n           else if( (val & 0x17) == 0x06 )\n           {\n             VGA_SetMode(5);\n           }\n           /* xxx1x110 - Detect VGA mode 6 */\n           else if( (val & 0x17) == 0x16 )\n           {\n             VGA_SetMode(6);\n           }\n           /* unsupported mode */\n           else\n           {\n             FIXME(\"Unsupported value, VGA register 0x3d8: 0x%02x - unrecognized MDA/CGA mode\\n\", val); /* Set the enabled bit */\n           }\n\n           break;\n\n        /* Colour control register (CGA) */\n        case 0x3d9:\n           /* Set bright */\n           VGA_SetBright((val & 0x10) != 0);\n\n           /* Set palette index */\n           VGA_SetPaletteIndex((val & 0x20) != 0);\n\n           /* Now update the palette */\n           VGA_UpdatePalette();\n           break;\n        default:\n            FIXME(\"Unsupported VGA register: 0x%04x (value 0x%02x)\\n\", port, val);\n    }\n}\n\nBYTE VGA_ioport_in( WORD port )\n{\n    BYTE ret;\n\n    switch (port) {\n        /* Attribute Controller - Other */\n        case 0x3c1:\n           FIXME(\"Unsupported index, VGA attribute controller register 0x3c0: 0x%02x\\n\",\n                 vga_index_3c0);\n           return 0xff;\n        /* General Register - Input status 0 */\n        case 0x3c2:\n           ret=0xff;\n           FIXME(\"Unsupported VGA register: general register - input status 0 0x%04x\\n\", port);\n           break;\n        /* General Register - Video subsystem enable */\n        case 0x3c3:\n           ret=0xff;\n           FIXME(\"Unsupported VGA register: general register - video subsystem enable 0x%04x\\n\", port);\n           break;\n        /* Sequencer Register - Other */\n        case 0x3c5:\n           switch(vga_index_3c4) {\n               case 0x04: /* Sequencer: Memory Mode Register */\n                    return (VGA_GetWindowStart() == -1) ? 0xf7 : 0xff;\n               default:\n                   FIXME(\"Unsupported index, register 0x3c4: 0x%02x\\n\",\n                         vga_index_3c4);\n                   return 0xff;\n           }\n        /* General Register -  DAC State */\n        case 0x3c7:\n           ret=0xff;\n           FIXME(\"Unsupported VGA register: general register - DAC State 0x%04x\\n\", port);\n           break;\n        /* General Register - Feature control */\n        case 0x3ca:\n           ret=0xff;\n           FIXME(\"Unsupported VGA register: general register - Feature control 0x%04x\\n\", port);\n           break;\n        /* General Register - Misc output */\n        case 0x3cc:\n           ret=0xff;\n           FIXME(\"Unsupported VGA register: general register - Feature control 0x%04x\\n\", port);\n           break;\n        /* Graphics Controller Register - Other */\n        case 0x3cf:\n           FIXME(\"Unsupported index, register 0x3ce: 0x%02x\\n\",\n                 vga_index_3ce);\n           return 0xff;\n        /* CRT Controller Register - Other (MDA) */\n        case 0x3b5:\n        /* CRT Controller Register - Other (CGA) */\n        case 0x3d5:\n           FIXME(\"Unsupported index, VGA crt controller register 0x3b4/0x3d4: 0x%02x\\n\",\n                 vga_index_3d4);\n           return 0xff;\n        /* General Register - Input status 1 (MDA) */\n        case 0x3ba:\n        /* General Register - Input status 1 (CGA) */\n        case 0x3da:\n            /*\n             * Read from this register resets register 0x3c0 address flip-flop.\n             */\n            vga_address_3c0 = TRUE;\n\n            /*\n             * Read from this register returns following bits:\n             *   xxxx1xxx = Vertical retrace in progress if set.\n             *   xxxxx1xx = Light pen switched on.\n             *   xxxxxx1x = Light pen trigger set.\n             *   xxxxxxx1 = Either vertical or horizontal retrace \n             *              in progress if set.\n             */\n            ret = 0;\n            if (vga_retrace_vertical)\n                ret |= 9;\n            if (vga_retrace_horizontal)\n                ret |= 3;\n            \n            /*\n             * If VGA mode has been set, vertical retrace is\n             * turned on once a frame and cleared after each read.\n             * This might cause applications that synchronize with\n             * vertical retrace to actually skip one frame but that\n             * is probably not a problem.\n             * \n             * If no VGA mode has been set, vertical retrace is faked\n             * by toggling the value after every read.\n             */\n            if (VGA_IsTimerRunning())\n                vga_retrace_vertical = FALSE;\n            else\n                vga_retrace_vertical = !vga_retrace_vertical;\n\n            /*\n             * Toggle horizontal retrace.\n             */\n            vga_retrace_horizontal = !vga_retrace_horizontal;\n            break;\n\n        default:\n            ret=0xff;\n            FIXME(\"Unsupported VGA register: 0x%04x\\n\", port);\n    }\n    return ret;\n}\n\nvoid VGA_Clean(void)\n{\n    VGA_Exit();\n    VGA_DeinstallTimer();\n}\n"
  },
  {
    "path": "krnl386/vga.h",
    "content": "/*\n * VGA emulation\n *\n * Copyright 1998 Ove Kåven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_VGA_H\n#define __WINE_VGA_H\n\n#include <stdarg.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n\n/*\n * VGA VESA definitions\n */\n/* mode descriptor */\nenum modetype {TEXT=0, GRAPHIC=1};\n/* Wine internal information about video modes */\ntypedef struct {\n    WORD Mode;\n    BOOL ModeType;\n    WORD TextCols;  /* columns of text in display */\n    WORD TextRows;  /* rows of text in display */\n    WORD CharWidth;\n    WORD CharHeight;\n    WORD Width;  /* width of display in pixels */\n    WORD Height; /* height of display in pixels */\n    WORD Depth;  /* bits per pixel */\n    WORD Colors; /* total available colors */\n    WORD ScreenPages;\n    BOOL Supported;\n} VGA_MODE;\n\nextern const VGA_MODE VGA_modelist[] DECLSPEC_HIDDEN;\n\n/* all vga modes */\nconst VGA_MODE *VGA_GetModeInfo(WORD mode) DECLSPEC_HIDDEN;\nBOOL VGA_SetMode(WORD mode) DECLSPEC_HIDDEN;\n\n/* graphics mode */\nBOOL VGA_GetMode(unsigned *Height, unsigned *Width, unsigned *Depth) DECLSPEC_HIDDEN;\nvoid VGA_SetPalette(PALETTEENTRY*pal,int start,int len) DECLSPEC_HIDDEN;\nvoid VGA_SetColor16(int reg,int color) DECLSPEC_HIDDEN;\nchar VGA_GetColor16(int reg) DECLSPEC_HIDDEN;\nvoid VGA_Set16Palette(char *Table) DECLSPEC_HIDDEN;\nvoid VGA_Get16Palette(char *Table) DECLSPEC_HIDDEN;\nvoid VGA_SetWindowStart(int start) DECLSPEC_HIDDEN;\nint  VGA_GetWindowStart(void) DECLSPEC_HIDDEN;\nvoid VGA_ShowMouse(BOOL show) DECLSPEC_HIDDEN;\nvoid VGA_UpdatePalette(void) DECLSPEC_HIDDEN;\nvoid VGA_SetPaletteIndex(unsigned index) DECLSPEC_HIDDEN;\nvoid VGA_SetBright(BOOL bright) DECLSPEC_HIDDEN;\nvoid VGA_WritePixel(unsigned color, unsigned page, unsigned col, unsigned row) DECLSPEC_HIDDEN;\n\n/* text mode */\nvoid VGA_InitAlphaMode(unsigned*Xres,unsigned*Yres) DECLSPEC_HIDDEN;\nvoid VGA_SetAlphaMode(unsigned Xres,unsigned Yres) DECLSPEC_HIDDEN;\nBOOL VGA_GetAlphaMode(unsigned*Xres,unsigned*Yres) DECLSPEC_HIDDEN;\nvoid VGA_SetCursorShape(unsigned char start_options,unsigned char end) DECLSPEC_HIDDEN;\nvoid VGA_SetCursorPos(unsigned X,unsigned Y) DECLSPEC_HIDDEN;\nvoid VGA_GetCursorPos(unsigned*X,unsigned*Y) DECLSPEC_HIDDEN;\nvoid VGA_WriteChars(unsigned X,unsigned Y,unsigned ch,int attr,int count) DECLSPEC_HIDDEN;\nvoid VGA_PutChar(BYTE ascii) DECLSPEC_HIDDEN;\nvoid VGA_ClearText(unsigned row1, unsigned col1,\n                  unsigned row2, unsigned col2,\n                  BYTE attr) DECLSPEC_HIDDEN;\nvoid VGA_ScrollUpText(unsigned row1, unsigned col1,\n                     unsigned row2, unsigned col2,\n                     unsigned lines, BYTE attr) DECLSPEC_HIDDEN;\nvoid VGA_ScrollDownText(unsigned row1, unsigned col1,\n                       unsigned row2, unsigned col2,\n                       unsigned lines, BYTE attr) DECLSPEC_HIDDEN;\nvoid VGA_GetCharacterAtCursor(BYTE *ascii, BYTE *attr) DECLSPEC_HIDDEN;\n\n/* control */\nvoid VGA_ioport_out(WORD port, BYTE val) DECLSPEC_HIDDEN;\nBYTE VGA_ioport_in(WORD port) DECLSPEC_HIDDEN;\nvoid VGA_Clean(void) DECLSPEC_HIDDEN;\n\n#endif /* __WINE_VGA_H */\n"
  },
  {
    "path": "krnl386/vxd.c",
    "content": "/*\n * Win32 VxD functions\n *\n * Copyright 1998 Marcus Meissner\n * Copyright 1998 Ulrich Weigand\n * Copyright 1998 Patrik Stridvall\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdlib.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#include <sys/types.h>\n#ifdef HAVE_SYS_STAT_H\n# include <sys/stat.h>\n#endif\n#include <string.h>\n#include <stdarg.h>\n\n#include <stdio.h>\n\n#include \"ntstatus.h\"\n#define WIN32_NO_STATUS\n#define NONAMELESSUNION\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winerror.h\"\n#include \"winternl.h\"\n#include \"winioctl.h\"\n#include \"kernel16_private.h\"\n#include \"dosexe.h\"\n#include \"wine/library.h\"\n#include \"wine/unicode.h\"\n#include \"wine/server.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(vxd);\n\ntypedef DWORD (WINAPI *VxDCallProc)(DWORD, CONTEXT *);\ntypedef BOOL (WINAPI *DeviceIoProc)(DWORD, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPOVERLAPPED);\n\nstruct vxd_module\n{\n    LARGE_INTEGER index;\n    HANDLE        handle;\n    HMODULE       module;\n    DeviceIoProc  proc;\n};\n\nstruct vxdcall_service\n{\n    WCHAR       name[12];\n    DWORD       service;\n    HMODULE     module;\n    VxDCallProc proc;\n};\n\n#define MAX_VXD_MODULES 32\n\nstatic struct vxd_module vxd_modules[MAX_VXD_MODULES];\n\nstatic struct vxdcall_service vxd_services[] =\n{\n    { {'v','m','m','.','v','x','d',0},             0x0001, NULL, NULL },\n    { {'v','w','i','n','3','2','.','v','x','d',0}, 0x002a, NULL, NULL }\n};\n\n#define W32S_APP2WINE(addr) ((addr)? (DWORD)(addr) + W32S_offset : 0)\n#define W32S_WINE2APP(addr) ((addr)? (DWORD)(addr) - W32S_offset : 0)\n\n#define VXD_BARF(context,name) \\\n    TRACE( \"vxd %s: unknown/not implemented parameters:\\n\" \\\n                     \"vxd %s: AX %04x, BX %04x, CX %04x, DX %04x, \" \\\n                     \"SI %04x, DI %04x, DS %04x, ES %04x\\n\", \\\n             (name), (name), AX_reg(context), BX_reg(context), \\\n             CX_reg(context), DX_reg(context), SI_reg(context), \\\n             DI_reg(context), (WORD)context->SegDs, (WORD)context->SegEs )\n\nstatic CRITICAL_SECTION vxd_section;\nstatic CRITICAL_SECTION_DEBUG critsect_debug =\n{\n    0, 0, &vxd_section,\n    { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },\n      0, 0, { (DWORD_PTR)(__FILE__ \": vxd_section\") }\n};\nstatic CRITICAL_SECTION vxd_section = { &critsect_debug, -1, 0, 0, 0, 0 };\n\nstatic UINT W32S_offset;\n\nstatic WORD VXD_WinVersion(void)\n{\n    WORD version = LOWORD(GetVersion16());\n    return (version >> 8) | (version << 8);\n}\n\n/* create a file handle to represent a VxD, by opening a dummy file in the wineserver directory */\nstatic HANDLE open_vxd_handle( LPCWSTR name )\n{\n    static const WCHAR prefixW[] = {'\\\\','?','?','\\\\','u','n','i','x'};\n    const char *dir = wine_get_server_dir();\n    int len;\n    HANDLE ret;\n    NTSTATUS status;\n    OBJECT_ATTRIBUTES attr;\n    UNICODE_STRING nameW;\n    IO_STATUS_BLOCK io;\n\n    len = MultiByteToWideChar( CP_UNIXCP, 0, dir, -1, NULL, 0 );\n    nameW.Length = sizeof(prefixW) + (len + strlenW( name )) * sizeof(WCHAR);\n    nameW.MaximumLength = nameW.Length + sizeof(WCHAR);\n    if (!(nameW.Buffer = HeapAlloc( GetProcessHeap(), 0, nameW.MaximumLength )))\n    {\n        SetLastError( ERROR_NOT_ENOUGH_MEMORY );\n        return 0;\n    }\n    memcpy( nameW.Buffer, prefixW, sizeof(prefixW) );\n    MultiByteToWideChar( CP_UNIXCP, 0, dir, -1, nameW.Buffer + ARRAY_SIZE(prefixW), len );\n    len += ARRAY_SIZE(prefixW);\n    nameW.Buffer[len-1] = '/';\n    strcpyW( nameW.Buffer + len, name );\n\n    attr.Length = sizeof(attr);\n    attr.RootDirectory = 0;\n    attr.Attributes = 0;\n    attr.ObjectName = &nameW;\n    attr.SecurityDescriptor = NULL;\n    attr.SecurityQualityOfService = NULL;\n\n    status = NtCreateFile( &ret, SYNCHRONIZE, &attr, &io, NULL, 0,\n                           FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OPEN_IF,\n                           FILE_SYNCHRONOUS_IO_ALERT, NULL, 0 );\n    if (status)\n    {\n        ret = 0;\n        SetLastError( RtlNtStatusToDosError(status) );\n    }\n    RtlFreeUnicodeString( &nameW );\n    return ret;\n}\n\n/* retrieve the DeviceIoControl function for a Vxd given a file handle */\nDeviceIoProc __wine_vxd_get_proc( HANDLE handle )\n{\n    DeviceIoProc ret = NULL;\n    int status, i;\n    IO_STATUS_BLOCK io;\n    FILE_INTERNAL_INFORMATION info;\n\n    status = NtQueryInformationFile( handle, &io, &info, sizeof(info), FileInternalInformation );\n    if (status)\n    {\n        SetLastError( RtlNtStatusToDosError(status) );\n        return NULL;\n    }\n\n    RtlEnterCriticalSection( &vxd_section );\n\n    for (i = 0; i < MAX_VXD_MODULES; i++)\n    {\n        if (!vxd_modules[i].module) break;\n        if (vxd_modules[i].index.QuadPart == info.IndexNumber.QuadPart)\n        {\n            if (!(ret = vxd_modules[i].proc)) SetLastError( ERROR_INVALID_FUNCTION );\n            goto done;\n        }\n    }\n    /* FIXME: Here we could go through the directory to find the VxD name and load it. */\n    /* Let's wait to find out if there are actually apps out there that try to share   */\n    /* VxD handles between processes, before we go to the trouble of implementing it.  */\n    ERR( \"handle %p not found in module list, inherited from another process?\\n\", handle );\n\ndone:\n    RtlLeaveCriticalSection( &vxd_section );\n    return ret;\n}\n\n\n/* load a VxD and return a file handle to it */\nHANDLE __wine_vxd_open( LPCWSTR filenameW, DWORD access, SECURITY_ATTRIBUTES *sa )\n{\n    static const WCHAR dotVxDW[] = {'.','v','x','d',0};\n    int i;\n    HANDLE handle;\n    HMODULE module;\n    WCHAR *p, name[16];\n\n    /* normalize the filename */\n\n    if (strlenW( filenameW ) >= ARRAY_SIZE(name) - 4 ||\n        strchrW( filenameW, '/' ) || strchrW( filenameW, '\\\\' ))\n    {\n        SetLastError( ERROR_FILE_NOT_FOUND );\n        return 0;\n    }\n    strcpyW( name, filenameW );\n    strlwrW( name );\n    p = strchrW( name, '.' );\n    if (!p) strcatW( name, dotVxDW );\n    else if (strcmpiW( p, dotVxDW ))  /* existing extension has to be .vxd */\n    {\n        SetLastError( ERROR_FILE_NOT_FOUND );\n        return 0;\n    }\n\n    /* try to load the module first */\n\n    if (!(module = LoadLibraryW( name )))\n    {\n        FIXME( \"Unknown/unsupported VxD %s. Try setting Windows version to 'nt40' or 'win31'.\\n\",\n               debugstr_w(name) );\n        SetLastError( ERROR_FILE_NOT_FOUND );\n        return 0;\n    }\n\n    /* register the module in the global list if necessary */\n\n    RtlEnterCriticalSection( &vxd_section );\n\n    for (i = 0; i < MAX_VXD_MODULES; i++)\n    {\n        if (vxd_modules[i].module == module)\n        {\n            handle = vxd_modules[i].handle;\n            goto done;  /* already registered */\n        }\n        if (!vxd_modules[i].module)  /* new one, register it */\n        {\n            IO_STATUS_BLOCK io;\n            FILE_INTERNAL_INFORMATION info;\n\n            /* get a file handle to the dummy file */\n            if (!(handle = open_vxd_handle( name )))\n            {\n                FreeLibrary( module );\n                goto done;\n            }\n            if (!NtQueryInformationFile( handle, &io, &info, sizeof(info), FileInternalInformation ))\n                vxd_modules[i].index = info.IndexNumber;\n\n            vxd_modules[i].module = module;\n            vxd_modules[i].handle = handle;\n            vxd_modules[i].proc = (DeviceIoProc)GetProcAddress( module, \"DeviceIoControl\" );\n            goto done;\n        }\n    }\n\n    ERR(\"too many open VxD modules, please report\\n\" );\n    FreeLibrary( module );\n    handle = 0;\n\ndone:\n    RtlLeaveCriticalSection( &vxd_section );\n    if (!DuplicateHandle( GetCurrentProcess(), handle, GetCurrentProcess(), &handle, 0,\n                          (sa && (sa->nLength>=sizeof(*sa)) && sa->bInheritHandle),\n                          DUP_HANDLE_SAME_ACCESS ))\n        handle = 0;\n    return handle;\n}\n\n\n/***********************************************************************\n *\t\tVxDCall0 (KERNEL32.1)\n *\t\tVxDCall1 (KERNEL32.2)\n *\t\tVxDCall2 (KERNEL32.3)\n *\t\tVxDCall3 (KERNEL32.4)\n *\t\tVxDCall4 (KERNEL32.5)\n *\t\tVxDCall5 (KERNEL32.6)\n *\t\tVxDCall6 (KERNEL32.7)\n *\t\tVxDCall7 (KERNEL32.8)\n *\t\tVxDCall8 (KERNEL32.9)\n */\nvoid WINAPI DECLSPEC_HIDDEN __regs_VxDCall( CONTEXT *context )\n{\n    unsigned int i;\n    VxDCallProc proc = NULL;\n    DWORD service = stack32_pop( context );\n\n    RtlEnterCriticalSection( &vxd_section );\n    for (i = 0; i < ARRAY_SIZE(vxd_services); i++)\n    {\n        if (HIWORD(service) != vxd_services[i].service) continue;\n        if (!vxd_services[i].module)  /* need to load it */\n        {\n            if ((vxd_services[i].module = LoadLibraryW( vxd_services[i].name )))\n                vxd_services[i].proc = (VxDCallProc)GetProcAddress( vxd_services[i].module, \"VxDCall\" );\n        }\n        proc = vxd_services[i].proc;\n        break;\n    }\n    RtlLeaveCriticalSection( &vxd_section );\n\n    if (proc) context->Eax = proc( service, context );\n    else\n    {\n        FIXME( \"Unknown/unimplemented VxD (%08x)\\n\", service);\n        context->Eax = 0xffffffff; /* FIXME */\n    }\n}\n#ifdef _MSC_VER\nDEFINE_REGS_ENTRYPOINT(aa0, 0);\nDEFINE_REGS_ENTRYPOINT(aa1, 1);\nDEFINE_REGS_ENTRYPOINT(aa2, 2);\nDEFINE_REGS_ENTRYPOINT(aa3, 3);\nDEFINE_REGS_ENTRYPOINT(aa4, 4);\nDEFINE_REGS_ENTRYPOINT(aa5, 5);\nDEFINE_REGS_ENTRYPOINT( VxDCall )\n#else\n\nDEFINE_REGS_ENTRYPOINT( VxDCall )\n#endif\n\n\n/***********************************************************************\n *           __wine_vxd_vmm (WPROCS.401)\n */\nvoid WINAPI __wine_vxd_vmm ( CONTEXT *context )\n{\n    unsigned service = AX_reg(context);\n\n    TRACE(\"[%04x] VMM\\n\", (UINT16)service);\n\n    switch(service)\n    {\n    case 0x0000: /* version */\n        SET_AX( context, VXD_WinVersion() );\n        RESET_CFLAG(context);\n        break;\n\n    case 0x026d: /* Get_Debug_Flag '/m' */\n    case 0x026e: /* Get_Debug_Flag '/n' */\n        SET_AL( context, 0 );\n        RESET_CFLAG(context);\n        break;\n\n    default:\n        VXD_BARF( context, \"VMM\" );\n    }\n}\n\n/***********************************************************************\n *           __wine_vxd_pagefile (WPROCS.433)\n */\nvoid WINAPI __wine_vxd_pagefile( CONTEXT *context )\n{\n    unsigned\tservice = AX_reg(context);\n\n    /* taken from Ralf Brown's Interrupt List */\n\n    TRACE(\"[%04x] PageFile\\n\", (UINT16)service );\n\n    switch(service)\n    {\n    case 0x00: /* get version, is this windows version? */\n\tTRACE(\"returning version\\n\");\n        SET_AX( context, VXD_WinVersion() );\n\tRESET_CFLAG(context);\n\tbreak;\n\n    case 0x01: /* get swap file info */\n\tTRACE(\"VxD PageFile: returning swap file info\\n\");\n\tSET_AX( context, 0x00 ); /* paging disabled */\n\tcontext->Ecx = 0;   /* maximum size of paging file */\n\t/* FIXME: do I touch DS:SI or DS:DI? */\n\tRESET_CFLAG(context);\n\tbreak;\n\n    case 0x02: /* delete permanent swap on exit */\n\tTRACE(\"VxD PageFile: supposed to delete swap\\n\");\n\tRESET_CFLAG(context);\n\tbreak;\n\n    case 0x03: /* current temporary swap file size */\n\tTRACE(\"VxD PageFile: what is current temp. swap size\\n\");\n\tRESET_CFLAG(context);\n\tbreak;\n\n    case 0x04: /* read or write?? INTERRUP.D */\n    case 0x05: /* cancel?? INTERRUP.D */\n    case 0x06: /* test I/O valid INTERRUP.D */\n    default:\n\tVXD_BARF( context, \"pagefile\" );\n\tbreak;\n    }\n}\n\n/***********************************************************************\n *           __wine_vxd_reboot (WPROCS.409)\n */\nvoid WINAPI __wine_vxd_reboot( CONTEXT *context )\n{\n    unsigned service = AX_reg(context);\n\n    TRACE(\"[%04x] Reboot\\n\", (UINT16)service);\n\n    switch(service)\n    {\n    case 0x0000: /* version */\n        SET_AX( context, VXD_WinVersion() );\n        RESET_CFLAG(context);\n        break;\n\n    default:\n        VXD_BARF( context, \"REBOOT\" );\n    }\n}\n\n/***********************************************************************\n *           __wine_vxd_vdd (WPROCS.410)\n */\nvoid WINAPI __wine_vxd_vdd( CONTEXT *context )\n{\n    unsigned service = AX_reg(context);\n\n    TRACE(\"[%04x] VDD\\n\", (UINT16)service);\n\n    switch(service)\n    {\n    case 0x0000: /* version */\n        SET_AX( context, VXD_WinVersion() );\n        RESET_CFLAG(context);\n        break;\n\n    default:\n        VXD_BARF( context, \"VDD\" );\n    }\n}\n\n/***********************************************************************\n *           __wine_vxd_vmd (WPROCS.412)\n */\nvoid WINAPI __wine_vxd_vmd( CONTEXT *context )\n{\n    unsigned service = AX_reg(context);\n\n    TRACE(\"[%04x] VMD\\n\", (UINT16)service);\n\n    switch(service)\n    {\n    case 0x0000: /* version */\n        SET_AX( context, VXD_WinVersion() );\n        RESET_CFLAG(context);\n        break;\n\n    default:\n        VXD_BARF( context, \"VMD\" );\n    }\n}\n\n/***********************************************************************\n *           __wine_vxd_vxdloader (WPROCS.439)\n */\nvoid WINAPI __wine_vxd_vxdloader( CONTEXT *context )\n{\n    unsigned service = AX_reg(context);\n\n    TRACE(\"[%04x] VXDLoader\\n\", (UINT16)service);\n\n    switch (service)\n    {\n    case 0x0000: /* get version */\n\tTRACE(\"returning version\\n\");\n\tSET_AX( context, 0x0000 );\n\tSET_DX( context, VXD_WinVersion() );\n\tRESET_CFLAG(context);\n\tbreak;\n\n    case 0x0001: /* load device */\n\tFIXME(\"load device %04x:%04x (%s)\\n\",\n\t      context->SegDs, DX_reg(context),\n\t      debugstr_a(MapSL(MAKESEGPTR(context->SegDs, DX_reg(context)))));\n\tSET_AX( context, 0x0000 );\n\tcontext->SegEs = 0x0000;\n\tSET_DI( context, 0x0000 );\n\tRESET_CFLAG(context);\n\tbreak;\n\n    case 0x0002: /* unload device */\n\tFIXME(\"unload device (%08x)\\n\", context->Ebx);\n\tSET_AX( context, 0x0000 );\n\tRESET_CFLAG(context);\n\tbreak;\n\n    default:\n\tVXD_BARF( context, \"VXDLDR\" );\n\tSET_AX( context, 0x000B ); /* invalid function number */\n\tSET_CFLAG(context);\n\tbreak;\n    }\n}\n\n/***********************************************************************\n *           __wine_vxd_shell (WPROCS.423)\n */\nvoid WINAPI __wine_vxd_shell( CONTEXT *context )\n{\n    unsigned\tservice = DX_reg(context);\n\n    TRACE(\"[%04x] Shell\\n\", (UINT16)service);\n\n    switch (service) /* Ralf Brown says EDX, but I use DX instead */\n    {\n    case 0x0000:\n\tTRACE(\"returning version\\n\");\n        SET_AX( context, VXD_WinVersion() );\n\tcontext->Ebx = 1; /* system VM Handle */\n\tbreak;\n\n    case 0x0001:\n    case 0x0002:\n    case 0x0003:\n        /* SHELL_SYSMODAL_Message\n\tebx virtual machine handle\n\teax message box flags\n\tecx address of message\n\tedi address of caption\n\treturn response in eax\n\t*/\n    case 0x0004:\n\t/* SHELL_Message\n\tebx virtual machine handle\n\teax message box flags\n\tecx address of message\n\tedi address of caption\n\tesi address callback\n\tedx reference data for callback\n\treturn response in eax\n\t*/\n    case 0x0005:\n\tVXD_BARF( context, \"shell\" );\n\tbreak;\n\n    case 0x0006: /* SHELL_Get_VM_State */\n\tTRACE(\"VxD Shell: returning VM state\\n\");\n\t/* Actually we don't, not yet. We have to return a structure\n         * and I am not to sure how to set it up and return it yet,\n         * so for now let's do nothing. I can (hopefully) get this\n         * by the next release\n         */\n\t/* RESET_CFLAG(context); */\n\tbreak;\n\n    case 0x0007:\n    case 0x0008:\n    case 0x0009:\n    case 0x000A:\n    case 0x000B:\n    case 0x000C:\n    case 0x000D:\n    case 0x000E:\n    case 0x000F:\n    case 0x0010:\n    case 0x0011:\n    case 0x0012:\n    case 0x0013:\n    case 0x0014:\n    case 0x0015:\n    case 0x0016:\n\tVXD_BARF( context, \"SHELL\" );\n\tbreak;\n\n    /* the new Win95 shell API */\n    case 0x0100:     /* get version */\n        SET_AX( context, VXD_WinVersion() );\n\tbreak;\n\n    case 0x0104:   /* retrieve Hook_Properties list */\n    case 0x0105:   /* call Hook_Properties callbacks */\n\tVXD_BARF( context, \"SHELL\" );\n\tbreak;\n\n    case 0x0106:   /* install timeout callback */\n\tTRACE(\"VxD Shell: ignoring shell callback (%d sec.)\\n\", context->Ebx);\n\tSET_CFLAG(context);\n\tbreak;\n\n    case 0x0107:   /* get version of any VxD */\n    default:\n\tVXD_BARF( context, \"SHELL\" );\n\tbreak;\n    }\n}\n\n\n/***********************************************************************\n *           __wine_vxd_comm (WPROCS.414)\n */\nvoid WINAPI __wine_vxd_comm( CONTEXT *context )\n{\n    unsigned\tservice = AX_reg(context);\n\n    TRACE(\"[%04x] Comm\\n\", (UINT16)service);\n\n    switch (service)\n    {\n    case 0x0000: /* get version */\n\tTRACE(\"returning version\\n\");\n        SET_AX( context, VXD_WinVersion() );\n\tRESET_CFLAG(context);\n\tbreak;\n\n    case 0x0001: /* set port global */\n    case 0x0002: /* get focus */\n    case 0x0003: /* virtualise port */\n    default:\n        VXD_BARF( context, \"comm\" );\n    }\n}\n\n/***********************************************************************\n *           __wine_vxd_timer (WPROCS.405)\n */\nvoid WINAPI __wine_vxd_timer( CONTEXT *context )\n{\n    unsigned service = AX_reg(context);\n\n    TRACE(\"[%04x] Virtual Timer\\n\", (UINT16)service);\n\n    switch(service)\n    {\n    case 0x0000: /* version */\n\tSET_AX( context, VXD_WinVersion() );\n\tRESET_CFLAG(context);\n\tbreak;\n\n    case 0x0100: /* clock tick time, in 840nsecs */\n\tcontext->Eax = GetTickCount();\n\n\tcontext->Edx = context->Eax >> 22;\n\tcontext->Eax <<= 10; /* not very precise */\n\tRESET_CFLAG(context);\n\tbreak;\n\n    case 0x0101: /* current Windows time, msecs */\n    case 0x0102: /* current VM time, msecs */\n\tcontext->Eax = GetTickCount();\n\tbreak;\n\n    default:\n\tVXD_BARF( context, \"VTD\" );\n    }\n}\n\n\n/***********************************************************************\n *           timer_thread\n */\nstatic DWORD CALLBACK timer_thread( void *arg )\n{\n    DWORD *system_time = arg;\n\n    for (;;)\n    {\n        *system_time = GetTickCount();\n        Sleep( 55 );\n    }\n\n    return 0;\n}\n\n\n/***********************************************************************\n *           __wine_vxd_timerapi (WPROCS.1490)\n */\nvoid WINAPI __wine_vxd_timerapi( CONTEXT *context )\n{\n    static WORD System_Time_Selector;\n\n    unsigned service = AX_reg(context);\n\n    TRACE(\"[%04x] TimerAPI\\n\", (UINT16)service);\n\n    switch(service)\n    {\n    case 0x0000: /* version */\n        SET_AX( context, VXD_WinVersion() );\n        RESET_CFLAG(context);\n        break;\n\n    case 0x0009: /* get system time selector */\n        if ( !System_Time_Selector )\n        {\n            HANDLE16 handle = GlobalAlloc16( GMEM_FIXED, sizeof(DWORD) );\n            System_Time_Selector = handle | 7;\n            CloseHandle( CreateThread( NULL, 0, timer_thread, GlobalLock16(handle), 0, NULL ) );\n        }\n        SET_AX( context, System_Time_Selector );\n        RESET_CFLAG(context);\n        break;\n\n    default:\n        VXD_BARF( context, \"VTDAPI\" );\n    }\n}\n\n/***********************************************************************\n *           __wine_vxd_configmg (WPROCS.451)\n */\nvoid WINAPI __wine_vxd_configmg( CONTEXT *context )\n{\n    unsigned service = AX_reg(context);\n\n    TRACE(\"[%04x] ConfigMG\\n\", (UINT16)service);\n\n    switch(service)\n    {\n    case 0x0000: /* version */\n        SET_AX( context, VXD_WinVersion() );\n        RESET_CFLAG(context);\n        break;\n\n    default:\n        VXD_BARF( context, \"CONFIGMG\" );\n    }\n}\n\n/***********************************************************************\n *           __wine_vxd_enable (WPROCS.455)\n */\nvoid WINAPI __wine_vxd_enable( CONTEXT *context )\n{\n    unsigned service = AX_reg(context);\n\n    TRACE(\"[%04x] Enable\\n\", (UINT16)service);\n\n    switch(service)\n    {\n    case 0x0000: /* version */\n        SET_AX( context, VXD_WinVersion() );\n        RESET_CFLAG(context);\n        break;\n\n    default:\n        VXD_BARF( context, \"ENABLE\" );\n    }\n}\n\n/***********************************************************************\n *           __wine_vxd_apm (WPROCS.438)\n */\nvoid WINAPI __wine_vxd_apm( CONTEXT *context )\n{\n    unsigned service = AX_reg(context);\n\n    TRACE(\"[%04x] APM\\n\", (UINT16)service);\n\n    switch(service)\n    {\n    case 0x0000: /* version */\n        SET_AX( context, VXD_WinVersion() );\n        RESET_CFLAG(context);\n        break;\n\n    default:\n        VXD_BARF( context, \"APM\" );\n    }\n}\n\n/***********************************************************************\n *           __wine_vxd_win32s (WPROCS.445)\n *\n * This is an implementation of the services of the Win32s VxD.\n * Since official documentation of these does not seem to be available,\n * certain arguments of some of the services remain unclear.\n *\n * FIXME: The following services are currently unimplemented:\n *        Exception handling      (0x01, 0x1C)\n *        Debugger support        (0x0C, 0x14, 0x17)\n *        Low-level memory access (0x02, 0x03, 0x0A, 0x0B)\n *        Memory Statistics       (0x1B)\n *\n *\n * We have a specific problem running Win32s on Linux (and probably also\n * the other x86 unixes), since Win32s tries to allocate its main 'flat\n * code/data segment' selectors with a base of 0xffff0000 (and limit 4GB).\n * The rationale for this seems to be that they want one the one hand to\n * be able to leave the Win 3.1 memory (starting with the main DOS memory)\n * at linear address 0, but want at other hand to have offset 0 of the\n * flat data/code segment point to an unmapped page (to catch NULL pointer\n * accesses). Hence they allocate the flat segments with a base of 0xffff0000\n * so that the Win 3.1 memory area at linear address zero shows up in the\n * flat segments at offset 0x10000 (since linear addresses wrap around at\n * 4GB). To compensate for that discrepancy between flat segment offsets\n * and plain linear addresses, all flat pointers passed between the 32-bit\n * and the 16-bit parts of Win32s are shifted by 0x10000 in the appropriate\n * direction by the glue code (mainly) in W32SKRNL and WIN32S16.\n *\n * The problem for us is now that Linux does not allow a LDT selector with\n * base 0xffff0000 to be created, since it would 'see' a part of the kernel\n * address space. To address this problem we introduce *another* offset:\n * We add 0x10000 to every linear address we get as an argument from Win32s.\n * This means especially that the flat code/data selectors get actually\n * allocated with base 0x0, so that flat offsets and (real) linear addresses\n * do again agree!  In fact, every call e.g. of a Win32s VxD service now\n * has all pointer arguments (which are offsets in the flat data segment)\n * first reduced by 0x10000 by the W32SKRNL glue code, and then again\n * increased by 0x10000 by *our* code.\n *\n * Note that to keep everything consistent, this offset has to be applied by\n * every Wine function that operates on 'linear addresses' passed to it by\n * Win32s. Fortunately, since Win32s does not directly call any Wine 32-bit\n * API routines, this affects only two locations: this VxD and the DPMI\n * handler. (NOTE: Should any Win32s application pass a linear address to\n * any routine apart from those, e.g. some other VxD handler, that code\n * would have to take the offset into account as well!)\n *\n * The offset is set the first time any application calls the GetVersion()\n * service of the Win32s VxD. (Note that the offset is never reset.)\n *\n */\nvoid WINAPI __wine_vxd_win32s( CONTEXT *context )\n{\n    switch (AX_reg(context))\n    {\n    case 0x0000: /* Get Version */\n        /*\n         * Input:   None\n         *\n         * Output:  EAX: LoWord: Win32s Version (1.30)\n         *               HiWord: VxD Version (200)\n         *\n         *          EBX: Build (172)\n         *\n         *          ECX: ???   (1)\n         *\n         *          EDX: Debugging Flags\n         *\n         *          EDI: Error Flag\n         *               0 if OK,\n         *               1 if VMCPD VxD not found\n         */\n\n        TRACE(\"GetVersion()\\n\");\n\n\tcontext->Eax = VXD_WinVersion() | (200 << 16);\n        context->Ebx = 0;\n        context->Ecx = 0;\n        context->Edx = 0;\n        context->Edi = 0;\n\n        /*\n         * If this is the first time we are called for this process,\n         * hack the memory image of WIN32S16 so that it doesn't try\n         * to access the GDT directly ...\n         *\n         * The first code segment of WIN32S16 (version 1.30) contains\n         * an unexported function somewhere between the exported functions\n         * SetFS and StackLinearToSegmented that tries to find a selector\n         * in the LDT that maps to the memory image of the LDT itself.\n         * If it succeeds, it stores this selector into a global variable\n         * which will be used to speed up execution by using this selector\n         * to modify the LDT directly instead of using the DPMI calls.\n         *\n         * To perform this search of the LDT, this function uses the\n         * sgdt and sldt instructions to find the linear address of\n         * the (GDT and then) LDT. While those instructions themselves\n         * execute without problem, the linear address that sgdt returns\n         * points (at least under Linux) to the kernel address space, so\n         * that any subsequent access leads to a segfault.\n         *\n         * Fortunately, WIN32S16 still contains as a fallback option the\n         * mechanism of using DPMI calls to modify LDT selectors instead\n         * of direct writes to the LDT. Thus we can circumvent the problem\n         * by simply replacing the first byte of the offending function\n         * with an 'retf' instruction. This means that the global variable\n         * supposed to contain the LDT alias selector will remain zero,\n         * and hence WIN32S16 will fall back to using DPMI calls.\n         *\n         * The heuristic we employ to _find_ that function is as follows:\n         * We search between the addresses of the exported symbols SetFS\n         * and StackLinearToSegmented for the byte sequence '0F 01 04'\n         * (this is the opcode of 'sgdt [si]'). We then search backwards\n         * from this address for the last occurrence of 'CB' (retf) that marks\n         * the end of the preceding function. The following byte (which\n         * should now be the first byte of the function we are looking for)\n         * will be replaced by 'CB' (retf).\n         *\n         * This heuristic works for the retail as well as the debug version\n         * of Win32s version 1.30. For versions earlier than that this\n         * hack should not be necessary at all, since the whole mechanism\n         * ('PERF130') was introduced only in 1.30 to improve the overall\n         * performance of Win32s.\n         */\n\n        if (!W32S_offset)\n        {\n            HMODULE16 hModule = GetModuleHandle16(\"win32s16\");\n            SEGPTR func1 = (SEGPTR)GetProcAddress16(hModule, \"SetFS\");\n            SEGPTR func2 = (SEGPTR)GetProcAddress16(hModule, \"StackLinearToSegmented\");\n\n            if (   hModule && func1 && func2\n                && SELECTOROF(func1) == SELECTOROF(func2))\n            {\n                BYTE *start = MapSL(func1);\n                BYTE *end   = MapSL(func2);\n                BYTE *p, *retv = NULL;\n                int found = 0;\n\n                for (p = start; p < end; p++)\n                    if (*p == 0xCB) found = 0, retv = p;\n                    else if (*p == 0x0F) found = 1;\n                    else if (*p == 0x01 && found == 1) found = 2;\n                    else if (*p == 0x04 && found == 2) { found = 3; break; }\n                    else found = 0;\n\n                if (found == 3 && retv)\n                {\n                    TRACE(\"PERF130 hack: \"\n                               \"Replacing byte %02X at offset %04X:%04X\\n\",\n                               *(retv+1), SELECTOROF(func1),\n                                          OFFSETOF(func1) + retv+1-start);\n\n                    *(retv+1) = (BYTE)0xCB;\n                }\n            }\n        }\n\n        /*\n         * Mark process as Win32s, so that subsequent DPMI calls\n         * will perform the W32S_APP2WINE/W32S_WINE2APP address shift.\n         */\n        W32S_offset = 0x10000;\n        break;\n\n\n    case 0x0001: /* Install Exception Handling */\n        /*\n         * Input:   EBX: Flat address of W32SKRNL Exception Data\n         *\n         *          ECX: LoWord: Flat Code Selector\n         *               HiWord: Flat Data Selector\n         *\n         *          EDX: Flat address of W32SKRNL Exception Handler\n         *               (this is equal to W32S_BackTo32 + 0x40)\n         *\n         *          ESI: SEGPTR KERNEL.HASGPHANDLER\n         *\n         *          EDI: SEGPTR phCurrentTask (KERNEL.THHOOK + 0x10)\n         *\n         * Output:  EAX: 0 if OK\n         */\n\n        TRACE(\"[0001] EBX=%x ECX=%x EDX=%x ESI=%x EDI=%x\\n\",\n                   context->Ebx, context->Ecx, context->Edx,\n                   context->Esi, context->Edi);\n\n        /* FIXME */\n\n        context->Eax = 0;\n        break;\n\n\n    case 0x0002: /* Set Page Access Flags */\n        /*\n         * Input:   EBX: New access flags\n         *               Bit 2: User Page if set, Supervisor Page if clear\n         *               Bit 1: Read-Write if set, Read-Only if clear\n         *\n         *          ECX: Size of memory area to change\n         *\n         *          EDX: Flat start address of memory area\n         *\n         * Output:  EAX: Size of area changed\n         */\n\n        TRACE(\"[0002] EBX=%x ECX=%x EDX=%x\\n\",\n                   context->Ebx, context->Ecx, context->Edx);\n\n        /* FIXME */\n\n        context->Eax = context->Ecx;\n        break;\n\n\n    case 0x0003: /* Get Page Access Flags */\n        /*\n         * Input:   EDX: Flat address of page to query\n         *\n         * Output:  EAX: Page access flags\n         *               Bit 2: User Page if set, Supervisor Page if clear\n         *               Bit 1: Read-Write if set, Read-Only if clear\n         */\n\n        TRACE(\"[0003] EDX=%x\\n\", context->Edx);\n\n        /* FIXME */\n\n        context->Eax = 6;\n        break;\n\n\n    case 0x0004: /* Map Module */\n        /*\n         * Input:   ECX: IMTE (offset in Module Table) of new module\n         *\n         *          EDX: Flat address of Win32s Module Table\n         *\n         * Output:  EAX: 0 if OK\n         */\n\n    if (!context->Edx || CX_reg(context) == 0xFFFF)\n    {\n        TRACE(\"MapModule: Initialization call\\n\");\n        context->Eax = 0;\n    }\n    else\n    {\n        /*\n         * Structure of a Win32s Module Table Entry:\n         */\n        struct Win32sModule\n        {\n            DWORD  flags;\n            DWORD  flatBaseAddr;\n            LPCSTR moduleName;\n            LPCSTR pathName;\n            LPCSTR unknown;\n            LPBYTE baseAddr;\n            DWORD  hModule;\n            DWORD  relocDelta;\n        };\n\n        /*\n         * Note: This function should set up a demand-paged memory image\n         *       of the given module. Since mmap does not allow file offsets\n         *       not aligned at 1024 bytes, we simply load the image fully\n         *       into memory.\n         */\n\n        struct Win32sModule *moduleTable =\n                            (struct Win32sModule *)W32S_APP2WINE(context->Edx);\n        struct Win32sModule *module = moduleTable + context->Ecx;\n\n        IMAGE_NT_HEADERS *nt_header = RtlImageNtHeader( (HMODULE)module->baseAddr );\n        IMAGE_SECTION_HEADER *pe_seg = (IMAGE_SECTION_HEADER*)((char *)&nt_header->OptionalHeader +\n                                                         nt_header->FileHeader.SizeOfOptionalHeader);\n\n\n        HFILE image = _lopen(module->pathName, OF_READ);\n        BOOL error = (image == HFILE_ERROR);\n        UINT i;\n\n        TRACE(\"MapModule: Loading %s\\n\", module->pathName);\n\n        for (i = 0;\n             !error && i < nt_header->FileHeader.NumberOfSections;\n             i++, pe_seg++)\n            if(!(pe_seg->Characteristics & IMAGE_SCN_CNT_UNINITIALIZED_DATA))\n            {\n                DWORD  off  = pe_seg->PointerToRawData;\n                DWORD  len  = pe_seg->SizeOfRawData;\n                LPBYTE addr = module->baseAddr + pe_seg->VirtualAddress;\n\n                TRACE(\"MapModule: \"\n                           \"Section %d at %08x from %08x len %08x\\n\",\n                           i, (DWORD)addr, off, len);\n\n                if (   _llseek(image, off, SEEK_SET) != off\n                    || _lread(image, addr, len) != len)\n                    error = TRUE;\n            }\n\n        _lclose(image);\n\n        if (error)\n            ERR(\"MapModule: Unable to load %s\\n\", module->pathName);\n\n        else if (module->relocDelta != 0)\n        {\n            IMAGE_DATA_DIRECTORY *dir = nt_header->OptionalHeader.DataDirectory\n                                      + IMAGE_DIRECTORY_ENTRY_BASERELOC;\n            IMAGE_BASE_RELOCATION *r = (IMAGE_BASE_RELOCATION *)\n                (dir->Size? module->baseAddr + dir->VirtualAddress : 0);\n\n            TRACE(\"MapModule: Reloc delta %08x\\n\", module->relocDelta);\n\n            while (r && r->VirtualAddress)\n            {\n                LPBYTE page  = module->baseAddr + r->VirtualAddress;\n                WORD *TypeOffset = (WORD *)(r + 1);\n                unsigned int count = (r->SizeOfBlock - sizeof(*r)) / sizeof(*TypeOffset);\n\n                TRACE(\"MapModule: %d relocations for page %08x\\n\",\n                           count, (DWORD)page);\n\n                for(i = 0; i < count; i++)\n                {\n                    int offset = TypeOffset[i] & 0xFFF;\n                    int type   = TypeOffset[i] >> 12;\n                    switch(type)\n                    {\n                    case IMAGE_REL_BASED_ABSOLUTE:\n                        break;\n                    case IMAGE_REL_BASED_HIGH:\n                        *(WORD *)(page+offset) += HIWORD(module->relocDelta);\n                        break;\n                    case IMAGE_REL_BASED_LOW:\n                        *(WORD *)(page+offset) += LOWORD(module->relocDelta);\n                        break;\n                    case IMAGE_REL_BASED_HIGHLOW:\n                        *(DWORD*)(page+offset) += module->relocDelta;\n                        break;\n                    default:\n                        WARN(\"MapModule: Unsupported fixup type\\n\");\n                        break;\n                    }\n                }\n\n                r = (IMAGE_BASE_RELOCATION *)((LPBYTE)r + r->SizeOfBlock);\n            }\n        }\n\n        context->Eax = 0;\n        RESET_CFLAG(context);\n    }\n    break;\n\n\n    case 0x0005: /* UnMap Module */\n        /*\n         * Input:   EDX: Flat address of module image\n         *\n         * Output:  EAX: 1 if OK\n         */\n\n        TRACE(\"UnMapModule: %x\\n\", W32S_APP2WINE(context->Edx));\n\n        /* As we didn't map anything, there's nothing to unmap ... */\n\n        context->Eax = 1;\n        break;\n\n\n    case 0x0006: /* VirtualAlloc */\n        /*\n         * Input:   ECX: Current Process\n         *\n         *          EDX: Flat address of arguments on stack\n         *\n         *   DWORD *retv     [out] Flat base address of allocated region\n         *   LPVOID base     [in]  Flat address of region to reserve/commit\n         *   DWORD  size     [in]  Size of region\n         *   DWORD  type     [in]  Type of allocation\n         *   DWORD  prot     [in]  Type of access protection\n         *\n         * Output:  EAX: NtStatus\n         */\n    {\n        DWORD *stack  = (DWORD *)W32S_APP2WINE(context->Edx);\n        DWORD *retv   = (DWORD *)W32S_APP2WINE(stack[0]);\n        LPVOID base   = (LPVOID) W32S_APP2WINE(stack[1]);\n        DWORD  size   = stack[2];\n        DWORD  type   = stack[3];\n        DWORD  prot   = stack[4];\n        DWORD  result;\n\n        TRACE(\"VirtualAlloc(%x, %x, %x, %x, %x)\\n\",\n                   (DWORD)retv, (DWORD)base, size, type, prot);\n\n        if (type & 0x80000000)\n        {\n            WARN(\"VirtualAlloc: strange type %x\\n\", type);\n            type &= 0x7fffffff;\n        }\n\n        if (!base && (type & MEM_COMMIT) && prot == PAGE_READONLY)\n        {\n            WARN(\"VirtualAlloc: NLS hack, allowing write access!\\n\");\n            prot = PAGE_READWRITE;\n        }\n\n        result = (DWORD)VirtualAlloc(base, size, type, prot);\n\n        if (W32S_WINE2APP(result))\n            *retv            = W32S_WINE2APP(result),\n            context->Eax = STATUS_SUCCESS;\n        else\n            *retv            = 0,\n            context->Eax = STATUS_NO_MEMORY;  /* FIXME */\n    }\n    break;\n\n\n    case 0x0007: /* VirtualFree */\n        /*\n         * Input:   ECX: Current Process\n         *\n         *          EDX: Flat address of arguments on stack\n         *\n         *   DWORD *retv     [out] TRUE if success, FALSE if failure\n         *   LPVOID base     [in]  Flat address of region\n         *   DWORD  size     [in]  Size of region\n         *   DWORD  type     [in]  Type of operation\n         *\n         * Output:  EAX: NtStatus\n         */\n    {\n        DWORD *stack  = (DWORD *)W32S_APP2WINE(context->Edx);\n        DWORD *retv   = (DWORD *)W32S_APP2WINE(stack[0]);\n        LPVOID base   = (LPVOID) W32S_APP2WINE(stack[1]);\n        DWORD  size   = stack[2];\n        DWORD  type   = stack[3];\n        DWORD  result;\n\n        TRACE(\"VirtualFree(%x, %x, %x, %x)\\n\",\n                   (DWORD)retv, (DWORD)base, size, type);\n\n        result = VirtualFree(base, size, type);\n\n        if (result)\n            *retv            = TRUE,\n            context->Eax = STATUS_SUCCESS;\n        else\n            *retv            = FALSE,\n            context->Eax = STATUS_NO_MEMORY;  /* FIXME */\n    }\n    break;\n\n\n    case 0x0008: /* VirtualProtect */\n        /*\n         * Input:   ECX: Current Process\n         *\n         *          EDX: Flat address of arguments on stack\n         *\n         *   DWORD *retv     [out] TRUE if success, FALSE if failure\n         *   LPVOID base     [in]  Flat address of region\n         *   DWORD  size     [in]  Size of region\n         *   DWORD  new_prot [in]  Desired access protection\n         *   DWORD *old_prot [out] Previous access protection\n         *\n         * Output:  EAX: NtStatus\n         */\n    {\n        DWORD *stack    = (DWORD *)W32S_APP2WINE(context->Edx);\n        DWORD *retv     = (DWORD *)W32S_APP2WINE(stack[0]);\n        LPVOID base     = (LPVOID) W32S_APP2WINE(stack[1]);\n        DWORD  size     = stack[2];\n        DWORD  new_prot = stack[3];\n        DWORD *old_prot = (DWORD *)W32S_APP2WINE(stack[4]);\n        DWORD  result;\n\n        TRACE(\"VirtualProtect(%x, %x, %x, %x, %x)\\n\",\n                   (DWORD)retv, (DWORD)base, size, new_prot, (DWORD)old_prot);\n\n        result = VirtualProtect(base, size, new_prot, old_prot);\n\n        if (result)\n            *retv            = TRUE,\n            context->Eax = STATUS_SUCCESS;\n        else\n            *retv            = FALSE,\n            context->Eax = STATUS_NO_MEMORY;  /* FIXME */\n    }\n    break;\n\n\n    case 0x0009: /* VirtualQuery */\n        /*\n         * Input:   ECX: Current Process\n         *\n         *          EDX: Flat address of arguments on stack\n         *\n         *   DWORD *retv                     [out] Nr. bytes returned\n         *   LPVOID base                     [in]  Flat address of region\n         *   LPMEMORY_BASIC_INFORMATION info [out] Info buffer\n         *   DWORD  len                      [in]  Size of buffer\n         *\n         * Output:  EAX: NtStatus\n         */\n    {\n        DWORD *stack  = (DWORD *)W32S_APP2WINE(context->Edx);\n        DWORD *retv   = (DWORD *)W32S_APP2WINE(stack[0]);\n        LPVOID base   = (LPVOID) W32S_APP2WINE(stack[1]);\n        PMEMORY_BASIC_INFORMATION info =\n                        (PMEMORY_BASIC_INFORMATION)W32S_APP2WINE(stack[2]);\n        DWORD  len    = stack[3];\n        DWORD  result;\n\n        TRACE(\"VirtualQuery(%x, %x, %x, %x)\\n\",\n                   (DWORD)retv, (DWORD)base, (DWORD)info, len);\n\n        result = VirtualQuery(base, info, len);\n\n        *retv            = result;\n        context->Eax = STATUS_SUCCESS;\n    }\n    break;\n\n\n    case 0x000A: /* SetVirtMemProcess */\n        /*\n         * Input:   ECX: Process Handle\n         *\n         *          EDX: Flat address of region\n         *\n         * Output:  EAX: NtStatus\n         */\n\n        TRACE(\"[000a] ECX=%x EDX=%x\\n\",\n                   context->Ecx, context->Edx);\n\n        /* FIXME */\n\n        context->Eax = STATUS_SUCCESS;\n        break;\n\n\n    case 0x000B: /* ??? some kind of cleanup */\n        /*\n         * Input:   ECX: Process Handle\n         *\n         * Output:  EAX: NtStatus\n         */\n\n        TRACE(\"[000b] ECX=%x\\n\", context->Ecx);\n\n        /* FIXME */\n\n        context->Eax = STATUS_SUCCESS;\n        break;\n\n\n    case 0x000C: /* Set Debug Flags */\n        /*\n         * Input:   EDX: Debug Flags\n         *\n         * Output:  EDX: Previous Debug Flags\n         */\n\n        FIXME(\"[000c] EDX=%x\\n\", context->Edx);\n\n        /* FIXME */\n\n        context->Edx = 0;\n        break;\n\n\n    case 0x000D: /* NtCreateSection */\n        /*\n         * Input:   EDX: Flat address of arguments on stack\n         *\n         *   HANDLE32 *retv      [out] Handle of Section created\n         *   DWORD  flags1       [in]  (?? unknown ??)\n         *   DWORD  atom         [in]  Name of Section to create\n         *   LARGE_INTEGER *size [in]  Size of Section\n         *   DWORD  protect      [in]  Access protection\n         *   DWORD  flags2       [in]  (?? unknown ??)\n         *   HFILE32 hFile       [in]  Handle of file to map\n         *   DWORD  psp          [in]  (Win32s: PSP that hFile belongs to)\n         *\n         * Output:  EAX: NtStatus\n         */\n    {\n        DWORD *stack    = (DWORD *)   W32S_APP2WINE(context->Edx);\n        HANDLE *retv  = (HANDLE *)W32S_APP2WINE(stack[0]);\n        DWORD  flags1   = stack[1];\n        DWORD  atom     = stack[2];\n        LARGE_INTEGER *size = (LARGE_INTEGER *)W32S_APP2WINE(stack[3]);\n        DWORD  protect  = stack[4];\n        DWORD  flags2   = stack[5];\n        HANDLE hFile    = DosFileHandleToWin32Handle(stack[6]);\n        DWORD  psp      = stack[7];\n\n        HANDLE result = INVALID_HANDLE_VALUE;\n        char name[128];\n\n        TRACE(\"NtCreateSection(%x, %x, %x, %x, %x, %x, %x, %x)\\n\",\n                   (DWORD)retv, flags1, atom, (DWORD)size, protect, flags2,\n                   (DWORD)hFile, psp);\n\n        if (!atom || GlobalGetAtomNameA(atom, name, sizeof(name)))\n        {\n            TRACE(\"NtCreateSection: name=%s\\n\", atom? name : NULL);\n\n            result = CreateFileMappingA(hFile, NULL, protect,\n                                          size? size->u.HighPart : 0,\n                                          size? size->u.LowPart  : 0,\n                                          atom? name : NULL);\n        }\n\n        if (result == INVALID_HANDLE_VALUE)\n            WARN(\"NtCreateSection: failed!\\n\");\n        else\n            TRACE(\"NtCreateSection: returned %x\\n\", (DWORD)result);\n\n        if (result != INVALID_HANDLE_VALUE)\n            *retv            = result,\n            context->Eax = STATUS_SUCCESS;\n        else\n            *retv            = result,\n            context->Eax = STATUS_NO_MEMORY;   /* FIXME */\n    }\n    break;\n\n\n    case 0x000E: /* NtOpenSection */\n        /*\n         * Input:   EDX: Flat address of arguments on stack\n         *\n         *   HANDLE32 *retv  [out] Handle of Section opened\n         *   DWORD  protect  [in]  Access protection\n         *   DWORD  atom     [in]  Name of Section to create\n         *\n         * Output:  EAX: NtStatus\n         */\n    {\n        DWORD *stack    = (DWORD *)W32S_APP2WINE(context->Edx);\n        HANDLE *retv  = (HANDLE *)W32S_APP2WINE(stack[0]);\n        DWORD  protect  = stack[1];\n        DWORD  atom     = stack[2];\n\n        HANDLE result = INVALID_HANDLE_VALUE;\n        char name[128];\n\n        TRACE(\"NtOpenSection(%x, %x, %x)\\n\",\n                   (DWORD)retv, protect, atom);\n\n        if (atom && GlobalGetAtomNameA(atom, name, sizeof(name)))\n        {\n            TRACE(\"NtOpenSection: name=%s\\n\", name);\n\n            result = OpenFileMappingA(protect, FALSE, name);\n        }\n\n        if (result == INVALID_HANDLE_VALUE)\n            WARN(\"NtOpenSection: failed!\\n\");\n        else\n            TRACE(\"NtOpenSection: returned %x\\n\", (DWORD)result);\n\n        if (result != INVALID_HANDLE_VALUE)\n            *retv            = result,\n            context->Eax = STATUS_SUCCESS;\n        else\n            *retv            = result,\n            context->Eax = STATUS_NO_MEMORY;   /* FIXME */\n    }\n    break;\n\n\n    case 0x000F: /* NtCloseSection */\n        /*\n         * Input:   EDX: Flat address of arguments on stack\n         *\n         *   HANDLE32 handle  [in]  Handle of Section to close\n         *   DWORD *id        [out] Unique ID  (?? unclear ??)\n         *\n         * Output:  EAX: NtStatus\n         */\n    {\n        DWORD *stack    = (DWORD *)W32S_APP2WINE(context->Edx);\n        HANDLE handle   = (HANDLE)stack[0];\n        DWORD *id       = (DWORD *)W32S_APP2WINE(stack[1]);\n\n        TRACE(\"NtCloseSection(%x, %x)\\n\", (DWORD)handle, (DWORD)id);\n\n        CloseHandle(handle);\n        if (id) *id = 0; /* FIXME */\n\n        context->Eax = STATUS_SUCCESS;\n    }\n    break;\n\n\n    case 0x0010: /* NtDupSection */\n        /*\n         * Input:   EDX: Flat address of arguments on stack\n         *\n         *   HANDLE32 handle  [in]  Handle of Section to duplicate\n         *\n         * Output:  EAX: NtStatus\n         */\n    {\n        DWORD *stack    = (DWORD *)W32S_APP2WINE(context->Edx);\n        HANDLE handle   = (HANDLE)stack[0];\n        HANDLE new_handle;\n\n        TRACE(\"NtDupSection(%x)\\n\", (DWORD)handle);\n\n        DuplicateHandle( GetCurrentProcess(), handle,\n                         GetCurrentProcess(), &new_handle,\n                         0, FALSE, DUPLICATE_SAME_ACCESS );\n        context->Eax = STATUS_SUCCESS;\n    }\n    break;\n\n\n    case 0x0011: /* NtMapViewOfSection */\n        /*\n         * Input:   EDX: Flat address of arguments on stack\n         *\n         *   HANDLE32 SectionHandle       [in]     Section to be mapped\n         *   DWORD    ProcessHandle       [in]     Process to be mapped into\n         *   DWORD *  BaseAddress         [in/out] Address to be mapped at\n         *   DWORD    ZeroBits            [in]     (?? unclear ??)\n         *   DWORD    CommitSize          [in]     (?? unclear ??)\n         *   LARGE_INTEGER *SectionOffset [in]     Offset within section\n         *   DWORD *  ViewSize            [in]     Size of view\n         *   DWORD    InheritDisposition  [in]     (?? unclear ??)\n         *   DWORD    AllocationType      [in]     (?? unclear ??)\n         *   DWORD    Protect             [in]     Access protection\n         *\n         * Output:  EAX: NtStatus\n         */\n    {\n        DWORD *  stack          = (DWORD *)W32S_APP2WINE(context->Edx);\n        HANDLE   SectionHandle  = (HANDLE)stack[0];\n        DWORD    ProcessHandle  = stack[1]; /* ignored */\n        DWORD *  BaseAddress    = (DWORD *)W32S_APP2WINE(stack[2]);\n        DWORD    ZeroBits       = stack[3];\n        DWORD    CommitSize     = stack[4];\n        LARGE_INTEGER *SectionOffset = (LARGE_INTEGER *)W32S_APP2WINE(stack[5]);\n        DWORD *  ViewSize       = (DWORD *)W32S_APP2WINE(stack[6]);\n        DWORD    InheritDisposition = stack[7];\n        DWORD    AllocationType = stack[8];\n        DWORD    Protect        = stack[9];\n\n        LPBYTE address = (LPBYTE)(BaseAddress?\n\t\t\tW32S_APP2WINE(*BaseAddress) : 0);\n        DWORD  access = 0, result;\n\n        switch (Protect & ~(PAGE_GUARD|PAGE_NOCACHE))\n        {\n            case PAGE_READONLY:           access = FILE_MAP_READ;  break;\n            case PAGE_READWRITE:          access = FILE_MAP_WRITE; break;\n            case PAGE_WRITECOPY:          access = FILE_MAP_COPY;  break;\n\n            case PAGE_EXECUTE_READ:       access = FILE_MAP_READ;  break;\n            case PAGE_EXECUTE_READWRITE:  access = FILE_MAP_WRITE; break;\n            case PAGE_EXECUTE_WRITECOPY:  access = FILE_MAP_COPY;  break;\n        }\n\n        TRACE(\"NtMapViewOfSection\"\n                   \"(%x, %x, %x, %x, %x, %x, %x, %x, %x, %x)\\n\",\n                   (DWORD)SectionHandle, ProcessHandle, (DWORD)BaseAddress,\n                   ZeroBits, CommitSize, (DWORD)SectionOffset, (DWORD)ViewSize,\n                   InheritDisposition, AllocationType, Protect);\n        TRACE(\"NtMapViewOfSection: \"\n                   \"base=%x, offset=%x, size=%x, access=%x\\n\",\n                   (DWORD)address, SectionOffset? SectionOffset->u.LowPart : 0,\n                   ViewSize? *ViewSize : 0, access);\n\n        result = (DWORD)MapViewOfFileEx(SectionHandle, access,\n                            SectionOffset? SectionOffset->u.HighPart : 0,\n                            SectionOffset? SectionOffset->u.LowPart  : 0,\n                            ViewSize? *ViewSize : 0, address);\n\n        TRACE(\"NtMapViewOfSection: result=%x\\n\", result);\n\n        if (W32S_WINE2APP(result))\n        {\n            if (BaseAddress) *BaseAddress = W32S_WINE2APP(result);\n            context->Eax = STATUS_SUCCESS;\n        }\n        else\n            context->Eax = STATUS_NO_MEMORY; /* FIXME */\n    }\n    break;\n\n\n    case 0x0012: /* NtUnmapViewOfSection */\n        /*\n         * Input:   EDX: Flat address of arguments on stack\n         *\n         *   DWORD  ProcessHandle  [in]  Process (defining address space)\n         *   LPBYTE BaseAddress    [in]  Base address of view to be unmapped\n         *\n         * Output:  EAX: NtStatus\n         */\n    {\n        DWORD *stack          = (DWORD *)W32S_APP2WINE(context->Edx);\n        DWORD  ProcessHandle  = stack[0]; /* ignored */\n        LPBYTE BaseAddress    = (LPBYTE)W32S_APP2WINE(stack[1]);\n\n        TRACE(\"NtUnmapViewOfSection(%x, %x)\\n\",\n                   ProcessHandle, (DWORD)BaseAddress);\n\n        UnmapViewOfFile(BaseAddress);\n\n        context->Eax = STATUS_SUCCESS;\n    }\n    break;\n\n\n    case 0x0013: /* NtFlushVirtualMemory */\n        /*\n         * Input:   EDX: Flat address of arguments on stack\n         *\n         *   DWORD   ProcessHandle  [in]  Process (defining address space)\n         *   LPBYTE *BaseAddress    [in?] Base address of range to be flushed\n         *   DWORD  *ViewSize       [in?] Number of bytes to be flushed\n         *   DWORD  *unknown        [???] (?? unknown ??)\n         *\n         * Output:  EAX: NtStatus\n         */\n    {\n        DWORD *stack          = (DWORD *)W32S_APP2WINE(context->Edx);\n        DWORD  ProcessHandle  = stack[0]; /* ignored */\n        DWORD *BaseAddress    = (DWORD *)W32S_APP2WINE(stack[1]);\n        DWORD *ViewSize       = (DWORD *)W32S_APP2WINE(stack[2]);\n        DWORD *unknown        = (DWORD *)W32S_APP2WINE(stack[3]);\n\n        LPBYTE address = (LPBYTE)(BaseAddress? W32S_APP2WINE(*BaseAddress) : 0);\n        DWORD  size    = ViewSize? *ViewSize : 0;\n\n        TRACE(\"NtFlushVirtualMemory(%x, %x, %x, %x)\\n\",\n                   ProcessHandle, (DWORD)BaseAddress, (DWORD)ViewSize,\n                   (DWORD)unknown);\n        TRACE(\"NtFlushVirtualMemory: base=%x, size=%x\\n\",\n                   (DWORD)address, size);\n\n        FlushViewOfFile(address, size);\n\n        context->Eax = STATUS_SUCCESS;\n    }\n    break;\n\n\n    case 0x0014: /* Get/Set Debug Registers */\n        /*\n         * Input:   ECX: 0 if Get, 1 if Set\n         *\n         *          EDX: Get: Flat address of buffer to receive values of\n         *                    debug registers DR0 .. DR7\n         *               Set: Flat address of buffer containing values of\n         *                    debug registers DR0 .. DR7 to be set\n         * Output:  None\n         */\n\n        FIXME(\"[0014] ECX=%x EDX=%x\\n\",\n                   context->Ecx, context->Edx);\n\n        /* FIXME */\n        break;\n\n\n    case 0x0015: /* Set Coprocessor Emulation Flag */\n        /*\n         * Input:   EDX: 0 to deactivate, 1 to activate coprocessor emulation\n         *\n         * Output:  None\n         */\n\n        TRACE(\"[0015] EDX=%x\\n\", context->Edx);\n\n        /* We don't care, as we always have a coprocessor anyway */\n        break;\n\n\n    case 0x0016: /* Init Win32S VxD PSP */\n        /*\n         * If called to query required PSP size:\n         *\n         *     Input:  EBX: 0\n         *     Output: EDX: Required size of Win32s VxD PSP\n         *\n         * If called to initialize allocated PSP:\n         *\n         *     Input:  EBX: LoWord: Selector of Win32s VxD PSP\n         *                  HiWord: Paragraph of Win32s VxD PSP (DOSMEM)\n         *     Output: None\n         */\n\n        if (context->Ebx == 0)\n            context->Edx = 0x80;\n        else\n        {\n            PDB16 *psp = MapSL( MAKESEGPTR( BX_reg(context), 0 ));\n            psp->nbFiles = 32;\n            psp->fileHandlesPtr = MAKELONG(HIWORD(context->Ebx), 0x5c);\n            memset((LPBYTE)psp + 0x5c, '\\xFF', 32);\n        }\n        break;\n\n\n    case 0x0017: /* Set Break Point */\n        /*\n         * Input:   EBX: Offset of Break Point\n         *          CX:  Selector of Break Point\n         *\n         * Output:  None\n         */\n\n        FIXME(\"[0017] EBX=%x CX=%x\\n\",\n                   context->Ebx, CX_reg(context));\n\n        /* FIXME */\n        break;\n\n\n    case 0x0018: /* VirtualLock */\n        /*\n         * Input:   ECX: Current Process\n         *\n         *          EDX: Flat address of arguments on stack\n         *\n         *   DWORD *retv     [out] TRUE if success, FALSE if failure\n         *   LPVOID base     [in]  Flat address of range to lock\n         *   DWORD  size     [in]  Size of range\n         *\n         * Output:  EAX: NtStatus\n         */\n    {\n        DWORD *stack  = (DWORD *)W32S_APP2WINE(context->Edx);\n        DWORD *retv   = (DWORD *)W32S_APP2WINE(stack[0]);\n        LPVOID base   = (LPVOID) W32S_APP2WINE(stack[1]);\n        DWORD  size   = stack[2];\n        DWORD  result;\n\n        TRACE(\"VirtualLock(%x, %x, %x)\\n\",\n                   (DWORD)retv, (DWORD)base, size);\n\n        result = VirtualLock(base, size);\n\n        if (result)\n            *retv            = TRUE,\n            context->Eax = STATUS_SUCCESS;\n        else\n            *retv            = FALSE,\n            context->Eax = STATUS_NO_MEMORY;  /* FIXME */\n    }\n    break;\n\n\n    case 0x0019: /* VirtualUnlock */\n        /*\n         * Input:   ECX: Current Process\n         *\n         *          EDX: Flat address of arguments on stack\n         *\n         *   DWORD *retv     [out] TRUE if success, FALSE if failure\n         *   LPVOID base     [in]  Flat address of range to unlock\n         *   DWORD  size     [in]  Size of range\n         *\n         * Output:  EAX: NtStatus\n         */\n    {\n        DWORD *stack  = (DWORD *)W32S_APP2WINE(context->Edx);\n        DWORD *retv   = (DWORD *)W32S_APP2WINE(stack[0]);\n        LPVOID base   = (LPVOID) W32S_APP2WINE(stack[1]);\n        DWORD  size   = stack[2];\n        DWORD  result;\n\n        TRACE(\"VirtualUnlock(%x, %x, %x)\\n\",\n                   (DWORD)retv, (DWORD)base, size);\n\n        result = VirtualUnlock(base, size);\n\n        if (result)\n            *retv            = TRUE,\n            context->Eax = STATUS_SUCCESS;\n        else\n            *retv            = FALSE,\n            context->Eax = STATUS_NO_MEMORY;  /* FIXME */\n    }\n    break;\n\n\n    case 0x001A: /* KGetSystemInfo */\n        /*\n         * Input:   None\n         *\n         * Output:  ECX:  Start of sparse memory arena\n         *          EDX:  End of sparse memory arena\n         */\n\n        TRACE(\"KGetSystemInfo()\\n\");\n\n        /*\n         * Note: Win32s reserves 0GB - 2GB for Win 3.1 and uses 2GB - 4GB as\n         *       sparse memory arena. We do it the other way around, since\n         *       we have to reserve 3GB - 4GB for Linux, and thus use\n         *       0GB - 3GB as sparse memory arena.\n         *\n         *       FIXME: What about other OSes ?\n         */\n\n        context->Ecx = W32S_WINE2APP(0x00000000);\n        context->Edx = W32S_WINE2APP(0xbfffffff);\n        break;\n\n\n    case 0x001B: /* KGlobalMemStat */\n        /*\n         * Input:   ESI: Flat address of buffer to receive memory info\n         *\n         * Output:  None\n         */\n    {\n        struct Win32sMemoryInfo\n        {\n            DWORD DIPhys_Count;       /* Total physical pages */\n            DWORD DIFree_Count;       /* Free physical pages */\n            DWORD DILin_Total_Count;  /* Total virtual pages (private arena) */\n            DWORD DILin_Total_Free;   /* Free virtual pages (private arena) */\n\n            DWORD SparseTotal;        /* Total size of sparse arena (bytes ?) */\n            DWORD SparseFree;         /* Free size of sparse arena (bytes ?) */\n        };\n\n        struct Win32sMemoryInfo *info =\n                       (struct Win32sMemoryInfo *)W32S_APP2WINE(context->Esi);\n\n        FIXME(\"KGlobalMemStat(%x)\\n\", (DWORD)info);\n\n        /* FIXME */\n    }\n    break;\n\n\n    case 0x001C: /* Enable/Disable Exceptions */\n        /*\n         * Input:   ECX: 0 to disable, 1 to enable exception handling\n         *\n         * Output:  None\n         */\n\n        TRACE(\"[001c] ECX=%x\\n\", context->Ecx);\n\n        /* FIXME */\n        break;\n\n\n    case 0x001D: /* VirtualAlloc called from 16-bit code */\n        /*\n         * Input:   EDX: Segmented address of arguments on stack\n         *\n         *   LPVOID base     [in]  Flat address of region to reserve/commit\n         *   DWORD  size     [in]  Size of region\n         *   DWORD  type     [in]  Type of allocation\n         *   DWORD  prot     [in]  Type of access protection\n         *\n         * Output:  EAX: NtStatus\n         *          EDX: Flat base address of allocated region\n         */\n    {\n        DWORD *stack  = MapSL( MAKESEGPTR( LOWORD(context->Edx), HIWORD(context->Edx) ));\n        LPVOID base   = (LPVOID)W32S_APP2WINE(stack[0]);\n        DWORD  size   = stack[1];\n        DWORD  type   = stack[2];\n        DWORD  prot   = stack[3];\n        DWORD  result;\n\n        TRACE(\"VirtualAlloc16(%x, %x, %x, %x)\\n\",\n                   (DWORD)base, size, type, prot);\n\n        if (type & 0x80000000)\n        {\n            WARN(\"VirtualAlloc16: strange type %x\\n\", type);\n            type &= 0x7fffffff;\n        }\n\n        result = (DWORD)VirtualAlloc(base, size, type, prot);\n\n        if (W32S_WINE2APP(result))\n            context->Edx = W32S_WINE2APP(result),\n            context->Eax = STATUS_SUCCESS;\n        else\n            context->Edx = 0,\n            context->Eax = STATUS_NO_MEMORY;  /* FIXME */\n\tTRACE(\"VirtualAlloc16: returning base %x\\n\", context->Edx);\n    }\n    break;\n\n\n    case 0x001E: /* VirtualFree called from 16-bit code */\n        /*\n         * Input:   EDX: Segmented address of arguments on stack\n         *\n         *   LPVOID base     [in]  Flat address of region\n         *   DWORD  size     [in]  Size of region\n         *   DWORD  type     [in]  Type of operation\n         *\n         * Output:  EAX: NtStatus\n         *          EDX: TRUE if success, FALSE if failure\n         */\n    {\n        DWORD *stack  = MapSL( MAKESEGPTR( LOWORD(context->Edx), HIWORD(context->Edx) ));\n        LPVOID base   = (LPVOID)W32S_APP2WINE(stack[0]);\n        DWORD  size   = stack[1];\n        DWORD  type   = stack[2];\n        DWORD  result;\n\n        TRACE(\"VirtualFree16(%x, %x, %x)\\n\",\n                   (DWORD)base, size, type);\n\n        result = VirtualFree(base, size, type);\n\n        if (result)\n            context->Edx = TRUE,\n            context->Eax = STATUS_SUCCESS;\n        else\n            context->Edx = FALSE,\n            context->Eax = STATUS_NO_MEMORY;  /* FIXME */\n    }\n    break;\n\n\n    case 0x001F: /* FWorkingSetSize */\n        /*\n         * Input:   EDX: 0 if Get, 1 if Set\n         *\n         *          ECX: Get: Buffer to receive Working Set Size\n         *               Set: Buffer containing Working Set Size\n         *\n         * Output:  NtStatus\n         */\n    {\n        DWORD *ptr = (DWORD *)W32S_APP2WINE(context->Ecx);\n        BOOL set = context->Edx;\n\n        TRACE(\"FWorkingSetSize(%x, %x)\\n\", (DWORD)ptr, (DWORD)set);\n\n        if (set)\n            /* We do it differently ... */;\n        else\n            *ptr = 0x100;\n\n        context->Eax = STATUS_SUCCESS;\n    }\n    break;\n\n    default:\n\tVXD_BARF( context, \"W32S\" );\n    }\n}\n"
  },
  {
    "path": "krnl386/wow_handle.c",
    "content": "/*\nhandle16 <-> wow64 handle32\n*/\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <assert.h>\n#include <stdarg.h>\n#include <errno.h>\n\n#include \"windows.h\"\n#include \"wine/winbase16.h\"\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winerror.h\"\n#include \"windows/wownt32.h\"\n#include \"excpt.h\"\n#include \"winternl.h\"\n#include \"kernel16_private.h\"\n#include \"wine/exception.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(thunk);\n#define HANDLE_RESERVED 32\ntypedef struct\n{\n\tHANDLE handle32;\n    DWORD wndproc;\n    DWORD dlgproc;\n    HINSTANCE16 hInst16;\n    HMENU16 hMenu16;\n    void *ptr;\n    WOW_HANDLE_TYPE type;\n} HANDLE_DATA;\ntypedef struct tagHANDLE_STORAGE *LPHANDLE_STORAGE;\ntypedef void(*clean_up_t)(LPHANDLE_STORAGE);\ntypedef struct\n{\n    HANDLE_DATA *handles;\n    LPCSTR name;\n    int align;\n    int align2;\n    clean_up_t clean_up;\n} HANDLE_STORAGE;\n#define HANDLE_TYPE_HANDLE 0\n#define HANDLE_TYPE_HGDI 1\n#define HANDLE_TYPE_MAX 2\nstatic HANDLE_STORAGE handle_list[HANDLE_TYPE_MAX];\nstatic BOOL handle_trace;\nstatic BOOL handle_init_flag;\nstatic void hgdi_clean_up(HANDLE_STORAGE* hs);\nstatic void user_handle_clean_up(HANDLE_STORAGE* hs);\nstatic BOOL map_low_word_user_handle;\nstatic CRITICAL_SECTION handle_lock;\n\n/* this function called by DllMain(kernel.c) */\nvoid init_wow_handle()\n{\n    if (handle_init_flag)\n        return;\n    handle_trace = TRACE_ON(thunk);\n    handle_init_flag = TRUE;\n    handle_list[HANDLE_TYPE_HANDLE].handles = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 65536 * sizeof(HANDLE_DATA));\n    handle_list[HANDLE_TYPE_HANDLE].align = 1;\n    /* IsWindow(hdc) should return FALSE */\n    handle_list[HANDLE_TYPE_HANDLE].align2 = 4;\n    handle_list[HANDLE_TYPE_HANDLE].name = \"HANDLE\";\n    handle_list[HANDLE_TYPE_HANDLE].clean_up = user_handle_clean_up;\n    /*\n    hdc1 = CreateCompatibleDC(0);\n    hdc2 = CreateCompatibleDC(0);\n    hdc3 = CreateCompatibleDC(0);\n    hdc4 = CreateCompatibleDC(0);\n\n    hdc1: 0x6c, hdc2: 0x70, hdc3: 0x74, hdc4: 0x78...\n    PBRUSH expects HDC to be a multiple of 4.\n    */\n    handle_list[HANDLE_TYPE_HGDI].align = 4;\n    handle_list[HANDLE_TYPE_HGDI].name = \"HGDI\";\n    handle_list[HANDLE_TYPE_HGDI].align2 = 0;\n    handle_list[HANDLE_TYPE_HGDI].handles = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 65536 * sizeof(HANDLE_DATA));\n    handle_list[HANDLE_TYPE_HGDI].clean_up = hgdi_clean_up;\n    map_low_word_user_handle = krnl386_get_config_int(\"otvdm\", \"MapLowWordUserHandle\", FALSE);\n    InitializeCriticalSection(&handle_lock);\n}\nWORD get_handle16_data(HANDLE h, HANDLE_STORAGE *hs, HANDLE_DATA **o);\n\nstatic DWORD get_handle_type(HANDLE h, HANDLE_STORAGE *hs)\n{\n    if (hs != &handle_list[HANDLE_TYPE_HGDI])\n        return 0;\n    return GetObjectType(h) << 16;\n}\n\nBOOL is_reserved_handle32(HANDLE h)\n{\n    SSIZE_T signedh = (SSIZE_T)h;\n    if (signedh < HANDLE_RESERVED && signedh > -HANDLE_RESERVED)\n    {\n        return TRUE;\n    }\n    return FALSE;\n}\nBOOL is_reserved_handle16(HANDLE16 h)\n{\n    INT16 signedh = (INT16)h;\n    if (signedh < HANDLE_RESERVED && signedh > -HANDLE_RESERVED)\n    {\n        return TRUE;\n    }\n    return FALSE;\n}\nWORD get_handle16(HANDLE h, HANDLE_STORAGE *hs, WOW_HANDLE_TYPE type)\n{\n\tif (is_reserved_handle32(h))\n\t{\n\t\treturn h;\n\t}\n\tHANDLE_DATA *hd;\n\tint hnd16 = get_handle16_data(h, hs, &hd);\n    if (!hd)\n        return 0;\n\thd->handle32 = h;\n    hd->type = type;\n\treturn hnd16;\n}\nWORD get_handle16_data(HANDLE h, HANDLE_STORAGE *hs, HANDLE_DATA **o)\n{\n    int retry_count = 0;\n\t//?\n\tif (is_reserved_handle32(h))\n\t{\n\t\t*o = &hs->handles[(size_t)h];\n\t\treturn h;\n\t}\n\tWORD fhandle = 0;\n    DWORD type = get_handle_type(h, hs);\n\n    WORD s = HANDLE_RESERVED;\nretry:\n\tfor (WORD i = s; i; i += hs->align)\n\t{\n        if (i >= (WORD)(-HANDLE_RESERVED))\n            break;\n        if (hs->align2 && (i & -hs->align2) == i)\n            continue;\n\t\tif ((!hs->handles[i].handle32 || (hs->handles[i].handle32 == type)) && !fhandle)\n\t\t{\n\t\t\tfhandle = i;\n\t\t}\n\t\tif (hs->handles[i].handle32 == h)\n\t\t{\n\t\t\t*o = &hs->handles[i];\n\t\t\treturn i;\n\t\t}\n\t}\n\tif (!fhandle)\n\t{\n        *o = NULL;\n\t\tERR(\"Could not allocate a handle.\\n\");\n        retry_count++;\n        if (retry_count == 1 && hs->clean_up)\n        {\n            hs->clean_up(hs);\n            goto retry;\n        }\n        return 0;\n\t}\n    if (handle_trace)\n        DPRINTF(\"allocate %s %p=>%04x\\n\", hs->name, h, fhandle);\n\t*o = &hs->handles[fhandle];\n    memset(*o, 0, sizeof(HANDLE_DATA));\n\treturn fhandle;\n}\nvoid destroy_handle16(HANDLE_STORAGE *hs, WORD h)\n{\n    if (is_reserved_handle32(h))\n    {\n        return;\n    }\n    DWORD type = get_handle_type(hs->handles[h].handle32, hs);\n    memset(hs->handles + h, 0, sizeof(*hs->handles));\n    hs->handles[h].handle32 = type;\n}\nBOOL get_handle32_data(WORD h, HANDLE_STORAGE *hs, HANDLE_DATA **o)\n{\n    if (!h)\n    {\n        *o = NULL;\n        return FALSE;\n    }\n    if (is_reserved_handle16(h))\n\t{\n\t\t*o = &hs->handles[(size_t)h];\n\t\t(*o)->handle32 = h;\n\t\treturn TRUE;\n\t}\n\t*o = &hs->handles[h];\n    return TRUE;\n}\nHANDLE get_handle32(WORD h, HANDLE_STORAGE *hs)\n{\n\tif (is_reserved_handle16(h))\n\t{\n        hs->handles[h].handle32 = h;\n\t\treturn (UINT16)h;\n\t}\n    if (hs->handles[h].handle32)\n    {\n        return hs->handles[h].handle32;\n    }\n    hs->handles[h].handle32 = h;\n    return (HANDLE)h;\n}\n\nstatic void enter_handle_lock()\n{\n    EnterCriticalSection(&handle_lock);\n}\n\nstatic void leave_handle_lock()\n{\n    LeaveCriticalSection(&handle_lock);\n}\n\n//handle16 -> wow64 handle32\nHANDLE WINAPI K32WOWHandle32User(WORD handle)\n{\n    HANDLE h32;\n    if (map_low_word_user_handle)\n    {\n        return (HANDLE)handle;\n    }\n    enter_handle_lock();\n    h32 = get_handle32(handle, &handle_list[HANDLE_TYPE_HANDLE]);\n    if (handle_trace)\n        DPRINTF(\"HANDLE1632 %04X %p\\n\", handle, h32);\n    leave_handle_lock();\n    return h32;\n}\n\nHANDLE WINAPI K32WOWHandle32Other(WORD handle)\n{\n    enter_handle_lock();\n    HANDLE h32 = get_handle32(handle, &handle_list[HANDLE_TYPE_HANDLE]);\n    if (handle_trace)\n        DPRINTF(\"HANDLE1632 %04X %p\\n\", handle, h32);\n    leave_handle_lock();\n    return h32;\n}\n\n//handle16 <- wow64 handle32\nHANDLE16 WINAPI K32WOWHandle16User(HANDLE handle, WOW_HANDLE_TYPE type)\n{\n    HANDLE16 h16;\n    if (map_low_word_user_handle)\n    {\n        return (HANDLE16)LOWORD(handle);\n    }\n    enter_handle_lock();\n    h16 = get_handle16(handle, &handle_list[HANDLE_TYPE_HANDLE], type);\n    if (handle_trace)\n        DPRINTF(\"HANDLE3216 %p %04X\\n\", handle, h16);\n    leave_handle_lock();\n    return h16;\n}\n\nHANDLE16 WINAPI K32WOWHandle16Other(HANDLE handle, WOW_HANDLE_TYPE type)\n{\n    enter_handle_lock();\n    HANDLE16 h16 = get_handle16(handle, &handle_list[HANDLE_TYPE_HANDLE], type);\n    if (handle_trace)\n        DPRINTF(\"HANDLE3216 %p %04X\\n\", handle, h16);\n    leave_handle_lock();\n    return h16;\n}\n\n//handle16 -> wow64 handle32\nHANDLE WINAPI K32WOWHandle32HGDI(WORD handle)\n{\n    enter_handle_lock();\n    HANDLE h32 = get_handle32(handle, &handle_list[HANDLE_TYPE_HGDI]);\n    if (handle_trace)\n        DPRINTF(\"HGDI1632 %04X %p\\n\", handle, h32);\n    leave_handle_lock();\n    return h32;\n}\n//handle16 <- wow64 handle32\nHANDLE16 WINAPI K32WOWHandle16HGDI(HANDLE handle, WOW_HANDLE_TYPE type)\n{\n    enter_handle_lock();\n    HANDLE16 h16 = get_handle16(handle, &handle_list[HANDLE_TYPE_HGDI], type);\n    if (handle_trace)\n        DPRINTF(\"HGDI3216 %p %04X\\n\", handle, h16);\n    leave_handle_lock();\n    return h16;\n}\nstatic BOOL is_gdiobj(WOW_HANDLE_TYPE type)\n{\n    return type == WOW_TYPE_HDC || type == WOW_TYPE_HBITMAP || type == WOW_TYPE_HBRUSH ||\n        type == WOW_TYPE_HFONT || type == WOW_TYPE_HMETAFILE || type == WOW_TYPE_HPALETTE ||\n        type == WOW_TYPE_HPEN || type == WOW_TYPE_HRGN;\n}\nvoid WINAPI K32WOWHandle16Destroy(HANDLE handle, WOW_HANDLE_TYPE type)\n{\n    enter_handle_lock();\n    if (is_gdiobj(type))\n    {\n        HGDIOBJ16 h16 = K32WOWHandle16HGDI(handle, type);\n        if (handle_trace)\n            DPRINTF(\"destroy HGDI %p %04X\\n\", handle, h16);\n        destroy_handle16(&handle_list[HANDLE_TYPE_HGDI], h16);\n    }\n    else if (type == WOW_TYPE_HWND || type == WOW_TYPE_HMENU || type == WOW_TYPE_HDWP || type == WOW_TYPE_HDROP || type == WOW_TYPE_HACCEL)\n    {\n        if (!map_low_word_user_handle)\n        {\n            HANDLE16 h16 = K32WOWHandle16User(handle, type);\n            if (handle_trace)\n                DPRINTF(\"destroy User HANDLE %p %04X\\n\", handle, h16);\n            destroy_handle16(&handle_list[HANDLE_TYPE_HANDLE], h16);\n        }\n    }\n    else\n    {\n        HANDLE16 h16 = K32WOWHandle16Other(handle, type);\n        if (handle_trace)\n            DPRINTF(\"destroy HANDLE %p %04X\\n\", handle, h16);\n        destroy_handle16(&handle_list[HANDLE_TYPE_HANDLE], h16);\n    }\n    leave_handle_lock();\n}\nvoid WINAPI K32WOWHandle16DestroyHint(HANDLE handle, WOW_HANDLE_TYPE type)\n{\n    if (type == WOW_TYPE_HWND)\n    {\n        if (IsWindow(handle))\n            return;\n        K32WOWHandle16Destroy(handle, type);\n    }\n    if (type == WOW_TYPE_HMENU)\n    {\n        if (IsMenu(handle))\n            return;\n        K32WOWHandle16Destroy(handle, type);\n    }\n    if (is_gdiobj(type))\n    {\n        if (GetObjectType(handle))\n            return;\n        K32WOWHandle16Destroy(handle, type);\n    }\n}\n\nstatic void hgdi_clean_up(HANDLE_STORAGE* hs)\n{\n    for (int i = HANDLE_RESERVED; i < (WORD)(-HANDLE_RESERVED); i += hs->align)\n    {\n        if (handle_trace)\n        {\n            static const char *tbl[] =\n            {\n                \"(deleted)\",\n                \"OBJ_PEN\",\n                \"OBJ_BRUSH\",\n                \"OBJ_DC\",\n                \"OBJ_METADC\",\n                \"OBJ_PAL\",\n                \"OBJ_FONT\",\n                \"OBJ_BITMAP\",\n                \"OBJ_REGION\",\n                \"OBJ_METAFILE\",\n                \"OBJ_MEMDC\",\n                \"OBJ_EXTPEN\",\n                \"OBJ_ENHMETADC\",\n                \"OBJ_ENHMETAFILE\",\n                \"OBJ_COLORSPACE\"\n            };\n            DPRINTF(\"%p: %s\\n\", hs->handles[i].handle32, tbl[GetObjectType(hs->handles[i].handle32)]);\n        }\n        K32WOWHandle16DestroyHint(hs->handles[i].handle32, WOW_TYPE_HDC);\n    }\n}\n\nstatic void user_handle_clean_up(HANDLE_STORAGE* hs)\n{\n    for (int i = HANDLE_RESERVED; i < (WORD)(-HANDLE_RESERVED); i += hs->align)\n    {\n        K32WOWHandle16DestroyHint(hs->handles[i].handle32, hs->handles[i].type);\n    }\n}\n\n__declspec(dllexport) void SetWindowHInst16(WORD hWnd16, HINSTANCE16 hinst16)\n{\n    HANDLE_DATA *dat;\n    if (!get_handle32_data(hWnd16, &handle_list[HANDLE_TYPE_HANDLE], &dat))\n    {\n        ERR(\"Invalid Window Handle SetWindowHInst16(%04X,%04X)\\n\", hWnd16, hinst16);\n        return;\n    }\n    dat->hInst16 = hinst16;\n}\n__declspec(dllexport) HINSTANCE16 GetWindowHInst16(WORD hWnd16)\n{\n    HANDLE_DATA *dat;\n    if (!get_handle32_data(hWnd16, &handle_list[HANDLE_TYPE_HANDLE], &dat))\n    {\n        ERR(\"Invalid Window Handle GetWindowHInst16(%04X)\\n\", hWnd16);\n        return 0;\n    }\n    return dat->hInst16;\n}\n\n__declspec(dllexport) void SetWindowHMenu16(WORD hWnd16, HMENU16 h)\n{\n    HANDLE_DATA *dat;\n    if (!get_handle32_data(hWnd16, &handle_list[HANDLE_TYPE_HANDLE], &dat))\n    {\n        ERR(\"Invalid Window Handle SetWindowHMenu16(%04X,%04X)\\n\", hWnd16, h);\n        return;\n    }\n    dat->hMenu16 = h;\n}\n__declspec(dllexport) HMENU16 GetWindowHMenu16(WORD hWnd16)\n{\n\tHANDLE_DATA *dat;\n\tif (!get_handle32_data(hWnd16, &handle_list[HANDLE_TYPE_HANDLE], &dat))\n\t{\n\t\tERR(\"Invalid Window Handle GetWindowHMenu16(%04X)\\n\", hWnd16);\n\t\treturn 0;\n\t}\n\tif (dat->hMenu16)\n\t{\n\t\treturn dat->hMenu16;\n\t}\n\treturn WOWHandle16(GetMenu(dat->handle32), WOW_TYPE_HMENU);\n}\n\n__declspec(dllexport) void SetWndProc16(WORD hWnd16, DWORD WndProc)\n{\n\tHANDLE_DATA *dat;\n\tif (!get_handle32_data(hWnd16, &handle_list[HANDLE_TYPE_HANDLE], &dat))\n\t{\n\t\tERR(\"Invalid Window Handle SetWndProc16(%04X,%04X)\\n\", hWnd16, WndProc);\n\t\treturn;\n\t}\n\tdat->wndproc = WndProc;\n}\n__declspec(dllexport) DWORD GetWndProc16(WORD hWnd16)\n{\n\tHANDLE_DATA *dat;\n\tif (!get_handle32_data(hWnd16, &handle_list[HANDLE_TYPE_HANDLE], &dat))\n\t{\n\t\tERR(\"Invalid Window Handle GetWndProc16(%04X)\\n\", hWnd16);\n\t\treturn 0;\n\t}\n\treturn dat->wndproc;\n}\n\n\n__declspec(dllexport) void SetDlgProc16(WORD hWnd16, DWORD WndProc)\n{\n    HANDLE_DATA *dat;\n    if (!get_handle32_data(hWnd16, &handle_list[HANDLE_TYPE_HANDLE], &dat))\n    {\n        ERR(\"Invalid Window Handle SetDlgProc16(%04X,%04X)\\n\", hWnd16, WndProc);\n        return;\n    }\n    dat->dlgproc = WndProc;\n}\n__declspec(dllexport) DWORD GetDlgProc16(WORD hWnd16)\n{\n    HANDLE_DATA *dat;\n    if (!get_handle32_data(hWnd16, &handle_list[HANDLE_TYPE_HANDLE], &dat))\n    {\n        ERR(\"Invalid Window Handle GetDlgProc16(%04X)\\n\", hWnd16);\n        return 0;\n    }\n    return dat->dlgproc;\n}\n\n__declspec(dllexport) void SetPtr16(WORD hdl16, void *ptr, int type)\n{\n    HANDLE_DATA *dat;\n    if (!get_handle32_data(hdl16, &handle_list[type], &dat))\n    {\n        ERR(\"Invalid Handle SetPtr16(%04X,%04X)\\n\", hdl16, (DWORD)ptr);\n        return;\n    }\n    dat->ptr = ptr;\n}\n\n__declspec(dllexport) void *GetPtr16(WORD hdl16, int type)\n{\n    HANDLE_DATA *dat;\n    if (!get_handle32_data(hdl16, &handle_list[type], &dat))\n    {\n        ERR(\"Invalid Handle GetPtr16(%04X)\\n\", hdl16);\n        return NULL;\n    }\n    return dat->ptr;\n}\n"
  },
  {
    "path": "krnl386/wowthunk.c",
    "content": "/*\n * Win32 WOW Generic Thunk API\n *\n * Copyright 1999 Ulrich Weigand\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <assert.h>\n#include <stdarg.h>\n#include <errno.h>\n\n#include \"wine/winbase16.h\"\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winerror.h\"\n#include \"windows/wownt32.h\"\n#include \"excpt.h\"\n#include \"winternl.h\"\n#include \"kernel16_private.h\"\n#include \"wine/exception.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(thunk);\nWINE_DECLARE_DEBUG_CHANNEL(relay);\nWINE_DECLARE_DEBUG_CHANNEL(snoop);\n\n/* symbols exported from relay16.s */\nextern DWORD WINAPI wine_call_to_16( FARPROC16 target, DWORD cbArgs, PEXCEPTION_HANDLER handler );\nextern void WINAPI wine_call_to_16_regs( CONTEXT *context, DWORD cbArgs, PEXCEPTION_HANDLER handler );\nstatic void (*__wine_call_to_16_ret)(void);\nextern void CALL32_CBClient_Ret(void);\nextern void CALL32_CBClientEx_Ret(void);\nextern void DPMI_PendingEventCheck(void);\nextern void DPMI_PendingEventCheck_Cleanup(void);\nextern void DPMI_PendingEventCheck_Return(void);\nstatic LPBYTE __wine_call16_start;\nstatic LPBYTE __wine_call16_end;\n\nstatic SEGPTR call16_ret_addr;  /* segptr to __wine_call_to_16_ret routine */\n\nstatic WORD  dpmi_checker_selector;\nstatic DWORD dpmi_checker_offset_call;\nstatic DWORD dpmi_checker_offset_cleanup;\nstatic DWORD dpmi_checker_offset_return;\n\nextern LPVOID *__wine_call_to_16_ret_p;\nextern LPVOID *__wine_call16_start_p;\nextern LPVOID *__wine_call16_end_p;\n/***********************************************************************\n *           WOWTHUNK_Init\n */\nBOOL WOWTHUNK_Init(void)\n{\n    __wine_call_to_16_ret = __wine_call_to_16_ret_p;\n    __wine_call16_start = __wine_call16_start_p;\n    __wine_call16_end = __wine_call16_end_p;\n    /* allocate the code selector for CallTo16 routines */\n    LDT_ENTRY entry;\n    WORD codesel = wine_ldt_alloc_entries(1);\n\n    if (!codesel) return FALSE;\n    wine_ldt_set_base( &entry, __wine_call16_start );\n    wine_ldt_set_limit( &entry, (BYTE *)(&CallTo16_TebSelector + 1) - __wine_call16_start - 1 );\n    wine_ldt_set_flags( &entry, WINE_LDT_FLAGS_CODE | WINE_LDT_FLAGS_32BIT );\n    wine_ldt_set_entry( codesel, &entry );\n\n      /* Patch the return addresses for CallTo16 routines */\n\n    CallTo16_DataSelector = wine_get_ds();\n    if (0 > (SSIZE_T)__wine_call_to_16_ret - (SSIZE_T)__wine_call16_start)\n    {\n        ERR(\"0 > (SSIZE_T)__wine_call_to_16_ret - (SSIZE_T)__wine_call16_start! %p %p %d\\n\", __wine_call_to_16_ret, __wine_call16_start, (SSIZE_T)__wine_call_to_16_ret - (SSIZE_T)__wine_call16_start);\n    }\n    if (0xffff < (SSIZE_T)__wine_call_to_16_ret - (SSIZE_T)__wine_call16_start)\n    {\n        ERR(\"0xffff > (SSIZE_T)__wine_call_to_16_ret - (SSIZE_T)__wine_call16_start! %p %p %d\\n\", __wine_call_to_16_ret, __wine_call16_start, (SSIZE_T)__wine_call_to_16_ret - (SSIZE_T)__wine_call16_start);\n    }\n    call16_ret_addr = MAKESEGPTR( codesel, (BYTE *)__wine_call_to_16_ret - __wine_call16_start );\n    CALL32_CBClient_RetAddr =\n        MAKESEGPTR( codesel, (BYTE *)CALL32_CBClient_Ret - __wine_call16_start );\n    CALL32_CBClientEx_RetAddr =\n        MAKESEGPTR( codesel, (BYTE *)CALL32_CBClientEx_Ret - __wine_call16_start );\n\n    /* Prepare selector and offsets for DPMI event checking. */\n    dpmi_checker_selector = codesel;\n    dpmi_checker_offset_call = (BYTE *)DPMI_PendingEventCheck - __wine_call16_start;\n    dpmi_checker_offset_cleanup = (BYTE *)DPMI_PendingEventCheck_Cleanup - __wine_call16_start;\n    dpmi_checker_offset_return = (BYTE *)DPMI_PendingEventCheck_Return - __wine_call16_start;\n\n    if (TRACE_ON(relay) || TRACE_ON(snoop)) RELAY16_InitDebugLists();\n\n    return TRUE;\n}\n\n\n/*************************************************************\n *            fix_selector\n *\n * Fix a selector load that caused an exception if it's in the\n * 16-bit relay code.\n */\nstatic BOOL fix_selector( CONTEXT *context )\n{\n    WORD *stack;\n    BYTE *instr = (BYTE *)context->Eip;\n\n    if (instr < __wine_call16_start || instr >= __wine_call16_end) return FALSE;\n\n    /* skip prefixes */\n    while (*instr == 0x66 || *instr == 0x67) instr++;\n\n    switch(instr[0])\n    {\n    case 0x07: /* pop es */\n    case 0x17: /* pop ss */\n    case 0x1f: /* pop ds */\n        break;\n    case 0x0f: /* extended instruction */\n        switch(instr[1])\n        {\n        case 0xa1: /* pop fs */\n        case 0xa9: /* pop gs */\n            break;\n        default:\n            return FALSE;\n        }\n        break;\n    default:\n        return FALSE;\n    }\n    stack = wine_ldt_get_ptr( context->SegSs, context->Esp );\n    TRACE( \"fixing up selector %x for pop instruction\\n\", *stack );\n    *stack = 0;\n    return TRUE;\n}\n\n\n/*************************************************************\n *            insert_event_check\n *\n * Make resuming the context check for pending DPMI events\n * before the original context is restored. This is required\n * because DPMI events are asynchronous, they are blocked while \n * Wine 32-bit code is being executed and we want to prevent \n * a race when returning back to 16-bit or 32-bit DPMI context.\n */\nstatic void insert_event_check( CONTEXT *context )\n{\n    char *stack = wine_ldt_get_ptr( context->SegSs, context->Esp );\n\n    /* don't do event check while in system code */\n    if (wine_ldt_is_system(context->SegCs))\n        return;\n\n    if(context->SegCs == dpmi_checker_selector &&\n       context->Eip   >= dpmi_checker_offset_call && \n       context->Eip   <= dpmi_checker_offset_cleanup)\n    {\n        /*\n         * Nested call. Stack will be preserved. \n         */\n    }\n    else if(context->SegCs == dpmi_checker_selector &&\n            context->Eip   == dpmi_checker_offset_return)\n    {\n        /*\n         * Nested call. We have just finished popping the fs\n         * register, lets put it back into stack.\n         */\n\n        stack -= sizeof(WORD);\n        *(WORD*)stack = context->SegFs;\n\n        context->Esp -= 2;\n    }\n    else\n    {\n        /*\n         * Call is not nested.\n         * Push modified registers into stack.\n         * These will be popped by the assembler stub.\n         */\n\n        stack -= sizeof(DWORD);\n        *(DWORD*)stack = context->EFlags;\n   \n        stack -= sizeof(DWORD);\n        *(DWORD*)stack = context->SegCs;\n\n        stack -= sizeof(DWORD);\n        *(DWORD*)stack = context->Eip;\n\n        stack -= sizeof(WORD);\n        *(WORD*)stack = context->SegFs;\n\n        context->Esp  -= 14;\n    }\n\n    /*\n     * Modify the context so that we jump into assembler stub.\n     * TEB access is made easier by providing the stub\n     * with the correct fs register value.\n     */\n\n    context->SegCs = dpmi_checker_selector;\n    context->Eip   = dpmi_checker_offset_call;\n    context->SegFs = wine_get_fs();\n}\n\n\n/*************************************************************\n *            call16_handler\n *\n * Handler for exceptions occurring in 16-bit code.\n */\nstatic EXCEPTION_DISPOSITION NTAPI call16_handler( EXCEPTION_RECORD *record, EXCEPTION_REGISTRATION_RECORD *frame,\n                             CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **pdispatcher )\n{\n    if (record->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND))\n    {\n        /* unwinding: restore the stack pointer in the TEB, and leave the Win16 mutex */\n        STACK32FRAME *frame32 = CONTAINING_RECORD(frame, STACK32FRAME, frame);\n\t\tsetWOW32Reserved((void *)frame32->frame16);\n        _LeaveWin16Lock();\n    }\n    else if (record->ExceptionCode == EXCEPTION_ACCESS_VIOLATION ||\n             record->ExceptionCode == EXCEPTION_PRIV_INSTRUCTION)\n    {\n        if (wine_ldt_is_system(context->SegCs))\n        {\n            if (fix_selector( context )) return ExceptionContinueExecution;\n        }\n        else\n        {\n            SEGPTR gpHandler;\n            DWORD ret = __wine_emulate_instruction( record, context );\n\n            /*\n             * Insert check for pending DPMI events. Note that this \n             * check must be inserted after instructions have been \n             * emulated because the instruction emulation requires\n             * original CS:IP and the emulation may change TEB.dpmi_vif.\n             */\n            if(get_vm86_teb_info()->dpmi_vif)\n                insert_event_check( context );\n\n            if (ret != ExceptionContinueSearch) return ret;\n\n            /* check for Win16 __GP handler */\n            if ((gpHandler = HasGPHandler16( MAKESEGPTR( context->SegCs, context->Eip ) )))\n            {\n                WORD *stack = wine_ldt_get_ptr( context->SegSs, context->Esp );\n                *--stack = context->SegCs;\n                *--stack = context->Eip;\n\n                if (!IS_SELECTOR_32BIT(context->SegSs))\n                    context->Esp = MAKELONG( LOWORD(context->Esp - 2*sizeof(WORD)),\n                                             HIWORD(context->Esp) );\n                else\n                    context->Esp -= 2*sizeof(WORD);\n\n                context->SegCs = SELECTOROF( gpHandler );\n                context->Eip   = OFFSETOF( gpHandler );\n                return ExceptionContinueExecution;\n            }\n        }\n    }\n    else if (record->ExceptionCode == EXCEPTION_VM86_STI)\n    {\n        insert_event_check( context );\n    }\n    return ExceptionContinueSearch;\n}\n\n\n/*************************************************************\n *            vm86_handler\n *\n * Handler for exceptions occurring in vm86 code.\n */\nstatic EXCEPTION_DISPOSITION\nNTAPI vm86_handler(struct _EXCEPTION_RECORD *record, PVOID frame,\n    struct _CONTEXT *context, PVOID pdispatcher )\n{\n    if (record->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND))\n        return ExceptionContinueSearch;\n\n    if (record->ExceptionCode == EXCEPTION_ACCESS_VIOLATION ||\n        record->ExceptionCode == EXCEPTION_PRIV_INSTRUCTION)\n    {\n        return __wine_emulate_instruction( record, context );\n    }\n\n    return ExceptionContinueSearch;\n}\n\n/*static EXCEPTION_DISPOSITION NTAPI vm86_handler(struct _EXCEPTION_RECORD **ExceptionRecord,\n\tPVOID EstablisherFrame,\nstruct _CONTEXT **ContextRecord,\n\tPVOID DispatcherContext)\n{\n\tif ((*ExceptionRecord)->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND))\n\t\treturn ExceptionContinueSearch;\n\n\tif ((*ExceptionRecord)->ExceptionCode == EXCEPTION_ACCESS_VIOLATION ||\n\t\t(*ExceptionRecord)->ExceptionCode == EXCEPTION_PRIV_INSTRUCTION)\n\t{\n\t\treturn __wine_emulate_instruction(ExceptionRecord, ContextRecord);\n\t}\n\n\treturn ExceptionContinueSearch;\n\n}*/\n\n\n\n/*\n *  32-bit WOW routines (in WOW32, but actually forwarded to KERNEL32)\n */\n\n/**********************************************************************\n *           K32WOWGetDescriptor        (KERNEL32.70)\n */\nBOOL WINAPI K32WOWGetDescriptor( SEGPTR segptr, LPLDT_ENTRY ldtent )\n{\n    return GetThreadSelectorEntry( GetCurrentThread(),\n                                   segptr >> 16, ldtent );\n}\n\n/**********************************************************************\n *           K32WOWGetVDMPointer        (KERNEL32.56)\n */\nLPVOID WINAPI K32WOWGetVDMPointer( DWORD vp, DWORD dwBytes, BOOL fProtectedMode )\n{\n    /* FIXME: add size check too */\n\n    if ( fProtectedMode )\n        return MapSL( vp );\n    else\n        return DOSMEM_MapRealToLinear( vp );\n}\n\n/**********************************************************************\n *           K32WOWGetVDMPointerFix     (KERNEL32.68)\n */\nLPVOID WINAPI K32WOWGetVDMPointerFix( DWORD vp, DWORD dwBytes, BOOL fProtectedMode )\n{\n    /*\n     * Hmmm. According to the docu, we should call:\n     *\n     *          GlobalFix16( SELECTOROF(vp) );\n     *\n     * But this is unnecessary under Wine, as we never move global\n     * memory segments in linear memory anyway.\n     *\n     * (I'm not so sure what we are *supposed* to do if\n     *  fProtectedMode is TRUE, anyway ...)\n     */\n\n    return K32WOWGetVDMPointer( vp, dwBytes, fProtectedMode );\n}\n\n/**********************************************************************\n *           K32WOWGetVDMPointerUnfix   (KERNEL32.69)\n */\nVOID WINAPI K32WOWGetVDMPointerUnfix( DWORD vp )\n{\n    /*\n     * See above why we don't call:\n     *\n     * GlobalUnfix16( SELECTOROF(vp) );\n     *\n     */\n}\n\n/**********************************************************************\n *           K32WOWGlobalAlloc16        (KERNEL32.59)\n */\nWORD WINAPI K32WOWGlobalAlloc16( WORD wFlags, DWORD cb )\n{\n    return (WORD)GlobalAlloc16( wFlags, cb );\n}\n\n/**********************************************************************\n *           K32WOWGlobalFree16         (KERNEL32.62)\n */\nWORD WINAPI K32WOWGlobalFree16( WORD hMem )\n{\n    return (WORD)GlobalFree16( (HGLOBAL16)hMem );\n}\n\n/**********************************************************************\n *           K32WOWGlobalUnlock16       (KERNEL32.61)\n */\nBOOL WINAPI K32WOWGlobalUnlock16( WORD hMem )\n{\n    return (BOOL)GlobalUnlock16( (HGLOBAL16)hMem );\n}\n\n/**********************************************************************\n *           K32WOWGlobalAllocLock16    (KERNEL32.63)\n */\nDWORD WINAPI K32WOWGlobalAllocLock16( WORD wFlags, DWORD cb, WORD *phMem )\n{\n    WORD hMem = K32WOWGlobalAlloc16( wFlags, cb );\n    if (phMem) *phMem = hMem;\n\n    return K32WOWGlobalLock16( hMem );\n}\n\n/**********************************************************************\n *           K32WOWGlobalLockSize16     (KERNEL32.65)\n */\nDWORD WINAPI K32WOWGlobalLockSize16( WORD hMem, PDWORD pcb )\n{\n    if ( pcb )\n        *pcb = GlobalSize16( (HGLOBAL16)hMem );\n\n    return K32WOWGlobalLock16( hMem );\n}\n\n/**********************************************************************\n *           K32WOWGlobalUnlockFree16   (KERNEL32.64)\n */\nWORD WINAPI K32WOWGlobalUnlockFree16( DWORD vpMem )\n{\n    if ( !K32WOWGlobalUnlock16( HIWORD(vpMem) ) )\n        return FALSE;\n\n    return K32WOWGlobalFree16( HIWORD(vpMem) );\n}\n\n\n/**********************************************************************\n *           K32WOWYield16              (KERNEL32.66)\n */\nVOID WINAPI K32WOWYield16( void )\n{\n    /*\n     * This does the right thing for both Win16 and Win32 tasks.\n     * More or less, at least :-/\n     */\n    Yield16();\n}\n\n/**********************************************************************\n *           K32WOWDirectedYield16       (KERNEL32.67)\n */\nVOID WINAPI K32WOWDirectedYield16( WORD htask16 )\n{\n    DirectedYield16( (HTASK16)htask16 );\n}\n\n\n#define WOW64\n#define WOW_TYPE_HANDLE (WOW_TYPE_FULLHWND + 1)\nWORD WINAPI K32WOWHandle16User(HANDLE handle, WOW_HANDLE_TYPE type);\nHANDLE WINAPI K32WOWHandle32User(WORD handle);\nWORD WINAPI K32WOWHandle16Other(HANDLE handle, WOW_HANDLE_TYPE type);\nHANDLE WINAPI K32WOWHandle32Other(WORD handle);\nWORD WINAPI K32WOWHandle16HGDI(HANDLE handle, WOW_HANDLE_TYPE type);\nHANDLE WINAPI K32WOWHandle32HGDI(WORD handle);\n/***********************************************************************\n *           K32WOWHandle32              (KERNEL32.57)\n */\nHANDLE WINAPI K32WOWHandle32( WORD handle, WOW_HANDLE_TYPE type )\n{\n    switch ( type )\n    {\n    case WOW_TYPE_HWND:\n    case WOW_TYPE_HMENU:\n    case WOW_TYPE_HDWP:\n    case WOW_TYPE_HDROP:\n    case WOW_TYPE_HACCEL:\n    case WOW_TYPE_FULLHWND:\n#ifdef WOW64\n        return K32WOWHandle32User(handle);\n#else\n        return (HANDLE)(ULONG_PTR)handle;\n#endif\n    case WOW_TYPE_HFONT:\n    case WOW_TYPE_HRGN:\n    case WOW_TYPE_HBITMAP:\n    case WOW_TYPE_HBRUSH:\n    case WOW_TYPE_HPALETTE:\n    case WOW_TYPE_HPEN:\n    case WOW_TYPE_HDC:\n        return K32WOWHandle32HGDI(handle);\n    case WOW_TYPE_HMETAFILE:\n        FIXME( \"conversion of metafile handles not supported yet\\n\" );\n        return (HANDLE)(ULONG_PTR)handle;\n\n    case WOW_TYPE_HTASK:\n    {\n        TDB *tdb = ((TDB *)GlobalLock16(handle));\n        if (!tdb) return 0;\n        return tdb->teb->ClientId.UniqueThread;\n    }\n\n    case WOW_TYPE_HANDLE:\n#ifdef WOW64\n        return K32WOWHandle32Other(handle);\n#else\n        return (HANDLE)(ULONG_PTR)handle;\n#endif\n\n    default:\n        ERR( \"handle 0x%04x of unknown type %d\\n\", handle, type );\n        return (HANDLE)(ULONG_PTR)handle;\n    }\n}\n/***********************************************************************\n *           K32WOWHandle16              (KERNEL32.58)\n */\nWORD WINAPI K32WOWHandle16( HANDLE handle, WOW_HANDLE_TYPE type )\n{\n    switch ( type )\n    {\n    case WOW_TYPE_HWND:\n    case WOW_TYPE_HMENU:\n    case WOW_TYPE_HDWP:\n    case WOW_TYPE_HDROP:\n    case WOW_TYPE_HACCEL:\n    case WOW_TYPE_FULLHWND:\n#ifdef WOW64\n        return K32WOWHandle16User(handle, type);\n#else\n    \tif ( HIWORD(handle ) )\n        \tERR( \"handle %p of type %d has non-zero HIWORD\\n\", handle, type );\n        return LOWORD(handle);\n#endif\n    case WOW_TYPE_HFONT:\n    case WOW_TYPE_HRGN:\n    case WOW_TYPE_HBITMAP:\n    case WOW_TYPE_HBRUSH:\n    case WOW_TYPE_HPALETTE:\n    case WOW_TYPE_HPEN:\n    case WOW_TYPE_HDC:\n        return K32WOWHandle16HGDI(handle, type);\n    case WOW_TYPE_HMETAFILE:\n        FIXME( \"conversion of metafile handles not supported yet\\n\" );\n        return LOWORD(handle);\n\n    case WOW_TYPE_HTASK:\n        return TASK_GetTaskFromThread( (DWORD)handle );\n\n    case WOW_TYPE_HANDLE:\n#ifdef WOW64\n        return K32WOWHandle16Other(handle, type);\n#else\n        if ( HIWORD(handle ) )\n            ERR( \"handle %p of type %d has non-zero HIWORD\\n\", handle, type );\n        return LOWORD(handle);\n#endif\n\n    default:\n        ERR( \"handle %p of unknown type %d\\n\", handle, type );\n        return LOWORD(handle);\n    }\n}\n__declspec(dllexport) HGDIOBJ16 K32HGDIOBJ_16(HGDIOBJ handle)\n{\n#ifdef WOW64\n\treturn K32WOWHandle16HGDI(handle, WOW_TYPE_HDC);\n#else\n\tif (HIWORD(handle))\n\t\tERR(\"handle %p of type %d has non-zero HIWORD\\n\", handle, type);\n\treturn LOWORD(handle);\n#endif\n}\n__declspec(dllexport) HGDIOBJ K32HGDIOBJ_32(HGDIOBJ16 handle)\n{\n#ifdef WOW64\n\treturn K32WOWHandle32HGDI(handle);\n#else\n\treturn (HANDLE)(ULONG_PTR)handle;\n#endif\n}\n__declspec(dllexport) HICON16 K32HICON_16(HICON handle)\n{\n#ifdef WOW64\n\treturn K32WOWHandle16(handle, WOW_TYPE_HANDLE);\n#else\n\tif (HIWORD(handle))\n\t\tERR(\"handle %p of type %d has non-zero HIWORD\\n\", handle, type);\n\treturn LOWORD(handle);\n#endif\n}\n__declspec(dllexport) HICON K32HICON_32(HICON16 handle)\n{\n#ifdef WOW64\n\treturn (HICON)K32WOWHandle32(handle, WOW_TYPE_HANDLE);\n#else\n\treturn (HANDLE)(ULONG_PTR)handle;\n#endif\n}\n/**********************************************************************\n *           K32WOWCallback16Ex         (KERNEL32.55)\n */\nBOOL WINAPI K32WOWCallback16Ex( DWORD vpfn16, DWORD dwFlags,\n                                DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode )\n{\n    /*\n     * Arguments must be prepared in the correct order by the caller\n     * (both for PASCAL and CDECL calling convention), so we simply\n     * copy them to the 16-bit stack ...\n     */\n    char *stack = (char *)CURRENT_STACK16 - cbArgs;\n    LPVOID old = getWOW32Reserved();\n\n    memcpy( stack, pArgs, cbArgs );\n\n    if (dwFlags & (WCB16_REGS|WCB16_REGS_LONG))\n    {\n        CONTEXT *context = (CONTEXT *)pdwRetCode;\n\n        if (TRACE_ON(relay))\n        {\n            DWORD count = cbArgs / sizeof(WORD);\n            WORD * wstack = (WORD *)stack;\n\n            DPRINTF(\"%04x:CallTo16(func=%04x:%04x,ds=%04x\",\n                    GetCurrentThreadId(),\n                    context->SegCs, LOWORD(context->Eip), context->SegDs );\n            while (count) DPRINTF( \",%04x\", wstack[--count] );\n            DPRINTF(\") ss:sp=%04x:%04x\",\n                    SELECTOROF(getWOW32Reserved()), OFFSETOF(getWOW32Reserved()) );\n            DPRINTF(\" ax=%04x bx=%04x cx=%04x dx=%04x si=%04x di=%04x bp=%04x es=%04x fs=%04x\\n\",\n                    (WORD)context->Eax, (WORD)context->Ebx, (WORD)context->Ecx,\n                    (WORD)context->Edx, (WORD)context->Esi, (WORD)context->Edi,\n                    (WORD)context->Ebp, (WORD)context->SegEs, (WORD)context->SegFs );\n            SYSLEVEL_CheckNotLevel( 2 );\n        }\n\n        if (context->EFlags & 0x00020000)  /* v86 mode */\n        {\n            EXCEPTION_REGISTRATION_RECORD frame;\n            frame.Handler = vm86_handler;\n            errno = 0;\n            __wine_push_frame( &frame );\n            __wine_enter_vm86( context );\n            __wine_pop_frame( &frame );\n            if (errno != 0)  /* enter_vm86 will fail with ENOSYS on x64 kernels */\n            {\n                WARN(\"__wine_enter_vm86 failed (errno=%d)\\n\", errno);\n                if (errno == ENOSYS)\n                    SetLastError(ERROR_NOT_SUPPORTED);\n                else\n                    SetLastError(ERROR_GEN_FAILURE);\n                return FALSE;\n            }\n        }\n        else\n        {\n            /* push return address */\n            if (dwFlags & WCB16_REGS_LONG)\n            {\n                stack -= sizeof(DWORD);\n                *((DWORD *)stack) = HIWORD(call16_ret_addr);\n                stack -= sizeof(DWORD);\n                *((DWORD *)stack) = LOWORD(call16_ret_addr);\n                cbArgs += 2 * sizeof(DWORD);\n            }\n            else\n            {\n                stack -= sizeof(SEGPTR);\n                *((SEGPTR *)stack) = call16_ret_addr;\n                cbArgs += sizeof(SEGPTR);\n            }\n\n            /*\n             * Start call by checking for pending events.\n             * Note that wine_call_to_16_regs overwrites context stack\n             * pointer so we may modify it here without a problem.\n             */\n            if (get_vm86_teb_info()->dpmi_vif)\n            {\n                context->SegSs = wine_get_ds();\n                context->Esp   = (DWORD)stack;\n                insert_event_check( context );\n                cbArgs += (DWORD)stack - context->Esp;\n            }\n\n            _EnterWin16Lock();\n            wine_call_to_16_regs( context, cbArgs, call16_handler );\n            _LeaveWin16Lock();\n        }\n\n        if (TRACE_ON(relay))\n        {\n            DPRINTF(\"%04x:RetFrom16() ss:sp=%04x:%04x \",\n                    GetCurrentThreadId(), SELECTOROF(getWOW32Reserved()),\n                    OFFSETOF(getWOW32Reserved()));\n            DPRINTF(\" ax=%04x bx=%04x cx=%04x dx=%04x bp=%04x sp=%04x\\n\",\n                    (WORD)context->Eax, (WORD)context->Ebx, (WORD)context->Ecx,\n                    (WORD)context->Edx, (WORD)context->Ebp, (WORD)context->Esp );\n            SYSLEVEL_CheckNotLevel( 2 );\n        }\n    }\n    else\n    {\n        DWORD ret;\n\n        if (TRACE_ON(relay))\n        {\n            DWORD count = cbArgs / sizeof(WORD);\n            WORD * wstack = (WORD *)stack;\n\n            DPRINTF(\"%04x:CallTo16(func=%04x:%04x,ds=%04x\",\n                    GetCurrentThreadId(), HIWORD(vpfn16), LOWORD(vpfn16),\n\t\t\t\t\tSELECTOROF(getWOW32Reserved()));\n            while (count) DPRINTF( \",%04x\", wstack[--count] );\n            DPRINTF(\") ss:sp=%04x:%04x\\n\",\n                    SELECTOROF(getWOW32Reserved()), OFFSETOF(getWOW32Reserved()) );\n            SYSLEVEL_CheckNotLevel( 2 );\n        }\n\n        /* push return address */\n        stack -= sizeof(SEGPTR);\n        *((SEGPTR *)stack) = call16_ret_addr;\n        cbArgs += sizeof(SEGPTR);\n\n        /*\n         * Actually, we should take care whether the called routine cleans up\n         * its stack or not.  Fortunately, our wine_call_to_16 core doesn't rely on\n         * the callee to do so; after the routine has returned, the 16-bit\n         * stack pointer is always reset to the position it had before.\n         */\n        _EnterWin16Lock();\n        ret = wine_call_to_16( (FARPROC16)vpfn16, cbArgs, call16_handler );\n        if (pdwRetCode) *pdwRetCode = ret;\n        _LeaveWin16Lock();\n\n        if (TRACE_ON(relay))\n        {\n            DPRINTF(\"%04x:RetFrom16() ss:sp=%04x:%04x retval=%08x\\n\",\n                    GetCurrentThreadId(), SELECTOROF(getWOW32Reserved()),\n                    OFFSETOF(getWOW32Reserved()), ret);\n            SYSLEVEL_CheckNotLevel( 2 );\n        }\n    }\n\n    setWOW32Reserved(old);\n    return TRUE;  /* success */\n}\n\n/**********************************************************************\n *           K32WOWCallback16            (KERNEL32.54)\n */\nDWORD WINAPI K32WOWCallback16( DWORD vpfn16, DWORD dwParam )\n{\n    DWORD ret;\n\n    if ( !K32WOWCallback16Ex( vpfn16, WCB16_PASCAL,\n                           sizeof(DWORD), &dwParam, &ret ) )\n        ret = 0L;\n\n    return ret;\n}\n"
  },
  {
    "path": "lzexpand/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(lzexpand SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/lzexpand.def lzexpand.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(lzexpand.dll16 lzexpand)\ntarget_link_libraries(lzexpand libwine winecrt0 krnl386)\nset_target_properties(lzexpand PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "lzexpand/lzexpand.c",
    "content": "/*\n * LZ Decompression functions\n *\n * Copyright 1996 Marcus Meissner\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n//memo\n//windows compatible settings\n//EmulateLZHandles\n\n#include <stdarg.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"lzexpand.h\"\n\n#include \"wine/winbase16.h\"\n\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(file);\n\n#define MAX_LZSTATES 16\n\n#define IS_LZ_HANDLE(h) (((h) >= 0x400) && ((h) < 0x400+MAX_LZSTATES))\n\n/***********************************************************************\n *           LZStart   (LZEXPAND.7)\n */\nINT16 WINAPI LZStart16(void)\n{\n    TRACE(\"(void)\\n\");\n    return 1;\n}\n\n\nHFILE WINAPI LZInit32( HFILE hfSrc, BOOL *lzhandle );\n/***********************************************************************\n *           LZInit   (LZEXPAND.3)\n */\nHFILE16 WINAPI LZInit16( HFILE16 hfSrc )\n{\n    BOOL lzhandle = FALSE;\n    HFILE ret = LZInit32( (HFILE)DosFileHandleToWin32Handle(hfSrc), &lzhandle );\n    if (lzhandle) return ret;\n    if ((INT)ret <= 0) return ret;\n    return hfSrc;\n}\n\n\n/***********************************************************************\n *           GetExpandedName   (LZEXPAND.10)\n */\nINT16 WINAPI GetExpandedName16( LPSTR in, LPSTR out )\n{\n    return (INT16)GetExpandedNameA( in, out );\n}\n\n\n/***********************************************************************\n *           LZRead   (LZEXPAND.5)\n */\nINT16 WINAPI LZRead16( HFILE16 fd, LPVOID buf, UINT16 toread )\n{\n    if (IS_LZ_HANDLE(fd)) return LZRead( fd, buf, toread );\n    return _lread( (HFILE)DosFileHandleToWin32Handle(fd), buf, toread );\n}\n\n\n/***********************************************************************\n *           LZSeek   (LZEXPAND.4)\n */\nLONG WINAPI LZSeek16( HFILE16 fd, LONG off, INT16 type )\n{\n    if (IS_LZ_HANDLE(fd)) return LZSeek( fd, off, type );\n    return _llseek( (HFILE)DosFileHandleToWin32Handle(fd), off, type );\n}\n\n\n/***********************************************************************\n *           LZCopy   (LZEXPAND.1)\n *\n */\nLONG WINAPI LZCopy16( HFILE16 src, HFILE16 dest )\n{\n    /* already a LZ handle? */\n    if (IS_LZ_HANDLE(src)) return LZCopy( src, (HFILE)DosFileHandleToWin32Handle(dest) );\n\n    /* no, try to open one */\n    src = LZInit16(src);\n    if ((INT16)src <= 0) return 0;\n    if (IS_LZ_HANDLE(src))\n    {\n        LONG ret = LZCopy( src, (HFILE)DosFileHandleToWin32Handle(dest) );\n        LZClose( src );\n        return ret;\n    }\n    /* it was not a compressed file */\n    return LZCopy( (HFILE)DosFileHandleToWin32Handle(src), (HFILE)DosFileHandleToWin32Handle(dest) );\n}\n\n\nHFILE WINAPI LZOpenFile32( LPSTR fn, LPOFSTRUCT ofs, WORD mode, BOOL *lzhandle );\n/***********************************************************************\n *           LZOpenFile   (LZEXPAND.2)\n */\nHFILE16 WINAPI LZOpenFile16(LPSTR fn, LPOFSTRUCT ofs, UINT16 mode)\n{\n\tBOOL lzhandle = FALSE;\n\tHFILE hfret = LZOpenFile32(fn, ofs, mode, &lzhandle);\n\t/* return errors and LZ handles unmodified */\n\tif ((INT)hfret < 0) return hfret;\n\tif (lzhandle) return hfret;\n\t/* but allocate a dos handle for 'normal' files */\n\treturn Win32HandleToDosFileHandle((HANDLE)hfret);\n}\n\n\n/***********************************************************************\n *           LZClose   (LZEXPAND.6)\n */\nvoid WINAPI LZClose16( HFILE16 fd )\n{\n    if (IS_LZ_HANDLE(fd)) LZClose( fd );\n    else\n    {\n        HANDLE fh = DosFileHandleToWin32Handle((HFILE)fd);\n        if (DeleteDosFileHandle(fh))\n            CloseHandle(fh);\n    }\n}\n\n\n/***********************************************************************\n *           CopyLZFile   (LZEXPAND.8)\n */\nLONG WINAPI CopyLZFile16( HFILE16 src, HFILE16 dest )\n{\n    TRACE(\"(%d,%d)\\n\",src,dest);\n    return LZCopy16(src,dest);\n}\n\n\n/***********************************************************************\n *           LZDone   (LZEXPAND.9)\n */\nvoid WINAPI LZDone16(void)\n{\n    TRACE(\"(void)\\n\");\n}\n\n"
  },
  {
    "path": "lzexpand/lzexpand.def",
    "content": "; File generated automatically from lzexpand.dll16.spec; do not edit!\n\nLIBRARY lzexpand.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "lzexpand/lzexpand.dll16.spec",
    "content": "1  pascal   LZCopy(word word) LZCopy16\n2  pascal -ret16 LZOpenFile(str ptr word) LZOpenFile16\n3  pascal -ret16 LZInit(word) LZInit16\n4  pascal   LZSeek(word long word) LZSeek16\n5  pascal -ret16 LZRead(word ptr word) LZRead16\n6  pascal -ret16 LZClose(word) LZClose16\n7  pascal -ret16 LZStart() LZStart16\n8  pascal   CopyLZFile(word word) CopyLZFile16\n9  pascal -ret16 LZDone() LZDone16\n10 pascal -ret16 GetExpandedName(str ptr) GetExpandedName16\n#11 WEP\n#12 ___EXPORTEDSTUB\n"
  },
  {
    "path": "lzexpand/lzexpand.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{3A10E48B-E88F-46C6-8A01-7A62112D0E05}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>lzexpand</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"Shared\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <LinkIncremental>true</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <LinkIncremental>false</LinkIncremental>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LZEXPAND_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>lzexpand.def</ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;kernel32.lib</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;LZEXPAND_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LZEXPAND_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;kernel32.lib</AdditionalDependencies>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>lzexpand.def</ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;LZEXPAND_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"lzexpand.c\" />\n    <ClCompile Include=\"wine_lzexpand.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"lzexpand.def\" />\n    <CustomBuild Include=\"lzexpand.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" LZEXPAND &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" LZEXPAND &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"lzexpand.dll16.obj\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "lzexpand/lzexpand.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"ソース ファイル\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"ヘッダー ファイル\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"リソース ファイル\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"lzexpand.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"wine_lzexpand.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"lzexpand.def\">\n      <Filter>ソース ファイル</Filter>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"lzexpand.dll16.obj\">\n      <Filter>ソース ファイル</Filter>\n    </Object>\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"lzexpand.dll16.spec\">\n      <Filter>ソース ファイル</Filter>\n    </CustomBuild>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "lzexpand/wine_lzexpand.c",
    "content": "/*\n * LZ Decompression functions\n *\n * Copyright 1996 Marcus Meissner\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n * NOTES\n *\n * The LZ (Lempel Ziv) decompression was used in win16 installation programs.\n * It is a simple tabledriven decompression engine, the algorithm is not\n * documented as far as I know. WINE does not contain a compressor for\n * this format.\n *\n * The implementation is complete and there have been no reports of failures\n * for some time.\n *\n * TODO:\n *\n *   o Check whether the return values are correct\n *\n */\n\n#include \"config.h\"\n\n#include <string.h>\n#include <ctype.h>\n#include <sys/types.h>\n#include <stdarg.h>\n#include <stdio.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"lzexpand.h\"\n\n#include \"wine/unicode.h\"\n#include \"wine/debug.h\"\n#include \"wine/winbase16.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(file);\n\n/* The readahead length of the decompressor. Reading single bytes\n * using _lread() would be SLOW.\n */\n#define\tGETLEN\t2048\n\n#define LZ_MAGIC_LEN    8\n#define LZ_HEADER_LEN   14\n\n/* Format of first 14 byte of LZ compressed file */\nstruct lzfileheader {\n\tBYTE\tmagic[LZ_MAGIC_LEN];\n\tBYTE\tcompressiontype;\n\tCHAR\tlastchar;\n\tDWORD\treallength;\n};\nstatic const BYTE LZMagic[LZ_MAGIC_LEN]={'S','Z','D','D',0x88,0xf0,0x27,0x33};\n\n#define LZ_TABLE_SIZE    0x1000\n\nstruct lzstate {\n\tHFILE\trealfd;\t\t/* the real filedescriptor */\n\tCHAR\tlastchar;\t/* the last char of the filename */\n\n\tDWORD\treallength;\t/* the decompressed length of the file */\n\tDWORD\trealcurrent;\t/* the position the decompressor currently is */\n\tDWORD\trealwanted;\t/* the position the user wants to read from */\n\n\tBYTE\ttable[LZ_TABLE_SIZE];\t/* the rotating LZ table */\n\tUINT\tcurtabent;\t/* CURrent TABle ENTry */\n\n\tBYTE\tstringlen;\t/* length and position of current string */\n\tDWORD\tstringpos;\t/* from stringtable */\n\n\n\tWORD\tbytetype;\t/* bitmask within blocks */\n\n\tBYTE\t*get;\t\t/* GETLEN bytes */\n\tDWORD\tgetcur;\t\t/* current read */\n\tDWORD\tgetlen;\t\t/* length last got */\n};\n\n#define MAX_LZSTATES 16\nstatic struct lzstate *lzstates[MAX_LZSTATES];\n\n#define LZ_MIN_HANDLE  0x400\n#define IS_LZ_HANDLE(h) (((h) >= LZ_MIN_HANDLE) && ((h) < LZ_MIN_HANDLE+MAX_LZSTATES))\n#define GET_LZ_STATE(h) (IS_LZ_HANDLE(h) ? lzstates[(h)-LZ_MIN_HANDLE] : NULL)\n\n/* reads one compressed byte, including buffering */\n#define GET(lzs,b)\t_lzget(lzs,&b)\n#define GET_FLUSH(lzs)\tlzs->getcur=lzs->getlen;\n\nstatic int\n_lzget(struct lzstate *lzs,BYTE *b) {\n\tif (lzs->getcur<lzs->getlen) {\n\t\t*b\t\t= lzs->get[lzs->getcur++];\n\t\treturn\t\t1;\n\t} else {\n\t\tint ret = _lread(lzs->realfd,lzs->get,GETLEN);\n\t\tif (ret==HFILE_ERROR)\n\t\t\treturn HFILE_ERROR;\n\t\tif (ret==0)\n\t\t\treturn 0;\n\t\tlzs->getlen\t= ret;\n\t\tlzs->getcur\t= 1;\n\t\t*b\t\t= *(lzs->get);\n\t\treturn 1;\n\t}\n}\n/* internal function, reads lzheader\n * returns BADINHANDLE for non filedescriptors\n * return 0 for file not compressed using LZ\n * return UNKNOWNALG for unknown algorithm\n * returns lzfileheader in *head\n */\nstatic INT read_header(HFILE fd,struct lzfileheader *head)\n{\n\tBYTE\tbuf[LZ_HEADER_LEN];\n\n\tif (_llseek(fd,0,SEEK_SET)==-1)\n\t\treturn LZERROR_BADINHANDLE;\n\n\t/* We can't directly read the lzfileheader struct due to\n\t * structure element alignment\n\t */\n\tif (_lread(fd,buf,LZ_HEADER_LEN)<LZ_HEADER_LEN)\n\t\treturn 0;\n\tmemcpy(head->magic,buf,LZ_MAGIC_LEN);\n\tmemcpy(&(head->compressiontype),buf+LZ_MAGIC_LEN,1);\n\tmemcpy(&(head->lastchar),buf+LZ_MAGIC_LEN+1,1);\n\n\t/* FIXME: consider endianness on non-intel architectures */\n\tmemcpy(&(head->reallength),buf+LZ_MAGIC_LEN+2,4);\n\n\tif (memcmp(head->magic,LZMagic,LZ_MAGIC_LEN))\n\t\treturn 0;\n\tif (head->compressiontype!='A')\n\t\treturn LZERROR_UNKNOWNALG;\n\treturn 1;\n}\n\n\n/***********************************************************************\n *           LZStart   (KERNEL32.@)\n */\nINT WINAPI LZStart(void)\n{\n    TRACE(\"(void)\\n\");\n    return 1;\n}\n\n\n/***********************************************************************\n *           LZInit   (KERNEL32.@)\n *\n * initializes internal decompression buffers, returns lzfiledescriptor.\n * (return value the same as hfSrc, if hfSrc is not compressed)\n * on failure, returns error code <0\n * lzfiledescriptors range from 0x400 to 0x410 (only 16 open files per process)\n *\n * since _llseek uses the same types as libc.lseek, we just use the macros of\n *  libc\n */\nHFILE WINAPI LZInit32( HFILE hfSrc, BOOL *lzhandle )\n{\n\n\tstruct\tlzfileheader\thead;\n\tstruct\tlzstate\t\t*lzs;\n\tint\ti, ret;\n\n\tTRACE(\"(%d)\\n\",hfSrc);\n\tret=read_header(hfSrc,&head);\n\tif (ret<=0) {\n\t\t_llseek(hfSrc,0,SEEK_SET);\n\t\treturn ret?ret:hfSrc;\n\t}\n        for (i = 0; i < MAX_LZSTATES; i++) if (!lzstates[i]) break;\n        if (i == MAX_LZSTATES) return LZERROR_GLOBALLOC;\n\tlzstates[i] = lzs = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*lzs) );\n\tif(lzs == NULL) return LZERROR_GLOBALLOC;\n\n\tlzs->realfd\t= hfSrc;\n\tlzs->lastchar\t= head.lastchar;\n\tlzs->reallength = head.reallength;\n\n\tlzs->get\t= HeapAlloc( GetProcessHeap(), 0, GETLEN );\n\tlzs->getlen\t= 0;\n\tlzs->getcur\t= 0;\n\n\tif(lzs->get == NULL) {\n\t\tHeapFree(GetProcessHeap(), 0, lzs);\n\t\tlzstates[i] = NULL;\n\t\treturn LZERROR_GLOBALLOC;\n\t}\n\n\t/* Yes, preinitialize with spaces */\n\tmemset(lzs->table,' ',LZ_TABLE_SIZE);\n\t/* Yes, start 16 byte from the END of the table */\n\tlzs->curtabent\t= 0xff0;\n\tif (lzhandle) *lzhandle = TRUE;\n\treturn LZ_MIN_HANDLE + i;\n}\n\n\n/***********************************************************************\n *           LZDone   (KERNEL32.@)\n */\nvoid WINAPI LZDone(void)\n{\n    TRACE(\"(void)\\n\");\n}\n\n\n/***********************************************************************\n *           GetExpandedNameA   (KERNEL32.@)\n *\n * gets the full filename of the compressed file 'in' by opening it\n * and reading the header\n *\n * \"file.\" is being translated to \"file\"\n * \"file.bl_\" (with lastchar 'a') is being translated to \"file.bla\"\n * \"FILE.BL_\" (with lastchar 'a') is being translated to \"FILE.BLA\"\n */\n\nINT WINAPI GetExpandedNameA( LPSTR in, LPSTR out )\n{\n\tstruct lzfileheader\thead;\n\tHFILE\t\tfd;\n\tOFSTRUCT\tofs;\n\tINT\t\tfnislowercased,ret,len;\n\tLPSTR\t\ts,t;\n\n\tTRACE(\"(%s)\\n\",in);\n\tfd=OpenFile(in,&ofs,OF_READ);\n\tif (fd==HFILE_ERROR)\n\t\treturn (INT)(INT16)LZERROR_BADINHANDLE;\n\tstrcpy(out,in);\n\tret=read_header(fd,&head);\n\tif (ret<=0) {\n\t\t/* not a LZ compressed file, so the expanded name is the same\n\t\t * as the input name */\n\t\t_lclose(fd);\n\t\treturn 1;\n\t}\n\n\n\t/* look for directory prefix and skip it. */\n\ts=out;\n\twhile (NULL!=(t=strpbrk(s,\"/\\\\:\")))\n\t\ts=t+1;\n\n\t/* now mangle the basename */\n\tif (!*s) {\n\t\t/* FIXME: hmm. shouldn't happen? */\n\t\tWARN(\"Specified a directory or what? (%s)\\n\",in);\n\t\t_lclose(fd);\n\t\treturn 1;\n\t}\n\t/* see if we should use lowercase or uppercase on the last char */\n\tfnislowercased=1;\n\tt=s+strlen(s)-1;\n\twhile (t>=out) {\n\t\tif (!isalpha(*t)) {\n\t\t\tt--;\n\t\t\tcontinue;\n\t\t}\n\t\tfnislowercased=islower(*t);\n\t\tbreak;\n\t}\n\tif (isalpha(head.lastchar)) {\n\t\tif (fnislowercased)\n\t\t\thead.lastchar=tolower(head.lastchar);\n\t\telse\n\t\t\thead.lastchar=toupper(head.lastchar);\n\t}\n\n\t/* now look where to replace the last character */\n\tif (NULL!=(t=strchr(s,'.'))) {\n\t\tif (t[1]=='\\0') {\n\t\t\tt[0]='\\0';\n\t\t} else {\n\t\t\tlen=strlen(t)-1;\n\t\t\tif (t[len]=='_')\n\t\t\t\tt[len]=head.lastchar;\n\t\t}\n\t} /* else no modification necessary */\n\t_lclose(fd);\n\treturn 1;\n}\n\n\n/***********************************************************************\n *           GetExpandedNameW   (KERNEL32.@)\n */\nINT WINAPI GetExpandedNameW( LPWSTR in, LPWSTR out )\n{\n    INT ret;\n    DWORD len = WideCharToMultiByte( CP_ACP, 0, in, -1, NULL, 0, NULL, NULL );\n    char *xin = HeapAlloc( GetProcessHeap(), 0, len );\n    char *xout = HeapAlloc( GetProcessHeap(), 0, len+3 );\n    WideCharToMultiByte( CP_ACP, 0, in, -1, xin, len, NULL, NULL );\n    if ((ret = GetExpandedNameA( xin, xout )) > 0)\n        MultiByteToWideChar( CP_ACP, 0, xout, -1, out, strlenW(in)+4 );\n    HeapFree( GetProcessHeap(), 0, xin );\n    HeapFree( GetProcessHeap(), 0, xout );\n    return ret;\n}\n\n\n/***********************************************************************\n *           LZRead   (KERNEL32.@)\n */\nINT WINAPI LZRead( HFILE fd, LPSTR vbuf, INT toread )\n{\n\tint\thowmuch;\n\tBYTE\tb,*buf;\n\tstruct\tlzstate\t*lzs;\n\n\tbuf=(LPBYTE)vbuf;\n\tTRACE(\"(%d,%p,%d)\\n\",fd,buf,toread);\n\thowmuch=toread;\n\tif (!(lzs = GET_LZ_STATE(fd))) return _lread(fd,buf,toread);\n\n/* The decompressor itself is in a define, cause we need it twice\n * in this function. (the decompressed byte will be in b)\n */\n#define DECOMPRESS_ONE_BYTE \t\t\t\t\t\t\\\n\t\tif (lzs->stringlen) {\t\t\t\t\t\\\n\t\t\tb\t\t= lzs->table[lzs->stringpos];\t\\\n\t\t\tlzs->stringpos\t= (lzs->stringpos+1)&0xFFF;\t\\\n\t\t\tlzs->stringlen--;\t\t\t\t\\\n\t\t} else {\t\t\t\t\t\t\\\n\t\t\tif (!(lzs->bytetype&0x100)) {\t\t\t\\\n\t\t\t\tif (1!=GET(lzs,b)) \t\t\t\\\n\t\t\t\t\treturn toread-howmuch;\t\t\\\n\t\t\t\tlzs->bytetype = b|0xFF00;\t\t\\\n\t\t\t}\t\t\t\t\t\t\\\n\t\t\tif (lzs->bytetype & 1) {\t\t\t\\\n\t\t\t\tif (1!=GET(lzs,b))\t\t\t\\\n\t\t\t\t\treturn toread-howmuch;\t\t\\\n\t\t\t} else {\t\t\t\t\t\\\n\t\t\t\tBYTE\tb1,b2;\t\t\t\t\\\n\t\t\t\t\t\t\t\t\t\\\n\t\t\t\tif (1!=GET(lzs,b1))\t\t\t\\\n\t\t\t\t\treturn toread-howmuch;\t\t\\\n\t\t\t\tif (1!=GET(lzs,b2))\t\t\t\\\n\t\t\t\t\treturn toread-howmuch;\t\t\\\n\t\t\t\t/* Format:\t\t\t\t\\\n\t\t\t\t * b1 b2\t\t\t\t\\\n\t\t\t\t * AB CD \t\t\t\t\\\n\t\t\t\t * where CAB is the stringoffset in the table\\\n\t\t\t\t * and D+3 is the len of the string\t\\\n\t\t\t\t */\t\t\t\t\t\\\n\t\t\t\tlzs->stringpos\t= b1|((b2&0xf0)<<4);\t\\\n\t\t\t\tlzs->stringlen\t= (b2&0xf)+2; \t\t\\\n\t\t\t\t/* 3, but we use a  byte already below ... */\\\n\t\t\t\tb\t\t= lzs->table[lzs->stringpos];\\\n\t\t\t\tlzs->stringpos\t= (lzs->stringpos+1)&0xFFF;\\\n\t\t\t}\t\t\t\t\t\t\\\n\t\t\tlzs->bytetype>>=1;\t\t\t\t\\\n\t\t}\t\t\t\t\t\t\t\\\n\t\t/* store b in table */\t\t\t\t\t\\\n\t\tlzs->table[lzs->curtabent++]= b;\t\t\t\\\n\t\tlzs->curtabent\t&= 0xFFF;\t\t\t\t\\\n\t\tlzs->realcurrent++;\n\n\t/* if someone has seeked, we have to bring the decompressor\n\t * to that position\n\t */\n\tif (lzs->realcurrent!=lzs->realwanted) {\n\t\t/* if the wanted position is before the current position\n\t\t * I see no easy way to unroll ... We have to restart at\n\t\t * the beginning. *sigh*\n\t\t */\n\t\tif (lzs->realcurrent>lzs->realwanted) {\n\t\t\t/* flush decompressor state */\n\t\t\t_llseek(lzs->realfd,LZ_HEADER_LEN,SEEK_SET);\n\t\t\tGET_FLUSH(lzs);\n\t\t\tlzs->realcurrent= 0;\n\t\t\tlzs->bytetype\t= 0;\n\t\t\tlzs->stringlen\t= 0;\n\t\t\tmemset(lzs->table,' ',LZ_TABLE_SIZE);\n\t\t\tlzs->curtabent\t= 0xFF0;\n\t\t}\n\t\twhile (lzs->realcurrent<lzs->realwanted) {\n\t\t\tDECOMPRESS_ONE_BYTE;\n\t\t}\n\t}\n\n\twhile (howmuch) {\n\t\tDECOMPRESS_ONE_BYTE;\n\t\tlzs->realwanted++;\n\t\t*buf++\t\t= b;\n\t\thowmuch--;\n\t}\n\treturn \ttoread;\n#undef DECOMPRESS_ONE_BYTE\n}\n\n\n/***********************************************************************\n *           LZSeek   (KERNEL32.@)\n */\nLONG WINAPI LZSeek( HFILE fd, LONG off, INT type )\n{\n\tstruct\tlzstate\t*lzs;\n\tLONG\tnewwanted;\n\n\tTRACE(\"(%d,%d,%d)\\n\",fd,off,type);\n\t/* not compressed? just use normal _llseek() */\n        if (!(lzs = GET_LZ_STATE(fd))) return _llseek(fd,off,type);\n\tnewwanted = lzs->realwanted;\n\tswitch (type) {\n\tcase 1:\t/* SEEK_CUR */\n\t\tnewwanted      += off;\n\t\tbreak;\n\tcase 2:\t/* SEEK_END */\n\t\tnewwanted\t= lzs->reallength-off;\n\t\tbreak;\n\tdefault:/* SEEK_SET */\n\t\tnewwanted\t= off;\n\t\tbreak;\n\t}\n\tif (newwanted>lzs->reallength)\n\t\treturn LZERROR_BADVALUE;\n\tif (newwanted<0)\n\t\treturn LZERROR_BADVALUE;\n\tlzs->realwanted\t= newwanted;\n\treturn newwanted;\n}\n\n\n/***********************************************************************\n *           LZCopy   (KERNEL32.@)\n *\n * Copies everything from src to dest\n * if src is a LZ compressed file, it will be uncompressed.\n * will return the number of bytes written to dest or errors.\n */\nLONG WINAPI LZCopy( HFILE src, HFILE dest )\n{\n\tint\tusedlzinit = 0, ret, wret;\n\tLONG\tlen;\n\tHFILE\toldsrc = src, srcfd;\n\tFILETIME filetime;\n\tstruct\tlzstate\t*lzs;\n#define BUFLEN\t1000\n\tCHAR\tbuf[BUFLEN];\n\t/* we need that weird typedef, for i can't seem to get function pointer\n\t * casts right. (Or they probably just do not like WINAPI in general)\n\t */\n\ttypedef\tUINT\t(WINAPI *_readfun)(HFILE,LPVOID,UINT);\n\n\t_readfun\txread;\n\n\tTRACE(\"(%d,%d)\\n\",src,dest);\n\tif (!IS_LZ_HANDLE(src)) {\n\t\tsrc = LZInit32(src, NULL);\n                if ((INT)src <= 0) return 0;\n\t\tif (src != oldsrc) usedlzinit=1;\n\t}\n\n\t/* not compressed? just copy */\n        if (!IS_LZ_HANDLE(src))\n\t\txread=_lread;\n\telse\n\t\txread=(_readfun)LZRead;\n\tlen=0;\n\twhile (1) {\n\t\tret=xread(src,buf,BUFLEN);\n\t\tif (ret<=0) {\n\t\t\tif (ret==0)\n\t\t\t\tbreak;\n\t\t\tif (ret==-1)\n\t\t\t\treturn LZERROR_READ;\n\t\t\treturn ret;\n\t\t}\n\t\tlen    += ret;\n\t\twret\t= _lwrite(dest,buf,ret);\n\t\tif (wret!=ret)\n\t\t\treturn LZERROR_WRITE;\n\t}\n\n\t/* Maintain the timestamp of source file to destination file */\n\tsrcfd = (!(lzs = GET_LZ_STATE(src))) ? src : lzs->realfd;\n\tGetFileTime( LongToHandle(srcfd), NULL, NULL, &filetime );\n\tSetFileTime( LongToHandle(dest), NULL, NULL, &filetime );\n\n\t/* close handle */\n\tif (usedlzinit)\n\t\tLZClose(src);\n\treturn len;\n#undef BUFLEN\n}\n\n/* reverses GetExpandedPathname */\nstatic LPSTR LZEXPAND_MangleName( LPCSTR fn )\n{\n    char *p;\n    char *mfn = HeapAlloc( GetProcessHeap(), 0, strlen(fn) + 3 ); /* \"._\" and \\0 */\n    if(mfn == NULL) return NULL;\n    strcpy( mfn, fn );\n    if (!(p = strrchr( mfn, '\\\\' ))) p = mfn;\n    if ((p = strchr( p, '.' )))\n    {\n        p++;\n        if (strlen(p) < 3) strcat( p, \"_\" );  /* append '_' */\n        else p[strlen(p)-1] = '_';  /* replace last character */\n    }\n    else strcat( mfn, \"._\" );\t/* append \"._\" */\n    return mfn;\n}\n\n\n/***********************************************************************\n *           LZOpenFileA   (KERNEL32.@)\n *\n * Opens a file. If not compressed, open it as a normal file.\n */\nHFILE WINAPI LZOpenFile32( LPSTR fn, LPOFSTRUCT ofs, WORD mode, BOOL *lzhandle )\n{\n\tHFILE\tfd,cfd;\n\tBYTE    ofs_cBytes = ofs->cBytes;\n\t*lzhandle = FALSE;\n\n\tTRACE(\"(%s,%p,%d)\\n\",fn,ofs,mode);\n\t/* 0x70 represents all OF_SHARE_* flags, ignore them for the check */\n\tfd=OpenFile(fn,ofs,mode);\n\tif (fd==HFILE_ERROR)\n        {\n            LPSTR mfn = LZEXPAND_MangleName(fn);\n            fd = OpenFile(mfn,ofs,mode);\n            HeapFree( GetProcessHeap(), 0, mfn );\n\t}\n\tif (fd==HFILE_ERROR)\n\t\tofs->cBytes = ofs_cBytes;\n\tif ((mode&~0x70)!=OF_READ)\n\t\treturn fd;\n\tif (fd==HFILE_ERROR)\n\t\treturn HFILE_ERROR;\n\tcfd=LZInit32(fd, lzhandle);\n\tif ((INT)cfd <= 0) return fd;\n\treturn cfd;\n}\n\n/***********************************************************************\n *           LZClose   (KERNEL32.@)\n */\nvoid WINAPI LZClose( HFILE fd )\n{\n\tstruct lzstate *lzs;\n\n\tTRACE(\"(%d)\\n\",fd);\n        if (!(lzs = GET_LZ_STATE(fd))) _lclose(fd);\n        else\n        {\n            HeapFree( GetProcessHeap(), 0, lzs->get );\n            lzstates[fd - LZ_MIN_HANDLE] = NULL;\n            if (DeleteDosFileHandle(lzs->realfd))\n                CloseHandle(lzs->realfd);\n            HeapFree( GetProcessHeap(), 0, lzs );\n        }\n}\n"
  },
  {
    "path": "mmsystem/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(mmsystem SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/mmsystem.def mmsystem.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(mmsystem.dll16 mmsystem)\ntarget_link_libraries(mmsystem libwine winecrt0 krnl386 winmm.lib)\nset_target_properties(mmsystem PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "mmsystem/Makefile.in",
    "content": "MODULE    = mmsystem.dll16\nIMPORTS   = winmm user32\n\nEXTRADLLFLAGS = -m16 -Wb,--main-module,winmm.dll\n\nC_SRCS = \\\n\tdriver.c \\\n\tmci16.c \\\n\tmessage16.c \\\n\tmmio16.c \\\n\tmmsystem.c\n"
  },
  {
    "path": "mmsystem/driver.c",
    "content": "/*\n * WINE Drivers functions\n *\n * Copyright 1994 Martin Ayotte\n * Copyright 1998 Marcus Meissner\n * Copyright 1999,2000 Eric Pouech\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n * TODO:\n *\t- LoadModule count and clean up is not handled correctly (it's not a\n *\t  problem as long as FreeLibrary is not working correctly)\n */\n\n#include <stdarg.h>\n#include <string.h>\n\n#define NONAMELESSUNION\n#ifdef WINE_NO_UNICODE_MACROS\n# define WINELIB_NAME_AW(func) \\\n    func##_must_be_suffixed_with_W_or_A_in_this_context \\\n    func##_must_be_suffixed_with_W_or_A_in_this_context\n#else  /* WINE_NO_UNICODE_MACROS */\n# ifdef UNICODE\n#  define WINELIB_NAME_AW(func) func##W\n# else\n#  define WINELIB_NAME_AW(func) func##A\n# endif\n#endif  /* WINE_NO_UNICODE_MACROS */\n#ifdef WINE_NO_UNICODE_MACROS\n# define DECL_WINELIB_TYPE_AW(type)  /* nothing */\n#else\n# define DECL_WINELIB_TYPE_AW(type)  typedef WINELIB_NAME_AW(type) type;\n#endif\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/winbase16.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n#include \"wownt32.h\"\n//#include \"mmddk.h\"\n#include \"wine/mmsystem16.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(driver);\n\ntypedef struct tagWINE_DRIVER\n{\n    /* as usual LPWINE_DRIVER == hDriver32 */\n    HDRVR16\t\t\thDriver16;\n    HMODULE16\t\t\thModule16;\n    DRIVERPROC16          \tlpDrvProc;\n    DWORD\t\t  \tdwDriverID;\n    struct tagWINE_DRIVER*\tlpPrevItem;\n    struct tagWINE_DRIVER*\tlpNextItem;\n} WINE_DRIVER, *LPWINE_DRIVER;\n\nstatic LPWINE_DRIVER\tlpDrvItemList = NULL;\n\n\n/**************************************************************************\n *\t\t\tDRIVER_GetNumberOfModuleRefs\t\t[internal]\n *\n * Returns the number of open drivers which share the same module.\n */\nstatic\tWORD\tDRIVER_GetNumberOfModuleRefs(LPWINE_DRIVER lpNewDrv)\n{\n    LPWINE_DRIVER\tlpDrv;\n    WORD\t\tcount = 0;\n\n    for (lpDrv = lpDrvItemList; lpDrv; lpDrv = lpDrv->lpNextItem) {\n\tif (lpDrv->hModule16 == lpNewDrv->hModule16) {\n\t    count++;\n\t}\n    }\n    return count;\n}\n\n/**************************************************************************\n *\t\t\t\tDRIVER_FindFromHDrvr16\t\t[internal]\n *\n * From a hDrvr being 16 bits, returns the WINE internal structure.\n */\nstatic\tLPWINE_DRIVER\tDRIVER_FindFromHDrvr16(HDRVR16 hDrvr)\n{\n    LPWINE_DRIVER\tlpDrv;\n\n    for (lpDrv = lpDrvItemList; lpDrv; lpDrv = lpDrv->lpNextItem) {\n\tif (lpDrv->hDriver16 == hDrvr) {\n\t    break;\n\t}\n    }\n    return lpDrv;\n}\n\n/**************************************************************************\n *\t\t\t\tDRIVER_SendMessage\t\t[internal]\n */\nstatic inline LRESULT DRIVER_SendMessage(LPWINE_DRIVER lpDrv, UINT16 msg,\n\t\t\t\t\t LPARAM lParam1, LPARAM lParam2)\n{\n    WORD args[8];\n    DWORD ret;\n\n    TRACE(\"Before CallDriverProc proc=%p driverID=%08x wMsg=%04x p1=%08lx p2=%08lx\\n\",\n\t  lpDrv->lpDrvProc, lpDrv->dwDriverID, msg, lParam1, lParam2);\n\n    args[7] = HIWORD(lpDrv->dwDriverID);\n    args[6] = LOWORD(lpDrv->dwDriverID);\n    args[5] = lpDrv->hDriver16;\n    args[4] = msg;\n    args[3] = HIWORD(lParam1);\n    args[2] = LOWORD(lParam1);\n    args[1] = HIWORD(lParam2);\n    args[0] = LOWORD(lParam2);\n    WOWCallback16Ex( (DWORD)lpDrv->lpDrvProc, WCB16_PASCAL, sizeof(args), args, &ret );\n    return ret;\n}\n\n/**************************************************************************\n *\t\tDrvSendMessage (MMSYSTEM.1102)\n */\nLRESULT WINAPI DrvSendMessage16(HDRVR16 hDriver, UINT16 msg, LPARAM lParam1, LPARAM lParam2)\n{\n    LPWINE_DRIVER \tlpDrv;\n    LRESULT \t\tretval = 0;\n\n    TRACE(\"(%04x, %04X, %08lX, %08lX)\\n\", hDriver, msg, lParam1, lParam2);\n\n    if ((lpDrv = DRIVER_FindFromHDrvr16(hDriver)) != NULL) {\n\tretval = DRIVER_SendMessage(lpDrv, msg, lParam1, lParam2);\n    } else {\n\tWARN(\"Bad driver handle %u\\n\", hDriver);\n    }\n\n    TRACE(\"retval = %ld\\n\", retval);\n    return retval;\n}\n\n/**************************************************************************\n *\t\t\t\tDRIVER_RemoveFromList\t\t[internal]\n *\n * Generates all the logic to handle driver closure / deletion\n * Removes a driver struct to the list of open drivers.\n */\nstatic\tBOOL\tDRIVER_RemoveFromList(LPWINE_DRIVER lpDrv)\n{\n    lpDrv->dwDriverID = 0;\n    if (DRIVER_GetNumberOfModuleRefs(lpDrv) == 1) {\n\tDRIVER_SendMessage(lpDrv, DRV_DISABLE, 0L, 0L);\n\tDRIVER_SendMessage(lpDrv, DRV_FREE,    0L, 0L);\n    }\n\n    if (lpDrv->lpPrevItem)\n\tlpDrv->lpPrevItem->lpNextItem = lpDrv->lpNextItem;\n    else\n\tlpDrvItemList = lpDrv->lpNextItem;\n    if (lpDrv->lpNextItem)\n\tlpDrv->lpNextItem->lpPrevItem = lpDrv->lpPrevItem;\n\n    return TRUE;\n}\n\n/**************************************************************************\n *\t\t\t\tDRIVER_AddToList\t\t[internal]\n *\n * Adds a driver struct to the list of open drivers.\n * Generates all the logic to handle driver creation / open.\n */\nstatic\tBOOL\tDRIVER_AddToList(LPWINE_DRIVER lpNewDrv, LPARAM lParam1, LPARAM lParam2)\n{\n    /* First driver to be loaded for this module, need to load correctly the module */\n    if (DRIVER_GetNumberOfModuleRefs(lpNewDrv) == 0) {\n\tif (DRIVER_SendMessage(lpNewDrv, DRV_LOAD, 0L, 0L) != DRV_SUCCESS) {\n\t    TRACE(\"DRV_LOAD failed on driver %p\\n\", lpNewDrv);\n\t    return FALSE;\n\t}\n\t/* returned value is not checked */\n\tDRIVER_SendMessage(lpNewDrv, DRV_ENABLE, 0L, 0L);\n    }\n\n    lpNewDrv->lpNextItem = NULL;\n    if (lpDrvItemList == NULL) {\n\tlpDrvItemList = lpNewDrv;\n\tlpNewDrv->lpPrevItem = NULL;\n    } else {\n\tLPWINE_DRIVER\tlpDrv = lpDrvItemList;\t/* find end of list */\n\twhile (lpDrv->lpNextItem != NULL)\n\t    lpDrv = lpDrv->lpNextItem;\n\n\tlpDrv->lpNextItem = lpNewDrv;\n\tlpNewDrv->lpPrevItem = lpDrv;\n    }\n    /* Now just open a new instance of a driver on this module */\n    lpNewDrv->dwDriverID = DRIVER_SendMessage(lpNewDrv, DRV_OPEN, lParam1, lParam2);\n\n    if (lpNewDrv->dwDriverID == 0) {\n\tTRACE(\"DRV_OPEN failed on driver %p\\n\", lpNewDrv);\n\tDRIVER_RemoveFromList(lpNewDrv);\n\treturn FALSE;\n    }\n\n    return TRUE;\n}\n\n/**************************************************************************\n *\t\t\t\tDRIVER_TryOpenDriver16\t\t[internal]\n *\n * Tries to load a 16 bit driver whose DLL's (module) name is lpFileName.\n */\nstatic\tLPWINE_DRIVER\tDRIVER_TryOpenDriver16(LPSTR lpFileName, LPARAM lParam2)\n{\n    static\tWORD\tDRIVER_hDrvr16Counter /* = 0 */;\n    LPWINE_DRIVER \tlpDrv = NULL;\n    HMODULE16\t\thModule;\n    DRIVERPROC16\tlpProc;\n    LPSTR\t\tptr;\n\n    TRACE(\"('%s', %08lX);\\n\", lpFileName, lParam2);\n\n    if (strlen(lpFileName) < 1) return lpDrv;\n\n    if ((ptr = strchr(lpFileName, ' ')) != NULL) {\n\t*ptr++ = '\\0';\n\twhile (*ptr == ' ') ptr++;\n\tif (*ptr == '\\0') ptr = NULL;\n    }\n\n    if ((hModule = LoadLibrary16(lpFileName)) < 32) goto exit;\n    if ((lpProc = (DRIVERPROC16)GetProcAddress16(hModule, \"DRIVERPROC\")) == NULL)\n\tgoto exit;\n\n    if ((lpDrv = HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_DRIVER))) == NULL)\n\tgoto exit;\n\n    lpDrv->dwDriverID  = 0;\n    while (DRIVER_FindFromHDrvr16(++DRIVER_hDrvr16Counter));\n    lpDrv->hDriver16   = DRIVER_hDrvr16Counter;\n    lpDrv->hModule16   = hModule;\n    lpDrv->lpDrvProc   = lpProc;\n\n    if (!DRIVER_AddToList(lpDrv, (LPARAM)ptr, lParam2)) goto exit;\n\n    return lpDrv;\n exit:\n    TRACE(\"Unable to load 16 bit module (%s): %04x\\n\", lpFileName, hModule);\n    if (hModule >= 32)\tFreeLibrary16(hModule);\n    HeapFree(GetProcessHeap(), 0, lpDrv);\n    return NULL;\n}\n\n/**************************************************************************\n *\t\tDrvOpen (MMSYSTEM.1100)\n */\nHDRVR16 WINAPI DrvOpen16(LPCSTR lpDriverName, LPCSTR lpSectionName, LPARAM lParam2)\n{\n    LPWINE_DRIVER\tlpDrv = NULL;\n    char\t\tdrvName[128];\n\n    TRACE(\"(%s, %s, %08lX);\\n\", debugstr_a(lpDriverName), debugstr_a(lpSectionName), lParam2);\n\n    if (!lpDriverName || !*lpDriverName) return 0;\n\n    if (lpSectionName == NULL) {\n\tstrcpy(drvName, lpDriverName);\n\n\tif ((lpDrv = DRIVER_TryOpenDriver16(drvName, lParam2)))\n\t    goto the_end;\n\t/* in case hDriver is NULL, search in Drivers section */\n\tlpSectionName = \"Drivers\";\n    }\n    if (GetPrivateProfileStringA(lpSectionName, lpDriverName, \"\",\n\t\t\t\t drvName, sizeof(drvName), \"SYSTEM.INI\") > 0) {\n\tlpDrv = DRIVER_TryOpenDriver16(drvName, lParam2);\n    }\n    if (!lpDrv)\n    {\n        if (!stricmp(lpSectionName, \"drivers\"))\n        {\n            // if 32bit driver exists pretend success\n            if (GetPrivateProfileStringA(\"drivers32\", lpDriverName, \"\",\n\t\t        \t\t drvName, sizeof(drvName), \"SYSTEM.INI\") > 0)\n                return 0xdead;\n        }\n        else if (!stricmp(lpSectionName, \"mci\"))\n        {\n            if (GetPrivateProfileStringA(\"mci32\", lpDriverName, \"\",\n\t\t        \t\t drvName, sizeof(drvName), \"SYSTEM.INI\") > 0)\n                return 0xdead;\n        }\n        TRACE(\"Failed to open driver %s from system.ini file, section %s\\n\", debugstr_a(lpDriverName), debugstr_a(lpSectionName));\n        return 0;\n    }\n the_end:\n    TRACE(\"=> %04x / %p\\n\", lpDrv->hDriver16, lpDrv);\n    return lpDrv->hDriver16;\n}\n\n/**************************************************************************\n *\t\tDrvClose16 (MMSYSTEM.1101)\n */\nLRESULT WINAPI DrvClose16(HDRVR16 hDrvr, LPARAM lParam1, LPARAM lParam2)\n{\n    LPWINE_DRIVER\tlpDrv;\n\n    TRACE(\"(%04x, %08lX, %08lX);\\n\", hDrvr, lParam1, lParam2);\n\n    if ((lpDrv = DRIVER_FindFromHDrvr16(hDrvr)) != NULL) {\n\tDRIVER_SendMessage(lpDrv, DRV_CLOSE, lParam1, lParam2);\n\n\tif (DRIVER_RemoveFromList(lpDrv)) {\n\t    HeapFree(GetProcessHeap(), 0, lpDrv);\n\t    return TRUE;\n\t}\n    }\n    WARN(\"Failed to close driver\\n\");\n    return FALSE;\n}\n\n/**************************************************************************\n *\t\tDrvGetModuleHandle (MMSYSTEM.1103)\n */\nHMODULE16 WINAPI DrvGetModuleHandle16(HDRVR16 hDrvr)\n{\n    LPWINE_DRIVER \tlpDrv;\n    HMODULE16 \t\thModule = 0;\n\n    TRACE(\"(%04x);\\n\", hDrvr);\n\n    if ((lpDrv = DRIVER_FindFromHDrvr16(hDrvr)) != NULL) {\n\thModule = lpDrv->hModule16;\n    }\n    TRACE(\"=> %04x\\n\", hModule);\n    return hModule;\n}\n\n/**************************************************************************\n *\t\tDrvDefDriverProc (MMSYSTEM.1104)\n */\nLRESULT WINAPI DrvDefDriverProc16(DWORD dwDevID, HDRVR16 hDriv, UINT16 wMsg,\n                                  LPARAM lParam1, LPARAM lParam2)\n{\n    TRACE(\"devID=0x%08x hDrv=0x%04x wMsg=%04x lP1=0x%08lx lP2=0x%08lx\\n\",\n\t  dwDevID, hDriv, wMsg, lParam1, lParam2);\n\n    switch(wMsg) {\n    case DRV_LOAD:\n    case DRV_FREE:\n    case DRV_ENABLE:\n    case DRV_DISABLE:\n\treturn (LRESULT)1L;\n    case DRV_OPEN:\n    case DRV_CLOSE:\n    case DRV_QUERYCONFIGURE:\n\treturn (LRESULT)0L;\n    case DRV_CONFIGURE:\n\tMessageBoxA(0, \"Driver isn't configurable !\", \"Wine Driver\", MB_OK);\n\treturn (LRESULT)0L;\n    case DRV_INSTALL:\n    case DRV_REMOVE:\n\treturn DRV_SUCCESS;\n    default:\n\treturn (LRESULT)0L;\n    }\n}\n\n/**************************************************************************\n *\t\tDriverProc (MMSYSTEM.6)\n */\nLRESULT WINAPI DriverProc16(DWORD dwDevID, HDRVR16 hDrv, WORD wMsg,\n\t\t\t    DWORD dwParam1, DWORD dwParam2)\n{\n    return DrvDefDriverProc16(dwDevID, hDrv, wMsg, dwParam1, dwParam2);\n}\n"
  },
  {
    "path": "mmsystem/mci16.c",
    "content": "/*\n * MMSYSTEM functions\n *\n * Copyright 1993      Martin Ayotte\n *           1998-2003,2009 Eric Pouech\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n#include <string.h>\n#include <stdio.h>\n\n#define NONAMELESSUNION\n#ifdef WINE_NO_UNICODE_MACROS\n# define WINELIB_NAME_AW(func) \\\n    func##_must_be_suffixed_with_W_or_A_in_this_context \\\n    func##_must_be_suffixed_with_W_or_A_in_this_context\n#else  /* WINE_NO_UNICODE_MACROS */\n# ifdef UNICODE\n#  define WINELIB_NAME_AW(func) func##W\n# else\n#  define WINELIB_NAME_AW(func) func##A\n# endif\n#endif  /* WINE_NO_UNICODE_MACROS */\n#ifdef WINE_NO_UNICODE_MACROS\n# define DECL_WINELIB_TYPE_AW(type)  /* nothing */\n#else\n# define DECL_WINELIB_TYPE_AW(type)  typedef WINELIB_NAME_AW(type) type;\n#endif\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"mmsystem.h\"\n#include \"winternl.h\"\n#include \"wownt32.h\"\n#include \"winnls.h\"\n\n#include \"wine/winuser16.h\"\n#include \"winemm16.h\"\n#include \"digitalv.h\"\n#include \"mciavi.h\"\n#include \"../msvideo/vfw16.h\"\n\n#include \"wine/debug.h\"\n\n#ifndef MCI_OPEN_DRIVER\n#define MCI_OPEN_DRIVER 0x0801\n#endif\n#ifndef MCI_CLOSE_DRIVER\n#define MCI_CLOSE_DRIVER 0x0802\n#endif\nWINE_DEFAULT_DEBUG_CHANNEL(mmsys);\n\nchar *WINAPI xlate_str_handle(const char *origstr, char *newstr)\n{\n    if (!strncmp(origstr, \"update \", 7))\n    {\n        int pos1, pos2, hdc16;\n        int count = sscanf(origstr, \"%[a-z ]%n%d%n\", newstr, &pos1, &hdc16, &pos2);\n        sprintf(newstr + pos1, \" %u%s\", HDC_32((HDC16)hdc16), origstr + pos2);\n        return newstr;\n    }\n    else if (!strncmp(origstr, \"setvideo \", 9))\n    {\n        char *pal = strstr(origstr, \"palette handle\");\n        if (pal)\n        {\n            int pos0 = (intptr_t)pal - (intptr_t)origstr;\n            strncpy(newstr, origstr, pos0);\n            int pos1, pos2, hpal16;\n            int count = sscanf(pal, \"%[a-z ]%n%d%n\", newstr + pos0, &pos1, &hpal16, &pos2);\n            sprintf(newstr + pos0 + pos1, \" %u%s\", HPALETTE_32((HPALETTE16)hpal16), pal + pos2);\n            return newstr;\n        }\n    }\n    else if (!strncmp(origstr, \"open \", 5))\n    {\n        char *par = strstr(origstr, \"parent\");\n        if (par)\n        {\n            int pos0 = (intptr_t)par - (intptr_t)origstr;\n            strncpy(newstr, origstr, pos0);\n            int pos1, pos2, hwnd16;\n            int count = sscanf(par, \"%[a-z ]%n%d%n\", newstr + pos0, &pos1, &hwnd16, &pos2);\n            sprintf(newstr + pos0 + pos1, \" %u%s\", HWND_32((HWND16)hwnd16), par + pos2);\n            return newstr;\n        }\n    }\n    else if (!strncmp(origstr, \"window \", 7))\n    {\n        char *hand = strstr(origstr, \"handle\");\n        if (hand)\n        {\n            int pos0 = (intptr_t)hand - (intptr_t)origstr;\n            strncpy(newstr, origstr, pos0);\n            int pos1, pos2, hwnd16;\n            int count = sscanf(hand, \"%[a-z ]%n%d%n\", newstr + pos0, &pos1, &hwnd16, &pos2);\n            sprintf(newstr + pos0 + pos1, \" %u%s\", HWND_32((HWND16)hwnd16), hand + pos2);\n            return newstr;\n        }\n    }\n\n    return origstr;\n}\n\nstatic void xlate_stat_handle(const char *cmdstr, char *retstr)\n{\n    if (strstr(cmdstr, \"window handle\"))\n    {\n        DWORD handle = strtoul(retstr, NULL, 10);\n        itoa(HWND_16(handle), retstr, 10);\n    }\n    else if (strstr(cmdstr, \"palette handle\"))\n    {\n        DWORD handle = strtoul(retstr, NULL, 10);\n        itoa(HPALETTE_16(handle), retstr, 10);\n    }\n}\n\n// handle the wait ourselves so to prevent the thread from being blocked for 300ms\nstatic DWORD fix_play_wait(const char *cmdstr, char *retstr, int retlen, char *waitpos)\n{\n    char newstr[128];\n    HWND wndwait = NULL;\n    DWORD devid;\n    if (waitpos && !waitpos[5])\n    {\n        char sid[20];\n        sscanf(cmdstr + 5, \"%s\", &sid);\n        devid = mciGetDeviceIDA(sid);\n        MCI_GETDEVCAPS_PARMS devcaps = {0};\n        devcaps.dwItem = MCI_GETDEVCAPS_DEVICE_TYPE;\n        mciSendCommandA(devid, MCI_GETDEVCAPS, MCI_GETDEVCAPS_ITEM, &devcaps);\n        // handle the wait ourselves so to prevent the thread from being blocked for 300ms\n        if (devcaps.dwReturn == MCI_DEVTYPE_DIGITAL_VIDEO)\n        {\n            wndwait = CreateWindowA(\"STATIC\", \"mcimsgwnd\", 0, 0, 0, 0, 0, HWND_MESSAGE, 0, 0, 0);\n            if (wndwait)\n            {\n                int len = (INT_PTR)waitpos - (INT_PTR)cmdstr;\n                sprintf(newstr, \"%.*s notify\", len, cmdstr, wndwait);\n                cmdstr = newstr;\n            }\n        }\n    }\n    DWORD ret = mciSendStringA(cmdstr, retstr, retlen, wndwait);\n    if (!ret && wndwait)\n    {\n        DWORD count;\n        ReleaseThunkLock(&count);\n        while (1)\n        {\n            MCI_GENERIC_PARMS genparm = {0};\n            MSG msg;\n            DWORD test;\n            if (mciDriverYield(devid))\n                mciSendCommandA(devid, MCI_STOP, 0, &genparm);\n            MsgWaitForMultipleObjects(0, 0, FALSE, 300, QS_POSTMESSAGE | QS_SENDMESSAGE);\n            if (PeekMessageA(&msg, wndwait, MM_MCINOTIFY, MM_MCINOTIFY, PM_REMOVE))\n                break;\n        }\n        RestoreThunkLock(count);\n    }\n    if (wndwait)\n        DestroyWindow(wndwait);\n    return ret;\n}\n\n\n/**************************************************************************\n * \t\t\tMCI_MessageToString\t\t\t[internal]\n */\nstatic const char* MCI_MessageToString(UINT wMsg)\n{\n    static char buffer[100];\n\n#define CASE(s) case (s): return #s\n\n    switch (wMsg) {\n        CASE(DRV_LOAD);\n        CASE(DRV_ENABLE);\n        CASE(DRV_OPEN);\n        CASE(DRV_CLOSE);\n        CASE(DRV_DISABLE);\n        CASE(DRV_FREE);\n        CASE(DRV_CONFIGURE);\n        CASE(DRV_QUERYCONFIGURE);\n        CASE(DRV_INSTALL);\n        CASE(DRV_REMOVE);\n        CASE(DRV_EXITSESSION);\n        CASE(DRV_EXITAPPLICATION);\n        CASE(DRV_POWER);\n\tCASE(MCI_BREAK);\n\tCASE(MCI_CLOSE);\n\tCASE(MCI_CLOSE_DRIVER);\n\tCASE(MCI_COPY);\n\tCASE(MCI_CUE);\n\tCASE(MCI_CUT);\n\tCASE(MCI_DELETE);\n\tCASE(MCI_ESCAPE);\n\tCASE(MCI_FREEZE);\n\tCASE(MCI_PAUSE);\n\tCASE(MCI_PLAY);\n\tCASE(MCI_GETDEVCAPS);\n\tCASE(MCI_INFO);\n\tCASE(MCI_LOAD);\n\tCASE(MCI_OPEN);\n\tCASE(MCI_OPEN_DRIVER);\n\tCASE(MCI_PASTE);\n\tCASE(MCI_PUT);\n\tCASE(MCI_REALIZE);\n\tCASE(MCI_RECORD);\n\tCASE(MCI_RESUME);\n\tCASE(MCI_SAVE);\n\tCASE(MCI_SEEK);\n\tCASE(MCI_SET);\n\tCASE(MCI_SOUND);\n\tCASE(MCI_SPIN);\n\tCASE(MCI_STATUS);\n\tCASE(MCI_STEP);\n\tCASE(MCI_STOP);\n\tCASE(MCI_SYSINFO);\n\tCASE(MCI_UNFREEZE);\n\tCASE(MCI_UPDATE);\n\tCASE(MCI_WHERE);\n\tCASE(MCI_WINDOW);\n\t/* constants for digital video */\n\tCASE(MCI_CAPTURE);\n\tCASE(MCI_MONITOR);\n\tCASE(MCI_RESERVE);\n\tCASE(MCI_SETAUDIO);\n\tCASE(MCI_SIGNAL);\n\tCASE(MCI_SETVIDEO);\n\tCASE(MCI_QUALITY);\n\tCASE(MCI_LIST);\n\tCASE(MCI_UNDO);\n\tCASE(MCI_CONFIGURE);\n\tCASE(MCI_RESTORE);\n#undef CASE\n    default:\n\tsprintf(buffer, \"MCI_<<%04X>>\", wMsg);\n\treturn buffer;\n    }\n}\n\nstatic LPWSTR MCI_strdupAtoW( LPCSTR str )\n{\n    LPWSTR ret;\n    INT len;\n\n    if (!str) return NULL;\n    len = MultiByteToWideChar( CP_ACP, 0, str, -1, NULL, 0 );\n    ret = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) );\n    if (ret) MultiByteToWideChar( CP_ACP, 0, str, -1, ret, len );\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\tMCI_MapMsg16To32W\t\t\t[internal]\n */\nstatic MMSYSTEM_MapType\tMCI_MapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR* lParam)\n{\n    if (*lParam == 0)\n    {\n        if (wMsg == MCI_PLAY)\n        {\n            *lParam = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MCI_GENERIC_PARMS));\n            return MMSYSTEM_MAP_OKMEM;\n        }\n        return MMSYSTEM_MAP_OK;\n    }\n    /* FIXME: to add also (with seg/linear modifications to do):\n     * MCI_LOAD, MCI_QUALITY, MCI_RESERVE, MCI_RESTORE, MCI_SAVE, MCI_SETTUNER\n     */\n    switch (wMsg) {\n\t/* case MCI_CAPTURE */\n    case MCI_CLOSE:\n    case MCI_CLOSE_DRIVER:\n    case MCI_CONFIGURE:\n    case MCI_COPY:\n    case MCI_CUE:\n    case MCI_CUT:\n    case MCI_DELETE:\n    case MCI_GETDEVCAPS:\n\t/* case MCI_INDEX: */\n    case MCI_LIST:\n\t/* case MCI_MARK: */\n\t/* case MCI_MONITOR: */\n    case MCI_PASTE:\n    case MCI_PAUSE:\n    case MCI_PLAY:\n    case MCI_REALIZE:\n    case MCI_RECORD:\n    case MCI_RESUME:\n    case MCI_SEEK:\n    case MCI_SET:\n    case MCI_SETAUDIO:\n\t/* case MCI_SETTIMECODE:*/\n    case MCI_SIGNAL:\n    case MCI_SPIN:\n    case MCI_STEP:\n    case MCI_STOP:\n\t/* case MCI_UNDO: */\n        {\n            LPMCI_GENERIC_PARMS mgp = MapSL(*lParam);\n            mgp->dwCallback = HWND_32(mgp->dwCallback);\n            *lParam = mgp;\n        }\n        return MMSYSTEM_MAP_OKMEM;\n    case MCI_SETVIDEO:\n\t{\n\t    LPMCI_DGV_SETVIDEO_PARMSA mdsvp32 =  HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,\n                sizeof(LPMCI_DGV_SETVIDEO_PARMS16) + sizeof(MCI_DGV_SETVIDEO_PARMSA));\n\t    LPMCI_DGV_SETVIDEO_PARMS16 mdsvp16 = MapSL(*lParam);\n\t    if (mdsvp32)\n\t    {\n\t\t*(LPMCI_DGV_SETVIDEO_PARMS16*)(mdsvp32) = mdsvp16;\n\t\tmdsvp32 = (LPMCI_DGV_SETVIDEO_PARMSA)((char*)mdsvp32 + sizeof(LPMCI_DGV_SETVIDEO_PARMS16));\n\t\tmdsvp32->dwCallback = HWND_32(mdsvp16->dwCallback);\n\t\tmdsvp32->dwItem = mdsvp16->dwItem;\n\t\tif ((dwFlags & MCI_DGV_SETVIDEO_ITEM) && (mdsvp16->dwItem == MCI_DGV_SETVIDEO_PALHANDLE))\n\t\t    mdsvp32->dwValue = HPALETTE_32(mdsvp16->dwValue);\n        else if ((dwFlags & MCI_DGV_SETVIDEO_ITEM) && (mdsvp16->dwItem == MCI_AVI_SETVIDEO_DRAW_PROCEDURE))\n        {\n            static void *(*get_video_thunk)(DWORD) = 0;\n            if (!get_video_thunk)\n            {\n                HMODULE msvideo = LoadLibraryA(\"msvideo.dll16\");\n                if (msvideo)\n                    get_video_thunk = (void *(*)(DWORD))GetProcAddress(msvideo, \"get_video_thunk\");\n            }\n            if (get_video_thunk)\n                mdsvp32->dwValue = get_video_thunk(mdsvp16->dwValue);\n        }\n\t\telse\n\t\t    mdsvp32->dwValue = mdsvp16->dwValue;\n\t\tmdsvp32->dwOver = mdsvp16->dwOver;\n\t\tif (dwFlags & MCI_DGV_SETVIDEO_ALG)\n\t\t    mdsvp32->lpstrAlgorithm = MapSL(mdsvp16->lpstrAlgorithm);\n\t\tif (dwFlags & MCI_DGV_SETVIDEO_QUALITY)\n\t\t    mdsvp32->lpstrQuality = MapSL(mdsvp16->lpstrQuality);\n                *lParam = (DWORD)mdsvp32;\n             } else {\n                 return MMSYSTEM_MAP_NOMEM;\n             }\n\t}\n\treturn MMSYSTEM_MAP_OKMEM;\n    case MCI_UPDATE:\n        {\n            if (dwFlags & (MCI_DGV_UPDATE_HDC | MCI_DGV_RECT))\n            {\n                LPMCI_DGV_UPDATE_PARMS mdup32 = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,\n                    sizeof(LPMCI_DGV_UPDATE_PARMS16) + sizeof(MCI_DGV_UPDATE_PARMS));\n                LPMCI_DGV_UPDATE_PARMS16 mdup16 = MapSL(*lParam);\n                if (mdup32) {\n                    *(LPMCI_DGV_UPDATE_PARMS16*)(mdup32) = mdup16;\n                    mdup32 = (LPMCI_DGV_UPDATE_PARMS)((char*)mdup32 + sizeof(LPMCI_DGV_UPDATE_PARMS16));\n                    mdup32->dwCallback = HWND_32(mdup16->dwCallback);\n                    mdup32->rc.left = mdup16->rc.left;\n                    mdup32->rc.top = mdup16->rc.top;\n                    mdup32->rc.right = mdup16->rc.right;\n                    mdup32->rc.bottom = mdup16->rc.bottom;\n                    mdup32->hDC = HDC_32(mdup16->hDC);\n                    *lParam = (DWORD)mdup32;\n                } else {\n                    return MMSYSTEM_MAP_NOMEM;\n                }\n            }\n            else\n            {\n                LPMCI_GENERIC_PARMS mgp = MapSL(*lParam);\n                mgp->dwCallback = HWND_32(mgp->dwCallback);\n                *lParam = mgp;\n            }\n        }\n        return MMSYSTEM_MAP_OKMEM;\n    case MCI_WHERE:\n    case MCI_FREEZE:\n    case MCI_UNFREEZE:\n    case MCI_PUT:\n        {\n            LPMCI_DGV_RECT_PARMS mdrp32 = HeapAlloc(GetProcessHeap(), 0,\n                sizeof(LPMCI_DGV_RECT_PARMS16) + sizeof(MCI_DGV_RECT_PARMS));\n            LPMCI_DGV_RECT_PARMS16 mdrp16 = MapSL(*lParam);\n            if (mdrp32) {\n                *(LPMCI_DGV_RECT_PARMS16*)(mdrp32) = mdrp16;\n                mdrp32 = (LPMCI_DGV_RECT_PARMS)((char*)mdrp32 + sizeof(LPMCI_DGV_RECT_PARMS16));\n                mdrp32->dwCallback = HWND_32(mdrp16->dwCallback);\n                mdrp32->rc.left = mdrp16->rc.left;\n                mdrp32->rc.top = mdrp16->rc.top;\n                mdrp32->rc.right = mdrp16->rc.right;\n                mdrp32->rc.bottom = mdrp16->rc.bottom;\n            } else {\n                return MMSYSTEM_MAP_NOMEM;\n            }\n            *lParam = (DWORD)mdrp32;\n        }\n        return MMSYSTEM_MAP_OKMEM;\n    case MCI_STATUS:\n        {\n            if (dwFlags & (MCI_DGV_STATUS_REFERENCE | MCI_DGV_STATUS_DISKSPACE)) {\n                LPMCI_DGV_STATUS_PARMSW mdsp32w = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,\n                    sizeof(LPMCI_DGV_STATUS_PARMS16) + sizeof(MCI_DGV_STATUS_PARMSW));\n                LPMCI_DGV_STATUS_PARMS16 mdsp16 = MapSL(*lParam);\n                if (mdsp32w) {\n                    *(LPMCI_DGV_STATUS_PARMS16*)(mdsp32w) = mdsp16;\n                    mdsp32w = (LPMCI_DGV_STATUS_PARMSW)((char*)mdsp32w + sizeof(LPMCI_DGV_STATUS_PARMS16));\n                    mdsp32w->dwCallback = HWND_32(mdsp16->dwCallback);\n                    mdsp32w->dwReturn = mdsp16->dwReturn;\n                    mdsp32w->dwItem = mdsp16->dwItem;\n                    mdsp32w->dwTrack = mdsp16->dwTrack;\n                    if (dwFlags & MCI_DGV_STATUS_DISKSPACE)\n                        mdsp32w->lpstrDrive = MCI_strdupAtoW(MapSL(mdsp16->lpstrDrive));\n                    if (dwFlags & MCI_DGV_STATUS_REFERENCE)\n                        mdsp32w->dwReference = mdsp16->dwReference;\n                    *lParam = (DWORD)mdsp32w;\n                } else {\n                    return MMSYSTEM_MAP_NOMEM;\n                }\n            } else {\n                *lParam = (DWORD)MapSL(*lParam);\n                if(!(dwFlags & MCI_STATUS_ITEM))\n                    return MMSYSTEM_MAP_OK;\n            }\n        }\n        return MMSYSTEM_MAP_OKMEM;\n    case MCI_WINDOW:\n        {\n            LPMCI_OVLY_WINDOW_PARMSW mowp32w = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MCI_OVLY_WINDOW_PARMSW));\n            LPMCI_OVLY_WINDOW_PARMS16 mowp16 = MapSL(*lParam);\n            if (mowp32w) {\n                mowp32w->dwCallback = HWND_32(mowp16->dwCallback);\n                mowp32w->hWnd = HWND_32(mowp16->hWnd);\n                mowp32w->nCmdShow = mowp16->nCmdShow;\n                if (dwFlags & (MCI_DGV_WINDOW_TEXT | MCI_OVLY_WINDOW_TEXT))\n                    mowp32w->lpstrText = MCI_strdupAtoW(MapSL(mowp16->lpstrText));\n            } else {\n                return MMSYSTEM_MAP_NOMEM;\n            }\n            *lParam = (DWORD)mowp32w;\n        }\n        return MMSYSTEM_MAP_OKMEM;\n    case MCI_ESCAPE:\n\t{\n            LPMCI_VD_ESCAPE_PARMSW\tmvep32w = HeapAlloc(GetProcessHeap(), 0, sizeof(MCI_VD_ESCAPE_PARMSW));\n\t    LPMCI_VD_ESCAPE_PARMS16\tmvep16  = MapSL(*lParam);\n\n\t    if (mvep32w) {\n\t\tmvep32w->dwCallback       = HWND_32(mvep16->dwCallback);\n\t\tmvep32w->lpstrCommand     = MCI_strdupAtoW(MapSL(mvep16->lpstrCommand));\n\t    } else {\n\t\treturn MMSYSTEM_MAP_NOMEM;\n\t    }\n\t    *lParam = (DWORD)mvep32w;\n\t}\n\treturn MMSYSTEM_MAP_OKMEM;\n    case MCI_INFO:\n\t{\n            LPMCI_DGV_INFO_PARMSW\tmip32w = HeapAlloc(GetProcessHeap(), 0, sizeof(LPMCI_DGV_INFO_PARMS16) + sizeof(MCI_DGV_INFO_PARMSW));\n\t    LPMCI_DGV_INFO_PARMS16\tmip16  = MapSL(*lParam);\n\n\t    if (mip32w) {\n\t\t*(LPMCI_DGV_INFO_PARMS16*)(mip32w) = mip16;\n\t\tmip32w = (LPMCI_DGV_INFO_PARMSW)((char*)mip32w + sizeof(LPMCI_DGV_INFO_PARMS16));\n\t\tmip32w->dwCallback  = HWND_32(mip16->dwCallback);\n\t\tmip32w->lpstrReturn = HeapAlloc(GetProcessHeap(), 0, mip16->dwRetSize * sizeof(WCHAR));\n\t\tmip32w->dwRetSize   = mip16->dwRetSize;\n\t\tif (dwFlags & MCI_DGV_INFO_ITEM)\n\t\t    mip32w->dwItem  = mip16->dwItem;\n\t    } else {\n\t\treturn MMSYSTEM_MAP_NOMEM;\n\t    }\n\t    *lParam = (DWORD)mip32w;\n\t}\n\treturn MMSYSTEM_MAP_OKMEM;\n    case MCI_OPEN:\n    case MCI_OPEN_DRIVER:\n\t{\n            LPMCI_OPEN_PARMSW\tmop32w = HeapAlloc(GetProcessHeap(), 0, sizeof(LPMCI_OPEN_PARMS16) + sizeof(MCI_ANIM_OPEN_PARMSW));\n\t    LPMCI_OPEN_PARMS16\tmop16  = MapSL(*lParam);\n\n\t    if (mop32w) {\n\t\t*(LPMCI_OPEN_PARMS16*)(mop32w) = mop16;\n\t\tmop32w = (LPMCI_OPEN_PARMSW)((char*)mop32w + sizeof(LPMCI_OPEN_PARMS16));\n\t\tmop32w->dwCallback       = HWND_32(mop16->dwCallback);\n\t\tmop32w->wDeviceID        = mop16->wDeviceID;\n                if ( ( dwFlags & ( MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID)) == MCI_OPEN_TYPE)\n                    mop32w->lpstrDeviceType  = MCI_strdupAtoW(MapSL(mop16->lpstrDeviceType));\n                else\n                    mop32w->lpstrDeviceType  = (LPWSTR) mop16->lpstrDeviceType;\n                if( ( dwFlags & ( MCI_OPEN_ELEMENT | MCI_OPEN_ELEMENT_ID)) == MCI_OPEN_ELEMENT)\n                    mop32w->lpstrElementName = MCI_strdupAtoW(MapSL(mop16->lpstrElementName));\n                else\n                    mop32w->lpstrElementName = (LPWSTR) mop16->lpstrElementName;\n                if( ( dwFlags &  MCI_OPEN_ALIAS))\n                    mop32w->lpstrAlias = MCI_strdupAtoW(MapSL(mop16->lpstrAlias));\n                else\n                    mop32w->lpstrAlias = (LPWSTR) mop16->lpstrAlias;\n\t\t/* copy extended information if any...\n\t\t * FIXME: this may seg fault if initial structure does not contain them and\n\t\t * the reads after msip16 fail under LDT limits...\n\t\t * NOTE: this should be split in two. First pass, while calling MCI_OPEN, and\n\t\t * should not take care of extended parameters, and should be used by MCI_Open\n\t\t * to fetch uDevType. When, this is known, the mapping for sending the\n\t\t * MCI_OPEN_DRIVER shall be done depending on uDevType.\n\t\t */\n\t\tif (HIWORD(dwFlags))\n\t\t{\n\t\t\tmemcpy(mop32w + 1, mop16 + 1, sizeof(MCI_ANIM_OPEN_PARMS16) - sizeof(MCI_OPEN_PARMS16));\n\t\t\t((MCI_ANIM_OPEN_PARMSW *)mop32w)->hWndParent = HWND_32(((MCI_ANIM_OPEN_PARMS16 *)mop16)->hWndParent);\n\t\t}\n\t    } else {\n\t\treturn MMSYSTEM_MAP_NOMEM;\n\t    }\n\t    *lParam = (DWORD)mop32w;\n\t}\n\treturn MMSYSTEM_MAP_OKMEM;\n    case MCI_SYSINFO:\n    {\n        MCI_SYSINFO_PARMSW *origmsip32w;\n        MCI_SYSINFO_PARMSW *msip32w = HeapAlloc(GetProcessHeap(), 0, sizeof(MCI_OPEN_PARMS16 *) + sizeof(MCI_SYSINFO_PARMSW));\n        MCI_SYSINFO_PARMS16 *msip16 = MapSL(*lParam);\n\n        if (!msip32w)\n            return MMSYSTEM_MAP_NOMEM;\n\n        origmsip32w = msip32w;\n        *(MCI_SYSINFO_PARMS16 **)msip32w = msip16;\n        msip32w = (MCI_SYSINFO_PARMSW *)((char *)msip32w + sizeof(MCI_OPEN_PARMS16 *));\n        msip32w->dwCallback       = HWND_32(msip16->dwCallback);\n        msip32w->lpstrReturn      = HeapAlloc(GetProcessHeap(), 0, (dwFlags & MCI_SYSINFO_QUANTITY) ?\n                                                                    sizeof(DWORD) :\n                                                                    msip16->dwRetSize * sizeof(WCHAR));\n        if (!msip32w->lpstrReturn)\n        {\n            HeapFree(GetProcessHeap(), 0, origmsip32w);\n            return MMSYSTEM_MAP_NOMEM;\n        }\n        msip32w->dwRetSize        = (dwFlags & MCI_SYSINFO_QUANTITY) ? sizeof(DWORD) : msip16->dwRetSize;\n        msip32w->dwNumber         = msip16->dwNumber;\n        msip32w->wDeviceType      = msip16->wDeviceType;\n\n        *lParam = (DWORD)msip32w;\n    }\n\treturn MMSYSTEM_MAP_OKMEM;\n    case MCI_SOUND:\n\t{\n            LPMCI_SOUND_PARMSW\t\tmbp32 = HeapAlloc(GetProcessHeap(), 0, sizeof(MCI_SOUND_PARMSW));\n\t    LPMCI_SOUND_PARMS16\t\tmbp16 = MapSL(*lParam);\n\n\t    if (mbp32) {\n\t\tmbp32->dwCallback = HWND_32(mbp16->dwCallback);\n\t\tmbp32->lpstrSoundName = MCI_strdupAtoW(MapSL(mbp16->lpstrSoundName));\n\t    } else {\n\t\treturn MMSYSTEM_MAP_NOMEM;\n\t    }\n\t    *lParam = (DWORD)mbp32;\n\t}\n\treturn MMSYSTEM_MAP_OKMEM;\n    case DRV_LOAD:\n    case DRV_ENABLE:\n    case DRV_OPEN:\n    case DRV_CLOSE:\n    case DRV_DISABLE:\n    case DRV_FREE:\n    case DRV_CONFIGURE:\n    case DRV_QUERYCONFIGURE:\n    case DRV_INSTALL:\n    case DRV_REMOVE:\n    case DRV_EXITSESSION:\n    case DRV_EXITAPPLICATION:\n    case DRV_POWER:\n\tFIXME(\"This is a hack\\n\");\n\treturn MMSYSTEM_MAP_OK;\n    default:\n\tFIXME(\"Don't know how to map msg=%s\\n\", MCI_MessageToString(wMsg));\n    }\n    return MMSYSTEM_MAP_MSGERROR;\n}\n\n/**************************************************************************\n * \t\t\tMCI_UnMapMsg16To32W\t\t\t[internal]\n */\nstatic  void\tMCI_UnMapMsg16To32W(WORD wMsg, DWORD dwFlags, DWORD_PTR lParam, DWORD result)\n{\n    switch (wMsg) {\n    case MCI_CLOSE:\n    case MCI_CLOSE_DRIVER:\n    case MCI_CONFIGURE:\n    case MCI_COPY:\n    case MCI_CUE:\n    case MCI_CUT:\n    case MCI_DELETE:\n    case MCI_GETDEVCAPS:\n    case MCI_LIST:\n    case MCI_PASTE:\n    case MCI_PAUSE:\n    case MCI_PLAY:\n    case MCI_REALIZE:\n    case MCI_RECORD:\n    case MCI_RESUME:\n    case MCI_SEEK:\n    case MCI_SET:\n    case MCI_SETAUDIO:\n    case MCI_SPIN:\n    case MCI_STEP:\n    case MCI_STOP:\n    case MCI_SIGNAL:\n        if (lParam) {\n            LPMCI_GENERIC_PARMS mgp = (LPMCI_GENERIC_PARMS)lParam;\n            mgp->dwCallback = HWND_16(mgp->dwCallback);\n        }\n        break;\n\n    case MCI_SETVIDEO:\n\tif (lParam) {\n            char *base = (char*)lParam - sizeof(LPMCI_DGV_SETVIDEO_PARMS16);\n            HeapFree(GetProcessHeap(), 0, base);\n\t}\n\tbreak;\n    case MCI_UPDATE:\n        if (dwFlags & (MCI_DGV_UPDATE_HDC | MCI_DGV_RECT))\n        {\n            char *base = (char*)lParam - sizeof(LPMCI_DGV_UPDATE_PARMS16);\n            HeapFree(GetProcessHeap(), 0, base);\n        }\n        else if (lParam) {\n            LPMCI_GENERIC_PARMS mgp = (LPMCI_GENERIC_PARMS)lParam;\n            mgp->dwCallback = HWND_16(mgp->dwCallback);\n        }\n    break;\n            \n    case MCI_WHERE:\n    case MCI_FREEZE:\n    case MCI_UNFREEZE:\n    case MCI_PUT:\n        if (lParam) {\n            LPMCI_DGV_RECT_PARMS mdrp32 = (LPMCI_DGV_RECT_PARMS)lParam;\n            char *base = (char*)lParam - sizeof(LPMCI_DGV_RECT_PARMS16);\n            LPMCI_DGV_RECT_PARMS16 mdrp16 = *(LPMCI_DGV_RECT_PARMS16*)base;\n            mdrp16->rc.left = mdrp32->rc.left;\n            mdrp16->rc.top = mdrp32->rc.top;\n            mdrp16->rc.right = mdrp32->rc.right;\n            mdrp16->rc.bottom = mdrp32->rc.bottom;\n            HeapFree(GetProcessHeap(), 0, base);\n        }\n        break;\n    case MCI_STATUS:\n        if (lParam) {\n            if (dwFlags & (MCI_DGV_STATUS_REFERENCE | MCI_DGV_STATUS_DISKSPACE)) {\n                LPMCI_DGV_STATUS_PARMSW mdsp32w = (LPMCI_DGV_STATUS_PARMSW)lParam;\n                char *base = (char*)lParam - sizeof(LPMCI_DGV_STATUS_PARMS16);\n                LPMCI_DGV_STATUS_PARMS16 mdsp16 = *(LPMCI_DGV_STATUS_PARMS16*)base;\n                mdsp16->dwReturn = mdsp32w->dwReturn;\n                HeapFree(GetProcessHeap(), 0, (LPVOID)mdsp32w->lpstrDrive);\n                HeapFree(GetProcessHeap(), 0, base);\n            }\n            else if (dwFlags & MCI_STATUS_ITEM)\n            {\n               LPMCI_STATUS_PARMS msp = lParam;\n               if (msp->dwItem == 0x4001) // MCI_DGV_STATUS_HWND\n                   msp->dwReturn = (DWORD_PTR)HWND_16((HWND)(msp->dwReturn));\n            }\n        }\n        break;\n    case MCI_WINDOW:\n        if (lParam) {\n            LPMCI_OVLY_WINDOW_PARMSW mowp32w = (LPMCI_OVLY_WINDOW_PARMSW)lParam;\n            HeapFree(GetProcessHeap(), 0, (LPVOID)mowp32w->lpstrText);\n            HeapFree(GetProcessHeap(), 0, mowp32w);\n        }\n        break;\n    case MCI_ESCAPE:\n        if (lParam) {\n            LPMCI_VD_ESCAPE_PARMSW\tmvep32W = (LPMCI_VD_ESCAPE_PARMSW)lParam;\n            HeapFree(GetProcessHeap(), 0, (LPVOID)mvep32W->lpstrCommand);\n            HeapFree(GetProcessHeap(), 0, (LPVOID)lParam);\n        }\n        break;\n    case MCI_INFO:\n        if (lParam) {\n            LPMCI_INFO_PARMSW\t        mip32w = (LPMCI_INFO_PARMSW)lParam;\n            char                       *base   = (char*)lParam - sizeof(LPMCI_INFO_PARMS16);\n\t    LPMCI_INFO_PARMS16          mip16  = *(LPMCI_INFO_PARMS16*)base;\n        int len = 0;\n\n            if (result == MMSYSERR_NOERROR)\n                len = WideCharToMultiByte(CP_ACP, 0,\n                                    mip32w->lpstrReturn, mip32w->dwRetSize + 1,/* dwRetSize does not include null character */\n                                    MapSL(mip16->lpstrReturn), mip16->dwRetSize,\n                                    NULL, NULL);\n            mip16->dwRetSize = len == 0 ? 0 : len - 1; /* never update prior to NT? */\n            HeapFree(GetProcessHeap(), 0, mip32w->lpstrReturn);\n            HeapFree(GetProcessHeap(), 0, base);\n        }\n        break;\n    case MCI_SYSINFO:\n        if (lParam) {\n            MCI_SYSINFO_PARMSW *msip32w = (MCI_SYSINFO_PARMSW *)lParam;\n            char               *base    = (char*)lParam - sizeof(MCI_SYSINFO_PARMS16 *);\n            MCI_SYSINFO_PARMS16 *msip16  = *(MCI_SYSINFO_PARMS16 **)base;\n\n            if (dwFlags & MCI_SYSINFO_QUANTITY) {\n                DWORD *quantity = MapSL(msip16->lpstrReturn);\n\n                *quantity = *(DWORD *)msip32w->lpstrReturn;\n            }\n            else if (result == MMSYSERR_NOERROR) {\n                WideCharToMultiByte(CP_ACP, 0,\n                                    msip32w->lpstrReturn, msip32w->dwRetSize,\n                                    MapSL(msip16->lpstrReturn), msip16->dwRetSize,\n                                    NULL, NULL);\n            }\n\n            HeapFree(GetProcessHeap(), 0, msip32w->lpstrReturn);\n            HeapFree(GetProcessHeap(), 0, base);\n        }\n        break;\n    case MCI_SOUND:\n        if (lParam) {\n            LPMCI_SOUND_PARMSW          msp32W = (LPMCI_SOUND_PARMSW)lParam;\n            HeapFree(GetProcessHeap(), 0, (LPVOID)msp32W->lpstrSoundName);\n            HeapFree(GetProcessHeap(), 0, (LPVOID)lParam);\n        }\n        break;\n    case MCI_OPEN:\n    case MCI_OPEN_DRIVER:\n\tif (lParam) {\n            LPMCI_OPEN_PARMSW\tmop32w = (LPMCI_OPEN_PARMSW)lParam;\n            char               *base   = (char*)lParam - sizeof(LPMCI_OPEN_PARMS16);\n\t    LPMCI_OPEN_PARMS16\tmop16  = *(LPMCI_OPEN_PARMS16*)base;\n\n\t    mop16->wDeviceID = mop32w->wDeviceID;\n            if( ( dwFlags & ( MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID)) == MCI_OPEN_TYPE)\n                HeapFree(GetProcessHeap(), 0, (LPWSTR)mop32w->lpstrDeviceType);\n            if( ( dwFlags & ( MCI_OPEN_ELEMENT | MCI_OPEN_ELEMENT_ID)) == MCI_OPEN_ELEMENT)\n                HeapFree(GetProcessHeap(), 0, (LPWSTR)mop32w->lpstrElementName);\n            if( ( dwFlags &  MCI_OPEN_ALIAS))\n                HeapFree(GetProcessHeap(), 0, (LPWSTR)mop32w->lpstrAlias);\n            HeapFree(GetProcessHeap(), 0, base);\n\t}\n        break;\n    default:\n\tFIXME(\"Map/Unmap internal error on msg=%s\\n\", MCI_MessageToString(wMsg));\n    }\n}\n\n/* ###################################################\n * #                     MCI                         #\n * ###################################################\n */\n\n#include <pshpack1.h>\n#define MCI_MAX_THUNKS      32\n\nstatic struct mci_thunk\n{\n    BYTE        popl_eax;       /* popl  %eax (return address) */\n    BYTE        pushl_func;     /* pushl $pfn16 (16bit callback function) */\n    YIELDPROC16 yield16;\n    BYTE        pushl_eax;      /* pushl %eax */\n    BYTE        jmp;            /* ljmp MCI_Yield1632 */\n    DWORD       callback;\n    MCIDEVICEID id;\n} *MCI_Thunks;\n\n#include <poppack.h>\n\nstatic CRITICAL_SECTION mci_cs;\nstatic CRITICAL_SECTION_DEBUG mci_critsect_debug =\n{\n    0, 0, &mci_cs,\n    { &mci_critsect_debug.ProcessLocksList, &mci_critsect_debug.ProcessLocksList },\n      0, 0, { (DWORD_PTR)(__FILE__ \": mmsystem_mci_cs\") }\n};\nstatic CRITICAL_SECTION mci_cs = { &mci_critsect_debug, -1, 0, 0, 0, 0 };\n\nstatic UINT MCI_Yield1632(DWORD pfn16, MCIDEVICEID id, DWORD yield_data)\n{\n    WORD args[8];\n\n    if (!pfn16)\n    {\n        MSG msg;\n        PeekMessageW( &msg, 0, 0, 0, PM_REMOVE | PM_QS_SENDMESSAGE );\n        return 0;\n    }\n\n    /* 16 bit func, call it */\n    TRACE(\"Function (16 bit) !\\n\");\n\n    args[2] = (MCIDEVICEID16)id;\n    args[1] = HIWORD(yield_data);\n    args[0] = LOWORD(yield_data);\n    return WOWCallback16Ex(pfn16, WCB16_PASCAL, sizeof(args), args, NULL);\n}\n\n/******************************************************************\n *\t\tMCI_AddThunk\n *\n */\nstatic struct mci_thunk*       MCI_AddThunk(MCIDEVICEID id, YIELDPROC16 pfn16)\n{\n     struct mci_thunk* thunk;\n\n     if (!MCI_Thunks)\n     {\n         MCI_Thunks = VirtualAlloc(NULL, MCI_MAX_THUNKS * sizeof(*MCI_Thunks), MEM_COMMIT,\n                                   PAGE_EXECUTE_READWRITE);\n         if (!MCI_Thunks) return NULL;\n         for (thunk = MCI_Thunks; thunk < &MCI_Thunks[MCI_MAX_THUNKS]; thunk++)\n         {\n             thunk->popl_eax     = 0x58;   /* popl  %eax */\n             thunk->pushl_func   = 0x68;   /* pushl $pfn16 */\n             thunk->yield16      = 0;\n             thunk->pushl_eax    = 0x50;   /* pushl %eax */\n             thunk->jmp          = 0xe9;   /* jmp MCI_Yield1632 */\n             thunk->callback     = (char *)MCI_Yield1632 - (char *)(&thunk->callback + 1);\n             thunk->id           = 0;\n         }\n     }\n     for (thunk = MCI_Thunks; thunk < &MCI_Thunks[MCI_MAX_THUNKS]; thunk++)\n     {\n         if (thunk->yield16 == 0)\n         {\n             thunk->yield16 = pfn16;\n             thunk->id      = id;\n             return thunk;\n         }\n     }\n     FIXME(\"Out of mci-thunks. Bump MCI_MAX_THUNKS\\n\");\n     return NULL;\n}\n\n/******************************************************************\n *\t\tMCI_HasThunk\n *\n */\nstatic struct mci_thunk*    MCI_HasThunk(YIELDPROC pfn)\n{\n    struct mci_thunk* thunk;\n\n    if (!MCI_Thunks) return NULL;\n    for (thunk = MCI_Thunks; thunk < &MCI_Thunks[MCI_MAX_THUNKS]; thunk++)\n    {\n        if ((YIELDPROC)thunk == pfn) return thunk;\n    }\n    return NULL;\n}\n\n/**************************************************************************\n * \t\t\t\tmciSetYieldProc\t\t\t[MMSYSTEM.714]\n */\nBOOL16 WINAPI mciSetYieldProc16(UINT16 uDeviceID, YIELDPROC16 fpYieldProc, DWORD dwYieldData)\n{\n    struct mci_thunk*   thunk;\n    BOOL                ret;\n\n    TRACE(\"(%u, %p, %08x)\\n\", uDeviceID, fpYieldProc, dwYieldData);\n\n    if (!(thunk = MCI_AddThunk(uDeviceID, fpYieldProc)))\n        return FALSE;\n    ret = mciSetYieldProc(uDeviceID, (YIELDPROC)thunk, dwYieldData);\n    if (!ret) thunk->yield16 = NULL;\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tmciGetYieldProc\t\t\t[MMSYSTEM.716]\n */\nYIELDPROC16 WINAPI mciGetYieldProc16(UINT16 uDeviceID, DWORD* lpdwYieldData)\n{\n    YIELDPROC           yield;\n    DWORD               data;\n    struct mci_thunk*   thunk;\n\n    TRACE(\"(%u, %p)\\n\", uDeviceID, lpdwYieldData);\n\n    yield = mciGetYieldProc(uDeviceID, &data);\n    if (!yield || !(thunk = MCI_HasThunk(yield))) return NULL;\n\n    if (lpdwYieldData) *lpdwYieldData = data;\n    return thunk->yield16;\n}\n\n/**************************************************************************\n * \t\t\t\tmciGetErrorString\t\t[MMSYSTEM.706]\n */\nBOOL16 WINAPI mciGetErrorString16(DWORD wError, LPSTR lpstrBuffer, UINT16 uLength)\n{\n    return mciGetErrorStringA(wError, lpstrBuffer, uLength);\n}\n\n/**************************************************************************\n * \t\t\t\tmciDriverNotify\t\t\t[MMSYSTEM.711]\n */\nBOOL16 WINAPI mciDriverNotify16(HWND16 hWndCallBack, UINT16 wDevID, UINT16 wStatus)\n{\n    TRACE(\"(%04X, %04x, %04X)\\n\", hWndCallBack, wDevID, wStatus);\n\n    return PostMessageA(HWND_32(hWndCallBack), MM_MCINOTIFY, wStatus, wDevID);\n}\n\n/**************************************************************************\n * \t\t\tmciGetDriverData\t\t\t[MMSYSTEM.708]\n */\nDWORD WINAPI mciGetDriverData16(UINT16 uDeviceID)\n{\n    return mciGetDriverData(uDeviceID);\n}\n\n/**************************************************************************\n * \t\t\tmciSetDriverData\t\t\t[MMSYSTEM.707]\n */\nBOOL16 WINAPI mciSetDriverData16(UINT16 uDeviceID, DWORD data)\n{\n    return mciSetDriverData(uDeviceID, data);\n}\n\nUINT CALLBACK check_break(UINT16 wDevID, DWORD data)\n{\n    if (!data || ((data >> 16) && (GetActiveWindow() != HWND_32(data >> 16))))\n        return 0;\n    SHORT key = GetAsyncKeyState(data & 0xffff);\n    return key & 1 ? 0xffffffff : 0;\n}\n\n/**************************************************************************\n * \t\t\t\tmciSendCommand\t\t\t[MMSYSTEM.701]\n */\nDWORD WINAPI mciSendCommand16(UINT16 wDevID, UINT16 wMsg, DWORD dwParam1, DWORD p2)\n{\n    DWORD\t\tdwRet;\n    BOOL                to32;\n    DWORD_PTR           dwParam2 = p2;\n    DWORD count;\n    HWND wndwait = NULL;\n\n    TRACE(\"(%04X, %s, %08X, %08lX)\\n\", wDevID, MCI_MessageToString(wMsg), dwParam1, dwParam2);\n\n    switch (wMsg) {\n    case MCI_CLOSE:\n    case MCI_OPEN:\n    case MCI_SYSINFO:\n    case MCI_SOUND:\n        to32 = TRUE;\n    \tbreak;\n    case MCI_BREAK:\n    {\n        MCI_BREAK_PARMS16 *mbp16 = (MCI_BREAK_PARMS16 *)MapSL(p2);\n        DWORD data = 0;\n        if (dwParam1 & MCI_BREAK_KEY)\n        {\n            data = mbp16->nVirtKey;\n            if (dwParam1 & MCI_BREAK_HWND)\n                data |= mbp16->hwndBreak << 16;\n        }\n        BOOL ret = mciSetYieldProc(wDevID, check_break, data);\n        return ret ? 0 : MCIERR_INVALID_DEVICE_ID;\n    }\n    case MCI_PLAY:\n        if ((dwParam1 & (MCI_WAIT | MCI_NOTIFY)) == MCI_WAIT)\n        {\n            MCI_GETDEVCAPS_PARMS devcaps = {0};\n            devcaps.dwItem = MCI_GETDEVCAPS_DEVICE_TYPE;\n            mciSendCommandA(wDevID, MCI_GETDEVCAPS, MCI_GETDEVCAPS_ITEM, &devcaps);\n            // handle the wait ourselves so to prevent the thread from being blocked for 300ms\n            if (devcaps.dwReturn == MCI_DEVTYPE_DIGITAL_VIDEO)\n            {\n                wndwait = CreateWindowA(\"STATIC\", \"mcimsgwnd\", 0, 0, 0, 0, 0, HWND_MESSAGE, 0, 0, 0);\n                if (wndwait)\n                    dwParam1 = (dwParam1 & ~(MCI_WAIT)) | MCI_NOTIFY;\n            }\n        }\n    default:\n        /* FIXME: this is suboptimal. If MCI driver is a 16bit one, we'll be\n         * doing 16=>32W, then 32W=>16 conversions.\n         * We could directly call the 16bit driver if we had the information.\n         */\n        to32 = TRUE;\n    }\n    if (to32) {\n        MMSYSTEM_MapType res;\n\n\tdwRet = MCIERR_INVALID_DEVICE_ID;\n\n        switch (res = MCI_MapMsg16To32W(wMsg, dwParam1, &dwParam2)) {\n        case MMSYSTEM_MAP_MSGERROR:\n            dwRet = MCIERR_DRIVER_INTERNAL;\n            break;\n        case MMSYSTEM_MAP_NOMEM:\n            TRACE(\"Problem mapping %s from 16 to 32\\n\", MCI_MessageToString(wMsg));\n            dwRet = MCIERR_OUT_OF_MEMORY;\n            break;\n        case MMSYSTEM_MAP_OK:\n        case MMSYSTEM_MAP_OKMEM:\n            if (wndwait)\n                ((MCI_GENERIC_PARMS *)dwParam2)->dwCallback = wndwait;\n            ReleaseThunkLock(&count);\n            dwRet = mciSendCommandW(wDevID, wMsg, dwParam1, dwParam2);\n            RestoreThunkLock(count);\n            if (res == MMSYSTEM_MAP_OKMEM)\n            {\n                if (!p2)\n                    HeapFree(GetProcessHeap(), 0, dwParam2);\n                else\n                    MCI_UnMapMsg16To32W(wMsg, dwParam1, dwParam2, dwRet);\n            }\n            break;\n        }\n    }\n    else\n    {\n#if 0\n\tif (wDevID == MCI_ALL_DEVICE_ID) {\n\t    FIXME(\"unhandled MCI_ALL_DEVICE_ID\\n\");\n\t    dwRet = MCIERR_CANNOT_USE_ALL;\n\t} else {\n            dwRet = SendDriverMessage(hdrv, wMsg, dwParam1, dwParam2);\n\t}\n#endif\n    }\n    if (wMsg == MCI_CLOSE && dwRet == 0 && MCI_Thunks)\n    {\n        /* free yield thunks, if any */\n        unsigned    i;\n        for (i = 0; i < MCI_MAX_THUNKS; i++)\n        {\n            if (MCI_Thunks[i].id == wDevID)\n                MCI_Thunks[i].yield16 = NULL;\n        }\n    }\n    if (!dwRet && (wMsg == MCI_OPEN))\n    {\n        // the winmm yield proc doesn't work like the mmsystem one\n        UINT16 mciid = ((LPMCI_OPEN_PARMS)MapSL(p2))->wDeviceID;\n        mciSetYieldProc(mciid, check_break, VK_CANCEL);\n    }\n    if (!dwRet && wndwait)\n    {\n        ReleaseThunkLock(&count);\n        while (1)\n        {\n            MCI_GENERIC_PARMS genparm = {0};\n            MSG msg;\n            DWORD test;\n            if (mciDriverYield(wDevID))\n                mciSendCommandA(wDevID, MCI_STOP, 0, &genparm);\n            MsgWaitForMultipleObjects(0, 0, FALSE, 300, QS_POSTMESSAGE | QS_SENDMESSAGE);\n            if (PeekMessageA(&msg, wndwait, MM_MCINOTIFY, MM_MCINOTIFY, PM_REMOVE))\n                break;\n        }\n        RestoreThunkLock(count);\n    }\n    if (wndwait)\n        DestroyWindow(wndwait);\n    return dwRet;\n}\n\n/**************************************************************************\n * \t\t\t\tmciGetDeviceID\t\t       \t[MMSYSTEM.703]\n */\nUINT16 WINAPI mciGetDeviceID16(LPCSTR lpstrName)\n{\n    TRACE(\"(\\\"%s\\\")\\n\", lpstrName);\n\n    return mciGetDeviceIDA(lpstrName);\n}\n\n/**************************************************************************\n * \t\t\t\tmciGetDeviceIDFromElementID\t[MMSYSTEM.715]\n */\nUINT16 WINAPI mciGetDeviceIDFromElementID16(DWORD dwElementID, LPCSTR lpstrType)\n{\n    return mciGetDeviceIDFromElementIDA(dwElementID, lpstrType);\n}\n\n/**************************************************************************\n * \t\t\t\tmciGetCreatorTask\t\t[MMSYSTEM.717]\n */\nHTASK16 WINAPI mciGetCreatorTask16(UINT16 uDeviceID)\n{\n    return HTASK_16(mciGetCreatorTask(uDeviceID));\n}\n\n/**************************************************************************\n * \t\t\t\tmciDriverYield\t\t\t[MMSYSTEM.710]\n */\nUINT16 WINAPI mciDriverYield16(UINT16 uDeviceID)\n{\n    return mciDriverYield(uDeviceID);\n}\n\n/**************************************************************************\n * \t\t\t\tmciSendString\t\t\t[MMSYSTEM.702]\n */\nDWORD WINAPI mciSendString16(LPCSTR lpstrCommand, LPSTR lpstrRet,\n\t\t\t     UINT16 uRetLen, HWND16 hwndCallback)\n{\n    char newstr[128];\n    if (!strncmp(lpstrCommand, \"play \", 5))\n    {\n        char *waitpos = strstr(lpstrCommand, \" wait\");\n        if (waitpos)\n            return fix_play_wait(lpstrCommand, lpstrRet, uRetLen, waitpos);\n    }\n    DWORD count;\n    ReleaseThunkLock(&count);\n    DWORD ret = mciSendStringA(xlate_str_handle(lpstrCommand, newstr), lpstrRet, uRetLen, HWND_32(hwndCallback));\n    RestoreThunkLock(count);\n    if (!ret && lpstrRet && !strncmp(lpstrCommand, \"status \", 7))\n        xlate_stat_handle(lpstrCommand, lpstrRet);\n    return ret;\n}\n\n/**************************************************************************\n *                    \tmciLoadCommandResource\t\t\t[MMSYSTEM.705]\n */\nUINT16 WINAPI mciLoadCommandResource16(HINSTANCE16 hInst, LPCSTR resname, UINT16 type)\n{\n    TRACE(\"(%04x, %s, %x)!\\n\", hInst, resname, type);\n    return MCI_NO_COMMAND_TABLE;\n}\n\n/**************************************************************************\n *                    \tmciFreeCommandResource\t\t\t[MMSYSTEM.713]\n */\nBOOL16 WINAPI mciFreeCommandResource16(UINT16 uTable)\n{\n    TRACE(\"(%04x)!\\n\", uTable);\n\n    return FALSE;\n}\n\n/**************************************************************************\n * \t\t\t\tmciExecute\t\t\t[MMSYSTEM.712]\n */\nBOOL16 WINAPI mciExecute16(LPCSTR lpstrCommand)\n{\n    return mciSendStringA(lpstrCommand, NULL, 0, NULL);\n}\n"
  },
  {
    "path": "mmsystem/message16.c",
    "content": "/*\n * MMSYSTEM MCI and low level mapping functions\n *\n * Copyright 1999 Eric Pouech\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <string.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <stddef.h>\n#include <assert.h>\n#define NONAMELESSUNION\n#ifdef WINE_NO_UNICODE_MACROS\n# define WINELIB_NAME_AW(func) \\\n    func##_must_be_suffixed_with_W_or_A_in_this_context \\\n    func##_must_be_suffixed_with_W_or_A_in_this_context\n#else  /* WINE_NO_UNICODE_MACROS */\n# ifdef UNICODE\n#  define WINELIB_NAME_AW(func) func##W\n# else\n#  define WINELIB_NAME_AW(func) func##A\n# endif\n#endif  /* WINE_NO_UNICODE_MACROS */\n#ifdef WINE_NO_UNICODE_MACROS\n# define DECL_WINELIB_TYPE_AW(type)  /* nothing */\n#else\n# define DECL_WINELIB_TYPE_AW(type)  typedef WINELIB_NAME_AW(type) type;\n#endif\n#include \"wine/winbase16.h\"\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winuser.h\"\n#include \"wownt32.h\"\n#include \"winemm16.h\"\n#include \"digitalv.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(winmm);\n\n/* =================================\n *       A U X    M A P P E R S\n * ================================= */\n\n/* =================================\n *     M I X E R  M A P P E R S\n * ================================= */\n\n/**************************************************************************\n * \t\t\t\tMMSYSTDRV_Mixer_Map16To32W\t\t[internal]\n */\nstatic  MMSYSTEM_MapType\tMMSYSTDRV_Mixer_Map16To32W  (UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2)\n{\n    return MMSYSTEM_MAP_MSGERROR;\n}\n\n/**************************************************************************\n * \t\t\t\tMMSYSTDRV_Mixer_UnMap16To32W\t[internal]\n */\nstatic  MMSYSTEM_MapType\tMMSYSTDRV_Mixer_UnMap16To32W(UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2, MMRESULT fn_ret)\n{\n#if 0\n    MIXERCAPSA\tmicA;\n    UINT\tret = mixerGetDevCapsA(devid, &micA, sizeof(micA));\n\n    if (ret == MMSYSERR_NOERROR) {\n\tmixcaps->wMid           = micA.wMid;\n\tmixcaps->wPid           = micA.wPid;\n\tmixcaps->vDriverVersion = micA.vDriverVersion;\n\tstrcpy(mixcaps->szPname, micA.szPname);\n\tmixcaps->fdwSupport     = micA.fdwSupport;\n\tmixcaps->cDestinations  = micA.cDestinations;\n    }\n    return ret;\n#endif\n    return MMSYSTEM_MAP_MSGERROR;\n}\n\n/**************************************************************************\n * \t\t\t\tMMSYSTDRV_Mixer_MapCB\n */\nstatic  void\t                MMSYSTDRV_Mixer_MapCB(DWORD uMsg, DWORD_PTR* dwUser, DWORD_PTR* dwParam1, DWORD_PTR* dwParam2)\n{\n    FIXME(\"NIY\\n\");\n}\n\n/* =================================\n *   M I D I  I N    M A P P E R S\n * ================================= */\n\n/**************************************************************************\n * \t\t\t\tMMSYSTDRV_MidiIn_Map16To32W\t\t[internal]\n */\nstatic  MMSYSTEM_MapType\tMMSYSTDRV_MidiIn_Map16To32W  (UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2)\n{\n    MMSYSTEM_MapType\tret = MMSYSTEM_MAP_MSGERROR;\n\n    switch (wMsg) {\n    case MIDM_GETNUMDEVS:\n    case MIDM_RESET:\n\tcase MIDM_START:\n\tcase MIDM_STOP:\n\tret = MMSYSTEM_MAP_OK;\n\tbreak;\n\n    case MIDM_OPEN:\n    case MIDM_CLOSE:\n\tFIXME(\"Shouldn't be used: the corresponding 16 bit functions use the 32 bit interface\\n\");\n\tbreak;\n\n    case MIDM_GETDEVCAPS:\n\t{\n\t\tLPMIDIINCAPSW\tmic32 = HeapAlloc(GetProcessHeap(), 0, sizeof(LPMIDIINCAPS16) + sizeof(MIDIINCAPSW));\n\t\tLPMIDIINCAPS16\tmic16 = MapSL(*lpParam1);\n\n\t    if (mic32) {\n\t\t*(LPMIDIINCAPS16*)mic32 = mic16;\n\t\tmic32 = (LPMIDIINCAPSW)((LPSTR)mic32 + sizeof(LPMIDIINCAPS16));\n\t\t*lpParam1 = (DWORD)mic32;\n\t\t*lpParam2 = sizeof(MIDIINCAPSW);\n\n\t\tret = MMSYSTEM_MAP_OKMEM;\n\t    } else {\n\t\tret = MMSYSTEM_MAP_NOMEM;\n\t    }\n\t}\n\tbreak;\n    case MIDM_PREPARE:\n\t{\n\t    LPMIDIHDR\t\tmh32 = HeapAlloc(GetProcessHeap(), 0, sizeof(LPMIDIHDR) + sizeof(MIDIHDR));\n\t    LPMIDIHDR16\t\tmh16 = MapSL(*lpParam1);\n\n\t    if (mh32) {\n\t\t*(LPMIDIHDR*)mh32 = (LPMIDIHDR)*lpParam1;\n\t\tmh32 = (LPMIDIHDR)((LPSTR)mh32 + sizeof(LPMIDIHDR));\n\t\tmh32->lpData = MapSL((SEGPTR)mh16->lpData);\n\t\tmh32->dwBufferLength = mh16->dwBufferLength;\n\t\tmh32->dwBytesRecorded = mh16->dwBytesRecorded;\n\t\tmh32->dwUser = mh16->dwUser;\n\t\tmh32->dwFlags = mh16->dwFlags;\n\t\tmh16->reserved = (MIDIHDR16*)mh32; /* for reuse in unprepare and write */\n\t\t*lpParam1 = (DWORD)mh32;\n\t\t*lpParam2 = offsetof(MIDIHDR,dwOffset); /* old size, without dwOffset */\n\n\t\tret = MMSYSTEM_MAP_OKMEM;\n\t    } else {\n\t\tret = MMSYSTEM_MAP_NOMEM;\n\t    }\n\t}\n\tbreak;\n\tcase MIDM_ADDBUFFER:\n    case MIDM_UNPREPARE:\n\t{\n\t    LPMIDIHDR16\t\tmh16 = MapSL(*lpParam1);\n\t    LPMIDIHDR\t\tmh32 = (MIDIHDR*)mh16->reserved;\n\n\t    *lpParam1 = (DWORD)mh32;\n\t    *lpParam2 = offsetof(MIDIHDR,dwOffset);\n\t    if (wMsg == MIDM_ADDBUFFER && mh32->dwBufferLength < mh16->dwBufferLength) {\n\t\tERR(\"Size of buffer has been increased from %d to %d, keeping initial value\\n\",\n\t\t    mh32->dwBufferLength, mh16->dwBufferLength);\n\t    } else\n\t\t\tmh32->dwBufferLength = mh16->dwBufferLength;\n\t    ret = MMSYSTEM_MAP_OKMEM;\n\t}\n\tbreak;\n    }\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tMMSYSTDRV_MidiIn_UnMap16To32W\t[internal]\n */\nstatic  MMSYSTEM_MapType\tMMSYSTDRV_MidiIn_UnMap16To32W(UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2, MMRESULT fn_ret)\n{\n    MMSYSTEM_MapType\tret = MMSYSTEM_MAP_MSGERROR;\n\n    switch (wMsg) {\n    case MIDM_GETNUMDEVS:\n    case MIDM_RESET:\n\tcase MIDM_START:\n\tcase MIDM_STOP:\n\tret = MMSYSTEM_MAP_OK;\n\tbreak;\n\n    case MIDM_OPEN:\n    case MIDM_CLOSE:\n\tFIXME(\"Shouldn't be used: the corresponding 16 bit functions use the 32 bit interface\\n\");\n\tbreak;\n\n    case MIDM_GETDEVCAPS:\n\t{\n        LPMIDIINCAPSW\t\tmic32 = (LPMIDIINCAPSW)(*lpParam1);\n\t    LPMIDIINCAPS16\t\tmic16 = *(LPMIDIINCAPS16*)((LPSTR)mic32 - sizeof(LPMIDIINCAPS16));\n\n\t    mic16->wMid\t\t\t= mic32->wMid;\n\t    mic16->wPid\t\t\t= mic32->wPid;\n\t    mic16->vDriverVersion\t= mic32->vDriverVersion;\n            WideCharToMultiByte( CP_ACP, 0, mic32->szPname, -1, mic16->szPname,\n                                 sizeof(mic16->szPname), NULL, NULL );\n\t    mic16->dwSupport\t\t= mic32->dwSupport;\n\t    HeapFree(GetProcessHeap(), 0, (LPSTR)mic32 - sizeof(LPMIDIINCAPS16));\n\t    ret = MMSYSTEM_MAP_OK;\n\t}\n\tbreak;\n    case MIDM_PREPARE:\n    case MIDM_UNPREPARE:\n    case MIDM_ADDBUFFER:\n\t{\n\t    LPMIDIHDR\t\tmh32 = (LPMIDIHDR)(*lpParam1);\n\t    LPMIDIHDR16\t\tmh16 = MapSL(*(SEGPTR*)((LPSTR)mh32 - sizeof(LPMIDIHDR)));\n\n\t    assert((MIDIHDR*)mh16->reserved == mh32);\n\t    mh16->dwFlags = mh32->dwFlags;\n\n\t    if (wMsg == MODM_UNPREPARE && fn_ret == MMSYSERR_NOERROR) {\n\t\tHeapFree(GetProcessHeap(), 0, (LPSTR)mh32 - sizeof(LPMIDIHDR));\n\t\tmh16->reserved = 0;\n\t    }\n\t    ret = MMSYSTEM_MAP_OK;\n\t}\n\tbreak;\n    }\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tMMSYSTDRV_MidiIn_MapCB\t\t[internal]\n */\nstatic  void            \tMMSYSTDRV_MidiIn_MapCB(UINT uMsg, DWORD_PTR* dwUser, DWORD_PTR* dwParam1, DWORD_PTR* dwParam2)\n{\n    switch (uMsg) {\n    case MIM_OPEN:\n    case MIM_CLOSE:\n\t/* dwParam1 & dwParam2 are supposed to be 0, nothing to do */\n\n    case MIM_DATA:\n    case MIM_MOREDATA:\n    case MIM_ERROR:\n\t/* dwParam1 & dwParam2 are data, nothing to do */\n\tbreak;\n    case MIM_LONGDATA:\n    case MIM_LONGERROR:\n        {\n\t    LPMIDIHDR\t\tmh32 = (LPMIDIHDR)(*dwParam1);\n\t    SEGPTR\t\tsegmh16 = *(SEGPTR*)((LPSTR)mh32 - sizeof(LPMIDIHDR));\n\t    LPMIDIHDR16\t\tmh16 = MapSL(segmh16);\n\n\t    *dwParam1 = (DWORD)segmh16;\n\t    mh16->dwFlags = mh32->dwFlags;\n\t    mh16->dwBytesRecorded = mh32->dwBytesRecorded;\n\t}\n\tbreak;\n    default:\n\tERR(\"Unknown msg %u\\n\", uMsg);\n    }\n}\n\n/* =================================\n *   M I D I  O U T  M A P P E R S\n * ================================= */\n\n/**************************************************************************\n * \t\t\t\tMMSYSTDRV_MidiOut_Map16To32W\t[internal]\n */\nstatic MMSYSTEM_MapType\tMMSYSTDRV_MidiOut_Map16To32W  (UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2)\n{\n    MMSYSTEM_MapType\tret = MMSYSTEM_MAP_MSGERROR;\n\n    switch (wMsg) {\n    case MODM_GETNUMDEVS:\n    case MODM_DATA:\n    case MODM_RESET:\n    case MODM_SETVOLUME:\n\tret = MMSYSTEM_MAP_OK;\n\tbreak;\n\n    case MODM_OPEN:\n    case MODM_CLOSE:\n    case MODM_GETVOLUME:\n\tFIXME(\"Shouldn't be used: the corresponding 16 bit functions use the 32 bit interface\\n\");\n\tbreak;\n\n    case MODM_GETDEVCAPS:\n\t{\n            LPMIDIOUTCAPSW\tmoc32 = HeapAlloc(GetProcessHeap(), 0, sizeof(LPMIDIOUTCAPS16) + sizeof(MIDIOUTCAPSW));\n\t    LPMIDIOUTCAPS16\tmoc16 = MapSL(*lpParam1);\n\n\t    if (moc32) {\n\t\t*(LPMIDIOUTCAPS16*)moc32 = moc16;\n\t\tmoc32 = (LPMIDIOUTCAPSW)((LPSTR)moc32 + sizeof(LPMIDIOUTCAPS16));\n\t\t*lpParam1 = (DWORD)moc32;\n\t\t*lpParam2 = sizeof(MIDIOUTCAPSW);\n\n\t\tret = MMSYSTEM_MAP_OKMEM;\n\t    } else {\n\t\tret = MMSYSTEM_MAP_NOMEM;\n\t    }\n\t}\n\tbreak;\n    case MODM_PREPARE:\n\t{\n\t    LPMIDIHDR\t\tmh32 = HeapAlloc(GetProcessHeap(), 0, sizeof(LPMIDIHDR) + sizeof(MIDIHDR));\n\t    LPMIDIHDR16\t\tmh16 = MapSL(*lpParam1);\n\n\t    if (mh32) {\n\t\t*(LPMIDIHDR*)mh32 = (LPMIDIHDR)*lpParam1;\n\t\tmh32 = (LPMIDIHDR)((LPSTR)mh32 + sizeof(LPMIDIHDR));\n\t\tmh32->lpData = MapSL((SEGPTR)mh16->lpData);\n\t\tmh32->dwBufferLength = mh16->dwBufferLength;\n\t\tmh32->dwBytesRecorded = mh16->dwBytesRecorded;\n\t\tmh32->dwUser = mh16->dwUser;\n\t\tmh32->dwFlags = mh16->dwFlags;\n\t\tmh16->reserved = (MIDIHDR16*)mh32; /* for reuse in unprepare and write */\n\t\t*lpParam1 = (DWORD)mh32;\n\t\t*lpParam2 = offsetof(MIDIHDR,dwOffset); /* old size, without dwOffset */\n\n\t\tret = MMSYSTEM_MAP_OKMEM;\n\t    } else {\n\t\tret = MMSYSTEM_MAP_NOMEM;\n\t    }\n\t}\n\tbreak;\n    case MODM_UNPREPARE:\n    case MODM_LONGDATA:\n\t{\n\t    LPMIDIHDR16\t\tmh16 = MapSL(*lpParam1);\n\t    LPMIDIHDR\t\tmh32 = (MIDIHDR*)mh16->reserved;\n\n\t    *lpParam1 = (DWORD)mh32;\n\t    *lpParam2 = offsetof(MIDIHDR,dwOffset);\n\t    /* dwBufferLength can be reduced between prepare & write */\n\t    if (wMsg == MODM_LONGDATA && mh32->dwBufferLength < mh16->dwBufferLength) {\n\t\tERR(\"Size of buffer has been increased from %d to %d, keeping initial value\\n\",\n\t\t    mh32->dwBufferLength, mh16->dwBufferLength);\n\t    } else\n                mh32->dwBufferLength = mh16->dwBufferLength;\n\t    ret = MMSYSTEM_MAP_OKMEM;\n\t}\n\tbreak;\n\n    case MODM_CACHEPATCHES:\n    case MODM_CACHEDRUMPATCHES:\n    default:\n\tFIXME(\"NIY: no conversion yet for %u [%lx,%lx]\\n\", wMsg, *lpParam1, *lpParam2);\n\tbreak;\n    }\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tMMSYSTDRV_MidiOut_UnMap16To32W\t[internal]\n */\nstatic  MMSYSTEM_MapType\tMMSYSTDRV_MidiOut_UnMap16To32W(UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2, MMRESULT fn_ret)\n{\n    MMSYSTEM_MapType\tret = MMSYSTEM_MAP_MSGERROR;\n\n    switch (wMsg) {\n    case MODM_GETNUMDEVS:\n    case MODM_DATA:\n    case MODM_RESET:\n    case MODM_SETVOLUME:\n\tret = MMSYSTEM_MAP_OK;\n\tbreak;\n\n    case MODM_OPEN:\n    case MODM_CLOSE:\n    case MODM_GETVOLUME:\n\tFIXME(\"Shouldn't be used: the corresponding 16 bit functions use the 32 bit interface\\n\");\n\tbreak;\n\n    case MODM_GETDEVCAPS:\n\t{\n            LPMIDIOUTCAPSW\t\tmoc32 = (LPMIDIOUTCAPSW)(*lpParam1);\n\t    LPMIDIOUTCAPS16\t\tmoc16 = *(LPMIDIOUTCAPS16*)((LPSTR)moc32 - sizeof(LPMIDIOUTCAPS16));\n\n\t    moc16->wMid\t\t\t= moc32->wMid;\n\t    moc16->wPid\t\t\t= moc32->wPid;\n\t    moc16->vDriverVersion\t= moc32->vDriverVersion;\n            WideCharToMultiByte( CP_ACP, 0, moc32->szPname, -1, moc16->szPname,\n                                 sizeof(moc16->szPname), NULL, NULL );\n\t    moc16->wTechnology\t\t= moc32->wTechnology;\n\t    moc16->wVoices\t\t= moc32->wVoices;\n\t    moc16->wNotes\t\t= moc32->wNotes;\n\t    moc16->wChannelMask\t\t= moc32->wChannelMask;\n\t    moc16->dwSupport\t\t= moc32->dwSupport;\n\t    HeapFree(GetProcessHeap(), 0, (LPSTR)moc32 - sizeof(LPMIDIOUTCAPS16));\n\t    ret = MMSYSTEM_MAP_OK;\n\t}\n\tbreak;\n    case MODM_PREPARE:\n    case MODM_UNPREPARE:\n    case MODM_LONGDATA:\n\t{\n\t    LPMIDIHDR\t\tmh32 = (LPMIDIHDR)(*lpParam1);\n\t    LPMIDIHDR16\t\tmh16 = MapSL(*(SEGPTR*)((LPSTR)mh32 - sizeof(LPMIDIHDR)));\n\n\t    assert((MIDIHDR*)mh16->reserved == mh32);\n\t    mh16->dwFlags = mh32->dwFlags;\n\n\t    if (wMsg == MODM_UNPREPARE && fn_ret == MMSYSERR_NOERROR) {\n\t\tHeapFree(GetProcessHeap(), 0, (LPSTR)mh32 - sizeof(LPMIDIHDR));\n\t\tmh16->reserved = 0;\n\t    }\n\t    ret = MMSYSTEM_MAP_OK;\n\t}\n\tbreak;\n\n    case MODM_CACHEPATCHES:\n    case MODM_CACHEDRUMPATCHES:\n    default:\n\tFIXME(\"NIY: no conversion yet for %u [%lx,%lx]\\n\", wMsg, *lpParam1, *lpParam2);\n\tbreak;\n    }\n    return ret;\n}\n\n/******************************************************************\n *\t\t                        MMSYSTDRV_MidiOut_MapCB\n */\nstatic  void MMSYSTDRV_MidiOut_MapCB(UINT uMsg, DWORD_PTR* dwUser, DWORD_PTR* dwParam1, DWORD_PTR* dwParam2)\n{\n    switch (uMsg) {\n    case MOM_OPEN:\n    case MOM_CLOSE:\n\t/* dwParam1 & dwParam2 are supposed to be 0, nothing to do */\n\tbreak;\n    case MOM_POSITIONCB:\n\t/* MIDIHDR.dwOffset exists since Win 32 only */\n\tFIXME(\"MOM_POSITIONCB/MEVT_F_CALLBACK wants MIDIHDR.dwOffset in 16 bit code\\n\");\n\t/* fall through */\n    case MOM_DONE:\n        {\n\t    /* initial map is: 16 => 32 */\n\t    LPMIDIHDR\t\tmh32 = (LPMIDIHDR)(*dwParam1);\n\t    SEGPTR\t\tsegmh16 = *(SEGPTR*)((LPSTR)mh32 - sizeof(LPMIDIHDR));\n\t    LPMIDIHDR16\t\tmh16 = MapSL(segmh16);\n\n\t    *dwParam1 = (DWORD)segmh16;\n\t    mh16->dwFlags = mh32->dwFlags;\n\t}\n\tbreak;\n    default:\n\tERR(\"Unknown msg %u\\n\", uMsg);\n    }\n}\n\n/* =================================\n *   W A V E  I N    M A P P E R S\n * ================================= */\n\n/**************************************************************************\n * \t\t\t\tMMSYSTDRV_WaveIn_Map16To32W\t\t[internal]\n */\nstatic  MMSYSTEM_MapType\tMMSYSTDRV_WaveIn_Map16To32W  (UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2)\n{\n    MMSYSTEM_MapType\tret = MMSYSTEM_MAP_MSGERROR;\n\n    switch (wMsg) {\n    case WIDM_GETNUMDEVS:\n    case WIDM_RESET:\n    case WIDM_START:\n    case WIDM_STOP:\n\tret = MMSYSTEM_MAP_OK;\n\tbreak;\n    case WIDM_OPEN:\n    case WIDM_CLOSE:\n\tFIXME(\"Shouldn't be used: the corresponding 16 bit functions use the 32 bit interface\\n\");\n\tbreak;\n    case WIDM_GETDEVCAPS:\n\t{\n            LPWAVEINCAPSW\twic32 = HeapAlloc(GetProcessHeap(), 0, sizeof(LPWAVEINCAPS16) + sizeof(WAVEINCAPSW));\n\t    LPWAVEINCAPS16\twic16 = MapSL(*lpParam1);\n\n\t    if (wic32) {\n\t\t*(LPWAVEINCAPS16*)wic32 = wic16;\n\t\twic32 = (LPWAVEINCAPSW)((LPSTR)wic32 + sizeof(LPWAVEINCAPS16));\n\t\t*lpParam1 = (DWORD)wic32;\n\t\t*lpParam2 = sizeof(WAVEINCAPSW);\n\n\t\tret = MMSYSTEM_MAP_OKMEM;\n\t    } else {\n\t\tret = MMSYSTEM_MAP_NOMEM;\n\t    }\n\t}\n\tbreak;\n    case WIDM_GETPOS:\n\t{\n            LPMMTIME\t\tmmt32 = HeapAlloc(GetProcessHeap(), 0, sizeof(LPMMTIME16) + sizeof(MMTIME));\n\t    LPMMTIME16\t\tmmt16 = MapSL(*lpParam1);\n\n\t    if (mmt32) {\n\t\t*(LPMMTIME16*)mmt32 = mmt16;\n\t\tmmt32 = (LPMMTIME)((LPSTR)mmt32 + sizeof(LPMMTIME16));\n\n\t\tmmt32->wType = mmt16->wType;\n\t\t*lpParam1 = (DWORD)mmt32;\n\t\t*lpParam2 = sizeof(MMTIME);\n\n\t\tret = MMSYSTEM_MAP_OKMEM;\n\t    } else {\n\t\tret = MMSYSTEM_MAP_NOMEM;\n\t    }\n\t}\n\tbreak;\n    case WIDM_PREPARE:\n\t{\n\t    LPWAVEHDR\t\twh32 = HeapAlloc(GetProcessHeap(), 0, sizeof(LPWAVEHDR) + sizeof(WAVEHDR));\n\t    LPWAVEHDR\t\twh16 = MapSL(*lpParam1);\n\n\t    if (wh32) {\n\t\t*(LPWAVEHDR*)wh32 = (LPWAVEHDR)*lpParam1;\n\t\twh32 = (LPWAVEHDR)((LPSTR)wh32 + sizeof(LPWAVEHDR));\n\t\twh32->lpData = MapSL((SEGPTR)wh16->lpData);\n\t\twh32->dwBufferLength = wh16->dwBufferLength;\n\t\twh32->dwBytesRecorded = wh16->dwBytesRecorded;\n\t\twh32->dwUser = wh16->dwUser;\n\t\twh32->dwFlags = wh16->dwFlags;\n\t\twh32->dwLoops = wh16->dwLoops;\n\t\t/* FIXME: nothing on wh32->reserved */\n\t\t/* could link the wh32->reserved at this level for memory house keeping */\n\t\twh16->reserved = wh32; /* for reuse in unprepare and write */\n\t\t*lpParam1 = (DWORD)wh32;\n\t\t*lpParam2 = sizeof(WAVEHDR);\n\n\t\tret = MMSYSTEM_MAP_OKMEM;\n\t    } else {\n\t\tret = MMSYSTEM_MAP_NOMEM;\n\t    }\n\t}\n\tbreak;\n    case WIDM_ADDBUFFER:\n    case WIDM_UNPREPARE:\n\t{\n\t    LPWAVEHDR\t\twh16 = MapSL(*lpParam1);\n\t    LPWAVEHDR\t\twh32 = wh16->reserved;\n\n\t    *lpParam1 = (DWORD)wh32;\n\t    *lpParam2 = sizeof(WAVEHDR);\n\t    /* dwBufferLength can be reduced between prepare & write */\n\t    if (wMsg == WIDM_ADDBUFFER && wh32->dwBufferLength < wh16->dwBufferLength) {\n\t\tERR(\"Size of buffer has been increased from %d to %d, keeping initial value\\n\",\n\t\t    wh32->dwBufferLength, wh16->dwBufferLength);\n\t    } else\n                wh32->dwBufferLength = wh16->dwBufferLength;\n\t    ret = MMSYSTEM_MAP_OKMEM;\n\t}\n\tbreak;\n    case WIDM_MAPPER_STATUS:\n\t/* just a single DWORD */\n\t*lpParam2 = (DWORD)MapSL(*lpParam2);\n\tret = MMSYSTEM_MAP_OK;\n\tbreak;\n    default:\n\tFIXME(\"NIY: no conversion yet for %u [%lx,%lx]\\n\", wMsg, *lpParam1, *lpParam2);\n\tbreak;\n    }\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tMMSYSTDRV_WaveIn_UnMap16To32W\t[internal]\n */\nstatic  MMSYSTEM_MapType\tMMSYSTDRV_WaveIn_UnMap16To32W(UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2, MMRESULT fn_ret)\n{\n    MMSYSTEM_MapType\tret = MMSYSTEM_MAP_MSGERROR;\n\n    switch (wMsg) {\n    case WIDM_GETNUMDEVS:\n    case WIDM_RESET:\n    case WIDM_START:\n    case WIDM_STOP:\n    case WIDM_MAPPER_STATUS:\n\tret = MMSYSTEM_MAP_OK;\n\tbreak;\n    case WIDM_OPEN:\n    case WIDM_CLOSE:\n\tFIXME(\"Shouldn't be used: the corresponding 16 bit functions use the 32 bit interface\\n\");\n\tbreak;\n    case WIDM_GETDEVCAPS:\n\t{\n            LPWAVEINCAPSW\t\twic32 = (LPWAVEINCAPSW)(*lpParam1);\n\t    LPWAVEINCAPS16\t\twic16 = *(LPWAVEINCAPS16*)((LPSTR)wic32 - sizeof(LPWAVEINCAPS16));\n\n\t    wic16->wMid = wic32->wMid;\n\t    wic16->wPid = wic32->wPid;\n\t    wic16->vDriverVersion = wic32->vDriverVersion;\n            WideCharToMultiByte( CP_ACP, 0, wic32->szPname, -1, wic16->szPname,\n                                 sizeof(wic16->szPname), NULL, NULL );\n\t    wic16->dwFormats = wic32->dwFormats;\n\t    wic16->wChannels = wic32->wChannels;\n\t    HeapFree(GetProcessHeap(), 0, (LPSTR)wic32 - sizeof(LPWAVEINCAPS16));\n\t    ret = MMSYSTEM_MAP_OK;\n\t}\n\tbreak;\n    case WIDM_GETPOS:\n\t{\n            LPMMTIME\t\tmmt32 = (LPMMTIME)(*lpParam1);\n\t    LPMMTIME16\t\tmmt16 = *(LPMMTIME16*)((LPSTR)mmt32 - sizeof(LPMMTIME16));\n\n\t    MMSYSTEM_MMTIME32to16(mmt16, mmt32);\n\t    HeapFree(GetProcessHeap(), 0, (LPSTR)mmt32 - sizeof(LPMMTIME16));\n\t    ret = MMSYSTEM_MAP_OK;\n\t}\n\tbreak;\n    case WIDM_ADDBUFFER:\n    case WIDM_PREPARE:\n    case WIDM_UNPREPARE:\n\t{\n\t    LPWAVEHDR\t\twh32 = (LPWAVEHDR)(*lpParam1);\n\t    LPWAVEHDR\t\twh16 = MapSL(*(SEGPTR*)((LPSTR)wh32 - sizeof(LPWAVEHDR)));\n\n\t    assert(wh16->reserved == wh32);\n\t    wh16->dwBytesRecorded = wh32->dwBytesRecorded;\n\t    wh16->dwFlags = wh32->dwFlags;\n\n\t    if (wMsg == WIDM_UNPREPARE && fn_ret == MMSYSERR_NOERROR) {\n\t\tHeapFree(GetProcessHeap(), 0, (LPSTR)wh32 - sizeof(LPWAVEHDR));\n\t\twh16->reserved = 0;\n\t    }\n\t    ret = MMSYSTEM_MAP_OK;\n\t}\n\tbreak;\n    default:\n\tFIXME(\"NIY: no conversion yet for %u [%lx,%lx]\\n\", wMsg, *lpParam1, *lpParam2);\n\tbreak;\n    }\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tMMSYSTDRV_WaveIn_MapCB\t\t[internal]\n */\nstatic  void    MMSYSTDRV_WaveIn_MapCB(UINT uMsg, DWORD_PTR* dwUser, DWORD_PTR* dwParam1, DWORD_PTR* dwParam2)\n{\n    switch (uMsg) {\n    case WIM_OPEN:\n    case WIM_CLOSE:\n\t/* dwParam1 & dwParam2 are supposed to be 0, nothing to do */\n\tbreak;\n    case WIM_DATA:\n        {\n\t    /* initial map is: 16 => 32 */\n\t    LPWAVEHDR\t\twh32 = (LPWAVEHDR)(*dwParam1);\n\t    SEGPTR\t\tsegwh16 = *(SEGPTR*)((LPSTR)wh32 - sizeof(LPWAVEHDR));\n\t    LPWAVEHDR\t\twh16 = MapSL(segwh16);\n\n\t    *dwParam1 = (DWORD)segwh16;\n\t    wh16->dwFlags = wh32->dwFlags;\n\t    wh16->dwBytesRecorded = wh32->dwBytesRecorded;\n\t}\n\tbreak;\n    default:\n\tERR(\"Unknown msg %u\\n\", uMsg);\n    }\n}\n\n/* =================================\n *   W A V E  O U T  M A P P E R S\n * ================================= */\n\n/**************************************************************************\n * \t\t\t\tMMSYSTDRV_WaveOut_Map16To32W\t[internal]\n */\nstatic  MMSYSTEM_MapType\tMMSYSTDRV_WaveOut_Map16To32W  (UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2)\n{\n    MMSYSTEM_MapType\tret = MMSYSTEM_MAP_MSGERROR;\n\n    switch (wMsg) {\n    /* nothing to do */\n    case WODM_BREAKLOOP:\n    case WODM_CLOSE:\n    case WODM_GETNUMDEVS:\n    case WODM_PAUSE:\n    case WODM_RESET:\n    case WODM_RESTART:\n    case WODM_SETPITCH:\n    case WODM_SETPLAYBACKRATE:\n    case WODM_SETVOLUME:\n\tret = MMSYSTEM_MAP_OK;\n\tbreak;\n\n    case WODM_GETPITCH:\n    case WODM_GETPLAYBACKRATE:\n    case WODM_GETVOLUME:\n    case WODM_OPEN:\n\tFIXME(\"Shouldn't be used: the corresponding 16 bit functions use the 32 bit interface\\n\");\n\tbreak;\n\n    case WODM_GETDEVCAPS:\n\t{\n            LPWAVEOUTCAPSW\t\twoc32 = HeapAlloc(GetProcessHeap(), 0, sizeof(LPWAVEOUTCAPS16) + sizeof(WAVEOUTCAPSW));\n\t    LPWAVEOUTCAPS16\t\twoc16 = MapSL(*lpParam1);\n\n\t    if (woc32) {\n\t\t*(LPWAVEOUTCAPS16*)woc32 = woc16;\n\t\twoc32 = (LPWAVEOUTCAPSW)((LPSTR)woc32 + sizeof(LPWAVEOUTCAPS16));\n\t\t*lpParam1 = (DWORD)woc32;\n\t\t*lpParam2 = sizeof(WAVEOUTCAPSW);\n\n\t\tret = MMSYSTEM_MAP_OKMEM;\n\t    } else {\n\t\tret = MMSYSTEM_MAP_NOMEM;\n\t    }\n\t}\n\tbreak;\n    case WODM_GETPOS:\n\t{\n            LPMMTIME\t\tmmt32 = HeapAlloc(GetProcessHeap(), 0, sizeof(LPMMTIME16) + sizeof(MMTIME));\n\t    LPMMTIME16\t\tmmt16 = MapSL(*lpParam1);\n\n\t    if (mmt32) {\n\t\t*(LPMMTIME16*)mmt32 = mmt16;\n\t\tmmt32 = (LPMMTIME)((LPSTR)mmt32 + sizeof(LPMMTIME16));\n\n\t\tmmt32->wType = mmt16->wType;\n\t\t*lpParam1 = (DWORD)mmt32;\n\t\t*lpParam2 = sizeof(MMTIME);\n\n\t\tret = MMSYSTEM_MAP_OKMEM;\n\t    } else {\n\t\tret = MMSYSTEM_MAP_NOMEM;\n\t    }\n\t}\n\tbreak;\n    case WODM_PREPARE:\n\t{\n\t    LPWAVEHDR\t\twh32 = HeapAlloc(GetProcessHeap(), 0, sizeof(LPWAVEHDR) + sizeof(DWORD) + sizeof(WAVEHDR));\n\t    LPWAVEHDR\t\twh16 = MapSL(*lpParam1);\n\n\t    if (wh32) {\n\t\t*(LPWAVEHDR*)wh32 = (LPWAVEHDR)*lpParam1;\n\t\t*(DWORD *)((LPSTR)wh32 + sizeof(LPWAVEHDR)) = wh16->dwBufferLength; // preserve the prepared length\n\t\twh32 = (LPWAVEHDR)((LPSTR)wh32 + sizeof(DWORD) + sizeof(LPWAVEHDR));\n\t\twh32->lpData = MapSL((SEGPTR)wh16->lpData);\n\t\twh32->dwBufferLength = wh16->dwBufferLength;\n\t\twh32->dwBytesRecorded = wh16->dwBytesRecorded;\n\t\twh32->dwUser = wh16->dwUser;\n\t\twh32->dwFlags = wh16->dwFlags;\n\t\twh32->dwLoops = wh16->dwLoops;\n\t\t/* FIXME: nothing on wh32->reserved */\n\t\t/* could link the wh32->reserved at this level for memory house keeping */\n\t\twh16->reserved = wh32; /* for reuse in unprepare and write */\n\t\t*lpParam1 = (DWORD)wh32;\n\t\t*lpParam2 = sizeof(WAVEHDR);\n\n\t\tret = MMSYSTEM_MAP_OKMEM;\n\t    } else {\n\t\tret = MMSYSTEM_MAP_NOMEM;\n\t    }\n\t}\n\tbreak;\n    case WODM_UNPREPARE:\n    case WODM_WRITE:\n\t{\n\t    LPWAVEHDR\t\twh16 = MapSL(*lpParam1);\n\t    LPWAVEHDR\t\twh32 = wh16->reserved;\n\t    if (wMsg == WODM_UNPREPARE)\n\t\t    wh32->dwFlags = wh16->dwFlags;\n\n\t    *lpParam1 = (DWORD)wh32;\n\t    *lpParam2 = sizeof(WAVEHDR);\n\t    /* dwBufferLength can be reduced between prepare & write */\n/*\t    if (wMsg == WODM_WRITE && *(DWORD *)((LPSTR)wh32 - sizeof(DWORD)) < wh16->dwBufferLength) {\n\t\tERR(\"Size of buffer has been increased from %d to %d, keeping initial value\\n\",\n\t\t    *(DWORD *)((LPSTR)wh32 - sizeof(DWORD)), wh16->dwBufferLength);\n\t    } else*/\n                wh32->dwBufferLength = wh16->dwBufferLength;\n\t    ret = MMSYSTEM_MAP_OKMEM;\n\t}\n\tbreak;\n    case WODM_MAPPER_STATUS:\n\t*lpParam2 = (DWORD)MapSL(*lpParam2);\n\tret = MMSYSTEM_MAP_OK;\n\tbreak;\n    default:\n\tFIXME(\"NIY: no conversion yet for %u [%lx,%lx]\\n\", wMsg, *lpParam1, *lpParam2);\n\tbreak;\n    }\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tMMSYSTDRV_WaveOut_UnMap16To32W\t[internal]\n */\nstatic  MMSYSTEM_MapType\tMMSYSTDRV_WaveOut_UnMap16To32W(UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2, MMRESULT fn_ret)\n{\n    MMSYSTEM_MapType\tret = MMSYSTEM_MAP_MSGERROR;\n\n    switch (wMsg) {\n    /* nothing to do */\n    case WODM_BREAKLOOP:\n    case WODM_CLOSE:\n    case WODM_GETNUMDEVS:\n    case WODM_PAUSE:\n    case WODM_RESET:\n    case WODM_RESTART:\n    case WODM_SETPITCH:\n    case WODM_SETPLAYBACKRATE:\n    case WODM_SETVOLUME:\n    case WODM_MAPPER_STATUS:\n\tret = MMSYSTEM_MAP_OK;\n\tbreak;\n\n    case WODM_GETPITCH:\n    case WODM_GETPLAYBACKRATE:\n    case WODM_GETVOLUME:\n    case WODM_OPEN:\n\tFIXME(\"Shouldn't be used: those 16 bit functions use the 32 bit interface\\n\");\n\tbreak;\n\n    case WODM_GETDEVCAPS:\n\t{\n            LPWAVEOUTCAPSW\t\twoc32 = (LPWAVEOUTCAPSW)(*lpParam1);\n\t    LPWAVEOUTCAPS16\t\twoc16 = *(LPWAVEOUTCAPS16*)((LPSTR)woc32 - sizeof(LPWAVEOUTCAPS16));\n\n\t    woc16->wMid = woc32->wMid;\n\t    woc16->wPid = woc32->wPid;\n\t    woc16->vDriverVersion = woc32->vDriverVersion;\n            WideCharToMultiByte( CP_ACP, 0, woc32->szPname, -1, woc16->szPname,\n                                 sizeof(woc16->szPname), NULL, NULL );\n\t    woc16->dwFormats = woc32->dwFormats;\n\t    woc16->wChannels = woc32->wChannels;\n\t    woc16->dwSupport = woc32->dwSupport;\n\t    HeapFree(GetProcessHeap(), 0, (LPSTR)woc32 - sizeof(LPWAVEOUTCAPS16));\n\t    ret = MMSYSTEM_MAP_OK;\n\t}\n\tbreak;\n    case WODM_GETPOS:\n\t{\n            LPMMTIME\t\tmmt32 = (LPMMTIME)(*lpParam1);\n\t    LPMMTIME16\t\tmmt16 = *(LPMMTIME16*)((LPSTR)mmt32 - sizeof(LPMMTIME16));\n\n\t    MMSYSTEM_MMTIME32to16(mmt16, mmt32);\n\t    HeapFree(GetProcessHeap(), 0, (LPSTR)mmt32 - sizeof(LPMMTIME16));\n\t    ret = MMSYSTEM_MAP_OK;\n\t}\n\tbreak;\n    case WODM_PREPARE:\n    case WODM_UNPREPARE:\n    case WODM_WRITE:\n\t{\n\t    LPWAVEHDR\t\twh32 = (LPWAVEHDR)(*lpParam1);\n\t    LPWAVEHDR\t\twh16 = MapSL(*(SEGPTR*)((LPSTR)wh32 - sizeof(DWORD) - sizeof(LPWAVEHDR)));\n\n\t    assert(wh16->reserved == wh32);\n\t    wh16->dwFlags = wh32->dwFlags;\n\n\t    if (wMsg == WODM_UNPREPARE && fn_ret == MMSYSERR_NOERROR) {\n\t\tHeapFree(GetProcessHeap(), 0, (LPSTR)wh32 - sizeof(DWORD) - sizeof(LPWAVEHDR));\n\t\twh16->reserved = 0;\n\t    }\n\t    ret = MMSYSTEM_MAP_OK;\n\t}\n\tbreak;\n    default:\n\tFIXME(\"NIY: no conversion yet for %u [%lx,%lx]\\n\", wMsg, *lpParam1, *lpParam2);\n\tbreak;\n    }\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tMMDRV_WaveOut_Callback\t\t[internal]\n */\nstatic  void\tMMSYSTDRV_WaveOut_MapCB(UINT uMsg, DWORD_PTR* dwUser, DWORD_PTR* dwParam1, DWORD_PTR* dwParam2)\n{\n    switch (uMsg) {\n    case WOM_OPEN:\n    case WOM_CLOSE:\n\t/* dwParam1 & dwParam2 are supposed to be 0, nothing to do */\n\tbreak;\n    case WOM_DONE:\n        {\n\t    /* initial map is: 16 => 32 */\n\t    LPWAVEHDR\t\twh32 = (LPWAVEHDR)(*dwParam1);\n\t    SEGPTR\t\tsegwh16 = *(SEGPTR*)((LPSTR)wh32 - sizeof(DWORD) - sizeof(LPWAVEHDR));\n\t    LPWAVEHDR\t\twh16 = MapSL(segwh16);\n\n\t    *dwParam1 = (DWORD)segwh16;\n\t    wh16->dwFlags = wh32->dwFlags;\n\t}\n\tbreak;\n    default:\n\tERR(\"Unknown msg %u\\n\", uMsg);\n    }\n}\n\n/* ###################################################\n * #                DRIVER THUNKING                  #\n * ###################################################\n */\ntypedef\tMMSYSTEM_MapType        (*MMSYSTDRV_MAPMSG)(UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2);\ntypedef\tMMSYSTEM_MapType        (*MMSYSTDRV_UNMAPMSG)(UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2, MMRESULT ret);\ntypedef void                    (*MMSYSTDRV_MAPCB)(DWORD wMsg, DWORD_PTR* dwUser, DWORD_PTR* dwParam1, DWORD_PTR* dwParam2);\n\n#include <pshpack1.h>\n#define MMSYSTDRV_MAX_THUNKS      32\n\nstatic struct mmsystdrv_thunk\n{\n    BYTE                        popl_eax;       /* popl  %eax (return address) */\n    BYTE                        pushl_this;     /* pushl this (this very thunk) */\n    struct mmsystdrv_thunk*     this;\n    BYTE                        pushl_eax;      /* pushl %eax */\n    BYTE                        jmp;            /* ljmp MMDRV_Callback3216 */\n    DWORD                       callback3216;\n    DWORD                       callback;       /* callback value (function, window, event...) */\n    DWORD                       flags;          /* flags to control callback value (CALLBACK_???) */\n    void*                       hMmdrv;         /* Handle to 32bit mmdrv object */\n    enum MMSYSTEM_DriverType    kind;\n} *MMSYSTDRV_Thunks;\n\n#include <poppack.h>\n\nstatic struct MMSYSTDRV_Type\n{\n    MMSYSTDRV_MAPMSG    mapmsg16to32W;\n    MMSYSTDRV_UNMAPMSG  unmapmsg16to32W;\n    MMSYSTDRV_MAPCB     mapcb;\n} MMSYSTEM_DriversType[MMSYSTDRV_MAX] =\n{\n    {MMSYSTDRV_Mixer_Map16To32W,   MMSYSTDRV_Mixer_UnMap16To32W,   MMSYSTDRV_Mixer_MapCB},\n    {MMSYSTDRV_MidiIn_Map16To32W,  MMSYSTDRV_MidiIn_UnMap16To32W,  MMSYSTDRV_MidiIn_MapCB},\n    {MMSYSTDRV_MidiOut_Map16To32W, MMSYSTDRV_MidiOut_UnMap16To32W, MMSYSTDRV_MidiOut_MapCB},\n    {MMSYSTDRV_WaveIn_Map16To32W,  MMSYSTDRV_WaveIn_UnMap16To32W,  MMSYSTDRV_WaveIn_MapCB},\n    {MMSYSTDRV_WaveOut_Map16To32W, MMSYSTDRV_WaveOut_UnMap16To32W, MMSYSTDRV_WaveOut_MapCB},\n};\n\nBOOL WINAPI vm_inject(DWORD vpfn16, DWORD dwFlags,\n        DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode);\n/******************************************************************\n *\t\tMMSYSTDRV_Callback3216\n *\n */\nstatic LRESULT CALLBACK MMSYSTDRV_Callback3216(struct mmsystdrv_thunk* thunk, HDRVR hDev,\n                                               DWORD wMsg, DWORD_PTR dwUser, DWORD_PTR dwParam1,\n                                               DWORD_PTR dwParam2)\n{\n    WORD args[8];\n\n    assert(thunk->kind < MMSYSTDRV_MAX);\n    assert(MMSYSTEM_DriversType[thunk->kind].mapcb);\n\n    MMSYSTEM_DriversType[thunk->kind].mapcb(wMsg, &dwUser, &dwParam1, &dwParam2);\n\n    switch (thunk->flags & CALLBACK_TYPEMASK) {\n    case CALLBACK_NULL:\n        TRACE(\"Null !\\n\");\n        break;\n    case CALLBACK_WINDOW:\n        TRACE(\"Window(%04X) handle=%p!\\n\", thunk->callback, hDev);\n        PostMessageA(HWND_32(thunk->callback), wMsg, (WPARAM)hDev, dwParam1);\n        break;\n    case CALLBACK_TASK: /* aka CALLBACK_THREAD */\n        TRACE(\"Task(%04x) !\\n\", thunk->callback);\n        PostThreadMessageA(thunk->callback, wMsg, (WPARAM)hDev, dwParam1);\n        break;\n    case CALLBACK_FUNCTION:\n        /* 16 bit func, call it */\n        TRACE(\"Function (16 bit) %x!\\n\", thunk->callback);\n\n        args[7] = HDRVR_16(hDev);\n        args[6] = wMsg;\n        args[5] = HIWORD(dwUser);\n        args[4] = LOWORD(dwUser);\n        args[3] = HIWORD(dwParam1);\n        args[2] = LOWORD(dwParam1);\n        args[1] = HIWORD(dwParam2);\n        args[0] = LOWORD(dwParam2);\n\n        vm_inject((DWORD)thunk->callback, WCB16_PASCAL, sizeof(args), args, NULL);\n        break;\n    case CALLBACK_EVENT:\n        TRACE(\"Event(%08x) !\\n\", thunk->callback);\n        SetEvent((HANDLE)thunk->callback);\n        break;\n    default:\n        WARN(\"Unknown callback type %x\\n\", thunk->flags & CALLBACK_TYPEMASK);\n        return FALSE;\n    }\n    TRACE(\"Done\\n\");\n    return TRUE;\n}\n\n/******************************************************************\n *\t\tMMSYSTDRV_AddThunk\n *\n */\nstruct mmsystdrv_thunk*       MMSYSTDRV_AddThunk(DWORD callback, DWORD flags, enum MMSYSTEM_DriverType kind)\n{\n    struct mmsystdrv_thunk* thunk;\n\n    EnterCriticalSection(&mmdrv_cs);\n    if (!MMSYSTDRV_Thunks)\n    {\n        MMSYSTDRV_Thunks = VirtualAlloc(NULL, MMSYSTDRV_MAX_THUNKS * sizeof(*MMSYSTDRV_Thunks),\n                                        MEM_COMMIT, PAGE_EXECUTE_READWRITE);\n        if (!MMSYSTDRV_Thunks)\n        {\n            LeaveCriticalSection(&mmdrv_cs);\n            return NULL;\n        }\n        for (thunk = MMSYSTDRV_Thunks; thunk < &MMSYSTDRV_Thunks[MMSYSTDRV_MAX_THUNKS]; thunk++)\n        {\n            thunk->popl_eax     = 0x58;   /* popl  %eax */\n            thunk->pushl_this   = 0x68;   /* pushl this */\n            thunk->this         = thunk;\n            thunk->pushl_eax    = 0x50;   /* pushl %eax */\n            thunk->jmp          = 0xe9;   /* jmp MMDRV_Callback3216 */\n            thunk->callback3216 = (char *)MMSYSTDRV_Callback3216 - (char *)(&thunk->callback3216 + 1);\n            thunk->callback     = 0;\n            thunk->flags        = CALLBACK_NULL;\n            thunk->hMmdrv       = NULL;\n            thunk->kind         = MMSYSTDRV_MAX;\n        }\n    }\n    for (thunk = MMSYSTDRV_Thunks; thunk < &MMSYSTDRV_Thunks[MMSYSTDRV_MAX_THUNKS]; thunk++)\n    {\n        if (thunk->callback == 0 && thunk->hMmdrv == NULL)\n        {\n            thunk->callback = callback;\n            thunk->flags = flags;\n            thunk->hMmdrv = NULL;\n            thunk->kind = kind;\n            LeaveCriticalSection(&mmdrv_cs);\n            return thunk;\n        }\n    }\n    LeaveCriticalSection(&mmdrv_cs);\n    FIXME(\"Out of mmdrv-thunks. Bump MMDRV_MAX_THUNKS\\n\");\n    return NULL;\n}\n\n/******************************************************************\n *\t\tMMSYSTDRV_FindHandle\n *\n * Must be called with lock set\n */\nstatic void*    MMSYSTDRV_FindHandle(void* h)\n{\n    struct mmsystdrv_thunk* thunk;\n    if (!h) return NULL;\n\n    for (thunk = MMSYSTDRV_Thunks; thunk < &MMSYSTDRV_Thunks[MMSYSTDRV_MAX_THUNKS]; thunk++)\n    {\n        if (thunk->hMmdrv == h)\n        {\n            if (thunk->kind >= MMSYSTDRV_MAX) FIXME(\"Kind isn't properly initialized %x\\n\", thunk->kind);\n            return thunk;\n        }\n    }\n    return NULL;\n}\n\n/******************************************************************\n *\t\tMMSYSTDRV_SetHandle\n *\n */\nvoid    MMSYSTDRV_SetHandle(struct mmsystdrv_thunk* thunk, void* h)\n{\n    if (MMSYSTDRV_FindHandle(h)) FIXME(\"Already has a thunk for this handle %p!!!\\n\", h);\n    thunk->hMmdrv = h;\n}\n\n/******************************************************************\n *\t\tMMSYSTDRV_DeleteThunk\n */\nvoid    MMSYSTDRV_DeleteThunk(struct mmsystdrv_thunk* thunk)\n{\n    thunk->callback = 0;\n    thunk->flags = CALLBACK_NULL;\n    thunk->hMmdrv = NULL;\n    thunk->kind = MMSYSTDRV_MAX;\n}\n\n/******************************************************************\n *\t\tMMSYSTDRV_CloseHandle\n */\nvoid    MMSYSTDRV_CloseHandle(void* h)\n{\n    struct mmsystdrv_thunk* thunk;\n\n    EnterCriticalSection(&mmdrv_cs);\n    if ((thunk = MMSYSTDRV_FindHandle(h)))\n    {\n        MMSYSTDRV_DeleteThunk(thunk);\n    }\n    LeaveCriticalSection(&mmdrv_cs);\n}\n\n/******************************************************************\n *\t\tMMSYSTDRV_Message\n */\nDWORD   MMSYSTDRV_Message(void* h, UINT msg, DWORD_PTR param1, DWORD_PTR param2)\n{\n    struct mmsystdrv_thunk*     thunk = MMSYSTDRV_FindHandle(h);\n    struct MMSYSTDRV_Type*      drvtype;\n    MMSYSTEM_MapType            map;\n    DWORD                       ret;\n    DWORD                       count;\n\n    if (!thunk) return MMSYSERR_INVALHANDLE;\n    drvtype = &MMSYSTEM_DriversType[thunk->kind];\n\n    map = drvtype->mapmsg16to32W(msg, &param1, &param2);\n    switch (map) {\n    case MMSYSTEM_MAP_NOMEM:\n        ret = MMSYSERR_NOMEM;\n        break;\n    case MMSYSTEM_MAP_MSGERROR:\n        FIXME(\"NIY: no conversion yet 16->32 kind=%u msg=%u\\n\", thunk->kind, msg);\n        ret = MMSYSERR_ERROR;\n        break;\n    case MMSYSTEM_MAP_OK:\n    case MMSYSTEM_MAP_OKMEM:\n        TRACE(\"Calling message(msg=%u p1=0x%08lx p2=0x%08lx)\\n\",\n              msg, param1, param2);\n        ReleaseThunkLock(&count);\n        switch (thunk->kind)\n        {\n        case MMSYSTDRV_MIXER:   ret = mixerMessage  (h, msg, param1, param2); break;\n        case MMSYSTDRV_MIDIIN:\n            switch (msg)\n            {\n            case MIDM_ADDBUFFER: ret = midiInAddBuffer(h, (LPMIDIHDR)param1, param2); break;\n            case MIDM_PREPARE:   ret = midiInPrepareHeader(h, (LPMIDIHDR)param1, param2); break;\n            case MIDM_UNPREPARE: ret = midiInUnprepareHeader(h, (LPMIDIHDR)param1, param2); break;\n            default:             ret = midiInMessage(h, msg, param1, param2); break;\n            }\n            break;\n        case MMSYSTDRV_MIDIOUT:\n            switch (msg)\n            {\n            case MODM_PREPARE:   ret = midiOutPrepareHeader(h, (LPMIDIHDR)param1, param2); break;\n            case MODM_UNPREPARE: ret = midiOutUnprepareHeader(h, (LPMIDIHDR)param1, param2); break;\n            case MODM_LONGDATA:  ret = midiOutLongMsg(h, (LPMIDIHDR)param1, param2); break;\n            default:             ret = midiOutMessage(h, msg, param1, param2); break;\n            }\n            break;\n        case MMSYSTDRV_WAVEIN:\n            switch (msg)\n            {\n            case WIDM_ADDBUFFER: ret = waveInAddBuffer(h, (LPWAVEHDR)param1, param2); break;\n            case WIDM_PREPARE:   ret = waveInPrepareHeader(h, (LPWAVEHDR)param1, param2); break;\n            case WIDM_UNPREPARE: ret = waveInUnprepareHeader(h, (LPWAVEHDR)param1, param2); break;\n            default:             ret = waveInMessage(h, msg, param1, param2); break;\n            }\n            break;\n        case MMSYSTDRV_WAVEOUT:\n            switch (msg)\n            {\n            case WODM_PREPARE:   ret = waveOutPrepareHeader(h, (LPWAVEHDR)param1, param2); break;\n            case WODM_UNPREPARE: ret = waveOutUnprepareHeader(h, (LPWAVEHDR)param1, param2); break;\n            case WODM_WRITE:     ret = waveOutWrite(h, (LPWAVEHDR)param1, param2); break;\n            default:             ret = waveOutMessage(h, msg, param1, param2); break;\n            }\n            break;\n        default: ret = MMSYSERR_INVALHANDLE; break; /* should never be reached */\n        }\n        RestoreThunkLock(count);\n        if (map == MMSYSTEM_MAP_OKMEM)\n            drvtype->unmapmsg16to32W(msg, &param1, &param2, ret);\n        break;\n    default:\n        FIXME(\"NIY\\n\");\n        ret = MMSYSERR_NOTSUPPORTED;\n        break;\n    }\n    return ret;\n}\n"
  },
  {
    "path": "mmsystem/mmio16.c",
    "content": "/*\n * MMSYSTEM mmio* functions\n *\n * Copyright 1993               Martin Ayotte\n *           1998-2003,2009     Eric Pouech\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n#include <string.h>\n\n#define NONAMELESSUNION\n#ifdef WINE_NO_UNICODE_MACROS\n# define WINELIB_NAME_AW(func) \\\n    func##_must_be_suffixed_with_W_or_A_in_this_context \\\n    func##_must_be_suffixed_with_W_or_A_in_this_context\n#else  /* WINE_NO_UNICODE_MACROS */\n# ifdef UNICODE\n#  define WINELIB_NAME_AW(func) func##W\n# else\n#  define WINELIB_NAME_AW(func) func##A\n# endif\n#endif  /* WINE_NO_UNICODE_MACROS */\n#ifdef WINE_NO_UNICODE_MACROS\n# define DECL_WINELIB_TYPE_AW(type)  /* nothing */\n#else\n# define DECL_WINELIB_TYPE_AW(type)  typedef WINELIB_NAME_AW(type) type;\n#endif\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"mmsystem.h\"\n#include \"winternl.h\"\n#include \"wownt32.h\"\n#include \"winnls.h\"\n\n#include \"wine/winuser16.h\"\n#include \"winemm16.h\"\n\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(mmsys);\n\n/* ###################################################\n * #                     MMIO                        #\n * ###################################################\n */\n#include <pshpack1.h>\n#define MMIO_MAX_THUNKS      64\n#define SEGOFF_SHIFT(a) (((DWORD)(a) & 0xffff) | (((DWORD)(a) << 3) & 0xfff80000))\n#define SEGOFF_UNSHIFT(a) (((DWORD)(a) & 0xffff) | (((DWORD)(a) >> 3) & 0xffff0000))\n\nstatic struct mmio_thunk\n{\n    BYTE        popl_eax;       /* popl  %eax (return address) */\n    BYTE        pushl_func;     /* pushl $this */\n    struct mmio_thunk *this;\n    BYTE        pushl_eax;      /* pushl %eax */\n    BYTE        jmp;            /* ljmp MMIO_Callback1632 */\n    DWORD       callback;\n    LPMMIOPROC16 pfn16;\n    HMMIO       hMmio;          /* Handle to 32bit mmio object */\n    SEGPTR      segbuffer;      /* actual segmented ptr to buffer */\n    HGLOBAL16   allocbuf;       /* MMIO_ALLOCBUF */\n} *MMIO_Thunks;\n\n#include <poppack.h>\n\nstatic CRITICAL_SECTION mmio_cs;\nstatic CRITICAL_SECTION_DEBUG mmio_critsect_debug =\n{\n    0, 0, &mmio_cs,\n    { &mmio_critsect_debug.ProcessLocksList, &mmio_critsect_debug.ProcessLocksList },\n      0, 0, { (DWORD_PTR)(__FILE__ \": mmsystem_mmio_cs\") }\n};\nstatic CRITICAL_SECTION mmio_cs = { &mmio_critsect_debug, -1, 0, 0, 0, 0 };\n\n/****************************************************************\n *       \t\tMMIO_Map32To16\t\t\t[INTERNAL]\n */\nstatic LRESULT\tMMIO_Map32To16(struct mmio_thunk *thunk, DWORD wMsg, LPARAM* lp1, LPARAM* lp2, DWORD cch)\n{\n    switch (wMsg) {\n    case MMIOM_CLOSE:\n    case MMIOM_SEEK:\n\t/* nothing to do */\n\tbreak;\n    case MMIOM_OPEN:\n        *lp1 = MapLS( (void *)*lp1 );\n\tbreak;\n    case MMIOM_READ:\n    case MMIOM_WRITE:\n    case MMIOM_WRITEFLUSH:\n        if (*lp2 > cch) {\n            int size = *lp2;\n            int count = (size + 0xffff) / 0x10000;\n            WORD sel = AllocSelectorArray16(count);\n            for (int i = 0; i < count; i++) {\n                SetSelectorBase(sel + (i << __AHSHIFT), (DWORD)*lp1 + i * 0x10000);\n                SetSelectorLimit16(sel + (i << __AHSHIFT), size - 1);\n                size -= 0x10000;\n            }\n            *lp1 = sel << 16;\n            break;\n        } else if (thunk->segbuffer) {\n            int offset = *lp1 - (INT_PTR)MapSL(thunk->segbuffer);\n            if ((offset <= 0xffff) && (offset <= GlobalSize16(SELECTOROF(thunk->segbuffer))))\n            {\n                *lp1 = thunk->segbuffer + offset;\n                break;\n            }\n        }\n        *lp1 = MapLS( (void *)*lp1 );\n\tbreak;\n    case MMIOM_RENAME:\n        *lp1 = MapLS( (void *)*lp1 );\n        *lp2 = MapLS( (void *)*lp2 );\n        break;\n    default:\n        if (wMsg < MMIOM_USER)\n            TRACE(\"Not a mappable message (%d)\\n\", wMsg);\n    }\n    return MMSYSERR_NOERROR;\n}\n\n/****************************************************************\n *       \tMMIO_UnMap32To16 \t\t\t[INTERNAL]\n */\nstatic LRESULT\tMMIO_UnMap32To16(struct mmio_thunk *thunk, DWORD wMsg, LPARAM lParam1, LPARAM lParam2,\n\t\t\t\t LPARAM lp1, LPARAM lp2, DWORD cch)\n{\n    switch (wMsg) {\n    case MMIOM_CLOSE:\n    case MMIOM_SEEK:\n\t/* nothing to do */\n\tbreak;\n    case MMIOM_OPEN:\n        UnMapLS( lp1 );\n\tbreak;\n    case MMIOM_READ:\n    case MMIOM_WRITE:\n    case MMIOM_WRITEFLUSH:\n        if (lp2 > cch) {\n            int count = (lp2 + 0xffff) / 0x10000;\n            WORD sel = SELECTOROF(lp1);\n            for (int i = 0; i < count; i++) {\n                FreeSelector16(sel + (i << __AHSHIFT));\n            }\n        } else if (SELECTOROF(thunk->segbuffer) != SELECTOROF(lp1))\n            UnMapLS( lp1 );\n\tbreak;\n    case MMIOM_RENAME:\n        UnMapLS( lp1 );\n        UnMapLS( lp2 );\n\tbreak;\n    default:\n        if (wMsg < MMIOM_USER)\n            TRACE(\"Not a mappable message (%d)\\n\", wMsg);\n    }\n    return MMSYSERR_NOERROR;\n}\n\n/******************************************************************\n *\t\tMMIO_HasThunk\n *\n */\nstatic struct mmio_thunk*    MMIO_HasThunk(HMMIO hmmio)\n{\n    struct mmio_thunk* thunk;\n\n    if (!MMIO_Thunks) return NULL;\n    for (thunk = MMIO_Thunks; thunk < &MMIO_Thunks[MMIO_MAX_THUNKS]; thunk++)\n    {\n        if (thunk->hMmio == hmmio) return thunk;\n    }\n    return NULL;\n}\n\n/******************************************************************\n *\t\tMMIO_Callback3216\n *\n *\n */\nstatic LRESULT CALLBACK MMIO_Callback3216(struct mmio_thunk *thunk, LPMMIOINFO lpmmioinfo, UINT uMessage,\n                                 LPARAM lParam1, LPARAM lParam2)\n{\n    DWORD \t\tresult;\n    MMIOINFO16          mmioInfo16;\n    SEGPTR\t\tsegmmioInfo16;\n    LPARAM\t\tlp1 = lParam1, lp2 = lParam2;\n    WORD                args[7];\n    SEGPTR              cb16 = thunk->pfn16;\n\n    if (!cb16) return MMSYSERR_INVALPARAM;\n\n    if (thunk->hMmio != lpmmioinfo->hmmio)\n    {\n        struct mmio_thunk *realfile = MMIO_HasThunk(lpmmioinfo->hmmio);\n        if (realfile)\n            thunk = realfile;\n    }\n\n    memset(&mmioInfo16, 0, sizeof(MMIOINFO16));\n    mmioInfo16.dwFlags = lpmmioinfo->dwFlags;\n    mmioInfo16.lDiskOffset = lpmmioinfo->lDiskOffset;\n    mmioInfo16.adwInfo[0]  = lpmmioinfo->adwInfo[0];\n    mmioInfo16.adwInfo[1]  = lpmmioinfo->adwInfo[1];\n    mmioInfo16.adwInfo[2]  = lpmmioinfo->adwInfo[2];\n    /* map (lParam1, lParam2) into (lp1, lp2) 32=>16 */\n    if ((result = MMIO_Map32To16(thunk, uMessage, &lp1, &lp2, lpmmioinfo->cchBuffer)) != MMSYSERR_NOERROR)\n        return result;\n\n    segmmioInfo16 = MapLS(&mmioInfo16);\n    args[6] = HIWORD(segmmioInfo16);\n    args[5] = LOWORD(segmmioInfo16);\n    args[4] = uMessage;\n    args[3] = HIWORD(lp1);\n    args[2] = LOWORD(lp1);\n    args[1] = HIWORD(lp2);\n    args[0] = LOWORD(lp2);\n    WOWCallback16Ex( cb16, WCB16_PASCAL, sizeof(args), args, &result );\n    UnMapLS(segmmioInfo16);\n    MMIO_UnMap32To16(thunk, uMessage, lParam1, lParam2, lp1, lp2, lpmmioinfo->cchBuffer);\n\n    lpmmioinfo->lDiskOffset = mmioInfo16.lDiskOffset;\n    lpmmioinfo->adwInfo[0]  = mmioInfo16.adwInfo[0];\n    lpmmioinfo->adwInfo[1]  = mmioInfo16.adwInfo[1];\n    lpmmioinfo->adwInfo[2]  = mmioInfo16.adwInfo[2];\n\n    return result;\n}\n\n/******************************************************************\n *\t\tMMIO_AddThunk\n *\n */\nstatic struct mmio_thunk*       MMIO_AddThunk(LPMMIOPROC16 pfn16, HPSTR segbuf)\n{\n    struct mmio_thunk* thunk;\n\n    if (!MMIO_Thunks)\n    {\n        MMIO_Thunks = VirtualAlloc(NULL, MMIO_MAX_THUNKS * sizeof(*MMIO_Thunks), MEM_COMMIT,\n                                   PAGE_EXECUTE_READWRITE);\n        if (!MMIO_Thunks) return NULL;\n        for (thunk = MMIO_Thunks; thunk < &MMIO_Thunks[MMIO_MAX_THUNKS]; thunk++)\n        {\n            thunk->popl_eax     = 0x58;   /* popl  %eax */\n            thunk->pushl_func   = 0x68;   /* pushl $this */\n            thunk->this         = thunk;\n            thunk->pushl_eax    = 0x50;   /* pushl %eax */\n            thunk->jmp          = 0xe9;   /* jmp MMIO_Callback3216 */\n            thunk->callback     = (char *)MMIO_Callback3216 - (char *)(&thunk->callback + 1);\n            thunk->pfn16        = 0;\n            thunk->hMmio        = NULL;\n            thunk->segbuffer    = 0;\n            thunk->allocbuf     = NULL;\n        }\n    }\n    for (thunk = MMIO_Thunks; thunk < &MMIO_Thunks[MMIO_MAX_THUNKS]; thunk++)\n    {\n        if (thunk->pfn16 == 0 && thunk->hMmio == NULL)\n        {\n            thunk->pfn16 = pfn16;\n            thunk->hMmio = NULL;\n            thunk->segbuffer = (SEGPTR)segbuf;\n            return thunk;\n        }\n    }\n    FIXME(\"Out of mmio-thunks. Bump MMIO_MAX_THUNKS\\n\");\n    return NULL;\n}\n\n/******************************************************************\n *             MMIO_SetSegmentedBuffer\n *\n */\nstatic void     MMIO_SetSegmentedBuffer(struct mmio_thunk* thunk, SEGPTR ptr, BOOL release)\n{\n    if (release)\n    {\n        if (thunk->allocbuf)\n        {\n            GlobalFree16(thunk->allocbuf);\n        }\n        else\n        {\n            UnMapLS(thunk->segbuffer);\n        }\n    }\n    thunk->segbuffer = ptr;\n}\n\n/**************************************************************************\n * \t\t\t\tmmioOpen       \t\t[MMSYSTEM.1210]\n */\nHMMIO16 WINAPI mmioOpen16(LPSTR szFileName, MMIOINFO16* lpmmioinfo16,\n\t\t\t  DWORD dwOpenFlags)\n{\n    HMMIO \tret;\n    struct mmio_thunk*      thunk = NULL;\n\n    if (lpmmioinfo16) {\n\tMMIOINFO\t        mmioinfo;\n\n\tmemset(&mmioinfo, 0, sizeof(mmioinfo));\n\n        EnterCriticalSection(&mmio_cs);\n        if (!(thunk = MMIO_AddThunk(lpmmioinfo16->pIOProc, lpmmioinfo16->pchBuffer)))\n        {\n            LeaveCriticalSection(&mmio_cs);\n            return 0;\n        }\n\n\tmmioinfo.dwFlags     = lpmmioinfo16->dwFlags;\n\tmmioinfo.fccIOProc   = lpmmioinfo16->fccIOProc;\n\tmmioinfo.pIOProc     = lpmmioinfo16->pIOProc ? (LPMMIOPROC)thunk : 0;\n\tmmioinfo.cchBuffer   = lpmmioinfo16->cchBuffer;\n\tmmioinfo.pchBuffer   = MapSL((DWORD)lpmmioinfo16->pchBuffer);\n        mmioinfo.adwInfo[0]  = lpmmioinfo16->adwInfo[0];\n        /* if we don't have a file name, it's likely a passed open file descriptor */\n        if (!szFileName && (mmioinfo.fccIOProc != FOURCC_MEM))\n            mmioinfo.adwInfo[0] = (DWORD)DosFileHandleToWin32Handle(mmioinfo.adwInfo[0]);\n\tmmioinfo.adwInfo[1]  = lpmmioinfo16->adwInfo[1];\n\tmmioinfo.adwInfo[2]  = lpmmioinfo16->adwInfo[2];\n\n\tret = mmioOpenA(szFileName, &mmioinfo, dwOpenFlags & ~MMIO_ALLOCBUF);\n        if (!ret || (dwOpenFlags & (MMIO_PARSE|MMIO_EXIST)))\n        {\n            thunk->pfn16 = NULL;\n            thunk->hMmio = NULL;\n        }\n        else thunk->hMmio = ret;\n        if (ret && (dwOpenFlags & MMIO_ALLOCBUF) && !lpmmioinfo16->pchBuffer)\n        {\n            if (lpmmioinfo16->pchBuffer) FIXME(\"ooch\\n\");\n            /* FIXME: check whether mmioOpen should set pchBuffer */\n            HGLOBAL hg = GlobalAlloc16(0, lpmmioinfo16->cchBuffer);\n            mmioSetBuffer(ret, GlobalLock16(hg), lpmmioinfo16->cchBuffer, 0);\n            /* OFFSETOF(segbuffer) must be 0x0000 */\n            thunk->segbuffer = WOWGlobalLock16(hg);\n            thunk->allocbuf = hg;\n        }\n        LeaveCriticalSection(&mmio_cs);\n\n\tlpmmioinfo16->wErrorRet = mmioinfo.wErrorRet;\n        lpmmioinfo16->hmmio     = HMMIO_16(mmioinfo.hmmio);\n    } else {\n        EnterCriticalSection(&mmio_cs);\n        if (!(thunk = MMIO_AddThunk(NULL, 0)))\n        {\n            LeaveCriticalSection(&mmio_cs);\n            return 0;\n        }\n        ret = mmioOpenA(szFileName, NULL, dwOpenFlags & ~MMIO_ALLOCBUF);\n        if (!ret || (dwOpenFlags & (MMIO_PARSE|MMIO_EXIST)))\n            thunk->hMmio = NULL;\n        else thunk->hMmio = ret;\n        if (ret && (dwOpenFlags & MMIO_ALLOCBUF))\n        {\n             HGLOBAL hg = GlobalAlloc16(0, MMIO_DEFAULTBUFFER);\n             mmioSetBuffer(ret, GlobalLock16(hg), MMIO_DEFAULTBUFFER, 0);\n             thunk->segbuffer = WOWGlobalLock16(hg);\n             thunk->allocbuf = hg;\n        }\n        else\n        {\n             thunk->segbuffer = 0;\n             thunk->allocbuf = NULL;\n        }\n        LeaveCriticalSection(&mmio_cs);\n    }\n    return HMMIO_16(ret);\n}\n\n/**************************************************************************\n * \t\t\t\tmmioClose      \t\t[MMSYSTEM.1211]\n */\nMMRESULT16 WINAPI mmioClose16(HMMIO16 hmmio, UINT16 uFlags)\n{\n    MMRESULT ret;\n    HMMIO hmmio32 = HMMIO_32(hmmio);\n    MMIOINFO mmioinfo = {0};\n\n    if (!(uFlags & MMIO_FHOPEN))\n        mmioGetInfo(hmmio32, &mmioinfo, 0);\n\n    EnterCriticalSection(&mmio_cs);\n    ret = mmioClose(hmmio32, uFlags);\n    if (ret == MMSYSERR_NOERROR)\n    {\n        struct mmio_thunk* thunk;\n\n        if (mmioinfo.fccIOProc == FOURCC_DOS)\n            DeleteDosFileHandle(mmioinfo.adwInfo[0]);\n\n        if ((thunk = MMIO_HasThunk(hmmio32)))\n        {\n            MMIO_SetSegmentedBuffer(thunk, 0, TRUE);\n            thunk->pfn16 = NULL;\n            thunk->hMmio = NULL;\n        }\n    }\n    LeaveCriticalSection(&mmio_cs);\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tmmioRead\t       \t[MMSYSTEM.1212]\n */\nLONG WINAPI mmioRead16(HMMIO16 hmmio, HPSTR pch, LONG cch)\n{\n    return mmioRead(HMMIO_32(hmmio), pch, cch);\n}\n\n/**************************************************************************\n * \t\t\t\tmmioWrite      \t\t[MMSYSTEM.1213]\n */\nLONG WINAPI mmioWrite16(HMMIO16 hmmio, HPCSTR pch, LONG cch)\n{\n    return mmioWrite(HMMIO_32(hmmio),pch,cch);\n}\n\n/**************************************************************************\n * \t\t\t\tmmioSeek       \t\t[MMSYSTEM.1214]\n */\nLONG WINAPI mmioSeek16(HMMIO16 hmmio, LONG lOffset, INT16 iOrigin)\n{\n    return mmioSeek(HMMIO_32(hmmio), lOffset, iOrigin);\n}\n\n/**************************************************************************\n * \t\t\t\tmmioGetInfo\t       \t[MMSYSTEM.1215]\n */\nMMRESULT16 WINAPI mmioGetInfo16(HMMIO16 hmmio, MMIOINFO16* lpmmioinfo, UINT16 uFlags)\n{\n    MMIOINFO            mmioinfo;\n    MMRESULT            ret;\n    struct mmio_thunk*  thunk;\n\n    TRACE(\"(0x%04x,%p,0x%08x)\\n\", hmmio, lpmmioinfo, uFlags);\n\n    EnterCriticalSection(&mmio_cs);\n    if ((thunk = MMIO_HasThunk(HMMIO_32(hmmio))) == NULL)\n    {\n        LeaveCriticalSection(&mmio_cs);\n\treturn MMSYSERR_INVALHANDLE;\n    }\n    if (!thunk->segbuffer)\n        FIXME(\"NULL segbuffer\\n\");\n\n    ret = mmioGetInfo(HMMIO_32(hmmio), &mmioinfo, uFlags);\n    if (ret != MMSYSERR_NOERROR)\n    {\n        LeaveCriticalSection(&mmio_cs);\n        return ret;\n    }\n\n    if (thunk->allocbuf)\n    {\n        mmioinfo.dwFlags |= MMIO_ALLOCBUF;\n    }\n    lpmmioinfo->dwFlags     = mmioinfo.dwFlags;\n    lpmmioinfo->fccIOProc   = mmioinfo.fccIOProc;\n    lpmmioinfo->pIOProc     = thunk->pfn16;\n    lpmmioinfo->wErrorRet   = mmioinfo.wErrorRet;\n    lpmmioinfo->hTask       = HTASK_16(mmioinfo.htask);\n    lpmmioinfo->cchBuffer   = mmioinfo.cchBuffer;\n    lpmmioinfo->pchBuffer   = (void*)thunk->segbuffer;\n    lpmmioinfo->pchNext     = (void*)(thunk->segbuffer + SEGOFF_SHIFT(mmioinfo.pchNext - mmioinfo.pchBuffer));\n    lpmmioinfo->pchEndRead  = (void*)(thunk->segbuffer + SEGOFF_SHIFT(mmioinfo.pchEndRead - mmioinfo.pchBuffer));\n    lpmmioinfo->pchEndWrite = (void*)(thunk->segbuffer + SEGOFF_SHIFT(mmioinfo.pchEndWrite - mmioinfo.pchBuffer));\n    lpmmioinfo->lBufOffset  = mmioinfo.lBufOffset;\n    lpmmioinfo->lDiskOffset = mmioinfo.lDiskOffset;\n    lpmmioinfo->adwInfo[0]  = mmioinfo.fccIOProc == FOURCC_DOS ? Win32HandleToDosFileHandle(mmioinfo.adwInfo[0]) : mmioinfo.adwInfo[0];\n    lpmmioinfo->adwInfo[1]  = mmioinfo.adwInfo[1];\n    lpmmioinfo->adwInfo[2]  = mmioinfo.adwInfo[2];\n    lpmmioinfo->dwReserved1 = 0;\n    lpmmioinfo->dwReserved2 = 0;\n    lpmmioinfo->hmmio = HMMIO_16(mmioinfo.hmmio);\n    LeaveCriticalSection(&mmio_cs);\n\n    return MMSYSERR_NOERROR;\n}\n\n/**************************************************************************\n * \t\t\t\tmmioSetInfo  \t\t[MMSYSTEM.1216]\n */\nMMRESULT16 WINAPI mmioSetInfo16(HMMIO16 hmmio, const MMIOINFO16* lpmmioinfo, UINT16 uFlags)\n{\n    MMIOINFO            mmioinfo;\n    MMRESULT            ret;\n\n    TRACE(\"(0x%04x,%p,0x%08x)\\n\",hmmio,lpmmioinfo,uFlags);\n\n    ret = mmioGetInfo(HMMIO_32(hmmio), &mmioinfo, 0);\n    if (ret != MMSYSERR_NOERROR) return ret;\n\n    /* check if seg and lin buffers are the same */\n    if (mmioinfo.cchBuffer != lpmmioinfo->cchBuffer  ||\n        mmioinfo.pchBuffer != MapSL((DWORD)lpmmioinfo->pchBuffer))\n\treturn MMSYSERR_INVALPARAM;\n\n    DWORD pchBuffer = SEGOFF_UNSHIFT(lpmmioinfo->pchBuffer); \n    DWORD pchNext = SEGOFF_UNSHIFT(lpmmioinfo->pchNext);\n    DWORD pchEndRead = SEGOFF_UNSHIFT(lpmmioinfo->pchEndRead);\n    DWORD pchEndWrite = SEGOFF_UNSHIFT(lpmmioinfo->pchEndWrite);\n\n    /* check pointers coherence */\n    if (pchNext < pchBuffer || pchNext > pchBuffer + lpmmioinfo->cchBuffer ||\n    pchEndRead < pchBuffer || pchEndRead > pchBuffer + lpmmioinfo->cchBuffer ||\n    pchEndWrite < pchBuffer || pchEndWrite > pchBuffer + lpmmioinfo->cchBuffer)\n        return MMSYSERR_INVALPARAM;\n\n    mmioinfo.dwFlags     = lpmmioinfo->dwFlags & ~MMIO_ALLOCBUF;\n    mmioinfo.pchNext     = mmioinfo.pchBuffer + (pchNext - pchBuffer);\n    mmioinfo.pchEndRead  = mmioinfo.pchBuffer + (pchEndRead - pchBuffer);\n    mmioinfo.pchEndWrite = mmioinfo.pchBuffer + (pchEndWrite - pchBuffer);\n    mmioinfo.lBufOffset  = lpmmioinfo->lBufOffset;\n    mmioinfo.lDiskOffset = lpmmioinfo->lDiskOffset;\n\n    return mmioSetInfo(HMMIO_32(hmmio), &mmioinfo, uFlags);\n}\n\n/**************************************************************************\n * \t\t\t\tmmioSetBuffer\t\t[MMSYSTEM.1217]\n */\nMMRESULT16 WINAPI mmioSetBuffer16(HMMIO16 hmmio, SEGPTR pchBuffer,\n                                  LONG cchBuffer, UINT16 uFlags)\n{\n    MMRESULT    ret = mmioSetBuffer(HMMIO_32(hmmio), MapSL(pchBuffer),\n                                    cchBuffer, uFlags);\n\n    if (ret == MMSYSERR_NOERROR)\n    {\n        struct mmio_thunk* thunk;\n\n        if ((thunk = MMIO_HasThunk(HMMIO_32(hmmio))) == NULL)\n        {\n            FIXME(\"really ?\\n\");\n            return MMSYSERR_INVALHANDLE;\n        }\n        thunk->allocbuf = NULL;\n        MMIO_SetSegmentedBuffer(thunk, pchBuffer, TRUE);\n    }\n    else\n        UnMapLS(pchBuffer);\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tmmioFlush      \t\t[MMSYSTEM.1218]\n */\nMMRESULT16 WINAPI mmioFlush16(HMMIO16 hmmio, UINT16 uFlags)\n{\n    return mmioFlush(HMMIO_32(hmmio), uFlags);\n}\n\n/***********************************************************************\n * \t\t\t\tmmioAdvance    \t\t[MMSYSTEM.1219]\n */\nMMRESULT16 WINAPI mmioAdvance16(HMMIO16 hmmio, MMIOINFO16* lpmmioinfo, UINT16 uFlags)\n{\n    LRESULT     ret;\n\n    if (lpmmioinfo)\n    {\n        ret = mmioSetInfo16(hmmio, lpmmioinfo, 0);\n        if (ret != MMSYSERR_NOERROR) return ret;\n    }\n    \n    ret = mmioAdvance(HMMIO_32(hmmio), NULL, uFlags);\n    if (ret != MMSYSERR_NOERROR) return ret;\n\n    if (lpmmioinfo)\n    {\n        ret = mmioGetInfo16(hmmio, lpmmioinfo, 0);\n        if (ret != MMSYSERR_NOERROR) return ret;\n    }\n\n    return MMSYSERR_NOERROR;\n}\n\n/**************************************************************************\n * \t\t\t\tmmioStringToFOURCC\t[MMSYSTEM.1220]\n */\nFOURCC WINAPI mmioStringToFOURCC16(LPCSTR sz, UINT16 uFlags)\n{\n    return mmioStringToFOURCCA(sz, uFlags);\n}\n\n/**************************************************************************\n *              mmioInstallIOProc    [MMSYSTEM.1221]\n */\nLPMMIOPROC16 WINAPI mmioInstallIOProc16(FOURCC fccIOProc, LPMMIOPROC16 pIOProc,\n                                        DWORD dwFlags)\n{\n    struct mmio_thunk*  thunk = NULL;\n    LPMMIOPROC pIOProc32;\n\n    EnterCriticalSection(&mmio_cs);\n\n    switch (dwFlags & (MMIO_INSTALLPROC|MMIO_REMOVEPROC|MMIO_FINDPROC)) {\n    case MMIO_INSTALLPROC:\n        if (!(thunk = MMIO_AddThunk(pIOProc, NULL)))\n        {\n            LeaveCriticalSection(&mmio_cs);\n            return NULL;\n        }\n        if (!mmioInstallIOProcA(fccIOProc, (LPMMIOPROC)thunk, dwFlags))\n        {\n            thunk->pfn16 = NULL;\n            pIOProc = NULL;\n        }\n        break;\n    case MMIO_REMOVEPROC:\n        if (MMIO_Thunks)\n        {\n            for (thunk = MMIO_Thunks; thunk < &MMIO_Thunks[MMIO_MAX_THUNKS]; thunk++)\n            {\n                if (thunk->pfn16 == pIOProc && thunk->segbuffer == 0)\n                {\n                    if (mmioInstallIOProcA(fccIOProc, (LPMMIOPROC)thunk, dwFlags))\n                        thunk->pfn16 = NULL;\n                    else\n                        pIOProc = NULL;\n                    break;\n                }\n            }\n        }\n        if (!thunk) pIOProc = NULL;\n        break;\n    case MMIO_FINDPROC:\n        if ((pIOProc32 = mmioInstallIOProcA(fccIOProc, NULL, dwFlags)) && MMIO_Thunks)\n        {\n            for (thunk = MMIO_Thunks; thunk < &MMIO_Thunks[MMIO_MAX_THUNKS]; thunk++)\n            {\n                if ((LPMMIOPROC)thunk == pIOProc32)\n                {\n                    pIOProc = thunk->pfn16;\n                    break;\n                }\n            }\n        }\n        break;\n    default:\n        FIXME(\"Unsupported flags %08x\\n\", dwFlags);\n        pIOProc = NULL;\n    }\n    LeaveCriticalSection(&mmio_cs);\n\n    return pIOProc;\n}\n\n/**************************************************************************\n * \t\t\t\tmmioSendMessage\t[MMSYSTEM.1222]\n */\nLRESULT WINAPI mmioSendMessage16(HMMIO16 hmmio, UINT16 uMessage,\n\t\t\t\t LPARAM lParam1, LPARAM lParam2)\n{\n    struct mmio_thunk*  thunk;\n\n    if ((thunk = MMIO_HasThunk(HMMIO_32(hmmio))))\n    {\n        MMIOINFO        mmioinfo;\n        if (mmioGetInfo(HMMIO_32(hmmio), &mmioinfo, 0) == MMSYSERR_NOERROR)\n        {\n            return MMIO_Callback3216((SEGPTR)thunk->pfn16, &mmioinfo, uMessage, lParam1, lParam2);\n        }\n        return MMSYSERR_INVALHANDLE;\n    }\n    else\n    {\n        /* FIXME: we need to map lParam1 and lParam2 to 32bit entities */\n        return mmioSendMessage(HMMIO_32(hmmio), uMessage, lParam1, lParam2);\n    }\n}\n\n/**************************************************************************\n * \t\t\t\tmmioDescend\t       \t[MMSYSTEM.1223]\n */\nMMRESULT16 WINAPI mmioDescend16(HMMIO16 hmmio, LPMMCKINFO lpck,\n                                const MMCKINFO* lpckParent, UINT16 uFlags)\n{\n    return mmioDescend(HMMIO_32(hmmio), lpck, lpckParent, uFlags);\n}\n\n/**************************************************************************\n * \t\t\t\tmmioAscend     \t\t[MMSYSTEM.1224]\n */\nMMRESULT16 WINAPI mmioAscend16(HMMIO16 hmmio, MMCKINFO* lpck, UINT16 uFlags)\n{\n    return mmioAscend(HMMIO_32(hmmio),lpck,uFlags);\n}\n\n/**************************************************************************\n * \t\t\t\tmmioCreateChunk\t\t[MMSYSTEM.1225]\n */\nMMRESULT16 WINAPI mmioCreateChunk16(HMMIO16 hmmio, MMCKINFO* lpck, UINT16 uFlags)\n{\n    return mmioCreateChunk(HMMIO_32(hmmio), lpck, uFlags);\n}\n\n/**************************************************************************\n * \t\t\t\tmmioRename     \t\t[MMSYSTEM.1226]\n */\nMMRESULT16 WINAPI mmioRename16(LPCSTR szFileName, LPCSTR szNewFileName,\n                               MMIOINFO16* lpmmioinfo, DWORD dwRenameFlags)\n{\n    BOOL        inst = FALSE;\n    MMRESULT    ret;\n    MMIOINFO    mmioinfo;\n\n    if (lpmmioinfo != NULL && lpmmioinfo->pIOProc != NULL &&\n        lpmmioinfo->fccIOProc == 0) {\n        FIXME(\"Can't handle this case yet\\n\");\n        return MMSYSERR_ERROR;\n    }\n\n    /* this is a bit hacky, but it'll work if we get a fourCC code or nothing.\n     * but a non installed ioproc without a fourcc won't do\n     */\n    if (lpmmioinfo && lpmmioinfo->fccIOProc && lpmmioinfo->pIOProc) {\n        mmioInstallIOProc16(lpmmioinfo->fccIOProc, lpmmioinfo->pIOProc,\n                           MMIO_INSTALLPROC);\n        inst = TRUE;\n    }\n    memset(&mmioinfo, 0, sizeof(mmioinfo));\n    if (lpmmioinfo)\n        mmioinfo.fccIOProc = lpmmioinfo->fccIOProc;\n    ret = mmioRenameA(szFileName, szNewFileName, &mmioinfo, dwRenameFlags);\n    if (inst) {\n        mmioInstallIOProc16(lpmmioinfo->fccIOProc, NULL, MMIO_REMOVEPROC);\n    }\n    return ret;\n}\n"
  },
  {
    "path": "mmsystem/mmsystem.c",
    "content": "/* -*- tab-width: 8; c-basic-offset: 4 -*- */\n\n/*\n * MMSYSTEM functions\n *\n * Copyright 1993      Martin Ayotte\n *           1998-2003 Eric Pouech\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n/*\n * Eric POUECH :\n *  \t99/4\tadded mmTask and mmThread functions support\n */\n\n#include <stdarg.h>\n#include <string.h>\n\n#define NONAMELESSUNION\n#undef DUMMYSTRUCTNAME\n#undef DUMMYUNIONNAME\n#ifdef WINE_NO_UNICODE_MACROS\n# define WINELIB_NAME_AW(func) \\\n    func##_must_be_suffixed_with_W_or_A_in_this_context \\\n    func##_must_be_suffixed_with_W_or_A_in_this_context\n#else  /* WINE_NO_UNICODE_MACROS */\n# ifdef UNICODE\n#  define WINELIB_NAME_AW(func) func##W\n# else\n#  define WINELIB_NAME_AW(func) func##A\n# endif\n#endif  /* WINE_NO_UNICODE_MACROS */\n#ifdef WINE_NO_UNICODE_MACROS\n# define DECL_WINELIB_TYPE_AW(type)  /* nothing */\n#else\n# define DECL_WINELIB_TYPE_AW(type)  typedef WINELIB_NAME_AW(type) type;\n#endif\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"mmsystem.h\"\n#include \"winternl.h\"\n#include \"wownt32.h\"\n#include \"winnls.h\"\n\n#include \"wine/list.h\"\n#include \"wine/winuser16.h\"\n#include \"winemm16.h\"\n#include \"mmreg.h\"\n\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(mmsys);\nWINE_DECLARE_DEBUG_CHANNEL(relay);\n\n\nstatic CRITICAL_SECTION_DEBUG mmdrv_critsect_debug =\n{\n    0, 0, &mmdrv_cs,\n    { &mmdrv_critsect_debug.ProcessLocksList, &mmdrv_critsect_debug.ProcessLocksList },\n      0, 0, { (DWORD_PTR)(__FILE__ \": mmsystem_mmdrv_cs\") }\n};\nCRITICAL_SECTION mmdrv_cs = { &mmdrv_critsect_debug, -1, 0, 0, 0, 0 };\n\n/* ###################################################\n * #                  LIBRARY                        #\n * ###################################################\n */\n\n/**************************************************************************\n * \t\t\tDllEntryPoint (MMSYSTEM.4)\n *\n * MMSYSTEM DLL entry point\n *\n */\nBOOL WINAPI MMSYSTEM_LibMain(DWORD fdwReason, HINSTANCE hinstDLL, WORD ds,\n\t\t\t     WORD wHeapSize, DWORD dwReserved1, WORD wReserved2)\n{\n    static int done;\n\n    if (!done++) LoadLibrary16( \"sound.drv\" );\n    return TRUE;\n}\n\n/**************************************************************************\n * \t\t\t\tWEP\t\t\t[MMSYSTEM.1]\n */\nint WINAPI MMSYSTEM_WEP(HINSTANCE16 hInstance, WORD wDataSeg,\n                        WORD cbHeapSize, LPSTR lpCmdLine)\n{\n    TRACE(\"STUB: Unloading MMSystem DLL ... hInst=%04X\\n\", hInstance);\n    return TRUE;\n}\n\n/* ###################################################\n * #                     TIME                        #\n * ###################################################\n */\n\n/******************************************************************\n *\t\tMMSYSTEM_MMTIME32to16\n *\n *\n */\nvoid MMSYSTEM_MMTIME32to16(LPMMTIME16 mmt16, const MMTIME* mmt32)\n{\n    mmt16->wType = mmt32->wType;\n    /* layout of rest is the same for 32/16,\n     * Note: mmt16->u is 2 bytes smaller than mmt32->u, which has padding\n     */\n    memcpy(&(mmt16->u), &(mmt32->u), sizeof(mmt16->u));\n}\n\n/**************************************************************************\n * \t\t\t\ttimeGetSystemTime\t[MMSYSTEM.601]\n */\nMMRESULT16 WINAPI timeGetSystemTime16(LPMMTIME16 lpTime, UINT16 wSize)\n{\n    if (wSize >= sizeof(*lpTime)) {\n\tlpTime->wType = TIME_MS;\n\tlpTime->u.ms = GetTickCount();\n\n\tTRACE(\"=> %u\\n\", lpTime->u.ms);\n    }\n\n    return 0;\n}\n\nstruct timer_entry {\n    struct list         entry;\n    UINT                id;\n    LPTIMECALLBACK16    func16;\n    DWORD               user;\n};\n\nstatic struct list timer_list = LIST_INIT(timer_list);\n\nBOOL WINAPI vm_inject(DWORD vpfn16, DWORD dwFlags,\n        DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode);\nstatic void CALLBACK timeCB3216(UINT id, UINT uMsg, DWORD_PTR user, DWORD_PTR dw1, DWORD_PTR dw2)\n{\n    struct timer_entry* te = (void*)user;\n    WORD                args[8];\n    DWORD               ret;\n\n    args[7] = LOWORD(id);\n    args[6] = LOWORD(uMsg);\n    args[5] = HIWORD(te->user);\n    args[4] = LOWORD(te->user);\n    args[3] = HIWORD(dw1);\n    args[2] = LOWORD(dw2);\n    args[1] = HIWORD(dw2);\n    args[0] = LOWORD(dw2);\n    /* interrupt */\n    TRACE_(relay)(\"interrupt: %04x:%04x,%04x,%04x,%p\\n\", SELECTOROF(te->func16), OFFSETOF(te->func16), id, uMsg, te->user, te->user, dw1, dw2);\n    vm_inject((DWORD)te->func16, WCB16_PASCAL, sizeof(args), args, &ret);\n    TRACE_(relay)(\"return interrupt: %04x:%04x,%04x,%04x,%p\\n\", SELECTOROF(te->func16), OFFSETOF(te->func16), id, uMsg, te->user, te->user, dw1, dw2);\n}\n\n/**************************************************************************\n * \t\t\t\ttimeSetEvent\t\t[MMSYSTEM.602]\n */\nMMRESULT16 WINAPI timeSetEvent16(UINT16 wDelay, UINT16 wResol, LPTIMECALLBACK16 lpFunc,\n\t\t\t\t DWORD dwUser, UINT16 wFlags)\n{\n    MMRESULT16          id;\n    struct timer_entry* te;\n\n    switch (wFlags & (TIME_CALLBACK_EVENT_SET|TIME_CALLBACK_EVENT_PULSE))\n    {\n    case TIME_CALLBACK_EVENT_SET:\n    case TIME_CALLBACK_EVENT_PULSE:\n        id = timeSetEvent(wDelay, wResol, (LPTIMECALLBACK)lpFunc, dwUser, wFlags);\n        break;\n    case TIME_CALLBACK_FUNCTION:\n        te = HeapAlloc(GetProcessHeap(), 0, sizeof(*te));\n        if (!te) return 0;\n        te->func16 = lpFunc;\n        te->user = dwUser;\n        id = te->id = timeSetEvent(wDelay, wResol, timeCB3216, (DWORD_PTR)te, wFlags);\n        if (id)\n        {\n            EnterCriticalSection(&mmdrv_cs);\n            list_add_tail(&timer_list, &te->entry);\n            LeaveCriticalSection(&mmdrv_cs);\n        }\n        else HeapFree(GetProcessHeap(), 0, te);\n        break;\n    default:\n        id = 0;\n        break;\n    }\n    return id;\n}\n\n/**************************************************************************\n * \t\t\t\ttimeKillEvent\t\t[MMSYSTEM.603]\n */\nMMRESULT16 WINAPI timeKillEvent16(UINT16 wID)\n{\n    MMRESULT16  ret = timeKillEvent(wID);\n    struct timer_entry* te;\n\n    if (ret == TIMERR_NOERROR)\n    {\n        EnterCriticalSection(&mmdrv_cs);\n        LIST_FOR_EACH_ENTRY(te, &timer_list, struct timer_entry, entry)\n        {\n            if (wID == te->id)\n            {\n                list_remove(&te->entry);\n                HeapFree(GetProcessHeap(), 0, te);\n                break;\n            }\n        }\n        LeaveCriticalSection(&mmdrv_cs);\n    }\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\ttimeGetDevCaps\t\t[MMSYSTEM.604]\n */\nMMRESULT16 WINAPI timeGetDevCaps16(LPTIMECAPS16 lpCaps, UINT16 wSize)\n{\n    TIMECAPS    caps;\n    MMRESULT    ret;\n    TRACE(\"(%p, %u) !\\n\", lpCaps, wSize);\n\n    if (lpCaps == NULL)\treturn MMSYSERR_INVALPARAM;\n\n    ret = timeGetDevCaps(&caps, sizeof(caps));\n    if (ret == MMSYSERR_NOERROR) {\n\tTIMECAPS16 tc16;\n\ttc16.wPeriodMin = caps.wPeriodMin;\n\ttc16.wPeriodMax = caps.wPeriodMax;\n\tmemcpy(lpCaps, &tc16, min(wSize, sizeof(tc16)));\n    }\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\ttimeBeginPeriod\t[MMSYSTEM.605]\n */\nMMRESULT16 WINAPI timeBeginPeriod16(UINT16 wPeriod)\n{\n    TRACE(\"(%u) !\\n\", wPeriod);\n\n    return timeBeginPeriod(wPeriod);\n}\n\n/**************************************************************************\n * \t\t\t\ttimeEndPeriod\t\t[MMSYSTEM.606]\n */\nMMRESULT16 WINAPI timeEndPeriod16(UINT16 wPeriod)\n{\n    TRACE(\"(%u) !\\n\", wPeriod);\n\n    return timeEndPeriod(wPeriod);\n}\n\n/**************************************************************************\n * \t\t\t\ttimeGetTime    [MMSYSTEM.607]\n */\nDWORD WINAPI timeGetTime16(void)\n{\n    return timeGetTime();\n}\n\n/* ###################################################\n * #                    MISC                         #\n * ###################################################\n */\n\ntypedef UINT(*WINAPI tmmsystemGetVersion)(void);\ntmmsystemGetVersion lpfnmmsystemGetVersion;\ninline UINT WINAPI mmsystemGetVersion(void)\n{\n    if (!lpfnmmsystemGetVersion)\n    {\n        lpfnmmsystemGetVersion = (tmmsystemGetVersion)GetProcAddress(GetModuleHandleA(\"Winmm.dll\"), \"mmsystemGetVersion\");\n    }\n    if (lpfnmmsystemGetVersion)\n    {\n        return lpfnmmsystemGetVersion();\n    }\n    return 0;\n}\n/**************************************************************************\n * \t\t\t\tmmsystemGetVersion\t[MMSYSTEM.5]\n *\n */\nUINT16 WINAPI mmsystemGetVersion16(void)\n{\n    return mmsystemGetVersion();\n}\n\n/**************************************************************************\n * \t\t\t\tDriverCallback\t\t\t[MMSYSTEM.31]\n */\nBOOL16 WINAPI DriverCallback16(DWORD dwCallBack, UINT16 uFlags, HDRVR16 hDev,\n\t\t\t       WORD wMsg, DWORD dwUser, DWORD dwParam1,\n\t\t\t       DWORD dwParam2)\n{\n    return DriverCallback(dwCallBack, uFlags, HDRVR_32(hDev), wMsg, dwUser, dwParam1, dwParam2);\n}\n\n/**************************************************************************\n * \t\t\tOutputDebugStr\t \t[MMSYSTEM.30]\n */\nvoid WINAPI OutputDebugStr16(LPCSTR str)\n{\n    OutputDebugStringA( str );\n}\n\n/* ###################################################\n * #                    MIXER                        #\n * ###################################################\n */\n\n/**************************************************************************\n * \tMixer devices. New to Win95\n */\n\n/**************************************************************************\n * \t\t\t\tmixerGetNumDevs\t\t\t[MMSYSTEM.800]\n */\nUINT16 WINAPI mixerGetNumDevs16(void)\n{\n    return mixerGetNumDevs();\n}\n\n/**************************************************************************\n * \t\t\t\tmixerGetDevCaps\t\t\t[MMSYSTEM.801]\n */\nUINT16 WINAPI mixerGetDevCaps16(UINT16 uDeviceID, LPMIXERCAPS16 lpCaps,\n\t\t\t\tUINT16 uSize)\n{\n    MIXERCAPSA  micA;\n    UINT        ret;\n\n    if (lpCaps == NULL)\treturn MMSYSERR_INVALPARAM;\n\n    ret = mixerGetDevCapsA(uDeviceID, &micA, sizeof(micA));\n    if (ret == MMSYSERR_NOERROR) {\n\tMIXERCAPS16 mic16;\n        mic16.wMid           = micA.wMid;\n        mic16.wPid           = micA.wPid;\n        mic16.vDriverVersion = micA.vDriverVersion;\n        strcpy(mic16.szPname, micA.szPname);\n        mic16.fdwSupport     = micA.fdwSupport;\n        mic16.cDestinations  = micA.cDestinations;\n\tmemcpy(lpCaps, &mic16, min(uSize, sizeof(mic16)));\n    }\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tmixerOpen\t\t\t[MMSYSTEM.802]\n */\nUINT16 WINAPI mixerOpen16(LPHMIXER16 lphmix, UINT16 uDeviceID, DWORD dwCallback,\n\t\t\t  DWORD dwInstance, DWORD fdwOpen)\n{\n    HMIXER\t                hmix;\n    UINT\t                ret;\n    // mixer doesn't support CALLBACK_FUNCTION without which only CALLBACK_WINDOW isn't difficult \n    // wine source says CALLBACK_THREAD and CALLBACK_EVENT weren't supported until win2k\n    if (fdwOpen & CALLBACK_TYPEMASK)\n    {\n        if ((fdwOpen & CALLBACK_TYPEMASK) != CALLBACK_WINDOW)\n        {\n            ERR(\"called with unsupported callback type %x\\n\", fdwOpen & CALLBACK_TYPEMASK);\n            return MMSYSERR_NOTSUPPORTED;\n        }\n        dwCallback = HWND_32(dwCallback);\n    }\n    ret = mixerOpen(&hmix, uDeviceID, dwCallback, dwInstance, fdwOpen);\n    if (ret == MMSYSERR_NOERROR)\n    {\n        if (lphmix) *lphmix = HMIXER_16(hmix);\n    }\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tmixerClose\t\t\t[MMSYSTEM.803]\n */\nUINT16 WINAPI mixerClose16(HMIXER16 hMix)\n{\n    return mixerClose(HMIXER_32(hMix));\n}\n\n/**************************************************************************\n * \t\t\t\tmixerGetID (MMSYSTEM.806)\n */\nUINT16 WINAPI mixerGetID16(HMIXEROBJ16 hmix, LPUINT16 lpid, DWORD fdwID)\n{\n    UINT\txid;\n    UINT\tret = mixerGetID(HMIXEROBJ_32(hmix), &xid, fdwID);\n\n    if (lpid)\n\t*lpid = xid;\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tmixerGetControlDetails\t[MMSYSTEM.808]\n */\nUINT16 WINAPI mixerGetControlDetails16(HMIXEROBJ16 hmix,\n\t\t\t\t       LPMIXERCONTROLDETAILS16 lpmcd,\n\t\t\t\t       DWORD fdwDetails)\n{\n    DWORD\tret = MMSYSERR_NOTENABLED;\n    SEGPTR\tsppaDetails;\n\n    TRACE(\"(%04x, %p, %08x)\\n\", hmix, lpmcd, fdwDetails);\n\n    if (lpmcd == NULL || lpmcd->cbStruct != sizeof(*lpmcd))\n\treturn MMSYSERR_INVALPARAM;\n\n    sppaDetails = (SEGPTR)lpmcd->paDetails;\n    lpmcd->paDetails = MapSL(sppaDetails);\n    ret = mixerGetControlDetailsA(HMIXEROBJ_32(hmix),\n\t\t\t         (LPMIXERCONTROLDETAILS)lpmcd, fdwDetails);\n    lpmcd->paDetails = (LPVOID)sppaDetails;\n\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tmixerGetLineControls\t\t[MMSYSTEM.807]\n */\nUINT16 WINAPI mixerGetLineControls16(HMIXEROBJ16 hmix,\n\t\t\t\t     LPMIXERLINECONTROLS16 lpmlc16,\n\t\t\t\t     DWORD fdwControls)\n{\n    MIXERLINECONTROLSA\tmlcA;\n    DWORD\t\tret;\n    unsigned int\ti;\n    LPMIXERCONTROL16\tlpmc16;\n\n    TRACE(\"(%04x, %p, %08x)\\n\", hmix, lpmlc16, fdwControls);\n\n    if (lpmlc16 == NULL || lpmlc16->cbStruct != sizeof(*lpmlc16) ||\n\tlpmlc16->cbmxctrl != sizeof(MIXERCONTROL16))\n\treturn MMSYSERR_INVALPARAM;\n\n    mlcA.cbStruct = sizeof(mlcA);\n    mlcA.dwLineID = lpmlc16->dwLineID;\n    mlcA.u.dwControlID = lpmlc16->u.dwControlID;\n    mlcA.u.dwControlType = lpmlc16->u.dwControlType;\n    mlcA.cControls = lpmlc16->cControls;\n    mlcA.cbmxctrl = sizeof(MIXERCONTROLA);\n    mlcA.pamxctrl = HeapAlloc(GetProcessHeap(), 0,\n\t\t\t      mlcA.cControls * mlcA.cbmxctrl);\n\n    ret = mixerGetLineControlsA(HMIXEROBJ_32(hmix), &mlcA, fdwControls);\n\n    if (ret == MMSYSERR_NOERROR) {\n\tlpmlc16->dwLineID = mlcA.dwLineID;\n\tlpmlc16->u.dwControlID = mlcA.u.dwControlID;\n\tlpmlc16->u.dwControlType = mlcA.u.dwControlType;\n\tlpmlc16->cControls = mlcA.cControls;\n\n\tlpmc16 = MapSL(lpmlc16->pamxctrl);\n\n\tfor (i = 0; i < mlcA.cControls; i++) {\n\t    lpmc16[i].cbStruct = sizeof(MIXERCONTROL16);\n\t    lpmc16[i].dwControlID = mlcA.pamxctrl[i].dwControlID;\n\t    lpmc16[i].dwControlType = mlcA.pamxctrl[i].dwControlType;\n\t    lpmc16[i].fdwControl = mlcA.pamxctrl[i].fdwControl;\n\t    lpmc16[i].cMultipleItems = mlcA.pamxctrl[i].cMultipleItems;\n\t    strcpy(lpmc16[i].szShortName, mlcA.pamxctrl[i].szShortName);\n\t    strcpy(lpmc16[i].szName, mlcA.pamxctrl[i].szName);\n\t    /* sizeof(lpmc16[i].Bounds) == sizeof(mlcA.pamxctrl[i].Bounds) */\n\t    memcpy(&lpmc16[i].Bounds, &mlcA.pamxctrl[i].Bounds,\n\t\t   sizeof(mlcA.pamxctrl[i].Bounds));\n\t    /* sizeof(lpmc16[i].Metrics) == sizeof(mlcA.pamxctrl[i].Metrics) */\n\t    memcpy(&lpmc16[i].Metrics, &mlcA.pamxctrl[i].Metrics,\n\t\t   sizeof(mlcA.pamxctrl[i].Metrics));\n\t}\n    }\n\n    HeapFree(GetProcessHeap(), 0, mlcA.pamxctrl);\n\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tmixerGetLineInfo\t[MMSYSTEM.805]\n */\nUINT16 WINAPI mixerGetLineInfo16(HMIXEROBJ16 hmix, LPMIXERLINE16 lpmli16,\n\t\t\t\t DWORD fdwInfo)\n{\n    MIXERLINEA\t\tmliA;\n    UINT\t\tret;\n\n    TRACE(\"(%04x, %p, %08x)\\n\", hmix, lpmli16, fdwInfo);\n\n    if (lpmli16 == NULL || lpmli16->cbStruct != sizeof(*lpmli16))\n\treturn MMSYSERR_INVALPARAM;\n\n    mliA.cbStruct = sizeof(mliA);\n    switch (fdwInfo & MIXER_GETLINEINFOF_QUERYMASK) {\n    case MIXER_GETLINEINFOF_COMPONENTTYPE:\n\tmliA.dwComponentType = lpmli16->dwComponentType;\n\tbreak;\n    case MIXER_GETLINEINFOF_DESTINATION:\n\tmliA.dwDestination = lpmli16->dwDestination;\n\tbreak;\n    case MIXER_GETLINEINFOF_LINEID:\n\tmliA.dwLineID = lpmli16->dwLineID;\n\tbreak;\n    case MIXER_GETLINEINFOF_SOURCE:\n\tmliA.dwDestination = lpmli16->dwDestination;\n\tmliA.dwSource = lpmli16->dwSource;\n\tbreak;\n    case MIXER_GETLINEINFOF_TARGETTYPE:\n\tmliA.Target.dwType = lpmli16->Target.dwType;\n\tmliA.Target.wMid = lpmli16->Target.wMid;\n\tmliA.Target.wPid = lpmli16->Target.wPid;\n\tmliA.Target.vDriverVersion = lpmli16->Target.vDriverVersion;\n\tstrcpy(mliA.Target.szPname, lpmli16->Target.szPname);\n\tbreak;\n    default:\n\tFIXME(\"Unsupported fdwControls=0x%08x\\n\", fdwInfo);\n    }\n\n    ret = mixerGetLineInfoA(HMIXEROBJ_32(hmix), &mliA, fdwInfo);\n\n    lpmli16->dwDestination     \t= mliA.dwDestination;\n    lpmli16->dwSource          \t= mliA.dwSource;\n    lpmli16->dwLineID          \t= mliA.dwLineID;\n    lpmli16->fdwLine           \t= mliA.fdwLine;\n    lpmli16->dwUser            \t= mliA.dwUser;\n    lpmli16->dwComponentType   \t= mliA.dwComponentType;\n    lpmli16->cChannels         \t= mliA.cChannels;\n    lpmli16->cConnections      \t= mliA.cConnections;\n    lpmli16->cControls         \t= mliA.cControls;\n    strcpy(lpmli16->szShortName, mliA.szShortName);\n    strcpy(lpmli16->szName, mliA.szName);\n    lpmli16->Target.dwType     \t= mliA.Target.dwType;\n    lpmli16->Target.dwDeviceID \t= mliA.Target.dwDeviceID;\n    lpmli16->Target.wMid       \t= mliA.Target.wMid;\n    lpmli16->Target.wPid        = mliA.Target.wPid;\n    lpmli16->Target.vDriverVersion = mliA.Target.vDriverVersion;\n    strcpy(lpmli16->Target.szPname, mliA.Target.szPname);\n\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tmixerSetControlDetails\t[MMSYSTEM.809]\n */\nUINT16 WINAPI mixerSetControlDetails16(HMIXEROBJ16 hmix,\n\t\t\t\t       LPMIXERCONTROLDETAILS16 lpmcd,\n\t\t\t\t       DWORD fdwDetails)\n{\n    TRACE(\"(%04x, %p, %08x)\\n\", hmix, lpmcd, fdwDetails);\n    return MMSYSERR_NOTENABLED;\n}\n\n/**************************************************************************\n * \t\t\t\tmixerMessage\t\t[MMSYSTEM.804]\n */\nDWORD WINAPI mixerMessage16(HMIXER16 hmix, UINT16 uMsg, DWORD dwParam1,\n\t\t\t     DWORD dwParam2)\n{\n    return mixerMessage(HMIXER_32(hmix), uMsg, dwParam1, dwParam2);\n}\n\n/* ###################################################\n * #                     AUX                         #\n * ###################################################\n */\n\n/**************************************************************************\n * \t\t\t\tauxGetNumDevs\t\t[MMSYSTEM.350]\n */\nUINT16 WINAPI auxGetNumDevs16(void)\n{\n    return auxGetNumDevs();\n}\n\n/**************************************************************************\n * \t\t\t\tauxGetDevCaps\t\t[MMSYSTEM.351]\n */\nUINT16 WINAPI auxGetDevCaps16(UINT16 uDeviceID, LPAUXCAPS16 lpCaps, UINT16 uSize)\n{\n    AUXCAPSA  acA;\n    UINT      ret;\n\n    if (lpCaps == NULL)\treturn MMSYSERR_INVALPARAM;\n\n    ret = auxGetDevCapsA(uDeviceID, &acA, sizeof(acA));\n    if (ret == MMSYSERR_NOERROR) {\n\tAUXCAPS16 ac16;\n\tac16.wMid           = acA.wMid;\n\tac16.wPid           = acA.wPid;\n\tac16.vDriverVersion = acA.vDriverVersion;\n\tstrcpy(ac16.szPname, acA.szPname);\n\tac16.wTechnology    = acA.wTechnology;\n\tac16.dwSupport      = acA.dwSupport;\n\tmemcpy(lpCaps, &ac16, min(uSize, sizeof(ac16)));\n    }\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tauxGetVolume\t\t[MMSYSTEM.352]\n */\nUINT16 WINAPI auxGetVolume16(UINT16 uDeviceID, LPDWORD lpdwVolume)\n{\n    return auxGetVolume(uDeviceID, lpdwVolume);\n}\n\n/**************************************************************************\n * \t\t\t\tauxSetVolume\t\t[MMSYSTEM.353]\n */\nUINT16 WINAPI auxSetVolume16(UINT16 uDeviceID, DWORD dwVolume)\n{\n    return auxSetVolume(uDeviceID, dwVolume);\n}\n\n/**************************************************************************\n * \t\t\t\tauxOutMessage\t\t[MMSYSTEM.354]\n */\nDWORD WINAPI auxOutMessage16(UINT16 uDeviceID, UINT16 uMessage, DWORD dw1, DWORD dw2)\n{\n    TRACE(\"(%04X, %04X, %08X, %08X)\\n\", uDeviceID, uMessage, dw1, dw2);\n\n    switch (uMessage) {\n    case AUXDM_GETNUMDEVS:\n    case AUXDM_SETVOLUME:\n\t/* no argument conversion needed */\n\tbreak;\n    case AUXDM_GETVOLUME:\n\treturn auxGetVolume(uDeviceID, MapSL(dw1));\n    case AUXDM_GETDEVCAPS:\n\treturn auxGetDevCaps16(uDeviceID, MapSL(dw1), dw2);\n    default:\n\tTRACE(\"(%04x, %04x, %08x, %08x): unhandled message\\n\",\n\t      uDeviceID, uMessage, dw1, dw2);\n\tbreak;\n    }\n    return auxOutMessage(uDeviceID, uMessage, dw1, dw2);\n}\n\n/* ###################################################\n * #                     MIDI                        #\n * ###################################################\n */\n\n/**************************************************************************\n * \t\t\t\tmidiOutGetNumDevs\t[MMSYSTEM.201]\n */\nUINT16 WINAPI midiOutGetNumDevs16(void)\n{\n    return midiOutGetNumDevs();\n}\n\n/**************************************************************************\n * \t\t\t\tmidiOutGetDevCaps\t[MMSYSTEM.202]\n */\nUINT16 WINAPI midiOutGetDevCaps16(UINT16 uDeviceID, LPMIDIOUTCAPS16 lpCaps,\n\t\t\t\t  UINT16 uSize)\n{\n    MIDIOUTCAPSA\tmocA;\n    UINT\t\tret;\n\n    if (lpCaps == NULL)\treturn MMSYSERR_INVALPARAM;\n\n    ret = midiOutGetDevCapsA((INT16)uDeviceID, &mocA, sizeof(mocA));\n    if (ret == MMSYSERR_NOERROR) {\n\tMIDIOUTCAPS16 moc16;\n\tmoc16.wMid            = mocA.wMid;\n\tmoc16.wPid            = mocA.wPid;\n\tmoc16.vDriverVersion  = mocA.vDriverVersion;\n\tstrcpy(moc16.szPname, mocA.szPname);\n\tmoc16.wTechnology     = mocA.wTechnology;\n\tmoc16.wVoices         = mocA.wVoices;\n\tmoc16.wNotes          = mocA.wNotes;\n\tmoc16.wChannelMask    = mocA.wChannelMask;\n\tmoc16.dwSupport       = mocA.dwSupport;\n\tmemcpy(lpCaps, &moc16, min(uSize, sizeof(moc16)));\n    }\n    return ret;\n }\n\n/**************************************************************************\n * \t\t\t\tmidiOutGetErrorText \t[MMSYSTEM.203]\n * \t\t\t\tmidiInGetErrorText \t[MMSYSTEM.303]\n */\nUINT16 WINAPI midiOutGetErrorText16(UINT16 uError, LPSTR lpText, UINT16 uSize)\n{\n    return midiOutGetErrorTextA(uError, lpText, uSize);\n}\n\n/**************************************************************************\n * \t\t\t\tmidiOutOpen    \t\t[MMSYSTEM.204]\n */\nUINT16 WINAPI midiOutOpen16(HMIDIOUT16* lphMidiOut, UINT16 uDeviceID,\n                            DWORD dwCallback, DWORD dwInstance, DWORD dwFlags)\n{\n    HMIDIOUT\t                hmo;\n    UINT\t                ret;\n    struct mmsystdrv_thunk*     thunk;\n\n    if (!(thunk = MMSYSTDRV_AddThunk(dwCallback, dwFlags, MMSYSTDRV_MIDIOUT)))\n    {\n        return MMSYSERR_NOMEM;\n    }\n    dwFlags = (dwFlags & ~CALLBACK_TYPEMASK) | CALLBACK_FUNCTION;\n    ret = midiOutOpen(&hmo, (INT16)uDeviceID, (DWORD)thunk, dwInstance, dwFlags);\n    if (ret == MMSYSERR_NOERROR)\n    {\n        if (lphMidiOut != NULL) *lphMidiOut = HMIDIOUT_16(hmo);\n        MMSYSTDRV_SetHandle(thunk, (void*)hmo);\n    }\n    else MMSYSTDRV_DeleteThunk(thunk);\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tmidiOutClose\t\t[MMSYSTEM.205]\n */\nUINT16 WINAPI midiOutClose16(HMIDIOUT16 hMidiOut)\n{\n    UINT        ret = midiOutClose(HMIDIOUT_32(hMidiOut));\n\n    if (ret == MMSYSERR_NOERROR)\n        MMSYSTDRV_CloseHandle((void*)HMIDIOUT_32(hMidiOut));\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tmidiOutPrepareHeader\t[MMSYSTEM.206]\n */\nUINT16 WINAPI midiOutPrepareHeader16(HMIDIOUT16 hMidiOut,         /* [in] */\n                                     SEGPTR lpsegMidiOutHdr,      /* [???] */\n\t\t\t\t     UINT16 uSize)                /* [in] */\n{\n    TRACE(\"(%04X, %08x, %d)\\n\", hMidiOut, lpsegMidiOutHdr, uSize);\n\n    return MMSYSTDRV_Message(HMIDIOUT_32(hMidiOut), MODM_PREPARE, lpsegMidiOutHdr, uSize);\n}\n\n/**************************************************************************\n * \t\t\t\tmidiOutUnprepareHeader\t[MMSYSTEM.207]\n */\nUINT16 WINAPI midiOutUnprepareHeader16(HMIDIOUT16 hMidiOut,         /* [in] */\n\t\t\t\t       SEGPTR lpsegMidiOutHdr,      /* [???] */\n\t\t\t\t       UINT16 uSize)                /* [in] */\n{\n    LPMIDIHDR16\t\tlpMidiOutHdr = MapSL(lpsegMidiOutHdr);\n\n    TRACE(\"(%04X, %08x, %d)\\n\", hMidiOut, lpsegMidiOutHdr, uSize);\n\n    if (!(lpMidiOutHdr->dwFlags & MHDR_PREPARED)) {\n\treturn MMSYSERR_NOERROR;\n    }\n\n    return MMSYSTDRV_Message(HMIDIOUT_32(hMidiOut), MODM_UNPREPARE, lpsegMidiOutHdr, uSize);\n}\n\n/**************************************************************************\n * \t\t\t\tmidiOutShortMsg\t\t[MMSYSTEM.208]\n */\nUINT16 WINAPI midiOutShortMsg16(HMIDIOUT16 hMidiOut, DWORD dwMsg)\n{\n    return midiOutShortMsg(HMIDIOUT_32(hMidiOut), dwMsg);\n}\n\n/**************************************************************************\n * \t\t\t\tmidiOutLongMsg\t\t[MMSYSTEM.209]\n */\nUINT16 WINAPI midiOutLongMsg16(HMIDIOUT16 hMidiOut,          /* [in] */\n\t\t\t       SEGPTR lpsegMidiOutHdr,       /* [???] */\n\t\t\t       UINT16 uSize)                 /* [in] */\n{\n    TRACE(\"(%04X, %08x, %d)\\n\", hMidiOut, lpsegMidiOutHdr, uSize);\n\n    return MMSYSTDRV_Message(HMIDIOUT_32(hMidiOut), MODM_LONGDATA, lpsegMidiOutHdr, uSize);\n}\n\n/**************************************************************************\n * \t\t\t\tmidiOutReset\t\t[MMSYSTEM.210]\n */\nUINT16 WINAPI midiOutReset16(HMIDIOUT16 hMidiOut)\n{\n    return midiOutReset(HMIDIOUT_32(hMidiOut));\n}\n\n/**************************************************************************\n * \t\t\t\tmidiOutGetVolume\t[MMSYSTEM.211]\n */\nUINT16 WINAPI midiOutGetVolume16(UINT16 uDeviceID, DWORD* lpdwVolume)\n{\n    return midiOutGetVolume(HMIDIOUT_32(uDeviceID), lpdwVolume);\n}\n\n/**************************************************************************\n * \t\t\t\tmidiOutSetVolume\t[MMSYSTEM.212]\n */\nUINT16 WINAPI midiOutSetVolume16(UINT16 uDeviceID, DWORD dwVolume)\n{\n    return midiOutSetVolume(HMIDIOUT_32(uDeviceID), dwVolume);\n}\n\n/**************************************************************************\n * \t\t\t\tmidiOutCachePatches\t\t[MMSYSTEM.213]\n */\nUINT16 WINAPI midiOutCachePatches16(HMIDIOUT16 hMidiOut, UINT16 uBank,\n                                    WORD* lpwPatchArray, UINT16 uFlags)\n{\n    return midiOutCachePatches(HMIDIOUT_32(hMidiOut), uBank, lpwPatchArray,\n\t\t\t       uFlags);\n}\n\n/**************************************************************************\n * \t\t\t\tmidiOutCacheDrumPatches\t[MMSYSTEM.214]\n */\nUINT16 WINAPI midiOutCacheDrumPatches16(HMIDIOUT16 hMidiOut, UINT16 uPatch,\n                                        WORD* lpwKeyArray, UINT16 uFlags)\n{\n    return midiOutCacheDrumPatches(HMIDIOUT_32(hMidiOut), uPatch, lpwKeyArray, uFlags);\n}\n\n/**************************************************************************\n * \t\t\t\tmidiOutGetID\t\t[MMSYSTEM.215]\n */\nUINT16 WINAPI midiOutGetID16(HMIDIOUT16 hMidiOut, UINT16* lpuDeviceID)\n{\n    UINT        devid;\n    UINT16      ret;\n\n    ret = midiOutGetID(HMIDIOUT_32(hMidiOut), &devid);\n    if (ret != MMSYSERR_NOERROR) return ret;\n    *lpuDeviceID = devid;\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tmidiOutMessage\t\t[MMSYSTEM.216]\n */\nDWORD WINAPI midiOutMessage16(HMIDIOUT16 hMidiOut, UINT16 uMessage,\n                              DWORD dwParam1, DWORD dwParam2)\n{\n    TRACE(\"(%04X, %04X, %08X, %08X)\\n\", hMidiOut, uMessage, dwParam1, dwParam2);\n\n    switch (uMessage) {\n    case MODM_OPEN:\n    case MODM_CLOSE:\n\tFIXME(\"can't handle OPEN or CLOSE message!\\n\");\n\treturn MMSYSERR_NOTSUPPORTED;\n\n    case MODM_GETVOLUME:\n        return midiOutGetVolume16(hMidiOut, MapSL(dwParam1));\n    /* lpMidiOutHdr is still a segmented pointer for these functions */\n    case MODM_LONGDATA:\n        return midiOutLongMsg16(hMidiOut, dwParam1, dwParam2);\n    case MODM_PREPARE:\n        return midiOutPrepareHeader16(hMidiOut, dwParam1, dwParam2);\n    case MODM_UNPREPARE:\n        return midiOutUnprepareHeader16(hMidiOut, dwParam1, dwParam2);\n    }\n    return MMSYSTDRV_Message(HMIDIOUT_32(hMidiOut), uMessage, dwParam1, dwParam2);\n}\n\n/**************************************************************************\n * \t\t\t\tmidiInGetNumDevs\t[MMSYSTEM.301]\n */\nUINT16 WINAPI midiInGetNumDevs16(void)\n{\n    return midiInGetNumDevs();\n}\n\n/**************************************************************************\n * \t\t\t\tmidiInGetDevCaps\t[MMSYSTEM.302]\n */\nUINT16 WINAPI midiInGetDevCaps16(UINT16 uDeviceID, LPMIDIINCAPS16 lpCaps,\n\t\t\t\t UINT16 uSize)\n{\n    MIDIINCAPSA\t\tmicA;\n    UINT\t\tret;\n\n    if (lpCaps == NULL)\treturn MMSYSERR_INVALPARAM;\n\n    ret = midiInGetDevCapsA(uDeviceID, &micA, uSize);\n    if (ret == MMSYSERR_NOERROR) {\n\tMIDIINCAPS16 mic16;\n\tmic16.wMid           = micA.wMid;\n\tmic16.wPid           = micA.wPid;\n\tmic16.vDriverVersion = micA.vDriverVersion;\n\tstrcpy(mic16.szPname, micA.szPname);\n\tmic16.dwSupport      = micA.dwSupport;\n\tmemcpy(lpCaps, &mic16, min(uSize, sizeof(mic16)));\n    }\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tmidiInOpen\t\t[MMSYSTEM.304]\n */\nUINT16 WINAPI midiInOpen16(HMIDIIN16* lphMidiIn, UINT16 uDeviceID,\n\t\t\t   DWORD dwCallback, DWORD dwInstance, DWORD dwFlags)\n{\n    HMIDIIN\thmid;\n    UINT \tret;\n    struct mmsystdrv_thunk*     thunk;\n\n    if (!(thunk = MMSYSTDRV_AddThunk(dwCallback, dwFlags, MMSYSTDRV_MIDIIN)))\n    {\n        return MMSYSERR_NOMEM;\n    }\n    dwFlags = (dwFlags & ~CALLBACK_TYPEMASK) | CALLBACK_FUNCTION;\n    ret = midiInOpen(&hmid, uDeviceID, (DWORD)thunk, dwInstance, dwFlags);\n    if (ret == MMSYSERR_NOERROR)\n    {\n        if (lphMidiIn) *lphMidiIn = HMIDIIN_16(hmid);\n        MMSYSTDRV_SetHandle(thunk, (void*)hmid);\n    }\n    else MMSYSTDRV_DeleteThunk(thunk);\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tmidiInClose\t\t[MMSYSTEM.305]\n */\nUINT16 WINAPI midiInClose16(HMIDIIN16 hMidiIn)\n{\n    UINT        ret = midiInClose(HMIDIIN_32(hMidiIn));\n\n    if (ret == MMSYSERR_NOERROR)\n        MMSYSTDRV_CloseHandle((void*)HMIDIIN_32(hMidiIn));\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tmidiInPrepareHeader\t[MMSYSTEM.306]\n */\nUINT16 WINAPI midiInPrepareHeader16(HMIDIIN16 hMidiIn,         /* [in] */\n                                    SEGPTR lpsegMidiInHdr,     /* [???] */\n\t\t\t\t    UINT16 uSize)              /* [in] */\n{\n    TRACE(\"(%04X, %08x, %d)\\n\", hMidiIn, lpsegMidiInHdr, uSize);\n\n    return MMSYSTDRV_Message(HMIDIIN_32(hMidiIn), MIDM_PREPARE, lpsegMidiInHdr, uSize);\n}\n\n/**************************************************************************\n * \t\t\t\tmidiInUnprepareHeader\t[MMSYSTEM.307]\n */\nUINT16 WINAPI midiInUnprepareHeader16(HMIDIIN16 hMidiIn,         /* [in] */\n                                      SEGPTR lpsegMidiInHdr,     /* [???] */\n\t\t\t\t      UINT16 uSize)              /* [in] */\n{\n    LPMIDIHDR16\t\tlpMidiInHdr = MapSL(lpsegMidiInHdr);\n\n    TRACE(\"(%04X, %08x, %d)\\n\", hMidiIn, lpsegMidiInHdr, uSize);\n\n    if (!(lpMidiInHdr->dwFlags & MHDR_PREPARED)) {\n\treturn MMSYSERR_NOERROR;\n    }\n\n    return MMSYSTDRV_Message(HMIDIIN_32(hMidiIn), MIDM_UNPREPARE, lpsegMidiInHdr, uSize);\n}\n\n/**************************************************************************\n * \t\t\t\tmidiInAddBuffer\t\t[MMSYSTEM.308]\n */\nUINT16 WINAPI midiInAddBuffer16(HMIDIIN16 hMidiIn,         /* [in] */\n                                SEGPTR lpsegMidiInHdr,     /* [???] */\n\t\t\t\tUINT16 uSize)              /* [in] */\n{\n    TRACE(\"(%04X, %08x, %d)\\n\", hMidiIn, lpsegMidiInHdr, uSize);\n\n    return MMSYSTDRV_Message(HMIDIIN_32(hMidiIn), MIDM_ADDBUFFER, lpsegMidiInHdr, uSize);\n}\n\n/**************************************************************************\n * \t\t\t\tmidiInStart\t\t\t[MMSYSTEM.309]\n */\nUINT16 WINAPI midiInStart16(HMIDIIN16 hMidiIn)\n{\n    return midiInStart(HMIDIIN_32(hMidiIn));\n}\n\n/**************************************************************************\n * \t\t\t\tmidiInStop\t\t\t[MMSYSTEM.310]\n */\nUINT16 WINAPI midiInStop16(HMIDIIN16 hMidiIn)\n{\n    return midiInStop(HMIDIIN_32(hMidiIn));\n}\n\n/**************************************************************************\n * \t\t\t\tmidiInReset\t\t\t[MMSYSTEM.311]\n */\nUINT16 WINAPI midiInReset16(HMIDIIN16 hMidiIn)\n{\n    return midiInReset(HMIDIIN_32(hMidiIn));\n}\n\n/**************************************************************************\n * \t\t\t\tmidiInGetID\t\t\t[MMSYSTEM.312]\n */\nUINT16 WINAPI midiInGetID16(HMIDIIN16 hMidiIn, UINT16* lpuDeviceID)\n{\n    UINT        devid;\n    UINT16      ret;\n\n    ret = midiInGetID(HMIDIIN_32(hMidiIn), &devid);\n    if (ret != MMSYSERR_NOERROR) return ret;\n    *lpuDeviceID = devid;\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tmidiInMessage\t\t[MMSYSTEM.313]\n */\nDWORD WINAPI midiInMessage16(HMIDIIN16 hMidiIn, UINT16 uMessage,\n                             DWORD dwParam1, DWORD dwParam2)\n{\n    TRACE(\"(%04X, %04X, %08X, %08X)\\n\", hMidiIn, uMessage, dwParam1, dwParam2);\n\n    switch (uMessage) {\n    case MIDM_OPEN:\n    case MIDM_CLOSE:\n\tFIXME(\"can't handle OPEN or CLOSE message!\\n\");\n\treturn MMSYSERR_NOTSUPPORTED;\n\n    case MIDM_GETDEVCAPS:\n        return midiInGetDevCaps16(hMidiIn, MapSL(dwParam1), dwParam2);\n    case MIDM_PREPARE:\n        return midiInPrepareHeader16(hMidiIn, dwParam1, dwParam2);\n    case MIDM_UNPREPARE:\n        return midiInUnprepareHeader16(hMidiIn, dwParam1, dwParam2);\n    case MIDM_ADDBUFFER:\n        return midiInAddBuffer16(hMidiIn, dwParam1, dwParam2);\n    }\n    return MMSYSTDRV_Message(HMIDIIN_32(hMidiIn), uMessage, dwParam1, dwParam2);\n}\n\n/**************************************************************************\n * \t\t\t\tmidiStreamClose\t\t\t[MMSYSTEM.252]\n */\nMMRESULT16 WINAPI midiStreamClose16(HMIDISTRM16 hMidiStrm)\n{\n    UINT        ret = midiStreamClose(HMIDISTRM_32(hMidiStrm));\n    if (ret == MMSYSERR_NOERROR)\n        MMSYSTDRV_CloseHandle((void*)HMIDISTRM_32(hMidiStrm));\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tmidiStreamOpen\t\t\t[MMSYSTEM.251]\n */\nMMRESULT16 WINAPI midiStreamOpen16(HMIDISTRM16* phMidiStrm, LPUINT16 devid,\n\t\t\t\t   DWORD cMidi, DWORD dwCallback,\n\t\t\t\t   DWORD dwInstance, DWORD fdwOpen)\n{\n    HMIDISTRM\t                hMidiStrm32;\n    MMRESULT \t                ret;\n    UINT\t                devid32;\n    struct mmsystdrv_thunk*     thunk;\n\n    if (!phMidiStrm || !devid)\n\treturn MMSYSERR_INVALPARAM;\n    devid32 = *devid;\n\n    if (!(thunk = MMSYSTDRV_AddThunk(dwCallback, fdwOpen, MMSYSTDRV_MIDIOUT)))\n    {\n        return MMSYSERR_NOMEM;\n    }\n    fdwOpen = (fdwOpen & ~CALLBACK_TYPEMASK) | CALLBACK_FUNCTION;\n    ret = midiStreamOpen(&hMidiStrm32, &devid32, cMidi, (DWORD)thunk, dwInstance, fdwOpen);\n    if (ret == MMSYSERR_NOERROR)\n    {\n        *phMidiStrm = HMIDISTRM_16(hMidiStrm32);\n        *devid = devid32;\n        MMSYSTDRV_SetHandle(thunk, hMidiStrm32);\n    }\n    else MMSYSTDRV_DeleteThunk(thunk);\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tmidiStreamOut\t\t\t[MMSYSTEM.254]\n */\nMMRESULT16 WINAPI midiStreamOut16(HMIDISTRM16 hMidiStrm, LPMIDIHDR16 lpMidiHdr, UINT16 cbMidiHdr)\n{\n    return midiStreamOut(HMIDISTRM_32(hMidiStrm), (LPMIDIHDR)lpMidiHdr,\n\t\t         cbMidiHdr);\n}\n\n/**************************************************************************\n * \t\t\t\tmidiStreamPause\t\t\t[MMSYSTEM.255]\n */\nMMRESULT16 WINAPI midiStreamPause16(HMIDISTRM16 hMidiStrm)\n{\n    return midiStreamPause(HMIDISTRM_32(hMidiStrm));\n}\n\n/**************************************************************************\n * \t\t\t\tmidiStreamPosition\t\t[MMSYSTEM.253]\n */\nMMRESULT16 WINAPI midiStreamPosition16(HMIDISTRM16 hMidiStrm, LPMMTIME16 lpmmt16, UINT16 cbmmt)\n{\n    MMTIME\tmmt32;\n    MMRESULT\tret;\n\n    if (!lpmmt16)\n\treturn MMSYSERR_INVALPARAM;\n    mmt32.wType = lpmmt16->wType;\n    ret = midiStreamPosition(HMIDISTRM_32(hMidiStrm), &mmt32, sizeof(MMTIME));\n    MMSYSTEM_MMTIME32to16(lpmmt16, &mmt32);\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tmidiStreamProperty\t\t[MMSYSTEM.250]\n */\nMMRESULT16 WINAPI midiStreamProperty16(HMIDISTRM16 hMidiStrm, LPBYTE lpPropData, DWORD dwProperty)\n{\n    return midiStreamProperty(HMIDISTRM_32(hMidiStrm), lpPropData, dwProperty);\n}\n\n/**************************************************************************\n * \t\t\t\tmidiStreamRestart\t\t[MMSYSTEM.256]\n */\nMMRESULT16 WINAPI midiStreamRestart16(HMIDISTRM16 hMidiStrm)\n{\n    return midiStreamRestart(HMIDISTRM_32(hMidiStrm));\n}\n\n/**************************************************************************\n * \t\t\t\tmidiStreamStop\t\t\t[MMSYSTEM.257]\n */\nMMRESULT16 WINAPI midiStreamStop16(HMIDISTRM16 hMidiStrm)\n{\n    return midiStreamStop(HMIDISTRM_32(hMidiStrm));\n}\n\n/* ###################################################\n * #                     WAVE                        #\n * ###################################################\n */\n\n/**************************************************************************\n * \t\t\t\twaveOutGetNumDevs\t\t[MMSYSTEM.401]\n */\nUINT16 WINAPI waveOutGetNumDevs16(void)\n{\n    return waveOutGetNumDevs();\n}\n\n/**************************************************************************\n * \t\t\t\twaveOutGetDevCaps\t\t[MMSYSTEM.402]\n */\nUINT16 WINAPI waveOutGetDevCaps16(UINT16 uDeviceID,\n\t\t\t\t  LPWAVEOUTCAPS16 lpCaps, UINT16 uSize)\n{\n    WAVEOUTCAPSA\twocA;\n    UINT \t\tret;\n    TRACE(\"(%u %p %u)!\\n\", uDeviceID, lpCaps, uSize);\n\n    if (lpCaps == NULL)\treturn MMSYSERR_INVALPARAM;\n\n    ret = waveOutGetDevCapsA(uDeviceID, &wocA, sizeof(wocA));\n    if (ret == MMSYSERR_NOERROR) {\n        WAVEOUTCAPS16 woc16;\n        woc16.wMid           = wocA.wMid;\n        woc16.wPid           = wocA.wPid;\n        woc16.vDriverVersion = wocA.vDriverVersion;\n        strcpy(woc16.szPname, wocA.szPname);\n        woc16.dwFormats      = wocA.dwFormats;\n        woc16.wChannels      = wocA.wChannels;\n        woc16.dwSupport      = wocA.dwSupport;\n        memcpy(lpCaps, &woc16, min(uSize, sizeof(woc16)));\n    }\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\twaveOutGetErrorText \t[MMSYSTEM.403]\n * \t\t\t\twaveInGetErrorText \t[MMSYSTEM.503]\n */\nUINT16 WINAPI waveOutGetErrorText16(UINT16 uError, LPSTR lpText, UINT16 uSize)\n{\n    return waveOutGetErrorTextA(uError, lpText, uSize);\n}\n\nstatic void     init_wfx_adpcm(ADPCMWAVEFORMAT* awfx)\n{\n    register WAVEFORMATEX*      pwfx = &awfx->wfx;\n    static ADPCMCOEFSET MSADPCM_CoeffSet[] =\n    {\n            {256, 0}, {512, -256}, {0, 0}, {192, 64}, {240, 0}, {460, -208}, {392, -232}\n    };\n\n    /* we assume wFormatTag, nChannels, nSamplesPerSec and wBitsPerSample\n     * have been initialized... */\n\n    switch (pwfx->nSamplesPerSec)\n    {\n    case  8000: pwfx->nBlockAlign = 256 * pwfx->nChannels;   break;\n    case 11025: pwfx->nBlockAlign = 256 * pwfx->nChannels;   break;\n    case 22050: pwfx->nBlockAlign = 512 * pwfx->nChannels;   break;\n    case 44100: pwfx->nBlockAlign = 1024 * pwfx->nChannels;  break;\n    default:                               break;\n    }\n    pwfx->cbSize = 2 * sizeof(WORD) + 7 * sizeof(ADPCMCOEFSET);\n    /* 7 is the size of the block head (which contains two samples) */\n\n    awfx->wSamplesPerBlock = pwfx->nBlockAlign * 2 / pwfx->nChannels - 12;\n    pwfx->nAvgBytesPerSec = (pwfx->nSamplesPerSec * pwfx->nBlockAlign) / awfx->wSamplesPerBlock;\n    awfx->wNumCoef = 7;\n    memcpy(awfx->aCoef, MSADPCM_CoeffSet, 7 * sizeof(ADPCMCOEFSET));\n}\n\n/**************************************************************************\n *\t\t\twaveOutOpen\t\t\t[MMSYSTEM.404]\n */\nUINT16 WINAPI waveOutOpen16(HWAVEOUT16* lphWaveOut, UINT16 uDeviceID,\n                            LPCWAVEFORMATEX lpFormat, DWORD dwCallback,\n\t\t\t    DWORD dwInstance, DWORD dwFlags)\n{\n    HWAVEOUT\t\t        hWaveOut;\n    UINT\t\t        ret;\n    struct mmsystdrv_thunk*     thunk;\n    WAVEFORMATEX             *wavefmt;\n    WORD                        size = lpFormat->wFormatTag == WAVE_FORMAT_PCM ? 0 : lpFormat->cbSize;\n    wavefmt = (WAVEFORMATEX *)HeapAlloc(GetProcessHeap(), 0, sizeof(WAVEFORMATEX) + size);\n\n    memcpy(wavefmt, lpFormat, sizeof(WAVEFORMATEX) + size);\n\n\n    if (!(thunk = MMSYSTDRV_AddThunk(dwCallback, dwFlags, MMSYSTDRV_WAVEOUT)))\n    {\n        return MMSYSERR_NOMEM;\n    }\n    if ((dwFlags & CALLBACK_TYPEMASK) == CALLBACK_WINDOW)\n    {\n        if (!IsWindow(HWND_32(dwCallback)))\n        {\n            return MMSYSERR_INVALPARAM;\n        }\n    }\n    dwFlags = (dwFlags & ~CALLBACK_TYPEMASK) | CALLBACK_FUNCTION;\n    /* since layout of WAVEFORMATEX is the same for 16/32 bits, we directly\n     * call the 32 bit version\n     * however, we need to promote correctly the wave mapper id\n     * (0xFFFFFFFF and not 0x0000FFFF)\n     */\n    if (wavefmt->wFormatTag == WAVE_FORMAT_ADPCM)\n        init_wfx_adpcm((ADPCMWAVEFORMAT*) wavefmt);\n\n    ret = waveOutOpen(&hWaveOut, (uDeviceID == (UINT16)-1) ? (UINT)-1 : uDeviceID,\n                      wavefmt, (DWORD)thunk, dwInstance, dwFlags);\n\n    if (ret == MMSYSERR_NOERROR && !(dwFlags & WAVE_FORMAT_QUERY))\n    {\n         MMSYSTDRV_SetHandle(thunk, (void*)hWaveOut);\n         if (lphWaveOut != NULL)\n             *lphWaveOut = HWAVEOUT_16(hWaveOut);\n    } else MMSYSTDRV_DeleteThunk(thunk);\n    HeapFree(GetProcessHeap(), 0, wavefmt);\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\twaveOutClose\t\t[MMSYSTEM.405]\n */\nUINT16 WINAPI waveOutClose16(HWAVEOUT16 hWaveOut)\n{\n    DWORD\tlevel;\n    UINT16\tret;\n\n    ReleaseThunkLock(&level);\n    ret = waveOutClose(HWAVEOUT_32(hWaveOut));\n    RestoreThunkLock(level);\n    if (ret == MMSYSERR_NOERROR)\n        MMSYSTDRV_CloseHandle((void*)HWAVEOUT_32(hWaveOut));\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\twaveOutPrepareHeader\t[MMSYSTEM.406]\n */\nUINT16 WINAPI waveOutPrepareHeader16(HWAVEOUT16 hWaveOut,      /* [in] */\n                                     SEGPTR lpsegWaveOutHdr,   /* [???] */\n\t\t\t\t     UINT16 uSize)             /* [in] */\n{\n    TRACE(\"(%04X, %08x, %u);\\n\", hWaveOut, lpsegWaveOutHdr, uSize);\n\n    if (lpsegWaveOutHdr == 0) return MMSYSERR_INVALPARAM;\n\n    return MMSYSTDRV_Message(HWAVEOUT_32(hWaveOut), WODM_PREPARE, lpsegWaveOutHdr, uSize);\n}\n\n/**************************************************************************\n * \t\t\t\twaveOutUnprepareHeader\t[MMSYSTEM.407]\n */\nUINT16 WINAPI waveOutUnprepareHeader16(HWAVEOUT16 hWaveOut,       /* [in] */\n\t\t\t\t       SEGPTR lpsegWaveOutHdr,    /* [???] */\n\t\t\t\t       UINT16 uSize)              /* [in] */\n{\n    LPWAVEHDR\t\tlpWaveOutHdr = MapSL(lpsegWaveOutHdr);\n\n    TRACE(\"(%04X, %08x, %u);\\n\", hWaveOut, lpsegWaveOutHdr, uSize);\n\n    if (!(lpWaveOutHdr->dwFlags & WHDR_PREPARED)) {\n\treturn MMSYSERR_NOERROR;\n    }\n\n    return MMSYSTDRV_Message(HWAVEOUT_32(hWaveOut), WODM_UNPREPARE, lpsegWaveOutHdr, uSize);\n}\n\n/**************************************************************************\n * \t\t\t\twaveOutWrite\t\t[MMSYSTEM.408]\n */\nUINT16 WINAPI waveOutWrite16(HWAVEOUT16 hWaveOut,       /* [in] */\n\t\t\t     SEGPTR lpsegWaveOutHdr,    /* [???] */\n\t\t\t     UINT16 uSize)              /* [in] */\n{\n    TRACE(\"(%04X, %08x, %u);\\n\", hWaveOut, lpsegWaveOutHdr, uSize);\n\n    return MMSYSTDRV_Message(HWAVEOUT_32(hWaveOut), WODM_WRITE, lpsegWaveOutHdr, uSize);\n}\n\n/**************************************************************************\n * \t\t\t\twaveOutBreakLoop\t[MMSYSTEM.419]\n */\nUINT16 WINAPI waveOutBreakLoop16(HWAVEOUT16 hWaveOut16)\n{\n    DWORD\tlevel;\n    UINT16\tret;\n\n    ReleaseThunkLock(&level);\n    ret = waveOutBreakLoop(HWAVEOUT_32(hWaveOut16));\n    RestoreThunkLock(level);\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\twaveOutPause\t\t[MMSYSTEM.409]\n */\nUINT16 WINAPI waveOutPause16(HWAVEOUT16 hWaveOut16)\n{\n    DWORD\tlevel;\n    UINT16\tret;\n\n    ReleaseThunkLock(&level);\n    ret = waveOutPause(HWAVEOUT_32(hWaveOut16));\n    RestoreThunkLock(level);\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\twaveOutReset\t\t[MMSYSTEM.411]\n */\nUINT16 WINAPI waveOutReset16(HWAVEOUT16 hWaveOut16)\n{\n    DWORD\tlevel;\n    UINT16\tret;\n\n    ReleaseThunkLock(&level);\n    ret = waveOutReset(HWAVEOUT_32(hWaveOut16));\n    RestoreThunkLock(level);\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\twaveOutRestart\t[MMSYSTEM.410]\n */\nUINT16 WINAPI waveOutRestart16(HWAVEOUT16 hWaveOut16)\n{\n    DWORD\tlevel;\n    UINT16\tret;\n\n    ReleaseThunkLock(&level);\n    ret = waveOutRestart(HWAVEOUT_32(hWaveOut16));\n    RestoreThunkLock(level);\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\twaveOutGetPosition\t[MMSYSTEM.412]\n */\nUINT16 WINAPI waveOutGetPosition16(HWAVEOUT16 hWaveOut, LPMMTIME16 lpTime,\n                                   UINT16 uSize)\n{\n    DWORD\tlevel;\n    UINT\tret;\n    MMTIME\tmmt;\n\n    mmt.wType = lpTime->wType;\n    ReleaseThunkLock(&level);\n    ret = waveOutGetPosition(HWAVEOUT_32(hWaveOut), &mmt, sizeof(mmt));\n    RestoreThunkLock(level);\n    MMSYSTEM_MMTIME32to16(lpTime, &mmt);\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\twaveOutGetPitch\t\t[MMSYSTEM.413]\n */\nUINT16 WINAPI waveOutGetPitch16(HWAVEOUT16 hWaveOut16, LPDWORD lpdw)\n{\n    return waveOutGetPitch(HWAVEOUT_32(hWaveOut16), lpdw);\n}\n\n/**************************************************************************\n * \t\t\t\twaveOutSetPitch\t\t[MMSYSTEM.414]\n */\nUINT16 WINAPI waveOutSetPitch16(HWAVEOUT16 hWaveOut16, DWORD dw)\n{\n    return waveOutSetPitch(HWAVEOUT_32(hWaveOut16), dw);\n}\n\n/**************************************************************************\n * \t\t\t\twaveOutGetPlaybackRate\t[MMSYSTEM.417]\n */\nUINT16 WINAPI waveOutGetPlaybackRate16(HWAVEOUT16 hWaveOut16, LPDWORD lpdw)\n{\n    return waveOutGetPlaybackRate(HWAVEOUT_32(hWaveOut16), lpdw);\n}\n\n/**************************************************************************\n * \t\t\t\twaveOutSetPlaybackRate\t[MMSYSTEM.418]\n */\nUINT16 WINAPI waveOutSetPlaybackRate16(HWAVEOUT16 hWaveOut16, DWORD dw)\n{\n    return waveOutSetPlaybackRate(HWAVEOUT_32(hWaveOut16), dw);\n}\n\n/**************************************************************************\n * \t\t\t\twaveOutGetVolume\t[MMSYSTEM.415]\n */\nUINT16 WINAPI waveOutGetVolume16(UINT16 devid, LPDWORD lpdw)\n{\n    return waveOutGetVolume(HWAVEOUT_32(devid), lpdw);\n}\n\n/**************************************************************************\n * \t\t\t\twaveOutSetVolume\t[MMSYSTEM.416]\n */\nUINT16 WINAPI waveOutSetVolume16(UINT16 devid, DWORD dw)\n{\n    return waveOutSetVolume(HWAVEOUT_32(devid), dw);\n}\n\n/**************************************************************************\n * \t\t\t\twaveOutGetID\t \t[MMSYSTEM.420]\n */\nUINT16 WINAPI waveOutGetID16(HWAVEOUT16 hWaveOut, UINT16* lpuDeviceID)\n{\n    UINT        devid;\n    UINT16      ret;\n\n    ret = waveOutGetID(HWAVEOUT_32(hWaveOut), &devid);\n    if (ret != MMSYSERR_NOERROR) return ret;\n    *lpuDeviceID = devid;\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\twaveOutMessage \t\t[MMSYSTEM.421]\n */\nDWORD WINAPI waveOutMessage16(HWAVEOUT16 hWaveOut, UINT16 uMessage,\n                              DWORD dwParam1, DWORD dwParam2)\n{\n    TRACE(\"(%04x, %u, %d, %d)\\n\", hWaveOut, uMessage, dwParam1, dwParam2);\n\n    if ((DWORD_PTR)hWaveOut < waveOutGetNumDevs())\n    {\n        if (uMessage == DRV_QUERYDRVENTRY || uMessage == DRV_QUERYDEVNODE)\n            dwParam1 = (DWORD)MapSL(dwParam1);\n    }\n    else if (uMessage < DRVM_IOCTL || (uMessage >= DRVM_IOCTL_LAST && uMessage < DRVM_MAPPER))\n        /* from M$ KB */\n\treturn MMSYSERR_INVALPARAM;\n\n    return MMSYSTDRV_Message(HWAVEOUT_32(hWaveOut), uMessage, dwParam1, dwParam2);\n}\n\n/**************************************************************************\n * \t\t\t\twaveInGetNumDevs \t\t[MMSYSTEM.501]\n */\nUINT16 WINAPI waveInGetNumDevs16(void)\n{\n    return waveInGetNumDevs();\n}\n\n/**************************************************************************\n * \t\t\t\twaveInGetDevCaps \t\t[MMSYSTEM.502]\n */\nUINT16 WINAPI waveInGetDevCaps16(UINT16 uDeviceID, LPWAVEINCAPS16 lpCaps,\n\t\t\t\t UINT16 uSize)\n{\n    WAVEINCAPSA\twicA;\n    UINT\tret;\n\n    if (lpCaps == NULL)\treturn MMSYSERR_INVALPARAM;\n\n    ret = waveInGetDevCapsA(uDeviceID, &wicA, sizeof(wicA));\n    if (ret == MMSYSERR_NOERROR) {\n        WAVEINCAPS16 wic16;\n        wic16.wMid           = wicA.wMid;\n        wic16.wPid           = wicA.wPid;\n        wic16.vDriverVersion = wicA.vDriverVersion;\n        strcpy(wic16.szPname, wicA.szPname);\n        wic16.dwFormats      = wicA.dwFormats;\n        wic16.wChannels      = wicA.wChannels;\n        memcpy(lpCaps, &wic16, min(uSize, sizeof(wic16)));\n    }\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\twaveInOpen\t\t\t[MMSYSTEM.504]\n */\nUINT16 WINAPI waveInOpen16(HWAVEIN16* lphWaveIn, UINT16 uDeviceID,\n                           LPCWAVEFORMATEX lpFormat, DWORD dwCallback,\n                           DWORD dwInstance, DWORD dwFlags)\n{\n    HWAVEIN                     hWaveIn;\n    UINT\t\t        ret;\n    struct mmsystdrv_thunk*     thunk;\n\n    if (!(thunk = MMSYSTDRV_AddThunk(dwCallback, dwFlags, MMSYSTDRV_WAVEIN)))\n    {\n        return MMSYSERR_NOMEM;\n    }\n    dwFlags = (dwFlags & ~CALLBACK_TYPEMASK) | CALLBACK_FUNCTION;\n    /* since layout of WAVEFORMATEX is the same for 16/32 bits, we directly\n     * call the 32 bit version\n     * however, we need to promote correctly the wave mapper id\n     * (0xFFFFFFFF and not 0x0000FFFF)\n     */\n    ret = waveInOpen(&hWaveIn, (uDeviceID == (UINT16)-1) ? (UINT)-1 : uDeviceID,\n                     lpFormat, (DWORD)thunk, dwInstance, dwFlags);\n\n    if (ret == MMSYSERR_NOERROR && !(dwFlags & WAVE_FORMAT_QUERY))\n    {\n         MMSYSTDRV_SetHandle(thunk, (void*)hWaveIn);\n         if (lphWaveIn != NULL)\n             *lphWaveIn = HWAVEOUT_16(hWaveIn);\n    } else MMSYSTDRV_DeleteThunk(thunk);\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\twaveInClose\t\t\t[MMSYSTEM.505]\n */\nUINT16 WINAPI waveInClose16(HWAVEIN16 hWaveIn)\n{\n    DWORD\tlevel;\n    UINT16\tret;\n\n    ReleaseThunkLock(&level);\n    ret = waveInClose(HWAVEIN_32(hWaveIn));\n    RestoreThunkLock(level);\n    if (ret == MMSYSERR_NOERROR)\n        MMSYSTDRV_CloseHandle((void*)HWAVEIN_32(hWaveIn));\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\twaveInPrepareHeader\t\t[MMSYSTEM.506]\n */\nUINT16 WINAPI waveInPrepareHeader16(HWAVEIN16 hWaveIn,       /* [in] */\n\t\t\t\t    SEGPTR lpsegWaveInHdr,   /* [???] */\n\t\t\t\t    UINT16 uSize)            /* [in] */\n{\n    LPWAVEHDR\t\tlpWaveInHdr = MapSL(lpsegWaveInHdr);\n\n    TRACE(\"(%04X, %p, %u);\\n\", hWaveIn, lpWaveInHdr, uSize);\n\n    if (lpWaveInHdr == NULL) return MMSYSERR_INVALHANDLE;\n\n    return MMSYSTDRV_Message(HWAVEIN_32(hWaveIn), WIDM_PREPARE, lpsegWaveInHdr, uSize);\n}\n\n/**************************************************************************\n * \t\t\t\twaveInUnprepareHeader\t[MMSYSTEM.507]\n */\nUINT16 WINAPI waveInUnprepareHeader16(HWAVEIN16 hWaveIn,       /* [in] */\n\t\t\t\t      SEGPTR lpsegWaveInHdr,   /* [???] */\n\t\t\t\t      UINT16 uSize)            /* [in] */\n{\n    LPWAVEHDR\t\tlpWaveInHdr = MapSL(lpsegWaveInHdr);\n\n    TRACE(\"(%04X, %08x, %u);\\n\", hWaveIn, lpsegWaveInHdr, uSize);\n\n    if (lpWaveInHdr == NULL) return MMSYSERR_INVALPARAM;\n\n    if (!(lpWaveInHdr->dwFlags & WHDR_PREPARED)) {\n\treturn MMSYSERR_NOERROR;\n    }\n\n    return MMSYSTDRV_Message(HWAVEIN_32(hWaveIn), WIDM_UNPREPARE, lpsegWaveInHdr, uSize);\n}\n\n/**************************************************************************\n * \t\t\t\twaveInAddBuffer\t\t[MMSYSTEM.508]\n */\nUINT16 WINAPI waveInAddBuffer16(HWAVEIN16 hWaveIn,       /* [in] */\n\t\t\t\tSEGPTR lpsegWaveInHdr,   /* [???] */\n\t\t\t\tUINT16 uSize)            /* [in] */\n{\n    TRACE(\"(%04X, %08x, %u);\\n\", hWaveIn, lpsegWaveInHdr, uSize);\n\n    if (lpsegWaveInHdr == 0) return MMSYSERR_INVALPARAM;\n\n    return MMSYSTDRV_Message(HWAVEIN_32(hWaveIn), WIDM_ADDBUFFER, lpsegWaveInHdr, uSize);\n}\n\n/**************************************************************************\n * \t\t\t\twaveInReset\t\t[MMSYSTEM.511]\n */\nUINT16 WINAPI waveInReset16(HWAVEIN16 hWaveIn16)\n{\n    DWORD\tlevel;\n    UINT16\tret;\n\n    ReleaseThunkLock(&level);\n    ret = waveInReset(HWAVEIN_32(hWaveIn16));\n    RestoreThunkLock(level);\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\twaveInStart\t\t[MMSYSTEM.509]\n */\nUINT16 WINAPI waveInStart16(HWAVEIN16 hWaveIn16)\n{\n    DWORD\tlevel;\n    UINT16\tret;\n\n    ReleaseThunkLock(&level);\n    ret = waveInStart(HWAVEIN_32(hWaveIn16));\n    RestoreThunkLock(level);\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\twaveInStop\t\t[MMSYSTEM.510]\n */\nUINT16 WINAPI waveInStop16(HWAVEIN16 hWaveIn16)\n{\n    DWORD\tlevel;\n    UINT16\tret;\n\n    ReleaseThunkLock(&level);\n    ret = waveInStop(HWAVEIN_32(hWaveIn16));\n    RestoreThunkLock(level);\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\twaveInGetPosition\t[MMSYSTEM.512]\n */\nUINT16 WINAPI waveInGetPosition16(HWAVEIN16 hWaveIn, LPMMTIME16 lpTime,\n                                  UINT16 uSize)\n{\n    UINT\tret;\n    MMTIME\tmmt;\n\n    mmt.wType = lpTime->wType;\n    ret = waveInGetPosition(HWAVEIN_32(hWaveIn), &mmt, sizeof(mmt));\n    MMSYSTEM_MMTIME32to16(lpTime, &mmt);\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\twaveInGetID\t\t\t[MMSYSTEM.513]\n */\nUINT16 WINAPI waveInGetID16(HWAVEIN16 hWaveIn, UINT16* lpuDeviceID)\n{\n    UINT        devid;\n    UINT16      ret;\n\n    ret = waveInGetID(HWAVEIN_32(hWaveIn), &devid);\n    if (ret != MMSYSERR_NOERROR) return ret;\n    *lpuDeviceID = devid;\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\twaveInMessage \t\t[MMSYSTEM.514]\n */\nDWORD WINAPI waveInMessage16(HWAVEIN16 hWaveIn, UINT16 uMessage,\n                             DWORD dwParam1, DWORD dwParam2)\n{\n    TRACE(\"(%04x, %u, %d, %d)\\n\", hWaveIn, uMessage, dwParam1, dwParam2);\n\n    if ((DWORD_PTR)hWaveIn < waveInGetNumDevs())\n    {\n        if (uMessage == DRV_QUERYDRVENTRY || uMessage == DRV_QUERYDEVNODE)\n            dwParam1 = (DWORD)MapSL(dwParam1);\n    }\n    else if (uMessage < DRVM_IOCTL || (uMessage >= DRVM_IOCTL_LAST && uMessage < DRVM_MAPPER))\n        /* from M$ KB */\n        return MMSYSERR_INVALPARAM;\n\n    return MMSYSTDRV_Message(HWAVEIN_32(hWaveIn), uMessage, dwParam1, dwParam2);\n}\n\n/* ###################################################\n * #                     TASK                        #\n * ###################################################\n */\n\n/*#define USE_MM_TSK_WINE*/\n\n/**************************************************************************\n * \t\t\t\tmmTaskCreate\t\t[MMSYSTEM.900]\n *\n * Creates a 16 bit MM task. Its entry point is lpFunc, and it should be\n * called upon creation with dwPmt as parameter.\n */\nHINSTANCE16 WINAPI mmTaskCreate16(SEGPTR spProc, HINSTANCE16 *lphMmTask, DWORD dwPmt)\n{\n    HINSTANCE16 \tret;\n    HINSTANCE16\t\thandle;\n    char cmdline[16];\n    DWORD showCmd = 0x40002;\n    LOADPARAMS16 lp;\n\n    TRACE(\"(%08x, %p, %08x);\\n\", spProc, lphMmTask, dwPmt);\n    /* This to work requires NE modules to be started with a binary command line\n     * which is not currently the case. A patch exists but has never been committed.\n     * A workaround would be to integrate code for mmtask.tsk into Wine, but\n     * this requires tremendous work (starting with patching tools/build to\n     * create NE executables (and not only DLLs) for builtins modules.\n     * EP 99/04/25\n     */\n    FIXME(\"This is currently broken. It will fail\\n\");\n\n    cmdline[0] = 0x0d;\n    *(LPDWORD)(cmdline + 1) = (DWORD)spProc;\n    *(LPDWORD)(cmdline + 5) = dwPmt;\n    *(LPDWORD)(cmdline + 9) = 0;\n\n    lp.hEnvironment = 0;\n    lp.cmdLine = MapLS(cmdline);\n    lp.showCmd = MapLS(&showCmd);\n    lp.reserved = 0;\n\n#ifndef USE_MM_TSK_WINE\n    handle = LoadModule16(\"c:\\\\windows\\\\system\\\\mmtask.tsk\", &lp);\n#else\n    handle = LoadModule16(\"mmtask.tsk\", &lp);\n#endif\n    if (handle < 32) {\n\tret = (handle) ? 1 : 2;\n\thandle = 0;\n    } else {\n\tret = 0;\n    }\n    if (lphMmTask)\n\t*lphMmTask = handle;\n\n    UnMapLS( lp.cmdLine );\n    UnMapLS( lp.showCmd );\n    TRACE(\"=> 0x%04x/%d\\n\", handle, ret);\n    return ret;\n}\n\n#ifdef USE_MM_TSK_WINE\n/* C equivalent to mmtask.tsk binary content */\nvoid\tmmTaskEntryPoint16(LPSTR cmdLine, WORD di, WORD si)\n{\n    int\tlen = cmdLine[0x80];\n\n    if (len / 2 == 6) {\n\tvoid\t(*fpProc)(DWORD) = MapSL(*((DWORD*)(cmdLine + 1)));\n\tDWORD\tdwPmt  = *((DWORD*)(cmdLine + 5));\n\n#if 0\n\tInitTask16(); /* FIXME: pmts / from context ? */\n\tInitApp(di);\n#endif\n\tif (SetMessageQueue16(0x40)) {\n\t    WaitEvent16(0);\n\t    if (HIWORD(fpProc)) {\n\t\tOldYield16();\n/* EPP \t\tStackEnter16(); */\n\t\t(fpProc)(dwPmt);\n\t    }\n\t}\n    }\n    OldYield16();\n    OldYield16();\n    OldYield16();\n    ExitProcess(0);\n}\n#endif\n\n/**************************************************************************\n * \t\t\t\tmmTaskBlock\t\t[MMSYSTEM.902]\n */\nvoid WINAPI mmTaskBlock16(HINSTANCE16 hInst)\n{\n    MSG\t\tmsg;\n\n    do {\n\tGetMessageA(&msg, 0, 0, 0);\n\tif (msg.hwnd) {\n\t    TranslateMessage(&msg);\n\t    DispatchMessageA(&msg);\n\t}\n    } while (msg.message < 0x3A0);\n}\n\n/**************************************************************************\n * \t\t\t\tmmTaskSignal\t\t[MMSYSTEM.903]\n */\nLRESULT\tWINAPI mmTaskSignal16(HTASK16 ht)\n{\n    TRACE(\"(%04x);\\n\", ht);\n    return PostThreadMessageW( HTASK_32(ht), WM_USER, 0, 0 );\n}\n\n/**************************************************************************\n * \t\t\t\tmmGetCurrentTask\t[MMSYSTEM.904]\n */\nHTASK16 WINAPI mmGetCurrentTask16(void)\n{\n    return GetCurrentTask();\n}\n\n/**************************************************************************\n * \t\t\t\tmmTaskYield\t\t[MMSYSTEM.905]\n */\nvoid\tWINAPI\tmmTaskYield16(void)\n{\n    MSG\t\tmsg;\n\n    if (PeekMessageA(&msg, 0, 0, 0, 0)) {\n\tWOWYield16();\n    }\n}\n\n/******************************************************************\n *\t\tWINMM_GetmmThread\n *\n *\n */\nstatic  WINE_MMTHREAD*\tWINMM_GetmmThread(HANDLE16 h)\n{\n    return MapSL(MAKESEGPTR(h, 0));\n}\n\nstatic\tvoid\tMMSYSTEM_ThreadBlock(WINE_MMTHREAD* lpMMThd)\n{\n    MSG\t\tmsg;\n    DWORD\tret;\n\n    if (lpMMThd->dwThreadID != GetCurrentThreadId())\n\tERR(\"Not called by thread itself\\n\");\n\n    for (;;) {\n\tResetEvent(lpMMThd->hEvent);\n\tif (InterlockedDecrement(&lpMMThd->dwSignalCount) >= 0)\n\t    break;\n\tInterlockedIncrement(&lpMMThd->dwSignalCount);\n\n\tTRACE(\"S1\\n\");\n\n\tret = MsgWaitForMultipleObjects(1, &lpMMThd->hEvent, FALSE, INFINITE, QS_ALLINPUT);\n\tswitch (ret) {\n\tcase WAIT_OBJECT_0:\t/* Event */\n\t    TRACE(\"S2.1\\n\");\n\t    break;\n\tcase WAIT_OBJECT_0 + 1:\t/* Msg */\n\t    TRACE(\"S2.2\\n\");\n\t    if (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) {\n\t\tTranslateMessage(&msg);\n\t\tDispatchMessageA(&msg);\n\t    }\n\t    break;\n\tdefault:\n\t    WARN(\"S2.x unsupported ret val 0x%08x\\n\", ret);\n\t}\n\tTRACE(\"S3\\n\");\n    }\n}\n\n/**************************************************************************\n * \t\t\t\tmmThreadBlock\t\t[MMSYSTEM.1122]\n */\nvoid\tWINAPI mmThreadBlock16(HANDLE16 hndl)\n{\n    TRACE(\"(%04x)!\\n\", hndl);\n\n    if (hndl) {\n\tWINE_MMTHREAD*\tlpMMThd = WINMM_GetmmThread(hndl);\n\n\tif (lpMMThd->hThread != 0) {\n\t    DWORD\tlc;\n\n\t    ReleaseThunkLock(&lc);\n\t    MMSYSTEM_ThreadBlock(lpMMThd);\n\t    RestoreThunkLock(lc);\n\t} else {\n\t    mmTaskBlock16(lpMMThd->hTask);\n\t}\n    }\n    TRACE(\"done\\n\");\n}\n\n/**************************************************************************\n * \t\t\t        __wine_mmThreadEntryPoint (MMSYSTEM.2047)\n */\nDWORD WINAPI WINE_mmThreadEntryPoint(LPVOID p)\n{\n    HANDLE16\t\thndl = (HANDLE16)(DWORD_PTR)p;\n    WINE_MMTHREAD*\tlpMMThd = WINMM_GetmmThread(hndl);\n\n    TRACE(\"(%04x %p)\\n\", hndl, lpMMThd);\n\n    lpMMThd->hTask = LOWORD(GetCurrentTask());\n    TRACE(\"[10-%p] setting hTask to 0x%08x\\n\", lpMMThd->hThread, lpMMThd->hTask);\n    lpMMThd->dwStatus = 0x10;\n    MMSYSTEM_ThreadBlock(lpMMThd);\n    TRACE(\"[20-%p]\\n\", lpMMThd->hThread);\n    lpMMThd->dwStatus = 0x20;\n    if (lpMMThd->fpThread) {\n\tWOWCallback16(lpMMThd->fpThread, lpMMThd->dwThreadPmt);\n    }\n    lpMMThd->dwStatus = 0x30;\n    TRACE(\"[30-%p]\\n\", lpMMThd->hThread);\n    while (lpMMThd->dwCounter) {\n\tSleep(1);\n\t/* WOWYield16();*/\n    }\n    TRACE(\"[XX-%p]\\n\", lpMMThd->hThread);\n    /* paranoia */\n    lpMMThd->dwSignature = WINE_MMTHREAD_DELETED;\n    /* close lpMMThread->hVxD directIO */\n    if (lpMMThd->hEvent)\n\tCloseHandle(lpMMThd->hEvent);\n    GlobalFree16(hndl);\n    TRACE(\"done\\n\");\n\n    return 0;\n}\n\nextern DWORD\tWINAPI\tGetProcessFlags(DWORD);\n\n/**************************************************************************\n * \t\t\t\tmmThreadCreate\t\t[MMSYSTEM.1120]\n *\n * undocumented\n * Creates a MM thread, calling fpThreadAddr(dwPmt).\n * dwFlags:\n * \tbit.0 set means create a 16 bit task instead of thread calling a 16 bit proc\n *\tbit.1 set means to open a VxD for this thread (unsupported)\n */\nLRESULT\tWINAPI mmThreadCreate16(FARPROC16 fpThreadAddr, LPHANDLE16 lpHndl, DWORD dwPmt, DWORD dwFlags)\n{\n    HANDLE16\t\thndl;\n    LRESULT\t\tret;\n\n    TRACE(\"(%p, %p, %08x, %08x)!\\n\", fpThreadAddr, lpHndl, dwPmt, dwFlags);\n\n    hndl = GlobalAlloc16(GMEM_SHARE|GMEM_ZEROINIT, sizeof(WINE_MMTHREAD));\n\n    if (hndl == 0) {\n\tret = 2;\n    } else {\n\tWINE_MMTHREAD*\tlpMMThd = WINMM_GetmmThread(hndl);\n\n#if 0\n\t/* force mmtask routines even if mmthread is required */\n\t/* this will work only if the patch about binary cmd line and NE tasks\n\t * is committed\n\t */\n\tdwFlags |= 1;\n#endif\n\n\tlpMMThd->dwSignature \t= WINE_MMTHREAD_CREATED;\n\tlpMMThd->dwCounter   \t= 0;\n\tlpMMThd->hThread     \t= 0;\n\tlpMMThd->dwThreadID  \t= 0;\n\tlpMMThd->fpThread    \t= (DWORD)fpThreadAddr;\n\tlpMMThd->dwThreadPmt \t= dwPmt;\n\tlpMMThd->dwSignalCount\t= 0;\n\tlpMMThd->hEvent      \t= 0;\n\tlpMMThd->hVxD        \t= 0;\n\tlpMMThd->dwStatus    \t= 0;\n\tlpMMThd->dwFlags     \t= dwFlags;\n\tlpMMThd->hTask       \t= 0;\n\n\tif ((dwFlags & 1) == 0 && (GetProcessFlags(GetCurrentThreadId()) & 8) == 0) {\n\t    lpMMThd->hEvent = CreateEventW(NULL, FALSE, TRUE, NULL);\n\n\t    TRACE(\"Let's go crazy... trying new MM thread. lpMMThd=%p\\n\", lpMMThd);\n\t    if (lpMMThd->dwFlags & 2) {\n\t\t/* as long as we don't support MM VxD in wine, we don't need\n\t\t * to care about this flag\n\t\t */\n\t\t/* FIXME(\"Don't know how to properly open VxD handles\\n\"); */\n\t\t/* lpMMThd->hVxD = OpenVxDHandle(lpMMThd->hEvent); */\n\t    }\n\n\t    lpMMThd->hThread = CreateThread(0, 0, WINE_mmThreadEntryPoint,\n\t\t\t\t\t    (LPVOID)(DWORD_PTR)hndl, CREATE_SUSPENDED, &lpMMThd->dwThreadID);\n\t    if (lpMMThd->hThread == 0) {\n\t\tWARN(\"Couldn't create thread\\n\");\n\t\t/* clean-up(VxDhandle...); devicedirectio... */\n\t\tif (lpMMThd->hEvent != 0)\n\t\t    CloseHandle(lpMMThd->hEvent);\n\t\tret = 2;\n\t    } else {\n                SetThreadPriority(lpMMThd->hThread, THREAD_PRIORITY_TIME_CRITICAL);\n\t\tTRACE(\"Got a nice thread hndl=%p id=0x%08x\\n\", lpMMThd->hThread, lpMMThd->dwThreadID);\n\t\tret = 0;\n\t    }\n\t} else {\n\t    /* get WINE_mmThreadEntryPoint()\n\t     * 2047 is its ordinal in mmsystem.spec\n\t     */\n\t    FARPROC16\tfp = GetProcAddress16(GetModuleHandle16(\"MMSYSTEM\"), (LPCSTR)2047);\n\n\t    TRACE(\"farproc seg=0x%p lin=%p\\n\", fp, MapSL((SEGPTR)fp));\n\n\t    ret = (fp == 0) ? 2 : mmTaskCreate16((DWORD)fp, 0, hndl);\n\t}\n\n\tif (ret == 0) {\n\t    if (lpMMThd->hThread && !ResumeThread(lpMMThd->hThread))\n\t\tWARN(\"Couldn't resume thread\\n\");\n\n\t    while (lpMMThd->dwStatus != 0x10) { /* test also HIWORD of dwStatus */\n                MSG msg;\n                PeekMessageW( &msg, 0, 0, 0, PM_REMOVE | PM_QS_SENDMESSAGE );\n\t    }\n\t}\n    }\n\n    if (ret != 0) {\n\tGlobalFree16(hndl);\n\thndl = 0;\n    }\n\n    if (lpHndl)\n\t*lpHndl = hndl;\n\n    TRACE(\"ok => %ld\\n\", ret);\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tmmThreadSignal\t\t[MMSYSTEM.1121]\n */\nvoid WINAPI mmThreadSignal16(HANDLE16 hndl)\n{\n    TRACE(\"(%04x)!\\n\", hndl);\n\n    if (hndl) {\n\tWINE_MMTHREAD*\tlpMMThd = WINMM_GetmmThread(hndl);\n\n\tlpMMThd->dwCounter++;\n\tif (lpMMThd->hThread != 0) {\n\t    InterlockedIncrement(&lpMMThd->dwSignalCount);\n\t    SetEvent(lpMMThd->hEvent);\n\t} else {\n\t    mmTaskSignal16(lpMMThd->hTask);\n\t}\n\tlpMMThd->dwCounter--;\n    }\n}\n\n/**************************************************************************\n * \t\t\t\tmmThreadIsCurrent\t[MMSYSTEM.1123]\n */\nBOOL16\tWINAPI mmThreadIsCurrent16(HANDLE16 hndl)\n{\n    BOOL16\t\tret = FALSE;\n\n    TRACE(\"(%04x)!\\n\", hndl);\n\n    if (hndl && mmThreadIsValid16(hndl)) {\n\tWINE_MMTHREAD*\tlpMMThd = WINMM_GetmmThread(hndl);\n\tret = (GetCurrentThreadId() == lpMMThd->dwThreadID);\n    }\n    TRACE(\"=> %d\\n\", ret);\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tmmThreadIsValid\t\t[MMSYSTEM.1124]\n */\nBOOL16\tWINAPI\tmmThreadIsValid16(HANDLE16 hndl)\n{\n    BOOL16\t\tret = FALSE;\n\n    TRACE(\"(%04x)!\\n\", hndl);\n\n    if (hndl) {\n\tWINE_MMTHREAD*\tlpMMThd = WINMM_GetmmThread(hndl);\n\n\tif (!IsBadWritePtr(lpMMThd, sizeof(WINE_MMTHREAD)) &&\n\t    lpMMThd->dwSignature == WINE_MMTHREAD_CREATED &&\n\t    IsTask16(lpMMThd->hTask)) {\n\t    lpMMThd->dwCounter++;\n\t    if (lpMMThd->hThread != 0) {\n\t\tDWORD\tdwThreadRet;\n\t\tif (GetExitCodeThread(lpMMThd->hThread, &dwThreadRet) &&\n\t\t    dwThreadRet == STATUS_PENDING) {\n\t\t    ret = TRUE;\n\t\t}\n\t    } else {\n\t\tret = TRUE;\n\t    }\n\t    lpMMThd->dwCounter--;\n\t}\n    }\n    TRACE(\"=> %d\\n\", ret);\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tmmThreadGetTask\t\t[MMSYSTEM.1125]\n */\nHANDLE16 WINAPI mmThreadGetTask16(HANDLE16 hndl)\n{\n    HANDLE16\tret = 0;\n\n    TRACE(\"(%04x)\\n\", hndl);\n\n    if (mmThreadIsValid16(hndl)) {\n\tWINE_MMTHREAD*\tlpMMThd = WINMM_GetmmThread(hndl);\n\tret = lpMMThd->hTask;\n    }\n    return ret;\n}\n\ntypedef\tBOOL16 (WINAPI *MMCPLCALLBACK)(HWND, LPCSTR, LPCSTR, LPCSTR);\n\n/**************************************************************************\n * \t\t\tmmShowMMCPLPropertySheet\t[MMSYSTEM.1150]\n */\nBOOL16\tWINAPI\tmmShowMMCPLPropertySheet16(HWND hWnd, LPCSTR lpStrDevice,\n\t\t\t\t\t   LPCSTR lpStrTab, LPCSTR lpStrTitle)\n{\n    HANDLE\thndl;\n    BOOL16\tret = FALSE;\n\n    TRACE(\"(%p \\\"%s\\\" \\\"%s\\\" \\\"%s\\\")\\n\", hWnd, lpStrDevice, lpStrTab, lpStrTitle);\n\n    hndl = LoadLibraryA(\"MMSYS.CPL\");\n    if (hndl != 0) {\n\tMMCPLCALLBACK\tfp = (MMCPLCALLBACK)GetProcAddress(hndl, \"ShowMMCPLPropertySheet\");\n\tif (fp != NULL) {\n\t    DWORD\tlc;\n\t    ReleaseThunkLock(&lc);\n\t    ret = (fp)(hWnd, lpStrDevice, lpStrTab, lpStrTitle);\n\t    RestoreThunkLock(lc);\n\t}\n\tFreeLibrary(hndl);\n    }\n\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\tStackEnter\t\t[MMSYSTEM.32]\n */\nvoid WINAPI StackEnter16(void)\n{\n#ifdef __i386__\n    /* mmsystem.dll from Win 95 does only this: so does Wine */\n    //__asm__(\"stc\");\n#endif\n}\n\n/**************************************************************************\n * \t\t\tStackLeave\t\t[MMSYSTEM.33]\n */\nvoid WINAPI StackLeave16(void)\n{\n#ifdef __i386__\n    /* mmsystem.dll from Win 95 does only this: so does Wine */\n    //__asm__(\"stc\");\n#endif\n}\n\n/**************************************************************************\n * \t\t\tWMMMidiRunOnce\t \t[MMSYSTEM.8]\n */\nvoid WINAPI WMMMidiRunOnce16(void)\n{\n    FIXME(\"(), stub!\\n\");\n}\n\n\n\n/* ###################################################\n * #                     JOYSTICK                    #\n * ###################################################\n */\n\n/**************************************************************************\n * \t\t\t\tjoyGetNumDevs\t\t[MMSYSTEM.101]\n */\nUINT16 WINAPI joyGetNumDevs16(void)\n{\n    return joyGetNumDevs();\n}\n\n/**************************************************************************\n * \t\t\t\tjoyGetDevCaps\t\t[MMSYSTEM.102]\n */\nMMRESULT16 WINAPI joyGetDevCaps16(UINT16 wID, LPJOYCAPS16 lpCaps, UINT16 wSize)\n{\n    JOYCAPSA\tjca;\n    MMRESULT\tret;\n\n    if (lpCaps == NULL) return MMSYSERR_INVALPARAM;\n\n    ret = joyGetDevCapsA(wID, &jca, sizeof(jca));\n\n    if (ret != JOYERR_NOERROR) return ret;\n    lpCaps->wMid = jca.wMid;\n    lpCaps->wPid = jca.wPid;\n    strcpy(lpCaps->szPname, jca.szPname);\n    lpCaps->wXmin = jca.wXmin;\n    lpCaps->wXmax = jca.wXmax;\n    lpCaps->wYmin = jca.wYmin;\n    lpCaps->wYmax = jca.wYmax;\n    lpCaps->wZmin = jca.wZmin;\n    lpCaps->wZmax = jca.wZmax;\n    lpCaps->wNumButtons = jca.wNumButtons;\n    lpCaps->wPeriodMin = jca.wPeriodMin;\n    lpCaps->wPeriodMax = jca.wPeriodMax;\n\n    if (wSize >= sizeof(JOYCAPS16)) { /* Win95 extensions ? */\n\tlpCaps->wRmin = jca.wRmin;\n\tlpCaps->wRmax = jca.wRmax;\n\tlpCaps->wUmin = jca.wUmin;\n\tlpCaps->wUmax = jca.wUmax;\n\tlpCaps->wVmin = jca.wVmin;\n\tlpCaps->wVmax = jca.wVmax;\n\tlpCaps->wCaps = jca.wCaps;\n\tlpCaps->wMaxAxes = jca.wMaxAxes;\n\tlpCaps->wNumAxes = jca.wNumAxes;\n\tlpCaps->wMaxButtons = jca.wMaxButtons;\n\tstrcpy(lpCaps->szRegKey, jca.szRegKey);\n\tstrcpy(lpCaps->szOEMVxD, jca.szOEMVxD);\n    }\n\n    return ret;\n}\n\n/**************************************************************************\n *                              joyGetPosEx           [MMSYSTEM.110]\n */\nMMRESULT16 WINAPI joyGetPosEx16(UINT16 wID, LPJOYINFOEX lpInfo)\n{\n    return joyGetPosEx(wID, lpInfo);\n}\n\n/**************************************************************************\n * \t\t\t\tjoyGetPos\t       \t[MMSYSTEM.103]\n */\nMMRESULT16 WINAPI joyGetPos16(UINT16 wID, LPJOYINFO16 lpInfo)\n{\n    JOYINFO\tji;\n    MMRESULT\tret;\n\n    TRACE(\"(%d, %p);\\n\", wID, lpInfo);\n\n    if ((ret = joyGetPos(wID, &ji)) == JOYERR_NOERROR) {\n\tlpInfo->wXpos = ji.wXpos;\n\tlpInfo->wYpos = ji.wYpos;\n\tlpInfo->wZpos = ji.wZpos;\n\tlpInfo->wButtons = ji.wButtons;\n    }\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tjoyGetThreshold\t\t[MMSYSTEM.104]\n */\nMMRESULT16 WINAPI joyGetThreshold16(UINT16 wID, LPUINT16 lpThreshold)\n{\n    UINT        t;\n    MMRESULT    ret;\n\n    ret = joyGetThreshold(wID, &t);\n    if (ret == JOYERR_NOERROR)\n        *lpThreshold = t;\n    return ret;\n}\n\n/**************************************************************************\n * \t\t\t\tjoyReleaseCapture\t[MMSYSTEM.105]\n */\nMMRESULT16 WINAPI joyReleaseCapture16(UINT16 wID)\n{\n    return joyReleaseCapture(wID);\n}\n\n/**************************************************************************\n * \t\t\t\tjoySetCapture\t\t[MMSYSTEM.106]\n */\nMMRESULT16 WINAPI joySetCapture16(HWND16 hWnd, UINT16 wID, UINT16 wPeriod, BOOL16 bChanged)\n{\n    return joySetCapture(HWND_32(hWnd), wID, wPeriod, bChanged);\n}\n\n/**************************************************************************\n * \t\t\t\tjoySetThreshold\t\t[MMSYSTEM.107]\n */\nMMRESULT16 WINAPI joySetThreshold16(UINT16 wID, UINT16 wThreshold)\n{\n    return joySetThreshold(wID,wThreshold);\n}\n\n/**************************************************************************\n * \t\t\t\tjoySetCalibration\t[MMSYSTEM.109]\n */\nMMRESULT16 WINAPI joySetCalibration16(UINT16 wID)\n{\n    FIXME(\"(%04X): stub.\\n\", wID);\n    return JOYERR_NOCANDO;\n}\n"
  },
  {
    "path": "mmsystem/mmsystem.def",
    "content": "; File generated automatically from ..\\mmsystem\\mmsystem.dll16.spec; do not edit!\n\nLIBRARY mmsystem.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n  DrvOpen16\n  xlate_str_handle\n"
  },
  {
    "path": "mmsystem/mmsystem.dll16.spec",
    "content": "1      pascal  WEP(word word word ptr) MMSYSTEM_WEP\n2      pascal  sndPlaySound(ptr word) sndPlaySound16\n3      pascal  PlaySound(ptr word long) PlaySound16\n4      pascal  DllEntryPoint(long word word word long word) MMSYSTEM_LibMain\n5      pascal  mmsystemGetVersion() mmsystemGetVersion16\n6      pascal  DriverProc(long word word long long) DriverProc16\n8      pascal  WMMMidiRunOnce() WMMMidiRunOnce16\n30     pascal -ret16 OutputDebugStr(str) OutputDebugStr16\n31     pascal  DriverCallback(long word word word long long long) DriverCallback16\n32     pascal  StackEnter() StackEnter16\n33     pascal  StackLeave() StackLeave16\n34     stub    MMDRVINSTALL\n101    pascal  joyGetNumDevs() joyGetNumDevs16\n102    pascal  joyGetDevCaps(word ptr word) joyGetDevCaps16\n103    pascal  joyGetPos(word ptr) joyGetPos16\n104    pascal  joyGetThreshold(word ptr) joyGetThreshold16\n105    pascal  joyReleaseCapture(word) joyReleaseCapture16\n106    pascal  joySetCapture(word word word word) joySetCapture16\n107    pascal  joySetThreshold(word word) joySetThreshold16\n109    pascal  joySetCalibration(word) joySetCalibration16\n110    pascal  joyGetPosEx(word ptr) joyGetPosEx16\n111    stub    JOYCONFIGCHANGED\n201    pascal  midiOutGetNumDevs() midiOutGetNumDevs16\n202    pascal  midiOutGetDevCaps(word ptr word) midiOutGetDevCaps16\n203    pascal  midiOutGetErrorText(word ptr word) midiOutGetErrorText16\n204    pascal  midiOutOpen(ptr word long long long) midiOutOpen16\n205    pascal  midiOutClose(word) midiOutClose16\n206    pascal  midiOutPrepareHeader(word segptr word) midiOutPrepareHeader16\n207    pascal  midiOutUnprepareHeader(word segptr word) midiOutUnprepareHeader16\n208    pascal  midiOutShortMsg(word long) midiOutShortMsg16\n209    pascal  midiOutLongMsg(word segptr word) midiOutLongMsg16\n210    pascal  midiOutReset(word) midiOutReset16\n211    pascal  midiOutGetVolume(word ptr) midiOutGetVolume16\n212    pascal  midiOutSetVolume(word long) midiOutSetVolume16\n213    pascal  midiOutCachePatches(word word ptr word) midiOutCachePatches16\n214    pascal  midiOutCacheDrumPatches(word word ptr word) midiOutCacheDrumPatches16\n215    pascal  midiOutGetID(word ptr) midiOutGetID16\n216    pascal  midiOutMessage(word word long long) midiOutMessage16\n250    pascal  midiStreamProperty(word ptr long) midiStreamProperty16\n251    pascal  midiStreamOpen(ptr ptr long long long long) midiStreamOpen16\n252    pascal  midiStreamClose(word) midiStreamClose16\n253    pascal  midiStreamPosition(word ptr word) midiStreamPosition16\n254    pascal  midiStreamOut(word ptr word) midiStreamOut16\n255    pascal  midiStreamPause(word) midiStreamPause16\n256    pascal  midiStreamRestart(word) midiStreamRestart16\n257    pascal  midiStreamStop(word) midiStreamStop16\n301    pascal  midiInGetNumDevs() midiInGetNumDevs16\n302    pascal  midiInGetDevCaps(word ptr word) midiInGetDevCaps16\n303    pascal  midiInGetErrorText(word ptr word) midiOutGetErrorText16\n304    pascal  midiInOpen(ptr word long long long) midiInOpen16\n305    pascal  midiInClose(word) midiInClose16\n306    pascal  midiInPrepareHeader(word segptr word) midiInPrepareHeader16\n307    pascal  midiInUnprepareHeader(word segptr word) midiInUnprepareHeader16\n308    pascal  midiInAddBuffer(word segptr word) midiInAddBuffer16\n309    pascal  midiInStart(word) midiInStart16\n310    pascal  midiInStop(word) midiInStop16\n311    pascal  midiInReset(word) midiInReset16\n312    pascal  midiInGetID(word ptr) midiInGetID16\n313    pascal  midiInMessage(word word long long) midiInMessage16\n350    pascal  auxGetNumDevs() auxGetNumDevs16\n351    pascal  auxGetDevCaps(word ptr word) auxGetDevCaps16\n352    pascal  auxGetVolume(word ptr) auxGetVolume16\n353    pascal  auxSetVolume(word long) auxSetVolume16\n354    pascal  auxOutMessage(word word long long) auxOutMessage16\n401    pascal  waveOutGetNumDevs() waveOutGetNumDevs16\n402    pascal  waveOutGetDevCaps(word ptr word) waveOutGetDevCaps16\n403    pascal  waveOutGetErrorText(word ptr word) waveOutGetErrorText16\n404    pascal  waveOutOpen(ptr word ptr long long long) waveOutOpen16\n405    pascal  waveOutClose(word) waveOutClose16\n406    pascal  waveOutPrepareHeader(word segptr word) waveOutPrepareHeader16\n407    pascal  waveOutUnprepareHeader(word segptr word) waveOutUnprepareHeader16\n408    pascal  waveOutWrite(word segptr word) waveOutWrite16\n409    pascal  waveOutPause(word) waveOutPause16\n410    pascal  waveOutRestart(word) waveOutRestart16\n411    pascal  waveOutReset(word) waveOutReset16\n412    pascal  waveOutGetPosition(word ptr word) waveOutGetPosition16\n413    pascal  waveOutGetPitch(word ptr) waveOutGetPitch16\n414    pascal  waveOutSetPitch(word long) waveOutSetPitch16\n415    pascal  waveOutGetVolume(word ptr) waveOutGetVolume16\n416    pascal  waveOutSetVolume(word long) waveOutSetVolume16\n417    pascal  waveOutGetPlaybackRate(word ptr) waveOutGetPlaybackRate16\n418    pascal  waveOutSetPlaybackRate(word long) waveOutSetPlaybackRate16\n419    pascal  waveOutBreakLoop(word) waveOutBreakLoop16\n420    pascal  waveOutGetID(word ptr) waveOutGetID16\n421    pascal  waveOutMessage(word word long long) waveOutMessage16\n501    pascal  waveInGetNumDevs() waveInGetNumDevs16\n502    pascal  waveInGetDevCaps(word ptr word) waveInGetDevCaps16\n503    pascal  waveInGetErrorText(word ptr word) waveOutGetErrorText16\n504    pascal  waveInOpen(ptr word ptr long long long) waveInOpen16\n505    pascal  waveInClose(word) waveInClose16\n506    pascal  waveInPrepareHeader(word segptr word) waveInPrepareHeader16\n507    pascal  waveInUnprepareHeader(word segptr word) waveInUnprepareHeader16\n508    pascal  waveInAddBuffer(word segptr word) waveInAddBuffer16\n509    pascal  waveInStart(word) waveInStart16\n510    pascal  waveInStop(word) waveInStop16\n511    pascal  waveInReset(word) waveInReset16\n512    pascal  waveInGetPosition(word ptr word) waveInGetPosition16\n513    pascal  waveInGetID(word ptr) waveInGetID16\n514    pascal  waveInMessage(word word long long) waveInMessage16\n601    pascal  timeGetSystemTime(ptr word) timeGetSystemTime16\n602    pascal  timeSetEvent(word word segptr long word) timeSetEvent16\n603    pascal  timeKillEvent(word) timeKillEvent16\n604    pascal  timeGetDevCaps(ptr word) timeGetDevCaps16\n605    pascal  timeBeginPeriod(word) timeBeginPeriod16\n606    pascal  timeEndPeriod(word) timeEndPeriod16\n607    pascal  timeGetTime() timeGetTime16\n701    pascal  mciSendCommand(word word long long) mciSendCommand16\n702    pascal  mciSendString(str ptr word word) mciSendString16\n703    pascal  mciGetDeviceID(ptr) mciGetDeviceID16\n705    pascal  mciLoadCommandResource(word str word) mciLoadCommandResource16\n706    pascal  mciGetErrorString(long ptr word) mciGetErrorString16\n707    pascal  mciSetDriverData(word long) mciSetDriverData16\n708    pascal  mciGetDriverData(word) mciGetDriverData16\n710    pascal  mciDriverYield(word) mciDriverYield16\n711    pascal  mciDriverNotify(word word word) mciDriverNotify16\n712    pascal  mciExecute(ptr) mciExecute16\n713    pascal  mciFreeCommandResource(word) mciFreeCommandResource16\n714    pascal  mciSetYieldProc(word ptr long) mciSetYieldProc16\n715    pascal  mciGetDeviceIDFromElementID(long ptr) mciGetDeviceIDFromElementID16\n716    pascal  mciGetYieldProc(word ptr) mciGetYieldProc16\n717    pascal  mciGetCreatorTask(word) mciGetCreatorTask16\n800    pascal  mixerGetNumDevs() mixerGetNumDevs16\n801    pascal  mixerGetDevCaps(word ptr word) mixerGetDevCaps16\n802    pascal  mixerOpen(ptr word long long long) mixerOpen16\n803    pascal  mixerClose(word) mixerClose16\n804    pascal  mixerMessage(word word long long) mixerMessage16\n805    pascal  mixerGetLineInfo(word ptr long) mixerGetLineInfo16\n806    pascal  mixerGetID(word ptr long) mixerGetID16\n807    pascal  mixerGetLineControls(word ptr long) mixerGetLineControls16\n808    pascal  mixerGetControlDetails(word ptr long) mixerGetControlDetails16\n809    pascal  mixerSetControlDetails(word ptr long) mixerSetControlDetails16\n900    pascal  mmTaskCreate(long ptr long) mmTaskCreate16\n902    pascal  mmTaskBlock(word) mmTaskBlock16\n903    pascal  mmTaskSignal(word) mmTaskSignal16\n904    pascal -ret16 mmGetCurrentTask() mmGetCurrentTask16\n905    pascal  mmTaskYield() mmTaskYield16\n1100   pascal  DrvOpen(str str long) DrvOpen16\n1101   pascal  DrvClose(word long long) DrvClose16\n1102   pascal  DrvSendMessage(word word long long) DrvSendMessage16\n1103   pascal  DrvGetModuleHandle(word) DrvGetModuleHandle16\n1104   pascal  DrvDefDriverProc(long word word long long) DrvDefDriverProc16\n1120   pascal  mmThreadCreate(segptr ptr long long) mmThreadCreate16\n1121   pascal  mmThreadSignal(word) mmThreadSignal16\n1122   pascal  mmThreadBlock(word) mmThreadBlock16\n1123   pascal  mmThreadIsCurrent(word) mmThreadIsCurrent16\n1124   pascal  mmThreadIsValid(word) mmThreadIsValid16\n1125   pascal  mmThreadGetTask(word) mmThreadGetTask16\n1150   pascal  mmShowMMCPLPropertySheet(word str str str) mmShowMMCPLPropertySheet16\n\n1210   pascal  mmioOpen(str ptr long) mmioOpen16\n1211   pascal  mmioClose(word word) mmioClose16\n1212   pascal  mmioRead(word ptr long) mmioRead16\n1213   pascal  mmioWrite(word ptr long) mmioWrite16\n1214   pascal  mmioSeek(word long word) mmioSeek16\n1215   pascal  mmioGetInfo(word ptr word) mmioGetInfo16\n1216   pascal  mmioSetInfo(word ptr word) mmioSetInfo16\n1217   pascal  mmioSetBuffer(word segptr long word) mmioSetBuffer16\n1218   pascal  mmioFlush(word word) mmioFlush16\n1219   pascal  mmioAdvance(word ptr word) mmioAdvance16\n1220   pascal  mmioStringToFOURCC(str word) mmioStringToFOURCC16\n1221   pascal  mmioInstallIOProc(long segptr long) mmioInstallIOProc16\n1222   pascal  mmioSendMessage(word word long long) mmioSendMessage16\n1223   pascal  mmioDescend(word ptr ptr word) mmioDescend16\n1224   pascal  mmioAscend(word ptr word) mmioAscend16\n1225   pascal  mmioCreateChunk(word ptr word) mmioCreateChunk16\n1226   pascal  mmioRename(ptr ptr ptr long) mmioRename16\n\n#2000   stub    WINMMF_THUNKDATA16\n#2001   stub    RING3_DEVLOADER\n#2002   stub    WINMMTILEBUFFER\n#2003   stub    WINMMUNTILEBUFFER\n#2005   stub    MCIGETTHUNKTABLE\n#2006   stub    WINMMSL_THUNKDATA16\n\n# these are Wine only exported functions. Is there another way to do it ?\n2047   pascal  __wine_mmThreadEntryPoint(long) WINE_mmThreadEntryPoint\n\n@ stdcall -arch=win32 xlate_str_handle(ptr ptr)\n"
  },
  {
    "path": "mmsystem/mmsystem.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>mmsystem</RootNamespace>\n    <ProjectGuid>{249FBAE5-EC5D-4988-87AC-A4371D827BA4}</ProjectGuid>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>DECL_WINELIB_TYPE_AW(x)=;WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nwinmm.lib;user32.lib;ntdll.lib;advapi32.lib</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\nmmsystem.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\nmmsystem.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nwinmm.lib;user32.lib;ntdll.lib;advapi32.lib</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"driver.c\" />\n    <ClCompile Include=\"mci16.c\" />\n    <ClCompile Include=\"message16.c\" />\n    <ClCompile Include=\"mmio16.c\" />\n    <ClCompile Include=\"mmsystem.c\" />\n    <ClCompile Include=\"playsound.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"mmsystem.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"winemm16.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"mmsystem.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" MMSYSTEM &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" MMSYSTEM &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>\n"
  },
  {
    "path": "mmsystem/playsound.c",
    "content": "/* -*- tab-width: 8; c-basic-offset: 4 -*- */\n\n/*\n * MMSYSTEM functions\n *\n * Copyright 1993      Martin Ayotte\n *           1998-2002 Eric Pouech\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n#include <string.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"mmsystem.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n#include \"winreg.h\"\n#undef _WINTERNL_\n#define _WIN32_WINNT 0x600\n#include <winternl.h>\nNTSYSAPI BOOLEAN   WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING, LPCSTR);\n\n#include \"wine/debug.h\"\n#include \"wine/winuser16.h\"\n#include \"winemm16.h\"\n\n#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))\n\nstatic CRITICAL_SECTION WINMM_cs;\n\nstatic CRITICAL_SECTION_DEBUG critsect_debug =\n{\n    0, 0, &WINMM_cs,\n    { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },\n      0, 0, { (DWORD_PTR)(__FILE__ \": mmsystem_playsound_cs\") }\n};\n\nstatic CRITICAL_SECTION WINMM_cs = { &critsect_debug, -1, 0, 0, 0, 0 };\nstatic HANDLE psLastEvent = 0;\n\nWINE_DEFAULT_DEBUG_CHANNEL(winmm);\n\ntypedef struct tagWINE_PLAYSOUND\n{\n    unsigned                    bLoop : 1,\n                                bAlloc : 1;\n    LPCWSTR                     pszSound;\n    HMODULE                     hMod;\n    DWORD                       fdwSound;\n    HWAVEOUT                    hWave;\n} WINE_PLAYSOUND;\n\nstatic WINE_PLAYSOUND *PlaySoundCurrent;\nstatic BOOL bPlaySoundStop;\n\nstatic HMMIO\tget_mmioFromFile(LPCWSTR lpszName)\n{\n    HMMIO       ret;\n    WCHAR       buf[256];\n    LPWSTR      dummy;\n\n    ret = mmioOpenW((LPWSTR)lpszName, NULL,\n                    MMIO_ALLOCBUF | MMIO_READ | MMIO_DENYWRITE);\n    if (ret != 0) return ret;\n    if (SearchPathW(NULL, lpszName, L\".wav\", ARRAY_SIZE(buf), buf, &dummy))\n    {\n        return mmioOpenW(buf, NULL,\n                         MMIO_ALLOCBUF | MMIO_READ | MMIO_DENYWRITE);\n    }\n    return 0;\n}\n\nstatic HMMIO\tget_mmioFromProfile(UINT uFlags, LPCWSTR lpszName)\n{\n    WCHAR\tstr[128];\n    LPWSTR\tptr;\n    HMMIO  \thmmio;\n    HKEY        hRegSnd, hRegApp, hScheme, hSnd;\n    DWORD       err, type, count;\n\n    TRACE(\"searching in SystemSound list for %s\\n\", debugstr_w(lpszName));\n    GetProfileStringW(L\"Sounds\", lpszName, L\"\", str, ARRAY_SIZE(str));\n    if (!*str)\n    {\n\tif (uFlags & SND_NODEFAULT) goto next;\n\tGetProfileStringW(L\"Sounds\", L\"Default\", L\"\", str, ARRAY_SIZE(str));\n\tif (!*str) goto next;\n    }\n    for (ptr = str; *ptr && *ptr != ','; ptr++);\n    if (*ptr) *ptr = 0;\n    hmmio = mmioOpenW(str, NULL, MMIO_ALLOCBUF | MMIO_READ | MMIO_DENYWRITE);\n    if (hmmio != 0) return hmmio;\n next:\n    /* we look up the registry under\n     *      HKCU\\AppEvents\\Schemes\\Apps\\.Default\n     *      HKCU\\AppEvents\\Schemes\\Apps\\<AppName>\n     */\n    if (RegOpenKeyW(HKEY_CURRENT_USER, L\"AppEvents\\\\Schemes\\\\Apps\", &hRegSnd) != 0) goto none;\n    if (uFlags & SND_APPLICATION)\n    {\n        DWORD len;\n\n        err = 1; /* error */\n        len = GetModuleFileNameW(0, str, ARRAY_SIZE(str));\n        if (len > 0 && len < ARRAY_SIZE(str))\n        {\n            for (ptr = str + lstrlenW(str) - 1; ptr >= str; ptr--)\n            {\n                if (*ptr == '.') *ptr = 0;\n                if (*ptr == '\\\\')\n                {\n                    err = RegOpenKeyW(hRegSnd, ptr+1, &hRegApp);\n                    break;\n                }\n            }\n        }\n    }\n    else\n    {\n        err = RegOpenKeyW(hRegSnd, L\".Default\", &hRegApp);\n    }\n    RegCloseKey(hRegSnd);\n    if (err != 0) goto none;\n    err = RegOpenKeyW(hRegApp, lpszName, &hScheme);\n    RegCloseKey(hRegApp);\n    if (err != 0) goto none;\n    /* what's the difference between .Current and .Default ? */\n    err = RegOpenKeyW(hScheme, L\".Default\", &hSnd);\n    if (err != 0)\n    {\n        err = RegOpenKeyW(hScheme, L\".Current\", &hSnd);\n        RegCloseKey(hScheme);\n        if (err != 0)\n            goto none;\n    }\n    count = sizeof(str);\n    err = RegQueryValueExW(hSnd, NULL, 0, &type, (LPBYTE)str, &count);\n    RegCloseKey(hSnd);\n    if (err != 0 || !*str) goto none;\n    hmmio = mmioOpenW(str, NULL, MMIO_ALLOCBUF | MMIO_READ | MMIO_DENYWRITE);\n    if (hmmio) return hmmio;\n none:\n    WARN(\"can't find SystemSound=%s !\\n\", debugstr_w(lpszName));\n    return 0;\n}\n\nstruct playsound_data\n{\n    HANDLE\thEvent;\n    LONG\tdwEventCount;\n};\n\nstatic void CALLBACK PlaySound_Callback(HWAVEOUT hwo, UINT uMsg,\n\t\t\t\t\tDWORD_PTR dwInstance,\n\t\t\t\t\tDWORD_PTR dwParam1, DWORD_PTR dwParam2)\n{\n    struct playsound_data*\ts = (struct playsound_data*)dwInstance;\n\n    switch (uMsg) {\n    case WOM_OPEN:\n    case WOM_CLOSE:\n\tbreak;\n    case WOM_DONE:\n\tInterlockedIncrement(&s->dwEventCount);\n\tTRACE(\"Returning waveHdr=%Ix\\n\", dwParam1);\n\tSetEvent(s->hEvent);\n\tbreak;\n    default:\n\tERR(\"Unknown uMsg=%d\\n\", uMsg);\n    }\n}\n\nstatic void PlaySound_WaitDone(struct playsound_data* s)\n{\n    for (;;) {\n\tif (InterlockedDecrement(&s->dwEventCount) >= 0) break;\n\tInterlockedIncrement(&s->dwEventCount);\n\n\tWaitForSingleObject(s->hEvent, INFINITE);\n    }\n}\n\nstatic BOOL PlaySound_IsString(DWORD fdwSound, const void* psz)\n{\n    /* SND_RESOURCE is 0x40004 while\n     * SND_MEMORY is 0x00004\n     */\n    switch (fdwSound & (SND_RESOURCE|SND_ALIAS_ID|SND_FILENAME))\n    {\n    case SND_RESOURCE:  return HIWORD(psz) != 0; /* by name or by ID ? */\n    case SND_ALIAS_ID:\n    case SND_MEMORY:    return FALSE;\n    case SND_ALIAS:\n    case SND_FILENAME:\n    case SND_ALIAS|SND_FILENAME:\n    case 0:             return TRUE;\n    default:            FIXME(\"WTF\\n\"); return FALSE;\n    }\n}\n\nstatic void     PlaySound_Free(WINE_PLAYSOUND* wps)\n{\n    EnterCriticalSection(&WINMM_cs);\n    PlaySoundCurrent = NULL;\n    SetEvent(psLastEvent);\n    LeaveCriticalSection(&WINMM_cs);\n    if (wps->bAlloc) free((void*)wps->pszSound);\n    free(wps);\n}\n\nstatic WINE_PLAYSOUND*  PlaySound_Alloc(const void* pszSound, HMODULE hmod,\n                                        DWORD fdwSound, BOOL bUnicode)\n{\n    WINE_PLAYSOUND* wps;\n\n    wps = calloc(1, sizeof(*wps));\n    if (!wps) return NULL;\n\n    wps->hMod = hmod;\n    wps->fdwSound = fdwSound;\n    if (PlaySound_IsString(fdwSound, pszSound))\n    {\n        if (bUnicode)\n        {\n            if (fdwSound & SND_ASYNC)\n            {\n                wps->pszSound = wcsdup(pszSound);\n                if (!wps->pszSound) goto oom_error;\n                wps->bAlloc = TRUE;\n            }\n            else\n                wps->pszSound = pszSound;\n        }\n        else\n        {\n            UNICODE_STRING usBuffer;\n            if (!RtlCreateUnicodeStringFromAsciiz(&usBuffer, pszSound)) goto oom_error;\n            wps->pszSound = wcsdup(usBuffer.Buffer);\n            RtlFreeUnicodeString(&usBuffer);\n            if (!wps->pszSound) goto oom_error;\n            wps->bAlloc = TRUE;\n        }\n    }\n    else\n        wps->pszSound = pszSound;\n\n    return wps;\n oom_error:\n    if (wps->bAlloc) free((void*)wps->pszSound);\n    free(wps);\n    return NULL;\n}\n\nstatic DWORD WINAPI proc_PlaySound(LPVOID arg)\n{\n    WINE_PLAYSOUND*     wps = arg;\n    BOOL\t\tbRet = FALSE;\n    HMMIO\t\thmmio = 0;\n    MMCKINFO\t\tckMainRIFF;\n    MMCKINFO        \tmmckInfo;\n    LPWAVEFORMATEX      lpWaveFormat = NULL;\n    HWAVEOUT\t\thWave = 0;\n    LPWAVEHDR\t\twaveHdr = NULL;\n    INT\t\t\tcount, bufsize, left, index;\n    struct playsound_data\ts;\n    void*               data;\n    LONG                r;\n\n    s.hEvent = 0;\n\n    TRACE(\"SoundName=%s !\\n\", debugstr_w(wps->pszSound));\n\n    /* if resource, grab it */\n    if ((wps->fdwSound & SND_RESOURCE) == SND_RESOURCE) {\n        HRSRC\thRes;\n        HGLOBAL\thGlob;\n\n        if ((hRes = FindResource16(wps->hMod, wps->pszSound, L\"WAVE\")) == 0 ||\n            (hGlob = LoadResource16(wps->hMod, hRes)) == 0)\n            goto errCleanUp;\n        if ((data = LockResource16(hGlob)) == NULL) {\n            FreeResource16(hGlob);\n            goto errCleanUp;\n        }\n        FreeResource16(hGlob);\n    } else\n        data = (void*)wps->pszSound;\n\n    /* construct an MMIO stream (either in memory, or from a file */\n    if (wps->fdwSound & SND_MEMORY)\n    { /* NOTE: SND_RESOURCE has the SND_MEMORY bit set */\n\tMMIOINFO\tmminfo;\n\n\tmemset(&mminfo, 0, sizeof(mminfo));\n\tmminfo.fccIOProc = FOURCC_MEM;\n\tmminfo.pchBuffer = data;\n\tmminfo.cchBuffer = ((DWORD *)data)[1] + 8;\n\tTRACE(\"Memory sound %p\\n\", data);\n\thmmio = mmioOpenW(NULL, &mminfo, MMIO_READ);\n    }\n    if (!hmmio && wps->fdwSound & SND_ALIAS)\n    {\n        if ((wps->fdwSound & SND_ALIAS_ID) == SND_ALIAS_ID)\n        {\n            wps->fdwSound &= ~(SND_ALIAS_ID ^ SND_ALIAS);\n            if (wps->pszSound == (LPCWSTR)SND_ALIAS_SYSTEMASTERISK)\n                wps->pszSound =L\"SystemAsterisk\";\n            else if (wps->pszSound == (LPCWSTR)SND_ALIAS_SYSTEMDEFAULT)\n                wps->pszSound = L\"SystemDefault\";\n            else if (wps->pszSound == (LPCWSTR)SND_ALIAS_SYSTEMEXCLAMATION)\n                wps->pszSound = L\"SystemExclamation\";\n            else if (wps->pszSound == (LPCWSTR)SND_ALIAS_SYSTEMEXIT)\n                wps->pszSound = L\"SystemExit\";\n            else if (wps->pszSound == (LPCWSTR)SND_ALIAS_SYSTEMHAND)\n                wps->pszSound = L\"SystemHand\";\n            else if (wps->pszSound == (LPCWSTR)SND_ALIAS_SYSTEMQUESTION)\n                wps->pszSound = L\"SystemQuestion\";\n            else if (wps->pszSound == (LPCWSTR)SND_ALIAS_SYSTEMSTART)\n                wps->pszSound = L\"SystemStart\";\n            else if (wps->pszSound == (LPCWSTR)SND_ALIAS_SYSTEMWELCOME)\n                wps->pszSound = L\"SystemWelcome\";\n            else goto errCleanUp;\n        }\n        hmmio = get_mmioFromProfile(wps->fdwSound, wps->pszSound);\n        if (!hmmio)\n        {\n            wps->fdwSound &= ~SND_ALIAS;\n            wps->fdwSound |= SND_FILENAME;\n        }\n    }\n    if (!hmmio && wps->fdwSound & SND_FILENAME)\n    {\n        hmmio = get_mmioFromFile(wps->pszSound);\n    }\n    if (!(wps->fdwSound & (SND_FILENAME|SND_ALIAS|SND_MEMORY)))\n    {\n        if ((hmmio = get_mmioFromProfile(wps->fdwSound | SND_NODEFAULT, wps->pszSound)) == 0)\n        {\n            if ((hmmio = get_mmioFromFile(wps->pszSound)) == 0)\n            {\n                hmmio = get_mmioFromProfile(wps->fdwSound, wps->pszSound);\n            }\n        }\n    }\n    if (hmmio == 0) goto errCleanUp;\n\n    if (mmioDescend(hmmio, &ckMainRIFF, NULL, 0))\n\tgoto errCleanUp;\n\n    TRACE(\"ParentChunk ckid=%.4s fccType=%.4s cksize=%08lX\\n\",\n\t  (LPSTR)&ckMainRIFF.ckid, (LPSTR)&ckMainRIFF.fccType, ckMainRIFF.cksize);\n\n    if ((ckMainRIFF.ckid != FOURCC_RIFF) ||\n\t(ckMainRIFF.fccType != mmioFOURCC('W', 'A', 'V', 'E')))\n\tgoto errCleanUp;\n\n    mmckInfo.ckid = mmioFOURCC('f', 'm', 't', ' ');\n    if (mmioDescend(hmmio, &mmckInfo, &ckMainRIFF, MMIO_FINDCHUNK))\n\tgoto errCleanUp;\n\n    TRACE(\"Chunk Found ckid=%.4s fccType=%08lx cksize=%08lX\\n\",\n\t  (LPSTR)&mmckInfo.ckid, mmckInfo.fccType, mmckInfo.cksize);\n\n    lpWaveFormat = malloc(mmckInfo.cksize);\n    if (!lpWaveFormat)\n\tgoto errCleanUp;\n    r = mmioRead(hmmio, (HPSTR)lpWaveFormat, mmckInfo.cksize);\n    if (r < 0 || r < sizeof(PCMWAVEFORMAT))\n    {\n        // uninvited expects true for this but it's only testing for playback completion\n        if (r == sizeof(WAVEFORMAT))\n\t    \tbRet = TRUE;\n    \tgoto errCleanUp;\n    }\n\n\n    TRACE(\"wFormatTag=%04X !\\n\", \tlpWaveFormat->wFormatTag);\n    TRACE(\"nChannels=%d\\n\", \t\tlpWaveFormat->nChannels);\n    TRACE(\"nSamplesPerSec=%ld\\n\", \tlpWaveFormat->nSamplesPerSec);\n    TRACE(\"nAvgBytesPerSec=%ld\\n\", \tlpWaveFormat->nAvgBytesPerSec);\n    TRACE(\"nBlockAlign=%d\\n\", \t\tlpWaveFormat->nBlockAlign);\n    TRACE(\"wBitsPerSample=%u !\\n\", \tlpWaveFormat->wBitsPerSample);\n\n    /* move to end of 'fmt ' chunk */\n    mmioAscend(hmmio, &mmckInfo, 0);\n\n    mmckInfo.ckid = mmioFOURCC('d', 'a', 't', 'a');\n    if (mmioDescend(hmmio, &mmckInfo, &ckMainRIFF, MMIO_FINDCHUNK))\n\tgoto errCleanUp;\n\n    TRACE(\"Chunk Found ckid=%.4s fccType=%08lx cksize=%08lX\\n\",\n\t  (LPSTR)&mmckInfo.ckid, mmckInfo.fccType, mmckInfo.cksize);\n\n    s.hEvent = CreateEventW(NULL, FALSE, FALSE, NULL);\n    if (!s.hEvent || bPlaySoundStop)\n\tgoto errCleanUp;\n\n    if (waveOutOpen(&hWave, WAVE_MAPPER, lpWaveFormat, (DWORD_PTR)PlaySound_Callback,\n\t\t    (DWORD_PTR)&s, CALLBACK_FUNCTION) != MMSYSERR_NOERROR)\n\tgoto errCleanUp;\n\n    /* make it so that 3 buffers per second are needed */\n    bufsize = (((lpWaveFormat->nAvgBytesPerSec / 3) - 1) / lpWaveFormat->nBlockAlign + 1) *\n\tlpWaveFormat->nBlockAlign;\n    waveHdr = malloc(2 * sizeof(WAVEHDR) + 2 * bufsize);\n    if (!waveHdr)\n\tgoto errCleanUp;\n    waveHdr[0].lpData = (char*)waveHdr + 2 * sizeof(WAVEHDR);\n    waveHdr[1].lpData = (char*)waveHdr + 2 * sizeof(WAVEHDR) + bufsize;\n    waveHdr[0].dwUser = waveHdr[1].dwUser = 0L;\n    waveHdr[0].dwLoops = waveHdr[1].dwLoops = 0L;\n    waveHdr[0].dwFlags = waveHdr[1].dwFlags = 0L;\n    waveHdr[0].dwBufferLength = waveHdr[1].dwBufferLength = bufsize;\n    if (waveOutPrepareHeader(hWave, &waveHdr[0], sizeof(WAVEHDR)) ||\n\twaveOutPrepareHeader(hWave, &waveHdr[1], sizeof(WAVEHDR))) {\n\tgoto errCleanUp;\n    }\n\n    wps->hWave = hWave;\n    s.dwEventCount = 1L; /* for first buffer */\n    index = 0;\n\n    do {\n\tleft = mmckInfo.cksize;\n\n\tmmioSeek(hmmio, mmckInfo.dwDataOffset, SEEK_SET);\n\twhile (left)\n        {\n\t    if (bPlaySoundStop)\n            {\n\t\twps->bLoop = FALSE;\n\t\tbreak;\n\t    }\n\t    count = mmioRead(hmmio, waveHdr[index].lpData, min(bufsize, left));\n\t    if (count < 1) break;\n\t    left -= count;\n\t    waveHdr[index].dwBufferLength = count;\n\t    if (waveOutWrite(hWave, &waveHdr[index], sizeof(WAVEHDR)) == MMSYSERR_NOERROR) {\n                index ^= 1;\n                PlaySound_WaitDone(&s);\n            }\n            else {\n\t\tERR(\"Aborting play loop, waveOutWrite error\\n\");\n\t\twps->bLoop = FALSE;\n\t\tbreak;\n\t    }\n\t}\n\tbRet = TRUE;\n    } while (wps->bLoop);\n\n    PlaySound_WaitDone(&s); /* to balance first buffer */\n    waveOutReset(hWave);\n\n    waveOutUnprepareHeader(hWave, &waveHdr[0], sizeof(WAVEHDR));\n    waveOutUnprepareHeader(hWave, &waveHdr[1], sizeof(WAVEHDR));\n\nerrCleanUp:\n    TRACE(\"Done playing=%s => %s!\\n\", debugstr_w(wps->pszSound), bRet ? \"ok\" : \"ko\");\n    free(lpWaveFormat);\n    if (hWave)\n    {\n        EnterCriticalSection(&WINMM_cs);\n        /* the CS prevents a concurrent waveOutReset */\n        wps->hWave = 0;\n        LeaveCriticalSection(&WINMM_cs);\n        while (waveOutClose(hWave) == WAVERR_STILLPLAYING)\n            Sleep(100);\n    }\n    CloseHandle(s.hEvent);\n    free(waveHdr);\n    if (hmmio) \t\tmmioClose(hmmio, 0);\n\n    PlaySound_Free(wps);\n\n    return bRet;\n}\n\nstatic BOOL MULTIMEDIA_PlaySound(const void* pszSound, HMODULE hmod, DWORD fdwSound, BOOL bUnicode)\n{\n    WINE_PLAYSOUND*     wps = NULL;\n\n    TRACE(\"pszSound='%p' hmod=%p fdwSound=%08lX\\n\",\n\t  pszSound, hmod, fdwSound);\n\n    /* SND_NOWAIT is ignored in w95/2k/xp. */\n    if ((fdwSound & SND_NOSTOP) && PlaySoundCurrent != NULL)\n\treturn FALSE;\n\n    /* alloc internal structure, if we need to play something */\n    if (pszSound && !(fdwSound & SND_PURGE))\n    {\n        if (!(wps = PlaySound_Alloc(pszSound, hmod, fdwSound, bUnicode)))\n            return FALSE;\n    }\n\n    EnterCriticalSection(&WINMM_cs);\n    /* since several threads can enter PlaySound in parallel, we're not\n     * sure, at this point, that another thread didn't start a new playsound\n     */\n    if (!psLastEvent) psLastEvent = CreateEventW(NULL, TRUE, FALSE, NULL);\n    while (PlaySoundCurrent != NULL)\n    {\n        ResetEvent(psLastEvent);\n        /* FIXME: doc says we have to stop all instances of pszSound if it's non\n         * NULL... as of today, we stop all playing instances */\n        bPlaySoundStop = TRUE;\n        if(PlaySoundCurrent->hWave)\n            waveOutReset(PlaySoundCurrent->hWave);\n\n        LeaveCriticalSection(&WINMM_cs);\n        WaitForSingleObject(psLastEvent, INFINITE);\n        EnterCriticalSection(&WINMM_cs);\n\n        bPlaySoundStop = FALSE;\n    }\n\n    PlaySoundCurrent = wps;\n    LeaveCriticalSection(&WINMM_cs);\n\n    if (!wps) return TRUE;\n\n    if (fdwSound & SND_ASYNC)\n    {\n        HANDLE      handle;\n        wps->bLoop = (fdwSound & SND_LOOP) != 0;\n        if ((handle = CreateThread(NULL, 0, proc_PlaySound, wps, 0, NULL)) != 0) {\n            SetThreadPriority(handle, THREAD_PRIORITY_TIME_CRITICAL);\n            CloseHandle(handle);\n            Sleep(1);\n            return TRUE;\n        }\n    }\n    else return proc_PlaySound(wps);\n\n    /* error cases */\n    PlaySound_Free(wps);\n    return FALSE;\n}\n\n/**************************************************************************\n * \t\t\t\tPlaySoundA\t\t[WINMM.@]\n */\nBOOL16 WINAPI PlaySound16(LPCSTR pszSoundA, HMODULE16 hmod, DWORD fdwSound)\n{\n    return MULTIMEDIA_PlaySound(pszSoundA, hmod, fdwSound, FALSE);\n}\n\n/**************************************************************************\n * \t\t\t\tsndPlaySoundA\t\t[WINMM.@]\n */\nBOOL16 WINAPI sndPlaySound16(LPCSTR pszSoundA, UINT16 uFlags)\n{\n    uFlags &= SND_RESOURCE|SND_ALIAS_ID|SND_FILENAME|SND_ASYNC|SND_LOOP|SND_MEMORY|SND_NODEFAULT|SND_NOSTOP|SND_SYNC;\n    return MULTIMEDIA_PlaySound(pszSoundA, 0, uFlags, FALSE);\n}\n\n"
  },
  {
    "path": "mmsystem/winemm16.h",
    "content": "/*\n * Copyright 1998, Luiz Otavio L. Zorzella\n *           1999, Eric Pouech\n *\n * Purpose:   multimedia declarations (internal to WINMM & MMSYSTEM DLLs)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"wine/mmsystem16.h\"\n#include \"wownt32.h\"\n\n/* mmsystem (16 bit files) only functions */\nvoid            MMDRV_Init16(void);\nvoid \t\tMMSYSTEM_MMTIME32to16(LPMMTIME16 mmt16, const MMTIME* mmt32) DECLSPEC_HIDDEN;\n\ntypedef LONG\t\t\t(*MCIPROC16)(DWORD, HDRVR16, WORD, DWORD, DWORD);\n\n#define WOW_TYPE_HANDLE     (WOW_TYPE_FULLHWND + 1)\n\n/* HANDLE16 -> HANDLE conversions */\n#define HDRVR_32(h16)\t\t((HDRVR)WOWHandle32(h16, WOW_TYPE_HANDLE))\n#define HMIDI_32(h16)\t\t((HMIDI)WOWHandle32(h16, WOW_TYPE_HANDLE))\n#define HMIDIIN_32(h16)\t\t((HMIDIIN)WOWHandle32(h16, WOW_TYPE_HANDLE))\n#define HMIDIOUT_32(h16)\t((HMIDIOUT)WOWHandle32(h16, WOW_TYPE_HANDLE))\n#define HMIDISTRM_32(h16)\t((HMIDISTRM)WOWHandle32(h16, WOW_TYPE_HANDLE))\n#define HMIXER_32(h16)\t\t((HMIXER)WOWHandle32(h16, WOW_TYPE_HANDLE))\n#define HMIXEROBJ_32(h16)\t((HMIXEROBJ)WOWHandle32(h16, WOW_TYPE_HANDLE))\n#define HMMIO_32(h16)\t\t((HMMIO)WOWHandle32(h16, WOW_TYPE_HANDLE))\n#define HWAVE_32(h16)\t\t((HWAVE)WOWHandle32(h16, WOW_TYPE_HANDLE))\n#define HWAVEIN_32(h16)\t\t((HWAVEIN)WOWHandle32(h16, WOW_TYPE_HANDLE))\n#define HWAVEOUT_32(h16)\t((HWAVEOUT)WOWHandle32(h16, WOW_TYPE_HANDLE))\n\n/* HANDLE -> HANDLE16 conversions */\n#define HDRVR_16(h32)\t\tWOWHandle16(h32, WOW_TYPE_HANDLE)\n#define HMIDI_16(h32)\t\tWOWHandle16(h32, WOW_TYPE_HANDLE)\n#define HMIDIIN_16(h32)\t\tWOWHandle16(h32, WOW_TYPE_HANDLE)\n#define HMIDIOUT_16(h32)\tWOWHandle16(h32, WOW_TYPE_HANDLE)\n#define HMIDISTRM_16(h32)\tWOWHandle16(h32, WOW_TYPE_HANDLE)\n#define HMIXER_16(h32)\t\tWOWHandle16(h32, WOW_TYPE_HANDLE)\n#define HMIXEROBJ_16(h32)\tWOWHandle16(h32, WOW_TYPE_HANDLE)\n#define HMMIO_16(h32)\t\tWOWHandle16(h32, WOW_TYPE_HANDLE)\n#define HWAVE_16(h32)\t\tWOWHandle16(h32, WOW_TYPE_HANDLE)\n#define HWAVEIN_16(h32)\t\tWOWHandle16(h32, WOW_TYPE_HANDLE)\n#define HWAVEOUT_16(h32)\tWOWHandle16(h32, WOW_TYPE_HANDLE)\n\ntypedef enum {\n    MMSYSTEM_MAP_NOMEM, \t/* ko, memory problem */\n    MMSYSTEM_MAP_MSGERROR,      /* ko, unknown message */\n    MMSYSTEM_MAP_OK, \t        /* ok, no memory allocated. to be sent to the proc. */\n    MMSYSTEM_MAP_OKMEM, \t/* ok, some memory allocated, need to call UnMapMsg. to be sent to the proc. */\n} MMSYSTEM_MapType;\n\nextern  CRITICAL_SECTION        mmdrv_cs DECLSPEC_HIDDEN;\n\nenum MMSYSTEM_DriverType\n{\n    MMSYSTDRV_MIXER,\n    MMSYSTDRV_MIDIIN,\n    MMSYSTDRV_MIDIOUT,\n    MMSYSTDRV_WAVEIN,\n    MMSYSTDRV_WAVEOUT,\n    MMSYSTDRV_MAX\n};\n\nextern  struct mmsystdrv_thunk* MMSYSTDRV_AddThunk(DWORD callback, DWORD flags, enum MMSYSTEM_DriverType kind) DECLSPEC_HIDDEN;\nextern  void                    MMSYSTDRV_DeleteThunk(struct mmsystdrv_thunk* thunk) DECLSPEC_HIDDEN;\nextern  void                    MMSYSTDRV_SetHandle(struct mmsystdrv_thunk* thunk, void* h) DECLSPEC_HIDDEN;\nextern  void                    MMSYSTDRV_CloseHandle(void* h) DECLSPEC_HIDDEN;\nextern  DWORD                   MMSYSTDRV_Message(void* h, UINT msg, DWORD_PTR param1, DWORD_PTR param2) DECLSPEC_HIDDEN;\n\n#define WINE_MMTHREAD_CREATED\t0x4153494C\t/* \"BSIL\" */\n#define WINE_MMTHREAD_DELETED\t0xDEADDEAD\n\ntypedef struct {\n       DWORD\t\t\tdwSignature;\t\t/* 00 \"BSIL\" when ok, 0xDEADDEAD when being deleted */\n       DWORD\t\t\tdwCounter;\t\t/* 04 > 1 when in mmThread functions */\n       HANDLE\t\t\thThread;\t\t/* 08 hThread */\n       DWORD                    dwThreadID;     \t/* 0C */\n       DWORD    \t\tfpThread;\t\t/* 10 address of thread proc (segptr or lin depending on dwFlags) */\n       DWORD\t\t\tdwThreadPmt;    \t/* 14 parameter to be passed upon thread creation to fpThread */\n       LONG                     dwSignalCount;\t     \t/* 18 counter used for signaling */\n       HANDLE                   hEvent;     \t\t/* 1C event */\n       HANDLE                   hVxD;\t\t     \t/* 20 return from OpenVxDHandle */\n       DWORD                    dwStatus;       \t/* 24 0x00, 0x10, 0x20, 0x30 */\n       DWORD\t\t\tdwFlags;\t\t/* 28 dwFlags upon creation */\n       UINT16\t\t\thTask;          \t/* 2C handle to created task */\n} WINE_MMTHREAD;\n"
  },
  {
    "path": "mouse/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(mouse SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/mouse.def mouse.drv16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(mouse.drv16 mouse)\ntarget_link_libraries(mouse libwine winecrt0 krnl386)\nset_target_properties(mouse PROPERTIES SUFFIX \".drv16\")\n"
  },
  {
    "path": "mouse/Makefile.in",
    "content": "MODULE    = mouse.drv16\nIMPORTS   = user32\n\nEXTRADLLFLAGS = -m16\n\nC_SRCS = mouse.c\n\nRC_SRCS = mouse.rc\n"
  },
  {
    "path": "mouse/mouse.c",
    "content": "/*\n * MOUSE driver\n *\n * Copyright 1998 Ulrich Weigand\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n#include <string.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winuser.h\"\n#include \"wine/winbase16.h\"\n#include \"wine/winuser16.h\"\n\n#include \"pshpack1.h\"\ntypedef struct _MOUSEINFO\n{\n    BYTE msExist;\n    BYTE msRelative;\n    WORD msNumButtons;\n    WORD msRate;\n    WORD msXThreshold;\n    WORD msYThreshold;\n    WORD msXRes;\n    WORD msYRes;\n    WORD msMouseCommPort;\n} MOUSEINFO, *LPMOUSEINFO;\n#include \"poppack.h\"\n\nstatic FARPROC16 DefMouseEventProc;\n\n/***********************************************************************\n *           Inquire                       (MOUSE.1)\n */\nWORD WINAPI Inquire16(LPMOUSEINFO mouseInfo)\n{\n    mouseInfo->msExist = TRUE;\n    mouseInfo->msRelative = FALSE;\n    mouseInfo->msNumButtons = 2;\n    mouseInfo->msRate = 34;  /* the DDK says so ... */\n    mouseInfo->msXThreshold = 0;\n    mouseInfo->msYThreshold = 0;\n    mouseInfo->msXRes = 0;\n    mouseInfo->msYRes = 0;\n    mouseInfo->msMouseCommPort = 0;\n\n    return sizeof(MOUSEINFO);\n}\n\n/***********************************************************************\n *           Enable                        (MOUSE.2)\n */\nVOID WINAPI Enable16( FARPROC16 proc )\n{\n    DefMouseEventProc = proc;\n}\n\n/***********************************************************************\n *           Disable                       (MOUSE.3)\n */\nVOID WINAPI Disable16(void)\n{\n    DefMouseEventProc = 0;\n}\n"
  },
  {
    "path": "mouse/mouse.def",
    "content": "; File generated automatically from ..\\mouse\\mouse.drv16.spec; do not edit!\n\nLIBRARY mouse.drv16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "mouse/mouse.drv16.spec",
    "content": "1 pascal -ret16 Inquire(ptr) Inquire16\n2 pascal -ret16 Enable(segptr) Enable16\n3 pascal -ret16 Disable() Disable16\n4 stub MOUSEGETINTVECT\n5 stub GETSETMOUSEDATA\n#Control Panel thinks this is implemented if it is available\n#6 stub CPLAPPLET\n7 stub POWEREVENTPROC\n"
  },
  {
    "path": "mouse/mouse.rc",
    "content": "/*\n * Top level resource file for MOUSE driver dll\n *\n * Copyright 1999 Andreas Mohr\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#define WINE_FILEDESCRIPTION_STR \"Wine mouse driver\"\n\n#include \"wine/wine_common_ver.rc\"\n"
  },
  {
    "path": "mouse/mouse.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>mouse</RootNamespace>\n    <ProjectGuid>{F1DEC3F9-706B-410D-91D5-0381BB9BA22A}</ProjectGuid>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.drv16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.drv16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nuser32.lib</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\nmouse.def\n      </ModuleDefinitionFile>\n    </Link>\n    <CustomBuildStep>\n      <Command>\n      </Command>\n      <Outputs>\n      </Outputs>\n    </CustomBuildStep>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\nmouse.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nuser32.lib</AdditionalDependencies>\n    </Link>\n    <CustomBuildStep>\n      <Command>\n      </Command>\n      <Outputs>\n      </Outputs>\n    </CustomBuildStep>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"mouse.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"mouse.drv16.obj\">\n      <FileType>Document</FileType>\n    </Object>\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"mouse.drv16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" MOUSE &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" MOUSE &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"mouse.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "msacm/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(msacm SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/msacm.def msacm.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(msacm.dll16 msacm)\ntarget_link_libraries(msacm libwine winecrt0 krnl386 msacm32.lib)\nset_target_properties(msacm PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "msacm/Makefile.in",
    "content": "MODULE    = msacm.dll16\nIMPORTS   = msacm32\nEXTRADLLFLAGS = -m16 -Wb,--main-module,msacm32.dll\n\nC_SRCS = msacm.c\n"
  },
  {
    "path": "msacm/msacm.c",
    "content": "/*\n *      MSACM library\n *\n *      Copyright 1998  Patrik Stridvall\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winerror.h\"\n#include \"mmsystem.h\"\n#define NOBITMAP\n#include \"mmreg.h\"\n#include \"msacm.h\"\n#ifdef _MSCVER\n#include \"msacmdrv.h\"\n#else\n#include \"windows/msacmdrv.h\"\n#endif\n#include \"wineacm16.h\"\n#include \"wine/debug.h\"\n#include \"wine/winbase16.h\"\n#include \"wownt32.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(msacm);\nvoid WINAPI K32WOWHandle16DestroyHint(HANDLE handle, WOW_HANDLE_TYPE type);\n#define WOW_TYPE_HANDLE (WOW_TYPE_FULLHWND + 1)\n#define WOW_TYPE_HAS WOW_TYPE_HANDLE\n#define HACMSTREAM_16(h32)\t\tWOWHandle16(h32, WOW_TYPE_HAS)\n#define HACMSTREAM_32(h16)\t\t((HACMSTREAM)WOWHandle32(h16, WOW_TYPE_HAS))\n/**************************************************************************\n *\t\tDllEntryPoint (MSACM.3)\n *\n * MSACM DLL entry point\n *\n */\nBOOL WINAPI DllEntryPoint16(DWORD fdwReason, HINSTANCE16 hinstDLL, WORD ds,\n                            WORD wHeapSize, DWORD dwReserved1, WORD wReserved2)\n{\n    return TRUE;\n}\n\n/***********************************************************************\n *\t\tacmGetVersion (MSACM.7)\n */\nDWORD WINAPI acmGetVersion16(void)\n{\n  return acmGetVersion();\n}\n\n/***********************************************************************\n *\t\tacmMetrics (MSACM.8)\n */\n\nMMRESULT16 WINAPI acmMetrics16(\n  HACMOBJ16 hao, UINT16 uMetric, LPVOID pMetric)\n{\n  FIXME(\"(0x%04x, %d, %p): semi-stub\\n\", hao, uMetric, pMetric);\n\n  if(!hao) return acmMetrics(0, uMetric, pMetric);\n  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);\n  return MMSYSERR_ERROR;\n}\n\n/***********************************************************************\n *\t\tacmDriverEnum (MSACM.10)\n */\nMMRESULT16 WINAPI acmDriverEnum16(\n  ACMDRIVERENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum)\n{\n  FIXME(\"(%p, %d, %d): stub\\n\",\n    fnCallback, dwInstance, fdwEnum\n  );\n  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);\n  return MMSYSERR_ERROR;\n}\n\n/***********************************************************************\n * \t\tacmDriverDetails (MSACM.11)\n */\n\nMMRESULT16 WINAPI acmDriverDetails16(\n  HACMDRIVERID16 hadid, LPACMDRIVERDETAILS16 padd, DWORD fdwDetails)\n{\n  FIXME(\"(0x%04x, %p, %d): stub\\n\", hadid, padd, fdwDetails);\n  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);\n  return MMSYSERR_ERROR;\n}\n\n/***********************************************************************\n * \t\tacmDriverAdd (MSACM.12)\n */\nMMRESULT16 WINAPI acmDriverAdd16(\n  LPHACMDRIVERID16 phadid, HINSTANCE16 hinstModule,\n  LPARAM lParam, DWORD dwPriority, DWORD fdwAdd)\n{\n  FIXME(\"(%p, 0x%04x, %ld, %d, %d): stub\\n\",\n    phadid, hinstModule, lParam, dwPriority, fdwAdd\n  );\n  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);\n  return MMSYSERR_ERROR;\n}\n\n/***********************************************************************\n * \t\tacmDriverRemove (MSACM.13)\n */\nMMRESULT16 WINAPI acmDriverRemove16(\n  HACMDRIVERID16 hadid, DWORD fdwRemove)\n{\n  FIXME(\"(0x%04x, %d): stub\\n\", hadid, fdwRemove);\n  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);\n  return MMSYSERR_ERROR;\n}\n\n/***********************************************************************\n * \t\tacmDriverOpen (MSACM.14)\n */\nMMRESULT16 WINAPI acmDriverOpen16(\n  LPHACMDRIVER16 phad, HACMDRIVERID16 hadid, DWORD fdwOpen)\n{\n  FIXME(\"(%p, 0x%04x, %d): stub\\n\", phad, hadid, fdwOpen);\n  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);\n  return MMSYSERR_ERROR;\n}\n\n/***********************************************************************\n * \t\tacmDriverClose (MSACM.15)\n */\nMMRESULT16 WINAPI acmDriverClose16(\n  HACMDRIVER16 had, DWORD fdwClose)\n{\n  FIXME(\"(0x%04x, %d): stub\\n\", had, fdwClose);\n  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);\n  return MMSYSERR_ERROR;\n}\n\n/***********************************************************************\n * \t\tacmDriverMessage (MSACM.16)\n */\nLRESULT WINAPI acmDriverMessage16(\n  HACMDRIVER16 had, UINT16 uMsg, LPARAM lParam1, LPARAM lParam2)\n{\n  FIXME(\"(0x%04x, %d, %ld, %ld): stub\\n\",\n    had, uMsg, lParam1, lParam2\n  );\n  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);\n  return 0;\n}\n\n/***********************************************************************\n * \t\tacmDriverID (MSACM.17)\n */\nMMRESULT16 WINAPI acmDriverID16(\n  HACMOBJ16 hao, LPHACMDRIVERID16 phadid, DWORD fdwDriverID)\n{\n  FIXME(\"(0x%04x, %p, %d): stub\\n\", hao, phadid, fdwDriverID);\n  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);\n  return MMSYSERR_ERROR;\n}\n\n/***********************************************************************\n * \t\tacmDriverPriority (MSACM.18)\n */\nMMRESULT16 WINAPI acmDriverPriority16(\n HACMDRIVERID16 hadid, DWORD dwPriority, DWORD fdwPriority)\n{\n  FIXME(\"(0x%04x, %d, %d): stub\\n\",\n    hadid, dwPriority, fdwPriority\n  );\n  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);\n  return MMSYSERR_ERROR;\n}\n\n/***********************************************************************\n * \t\tacmFormatTagDetails (MSACM.30)\n */\nMMRESULT16 WINAPI acmFormatTagDetails16(\n  HACMDRIVER16 had, LPACMFORMATTAGDETAILS16 paftd, DWORD fdwDetails)\n{\n  return acmFormatTagDetailsA(had, paftd, fdwDetails);\n}\n\n/***********************************************************************\n * \t\tacmFormatTagEnum (MSACM.31)\n */\nMMRESULT16 WINAPI acmFormatTagEnum16(\n  HACMDRIVER16 had, LPACMFORMATTAGDETAILS16 paftd,\n  ACMFORMATTAGENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum)\n{\n  FIXME(\"(0x%04x, %p, %p, %d, %d): stub\\n\",\n    had, paftd, fnCallback, dwInstance, fdwEnum\n  );\n  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);\n  return MMSYSERR_ERROR;\n}\n\n/***********************************************************************\n * \t\tacmFormatChoose (MSACM.40)\n */\nMMRESULT16 WINAPI acmFormatChoose16(\n  LPACMFORMATCHOOSE16 pafmtc)\n{\n  FIXME(\"(%p): stub\\n\", pafmtc);\n  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);\n  return MMSYSERR_ERROR;\n}\n\n/***********************************************************************\n * \t\tacmFormatDetails (MSACM.41)\n */\nMMRESULT16 WINAPI acmFormatDetails16(\n  HACMDRIVER16 had, LPACMFORMATDETAILS16 pafd, DWORD fdwDetails)\n{\n  MMRESULT ret;\n  ACMFORMATDETAILSA afd;\n  afd.cbStruct = pafd->cbStruct;\n  afd.dwFormatIndex = pafd->dwFormatIndex;\n  afd.dwFormatTag = pafd->dwFormatTag;\n  afd.fdwSupport = pafd->fdwSupport;\n  afd.pwfx = MapSL(pafd->pwfx);\n  afd.cbwfx = pafd->cbwfx;\n  memcpy(&afd.szFormat, &pafd->szFormat, pafd->cbStruct - (6*4));\n  ret = acmFormatDetailsA(had, &afd, fdwDetails);\n  pafd->dwFormatIndex = afd.dwFormatIndex;\n  pafd->dwFormatTag = afd.dwFormatTag;\n  pafd->fdwSupport = afd.fdwSupport;\n  pafd->cbwfx = afd.cbwfx;\n  memcpy(&pafd->szFormat, &afd.szFormat, pafd->cbStruct - (6*4));\n  return ret; \n}\n\n/***********************************************************************\n * \t\tacmFormatEnum (MSACM.42)\n */\nMMRESULT16 WINAPI acmFormatEnum16(\n  HACMDRIVER16 had, LPACMFORMATDETAILS16 pafd,\n  ACMFORMATENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum)\n{\n  FIXME(\"(0x%04x, %p, %p, %d, %d): stub\\n\",\n    had, pafd, fnCallback, dwInstance, fdwEnum\n  );\n  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);\n  return MMSYSERR_ERROR;\n}\n\n/***********************************************************************\n * \t\tacmFormatSuggest (MSACM.45)\n */\nMMRESULT16 WINAPI acmFormatSuggest16(\n  HACMDRIVER16 had, LPWAVEFORMATEX pwfxSrc,\n  LPWAVEFORMATEX pwfxDst, DWORD cbwfxDst, DWORD fdwSuggest)\n{\n  return acmFormatSuggest(had, pwfxSrc, pwfxDst, cbwfxDst, fdwSuggest);\n}\n\n/***********************************************************************\n * \t\tacmFilterTagDetails (MSACM.50)\n */\nMMRESULT16 WINAPI acmFilterTagDetails16(\n  HACMDRIVER16 had, LPACMFILTERTAGDETAILS16 paftd, DWORD fdwDetails)\n{\n  FIXME(\"(0x%04x, %p, %d): stub\\n\", had, paftd, fdwDetails);\n  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);\n  return MMSYSERR_ERROR;\n}\n\n/***********************************************************************\n * \t\tacmFilterTagEnum (MSACM.51)\n */\nMMRESULT16 WINAPI acmFilterTagEnum16(\n  HACMDRIVER16 had, LPACMFILTERTAGDETAILS16 paftd,\n  ACMFILTERTAGENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum)\n{\n  FIXME(\"(0x%04x, %p, %p, %d, %d): stub\\n\",\n    had, paftd, fnCallback, dwInstance, fdwEnum\n  );\n  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);\n  return MMSYSERR_ERROR;\n}\n\n/***********************************************************************\n * \t\tacmFilterChoose (MSACM.60)\n */\nMMRESULT16 WINAPI acmFilterChoose16(\n  LPACMFILTERCHOOSE16 pafltrc)\n{\n  FIXME(\"(%p): stub\\n\", pafltrc);\n  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);\n  return MMSYSERR_ERROR;\n}\n\n/***********************************************************************\n * \t\tacmFilterDetails (MSACM.61)\n */\nMMRESULT16 WINAPI acmFilterDetails16(\n  HACMDRIVER16 had, LPACMFILTERDETAILS16 pafd, DWORD fdwDetails)\n{\n  FIXME(\"(0x%04x, %p, %d): stub\\n\", had, pafd, fdwDetails);\n  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);\n  return MMSYSERR_ERROR;\n}\n\n/***********************************************************************\n * \t\tacmFilterEnum (MSACM.62)\n */\nMMRESULT16 WINAPI acmFilterEnum16(\n  HACMDRIVER16 had, LPACMFILTERDETAILS16 pafd,\n  ACMFILTERENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum)\n{\n  FIXME(\"(0x%04x, %p, %p, %d, %d): stub\\n\",\n    had, pafd, fnCallback, dwInstance, fdwEnum\n  );\n  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);\n  return MMSYSERR_ERROR;\n}\n\n/***********************************************************************\n * \t\tacmStreamOpen (MSACM.70)\n */\nMMRESULT16 WINAPI acmStreamOpen16(\n  LPHACMSTREAM16 phas, HACMDRIVER16 had,\n  LPWAVEFORMATEX pwfxSrc, LPWAVEFORMATEX pwfxDst,\n  LPWAVEFILTER pwfltr, DWORD dwCallback,\n  DWORD dwInstance, DWORD fdwOpen)\n{\n  HACMSTREAM strm;\n  MMRESULT ret;\n  if (fdwOpen & ACM_STREAMOPENF_ASYNC)\n  {\n    FIXME(\"ASYNC not supported\\n\");\n    return MMSYSERR_ERROR;\n  }\n  ret = acmStreamOpen(&strm, had, pwfxSrc, pwfxDst, pwfltr, dwCallback, dwInstance, fdwOpen);\n  *phas = HACMSTREAM_16(strm);\n  return ret;\n}\n\n/***********************************************************************\n * \t\tacmStreamClose (MSACM.71)\n */\nMMRESULT16 WINAPI acmStreamClose16(\n  HACMSTREAM16 has, DWORD fdwClose)\n{\n  MMRESULT ret;\n  HACMSTREAM has32 = HACMSTREAM_32(has);\n  ret = acmStreamClose(has32, fdwClose);\n  if (!ret)\n    K32WOWHandle16DestroyHint(has32, WOW_TYPE_HAS);\n  return ret;\n}\n\n/***********************************************************************\n * \t\tacmStreamSize (MSACM.72)\n */\nMMRESULT16 WINAPI acmStreamSize16(\n  HACMSTREAM16 has, DWORD cbInput,\n  LPDWORD pdwOutputBytes, DWORD fdwSize)\n{\n    return acmStreamSize(HACMSTREAM_32(has), cbInput, pdwOutputBytes, fdwSize);\n}\n\n/***********************************************************************\n * \t\tacmStreamConvert (MSACM.75)\n */\nMMRESULT16 WINAPI acmStreamConvert16(\n  HACMSTREAM16 has, LPACMSTREAMHEADER16 pash, DWORD fdwConvert)\n{\n  MMRESULT ret;\n  LPACMSTREAMHEADER pash32 = pash->dwReservedDriver[0];\n  pash32->fdwStatus = pash->fdwStatus;\n  pash32->dwUser = pash->dwUser;\n  pash32->pbSrc = MapSL(pash->pbSrc);\n  pash32->cbSrcLength = pash->cbSrcLength;\n  pash32->dwSrcUser = pash->dwSrcUser;\n  pash32->pbDst = MapSL(pash->pbDst);\n  pash32->cbDstLength = pash->cbDstLength;\n  pash32->dwDstUser = pash->dwDstUser;\n  ret = acmStreamConvert(HACMSTREAM_32(has), pash32, fdwConvert);\n  pash->fdwStatus = pash32->fdwStatus;\n  pash->cbSrcLengthUsed = pash32->cbSrcLengthUsed;\n  pash->cbDstLengthUsed = pash32->cbDstLengthUsed;\n  return ret;\n}\n\n/***********************************************************************\n * \t\tacmStreamReset (MSACM.76)\n */\nMMRESULT16 WINAPI acmStreamReset16(\n  HACMSTREAM16 has, DWORD fdwReset)\n{\n  FIXME(\"(0x%04x, %d): stub\\n\", has, fdwReset);\n  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);\n  return MMSYSERR_ERROR;\n}\n\n/***********************************************************************\n * \t\tacmStreamPrepareHeader (MSACM.77)\n */\nMMRESULT16 WINAPI acmStreamPrepareHeader16(\n  HACMSTREAM16 has, LPACMSTREAMHEADER16 pash, DWORD fdwPrepare)\n{\n  MMRESULT ret;\n  LPACMSTREAMHEADER pash32 = HeapAlloc(GetProcessHeap(), 0, sizeof(ACMSTREAMHEADER));\n  pash32->cbStruct = sizeof(ACMSTREAMHEADER);\n  pash32->fdwStatus = pash->fdwStatus;\n  pash32->dwUser = pash->dwUser;\n  pash32->pbSrc = MapSL(pash->pbSrc);\n  pash32->cbSrcLength = pash->cbSrcLength;\n  pash32->dwSrcUser = pash->dwSrcUser;\n  pash32->pbDst = MapSL(pash->pbDst);\n  pash32->cbDstLength = pash->cbDstLength;\n  pash32->dwDstUser = pash->dwDstUser;\n  ret = acmStreamPrepareHeader(HACMSTREAM_32(has), pash32, fdwPrepare);\n  if (!ret)\n  {\n    pash->dwReservedDriver[0] = pash32;\n    pash->fdwStatus = pash32->fdwStatus;\n  }\n  else\n    HeapFree(GetProcessHeap(), 0, pash32);\n  return ret;\n}\n\n/***********************************************************************\n * \t\tacmStreamUnprepareHeader (MSACM.78)\n */\nMMRESULT16 WINAPI acmStreamUnprepareHeader16(\n  HACMSTREAM16 has, LPACMSTREAMHEADER16 pash, DWORD fdwUnprepare)\n{\n  MMRESULT ret;\n  LPACMSTREAMHEADER pash32 = pash->dwReservedDriver[0];\n  ret = acmStreamUnprepareHeader(HACMSTREAM_32(has), pash32, fdwUnprepare);\n  if (!ret)\n    HeapFree(GetProcessHeap(), 0, pash32);\n  return ret;\n}\n\n/***********************************************************************\n *\t\tACMAPPLICATIONEXIT (MSACM.150)\n * FIXME\n *   No documentation found.\n */\n\n/***********************************************************************\n *\t\tACMHUGEPAGELOCK (MSACM.175)\n *FIXME\n *   No documentation found.\n */\n\n/***********************************************************************\n *\t\tACMHUGEPAGEUNLOCK (MSACM.176)\n * FIXME\n *   No documentation found.\n */\n\n/***********************************************************************\n *\t\tACMOPENCONVERSION (MSACM.200)\n * FIXME\n *   No documentation found.\n */\n\n/***********************************************************************\n *\t\tACMCLOSECONVERSION (MSACM.201)\n * FIXME\n *   No documentation found.\n */\n\n/***********************************************************************\n *\t\tACMCONVERT (MSACM.202)\n * FIXME\n *   No documentation found.\n */\n\n/***********************************************************************\n *\t\tACMCHOOSEFORMAT (MSACM.203)\n * FIXME\n *   No documentation found.\n */\n"
  },
  {
    "path": "msacm/msacm.def",
    "content": "; File generated automatically from msacm\\msacm.dll16.spec; do not edit!\n\nLIBRARY msacm.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "msacm/msacm.dll16.spec",
    "content": "# 1 stub     WEP\n  2 stub     DRIVERPROC\n  3 pascal   DllEntryPoint(long word word word long word) DllEntryPoint16\n  4 stub     ___EXPORTEDSTUB\n  7 pascal   acmGetVersion() acmGetVersion16\n  8 pascal -ret16 acmMetrics(word word ptr) acmMetrics16\n 10 pascal -ret16 acmDriverEnum(ptr long long) acmDriverEnum16\n 11 pascal -ret16 acmDriverDetails(word ptr long) acmDriverDetails16\n 12 pascal -ret16 acmDriverAdd(ptr word long long long) acmDriverAdd16\n 13 pascal -ret16 acmDriverRemove(word long) acmDriverRemove16\n 14 pascal -ret16 acmDriverOpen(ptr word long) acmDriverOpen16\n 15 pascal -ret16 acmDriverClose(word long) acmDriverClose16\n 16 pascal   acmDriverMessage(word word long long) acmDriverMessage16\n 17 pascal -ret16 acmDriverID(word ptr long) acmDriverID16\n 18 pascal -ret16 acmDriverPriority(word long long) acmDriverPriority16\n 30 pascal -ret16 acmFormatTagDetails(word ptr long) acmFormatTagDetails16\n 31 pascal -ret16 acmFormatTagEnum(word ptr ptr long long) acmFormatTagEnum16\n 40 pascal -ret16 acmFormatChoose(ptr) acmFormatChoose16\n 41 pascal -ret16 acmFormatDetails(word ptr long) acmFormatDetails16\n 42 pascal -ret16 acmFormatEnum(word ptr ptr long long) acmFormatEnum16\n 45 pascal -ret16 acmFormatSuggest(word ptr ptr long long) acmFormatSuggest16\n 50 pascal -ret16 acmFilterTagDetails(word ptr long) acmFilterTagDetails16\n 51 pascal -ret16 acmFilterTagEnum(word ptr ptr long long) acmFilterTagEnum16\n 60 pascal -ret16 acmFilterChoose(ptr) acmFilterChoose16\n 61 pascal -ret16 acmFilterDetails(word ptr long) acmFilterDetails16\n 62 pascal -ret16 acmFilterEnum(word ptr ptr long long) acmFilterEnum16\n 70 pascal -ret16 acmStreamOpen(ptr word ptr ptr ptr long long long) acmStreamOpen16\n 71 pascal -ret16 acmStreamClose(word long) acmStreamClose16\n 72 pascal -ret16 acmStreamSize(word long ptr long) acmStreamSize16\n 75 pascal -ret16 acmStreamConvert(word ptr long) acmStreamConvert16\n 76 pascal -ret16 acmStreamReset(word long) acmStreamReset16\n 77 pascal -ret16 acmStreamPrepareHeader(word ptr long) acmStreamPrepareHeader16\n 78 pascal -ret16 acmStreamUnprepareHeader(word ptr long) acmStreamUnprepareHeader16\n150 stub     ACMAPPLICATIONEXIT\n175 stub     ACMHUGEPAGELOCK\n176 stub     ACMHUGEPAGEUNLOCK\n200 stub     ACMOPENCONVERSION\n201 stub     ACMCLOSECONVERSION\n202 stub     ACMCONVERT\n203 stub     ACMCHOOSEFORMAT\n"
  },
  {
    "path": "msacm/msacm.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n    <RootNamespace>msacm</RootNamespace>\n    <ProjectGuid>{FA7FFBC0-45A5-4419-B18C-DEC8363C2413}</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <Import Project=\"..\\PropertySheet.props\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nmsacm32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\nmsacm.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\nmsacm.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nmsacm32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"msacm.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"msacm.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"msacm.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Platform)'=='Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" MSACM &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Platform)'=='Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"msacm.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "msacm/wineacm16.h",
    "content": "/*\n * Copyright 2000 Eric Pouech\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINEACM16_H\n#define __WINE_WINEACM16_H\n\n#include \"wine/windef16.h\"\n#include \"wine/mmsystem16.h\"\n\n/***********************************************************************\n * Win16 definitions\n */\ntypedef BOOL16 (CALLBACK *ACMDRIVERENUMCB16)(\n  HACMDRIVERID16 hadid, DWORD dwInstance, DWORD fdwSupport\n);\ntypedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROC16)(\n  HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam\n);\ntypedef UINT16 (CALLBACK *ACMFORMATCHOOSEHOOKPROC16)(\n  HWND16 hwnd, UINT16 uMsg, WPARAM16 wParam, LPARAM lParam\n);\n\ntypedef struct _ACMDRIVERDETAILS16\n{\n  DWORD   cbStruct;\n\n  FOURCC  fccType;\n  FOURCC  fccComp;\n\n  WORD    wMid;\n  WORD    wPid;\n\n  DWORD   vdwACM;\n  DWORD   vdwDriver;\n\n  DWORD   fdwSupport;\n  DWORD   cFormatTags;\n  DWORD   cFilterTags;\n\n  HICON16 hicon;\n\n  CHAR    szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];\n  CHAR    szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];\n  CHAR    szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];\n  CHAR    szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];\n  CHAR    szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];\n} ACMDRIVERDETAILS16, *NPACMDRIVERDETAILS16, *LPACMDRIVERDETAILS16;\n\ntypedef struct _ACMFILTERCHOOSE16\n{\n  DWORD          cbStruct;\n  DWORD          fdwStyle;\n\n  HWND16         hwndOwner;\n\n  LPWAVEFILTER   pwfltr;\n  DWORD          cbwfltr;\n\n  LPCSTR         pszTitle;\n\n  char           szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];\n  char           szFilter[ACMFILTERDETAILS_FILTER_CHARS];\n  LPSTR          pszName;\n  DWORD          cchName;\n\n  DWORD          fdwEnum;\n  LPWAVEFILTER   pwfltrEnum;\n\n  HINSTANCE16    hInstance;\n  LPCSTR         pszTemplateName;\n  LPARAM         lCustData;\n  ACMFILTERCHOOSEHOOKPROC16 pfnHook;\n} ACMFILTERCHOOSE16, *NPACMFILTERCHOOSE16, *LPACMFILTERCHOOSE16;\n\ntypedef struct _ACMFILTERDETAILS16\n{\n  DWORD          cbStruct;\n  DWORD          dwFilterIndex;\n  DWORD          dwFilterTag;\n  DWORD          fdwSupport;\n  LPWAVEFILTER   pwfltr;\n  DWORD          cbwfltr;\n  CHAR           szFilter[ACMFILTERDETAILS_FILTER_CHARS];\n} ACMFILTERDETAILS16, *NPACMFILTERDETAILS16, *LPACMFILTERDETAILS16;\n\ntypedef struct _ACMFILTERTAGDETAILS16\n{\n  DWORD cbStruct;\n  DWORD dwFilterTagIndex;\n  DWORD dwFilterTag;\n  DWORD cbFilterSize;\n  DWORD fdwSupport;\n  DWORD cStandardFilters;\n  CHAR  szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];\n} ACMFILTERTAGDETAILS16, *NPACMFILTERTAGDETAILS16, *LPACMFILTERTAGDETAILS16;\n\ntypedef struct _ACMFORMATCHOOSE16\n{\n  DWORD            cbStruct;\n  DWORD            fdwStyle;\n\n  HWND16           hwndOwner;\n\n  LPWAVEFORMATEX   pwfx;\n  DWORD            cbwfx;\n  LPCSTR           pszTitle;\n\n  CHAR             szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];\n  CHAR             szFormat[ACMFORMATDETAILS_FORMAT_CHARS];\n\n  LPSTR            pszName;\n  DWORD            cchName;\n\n  DWORD            fdwEnum;\n  LPWAVEFORMATEX   pwfxEnum;\n\n  HINSTANCE16      hInstance;\n  LPCSTR           pszTemplateName;\n  LPARAM           lCustData;\n  ACMFORMATCHOOSEHOOKPROC16 pfnHook;\n} ACMFORMATCHOOSE16, *NPACMFORMATCHOOSE16, *LPACMFORMATCHOOSE16;\n\ntypedef struct _ACMFORMATDETAILS16\n{\n    DWORD            cbStruct;\n    DWORD            dwFormatIndex;\n    DWORD            dwFormatTag;\n    DWORD            fdwSupport;\n    LPWAVEFORMATEX   pwfx;\n    DWORD            cbwfx;\n    CHAR             szFormat[ACMFORMATDETAILS_FORMAT_CHARS];\n} ACMFORMATDETAILS16, *NPACMFORMATDETAILS16, *LPACMFORMATDETAILS16;\n\ntypedef struct _ACMFORMATTAGDETAILS16\n{\n  DWORD cbStruct;\n  DWORD dwFormatTagIndex;\n  DWORD dwFormatTag;\n  DWORD cbFormatSize;\n  DWORD fdwSupport;\n  DWORD cStandardFormats;\n  CHAR  szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];\n} ACMFORMATTAGDETAILS16, *NPACMFORMATTAGDETAILS16, *LPACMFORMATTAGDETAILS16;\n\ntypedef ACMSTREAMHEADER ACMSTREAMHEADER16, *NPACMSTREAMHEADER16, *LPACMSTREAMHEADER16;\n\ntypedef BOOL16 (CALLBACK *ACMFILTERENUMCB16)(\n HACMDRIVERID16 hadid, LPACMFILTERDETAILS16 pafd,\n DWORD dwInstance, DWORD fdwSupport\n);\n\ntypedef BOOL16 (CALLBACK *ACMFILTERTAGENUMCB16)(\n  HACMDRIVERID16 hadid, LPACMFILTERTAGDETAILS16 paftd,\n  DWORD dwInstance, DWORD fdwSupport\n);\n\ntypedef BOOL16 (CALLBACK *ACMFORMATENUMCB16)(\n  HACMDRIVERID16 hadid, LPACMFORMATDETAILS16 pafd,\n  DWORD dwInstance, DWORD fdwSupport\n);\n\ntypedef BOOL16 (CALLBACK *ACMFORMATTAGENUMCB16)(\n  HACMDRIVERID16 hadid, LPACMFORMATTAGDETAILS16 paftd,\n  DWORD dwInstance, DWORD fdwSupport\n);\n\n/***********************************************************************\n * Functions - Win16\n */\n\nDWORD WINAPI acmGetVersion16(void);\nMMRESULT16 WINAPI acmMetrics16(\n  HACMOBJ16 hao, UINT16 uMetric, LPVOID pMetric\n);\nMMRESULT16 WINAPI acmDriverEnum16(\n  ACMDRIVERENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum\n);\nMMRESULT16 WINAPI acmDriverDetails16(\n  HACMDRIVERID16 hadid, LPACMDRIVERDETAILS16 padd, DWORD fdwDetails\n);\nMMRESULT16 WINAPI acmDriverAdd16(\n  LPHACMDRIVERID16 phadid, HINSTANCE16 hinstModule,\n  LPARAM lParam, DWORD dwPriority, DWORD fdwAdd\n);\nMMRESULT16 WINAPI acmDriverRemove16(\n  HACMDRIVERID16 hadid, DWORD fdwRemove\n);\nMMRESULT16 WINAPI acmDriverOpen16(\n  LPHACMDRIVER16 phad, HACMDRIVERID16 hadid, DWORD fdwOpen\n);\nMMRESULT16 WINAPI acmDriverClose16(\n  HACMDRIVER16 had, DWORD fdwClose\n);\nLRESULT WINAPI acmDriverMessage16(\n  HACMDRIVER16 had, UINT16 uMsg, LPARAM lParam1, LPARAM lParam2\n);\nMMRESULT16 WINAPI acmDriverID16(\n  HACMOBJ16 hao, LPHACMDRIVERID16 phadid, DWORD fdwDriverID\n);\nMMRESULT16 WINAPI acmDriverPriority16(\n HACMDRIVERID16 hadid, DWORD dwPriority, DWORD fdwPriority\n);\nMMRESULT16 WINAPI acmFormatTagDetails16(\n  HACMDRIVER16 had, LPACMFORMATTAGDETAILS16 paftd, DWORD fdwDetails\n);\nMMRESULT16 WINAPI acmFormatTagEnum16(\n  HACMDRIVER16 had, LPACMFORMATTAGDETAILS16 paftd,\n  ACMFORMATTAGENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum\n);\nMMRESULT16 WINAPI acmFormatChoose16(\n  LPACMFORMATCHOOSE16 pafmtc\n);\nMMRESULT16 WINAPI acmFormatDetails16(\n  HACMDRIVER16 had, LPACMFORMATDETAILS16 pafd, DWORD fdwDetails\n);\nMMRESULT16 WINAPI acmFormatEnum16(\n  HACMDRIVER16 had, LPACMFORMATDETAILS16 pafd,\n  ACMFORMATENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum\n);\nMMRESULT16 WINAPI acmFormatSuggest16(\n  HACMDRIVER16 had, LPWAVEFORMATEX pwfxSrc,\n  LPWAVEFORMATEX pwfxDst, DWORD cbwfxDst, DWORD fdwSuggest\n);\nMMRESULT16 WINAPI acmFilterTagDetails16(\n  HACMDRIVER16 had, LPACMFILTERTAGDETAILS16 paftd, DWORD fdwDetails\n);\nMMRESULT16 WINAPI acmFilterTagEnum16(\n  HACMDRIVER16 had, LPACMFILTERTAGDETAILS16 paftd,\n  ACMFILTERTAGENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum\n);\nMMRESULT16 WINAPI acmFilterChoose16(\n  LPACMFILTERCHOOSE16 pafltrc\n);\nMMRESULT16 WINAPI acmFilterDetails16(\n  HACMDRIVER16 had, LPACMFILTERDETAILS16 pafd, DWORD fdwDetails\n);\nMMRESULT16 WINAPI acmFilterEnum16(\n  HACMDRIVER16 had, LPACMFILTERDETAILS16 pafd,\n  ACMFILTERENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum\n);\nMMRESULT16 WINAPI acmStreamOpen16(\n  LPHACMSTREAM16 phas, HACMDRIVER16 had,\n  LPWAVEFORMATEX pwfxSrc, LPWAVEFORMATEX pwfxDst,\n  LPWAVEFILTER pwfltr, DWORD dwCallback,\n  DWORD dwInstance, DWORD fdwOpen\n);\nMMRESULT16 WINAPI acmStreamClose16(\n  HACMSTREAM16 has, DWORD fdwClose\n);\nMMRESULT16 WINAPI acmStreamSize16(\n  HACMSTREAM16 has, DWORD cbInput,\n  LPDWORD pdwOutputBytes, DWORD fdwSize\n);\nMMRESULT16 WINAPI acmStreamConvert16(\n  HACMSTREAM16 has, LPACMSTREAMHEADER16 pash, DWORD fdwConvert\n);\nMMRESULT16 WINAPI acmStreamReset16(\n  HACMSTREAM16 has, DWORD fdwReset\n);\nMMRESULT16 WINAPI acmStreamPrepareHeader16(\n  HACMSTREAM16 has, LPACMSTREAMHEADER16 pash, DWORD fdwPrepare\n);\nMMRESULT16 WINAPI acmStreamUnprepareHeader16(\n  HACMSTREAM16 has, LPACMSTREAMHEADER16 pash, DWORD fdwUnprepare\n);\n\n#endif /* __WINE_WINEACM16_H */\n"
  },
  {
    "path": "msvideo/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(msvideo SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/msvideo.def msvideo.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(msvideo.dll16 msvideo)\ntarget_link_libraries(msvideo libwine winecrt0 krnl386 mmsystem msvfw32.lib version.lib)\nset_target_properties(msvideo PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "msvideo/Makefile.in",
    "content": "MODULE    = msvideo.dll16\nIMPORTS   = msvfw32 version advapi32 user32\n\nEXTRADLLFLAGS = -m16 -Wb,--main-module,msvfw32.dll\n\nC_SRCS = msvideo16.c\n"
  },
  {
    "path": "msvideo/msvideo.def",
    "content": "; File generated automatically from msvideo\\msvideo.dll16.spec; do not edit!\n\nLIBRARY msvideo.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n  get_video_thunk\n"
  },
  {
    "path": "msvideo/msvideo.dll16.spec",
    "content": "#1 pascal WEP(word)\n2 pascal VideoForWindowsVersion() VideoForWindowsVersion\n3 pascal DllEntryPoint(long word word word long word) VIDEO_LibMain\n20 pascal videoGetNumDevs() videoGetNumDevs16\n21 pascal videoGetErrorText(word word str word) videoGetErrorText16\n22 pascal VideoCapDriverDescAndVer(word ptr word ptr word) VideoCapDriverDescAndVer16\n28 pascal videoOpen(ptr long long) videoOpen16\n29 pascal videoClose(word) videoClose16\n30 pascal videoDialog(word word long) videoDialog16\n31 pascal videoFrame(word ptr) videoFrame16\n32 pascal videoConfigure(word word long ptr ptr long ptr long) videoConfigure16\n33 pascal videoConfigureStorage(word str long) videoConfigureStorage16\n34 pascal videoGetChannelCaps(word ptr long) videoGetChannelCaps16\n35 pascal videoUpdate(word word word) videoUpdate16\n40 pascal videoStreamAddBuffer(word ptr long) videoStreamAddBuffer16\n41 pascal videoStreamFini(word) videoStreamFini16\n42 pascal videoStreamGetError(word ptr ptr) videoStreamGetError16\n43 pascal videoStreamGetPosition(word ptr long) videoStreamGetPosition16\n44 pascal videoStreamInit(word long long long long) videoStreamInit16\n46 pascal videoStreamPrepareHeader(word ptr long) videoStreamPrepareHeader16\n47 pascal videoStreamReset(word) videoStreamReset16\n49 pascal videoStreamStart(word) videoStreamStart16\n50 pascal videoStreamStop(word) videoStreamStop16\n51 pascal videoStreamUnprepareHeader(word ptr long) videoStreamUnprepareHeader16\n52 pascal videoStreamAllocHdrAndBuffer(word ptr long) videoStreamAllocHdrAndBuffer16\n53 pascal videoStreamFreeHdrAndBuffer(word ptr) videoStreamFreeHdrAndBuffer16\n60 pascal videoMessage(word word long long) videoMessage16\n102 pascal -ret16 DrawDibOpen() DrawDibOpen16\n103 pascal -ret16 DrawDibClose(word) DrawDibClose16\n104 pascal -ret16 DrawDibBegin(word word s_word s_word ptr s_word s_word word) DrawDibBegin16\n105 pascal -ret16 DrawDibEnd(word) DrawDibEnd16\n106 pascal -ret16 DrawDibDraw(word word s_word s_word s_word s_word ptr ptr s_word s_word s_word s_word word) DrawDibDraw16\n108 pascal -ret16 DrawDibGetPalette(word) DrawDibGetPalette16\n110 pascal -ret16 DrawDibSetPalette(word word) DrawDibSetPalette16\n111 stub DRAWDIBCHANGEPALETTE\n112 pascal -ret16 DrawDibRealize(word word word) DrawDibRealize16\n113 stub DRAWDIBTIME\n114 pascal -ret16 DrawDibProfileDisplay(ptr) DrawDibProfileDisplay16\n115 stub STRETCHDIB\n118 pascal -ret16 DrawDibStart(word long) DrawDibStart16\n119 pascal -ret16 DrawDibStop(word) DrawDibStop16\n120 stub DRAWDIBGETBUFFER\n200 pascal -ret16 ICInfo(long long segptr) ICInfo16\n201 pascal -ret16 ICInstall(long long long ptr word) ICInstall16\n202 pascal -ret16 ICRemove(long long word) ICRemove16\n203 pascal -ret16 ICOpen(long long word) ICOpen16\n204 pascal ICClose(word) ICClose16\n205 pascal ICSendMessage(word word long long) ICSendMessage16\n206 pascal -ret16 ICOpenFunction(long long word segptr) ICOpenFunction16\n207 varargs _ICMessage(word word word) ICMessage16\n212 pascal ICGetInfo(word segptr long) ICGetInfo16\n213 pascal -ret16 ICLocate(long long ptr ptr word) ICLocate16\n224 cdecl _ICCompress(word long segptr segptr segptr segptr segptr segptr long long long segptr segptr) ICCompress16\n230 cdecl _ICDecompress(word long segptr segptr segptr segptr) ICDecompress16\n232 cdecl _ICDrawBegin(word long word word word s_word s_word s_word s_word segptr s_word s_word s_word s_word long long) ICDrawBegin16\n234 cdecl _ICDraw(word long segptr segptr long long) ICDraw16\n239 pascal -ret16 ICGetDisplayFormat(word ptr ptr s_word s_word s_word) ICGetDisplayFormat16\n240 stub ICIMAGECOMPRESS\n241 stub ICIMAGEDECOMPRESS\n242 stub ICCOMPRESSORCHOOSE\n243 stub ICCOMPRESSORFREE\n244 stub ICSEQCOMPRESSFRAMESTART\n245 stub ICSEQCOMPRESSFRAMEEND\n246 stub ICSEQCOMPRESSFRAME\n250 cdecl _MCIWndCreate(word word long str) MCIWndCreate16\n251 cdecl _MCIWndRegisterClass() MCIWndRegisterClass16\n252 stub GETOPENFILENAMEPREVIEW\n253 stub GETSAVEFILENAMEPREVIEW\n\n@ cdecl -arch=win32 get_video_thunk(long)\n"
  },
  {
    "path": "msvideo/msvideo.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n    <RootNamespace>msvideo</RootNamespace>\n    <ProjectGuid>{0DCF5163-4049-4850-92BE-5D6A2444C51D}</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <Import Project=\"..\\PropertySheet.props\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;$(OutDir)mmsystem.lib;\nmsvfw32.lib;version.lib;advapi32.lib;user32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>msvideo.def</ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>msvideo.def</ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;$(OutDir)mmsystem.lib;\nmsvfw32.lib;version.lib;advapi32.lib;user32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"msvideo16.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"msvideo.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"msvideo.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Platform)'=='Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" MSVIDEO &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Platform)'=='Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"msvideo.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>\n"
  },
  {
    "path": "msvideo/msvideo16.c",
    "content": "/*\n * msvideo 16-bit functions\n *\n * Copyright 1998 Marcus Meissner\n * Copyright 2000 Bradley Baetz\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"port.h\"\n#include <stdarg.h>\n#include <stdio.h>\n#include <string.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winver.h\"\n#include \"winnls.h\"\n#include \"winreg.h\"\n#include \"winuser.h\"\n#include \"wine/winbase16.h\"\n#include \"wownt32.h\"\n#include \"vfw16.h\"\n#include \"wine/debug.h\"\n#include \"wine/mmsystem16.h\"\n\n#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))\n\nWINE_DEFAULT_DEBUG_CHANNEL(msvideo);\n\n/* Drivers32 settings */\n#define HKLM_DRIVERS32 \"Software\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Drivers32\"\n\n#define WOW_TYPE_HANDLE     (WOW_TYPE_FULLHWND + 1)\n\n/* handle16 --> handle conversions */\n#define HDRAWDIB_32(h16)\t((HDRAWDIB)WOWHandle32(h16, WOW_TYPE_HANDLE))\n#define HIC_32(h16)\t\t((HIC)WOWHandle32(h16, WOW_TYPE_HANDLE))\n\n/* handle --> handle16 conversions */\n#define HDRVR_16(h32)\t\tWOWHandle16(h32, WOW_TYPE_HANDLE)\n#define HDRAWDIB_16(h32)\tWOWHandle16(h32, WOW_TYPE_HANDLE)\n#define HIC_16(h32)\t\tWOWHandle16(h32, WOW_TYPE_HANDLE)\n\n/***********************************************************************\n *\t\tDrawDibOpen\t\t[MSVIDEO.102]\n */\nHDRAWDIB16 VFWAPI DrawDibOpen16(void)\n{\n    return HDRAWDIB_16(DrawDibOpen());\n}\n\n/***********************************************************************\n *\t\tDrawDibClose\t\t[MSVIDEO.103]\n */\nBOOL16 VFWAPI DrawDibClose16(HDRAWDIB16 hdd)\n{\n    return DrawDibClose(HDRAWDIB_32(hdd));\n}\n\n/************************************************************************\n *\t\tDrawDibBegin\t\t[MSVIDEO.104]\n */\nBOOL16 VFWAPI DrawDibBegin16(HDRAWDIB16 hdd, HDC16 hdc, INT16 dxDst,\n\t\t\t     INT16 dyDst, LPBITMAPINFOHEADER lpbi, INT16 dxSrc,\n\t\t\t     INT16 dySrc, UINT16 wFlags)\n{\n    return DrawDibBegin(HDRAWDIB_32(hdd), HDC_32(hdc), dxDst, dyDst, lpbi,\n\t\t\tdxSrc, dySrc, wFlags);\n}\n\n/***********************************************************************\n *\t\tDrawDibEnd\t\t[MSVIDEO.105]\n */\nBOOL16 VFWAPI DrawDibEnd16(HDRAWDIB16 hdd)\n{\n    return DrawDibEnd(HDRAWDIB_32(hdd));\n}\n\n/**********************************************************************\n *\t\tDrawDibDraw\t\t[MSVIDEO.106]\n */\nBOOL16 VFWAPI DrawDibDraw16(HDRAWDIB16 hdd, HDC16 hdc, INT16 xDst, INT16 yDst,\n\t\t\t    INT16 dxDst, INT16 dyDst, LPBITMAPINFOHEADER lpbi,\n\t\t\t    LPVOID lpBits, INT16 xSrc, INT16 ySrc, INT16 dxSrc,\n\t\t\t    INT16 dySrc, UINT16 wFlags)\n{\n    return DrawDibDraw(HDRAWDIB_32(hdd), HDC_32(hdc), xDst, yDst, dxDst,\n\t\t       dyDst, lpbi, lpBits, xSrc, ySrc, dxSrc, dySrc, wFlags);\n}\n\n/***********************************************************************\n *              DrawDibGetPalette       [MSVIDEO.108]\n */\nHPALETTE16 VFWAPI DrawDibGetPalette16(HDRAWDIB16 hdd)\n{\n    return HPALETTE_16(DrawDibGetPalette(HDRAWDIB_32(hdd)));\n}\n\n/***********************************************************************\n *              DrawDibSetPalette       [MSVIDEO.110]\n */\nBOOL16 VFWAPI DrawDibSetPalette16(HDRAWDIB16 hdd, HPALETTE16 hpal)\n{\n    return DrawDibSetPalette(HDRAWDIB_32(hdd), HPALETTE_32(hpal));\n}\n\n/***********************************************************************\n *              DrawDibRealize          [MSVIDEO.112]\n */\nUINT16 VFWAPI DrawDibRealize16(HDRAWDIB16 hdd, HDC16 hdc,\n\t\t\t       BOOL16 fBackground)\n{\n    return (UINT16)DrawDibRealize(HDRAWDIB_32(hdd), HDC_32(hdc), fBackground);\n}\n\n/*************************************************************************\n *      DrawDibProfileDisplay     [MSVIDEO.114]\n */\nBOOL16 VFWAPI DrawDibProfileDisplay16(LPBITMAPINFOHEADER lpbi)\n{\n    TRACE(\"(%p)\\n\", lpbi);\n    return DrawDibProfileDisplay(lpbi);\n}\n\n/*************************************************************************\n *\t\tDrawDibStart\t\t[MSVIDEO.118]\n */\nBOOL16 VFWAPI DrawDibStart16(HDRAWDIB16 hdd, DWORD rate)\n{\n    return DrawDibStart(HDRAWDIB_32(hdd), rate);\n}\n\n/*************************************************************************\n *\t\tDrawDibStop\t\t[MSVIDEO.119]\n */\nBOOL16 VFWAPI DrawDibStop16(HDRAWDIB16 hdd)\n{\n    return DrawDibStop(HDRAWDIB_32(hdd));\n}\n\nBOOL16 WINAPI ICInstall16(DWORD fccType, DWORD fccHandler, LPARAM lParam, LPSTR szDesc, UINT16 wFlags);\n/***********************************************************************\n *\t\tICOpen\t\t\t\t[MSVIDEO.203]\n */\nHIC16 VFWAPI ICOpen16(DWORD fccType, DWORD fccHandler, UINT16 wMode)\n{\n    HIC16 ret = HIC_16(ICOpen(fccType, fccHandler, wMode));\n    if (!ret)\n    {\n        char key[10], sysini[MAX_PATH], drvfile[MAX_PATH];\n        sprintf(key, \"%4.4s.%4.4s\", (char *)&fccType, (char *)&fccHandler);\n        DWORD size = GetPrivateProfileStringA(\"drivers\", key, NULL, drvfile, MAX_PATH, RedirectSystemDir(\"c:\\\\windows\\\\system.ini\", sysini, MAX_PATH));\n        if (size)\n        {\n            if (ICInstall16(fccType, fccHandler, drvfile, NULL, ICINSTALL_DRIVER))\n                ret = HIC_16(ICOpen(fccType, fccHandler, wMode));\n        }\n    }\n    return ret;\n}\n\n/***********************************************************************\n *\t\t_ICMessage\t\t\t[MSVIDEO.207]\n */\nLRESULT VFWAPIV ICMessage16( HIC16 hic, UINT16 msg, UINT16 cb, VA_LIST16 valist )\n{\n    LPWORD lpData;\n    SEGPTR segData;\n    LRESULT ret;\n    UINT16 i;\n\n    lpData = HeapAlloc(GetProcessHeap(), 0, cb);\n\n    TRACE(\"0x%08x, %u, %u, ...)\\n\", (DWORD) hic, msg, cb);\n\n    for (i = 0; i < cb / sizeof(WORD); i++)\n    {\n\tlpData[i] = VA_ARG16(valist, WORD);\n    }\n\n    segData = MapLS(lpData);\n    ret = ICSendMessage16(hic, msg, segData, (DWORD) cb);\n    UnMapLS(segData);\n    HeapFree(GetProcessHeap(), 0, lpData);\n    return ret;\n}\n\n/***********************************************************************\n *\t\tICGetInfo\t\t\t[MSVIDEO.212]\n */\nLRESULT VFWAPI ICGetInfo16(HIC16 hic, ICINFO16 * picinfo, DWORD cb)\n{\n    LRESULT ret;\n\n    TRACE(\"(0x%08x,%p,%d)\\n\", (DWORD) hic, picinfo, cb);\n    ret = ICSendMessage16(hic, ICM_GETINFO, (DWORD) picinfo, cb);\n    TRACE(\"\t-> 0x%08lx\\n\", ret);\n    return ret;\n}\n\n/***********************************************************************\n *\t\tICLocate\t\t\t[MSVIDEO.213]\n */\nHIC16 VFWAPI ICLocate16(DWORD fccType, DWORD fccHandler,\n\t\t\tLPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut,\n\t\t\tWORD wFlags)\n{\n    return HIC_16(ICLocate(fccType, fccHandler, lpbiIn, lpbiOut, wFlags));\n}\n\n/***********************************************************************\n *\t\t_ICCompress\t\t\t[MSVIDEO.224]\n */\nDWORD VFWAPIV ICCompress16(HIC16 hic, DWORD dwFlags,\n\t\t\t   LPBITMAPINFOHEADER lpbiOutput, LPVOID lpData,\n\t\t\t   LPBITMAPINFOHEADER lpbiInput, LPVOID lpBits,\n\t\t\t   LPDWORD lpckid, LPDWORD lpdwFlags,\n\t\t\t   LONG lFrameNum, DWORD dwFrameSize,\n\t\t\t   DWORD dwQuality, LPBITMAPINFOHEADER lpbiPrev,\n\t\t\t   LPVOID lpPrev)\n{\n    DWORD ret;\n    ICCOMPRESS iccmp;\n    SEGPTR seg_iccmp;\n\n    TRACE(\"(0x%08x,%d,%p,%p,%p,%p,...)\\n\", (DWORD) hic, dwFlags,\n\t  lpbiOutput, lpData, lpbiInput, lpBits);\n\n    iccmp.dwFlags = dwFlags;\n\n    iccmp.lpbiOutput = lpbiOutput;\n    iccmp.lpOutput = lpData;\n    iccmp.lpbiInput = lpbiInput;\n    iccmp.lpInput = lpBits;\n\n    iccmp.lpckid = lpckid;\n    iccmp.lpdwFlags = lpdwFlags;\n    iccmp.lFrameNum = lFrameNum;\n    iccmp.dwFrameSize = dwFrameSize;\n    iccmp.dwQuality = dwQuality;\n    iccmp.lpbiPrev = lpbiPrev;\n    iccmp.lpPrev = lpPrev;\n    seg_iccmp = MapLS(&iccmp);\n    ret = ICSendMessage16(hic, ICM_COMPRESS, seg_iccmp, sizeof(ICCOMPRESS));\n    UnMapLS(seg_iccmp);\n    return ret;\n}\n\n/***********************************************************************\n *\t\t_ICDecompress\t\t\t[MSVIDEO.230]\n */\nDWORD VFWAPIV ICDecompress16(HIC16 hic, DWORD dwFlags,\n\t\t\t     LPBITMAPINFOHEADER lpbiFormat, LPVOID lpData,\n\t\t\t     LPBITMAPINFOHEADER lpbi, LPVOID lpBits)\n{\n    ICDECOMPRESS icd;\n    SEGPTR segptr;\n    DWORD ret;\n\n    TRACE(\"(0x%08x,%d,%p,%p,%p,%p)\\n\", (DWORD) hic, dwFlags, lpbiFormat,\n\t  lpData, lpbi, lpBits);\n\n    icd.dwFlags = dwFlags;\n    icd.lpbiInput = lpbiFormat;\n    icd.lpInput = lpData;\n    icd.lpbiOutput = lpbi;\n    icd.lpOutput = lpBits;\n    icd.ckid = 0;\n    segptr = MapLS(&icd);\n    ret = ICSendMessage16(hic, ICM_DECOMPRESS, segptr, sizeof(ICDECOMPRESS));\n    UnMapLS(segptr);\n    return ret;\n}\n\n/***********************************************************************\n *\t\t_ICDrawBegin\t\t[MSVIDEO.232]\n */\nDWORD VFWAPIV ICDrawBegin16(HIC16 hic,\t\t/* [in] */\n\t\t\t    DWORD dwFlags,\t/* [in] flags */\n\t\t\t    HPALETTE16 hpal,\t/* [in] palette to draw with */\n\t\t\t    HWND16 hwnd,\t/* [in] window to draw to */\n\t\t\t    HDC16 hdc,\t\t/* [in] HDC to draw to */\n\t\t\t    INT16 xDst,\t\t/* [in] destination rectangle */\n\t\t\t    INT16 yDst,\t\t/* [in] */\n\t\t\t    INT16 dxDst,\t/* [in] */\n\t\t\t    INT16 dyDst,\t/* [in] */\n\t\t\t    LPBITMAPINFOHEADER lpbi,\t/* [in] format of frame to draw NOTE: SEGPTR */\n\t\t\t    INT16 xSrc,\t\t/* [in] source rectangle */\n\t\t\t    INT16 ySrc,\t\t/* [in] */\n\t\t\t    INT16 dxSrc,\t/* [in] */\n\t\t\t    INT16 dySrc,\t/* [in] */\n\t\t\t    DWORD dwRate,\t/* [in] frames/second = (dwRate/dwScale) */\n\t\t\t    DWORD dwScale)\t/* [in] */\n{\n    DWORD ret;\n    ICDRAWBEGIN16 icdb;\n    SEGPTR seg_icdb;\n\n    TRACE (\"(0x%08x,%d,0x%08x,0x%08x,0x%08x,%u,%u,%u,%u,%p,%u,%u,%u,%u,%d,%d)\\n\",\n\t   (DWORD) hic, dwFlags, (DWORD) hpal, (DWORD) hwnd, (DWORD) hdc,\n\t   xDst, yDst, dxDst, dyDst, lpbi, xSrc, ySrc, dxSrc, dySrc, dwRate,\n\t   dwScale);\n\n    icdb.dwFlags = dwFlags;\n    icdb.hpal = hpal;\n    icdb.hwnd = hwnd;\n    icdb.hdc = hdc;\n    icdb.xDst = xDst;\n    icdb.yDst = yDst;\n    icdb.dxDst = dxDst;\n    icdb.dyDst = dyDst;\n    icdb.lpbi = lpbi;\t\t/* Keep this as SEGPTR for the mapping code to deal with */\n    icdb.xSrc = xSrc;\n    icdb.ySrc = ySrc;\n    icdb.dxSrc = dxSrc;\n    icdb.dySrc = dySrc;\n    icdb.dwRate = dwRate;\n    icdb.dwScale = dwScale;\n    seg_icdb = MapLS(&icdb);\n    ret = (DWORD) ICSendMessage16(hic, ICM_DRAW_BEGIN, seg_icdb,\n\t\t\t\t  sizeof(ICDRAWBEGIN16));\n    UnMapLS(seg_icdb);\n    return ret;\n}\n\n/***********************************************************************\n *\t\t_ICDraw\t\t\t[MSVIDEO.234]\n */\nDWORD VFWAPIV ICDraw16(HIC16 hic, DWORD dwFlags,\n\t\t       LPVOID lpFormat,\t/* [???] NOTE: SEGPTR */\n\t\t       LPVOID lpData,\t/* [???] NOTE: SEGPTR */\n\t\t       DWORD cbData, LONG lTime)\n{\n    DWORD ret;\n    ICDRAW icd;\n    SEGPTR seg_icd;\n\n    TRACE(\"(0x%08x,0x%08x,%p,%p,%d,%d)\\n\", (DWORD) hic, dwFlags,\n\t  lpFormat, lpData, cbData, lTime);\n    icd.dwFlags = dwFlags;\n    icd.lpFormat = lpFormat;\n    icd.lpData = lpData;\n    icd.cbData = cbData;\n    icd.lTime = lTime;\n    seg_icd = MapLS(&icd);\n    ret = ICSendMessage16(hic, ICM_DRAW, seg_icd, sizeof(ICDRAW));\n    UnMapLS(seg_icd);\n    return ret;\n}\n\n/***********************************************************************\n *\t\tICGetDisplayFormat\t\t\t[MSVIDEO.239]\n */\nHIC16 VFWAPI ICGetDisplayFormat16(HIC16 hic, LPBITMAPINFOHEADER lpbiIn,\n\t\t\t\t  LPBITMAPINFOHEADER lpbiOut, INT16 depth,\n\t\t\t\t  INT16 dx, INT16 dy)\n{\n    return HIC_16(ICGetDisplayFormat(HIC_32(hic), lpbiIn, lpbiOut, depth,\n\t\t\t\t     dx, dy));\n}\n\n#define COPY(x,y) (x->y = x##16->y);\n#define COPYPTR(x,y) (x->y = MapSL((SEGPTR)x##16->y));\n\n/******************************************************************\n *\t\tMSVIDEO_MapICDEX16To32\n *\n *\n */\nstatic LPVOID MSVIDEO_MapICDEX16To32(LPDWORD lParam)\n{\n    LPVOID ret;\n\n    ICDECOMPRESSEX *icdx = HeapAlloc(GetProcessHeap(), 0, sizeof(ICDECOMPRESSEX));\n    ICDECOMPRESSEX16 *icdx16 = MapSL(*lParam);\n    ret = icdx16;\n\n    COPY(icdx, dwFlags);\n    COPYPTR(icdx, lpbiSrc);\n    COPYPTR(icdx, lpSrc);\n    COPYPTR(icdx, lpbiDst);\n    COPYPTR(icdx, lpDst);\n    COPY(icdx, xDst);\n    COPY(icdx, yDst);\n    COPY(icdx, dxDst);\n    COPY(icdx, dyDst);\n    COPY(icdx, xSrc);\n    COPY(icdx, ySrc);\n    COPY(icdx, dxSrc);\n    COPY(icdx, dySrc);\n\n    *lParam = (DWORD)(icdx);\n    return ret;\n}\n\n/******************************************************************\n *\t\tMSVIDEO_MapMsg16To32\n *\n *\n */\nstatic LPVOID MSVIDEO_MapMsg16To32(UINT msg, LPDWORD lParam1, LPDWORD lParam2)\n{\n    LPVOID ret = 0;\n\n    TRACE(\"Mapping %d\\n\", msg);\n\n    switch (msg)\n    {\n    case DRV_LOAD:\n    case DRV_ENABLE:\n    case DRV_CLOSE:\n    case DRV_DISABLE:\n    case DRV_FREE:\n    case ICM_COMPRESS_END:\n    case ICM_DECOMPRESS_END:\n    case ICM_DECOMPRESSEX_END:\n    case ICM_SETQUALITY:\n    case ICM_DRAW_START_PLAY:\n    case ICM_DRAW_STOP_PLAY:\n    case ICM_DRAW_REALIZE:\n    case ICM_DRAW_RENDERBUFFER:\n    case ICM_DRAW_END:\n    case 0x4016: // not documented\n        break;\n    case DRV_OPEN:\n    case ICM_GETDEFAULTQUALITY:\n    case ICM_GETQUALITY:\n    case ICM_GETSTATE:\n    case ICM_SETSTATE:\n    case ICM_DRAW_WINDOW:\n    case ICM_GETBUFFERSWANTED:\n    case ICM_GETDEFAULTKEYFRAMERATE:\n        *lParam1 = (DWORD)MapSL(*lParam1);\n        break;\n    case ICM_ABOUT:\n    case ICM_CONFIGURE:\n        *lParam1 = HWND_32(*lParam1);\n        break;\n    case ICM_GETINFO:\n        {\n            ICINFO *ici = HeapAlloc(GetProcessHeap(), 0, sizeof(ICINFO));\n            ICINFO16 *ici16;\n\n            ici16 = MapSL(*lParam1);\n            ret = ici16;\n\n            ici->dwSize = sizeof(ICINFO);\n            COPY(ici, fccType);\n            COPY(ici, fccHandler);\n            COPY(ici, dwFlags);\n            COPY(ici, dwVersion);\n            COPY(ici, dwVersionICM);\n            MultiByteToWideChar( CP_ACP, 0, ici16->szName, -1, ici->szName, 16 );\n            MultiByteToWideChar( CP_ACP, 0, ici16->szDescription, -1, ici->szDescription, 128 );\n            MultiByteToWideChar( CP_ACP, 0, ici16->szDriver, -1, ici->szDriver, 128 );\n            *lParam1 = (DWORD)(ici);\n            *lParam2 = sizeof(ICINFO);\n        }\n        break;\n    case ICM_COMPRESS:\n        {\n            ICCOMPRESS *icc = HeapAlloc(GetProcessHeap(), 0, sizeof(ICCOMPRESS));\n            ICCOMPRESS *icc16;\n\n            icc16 = MapSL(*lParam1);\n            ret = icc16;\n\n            COPY(icc, dwFlags);\n            COPYPTR(icc, lpbiOutput);\n            COPYPTR(icc, lpOutput);\n            COPYPTR(icc, lpbiInput);\n            COPYPTR(icc, lpInput);\n            COPYPTR(icc, lpckid);\n            COPYPTR(icc, lpdwFlags);\n            COPY(icc, lFrameNum);\n            COPY(icc, dwFrameSize);\n            COPY(icc, dwQuality);\n            COPYPTR(icc, lpbiPrev);\n            COPYPTR(icc, lpPrev);\n\n            *lParam1 = (DWORD)(icc);\n            *lParam2 = sizeof(ICCOMPRESS);\n        }\n        break;\n    case ICM_DECOMPRESS:\n        {\n            ICDECOMPRESS *icd = HeapAlloc(GetProcessHeap(), 0, sizeof(ICDECOMPRESS));\n            ICDECOMPRESS *icd16; /* Same structure except for the pointers */\n\n            icd16 = MapSL(*lParam1);\n            ret = icd16;\n\n            COPY(icd, dwFlags);\n            COPYPTR(icd, lpbiInput);\n            COPYPTR(icd, lpInput);\n            COPYPTR(icd, lpbiOutput);\n            COPYPTR(icd, lpOutput);\n            COPY(icd, ckid);\n\n            *lParam1 = (DWORD)(icd);\n            *lParam2 = sizeof(ICDECOMPRESS);\n        }\n        break;\n    case ICM_COMPRESS_BEGIN:\n    case ICM_COMPRESS_GET_FORMAT:\n    case ICM_COMPRESS_GET_SIZE:\n    case ICM_COMPRESS_QUERY:\n    case ICM_DECOMPRESS_GET_FORMAT:\n    case ICM_DECOMPRESS_QUERY:\n    case ICM_DECOMPRESS_BEGIN:\n    case ICM_DECOMPRESS_SET_PALETTE:\n    case ICM_DECOMPRESS_GET_PALETTE:\n        *lParam1 = (DWORD)MapSL(*lParam1);\n        *lParam2 = (DWORD)MapSL(*lParam2);\n        break;\n    case ICM_DECOMPRESSEX_QUERY:\n        if ((*lParam2 != sizeof(ICDECOMPRESSEX16)) && (*lParam2 != 0))\n            WARN(\"*lParam2 has unknown value %p\\n\", (ICDECOMPRESSEX16*)*lParam2);\n        /* FIXME: *lParm2 is meant to be 0 or an ICDECOMPRESSEX16*, but is sizeof(ICDECOMRPESSEX16)\n         * This is because of ICMessage(). Special case it?\n         {\n         LPVOID* addr = HeapAlloc(GetProcessHeap(), 0, 2*sizeof(LPVOID));\n         addr[0] = MSVIDEO_MapICDEX16To32(lParam1);\n         if (*lParam2)\n         addr[1] = MSVIDEO_MapICDEX16To32(lParam2);\n         else\n         addr[1] = 0;\n\n         ret = addr;\n         }\n         break;*/\n    case ICM_DECOMPRESSEX_BEGIN:\n    case ICM_DECOMPRESSEX:\n        ret = MSVIDEO_MapICDEX16To32(lParam1);\n        *lParam2 = sizeof(ICDECOMPRESSEX);\n        break;\n    case ICM_DRAW_BEGIN:\n        {\n            ICDRAWBEGIN *icdb = HeapAlloc(GetProcessHeap(), 0, sizeof(ICDRAWBEGIN));\n            ICDRAWBEGIN16 *icdb16 = MapSL(*lParam1);\n            ret = icdb16;\n\n            COPY(icdb, dwFlags);\n            icdb->hpal = HPALETTE_32(icdb16->hpal);\n            icdb->hwnd = HWND_32(icdb16->hwnd);\n            icdb->hdc = HDC_32(icdb16->hdc);\n            COPY(icdb, xDst);\n            COPY(icdb, yDst);\n            COPY(icdb, dxDst);\n            COPY(icdb, dyDst);\n            COPYPTR(icdb, lpbi);\n            COPY(icdb, xSrc);\n            COPY(icdb, ySrc);\n            COPY(icdb, dxSrc);\n            COPY(icdb, dySrc);\n            COPY(icdb, dwRate);\n            COPY(icdb, dwScale);\n\n            *lParam1 = (DWORD)(icdb);\n            *lParam2 = sizeof(ICDRAWBEGIN);\n        }\n        break;\n    case ICM_DRAW_SUGGESTFORMAT:\n        {\n            ICDRAWSUGGEST *icds = HeapAlloc(GetProcessHeap(), 0, sizeof(ICDRAWSUGGEST));\n            ICDRAWSUGGEST16 *icds16 = MapSL(*lParam1);\n\n            ret = icds16;\n\n            ERR(\"COPY(icds, dwFlags);\\n\");\n            //COPY(icds, dwFlags);\n            COPYPTR(icds, lpbiIn);\n            COPYPTR(icds, lpbiSuggest);\n            COPY(icds, dxSrc);\n            COPY(icds, dySrc);\n            COPY(icds, dxDst);\n            COPY(icds, dyDst);\n            icds->hicDecompressor = HIC_32(icds16->hicDecompressor);\n\n            *lParam1 = (DWORD)(icds);\n            *lParam2 = sizeof(ICDRAWSUGGEST);\n        }\n        break;\n    case ICM_DRAW:\n        {\n            ICDRAW *icd = HeapAlloc(GetProcessHeap(), 0, sizeof(ICDRAW));\n            ICDRAW *icd16 = MapSL(*lParam1);\n            ret = icd16;\n\n            COPY(icd, dwFlags);\n            COPYPTR(icd, lpFormat);\n            COPYPTR(icd, lpData);\n            COPY(icd, cbData);\n            COPY(icd, lTime);\n\n            *lParam1 = (DWORD)(icd);\n            *lParam2 = sizeof(ICDRAW);\n        }\n        break;\n    case ICM_DRAW_START:\n    case ICM_DRAW_STOP:\n        break;\n    default:\n        FIXME(\"%d is not yet handled. Expect a crash.\\n\", msg);\n    }\n    return ret;\n}\n\n#undef COPY\n#undef COPYPTR\n\n/******************************************************************\n *\t\tMSVIDEO_UnmapMsg16To32\n *\n *\n */\nstatic void MSVIDEO_UnmapMsg16To32(UINT msg, LPVOID data16, LPDWORD lParam1, LPDWORD lParam2)\n{\n    TRACE(\"Unmapping %d\\n\", msg);\n\n#define UNCOPY(x, y) (x##16->y = x->y);\n\n    switch (msg)\n    {\n    case ICM_GETINFO:\n        {\n            ICINFO *ici = (ICINFO*)(*lParam1);\n            ICINFO16 *ici16 = data16;\n\n            UNCOPY(ici, fccType);\n            UNCOPY(ici, fccHandler);\n            UNCOPY(ici, dwFlags);\n            UNCOPY(ici, dwVersion);\n            UNCOPY(ici, dwVersionICM);\n            WideCharToMultiByte( CP_ACP, 0, ici->szName, -1, ici16->szName,\n                                 sizeof(ici16->szName), NULL, NULL );\n            ici16->szName[sizeof(ici16->szName)-1] = 0;\n            WideCharToMultiByte( CP_ACP, 0, ici->szDescription, -1, ici16->szDescription,\n                                 sizeof(ici16->szDescription), NULL, NULL );\n            ici16->szDescription[sizeof(ici16->szDescription)-1] = 0;\n            /* This just gives garbage for some reason - BB\n               lstrcpynWtoA(ici16->szDriver, ici->szDriver, 128);*/\n\n            HeapFree(GetProcessHeap(), 0, ici);\n        }\n        break;\n    case ICM_DECOMPRESS_QUERY:\n        /*{\n          LPVOID* x = data16;\n          HeapFree(GetProcessHeap(), 0, x[0]);\n          if (x[1])\n          HeapFree(GetProcessHeap(), 0, x[1]);\n          }*/\n          break;\n    case ICM_COMPRESS:\n    case ICM_DECOMPRESS:\n    case ICM_DECOMPRESSEX_QUERY:\n    case ICM_DECOMPRESSEX_BEGIN:\n    case ICM_DECOMPRESSEX:\n    case ICM_DRAW_BEGIN:\n    case ICM_DRAW_SUGGESTFORMAT:\n    case ICM_DRAW:\n        HeapFree(GetProcessHeap(), 0, *lParam1);\n        break;\n    default:\n        ERR(\"Unmapping unmapped msg %d\\n\", msg);\n    }\n#undef UNCOPY\n}\n\n/***********************************************************************\n *\t\tICInfo\t\t\t\t[MSVIDEO.200]\n */\nBOOL16 VFWAPI ICInfo16(DWORD fccType, DWORD fccHandler, ICINFO16 *lpicinfo)\n{\n    BOOL16 ret;\n    LPVOID lpv;\n    DWORD lParam = (DWORD)lpicinfo;\n    DWORD size = ((ICINFO*)(MapSL((SEGPTR)lpicinfo)))->dwSize;\n\n    /* Use the mapping functions to map the ICINFO structure */\n    lpv = MSVIDEO_MapMsg16To32(ICM_GETINFO, &lParam, &size);\n\n    ret = ICInfo(fccType, fccHandler, (ICINFO*)lParam);\n\n    MSVIDEO_UnmapMsg16To32(ICM_GETINFO, lpv, &lParam, &size);\n\n    return ret;\n}\n\n/******************************************************************\n *\t\tIC_Callback3216\n *\n *\n */\nstatic  LRESULT CALLBACK  IC_Callback3216(DWORD pfn16, HIC hic, HDRVR hdrv, UINT msg, LPARAM lp1, LPARAM lp2)\n{\n    WORD args[8];\n    DWORD ret = 0;\n    void *data = (void *)lp1;\n\n    switch (msg)\n    {\n    case DRV_OPEN:\n        lp2 = (DWORD)MapLS((void*)lp2);\n        break;\n    case ICM_ABOUT:\n    case ICM_CONFIGURE:\n        lp1 = HWND_16(lp1);\n        break;\n    case ICM_GETINFO:\n    {\n        ICINFO16 *ici16 = HeapAlloc(GetProcessHeap(), 0, sizeof(ICINFO16));\n        ICINFO *ici = lp1;\n\n        ici16->dwSize = sizeof(ICINFO16);\n        ici16->fccType = ici->fccType;\n        ici16->fccHandler = ici->fccHandler;\n        ici16->dwFlags = ici->dwFlags;\n        ici16->dwVersion = ici->dwVersion;\n        ici16->dwVersionICM = ici->dwVersionICM;\n        WideCharToMultiByte( CP_ACP, 0, ici->szName, -1, ici16->szName,\n                        sizeof(ici16->szName), NULL, NULL );\n        ici16->szName[sizeof(ici16->szName)-1] = 0;\n        WideCharToMultiByte( CP_ACP, 0, ici->szDescription, -1, ici16->szDescription,\n                        sizeof(ici16->szDescription), NULL, NULL );\n        ici16->szDescription[sizeof(ici16->szDescription)-1] = 0;\n        WideCharToMultiByte( CP_ACP, 0, ici->szDriver, -1, ici16->szDriver,\n                        sizeof(ici16->szDriver), NULL, NULL );\n        ici16->szDescription[sizeof(ici16->szDescription)-1] = 0;\n        lp1 = MapLS(ici16);\n        lp2 = sizeof(ICINFO16);\n        break;\n    }\n    case ICM_DRAW_BEGIN:\n    {\n        ICDRAWBEGIN16 *icdb16 = HeapAlloc(GetProcessHeap(), 0, sizeof(ICDRAWBEGIN16));\n        ICDRAWBEGIN *icdb = lp1;\n\n        icdb16->dwFlags = icdb->dwFlags;\n        icdb16->hpal = HPALETTE_16(icdb->hpal);\n        icdb16->hwnd = HWND_16(icdb->hwnd);\n        icdb16->hdc = HDC_16(icdb->hdc);\n        icdb16->xDst = icdb->xDst;\n        icdb16->yDst = icdb->yDst;\n        icdb16->dxDst = icdb->dxDst;\n        icdb16->dyDst = icdb->dyDst;\n        icdb16->lpbi = MapLS(icdb->lpbi);\n        icdb16->xSrc = icdb->xSrc;\n        icdb16->ySrc = icdb->ySrc;\n        icdb16->dxSrc = icdb->dxSrc;\n        icdb16->dySrc = icdb->dySrc;\n        icdb16->dwRate = icdb->dwRate;\n        icdb16->dwScale = icdb->dwScale;\n\n        lp1 = (LPARAM)(MapLS(icdb16));\n        lp2 = sizeof(ICDRAWBEGIN16);\n        break;\n    }\n    case ICM_DRAW_SUGGESTFORMAT:\n    {\n        ICDRAWSUGGEST16 *icds16 = HeapAlloc(GetProcessHeap(), 0, sizeof(ICDRAWSUGGEST16));\n        ICDRAWSUGGEST *icds = lp1;\n\n        icds16->lpbiIn = MapLS(icds->lpbiIn);\n        icds16->lpbiSuggest = MapLS(icds->lpbiSuggest);\n        icds16->dxSrc = icds->dxSrc;\n        icds16->dySrc = icds->dySrc;\n        icds16->dxDst = icds->dxDst;\n        icds16->dyDst = icds->dyDst;\n        icds16->hicDecompressor = HIC_16(icds->hicDecompressor);\n\n        lp1 = (LPARAM)((char *)MapLS(icds16) + 4); // dwFlags doesn't exist?\n        lp2 = sizeof(ICDRAWSUGGEST16) - 4;\n        break;\n    }\n    case ICM_DRAW_QUERY:\n    case ICM_SETSTATE:\n    case ICM_DRAW_WINDOW:\n    case ICM_GETDEFAULTKEYFRAMERATE:\n        lp1 = (LPARAM)(MapLS(lp1));\n        break;\n    case ICM_DRAW:\n    {\n        ICDRAW *icd16 = HeapAlloc(GetProcessHeap(), 0, sizeof(ICDRAW));\n        ICDRAW *icd = lp1;\n\n        DWORD size = icd->cbData;\n        int count = (size + 0xffff) / 0x10000;\n        WORD sel = AllocSelectorArray16(count);\n        for (int i = 0; i < count; i++)\n        {\n            SetSelectorBase(sel + (i << __AHSHIFT), (DWORD)icd->lpData + i * 0x10000);\n            SetSelectorLimit16(sel + (i << __AHSHIFT), size - 1);\n            size -= 0x10000;\n        }\n        icd16->dwFlags = icd->dwFlags;\n        icd16->lpFormat = MapLS(icd->lpFormat);\n        icd16->lpData = sel << 16;\n        icd16->cbData = icd->cbData;\n        icd16->lTime = icd->lTime;\n\n        lp1 = (LPARAM)(MapLS(icd16));\n        lp2 = sizeof(ICDRAW);\n        break;\n    }\n    case ICM_DRAW_REALIZE:\n        lp1 = (LPARAM)(HDC_16(lp1));\n        break;\n    case ICM_COMPRESS_GET_FORMAT:\n    case ICM_COMPRESS_GET_SIZE:\n    case ICM_COMPRESS_QUERY:\n    case ICM_COMPRESS_BEGIN:\n    case ICM_DECOMPRESS_QUERY:\n    case ICM_DECOMPRESS_GET_FORMAT:\n    case ICM_DECOMPRESS_GET_PALETTE:\n    case ICM_DECOMPRESS_BEGIN:\n        lp1 = (LPARAM)(MapLS(lp1));\n        lp2 = (LPARAM)(MapLS(lp2));\n        break;\n    case ICM_COMPRESS:\n    {\n        ICCOMPRESS *icc16 = HeapAlloc(GetProcessHeap(), 0, sizeof(ICCOMPRESS));\n        ICCOMPRESS *icc = lp1;\n\n        DWORD size = icc->lpbiInput->biSizeImage;\n        int count = (size + 0xffff) / 0x10000;\n        WORD insel = AllocSelectorArray16(count);\n        for (int i = 0; i < count; i++)\n        {\n            SetSelectorBase(insel + (i << __AHSHIFT), (DWORD)icc->lpInput + i * 0x10000);\n            SetSelectorLimit16(insel + (i << __AHSHIFT), size - 1);\n            size -= 0x10000;\n        }\n        size = icc->lpbiOutput->biSizeImage;\n        count = (size + 0xffff) / 0x10000;\n        WORD outsel = AllocSelectorArray16(count);\n        for (int i = 0; i < count; i++)\n        {\n            SetSelectorBase(outsel + (i << __AHSHIFT), (DWORD)icc->lpOutput + i * 0x10000);\n            SetSelectorLimit16(outsel + (i << __AHSHIFT), size - 1);\n            size -= 0x10000;\n        }\n        WORD prevsel = 0;\n        if (icc->lpbiPrev)\n        {\n            size = icc->lpbiPrev->biSizeImage;\n            count = (size + 0xffff) / 0x10000;\n            prevsel = AllocSelectorArray16(count);\n            for (int i = 0; i < count; i++)\n            {\n                SetSelectorBase(prevsel + (i << __AHSHIFT), (DWORD)icc->lpPrev + i * 0x10000);\n                SetSelectorLimit16(prevsel + (i << __AHSHIFT), size - 1);\n                size -= 0x10000;\n            }\n        }\n        \n        icc16->dwFlags = icc->dwFlags;\n        icc16->lpbiInput = MapLS(icc->lpbiInput);\n        icc16->lpInput = insel << 16;\n        icc16->lpbiOutput = MapLS(icc->lpbiOutput);\n        icc16->lpOutput = outsel << 16;\n        icc16->lpckid = MapLS(icc->lpckid);\n        icc16->lpdwFlags = MapLS(icc->lpdwFlags);\n        icc16->lFrameNum = icc->lFrameNum;\n        icc16->dwFrameSize = icc->dwFrameSize;\n        icc16->lpbiPrev = prevsel ? MapLS(icc->lpbiPrev) : NULL;\n        icc16->lpPrev = prevsel ? prevsel << 16 : 0;\n\n        lp1 = (LPARAM)(MapLS(icc16));\n        lp2 = sizeof(ICCOMPRESS);\n        break;\n    } \n    case ICM_DECOMPRESS:\n    {\n        ICDECOMPRESS *icdec16 = HeapAlloc(GetProcessHeap(), 0, sizeof(ICDECOMPRESS));\n        ICDECOMPRESS *icdec = lp1;\n\n        DWORD size = icdec->lpbiInput->biSizeImage;\n        int count = (size + 0xffff) / 0x10000;\n        WORD insel = AllocSelectorArray16(count);\n        for (int i = 0; i < count; i++)\n        {\n            SetSelectorBase(insel + (i << __AHSHIFT), (DWORD)icdec->lpInput + i * 0x10000);\n            SetSelectorLimit16(insel + (i << __AHSHIFT), size - 1);\n            size -= 0x10000;\n        }\n        size = icdec->lpbiOutput->biSizeImage;\n        count = (size + 0xffff) / 0x10000;\n        WORD outsel = AllocSelectorArray16(count);\n        for (int i = 0; i < count; i++)\n        {\n            SetSelectorBase(outsel + (i << __AHSHIFT), (DWORD)icdec->lpOutput + i * 0x10000);\n            SetSelectorLimit16(outsel + (i << __AHSHIFT), size - 1);\n            size -= 0x10000;\n        }\n        \n        icdec16->dwFlags = icdec->dwFlags;\n        icdec16->lpbiInput = MapLS(icdec->lpbiInput);\n        icdec16->lpInput = insel << 16;\n        icdec16->lpbiOutput = MapLS(icdec->lpbiOutput);\n        icdec16->lpOutput = outsel << 16;\n        icdec16->ckid = icdec->ckid;\n\n        lp1 = (LPARAM)(MapLS(icdec16));\n        lp2 = sizeof(ICDECOMPRESS);\n        break;\n    }\n    }\n    args[7] = HIWORD(hic);\n    args[6] = LOWORD(hic);\n    args[5] = HDRVR_16(hdrv);\n    args[4] = msg;\n    args[3] = HIWORD(lp1);\n    args[2] = LOWORD(lp1);\n    args[1] = HIWORD(lp2);\n    args[0] = LOWORD(lp2);\n    WOWCallback16Ex( pfn16, WCB16_PASCAL, sizeof(args), args, &ret );\n\n    switch (msg)\n    {\n    case DRV_OPEN:\n        UnMapLS(lp2);\n        break;\n    case ICM_GETINFO:\n    {\n        ICINFO16 *ici16 = MapSL(lp1);\n        ICINFO *ici = (ICINFO *)data;\n\n        UnMapLS(lp1);\n        ici->fccType = ici16->fccType;\n        ici->fccHandler = ici16->fccHandler;\n        ici->dwFlags = ici16->dwFlags;\n        ici->dwVersion = ici16->dwVersion;\n        ici->dwVersionICM = ici16->dwVersionICM;\n        MultiByteToWideChar( CP_ACP, 0, ici16->szName, -1, ici->szName, 16 );\n        MultiByteToWideChar( CP_ACP, 0, ici16->szDescription, -1, ici->szDescription, 128 );\n        MultiByteToWideChar( CP_ACP, 0, ici16->szDriver, -1, ici->szDriver, 128 );\n        HeapFree(GetProcessHeap(), 0, ici16);\n        break; \n    }\n     case ICM_DRAW_BEGIN:\n    {\n        ICDRAWBEGIN16 *icdb16 = MapSL(lp1);\n        UnMapLS(lp1);\n        UnMapLS(icdb16->lpbi);\n        HeapFree(GetProcessHeap(), 0, icdb16);\n        break;\n    }\n    case ICM_DRAW_SUGGESTFORMAT:\n    {\n        ICDRAWSUGGEST16 *icds16 = MapSL(lp1 - 4);\n        UnMapLS(lp1);\n        UnMapLS(icds16->lpbiIn);\n        UnMapLS(icds16->lpbiSuggest);\n        HeapFree(GetProcessHeap(), 0, icds16);\n        break;\n    }\n    case ICM_DRAW_QUERY:\n    case ICM_SETSTATE:\n    case ICM_DRAW_WINDOW:\n    case ICM_GETDEFAULTKEYFRAMERATE:\n        UnMapLS(lp1);\n        break;\n    case ICM_COMPRESS:\n    {\n        ICCOMPRESS *icc16 = MapSL(lp1);\n        WORD sel = SELECTOROF(icc16->lpInput);\n        int count = (GetSelectorLimit16(sel) + 0xffff) / 0x10000;\n        for (int i = 0; i < count; i++)\n            FreeSelector16(sel + (i << __AHSHIFT));\n        sel = SELECTOROF(icc16->lpOutput);\n        count = (GetSelectorLimit16(sel) + 0xffff) / 0x10000;\n        for (int i = 0; i < count; i++)\n            FreeSelector16(sel + (i << __AHSHIFT));\n        if (icc16->lpbiPrev)\n        {\n            sel = SELECTOROF(icc16->lpPrev);\n            count = (GetSelectorLimit16(sel) + 0xffff) / 0x10000;\n            for (int i = 0; i < count; i++)\n                FreeSelector16(sel + (i << __AHSHIFT));\n            UnMapLS(icc16->lpbiPrev);\n        }\n        UnMapLS(lp1);\n        UnMapLS(icc16->lpbiInput);\n        UnMapLS(icc16->lpbiOutput);\n        UnMapLS(icc16->lpckid);\n        UnMapLS(icc16->lpdwFlags);\n        HeapFree(GetProcessHeap(), 0, icc16);\n        break;\n    }\n    case ICM_DECOMPRESS:\n    {\n        ICDECOMPRESS *icdec16 = MapSL(lp1);\n        WORD sel = SELECTOROF(icdec16->lpInput);\n        int count = (GetSelectorLimit16(sel) + 0xffff) / 0x10000;\n        for (int i = 0; i < count; i++)\n            FreeSelector16(sel + (i << __AHSHIFT));\n        sel = SELECTOROF(icdec16->lpOutput);\n        count = (GetSelectorLimit16(sel) + 0xffff) / 0x10000;\n        for (int i = 0; i < count; i++)\n            FreeSelector16(sel + (i << __AHSHIFT));\n        UnMapLS(lp1);\n        UnMapLS(icdec16->lpbiInput);\n        UnMapLS(icdec16->lpbiOutput);\n        HeapFree(GetProcessHeap(), 0, icdec16);\n        break;\n    }\n    case ICM_DRAW:\n    {\n        ICDRAW *icd16 = MapSL(lp1);\n        int count = (icd16->cbData + 0xffff) / 0x10000;\n        WORD sel = SELECTOROF(icd16->lpData);\n        for (int i = 0; i < count; i++)\n            FreeSelector16(sel + (i << __AHSHIFT));\n        UnMapLS(lp1);\n        UnMapLS(icd16->lpFormat);\n        HeapFree(GetProcessHeap(), 0, icd16);\n        break;\n    }\n    case ICM_COMPRESS_GET_SIZE:\n    case ICM_COMPRESS_GET_FORMAT:\n    case ICM_COMPRESS_QUERY:\n    case ICM_COMPRESS_BEGIN:\n    case ICM_DECOMPRESS_QUERY:\n    case ICM_DECOMPRESS_GET_FORMAT:\n    case ICM_DECOMPRESS_GET_PALETTE:\n    case ICM_DECOMPRESS_BEGIN:\n        UnMapLS(lp1);\n        UnMapLS(lp2);\n        break;\n    }\n    return ret;\n}\n\n#define MAX_THUNKS      32\n\n#include \"pshpack1.h\"\nstatic struct msvideo_thunk\n{\n    BYTE        popl_eax;        /* popl  %eax (return address) */\n    BYTE        pushl_func;      /* pushl $pfn16 (16bit callback function) */\n    DWORD       pfn16;\n    BYTE        pushl_eax;       /* pushl %eax */\n    BYTE        jmp;             /* ljmp WDML_InvokeCallback16 */\n    DWORD       callback;\n    HIC16       hIC16;           /* driver's handle */\n} *MSVIDEO_Thunks;\n#include \"poppack.h\"\n\nstatic CRITICAL_SECTION msvideo_cs;\nstatic CRITICAL_SECTION_DEBUG critsect_debug =\n{\n    0, 0, &msvideo_cs,\n    { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },\n      0, 0, { (DWORD_PTR)(__FILE__ \": msvideo_cs\") }\n};\nstatic CRITICAL_SECTION msvideo_cs = { &critsect_debug, -1, 0, 0, 0, 0 };\n\nstatic struct msvideo_thunk*      MSVIDEO_AddThunk(DWORD pfn16)\n{\n    struct msvideo_thunk* thunk;\n\n    if (!MSVIDEO_Thunks)\n    {\n        MSVIDEO_Thunks = VirtualAlloc(NULL, MAX_THUNKS * sizeof(*MSVIDEO_Thunks), MEM_COMMIT,\n                                      PAGE_EXECUTE_READWRITE);\n        if (!MSVIDEO_Thunks) return NULL;\n        for (thunk = MSVIDEO_Thunks; thunk < &MSVIDEO_Thunks[MAX_THUNKS]; thunk++)\n        {\n            thunk->popl_eax     = 0x58;   /* popl  %eax */\n            thunk->pushl_func   = 0x68;   /* pushl $pfn16 */\n            thunk->pfn16        = 0;\n            thunk->pushl_eax    = 0x50;   /* pushl %eax */\n            thunk->jmp          = 0xe9;   /* jmp IC_Callback3216 */\n            thunk->callback     = (char *)IC_Callback3216 - (char *)(&thunk->callback + 1);\n            thunk->hIC16        = 0;\n        }\n    }\n    for (thunk = MSVIDEO_Thunks; thunk < &MSVIDEO_Thunks[MAX_THUNKS]; thunk++)\n    {\n        if (thunk->pfn16 == 0)\n        {\n            thunk->pfn16 = pfn16;\n            return thunk;\n        }\n    }\n    FIXME(\"Out of msvideo-thunks. Bump MAX_THUNKS\\n\");\n    return NULL;\n}\n\nstatic struct msvideo_thunk*    MSVIDEO_HasThunk(HIC16 hic)\n{\n    struct msvideo_thunk* thunk;\n\n    if (!MSVIDEO_Thunks)\n        return NULL;\n\n    for (thunk = MSVIDEO_Thunks; thunk < &MSVIDEO_Thunks[MAX_THUNKS]; thunk++)\n    {\n        if (thunk->hIC16 == hic) return thunk;\n    }\n    return NULL;\n}\n\nvoid *get_video_thunk(DWORD pfn16)\n{\n    struct msvideo_thunk* thunk;\n\n    if (!MSVIDEO_Thunks)\n        return NULL;\n\n    for (thunk = MSVIDEO_Thunks; thunk < &MSVIDEO_Thunks[MAX_THUNKS]; thunk++)\n    {\n        if (thunk->pfn16 == pfn16) return thunk;\n    }\n    return (void *)MSVIDEO_AddThunk(pfn16);\n}    \n\n#define MAX_DRIVERS 10\n\nstatic struct msvideo_drv\n{\n    DWORD fccType;\n    DWORD fccHandler;\n    HMODULE16 hmod;\n} *MSVIDEO_drv = {0};\n\nBOOL add_module(DWORD fccType, DWORD fccHandler, HMODULE16 hmod)\n{\n    int i;\n    if (!MSVIDEO_drv)\n        MSVIDEO_drv = (struct msvideo_drv *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(struct msvideo_drv) * 10);\n    for (i = 0; i < 10; i++)\n    {\n        if (!MSVIDEO_drv[i].hmod) break;\n    }\n    if (i == 10) return FALSE;\n    MSVIDEO_drv[i].fccType = fccType;\n    MSVIDEO_drv[i].fccHandler = fccHandler;\n    MSVIDEO_drv[i].hmod = hmod;\n    return TRUE;\n}\n\nvoid remove_module(DWORD fccType, DWORD fccHandler, BOOL unload)\n{\n    HMODULE16 hmod;\n    if (!MSVIDEO_drv) return;\n    for (int i = 0; i < 10; i++)\n    {\n        if ((MSVIDEO_drv[i].fccType == fccType) && (MSVIDEO_drv[i].fccHandler == fccHandler))\n        {\n            if (unload)\n            {\n                ICRemove(fccType, fccHandler, 0);\n                FreeLibrary16(MSVIDEO_drv[i].hmod);\n            }\n            MSVIDEO_drv[i].fccType = 0;\n            MSVIDEO_drv[i].fccHandler = 0;\n            MSVIDEO_drv[i].hmod = 0;\n        }\n    }\n}\n\nvoid remove_all_modules()\n{\n    if (!MSVIDEO_drv) return;\n    for (int i = 0; i < 10; i++)\n    {\n        if (MSVIDEO_drv[i].hmod)\n            FreeLibrary(MSVIDEO_drv[i].hmod);\n    }\n    HeapFree(GetProcessHeap(), 0, MSVIDEO_drv);\n}\n\n/***********************************************************************\n *\t\tICOpenFunction\t\t\t[MSVIDEO.206]\n */\nHIC16 VFWAPI ICOpenFunction16(DWORD fccType, DWORD fccHandler, UINT16 wMode, FARPROC16 lpfnHandler)\n{\n    HIC         hic32;\n    struct msvideo_thunk*       thunk;\n\n    EnterCriticalSection(&msvideo_cs);\n    if (!(thunk = MSVIDEO_AddThunk((DWORD)lpfnHandler)))\n    {\n        LeaveCriticalSection(&msvideo_cs);\n        return 0;\n    }\n    if ((hic32 = ICOpenFunction(fccType, fccHandler, wMode, (DRIVERPROC)thunk)))\n        thunk->hIC16 = HIC_16(hic32);\n    else\n        thunk->pfn16 = 0;\n    LeaveCriticalSection(&msvideo_cs);\n    return HIC_16(hic32);\n}\n\n/***********************************************************************\n *\t\tICSendMessage\t\t\t[MSVIDEO.205]\n */\nLRESULT VFWAPI ICSendMessage16(HIC16 hic, UINT16 msg, DWORD lParam1, DWORD lParam2)\n{\n    LRESULT     ret = ICERR_BADHANDLE;\n    struct msvideo_thunk* thunk;\n\n    if ((thunk = MSVIDEO_HasThunk(hic)))\n    {\n        WORD args[8];\n        DWORD result;\n\n        /* FIXME: original code was passing hdrv first and hic second */\n        /* but this doesn't match what IC_Callback3216 does */\n        args[7] = HIWORD(hic);\n        args[6] = LOWORD(hic);\n        args[5] = 0; /* the 32bit also sets it to NULL */\n        args[4] = msg;\n        args[3] = HIWORD(lParam1);\n        args[2] = LOWORD(lParam1);\n        args[1] = HIWORD(lParam2);\n        args[0] = LOWORD(lParam2);\n        WOWCallback16Ex( thunk->pfn16, WCB16_PASCAL, sizeof(args), args, &result );\n        ret = result;\n    }\n    else\n    {\n        /* map the message for a 32 bit infrastructure, and pass it along */\n        void*       data16 = MSVIDEO_MapMsg16To32(msg, &lParam1, &lParam2);\n\n        ret = ICSendMessage(HIC_32(hic), msg, lParam1, lParam2);\n        if (data16)\n            MSVIDEO_UnmapMsg16To32(msg, data16, &lParam1, &lParam2);\n    }\n    return ret;\n}\n\n/***********************************************************************\n *\t\tICClose\t\t\t[MSVIDEO.204]\n */\nLRESULT WINAPI ICClose16(HIC16 hic)\n{\n    BOOL ret = ICClose(HIC_32(hic));\n\n    EnterCriticalSection(&msvideo_cs);\n    if (ret)\n    {\n        struct msvideo_thunk* thunk;\n        if ((thunk = MSVIDEO_HasThunk(hic)))\n        {\n            thunk->pfn16 = 0;\n            thunk->hIC16 = 0;\n        }\n        else ret = FALSE;\n    }\n    LeaveCriticalSection(&msvideo_cs);\n    return ret;\n}\n\n/***********************************************************************\n *\t\tVideoCapDriverDescAndVer\t[MSVIDEO.22]\n */\nDWORD WINAPI VideoCapDriverDescAndVer16(WORD nr, LPSTR buf1, WORD buf1len,\n                                        LPSTR buf2, WORD buf2len)\n{\n    static const char version_info_spec[] = \"\\\\StringFileInfo\\\\040904E4\\\\FileDescription\";\n    DWORD\tverhandle;\n    DWORD\tinfosize;\n    UINT\tsubblocklen;\n    char\t*s, buf[2048], fn[260];\n    LPBYTE\tinfobuf;\n    LPVOID\tsubblock;\n    DWORD\ti, cnt = 0, lRet;\n    DWORD\tbufLen, fnLen;\n    FILETIME\tlastWrite;\n    HKEY\thKey;\n    BOOL        found = FALSE;\n\n    TRACE(\"(%d,%p,%d,%p,%d)\\n\", nr, buf1, buf1len, buf2, buf2len);\n    lRet = RegOpenKeyExA(HKEY_LOCAL_MACHINE, HKLM_DRIVERS32, 0, KEY_QUERY_VALUE, &hKey);\n    if (lRet == ERROR_SUCCESS)\n    {\n\tRegQueryInfoKeyA( hKey, 0, 0, 0, &cnt, 0, 0, 0, 0, 0, 0, 0);\n\tfor (i = 0; i < cnt; i++)\n\t{\n            bufLen = ARRAY_SIZE(buf);\n\t    lRet = RegEnumKeyExA(hKey, i, buf, &bufLen, 0, 0, 0, &lastWrite);\n\t    if (lRet != ERROR_SUCCESS) continue;\n\t    if (strncasecmp(buf, \"vid\", 3)) continue;\n\t    if (nr--) continue;\n\t    fnLen = sizeof(fn);\n\t    lRet = RegQueryValueExA(hKey, buf, 0, 0, (LPBYTE)fn, &fnLen);\n\t    if (lRet == ERROR_SUCCESS) found = TRUE;\n\t    break;\n\t}\n\tRegCloseKey( hKey );\n    }\n\n    /* search system.ini if not found in the registry */\n    if (!found && GetPrivateProfileStringA(\"drivers32\", NULL, NULL, buf, sizeof(buf), \"system.ini\"))\n    {\n\tfor (s = buf; *s; s += strlen(s) + 1)\n\t{\n\t    if (strncasecmp(s, \"vid\", 3)) continue;\n\t    if (nr--) continue;\n\t    if (GetPrivateProfileStringA(\"drivers32\", s, NULL, fn, sizeof(fn), \"system.ini\"))\n\t\tfound = TRUE;\n\t    break;\n\t}\n    }\n\n    if (!found)\n    {\n        TRACE(\"No more VID* entries found nr=%d\\n\", nr);\n        return 20;\n    }\n    infosize = GetFileVersionInfoSizeA(fn, &verhandle);\n    if (!infosize)\n    {\n        TRACE(\"%s has no fileversioninfo.\\n\", fn);\n        return 18;\n    }\n    infobuf = HeapAlloc(GetProcessHeap(), 0, infosize);\n    if (GetFileVersionInfoA(fn, verhandle, infosize, infobuf))\n    {\n        /* Yes, two space behind : */\n        /* FIXME: test for buflen */\n        snprintf(buf2, buf2len, \"Version:  %d.%d.%d.%d\\n\",\n                ((WORD*)infobuf)[0x0f],\n                ((WORD*)infobuf)[0x0e],\n                ((WORD*)infobuf)[0x11],\n                ((WORD*)infobuf)[0x10]\n\t    );\n        TRACE(\"version of %s is %s\\n\", fn, buf2);\n    }\n    else\n    {\n        TRACE(\"GetFileVersionInfoA failed for %s.\\n\", fn);\n        lstrcpynA(buf2, fn, buf2len); /* msvideo.dll appears to copy fn*/\n    }\n    /* FIXME: language problem? */\n    if (VerQueryValueA(\tinfobuf,\n                        version_info_spec,\n                        &subblock,\n                        &subblocklen\n            ))\n    {\n        UINT copylen = min(subblocklen,buf1len-1);\n        memcpy(buf1, subblock, copylen);\n        buf1[copylen] = '\\0';\n        TRACE(\"VQA returned %s\\n\", (LPCSTR)subblock);\n    }\n    else\n    {\n        TRACE(\"VQA did not return on query \\\\StringFileInfo\\\\040904E4\\\\FileDescription?\\n\");\n        lstrcpynA(buf1, fn, buf1len); /* msvideo.dll appears to copy fn*/\n    }\n    HeapFree(GetProcessHeap(), 0, infobuf);\n    return 0;\n}\n\n/**************************************************************************\n *                      DllEntryPoint (MSVIDEO.3)\n *\n * MSVIDEO DLL entry point\n *\n */\nBOOL WINAPI VIDEO_LibMain(DWORD fdwReason, HINSTANCE hinstDLL, WORD ds,\n                          WORD wHeapSize, DWORD dwReserved1, WORD wReserved2)\n{\n    switch (fdwReason)\n    {\n    case DLL_PROCESS_ATTACH:\n        break;\n    case DLL_PROCESS_DETACH:\n        remove_all_modules();\n        DeleteCriticalSection(&msvideo_cs);\n        break;\n    }\n    return TRUE;\n}\n\n/***********************************************************************\n *                      MCIWndRegisterClass(MSVIDEO.251)\n */\nBOOL CDECL MCIWndRegisterClass16(void)\n{\n    return MCIWndRegisterClass();\n}\n\nstatic LRESULT (WINAPI *pMCIWndProc)(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);\nchar * WINAPI xlate_str_handle(const char *origstr, char *newstr);\n\nstatic LRESULT WINAPI MCIWndProc16(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)\n{\n    switch (msg)\n    {\n    case MCIWNDM_SENDSTRINGA:\n    {\n        char newstr[128];\n        lparam = (ULONG_PTR)MapSL(lparam);\n        return CallWindowProcA(pMCIWndProc, hwnd, msg, wparam, xlate_str_handle(lparam, newstr));\n    }\n \n    case MCIWNDM_SETTIMEFORMATA:\n    case MCIWNDM_GETMODEA:\n        lparam = (ULONG_PTR)MapSL(lparam);\n        break;\n\n    case MCI_OPEN:\n        return CallWindowProcA(pMCIWndProc, hwnd, MCIWNDM_OPENA, 0, (ULONG_PTR)MapSL(lparam));\n\n    case MCIWNDM_SETPALETTE:\n        wparam = HPALETTE_32(wparam);\n        break;\n\n    case WM_DESTROY:\n        SetWindowLongPtrA(hwnd, GWLP_WNDPROC, (ULONG_PTR)pMCIWndProc);\n        break;\n    default:\n        break;\n    }\n\n    return CallWindowProcA(pMCIWndProc, hwnd, msg, wparam, lparam);\n}\n\n/***********************************************************************\n *                      MCIWndCreate(MSVIDEO.250)\n */\nHWND16 CDECL MCIWndCreate16(HWND16 parent, HINSTANCE16 hinst16,\n                            DWORD style, LPSTR file)\n{\n    HWND hwnd = MCIWndCreateA(HWND_32(parent), 0, style, file);\n    if (hwnd)\n        pMCIWndProc = (void *)SetWindowLongPtrA(hwnd, GWLP_WNDPROC, (ULONG_PTR)MCIWndProc16);\n    return HWND_16(hwnd);\n}\n\ntypedef struct videohdr_tag16 {\n    SEGPTR      lpData;\n    DWORD       dwBufferLength;\n    DWORD       dwBytesUsed;\n    DWORD       dwTimeCaptured;\n    DWORD       dwUser;\n    DWORD       dwFlags;\n    DWORD       dwReserved[4];\n} VIDEOHDR16, NEAR *PVIDEOHDR16, FAR * LPVIDEOHDR16;\ntypedef WORD HVIDEO16;\ntypedef HVIDEO16 *LPHVIDEO16;\n\nDWORD WINAPI videoGetNumDevs16(void)\n{\n    FIXME(\"()\\n\");\n    return 0;\n}\nDWORD WINAPI videoOpen16(LPHVIDEO16 lphVideo, DWORD dwDevice, DWORD dwFlags)\n{\n    FIXME(\"\\n\");\n    return 0;\n}\nDWORD WINAPI videoClose16(HVIDEO16 hVideo)\n{\n    FIXME(\"\\n\");\n    return 0;\n}\n\nDWORD WINAPI videoDialog16(HVIDEO16 hVideo, HWND16 hWndParent, DWORD dwFlags)\n{\n    FIXME(\"\\n\");\n    return 0;\n}\n\nDWORD WINAPI videoGetChannelCaps16(HVIDEO16 hVideo, LPCHANNEL_CAPS lpChannelCaps, DWORD dwSize)\n{\n    FIXME(\"\\n\");\n    return 0;\n}\n\nDWORD WINAPI videoUpdate16(HVIDEO16 hVideo, HWND16 hWnd, HDC16 hDC)\n{\n    FIXME(\"\\n\");\n    return 0;\n}\n\nDWORD WINAPI videoConfigure16(HVIDEO16 hVideo, UINT16 msg, DWORD dwFlags, LPDWORD lpdwReturn, LPVOID lpData1, DWORD dwSize1, LPVOID lpData2, DWORD dwSize2)\n{\n    FIXME(\"\\n\");\n    return 0;\n}\n\nDWORD WINAPI videoConfigureStorage16(HVIDEO16 hVideo, LPSTR lpstrIdent, DWORD dwFlags)\n{\n    FIXME(\"\\n\");\n    return 0;\n}\n\nDWORD WINAPI videoFrame16(HVIDEO16 hVideo, LPVIDEOHDR16 lpVHdr)\n{\n    FIXME(\"\\n\");\n    return 0;\n}\n\nDWORD WINAPI videoMessage16(HVIDEO16 hVideo, UINT16 msg, DWORD dwP1, DWORD dwP2)\n{\n    FIXME(\"\\n\");\n    return 0;\n}\n\n\nDWORD WINAPI videoStreamAddBuffer16(HVIDEO16 hVideo, LPVIDEOHDR16 lpVHdr, DWORD dwSize)\n{\n    FIXME(\"\\n\");\n    return 0;\n}\n\nDWORD WINAPI videoStreamGetError16(HVIDEO16 hVideo, LPDWORD lpdwErrorFirst, LPDWORD lpdwErrorLast)\n{\n    FIXME(\"\\n\");\n    return 0;\n}\n\nDWORD WINAPI videoGetErrorText16(HVIDEO16 hVideo, UINT16 wError, LPSTR lpText, UINT16 wSize)\n{\n    FIXME(\"\\n\");\n    return 0;\n}\n\nDWORD WINAPI videoStreamGetPosition16(HVIDEO16 hVideo, LPMMTIME16 lpInfo, DWORD dwSize)\n{\n    FIXME(\"\\n\");\n    return 0;\n}\n\nDWORD WINAPI videoStreamInit16(HVIDEO16 hVideo, DWORD dwMicroSecPerFrame, DWORD dwCallback, DWORD dwCallbackInst, DWORD dwFlags)\n{\n    FIXME(\"\\n\");\n    return 0;\n}\n\nDWORD WINAPI videoStreamFini16(HVIDEO16 hVideo)\n{\n    FIXME(\"\\n\");\n    return 0;\n}\n\nDWORD WINAPI videoStreamPrepareHeader16(HVIDEO16 hVideo, LPVIDEOHDR16 lpVHdr, DWORD dwSize)\n{\n    FIXME(\"\\n\");\n    return 0;\n}\n\nDWORD WINAPI videoStreamReset16(HVIDEO16 hVideo)\n{\n    FIXME(\"\\n\");\n    return 0;\n}\n\nDWORD WINAPI videoStreamStart16(HVIDEO16 hVideo)\n{\n    FIXME(\"\\n\");\n    return 0;\n}\n\nDWORD WINAPI videoStreamStop16(HVIDEO16 hVideo)\n{\n    FIXME(\"\\n\");\n    return 0;\n}\n\nDWORD WINAPI videoStreamUnprepareHeader16(HVIDEO16 hVideo, LPVIDEOHDR16 lpVHdr, DWORD dwSize)\n{\n    FIXME(\"\\n\");\n    return 0;\n}\n\nDWORD WINAPI videoStreamAllocHdrAndBuffer16(HVIDEO16 hVideo, LPVIDEOHDR16 *plpVHdr, DWORD dwSize)\n{\n    FIXME(\"\\n\");\n    return 0;\n}\n\nDWORD WINAPI videoStreamFreeHdrAndBuffer16(HVIDEO16 hVideo, LPVIDEOHDR16 lpVHdr)\n{\n    FIXME(\"\\n\");\n    return 0;\n}\n\nBOOL16 WINAPI ICInstall16(DWORD fccType, DWORD fccHandler, LPARAM lParam, LPSTR szDesc, UINT16 wFlags)\n{\n    if (wFlags == ICINSTALL_FUNCTION)\n    {\n        BOOL ret;\n        struct msvideo_thunk*       thunk;\n\n        EnterCriticalSection(&msvideo_cs);\n        if (!(thunk = MSVIDEO_AddThunk((DWORD)lParam)))\n        {\n            LeaveCriticalSection(&msvideo_cs);\n            return 0;\n        }\n        if (!(ret = ICInstall(fccType, fccHandler, thunk, szDesc, wFlags)))\n            thunk->pfn16 = 0;\n        LeaveCriticalSection(&msvideo_cs);\n        return ret;\n    }\n    BOOL16 ret = ICInstall(fccType, fccHandler, lParam, szDesc, wFlags);\n    if (ret && (wFlags == ICINSTALL_DRIVER))\n    {\n        HMODULE16 driver = LoadLibrary16((char *)lParam);\n        if (driver)\n        {\n            FARPROC driverproc = GetProcAddress16(driver, \"DRIVERPROC\");\n            if (driverproc)\n            {\n                BOOL ret;\n                struct msvideo_thunk*       thunk;\n\n                EnterCriticalSection(&msvideo_cs);\n                if (!(thunk = MSVIDEO_AddThunk((DWORD)driverproc)))\n                {\n                    FreeLibrary16(driver);\n                    LeaveCriticalSection(&msvideo_cs);\n                    return 0;\n                }\n                if (!add_module(fccType, fccHandler, driver))\n                {\n                    thunk->pfn16 = 0;\n                    FreeLibrary16(driver);\n                    LeaveCriticalSection(&msvideo_cs);\n                    return 0;\n                }\n                if (!(ret = ICInstall(fccType, fccHandler, thunk, szDesc, ICINSTALL_FUNCTION)))\n                {\n                    thunk->pfn16 = 0;\n                    remove_module(fccType, fccHandler, TRUE);\n                }\n                LeaveCriticalSection(&msvideo_cs);\n            }\n        }\n    }\n    return ret;        \n}\n\nBOOL16 WINAPI ICRemove16(DWORD fccType, DWORD fccHandler, UINT16 wFlags)\n{\n    BOOL16 ret = ICRemove(fccType, fccHandler, wFlags);\n    if (ret)\n        remove_module(fccType, fccHandler, TRUE);\n    return ret;\n}\n"
  },
  {
    "path": "msvideo/vfw16.h",
    "content": "/*\n * Copyright 1999 Marcus Meissner\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_VFW16_H\n#define __WINE_VFW16_H\n\n#include <stdarg.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n#include \"vfw.h\"\n#include \"wownt32.h\"\n#include \"wine/windef16.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif  /* __cplusplus */\n\ntypedef HANDLE16 HDRAWDIB16;\n\n#include \"pshpack1.h\"\n\ntypedef struct {\n\tDWORD dwSize;\n\tDWORD fccType;\n\tDWORD fccHandler;\n\tDWORD dwFlags;\n\tDWORD dwVersion;\n\tDWORD dwVersionICM;\n\t/*\n\t * under Win16, normal chars are used\n\t */\n\tCHAR szName[16];\n\tCHAR szDescription[128];\n\tCHAR szDriver[128];\n} ICINFO16;\n\ntypedef struct {\n    DWORD\t\tdwFlags;\n    LPBITMAPINFOHEADER\tlpbiSrc;\n    LPVOID\t\tlpSrc;\n    LPBITMAPINFOHEADER\tlpbiDst;\n    LPVOID\t\tlpDst;\n\n    INT16  \t\txDst;       /* destination rectangle */\n    INT16\t\tyDst;\n    INT16  \t\tdxDst;\n    INT16  \t\tdyDst;\n\n    INT16\t\txSrc;       /* source rectangle */\n    INT16  \t\tySrc;\n    INT16\t\tdxSrc;\n    INT16  \t\tdySrc;\n} ICDECOMPRESSEX16;\n\ntypedef struct {\n\tDWORD\t\tdwFlags;\n\tHPALETTE16\thpal;\n\tHWND16\t\thwnd;\n\tHDC16\t\thdc;\n\tINT16\t\txDst;\n\tINT16\t\tyDst;\n\tINT16\t\tdxDst;\n\tINT16\t\tdyDst;\n\tLPBITMAPINFOHEADER\tlpbi;\n\tINT16\t\txSrc;\n\tINT16\t\tySrc;\n\tINT16\t\tdxSrc;\n\tINT16\t\tdySrc;\n\tDWORD\t\tdwRate;\n\tDWORD\t\tdwScale;\n} ICDRAWBEGIN16;\n\n#include \"poppack.h\"\n\ntypedef struct {\n\tDWORD dwFlags;\n\tLPBITMAPINFOHEADER lpbiIn;\n\tLPBITMAPINFOHEADER lpbiSuggest;\n\tINT16 dxSrc;\n\tINT16 dySrc;\n\tINT16 dxDst;\n\tINT16 dyDst;\n\tHIC16 hicDecompressor;\n} ICDRAWSUGGEST16;\n\nDWORD   VFWAPIV ICDraw16(HIC16,DWORD,LPVOID,LPVOID,DWORD,LONG);\nDWORD   VFWAPIV ICDrawBegin16(HIC16,DWORD,HPALETTE16,HWND16,HDC16,INT16,\n                              INT16,INT16,INT16,LPBITMAPINFOHEADER,\n                              INT16,INT16,INT16,INT16,DWORD,DWORD);\nLRESULT WINAPI  ICClose16(HIC16);\nDWORD   VFWAPIV ICCompress16(HIC16,DWORD,LPBITMAPINFOHEADER,LPVOID,\n                             LPBITMAPINFOHEADER,LPVOID,LPDWORD,\n                             LPDWORD,LONG,DWORD,DWORD,\n                             LPBITMAPINFOHEADER,LPVOID);\nDWORD   VFWAPIV ICDecompress16(HIC16,DWORD,LPBITMAPINFOHEADER,LPVOID,\n                               LPBITMAPINFOHEADER,LPVOID);\nHIC16   VFWAPI  ICGetDisplayFormat16(HIC16,LPBITMAPINFOHEADER,\n                                     LPBITMAPINFOHEADER,INT16,INT16,\n                                     INT16);\nLRESULT VFWAPI  ICGetInfo16(HIC16,ICINFO16 *,DWORD);\nBOOL16  VFWAPI  ICInfo16(DWORD,DWORD,ICINFO16 *);\nHIC16   VFWAPI  ICLocate16(DWORD,DWORD,LPBITMAPINFOHEADER,\n                           LPBITMAPINFOHEADER,WORD);\nLRESULT VFWAPIV ICMessage16( HIC16 hic, UINT16 msg, UINT16 cb, VA_LIST16 valist );\nHIC16   VFWAPI  ICOpen16(DWORD,DWORD,UINT16);\nHIC16   VFWAPI  ICOpenFunction16(DWORD,DWORD,UINT16,FARPROC16);\nLRESULT VFWAPI  ICSendMessage16(HIC16,UINT16,DWORD,DWORD);\n\n#ifdef __cplusplus\n}\n#endif  /* __cplusplus */\n\n#endif  /* __WINE_VFW16_H */\n"
  },
  {
    "path": "nddeapi/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(nddeapi SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/nddeapi.def nddeapi.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(nddeapi.dll16 nddeapi)\ntarget_link_libraries(nddeapi libwine winecrt0 krnl386)\nset_target_properties(nddeapi PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "nddeapi/nddeapi.c",
    "content": "#include \"wine/windef16.h\"\n#include \"wine/winbase16.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(nddeapi);\n#define NDDE_NOT_IMPLEMENTED 14\n\ntypedef struct _NDDESHAREINFO16 NDDESHAREINFO16, *LPNDDESHAREINFO16;\nUINT16 WINAPI NDdeShareGetInfo16(LPSTR a, LPSTR b, UINT16 c, LPBYTE d, DWORD e, LPDWORD f, LPWORD g)\n{\n    return NDDE_NOT_IMPLEMENTED;\n}\nUINT16 WINAPI NDdeShareSetInfo16(LPSTR a, LPSTR b, UINT16 c, LPBYTE d, DWORD e, WORD f)\n{\n    return NDDE_NOT_IMPLEMENTED;\n}\nUINT16 WINAPI NDdeGetClientInfo16(HWND16 a, LPSTR b, LONG c, LPSTR d, LONG e)\n{\n    return NDDE_NOT_IMPLEMENTED;\n}\nBOOL16 WINAPI NDdeIsValidPassword16(LPSTR a)\n{\n    return FALSE;\n}\nUINT16 WINAPI NDdeSessionEnum16(LPSTR a, UINT16 b, LPBYTE c, DWORD d, LPDWORD e, LPDWORD f)\n{\n    return NDDE_NOT_IMPLEMENTED;\n}\nUINT16 WINAPI NDdeGetNodeName16(LPSTR a, LONG b)\n{\n    return NDDE_NOT_IMPLEMENTED;\n}\nUINT16 WINAPI NDdeGetErrorString16(UINT16 a, LPSTR b, DWORD c)\n{\n    return NDDE_NOT_IMPLEMENTED;\n}\nUINT16 WINAPI NDdeConnectionEnum16(LPSTR a, LPSTR b, DWORD c, UINT16 d, LPBYTE e, DWORD f, LPDWORD g, LPDWORD h)\n{\n    return NDDE_NOT_IMPLEMENTED;\n}\nUINT16 WINAPI NDdeShareDel16(LPSTR a, LPSTR b, UINT c)\n{\n    return NDDE_NOT_IMPLEMENTED;\n}\nHWND16 WINAPI NDdeGetWindow16()\n{\n    ERR(\"network dde is no longer supported.\\n\");\n    return 0;\n}\nUINT16 WINAPI NDdeSessionClose16(LPSTR a, LPSTR b, DWORD c)\n{\n    return NDDE_NOT_IMPLEMENTED;\n}\nUINT16 WINAPI NDdeShareAdd16(LPSTR a, UINT16 b, LPBYTE c, DWORD d)\n{\n    return NDDE_NOT_IMPLEMENTED;\n}\nUINT16 WINAPI NDdeShareEnum16(LPSTR a, UINT16 b, LPBYTE c, DWORD d, LPDWORD e, LPDWORD f)\n{\n    return NDDE_NOT_IMPLEMENTED;\n}\nBOOL16 WINAPI NDdeIsValidTopic16(LPSTR a)\n{\n    return FALSE;\n}\nBOOL16 WINAPI NDdeIsValidShareName16(LPSTR a)\n{\n    return FALSE;\n}\n"
  },
  {
    "path": "nddeapi/nddeapi.def",
    "content": "; File generated automatically from nddeapi\\nddeapi.dll16.spec; do not edit!\n\nLIBRARY nddeapi.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "nddeapi/nddeapi.dll16.spec",
    "content": "204 stub PASSWDDLGWB\n103 pascal -ret16 NDdeShareGetInfo(str str word ptr long ptr ptr) NDdeShareGetInfo16\n104 pascal -ret16 NDdeShareSetInfo(str str word ptr long word) NDdeShareSetInfo16\n205 stub PASSWDDLGNT\n105 pascal -ret16 NDdeGetClientInfo(word str long str long) NDdeGetClientInfo16\n110 pascal -ret16 NDdeIsValidPassword(str) NDdeIsValidPassword16\n112 pascal -ret16 NDdeSessionEnum(str word ptr long ptr ptr) NDdeSessionEnum16\n106 pascal -ret16 NDdeGetNodeName(str long) NDdeGetNodeName16\n107 pascal -ret16 NDdeGetErrorString(word str long) NDdeGetErrorString16\n201 stub PASSWORDGETFROMCACHE\n108 pascal -ret16 NDdeConnectionEnum(str str long word ptr long ptr ptr) NDdeConnectionEnum16\n202 stub PASSWORDADDTOCACHE\n101 pascal -ret16 NDdeShareDel(str str word) NDdeShareDel16\n114 pascal -ret16 NDdeGetWindow() NDdeGetWindow16\n115 stub NDDEISSHARINGALLOWED\n113 pascal -ret16 NDdeSessionClose(str str long) NDdeSessionClose16\n203 stub GETCURRENTUSERDOMAINNAME\n100 pascal -ret16 NDdeShareAdd(str word ptr long) NDdeShareAdd16\n102 pascal -ret16 NDdeShareEnum(str word ptr long ptr ptr) NDdeShareEnum16\n200 stub PASSWORDGETFROMUSERMODELESS\n111 pascal -ret16 NDdeIsValidTopic(str) NDdeIsValidTopic16\n109 pascal -ret16 NDdeIsValidShareName(str) NDdeIsValidShareName16\n"
  },
  {
    "path": "nddeapi/nddeapi.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n    <RootNamespace>nddeapi</RootNamespace>\n    <ProjectGuid>{72482539-7702-455E-81E0-F3AF237CF57F}</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <Import Project=\"..\\PropertySheet.props\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n%(AdditionalDependencies)</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\nnddeapi.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\nnddeapi.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"nddeapi.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"nddeapi.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"nddeapi.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Platform)'=='Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" NDDEAPI &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Platform)'=='Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"nddeapi.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "netapi/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\r\nadd_library(netapi SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/netapi.def netapi.dll16.obj)\r\ninclude_directories(../wine)\r\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\r\nspec_build(netapi.dll16 netapi)\r\ntarget_link_libraries(netapi libwine winecrt0 krnl386)\r\nset_target_properties(netapi PROPERTIES SUFFIX \".dll16\")\r\n"
  },
  {
    "path": "netapi/Makefile.in",
    "content": "MODULE    = netapi.dll16\r\nIMPORTS   = netapi32\r\nEXTRADLLFLAGS = -m16\r\n\r\nC_SRCS = netapi.c\r\n"
  },
  {
    "path": "netapi/netapi.c",
    "content": "/*\r\n * 16-bit netapi functions\r\n *\r\n * Copyright (C) 2024 John Goodridge\r\n *\r\n * This library is free software; you can redistribute it and/or\r\n * modify it under the terms of the GNU Lesser General Public\r\n * License as published by the Free Software Foundation; either\r\n * version 2.1 of the License, or (at your option) any later version.\r\n *\r\n * This library is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r\n * Lesser General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Lesser General Public\r\n * License along with this library; if not, write to the Free Software\r\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\r\n */\r\n\r\n#include \"config.h\"\r\n\r\n#include <stdio.h>\r\n#include <windows.h>\r\n#include <lm.h>\r\n#include \"wine/winbase16.h\"\r\n#include \"wownt32.h\"\r\n#include \"winuser.h\"\r\n#include \"wine/debug.h\"\r\n\r\nWINE_DEFAULT_DEBUG_CHANNEL(netapi);\r\n\r\n// Structure taken from https://datatracker.ietf.org/doc/html/draft-leach-cifs-rap-spec-00\r\n// and https://learn.microsoft.com/en-us/windows/win32/api/lmwksta/ns-lmwksta-wksta_info_100\r\ntypedef struct {\r\n    SEGPTR wki10_computername;   //pointer to a NULL terminated ASCII string that specifies the name of the workstation\r\n    SEGPTR wki10_username;       //pointer to a NULL terminated ASCII string that specifies the user who is logged on at the workstation\r\n    LPSTR wki10_langroup;        //pointer to a NULL terminated ASCII string that specifies the domain to which the workstation belongs\r\n    UCHAR wkil0_ver_major;       //major version number of the operating system the workstation is running\r\n    UCHAR wkil0_ver_minor;       //minor version number of the operating system the workstation is running\r\n    LPSTR wkil0_1ogon_domain;    //pointer to a NULL terminated ASCII string that specifies the domain for which a user is logged on\r\n    LPSTR wkil0_oth_domains;     //pointer to a list of other domains that the workstation is currently browsing.\r\n                                 //The domains are space delimited and the list is zero\r\n} WKSTA_INFO_10, *PWKSTA_INFO_10;\r\n\r\n/***********************************************************************\r\n *              NetWkstaGetInfo\r\n */\r\nINT16 WINAPI NetWkstaGetInfo16(LPCSTR pszServer, USHORT sLevel, char* pbBuffer, USHORT cbBuffer, PUSHORT pcbTotalAvalaible)\r\n{\r\n    WCHAR serverW[RMLEN] = { 0 };\r\n    MultiByteToWideChar(CP_ACP, 0, pszServer, -1, serverW, RMLEN);\r\n    LPWKSTA_INFO_100 pwkstaInfo100 = NULL;\r\n    NET_API_STATUS status = NetWkstaGetInfo(serverW, 100, (LPBYTE*)&pwkstaInfo100);\r\n\r\n    if (status == NERR_Success)\r\n    {\r\n        LPWKSTA_USER_INFO_0 pwkstaUserInfo0 = NULL;\r\n        status = NetWkstaUserGetInfo(NULL, 0, (LPBYTE*)&pwkstaUserInfo0);\r\n\r\n        if (status == NERR_Success)\r\n        {\r\n            DWORD byteCount = 0;\r\n            NetApiBufferSize(pwkstaInfo100, &byteCount);\r\n\r\n            switch (sLevel) {\r\n                case 10:\r\n                {\r\n                    CHAR strComputerName[RMLEN];\r\n                    sprintf_s(strComputerName, RMLEN, \"%S\", pwkstaInfo100->wki100_computername); // convert to ansi\r\n\r\n                    CHAR strUserName[UNLEN];\r\n                    sprintf_s(strUserName, UNLEN, \"%S\", pwkstaUserInfo0->wkui0_username); // convert to ansi\r\n\r\n                    // Calculate total bytes and location within buffer to store strings\r\n                    DWORD TotalBytesNeeded = sizeof(WKSTA_INFO_10) + (strlen(strComputerName) + strlen(strUserName) + 3) * sizeof(CHAR);\r\n                    LPBYTE FixedDataEnd = (LPBYTE)(pbBuffer + sizeof(WKSTA_INFO_10));\r\n\r\n                    // Check if buffer is too small\r\n                    if (cbBuffer < TotalBytesNeeded)\r\n                    {\r\n                        if (pcbTotalAvalaible)\r\n                        {\r\n                            *pcbTotalAvalaible = (USHORT)TotalBytesNeeded;\r\n                        }\r\n\r\n                        status = NERR_BufTooSmall;\r\n                    }\r\n                    else\r\n                    {   \r\n                        if (pbBuffer)\r\n                        {\r\n                            // Copy computer name into buffer\r\n                            PWKSTA_INFO_10 pwkstaInfo10 = (PWKSTA_INFO_10)pbBuffer;\r\n                            memcpy(FixedDataEnd, strComputerName, strlen(strComputerName));\r\n                            SEGPTR c = MapLS(FixedDataEnd);\r\n                            pwkstaInfo10->wki10_computername = c;\r\n\r\n                            // Copy user name into buffer\r\n                            FixedDataEnd += strlen(strUserName) + sizeof(CHAR);\r\n                            memcpy(FixedDataEnd, strUserName, strlen(strUserName));\r\n                            SEGPTR u = MapLS(FixedDataEnd);\r\n                            pwkstaInfo10->wki10_username = u;\r\n\r\n                            // Fill in rest of the fields\r\n                            pwkstaInfo10->wki10_langroup = NULL;     //TODO\r\n                            pwkstaInfo10->wkil0_ver_major = (UCHAR)pwkstaInfo100->wki100_ver_major;\r\n                            pwkstaInfo10->wkil0_ver_minor = (UCHAR)pwkstaInfo100->wki100_ver_minor;\r\n                            pwkstaInfo10->wkil0_1ogon_domain = NULL; //TODO\r\n                            pwkstaInfo10->wkil0_oth_domains = NULL;  //TODO\r\n                            status = NERR_Success;\r\n                        }\r\n                        else\r\n                        {\r\n                            status = NERR_BufTooSmall;\r\n                        }\r\n                    }\r\n\r\n                    break;\r\n                }\r\n\r\n                default:\r\n                    FIXME(\"Unsupported level %d\", sLevel);\r\n                    status = ERROR_INVALID_LEVEL;\r\n            }\r\n\r\n            NetApiBufferFree(pwkstaUserInfo0);\r\n        }\r\n\r\n        NetApiBufferFree(pwkstaInfo100);\r\n    }\r\n\r\n    return (INT16)status;\r\n}\r\n"
  },
  {
    "path": "netapi/netapi.def",
    "content": "; File generated automatically from ..\\netapi\\netapi.dll16.spec; do not edit! Actualy you do have to edit it as not generated!!!\r\n\r\nLIBRARY netapi.dll16\r\n\r\nEXPORTS\r\n  _wine_spec_dos_header @1 DATA\r\n"
  },
  {
    "path": "netapi/netapi.dll16.spec",
    "content": "249 pascal -ret16 NetWkstaGetInfo(str word ptr word ptr) NetWkstaGetInfo16\r\n"
  },
  {
    "path": "netapi/netapi.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <Keyword>Win32Proj</Keyword>\r\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\r\n    <RootNamespace>netapi</RootNamespace>\r\n    <ProjectGuid>{5AB8CD32-0031-4D8B-BFE0-382C6C1E1770}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v141</PlatformToolset>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v141</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <Import Project=\"..\\PropertySheet.props\" />\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n    <TargetExt>.dll16</TargetExt>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n    <IntDir>Release</IntDir>\r\n    <TargetExt>.dll16</TargetExt>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\r\nnetapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <ModuleDefinitionFile>\r\nnetapi.def\r\n      </ModuleDefinitionFile>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\r\n      <ModuleDefinitionFile>\r\nnetapi.def\r\n      </ModuleDefinitionFile>\r\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\r\nnetapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"netapi.c\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Object Include=\"netapi.dll16.obj\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <CustomBuild Include=\"netapi.dll16.spec\">\r\n      <FileType>Document</FileType>\r\n      <Command Condition=\"'$(Platform)'=='Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" netapi &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\r\n      <Outputs Condition=\"'$(Platform)'=='Win32'\">%(Filename).obj</Outputs>\r\n    </CustomBuild>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"netapi.def\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>\r\n"
  },
  {
    "path": "ntvdm/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c)\nadd_library(ntvdm SHARED ${SOURCE} ntvdm.def)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\ntarget_link_libraries(ntvdm krnl386)\nset_target_properties(ntvdm PROPERTIES PREFIX \"\")\n"
  },
  {
    "path": "ntvdm/main.c",
    "content": "#include <windows.h>\n\nBOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) \n{\n    if (fdwReason == DLL_PROCESS_ATTACH)\n        DisableThreadLibraryCalls(hinstDLL);\n    return TRUE;\n}\n"
  },
  {
    "path": "ntvdm/ntvdm.def",
    "content": "LIBRARY ntvdm.exe\n\nEXPORTS\n  getAL = krnl386.exe16.getAL\n  getAH = krnl386.exe16.getAH\n  getAX = krnl386.exe16.getAX\n  getEAX = krnl386.exe16.getEAX\n  getBL = krnl386.exe16.getBL\n  getBH = krnl386.exe16.getBH\n  getBX = krnl386.exe16.getBX\n  getEBX = krnl386.exe16.getEBX\n  getCL = krnl386.exe16.getCL\n  getCH = krnl386.exe16.getCH\n  getCX = krnl386.exe16.getCX\n  getECX = krnl386.exe16.getECX\n  getDL = krnl386.exe16.getDL\n  getDH = krnl386.exe16.getDH\n  getDX = krnl386.exe16.getDX\n  getEDX = krnl386.exe16.getEDX\n  getSP = krnl386.exe16.getSP\n  getESP = krnl386.exe16.getESP\n  getBP = krnl386.exe16.getBP\n  getEBP = krnl386.exe16.getEBP\n  getSI = krnl386.exe16.getSI\n  getESI = krnl386.exe16.getESI\n  getDI = krnl386.exe16.getDI\n  getEDI = krnl386.exe16.getEDI\n  setAL = krnl386.exe16.setAL\n  setAH = krnl386.exe16.setAH\n  setAX = krnl386.exe16.setAX\n  setEAX = krnl386.exe16.setEAX\n  setBL = krnl386.exe16.setBL\n  setBH = krnl386.exe16.setBH\n  setBX = krnl386.exe16.setBX\n  setEBX = krnl386.exe16.setEBX\n  setCL = krnl386.exe16.setCL\n  setCH = krnl386.exe16.setCH\n  setCX = krnl386.exe16.setCX\n  setECX = krnl386.exe16.setECX\n  setDL = krnl386.exe16.setDL\n  setDH = krnl386.exe16.setDH\n  setDX = krnl386.exe16.setDX\n  setEDX = krnl386.exe16.setEDX\n  setSP = krnl386.exe16.setSP\n  setESP = krnl386.exe16.setESP\n  setBP = krnl386.exe16.setBP\n  setEBP = krnl386.exe16.setEBP\n  setSI = krnl386.exe16.setSI\n  setESI = krnl386.exe16.setESI\n  setDI = krnl386.exe16.setDI\n  setEDI = krnl386.exe16.setEDI\n  getDS = krnl386.exe16.getDS\n  getES = krnl386.exe16.getES\n  getCS = krnl386.exe16.getCS\n  getSS = krnl386.exe16.getSS\n  getFS = krnl386.exe16.getFS\n  getGS = krnl386.exe16.getGS\n  setDS = krnl386.exe16.setDS\n  setES = krnl386.exe16.setES\n  setCS = krnl386.exe16.setCS\n  setSS = krnl386.exe16.setSS\n  setFS = krnl386.exe16.setFS\n  setGS = krnl386.exe16.setGS\n  getIP = krnl386.exe16.getIP\n  getEIP = krnl386.exe16.getEIP\n  setIP = krnl386.exe16.setIP\n  setEIP = krnl386.exe16.setEIP\n  getCF = krnl386.exe16.getCF\n  getPF = krnl386.exe16.getPF\n  getAF = krnl386.exe16.getAF\n  getZF = krnl386.exe16.getZF\n  getSF = krnl386.exe16.getSF\n  getIF = krnl386.exe16.getIF\n  getDF = krnl386.exe16.getDF\n  getOF = krnl386.exe16.getOF\n  setCF = krnl386.exe16.setCF\n  setPF = krnl386.exe16.setPF\n  setAF = krnl386.exe16.setAF\n  setZF = krnl386.exe16.setZF\n  setSF = krnl386.exe16.setSF\n  setIF = krnl386.exe16.setIF\n  setDF = krnl386.exe16.setDF\n  setOF = krnl386.exe16.setOF\n  VDDInstallIOHook = krnl386.exe16.VDDInstallIOHook\n  VDDDeInstallIOHook = krnl386.exe16.VDDDeInstallIOHook\n  MGetVdmPointer = krnl386.exe16.MGetVdmPointer\n"
  },
  {
    "path": "ntvdm/ntvdm.dll.spec",
    "content": "@ stdcall getAL()\n@ stdcall getAH()\n@ stdcall getAX()\n@ stdcall getEAX()\n@ stdcall getBL()\n@ stdcall getBH()\n@ stdcall getBX()\n@ stdcall getEBX()\n@ stdcall getCL()\n@ stdcall getCH()\n@ stdcall getCX()\n@ stdcall getECX()\n@ stdcall getDL()\n@ stdcall getDH()\n@ stdcall getDX()\n@ stdcall getEDX()\n@ stdcall getSP()\n@ stdcall getESP()\n@ stdcall getBP()\n@ stdcall getEBP()\n@ stdcall getSI()\n@ stdcall getESI()\n@ stdcall getDI()\n@ stdcall getEDI()\n@ stdcall setAL(long)\n@ stdcall setAH(long)\n@ stdcall setAX(long)\n@ stdcall setEAX(long)\n@ stdcall setBL(long)\n@ stdcall setBH(long)\n@ stdcall setBX(long)\n@ stdcall setEBX(long)\n@ stdcall setCL(long)\n@ stdcall setCH(long)\n@ stdcall setCX(long)\n@ stdcall setECX(long)\n@ stdcall setDL(long)\n@ stdcall setDH(long)\n@ stdcall setDX(long)\n@ stdcall setEDX(long)\n@ stdcall setSP(long)\n@ stdcall setESP(long)\n@ stdcall setBP(long)\n@ stdcall setEBP(long)\n@ stdcall setSI(long)\n@ stdcall setESI(long)\n@ stdcall setDI(long)\n@ stdcall setEDI(long)\n@ stdcall getDS()\n@ stdcall getES()\n@ stdcall getCS()\n@ stdcall getSS()\n@ stdcall getFS()\n@ stdcall getGS()\n@ stdcall setDS(long)\n@ stdcall setES(long)\n@ stdcall setCS(long)\n@ stdcall setSS(long)\n@ stdcall setFS(long)\n@ stdcall setGS(long)\n@ stdcall getIP()\n@ stdcall getEIP()\n@ stdcall setIP(long)\n@ stdcall setEIP(long)\n@ stdcall getCF()\n@ stdcall getPF()\n@ stdcall getAF()\n@ stdcall getZF()\n@ stdcall getSF()\n@ stdcall getIF()\n@ stdcall getDF()\n@ stdcall getOF()\n@ stdcall setCF(long)\n@ stdcall setPF(long)\n@ stdcall setAF(long)\n@ stdcall setZF(long)\n@ stdcall setSF(long)\n@ stdcall setIF(long)\n@ stdcall setDF(long)\n@ stdcall setOF(long)\n@ stdcall VDDInstallIOHook(long long ptr ptr)\n@ stdcall VDDDeInstallIOHook(long long ptr)\n@ stdcall MGetVdmPointer(long long long)\n"
  },
  {
    "path": "ntvdm/ntvdm.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"main.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"ntvdm.def\" />\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{E4950E01-C995-49A5-9FED-5EF03155FD66}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>ntvdm</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.exe</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <TargetExt>.exe</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)krnl386.lib</AdditionalDependencies>\n      <ModuleDefinitionFile>ntvdm.def</ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ModuleDefinitionFile>ntvdm.def</ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)krnl386.lib</AdditionalDependencies>\n      <DelayLoadDLLs>\n      </DelayLoadDLLs>\n      <ForceFileOutput>\n      </ForceFileOutput>\n      <IgnoreAllDefaultLibraries>\n      </IgnoreAllDefaultLibraries>\n      <IgnoreSpecificDefaultLibraries>\n      </IgnoreSpecificDefaultLibraries>\n    </Link>\n  </ItemDefinitionGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>\n"
  },
  {
    "path": "ole2/.gitignore",
    "content": "ifs_16.c\nifs_16.h\n"
  },
  {
    "path": "ole2/CMakeLists.txt",
    "content": "file(GLOB SOURCE hglobalstream.c ifs_thunk.c  memlockbytes.c  ole2.c)\nadd_library(ole2 SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/ole2.def ole2.dll16.obj ${CMAKE_BINARY_DIR}/ifs_16.c)\ninclude_directories(../wine ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nwidl_build(ifs.idl ${CMAKE_BINARY_DIR}/ifs_16.c ${CMAKE_BINARY_DIR}/ifs_16.h)\nspec_build(ole2.dll16 ole2)\ntarget_link_libraries(ole2 libwine winecrt0 krnl386 ole32.lib user)\nset_target_properties(ole2 PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "ole2/Makefile.in",
    "content": "MODULE    = ole2.dll16\nIMPORTS   = uuid ole32 user32 gdi32\nEXTRADLLFLAGS = -m16 -Wb,--main-module,ole32.dll\n\nC_SRCS = \\\n\tmemlockbytes.c \\\n\tole2.c\n"
  },
  {
    "path": "ole2/hglobalstream.c",
    "content": "/*\n * HGLOBAL Stream implementation\n *\n * This file contains the implementation of the stream interface\n * for streams contained supported by an HGLOBAL pointer.\n *\n * Copyright 1999 Francis Beaudet\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <assert.h>\n#include <stdlib.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <string.h>\n\n#define COBJMACROS\n#define NONAMELESSUNION\n#undef DUMMYSTRUCTNAME\n#undef DUMMYUNIONNAME\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winuser.h\"\n#include \"objbase.h\"\n#include \"ole2.h\"\n#include \"winerror.h\"\n#include \"winternl.h\"\n\n#include \"wine/debug.h\"\n#include \"wine/winbase16.h\"\n#include \"ifs.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(storage);\n\nHRESULT CDECL HGLOBALStreamImpl16_SetSize(\n    IStream16*      iface,\n    ULARGE_INTEGER  libNewSize);\nHRESULT CDECL HGLOBALStreamImpl16_Read(\n    IStream16*     iface,\n    void*          pv,        /* [length_is][size_is][out] */\n    ULONG          cb,        /* [in] */\n    ULONG*         pcbRead);  /* [out] */\nHRESULT WINAPI CreateStreamOnHGlobal16(\n    HGLOBAL16 hGlobal,\n    BOOL      fDeleteOnRelease,\n    SEGPTR*   ppstm);\n/****************************************************************************\n * HGLOBALStreamImpl definition.\n *\n * This class implements the IStream16 interface and represents a stream\n * supported by an HGLOBAL pointer.\n */\ntypedef struct\n{\n  IStream16 IStream16_iface;\n  LONG ref;\n\n  /* support for the stream */\n  HGLOBAL16 supportHandle;\n\n  /* if TRUE the HGLOBAL is destroyed when the stream is finally released */\n  BOOL deleteOnRelease;\n\n  /* size of the stream */\n  ULARGE_INTEGER streamSize;\n\n  /* current position of the cursor */\n  ULARGE_INTEGER currentPosition;\n} HGLOBALStreamImpl;\n\nstatic inline HGLOBALStreamImpl *impl_from_IStream16(IStream16 *iface)\n{\n  return CONTAINING_RECORD(iface, HGLOBALStreamImpl, IStream16_iface);\n}\n\nHRESULT CDECL HGLOBALStreamImpl16_QueryInterface(\n\t\t  SEGPTR         iface,\n\t\t  REFIID         riid,\t      /* [in] */\n\t\t  SEGPTR*        ppvObject)   /* [iid_is][out] */\n{\n  HGLOBALStreamImpl* This = impl_from_IStream16((IStream16*)MapSL(iface));\n\n  if (ppvObject==0)\n    return E_INVALIDARG;\n\n  *ppvObject = 0;\n\n  if (IsEqualIID(&IID_IUnknown, riid) ||\n      IsEqualIID(&IID_ISequentialStream, riid) ||\n      IsEqualIID(&IID_IStream, riid))\n  {\n    *ppvObject = iface;\n  }\n\n  if ((*ppvObject)==0)\n    return E_NOINTERFACE16;\n\n  IStream16_AddRef(iface);\n\n  return S_OK;\n}\n\nULONG CDECL HGLOBALStreamImpl16_AddRef(IStream16* iface)\n{\n  HGLOBALStreamImpl* This = impl_from_IStream16(iface);\n  return InterlockedIncrement(&This->ref);\n}\n\nULONG CDECL HGLOBALStreamImpl16_Release(\n\t\tIStream16* iface)\n{\n  HGLOBALStreamImpl* This= impl_from_IStream16(iface);\n  ULONG ref = InterlockedDecrement(&This->ref);\n\n  if (!ref)\n  {\n    if (This->deleteOnRelease)\n    {\n      GlobalFree16(This->supportHandle);\n      This->supportHandle = NULL;\n    }\n\n    HeapFree(GetProcessHeap(), 0, This);\n  }\n\n  return ref;\n}\n\n/***\n * This method is part of the ISequentialStream interface.\n *\n * If reads a block of information from the stream at the current\n * position. It then moves the current position at the end of the\n * read block\n *\n * See the documentation of ISequentialStream for more info.\n */\nHRESULT CDECL HGLOBALStreamImpl16_Read(\n\t\t  IStream16*     iface,\n\t\t  void*          pv,        /* [length_is][size_is][out] */\n\t\t  ULONG          cb,        /* [in] */\n\t\t  ULONG*         pcbRead)   /* [out] */\n{\n  HGLOBALStreamImpl* This = impl_from_IStream16(iface);\n\n  void* supportBuffer;\n  ULONG bytesReadBuffer;\n  ULONG bytesToReadFromBuffer;\n\n  TRACE(\"(%p, %p, %d, %p)\\n\", iface,\n\tpv, cb, pcbRead);\n\n  /*\n   * If the caller is not interested in the number of bytes read,\n   * we use another buffer to avoid \"if\" statements in the code.\n   */\n  if (pcbRead==0)\n    pcbRead = &bytesReadBuffer;\n\n  /*\n   * Using the known size of the stream, calculate the number of bytes\n   * to read from the block chain\n   */\n  bytesToReadFromBuffer = min( This->streamSize.u.LowPart - This->currentPosition.u.LowPart, cb);\n\n  /*\n   * Lock the buffer in position and copy the data.\n   */\n  supportBuffer = GlobalLock16(This->supportHandle);\n  if (!supportBuffer)\n  {\n      WARN(\"read from invalid hglobal %p\\n\", This->supportHandle);\n      *pcbRead = 0;\n      return S_OK;\n  }\n\n  memcpy(pv, (char *) supportBuffer+This->currentPosition.u.LowPart, bytesToReadFromBuffer);\n\n  /*\n   * Move the current position to the new position\n   */\n  This->currentPosition.u.LowPart+=bytesToReadFromBuffer;\n\n  /*\n   * Return the number of bytes read.\n   */\n  *pcbRead = bytesToReadFromBuffer;\n\n  /*\n   * Cleanup\n   */\n  GlobalUnlock16(This->supportHandle);\n\n  /*\n   * Always returns S_OK even if the end of the stream is reached before the\n   * buffer is filled\n   */\n\n  return S_OK;\n}\n\n/***\n * This method is part of the ISequentialStream interface.\n *\n * It writes a block of information to the stream at the current\n * position. It then moves the current position at the end of the\n * written block. If the stream is too small to fit the block,\n * the stream is grown to fit.\n *\n * See the documentation of ISequentialStream for more info.\n */\nHRESULT CDECL HGLOBALStreamImpl16_Write(\n\t          IStream16*     iface,\n\t\t  const void*    pv,          /* [size_is][in] */\n\t\t  ULONG          cb,          /* [in] */\n\t\t  ULONG*         pcbWritten)  /* [out] */\n{\n  HGLOBALStreamImpl* This = impl_from_IStream16(iface);\n\n  void*          supportBuffer;\n  ULARGE_INTEGER newSize;\n  ULONG          bytesWritten = 0;\n\n  TRACE(\"(%p, %p, %d, %p)\\n\", iface, pv, cb, pcbWritten);\n\n  /*\n   * If the caller is not interested in the number of bytes written,\n   * we use another buffer to avoid \"if\" statements in the code.\n   */\n  if (pcbWritten == 0)\n    pcbWritten = &bytesWritten;\n\n  if (cb == 0)\n    goto out;\n\n  *pcbWritten = 0;\n\n  newSize.u.HighPart = 0;\n  newSize.u.LowPart = This->currentPosition.u.LowPart + cb;\n\n  /*\n   * Verify if we need to grow the stream\n   */\n  if (newSize.u.LowPart > This->streamSize.u.LowPart)\n  {\n    /* grow stream */\n    HRESULT hr = HGLOBALStreamImpl16_SetSize(iface, newSize);\n    if (FAILED(hr))\n    {\n      ERR(\"IStream16_SetSize failed with error 0x%08x\\n\", hr);\n      return hr;\n    }\n  }\n\n  /*\n   * Lock the buffer in position and copy the data.\n   */\n  supportBuffer = GlobalLock16(This->supportHandle);\n  if (!supportBuffer)\n  {\n      WARN(\"write to invalid hglobal %p\\n\", This->supportHandle);\n      return S_OK;\n  }\n\n  memcpy((char *) supportBuffer+This->currentPosition.u.LowPart, pv, cb);\n\n  /*\n   * Move the current position to the new position\n   */\n  This->currentPosition.u.LowPart+=cb;\n\n  /*\n   * Cleanup\n   */\n  GlobalUnlock16(This->supportHandle);\n\nout:\n  /*\n   * Return the number of bytes read.\n   */\n  *pcbWritten = cb;\n\n  return S_OK;\n}\n\n/***\n * This method is part of the IStream16 interface.\n *\n * It will move the current stream pointer according to the parameters\n * given.\n *\n * See the documentation of IStream16 for more info.\n */\nHRESULT CDECL HGLOBALStreamImpl16_Seek(\n\t\t  IStream16*      iface,\n\t\t  LARGE_INTEGER   dlibMove,         /* [in] */\n\t\t  DWORD           dwOrigin,         /* [in] */\n\t\t  ULARGE_INTEGER* plibNewPosition) /* [out] */\n{\n  HGLOBALStreamImpl* This = impl_from_IStream16(iface);\n\n  ULARGE_INTEGER newPosition = This->currentPosition;\n  HRESULT hr = S_OK;\n\n  TRACE(\"(%p, %x%08x, %d, %p)\\n\", iface, dlibMove.u.HighPart,\n\tdlibMove.u.LowPart, dwOrigin, plibNewPosition);\n\n  /*\n   * The file pointer is moved depending on the given \"function\"\n   * parameter.\n   */\n  switch (dwOrigin)\n  {\n    case STREAM_SEEK_SET:\n      newPosition.u.HighPart = 0;\n      newPosition.u.LowPart = 0;\n      break;\n    case STREAM_SEEK_CUR:\n      break;\n    case STREAM_SEEK_END:\n      newPosition = This->streamSize;\n      break;\n    default:\n      hr = STG_E_SEEKERROR;\n      goto end;\n  }\n\n  /*\n   * Move the actual file pointer\n   * If the file pointer ends-up after the end of the stream, the next Write operation will\n   * make the file larger. This is how it is documented.\n   */\n  newPosition.u.HighPart = 0;\n  newPosition.u.LowPart += dlibMove.QuadPart;\n\n  if (dlibMove.u.LowPart >= 0x80000000 &&\n      newPosition.u.LowPart >= dlibMove.u.LowPart)\n  {\n    /* We tried to seek backwards and went past the start. */\n    hr = STG_E_SEEKERROR;\n    goto end;\n  }\n\n  This->currentPosition = newPosition;\n\nend:\n  if (plibNewPosition) *plibNewPosition = This->currentPosition;\n\n  return hr;\n}\n\n/***\n * This method is part of the IStream16 interface.\n *\n * It will change the size of a stream.\n *\n * TODO: Switch from small blocks to big blocks and vice versa.\n *\n * See the documentation of IStream16 for more info.\n */\nHRESULT CDECL HGLOBALStreamImpl16_SetSize(\n\t\t\t\t     IStream16*      iface,\n\t\t\t\t     ULARGE_INTEGER  libNewSize)   /* [in] */\n{\n  HGLOBALStreamImpl* This = impl_from_IStream16(iface);\n  HGLOBAL16 supportHandle;\n\n  TRACE(\"(%p, %d)\\n\", iface, libNewSize.u.LowPart);\n\n  /*\n   * HighPart is ignored as shown in tests\n   */\n\n  if (This->streamSize.u.LowPart == libNewSize.u.LowPart)\n    return S_OK;\n\n  /*\n   * Re allocate the HGlobal to fit the new size of the stream.\n   */\n  supportHandle = GlobalReAlloc16(This->supportHandle, libNewSize.u.LowPart, 0);\n\n  if (supportHandle == 0)\n    return E_OUTOFMEMORY;\n\n  This->supportHandle = supportHandle;\n  This->streamSize.u.LowPart = libNewSize.u.LowPart;\n\n  return S_OK;\n}\n\n/***\n * This method is part of the IStream16 interface.\n *\n * It will copy the 'cb' Bytes to 'pstm' IStream16.\n *\n * See the documentation of IStream16 for more info.\n */\nHRESULT CDECL HGLOBALStreamImpl16_CopyTo(\n\t\t\t\t    IStream16*      iface,\n\t\t\t\t    SEGPTR          pstm,         /* [unique][in] */\n\t\t\t\t    ULARGE_INTEGER  cb,           /* [in] */\n\t\t\t\t    ULARGE_INTEGER* pcbRead,      /* [out] */\n\t\t\t\t    ULARGE_INTEGER* pcbWritten)   /* [out] */\n{\n  HRESULT        hr = S_OK;\n  BYTE           tmpBuffer[128];\n  ULONG          bytesRead, bytesWritten, copySize;\n  ULARGE_INTEGER totalBytesRead;\n  ULARGE_INTEGER totalBytesWritten;\n\n  TRACE(\"(%p, %08x, %d, %p, %p)\\n\", iface, pstm,\n\tcb.u.LowPart, pcbRead, pcbWritten);\n\n  if ( pstm == 0 )\n    return STG_E_INVALIDPOINTER;\n\n  totalBytesRead.QuadPart = 0;\n  totalBytesWritten.QuadPart = 0;\n\n  while ( cb.QuadPart > 0 )\n  {\n    if ( cb.QuadPart >= sizeof(tmpBuffer) )\n      copySize = sizeof(tmpBuffer);\n    else\n      copySize = cb.u.LowPart;\n\n    hr = HGLOBALStreamImpl16_Read(iface, tmpBuffer, copySize, &bytesRead);\n    if (FAILED(hr))\n        break;\n\n    totalBytesRead.QuadPart += bytesRead;\n\n    if (bytesRead)\n    {\n        hr = IStream16_Write(pstm, tmpBuffer, bytesRead, MapLS(&bytesWritten));\n        if (FAILED(hr))\n            break;\n\n        totalBytesWritten.QuadPart += bytesWritten;\n    }\n\n    if (bytesRead!=copySize)\n      cb.QuadPart = 0;\n    else\n      cb.QuadPart -= bytesRead;\n  }\n\n  if (pcbRead) pcbRead->QuadPart = totalBytesRead.QuadPart;\n  if (pcbWritten) pcbWritten->QuadPart = totalBytesWritten.QuadPart;\n\n  return hr;\n}\n\n/***\n * This method is part of the IStream16 interface.\n *\n * For streams supported by HGLOBALS, this function does nothing.\n * This is what the documentation tells us.\n *\n * See the documentation of IStream16 for more info.\n */\nHRESULT CDECL HGLOBALStreamImpl16_Commit(\n\t\t  IStream16*      iface,\n\t\t  DWORD         grfCommitFlags)  /* [in] */\n{\n  return S_OK;\n}\n\n/***\n * This method is part of the IStream16 interface.\n *\n * For streams supported by HGLOBALS, this function does nothing.\n * This is what the documentation tells us.\n *\n * See the documentation of IStream16 for more info.\n */\nHRESULT CDECL HGLOBALStreamImpl16_Revert(\n\t\t  IStream16* iface)\n{\n  return S_OK;\n}\n\n/***\n * This method is part of the IStream16 interface.\n *\n * For streams supported by HGLOBALS, this function does nothing.\n * This is what the documentation tells us.\n *\n * See the documentation of IStream16 for more info.\n */\nHRESULT CDECL HGLOBALStreamImpl16_LockRegion(\n\t\t  IStream16*       iface,\n\t\t  ULARGE_INTEGER libOffset,   /* [in] */\n\t\t  ULARGE_INTEGER cb,          /* [in] */\n\t\t  DWORD          dwLockType)  /* [in] */\n{\n  return STG_E_INVALIDFUNCTION;\n}\n\n/*\n * This method is part of the IStream16 interface.\n *\n * For streams supported by HGLOBALS, this function does nothing.\n * This is what the documentation tells us.\n *\n * See the documentation of IStream16 for more info.\n */\nHRESULT CDECL HGLOBALStreamImpl16_UnlockRegion(\n\t\t  IStream16*       iface,\n\t\t  ULARGE_INTEGER libOffset,   /* [in] */\n\t\t  ULARGE_INTEGER cb,          /* [in] */\n\t\t  DWORD          dwLockType)  /* [in] */\n{\n  return S_OK;\n}\n\n/***\n * This method is part of the IStream16 interface.\n *\n * This method returns information about the current\n * stream.\n *\n * See the documentation of IStream16 for more info.\n */\nHRESULT CDECL HGLOBALStreamImpl16_Stat(\n\t\t  IStream16*     iface,\n\t\t  STATSTG16*     pstatstg,     /* [out] */\n\t\t  DWORD        grfStatFlag)  /* [in] */\n{\n  HGLOBALStreamImpl* This = impl_from_IStream16(iface);\n\n  memset(pstatstg, 0, sizeof(STATSTG16));\n\n  pstatstg->pwcsName = NULL;\n  pstatstg->type     = STGTY_STREAM;\n  pstatstg->cbSize   = This->streamSize;\n\n  return S_OK;\n}\n\nHRESULT CDECL HGLOBALStreamImpl16_Clone(\n\t\t  IStream16*     iface,\n\t\t  SEGPTR*        ppstm) /* [out] */\n{\n  HGLOBALStreamImpl* This = impl_from_IStream16(iface);\n  ULARGE_INTEGER dummy;\n  LARGE_INTEGER offset;\n  HRESULT hr;\n\n  TRACE(\" Cloning %p (deleteOnRelease=%d seek position=%ld)\\n\",iface,This->deleteOnRelease,(long)This->currentPosition.QuadPart);\n  hr = CreateStreamOnHGlobal16(This->supportHandle, FALSE, ppstm);\n  if(FAILED(hr))\n    return hr;\n  offset.QuadPart = (LONGLONG)This->currentPosition.QuadPart;\n  IStream16_Seek(*ppstm, *(ULARGE_INTEGER*)&offset, STREAM_SEEK_SET, MapLS(&dummy));\n  return S_OK;\n}\n\nstatic IStream16Vtbl HGLOBALStreamImplVtbl;\nstatic SEGPTR SegHGLOBALStreamImplVtbl;\n/***********************************************************************\n *           CreateStreamOnHGlobal     [OLE32.@]\n */\nHRESULT WINAPI CreateStreamOnHGlobal16(\n\t\tHGLOBAL16 hGlobal,\n\t\tBOOL      fDeleteOnRelease,\n\t\tSEGPTR*   ppstm)\n{\n  HGLOBALStreamImpl* This;\n\n  if (!ppstm)\n    return E_INVALIDARG16;\n\n  This = HeapAlloc(GetProcessHeap(), 0, sizeof(HGLOBALStreamImpl));\n  if (!This) return E_OUTOFMEMORY16;\n\n  if (!SegHGLOBALStreamImplVtbl)\n  {\n      HMODULE16 hole = GetModuleHandle16(\"OLE2\");\n#define VTENT(x) HGLOBALStreamImplVtbl.x = (void*)GetProcAddress16(hole,\"HGLOBALStreamImpl16_\"#x);assert(HGLOBALStreamImplVtbl.x)\n      VTENT(QueryInterface);\n      VTENT(AddRef);\n      VTENT(Release);\n      VTENT(Read);\n      VTENT(Write);\n      VTENT(Seek);\n      VTENT(SetSize);\n      VTENT(CopyTo);\n      VTENT(Commit);\n      VTENT(Revert);\n      VTENT(LockRegion);\n      VTENT(UnlockRegion);\n      VTENT(Stat);\n      VTENT(Clone);\n#undef VTENT\n      SegHGLOBALStreamImplVtbl = MapLS(&HGLOBALStreamImplVtbl);\n  }\n  This->IStream16_iface.lpVtbl = SegHGLOBALStreamImplVtbl;\n  This->ref = 1;\n\n  /* initialize the support */\n  This->supportHandle = hGlobal;\n  This->deleteOnRelease = fDeleteOnRelease;\n\n  /* allocate a handle if one is not supplied */\n  if (!This->supportHandle)\n    This->supportHandle = GlobalAlloc16(GMEM_MOVEABLE|GMEM_NODISCARD|GMEM_SHARE, 0);\n\n  /* start at the beginning */\n  This->currentPosition.u.HighPart = 0;\n  This->currentPosition.u.LowPart = 0;\n\n  /* initialize the size of the stream to the size of the handle */\n  This->streamSize.u.HighPart = 0;\n  This->streamSize.u.LowPart = GlobalSize16(This->supportHandle);\n\n  *ppstm = MapLS(&This->IStream16_iface);\n\n  return S_OK;\n}\n\n/***********************************************************************\n *           GetHGlobalFromStream     [OLE32.@]\n */\nHRESULT WINAPI GetHGlobalFromStream16(IStream16* pstm, HGLOBAL16* phglobal)\n{\n  HGLOBALStreamImpl* pStream;\n\n  if (pstm == NULL)\n    return E_INVALIDARG16;\n\n  pStream = impl_from_IStream16(pstm);\n\n  /*\n   * Verify that the stream object was created with CreateStreamOnHGlobal.\n   */\n  if (pStream->IStream16_iface.lpVtbl == SegHGLOBALStreamImplVtbl)\n    *phglobal = pStream->supportHandle;\n  else\n  {\n    *phglobal = 0;\n    return E_INVALIDARG16;\n  }\n\n  return S_OK;\n}\n"
  },
  {
    "path": "ole2/ifs.h",
    "content": "/*\n * Copyright 1997 Marcus Meissner\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_OLE_IFS_H\n#define __WINE_OLE_IFS_H\n\n#include <stdarg.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"objbase.h\"\n\ntypedef CHAR OLECHAR16;\ntypedef LPSTR LPOLESTR16;\ntypedef LPCSTR LPCOLESTR16;\n\n#define STDMETHOD16CALLTYPE __cdecl\n#define STDMETHOD16(m) HRESULT (STDMETHOD16CALLTYPE *m)\n#define STDMETHOD16_(t,m) t (STDMETHOD16CALLTYPE *m)\n\n#define GET_SEGPTR_METHOD_ADDR(ifacename,segptr,methodname) \\\n    ((SEGPTR)((const ifacename##Vtbl*)MapSL((SEGPTR)((ifacename*)MapSL(segptr))->lpVtbl))->methodname)\n#include \"wownt32.h\"\n#define STGMEDIUM16 /* FIXME*/\n#define tagBINDPTR /* FIXME */\n#include \"ifs_16.h\"\n\nSEGPTR iface32_16(REFIID riid, void *iface32);\nvoid *iface16_32(REFIID riid, SEGPTR iface16);\n/* COM error codes */\n#define E_UNEXPECTED16      MAKE_SCODE( SEVERITY_ERROR, FACILITY_NULL, 0xFFFF )\n#define E_NOTIMPL16         MAKE_SCODE( SEVERITY_ERROR, FACILITY_NULL, 1 )\n#define E_OUTOFMEMORY16     MAKE_SCODE( SEVERITY_ERROR, FACILITY_NULL, 2 )\n#define E_INVALIDARG16      MAKE_SCODE( SEVERITY_ERROR, FACILITY_NULL, 3 )\n#define E_NOINTERFACE16     MAKE_SCODE( SEVERITY_ERROR, FACILITY_NULL, 4 )\n#define E_POINTER16         MAKE_SCODE( SEVERITY_ERROR, FACILITY_NULL, 5 )\n#define E_HANDLE16          MAKE_SCODE( SEVERITY_ERROR, FACILITY_NULL, 6 )\n#define E_ABORT16           MAKE_SCODE( SEVERITY_ERROR, FACILITY_NULL, 7 )\n#define E_FAIL16            MAKE_SCODE( SEVERITY_ERROR, FACILITY_NULL, 8 )\n#define E_ACCESSDENIED16    MAKE_SCODE( SEVERITY_ERROR, FACILITY_NULL, 9 )\nHRESULT hresult32_16(HRESULT hresult);\nHRESULT hresult16_32(HRESULT hresult);\nvoid free_iface32(void *iface);\n#undef STGMEDIUM16\n#undef tagBINDPTR\n\nstatic LPWSTR strdupAtoW(LPCSTR str)\n{\n    LPWSTR ret;\n    INT len;\n\n    if (!str) return NULL;\n    len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);\n    ret = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));\n    if (ret) MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len);\n    return ret;\n}\nstatic LPCSTR strdupWtoA(LPCWSTR str)\n{\n    LPSTR ret;\n    INT len;\n\n    if (!str) return NULL;\n    len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);\n    ret = HeapAlloc(GetProcessHeap(), 0, len * sizeof(CHAR));\n    if (ret) WideCharToMultiByte(CP_ACP, 0, str, -1, ret, len, NULL, NULL);\n    return ret;\n}\n/**********************************************************************/\n\n#include <pshpack1.h>\ntypedef struct tagSAFEARRAYBOUND16\n{\n    ULONG cElements;\n    LONG  lLbound;\n} SAFEARRAYBOUND16;\ntypedef struct tagSTATSTG16\n{\n    LPOLESTR16 pwcsName;\n    DWORD type;\n    ULARGE_INTEGER cbSize;\n    FILETIME mtime;\n    FILETIME ctime;\n    FILETIME atime;\n    DWORD grfMode;\n    DWORD grfLocksSupported;\n    CLSID clsid;\n    DWORD grfStateBits;\n    DWORD reserved;\n} STATSTG16;\n\ntypedef struct\n{\n    CLIPFORMAT cfFormat;\n    SEGPTR/*DVTARGETDEVICE FAR**/ ptd;\n    DWORD dwAspect;\n    LONG lindex;\n    DWORD tymed;\n} FORMATETC16;\ntypedef struct {\n    DWORD tymed;\n    union {\n        HANDLE16 hGlobal;\n        SEGPTR/*LPSTR*/lpszFileName;\n        SEGPTR/*LPSTREAM*/pstm;\n        SEGPTR/*LPSTORAGE*/pstg;\n    } DUMMYUNIONNAME;\n    SEGPTR /*LPUNKNOWN*/pUnkForRelease;\n} STGMEDIUM16;\ntypedef struct\n{\n    FORMATETC16 formatetc;\n    DWORD advf;\n    /*LPADVISESINK*/SEGPTR pAdvSink;\n    DWORD dwConnection;\n} STATDATA16;\n#include <poppack.h>\n\nvoid map_stgmedium32_16(STGMEDIUM16 *a16, const STGMEDIUM *a32);\nvoid map_stgmedium16_32(STGMEDIUM *a32, const STGMEDIUM16 *a16);\n\nvoid map_formatetc16_32(FORMATETC *a32, const FORMATETC16 *a16);\nvoid map_formatetc32_16(FORMATETC16 *a16, const FORMATETC *a32);\n\nstruct TYP16_tagOleInPlaceFrameInfo\n{\n    UINT16 cb;\n    BOOL16 fMDIApp;\n    HWND16 hwndFrame;\n    HACCEL16 haccel;\n    INT16 cAccelEntries;\n};\nvoid map_oleinplaceframeinfo16_32(OLEINPLACEFRAMEINFO *a32, const struct TYP16_tagOleInPlaceFrameInfo *a16);\nvoid map_oleinplaceframeinfo32_16(struct TYP16_tagOleInPlaceFrameInfo *a16, const OLEINPLACEFRAMEINFO *a32);\n#endif /* __WINE_OLE_IFS_H */\n"
  },
  {
    "path": "ole2/ifs.idl",
    "content": "/*\n * Thunk supports for 16-bit COM interface\n * based on unknwn.idl, objidl.idl, oleidl.idl\n */\n\n/*\n * Copyright 2002 Ove Kaaven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"../wine/windows/wtypes.idl\";\n#endif\n\ntypedef struct tagSIZEL\n{\n    LONG cx;\n    LONG cy;\n} SIZEL, *PSIZEL, *LPSIZEL;\n[\n  local,\n  object,\n  uuid(00000000-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IUnknown\n{\n  typedef [unique] IUnknown *LPUNKNOWN;\n\n  HRESULT QueryInterface(\n    [in] REFIID riid,\n    [out, iid_is(riid)] void **ppvObject);\n  ULONG AddRef();\n  ULONG Release();\n}\n\n[\n  object,\n  uuid(00000001-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IClassFactory : IUnknown\n{\n  typedef [unique] IClassFactory *LPCLASSFACTORY;\n\n  [local]\n  HRESULT CreateInstance(\n    [in, unique] IUnknown *pUnkOuter,\n    [in] REFIID riid,\n    [out, iid_is(riid)] void **ppvObject);\n\n  [call_as(CreateInstance)]\n  HRESULT RemoteCreateInstance(\n    [in] REFIID riid,\n    [out, iid_is(riid)] IUnknown **ppvObject);\n\n  [local]\n  HRESULT LockServer(\n    [in] BOOL fLock);\n\n  [call_as(LockServer)]\n  HRESULT RemoteLockServer(\n    [in] BOOL fLock);\n}\n\ninterface IStream;\ninterface IEnumString;\ninterface IRunningObjectTable;\ninterface IMoniker;\ninterface IAdviseSink;\n/******************** Fundamentals ********************/\n\n[\n  local,\n  object,\n  uuid(00000003-0000-0000-C000-000000000046)\n]\ninterface IMarshal : IUnknown\n{\n  typedef [unique] IMarshal *LPMARSHAL;\n\n  HRESULT GetUnmarshalClass(\n    [in] REFIID riid,\n    [in, unique] void *pv,\n    [in] DWORD dwDestContext,\n    [in, unique] void *pvDestContext,\n    [in] DWORD mshlflags,\n    [out] CLSID *pCid);\n\n  HRESULT GetMarshalSizeMax(\n    [in] REFIID riid,\n    [in, unique] void *pv,\n    [in] DWORD dwDestContext,\n    [in, unique] void *pvDestContext,\n    [in] DWORD mshlflags,\n    [out] DWORD *pSize);\n\n  HRESULT MarshalInterface(\n    [in, unique] IStream *pStm,\n    [in] REFIID riid,\n    [in, unique] void *pv,\n    [in] DWORD dwDestContext,\n    [in, unique] void *pvDestContext,\n    [in] DWORD mshlflags);\n\n  HRESULT UnmarshalInterface(\n    [in, unique] IStream *pStm,\n    [in] REFIID riid,\n    [out] void **ppv);\n\n  HRESULT ReleaseMarshalData(\n    [in, unique] IStream *pStm);\n\n  HRESULT DisconnectObject(\n    [in] DWORD dwReserved);\n}\n\n[\n  local,\n  object,\n  uuid(00000018-0000-0000-C000-000000000046)\n]\ninterface IStdMarshalInfo : IUnknown\n{\n  typedef [unique] IStdMarshalInfo *LPSTDMARSHALINFO;\n\n  HRESULT GetClassForHandler(\n    [in] DWORD dwDestContext,\n    [in, unique] void *pvDestContext,\n    [out] CLSID *pClsid);\n}\n\n[\n  local,\n  object,\n  uuid(00000019-0000-0000-C000-000000000046)\n]\ninterface IExternalConnection : IUnknown\n{\n  typedef [unique] IExternalConnection *LPEXTERNALCONNECTION;\n\n  typedef enum tagEXTCONN {\n    EXTCONN_STRONG   = 0x0001,\n    EXTCONN_WEAK     = 0x0002,\n    EXTCONN_CALLABLE = 0x0004\n  } EXTCONN;\n\n  DWORD AddConnection(\n    [in] DWORD extconn,\n    [in] DWORD reserved);\n\n  DWORD ReleaseConnection(\n    [in] DWORD extconn,\n    [in] DWORD reserved,\n    [in] BOOL fLastReleaseCloses);\n}\n\n[\n  local,\n  object,\n  uuid(00000002-0000-0000-C000-000000000046)\n]\ninterface IMalloc : IUnknown\n{\n  typedef [unique] IMalloc *LPMALLOC;\n\n  LPVOID Alloc(\n    [in] SIZE_T cb);\n\n  LPVOID Realloc(\n    [in] LPVOID pv,\n    [in] SIZE_T cb);\n\n  void Free(\n    [in] LPVOID pv);\n\n  SIZE_T GetSize(\n    [in] LPVOID pv);\n\n  int DidAlloc(LPVOID pv);\n\n  void HeapMinimize();\n}\n\n\n[\n  object,\n  uuid(00000100-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IEnumUnknown : IUnknown\n{\n  typedef [unique] IEnumUnknown *LPENUMUNKNOWN;\n\n  [local]\n  HRESULT Next(\n    [in] ULONG celt,\n    [out] IUnknown **rgelt,\n    [out] ULONG *pceltFetched);\n\n  [call_as(Next)]\n  HRESULT RemoteNext(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    IUnknown **rgelt,\n    [out] ULONG *pceltFetched);\n\n  HRESULT Skip(\n    [in] ULONG celt);\n\n  HRESULT Reset();\n\n  HRESULT Clone(\n    [out] IEnumUnknown **ppenum);\n}\n\ntypedef struct _COSERVERINFO {\n  DWORD dwReserved1;\n  LPWSTR pwszName;\n  COAUTHINFO *pAuthInfo;\n  DWORD dwReserved2;\n} COSERVERINFO;\n/******************** Monikers ********************/\n\n[\n  object,\n  uuid(0000000e-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IBindCtx : IUnknown\n{\n  typedef [unique] IBindCtx *LPBINDCTX;\n  typedef [unique] IBindCtx *LPBC;\n\n  typedef struct tagBIND_OPTS {\n    DWORD cbStruct;\n    DWORD grfFlags;\n    DWORD grfMode;\n    DWORD dwTickCountDeadline;\n  } BIND_OPTS, *LPBIND_OPTS;\n\n  /* FIXME: C++ crap */\n  typedef struct tagBIND_OPTS2 {\n    DWORD cbStruct;\n    DWORD grfFlags;\n    DWORD grfMode;\n    DWORD dwTickCountDeadline;\n    DWORD dwTrackFlags;\n    DWORD dwClassContext;\n    LCID  locale;\n    COSERVERINFO *pServerInfo;\n  } BIND_OPTS2, *LPBIND_OPTS2;\n\n  typedef struct tagBIND_OPTS3 {\n    DWORD cbStruct;\n    DWORD grfFlags;\n    DWORD grfMode;\n    DWORD dwTickCountDeadline;\n    DWORD dwTrackFlags;\n    DWORD dwClassContext;\n    LCID  locale;\n    COSERVERINFO *pServerInfo;\n    HWND hwnd;\n  } BIND_OPTS3, *LPBIND_OPTS3;\n\n  typedef enum tagBIND_FLAGS {\n    BIND_MAYBOTHERUSER   = 1,\n    BIND_JUSTTESTEXISTENCE = 2\n  } BIND_FLAGS;\n\n  HRESULT RegisterObjectBound(\n    [in, unique] IUnknown *punk);\n\n  HRESULT RevokeObjectBound(\n    [in, unique] IUnknown *punk);\n\n  HRESULT ReleaseBoundObjects();\n\n  [local]\n  HRESULT SetBindOptions(\n    [in] BIND_OPTS *pbindopts);\n\n  [call_as(SetBindOptions)]\n  HRESULT RemoteSetBindOptions(\n    [in] BIND_OPTS2 *pbindopts);\n\n  [local]\n  HRESULT GetBindOptions(\n    [in, out] BIND_OPTS *pbindopts);\n\n  [call_as(GetBindOptions)]\n  HRESULT RemoteGetBindOptions(\n    [in, out] BIND_OPTS2 *pbindopts);\n\n  HRESULT GetRunningObjectTable(\n    [out] IRunningObjectTable **pprot);\n\n  HRESULT RegisterObjectParam(\n    [in] LPOLESTR pszKey,\n    [in, unique] IUnknown *punk);\n\n  HRESULT GetObjectParam(\n    [in] LPOLESTR pszKey,\n    [out] IUnknown **ppunk);\n\n  HRESULT EnumObjectParam(\n    [out] IEnumString **ppenum);\n\n  HRESULT RevokeObjectParam(\n    [in] LPOLESTR pszKey);\n}\n\n[\n  object,\n  uuid(00000102-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IEnumMoniker : IUnknown\n{\n  typedef [unique] IEnumMoniker *LPENUMMONIKER;\n\n  [local]\n  HRESULT Next(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    IMoniker **rgelt,\n    [out] ULONG *pceltFetched);\n\n  [call_as(Next)]\n  HRESULT RemoteNext(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    IMoniker **rgelt,\n    [out] ULONG *pceltFetched);\n\n  HRESULT Skip(\n    [in] ULONG celt);\n\n  HRESULT Reset();\n\n  HRESULT Clone(\n    [out] IEnumMoniker **ppenum);\n}\n\n[\n  object,\n  uuid(00000126-0000-0000-C000-000000000046)\n]\ninterface IRunnableObject : IUnknown\n{\n  typedef [unique] IRunnableObject *LPRUNNABLEOBJECT;\n\n  HRESULT GetRunningClass(\n    [out] LPCLSID lpClsid);\n\n  HRESULT Run(\n    [in] LPBINDCTX pbc);\n\n  [local]\n  BOOL IsRunning();\n\n  [call_as(IsRunning)]\n  HRESULT RemoteIsRunning();\n\n  HRESULT LockRunning(\n    [in] BOOL fLock,\n    [in] BOOL fLastUnlockCloses);\n\n  HRESULT SetContainedObject(\n    [in] BOOL fContained);\n}\n\n/* GetObject is defined in wingdi.h as WINELIB_NAME_AW(GetObject),\n * which resolves to a compilation failure if WINE_NO_UNICODE_MACROS is defined,\n * but GetObject is used as a valid method name below, so we have\n * to undefine it in that case */\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef GetObject\")\ncpp_quote(\"#endif\")\n\n[\n  object,\n  uuid(00000010-0000-0000-C000-000000000046)\n]\ninterface IRunningObjectTable : IUnknown\n{\n  typedef [unique] IRunningObjectTable *LPRUNNINGOBJECTTABLE;\n\n  HRESULT Register(\n    [in] DWORD grfFlags,\n    [in, unique] IUnknown *punkObject,\n    [in, unique] IMoniker *pmkObjectName,\n    [out] DWORD *pdwRegister);\n\n  HRESULT Revoke(\n    [in] DWORD dwRegister);\n\n  HRESULT IsRunning(\n    [in, unique] IMoniker *pmkObjectName);\n\n  HRESULT GetObject(\n    [in, unique] IMoniker *pmkObjectName,\n    [out] IUnknown **ppunkObject);\n\n  HRESULT NoteChangeTime(\n    [in] DWORD dwRegister,\n    [in] FILETIME *pfiletime);\n\n  HRESULT GetTimeOfLastChange(\n    [in, unique] IMoniker *pmkObjectName,\n    [out] FILETIME *pfiletime);\n\n  HRESULT EnumRunning(\n    [out] IEnumMoniker **ppenumMoniker);\n}\n\n[\n  object,\n  uuid(0000010c-0000-0000-C000-000000000046)\n]\ninterface IPersist : IUnknown\n{\n  typedef [unique] IPersist *LPPERSIST;\n\n  HRESULT GetClassID(\n    [out] CLSID *pClassID);\n}\n\n[\n  object,\n  uuid(00000109-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IPersistStream : IPersist\n{\n  typedef [unique] IPersistStream *LPPERSISTSTREAM;\n\n  HRESULT IsDirty();\n\n  HRESULT Load(\n    [in, unique] IStream *pStm);\n\n  HRESULT Save(\n    [in, unique] IStream *pStm,\n    [in] BOOL fClearDirty);\n\n  HRESULT GetSizeMax(\n    [out] ULARGE_INTEGER *pcbSize);\n}\n\n[\n  object,\n  uuid(0000000f-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IMoniker : IPersistStream\n{\n  typedef [unique] IMoniker *LPMONIKER;\n\n  typedef enum tagMKSYS {\n    MKSYS_NONE             = 0,\n    MKSYS_GENERICCOMPOSITE = 1,\n    MKSYS_FILEMONIKER      = 2,\n    MKSYS_ANTIMONIKER      = 3,\n    MKSYS_ITEMMONIKER      = 4,\n    MKSYS_POINTERMONIKER   = 5,\n    /* MKSYS_URLMONIKER       = 6, */ /* defined in urlmon.idl */\n    MKSYS_CLASSMONIKER     = 7\n  } MKSYS;\n\n  typedef [v1_enum] enum tagMKREDUCE {\n    MKRREDUCE_ONE         = 3 << 16,\n    MKRREDUCE_TOUSER      = 2 << 16,\n    MKRREDUCE_THROUGHUSER = 1 << 16,\n    MKRREDUCE_ALL         = 0\n  } MKRREDUCE;\n\n  [local]\n  HRESULT BindToObject(\n    [in, unique] IBindCtx *pbc,\n    [in, unique] IMoniker *pmkToLeft,\n    [in] REFIID riidResult,\n    [out, iid_is(riidResult)] void **ppvResult);\n\n  [call_as(BindToObject)]\n  HRESULT RemoteBindToObject(\n    [in, unique] IBindCtx *pbc,\n    [in, unique] IMoniker *pmkToLeft,\n    [in] REFIID riidResult,\n    [out, iid_is(riidResult)] IUnknown **ppvResult);\n\n  [local]\n  HRESULT BindToStorage(\n    [in, unique] IBindCtx *pbc,\n    [in, unique] IMoniker *pmkToLeft,\n    [in] REFIID riid,\n    [out, iid_is(riid)] void **ppvObj);\n\n  [call_as(BindToStorage)]\n  HRESULT RemoteBindToStorage(\n    [in, unique] IBindCtx *pbc,\n    [in, unique] IMoniker *pmkToLeft,\n    [in] REFIID riid,\n    [out, iid_is(riid)] IUnknown **ppvObj);\n\n  HRESULT Reduce(\n    [in, unique] IBindCtx *pbc,\n    [in] DWORD dwReduceHowFar,\n    [in, out, unique] IMoniker **ppmkToLeft,\n    [out] IMoniker **ppmkReduced);\n\n  HRESULT ComposeWith(\n    [in, unique] IMoniker *pmkRight,\n    [in] BOOL fOnlyIfNotGeneric,\n    [out] IMoniker **ppmkComposite);\n\n  HRESULT Enum(\n    [in] BOOL fForward,\n    [out] IEnumMoniker **ppenumMoniker);\n\n  HRESULT IsEqual(\n    [in, unique] IMoniker *pmkOtherMoniker);\n\n  HRESULT Hash(\n    [out] DWORD *pdwHash);\n\n  HRESULT IsRunning(\n    [in, unique] IBindCtx *pbc,\n    [in, unique] IMoniker *pmkToLeft,\n    [in, unique] IMoniker *pmkNewlyRunning);\n\n  HRESULT GetTimeOfLastChange(\n    [in, unique] IBindCtx *pbc,\n    [in, unique] IMoniker *pmkToLeft,\n    [out] FILETIME *pFileTime);\n\n  HRESULT Inverse(\n    [out] IMoniker **ppmk);\n\n  HRESULT CommonPrefixWith(\n    [in, unique] IMoniker *pmkOther,\n    [out] IMoniker **ppmkPrefix);\n\n  HRESULT RelativePathTo(\n    [in, unique] IMoniker *pmkOther,\n    [out] IMoniker **ppmkRelPath);\n\n  HRESULT GetDisplayName(\n    [in, unique] IBindCtx *pbc,\n    [in, unique] IMoniker *pmkToLeft,\n    [out] LPOLESTR *ppszDisplayName);\n\n  HRESULT ParseDisplayName(\n    [in, unique] IBindCtx *pbc,\n    [in, unique] IMoniker *pmkToLeft,\n    [in] LPOLESTR pszDisplayName,\n    [out] ULONG *pchEaten,\n    [out] IMoniker **ppmkOut);\n\n  HRESULT IsSystemMoniker(\n    [out] DWORD *pdwMksys);\n}\n\n\n[\n  object,\n  uuid(00000101-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IEnumString : IUnknown\n{\n  typedef [unique] IEnumString *LPENUMSTRING;\n\n  [local]\n  HRESULT Next(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    LPOLESTR *rgelt,\n    [out] ULONG *pceltFetched);\n\n  [call_as(Next)]\n  HRESULT RemoteNext(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    LPOLESTR *rgelt,\n    [out] ULONG *pceltFetched);\n\n  HRESULT Skip(\n    [in] ULONG celt);\n\n  HRESULT Reset();\n\n  HRESULT Clone(\n    [out] IEnumString **ppenum);\n}\n\n/******************** Storage ********************/\n\n[\n  object,\n  uuid(0c733a30-2a1c-11ce-ade5-00aa0044773d),\n  pointer_default(unique)\n]\ninterface ISequentialStream : IUnknown\n{\n  [local]\n  HRESULT Read(\n    [out, size_is(cb), length_is(*pcbRead)]\n    void *pv,\n    [in] ULONG cb,\n    [out] ULONG *pcbRead);\n\n  [call_as(Read)]\n  HRESULT RemoteRead(\n    [out, size_is(cb), length_is(*pcbRead)]\n    byte *pv,\n    [in] ULONG cb,\n    [out] ULONG *pcbRead);\n\n  [local]\n  HRESULT Write(\n    [in, size_is(cb)] const void *pv,\n    [in] ULONG cb,\n    [out] ULONG *pcbWritten);\n\n  [call_as(Write)]\n  HRESULT RemoteWrite(\n    [in, size_is(cb)] const byte *pv,\n    [in] ULONG cb,\n    [out] ULONG *pcbWritten);\n}\n\n[\n  object,\n  uuid(0000000c-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IStream : ISequentialStream\n{\n  typedef [unique] IStream *LPSTREAM;\n\n  typedef struct tagSTATSTG {\n    LPOLESTR pwcsName;\n    DWORD type;\n    ULARGE_INTEGER cbSize;\n    FILETIME mtime;\n    FILETIME ctime;\n    FILETIME atime;\n    DWORD grfMode;\n    DWORD grfLocksSupported;\n    CLSID clsid;\n    DWORD grfStateBits;\n    DWORD reserved;\n  } STATSTG;\n\n  typedef enum tagSTGTY {\n    STGTY_STORAGE   = 1,\n    STGTY_STREAM    = 2,\n    STGTY_LOCKBYTES = 3,\n    STGTY_PROPERTY  = 4\n  } STGTY;\n\n  typedef enum tagSTREAM_SEEK {\n    STREAM_SEEK_SET = 0,\n    STREAM_SEEK_CUR = 1,\n    STREAM_SEEK_END = 2\n  } STREAM_SEEK;\n\n  /* these are defined in Linux's fcntl.h,\n   * undefine them to avoid conflicts */\n  cpp_quote(\"#undef LOCK_MAND\")\n  cpp_quote(\"#undef LOCK_READ\")\n  cpp_quote(\"#undef LOCK_WRITE\")\n  cpp_quote(\"#undef LOCK_RW\")\n\n  typedef enum tagLOCKTYPE {\n    LOCK_WRITE      = 1,\n    LOCK_EXCLUSIVE  = 2,\n    LOCK_ONLYONCE   = 4\n  } LOCKTYPE;\n\n  [local]\n  HRESULT Seek(\n    [in] LARGE_INTEGER dlibMove,\n    [in] DWORD dwOrigin,\n    [out] ULARGE_INTEGER *plibNewPosition);\n\n  [call_as(Seek)]\n  HRESULT RemoteSeek(\n    [in] LARGE_INTEGER dlibMove,\n    [in] DWORD dwOrigin,\n    [out] ULARGE_INTEGER *plibNewPosition);\n\n  HRESULT SetSize(\n    [in] ULARGE_INTEGER libNewSize);\n\n  [local]\n  HRESULT CopyTo(\n    [in, unique] IStream *pstm,\n    [in] ULARGE_INTEGER cb,\n    [out] ULARGE_INTEGER *pcbRead,\n    [out] ULARGE_INTEGER *pcbWritten);\n\n  [call_as(CopyTo)]\n  HRESULT RemoteCopyTo(\n    [in, unique] IStream *pstm,\n    [in] ULARGE_INTEGER cb,\n    [out] ULARGE_INTEGER *pcbRead,\n    [out] ULARGE_INTEGER *pcbWritten);\n\n  HRESULT Commit(\n    [in] DWORD grfCommitFlags);\n\n  HRESULT Revert();\n\n  HRESULT LockRegion(\n    [in] ULARGE_INTEGER libOffset,\n    [in] ULARGE_INTEGER cb,\n    [in] DWORD dwLockType);\n\n  HRESULT UnlockRegion(\n    [in] ULARGE_INTEGER libOffset,\n    [in] ULARGE_INTEGER cb,\n    [in] DWORD dwLockType);\n\n  HRESULT Stat(\n    [out] STATSTG *pstatstg,\n    [in] DWORD grfStatFlag);\n\n  HRESULT Clone(\n    [out] IStream **ppstm);\n}\n\n[\n  object,\n  uuid(0000000d-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IEnumSTATSTG : IUnknown\n{\n  typedef [unique] IEnumSTATSTG *LPENUMSTATSTG;\n\n  [local]\n  HRESULT Next(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    STATSTG *rgelt,\n    [out] ULONG *pceltFetched);\n\n  [call_as(Next)]\n  HRESULT RemoteNext(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    STATSTG *rgelt,\n    [out] ULONG *pceltFetched);\n\n  HRESULT Skip(\n    [in] ULONG celt);\n\n  HRESULT Reset();\n\n  HRESULT Clone(\n    [out] IEnumSTATSTG **ppenum);\n}\n\n[\n  object,\n  uuid(0000000b-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IStorage : IUnknown\n{\n  typedef [unique] IStorage *LPSTORAGE;\n\n  typedef struct tagRemSNB {\n    unsigned long ulCntStr;\n    unsigned long ulCntChar;\n    [size_is(ulCntChar)] OLECHAR rgString[];\n  } RemSNB;\n\n  typedef [unique] RemSNB *wireSNB;\n  typedef [wire_marshal(wireSNB)] OLECHAR **SNB;\n\n  HRESULT CreateStream(\n    [in] LPCOLESTR pwcsName,\n    [in] DWORD grfMode,\n    [in] DWORD reserved1,\n    [in] DWORD reserved2,\n    [out] IStream **ppstm);\n\n  [local]\n  HRESULT OpenStream(\n    [in] LPCOLESTR pwcsName,\n    [in, unique] void *reserved1,\n    [in] DWORD grfMode,\n    [in] DWORD reserved2,\n    [out] IStream **ppstm);\n\n  [call_as(OpenStream)]\n  HRESULT RemoteOpenStream(\n    [in] LPCOLESTR pwcsName,\n    [in] unsigned long cbReserved1,\n    [in, unique, size_is(cbReserved1)] byte *reserved1,\n    [in] DWORD grfMode,\n    [in] DWORD reserved2,\n    [out] IStream **ppstm);\n\n  HRESULT CreateStorage(\n    [in] LPCOLESTR pwcsName,\n    [in] DWORD grfMode,\n    [in] DWORD dwStgFmt,\n    [in] DWORD reserved2,\n    [out] IStorage **ppstg);\n\n  HRESULT OpenStorage(\n    [in, unique] LPCOLESTR pwcsName,\n    [in, unique] IStorage *pstgPriority,\n    [in] DWORD grfMode,\n    [in, unique] SNB snbExclude,\n    [in] DWORD reserved,\n    [out] IStorage **ppstg);\n\n  HRESULT CopyTo(\n    [in] DWORD ciidExclude,\n    [in, unique, size_is(ciidExclude)] const IID *rgiidExclude,\n    [in, unique] SNB snbExclude,\n    [in, unique] IStorage *pstgDest);\n\n  HRESULT MoveElementTo(\n    [in] LPCOLESTR pwcsName,\n    [in, unique] IStorage *pstgDest,\n    [in] LPCOLESTR pwcsNewName,\n    [in] DWORD grfFlags);\n\n  HRESULT Commit(\n    [in] DWORD grfCommitFlags);\n\n  HRESULT Revert();\n\n  [local]\n  HRESULT EnumElements(\n    [in] DWORD reserved1,\n    [in, unique, size_is(1)] void *reserved2,\n    [in] DWORD reserved3,\n    [out] IEnumSTATSTG **ppenum);\n\n  [call_as(EnumElements)]\n  HRESULT RemoteEnumElements(\n    [in] DWORD reserved1,\n    [in] unsigned long cbReserved2,\n    [in, unique, size_is(cbReserved2)] byte *reserved2,\n    [in] DWORD reserved3,\n    [out] IEnumSTATSTG **ppenum);\n\n  HRESULT DestroyElement(\n    [in] LPCOLESTR pwcsName);\n\n  HRESULT RenameElement(\n    [in] LPCOLESTR pwcsOldName,\n    [in] LPCOLESTR pwcsNewName);\n\n  HRESULT SetElementTimes(\n    [in, unique] LPCOLESTR pwcsName,\n    [in, unique] const FILETIME *pctime,\n    [in, unique] const FILETIME *patime,\n    [in, unique] const FILETIME *pmtime);\n\n  HRESULT SetClass(\n    [in] REFCLSID clsid);\n\n  HRESULT SetStateBits(\n    [in] DWORD grfStateBits,\n    [in] DWORD grfMask);\n\n  HRESULT Stat(\n    [out] STATSTG *pstatstg,\n    [in] DWORD grfStatFlag);\n}\n\n[\n  object,\n  uuid(0000010b-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IPersistFile : IPersist\n{\n  typedef [unique] IPersistFile *LPPERSISTFILE;\n\n  HRESULT IsDirty();\n\n  HRESULT Load(\n    [in] LPCOLESTR pszFileName,\n    [in] DWORD dwMode);\n\n  HRESULT Save(\n    [in, unique] LPCOLESTR pszFileName,\n    [in] BOOL fRemember);\n\n  HRESULT SaveCompleted(\n    [in, unique] LPCOLESTR pszFileName);\n\n  HRESULT GetCurFile(\n    [out] LPOLESTR *ppszFileName);\n}\n\n[\n  object,\n  uuid(0000010a-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IPersistStorage : IPersist\n{\n  typedef [unique] IPersistStorage *LPPERSISTSTORAGE;\n\n  HRESULT IsDirty();\n\n  HRESULT InitNew(\n    [in, unique] IStorage *pStg);\n\n  HRESULT Load(\n    [in, unique] IStorage *pStg);\n\n  HRESULT Save(\n    [in, unique] IStorage *pStgSave,\n    [in] BOOL fSameAsLoad);\n\n  HRESULT SaveCompleted(\n    [in, unique] IStorage *pStgNew);\n\n  HRESULT HandsOffStorage();\n}\n\n[\n  object,\n  uuid(00000012-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IRootStorage : IUnknown\n{\n  typedef [unique] IRootStorage *LPROOTSTORAGE;\n\n  HRESULT SwitchToFile(\n    [in] LPOLESTR pszFile);\n}\n\n[\n  object,\n  uuid(0000000a-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface ILockBytes : IUnknown\n{\n  typedef [unique] ILockBytes *LPLOCKBYTES;\n\n  [local]\n  HRESULT ReadAt(\n    [in] ULARGE_INTEGER ulOffset,\n    [out, size_is(cb), length_is(*pcbRead)]\n    void *pv,\n    [in] ULONG cb,\n    [out] ULONG *pcbRead);\n\n  [call_as(ReadAt)]\n  HRESULT RemoteReadAt(\n    [in] ULARGE_INTEGER ulOffset,\n    [out, size_is(cb), length_is(*pcbRead)]\n    byte *pv,\n    [in] ULONG cb,\n    [out] ULONG *pcbRead);\n\n  [local]\n  HRESULT WriteAt(\n    [in] ULARGE_INTEGER ulOffset,\n    [in, size_is(cb)] const void *pv,\n    [in] ULONG cb,\n    [out] ULONG *pcbWritten);\n\n  [call_as(WriteAt)]\n  HRESULT RemoteWriteAt(\n    [in] ULARGE_INTEGER ulOffset,\n    [in, size_is(cb)] const byte *pv,\n    [in] ULONG cb,\n    [out] ULONG *pcbWritten);\n\n  HRESULT Flush();\n\n  HRESULT SetSize(\n    [in] ULARGE_INTEGER cb);\n\n  HRESULT LockRegion(\n    [in] ULARGE_INTEGER libOffset,\n    [in] ULARGE_INTEGER cb,\n    [in] DWORD dwLockType);\n\n  HRESULT UnlockRegion(\n    [in] ULARGE_INTEGER libOffset,\n    [in] ULARGE_INTEGER cb,\n    [in] DWORD dwLockType);\n\n  HRESULT Stat(\n    [out] STATSTG *pstatstg,\n    [in] DWORD grfStatFlag);\n}\n\n\n/******************** Data Object ********************/\n\n[\n  object,\n  uuid(00000103-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IEnumFORMATETC : IUnknown\n{\n  typedef [unique] IEnumFORMATETC *LPENUMFORMATETC;\n\n  typedef struct tagDVTARGETDEVICE {\n    DWORD tdSize;\n    WORD tdDriverNameOffset;\n    WORD tdDeviceNameOffset;\n    WORD tdPortNameOffset;\n    WORD tdExtDevmodeOffset;\n    [size_is(tdSize - sizeof(DWORD) - 4*sizeof(WORD))]\n    BYTE tdData[];\n  } DVTARGETDEVICE;\n\n  typedef CLIPFORMAT *LPCLIPFORMAT;\n\n  typedef struct tagFORMATETC {\n    CLIPFORMAT cfFormat;\n    [unique] DVTARGETDEVICE *ptd;\n    DWORD dwAspect;\n    LONG lindex;\n    DWORD tymed;\n  } FORMATETC, *LPFORMATETC;\n\n  [local]\n  HRESULT Next(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    FORMATETC *rgelt,\n    [out] ULONG *pceltFetched);\n\n  [call_as(Next)]\n  HRESULT RemoteNext(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    FORMATETC *rgelt,\n    [out] ULONG *pceltFetched);\n\n  HRESULT Skip(\n    [in] ULONG celt);\n\n  HRESULT Reset();\n\n  HRESULT Clone(\n    [out] IEnumFORMATETC **ppenum);\n}\n\n[\n  object,\n  uuid(00000105-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IEnumSTATDATA : IUnknown\n{\n  typedef [unique] IEnumSTATDATA *LPENUMSTATDATA;\n\n  typedef enum tagADVF {\n    ADVF_NODATA            = 1,\n    ADVF_PRIMEFIRST        = 2,\n    ADVF_ONLYONCE          = 4,\n    ADVF_DATAONSTOP        = 64,\n    ADVFCACHE_NOHANDLER    = 8,\n    ADVFCACHE_FORCEBUILTIN = 16,\n    ADVFCACHE_ONSAVE       = 32\n  } ADVF;\n\n  typedef struct tagSTATDATA\n  {\n    FORMATETC formatetc;\n    DWORD advf;\n    [unique] IAdviseSink *pAdvSink;\n    DWORD dwConnection;\n  } STATDATA, *LPSTATDATA;\n\n  [local]\n  HRESULT Next(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    STATDATA *rgelt,\n    [out] ULONG *pceltFetched);\n\n  [call_as(Next)]\n  HRESULT RemoteNext(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    STATDATA *rgelt,\n    [out] ULONG *pceltFetched);\n\n  HRESULT Skip(\n    [in] ULONG celt);\n\n  HRESULT Reset();\n\n  HRESULT Clone(\n    [out] IEnumSTATDATA **ppenum);\n}\n\n[\n  object,\n  uuid(0000010f-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IAdviseSink : IUnknown\n{\n  typedef IAdviseSink *LPADVISESINK;\n\n  typedef [v1_enum] enum tagTYMED {\n    TYMED_HGLOBAL  = 1,\n    TYMED_FILE     = 2,\n    TYMED_ISTREAM  = 4,\n    TYMED_ISTORAGE = 8,\n    TYMED_GDI      = 16,\n    TYMED_MFPICT   = 32,\n    TYMED_ENHMF    = 64,\n    TYMED_NULL     = 0\n  } TYMED;\n\n  typedef struct tagRemSTGMEDIUM {\n    DWORD tymed;\n    DWORD dwHandleType;\n    unsigned long pData;\n    unsigned long pUnkForRelease;\n    unsigned long cbData;\n    [size_is(cbData)] byte data[];\n  } RemSTGMEDIUM;\n\n  typedef struct tagSTGMEDIUM {\n    DWORD tymed;\n    [switch_is(tymed)] union {\n    [case(TYMED_GDI)]      HBITMAP hBitmap;\n    [case(TYMED_MFPICT)]   HMETAFILEPICT hMetaFilePict;\n    [case(TYMED_ENHMF)]    HENHMETAFILE hEnhMetaFile;\n    [case(TYMED_HGLOBAL)]  HGLOBAL hGlobal;\n    [case(TYMED_FILE)]     LPOLESTR lpszFileName;\n    [case(TYMED_ISTREAM)]  IStream *pstm;\n    [case(TYMED_ISTORAGE)] IStorage *pstg;\n    [default]              ;\n    } DUMMYUNIONNAME;\n    [unique] IUnknown *pUnkForRelease;\n  } uSTGMEDIUM;\n\n/* copied from wingdi.h */\n#define OBJ_PEN             1\n#define OBJ_BRUSH           2\n#define OBJ_DC              3\n#define OBJ_METADC          4\n#define OBJ_PAL             5\n#define OBJ_FONT            6\n#define OBJ_BITMAP          7\n#define OBJ_REGION          8\n#define OBJ_METAFILE        9\n#define OBJ_MEMDC           10\n#define OBJ_EXTPEN          11\n#define OBJ_ENHMETADC       12\n#define OBJ_ENHMETAFILE     13\n\n  typedef union _GDI_OBJECT switch(DWORD ObjectType) u {\n    case OBJ_BITMAP: wireHBITMAP hBitmap;\n    case OBJ_PAL:    wireHPALETTE hPalette;\n    default:         wireHGLOBAL hGeneric;\n  } GDI_OBJECT;\n\n  typedef struct _userSTGMEDIUM {\n    union switch(DWORD tymed) u {\n    case TYMED_NULL:     ;\n    case TYMED_MFPICT:   wireHMETAFILEPICT hMetaFilePict;\n    case TYMED_ENHMF:    wireHENHMETAFILE hHEnhMetaFile;\n    case TYMED_GDI:      GDI_OBJECT *hGdiHandle;\n    case TYMED_HGLOBAL:  wireHGLOBAL hGlobal;\n    case TYMED_FILE:     LPOLESTR lpszFileName;\n    case TYMED_ISTREAM:  BYTE_BLOB *pstm;\n    case TYMED_ISTORAGE: BYTE_BLOB *pstg;\n    } DUMMYUNIONNAME;\n    IUnknown *pUnkForRelease;\n  } userSTGMEDIUM;\n\n  typedef [unique] userSTGMEDIUM *wireSTGMEDIUM;\n  typedef [wire_marshal(wireSTGMEDIUM)] uSTGMEDIUM STGMEDIUM;\n\n  typedef [unique] userSTGMEDIUM *wireASYNC_STGMEDIUM;\n  typedef [wire_marshal(wireASYNC_STGMEDIUM)] STGMEDIUM ASYNC_STGMEDIUM;\n\n  typedef STGMEDIUM *LPSTGMEDIUM;\n\n  typedef struct _userFLAG_STGMEDIUM {\n    long ContextFlags;\n    long fPassOwnership;\n    userSTGMEDIUM Stgmed;\n  } userFLAG_STGMEDIUM;\n\n  typedef [unique] userFLAG_STGMEDIUM *wireFLAG_STGMEDIUM;\n\n  typedef [wire_marshal(wireFLAG_STGMEDIUM)] struct _FLAG_STGMEDIUM {\n    long ContextFlags;\n    long fPassOwnership;\n    STGMEDIUM Stgmed;\n  } FLAG_STGMEDIUM;\n\n  [local]\n  void OnDataChange(\n    [in, unique] FORMATETC *pFormatetc,\n    [in, unique] STGMEDIUM *pStgmed);\n\n  [call_as(OnDataChange)]\n  HRESULT  RemoteOnDataChange(\n    [in, unique] FORMATETC *pFormatetc,\n    [in, unique] ASYNC_STGMEDIUM *pStgmed);\n\n  [local]\n  void OnViewChange(\n    [in] DWORD dwAspect,\n    [in] LONG lindex);\n\n  [call_as(OnViewChange)]\n  HRESULT RemoteOnViewChange(\n    [in] DWORD dwAspect,\n    [in] LONG lindex);\n\n  [local]\n  void OnRename(\n    [in] IMoniker *pmk);\n\n  [call_as(OnRename)]\n  HRESULT RemoteOnRename(\n    [in] IMoniker *pmk);\n\n  [local]\n  void OnSave();\n\n  [call_as(OnSave)]\n  HRESULT RemoteOnSave();\n\n  [local]\n  void OnClose();\n\n  [call_as(OnClose)]\n  HRESULT RemoteOnClose();\n}\n\n[\n  object,\n  uuid(00000125-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IAdviseSink2 : IAdviseSink\n{\n  typedef [unique] IAdviseSink2 *LPADVISESINK2;\n\n  [local]\n  void OnLinkSrcChange(\n    [in, unique] IMoniker *pmk);\n\n  [call_as(OnLinkSrcChange)]\n  HRESULT RemoteOnLinkSrcChange(\n    [in, unique] IMoniker *pmk);\n}\n\n[\n  object,\n  uuid(0000010e-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IDataObject : IUnknown\n{\n  typedef [unique] IDataObject *LPDATAOBJECT;\n\n  typedef enum tagDATADIR {\n    DATADIR_GET = 1,\n    DATADIR_SET = 2\n  } DATADIR;\n\n  [local]\n  HRESULT GetData(\n    [in, unique] FORMATETC *pformatetcIn,\n    [out] STGMEDIUM *pmedium);\n\n  [call_as(GetData)]\n  HRESULT RemoteGetData(\n    [in, unique] FORMATETC *pformatetcIn,\n    [out] STGMEDIUM *pRemoteMedium);\n\n  [local]\n  HRESULT GetDataHere(\n    [in, unique] FORMATETC *pformatetc,\n    [in, out] STGMEDIUM *pmedium);\n\n  [call_as(GetDataHere)]\n  HRESULT RemoteGetDataHere(\n    [in, unique] FORMATETC *pformatetc,\n    [in, out] STGMEDIUM *pRemoteMedium);\n\n  HRESULT QueryGetData(\n    [in, unique] FORMATETC *pformatetc);\n\n  HRESULT GetCanonicalFormatEtc(\n    [in, unique] FORMATETC *pformatectIn,\n    [out] FORMATETC *pformatetcOut);\n\n  [local]\n  HRESULT SetData(\n    [in, unique] FORMATETC *pformatetc,\n    [in, unique] STGMEDIUM *pmedium,\n    [in] BOOL fRelease);\n\n  [call_as(SetData)]\n  HRESULT RemoteSetData(\n    [in, unique] FORMATETC *pformatetc,\n    [in, unique] FLAG_STGMEDIUM *pmedium,\n    [in] BOOL fRelease);\n\n  HRESULT EnumFormatEtc(\n    [in] DWORD dwDirection,\n    [out] IEnumFORMATETC **ppenumFormatEtc);\n\n  HRESULT DAdvise(\n    [in] FORMATETC *pformatetc,\n    [in] DWORD advf,\n    [in, unique] IAdviseSink *pAdvSink,\n    [out] DWORD *pdwConnection);\n\n  HRESULT DUnadvise(\n    [in] DWORD dwConnection);\n\n  HRESULT EnumDAdvise(\n    [out] IEnumSTATDATA **ppenumAdvise);\n}\n\n[\n  local,\n  object,\n  uuid(00000110-0000-0000-C000-000000000046)\n]\ninterface IDataAdviseHolder : IUnknown\n{\n  typedef [unique] IDataAdviseHolder *LPDATAADVISEHOLDER;\n\n  HRESULT Advise(\n    [in, unique] IDataObject *pDataObject,\n    [in, unique] FORMATETC *pFetc,\n    [in] DWORD advf,\n    [in, unique] IAdviseSink *pAdvise,\n    [out] DWORD *pdwConnection);\n\n  HRESULT Unadvise(\n    [in] DWORD dwConnection);\n\n  HRESULT EnumAdvise(\n    [out] IEnumSTATDATA **ppenumAdvise);\n\n  HRESULT SendOnDataChange(\n    [in, unique] IDataObject *pDataObject,\n    [in] DWORD dwReserved,\n    [in] DWORD advf);\n}\n\n/******************** Remoting ********************/\n\n[\n  local,\n  object,\n  uuid(00000016-0000-0000-C000-000000000046)\n]\ninterface IMessageFilter : IUnknown\n{\n  typedef [unique] IMessageFilter *LPMESSAGEFILTER;\n\n  typedef enum tagCALLTYPE {\n    CALLTYPE_TOPLEVEL = 1,\n    CALLTYPE_NESTED   = 2,\n    CALLTYPE_ASYNC    = 3,\n    CALLTYPE_TOPLEVEL_CALLPENDING = 4,\n    CALLTYPE_ASYNC_CALLPENDING    = 5\n  } CALLTYPE;\n\n  typedef enum tagSERVERCALL {\n    SERVERCALL_ISHANDLED  = 0,\n    SERVERCALL_REJECTED   = 1,\n    SERVERCALL_RETRYLATER = 2\n  } SERVERCALL;\n\n  typedef enum tagPENDINGTYPE {\n    PENDINGTYPE_TOPLEVEL = 1,\n    PENDINGTYPE_NESTED   = 2\n  } PENDINGTYPE;\n\n  typedef enum tagPENDINGMSG {\n    PENDINGMSG_CANCELCALL     = 0,\n    PENDINGMSG_WAITNOPROCESS  = 1,\n    PENDINGMSG_WAITDEFPROCESS = 2\n  } PENDINGMSG;\n\n  typedef struct tagINTERFACEINFO {\n    IUnknown *pUnk;\n    IID iid;\n    WORD wMethod;\n  } INTERFACEINFO, *LPINTERFACEINFO;\n\n  DWORD HandleInComingCall(\n    [in] DWORD dwCallType,\n    [in] HTASK htaskCaller,\n    [in] DWORD dwTickCount,\n    [in] LPINTERFACEINFO lpInterfaceInfo);\n\n  DWORD RetryRejectedCall(\n    [in] HTASK htaskCallee,\n    [in] DWORD dwTickCount,\n    [in] DWORD dwRejectType);\n\n  DWORD MessagePending(\n    [in] HTASK htaskCallee,\n    [in] DWORD dwTickCount,\n    [in] DWORD dwPendingType);\n}\n\n\n\n\n/******************** Connection Points ********************/\n\n\ncpp_quote(\"#endif /* defined USE_COM_CONTEXT_DEF */\")\n\n\n/* OLEIDL.IDL */\n\n\n\ninterface IOleInPlaceActiveObject;\n\ncpp_quote(\"#include <winuser.h>\")\n\n\n/*****************************************************************************\n * IOleWindow interface\n */\n[\n    object,\n    uuid(00000114-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IOleWindow : IUnknown\n{\n    typedef [unique] IOleWindow *LPOLEWINDOW;\n\n    HRESULT GetWindow(\n        [out] HWND *phwnd);\n\n    HRESULT ContextSensitiveHelp(\n        [in] BOOL fEnterMode);\n}\n\n\n/*****************************************************************************\n * IOleInPlaceObject interface\n */\n[\n    object,\n    uuid(00000113-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IOleInPlaceObject : IOleWindow\n{\n    typedef [unique] IOleInPlaceObject *LPOLEINPLACEOBJECT;\n\n    HRESULT InPlaceDeactivate();\n\n    HRESULT UIDeactivate();\n\n    HRESULT SetObjectRects(\n        [in] LPCRECT lprcPosRect,\n        [in] LPCRECT lprcClipRect);\n\n    HRESULT ReactivateAndUndo();\n}\n\n\n/*****************************************************************************\n * IOleInPlaceUIWindow interface\n */\n[\n    object,\n    uuid(00000115-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\n\ninterface IOleInPlaceUIWindow : IOleWindow\n{\n    typedef [unique] IOleInPlaceUIWindow *LPOLEINPLACEUIWINDOW;\n\n    typedef RECT BORDERWIDTHS;\n    typedef LPRECT LPBORDERWIDTHS;\n    typedef LPCRECT LPCBORDERWIDTHS;\n\n    HRESULT GetBorder(\n        [out] LPRECT lprectBorder);\n\n    HRESULT RequestBorderSpace(\n        [in, unique] LPCBORDERWIDTHS pborderwidths);\n\n    HRESULT SetBorderSpace(\n        [in, unique] LPCBORDERWIDTHS pborderwidths);\n\n    HRESULT SetActiveObject(\n        [in, unique] IOleInPlaceActiveObject *pActiveObject,\n        [in, string, unique] LPCOLESTR pszObjName);\n}\n\n\n/* avoid conflict with Wine Unicode macros */\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef TranslateAccelerator\")\ncpp_quote(\"#endif\")\n\n/*****************************************************************************\n * IOleInPlaceFrame interface\n */\n[\n    object,\n    uuid(00000116-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IOleInPlaceFrame : IOleInPlaceUIWindow\n{\n    typedef [unique] IOleInPlaceFrame *LPOLEINPLACEFRAME;\n\n    typedef struct tagOleInPlaceFrameInfo\n    {\n        UINT cb;\n        BOOL fMDIApp;\n        HWND hwndFrame;\n        HACCEL haccel;\n        UINT cAccelEntries;\n    } OLEINPLACEFRAMEINFO, *LPOLEINPLACEFRAMEINFO;\n\n    typedef struct  tagOleMenuGroupWidths\n    {\n        LONG width[ 6 ];\n    } OLEMENUGROUPWIDTHS, *LPOLEMENUGROUPWIDTHS;\n\n    typedef HGLOBAL HOLEMENU;\n\n    HRESULT InsertMenus(\n        [in] HMENU hmenuShared,\n        [in,out] LPOLEMENUGROUPWIDTHS lpMenuWidths);\n\n    HRESULT SetMenu(\n        [in] HMENU hmenuShared,\n        [in] HOLEMENU holemenu,\n        [in] HWND hwndActiveObject);\n\n    HRESULT RemoveMenus(\n        [in] HMENU hmenuShared);\n\n    HRESULT SetStatusText(\n        [in, unique] LPCOLESTR pszStatusText);\n\n    HRESULT EnableModeless(\n        [in] BOOL fEnable);\n\n    HRESULT TranslateAccelerator(\n        [in] LPMSG lpmsg,\n        [in] WORD wID);\n}\n\n\n/*****************************************************************************\n * IOleInPlaceActiveObject interface\n */\n[\n    object,\n    uuid(00000117-0000-0000-c000-000000000046)\n]\ninterface IOleInPlaceActiveObject : IOleWindow\n{\n    typedef [unique] IOleInPlaceActiveObject *LPOLEINPLACEACTIVEOBJECT;\n\n    [local]\n    HRESULT TranslateAccelerator(\n        [in] LPMSG lpmsg);\n\n    [call_as(TranslateAccelerator)]\n    HRESULT RemoteTranslateAccelerator();\n\n    HRESULT OnFrameWindowActivate(\n        [in] BOOL fActivate);\n\n    HRESULT OnDocWindowActivate(\n        [in] BOOL fActivate);\n\n    [local]\n    HRESULT ResizeBorder(\n        [in] LPCRECT prcBorder,\n        [in, unique] IOleInPlaceUIWindow *pUIWindow,\n        [in] BOOL fFrameWindow);\n\n    [call_as(ResizeBorder)]\n    HRESULT RemoteResizeBorder(\n        [in] LPCRECT prcBorder,\n        [in] REFIID riid,\n        [in, unique, iid_is(riid)] IOleInPlaceUIWindow *pUIWindow,\n        [in] BOOL fFrameWindow);\n\n    HRESULT EnableModeless(\n        [in] BOOL fEnable);\n}\n\n\n/*****************************************************************************\n * IOleInPlaceSite interface\n */\n[\n    object,\n    uuid(00000119-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IOleInPlaceSite : IOleWindow\n{\n    typedef [unique] IOleInPlaceSite *LPOLEINPLACESITE;\n\n    HRESULT CanInPlaceActivate();\n    HRESULT OnInPlaceActivate();\n    HRESULT OnUIActivate();\n\n    HRESULT GetWindowContext(\n        [out] IOleInPlaceFrame **ppFrame,\n        [out] IOleInPlaceUIWindow **ppDoc,\n        [out] LPRECT lprcPosRect,\n        [out] LPRECT lprcClipRect,\n        [in, out] LPOLEINPLACEFRAMEINFO lpFrameInfo);\n\n    HRESULT Scroll(\n        [in] SIZE scrollExtent);\n\n    HRESULT OnUIDeactivate(\n        [in] BOOL fUndoable);\n\n    HRESULT OnInPlaceDeactivate();\n    HRESULT DiscardUndoState();\n    HRESULT DeactivateAndUndo();\n\n    HRESULT OnPosRectChange(\n        [in] LPCRECT lprcPosRect);\n}\n\n\n/*****************************************************************************\n * IParseDisplayName interface\n */\n[\n    object,\n    uuid(0000011a-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IParseDisplayName : IUnknown\n{\n    typedef [unique] IParseDisplayName *LPPARSEDISPLAYNAME;\n\n    HRESULT ParseDisplayName(\n        [in, unique] IBindCtx *pbc,\n        [in] LPOLESTR pszDisplayName,\n        [out] ULONG *pchEaten,\n        [out] IMoniker **ppmkOut);\n}\n\n\n/*****************************************************************************\n * IOleContainer interface\n */\n[\n    object,\n    uuid(0000011b-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IOleContainer : IParseDisplayName\n{\n    typedef [unique] IOleContainer *LPOLECONTAINER;\n\n    HRESULT EnumObjects(\n        [in] DWORD grfFlags,\n        [out] IEnumUnknown **ppenum);\n\n    HRESULT LockContainer(\n        [in] BOOL fLock);\n}\n\n\n/*****************************************************************************\n * IOleItemContainer interface\n */\n[\n    object,\n    uuid(0000011c-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IOleItemContainer : IOleContainer\n{\n    typedef [unique] IOleItemContainer *LPOLEITEMCONTAINER;\n\n    typedef enum tagBINDSPEED\n    {\n\tBINDSPEED_INDEFINITE = 1,\n\tBINDSPEED_MODERATE = 2,\n\tBINDSPEED_IMMEDIATE = 3\n    } BINDSPEED;\n\n    typedef enum tagOLECONTF\n    {\n\tOLECONTF_EMBEDDINGS = 1,\n\tOLECONTF_LINKS = 2,\n\tOLECONTF_OTHERS = 4,\n\tOLECONTF_ONLYUSER = 8,\n\tOLECONTF_ONLYIFRUNNING = 16\n    } OLECONTF;\n\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef GetObject\")\ncpp_quote(\"#endif\")\n    HRESULT GetObject(\n        [in] LPOLESTR pszItem,\n        [in] DWORD dwSpeedNeeded,\n        [in, unique] IBindCtx *pbc,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppvObject);\n\n    HRESULT GetObjectStorage(\n        [in] LPOLESTR pszItem,\n        [in, unique] IBindCtx *pbc,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppvStorage);\n\n    HRESULT IsRunning(\n        [in] LPOLESTR pszItem);\n}\n\n\n/*****************************************************************************\n * IOleLink interface\n */\n[\n    object,\n    uuid(0000011d-0000-0000-c000-000000000046)\n]\ninterface IOleLink : IUnknown\n{\n    typedef [unique] IOleLink *LPOLELINK;\n\n    typedef enum tagOLEUPDATE\n    {\n\tOLEUPDATE_ALWAYS = 1,\n\tOLEUPDATE_ONCALL = 3\n    } OLEUPDATE, *POLEUPDATE, *LPOLEUPDATE;\n\n    typedef enum tagOLELINKBIND\n    {\n\tOLELINKBIND_EVENIFCLASSDIFF = 1\n    } OLELINKBIND;\n\n    HRESULT SetUpdateOptions(\n        [in] DWORD dwUpdateOpt);\n\n    HRESULT GetUpdateOptions(\n        [out] DWORD *pdwUpdateOpt);\n\n    HRESULT SetSourceMoniker(\n        [in, unique] IMoniker *pmk,\n        [in] REFCLSID rclsid);\n\n    HRESULT GetSourceMoniker(\n        [out] IMoniker **ppmk);\n\n    HRESULT SetSourceDisplayName(\n        [in]LPCOLESTR pszStatusText);\n\n    HRESULT GetSourceDisplayName(\n        [out] LPOLESTR *ppszDisplayName);\n\n    HRESULT BindToSource(\n        [in] DWORD bindflags,\n        [in, unique] IBindCtx *pbc);\n\n    HRESULT BindIfRunning();\n\n    HRESULT GetBoundSource(\n        [out] IUnknown **ppunk);\n\n    HRESULT UnbindSource();\n\n    HRESULT Update(\n        [in, unique] IBindCtx *pbc);\n}\n\n\n/*****************************************************************************\n * IOleClientSite interface\n */\n[\n    object,\n    uuid(00000118-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IOleClientSite : IUnknown\n{\n    typedef [unique] IOleClientSite * LPOLECLIENTSITE;\n\n    HRESULT SaveObject();\n\n    HRESULT GetMoniker(\n        [in] DWORD dwAssign,\n        [in] DWORD dwWhichMoniker,\n        [out] IMoniker **ppmk);\n\n    HRESULT GetContainer(\n        [out] IOleContainer **ppContainer);\n\n    HRESULT ShowObject();\n\n    HRESULT OnShowWindow(\n        [in] BOOL fShow);\n\n    HRESULT RequestNewObjectLayout();\n}\n\n\n/*****************************************************************************\n * IOleCache interface\n */\n[\n    object,\n    uuid(0000011e-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IOleCache : IUnknown\n{\n    typedef [unique] IOleCache *LPOLECACHE;\n\n    HRESULT Cache(\n        [in, unique] FORMATETC *pformatetc,\n        [in] DWORD advf,\n        [out] DWORD *pdwConnection);\n\n    HRESULT Uncache(\n        [in] DWORD dwConnection);\n\n    HRESULT EnumCache(\n        [out] IEnumSTATDATA **ppenumSTATDATA);\n\n    HRESULT InitCache(\n        [in, unique] IDataObject *pDataObject);\n\n    HRESULT SetData(\n        [in, unique] FORMATETC *pformatetc,\n        [in, unique] STGMEDIUM *pmedium,\n        [in] BOOL fRelease);\n}\n\n\n/*****************************************************************************\n * IOleCache2 interface\n */\n[\n    object,\n    uuid(00000128-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IOleCache2 : IOleCache\n{\n    typedef [unique] IOleCache2 *LPOLECACHE2;\n\n    const DWORD UPDFCACHE_NODATACACHE = 0x00000001;\n    const DWORD UPDFCACHE_ONSAVECACHE = 0x00000002;\n    const DWORD UPDFCACHE_ONSTOPCACHE = 0x00000004;\n    const DWORD UPDFCACHE_NORMALCACHE = 0x00000008;\n    const DWORD UPDFCACHE_IFBLANK     = 0x00000010;\n    const DWORD UPDFCACHE_ONLYIFBLANK = 0x80000000;\n\n    const DWORD UPDFCACHE_IFBLANKORONSAVECACHE = (UPDFCACHE_IFBLANK | UPDFCACHE_ONSAVECACHE);\n    const DWORD UPDFCACHE_ALL = ((DWORD)(~(UPDFCACHE_ONLYIFBLANK)));\n    const DWORD UPDFCACHE_ALLBUTNODATACACHE = (UPDFCACHE_ALL & ((DWORD)(~UPDFCACHE_NODATACACHE)));\n\n    typedef enum tagDISCARDCACHE\n    {\n        DISCARDCACHE_SAVEIFDIRTY = 0,\n        DISCARDCACHE_NOSAVE =  1\n    } DISCARDCACHE;\n\n    [local]\n    HRESULT UpdateCache(\n        [in] LPDATAOBJECT pDataObject,\n        [in] DWORD grfUpdf,\n        [in] LPVOID pReserved);\n\n    [call_as(UpdateCache)]\n    HRESULT RemoteUpdateCache(\n        [in] LPDATAOBJECT pDataObject,\n        [in] DWORD grfUpdf,\n        [in] LONG_PTR pReserved);\n\n    HRESULT DiscardCache(\n        [in] DWORD dwDiscardOptions);\n}\n\n\n/*****************************************************************************\n * IOleCacheControl interface\n */\n[\n    object,\n    uuid(00000129-0000-0000-c000-000000000046)\n]\ninterface IOleCacheControl : IUnknown\n{\n    typedef [unique] IOleCacheControl *LPOLECACHECONTROL;\n\n    HRESULT OnRun(\n        LPDATAOBJECT pDataObject);\n\n    HRESULT OnStop();\n}\n\n\n/*****************************************************************************\n *  IEnumOLEVERB interface\n */\n[\n    object,\n    uuid(00000104-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IEnumOLEVERB : IUnknown\n{\n    typedef [unique] IEnumOLEVERB *LPENUMOLEVERB;\n\n    typedef struct tagOLEVERB\n    {\n\tLONG lVerb;\n\tLPOLESTR lpszVerbName;\n\tDWORD fuFlags;\n\tDWORD grfAttribs;\n    } OLEVERB, *LPOLEVERB;\n\n    typedef enum tagOLEVERBATTRIB\n    {\n\tOLEVERBATTRIB_NEVERDIRTIES = 1,\n\tOLEVERBATTRIB_ONCONTAINERMENU = 2\n    } OLEVERBATTRIB;\n\n    [local]\n    HRESULT Next(\n        [in] ULONG celt,\n        [out, size_is(celt), length_is(*pceltFetched)] LPOLEVERB rgelt,\n        [out] ULONG *pceltFetched);\n\n    [call_as(Next)]\n    HRESULT RemoteNext(\n        [in] ULONG celt,\n        [out, size_is(celt), length_is(*pceltFetched)] LPOLEVERB rgelt,\n        [out] ULONG *pceltFetched);\n\n    HRESULT Skip(\n        [in] ULONG celt);\n\n    HRESULT Reset();\n\n    HRESULT Clone(\n        [out] IEnumOLEVERB **ppenum);\n}\n\n\n/*****************************************************************************\n * IOleObject interface\n */\n[\n    object,\n    uuid(00000112-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IOleObject : IUnknown\n{\n    typedef [unique] IOleObject *LPOLEOBJECT;\n\n    typedef enum tagOLEGETMONIKER\n    {\n\tOLEGETMONIKER_ONLYIFTHERE = 1,\n\tOLEGETMONIKER_FORCEASSIGN = 2,\n\tOLEGETMONIKER_UNASSIGN = 3,\n\tOLEGETMONIKER_TEMPFORUSER = 4\n    } OLEGETMONIKER;\n\n    typedef enum tagOLEWHICHMK\n    {\n\tOLEWHICHMK_CONTAINER = 1,\n\tOLEWHICHMK_OBJREL = 2,\n\tOLEWHICHMK_OBJFULL = 3\n    } OLEWHICHMK;\n\n    typedef enum tagUSERCLASSTYPE\n    {\n\tUSERCLASSTYPE_FULL = 1,\n\tUSERCLASSTYPE_SHORT = 2,\n\tUSERCLASSTYPE_APPNAME = 3\n    } USERCLASSTYPE;\n\n    typedef enum tagOLEMISC\n    {\n\tOLEMISC_RECOMPOSEONRESIZE = 0x1,\n\tOLEMISC_ONLYICONIC = 0x2,\n\tOLEMISC_INSERTNOTREPLACE = 0x4,\n\tOLEMISC_STATIC = 0x8,\n\tOLEMISC_CANTLINKINSIDE = 0x10,\n\tOLEMISC_CANLINKBYOLE1 = 0x20,\n\tOLEMISC_ISLINKOBJECT = 0x40,\n\tOLEMISC_INSIDEOUT = 0x80,\n\tOLEMISC_ACTIVATEWHENVISIBLE = 0x100,\n\tOLEMISC_RENDERINGISDEVICEINDEPENDENT = 0x200,\n\tOLEMISC_INVISIBLEATRUNTIME = 0x400,\n\tOLEMISC_ALWAYSRUN = 0x800,\n\tOLEMISC_ACTSLIKEBUTTON = 0x1000,\n\tOLEMISC_ACTSLIKELABEL = 0x2000,\n\tOLEMISC_NOUIACTIVATE = 0x4000,\n\tOLEMISC_ALIGNABLE = 0x8000,\n\tOLEMISC_SIMPLEFRAME = 0x10000,\n\tOLEMISC_SETCLIENTSITEFIRST = 0x20000,\n\tOLEMISC_IMEMODE = 0x40000,\n\tOLEMISC_IGNOREACTIVATEWHENVISIBLE = 0x80000,\n\tOLEMISC_WANTSTOMENUMERGE = 0x100000,\n\tOLEMISC_SUPPORTSMULTILEVELUNDO = 0x200000\n    } OLEMISC;\n\n    typedef enum tagOLECLOSE\n    {\n\tOLECLOSE_SAVEIFDIRTY = 0,\n\tOLECLOSE_NOSAVE = 1,\n\tOLECLOSE_PROMPTSAVE = 2\n    } OLECLOSE;\n\n    HRESULT SetClientSite(\n        [in, unique] IOleClientSite *pClientSite);\n\n    HRESULT GetClientSite(\n        [out] IOleClientSite **ppClientSite);\n\n    HRESULT SetHostNames(\n        [in] LPCOLESTR szContainerApp,\n        [in, unique] LPCOLESTR szContainerObj);\n\n    HRESULT Close(\n        [in] DWORD dwSaveOption);\n\n    HRESULT SetMoniker(\n        [in] DWORD dwWhichMoniker,\n        [in, unique] IMoniker *pmk);\n\n    HRESULT GetMoniker(\n        [in] DWORD dwAssign,\n        [in] DWORD dwWhichMoniker,\n        [out] IMoniker **ppmk);\n\n    HRESULT InitFromData(\n        [in, unique] IDataObject *pDataObject,\n        [in] BOOL fCreation,\n        [in] DWORD dwReserved);\n\n    HRESULT GetClipboardData(\n        [in] DWORD dwReserved,\n        [out] IDataObject **ppDataObject);\n\n    HRESULT DoVerb(\n        [in] LONG iVerb,\n        [in, unique] LPMSG lpmsg,\n        [in, unique] IOleClientSite *pActiveSite,\n        [in] LONG lindex,\n        [in] HWND hwndParent,\n        [in, unique] LPCRECT lprcPosRect);\n\n    HRESULT EnumVerbs(\n        [out] IEnumOLEVERB **ppEnumOleVerb);\n\n    HRESULT Update();\n\n    HRESULT IsUpToDate();\n\n    HRESULT GetUserClassID(\n        [out] CLSID *pClsid);\n\n    HRESULT GetUserType(\n        [in] DWORD dwFormOfType,\n        [out] LPOLESTR *pszUserType);\n\n    HRESULT SetExtent(\n        [in] DWORD dwDrawAspect,\n        [in] SIZEL *psizel);\n\n    HRESULT GetExtent(\n        [in] DWORD dwDrawAspect,\n        [out] SIZEL *psizel);\n\n    HRESULT Advise(\n        [in, unique] IAdviseSink *pAdvSink,\n        [out] DWORD *pdwConnection);\n\n    HRESULT Unadvise(\n        [in] DWORD dwConnection);\n\n    HRESULT EnumAdvise(\n        [out] IEnumSTATDATA **ppenumAdvise);\n\n    HRESULT GetMiscStatus(\n        [in] DWORD dwAspect,\n        [out] DWORD *pdwStatus);\n\n    HRESULT SetColorScheme(\n        [in] LOGPALETTE *pLogpal);\n}\n\n\n/*****************************************************************************\n * IOleAdviseHolder interface\n */\n[\n    local,\n    object,\n    uuid(00000111-0000-0000-c000-000000000046)\n]\ninterface IOleAdviseHolder : IUnknown\n{\n    typedef [unique] IOleAdviseHolder * LPOLEADVISEHOLDER;\n\n    HRESULT Advise(\n        [in, unique] IAdviseSink *pAdvise,\n        [out] DWORD *pdwConnection);\n\n    HRESULT Unadvise(\n        [in] DWORD dwConnection);\n\n    HRESULT EnumAdvise(\n        [out] IEnumSTATDATA **ppenumAdvise);\n\n    HRESULT SendOnRename(\n        [in, unique] IMoniker *pmk);\n\n    HRESULT SendOnSave();\n    HRESULT SendOnClose();\n}\n\n\n/*****************************************************************************\n * IContinue interface\n */\n[\n    object,\n    uuid(0000012a-0000-0000-c000-000000000046)\n]\ninterface IContinue : IUnknown\n{\n    HRESULT FContinue();\n}\n\n\n/*****************************************************************************\n * IViewObject interface\n */\n[\n    object,\n    uuid(0000010d-0000-0000-c000-000000000046)\n]\ninterface IViewObject : IUnknown\n{\n    typedef [unique] IViewObject *LPVIEWOBJECT;\n    typedef struct IViewObjectCallback IViewObjectCallback;\n\n    [local]\n    HRESULT Draw(\n        [in] DWORD dwDrawAspect,\n        [in] LONG lindex,\n        [in, unique] void * pvAspect,\n        [in, unique] DVTARGETDEVICE *ptd,\n        [in] HDC hdcTargetDev,\n        [in] HDC hdcDraw,\n        [in] LPCRECTL lprcBounds,\n        [in, unique] LPCRECTL lprcWBounds,\n        [in] IViewObjectCallback/*BOOL (*pfnContinue)(ULONG_PTR dwContinue)*/,\n        [in] ULONG_PTR dwContinue);\n\n    [call_as(Draw)]\n    HRESULT RemoteDraw(\n        [in] DWORD dwDrawAspect,\n        [in] LONG lindex,\n        [in] ULONG_PTR pvAspect,\n        [in, unique] DVTARGETDEVICE *ptd,\n        [in] ULONG_PTR hdcTargetDev,\n        [in] ULONG_PTR hdcDraw,\n        [in] LPCRECTL lprcBounds,\n        [in, unique] LPCRECTL lprcWBounds,\n        [in] IContinue *pContinue);\n\n    [local]\n    HRESULT GetColorSet(\n        [in] DWORD dwDrawAspect,\n        [in] LONG lindex,\n        [in, unique] void *pvAspect,\n        [in, unique] DVTARGETDEVICE *ptd,\n        [in] HDC hicTargetDev,\n        [out] LOGPALETTE **ppColorSet);\n\n    [call_as(GetColorSet)]\n    HRESULT RemoteGetColorSet(\n        [in] DWORD dwDrawAspect,\n        [in] LONG lindex,\n        [in] ULONG_PTR pvAspect,\n        [in, unique] DVTARGETDEVICE *ptd,\n        [in] ULONG_PTR hicTargetDev,\n        [out] LOGPALETTE **ppColorSet);\n\n    [local]\n    HRESULT Freeze(\n        [in] DWORD dwDrawAspect,\n        [in] LONG lindex,\n        [in, unique] void *pvAspect,\n        [out] DWORD *pdwFreeze);\n\n    [call_as(Freeze)]\n    HRESULT RemoteFreeze(\n        [in] DWORD dwDrawAspect,\n        [in] LONG lindex,\n        [in] ULONG_PTR pvAspect,\n        [out] DWORD *pdwFreeze);\n\n    HRESULT Unfreeze(\n        [in] DWORD dwFreeze);\n\n    HRESULT SetAdvise(\n        [in] DWORD aspects,\n        [in] DWORD advf,\n        [in, unique] IAdviseSink *pAdvSink);\n\n    [local]\n    HRESULT GetAdvise(\n        [out, unique] DWORD *pAspects,\n        [out, unique] DWORD *pAdvf,\n        [out] IAdviseSink **ppAdvSink);\n\n    [call_as(GetAdvise)]\n    HRESULT RemoteGetAdvise(\n        [out] DWORD *pAspects,\n        [out] DWORD *pAdvf,\n        [out] IAdviseSink **ppAdvSink);\n}\n\n\n/*****************************************************************************\n * IViewObject2 interface\n */\n[\n    object,\n    uuid(00000127-0000-0000-c000-000000000046)\n]\ninterface IViewObject2 : IViewObject\n{\n    typedef [unique] IViewObject2 *LPVIEWOBJECT2;\n\n    HRESULT GetExtent(\n        [in]  DWORD dwDrawAspect,\n        [in]  LONG lindex,\n        [in, unique]  DVTARGETDEVICE* ptd,\n        [out] LPSIZEL lpsizel);\n}\n\n\n/*****************************************************************************\n * IDropSource interface\n */\n[\n    local,\n    object,\n    uuid(00000121-0000-0000-c000-000000000046)\n]\ninterface IDropSource : IUnknown\n{\n    typedef [unique] IDropSource *LPDROPSOURCE;\n\n    HRESULT QueryContinueDrag(\n        [in] BOOL fEscapePressed,\n        [in] DWORD grfKeyState);\n\n    HRESULT GiveFeedback(\n        [in] DWORD dwEffect);\n}\n\n\n/*****************************************************************************\n * IDropTarget interface\n */\n[\n    object,\n    uuid(00000122-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IDropTarget : IUnknown\n{\n    typedef [unique] IDropTarget *LPDROPTARGET;\n\n    const DWORD MK_ALT = 0x20;\n    const DWORD DROPEFFECT_NONE = 0;\n    const DWORD DROPEFFECT_COPY = 1;\n    const DWORD DROPEFFECT_MOVE = 2;\n    const DWORD DROPEFFECT_LINK = 4;\n    const DWORD DROPEFFECT_SCROLL = 0x80000000;\n    const DWORD DD_DEFSCROLLINSET = 11;\n    const DWORD DD_DEFSCROLLDELAY = 50;\n    const DWORD DD_DEFSCROLLINTERVAL = 50;\n    const DWORD DD_DEFDRAGDELAY = 200;\n    const DWORD DD_DEFDRAGMINDIST = 2;\n\n    HRESULT DragEnter(\n        [in, unique] IDataObject *pDataObj,\n        [in] DWORD grfKeyState,\n        [in] POINTL pt,\n        [in, out] DWORD *pdwEffect);\n\n    HRESULT DragOver(\n        [in] DWORD grfKeyState,\n        [in] POINTL pt,\n        [in, out] DWORD *pdwEffect);\n\n    HRESULT DragLeave();\n\n    HRESULT Drop(\n        [in, unique] IDataObject *pDataObj,\n        [in] DWORD grfKeyState,\n        [in] POINTL pt,\n        [in, out] DWORD *pdwEffect);\n}\n/* STGMEDIUM.pUnkForRelease wrapper? */\n[\n  object,\n  uuid(F6989118-9D36-4B65-AE0C-0C20886D50F8),\n  pointer_default(unique)\n]\ninterface ISTGMEDIUMRelease : IUnknown\n{\n}\n\n/*\n * Copyright 2002 Ove Kaaven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef DO_NO_IMPORTS\n//import \"objidl.idl\";\n#endif\n\ninterface IDispatch;\ninterface ITypeInfo;\ninterface ITypeLib;\ninterface IRecordInfo;\n\n[\n  version(1.0),\n  pointer_default(unique)\n]\ninterface IOleAutomationTypes\n{\n\ntypedef CY CURRENCY;\n\n/* Safe Array */\n\ntypedef struct tagSAFEARRAYBOUND {\n  ULONG cElements;\n  LONG lLbound;\n} SAFEARRAYBOUND, *LPSAFEARRAYBOUND;\n\ntypedef [unique] struct _wireVARIANT *wireVARIANT;\ntypedef [unique] struct _wireBRECORD *wireBRECORD;\n\ntypedef struct _wireSAFEARR_BSTR {\n  ULONG Size;\n  [size_is(Size), ref] wireBSTR *aBstr;\n} SAFEARR_BSTR;\n\ntypedef struct _wireSAFEARR_UNKNOWN {\n  ULONG Size;\n  [size_is(Size), ref] IUnknown **apUnknown;\n} SAFEARR_UNKNOWN;\n\ntypedef struct _wireSAFEARR_DISPATCH {\n  ULONG Size;\n  [size_is(Size), ref] IDispatch **apDispatch;\n} SAFEARR_DISPATCH;\n\ntypedef struct _wireSAFEARR_VARIANT {\n  ULONG Size;\n  [size_is(Size), ref] wireVARIANT *aVariant;\n} SAFEARR_VARIANT;\n\ntypedef struct _wireSAFEARR_BRECORD {\n  ULONG Size;\n  [size_is(Size), ref] wireBRECORD *aRecord;\n} SAFEARR_BRECORD;\n\ntypedef struct _wireSAFEARR_HAVEIID {\n  ULONG Size;\n  [size_is(Size), ref] IUnknown **apUnknown;\n  IID iid;\n} SAFEARR_HAVEIID;\n\ntypedef [v1_enum] enum tagSF_TYPE {\n  SF_ERROR    = VT_ERROR,\n  SF_I1       = VT_I1,\n  SF_I2       = VT_I2,\n  SF_I4       = VT_I4,\n  SF_I8       = VT_I8,\n  SF_BSTR     = VT_BSTR,\n  SF_UNKNOWN  = VT_UNKNOWN,\n  SF_DISPATCH = VT_DISPATCH,\n  SF_VARIANT  = VT_VARIANT,\n  SF_RECORD   = VT_RECORD,\n  SF_HAVEIID  = VT_UNKNOWN|VT_RESERVED,\n} SF_TYPE;\n\ntypedef union _wireSAFEARRAY_UNION switch(ULONG sfType) u {\n  case SF_BSTR:     SAFEARR_BSTR BstrStr;\n  case SF_UNKNOWN:  SAFEARR_UNKNOWN UnknownStr;\n  case SF_DISPATCH: SAFEARR_DISPATCH DispatchStr;\n  case SF_VARIANT:  SAFEARR_VARIANT VariantStr;\n  case SF_RECORD:   SAFEARR_BRECORD RecordStr;\n  case SF_HAVEIID:  SAFEARR_HAVEIID HaveIidStr;\n  case SF_I1:       BYTE_SIZEDARR ByteStr;\n  case SF_I2:       WORD_SIZEDARR WordStr;\n  case SF_I4:       DWORD_SIZEDARR LongStr;\n  case SF_I8:       HYPER_SIZEDARR HyperStr;\n} SAFEARRAYUNION;\n\ntypedef [unique] struct _wireSAFEARRAY {\n  USHORT cDims;\n  USHORT fFeatures;\n  ULONG cbElements;\n  ULONG cLocks;\n  SAFEARRAYUNION uArrayStructs;\n  [size_is(cDims)] SAFEARRAYBOUND rgsabound[];\n} *wireSAFEARRAY;\n\ntypedef [unique] wireSAFEARRAY *wirePSAFEARRAY;\n\ntypedef struct tagSAFEARRAY {\n  USHORT cDims;\n  USHORT fFeatures;\n  ULONG cbElements;\n  ULONG cLocks;\n  PVOID pvData;\n  SAFEARRAYBOUND rgsabound[];\n} SAFEARRAY;\n\ntypedef [wire_marshal(wirePSAFEARRAY)] SAFEARRAY *LPSAFEARRAY;\n\nconst USHORT FADF_AUTO        = 0x0001;\nconst USHORT FADF_STATIC      = 0x0002;\nconst USHORT FADF_EMBEDDED    = 0x0004;\nconst USHORT FADF_FIXEDSIZE   = 0x0010;\nconst USHORT FADF_RECORD      = 0x0020;\nconst USHORT FADF_HAVEIID     = 0x0040;\nconst USHORT FADF_HAVEVARTYPE = 0x0080;\nconst USHORT FADF_BSTR        = 0x0100;\nconst USHORT FADF_UNKNOWN     = 0x0200;\nconst USHORT FADF_DISPATCH    = 0x0400;\nconst USHORT FADF_VARIANT     = 0x0800;\nconst USHORT FADF_RESERVED    = 0xF008;\n/* Undocumented flags */\nconst USHORT FADF_DATADELETED  = 0x1000; /* Data in a vector has been deleted */\nconst USHORT FADF_CREATEVECTOR = 0x2000; /* This array is a vector */\n\n/* Variant */\n\ncpp_quote(\"#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION)\")\ncpp_quote(\"#define __VARIANT_NAME_1 n1\")\ncpp_quote(\"#define __VARIANT_NAME_2 n2\")\ncpp_quote(\"#define __VARIANT_NAME_3 n3\")\ncpp_quote(\"#define __VARIANT_NAME_4 brecVal\")\ncpp_quote(\"#else\")\ncpp_quote(\"#define __tagVARIANT\")\ncpp_quote(\"#define __VARIANT_NAME_1\")\ncpp_quote(\"#define __VARIANT_NAME_2\")\ncpp_quote(\"#define __VARIANT_NAME_3\")\ncpp_quote(\"#define __tagBRECORD\")\ncpp_quote(\"#define __VARIANT_NAME_4\")\ncpp_quote(\"#endif\")\n\ntypedef [wire_marshal(wireVARIANT)] struct tagVARIANT VARIANT;\n\nstruct tagVARIANT {\n  union {\n    struct __tagVARIANT {\n      VARTYPE vt;\n      WORD wReserved1;\n      WORD wReserved2;\n      WORD wReserved3;\n      union {\n        signed char cVal;\n        USHORT uiVal;\n        ULONG ulVal;\n        INT intVal;\n        UINT uintVal;\n        BYTE bVal;\n        SHORT iVal;\n        LONG lVal;\n        FLOAT fltVal;\n        DOUBLE dblVal;\n        VARIANT_BOOL boolVal;\n#if 0 /* illegal in C++ */\n        _VARIANT_BOOL bool;\n#endif\n        SCODE scode;\n        DATE date;\n        BSTR bstrVal;\n        CY cyVal;\n        IUnknown *punkVal;\n        IDispatch *pdispVal;\n        SAFEARRAY *parray;\n        LONGLONG llVal;\n        ULONGLONG ullVal;\n        signed char *pcVal;\n        USHORT *puiVal;\n        ULONG *pulVal;\n        INT *pintVal;\n        UINT *puintVal;\n        BYTE *pbVal;\n        SHORT *piVal;\n        LONG *plVal;\n        FLOAT *pfltVal;\n        DOUBLE *pdblVal;\n        VARIANT_BOOL *pboolVal;\n#if 0\n        _VARIANT_BOOL *pbool;\n#endif\n        SCODE *pscode;\n        DATE *pdate;\n        BSTR *pbstrVal;\n        VARIANT *pvarVal;\n        PVOID byref;\n        CY *pcyVal;\n        DECIMAL *pdecVal;\n        IUnknown **ppunkVal;\n        IDispatch **ppdispVal;\n        SAFEARRAY **pparray;\n        LONGLONG *pllVal;\n        ULONGLONG *pullVal;\n        struct __tagBRECORD {\n          PVOID pvRecord;\n          IRecordInfo *pRecInfo;\n        } __VARIANT_NAME_4;\n      } __VARIANT_NAME_3;\n    } __VARIANT_NAME_2;\n\n    DECIMAL decVal;\n  } __VARIANT_NAME_1;\n};\n\ntypedef VARIANT *LPVARIANT;\ntypedef VARIANT VARIANTARG;\ntypedef VARIANTARG *LPVARIANTARG;\n\ncpp_quote(\"#if 0\")\ntypedef const VARIANT *REFVARIANT;\ncpp_quote(\"#elif !defined(_REFVARIANT_DEFINED)\")\ncpp_quote(\"#define _REFVARIANT_DEFINED\")\ncpp_quote(\"#ifdef __cplusplus\")\ncpp_quote(\"#define REFVARIANT const VARIANT &\")\ncpp_quote(\"#else\")\ncpp_quote(\"#define REFVARIANT const VARIANT *__MIDL_CONST\")\ncpp_quote(\"#endif\")\ncpp_quote(\"#endif\")\n\nstruct _wireBRECORD {\n  ULONG fFlags;\n  ULONG clSize;\n  IRecordInfo *pRecInfo;\n  [size_is(clSize)] byte *pRecord;\n};\n\nstruct _wireVARIANT {\n  DWORD clSize;\n  DWORD rpcReserved;\n  USHORT vt;\n  USHORT wReserved1;\n  USHORT wReserved2;\n  USHORT wReserved3;\n  [switch_is(vt)] union {\n  [case(VT_EMPTY, VT_NULL)]    ;\n  [case(VT_I1)]                signed char cVal;\n  [case(VT_UI2)]               USHORT uiVal;\n  [case(VT_UI4)]               ULONG ulVal;\n  [case(VT_INT)]               INT intVal;\n  [case(VT_UINT)]              UINT uintVal;\n  [case(VT_UI1)]               BYTE bVal;\n  [case(VT_I2)]                SHORT iVal;\n  [case(VT_I4)]                LONG lVal;\n  [case(VT_R4)]                FLOAT fltVal;\n  [case(VT_R8)]                DOUBLE dblVal;\n  [case(VT_BOOL)]              VARIANT_BOOL boolVal;\n  [case(VT_ERROR)]             SCODE scode;\n  [case(VT_DATE)]              DATE date;\n  [case(VT_BSTR)]              wireBSTR bstrVal;\n  [case(VT_CY)]                CY cyVal;\n  [case(VT_DECIMAL)]           DECIMAL decVal;\n  [case(VT_UNKNOWN)]           IUnknown *punkVal;\n  [case(VT_DISPATCH)]          IDispatch *pdispVal;\n  [case(VT_ARRAY)]             wireSAFEARRAY parray;\n  [case(VT_I1|VT_BYREF)]       signed char *pcVal;\n  [case(VT_UI2|VT_BYREF)]      USHORT *puiVal;\n  [case(VT_UI4|VT_BYREF)]      ULONG *pulVal;\n  [case(VT_INT|VT_BYREF)]      INT *pintVal;\n  [case(VT_UINT|VT_BYREF)]     UINT *puintVal;\n  [case(VT_UI1|VT_BYREF)]      BYTE *pbVal;\n  [case(VT_I2|VT_BYREF)]       SHORT *piVal;\n  [case(VT_I4|VT_BYREF)]       LONG *plVal;\n  [case(VT_R4|VT_BYREF)]       FLOAT *pfltVal;\n  [case(VT_R8|VT_BYREF)]       DOUBLE *pdblVal;\n  [case(VT_BOOL|VT_BYREF)]     VARIANT_BOOL *pboolVal;\n  [case(VT_ERROR|VT_BYREF)]    SCODE *pscode;\n  [case(VT_DATE|VT_BYREF)]     DATE *pdate;\n  [case(VT_BSTR|VT_BYREF)]     wireBSTR *pbstrVal;\n  [case(VT_VARIANT|VT_BYREF)]  wireVARIANT *pvarVal;\n  [case(VT_CY|VT_BYREF)]       CY *pcyVal;\n  [case(VT_DECIMAL|VT_BYREF)]  DECIMAL *pdecVal;\n  [case(VT_UNKNOWN|VT_BYREF)]  IUnknown **ppunkVal;\n  [case(VT_DISPATCH|VT_BYREF)] IDispatch **ppdispVal;\n  [case(VT_ARRAY|VT_BYREF)]    wireSAFEARRAY *pparray;\n  [case(VT_RECORD, VT_RECORD|VT_BYREF)] wireBRECORD brecVal;\n  } DUMMYUNIONNAME;\n};\n\n/* Dispatch */\n\ntypedef LONG DISPID;\ntypedef DWORD HREFTYPE;\ntypedef DISPID MEMBERID;\n\ntypedef [v1_enum] enum tagTYPEKIND {\n  TKIND_ENUM = 0,\n  TKIND_RECORD,\n  TKIND_MODULE,\n  TKIND_INTERFACE,\n  TKIND_DISPATCH,\n  TKIND_COCLASS,\n  TKIND_ALIAS,\n  TKIND_UNION,\n  TKIND_MAX\n} TYPEKIND;\n\ntypedef struct tagTYPEDESC {\n  [switch_is(vt)] union {\n  [case(VT_PTR, VT_SAFEARRAY)] struct tagTYPEDESC *lptdesc;\n  [case(VT_CARRAY)]            struct tagARRAYDESC *lpadesc;\n  [case(VT_USERDEFINED)]       HREFTYPE hreftype;\n  [default]                    ;\n  } DUMMYUNIONNAME;\n  VARTYPE vt;\n} TYPEDESC;\n\ntypedef struct tagARRAYDESC {\n  TYPEDESC tdescElem;\n  USHORT cDims;\n  [size_is(cDims)] SAFEARRAYBOUND rgbounds[];\n} ARRAYDESC;\n\ntypedef struct tagPARAMDESCEX {\n  ULONG cBytes;\n  VARIANTARG varDefaultValue;\n} PARAMDESCEX, *LPPARAMDESCEX;\n\ntypedef struct tagPARAMDESC {\n  LPPARAMDESCEX pparamdescex;\n  USHORT wParamFlags;\n} PARAMDESC, *LPPARAMDESC;\n\nconst USHORT PARAMFLAG_NONE         = 0x00;\nconst USHORT PARAMFLAG_FIN          = 0x01;\nconst USHORT PARAMFLAG_FOUT         = 0x02;\nconst USHORT PARAMFLAG_FLCID        = 0x04;\nconst USHORT PARAMFLAG_FRETVAL      = 0x08;\nconst USHORT PARAMFLAG_FOPT         = 0x10;\nconst USHORT PARAMFLAG_FHASDEFAULT  = 0x20;\nconst USHORT PARAMFLAG_FHASCUSTDATA = 0x40;\n\ntypedef struct tagIDLDESC {\n  ULONG_PTR dwReserved;\n  USHORT wIDLFlags;\n} IDLDESC, *LPIDLDESC;\n\nconst USHORT IDLFLAG_NONE    = PARAMFLAG_NONE;\nconst USHORT IDLFLAG_FIN     = PARAMFLAG_FIN;\nconst USHORT IDLFLAG_FOUT    = PARAMFLAG_FOUT;\nconst USHORT IDLFLAG_FLCID   = PARAMFLAG_FLCID;\nconst USHORT IDLFLAG_FRETVAL = PARAMFLAG_FRETVAL;\n\ncpp_quote(\"#if 0\") /* for IDL only */\ntypedef struct tagELEMDESC {\n  TYPEDESC tdesc;\n  PARAMDESC paramdesc;\n} ELEMDESC;\ncpp_quote(\"#else\") /* C/C++ defs */\ncpp_quote(\"typedef struct tagELEMDESC {\")\ncpp_quote(\"  TYPEDESC tdesc;\")\ncpp_quote(\"  union {\")\ncpp_quote(\"    IDLDESC idldesc;\")\ncpp_quote(\"    PARAMDESC paramdesc;\")\ncpp_quote(\"  } DUMMYUNIONNAME;\")\ncpp_quote(\"} ELEMDESC, *LPELEMDESC;\")\ncpp_quote(\"#endif\")\n\ntypedef struct tagTYPEATTR {\n  GUID guid;\n  LCID lcid;\n  DWORD dwReserved;\n  MEMBERID memidConstructor;\n  MEMBERID memidDestructor;\n  LPOLESTR lpstrSchema;\n  ULONG cbSizeInstance;\n  TYPEKIND typekind;\n  WORD cFuncs;\n  WORD cVars;\n  WORD cImplTypes;\n  WORD cbSizeVft;\n  WORD cbAlignment;\n  WORD wTypeFlags;\n  WORD wMajorVerNum;\n  WORD wMinorVerNum;\n  TYPEDESC tdescAlias;\n  IDLDESC idldescType;\n} TYPEATTR, *LPTYPEATTR;\n\ntypedef struct tagDISPPARAMS {\n  [size_is(cArgs)] VARIANTARG *rgvarg;\n  [size_is(cNamedArgs)] DISPID *rgdispidNamedArgs;\n  UINT cArgs;\n  UINT cNamedArgs;\n} DISPPARAMS;\n\ncpp_quote(\"#if 0\") /* for IDL only */\ntypedef struct tagEXCEPINFO {\n  WORD wCode;\n  WORD wReserved;\n  BSTR bstrSource;\n  BSTR bstrDescription;\n  BSTR bstrHelpFile;\n  DWORD dwHelpContext;\n  ULONG_PTR pvReserved;\n  ULONG_PTR pfnDeferredFillIn;\n  SCODE scode;\n} EXCEPINFO;\ncpp_quote(\"#else\")\ncpp_quote(\"typedef struct tagEXCEPINFO {\")\ncpp_quote(\"  WORD wCode;\")\ncpp_quote(\"  WORD wReserved;\")\ncpp_quote(\"  BSTR bstrSource;\")\ncpp_quote(\"  BSTR bstrDescription;\")\ncpp_quote(\"  BSTR bstrHelpFile;\")\ncpp_quote(\"  DWORD dwHelpContext;\")\ncpp_quote(\"  PVOID pvReserved;\")\ncpp_quote(\"  HRESULT (__stdcall *pfnDeferredFillIn)(struct tagEXCEPINFO *);\")\ncpp_quote(\"  SCODE scode;\")\ncpp_quote(\"} EXCEPINFO, *LPEXCEPINFO;\")\ncpp_quote(\"#endif\")\n\ntypedef [v1_enum] enum tagCALLCONV {\n  CC_FASTCALL = 0,\n  CC_CDECL = 1,\n  CC_MSCPASCAL,\n  CC_PASCAL = CC_MSCPASCAL,\n  CC_MACPASCAL,\n  CC_STDCALL,\n  CC_FPFASTCALL,\n  CC_SYSCALL,\n  CC_MPWCDECL,\n  CC_MPWPASCAL,\n  CC_MAX\n} CALLCONV;\n\ntypedef [v1_enum] enum tagFUNCKIND {\n  FUNC_VIRTUAL,\n  FUNC_PUREVIRTUAL,\n  FUNC_NONVIRTUAL,\n  FUNC_STATIC,\n  FUNC_DISPATCH\n} FUNCKIND;\n\ntypedef [v1_enum] enum tagINVOKEKIND {\n  INVOKE_FUNC = 1,\n  INVOKE_PROPERTYGET = 2,\n  INVOKE_PROPERTYPUT = 4,\n  INVOKE_PROPERTYPUTREF = 8\n} INVOKEKIND;\n\ntypedef struct tagFUNCDESC {\n  MEMBERID memid;\n  [size_is(cScodes)] SCODE *lprgscode;\n  [size_is(cParams)] ELEMDESC *lprgelemdescParam;\n  FUNCKIND funckind;\n  INVOKEKIND invkind;\n  CALLCONV callconv;\n  SHORT cParams;\n  SHORT cParamsOpt;\n  SHORT oVft;\n  SHORT cScodes;\n  ELEMDESC elemdescFunc;\n  WORD wFuncFlags;\n} FUNCDESC, *LPFUNCDESC;\n\ntypedef [v1_enum] enum tagVARKIND {\n  VAR_PERINSTANCE,\n  VAR_STATIC,\n  VAR_CONST,\n  VAR_DISPATCH\n} VARKIND;\n\nconst USHORT IMPLTYPEFLAG_FDEFAULT       = 0x1;\nconst USHORT IMPLTYPEFLAG_FSOURCE        = 0x2;\nconst USHORT IMPLTYPEFLAG_FRESTRICTED    = 0x4;\nconst USHORT IMPLTYPEFLAG_FDEFAULTVTABLE = 0x8;\n\ntypedef struct tagVARDESC {\n  MEMBERID memid;\n  LPOLESTR lpstrSchema;\n  [switch_is(varkind)] union {\n  [case(VAR_PERINSTANCE, VAR_DISPATCH, VAR_STATIC)] ULONG oInst;\n  [case(VAR_CONST)] VARIANT *lpvarValue;\n  } DUMMYUNIONNAME;\n  ELEMDESC elemdescVar;\n  WORD wVarFlags;\n  VARKIND varkind;\n} VARDESC, *LPVARDESC;\n\ntypedef enum tagTYPEFLAGS {\n  TYPEFLAG_FAPPOBJECT     = 0x0001,\n  TYPEFLAG_FCANCREATE     = 0x0002,\n  TYPEFLAG_FLICENSED      = 0x0004,\n  TYPEFLAG_FPREDECLID     = 0x0008,\n  TYPEFLAG_FHIDDEN        = 0x0010,\n  TYPEFLAG_FCONTROL       = 0x0020,\n  TYPEFLAG_FDUAL          = 0x0040,\n  TYPEFLAG_FNONEXTENSIBLE = 0x0080,\n  TYPEFLAG_FOLEAUTOMATION = 0x0100,\n  TYPEFLAG_FRESTRICTED    = 0x0200,\n  TYPEFLAG_FAGGREGATABLE  = 0x0400,\n  TYPEFLAG_FREPLACEABLE   = 0x0800,\n  TYPEFLAG_FDISPATCHABLE  = 0x1000,\n  TYPEFLAG_FREVERSEBIND   = 0x2000,\n  TYPEFLAG_FPROXY         = 0x4000\n} TYPEFLAGS;\n\ntypedef enum tagFUNCFLAGS {\n  FUNCFLAG_FRESTRICTED       = 0x0001,\n  FUNCFLAG_FSOURCE           = 0x0002,\n  FUNCFLAG_FBINDABLE         = 0x0004,\n  FUNCFLAG_FREQUESTEDIT      = 0x0008,\n  FUNCFLAG_FDISPLAYBIND      = 0x0010,\n  FUNCFLAG_FDEFAULTBIND      = 0x0020,\n  FUNCFLAG_FHIDDEN           = 0x0040,\n  FUNCFLAG_FUSESGETLASTERROR = 0x0080,\n  FUNCFLAG_FDEFAULTCOLLELEM  = 0x0100,\n  FUNCFLAG_FUIDEFAULT        = 0x0200,\n  FUNCFLAG_FNONBROWSABLE     = 0x0400,\n  FUNCFLAG_FREPLACEABLE      = 0x0800,\n  FUNCFLAG_FIMMEDIATEBIND    = 0x1000\n} FUNCFLAGS;\n\ntypedef enum tagVARFLAGS {\n  VARFLAG_FREADONLY        = 0x0001,\n  VARFLAG_FSOURCE          = 0x0002,\n  VARFLAG_FBINDABLE        = 0x0004,\n  VARFLAG_FREQUESTEDIT     = 0x0008,\n  VARFLAG_FDISPLAYBIND     = 0x0010,\n  VARFLAG_FDEFAULTBIND     = 0x0020,\n  VARFLAG_FHIDDEN          = 0x0040,\n  VARFLAG_FRESTRICTED      = 0x0080,\n  VARFLAG_FDEFAULTCOLLELEM = 0x0100,\n  VARFLAG_FUIDEFAULT       = 0x0200,\n  VARFLAG_FNONBROWSABLE    = 0x0400,\n  VARFLAG_FREPLACEABLE     = 0x0800,\n  VARFLAG_FIMMEDIATEBIND   = 0x1000\n} VARFLAGS;\n\ntypedef [wire_marshal(DWORD)] struct tagCLEANLOCALSTORAGE {\n  IUnknown *pInterface;\n  PVOID pStorage;\n  DWORD flags;\n} CLEANLOCALSTORAGE;\n\ntypedef struct tagCUSTDATAITEM {\n  GUID guid;\n  VARIANTARG varValue;\n} CUSTDATAITEM, *LPCUSTDATAITEM;\n\ntypedef struct tagCUSTDATA {\n  DWORD cCustData;\n  [size_is(cCustData)] LPCUSTDATAITEM prgCustData;\n} CUSTDATA, *LPCUSTDATA;\n\n} /* interface IOleAutomationTypes */\n\n/******************** INTERFACES ********************/\n\n[\n  object,\n  uuid(00020400-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IDispatch : IUnknown\n{\n  typedef [unique] IDispatch *LPDISPATCH;\n\n  const DISPID DISPID_UNKNOWN     = -1;\n  const DISPID DISPID_VALUE       =  0;\n  const DISPID DISPID_PROPERTYPUT = -3;\n  const DISPID DISPID_NEWENUM     = -4;\n  const DISPID DISPID_EVALUATE    = -5;\n  const DISPID DISPID_CONSTRUCTOR = -6;\n  const DISPID DISPID_DESTRUCTOR  = -7;\n  const DISPID DISPID_COLLECT     = -8;\n\n  HRESULT GetTypeInfoCount(\n    [out] UINT *pctinfo);\n\n  HRESULT GetTypeInfo(\n    [in] UINT iTInfo,\n    [in] LCID lcid,\n    [out] ITypeInfo **ppTInfo);\n\n  HRESULT GetIDsOfNames(\n    [in] REFIID riid,\n    [in, size_is(cNames)] LPOLESTR *rgszNames,\n    [in] UINT cNames,\n    [in] LCID lcid,\n    [out, size_is(cNames)] DISPID *rgDispId);\n\n  [local]\n  HRESULT Invoke(\n    [in] DISPID dispIdMember,\n    [in] REFIID riid,\n    [in] LCID lcid,\n    [in] WORD wFlags,\n    [in, out] DISPPARAMS *pDispParams,\n    [out] VARIANT *pVarResult,\n    [out] EXCEPINFO *pExcepInfo,\n    [out] UINT *puArgErr);\n\n  [call_as(Invoke)]\n  HRESULT RemoteInvoke(\n    [in] DISPID dispIdMember,\n    [in] REFIID riid,\n    [in] LCID lcid,\n    [in] DWORD dwFlags,\n    [in] DISPPARAMS *pDispParams,\n    [out] VARIANT *pVarResult,\n    [out] EXCEPINFO *pExcepInfo,\n    [out] UINT *pArgErr,\n    [in] UINT cVarRef,\n    [in, size_is(cVarRef)] UINT *rgVarRefIdx,\n    [in, out, size_is(cVarRef)] VARIANTARG *rgVarRef);\n}\n\n[\n  object,\n  uuid(00020404-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IEnumVARIANT : IUnknown\n{\n  typedef [unique] IEnumVARIANT *LPENUMVARIANT;\n\n  [local]\n  HRESULT Next(\n    [in] ULONG celt,\n    [out] VARIANT *rgVar,\n    [out] ULONG *pCeltFetched);\n\n  [call_as(Next)]\n  HRESULT RemoteNext(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pCeltFetched)]\n    VARIANT *rgVar,\n    [out] ULONG *pCeltFetched);\n\n  HRESULT Skip(\n    [in] ULONG celt);\n\n  HRESULT Reset();\n\n  HRESULT Clone(\n    [out] IEnumVARIANT **ppEnum);\n}\n\n[\n  object,\n  uuid(00020403-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface ITypeComp : IUnknown\n{\n  typedef [unique] ITypeComp *LPTYPECOMP;\n\n  typedef [v1_enum] enum tagDESCKIND {\n    DESCKIND_NONE = 0,\n    DESCKIND_FUNCDESC,\n    DESCKIND_VARDESC,\n    DESCKIND_TYPECOMP,\n    DESCKIND_IMPLICITAPPOBJ,\n    DESCKIND_MAX\n  } DESCKIND;\n\n  typedef union tagBINDPTR {\n    FUNCDESC *lpfuncdesc;\n    VARDESC *lpvardesc;\n    ITypeComp *lptcomp;\n  } BINDPTR, *LPBINDPTR;\n\n  [local]\n  HRESULT Bind(\n    [in] LPOLESTR szName,\n    [in] ULONG lHashVal,\n    [in] WORD wFlags,\n    [out] ITypeInfo **ppTInfo,\n    [out] DESCKIND *pDescKind,\n    [out] BINDPTR *pBindPtr);\n\n  [call_as(Bind)]\n  HRESULT RemoteBind(\n    [in] LPOLESTR szName,\n    [in] ULONG lHashVal,\n    [in] WORD wFlags,\n    [out] ITypeInfo **ppTInfo,\n    [out] DESCKIND *pDescKind,\n    [out] LPFUNCDESC *ppFuncDesc,\n    [out] LPVARDESC *ppVarDesc,\n    [out] ITypeComp **ppTypeComp,\n    [out] CLEANLOCALSTORAGE *pDummy);\n\n  [local]\n  HRESULT BindType(\n    [in] LPOLESTR szName,\n    [in] ULONG lHashVal,\n    [out] ITypeInfo **ppTInfo,\n    [out] ITypeComp **ppTComp);\n\n  [call_as(BindType)]\n  HRESULT RemoteBindType(\n    [in] LPOLESTR szName,\n    [in] ULONG lHashVal,\n    [out] ITypeInfo **ppTInfo);\n}\n\n[\n  object,\n  uuid(00020401-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface ITypeInfo : IUnknown\n{\n  typedef [unique] ITypeInfo *LPTYPEINFO;\n\n  [local]\n  HRESULT GetTypeAttr(\n    [out] TYPEATTR **ppTypeAttr);\n\n  [call_as(GetTypeAttr)]\n  HRESULT RemoteGetTypeAttr(\n    [out] LPTYPEATTR *ppTypeAttr,\n    [out] CLEANLOCALSTORAGE *pDummy);\n\n  HRESULT GetTypeComp(\n    [out] ITypeComp **ppTComp);\n\n  [local]\n  HRESULT GetFuncDesc(\n    [in] UINT index,\n    [out] FUNCDESC **ppFuncDesc);\n\n  [call_as(GetFuncDesc)]\n  HRESULT RemoteGetFuncDesc(\n    [in] UINT index,\n    [out] LPFUNCDESC *ppFuncDesc,\n    [out] CLEANLOCALSTORAGE *pDummy);\n\n  [local]\n  HRESULT GetVarDesc(\n    [in] UINT index,\n    [out] VARDESC **ppVarDesc);\n\n  [call_as(GetVarDesc)]\n  HRESULT RemoteGetVarDesc(\n    [in] UINT index,\n    [out] LPVARDESC *ppVarDesc,\n    [out] CLEANLOCALSTORAGE *pDummy);\n\n  [local]\n  HRESULT GetNames(\n    [in] MEMBERID memid,\n    [out, size_is(cMaxNames), length_is(*pcNames)] BSTR *rgBstrNames,\n    [in] UINT cMaxNames,\n    [out] UINT *pcNames);\n\n  [call_as(GetNames)]\n  HRESULT RemoteGetNames(\n    [in] MEMBERID memid,\n    [out, size_is(cMaxNames), length_is(*pcNames)] BSTR *rgBstrNames,\n    [in] UINT cMaxNames,\n    [out] UINT *pcNames);\n\n  HRESULT GetRefTypeOfImplType(\n    [in] UINT index,\n    [out] HREFTYPE *pRefType);\n\n  HRESULT GetImplTypeFlags(\n    [in] UINT index,\n    [out] INT *pImplTypeFlags);\n\n  [local]\n  HRESULT GetIDsOfNames(\n    [in, size_is(cNames)] LPOLESTR *rgszNames,\n    [in] UINT cNames,\n    [out, size_is(cNames)] MEMBERID *pMemId);\n\n  [call_as(GetIDsOfNames)]\n  HRESULT LocalGetIDsOfNames();\n\n  [local]\n  HRESULT Invoke(\n    [in] PVOID pvInstance,\n    [in] MEMBERID memid,\n    [in] WORD wFlags,\n    [in, out] DISPPARAMS *pDispParams,\n    [out] VARIANT *pVarResult,\n    [out] EXCEPINFO *pExcepInfo,\n    [out] UINT *puArgErr);\n\n  [call_as(Invoke)]\n  HRESULT LocalInvoke();\n\n  [local]\n  HRESULT GetDocumentation(\n    [in] MEMBERID memid,\n    [out] BSTR *pBstrName,\n    [out] BSTR *pBstrDocString,\n    [out] DWORD *pdwHelpContext,\n    [out] BSTR *pBstrHelpFile);\n\n  [call_as(GetDocumentation)]\n  HRESULT RemoteGetDocumentation(\n    [in] MEMBERID memid,\n    [in] DWORD refPtrFlags,\n    [out] BSTR *pBstrName,\n    [out] BSTR *pBstrDocString,\n    [out] DWORD *pdwHelpContext,\n    [out] BSTR *pBstrHelpFile);\n\n  [local]\n  HRESULT GetDllEntry(\n    [in] MEMBERID memid,\n    [in] INVOKEKIND invKind,\n    [out] BSTR *pBstrDllName,\n    [out] BSTR *pBstrName,\n    [out] WORD *pwOrdinal);\n\n  [call_as(GetDllEntry)]\n  HRESULT RemoteGetDllEntry(\n    [in] MEMBERID memid,\n    [in] INVOKEKIND invKind,\n    [in] DWORD refPtrFlags,\n    [out] BSTR *pBstrDllName,\n    [out] BSTR *pBstrName,\n    [out] WORD *pwOrdinal);\n\n  HRESULT GetRefTypeInfo(\n    [in] HREFTYPE hRefType,\n    [out] ITypeInfo **ppTInfo);\n\n  [local]\n  HRESULT AddressOfMember(\n    [in] MEMBERID memid,\n    [in] INVOKEKIND invKind,\n    [out] PVOID *ppv);\n\n  [call_as(AddressOfMember)]\n  HRESULT LocalAddressOfMember();\n\n  [local]\n  HRESULT CreateInstance(\n    [in] IUnknown *pUnkOuter,\n    [in] REFIID riid,\n    [out, iid_is(riid)] PVOID *ppvObj);\n\n  [call_as(CreateInstance)]\n  HRESULT RemoteCreateInstance(\n    [in] REFIID riid,\n    [out, iid_is(riid)] IUnknown **ppvObj);\n\n  HRESULT GetMops(\n    [in] MEMBERID memid,\n    [out] BSTR *pBstrMops);\n\n  [local]\n  HRESULT GetContainingTypeLib(\n    [out] ITypeLib **ppTLib,\n    [out] UINT *pIndex);\n\n  [call_as(GetContainingTypeLib)]\n  HRESULT RemoteGetContainingTypeLib(\n    [out] ITypeLib **ppTLib,\n    [out] UINT *pIndex);\n\n  [local]\n  void ReleaseTypeAttr(\n    [in] TYPEATTR *pTypeAttr);\n\n  [call_as(ReleaseTypeAttr)]\n  HRESULT LocalReleaseTypeAttr();\n\n  [local]\n  void ReleaseFuncDesc(\n    [in] FUNCDESC *pFuncDesc);\n\n  [call_as(ReleaseFuncDesc)]\n  HRESULT LocalReleaseFuncDesc();\n\n  [local]\n  void ReleaseVarDesc(\n    [in] VARDESC *pVarDesc);\n\n  [call_as(ReleaseVarDesc)]\n  HRESULT LocalReleaseVarDesc();\n}\n\n[\n  object,\n  uuid(00020402-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface ITypeLib : IUnknown\n{\n  typedef [unique] ITypeLib *LPTYPELIB;\n\n  typedef [v1_enum] enum tagSYSKIND {\n    SYS_WIN16 = 0,\n    SYS_WIN32,\n    SYS_MAC,\n    SYS_WIN64\n  } SYSKIND;\n\n  typedef [v1_enum] enum tagLIBFLAGS {\n    LIBFLAG_FRESTRICTED   = 0x01,\n    LIBFLAG_FCONTROL      = 0x02,\n    LIBFLAG_FHIDDEN       = 0x04,\n    LIBFLAG_FHASDISKIMAGE = 0x08\n  } LIBFLAGS;\n\n  typedef struct tagTLIBATTR {\n    GUID guid;\n    LCID lcid;\n    SYSKIND syskind;\n    WORD wMajorVerNum;\n    WORD wMinorVerNum;\n    WORD wLibFlags;\n  } TLIBATTR, *LPTLIBATTR;\n\n  [local]\n  UINT GetTypeInfoCount();\n\n  [call_as(GetTypeInfoCount)]\n  HRESULT RemoteGetTypeInfoCount(\n    [out] UINT *pcTInfo);\n\n  HRESULT GetTypeInfo(\n    [in] UINT index,\n    [out] ITypeInfo **ppTInfo);\n\n  HRESULT GetTypeInfoType(\n    [in] UINT index,\n    [out] TYPEKIND *pTKind);\n\n  HRESULT GetTypeInfoOfGuid(\n    [in] REFGUID guid,\n    [out] ITypeInfo **ppTinfo);\n\n  [local]\n  HRESULT GetLibAttr(\n    [out] TLIBATTR **ppTLibAttr);\n\n  [call_as(GetLibAttr)]\n  HRESULT RemoteGetLibAttr(\n    [out] LPTLIBATTR *ppTLibAttr,\n    [out] CLEANLOCALSTORAGE *pDummy);\n\n  HRESULT GetTypeComp(\n    [out] ITypeComp **ppTComp);\n\n  [local]\n  HRESULT GetDocumentation(\n    [in] INT index,\n    [out] BSTR *pBstrName,\n    [out] BSTR *pBstrDocString,\n    [out] DWORD *pdwHelpContext,\n    [out] BSTR *pBstrHelpFile);\n\n  [call_as(GetDocumentation)]\n  HRESULT RemoteGetDocumentation(\n    [in] INT index,\n    [in] DWORD refPtrFlags,\n    [out] BSTR *pBstrName,\n    [out] BSTR *pBstrDocString,\n    [out] DWORD *pdwHelpContext,\n    [out] BSTR *pBstrHelpFile);\n\n  [local]\n  HRESULT IsName(\n    [in, out] LPOLESTR szNameBuf,\n    [in] ULONG lHashVal,\n    [out] BOOL *pfName);\n\n  [call_as(IsName)]\n  HRESULT RemoteIsName(\n    [in] LPOLESTR szNameBuf,\n    [in] ULONG lHashVal,\n    [out] BOOL *pfName,\n    [out] BSTR *pBstrLibName);\n\n  [local]\n  HRESULT FindName(\n    [in, out] LPOLESTR szNameBuf,\n    [in] ULONG lHashVal,\n    [out, size_is(*pcFound), length_is(*pcFound)] ITypeInfo **ppTInfo,\n    [out, size_is(*pcFound), length_is(*pcFound)] MEMBERID *rgMemId,\n    [in, out] USHORT *pcFound);\n\n  [call_as(FindName)]\n  HRESULT RemoteFindName(\n    [in] LPOLESTR szNameBuf,\n    [in] ULONG lHashVal,\n    [out, size_is(*pcFound), length_is(*pcFound)] ITypeInfo **ppTInfo,\n    [out, size_is(*pcFound), length_is(*pcFound)] MEMBERID *rgMemId,\n    [in, out] USHORT *pcFound,\n    [out] BSTR *pBstrLibName);\n\n  [local]\n  void ReleaseTLibAttr(\n    [in] TLIBATTR *pTLibAttr);\n\n  [call_as(ReleaseTLibAttr)]\n  HRESULT LocalReleaseTLibAttr();\n}\n\n\n[\n  object,\n  uuid(1CF2B120-547D-101B-8E65-08002B2BD119),\n  pointer_default(unique)\n]\ninterface IErrorInfo : IUnknown\n{\n  typedef [unique] IErrorInfo *LPERRORINFO;\n\n  HRESULT GetGUID(\n    [out] GUID *pGUID);\n\n  HRESULT GetSource(\n    [out] BSTR *pBstrSource);\n\n  HRESULT GetDescription(\n    [out] BSTR *pBstrDescription);\n\n  HRESULT GetHelpFile(\n    [out] BSTR *pBstrHelpFile);\n\n  HRESULT GetHelpContext(\n    [out] DWORD *pdwHelpContext);\n}\n\n[\n  object,\n  uuid(22F03340-547D-101B-8E65-08002B2BD119),\n  pointer_default(unique)\n]\ninterface ICreateErrorInfo : IUnknown\n{\n  typedef [unique] ICreateErrorInfo *LPCREATEERRORINFO;\n\n  HRESULT SetGUID(\n    [in] REFGUID rguid);\n\n  HRESULT SetSource(\n    [in] LPOLESTR szSource);\n\n  HRESULT SetDescription(\n    [in] LPOLESTR szDescription);\n\n  HRESULT SetHelpFile(\n    [in] LPOLESTR szHelpFile);\n\n  HRESULT SetHelpContext(\n    [in] DWORD dwHelpContext);\n}\n\n[\n  object,\n  uuid(DF0B3D60-548F-101B-8E65-08002B2BD119),\n  pointer_default(unique)\n]\ninterface ISupportErrorInfo : IUnknown\n{\n  typedef [unique] ISupportErrorInfo *LPSUPPORTERRORINFO;\n\n  HRESULT InterfaceSupportsErrorInfo(\n    [in] REFIID riid);\n}\n\n[\n  object,\n  uuid(0000002E-0000-0000-C000-000000000046)\n]\ninterface ITypeFactory : IUnknown\n{\n  HRESULT CreateFromTypeInfo(\n    [in] ITypeInfo *pTypeInfo,\n    [in] REFIID riid,\n    [out, iid_is(riid)] IUnknown **ppv);\n}\n\n[\n  local,\n  object,\n  uuid(00020405-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface ICreateTypeInfo : IUnknown\n{\n  typedef [unique] ICreateTypeInfo *LPCREATETYPEINFO;\n\n  HRESULT SetGuid(\n    [in] REFGUID guid);\n\n  HRESULT SetTypeFlags(\n    [in] UINT uTypeFlags);\n\n  HRESULT SetDocString(\n    [in] LPOLESTR pStrDoc);\n\n  HRESULT SetHelpContext(\n    [in] DWORD dwHelpContext);\n\n  HRESULT SetVersion(\n    [in] WORD wMajorVerNum,\n    [in] WORD wMinorVerNum);\n\n  HRESULT AddRefTypeInfo(\n    [in] ITypeInfo *pTInfo,\n    [in] HREFTYPE *phRefType);\n\n  HRESULT AddFuncDesc(\n    [in] UINT index,\n    [in] FUNCDESC *pFuncDesc);\n\n  HRESULT AddImplType(\n    [in] UINT index,\n    [in] HREFTYPE hRefType);\n\n  HRESULT SetImplTypeFlags(\n    [in] UINT index,\n    [in] INT implTypeFlags);\n\n  HRESULT SetAlignment(\n    [in] WORD cbAlignment);\n\n  HRESULT SetSchema(\n    [in] LPOLESTR pStrSchema);\n\n  HRESULT AddVarDesc(\n    [in] UINT index,\n    [in] VARDESC *pVarDesc);\n\n  HRESULT SetFuncAndParamNames(\n    [in] UINT index,\n    [in, size_is(cNames)] LPOLESTR *rgszNames,\n    [in] UINT cNames);\n\n  HRESULT SetVarName(\n    [in] UINT index,\n    [in] LPOLESTR szName);\n\n  HRESULT SetTypeDescAlias(\n    [in] TYPEDESC *pTDescAlias);\n\n  HRESULT DefineFuncAsDllEntry(\n    [in] UINT index,\n    [in] LPOLESTR szDllName,\n    [in] LPOLESTR szProcName);\n\n  HRESULT SetFuncDocString(\n    [in] UINT index,\n    [in] LPOLESTR szDocString);\n\n  HRESULT SetVarDocString(\n    [in] UINT index,\n    [in] LPOLESTR szDocString);\n\n  HRESULT SetFuncHelpContext(\n    [in] UINT index,\n    [in] DWORD dwHelpContext);\n\n  HRESULT SetVarHelpContext(\n    [in] UINT index,\n    [in] DWORD dwHelpContext);\n\n  HRESULT SetMops(\n    [in] UINT index,\n    [in] BSTR bstrMops);\n\n  HRESULT SetTypeIdldesc(\n    [in] IDLDESC * pIdlDesc);\n\n  HRESULT LayOut();\n}\n\n[\n  local,\n  object,\n  uuid(0002040E-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface ICreateTypeInfo2 : ICreateTypeInfo\n{\n  typedef [unique] ICreateTypeInfo2 *LPCREATETYPEINFO2;\n\n  HRESULT DeleteFuncDesc(\n    [in] UINT index);\n\n  HRESULT DeleteFuncDescByMemId(\n    [in] MEMBERID memid,\n    [in] INVOKEKIND invKind);\n\n  HRESULT DeleteVarDesc(\n    [in] UINT index);\n\n  HRESULT DeleteVarDescByMemId(\n    [in] MEMBERID memid);\n\n  HRESULT DeleteImplType(\n    [in] UINT index);\n\n  HRESULT SetCustData(\n    [in] REFGUID guid,\n    [in] VARIANT *pVarVal);\n\n  HRESULT SetFuncCustData( \n    [in] UINT index, \n    [in] REFGUID guid, \n    [in] VARIANT *pVarVal);\n  \n  HRESULT SetParamCustData( \n    [in] UINT indexFunc, \n    [in] UINT indexParam, \n    [in] REFGUID guid, \n    [in] VARIANT *pVarVal);\n\n  HRESULT SetVarCustData( \n    [in] UINT index, \n    [in] REFGUID guid, \n    [in] VARIANT *pVarVal);\n\n  HRESULT SetImplTypeCustData( \n    [in] UINT index, \n    [in] REFGUID guid, \n    [in] VARIANT *pVarVal);\n\n  HRESULT SetHelpStringContext(\n    [in] ULONG dwHelpStringContext);\n\n  HRESULT SetFuncHelpStringContext(\n    [in] UINT index,\n    [in] ULONG dwHelpStringContext);\n\n  HRESULT SetVarHelpStringContext(\n    [in] UINT index,\n    [in] ULONG dwHelpStringContext);\n\n  HRESULT Invalidate();\n\n  HRESULT SetName(\n    [in] LPOLESTR szName);\n}\n\n[\n  local,\n  object,\n  uuid(00020406-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface ICreateTypeLib : IUnknown\n{\n  typedef [unique] ICreateTypeLib *LPCREATETYPELIB;\n\n  HRESULT CreateTypeInfo(\n    [in] LPOLESTR szName,\n    [in] TYPEKIND tkind,\n    [out] ICreateTypeInfo **ppCTInfo);\n\n  HRESULT SetName(\n    [in] LPOLESTR szName);\n\n  HRESULT SetVersion(\n    [in] WORD wMajorVerNum,\n    [in] WORD wMinorVerNum);\n\n  HRESULT SetGuid(\n    [in] REFGUID guid);\n\n  HRESULT SetDocString(\n    [in] LPOLESTR szDoc);\n\n  HRESULT SetHelpFileName(\n    [in] LPOLESTR szHelpFileName);\n\n  HRESULT SetHelpContext(\n    [in] DWORD dwHelpContext);\n\n  HRESULT SetLcid(\n    [in] LCID lcid);\n\n  HRESULT SetLibFlags(\n    [in] UINT uLibFlags);\n\n  HRESULT SaveAllChanges();\n}\n\n[\n  local,\n  object,\n  uuid(0002040F-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface ICreateTypeLib2 : ICreateTypeLib\n{\n  typedef [unique] ICreateTypeLib2 *LPCREATETYPELIB2;\n\n  HRESULT DeleteTypeInfo(\n    [in] LPOLESTR szName);\n\n  HRESULT SetCustData(\n    [in] REFGUID guid,\n    [in] VARIANT *pVarVal);\n\n  HRESULT SetHelpStringContext(\n    [in] ULONG dwHelpStringContext);\n\n  HRESULT SetHelpStringDll(\n    [in] LPOLESTR szFileName);\n}\n\n\n/*****************************************************************************\n * IErrorLog interface\n */\n[\n  object,\n  uuid(3127ca40-446e-11ce-8135-00aa004bb851),\n  pointer_default(unique)\n]\ninterface IErrorLog : IUnknown\n{\n  typedef IErrorLog *LPERRORLOG;\n\n  HRESULT AddError(\n    [in] LPCOLESTR pszPropName,\n    [in] EXCEPINFO *pExcepInfo);\n}\n\n\n/*****************************************************************************\n * IPropertyBag interface\n */\n[\n  object,\n  uuid(55272a00-42cb-11ce-8135-00aa004bb851),\n  pointer_default(unique)\n]\ninterface IPropertyBag : IUnknown\n{\n  typedef IPropertyBag *LPPROPERTYBAG;\n\n  [local]\n  HRESULT Read(\n    [in] LPCOLESTR pszPropName,\n    [in, out] VARIANT *pVar,\n    [in] IErrorLog *pErrorLog);\n\n  [call_as(Read)]\n  HRESULT RemoteRead(\n    [in] LPCOLESTR pszPropName,\n    [out] VARIANT *pVar,\n    [in] IErrorLog *pErrorLog,\n    [in] DWORD varType,\n    [in] IUnknown *pUnkObj);\n\n  HRESULT Write(\n    [in] LPCOLESTR pszPropName,\n    [in] VARIANT *pVar);\n}\n\n/*\n * Copyright (C) 1999 Paul Quinn\n * Copyright (C) 1999 Francis Beaudet\n * Copyright (C) 2003 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef DO_NO_IMPORTS\n//import \"oleidl.idl\";\n//import \"../wine/windows/oaidl.idl\";\n//import \"../wine/windows/servprov.idl\";\n//import \"../wine/windows/urlmon.idl\";\n#endif\n\n/*****************************************************************************\n * IOleControlTypes interface\n */\n[\n    pointer_default(unique)\n]\ninterface IOleControlTypes\n{\n    typedef [v1_enum] enum tagUASFLAGS\n    {\n        UAS_NORMAL       = 0x0,\n        UAS_BLOCKED      = 0x1,\n        UAS_NOPARENTABLE = 0x2,\n        UAS_MASK         = 0x3\n    } UASFLAGS;\n\n    typedef enum tagREADYSTATE\n    {\n        READYSTATE_UNINITIALIZED  = 0,\n        READYSTATE_LOADING  = 1,\n        READYSTATE_LOADED = 2,\n        READYSTATE_INTERACTIVE  = 3,\n        READYSTATE_COMPLETE = 4\n    } READYSTATE;\n\n    typedef struct tagVARIANT_BLOB\n    {\n        DWORD clSize;\n        DWORD rpcReserved;\n        [size_is(clSize-1)] ULONGLONG ahData[];\n    } wireVARIANT_BLOB;\n\n    typedef struct tagUserVARIANT\n    {\n      wireVARIANT_BLOB pVarBlob;\n    } UserVARIANT;\n}\n\n\n/*****************************************************************************\n * IFont interface\n */\n[\n    object,\n    uuid(bef6e002-a874-101a-8bba-00aa00300cab),\n    pointer_default(unique)\n]\ninterface IFont : IUnknown\n{\n    typedef IFont *LPFONT;\n    typedef TEXTMETRICW TEXTMETRICOLE, *LPTEXTMETRICOLE;\n\n    [propget] HRESULT Name( [out] BSTR *pname);\n    [propput] HRESULT Name( [in] BSTR name );\n    [propget] HRESULT Size( [out] CY *psize );\n    [propput] HRESULT Size( [in] CY size );\n    [propget] HRESULT Bold( [out] BOOL *pbold );\n    [propput] HRESULT Bold( [in] BOOL bold );\n    [propget] HRESULT Italic( [out] BOOL *pitalic );\n    [propput] HRESULT Italic( [in] BOOL italic );\n    [propget] HRESULT Underline( [out] BOOL *punderline );\n    [propput] HRESULT Underline( [in] BOOL underline );\n    [propget] HRESULT Strikethrough( [out] BOOL *pstrikethrough );\n    [propput] HRESULT Strikethrough( [in] BOOL strikethrough );\n    [propget] HRESULT Weight( [out] SHORT *pweight );\n    [propput] HRESULT Weight( [in] SHORT weight );\n    [propget] HRESULT Charset( [out] SHORT *pcharset );\n    [propput] HRESULT Charset( [in] SHORT charset );\n    [propget] HRESULT hFont( [out] HFONT *phfont );\n    HRESULT Clone( [out] IFont **ppfont );\n    HRESULT IsEqual( [in] IFont *pFontOther );\n    HRESULT SetRatio( [in] LONG cyLogical, [in] LONG cyHimetric );\n    HRESULT QueryTextMetrics( [out] TEXTMETRICOLE * ptm );\n    HRESULT AddRefHfont( [in] HFONT hfont );\n    HRESULT ReleaseHfont( [in] HFONT hfont );\n    HRESULT SetHdc( [in] HDC hdc );\n}\n\n\n/*****************************************************************************\n * IFontDisp interface\n */\n[\n    object,\n    uuid(bef6e003-a874-101a-8bba-00aa00300cab),\n    pointer_default(unique)\n]\ninterface IFontDisp : IDispatch\n{\n    typedef IFontDisp *LPFONTDISP;\n}\n\n\n/*****************************************************************************\n * IFontEventsDisp interface\n */\n[\n    object,\n    uuid(4ef6100a-af88-11d0-9846-00c04fc29993),\n    pointer_default(unique)\n]\ninterface IFontEventsDisp : IDispatch\n{\n    typedef IFontEventsDisp *LPFONTEVENTS;\n}\n\n\n/*****************************************************************************\n * IPicture interface\n */\n[\n    object,\n    uuid(7bf80980-bf32-101a-8bbb-00aa00300cab),\n    pointer_default(unique)\n]\ninterface IPicture : IUnknown\n{\n    typedef IPicture *LPPICTURE;\n\n    typedef enum tagPicture\n    {\n        PICTURE_SCALABLE = 0x1,\n        PICTURE_TRANSPARENT = 0x2\n    } PICTUREATTRIBUTES;\n\n    typedef UINT OLE_HANDLE;\n    typedef LONG OLE_XPOS_HIMETRIC;\n    typedef LONG OLE_YPOS_HIMETRIC;\n    typedef LONG OLE_XSIZE_HIMETRIC;\n    typedef LONG OLE_YSIZE_HIMETRIC;\n\n    [propget] HRESULT Handle( [out] OLE_HANDLE *pHandle );\n    [propget] HRESULT hPal( [out] OLE_HANDLE *phPal );\n    [propget] HRESULT Type( [out] SHORT *pType );\n    [propget] HRESULT Width( [out] OLE_XSIZE_HIMETRIC *pWidth );\n    [propget] HRESULT Height( [out] OLE_YSIZE_HIMETRIC *pHeight );\n\n    HRESULT Render(\n        [in] HDC hdc,\n        [in] LONG x,\n        [in] LONG y,\n        [in] LONG cx,\n        [in] LONG cy,\n        [in] OLE_XPOS_HIMETRIC xSrc,\n        [in] OLE_YPOS_HIMETRIC ySrc,\n        [in] OLE_XSIZE_HIMETRIC cxSrc,\n        [in] OLE_YSIZE_HIMETRIC cySrc,\n        [in] LPCRECT pRcWBounds);\n\n    HRESULT set_hPal( [in] OLE_HANDLE hPal );\n\n    [propget] HRESULT CurDC( [out] HDC *phDC );\n\n    HRESULT SelectPicture(\n        [in] HDC hDCIn,\n        [out] HDC * phDCOut,\n        [out] OLE_HANDLE * phBmpOut);\n\n    [propget] HRESULT KeepOriginalFormat( [out] BOOL *pKeep );\n\n    [propput] HRESULT KeepOriginalFormat( [in] BOOL keep );\n\n    HRESULT PictureChanged();\n\n    HRESULT SaveAsFile(\n        [in] LPSTREAM pStream,\n        [in] BOOL fSaveMemCopy,\n        [out] LONG *pCbSize);\n\n    [propget] HRESULT Attributes( [out] DWORD *pDwAttr );\n}\n\n\n/*****************************************************************************\n * IPictureDisp interface\n */\n[\n    object,\n    uuid(7bf80981-bf32-101a-8bbb-00aa00300cab),\n    pointer_default(unique)\n]\ninterface IPictureDisp : IDispatch\n{\n    typedef IPictureDisp *LPPICTUREDISP;\n}\n\n\n/*****************************************************************************\n * IOleControl interface\n */\n[\n    object,\n    uuid(b196b288-bab4-101a-b69c-00aa00341d07),\n    pointer_default(unique)\n]\n\ninterface IOleControl : IUnknown\n{\n    typedef IOleControl *LPOLECONTROL;\n\n    typedef struct tagCONTROLINFO\n    {\n        ULONG cb;\n        HACCEL hAccel;\n        USHORT cAccel;\n        DWORD dwFlags;\n    } CONTROLINFO, *LPCONTROLINFO;\n\n    typedef enum tagCTRLINFO\n    {\n        CTRLINFO_EATS_RETURN = 1,\n        CTRLINFO_EATS_ESCAPE = 2\n    } CTRLINFO;\n\n    HRESULT GetControlInfo( [out] CONTROLINFO *pCI );\n    HRESULT OnMnemonic( [in] MSG *pMsg );\n    HRESULT OnAmbientPropertyChange( [in] DISPID dispID );\n    HRESULT FreezeEvents( [in] BOOL bFreeze );\n}\n\n\n/*****************************************************************************\n * IOleControlSite interface\n */\n[\n    object,\n    uuid(b196b289-bab4-101a-b69c-00aa00341d07),\n    pointer_default(unique)\n]\ninterface IOleControlSite : IUnknown\n{\n    typedef IOleControlSite *LPOLECONTROLSITE;\n\n    typedef struct tagPOINTF\n    {\n        FLOAT x;\n        FLOAT y;\n    } POINTF, *LPPOINTF;\n\n    typedef enum tagXFORMCOORDS\n    {\n\tXFORMCOORDS_POSITION = 0x1,\n\tXFORMCOORDS_SIZE = 0x2,\n\tXFORMCOORDS_HIMETRICTOCONTAINER = 0x4,\n\tXFORMCOORDS_CONTAINERTOHIMETRIC = 0x8,\n        XFORMCOORDS_EVENTCOMPAT = 0x10\n    } XFORMCOORDS;\n\n    HRESULT OnControlInfoChanged();\n\n    HRESULT LockInPlaceActive( [in] BOOL fLock );\n\n    HRESULT GetExtendedControl( [out] IDispatch ** ppDisp );\n\n    HRESULT TransformCoords(\n        [in, out] POINTL *pPtlHimetric,\n        [in, out] POINTF *pPtfContainer,\n        [in] DWORD dwFlags);\n\n    HRESULT TranslateAccelerator( [in] MSG *pMsg, [in] DWORD grfModifiers );\n\n    HRESULT OnFocus( [in] BOOL fGotFocus );\n\n    HRESULT ShowPropertyFrame();\n}\n\n\n/*****************************************************************************\n * IOleInPlaceSiteEx interface\n */\n[\n    object,\n    uuid(9c2cad80-3424-11cf-b670-00aa004cd6d8),\n    pointer_default(unique)\n]\ninterface IOleInPlaceSiteEx : IOleInPlaceSite\n{\n    typedef IOleInPlaceSiteEx *LPOLEINPLACESITEEX;\n\n    typedef enum tagACTIVATEFLAGS\n    {\n        ACTIVATE_WINDOWLESS = 1\n    } ACTIVATE_FLAGS;\n\n    HRESULT OnInPlaceActivateEx( [out] BOOL * pfNoRedraw, [in] DWORD dwFlags );\n    HRESULT OnInPlaceDeactivateEx( [in] BOOL fNoRedraw );\n    HRESULT RequestUIActivate();\n}\n\n\n/*****************************************************************************\n * IOleInPlaceSiteWindowless interface\n */\n[\n    local,\n    object,\n    uuid(922eada0-3424-11cf-b670-00aa004cd6d8),\n    pointer_default(unique)\n]\ninterface IOleInPlaceSiteWindowless : IOleInPlaceSiteEx\n{\n    typedef IOleInPlaceSiteWindowless *LPOLEINPLACESITEWINDOWLESS;\n\n    typedef enum tagOLEDCFLAGS\n    {\n        OLEDC_NODRAW = 0x1,\n        OLEDC_PAINTBKGND = 0x2,\n        OLEDC_OFFSCREEN = 0x4\n    } OLEDCFLAGS;\n\n    HRESULT CanWindowlessActivate();\n\n    HRESULT GetCapture();\n\n    HRESULT SetCapture( [in] BOOL fCapture );\n\n    HRESULT GetFocus();\n\n    HRESULT SetFocus( [in] BOOL fFocus );\n\n    HRESULT GetDC(\n        [in] LPCRECT pRect,\n        [in] DWORD grfFlags,\n        [out] HDC *phDC);\n\n    HRESULT ReleaseDC( [in] HDC hDC );\n\n    HRESULT InvalidateRect(\n        [in] LPCRECT pRect,\n        [in] BOOL fErase);\n\n    HRESULT InvalidateRgn(\n        [in] HRGN hRGN,\n        [in] BOOL fErase);\n\n    HRESULT ScrollRect(\n        [in] INT dx,\n        [in] INT dy,\n        [in] LPCRECT pRectScroll,\n        [in] LPCRECT pRectClip);\n\n    HRESULT AdjustRect( [in, out] LPRECT prc );\n\n    HRESULT OnDefWindowMessage(\n        [in] UINT msg,\n        [in] WPARAM wParam,\n        [in] LPARAM lParam,\n        [out] LRESULT *plResult);\n}\n\n\n/*****************************************************************************\n * IOleInPlaceObjectWindowless interface\n */\n[\n    local,\n    object,\n    uuid(1c2056cc-5ef4-101b-8bc8-00aa003e3b29),\n    pointer_default(unique)\n]\ninterface IOleInPlaceObjectWindowless : IOleInPlaceObject\n{\n    typedef IOleInPlaceObjectWindowless *LPOLEINPLACEOBJECTWINDOWLESS;\n\n    HRESULT OnWindowMessage(\n        [in] UINT msg,\n        [in] WPARAM wParam,\n        [in] LPARAM lParam,\n        [out] LRESULT *plResult);\n\n    HRESULT GetDropTarget( [out] IDropTarget **ppDropTarget );\n}\n\n\n/*****************************************************************************\n * IClassFactory2 interface\n */\n[\n    object,\n    uuid(b196b28f-bab4-101a-b69c-00aa00341d07),\n    pointer_default(unique)\n]\ninterface IClassFactory2 : IClassFactory\n{\n    typedef IClassFactory2 *LPCLASSFACTORY2;\n\n    typedef struct tagLICINFO\n    {\n        LONG cbLicInfo;\n        BOOL fRuntimeKeyAvail;\n        BOOL fLicVerified;\n    } LICINFO, *LPLICINFO;\n\n    HRESULT GetLicInfo( [out] LICINFO *pLicInfo );\n\n    HRESULT RequestLicKey(\n        [in] DWORD dwReserved,\n        [out] BSTR *pBstrKey);\n\n    [local]\n    HRESULT CreateInstanceLic(\n        [in] IUnknown *pUnkOuter,\n        [in] IUnknown *pUnkReserved,\n        [in] REFIID riid,\n        [in] BSTR bstrKey,\n        [out, iid_is(riid)] PVOID *ppvObj);\n\n    [call_as(CreateInstanceLic)]\n    HRESULT RemoteCreateInstanceLic(\n        [in] REFIID riid,\n        [in] BSTR bstrKey,\n        [out, iid_is(riid)] IUnknown **ppvObj);\n}\n\n\n/*****************************************************************************\n * IViewObject interface\n */\n[\n    local,\n    object,\n    uuid(3af24292-0c96-11ce-a0cf-00aa00600ab8),\n    pointer_default(unique)\n]\ninterface IViewObjectEx : IViewObject2\n{\n    typedef IViewObjectEx *LPVIEWOBJECTEX;\n\n    typedef enum tagVIEWSTATUS\n    {\n        VIEWSTATUS_OPAQUE = 1,\n        VIEWSTATUS_SOLIDBKGND = 2,\n        VIEWSTATUS_DVASPECTOPAQUE = 4,\n        VIEWSTATUS_DVASPECTTRANSPARENT = 8,\n        VIEWSTATUS_SURFACE = 16,\n        VIEWSTATUS_3DSURFACE = 32\n    } VIEWSTATUS;\n\n    typedef enum tagHITRESULT\n    {\n        HITRESULT_OUTSIDE = 0,\n        HITRESULT_TRANSPARENT = 1,\n        HITRESULT_CLOSE = 2,\n        HITRESULT_HIT = 3\n    } HITRESULT;\n\n    typedef enum tagDVASPECT2\n    {\n        DVASPECT_OPAQUE = 16,\n        DVASPECT_TRANSPARENT = 32\n    } DVASPECT2;\n\n    typedef struct tagExtentInfo\n    {\n        ULONG cb;\n        DWORD dwExtentMode;\n        SIZEL sizelProposed;\n    } DVEXTENTINFO;\n\n    typedef enum tagAspectInfoFlag\n    {\n        DVASPECTINFOFLAG_CANOPTIMIZE = 1\n    } DVASPECTINFOFLAG;\n\n    typedef struct tagAspectInfo\n    {\n        ULONG cb;\n        DWORD dwFlags;\n    } DVASPECTINFO;\n\n    HRESULT GetRect(\n        [in] DWORD dwAspect,\n        [out] LPRECTL pRect);\n\n    HRESULT GetViewStatus( [out] DWORD *pdwStatus );\n\n    HRESULT QueryHitPoint(\n        [in] DWORD dwAspect,\n        [in] LPCRECT pRectBounds,\n        [in] POINT ptlLoc,\n        [in] LONG lCloseHint,\n        [out] DWORD *pHitResult);\n\n    HRESULT QueryHitRect(\n        [in] DWORD dwAspect,\n        [in] LPCRECT pRectBounds,\n        [in] LPCRECT pRectLoc,\n        [in] LONG lCloseHint,\n        [out] DWORD *pHitResult);\n\n    HRESULT GetNaturalExtent (\n        [in] DWORD dwAspect,\n        [in] LONG lindex,\n        [in] DVTARGETDEVICE *ptd,\n        [in] HDC hicTargetDev,\n        [in] DVEXTENTINFO *pExtentInfo,\n        [out] LPSIZEL pSizel);\n}\n\n\n/*****************************************************************************\n * IProvideClassInfo interface\n */\n[\n    object,\n    uuid(b196b283-bab4-101a-b69c-00aa00341d07),\n    pointer_default(unique)\n]\ninterface IProvideClassInfo : IUnknown\n{\n    typedef IProvideClassInfo *LPPROVIDECLASSINFO;\n\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef GetClassInfo\")\ncpp_quote(\"#endif\")\n\n    HRESULT GetClassInfo( [out] ITypeInfo ** ppTI );\n}\n\n\n/*****************************************************************************\n * IProvideClassInfo2 interface\n */\n[\n    object,\n    uuid(a6bc3ac0-dbaa-11ce-9de3-00aa004bb851),\n    pointer_default(unique)\n]\ninterface IProvideClassInfo2 : IProvideClassInfo\n{\n    typedef IProvideClassInfo2 *LPPROVIDECLASSINFO2;\n\n    typedef enum tagGUIDKIND\n    {\n        GUIDKIND_DEFAULT_SOURCE_DISP_IID = 1\n    } GUIDKIND;\n\n    HRESULT GetGUID(\n        [in]  DWORD dwGuidKind,\n        [out] GUID *pGUID );\n}\n\n\n[\n    object,\n    uuid(a7aba9c1-8983-11cf-8f20-00805f2cd064),\n    pointer_default(unique)\n]\ninterface IProvideMultipleClassInfo : IProvideClassInfo2\n{\n    cpp_quote(\"#define MULTICLASSINFO_GETTYPEINFO           0x00000001\")\n    cpp_quote(\"#define MULTICLASSINFO_GETNUMRESERVEDDISPIDS 0x00000002\")\n    cpp_quote(\"#define MULTICLASSINFO_GETIIDPRIMARY         0x00000004\")\n    cpp_quote(\"#define MULTICLASSINFO_GETIIDSOURCE          0x00000008\")\n\n    cpp_quote(\"#define TIFLAGS_EXTENDDISPATCHONLY           0x00000001\")\n\n    typedef IProvideMultipleClassInfo *LPPROVIDEMULTIPLECLASSINFO;\n\n    HRESULT GetMultiTypeInfoCount( \n        [out] ULONG *pcti);\n\n    HRESULT GetInfoOfIndex( \n        [in] ULONG iti,\n        [in] DWORD dwFlags,\n        [out] ITypeInfo **pptiCoClass,\n        [out] DWORD *pdwTIFlags,\n        [out] ULONG *pcdispidReserved,\n        [out] IID *piidPrimary,\n        [out] IID *piidSource);\n}\n\n\n/*****************************************************************************\n * IConnectionPoint interface\n */\ninterface IConnectionPointContainer; /* forward declarations */\ninterface IEnumConnections;\n\n[\n    object,\n    uuid(b196b286-bab4-101a-b69c-00aa00341d07),\n    pointer_default(unique)\n]\ninterface IConnectionPoint : IUnknown\n{\n    typedef IConnectionPoint *PCONNECTIONPOINT, *LPCONNECTIONPOINT;\n\n    HRESULT GetConnectionInterface( [out] IID *pIID );\n    HRESULT GetConnectionPointContainer( [out] IConnectionPointContainer **ppCPC );\n    HRESULT Advise( [in] IUnknown *pUnkSink, [out] DWORD *pdwCookie );\n    HRESULT Unadvise( [in] DWORD dwCookie );\n    HRESULT EnumConnections( [out] IEnumConnections **ppEnum );\n}\n\n\n/*****************************************************************************\n * IConnectionPointContainer interface\n */\ninterface IEnumConnectionPoints; /* forward declaration */\n[\n    object,\n    uuid(b196b284-bab4-101a-b69c-00aa00341d07),\n    pointer_default(unique)\n]\ninterface IConnectionPointContainer : IUnknown\n{\n    typedef IConnectionPointContainer *PCONNECTIONPOINTCONTAINER, *LPCONNECTIONPOINTCONTAINER;\n\n    HRESULT EnumConnectionPoints( [out] IEnumConnectionPoints **ppEnum );\n    HRESULT FindConnectionPoint( [in] REFIID riid, [out] IConnectionPoint **ppCP );\n}\n\n\n/*****************************************************************************\n * IEnumConnections interface\n */\n[\n    object,\n    uuid(b196b287-bab4-101a-b69c-00aa00341d07),\n    pointer_default(unique)\n]\ninterface IEnumConnections : IUnknown\n{\n    typedef IEnumConnections *PENUMCONNECTIONS, *LPENUMCONNECTIONS;\n\n    typedef struct tagCONNECTDATA\n    {\n        IUnknown *pUnk;\n        DWORD dwCookie;\n    } CONNECTDATA, *PCONNECTDATA, *LPCONNECTDATA;\n\n    [local]\n    HRESULT Next(\n        [in] ULONG cConnections,\n        [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTDATA rgcd,\n        [out] ULONG *pcFetched);\n\n    [call_as(Next)]\n    HRESULT RemoteNext(\n        [in] ULONG cConnections,\n        [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTDATA rgcd,\n        [out] ULONG *pcFetched);\n\n    HRESULT Skip( [in] ULONG cConnections );\n\n    HRESULT Reset();\n\n    HRESULT Clone( [out] IEnumConnections **ppEnum );\n}\n\n\n/*****************************************************************************\n * IEnumConnectionPoints interface\n */\n[\n    object,\n    uuid(b196b285-bab4-101a-b69c-00aa00341d07),\n    pointer_default(unique)\n]\ninterface IEnumConnectionPoints : IUnknown\n{\n    typedef IEnumConnectionPoints *PENUMCONNECTIONPOINTS, *LPENUMCONNECTIONPOINTS;\n\n    [local]\n    HRESULT Next(\n        [in] ULONG cConnections,\n        [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTIONPOINT *ppCP,\n        [out] ULONG *pcFetched);\n\n    [call_as(Next)]\n    HRESULT RemoteNext(\n        [in] ULONG cConnections,\n        [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTIONPOINT *ppCP,\n        [out] ULONG *pcFetched);\n\n    HRESULT Skip( [in] ULONG cConnections );\n\n    HRESULT Reset();\n\n    HRESULT Clone( [out] IEnumConnectionPoints **ppEnum );\n}\n\n\n/*****************************************************************************\n * IPropertyPage interface\n */\ninterface IPropertyPageSite;  /* forward declaration */\n[\n    object,\n    uuid(b196b28d-bab4-101a-b69c-00aa00341d07),\n    pointer_default(unique)\n]\ninterface IPropertyPage : IUnknown\n{\n    typedef IPropertyPage *LPPROPERTYPAGE;\n\n    typedef struct tagPROPPAGEINFO\n    {\n        ULONG cb;\n        LPOLESTR pszTitle;\n        SIZE size;\n        LPOLESTR pszDocString;\n        LPOLESTR pszHelpFile;\n        DWORD dwHelpContext;\n    } PROPPAGEINFO, *LPPROPPAGEINFO;\n\n    HRESULT SetPageSite( [in] IPropertyPageSite *pPageSite );\n\n    HRESULT Activate(\n        [in] HWND hWndParent,\n        [in] LPCRECT pRect,\n        [in] BOOL bModal);\n\n    HRESULT Deactivate();\n\n    HRESULT GetPageInfo( [out] PROPPAGEINFO *pPageInfo );\n\n    HRESULT SetObjects(\n        [in] ULONG cObjects,\n        [in, size_is(cObjects)] IUnknown **ppUnk);\n\n    HRESULT Show( [in] UINT nCmdShow );\n\n    HRESULT Move( [in] LPCRECT pRect );\n\n    HRESULT IsPageDirty();\n\n    HRESULT Apply();\n\n    HRESULT Help( [in] LPCOLESTR pszHelpDir );\n\n    HRESULT TranslateAccelerator( [in] MSG *pMsg );\n}\n\n\n/*****************************************************************************\n * IPropertyPage2 interface\n */\n[\n    object,\n    uuid(01e44665-24ac-101b-84ed-08002b2ec713),\n    pointer_default(unique)\n]\ninterface IPropertyPage2 : IPropertyPage\n{\n    typedef IPropertyPage2 *LPPROPERTYPAGE2;\n\n    HRESULT EditProperty( [in] DISPID dispID );\n}\n\n\n/*****************************************************************************\n * IPropertyPageSite interface\n */\n[\n    object,\n    uuid(b196b28c-bab4-101a-b69c-00aa00341d07),\n    pointer_default(unique)\n]\ninterface IPropertyPageSite : IUnknown\n{\n    typedef IPropertyPageSite *LPPROPERTYPAGESITE;\n\n    typedef enum tagPROPPAGESTATUS\n    {\n        PROPPAGESTATUS_DIRTY = 0x1,\n        PROPPAGESTATUS_VALIDATE = 0x2,\n        PROPPAGESTATUS_CLEAN = 0x4\n    } PROPPAGESTATUS;\n\n    HRESULT OnStatusChange( [in] DWORD dwFlags );\n    HRESULT GetLocaleID( [out] LCID *pLocaleID );\n    HRESULT GetPageContainer( [out] IUnknown **ppUnk );\n    HRESULT TranslateAccelerator( [in] MSG *pMsg );\n}\n\n\n/*****************************************************************************\n * IPropertyNotifySink interface\n */\n[\n    object,\n    uuid(9bfbbc02-eff1-101a-84ed-00aa00341d07),\n    pointer_default(unique)\n]\ninterface IPropertyNotifySink : IUnknown\n{\n    typedef IPropertyNotifySink *LPPROPERTYNOTIFYSINK;\n\n    HRESULT OnChanged( [in] DISPID dispID );\n    HRESULT OnRequestEdit( [in] DISPID dispID );\n}\n\n\n/*****************************************************************************\n * ISimpleFrameSite interface\n */\n[\n    object,\n    uuid(742b0e01-14e6-101b-914e-00aa00300cab),\n    pointer_default(unique)\n]\ninterface ISimpleFrameSite : IUnknown\n{\n    typedef ISimpleFrameSite *LPSIMPLEFRAMESITE;\n\n    HRESULT PreMessageFilter(\n        [in] HWND hWnd,\n        [in] UINT msg,\n        [in] WPARAM wp,\n        [in] LPARAM lp,\n        [out] LRESULT *plResult,\n        [out] DWORD *pdwCookie);\n\n    HRESULT PostMessageFilter(\n        [in] HWND hWnd,\n        [in] UINT msg,\n        [in] WPARAM wp,\n        [in] LPARAM lp,\n        [out] LRESULT *plResult,\n        [in] DWORD dwCookie);\n}\n\n\n/*****************************************************************************\n * IPersistStreamInit interface\n */\n[\n    object,\n    uuid(7fd52380-4e07-101b-ae2d-08002b2ec713),\n    pointer_default(unique)\n]\ninterface IPersistStreamInit : IPersist\n{\n    typedef IPersistStreamInit *LPPERSISTSTREAMINIT;\n\n    HRESULT IsDirty();\n    HRESULT Load( [in] LPSTREAM pStm );\n    HRESULT Save( [in] LPSTREAM pStm, [in] BOOL fClearDirty );\n    HRESULT GetSizeMax( [out] ULARGE_INTEGER *pcbSize );\n    HRESULT InitNew();\n}\n\n\n/*****************************************************************************\n * IPersistMemory interface\n */\n[\n    object,\n    uuid(bd1ae5e0-a6ae-11ce-bd37-504200c10000),\n    pointer_default(unique)\n]\ninterface IPersistMemory : IPersist\n{\n    typedef IPersistMemory *LPPERSISTMEMORY;\n\n    HRESULT IsDirty();\n\n    [local]\n    HRESULT Load(\n        [in, size_is(cbSize)] LPVOID pMem,\n        [in] ULONG cbSize);\n\n    [call_as(Load)]\n    HRESULT RemoteLoad(\n        [in, size_is(cbSize)] BYTE *pMem,\n        [in] ULONG cbSize);\n\n    [local]\n    HRESULT Save(\n        [out, size_is(cbSize)] LPVOID pMem,\n        [in] BOOL fClearDirty,\n        [in] ULONG cbSize);\n\n    [call_as(Save)]\n    HRESULT RemoteSave(\n        [out, size_is(cbSize)] BYTE *pMem,\n        [in] BOOL fClearDirty,\n        [in] ULONG cbSize);\n\n    HRESULT GetSizeMax( [out] ULONG *pCbSize );\n    HRESULT InitNew();\n}\n\n\n/*****************************************************************************\n * IPersistPropertyBag interface\n */\n[\n    object,\n    uuid(37d84f60-42cb-11ce-8135-00aa004bb851),\n    pointer_default(unique)\n]\ninterface IPersistPropertyBag : IPersist\n{\n    typedef IPersistPropertyBag *LPPERSISTPROPERTYBAG;\n\n    HRESULT InitNew();\n\n    HRESULT Load(\n        [in] IPropertyBag *pPropBag,\n        [in] IErrorLog *pErrorLog);\n\n    HRESULT Save(\n        [in] IPropertyBag *pPropBag,\n        [in] BOOL fClearDirty,\n        [in] BOOL fSaveAllProperties);\n}\n\n\n\n/*****************************************************************************\n * ISpecifyPropertyPages interface\n */\n[\n    object,\n    uuid(b196b28b-bab4-101a-b69c-00aa00341d07),\n    pointer_default(unique)\n]\ninterface ISpecifyPropertyPages : IUnknown\n{\n    typedef ISpecifyPropertyPages *LPSPECIFYPROPERTYPAGES;\n\n    typedef struct tagCAUUID\n    {\n\tULONG cElems;\n        [size_is(cElems)] GUID *pElems;\n    } CAUUID, *LPCAUUID;\n\n    HRESULT GetPages( [out] CAUUID *pPages );\n}\n\n\n/*****************************************************************************\n * IPerPropertyBrowsing interface\n */\n[\n    object,\n    uuid(376bd3aa-3845-101b-84ed-08002b2ec713),\n    pointer_default(unique)\n]\ninterface IPerPropertyBrowsing : IUnknown\n{\n    typedef IPerPropertyBrowsing *LPPERPROPERTYBROWSING;\n\n    typedef struct tagCALPOLESTR\n    {\n        ULONG cElems;\n        [size_is(cElems)] LPOLESTR *pElems;\n    } CALPOLESTR, *LPCALPOLESTR;\n\n    typedef struct tagCADWORD\n    {\n        ULONG cElems;\n        [size_is(cElems)] DWORD *pElems;\n    } CADWORD, *LPCADWORD;\n\n    HRESULT GetDisplayString(\n        [in] DISPID dispID,\n        [out] BSTR *pBstr);\n\n    HRESULT MapPropertyToPage(\n        [in] DISPID dispID,\n        [out] CLSID *pClsid);\n\n    HRESULT GetPredefinedStrings(\n        [in] DISPID dispID,\n        [out] CALPOLESTR *pCaStringsOut,\n        [out] CADWORD *pCaCookiesOut);\n\n    HRESULT GetPredefinedValue(\n        [in] DISPID dispID,\n        [in] DWORD dwCookie,\n        [out] VARIANT *pVarOut);\n}\n\n\n/*****************************************************************************\n * IAdviseSinkEx interface\n */\n[\n    object,\n    uuid(3af24290-0c96-11ce-a0cf-00aa00600ab8),\n    pointer_default(unique)\n]\ninterface IAdviseSinkEx : IAdviseSink\n{\n    typedef IAdviseSinkEx *LPADVISESINKEX;\n\n    [local]\n    void OnViewStatusChange( [in] DWORD dwViewStatus );\n\n    [call_as(OnViewStatusChange)]\n    HRESULT RemoteOnViewStatusChange( [in] DWORD dwViewStatus );\n}\n\n\n/*****************************************************************************\n * IPointerInactive interface\n */\n[\n    object,\n    uuid(55980ba0-35aa-11cf-b671-00aa004cd6d8),\n    pointer_default(unique)\n]\ninterface IPointerInactive : IUnknown\n{\n    typedef IPointerInactive *LPPOINTERINACTIVE;\n\n    HRESULT GetActivationPolicy(\n        [out] DWORD *pdwPolicy);\n\n    HRESULT OnInactiveMouseMove(\n        [in] LPCRECT pRectBounds,\n        [in] LONG x,\n        [in] LONG y,\n        [in] DWORD grfKeyState);\n\n    HRESULT OnInactiveSetCursor(\n        [in] LPCRECT pRectBounds,\n        [in] LONG x,\n        [in] LONG y,\n        [in] DWORD dwMouseMsg,\n        [in] BOOL fSetAlways);\n}\n\n\n/*****************************************************************************\n * IObjectWithSite interface\n */\n[\n    object,\n    uuid(fc4801a3-2ba9-11cf-a229-00aa003d7352),\n    pointer_default(unique)\n]\ninterface IObjectWithSite : IUnknown\n{\n    typedef IObjectWithSite *LPOBJECTWITHSITE;\n\n    HRESULT SetSite(\n        [in] IUnknown * pUnkSite);\n\n    HRESULT GetSite(\n        [in] REFIID riid, \n        [out, iid_is(riid)] PVOID *ppvSite);\n}\n\n\n/*****************************************************************************\n * IOleUndoUnit interface\n */\ninterface IOleUndoManager;  /* forward declaration */\n[\n    object,\n    uuid(894ad3b0-ef97-11ce-9bc9-00aa00608e01),\n    pointer_default(unique)\n]\ninterface IOleUndoUnit : IUnknown\n{\n    typedef IOleUndoUnit *LPOLEUNDOUNIT;\n\n    HRESULT Do( [in] IOleUndoManager *pUndoManager );\n    HRESULT GetDescription( [out] BSTR *pBstr );\n    HRESULT GetUnitType( [out] CLSID *pClsid, [out] LONG *plID );\n    HRESULT OnNextAdd();\n}\n\n\n/*****************************************************************************\n * IOleParentUndoUnit interface\n */\n[\n    object,\n    uuid(a1faf330-ef97-11ce-9bc9-00aa00608e01),\n    pointer_default(unique)\n]\ninterface IOleParentUndoUnit : IOleUndoUnit\n{\n    typedef IOleParentUndoUnit *LPOLEPARENTUNDOUNIT;\n\n    HRESULT Open( [in] IOleParentUndoUnit *pPUU );\n    HRESULT Close( [in] IOleParentUndoUnit *pPUU, [in] BOOL fCommit );\n    HRESULT Add( [in] IOleUndoUnit *pUU );\n    HRESULT FindUnit( [in] IOleUndoUnit *pUU );\n    HRESULT GetParentState( [out] DWORD *pdwState );\n}\n\n\n/*****************************************************************************\n * IEnumOleUndoUnits interface\n */\n[\n    object,\n    uuid(b3e7c340-ef97-11ce-9bc9-00aa00608e01),\n    pointer_default(unique)\n]\ninterface IEnumOleUndoUnits : IUnknown\n{\n    typedef IEnumOleUndoUnits *LPENUMOLEUNDOUNITS;\n\n    [local]\n    HRESULT Next(\n        [in] ULONG cElt,\n        [out, size_is(cElt), length_is(*pcEltFetched)] IOleUndoUnit **rgElt,\n        [out] ULONG *pcEltFetched);\n\n    [call_as(Next)]\n    HRESULT RemoteNext(\n        [in] ULONG cElt,\n        [out, size_is(cElt), length_is(*pcEltFetched)] IOleUndoUnit **rgElt,\n        [out] ULONG *pcEltFetched);\n\n    HRESULT Skip( [in] ULONG cElt );\n\n    HRESULT Reset();\n\n    HRESULT Clone( [out] IEnumOleUndoUnits **ppEnum );\n}\n\n\n/*****************************************************************************\n * IOleUndoManager interface\n */\n[\n    object,\n    uuid(d001f200-ef97-11ce-9bc9-00aa00608e01),\n    pointer_default(unique)\n]\ninterface IOleUndoManager : IUnknown\n{\ncpp_quote(\"#define SID_SOleUndoManager IID_IOleUndoManager\")\n    typedef IOleUndoManager *LPOLEUNDOMANAGER;\n\n    HRESULT Open( [in] IOleParentUndoUnit *pPUU );\n    HRESULT Close( [in] IOleParentUndoUnit *pPUU, [in] BOOL fCommit );\n    HRESULT Add( [in] IOleUndoUnit *pUU );\n    HRESULT GetOpenParentState( [out] DWORD *pdwState );\n    HRESULT DiscardFrom( [in] IOleUndoUnit *pUU );\n    HRESULT UndoTo( [in] IOleUndoUnit *pUU );\n    HRESULT RedoTo( [in] IOleUndoUnit *pUU );\n    HRESULT EnumUndoable( [out] IEnumOleUndoUnits **ppEnum );\n    HRESULT EnumRedoable( [out] IEnumOleUndoUnits **ppEnum );\n    HRESULT GetLastUndoDescription( [out] BSTR *pBstr );\n    HRESULT GetLastRedoDescription( [out] BSTR *pBstr );\n    HRESULT Enable( [in] BOOL fEnable );\n}\n\n/* OLE1 interface */\n[\n    local,\n    object,\n    /* dummy uuid */\n    uuid(0975C22A-6BA7-420E-9CD3-4763999EFB68),\n    pointer_default(unique)\n]\ninterface OLESTREAM32\n{\n    DWORD __stdcall Get([out, size_is(cbbuf)] void *lpszBuf, [in] DWORD cbbuf);\n    DWORD __stdcall Put([in, size_is(cbbuf)] const void *lpszBuf, [in] DWORD cbbuf);\n}\n\n"
  },
  {
    "path": "ole2/ifs_thunk.c",
    "content": "\n#include \"config.h\"\n\n#include <assert.h>\n#include <stdlib.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <string.h>\n#include <malloc.h>\n#include <stddef.h>\n\n#define COBJMACROS\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n#include \"wownt32.h\"\n#include \"ole2.h\"\n#include \"winerror.h\"\n\n#include \"wine/winbase16.h\"\n#include \"wine/wingdi16.h\"\n#include \"wine/winuser16.h\"\n#include \"ifs.h\"\n\n#include \"wine/debug.h\"\n#include \"ifs_thunk.h\"\n\nextern interface_entry interfaces[];\nextern size_t interfaces_count;\n/* FIXME */\ninterface_32 *interface32_instances[1024];\nsize_t interface32_instance_size = 1024;\nsize_t interface32_instance_cur = 0;\ninterface_16 *interface16_instances[1024];\nsize_t interface16_instance_size = 1024;\nsize_t interface16_instance_cur = 0;\n\n#ifdef _DEBUG\n#define IFS_GUARD_SIZE 500\n#else\n#define IFS_GUARD_SIZE 0\n#endif\nstatic int iid_cmp(const void *p1, const void *p2)\n{\n    return memcmp(&((const interface_entry*)p1)->iid, &((const interface_entry*)p2)->iid, sizeof(IID));\n}\nSEGPTR make_thunk_32(void *funcptr, const char *arguments, const char *name, BOOL ret_32bit, BOOL reg_func, BOOL is_cdecl);\nstatic void register_instance32(interface_32 *i32)\n{\n    if (interface32_instance_cur >= interface32_instance_size)\n        return;\n    interface32_instances[interface32_instance_cur++] = i32;\n}\nstatic void register_instance16(interface_16 *i16)\n{\n    if (interface16_instance_cur >= interface16_instance_size)\n        return;\n    interface16_instances[interface16_instance_cur++] = i16;\n}\nstatic void unregister_instance32(interface_32 *i32)\n{\n    for (int i = 0; i < interface32_instance_size; i++)\n        if (interface32_instances[i] == i32)\n            interface32_instances[i] = NULL;\n}\nstatic void init_interface_entry(interface_entry *e)\n{\n    size_t i = 0;\n    SEGPTR *vtbl16 = e->lpVtbl16;\n    while (e->vtbl16[i].func16)\n    {\n        vtbl16[i] = make_thunk_32(e->vtbl16[i].func16, e->vtbl16[i].args, e->vtbl16[i].name, TRUE, FALSE, !e->vtbl16[i].is_stdcall);\n        i++;\n    }\n    e->spVtbl16 = MapLS(e->lpVtbl16);\n}\nSEGPTR iface32_16(REFIID riid, void *iface32)\n{\n    interface_entry *result;\n    size_t i;\n    interface_16 *i16;\n    SEGPTR s;\n    BOOL is_iunk;\n    if (!iface32)\n    {\n        return 0;\n    }\n    is_iunk = IsEqualGUID(&IID_IUnknown, riid); /* FIXME */\n    result = (interface_entry*)bsearch(riid, interfaces, interfaces_count, sizeof(interfaces[0]), iid_cmp);\n    for (i = 0; i < interface16_instance_size; i++)\n    {\n        if (interface32_instances[i] && &interface32_instances[i]->lpVtbl == iface32)\n        {\n            s = interface32_instances[i]->iface16;\n            if (is_iunk || !memcmp(interface32_instances[i]->riid, riid, sizeof(IID)))\n            {\n                TRACE(\"32-bit interface %p -> %04x:%04x(%.*s)\\n\", iface32, SELECTOROF(s), OFFSETOF(s), (const char*)strstr(result->vtbl16[0].name, \"::\") - (const char*)result->vtbl16[0].name, result->vtbl16[0].name);\n                return s;\n            }\n            else\n            {\n                TRACE(\"32-bit interface %p is not %04x:%04x(%.*s)\\n\", iface32, SELECTOROF(s), OFFSETOF(s), (const char*)strstr(result->vtbl16[0].name, \"::\") - (const char*)result->vtbl16[0].name, result->vtbl16[0].name);\n            }\n        }\n        if (interface16_instances[i] && interface16_instances[i]->iface32 == iface32)\n        {\n            s = MapLS(&interface16_instances[i]->lpVtbl);\n            if (is_iunk || !memcmp(interface16_instances[i]->riid, riid, sizeof(IID)))\n            {\n                TRACE(\"32-bit interface %p -> %04x:%04x(%.*s)\\n\", iface32, SELECTOROF(s), OFFSETOF(s), (const char*)strstr(result->vtbl16[0].name, \"::\") - (const char*)result->vtbl16[0].name, result->vtbl16[0].name);\n                return s;\n            }\n            else\n            {\n                TRACE(\"32-bit interface %p is not %04x:%04x(%.*s)\\n\", iface32, SELECTOROF(s), OFFSETOF(s), (const char*)strstr(result->vtbl16[0].name, \"::\") - (const char*)result->vtbl16[0].name, result->vtbl16[0].name);\n            }\n        }\n    }\n    if (!result)\n    {\n        ERR(\"unknown interface %s\\n\", debugstr_guid(riid));\n        return 0;\n    }\n    i16 = (interface_16*)HeapAlloc(GetProcessHeap(), 0, sizeof(interface_16) + IFS_GUARD_SIZE * 2);\n    memset(i16, 0xcd, sizeof(interface_16) + IFS_GUARD_SIZE * 2);\n    i16 = (interface_16*)((char*)i16 + IFS_GUARD_SIZE);\n    if (!result->spVtbl16)\n    {\n        init_interface_entry(result);\n    }\n    s = MapLS(&i16->lpVtbl);\n    TRACE(\"32-bit interface %p -> new %04x:%04x(%.*s)\\n\", iface32, SELECTOROF(s), OFFSETOF(s), (const char*)strstr(result->vtbl16[0].name, \"::\") - (const char*)result->vtbl16[0].name, result->vtbl16[0].name);\n    i16->iface32 = iface32;\n    i16->lpVtbl = result->spVtbl16;\n    i16->riid = &result->iid;\n    i16->vtable_copy = NULL;\n    register_instance16(i16);\n    return s;\n}\nvoid *copy_iface16_vtbl(SEGPTR iface16)\n{\n    interface_16 *i16 = get_interface32_ptr(iface16);\n    interface_entry *result;\n    vtbl_entry *cur_entry;\n    SEGPTR *vtbl;\n    int len_vtbl = 0;\n    result = (interface_entry*)bsearch(i16->riid, interfaces, interfaces_count, sizeof(interfaces[0]), iid_cmp);\n    if (!result)\n        return NULL;\n    cur_entry = result->vtbl16;\n    while (cur_entry++->func16)\n        len_vtbl++;\n    vtbl = (SEGPTR*)HeapAlloc(GetProcessHeap(), 0, len_vtbl * sizeof(SEGPTR));\n    memcpy(vtbl, result->lpVtbl16, len_vtbl * sizeof(SEGPTR));\n    i16->lpVtbl = MapLS(vtbl);\n    return vtbl;\n}\nvoid *iface16_32(REFIID riid, SEGPTR iface16)\n{\n    interface_entry *result;\n    size_t i;\n    interface_32 *i32;\n    LPVOID piface16 = MapSL(iface16);\n    BOOL is_iunk;\n    if (!iface16)\n    {\n        return 0;\n    }\n    is_iunk = IsEqualGUID(&IID_IUnknown, riid); /* FIXME */\n    result = (interface_entry*)bsearch(riid, interfaces, interfaces_count, sizeof(interfaces[0]), iid_cmp);\n    for (i = 0; i < interface32_instance_size; i++)\n    {\n        if (interface16_instances[i] && (LPVOID)&interface16_instances[i]->lpVtbl == piface16)\n        {\n            if (is_iunk || !memcmp(interface16_instances[i]->riid, riid, sizeof(IID)))\n            {\n                TRACE(\"16-bit interface %04x:%04x -> %p(%.*s)\\n\", SELECTOROF(iface16), OFFSETOF(iface16), interface16_instances[i]->iface32, (const char*)strstr(result->vtbl16[0].name, \"::\") - (const char*)result->vtbl16[0].name, result->vtbl16[0].name);\n                return interface16_instances[i]->iface32;\n            }\n            else\n            {\n                TRACE(\"16-bit interface %04x:%04x is not %p(%.*s)\\n\", SELECTOROF(iface16), OFFSETOF(iface16), interface16_instances[i]->iface32, (const char*)strstr(result->vtbl16[0].name, \"::\") - (const char*)result->vtbl16[0].name, result->vtbl16[0].name);\n            }\n        }\n        if (interface32_instances[i] && interface32_instances[i]->iface16 == iface16)\n        {\n            if (is_iunk ||!memcmp(interface32_instances[i]->riid, riid, sizeof(IID)))\n            {\n                TRACE(\"16-bit interface %04x:%04x -> %p(%.*s)\\n\", SELECTOROF(iface16), OFFSETOF(iface16), (void*)&interface32_instances[i]->lpVtbl, (const char*)strstr(result->vtbl16[0].name, \"::\") - (const char*)result->vtbl16[0].name, result->vtbl16[0].name);\n                return (void*)&interface32_instances[i]->lpVtbl;\n            }\n            else\n            {\n                TRACE(\"16-bit interface %04x:%04x is not %p(%.*s)\\n\", SELECTOROF(iface16), OFFSETOF(iface16), (void*)&interface32_instances[i]->lpVtbl, (const char*)strstr(result->vtbl16[0].name, \"::\") - (const char*)result->vtbl16[0].name, result->vtbl16[0].name);\n            }\n        }\n    }\n    if (!result)\n    {\n        ERR(\"unknown interface %s\\n\", debugstr_guid(riid));\n        return 0;\n    }\n    i32 = (interface_32*)HeapAlloc(GetProcessHeap(), 0, sizeof(interface_32) + IFS_GUARD_SIZE * 2);\n    memset(i32, 0xcd, sizeof(interface_32) + IFS_GUARD_SIZE * 2);\n    i32 = (interface_32*)((char*)i32 + IFS_GUARD_SIZE);\n    if (!result->spVtbl16)\n    {\n        init_interface_entry(result);\n    }\n    TRACE(\"16-bit interface %04x:%04x -> new %p(%.*s)\\n\", SELECTOROF(iface16), OFFSETOF(iface16), i32, (const char*)strstr(result->vtbl16[0].name, \"::\") - (const char*)result->vtbl16[0].name, result->vtbl16[0].name);\n    i32->iface16 = iface16;\n    i32->lpVtbl = result->lpVtbl32;\n    i32->riid = &result->iid;\n    register_instance32(i32);\n    return (void*)&i32->lpVtbl;\n}\n\nvoid free_iface32(void *iface)\n{\n    char *i32 = (char*)iface - IFS_GUARD_SIZE;\n    if (!iface)\n        return;\n    unregister_instance32(iface);\n    HeapFree(GetProcessHeap(), 0, i32);\n}\nHRESULT CDECL IOleInPlaceSiteWindowless_16_32_OnDefWindowMessage(SEGPTR This, DWORD args16_msg, DWORD args16_wParam, DWORD args16_lParam, SEGPTR args16_plResult)\n{\n    FIXME(\"\\n\");\n    return E_NOTIMPL16;\n}\nHRESULT STDMETHODCALLTYPE IOleInPlaceSiteWindowless_32_16_OnDefWindowMessage(IOleInPlaceSiteWindowless *This, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *plResult)\n{\n    FIXME(\"\\n\");\n    return E_NOTIMPL;\n}\n\nHRESULT STDMETHODCALLTYPE IOleInPlaceObjectWindowless_32_16_OnWindowMessage(IOleInPlaceObjectWindowless *This, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *plResult)\n{\n    FIXME(\"\\n\");\n    return E_NOTIMPL;\n}\nHRESULT CDECL IOleInPlaceObjectWindowless_16_32_OnWindowMessage(SEGPTR This, DWORD args16_msg, DWORD args16_wParam, DWORD args16_lParam, SEGPTR args16_plResult)\n{\n    FIXME(\"\\n\");\n    return E_NOTIMPL16;\n}\nHRESULT CDECL ISimpleFrameSite_16_32_PreMessageFilter(SEGPTR This, WORD args16_hWnd, DWORD args16_msg, DWORD args16_wp, DWORD args16_lp, SEGPTR args16_plResult, SEGPTR args16_pdwCookie)\n{\n    FIXME(\"\\n\");\n    return E_NOTIMPL16;\n}\nHRESULT STDMETHODCALLTYPE ISimpleFrameSite_32_16_PreMessageFilter(ISimpleFrameSite *This, HWND hWnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *plResult, DWORD *pdwCookie)\n{\n    FIXME(\"\\n\");\n    return E_NOTIMPL;\n}\nHRESULT CDECL ISimpleFrameSite_16_32_PostMessageFilter(SEGPTR This, WORD args16_hWnd, DWORD args16_msg, DWORD args16_wp, DWORD args16_lp, SEGPTR args16_plResult, DWORD args16_dwCookie)\n{\n    FIXME(\"\\n\");\n    return E_NOTIMPL16;\n}\nHRESULT STDMETHODCALLTYPE ISimpleFrameSite_32_16_PostMessageFilter(ISimpleFrameSite *This, HWND hWnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *plResult, DWORD dwCookie)\n{\n    FIXME(\"\\n\");\n    return E_NOTIMPL;\n}\n\nstruct hresult_map\n{\n    HRESULT hresult16;\n    HRESULT hresult32;\n} hresult_table[] =\n{\n    { E_UNEXPECTED16, E_UNEXPECTED },\n    { E_NOTIMPL16, E_NOTIMPL },\n    { E_OUTOFMEMORY16, E_OUTOFMEMORY },\n    { E_INVALIDARG16, E_INVALIDARG },\n    { E_NOINTERFACE16, E_NOINTERFACE },\n    { E_POINTER16, E_POINTER },\n    { E_HANDLE16, E_HANDLE },\n    { E_ABORT16, E_ABORT },\n    { E_FAIL16, E_FAIL },\n    { E_ACCESSDENIED16, E_ACCESSDENIED },\n};\nHRESULT hresult32_16(HRESULT hresult)\n{\n    int i;\n    for (i = 0; i < ARRAYSIZE(hresult_table); i++)\n    {\n        if (hresult_table[i].hresult32 == hresult)\n        {\n            TRACE(\"%08x->%08x\\n\", hresult, hresult_table[i].hresult16);\n            return hresult_table[i].hresult16;\n        }\n    }\n    TRACE(\"%08x\\n\", hresult);\n    return hresult;\n}\n\nHRESULT hresult16_32(HRESULT hresult)\n{\n    int i;\n    for (i = 0; i < ARRAYSIZE(hresult_table); i++)\n    {\n        if (hresult_table[i].hresult16 == hresult)\n        {\n            TRACE(\"%08x->%08x\\n\", hresult, hresult_table[i].hresult32);\n            return hresult_table[i].hresult32;\n        }\n    }\n    TRACE(\"%08x\\n\", hresult);\n    return hresult;\n}\n/* {F6989118-9D36-4B65-AE0C-0C20886D50F8} */\nconst IID IID_ISTGMEDIUMRelease = { 0xf6989118, 0x9d36, 0x4b65, { 0xae, 0xc, 0xc, 0x20, 0x88, 0x6d, 0x50, 0xf8 } };\n\nULONG CDECL ISTGMEDIUMRelease_16_32_Release(SEGPTR This)\n{\n    ISTGMEDIUMRelease *iface32 = (ISTGMEDIUMRelease*)get_interface32(This);\n    STGMEDIUM *ptr = (STGMEDIUM*)get_interface32_ptr(This);\n    ULONG result;\n    TRACE(\"(%04x:%04x(%p))\\n\", SELECTOROF(This), OFFSETOF(This), iface32);\n    result = iface32->lpVtbl->Release(iface32);\n    if (result == 0)\n    {\n        TRACE(\"(%04x:%04x(%p)) free\\n\", SELECTOROF(This), OFFSETOF(This), iface32);\n    }\n    return result;\n}\nULONG STDMETHODCALLTYPE ISTGMEDIUMRelease_32_16_Release(ISTGMEDIUMRelease *This)\n{\n    SEGPTR iface16 = get_interface16(This);\n    STGMEDIUM16 *ptr = (STGMEDIUM16*)get_interface16_ptr(This);\n    ULONG result;\n    TRACE(\"(%p(%04x:%04x))\\n\", This, SELECTOROF(iface16), OFFSETOF(iface16));\n    result = ISTGMEDIUMRelease16_Release(iface16);\n    if (result == 0)\n    {\n        TRACE(\"(%p(%04x:%04x)) free\\n\", This, SELECTOROF(iface16), OFFSETOF(iface16));\n    }\n    return result;\n}\n\nULONG STDMETHODCALLTYPE ISTGMEDIUMRelease_32_16_Release(ISTGMEDIUMRelease *This);\ntypedef struct\n{\n    ISTGMEDIUMRelease ISTGMEDIUMRelease_iface;\n    LONG ref;\n} ISTGMEDIUM_impl;\n\n\nstatic inline ISTGMEDIUM_impl *impl_from_ISTGMEDIUMRelease(ISTGMEDIUMRelease *iface)\n{\n    return CONTAINING_RECORD(iface, ISTGMEDIUM_impl, ISTGMEDIUMRelease_iface);\n}\n\nstatic ULONG WINAPI ISTGMEDIUMRelease_AddRef(ISTGMEDIUMRelease *iface)\n{\n    ISTGMEDIUM_impl *This = impl_from_ISTGMEDIUMRelease(iface);\n    return InterlockedIncrement(&This->ref);\n}\n\nstatic ULONG WINAPI ISTGMEDIUMRelease_Release(ISTGMEDIUMRelease *iface)\n{\n    ISTGMEDIUM_impl *This = impl_from_ISTGMEDIUMRelease(iface);\n    return InterlockedDecrement(&This->ref);\n}\n\nstatic HRESULT WINAPI ISTGMEDIUMRelease_QueryInterface(ISTGMEDIUMRelease *iface,\n    REFIID riid,\n    void** ppvObject)\n{\n    *ppvObject = NULL;\n\n    if (IsEqualIID(riid, &IID_ISTGMEDIUMRelease) ||\n        IsEqualIID(riid, &IID_IUnknown))\n    {\n        *ppvObject = iface;\n        IUnknown_AddRef(iface);\n    }\n\n    return *ppvObject ? S_OK : E_NOINTERFACE;\n}\n\nstatic const ISTGMEDIUMReleaseVtbl ISTGMEDIUMRelease_VTable =\n{\n    ISTGMEDIUMRelease_QueryInterface, ISTGMEDIUMRelease_AddRef, ISTGMEDIUMRelease_Release\n};\n\n#pragma pack(push, 1)\ntypedef struct {\n    char  dmDeviceName[CCHDEVICENAME];\n    UINT16  dmSpecVersion;\n    UINT16  dmDriverVersion;\n    UINT16  dmSize;\n    UINT16  dmDriverExtra;\n    DWORD dmFields;\n    INT16   dmOrientation;\n    INT16   dmPaperSize;\n    INT16   dmPaperLength;\n    INT16   dmPaperWidth;\n    INT16   dmScale;\n    INT16   dmCopies;\n    INT16   dmDefaultSource;\n    INT16   dmPrintQuality;\n    INT16   dmColor;\n    INT16   dmDuplex;\n    INT16   dmYResolution;\n    INT16   dmTTOption;\n} DEVMODE16, *LPDEVMODE16;\n#pragma pack(pop)\n\nstatic DVTARGETDEVICE *DVTARGETDEVICE16To32W(const DVTARGETDEVICE *src)\n{\n    int pos = 0;\n    int len;\n    int size = src->tdSize * 2 - sizeof(DVTARGETDEVICE);\n    DVTARGETDEVICE *dst = (DVTARGETDEVICE*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, src->tdSize * 2 + sizeof(DEVMODEW) + sizeof(DVTARGETDEVICE));\n    if (src->tdDriverNameOffset)\n    {\n        len = MultiByteToWideChar(CP_ACP, 0, (char *)src + src->tdDriverNameOffset, -1, dst->tdData, size);\n        dst->tdDriverNameOffset = pos + offsetof(DVTARGETDEVICE, tdData);\n        pos += len * 2;\n        size -= len * 2;\n    }\n    if (src->tdDeviceNameOffset)\n    {\n        len = MultiByteToWideChar(CP_ACP, 0, (char *)src + src->tdDeviceNameOffset, -1, dst->tdData + pos, size);\n        dst->tdDeviceNameOffset = pos + offsetof(DVTARGETDEVICE, tdData);\n        pos += len * 2;\n        size -= len * 2;\n    }\n    if (src->tdPortNameOffset)\n    {\n        len = MultiByteToWideChar(CP_ACP, 0, (char *)src + src->tdPortNameOffset, -1, dst->tdData + pos, size);\n        dst->tdPortNameOffset = pos + offsetof(DVTARGETDEVICE, tdData);\n        pos += len * 2;\n        size -= len * 2;\n    }\n    if (src->tdExtDevmodeOffset)\n    {\n        DEVMODE16 *dv16 = (char *)src + src->tdExtDevmodeOffset;\n        DEVMODEW *dv32 = dst->tdData + pos;\n        dst->tdExtDevmodeOffset = pos + offsetof(DVTARGETDEVICE, tdData);\n        MultiByteToWideChar(CP_ACP, 0, dv16->dmDeviceName, CCHDEVICENAME, dv32->dmDeviceName, CCHDEVICENAME);\n        dv32->dmDeviceName[CCHDEVICENAME - 1] = 0;\n        dv32->dmSpecVersion = 0x30a;\n        dv32->dmDriverVersion = dv16->dmDriverVersion;\n        dv32->dmSize = sizeof(DEVMODEW);\n        dv32->dmDriverExtra = 0;\n        dv32->dmFields = dv16->dmFields & 0x7fbf;\n        dv32->dmOrientation = dv16->dmOrientation;\n        dv32->dmPaperSize = dv16->dmPaperSize;\n        dv32->dmPaperLength = dv16->dmPaperLength;\n        dv32->dmPaperWidth = dv16->dmPaperWidth;\n        dv32->dmScale = dv16->dmScale;\n        dv32->dmCopies = dv16->dmCopies;\n        dv32->dmDefaultSource = dv16->dmDefaultSource;\n        dv32->dmPrintQuality = dv16->dmPrintQuality;\n        dv32->dmColor = dv16->dmColor;\n        dv32->dmDuplex = dv16->dmDuplex;\n        dv32->dmYResolution = dv16->dmYResolution;\n        dv32->dmTTOption = dv16->dmTTOption;\n        pos += sizeof(DEVMODEW);\n    }\n    dst->tdSize = pos + offsetof(DVTARGETDEVICE, tdData);\n    return dst;\n}\n\nstatic DVTARGETDEVICE *DVTARGETDEVICE32WTo16(const DVTARGETDEVICE *src)\n{\n    int pos = 0;\n    int len;\n    int size = src->tdSize - sizeof(DVTARGETDEVICE);\n    DVTARGETDEVICE *dst = (DVTARGETDEVICE*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, src->tdSize);\n    if (src->tdDriverNameOffset)\n    {\n        len = WideCharToMultiByte(CP_ACP, 0, (char *)src + src->tdDriverNameOffset, -1, dst->tdData, size, NULL, NULL);\n        dst->tdDriverNameOffset = pos + offsetof(DVTARGETDEVICE, tdData);\n        pos += len;\n        size -= len;\n    }\n    if (src->tdDeviceNameOffset)\n    {\n        len = WideCharToMultiByte(CP_ACP, 0, (char *)src + src->tdDeviceNameOffset, -1, dst->tdData + pos, size, NULL, NULL);\n        dst->tdDeviceNameOffset = pos + offsetof(DVTARGETDEVICE, tdData);\n        pos += len;\n        size -= len;\n    }\n    if (src->tdPortNameOffset)\n    {\n        len = WideCharToMultiByte(CP_ACP, 0, (char *)src + src->tdPortNameOffset, -1, dst->tdData + pos, size, NULL, NULL);\n        dst->tdPortNameOffset = pos + offsetof(DVTARGETDEVICE, tdData);\n        pos += len;\n        size -= len;\n    }\n    if (src->tdExtDevmodeOffset)\n    {\n        DEVMODEW *dv32 = (char *)src + src->tdExtDevmodeOffset;\n        DEVMODE16 *dv16 = dst->tdData + pos;\n        dst->tdExtDevmodeOffset = pos + offsetof(DVTARGETDEVICE, tdData);\n        WideCharToMultiByte(CP_ACP, 0, dv32->dmDeviceName, CCHDEVICENAME, dv16->dmDeviceName, CCHDEVICENAME, NULL, NULL);\n        dv16->dmDeviceName[CCHDEVICENAME - 1] = 0;\n        dv16->dmSpecVersion = 0x30a;\n        dv16->dmDriverVersion = dv32->dmDriverVersion;\n        dv16->dmSize = sizeof(DEVMODE16);\n        dv16->dmDriverExtra = 0; \n        dv16->dmFields = dv32->dmFields & 0x7fbf;\n        dv16->dmOrientation = dv32->dmOrientation;\n        dv16->dmPaperSize = dv32->dmPaperSize;\n        dv16->dmPaperLength = dv32->dmPaperLength;\n        dv16->dmPaperWidth = dv32->dmPaperWidth;\n        dv16->dmScale = dv32->dmScale;\n        dv16->dmCopies = dv32->dmCopies;\n        dv16->dmDefaultSource = dv32->dmDefaultSource;\n        dv16->dmPrintQuality = dv32->dmPrintQuality;\n        dv16->dmColor = dv32->dmColor;\n        dv16->dmDuplex = dv32->dmDuplex;\n        dv16->dmYResolution = dv32->dmYResolution;\n        dv16->dmTTOption = dv32->dmTTOption;\n        pos += sizeof(DEVMODE16);\n    }\n    dst->tdSize = pos + offsetof(DVTARGETDEVICE, tdData);\n    return dst;\n}\n\nvoid map_pformatetc16_32(FORMATETC *a32, const FORMATETC16 *a16)\n{\n    a32->cfFormat = a16->cfFormat;\n    a32->ptd = a16->ptd ? DVTARGETDEVICE16To32W(MapSL(a16->ptd)) : NULL;\n    a32->dwAspect = a16->dwAspect;\n    a32->lindex = a16->lindex;\n    a32->tymed = a16->tymed;\n    if (TRACE_ON(ole))\n    {\n        char buf[100];\n        buf[0] = 0;\n        GetClipboardFormatNameA(a16->cfFormat, buf, 100);\n        TRACE(\"%s(%04x),%04x:%04x,%d,%d,%d\\n\", buf, a32->cfFormat, SELECTOROF(a16->ptd), OFFSETOF(a16->ptd), a32->dwAspect, a32->lindex, a32->tymed);\n    }\n}\nvoid map_pformatetc32_16(FORMATETC16 *a16, const FORMATETC *a32)\n{\n    a16->cfFormat = a32->cfFormat;\n    a16->ptd = a32->ptd ? MapLS(DVTARGETDEVICE32WTo16(a32->ptd)) : NULL;\n    a16->dwAspect = a32->dwAspect;\n    a16->lindex = a32->lindex;\n    a16->tymed = a32->tymed;\n    if (TRACE_ON(ole))\n    {\n        char buf[100];\n        buf[0] = 0;\n        GetClipboardFormatNameA(a32->cfFormat, buf, 100);\n        TRACE(\"%s(%04x),%p,%d,%d,%d\\n\", buf, a32->cfFormat, a32->ptd, a32->dwAspect, a32->lindex, a32->tymed);\n    }\n}\n\nvoid map_formatetc16_32(FORMATETC *a32, const FORMATETC16 *a16)\n{\n    a32->cfFormat = a16->cfFormat;\n    a32->ptd = (DVTARGETDEVICE*)MapSL(a16->ptd);\n    a32->dwAspect = a16->dwAspect;\n    a32->lindex = a16->lindex;\n    a32->tymed = a16->tymed;\n    if (TRACE_ON(ole))\n    {\n        char buf[100];\n        buf[0] = 0;\n        GetClipboardFormatNameA(a16->cfFormat, buf, 100);\n        TRACE(\"%s(%04x),%04x:%04x,%d,%d,%d\\n\", buf, a32->cfFormat, SELECTOROF(a16->ptd), OFFSETOF(a16->ptd), a32->dwAspect, a32->lindex, a32->tymed);\n    }\n}\nvoid map_formatetc32_16(FORMATETC16 *a16, const FORMATETC *a32)\n{\n    a16->cfFormat = a32->cfFormat;\n    a16->ptd = MapLS(a32->ptd);\n    a16->dwAspect = a32->dwAspect;\n    a16->lindex = a32->lindex;\n    a16->tymed = a32->tymed;\n    if (TRACE_ON(ole))\n    {\n        char buf[100];\n        buf[0] = 0;\n        GetClipboardFormatNameA(a32->cfFormat, buf, 100);\n        TRACE(\"%s(%04x),%p,%d,%d,%d\\n\", buf, a32->cfFormat, a32->ptd, a32->dwAspect, a32->lindex, a32->tymed);\n    }\n}\n\nvoid map_stgmedium32_16_2(STGMEDIUM16 *a16, const STGMEDIUM *a32, BOOL fixme)\n{\n    IUnknown *punk = a32->pUnkForRelease;\n    interface_16 *i16;\n    a16->tymed = a32->tymed;\n    a16->pUnkForRelease = iface32_16(&IID_ISTGMEDIUMRelease, punk);\n    i16 = get_interface32_ptr(a16->pUnkForRelease);\n    TRACE(\"release=%p\\n\", punk);\n    switch ((TYMED)a32->tymed)\n    {\n    case TYMED_HGLOBAL:\n    {\n        LPVOID p = GlobalLock(a32->hGlobal);\n        SIZE_T size = GlobalSize(a32->hGlobal);\n        SEGPTR g16 = GlobalAlloc16(0, size);\n        LPVOID p32 = GlobalLock16(g16);\n        TRACE(\"TYMED_HGLOBAL\\n\");\n        memcpy(p32, p, GlobalSize(a32->hGlobal));\n        WOWGlobalUnlock16(g16);\n        a16->hGlobal = g16;\n        if (fixme)\n        {\n            FIXME(\"leak %04x(%p)\\n\", a16->hGlobal, a32->hGlobal);\n        }\n        else\n        {\n            TRACE(\"leak %04x(%p)\\n\", a16->hGlobal, a32->hGlobal);\n        }\n        break;\n    }\n    case TYMED_FILE:\n        TRACE(\"TYMED_FILE\\n\");\n        a16->lpszFileName = MapLS(strdupWtoA(a32->lpszFileName));\n        break;\n    case TYMED_ISTREAM:\n        TRACE(\"TYMED_ISTREAM\\n\");\n        a16->pstm = iface32_16(&IID_IStream, a32->pstm);\n        break;\n    case TYMED_ISTORAGE:\n        TRACE(\"TYMED_ISTORAGE\\n\");\n        a16->pstg = iface32_16(&IID_IStorage, a32->pstg);\n        break;\n    case TYMED_NULL:\n        TRACE(\"TYMED_NULL\\n\");\n        break;\n    case TYMED_GDI:\n        TRACE(\"TYMED_GDI %04x %p\\n\", a16->hGlobal, a32->hBitmap);\n        a16->hGlobal = HBITMAP_16(a32->hBitmap);\n        break;\n    case TYMED_MFPICT:\n    {\n        METAFILEPICT16 *pict16;\n        HGLOBAL data32 = a32->hGlobal;\n        HGLOBAL16 data16;\n        UINT size;\n        void *ptr;\n        METAFILEPICT *pict32 = GlobalLock(data32);\n\n        if (pict32)\n        {\n            if (!(data16 = GlobalAlloc16(GMEM_MOVEABLE, sizeof(*pict16)))) return 0;\n            pict16 = GlobalLock16(data16);\n            pict16->mm = pict32->mm;\n            pict16->xExt = pict32->xExt;\n            pict16->yExt = pict32->yExt;\n            size = GetMetaFileBitsEx(pict32->hMF, 0, NULL);\n            pict16->hMF = GlobalAlloc16(GMEM_MOVEABLE, size);\n            ptr = GlobalLock16(pict16->hMF);\n            GetMetaFileBitsEx(pict32->hMF, size, ptr);\n            GlobalUnlock16(pict16->hMF);\n            GlobalUnlock16(data16);\n            a16->hGlobal = data16;\n        }\n        if (fixme)\n        {\n            FIXME(\"TYMED_MFPICT\\n\");\n        }\n        else\n        {\n            TRACE(\"TYMED_MFPICT\\n\");\n        }\n        break;\n    }\n    case TYMED_ENHMF:\n    default:\n        ERR(\"unsupported tymed %d\\n\", a32->tymed);\n        break;\n    }\n}\nvoid map_stgmedium32_16(STGMEDIUM16 *a16, const STGMEDIUM *a32)\n{\n    map_stgmedium32_16_2(a16, a32, TRUE);\n}\nvoid map_stgmedium16_32_2(STGMEDIUM *a32, const STGMEDIUM16 *a16, BOOL fixme)\n{\n    a32->tymed = a16->tymed;\n    a32->pUnkForRelease = (IUnknown*)iface16_32(&IID_ISTGMEDIUMRelease, a16->pUnkForRelease);\n    switch ((TYMED)a32->tymed)\n    {\n    case TYMED_HGLOBAL:\n    {\n        SIZE_T size = GlobalSize16(a16->hGlobal);\n        LPVOID p16 = GlobalLock16(a16->hGlobal);\n        LPVOID p32;\n        a32->hGlobal = GlobalAlloc(0, size);\n        p32 = GlobalLock(a32->hGlobal);\n        memcpy(p32, p16, size);\n        GlobalUnlock(a32->hGlobal);\n        if (fixme)\n        {\n            FIXME(\"TYMED_HGLOBAL leak %p(%04x) %04x:%04x\\n\", a32->hGlobal, a16->hGlobal, SELECTOROF(a16->pUnkForRelease), OFFSETOF(a16->pUnkForRelease));\n        }\n        else\n        {\n            TRACE(\"TYMED_HGLOBAL %p(%04x) %04x:%04x\\n\", a32->hGlobal, a16->hGlobal, SELECTOROF(a16->pUnkForRelease), OFFSETOF(a16->pUnkForRelease));\n        }\n        break;\n    }\n    case TYMED_FILE:\n        TRACE(\"TYMED_FILE %s %04x:%04x\\n\", debugstr_a((const char*)MapSL(a16->lpszFileName)), SELECTOROF(a16->pUnkForRelease), OFFSETOF(a16->pUnkForRelease));\n        a32->lpszFileName = strdupAtoW(MapSL(a16->lpszFileName));\n        break;\n    case TYMED_ISTREAM:\n        TRACE(\"TYMED_ISTREAM %04x:%04x %04x:%04x\\n\", SELECTOROF(a16->pstm), OFFSETOF(a16->pstm), SELECTOROF(a16->pUnkForRelease), OFFSETOF(a16->pUnkForRelease));\n        a32->pstm = (IStream*)iface16_32(&IID_IStream, a16->pstm);\n        break;\n    case TYMED_ISTORAGE:\n        TRACE(\"TYMED_ISTORAGE %04x:%04x %04x:%04x\\n\", SELECTOROF(a16->pstg), OFFSETOF(a16->pstg), SELECTOROF(a16->pUnkForRelease), OFFSETOF(a16->pUnkForRelease));\n        a32->pstg = (IStorage*)iface16_32(&IID_IStorage, a16->pstg);\n        break;\n    case TYMED_NULL:\n        TRACE(\"TYMED_NULL %04x:%04x\\n\", SELECTOROF(a16->pUnkForRelease), OFFSETOF(a16->pUnkForRelease));\n        break;\n    case TYMED_GDI:\n        TRACE(\"TYMED_GDI %04x %04x:%04x\\n\", a16->hGlobal, SELECTOROF(a16->pUnkForRelease), OFFSETOF(a16->pUnkForRelease));\n        a32->hBitmap = HBITMAP_32(a16->hGlobal);\n        break;\n    case TYMED_MFPICT:\n    {\n        METAHEADER *header;\n        METAFILEPICT *pict32;\n        HGLOBAL16 data16 = a16->hGlobal;\n        METAFILEPICT16 *pict16 = GlobalLock16(data16);\n        HGLOBAL data32;\n\n        a32->hGlobal = NULL;\n        if (pict16)\n        {\n            if (!(data32 = GlobalAlloc(GMEM_MOVEABLE, sizeof(*pict32)))) return 0;\n            pict32 = GlobalLock(data32);\n            pict32->mm = pict16->mm;\n            pict32->xExt = pict16->xExt;\n            pict32->yExt = pict16->yExt;\n            header = GlobalLock16(pict16->hMF);\n            pict32->hMF = SetMetaFileBitsEx(header->mtSize * 2, (BYTE *)header);\n            GlobalUnlock16(pict16->hMF);\n            GlobalUnlock(data32);\n            a32->hGlobal = data32;\n        }\n        if (fixme)\n        {\n            FIXME(\"TYMED_MFPICT %04x %p leak %04x:%04x\\n\", a16->hGlobal, a32->hGlobal, a16->pUnkForRelease, a16->pUnkForRelease);\n        }\n        else\n        {\n            TRACE(\"TYMED_MFPICT %04x %p leak %04x:%04x\\n\", a16->hGlobal, a32->hGlobal, a16->pUnkForRelease, a16->pUnkForRelease);\n        }\n        break;\n    }\n    case TYMED_ENHMF:\n    default:\n        ERR(\"unsupported tymed %d\\n\", a16->tymed);\n        break;\n    }\n}\nvoid map_stgmedium16_32(STGMEDIUM *a32, const STGMEDIUM16 *a16)\n{\n    map_stgmedium16_32_2(a32, a16, TRUE);\n}\n\nvoid map_oleverb16_32(OLEVERB* a32, const OLEVERB16 *a16)\n{\n    a32->fuFlags = a16->fuFlags;\n    a32->grfAttribs = a16->grfAttribs;\n    a32->lpszVerbName = strdupAtoW(MapSL(a16->lpszVerbName));\n    a32->lVerb = a16->lVerb;\n}\nvoid map_oleverb32_16(OLEVERB16* a16, const OLEVERB *a32)\n{\n    a16->fuFlags = a32->fuFlags;\n    a16->grfAttribs = a32->grfAttribs;\n    a16->lpszVerbName = MapLS(strdupWtoA(a32->lpszVerbName));\n    a16->lVerb = a32->lVerb;\n}\n\nvoid map_oleinplaceframeinfo16_32(OLEINPLACEFRAMEINFO *a32, const struct TYP16_tagOleInPlaceFrameInfo *a16)\n{\n    a32->hwndFrame = HWND_32(a16->hwndFrame);\n    a32->fMDIApp = a16->fMDIApp;\n    a32->cb = a16->cb;\n    a32->haccel = HACCEL_32(a16->haccel);\n    a32->cAccelEntries = a16->cAccelEntries;\n}\n\nvoid map_oleinplaceframeinfo32_16(struct TYP16_tagOleInPlaceFrameInfo *a16, const OLEINPLACEFRAMEINFO *a32)\n{\n    a16->cb = a32->cb;\n    a16->fMDIApp = a32->fMDIApp;\n    a16->hwndFrame = HWND_16(a32->hwndFrame);\n    a16->haccel = HACCEL_16(a32->haccel);\n    a16->cAccelEntries = a32->cAccelEntries;\n}\n\nvoid map_interfaceinfo16_32(INTERFACEINFO *a32, const INTERFACEINFO16 *a16)\n{\n    a32->pUnk = (IUnknown*)iface16_32(&IID_IUnknown, a16->pUnk);\n    a32->iid = a16->iid;\n    a32->wMethod = a16->wMethod;\n}\n\nvoid map_interfaceinfo32_16(INTERFACEINFO16 *a16, const INTERFACEINFO *a32)\n{\n    a16->pUnk = iface32_16(&IID_IUnknown, a32->pUnk);\n    a16->iid = a32->iid;\n    a16->wMethod = a32->wMethod;\n}\n\nvoid map_tlibattr16_32(TLIBATTR *a32, const TLIBATTR16 *a16)\n{\n    a32->guid = a16->guid;\n    a32->lcid = a16->lcid;\n    a32->syskind = a16->syskind;\n    a32->wLibFlags = a16->wLibFlags;\n    a32->wMajorVerNum = a16->wMajorVerNum;\n    a32->wMinorVerNum = a16->wMinorVerNum;\n}\n\nvoid map_tlibattr32_16(TLIBATTR16 *a16, const TLIBATTR *a32)\n{\n    a16->guid = a32->guid;\n    a16->lcid = a32->lcid;\n    a16->syskind = a32->syskind;\n    a16->wLibFlags = a32->wLibFlags;\n    a16->wMajorVerNum = a32->wMajorVerNum;\n    a16->wMinorVerNum = a32->wMinorVerNum;\n}\n\nstatic int dynamic_SysStringLen16(SEGPTR bstr);\nstatic void dynamic_SysFreeString16(SEGPTR bstr);\nvoid map_bstr16_32(BSTR *a32, const SEGPTR *a16)\n{\n    int len16, len32;\n    if (!*a16)\n    {\n        *a32 = NULL;\n        return;\n    }\n    len16 = dynamic_SysStringLen16(*a16);\n    len32 = MultiByteToWideChar(CP_ACP, 0, MapSL(*a16), len16, NULL, 0);\n    *a32 = SysAllocStringLen(NULL, len32);\n    MultiByteToWideChar(CP_ACP, 0, MapSL(*a16), len16 + 1, *a32, len32 + 1);\n}\n\nstatic int dynamic_SysAllocStringLen16(SEGPTR bstr, int len);\nvoid map_bstr32_16(SEGPTR *a16, const BSTR *a32)\n{\n    UINT len;\n    int len16;\n    if (*a32 == NULL)\n    {\n        *a16 = 0;\n        return;\n    }\n    len = SysStringLen(*a32);\n    len16 = WideCharToMultiByte(CP_ACP, 0, *a32, len, NULL, 0, NULL, NULL);\n    *a16 = dynamic_SysAllocStringLen16(NULL, len16);\n    WideCharToMultiByte(CP_ACP, 0, *a32, len, MapSL(*a16), len16, NULL, NULL);\n}\n\n#ifdef IFS1632_OVERWRITE_ITypeLib_IsName\nHRESULT CDECL ITypeLib_16_32_IsName(SEGPTR This, SEGPTR args16_szNameBuf, DWORD args16_lHashVal, SEGPTR args16_pfName)\n{\n    ITypeLib *iface32 = (ITypeLib*)get_interface32(This);\n    HRESULT result__ = { 0 };\n    TYP16_HRESULT result16__ = { 0 };\n    LPOLESTR args32_szNameBuf = { 0 };\n    ULONG args32_lHashVal;\n    BOOL args32_pfName = { 0 };\n    int szNameBufLen = lstrlenA((const char*)MapSL(args16_szNameBuf)) + 1;\n    int widelen = MultiByteToWideChar(CP_ACP, 0, (const char*)MapSL(args16_szNameBuf), szNameBufLen, NULL, 0);\n    args32_szNameBuf = HeapAlloc(GetProcessHeap(), 0, widelen * sizeof(OLECHAR));\n    MultiByteToWideChar(CP_ACP, 0, (const char*)MapSL(args16_szNameBuf), szNameBufLen + 1, args32_szNameBuf, widelen);\n    MAP_ULONG16_32(args32_lHashVal, args16_lHashVal);\n    TRACE(\"(%04x:%04x(%p),%s,%08x,%08x)\\n\", SELECTOROF(This), OFFSETOF(This), iface32, MapSL(args16_szNameBuf), args16_lHashVal, args16_pfName);\n    result__ = (HRESULT)iface32->lpVtbl->IsName(iface32, args32_szNameBuf, args32_lHashVal, &args32_pfName);\n    MAP_HRESULT32_16(result16__, result__);\n    UNMAP_ULONG16_32(args32_lHashVal, args16_lHashVal);\n    WideCharToMultiByte(CP_ACP, 0, args32_szNameBuf, widelen, (const char*)MapSL(args16_szNameBuf), szNameBufLen, NULL, NULL);\n    HeapFree(GetProcessHeap(), 0, args32_szNameBuf);\n    TRACE(\"(%s,%s)\\n\", MapSL(args16_szNameBuf), args32_pfName ? \"TRUE\" : \"FALSE\");\n    if (args16_pfName)\n    {\n        MAP_BOOL32_16((*(TYP16_BOOL*)MapSL(args16_pfName)), args32_pfName);\n    }\n    return result16__;\n}\n#endif\n\n#ifdef IFS1632_OVERWRITE_ITypeLib_FindName\nHRESULT CDECL ITypeLib_16_32_FindName(SEGPTR This, SEGPTR args16_szNameBuf, DWORD args16_lHashVal, SEGPTR args16_ppTInfo, SEGPTR args16_rgMemId, SEGPTR args16_pcFound)\n{\n    ITypeLib *iface32 = (ITypeLib*)get_interface32(This);\n    HRESULT result__ = { 0 };\n    TYP16_HRESULT result16__ = { 0 };\n    OLECHAR *args32_szNameBuf = { 0 };\n    ULONG args32_lHashVal;\n    int i__;\n    void *dst__;\n    ITypeInfo * *args32_ppTInfo;\n    MEMBERID *args32_rgMemId;\n    USHORT args32_pcFound = { 0 };\n    int szNameBufLen = lstrlenA((const char*)MapSL(args16_szNameBuf)) + 1;\n    int widelen = MultiByteToWideChar(CP_ACP, 0, (const char*)MapSL(args16_szNameBuf), szNameBufLen, NULL, 0);\n    args32_szNameBuf = HeapAlloc(GetProcessHeap(), 0, widelen * sizeof(OLECHAR));\n    MultiByteToWideChar(CP_ACP, 0, (const char*)MapSL(args16_szNameBuf), szNameBufLen + 1, args32_szNameBuf, widelen);\n    MAP_ULONG16_32(args32_lHashVal, args16_lHashVal);\n    INMAP_PTR_USHORT16_32(args32_pcFound, args16_pcFound);\n    args32_ppTInfo = IFACE_ALLOC_ARRAY(ITypeInfo *, *(&args32_pcFound));\n    args32_rgMemId = IFACE_ALLOC_ARRAY(MEMBERID, *(&args32_pcFound));\n    TRACE(\"(%04x:%04x(%p),%08x,%08x,%08x,%08x,%08x)\\n\", SELECTOROF(This), OFFSETOF(This), iface32, args16_szNameBuf, args16_lHashVal, args16_ppTInfo, args16_rgMemId, args16_pcFound);\n    result__ = (HRESULT)iface32->lpVtbl->FindName(iface32, args32_szNameBuf, args32_lHashVal, args32_ppTInfo, args32_rgMemId, &args32_pcFound);\n    MAP_HRESULT32_16(result16__, result__);\n    UNMAP_ULONG16_32(args32_lHashVal, args16_lHashVal);\n    WideCharToMultiByte(CP_ACP, 0, args32_szNameBuf, widelen, (const char*)MapSL(args16_szNameBuf), szNameBufLen, NULL, NULL);\n    HeapFree(GetProcessHeap(), 0, args32_szNameBuf);\n    dst__ = MapSL(args16_ppTInfo);\n    for (i__ = 0; i__ < (*(&args32_pcFound)); i__++)\n    {\n        ((SEGPTR*)(dst__))[i__] = iface32_16(&IID_ITypeInfo, args32_ppTInfo[i__]);\n    }\n    IFACE_FREE_ARRAY(args32_ppTInfo);\n    dst__ = MapSL(args16_rgMemId);\n    for (i__ = 0; i__ < (*(&args32_pcFound)); i__++)\n    {\n        MAP_MEMBERID32_16((((TYP16_MEMBERID*)(dst__))[i__]), args32_rgMemId[i__]);\n    }\n    IFACE_FREE_ARRAY(args32_rgMemId);\n    if (args16_pcFound)\n    {\n        OUTMAP_USHORT32_16((*(TYP16_USHORT*)MapSL(args16_pcFound)), args32_pcFound);\n    }\n    return result16__;\n}\n#endif\n\n#ifdef IFS3216_OVERWRITE_ITypeLib_IsName\nHRESULT STDMETHODCALLTYPE ITypeLib_32_16_IsName(ITypeLib *This, LPOLESTR szNameBuf, ULONG lHashVal, BOOL *pfName)\n{\n    SEGPTR iface16 = get_interface16(This);\n    TYP16_HRESULT result__ = { 0 };\n    HRESULT result32__ = { 0 };\n    TYP16_OLECHAR args16_szNameBuf = { 0 };\n    TYP16_ULONG args16_lHashVal;\n    TYP16_BOOL args16_pfName = { 0 };\n    INMAP_LPOLESTR32_16(args16_szNameBuf, szNameBuf);\n    MAP_ULONG32_16(args16_lHashVal, lHashVal);\n    TRACE(\"(%p(%04x:%04x),%p,%08x,%p)\\n\", This, SELECTOROF(iface16), OFFSETOF(iface16), szNameBuf, lHashVal, pfName);\n    result__ = (TYP16_HRESULT)ITypeLib16_IsName(iface16, MapLS(&args16_szNameBuf), args16_lHashVal, MapLS(&args16_pfName));\n    MAP_HRESULT16_32(result32__, result__);\n    UNMAP_LPOLESTR32_16(args16_szNameBuf, szNameBuf);\n    UNMAP_ULONG32_16(args16_lHashVal, lHashVal);\n    if (szNameBuf)\n    {\n        MAP_OLECHAR16_32(*szNameBuf, args16_szNameBuf);\n    }\n    if (pfName)\n    {\n        MAP_BOOL16_32(*pfName, args16_pfName);\n    }\n    return result32__;\n}\n#endif\n#define FUNCDESC16_WRAPPER_MAGIC 'FDSC'\ntypedef struct\n{\n    DWORD magic;\n    FUNCDESC *desc32;\n    FUNCDESC16 desc16;\n} FUNCDESC16_WRAPPER;\nvoid map_typedesc32_16(TYPEDESC16 *a16, const TYPEDESC *a32);\nvoid map_typedesc16_32(TYPEDESC *a32, const TYPEDESC16 *a16);\nvoid map_arraydesc32_16(ARRAYDESC16 *a16, const ARRAYDESC *a32)\n{\n    int i;\n    a16->cDims = a32->cDims;\n    map_typedesc32_16(&a16->tdescElem, &a32->tdescElem);\n    for (i = 0; i < a16->cDims; i++)\n    {\n        a16->rgbounds[i].cElements = a32->rgbounds[i].cElements;\n        a16->rgbounds[i].lLbound = a32->rgbounds[i].lLbound;\n    }\n}\nvoid map_arraydesc16_32(ARRAYDESC16 *a32, const ARRAYDESC *a16)\n{\n    int i;\n    a32->cDims = a16->cDims;\n    map_typedesc16_32(&a32->tdescElem, &a16->tdescElem);\n    for (i = 0; i < a32->cDims; i++)\n    {\n        a32->rgbounds[i].cElements = a16->rgbounds[i].cElements;\n        a32->rgbounds[i].lLbound = a16->rgbounds[i].lLbound;\n    }\n}\nvoid map_idldesc32_16(IDLDESC16 *a16, const IDLDESC *a32)\n{\n    map_bstr32_16(&a16->bstrIDLInfo, a32);\n    a16->wIDLFlags = a32->wIDLFlags;\n    TRACE(\"(%04x)\\n\", a16->wIDLFlags);\n}\nvoid map_idldesc16_32(IDLDESC16 *a32, const IDLDESC *a16)\n{\n    map_bstr16_32(&a32->bstrIDLInfo, a16);\n    a32->wIDLFlags = a16->wIDLFlags;\n    TRACE(\"(%04x)\\n\", a32->wIDLFlags);\n}\nvoid map_typedesc32_16(TYPEDESC16 *a16, const TYPEDESC *a32)\n{\n    a16->vt = a32->vt;\n    switch (a32->vt)\n    {\n    case VT_PTR:\n    {\n        TYPEDESC16 *typ = (TYPEDESC16*)HeapAlloc(GetProcessHeap(), 0, sizeof(TYPEDESC16));\n        map_typedesc32_16(typ, a32->lptdesc);\n        a16->lptdesc = MapLS(typ);\n        TRACE(\"VT_PTR\\n\");\n        break;\n    }\n    case VT_CARRAY:\n    {\n        ARRAYDESC16 *ary = (ARRAYDESC16*)HeapAlloc(GetProcessHeap(), 0, sizeof(ARRAYDESC16) - sizeof(SAFEARRAYBOUND16) * (a32->lpadesc->cDims - 1));\n        map_arraydesc32_16(ary, a32->lpadesc);\n        a16->lpadesc = MapLS(ary);\n        TRACE(\"VT_CARRAY\\n\");\n        break;\n    }\n    case VT_USERDEFINED:\n        a16->hreftype = a32->hreftype;\n        TRACE(\"VT_USERDEFINED hreftype:%08x\\n\", a16->hreftype);\n        break;\n    default:\n        a16->hreftype = 0xdeadbeef;\n        TRACE(\"%s\\n\", debugstr_vt(a16->vt));\n        break;\n    }\n}\nvoid map_typedesc16_32(TYPEDESC *a32, const TYPEDESC16 *a16)\n{\n    a32->vt = a16->vt;\n    switch (a16->vt)\n    {\n    case VT_PTR:\n    {\n        TYPEDESC *typ = (TYPEDESC*)HeapAlloc(GetProcessHeap(), 0, sizeof(TYPEDESC));\n        map_typedesc16_32(typ, MapSL(a16->lptdesc));\n        a32->lptdesc = typ;\n        TRACE(\"VT_PTR\\n\");\n        break;\n    }\n    case VT_CARRAY:\n    {\n        ARRAYDESC16 *ary16 = MapSL(a16->lpadesc);\n        ARRAYDESC *ary = (ARRAYDESC*)HeapAlloc(GetProcessHeap(), 0, sizeof(ARRAYDESC) - sizeof(SAFEARRAYBOUND) * (ary16->cDims - 1));\n        map_arraydesc16_32(ary, ary16);\n        a32->lpadesc = ary;\n        TRACE(\"VT_CARRAY\\n\");\n        break;\n    }\n    case VT_USERDEFINED:\n        a32->hreftype = a16->hreftype;\n        TRACE(\"VT_USERDEFINED hreftype:%08x\\n\", a32->hreftype);\n        break;\n    default:\n        a32->hreftype = 0xdeadbeef;\n        TRACE(\"%s\\n\", debugstr_vt(a32->vt));\n        break;\n    }\n}\nvoid map_elemdesc32_16(ELEMDESC16 *a16, const ELEMDESC *a32)\n{\n    map_typedesc32_16(&a16->tdesc, &a32->tdesc);\n    map_idldesc32_16(&a16->idldesc, &a32->idldesc);\n    TRACE(\"\\n\");\n}\nvoid map_elemdesc16_32(ELEMDESC *a32, const ELEMDESC16 *a16)\n{\n    map_typedesc16_32(&a32->tdesc, &a16->tdesc);\n    if (a32->tdesc.vt != VT_EMPTY)\n        map_idldesc16_32(&a32->idldesc, &a16->idldesc);\n    TRACE(\"\\n\");\n}\n\nFUNCDESC *map_funcdesc32(const FUNCDESC16 *a16)\n{\n    ELEMDESC *elm32;\n    FUNCDESC *a32 = HeapAlloc(GetProcessHeap(), 0, sizeof(FUNCDESC) + sizeof(ELEMDESC) * a16->cParams);\n    elm32 = (ELEMDESC*)(a32 + 1);\n    a32->memid = a16->memid;\n    a32->lprgscode = MapSL(a16->lprgscode);\n    a32->lprgelemdescParam = elm32;\n    for (int i = 0; i < a16->cParams; i++)\n    {\n        map_elemdesc16_32(elm32 + i, (ELEMDESC16 *)MapSL(a16->lprgelemdescParam) + i);\n    }\n    a32->funckind = a16->funckind;\n    a32->invkind = a16->invkind;\n    a32->callconv = a16->callconv;\n    a32->cParams = a16->cParams;\n    a32->cParamsOpt = a16->cParamsOpt;\n    a32->oVft = a16->oVft;\n    a32->cScodes = a16->cScodes;\n    map_elemdesc16_32(&a32->elemdescFunc, &a16->elemdescFunc);\n    a32->wFuncFlags = a16->wFuncFlags;\n    return a32;\n}\n\nFUNCDESC16 *map_funcdesc16(const FUNCDESC *a32)\n{\n    int i;\n    FUNCDESC16 *a16;\n    ELEMDESC16 *elm16;\n    FUNCDESC16_WRAPPER *w;\n    if (!a32)\n        return NULL;\n    w = HeapAlloc(GetProcessHeap(), 0, sizeof(FUNCDESC16_WRAPPER) + sizeof(ELEMDESC16) * a32->cParams);\n    w->magic = FUNCDESC16_WRAPPER_MAGIC;\n    w->desc32 = a32;\n    a16 = &w->desc16;\n    elm16 = (ELEMDESC16*)(a16 + 1);\n    a16->memid = a32->memid;\n    a16->lprgscode = MapLS(a32->lprgscode);\n    a16->lprgelemdescParam = MapLS(elm16);\n    for (i = 0; i < a32->cParams; i++)\n    {\n        map_elemdesc32_16(elm16 + i, a32->lprgelemdescParam + i);\n    }\n    a16->funckind = a32->funckind;\n    a16->invkind = a32->invkind;\n    a16->callconv = a32->callconv;\n    a16->cParams = a32->cParams;\n    a16->cParamsOpt = a32->cParamsOpt;\n    a16->oVft = a32->oVft;\n    a16->cScodes = a32->cScodes;\n    map_elemdesc32_16(&a16->elemdescFunc, &a32->elemdescFunc);\n    a16->wFuncFlags = a32->wFuncFlags;\n    return a16;\n}\n\nvoid free_arraydesc16(ARRAYDESC16 *a16)\n{\n}\n\nvoid free_typedesc16(TYPEDESC16 *a16)\n{\n    switch (a16->vt)\n    {\n    case VT_PTR:\n    {\n        TYPEDESC16 *typ = (TYPEDESC16*)MapSL(a16->lptdesc);\n        free_typedesc16(typ);\n        HeapFree(GetProcessHeap(), 0, typ);\n        break;\n    }\n    case VT_CARRAY:\n    {\n        ARRAYDESC16 *ary = (ARRAYDESC16*)MapSL(a16->lpadesc);\n        free_arraydesc16(ary);\n        HeapFree(GetProcessHeap(), 0, ary);\n        break;\n    }\n    }\n}\n\nvoid free_idldesc16(IDLDESC16 *a16)\n{\n    dynamic_SysFreeString16(a16->bstrIDLInfo);\n}\nvoid free_elemdesc16(ELEMDESC16 *a16)\n{\n    free_typedesc16(&a16->tdesc);\n    free_idldesc16(&a16->idldesc);\n}\nvoid free_funcdesc16(FUNCDESC16 *a16)\n{\n    int i;\n    ELEMDESC16 *elm16;\n    elm16 = (ELEMDESC16*)(a16 + 1);\n    free_elemdesc16(&a16->elemdescFunc);\n    for (i = 0; i < a16->cParams; i++)\n    {\n        free_elemdesc16(elm16 + i);\n    }\n}\n#ifdef IFS1632_OVERWRITE_ITypeInfo_ReleaseFuncDesc\nvoid CDECL ITypeInfo_16_32_ReleaseFuncDesc(SEGPTR This, SEGPTR args16_pFuncDesc)\n{\n    ITypeInfo *iface32 = (ITypeInfo*)get_interface32(This);\n    FUNCDESC16 *desc16 = (FUNCDESC16*)MapSL(args16_pFuncDesc);\n    FUNCDESC16_WRAPPER *wrap = CONTAINING_RECORD(desc16, FUNCDESC16_WRAPPER, desc16);\n    FUNCDESC *args32_pFuncDesc;\n    if (wrap->magic != FUNCDESC16_WRAPPER_MAGIC)\n    {\n        ERR(\"wrap->magic != FUNCDESC16_WRAPPER_MAGIC\\n\");\n        return;\n    }\n    args32_pFuncDesc = wrap->desc32;\n    TRACE(\"(%04x:%04x(%p),%08x)\\n\", SELECTOROF(This), OFFSETOF(This), iface32, args16_pFuncDesc);\n    iface32->lpVtbl->ReleaseFuncDesc(iface32, args32_pFuncDesc);\n    free_funcdesc16(&wrap->desc16);\n    UnMapLS(args16_pFuncDesc);\n    HeapFree(GetProcessHeap(), 0, wrap);\n}\n#endif\n#ifdef IFS3216_OVERWRITE_ITypeInfo_ReleaseFuncDesc\nvoid STDMETHODCALLTYPE ITypeInfo_32_16_ReleaseFuncDesc(ITypeInfo *This, FUNCDESC *pFuncDesc)\n{\n    FIXME(\"\\n\");\n    return;\n    SEGPTR iface16 = get_interface16(This);\n    SEGPTR args16_pFuncDesc;\n    MAP_PTR_FUNCDESC32_16(args16_pFuncDesc, pFuncDesc);\n    TRACE(\"(%p(%04x:%04x),%p)\\n\", This, SELECTOROF(iface16), OFFSETOF(iface16), pFuncDesc);\n    ITypeInfo16_ReleaseFuncDesc(iface16, args16_pFuncDesc);\n    UNMAP_PTR_FUNCDESC32_16(args16_pFuncDesc, pFuncDesc);\n}\n#endif\n\n#define TYPEATTR16_WRAPPER_MAGIC 'tATR'\ntypedef struct\n{\n    DWORD magic;\n    TYPEATTR *attr32;\n    TYPEATTR16 attr16;\n} TYPEATTR16_WRAPPER;\nTYPEATTR16 *map_typeattr32_16(const TYPEATTR *a32)\n{\n    TYPEATTR16_WRAPPER *w = (TYPEATTR16_WRAPPER*)HeapAlloc(GetProcessHeap(), 0, sizeof(TYPEATTR16_WRAPPER));\n    TYPEATTR16 *a16 = &w->attr16;\n    w->magic = TYPEATTR16_WRAPPER_MAGIC;\n    w->attr32 = a32;\n    a16->guid = a32->guid;\n    a16->lcid = a32->lcid;\n    a16->dwReserved = a32->dwReserved;\n    a16->memidConstructor = a32->memidConstructor;\n    a16->memidDestructor = a32->memidDestructor;\n    a16->lpstrSchema = a32->lpstrSchema /* FIXME? */;\n    a16->typekind = a32->typekind;\n    a16->cFuncs = a32->cFuncs;\n    a16->cVars = a32->cVars;\n    a16->cImplTypes = a32->cImplTypes;\n    a16->cbSizeVft = a32->cbSizeVft;\n    a16->cbAlignment = a32->cbAlignment;\n    a16->wTypeFlags = a32->wTypeFlags;\n    a16->wMajorVerNum = a32->wMajorVerNum;\n    a16->wMinorVerNum = a32->wMinorVerNum;\n    TRACE(\"{guid:%s,lcid:0x%04x,dwReserved:%d,memidConstructor:0x%08x,memidDestructor:0x%08x,lpstrSchema:%08x\"\n        \",typekind:%d,cFuncs:%d,cVars:%d,cImplTypes:%d,cbSizeVft:%d,cbAlignment:%d,wTypeFlags:0x%04x,wMajorVerNum:%d,wMinorVerNum:%d}\\n\",\n        debugstr_guid(&a16->guid), a16->lcid, a16->dwReserved, a16->memidConstructor,\n        a16->memidDestructor, a16->lpstrSchema, a16->typekind, a16->cFuncs, a16->cVars, \n        a16->cImplTypes, a16->cbSizeVft, a16->cbAlignment, a16->wTypeFlags, a16->wMajorVerNum, a16->wMinorVerNum);\n    map_typedesc32_16(&a16->tdescAlias, &a32->tdescAlias);\n    map_idldesc32_16(&a16->idldescType, &a32->idldescType);\n    return a16;\n}\n\nvoid free_typeattr16(TYPEATTR16 *a16)\n{\n    free_typedesc16(&a16->tdescAlias);\n    free_idldesc16(&a16->idldescType);\n}\n\n#ifdef IFS1632_OVERWRITE_ITypeInfo_ReleaseTypeAttr\nvoid CDECL ITypeInfo_16_32_ReleaseTypeAttr(SEGPTR This, SEGPTR args16_pTypeAttr)\n{\n    ITypeInfo *iface32 = (ITypeInfo*)get_interface32(This);\n    TYPEATTR *args32_pTypeAttr;\n    TYPEATTR16_WRAPPER *w = CONTAINING_RECORD(MapSL(args16_pTypeAttr), TYPEATTR16_WRAPPER, attr16);\n    if (w->magic != TYPEATTR16_WRAPPER_MAGIC)\n    {\n        ERR(\"w->magic != TYPEATTR16_WRAPPER_MAGIC\\n\");\n        return;\n    }\n    args32_pTypeAttr = w->attr32;\n    TRACE(\"(%04x:%04x(%p),%08x)\\n\", SELECTOROF(This), OFFSETOF(This), iface32, args16_pTypeAttr);\n    iface32->lpVtbl->ReleaseTypeAttr(iface32, args32_pTypeAttr);\n    free_typeattr16(&w->attr16);\n    HeapFree(GetProcessHeap(), 0, w);\n}\n#endif\n#ifdef IFS3216_OVERWRITE_ITypeInfo_ReleaseTypeAttr\nvoid STDMETHODCALLTYPE ITypeInfo_32_16_ReleaseTypeAttr(ITypeInfo *This, TYPEATTR *pTypeAttr)\n{\n    SEGPTR iface16 = get_interface16(This);\n    SEGPTR args16_pTypeAttr;\n    FIXME(\"\\n\");\n    return;\n    MAP_PTR_TYPEATTR32_16(args16_pTypeAttr, pTypeAttr);\n    TRACE(\"(%p(%04x:%04x),%p)\\n\", This, SELECTOROF(iface16), OFFSETOF(iface16), pTypeAttr);\n    ITypeInfo16_ReleaseTypeAttr(iface16, args16_pTypeAttr);\n    UNMAP_PTR_TYPEATTR32_16(args16_pTypeAttr, pTypeAttr);\n}\n#endif\n\nVARDESC *map_vardesc32(const VARDESC16 *a16)\n{\n    VARDESC *a32 = (VARDESC*)HeapAlloc(GetProcessHeap(), 0, sizeof(VARDESC));\n    a16 = (VARDESC16 *)MapSL(a16);\n    a32->memid = a16->memid;\n    a32->lpstrSchema = a16->lpstrSchema;\n    map_elemdesc16_32(&a32->elemdescVar, &a16->elemdescVar);\n    a32->wVarFlags = a16->wVarFlags;\n    a32->varkind = a16->varkind;\n    a32->lpvarValue = 0xcafebabe;\n    if (a16->varkind == VAR_CONST)\n    {\n        FIXME(\"VAR_CONST\\n\");\n        a32->lpvarValue = MapSL(a16->lpvarValue);\n    }\n    if (a32->varkind == VAR_PERINSTANCE)\n    {\n        a32->oInst = a16->oInst;\n    }\n    TRACE(\"{memid:0x%08x,lpstrSchema:%d,wVarFlags:0x%04x,varkind:%d,lpvarValue:0x%08x}\\n\", a32->memid, a32->lpstrSchema, a32->wVarFlags, a32->varkind, a32->lpvarValue);\n    return a32;\n}\n\n#define VARDESC16_WRAPPER_MAGIC 'Vmag'\ntypedef struct\n{\n    DWORD magic;\n    VARDESC *desc32;\n    VARDESC16 desc16;\n} VARDESC16_WRAPPER;\n\nVARDESC16 *map_vardesc16(const VARDESC *a32)\n{\n    VARDESC16_WRAPPER *w = (VARDESC16_WRAPPER*)HeapAlloc(GetProcessHeap(), 0, sizeof(VARDESC16_WRAPPER));\n    VARDESC16 *a16 = &w->desc16;\n    w->magic = VARDESC16_WRAPPER_MAGIC;\n    w->desc32 = a32;\n    a16->memid = a32->memid;\n    a16->lpstrSchema = a32->lpstrSchema;\n    map_elemdesc32_16(&a16->elemdescVar, &a32->elemdescVar);\n    a16->wVarFlags = a32->wVarFlags;\n    a16->varkind = a32->varkind;\n    a16->lpvarValue = 0xcafebabe;\n    if (a16->varkind == VAR_CONST)\n    {\n        FIXME(\"VAR_CONST\\n\");\n        a16->lpvarValue = MapLS(a32->lpvarValue);\n    }\n    if (a16->varkind == VAR_PERINSTANCE)\n    {\n        a16->oInst = a32->oInst;\n    }\n    TRACE(\"{memid:0x%08x,lpstrSchema:%d,wVarFlags:0x%04x,varkind:%d,lpvarValue:0x%08x}\\n\", a16->memid, a16->lpstrSchema, a16->wVarFlags, a16->varkind, a16->lpvarValue);\n    return a16;\n}\n\nvoid free_vardesc16(VARDESC16 *a16)\n{\n    if (a16->varkind == VAR_CONST)\n    {\n        FIXME(\"VAR_CONST\\n\");\n        UnMapLS(a16->lpvarValue);\n    }\n    free_elemdesc16(&a16->elemdescVar);\n}\n\nvoid map_bindptr16_32(BINDPTR *a32, const BINDPTR16 *a16, const DESCKIND kind)\n{\n    switch (kind)\n    {\n    case DESCKIND_NONE:\n        TRACE(\"DESCKIND_NONE\\n\");\n        break;\n    case DESCKIND_VARDESC:\n        TRACE(\"DESCKIND_VARDESC\\n\");\n        a32->lpvardesc = map_vardesc32((VARDESC16*)MapSL(a16->lpvardesc));\n        break;\n    case DESCKIND_FUNCDESC:\n        TRACE(\"DESCKIND_FUNCDESC\\n\");\n        a32->lpfuncdesc = map_funcdesc32((FUNCDESC16*)MapSL(a16->lpfuncdesc));\n        break;\n    case DESCKIND_TYPECOMP:\n        TRACE(\"DESCKIND_TYPECOMP\\n\");\n        a32->lptcomp = (ITypeComp*)iface16_32(&IID_ITypeComp, a16->lptcomp);\n        break;\n    case DESCKIND_IMPLICITAPPOBJ:\n        TRACE(\"DESCKIND_IMPLICITAPPOBJ\\n\");\n        a32->lpvardesc = map_vardesc32((VARDESC16*)MapSL(a16->lpvardesc));\n        break;\n    default:\n        FIXME(\"unknown DESCKIND %d\\n\", kind);\n        break;\n    }\n}\n\nvoid map_bindptr32_16(BINDPTR16 *a16, const BINDPTR *a32, TYP16_DESCKIND kind)\n{\n    switch (kind)\n    {\n    case DESCKIND_NONE:\n        TRACE(\"DESCKIND_NONE\\n\");\n        break;\n    case DESCKIND_VARDESC:\n        TRACE(\"DESCKIND_VARDESC\\n\");\n        a16->lpvardesc = MapLS(map_vardesc16(a32->lpvardesc));\n        break;\n    case DESCKIND_FUNCDESC:\n        TRACE(\"DESCKIND_FUNCDESC\\n\");\n        a16->lpfuncdesc = MapLS(map_funcdesc16(a32->lpfuncdesc));\n        break;\n    case DESCKIND_TYPECOMP:\n        TRACE(\"DESCKIND_TYPECOMP\\n\");\n        a16->lptcomp = iface32_16(&IID_ITypeComp, a32->lptcomp);\n        break;\n    case DESCKIND_IMPLICITAPPOBJ:\n        TRACE(\"DESCKIND_IMPLICITAPPOBJ\\n\");\n        a16->lpvardesc = MapLS(map_vardesc16(a32->lpvardesc));\n        break;\n    default:\n        FIXME(\"unknown DESCKIND %d\\n\", kind);\n        break;\n    }\n}\n#ifdef IFS1632_OVERWRITE_ITypeComp_Bind\nHRESULT CDECL ITypeComp_16_32_Bind(SEGPTR This, SEGPTR args16_szName, DWORD args16_lHashVal, WORD args16_wFlags, SEGPTR args16_ppTInfo, SEGPTR args16_pDescKind, SEGPTR args16_pBindPtr)\n{\n    ITypeComp *iface32 = (ITypeComp*)get_interface32(This);\n    HRESULT result__ = { 0 };\n    TYP16_HRESULT result16__ = { 0 };\n    LPOLESTR args32_szName;\n    ULONG args32_lHashVal;\n    WORD args32_wFlags;\n    ITypeInfo * args32_ppTInfo = { 0 };\n    DESCKIND args32_pDescKind = { 0 };\n    BINDPTR args32_pBindPtr = { 0 };\n    MAP_LPOLESTR16_32(args32_szName, args16_szName);\n    MAP_ULONG16_32(args32_lHashVal, args16_lHashVal);\n    MAP_WORD16_32(args32_wFlags, args16_wFlags);\n    TRACE(\"(%04x:%04x(%p),%s,%08x,%08x,%08x,%08x,%08x)\\n\", SELECTOROF(This), OFFSETOF(This), iface32, MapSL(args16_szName), args16_lHashVal, args16_wFlags, args16_ppTInfo, args16_pDescKind, args16_pBindPtr);\n    result__ = (HRESULT)iface32->lpVtbl->Bind(iface32, args32_szName, args32_lHashVal, args32_wFlags, &args32_ppTInfo, &args32_pDescKind, &args32_pBindPtr);\n    MAP_HRESULT32_16(result16__, result__);\n    UNMAP_LPOLESTR16_32(args32_szName, args16_szName);\n    UNMAP_ULONG16_32(args32_lHashVal, args16_lHashVal);\n    UNMAP_WORD16_32(args32_wFlags, args16_wFlags);\n    if (args16_ppTInfo)\n    {\n        *(SEGPTR*)MapSL(args16_ppTInfo) = iface32_16(&IID_ITypeInfo, args32_ppTInfo);\n    }\n    if (args16_pDescKind)\n    {\n        MAP_DESCKIND32_16((*(TYP16_DESCKIND*)MapSL(args16_pDescKind)), args32_pDescKind);\n    }\n    if (args16_pBindPtr)\n    {\n        /**/\n        map_bindptr32_16(&(*(TYP16_BINDPTR*)MapSL(args16_pBindPtr)), &args32_pBindPtr, args32_pDescKind);\n        /**/\n    }\n    return result16__;\n}\n#endif\n#ifdef IFS3216_OVERWRITE_ITypeComp_Bind\nHRESULT STDMETHODCALLTYPE ITypeComp_32_16_Bind(ITypeComp *This, LPOLESTR szName, ULONG lHashVal, WORD wFlags, ITypeInfo **ppTInfo, DESCKIND *pDescKind, BINDPTR *pBindPtr)\n{\n    SEGPTR iface16 = get_interface16(This);\n    TYP16_HRESULT result__ = { 0 };\n    HRESULT result32__ = { 0 };\n    TYP16_LPOLESTR args16_szName;\n    TYP16_ULONG args16_lHashVal;\n    TYP16_WORD args16_wFlags;\n    SEGPTR args16_ppTInfo = { 0 };\n    TYP16_DESCKIND args16_pDescKind = { 0 };\n    TYP16_BINDPTR args16_pBindPtr = { 0 };\n    MAP_LPOLESTR32_16(args16_szName, szName);\n    MAP_ULONG32_16(args16_lHashVal, lHashVal);\n    MAP_WORD32_16(args16_wFlags, wFlags);\n    TRACE(\"(%p(%04x:%04x),%p,%08x,%08x,%p,%p,%p)\\n\", This, SELECTOROF(iface16), OFFSETOF(iface16), szName, lHashVal, wFlags, ppTInfo, pDescKind, pBindPtr);\n    result__ = (TYP16_HRESULT)ITypeComp16_Bind(iface16, args16_szName, args16_lHashVal, args16_wFlags, MapLS(&args16_ppTInfo), MapLS(&args16_pDescKind), MapLS(&args16_pBindPtr));\n    MAP_HRESULT16_32(result32__, result__);\n    UNMAP_LPOLESTR32_16(args16_szName, szName);\n    UNMAP_ULONG32_16(args16_lHashVal, lHashVal);\n    UNMAP_WORD32_16(args16_wFlags, wFlags);\n    if (ppTInfo)\n    {\n        *ppTInfo = iface16_32(&IID_ITypeInfo, args16_ppTInfo);\n    }\n    if (pDescKind)\n    {\n        MAP_DESCKIND16_32(*pDescKind, args16_pDescKind);\n    }\n    if (pBindPtr)\n    {\n        /**/\n        map_bindptr16_32(&*pBindPtr, &args16_pBindPtr, args16_pDescKind);\n        /**/\n    }\n    return result32__;\n}\n#endif\n\n#ifdef IFS1632_OVERWRITE_ITypeInfo_ReleaseVarDesc\nvoid CDECL ITypeInfo_16_32_ReleaseVarDesc(SEGPTR This, SEGPTR args16_pVarDesc)\n{\n    ITypeInfo *iface32 = (ITypeInfo*)get_interface32(This);\n    VARDESC * args32_pVarDesc;\n\n    /**/\n    VARDESC16 *desc16 = (VARDESC16*)MapSL(args16_pVarDesc);\n    VARDESC16_WRAPPER *w = CONTAINING_RECORD(desc16, VARDESC16_WRAPPER, desc16);\n    if (w->magic != VARDESC16_WRAPPER_MAGIC)\n    {\n        ERR(\"w->magic != VARDESC16_WRAPPER_MAGIC\\n\");\n        return;\n    }\n    args32_pVarDesc = w->desc32;\n    /**/\n    \n    TRACE(\"(%04x:%04x(%p),%08x)\\n\", SELECTOROF(This), OFFSETOF(This), iface32, args16_pVarDesc);\n    iface32->lpVtbl->ReleaseVarDesc(iface32, args32_pVarDesc);\n    /**/\n    free_vardesc16(desc16);\n    UnMapLS(args16_pVarDesc);\n    HeapFree(GetProcessHeap(), 0, w);\n    /**/\n}\n#endif\n#ifdef IFS3216_OVERWRITE_ITypeInfo_ReleaseVarDesc\nvoid STDMETHODCALLTYPE ITypeInfo_32_16_ReleaseVarDesc(ITypeInfo *This, VARDESC *pVarDesc)\n{\n    SEGPTR iface16 = get_interface16(This);\n    SEGPTR args16_pVarDesc;\n    MAP_PTR_VARDESC32_16(args16_pVarDesc, pVarDesc);\n    FIXME(\"\\n\");\n    TRACE(\"(%p(%04x:%04x),%p)\\n\", This, SELECTOROF(iface16), OFFSETOF(iface16), pVarDesc);\n    ITypeInfo16_ReleaseVarDesc(iface16, args16_pVarDesc);\n    UNMAP_PTR_VARDESC32_16(args16_pVarDesc, pVarDesc);\n}\n#endif\n\n#ifndef VT_EXTRA_TYPE\n#define VT_EXTRA_TYPE (VT_VECTOR|VT_ARRAY|VT_BYREF|VT_RESERVED)\n#endif\nvoid map_variant32_16(VARIANT16 *dst, const VARIANT *src)\n{\n    enum VARENUM t = V_VT(src) & VT_TYPEMASK;\n    enum VARENUM e = V_VT(src) & VT_EXTRA_TYPE;\n    dst->llVal = src->llVal;\n    dst->vt = src->vt;\n    if (V_ISARRAY(src))\n    {\n        FIXME(\"V_ISARRAY\\n\");\n        return;\n    }\n    else if (V_VT(src) == (VT_BSTR | VT_BYREF))\n    {\n        FIXME(\"VT_BSTR | VT_BYREF\\n\");\n    }\n    else if (V_VT(src) == (VT_DISPATCH | VT_BYREF) || V_VT(src) == (VT_UNKNOWN | VT_BYREF))\n    {\n        FIXME(\"t32 == (VT_DISPATCH | VT_BYREF) || t32 == (VT_UNKNOWN | VT_BYREF)\\n\");\n    }\n    else if (V_VT(src) == (VT_VARIANT | VT_BYREF))\n    {\n        FIXME(\"VT_VARIANT | VT_BYREF\\n\");\n    }\n    else if (V_VT(src) == (VT_DECIMAL | VT_BYREF))\n    {\n        FIXME(\"VT_DECIMAL\\n\");\n    }\n    else\n    {\n        if (e & VT_ARRAY)\n        {\n            FIXME(\"VT_ARRAY\\n\");\n        }\n        if (e & VT_VECTOR)\n        {\n            FIXME(\"VT_VECTOR\\n\");\n        }\n        if (e & VT_BYREF)\n        {\n            switch (t)\n            {\n            case VT_EMPTY:\n            case VT_NULL:\n            case VT_VOID:\n                break;\n            case VT_I2:\n            case VT_I4:\n            case VT_R4:\n            case VT_R8:\n            case VT_CY:\n            case VT_DATE:\n            case VT_ERROR:\n            case VT_BOOL:\n            case VT_I1:\n            case VT_UI1:\n            case VT_UI2:\n            case VT_UI4:\n            case VT_I8:\n            case VT_UI8:\n            case VT_INT:\n            case VT_UINT:\n            case VT_HRESULT:\n                dst->plVal = MapLS(src->plVal);\n                return;\n            case VT_DECIMAL:\n                return;\n            case VT_DISPATCH:\n            case VT_BSTR:\n            case VT_UNKNOWN:\n            case VT_VARIANT:\n            case VT_PTR:\n            case VT_SAFEARRAY:\n            case VT_CARRAY:\n            case VT_USERDEFINED:\n            case VT_LPSTR:\n            case VT_LPWSTR:\n            case VT_RECORD:\n            case VT_INT_PTR:\n            case VT_UINT_PTR:\n            case VT_FILETIME:\n            case VT_BLOB:\n            case VT_STREAM:\n            case VT_STORAGE:\n            case VT_STREAMED_OBJECT:\n            case VT_STORED_OBJECT:\n            case VT_BLOB_OBJECT:\n            case VT_CF:\n            case VT_CLSID:\n            case VT_VERSIONED_STREAM:\n            case VT_BSTR_BLOB:\n                FIXME(\"unsupported %s\\n\", debugstr_vt(src->vt));\n                break;\n            default:\n                FIXME(\"unknown %s\\n\", debugstr_vt(src->vt));\n                return;\n            }\n        }\n        switch (t)\n        {\n        case VT_EMPTY:\n        case VT_NULL:\n        case VT_VOID:\n            break;\n        case VT_I2:\n        case VT_I4:\n        case VT_R4:\n        case VT_R8:\n        case VT_CY:\n        case VT_DATE:\n        case VT_ERROR:\n        case VT_BOOL:\n        case VT_I1:\n        case VT_UI1:\n        case VT_UI2:\n        case VT_UI4:\n        case VT_I8:\n        case VT_UI8:\n        case VT_INT:\n        case VT_UINT:\n        case VT_HRESULT:\n            dst->llVal = src->llVal;\n            break;\n        case VT_DECIMAL:\n            break;\n        case VT_DISPATCH:\n            dst->pdispVal = iface32_16(&IID_IDispatch, src->pdispVal);\n            break;\n        case VT_BSTR:\n            map_bstr32_16(&dst->bstrVal, &src->bstrVal);\n            break;\n        case VT_UNKNOWN:\n            dst->punkVal = iface32_16(&IID_IUnknown, src->punkVal);\n            break;\n        case VT_VARIANT:\n        case VT_PTR:\n        case VT_SAFEARRAY:\n        case VT_CARRAY:\n        case VT_USERDEFINED:\n        case VT_LPSTR:\n        case VT_LPWSTR:\n        case VT_RECORD:\n        case VT_INT_PTR:\n        case VT_UINT_PTR:\n        case VT_FILETIME:\n        case VT_BLOB:\n        case VT_STREAM:\n        case VT_STORAGE:\n        case VT_STREAMED_OBJECT:\n        case VT_STORED_OBJECT:\n        case VT_BLOB_OBJECT:\n        case VT_CF:\n        case VT_CLSID:\n        case VT_VERSIONED_STREAM:\n        case VT_BSTR_BLOB:\n            FIXME(\"unsupported %s\\n\", debugstr_vt(src->vt));\n            break;\n        default:\n            FIXME(\"unknown %s\\n\", debugstr_vt(src->vt));\n            return;\n        }\n    }\n}\nvoid map_variant16_32(VARIANT *dst, const VARIANT16 *src)\n{\n    enum VARENUM t = V_VT(src) & VT_TYPEMASK;\n    enum VARENUM e = V_VT(src) & VT_EXTRA_TYPE;\n    dst->llVal = src->llVal;\n    dst->vt = src->vt;\n    if (V_ISARRAY(src))\n    {\n        FIXME(\"V_ISARRAY\\n\");\n        return;\n    }\n    else if (V_VT(src) == (VT_BSTR | VT_BYREF))\n    {\n        FIXME(\"VT_BSTR | VT_BYREF\\n\");\n    }\n    else if (V_VT(src) == (VT_DISPATCH | VT_BYREF) || V_VT(src) == (VT_UNKNOWN | VT_BYREF))\n    {\n        FIXME(\"t32 == (VT_DISPATCH | VT_BYREF) || t32 == (VT_UNKNOWN | VT_BYREF)\\n\");\n    }\n    else if (V_VT(src) == (VT_VARIANT | VT_BYREF))\n    {\n        FIXME(\"VT_VARIANT | VT_BYREF\\n\");\n    }\n    else if (V_VT(src) == (VT_DECIMAL | VT_BYREF))\n    {\n        FIXME(\"VT_DECIMAL\\n\");\n    }\n    else\n    {\n        if (e & VT_ARRAY)\n        {\n            FIXME(\"VT_ARRAY\\n\");\n        }\n        if (e & VT_VECTOR)\n        {\n            FIXME(\"VT_VECTOR\\n\");\n        }\n        if (e & VT_BYREF)\n        {\n            switch (t)\n            {\n            case VT_EMPTY:\n            case VT_NULL:\n            case VT_VOID:\n                break;\n            case VT_I2:\n            case VT_I4:\n            case VT_R4:\n            case VT_R8:\n            case VT_CY:\n            case VT_DATE:\n            case VT_ERROR:\n            case VT_BOOL:\n            case VT_I1:\n            case VT_UI1:\n            case VT_UI2:\n            case VT_UI4:\n            case VT_I8:\n            case VT_UI8:\n            case VT_INT:\n            case VT_UINT:\n            case VT_HRESULT:\n                dst->plVal = MapSL(src->plVal);\n                return;\n            case VT_DECIMAL:\n                return;\n            case VT_DISPATCH:\n            case VT_BSTR:\n            case VT_UNKNOWN:\n            case VT_VARIANT:\n            case VT_PTR:\n            case VT_SAFEARRAY:\n            case VT_CARRAY:\n            case VT_USERDEFINED:\n            case VT_LPSTR:\n            case VT_LPWSTR:\n            case VT_RECORD:\n            case VT_INT_PTR:\n            case VT_UINT_PTR:\n            case VT_FILETIME:\n            case VT_BLOB:\n            case VT_STREAM:\n            case VT_STORAGE:\n            case VT_STREAMED_OBJECT:\n            case VT_STORED_OBJECT:\n            case VT_BLOB_OBJECT:\n            case VT_CF:\n            case VT_CLSID:\n            case VT_VERSIONED_STREAM:\n            case VT_BSTR_BLOB:\n                FIXME(\"unsupported %s\\n\", debugstr_vt(src->vt));\n                break;\n            default:\n                FIXME(\"unknown %s\\n\", debugstr_vt(src->vt));\n                return;\n            }\n        }\n        switch (t)\n        {\n        case VT_EMPTY:\n        case VT_NULL:\n        case VT_VOID:\n            break;\n        case VT_I2:\n        case VT_I4:\n        case VT_R4:\n        case VT_R8:\n        case VT_CY:\n        case VT_DATE:\n        case VT_ERROR:\n        case VT_BOOL:\n        case VT_I1:\n        case VT_UI1:\n        case VT_UI2:\n        case VT_UI4:\n        case VT_I8:\n        case VT_UI8:\n        case VT_INT:\n        case VT_UINT:\n        case VT_HRESULT:\n            dst->llVal = src->llVal;\n            break;\n        case VT_DECIMAL:\n            break;\n        case VT_DISPATCH:\n            dst->pdispVal = (IDispatch*)iface16_32(&IID_IDispatch, src->pdispVal);\n            break;\n        case VT_BSTR:\n            map_bstr16_32(&dst->bstrVal, &src->bstrVal);\n            break;\n        case VT_UNKNOWN:\n            dst->punkVal = (IUnknown*)iface16_32(&IID_IUnknown, src->punkVal);\n            break;\n        case VT_VARIANT:\n        case VT_PTR:\n        case VT_SAFEARRAY:\n        case VT_CARRAY:\n        case VT_USERDEFINED:\n        case VT_LPSTR:\n        case VT_LPWSTR:\n        case VT_RECORD:\n        case VT_INT_PTR:\n        case VT_UINT_PTR:\n        case VT_FILETIME:\n        case VT_BLOB:\n        case VT_STREAM:\n        case VT_STORAGE:\n        case VT_STREAMED_OBJECT:\n        case VT_STORED_OBJECT:\n        case VT_BLOB_OBJECT:\n        case VT_CF:\n        case VT_CLSID:\n        case VT_VERSIONED_STREAM:\n        case VT_BSTR_BLOB:\n            FIXME(\"unsupported %s\\n\", debugstr_vt(src->vt));\n            break;\n        default:\n            FIXME(\"unknown %s\\n\", debugstr_vt(src->vt));\n            return;\n        }\n    }\n}\n\nvoid map_dispparams32_16(DISPPARAMS16 *a16, const DISPPARAMS *a32)\n{\n    VARIANT16 *v16;\n    int i;\n    a16->cArgs = a32->cArgs;\n    a16->cNamedArgs = a32->cNamedArgs;\n    a16->rgdispidNamedArgs = MapLS(a32->rgdispidNamedArgs);\n    v16 = HeapAlloc(GetProcessHeap(), 0, sizeof(VARIANT16) * a16->cArgs);\n    a16->rgvarg = MapLS(v16);\n    for (i = 0; i < a16->cArgs; i++)\n    {\n        map_variant32_16(v16 + i, a32->rgvarg + i);\n    }\n}\n\nvoid map_dispparams16_32(DISPPARAMS *a32, const DISPPARAMS16 *a16)\n{\n    VARIANT16 *v16;\n    int i;\n    a32->cArgs = a16->cArgs;\n    a32->cNamedArgs = a16->cNamedArgs;\n    a32->rgdispidNamedArgs = MapSL(a16->rgdispidNamedArgs);\n    a32->rgvarg = HeapAlloc(GetProcessHeap(), 0, sizeof(VARIANT) * a32->cArgs);\n    v16 = (VARIANT16*)MapSL(a16->rgvarg);\n    for (i = 0; i < a16->cArgs; i++)\n    {\n        map_variant16_32(a32->rgvarg + i, v16 + i);\n    }\n}\n\nvoid free_dispparams32(const DISPPARAMS *a32)\n{\n    HeapFree(GetProcessHeap(), 0, a32->rgvarg);\n}\nvoid free_dispparams16(const DISPPARAMS16 *a16)\n{\n    HeapFree(GetProcessHeap(), 0, MapSL(a16->rgvarg));\n}\n\nvoid map_excepinfo16_32(EXCEPINFO *a32, const EXCEPINFO16 *a16)\n{\n    a32->wCode = a16->wCode;\n    a32->wReserved = a16->wReserved;\n    map_bstr16_32(&a32->bstrSource, &a16->bstrSource);\n    map_bstr16_32(&a32->bstrDescription, &a16->bstrDescription);\n    map_bstr16_32(&a32->bstrHelpFile, &a16->bstrHelpFile);\n    a32->wReserved = a16->dwHelpContext;\n    a32->pvReserved = a16->pvReserved;\n    if (a16->pfnDeferredFillIn)\n        ERR(\"pfnDeferredFillIn\\n\");\n    a32->pfnDeferredFillIn = 0;\n    a32->scode = a16->scode;\n}\n\nvoid map_excepinfo32_16(EXCEPINFO16 *a16, const EXCEPINFO *a32)\n{\n    a16->wCode = a32->wCode;\n    a16->wReserved = a32->wReserved;\n    map_bstr32_16(&a16->bstrSource, &a32->bstrSource);\n    map_bstr32_16(&a16->bstrDescription, &a32->bstrDescription);\n    map_bstr32_16(&a16->bstrHelpFile, &a32->bstrHelpFile);\n    a16->wReserved = a32->dwHelpContext;\n    a16->pvReserved = a32->pvReserved;\n    if (a32->pfnDeferredFillIn)\n        ERR(\"pfnDeferredFillIn\\n\");\n    a16->pfnDeferredFillIn = 0;\n    a16->scode = a32->scode;\n}\n\nstatic HMODULE get_hmodule_helper(const char *mod)\n{\n    HMODULE hmod = GetModuleHandleA(mod);\n    if (hmod)\n        return hmod;\n    return LoadLibraryA(mod);\n}\nstatic void dynamic_SysFreeString16(SEGPTR bstr)\n{\n    static void (WINAPI*pSysFreeString16)(SEGPTR);\n    if (!pSysFreeString16)\n    {\n        pSysFreeString16 = GetProcAddress(get_hmodule_helper(\"OLE2DISP.DLL16\"), \"SysFreeString16\");\n    }\n    if (!pSysFreeString16)\n        return;\n    pSysFreeString16(bstr);\n}\n\nstatic int dynamic_SysStringLen16(SEGPTR bstr)\n{\n    static int (WINAPI*pSysStringLen16)(SEGPTR);\n    if (!pSysStringLen16)\n    {\n        pSysStringLen16 = GetProcAddress(get_hmodule_helper(\"OLE2DISP.DLL16\"), \"SysStringLen16\");\n    }\n    if (!pSysStringLen16)\n        return 0;\n    return pSysStringLen16(bstr);\n}\n\nstatic int dynamic_SysAllocStringLen16(SEGPTR bstr, int len)\n{\n    static int (WINAPI*pSysAllocStringLen16)(SEGPTR bstr, int len);\n    if (!pSysAllocStringLen16)\n    {\n        pSysAllocStringLen16 = GetProcAddress(get_hmodule_helper(\"OLE2DISP.DLL16\"), \"SysAllocStringLen16\");\n    }\n    if (!pSysAllocStringLen16)\n        return 0;\n    return pSysAllocStringLen16(bstr, len);\n}\n\nvoid free_excepinfo16(const EXCEPINFO16 *a16)\n{\n    dynamic_SysFreeString16(a16->bstrSource);\n    dynamic_SysFreeString16(a16->bstrDescription);\n    dynamic_SysFreeString16(a16->bstrHelpFile);\n}\n\nvoid free_excepinfo32(const EXCEPINFO *a32)\n{\n    SysFreeString(a32->bstrSource);\n    SysFreeString(a32->bstrDescription);\n    SysFreeString(a32->bstrHelpFile);\n}\n\n#ifdef IFS1632_OVERWRITE_ITypeInfo_Invoke\nHRESULT CDECL ITypeInfo_16_32_Invoke(SEGPTR This, SEGPTR args16_pvInstance, DWORD args16_memid, WORD args16_wFlags, SEGPTR args16_pDispParams, SEGPTR args16_pVarResult, SEGPTR args16_pExcepInfo, SEGPTR args16_puArgErr)\n{\n    ITypeInfo *iface32 = (ITypeInfo*)get_interface32(This);\n    HRESULT result__ = { 0 };\n    TYP16_HRESULT result16__ = { 0 };\n    PVOID args32_pvInstance;\n    MEMBERID args32_memid;\n    WORD args32_wFlags;\n    DISPPARAMS args32_pDispParams = { 0 };\n    VARIANT args32_pVarResult = { 0 };\n    EXCEPINFO args32_pExcepInfo = { 0 };\n    UINT args32_puArgErr = { 0 };\n    /**/\n    /* MAP_PVOID16_32(args32_pvInstance, args16_pvInstance); */\n    args32_pvInstance = args16_pvInstance;\n    /**/\n    MAP_MEMBERID16_32(args32_memid, args16_memid);\n    MAP_WORD16_32(args32_wFlags, args16_wFlags);\n    INMAP_PTR_DISPPARAMS16_32(args32_pDispParams, args16_pDispParams);\n    TRACE(\"(%04x:%04x(%p),%08x,%08x,%08x,%08x,%08x,%08x,%08x)\\n\", SELECTOROF(This), OFFSETOF(This), iface32, args16_pvInstance, args16_memid, args16_wFlags, args16_pDispParams, args16_pVarResult, args16_pExcepInfo, args16_puArgErr);\n    result__ = (HRESULT)iface32->lpVtbl->Invoke(iface32, args32_pvInstance, args32_memid, args32_wFlags, &args32_pDispParams, &args32_pVarResult, &args32_pExcepInfo, &args32_puArgErr);\n    MAP_HRESULT32_16(result16__, result__);\n    /* UNMAP_PVOID16_32(args32_pvInstance, args16_pvInstance); */\n    UNMAP_MEMBERID16_32(args32_memid, args16_memid);\n    UNMAP_WORD16_32(args32_wFlags, args16_wFlags);\n    if (args16_pDispParams)\n    {\n        OUTMAP_DISPPARAMS32_16((*(TYP16_DISPPARAMS*)MapSL(args16_pDispParams)), args32_pDispParams);\n    }\n    if (args16_pVarResult)\n    {\n        MAP_VARIANT32_16((*(TYP16_VARIANT*)MapSL(args16_pVarResult)), args32_pVarResult);\n    }\n    if (args16_pExcepInfo)\n    {\n        MAP_EXCEPINFO32_16((*(TYP16_EXCEPINFO*)MapSL(args16_pExcepInfo)), args32_pExcepInfo);\n    }\n    if (args16_puArgErr)\n    {\n        MAP_UINT32_16((*(TYP16_UINT*)MapSL(args16_puArgErr)), args32_puArgErr);\n    }\n    return result16__;\n}\n#endif\n\n#ifdef IFS1632_OVERWRITE_ITypeInfo_AddressOfMember\nHRESULT CDECL ITypeInfo_16_32_AddressOfMember(SEGPTR This, DWORD args16_memid, WORD args16_invKind, SEGPTR args16_ppv)\n{\n    ITypeInfo *iface32 = (ITypeInfo*)get_interface32(This);\n    HRESULT result__ = { 0 };\n    TYP16_HRESULT result16__ = { 0 };\n    MEMBERID args32_memid;\n    INVOKEKIND args32_invKind;\n    PVOID args32_ppv = { 0 };\n    MAP_MEMBERID16_32(args32_memid, args16_memid);\n    MAP_INVOKEKIND16_32(args32_invKind, args16_invKind);\n    TRACE(\"(%04x:%04x(%p),%08x,%08x,%08x)\\n\", SELECTOROF(This), OFFSETOF(This), iface32, args16_memid, args16_invKind, args16_ppv);\n    result__ = (HRESULT)iface32->lpVtbl->AddressOfMember(iface32, args32_memid, args32_invKind, &args32_ppv);\n    MAP_HRESULT32_16(result16__, result__);\n    UNMAP_MEMBERID16_32(args32_memid, args16_memid);\n    UNMAP_INVOKEKIND16_32(args32_invKind, args16_invKind);\n    if (args16_ppv)\n    {\n        (*(TYP16_PVOID*)MapSL(args16_ppv)) = args32_ppv;\n        /*MAP_PVOID32_16((*(TYP16_PVOID*)MapSL(args16_ppv)), args32_ppv);*/\n    }\n    return result16__;\n}\n#endif\n/*** OLESTREAM32 methods ***/\n\n/***********************************************************************\n *           SELECTOR_SetEntries\n *\n * Set the LDT entries for an array of selectors.\n */\nstatic BOOL SELECTOR_SetEntries(WORD sel, const void *base, DWORD size, unsigned char flags)\n{\n    LDT_ENTRY entry;\n    WORD i, count;\n\n    wine_ldt_set_base(&entry, base);\n    wine_ldt_set_limit(&entry, size - 1);\n    wine_ldt_set_flags(&entry, flags);\n    count = (size + 0xffff) / 0x10000;\n    for (i = 0; i < count; i++)\n    {\n        if (wine_ldt_set_entry(sel + (i << __AHSHIFT), &entry) < 0) return FALSE;\n        wine_ldt_set_base(&entry, (char*)wine_ldt_get_base(&entry) + 0x10000);\n        /* yep, Windows sets limit like that, not 64K sel units */\n        wine_ldt_set_limit(&entry, wine_ldt_get_limit(&entry) - 0x10000);\n    }\n    return TRUE;\n}\n#ifdef IFS3216_OVERWRITE_OLESTREAM32_Get\nDWORD __stdcall OLESTREAM32_32_16_Get(OLESTREAM32 *This, void *lpszBuf, DWORD cbbuf)\n{\n    SEGPTR iface16 = get_interface16(This);\n    WORD seg = AllocSelectorArray16(cbbuf / 0x10000 + 1);\n    DWORD ret;\n    if (!seg)\n        return 0;\n    SELECTOR_SetEntries(seg, lpszBuf, cbbuf, WINE_LDT_FLAGS_DATA);\n    TRACE(\"(%p(%04x:%04x),%p,%08x)\\n\", This, SELECTOROF(iface16), OFFSETOF(iface16), MAKESEGPTR(seg, 0), cbbuf);\n    ret = OLESTREAM3216_Get(iface16, MAKESEGPTR(seg, 0), cbbuf);\n    for (WORD i = 0; i <= cbbuf / 0x10000; i++)\n        FreeSelector16(seg + i);\n    return ret;\n}\n#endif\n#ifdef IFS3216_OVERWRITE_OLESTREAM32_Put\nDWORD __stdcall OLESTREAM32_32_16_Put(OLESTREAM32 *This, const void *lpszBuf, DWORD cbbuf)\n{\n    SEGPTR iface16 = get_interface16(This);\n    DWORD ret;\n    WORD seg = AllocSelectorArray16(cbbuf / 0x10000 + 1);\n    if (!seg)\n        return 0;\n    SELECTOR_SetEntries(seg, lpszBuf, cbbuf, WINE_LDT_FLAGS_DATA);\n    TRACE(\"(%p(%04x:%04x),%p,%08x)\\n\", This, SELECTOROF(iface16), OFFSETOF(iface16), MAKESEGPTR(seg, 0), cbbuf);\n    ret = OLESTREAM3216_Put(iface16, MAKESEGPTR(seg, 0), cbbuf);\n    for (WORD i = 0; i <= cbbuf / 0x10000; i++)\n        FreeSelector16(seg + i);\n    return ret;\n}\n#endif\n#ifdef IFS3216_OVERWRITE_IMessageFilter_HandleInComingCall\nDWORD STDMETHODCALLTYPE IMessageFilter_32_16_HandleInComingCall(IMessageFilter *This, DWORD dwCallType,HTASK htaskCaller,DWORD dwTickCount,LPINTERFACEINFO lpInterfaceInfo)\n{\n    SEGPTR iface16 = get_interface16(This);\n    TYP16_DWORD result__ = {0};\n    DWORD result32__ = {0};\n    TYP16_DWORD args16_dwCallType;\n    TYP16_HTASK args16_htaskCaller;\n    TYP16_DWORD args16_dwTickCount;\n    TYP16_LPINTERFACEINFO args16_lpInterfaceInfo;\n    MAP_DWORD32_16(args16_dwCallType, dwCallType);\n    MAP_HTASK32_16(args16_htaskCaller, htaskCaller);\n    MAP_DWORD32_16(args16_dwTickCount, dwTickCount);\n    MAP_LPINTERFACEINFO32_16(args16_lpInterfaceInfo, lpInterfaceInfo);\n    TRACE(\"(%p(%04x:%04x),%08x,%08x,%08x,%p)\\n\", This, SELECTOROF(iface16), OFFSETOF(iface16), dwCallType, htaskCaller, dwTickCount, lpInterfaceInfo);\n    result__ = (TYP16_DWORD)IMessageFilter16_HandleInComingCall(iface16, args16_dwCallType, args16_htaskCaller, args16_dwTickCount, args16_lpInterfaceInfo);\n    if (result__ > 2)\n        result__ = 0;\n    MAP_DWORD16_32(result32__, result__);\n    UNMAP_DWORD32_16(args16_dwCallType, dwCallType);\n    UNMAP_HTASK32_16(args16_htaskCaller, htaskCaller);\n    UNMAP_DWORD32_16(args16_dwTickCount, dwTickCount);\n    UNMAP_LPINTERFACEINFO32_16(args16_lpInterfaceInfo, lpInterfaceInfo);\n    return result32__;\n}\n#endif\n#ifdef IFS1632_OVERWRITE_IDataObject_DAdvise\nHRESULT CDECL IDataObject_16_32_DAdvise(SEGPTR This, SEGPTR args16_pformatetc, DWORD args16_advf, SEGPTR args16_pAdvSink, SEGPTR args16_pdwConnection)\n{\n    IDataObject *iface32 = (IDataObject*)get_interface32(This);\n    HRESULT result__ = {0};\n    TYP16_HRESULT result16__ = {0};\n    FORMATETC * args32_pformatetc;\n    DWORD args32_advf;\n    IAdviseSink * args32_pAdvSink;\n    DWORD args32_pdwConnection = {0};\n    MAP_PTR_FORMATETC16_32(args32_pformatetc, args16_pformatetc);\n    MAP_DWORD16_32(args32_advf, args16_advf);\n    args32_pAdvSink = iface16_32(&IID_IAdviseSink, args16_pAdvSink);\n    if (args32_pformatetc->ptd)\n    {\n        IPersist *pPersist;\n        iface32->lpVtbl->QueryInterface(iface32, &IID_IPersist, &pPersist);\n        if (pPersist)\n        {\n            CLSID clsid;\n            if (SUCCEEDED(pPersist->lpVtbl->GetClassID(pPersist, &clsid)) && CoIsOle1Class(&clsid))\n            {\n                HeapFree(GetProcessHeap(), 0, args32_pformatetc->ptd);\n                args32_pformatetc->ptd = NULL;\n            }\n            pPersist->lpVtbl->Release(pPersist);\n        }\n    }\n    TRACE(\"(%04x:%04x(%p),%08x,%08x,%08x,%08x)\\n\", SELECTOROF(This), OFFSETOF(This), iface32, args16_pformatetc, args16_advf, args16_pAdvSink, args16_pdwConnection);\n    result__ = (HRESULT)iface32->lpVtbl->DAdvise(iface32, args32_pformatetc, args32_advf, args32_pAdvSink, &args32_pdwConnection);\n    MAP_HRESULT32_16(result16__, result__);\n    UNMAP_PTR_FORMATETC16_32(args32_pformatetc, args16_pformatetc);\n    UNMAP_DWORD16_32(args32_advf, args16_advf);\n    if (args16_pdwConnection)\n    {\n        MAP_DWORD32_16((*(TYP16_DWORD*)MapSL(args16_pdwConnection)), args32_pdwConnection);\n    }\n    return result16__;\n}\n#endif\n"
  },
  {
    "path": "ole2/ifs_thunk.h",
    "content": "#define IFS_THUNK_H\n#ifdef IFS_THUNK_H\n#include \"config.h\"\n\n#include <assert.h>\n#include <stdlib.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <string.h>\n#include <malloc.h>\n\n#define COBJMACROS\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n#include \"wownt32.h\"\n#include \"ole2.h\"\n#include \"winerror.h\"\n#include \"oaidl.h\"\n#include \"ocidl.h\"\n\n#include \"wine/winbase16.h\"\n#include \"wine/wingdi16.h\"\n#include \"wine/winuser16.h\"\n#include \"ifs.h\"\n#include \"../ole2disp/ole2disp.h\"\n\n#ifndef IFS_THUNK_NDEF_DBG_CHANNEL\n#include \"wine/debug.h\"\nWINE_DEFAULT_DEBUG_CHANNEL(ole);\n#endif\n#include <pshpack1.h>\ntypedef struct\n{\n    void *lpVtbl;\n    SEGPTR iface16;\n    IID *riid;\n    void *ptr;\n} interface_32;\ntypedef struct\n{\n    SEGPTR lpVtbl;\n    void *iface32;\n    IID *riid;\n    void *ptr;\n    void *vtable_copy;\n} interface_16;\nstatic void *get_interface32(SEGPTR iface16)\n{\n    return ((interface_16*)MapSL(iface16))->iface32;\n}\nstatic SEGPTR get_interface16(void *iface32)\n{\n    return ((interface_32*)iface32)->iface16;\n}\nstatic interface_16 *get_interface32_ptr(SEGPTR iface16)\n{\n    return ((interface_16*)MapSL(iface16));\n}\nstatic interface_32 *get_interface16_ptr(void *iface32)\n{\n    return ((interface_32*)iface32);\n}\ntypedef struct\n{\n    void *func16;\n    void *name;\n    const char *args;\n    BOOL is_stdcall;\n} vtbl_entry;\ntypedef struct\n{\n    IID iid;\n    void *lpVtbl32;\n    vtbl_entry *vtbl16; /* null-terminated */\n    void *lpVtbl16;\n    SEGPTR spVtbl16;\n} interface_entry;\nSEGPTR iface32_16(REFIID riid, void *iface32);\nvoid *iface16_32(REFIID riid, SEGPTR iface16);\nvoid *copy_iface16_vtbl(SEGPTR iface16);\n#define IFACE_ALLOC_ARRAY(type, size) ((type*)HeapAlloc(GetProcessHeap(), 0, (size) * sizeof(type)))\n#define IFACE_FREE_ARRAY(ptr)\n\n\n\ntypedef SEGPTR TYP16_REFIID;\ntypedef SEGPTR LPvoid;\ntypedef SEGPTR TYP16_LPVOID;\ntypedef ULONG TYP16_ULONG;\ntypedef DWORD TYP16_DWORD;\ntypedef CLSID TYP16_CLSID;\ntypedef DWORD TYP16_DWORD;\ntypedef BOOL16 TYP16_BOOL;\ntypedef LONG TYP16_LONG;\ntypedef DWORD TYP16_SIZE_T;\ntypedef SEGPTR TYP16_LPOLESTR;\ntypedef SEGPTR TYP16_LPCOLESTR;\ntypedef BIND_OPTS TYP16_BIND_OPTS;\ntypedef FILETIME TYP16_FILETIME;\ntypedef ULARGE_INTEGER TYP16_ULARGE_INTEGER;\ntypedef ULARGE_INTEGER TYP16_LARGE_INTEGER;\ntypedef STATSTG16 TYP16_STATSTG;\ntypedef SEGPTR TYP16_SNB;\ntypedef SEGPTR TYP16_REFCLSID;\ntypedef STATDATA16 TYP16_STATDATA;\ntypedef FORMATETC16 TYP16_FORMATETC;\ntypedef IID TYP16_IID;\ntypedef HTASK16 TYP16_HTASK;\ntypedef STGMEDIUM16 TYP16_STGMEDIUM;\ntypedef SEGPTR TYP16_LPINTERFACEINFO;\n\n#define MAP_REFIID16_32(a32, a16) \\\n*(IID**)&a32 = (REFIID)MapSL(a16)\n#define MAP_PTR_CLSID16_32(a32, a16) \\\na32 = (CLSID*)MapSL(a16)\n#define UNMAP_REFIID16_32\n#define UNMAP_PTR_VOID16_32\n#define UNMAP_PTR_CLSID16_32\n#define UNMAP_PTR_PTR_VOID16_32\n#define MAP_REFIID32_16(a16, a32) \\\na16 = MapLS(a32)\n#define UNMAP_REFIID32_16\n#define MAP_PTR_VOID16_32(a32, a16) \\\na32 = MapSL(a16)\n#define MAP_PTR_VOID32_16(a16, a32) \\\na16 = MapLS(a32)\n#define UNMAP_SIZE_T16_32\n#define UNMAP_SIZE_T32_16\n#define MAP_SIZE_T16_32(a32, a16) a32 = a16\n#define MAP_SIZE_T32_16(a16, a32) a16 = a32\n\n#define MAP_CLSID32_16(a16, a32) *(CLSID*)&a16 = a32\n#define UNMAP_PTR_VOID32_16\n#define MAP_CLSID16_32(a32, a16) a32 = a16\n\n#define MAP_LPVOID16_32 MAP_PTR_VOID16_32\n#define MAP_LPVOID32_16 MAP_PTR_VOID32_16\n#define UNMAP_LPVOID16_32 UNMAP_PTR_VOID16_32\n#define UNMAP_LPVOID32_16 UNMAP_PTR_VOID32_16\n#define MAP_VOID_PTR16_32 MAP_PTR_VOID16_32\n#define MAP_VOID_PTR32_16 MAP_PTR_VOID32_16\n\n#define MAP_PTR_BIND_OPTS16_32(a32, a16) a32 = (BIND_OPTS*)MapSL(a16)\n#define MAP_PTR_BIND_OPTS32_16(a16, a32) a16 = MapLS(a32)\n#define MAP_PTR_FILETIME16_32(a32, a16) a32 = (FILETIME*)MapSL(a16)\n#define MAP_PTR_FILETIME32_16(a16, a32) a16 = MapLS(a32)\n#define MAP_BIND_OPTS16_32(a32, a16) a32 = a16\n#define MAP_BIND_OPTS32_16(a16, a32) *(BIND_OPTS*)&a16 = a32\n#define UNMAP_PTR_BIND_OPTS16_32\n#define UNMAP_PTR_BIND_OPTS32_16\n#define UNMAP_PTR_FILETIME16_32\n#define UNMAP_PTR_FILETIME32_16\n#define MAP_FILETIME32_16(a16, a32) *(FILETIME*)&a16 = a32\n#define MAP_FILETIME16_32(a32, a16) a32 = a16\n#define UNMAP_HTASK32_16\n#define UNMAP_VOID_PTR16_32\n#define UNMAP_VOID_PTR32_16\n#define UNMAP_HTASK16_32\n\n#define MAP_LARGE_INTEGER16_32(a32, a16) a32 = a16\n#define UNMAP_LARGE_INTEGER16_32\n#define MAP_ULARGE_INTEGER32_16(a16, a32) *(ULARGE_INTEGER*)&a16 = a32\n#define MAP_LARGE_INTEGER32_16 MAP_LARGE_INTEGER16_32\n#define MAP_LARGE_INTEGER32_16(a16, a32) *(LARGE_INTEGER*)&a16 = a32\n#define MAP_ULARGE_INTEGER16_32(a32, a16) a32 = a16\n#define UNMAP_LARGE_INTEGER32_16\n#define UNMAP_ULARGE_INTEGER16_32\n#define UNMAP_ULARGE_INTEGER32_16\n\nstatic void map_statstg32_16(STATSTG16 *a16, STATSTG *a32)\n{\n    a16->atime = a32->atime;\n    a16->pwcsName = MapLS(strdupWtoA(a32->pwcsName));\n    a16->type = a32->type;\n    a16->atime = a32->atime;\n    a16->cbSize = a32->cbSize;\n    a16->mtime = a32->mtime;\n    a16->ctime = a32->ctime;\n    a16->atime = a32->atime;\n    a16->grfMode = a32->grfMode;\n    a16->grfLocksSupported = a32->grfLocksSupported;\n    a16->clsid = a32->clsid;\n    a16->grfStateBits = a32->grfStateBits;\n    a16->reserved = a32->reserved;\n}\n#define MAP_STATSTG32_16(a16, a32) map_statstg32_16(&a16, &a32)\nstatic void map_statstg16_32(STATSTG *a32, STATSTG16 *a16)\n{\n    /* FIXME: leak */\n    a32->pwcsName = strdupAtoW(MapSL(a16->pwcsName));\n    a32->type = a16->type;\n    a32->atime = a16->atime;\n    a32->cbSize = a16->cbSize;\n    a32->mtime = a16->mtime;\n    a32->ctime = a16->ctime;\n    a32->atime = a16->atime;\n    a32->grfMode = a16->grfMode;\n    a32->grfLocksSupported = a16->grfLocksSupported;\n    a32->clsid = a16->clsid;\n    a32->grfStateBits = a16->grfStateBits;\n    a32->reserved = a16->reserved;\n}\n#define MAP_STATSTG16_32(a32, a16) map_statstg16_32(&a32, &a16) \n\n#define MAP_LPCOLESTR16_32 MAP_LPOLESTR16_32\n#define MAP_LPCOLESTR32_16 MAP_LPOLESTR32_16\n#define UNMAP_LPCOLESTR16_32 UNMAP_LPOLESTR16_32\n#define UNMAP_LPCOLESTR32_16 UNMAP_LPOLESTR32_16\n#define MAP_SNB16_32 MAP_LPOLESTR16_32\n#define MAP_SNB32_16 MAP_LPOLESTR32_16\n#define UNMAP_SNB16_32 UNMAP_LPOLESTR16_32\n#define UNMAP_SNB32_16 UNMAP_LPOLESTR32_16\n#define IFS1632_OVERWRITE_ISTGMEDIUMRelease_Release\nULONG CDECL ISTGMEDIUMRelease_16_32_Release(SEGPTR This);\n#define IFS3216_OVERWRITE_ISTGMEDIUMRelease_Release\nextern const IID IID_ISTGMEDIUMRelease;\ntypedef IUnknown ISTGMEDIUMRelease;\ntypedef IUnknownVtbl ISTGMEDIUMReleaseVtbl;\nULONG WINAPI ISTGMEDIUMRelease_32_16_Release(ISTGMEDIUMRelease *iface);\n#define MAP_STGMEDIUM32_16(a16, a32) map_stgmedium32_16((STGMEDIUM16*)&a16, &a32)\n#define MAP_STGMEDIUM16_32(a32, a16) map_stgmedium16_32(&a32, &a16)\n#define UNMAP_IID_PTR16_32\n#define UNMAP_IID_PTR32_16\n#define UNMAP_REFCLSID32_16\n#define UNMAP_REFCLSID16_32\n#define UNMAP_PTR_FORMATETC32_16(a16, a32) \\\n\tif (((FORMATETC16 *)MapSL(a16))->ptd) { \\\n\t\tHeapFree(GetProcessHeap(), 0, MapSL(((FORMATETC16 *)MapSL(a16))->ptd)); \\\n\t\tUnMapLS(((FORMATETC16 *)MapSL(a16))->ptd); \\\n\t\tUnMapLS(a16); \\\n\t}\n#define UNMAP_PTR_FORMATETC16_32(a32, a16) if (a32->ptd) HeapFree(GetProcessHeap(), 0, a32->ptd);\n#define UNMAP_STGMEDIUM32_16\n#define UNMAP_STGMEDIUM16_32\n#define UNMAP_LPINTERFACEINFO32_16\n#define UNMAP_LPINTERFACEINFO16_32\n#define UNMAP_PTR_STGMEDIUM32_16\n#define UNMAP_PTR_STGMEDIUM16_32\n#define MAP_PTR_FORMATETC16_32(a32, a16) map_pformatetc16_32(a32 = (FORMATETC*)alloca(sizeof(FORMATETC)), (FORMATETC16*)MapSL(a16))\n#define MAP_PTR_FORMATETC32_16(a16, a32) map_pformatetc32_16((FORMATETC16*)MapSL(a16 = MapLS(alloca(sizeof(FORMATETC16)))), a32);\n\n#define MAP_PTR_STGMEDIUM16_32(a32, a16) map_stgmedium16_32(a32 = (STGMEDIUM*)alloca(sizeof(STGMEDIUM)), (STGMEDIUM16*)MapSL(a16))\n\n#define MAP_PTR_STGMEDIUM32_16(a16, a32) map_stgmedium32_16((STGMEDIUM16*)MapSL(a16 = MapLS(alloca(sizeof(STGMEDIUM16)))), a32);\n\n#define MAP_FORMATETC32_16(a16, a32) map_formatetc32_16((FORMATETC16*)&a16, &a32)\n#define MAP_FORMATETC16_32(a32, a16) map_formatetc16_32(&a32, (FORMATETC16*)&a16) \n\n#define MAP_HTASK16_32(a32, a16) a32 = HTASK_32(a16)\n#define MAP_HTASK32_16(a16, a32) a16 = HTASK_16(a32)\n#define MAP_HDC16_32(a32, a16) a32 = HDC_32(a16)\n#define MAP_HDC32_16(a16, a32) a16 = HDC_16(a32)\n#define MAP_HMENU16_32(a32, a16) a32 = HMENU_32(a16)\n#define MAP_HMENU32_16(a16, a32) a16 = HMENU_16(a32)\n#define MAP_HWND16_32(a32, a16) a32 = HWND_32(a16)\n#define MAP_HWND32_16(a16, a32) a16 = HWND_16(a32)\n\n#define UNMAP_HDC16_32(a32, a16)\n#define UNMAP_HDC32_16(a16, a32)\n#define UNMAP_HMENU16_32(a32, a16)\n#define UNMAP_HMENU32_16(a16, a32)\n#define UNMAP_HWND16_32(a32, a16)\n#define UNMAP_HWND32_16(a16, a32)\n#define MAP_LPOLESTR32_16(a16, a32) a16 = MapLS(strdupWtoA(a32))\n#define MAP_LPOLESTR16_32(a32, a16) a32 = strdupAtoW(MapSL(a16))\n\n#define UNMAP_LPOLESTR16_32(a32, a16) HeapFree(GetProcessHeap(), 0, a32)\n#define UNMAP_LPOLESTR32_16(a16, a32) HeapFree(GetProcessHeap(), 0, MapSL(a16))\ntypedef struct\n{\n    /*LPUNKNOWN */SEGPTR pUnk;\n    IID iid;\n    WORD wMethod;\n} INTERFACEINFO16;\n\n\nvoid map_interfaceinfo16_32(INTERFACEINFO *a32, const INTERFACEINFO16 *a16);\n#define MAP_LPINTERFACEINFO16_32(a32, a16) if (a16) map_interfaceinfo16_32(a32 = (INTERFACEINFO*)alloca(sizeof(INTERFACEINFO)), (INTERFACEINFO16*)MapSL(a16)); else a32 = NULL\nvoid map_interfaceinfo32_16(INTERFACEINFO16 *a16, const INTERFACEINFO *a32);\n#define MAP_LPINTERFACEINFO32_16(a16, a32) if (a32) map_interfaceinfo32_16((INTERFACEINFO16*)MapSL(a16 = MapLS(alloca(sizeof(INTERFACEINFO16)))), a32); else a16 = 0\n\n#define MAP_IID_PTR16_32(a32, a16) a32 = (const IID*)MapSL(a16)\n#define MAP_IID_PTR32_16(a16, a32) a16 = MapLS(a32)\n#define MAP_REFCLSID16_32(a32, a16) *(CLSID**)&a32 = (const IID*)MapSL(a16)\n#define MAP_REFCLSID32_16(a16, a32) a16 = MapLS(a32)\n\ntypedef SEGPTR TYP16_LPBINDCTX;\ntypedef GUID TYP16_GUID;\n\n#define MAP_GUID32_16(a16, a32) *(GUID*)&a16 = a32\n#define MAP_GUID16_32(a16, a32) a32 = a16\n\ntypedef HWND16 TYP16_HWND;\ntypedef WORD TYP16_WORD;\ntypedef SEGPTR TYP16_LPMSG;\ntypedef SIZE16 TYP16_SIZE;\ntypedef SIZEL TYP16_SIZEL;\ntypedef SEGPTR TYP16_IViewObjectCallback;/*FIXME*/\ntypedef void *IViewObjectCallback;/*FIXME*/\ntypedef HDC16 TYP16_HDC;\ntypedef POINTL TYP16_POINTL;\ntypedef HGLOBAL16 TYP16_HOLEMENU;\ntypedef HMENU16 TYP16_HMENU;\ntypedef DWORD TYP16_ULONG_PTR;\nstruct TYP16_tagOleMenuGroupWidths\n{\n    LONG    width[6];\n};\nstruct tagOleInPlaceFrameInfo\n{\n    UINT cb;\n    BOOL fMDIApp;\n    HWND hwndFrame;\n    HACCEL haccel;\n    INT cAccelEntries;\n};\nstruct TYP16_tagRECT\n{\n    INT16  left;\n    INT16  top;\n    INT16  right;\n    INT16  bottom;\n};\n#define UNMAP_ULONG_PTR16_32\n#define UNMAP_LPCRECTL16_32\n#define UNMAP_PTR_DVTARGETDEVICE16_32\n#define UNMAP_ULONG_PTR32_16\n#define UNMAP_LPCRECTL32_16\n#define UNMAP_PTR_DVTARGETDEVICE32_16\n#define UNMAP_SIZE32_16\n#define UNMAP_SIZE16_32\n#define UNMAP_PTR_SIZEL16_32\n#define UNMAP_PTR_SIZEL32_16\n#define UNMAP_PTR_LOGPALETTE16_32\n#define UNMAP_PTR_LOGPALETTE32_16\n#define UNMAP_POINTL16_32\n#define UNMAP_POINTL32_16\n#define UNMAP_LPMSG16_32\n#define UNMAP_LPMSG32_16\n#define UNMAP_LPCRECT16_32\n#define UNMAP_LPCRECT32_16\n#define UNMAP_LPCBORDERWIDTHS16_32\n#define UNMAP_LPCBORDERWIDTHS32_16\n\n#define UNMAP_IViewObjectCallback16_32\n#define UNMAP_IViewObjectCallback32_16\n#define UNMAP_HOLEMENU16_32 FIXME(\"UNMAP_HOLEMENU16_32\\n\");\n#define UNMAP_HOLEMENU32_16 FIXME(\"UNMAP_HOLEMENU32_16\\n\");\n#define MAP_ULONG_PTR16_32(a32, a16) a32 = a16\n#define MAP_ULONG_PTR32_16(a32, a16) a16 = a32\n#define MAP_SIZEL16_32(a32, a16) a32 = a16\n#define MAP_SIZEL32_16(a16, a32) *(SIZEL*)&a16 = a32\n#define MAP_POINTL16_32(a32, a16) a32 = a16\n#define MAP_POINTL32_16(a16, a32) *(POINTL*)&a16 = a32\n#define MAP_LPCRECTL16_32(a32, a16) a32 = (LPCRECTL)MapSL(a16)\n#define MAP_LPCRECTL32_16(a16, a32) a16 = MapLS(a32)\n#define MAP_PTR_SIZEL16_32(a32, a16) a32 = (SIZEL*)MapSL(a16)\n#define MAP_PTR_SIZEL32_16(a16, a32) a16 = MapLS(a32)\nstatic void map_rect32_16(RECT16 *a16, RECT *a32)\n{\n    a16->bottom = a32->bottom;\n    a16->top = a32->top;\n    a16->left = a32->left;\n    a16->right = a32->right;\n}\nstatic void map_rect16_32(RECT *a32, RECT16 *a16)\n{\n    a32->bottom = a16->bottom;\n    a32->top = a16->top;\n    a32->left = a16->left;\n    a32->right = a16->right;\n}\n#define MAP_STRUCT_tagRECT32_16(a16, a32) map_rect32_16((RECT16*)&a16, (RECT*)&a32)\n#define MAP_STRUCT_tagRECT16_32(a32, a16) map_rect16_32((RECT*)&a32, (RECT16*)&a16)\n#define MAP_STRUCT_tagOleMenuGroupWidths32_16(a16, a32) \\\n*(struct tagOleMenuGroupWidths*)&a16 = a32\n#define MAP_STRUCT_tagOleMenuGroupWidths16_32(a32, a16) \\\na32 = *(struct tagOleMenuGroupWidths*)&a16\n#define MAP_LPCRECTL16_32(a32, a16) a32 = (LPCRECTL)MapSL(a16)\n#define MAP_LPCRECTL32_16(a16, a32) a16 = MapLS(a16)\n\n#define MAP_STRUCT_tagOleInPlaceFrameInfo32_16(a16, a32) map_oleinplaceframeinfo32_16((struct TYP16_tagOleInPlaceFrameInfo*)&a16, &a32)\n#define MAP_STRUCT_tagOleInPlaceFrameInfo16_32(a32, a16) map_oleinplaceframeinfo16_32(&a32, &a16)\n#define MAP_SIZE16_32(a32, a16) \\\n    (a32).cx = a16.cx;\\\n    (a32).cy = a16.cy\n#define MAP_SIZE32_16(a16, a32) \\\n    ((SIZE16*)&a16)->cx = a32.cx;\\\n    ((SIZE16*)&a16)->cy = a32.cy\n\n#define MAP_PTR_LOGPALETTE16_32(a32, a16) a32 = (LOGPALETTE*)MapSL(a16)\n#define MAP_PTR_LOGPALETTE32_16(a16, a32) a16 = MapLS(a32)\n#define MAP_PTR_DVTARGETDEVICE16_32(a32, a16) a32 = (DVTARGETDEVICE*)MapSL(a16)\n#define MAP_PTR_DVTARGETDEVICE32_16(a16, a32) a16 = MapLS(a32)\nvoid WINAPI window_message32_16(const MSG *msg32, MSG16 *msg16);\nvoid WINAPI window_message16_32(const MSG16 *msg16, MSG *msg32);\nstatic void map_msg16_32(MSG *a32, const MSG16 *a16)\n{\n    FIXME(\"unicode <-> ANSI\\n\");\n    window_message16_32(a16, a32);\n}\nstatic void map_msg32_16(MSG16 *a16, const MSG *a32)\n{\n    FIXME(\"unicode <-> ANSI\\n\");\n    window_message32_16(a32, a16);\n}\n#define MAP_LPMSG16_32(a32, a16) \\\n    if (a16 == 0)\\\n        a32 = NULL;\\\n    else\\\n        map_msg16_32(a32 = (LPMSG)alloca(sizeof(MSG)), (const MSG16*)MapSL(a16))\n#define MAP_LPMSG32_16(a16, a32) \\\n    if (a32 == NULL)\\\n        a16 = 0;\\\n    else\\\n        map_msg32_16((MSG16*)MapSL(a16 = MapLS(alloca(sizeof(MSG16)))), a32)\n#define MAP_LPCRECT16_32(a32, a16) \\\n    if (a16 == 0)\\\n        a32 = NULL;\\\n    else\\\n        map_rect16_32(a32 = (LPCRECT*)alloca(sizeof(RECT)), (RECT16*)MapSL(a16))\n#define MAP_LPCBORDERWIDTHS16_32 MAP_LPCRECT16_32\n#define MAP_LPCRECT32_16(a16, a32) \\\n    if (a32 == NULL)\\\n        a16 = 0;\\\n    else\\\n        map_rect32_16(MapSL(a16 = MapLS((const RECT16*)alloca(sizeof(RECT16)))), (RECT*)a32)\n#define MAP_LPCBORDERWIDTHS32_16 MAP_LPCRECT32_16\n#define MAP_IViewObjectCallback16_32(a32, a16) \\\n    if (a16)\\\n        FIXME(\"16-bit callback func ptr-> 32-bit callback func ptr\\n\");\\\n    a32 = 0\n#define MAP_IViewObjectCallback32_16(a16, a32) \\\n    if (a32)\\\n        FIXME(\"32-bit callback func ptr -> 16-bit callback func ptr\\n\");\\\n    a16 = 0\n#define MAP_HOLEMENU16_32(a32,a16) a32 = HWND_32(a16);FIXME(\"MAP_HOLEMENU16_32\\n\");\n#define MAP_HOLEMENU32_16(a16, a32) a16 = HWND_16(a32);FIXME(\"MAP_HOLEMENU32_16\\n\");\n\nstatic inline void map_statdata32_16(STATDATA16* a16, const STATDATA *a32)\n{\n    map_formatetc32_16(&a16->formatetc, &a32->formatetc);\n    a16->advf = a32->advf;\n    a16->pAdvSink = (IAdviseSink*)iface32_16(&IID_IAdviseSink, a32->pAdvSink);\n    a16->dwConnection = a32->dwConnection;\n}\nstatic inline void map_statdata16_32(STATDATA* a32, const STATDATA16 *a16)\n{\n    map_formatetc16_32(&a32->formatetc, &a16->formatetc);\n    a32->advf = a16->advf;\n    a32->pAdvSink = iface16_32(&IID_IAdviseSink, a16->pAdvSink);\n    a32->dwConnection = a16->dwConnection;\n}\n#define MAP_STATDATA32_16(a16, a32) map_statdata32_16(&a16, &a32)\n#define MAP_STATDATA16_32(a32, a16) FIXME(\"\\n\");\n\ntypedef unsigned int TYP16_LPOLEINPLACEFRAMEINFO;\ntypedef unsigned int TYP16_LPOLEMENUGROUPWIDTHS;\ntypedef SEGPTR TYP16_LPCRECT, TYP16_LPDATAOBJECT, TYP16_LPCBORDERWIDTHS, TYP16_LPCRECTL;\n\ntypedef struct TYP16_tagOLEVERB\n{\n    LONG lVerb;\n    /*LPOLESTR*/SEGPTR lpszVerbName;\n    DWORD fuFlags;\n    DWORD grfAttribs;\n} \tOLEVERB16;\n\nvoid map_oleverb16_32(OLEVERB* a32, const OLEVERB16 *a16);\nvoid map_oleverb32_16(OLEVERB16* a16, const OLEVERB *a32);\n#define MAP_STRUCT_tagOLEVERB16_32(a32, a16) map_oleverb16_32(&a32, &a16)\n#define MAP_STRUCT_tagOLEVERB32_16(a16, a32) map_oleverb32_16(&a16, &a32)\n#define MAP_PTR_DWORD16_32(a32, a16) a32 = (DWORD*)MapSL(a16)\n#define MAP_PTR_DWORD32_16(a16, a32) a16 = MapLS(a32)\n#define MAP_PTR_PTR_IFACE_IMoniker16_32(a32, a16) FIXME(\"\\n\")\n#define MAP_PTR_PTR_IFACE_IMoniker32_16(a16, a32) FIXME(\"\\n\")\n#define MAP_LPOLEINPLACEFRAMEINFO16_32(a32, a16) FIXME(\"\\n\")\n#define MAP_LPOLEINPLACEFRAMEINFO32_16(a16, a32) FIXME(\"\\n\")\n#define MAP_LPOLEMENUGROUPWIDTHS16_32(a32, a16) FIXME(\"\\n\")\n#define MAP_LPOLEMENUGROUPWIDTHS32_16(a16, a32) FIXME(\"\\n\")\n\n#define UNMAP_PTR_DWORD16_32\n#define UNMAP_PTR_DWORD32_16\n#define UNMAP_PTR_PTR_IFACE_IMoniker16_32\n#define UNMAP_PTR_PTR_IFACE_IMoniker32_16\n#define UNMAP_LPOLEINPLACEFRAMEINFO16_32\n#define UNMAP_LPOLEINPLACEFRAMEINFO32_16\n#define UNMAP_LPOLEMENUGROUPWIDTHS16_32\n#define UNMAP_LPOLEMENUGROUPWIDTHS32_16\n\n#define INMAP_PTR_BIND_OPTS16_32(a32, a16) FIXME(\"\\n\")\n#define INMAP_PTR_BIND_OPTS32_16(a16, a32) FIXME(\"\\n\")\n#define INMAP_PTR_PTR_IFACE_IMoniker16_32(a32, a16) a32 = (IMoniker*)iface16_32(&IID_IMoniker, *(SEGPTR*)MapSL(a16))\n#define OUTMAP_PTR_IFACE_IMoniker32_16(a16, a32) a16 = iface32_16(&IID_IMoniker, a32)\n#define INMAP_PTR_PTR_IFACE_IMoniker32_16(a16, a32) FIXME(\"\\n\")\n#define INMAP_PTR_STGMEDIUM16_32(a32, a16) map_stgmedium16_32(&a32, (const STGMEDIUM16*)MapSL(a16))\n#define INMAP_PTR_STGMEDIUM32_16(a16, a32) map_stgmedium32_16(&a16, a32)\n#define INMAP_LPOLEMENUGROUPWIDTHS16_32(a32, a16) *(LPOLEMENUGROUPWIDTHS)&a32 = *(LPOLEMENUGROUPWIDTHS)MapSL(a16)\n#define INMAP_LPOLEMENUGROUPWIDTHS32_16(a16, a32) *(LPOLEMENUGROUPWIDTHS)&a16 = *a32\n#define INMAP_LPOLEINPLACEFRAMEINFO16_32(a32, a16) map_oleinplaceframeinfo16_32(&a32, (struct TYP16_tagOleInPlaceFrameInfo*)MapSL(a16))\n#define INMAP_LPOLEINPLACEFRAMEINFO32_16(a16, a32) map_oleinplaceframeinfo32_16(&a16, a32)\n#define INMAP_PTR_DWORD16_32(a32, a16) a32 = *(DWORD*)MapSL(a16)\n#define INMAP_PTR_DWORD32_16(a16, a32) a16 = *a32\ntypedef HRESULT TYP16_HRESULT;\n\n#define MAP_HRESULT16_32(a32, a16) a32 = hresult16_32(a16)\n#define MAP_HRESULT32_16(a16, a32) a16 = hresult32_16(a32)\n#define MAP_ULONG16_32(a32, a16) a32 = a16\n#define MAP_ULONG32_16(a16, a32) a16 = a32\n#define MAP_BOOL16_32(a32, a16) a32 = a16\n#define MAP_BOOL32_16(a16, a32) a16 = a32\n#define MAP_DWORD16_32(a32, a16) a32 = a16\n#define MAP_DWORD32_16(a16, a32) a16 = a32\n#define MAP_INT16_32(a32, a16) a32 = (INT)(INT16)a16\n#define MAP_INT32_16(a16, a32) a16 = (INT16)(INT)a32\n#define MAP_LONG16_32(a32, a16) a32 = a16\n#define MAP_LONG32_16(a16, a32) a16 = a32\n#define MAP_WORD16_32(a32, a16) a32 = a16\n#define MAP_WORD32_16(a16, a32) a16 = a32\n\n#define UNMAP_BOOL16_32\n#define UNMAP_BOOL32_16\n#define UNMAP_DWORD16_32\n#define UNMAP_DWORD32_16\n#define UNMAP_ULONG16_32\n#define UNMAP_ULONG32_16\n#define UNMAP_LONG16_32\n#define UNMAP_LONG32_16\n#define UNMAP_WORD16_32\n#define UNMAP_WORD32_16\n\n\ntypedef UINT16 TYP16_UINT;\ntypedef LCID TYP16_LCID;\ntypedef DISPID TYP16_DISPID;\ntypedef MEMBERID TYP16_MEMBERID;\ntypedef union tagBINDPTR16\n{\n    /*FUNCDESC **/SEGPTR lpfuncdesc;\n    /*VARDESC **/SEGPTR lpvardesc;\n    /*ITypeComp **/SEGPTR lptcomp;\n} \tBINDPTR16;\ntypedef BINDPTR16 TYP16_BINDPTR;\ntypedef WORD TYP16_DESCKIND;\ntypedef WORD TYP16_INVOKEKIND;\ntypedef SEGPTR TYP16_BSTR;\ntypedef HREFTYPE TYP16_HREFTYPE;\ntypedef SEGPTR TYP16_REFGUID;\ntypedef DISPPARAMS16 TYP16_DISPPARAMS;\ntypedef struct tagEXCEPINFO16 {\n\tunsigned short wCode;\n\tunsigned short wReserved;\n\tTYP16_BSTR bstrSource;\n\tTYP16_BSTR bstrDescription;\n\tTYP16_BSTR bstrHelpFile;\n\tunsigned long dwHelpContext;\n\t/* void* */SEGPTR pvReserved;\t\n\tSEGPTR pfnDeferredFillIn/* HRESULT (*pfnDeferredFillIn)(EXCEPINFO * pexcepinfo) */;\n\tSCODE scode;\n} EXCEPINFO16;\ntypedef EXCEPINFO16 TYP16_EXCEPINFO;\ntypedef INT16 TYP16_INT;\ntypedef USHORT TYP16_USHORT;\ntypedef BYTE TYP16_BYTE;\ntypedef SEGPTR TYP16_PVOID;\ntypedef SHORT TYP16_SHORT;\ntypedef HFONT TYP16_HFONT;\ntypedef HRGN TYP16_HRGN;\ntypedef CY TYP16_CY;\ntypedef WORD TYP16_TYPEKIND;\ntypedef UINT16 TYP16_OLE_HANDLE;\ntypedef OLE_XPOS_HIMETRIC TYP16_OLE_XPOS_HIMETRIC;\ntypedef OLE_YPOS_HIMETRIC TYP16_OLE_YPOS_HIMETRIC;\ntypedef OLE_XSIZE_HIMETRIC TYP16_OLE_XSIZE_HIMETRIC;\ntypedef OLE_YSIZE_HIMETRIC TYP16_OLE_YSIZE_HIMETRIC;\ntypedef POINTF TYP16_POINTF;\ntypedef struct\n{\n    /*size_t*/UINT16 cb;\n    TYP16_LPOLESTR pszTitle;\n    SIZE16 size;\n    TYP16_LPOLESTR pszDocString;\n    TYP16_LPOLESTR pszHelpFile;\n    DWORD dwHelpContext;\n} PROPPAGEINFO16;\ntypedef PROPPAGEINFO16 TYP16_PROPPAGEINFO;\ntypedef struct\n{\n\tULONG cb;\n\tHACCEL16 hAccel;\n\tUSHORT cAccel;\n\tDWORD dwFlags;\n\n} CONTROLINFO16;\ntypedef CONTROLINFO16 TYP16_CONTROLINFO;\ntypedef struct\n{\n    ULONG cElems;\n    /*TYP16_LPOLESTR* */SEGPTR pElems;\n\n} CALPOLESTR16;\ntypedef CALPOLESTR16 TYP16_CALPOLESTR;\ntypedef struct\n{\n    ULONG cElems;\n    /* DWORD* */SEGPTR pElems;\n} CADWORD16;\ntypedef CADWORD16 TYP16_CADWORD;\ntypedef struct\n{\n    long cbLicInfo;\n    BOOL16 fRuntimeKeyAvail;\n    BOOL16 fLicVerified;\n} LICINFO16;\ntypedef LICINFO16 TYP16_LICINFO;\ntypedef struct\n{\n    ULONG cElems;\n    /* GUID* */SEGPTR pElems;\n} CAUUID16;\ntypedef CAUUID16 TYP16_CAUUID;\ntypedef SEGPTR TYP16_LPCONNECTIONPOINT;\ntypedef SEGPTR TYP16_LPSTREAM;\ntypedef POINT16 TYP16_POINT;\nstruct TYP16__RECTL\n{\n    LONG left;\n    LONG top;\n    LONG right;\n    LONG bottom;\n};\ntypedef TEXTMETRIC16 TYP16_TEXTMETRICOLE;\n\ntypedef struct TYP16_tagCONNECTDATA\n{\n    /*LPUNKNOWN*/SEGPTR pUnk;\n    DWORD dwCookie;\n\n} CONNECTDATA16;\ntypedef struct TYP16_tagTYPEDESC\n{\n    union\n    {\n        /* VT_PTR */\n        /*struct TYP16_tagTYPEDESC* */SEGPTR lptdesc;\n        /* VT_CARRAY */\n        /* struct TYP16_tagARRAYDESC* */ SEGPTR  lpadesc;\n        /* VT_USERDEFINED */\n        HREFTYPE hreftype;\n    } DUMMYUNIONNAME;\n    VARTYPE vt;\n} TYPEDESC16;\n\ntypedef struct TYP16_tagIDLDESC\n{\n    /* BSTR */SEGPTR bstrIDLInfo;\n    unsigned short wIDLFlags;\n} IDLDESC16;\n\ntypedef struct TYP16_tagELEMDESC\n{\n    TYPEDESC16 tdesc;\n    IDLDESC16 idldesc;\n}  ELEMDESC16;\n\ntypedef struct TYP16_tagFUNCDESC\n{\n    MEMBERID memid;\n    /* SCODE* */SEGPTR lprgscode;\n    /* ELEMDESC* */SEGPTR lprgelemdescParam;\n    /* FUNCKIND */WORD funckind;\n    /* INVOKEKIND */WORD invkind;\n    /* CALLCONV */WORD callconv;\n    short cParams;\n    short cParamsOpt;\n    short oVft;\n    short cScodes;\n    ELEMDESC16 elemdescFunc;\n    unsigned short wFuncFlags;\n}  FUNCDESC16;\n\ntypedef struct TYP16_tagARRAYDESC16\n{\n    TYPEDESC16 tdescElem;\n    USHORT cDims;\n    SAFEARRAYBOUND16 rgbounds[1];\n} ARRAYDESC16;\n\ntypedef struct TYP16_tagTYPEATTR\n{\n    GUID guid;\n    LCID lcid;\n    unsigned long dwReserved;\n    MEMBERID memidConstructor;\n    MEMBERID memidDestructor;\n    /* char * */SEGPTR lpstrSchema;/* reserved */\n    unsigned long cbSizeInstance;\n    /* TYPEKIND */WORD typekind;\n    unsigned short cFuncs;\n    unsigned short cVars;\n    unsigned short cImplTypes;\n    unsigned short cbSizeVft;\n    unsigned short cbAlignment;\n    unsigned short wTypeFlags;\n    unsigned short wMajorVerNum;\n    unsigned short wMinorVerNum;\n    TYPEDESC16 tdescAlias;\n    IDLDESC16 idldescType;\n} TYPEATTR16;\n\ntypedef struct TYP16_tagVARDESC\n{\n    MEMBERID memid;\n    /* char* */SEGPTR lpstrSchema;\n    union\n    {\n        /* VAR_PERINSTANCE */\n        unsigned long oInst;\n        /* VAR_CONST */\n        /* VARIANT* */SEGPTR lpvarValue;\n\n    } DUMMYUNIONNAME;\n    ELEMDESC16 elemdescVar;\n    unsigned short wVarFlags;\n    /* VARKIND */WORD varkind;\n} VARDESC16;\n\n#define INMAP_LPOLESTR16_32(a32, a16) FIXME(\"INMAP_LPOLESTR16_32\\n\")\n#define INMAP_LPOLESTR32_16(a16, a32) FIXME(\"INMAP_LPOLESTR32_16\\n\")\n#define INMAP_LPRECT16_32(a32, a16) FIXME(\"INMAP_LPRECT16_32\\n\")\n#define INMAP_LPRECT32_16(a16, a32) FIXME(\"INMAP_LPRECT32_16\\n\")\nvoid map_dispparams32_16(DISPPARAMS16 *a16, const DISPPARAMS *a32);\nvoid map_dispparams16_32(DISPPARAMS *a32, const DISPPARAMS16 *a16);\n#define INMAP_PTR_DISPPARAMS16_32(a32, a16) map_dispparams16_32(&a32, (DISPPARAMS16*)MapSL(a16))\n#define INMAP_PTR_DISPPARAMS32_16(a16, a32) map_dispparams32_16(&a16, a32)\n#define INMAP_PTR_POINTF16_32(a32, a16) FIXME(\"INMAP_PTR_POINTF16_32\\n\")\n#define INMAP_PTR_POINTF32_16(a16, a32) FIXME(\"INMAP_PTR_POINTF32_16\\n\")\n#define INMAP_PTR_POINTL16_32(a32, a16) FIXME(\"INMAP_PTR_POINTL16_32\\n\")\n#define INMAP_PTR_POINTL32_16(a16, a32) FIXME(\"INMAP_PTR_POINTL32_16\\n\")\n#define INMAP_PTR_USHORT16_32(a32, a16) args32_pcFound = *(USHORT*)MapSL(args16_pcFound)\n#define INMAP_PTR_USHORT32_16(a16, a32) FIXME(\"INMAP_PTR_USHORT32_16\\n\")\n#define INMAP_PTR_VARIANT16_32(a32, a16) FIXME(\"INMAP_PTR_VARIANT16_32\\n\")\n#define INMAP_PTR_VARIANT32_16(a16, a32) FIXME(\"INMAP_PTR_VARIANT32_16\\n\")\n#define MAP_BINDPTR16_32(a32, a16) FIXME(\"MAP_BINDPTR16_32\\n\")\n#define MAP_BINDPTR32_16(a16, a32) FIXME(\"MAP_BINDPTR32_16\\n\")\nvoid map_bstr16_32(BSTR *a32, const SEGPTR *a16);\n#define MAP_BSTR16_32(a32, a16) map_bstr16_32(&a32, &a16)\nvoid map_bstr32_16(SEGPTR *a16, const BSTR *a32);\n#define MAP_BSTR32_16(a16, a32) map_bstr32_16(&a16, &a32)\n#define MAP_CADWORD16_32(a32, a16) FIXME(\"MAP_CADWORD16_32\\n\")\n#define MAP_CADWORD32_16(a16, a32) FIXME(\"MAP_CADWORD32_16\\n\")\n#define MAP_CALPOLESTR16_32(a32, a16) FIXME(\"MAP_CALPOLESTR16_32\\n\")\n#define MAP_CALPOLESTR32_16(a16, a32) FIXME(\"MAP_CALPOLESTR32_16\\n\")\n#define MAP_CAUUID16_32(a32, a16) FIXME(\"MAP_CAUUID16_32\\n\")\n#define MAP_CAUUID32_16(a16, a32) FIXME(\"MAP_CAUUID32_16\\n\")\n#define MAP_CONTROLINFO16_32(a32, a16) FIXME(\"MAP_CONTROLINFO16_32\\n\")\n#define MAP_CONTROLINFO32_16(a16, a32) FIXME(\"MAP_CONTROLINFO32_16\\n\")\n#define MAP_CY16_32(a32, a16) FIXME(\"MAP_CY16_32\\n\")\n#define MAP_CY32_16(a16, a32) FIXME(\"MAP_CY32_16\\n\")\n#define MAP_DESCKIND16_32(a32, a16) a32 = a16\n#define MAP_DESCKIND32_16(a16, a32) a16 = a32\n#define MAP_DISPID16_32(a32, a16) a32 = a16\n#define MAP_DISPID32_16(a16, a32) a16 = a32\n#define MAP_DISPPARAMS16_32(a32, a16) map_dispparams16_32(&a32, &a16)\n#define MAP_DISPPARAMS32_16(a16, a32) map_dispparams32_16(&a16, &a32)\nvoid map_excepinfo16_32(EXCEPINFO *a32, const EXCEPINFO16 *a16);\nvoid map_excepinfo32_16(EXCEPINFO16 *a16, const EXCEPINFO *a32);\n#define MAP_EXCEPINFO16_32(a32, a16) map_excepinfo16_32(&a32, &a16)\n#define MAP_EXCEPINFO32_16(a16, a32) map_excepinfo32_16(&a16, &a32)\n#define MAP_HFONT16_32(a32, a16) FIXME(\"MAP_HFONT16_32\\n\")\n#define MAP_HFONT32_16(a16, a32) FIXME(\"MAP_HFONT32_16\\n\")\n#define MAP_HREFTYPE16_32(a32, a16) a32 = a16\n#define MAP_HREFTYPE32_16(a16, a32) a16 = a32\n#define MAP_HRGN16_32(a32, a16) FIXME(\"MAP_HRGN16_32\\n\")\n#define MAP_HRGN32_16(a16, a32) FIXME(\"MAP_HRGN32_16\\n\")\n#define MAP_IID16_32(a32, a16) FIXME(\"MAP_IID16_32\\n\")\n#define MAP_IID32_16(a16, a32) FIXME(\"MAP_IID32_16\\n\")\n#define MAP_INVOKEKIND16_32(a32, a16) a32 = a16\n#define MAP_INVOKEKIND32_16(a16, a32) a16 = a32\n#define MAP_LCID16_32(a32, a16) a32 = a16\n#define MAP_LCID32_16(a16, a32) a16 = a32\n#define MAP_LICINFO16_32(a32, a16) FIXME(\"MAP_LICINFO16_32\\n\")\n#define MAP_LICINFO32_16(a16, a32) FIXME(\"MAP_LICINFO32_16\\n\")\n#define MAP_LPOLESTR_PTR16_32(a32, a16) FIXME(\"MAP_LPOLESTR_PTR16_32\\n\")\n#define MAP_LPOLESTR_PTR32_16(a16, a32) FIXME(\"MAP_LPOLESTR_PTR32_16\\n\")\n#define MAP_MEMBERID16_32(a32, a16) a32 = a16\n#define MAP_MEMBERID32_16(a16, a32) a16 = a32\n#define MAP_OLECHAR16_32(a32, a16) FIXME(\"MAP_OLECHAR16_32\\n\")\n#define MAP_OLECHAR32_16(a16, a32) FIXME(\"MAP_OLECHAR32_16\\n\")\n#define MAP_OLE_HANDLE16_32(a32, a16) FIXME(\"MAP_OLE_HANDLE16_32\\n\")\n#define MAP_OLE_HANDLE32_16(a16, a32) FIXME(\"MAP_OLE_HANDLE32_16\\n\")\n#define MAP_OLE_XPOS_HIMETRIC16_32(a32, a16) FIXME(\"MAP_OLE_XPOS_HIMETRIC16_32\\n\")\n#define MAP_OLE_XPOS_HIMETRIC32_16(a16, a32) FIXME(\"MAP_OLE_XPOS_HIMETRIC32_16\\n\")\n#define MAP_OLE_XSIZE_HIMETRIC16_32(a32, a16) FIXME(\"MAP_OLE_XSIZE_HIMETRIC16_32\\n\")\n#define MAP_OLE_XSIZE_HIMETRIC32_16(a16, a32) FIXME(\"MAP_OLE_XSIZE_HIMETRIC32_16\\n\")\n#define MAP_OLE_YPOS_HIMETRIC16_32(a32, a16) FIXME(\"MAP_OLE_YPOS_HIMETRIC16_32\\n\")\n#define MAP_OLE_YPOS_HIMETRIC32_16(a16, a32) FIXME(\"MAP_OLE_YPOS_HIMETRIC32_16\\n\")\n#define MAP_OLE_YSIZE_HIMETRIC16_32(a32, a16) FIXME(\"MAP_OLE_YSIZE_HIMETRIC16_32\\n\")\n#define MAP_OLE_YSIZE_HIMETRIC32_16(a16, a32) FIXME(\"MAP_OLE_YSIZE_HIMETRIC32_16\\n\")\n#define MAP_POINT16_32(a32, a16) FIXME(\"MAP_POINT16_32\\n\")\n#define MAP_POINT32_16(a16, a32) FIXME(\"MAP_POINT32_16\\n\")\n#define MAP_POINTF16_32(a32, a16) FIXME(\"MAP_POINTF16_32\\n\")\n#define MAP_POINTF32_16(a16, a32) FIXME(\"MAP_POINTF32_16\\n\")\n#define MAP_PROPPAGEINFO16_32(a32, a16) FIXME(\"MAP_PROPPAGEINFO16_32\\n\")\n#define MAP_PROPPAGEINFO32_16(a16, a32) FIXME(\"MAP_PROPPAGEINFO32_16\\n\")\n#define MAP_PTR_DVEXTENTINFO16_32(a32, a16) FIXME(\"MAP_PTR_DVEXTENTINFO16_32\\n\")\n#define MAP_PTR_DVEXTENTINFO32_16(a16, a32) FIXME(\"MAP_PTR_DVEXTENTINFO32_16\\n\")\n#define MAP_PTR_EXCEPINFO16_32(a32, a16) FIXME(\"MAP_PTR_EXCEPINFO16_32\\n\")\n#define MAP_PTR_EXCEPINFO32_16(a16, a32) FIXME(\"MAP_PTR_EXCEPINFO32_16\\n\")\nFUNCDESC *map_funcdesc32(const FUNCDESC16 *a16);\nFUNCDESC16 *map_funcdesc16(const FUNCDESC *a32);\n/* GetFuncDesc -> ReleaseFuncDesc */\n#define MAP_PTR_FUNCDESC16_32(a32, a16) a32 = map_funcdesc32((FUNCDESC16*)MapSL(a16))\n#define MAP_PTR_FUNCDESC32_16(a16, a32) a16 = MapLS(map_funcdesc16(a32))\n#define MAP_PTR_HREFTYPE16_32(a32, a16) a32 = MapSL(a16)\n#define MAP_PTR_HREFTYPE32_16(a16, a32) a16 = MapLS(a32)\n#define MAP_PTR_IDLDESC16_32(a32, a16) FIXME(\"MAP_PTR_IDLDESC16_32\\n\")\n#define MAP_PTR_IDLDESC32_16(a16, a32) FIXME(\"MAP_PTR_IDLDESC32_16\\n\")\n#define MAP_PTR_IFACE_IUnknown_PTR16_32(a32, a16) FIXME(\"MAP_PTR_IFACE_IUnknown_PTR16_32\\n\")\n#define MAP_PTR_IFACE_IUnknown_PTR32_16(a16, a32) FIXME(\"MAP_PTR_IFACE_IUnknown_PTR32_16\\n\")\n#define MAP_PTR_MSG16_32(a32, a16) FIXME(\"MAP_PTR_MSG16_32\\n\")\n#define MAP_PTR_MSG32_16(a16, a32) FIXME(\"MAP_PTR_MSG32_16\\n\")\ntypedef struct\n{\n    GUID guid;\n    LCID lcid;\n    /*SYSKIND*/WORD syskind;\n    unsigned short wMajorVerNum;\n    unsigned short wMinorVerNum;\n    unsigned short wLibFlags;\n} TLIBATTR16;\nvoid map_tlibattr16_32(TLIBATTR *a32, const TLIBATTR16 *a16);\n#define MAP_PTR_TLIBATTR16_32(a32, a16) \\\n{\\\n    a32 = (TLIBATTR*)HeapAlloc(GetProcessHeap(), 0, sizeof(TLIBATTR)); /* leak */\\\n    map_tlibattr16_32(a32, (TLIBATTR16*)MapSL(a16));\\\n}\nvoid map_tlibattr32_16(TLIBATTR16 *a16, const TLIBATTR *a32);\n#define MAP_PTR_TLIBATTR32_16(a16, a32) \\\n{\\\n    TLIBATTR16 *p16 = (TLIBATTR16*)HeapAlloc(GetProcessHeap(), 0, sizeof(TLIBATTR16)); /* leak */\\\n    map_tlibattr32_16(p16, a32);\\\n    a16 = MapLS(p16);\\\n}\n#define MAP_PTR_TYPEATTR16_32(a32, a16) FIXME(\"MAP_PTR_TYPEATTR16_32\\n\")\nTYPEATTR16 *map_typeattr32_16(const TYPEATTR *a32);\n#define MAP_PTR_TYPEATTR32_16(a16, a32) a16 = MapLS(map_typeattr32_16(a32))\n#define MAP_PTR_TYPEDESC16_32(a32, a16) FIXME(\"MAP_PTR_TYPEDESC16_32\\n\")\n#define MAP_PTR_TYPEDESC32_16(a16, a32) FIXME(\"MAP_PTR_TYPEDESC32_16\\n\")\nVARDESC *map_vardesc32(const VARDESC16 *a16);\n#define MAP_PTR_VARDESC16_32(a32, a16) a32 = map_vardesc32(a16)\nVARDESC16 *map_vardesc16(const VARDESC *a32);\n#define MAP_PTR_VARDESC32_16(a16, a32) a16 = MapLS(map_vardesc16(a32))\n#define MAP_PTR_VARIANT16_32(a32, a16) FIXME(\"MAP_PTR_VARIANT16_32\\n\")\n#define MAP_PTR_VARIANT32_16(a16, a32) FIXME(\"MAP_PTR_VARIANT32_16\\n\")\n#define MAP_PVOID16_32(a32, a16) MAP_PTR_VOID16_32(a32, a16)\n#define MAP_PVOID32_16(a16, a32) MAP_PTR_VOID32_16(a16, a32)\n#define MAP_REFGUID16_32(a32, a16) *(GUID**)&a32 = (GUID*)MapSL(a16)\n#define MAP_REFGUID32_16(a16, a32) a16 = MapLS(a32)\n#define MAP_SHORT16_32(a32, a16) a32 = (SHORT)a16\n#define MAP_SHORT32_16(a16, a32) a16 = a32\n#define MAP_STRUCT__RECTL16_32(a32, a16) FIXME(\"MAP_STRUCT__RECTL16_32\\n\")\n#define MAP_STRUCT__RECTL32_16(a16, a32) FIXME(\"MAP_STRUCT__RECTL32_16\\n\")\n#define MAP_STRUCT_tagCONNECTDATA16_32(a32, a16) FIXME(\"MAP_STRUCT_tagCONNECTDATA16_32\\n\")\n#define MAP_STRUCT_tagCONNECTDATA32_16(a16, a32) FIXME(\"MAP_STRUCT_tagCONNECTDATA32_16\\n\")\n#define MAP_TEXTMETRICOLE16_32(a32, a16) FIXME(\"MAP_TEXTMETRICOLE16_32\\n\")\n#define MAP_TEXTMETRICOLE32_16(a16, a32) FIXME(\"MAP_TEXTMETRICOLE32_16\\n\")\n#define MAP_TYPEKIND16_32(a32, a16) a32 = a16\n#define MAP_TYPEKIND32_16(a16, a32) a16 = a32\n#define MAP_UINT16_32(a32, a16) a32 = a16\n#define MAP_UINT32_16(a16, a32) a16 = a32\n#define MAP_USHORT16_32(a32, a16) a32 = a16\n#define MAP_USHORT32_16(a16, a32) a16 = a32\nvoid map_variant16_32(VARIANT *dst, const VARIANT16 *src);\nvoid map_variant32_16(VARIANT16 *dst, const VARIANT *src);\n#define MAP_VARIANT16_32(a32, a16) map_variant16_32(&a32, &a16)\n#define MAP_VARIANT32_16(a16, a32) map_variant32_16(&a16, &a32)\n#define UNMAP_BSTR16_32(a32, a16) FIXME(\"UNMAP_BSTR16_32\\n\")\n#define UNMAP_BSTR32_16(a16, a32) FIXME(\"UNMAP_BSTR32_16\\n\")\n#define UNMAP_CY16_32(a32, a16)\n#define UNMAP_CY32_16(a16, a32)\n#define UNMAP_DISPID16_32(a32, a16)\n#define UNMAP_DISPID32_16(a16, a32)\n#define UNMAP_HFONT16_32(a32, a16)\n#define UNMAP_HFONT32_16(a16, a32)\n#define UNMAP_HREFTYPE16_32(a32, a16)\n#define UNMAP_HREFTYPE32_16(a16, a32)\n#define UNMAP_HRGN16_32(a32, a16)\n#define UNMAP_HRGN32_16(a16, a32)\n#define UNMAP_INT16_32(a32, a16)\n#define UNMAP_INT32_16(a16, a32)\n#define UNMAP_INVOKEKIND16_32(a32, a16)\n#define UNMAP_INVOKEKIND32_16(a16, a32)\n#define UNMAP_LCID16_32(a32, a16)\n#define UNMAP_LCID32_16(a16, a32)\n#define UNMAP_LPOLESTR_PTR16_32(a32, a16) FIXME(\"UNMAP_LPOLESTR_PTR16_32\\n\")\n#define UNMAP_LPOLESTR_PTR32_16(a16, a32) FIXME(\"UNMAP_LPOLESTR_PTR32_16\\n\")\n#define UNMAP_LPRECT16_32(a32, a16) FIXME(\"UNMAP_LPRECT16_32\\n\")\n#define UNMAP_LPRECT32_16(a16, a32) FIXME(\"UNMAP_LPRECT32_16\\n\")\n#define UNMAP_MEMBERID16_32(a32, a16)\n#define UNMAP_MEMBERID32_16(a16, a32)\n#define UNMAP_OLE_HANDLE16_32(a32, a16) FIXME(\"UNMAP_OLE_HANDLE16_32\\n\")\n#define UNMAP_OLE_HANDLE32_16(a16, a32) FIXME(\"UNMAP_OLE_HANDLE32_16\\n\")\n#define UNMAP_OLE_XPOS_HIMETRIC16_32(a32, a16) FIXME(\"UNMAP_OLE_XPOS_HIMETRIC16_32\\n\")\n#define UNMAP_OLE_XPOS_HIMETRIC32_16(a16, a32) FIXME(\"UNMAP_OLE_XPOS_HIMETRIC32_16\\n\")\n#define UNMAP_OLE_XSIZE_HIMETRIC16_32(a32, a16) FIXME(\"UNMAP_OLE_XSIZE_HIMETRIC16_32\\n\")\n#define UNMAP_OLE_XSIZE_HIMETRIC32_16(a16, a32) FIXME(\"UNMAP_OLE_XSIZE_HIMETRIC32_16\\n\")\n#define UNMAP_OLE_YPOS_HIMETRIC16_32(a32, a16) FIXME(\"UNMAP_OLE_YPOS_HIMETRIC16_32\\n\")\n#define UNMAP_OLE_YPOS_HIMETRIC32_16(a16, a32) FIXME(\"UNMAP_OLE_YPOS_HIMETRIC32_16\\n\")\n#define UNMAP_OLE_YSIZE_HIMETRIC16_32(a32, a16) FIXME(\"UNMAP_OLE_YSIZE_HIMETRIC16_32\\n\")\n#define UNMAP_OLE_YSIZE_HIMETRIC32_16(a16, a32) FIXME(\"UNMAP_OLE_YSIZE_HIMETRIC32_16\\n\")\n#define UNMAP_POINT16_32(a32, a16) FIXME(\"UNMAP_POINT16_32\\n\")\n#define UNMAP_POINT32_16(a16, a32) FIXME(\"UNMAP_POINT32_16\\n\")\n#define UNMAP_PTR_DISPPARAMS16_32(a32, a16) FIXME(\"UNMAP_PTR_DISPPARAMS16_32\\n\")\n#define UNMAP_PTR_DISPPARAMS32_16(a16, a32) FIXME(\"UNMAP_PTR_DISPPARAMS32_16\\n\")\n#define UNMAP_PTR_DVEXTENTINFO16_32(a32, a16) FIXME(\"UNMAP_PTR_DVEXTENTINFO16_32\\n\")\n#define UNMAP_PTR_DVEXTENTINFO32_16(a16, a32) FIXME(\"UNMAP_PTR_DVEXTENTINFO32_16\\n\")\n#define UNMAP_PTR_EXCEPINFO16_32(a32, a16) FIXME(\"UNMAP_PTR_EXCEPINFO16_32\\n\")\n#define UNMAP_PTR_EXCEPINFO32_16(a16, a32) FIXME(\"UNMAP_PTR_EXCEPINFO32_16\\n\")\n#define UNMAP_PTR_FUNCDESC16_32(a32, a16) FIXME(\"UNMAP_PTR_FUNCDESC16_32\\n\")\n#define UNMAP_PTR_FUNCDESC32_16(a16, a32) FIXME(\"UNMAP_PTR_FUNCDESC32_16\\n\")\n#define UNMAP_PTR_HREFTYPE16_32(a32, a16)\n#define UNMAP_PTR_HREFTYPE32_16(a16, a32)\n#define UNMAP_PTR_IDLDESC16_32(a32, a16) FIXME(\"UNMAP_PTR_IDLDESC16_32\\n\")\n#define UNMAP_PTR_IDLDESC32_16(a16, a32) FIXME(\"UNMAP_PTR_IDLDESC32_16\\n\")\n#define UNMAP_PTR_IFACE_IUnknown_PTR16_32(a32, a16) FIXME(\"UNMAP_PTR_IFACE_IUnknown_PTR16_32\\n\")\n#define UNMAP_PTR_IFACE_IUnknown_PTR32_16(a16, a32) FIXME(\"UNMAP_PTR_IFACE_IUnknown_PTR32_16\\n\")\n#define UNMAP_PTR_MSG16_32(a32, a16) FIXME(\"UNMAP_PTR_MSG16_32\\n\")\n#define UNMAP_PTR_MSG32_16(a16, a32) FIXME(\"UNMAP_PTR_MSG32_16\\n\")\n#define UNMAP_PTR_POINTF16_32(a32, a16) FIXME(\"UNMAP_PTR_POINTF16_32\\n\")\n#define UNMAP_PTR_POINTF32_16(a16, a32) FIXME(\"UNMAP_PTR_POINTF32_16\\n\")\n#define UNMAP_PTR_POINTL16_32(a32, a16) FIXME(\"UNMAP_PTR_POINTL16_32\\n\")\n#define UNMAP_PTR_POINTL32_16(a16, a32) FIXME(\"UNMAP_PTR_POINTL32_16\\n\")\n#define UNMAP_PTR_TLIBATTR16_32(a32, a16)\n#define UNMAP_PTR_TLIBATTR32_16(a16, a32)\n#define UNMAP_PTR_TYPEATTR16_32(a32, a16) FIXME(\"UNMAP_PTR_TYPEATTR16_32\\n\")\n#define UNMAP_PTR_TYPEATTR32_16(a16, a32) FIXME(\"UNMAP_PTR_TYPEATTR32_16\\n\")\n#define UNMAP_PTR_TYPEDESC16_32(a32, a16) FIXME(\"UNMAP_PTR_TYPEDESC16_32\\n\")\n#define UNMAP_PTR_TYPEDESC32_16(a16, a32) FIXME(\"UNMAP_PTR_TYPEDESC32_16\\n\")\n#define UNMAP_PTR_USHORT16_32(a32, a16) FIXME(\"UNMAP_PTR_USHORT16_32\\n\")\n#define UNMAP_PTR_USHORT32_16(a16, a32) FIXME(\"UNMAP_PTR_USHORT32_16\\n\")\n#define UNMAP_PTR_VARDESC16_32(a32, a16) FIXME(\"UNMAP_PTR_VARDESC16_32\\n\")\n#define UNMAP_PTR_VARDESC32_16(a16, a32) FIXME(\"UNMAP_PTR_VARDESC32_16\\n\")\n#define UNMAP_PTR_VARIANT16_32(a32, a16) FIXME(\"UNMAP_PTR_VARIANT16_32\\n\")\n#define UNMAP_PTR_VARIANT32_16(a16, a32) FIXME(\"UNMAP_PTR_VARIANT32_16\\n\")\n#define UNMAP_PVOID16_32(a32, a16)\n#define UNMAP_PVOID32_16(a16, a32)\n#define UNMAP_REFGUID16_32(a32, a16)\n#define UNMAP_REFGUID32_16(a16, a32)\n#define UNMAP_SHORT16_32(a32, a16) FIXME(\"UNMAP_SHORT16_32\\n\")\n#define UNMAP_SHORT32_16(a16, a32) FIXME(\"UNMAP_SHORT32_16\\n\")\n#define UNMAP_TYPEKIND16_32(a32, a16) FIXME(\"UNMAP_TYPEKIND16_32\\n\")\n#define UNMAP_TYPEKIND32_16(a16, a32) FIXME(\"UNMAP_TYPEKIND32_16\\n\")\n#define UNMAP_UINT16_32(a32, a16)\n#define UNMAP_UINT32_16(a16, a32)\n\n#define OUTMAP_BIND_OPTS16_32 MAP_BIND_OPTS16_32\n#define OUTMAP_BIND_OPTS32_16 MAP_BIND_OPTS32_16\n#define OUTMAP_DISPPARAMS16_32 MAP_DISPPARAMS16_32\n#define OUTMAP_DISPPARAMS32_16 MAP_DISPPARAMS32_16\n#define OUTMAP_DWORD16_32 MAP_DWORD16_32\n#define OUTMAP_DWORD32_16 MAP_DWORD32_16\n#define OUTMAP_OLECHAR16_32 MAP_OLECHAR16_32\n#define OUTMAP_OLECHAR32_16 MAP_OLECHAR32_16\n#define OUTMAP_POINTF16_32 MAP_POINTF16_32\n#define OUTMAP_POINTF32_16 MAP_POINTF32_16\n#define OUTMAP_POINTL16_32 MAP_POINTL16_32\n#define OUTMAP_POINTL32_16 MAP_POINTL32_16\n#define OUTMAP_STGMEDIUM16_32 MAP_STGMEDIUM16_32\n#define OUTMAP_STGMEDIUM32_16 MAP_STGMEDIUM32_16\n#define OUTMAP_STRUCT_tagOleInPlaceFrameInfo16_32 MAP_STRUCT_tagOleInPlaceFrameInfo16_32\n#define OUTMAP_STRUCT_tagOleInPlaceFrameInfo32_16 MAP_STRUCT_tagOleInPlaceFrameInfo32_16\n#define OUTMAP_STRUCT_tagOleMenuGroupWidths16_32 MAP_STRUCT_tagOleMenuGroupWidths16_32\n#define OUTMAP_STRUCT_tagOleMenuGroupWidths32_16 MAP_STRUCT_tagOleMenuGroupWidths32_16\n#define OUTMAP_STRUCT_tagRECT16_32 MAP_STRUCT_tagRECT16_32\n#define OUTMAP_STRUCT_tagRECT32_16 MAP_STRUCT_tagRECT32_16\n#define OUTMAP_USHORT16_32 MAP_USHORT16_32\n#define OUTMAP_USHORT32_16 MAP_USHORT32_16\n#define OUTMAP_VARIANT16_32 MAP_VARIANT16_32\n#define OUTMAP_VARIANT32_16 MAP_VARIANT32_16\n\n\n#define IFS3216_OVERWRITE_IOleInPlaceSiteWindowless_OnDefWindowMessage\nHRESULT STDMETHODCALLTYPE IOleInPlaceSiteWindowless_32_16_OnDefWindowMessage(IOleInPlaceSiteWindowless *This, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *plResult);\n#define IFS1632_OVERWRITE_IOleInPlaceSiteWindowless_OnDefWindowMessage\nHRESULT CDECL IOleInPlaceSiteWindowless_16_32_OnDefWindowMessage(SEGPTR This, DWORD args16_msg, DWORD args16_wParam, DWORD args16_lParam, SEGPTR args16_plResult);\n#define IFS3216_OVERWRITE_IOleInPlaceObjectWindowless_OnWindowMessage\nHRESULT STDMETHODCALLTYPE IOleInPlaceObjectWindowless_32_16_OnWindowMessage(IOleInPlaceObjectWindowless *This, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *plResult);\n#define IFS1632_OVERWRITE_IOleInPlaceObjectWindowless_OnWindowMessage\nHRESULT CDECL IOleInPlaceObjectWindowless_16_32_OnWindowMessage(SEGPTR This, DWORD args16_msg, DWORD args16_wParam, DWORD args16_lParam, SEGPTR args16_plResult);\n#define IFS1632_OVERWRITE_ISimpleFrameSite_PreMessageFilter\nHRESULT CDECL ISimpleFrameSite_16_32_PreMessageFilter(SEGPTR This, WORD args16_hWnd, DWORD args16_msg, DWORD args16_wp, DWORD args16_lp, SEGPTR args16_plResult, SEGPTR args16_pdwCookie);\n#define IFS3216_OVERWRITE_ISimpleFrameSite_PreMessageFilter\nHRESULT STDMETHODCALLTYPE ISimpleFrameSite_32_16_PreMessageFilter(ISimpleFrameSite *This, HWND hWnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *plResult, DWORD *pdwCookie);\n#define IFS1632_OVERWRITE_ISimpleFrameSite_PostMessageFilter\nHRESULT CDECL ISimpleFrameSite_16_32_PostMessageFilter(SEGPTR This, WORD args16_hWnd, DWORD args16_msg, DWORD args16_wp, DWORD args16_lp, SEGPTR args16_plResult, DWORD args16_dwCookie);\n#define IFS3216_OVERWRITE_ISimpleFrameSite_PostMessageFilter\nHRESULT STDMETHODCALLTYPE ISimpleFrameSite_32_16_PostMessageFilter(ISimpleFrameSite *This, HWND hWnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *plResult, DWORD dwCookie);\n#include \"../ole2disp/ole2disp.h\"\ntypedef VARIANT16 TYP16_VARIANT;\ntypedef OLECHAR16 TYP16_OLECHAR;\n#include <poppack.h>\n#define IFS1632_OVERWRITE_ITypeLib_IsName\nHRESULT CDECL ITypeLib_16_32_IsName(SEGPTR This, SEGPTR args16_szNameBuf, DWORD args16_lHashVal, SEGPTR args16_pfName);\n#define IFS3216_OVERWRITE_ITypeLib_IsName\nHRESULT STDMETHODCALLTYPE ITypeLib_32_16_IsName(ITypeLib *This, LPOLESTR szNameBuf, ULONG lHashVal, BOOL *pfName);\n\n#define IFS1632_OVERWRITE_ITypeInfo_ReleaseFuncDesc\nvoid CDECL ITypeInfo_16_32_ReleaseFuncDesc(SEGPTR This, SEGPTR args16_pFuncDesc);\n#define IFS3216_OVERWRITE_ITypeInfo_ReleaseFuncDesc\nvoid STDMETHODCALLTYPE ITypeInfo_32_16_ReleaseFuncDesc(ITypeInfo *This, FUNCDESC *pFuncDesc);\n#define IFS1632_OVERWRITE_ITypeInfo_ReleaseTypeAttr\nvoid CDECL ITypeInfo_16_32_ReleaseTypeAttr(SEGPTR This, SEGPTR args16_pTypeAttr);\n#define IFS3216_OVERWRITE_ITypeInfo_ReleaseTypeAttr\nvoid STDMETHODCALLTYPE ITypeInfo_32_16_ReleaseTypeAttr(ITypeInfo *This, TYPEATTR *pTypeAttr);\n#define IFS1632_OVERWRITE_ITypeComp_Bind\nHRESULT CDECL ITypeComp_16_32_Bind(SEGPTR This, SEGPTR args16_szName, DWORD args16_lHashVal, WORD args16_wFlags, SEGPTR args16_ppTInfo, SEGPTR args16_pDescKind, SEGPTR args16_pBindPtr);\n#define IFS3216_OVERWRITE_ITypeComp_Bind\nHRESULT STDMETHODCALLTYPE ITypeComp_32_16_Bind(ITypeComp *This, LPOLESTR szName, ULONG lHashVal, WORD wFlags, ITypeInfo **ppTInfo, DESCKIND *pDescKind, BINDPTR *pBindPtr);\n\n#define IFS1632_OVERWRITE_ITypeInfo_ReleaseVarDesc\nvoid CDECL ITypeInfo_16_32_ReleaseVarDesc(SEGPTR This, SEGPTR args16_pVarDesc);\n#define IFS3216_OVERWRITE_ITypeInfo_ReleaseVarDesc\nvoid STDMETHODCALLTYPE ITypeInfo_32_16_ReleaseVarDesc(ITypeInfo *This, VARDESC *pVarDesc);\n\ntypedef struct tagSIZEL\n{\n    LONG cx;\n    LONG cy;\n};\n#define TYP16_tagSIZEL tagSIZEL\n#define MAP_STRUCT_tagSIZEL16_32(a32, a16) *(SIZEL*)&a32 = *(SIZEL*)&a16\n#define MAP_STRUCT_tagSIZEL32_16(a16, a32) *(SIZEL*)&a16 = *(SIZEL*)&a32\n\ntypedef struct\n{\n    DWORD(CALLBACK* Get)(LPOLESTREAM, void FAR*, DWORD);\n    DWORD(CALLBACK* Put)(LPOLESTREAM, const void FAR*, DWORD);\n} OLESTREAM32Vtbl;\n\ntypedef struct\n{\n    OLESTREAM32Vtbl *lpVtbl;\n} OLESTREAM32;\n\n#define IFS3216_OVERWRITE_OLESTREAM32_Get\nDWORD __stdcall OLESTREAM32_32_16_Get(OLESTREAM32 *This, void *lpszBuf, DWORD cbbuf);\n#define IFS3216_OVERWRITE_OLESTREAM32_Put\nDWORD __stdcall OLESTREAM32_32_16_Put(OLESTREAM32 *This, const void *lpszBuf, DWORD cbbuf);\n\n#define IFS1632_OVERWRITE_ITypeInfo_AddressOfMember\nHRESULT CDECL ITypeInfo_16_32_AddressOfMember(SEGPTR This, DWORD args16_memid, WORD args16_invKind, SEGPTR args16_ppv);\n\n#define IFS1632_OVERWRITE_ITypeInfo_Invoke\nHRESULT CDECL ITypeInfo_16_32_Invoke(SEGPTR This, SEGPTR args16_pvInstance, DWORD args16_memid, WORD args16_wFlags, SEGPTR args16_pDispParams, SEGPTR args16_pVarResult, SEGPTR args16_pExcepInfo, SEGPTR args16_puArgErr);\n\n#define IFS1632_OVERWRITE_ITypeLib_FindName\nHRESULT CDECL ITypeLib_16_32_FindName(SEGPTR This, SEGPTR args16_szNameBuf, DWORD args16_lHashVal, SEGPTR args16_ppTInfo, SEGPTR args16_rgMemId, SEGPTR args16_pcFound);\n\n#define IFS3216_OVERWRITE_IMessageFilter_HandleInComingCall\nDWORD STDMETHODCALLTYPE IMessageFilter_32_16_HandleInComingCall(IMessageFilter *This, DWORD dwCallType,HTASK htaskCaller,DWORD dwTickCount,LPINTERFACEINFO lpInterfaceInfo);\n\n#define IFS1632_OVERWRITE_IDataObject_DAdvise\nHRESULT CDECL IDataObject_16_32_DAdvise(SEGPTR This, SEGPTR args16_pformatetc, DWORD args16_advf, SEGPTR args16_pAdvSink, SEGPTR args16_pdwConnection);\n\n#endif\n"
  },
  {
    "path": "ole2/memlockbytes.c",
    "content": "/*\n * Global memory implementation of ILockBytes.\n *\n * Copyright 1999 Thuy Nguyen\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <assert.h>\n#include <stdarg.h>\n#include <string.h>\n\n#define NONAMELESSUNION\n#undef DUMMYSTRUCTNAME\n#undef DUMMYUNIONNAME\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/winbase16.h\"\n#include \"winuser.h\"\n#include \"objbase.h\"\n#include \"ole2.h\"\n#include \"winerror.h\"\n\n#include \"ifs.h\"\n\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(ole);\n\n/******************************************************************************\n * HGLOBALLockBytesImpl16 definition.\n *\n * This class implements the ILockBytes interface and represents a byte array\n * object supported by an HGLOBAL pointer.\n */\nstruct HGLOBALLockBytesImpl16\n{\n  ILockBytes16 ILockBytes16_iface;\n  LONG ref;\n\n  /*\n   * Support for the LockBytes object\n   */\n  HGLOBAL16 supportHandle;\n\n  /*\n   * This flag is TRUE if the HGLOBAL is destroyed when the object\n   * is finally released.\n   */\n  BOOL    deleteOnRelease;\n  /*\n   * Helper variable that contains the size of the byte array\n   */\n  ULARGE_INTEGER     byteArraySize;\n};\n\ntypedef struct HGLOBALLockBytesImpl16 HGLOBALLockBytesImpl16;\n\n/******************************************************************************\n *\n * HGLOBALLockBytesImpl16 implementation\n *\n */\n\nstatic inline HGLOBALLockBytesImpl16 *impl_from_ILockBytes16(ILockBytes16 *iface)\n{\n  return CONTAINING_RECORD(iface, HGLOBALLockBytesImpl16, ILockBytes16_iface);\n}\n\nstatic SEGPTR msegvt16;\n/******************************************************************************\n * This is the constructor for the HGLOBALLockBytesImpl16 class.\n *\n * Params:\n *    hGlobal          - Handle that will support the stream. can be NULL.\n *    fDeleteOnRelease - Flag set to TRUE if the HGLOBAL16 will be released\n *                       when the IStream object is destroyed.\n */\nstatic HGLOBALLockBytesImpl16*\nHGLOBALLockBytesImpl16_Construct(HGLOBAL16 hGlobal,\n\t\t\t\t BOOL16 fDeleteOnRelease)\n{\n  HGLOBALLockBytesImpl16* newLockBytes;\n\n  static ILockBytes16Vtbl vt16;\n\n\n  TRACE(\"(%x,%d)\\n\",hGlobal,fDeleteOnRelease);\n  newLockBytes = HeapAlloc(GetProcessHeap(), 0, sizeof(HGLOBALLockBytesImpl16));\n  if (newLockBytes == NULL)\n    return NULL;\n\n  /*\n   * Set up the virtual function table and reference count.\n   */\n  if (!msegvt16)\n  {\n      HMODULE16 hcomp = GetModuleHandle16(\"OLE2\");\n#define VTENT(x) vt16.x = (void*)GetProcAddress16(hcomp,\"HGLOBALLockBytesImpl16_\"#x);assert(vt16.x)\n      VTENT(QueryInterface);\n      VTENT(AddRef);\n      VTENT(Release);\n      VTENT(ReadAt);\n      VTENT(WriteAt);\n      VTENT(Flush);\n      VTENT(SetSize);\n      VTENT(LockRegion);\n      VTENT(UnlockRegion);\n      VTENT(Stat);\n#undef VTENT\n      msegvt16 = MapLS( &vt16 );\n  }\n  newLockBytes->ILockBytes16_iface.lpVtbl = (const ILockBytes16Vtbl*)msegvt16;\n  newLockBytes->ref = 0;\n  /*\n   * Initialize the support.\n   */\n  newLockBytes->supportHandle = hGlobal;\n  newLockBytes->deleteOnRelease = fDeleteOnRelease;\n\n  /*\n   * This method will allocate a handle if one is not supplied.\n   */\n  if (newLockBytes->supportHandle == 0)\n    newLockBytes->supportHandle = GlobalAlloc16(GMEM_MOVEABLE | GMEM_NODISCARD, 0);\n\n  /*\n   * Initialize the size of the array to the size of the handle.\n   */\n  newLockBytes->byteArraySize.u.HighPart = 0;\n  newLockBytes->byteArraySize.u.LowPart  = GlobalSize16(\n\t\t\t\t\t    newLockBytes->supportHandle);\n\n  return (HGLOBALLockBytesImpl16*)MapLS(newLockBytes);\n}\n\n/******************************************************************************\n * This is the destructor of the HGLOBALStreamImpl class.\n *\n * This method will clean-up all the resources used-up by the given\n * HGLOBALLockBytesImpl16 class. The pointer passed-in to this function will be\n * freed and will not be valid anymore.\n */\nstatic void HGLOBALLockBytesImpl16_Destroy(HGLOBALLockBytesImpl16* This)\n{\n  TRACE(\"()\\n\");\n  /*\n   * Release the HGlobal if the constructor asked for that.\n   */\n  if (This->deleteOnRelease)\n  {\n    GlobalFree16(This->supportHandle);\n    This->supportHandle = 0;\n  }\n\n  /*\n   * Finally, free the memory used-up by the class.\n   */\n  HeapFree(GetProcessHeap(), 0, This);\n}\n\n/******************************************************************************\n * This implements the IUnknown method AddRef for this\n * class\n */\nULONG CDECL HGLOBALLockBytesImpl16_AddRef(ILockBytes16* iface)\n{\n  HGLOBALLockBytesImpl16* const This = impl_from_ILockBytes16(iface);\n\n  TRACE(\"(%p)\\n\",This);\n\n  return InterlockedIncrement(&This->ref);\n}\n\n\n/******************************************************************************\n * This implements the IUnknown method QueryInterface for this\n * class\n */\nHRESULT CDECL HGLOBALLockBytesImpl16_QueryInterface(\n      ILockBytes16*  iface,\t/* [in] SEGPTR */\n      REFIID       riid,        /* [in] */\n      void**       ppvObject)   /* [out][iid_is] (ptr to SEGPTR!) */\n{\n  HGLOBALLockBytesImpl16* const This = MapSL((SEGPTR)iface);\n\n  TRACE(\"(%p,%s,%p)\\n\",iface,debugstr_guid(riid),ppvObject);\n  /*\n   * Perform a sanity check on the parameters.\n   */\n  if (ppvObject==0)\n    return E_INVALIDARG16;\n\n  /*\n   * Initialize the return parameter.\n   */\n  *ppvObject = 0;\n  /*\n   * Compare the riid with the interface IDs implemented by this object.\n   */\n  if (\t!memcmp(&IID_IUnknown, riid, sizeof(IID_IUnknown)) ||\n        !memcmp(&IID_ILockBytes, riid, sizeof(IID_ILockBytes))\n  )\n    *ppvObject = (void*)iface;\n\n  /*\n   * Check that we obtained an interface.\n   */\n  if ((*ppvObject)==0) {\n    return E_NOINTERFACE16;\n  }\n\n  /*\n   * Query Interface always increases the reference count by one when it is\n   * successful\n   */\n  HGLOBALLockBytesImpl16_AddRef(&This->ILockBytes16_iface);\n\n  return S_OK;\n}\n\n/******************************************************************************\n * This implements the IUnknown method Release for this\n * class\n */\nULONG CDECL HGLOBALLockBytesImpl16_Release(ILockBytes16* iface)\n{\n  HGLOBALLockBytesImpl16* const This = impl_from_ILockBytes16(iface);\n  ULONG ref;\n\n  TRACE(\"(%p)\\n\",This);\n\n  ref = InterlockedDecrement(&This->ref);\n\n  /*\n   * If the reference count goes down to 0, perform suicide.\n   */\n  if (ref==0)\n    HGLOBALLockBytesImpl16_Destroy(This);\n  return ref;\n}\n\n/******************************************************************************\n * This method is part of the ILockBytes interface.\n *\n * It reads a block of information from the byte array at the specified\n * offset.\n *\n * See the documentation of ILockBytes for more info.\n */\nHRESULT CDECL HGLOBALLockBytesImpl16_ReadAt(\n      ILockBytes16*  iface,\n      ULARGE_INTEGER ulOffset,  /* [in] */\n      void*          pv,        /* [out][length_is][size_is] */\n      ULONG          cb,        /* [in] */\n      ULONG*         pcbRead)   /* [out] */\n{\n  HGLOBALLockBytesImpl16* const This = impl_from_ILockBytes16(iface);\n\n  void* supportBuffer;\n  ULONG bytesReadBuffer = 0;\n  ULONG bytesToReadFromBuffer;\n\n  TRACE(\"(%p,%d,%p,%d,%p)\\n\",This,ulOffset.u.LowPart,pv,cb,pcbRead);\n  /*\n   * If the caller is not interested in the number of bytes read,\n   * we use another buffer to avoid \"if\" statements in the code.\n   */\n  if (pcbRead == 0)\n    pcbRead = &bytesReadBuffer;\n\n  /*\n   * Make sure the offset is valid.\n   */\n  if (ulOffset.u.LowPart > This->byteArraySize.u.LowPart)\n    return E_FAIL;\n\n  /*\n   * Using the known size of the array, calculate the number of bytes\n   * to read.\n   */\n  bytesToReadFromBuffer = min(This->byteArraySize.u.LowPart -\n                              ulOffset.u.LowPart, cb);\n\n  /*\n   * Lock the buffer in position and copy the data.\n   */\n  supportBuffer = GlobalLock16(This->supportHandle);\n\n  memcpy(pv,\n         (char *) supportBuffer + ulOffset.u.LowPart,\n         bytesToReadFromBuffer);\n\n  /*\n   * Return the number of bytes read.\n   */\n  *pcbRead = bytesToReadFromBuffer;\n\n  /*\n   * Cleanup\n   */\n  GlobalUnlock16(This->supportHandle);\n\n  /*\n   * The function returns S_OK if the specified number of bytes were read\n   * or the end of the array was reached.\n   * It returns STG_E_READFAULT if the number of bytes to read does not equal\n   * the number of bytes actually read.\n   */\n  if(*pcbRead == cb)\n    return S_OK;\n\n  return STG_E_READFAULT;\n}\n\n/******************************************************************************\n * This method is part of the ILockBytes interface.\n *\n * It will change the size of the byte array.\n *\n * See the documentation of ILockBytes for more info.\n */\nHRESULT CDECL HGLOBALLockBytesImpl16_SetSize(\n      ILockBytes16*   iface,\n      ULARGE_INTEGER  libNewSize)   /* [in] */\n{\n  HGLOBALLockBytesImpl16* const This = impl_from_ILockBytes16(iface);\n  HGLOBAL16 supportHandle;\n\n  TRACE(\"(%p,%d)\\n\",This,libNewSize.u.LowPart);\n  /*\n   * As documented.\n   */\n  if (libNewSize.u.HighPart != 0)\n    return STG_E_INVALIDFUNCTION;\n\n  if (This->byteArraySize.u.LowPart == libNewSize.u.LowPart)\n    return S_OK;\n\n  /*\n   * Re allocate the HGlobal to fit the new size of the stream.\n   */\n  supportHandle = GlobalReAlloc16(This->supportHandle, libNewSize.u.LowPart, 0);\n\n  if (supportHandle == 0)\n    return STG_E_MEDIUMFULL;\n\n  This->supportHandle = supportHandle;\n  This->byteArraySize.u.LowPart = libNewSize.u.LowPart;\n\n  return S_OK;\n}\n\n/******************************************************************************\n * This method is part of the ILockBytes interface.\n *\n * It writes the specified bytes at the specified offset.\n * position. If the array is too small, it will be resized.\n *\n * See the documentation of ILockBytes for more info.\n */\nHRESULT CDECL HGLOBALLockBytesImpl16_WriteAt(\n      ILockBytes16*  iface,\n      ULARGE_INTEGER ulOffset,    /* [in] */\n      const void*    pv,          /* [in][size_is] */\n      ULONG          cb,          /* [in] */\n      ULONG*         pcbWritten)  /* [out] */\n{\n  HGLOBALLockBytesImpl16* const This = impl_from_ILockBytes16(iface);\n\n  void*          supportBuffer;\n  ULARGE_INTEGER newSize;\n  ULONG          bytesWritten = 0;\n\n  TRACE(\"(%p,%d,%p,%d,%p)\\n\",This,ulOffset.u.LowPart,pv,cb,pcbWritten);\n  /*\n   * If the caller is not interested in the number of bytes written,\n   * we use another buffer to avoid \"if\" statements in the code.\n   */\n  if (pcbWritten == 0)\n    pcbWritten = &bytesWritten;\n\n  if (cb == 0)\n    return S_OK;\n\n  newSize.u.HighPart = 0;\n  newSize.u.LowPart = ulOffset.u.LowPart + cb;\n\n  /*\n   * Verify if we need to grow the stream\n   */\n  if (newSize.u.LowPart > This->byteArraySize.u.LowPart)\n  {\n    /* grow stream */\n    if (HGLOBALLockBytesImpl16_SetSize(iface, newSize) == STG_E_MEDIUMFULL)\n      return STG_E_MEDIUMFULL;\n  }\n\n  /*\n   * Lock the buffer in position and copy the data.\n   */\n  supportBuffer = GlobalLock16(This->supportHandle);\n\n  memcpy((char *) supportBuffer + ulOffset.u.LowPart, pv, cb);\n\n  /*\n   * Return the number of bytes written.\n   */\n  *pcbWritten = cb;\n\n  /*\n   * Cleanup\n   */\n  GlobalUnlock16(This->supportHandle);\n\n  return S_OK;\n}\n\n/******************************************************************************\n * This method is part of the ILockBytes interface.\n *\n * See the documentation of ILockBytes for more info.\n */\nHRESULT CDECL HGLOBALLockBytesImpl16_Flush(ILockBytes16* iface)\n{\n  TRACE(\"(%p)\\n\",iface);\n  return S_OK;\n}\n\n/******************************************************************************\n * This method is part of the ILockBytes interface.\n *\n * The global memory implementation of ILockBytes does not support locking.\n *\n * See the documentation of ILockBytes for more info.\n */\nHRESULT CDECL HGLOBALLockBytesImpl16_LockRegion(\n      ILockBytes16*  iface,\n      ULARGE_INTEGER libOffset,   /* [in] */\n      ULARGE_INTEGER cb,          /* [in] */\n      DWORD          dwLockType)  /* [in] */\n{\n  return STG_E_INVALIDFUNCTION;\n}\n\n/******************************************************************************\n * This method is part of the ILockBytes interface.\n *\n * The global memory implementation of ILockBytes does not support locking.\n *\n * See the documentation of ILockBytes for more info.\n */\nHRESULT CDECL HGLOBALLockBytesImpl16_UnlockRegion(\n      ILockBytes16*  iface,\n      ULARGE_INTEGER libOffset,   /* [in] */\n      ULARGE_INTEGER cb,          /* [in] */\n      DWORD          dwLockType)  /* [in] */\n{\n  return STG_E_INVALIDFUNCTION;\n}\n\n/******************************************************************************\n * This method is part of the ILockBytes interface.\n *\n * This method returns information about the current\n * byte array object.\n *\n * See the documentation of ILockBytes for more info.\n */\nHRESULT CDECL HGLOBALLockBytesImpl16_Stat(\n      ILockBytes16*iface,\n      STATSTG16*   pstatstg,     /* [out] */\n      DWORD        grfStatFlag)  /* [in] */\n{\n  HGLOBALLockBytesImpl16* const This = impl_from_ILockBytes16(iface);\n\n  memset(pstatstg, 0, sizeof(STATSTG16));\n\n  pstatstg->pwcsName = NULL;\n  pstatstg->type     = STGTY_LOCKBYTES;\n  pstatstg->cbSize   = This->byteArraySize;\n\n  return S_OK;\n}\n\n/******************************************************************************\n *           CreateILockBytesOnHGlobal     [OLE2.54]\n *\n * Creates an ILockBytes interface for a HGLOBAL handle.\n *\n * PARAMS\n * \thGlobal\t\t\tthe global handle (16bit)\n *\tfDeleteOnRelease\tdelete handle on release.\n *\tppLkbyt\t\t\tpointer to ILockBytes interface.\n *\n * RETURNS\n *\tStaddard OLE error return codes.\n *\n */\nHRESULT WINAPI CreateILockBytesOnHGlobal16(\n\tHGLOBAL16      hGlobal,          /* [in] */\n\tBOOL16         fDeleteOnRelease, /* [in] */\n\tLPLOCKBYTES16 *ppLkbyt)          /* [out] (ptr to SEGPTR!) */\n{\n  HGLOBALLockBytesImpl16* newLockBytes; /* SEGPTR */\n\n  newLockBytes = HGLOBALLockBytesImpl16_Construct(hGlobal, fDeleteOnRelease);\n\n  if (newLockBytes != NULL)\n    return HGLOBALLockBytesImpl16_QueryInterface(&newLockBytes->ILockBytes16_iface,\n            &IID_ILockBytes, (void**)ppLkbyt);\n  return E_OUTOFMEMORY16;\n}\n\nHRESULT WINAPI GetHGlobalFromILockBytes16(SEGPTR plkbyt, HGLOBAL16 *phglobal16)\n{\n    ILockBytes16 *lk32 = (ILockBytes16*)MapSL(plkbyt);\n    HGLOBALLockBytesImpl16 *This;\n    TRACE(\"(%08x,%p)\\n\", plkbyt, phglobal16);\n    if (!phglobal16)\n        return E_INVALIDARG16;\n    *phglobal16 = 0;\n    if (!plkbyt)\n        return E_INVALIDARG16;\n    if (lk32->lpVtbl != msegvt16)\n        return E_INVALIDARG16;\n    This = impl_from_ILockBytes16(lk32);\n    *phglobal16 = This->supportHandle;\n    return S_OK;\n}\n"
  },
  {
    "path": "ole2/ole2.c",
    "content": "\n/*\n *\tOLE2 library - 16 bit only interfaces\n *\n *\tCopyright 1995\tMartin von Loewis\n *      Copyright 1999  Francis Beaudet\n *      Copyright 1999  Noel Borthwick\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <assert.h>\n#include <stdlib.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <string.h>\n\n#define NONAMELESSUNION\n#undef DUMMYSTRUCTNAME\n#undef DUMMYUNIONNAME\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n#include \"wownt32.h\"\n#include \"ole2.h\"\n#include \"winerror.h\"\n\n#include \"wine/winbase16.h\"\n#include \"wine/wingdi16.h\"\n#include \"wine/winuser16.h\"\n#include \"ifs.h\"\n\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(ole);\n\nstatic SEGPTR taskmem_strdupWtoA(LPCWSTR str);\n\nstatic HICON convert_icon_to_32( HICON16 icon16 )\n{\n    CURSORICONINFO *info = GlobalLock16( icon16 );\n    void *and_bits = info + 1;\n    void *xor_bits;\n    HICON ret;\n    if (!info)\n        return NULL;\n    xor_bits = (BYTE *)and_bits + info->nHeight * 2 * ((info->nWidth + 15) / 16);\n    ret = CreateIcon(0, info->nWidth, info->nHeight, info->bPlanes, info->bBitsPerPixel,\n                            and_bits, xor_bits );\n    GlobalUnlock16( icon16 );\n    return ret;\n}\n\n/* OLE2DISP -> OLE2 -> STORAGE -> COMPOBJ */\n/* OLE2 depends on KERNEL GDI USER KEYBOARD SHELL COMPOBJ STORAGE */\n/* COMPOBJ depends on KERNEL USER KEYBOARD SHELL */\n/* STORAGE depends on KERNEL USER KEYBOARD COMPOBJ */\n/* OLE2DISP depends on KERNEL USER WIN87EM SHELL COMPOBJ OLE2 OLE2NLS */\n/* OLE2NLS denends on KERNEL USER */\n/* OLE2PROX depends on KERNEL COMPOBJ OLE2 */\n/* OLE2CONV depends on KERNEL GDI USER */\n\nBOOL WINAPI Ole2_LibMain(DWORD fdwReason, HINSTANCE hinstDLL, WORD ds,\n    WORD wHeapSize, DWORD dwReserved1, WORD wReserved2)\n{\n    LoadLibrary16(\"STORAGE.DLL\");\n    LoadLibrary16(\"COMPOBJ.DLL\");\n    return TRUE;\n}\nint WINAPI Ole2_WEP(HINSTANCE16 hInstance, WORD wDataSeg, WORD cbHeapSize, LPSTR lpCmdLine)\n{\n    FreeLibrary16(GetModuleHandle16(\"STORAGE\"));\n    FreeLibrary16(GetModuleHandle16(\"COMPOBJ\"));\n    return TRUE;\n}\n/******************************************************************************\n *\t\tOleBuildVersion\t(OLE2.1)\n */\nDWORD WINAPI OleBuildVersion16(void)\n{\n    return OleBuildVersion();\n}\n\n/***********************************************************************\n *           OleInitialize       (OLE2.2)\n */\nHRESULT WINAPI OleInitialize16(SEGPTR pMalloc)\n{\n    HMODULE comp = GetModuleHandleA(\"compobj.dll16\");\n    HRESULT ret;\n    if (!comp)\n    {\n        comp = LoadLibraryA(\"compobj.dll16\");\n    }\n    ret = ((HRESULT(WINAPI*)(SEGPTR))GetProcAddress(comp, \"CoInitialize16\"))(pMalloc);\n    if (ret != S_OK /* S_FALSE: already initialized */)\n        return ret;\n    return OleInitialize( NULL );\n}\n\n/******************************************************************************\n *\t\tOleUninitialize\t(OLE2.3)\n */\nHRESULT WINAPI OleUninitialize16(void)\n{\n    HMODULE comp = GetModuleHandleA(\"compobj.dll16\");\n    HRESULT ret;\n    if (!comp)\n    {\n        comp = LoadLibraryA(\"compobj.dll16\");\n    }\n    ((void(WINAPI*)())GetProcAddress(comp, \"CoUninitialize16\"))();\n    OleUninitialize();\n    return 0;\n}\n\n/***********************************************************************\n *           DllGetClassObject (OLE2.4)\n */\nHRESULT WINAPI DllGetClassObject16(REFCLSID rclsid, REFIID iid, LPVOID *ppv)\n{\n  FIXME(\"(%s, %s, %p): stub\\n\", debugstr_guid(rclsid), debugstr_guid(iid), ppv);\n  return E_NOTIMPL;\n}\n\n/***********************************************************************\n *           RegisterDragDrop (OLE2.35)\n */\nHRESULT WINAPI RegisterDragDrop16(\n\tHWND16 hwnd,\n\t/*LPDROPTARGET*/SEGPTR pDropTarget\n) {\n\tTRACE(\"(0x%04x,%p)\\n\",hwnd,pDropTarget);\n\treturn hresult32_16(RegisterDragDrop(HWND_32(hwnd), (IDropTarget*)iface16_32(&IID_IDropTarget, pDropTarget)));\n}\n\n/***********************************************************************\n *           RevokeDragDrop (OLE2.36)\n */\nHRESULT WINAPI RevokeDragDrop16(\n\tHWND16 hwnd\n) {\n\tTRACE(\"(0x%04x)\\n\",hwnd);\n\treturn hresult32_16(RevokeDragDrop(HWND_32(hwnd)));\n}\n\n/******************************************************************************\n * OleMetaFilePictFromIconAndLabel (OLE2.56)\n *\n * Returns a global memory handle to a metafile which contains the icon and\n * label given.\n * I guess the result of that should look somehow like desktop icons.\n * If no hIcon is given, we load the icon via lpszSourceFile and iIconIndex.\n * This code might be wrong at some places.\n */\nHGLOBAL16 WINAPI OleMetafilePictFromIconAndLabel16(\n\tHICON16 icon16,\n\tLPCOLESTR16 lpszLabel,\n\tLPCOLESTR16 lpszSourceFile,\n\tUINT16 iIconIndex\n) {\n    METAFILEPICT *pict;\n    HGLOBAL hmf;\n    HGLOBAL16 hmf16;\n    LPWSTR label = NULL, source = NULL;\n    DWORD len;\n    HICON icon = convert_icon_to_32( icon16 );\n\n    if (lpszLabel)\n    {\n        len = MultiByteToWideChar( CP_ACP, 0, lpszLabel, -1, NULL, 0 );\n        label = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) );\n        MultiByteToWideChar( CP_ACP, 0, lpszLabel, -1, label, len );\n    }\n    if (lpszSourceFile)\n    {\n        len = MultiByteToWideChar( CP_ACP, 0, lpszSourceFile, -1, NULL, 0 );\n        source = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) );\n        MultiByteToWideChar( CP_ACP, 0, lpszSourceFile, -1, source, len );\n    }\n    hmf = OleMetafilePictFromIconAndLabel( icon, label, source, iIconIndex );\n    HeapFree( GetProcessHeap(), 0, label );\n    HeapFree( GetProcessHeap(), 0, source );\n    DestroyIcon( icon );\n\n    if (!hmf) return 0;\n    pict = GlobalLock( hmf );\n\n    hmf16 = GlobalAlloc16(0, sizeof(METAFILEPICT16));\n    if (hmf16)\n    {\n        METAFILEPICT16 *pict16 = GlobalLock16( hmf16 );\n        pict16->mm   = pict->mm;\n        pict16->xExt = pict->xExt;\n        pict16->yExt = pict->yExt;\n        len = GetMetaFileBitsEx( pict->hMF, 0, 0 );\n        pict16->hMF = GlobalAlloc16( GMEM_MOVEABLE, len );\n        GetMetaFileBitsEx( pict->hMF, len, GlobalLock16( pict16->hMF) );\n        GlobalUnlock16( pict16->hMF );\n        GlobalUnlock16( hmf16 );\n    }\n    DeleteMetaFile( pict->hMF );\n    GlobalUnlock( hmf );\n    GlobalFree( hmf );\n    return hmf16;\n}\n\n\n/******************************************************************************\n *        CreateItemMoniker\t(OLE2.27)\n */\nHRESULT WINAPI CreateItemMoniker16(LPCOLESTR16 lpszDelim,LPCOLESTR16 lpszItem,SEGPTR* ppmk)\n{\n    LPMONIKER pmk;\n    HRESULT result;\n    LPOLESTR wdelim = strdupAtoW(lpszDelim);\n    LPOLESTR witem = strdupAtoW(lpszItem);\n    TRACE(\"(%s,%s,%p)\\n\",lpszDelim,lpszItem,ppmk);\n    result = hresult32_16(CreateItemMoniker(wdelim, witem, &pmk));\n    HeapFree(GetProcessHeap(), 0, wdelim);\n    HeapFree(GetProcessHeap(), 0, witem);\n    *ppmk = iface32_16(&IID_IMoniker, pmk);\n    return result;\n}\n\n\n/******************************************************************************\n *        OleSetMenuDescriptor (OLE2.41)\n *\n * PARAMS\n *  hOleMenu  FIXME: Should probably be an HOLEMENU16.\n */\nHRESULT WINAPI OleSetMenuDescriptor16(\n    HOLEMENU16             hOleMenu,\n    HWND16                 hwndFrame,\n    HWND16                 hwndActiveObject,\n /* LPOLEINPLACEFRAME */ SEGPTR lpFrame,\n /* LPOLEINPLACEACTIVEOBJECT */ SEGPTR lpActiveObject)\n{\n    HOLEMENU hOleMenu32;\n    TRACE(\"(%p, %x, %x, %p, %p)\\n\", hOleMenu, hwndFrame, hwndActiveObject, lpFrame, lpActiveObject);\n    hOleMenu32 = HWND_32(hOleMenu); /* FIXME */\n    return hresult32_16(OleSetMenuDescriptor(hOleMenu32, HWND_32(hwndFrame), HWND_32(hwndActiveObject),\n        (IOleInPlaceFrame*)iface16_32(&IID_IOleInPlaceFrame, lpFrame),\n        (IOleInPlaceActiveObject*)iface16_32(&IID_IOleInPlaceActiveObject, lpActiveObject)));\n}\n\n/******************************************************************************\n *              OleLoad        [OLE2.12]\n *\n * PARAMS\n *  pStg Segmented LPSTORAGE pointer.\n *  pClientSite Segmented LPOLECLIENTSITE pointer.\n */\nHRESULT WINAPI OleLoad16(\n    SEGPTR\t\tpStg,\n    REFIID            \triid,\n    SEGPTR\t\tpClientSite,\n    SEGPTR*\t\tppvObj)\n{\n    HRESULT result;\n    LPVOID pvObj = NULL;\n    TRACE(\"(%08x,%s,%08x,%p)\\n\", pStg, debugstr_guid(riid), pClientSite, ppvObj);\n    result = hresult32_16(OleLoad((IStorage*)iface16_32(&IID_IStorage, pStg), riid, (IOleClientSite*)iface16_32(&IID_IOleClientSite, pClientSite), &pvObj));\n    *ppvObj = iface32_16(riid, pvObj);\n    return result;\n}\n\n/******************************************************************************\n *              OleDoAutoConvert        [OLE2.79]\n */\nHRESULT WINAPI OleDoAutoConvert16(LPSTORAGE pStg, LPCLSID pClsidNew)\n{\n    FIXME(\"(%p,%p) : stub\\n\",pStg,pClsidNew);\n    return E_NOTIMPL;\n}\n\n/***********************************************************************\n *           OleSetClipboard                            [OLE2.49]\n */\nHRESULT WINAPI OleSetClipboard16(/* IDataObject* */SEGPTR pDataObj)\n{\n    TRACE(\"(%p)\\n\", pDataObj);\n    return hresult32_16(OleSetClipboard((IDataObject*)iface16_32(&IID_IDataObject, pDataObj)));\n}\n\n/***********************************************************************\n *           OleGetClipboard                            [OLE2.50]\n */\nHRESULT WINAPI OleGetClipboard16(/* IDataObject* */SEGPTR* ppDataObj)\n{\n    HRESULT result;\n    IDataObject *pDataObj = NULL;\n    TRACE(\"(%p)\\n\", ppDataObj);\n    result = hresult32_16(OleGetClipboard(&pDataObj));\n    *ppDataObj = iface32_16(&IID_IDataObject, pDataObj);\n    return result;\n}\n\n/***********************************************************************\n *           OleFlushClipboard   [OLE2.76]\n */\n\nHRESULT WINAPI OleFlushClipboard16(void)\n{\n  return hresult32_16(OleFlushClipboard());\n}\n\n#define GET_SEGPTR_METHOD_ADDR(ifacename,segptr,methodname) \\\n    ((SEGPTR)((const ifacename##Vtbl*)MapSL((SEGPTR)((ifacename*)MapSL(segptr))->lpVtbl))->methodname)\n\n/***********************************************************************\n *    ReadClassStg (OLE2.18)\n *\n * This method reads the CLSID previously written to a storage object with\n * the WriteClassStg.\n *\n * PARAMS\n *  pstg    [I] Segmented LPSTORAGE pointer.\n *  pclsid  [O] Pointer to where the CLSID is written\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: HRESULT code.\n */\nHRESULT WINAPI ReadClassStg16(SEGPTR pstg, CLSID *pclsid)\n{\n\tSTATSTG16 statstg;\n\tHANDLE16 hstatstg;\n\tHRESULT\thres;\n\tDWORD args[3];\n\n\tTRACE(\"(%x, %p)\\n\", pstg, pclsid);\n\n\tif (!pclsid)\n\t    return E_INVALIDARG16;\n\n\tmemset(pclsid, 0, sizeof(*pclsid));\n\n\tif (!pstg)\n\t    return E_INVALIDARG16;\n\n\t/*\n\t * read a STATSTG structure (contains the clsid) from the storage\n\t */\n\targs[0] = pstg; /* iface */\n\targs[1] = WOWGlobalAllocLock16( 0, sizeof(STATSTG16), &hstatstg );\n\targs[2] = STATFLAG_DEFAULT;\n\n\tif (!WOWCallback16Ex(\n\t    GET_SEGPTR_METHOD_ADDR(IStorage16, pstg, Stat),\n\t    WCB16_PASCAL,\n\t    3*sizeof(DWORD),\n\t    args,\n\t    (LPDWORD)&hres\n\t)) {\n\t    WOWGlobalUnlockFree16(args[1]);\n            ERR(\"CallTo16 IStorage16::Stat() failed, hres %x\\n\",hres);\n\t    return hres;\n\t}\n\tmemcpy(&statstg, MapSL(args[1]), sizeof(STATSTG16));\n\tWOWGlobalUnlockFree16(args[1]);\n\n\tif(SUCCEEDED(hres)) {\n\t\t*pclsid=statstg.clsid;\n\t\tTRACE(\"clsid is %s\\n\", debugstr_guid(&statstg.clsid));\n\t}\n\treturn hres;\n}\n\n/***********************************************************************\n *    ReadClassStm (OLE2.20)\n */\nHRESULT WINAPI ReadClassStm16(SEGPTR stream, CLSID *clsid)\n{\n    HANDLE16 hclsid, hread;\n    HRESULT hres;\n    DWORD args[4];\n\n    TRACE(\"(0x%x, %p)\\n\", stream, clsid);\n\n    if (!clsid)\n        return E_INVALIDARG16;\n\n    memset(clsid, 0, sizeof(*clsid));\n\n    if (!stream)\n        return E_INVALIDARG16;\n\n    args[0] = stream; /* iface */\n    args[1] = WOWGlobalAllocLock16( 0, sizeof(CLSID), &hclsid );\n    args[2] = sizeof(CLSID);\n    args[3] = WOWGlobalAllocLock16( 0, sizeof(ULONG), &hread );\n\n    if (WOWCallback16Ex(\n        GET_SEGPTR_METHOD_ADDR(IStream16, stream, Read),\n        WCB16_PASCAL,\n        4*sizeof(DWORD),\n        args,\n        (DWORD*)&hres))\n    {\n        ULONG readlen;\n\n        memcpy(&readlen, MapSL(args[3]), sizeof(readlen));\n        if (readlen == sizeof(CLSID))\n            memcpy(clsid, MapSL(args[1]), sizeof(CLSID));\n        else\n            hres = STG_E_READFAULT;\n\n        TRACE(\"clsid is %s\\n\", debugstr_guid(clsid));\n    }\n    else\n    {\n        ERR(\"CallTo16 IStream16::Read() failed, hres %x\\n\", hres);\n        hres = E_FAIL;\n    }\n    WOWGlobalUnlockFree16(args[1]);\n    WOWGlobalUnlockFree16(args[3]);\n\n    return hres;\n}\n\n/***********************************************************************\n *    WriteClassStm (OLE2.21)\n */\nHRESULT WINAPI WriteClassStm16(SEGPTR pStm, REFCLSID rclsid)\n{\n    TRACE(\"(%08x,%s)\\n\", pStm, debugstr_guid(rclsid));\n    return hresult32_16(WriteClassStm((IStream*)iface16_32(&IID_IStream, pStm), rclsid));\n}\n\n/***********************************************************************\n *              GetConvertStg (OLE2.82)\n */\nHRESULT WINAPI GetConvertStg16(SEGPTR stg)\n{\n    TRACE(\"(%08x)\\n\", stg);\n    return hresult32_16(GetConvertStg((IStorage*)iface16_32(&IID_IStorage, stg)));\n}\n\nHRESULT WINAPI SetConvertStg16(SEGPTR stg, BOOL f)\n{\n    TRACE(\"(%08x,%d)\\n\", stg, f);\n    return hresult32_16(SetConvertStg((IStorage*)iface16_32(&IID_IStorage, stg), f));\n}\n\n/***********************************************************************\n *              ReleaseStgMedium (OLE2.32)\n */\nVOID WINAPI ReleaseStgMedium16(STGMEDIUM16 *pmedium)\n{\n    switch (pmedium->tymed)\n    {\n    case TYMED_HGLOBAL:\n    {\n        if ((pmedium->pUnkForRelease == 0) &&\n            (pmedium->u.hGlobal != 0))\n            GlobalFree16(pmedium->u.hGlobal);\n        break;\n    }\n    case TYMED_FILE:\n    {\n        if (pmedium->u.lpszFileName != 0)\n        {\n            if (pmedium->pUnkForRelease == 0)\n            {\n                DeleteFileA(MapSL(pmedium->u.lpszFileName));\n            }\n            FIXME(\"\\n\");\n            /*CoTaskMemFree(pmedium->u.lpszFileName);*/\n        }\n        break;\n    }\n    case TYMED_ISTREAM:\n    {\n        if (pmedium->u.pstm != 0)\n        {\n            IStream16_Release(pmedium->u.pstm);\n        }\n        break;\n    }\n    case TYMED_ISTORAGE:\n    {\n        if (pmedium->u.pstg != 0)\n        {\n            IStorage16_Release(pmedium->u.pstg);\n        }\n        break;\n    }\n    case TYMED_GDI:\n    {\n        if ((pmedium->pUnkForRelease == 0) &&\n            (pmedium->u.hGlobal != 0))\n            DeleteObject(HBITMAP_32(pmedium->u.hGlobal));\n        break;\n    }\n    case TYMED_MFPICT:\n    {\n        if ((pmedium->pUnkForRelease == 0) &&\n            (pmedium->u.hGlobal != 0))\n        {\n            LPMETAFILEPICT16 pMP = GlobalLock16(pmedium->u.hGlobal);\n            GlobalFree16(pMP->hMF);\n            GlobalUnlock16(pmedium->u.hGlobal);\n            GlobalFree16(pmedium->u.hGlobal);\n        }\n        break;\n    }\n    case TYMED_ENHMF:\n    {\n        FIXME(\"\\n\");\n    }\n    case TYMED_NULL:\n    default:\n        break;\n    }\n    pmedium->tymed = TYMED_NULL;\n\n    /*\n     * After cleaning up, the unknown is released\n     */\n    if (pmedium->pUnkForRelease != 0)\n    {\n        IUnknown16_Release(pmedium->pUnkForRelease);\n        pmedium->pUnkForRelease = 0;\n    }\n}\n\n/***********************************************************************\n *              WriteClassStg16 (OLE2.19)\n */\nHRESULT WINAPI WriteClassStg16(/*IStorage **/SEGPTR stg, REFCLSID clsid)\n{\n    TRACE(\"(%p %s)\\n\", stg, debugstr_guid(clsid));\n    return hresult32_16(WriteClassStg((IStorage*)iface16_32(&IID_IStorage, stg), clsid));\n}\n\nHRESULT WINAPI DoDragDrop16(/* LPDATAOBJECT16 */SEGPTR pDataObj, /* LPDROPSOURCE16 */SEGPTR pDropSource, DWORD dwOKEffects, LPDWORD pdwEffect)\n{\n    HRESULT result;\n    DWORD count;\n    ReleaseThunkLock(&count);\n    TRACE(\"(%p,%p,%x,%p)\\n\", pDataObj, pDropSource, dwOKEffects, pdwEffect);\n    result = hresult32_16(DoDragDrop((IDataObject*)iface16_32(&IID_IDataObject, pDataObj), (IDropSource*)iface16_32(&IID_IDropSource, pDropSource), dwOKEffects, pdwEffect));\n    RestoreThunkLock(count);\n    return result;\n}\n\nHRESULT WINAPI OleIsCurrentClipboard16(/*LPDATAOBJECT*/SEGPTR pDataObj)\n{\n    TRACE(\"(%p)\\n\", pDataObj);\n    return hresult32_16(OleIsCurrentClipboard((IDataObject*)iface16_32(&IID_IDataObject, pDataObj)));\n}\n\nHRESULT WINAPI ReadFmtUserTypeStg16(/*LPSTORAGE16*/SEGPTR pstg, CLIPFORMAT *pcf, /*LPOLESTR16*/SEGPTR *lplpszUserType)\n{\n    LPOLESTR lpszUserType = NULL;\n    HRESULT result;\n    TRACE(\"(%p,%p,%p)\\n\", pstg, pcf, lplpszUserType);\n    result = hresult32_16(ReadFmtUserTypeStg((IStorage*)iface16_32(&IID_IStorage, pstg), pcf, lplpszUserType ? &lpszUserType : NULL));\n    if (lplpszUserType)\n    {\n        SEGPTR a = taskmem_strdupWtoA(lpszUserType);\n        TRACE(\"%s\\n\", MapSL(a));\n        *lplpszUserType = a;\n        CoTaskMemFree(lpszUserType);\n    }\n    if (!SUCCEEDED(result))\n    {\n        TRACE(\"failed: %08x\\n\", result);\n    }\n    return result;\n}\n\nHRESULT WINAPI WriteFmtUserTypeStg16(/*LPSTORAGE16*/SEGPTR pstg, CLIPFORMAT cf, LPOLESTR16 lpszUserType)\n{\n    HRESULT result;\n    LPOLESTR w = strdupAtoW(lpszUserType);\n    TRACE(\"(%p,%04x,%s)\\n\", pstg, cf, lpszUserType);\n    result = hresult32_16(WriteFmtUserTypeStg((IStorage*)iface16_32(&IID_IStorage, pstg), cf, w));\n    HeapFree(GetProcessHeap(), 0, w);\n    return result;\n}\n\nHRESULT WINAPI CreateDataAdviseHolder16(/*LPDATAADVISEHOLDER16*/SEGPTR *ppDAHolder)\n{\n    LPDATAADVISEHOLDER pDAHolder = NULL;\n    HRESULT result;\n    TRACE(\"(%p)\\n\", ppDAHolder);\n    result = hresult32_16(CreateDataAdviseHolder(&pDAHolder));\n    *ppDAHolder = iface32_16(&IID_IDataAdviseHolder, pDAHolder);\n    return result;\n}\nHRESULT WINAPI CreateOleAdviseHolder16(/*LPOLEADVISEHOLDER16*/SEGPTR *ppOAHolder)\n{\n    LPOLEADVISEHOLDER pOAHolder = NULL;\n    HRESULT result;\n    TRACE(\"(%p)\\n\", ppOAHolder);\n    result = hresult32_16(CreateOleAdviseHolder(&pOAHolder));\n    *ppOAHolder = iface32_16(&IID_IOleAdviseHolder, pOAHolder);\n    return result;\n}\n/******************************************************************************\n *        CreateFileMoniker (OLE2.28)\n */\nHRESULT WINAPI CreateFileMoniker16(LPCOLESTR16 lpszPathName, /*LPMONIKER16*/SEGPTR* ppmk)\n{\n    LPOLESTR w = strdupAtoW(lpszPathName);\n    LPMONIKER pmk = NULL;\n    HRESULT result;\n    TRACE(\"(%s,%p)\\n\", debugstr_a(lpszPathName), ppmk);\n    result = hresult32_16(CreateFileMoniker(w, &pmk));\n    *ppmk = iface32_16(&IID_IMoniker, pmk);\n    HeapFree(GetProcessHeap(), 0, w);\n    return result;\n}\n\n/******************************************************************************\n *\t\tGetRunningObjectTable (OLE2.30)\n */\nHRESULT WINAPI GetRunningObjectTable16(DWORD reserved, /*LPRUNNINGOBJECTTABLE16*/SEGPTR *pprot)\n{\n    LPRUNNINGOBJECTTABLE prot = NULL;\n    HRESULT result;\n    TRACE(\"(%d,%p)\\n\", reserved, pprot);\n    result = hresult32_16(GetRunningObjectTable(reserved, &prot));\n    *pprot = iface32_16(&IID_IRunningObjectTable, prot);\n    return result;\n}\n\nHRESULT WINAPI OleCreateEmbeddingHelper16(REFCLSID rclsid, SEGPTR pUnkOuter, DWORD flags, SEGPTR pCF, REFIID riid, SEGPTR *ppvObj)\n{\n    LPVOID pvObj = NULL;\n    HRESULT result;\n    TRACE(\"(%s,%08x,%08x,%08x,%s,%p)\\n\", debugstr_guid(rclsid), pUnkOuter, flags, pCF, debugstr_guid(riid), ppvObj);\n    result = hresult32_16(OleCreateEmbeddingHelper(rclsid, (IUnknown*)iface16_32(&IID_IUnknown, pUnkOuter), flags, (IClassFactory*)iface16_32(&IID_IClassFactory, pCF), riid, &pvObj));\n    *ppvObj = iface32_16(riid, pvObj);\n    return result;\n}\n\nHRESULT WINAPI OleCreateDefaultHandler16(REFCLSID clsid, SEGPTR pUnkOuter, REFIID riid, SEGPTR* ppvObj)\n{\n    LPVOID obj = NULL;\n    LPUNKNOWN a = (LPUNKNOWN)iface16_32(&IID_IUnknown, pUnkOuter);\n    TRACE(\"(%s,%08,%s,%p)\\n\", debugstr_guid(clsid), pUnkOuter, debugstr_guid(riid), ppvObj);\n    HRESULT hr = hresult32_16(OleCreateDefaultHandler(clsid, a, riid, &obj));\n    *ppvObj = iface32_16(riid, obj);\n    return hr;\n}\n\nHRESULT WINAPI OleSetContainedObject16(SEGPTR pUnk, BOOL fCon)\n{\n    TRACE(\"(%08x,%d)\\n\", pUnk, fCon);\n    return hresult32_16(OleSetContainedObject((IUnknown*)iface16_32(&IID_IUnknown, pUnk), fCon));\n}\n\nHRESULT WINAPI OleLockRunning16(SEGPTR pUnk, BOOL fLock, BOOL fLastUnlockCloses)\n{\n    TRACE(\"(%08x,%d,%d)\\n\", pUnk, fLock, fLastUnlockCloses);\n    return hresult32_16(OleLockRunning((IUnknown*)iface16_32(&IID_IUnknown, pUnk), fLock, fLastUnlockCloses));\n}\n\nBOOL WINAPI OleIsRunning16(SEGPTR pOleObject)\n{\n    TRACE(\"(%08x)\\n\", pOleObject);\n    return hresult32_16(OleIsRunning((IOleObject*)iface16_32(&IID_IOleObject, pOleObject)));\n}\n\nHOLEMENU16 WINAPI OleCreateMenuDescriptor16(HMENU16 hmenu, LPOLEMENUGROUPWIDTHS width)\n{\n    HOLEMENU om32 = OleCreateMenuDescriptor(HMENU_32(hmenu), width);\n    /* FIXME! */\n    return HWND_16(om32);\n}\n\nvoid WINAPI OleDestroyMenuDescriptor16(HOLEMENU16 olemenu)\n{\n    /* FIXME! */\n    OleDestroyMenuDescriptor(HWND_32(olemenu));\n}\n\nHRESULT WINAPI OleGetAutoConvert16(REFCLSID clsidOld, LPCLSID pclsidNew)\n{\n    HRESULT result = hresult32_16(OleGetAutoConvert(clsidOld, pclsidNew));\n    if (result == REGDB_E_KEYMISSING || result == REGDB_E_CLASSNOTREG)\n    {\n        FIXME(\"\\n\");\n        return result;\n    }\n    return result;\n}\n\nHRESULT WINAPI OleSetAutoConvert16(REFCLSID clsidOld, REFCLSID clsidNew)\n{\n    HRESULT result;\n    TRACE(\"(%s,%s)\\n\", debugstr_guid(clsidOld), debugstr_guid(clsidNew));\n    result = OleSetAutoConvert(clsidOld, clsidNew);\n    if (result == REGDB_E_WRITEREGDB)\n    {\n        ERR(\"REGDB_E_WRITEREGDB\\n\");\n    }\n    return hresult32_16(result);\n}\n\nHRESULT WINAPI OleRun16(SEGPTR pUnk)\n{\n    return hresult32_16(OleRun((IUnknown*)iface16_32(&IID_IUnknown, pUnk)));\n}\n\nHRESULT WINAPI OleSave16(SEGPTR pPS, SEGPTR pStg, BOOL fSameAsLoad)\n{\n    return hresult32_16(OleSave((IPersistStorage*)iface16_32(&IID_IPersistStorage, pPS), (IStorage*)iface16_32(&IID_IStorage, pStg), fSameAsLoad));\n}\n\n\nHRESULT WINAPI OleCreate16(REFCLSID rclsid, REFIID riid, DWORD renderopt, LPFORMATETC16 pFormatetc, SEGPTR pClientSite, SEGPTR lpStg, SEGPTR *ppvObj)\n{\n    HRESULT result;\n    FORMATETC formatetc32;\n    void *pvObj = NULL;\n    if (pFormatetc)\n        map_formatetc16_32(&formatetc32, pFormatetc);\n    TRACE(\"(%s,%s,%08x,%p,%08x,%08x,%p)\\n\", debugstr_guid(rclsid), debugstr_guid(riid), renderopt, pFormatetc, pClientSite, lpStg, ppvObj);\n    result = hresult32_16(OleCreate(rclsid, riid, renderopt, pFormatetc ? &formatetc32 : NULL, (IOleClientSite*)iface16_32(&IID_IOleClientSite, pClientSite), (IStorage*)iface16_32(&IID_IStorage, lpStg), &pvObj));\n    *ppvObj = iface32_16(riid, pvObj);\n    return result;\n}\n\nHANDLE16 WINAPI OleDuplicateData16(HANDLE16 hSrc, CLIPFORMAT cfFormat, UINT16 uiFlags)\n{\n    HGLOBAL16 hDst;\n    DWORD size;\n    TRACE(\"(%04x,%04x,%04x)\\n\", hSrc, cfFormat, uiFlags);\n    if (cfFormat == CF_BITMAP)\n    {\n        return HBITMAP_16(OleDuplicateData(HBITMAP_32(hSrc), cfFormat, uiFlags));\n    }\n    if (cfFormat == CF_PALETTE)\n    {\n        return HPALETTE_16(OleDuplicateData(HPALETTE_32(hSrc), cfFormat, uiFlags));\n    }\n    if (cfFormat == CF_METAFILEPICT)\n    {\n        METAFILEPICT16 *pictSrc;\n        METAFILEPICT16 *pictDst;\n        void *pmfSrc;\n        void *pmfDst;\n        pictSrc = (METAFILEPICT16*)GlobalLock16(hSrc);\n        hDst = GlobalAlloc16(uiFlags, sizeof(*pictSrc));\n        pictDst = (METAFILEPICT16*)GlobalLock16(hDst);\n        pictDst->mm = pictSrc->mm;\n        pictDst->xExt = pictSrc->xExt;\n        pictDst->yExt = pictSrc->yExt;\n        size = GlobalSize16(pictSrc->hMF);\n        pictDst->hMF = GlobalAlloc16(uiFlags /* ? */, size);\n        pmfSrc = GlobalLock16(pictSrc->hMF);\n        pmfDst = GlobalLock16(pictDst->hMF);\n        memcpy(pmfDst, pmfSrc, size);\n        GlobalUnlock16(pictSrc->hMF);\n        GlobalUnlock16(pictDst->hMF);\n        GlobalUnlock16(hSrc);\n        GlobalUnlock16(hDst);\n        return hDst;\n    }\n    if (uiFlags == 0)\n        uiFlags = GMEM_MOVEABLE;\n    size = GlobalSize16(hSrc);\n    if (!size)\n        return 0;\n    hDst = GlobalAlloc16(uiFlags, size);\n    memcpy(GlobalLock16(hDst), GlobalLock16(hSrc), size);\n    GlobalUnlock16(hDst);\n    GlobalUnlock16(hSrc);\n    return hDst;\n}\n\nHRESULT WINAPI CreateGenericComposite16(SEGPTR pmkFirst, SEGPTR pmkRest, SEGPTR *ppmkComposite)\n{\n    HRESULT result;\n    LPMONIKER pmkComposite = NULL;\n    TRACE(\"(%08x,%08x,%p)\\n\", pmkFirst, pmkRest, ppmkComposite);\n    result = hresult32_16(CreateGenericComposite((IMoniker*)iface16_32(&IID_IMoniker, pmkFirst), (IMoniker*)iface16_32(&IID_IMoniker, pmkRest), &pmkComposite));\n    *ppmkComposite = iface32_16(&IID_IMoniker, pmkComposite);\n    return result;\n}\n\nHRESULT WINAPI OleQueryCreateFromData16(SEGPTR pDataObject)\n{\n    TRACE(\"(%08x)\\n\", pDataObject);\n    return hresult32_16(OleQueryCreateFromData((IDataObject*)iface16_32(&IID_IDataObject, pDataObject)));\n}\n\nHRESULT WINAPI OleTranslateAccelerator16(SEGPTR lpFrame, LPOLEINPLACEFRAMEINFO16 lpFrameInfo, LPMSG16 lpmsg16)\n{\n    MSG msg32;\n    HRESULT result;\n    IOleInPlaceFrame *lpFrame32 = (IOleInPlaceFrame*)iface16_32(&IID_IOleInPlaceFrame, lpFrame);\n    OLEINPLACEFRAMEINFO frameInfo32;\n    void WINAPI window_message16_32(const MSG16 *msg16, MSG *msg32);\n    TRACE(\"(%08x,%p,%p)\\n\", lpFrame, lpFrameInfo, lpmsg16);\n    map_oleinplaceframeinfo16_32(&frameInfo32, lpFrameInfo);\n    window_message16_32(lpmsg16, &msg32);\n    result = OleTranslateAccelerator(lpFrame32, &frameInfo32, &msg32);\n    return hresult32_16(result);\n}\n\nHRESULT WINAPI OleQueryLinkFromData16(SEGPTR pDataObject)\n{\n    TRACE(\"(%08x)\\n\", pDataObject);\n    return hresult32_16(OleQueryLinkFromData((IDataObject*)iface16_32(&IID_IDataObject, pDataObject)));\n}\n\nHRESULT WINAPI OleRegGetMiscStatus16(REFCLSID clsid, DWORD dwAspect, DWORD *pdwStatus)\n{\n    TRACE(\"(%s,%d,%p)\\n\", debugstr_guid(clsid), dwAspect, pdwStatus);\n    return hresult32_16(OleRegGetMiscStatus(clsid, dwAspect, pdwStatus));\n}\n\nHRESULT WINAPI dynamic_get_task_imalloc16(SEGPTR *lpMalloc)\n{\n    static HRESULT(WINAPI*pget_task_imalloc16)(SEGPTR *lpMalloc);\n    if (!pget_task_imalloc16)\n    {\n        HMODULE compobj = GetModuleHandleW(L\"COMPOBJ.DLL16\");\n        if (!compobj)\n        {\n            compobj = LoadLibraryW(L\"COMPOBJ.DLL16\");\n        }\n        pget_task_imalloc16 = (HRESULT(WINAPI*)(SEGPTR *lpMalloc))GetProcAddress(compobj, \"get_task_imalloc16\");\n        if (!pget_task_imalloc16)\n        {\n            return E_FAIL;\n        }\n    }\n    return pget_task_imalloc16(lpMalloc);\n}\n\nSEGPTR CoTaskMemAlloc16(DWORD size)\n{\n    SEGPTR imalloc = 0;\n    if (FAILED(dynamic_get_task_imalloc16(&imalloc)))\n        return 0;\n    return IMalloc16_Alloc(imalloc, size);\n}\n\nvoid CoTaskMemFree16(SEGPTR ptr)\n{\n    SEGPTR imalloc = 0;\n    if (FAILED(dynamic_get_task_imalloc16(&imalloc)))\n        return;\n    IMalloc16_Free(imalloc, ptr);\n}\n\nstatic SEGPTR taskmem_strdupWtoA(LPCWSTR str)\n{\n    SEGPTR ret;\n    INT len;\n\n    if (!str) return NULL;\n    len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);\n    ret = CoTaskMemAlloc16(len * sizeof(CHAR));\n    if (ret) WideCharToMultiByte(CP_ACP, 0, str, -1, MapSL(ret), len, NULL, NULL);\n    return ret;\n}\n\nHRESULT WINAPI OleRegGetUserType16(REFCLSID clsid, DWORD dwFormOfType, SEGPTR *pszUserType)\n{\n    LPOLESTR szUserType;\n    HRESULT result;\n    TRACE(\"(%s,%d,%p)\\n\", debugstr_guid(clsid), dwFormOfType, pszUserType);\n    result = OleRegGetUserType(clsid, dwFormOfType, &szUserType);\n    *pszUserType = taskmem_strdupWtoA(szUserType);\n    CoTaskMemFree(szUserType);\n    return hresult32_16(result);\n}\n\nHRESULT WINAPI OleCreateFromData16(SEGPTR pDataObject, REFIID riid, DWORD renderopt, FORMATETC16 *pFormatetc, SEGPTR pClientSite, SEGPTR pStg, SEGPTR *ppvObj)\n{\n    HRESULT result;\n    IDataObject *pDataObject32 = (IDataObject*)iface16_32(&IID_IDataObject, pDataObject);\n    FORMATETC fmt32;\n    IOleClientSite *pClientSite32 = (IOleClientSite*)iface16_32(&IID_IOleClientSite, pClientSite);\n    IStorage *pStg32 = (IStorage*)iface16_32(&IID_IStorage, pStg);\n    LPVOID pvObj = NULL;\n    if (pFormatetc)\n        map_formatetc16_32(&fmt32, pFormatetc);\n    TRACE(\"(%08x,%p,%d,%p,%08x,%08x,%p)\\n\", pDataObject, debugstr_guid(riid), renderopt, pFormatetc, pClientSite, pStg, ppvObj);\n    result = OleCreateFromData(pDataObject32, riid, renderopt, pFormatetc ? &fmt32 : NULL, pClientSite32, pStg32, &pvObj);\n    *ppvObj = iface32_16(riid, pvObj);\n    return hresult32_16(result);\n}\n\nHRESULT WINAPI OleCreateLinkFromData16(SEGPTR pDataObject, REFIID riid, DWORD renderopt, FORMATETC16 *pFormatetc, SEGPTR pClientSite, SEGPTR pStg, SEGPTR *ppvObj)\n{\n    HRESULT result;\n    IDataObject *pDataObject32 = (IDataObject*)iface16_32(&IID_IDataObject, pDataObject);\n    FORMATETC fmt32;\n    IOleClientSite *pClientSite32 = (IOleClientSite*)iface16_32(&IID_IOleClientSite, pClientSite);\n    IStorage *pStg32 = (IStorage*)iface16_32(&IID_IStorage, pStg);\n    LPVOID pvObj = NULL;\n    if (pFormatetc)\n        map_formatetc16_32(&fmt32, pFormatetc);\n    TRACE(\"(%08x,%p,%d,%p,%08x,%08x,%p)\\n\", pDataObject, debugstr_guid(riid), renderopt, pFormatetc, pClientSite, pStg, ppvObj);\n    result = OleCreateLinkFromData(pDataObject32, riid, renderopt, pFormatetc ? &fmt32 : NULL, pClientSite32, pStg32, &pvObj);\n    *ppvObj = iface32_16(riid, pvObj);\n    return hresult32_16(result);\n}\n\n\nHRESULT WINAPI OleCreateStaticFromData16(SEGPTR pDataObject, REFIID riid, DWORD renderopt, FORMATETC16 *pFormatetc, SEGPTR pClientSite, SEGPTR pStg, SEGPTR *ppvObj)\n{\n    HRESULT result;\n    IDataObject *pDataObject32 = (IDataObject*)iface16_32(&IID_IDataObject, pDataObject);\n    FORMATETC fmt32;\n    IOleClientSite *pClientSite32 = (IOleClientSite*)iface16_32(&IID_IOleClientSite, pClientSite);\n    IStorage *pStg32 = (IStorage*)iface16_32(&IID_IStorage, pStg);\n    LPVOID pvObj = NULL;\n    if (pFormatetc)\n        map_formatetc16_32(&fmt32, pFormatetc);\n    TRACE(\"(%08x,%p,%d,%p,%08x,%08x,%p)\\n\", pDataObject, debugstr_guid(riid), renderopt, pFormatetc, pClientSite, pStg, ppvObj);\n    result = OleCreateStaticFromData(pDataObject32, riid, renderopt, pFormatetc ? &fmt32 : NULL, pClientSite32, pStg32, &pvObj);\n    *ppvObj = iface32_16(riid, pvObj);\n    return hresult32_16(result);\n}\n\nHRESULT WINAPI CreateBindCtx16(DWORD dwReserved, SEGPTR *ppbc)\n{\n    IBindCtx *pbc = NULL;\n    HRESULT result;\n    if (dwReserved)\n    {\n        ERR(\"dwReserved must be zero.(%d)\\n\", dwReserved);\n    }\n    TRACE(\"(%d,%p)\\n\", dwReserved, ppbc);\n    result = CreateBindCtx(0, &pbc);\n    *ppbc = iface32_16(&IID_IBindCtx, pbc);\n    return hresult32_16(result);\n}\n\nHRESULT WINAPI OleNoteObjectVisible16(SEGPTR pUnk, BOOL fVisible)\n{\n    TRACE(\"(%08x,%d)\\n\", pUnk, fVisible);\n    return hresult32_16(OleNoteObjectVisible((IUnknown*)iface16_32(&IID_IUnknown, pUnk), fVisible));\n}\n\nHRESULT WINAPI OleRegEnumVerbs16(REFCLSID clsid, SEGPTR *ppenum)\n{\n    IEnumOLEVERB *penum = NULL;\n    HRESULT result;\n    TRACE(\"(%s,%p)\\n\", debugstr_guid(clsid), ppenum);\n    result = OleRegEnumVerbs(clsid, &penum);\n    *ppenum = iface32_16(&IID_IEnumOLEVERB, penum);\n    return hresult32_16(result);\n}\n\nHRESULT WINAPI OleRegEnumFormatEtc16(REFCLSID clsid, DWORD dwDirection, SEGPTR *ppenumFormatetc)\n{\n    IEnumFORMATETC *penum = NULL;\n    HRESULT result;\n    TRACE(\"(%s,%d,%p)\\n\", debugstr_guid(clsid), dwDirection, ppenumFormatetc);\n    if (!ppenumFormatetc)\n        return E_INVALIDARG16; /* Sometimes CO_E_NOTINITIALIZED */\n    result = OleRegEnumFormatEtc(clsid, dwDirection, &penum);\n    *ppenumFormatetc = iface32_16(&IID_IEnumFORMATETC, penum);\n    return hresult32_16(result);\n}\n\nHRESULT WINAPI OleDraw16(SEGPTR pUnk, DWORD dwAspect, HDC16 hdcDraw, const RECT16 * const lpcBounds)\n{\n    HRESULT result;\n    RECT rect32;\n    IUnknown *pUnk32;\n    if (lpcBounds)\n    {\n        TRACE(\"(%08x,%d,%04x,%p{%d,%d,%d,%d})\\n\", pUnk, dwAspect, hdcDraw, lpcBounds, lpcBounds->left, lpcBounds->top, lpcBounds->right, lpcBounds->bottom);\n    }\n    else\n    {\n        TRACE(\"(%08x,%d,%04x,%p)\\n\", pUnk, dwAspect, hdcDraw, lpcBounds);\n    }\n    pUnk32 = (IUnknown*)iface16_32(&IID_IUnknown, pUnk);\n    if (lpcBounds)\n    {\n        rect32.left = lpcBounds->left;\n        rect32.right = lpcBounds->right;\n        rect32.bottom = lpcBounds->bottom;\n        rect32.top = lpcBounds->top;\n    }\n    result = OleDraw(pUnk32, dwAspect, HDC_32(hdcDraw), lpcBounds ? &rect32 : NULL);\n    return hresult32_16(result);\n}\n\nHRESULT WINAPI OleSaveToStream16(SEGPTR pPStm, SEGPTR pStm)\n{\n    TRACE(\"(%08x,%08x)\\n\", pPStm, pStm);\n    return hresult32_16(OleSaveToStream((IPersistStream*)iface16_32(&IID_IPersistStream, pPStm), (IStream*)iface16_32(&IID_IStream, pStm)));\n}\n\nHRESULT WINAPI OleLoadFromStream16(SEGPTR pStm, SEGPTR sriid, SEGPTR sppvObj)\n{\n    HRESULT result;\n    REFIID riid = MapSL(sriid);\n    CLSID clsid;\n    SEGPTR xstm, pxstm, pclsid, ifpstm;\n    SEGPTR *ppvObj = MapSL(sppvObj);\n\n    TRACE(\"(%08x,%s,%p)\\n\", pStm, debugstr_guid(riid), ppvObj);\n\n    static HRESULT (WINAPI *CoCreateInstance16)(SEGPTR, SEGPTR, DWORD, SEGPTR, SEGPTR) = NULL;\n    if (!CoCreateInstance16)\n    {\n        HMODULE compobj = GetModuleHandleA(\"compobj.dll16\");\n        CoCreateInstance16 = (HRESULT (WINAPI *)(SEGPTR, SEGPTR, DWORD, SEGPTR, SEGPTR))GetProcAddress(compobj, \"CoCreateInstance16\");\n    }\n\n    result = ReadClassStm16(pStm, &clsid);\n    if (FAILED(result))\n        return result;\n    pclsid = MapLS(&clsid);\n    result = CoCreateInstance16(pclsid, NULL, CLSCTX_INPROC_SERVER, sriid, sppvObj);\n    UnMapLS(pclsid);\n    if (FAILED(result))\n        return result;\n    pxstm = MapLS(&xstm);\n    ifpstm = MapLS(&IID_IPersistStream);\n    result = IUnknown16_QueryInterface(*ppvObj, ifpstm, pxstm);\n    UnMapLS(pxstm);\n    UnMapLS(ifpstm);\n    if (FAILED(result))\n    {\n        IUnknown16_Release(*ppvObj);\n        return result;\n    }\n    result = IPersistStream16_Load(xstm, pStm);\n    IPersistStream16_Release(xstm);\n    return result;\n}\n\nHRESULT WINAPI MkParseDisplayName16(SEGPTR pbc, LPSTR szUserName, ULONG *pchEaten, SEGPTR *ppmk)\n{\n    HRESULT result;\n    IBindCtx *pbc32;\n    LPOLESTR szUserName32;\n    IMoniker *pmk = NULL;\n    TRACE(\"(%08x,%s,%p,%p)\\n\", pbc, debugstr_a(szUserName), pchEaten, ppmk);\n    szUserName32 = strdupAtoW(szUserName);\n    pbc32 = (IBindCtx*)iface16_32(&IID_IBindCtx, pbc);\n    result = MkParseDisplayName(pbc32, szUserName32, pchEaten, &pmk);\n    HeapFree(GetProcessHeap(), 0, szUserName32);\n    *ppmk = iface32_16(&IID_IMoniker, pmk);\n    return hresult32_16(result);\n}\n\nHRESULT WINAPI BindMoniker16(SEGPTR pmk, DWORD grfOpt, REFIID riid, SEGPTR *ppvObj)\n{\n    HRESULT result;\n    IMoniker *pmk32;\n    LPVOID pvObj = NULL;\n    TRACE(\"(%08x,%d,%s,%p)\\n\", pmk, grfOpt, debugstr_guid(riid), ppvObj);\n    pmk32 = (IMoniker*)iface16_32(&IID_IMoniker, pmk);\n    result = BindMoniker(pmk32, grfOpt, riid, &pvObj);\n    *ppvObj = iface32_16(riid, pvObj);\n    return hresult32_16(result);\n}\n\nstatic HGLOBAL16 create_metafilepict16(HGLOBAL hMetaPict)\n{\n    METAFILEPICT *pict;\n    HGLOBAL16 hmf16;\n    DWORD len;\n    pict = GlobalLock(hMetaPict);\n    if (!pict)\n        return 0;\n    hmf16 = GlobalAlloc16(0, sizeof(METAFILEPICT16));\n    if (hmf16)\n    {\n        METAFILEPICT16 *pict16 = GlobalLock16(hmf16);\n        pict16->mm = pict->mm;\n        pict16->xExt = pict->xExt;\n        pict16->yExt = pict->yExt;\n        len = GetMetaFileBitsEx(pict->hMF, 0, 0);\n        pict16->hMF = GlobalAlloc16(GMEM_MOVEABLE, len);\n        GetMetaFileBitsEx(pict->hMF, len, GlobalLock16(pict16->hMF));\n        GlobalUnlock16(pict16->hMF);\n        GlobalUnlock16(hmf16);\n    }\n    DeleteMetaFile(pict->hMF);\n    GlobalUnlock(hMetaPict);\n    GlobalFree(hMetaPict);\n    return hmf16;\n}\nHGLOBAL16 WINAPI OleGetIconOfFile16(LPSTR lpszPath, BOOL fUseTypeAsLabel)\n{\n    LPOLESTR lpwszPath;\n    HGLOBAL hMetaPict;\n    TRACE(\"(%s,%s,%d)\\n\", debugstr_a(lpszPath), fUseTypeAsLabel);\n    lpwszPath = strdupAtoW(lpszPath);\n    hMetaPict = OleGetIconOfFile(lpwszPath, fUseTypeAsLabel);\n    HeapFree(GetProcessHeap(), 0, lpwszPath);\n    return create_metafilepict16(hMetaPict);\n}\n\nHGLOBAL16 WINAPI OleGetIconOfClass16(REFCLSID rclsid, LPSTR lpszLabel, BOOL fUseTypeAsLabel)\n{\n    LPOLESTR lpwszLabel;\n    HGLOBAL hMetaPict;\n    TRACE(\"(%s,%s,%d)\\n\", debugstr_guid(rclsid), debugstr_a(lpszLabel), fUseTypeAsLabel);\n    lpwszLabel = strdupAtoW(lpszLabel);\n    hMetaPict = OleGetIconOfClass(rclsid, lpwszLabel, fUseTypeAsLabel);\n    HeapFree(GetProcessHeap(), 0, lpwszLabel);\n    return create_metafilepict16(hMetaPict);\n}\n\n/* {0975C22A-6BA7-420E-9CD3-4763999EFB68} (dummy) */\nstatic const IID IID_OLESTREAM32 = { 0x975c22a, 0x6ba7, 0x420e, { 0x9c, 0xd3, 0x47, 0x63, 0x99, 0x9e, 0xfb, 0x68 } };\n\nHRESULT WINAPI OleConvertIStorageToOLESTREAMEx16(SEGPTR pStg, CLIPFORMAT cfFormat, LONG lWidth, LONG lHeight, DWORD dwSize, STGMEDIUM16 *pmedium, SEGPTR pOleStm)\n{\n    HRESULT result;\n    IStorage *pStg32;\n    STGMEDIUM med32 = { 0 };\n    LPOLESTREAM stm32 = NULL;\n    TRACE(\"(%08x,%04x,%d,%d,%08x,%p,%08x)\\n\", pStg, cfFormat, lWidth, lHeight, dwSize, pmedium, pOleStm);\n    pStg32 = (IStorage*)iface16_32(&IID_IStorage, pStg);\n    if (pmedium)\n        map_stgmedium16_32(&med32, pmedium);\n\n    stm32 = (LPOLESTREAM)iface16_32(&IID_OLESTREAM32, pOleStm);\n    result = OleConvertIStorageToOLESTREAMEx(pStg32, cfFormat, lWidth, lHeight, dwSize, pmedium ? &med32 : NULL, stm32);\n    if (pmedium)\n    {\n        if (med32.tymed == TYMED_HGLOBAL)\n        {\n            GlobalFree(med32.u.hGlobal);\n        }\n    }\n    free_iface32(stm32);\n    return hresult32_16(result);\n}\n\nHRESULT WINAPI OleConvertIStorageToOLESTREAM16(SEGPTR pStg, SEGPTR pOleStm)\n{\n    HRESULT result;\n    LPOLESTREAM pOleStm32;\n    IStorage *pStg32;\n    TRACE(\"(%08x,%08x)\\n\", pOleStm, pStg);\n    pOleStm32 = (LPOLESTREAM)iface16_32(&IID_OLESTREAM32, pOleStm);\n    pStg32 = (IStorage*)iface16_32(&IID_IStorage, pStg);\n    result = OleConvertIStorageToOLESTREAM(pStg32, pOleStm32);\n    free_iface32(pOleStm32);\n    return hresult32_16(result);\n}\n\nHRESULT WINAPI OleConvertOLESTREAMToIStorageEx16(SEGPTR pOleStm, SEGPTR pStg, CLIPFORMAT *pcfFormat, LONG *plWidth, LONG *plHeight, DWORD *pdwSize, STGMEDIUM16 *pmedium)\n{\n    HRESULT result;\n    LPOLESTREAM pOleStm32;\n    IStorage *pStg32;\n    STGMEDIUM med32 = { 0 };\n    TRACE(\"(%08x,%08x,%p,%p,%p,%p,%p)\\n\", pOleStm, pStg, pcfFormat, plWidth, plHeight, pdwSize, pmedium);\n    pOleStm32 = (LPOLESTREAM)iface16_32(&IID_OLESTREAM32, pOleStm);\n    pStg32 = (IStorage*)iface16_32(&IID_IStorage, pStg);\n    result = OleConvertOLESTREAMToIStorageEx(pOleStm32, pStg32, pcfFormat, plWidth, plHeight, pdwSize, pmedium ? &med32 : NULL);\n    if (pmedium && SUCCEEDED(result))\n    {\n        map_stgmedium32_16(pmedium, &med32);\n        if (med32.tymed == TYMED_HGLOBAL)\n        {\n            GlobalFree(med32.u.hGlobal);\n        }\n    }\n    free_iface32(pOleStm32);\n    return hresult32_16(result);\n}\n\nHRESULT WINAPI OleConvertOLESTREAMToIStorage16(SEGPTR pOleStm, SEGPTR pStg, const DVTARGETDEVICE *ptd)\n{\n    HRESULT result;\n    LPOLESTREAM pOleStm32;\n    IStorage *pStg32;\n    TRACE(\"(%08x,%08x,%p)\\n\", pOleStm, pStg, ptd);\n    pOleStm32 = (LPOLESTREAM)iface16_32(&IID_OLESTREAM32, pOleStm);\n    pStg32 = (IStorage*)iface16_32(&IID_IStorage, pStg);\n    result = OleConvertOLESTREAMToIStorage(pOleStm32, pStg32, ptd);\n    free_iface32(pOleStm32);\n    return hresult32_16(result);\n}\n\nHRESULT WINAPI GetClassFile16(LPCSTR lpszFileName, LPCLSID pclsid)\n{\n    HRESULT result;\n    LPCOLESTR lpwszFileName;\n    TRACE(\"(%s,%p)\\n\", debugstr_a(lpszFileName), pclsid);\n    lpwszFileName = strdupAtoW(lpszFileName);\n    result = GetClassFile(lpwszFileName, pclsid);\n    HeapFree(GetProcessHeap(), 0, lpwszFileName);\n    return hresult32_16(result);\n}\n\nHRESULT WINAPI OleCreateLinkToFile16(LPCSTR lpszFileName, REFIID riid, DWORD renderopt, LPFORMATETC16 pFormatetc, SEGPTR pClientSite, SEGPTR pStg, SEGPTR *ppvObj)\n{\n    HRESULT result;\n    LPCOLESTR lpwszFileName;\n    FORMATETC formatetc32;\n    void *pvObj = NULL;\n    TRACE(\"(%s,%s,%d,%p,%08x,%08x,%p)\\n\", debugstr_a(lpszFileName), debugstr_guid(riid), renderopt, pFormatetc, pClientSite, pStg, ppvObj);\n    lpwszFileName = strdupAtoW(lpszFileName);\n    if (pFormatetc)\n        map_formatetc16_32(&formatetc32, pFormatetc);\n    result = OleCreateLinkToFile(lpwszFileName, riid, renderopt, pFormatetc ? &formatetc32 : NULL, iface16_32(&IID_IOleClientSite, pClientSite), iface16_32(&IID_IStorage, pStg), &pvObj);\n    HeapFree(GetProcessHeap(), 0, lpwszFileName);\n    *ppvObj = iface32_16(riid, pvObj);\n    return hresult32_16(result);\n}\n"
  },
  {
    "path": "ole2/ole2.def",
    "content": "; File generated automatically from ..\\ole2\\ole2.dll16.spec; do not edit!\n\nLIBRARY ole2.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n  iface32_16\n  iface16_32\n  hresult32_16\n  hresult16_32\n  copy_iface16_vtbl\n"
  },
  {
    "path": "ole2/ole2.dll16.spec",
    "content": "1 pascal OleBuildVersion() OleBuildVersion16\n2 pascal OleInitialize(segptr) OleInitialize16\n3 pascal OleUninitialize() OleUninitialize16\n4 pascal DllGetClassObject(ptr ptr ptr) DllGetClassObject16\n5 pascal WEP(word word word ptr) Ole2_WEP\n524 pascal  DllEntryPoint(long word word word long word) Ole2_LibMain\n6 pascal OleQueryLinkFromData(segptr) OleQueryLinkFromData16\n7 pascal OleQueryCreateFromData(segptr) OleQueryCreateFromData16\n8 pascal OleCreateFromData(segptr ptr long ptr segptr segptr ptr) OleCreateFromData16\n9 pascal OleCreateLinkFromData(segptr ptr long ptr segptr segptr ptr) OleCreateLinkFromData16\n10 pascal OleCreate(ptr ptr long ptr segptr segptr ptr) OleCreate16\n11 stub OLECREATELINK\n12 pascal OleLoad(segptr ptr segptr ptr) OleLoad16\n13 pascal OleSave(segptr segptr word) OleSave16\n14 pascal OleRun(segptr) OleRun16\n#15 ___EXPORTEDSTUB\n16 pascal -ret16 OleIsRunning(segptr) OleIsRunning16\n17 pascal OleLockRunning(segptr word word) OleLockRunning16\n18 pascal ReadClassStg(segptr ptr) ReadClassStg16\n19 pascal WriteClassStg(segptr ptr) WriteClassStg16\n20 pascal ReadClassStm(segptr ptr) ReadClassStm16\n21 pascal WriteClassStm(segptr ptr) WriteClassStm16\n22 pascal BindMoniker(segptr long ptr ptr) BindMoniker16\n23 pascal MkParseDisplayName(segptr str ptr ptr) MkParseDisplayName16\n24 pascal OleSaveToStream(segptr segptr) OleSaveToStream16\n25 pascal OleLoadFromStream(segptr segptr segptr) OleLoadFromStream16\n26 pascal CreateBindCtx(long ptr) CreateBindCtx16\n27 pascal CreateItemMoniker(str str ptr) CreateItemMoniker16\n28 pascal CreateFileMoniker(str ptr) CreateFileMoniker16\n29 pascal CreateGenericComposite(segptr segptr ptr) CreateGenericComposite16\n30 pascal GetRunningObjectTable(long ptr) GetRunningObjectTable16\n31 stub OLEGETMALLOC\n32 pascal ReleaseStgMedium(ptr) ReleaseStgMedium16\n33 stub READSTRINGSTREAM\n34 stub WRITESTRINGSTREAM\n35 pascal RegisterDragDrop(word segptr) RegisterDragDrop16\n36 pascal RevokeDragDrop(word) RevokeDragDrop16\n37 pascal DoDragDrop(segptr segptr long ptr) DoDragDrop16\n38 pascal CreateOleAdviseHolder(ptr) CreateOleAdviseHolder16\n39 pascal CreateDataAdviseHolder(ptr) CreateDataAdviseHolder16\n40 pascal -ret16 OleCreateMenuDescriptor(word ptr) OleCreateMenuDescriptor16\n41 pascal OleSetMenuDescriptor(word word word segptr segptr) OleSetMenuDescriptor16\n42 pascal -ret16 OleDestroyMenuDescriptor(word) OleDestroyMenuDescriptor16\n43 stub OPENORCREATESTREAM\n44 stub CREATEANTIMONIKER\n45 stub CREATEPOINTERMONIKER\n46 stub MONIKERRELATIVEPATHTO\n47 stub MONIKERCOMMONPREFIXWITH\n48 stub ISACCELERATOR\n49 pascal OleSetClipboard(segptr) OleSetClipboard16\n50 pascal OleGetClipboard(ptr) OleGetClipboard16\n51 pascal -ret16 OleDuplicateData(word word word) OleDuplicateData16\n52 pascal -ret16 OleGetIconOfFile(str word) OleGetIconOfFile16\n53 pascal -ret16 OleGetIconOfClass(ptr str word) OleGetIconOfClass16\n54 pascal CreateILockBytesOnHGlobal(word word ptr) CreateILockBytesOnHGlobal16\n55 pascal GetHGlobalFromILockBytes(segptr ptr) GetHGlobalFromILockBytes16\n56 pascal -ret16 OleMetafilePictFromIconAndLabel(word str str word) OleMetafilePictFromIconAndLabel16\n57 pascal GetClassFile(str ptr) GetClassFile16\n58 pascal OleDraw(segptr long word ptr) OleDraw16\n59 pascal OleCreateDefaultHandler(ptr segptr ptr ptr) OleCreateDefaultHandler16\n60 pascal OleCreateEmbeddingHelper(ptr segptr long segptr ptr ptr) OleCreateEmbeddingHelper16\n61 pascal OleConvertIStorageToOLESTREAMEx(segptr word long long long ptr segptr) OleConvertIStorageToOLESTREAMEx16\n62 pascal OleConvertOLESTREAMToIStorageEx(segptr segptr ptr ptr ptr ptr ptr) OleConvertOLESTREAMToIStorageEx16\n63 stub SETDOCUMENTBITSTG\n64 stub GETDOCUMENTBITSTG\n65 stub WRITEOLESTG\n66 stub READOLESTG\n67 stub OLECREATEFROMFILE\n68 pascal OleCreateLinkToFile(str ptr long ptr segptr segptr ptr) OleCreateLinkToFile16\n69 stub CREATEDATACACHE\n70 pascal OleConvertIStorageToOLESTREAM(segptr segptr) OleConvertIStorageToOLESTREAM16\n71 pascal OleConvertOLESTREAMToIStorage(segptr segptr ptr) OleConvertOLESTREAMToIStorage16\n74 pascal ReadFmtUserTypeStg(segptr ptr ptr) ReadFmtUserTypeStg16\n75 pascal WriteFmtUserTypeStg(segptr word str) WriteFmtUserTypeStg16\n76 pascal -ret16 OleFlushClipboard() OleFlushClipboard16\n77 pascal OleIsCurrentClipboard(segptr) OleIsCurrentClipboard16\n78 pascal OleTranslateAccelerator(segptr ptr ptr) OleTranslateAccelerator16\n79 pascal OleDoAutoConvert(ptr ptr) OleDoAutoConvert16\n80 pascal OleGetAutoConvert(ptr ptr) OleGetAutoConvert16\n81 pascal OleSetAutoConvert(ptr ptr) OleSetAutoConvert16\n82 pascal GetConvertStg(segptr) GetConvertStg16\n83 pascal SetConvertStg(segptr word) SetConvertStg16\n84 pascal CreateStreamOnHGlobal(word word ptr) CreateStreamOnHGlobal16\n85 pascal GetHGlobalFromStream(ptr ptr) GetHGlobalFromStream16\n86 pascal OleSetContainedObject(segptr word) OleSetContainedObject16\n87 pascal OleNoteObjectVisible(segptr word) OleNoteObjectVisible16\n88 pascal OleCreateStaticFromData(segptr ptr long ptr segptr segptr ptr) OleCreateStaticFromData16\n89 pascal OleRegGetUserType(ptr long ptr) OleRegGetUserType16\n90 pascal OleRegGetMiscStatus(ptr long ptr) OleRegGetMiscStatus16\n91 pascal OleRegEnumFormatEtc(ptr long ptr) OleRegEnumFormatEtc16\n92 pascal OleRegEnumVerbs(ptr ptr) OleRegEnumVerbs16\n93 stub OLEGETENUMFORMATETC\n100 stub MAKEDEBUGSTREAM\n104 stub DBGLOGOPEN\n105 stub DBGLOGCLOSE\n106 stub DBGLOGOUTPUTDEBUGSTRING\n107 stub DBGLOGWRITE\n108 stub DBGLOGTIMESTAMP\n109 stub DBGLOGWRITEBANNER\n110 stub DBGDUMPOBJECT\n111 stub DBGISOBJECTVALID\n112 stub DUMPALLOBJECTS\n113 stub VALIDATEALLOBJECTS\n114 stub DBGDUMPCLASSNAME\n115 stub DBGDUMPEXTERNALOBJECT\n120 variable _IID_IEnumUnknown(0x00000100 0x00000000 0x000000c0 0x46000000)\n121 variable _IID_IEnumString(0x00000101 0x00000000 0x000000c0 0x46000000)\n122 variable _IID_IEnumMoniker(0x00000102 0x00000000 0x000000c0 0x46000000)\n123 variable _IID_IEnumFORMATETC(0x00000103 0x00000000 0x000000c0 0x46000000)\n124 variable _IID_IEnumOLEVERB(0x00000104 0x00000000 0x000000c0 0x46000000)\n125 variable _IID_IEnumSTATDATA(0x00000105 0x00000000 0x000000c0 0x46000000)\n126 variable _IID_IEnumGeneric(0x00000106 0x00000000 0x000000c0 0x46000000)\n127 variable _IID_IEnumHolder(0x00000107 0x00000000 0x000000c0 0x46000000)\n128 variable _IID_IEnumCallback(0x00000108 0x00000000 0x000000c0 0x46000000)\n129 variable _IID_IPersistStream(0x00000109 0x00000000 0x000000c0 0x46000000)\n130 variable _IID_IPersistStorage(0x0000010a 0x00000000 0x000000c0 0x46000000)\n131 variable _IID_IPersistFile(0x0000010b 0x00000000 0x000000c0 0x46000000)\n132 variable _IID_IPersist(0x0000010c 0x00000000 0x000000c0 0x46000000)\n133 variable _IID_IViewObject(0x0000010d 0x00000000 0x000000c0 0x46000000)\n134 variable _IID_IDataObject(0x0000010e 0x00000000 0x000000c0 0x46000000)\n135 variable _IID_IAdviseSink(0x0000010f 0x00000000 0x000000c0 0x46000000)\n136 variable _IID_IDataAdviseHolder(0x00000110 0x00000000 0x000000c0 0x46000000)\n137 variable _IID_IOleAdviseHolder(0x00000111 0x00000000 0x000000c0 0x46000000)\n138 variable _IID_IOleObject(0x00000112 0x00000000 0x000000c0 0x46000000)\n139 variable _IID_IOleInPlaceObject(0x00000113 0x00000000 0x000000c0 0x46000000)\n140 variable _IID_IOleWindow(0x00000114 0x00000000 0x000000c0 0x46000000)\n141 variable _IID_IOleInPlaceUIWindow(0x00000115 0x00000000 0x000000c0 0x46000000)\n142 variable _IID_IOleInPlaceFrame(0x00000116 0x00000000 0x000000c0 0x46000000)\n143 variable _IID_IOleInPlaceActiveObject(0x00000117 0x00000000 0x000000c0 0x46000000)\n144 variable _IID_IOleClientSite(0x00000118 0x00000000 0x000000c0 0x46000000)\n145 variable _IID_IOleInPlaceSite(0x00000119 0x00000000 0x000000c0 0x46000000)\n146 variable _IID_IParseDisplayName(0x0000011a 0x00000000 0x000000c0 0x46000000)\n147 variable _IID_IOleContainer(0x0000011b 0x00000000 0x000000c0 0x46000000)\n148 variable _IID_IOleItemContainer(0x0000011c 0x00000000 0x000000c0 0x46000000)\n149 variable _IID_IOleLink(0x0000011d 0x00000000 0x000000c0 0x46000000)\n150 variable _IID_IOleCache(0x0000011e 0x00000000 0x000000c0 0x46000000)\n151 variable _IID_IOleManager(0x0000011f 0x00000000 0x000000c0 0x46000000)\n152 variable _IID_IOlePresObj(0x00000120 0x00000000 0x000000c0 0x46000000)\n153 variable _IID_IDropSource(0x00000121 0x00000000 0x000000c0 0x46000000)\n154 variable _IID_IDropTarget(0x00000122 0x00000000 0x000000c0 0x46000000)\n155 variable _IID_IDebug(0x00000123 0x00000000 0x000000c0 0x46000000)\n156 variable _IID_IDebugStream(0x00000124 0x00000000 0x000000c0 0x46000000)\n157 variable _IID_IAdviseSink2(0x00000125 0x00000000 0x000000c0 0x46000000)\n158 variable _IID_IViewObject2(0x00000127 0x00000000 0x000000c0 0x46000000)\n159 variable _IID_IOleCache2(0x00000128 0x00000000 0x000000c0 0x46000000)\n160 variable _IID_IOleCacheControl(0x00000129 0x00000000 0x000000c0 0x46000000)\n161 variable _IID_IRunnableObject(0x00000126 0x00000000 0x000000c0 0x46000000)\n\n# WINE MemLockBytes implementation.\n500 cdecl HGLOBALLockBytesImpl16_QueryInterface(segptr ptr ptr) HGLOBALLockBytesImpl16_QueryInterface\n501 cdecl HGLOBALLockBytesImpl16_AddRef(ptr) HGLOBALLockBytesImpl16_AddRef\n502 cdecl HGLOBALLockBytesImpl16_Release(ptr) HGLOBALLockBytesImpl16_Release\n503 cdecl HGLOBALLockBytesImpl16_ReadAt(ptr int64 ptr long ptr) HGLOBALLockBytesImpl16_ReadAt\n504 cdecl HGLOBALLockBytesImpl16_WriteAt(ptr int64 ptr long ptr) HGLOBALLockBytesImpl16_WriteAt\n505 cdecl HGLOBALLockBytesImpl16_Flush(ptr) HGLOBALLockBytesImpl16_Flush\n506 cdecl HGLOBALLockBytesImpl16_SetSize(ptr int64) HGLOBALLockBytesImpl16_SetSize\n507 cdecl HGLOBALLockBytesImpl16_LockRegion(ptr int64 int64 long) HGLOBALLockBytesImpl16_LockRegion\n508 cdecl HGLOBALLockBytesImpl16_UnlockRegion(ptr int64 int64 long) HGLOBALLockBytesImpl16_UnlockRegion\n509 cdecl HGLOBALLockBytesImpl16_Stat(ptr ptr long) HGLOBALLockBytesImpl16_Stat\n\n# WINE MemStream implementation.\n510 cdecl HGLOBALStreamImpl16_QueryInterface(segptr ptr ptr) HGLOBALStreamImpl16_QueryInterface\n511 cdecl HGLOBALStreamImpl16_AddRef(ptr) HGLOBALStreamImpl16_AddRef\n512 cdecl HGLOBALStreamImpl16_Release(ptr) HGLOBALStreamImpl16_Release\n513 cdecl HGLOBALStreamImpl16_Read(ptr ptr long ptr) HGLOBALStreamImpl16_Read\n514 cdecl HGLOBALStreamImpl16_Write(ptr ptr long ptr) HGLOBALStreamImpl16_Write\n515 cdecl HGLOBALStreamImpl16_Seek(ptr int64 long ptr) HGLOBALStreamImpl16_Seek\n516 cdecl HGLOBALStreamImpl16_SetSize(ptr int64) HGLOBALStreamImpl16_SetSize\n517 cdecl HGLOBALStreamImpl16_CopyTo(ptr segptr int64 ptr ptr) HGLOBALStreamImpl16_CopyTo\n518 cdecl HGLOBALStreamImpl16_Commit(ptr long) HGLOBALStreamImpl16_Commit\n519 cdecl HGLOBALStreamImpl16_Revert(ptr) HGLOBALStreamImpl16_Revert\n520 cdecl HGLOBALStreamImpl16_LockRegion(ptr int64 int64 long) HGLOBALStreamImpl16_LockRegion\n521 cdecl HGLOBALStreamImpl16_UnlockRegion(ptr int64 int64 long) HGLOBALStreamImpl16_UnlockRegion\n522 cdecl HGLOBALStreamImpl16_Stat(ptr ptr long) HGLOBALStreamImpl16_Stat\n523 cdecl HGLOBALStreamImpl16_Clone(ptr ptr) HGLOBALStreamImpl16_Clone\n\n@ cdecl -arch=win32 iface32_16(ptr ptr)\n@ cdecl -arch=win32 iface16_32(ptr long)\n@ cdecl -arch=win32 hresult32_16(long)\n@ cdecl -arch=win32 hresult16_32(long)\n@ cdecl -arch=win32 copy_iface16_vtbl(long)\n"
  },
  {
    "path": "ole2/ole2.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n    <RootNamespace>ole2</RootNamespace>\n    <ProjectGuid>{F9B66ABE-3489-434C-8340-65B3421DC30C}</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <Import Project=\"..\\PropertySheet.props\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)user.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nuuid.lib;ole32.lib;user32.lib;gdi32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\nole2.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\nole2.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)user.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nuuid.lib;ole32.lib;user32.lib;gdi32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"hglobalstream.c\" />\n    <ClCompile Include=\"ifs_16.c\" />\n    <ClCompile Include=\"memlockbytes.c\" />\n    <ClCompile Include=\"ole2.c\" />\n    <ClCompile Include=\"ifs_thunk.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"ole2.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"ole2.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Platform)'=='Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" OLE2 &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Platform)'=='Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"ole2.def\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"ifs_16.h\" />\n    <ClInclude Include=\"ifs_thunk.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"ifs.idl\">\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n      </ExcludedFromBuild>\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n      </ExcludedFromBuild>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)widl\" ifs.idl -o ifs_16.c &amp;&amp; \"$(OutDir)widl\" ifs.idl -o ifs_16.h</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">ifs_16.c;ifs_16.h</Outputs>\n      <OutputItemType Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">None</OutputItemType>\n      <TreatOutputAsContent Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</TreatOutputAsContent>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)widl\" ifs.idl -o ifs_16.c &amp;&amp; \"$(OutDir)widl\" ifs.idl -o ifs_16.h</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">ifs_16.c;ifs_16.h</Outputs>\n      <OutputItemType Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">None</OutputItemType>\n      <TreatOutputAsContent Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</TreatOutputAsContent>\n      <AdditionalInputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(SolutionDir)widl\\relay16.c;%(AdditionalInputs)</AdditionalInputs>\n      <AdditionalInputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(SolutionDir)widl\\relay16.c;%(AdditionalInputs)</AdditionalInputs>\n    </CustomBuild>\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "ole2conv/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(ole2conv SHARED ${SOURCE} ${CMAKE_SOURCE_DIR}/dummy.c ${CMAKE_CURRENT_BINARY_DIR}/ole2conv.def ole2conv.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(ole2conv.dll16 ole2conv)\ntarget_link_libraries(ole2conv libwine winecrt0 krnl386)\nset_target_properties(ole2conv PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "ole2conv/Makefile.in",
    "content": "MODULE    = ole2conv.dll16\nEXTRADLLFLAGS = -m16 -Wb,--main-module,ole32.dll\n"
  },
  {
    "path": "ole2conv/ole2conv.def",
    "content": "; File generated automatically from ole2conv\\ole2conv.dll16.spec; do not edit!\n\nLIBRARY ole2conv.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "ole2conv/ole2conv.dll16.spec",
    "content": "1 stub GETFILTERINFO\n2 stub IMPORTGR\n3 stub GETFILTERPREF\n4 stub IMPORTEMBEDDEDGR\n5 stub QD2GDI\n6 stub STATUSPROC\n7 stub ENUMFONTFUNC\n#8 WEP\n#9 ___EXPORTEDSTUB\n"
  },
  {
    "path": "ole2conv/ole2conv.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n    <RootNamespace>ole2conv</RootNamespace>\n    <ProjectGuid>{90843552-9BC9-4DF2-AFC5-F4ECEDDF7E58}</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <Import Project=\"..\\PropertySheet.props\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n%(AdditionalDependencies)</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\nole2conv.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\nole2conv.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"ole2conv.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"ole2conv.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Platform)'=='Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" OLE2CONV &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Platform)'=='Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"ole2conv.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "ole2disp/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c **/*.c *.cpp **/*.cpp *.rc **/*.rc)\nadd_library(ole2disp SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/ole2disp.def ole2disp.dll16.obj)\ninclude_directories(../wine ${CMAKE_BINARY_DIR})\nadd_definitions(-DARRAY_SIZE=ARRAYSIZE -D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(ole2disp.dll16 ole2disp)\ntarget_link_libraries(ole2disp libwine winecrt0 krnl386 ole2 compobj)\nset_target_properties(ole2disp PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "ole2disp/Makefile.in",
    "content": "MODULE    = ole2disp.dll16\nEXTRADLLFLAGS = -m16 -Wb,--main-module,oleaut32.dll\n\nC_SRCS = ole2disp.c\n"
  },
  {
    "path": "ole2disp/ole2disp.c",
    "content": "/*\n *\tOLE2DISP library\n *\n *\tCopyright 1995\tMartin von Loewis\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <stdarg.h>\n#include <string.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n#include \"ole2.h\"\n#include \"oleauto.h\"\n#include \"winerror.h\"\n\n#include \"ole2disp.h\"\n\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(ole);\n\n#define E_OUTOFMEMORY16 MAKE_SCODE(SEVERITY_ERROR, FACILITY_NULL, 2)\n#define E_INVALIDARG16  MAKE_SCODE(SEVERITY_ERROR, FACILITY_NULL, 3)\n\n#include <pshpack1.h>\n/* BSTR structure */\ntypedef struct\n{\n    ULONG clSize;\n    byte abData[1];\n} BYTE_BLOB16;\n#include <poppack.h>\nstatic SEGPTR safearray_alloc(ULONG size)\n{\n    HANDLE16 h;\n    return MAKESEGPTR(WOWGlobalAlloc16(GPTR, size), 0);\n}\n\nstatic void safearray_free(SEGPTR ptr)\n{\n    WOWGlobalUnlockFree16(ptr);\n}\n\nstatic SEGPTR safearray_realloc(SEGPTR ptr, ULONG size)\n{\n    return MAKESEGPTR(GlobalReAlloc16(HIWORD(ptr), size, GMEM_ZEROINIT), 0);\n}\n\nstatic ULONG safearray_getcellcount(const SAFEARRAY16 *sa)\n{\n    const SAFEARRAYBOUND16 *sab = sa->rgsabound;\n    USHORT count = sa->cDims;\n    ULONG cells = 1;\n\n    while (count--)\n    {\n        if (!sab->cElements)\n            return 0;\n        cells *= sab->cElements;\n        sab++;\n    }\n\n    return cells;\n}\n\nstatic HRESULT safearray_lock(SAFEARRAY16 *sa)\n{\n    if (sa->cLocks == 0xffff)\n        return E_UNEXPECTED;\n\n    sa->cLocks++;\n    return S_OK;\n}\n\n/* pad safearray so no element spans a 64K boundry */\nstatic ULONG safearray_size(ULONG cells, WORD cbcell)\n{\n    DWORD size = cells * cbcell;\n    int pad = 0x10000 % cbcell;\n    return (pad * (size / (0x10000 - pad))) + size;\n}\n\nstatic SEGPTR safearray_ptrofindex(SEGPTR array, ULONG index, WORD cbcell)\n\n{\n    ULONG pos = safearray_size(index, cbcell) + LOWORD(array);\n    return MAKELONG(pos & 0xffff, ((pos >> 16) << 3) + HIWORD(array));\n}\n\n/* Free data items in an array */\nstatic HRESULT SAFEARRAY_DestroyData(SAFEARRAY16 *psa, ULONG ulStartCell)\n{\n  if (psa->pvData)\n  {\n    ULONG ulCellCount = safearray_getcellcount(psa);\n\n    if (ulStartCell > ulCellCount) {\n      FIXME(\"unexpted ulcellcount %d, start %d\\n\",ulCellCount,ulStartCell);\n      return E_UNEXPECTED;\n    }\n\n    ulCellCount -= ulStartCell;\n\n    if (psa->fFeatures & (FADF_UNKNOWN|FADF_DISPATCH))\n    {\n      while(ulCellCount--)\n      {\n        SEGPTR *lpUnknown = (SEGPTR *)MapSL(safearray_ptrofindex(psa->pvData, ulStartCell, psa->cbElements));\n        if (*lpUnknown)\n          IUnknown16_Release(*lpUnknown);\n        ulStartCell++;\n      }\n    }\n    else if (psa->fFeatures & FADF_BSTR)\n    {\n      while(ulCellCount--)\n      {\n        SEGPTR lpBstr = safearray_ptrofindex(psa->pvData, ulStartCell, psa->cbElements);\n        SysFreeString16(*(SEGPTR *)MapSL(lpBstr));\n        ulStartCell++;\n      }\n    }\n    else if (psa->fFeatures & FADF_VARIANT)\n    {\n\n      while(ulCellCount--)\n      {\n        SEGPTR lpVariant = safearray_ptrofindex(psa->pvData, ulStartCell, psa->cbElements);\n        HRESULT hRet = VariantClear16((VARIANT16 *)MapSL(lpVariant));\n\n        if (FAILED(hRet)) FIXME(\"VariantClear of element failed!\\n\");\n        ulStartCell++;\n      }\n    }\n  }\n  return S_OK;\n}\n\n/******************************************************************************\n *    SafeArrayGetDim [OLE2DISP.17]\n */\nUSHORT WINAPI SafeArrayGetDim16(SAFEARRAY16 *sa)\n{\n    TRACE(\"(%p)\\n\", sa);\n    return sa->cDims;\n}\n\n/******************************************************************************\n *    SafeArrayGetElemsize [OLE2DISP.18]\n */\nUSHORT WINAPI SafeArrayGetElemsize16(SAFEARRAY16 *sa)\n{\n    TRACE(\"(%p)\\n\", sa);\n    return sa->cbElements;\n}\n\n/******************************************************************************\n *    SafeArrayGetUBound [OLE2DISP.19]\n */\nHRESULT WINAPI SafeArrayGetUBound16(SAFEARRAY16 *sa, UINT16 dim, LONG *ubound)\n{\n    TRACE(\"(%p, %u, %p)\\n\", sa, dim, ubound);\n\n    if (!sa)\n        return E_INVALIDARG16;\n\n    if (!dim || dim > sa->cDims)\n        return DISP_E_BADINDEX;\n\n    *ubound = sa->rgsabound[sa->cDims - dim].lLbound + sa->rgsabound[sa->cDims - dim].cElements - 1;\n\n    return S_OK;\n}\n\n/******************************************************************************\n *    SafeArrayGetLBound [OLE2DISP.20]\n */\nHRESULT WINAPI SafeArrayGetLBound16(SAFEARRAY16 *sa, UINT16 dim, LONG *lbound)\n{\n    TRACE(\"(%p, %u, %p)\\n\", sa, dim, lbound);\n\n    if (!sa)\n        return E_INVALIDARG16;\n\n    if (!dim || dim > sa->cDims)\n        return DISP_E_BADINDEX;\n\n    *lbound = sa->rgsabound[sa->cDims - dim].lLbound;\n\n    return S_OK;\n}\n\n/******************************************************************************\n *    SafeArrayLock [OLE2DISP.21]\n */\nHRESULT WINAPI SafeArrayLock16(SAFEARRAY16 *sa)\n{\n    TRACE(\"(%p)\\n\", sa);\n\n    if (!sa)\n        return E_INVALIDARG16;\n\n    return safearray_lock(sa);\n}\n\n/******************************************************************************\n *    SafeArrayUnlock [OLE2DISP.22]\n */\nHRESULT WINAPI SafeArrayUnlock16(SAFEARRAY16 *sa)\n{\n    TRACE(\"(%p)\\n\", sa);\n\n    if (!sa)\n        return E_INVALIDARG16;\n\n    if (sa->cLocks == 0)\n        return E_UNEXPECTED;\n\n    sa->cLocks--;\n    return S_OK;\n}\n\n/******************************************************************************\n *    SafeArrayAccessData [OLE2DISP.23]\n */\nHRESULT WINAPI SafeArrayAccessData16(SAFEARRAY16 *sa, SEGPTR *data)\n{\n    HRESULT hr;\n\n    TRACE(\"(%p, %p)\\n\", sa, data);\n\n    /* arguments are not tested, it crashes if any of them is NULL */\n\n    hr = safearray_lock(sa);\n    if (FAILED(hr))\n        return hr;\n\n    *data = sa->pvData;\n    return S_OK;\n}\n\n/******************************************************************************\n *    SafeArrayUnaccessData [OLE2DISP.24]\n */\nHRESULT WINAPI SafeArrayUnaccessData16(SAFEARRAY16 *sa)\n{\n    TRACE(\"(%p)\\n\", sa);\n    return SafeArrayUnlock16(sa);\n}\n\n/******************************************************************************\n *    SafeArrayAllocDescriptor [OLE2DISP.38]\n */\nHRESULT WINAPI SafeArrayAllocDescriptor16(UINT16 dims, SEGPTR *ret)\n{\n    SAFEARRAY16 *sa;\n    ULONG size;\n\n    TRACE(\"%u, %p\\n\", dims, ret);\n\n    if (!dims)\n        return E_INVALIDARG16;\n\n    size = sizeof(SAFEARRAY16) + sizeof(SAFEARRAYBOUND16) * (dims - 1);\n    *ret = safearray_alloc(size);\n    if (!*ret)\n        return E_OUTOFMEMORY16;\n\n    sa = MapSL(*ret);\n    sa->cDims = dims;\n    return S_OK;\n}\n\n/******************************************************************************\n *    SafeArrayAllocData [OLE2DISP.39]\n */\nHRESULT WINAPI SafeArrayAllocData16(SAFEARRAY16 *sa)\n{\n    ULONG size;\n\n    TRACE(\"%p\\n\", sa);\n\n    if (!sa)\n        return E_INVALIDARG16;\n\n    size = safearray_getcellcount(sa);\n    sa->pvData = safearray_alloc(safearray_size(size, sa->cbElements));\n    return sa->pvData ? S_OK : E_OUTOFMEMORY16;\n}\n\n/******************************************************************************\n *    SafeArrayDestroyDescriptor [OLE2DISP.40]\n */\nHRESULT WINAPI SafeArrayDestroyDescriptor16(SEGPTR s)\n{\n    TRACE(\"0x%08x\\n\", s);\n\n    if (s)\n    {\n        SAFEARRAY16 *sa = MapSL(s);\n\n        if (sa->cLocks)\n            return DISP_E_ARRAYISLOCKED;\n\n        safearray_free(s);\n    }\n\n    return S_OK;\n}\n\n/******************************************************************************\n *    SafeArrayDestroyData [OLE2DISP.41]\n */\nHRESULT WINAPI SafeArrayDestroyData16(SAFEARRAY16 *sa)\n{\n    TRACE(\"%p\\n\", sa);\n\n    if (!sa)\n        return S_OK;\n\n    if (sa->cLocks)\n        return DISP_E_ARRAYISLOCKED;\n\n    HRESULT hr = SAFEARRAY_DestroyData(sa, 0);\n    if (!hr)\n        return hr;\n\n    if (!(sa->fFeatures & FADF_STATIC))\n        safearray_free(sa->pvData);\n\n    return S_OK;\n}\n\nHRESULT WINAPI SafeArrayPtrOfIndex16(SEGPTR segsa, LONG *rgIndices, SEGPTR *ppvData)\n{\n  USHORT dim;\n  ULONG cell = 0, dimensionSize = 1;\n  SAFEARRAYBOUND16* psab;\n  LONG c1;\n  SAFEARRAY16 *psa = MapSL(segsa);\n\n  TRACE(\"(%p,%p,%p)\\n\", psa, rgIndices, ppvData);\n  \n  /* The general formula for locating the cell number of an entry in an n\n   * dimensional array (where cn = coordinate in dimension dn) is:\n   *\n   * c1 + c2 * sizeof(d1) + c3 * sizeof(d2) ... + cn * sizeof(c(n-1))\n   *\n   * We calculate the size of the last dimension at each step through the\n   * dimensions to avoid recursing to calculate the last dimensions size.\n   */\n  if (!psa || !rgIndices || !ppvData)\n    return E_INVALIDARG;\n\n  psab = psa->rgsabound + psa->cDims - 1;\n  c1 = *rgIndices++;\n\n  if (c1 < psab->lLbound || c1 >= psab->lLbound + (LONG)psab->cElements)\n    return DISP_E_BADINDEX; /* Initial index out of bounds */\n\n  for (dim = 1; dim < psa->cDims; dim++)\n  {\n    dimensionSize *= psab->cElements;\n\n    psab--;\n\n    if (!psab->cElements ||\n        *rgIndices < psab->lLbound ||\n        *rgIndices >= psab->lLbound + (LONG)psab->cElements)\n    return DISP_E_BADINDEX; /* Index out of bounds */\n\n    cell += (*rgIndices - psab->lLbound) * dimensionSize;\n    rgIndices++;\n  }\n\n  cell += (c1 - psa->rgsabound[psa->cDims - 1].lLbound);\n\n  *ppvData = safearray_ptrofindex(segsa, cell, psa->cbElements);\n  return S_OK;\n}\n\nHRESULT WINAPI SafeArrayGetElement16(SEGPTR segsa, LONG *rgIndices, void *pvData)\n{\n  HRESULT hRet;\n  SAFEARRAY16 *psa = MapSL(segsa);\n\n  TRACE(\"(%p,%p,%p)\\n\", psa, rgIndices, pvData);\n    \n  if (!psa || !rgIndices || !pvData)\n    return E_INVALIDARG;\n\n  hRet = safearray_lock(psa);\n\n  if (SUCCEEDED(hRet))\n  {\n    PVOID lpvSrc;\n    SEGPTR slpvSrc;\n\n    hRet = SafeArrayPtrOfIndex16(segsa, rgIndices, &slpvSrc);\n    lpvSrc = MapSL(slpvSrc);\n\n    if (SUCCEEDED(hRet))\n    {\n      if (psa->fFeatures & FADF_VARIANT)\n      {\n        VARIANT16 *lpVariant = lpvSrc;\n        VARIANT16 *lpDest = pvData;\n\n        /* The original content of pvData is ignored. */\n        V_VT(lpDest) = VT_EMPTY;\n        hRet = VariantCopy16(lpDest, lpVariant);\n        if (FAILED(hRet)) FIXME(\"VariantCopy failed with %#lx.\\n\", hRet);\n      }\n      else if (psa->fFeatures & FADF_BSTR)\n      {\n        SEGPTR *lpBstr = lpvSrc;\n        SEGPTR *lpDest = pvData;\n\n        if (*lpBstr)\n        {\n          *lpDest = SysAllocStringByteLen16(MapSL(*lpBstr), SysStringByteLen16(*lpDest));\n          if (!*lpDest)\n            hRet = E_OUTOFMEMORY;\n        }\n        else\n          *lpDest = NULL;\n      }\n      else if (psa->fFeatures & (FADF_UNKNOWN|FADF_DISPATCH))\n      {\n        SEGPTR *src_unk = lpvSrc;\n        SEGPTR *dest_unk = pvData;\n\n        if (*src_unk)\n          IUnknown16_AddRef(*src_unk);\n        *dest_unk = *src_unk;\n      }\n      else\n        /* Copy the data over */\n        memcpy(pvData, lpvSrc, psa->cbElements);\n    }\n    SafeArrayUnlock16(psa);\n  }\n  return hRet;\n}\n\nHRESULT WINAPI SafeArrayCopy16(SAFEARRAY16 *sa, SAFEARRAY16 **ppsaout)\n{\n    FIXME(\"(%p,%p) stub!\\n\", sa, ppsaout);\n    return E_INVALIDARG;\n}\n\nHRESULT WINAPI SafeArrayDestroy16(SEGPTR spsa)\n{\n  SAFEARRAY16 *psa = (SAFEARRAY16*)MapSL(spsa);\n  TRACE(\"(%08x)\\n\", spsa);\n\n  if(!psa)\n    return S_OK;\n\n  if(psa->cLocks > 0)\n    return DISP_E_ARRAYISLOCKED;\n\n  /* Native doesn't check to see if the free succeeds */\n  SafeArrayDestroyData16(psa);\n  SafeArrayDestroyDescriptor16(spsa);\n  return S_OK;\n}\n\n/* Get the size of a supported VT type (0 means unsupported) */\nstatic DWORD SAFEARRAY_GetVTSize(VARTYPE vt)\n{\n  switch (vt)\n  {\n    case VT_I1:\n    case VT_UI1:      return sizeof(BYTE);\n    case VT_BOOL:\n    case VT_I2:\n    case VT_UI2:      return sizeof(SHORT);\n    case VT_I4:\n    case VT_UI4:\n    case VT_R4:\n    case VT_ERROR:    return sizeof(LONG);\n    case VT_R8:\n    case VT_I8:\n    case VT_UI8:      return sizeof(LONG64);\n    case VT_INT:\n    case VT_UINT:     return sizeof(INT);\n    case VT_INT_PTR:\n    case VT_UINT_PTR: return sizeof(UINT_PTR);\n    case VT_CY:       return sizeof(CY);\n    case VT_DATE:     return sizeof(DATE);\n    case VT_BSTR:     return sizeof(BSTR);\n    case VT_DISPATCH: return sizeof(LPDISPATCH);\n    case VT_VARIANT:  return sizeof(VARIANT);\n    case VT_UNKNOWN:  return sizeof(LPUNKNOWN);\n    case VT_DECIMAL:  return sizeof(DECIMAL);\n    /* Note: Return a non-zero size to indicate vt is valid. The actual size\n     * of a UDT is taken from the result of IRecordInfo_GetSize().\n     */\n    case VT_RECORD:   return 32;\n  }\n  return 0;\n}\n/*************************************************************************\n *             SafeArrayAllocDescriptorEx (OLEAUT32.41)\n *\n * Allocate and initialise a descriptor for a SafeArray of a given type.\n *\n * PARAMS\n *  vt      [I] The type of items to store in the array\n *  cDims   [I] Number of dimensions of the array\n *  ppsaOut [O] Destination for new descriptor\n *\n * RETURNS\n *  Success: S_OK. ppsaOut is filled with a newly allocated descriptor.\n *  Failure: An HRESULT error code indicating the error.\n *\n * NOTES\n *  - This function does not check that vt is an allowed VARTYPE.\n *  - Unlike SafeArrayAllocDescriptor(), vt is associated with the array.\n *  See SafeArray.\n */\nHRESULT WINAPI SafeArrayAllocDescriptorEx16(VARTYPE vt, UINT cDims, SEGPTR *ppsaOut)\n{\n  ULONG cbElements;\n  HRESULT hRet;\n\n  TRACE(\"(%d->%s,%d,%p)\\n\", vt, debugstr_vt(vt), cDims, ppsaOut);\n\n  cbElements = SAFEARRAY_GetVTSize(vt);\n  if (!cbElements)\n    WARN(\"Creating a descriptor with an invalid VARTYPE!\\n\");\n\n  hRet = SafeArrayAllocDescriptor16(cDims, ppsaOut);\n\n  if (SUCCEEDED(hRet))\n  {\n    ((SAFEARRAY16*)MapSL(*ppsaOut))->cbElements = cbElements;\n  }\n  return hRet;\n}\n/* Create an array */\nstatic SEGPTR SAFEARRAY_Create(VARTYPE vt, UINT cDims, const SAFEARRAYBOUND16 *rgsabound, ULONG ulSize)\n{\n    SEGPTR psa = NULL;\n  unsigned int i;\n\n  if (!rgsabound)\n    return NULL;\n\n  if (SUCCEEDED(SafeArrayAllocDescriptorEx16(vt, cDims, &psa)))\n  {\n    switch (vt)\n    {\n      case VT_BSTR:     ((SAFEARRAY16*)MapSL(psa))->fFeatures |= FADF_BSTR; break;\n      case VT_UNKNOWN:  ((SAFEARRAY16*)MapSL(psa))->fFeatures |= FADF_UNKNOWN; break;\n      case VT_DISPATCH: ((SAFEARRAY16*)MapSL(psa))->fFeatures |= FADF_DISPATCH; break;\n      case VT_VARIANT:  ((SAFEARRAY16*)MapSL(psa))->fFeatures |= FADF_VARIANT; break;\n    }\n\n    for (i = 0; i < cDims; i++)\n      memcpy(((SAFEARRAY16*)MapSL(psa))->rgsabound + i, rgsabound + cDims - 1 - i, sizeof(SAFEARRAYBOUND16));\n\n    if (ulSize)\n        ((SAFEARRAY16*)MapSL(psa))->cbElements = ulSize;\n\n    if (!((SAFEARRAY16*)MapSL(psa))->cbElements || FAILED(SafeArrayAllocData16(((SAFEARRAY16*)MapSL(psa)))))\n    {\n      SafeArrayDestroyDescriptor16(psa);\n      psa = NULL;\n    }\n  }\n  return psa;\n}\n\nSEGPTR WINAPI SafeArrayCreate16(VARTYPE vt, UINT16 cDims, SAFEARRAYBOUND16 *rgsabound)\n{\n    TRACE(\"(%d->%s,%d,%p)\\n\", vt, debugstr_vt(vt), cDims, rgsabound);\n\n    if (vt == VT_RECORD)\n        return 0;\n\n    return SAFEARRAY_Create(vt, cDims, rgsabound, 0);\n}\n\n/************************************************************************\n *\t\tSafeArrayRedim (OLEAUT32.40)\n *\n * Changes the characteristics of the last dimension of a SafeArray\n *\n * PARAMS\n *  psa      [I] Array to change\n *  psabound [I] New bound details for the last dimension\n *\n * RETURNS\n *  Success: S_OK. psa is updated to reflect the new bounds.\n *  Failure: An HRESULT error code indicating the error.\n *\n * NOTES\n * See SafeArray.\n */\nHRESULT WINAPI SafeArrayRedim16(SAFEARRAY16 *psa, SAFEARRAYBOUND16 *psabound)\n{\n  SAFEARRAYBOUND16 *oldBounds;\n  HRESULT hr;\n\n  TRACE(\"(%p,%p)\\n\", psa, psabound);\n  \n  if (!psa || psa->fFeatures & FADF_FIXEDSIZE || !psabound)\n    return E_INVALIDARG;\n\n  if (psa->cLocks > 0)\n    return DISP_E_ARRAYISLOCKED;\n\n  hr = SafeArrayLock16(psa);\n  if (FAILED(hr))\n    return hr;\n\n  oldBounds = psa->rgsabound;\n  oldBounds->lLbound = psabound->lLbound;\n\n  if (psabound->cElements != oldBounds->cElements)\n  {\n    if (psabound->cElements < oldBounds->cElements)\n    {\n      /* Shorten the final dimension. */\n      ULONG ulStartCell = psabound->cElements *\n                          (safearray_getcellcount(psa) / oldBounds->cElements);\n      SAFEARRAY_DestroyData(psa, ulStartCell);\n    }\n    else\n    {\n      /* Lengthen the final dimension */\n      ULONG ulOldSize, ulNewSize;\n      PVOID pvNewData;\n\n      ulOldSize = safearray_getcellcount(psa);\n      if (ulOldSize)\n        ulNewSize = (ulOldSize / oldBounds->cElements) * psabound->cElements;\n      else {\n\tint oldelems = oldBounds->cElements;\n\toldBounds->cElements = psabound->cElements;\n        ulNewSize = safearray_getcellcount(psa);\n\toldBounds->cElements = oldelems;\n      }\n\n      if (!(pvNewData = safearray_realloc(psa->pvData, safearray_size(ulNewSize, psa->cbElements))))\n      {\n        SafeArrayUnlock16(psa);\n        return E_OUTOFMEMORY;\n      }\n      psa->pvData = pvNewData;\n    }\n    oldBounds->cElements = psabound->cElements;\n  }\n\n  SafeArrayUnlock16(psa);\n  return S_OK;\n}\n\n/************************************************************************\n *\t\tVectorFromBstr (OLEAUT32.@)\n *\n * Create a SafeArray Vector from the bytes of a BSTR.\n *\n * PARAMS\n *  bstr [I] String to get bytes from\n *  ppsa [O] Destination for the array\n *\n * RETURNS\n *  Success: S_OK. ppsa contains the strings bytes as a VT_UI1 array.\n *  Failure: An HRESULT error code indicating the error.\n *\n * NOTES\n * See SafeArray.\n */\nHRESULT WINAPI VectorFromBstr16(SEGBSTR16 bstr, /* SAFEARRAY16 * */SEGPTR *ppsa)\n{\n  SAFEARRAYBOUND16 sab;\n\n  TRACE(\"(%p,%p)\\n\", bstr, ppsa);\n  \n  if (!ppsa)\n    return E_INVALIDARG;\n\n  sab.lLbound = 0;\n  sab.cElements = SysStringByteLen16(bstr);\n\n  *ppsa = SAFEARRAY_Create(VT_UI1, 1, &sab, 0);\n\n  if (*ppsa)\n  {\n    memcpy(((SAFEARRAY16*)MapSL(*ppsa))->pvData, bstr, sab.cElements);\n    return S_OK;\n  }\n  return E_OUTOFMEMORY;\n}\n/* This implementation of the BSTR API is 16-bit only. It\n   represents BSTR as a 16:16 far pointer, and the strings\n   as ISO-8859 */\n\nSEGPTR get_blob16_from_bstr16(SEGPTR bstr)\n{\n    return bstr - sizeof(BYTE_BLOB16) + sizeof(OLECHAR16);\n}\nSEGPTR get_bstr16_from_blob16(SEGPTR blob)\n{\n    return blob + sizeof(BYTE_BLOB16) - sizeof(OLECHAR16);\n}\nHRESULT WINAPI get_task_imalloc16(SEGPTR *lpMalloc);\n/*\nNOTE: win16 caches BSTR.\ntypedef struct\n{\n    DWORD unk1;\n    DWORD imalloc; CoGetMalloc(MEMCTX_TASK)\n    DWORD unk2;\n    DWORD cache_len; default: 8?\n    DWORD cache; far pointer to BYTE_BLOB16\n    char unk3[10];\n} OLE2DISP_UNK_DATA;\n\nAll resources are released when COM is being uninitialized.\n(Is ETASK used?)\n */\n/******************************************************************************\n *\t\tBSTR_AllocBytes\t[Internal]\n */\nstatic SEGPTR BSTR_AllocBytes(int n)\n{\n    SEGPTR mal;\n    SEGPTR p;\n    BYTE_BLOB16 *ptr;\n    if (FAILED(get_task_imalloc16(&mal)))\n        return 0;\n    p = IMalloc16_Alloc(mal, n + sizeof(BYTE_BLOB16) - sizeof(OLECHAR16));\n    ptr = (BYTE_BLOB16*)MapSL(p);\n    ptr->clSize = n - 1;\n    return get_bstr16_from_blob16(p);\n}\n\n/******************************************************************************\n * BSTR_Free [INTERNAL]\n */\nstatic void BSTR_Free(SEGPTR in)\n{\n    SEGPTR mal;\n    void *ptr;\n    if (!in)\n        return;\n    if (FAILED(get_task_imalloc16(&mal)))\n        return;\n   ptr = MapSL( get_blob16_from_bstr16(in) );\n   UnMapLS( get_blob16_from_bstr16(in) );\n   IMalloc16_Free(mal, get_blob16_from_bstr16(in));\n}\n\n/******************************************************************************\n * BSTR_GetAddr [INTERNAL]\n */\nstatic void* BSTR_GetAddr(SEGPTR in)\n{\n    return in ? MapSL(in) : 0;\n}\n\nHRESULT WINAPI BstrFromVector16(SAFEARRAY16 *psa, /*BSTR*/SEGPTR *pbstr)\n{\n  TRACE(\"(%p,%p)\\n\", psa, pbstr);\n\n  if (!pbstr)\n    return E_INVALIDARG;\n\n  *pbstr = NULL;\n\n  if (!psa || psa->cbElements != 1 || psa->cDims != 1)\n    return E_INVALIDARG;\n\n  *pbstr = SysAllocStringByteLen16(psa->pvData, psa->rgsabound[0].cElements);\n  if (!*pbstr)\n    return E_OUTOFMEMORY;\n  return S_OK;\n}\n\n/******************************************************************************\n *\t\tSysAllocString\t[OLE2DISP.2]\n *\n * Create a BSTR16 from an OLESTR16 (16 Bit).\n *\n * PARAMS\n *  oleStr [I] Source to create BSTR16 from\n *\n * RETURNS\n *  Success: A BSTR16 allocated with SysAllocStringLen16().\n *  Failure: NULL, if oleStr is NULL.\n */\nSEGPTR WINAPI SysAllocString16(LPCOLESTR16 oleStr)\n{\n\tSEGPTR out;\n\n\tif (!oleStr) return 0;\n\n\tout = BSTR_AllocBytes(strlen(oleStr)+1);\n\tif (!out) return 0;\n\tstrcpy((char*)BSTR_GetAddr(out),oleStr);\n\treturn out;\n}\n\n/******************************************************************************\n *\t\tSysReallocString\t[OLE2DISP.3]\n *\n * Change the length of a previously created BSTR16 (16 Bit).\n *\n * PARAMS\n *  pbstr  [I] BSTR16 to change the length of\n *  oleStr [I] New source for pbstr\n *\n * RETURNS\n *  Success: 1\n *  Failure: 0.\n *\n * NOTES\n *  SysAllocStringStringLen16().\n */\nINT16 WINAPI SysReAllocString16(SEGPTR *pbstr,LPCOLESTR16 oleStr)\n{\n\tSEGPTR new=SysAllocString16(oleStr);\n\tBSTR_Free(*pbstr);\n\t*pbstr=new;\n\treturn 1;\n}\n\n/******************************************************************************\n *\t\tSysAllocStringLen\t[OLE2DISP.4]\n *\n * Create a BSTR16 from an OLESTR16 of a given character length (16 Bit).\n *\n * PARAMS\n *  oleStr [I] Source to create BSTR16 from\n *  len    [I] Length of oleStr in wide characters\n *\n * RETURNS\n *  Success: A newly allocated BSTR16 from SysAllocStringByteLen16()\n *  Failure: NULL, if len is >= 0x80000000, or memory allocation fails.\n *\n * NOTES\n *  See SysAllocStringByteLen16().\n */\nSEGPTR WINAPI SysAllocStringByteLen16(const char *oleStr, int len)\n{\n    SEGPTR out=BSTR_AllocBytes(len+1);\n\n    if (!out)\n        return 0;\n\n    /*\n    * Copy the information in the buffer.\n    * Since it is valid to pass a NULL pointer here, we'll initialize the\n    * buffer to nul if it is the case.\n    */\n    if (oleStr != 0)\n    {\n        memcpy(BSTR_GetAddr(out), oleStr, len);\n        ((char*)BSTR_GetAddr(out))[len] = '\\0';\n    }\n    else\n    {\n        memset(BSTR_GetAddr(out), 0, len+1);\n    }\n\n    return out;\n}\nSEGPTR WINAPI SysAllocStringLen16(SEGPTR bstr, int len)\n{\n    SEGPTR out=BSTR_AllocBytes(len+1);\n    char *oleStr=MapSL(bstr); // BSTR_AllocBytes might cause the segment bstr is in to move\n\n    if (!out)\n        return 0;\n\n    /*\n    * Copy the information in the buffer.\n    * Since it is valid to pass a NULL pointer here, we'll initialize the\n    * buffer to nul if it is the case.\n    */\n    if (oleStr != 0)\n    {\n        memcpy(BSTR_GetAddr(out), oleStr, len);\n        ((char*)BSTR_GetAddr(out))[len] = '\\0';\n    }\n    else\n    {\n        memset(BSTR_GetAddr(out), 0, len+1);\n    }\n\n    return out;\n}\n\n/******************************************************************************\n *\t\tSysReAllocStringLen\t[OLE2DISP.5]\n *\n * Change the length of a previously created BSTR16 (16 Bit).\n *\n * PARAMS\n *  pbstr  [I] BSTR16 to change the length of\n *  oleStr [I] New source for pbstr\n *  len    [I] Length of oleStr in characters\n *\n * RETURNS\n *  Success: 1. The size of pbstr is updated.\n *  Failure: 0, if len >= 0x8000 or memory allocation fails.\n *\n * NOTES\n *  See SysAllocStringByteLen16().\n *  *pbstr may be changed by this function.\n */\nint WINAPI SysReAllocStringLen16(SEGPTR *old,SEGPTR in,int len)\n{\n\t/* FIXME: Check input length */\n\tSEGPTR new=SysAllocStringLen16(in,len);\n\tTRACE(\"free %08x alloc %08x\\n\", *old, new);\n\tif (!in)\n\t{\n\t\tmemcpy(BSTR_GetAddr(new), BSTR_GetAddr(*old), min(len, SysStringLen16(*old)));\n\t}\n\tBSTR_Free(*old);\n\t*old=new;\n\treturn 1;\n}\n\n/******************************************************************************\n *\t\tSysFreeString\t[OLE2DISP.6]\n *\n * Free a BSTR16 (16 Bit).\n *\n * PARAMS\n *  str [I] String to free.\n *\n * RETURNS\n *  Nothing.\n */\nvoid WINAPI SysFreeString16(SEGPTR str)\n{\n\tBSTR_Free(str);\n}\n\n/******************************************************************************\n *\t\tSysStringLen\t[OLE2DISP.7]\n *\n * Get the allocated length of a BSTR16 in characters (16 Bit).\n *\n * PARAMS\n *  str [I] BSTR16 to find the length of\n *\n * RETURNS\n *  The allocated length of str, or 0 if str is NULL.\n */\nint WINAPI SysStringByteLen16(SEGPTR str)\n{\n    return SysStringLen16(str);\n}\nint WINAPI SysStringLen16(SEGPTR str)\n{\n    if (!str)\n        return 0;\n    BYTE_BLOB16 *bb16 = (BYTE_BLOB16*)MapSL(get_blob16_from_bstr16(str));\n    return bb16->clSize;\n}\n\n#include <pshpack1.h>\n\ntypedef struct\n{\n    /* TCHAR* */SEGPTR szName;\n    VARTYPE vt;\n} PARAMDATA16, *LPPARAMDATA16;\n\ntypedef struct\n{\n    /* TCHAR* */SEGPTR szName;\n    /* PARAMDATA* */SEGPTR ppdata;\n    DISPID dispid;\n    UINT16 iMeth;\n    /* CALLCONV */WORD cc;\n    UINT16 cArgs;\n    unsigned short wFlags;\n    VARTYPE vtReturn;\n} METHODDATA16, *LPMETHODDATA16;\n\ntypedef struct\n{\n    /* METHODDATA * */ SEGPTR pmethdata;\n    UINT16 cMembers;\n} INTERFACEDATA16, *LPINTERFACEDATA16;\n#include <poppack.h>\n\nHRESULT WINAPI CreateDispTypeInfo16Impl(\n    INTERFACEDATA *pidata, /* [I] Description of the interface to build type info for */\n    LCID lcid, /* [I] Locale Id */\n    ITypeInfo **pptinfo); /* [O] Destination for created ITypeInfo object */\n/******************************************************************************\n * CreateDispTypeInfo [OLE2DISP.31]\n */\nHRESULT WINAPI CreateDispTypeInfo16(\n\tINTERFACEDATA16 *pidata,\n\tLCID lcid,\n\tSEGPTR *pptinfo)\n{\n    int i;\n    INTERFACEDATA *pidata32 = HeapAlloc(GetProcessHeap(), 0, sizeof(INTERFACEDATA));\n    METHODDATA16 *pimethdata16 = (METHODDATA16*)MapSL(pidata->pmethdata);\n    ITypeInfo *ptinfo = NULL;\n    HRESULT result;\n    TRACE(\"(%p,%d,%p)\\n\", pidata, lcid, pptinfo);\n    pidata32->cMembers = pidata->cMembers;\n    pidata32->pmethdata = (METHODDATA*)HeapAlloc(GetProcessHeap(), 0, sizeof(METHODDATA) * pidata32->cMembers);\n    for (i = 0; i < pidata32->cMembers; i++)\n    {\n        PARAMDATA16 *param16 = (PARAMDATA16*)MapSL(pimethdata16[i].ppdata);\n        pidata32->pmethdata[i].szName = strdupAtoW((LPCSTR)MapSL(pimethdata16[i].szName));\n        pidata32->pmethdata[i].dispid = pimethdata16[i].dispid;\n        pidata32->pmethdata[i].iMeth = pimethdata16[i].iMeth;\n        pidata32->pmethdata[i].cc = pimethdata16[i].cc;\n        pidata32->pmethdata[i].cArgs = pimethdata16[i].cArgs;\n        pidata32->pmethdata[i].wFlags = pimethdata16[i].wFlags;\n        pidata32->pmethdata[i].vtReturn = pimethdata16[i].vtReturn;\n        if (param16)\n        {\n            PARAMDATA *param32 = (PARAMDATA*)HeapAlloc(GetProcessHeap(), 0, sizeof(PARAMDATA) * pimethdata16[i].cArgs);\n            int j;\n            pidata32->pmethdata[i].ppdata = param32;\n            for (j = 0; j < pimethdata16[i].cArgs; j++)\n            {\n                param32[j].szName = strdupAtoW((LPCSTR)MapSL(param16[j].szName));\n                param32[j].vt = param16[j].vt;\n            }\n        }\n        else\n        {\n            pidata32->pmethdata[i].ppdata = NULL;\n        }\n    }\n    result = hresult32_16(CreateDispTypeInfo16Impl(pidata32, lcid, &ptinfo));\n    if (1)\n    {\n        for (i = 0; i < pidata32->cMembers; i++)\n        {\n            if (pidata32->pmethdata[i].ppdata)\n            {\n                int j;\n                for (j = 0; j < pidata32->pmethdata[i].cArgs; j++)\n                {\n                    HeapFree(GetProcessHeap(), 0, pidata32->pmethdata[i].ppdata[j].szName);\n                }\n            }\n            HeapFree(GetProcessHeap(), 0, pidata32->pmethdata[i].szName);\n        }\n        HeapFree(GetProcessHeap(), 0, pidata32->pmethdata);\n        HeapFree(GetProcessHeap(), 0, pidata32);\n    }\n    *pptinfo = iface32_16(&IID_ITypeInfo, ptinfo);\n\treturn result;\n}\n\nHRESULT WINAPI DispGetIDsOfNames16(SEGPTR ptinfo, SEGPTR rgszNames, UINT16 cNames, SEGPTR pMemId)\n{\n    return ITypeInfo16_GetIDsOfNames(ptinfo, rgszNames, cNames, pMemId);\n}\n\nHRESULT WINAPI DispInvoke16(SEGPTR _this, SEGPTR ptinfo, LONG dispidMember, UINT16 wFlags, SEGPTR pparams, SEGPTR pvarResult, SEGPTR pexcepinfo, SEGPTR puArgErr)\n{\n    return ITypeInfo16_Invoke(ptinfo, _this, dispidMember, wFlags,\n        pparams, pvarResult, pexcepinfo, puArgErr);\n}\n\n/******************************************************************************\n * CreateStdDispatch [OLE2DISP.32]\n */\nHRESULT WINAPI CreateStdDispatch16(\n    SEGPTR punkOuter,\n    SEGPTR pvThis,\n    SEGPTR ptinfo,\n    SEGPTR* ppunkStdDisp)\n{\n    HRESULT result;\n    IUnknown *punkStdDisp = NULL;\n    TRACE(\"(%p,%p,%p,%p)\\n\",punkOuter, pvThis, ptinfo, ppunkStdDisp);\n    result = CreateStdDispatch((IUnknown*)iface16_32(&IID_IUnknown, punkOuter), pvThis, (ITypeInfo*)iface16_32(&IID_ITypeInfo, ptinfo), &punkStdDisp);\n    *ppunkStdDisp = iface32_16(&IID_IUnknown, punkStdDisp);\n    return hresult32_16(result);\n}\n\n/******************************************************************************\n * RegisterActiveObject [OLE2DISP.35]\n */\nHRESULT WINAPI RegisterActiveObject16(\n\tSEGPTR punk, REFCLSID rclsid, DWORD dwFlags, unsigned long *pdwRegister\n) {\n\tTRACE(\"(%08x,%s,0x%08x,%p)\\n\",punk,debugstr_guid(rclsid),dwFlags,pdwRegister);\n\treturn hresult32_16(RegisterActiveObject((IUnknown*)iface16_32(&IID_IUnknown, punk), rclsid, dwFlags, pdwRegister));\n}\n\nHRESULT WINAPI RevokeActiveObject16(unsigned long dwRegister, SEGPTR pvreserved)\n{\n    TRACE(\"(%08x, %08x)\\n\", dwRegister, pvreserved);\n    if (pvreserved)\n    {\n        ERR(\"pvreserved must be NULL.\\n\");\n    }\n    return hresult32_16(RevokeActiveObject(dwRegister, NULL));\n}\n\nHRESULT WINAPI GetActiveObject16(REFCLSID rclsid, SEGPTR pvreserved, SEGPTR *ppunk)\n{\n    HRESULT result;\n    IUnknown *punk = NULL;\n    TRACE(\"(%s,%08x,%p)\\n\", debugstr_guid(rclsid), pvreserved, ppunk);\n    if (pvreserved)\n    {\n        ERR(\"pvreserved must be NULL.\\n\");\n    }\n    result = GetActiveObject(rclsid, NULL, &punk);\n    *ppunk = iface32_16(&IID_IUnknown, punk);\n    return hresult32_16(result);\n}\n\n/******************************************************************************\n * SetErrorInfo [OLE2DISP.110]\n */\nHRESULT WINAPI SetErrorInfo16(ULONG dwReserved, SEGPTR perrinfo)\n{\n    TRACE(\"(%08x,%08x)\\n\", dwReserved, perrinfo);\n    return hresult32_16(SetErrorInfo(dwReserved, (IErrorInfo*)iface16_32(&IID_IErrorInfo, perrinfo)));\n}\n\nHRESULT WINAPI GetErrorInfo16(ULONG dwReserved, SEGPTR *pperrinfo)\n{\n    HRESULT result;\n    IErrorInfo *perrinfo = NULL;\n    TRACE(\"(%08x,%08x)\\n\", dwReserved, pperrinfo);\n    result = GetErrorInfo(dwReserved, &perrinfo);\n    *pperrinfo = iface32_16(&IID_IErrorInfo, perrinfo);\n    return hresult32_16(result);\n}\n\nHRESULT WINAPI CreateErrorInfo16(SEGPTR *pperrinfo)\n{\n    HRESULT result;\n    ICreateErrorInfo *perrinfo = NULL;\n    TRACE(\"(%p)\\n\", perrinfo);\n    result = CreateErrorInfo(&perrinfo);\n    *pperrinfo = iface32_16(&IID_ICreateErrorInfo, perrinfo);\n    return hresult32_16(result);\n}\n\n\nHRESULT WINAPI DispGetParam16(\n\tDISPPARAMS16 *pdispparams, /* [in] Parameter list */\n\tUINT16       position,    /* [in] Position of parameter to coerce in pdispparams */\n\tVARTYPE      vtTarg,      /* [in] Type of value to coerce to */\n\tVARIANT16    *pvarResult,  /* [out] Destination for resulting variant */\n\tUINT16       *puArgErr)    /* [out] Destination for error code */\n{\n    /* position is counted backwards */\n    UINT pos;\n    HRESULT hr;\n\n    TRACE(\"position=%d, cArgs=%d, cNamedArgs=%d\\n\",\n          position, pdispparams->cArgs, pdispparams->cNamedArgs);\n\n    if (position < pdispparams->cArgs)\n    {\n      /* positional arg? */\n      pos = pdispparams->cArgs - position - 1;\n    }\n    else\n    {\n      /* FIXME: is this how to handle named args? */\n      for (pos=0; pos<pdispparams->cNamedArgs; pos++)\n        if (((DISPID*)MapSL(pdispparams->rgdispidNamedArgs))[pos] == position) break;\n\n      if (pos==pdispparams->cNamedArgs)\n        return DISP_E_PARAMNOTFOUND;\n    }\n\n    if (pdispparams->cArgs > 0 && !pdispparams->rgvarg)\n    {\n        hr = E_INVALIDARG;\n        goto done;\n    }\n\n    if (!pvarResult)\n    {\n        hr = E_INVALIDARG;\n        goto done;\n    }\n\n    hr = VariantChangeType16(pvarResult,\n                           &((VARIANT16*)MapSL(pdispparams->rgvarg))[pos],\n                           0, vtTarg);\n\ndone:\n    if (FAILED(hr))\n        *puArgErr = pos;\n\n    return hr;\n}\n\n#if 0\n/******************************************************************************\n * VariantChangeType [OLE2DISP.12]\n */\nHRESULT WINAPI VariantChangeType16(VARIANTARG16 *vargDest, VARIANTARG16 *varSrc, unsigned short flags, VARTYPE vt)\n{\n    FIXME(\"stub: (%p, %p, %d, %d)\\n\", vargDest, varSrc, flags, vt);\n    return E_NOTIMPL;\n}\n/******************************************************************************\n * VariantChangeTypeEx [OLE2DISP.108]\n */\nHRESULT WINAPI VariantChangeTypeEx16(VARIANTARG16 *dest, const VARIANTARG16 *src, LCID lcid, USHORT flags, VARTYPE vt)\n{\n        FIXME(\"stub: %p %p %d %d %d\\n\", dest, src, lcid, flags, vt);\n        return E_INVALIDARG;\n}\n\n/******************************************************************************\n * VariantInit [OLE2DISP.8]\n */\nvoid WINAPI VariantInit16(VARIANTARG16 *v)\n{\n    TRACE(\"(%p)\\n\", v);\n    v->vt = VT_EMPTY;\n}\n\nHRESULT WINAPI VariantClear16(VARIANTARG16 *v)\n{\n    TRACE(\"(%p)\\n\", v);\n    HRESULT hres = S_OK;\n    if (!V_ISBYREF(v))\n    {\n        if (V_ISARRAY(v) || V_VT(v) == VT_SAFEARRAY)\n        {\n            FIXME(\"V_ISARRAY\\n\");\n            hres = S_OK;\n        }\n        if (V_VT(v) == VT_BSTR)\n        {\n            /* free string */\n            SysFreeString16(V_BSTR(v));\n        }\n        if (V_VT(v) == VT_DISPATCH)\n        {\n            /* free object */\n            IUnknown16_Release(V_UNKNOWN(v));\n        }\n    }\n    v->vt = VT_EMPTY;\n    v->wReserved1 = 0;\n    v->wReserved2 = 0;\n    v->wReserved3 = 0;\n    return S_OK;\n}\n/* based on wine */\n\n\n/* Get just the type from a variant pointer */\n#define V_TYPE(v)  (V_VT((v)) & VT_TYPEMASK)\n\n/* Flags set in V_VT, other than the actual type value */\n#define VT_EXTRA_TYPE (VT_VECTOR|VT_ARRAY|VT_BYREF|VT_RESERVED)\n\n/* Get the extra flags from a variant pointer */\n#define V_EXTRA_TYPE(v) (V_VT((v)) & VT_EXTRA_TYPE)\n\n/******************************************************************************\n * Check if a variants type is valid.\n */\nstatic inline HRESULT VARIANT_ValidateType(VARTYPE vt)\n{\n  VARTYPE vtExtra = vt & VT_EXTRA_TYPE;\n\n  vt &= VT_TYPEMASK;\n\n  if (!(vtExtra & (VT_VECTOR|VT_RESERVED)))\n  {\n    if (vt < VT_VOID || vt == VT_RECORD || vt == VT_CLSID)\n    {\n      if ((vtExtra & (VT_BYREF|VT_ARRAY)) && vt <= VT_NULL)\n        return DISP_E_BADVARTYPE;\n      if (vt != (VARTYPE)15)\n        return S_OK;\n    }\n  }\n  return DISP_E_BADVARTYPE;\n}\n\n\nHRESULT WINAPI VariantCopy16(VARIANTARG16* pvargDest, VARIANTARG16* pvargSrc)\n{\n    HRESULT hres = S_OK;\n    if (V_TYPE(pvargSrc) == VT_CLSID || /* VT_CLSID is a special case */\n        FAILED(VARIANT_ValidateType(V_VT(pvargSrc))))\n        return DISP_E_BADVARTYPE;\n\n    if (pvargSrc != pvargDest &&\n        SUCCEEDED(hres = VariantClear16(pvargDest)))\n    {\n        *pvargDest = *pvargSrc; /* Shallow copy the value */\n\n        if (!V_ISBYREF(pvargSrc))\n        {\n            switch (V_VT(pvargSrc))\n            {\n            case VT_BSTR:\n                V_BSTR(pvargDest) = SysAllocStringLen16((char*)MapSL(V_BSTR(pvargSrc)), SysStringLen16(MapSL(V_BSTR(pvargSrc))));\n                if (!V_BSTR(pvargDest))\n                    hres = E_OUTOFMEMORY;\n                break;\n            case VT_RECORD:\n            {\n                FIXME(\"VT_RECORD, stub\\n\");\n            }\n                break;\n            case VT_DISPATCH:\n            case VT_UNKNOWN:\n                V_UNKNOWN(pvargDest) = V_UNKNOWN(pvargSrc);\n                if (V_UNKNOWN(pvargSrc))\n                    IUnknown16_AddRef(V_UNKNOWN(pvargSrc));\n                break;\n            default:\n                if (V_ISARRAY(pvargSrc))\n                    hres = SafeArrayCopy16(MapSL(V_ARRAY(pvargSrc)), &V_ARRAY(pvargDest));\n            }\n        }\n    }\n    return hres;\n}\n\nHRESULT WINAPI VariantCopyInd16(VARIANT16 *v, VARIANTARG16 *src)\n{\n    if (!V_ISBYREF(v))\n        return VariantCopy16(v, src);\n    FIXME(\"(%p, %p) stub.\\n\", v, src);\n    *v = *src;\n    return E_INVALIDARG;\n}\n#endif\n"
  },
  {
    "path": "ole2disp/ole2disp.def",
    "content": "; File generated automatically from ole2disp\\ole2disp.dll16.spec; do not edit!\n\nLIBRARY ole2disp.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n  SysAllocString16 @2\n  SysFreeString16 @3\n  LoadTypeLib16Impl @4\n  SysStringLen16 @5\n  SysAllocStringLen16 @6\n  CreateTypeLib2Impl @7\n"
  },
  {
    "path": "ole2disp/ole2disp.dll16.spec",
    "content": "1 stub DLLGETCLASSOBJECT\n2 pascal SysAllocString(str)\t\tSysAllocString16\n3 pascal SysReallocString(ptr str)\tSysReAllocString16\n4 pascal SysAllocStringLen(segstr word)\tSysAllocStringLen16\n5 pascal SysReAllocStringLen(ptr segstr word) SysReAllocStringLen16\n6 pascal SysFreeString(segstr)\t\tSysFreeString16\n7 pascal SysStringLen(segstr)\t\tSysStringLen16\n8 pascal VariantInit(ptr) VariantInit16\n9 pascal VariantClear(ptr) VariantClear16\n10 pascal VariantCopy(ptr ptr) VariantCopy16\n11 pascal VariantCopyInd(ptr ptr) VariantCopyInd16\n12 pascal VariantChangeType(ptr ptr word word) VariantChangeType16\n13 stub VARIANTTIMETODOSDATETIME\n14 stub DOSDATETIMETOVARIANTTIME\n15 pascal SafeArrayCreate(word word ptr) SafeArrayCreate16\n16 pascal SafeArrayDestroy(segptr) SafeArrayDestroy16\n17 pascal -ret16 SafeArrayGetDim(ptr) SafeArrayGetDim16\n18 pascal -ret16 SafeArrayGetElemsize(ptr) SafeArrayGetElemsize16\n19 pascal SafeArrayGetUBound(ptr word ptr) SafeArrayGetUBound16\n20 pascal SafeArrayGetLBound(ptr word ptr) SafeArrayGetLBound16\n21 pascal SafeArrayLock(ptr) SafeArrayLock16\n22 pascal SafeArrayUnlock(ptr) SafeArrayUnlock16\n23 pascal SafeArrayAccessData(ptr ptr) SafeArrayAccessData16\n24 pascal SafeArrayUnaccessData(ptr) SafeArrayUnaccessData16\n25 pascal SafeArrayGetElement(segptr ptr ptr) SafeArrayGetElement16\n26 stub SAFEARRAYPUTELEMENT\n27 pascal SafeArrayCopy(ptr ptr) SafeArrayCopy16\n28 pascal DispGetParam(ptr word word ptr ptr) DispGetParam16\n29 pascal DispGetIDsOfNames(segptr segptr word segptr) DispGetIDsOfNames16\n30 pascal DispInvoke(segptr segptr long word segptr segptr segptr segptr) DispInvoke16\n31 pascal CreateDispTypeInfo(ptr long ptr) CreateDispTypeInfo16\n32 pascal CreateStdDispatch(segptr segptr segptr ptr) CreateStdDispatch16\n33 variable _IID_IDispatch(0x00020400 0x00000000 0x000000c0 0x46000000)\n34 variable _IID_IEnumVARIANT(0x00020404 0x00000000 0x000000c0 0x46000000)\n35 pascal RegisterActiveObject(segptr ptr long ptr) RegisterActiveObject16\n36 pascal RevokeActiveObject(long segptr) RevokeActiveObject16\n37 pascal GetActiveObject(ptr segptr ptr) GetActiveObject16\n38 pascal SafeArrayAllocDescriptor(word ptr) SafeArrayAllocDescriptor16\n39 pascal SafeArrayAllocData(ptr) SafeArrayAllocData16\n40 pascal SafeArrayDestroyDescriptor(segptr) SafeArrayDestroyDescriptor16\n41 pascal SafeArrayDestroyData(ptr) SafeArrayDestroyData16\n42 pascal SafeArrayRedim(ptr ptr) SafeArrayRedim16\n43 pascal VarI2FromI4(long ptr) VarI2FromI416\n44 pascal VarI2FromR4(float ptr) VarI2FromR416\n45 pascal VarI2FromR8(long long ptr) VarI2FromR816_conv\n46 pascal VarI2FromCy(long long ptr) VarI2FromCy16_conv\n47 pascal VarI2FromDate(long long ptr) VarI2FromDate16_conv\n48 pascal VarI2FromStr(str long long ptr) VarI2FromStr16\n49 stub VARI2FROMDISP\n50 pascal VarI2FromBool(word ptr) VarI2FromBool16\n51 stub VARI4FROMI2\n52 stub VARI4FROMR4\n53 stub VARI4FROMR8\n54 stub VARI4FROMCY\n55 stub VARI4FROMDATE\n56 pascal VarI4FromStr(str long long ptr) VarI4FromStr16\n57 stub VARI4FROMDISP\n58 stub VARI4FROMBOOL\n59 stub VARR4FROMI2\n60 stub VARR4FROMI4\n61 pascal VarR4FromR8(long long ptr) VarR4FromR816_conv\n62 stub VARR4FROMCY\n63 stub VARR4FROMDATE\n64 pascal VarR4FromStr(str long long ptr) VarR4FromStr16\n65 stub VARR4FROMDISP\n66 stub VARR4FROMBOOL\n67 stub VARR8FROMI2\n68 stub VARR8FROMI4\n69 stub VARR8FROMR4\n70 stub VARR8FROMCY\n71 stub VARR8FROMDATE\n72 pascal VarR8FromStr(str long long ptr) VarR8FromStr16\n73 stub VARR8FROMDISP\n74 stub VARR8FROMBOOL\n75 stub VARDATEFROMI2\n76 stub VARDATEFROMI4\n77 stub VARDATEFROMR4\n78 stub VARDATEFROMR8\n79 stub VARDATEFROMCY\n80 pascal VarDateFromStr(str long long ptr) VarDateFromStr16\n81 stub VARDATEFROMDISP\n82 stub VARDATEFROMBOOL\n83 stub VARCYFROMI2\n84 stub VARCYFROMI4\n85 stub VARCYFROMR4\n86 stub VARCYFROMR8\n87 stub VARCYFROMDATE\n88 pascal VarCyFromStr(str long long ptr) VarCyFromStr16\n89 stub VARCYFROMDISP\n90 stub VARCYFROMBOOL\n91 pascal VarBstrFromI2(s_word long long ptr) VarBstrFromI216\n92 pascal VarBstrFromI4(long long long ptr) VarBstrFromI416\n93 pascal VarBstrFromR4(long long long ptr) VarBstrFromR416\n94 pascal VarBstrFromR8(long long long long ptr) VarBstrFromR816_conv\n95 pascal VarBstrFromCy(long long long long ptr) VarBstrFromCy16_conv\n96 pascal VarBstrFromDate(long long long long ptr) VarBstrFromDate16_conv\n97 pascal VarBstrFromDisp(segptr long long ptr) VarBstrFromDisp16\n98 pascal VarBstrFromBool(word long long ptr) VarBstrFromBool16\n99 stub VARBOOLFROMI2\n100 stub VARBOOLFROMI4\n101 stub VARBOOLFROMR4\n102 stub VARBOOLFROMR8\n103 stub VARBOOLFROMDATE\n104 stub VARBOOLFROMCY\n105 stub VARBOOLFROMSTR\n106 stub VARBOOLFROMDISP\n107 stub DOINVOKEMETHOD\n108 pascal VariantChangeTypeEx(ptr ptr long word word) VariantChangeTypeEx16\n109 pascal SafeArrayPtrOfIndex(segptr ptr ptr) SafeArrayPtrOfIndex16\n110 pascal SetErrorInfo(long segptr) SetErrorInfo16\n111 pascal GetErrorInfo(long ptr)  GetErrorInfo16\n112 pascal CreateErrorInfo(ptr) CreateErrorInfo16\n113 variable _IID_IErrorInfo(0x1cf2b120 0x101b547d 0x0008658e 0x19d12b2b)\n114 variable _IID_ICreateErrorInfo(0x22f03340 0x101b547d 0x0008658e 0x19d12b2b)\n115 variable _IID_ISupportErrorInfo(0xdf0b3d60 0x101b548f 0x0008658e 0x19d12b2b)\n116 pascal VarUI1FromI2(word ptr) VarUI1FromI216\n117 pascal VarUI1FromI4(long ptr) VarUI1FromI416\n118 pascal VarUI1FromR4(long ptr) VarUI1FromR416\n119 pascal VarUI1FromR8(long long ptr) VarUI1FromR816_conv\n120 pascal VarUI1FromCy(long long ptr) VarUI1FromCy16_conv\n121 pascal VarUI1FromDate(long long ptr) VarUI1FromDate16_conv\n122 pascal VarUI1FromStr(str long long ptr) VarUI1FromStr16\n123 pascal VarUI1FromDisp(segptr long ptr) VarUI1FromDisp16\n124 pascal VarUI1FromBool(word ptr) VarUI1FromBool16\n125 pascal VarI2FromUI1(word ptr) VarI2FromUI116\n126 stub VARI4FROMUI1\n127 stub VARR4FROMUI1\n128 stub VARR8FROMUI1\n129 stub VARDATEFROMUI1\n130 stub VARCYFROMUI1\n131 pascal VarBstrFromUI1(word long long ptr) VarBstrFromUI116\n132 stub VARBOOLFROMUI1\n133 stub DLLCANUNLOADNOW\n#134 stub WEP\n#135 stub ___EXPORTEDSTUB\n\n@ stdcall -arch=win32 SysAllocString16(str)\n@ stdcall -arch=win32 SysFreeString16(long)\n@ stdcall -arch=win32 LoadTypeLib16Impl(wstr ptr)\n@ stdcall -arch=win32 SysStringLen16(long)\n@ stdcall -arch=win32 SysAllocStringLen16(str long)\n@ stdcall -arch=win32 CreateTypeLib2Impl(long wstr ptr)\n"
  },
  {
    "path": "ole2disp/ole2disp.h",
    "content": "/*\n * Copyright 1995 Martin von Loewis\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_OLEAUT32_OLE2DISP_H\n#define __WINE_OLEAUT32_OLE2DISP_H\n\n#include <stdarg.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wtypes.h\"\n#include \"wownt32.h\"\n#include \"wine/windef16.h\"\n#include \"wine/winbase16.h\"\n#include \"../ole2/ifs.h\"\n#include \"wine/debug.h\"\n\ntypedef CHAR OLECHAR16;\ntypedef LPSTR LPOLESTR16;\ntypedef LPCSTR LPCOLESTR16;\ntypedef OLECHAR16 *BSTR16;\ntypedef BSTR16 *LPBSTR16;\n\nSEGPTR WINAPI SysAllocString16(LPCOLESTR16);\nSEGPTR WINAPI SysAllocStringLen16(SEGPTR, int);\nVOID   WINAPI SysFreeString16(SEGPTR);\nINT16  WINAPI SysReAllocString16(SEGPTR*,LPCOLESTR16);\nint    WINAPI SysReAllocStringLen16(SEGPTR*, SEGPTR,  int);\nint    WINAPI SysStringLen16(SEGPTR);\n\ntypedef struct tagVARIANT16 {\n    union\n    {\n        struct __tagVARIANT16\n        {\n            VARTYPE vt;\n            WORD wReserved1;\n            WORD wReserved2;\n            WORD wReserved3;\n            union {\n                BYTE bVal;\n                SHORT iVal;\n                LONG lVal;\n                FLOAT fltVal;\n                DOUBLE dblVal;\n                VARIANT_BOOL boolVal;\n                SCODE scode;\n                DATE date;\n                /* BSTR16 */        SEGPTR bstrVal;\n                CY cyVal;\n                /* IUnknown* */     SEGPTR punkVal;\n                /* SEGPTR */    SEGPTR pdispVal;\n                /* SAFEARRAY* */    SEGPTR parray;\n                /* BYTE* */         SEGPTR pbVal;\n                /* SHORT* */        SEGPTR piVal;\n                /* LONG* */         SEGPTR plVal;\n                /* FLOAT* */        SEGPTR pfltVal;\n                /* DOUBLE* */       SEGPTR pdblVal;\n                /* VARIANT_BOOL* */ SEGPTR pboolVal;\n                /* SCODE* */        SEGPTR pscode;\n                /* DATE* */         SEGPTR pdate;\n                /* BSTR16* */       SEGPTR pbstrVal;\n                /* VARIANT16* */    SEGPTR pvarVal;\n                /* void* */         SEGPTR byref;\n                /* CY* */           SEGPTR pcyVal;\n                /* IUnknown** */    SEGPTR ppunkVal;\n                /* IDispatch** */   SEGPTR ppdispVal;\n                /* SAFEARRAY** */   SEGPTR pparray;\n\n                CHAR cVal;\n                LONGLONG llVal;\n                USHORT uiVal;\n                ULONGLONG ullVal;\n                ULONG ulVal;\n                UINT uintVal;\n                INT intVal;\n            } __VARIANT_NAME_3;\n        } __VARIANT_NAME_2;\n    } __VARIANT_NAME_1;\n} VARIANT16;\n\n#define V_VARIANTREF16(X)  ((VARIANT16*)MapSL(V_UNION(X, pvarVal)))\n#define V_UNKNOWNREF16(X)  ((SEGPTR*)MapSL(V_UNION(X, ppunkVal)))\n#define V_ARRAYREF16(X)    ((SEGPTR*)MapSL(V_UNION(X, pparray)))\n#define V_BSTRREF16(X)     ((SEGPTR*)MapSL(V_UNION(X, pbstrVal)))\n#define V_BSTR16(X)     ((BSTR16*)MapSL(V_UNION(X, bstrVal)))\ntypedef VARIANT16 VARIANTARG16;\ntypedef VARIANT16 *LPVARIANT16;\n/* 16-bit SAFEARRAY implementation */\n\n\ntypedef struct tagSAFEARRAY16\n{\n    USHORT cDims;\n    USHORT fFeatures;\n    USHORT cbElements;\n    USHORT cLocks;\n    ULONG  handle;\n    SEGPTR pvData;\n    SAFEARRAYBOUND16 rgsabound[1];\n} SAFEARRAY16;\n\nUSHORT WINAPI SafeArrayGetDim16(SAFEARRAY16 *sa);\nUSHORT WINAPI SafeArrayGetElemsize16(SAFEARRAY16 *sa);\nHRESULT WINAPI SafeArrayGetUBound16(SAFEARRAY16 *sa, UINT16 dim, LONG *ubound);\nHRESULT WINAPI SafeArrayGetLBound16(SAFEARRAY16 *sa, UINT16 dim, LONG *lbound);\nHRESULT WINAPI SafeArrayLock16(SAFEARRAY16 *sa);\nHRESULT WINAPI SafeArrayUnlock16(SAFEARRAY16 *sa);\nHRESULT WINAPI SafeArrayAccessData16(SAFEARRAY16 *sa, SEGPTR *data);\nHRESULT WINAPI SafeArrayUnaccessData16(SAFEARRAY16 *sa);\nHRESULT WINAPI SafeArrayAllocDescriptor16(UINT16 dims, SEGPTR *ret);\nHRESULT WINAPI SafeArrayAllocData16(SAFEARRAY16 *sa);\nHRESULT WINAPI SafeArrayDestroyDescriptor16(SEGPTR s);\nHRESULT WINAPI SafeArrayDestroyData16(SAFEARRAY16 *sa);\nHRESULT WINAPI SafeArrayCopy16(SAFEARRAY16 *sa, SAFEARRAY16 **ppsaout);\nSEGPTR WINAPI SysAllocString16(LPCOLESTR16 oleStr);\nINT16 WINAPI SysReAllocString16(SEGPTR *pbstr, LPCOLESTR16 oleStr);\nSEGPTR WINAPI SysAllocStringLen16(SEGPTR oleStr, int len);\nint WINAPI SysReAllocStringLen16(SEGPTR *old, SEGPTR in, int len);\nvoid WINAPI SysFreeString16(SEGPTR str);\nint WINAPI SysStringLen16(SEGPTR str);\nint WINAPI SysStringByteLen16(SEGPTR str);\nSEGPTR WINAPI SysAllocStringByteLen16(const char *oleStr, int len);\nHRESULT WINAPI SafeArrayDestroy16(SEGPTR psa);\nHRESULT WINAPI BstrFromVector16(SAFEARRAY16 *psa, /*BSTR*/SEGPTR *pbstr);\ntypedef SEGPTR SEGBSTR16;\n#define BSTR_PTR(x) ((OLECHAR16*)MapSL(x))\nHRESULT WINAPI VectorFromBstr16(SEGBSTR16 bstr, /*SAFEARRAY16 * */SEGPTR *ppsa);\n\nHRESULT WINAPI VarUdateFromDate16(DATE dateIn, ULONG dwFlags, UDATE *lpUdate);\nHRESULT WINAPI VariantCopy16(VARIANTARG16* pvargDest, VARIANTARG16* pvargSrc);\nHRESULT WINAPI VarDateFromUdate16(UDATE *pUdateIn, ULONG dwFlags, DATE *pDateOut);\nHRESULT WINAPI VariantClear16(VARIANTARG16* pVarg);\nHRESULT WINAPI VariantChangeTypeEx16(VARIANTARG16* pvargDest, VARIANTARG16* pvargSrc,\n                                   LCID lcid, USHORT wFlags, VARTYPE vt);\nHRESULT WINAPI VarCyNeg16(CY cyIn, CY* pCyOut);\nHRESULT WINAPI VarCyInt16(CY cyIn, CY* pCyOut);\n\nvoid WINAPI VariantInit16(VARIANTARG16* pVarg);\nHRESULT WINAPI VariantClear16(VARIANTARG16* pVarg);\nHRESULT WINAPI VariantCopy16(VARIANTARG16* pvargDest, VARIANTARG16* pvargSrc);\nHRESULT WINAPI VariantCopyInd16(VARIANT16* pvargDest, VARIANTARG16* pvargSrc);\nHRESULT WINAPI VariantChangeType16(VARIANTARG16* pvargDest, VARIANTARG16* pvargSrc, USHORT wFlags, VARTYPE vt);\nHRESULT WINAPI VariantChangeTypeEx16(VARIANTARG16* pvargDest, VARIANTARG16* pvargSrc, LCID lcid, USHORT wFlags, VARTYPE vt);\nINT WINAPI DosDateTimeToVariantTime16(USHORT wDosDate, USHORT wDosTime, double *pDateOut);\nINT WINAPI VariantTimeToDosDateTime16(double dateIn, USHORT *pwDosDate, USHORT *pwDosTime);\nINT WINAPI SystemTimeToVariantTime16(LPSYSTEMTIME lpSt, double *pDateOut);\nINT WINAPI VariantTimeToSystemTime16(double dateIn, LPSYSTEMTIME lpSt);\nHRESULT WINAPI VarDateFromUdateEx16(UDATE *pUdateIn, LCID lcid, ULONG dwFlags, DATE *pDateOut);\nHRESULT WINAPI VarDateFromUdate16(UDATE *pUdateIn, ULONG dwFlags, DATE *pDateOut);\nHRESULT WINAPI VarUdateFromDate16(DATE dateIn, ULONG dwFlags, UDATE *lpUdate);\nHRESULT WINAPI VarParseNumFromStr16(OLECHAR16 *lpszStr, LCID lcid, ULONG dwFlags, NUMPARSE *pNumprs, BYTE *rgbDig);\nHRESULT WINAPI VarNumFromParseNum16(NUMPARSE *pNumprs, BYTE *rgbDig, ULONG dwVtBits, VARIANT16 *pVarDst);\nHRESULT WINAPI VarCat16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 out);\nHRESULT WINAPI VarCmp16(LPVARIANT16 left, LPVARIANT16 right, LCID lcid, DWORD flags);\nHRESULT WINAPI VarAnd16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result);\nHRESULT WINAPI VarAdd16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result);\nHRESULT WINAPI VarMul16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result);\nHRESULT WINAPI VarDiv16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result);\nHRESULT WINAPI VarSub16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result);\nHRESULT WINAPI VarOr16(LPVARIANT16 pVarLeft, LPVARIANT16 pVarRight, LPVARIANT16 pVarOut);\nHRESULT WINAPI VarAbs16(LPVARIANT16 pVarIn, LPVARIANT16 pVarOut);\nHRESULT WINAPI VarFix16(LPVARIANT16 pVarIn, LPVARIANT16 pVarOut);\nHRESULT WINAPI VarInt16(LPVARIANT16 pVarIn, LPVARIANT16 pVarOut);\nHRESULT WINAPI VarXor16(LPVARIANT16 pVarLeft, LPVARIANT16 pVarRight, LPVARIANT16 pVarOut);\nHRESULT WINAPI VarEqv16(LPVARIANT16 pVarLeft, LPVARIANT16 pVarRight, LPVARIANT16 pVarOut);\nHRESULT WINAPI VarNeg16(LPVARIANT16 pVarIn, LPVARIANT16 pVarOut);\nHRESULT WINAPI VarNot16(LPVARIANT16 pVarIn, LPVARIANT16 pVarOut);\nHRESULT WINAPI VarRound16(LPVARIANT16 pVarIn, int deci, LPVARIANT16 pVarOut);\nHRESULT WINAPI VarIdiv16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result);\nHRESULT WINAPI VarMod16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result);\nHRESULT WINAPI VarPow16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result);\nHRESULT WINAPI VarImp16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result);\nHRESULT WINAPI VarI1FromUI116(BYTE bIn, signed char* pcOut);\nHRESULT WINAPI VarI1FromI216(SHORT sIn, signed char* pcOut);\nHRESULT WINAPI VarI1FromI416(LONG iIn, signed char* pcOut);\nHRESULT WINAPI VarI1FromR416(FLOAT fltIn, signed char* pcOut);\nHRESULT WINAPI VarI1FromR816(double dblIn, signed char* pcOut);\nHRESULT WINAPI VarI1FromDate16(DATE dateIn, signed char* pcOut);\nHRESULT WINAPI VarI1FromCy16(CY cyIn, signed char* pcOut);\nHRESULT WINAPI VarI1FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, signed char* pcOut);\nHRESULT WINAPI VarI1FromDisp16(SEGPTR pdispIn, LCID lcid, signed char* pcOut);\nHRESULT WINAPI VarI1FromBool16(VARIANT_BOOL boolIn, signed char* pcOut);\nHRESULT WINAPI VarI1FromUI216(USHORT usIn, signed char* pcOut);\nHRESULT WINAPI VarI1FromUI416(ULONG ulIn, signed char* pcOut);\nHRESULT WINAPI VarI1FromDec16(DECIMAL *pdecIn, signed char* pcOut);\nHRESULT WINAPI VarI1FromI816(LONG64 llIn, signed char* pcOut);\nHRESULT WINAPI VarI1FromUI816(ULONG64 ullIn, signed char* pcOut);\nHRESULT WINAPI VarUI1FromI216(SHORT sIn, BYTE* pbOut);\nHRESULT WINAPI VarUI1FromI416(LONG iIn, BYTE* pbOut);\nHRESULT WINAPI VarUI1FromR416(FLOAT fltIn, BYTE* pbOut);\nHRESULT WINAPI VarUI1FromR816(double dblIn, BYTE* pbOut);\nHRESULT WINAPI VarUI1FromCy16(CY cyIn, BYTE* pbOut);\nHRESULT WINAPI VarUI1FromDate16(DATE dateIn, BYTE* pbOut);\nHRESULT WINAPI VarUI1FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, BYTE* pbOut);\nHRESULT WINAPI VarUI1FromDisp16(SEGPTR pdispIn, LCID lcid, BYTE* pbOut);\nHRESULT WINAPI VarUI1FromBool16(VARIANT_BOOL boolIn, BYTE* pbOut);\nHRESULT WINAPI VarUI1FromI116(signed char cIn, BYTE* pbOut);\nHRESULT WINAPI VarUI1FromUI216(USHORT usIn, BYTE* pbOut);\nHRESULT WINAPI VarUI1FromUI416(ULONG ulIn, BYTE* pbOut);\nHRESULT WINAPI VarUI1FromDec16(DECIMAL *pdecIn, BYTE* pbOut);\nHRESULT WINAPI VarUI1FromI816(LONG64 llIn, BYTE* pbOut);\nHRESULT WINAPI VarUI1FromUI816(ULONG64 ullIn, BYTE* pbOut);\nHRESULT WINAPI VarI2FromUI116(BYTE bIn, SHORT* psOut);\nHRESULT WINAPI VarI2FromI416(LONG iIn, SHORT* psOut);\nHRESULT WINAPI VarI2FromR416(FLOAT fltIn, SHORT* psOut);\nHRESULT WINAPI VarI2FromR816(double dblIn, SHORT* psOut);\nHRESULT WINAPI VarI2FromCy16(CY cyIn, SHORT* psOut);\nHRESULT WINAPI VarI2FromDate16(DATE dateIn, SHORT* psOut);\nHRESULT WINAPI VarI2FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, SHORT* psOut);\nHRESULT WINAPI VarI2FromDisp16(SEGPTR pdispIn, LCID lcid, SHORT* psOut);\nHRESULT WINAPI VarI2FromBool16(VARIANT_BOOL boolIn, SHORT* psOut);\nHRESULT WINAPI VarI2FromI116(signed char cIn, SHORT* psOut);\nHRESULT WINAPI VarI2FromUI216(USHORT usIn, SHORT* psOut);\nHRESULT WINAPI VarI2FromUI416(ULONG ulIn, SHORT* psOut);\nHRESULT WINAPI VarI2FromDec16(DECIMAL *pdecIn, SHORT* psOut);\nHRESULT WINAPI VarI2FromI816(LONG64 llIn, SHORT* psOut);\nHRESULT WINAPI VarI2FromUI816(ULONG64 ullIn, SHORT* psOut);\nHRESULT WINAPI VarUI2FromUI116(BYTE bIn, USHORT* pusOut);\nHRESULT WINAPI VarUI2FromI216(SHORT sIn, USHORT* pusOut);\nHRESULT WINAPI VarUI2FromI416(LONG iIn, USHORT* pusOut);\nHRESULT WINAPI VarUI2FromR416(FLOAT fltIn, USHORT* pusOut);\nHRESULT WINAPI VarUI2FromR816(double dblIn, USHORT* pusOut);\nHRESULT WINAPI VarUI2FromDate16(DATE dateIn, USHORT* pusOut);\nHRESULT WINAPI VarUI2FromCy16(CY cyIn, USHORT* pusOut);\nHRESULT WINAPI VarUI2FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, USHORT* pusOut);\nHRESULT WINAPI VarUI2FromDisp16(SEGPTR pdispIn, LCID lcid, USHORT* pusOut);\nHRESULT WINAPI VarUI2FromBool16(VARIANT_BOOL boolIn, USHORT* pusOut);\nHRESULT WINAPI VarUI2FromI116(signed char cIn, USHORT* pusOut);\nHRESULT WINAPI VarUI2FromUI416(ULONG ulIn, USHORT* pusOut);\nHRESULT WINAPI VarUI2FromDec16(DECIMAL *pdecIn, USHORT* pusOut);\nHRESULT WINAPI VarUI2FromI816(LONG64 llIn, USHORT* pusOut);\nHRESULT WINAPI VarUI2FromUI816(ULONG64 ullIn, USHORT* pusOut);\nHRESULT WINAPI VarI4FromUI116(BYTE bIn, LONG *piOut);\nHRESULT WINAPI VarI4FromI216(SHORT sIn, LONG *piOut);\nHRESULT WINAPI VarI4FromR416(FLOAT fltIn, LONG *piOut);\nHRESULT WINAPI VarI4FromR816(double dblIn, LONG *piOut);\nHRESULT WINAPI VarI4FromCy16(CY cyIn, LONG *piOut);\nHRESULT WINAPI VarI4FromDate16(DATE dateIn, LONG *piOut);\nHRESULT WINAPI VarI4FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, LONG *piOut);\nHRESULT WINAPI VarI4FromDisp16(SEGPTR pdispIn, LCID lcid, LONG *piOut);\nHRESULT WINAPI VarI4FromBool16(VARIANT_BOOL boolIn, LONG *piOut);\nHRESULT WINAPI VarI4FromI116(signed char cIn, LONG *piOut);\nHRESULT WINAPI VarI4FromUI216(USHORT usIn, LONG *piOut);\nHRESULT WINAPI VarI4FromUI416(ULONG ulIn, LONG *piOut);\nHRESULT WINAPI VarI4FromDec16(DECIMAL *pdecIn, LONG *piOut);\nHRESULT WINAPI VarI4FromI816(LONG64 llIn, LONG *piOut);\nHRESULT WINAPI VarI4FromUI816(ULONG64 ullIn, LONG *piOut);\nHRESULT WINAPI VarUI4FromUI116(BYTE bIn, ULONG *pulOut);\nHRESULT WINAPI VarUI4FromI216(SHORT sIn, ULONG *pulOut);\nHRESULT WINAPI VarUI4FromI416(LONG iIn, ULONG *pulOut);\nHRESULT WINAPI VarUI4FromR416(FLOAT fltIn, ULONG *pulOut);\nHRESULT WINAPI VarUI4FromR816(double dblIn, ULONG *pulOut);\nHRESULT WINAPI VarUI4FromDate16(DATE dateIn, ULONG *pulOut);\nHRESULT WINAPI VarUI4FromCy16(CY cyIn, ULONG *pulOut);\nHRESULT WINAPI VarUI4FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, ULONG *pulOut);\nHRESULT WINAPI VarUI4FromDisp16(SEGPTR pdispIn, LCID lcid, ULONG *pulOut);\nHRESULT WINAPI VarUI4FromBool16(VARIANT_BOOL boolIn, ULONG *pulOut);\nHRESULT WINAPI VarUI4FromI116(signed char cIn, ULONG *pulOut);\nHRESULT WINAPI VarUI4FromUI216(USHORT usIn, ULONG *pulOut);\nHRESULT WINAPI VarUI4FromDec16(DECIMAL *pdecIn, ULONG *pulOut);\nHRESULT WINAPI VarUI4FromI816(LONG64 llIn, ULONG *pulOut);\nHRESULT WINAPI VarUI4FromUI816(ULONG64 ullIn, ULONG *pulOut);\nHRESULT WINAPI VarI8FromUI116(BYTE bIn, LONG64* pi64Out);\nHRESULT WINAPI VarI8FromI216(SHORT sIn, LONG64* pi64Out);\nHRESULT WINAPI VarI8FromR416(FLOAT fltIn, LONG64* pi64Out);\nHRESULT WINAPI VarI8FromR816(double dblIn, LONG64* pi64Out);\nHRESULT WINAPI VarI8FromCy16(CY cyIn, LONG64* pi64Out);\nHRESULT WINAPI VarI8FromDate16(DATE dateIn, LONG64* pi64Out);\nHRESULT WINAPI VarI8FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, LONG64* pi64Out);\nHRESULT WINAPI VarI8FromDisp16(SEGPTR pdispIn, LCID lcid, LONG64* pi64Out);\nHRESULT WINAPI VarI8FromBool16(VARIANT_BOOL boolIn, LONG64* pi64Out);\nHRESULT WINAPI VarI8FromI116(signed char cIn, LONG64* pi64Out);\nHRESULT WINAPI VarI8FromUI216(USHORT usIn, LONG64* pi64Out);\nHRESULT WINAPI VarI8FromUI416(ULONG ulIn, LONG64* pi64Out);\nHRESULT WINAPI VarI8FromDec16(DECIMAL *pdecIn, LONG64* pi64Out);\nHRESULT WINAPI VarI8FromUI816(ULONG64 ullIn, LONG64* pi64Out);\nHRESULT WINAPI VarUI8FromI816(LONG64 llIn, ULONG64* pui64Out);\nHRESULT WINAPI VarUI8FromUI116(BYTE bIn, ULONG64* pui64Out);\nHRESULT WINAPI VarUI8FromI216(SHORT sIn, ULONG64* pui64Out);\nHRESULT WINAPI VarUI8FromR416(FLOAT fltIn, ULONG64* pui64Out);\nHRESULT WINAPI VarUI8FromR816(double dblIn, ULONG64* pui64Out);\nHRESULT WINAPI VarUI8FromCy16(CY cyIn, ULONG64* pui64Out);\nHRESULT WINAPI VarUI8FromDate16(DATE dateIn, ULONG64* pui64Out);\nHRESULT WINAPI VarUI8FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, ULONG64* pui64Out);\nHRESULT WINAPI VarUI8FromDisp16(SEGPTR pdispIn, LCID lcid, ULONG64* pui64Out);\nHRESULT WINAPI VarUI8FromBool16(VARIANT_BOOL boolIn, ULONG64* pui64Out);\nHRESULT WINAPI VarUI8FromI116(signed char cIn, ULONG64* pui64Out);\nHRESULT WINAPI VarUI8FromUI216(USHORT usIn, ULONG64* pui64Out);\nHRESULT WINAPI VarUI8FromUI416(ULONG ulIn, ULONG64* pui64Out);\nHRESULT WINAPI VarUI8FromDec16(DECIMAL *pdecIn, ULONG64* pui64Out);\nHRESULT WINAPI VarR4FromUI116(BYTE bIn, float *pFltOut);\nHRESULT WINAPI VarR4FromI216(SHORT sIn, float *pFltOut);\nHRESULT WINAPI VarR4FromI416(LONG lIn, float *pFltOut);\nHRESULT WINAPI VarR4FromR816(double dblIn, float *pFltOut);\nHRESULT WINAPI VarR4FromCy16(CY cyIn, float *pFltOut);\nHRESULT WINAPI VarR4FromDate16(DATE dateIn, float *pFltOut);\nHRESULT WINAPI VarR4FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, float *pFltOut);\nHRESULT WINAPI VarR4FromDisp16(SEGPTR pdispIn, LCID lcid, float *pFltOut);\nHRESULT WINAPI VarR4FromBool16(VARIANT_BOOL boolIn, float *pFltOut);\nHRESULT WINAPI VarR4FromI116(signed char cIn, float *pFltOut);\nHRESULT WINAPI VarR4FromUI216(USHORT usIn, float *pFltOut);\nHRESULT WINAPI VarR4FromUI416(ULONG ulIn, float *pFltOut);\nHRESULT WINAPI VarR4FromDec16(DECIMAL* pDecIn, float *pFltOut);\nHRESULT WINAPI VarR4FromI816(LONG64 llIn, float *pFltOut);\nHRESULT WINAPI VarR4FromUI816(ULONG64 ullIn, float *pFltOut);\nHRESULT WINAPI VarR4CmpR816(float fltLeft, double dblRight);\nHRESULT WINAPI VarR8FromUI116(BYTE bIn, double *pDblOut);\nHRESULT WINAPI VarR8FromI216(SHORT sIn, double *pDblOut);\nHRESULT WINAPI VarR8FromI416(LONG lIn, double *pDblOut);\nHRESULT WINAPI VarR8FromR416(FLOAT fltIn, double *pDblOut);\nHRESULT WINAPI VarR8FromCy16(CY cyIn, double *pDblOut);\nHRESULT WINAPI VarR8FromDate16(DATE dateIn, double *pDblOut);\nHRESULT WINAPI VarR8FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, double *pDblOut);\nHRESULT WINAPI VarR8FromDisp16(SEGPTR pdispIn, LCID lcid, double *pDblOut);\nHRESULT WINAPI VarR8FromBool16(VARIANT_BOOL boolIn, double *pDblOut);\nHRESULT WINAPI VarR8FromI116(signed char cIn, double *pDblOut);\nHRESULT WINAPI VarR8FromUI216(USHORT usIn, double *pDblOut);\nHRESULT WINAPI VarR8FromUI416(ULONG ulIn, double *pDblOut);\nHRESULT WINAPI VarR8FromDec16(const DECIMAL* pDecIn, double *pDblOut);\nHRESULT WINAPI VarR8FromI816(LONG64 llIn, double *pDblOut);\nHRESULT WINAPI VarR8FromUI816(ULONG64 ullIn, double *pDblOut);\nHRESULT WINAPI VarR8Pow16(double dblLeft, double dblPow, double *pDblOut);\nHRESULT WINAPI VarR8Round16(double dblIn, int nDig, double *pDblOut);\nHRESULT WINAPI VarCyFromUI116(BYTE bIn, CY* pCyOut);\nHRESULT WINAPI VarCyFromI216(SHORT sIn, CY* pCyOut);\nHRESULT WINAPI VarCyFromI416(LONG lIn, CY* pCyOut);\nHRESULT WINAPI VarCyFromR416(FLOAT fltIn, CY* pCyOut);\nHRESULT WINAPI VarCyFromR816(double dblIn, CY* pCyOut);\nHRESULT WINAPI VarCyFromDate16(DATE dateIn, CY* pCyOut);\nHRESULT WINAPI VarCyFromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, CY* pCyOut);\nHRESULT WINAPI VarCyFromDisp16(SEGPTR pdispIn, LCID lcid, CY* pCyOut);\nHRESULT WINAPI VarCyFromBool16(VARIANT_BOOL boolIn, CY* pCyOut);\nHRESULT WINAPI VarCyFromI116(signed char cIn, CY* pCyOut);\nHRESULT WINAPI VarCyFromUI216(USHORT usIn, CY* pCyOut);\nHRESULT WINAPI VarCyFromUI416(ULONG ulIn, CY* pCyOut);\nHRESULT WINAPI VarCyFromDec16(DECIMAL* pdecIn, CY* pCyOut);\nHRESULT WINAPI VarCyFromI816(LONG64 llIn, CY* pCyOut);\nHRESULT WINAPI VarCyFromUI816(ULONG64 ullIn, CY* pCyOut);\nHRESULT WINAPI VarCyAdd16(CY cyLeft, CY cyRight, CY* pCyOut);\nHRESULT WINAPI VarCyMul16(CY cyLeft, CY cyRight, CY* pCyOut);\nHRESULT WINAPI VarCyMulI416(CY cyLeft, LONG lRight, CY* pCyOut);\nHRESULT WINAPI VarCySub16(CY cyLeft, CY cyRight, CY* pCyOut);\nHRESULT WINAPI VarCyAbs16(CY cyIn, CY* pCyOut);\nHRESULT WINAPI VarCyFix16(CY cyIn, CY* pCyOut);\nHRESULT WINAPI VarCyInt16(CY cyIn, CY* pCyOut);\nHRESULT WINAPI VarCyNeg16(CY cyIn, CY* pCyOut);\nHRESULT WINAPI VarCyRound16(CY cyIn, int cDecimals, CY* pCyOut);\nHRESULT WINAPI VarCyCmp16(CY cyLeft, CY cyRight);\nHRESULT WINAPI VarCyCmpR816(CY cyLeft, double dblRight);\nHRESULT WINAPI VarCyMulI816(CY cyLeft, LONG64 llRight, CY* pCyOut);\nHRESULT WINAPI VarDecFromUI116(BYTE bIn, DECIMAL* pDecOut);\nHRESULT WINAPI VarDecFromI216(SHORT sIn, DECIMAL* pDecOut);\nHRESULT WINAPI VarDecFromI416(LONG lIn, DECIMAL* pDecOut);\nHRESULT WINAPI VarDecFromR416(FLOAT fltIn, DECIMAL* pDecOut);\nHRESULT WINAPI VarDecFromR816(double dblIn, DECIMAL* pDecOut);\nHRESULT WINAPI VarDecFromDate16(DATE dateIn, DECIMAL* pDecOut);\nHRESULT WINAPI VarDecFromCy16(CY cyIn, DECIMAL* pDecOut);\nHRESULT WINAPI VarDecFromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, DECIMAL* pDecOut);\nHRESULT WINAPI VarDecFromDisp16(SEGPTR pdispIn, LCID lcid, DECIMAL* pDecOut);\nHRESULT WINAPI VarDecFromBool16(VARIANT_BOOL bIn, DECIMAL* pDecOut);\nHRESULT WINAPI VarDecFromI116(signed char cIn, DECIMAL* pDecOut);\nHRESULT WINAPI VarDecFromUI216(USHORT usIn, DECIMAL* pDecOut);\nHRESULT WINAPI VarDecFromUI416(ULONG ulIn, DECIMAL* pDecOut);\nHRESULT WINAPI VarDecFromI816(LONG64 llIn, DECIMAL* pDecOut);\nHRESULT WINAPI VarDecFromUI816(ULONG64 ullIn, DECIMAL* pDecOut);\nHRESULT WINAPI VarDecAdd16(const DECIMAL* pDecLeft, const DECIMAL* pDecRight, DECIMAL* pDecOut);\nHRESULT WINAPI VarDecDiv16(const DECIMAL* pDecLeft, const DECIMAL* pDecRight, DECIMAL* pDecOut);\nHRESULT WINAPI VarDecMul16(const DECIMAL* pDecLeft, const DECIMAL* pDecRight, DECIMAL* pDecOut);\nHRESULT WINAPI VarDecSub16(const DECIMAL* pDecLeft, const DECIMAL* pDecRight, DECIMAL* pDecOut);\nHRESULT WINAPI VarDecAbs16(const DECIMAL* pDecIn, DECIMAL* pDecOut);\nHRESULT WINAPI VarDecFix16(const DECIMAL* pDecIn, DECIMAL* pDecOut);\nHRESULT WINAPI VarDecInt16(const DECIMAL* pDecIn, DECIMAL* pDecOut);\nHRESULT WINAPI VarDecNeg16(const DECIMAL* pDecIn, DECIMAL* pDecOut);\nHRESULT WINAPI VarDecRound16(const DECIMAL* pDecIn, int cDecimals, DECIMAL* pDecOut);\nHRESULT WINAPI VarDecCmp16(const DECIMAL* pDecLeft, const DECIMAL* pDecRight);\nHRESULT WINAPI VarDecCmpR816(const DECIMAL* pDecLeft, double dblRight);\nHRESULT WINAPI VarBoolFromUI116(BYTE bIn, VARIANT_BOOL *pBoolOut);\nHRESULT WINAPI VarBoolFromI216(SHORT sIn, VARIANT_BOOL *pBoolOut);\nHRESULT WINAPI VarBoolFromI416(LONG lIn, VARIANT_BOOL *pBoolOut);\nHRESULT WINAPI VarBoolFromR416(FLOAT fltIn, VARIANT_BOOL *pBoolOut);\nHRESULT WINAPI VarBoolFromR816(double dblIn, VARIANT_BOOL *pBoolOut);\nHRESULT WINAPI VarBoolFromDate16(DATE dateIn, VARIANT_BOOL *pBoolOut);\nHRESULT WINAPI VarBoolFromCy16(CY cyIn, VARIANT_BOOL *pBoolOut);\nHRESULT WINAPI VarBoolFromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, VARIANT_BOOL *pBoolOut);\nHRESULT WINAPI VarBoolFromDisp16(SEGPTR pdispIn, LCID lcid, VARIANT_BOOL *pBoolOut);\nHRESULT WINAPI VarBoolFromI116(signed char cIn, VARIANT_BOOL *pBoolOut);\nHRESULT WINAPI VarBoolFromUI216(USHORT usIn, VARIANT_BOOL *pBoolOut);\nHRESULT WINAPI VarBoolFromUI416(ULONG ulIn, VARIANT_BOOL *pBoolOut);\nHRESULT WINAPI VarBoolFromDec16(DECIMAL* pDecIn, VARIANT_BOOL *pBoolOut);\nHRESULT WINAPI VarBoolFromI816(LONG64 llIn, VARIANT_BOOL *pBoolOut);\nHRESULT WINAPI VarBoolFromUI816(ULONG64 ullIn, VARIANT_BOOL *pBoolOut);\nHRESULT WINAPI VarBstrFromUI116(BYTE bIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut);\nHRESULT WINAPI VarBstrFromI216(short sIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut);\nHRESULT WINAPI VarBstrFromI416(LONG lIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut);\nHRESULT WINAPI VarBstrFromR416(FLOAT fltIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut);\nHRESULT WINAPI VarBstrFromR816(double dblIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut);\nHRESULT WINAPI VarBstrFromCy16(CY cyIn, LCID lcid, ULONG dwFlags, SEGBSTR16 *pbstrOut);\nHRESULT WINAPI VarBstrFromDate16(DATE dateIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut);\nHRESULT WINAPI VarBstrFromBool16(VARIANT_BOOL boolIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut);\nHRESULT WINAPI VarBstrFromI116(signed char cIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut);\nHRESULT WINAPI VarBstrFromUI216(USHORT usIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut);\nHRESULT WINAPI VarBstrFromUI416(ULONG ulIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut);\nHRESULT WINAPI VarBstrFromDec16(DECIMAL* pDecIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut);\nHRESULT WINAPI VarBstrFromI816(LONG64 llIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut);\nHRESULT WINAPI VarBstrFromUI816(ULONG64 ullIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut);\nHRESULT WINAPI VarBstrFromDisp16(SEGPTR pdispIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut);\nHRESULT WINAPI VarBstrCat16(SEGBSTR16 pbstrLeft, SEGBSTR16 pbstrRight, SEGBSTR16 *pbstrOut);\nHRESULT WINAPI VarBstrCmp16(SEGBSTR16 pbstrLeft, SEGBSTR16 pbstrRight, LCID lcid, DWORD dwFlags);\nHRESULT WINAPI VarDateFromUI116(BYTE bIn, DATE* pdateOut);\nHRESULT WINAPI VarDateFromI216(short sIn, DATE* pdateOut);\nHRESULT WINAPI VarDateFromI416(LONG lIn, DATE* pdateOut);\nHRESULT WINAPI VarDateFromR416(FLOAT fltIn, DATE* pdateOut);\nHRESULT WINAPI VarDateFromR816(double dblIn, DATE* pdateOut);\nHRESULT WINAPI VarDateFromDisp16(SEGPTR pdispIn, LCID lcid, DATE* pdateOut);\nHRESULT WINAPI VarDateFromBool16(VARIANT_BOOL boolIn, DATE* pdateOut);\nHRESULT WINAPI VarDateFromCy16(CY cyIn, DATE* pdateOut);\nHRESULT WINAPI VarDateFromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, DATE* pdateOut);\nHRESULT WINAPI VarDateFromI116(signed char cIn, DATE* pdateOut);\nHRESULT WINAPI VarDateFromUI216(USHORT uiIn, DATE* pdateOut);\nHRESULT WINAPI VarDateFromUI416(ULONG ulIn, DATE* pdateOut);\nHRESULT WINAPI VarDateFromDec16(DECIMAL *pdecIn, DATE* pdateOut);\nHRESULT WINAPI VarDateFromI816(LONG64 llIn, DATE* pdateOut);\nHRESULT WINAPI VarDateFromUI816(ULONG64 ullIn, DATE* pdateOut);\n\n\nstatic inline const char *wine_dbgstr_variant16( const VARIANT16 *v )\n{\n    if (!v)\n        return \"(null)\";\n\n    if (V_VT(v) & VT_BYREF) {\n        if (V_VT(v) == (VT_VARIANT|VT_BYREF))\n            return wine_dbg_sprintf( \"%p {VT_VARIANT|VT_BYREF: %s}\", v, wine_dbgstr_variant16(V_VARIANTREF16(v)) );\n        if (V_VT(v) == (VT_BSTR|VT_BYREF))\n            return wine_dbg_sprintf( \"%p {VT_BSTR|VT_BYREF: %s}\", v, V_BSTRREF(v) ? wine_dbgstr_a(MapSL(*V_BSTRREF16(v))) : \"(none)\" );\n        return wine_dbg_sprintf( \"%p {%s %p}\", v, wine_dbgstr_vt(V_VT(v)), V_BYREF(v) );\n    }\n\n    if (V_ISARRAY(v) || V_ISVECTOR(v))\n        return wine_dbg_sprintf( \"%p {%s %p}\", v, wine_dbgstr_vt(V_VT(v)), V_ARRAY(v) );\n\n    switch(V_VT(v)) {\n    case VT_EMPTY:\n        return wine_dbg_sprintf( \"%p {VT_EMPTY}\", v );\n    case VT_NULL:\n        return wine_dbg_sprintf( \"%p {VT_NULL}\", v );\n    case VT_I2:\n        return wine_dbg_sprintf( \"%p {VT_I2: %d}\", v, V_I2(v) );\n    case VT_I4:\n        return wine_dbg_sprintf( \"%p {VT_I4: %d}\", v, V_I4(v) );\n    case VT_R4:\n        return wine_dbg_sprintf( \"%p {VT_R4: %f}\", v, V_R4(v) );\n    case VT_R8:\n        return wine_dbg_sprintf( \"%p {VT_R8: %lf}\", v, V_R8(v) );\n    case VT_CY:\n        return wine_dbg_sprintf( \"%p {VT_CY: %s}\", v, wine_dbgstr_longlong(V_CY(v).int64) );\n    case VT_DATE:\n        return wine_dbg_sprintf( \"%p {VT_DATE: %lf}\", v, V_DATE(v) );\n    case VT_LPSTR:\n        return wine_dbg_sprintf( \"%p {VT_LPSTR: %s}\", v, wine_dbgstr_a((const char *)BSTR_PTR(V_BSTR(v))) );\n    case VT_LPWSTR:\n        return wine_dbg_sprintf( \"%p {VT_LPWSTR: %s}\", v, wine_dbgstr_w((const char *)BSTR_PTR(V_BSTR(v))) );\n    case VT_BSTR:\n        return wine_dbg_sprintf( \"%p {VT_BSTR: %s}\", v, wine_dbgstr_a((const char *)BSTR_PTR(V_BSTR(v))) );\n    case VT_DISPATCH:\n        return wine_dbg_sprintf( \"%p {VT_DISPATCH: %p}\", v, V_DISPATCH(v) );\n    case VT_ERROR:\n        return wine_dbg_sprintf( \"%p {VT_ERROR: %08x}\", v, V_ERROR(v) );\n    case VT_BOOL:\n        return wine_dbg_sprintf( \"%p {VT_BOOL: %x}\", v, V_BOOL(v) );\n    case VT_UNKNOWN:\n        return wine_dbg_sprintf( \"%p {VT_UNKNOWN: %p}\", v, V_UNKNOWN(v) );\n    case VT_I1:\n        return wine_dbg_sprintf( \"%p {VT_I1: %d}\", v, V_I1(v) );\n    case VT_UI1:\n        return wine_dbg_sprintf( \"%p {VT_UI1: %u}\", v, V_UI1(v) );\n    case VT_UI2:\n        return wine_dbg_sprintf( \"%p {VT_UI2: %d}\", v, V_UI2(v) );\n    case VT_UI4:\n        return wine_dbg_sprintf( \"%p {VT_UI4: %d}\", v, V_UI4(v) );\n    case VT_I8:\n        return wine_dbg_sprintf( \"%p {VT_I8: %s}\", v, wine_dbgstr_longlong(V_I8(v)) );\n    case VT_UI8:\n        return wine_dbg_sprintf( \"%p {VT_UI8: %s}\", v, wine_dbgstr_longlong(V_UI8(v)) );\n    case VT_INT:\n        return wine_dbg_sprintf( \"%p {VT_INT: %d}\", v, V_INT(v) );\n    case VT_UINT:\n        return wine_dbg_sprintf( \"%p {VT_UINT: %u}\", v, V_UINT(v) );\n    case VT_VOID:\n        return wine_dbg_sprintf( \"%p {VT_VOID}\", v );\n#ifdef AVAIL_32BIT_VAR\n    case VT_RECORD:\n        return wine_dbg_sprintf( \"%p {VT_RECORD: %p %p}\", v, V_RECORD(v), V_RECORDINFO(v) );\n#endif\n    default:\n        return wine_dbg_sprintf( \"%p {vt %s}\", v, wine_dbgstr_vt(V_VT(v)) );\n    }\n}\nstatic inline const char *debugstr_variant16(const VARIANT16 *v) { return wine_dbgstr_variant16(v); }\n\ntypedef struct tagDISPPARAMS16\n{\n    /* VARIANTARG* */SEGPTR rgvarg;\n    /* DISPID* */SEGPTR rgdispidNamedArgs;\n    UINT16 cArgs;\n    UINT16 cNamedArgs;\n} \tDISPPARAMS16;\nSEGPTR WINAPI SafeArrayCreate16(VARTYPE vt, UINT16 cDims, SAFEARRAYBOUND16 *rgsabound);\n\n#ifdef AVAIL_32BIT_VAR\n#endif\n#endif /* !defined(__WINE_OLEAUT32_OLE2DISP_H) */\n"
  },
  {
    "path": "ole2disp/ole2disp.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n    <RootNamespace>ole2disp</RootNamespace>\n    <ProjectGuid>{2D769A3B-881A-4307-B6C9-02EBC61211A4}</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <Import Project=\"..\\PropertySheet.props\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>DECLSPEC_HIDDEN=;ARRAY_SIZE=ARRAYSIZE;WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)compobj.lib;$(OutDir)ole2.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\nole2disp.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>DECLSPEC_HIDDEN=;ARRAY_SIZE=ARRAYSIZE;WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\nole2disp.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)compobj.lib;$(OutDir)ole2.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"ole2disp.c\" />\n    <ClCompile Include=\"var\\varformat.c\" />\n    <ClCompile Include=\"var\\variant.c\" />\n    <ClCompile Include=\"var\\vartype.c\" />\n    <ClCompile Include=\"wine_typelib.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"ole2disp.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"ole2disp.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Platform)'=='Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" OLE2DISP &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Platform)'=='Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"ole2disp.def\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"var\\resource.h\" />\n    <ClInclude Include=\"var\\variant.h\" />\n    <ClInclude Include=\"wine_typelib.h\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "ole2disp/var/resource.h",
    "content": "/*\n * Resource defines for oleaut32\n *\n * Copyright 2003 Jon Griffiths\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef WINE_OLEAUT32_RESOURCE_H\n#define WINE_OLEAUT32_RESOURCE_H\n\n#include <windef.h>\n\n/* Localised boolean text */\n#define IDS_TRUE  100\n#define IDS_FALSE 101\n#define IDS_YES   102\n#define IDS_NO    103\n#define IDS_ON    104\n#define IDS_OFF   105\n/* Alternative month names. Note in XP these are localised only for Russian,\n * Polish and Arabic.\n */\n#define IDS_MTH_1  106\n#define IDS_MTH_2  107\n#define IDS_MTH_3  108\n#define IDS_MTH_4  109\n#define IDS_MTH_5  110\n#define IDS_MTH_6  111\n#define IDS_MTH_7  112\n#define IDS_MTH_8  113\n#define IDS_MTH_9  114\n#define IDS_MTH_10 115\n#define IDS_MTH_11 116\n#define IDS_MTH_12 117\n\n#endif /* WINE_OLEAUT32_RESOURCE_H */\n"
  },
  {
    "path": "ole2disp/var/varformat.c",
    "content": "#if 0\n/*\n * Variant formatting functions\n *\n * Copyright 2008 Damjan Jovanovic\n * Copyright 2003 Jon Griffiths\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n * NOTES\n *  Since the formatting functions aren't properly documented, I used the\n *  Visual Basic documentation as a guide to implementing these functions. This\n *  means that some named or user-defined formats may work slightly differently.\n *  Please submit a test case if you find a difference.\n */\n\n#include \"config.h\"\n\n#include <string.h>\n#include <stdlib.h>\n#include <stdarg.h>\n#include <stdio.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/unicode.h\"\n#include \"winerror.h\"\n#include \"variant.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(variant);\n\n/* Make sure internal conversions to strings use the '.','+'/'-' and ','\n * format chars from the US locale. This enables us to parse the created\n * strings to determine the number of decimal places, exponent, etc.\n */\n#define LCID_US MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT)\n\nstatic const WCHAR szPercent_d[] = { '%','d','\\0' };\nstatic const WCHAR szPercentZeroTwo_d[] = { '%','0','2','d','\\0' };\nstatic const WCHAR szPercentZeroStar_d[] = { '%','0','*','d','\\0' };\n\n/******************************************************************************\n * Variant-Formats {OLEAUT32}\n *\n * NOTES\n *  When formatting a variant a variety of format strings may be used to generate\n *  different kinds of formatted output. A format string consists of either a named\n *  format, or a user-defined format.\n *\n *  The following named formats are defined:\n *| Name           Description\n *| ----           -----------\n *| General Date   Display Date, and time for non-integer values\n *| Short Date     Short date format as defined by locale settings\n *| Medium Date    Medium date format as defined by locale settings\n *| Long Date      Long date format as defined by locale settings\n *| Short Time     Short Time format as defined by locale settings\n *| Medium Time    Medium time format as defined by locale settings\n *| Long Time      Long time format as defined by locale settings\n *| True/False     Localised text of \"True\" or \"False\"\n *| Yes/No         Localised text of \"Yes\" or \"No\"\n *| On/Off         Localised text of \"On\" or \"Off\"\n *| General Number No thousands separator. No decimal points for integers\n *| Currency       General currency format using localised characters\n *| Fixed          At least one whole and two fractional digits\n *| Standard       Same as 'Fixed', but including decimal separators\n *| Percent        Multiply by 100 and display a trailing '%' character\n *| Scientific     Display with exponent\n *\n *  User-defined formats consist of a combination of tokens and literal\n *  characters. Literal characters are copied unmodified to the formatted\n *  output at the position they occupy in the format string. Any character\n *  that is not recognised as a token is treated as a literal. A literal can\n *  also be specified by preceding it with a backslash character\n *  (e.g. \"\\L\\i\\t\\e\\r\\a\\l\") or enclosing it in double quotes.\n *\n *  A user-defined format can have up to 4 sections, depending on the type of\n *  format. The following table lists sections and their meaning:\n *| Format Type  Sections Meaning\n *| -----------  -------- -------\n *| Number       1        Use the same format for all numbers\n *| Number       2        Use format 1 for positive and 2 for negative numbers\n *| Number       3        Use format 1 for positive, 2 for zero, and 3\n *|                       for negative numbers.\n *| Number       4        Use format 1 for positive, 2 for zero, 3 for\n *|                       negative, and 4 for null numbers.\n *| String       1        Use the same format for all strings\n *| String       2        Use format 2 for null and empty strings, otherwise\n *|                       use format 1.\n *| Date         1        Use the same format for all dates\n *\n *  The formatting tokens fall into several categories depending on the type\n *  of formatted output. For more information on each type, see\n *  VarFormat-Dates(), VarFormat-Strings() and VarFormat-Numbers().\n *\n *  SEE ALSO\n *  VarTokenizeFormatString(), VarFormatFromTokens(), VarFormat(),\n *  VarFormatDateTime(), VarFormatNumber(), VarFormatCurrency().\n */\n\n/******************************************************************************\n * VarFormat-Strings {OLEAUT32}\n *\n * NOTES\n *  When formatting a variant as a string, it is first converted to a VT_BSTR.\n *  The user-format string defines which characters are copied into which\n *  positions in the output string. Literals may be inserted in the format\n *  string. When creating the formatted string, excess characters in the string\n *  (those not consumed by a token) are appended to the end of the output. If\n *  there are more tokens than characters in the string to format, spaces will\n *  be inserted at the start of the string if the '@' token was used.\n *\n *  By default strings are converted to lowercase, or uppercase if the '>' token\n *  is encountered. This applies to the whole string: it is not possible to\n *  generate a mixed-case output string.\n *\n *  In user-defined string formats, the following tokens are recognised:\n *| Token  Description\n *| -----  -----------\n *| '@'    Copy a char from the source, or a space if no chars are left.\n *| '&'    Copy a char from the source, or write nothing if no chars are left.\n *| '<'    Output the whole string as lower-case (the default).\n *| '>'    Output the whole string as upper-case.\n *| '!'    MSDN indicates that this character should cause right-to-left\n *|        copying, however tests show that it is tokenised but not processed.\n */\n\n/*\n * Common format definitions\n */\n\n /* Format types */\n#define FMT_TYPE_UNKNOWN 0x0\n#define FMT_TYPE_GENERAL 0x1\n#define FMT_TYPE_NUMBER  0x2\n#define FMT_TYPE_DATE    0x3\n#define FMT_TYPE_STRING  0x4\n\n#define FMT_TO_STRING    0x0 /* If header->size == this, act like VB's Str() fn */\n\ntypedef struct tagFMT_SHORT_HEADER\n{\n  BYTE   size;      /* Size of tokenised block (including header), or FMT_TO_STRING */\n  BYTE   type;      /* Allowable types (FMT_TYPE_*) */\n  BYTE   offset[1]; /* Offset of the first (and only) format section */\n} FMT_SHORT_HEADER;\n\ntypedef struct tagFMT_HEADER\n{\n  BYTE   size;      /* Total size of the whole tokenised block (including header) */\n  BYTE   type;      /* Allowable types (FMT_TYPE_*) */\n  BYTE   starts[4]; /* Offset of each of the 4 format sections, or 0 if none */\n} FMT_HEADER;\n\n#define FmtGetPositive(x)  (x->starts[0])\n#define FmtGetNegative(x)  (x->starts[1] ? x->starts[1] : x->starts[0])\n#define FmtGetZero(x)      (x->starts[2] ? x->starts[2] : x->starts[0])\n#define FmtGetNull(x)      (x->starts[3] ? x->starts[3] : x->starts[0])\n\n/*\n * String formats\n */\n\n#define FMT_FLAG_LT  0x1 /* Has '<' (lower case) */\n#define FMT_FLAG_GT  0x2 /* Has '>' (upper case) */\n#define FMT_FLAG_RTL 0x4 /* Has '!' (Copy right to left) */\n\ntypedef struct tagFMT_STRING_HEADER\n{\n  BYTE   flags;      /* LT, GT, RTL */\n  BYTE   unknown1;\n  BYTE   unknown2;\n  BYTE   copy_chars; /* Number of chars to be copied */\n  BYTE   unknown3;\n} FMT_STRING_HEADER;\n\n/*\n * Number formats\n */\n\n#define FMT_FLAG_PERCENT   0x1  /* Has '%' (Percentage) */\n#define FMT_FLAG_EXPONENT  0x2  /* Has 'e' (Exponent/Scientific notation) */\n#define FMT_FLAG_THOUSANDS 0x4  /* Has ',' (Standard use of the thousands separator) */\n#define FMT_FLAG_BOOL      0x20 /* Boolean format */\n\ntypedef struct tagFMT_NUMBER_HEADER\n{\n  BYTE   flags;      /* PERCENT, EXPONENT, THOUSANDS, BOOL */\n  BYTE   multiplier; /* Multiplier, 100 for percentages */\n  BYTE   divisor;    /* Divisor, 1000 if '%%' was used */\n  BYTE   whole;      /* Number of digits before the decimal point */\n  BYTE   fractional; /* Number of digits after the decimal point */\n} FMT_NUMBER_HEADER;\n\n/*\n * Date Formats\n */\ntypedef struct tagFMT_DATE_HEADER\n{\n  BYTE   flags;\n  BYTE   unknown1;\n  BYTE   unknown2;\n  BYTE   unknown3;\n  BYTE   unknown4;\n} FMT_DATE_HEADER;\n\n/*\n * Format token values\n */\n#define FMT_GEN_COPY        0x00 /* \\n, \"lit\" => 0,pos,len: Copy len chars from input+pos */\n#define FMT_GEN_INLINE      0x01 /*      => 1,len,[chars]: Copy len chars from token stream */\n#define FMT_GEN_END         0x02 /* \\0,; => 2: End of the tokenised format */\n#define FMT_DATE_TIME_SEP   0x03 /* Time separator char */\n#define FMT_DATE_DATE_SEP   0x04 /* Date separator char */\n#define FMT_DATE_GENERAL    0x05 /* General format date */\n#define FMT_DATE_QUARTER    0x06 /* Quarter of the year from 1-4 */\n#define FMT_DATE_TIME_SYS   0x07 /* System long time format */\n#define FMT_DATE_DAY        0x08 /* Day with no leading 0 */\n#define FMT_DATE_DAY_0      0x09 /* Day with leading 0 */\n#define FMT_DATE_DAY_SHORT  0x0A /* Short day name */\n#define FMT_DATE_DAY_LONG   0x0B /* Long day name */\n#define FMT_DATE_SHORT      0x0C /* Short date format */\n#define FMT_DATE_LONG       0x0D /* Long date format */\n#define FMT_DATE_MEDIUM     0x0E /* Medium date format */\n#define FMT_DATE_DAY_WEEK   0x0F /* First day of the week */\n#define FMT_DATE_WEEK_YEAR  0x10 /* First week of the year */\n#define FMT_DATE_MON        0x11 /* Month with no leading 0 */\n#define FMT_DATE_MON_0      0x12 /* Month with leading 0 */\n#define FMT_DATE_MON_SHORT  0x13 /* Short month name */\n#define FMT_DATE_MON_LONG   0x14 /* Long month name */\n#define FMT_DATE_YEAR_DOY   0x15 /* Day of the year with no leading 0 */\n#define FMT_DATE_YEAR_0     0x16 /* 2 digit year with leading 0 */\n/* NOTE: token 0x17 is not defined, 'yyy' is not valid */\n#define FMT_DATE_YEAR_LONG  0x18 /* 4 digit year */\n#define FMT_DATE_MIN        0x1A /* Minutes with no leading 0 */\n#define FMT_DATE_MIN_0      0x1B /* Minutes with leading 0 */\n#define FMT_DATE_SEC        0x1C /* Seconds with no leading 0 */\n#define FMT_DATE_SEC_0      0x1D /* Seconds with leading 0 */\n#define FMT_DATE_HOUR       0x1E /* Hours with no leading 0 */\n#define FMT_DATE_HOUR_0     0x1F /* Hours with leading 0 */\n#define FMT_DATE_HOUR_12    0x20 /* Hours with no leading 0, 12 hour clock */\n#define FMT_DATE_HOUR_12_0  0x21 /* Hours with leading 0, 12 hour clock */\n#define FMT_DATE_TIME_UNK2  0x23 /* same as FMT_DATE_HOUR_0, for \"short time\" format */\n/* FIXME: probably missing some here */\n#define FMT_DATE_AMPM_SYS1  0x2E /* AM/PM as defined by system settings */\n#define FMT_DATE_AMPM_UPPER 0x2F /* Upper-case AM or PM */\n#define FMT_DATE_A_UPPER    0x30 /* Upper-case A or P */\n#define FMT_DATE_AMPM_SYS2  0x31 /* AM/PM as defined by system settings */\n#define FMT_DATE_AMPM_LOWER 0x32 /* Lower-case AM or PM */\n#define FMT_DATE_A_LOWER    0x33 /* Lower-case A or P */\n#define FMT_NUM_COPY_ZERO   0x34 /* Copy 1 digit or 0 if no digit */\n#define FMT_NUM_COPY_SKIP   0x35 /* Copy 1 digit or skip if no digit */\n#define FMT_NUM_DECIMAL     0x36 /* Decimal separator */\n#define FMT_NUM_EXP_POS_U   0x37 /* Scientific notation, uppercase, + sign */\n#define FMT_NUM_EXP_NEG_U   0x38 /* Scientific notation, uppercase, - sign */\n#define FMT_NUM_EXP_POS_L   0x39 /* Scientific notation, lowercase, + sign */\n#define FMT_NUM_EXP_NEG_L   0x3A /* Scientific notation, lowercase, - sign */\n#define FMT_NUM_CURRENCY    0x3B /* Currency symbol */\n#define FMT_NUM_TRUE_FALSE  0x3D /* Convert to \"True\" or \"False\" */\n#define FMT_NUM_YES_NO      0x3E /* Convert to \"Yes\" or \"No\" */\n#define FMT_NUM_ON_OFF      0x3F /* Convert to \"On\" or \"Off\"  */\n#define FMT_STR_COPY_SPACE  0x40 /* Copy len chars with space if no char */\n#define FMT_STR_COPY_SKIP   0x41 /* Copy len chars or skip if no char */\n\n/* Named Formats and their tokenised values */\nstatic const WCHAR szGeneralDate[] = { 'G','e','n','e','r','a','l',' ','D','a','t','e','\\0' };\nstatic const BYTE fmtGeneralDate[0x0a] =\n{\n  0x0a,FMT_TYPE_DATE,sizeof(FMT_SHORT_HEADER),\n  0x0,0x0,0x0,0x0,0x0,\n  FMT_DATE_GENERAL,FMT_GEN_END\n};\n\nstatic const WCHAR szShortDate[] = { 'S','h','o','r','t',' ','D','a','t','e','\\0' };\nstatic const BYTE fmtShortDate[0x0a] =\n{\n  0x0a,FMT_TYPE_DATE,sizeof(FMT_SHORT_HEADER),\n  0x0,0x0,0x0,0x0,0x0,\n  FMT_DATE_SHORT,FMT_GEN_END\n};\n\nstatic const WCHAR szMediumDate[] = { 'M','e','d','i','u','m',' ','D','a','t','e','\\0' };\nstatic const BYTE fmtMediumDate[0x0a] =\n{\n  0x0a,FMT_TYPE_DATE,sizeof(FMT_SHORT_HEADER),\n  0x0,0x0,0x0,0x0,0x0,\n  FMT_DATE_MEDIUM,FMT_GEN_END\n};\n\nstatic const WCHAR szLongDate[] = { 'L','o','n','g',' ','D','a','t','e','\\0' };\nstatic const BYTE fmtLongDate[0x0a] =\n{\n  0x0a,FMT_TYPE_DATE,sizeof(FMT_SHORT_HEADER),\n  0x0,0x0,0x0,0x0,0x0,\n  FMT_DATE_LONG,FMT_GEN_END\n};\n\nstatic const WCHAR szShortTime[] = { 'S','h','o','r','t',' ','T','i','m','e','\\0' };\nstatic const BYTE fmtShortTime[0x0c] =\n{\n  0x0c,FMT_TYPE_DATE,sizeof(FMT_SHORT_HEADER),\n  0x0,0x0,0x0,0x0,0x0,\n  FMT_DATE_TIME_UNK2,FMT_DATE_TIME_SEP,FMT_DATE_MIN_0,FMT_GEN_END\n};\n\nstatic const WCHAR szMediumTime[] = { 'M','e','d','i','u','m',' ','T','i','m','e','\\0' };\nstatic const BYTE fmtMediumTime[0x11] =\n{\n  0x11,FMT_TYPE_DATE,sizeof(FMT_SHORT_HEADER),\n  0x0,0x0,0x0,0x0,0x0,\n  FMT_DATE_HOUR_12_0,FMT_DATE_TIME_SEP,FMT_DATE_MIN_0,\n  FMT_GEN_INLINE,0x01,' ','\\0',FMT_DATE_AMPM_SYS1,FMT_GEN_END\n};\n\nstatic const WCHAR szLongTime[] = { 'L','o','n','g',' ','T','i','m','e','\\0' };\nstatic const BYTE fmtLongTime[0x0d] =\n{\n  0x0a,FMT_TYPE_DATE,sizeof(FMT_SHORT_HEADER),\n  0x0,0x0,0x0,0x0,0x0,\n  FMT_DATE_TIME_SYS,FMT_GEN_END\n};\n\nstatic const WCHAR szTrueFalse[] = { 'T','r','u','e','/','F','a','l','s','e','\\0' };\nstatic const BYTE fmtTrueFalse[0x0d] =\n{\n  0x0d,FMT_TYPE_NUMBER,sizeof(FMT_HEADER),0x0,0x0,0x0,\n  FMT_FLAG_BOOL,0x0,0x0,0x0,0x0,\n  FMT_NUM_TRUE_FALSE,FMT_GEN_END\n};\n\nstatic const WCHAR szYesNo[] = { 'Y','e','s','/','N','o','\\0' };\nstatic const BYTE fmtYesNo[0x0d] =\n{\n  0x0d,FMT_TYPE_NUMBER,sizeof(FMT_HEADER),0x0,0x0,0x0,\n  FMT_FLAG_BOOL,0x0,0x0,0x0,0x0,\n  FMT_NUM_YES_NO,FMT_GEN_END\n};\n\nstatic const WCHAR szOnOff[] = { 'O','n','/','O','f','f','\\0' };\nstatic const BYTE fmtOnOff[0x0d] =\n{\n  0x0d,FMT_TYPE_NUMBER,sizeof(FMT_HEADER),0x0,0x0,0x0,\n  FMT_FLAG_BOOL,0x0,0x0,0x0,0x0,\n  FMT_NUM_ON_OFF,FMT_GEN_END\n};\n\nstatic const WCHAR szGeneralNumber[] = { 'G','e','n','e','r','a','l',' ','N','u','m','b','e','r','\\0' };\nstatic const BYTE fmtGeneralNumber[sizeof(FMT_HEADER)] =\n{\n  sizeof(FMT_HEADER),FMT_TYPE_GENERAL,sizeof(FMT_HEADER),0x0,0x0,0x0\n};\n\nstatic const WCHAR szCurrency[] = { 'C','u','r','r','e','n','c','y','\\0' };\nstatic const BYTE fmtCurrency[0x26] =\n{\n  0x26,FMT_TYPE_NUMBER,sizeof(FMT_HEADER),0x12,0x0,0x0,\n  /* Positive numbers */\n  FMT_FLAG_THOUSANDS,0xcc,0x0,0x1,0x2,\n  FMT_NUM_CURRENCY,FMT_NUM_COPY_ZERO,0x1,FMT_NUM_DECIMAL,FMT_NUM_COPY_ZERO,0x2,\n  FMT_GEN_END,\n  /* Negative numbers */\n  FMT_FLAG_THOUSANDS,0xcc,0x0,0x1,0x2,\n  FMT_GEN_INLINE,0x1,'(','\\0',FMT_NUM_CURRENCY,FMT_NUM_COPY_ZERO,0x1,\n  FMT_NUM_DECIMAL,FMT_NUM_COPY_ZERO,0x2,FMT_GEN_INLINE,0x1,')','\\0',\n  FMT_GEN_END\n};\n\nstatic const WCHAR szFixed[] = { 'F','i','x','e','d','\\0' };\nstatic const BYTE fmtFixed[0x11] =\n{\n  0x11,FMT_TYPE_NUMBER,sizeof(FMT_HEADER),0x0,0x0,0x0,\n  0x0,0x0,0x0,0x1,0x2,\n  FMT_NUM_COPY_ZERO,0x1,FMT_NUM_DECIMAL,FMT_NUM_COPY_ZERO,0x2,FMT_GEN_END\n};\n\nstatic const WCHAR szStandard[] = { 'S','t','a','n','d','a','r','d','\\0' };\nstatic const BYTE fmtStandard[0x11] =\n{\n  0x11,FMT_TYPE_NUMBER,sizeof(FMT_HEADER),0x0,0x0,0x0,\n  FMT_FLAG_THOUSANDS,0x0,0x0,0x1,0x2,\n  FMT_NUM_COPY_ZERO,0x1,FMT_NUM_DECIMAL,FMT_NUM_COPY_ZERO,0x2,FMT_GEN_END\n};\n\nstatic const WCHAR szPercent[] = { 'P','e','r','c','e','n','t','\\0' };\nstatic const BYTE fmtPercent[0x15] =\n{\n  0x15,FMT_TYPE_NUMBER,sizeof(FMT_HEADER),0x0,0x0,0x0,\n  FMT_FLAG_PERCENT,0x1,0x0,0x1,0x2,\n  FMT_NUM_COPY_ZERO,0x1,FMT_NUM_DECIMAL,FMT_NUM_COPY_ZERO,0x2,\n  FMT_GEN_INLINE,0x1,'%','\\0',FMT_GEN_END\n};\n\nstatic const WCHAR szScientific[] = { 'S','c','i','e','n','t','i','f','i','c','\\0' };\nstatic const BYTE fmtScientific[0x13] =\n{\n  0x13,FMT_TYPE_NUMBER,sizeof(FMT_HEADER),0x0,0x0,0x0,\n  FMT_FLAG_EXPONENT,0x0,0x0,0x1,0x2,\n  FMT_NUM_COPY_ZERO,0x1,FMT_NUM_DECIMAL,FMT_NUM_COPY_ZERO,0x2,FMT_NUM_EXP_POS_U,0x2,FMT_GEN_END\n};\n\ntypedef struct tagNAMED_FORMAT\n{\n  LPCWSTR name;\n  const BYTE* format;\n} NAMED_FORMAT;\n\n/* Format name to tokenised format. Must be kept sorted by name */\nstatic const NAMED_FORMAT VARIANT_NamedFormats[] =\n{\n  { szCurrency, fmtCurrency },\n  { szFixed, fmtFixed },\n  { szGeneralDate, fmtGeneralDate },\n  { szGeneralNumber, fmtGeneralNumber },\n  { szLongDate, fmtLongDate },\n  { szLongTime, fmtLongTime },\n  { szMediumDate, fmtMediumDate },\n  { szMediumTime, fmtMediumTime },\n  { szOnOff, fmtOnOff },\n  { szPercent, fmtPercent },\n  { szScientific, fmtScientific },\n  { szShortDate, fmtShortDate },\n  { szShortTime, fmtShortTime },\n  { szStandard, fmtStandard },\n  { szTrueFalse, fmtTrueFalse },\n  { szYesNo, fmtYesNo }\n};\ntypedef const NAMED_FORMAT *LPCNAMED_FORMAT;\n\nstatic int FormatCompareFn(const void *l, const void *r)\n{\n  return strcmpiW(((LPCNAMED_FORMAT)l)->name, ((LPCNAMED_FORMAT)r)->name);\n}\n\nstatic inline const BYTE *VARIANT_GetNamedFormat(LPCWSTR lpszFormat)\n{\n  NAMED_FORMAT key;\n  LPCNAMED_FORMAT fmt;\n\n  key.name = lpszFormat;\n  fmt = bsearch(&key, VARIANT_NamedFormats, ARRAY_SIZE(VARIANT_NamedFormats),\n                                 sizeof(NAMED_FORMAT), FormatCompareFn);\n  return fmt ? fmt->format : NULL;\n}\n\n/* Return an error if the token for the value will not fit in the destination */\n#define NEED_SPACE(x) if (cbTok < (int)(x)) return TYPE_E_BUFFERTOOSMALL; cbTok -= (x)\n\n/* Non-zero if the format is unknown or a given type */\n#define COULD_BE(typ) ((!fmt_number && header->type==FMT_TYPE_UNKNOWN)||header->type==typ)\n\n/* State during tokenising */\n#define FMT_STATE_OPEN_COPY     0x1 /* Last token written was a copy */\n#define FMT_STATE_WROTE_DECIMAL 0x2 /* Already wrote a decimal separator */\n#define FMT_STATE_SEEN_HOURS    0x4 /* See the hh specifier */\n#define FMT_STATE_WROTE_MINUTES 0x8 /* Wrote minutes */\n\n/**********************************************************************\n *              VarTokenizeFormatString [OLEAUT32.140]\n *\n * Convert a format string into tokenised form.\n *\n * PARAMS\n *  lpszFormat [I] Format string to tokenise\n *  rgbTok     [O] Destination for tokenised format\n *  cbTok      [I] Size of rgbTok in bytes\n *  nFirstDay  [I] First day of the week (1-7, or 0 for current system default)\n *  nFirstWeek [I] How to treat the first week (see notes)\n *  lcid       [I] Locale Id of the format string\n *  pcbActual  [O] If non-NULL, filled with the first token generated\n *\n * RETURNS\n *  Success: S_OK. rgbTok contains the tokenised format.\n *  Failure: E_INVALIDARG, if any argument is invalid.\n *           TYPE_E_BUFFERTOOSMALL, if rgbTok is not large enough.\n *\n * NOTES\n * Valid values for the nFirstWeek parameter are:\n *| Value  Meaning\n *| -----  -------\n *|   0    Use the current system default\n *|   1    The first week is that containing Jan 1\n *|   2    Four or more days of the first week are in the current year\n *|   3    The first week is 7 days long\n * See Variant-Formats(), VarFormatFromTokens().\n */\nHRESULT WINAPI VarTokenizeFormatString(LPOLESTR lpszFormat, LPBYTE rgbTok,\n                                       int cbTok, int nFirstDay, int nFirstWeek,\n                                       LCID lcid, int *pcbActual)\n{\n  /* Note: none of these strings should be NUL terminated */\n  static const WCHAR szTTTTT[] = { 't','t','t','t','t' };\n  static const WCHAR szAMPM[] = { 'A','M','P','M' };\n  static const WCHAR szampm[] = { 'a','m','p','m' };\n  static const WCHAR szAMSlashPM[] = { 'A','M','/','P','M' };\n  static const WCHAR szamSlashpm[] = { 'a','m','/','p','m' };\n  const BYTE *namedFmt;\n  FMT_HEADER *header = (FMT_HEADER*)rgbTok;\n  FMT_STRING_HEADER *str_header = (FMT_STRING_HEADER*)(rgbTok + sizeof(FMT_HEADER));\n  FMT_NUMBER_HEADER *num_header = (FMT_NUMBER_HEADER*)str_header;\n  BYTE* pOut = rgbTok + sizeof(FMT_HEADER) + sizeof(FMT_STRING_HEADER);\n  BYTE* pLastHours = NULL;\n  BYTE fmt_number = 0;\n  DWORD fmt_state = 0;\n  LPCWSTR pFormat = lpszFormat;\n\n  TRACE(\"(%s,%p,%d,%d,%d,0x%08x,%p)\\n\", debugstr_w(lpszFormat), rgbTok, cbTok,\n        nFirstDay, nFirstWeek, lcid, pcbActual);\n\n  if (!rgbTok ||\n      nFirstDay < 0 || nFirstDay > 7 || nFirstWeek < 0 || nFirstWeek > 3)\n    return E_INVALIDARG;\n\n  if (!lpszFormat || !*lpszFormat)\n  {\n    /* An empty string means 'general format' */\n    NEED_SPACE(sizeof(BYTE));\n    *rgbTok = FMT_TO_STRING;\n    if (pcbActual)\n      *pcbActual = FMT_TO_STRING;\n    return S_OK;\n  }\n\n  if (cbTok > 255)\n    cbTok = 255; /* Ensure we error instead of wrapping */\n\n  /* Named formats */\n  namedFmt = VARIANT_GetNamedFormat(lpszFormat);\n  if (namedFmt)\n  {\n    NEED_SPACE(namedFmt[0]);\n    memcpy(rgbTok, namedFmt, namedFmt[0]);\n    TRACE(\"Using pre-tokenised named format %s\\n\", debugstr_w(lpszFormat));\n    /* FIXME: pcbActual */\n    return S_OK;\n  }\n\n  /* Insert header */\n  NEED_SPACE(sizeof(FMT_HEADER) + sizeof(FMT_STRING_HEADER));\n  memset(header, 0, sizeof(FMT_HEADER));\n  memset(str_header, 0, sizeof(FMT_STRING_HEADER));\n\n  header->starts[fmt_number] = sizeof(FMT_HEADER);\n\n  while (*pFormat)\n  {\n    /* --------------\n     * General tokens\n     * --------------\n     */\n    if (*pFormat == ';')\n    {\n      while (*pFormat == ';')\n      {\n        TRACE(\";\\n\");\n        if (++fmt_number > 3)\n          return E_INVALIDARG; /* too many formats */\n        pFormat++;\n      }\n      if (*pFormat)\n      {\n        TRACE(\"New header\\n\");\n        NEED_SPACE(sizeof(BYTE) + sizeof(FMT_STRING_HEADER));\n        *pOut++ = FMT_GEN_END;\n\n        header->starts[fmt_number] = pOut - rgbTok;\n        str_header = (FMT_STRING_HEADER*)pOut;\n        num_header = (FMT_NUMBER_HEADER*)pOut;\n        memset(str_header, 0, sizeof(FMT_STRING_HEADER));\n        pOut += sizeof(FMT_STRING_HEADER);\n        fmt_state = 0;\n        pLastHours = NULL;\n      }\n    }\n    else if (*pFormat == '\\\\')\n    {\n      /* Escaped character */\n      if (pFormat[1])\n      {\n        NEED_SPACE(3 * sizeof(BYTE));\n        pFormat++;\n        *pOut++ = FMT_GEN_COPY;\n        *pOut++ = pFormat - lpszFormat;\n        *pOut++ = 0x1;\n        fmt_state |= FMT_STATE_OPEN_COPY;\n        TRACE(\"'\\\\'\\n\");\n      }\n      else\n        fmt_state &= ~FMT_STATE_OPEN_COPY;\n      pFormat++;\n    }\n    else if (*pFormat == '\"')\n    {\n      /* Escaped string\n       * Note: Native encodes \"\" as a copy of length zero. That's just dumb, so\n       * here we avoid encoding anything in this case.\n       */\n      if (!pFormat[1])\n        pFormat++;\n      else if (pFormat[1] == '\"')\n      {\n        pFormat += 2;\n      }\n      else\n      {\n        LPCWSTR start = ++pFormat;\n        while (*pFormat && *pFormat != '\"')\n          pFormat++;\n        NEED_SPACE(3 * sizeof(BYTE));\n        *pOut++ = FMT_GEN_COPY;\n        *pOut++ = start - lpszFormat;\n        *pOut++ = pFormat - start;\n        if (*pFormat == '\"')\n          pFormat++;\n        TRACE(\"Quoted string pos %d, len %d\\n\", pOut[-2], pOut[-1]);\n      }\n      fmt_state &= ~FMT_STATE_OPEN_COPY;\n    }\n    /* -------------\n     * Number tokens\n     * -------------\n     */\n    else if (*pFormat == '0' && COULD_BE(FMT_TYPE_NUMBER))\n    {\n      /* Number formats: Digit from number or '0' if no digits\n       * Other formats: Literal\n       * Types the format if found\n       */\n      header->type = FMT_TYPE_NUMBER;\n      NEED_SPACE(2 * sizeof(BYTE));\n      *pOut++ = FMT_NUM_COPY_ZERO;\n      *pOut = 0x0;\n      while (*pFormat == '0')\n      {\n        *pOut = *pOut + 1;\n        pFormat++;\n      }\n      if (fmt_state & FMT_STATE_WROTE_DECIMAL)\n        num_header->fractional += *pOut;\n      else\n        num_header->whole += *pOut;\n      TRACE(\"%d 0's\\n\", *pOut);\n      pOut++;\n      fmt_state &= ~FMT_STATE_OPEN_COPY;\n    }\n    else if (*pFormat == '#' && COULD_BE(FMT_TYPE_NUMBER))\n    {\n      /* Number formats: Digit from number or blank if no digits\n       * Other formats: Literal\n       * Types the format if found\n       */\n      header->type = FMT_TYPE_NUMBER;\n      NEED_SPACE(2 * sizeof(BYTE));\n      *pOut++ = FMT_NUM_COPY_SKIP;\n      *pOut = 0x0;\n      while (*pFormat == '#')\n      {\n        *pOut = *pOut + 1;\n        pFormat++;\n      }\n      if (fmt_state & FMT_STATE_WROTE_DECIMAL)\n        num_header->fractional += *pOut;\n      else\n        num_header->whole += *pOut;\n      TRACE(\"%d #'s\\n\", *pOut);\n      pOut++;\n      fmt_state &= ~FMT_STATE_OPEN_COPY;\n    }\n    else if (*pFormat == '.' && COULD_BE(FMT_TYPE_NUMBER) &&\n              !(fmt_state & FMT_STATE_WROTE_DECIMAL))\n    {\n      /* Number formats: Decimal separator when 1st seen, literal thereafter\n       * Other formats: Literal\n       * Types the format if found\n       */\n      header->type = FMT_TYPE_NUMBER;\n      NEED_SPACE(sizeof(BYTE));\n      *pOut++ = FMT_NUM_DECIMAL;\n      fmt_state |= FMT_STATE_WROTE_DECIMAL;\n      fmt_state &= ~FMT_STATE_OPEN_COPY;\n      pFormat++;\n      TRACE(\"decimal sep\\n\");\n    }\n    else if ((*pFormat == 'e' || *pFormat == 'E') && (pFormat[1] == '-' ||\n              pFormat[1] == '+') && header->type == FMT_TYPE_NUMBER)\n    {\n      /* Number formats: Exponent specifier\n       * Other formats: Literal\n       */\n      num_header->flags |= FMT_FLAG_EXPONENT;\n      NEED_SPACE(2 * sizeof(BYTE));\n      if (*pFormat == 'e') {\n        if (pFormat[1] == '+')\n          *pOut = FMT_NUM_EXP_POS_L;\n        else\n          *pOut = FMT_NUM_EXP_NEG_L;\n      } else {\n        if (pFormat[1] == '+')\n          *pOut = FMT_NUM_EXP_POS_U;\n        else\n          *pOut = FMT_NUM_EXP_NEG_U;\n      }\n      pFormat += 2;\n      *++pOut = 0x0;\n      while (*pFormat == '0')\n      {\n        *pOut = *pOut + 1;\n        pFormat++;\n      }\n      pOut++;\n      TRACE(\"exponent\\n\");\n    }\n    /* FIXME: %% => Divide by 1000 */\n    else if (*pFormat == ',' && header->type == FMT_TYPE_NUMBER)\n    {\n      /* Number formats: Use the thousands separator\n       * Other formats: Literal\n       */\n      num_header->flags |= FMT_FLAG_THOUSANDS;\n      pFormat++;\n      fmt_state &= ~FMT_STATE_OPEN_COPY;\n      TRACE(\"thousands sep\\n\");\n    }\n    /* -----------\n     * Date tokens\n     * -----------\n     */\n    else if (*pFormat == '/' && COULD_BE(FMT_TYPE_DATE))\n    {\n      /* Date formats: Date separator\n       * Other formats: Literal\n       * Types the format if found\n       */\n      header->type = FMT_TYPE_DATE;\n      NEED_SPACE(sizeof(BYTE));\n      *pOut++ = FMT_DATE_DATE_SEP;\n      pFormat++;\n      fmt_state &= ~FMT_STATE_OPEN_COPY;\n      TRACE(\"date sep\\n\");\n    }\n    else if (*pFormat == ':' && COULD_BE(FMT_TYPE_DATE))\n    {\n      /* Date formats: Time separator\n       * Other formats: Literal\n       * Types the format if found\n       */\n      header->type = FMT_TYPE_DATE;\n      NEED_SPACE(sizeof(BYTE));\n      *pOut++ = FMT_DATE_TIME_SEP;\n      pFormat++;\n      fmt_state &= ~FMT_STATE_OPEN_COPY;\n      TRACE(\"time sep\\n\");\n    }\n    else if ((*pFormat == 'a' || *pFormat == 'A') &&\n              !strncmpiW(pFormat, szAMPM, ARRAY_SIZE(szAMPM)))\n    {\n      /* Date formats: System AM/PM designation\n       * Other formats: Literal\n       * Types the format if found\n       */\n      header->type = FMT_TYPE_DATE;\n      NEED_SPACE(sizeof(BYTE));\n      pFormat += ARRAY_SIZE(szAMPM);\n      if (!strncmpW(pFormat, szampm, ARRAY_SIZE(szampm)))\n        *pOut++ = FMT_DATE_AMPM_SYS2;\n      else\n        *pOut++ = FMT_DATE_AMPM_SYS1;\n      if (pLastHours)\n        *pLastHours = *pLastHours + 2;\n      TRACE(\"ampm\\n\");\n    }\n    else if (*pFormat == 'a' && pFormat[1] == '/' &&\n              (pFormat[2] == 'p' || pFormat[2] == 'P'))\n    {\n      /* Date formats: lowercase a or p designation\n       * Other formats: Literal\n       * Types the format if found\n       */\n      header->type = FMT_TYPE_DATE;\n      NEED_SPACE(sizeof(BYTE));\n      pFormat += 3;\n      *pOut++ = FMT_DATE_A_LOWER;\n      if (pLastHours)\n        *pLastHours = *pLastHours + 2;\n      TRACE(\"a/p\\n\");\n    }\n    else if (*pFormat == 'A' && pFormat[1] == '/' &&\n              (pFormat[2] == 'p' || pFormat[2] == 'P'))\n    {\n      /* Date formats: Uppercase a or p designation\n       * Other formats: Literal\n       * Types the format if found\n       */\n      header->type = FMT_TYPE_DATE;\n      NEED_SPACE(sizeof(BYTE));\n      pFormat += 3;\n      *pOut++ = FMT_DATE_A_UPPER;\n      if (pLastHours)\n        *pLastHours = *pLastHours + 2;\n      TRACE(\"A/P\\n\");\n    }\n    else if (*pFormat == 'a' && !strncmpW(pFormat, szamSlashpm, ARRAY_SIZE(szamSlashpm)))\n    {\n      /* Date formats: lowercase AM or PM designation\n       * Other formats: Literal\n       * Types the format if found\n       */\n      header->type = FMT_TYPE_DATE;\n      NEED_SPACE(sizeof(BYTE));\n      pFormat += ARRAY_SIZE(szamSlashpm);\n      *pOut++ = FMT_DATE_AMPM_LOWER;\n      if (pLastHours)\n        *pLastHours = *pLastHours + 2;\n      TRACE(\"AM/PM\\n\");\n    }\n    else if (*pFormat == 'A' && !strncmpW(pFormat, szAMSlashPM, ARRAY_SIZE(szAMSlashPM)))\n    {\n      /* Date formats: Uppercase AM or PM designation\n       * Other formats: Literal\n       * Types the format if found\n       */\n      header->type = FMT_TYPE_DATE;\n      NEED_SPACE(sizeof(BYTE));\n      pFormat += ARRAY_SIZE(szAMSlashPM);\n      *pOut++ = FMT_DATE_AMPM_UPPER;\n      TRACE(\"AM/PM\\n\");\n    }\n    else if ((*pFormat == 'c' || *pFormat == 'C') && COULD_BE(FMT_TYPE_DATE))\n    {\n      /* Date formats: General date format\n       * Other formats: Literal\n       * Types the format if found\n       */\n      header->type = FMT_TYPE_DATE;\n      NEED_SPACE(sizeof(BYTE));\n      pFormat += ARRAY_SIZE(szAMSlashPM);\n      *pOut++ = FMT_DATE_GENERAL;\n      TRACE(\"gen date\\n\");\n    }\n    else if ((*pFormat == 'd' || *pFormat == 'D') && COULD_BE(FMT_TYPE_DATE))\n    {\n      /* Date formats: Day specifier\n       * Other formats: Literal\n       * Types the format if found\n       */\n      int count = -1;\n      header->type = FMT_TYPE_DATE;\n      while ((*pFormat == 'd' || *pFormat == 'D') && count < 6)\n      {\n        pFormat++;\n        count++;\n      }\n      NEED_SPACE(sizeof(BYTE));\n      *pOut++ = FMT_DATE_DAY + count;\n      fmt_state &= ~FMT_STATE_OPEN_COPY;\n      /* When we find the days token, reset the seen hours state so that\n       * 'mm' is again written as month when encountered.\n       */\n      fmt_state &= ~FMT_STATE_SEEN_HOURS;\n      TRACE(\"%d d's\\n\", count + 1);\n    }\n    else if ((*pFormat == 'h' || *pFormat == 'H') && COULD_BE(FMT_TYPE_DATE))\n    {\n      /* Date formats: Hour specifier\n       * Other formats: Literal\n       * Types the format if found\n       */\n      header->type = FMT_TYPE_DATE;\n      NEED_SPACE(sizeof(BYTE));\n      pFormat++;\n      /* Record the position of the hours specifier - if we encounter\n       * an am/pm specifier we will change the hours from 24 to 12.\n       */\n      pLastHours = pOut;\n      if (*pFormat == 'h' || *pFormat == 'H')\n      {\n        pFormat++;\n        *pOut++ = FMT_DATE_HOUR_0;\n        TRACE(\"hh\\n\");\n      }\n      else\n      {\n        *pOut++ = FMT_DATE_HOUR;\n        TRACE(\"h\\n\");\n      }\n      fmt_state &= ~FMT_STATE_OPEN_COPY;\n      /* Note that now we have seen an hours token, the next occurrence of\n       * 'mm' indicates minutes, not months.\n       */\n      fmt_state |= FMT_STATE_SEEN_HOURS;\n    }\n    else if ((*pFormat == 'm' || *pFormat == 'M') && COULD_BE(FMT_TYPE_DATE))\n    {\n      /* Date formats: Month specifier (or Minute specifier, after hour specifier)\n       * Other formats: Literal\n       * Types the format if found\n       */\n      int count = -1;\n      header->type = FMT_TYPE_DATE;\n      while ((*pFormat == 'm' || *pFormat == 'M') && count < 4)\n      {\n        pFormat++;\n        count++;\n      }\n      NEED_SPACE(sizeof(BYTE));\n      if (count <= 1 && fmt_state & FMT_STATE_SEEN_HOURS &&\n          !(fmt_state & FMT_STATE_WROTE_MINUTES))\n      {\n        /* We have seen an hours specifier and not yet written a minutes\n         * specifier. Write this as minutes and thereafter as months.\n         */\n        *pOut++ = count == 1 ? FMT_DATE_MIN_0 : FMT_DATE_MIN;\n        fmt_state |= FMT_STATE_WROTE_MINUTES; /* Hereafter write months */\n      }\n      else\n        *pOut++ = FMT_DATE_MON + count; /* Months */\n      fmt_state &= ~FMT_STATE_OPEN_COPY;\n      TRACE(\"%d m's\\n\", count + 1);\n    }\n    else if ((*pFormat == 'n' || *pFormat == 'N') && COULD_BE(FMT_TYPE_DATE))\n    {\n      /* Date formats: Minute specifier\n       * Other formats: Literal\n       * Types the format if found\n       */\n      header->type = FMT_TYPE_DATE;\n      NEED_SPACE(sizeof(BYTE));\n      pFormat++;\n      if (*pFormat == 'n' || *pFormat == 'N')\n      {\n        pFormat++;\n        *pOut++ = FMT_DATE_MIN_0;\n        TRACE(\"nn\\n\");\n      }\n      else\n      {\n        *pOut++ = FMT_DATE_MIN;\n        TRACE(\"n\\n\");\n      }\n      fmt_state &= ~FMT_STATE_OPEN_COPY;\n    }\n    else if ((*pFormat == 'q' || *pFormat == 'Q') && COULD_BE(FMT_TYPE_DATE))\n    {\n      /* Date formats: Quarter specifier\n       * Other formats: Literal\n       * Types the format if found\n       */\n      header->type = FMT_TYPE_DATE;\n      NEED_SPACE(sizeof(BYTE));\n      *pOut++ = FMT_DATE_QUARTER;\n      pFormat++;\n      fmt_state &= ~FMT_STATE_OPEN_COPY;\n      TRACE(\"quarter\\n\");\n    }\n    else if ((*pFormat == 's' || *pFormat == 'S') && COULD_BE(FMT_TYPE_DATE))\n    {\n      /* Date formats: Second specifier\n       * Other formats: Literal\n       * Types the format if found\n       */\n      header->type = FMT_TYPE_DATE;\n      NEED_SPACE(sizeof(BYTE));\n      pFormat++;\n      if (*pFormat == 's' || *pFormat == 'S')\n      {\n        pFormat++;\n        *pOut++ = FMT_DATE_SEC_0;\n        TRACE(\"ss\\n\");\n      }\n      else\n      {\n        *pOut++ = FMT_DATE_SEC;\n        TRACE(\"s\\n\");\n      }\n      fmt_state &= ~FMT_STATE_OPEN_COPY;\n    }\n    else if ((*pFormat == 't' || *pFormat == 'T') &&\n              !strncmpiW(pFormat, szTTTTT, ARRAY_SIZE(szTTTTT)))\n    {\n      /* Date formats: System time specifier\n       * Other formats: Literal\n       * Types the format if found\n       */\n      header->type = FMT_TYPE_DATE;\n      pFormat += ARRAY_SIZE(szTTTTT);\n      NEED_SPACE(sizeof(BYTE));\n      *pOut++ = FMT_DATE_TIME_SYS;\n      fmt_state &= ~FMT_STATE_OPEN_COPY;\n    }\n    else if ((*pFormat == 'w' || *pFormat == 'W') && COULD_BE(FMT_TYPE_DATE))\n    {\n      /* Date formats: Week of the year/Day of the week\n       * Other formats: Literal\n       * Types the format if found\n       */\n      header->type = FMT_TYPE_DATE;\n      pFormat++;\n      if (*pFormat == 'w' || *pFormat == 'W')\n      {\n        NEED_SPACE(3 * sizeof(BYTE));\n        pFormat++;\n        *pOut++ = FMT_DATE_WEEK_YEAR;\n        *pOut++ = nFirstDay;\n        *pOut++ = nFirstWeek;\n        TRACE(\"ww\\n\");\n      }\n      else\n      {\n        NEED_SPACE(2 * sizeof(BYTE));\n        *pOut++ = FMT_DATE_DAY_WEEK;\n        *pOut++ = nFirstDay;\n        TRACE(\"w\\n\");\n      }\n\n      fmt_state &= ~FMT_STATE_OPEN_COPY;\n    }\n    else if ((*pFormat == 'y' || *pFormat == 'Y') && COULD_BE(FMT_TYPE_DATE))\n    {\n      /* Date formats: Day of year/Year specifier\n       * Other formats: Literal\n       * Types the format if found\n       */\n      int count = -1;\n      header->type = FMT_TYPE_DATE;\n      while ((*pFormat == 'y' || *pFormat == 'Y') && count < 4)\n      {\n        pFormat++;\n        count++;\n      }\n      if (count == 2)\n      {\n        count--; /* 'yyy' has no meaning, despite what MSDN says */\n        pFormat--;\n      }\n      NEED_SPACE(sizeof(BYTE));\n      *pOut++ = FMT_DATE_YEAR_DOY + count;\n      fmt_state &= ~FMT_STATE_OPEN_COPY;\n      TRACE(\"%d y's\\n\", count + 1);\n    }\n    /* -------------\n     * String tokens\n     * -------------\n     */\n    else if (*pFormat == '@' && COULD_BE(FMT_TYPE_STRING))\n    {\n      /* String formats: Character from string or space if no char\n       * Other formats: Literal\n       * Types the format if found\n       */\n      header->type = FMT_TYPE_STRING;\n      NEED_SPACE(2 * sizeof(BYTE));\n      *pOut++ = FMT_STR_COPY_SPACE;\n      *pOut = 0x0;\n      while (*pFormat == '@')\n      {\n        *pOut = *pOut + 1;\n        str_header->copy_chars++;\n        pFormat++;\n      }\n      TRACE(\"%d @'s\\n\", *pOut);\n      pOut++;\n      fmt_state &= ~FMT_STATE_OPEN_COPY;\n    }\n    else if (*pFormat == '&' && COULD_BE(FMT_TYPE_STRING))\n    {\n      /* String formats: Character from string or skip if no char\n       * Other formats: Literal\n       * Types the format if found\n       */\n      header->type = FMT_TYPE_STRING;\n      NEED_SPACE(2 * sizeof(BYTE));\n      *pOut++ = FMT_STR_COPY_SKIP;\n      *pOut = 0x0;\n      while (*pFormat == '&')\n      {\n        *pOut = *pOut + 1;\n        str_header->copy_chars++;\n        pFormat++;\n      }\n      TRACE(\"%d &'s\\n\", *pOut);\n      pOut++;\n      fmt_state &= ~FMT_STATE_OPEN_COPY;\n    }\n    else if ((*pFormat == '<' || *pFormat == '>') && COULD_BE(FMT_TYPE_STRING))\n    {\n      /* String formats: Use upper/lower case\n       * Other formats: Literal\n       * Types the format if found\n       */\n      header->type = FMT_TYPE_STRING;\n      if (*pFormat == '<')\n        str_header->flags |= FMT_FLAG_LT;\n      else\n        str_header->flags |= FMT_FLAG_GT;\n      TRACE(\"to %s case\\n\", *pFormat == '<' ? \"lower\" : \"upper\");\n      pFormat++;\n      fmt_state &= ~FMT_STATE_OPEN_COPY;\n    }\n    else if (*pFormat == '!' && COULD_BE(FMT_TYPE_STRING))\n    {\n      /* String formats: Copy right to left\n       * Other formats: Literal\n       * Types the format if found\n       */\n      header->type = FMT_TYPE_STRING;\n      str_header->flags |= FMT_FLAG_RTL;\n      pFormat++;\n      fmt_state &= ~FMT_STATE_OPEN_COPY;\n      TRACE(\"copy right-to-left\\n\");\n    }\n    /* --------\n     * Literals\n     * --------\n     */\n    /* FIXME: [ seems to be ignored */\n    else\n    {\n      if (*pFormat == '%' && header->type == FMT_TYPE_NUMBER)\n      {\n        /* Number formats: Percentage indicator, also a literal\n         * Other formats: Literal\n         * Doesn't type the format\n         */\n        num_header->flags |= FMT_FLAG_PERCENT;\n      }\n\n      if (fmt_state & FMT_STATE_OPEN_COPY)\n      {\n        pOut[-1] = pOut[-1] + 1; /* Increase the length of the open copy */\n        TRACE(\"extend copy (char '%c'), length now %d\\n\", *pFormat, pOut[-1]);\n      }\n      else\n      {\n        /* Create a new open copy */\n        TRACE(\"New copy (char '%c')\\n\", *pFormat);\n        NEED_SPACE(3 * sizeof(BYTE));\n        *pOut++ = FMT_GEN_COPY;\n        *pOut++ = pFormat - lpszFormat;\n        *pOut++ = 0x1;\n        fmt_state |= FMT_STATE_OPEN_COPY;\n      }\n      pFormat++;\n    }\n  }\n\n  *pOut++ = FMT_GEN_END;\n\n  header->size = pOut - rgbTok;\n  if (pcbActual)\n    *pcbActual = header->size;\n\n  return S_OK;\n}\n\n/* Number formatting state flags */\n#define NUM_WROTE_DEC  0x01 /* Written the decimal separator */\n#define NUM_WRITE_ON   0x02 /* Started to write the number */\n#define NUM_WROTE_SIGN 0x04 /* Written the negative sign */\n\n/* Format a variant using a number format */\nstatic HRESULT VARIANT_FormatNumber(LPVARIANT pVarIn, LPOLESTR lpszFormat,\n                                    LPBYTE rgbTok, ULONG dwFlags,\n                                    BSTR *pbstrOut, LCID lcid)\n{\n  BYTE rgbDig[256], *prgbDig;\n  NUMPARSE np;\n  int have_int, need_int = 0, have_frac, need_frac, exponent = 0, pad = 0;\n  WCHAR buff[256], *pBuff = buff;\n  WCHAR thousandSeparator[32];\n  VARIANT vString, vBool;\n  DWORD dwState = 0;\n  FMT_HEADER *header = (FMT_HEADER*)rgbTok;\n  FMT_NUMBER_HEADER *numHeader;\n  const BYTE* pToken = NULL;\n  HRESULT hRes = S_OK;\n\n  TRACE(\"(%s,%s,%p,0x%08x,%p,0x%08x)\\n\", debugstr_variant(pVarIn), debugstr_w(lpszFormat),\n        rgbTok, dwFlags, pbstrOut, lcid);\n\n  V_VT(&vString) = VT_EMPTY;\n  V_VT(&vBool) = VT_BOOL;\n\n  if (V_TYPE(pVarIn) == VT_EMPTY || V_TYPE(pVarIn) == VT_NULL)\n  {\n    have_int = have_frac = 0;\n    numHeader = (FMT_NUMBER_HEADER*)(rgbTok + FmtGetNull(header));\n    V_BOOL(&vBool) = VARIANT_FALSE;\n  }\n  else\n  {\n    /* Get a number string from pVarIn, and parse it */\n    hRes = VariantChangeTypeEx(&vString, pVarIn, lcid, VARIANT_NOUSEROVERRIDE, VT_BSTR);\n    if (FAILED(hRes))\n      return hRes;\n\n    np.cDig = sizeof(rgbDig);\n    np.dwInFlags = NUMPRS_STD;\n    hRes = VarParseNumFromStr(V_BSTR(&vString), lcid, 0, &np, rgbDig);\n    if (FAILED(hRes))\n      return hRes;\n\n    have_int = np.cDig;\n    have_frac = 0;\n    exponent = np.nPwr10;\n\n    /* Figure out which format to use */\n    if (np.dwOutFlags & NUMPRS_NEG)\n    {\n      numHeader = (FMT_NUMBER_HEADER*)(rgbTok + FmtGetNegative(header));\n      V_BOOL(&vBool) = VARIANT_TRUE;\n    }\n    else if (have_int == 1 && !exponent && rgbDig[0] == 0)\n    {\n      numHeader = (FMT_NUMBER_HEADER*)(rgbTok + FmtGetZero(header));\n      V_BOOL(&vBool) = VARIANT_FALSE;\n    }\n    else\n    {\n      numHeader = (FMT_NUMBER_HEADER*)(rgbTok + FmtGetPositive(header));\n      V_BOOL(&vBool) = VARIANT_TRUE;\n    }\n\n    TRACE(\"num header: flags = 0x%x, mult=%d, div=%d, whole=%d, fract=%d\\n\",\n          numHeader->flags, numHeader->multiplier, numHeader->divisor,\n          numHeader->whole, numHeader->fractional);\n\n    need_int = numHeader->whole;\n    need_frac = numHeader->fractional;\n\n    if (numHeader->flags & FMT_FLAG_PERCENT &&\n        !(have_int == 1 && !exponent && rgbDig[0] == 0))\n      exponent += 2;\n\n    if (numHeader->flags & FMT_FLAG_EXPONENT)\n    {\n      /* Exponent format: length of the integral number part is fixed and\n         specified by the format. */\n      pad = need_int - have_int;\n      exponent -= pad;\n      if (pad < 0)\n      {\n        have_int = need_int;\n        have_frac -= pad;\n        pad = 0;\n      }\n    }\n    else\n    {\n      /* Convert the exponent */\n      pad = max(exponent, -have_int);\n      exponent -= pad;\n      if (pad < 0)\n      {\n        have_int += pad;\n        have_frac = -pad;\n        pad = 0;\n      }\n      if(exponent < 0 && exponent > (-256 + have_int + have_frac))\n      {\n        /* Remove exponent notation */\n        memmove(rgbDig - exponent, rgbDig, have_int + have_frac);\n        ZeroMemory(rgbDig, -exponent);\n        have_frac -= exponent;\n        exponent = 0;\n      }\n    }\n\n    /* Rounding the number */\n    if (have_frac > need_frac)\n    {\n      prgbDig = &rgbDig[have_int + need_frac];\n      have_frac = need_frac;\n      if (*prgbDig >= 5)\n      {\n        while (prgbDig-- > rgbDig && *prgbDig == 9)\n          *prgbDig = 0;\n        if (prgbDig < rgbDig)\n        {\n          /* We reached the first digit and that was also a 9 */\n          rgbDig[0] = 1;\n          if (numHeader->flags & FMT_FLAG_EXPONENT)\n            exponent++;\n          else\n          {\n            rgbDig[have_int + need_frac] = 0;\n            if (exponent < 0)\n              exponent++;\n            else\n              have_int++;\n          }\n        }\n        else\n          (*prgbDig)++;\n      }\n      /* We converted trailing digits to zeroes => have_frac has changed */\n      while (have_frac > 0 && rgbDig[have_int + have_frac - 1] == 0)\n        have_frac--;\n    }\n    TRACE(\"have_int=%d,need_int=%d,have_frac=%d,need_frac=%d,pad=%d,exp=%d\\n\",\n          have_int, need_int, have_frac, need_frac, pad, exponent);\n  }\n\n  if (numHeader->flags & FMT_FLAG_THOUSANDS)\n  {\n    if (!GetLocaleInfoW(lcid, LOCALE_STHOUSAND, thousandSeparator, ARRAY_SIZE(thousandSeparator)))\n    {\n      thousandSeparator[0] = ',';\n      thousandSeparator[1] = 0;\n    }\n  }\n\n  pToken = (const BYTE*)numHeader + sizeof(FMT_NUMBER_HEADER);\n  prgbDig = rgbDig;\n\n  while (SUCCEEDED(hRes) && *pToken != FMT_GEN_END)\n  {\n    WCHAR defaultChar = '?';\n    DWORD boolFlag, localeValue = 0;\n    BOOL shouldAdvance = TRUE;\n\n    if (pToken - rgbTok > header->size)\n    {\n      ERR(\"Ran off the end of the format!\\n\");\n      hRes = E_INVALIDARG;\n      goto VARIANT_FormatNumber_Exit;\n    }\n\n    switch (*pToken)\n    {\n    case FMT_GEN_COPY:\n      TRACE(\"copy %s\\n\", debugstr_wn(lpszFormat + pToken[1], pToken[2]));\n      memcpy(pBuff, lpszFormat + pToken[1], pToken[2] * sizeof(WCHAR));\n      pBuff += pToken[2];\n      pToken += 2;\n      break;\n\n    case FMT_GEN_INLINE:\n      pToken += 2;\n      TRACE(\"copy %s\\n\", debugstr_a((LPCSTR)pToken));\n      while (*pToken)\n        *pBuff++ = *pToken++;\n      break;\n\n    case FMT_NUM_YES_NO:\n      boolFlag = VAR_BOOLYESNO;\n      goto VARIANT_FormatNumber_Bool;\n\n    case FMT_NUM_ON_OFF:\n      boolFlag = VAR_BOOLONOFF;\n      goto VARIANT_FormatNumber_Bool;\n\n    case FMT_NUM_TRUE_FALSE:\n      boolFlag = VAR_LOCALBOOL;\n\nVARIANT_FormatNumber_Bool:\n      {\n        BSTR boolStr = NULL;\n\n        if (pToken[1] != FMT_GEN_END)\n        {\n          ERR(\"Boolean token not at end of format!\\n\");\n          hRes = E_INVALIDARG;\n          goto VARIANT_FormatNumber_Exit;\n        }\n        hRes = VarBstrFromBool(V_BOOL(&vBool), lcid, boolFlag, &boolStr);\n        if (SUCCEEDED(hRes))\n        {\n          strcpyW(pBuff, boolStr);\n          SysFreeString(boolStr);\n          while (*pBuff)\n            pBuff++;\n        }\n      }\n      break;\n\n    case FMT_NUM_DECIMAL:\n      if ((np.dwOutFlags & NUMPRS_NEG) && !(dwState & NUM_WROTE_SIGN) && !header->starts[1])\n      {\n        /* last chance for a negative sign in the .# case */\n        TRACE(\"write negative sign\\n\");\n        localeValue = LOCALE_SNEGATIVESIGN;\n        defaultChar = '-';\n        dwState |= NUM_WROTE_SIGN;\n        shouldAdvance = FALSE;\n        break;\n      }\n      TRACE(\"write decimal separator\\n\");\n      localeValue = LOCALE_SDECIMAL;\n      defaultChar = '.';\n      dwState |= NUM_WROTE_DEC;\n      break;\n\n    case FMT_NUM_CURRENCY:\n      TRACE(\"write currency symbol\\n\");\n      localeValue = LOCALE_SCURRENCY;\n      defaultChar = '$';\n      break;\n\n    case FMT_NUM_EXP_POS_U:\n    case FMT_NUM_EXP_POS_L:\n    case FMT_NUM_EXP_NEG_U:\n    case FMT_NUM_EXP_NEG_L:\n      if (*pToken == FMT_NUM_EXP_POS_L || *pToken == FMT_NUM_EXP_NEG_L)\n        *pBuff++ = 'e';\n      else\n        *pBuff++ = 'E';\n      if (exponent < 0)\n      {\n        *pBuff++ = '-';\n        sprintfW(pBuff, szPercentZeroStar_d, pToken[1], -exponent);\n      }\n      else\n      {\n        if (*pToken == FMT_NUM_EXP_POS_L || *pToken == FMT_NUM_EXP_POS_U)\n          *pBuff++ = '+';\n        sprintfW(pBuff, szPercentZeroStar_d, pToken[1], exponent);\n      }\n      while (*pBuff)\n        pBuff++;\n      pToken++;\n      break;\n\n    case FMT_NUM_COPY_ZERO:\n      dwState |= NUM_WRITE_ON;\n      /* Fall through */\n\n    case FMT_NUM_COPY_SKIP:\n      TRACE(\"write %d %sdigits or %s\\n\", pToken[1],\n            dwState & NUM_WROTE_DEC ? \"fractional \" : \"\",\n            *pToken == FMT_NUM_COPY_ZERO ? \"0\" : \"skip\");\n\n      if (dwState & NUM_WROTE_DEC)\n      {\n        int count, i;\n\n        if (!(numHeader->flags & FMT_FLAG_EXPONENT) && exponent < 0)\n        {\n          /* Pad with 0 before writing the fractional digits */\n          pad = max(exponent, -pToken[1]);\n          exponent -= pad;\n          count = min(have_frac, pToken[1] + pad);\n          for (i = 0; i > pad; i--)\n            *pBuff++ = '0';\n        }\n        else\n          count = min(have_frac, pToken[1]);\n\n        pad += pToken[1] - count;\n        have_frac -= count;\n        while (count--)\n          *pBuff++ = '0' + *prgbDig++;\n        if (*pToken == FMT_NUM_COPY_ZERO)\n        {\n          for (; pad > 0; pad--)\n            *pBuff++ = '0'; /* Write zeros for missing trailing digits */\n        }\n      }\n      else\n      {\n        int count, count_max, position;\n\n        if ((np.dwOutFlags & NUMPRS_NEG) && !(dwState & NUM_WROTE_SIGN) && !header->starts[1])\n        {\n          TRACE(\"write negative sign\\n\");\n          localeValue = LOCALE_SNEGATIVESIGN;\n          defaultChar = '-';\n          dwState |= NUM_WROTE_SIGN;\n          shouldAdvance = FALSE;\n          break;\n        }\n\n        position = have_int + pad;\n        if (dwState & NUM_WRITE_ON)\n          position = max(position, need_int);\n        need_int -= pToken[1];\n        count_max = have_int + pad - need_int;\n        if (count_max < 0)\n            count_max = 0;\n        if (dwState & NUM_WRITE_ON)\n        {\n          count = pToken[1] - count_max;\n          TRACE(\"write %d leading zeros\\n\", count);\n          while (count-- > 0)\n          {\n            *pBuff++ = '0';\n            if ((numHeader->flags & FMT_FLAG_THOUSANDS) &&\n                position > 1 && (--position % 3) == 0)\n            {\n              int k;\n              TRACE(\"write thousand separator\\n\");\n              for (k = 0; thousandSeparator[k]; k++)\n                *pBuff++ = thousandSeparator[k];\n            }\n          }\n        }\n        if (*pToken == FMT_NUM_COPY_ZERO || have_int > 1 ||\n            (have_int > 0 && *prgbDig > 0))\n        {\n          count = min(count_max, have_int);\n          count_max -= count;\n          have_int -= count;\n          TRACE(\"write %d whole number digits\\n\", count);\n          while (count--)\n          {\n            dwState |= NUM_WRITE_ON;\n            *pBuff++ = '0' + *prgbDig++;\n            if ((numHeader->flags & FMT_FLAG_THOUSANDS) &&\n                position > 1 && (--position % 3) == 0)\n            {\n              int k;\n              TRACE(\"write thousand separator\\n\");\n              for (k = 0; thousandSeparator[k]; k++)\n                *pBuff++ = thousandSeparator[k];\n            }\n          }\n        }\n        count = min(count_max, pad);\n        pad -= count;\n        TRACE(\"write %d whole trailing 0's\\n\", count);\n        while (count--)\n        {\n          *pBuff++ = '0';\n          if ((numHeader->flags & FMT_FLAG_THOUSANDS) &&\n              position > 1 && (--position % 3) == 0)\n          {\n            int k;\n            TRACE(\"write thousand separator\\n\");\n            for (k = 0; thousandSeparator[k]; k++)\n              *pBuff++ = thousandSeparator[k];\n          }\n        }\n      }\n      pToken++;\n      break;\n\n    default:\n      ERR(\"Unknown token 0x%02x!\\n\", *pToken);\n      hRes = E_INVALIDARG;\n      goto VARIANT_FormatNumber_Exit;\n    }\n    if (localeValue)\n    {\n      if (GetLocaleInfoW(lcid, localeValue, pBuff, ARRAY_SIZE(buff)-(pBuff-buff)))\n      {\n        TRACE(\"added %s\\n\", debugstr_w(pBuff));\n        while (*pBuff)\n          pBuff++;\n      }\n      else\n      {\n        TRACE(\"added %d '%c'\\n\", defaultChar, defaultChar);\n        *pBuff++ = defaultChar;\n      }\n    }\n    if (shouldAdvance)\n      pToken++;\n  }\n\nVARIANT_FormatNumber_Exit:\n  VariantClear(&vString);\n  *pBuff = '\\0';\n  TRACE(\"buff is %s\\n\", debugstr_w(buff));\n  if (SUCCEEDED(hRes))\n  {\n    *pbstrOut = SysAllocString(buff);\n    if (!*pbstrOut)\n      hRes = E_OUTOFMEMORY;\n  }\n  return hRes;\n}\n\n/* Format a variant using a date format */\nstatic HRESULT VARIANT_FormatDate(LPVARIANT pVarIn, LPOLESTR lpszFormat,\n                                  LPBYTE rgbTok, ULONG dwFlags,\n                                  BSTR *pbstrOut, LCID lcid)\n{\n  WCHAR buff[256], *pBuff = buff;\n  VARIANT vDate;\n  UDATE udate;\n  FMT_HEADER *header = (FMT_HEADER*)rgbTok;\n  FMT_DATE_HEADER *dateHeader;\n  const BYTE* pToken = NULL;\n  HRESULT hRes;\n\n  TRACE(\"(%s,%s,%p,0x%08x,%p,0x%08x)\\n\", debugstr_variant(pVarIn),\n        debugstr_w(lpszFormat), rgbTok, dwFlags, pbstrOut, lcid);\n\n  V_VT(&vDate) = VT_EMPTY;\n\n  if (V_TYPE(pVarIn) == VT_EMPTY || V_TYPE(pVarIn) == VT_NULL)\n  {\n    dateHeader = (FMT_DATE_HEADER*)(rgbTok + FmtGetNegative(header));\n    V_DATE(&vDate) = 0;\n  }\n  else\n  {\n    USHORT usFlags = dwFlags & VARIANT_CALENDAR_HIJRI ? VAR_CALENDAR_HIJRI : 0;\n\n    hRes = VariantChangeTypeEx(&vDate, pVarIn, lcid, usFlags, VT_DATE);\n    if (FAILED(hRes))\n      return hRes;\n    dateHeader = (FMT_DATE_HEADER*)(rgbTok + FmtGetPositive(header));\n  }\n\n  hRes = VarUdateFromDate(V_DATE(&vDate), 0 /* FIXME: flags? */, &udate);\n  if (FAILED(hRes))\n    return hRes;\n  pToken = (const BYTE*)dateHeader + sizeof(FMT_DATE_HEADER);\n\n  while (*pToken != FMT_GEN_END)\n  {\n    DWORD dwVal = 0, localeValue = 0, dwFmt = 0;\n    LPCWSTR szPrintFmt = NULL;\n    WCHAR defaultChar = '?';\n\n    if (pToken - rgbTok > header->size)\n    {\n      ERR(\"Ran off the end of the format!\\n\");\n      hRes = E_INVALIDARG;\n      goto VARIANT_FormatDate_Exit;\n    }\n\n    switch (*pToken)\n    {\n    case FMT_GEN_COPY:\n      TRACE(\"copy %s\\n\", debugstr_wn(lpszFormat + pToken[1], pToken[2]));\n      memcpy(pBuff, lpszFormat + pToken[1], pToken[2] * sizeof(WCHAR));\n      pBuff += pToken[2];\n      pToken += 2;\n      break;\n\n    case FMT_GEN_INLINE:\n      pToken += 2;\n      TRACE(\"copy %s\\n\", debugstr_a((LPCSTR)pToken));\n      while (*pToken)\n        *pBuff++ = *pToken++;\n      break;\n\n    case FMT_DATE_TIME_SEP:\n      TRACE(\"time separator\\n\");\n      localeValue = LOCALE_STIME;\n      defaultChar = ':';\n      break;\n\n    case FMT_DATE_DATE_SEP:\n      TRACE(\"date separator\\n\");\n      localeValue = LOCALE_SDATE;\n      defaultChar = '/';\n      break;\n\n    case FMT_DATE_GENERAL:\n      {\n        BSTR date = NULL;\n        WCHAR *pDate;\n        hRes = VarBstrFromDate(V_DATE(&vDate), lcid, 0, &date);\n        if (FAILED(hRes))\n          goto VARIANT_FormatDate_Exit;\n\tpDate = date;\n        while (*pDate)\n          *pBuff++ = *pDate++;\n        SysFreeString(date);\n      }\n      break;\n\n    case FMT_DATE_QUARTER:\n      if (udate.st.wMonth <= 3)\n        *pBuff++ = '1';\n      else if (udate.st.wMonth <= 6)\n        *pBuff++ = '2';\n      else if (udate.st.wMonth <= 9)\n        *pBuff++ = '3';\n      else\n        *pBuff++ = '4';\n      break;\n\n    case FMT_DATE_TIME_SYS:\n      {\n        /* FIXME: VARIANT_CALENDAR HIJRI should cause Hijri output */\n        BSTR date = NULL;\n        WCHAR *pDate;\n        hRes = VarBstrFromDate(V_DATE(&vDate), lcid, VAR_TIMEVALUEONLY, &date);\n        if (FAILED(hRes))\n          goto VARIANT_FormatDate_Exit;\n\tpDate = date;\n        while (*pDate)\n          *pBuff++ = *pDate++;\n        SysFreeString(date);\n      }\n      break;\n\n    case FMT_DATE_DAY:\n      szPrintFmt = szPercent_d;\n      dwVal = udate.st.wDay;\n      break;\n\n    case FMT_DATE_DAY_0:\n      szPrintFmt = szPercentZeroTwo_d;\n      dwVal = udate.st.wDay;\n      break;\n\n    case FMT_DATE_DAY_SHORT:\n      /* FIXME: VARIANT_CALENDAR HIJRI should cause Hijri output */\n      TRACE(\"short day\\n\");\n      localeValue = LOCALE_SABBREVDAYNAME1 + (udate.st.wDayOfWeek + 6)%7;\n      defaultChar = '?';\n      break;\n\n    case FMT_DATE_DAY_LONG:\n      /* FIXME: VARIANT_CALENDAR HIJRI should cause Hijri output */\n      TRACE(\"long day\\n\");\n      localeValue = LOCALE_SDAYNAME1 + (udate.st.wDayOfWeek + 6)%7;\n      defaultChar = '?';\n      break;\n\n    case FMT_DATE_SHORT:\n      /* FIXME: VARIANT_CALENDAR HIJRI should cause Hijri output */\n      dwFmt = LOCALE_SSHORTDATE;\n      break;\n\n    case FMT_DATE_LONG:\n      /* FIXME: VARIANT_CALENDAR HIJRI should cause Hijri output */\n      dwFmt = LOCALE_SLONGDATE;\n      break;\n\n    case FMT_DATE_MEDIUM:\n      FIXME(\"Medium date treated as long date\\n\");\n      dwFmt = LOCALE_SLONGDATE;\n      break;\n\n    case FMT_DATE_DAY_WEEK:\n      szPrintFmt = szPercent_d;\n      if (pToken[1])\n        dwVal = udate.st.wDayOfWeek + 2 - pToken[1];\n      else\n      {\n        GetLocaleInfoW(lcid,LOCALE_RETURN_NUMBER|LOCALE_IFIRSTDAYOFWEEK,\n                       (LPWSTR)&dwVal, sizeof(dwVal)/sizeof(WCHAR));\n        dwVal = udate.st.wDayOfWeek + 1 - dwVal;\n      }\n      pToken++;\n      break;\n\n    case FMT_DATE_WEEK_YEAR:\n      szPrintFmt = szPercent_d;\n      dwVal = udate.wDayOfYear / 7 + 1;\n      pToken += 2;\n      FIXME(\"Ignoring nFirstDay of %d, nFirstWeek of %d\\n\", pToken[0], pToken[1]);\n      break;\n\n    case FMT_DATE_MON:\n      szPrintFmt = szPercent_d;\n      dwVal = udate.st.wMonth;\n      break;\n\n    case FMT_DATE_MON_0:\n      szPrintFmt = szPercentZeroTwo_d;\n      dwVal = udate.st.wMonth;\n      break;\n\n    case FMT_DATE_MON_SHORT:\n      /* FIXME: VARIANT_CALENDAR HIJRI should cause Hijri output */\n      TRACE(\"short month\\n\");\n      localeValue = LOCALE_SABBREVMONTHNAME1 + udate.st.wMonth - 1;\n      defaultChar = '?';\n      break;\n\n    case FMT_DATE_MON_LONG:\n      /* FIXME: VARIANT_CALENDAR HIJRI should cause Hijri output */\n      TRACE(\"long month\\n\");\n      localeValue = LOCALE_SMONTHNAME1 + udate.st.wMonth - 1;\n      defaultChar = '?';\n      break;\n\n    case FMT_DATE_YEAR_DOY:\n      szPrintFmt = szPercent_d;\n      dwVal = udate.wDayOfYear;\n      break;\n\n    case FMT_DATE_YEAR_0:\n      szPrintFmt = szPercentZeroTwo_d;\n      dwVal = udate.st.wYear % 100;\n      break;\n\n    case FMT_DATE_YEAR_LONG:\n      szPrintFmt = szPercent_d;\n      dwVal = udate.st.wYear;\n      break;\n\n    case FMT_DATE_MIN:\n      szPrintFmt = szPercent_d;\n      dwVal = udate.st.wMinute;\n      break;\n\n    case FMT_DATE_MIN_0:\n      szPrintFmt = szPercentZeroTwo_d;\n      dwVal = udate.st.wMinute;\n      break;\n\n    case FMT_DATE_SEC:\n      szPrintFmt = szPercent_d;\n      dwVal = udate.st.wSecond;\n      break;\n\n    case FMT_DATE_SEC_0:\n      szPrintFmt = szPercentZeroTwo_d;\n      dwVal = udate.st.wSecond;\n      break;\n\n    case FMT_DATE_HOUR:\n      szPrintFmt = szPercent_d;\n      dwVal = udate.st.wHour;\n      break;\n\n    case FMT_DATE_HOUR_0:\n    case FMT_DATE_TIME_UNK2:\n      szPrintFmt = szPercentZeroTwo_d;\n      dwVal = udate.st.wHour;\n      break;\n\n    case FMT_DATE_HOUR_12:\n      szPrintFmt = szPercent_d;\n      dwVal = udate.st.wHour ? udate.st.wHour > 12 ? udate.st.wHour - 12 : udate.st.wHour : 12;\n      break;\n\n    case FMT_DATE_HOUR_12_0:\n      szPrintFmt = szPercentZeroTwo_d;\n      dwVal = udate.st.wHour ? udate.st.wHour > 12 ? udate.st.wHour - 12 : udate.st.wHour : 12;\n      break;\n\n    case FMT_DATE_AMPM_SYS1:\n    case FMT_DATE_AMPM_SYS2:\n      localeValue = udate.st.wHour < 12 ? LOCALE_S1159 : LOCALE_S2359;\n      defaultChar = '?';\n      break;\n\n    case FMT_DATE_AMPM_UPPER:\n      *pBuff++ = udate.st.wHour < 12 ? 'A' : 'P';\n      *pBuff++ = 'M';\n      break;\n\n    case FMT_DATE_A_UPPER:\n      *pBuff++ = udate.st.wHour < 12 ? 'A' : 'P';\n      break;\n\n    case FMT_DATE_AMPM_LOWER:\n      *pBuff++ = udate.st.wHour < 12 ? 'a' : 'p';\n      *pBuff++ = 'm';\n      break;\n\n    case FMT_DATE_A_LOWER:\n      *pBuff++ = udate.st.wHour < 12 ? 'a' : 'p';\n      break;\n\n    default:\n      ERR(\"Unknown token 0x%02x!\\n\", *pToken);\n      hRes = E_INVALIDARG;\n      goto VARIANT_FormatDate_Exit;\n    }\n    if (localeValue)\n    {\n      *pBuff = '\\0';\n      if (GetLocaleInfoW(lcid, localeValue, pBuff, ARRAY_SIZE(buff)-(pBuff-buff)))\n      {\n        TRACE(\"added %s\\n\", debugstr_w(pBuff));\n        while (*pBuff)\n          pBuff++;\n      }\n      else\n      {\n        TRACE(\"added %d %c\\n\", defaultChar, defaultChar);\n        *pBuff++ = defaultChar;\n      }\n    }\n    else if (dwFmt)\n    {\n      WCHAR fmt_buff[80];\n\n      if (!GetLocaleInfoW(lcid, dwFmt, fmt_buff, ARRAY_SIZE(fmt_buff)) ||\n          !get_date_format(lcid, 0, &udate.st, fmt_buff, pBuff, ARRAY_SIZE(buff)-(pBuff-buff)))\n      {\n        hRes = E_INVALIDARG;\n        goto VARIANT_FormatDate_Exit;\n      }\n      while (*pBuff)\n        pBuff++;\n    }\n    else if (szPrintFmt)\n    {\n      sprintfW(pBuff, szPrintFmt, dwVal);\n      while (*pBuff)\n        pBuff++;\n    }\n    pToken++;\n  }\n\nVARIANT_FormatDate_Exit:\n  *pBuff = '\\0';\n  TRACE(\"buff is %s\\n\", debugstr_w(buff));\n  if (SUCCEEDED(hRes))\n  {\n    *pbstrOut = SysAllocString(buff);\n    if (!*pbstrOut)\n      hRes = E_OUTOFMEMORY;\n  }\n  return hRes;\n}\n\n/* Format a variant using a string format */\nstatic HRESULT VARIANT_FormatString(LPVARIANT pVarIn, LPOLESTR lpszFormat,\n                                    LPBYTE rgbTok, ULONG dwFlags,\n                                    BSTR *pbstrOut, LCID lcid)\n{\n  static WCHAR szEmpty[] = { '\\0' };\n  WCHAR buff[256], *pBuff = buff;\n  WCHAR *pSrc;\n  FMT_HEADER *header = (FMT_HEADER*)rgbTok;\n  FMT_STRING_HEADER *strHeader;\n  const BYTE* pToken = NULL;\n  VARIANT vStr;\n  int blanks_first;\n  BOOL bUpper = FALSE;\n  HRESULT hRes = S_OK;\n\n  TRACE(\"%s,%s,%p,0x%08x,%p,0x%08x)\\n\", debugstr_variant(pVarIn), debugstr_w(lpszFormat),\n        rgbTok, dwFlags, pbstrOut, lcid);\n\n  V_VT(&vStr) = VT_EMPTY;\n\n  if (V_TYPE(pVarIn) == VT_EMPTY || V_TYPE(pVarIn) == VT_NULL)\n  {\n    strHeader = (FMT_STRING_HEADER*)(rgbTok + FmtGetNegative(header));\n    V_BSTR(&vStr) = szEmpty;\n  }\n  else\n  {\n    hRes = VariantChangeTypeEx(&vStr, pVarIn, lcid, VARIANT_NOUSEROVERRIDE, VT_BSTR);\n    if (FAILED(hRes))\n      return hRes;\n\n    if (V_BSTR(&vStr)[0] == '\\0')\n      strHeader = (FMT_STRING_HEADER*)(rgbTok + FmtGetNegative(header));\n    else\n      strHeader = (FMT_STRING_HEADER*)(rgbTok + FmtGetPositive(header));\n  }\n  pSrc = V_BSTR(&vStr);\n  if ((strHeader->flags & (FMT_FLAG_LT|FMT_FLAG_GT)) == FMT_FLAG_GT)\n    bUpper = TRUE;\n  blanks_first = strHeader->copy_chars - strlenW(pSrc);\n  pToken = (const BYTE*)strHeader + sizeof(FMT_DATE_HEADER);\n\n  while (*pToken != FMT_GEN_END)\n  {\n    int dwCount = 0;\n\n    if (pToken - rgbTok > header->size)\n    {\n      ERR(\"Ran off the end of the format!\\n\");\n      hRes = E_INVALIDARG;\n      goto VARIANT_FormatString_Exit;\n    }\n\n    switch (*pToken)\n    {\n    case FMT_GEN_COPY:\n      TRACE(\"copy %s\\n\", debugstr_wn(lpszFormat + pToken[1], pToken[2]));\n      memcpy(pBuff, lpszFormat + pToken[1], pToken[2] * sizeof(WCHAR));\n      pBuff += pToken[2];\n      pToken += 2;\n      break;\n\n    case FMT_STR_COPY_SPACE:\n    case FMT_STR_COPY_SKIP:\n      dwCount = pToken[1];\n      if (*pToken == FMT_STR_COPY_SPACE && blanks_first > 0)\n      {\n        TRACE(\"insert %d initial spaces\\n\", blanks_first);\n        while (dwCount > 0 && blanks_first > 0)\n        {\n          *pBuff++ = ' ';\n          dwCount--;\n          blanks_first--;\n        }\n      }\n      TRACE(\"copy %d chars%s\\n\", dwCount,\n            *pToken == FMT_STR_COPY_SPACE ? \" with space\" :\"\");\n      while (dwCount > 0 && *pSrc)\n      {\n        if (bUpper)\n          *pBuff++ = toupperW(*pSrc);\n        else\n          *pBuff++ = tolowerW(*pSrc);\n        dwCount--;\n        pSrc++;\n      }\n      if (*pToken == FMT_STR_COPY_SPACE && dwCount > 0)\n      {\n        TRACE(\"insert %d spaces\\n\", dwCount);\n        while (dwCount-- > 0)\n          *pBuff++ = ' ';\n      }\n      pToken++;\n      break;\n\n    default:\n      ERR(\"Unknown token 0x%02x!\\n\", *pToken);\n      hRes = E_INVALIDARG;\n      goto VARIANT_FormatString_Exit;\n    }\n    pToken++;\n  }\n\nVARIANT_FormatString_Exit:\n  /* Copy out any remaining chars */\n  while (*pSrc)\n  {\n    if (bUpper)\n      *pBuff++ = toupperW(*pSrc);\n    else\n      *pBuff++ = tolowerW(*pSrc);\n    pSrc++;\n  }\n  VariantClear(&vStr);\n  *pBuff = '\\0';\n  TRACE(\"buff is %s\\n\", debugstr_w(buff));\n  if (SUCCEEDED(hRes))\n  {\n    *pbstrOut = SysAllocString(buff);\n    if (!*pbstrOut)\n      hRes = E_OUTOFMEMORY;\n  }\n  return hRes;\n}\n\n#define NUMBER_VTBITS (VTBIT_I1|VTBIT_UI1|VTBIT_I2|VTBIT_UI2| \\\n                       VTBIT_I4|VTBIT_UI4|VTBIT_I8|VTBIT_UI8| \\\n                       VTBIT_R4|VTBIT_R8|VTBIT_CY|VTBIT_DECIMAL| \\\n                       VTBIT_BOOL|VTBIT_INT|VTBIT_UINT)\n\n/**********************************************************************\n *              VarFormatFromTokens [OLEAUT32.139]\n */\nHRESULT WINAPI VarFormatFromTokens(LPVARIANT pVarIn, LPOLESTR lpszFormat,\n                                   LPBYTE rgbTok, ULONG dwFlags,\n                                   BSTR *pbstrOut, LCID lcid)\n{\n  FMT_SHORT_HEADER *header = (FMT_SHORT_HEADER *)rgbTok;\n  VARIANT vTmp;\n  HRESULT hres;\n\n  TRACE(\"(%p,%s,%p,%x,%p,0x%08x)\\n\", pVarIn, debugstr_w(lpszFormat),\n          rgbTok, dwFlags, pbstrOut, lcid);\n\n  if (!pbstrOut)\n    return E_INVALIDARG;\n\n  *pbstrOut = NULL;\n\n  if (!pVarIn || !rgbTok)\n    return E_INVALIDARG;\n\n  if (V_VT(pVarIn) == VT_NULL)\n    return S_OK;\n\n  if (*rgbTok == FMT_TO_STRING || header->type == FMT_TYPE_GENERAL)\n  {\n    /* According to MSDN, general format acts somewhat like the 'Str'\n     * function in Visual Basic.\n     */\nVarFormatFromTokens_AsStr:\n    V_VT(&vTmp) = VT_EMPTY;\n    hres = VariantChangeTypeEx(&vTmp, pVarIn, lcid, dwFlags, VT_BSTR);\n    *pbstrOut = V_BSTR(&vTmp);\n  }\n  else\n  {\n    if (header->type == FMT_TYPE_NUMBER ||\n        (header->type == FMT_TYPE_UNKNOWN && ((1 << V_TYPE(pVarIn)) & NUMBER_VTBITS)))\n    {\n      hres = VARIANT_FormatNumber(pVarIn, lpszFormat, rgbTok, dwFlags, pbstrOut, lcid);\n    }\n    else if (header->type == FMT_TYPE_DATE ||\n             (header->type == FMT_TYPE_UNKNOWN && V_TYPE(pVarIn) == VT_DATE))\n    {\n      hres = VARIANT_FormatDate(pVarIn, lpszFormat, rgbTok, dwFlags, pbstrOut, lcid);\n    }\n    else if (header->type == FMT_TYPE_STRING || V_TYPE(pVarIn) == VT_BSTR)\n    {\n      hres = VARIANT_FormatString(pVarIn, lpszFormat, rgbTok, dwFlags, pbstrOut, lcid);\n    }\n    else\n    {\n      ERR(\"unrecognised format type 0x%02x\\n\", header->type);\n      return E_INVALIDARG;\n    }\n    /* If the coercion failed, still try to create output, unless the\n     * VAR_FORMAT_NOSUBSTITUTE flag is set.\n     */\n    if ((hres == DISP_E_OVERFLOW || hres == DISP_E_TYPEMISMATCH) &&\n        !(dwFlags & VAR_FORMAT_NOSUBSTITUTE))\n      goto VarFormatFromTokens_AsStr;\n  }\n\n  return hres;\n}\n\n/**********************************************************************\n *              VarFormat [OLEAUT32.87]\n *\n * Format a variant from a format string.\n *\n * PARAMS\n *  pVarIn     [I] Variant to format\n *  lpszFormat [I] Format string (see notes)\n *  nFirstDay  [I] First day of the week, (See VarTokenizeFormatString() for details)\n *  nFirstWeek [I] First week of the year (See VarTokenizeFormatString() for details)\n *  dwFlags    [I] Flags for the format (VAR_ flags from \"oleauto.h\")\n *  pbstrOut   [O] Destination for formatted string.\n *\n * RETURNS\n *  Success: S_OK. pbstrOut contains the formatted value.\n *  Failure: E_INVALIDARG, if any parameter is invalid.\n *           E_OUTOFMEMORY, if enough memory cannot be allocated.\n *           DISP_E_TYPEMISMATCH, if the variant cannot be formatted.\n *\n * NOTES\n *  - See Variant-Formats for details concerning creating format strings.\n *  - This function uses LOCALE_USER_DEFAULT when calling VarTokenizeFormatString()\n *    and VarFormatFromTokens().\n */\nHRESULT WINAPI VarFormat(LPVARIANT pVarIn, LPOLESTR lpszFormat,\n                         int nFirstDay, int nFirstWeek, ULONG dwFlags,\n                         BSTR *pbstrOut)\n{\n  BYTE buff[256];\n  HRESULT hres;\n\n  TRACE(\"(%s,%s,%d,%d,0x%08x,%p)\\n\", debugstr_variant(pVarIn), debugstr_w(lpszFormat),\n        nFirstDay, nFirstWeek, dwFlags, pbstrOut);\n\n  if (!pbstrOut)\n    return E_INVALIDARG;\n  *pbstrOut = NULL;\n\n  hres = VarTokenizeFormatString(lpszFormat, buff, sizeof(buff), nFirstDay,\n                                 nFirstWeek, LOCALE_USER_DEFAULT, NULL);\n  if (SUCCEEDED(hres))\n    hres = VarFormatFromTokens(pVarIn, lpszFormat, buff, dwFlags,\n                               pbstrOut, LOCALE_USER_DEFAULT);\n  TRACE(\"returning 0x%08x, %s\\n\", hres, debugstr_w(*pbstrOut));\n  return hres;\n}\n\n/**********************************************************************\n *              VarFormatDateTime [OLEAUT32.97]\n *\n * Format a variant value as a date and/or time.\n *\n * PARAMS\n *  pVarIn    [I] Variant to format\n *  nFormat   [I] Format type (see notes)\n *  dwFlags   [I] Flags for the format (VAR_ flags from \"oleauto.h\")\n *  pbstrOut  [O] Destination for formatted string.\n *\n * RETURNS\n *  Success: S_OK. pbstrOut contains the formatted value.\n *  Failure: E_INVALIDARG, if any parameter is invalid.\n *           E_OUTOFMEMORY, if enough memory cannot be allocated.\n *           DISP_E_TYPEMISMATCH, if the variant cannot be formatted.\n *\n * NOTES\n *  This function uses LOCALE_USER_DEFAULT when determining the date format\n *  characters to use.\n *  Possible values for the nFormat parameter are:\n *| Value  Meaning\n *| -----  -------\n *|   0    General date format\n *|   1    Long date format\n *|   2    Short date format\n *|   3    Long time format\n *|   4    Short time format\n */\nHRESULT WINAPI VarFormatDateTime(LPVARIANT pVarIn, INT nFormat, ULONG dwFlags, BSTR *pbstrOut)\n{\n  static WCHAR szEmpty[] = { '\\0' };\n  const BYTE* lpFmt = NULL;\n\n  TRACE(\"%s,%d,0x%08x,%p)\\n\", debugstr_variant(pVarIn), nFormat, dwFlags, pbstrOut);\n\n  if (!pVarIn || !pbstrOut || nFormat < 0 || nFormat > 4)\n    return E_INVALIDARG;\n\n  switch (nFormat)\n  {\n  case 0: lpFmt = fmtGeneralDate; break;\n  case 1: lpFmt = fmtLongDate; break;\n  case 2: lpFmt = fmtShortDate; break;\n  case 3: lpFmt = fmtLongTime; break;\n  case 4: lpFmt = fmtShortTime; break;\n  }\n  return VarFormatFromTokens(pVarIn, szEmpty, (BYTE*)lpFmt, dwFlags,\n                              pbstrOut, LOCALE_USER_DEFAULT);\n}\n\n#define GETLOCALENUMBER(type,field) GetLocaleInfoW(LOCALE_USER_DEFAULT, \\\n                                                   type|LOCALE_RETURN_NUMBER, \\\n                                                   (LPWSTR)&numfmt.field, \\\n                                                   sizeof(numfmt.field)/sizeof(WCHAR))\n\n/**********************************************************************\n *              VarFormatNumber [OLEAUT32.107]\n *\n * Format a variant value as a number.\n *\n * PARAMS\n *  pVarIn    [I] Variant to format\n *  nDigits   [I] Number of digits following the decimal point (-1 = user default)\n *  nLeading  [I] Use a leading zero (-2 = user default, -1 = yes, 0 = no)\n *  nParens   [I] Use brackets for values < 0 (-2 = user default, -1 = yes, 0 = no)\n *  nGrouping [I] Use grouping characters (-2 = user default, -1 = yes, 0 = no)\n *  dwFlags   [I] Currently unused, set to zero\n *  pbstrOut  [O] Destination for formatted string.\n *\n * RETURNS\n *  Success: S_OK. pbstrOut contains the formatted value.\n *  Failure: E_INVALIDARG, if any parameter is invalid.\n *           E_OUTOFMEMORY, if enough memory cannot be allocated.\n *           DISP_E_TYPEMISMATCH, if the variant cannot be formatted.\n *\n * NOTES\n *  This function uses LOCALE_USER_DEFAULT when determining the number format\n *  characters to use.\n */\nHRESULT WINAPI VarFormatNumber(LPVARIANT pVarIn, INT nDigits, INT nLeading, INT nParens,\n                               INT nGrouping, ULONG dwFlags, BSTR *pbstrOut)\n{\n  HRESULT hRet;\n  VARIANT vStr;\n\n  TRACE(\"(%s,%d,%d,%d,%d,0x%08x,%p)\\n\", debugstr_variant(pVarIn), nDigits, nLeading,\n        nParens, nGrouping, dwFlags, pbstrOut);\n\n  if (!pVarIn || !pbstrOut || nDigits > 9)\n    return E_INVALIDARG;\n\n  *pbstrOut = NULL;\n\n  V_VT(&vStr) = VT_EMPTY;\n  hRet = VariantCopyInd(&vStr, pVarIn);\n\n  if (SUCCEEDED(hRet))\n    hRet = VariantChangeTypeEx(&vStr, &vStr, LCID_US, 0, VT_BSTR);\n\n  if (SUCCEEDED(hRet))\n  {\n    WCHAR buff[256], decimal[8], thousands[8];\n    NUMBERFMTW numfmt;\n\n    /* Although MSDN makes it clear that the native versions of these functions\n     * are implemented using VarTokenizeFormatString()/VarFormatFromTokens(),\n     * using NLS gives us the same result.\n     */\n    if (nDigits < 0)\n      GETLOCALENUMBER(LOCALE_IDIGITS, NumDigits);\n    else\n      numfmt.NumDigits = nDigits;\n\n    if (nLeading == -2)\n      GETLOCALENUMBER(LOCALE_ILZERO, LeadingZero);\n    else if (nLeading == -1)\n      numfmt.LeadingZero = 1;\n    else\n      numfmt.LeadingZero = 0;\n\n    if (nGrouping == -2)\n    {\n      WCHAR grouping[16];\n      grouping[2] = '\\0';\n      GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, grouping, ARRAY_SIZE(grouping));\n      numfmt.Grouping = grouping[2] == '2' ? 32 : grouping[0] - '0';\n    }\n    else if (nGrouping == -1)\n      numfmt.Grouping = 3; /* 3 = \"n,nnn.nn\" */\n    else\n      numfmt.Grouping = 0; /* 0 = No grouping */\n\n    if (nParens == -2)\n      GETLOCALENUMBER(LOCALE_INEGNUMBER, NegativeOrder);\n    else if (nParens == -1)\n      numfmt.NegativeOrder = 0; /* 0 = \"(xxx)\" */\n    else\n      numfmt.NegativeOrder = 1; /* 1 = \"-xxx\" */\n\n    numfmt.lpDecimalSep = decimal;\n    GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, decimal, ARRAY_SIZE(decimal));\n    numfmt.lpThousandSep = thousands;\n    GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_STHOUSAND, thousands, ARRAY_SIZE(thousands));\n\n    if (GetNumberFormatW(LOCALE_USER_DEFAULT, 0, V_BSTR(&vStr), &numfmt, buff, ARRAY_SIZE(buff)))\n    {\n      *pbstrOut = SysAllocString(buff);\n      if (!*pbstrOut)\n        hRet = E_OUTOFMEMORY;\n    }\n    else\n      hRet = DISP_E_TYPEMISMATCH;\n\n    SysFreeString(V_BSTR(&vStr));\n  }\n  return hRet;\n}\n\n/**********************************************************************\n *              VarFormatPercent [OLEAUT32.117]\n *\n * Format a variant value as a percentage.\n *\n * PARAMS\n *  pVarIn    [I] Variant to format\n *  nDigits   [I] Number of digits following the decimal point (-1 = user default)\n *  nLeading  [I] Use a leading zero (-2 = user default, -1 = yes, 0 = no)\n *  nParens   [I] Use brackets for values < 0 (-2 = user default, -1 = yes, 0 = no)\n *  nGrouping [I] Use grouping characters (-2 = user default, -1 = yes, 0 = no)\n *  dwFlags   [I] Currently unused, set to zero\n *  pbstrOut  [O] Destination for formatted string.\n *\n * RETURNS\n *  Success: S_OK. pbstrOut contains the formatted value.\n *  Failure: E_INVALIDARG, if any parameter is invalid.\n *           E_OUTOFMEMORY, if enough memory cannot be allocated.\n *           DISP_E_OVERFLOW, if overflow occurs during the conversion.\n *           DISP_E_TYPEMISMATCH, if the variant cannot be formatted.\n *\n * NOTES\n *  This function uses LOCALE_USER_DEFAULT when determining the number format\n *  characters to use.\n */\nHRESULT WINAPI VarFormatPercent(LPVARIANT pVarIn, INT nDigits, INT nLeading, INT nParens,\n                                INT nGrouping, ULONG dwFlags, BSTR *pbstrOut)\n{\n  static const WCHAR szPercent[] = { '%','\\0' };\n  static const WCHAR szPercentBracket[] = { '%',')','\\0' };\n  WCHAR buff[256];\n  HRESULT hRet;\n  VARIANT vDbl;\n\n  TRACE(\"(%s,%d,%d,%d,%d,0x%08x,%p)\\n\", debugstr_variant(pVarIn), nDigits, nLeading,\n        nParens, nGrouping, dwFlags, pbstrOut);\n\n  if (!pVarIn || !pbstrOut || nDigits > 9)\n    return E_INVALIDARG;\n\n  *pbstrOut = NULL;\n\n  V_VT(&vDbl) = VT_EMPTY;\n  hRet = VariantCopyInd(&vDbl, pVarIn);\n\n  if (SUCCEEDED(hRet))\n  {\n    hRet = VariantChangeTypeEx(&vDbl, &vDbl, LOCALE_USER_DEFAULT, 0, VT_R8);\n\n    if (SUCCEEDED(hRet))\n    {\n      if (V_R8(&vDbl) > (R8_MAX / 100.0))\n        return DISP_E_OVERFLOW;\n\n      V_R8(&vDbl) *= 100.0;\n      hRet = VarFormatNumber(&vDbl, nDigits, nLeading, nParens,\n                             nGrouping, dwFlags, pbstrOut);\n\n      if (SUCCEEDED(hRet))\n      {\n        DWORD dwLen = strlenW(*pbstrOut);\n        BOOL bBracket = (*pbstrOut)[dwLen] == ')';\n\n        dwLen -= bBracket;\n        memcpy(buff, *pbstrOut, dwLen * sizeof(WCHAR));\n        strcpyW(buff + dwLen, bBracket ? szPercentBracket : szPercent);\n        SysFreeString(*pbstrOut);\n        *pbstrOut = SysAllocString(buff);\n        if (!*pbstrOut)\n          hRet = E_OUTOFMEMORY;\n      }\n    }\n  }\n  return hRet;\n}\n\n/**********************************************************************\n *              VarFormatCurrency [OLEAUT32.127]\n *\n * Format a variant value as a currency.\n *\n * PARAMS\n *  pVarIn    [I] Variant to format\n *  nDigits   [I] Number of digits following the decimal point (-1 = user default)\n *  nLeading  [I] Use a leading zero (-2 = user default, -1 = yes, 0 = no)\n *  nParens   [I] Use brackets for values < 0 (-2 = user default, -1 = yes, 0 = no)\n *  nGrouping [I] Use grouping characters (-2 = user default, -1 = yes, 0 = no)\n *  dwFlags   [I] Currently unused, set to zero\n *  pbstrOut  [O] Destination for formatted string.\n *\n * RETURNS\n *  Success: S_OK. pbstrOut contains the formatted value.\n *  Failure: E_INVALIDARG, if any parameter is invalid.\n *           E_OUTOFMEMORY, if enough memory cannot be allocated.\n *           DISP_E_TYPEMISMATCH, if the variant cannot be formatted.\n *\n * NOTES\n *  This function uses LOCALE_USER_DEFAULT when determining the currency format\n *  characters to use.\n */\nHRESULT WINAPI VarFormatCurrency(LPVARIANT pVarIn, INT nDigits, INT nLeading,\n                                 INT nParens, INT nGrouping, ULONG dwFlags,\n                                 BSTR *pbstrOut)\n{\n  HRESULT hRet;\n  VARIANT vStr;\n\n  TRACE(\"(%s,%d,%d,%d,%d,0x%08x,%p)\\n\", debugstr_variant(pVarIn), nDigits, nLeading,\n        nParens, nGrouping, dwFlags, pbstrOut);\n\n  if (!pVarIn || !pbstrOut || nDigits > 9)\n    return E_INVALIDARG;\n\n  *pbstrOut = NULL;\n\n  V_VT(&vStr) = VT_EMPTY;\n  hRet = VariantCopyInd(&vStr, pVarIn);\n\n  if (SUCCEEDED(hRet))\n    hRet = VariantChangeTypeEx(&vStr, &vStr, LOCALE_USER_DEFAULT, 0, VT_BSTR);\n\n  if (SUCCEEDED(hRet))\n  {\n    WCHAR buff[256], decimal[8], thousands[8], currency[8];\n    CURRENCYFMTW numfmt;\n\n    if (nDigits < 0)\n      GETLOCALENUMBER(LOCALE_IDIGITS, NumDigits);\n    else\n      numfmt.NumDigits = nDigits;\n\n    if (nLeading == -2)\n      GETLOCALENUMBER(LOCALE_ILZERO, LeadingZero);\n    else if (nLeading == -1)\n      numfmt.LeadingZero = 1;\n    else\n      numfmt.LeadingZero = 0;\n\n    if (nGrouping == -2)\n    {\n      WCHAR grouping[16];\n      grouping[2] = '\\0';\n      GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, grouping, ARRAY_SIZE(grouping));\n      numfmt.Grouping = grouping[2] == '2' ? 32 : grouping[0] - '0';\n    }\n    else if (nGrouping == -1)\n      numfmt.Grouping = 3; /* 3 = \"n,nnn.nn\" */\n    else\n      numfmt.Grouping = 0; /* 0 = No grouping */\n\n    if (nParens == -2)\n      GETLOCALENUMBER(LOCALE_INEGCURR, NegativeOrder);\n    else if (nParens == -1)\n      numfmt.NegativeOrder = 0; /* 0 = \"(xxx)\" */\n    else\n      numfmt.NegativeOrder = 1; /* 1 = \"-xxx\" */\n\n    GETLOCALENUMBER(LOCALE_ICURRENCY, PositiveOrder);\n\n    numfmt.lpDecimalSep = decimal;\n    GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, decimal, ARRAY_SIZE(decimal));\n    numfmt.lpThousandSep = thousands;\n    GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, thousands, ARRAY_SIZE(thousands));\n    numfmt.lpCurrencySymbol = currency;\n    GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, currency, ARRAY_SIZE(currency));\n\n    /* use NLS as per VarFormatNumber() */\n    if (GetCurrencyFormatW(LOCALE_USER_DEFAULT, 0, V_BSTR(&vStr), &numfmt, buff, ARRAY_SIZE(buff)))\n    {\n      *pbstrOut = SysAllocString(buff);\n      if (!*pbstrOut)\n        hRet = E_OUTOFMEMORY;\n    }\n    else\n      hRet = DISP_E_TYPEMISMATCH;\n\n    SysFreeString(V_BSTR(&vStr));\n  }\n  return hRet;\n}\n\n/**********************************************************************\n *              VarMonthName [OLEAUT32.129]\n *\n * Print the specified month as localized name.\n *\n * PARAMS\n *  iMonth    [I] month number 1..12\n *  fAbbrev   [I] 0 - full name, !0 - abbreviated name\n *  dwFlags   [I] flag stuff. only VAR_CALENDAR_HIJRI possible.\n *  pbstrOut  [O] Destination for month name\n *\n * RETURNS\n *  Success: S_OK. pbstrOut contains the name.\n *  Failure: E_INVALIDARG, if any parameter is invalid.\n *           E_OUTOFMEMORY, if enough memory cannot be allocated.\n */\nHRESULT WINAPI VarMonthName(INT iMonth, INT fAbbrev, ULONG dwFlags, BSTR *pbstrOut)\n{\n  DWORD localeValue;\n  INT size;\n\n  if ((iMonth < 1)  || (iMonth > 12))\n    return E_INVALIDARG;\n\n  if (dwFlags)\n    FIXME(\"Does not support dwFlags 0x%x, ignoring.\\n\", dwFlags);\n\n  if (fAbbrev)\n\tlocaleValue = LOCALE_SABBREVMONTHNAME1 + iMonth - 1;\n  else\n\tlocaleValue = LOCALE_SMONTHNAME1 + iMonth - 1;\n\n  size = GetLocaleInfoW(LOCALE_USER_DEFAULT,localeValue, NULL, 0);\n  if (!size) {\n    ERR(\"GetLocaleInfo 0x%x failed.\\n\", localeValue);\n    return HRESULT_FROM_WIN32(GetLastError());\n  }\n  *pbstrOut = SysAllocStringLen(NULL,size - 1);\n  if (!*pbstrOut)\n    return E_OUTOFMEMORY;\n  size = GetLocaleInfoW(LOCALE_USER_DEFAULT,localeValue, *pbstrOut, size);\n  if (!size) {\n    ERR(\"GetLocaleInfo of 0x%x failed in 2nd stage?!\\n\", localeValue);\n    SysFreeString(*pbstrOut);\n    return HRESULT_FROM_WIN32(GetLastError());\n  }\n  return S_OK;\n}\n\n/**********************************************************************\n *              VarWeekdayName [OLEAUT32.129]\n *\n * Print the specified weekday as localized name.\n *\n * PARAMS\n *  iWeekday  [I] day of week, 1..7, 1=\"the first day of the week\"\n *  fAbbrev   [I] 0 - full name, !0 - abbreviated name\n *  iFirstDay [I] first day of week,\n *                0=system default, 1=Sunday, 2=Monday, .. (contrary to MSDN)\n *  dwFlags   [I] flag stuff. only VAR_CALENDAR_HIJRI possible.\n *  pbstrOut  [O] Destination for weekday name.\n *\n * RETURNS\n *  Success: S_OK, pbstrOut contains the name.\n *  Failure: E_INVALIDARG, if any parameter is invalid.\n *           E_OUTOFMEMORY, if enough memory cannot be allocated.\n */\nHRESULT WINAPI VarWeekdayName(INT iWeekday, INT fAbbrev, INT iFirstDay,\n                              ULONG dwFlags, BSTR *pbstrOut)\n{\n  DWORD localeValue;\n  INT size;\n\n  /* Windows XP oleaut32.dll doesn't allow iWekday==0, contrary to MSDN */\n  if (iWeekday < 1 || iWeekday > 7)\n    return E_INVALIDARG;\n  if (iFirstDay < 0 || iFirstDay > 7)\n    return E_INVALIDARG;\n  if (!pbstrOut)\n    return E_INVALIDARG;\n\n  if (dwFlags)\n    FIXME(\"Does not support dwFlags 0x%x, ignoring.\\n\", dwFlags);\n\n  /* If we have to use the default firstDay, find which one it is */\n  if (iFirstDay == 0) {\n    DWORD firstDay;\n    localeValue = LOCALE_RETURN_NUMBER | LOCALE_IFIRSTDAYOFWEEK;\n    size = GetLocaleInfoW(LOCALE_USER_DEFAULT, localeValue,\n                          (LPWSTR)&firstDay, sizeof(firstDay) / sizeof(WCHAR));\n    if (!size) {\n      ERR(\"GetLocaleInfo 0x%x failed.\\n\", localeValue);\n      return HRESULT_FROM_WIN32(GetLastError());\n    }\n    iFirstDay = firstDay + 2;\n  }\n\n  /* Determine what we need to return */\n  localeValue = fAbbrev ? LOCALE_SABBREVDAYNAME1 : LOCALE_SDAYNAME1;\n  localeValue += (7 + iWeekday - 1 + iFirstDay - 2) % 7;\n\n  /* Determine the size of the data, allocate memory and retrieve the data */\n  size = GetLocaleInfoW(LOCALE_USER_DEFAULT, localeValue, NULL, 0);\n  if (!size) {\n    ERR(\"GetLocaleInfo 0x%x failed.\\n\", localeValue);\n    return HRESULT_FROM_WIN32(GetLastError());\n  }\n  *pbstrOut = SysAllocStringLen(NULL, size - 1);\n  if (!*pbstrOut)\n    return E_OUTOFMEMORY;\n  size = GetLocaleInfoW(LOCALE_USER_DEFAULT, localeValue, *pbstrOut, size);\n  if (!size) {\n    ERR(\"GetLocaleInfo 0x%x failed in 2nd stage?!\\n\", localeValue);\n    SysFreeString(*pbstrOut);\n    return HRESULT_FROM_WIN32(GetLastError());\n  }\n  return S_OK;\n}\n#endif\n"
  },
  {
    "path": "ole2disp/var/variant.c",
    "content": "/*\n * VARIANT16 \n *\n * Copyright 1998 Jean-Claude Cote\n * Copyright 2003 Jon Griffiths\n * Copyright 2005 Daniel Remenak\n * Copyright 2006 Google (Benjamin Arai)\n *\n * The algorithm for conversion from Julian days to day/month/year is based on\n * that devised by Henry Fliegel, as implemented in PostgreSQL, which is\n * Copyright 1994-7 Regents of the University of California\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#define NONAMELESSUNION\n#define NONAMELESSSTRUCT\n#include \"config.h\"\n\n#include <string.h>\n#include <stdlib.h>\n#include <stdarg.h>\n\n#define COBJMACROS\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/unicode.h\"\n#include \"winerror.h\"\n#include \"variant.h\"\n#include \"resource.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(variant);\n#define strcmpiA strcmpi\n#define strcmpA strcmp\n#define strchrA strchr\n#define strlenA strlen\n#define sprintfA sprintf\n#define strspnA strspn\n#define isdigitA isdigit\n#define strtoulA strtoul\n#define isalphaA isalpha\n#define strncmpiA _strnicmp\n#define isspaceA isspace\n\nstatic CRITICAL_SECTION cache_cs;\nstatic CRITICAL_SECTION_DEBUG critsect_debug =\n{\n    0, 0, &cache_cs,\n    { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },\n      0, 0, { (DWORD_PTR)(__FILE__ \": cache_cs\") }\n};\nstatic CRITICAL_SECTION cache_cs = { &critsect_debug, -1, 0, 0, 0, 0 };\n\n/* Convert a variant from one type to another */\nstatic inline HRESULT VARIANT_Coerce(VARIANTARG16* pd, LCID lcid, USHORT wFlags,\n                                     VARIANTARG16* ps, VARTYPE vt)\n{\n  HRESULT res = DISP_E_TYPEMISMATCH;\n  VARTYPE vtFrom =  V_TYPE(ps);\n  DWORD dwFlags = 0;\n\n  TRACE(\"(%s,0x%08x,0x%04x,%s,%s)\\n\", debugstr_variant16(pd), lcid, wFlags,\n        debugstr_variant16(ps), debugstr_vt(vt));\n\n  if (vt == VT_BSTR || vtFrom == VT_BSTR)\n  {\n    /* All flags passed to low level function are only used for\n     * changing to or from strings. Map these here.\n     */\n    if (wFlags & VARIANT_LOCALBOOL)\n      dwFlags |= VAR_LOCALBOOL;\n    if (wFlags & VARIANT_CALENDAR_HIJRI)\n      dwFlags |= VAR_CALENDAR_HIJRI;\n    if (wFlags & VARIANT_CALENDAR_THAI)\n      dwFlags |= VAR_CALENDAR_THAI;\n    if (wFlags & VARIANT_CALENDAR_GREGORIAN)\n      dwFlags |= VAR_CALENDAR_GREGORIAN;\n    if (wFlags & VARIANT_NOUSEROVERRIDE)\n      dwFlags |= LOCALE_NOUSEROVERRIDE;\n    if (wFlags & VARIANT_USE_NLS)\n      dwFlags |= LOCALE_USE_NLS;\n  }\n\n  /* Map int/uint to i4/ui4 */\n  if (vt == VT_INT)\n    vt = VT_I4;\n  else if (vt == VT_UINT)\n    vt = VT_UI4;\n\n  if (vtFrom == VT_INT)\n    vtFrom = VT_I4;\n  else if (vtFrom == VT_UINT)\n    vtFrom = VT_UI4;\n\n  if (vt == vtFrom)\n     return VariantCopy16(pd, ps);\n\n  if (wFlags & VARIANT_NOVALUEPROP && vtFrom == VT_DISPATCH && vt != VT_UNKNOWN)\n  {\n    /* VARIANT_NOVALUEPROP prevents IDispatch objects from being coerced by\n     * accessing the default object property.\n     */\n    return DISP_E_TYPEMISMATCH;\n  }\n\n  switch (vt)\n  {\n  case VT_EMPTY:\n    if (vtFrom == VT_NULL)\n      return DISP_E_TYPEMISMATCH;\n    /* ... Fall through */\n  case VT_NULL:\n    if (vtFrom <= VT_UINT && vtFrom != (VARTYPE)15 && vtFrom != VT_ERROR)\n    {\n      res = VariantClear16( pd );\n      if (vt == VT_NULL && SUCCEEDED(res))\n        V_VT(pd) = VT_NULL;\n    }\n    return res;\n\n  case VT_I1:\n    switch (vtFrom)\n    {\n    case VT_EMPTY:    V_I1(pd) = 0; return S_OK;\n    case VT_I2:       return VarI1FromI216(V_I2(ps), &V_I1(pd));\n    case VT_I4:       return VarI1FromI416(V_I4(ps), &V_I1(pd));\n    case VT_UI1:      V_I1(pd) = V_UI1(ps); return S_OK;\n    case VT_UI2:      return VarI1FromUI216(V_UI2(ps), &V_I1(pd));\n    case VT_UI4:      return VarI1FromUI416(V_UI4(ps), &V_I1(pd));\n    case VT_I8:       return VarI1FromI816(V_I8(ps), &V_I1(pd));\n    case VT_UI8:      return VarI1FromUI816(V_UI8(ps), &V_I1(pd));\n    case VT_R4:       return VarI1FromR416(V_R4(ps), &V_I1(pd));\n    case VT_R8:       return VarI1FromR816(V_R8(ps), &V_I1(pd));\n    case VT_DATE:     return VarI1FromDate16(V_DATE(ps), &V_I1(pd));\n    case VT_BOOL:     return VarI1FromBool16(V_BOOL(ps), &V_I1(pd));\n    case VT_CY:       return VarI1FromCy16(V_CY(ps), &V_I1(pd));\n#ifdef AVAIL_32BIT_VAR\n    case VT_DECIMAL:  return VarI1FromDec16(&V_DECIMAL(ps), &V_I1(pd) );\n#endif\n    case VT_DISPATCH: return VarI1FromDisp16(V_DISPATCH(ps), lcid, &V_I1(pd) );\n    case VT_BSTR:     return VarI1FromStr16(V_BSTR16(ps), lcid, dwFlags, &V_I1(pd) );\n    }\n    break;\n\n  case VT_I2:\n    switch (vtFrom)\n    {\n    case VT_EMPTY:    V_I2(pd) = 0; return S_OK;\n    case VT_I1:       return VarI2FromI116(V_I1(ps), &V_I2(pd));\n    case VT_I4:       return VarI2FromI416(V_I4(ps), &V_I2(pd));\n    case VT_UI1:      return VarI2FromUI116(V_UI1(ps), &V_I2(pd));\n    case VT_UI2:      V_I2(pd) = V_UI2(ps); return S_OK;\n    case VT_UI4:      return VarI2FromUI416(V_UI4(ps), &V_I2(pd));\n    case VT_I8:       return VarI2FromI816(V_I8(ps), &V_I2(pd));\n    case VT_UI8:      return VarI2FromUI816(V_UI8(ps), &V_I2(pd));\n    case VT_R4:       return VarI2FromR416(V_R4(ps), &V_I2(pd));\n    case VT_R8:       return VarI2FromR816(V_R8(ps), &V_I2(pd));\n    case VT_DATE:     return VarI2FromDate16(V_DATE(ps), &V_I2(pd));\n    case VT_BOOL:     return VarI2FromBool16(V_BOOL(ps), &V_I2(pd));\n    case VT_CY:       return VarI2FromCy16(V_CY(ps), &V_I2(pd));\n#ifdef AVAIL_32BIT_VAR\n    case VT_DECIMAL:  return VarI2FromDec16(&V_DECIMAL(ps), &V_I2(pd));\n#endif\n    case VT_DISPATCH: return VarI2FromDisp16(V_DISPATCH(ps), lcid, &V_I2(pd));\n    case VT_BSTR:     return VarI2FromStr16(V_BSTR16(ps), lcid, dwFlags, &V_I2(pd));\n    }\n    break;\n\n  case VT_I4:\n    switch (vtFrom)\n    {\n    case VT_EMPTY:    V_I4(pd) = 0; return S_OK;\n    case VT_I1:       return VarI4FromI116(V_I1(ps), &V_I4(pd));\n    case VT_I2:       return VarI4FromI216(V_I2(ps), &V_I4(pd));\n    case VT_UI1:      return VarI4FromUI116(V_UI1(ps), &V_I4(pd));\n    case VT_UI2:      return VarI4FromUI216(V_UI2(ps), &V_I4(pd));\n    case VT_UI4:      V_I4(pd) = V_UI4(ps); return S_OK;\n    case VT_I8:       return VarI4FromI816(V_I8(ps), &V_I4(pd));\n    case VT_UI8:      return VarI4FromUI816(V_UI8(ps), &V_I4(pd));\n    case VT_R4:       return VarI4FromR416(V_R4(ps), &V_I4(pd));\n    case VT_R8:       return VarI4FromR816(V_R8(ps), &V_I4(pd));\n    case VT_DATE:     return VarI4FromDate16(V_DATE(ps), &V_I4(pd));\n    case VT_BOOL:     return VarI4FromBool16(V_BOOL(ps), &V_I4(pd));\n    case VT_CY:       return VarI4FromCy16(V_CY(ps), &V_I4(pd));\n#ifdef AVAIL_32BIT_VAR\n    case VT_DECIMAL:  return VarI4FromDec16(&V_DECIMAL(ps), &V_I4(pd));\n#endif\n    case VT_DISPATCH: return VarI4FromDisp16(V_DISPATCH(ps), lcid, &V_I4(pd));\n    case VT_BSTR:     return VarI4FromStr16(V_BSTR16(ps), lcid, dwFlags, &V_I4(pd));\n    }\n    break;\n\n  case VT_UI1:\n    switch (vtFrom)\n    {\n    case VT_EMPTY:    V_UI1(pd) = 0; return S_OK;\n    case VT_I1:       V_UI1(pd) = V_I1(ps); return S_OK;\n    case VT_I2:       return VarUI1FromI216(V_I2(ps), &V_UI1(pd));\n    case VT_I4:       return VarUI1FromI416(V_I4(ps), &V_UI1(pd));\n    case VT_UI2:      return VarUI1FromUI216(V_UI2(ps), &V_UI1(pd));\n    case VT_UI4:      return VarUI1FromUI416(V_UI4(ps), &V_UI1(pd));\n    case VT_I8:       return VarUI1FromI816(V_I8(ps), &V_UI1(pd));\n    case VT_UI8:      return VarUI1FromUI816(V_UI8(ps), &V_UI1(pd));\n    case VT_R4:       return VarUI1FromR416(V_R4(ps), &V_UI1(pd));\n    case VT_R8:       return VarUI1FromR816(V_R8(ps), &V_UI1(pd));\n    case VT_DATE:     return VarUI1FromDate16(V_DATE(ps), &V_UI1(pd));\n    case VT_BOOL:     return VarUI1FromBool16(V_BOOL(ps), &V_UI1(pd));\n    case VT_CY:       return VarUI1FromCy16(V_CY(ps), &V_UI1(pd));\n#ifdef AVAIL_32BIT_VAR\n    case VT_DECIMAL:  return VarUI1FromDec16(&V_DECIMAL(ps), &V_UI1(pd));\n#endif\n    case VT_DISPATCH: return VarUI1FromDisp16(V_DISPATCH(ps), lcid, &V_UI1(pd));\n    case VT_BSTR:     return VarUI1FromStr16(V_BSTR16(ps), lcid, dwFlags, &V_UI1(pd));\n    }\n    break;\n\n  case VT_UI2:\n    switch (vtFrom)\n    {\n    case VT_EMPTY:    V_UI2(pd) = 0; return S_OK;\n    case VT_I1:       return VarUI2FromI116(V_I1(ps), &V_UI2(pd));\n    case VT_I2:       V_UI2(pd) = V_I2(ps); return S_OK;\n    case VT_I4:       return VarUI2FromI416(V_I4(ps), &V_UI2(pd));\n    case VT_UI1:      return VarUI2FromUI116(V_UI1(ps), &V_UI2(pd));\n    case VT_UI4:      return VarUI2FromUI416(V_UI4(ps), &V_UI2(pd));\n    case VT_I8:       return VarUI4FromI816(V_I8(ps), &V_UI4(pd));\n    case VT_UI8:      return VarUI4FromUI816(V_UI8(ps), &V_UI4(pd));\n    case VT_R4:       return VarUI2FromR416(V_R4(ps), &V_UI2(pd));\n    case VT_R8:       return VarUI2FromR816(V_R8(ps), &V_UI2(pd));\n    case VT_DATE:     return VarUI2FromDate16(V_DATE(ps), &V_UI2(pd));\n    case VT_BOOL:     return VarUI2FromBool16(V_BOOL(ps), &V_UI2(pd));\n    case VT_CY:       return VarUI2FromCy16(V_CY(ps), &V_UI2(pd));\n#ifdef AVAIL_32BIT_VAR\n    case VT_DECIMAL:  return VarUI2FromDec16(&V_DECIMAL(ps), &V_UI2(pd));\n#endif\n    case VT_DISPATCH: return VarUI2FromDisp16(V_DISPATCH(ps), lcid, &V_UI2(pd));\n    case VT_BSTR:     return VarUI2FromStr16(V_BSTR16(ps), lcid, dwFlags, &V_UI2(pd));\n    }\n    break;\n\n  case VT_UI4:\n    switch (vtFrom)\n    {\n    case VT_EMPTY:    V_UI4(pd) = 0; return S_OK;\n    case VT_I1:       return VarUI4FromI116(V_I1(ps), &V_UI4(pd));\n    case VT_I2:       return VarUI4FromI216(V_I2(ps), &V_UI4(pd));\n    case VT_I4:       V_UI4(pd) = V_I4(ps); return S_OK;\n    case VT_UI1:      return VarUI4FromUI116(V_UI1(ps), &V_UI4(pd));\n    case VT_UI2:      return VarUI4FromUI216(V_UI2(ps), &V_UI4(pd));\n    case VT_I8:       return VarUI4FromI816(V_I8(ps), &V_UI4(pd));\n    case VT_UI8:      return VarUI4FromUI816(V_UI8(ps), &V_UI4(pd));\n    case VT_R4:       return VarUI4FromR416(V_R4(ps), &V_UI4(pd));\n    case VT_R8:       return VarUI4FromR816(V_R8(ps), &V_UI4(pd));\n    case VT_DATE:     return VarUI4FromDate16(V_DATE(ps), &V_UI4(pd));\n    case VT_BOOL:     return VarUI4FromBool16(V_BOOL(ps), &V_UI4(pd));\n    case VT_CY:       return VarUI4FromCy16(V_CY(ps), &V_UI4(pd));\n#ifdef AVAIL_32BIT_VAR\n    case VT_DECIMAL:  return VarUI4FromDec16(&V_DECIMAL(ps), &V_UI4(pd));\n#endif\n    case VT_DISPATCH: return VarUI4FromDisp16(V_DISPATCH(ps), lcid, &V_UI4(pd));\n    case VT_BSTR:     return VarUI4FromStr16(V_BSTR16(ps), lcid, dwFlags, &V_UI4(pd));\n    }\n    break;\n\n  case VT_UI8:\n    switch (vtFrom)\n    {\n    case VT_EMPTY:    V_UI8(pd) = 0; return S_OK;\n    case VT_I4:       if (V_I4(ps) < 0) return DISP_E_OVERFLOW; V_UI8(pd) = V_I4(ps); return S_OK;\n    case VT_I1:       return VarUI8FromI116(V_I1(ps), &V_UI8(pd));\n    case VT_I2:       return VarUI8FromI216(V_I2(ps), &V_UI8(pd));\n    case VT_UI1:      return VarUI8FromUI116(V_UI1(ps), &V_UI8(pd));\n    case VT_UI2:      return VarUI8FromUI216(V_UI2(ps), &V_UI8(pd));\n    case VT_UI4:      return VarUI8FromUI416(V_UI4(ps), &V_UI8(pd));\n    case VT_I8:       V_UI8(pd) = V_I8(ps); return S_OK;\n    case VT_R4:       return VarUI8FromR416(V_R4(ps), &V_UI8(pd));\n    case VT_R8:       return VarUI8FromR816(V_R8(ps), &V_UI8(pd));\n    case VT_DATE:     return VarUI8FromDate16(V_DATE(ps), &V_UI8(pd));\n    case VT_BOOL:     return VarUI8FromBool16(V_BOOL(ps), &V_UI8(pd));\n    case VT_CY:       return VarUI8FromCy16(V_CY(ps), &V_UI8(pd));\n#ifdef AVAIL_32BIT_VAR\n    case VT_DECIMAL:  return VarUI8FromDec16(&V_DECIMAL(ps), &V_UI8(pd));\n#endif\n    case VT_DISPATCH: return VarUI8FromDisp16(V_DISPATCH(ps), lcid, &V_UI8(pd));\n    case VT_BSTR:     return VarUI8FromStr16(V_BSTR16(ps), lcid, dwFlags, &V_UI8(pd));\n    }\n    break;\n\n  case VT_I8:\n    switch (vtFrom)\n    {\n    case VT_EMPTY:    V_I8(pd) = 0; return S_OK;\n    case VT_I4:       V_I8(pd) = V_I4(ps); return S_OK;\n    case VT_I1:       return VarI8FromI116(V_I1(ps), &V_I8(pd));\n    case VT_I2:       return VarI8FromI216(V_I2(ps), &V_I8(pd));\n    case VT_UI1:      return VarI8FromUI116(V_UI1(ps), &V_I8(pd));\n    case VT_UI2:      return VarI8FromUI216(V_UI2(ps), &V_I8(pd));\n    case VT_UI4:      return VarI8FromUI416(V_UI4(ps), &V_I8(pd));\n    case VT_UI8:      V_I8(pd) = V_UI8(ps); return S_OK;\n    case VT_R4:       return VarI8FromR416(V_R4(ps), &V_I8(pd));\n    case VT_R8:       return VarI8FromR816(V_R8(ps), &V_I8(pd));\n    case VT_DATE:     return VarI8FromDate16(V_DATE(ps), &V_I8(pd));\n    case VT_BOOL:     return VarI8FromBool16(V_BOOL(ps), &V_I8(pd));\n    case VT_CY:       return VarI8FromCy16(V_CY(ps), &V_I8(pd));\n#ifdef AVAIL_32BIT_VAR\n    case VT_DECIMAL:  return VarI8FromDec16(&V_DECIMAL(ps), &V_I8(pd));\n#endif\n    case VT_DISPATCH: return VarI8FromDisp16(V_DISPATCH(ps), lcid, &V_I8(pd));\n    case VT_BSTR:     return VarI8FromStr16(V_BSTR16(ps), lcid, dwFlags, &V_I8(pd));\n    }\n    break;\n\n  case VT_R4:\n    switch (vtFrom)\n    {\n    case VT_EMPTY:    V_R4(pd) = 0.0f; return S_OK;\n    case VT_I1:       return VarR4FromI116(V_I1(ps), &V_R4(pd));\n    case VT_I2:       return VarR4FromI216(V_I2(ps), &V_R4(pd));\n    case VT_I4:       return VarR4FromI416(V_I4(ps), &V_R4(pd));\n    case VT_UI1:      return VarR4FromUI116(V_UI1(ps), &V_R4(pd));\n    case VT_UI2:      return VarR4FromUI216(V_UI2(ps), &V_R4(pd));\n    case VT_UI4:      return VarR4FromUI416(V_UI4(ps), &V_R4(pd));\n    case VT_I8:       return VarR4FromI816(V_I8(ps), &V_R4(pd));\n    case VT_UI8:      return VarR4FromUI816(V_UI8(ps), &V_R4(pd));\n    case VT_R8:       return VarR4FromR816(V_R8(ps), &V_R4(pd));\n    case VT_DATE:     return VarR4FromDate16(V_DATE(ps), &V_R4(pd));\n    case VT_BOOL:     return VarR4FromBool16(V_BOOL(ps), &V_R4(pd));\n    case VT_CY:       return VarR4FromCy16(V_CY(ps), &V_R4(pd));\n#ifdef AVAIL_32BIT_VAR\n    case VT_DECIMAL:  return VarR4FromDec16(&V_DECIMAL(ps), &V_R4(pd));\n#endif\n    case VT_DISPATCH: return VarR4FromDisp16(V_DISPATCH(ps), lcid, &V_R4(pd));\n    case VT_BSTR:     return VarR4FromStr16(V_BSTR16(ps), lcid, dwFlags, &V_R4(pd));\n    }\n    break;\n\n  case VT_R8:\n    switch (vtFrom)\n    {\n    case VT_EMPTY:    V_R8(pd) = 0.0; return S_OK;\n    case VT_I1:       return VarR8FromI116(V_I1(ps), &V_R8(pd));\n    case VT_I2:       return VarR8FromI216(V_I2(ps), &V_R8(pd));\n    case VT_I4:       return VarR8FromI416(V_I4(ps), &V_R8(pd));\n    case VT_UI1:      return VarR8FromUI116(V_UI1(ps), &V_R8(pd));\n    case VT_UI2:      return VarR8FromUI216(V_UI2(ps), &V_R8(pd));\n    case VT_UI4:      return VarR8FromUI416(V_UI4(ps), &V_R8(pd));\n    case VT_I8:       return VarR8FromI816(V_I8(ps), &V_R8(pd));\n    case VT_UI8:      return VarR8FromUI816(V_UI8(ps), &V_R8(pd));\n    case VT_R4:       return VarR8FromR416(V_R4(ps), &V_R8(pd));\n    case VT_DATE:     return VarR8FromDate16(V_DATE(ps), &V_R8(pd));\n    case VT_BOOL:     return VarR8FromBool16(V_BOOL(ps), &V_R8(pd));\n    case VT_CY:       return VarR8FromCy16(V_CY(ps), &V_R8(pd));\n#ifdef AVAIL_32BIT_VAR\n    case VT_DECIMAL:  return VarR8FromDec16(&V_DECIMAL(ps), &V_R8(pd));\n#endif\n    case VT_DISPATCH: return VarR8FromDisp16(V_DISPATCH(ps), lcid, &V_R8(pd));\n    case VT_BSTR:     return VarR8FromStr16(V_BSTR16(ps), lcid, dwFlags, &V_R8(pd));\n    }\n    break;\n\n  case VT_DATE:\n    switch (vtFrom)\n    {\n    case VT_EMPTY:    V_DATE(pd) = 0.0; return S_OK;\n    case VT_I1:       return VarDateFromI116(V_I1(ps), &V_DATE(pd));\n    case VT_I2:       return VarDateFromI216(V_I2(ps), &V_DATE(pd));\n    case VT_I4:       return VarDateFromI416(V_I4(ps), &V_DATE(pd));\n    case VT_UI1:      return VarDateFromUI116(V_UI1(ps), &V_DATE(pd));\n    case VT_UI2:      return VarDateFromUI216(V_UI2(ps), &V_DATE(pd));\n    case VT_UI4:      return VarDateFromUI416(V_UI4(ps), &V_DATE(pd));\n    case VT_I8:       return VarDateFromI816(V_I8(ps), &V_DATE(pd));\n    case VT_UI8:      return VarDateFromUI816(V_UI8(ps), &V_DATE(pd));\n    case VT_R4:       return VarDateFromR416(V_R4(ps), &V_DATE(pd));\n    case VT_R8:       return VarDateFromR816(V_R8(ps), &V_DATE(pd));\n    case VT_BOOL:     return VarDateFromBool16(V_BOOL(ps), &V_DATE(pd));\n    case VT_CY:       return VarDateFromCy16(V_CY(ps), &V_DATE(pd));\n#ifdef AVAIL_32BIT_VAR\n    case VT_DECIMAL:  return VarDateFromDec16(&V_DECIMAL(ps), &V_DATE(pd));\n#endif\n    case VT_DISPATCH: return VarDateFromDisp16(V_DISPATCH(ps), lcid, &V_DATE(pd));\n    case VT_BSTR:     return VarDateFromStr16(V_BSTR16(ps), lcid, dwFlags, &V_DATE(pd));\n    }\n    break;\n\n  case VT_BOOL:\n    switch (vtFrom)\n    {\n    case VT_EMPTY:    V_BOOL(pd) = 0; return S_OK;\n    case VT_I1:       return VarBoolFromI116(V_I1(ps), &V_BOOL(pd));\n    case VT_I2:       return VarBoolFromI216(V_I2(ps), &V_BOOL(pd));\n    case VT_I4:       return VarBoolFromI416(V_I4(ps), &V_BOOL(pd));\n    case VT_UI1:      return VarBoolFromUI116(V_UI1(ps), &V_BOOL(pd));\n    case VT_UI2:      return VarBoolFromUI216(V_UI2(ps), &V_BOOL(pd));\n    case VT_UI4:      return VarBoolFromUI416(V_UI4(ps), &V_BOOL(pd));\n    case VT_I8:       return VarBoolFromI816(V_I8(ps), &V_BOOL(pd));\n    case VT_UI8:      return VarBoolFromUI816(V_UI8(ps), &V_BOOL(pd));\n    case VT_R4:       return VarBoolFromR416(V_R4(ps), &V_BOOL(pd));\n    case VT_R8:       return VarBoolFromR816(V_R8(ps), &V_BOOL(pd));\n    case VT_DATE:     return VarBoolFromDate16(V_DATE(ps), &V_BOOL(pd));\n    case VT_CY:       return VarBoolFromCy16(V_CY(ps), &V_BOOL(pd));\n#ifdef AVAIL_32BIT_VAR\n    case VT_DECIMAL:  return VarBoolFromDec16(&V_DECIMAL(ps), &V_BOOL(pd));\n#endif\n    case VT_DISPATCH: return VarBoolFromDisp16(V_DISPATCH(ps), lcid, &V_BOOL(pd));\n    case VT_BSTR:     return VarBoolFromStr16(V_BSTR16(ps), lcid, dwFlags, &V_BOOL(pd));\n    }\n    break;\n\n  case VT_BSTR:\n    switch (vtFrom)\n    {\n    case VT_EMPTY:\n      V_BSTR(pd) = SysAllocStringLen16(NULL, 0);\n      return V_BSTR(pd) ? S_OK : E_OUTOFMEMORY;\n    case VT_BOOL:\n      if (wFlags & (VARIANT_ALPHABOOL|VARIANT_LOCALBOOL))\n         return VarBstrFromBool16(V_BOOL(ps), lcid, dwFlags, &V_BSTR(pd));\n      return VarBstrFromI216(V_BOOL(ps), lcid, dwFlags, &V_BSTR(pd));\n    case VT_I1:       return VarBstrFromI116(V_I1(ps), lcid, dwFlags, &V_BSTR(pd));\n    case VT_I2:       return VarBstrFromI216(V_I2(ps), lcid, dwFlags, &V_BSTR(pd));\n    case VT_I4:       return VarBstrFromI416(V_I4(ps), lcid, dwFlags, &V_BSTR(pd));\n    case VT_UI1:      return VarBstrFromUI116(V_UI1(ps), lcid, dwFlags, &V_BSTR(pd));\n    case VT_UI2:      return VarBstrFromUI216(V_UI2(ps), lcid, dwFlags, &V_BSTR(pd));\n    case VT_UI4:      return VarBstrFromUI416(V_UI4(ps), lcid, dwFlags, &V_BSTR(pd));\n    case VT_I8:       return VarBstrFromI816(V_I8(ps), lcid, dwFlags, &V_BSTR(pd));\n    case VT_UI8:      return VarBstrFromUI816(V_UI8(ps), lcid, dwFlags, &V_BSTR(pd));\n    case VT_R4:       return VarBstrFromR416(V_R4(ps), lcid, dwFlags, &V_BSTR(pd));\n    case VT_R8:       return VarBstrFromR816(V_R8(ps), lcid, dwFlags, &V_BSTR(pd));\n    case VT_DATE:     return VarBstrFromDate16(V_DATE(ps), lcid, dwFlags, &V_BSTR(pd));\n    case VT_CY:       return VarBstrFromCy16(V_CY(ps), lcid, dwFlags, &V_BSTR(pd));\n#ifdef AVAIL_32BIT_VAR\n    case VT_DECIMAL:  return VarBstrFromDec16(&V_DECIMAL(ps), lcid, dwFlags, &V_BSTR(pd));\n#endif\n    case VT_DISPATCH: return VarBstrFromDisp16(V_DISPATCH(ps), lcid, dwFlags, &V_BSTR(pd));\n    }\n    break;\n\n  case VT_CY:\n    switch (vtFrom)\n    {\n    case VT_EMPTY:    V_CY(pd).int64 = 0; return S_OK;\n    case VT_I1:       return VarCyFromI116(V_I1(ps), &V_CY(pd));\n    case VT_I2:       return VarCyFromI216(V_I2(ps), &V_CY(pd));\n    case VT_I4:       return VarCyFromI416(V_I4(ps), &V_CY(pd));\n    case VT_UI1:      return VarCyFromUI116(V_UI1(ps), &V_CY(pd));\n    case VT_UI2:      return VarCyFromUI216(V_UI2(ps), &V_CY(pd));\n    case VT_UI4:      return VarCyFromUI416(V_UI4(ps), &V_CY(pd));\n    case VT_I8:       return VarCyFromI816(V_I8(ps), &V_CY(pd));\n    case VT_UI8:      return VarCyFromUI816(V_UI8(ps), &V_CY(pd));\n    case VT_R4:       return VarCyFromR416(V_R4(ps), &V_CY(pd));\n    case VT_R8:       return VarCyFromR816(V_R8(ps), &V_CY(pd));\n    case VT_DATE:     return VarCyFromDate16(V_DATE(ps), &V_CY(pd));\n    case VT_BOOL:     return VarCyFromBool16(V_BOOL(ps), &V_CY(pd));\n#ifdef AVAIL_32BIT_VAR\n    case VT_DECIMAL:  return VarCyFromDec16(&V_DECIMAL(ps), &V_CY(pd));\n#endif\n    case VT_DISPATCH: return VarCyFromDisp16(V_DISPATCH(ps), lcid, &V_CY(pd));\n    case VT_BSTR:     return VarCyFromStr16(V_BSTR16(ps), lcid, dwFlags, &V_CY(pd));\n    }\n    break;\n#ifdef AVAIL_32BIT_VAR\n  case VT_DECIMAL:\n    switch (vtFrom)\n    {\n    case VT_EMPTY:\n    case VT_BOOL:\n       DEC_SIGNSCALE(&V_DECIMAL(pd)) = SIGNSCALE(DECIMAL_POS,0);\n       DEC_HI32(&V_DECIMAL(pd)) = 0;\n       DEC_MID32(&V_DECIMAL(pd)) = 0;\n        /* VarDecFromBool16() coerces to -1/0, ChangeTypeEx() coerces to 1/0.\n         * VT_NULL and VT_EMPTY always give a 0 value.\n         */\n       DEC_LO32(&V_DECIMAL(pd)) = vtFrom == VT_BOOL && V_BOOL(ps) ? 1 : 0;\n       return S_OK;\n    case VT_I1:       return VarDecFromI116(V_I1(ps), &V_DECIMAL(pd));\n    case VT_I2:       return VarDecFromI216(V_I2(ps), &V_DECIMAL(pd));\n    case VT_I4:       return VarDecFromI416(V_I4(ps), &V_DECIMAL(pd));\n    case VT_UI1:      return VarDecFromUI116(V_UI1(ps), &V_DECIMAL(pd));\n    case VT_UI2:      return VarDecFromUI216(V_UI2(ps), &V_DECIMAL(pd));\n    case VT_UI4:      return VarDecFromUI416(V_UI4(ps), &V_DECIMAL(pd));\n    case VT_I8:       return VarDecFromI816(V_I8(ps), &V_DECIMAL(pd));\n    case VT_UI8:      return VarDecFromUI816(V_UI8(ps), &V_DECIMAL(pd));\n    case VT_R4:       return VarDecFromR416(V_R4(ps), &V_DECIMAL(pd));\n    case VT_R8:       return VarDecFromR816(V_R8(ps), &V_DECIMAL(pd));\n    case VT_DATE:     return VarDecFromDate16(V_DATE(ps), &V_DECIMAL(pd));\n    case VT_CY:       return VarDecFromCy16(V_CY(ps), &V_DECIMAL(pd));\n    case VT_DISPATCH: return VarDecFromDisp16(V_DISPATCH(ps), lcid, &V_DECIMAL(pd));\n    case VT_BSTR:     return VarDecFromStr16(V_BSTR16(ps), lcid, dwFlags, &V_DECIMAL(pd));\n    }\n    break;\n#endif\n  case VT_UNKNOWN:\n#ifdef AVAIL_32BIT_VAR\n    switch (vtFrom)\n    {\n    case VT_DISPATCH:\n      if (V_DISPATCH(ps) == NULL)\n      {\n        V_UNKNOWN(pd) = NULL;\n        res = S_OK;\n      }\n      else\n        res = IDispatch16_QueryInterface(V_DISPATCH(ps), MapLS(&IID_IUnknown), MapLS((LPVOID*)&V_UNKNOWN(pd)));\n      break;\n    }\n    break;\n#endif\n\n#ifdef AVAIL_32BIT_VAR\n  case VT_DISPATCH:\n    switch (vtFrom)\n    {\n    case VT_UNKNOWN:\n      if (V_UNKNOWN(ps) == NULL)\n      {\n        V_DISPATCH(pd) = NULL;\n        res = S_OK;\n      }\n      else\n        res = IUnknown16_QueryInterface(V_UNKNOWN(ps), MapLS(&IID_IDispatch), MapLS((LPVOID*)&V_DISPATCH(pd)));\n      break;\n    }\n    break;\n#endif\n\n  case VT_RECORD:\n    break;\n  }\n  return res;\n}\n\n/* Coerce to/from an array */\nstatic inline HRESULT VARIANT_CoerceArray(VARIANTARG16* pd, VARIANTARG16* ps, VARTYPE vt)\n{\n  if (vt == VT_BSTR && V_VT(ps) == (VT_ARRAY|VT_UI1))\n    return BstrFromVector16(V_ARRAY(ps), &V_BSTR(pd));\n\n  if (V_VT(ps) == VT_BSTR && vt == (VT_ARRAY|VT_UI1))\n    return VectorFromBstr16(V_BSTR(ps), &V_ARRAY(pd));\n\n  if (V_VT(ps) == vt)\n    return SafeArrayCopy16(V_ARRAY(ps), &V_ARRAY(pd));\n\n  return DISP_E_TYPEMISMATCH;\n}\n\nstatic HRESULT VARIANT_FetchDispatchValue(LPVARIANT16 pvDispatch, LPVARIANT16 pValue)\n{\n    HRESULT hres;\n    static DISPPARAMS emptyParams = { NULL, NULL, 0, 0 };\n\n    if ((V_VT(pvDispatch) & VT_TYPEMASK) == VT_DISPATCH) {\n        if (NULL == V_DISPATCH(pvDispatch)) return DISP_E_TYPEMISMATCH;\n#if 0\n        hres = IDispatch16_Invoke(V_DISPATCH(pvDispatch), DISPID_VALUE, MapLS(&IID_NULL),\n            LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, MapLS(&emptyParams), pValue,\n            NULL, NULL);\n#else\n        FIXME(\"\\n\");\n#endif\n    } else {\n        hres = DISP_E_TYPEMISMATCH;\n    }\n    return hres;\n}\n\n/******************************************************************************\n * Check if a variants type is valid.\n */\nstatic inline HRESULT VARIANT_ValidateType(VARTYPE vt)\n{\n  VARTYPE vtExtra = vt & VT_EXTRA_TYPE;\n\n  vt &= VT_TYPEMASK;\n\n  if (!(vtExtra & (VT_VECTOR|VT_RESERVED)))\n  {\n    if (vt < VT_VOID || vt == VT_RECORD || vt == VT_CLSID)\n    {\n      if ((vtExtra & (VT_BYREF|VT_ARRAY)) && vt <= VT_NULL)\n        return DISP_E_BADVARTYPE;\n      if (vt != (VARTYPE)15)\n        return S_OK;\n    }\n  }\n  return DISP_E_BADVARTYPE;\n}\n\n/******************************************************************************\n *\t\tVariantInit16\t[OLEAUT32.8]\n *\n * Initialise a variant.\n *\n * PARAMS\n *  pVarg [O] Variant to initialise\n *\n * RETURNS\n *  Nothing.\n *\n * NOTES\n *  This function simply sets the type of the variant to VT_EMPTY. It does not\n *  free any existing value, use VariantClear16() for that.\n */\nvoid WINAPI VariantInit16(VARIANTARG16* pVarg)\n{\n  TRACE(\"(%p)\\n\", pVarg);\n\n  /* Win8.1 zeroes whole struct. Previous implementations don't set any other fields. */\n  V_VT(pVarg) = VT_EMPTY;\n}\n\nHRESULT VARIANT_ClearInd(VARIANTARG16 *pVarg)\n{\n    HRESULT hres;\n\n    TRACE(\"(%s)\\n\", debugstr_variant16(pVarg));\n\n    hres = VARIANT_ValidateType(V_VT(pVarg));\n    if (FAILED(hres))\n        return hres;\n\n    switch (V_VT(pVarg))\n    {\n    case VT_DISPATCH:\n    case VT_UNKNOWN:\n        if (V_UNKNOWN(pVarg))\n            IUnknown16_Release(V_UNKNOWN(pVarg));\n        break;\n    case VT_UNKNOWN | VT_BYREF:\n    case VT_DISPATCH | VT_BYREF:\n        if(*V_UNKNOWNREF16(pVarg))\n            IUnknown16_Release(*V_UNKNOWNREF16(pVarg));\n        break;\n    case VT_BSTR:\n        SysFreeString16(V_BSTR(pVarg));\n        break;\n    case VT_BSTR | VT_BYREF:\n        SysFreeString16(*V_BSTRREF16(pVarg));\n        break;\n    case VT_VARIANT | VT_BYREF:\n        VariantClear16(V_VARIANTREF(pVarg));\n        break;\n#ifdef AVAIL_32BIT_VAR\n    case VT_RECORD:\n    case VT_RECORD | VT_BYREF:\n    {\n        struct __tagBRECORD* pBr = &V_UNION(pVarg,brecVal);\n        if (pBr->pRecInfo)\n        {\n            IRecordInfo_RecordClear(pBr->pRecInfo, pBr->pvRecord);\n            IRecordInfo_Release(pBr->pRecInfo);\n        }\n        break;\n    }\n#endif\n    default:\n        if (V_ISARRAY(pVarg) || (V_VT(pVarg) & ~VT_BYREF) == VT_SAFEARRAY)\n        {\n            if (V_ISBYREF(pVarg))\n            {\n                if (*V_ARRAYREF16(pVarg))\n                    hres = SafeArrayDestroy16(*V_ARRAYREF16(pVarg));\n            }\n            else if (V_ARRAY(pVarg))\n                hres = SafeArrayDestroy16(V_ARRAY(pVarg));\n        }\n        break;\n    }\n\n    V_VT(pVarg) = VT_EMPTY;\n    return hres;\n}\n\n/******************************************************************************\n *\t\tVariantClear16\t[OLEAUT32.9]\n *\n * Clear a variant.\n *\n * PARAMS\n *  pVarg [I/O] Variant to clear\n *\n * RETURNS\n *  Success: S_OK. Any previous value in pVarg is freed and its type is set to VT_EMPTY.\n *  Failure: DISP_E_BADVARTYPE, if the variant is not a valid variant type.\n */\nHRESULT WINAPI DECLSPEC_HOTPATCH VariantClear16(VARIANTARG16* pVarg)\n{\n  HRESULT hres;\n\n  TRACE(\"(%s)\\n\", debugstr_variant16(pVarg));\n\n  hres = VARIANT_ValidateType(V_VT(pVarg));\n\n  if (SUCCEEDED(hres))\n  {\n    if (!V_ISBYREF(pVarg))\n    {\n      if (V_ISARRAY(pVarg) || V_VT(pVarg) == VT_SAFEARRAY)\n      {\n        hres = SafeArrayDestroy16(V_ARRAY(pVarg));\n      }\n      else if (V_VT(pVarg) == VT_BSTR)\n      {\n        SysFreeString16(V_BSTR(pVarg));\n      }\n#ifdef AVAIL_32BIT_VAR\n      else if (V_VT(pVarg) == VT_RECORD)\n      {\n        struct __tagBRECORD* pBr = &V_UNION(pVarg,brecVal);\n        if (pBr->pRecInfo)\n        {\n          IRecordInfo_RecordClear(pBr->pRecInfo, pBr->pvRecord);\n          IRecordInfo_Release(pBr->pRecInfo);\n        }\n      }\n#endif\n      else if (V_VT(pVarg) == VT_DISPATCH ||\n               V_VT(pVarg) == VT_UNKNOWN)\n      {\n        if (V_UNKNOWN(pVarg))\n          IUnknown16_Release(V_UNKNOWN(pVarg));\n      }\n    }\n    V_VT(pVarg) = VT_EMPTY;\n  }\n  return hres;\n}\n\n#ifdef AVAIL_32BIT_VAR\n/******************************************************************************\n * Copy an IRecordInfo object contained in a variant.\n */\nstatic HRESULT VARIANT_CopyIRecordInfo(VARIANT16 *dest, VARIANT16 *src)\n{\n  struct __tagBRECORD *dest_rec = &V_UNION(dest, brecVal);\n  struct __tagBRECORD *src_rec = &V_UNION(src, brecVal);\n  HRESULT hr = S_OK;\n  ULONG size;\n\n  if (!src_rec->pRecInfo)\n  {\n    if (src_rec->pvRecord) return E_INVALIDARG;\n    return S_OK;\n  }\n\n  hr = IRecordInfo_GetSize(src_rec->pRecInfo, &size);\n  if (FAILED(hr)) return hr;\n\n  /* This could look cleaner if only RecordCreate() was used, but native doesn't use it.\n     Memory should be allocated in a same way as RecordCreate() does, so RecordDestroy()\n     could free it later. */\n  dest_rec->pvRecord = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);\n  if (!dest_rec->pvRecord) return E_OUTOFMEMORY;\n\n  dest_rec->pRecInfo = src_rec->pRecInfo;\n  IRecordInfo_AddRef(src_rec->pRecInfo);\n\n  return IRecordInfo_RecordCopy(src_rec->pRecInfo, src_rec->pvRecord, dest_rec->pvRecord);\n}\n#endif\n\n/******************************************************************************\n *    VariantCopy16  [OLEAUT32.10]\n *\n * Copy a variant.\n *\n * PARAMS\n *  pvargDest [O] Destination for copy\n *  pvargSrc  [I] Source variant to copy\n *\n * RETURNS\n *  Success: S_OK. pvargDest contains a copy of pvargSrc.\n *  Failure: DISP_E_BADVARTYPE, if either variant has an invalid type.\n *           E_OUTOFMEMORY, if memory cannot be allocated. Otherwise an\n *           HRESULT error code from SafeArrayCopy16(), IRecordInfo_GetSize(),\n *           or IRecordInfo_RecordCopy(), depending on the type of pvargSrc.\n *\n * NOTES\n *  - If pvargSrc == pvargDest, this function does nothing, and succeeds if\n *    pvargSrc is valid. Otherwise, pvargDest is always cleared using\n *    VariantClear16() before pvargSrc is copied to it. If clearing pvargDest\n *    fails, so does this function.\n *  - VT_CLSID is a valid type type for pvargSrc, but not for pvargDest.\n *  - For by-value non-intrinsic types, a deep copy is made, i.e. The whole value\n *    is copied rather than just any pointers to it.\n *  - For by-value object types the object pointer is copied and the objects\n *    reference count increased using IUnknown_AddRef().\n *  - For all by-reference types, only the referencing pointer is copied.\n */\nHRESULT WINAPI VariantCopy16(VARIANTARG16* pvargDest, VARIANTARG16* pvargSrc)\n{\n  HRESULT hres = S_OK;\n\n  TRACE(\"(%s,%s)\\n\", debugstr_variant16(pvargDest), debugstr_variant16(pvargSrc));\n\n  if (V_TYPE(pvargSrc) == VT_CLSID || /* VT_CLSID is a special case */\n      FAILED(VARIANT_ValidateType(V_VT(pvargSrc))))\n    return DISP_E_BADVARTYPE;\n\n  if (pvargSrc != pvargDest &&\n      SUCCEEDED(hres = VariantClear16(pvargDest)))\n  {\n    *pvargDest = *pvargSrc; /* Shallow copy the value */\n\n    if (!V_ISBYREF(pvargSrc))\n    {\n      switch (V_VT(pvargSrc))\n      {\n      case VT_BSTR:\n        V_BSTR(pvargDest) = SysAllocStringByteLen16(BSTR_PTR(V_BSTR(pvargSrc)), SysStringByteLen16(V_BSTR(pvargSrc)));\n        if (!V_BSTR(pvargDest))\n          hres = E_OUTOFMEMORY;\n        break;\n#ifdef AVAIL_32BIT_VAR\n      case VT_RECORD:\n        hres = VARIANT_CopyIRecordInfo(pvargDest, pvargSrc);\n        break;\n#endif\n      case VT_DISPATCH:\n      case VT_UNKNOWN:\n        V_UNKNOWN(pvargDest) = V_UNKNOWN(pvargSrc);\n        if (V_UNKNOWN(pvargSrc))\n          IUnknown16_AddRef(V_UNKNOWN(pvargSrc));\n        break;\n      default:\n        if (V_ISARRAY(pvargSrc))\n          hres = SafeArrayCopy16(V_ARRAY(pvargSrc), &V_ARRAY(pvargDest));\n      }\n    }\n  }\n  return hres;\n}\n\n/* Return the byte size of a variants data */\nstatic inline size_t VARIANT_DataSize(const VARIANT16* pv)\n{\n  switch (V_TYPE(pv))\n  {\n  case VT_I1:\n  case VT_UI1:   return sizeof(BYTE);\n  case VT_I2:\n  case VT_UI2:   return sizeof(SHORT);\n  case VT_INT:\n  case VT_UINT:\n  case VT_I4:\n  case VT_UI4:   return sizeof(LONG);\n  case VT_I8:\n  case VT_UI8:   return sizeof(LONGLONG);\n  case VT_R4:    return sizeof(float);\n  case VT_R8:    return sizeof(double);\n  case VT_DATE:  return sizeof(DATE);\n  case VT_BOOL:  return sizeof(VARIANT_BOOL);\n  case VT_DISPATCH:\n  case VT_UNKNOWN:\n  case VT_BSTR:  return sizeof(void*);\n  case VT_CY:    return sizeof(CY);\n  case VT_ERROR: return sizeof(SCODE);\n  }\n  TRACE(\"Shouldn't be called for variant %s!\\n\", debugstr_variant16(pv));\n  return 0;\n}\n\n/******************************************************************************\n *    VariantCopy16Ind  [OLEAUT32.11]\n *\n * Copy a variant, dereferencing it if it is by-reference.\n *\n * PARAMS\n *  pvargDest [O] Destination for copy\n *  pvargSrc  [I] Source variant to copy\n *\n * RETURNS\n *  Success: S_OK. pvargDest contains a copy of pvargSrc.\n *  Failure: An HRESULT error code indicating the error.\n *\n * NOTES\n *  Failure: DISP_E_BADVARTYPE, if either variant has an invalid by-value type.\n *           E_INVALIDARG, if pvargSrc  is an invalid by-reference type.\n *           E_OUTOFMEMORY, if memory cannot be allocated. Otherwise an\n *           HRESULT error code from SafeArrayCopy16(), IRecordInfo_GetSize(),\n *           or IRecordInfo_RecordCopy(), depending on the type of pvargSrc.\n *\n * NOTES\n *  - If pvargSrc is by-value, this function behaves exactly as VariantCopy16().\n *  - If pvargSrc is by-reference, the value copied to pvargDest is the pointed-to\n *    value.\n *  - if pvargSrc == pvargDest, this function dereferences in place. Otherwise,\n *    pvargDest is always cleared using VariantClear16() before pvargSrc is copied\n *    to it. If clearing pvargDest fails, so does this function.\n */\nHRESULT WINAPI VariantCopyInd16(VARIANT16* pvargDest, VARIANTARG16* pvargSrc)\n{\n  VARIANTARG16 vTmp, *pSrc = pvargSrc;\n  VARTYPE vt;\n  HRESULT hres = S_OK;\n\n  TRACE(\"(%s,%s)\\n\", debugstr_variant16(pvargDest), debugstr_variant16(pvargSrc));\n\n  if (!V_ISBYREF(pvargSrc))\n    return VariantCopy16(pvargDest, pvargSrc);\n\n  /* Argument checking is more lax than VariantCopy16()... */\n  vt = V_TYPE(pvargSrc);\n  if (V_ISARRAY(pvargSrc) || (V_VT(pvargSrc) == (VT_RECORD|VT_BYREF)) ||\n     (vt > VT_NULL && vt != (VARTYPE)15 && vt < VT_VOID &&\n     !(V_VT(pvargSrc) & (VT_VECTOR|VT_RESERVED))))\n  {\n    /* OK */\n  }\n  else\n    return E_INVALIDARG; /* ...And the return value for invalid types differs too */\n\n  if (pvargSrc == pvargDest)\n  {\n    /* In place copy. Use a shallow copy of pvargSrc & init pvargDest.\n     * This avoids an expensive VariantCopy16() call - e.g. SafeArrayCopy16().\n     */\n    vTmp = *pvargSrc;\n    pSrc = &vTmp;\n    V_VT(pvargDest) = VT_EMPTY;\n  }\n  else\n  {\n    /* Copy into another variant. Free the variant in pvargDest */\n    if (FAILED(hres = VariantClear16(pvargDest)))\n    {\n      TRACE(\"VariantClear16() of destination failed\\n\");\n      return hres;\n    }\n  }\n\n  if (V_ISARRAY(pSrc))\n  {\n    /* Native doesn't check that *V_ARRAYREF(pSrc) is valid */\n    hres = SafeArrayCopy16(*V_ARRAYREF16(pSrc), &V_ARRAY(pvargDest));\n  }\n  else if (V_VT(pSrc) == (VT_BSTR|VT_BYREF))\n  {\n    /* Native doesn't check that *V_BSTRREF(pSrc) is valid */\n    V_BSTR(pvargDest) = SysAllocStringByteLen16((char*)MapSL(*V_BSTRREF16(pSrc)), SysStringByteLen16(*V_BSTRREF16(pSrc)));\n  }\n#ifdef AVAIL_32BIT_VAR\n  else if (V_VT(pSrc) == (VT_RECORD|VT_BYREF))\n  {\n    hres = VARIANT_CopyIRecordInfo(pvargDest, pvargSrc);\n  }\n#endif\n  else if (V_VT(pSrc) == (VT_DISPATCH|VT_BYREF) ||\n           V_VT(pSrc) == (VT_UNKNOWN|VT_BYREF))\n  {\n    /* Native doesn't check that *V_UNKNOWNREF(pSrc) is valid */\n    V_UNKNOWN(pvargDest) = *V_UNKNOWNREF16(pSrc);\n    if (*V_UNKNOWNREF16(pSrc))\n      IUnknown16_AddRef(*V_UNKNOWNREF16(pSrc));\n  }\n  else if (V_VT(pSrc) == (VT_VARIANT|VT_BYREF))\n  {\n    /* Native doesn't check that *V_VARIANTREF(pSrc) is valid */\n    if (V_VT(V_VARIANTREF16(pSrc)) == (VT_VARIANT|VT_BYREF))\n      hres = E_INVALIDARG; /* Don't dereference more than one level */\n    else\n      hres = VariantCopyInd16(pvargDest, (VARIANTARG16 *)MapSL((SEGPTR)V_VARIANTREF(pSrc)));\n\n    /* Use the dereferenced variants type value, not VT_VARIANT16 */\n    goto VariantCopy16Ind_Return;\n  }\n  else if (V_VT(pSrc) == (VT_DECIMAL|VT_BYREF))\n  {\n#ifdef AVAIL_32BIT_VAR\n    memcpy(&DEC_SCALE(&V_DECIMAL(pvargDest)), &DEC_SCALE(V_DECIMALREF(pSrc)),\n           sizeof(DECIMAL) - sizeof(USHORT));\n#endif\n  }\n  else\n  {\n    /* Copy the pointed to data into this variant */\n    memcpy(&V_BYREF(pvargDest), MapSL(V_BYREF(pSrc)), VARIANT_DataSize(pSrc));\n  }\n\n  V_VT(pvargDest) = V_VT(pSrc) & ~VT_BYREF;\n\nVariantCopy16Ind_Return:\n\n  if (pSrc != pvargSrc)\n    VariantClear16(pSrc);\n\n  TRACE(\"returning 0x%08x, %s\\n\", hres, debugstr_variant16(pvargDest));\n  return hres;\n}\n\n/******************************************************************************\n *    VariantChangeType16  [OLEAUT32.12]\n *\n * Change the type of a variant.\n *\n * PARAMS\n *  pvargDest [O] Destination for the converted variant\n *  pvargSrc  [O] Source variant to change the type of\n *  wFlags    [I] VARIANT_ flags from \"oleauto.h\"\n *  vt        [I] Variant type to change pvargSrc into\n *\n * RETURNS\n *  Success: S_OK. pvargDest contains the converted value.\n *  Failure: An HRESULT error code describing the failure.\n *\n * NOTES\n *  The LCID used for the conversion is LOCALE_USER_DEFAULT.\n *  See VariantChangeTypeEx16.\n */\nHRESULT WINAPI DECLSPEC_HOTPATCH VariantChangeType16(VARIANTARG16* pvargDest, VARIANTARG16* pvargSrc,\n                                                   USHORT wFlags, VARTYPE vt)\n{\n  return VariantChangeTypeEx16( pvargDest, pvargSrc, LOCALE_USER_DEFAULT, wFlags, vt );\n}\n\n/******************************************************************************\n *    VariantChangeTypeEx16  [OLEAUT32.147]\n *\n * Change the type of a variant.\n *\n * PARAMS\n *  pvargDest [O] Destination for the converted variant\n *  pvargSrc  [O] Source variant to change the type of\n *  lcid      [I] LCID for the conversion\n *  wFlags    [I] VARIANT_ flags from \"oleauto.h\"\n *  vt        [I] Variant type to change pvargSrc into\n *\n * RETURNS\n *  Success: S_OK. pvargDest contains the converted value.\n *  Failure: An HRESULT error code describing the failure.\n *\n * NOTES\n *  pvargDest and pvargSrc can point to the same variant to perform an in-place\n *  conversion. If the conversion is successful, pvargSrc will be freed.\n */\nHRESULT WINAPI VariantChangeTypeEx16(VARIANTARG16* pvargDest, VARIANTARG16* pvargSrc,\n                                   LCID lcid, USHORT wFlags, VARTYPE vt)\n{\n  HRESULT res = S_OK;\n\n  TRACE(\"(%s,%s,0x%08x,0x%04x,%s)\\n\", debugstr_variant16(pvargDest),\n        debugstr_variant16(pvargSrc), lcid, wFlags, debugstr_vt(vt));\n\n  if (vt == VT_CLSID)\n    res = DISP_E_BADVARTYPE;\n  else\n  {\n    res = VARIANT_ValidateType(V_VT(pvargSrc));\n\n    if (SUCCEEDED(res))\n    {\n      res = VARIANT_ValidateType(vt);\n\n      if (SUCCEEDED(res))\n      {\n        VARIANTARG16 vTmp, vSrcDeref;\n\n        if(V_ISBYREF(pvargSrc) && !V_BYREF(pvargSrc))\n          res = DISP_E_TYPEMISMATCH;\n        else\n        {\n          V_VT(&vTmp) = VT_EMPTY;\n          V_VT(&vSrcDeref) = VT_EMPTY;\n          VariantClear16(&vTmp);\n          VariantClear16(&vSrcDeref);\n        }\n\n        if (SUCCEEDED(res))\n        {\n          res = VariantCopyInd16(&vSrcDeref, pvargSrc);\n          if (SUCCEEDED(res))\n          {\n            if (V_ISARRAY(&vSrcDeref) || (vt & VT_ARRAY))\n              res = VARIANT_CoerceArray(&vTmp, &vSrcDeref, vt);\n            else\n              res = VARIANT_Coerce(&vTmp, lcid, wFlags, &vSrcDeref, vt);\n\n            if (SUCCEEDED(res)) {\n                V_VT(&vTmp) = vt;\n                res = VariantCopy16(pvargDest, &vTmp);\n            }\n            VariantClear16(&vTmp);\n            VariantClear16(&vSrcDeref);\n          }\n        }\n      }\n    }\n  }\n\n  TRACE(\"returning 0x%08x, %s\\n\", res, debugstr_variant16(pvargDest));\n  return res;\n}\n\n/* Date Conversions */\n\n#define IsLeapYear(y) (((y % 4) == 0) && (((y % 100) != 0) || ((y % 400) == 0)))\n\n/* Convert a VT_DATE value to a Julian Date */\nstatic inline int VARIANT_JulianFromDate(int dateIn)\n{\n  int julianDays = dateIn;\n\n  julianDays -= DATE_MIN; /* Convert to + days from 1 Jan 100 AD */\n  julianDays += 1757585;  /* Convert to + days from 23 Nov 4713 BC (Julian) */\n  return julianDays;\n}\n\n/* Convert a Julian Date to a VT_DATE value */\nstatic inline int VARIANT_DateFromJulian(int dateIn)\n{\n  int julianDays = dateIn;\n\n  julianDays -= 1757585;  /* Convert to + days from 1 Jan 100 AD */\n  julianDays += DATE_MIN; /* Convert to +/- days from 1 Jan 1899 AD */\n  return julianDays;\n}\n\n/* Convert a Julian date to Day/Month/Year - from PostgreSQL */\nstatic inline void VARIANT_DMYFromJulian(int jd, USHORT *year, USHORT *month, USHORT *day)\n{\n  int j, i, l, n;\n\n  l = jd + 68569;\n  n = l * 4 / 146097;\n  l -= (n * 146097 + 3) / 4;\n  i = (4000 * (l + 1)) / 1461001;\n  l += 31 - (i * 1461) / 4;\n  j = (l * 80) / 2447;\n  *day = l - (j * 2447) / 80;\n  l = j / 11;\n  *month = (j + 2) - (12 * l);\n  *year = 100 * (n - 49) + i + l;\n}\n\n/* Convert Day/Month/Year to a Julian date - from PostgreSQL */\nstatic inline double VARIANT_JulianFromDMY(USHORT year, USHORT month, USHORT day)\n{\n  int m12 = (month - 14) / 12;\n\n  return ((1461 * (year + 4800 + m12)) / 4 + (367 * (month - 2 - 12 * m12)) / 12 -\n           (3 * ((year + 4900 + m12) / 100)) / 4 + day - 32075);\n}\n\n/* Macros for accessing DOS format date/time fields */\n#define DOS_YEAR(x)   (1980 + (x >> 9))\n#define DOS_MONTH(x)  ((x >> 5) & 0xf)\n#define DOS_DAY(x)    (x & 0x1f)\n#define DOS_HOUR(x)   (x >> 11)\n#define DOS_MINUTE(x) ((x >> 5) & 0x3f)\n#define DOS_SECOND(x) ((x & 0x1f) << 1)\n/* Create a DOS format date/time */\n#define DOS_DATE(d,m,y) (d | (m << 5) | ((y-1980) << 9))\n#define DOS_TIME(h,m,s) ((s >> 1) | (m << 5) | (h << 11))\n\n/* Roll a date forwards or backwards to correct it */\nstatic HRESULT VARIANT_RollUdate(UDATE *lpUd)\n{\n  static const BYTE days[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };\n  short iYear, iMonth, iDay, iHour, iMinute, iSecond;\n\n  /* interpret values signed */\n  iYear   = lpUd->st.wYear;\n  iMonth  = lpUd->st.wMonth;\n  iDay    = lpUd->st.wDay;\n  iHour   = lpUd->st.wHour;\n  iMinute = lpUd->st.wMinute;\n  iSecond = lpUd->st.wSecond;\n\n  TRACE(\"Raw date: %d/%d/%d %d:%d:%d\\n\", iDay, iMonth,\n        iYear, iHour, iMinute, iSecond);\n\n  if (iYear > 9999 || iYear < -9999)\n    return E_INVALIDARG; /* Invalid value */\n  /* Year 0 to 29 are treated as 2000 + year */\n  if (iYear >= 0 && iYear < 30)\n    iYear += 2000;\n  /* Remaining years < 100 are treated as 1900 + year */\n  else if (iYear >= 30 && iYear < 100)\n    iYear += 1900;\n\n  iMinute += iSecond / 60;\n  iSecond  = iSecond % 60;\n  iHour   += iMinute / 60;\n  iMinute  = iMinute % 60;\n  iDay    += iHour / 24;\n  iHour    = iHour % 24;\n  iYear   += iMonth / 12;\n  iMonth   = iMonth % 12;\n  if (iMonth<=0) {iMonth+=12; iYear--;}\n  while (iDay > days[iMonth])\n  {\n    if (iMonth == 2 && IsLeapYear(iYear))\n      iDay -= 29;\n    else\n      iDay -= days[iMonth];\n    iMonth++;\n    iYear += iMonth / 12;\n    iMonth = iMonth % 12;\n  }\n  while (iDay <= 0)\n  {\n    iMonth--;\n    if (iMonth<=0) {iMonth+=12; iYear--;}\n    if (iMonth == 2 && IsLeapYear(iYear))\n      iDay += 29;\n    else\n      iDay += days[iMonth];\n  }\n\n  if (iSecond<0){iSecond+=60; iMinute--;}\n  if (iMinute<0){iMinute+=60; iHour--;}\n  if (iHour<0)  {iHour+=24; iDay--;}\n  if (iYear<=0)  iYear+=2000;\n\n  lpUd->st.wYear   = iYear;\n  lpUd->st.wMonth  = iMonth;\n  lpUd->st.wDay    = iDay;\n  lpUd->st.wHour   = iHour;\n  lpUd->st.wMinute = iMinute;\n  lpUd->st.wSecond = iSecond;\n\n  TRACE(\"Rolled date: %d/%d/%d %d:%d:%d\\n\", lpUd->st.wDay, lpUd->st.wMonth,\n        lpUd->st.wYear, lpUd->st.wHour, lpUd->st.wMinute, lpUd->st.wSecond);\n  return S_OK;\n}\n\n/**********************************************************************\n *              DosDateTimeToVariantTime [OLEAUT32.14]\n *\n * Convert a Dos format date and time into variant VT_DATE format.\n *\n * PARAMS\n *  wDosDate [I] Dos format date\n *  wDosTime [I] Dos format time\n *  pDateOut [O] Destination for VT_DATE format\n *\n * RETURNS\n *  Success: TRUE. pDateOut contains the converted time.\n *  Failure: FALSE, if wDosDate or wDosTime are invalid (see notes).\n *\n * NOTES\n * - Dos format dates can only hold dates from 1-Jan-1980 to 31-Dec-2099.\n * - Dos format times are accurate to only 2 second precision.\n * - The format of a Dos Date is:\n *| Bits   Values  Meaning\n *| ----   ------  -------\n *| 0-4    1-31    Day of the week. 0 rolls back one day. A value greater than\n *|                the days in the month rolls forward the extra days.\n *| 5-8    1-12    Month of the year. 0 rolls back to December of the previous\n *|                year. 13-15 are invalid.\n *| 9-15   0-119   Year based from 1980 (Max 2099). 120-127 are invalid.\n * - The format of a Dos Time is:\n *| Bits   Values  Meaning\n *| ----   ------  -------\n *| 0-4    0-29    Seconds/2. 30 and 31 are invalid.\n *| 5-10   0-59    Minutes. 60-63 are invalid.\n *| 11-15  0-23    Hours (24 hour clock). 24-32 are invalid.\n */\nINT WINAPI DosDateTimeToVariantTime16(USHORT wDosDate, USHORT wDosTime,\n                                    double *pDateOut)\n{\n  UDATE ud;\n\n  TRACE(\"(0x%x(%d/%d/%d),0x%x(%d:%d:%d),%p)\\n\",\n        wDosDate, DOS_YEAR(wDosDate), DOS_MONTH(wDosDate), DOS_DAY(wDosDate),\n        wDosTime, DOS_HOUR(wDosTime), DOS_MINUTE(wDosTime), DOS_SECOND(wDosTime),\n        pDateOut);\n\n  ud.st.wYear = DOS_YEAR(wDosDate);\n  ud.st.wMonth = DOS_MONTH(wDosDate);\n  if (ud.st.wYear > 2099 || ud.st.wMonth > 12)\n    return FALSE;\n  ud.st.wDay = DOS_DAY(wDosDate);\n  ud.st.wHour = DOS_HOUR(wDosTime);\n  ud.st.wMinute = DOS_MINUTE(wDosTime);\n  ud.st.wSecond = DOS_SECOND(wDosTime);\n  ud.st.wDayOfWeek = ud.st.wMilliseconds = 0;\n  if (ud.st.wHour > 23 || ud.st.wMinute > 59 || ud.st.wSecond > 59)\n    return FALSE; /* Invalid values in Dos*/\n\n  return VarDateFromUdate16(&ud, 0, pDateOut) == S_OK;\n}\n\n/**********************************************************************\n *              VariantTimeToDosDateTime [OLEAUT32.13]\n *\n * Convert a variant format date into a Dos format date and time.\n *\n *  dateIn    [I] VT_DATE time format\n *  pwDosDate [O] Destination for Dos format date\n *  pwDosTime [O] Destination for Dos format time\n *\n * RETURNS\n *  Success: TRUE. pwDosDate and pwDosTime contains the converted values.\n *  Failure: FALSE, if dateIn cannot be represented in Dos format.\n *\n * NOTES\n *   See DosDateTimeToVariantTime16() for Dos format details and bugs.\n */\nINT WINAPI VariantTimeToDosDateTime16(double dateIn, USHORT *pwDosDate, USHORT *pwDosTime)\n{\n  UDATE ud;\n\n  TRACE(\"(%g,%p,%p)\\n\", dateIn, pwDosDate, pwDosTime);\n\n  if (FAILED(VarUdateFromDate16(dateIn, 0, &ud)))\n    return FALSE;\n\n  if (ud.st.wYear < 1980 || ud.st.wYear > 2099)\n    return FALSE;\n\n  *pwDosDate = DOS_DATE(ud.st.wDay, ud.st.wMonth, ud.st.wYear);\n  *pwDosTime = DOS_TIME(ud.st.wHour, ud.st.wMinute, ud.st.wSecond);\n\n  TRACE(\"Returning 0x%x(%d/%d/%d), 0x%x(%d:%d:%d)\\n\",\n        *pwDosDate, DOS_YEAR(*pwDosDate), DOS_MONTH(*pwDosDate), DOS_DAY(*pwDosDate),\n        *pwDosTime, DOS_HOUR(*pwDosTime), DOS_MINUTE(*pwDosTime), DOS_SECOND(*pwDosTime));\n  return TRUE;\n}\n\n/***********************************************************************\n *              SystemTimeToVariantTime [OLEAUT32.184]\n *\n * Convert a System format date and time into variant VT_DATE format.\n *\n * PARAMS\n *  lpSt     [I] System format date and time\n *  pDateOut [O] Destination for VT_DATE format date\n *\n * RETURNS\n *  Success: TRUE. *pDateOut contains the converted value.\n *  Failure: FALSE, if lpSt cannot be represented in VT_DATE format.\n */\nINT WINAPI SystemTimeToVariantTime16(LPSYSTEMTIME lpSt, double *pDateOut)\n{\n  UDATE ud;\n\n  TRACE(\"(%p->%d/%d/%d %d:%d:%d,%p)\\n\", lpSt, lpSt->wDay, lpSt->wMonth,\n        lpSt->wYear, lpSt->wHour, lpSt->wMinute, lpSt->wSecond, pDateOut);\n\n  if (lpSt->wMonth > 12)\n    return FALSE;\n  if (lpSt->wDay > 31)\n    return FALSE;\n  if ((short)lpSt->wYear < 0)\n    return FALSE;\n\n  ud.st = *lpSt;\n  return VarDateFromUdate16(&ud, 0, pDateOut) == S_OK;\n}\n\n/***********************************************************************\n *              VariantTimeToSystemTime [OLEAUT32.185]\n *\n * Convert a variant VT_DATE into a System format date and time.\n *\n * PARAMS\n *  datein [I] Variant VT_DATE format date\n *  lpSt   [O] Destination for System format date and time\n *\n * RETURNS\n *  Success: TRUE. *lpSt contains the converted value.\n *  Failure: FALSE, if dateIn is too large or small.\n */\nINT WINAPI VariantTimeToSystemTime16(double dateIn, LPSYSTEMTIME lpSt)\n{\n  UDATE ud;\n\n  TRACE(\"(%g,%p)\\n\", dateIn, lpSt);\n\n  if (FAILED(VarUdateFromDate16(dateIn, 0, &ud)))\n    return FALSE;\n\n  *lpSt = ud.st;\n  return TRUE;\n}\n\n/***********************************************************************\n *              VarDateFromUdateEx [OLEAUT32.319]\n *\n * Convert an unpacked format date and time to a variant VT_DATE.\n *\n * PARAMS\n *  pUdateIn [I] Unpacked format date and time to convert\n *  lcid     [I] Locale identifier for the conversion\n *  dwFlags  [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pDateOut [O] Destination for variant VT_DATE.\n *\n * RETURNS\n *  Success: S_OK. *pDateOut contains the converted value.\n *  Failure: E_INVALIDARG, if pUdateIn cannot be represented in VT_DATE format.\n */\nHRESULT WINAPI VarDateFromUdateEx16(UDATE *pUdateIn, LCID lcid, ULONG dwFlags, DATE *pDateOut)\n{\n  UDATE ud;\n  double dateVal = 0;\n\n  TRACE(\"(%p->%d/%d/%d %d:%d:%d:%d %d %d,0x%08x,0x%08x,%p)\\n\", pUdateIn,\n        pUdateIn->st.wMonth, pUdateIn->st.wDay, pUdateIn->st.wYear,\n        pUdateIn->st.wHour, pUdateIn->st.wMinute, pUdateIn->st.wSecond,\n        pUdateIn->st.wMilliseconds, pUdateIn->st.wDayOfWeek,\n        pUdateIn->wDayOfYear, lcid, dwFlags, pDateOut);\n\n  if (lcid != MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT))\n    FIXME(\"lcid possibly not handled, treating as en-us\\n\");\n  if (dwFlags & ~(VAR_TIMEVALUEONLY|VAR_DATEVALUEONLY))\n    FIXME(\"unsupported flags: %x\\n\", dwFlags);\n\n  ud = *pUdateIn;\n\n  if (dwFlags & VAR_VALIDDATE)\n    WARN(\"Ignoring VAR_VALIDDATE\\n\");\n\n  if (FAILED(VARIANT_RollUdate(&ud)))\n    return E_INVALIDARG;\n\n  /* Date */\n  if (!(dwFlags & VAR_TIMEVALUEONLY))\n    dateVal = VARIANT_DateFromJulian(VARIANT_JulianFromDMY(ud.st.wYear, ud.st.wMonth, ud.st.wDay));\n\n  if ((dwFlags & VAR_TIMEVALUEONLY) || !(dwFlags & VAR_DATEVALUEONLY))\n  {\n    double dateSign = (dateVal < 0.0) ? -1.0 : 1.0;\n\n    /* Time */\n    dateVal += ud.st.wHour / 24.0 * dateSign;\n    dateVal += ud.st.wMinute / 1440.0 * dateSign;\n    dateVal += ud.st.wSecond / 86400.0 * dateSign;\n  }\n\n  TRACE(\"Returning %g\\n\", dateVal);\n  *pDateOut = dateVal;\n  return S_OK;\n}\n\n/***********************************************************************\n *              VarDateFromUdate [OLEAUT32.330]\n *\n * Convert an unpacked format date and time to a variant VT_DATE.\n *\n * PARAMS\n *  pUdateIn [I] Unpacked format date and time to convert\n *  dwFlags  [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pDateOut [O] Destination for variant VT_DATE.\n *\n * RETURNS\n *  Success: S_OK. *pDateOut contains the converted value.\n *  Failure: E_INVALIDARG, if pUdateIn cannot be represented in VT_DATE format.\n *\n * NOTES\n *  This function uses the United States English locale for the conversion. Use\n *  VarDateFromUdateEx16() for alternate locales.\n */\nHRESULT WINAPI VarDateFromUdate16(UDATE *pUdateIn, ULONG dwFlags, DATE *pDateOut)\n{\n  LCID lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT);\n  \n  return VarDateFromUdateEx16(pUdateIn, lcid, dwFlags, pDateOut);\n}\n\n/***********************************************************************\n *              VarUdateFromDate [OLEAUT32.331]\n *\n * Convert a variant VT_DATE into an unpacked format date and time.\n *\n * PARAMS\n *  datein    [I] Variant VT_DATE format date\n *  dwFlags   [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  lpUdate   [O] Destination for unpacked format date and time\n *\n * RETURNS\n *  Success: S_OK. *lpUdate contains the converted value.\n *  Failure: E_INVALIDARG, if dateIn is too large or small.\n */\nHRESULT WINAPI VarUdateFromDate16(DATE dateIn, ULONG dwFlags, UDATE *lpUdate)\n{\n  /* Cumulative totals of days per month */\n  static const USHORT cumulativeDays[] =\n  {\n    0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334\n  };\n  double datePart, timePart;\n  int julianDays;\n\n  TRACE(\"(%g,0x%08x,%p)\\n\", dateIn, dwFlags, lpUdate);\n\n  if (dateIn <= (DATE_MIN - 1.0) || dateIn >= (DATE_MAX + 1.0))\n    return E_INVALIDARG;\n\n  datePart = dateIn < 0.0 ? ceil(dateIn) : floor(dateIn);\n  /* Compensate for int truncation (always downwards) */\n  timePart = fabs(dateIn - datePart) + 0.00000000001;\n  if (timePart >= 1.0)\n    timePart -= 0.00000000001;\n\n  /* Date */\n  julianDays = VARIANT_JulianFromDate(dateIn);\n  VARIANT_DMYFromJulian(julianDays, &lpUdate->st.wYear, &lpUdate->st.wMonth,\n                        &lpUdate->st.wDay);\n\n  datePart = (datePart + 1.5) / 7.0;\n  lpUdate->st.wDayOfWeek = (datePart - floor(datePart)) * 7;\n  if (lpUdate->st.wDayOfWeek == 0)\n    lpUdate->st.wDayOfWeek = 5;\n  else if (lpUdate->st.wDayOfWeek == 1)\n    lpUdate->st.wDayOfWeek = 6;\n  else\n    lpUdate->st.wDayOfWeek -= 2;\n\n  if (lpUdate->st.wMonth > 2 && IsLeapYear(lpUdate->st.wYear))\n    lpUdate->wDayOfYear = 1; /* After February, in a leap year */\n  else\n    lpUdate->wDayOfYear = 0;\n\n  lpUdate->wDayOfYear += cumulativeDays[lpUdate->st.wMonth];\n  lpUdate->wDayOfYear += lpUdate->st.wDay;\n\n  /* Time */\n  timePart *= 24.0;\n  lpUdate->st.wHour = timePart;\n  timePart -= lpUdate->st.wHour;\n  timePart *= 60.0;\n  lpUdate->st.wMinute = timePart;\n  timePart -= lpUdate->st.wMinute;\n  timePart *= 60.0;\n  lpUdate->st.wSecond = timePart;\n  timePart -= lpUdate->st.wSecond;\n  lpUdate->st.wMilliseconds = 0;\n  if (timePart > 0.5)\n  {\n    /* Round the milliseconds, adjusting the time/date forward if needed */\n    if (lpUdate->st.wSecond < 59)\n      lpUdate->st.wSecond++;\n    else\n    {\n      lpUdate->st.wSecond = 0;\n      if (lpUdate->st.wMinute < 59)\n        lpUdate->st.wMinute++;\n      else\n      {\n        lpUdate->st.wMinute = 0;\n        if (lpUdate->st.wHour < 23)\n          lpUdate->st.wHour++;\n        else\n        {\n          lpUdate->st.wHour = 0;\n          /* Roll over a whole day */\n          if (++lpUdate->st.wDay > 28)\n            VARIANT_RollUdate(lpUdate);\n        }\n      }\n    }\n  }\n  return S_OK;\n}\n\n#define GET_NUMBER_TEXT(fld,name) \\\n  buff[0] = 0; \\\n  if (!GetLocaleInfoA(lcid, lctype|fld, buff, 2)) \\\n    WARN(\"buffer too small for \" #fld \"\\n\"); \\\n  else \\\n    if (buff[0]) lpChars->name = buff[0]; \\\n  TRACE(\"lcid 0x%x, \" #name \"=%d '%c'\\n\", lcid, lpChars->name, lpChars->name)\n\n/* Get the valid number characters for an lcid */\nstatic void VARIANT_GetLocalisedNumberChars(VARIANT_NUMBER_CHARS *lpChars, LCID lcid, DWORD dwFlags)\n{\n  static const VARIANT_NUMBER_CHARS defaultChars = { '-','+','.',',','$',0,'.',',' };\n  static VARIANT_NUMBER_CHARS lastChars;\n  static LCID lastLcid = -1;\n  static DWORD lastFlags = 0;\n  LCTYPE lctype = dwFlags & LOCALE_NOUSEROVERRIDE;\n  OLECHAR16 buff[4];\n\n  /* To make caching thread-safe, a critical section is needed */\n  EnterCriticalSection(&cache_cs);\n\n  /* Asking for default locale entries is very expensive: It is a registry\n     server call. So cache one locally, as Microsoft does it too */\n  if(lcid == lastLcid && dwFlags == lastFlags)\n  {\n    memcpy(lpChars, &lastChars, sizeof(defaultChars));\n    LeaveCriticalSection(&cache_cs);\n    return;\n  }\n\n  memcpy(lpChars, &defaultChars, sizeof(defaultChars));\n  GET_NUMBER_TEXT(LOCALE_SNEGATIVESIGN, cNegativeSymbol);\n  GET_NUMBER_TEXT(LOCALE_SPOSITIVESIGN, cPositiveSymbol);\n  GET_NUMBER_TEXT(LOCALE_SDECIMAL, cDecimalPoint);\n  GET_NUMBER_TEXT(LOCALE_STHOUSAND, cDigitSeparator);\n  GET_NUMBER_TEXT(LOCALE_SMONDECIMALSEP, cCurrencyDecimalPoint);\n  GET_NUMBER_TEXT(LOCALE_SMONTHOUSANDSEP, cCurrencyDigitSeparator);\n\n  /* Local currency symbols are often 2 characters */\n  lpChars->cCurrencyLocal2 = '\\0';\n  switch(GetLocaleInfoA(lcid, lctype|LOCALE_SCURRENCY, buff, ARRAY_SIZE(buff)))\n  {\n    case 3: lpChars->cCurrencyLocal2 = buff[1]; /* Fall through */\n    case 2: lpChars->cCurrencyLocal  = buff[0];\n            break;\n    default: WARN(\"buffer too small for LOCALE_SCURRENCY\\n\");\n  }\n  TRACE(\"lcid 0x%x, cCurrencyLocal =%d,%d '%c','%c'\\n\", lcid, lpChars->cCurrencyLocal,\n        lpChars->cCurrencyLocal2, lpChars->cCurrencyLocal, lpChars->cCurrencyLocal2);\n\n  memcpy(&lastChars, lpChars, sizeof(defaultChars));\n  lastLcid = lcid;\n  lastFlags = dwFlags;\n  LeaveCriticalSection(&cache_cs);\n}\n\n/* Number Parsing States */\n#define B_PROCESSING_EXPONENT 0x1\n#define B_NEGATIVE_EXPONENT   0x2\n#define B_EXPONENT_START      0x4\n#define B_INEXACT_ZEROS       0x8\n#define B_LEADING_ZERO        0x10\n#define B_PROCESSING_HEX      0x20\n#define B_PROCESSING_OCT      0x40\n\n/**********************************************************************\n *              VarParseNumFromStr [OLEAUT32.46]\n *\n * Parse a string containing a number into a NUMPARSE structure.\n *\n * PARAMS\n *  lpszStr [I]   String to parse number from\n *  lcid    [I]   Locale Id for the conversion\n *  dwFlags [I]   0, or LOCALE_NOUSEROVERRIDE to use system default number chars\n *  pNumprs [I/O] Destination for parsed number\n *  rgbDig  [O]   Destination for digits read in\n *\n * RETURNS\n *  Success: S_OK. pNumprs and rgbDig contain the parsed representation of\n *           the number.\n *  Failure: E_INVALIDARG, if any parameter is invalid.\n *           DISP_E_TYPEMISMATCH, if the string is not a number or is formatted\n *           incorrectly.\n *           DISP_E_OVERFLOW, if rgbDig is too small to hold the number.\n *\n * NOTES\n *  pNumprs must have the following fields set:\n *   cDig: Set to the size of rgbDig.\n *   dwInFlags: Set to the allowable syntax of the number using NUMPRS_ flags\n *            from \"oleauto.h\".\n *\n * FIXME\n *  - I am unsure if this function should parse non-Arabic (e.g. Thai)\n *   numerals, so this has not been implemented.\n */\nHRESULT WINAPI VarParseNumFromStr16(OLECHAR16 *lpszStr, LCID lcid, ULONG dwFlags,\n                                  NUMPARSE *pNumprs, BYTE *rgbDig)\n{\n  VARIANT_NUMBER_CHARS chars;\n  BYTE rgbTmp[1024];\n  DWORD dwState = B_EXPONENT_START|B_INEXACT_ZEROS;\n  int iMaxDigits = ARRAY_SIZE(rgbTmp);\n  int cchUsed = 0;\n\n  TRACE(\"(%s,%d,0x%08x,%p,%p)\\n\", debugstr_a(lpszStr), lcid, dwFlags, pNumprs, rgbDig);\n\n  if (!pNumprs || !rgbDig)\n    return E_INVALIDARG;\n\n  if (pNumprs->cDig < iMaxDigits)\n    iMaxDigits = pNumprs->cDig;\n\n  pNumprs->cDig = 0;\n  pNumprs->dwOutFlags = 0;\n  pNumprs->cchUsed = 0;\n  pNumprs->nBaseShift = 0;\n  pNumprs->nPwr10 = 0;\n\n  if (!lpszStr)\n    return DISP_E_TYPEMISMATCH;\n\n  VARIANT_GetLocalisedNumberChars(&chars, lcid, dwFlags);\n\n  /* First consume all the leading symbols and space from the string */\n  while (1)\n  {\n    if (pNumprs->dwInFlags & NUMPRS_LEADING_WHITE && isspaceA(*lpszStr))\n    {\n      pNumprs->dwOutFlags |= NUMPRS_LEADING_WHITE;\n      do\n      {\n        cchUsed++;\n        lpszStr++;\n      } while (isspaceA(*lpszStr));\n    }\n    else if (pNumprs->dwInFlags & NUMPRS_LEADING_PLUS &&\n             *lpszStr == chars.cPositiveSymbol &&\n             !(pNumprs->dwOutFlags & NUMPRS_LEADING_PLUS))\n    {\n      pNumprs->dwOutFlags |= NUMPRS_LEADING_PLUS;\n      cchUsed++;\n      lpszStr++;\n    }\n    else if (pNumprs->dwInFlags & NUMPRS_LEADING_MINUS &&\n             *lpszStr == chars.cNegativeSymbol &&\n             !(pNumprs->dwOutFlags & NUMPRS_LEADING_MINUS))\n    {\n      pNumprs->dwOutFlags |= (NUMPRS_LEADING_MINUS|NUMPRS_NEG);\n      cchUsed++;\n      lpszStr++;\n    }\n    else if (pNumprs->dwInFlags & NUMPRS_CURRENCY &&\n             !(pNumprs->dwOutFlags & NUMPRS_CURRENCY) &&\n             *lpszStr == chars.cCurrencyLocal &&\n             (!chars.cCurrencyLocal2 || lpszStr[1] == chars.cCurrencyLocal2))\n    {\n      pNumprs->dwOutFlags |= NUMPRS_CURRENCY;\n      cchUsed++;\n      lpszStr++;\n      /* Only accept currency characters */\n      chars.cDecimalPoint = chars.cCurrencyDecimalPoint;\n      chars.cDigitSeparator = chars.cCurrencyDigitSeparator;\n    }\n    else if (pNumprs->dwInFlags & NUMPRS_PARENS && *lpszStr == '(' &&\n             !(pNumprs->dwOutFlags & NUMPRS_PARENS))\n    {\n      pNumprs->dwOutFlags |= NUMPRS_PARENS;\n      cchUsed++;\n      lpszStr++;\n    }\n    else\n      break;\n  }\n\n  if (!(pNumprs->dwOutFlags & NUMPRS_CURRENCY))\n  {\n    /* Only accept non-currency characters */\n    chars.cCurrencyDecimalPoint = chars.cDecimalPoint;\n    chars.cCurrencyDigitSeparator = chars.cDigitSeparator;\n  }\n\n  if ((*lpszStr == '&' && (*(lpszStr+1) == 'H' || *(lpszStr+1) == 'h')) &&\n    pNumprs->dwInFlags & NUMPRS_HEX_OCT)\n  {\n      dwState |= B_PROCESSING_HEX;\n      pNumprs->dwOutFlags |= NUMPRS_HEX_OCT;\n      cchUsed=cchUsed+2;\n      lpszStr=lpszStr+2;\n  }\n  else if ((*lpszStr == '&' && (*(lpszStr+1) == 'O' || *(lpszStr+1) == 'o')) &&\n    pNumprs->dwInFlags & NUMPRS_HEX_OCT)\n  {\n      dwState |= B_PROCESSING_OCT;\n      pNumprs->dwOutFlags |= NUMPRS_HEX_OCT;\n      cchUsed=cchUsed+2;\n      lpszStr=lpszStr+2;\n  }\n\n  /* Strip Leading zeros */\n  while (*lpszStr == '0')\n  {\n    dwState |= B_LEADING_ZERO;\n    cchUsed++;\n    lpszStr++;\n  }\n\n  while (*lpszStr)\n  {\n    if (isdigitA(*lpszStr))\n    {\n      if (dwState & B_PROCESSING_EXPONENT)\n      {\n        int exponentSize = 0;\n        if (dwState & B_EXPONENT_START)\n        {\n          if (!isdigitA(*lpszStr))\n            break; /* No exponent digits - invalid */\n          while (*lpszStr == '0')\n          {\n            /* Skip leading zero's in the exponent */\n            cchUsed++;\n            lpszStr++;\n          }\n        }\n\n        while (isdigitA(*lpszStr))\n        {\n          exponentSize *= 10;\n          exponentSize += *lpszStr - '0';\n          cchUsed++;\n          lpszStr++;\n        }\n        if (dwState & B_NEGATIVE_EXPONENT)\n          exponentSize = -exponentSize;\n        /* Add the exponent into the powers of 10 */\n        pNumprs->nPwr10 += exponentSize;\n        dwState &= ~(B_PROCESSING_EXPONENT|B_EXPONENT_START);\n        lpszStr--; /* back up to allow processing of next char */\n      }\n      else\n      {\n        if ((pNumprs->cDig >= iMaxDigits) && !(dwState & B_PROCESSING_HEX)\n          && !(dwState & B_PROCESSING_OCT))\n        {\n          pNumprs->dwOutFlags |= NUMPRS_INEXACT;\n\n          if (*lpszStr != '0')\n            dwState &= ~B_INEXACT_ZEROS; /* Inexact number with non-trailing zeros */\n\n          /* This digit can't be represented, but count it in nPwr10 */\n          if (pNumprs->dwOutFlags & NUMPRS_DECIMAL)\n            pNumprs->nPwr10--;\n          else\n            pNumprs->nPwr10++;\n        }\n        else\n        {\n          if ((dwState & B_PROCESSING_OCT) && ((*lpszStr == '8') || (*lpszStr == '9')))\n            break;\n\n          if (pNumprs->dwOutFlags & NUMPRS_DECIMAL)\n            pNumprs->nPwr10--; /* Count decimal points in nPwr10 */\n\n          rgbTmp[pNumprs->cDig] = *lpszStr - '0';\n        }\n        pNumprs->cDig++;\n        cchUsed++;\n      }\n    }\n    else if (*lpszStr == chars.cDigitSeparator && pNumprs->dwInFlags & NUMPRS_THOUSANDS)\n    {\n      pNumprs->dwOutFlags |= NUMPRS_THOUSANDS;\n      cchUsed++;\n    }\n    else if (*lpszStr == chars.cDecimalPoint &&\n             pNumprs->dwInFlags & NUMPRS_DECIMAL &&\n             !(pNumprs->dwOutFlags & (NUMPRS_DECIMAL|NUMPRS_EXPONENT)))\n    {\n      pNumprs->dwOutFlags |= NUMPRS_DECIMAL;\n      cchUsed++;\n\n      /* If we have no digits so far, skip leading zeros */\n      if (!pNumprs->cDig)\n      {\n        while (lpszStr[1] == '0')\n        {\n          dwState |= B_LEADING_ZERO;\n          cchUsed++;\n          lpszStr++;\n          pNumprs->nPwr10--;\n        }\n      }\n    }\n    else if (((*lpszStr >= 'a' && *lpszStr <= 'f') ||\n             (*lpszStr >= 'A' && *lpszStr <= 'F')) &&\n             dwState & B_PROCESSING_HEX)\n    {\n      if (pNumprs->cDig >= iMaxDigits)\n      {\n        return DISP_E_OVERFLOW;\n      }\n      else\n      {\n        if (*lpszStr >= 'a')\n          rgbTmp[pNumprs->cDig] = *lpszStr - 'a' + 10;\n        else\n          rgbTmp[pNumprs->cDig] = *lpszStr - 'A' + 10;\n      }\n      pNumprs->cDig++;\n      cchUsed++;\n    }\n    else if ((*lpszStr == 'e' || *lpszStr == 'E') &&\n             pNumprs->dwInFlags & NUMPRS_EXPONENT &&\n             !(pNumprs->dwOutFlags & NUMPRS_EXPONENT))\n    {\n      dwState |= B_PROCESSING_EXPONENT;\n      pNumprs->dwOutFlags |= NUMPRS_EXPONENT;\n      cchUsed++;\n    }\n    else if (dwState & B_PROCESSING_EXPONENT && *lpszStr == chars.cPositiveSymbol)\n    {\n      cchUsed++; /* Ignore positive exponent */\n    }\n    else if (dwState & B_PROCESSING_EXPONENT && *lpszStr == chars.cNegativeSymbol)\n    {\n      dwState |= B_NEGATIVE_EXPONENT;\n      cchUsed++;\n    }\n    else\n      break; /* Stop at an unrecognised character */\n\n    lpszStr++;\n  }\n\n  if (!pNumprs->cDig && dwState & B_LEADING_ZERO)\n  {\n    /* Ensure a 0 on its own gets stored */\n    pNumprs->cDig = 1;\n    rgbTmp[0] = 0;\n  }\n\n  if (pNumprs->dwOutFlags & NUMPRS_EXPONENT && dwState & B_PROCESSING_EXPONENT)\n  {\n    pNumprs->cchUsed = cchUsed;\n    WARN(\"didn't completely parse exponent\\n\");\n    return DISP_E_TYPEMISMATCH; /* Failed to completely parse the exponent */\n  }\n\n  if (pNumprs->dwOutFlags & NUMPRS_INEXACT)\n  {\n    if (dwState & B_INEXACT_ZEROS)\n      pNumprs->dwOutFlags &= ~NUMPRS_INEXACT; /* All zeros doesn't set NUMPRS_INEXACT */\n  } else if(pNumprs->dwInFlags & NUMPRS_HEX_OCT)\n  {\n    /* copy all of the digits into the output digit buffer */\n    /* this is exactly what windows does although it also returns */\n    /* cDig of X and writes X+Y where Y>=0 number of digits to rgbDig */\n    memcpy(rgbDig, rgbTmp, pNumprs->cDig * sizeof(BYTE));\n\n    if (dwState & B_PROCESSING_HEX) {\n      /* hex numbers have always the same format */\n      pNumprs->nPwr10=0;\n      pNumprs->nBaseShift=4;\n    } else {\n      if (dwState & B_PROCESSING_OCT) {\n        /* oct numbers have always the same format */\n        pNumprs->nPwr10=0;\n        pNumprs->nBaseShift=3;\n      } else {\n        while (pNumprs->cDig > 1 && !rgbTmp[pNumprs->cDig - 1])\n        {\n          pNumprs->nPwr10++;\n          pNumprs->cDig--;\n        }\n      }\n    }\n  } else\n  {\n    /* Remove trailing zeros from the last (whole number or decimal) part */\n    while (pNumprs->cDig > 1 && !rgbTmp[pNumprs->cDig - 1])\n    {\n      pNumprs->nPwr10++;\n      pNumprs->cDig--;\n    }\n  }\n\n  if (pNumprs->cDig <= iMaxDigits)\n    pNumprs->dwOutFlags &= ~NUMPRS_INEXACT; /* Ignore stripped zeros for NUMPRS_INEXACT */\n  else\n    pNumprs->cDig = iMaxDigits; /* Only return iMaxDigits worth of digits */\n\n  /* Copy the digits we processed into rgbDig */\n  memcpy(rgbDig, rgbTmp, pNumprs->cDig * sizeof(BYTE));\n\n  /* Consume any trailing symbols and space */\n  while (1)\n  {\n    if ((pNumprs->dwInFlags & NUMPRS_TRAILING_WHITE) && isspaceA(*lpszStr))\n    {\n      pNumprs->dwOutFlags |= NUMPRS_TRAILING_WHITE;\n      do\n      {\n        cchUsed++;\n        lpszStr++;\n      } while (isspaceA(*lpszStr));\n    }\n    else if (pNumprs->dwInFlags & NUMPRS_TRAILING_PLUS &&\n             !(pNumprs->dwOutFlags & NUMPRS_LEADING_PLUS) &&\n             *lpszStr == chars.cPositiveSymbol)\n    {\n      pNumprs->dwOutFlags |= NUMPRS_TRAILING_PLUS;\n      cchUsed++;\n      lpszStr++;\n    }\n    else if (pNumprs->dwInFlags & NUMPRS_TRAILING_MINUS &&\n             !(pNumprs->dwOutFlags & NUMPRS_LEADING_MINUS) &&\n             *lpszStr == chars.cNegativeSymbol)\n    {\n      pNumprs->dwOutFlags |= (NUMPRS_TRAILING_MINUS|NUMPRS_NEG);\n      cchUsed++;\n      lpszStr++;\n    }\n    else if (pNumprs->dwInFlags & NUMPRS_PARENS && *lpszStr == ')' &&\n             pNumprs->dwOutFlags & NUMPRS_PARENS)\n    {\n      cchUsed++;\n      lpszStr++;\n      pNumprs->dwOutFlags |= NUMPRS_NEG;\n    }\n    else\n      break;\n  }\n\n  if (pNumprs->dwOutFlags & NUMPRS_PARENS && !(pNumprs->dwOutFlags & NUMPRS_NEG))\n  {\n    pNumprs->cchUsed = cchUsed;\n    return DISP_E_TYPEMISMATCH; /* Opening parenthesis not matched */\n  }\n\n  if (pNumprs->dwInFlags & NUMPRS_USE_ALL && *lpszStr != '\\0')\n    return DISP_E_TYPEMISMATCH; /* Not all chars were consumed */\n\n  if (!pNumprs->cDig)\n    return DISP_E_TYPEMISMATCH; /* No Number found */\n\n  pNumprs->cchUsed = cchUsed;\n  return S_OK;\n}\n\n/* VTBIT flags indicating an integer value */\n#define INTEGER_VTBITS (VTBIT_I1|VTBIT_UI1|VTBIT_I2|VTBIT_UI2|VTBIT_I4|VTBIT_UI4|VTBIT_I8|VTBIT_UI8)\n/* VTBIT flags indicating a real number value */\n#define REAL_VTBITS (VTBIT_R4|VTBIT_R8|VTBIT_CY)\n\n/* Helper macros to check whether bit pattern fits in VARIANT16  (x is a ULONG64 ) */\n#define FITS_AS_I1(x) ((x) >> 8 == 0)\n#define FITS_AS_I2(x) ((x) >> 16 == 0)\n#define FITS_AS_I4(x) ((x) >> 32 == 0)\n\n/**********************************************************************\n *              VarNumFromParseNum [OLEAUT32.47]\n *\n * Convert a NUMPARSE structure into a numeric Variant type.\n *\n * PARAMS\n *  pNumprs  [I] Source for parsed number. cDig must be set to the size of rgbDig\n *  rgbDig   [I] Source for the numbers digits\n *  dwVtBits [I] VTBIT_ flags from \"oleauto.h\" indicating the acceptable dest types\n *  pVarDst  [O] Destination for the converted Variant value.\n *\n * RETURNS\n *  Success: S_OK. pVarDst contains the converted value.\n *  Failure: E_INVALIDARG, if any parameter is invalid.\n *           DISP_E_OVERFLOW, if the number is too big for the types set in dwVtBits.\n *\n * NOTES\n *  - The smallest favoured type present in dwVtBits that can represent the\n *    number in pNumprs without losing precision is used.\n *  - Signed types are preferred over unsigned types of the same size.\n *  - Preferred types in order are: integer, float, double, currency then decimal.\n *  - Rounding (dropping of decimal points) occurs without error. See VarI8FromR816()\n *    for details of the rounding method.\n *  - pVarDst is not cleared before the result is stored in it.\n *  - WinXP and Win2003 support VTBIT_I8, VTBIT_UI8 but that's buggy (by\n *    design?): If some other VTBIT's for integers are specified together\n *    with VTBIT_I8 and the number will fit only in a VT_I8 Windows will \"cast\"\n *    the number to the smallest requested integer truncating this way the\n *    number.  Wine doesn't implement this \"feature\" (yet?).\n */\nHRESULT WINAPI VarNumFromParseNum16(NUMPARSE *pNumprs, BYTE *rgbDig,\n                                  ULONG dwVtBits, VARIANT16 *pVarDst)\n{\n  /* Scale factors and limits for double arithmetic */\n  static const double dblMultipliers[11] = {\n    1.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0,\n    1000000.0, 10000000.0, 100000000.0, 1000000000.0, 10000000000.0\n  };\n  static const double dblMinimums[11] = {\n    R8_MIN, R8_MIN*10.0, R8_MIN*100.0, R8_MIN*1000.0, R8_MIN*10000.0,\n    R8_MIN*100000.0, R8_MIN*1000000.0, R8_MIN*10000000.0,\n    R8_MIN*100000000.0, R8_MIN*1000000000.0, R8_MIN*10000000000.0\n  };\n  static const double dblMaximums[11] = {\n    R8_MAX, R8_MAX/10.0, R8_MAX/100.0, R8_MAX/1000.0, R8_MAX/10000.0,\n    R8_MAX/100000.0, R8_MAX/1000000.0, R8_MAX/10000000.0,\n    R8_MAX/100000000.0, R8_MAX/1000000000.0, R8_MAX/10000000000.0\n  };\n\n  int wholeNumberDigits, fractionalDigits, divisor10 = 0, multiplier10 = 0;\n\n  TRACE(\"(%p,%p,0x%x,%p)\\n\", pNumprs, rgbDig, dwVtBits, pVarDst);\n\n  if (pNumprs->nBaseShift)\n  {\n    /* nBaseShift indicates a hex or octal number */\n    ULONG64 ul64 = 0;\n    LONG64 l64;\n    int i;\n\n    /* Convert the hex or octal number string into a UI64 */\n    for (i = 0; i < pNumprs->cDig; i++)\n    {\n      if (ul64 > ((UI8_MAX>>pNumprs->nBaseShift) - rgbDig[i]))\n      {\n        TRACE(\"Overflow multiplying digits\\n\");\n        return DISP_E_OVERFLOW;\n      }\n      ul64 = (ul64<<pNumprs->nBaseShift) + rgbDig[i];\n    }\n\n    /* also make a negative representation */\n    l64=-ul64;\n\n    /* Try signed and unsigned types in size order */\n    if (dwVtBits & VTBIT_I1 && FITS_AS_I1(ul64))\n    {\n      V_VT(pVarDst) = VT_I1;\n      V_I1(pVarDst) = ul64;\n      return S_OK;\n    }\n    else if (dwVtBits & VTBIT_UI1 && FITS_AS_I1(ul64))\n    {\n      V_VT(pVarDst) = VT_UI1;\n      V_UI1(pVarDst) = ul64;\n      return S_OK;\n    }\n    else if (dwVtBits & VTBIT_I2 && FITS_AS_I2(ul64))\n    {\n      V_VT(pVarDst) = VT_I2;\n      V_I2(pVarDst) = ul64;\n      return S_OK;\n    }\n    else if (dwVtBits & VTBIT_UI2 && FITS_AS_I2(ul64))\n    {\n      V_VT(pVarDst) = VT_UI2;\n      V_UI2(pVarDst) = ul64;\n      return S_OK;\n    }\n    else if (dwVtBits & VTBIT_I4 && FITS_AS_I4(ul64))\n    {\n      V_VT(pVarDst) = VT_I4;\n      V_I4(pVarDst) = ul64;\n      return S_OK;\n    }\n    else if (dwVtBits & VTBIT_UI4 && FITS_AS_I4(ul64))\n    {\n      V_VT(pVarDst) = VT_UI4;\n      V_UI4(pVarDst) = ul64;\n      return S_OK;\n    }\n    else if (dwVtBits & VTBIT_I8 && ((ul64 <= I8_MAX)||(l64>=I8_MIN)))\n    {\n      V_VT(pVarDst) = VT_I8;\n      V_I8(pVarDst) = ul64;\n      return S_OK;\n    }\n    else if (dwVtBits & VTBIT_UI8)\n    {\n      V_VT(pVarDst) = VT_UI8;\n      V_UI8(pVarDst) = ul64;\n      return S_OK;\n    }\n    else if ((dwVtBits & VTBIT_DECIMAL) == VTBIT_DECIMAL)\n    {\n#ifdef AVAIL_32BIT_VAR\n      V_VT(pVarDst) = VT_DECIMAL;\n      DEC_SIGNSCALE(&V_DECIMAL(pVarDst)) = SIGNSCALE(DECIMAL_POS,0);\n      DEC_HI32(&V_DECIMAL(pVarDst)) = 0;\n      DEC_LO64(&V_DECIMAL(pVarDst)) = ul64;\n      return S_OK;\n#endif\n    }\n    else if (dwVtBits & VTBIT_R4 && ((ul64 <= I4_MAX)||(l64 >= I4_MIN)))\n    {\n      V_VT(pVarDst) = VT_R4;\n      if (ul64 <= I4_MAX)\n          V_R4(pVarDst) = ul64;\n      else\n          V_R4(pVarDst) = l64;\n      return S_OK;\n    }\n    else if (dwVtBits & VTBIT_R8 && ((ul64 <= I4_MAX)||(l64 >= I4_MIN)))\n    {\n      V_VT(pVarDst) = VT_R8;\n      if (ul64 <= I4_MAX)\n          V_R8(pVarDst) = ul64;\n      else\n          V_R8(pVarDst) = l64;\n      return S_OK;\n    }\n\n    TRACE(\"Overflow: possible return types: 0x%x, value: %s\\n\", dwVtBits, wine_dbgstr_longlong(ul64));\n    return DISP_E_OVERFLOW;\n  }\n\n  /* Count the number of relevant fractional and whole digits stored,\n   * And compute the divisor/multiplier to scale the number by.\n   */\n  if (pNumprs->nPwr10 < 0)\n  {\n    if (-pNumprs->nPwr10 >= pNumprs->cDig)\n    {\n      /* A real number < +/- 1.0 e.g. 0.1024 or 0.01024 */\n      wholeNumberDigits = 0;\n      fractionalDigits = pNumprs->cDig;\n      divisor10 = -pNumprs->nPwr10;\n    }\n    else\n    {\n      /* An exactly represented real number e.g. 1.024 */\n      wholeNumberDigits = pNumprs->cDig + pNumprs->nPwr10;\n      fractionalDigits = pNumprs->cDig - wholeNumberDigits;\n      divisor10 = pNumprs->cDig - wholeNumberDigits;\n    }\n  }\n  else if (pNumprs->nPwr10 == 0)\n  {\n    /* An exactly represented whole number e.g. 1024 */\n    wholeNumberDigits = pNumprs->cDig;\n    fractionalDigits = 0;\n  }\n  else /* pNumprs->nPwr10 > 0 */\n  {\n    /* A whole number followed by nPwr10 0's e.g. 102400 */\n    wholeNumberDigits = pNumprs->cDig;\n    fractionalDigits = 0;\n    multiplier10 = pNumprs->nPwr10;\n  }\n\n  TRACE(\"cDig %d; nPwr10 %d, whole %d, frac %d mult %d; div %d\\n\",\n        pNumprs->cDig, pNumprs->nPwr10, wholeNumberDigits, fractionalDigits,\n        multiplier10, divisor10);\n\n  if (dwVtBits & (INTEGER_VTBITS|VTBIT_DECIMAL) &&\n      (!fractionalDigits || !(dwVtBits & (REAL_VTBITS|VTBIT_DECIMAL))))\n  {\n    /* We have one or more integer output choices, and either:\n     *  1) An integer input value, or\n     *  2) A real number input value but no floating output choices.\n     * Alternately, we have a DECIMAL output available and an integer input.\n     *\n     * So, place the integer value into pVarDst, using the smallest type\n     * possible and preferring signed over unsigned types.\n     */\n    BOOL bOverflow = FALSE, bNegative;\n    ULONG64 ul64 = 0;\n    int i;\n\n    /* Convert the integer part of the number into a UI8 */\n    for (i = 0; i < wholeNumberDigits; i++)\n    {\n      if (ul64 > UI8_MAX / 10 || (ul64 == UI8_MAX / 10 && rgbDig[i] > UI8_MAX % 10))\n      {\n        TRACE(\"Overflow multiplying digits\\n\");\n        bOverflow = TRUE;\n        break;\n      }\n      ul64 = ul64 * 10 + rgbDig[i];\n    }\n\n    /* Account for the scale of the number */\n    if (!bOverflow && multiplier10)\n    {\n      for (i = 0; i < multiplier10; i++)\n      {\n        if (ul64 > (UI8_MAX / 10))\n        {\n          TRACE(\"Overflow scaling number\\n\");\n          bOverflow = TRUE;\n          break;\n        }\n        ul64 = ul64 * 10;\n      }\n    }\n\n    /* If we have any fractional digits, round the value.\n     * Note we don't have to do this if divisor10 is < 1,\n     * because this means the fractional part must be < 0.5\n     */\n    if (!bOverflow && fractionalDigits && divisor10 > 0)\n    {\n      const BYTE* fracDig = rgbDig + wholeNumberDigits;\n      BOOL bAdjust = FALSE;\n\n      TRACE(\"first decimal value is %d\\n\", *fracDig);\n\n      if (*fracDig > 5)\n        bAdjust = TRUE; /* > 0.5 */\n      else if (*fracDig == 5)\n      {\n        for (i = 1; i < fractionalDigits; i++)\n        {\n          if (fracDig[i])\n          {\n            bAdjust = TRUE; /* > 0.5 */\n            break;\n          }\n        }\n        /* If exactly 0.5, round only odd values */\n        if (i == fractionalDigits && (ul64 & 1))\n          bAdjust = TRUE;\n      }\n\n      if (bAdjust)\n      {\n        if (ul64 == UI8_MAX)\n        {\n          TRACE(\"Overflow after rounding\\n\");\n          bOverflow = TRUE;\n        }\n        ul64++;\n      }\n    }\n\n    /* Zero is not a negative number */\n    bNegative = pNumprs->dwOutFlags & NUMPRS_NEG && ul64;\n\n    TRACE(\"Integer value is 0x%s, bNeg %d\\n\", wine_dbgstr_longlong(ul64), bNegative);\n\n    /* For negative integers, try the signed types in size order */\n    if (!bOverflow && bNegative)\n    {\n      if (dwVtBits & (VTBIT_I1|VTBIT_I2|VTBIT_I4|VTBIT_I8))\n      {\n        if (dwVtBits & VTBIT_I1 && ul64 <= -I1_MIN)\n        {\n          V_VT(pVarDst) = VT_I1;\n          V_I1(pVarDst) = -ul64;\n          return S_OK;\n        }\n        else if (dwVtBits & VTBIT_I2 && ul64 <= -I2_MIN)\n        {\n          V_VT(pVarDst) = VT_I2;\n          V_I2(pVarDst) = -ul64;\n          return S_OK;\n        }\n        else if (dwVtBits & VTBIT_I4 && ul64 <= -((LONGLONG)I4_MIN))\n        {\n          V_VT(pVarDst) = VT_I4;\n          V_I4(pVarDst) = -ul64;\n          return S_OK;\n        }\n        else if (dwVtBits & VTBIT_I8 && ul64 <= (ULONGLONG)I8_MAX + 1)\n        {\n          V_VT(pVarDst) = VT_I8;\n          V_I8(pVarDst) = -ul64;\n          return S_OK;\n        }\n        else if ((dwVtBits & (REAL_VTBITS|VTBIT_DECIMAL)) == VTBIT_DECIMAL)\n        {\n#ifdef AVAIL_32BIT_VAR\n          /* Decimal is only output choice left - fast path */\n          V_VT(pVarDst) = VT_DECIMAL;\n          DEC_SIGNSCALE(&V_DECIMAL(pVarDst)) = SIGNSCALE(DECIMAL_NEG,0);\n          DEC_HI32(&V_DECIMAL(pVarDst)) = 0;\n          DEC_LO64(&V_DECIMAL(pVarDst)) = -ul64;\n          return S_OK;\n#endif\n        }\n      }\n    }\n    else if (!bOverflow)\n    {\n      /* For positive integers, try signed then unsigned types in size order */\n      if (dwVtBits & VTBIT_I1 && ul64 <= I1_MAX)\n      {\n        V_VT(pVarDst) = VT_I1;\n        V_I1(pVarDst) = ul64;\n        return S_OK;\n      }\n      else if (dwVtBits & VTBIT_UI1 && ul64 <= UI1_MAX)\n      {\n        V_VT(pVarDst) = VT_UI1;\n        V_UI1(pVarDst) = ul64;\n        return S_OK;\n      }\n      else if (dwVtBits & VTBIT_I2 && ul64 <= I2_MAX)\n      {\n        V_VT(pVarDst) = VT_I2;\n        V_I2(pVarDst) = ul64;\n        return S_OK;\n      }\n      else if (dwVtBits & VTBIT_UI2 && ul64 <= UI2_MAX)\n      {\n        V_VT(pVarDst) = VT_UI2;\n        V_UI2(pVarDst) = ul64;\n        return S_OK;\n      }\n      else if (dwVtBits & VTBIT_I4 && ul64 <= I4_MAX)\n      {\n        V_VT(pVarDst) = VT_I4;\n        V_I4(pVarDst) = ul64;\n        return S_OK;\n      }\n      else if (dwVtBits & VTBIT_UI4 && ul64 <= UI4_MAX)\n      {\n        V_VT(pVarDst) = VT_UI4;\n        V_UI4(pVarDst) = ul64;\n        return S_OK;\n      }\n      else if (dwVtBits & VTBIT_I8 && ul64 <= I8_MAX)\n      {\n        V_VT(pVarDst) = VT_I8;\n        V_I8(pVarDst) = ul64;\n        return S_OK;\n      }\n      else if (dwVtBits & VTBIT_UI8)\n      {\n        V_VT(pVarDst) = VT_UI8;\n        V_UI8(pVarDst) = ul64;\n        return S_OK;\n      }\n#ifdef AVAIL_32BIT_VAR\n      else if ((dwVtBits & (REAL_VTBITS|VTBIT_DECIMAL)) == VTBIT_DECIMAL)\n      {\n        /* Decimal is only output choice left - fast path */\n        V_VT(pVarDst) = VT_DECIMAL;\n        DEC_SIGNSCALE(&V_DECIMAL(pVarDst)) = SIGNSCALE(DECIMAL_POS,0);\n        DEC_HI32(&V_DECIMAL(pVarDst)) = 0;\n        DEC_LO64(&V_DECIMAL(pVarDst)) = ul64;\n        return S_OK;\n      }\n#endif\n    }\n  }\n\n  if (dwVtBits & REAL_VTBITS)\n  {\n    /* Try to put the number into a float or real */\n    BOOL bOverflow = FALSE, bNegative = pNumprs->dwOutFlags & NUMPRS_NEG;\n    double whole = 0.0;\n    int i;\n\n    /* Convert the number into a double */\n    for (i = 0; i < pNumprs->cDig; i++)\n      whole = whole * 10.0 + rgbDig[i];\n\n    TRACE(\"Whole double value is %16.16g\\n\", whole);\n\n    /* Account for the scale */\n    while (multiplier10 > 10)\n    {\n      if (whole > dblMaximums[10])\n      {\n        dwVtBits &= ~(VTBIT_R4|VTBIT_R8|VTBIT_CY);\n        bOverflow = TRUE;\n        break;\n      }\n      whole = whole * dblMultipliers[10];\n      multiplier10 -= 10;\n    }\n    if (multiplier10 && !bOverflow)\n    {\n      if (whole > dblMaximums[multiplier10])\n      {\n        dwVtBits &= ~(VTBIT_R4|VTBIT_R8|VTBIT_CY);\n        bOverflow = TRUE;\n      }\n      else\n        whole = whole * dblMultipliers[multiplier10];\n    }\n\n    if (!bOverflow)\n        TRACE(\"Scaled double value is %16.16g\\n\", whole);\n\n    while (divisor10 > 10 && !bOverflow)\n    {\n      if (whole < dblMinimums[10] && whole != 0)\n      {\n        whole = 0; /* ignore underflow */\n        divisor10 = 0;\n        break;\n      }\n      whole = whole / dblMultipliers[10];\n      divisor10 -= 10;\n    }\n    if (divisor10 && !bOverflow)\n    {\n      if (whole < dblMinimums[divisor10] && whole != 0)\n      {\n        whole = 0; /* ignore underflow */\n        divisor10 = 0;\n      }\n      else\n        whole = whole / dblMultipliers[divisor10];\n    }\n    if (!bOverflow)\n      TRACE(\"Final double value is %16.16g\\n\", whole);\n\n    if (dwVtBits & VTBIT_R4 &&\n        ((whole <= R4_MAX && whole >= R4_MIN) || whole == 0.0))\n    {\n      TRACE(\"Set R4 to final value\\n\");\n      V_VT(pVarDst) = VT_R4; /* Fits into a float */\n      V_R4(pVarDst) = pNumprs->dwOutFlags & NUMPRS_NEG ? -whole : whole;\n      return S_OK;\n    }\n\n    if (dwVtBits & VTBIT_R8)\n    {\n      TRACE(\"Set R8 to final value\\n\");\n      V_VT(pVarDst) = VT_R8; /* Fits into a double */\n      V_R8(pVarDst) = pNumprs->dwOutFlags & NUMPRS_NEG ? -whole : whole;\n      return S_OK;\n    }\n\n    if (dwVtBits & VTBIT_CY)\n    {\n      if (SUCCEEDED(VarCyFromR816(bNegative ? -whole : whole, &V_CY(pVarDst))))\n      {\n        V_VT(pVarDst) = VT_CY; /* Fits into a currency */\n        TRACE(\"Set CY to final value\\n\");\n        return S_OK;\n      }\n      TRACE(\"Value Overflows CY\\n\");\n    }\n  }\n\n#ifdef AVAIL_32BIT_VAR\n  if (dwVtBits & VTBIT_DECIMAL)\n  {\n    int i;\n    ULONG carry;\n    ULONG64 tmp;\n    DECIMAL* pDec = &V_DECIMAL(pVarDst);\n\n    DECIMAL_SETZERO(*pDec);\n    DEC_LO32(pDec) = 0;\n\n    if (pNumprs->dwOutFlags & NUMPRS_NEG)\n      DEC_SIGN(pDec) = DECIMAL_NEG;\n    else\n      DEC_SIGN(pDec) = DECIMAL_POS;\n\n    /* Factor the significant digits */\n    for (i = 0; i < pNumprs->cDig; i++)\n    {\n      tmp = (ULONG64)DEC_LO32(pDec) * 10 + rgbDig[i];\n      carry = (ULONG)(tmp >> 32);\n      DEC_LO32(pDec) = (ULONG)(tmp & UI4_MAX);\n      tmp = (ULONG64)DEC_MID32(pDec) * 10 + carry;\n      carry = (ULONG)(tmp >> 32);\n      DEC_MID32(pDec) = (ULONG)(tmp & UI4_MAX);\n      tmp = (ULONG64)DEC_HI32(pDec) * 10 + carry;\n      DEC_HI32(pDec) = (ULONG)(tmp & UI4_MAX);\n\n      if (tmp >> 32 & UI4_MAX)\n      {\nVarNumFromParseNum_DecOverflow:\n        TRACE(\"Overflow\\n\");\n        DEC_LO32(pDec) = DEC_MID32(pDec) = DEC_HI32(pDec) = UI4_MAX;\n        return DISP_E_OVERFLOW;\n      }\n    }\n\n    /* Account for the scale of the number */\n    while (multiplier10 > 0)\n    {\n      tmp = (ULONG64)DEC_LO32(pDec) * 10;\n      carry = (ULONG)(tmp >> 32);\n      DEC_LO32(pDec) = (ULONG)(tmp & UI4_MAX);\n      tmp = (ULONG64)DEC_MID32(pDec) * 10 + carry;\n      carry = (ULONG)(tmp >> 32);\n      DEC_MID32(pDec) = (ULONG)(tmp & UI4_MAX);\n      tmp = (ULONG64)DEC_HI32(pDec) * 10 + carry;\n      DEC_HI32(pDec) = (ULONG)(tmp & UI4_MAX);\n\n      if (tmp >> 32 & UI4_MAX)\n        goto VarNumFromParseNum_DecOverflow;\n      multiplier10--;\n    }\n    DEC_SCALE(pDec) = divisor10;\n\n    V_VT(pVarDst) = VT_DECIMAL;\n    return S_OK;\n  }\n#endif\n  return DISP_E_OVERFLOW; /* No more output choices */\n}\n\n/**********************************************************************\n *              VarCat [OLEAUT32.318]\n *\n * Concatenates one variant onto another.\n *\n * PARAMS\n *  left    [I] First variant\n *  right   [I] Second variant\n *  result  [O] Result variant\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: An HRESULT error code indicating the error.\n */\nHRESULT WINAPI VarCat16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 out)\n{\n    SEGBSTR16 left_str = NULL, right_str = NULL;\n    VARTYPE leftvt, rightvt;\n    HRESULT hres;\n\n    TRACE(\"%s,%s,%p)\\n\", debugstr_variant16(left), debugstr_variant16(right), out);\n\n    leftvt = V_VT(left);\n    rightvt = V_VT(right);\n\n    /* when both left and right are NULL the result is NULL */\n    if (leftvt == VT_NULL && rightvt == VT_NULL)\n    {\n        V_VT(out) = VT_NULL;\n        return S_OK;\n    }\n\n    /* There are many special case for errors and return types */\n    if (leftvt == VT_VARIANT && (rightvt == VT_ERROR ||\n        rightvt == VT_DATE || rightvt == VT_DECIMAL))\n        hres = DISP_E_TYPEMISMATCH;\n    else if ((leftvt == VT_I2 || leftvt == VT_I4 ||\n        leftvt == VT_R4 || leftvt == VT_R8 ||\n        leftvt == VT_CY || leftvt == VT_BOOL ||\n        leftvt == VT_BSTR || leftvt == VT_I1 ||\n        leftvt == VT_UI1 || leftvt == VT_UI2 ||\n        leftvt == VT_UI4 || leftvt == VT_I8 ||\n        leftvt == VT_UI8 || leftvt == VT_INT ||\n        leftvt == VT_UINT || leftvt == VT_EMPTY ||\n        leftvt == VT_NULL || leftvt == VT_DATE ||\n        leftvt == VT_DECIMAL || leftvt == VT_DISPATCH)\n        &&\n        (rightvt == VT_I2 || rightvt == VT_I4 ||\n        rightvt == VT_R4 || rightvt == VT_R8 ||\n        rightvt == VT_CY || rightvt == VT_BOOL ||\n        rightvt == VT_BSTR || rightvt == VT_I1 ||\n        rightvt == VT_UI1 || rightvt == VT_UI2 ||\n        rightvt == VT_UI4 || rightvt == VT_I8 ||\n        rightvt == VT_UI8 || rightvt == VT_INT ||\n        rightvt == VT_UINT || rightvt == VT_EMPTY ||\n        rightvt == VT_NULL || rightvt == VT_DATE ||\n        rightvt == VT_DECIMAL || rightvt == VT_DISPATCH))\n        hres = S_OK;\n    else if (rightvt == VT_ERROR && leftvt < VT_VOID)\n        hres = DISP_E_TYPEMISMATCH;\n    else if (leftvt == VT_ERROR && (rightvt == VT_DATE ||\n        rightvt == VT_ERROR || rightvt == VT_DECIMAL))\n        hres = DISP_E_TYPEMISMATCH;\n    else if (rightvt == VT_DATE || rightvt == VT_ERROR ||\n        rightvt == VT_DECIMAL)\n        hres = DISP_E_BADVARTYPE;\n    else if (leftvt == VT_ERROR || rightvt == VT_ERROR)\n        hres = DISP_E_TYPEMISMATCH;\n    else if (leftvt == VT_VARIANT)\n        hres = DISP_E_TYPEMISMATCH;\n    else if (rightvt == VT_VARIANT && (leftvt == VT_EMPTY ||\n        leftvt == VT_NULL || leftvt ==  VT_I2 ||\n        leftvt == VT_I4 || leftvt == VT_R4 ||\n        leftvt == VT_R8 || leftvt == VT_CY ||\n        leftvt == VT_DATE || leftvt == VT_BSTR ||\n        leftvt == VT_BOOL ||  leftvt == VT_DECIMAL ||\n        leftvt == VT_I1 || leftvt == VT_UI1 ||\n        leftvt == VT_UI2 || leftvt == VT_UI4 ||\n        leftvt == VT_I8 || leftvt == VT_UI8 ||\n        leftvt == VT_INT || leftvt == VT_UINT))\n        hres = DISP_E_TYPEMISMATCH;\n    else\n        hres = DISP_E_BADVARTYPE;\n\n    /* if result type is not S_OK, then no need to go further */\n    if (hres != S_OK)\n    {\n        V_VT(out) = VT_EMPTY;\n        return hres;\n    }\n\n    if (leftvt == VT_BSTR)\n        left_str = V_BSTR(left);\n    else\n    {\n        VARIANT16  converted, *tmp = left;\n\n        VariantInit16(&converted);\n        if(leftvt == VT_DISPATCH)\n        {\n            hres = VARIANT_FetchDispatchValue(left, &converted);\n            if(FAILED(hres))\n                goto failed;\n\n            tmp = &converted;\n        }\n\n        hres = VariantChangeTypeEx16(&converted, tmp, 0, VARIANT_ALPHABOOL|VARIANT_LOCALBOOL, VT_BSTR);\n        if (SUCCEEDED(hres))\n            left_str = V_BSTR(&converted);\n        else if (hres != DISP_E_TYPEMISMATCH)\n        {\n            VariantClear16(&converted);\n            goto failed;\n        }\n    }\n\n    if (rightvt == VT_BSTR)\n        right_str = V_BSTR(right);\n    else\n    {\n        VARIANT16  converted, *tmp = right;\n\n        VariantInit16(&converted);\n        if(rightvt == VT_DISPATCH)\n        {\n            hres = VARIANT_FetchDispatchValue(right, &converted);\n            if(FAILED(hres))\n                goto failed;\n\n            tmp = &converted;\n        }\n\n        hres = VariantChangeTypeEx16(&converted, tmp, 0, VARIANT_ALPHABOOL|VARIANT_LOCALBOOL, VT_BSTR);\n        if (SUCCEEDED(hres))\n            right_str = V_BSTR(&converted);\n        else if (hres != DISP_E_TYPEMISMATCH)\n        {\n            VariantClear16(&converted);\n            goto failed;\n        }\n    }\n\n\n    V_VT(out) = VT_BSTR;\n    hres = VarBstrCat16(left_str, right_str, &V_BSTR(out));\n\nfailed:\n    if(V_VT(left) != VT_BSTR)\n        SysFreeString16(left_str);\n    if(V_VT(right) != VT_BSTR)\n        SysFreeString16(right_str);\n    return hres;\n}\n\n\n/* Wrapper around VariantChangeTypeEx16() which permits changing a\n   variant with VT_RESERVED flag set. Needed by VarCmp. */\nstatic HRESULT _VarChangeTypeExWrap (VARIANTARG16* pvargDest,\n                    VARIANTARG16* pvargSrc, LCID lcid, USHORT wFlags, VARTYPE vt)\n{\n    VARIANTARG16 vtmpsrc = *pvargSrc;\n\n    V_VT(&vtmpsrc) &= ~VT_RESERVED;\n    return VariantChangeTypeEx16(pvargDest,&vtmpsrc,lcid,wFlags,vt);\n}\n\n/**********************************************************************\n *              VarCmp [OLEAUT32.176]\n *\n * Compare two variants.\n *\n * PARAMS\n *  left    [I] First variant\n *  right   [I] Second variant\n *  lcid    [I] LCID (locale identifier) for the comparison\n *  flags   [I] Flags to be used in the comparison:\n *              NORM_IGNORECASE, NORM_IGNORENONSPACE, NORM_IGNORESYMBOLS,\n *              NORM_IGNOREWIDTH, NORM_IGNOREKANATYPE, NORM_IGNOREKASHIDA\n *\n * RETURNS\n *  VARCMP_LT:   left variant is less than right variant.\n *  VARCMP_EQ:   input variants are equal.\n *  VARCMP_GT:   left variant is greater than right variant.\n *  VARCMP_NULL: either one of the input variants is NULL.\n *  Failure:     An HRESULT error code indicating the error.\n *\n * NOTES\n *  Native VarCmp up to and including WinXP doesn't like I1, UI2, VT_UI4,\n *  UI8 and UINT as input variants. INT is accepted only as left variant.\n *\n *  If both input variants are ERROR then VARCMP_EQ will be returned, else\n *  an ERROR variant will trigger an error.\n *\n *  Both input variants can have VT_RESERVED flag set which is ignored\n *  unless one and only one of the variants is a SEGBSTR16 and the other one\n *  is not an EMPTY variant. All four VT_RESERVED combinations have a\n *  different meaning:\n *   - SEGBSTR16 and other: SEGBSTR16 is always greater than the other variant.\n *   - BSTR|VT_RESERVED and other: a string comparison is performed.\n *   - SEGBSTR16 and other|VT_RESERVED: If the SEGBSTR16 is a number a numeric\n *     comparison will take place else the SEGBSTR16 is always greater.\n *   - BSTR|VT_RESERVED and other|VT_RESERVED: It seems that the other\n *     variant is ignored and the return value depends only on the sign\n *     of the SEGBSTR16 if it is a number else the SEGBSTR16 is always greater. A\n *     positive SEGBSTR16 is greater, a negative one is smaller than the other\n *     variant.\n *\n * SEE\n *  VarBstrCmp for the lcid and flags usage.\n */\nHRESULT WINAPI VarCmp16(LPVARIANT16 left, LPVARIANT16 right, LCID lcid, DWORD flags)\n{\n    VARTYPE     lvt, rvt, vt;\n    VARIANT16      rv,lv;\n    DWORD       xmask;\n    HRESULT     rc;\n\n    TRACE(\"(%s,%s,0x%08x,0x%08x)\\n\", debugstr_variant16(left), debugstr_variant16(right), lcid, flags);\n\n    lvt = V_VT(left) & VT_TYPEMASK;\n    rvt = V_VT(right) & VT_TYPEMASK;\n    xmask = (1 << lvt) | (1 << rvt);\n\n    /* If we have any flag set except VT_RESERVED bail out.\n       Same for the left input variant type > VT_INT and for the\n       right input variant type > VT_I8. Yes, VT_INT is only supported\n       as left variant. Go figure */\n    if (((V_VT(left) | V_VT(right)) & ~VT_TYPEMASK & ~VT_RESERVED) ||\n            lvt > VT_INT || rvt > VT_I8) {\n        return DISP_E_BADVARTYPE;\n    }\n\n    /* Don't ask me why but native VarCmp cannot handle: VT_I1, VT_UI2, VT_UI4,\n       VT_UINT and VT_UI8. Tested with DCOM98, Win2k, WinXP */\n    if (rvt == VT_INT || xmask & (VTBIT_I1 | VTBIT_UI2 | VTBIT_UI4 | VTBIT_UI8 |\n                VTBIT_DISPATCH | VTBIT_VARIANT | VTBIT_UNKNOWN | VTBIT_15))\n        return DISP_E_TYPEMISMATCH;\n\n    /* If both variants are VT_ERROR return VARCMP_EQ */\n    if (xmask == VTBIT_ERROR)\n        return VARCMP_EQ;\n    else if (xmask & VTBIT_ERROR)\n        return DISP_E_TYPEMISMATCH;\n\n    if (xmask & VTBIT_NULL)\n        return VARCMP_NULL;\n\n    VariantInit16(&lv);\n    VariantInit16(&rv);\n\n    /* Two BSTRs, ignore VT_RESERVED */\n    if (xmask == VTBIT_BSTR)\n        return VarBstrCmp16(V_BSTR(left), V_BSTR(right), lcid, flags);\n\n    /* A SEGBSTR16 and another variant; we have to take care of VT_RESERVED */\n    if (xmask & VTBIT_BSTR) {\n        VARIANT16 *bstrv, *nonbv;\n        VARTYPE nonbvt;\n        int swap = 0;\n\n        /* Swap the variants so the SEGBSTR16 is always on the left */\n        if (lvt == VT_BSTR) {\n            bstrv = left;\n            nonbv = right;\n            nonbvt = rvt;\n        } else {\n            swap = 1;\n            bstrv = right;\n            nonbv = left;\n            nonbvt = lvt;\n        }\n\n        /* SEGBSTR16 and EMPTY: ignore VT_RESERVED */\n        if (nonbvt == VT_EMPTY)\n            rc = (!V_BSTR(bstrv) || !*V_BSTR16(bstrv)) ? VARCMP_EQ : VARCMP_GT;\n        else {\n            VARTYPE breserv = V_VT(bstrv) & ~VT_TYPEMASK;\n            VARTYPE nreserv = V_VT(nonbv) & ~VT_TYPEMASK;\n\n            if (!breserv && !nreserv) \n                /* No VT_RESERVED set ==> SEGBSTR16 always greater */\n                rc = VARCMP_GT;\n            else if (breserv && !nreserv) {\n                /* SEGBSTR16 has VT_RESERVED set. Do a string comparison */\n                rc = VariantChangeTypeEx16(&rv,nonbv,lcid,0,VT_BSTR);\n                if (FAILED(rc))\n                    return rc;\n                rc = VarBstrCmp16(V_BSTR(bstrv), V_BSTR(&rv), lcid, flags);\n                VariantClear16(&rv);\n            } else if (V_BSTR(bstrv) && *V_BSTR16(bstrv)) {\n            /* Non NULL nor empty SEGBSTR16 */\n                /* If the SEGBSTR16 is not a number the SEGBSTR16 is greater */\n                rc = _VarChangeTypeExWrap(&lv,bstrv,lcid,0,VT_R8);\n                if (FAILED(rc))\n                    rc = VARCMP_GT;\n                else if (breserv && nreserv)\n                    /* FIXME: This is strange: with both VT_RESERVED set it\n                       looks like the result depends only on the sign of\n                       the SEGBSTR16 number */\n                    rc = (V_R8(&lv) >= 0) ? VARCMP_GT : VARCMP_LT;\n                else\n                    /* Numeric comparison, will be handled below.\n                       VARCMP_NULL used only to break out. */\n                    rc = VARCMP_NULL;\n                VariantClear16(&lv);\n                VariantClear16(&rv);\n            } else\n                /* Empty or NULL SEGBSTR16 */\n                rc = VARCMP_GT;\n        }\n        /* Fixup the return code if we swapped left and right */\n        if (swap) {\n            if (rc == VARCMP_GT)\n                rc = VARCMP_LT;\n            else if (rc == VARCMP_LT)\n                rc = VARCMP_GT;\n        }\n        if (rc != VARCMP_NULL)\n            return rc;\n    }\n\n    if (xmask & VTBIT_DECIMAL)\n        vt = VT_DECIMAL;\n    else if (xmask & VTBIT_BSTR)\n        vt = VT_R8;\n    else if (xmask & VTBIT_R4)\n        vt = VT_R4;\n    else if (xmask & (VTBIT_R8 | VTBIT_DATE))\n        vt = VT_R8;\n    else if (xmask & VTBIT_CY)\n        vt = VT_CY;\n    else\n        /* default to I8 */\n        vt = VT_I8;\n\n    /* Coerce the variants */\n    rc = _VarChangeTypeExWrap(&lv,left,lcid,0,vt);\n    if (rc == DISP_E_OVERFLOW && vt != VT_R8) {\n        /* Overflow, change to R8 */\n        vt = VT_R8;\n        rc = _VarChangeTypeExWrap(&lv,left,lcid,0,vt);\n    }\n    if (FAILED(rc))\n        return rc;\n    rc = _VarChangeTypeExWrap(&rv,right,lcid,0,vt);\n    if (rc == DISP_E_OVERFLOW && vt != VT_R8) {\n        /* Overflow, change to R8 */\n        vt = VT_R8;\n        rc = _VarChangeTypeExWrap(&lv,left,lcid,0,vt);\n        if (FAILED(rc))\n            return rc;\n        rc = _VarChangeTypeExWrap(&rv,right,lcid,0,vt);\n    }\n    if (FAILED(rc))\n        return rc;\n\n#define _VARCMP(a,b) \\\n    (((a) == (b)) ? VARCMP_EQ : (((a) < (b)) ? VARCMP_LT : VARCMP_GT))\n\n    switch (vt) {\n        case VT_CY:\n            return VarCyCmp16(V_CY(&lv), V_CY(&rv));\n#ifdef AVAIL_32BIT_VAR\n        case VT_DECIMAL:\n            return VarDecCmp16(&V_DECIMAL(&lv), &V_DECIMAL(&rv));\n#endif\n        case VT_I8:\n            return _VARCMP(V_I8(&lv), V_I8(&rv));\n        case VT_R4:\n            return _VARCMP(V_R4(&lv), V_R4(&rv));\n        case VT_R8:\n            return _VARCMP(V_R8(&lv), V_R8(&rv));\n        default:\n            /* We should never get here */\n            return E_FAIL;\n    }\n#undef _VARCMP\n}\n\n/**********************************************************************\n *              VarAnd [OLEAUT32.142]\n *\n * Computes the logical AND of two variants.\n *\n * PARAMS\n *  left    [I] First variant\n *  right   [I] Second variant\n *  result  [O] Result variant\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: An HRESULT error code indicating the error.\n */\nHRESULT WINAPI VarAnd16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result)\n{\n    HRESULT hres = S_OK;\n    VARTYPE resvt = VT_EMPTY;\n    VARTYPE leftvt,rightvt;\n    VARTYPE rightExtraFlags,leftExtraFlags,ExtraFlags;\n    VARIANT16  varLeft, varRight;\n    VARIANT16  tempLeft, tempRight;\n\n    VariantInit16(&varLeft);\n    VariantInit16(&varRight);\n    VariantInit16(&tempLeft);\n    VariantInit16(&tempRight);\n\n    TRACE(\"(%s,%s,%p)\\n\", debugstr_variant16(left), debugstr_variant16(right), result);\n\n    /* Handle VT_DISPATCH by storing and taking address of returned value */\n    if ((V_VT(left) & VT_TYPEMASK) == VT_DISPATCH)\n    {\n        hres = VARIANT_FetchDispatchValue(left, &tempLeft);\n        if (FAILED(hres)) goto VarAnd_Exit;\n        left = &tempLeft;\n    }\n    if ((V_VT(right) & VT_TYPEMASK) == VT_DISPATCH)\n    {\n        hres = VARIANT_FetchDispatchValue(right, &tempRight);\n        if (FAILED(hres)) goto VarAnd_Exit;\n        right = &tempRight;\n    }\n\n    leftvt = V_VT(left)&VT_TYPEMASK;\n    rightvt = V_VT(right)&VT_TYPEMASK;\n    leftExtraFlags = V_VT(left)&(~VT_TYPEMASK);\n    rightExtraFlags = V_VT(right)&(~VT_TYPEMASK);\n\n    if (leftExtraFlags != rightExtraFlags)\n    {\n        hres = DISP_E_BADVARTYPE;\n        goto VarAnd_Exit;\n    }\n    ExtraFlags = leftExtraFlags;\n\n    /* Native VarAnd always returns an error when using extra\n     * flags or if the variant combination is I8 and INT.\n     */\n    if ((leftvt == VT_I8 && rightvt == VT_INT) ||\n        (leftvt == VT_INT && rightvt == VT_I8) ||\n        ExtraFlags != 0)\n    {\n        hres = DISP_E_BADVARTYPE;\n        goto VarAnd_Exit;\n    }\n\n    /* Determine return type */\n    else if (leftvt == VT_I8 || rightvt == VT_I8)\n        resvt = VT_I8;\n    else if (leftvt == VT_I4 || rightvt == VT_I4 ||\n        leftvt == VT_UINT || rightvt == VT_UINT ||\n        leftvt == VT_INT || rightvt == VT_INT ||\n        leftvt == VT_R4 || rightvt == VT_R4 ||\n        leftvt == VT_R8 || rightvt == VT_R8 ||\n        leftvt == VT_CY || rightvt == VT_CY ||\n        leftvt == VT_DATE || rightvt == VT_DATE ||\n        leftvt == VT_I1 || rightvt == VT_I1 ||\n        leftvt == VT_UI2 || rightvt == VT_UI2 ||\n        leftvt == VT_UI4 || rightvt == VT_UI4 ||\n        leftvt == VT_UI8 || rightvt == VT_UI8 ||\n        leftvt == VT_DECIMAL || rightvt == VT_DECIMAL)\n        resvt = VT_I4;\n    else if (leftvt == VT_UI1 || rightvt == VT_UI1 ||\n        leftvt == VT_I2 || rightvt == VT_I2 ||\n        leftvt == VT_EMPTY || rightvt == VT_EMPTY)\n        if ((leftvt == VT_NULL && rightvt == VT_UI1) ||\n            (leftvt == VT_UI1 && rightvt == VT_NULL) ||\n            (leftvt == VT_UI1 && rightvt == VT_UI1))\n            resvt = VT_UI1;\n        else\n            resvt = VT_I2;\n    else if (leftvt == VT_BOOL || rightvt == VT_BOOL ||\n        (leftvt == VT_BSTR && rightvt == VT_BSTR))\n        resvt = VT_BOOL;\n    else if (leftvt == VT_NULL || rightvt == VT_NULL ||\n        leftvt == VT_BSTR || rightvt == VT_BSTR)\n        resvt = VT_NULL;\n    else\n    {\n        hres = DISP_E_BADVARTYPE;\n        goto VarAnd_Exit;\n    }\n\n    if (leftvt == VT_NULL || rightvt == VT_NULL)\n    {\n        /*\n         * Special cases for when left variant is VT_NULL\n         * (VT_NULL & 0 = VT_NULL, VT_NULL & value = value)\n         */\n        if (leftvt == VT_NULL)\n        {\n            VARIANT_BOOL b;\n            switch(rightvt)\n            {\n            case VT_I1:   if (V_I1(right)) resvt = VT_NULL; break;\n            case VT_UI1:  if (V_UI1(right)) resvt = VT_NULL; break;\n            case VT_I2:   if (V_I2(right)) resvt = VT_NULL; break;\n            case VT_UI2:  if (V_UI2(right)) resvt = VT_NULL; break;\n            case VT_I4:   if (V_I4(right)) resvt = VT_NULL; break;\n            case VT_UI4:  if (V_UI4(right)) resvt = VT_NULL; break;\n            case VT_I8:   if (V_I8(right)) resvt = VT_NULL; break;\n            case VT_UI8:  if (V_UI8(right)) resvt = VT_NULL; break;\n            case VT_INT:  if (V_INT(right)) resvt = VT_NULL; break;\n            case VT_UINT: if (V_UINT(right)) resvt = VT_NULL; break;\n            case VT_BOOL: if (V_BOOL(right)) resvt = VT_NULL; break;\n            case VT_R4:   if (V_R4(right)) resvt = VT_NULL; break;\n            case VT_R8:   if (V_R8(right)) resvt = VT_NULL; break;\n            case VT_CY:\n                if(V_CY(right).int64)\n                    resvt = VT_NULL;\n                break;\n#ifdef AVAIL_32BIT_VAR\n            case VT_DECIMAL:\n                if (DEC_HI32(&V_DECIMAL(right)) ||\n                    DEC_LO64(&V_DECIMAL(right)))\n                    resvt = VT_NULL;\n                break;\n#endif\n            case VT_BSTR:\n                hres = VarBoolFromStr16(V_BSTR(right),\n                LOCALE_USER_DEFAULT, VAR_LOCALBOOL, &b);\n                if (FAILED(hres))\n                    return hres;\n                else if (b)\n                    V_VT(result) = VT_NULL;\n                else\n                {\n                    V_VT(result) = VT_BOOL;\n                    V_BOOL(result) = b;\n                }\n                goto VarAnd_Exit;\n            }\n        }\n        V_VT(result) = resvt;\n        goto VarAnd_Exit;\n    }\n\n    hres = VariantCopy16(&varLeft, left);\n    if (FAILED(hres)) goto VarAnd_Exit;\n\n    hres = VariantCopy16(&varRight, right);\n    if (FAILED(hres)) goto VarAnd_Exit;\n\n    if (resvt == VT_I4 && V_VT(&varLeft) == VT_UI4)\n        V_VT(&varLeft) = VT_I4; /* Don't overflow */\n    else\n    {\n        double d;\n\n        if (V_VT(&varLeft) == VT_BSTR &&\n            FAILED(VarR8FromStr16(V_BSTR(&varLeft),\n            LOCALE_USER_DEFAULT, 0, &d)))\n            hres = VariantChangeType16(&varLeft,&varLeft,\n            VARIANT_LOCALBOOL, VT_BOOL);\n        if (SUCCEEDED(hres) && V_VT(&varLeft) != resvt)\n            hres = VariantChangeType16(&varLeft,&varLeft,0,resvt);\n        if (FAILED(hres)) goto VarAnd_Exit;\n    }\n\n    if (resvt == VT_I4 && V_VT(&varRight) == VT_UI4)\n        V_VT(&varRight) = VT_I4; /* Don't overflow */\n    else\n    {\n        double d;\n\n        if (V_VT(&varRight) == VT_BSTR &&\n            FAILED(VarR8FromStr16(V_BSTR(&varRight),\n            LOCALE_USER_DEFAULT, 0, &d)))\n            hres = VariantChangeType16(&varRight, &varRight,\n                VARIANT_LOCALBOOL, VT_BOOL);\n        if (SUCCEEDED(hres) && V_VT(&varRight) != resvt)\n            hres = VariantChangeType16(&varRight, &varRight, 0, resvt);\n        if (FAILED(hres)) goto VarAnd_Exit;\n    }\n\n    V_VT(result) = resvt;\n    switch(resvt)\n    {\n    case VT_I8:\n        V_I8(result) = V_I8(&varLeft) & V_I8(&varRight);\n        break;\n    case VT_I4:\n        V_I4(result) = V_I4(&varLeft) & V_I4(&varRight);\n        break;\n    case VT_I2:\n        V_I2(result) = V_I2(&varLeft) & V_I2(&varRight);\n        break;\n    case VT_UI1:\n        V_UI1(result) = V_UI1(&varLeft) & V_UI1(&varRight);\n        break;\n    case VT_BOOL:\n        V_BOOL(result) = V_BOOL(&varLeft) & V_BOOL(&varRight);\n        break;\n    default:\n        FIXME(\"Couldn't bitwise AND variant types %d,%d\\n\",\n            leftvt,rightvt);\n    }\n\nVarAnd_Exit:\n    VariantClear16(&varLeft);\n    VariantClear16(&varRight);\n    VariantClear16(&tempLeft);\n    VariantClear16(&tempRight);\n\n    return hres;\n}\n\n/**********************************************************************\n *              VarAdd [OLEAUT32.141]\n *\n * Add two variants.\n *\n * PARAMS\n *  left    [I] First variant\n *  right   [I] Second variant\n *  result  [O] Result variant\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: An HRESULT error code indicating the error.\n *\n * NOTES\n *  Native VarAdd up to and including WinXP doesn't like I1, UI2, UI4,\n *  UI8, INT and UINT as input variants.\n *\n *  Native VarAdd doesn't check for NULL in/out pointers and crashes. We do the\n *  same here.\n *\n * FIXME\n *  Overflow checking for R8 (double) overflow. Return DISP_E_OVERFLOW in that\n *  case.\n */\nHRESULT WINAPI VarAdd16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result)\n{\n    HRESULT hres;\n    VARTYPE lvt, rvt, resvt, tvt;\n    VARIANT16  lv, rv, tv;\n    VARIANT16  tempLeft, tempRight;\n    double r8res;\n\n    /* Variant priority for coercion. Sorted from lowest to highest.\n       VT_ERROR shows an invalid input variant type. */\n    enum coerceprio { vt_EMPTY, vt_UI1, vt_I2, vt_I4, vt_I8, vt_BSTR,vt_R4,\n                      vt_R8, vt_CY, vt_DATE, vt_DECIMAL, vt_DISPATCH, vt_NULL,\n                      vt_ERROR };\n    /* Mapping from priority to variant type. Keep in sync with coerceprio! */\n    static const VARTYPE prio2vt[] = { VT_EMPTY, VT_UI1, VT_I2, VT_I4, VT_I8, VT_BSTR, VT_R4,\n                          VT_R8, VT_CY, VT_DATE, VT_DECIMAL, VT_DISPATCH,\n                          VT_NULL, VT_ERROR };\n\n    /* Mapping for coercion from input variant to priority of result variant. */\n    static const VARTYPE coerce[] = {\n        /* VT_EMPTY, VT_NULL, VT_I2, VT_I4, VT_R4 */\n        vt_EMPTY, vt_NULL, vt_I2, vt_I4, vt_R4,\n        /* VT_R8, VT_CY, VT_DATE, VT_BSTR, VT_DISPATCH */\n        vt_R8, vt_CY, vt_DATE, vt_BSTR, vt_DISPATCH,\n        /* VT_ERROR, VT_BOOL, VT_VARIANT, VT_UNKNOWN, VT_DECIMAL */\n        vt_ERROR, vt_I2, vt_ERROR, vt_ERROR, vt_DECIMAL,\n        /* 15, VT_I1, VT_UI1, VT_UI2, VT_UI4 VT_I8 */\n        vt_ERROR, vt_ERROR, vt_UI1, vt_ERROR, vt_ERROR, vt_I8\n    };\n\n    TRACE(\"(%s,%s,%p)\\n\", debugstr_variant16(left), debugstr_variant16(right), result);\n\n    VariantInit16(&lv);\n    VariantInit16(&rv);\n    VariantInit16(&tv);\n    VariantInit16(&tempLeft);\n    VariantInit16(&tempRight);\n\n    /* Handle VT_DISPATCH by storing and taking address of returned value */\n    if ((V_VT(left) & VT_TYPEMASK) != VT_NULL && (V_VT(right) & VT_TYPEMASK) != VT_NULL)\n    {\n        if ((V_VT(left) & VT_TYPEMASK) == VT_DISPATCH)\n        {\n            hres = VARIANT_FetchDispatchValue(left, &tempLeft);\n            if (FAILED(hres)) goto end;\n            left = &tempLeft;\n        }\n        if ((V_VT(right) & VT_TYPEMASK) == VT_DISPATCH)\n        {\n            hres = VARIANT_FetchDispatchValue(right, &tempRight);\n            if (FAILED(hres)) goto end;\n            right = &tempRight;\n        }\n    }\n\n    lvt = V_VT(left)&VT_TYPEMASK;\n    rvt = V_VT(right)&VT_TYPEMASK;\n\n    /* If we have any flag set (VT_ARRAY, VT_VECTOR, etc.) bail out.\n       Same for any input variant type > VT_I8 */\n    if (V_VT(left) & ~VT_TYPEMASK || V_VT(right) & ~VT_TYPEMASK ||\n        lvt > VT_I8 || rvt > VT_I8) {\n        hres = DISP_E_BADVARTYPE;\n        goto end;\n    }\n\n    /* Determine the variant type to coerce to. */\n    if (coerce[lvt] > coerce[rvt]) {\n        resvt = prio2vt[coerce[lvt]];\n        tvt = prio2vt[coerce[rvt]];\n    } else {\n        resvt = prio2vt[coerce[rvt]];\n        tvt = prio2vt[coerce[lvt]];\n    }\n\n    /* Special cases where the result variant type is defined by both\n       input variants and not only that with the highest priority */\n    if (resvt == VT_BSTR) {\n        if (tvt == VT_EMPTY || tvt == VT_BSTR)\n            resvt = VT_BSTR;\n        else\n            resvt = VT_R8;\n    }\n    if (resvt == VT_R4 && (tvt == VT_BSTR || tvt == VT_I8 || tvt == VT_I4))\n        resvt = VT_R8;\n\n    /* For overflow detection use the biggest compatible type for the\n       addition */\n    switch (resvt) {\n        case VT_ERROR:\n            hres = DISP_E_BADVARTYPE;\n            goto end;\n        case VT_NULL:\n            hres = S_OK;\n            V_VT(result) = VT_NULL;\n            goto end;\n        case VT_DISPATCH:\n            FIXME(\"cannot handle variant type VT_DISPATCH\\n\");\n            hres = DISP_E_TYPEMISMATCH;\n            goto end;\n        case VT_EMPTY:\n            resvt = VT_I2;\n            /* Fall through */\n        case VT_UI1:\n        case VT_I2:\n        case VT_I4:\n        case VT_I8:\n            tvt = VT_I8;\n            break;\n        case VT_DATE:\n        case VT_R4:\n            tvt = VT_R8;\n            break;\n        default:\n            tvt = resvt;\n    }\n\n    /* Now coerce the variants */\n    hres = VariantChangeType16(&lv, left, 0, tvt);\n    if (FAILED(hres))\n        goto end;\n    hres = VariantChangeType16(&rv, right, 0, tvt);\n    if (FAILED(hres))\n        goto end;\n\n    /* Do the math */\n    hres = S_OK;\n    V_VT(result) = resvt;\n    switch (tvt) {\n#ifdef AVAIL_32BIT_VAR\n        case VT_DECIMAL:\n            hres = VarDecAdd16(&V_DECIMAL(&lv), &V_DECIMAL(&rv),\n                             &V_DECIMAL(result));\n            goto end;\n#endif\n        case VT_CY:\n            hres = VarCyAdd16(V_CY(&lv), V_CY(&rv), &V_CY(result));\n            goto end;\n        case VT_BSTR:\n            /* We do not add those, we concatenate them. */\n            hres = VarBstrCat16(V_BSTR(&lv), V_BSTR(&rv), &V_BSTR(result));\n            goto end;\n        case VT_I8:\n            /* Overflow detection */\n            r8res = (double)V_I8(&lv) + (double)V_I8(&rv);\n            if (r8res > (double)I8_MAX || r8res < (double)I8_MIN) {\n                V_VT(result) = VT_R8;\n                V_R8(result) = r8res;\n                goto end;\n            } else {\n                V_VT(&tv) = tvt;\n                V_I8(&tv) = V_I8(&lv) + V_I8(&rv);\n            }\n            break;\n        case VT_R8:\n            V_VT(&tv) = tvt;\n            /* FIXME: overflow detection */\n            V_R8(&tv) = V_R8(&lv) + V_R8(&rv);\n            break;\n        default:\n            ERR(\"We shouldn't get here! tvt = %d!\\n\", tvt);\n            break;\n    }\n    if (resvt != tvt) {\n        if ((hres = VariantChangeType16(result, &tv, 0, resvt)) != S_OK) {\n            /* Overflow! Change to the vartype with the next higher priority.\n               With one exception: I4 ==> R8 even if it would fit in I8 */\n            if (resvt == VT_I4)\n                resvt = VT_R8;\n            else\n                resvt = prio2vt[coerce[resvt] + 1];\n            hres = VariantChangeType16(result, &tv, 0, resvt);\n        }\n    } else\n        hres = VariantCopy16(result, &tv);\n\nend:\n    if (hres != S_OK) {\n        V_VT(result) = VT_EMPTY;\n        V_I4(result) = 0;       /* No V_EMPTY */\n    }\n    VariantClear16(&lv);\n    VariantClear16(&rv);\n    VariantClear16(&tv);\n    VariantClear16(&tempLeft);\n    VariantClear16(&tempRight);\n    TRACE(\"returning 0x%8x %s\\n\", hres, debugstr_variant16(result));\n    return hres;\n}\n\n/**********************************************************************\n *              VarMul [OLEAUT32.156]\n *\n * Multiply two variants.\n *\n * PARAMS\n *  left    [I] First variant\n *  right   [I] Second variant\n *  result  [O] Result variant\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: An HRESULT error code indicating the error.\n *\n * NOTES\n *  Native VarMul up to and including WinXP doesn't like I1, UI2, UI4,\n *  UI8, INT and UINT as input variants. But it can multiply apples with oranges.\n *\n *  Native VarMul doesn't check for NULL in/out pointers and crashes. We do the\n *  same here.\n *\n * FIXME\n *  Overflow checking for R8 (double) overflow. Return DISP_E_OVERFLOW in that\n *  case.\n */\nHRESULT WINAPI VarMul16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result)\n{\n    HRESULT hres;\n    VARTYPE lvt, rvt, resvt, tvt;\n    VARIANT16  lv, rv, tv;\n    VARIANT16  tempLeft, tempRight;\n    double r8res;\n\n    /* Variant priority for coercion. Sorted from lowest to highest.\n       VT_ERROR shows an invalid input variant type. */\n    enum coerceprio { vt_UI1 = 0, vt_I2, vt_I4, vt_I8, vt_CY, vt_R4, vt_R8,\n                      vt_DECIMAL, vt_NULL, vt_ERROR };\n    /* Mapping from priority to variant type. Keep in sync with coerceprio! */\n    static const VARTYPE prio2vt[] = { VT_UI1, VT_I2, VT_I4, VT_I8, VT_CY, VT_R4, VT_R8,\n                          VT_DECIMAL, VT_NULL, VT_ERROR };\n\n    /* Mapping for coercion from input variant to priority of result variant. */\n    static const VARTYPE coerce[] = {\n        /* VT_EMPTY, VT_NULL, VT_I2, VT_I4, VT_R4 */\n        vt_UI1, vt_NULL, vt_I2, vt_I4, vt_R4,\n        /* VT_R8, VT_CY, VT_DATE, VT_BSTR, VT_DISPATCH */\n        vt_R8, vt_CY, vt_R8, vt_R8, vt_ERROR,\n        /* VT_ERROR, VT_BOOL, VT_VARIANT, VT_UNKNOWN, VT_DECIMAL */\n        vt_ERROR, vt_I2, vt_ERROR, vt_ERROR, vt_DECIMAL,\n        /* 15, VT_I1, VT_UI1, VT_UI2, VT_UI4 VT_I8 */\n        vt_ERROR, vt_ERROR, vt_UI1, vt_ERROR, vt_ERROR, vt_I8\n    };\n\n    TRACE(\"(%s,%s,%p)\\n\", debugstr_variant16(left), debugstr_variant16(right), result);\n\n    VariantInit16(&lv);\n    VariantInit16(&rv);\n    VariantInit16(&tv);\n    VariantInit16(&tempLeft);\n    VariantInit16(&tempRight);\n\n    /* Handle VT_DISPATCH by storing and taking address of returned value */\n    if ((V_VT(left) & VT_TYPEMASK) == VT_DISPATCH)\n    {\n        hres = VARIANT_FetchDispatchValue(left, &tempLeft);\n        if (FAILED(hres)) goto end;\n        left = &tempLeft;\n    }\n    if ((V_VT(right) & VT_TYPEMASK) == VT_DISPATCH)\n    {\n        hres = VARIANT_FetchDispatchValue(right, &tempRight);\n        if (FAILED(hres)) goto end;\n        right = &tempRight;\n    }\n\n    lvt = V_VT(left)&VT_TYPEMASK;\n    rvt = V_VT(right)&VT_TYPEMASK;\n\n    /* If we have any flag set (VT_ARRAY, VT_VECTOR, etc.) bail out.\n       Same for any input variant type > VT_I8 */\n    if (V_VT(left) & ~VT_TYPEMASK || V_VT(right) & ~VT_TYPEMASK ||\n        lvt > VT_I8 || rvt > VT_I8) {\n        hres = DISP_E_BADVARTYPE;\n        goto end;\n    }\n\n    /* Determine the variant type to coerce to. */\n    if (coerce[lvt] > coerce[rvt]) {\n        resvt = prio2vt[coerce[lvt]];\n        tvt = prio2vt[coerce[rvt]];\n    } else {\n        resvt = prio2vt[coerce[rvt]];\n        tvt = prio2vt[coerce[lvt]];\n    }\n\n    /* Special cases where the result variant type is defined by both\n       input variants and not only that with the highest priority */\n    if (resvt == VT_R4 && (tvt == VT_CY || tvt == VT_I8 || tvt == VT_I4))\n        resvt = VT_R8;\n    if (lvt == VT_EMPTY && rvt == VT_EMPTY)\n        resvt = VT_I2;\n\n    /* For overflow detection use the biggest compatible type for the\n       multiplication */\n    switch (resvt) {\n        case VT_ERROR:\n            hres = DISP_E_BADVARTYPE;\n            goto end;\n        case VT_NULL:\n            hres = S_OK;\n            V_VT(result) = VT_NULL;\n            goto end;\n        case VT_UI1:\n        case VT_I2:\n        case VT_I4:\n        case VT_I8:\n            tvt = VT_I8;\n            break;\n        case VT_R4:\n            tvt = VT_R8;\n            break;\n        default:\n            tvt = resvt;\n    }\n\n    /* Now coerce the variants */\n    hres = VariantChangeType16(&lv, left, 0, tvt);\n    if (FAILED(hres))\n        goto end;\n    hres = VariantChangeType16(&rv, right, 0, tvt);\n    if (FAILED(hres))\n        goto end;\n\n    /* Do the math */\n    hres = S_OK;\n    V_VT(&tv) = tvt;\n    V_VT(result) = resvt;\n    switch (tvt) {\n#ifdef AVAIL_32BIT_VAR\n        case VT_DECIMAL:\n            hres = VarDecMul16(&V_DECIMAL(&lv), &V_DECIMAL(&rv),\n                             &V_DECIMAL(result));\n            goto end;\n#endif\n        case VT_CY:\n            hres = VarCyMul16(V_CY(&lv), V_CY(&rv), &V_CY(result));\n            goto end;\n        case VT_I8:\n            /* Overflow detection */\n            r8res = (double)V_I8(&lv) * (double)V_I8(&rv);\n            if (r8res > (double)I8_MAX || r8res < (double)I8_MIN) {\n                V_VT(result) = VT_R8;\n                V_R8(result) = r8res;\n                goto end;\n            } else\n                V_I8(&tv) = V_I8(&lv) * V_I8(&rv);\n            break;\n        case VT_R8:\n            /* FIXME: overflow detection */\n            V_R8(&tv) = V_R8(&lv) * V_R8(&rv);\n            break;\n        default:\n            ERR(\"We shouldn't get here! tvt = %d!\\n\", tvt);\n            break;\n    }\n    if (resvt != tvt) {\n        while ((hres = VariantChangeType16(result, &tv, 0, resvt)) != S_OK) {\n            /* Overflow! Change to the vartype with the next higher priority.\n               With one exception: I4 ==> R8 even if it would fit in I8 */\n            if (resvt == VT_I4)\n                resvt = VT_R8;\n            else\n                resvt = prio2vt[coerce[resvt] + 1];\n        }\n    } else\n        hres = VariantCopy16(result, &tv);\n\nend:\n    if (hres != S_OK) {\n        V_VT(result) = VT_EMPTY;\n        V_I4(result) = 0;       /* No V_EMPTY */\n    }\n    VariantClear16(&lv);\n    VariantClear16(&rv);\n    VariantClear16(&tv);\n    VariantClear16(&tempLeft);\n    VariantClear16(&tempRight);\n    TRACE(\"returning 0x%8x %s\\n\", hres, debugstr_variant16(result));\n    return hres;\n}\n\n/**********************************************************************\n *              VarDiv [OLEAUT32.143]\n *\n * Divides one variant with another.\n *\n * PARAMS\n *  left    [I] First variant\n *  right   [I] Second variant\n *  result  [O] Result variant\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: An HRESULT error code indicating the error.\n */\nHRESULT WINAPI VarDiv16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result)\n{\n    HRESULT hres = S_OK;\n    VARTYPE resvt = VT_EMPTY;\n    VARTYPE leftvt,rightvt;\n    VARTYPE rightExtraFlags,leftExtraFlags,ExtraFlags;\n    VARIANT16  lv,rv;\n    VARIANT16  tempLeft, tempRight;\n\n    VariantInit16(&tempLeft);\n    VariantInit16(&tempRight);\n    VariantInit16(&lv);\n    VariantInit16(&rv);\n\n    TRACE(\"(%s,%s,%p)\\n\", debugstr_variant16(left), debugstr_variant16(right), result);\n\n    /* Handle VT_DISPATCH by storing and taking address of returned value */\n    if ((V_VT(left) & VT_TYPEMASK) == VT_DISPATCH)\n    {\n        hres = VARIANT_FetchDispatchValue(left, &tempLeft);\n        if (FAILED(hres)) goto end;\n        left = &tempLeft;\n    }\n    if ((V_VT(right) & VT_TYPEMASK) == VT_DISPATCH)\n    {\n        hres = VARIANT_FetchDispatchValue(right, &tempRight);\n        if (FAILED(hres)) goto end;\n        right = &tempRight;\n    }\n\n    leftvt = V_VT(left)&VT_TYPEMASK;\n    rightvt = V_VT(right)&VT_TYPEMASK;\n    leftExtraFlags = V_VT(left)&(~VT_TYPEMASK);\n    rightExtraFlags = V_VT(right)&(~VT_TYPEMASK);\n\n    if (leftExtraFlags != rightExtraFlags)\n    {\n        hres = DISP_E_BADVARTYPE;\n        goto end;\n    }\n    ExtraFlags = leftExtraFlags;\n\n    /* Native VarDiv always returns an error when using extra flags */\n    if (ExtraFlags != 0)\n    {\n        hres = DISP_E_BADVARTYPE;\n        goto end;\n    }\n\n    /* Determine return type */\n    if (rightvt != VT_EMPTY)\n    {\n        if (leftvt == VT_NULL || rightvt == VT_NULL)\n        {\n            V_VT(result) = VT_NULL;\n            hres = S_OK;\n            goto end;\n        }\n        else if (leftvt == VT_DECIMAL || rightvt == VT_DECIMAL)\n            resvt = VT_DECIMAL;\n        else if (leftvt == VT_I8 || rightvt == VT_I8 ||\n            leftvt == VT_CY || rightvt == VT_CY ||\n            leftvt == VT_DATE || rightvt == VT_DATE ||\n            leftvt == VT_I4 || rightvt == VT_I4 ||\n            leftvt == VT_BSTR || rightvt == VT_BSTR ||\n            leftvt == VT_I2 || rightvt == VT_I2 ||\n            leftvt == VT_BOOL || rightvt == VT_BOOL ||\n            leftvt == VT_R8 || rightvt == VT_R8 ||\n            leftvt == VT_UI1 || rightvt == VT_UI1)\n        {\n            if ((leftvt == VT_UI1 && rightvt == VT_R4) ||\n                (leftvt == VT_R4 && rightvt == VT_UI1))\n                resvt = VT_R4;\n            else if ((leftvt == VT_R4 && (rightvt == VT_BOOL ||\n                rightvt == VT_I2)) || (rightvt == VT_R4 &&\n                (leftvt == VT_BOOL || leftvt == VT_I2)))\n                resvt = VT_R4;\n            else\n                resvt = VT_R8;\n        }\n        else if (leftvt == VT_R4 || rightvt == VT_R4)\n            resvt = VT_R4;\n    }\n    else if (leftvt == VT_NULL)\n    {\n        V_VT(result) = VT_NULL;\n        hres = S_OK;\n        goto end;\n    }\n    else\n    {\n        hres = DISP_E_BADVARTYPE;\n        goto end;\n    }\n\n    /* coerce to the result type */\n    hres = VariantChangeType16(&lv, left, 0, resvt);\n    if (hres != S_OK) goto end;\n\n    hres = VariantChangeType16(&rv, right, 0, resvt);\n    if (hres != S_OK) goto end;\n\n    /* do the math */\n    V_VT(result) = resvt;\n    switch (resvt)\n    {\n    case VT_R4:\n    if (V_R4(&lv) == 0.0 && V_R4(&rv) == 0.0)\n    {\n        hres = DISP_E_OVERFLOW;\n        V_VT(result) = VT_EMPTY;\n    }\n    else if (V_R4(&rv) == 0.0)\n    {\n        hres = DISP_E_DIVBYZERO;\n        V_VT(result) = VT_EMPTY;\n    }\n    else\n        V_R4(result) = V_R4(&lv) / V_R4(&rv);\n    break;\n    case VT_R8:\n    if (V_R8(&lv) == 0.0 && V_R8(&rv) == 0.0)\n    {\n        hres = DISP_E_OVERFLOW;\n        V_VT(result) = VT_EMPTY;\n    }\n    else if (V_R8(&rv) == 0.0)\n    {\n        hres = DISP_E_DIVBYZERO;\n        V_VT(result) = VT_EMPTY;\n    }\n    else\n        V_R8(result) = V_R8(&lv) / V_R8(&rv);\n    break;\n#ifdef AVAIL_32BIT_VAR\n    case VT_DECIMAL:\n    hres = VarDecDiv16(&(V_DECIMAL(&lv)), &(V_DECIMAL(&rv)), &(V_DECIMAL(result)));\n    break;\n#endif\n    }\n\nend:\n    VariantClear16(&lv);\n    VariantClear16(&rv);\n    VariantClear16(&tempLeft);\n    VariantClear16(&tempRight);\n    TRACE(\"returning 0x%8x %s\\n\", hres, debugstr_variant16(result));\n    return hres;\n}\n\n/**********************************************************************\n *              VarSub [OLEAUT32.159]\n *\n * Subtract two variants.\n *\n * PARAMS\n *  left    [I] First variant\n *  right   [I] Second variant\n *  result  [O] Result variant\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: An HRESULT error code indicating the error.\n */\nHRESULT WINAPI VarSub16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result)\n{\n    HRESULT hres = S_OK;\n    VARTYPE resvt = VT_EMPTY;\n    VARTYPE leftvt,rightvt;\n    VARTYPE rightExtraFlags,leftExtraFlags,ExtraFlags;\n    VARIANT16  lv,rv;\n    VARIANT16  tempLeft, tempRight;\n\n    VariantInit16(&lv);\n    VariantInit16(&rv);\n    VariantInit16(&tempLeft);\n    VariantInit16(&tempRight);\n\n    TRACE(\"(%s,%s,%p)\\n\", debugstr_variant16(left), debugstr_variant16(right), result);\n\n    if ((V_VT(left) & VT_TYPEMASK) == VT_DISPATCH &&\n        (V_VT(left)&(~VT_TYPEMASK)) == 0 &&\n        (V_VT(right) & VT_TYPEMASK) != VT_NULL)\n    {\n        if (NULL == V_DISPATCH(left)) {\n            if ((V_VT(right) & VT_TYPEMASK) >= VT_INT_PTR)\n                hres = DISP_E_BADVARTYPE;\n            else if ((V_VT(right) & VT_TYPEMASK) >= VT_UI8 &&\n                (V_VT(right) & VT_TYPEMASK) < VT_RECORD)\n                hres = DISP_E_BADVARTYPE;\n            else switch (V_VT(right) & VT_TYPEMASK)\n            {\n            case VT_VARIANT:\n            case VT_UNKNOWN:\n            case 15:\n            case VT_I1:\n            case VT_UI2:\n            case VT_UI4:\n                hres = DISP_E_BADVARTYPE;\n            }\n            if (FAILED(hres)) goto end;\n        }\n        hres = VARIANT_FetchDispatchValue(left, &tempLeft);\n        if (FAILED(hres)) goto end;\n        left = &tempLeft;\n    }\n    if ((V_VT(right) & VT_TYPEMASK) == VT_DISPATCH &&\n        (V_VT(right)&(~VT_TYPEMASK)) == 0 &&\n        (V_VT(left) & VT_TYPEMASK) != VT_NULL)\n    {\n        if (NULL == V_DISPATCH(right))\n        {\n            if ((V_VT(left) & VT_TYPEMASK) >= VT_INT_PTR)\n                hres = DISP_E_BADVARTYPE;\n            else if ((V_VT(left) & VT_TYPEMASK) >= VT_UI8 &&\n                (V_VT(left) & VT_TYPEMASK) < VT_RECORD)\n                hres = DISP_E_BADVARTYPE;\n            else switch (V_VT(left) & VT_TYPEMASK)\n            {\n            case VT_VARIANT:\n            case VT_UNKNOWN:\n            case 15:\n            case VT_I1:\n            case VT_UI2:\n            case VT_UI4:\n                hres = DISP_E_BADVARTYPE;\n            }\n            if (FAILED(hres)) goto end;\n        }\n        hres = VARIANT_FetchDispatchValue(right, &tempRight);\n        if (FAILED(hres)) goto end;\n        right = &tempRight;\n    }\n\n    leftvt = V_VT(left)&VT_TYPEMASK;\n    rightvt = V_VT(right)&VT_TYPEMASK;\n    leftExtraFlags = V_VT(left)&(~VT_TYPEMASK);\n    rightExtraFlags = V_VT(right)&(~VT_TYPEMASK);\n\n    if (leftExtraFlags != rightExtraFlags)\n    {\n        hres = DISP_E_BADVARTYPE;\n        goto end;\n    }\n    ExtraFlags = leftExtraFlags;\n\n    /* determine return type and return code */\n    /* All extra flags produce errors */\n    if (ExtraFlags == (VT_VECTOR|VT_BYREF|VT_RESERVED) ||\n        ExtraFlags == (VT_VECTOR|VT_RESERVED) ||\n        ExtraFlags == (VT_VECTOR|VT_BYREF) ||\n        ExtraFlags == (VT_BYREF|VT_RESERVED) ||\n        ExtraFlags == VT_VECTOR ||\n        ExtraFlags == VT_BYREF ||\n        ExtraFlags == VT_RESERVED)\n    {\n        hres = DISP_E_BADVARTYPE;\n        goto end;\n    }\n    else if (ExtraFlags >= VT_ARRAY)\n    {\n        hres = DISP_E_TYPEMISMATCH;\n        goto end;\n    }\n    /* Native VarSub cannot handle: VT_I1, VT_UI2, VT_UI4,\n       VT_INT, VT_UINT and VT_UI8. Tested with WinXP */\n    else if (leftvt == VT_CLSID || rightvt == VT_CLSID ||\n        leftvt == VT_VARIANT || rightvt == VT_VARIANT ||\n        leftvt == VT_I1 || rightvt == VT_I1 ||\n        leftvt == VT_UI2 || rightvt == VT_UI2 ||\n        leftvt == VT_UI4 || rightvt == VT_UI4 ||\n        leftvt == VT_UI8 || rightvt == VT_UI8 ||\n        leftvt == VT_INT || rightvt == VT_INT ||\n        leftvt == VT_UINT || rightvt == VT_UINT ||\n        leftvt == VT_UNKNOWN || rightvt == VT_UNKNOWN ||\n        leftvt == VT_RECORD || rightvt == VT_RECORD)\n    {\n        if (leftvt == VT_RECORD && rightvt == VT_I8)\n            hres = DISP_E_TYPEMISMATCH;\n        else if (leftvt < VT_UI1 && rightvt == VT_RECORD)\n            hres = DISP_E_TYPEMISMATCH;\n        else if (leftvt >= VT_UI1 && rightvt == VT_RECORD)\n            hres = DISP_E_TYPEMISMATCH;\n        else if (leftvt == VT_RECORD && rightvt <= VT_UI1)\n            hres = DISP_E_TYPEMISMATCH;\n        else if (leftvt == VT_RECORD && rightvt > VT_UI1)\n            hres = DISP_E_BADVARTYPE;\n        else\n            hres = DISP_E_BADVARTYPE;\n        goto end;\n    }\n    /*  The following flags/types are invalid for left variant */\n    else if (!((leftvt <= VT_LPWSTR || leftvt == VT_RECORD ||\n        leftvt == VT_CLSID) && leftvt != (VARTYPE)15 /* undefined vt */ &&\n        (leftvt < VT_VOID || leftvt > VT_LPWSTR)))\n    {\n        hres = DISP_E_BADVARTYPE;\n        goto end;\n    }\n    /*  The following flags/types are invalid for right variant */\n    else if (!((rightvt <= VT_LPWSTR || rightvt == VT_RECORD ||\n        rightvt == VT_CLSID) && rightvt != (VARTYPE)15 /* undefined vt */ &&\n        (rightvt < VT_VOID || rightvt > VT_LPWSTR)))\n    {\n        hres = DISP_E_BADVARTYPE;\n        goto end;\n    }\n    else if ((leftvt == VT_NULL && rightvt == VT_DISPATCH) ||\n        (leftvt == VT_DISPATCH && rightvt == VT_NULL))\n        resvt = VT_NULL;\n    else if (leftvt == VT_DISPATCH || rightvt == VT_DISPATCH ||\n        leftvt == VT_ERROR || rightvt == VT_ERROR)\n    {\n        hres = DISP_E_TYPEMISMATCH;\n        goto end;\n    }\n    else if (leftvt == VT_NULL || rightvt == VT_NULL)\n        resvt = VT_NULL;\n    else if ((leftvt == VT_EMPTY && rightvt == VT_BSTR) ||\n        (leftvt == VT_DATE && rightvt == VT_DATE) ||\n        (leftvt == VT_BSTR && rightvt == VT_EMPTY) ||\n        (leftvt == VT_BSTR && rightvt == VT_BSTR))\n        resvt = VT_R8;\n    else if (leftvt == VT_DECIMAL || rightvt == VT_DECIMAL)\n        resvt = VT_DECIMAL;\n    else if (leftvt == VT_DATE || rightvt == VT_DATE)\n        resvt = VT_DATE;\n    else if (leftvt == VT_CY || rightvt == VT_CY)\n        resvt = VT_CY;\n    else if (leftvt == VT_R8 || rightvt == VT_R8)\n        resvt = VT_R8;\n    else if (leftvt == VT_BSTR || rightvt == VT_BSTR)\n        resvt = VT_R8;\n    else if (leftvt == VT_R4 || rightvt == VT_R4)\n    {\n        if (leftvt == VT_I4 || rightvt == VT_I4 ||\n            leftvt == VT_I8 || rightvt == VT_I8)\n            resvt = VT_R8;\n        else\n            resvt = VT_R4;\n    }\n    else if (leftvt == VT_I8 || rightvt == VT_I8)\n        resvt = VT_I8;\n    else if (leftvt == VT_I4 || rightvt == VT_I4)\n        resvt = VT_I4;\n    else if (leftvt == VT_I2 || rightvt == VT_I2 ||\n        leftvt == VT_BOOL || rightvt == VT_BOOL ||\n        (leftvt == VT_EMPTY && rightvt == VT_EMPTY))\n        resvt = VT_I2;\n    else if (leftvt == VT_UI1 || rightvt == VT_UI1)\n        resvt = VT_UI1;\n    else\n    {\n        hres = DISP_E_TYPEMISMATCH;\n        goto end;\n    }\n\n    /* coerce to the result type */\n    if (leftvt == VT_BSTR && rightvt == VT_DATE)\n        hres = VariantChangeType16(&lv, left, 0, VT_R8);\n    else\n        hres = VariantChangeType16(&lv, left, 0, resvt);\n    if (hres != S_OK) goto end;\n    if (leftvt == VT_DATE && rightvt == VT_BSTR)\n        hres = VariantChangeType16(&rv, right, 0, VT_R8);\n    else\n        hres = VariantChangeType16(&rv, right, 0, resvt);\n    if (hres != S_OK) goto end;\n\n    /* do the math */\n    V_VT(result) = resvt;\n    switch (resvt)\n    {\n    case VT_NULL:\n    break;\n    case VT_DATE:\n    V_DATE(result) = V_DATE(&lv) - V_DATE(&rv);\n    break;\n    case VT_CY:\n    hres = VarCySub16(V_CY(&lv), V_CY(&rv), &(V_CY(result)));\n    break;\n    case VT_R4:\n    V_R4(result) = V_R4(&lv) - V_R4(&rv);\n    break;\n    case VT_I8:\n    V_I8(result) = V_I8(&lv) - V_I8(&rv);\n    break;\n    case VT_I4:\n    V_I4(result) = V_I4(&lv) - V_I4(&rv);\n    break;\n    case VT_I2:\n    V_I2(result) = V_I2(&lv) - V_I2(&rv);\n    break;\n    case VT_UI1:\n    V_UI1(result) = V_UI2(&lv) - V_UI1(&rv);\n    break;\n    case VT_R8:\n    V_R8(result) = V_R8(&lv) - V_R8(&rv);\n    break;\n#ifdef AVAIL_32BIT_VAR\n    case VT_DECIMAL:\n    hres = VarDecSub16(&(V_DECIMAL(&lv)), &(V_DECIMAL(&rv)), &(V_DECIMAL(result)));\n    break;\n#endif\n    }\n\nend:\n    VariantClear16(&lv);\n    VariantClear16(&rv);\n    VariantClear16(&tempLeft);\n    VariantClear16(&tempRight);\n    TRACE(\"returning 0x%8x %s\\n\", hres, debugstr_variant16(result));\n    return hres;\n}\n\n\n/**********************************************************************\n *              VarOr [OLEAUT32.157]\n *\n * Perform a logical or (OR) operation on two variants.\n *\n * PARAMS\n *  pVarLeft  [I] First variant\n *  pVarRight [I] Variant to OR with pVarLeft\n *  pVarOut   [O] Destination for OR result\n *\n * RETURNS\n *  Success: S_OK. pVarOut contains the result of the operation with its type\n *           taken from the table listed under VarXor16().\n *  Failure: An HRESULT error code indicating the error.\n *\n * NOTES\n *  See the Notes section of VarXor16() for further information.\n */\nHRESULT WINAPI VarOr16(LPVARIANT16 pVarLeft, LPVARIANT16 pVarRight, LPVARIANT16 pVarOut)\n{\n    VARTYPE vt = VT_I4;\n    VARIANT16  varLeft, varRight, varStr;\n    HRESULT hRet;\n    VARIANT16  tempLeft, tempRight;\n\n    VariantInit16(&tempLeft);\n    VariantInit16(&tempRight);\n    VariantInit16(&varLeft);\n    VariantInit16(&varRight);\n    VariantInit16(&varStr);\n\n    TRACE(\"(%s,%s,%p)\\n\", debugstr_variant16(pVarLeft), debugstr_variant16(pVarRight), pVarOut);\n\n    /* Handle VT_DISPATCH by storing and taking address of returned value */\n    if ((V_VT(pVarLeft) & VT_TYPEMASK) == VT_DISPATCH)\n    {\n        hRet = VARIANT_FetchDispatchValue(pVarLeft, &tempLeft);\n        if (FAILED(hRet)) goto VarOr_Exit;\n        pVarLeft = &tempLeft;\n    }\n    if ((V_VT(pVarRight) & VT_TYPEMASK) == VT_DISPATCH)\n    {\n        hRet = VARIANT_FetchDispatchValue(pVarRight, &tempRight);\n        if (FAILED(hRet)) goto VarOr_Exit;\n        pVarRight = &tempRight;\n    }\n\n    if (V_EXTRA_TYPE(pVarLeft) || V_EXTRA_TYPE(pVarRight) ||\n        V_VT(pVarLeft) == VT_UNKNOWN || V_VT(pVarRight) == VT_UNKNOWN ||\n        V_VT(pVarLeft) == VT_DISPATCH || V_VT(pVarRight) == VT_DISPATCH ||\n        V_VT(pVarLeft) == VT_RECORD || V_VT(pVarRight) == VT_RECORD)\n    {\n        hRet = DISP_E_BADVARTYPE;\n        goto VarOr_Exit;\n    }\n\n    V_VT(&varLeft) = V_VT(&varRight) = V_VT(&varStr) = VT_EMPTY;\n\n    if (V_VT(pVarLeft) == VT_NULL || V_VT(pVarRight) == VT_NULL)\n    {\n        /* NULL OR Zero is NULL, NULL OR value is value */\n        if (V_VT(pVarLeft) == VT_NULL)\n            pVarLeft = pVarRight; /* point to the non-NULL var */\n\n        V_VT(pVarOut) = VT_NULL;\n        V_I4(pVarOut) = 0;\n\n        switch (V_VT(pVarLeft))\n        {\n        case VT_DATE: case VT_R8:\n            if (V_R8(pVarLeft))\n                goto VarOr_AsEmpty;\n            hRet = S_OK;\n            goto VarOr_Exit;\n        case VT_BOOL:\n            if (V_BOOL(pVarLeft))\n                *pVarOut = *pVarLeft;\n            hRet = S_OK;\n            goto VarOr_Exit;\n         case VT_I2: case VT_UI2:\n            if (V_I2(pVarLeft))\n                goto VarOr_AsEmpty;\n            hRet = S_OK;\n            goto VarOr_Exit;\n        case VT_I1:\n            if (V_I1(pVarLeft))\n                goto VarOr_AsEmpty;\n            hRet = S_OK;\n            goto VarOr_Exit;\n        case VT_UI1:\n            if (V_UI1(pVarLeft))\n                *pVarOut = *pVarLeft;\n            hRet = S_OK;\n            goto VarOr_Exit;\n        case VT_R4:\n            if (V_R4(pVarLeft))\n                goto VarOr_AsEmpty;\n            hRet = S_OK;\n            goto VarOr_Exit;\n        case VT_I4: case VT_UI4: case VT_INT: case VT_UINT:\n            if (V_I4(pVarLeft))\n                goto VarOr_AsEmpty;\n            hRet = S_OK;\n            goto VarOr_Exit;\n        case VT_CY:\n            if (V_CY(pVarLeft).int64)\n                goto VarOr_AsEmpty;\n            hRet = S_OK;\n            goto VarOr_Exit;\n        case VT_I8: case VT_UI8:\n            if (V_I8(pVarLeft))\n                goto VarOr_AsEmpty;\n            hRet = S_OK;\n            goto VarOr_Exit;\n#ifdef AVAIL_32BIT_VAR\n        case VT_DECIMAL:\n            if (DEC_HI32(&V_DECIMAL(pVarLeft)) || DEC_LO64(&V_DECIMAL(pVarLeft)))\n                goto VarOr_AsEmpty;\n            hRet = S_OK;\n            goto VarOr_Exit;\n#endif\n        case VT_BSTR:\n        {\n            VARIANT_BOOL b;\n\n            if (!V_BSTR(pVarLeft))\n            {\n                hRet = DISP_E_BADVARTYPE;\n                goto VarOr_Exit;\n            }\n\n            hRet = VarBoolFromStr16(V_BSTR(pVarLeft), LOCALE_USER_DEFAULT, VAR_LOCALBOOL, &b);\n            if (SUCCEEDED(hRet) && b)\n            {\n                V_VT(pVarOut) = VT_BOOL;\n                V_BOOL(pVarOut) = b;\n            }\n            goto VarOr_Exit;\n        }\n        case VT_NULL: case VT_EMPTY:\n            V_VT(pVarOut) = VT_NULL;\n            hRet = S_OK;\n            goto VarOr_Exit;\n        default:\n            hRet = DISP_E_BADVARTYPE;\n            goto VarOr_Exit;\n        }\n    }\n\n    if (V_VT(pVarLeft) == VT_EMPTY || V_VT(pVarRight) == VT_EMPTY)\n    {\n        if (V_VT(pVarLeft) == VT_EMPTY)\n            pVarLeft = pVarRight; /* point to the non-EMPTY var */\n\nVarOr_AsEmpty:\n        /* Since one argument is empty (0), OR'ing it with the other simply\n         * gives the others value (as 0|x => x). So just convert the other\n         * argument to the required result type.\n         */\n        switch (V_VT(pVarLeft))\n        {\n        case VT_BSTR:\n            if (!V_BSTR(pVarLeft))\n            {\n                hRet = DISP_E_BADVARTYPE;\n                goto VarOr_Exit;\n            }\n\n            hRet = VariantCopy16(&varStr, pVarLeft);\n            if (FAILED(hRet))\n                goto VarOr_Exit;\n            pVarLeft = &varStr;\n            hRet = VariantChangeType16(pVarLeft, pVarLeft, 0, VT_BOOL);\n            if (FAILED(hRet))\n                goto VarOr_Exit;\n            /* Fall Through ... */\n        case VT_EMPTY: case VT_UI1: case VT_BOOL: case VT_I2:\n            V_VT(pVarOut) = VT_I2;\n            break;\n        case VT_DATE: case VT_CY: case VT_DECIMAL: case VT_R4: case VT_R8:\n        case VT_I1: case VT_UI2: case VT_I4: case VT_UI4:\n        case VT_INT: case VT_UINT: case VT_UI8:\n            V_VT(pVarOut) = VT_I4;\n            break;\n        case VT_I8:\n            V_VT(pVarOut) = VT_I8;\n            break;\n        default:\n            hRet = DISP_E_BADVARTYPE;\n            goto VarOr_Exit;\n        }\n        hRet = VariantCopy16(&varLeft, pVarLeft);\n        if (FAILED(hRet))\n            goto VarOr_Exit;\n        pVarLeft = &varLeft;\n        hRet = VariantChangeType16(pVarOut, pVarLeft, 0, V_VT(pVarOut));\n        goto VarOr_Exit;\n    }\n\n    if (V_VT(pVarLeft) == VT_BOOL && V_VT(pVarRight) == VT_BOOL)\n    {\n        V_VT(pVarOut) = VT_BOOL;\n        V_BOOL(pVarOut) = V_BOOL(pVarLeft) | V_BOOL(pVarRight);\n        hRet = S_OK;\n        goto VarOr_Exit;\n    }\n\n    if (V_VT(pVarLeft) == VT_UI1 && V_VT(pVarRight) == VT_UI1)\n    {\n        V_VT(pVarOut) = VT_UI1;\n        V_UI1(pVarOut) = V_UI1(pVarLeft) | V_UI1(pVarRight);\n        hRet = S_OK;\n        goto VarOr_Exit;\n    }\n\n    if (V_VT(pVarLeft) == VT_BSTR)\n    {\n        hRet = VariantCopy16(&varStr, pVarLeft);\n        if (FAILED(hRet))\n            goto VarOr_Exit;\n        pVarLeft = &varStr;\n        hRet = VariantChangeType16(pVarLeft, pVarLeft, 0, VT_BOOL);\n        if (FAILED(hRet))\n            goto VarOr_Exit;\n    }\n\n    if (V_VT(pVarLeft) == VT_BOOL &&\n        (V_VT(pVarRight) == VT_BOOL || V_VT(pVarRight) == VT_BSTR))\n    {\n        vt = VT_BOOL;\n    }\n    else if ((V_VT(pVarLeft) == VT_BOOL || V_VT(pVarLeft) == VT_UI1 ||\n        V_VT(pVarLeft) == VT_I2 || V_VT(pVarLeft) == VT_BSTR) &&\n        (V_VT(pVarRight) == VT_BOOL || V_VT(pVarRight) == VT_UI1 ||\n        V_VT(pVarRight) == VT_I2 || V_VT(pVarRight) == VT_BSTR))\n    {\n        vt = VT_I2;\n    }\n    else if (V_VT(pVarLeft) == VT_I8 || V_VT(pVarRight) == VT_I8)\n    {\n        if (V_VT(pVarLeft) == VT_INT || V_VT(pVarRight) == VT_INT)\n        {\n            hRet = DISP_E_TYPEMISMATCH;\n            goto VarOr_Exit;\n        }\n        vt = VT_I8;\n    }\n\n    hRet = VariantCopy16(&varLeft, pVarLeft);\n    if (FAILED(hRet))\n        goto VarOr_Exit;\n\n    hRet = VariantCopy16(&varRight, pVarRight);\n    if (FAILED(hRet))\n        goto VarOr_Exit;\n\n    if (vt == VT_I4 && V_VT(&varLeft) == VT_UI4)\n        V_VT(&varLeft) = VT_I4; /* Don't overflow */\n    else\n    {\n        double d;\n\n        if (V_VT(&varLeft) == VT_BSTR &&\n            FAILED(VarR8FromStr16(V_BSTR(&varLeft), LOCALE_USER_DEFAULT, 0, &d)))\n            hRet = VariantChangeType16(&varLeft, &varLeft, VARIANT_LOCALBOOL, VT_BOOL);\n        if (SUCCEEDED(hRet) && V_VT(&varLeft) != vt)\n            hRet = VariantChangeType16(&varLeft, &varLeft, 0, vt);\n        if (FAILED(hRet))\n            goto VarOr_Exit;\n    }\n\n    if (vt == VT_I4 && V_VT(&varRight) == VT_UI4)\n        V_VT(&varRight) = VT_I4; /* Don't overflow */\n    else\n    {\n        double d;\n\n        if (V_VT(&varRight) == VT_BSTR &&\n            FAILED(VarR8FromStr16(V_BSTR(&varRight), LOCALE_USER_DEFAULT, 0, &d)))\n            hRet = VariantChangeType16(&varRight, &varRight, VARIANT_LOCALBOOL, VT_BOOL);\n        if (SUCCEEDED(hRet) && V_VT(&varRight) != vt)\n            hRet = VariantChangeType16(&varRight, &varRight, 0, vt);\n        if (FAILED(hRet))\n            goto VarOr_Exit;\n    }\n\n    V_VT(pVarOut) = vt;\n    if (vt == VT_I8)\n    {\n        V_I8(pVarOut) = V_I8(&varLeft) | V_I8(&varRight);\n    }\n    else if (vt == VT_I4)\n    {\n        V_I4(pVarOut) = V_I4(&varLeft) | V_I4(&varRight);\n    }\n    else\n    {\n        V_I2(pVarOut) = V_I2(&varLeft) | V_I2(&varRight);\n    }\n\nVarOr_Exit:\n    VariantClear16(&varStr);\n    VariantClear16(&varLeft);\n    VariantClear16(&varRight);\n    VariantClear16(&tempLeft);\n    VariantClear16(&tempRight);\n    return hRet;\n}\n\n/**********************************************************************\n * VarAbs [OLEAUT32.168]\n *\n * Convert a variant to its absolute value.\n *\n * PARAMS\n *  pVarIn  [I] Source variant\n *  pVarOut [O] Destination for converted value\n *\n * RETURNS\n *  Success: S_OK. pVarOut contains the absolute value of pVarIn.\n *  Failure: An HRESULT error code indicating the error.\n *\n * NOTES\n *  - This function does not process by-reference variants.\n *  - The type of the value stored in pVarOut depends on the type of pVarIn,\n *    according to the following table:\n *| Input Type       Output Type\n *| ----------       -----------\n *| VT_BOOL          VT_I2\n *| VT_BSTR          VT_R8\n *| (All others)     Unchanged\n */\nHRESULT WINAPI VarAbs16(LPVARIANT16 pVarIn, LPVARIANT16 pVarOut)\n{\n    VARIANT16  varIn;\n    HRESULT hRet = S_OK;\n    VARIANT16  temp;\n\n    VariantInit16(&temp);\n\n    TRACE(\"(%s,%p)\\n\", debugstr_variant16(pVarIn), pVarOut);\n\n#ifdef AVAIL_32BIT_VAR\n    /* Handle VT_DISPATCH by storing and taking address of returned value */\n    if ((V_VT(pVarIn) & VT_TYPEMASK) == VT_DISPATCH && ((V_VT(pVarIn) & ~VT_TYPEMASK) == 0))\n    {\n        hRet = VARIANT_FetchDispatchValue(pVarIn, &temp);\n        if (FAILED(hRet)) goto VarAbs_Exit;\n        pVarIn = &temp;\n    }\n#endif\n\n    if (V_ISARRAY(pVarIn) || V_VT(pVarIn) == VT_UNKNOWN ||\n        V_VT(pVarIn) == VT_DISPATCH || V_VT(pVarIn) == VT_RECORD ||\n        V_VT(pVarIn) == VT_ERROR)\n    {\n        hRet = DISP_E_TYPEMISMATCH;\n        goto VarAbs_Exit;\n    }\n    *pVarOut = *pVarIn; /* Shallow copy the value, and invert it if needed */\n\n#define ABS_CASE(typ,min) \\\n    case VT_##typ: if (V_##typ(pVarIn) == min) hRet = DISP_E_OVERFLOW; \\\n                  else if (V_##typ(pVarIn) < 0) V_##typ(pVarOut) = -V_##typ(pVarIn); \\\n                  break\n\n    switch (V_VT(pVarIn))\n    {\n    ABS_CASE(I1,I1_MIN);\n    case VT_BOOL:\n        V_VT(pVarOut) = VT_I2;\n        /* BOOL->I2, Fall through ... */\n    ABS_CASE(I2,I2_MIN);\n    case VT_INT:\n    ABS_CASE(I4,I4_MIN);\n    ABS_CASE(I8,I8_MIN);\n    ABS_CASE(R4,R4_MIN);\n    case VT_BSTR:\n        hRet = VarR8FromStr16(V_BSTR(pVarIn), LOCALE_USER_DEFAULT, 0, &V_R8(&varIn));\n        if (FAILED(hRet))\n            break;\n        V_VT(pVarOut) = VT_R8;\n        pVarIn = &varIn;\n        /* Fall through ... */\n    case VT_DATE:\n    ABS_CASE(R8,R8_MIN);\n    case VT_CY:\n        hRet = VarCyAbs16(V_CY(pVarIn), & V_CY(pVarOut));\n        break;\n#ifdef AVAIL_32BIT_VAR\n    case VT_DECIMAL:\n        DEC_SIGN(&V_DECIMAL(pVarOut)) &= ~DECIMAL_NEG;\n        break;\n#endif\n    case VT_UI1:\n    case VT_UI2:\n    case VT_UINT:\n    case VT_UI4:\n    case VT_UI8:\n        /* No-Op */\n        break;\n    case VT_EMPTY:\n        V_VT(pVarOut) = VT_I2;\n    case VT_NULL:\n        V_I2(pVarOut) = 0;\n        break;\n    default:\n        hRet = DISP_E_BADVARTYPE;\n    }\n\nVarAbs_Exit:\n    VariantClear16(&temp);\n    return hRet;\n}\n\n/**********************************************************************\n *              VarFix16 [OLEAUT32.169]\n *\n * Truncate a variants value to a whole number.\n *\n * PARAMS\n *  pVarIn  [I] Source variant\n *  pVarOut [O] Destination for converted value\n *\n * RETURNS\n *  Success: S_OK. pVarOut contains the converted value.\n *  Failure: An HRESULT error code indicating the error.\n *\n * NOTES\n *  - The type of the value stored in pVarOut depends on the type of pVarIn,\n *    according to the following table:\n *| Input Type       Output Type\n *| ----------       -----------\n *|  VT_BOOL          VT_I2\n *|  VT_EMPTY         VT_I2\n *|  VT_BSTR          VT_R8\n *|  All Others       Unchanged\n *  - The difference between this function and VarInt16() is that VarInt16() rounds\n *    negative numbers away from 0, while this function rounds them towards zero.\n */\nHRESULT WINAPI VarFix16(LPVARIANT16 pVarIn, LPVARIANT16 pVarOut)\n{\n    HRESULT hRet = S_OK;\n    VARIANT16  temp;\n\n    VariantInit16(&temp);\n\n    TRACE(\"(%s,%p)\\n\", debugstr_variant16(pVarIn), pVarOut);\n\n    /* Handle VT_DISPATCH by storing and taking address of returned value */\n    if ((V_VT(pVarIn) & VT_TYPEMASK) == VT_DISPATCH && ((V_VT(pVarIn) & ~VT_TYPEMASK) == 0))\n    {\n        hRet = VARIANT_FetchDispatchValue(pVarIn, &temp);\n        if (FAILED(hRet)) goto VarFix16_Exit;\n        pVarIn = &temp;\n    }\n    V_VT(pVarOut) = V_VT(pVarIn);\n\n    switch (V_VT(pVarIn))\n    {\n    case VT_UI1:\n        V_UI1(pVarOut) = V_UI1(pVarIn);\n        break;\n    case VT_BOOL:\n        V_VT(pVarOut) = VT_I2;\n        /* Fall through */\n     case VT_I2:\n        V_I2(pVarOut) = V_I2(pVarIn);\n        break;\n     case VT_I4:\n        V_I4(pVarOut) = V_I4(pVarIn);\n        break;\n     case VT_I8:\n        V_I8(pVarOut) = V_I8(pVarIn);\n        break;\n    case VT_R4:\n        if (V_R4(pVarIn) < 0.0f)\n            V_R4(pVarOut) = (float)ceil(V_R4(pVarIn));\n        else\n            V_R4(pVarOut) = (float)floor(V_R4(pVarIn));\n        break;\n    case VT_BSTR:\n        V_VT(pVarOut) = VT_R8;\n        hRet = VarR8FromStr16(V_BSTR(pVarIn), LOCALE_USER_DEFAULT, 0, &V_R8(pVarOut));\n        pVarIn = pVarOut;\n        /* Fall through */\n    case VT_DATE:\n    case VT_R8:\n        if (V_R8(pVarIn) < 0.0)\n            V_R8(pVarOut) = ceil(V_R8(pVarIn));\n        else\n            V_R8(pVarOut) = floor(V_R8(pVarIn));\n        break;\n    case VT_CY:\n        hRet = VarCyFix16(V_CY(pVarIn), &V_CY(pVarOut));\n        break;\n#ifdef AVAIL_32BIT_VAR\n    case VT_DECIMAL:\n        hRet = VarDecFix16(&V_DECIMAL(pVarIn), &V_DECIMAL(pVarOut));\n        break;\n#endif\n    case VT_EMPTY:\n        V_VT(pVarOut) = VT_I2;\n        V_I2(pVarOut) = 0;\n        break;\n    case VT_NULL:\n        /* No-Op */\n        break;\n    default:\n        if (V_TYPE(pVarIn) == VT_CLSID || /* VT_CLSID is a special case */\n            FAILED(VARIANT_ValidateType(V_VT(pVarIn))))\n            hRet = DISP_E_BADVARTYPE;\n        else\n            hRet = DISP_E_TYPEMISMATCH;\n    }\nVarFix16_Exit:\n    if (FAILED(hRet))\n      V_VT(pVarOut) = VT_EMPTY;\n    VariantClear16(&temp);\n\n    return hRet;\n}\n\n/**********************************************************************\n *              VarInt [OLEAUT32.172]\n *\n * Truncate a variants value to a whole number.\n *\n * PARAMS\n *  pVarIn  [I] Source variant\n *  pVarOut [O] Destination for converted value\n *\n * RETURNS\n *  Success: S_OK. pVarOut contains the converted value.\n *  Failure: An HRESULT error code indicating the error.\n *\n * NOTES\n *  - The type of the value stored in pVarOut depends on the type of pVarIn,\n *    according to the following table:\n *| Input Type       Output Type\n *| ----------       -----------\n *|  VT_BOOL          VT_I2\n *|  VT_EMPTY         VT_I2\n *|  VT_BSTR          VT_R8\n *|  All Others       Unchanged\n *  - The difference between this function and VarFix16() is that VarFix16() rounds\n *    negative numbers towards 0, while this function rounds them away from zero.\n */\nHRESULT WINAPI VarInt16(LPVARIANT16 pVarIn, LPVARIANT16 pVarOut)\n{\n    HRESULT hRet = S_OK;\n    VARIANT16  temp;\n\n    VariantInit16(&temp);\n\n    TRACE(\"(%s,%p)\\n\", debugstr_variant16(pVarIn), pVarOut);\n\n    /* Handle VT_DISPATCH by storing and taking address of returned value */\n    if ((V_VT(pVarIn) & VT_TYPEMASK) == VT_DISPATCH && ((V_VT(pVarIn) & ~VT_TYPEMASK) == 0))\n    {\n        hRet = VARIANT_FetchDispatchValue(pVarIn, &temp);\n        if (FAILED(hRet)) goto VarInt_Exit;\n        pVarIn = &temp;\n    }\n    V_VT(pVarOut) = V_VT(pVarIn);\n\n    switch (V_VT(pVarIn))\n    {\n    case VT_R4:\n        V_R4(pVarOut) = (float)floor(V_R4(pVarIn));\n        break;\n    case VT_BSTR:\n        V_VT(pVarOut) = VT_R8;\n        hRet = VarR8FromStr16(V_BSTR(pVarIn), LOCALE_USER_DEFAULT, 0, &V_R8(pVarOut));\n        pVarIn = pVarOut;\n        /* Fall through */\n    case VT_DATE:\n    case VT_R8:\n        V_R8(pVarOut) = floor(V_R8(pVarIn));\n        break;\n    case VT_CY:\n        hRet = VarCyInt16(V_CY(pVarIn), &V_CY(pVarOut));\n        break;\n#ifdef AVAIL_32BIT_VAR\n    case VT_DECIMAL:\n        hRet = VarDecInt16(&V_DECIMAL(pVarIn), &V_DECIMAL(pVarOut));\n        break;\n#endif\n    default:\n        hRet = VarFix16(pVarIn, pVarOut);\n    }\nVarInt_Exit:\n    VariantClear16(&temp);\n\n    return hRet;\n}\n\n/**********************************************************************\n *              VarXor16 [OLEAUT32.167]\n *\n * Perform a logical exclusive-or (XOR) operation on two variants.\n *\n * PARAMS\n *  pVarLeft  [I] First variant\n *  pVarRight [I] Variant to XOR with pVarLeft\n *  pVarOut   [O] Destination for XOR result\n *\n * RETURNS\n *  Success: S_OK. pVarOut contains the result of the operation with its type\n *           taken from the table below).\n *  Failure: An HRESULT error code indicating the error.\n *\n * NOTES\n *  - Neither pVarLeft or pVarRight are modified by this function.\n *  - This function does not process by-reference variants.\n *  - Input types of VT_BSTR may be numeric strings or boolean text.\n *  - The type of result stored in pVarOut depends on the types of pVarLeft\n *    and pVarRight, and will be one of VT_UI1, VT_I2, VT_I4, VT_I8, VT_BOOL,\n *    or VT_NULL if the function succeeds.\n *  - Type promotion is inconsistent and as a result certain combinations of\n *    values will return DISP_E_OVERFLOW even when they could be represented.\n *    This matches the behaviour of native oleaut32.\n */\nHRESULT WINAPI VarXor16(LPVARIANT16 pVarLeft, LPVARIANT16 pVarRight, LPVARIANT16 pVarOut)\n{\n    VARTYPE vt;\n    VARIANT16  varLeft, varRight;\n    VARIANT16  tempLeft, tempRight;\n    double d;\n    HRESULT hRet;\n\n    TRACE(\"(%s,%s,%p)\\n\", debugstr_variant16(pVarLeft), debugstr_variant16(pVarRight), pVarOut);\n\n    if (V_EXTRA_TYPE(pVarLeft) || V_EXTRA_TYPE(pVarRight) ||\n        V_VT(pVarLeft) > VT_UINT || V_VT(pVarRight) > VT_UINT ||\n        V_VT(pVarLeft) == VT_VARIANT || V_VT(pVarRight) == VT_VARIANT ||\n        V_VT(pVarLeft) == VT_UNKNOWN || V_VT(pVarRight) == VT_UNKNOWN ||\n        V_VT(pVarLeft) == (VARTYPE)15 || V_VT(pVarRight) == (VARTYPE)15 ||\n        V_VT(pVarLeft) == VT_ERROR || V_VT(pVarRight) == VT_ERROR)\n        return DISP_E_BADVARTYPE;\n\n    if (V_VT(pVarLeft) == VT_NULL || V_VT(pVarRight) == VT_NULL)\n    {\n        /* NULL XOR anything valid is NULL */\n        V_VT(pVarOut) = VT_NULL;\n        return S_OK;\n    }\n\n    VariantInit16(&tempLeft);\n    VariantInit16(&tempRight);\n\n    /* Handle VT_DISPATCH by storing and taking address of returned value */\n    if ((V_VT(pVarLeft) & VT_TYPEMASK) == VT_DISPATCH)\n    {\n        hRet = VARIANT_FetchDispatchValue(pVarLeft, &tempLeft);\n        if (FAILED(hRet)) goto VarXor16_Exit;\n        pVarLeft = &tempLeft;\n    }\n    if ((V_VT(pVarRight) & VT_TYPEMASK) == VT_DISPATCH)\n    {\n        hRet = VARIANT_FetchDispatchValue(pVarRight, &tempRight);\n        if (FAILED(hRet)) goto VarXor16_Exit;\n        pVarRight = &tempRight;\n    }\n\n    /* Copy our inputs so we don't disturb anything */\n    V_VT(&varLeft) = V_VT(&varRight) = VT_EMPTY;\n\n    hRet = VariantCopy16(&varLeft, pVarLeft);\n    if (FAILED(hRet))\n        goto VarXor16_Exit;\n\n    hRet = VariantCopy16(&varRight, pVarRight);\n    if (FAILED(hRet))\n        goto VarXor16_Exit;\n\n    /* Try any strings first as numbers, then as VT_BOOL */\n    if (V_VT(&varLeft) == VT_BSTR)\n    {\n        hRet = VarR8FromStr16(V_BSTR(&varLeft), LOCALE_USER_DEFAULT, 0, &d);\n        hRet = VariantChangeType16(&varLeft, &varLeft, VARIANT_LOCALBOOL,\n                                 FAILED(hRet) ? VT_BOOL : VT_I4);\n        if (FAILED(hRet))\n            goto VarXor16_Exit;\n    }\n\n    if (V_VT(&varRight) == VT_BSTR)\n    {\n        hRet = VarR8FromStr16(V_BSTR(&varRight), LOCALE_USER_DEFAULT, 0, &d);\n        hRet = VariantChangeType16(&varRight, &varRight, VARIANT_LOCALBOOL,\n                                 FAILED(hRet) ? VT_BOOL : VT_I4);\n        if (FAILED(hRet))\n            goto VarXor16_Exit;\n    }\n\n    /* Determine the result type */\n    if (V_VT(&varLeft) == VT_I8 || V_VT(&varRight) == VT_I8)\n    {\n        if (V_VT(pVarLeft) == VT_INT || V_VT(pVarRight) == VT_INT)\n        {\n            hRet = DISP_E_TYPEMISMATCH;\n            goto VarXor16_Exit;\n        }\n        vt = VT_I8;\n    }\n    else\n    {\n        switch ((V_VT(&varLeft) << 16) | V_VT(&varRight))\n        {\n        case (VT_BOOL  << 16) | VT_BOOL:\n            vt = VT_BOOL;\n            break;\n        case (VT_UI1   << 16) | VT_UI1:\n            vt = VT_UI1;\n            break;\n        case (VT_EMPTY << 16) | VT_EMPTY:\n        case (VT_EMPTY << 16) | VT_UI1:\n        case (VT_EMPTY << 16) | VT_I2:\n        case (VT_EMPTY << 16) | VT_BOOL:\n        case (VT_UI1   << 16) | VT_EMPTY:\n        case (VT_UI1   << 16) | VT_I2:\n        case (VT_UI1   << 16) | VT_BOOL:\n        case (VT_I2    << 16) | VT_EMPTY:\n        case (VT_I2    << 16) | VT_UI1:\n        case (VT_I2    << 16) | VT_I2:\n        case (VT_I2    << 16) | VT_BOOL:\n        case (VT_BOOL  << 16) | VT_EMPTY:\n        case (VT_BOOL  << 16) | VT_UI1:\n        case (VT_BOOL  << 16) | VT_I2:\n            vt = VT_I2;\n            break;\n        default:\n            vt = VT_I4;\n            break;\n        }\n    }\n\n    /* VT_UI4 does not overflow */\n    if (vt != VT_I8)\n    {\n        if (V_VT(&varLeft) == VT_UI4)\n            V_VT(&varLeft) = VT_I4;\n        if (V_VT(&varRight) == VT_UI4)\n            V_VT(&varRight) = VT_I4;\n    }\n\n    /* Convert our input copies to the result type */\n    if (V_VT(&varLeft) != vt)\n        hRet = VariantChangeType16(&varLeft, &varLeft, 0, vt);\n    if (FAILED(hRet))\n        goto VarXor16_Exit;\n\n    if (V_VT(&varRight) != vt)\n        hRet = VariantChangeType16(&varRight, &varRight, 0, vt);\n    if (FAILED(hRet))\n        goto VarXor16_Exit;\n\n    V_VT(pVarOut) = vt;\n\n    /* Calculate the result */\n    switch (vt)\n    {\n    case VT_I8:\n        V_I8(pVarOut) = V_I8(&varLeft) ^ V_I8(&varRight);\n        break;\n    case VT_I4:\n        V_I4(pVarOut) = V_I4(&varLeft) ^ V_I4(&varRight);\n        break;\n    case VT_BOOL:\n    case VT_I2:\n        V_I2(pVarOut) = V_I2(&varLeft) ^ V_I2(&varRight);\n        break;\n    case VT_UI1:\n        V_UI1(pVarOut) = V_UI1(&varLeft) ^ V_UI1(&varRight);\n        break;\n    }\n\nVarXor16_Exit:\n    VariantClear16(&varLeft);\n    VariantClear16(&varRight);\n    VariantClear16(&tempLeft);\n    VariantClear16(&tempRight);\n    return hRet;\n}\n\n/**********************************************************************\n *              VarEqv [OLEAUT32.172]\n *\n * Determine if two variants contain the same value.\n *\n * PARAMS\n *  pVarLeft  [I] First variant to compare\n *  pVarRight [I] Variant to compare to pVarLeft\n *  pVarOut   [O] Destination for comparison result\n *\n * RETURNS\n *  Success: S_OK. pVarOut contains the result of the comparison (VARIANT_TRUE\n *           if equivalent or non-zero otherwise.\n *  Failure: An HRESULT error code indicating the error.\n *\n * NOTES\n *  - This function simply calls VarXor16() on pVarLeft and pVarRight and inverts\n *    the result.\n */\nHRESULT WINAPI VarEqv16(LPVARIANT16 pVarLeft, LPVARIANT16 pVarRight, LPVARIANT16 pVarOut)\n{\n    HRESULT hRet;\n\n    TRACE(\"(%s,%s,%p)\\n\", debugstr_variant16(pVarLeft), debugstr_variant16(pVarRight), pVarOut);\n\n    hRet = VarXor16(pVarLeft, pVarRight, pVarOut);\n    if (SUCCEEDED(hRet))\n    {\n        if (V_VT(pVarOut) == VT_I8)\n            V_I8(pVarOut) = ~V_I8(pVarOut);\n        else\n            V_UI4(pVarOut) = ~V_UI4(pVarOut);\n    }\n    return hRet;\n}\n\n/**********************************************************************\n *              VarNeg [OLEAUT32.173]\n *\n * Negate the value of a variant.\n *\n * PARAMS\n *  pVarIn  [I] Source variant\n *  pVarOut [O] Destination for converted value\n *\n * RETURNS\n *  Success: S_OK. pVarOut contains the converted value.\n *  Failure: An HRESULT error code indicating the error.\n *\n * NOTES\n *  - The type of the value stored in pVarOut depends on the type of pVarIn,\n *    according to the following table:\n *| Input Type       Output Type\n *| ----------       -----------\n *|  VT_EMPTY         VT_I2\n *|  VT_UI1           VT_I2\n *|  VT_BOOL          VT_I2\n *|  VT_BSTR          VT_R8\n *|  All Others       Unchanged (unless promoted)\n *  - Where the negated value of a variant does not fit in its base type, the type\n *    is promoted according to the following table:\n *| Input Type       Promoted To\n *| ----------       -----------\n *|   VT_I2            VT_I4\n *|   VT_I4            VT_R8\n *|   VT_I8            VT_R8\n *  - The native version of this function returns DISP_E_BADVARTYPE for valid\n *    variant types that cannot be negated, and returns DISP_E_TYPEMISMATCH\n *    for types which are not valid. Since this is in contravention of the\n *    meaning of those error codes and unlikely to be relied on by applications,\n *    this implementation returns errors consistent with the other high level\n *    variant math functions.\n */\nHRESULT WINAPI VarNeg16(LPVARIANT16 pVarIn, LPVARIANT16 pVarOut)\n{\n    HRESULT hRet = S_OK;\n    VARIANT16  temp;\n\n    VariantInit16(&temp);\n\n    TRACE(\"(%s,%p)\\n\", debugstr_variant16(pVarIn), pVarOut);\n\n    /* Handle VT_DISPATCH by storing and taking address of returned value */\n    if ((V_VT(pVarIn) & VT_TYPEMASK) == VT_DISPATCH && ((V_VT(pVarIn) & ~VT_TYPEMASK) == 0))\n    {\n        hRet = VARIANT_FetchDispatchValue(pVarIn, &temp);\n        if (FAILED(hRet)) goto VarNeg_Exit;\n        pVarIn = &temp;\n    }\n    V_VT(pVarOut) = V_VT(pVarIn);\n\n    switch (V_VT(pVarIn))\n    {\n    case VT_UI1:\n        V_VT(pVarOut) = VT_I2;\n        V_I2(pVarOut) = -V_UI1(pVarIn);\n        break;\n    case VT_BOOL:\n        V_VT(pVarOut) = VT_I2;\n        /* Fall through */\n    case VT_I2:\n        if (V_I2(pVarIn) == I2_MIN)\n        {\n            V_VT(pVarOut) = VT_I4;\n            V_I4(pVarOut) = -(int)V_I2(pVarIn);\n        }\n        else\n            V_I2(pVarOut) = -V_I2(pVarIn);\n        break;\n    case VT_I4:\n        if (V_I4(pVarIn) == I4_MIN)\n        {\n            V_VT(pVarOut) = VT_R8;\n            V_R8(pVarOut) = -(double)V_I4(pVarIn);\n        }\n        else\n            V_I4(pVarOut) = -V_I4(pVarIn);\n        break;\n    case VT_I8:\n        if (V_I8(pVarIn) == I8_MIN)\n        {\n            V_VT(pVarOut) = VT_R8;\n            hRet = VarR8FromI816(V_I8(pVarIn), &V_R8(pVarOut));\n            V_R8(pVarOut) *= -1.0;\n        }\n        else\n            V_I8(pVarOut) = -V_I8(pVarIn);\n        break;\n    case VT_R4:\n        V_R4(pVarOut) = -V_R4(pVarIn);\n        break;\n    case VT_DATE:\n    case VT_R8:\n        V_R8(pVarOut) = -V_R8(pVarIn);\n        break;\n    case VT_CY:\n        hRet = VarCyNeg16(V_CY(pVarIn), &V_CY(pVarOut));\n        break;\n#ifdef AVAIL_32BIT_VAR\n    case VT_DECIMAL:\n        hRet = VarDecNeg16(&V_DECIMAL(pVarIn), &V_DECIMAL(pVarOut));\n        break;\n#endif\n    case VT_BSTR:\n        V_VT(pVarOut) = VT_R8;\n        hRet = VarR8FromStr16(V_BSTR(pVarIn), LOCALE_USER_DEFAULT, 0, &V_R8(pVarOut));\n        V_R8(pVarOut) = -V_R8(pVarOut);\n        break;\n    case VT_EMPTY:\n        V_VT(pVarOut) = VT_I2;\n        V_I2(pVarOut) = 0;\n        break;\n    case VT_NULL:\n        /* No-Op */\n        break;\n    default:\n        if (V_TYPE(pVarIn) == VT_CLSID || /* VT_CLSID is a special case */\n            FAILED(VARIANT_ValidateType(V_VT(pVarIn))))\n            hRet = DISP_E_BADVARTYPE;\n        else\n            hRet = DISP_E_TYPEMISMATCH;\n    }\nVarNeg_Exit:\n    if (FAILED(hRet))\n      V_VT(pVarOut) = VT_EMPTY;\n    VariantClear16(&temp);\n\n    return hRet;\n}\n\n/**********************************************************************\n *              VarNot [OLEAUT32.174]\n *\n * Perform a not operation on a variant.\n *\n * PARAMS\n *  pVarIn  [I] Source variant\n *  pVarOut [O] Destination for converted value\n *\n * RETURNS\n *  Success: S_OK. pVarOut contains the converted value.\n *  Failure: An HRESULT error code indicating the error.\n *\n * NOTES\n *  - Strictly speaking, this function performs a bitwise ones complement\n *    on the variants value (after possibly converting to VT_I4, see below).\n *    This only behaves like a boolean not operation if the value in\n *    pVarIn is either VARIANT_TRUE or VARIANT_FALSE and the type is signed.\n *  - To perform a genuine not operation, convert the variant to a VT_BOOL\n *    before calling this function.\n *  - This function does not process by-reference variants.\n *  - The type of the value stored in pVarOut depends on the type of pVarIn,\n *    according to the following table:\n *| Input Type       Output Type\n *| ----------       -----------\n *| VT_EMPTY         VT_I2\n *| VT_R4            VT_I4\n *| VT_R8            VT_I4\n *| VT_BSTR          VT_I4\n *| VT_DECIMAL       VT_I4\n *| VT_CY            VT_I4\n *| (All others)     Unchanged\n */\nHRESULT WINAPI VarNot16(LPVARIANT16 pVarIn, LPVARIANT16 pVarOut)\n{\n    VARIANT16  varIn;\n    HRESULT hRet = S_OK;\n    VARIANT16  temp;\n\n    VariantInit16(&temp);\n\n    TRACE(\"(%s,%p)\\n\", debugstr_variant16(pVarIn), pVarOut);\n\n    /* Handle VT_DISPATCH by storing and taking address of returned value */\n    if ((V_VT(pVarIn) & VT_TYPEMASK) == VT_DISPATCH && ((V_VT(pVarIn) & ~VT_TYPEMASK) == 0))\n    {\n        hRet = VARIANT_FetchDispatchValue(pVarIn, &temp);\n        if (FAILED(hRet)) goto VarNot_Exit;\n        pVarIn = &temp;\n    }\n\n    if (V_VT(pVarIn) == VT_BSTR)\n    {\n        V_VT(&varIn) = VT_R8;\n        hRet = VarR8FromStr16( V_BSTR(pVarIn), LOCALE_USER_DEFAULT, 0, &V_R8(&varIn) );\n        if (FAILED(hRet))\n        {\n            V_VT(&varIn) = VT_BOOL;\n            hRet = VarBoolFromStr16( V_BSTR(pVarIn), LOCALE_USER_DEFAULT, VAR_LOCALBOOL, &V_BOOL(&varIn) );\n        }\n        if (FAILED(hRet)) goto VarNot_Exit;\n        pVarIn = &varIn;\n    }\n\n    V_VT(pVarOut) = V_VT(pVarIn);\n\n    switch (V_VT(pVarIn))\n    {\n    case VT_I1:\n        V_I4(pVarOut) = ~V_I1(pVarIn);\n        V_VT(pVarOut) = VT_I4;\n        break;\n    case VT_UI1: V_UI1(pVarOut) = ~V_UI1(pVarIn); break;\n    case VT_BOOL:\n    case VT_I2:  V_I2(pVarOut) = ~V_I2(pVarIn); break;\n    case VT_UI2:\n        V_I4(pVarOut) = ~V_UI2(pVarIn);\n        V_VT(pVarOut) = VT_I4;\n        break;\n#ifdef AVAIL_32BIT_VAR\n    case VT_DECIMAL:\n        hRet = VarI4FromDec16(&V_DECIMAL(pVarIn), &V_I4(&varIn));\n        if (FAILED(hRet))\n            break;\n        pVarIn = &varIn;\n        /* Fall through ... */\n#endif\n    case VT_INT:\n        V_VT(pVarOut) = VT_I4;\n        /* Fall through ... */\n    case VT_I4:  V_I4(pVarOut) = ~V_I4(pVarIn); break;\n    case VT_UINT:\n    case VT_UI4:\n        V_I4(pVarOut) = ~V_UI4(pVarIn);\n        V_VT(pVarOut) = VT_I4;\n        break;\n    case VT_I8:  V_I8(pVarOut) = ~V_I8(pVarIn); break;\n    case VT_UI8:\n        V_I4(pVarOut) = ~V_UI8(pVarIn);\n        V_VT(pVarOut) = VT_I4;\n        break;\n    case VT_R4:\n        hRet = VarI4FromR416(V_R4(pVarIn), &V_I4(pVarOut));\n        V_I4(pVarOut) = ~V_I4(pVarOut);\n        V_VT(pVarOut) = VT_I4;\n        break;\n    case VT_DATE:\n    case VT_R8:\n        hRet = VarI4FromR816(V_R8(pVarIn), &V_I4(pVarOut));\n        V_I4(pVarOut) = ~V_I4(pVarOut);\n        V_VT(pVarOut) = VT_I4;\n        break;\n    case VT_CY:\n        hRet = VarI4FromCy16(V_CY(pVarIn), &V_I4(pVarOut));\n        V_I4(pVarOut) = ~V_I4(pVarOut);\n        V_VT(pVarOut) = VT_I4;\n        break;\n    case VT_EMPTY:\n        V_I2(pVarOut) = ~0;\n        V_VT(pVarOut) = VT_I2;\n        break;\n    case VT_NULL:\n        /* No-Op */\n        break;\n    default:\n        if (V_TYPE(pVarIn) == VT_CLSID || /* VT_CLSID is a special case */\n            FAILED(VARIANT_ValidateType(V_VT(pVarIn))))\n            hRet = DISP_E_BADVARTYPE;\n        else\n            hRet = DISP_E_TYPEMISMATCH;\n    }\nVarNot_Exit:\n    if (FAILED(hRet))\n      V_VT(pVarOut) = VT_EMPTY;\n    VariantClear16(&temp);\n\n    return hRet;\n}\n\n/**********************************************************************\n *              VarRound [OLEAUT32.175]\n *\n * Perform a round operation on a variant.\n *\n * PARAMS\n *  pVarIn  [I] Source variant\n *  deci    [I] Number of decimals to round to\n *  pVarOut [O] Destination for converted value\n *\n * RETURNS\n *  Success: S_OK. pVarOut contains the converted value.\n *  Failure: An HRESULT error code indicating the error.\n *\n * NOTES\n *  - Floating point values are rounded to the desired number of decimals.\n *  - Some integer types are just copied to the return variable.\n *  - Some other integer types are not handled and fail.\n */\nHRESULT WINAPI VarRound16(LPVARIANT16 pVarIn, int deci, LPVARIANT16 pVarOut)\n{\n    VARIANT16  varIn;\n    HRESULT hRet = S_OK;\n    float factor;\n    VARIANT16  temp;\n\n    VariantInit16(&temp);\n\n    TRACE(\"(%s,%d)\\n\", debugstr_variant16(pVarIn), deci);\n\n    /* Handle VT_DISPATCH by storing and taking address of returned value */\n    if ((V_VT(pVarIn) & VT_TYPEMASK) == VT_DISPATCH && ((V_VT(pVarIn) & ~VT_TYPEMASK) == 0))\n    {\n        hRet = VARIANT_FetchDispatchValue(pVarIn, &temp);\n        if (FAILED(hRet)) goto VarRound_Exit;\n        pVarIn = &temp;\n    }\n\n    switch (V_VT(pVarIn))\n    {\n    /* cases that fail on windows */\n    case VT_I1:\n    case VT_I8:\n    case VT_UI2:\n    case VT_UI4:\n\thRet = DISP_E_BADVARTYPE;\n\tbreak;\n\n    /* cases just copying in to out */\n    case VT_UI1:\n\tV_VT(pVarOut) = V_VT(pVarIn);\n\tV_UI1(pVarOut) = V_UI1(pVarIn);\n\tbreak;\n    case VT_I2:\n\tV_VT(pVarOut) = V_VT(pVarIn);\n\tV_I2(pVarOut) = V_I2(pVarIn);\n\tbreak;\n    case VT_I4:\n\tV_VT(pVarOut) = V_VT(pVarIn);\n\tV_I4(pVarOut) = V_I4(pVarIn);\n\tbreak;\n    case VT_NULL:\n\tV_VT(pVarOut) = V_VT(pVarIn);\n\t/* value unchanged */\n\tbreak;\n\n    /* cases that change type */\n    case VT_EMPTY:\n\tV_VT(pVarOut) = VT_I2;\n\tV_I2(pVarOut) = 0;\n\tbreak;\n    case VT_BOOL:\n\tV_VT(pVarOut) = VT_I2;\n\tV_I2(pVarOut) = V_BOOL(pVarIn);\n\tbreak;\n    case VT_BSTR:\n\thRet = VarR8FromStr16(V_BSTR(pVarIn), LOCALE_USER_DEFAULT, 0, &V_R8(&varIn));\n\tif (FAILED(hRet))\n\t    break;\n\tV_VT(&varIn)=VT_R8;\n\tpVarIn = &varIn;\n\t/* Fall through ... */\n\n    /* cases we need to do math */\n    case VT_R8:\n\tif (V_R8(pVarIn)>0) {\n\t    V_R8(pVarOut)=floor(V_R8(pVarIn)*pow(10, deci)+0.5)/pow(10, deci);\n\t} else {\n\t    V_R8(pVarOut)=ceil(V_R8(pVarIn)*pow(10, deci)-0.5)/pow(10, deci);\n\t}\n\tV_VT(pVarOut) = V_VT(pVarIn);\n\tbreak;\n    case VT_R4:\n\tif (V_R4(pVarIn)>0) {\n\t    V_R4(pVarOut)=floor(V_R4(pVarIn)*pow(10, deci)+0.5)/pow(10, deci);\n\t} else {\n\t    V_R4(pVarOut)=ceil(V_R4(pVarIn)*pow(10, deci)-0.5)/pow(10, deci);\n\t}\n\tV_VT(pVarOut) = V_VT(pVarIn);\n\tbreak;\n    case VT_DATE:\n\tif (V_DATE(pVarIn)>0) {\n\t    V_DATE(pVarOut)=floor(V_DATE(pVarIn)*pow(10, deci)+0.5)/pow(10, deci);\n\t} else {\n\t    V_DATE(pVarOut)=ceil(V_DATE(pVarIn)*pow(10, deci)-0.5)/pow(10, deci);\n\t}\n\tV_VT(pVarOut) = V_VT(pVarIn);\n\tbreak;\n    case VT_CY:\n\tif (deci>3)\n\t    factor=1;\n\telse\n\t    factor=pow(10, 4-deci);\n\n\tif (V_CY(pVarIn).int64>0) {\n\t    V_CY(pVarOut).int64=floor(V_CY(pVarIn).int64/factor)*factor;\n\t} else {\n\t    V_CY(pVarOut).int64=ceil(V_CY(pVarIn).int64/factor)*factor;\n\t}\n\tV_VT(pVarOut) = V_VT(pVarIn);\n\tbreak;\n\n    /* cases we don't know yet */\n    default:\n\tFIXME(\"unimplemented part, V_VT(pVarIn) == 0x%X, deci == %d\\n\",\n\t\tV_VT(pVarIn) & VT_TYPEMASK, deci);\n\thRet = DISP_E_BADVARTYPE;\n    }\nVarRound_Exit:\n    if (FAILED(hRet))\n      V_VT(pVarOut) = VT_EMPTY;\n    VariantClear16(&temp);\n\n    TRACE(\"returning 0x%08x %s\\n\", hRet, debugstr_variant16(pVarOut));\n    return hRet;\n}\n\n/**********************************************************************\n *              VarIdiv [OLEAUT32.153]\n *\n * Converts input variants to integers and divides them. \n *\n * PARAMS\n *  left     [I] Left hand variant\n *  right    [I] Right hand variant\n *  result   [O] Destination for quotient\n *\n * RETURNS\n *  Success: S_OK.  result contains the quotient.\n *  Failure: An HRESULT error code indicating the error.\n *\n * NOTES\n *  If either expression is null, null is returned, as per MSDN\n */\nHRESULT WINAPI VarIdiv16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result)\n{\n    HRESULT hres = S_OK;\n    VARTYPE resvt = VT_EMPTY;\n    VARTYPE leftvt,rightvt;\n    VARTYPE rightExtraFlags,leftExtraFlags,ExtraFlags;\n    VARIANT16  lv,rv;\n    VARIANT16  tempLeft, tempRight;\n\n    TRACE(\"(%s,%s,%p)\\n\", debugstr_variant16(left), debugstr_variant16(right), result);\n\n    VariantInit16(&lv);\n    VariantInit16(&rv);\n    VariantInit16(&tempLeft);\n    VariantInit16(&tempRight);\n\n    leftvt = V_VT(left)&VT_TYPEMASK;\n    rightvt = V_VT(right)&VT_TYPEMASK;\n    leftExtraFlags = V_VT(left)&(~VT_TYPEMASK);\n    rightExtraFlags = V_VT(right)&(~VT_TYPEMASK);\n\n    if (leftExtraFlags != rightExtraFlags)\n    {\n        hres = DISP_E_BADVARTYPE;\n        goto end;\n    }\n    ExtraFlags = leftExtraFlags;\n\n    /* Native VarIdiv always returns an error when using extra\n     * flags or if the variant combination is I8 and INT.\n     */\n    if ((leftvt == VT_I8 && rightvt == VT_INT) ||\n        (leftvt == VT_INT && rightvt == VT_I8) ||\n        (rightvt == VT_EMPTY && leftvt != VT_NULL) ||\n        ExtraFlags != 0)\n    {\n        hres = DISP_E_BADVARTYPE;\n        goto end;\n    }\n\n    /* Determine variant type */\n    else if (leftvt == VT_NULL || rightvt == VT_NULL)\n    {\n        V_VT(result) = VT_NULL;\n        hres = S_OK;\n        goto end;\n    }\n    else if (leftvt == VT_I8 || rightvt == VT_I8)\n        resvt = VT_I8;\n    else if (leftvt == VT_I4 || rightvt == VT_I4 ||\n        leftvt == VT_INT || rightvt == VT_INT ||\n        leftvt == VT_UINT || rightvt == VT_UINT ||\n        leftvt == VT_UI8 || rightvt == VT_UI8 ||\n        leftvt == VT_UI4 || rightvt == VT_UI4 ||\n        leftvt == VT_UI2 || rightvt == VT_UI2 ||\n        leftvt == VT_I1 || rightvt == VT_I1 ||\n        leftvt == VT_BSTR || rightvt == VT_BSTR ||\n        leftvt == VT_DATE || rightvt == VT_DATE ||\n        leftvt == VT_CY || rightvt == VT_CY ||\n        leftvt == VT_DECIMAL || rightvt == VT_DECIMAL ||\n        leftvt == VT_R8 || rightvt == VT_R8 ||\n        leftvt == VT_R4 || rightvt == VT_R4)\n        resvt = VT_I4;\n    else if (leftvt == VT_I2 || rightvt == VT_I2 ||\n        leftvt == VT_BOOL || rightvt == VT_BOOL ||\n        leftvt == VT_EMPTY)\n        resvt = VT_I2;\n    else if (leftvt == VT_UI1 || rightvt == VT_UI1)\n        resvt = VT_UI1;\n    else\n    {\n        hres = DISP_E_BADVARTYPE;\n        goto end;\n    }\n\n    /* coerce to the result type */\n    hres = VariantChangeType16(&lv, left, 0, resvt);\n    if (hres != S_OK) goto end;\n    hres = VariantChangeType16(&rv, right, 0, resvt);\n    if (hres != S_OK) goto end;\n\n    /* do the math */\n    V_VT(result) = resvt;\n    switch (resvt)\n    {\n    case VT_UI1:\n    if (V_UI1(&rv) == 0)\n    {\n        hres = DISP_E_DIVBYZERO;\n        V_VT(result) = VT_EMPTY;\n    }\n    else\n        V_UI1(result) = V_UI1(&lv) / V_UI1(&rv);\n    break;\n    case VT_I2:\n    if (V_I2(&rv) == 0)\n    {\n        hres = DISP_E_DIVBYZERO;\n        V_VT(result) = VT_EMPTY;\n    }\n    else\n        V_I2(result) = V_I2(&lv) / V_I2(&rv);\n    break;\n    case VT_I4:\n    if (V_I4(&rv) == 0)\n    {\n        hres = DISP_E_DIVBYZERO;\n        V_VT(result) = VT_EMPTY;\n    }\n    else\n        V_I4(result) = V_I4(&lv) / V_I4(&rv);\n    break;\n    case VT_I8:\n    if (V_I8(&rv) == 0)\n    {\n        hres = DISP_E_DIVBYZERO;\n        V_VT(result) = VT_EMPTY;\n    }\n    else\n        V_I8(result) = V_I8(&lv) / V_I8(&rv);\n    break;\n    default:\n        FIXME(\"Couldn't integer divide variant types %d,%d\\n\",\n            leftvt,rightvt);\n    }\n\nend:\n    VariantClear16(&lv);\n    VariantClear16(&rv);\n    VariantClear16(&tempLeft);\n    VariantClear16(&tempRight);\n\n    return hres;\n}\n\n\n/**********************************************************************\n *              VarMod [OLEAUT32.155]\n *\n * Perform the modulus operation of the right hand variant on the left\n *\n * PARAMS\n *  left     [I] Left hand variant\n *  right    [I] Right hand variant\n *  result   [O] Destination for converted value\n *\n * RETURNS\n *  Success: S_OK. result contains the remainder.\n *  Failure: An HRESULT error code indicating the error.\n *\n * NOTE:\n *   If an error occurs the type of result will be modified but the value will not be.\n *   Doesn't support arrays or any special flags yet.\n */\nHRESULT WINAPI VarMod16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result)\n{\n    BOOL         lOk        = TRUE;\n    HRESULT      rc         = E_FAIL;\n    int          resT = 0;\n    VARIANT16       lv,rv;\n    VARIANT16  tempLeft, tempRight;\n\n    VariantInit16(&tempLeft);\n    VariantInit16(&tempRight);\n    VariantInit16(&lv);\n    VariantInit16(&rv);\n\n    TRACE(\"(%s,%s,%p)\\n\", debugstr_variant16(left), debugstr_variant16(right), result);\n\n    /* Handle VT_DISPATCH by storing and taking address of returned value */\n    if ((V_VT(left) & VT_TYPEMASK) == VT_DISPATCH)\n    {\n        rc = VARIANT_FetchDispatchValue(left, &tempLeft);\n        if (FAILED(rc)) goto end;\n        left = &tempLeft;\n    }\n    if ((V_VT(right) & VT_TYPEMASK) == VT_DISPATCH)\n    {\n        rc = VARIANT_FetchDispatchValue(right, &tempRight);\n        if (FAILED(rc)) goto end;\n        right = &tempRight;\n    }\n\n    /* check for invalid inputs */\n    lOk = TRUE;\n    switch (V_VT(left) & VT_TYPEMASK) {\n    case VT_BOOL :\n    case VT_I1   :\n    case VT_I2   :\n    case VT_I4   :\n    case VT_I8   :\n    case VT_INT  :\n    case VT_UI1  :\n    case VT_UI2  :\n    case VT_UI4  :\n    case VT_UI8  :\n    case VT_UINT :\n    case VT_R4   :\n    case VT_R8   :\n    case VT_CY   :\n    case VT_EMPTY:\n    case VT_DATE :\n    case VT_BSTR :\n    case VT_DECIMAL:\n      break;\n    case VT_VARIANT:\n    case VT_UNKNOWN:\n      V_VT(result) = VT_EMPTY;\n      rc = DISP_E_TYPEMISMATCH;\n      goto end;\n    case VT_ERROR:\n      rc = DISP_E_TYPEMISMATCH;\n      goto end;\n    case VT_RECORD:\n      V_VT(result) = VT_EMPTY;\n      rc = DISP_E_TYPEMISMATCH;\n      goto end;\n    case VT_NULL:\n      break;\n    default:\n      V_VT(result) = VT_EMPTY;\n      rc = DISP_E_BADVARTYPE;\n      goto end;\n    }\n\n\n    switch (V_VT(right) & VT_TYPEMASK) {\n    case VT_BOOL :\n    case VT_I1   :\n    case VT_I2   :\n    case VT_I4   :\n    case VT_I8   :\n      if((V_VT(left) == VT_INT) && (V_VT(right) == VT_I8))\n      {\n\tV_VT(result) = VT_EMPTY;\n        rc = DISP_E_TYPEMISMATCH;\n        goto end;\n      }\n    case VT_INT  :\n      if((V_VT(right) == VT_INT) && (V_VT(left) == VT_I8))\n      {\n\tV_VT(result) = VT_EMPTY;\n        rc = DISP_E_TYPEMISMATCH;\n        goto end;\n      }\n    case VT_UI1  :\n    case VT_UI2  :\n    case VT_UI4  :\n    case VT_UI8  :\n    case VT_UINT :\n    case VT_R4   :\n    case VT_R8   :\n    case VT_CY   :\n      if(V_VT(left) == VT_EMPTY)\n      {\n\tV_VT(result) = VT_I4;\n        rc = S_OK;\n        goto end;\n      }\n    case VT_EMPTY:\n    case VT_DATE :\n    case VT_DECIMAL:\n      if(V_VT(left) == VT_ERROR)\n      {\n\tV_VT(result) = VT_EMPTY;\n        rc = DISP_E_TYPEMISMATCH;\n        goto end;\n      }\n    case VT_BSTR:\n      if(V_VT(left) == VT_NULL)\n      {\n\tV_VT(result) = VT_NULL;\n        rc = S_OK;\n        goto end;\n      }\n      break;\n\n    case VT_VOID:\n      V_VT(result) = VT_EMPTY;\n      rc = DISP_E_BADVARTYPE;\n      goto end;\n    case VT_NULL:\n      if(V_VT(left) == VT_VOID)\n      {\n\tV_VT(result) = VT_EMPTY;\n        rc = DISP_E_BADVARTYPE;\n      } else if((V_VT(left) == VT_NULL) || (V_VT(left) == VT_EMPTY) || (V_VT(left) == VT_ERROR) ||\n\t\tlOk)\n      {\n        V_VT(result) = VT_NULL;\n        rc = S_OK;\n      } else\n      {\n\tV_VT(result) = VT_NULL;\n        rc = DISP_E_BADVARTYPE;\n      }\n      goto end;\n    case VT_VARIANT:\n    case VT_UNKNOWN:\n      V_VT(result) = VT_EMPTY;\n      rc = DISP_E_TYPEMISMATCH;\n      goto end;\n    case VT_ERROR:\n      rc = DISP_E_TYPEMISMATCH;\n      goto end;\n    case VT_RECORD:\n      if((V_VT(left) == 15) || ((V_VT(left) >= 24) && (V_VT(left) <= 35)) || !lOk)\n      {\n\tV_VT(result) = VT_EMPTY;\n        rc = DISP_E_BADVARTYPE;\n      } else\n      {\n\tV_VT(result) = VT_EMPTY;\n        rc = DISP_E_TYPEMISMATCH;\n      }\n      goto end;\n    default:\n      V_VT(result) = VT_EMPTY;\n      rc = DISP_E_BADVARTYPE;\n      goto end;\n    }\n\n    /* determine the result type */\n    if((V_VT(left) == VT_I8)        || (V_VT(right) == VT_I8))   resT = VT_I8;\n    else if((V_VT(left) == VT_UI1)  && (V_VT(right) == VT_BOOL)) resT = VT_I2;\n    else if((V_VT(left) == VT_UI1)  && (V_VT(right) == VT_UI1))  resT = VT_UI1;\n    else if((V_VT(left) == VT_UI1)  && (V_VT(right) == VT_I2))   resT = VT_I2;\n    else if((V_VT(left) == VT_I2)   && (V_VT(right) == VT_BOOL)) resT = VT_I2;\n    else if((V_VT(left) == VT_I2)   && (V_VT(right) == VT_UI1))  resT = VT_I2;\n    else if((V_VT(left) == VT_I2)   && (V_VT(right) == VT_I2))   resT = VT_I2;\n    else if((V_VT(left) == VT_BOOL) && (V_VT(right) == VT_BOOL)) resT = VT_I2;\n    else if((V_VT(left) == VT_BOOL) && (V_VT(right) == VT_UI1))  resT = VT_I2;\n    else if((V_VT(left) == VT_BOOL) && (V_VT(right) == VT_I2))   resT = VT_I2;\n    else resT = VT_I4; /* most outputs are I4 */\n\n    /* convert to I8 for the modulo */\n    rc = VariantChangeType16(&lv, left, 0, VT_I8);\n    if(FAILED(rc))\n    {\n      FIXME(\"Could not convert left type %d to %d? rc == 0x%X\\n\", V_VT(left), VT_I8, rc);\n      goto end;\n    }\n\n    rc = VariantChangeType16(&rv, right, 0, VT_I8);\n    if(FAILED(rc))\n    {\n      FIXME(\"Could not convert right type %d to %d? rc == 0x%X\\n\", V_VT(right), VT_I8, rc);\n      goto end;\n    }\n\n    /* if right is zero set VT_EMPTY and return divide by zero */\n    if(V_I8(&rv) == 0)\n    {\n      V_VT(result) = VT_EMPTY;\n      rc = DISP_E_DIVBYZERO;\n      goto end;\n    }\n\n    /* perform the modulo operation */\n    V_VT(result) = VT_I8;\n    V_I8(result) = V_I8(&lv) % V_I8(&rv);\n\n    TRACE(\"V_I8(left) == %s, V_I8(right) == %s, V_I8(result) == %s\\n\",\n          wine_dbgstr_longlong(V_I8(&lv)), wine_dbgstr_longlong(V_I8(&rv)),\n          wine_dbgstr_longlong(V_I8(result)));\n\n    /* convert left and right to the destination type */\n    rc = VariantChangeType16(result, result, 0, resT);\n    if(FAILED(rc))\n    {\n      FIXME(\"Could not convert 0x%x to %d?\\n\", V_VT(result), resT);\n      /* fall to end of function */\n    }\n\nend:\n    VariantClear16(&lv);\n    VariantClear16(&rv);\n    VariantClear16(&tempLeft);\n    VariantClear16(&tempRight);\n    return rc;\n}\n\n/**********************************************************************\n *              VarPow [OLEAUT32.158]\n *\n * Computes the power of one variant to another variant.\n *\n * PARAMS\n *  left    [I] First variant\n *  right   [I] Second variant\n *  result  [O] Result variant\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: An HRESULT error code indicating the error.\n */\nHRESULT WINAPI VarPow16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result)\n{\n    HRESULT hr = S_OK;\n    VARIANT16  dl,dr;\n    VARTYPE resvt = VT_EMPTY;\n    VARTYPE leftvt,rightvt;\n    VARTYPE rightExtraFlags,leftExtraFlags,ExtraFlags;\n    VARIANT16  tempLeft, tempRight;\n\n    TRACE(\"(%s,%s,%p)\\n\", debugstr_variant16(left), debugstr_variant16(right), result);\n\n    VariantInit16(&dl);\n    VariantInit16(&dr);\n    VariantInit16(&tempLeft);\n    VariantInit16(&tempRight);\n\n    /* Handle VT_DISPATCH by storing and taking address of returned value */\n    if ((V_VT(left) & VT_TYPEMASK) == VT_DISPATCH)\n    {\n        hr = VARIANT_FetchDispatchValue(left, &tempLeft);\n        if (FAILED(hr)) goto end;\n        left = &tempLeft;\n    }\n    if ((V_VT(right) & VT_TYPEMASK) == VT_DISPATCH)\n    {\n        hr = VARIANT_FetchDispatchValue(right, &tempRight);\n        if (FAILED(hr)) goto end;\n        right = &tempRight;\n    }\n\n    leftvt = V_VT(left)&VT_TYPEMASK;\n    rightvt = V_VT(right)&VT_TYPEMASK;\n    leftExtraFlags = V_VT(left)&(~VT_TYPEMASK);\n    rightExtraFlags = V_VT(right)&(~VT_TYPEMASK);\n\n    if (leftExtraFlags != rightExtraFlags)\n    {\n        hr = DISP_E_BADVARTYPE;\n        goto end;\n    }\n    ExtraFlags = leftExtraFlags;\n\n    /* Native VarPow always returns an error when using extra flags */\n    if (ExtraFlags != 0)\n    {\n        hr = DISP_E_BADVARTYPE;\n        goto end;\n    }\n\n    /* Determine return type */\n    else if (leftvt == VT_NULL || rightvt == VT_NULL) {\n        V_VT(result) = VT_NULL;\n        hr = S_OK;\n        goto end;\n    }\n    else if ((leftvt == VT_EMPTY || leftvt == VT_I2 ||\n        leftvt == VT_I4 || leftvt == VT_R4 ||\n        leftvt == VT_R8 || leftvt == VT_CY ||\n        leftvt == VT_DATE || leftvt == VT_BSTR ||\n        leftvt == VT_BOOL || leftvt == VT_DECIMAL ||\n        (leftvt >= VT_I1 && leftvt <= VT_UINT)) &&\n        (rightvt == VT_EMPTY || rightvt == VT_I2 ||\n        rightvt == VT_I4 || rightvt == VT_R4 ||\n        rightvt == VT_R8 || rightvt == VT_CY ||\n        rightvt == VT_DATE || rightvt == VT_BSTR ||\n        rightvt == VT_BOOL || rightvt == VT_DECIMAL ||\n        (rightvt >= VT_I1 && rightvt <= VT_UINT)))\n        resvt = VT_R8;\n    else\n    {\n        hr = DISP_E_BADVARTYPE;\n        goto end;\n    }\n\n    hr = VariantChangeType16(&dl,left,0,resvt);\n    if (FAILED(hr)) {\n        ERR(\"Could not change passed left argument to VT_R8, handle it differently.\\n\");\n        hr = E_FAIL;\n        goto end;\n    }\n\n    hr = VariantChangeType16(&dr,right,0,resvt);\n    if (FAILED(hr)) {\n        ERR(\"Could not change passed right argument to VT_R8, handle it differently.\\n\");\n        hr = E_FAIL;\n        goto end;\n    }\n\n    V_VT(result) = VT_R8;\n    V_R8(result) = pow(V_R8(&dl),V_R8(&dr));\n\nend:\n    VariantClear16(&dl);\n    VariantClear16(&dr);\n    VariantClear16(&tempLeft);\n    VariantClear16(&tempRight);\n\n    return hr;\n}\n\n/**********************************************************************\n *              VarImp [OLEAUT32.154]\n *\n * Bitwise implication of two variants.\n *\n * PARAMS\n *  left    [I] First variant\n *  right   [I] Second variant\n *  result  [O] Result variant\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: An HRESULT error code indicating the error.\n */\nHRESULT WINAPI VarImp16(LPVARIANT16 left, LPVARIANT16 right, LPVARIANT16 result)\n{\n    HRESULT hres = S_OK;\n    VARTYPE resvt = VT_EMPTY;\n    VARTYPE leftvt,rightvt;\n    VARTYPE rightExtraFlags,leftExtraFlags,ExtraFlags;\n    VARIANT16  lv,rv;\n    double d;\n    VARIANT16  tempLeft, tempRight;\n\n    VariantInit16(&lv);\n    VariantInit16(&rv);\n    VariantInit16(&tempLeft);\n    VariantInit16(&tempRight);\n\n    TRACE(\"(%s,%s,%p)\\n\", debugstr_variant16(left), debugstr_variant16(right), result);\n\n    /* Handle VT_DISPATCH by storing and taking address of returned value */\n    if ((V_VT(left) & VT_TYPEMASK) == VT_DISPATCH)\n    {\n        hres = VARIANT_FetchDispatchValue(left, &tempLeft);\n        if (FAILED(hres)) goto VarImp_Exit;\n        left = &tempLeft;\n    }\n    if ((V_VT(right) & VT_TYPEMASK) == VT_DISPATCH)\n    {\n        hres = VARIANT_FetchDispatchValue(right, &tempRight);\n        if (FAILED(hres)) goto VarImp_Exit;\n        right = &tempRight;\n    }\n\n    leftvt = V_VT(left)&VT_TYPEMASK;\n    rightvt = V_VT(right)&VT_TYPEMASK;\n    leftExtraFlags = V_VT(left)&(~VT_TYPEMASK);\n    rightExtraFlags = V_VT(right)&(~VT_TYPEMASK);\n\n    if (leftExtraFlags != rightExtraFlags)\n    {\n        hres = DISP_E_BADVARTYPE;\n        goto VarImp_Exit;\n    }\n    ExtraFlags = leftExtraFlags;\n\n    /* Native VarImp always returns an error when using extra\n     * flags or if the variants are I8 and INT.\n     */\n    if ((leftvt == VT_I8 && rightvt == VT_INT) ||\n        ExtraFlags != 0)\n    {\n        hres = DISP_E_BADVARTYPE;\n        goto VarImp_Exit;\n    }\n\n    /* Determine result type */\n    else if ((leftvt == VT_NULL && rightvt == VT_NULL) ||\n        (leftvt == VT_NULL && rightvt == VT_EMPTY))\n    {\n        V_VT(result) = VT_NULL;\n        hres = S_OK;\n        goto VarImp_Exit;\n    }\n    else if (leftvt == VT_I8 || rightvt == VT_I8)\n        resvt = VT_I8;\n    else if (leftvt == VT_I4 || rightvt == VT_I4 ||\n        leftvt == VT_INT || rightvt == VT_INT ||\n        leftvt == VT_UINT || rightvt == VT_UINT ||\n        leftvt == VT_UI4 || rightvt == VT_UI4 ||\n        leftvt == VT_UI8 || rightvt == VT_UI8 ||\n        leftvt == VT_UI2 || rightvt == VT_UI2 ||\n        leftvt == VT_DECIMAL || rightvt == VT_DECIMAL ||\n        leftvt == VT_DATE || rightvt == VT_DATE ||\n        leftvt == VT_CY || rightvt == VT_CY ||\n        leftvt == VT_R8 || rightvt == VT_R8 ||\n        leftvt == VT_R4 || rightvt == VT_R4 ||\n        leftvt == VT_I1 || rightvt == VT_I1)\n        resvt = VT_I4;\n    else if ((leftvt == VT_UI1 && rightvt == VT_UI1) ||\n        (leftvt == VT_UI1 && rightvt == VT_NULL) ||\n        (leftvt == VT_NULL && rightvt == VT_UI1))\n        resvt = VT_UI1;\n    else if (leftvt == VT_EMPTY || rightvt == VT_EMPTY ||\n        leftvt == VT_I2 || rightvt == VT_I2 ||\n        leftvt == VT_UI1 || rightvt == VT_UI1)\n        resvt = VT_I2;\n    else if (leftvt == VT_BOOL || rightvt == VT_BOOL ||\n        leftvt == VT_BSTR || rightvt == VT_BSTR)\n        resvt = VT_BOOL;\n\n    /* VT_NULL requires special handling for when the opposite\n     * variant is equal to something other than -1.\n     * (NULL Imp 0 = NULL, NULL Imp n = n)\n     */\n    if (leftvt == VT_NULL)\n    {\n        VARIANT_BOOL b;\n        switch(rightvt)\n        {\n        case VT_I1:   if (!V_I1(right)) resvt = VT_NULL; break;\n        case VT_UI1:  if (!V_UI1(right)) resvt = VT_NULL; break;\n        case VT_I2:   if (!V_I2(right)) resvt = VT_NULL; break;\n        case VT_UI2:  if (!V_UI2(right)) resvt = VT_NULL; break;\n        case VT_I4:   if (!V_I4(right)) resvt = VT_NULL; break;\n        case VT_UI4:  if (!V_UI4(right)) resvt = VT_NULL; break;\n        case VT_I8:   if (!V_I8(right)) resvt = VT_NULL; break;\n        case VT_UI8:  if (!V_UI8(right)) resvt = VT_NULL; break;\n        case VT_INT:  if (!V_INT(right)) resvt = VT_NULL; break;\n        case VT_UINT: if (!V_UINT(right)) resvt = VT_NULL; break;\n        case VT_BOOL: if (!V_BOOL(right)) resvt = VT_NULL; break;\n        case VT_R4:   if (!V_R4(right)) resvt = VT_NULL; break;\n        case VT_R8:   if (!V_R8(right)) resvt = VT_NULL; break;\n        case VT_DATE: if (!V_DATE(right)) resvt = VT_NULL; break;\n        case VT_CY:   if (!V_CY(right).int64) resvt = VT_NULL; break;\n#ifdef AVAIL_32BIT_VAR\n        case VT_DECIMAL:\n            if (!(DEC_HI32(&V_DECIMAL(right)) || DEC_LO64(&V_DECIMAL(right))))\n                resvt = VT_NULL;\n            break;\n#endif\n        case VT_BSTR:\n            hres = VarBoolFromStr16(V_BSTR(right),LOCALE_USER_DEFAULT, VAR_LOCALBOOL, &b);\n            if (FAILED(hres)) goto VarImp_Exit;\n            else if (!b)\n                V_VT(result) = VT_NULL;\n            else\n            {\n                V_VT(result) = VT_BOOL;\n                V_BOOL(result) = b;\n            }\n            goto VarImp_Exit;\n        }\n        if (resvt == VT_NULL)\n        {\n            V_VT(result) = resvt;\n            goto VarImp_Exit;\n        }\n        else\n        {\n            hres = VariantChangeType16(result,right,0,resvt);\n            goto VarImp_Exit;\n        }\n    }\n\n    /* Special handling is required when NULL is the right variant.\n     * (-1 Imp NULL = NULL, n Imp NULL = n Imp 0)\n     */\n    else if (rightvt == VT_NULL)\n    {\n        VARIANT_BOOL b;\n        switch(leftvt)\n        {\n        case VT_I1:     if (V_I1(left) == -1) resvt = VT_NULL; break;\n        case VT_UI1:    if (V_UI1(left) == 0xff) resvt = VT_NULL; break;\n        case VT_I2:     if (V_I2(left) == -1) resvt = VT_NULL; break;\n        case VT_UI2:    if (V_UI2(left) == 0xffff) resvt = VT_NULL; break;\n        case VT_INT:    if (V_INT(left) == -1) resvt = VT_NULL; break;\n        case VT_UINT:   if (V_UINT(left) == ~0u) resvt = VT_NULL; break;\n        case VT_I4:     if (V_I4(left) == -1) resvt = VT_NULL; break;\n        case VT_UI4:    if (V_UI4(left) == ~0u) resvt = VT_NULL; break;\n        case VT_I8:     if (V_I8(left) == -1) resvt = VT_NULL; break;\n        case VT_UI8:    if (V_UI8(left) == ~(ULONGLONG)0) resvt = VT_NULL; break;\n        case VT_BOOL:   if (V_BOOL(left) == VARIANT_TRUE) resvt = VT_NULL; break;\n        case VT_R4:     if (V_R4(left) == -1.0) resvt = VT_NULL; break;\n        case VT_R8:     if (V_R8(left) == -1.0) resvt = VT_NULL; break;\n        case VT_CY:     if (V_CY(left).int64 == -1) resvt = VT_NULL; break;\n#ifdef AVAIL_32BIT_VAR\n        case VT_DECIMAL:\n            if (DEC_HI32(&V_DECIMAL(left)) == 0xffffffff)\n                resvt = VT_NULL;\n            break;\n#endif\n        case VT_BSTR:\n            hres = VarBoolFromStr16(V_BSTR(left),LOCALE_USER_DEFAULT, VAR_LOCALBOOL, &b);\n            if (FAILED(hres)) goto VarImp_Exit;\n            else if (b == VARIANT_TRUE)\n                resvt = VT_NULL;\n        }\n        if (resvt == VT_NULL)\n        {\n            V_VT(result) = resvt;\n            goto VarImp_Exit;\n        }\n    }\n\n    hres = VariantCopy16(&lv, left);\n    if (FAILED(hres)) goto VarImp_Exit;\n\n    if (rightvt == VT_NULL)\n    {\n        memset( &rv, 0, sizeof(rv) );\n        V_VT(&rv) = resvt;\n    }\n    else\n    {\n        hres = VariantCopy16(&rv, right);\n        if (FAILED(hres)) goto VarImp_Exit;\n    }\n\n    if (V_VT(&lv) == VT_BSTR &&\n        FAILED(VarR8FromStr16(V_BSTR(&lv),LOCALE_USER_DEFAULT, 0, &d)))\n        hres = VariantChangeType16(&lv,&lv,VARIANT_LOCALBOOL, VT_BOOL);\n    if (SUCCEEDED(hres) && V_VT(&lv) != resvt)\n        hres = VariantChangeType16(&lv,&lv,0,resvt);\n    if (FAILED(hres)) goto VarImp_Exit;\n\n    if (V_VT(&rv) == VT_BSTR &&\n        FAILED(VarR8FromStr16(V_BSTR(&rv),LOCALE_USER_DEFAULT, 0, &d)))\n        hres = VariantChangeType16(&rv, &rv,VARIANT_LOCALBOOL, VT_BOOL);\n    if (SUCCEEDED(hres) && V_VT(&rv) != resvt)\n        hres = VariantChangeType16(&rv, &rv, 0, resvt);\n    if (FAILED(hres)) goto VarImp_Exit;\n\n    /* do the math */\n    V_VT(result) = resvt;\n    switch (resvt)\n    {\n    case VT_I8:\n    V_I8(result) = (~V_I8(&lv)) | V_I8(&rv);\n    break;\n    case VT_I4:\n    V_I4(result) = (~V_I4(&lv)) | V_I4(&rv);\n    break;\n    case VT_I2:\n    V_I2(result) = (~V_I2(&lv)) | V_I2(&rv);\n    break;\n    case VT_UI1:\n    V_UI1(result) = (~V_UI1(&lv)) | V_UI1(&rv);\n    break;\n    case VT_BOOL:\n    V_BOOL(result) = (~V_BOOL(&lv)) | V_BOOL(&rv);\n    break;\n    default:\n    FIXME(\"Couldn't perform bitwise implication on variant types %d,%d\\n\",\n        leftvt,rightvt);\n    }\n\nVarImp_Exit:\n\n    VariantClear16(&lv);\n    VariantClear16(&rv);\n    VariantClear16(&tempLeft);\n    VariantClear16(&tempRight);\n\n    return hres;\n}\n"
  },
  {
    "path": "ole2disp/var/variant.h",
    "content": "/*\n * Variant Inlines\n *\n * Copyright 2003 Jon Griffiths\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"windef.h\"\n#include \"winerror.h\"\n#include \"objbase.h\"\n#include \"oleauto.h\"\n#include \"../ole2disp.h\"\n#include <math.h>\n\n/* Get just the type from a variant pointer */\n#define V_TYPE(v)  (V_VT((v)) & VT_TYPEMASK)\n\n/* Flags set in V_VT, other than the actual type value */\n#define VT_EXTRA_TYPE (VT_VECTOR|VT_ARRAY|VT_BYREF|VT_RESERVED)\n\n/* Get the extra flags from a variant pointer */\n#define V_EXTRA_TYPE(v) (V_VT((v)) & VT_EXTRA_TYPE)\n\n/* Missing in Windows but useful VTBIT_* defines */\n#define VTBIT_BOOL      (1 << VT_BSTR)\n#define VTBIT_BSTR      (1 << VT_BSTR)\n#define VTBIT_DATE      (1 << VT_DATE)\n#define VTBIT_DISPATCH  (1 << VT_DISPATCH)\n#define VTBIT_EMPTY     (1 << VT_EMPTY)\n#define VTBIT_ERROR     (1 << VT_ERROR)\n#define VTBIT_INT       (1 << VT_INT)\n#define VTBIT_NULL      (1 << VT_NULL)\n#define VTBIT_UINT      (1 << VT_UINT)\n#define VTBIT_UNKNOWN   (1 << VT_UNKNOWN)\n#define VTBIT_VARIANT   (1 << VT_VARIANT)\n#define VTBIT_15        (1 << 15)        /* no variant type with this number */\n\n/* Size constraints */\n#define I1_MAX   0x7f\n#define I1_MIN   ((-I1_MAX)-1)\n#define UI1_MAX  0xff\n#define UI1_MIN  0\n#define I2_MAX   0x7fff\n#define I2_MIN   ((-I2_MAX)-1)\n#define UI2_MAX  0xffff\n#define UI2_MIN  0\n#define I4_MAX   0x7fffffff\n#define I4_MIN   ((-I4_MAX)-1)\n#define UI4_MAX  0xffffffff\n#define UI4_MIN  0\n#define I8_MAX   (((LONGLONG)I4_MAX << 32) | UI4_MAX)\n#define I8_MIN   ((-I8_MAX)-1)\n#define UI8_MAX  (((ULONGLONG)UI4_MAX << 32) | UI4_MAX)\n#define UI8_MIN  0\n#define DATE_MAX 2958465\n#define DATE_MIN -657434\n#define R4_MAX 3.402823567797336e38\n#define R4_MIN 1.40129846432481707e-45\n#define R8_MAX 1.79769313486231470e+308\n#define R8_MIN 4.94065645841246544e-324\n\n/* Value of sign for a positive decimal number */\n#define DECIMAL_POS 0\n\n/* Native headers don't change the union ordering for DECIMAL sign/scale (duh).\n * This means that the signscale member is only useful for setting both members to 0.\n * SIGNSCALE creates endian-correct values so that we can properly set both at once\n * to values other than 0.\n */\n#ifdef WORDS_BIGENDIAN\n#define SIGNSCALE(sign,scale) (((scale) << 8) | sign)\n#else\n#define SIGNSCALE(sign,scale) (((sign) << 8) | scale)\n#endif\n\n/* Macros for getting at a DECIMAL's parts */\n#define DEC_SIGN(d)      ((d)->u.s.sign)\n#define DEC_SCALE(d)     ((d)->u.s.scale)\n#define DEC_SIGNSCALE(d) ((d)->u.signscale)\n#define DEC_HI32(d)      ((d)->Hi32)\n#define DEC_MID32(d)     ((d)->u1.s1.Mid32)\n#define DEC_LO32(d)      ((d)->u1.s1.Lo32)\n#define DEC_LO64(d)      ((d)->u1.Lo64)\n\n#define DEC_MAX_SCALE    28 /* Maximum scale for a decimal */\n\n/* Internal flags for low level conversion functions */\n#define  VAR_BOOLONOFF 0x0400 /* Convert bool to \"On\"/\"Off\" */\n#define  VAR_BOOLYESNO 0x0800 /* Convert bool to \"Yes\"/\"No\" */\n#define  VAR_NEGATIVE  0x1000 /* Number is negative */\n\n/* The localised characters that make up a valid number */\ntypedef struct tagVARIANT_NUMBER_CHARS\n{\n  WCHAR cNegativeSymbol;\n  WCHAR cPositiveSymbol;\n  WCHAR cDecimalPoint;\n  WCHAR cDigitSeparator;\n  WCHAR cCurrencyLocal;\n  WCHAR cCurrencyLocal2;\n  WCHAR cCurrencyDecimalPoint;\n  WCHAR cCurrencyDigitSeparator;\n} VARIANT_NUMBER_CHARS;\n\nunsigned int get_type_size(ULONG*, VARTYPE) DECLSPEC_HIDDEN;\nHRESULT VARIANT_ClearInd(VARIANTARG16 *) DECLSPEC_HIDDEN;\nBOOL get_date_format(LCID, DWORD, const SYSTEMTIME *,\n        const CHAR *, CHAR *, int) DECLSPEC_HIDDEN;\n"
  },
  {
    "path": "ole2disp/var/vartype.c",
    "content": "/*\n * Low level variant functions\n *\n * Copyright 2003 Jon Griffiths\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#define COBJMACROS\n#define NONAMELESSUNION\n#define NONAMELESSSTRUCT\n\n#include \"wine/debug.h\"\n#include \"wine/unicode.h\"\n#include \"winbase.h\"\n#include \"winuser.h\"\n#include \"winnt.h\"\n#include \"variant.h\"\n#include \"resource.h\"\n#include <stdio.h>\n#include <string.h>\n\ntypedef SEGPTR SEGIDispatch;\nWINE_DEFAULT_DEBUG_CHANNEL(variant);\n#define strcmpiA strcmpi\n#define strcmpA strcmp\n#define strchrA strchr\n#define strlenA strlen\n#define sprintfA sprintf\n#define strspnA strspn\n#define isdigitA isdigit\n#define strtoulA strtoul\n#define isalphaA isalpha\n#define strncmpiA _strnicmp\n#define isspaceA isspace\n\nextern HMODULE hProxyDll DECLSPEC_HIDDEN;\n\n#define CY_MULTIPLIER   10000             /* 4 dp of precision */\n#define CY_MULTIPLIER_F 10000.0\n#define CY_HALF         (CY_MULTIPLIER/2) /* 0.5 */\n#define CY_HALF_F       (CY_MULTIPLIER_F/2.0)\n\nstatic const OLECHAR16 szFloatFormatW[] = { '%','.','7','G','\\0' };\nstatic const OLECHAR16 szDoubleFormatW[] = { '%','.','1','5','G','\\0' };\n\nstatic void fix_double(double *dbl)\n{\n#if 0\n    ULARGE_INTEGER lng = *(ULARGE_INTEGER*)dbl;\n    ULARGE_INTEGER swapped = { lng.u.HighPart, lng.u.LowPart };\n    *dbl = *(double*)&swapped;\n#endif\n}\n/* Copy data from one variant to another. */\nstatic inline void VARIANT_CopyData(const VARIANT16 *srcVar, VARTYPE vt, void *pOut)\n{\n  switch (vt)\n  {\n  case VT_I1:\n  case VT_UI1: memcpy(pOut, &V_UI1(srcVar), sizeof(BYTE)); break;\n  case VT_BOOL:\n  case VT_I2:\n  case VT_UI2: memcpy(pOut, &V_UI2(srcVar), sizeof(SHORT)); break;\n  case VT_R4:\n  case VT_INT:\n  case VT_I4:\n  case VT_UINT:\n  case VT_UI4: memcpy(pOut, &V_UI4(srcVar), sizeof (LONG)); break;\n  case VT_R8:\n  case VT_DATE:\n  case VT_CY:\n  case VT_I8:\n  case VT_UI8: memcpy(pOut, &V_UI8(srcVar), sizeof (LONG64)); break;\n  case VT_INT_PTR: memcpy(pOut, &V_INT_PTR(srcVar), sizeof (INT_PTR)); break;\n#ifdef AVAIL_32BIT_VAR\n  case VT_DECIMAL: memcpy(pOut, &V_DECIMAL(srcVar), sizeof (DECIMAL)); break;\n#endif\n  case VT_BSTR: memcpy(pOut, &V_BSTR(srcVar), sizeof(SEGBSTR16)); break;\n  default:\n    FIXME(\"VT_ type %d unhandled, please report!\\n\", vt);\n  }\n}\n\n/* Macro to inline conversion from a float or double to any integer type,\n * rounding according to the 'dutch' convention.\n */\n#define VARIANT_DutchRound(typ, value, res) do { \\\n  double whole = value < 0 ? ceil(value) : floor(value); \\\n  double fract = value - whole; \\\n  if (fract > 0.5) res = (typ)whole + (typ)1; \\\n  else if (fract == 0.5) { typ is_odd = (typ)whole & 1; res = whole + is_odd; } \\\n  else if (fract >= 0.0) res = (typ)whole; \\\n  else if (fract == -0.5) { typ is_odd = (typ)whole & 1; res = whole - is_odd; } \\\n  else if (fract > -0.5) res = (typ)whole; \\\n  else res = (typ)whole - (typ)1; \\\n} while(0)\n\n\n/* Coerce VT_BSTR to a numeric type */\nstatic HRESULT VARIANT_NumberFromBstr(OLECHAR16* pStrIn, LCID lcid, ULONG ulFlags,\n                                      void* pOut, VARTYPE vt)\n{\n  VARIANTARG16 dstVar;\n  HRESULT hRet;\n  NUMPARSE np;\n  BYTE rgb[1024];\n\n  /* Use VarParseNumFromStr16/VarNumFromParseNum16 as MSDN indicates */\n  np.cDig = ARRAY_SIZE(rgb);\n  np.dwInFlags = NUMPRS_STD;\n\n  hRet = VarParseNumFromStr16(pStrIn, lcid, ulFlags, &np, rgb);\n\n  if (SUCCEEDED(hRet))\n  {\n    /* 1 << vt gives us the VTBIT constant for the destination number type */\n    hRet = VarNumFromParseNum16(&np, rgb, 1 << vt, &dstVar);\n    if (SUCCEEDED(hRet))\n      VARIANT_CopyData(&dstVar, vt, pOut);\n  }\n  return hRet;\n}\n\n/* Coerce VT_DISPATCH to another type */\nstatic HRESULT VARIANT_FromDisp(SEGIDispatch pdispIn, LCID lcid, void* pOut,\n                                VARTYPE vt, DWORD dwFlags)\n{\n  static DISPPARAMS16 emptyParams = { NULL, NULL, 0, 0 };\n  VARIANTARG16 srcVar, dstVar;\n  HRESULT hRet;\n\n  if (!pdispIn)\n    return DISP_E_BADVARTYPE;\n\n  /* Get the default 'value' property from the IDispatch */\n  VariantInit16(&srcVar);\n  hRet = IDispatch16_Invoke(pdispIn, DISPID_VALUE, MapLS(&IID_NULL), lcid, DISPATCH_PROPERTYGET,\n                          MapLS(&emptyParams), MapLS(&srcVar), NULL, NULL);\n\n  if (SUCCEEDED(hRet))\n  {\n    /* Convert the property to the requested type */\n    VariantInit16(&dstVar);\n    hRet = VariantChangeTypeEx16(&dstVar, &srcVar, lcid, dwFlags, vt);\n    VariantClear16(&srcVar);\n\n    if (SUCCEEDED(hRet))\n      VARIANT_CopyData(&dstVar, vt, pOut);\n  }\n  else\n    hRet = DISP_E_TYPEMISMATCH;\n  return hRet;\n}\n\n/* Inline return type */\n#define RETTYP static inline HRESULT\n\n\n/* Simple compiler cast from one type to another */\n#define SIMPLE(dest, src, func) RETTYP _##func(src in, dest* out) { \\\n  *out = in; return S_OK; }\n\n/* Compiler cast where input cannot be negative */\n#define NEGTST(dest, src, func) RETTYP _##func(src in, dest* out) { \\\n  if (in < 0) return DISP_E_OVERFLOW; *out = in; return S_OK; }\n\n/* Compiler cast where input cannot be > some number */\n#define POSTST(dest, src, func, tst) RETTYP _##func(src in, dest* out) { \\\n  if (in > (dest)tst) return DISP_E_OVERFLOW; *out = in; return S_OK; }\n\n/* Compiler cast where input cannot be < some number or >= some other number */\n#define BOTHTST(dest, src, func, lo, hi) RETTYP _##func(src in, dest* out) { \\\n  if (in < (dest)lo || in > hi) return DISP_E_OVERFLOW; *out = in; return S_OK; }\n\n/* I1 */\nPOSTST(signed char, BYTE, VarI1FromUI1, I1_MAX)\nBOTHTST(signed char, SHORT, VarI1FromI2, I1_MIN, I1_MAX)\nBOTHTST(signed char, LONG, VarI1FromI4, I1_MIN, I1_MAX)\nSIMPLE(signed char, VARIANT_BOOL, VarI1FromBool)\nPOSTST(signed char, USHORT, VarI1FromUI2, I1_MAX)\nPOSTST(signed char, ULONG, VarI1FromUI4, I1_MAX)\nBOTHTST(signed char, LONG64, VarI1FromI8, I1_MIN, I1_MAX)\nPOSTST(signed char, ULONG64, VarI1FromUI8, I1_MAX)\n\n/* UI1 */\nBOTHTST(BYTE, SHORT, VarUI1FromI2, UI1_MIN, UI1_MAX)\nSIMPLE(BYTE, VARIANT_BOOL, VarUI1FromBool)\nNEGTST(BYTE, signed char, VarUI1FromI1)\nPOSTST(BYTE, USHORT, VarUI1FromUI2, UI1_MAX)\nBOTHTST(BYTE, LONG, VarUI1FromI4, UI1_MIN, UI1_MAX)\nPOSTST(BYTE, ULONG, VarUI1FromUI4, UI1_MAX)\nBOTHTST(BYTE, LONG64, VarUI1FromI8, UI1_MIN, UI1_MAX)\nPOSTST(BYTE, ULONG64, VarUI1FromUI8, UI1_MAX)\n\n/* I2 */\nSIMPLE(SHORT, BYTE, VarI2FromUI1)\nBOTHTST(SHORT, LONG, VarI2FromI4, I2_MIN, I2_MAX)\nSIMPLE(SHORT, VARIANT_BOOL, VarI2FromBool)\nSIMPLE(SHORT, signed char, VarI2FromI1)\nPOSTST(SHORT, USHORT, VarI2FromUI2, I2_MAX)\nPOSTST(SHORT, ULONG, VarI2FromUI4, I2_MAX)\nBOTHTST(SHORT, LONG64, VarI2FromI8, I2_MIN, I2_MAX)\nPOSTST(SHORT, ULONG64, VarI2FromUI8, I2_MAX)\n\n/* UI2 */\nSIMPLE(USHORT, BYTE, VarUI2FromUI1)\nNEGTST(USHORT, SHORT, VarUI2FromI2)\nBOTHTST(USHORT, LONG, VarUI2FromI4, UI2_MIN, UI2_MAX)\nSIMPLE(USHORT, VARIANT_BOOL, VarUI2FromBool)\nNEGTST(USHORT, signed char, VarUI2FromI1)\nPOSTST(USHORT, ULONG, VarUI2FromUI4, UI2_MAX)\nBOTHTST(USHORT, LONG64, VarUI2FromI8, UI2_MIN, UI2_MAX)\nPOSTST(USHORT, ULONG64, VarUI2FromUI8, UI2_MAX)\n\n/* I4 */\nSIMPLE(LONG, BYTE, VarI4FromUI1)\nSIMPLE(LONG, SHORT, VarI4FromI2)\nSIMPLE(LONG, VARIANT_BOOL, VarI4FromBool)\nSIMPLE(LONG, signed char, VarI4FromI1)\nSIMPLE(LONG, USHORT, VarI4FromUI2)\nPOSTST(LONG, ULONG, VarI4FromUI4, I4_MAX)\nBOTHTST(LONG, LONG64, VarI4FromI8, I4_MIN, I4_MAX)\nPOSTST(LONG, ULONG64, VarI4FromUI8, I4_MAX)\n\n/* UI4 */\nSIMPLE(ULONG, BYTE, VarUI4FromUI1)\nNEGTST(ULONG, SHORT, VarUI4FromI2)\nNEGTST(ULONG, LONG, VarUI4FromI4)\nSIMPLE(ULONG, VARIANT_BOOL, VarUI4FromBool)\nNEGTST(ULONG, signed char, VarUI4FromI1)\nSIMPLE(ULONG, USHORT, VarUI4FromUI2)\nBOTHTST(ULONG, LONG64, VarUI4FromI8, UI4_MIN, UI4_MAX)\nPOSTST(ULONG, ULONG64, VarUI4FromUI8, UI4_MAX)\n\n/* I8 */\nSIMPLE(LONG64, BYTE, VarI8FromUI1)\nSIMPLE(LONG64, SHORT, VarI8FromI2)\nSIMPLE(LONG64, signed char, VarI8FromI1)\nSIMPLE(LONG64, USHORT, VarI8FromUI2)\nSIMPLE(LONG64, ULONG, VarI8FromUI4)\nPOSTST(LONG64, ULONG64, VarI8FromUI8, I8_MAX)\n\n/* UI8 */\nSIMPLE(ULONG64, BYTE, VarUI8FromUI1)\nNEGTST(ULONG64, SHORT, VarUI8FromI2)\nNEGTST(ULONG64, signed char, VarUI8FromI1)\nSIMPLE(ULONG64, USHORT, VarUI8FromUI2)\nSIMPLE(ULONG64, ULONG, VarUI8FromUI4)\nNEGTST(ULONG64, LONG64, VarUI8FromI8)\n\n/* R4 (float) */\nSIMPLE(float, BYTE, VarR4FromUI1)\nSIMPLE(float, SHORT, VarR4FromI2)\nSIMPLE(float, signed char, VarR4FromI1)\nSIMPLE(float, USHORT, VarR4FromUI2)\nSIMPLE(float, LONG, VarR4FromI4)\nSIMPLE(float, ULONG, VarR4FromUI4)\nSIMPLE(float, LONG64, VarR4FromI8)\nSIMPLE(float, ULONG64, VarR4FromUI8)\n\n/* R8 (double) */\nSIMPLE(double, BYTE, VarR8FromUI1)\nSIMPLE(double, SHORT, VarR8FromI2)\nSIMPLE(double, float, VarR8FromR4)\nRETTYP _VarR8FromCy(CY i, double* o) { *o = (double)i.int64 / CY_MULTIPLIER_F; return S_OK; }\nSIMPLE(double, DATE, VarR8FromDate)\nSIMPLE(double, signed char, VarR8FromI1)\nSIMPLE(double, USHORT, VarR8FromUI2)\nSIMPLE(double, LONG, VarR8FromI4)\nSIMPLE(double, ULONG, VarR8FromUI4)\nSIMPLE(double, LONG64, VarR8FromI8)\nSIMPLE(double, ULONG64, VarR8FromUI8)\n\n\n/* I1\n */\n\n/************************************************************************\n * VarI1FromUI1 (OLEAUT32.244)\n *\n * Convert a VT_UI1 to a VT_I1.\n *\n * PARAMS\n *  bIn     [I] Source\n *  pcOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI1FromUI116(BYTE bIn, signed char* pcOut)\n{\n  return _VarI1FromUI1(bIn, pcOut);\n}\n\n/************************************************************************\n * VarI1FromI2 (OLEAUT32.245)\n *\n * Convert a VT_I2 to a VT_I1.\n *\n * PARAMS\n *  sIn     [I] Source\n *  pcOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI1FromI216(SHORT sIn, signed char* pcOut)\n{\n  return _VarI1FromI2(sIn, pcOut);\n}\n\n/************************************************************************\n * VarI1FromI4 (OLEAUT32.246)\n *\n * Convert a VT_I4 to a VT_I1.\n *\n * PARAMS\n *  iIn     [I] Source\n *  pcOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI1FromI416(LONG iIn, signed char* pcOut)\n{\n  return _VarI1FromI4(iIn, pcOut);\n}\n\n/************************************************************************\n * VarI1FromR4 (OLEAUT32.247)\n *\n * Convert a VT_R4 to a VT_I1.\n *\n * PARAMS\n *  fltIn   [I] Source\n *  pcOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI1FromR416(FLOAT fltIn, signed char* pcOut)\n{\n  return VarI1FromR8(fltIn, pcOut);\n}\n\n/************************************************************************\n * VarI1FromR8 (OLEAUT32.248)\n *\n * Convert a VT_R8 to a VT_I1.\n *\n * PARAMS\n *  dblIn   [I] Source\n *  pcOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *\n * NOTES\n *  See VarI8FromR8() for details concerning rounding.\n */\nHRESULT WINAPI VarI1FromR816_conv(DWORD dblIn1, DWORD dblIn2, signed char* pcOut)\n{\n  UINT64 dbl = (UINT64)dblIn1 << 32 | dblIn2;\n  return VarI1FromR816(*(double *)&dbl, pcOut);\n}\n\nHRESULT WINAPI VarI1FromR816(double dblIn, signed char* pcOut)\n{\n  if (dblIn < I1_MIN - 0.5 || dblIn >= I1_MAX + 0.5)\n    return DISP_E_OVERFLOW;\n  VARIANT_DutchRound(CHAR, dblIn, *pcOut);\n  return S_OK;\n}\n\n/************************************************************************\n * VarI1FromDate (OLEAUT32.249)\n *\n * Convert a VT_DATE to a VT_I1.\n *\n * PARAMS\n *  dateIn  [I] Source\n *  pcOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI1FromDate16(DATE dateIn, signed char* pcOut)\n{\n  return VarI1FromR8(dateIn, pcOut);\n}\n\n/************************************************************************\n * VarI1FromCy (OLEAUT32.250)\n *\n * Convert a VT_CY to a VT_I1.\n *\n * PARAMS\n *  cyIn    [I] Source\n *  pcOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI1FromCy16(CY cyIn, signed char* pcOut)\n{\n  LONG i = I1_MAX + 1;\n\n  VarI4FromCy(cyIn, &i);\n  return _VarI1FromI4(i, pcOut);\n}\n\n/************************************************************************\n * VarI1FromStr (OLEAUT32.251)\n *\n * Convert a VT_BSTR to a VT_I1.\n *\n * PARAMS\n *  strIn   [I] Source\n *  lcid    [I] LCID for the conversion\n *  dwFlags [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pcOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarI1FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, signed char* pcOut)\n{\n  return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pcOut, VT_I1);\n}\n\n/************************************************************************\n * VarI1FromDisp (OLEAUT32.252)\n *\n * Convert a VT_DISPATCH to a VT_I1.\n *\n * PARAMS\n *  pdispIn  [I] Source\n *  lcid     [I] LCID for conversion\n *  pcOut    [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarI1FromDisp16(SEGIDispatch pdispIn, LCID lcid, signed char* pcOut)\n{\n  return VARIANT_FromDisp(pdispIn, lcid, pcOut, VT_I1, 0);\n}\n\n/************************************************************************\n * VarI1FromBool (OLEAUT32.253)\n *\n * Convert a VT_BOOL to a VT_I1.\n *\n * PARAMS\n *  boolIn  [I] Source\n *  pcOut   [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarI1FromBool16(VARIANT_BOOL boolIn, signed char* pcOut)\n{\n  return _VarI1FromBool(boolIn, pcOut);\n}\n\n/************************************************************************\n * VarI1FromUI2 (OLEAUT32.254)\n *\n * Convert a VT_UI2 to a VT_I1.\n *\n * PARAMS\n *  usIn    [I] Source\n *  pcOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI1FromUI216(USHORT usIn, signed char* pcOut)\n{\n  return _VarI1FromUI2(usIn, pcOut);\n}\n\n/************************************************************************\n * VarI1FromUI4 (OLEAUT32.255)\n *\n * Convert a VT_UI4 to a VT_I1.\n *\n * PARAMS\n *  ulIn    [I] Source\n *  pcOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarI1FromUI416(ULONG ulIn, signed char* pcOut)\n{\n  return _VarI1FromUI4(ulIn, pcOut);\n}\n\n/************************************************************************\n * VarI1FromDec (OLEAUT32.256)\n *\n * Convert a VT_DECIMAL to a VT_I1.\n *\n * PARAMS\n *  pDecIn  [I] Source\n *  pcOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI1FromDec16(DECIMAL *pdecIn, signed char* pcOut)\n{\n  LONG64 i64;\n  HRESULT hRet;\n\n  hRet = VarI8FromDec(pdecIn, &i64);\n\n  if (SUCCEEDED(hRet))\n    hRet = _VarI1FromI8(i64, pcOut);\n  return hRet;\n}\n\n/************************************************************************\n * VarI1FromI8 (OLEAUT32.376)\n *\n * Convert a VT_I8 to a VT_I1.\n *\n * PARAMS\n *  llIn  [I] Source\n *  pcOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI1FromI816(LONG64 llIn, signed char* pcOut)\n{\n  return _VarI1FromI8(llIn, pcOut);\n}\n\n/************************************************************************\n * VarI1FromUI8 (OLEAUT32.377)\n *\n * Convert a VT_UI8 to a VT_I1.\n *\n * PARAMS\n *  ullIn   [I] Source\n *  pcOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI1FromUI816(ULONG64 ullIn, signed char* pcOut)\n{\n  return _VarI1FromUI8(ullIn, pcOut);\n}\n\n/* UI1\n */\n\n/************************************************************************\n * VarUI1FromI2 (OLEAUT32.130)\n *\n * Convert a VT_I2 to a VT_UI1.\n *\n * PARAMS\n *  sIn   [I] Source\n *  pbOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI1FromI216(SHORT sIn, BYTE* pbOut)\n{\n  return _VarUI1FromI2(sIn, pbOut);\n}\n\n/************************************************************************\n * VarUI1FromI4 (OLEAUT32.131)\n *\n * Convert a VT_I4 to a VT_UI1.\n *\n * PARAMS\n *  iIn   [I] Source\n *  pbOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI1FromI416(LONG iIn, BYTE* pbOut)\n{\n  return _VarUI1FromI4(iIn, pbOut);\n}\n\n/************************************************************************\n * VarUI1FromR4 (OLEAUT32.132)\n *\n * Convert a VT_R4 to a VT_UI1.\n *\n * PARAMS\n *  fltIn [I] Source\n *  pbOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarUI1FromR416(FLOAT fltIn, BYTE* pbOut)\n{\n  return VarUI1FromR8(fltIn, pbOut);\n}\n\n/************************************************************************\n * VarUI1FromR8 (OLEAUT32.133)\n *\n * Convert a VT_R8 to a VT_UI1.\n *\n * PARAMS\n *  dblIn [I] Source\n *  pbOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *\n * NOTES\n *  See VarI8FromR8() for details concerning rounding.\n */\nHRESULT WINAPI VarUI1FromR816_conv(DWORD dblIn1, DWORD dblIn2, BYTE* pbOut)\n{\n  UINT64 dbl = (UINT64)dblIn1 << 32 | dblIn2;\n  return VarUI1FromR816(*(double *)&dbl, pbOut);\n}\n\nHRESULT WINAPI VarUI1FromR816(double dblIn, BYTE* pbOut)\n{\n  fix_double(&dblIn);\n  if (dblIn < -0.5 || dblIn >= UI1_MAX + 0.5)\n    return DISP_E_OVERFLOW;\n  VARIANT_DutchRound(BYTE, dblIn, *pbOut);\n  return S_OK;\n}\n\n/************************************************************************\n * VarUI1FromCy (OLEAUT32.134)\n *\n * Convert a VT_CY to a VT_UI1.\n *\n * PARAMS\n *  cyIn     [I] Source\n *  pbOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *\n * NOTES\n *  Negative values >= -5000 will be converted to 0.\n */\nHRESULT WINAPI VarUI1FromCy16_conv(DWORD dblIn1, DWORD dblIn2, BYTE* pbOut)\n{\n  UINT64 dbl = (UINT64)dblIn1 << 32 | dblIn2;\n  return VarUI1FromCy16(*(CY *)&dbl, pbOut);\n}\n\nHRESULT WINAPI VarUI1FromCy16(CY cyIn, BYTE* pbOut)\n{\n  fix_double(&cyIn);\n  return VarUI1FromCy(cyIn, pbOut);\n}\n\n/************************************************************************\n * VarUI1FromDate (OLEAUT32.135)\n *\n * Convert a VT_DATE to a VT_UI1.\n *\n * PARAMS\n *  dateIn [I] Source\n *  pbOut  [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI1FromDate16_conv(DWORD dblIn1, DWORD dblIn2, BYTE* pbOut)\n{\n  return VarUI1FromR816_conv(dblIn1, dblIn2, pbOut);\n}\n\nHRESULT WINAPI VarUI1FromDate16(DATE dateIn, BYTE* pbOut)\n{\n  return VarUI1FromR816(dateIn, pbOut);\n}\n\n/************************************************************************\n * VarUI1FromStr (OLEAUT32.136)\n *\n * Convert a VT_BSTR to a VT_UI1.\n *\n * PARAMS\n *  strIn   [I] Source\n *  lcid    [I] LCID for the conversion\n *  dwFlags [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pbOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarUI1FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, BYTE* pbOut)\n{\n  return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pbOut, VT_UI1);\n}\n\n/************************************************************************\n * VarUI1FromDisp (OLEAUT32.137)\n *\n * Convert a VT_DISPATCH to a VT_UI1.\n *\n * PARAMS\n *  pdispIn [I] Source\n *  lcid    [I] LCID for conversion\n *  pbOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarUI1FromDisp16(SEGIDispatch pdispIn, LCID lcid, BYTE* pbOut)\n{\n  return VARIANT_FromDisp(pdispIn, lcid, pbOut, VT_UI1, 0);\n}\n\n/************************************************************************\n * VarUI1FromBool (OLEAUT32.138)\n *\n * Convert a VT_BOOL to a VT_UI1.\n *\n * PARAMS\n *  boolIn [I] Source\n *  pbOut  [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarUI1FromBool16(VARIANT_BOOL boolIn, BYTE* pbOut)\n{\n  return _VarUI1FromBool(boolIn, pbOut);\n}\n\n/************************************************************************\n * VarUI1FromI1 (OLEAUT32.237)\n *\n * Convert a VT_I1 to a VT_UI1.\n *\n * PARAMS\n *  cIn   [I] Source\n *  pbOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI1FromI116(signed char cIn, BYTE* pbOut)\n{\n  return _VarUI1FromI1(cIn, pbOut);\n}\n\n/************************************************************************\n * VarUI1FromUI2 (OLEAUT32.238)\n *\n * Convert a VT_UI2 to a VT_UI1.\n *\n * PARAMS\n *  usIn  [I] Source\n *  pbOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI1FromUI216(USHORT usIn, BYTE* pbOut)\n{\n  return _VarUI1FromUI2(usIn, pbOut);\n}\n\n/************************************************************************\n * VarUI1FromUI4 (OLEAUT32.239)\n *\n * Convert a VT_UI4 to a VT_UI1.\n *\n * PARAMS\n *  ulIn  [I] Source\n *  pbOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI1FromUI416(ULONG ulIn, BYTE* pbOut)\n{\n  return _VarUI1FromUI4(ulIn, pbOut);\n}\n\n/************************************************************************\n * VarUI1FromDec (OLEAUT32.240)\n *\n * Convert a VT_DECIMAL to a VT_UI1.\n *\n * PARAMS\n *  pDecIn [I] Source\n *  pbOut  [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI1FromDec16(DECIMAL *pdecIn, BYTE* pbOut)\n{\n  LONG64 i64;\n  HRESULT hRet;\n\n  hRet = VarI8FromDec(pdecIn, &i64);\n\n  if (SUCCEEDED(hRet))\n    hRet = _VarUI1FromI8(i64, pbOut);\n  return hRet;\n}\n\n/************************************************************************\n * VarUI1FromI8 (OLEAUT32.372)\n *\n * Convert a VT_I8 to a VT_UI1.\n *\n * PARAMS\n *  llIn  [I] Source\n *  pbOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI1FromI816(LONG64 llIn, BYTE* pbOut)\n{\n  return _VarUI1FromI8(llIn, pbOut);\n}\n\n/************************************************************************\n * VarUI1FromUI8 (OLEAUT32.373)\n *\n * Convert a VT_UI8 to a VT_UI1.\n *\n * PARAMS\n *  ullIn   [I] Source\n *  pbOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI1FromUI816(ULONG64 ullIn, BYTE* pbOut)\n{\n  return _VarUI1FromUI8(ullIn, pbOut);\n}\n\n\n/* I2\n */\n\n/************************************************************************\n * VarI2FromUI1 (OLEAUT32.48)\n *\n * Convert a VT_UI2 to a VT_I2.\n *\n * PARAMS\n *  bIn     [I] Source\n *  psOut   [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarI2FromUI116(BYTE bIn, SHORT* psOut)\n{\n  return _VarI2FromUI1(bIn, psOut);\n}\n\n/************************************************************************\n * VarI2FromI4 (OLEAUT32.49)\n *\n * Convert a VT_I4 to a VT_I2.\n *\n * PARAMS\n *  iIn     [I] Source\n *  psOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI2FromI416(LONG iIn, SHORT* psOut)\n{\n  return _VarI2FromI4(iIn, psOut);\n}\n\n/************************************************************************\n * VarI2FromR4 (OLEAUT32.50)\n *\n * Convert a VT_R4 to a VT_I2.\n *\n * PARAMS\n *  fltIn   [I] Source\n *  psOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI2FromR416(FLOAT fltIn, SHORT* psOut)\n{\n  return VarI2FromR4(fltIn, psOut);\n}\n\n/************************************************************************\n * VarI2FromR8 (OLEAUT32.51)\n *\n * Convert a VT_R8 to a VT_I2.\n *\n * PARAMS\n *  dblIn   [I] Source\n *  psOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n *\n * NOTES\n *  See VarI8FromR8() for details concerning rounding.\n */\nHRESULT WINAPI VarI2FromR816_conv(DWORD dblIn1, DWORD dblIn2, signed char* pcOut)\n{\n  UINT64 dbl = (UINT64)dblIn1 << 32 | dblIn2;\n  return VarI2FromR816(*(double *)&dbl, pcOut);\n}\n\nHRESULT WINAPI VarI2FromR816(double dblIn, SHORT* psOut)\n{\n  fix_double(&dblIn);\n  if (dblIn < I2_MIN - 0.5 || dblIn >= I2_MAX + 0.5)\n    return DISP_E_OVERFLOW;\n  VARIANT_DutchRound(SHORT, dblIn, *psOut);\n  return S_OK;\n}\n\n/************************************************************************\n * VarI2FromCy (OLEAUT32.52)\n *\n * Convert a VT_CY to a VT_I2.\n *\n * PARAMS\n *  cyIn    [I] Source\n *  psOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI2FromCy16_conv(DWORD dblIn1, DWORD dblIn2, signed char* pcOut)\n{\n  UINT64 dbl = (UINT64)dblIn1 << 32 | dblIn2;\n  return VarI2FromCy16(*(CY *)&dbl, pcOut);\n}\n\nHRESULT WINAPI VarI2FromCy16(CY cyIn, SHORT* psOut)\n{\n  fix_double(&cyIn);\n  return VarI2FromCy(cyIn, psOut);\n}\n\n/************************************************************************\n * VarI2FromDate (OLEAUT32.53)\n *\n * Convert a VT_DATE to a VT_I2.\n *\n * PARAMS\n *  dateIn  [I] Source\n *  psOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI2FromDate16_conv(DWORD dblIn1, DWORD dblIn2, signed char* pcOut)\n{\n  UINT64 dbl = (UINT64)dblIn1 << 32 | dblIn2;\n  return VarI2FromDate16(*(DATE *)&dbl, pcOut);\n}\n\nHRESULT WINAPI VarI2FromDate16(DATE dateIn, SHORT* psOut)\n{\n  fix_double(&dateIn);\n  return VarI2FromDate(dateIn, psOut);\n}\n\n/************************************************************************\n * VarI2FromStr (OLEAUT32.54)\n *\n * Convert a VT_BSTR to a VT_I2.\n *\n * PARAMS\n *  strIn   [I] Source\n *  lcid    [I] LCID for the conversion\n *  dwFlags [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  psOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if any parameter is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarI2FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, SHORT* psOut)\n{\n  return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, psOut, VT_I2);\n}\n\n/************************************************************************\n * VarI2FromDisp (OLEAUT32.55)\n *\n * Convert a VT_DISPATCH to a VT_I2.\n *\n * PARAMS\n *  pdispIn  [I] Source\n *  lcid     [I] LCID for conversion\n *  psOut    [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if pdispIn is invalid,\n *           DISP_E_OVERFLOW, if the value will not fit in the destination,\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarI2FromDisp16(SEGIDispatch pdispIn, LCID lcid, SHORT* psOut)\n{\n  return VARIANT_FromDisp(pdispIn, lcid, psOut, VT_I2, 0);\n}\n\n/************************************************************************\n * VarI2FromBool (OLEAUT32.56)\n *\n * Convert a VT_BOOL to a VT_I2.\n *\n * PARAMS\n *  boolIn  [I] Source\n *  psOut   [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarI2FromBool16(VARIANT_BOOL boolIn, SHORT* psOut)\n{\n  return _VarI2FromBool(boolIn, psOut);\n}\n\n/************************************************************************\n * VarI2FromI1 (OLEAUT32.205)\n *\n * Convert a VT_I1 to a VT_I2.\n *\n * PARAMS\n *  cIn     [I] Source\n *  psOut   [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarI2FromI116(signed char cIn, SHORT* psOut)\n{\n  return _VarI2FromI1(cIn, psOut);\n}\n\n/************************************************************************\n * VarI2FromUI2 (OLEAUT32.206)\n *\n * Convert a VT_UI2 to a VT_I2.\n *\n * PARAMS\n *  usIn    [I] Source\n *  psOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI2FromUI216(USHORT usIn, SHORT* psOut)\n{\n  return _VarI2FromUI2(usIn, psOut);\n}\n\n/************************************************************************\n * VarI2FromUI4 (OLEAUT32.207)\n *\n * Convert a VT_UI4 to a VT_I2.\n *\n * PARAMS\n *  ulIn    [I] Source\n *  psOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI2FromUI416(ULONG ulIn, SHORT* psOut)\n{\n  return _VarI2FromUI4(ulIn, psOut);\n}\n\n/************************************************************************\n * VarI2FromDec (OLEAUT32.208)\n *\n * Convert a VT_DECIMAL to a VT_I2.\n *\n * PARAMS\n *  pDecIn  [I] Source\n *  psOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI2FromDec16(DECIMAL *pdecIn, SHORT* psOut)\n{\n  LONG64 i64;\n  HRESULT hRet;\n\n  hRet = VarI8FromDec(pdecIn, &i64);\n\n  if (SUCCEEDED(hRet))\n    hRet = _VarI2FromI8(i64, psOut);\n  return hRet;\n}\n\n/************************************************************************\n * VarI2FromI8 (OLEAUT32.346)\n *\n * Convert a VT_I8 to a VT_I2.\n *\n * PARAMS\n *  llIn  [I] Source\n *  psOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI2FromI816(LONG64 llIn, SHORT* psOut)\n{\n  return _VarI2FromI8(llIn, psOut);\n}\n\n/************************************************************************\n * VarI2FromUI8 (OLEAUT32.347)\n *\n * Convert a VT_UI8 to a VT_I2.\n *\n * PARAMS\n *  ullIn [I] Source\n *  psOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI2FromUI816(ULONG64 ullIn, SHORT* psOut)\n{\n  return _VarI2FromUI8(ullIn, psOut);\n}\n\n/* UI2\n */\n\n/************************************************************************\n * VarUI2FromUI1 (OLEAUT32.257)\n *\n * Convert a VT_UI1 to a VT_UI2.\n *\n * PARAMS\n *  bIn    [I] Source\n *  pusOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarUI2FromUI116(BYTE bIn, USHORT* pusOut)\n{\n  return _VarUI2FromUI1(bIn, pusOut);\n}\n\n/************************************************************************\n * VarUI2FromI2 (OLEAUT32.258)\n *\n * Convert a VT_I2 to a VT_UI2.\n *\n * PARAMS\n *  sIn    [I] Source\n *  pusOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI2FromI216(SHORT sIn, USHORT* pusOut)\n{\n  return _VarUI2FromI2(sIn, pusOut);\n}\n\n/************************************************************************\n * VarUI2FromI4 (OLEAUT32.259)\n *\n * Convert a VT_I4 to a VT_UI2.\n *\n * PARAMS\n *  iIn    [I] Source\n *  pusOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI2FromI416(LONG iIn, USHORT* pusOut)\n{\n  return _VarUI2FromI4(iIn, pusOut);\n}\n\n/************************************************************************\n * VarUI2FromR4 (OLEAUT32.260)\n *\n * Convert a VT_R4 to a VT_UI2.\n *\n * PARAMS\n *  fltIn  [I] Source\n *  pusOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI2FromR416(FLOAT fltIn, USHORT* pusOut)\n{\n  return VarUI2FromR8(fltIn, pusOut);\n}\n\n/************************************************************************\n * VarUI2FromR8 (OLEAUT32.261)\n *\n * Convert a VT_R8 to a VT_UI2.\n *\n * PARAMS\n *  dblIn  [I] Source\n *  pusOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n *\n * NOTES\n *  See VarI8FromR8() for details concerning rounding.\n */\nHRESULT WINAPI VarUI2FromR816(double dblIn, USHORT* pusOut)\n{\n  if (dblIn < -0.5 || dblIn >= UI2_MAX + 0.5)\n    return DISP_E_OVERFLOW;\n  VARIANT_DutchRound(USHORT, dblIn, *pusOut);\n  return S_OK;\n}\n\n/************************************************************************\n * VarUI2FromDate (OLEAUT32.262)\n *\n * Convert a VT_DATE to a VT_UI2.\n *\n * PARAMS\n *  dateIn [I] Source\n *  pusOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI2FromDate16(DATE dateIn, USHORT* pusOut)\n{\n  return VarUI2FromR8(dateIn, pusOut);\n}\n\n/************************************************************************\n * VarUI2FromCy (OLEAUT32.263)\n *\n * Convert a VT_CY to a VT_UI2.\n *\n * PARAMS\n *  cyIn   [I] Source\n *  pusOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n *\n * NOTES\n *  Negative values >= -5000 will be converted to 0.\n */\nHRESULT WINAPI VarUI2FromCy16(CY cyIn, USHORT* pusOut)\n{\n  ULONG i = UI2_MAX + 1;\n\n  VarUI4FromCy(cyIn, &i);\n  return _VarUI2FromUI4(i, pusOut);\n}\n\n/************************************************************************\n * VarUI2FromStr (OLEAUT32.264)\n *\n * Convert a VT_BSTR to a VT_UI2.\n *\n * PARAMS\n *  strIn   [I] Source\n *  lcid    [I] LCID for the conversion\n *  dwFlags [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pusOut  [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarUI2FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, USHORT* pusOut)\n{\n  return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pusOut, VT_UI2);\n}\n\n/************************************************************************\n * VarUI2FromDisp (OLEAUT32.265)\n *\n * Convert a VT_DISPATCH to a VT_UI2.\n *\n * PARAMS\n *  pdispIn  [I] Source\n *  lcid     [I] LCID for conversion\n *  pusOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarUI2FromDisp16(SEGIDispatch pdispIn, LCID lcid, USHORT* pusOut)\n{\n  return VARIANT_FromDisp(pdispIn, lcid, pusOut, VT_UI2, 0);\n}\n\n/************************************************************************\n * VarUI2FromBool (OLEAUT32.266)\n *\n * Convert a VT_BOOL to a VT_UI2.\n *\n * PARAMS\n *  boolIn  [I] Source\n *  pusOut  [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarUI2FromBool16(VARIANT_BOOL boolIn, USHORT* pusOut)\n{\n  return _VarUI2FromBool(boolIn, pusOut);\n}\n\n/************************************************************************\n * VarUI2FromI1 (OLEAUT32.267)\n *\n * Convert a VT_I1 to a VT_UI2.\n *\n * PARAMS\n *  cIn    [I] Source\n *  pusOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI2FromI116(signed char cIn, USHORT* pusOut)\n{\n  return _VarUI2FromI1(cIn, pusOut);\n}\n\n/************************************************************************\n * VarUI2FromUI4 (OLEAUT32.268)\n *\n * Convert a VT_UI4 to a VT_UI2.\n *\n * PARAMS\n *  ulIn   [I] Source\n *  pusOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI2FromUI416(ULONG ulIn, USHORT* pusOut)\n{\n  return _VarUI2FromUI4(ulIn, pusOut);\n}\n\n/************************************************************************\n * VarUI2FromDec (OLEAUT32.269)\n *\n * Convert a VT_DECIMAL to a VT_UI2.\n *\n * PARAMS\n *  pDecIn  [I] Source\n *  pusOut  [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI2FromDec16(DECIMAL *pdecIn, USHORT* pusOut)\n{\n  LONG64 i64;\n  HRESULT hRet;\n\n  hRet = VarI8FromDec(pdecIn, &i64);\n\n  if (SUCCEEDED(hRet))\n    hRet = _VarUI2FromI8(i64, pusOut);\n  return hRet;\n}\n\n/************************************************************************\n * VarUI2FromI8 (OLEAUT32.378)\n *\n * Convert a VT_I8 to a VT_UI2.\n *\n * PARAMS\n *  llIn   [I] Source\n *  pusOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI2FromI816(LONG64 llIn, USHORT* pusOut)\n{\n  return _VarUI2FromI8(llIn, pusOut);\n}\n\n/************************************************************************\n * VarUI2FromUI8 (OLEAUT32.379)\n *\n * Convert a VT_UI8 to a VT_UI2.\n *\n * PARAMS\n *  ullIn    [I] Source\n *  pusOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI2FromUI816(ULONG64 ullIn, USHORT* pusOut)\n{\n  return _VarUI2FromUI8(ullIn, pusOut);\n}\n\n/* I4\n */\n\n/************************************************************************\n * VarI4FromUI1 (OLEAUT32.58)\n *\n * Convert a VT_UI1 to a VT_I4.\n *\n * PARAMS\n *  bIn     [I] Source\n *  piOut   [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarI4FromUI116(BYTE bIn, LONG *piOut)\n{\n  return _VarI4FromUI1(bIn, piOut);\n}\n\n/************************************************************************\n * VarI4FromI2 (OLEAUT32.59)\n *\n * Convert a VT_I2 to a VT_I4.\n *\n * PARAMS\n *  sIn     [I] Source\n *  piOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI4FromI216(SHORT sIn, LONG *piOut)\n{\n  return _VarI4FromI2(sIn, piOut);\n}\n\n/************************************************************************\n * VarI4FromR4 (OLEAUT32.60)\n *\n * Convert a VT_R4 to a VT_I4.\n *\n * PARAMS\n *  fltIn   [I] Source\n *  piOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI4FromR416(FLOAT fltIn, LONG *piOut)\n{\n  return VarI4FromR8(fltIn, piOut);\n}\n\n/************************************************************************\n * VarI4FromR8 (OLEAUT32.61)\n *\n * Convert a VT_R8 to a VT_I4.\n *\n * PARAMS\n *  dblIn   [I] Source\n *  piOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n *\n * NOTES\n *  See VarI8FromR8() for details concerning rounding.\n */\nHRESULT WINAPI VarI4FromR816(double dblIn, LONG *piOut)\n{\n  if (dblIn < I4_MIN - 0.5 || dblIn >= I4_MAX + 0.5)\n    return DISP_E_OVERFLOW;\n  VARIANT_DutchRound(LONG, dblIn, *piOut);\n  return S_OK;\n}\n\n/************************************************************************\n * VarI4FromCy (OLEAUT32.62)\n *\n * Convert a VT_CY to a VT_I4.\n *\n * PARAMS\n *  cyIn    [I] Source\n *  piOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI4FromCy16(CY cyIn, LONG *piOut)\n{\n  double d = cyIn.int64 / CY_MULTIPLIER_F;\n  return VarI4FromR8(d, piOut);\n}\n\n/************************************************************************\n * VarI4FromDate (OLEAUT32.63)\n *\n * Convert a VT_DATE to a VT_I4.\n *\n * PARAMS\n *  dateIn  [I] Source\n *  piOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI4FromDate16(DATE dateIn, LONG *piOut)\n{\n  return VarI4FromR8(dateIn, piOut);\n}\n\n/************************************************************************\n * VarI4FromStr (OLEAUT32.64)\n *\n * Convert a VT_BSTR to a VT_I4.\n *\n * PARAMS\n *  strIn   [I] Source\n *  lcid    [I] LCID for the conversion\n *  dwFlags [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  piOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if any parameter is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if strIn cannot be converted\n */\nHRESULT WINAPI VarI4FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, LONG *piOut)\n{\n  return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, piOut, VT_I4);\n}\n\n/************************************************************************\n * VarI4FromDisp (OLEAUT32.65)\n *\n * Convert a VT_DISPATCH to a VT_I4.\n *\n * PARAMS\n *  pdispIn  [I] Source\n *  lcid     [I] LCID for conversion\n *  piOut    [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarI4FromDisp16(SEGIDispatch pdispIn, LCID lcid, LONG *piOut)\n{\n  return VARIANT_FromDisp(pdispIn, lcid, piOut, VT_I4, 0);\n}\n\n/************************************************************************\n * VarI4FromBool (OLEAUT32.66)\n *\n * Convert a VT_BOOL to a VT_I4.\n *\n * PARAMS\n *  boolIn  [I] Source\n *  piOut   [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarI4FromBool16(VARIANT_BOOL boolIn, LONG *piOut)\n{\n  return _VarI4FromBool(boolIn, piOut);\n}\n\n/************************************************************************\n * VarI4FromI1 (OLEAUT32.209)\n *\n * Convert a VT_I1 to a VT_I4.\n *\n * PARAMS\n *  cIn     [I] Source\n *  piOut   [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarI4FromI116(signed char cIn, LONG *piOut)\n{\n  return _VarI4FromI1(cIn, piOut);\n}\n\n/************************************************************************\n * VarI4FromUI2 (OLEAUT32.210)\n *\n * Convert a VT_UI2 to a VT_I4.\n *\n * PARAMS\n *  usIn    [I] Source\n *  piOut   [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarI4FromUI216(USHORT usIn, LONG *piOut)\n{\n  return _VarI4FromUI2(usIn, piOut);\n}\n\n/************************************************************************\n * VarI4FromUI4 (OLEAUT32.211)\n *\n * Convert a VT_UI4 to a VT_I4.\n *\n * PARAMS\n *  ulIn    [I] Source\n *  piOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI4FromUI416(ULONG ulIn, LONG *piOut)\n{\n  return _VarI4FromUI4(ulIn, piOut);\n}\n\n/************************************************************************\n * VarI4FromDec (OLEAUT32.212)\n *\n * Convert a VT_DECIMAL to a VT_I4.\n *\n * PARAMS\n *  pDecIn  [I] Source\n *  piOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if pdecIn is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI4FromDec16(DECIMAL *pdecIn, LONG *piOut)\n{\n  LONG64 i64;\n  HRESULT hRet;\n\n  hRet = VarI8FromDec(pdecIn, &i64);\n\n  if (SUCCEEDED(hRet))\n    hRet = _VarI4FromI8(i64, piOut);\n  return hRet;\n}\n\n/************************************************************************\n * VarI4FromI8 (OLEAUT32.348)\n *\n * Convert a VT_I8 to a VT_I4.\n *\n * PARAMS\n *  llIn  [I] Source\n *  piOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI4FromI816(LONG64 llIn, LONG *piOut)\n{\n  return _VarI4FromI8(llIn, piOut);\n}\n\n/************************************************************************\n * VarI4FromUI8 (OLEAUT32.349)\n *\n * Convert a VT_UI8 to a VT_I4.\n *\n * PARAMS\n *  ullIn [I] Source\n *  piOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI4FromUI816(ULONG64 ullIn, LONG *piOut)\n{\n  return _VarI4FromUI8(ullIn, piOut);\n}\n\n/* UI4\n */\n\n/************************************************************************\n * VarUI4FromUI1 (OLEAUT32.270)\n *\n * Convert a VT_UI1 to a VT_UI4.\n *\n * PARAMS\n *  bIn    [I] Source\n *  pulOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarUI4FromUI116(BYTE bIn, ULONG *pulOut)\n{\n  return _VarUI4FromUI1(bIn, pulOut);\n}\n\n/************************************************************************\n * VarUI4FromI2 (OLEAUT32.271)\n *\n * Convert a VT_I2 to a VT_UI4.\n *\n * PARAMS\n *  sIn    [I] Source\n *  pulOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI4FromI216(SHORT sIn, ULONG *pulOut)\n{\n  return _VarUI4FromI2(sIn, pulOut);\n}\n\n/************************************************************************\n * VarUI4FromI4 (OLEAUT32.272)\n *\n * Convert a VT_I4 to a VT_UI4.\n *\n * PARAMS\n *  iIn    [I] Source\n *  pulOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI4FromI416(LONG iIn, ULONG *pulOut)\n{\n  return _VarUI4FromI4(iIn, pulOut);\n}\n\n/************************************************************************\n * VarUI4FromR4 (OLEAUT32.273)\n *\n * Convert a VT_R4 to a VT_UI4.\n *\n * PARAMS\n *  fltIn  [I] Source\n *  pulOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI4FromR416(FLOAT fltIn, ULONG *pulOut)\n{\n  return VarUI4FromR8(fltIn, pulOut);\n}\n\n/************************************************************************\n * VarUI4FromR8 (OLEAUT32.274)\n *\n * Convert a VT_R8 to a VT_UI4.\n *\n * PARAMS\n *  dblIn  [I] Source\n *  pulOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n *\n * NOTES\n *  See VarI8FromR8() for details concerning rounding.\n */\nHRESULT WINAPI VarUI4FromR816(double dblIn, ULONG *pulOut)\n{\n  fix_double(&dblIn);\n  if (dblIn < -0.5 || dblIn >= UI4_MAX + 0.5)\n    return DISP_E_OVERFLOW;\n  VARIANT_DutchRound(ULONG, dblIn, *pulOut);\n  return S_OK;\n}\n\n/************************************************************************\n * VarUI4FromDate (OLEAUT32.275)\n *\n * Convert a VT_DATE to a VT_UI4.\n *\n * PARAMS\n *  dateIn [I] Source\n *  pulOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI4FromDate16(DATE dateIn, ULONG *pulOut)\n{\n  return VarUI4FromR816(dateIn, pulOut);\n}\n\n/************************************************************************\n * VarUI4FromCy (OLEAUT32.276)\n *\n * Convert a VT_CY to a VT_UI4.\n *\n * PARAMS\n *  cyIn   [I] Source\n *  pulOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI4FromCy16(CY cyIn, ULONG *pulOut)\n{\n  double d = cyIn.int64 / CY_MULTIPLIER_F;\n  return VarUI4FromR816(d, pulOut);\n}\n\n/************************************************************************\n * VarUI4FromStr (OLEAUT32.277)\n *\n * Convert a VT_BSTR to a VT_UI4.\n *\n * PARAMS\n *  strIn   [I] Source\n *  lcid    [I] LCID for the conversion\n *  dwFlags [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pulOut  [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if any parameter is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if strIn cannot be converted\n */\nHRESULT WINAPI VarUI4FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, ULONG *pulOut)\n{\n  return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pulOut, VT_UI4);\n}\n\n/************************************************************************\n * VarUI4FromDisp (OLEAUT32.278)\n *\n * Convert a VT_DISPATCH to a VT_UI4.\n *\n * PARAMS\n *  pdispIn  [I] Source\n *  lcid     [I] LCID for conversion\n *  pulOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarUI4FromDisp16(SEGIDispatch pdispIn, LCID lcid, ULONG *pulOut)\n{\n  return VARIANT_FromDisp(pdispIn, lcid, pulOut, VT_UI4, 0);\n}\n\n/************************************************************************\n * VarUI4FromBool (OLEAUT32.279)\n *\n * Convert a VT_BOOL to a VT_UI4.\n *\n * PARAMS\n *  boolIn  [I] Source\n *  pulOut  [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarUI4FromBool16(VARIANT_BOOL boolIn, ULONG *pulOut)\n{\n  return _VarUI4FromBool(boolIn, pulOut);\n}\n\n/************************************************************************\n * VarUI4FromI1 (OLEAUT32.280)\n *\n * Convert a VT_I1 to a VT_UI4.\n *\n * PARAMS\n *  cIn    [I] Source\n *  pulOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI4FromI116(signed char cIn, ULONG *pulOut)\n{\n  return _VarUI4FromI1(cIn, pulOut);\n}\n\n/************************************************************************\n * VarUI4FromUI2 (OLEAUT32.281)\n *\n * Convert a VT_UI2 to a VT_UI4.\n *\n * PARAMS\n *  usIn   [I] Source\n *  pulOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarUI4FromUI216(USHORT usIn, ULONG *pulOut)\n{\n  return _VarUI4FromUI2(usIn, pulOut);\n}\n\n/************************************************************************\n * VarUI4FromDec (OLEAUT32.282)\n *\n * Convert a VT_DECIMAL to a VT_UI4.\n *\n * PARAMS\n *  pDecIn  [I] Source\n *  pulOut  [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if pdecIn is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI4FromDec16(DECIMAL *pdecIn, ULONG *pulOut)\n{\n  LONG64 i64;\n  HRESULT hRet;\n\n  hRet = VarI8FromDec(pdecIn, &i64);\n\n  if (SUCCEEDED(hRet))\n    hRet = _VarUI4FromI8(i64, pulOut);\n  return hRet;\n}\n\n/************************************************************************\n * VarUI4FromI8 (OLEAUT32.425)\n *\n * Convert a VT_I8 to a VT_UI4.\n *\n * PARAMS\n *  llIn   [I] Source\n *  pulOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI4FromI816(LONG64 llIn, ULONG *pulOut)\n{\n  return _VarUI4FromI8(llIn, pulOut);\n}\n\n/************************************************************************\n * VarUI4FromUI8 (OLEAUT32.426)\n *\n * Convert a VT_UI8 to a VT_UI4.\n *\n * PARAMS\n *  ullIn    [I] Source\n *  pulOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI4FromUI816(ULONG64 ullIn, ULONG *pulOut)\n{\n  return _VarUI4FromUI8(ullIn, pulOut);\n}\n\n/* I8\n */\n\n/************************************************************************\n * VarI8FromUI1 (OLEAUT32.333)\n *\n * Convert a VT_UI1 to a VT_I8.\n *\n * PARAMS\n *  bIn     [I] Source\n *  pi64Out [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarI8FromUI116(BYTE bIn, LONG64* pi64Out)\n{\n  return _VarI8FromUI1(bIn, pi64Out);\n}\n\n\n/************************************************************************\n * VarI8FromI2 (OLEAUT32.334)\n *\n * Convert a VT_I2 to a VT_I8.\n *\n * PARAMS\n *  sIn     [I] Source\n *  pi64Out [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarI8FromI216(SHORT sIn, LONG64* pi64Out)\n{\n  return _VarI8FromI2(sIn, pi64Out);\n}\n\n/************************************************************************\n * VarI8FromR4 (OLEAUT32.335)\n *\n * Convert a VT_R4 to a VT_I8.\n *\n * PARAMS\n *  fltIn   [I] Source\n *  pi64Out [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI8FromR416(FLOAT fltIn, LONG64* pi64Out)\n{\n  return VarI8FromR8(fltIn, pi64Out);\n}\n\n/************************************************************************\n * VarI8FromR8 (OLEAUT32.336)\n *\n * Convert a VT_R8 to a VT_I8.\n *\n * PARAMS\n *  dblIn   [I] Source\n *  pi64Out [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *\n * NOTES\n *  Only values that fit into 63 bits are accepted. Due to rounding issues,\n *  very high or low values will not be accurately converted.\n *\n *  Numbers are rounded using Dutch rounding, as follows:\n *\n *|  Fractional Part   Sign  Direction  Example\n *|  ---------------   ----  ---------  -------\n *|  < 0.5              +    Down        0.4 ->  0.0\n *|  < 0.5              -    Up         -0.4 ->  0.0\n *|  > 0.5              +    Up          0.6 ->  1.0\n *|  < 0.5              -    Up         -0.6 -> -1.0\n *|  = 0.5              +    Up/Down    Down if even, Up if odd\n *|  = 0.5              -    Up/Down    Up if even, Down if odd\n *\n *  This system is often used in supermarkets.\n */\nHRESULT WINAPI VarI8FromR816(double dblIn, LONG64* pi64Out)\n{\n  if ( dblIn < -4611686018427387904.0 || dblIn >= 4611686018427387904.0)\n    return DISP_E_OVERFLOW;\n  VARIANT_DutchRound(LONG64, dblIn, *pi64Out);\n  return S_OK;\n}\n\n/************************************************************************\n * VarI8FromCy (OLEAUT32.337)\n *\n * Convert a VT_CY to a VT_I8.\n *\n * PARAMS\n *  cyIn    [I] Source\n *  pi64Out [O] Destination\n *\n * RETURNS\n *  S_OK.\n *\n * NOTES\n *  All negative numbers are rounded down by 1, including those that are\n *  evenly divisible by 10000 (this is a Win32 bug that Wine mimics).\n *  Positive numbers are rounded using Dutch rounding: See VarI8FromR8()\n *  for details.\n */\nHRESULT WINAPI VarI8FromCy16(CY cyIn, LONG64* pi64Out)\n{\n  *pi64Out = cyIn.int64 / CY_MULTIPLIER;\n\n  if (cyIn.int64 < 0)\n    (*pi64Out)--; /* Mimic Win32 bug */\n  else\n  {\n    cyIn.int64 -= *pi64Out * CY_MULTIPLIER; /* cyIn.s.Lo now holds fractional remainder */\n\n    if (cyIn.s.Lo > CY_HALF || (cyIn.s.Lo == CY_HALF && (*pi64Out & 0x1)))\n      (*pi64Out)++;\n  }\n  return S_OK;\n}\n\n/************************************************************************\n * VarI8FromDate (OLEAUT32.338)\n *\n * Convert a VT_DATE to a VT_I8.\n *\n * PARAMS\n *  dateIn  [I] Source\n *  pi64Out [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarI8FromDate16(DATE dateIn, LONG64* pi64Out)\n{\n  return VarI8FromR8(dateIn, pi64Out);\n}\n\n/************************************************************************\n * VarI8FromStr (OLEAUT32.339)\n *\n * Convert a VT_BSTR to a VT_I8.\n *\n * PARAMS\n *  strIn   [I] Source\n *  lcid    [I] LCID for the conversion\n *  dwFlags [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pi64Out [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarI8FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, LONG64* pi64Out)\n{\n  return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pi64Out, VT_I8);\n}\n\n/************************************************************************\n * VarI8FromDisp (OLEAUT32.340)\n *\n * Convert a VT_DISPATCH to a VT_I8.\n *\n * PARAMS\n *  pdispIn  [I] Source\n *  lcid     [I] LCID for conversion\n *  pi64Out  [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarI8FromDisp16(SEGIDispatch pdispIn, LCID lcid, LONG64* pi64Out)\n{\n  return VARIANT_FromDisp(pdispIn, lcid, pi64Out, VT_I8, 0);\n}\n\n/************************************************************************\n * VarI8FromBool (OLEAUT32.341)\n *\n * Convert a VT_BOOL to a VT_I8.\n *\n * PARAMS\n *  boolIn  [I] Source\n *  pi64Out [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarI8FromBool16(VARIANT_BOOL boolIn, LONG64* pi64Out)\n{\n  return VarI8FromI2(boolIn, pi64Out);\n}\n\n/************************************************************************\n * VarI8FromI1 (OLEAUT32.342)\n *\n * Convert a VT_I1 to a VT_I8.\n *\n * PARAMS\n *  cIn     [I] Source\n *  pi64Out [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarI8FromI116(signed char cIn, LONG64* pi64Out)\n{\n  return _VarI8FromI1(cIn, pi64Out);\n}\n\n/************************************************************************\n * VarI8FromUI2 (OLEAUT32.343)\n *\n * Convert a VT_UI2 to a VT_I8.\n *\n * PARAMS\n *  usIn    [I] Source\n *  pi64Out [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarI8FromUI216(USHORT usIn, LONG64* pi64Out)\n{\n  return _VarI8FromUI2(usIn, pi64Out);\n}\n\n/************************************************************************\n * VarI8FromUI4 (OLEAUT32.344)\n *\n * Convert a VT_UI4 to a VT_I8.\n *\n * PARAMS\n *  ulIn    [I] Source\n *  pi64Out [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarI8FromUI416(ULONG ulIn, LONG64* pi64Out)\n{\n  return _VarI8FromUI4(ulIn, pi64Out);\n}\n\n#ifdef AVAIL_32BIT_VAR\n/************************************************************************\n * VarI8FromDec (OLEAUT32.345)\n *\n * Convert a VT_DECIMAL to a VT_I8.\n *\n * PARAMS\n *  pDecIn  [I] Source\n *  pi64Out [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI8FromDec16(DECIMAL *pdecIn, LONG64* pi64Out)\n{\n  if (!DEC_SCALE(pdecIn))\n  {\n    /* This decimal is just a 96 bit integer */\n    if (DEC_SIGN(pdecIn) & ~DECIMAL_NEG)\n      return E_INVALIDARG;\n\n    if (DEC_HI32(pdecIn) || DEC_MID32(pdecIn) & 0x80000000)\n      return DISP_E_OVERFLOW;\n\n    if (DEC_SIGN(pdecIn))\n      *pi64Out = -DEC_LO64(pdecIn);\n    else\n      *pi64Out = DEC_LO64(pdecIn);\n    return S_OK;\n  }\n  else\n  {\n    /* Decimal contains a floating point number */\n    HRESULT hRet;\n    double dbl;\n\n    hRet = VarR8FromDec(pdecIn, &dbl);\n    if (SUCCEEDED(hRet))\n      hRet = VarI8FromR8(dbl, pi64Out);\n    return hRet;\n  }\n}\n#endif\n/************************************************************************\n * VarI8FromUI8 (OLEAUT32.427)\n *\n * Convert a VT_UI8 to a VT_I8.\n *\n * PARAMS\n *  ullIn   [I] Source\n *  pi64Out [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarI8FromUI816(ULONG64 ullIn, LONG64* pi64Out)\n{\n  return _VarI8FromUI8(ullIn, pi64Out);\n}\n\n/* UI8\n */\n\n/************************************************************************\n * VarUI8FromI8 (OLEAUT32.428)\n *\n * Convert a VT_I8 to a VT_UI8.\n *\n * PARAMS\n *  ulIn     [I] Source\n *  pui64Out [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI8FromI816(LONG64 llIn, ULONG64* pui64Out)\n{\n  return _VarUI8FromI8(llIn, pui64Out);\n}\n\n/************************************************************************\n * VarUI8FromUI1 (OLEAUT32.429)\n *\n * Convert a VT_UI1 to a VT_UI8.\n *\n * PARAMS\n *  bIn      [I] Source\n *  pui64Out [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarUI8FromUI116(BYTE bIn, ULONG64* pui64Out)\n{\n  return _VarUI8FromUI1(bIn, pui64Out);\n}\n\n/************************************************************************\n * VarUI8FromI2 (OLEAUT32.430)\n *\n * Convert a VT_I2 to a VT_UI8.\n *\n * PARAMS\n *  sIn      [I] Source\n *  pui64Out [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarUI8FromI216(SHORT sIn, ULONG64* pui64Out)\n{\n  return _VarUI8FromI2(sIn, pui64Out);\n}\n\n/************************************************************************\n * VarUI8FromR4 (OLEAUT32.431)\n *\n * Convert a VT_R4 to a VT_UI8.\n *\n * PARAMS\n *  fltIn    [I] Source\n *  pui64Out [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI8FromR416(FLOAT fltIn, ULONG64* pui64Out)\n{\n  return VarUI8FromR8(fltIn, pui64Out);\n}\n\n/************************************************************************\n * VarUI8FromR8 (OLEAUT32.432)\n *\n * Convert a VT_R8 to a VT_UI8.\n *\n * PARAMS\n *  dblIn    [I] Source\n *  pui64Out [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *\n * NOTES\n *  See VarI8FromR8() for details concerning rounding.\n */\nHRESULT WINAPI VarUI8FromR816(double dblIn, ULONG64* pui64Out)\n{\n  if (dblIn < -0.5 || dblIn > 1.844674407370955e19)\n    return DISP_E_OVERFLOW;\n  VARIANT_DutchRound(ULONG64, dblIn, *pui64Out);\n  return S_OK;\n}\n\n/************************************************************************\n * VarUI8FromCy (OLEAUT32.433)\n *\n * Convert a VT_CY to a VT_UI8.\n *\n * PARAMS\n *  cyIn     [I] Source\n *  pui64Out [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *\n * NOTES\n *  Negative values >= -5000 will be converted to 0.\n */\nHRESULT WINAPI VarUI8FromCy16(CY cyIn, ULONG64* pui64Out)\n{\n  if (cyIn.int64 < 0)\n  {\n    if (cyIn.int64 < -CY_HALF)\n      return DISP_E_OVERFLOW;\n    *pui64Out = 0;\n  }\n  else\n  {\n    *pui64Out = cyIn.int64 / CY_MULTIPLIER;\n\n    cyIn.int64 -= *pui64Out * CY_MULTIPLIER; /* cyIn.s.Lo now holds fractional remainder */\n\n    if (cyIn.s.Lo > CY_HALF || (cyIn.s.Lo == CY_HALF && (*pui64Out & 0x1)))\n      (*pui64Out)++;\n  }\n  return S_OK;\n}\n\n/************************************************************************\n * VarUI8FromDate (OLEAUT32.434)\n *\n * Convert a VT_DATE to a VT_UI8.\n *\n * PARAMS\n *  dateIn   [I] Source\n *  pui64Out [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarUI8FromDate16(DATE dateIn, ULONG64* pui64Out)\n{\n  return VarUI8FromR8(dateIn, pui64Out);\n}\n\n/************************************************************************\n * VarUI8FromStr (OLEAUT32.435)\n *\n * Convert a VT_BSTR to a VT_UI8.\n *\n * PARAMS\n *  strIn    [I] Source\n *  lcid     [I] LCID for the conversion\n *  dwFlags  [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pui64Out [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarUI8FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, ULONG64* pui64Out)\n{\n  return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pui64Out, VT_UI8);\n}\n\n/************************************************************************\n * VarUI8FromDisp (OLEAUT32.436)\n *\n * Convert a VT_DISPATCH to a VT_UI8.\n *\n * PARAMS\n *  pdispIn   [I] Source\n *  lcid      [I] LCID for conversion\n *  pui64Out  [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarUI8FromDisp16(SEGIDispatch pdispIn, LCID lcid, ULONG64* pui64Out)\n{\n  return VARIANT_FromDisp(pdispIn, lcid, pui64Out, VT_UI8, 0);\n}\n\n/************************************************************************\n * VarUI8FromBool (OLEAUT32.437)\n *\n * Convert a VT_BOOL to a VT_UI8.\n *\n * PARAMS\n *  boolIn   [I] Source\n *  pui64Out [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI8FromBool16(VARIANT_BOOL boolIn, ULONG64* pui64Out)\n{\n  return VarI8FromI2(boolIn, (LONG64 *)pui64Out);\n}\n/************************************************************************\n * VarUI8FromI1 (OLEAUT32.438)\n *\n * Convert a VT_I1 to a VT_UI8.\n *\n * PARAMS\n *  cIn      [I] Source\n *  pui64Out [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarUI8FromI116(signed char cIn, ULONG64* pui64Out)\n{\n  return _VarUI8FromI1(cIn, pui64Out);\n}\n\n/************************************************************************\n * VarUI8FromUI2 (OLEAUT32.439)\n *\n * Convert a VT_UI2 to a VT_UI8.\n *\n * PARAMS\n *  usIn     [I] Source\n *  pui64Out [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarUI8FromUI216(USHORT usIn, ULONG64* pui64Out)\n{\n  return _VarUI8FromUI2(usIn, pui64Out);\n}\n\n/************************************************************************\n * VarUI8FromUI4 (OLEAUT32.440)\n *\n * Convert a VT_UI4 to a VT_UI8.\n *\n * PARAMS\n *  ulIn     [I] Source\n *  pui64Out [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarUI8FromUI416(ULONG ulIn, ULONG64* pui64Out)\n{\n  return _VarUI8FromUI4(ulIn, pui64Out);\n}\n\n#ifdef AVAIL_32BIT_VAR\n/************************************************************************\n * VarUI8FromDec (OLEAUT32.441)\n *\n * Convert a VT_DECIMAL to a VT_UI8.\n *\n * PARAMS\n *  pDecIn   [I] Source\n *  pui64Out [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *\n * NOTES\n *  Under native Win32, if the source value has a scale of 0, its sign is\n *  ignored, i.e. this function takes the absolute value rather than fail\n *  with DISP_E_OVERFLOW. This bug has been fixed in Wine's implementation\n *  (use VarAbs() on pDecIn first if you really want this behaviour).\n */\nHRESULT WINAPI VarUI8FromDec16(DECIMAL *pdecIn, ULONG64* pui64Out)\n{\n  if (!DEC_SCALE(pdecIn))\n  {\n    /* This decimal is just a 96 bit integer */\n    if (DEC_SIGN(pdecIn) & ~DECIMAL_NEG)\n      return E_INVALIDARG;\n\n    if (DEC_HI32(pdecIn))\n      return DISP_E_OVERFLOW;\n\n    if (DEC_SIGN(pdecIn))\n    {\n      WARN(\"Sign would be ignored under Win32!\\n\");\n      return DISP_E_OVERFLOW;\n    }\n\n    *pui64Out = DEC_LO64(pdecIn);\n    return S_OK;\n  }\n  else\n  {\n    /* Decimal contains a floating point number */\n    HRESULT hRet;\n    double dbl;\n\n    hRet = VarR8FromDec(pdecIn, &dbl);\n    if (SUCCEEDED(hRet))\n      hRet = VarUI8FromR8(dbl, pui64Out);\n    return hRet;\n  }\n}\n#endif\n\n/* R4\n */\n\n/************************************************************************\n * VarR4FromUI1 (OLEAUT32.68)\n *\n * Convert a VT_UI1 to a VT_R4.\n *\n * PARAMS\n *  bIn     [I] Source\n *  pFltOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarR4FromUI116(BYTE bIn, float *pFltOut)\n{\n  return _VarR4FromUI1(bIn, pFltOut);\n}\n\n/************************************************************************\n * VarR4FromI2 (OLEAUT32.69)\n *\n * Convert a VT_I2 to a VT_R4.\n *\n * PARAMS\n *  sIn     [I] Source\n *  pFltOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarR4FromI216(SHORT sIn, float *pFltOut)\n{\n  return _VarR4FromI2(sIn, pFltOut);\n}\n\n/************************************************************************\n * VarR4FromI4 (OLEAUT32.70)\n *\n * Convert a VT_I4 to a VT_R4.\n *\n * PARAMS\n *  sIn     [I] Source\n *  pFltOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarR4FromI416(LONG lIn, float *pFltOut)\n{\n  return _VarR4FromI4(lIn, pFltOut);\n}\n\n/************************************************************************\n * VarR4FromR8 (OLEAUT32.71)\n *\n * Convert a VT_R8 to a VT_R4.\n *\n * PARAMS\n *  dblIn   [I] Source\n *  pFltOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination.\n */\nHRESULT WINAPI VarR4FromR816_conv(DWORD dblIn1, DWORD dblIn2, signed char* pcOut)\n{\n  UINT64 dbl = (UINT64)dblIn1 << 32 | dblIn2;\n  return VarR4FromR816(*(double *)&dbl, pcOut);\n}\n\nHRESULT WINAPI VarR4FromR816(double dblIn, float *pFltOut)\n{\n  double d = dblIn < 0.0 ? -dblIn : dblIn;\n  if (d > R4_MAX) return DISP_E_OVERFLOW;\n  *pFltOut = dblIn;\n  return S_OK;\n}\n\n/************************************************************************\n * VarR4FromCy (OLEAUT32.72)\n *\n * Convert a VT_CY to a VT_R4.\n *\n * PARAMS\n *  cyIn    [I] Source\n *  pFltOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarR4FromCy16(CY cyIn, float *pFltOut)\n{\n  *pFltOut = (double)cyIn.int64 / CY_MULTIPLIER_F;\n  return S_OK;\n}\n\n/************************************************************************\n * VarR4FromDate (OLEAUT32.73)\n *\n * Convert a VT_DATE to a VT_R4.\n *\n * PARAMS\n *  dateIn  [I] Source\n *  pFltOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination.\n */\nHRESULT WINAPI VarR4FromDate16(DATE dateIn, float *pFltOut)\n{\n  return VarR4FromR8(dateIn, pFltOut);\n}\n\n/************************************************************************\n * VarR4FromStr (OLEAUT32.74)\n *\n * Convert a VT_BSTR to a VT_R4.\n *\n * PARAMS\n *  strIn   [I] Source\n *  lcid    [I] LCID for the conversion\n *  dwFlags [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pFltOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if strIn or pFltOut is invalid.\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarR4FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, float *pFltOut)\n{\n  return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pFltOut, VT_R4);\n}\n\n/************************************************************************\n * VarR4FromDisp (OLEAUT32.75)\n *\n * Convert a VT_DISPATCH to a VT_R4.\n *\n * PARAMS\n *  pdispIn  [I] Source\n *  lcid     [I] LCID for conversion\n *  pFltOut  [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarR4FromDisp16(SEGIDispatch pdispIn, LCID lcid, float *pFltOut)\n{\n  return VARIANT_FromDisp(pdispIn, lcid, pFltOut, VT_R4, 0);\n}\n\n/************************************************************************\n * VarR4FromBool (OLEAUT32.76)\n *\n * Convert a VT_BOOL to a VT_R4.\n *\n * PARAMS\n *  boolIn  [I] Source\n *  pFltOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarR4FromBool16(VARIANT_BOOL boolIn, float *pFltOut)\n{\n  return VarR4FromI2(boolIn, pFltOut);\n}\n\n/************************************************************************\n * VarR4FromI1 (OLEAUT32.213)\n *\n * Convert a VT_I1 to a VT_R4.\n *\n * PARAMS\n *  cIn     [I] Source\n *  pFltOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarR4FromI116(signed char cIn, float *pFltOut)\n{\n  return _VarR4FromI1(cIn, pFltOut);\n}\n\n/************************************************************************\n * VarR4FromUI2 (OLEAUT32.214)\n *\n * Convert a VT_UI2 to a VT_R4.\n *\n * PARAMS\n *  usIn    [I] Source\n *  pFltOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarR4FromUI216(USHORT usIn, float *pFltOut)\n{\n  return _VarR4FromUI2(usIn, pFltOut);\n}\n\n/************************************************************************\n * VarR4FromUI4 (OLEAUT32.215)\n *\n * Convert a VT_UI4 to a VT_R4.\n *\n * PARAMS\n *  ulIn    [I] Source\n *  pFltOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarR4FromUI416(ULONG ulIn, float *pFltOut)\n{\n  return _VarR4FromUI4(ulIn, pFltOut);\n}\n\n#ifdef AVAIL_32BIT_VAR\n/************************************************************************\n * VarR4FromDec (OLEAUT32.216)\n *\n * Convert a VT_DECIMAL to a VT_R4.\n *\n * PARAMS\n *  pDecIn  [I] Source\n *  pFltOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid.\n */\nHRESULT WINAPI VarR4FromDec16(DECIMAL* pDecIn, float *pFltOut)\n{\n  BYTE scale = DEC_SCALE(pDecIn);\n  double divisor = 1.0;\n  double highPart;\n\n  if (scale > DEC_MAX_SCALE || DEC_SIGN(pDecIn) & ~DECIMAL_NEG)\n    return E_INVALIDARG;\n\n  while (scale--)\n    divisor *= 10.0;\n\n  if (DEC_SIGN(pDecIn))\n    divisor = -divisor;\n\n  if (DEC_HI32(pDecIn))\n  {\n    highPart = (double)DEC_HI32(pDecIn) / divisor;\n    highPart *= 4294967296.0F;\n    highPart *= 4294967296.0F;\n  }\n  else\n    highPart = 0.0;\n\n  *pFltOut = (double)DEC_LO64(pDecIn) / divisor + highPart;\n  return S_OK;\n}\n#endif\n\n/************************************************************************\n * VarR4FromI8 (OLEAUT32.360)\n *\n * Convert a VT_I8 to a VT_R4.\n *\n * PARAMS\n *  ullIn   [I] Source\n *  pFltOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarR4FromI816(LONG64 llIn, float *pFltOut)\n{\n  return _VarR4FromI8(llIn, pFltOut);\n}\n\n/************************************************************************\n * VarR4FromUI8 (OLEAUT32.361)\n *\n * Convert a VT_UI8 to a VT_R4.\n *\n * PARAMS\n *  ullIn   [I] Source\n *  pFltOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarR4FromUI816(ULONG64 ullIn, float *pFltOut)\n{\n  return _VarR4FromUI8(ullIn, pFltOut);\n}\n\n/************************************************************************\n * VarR4CmpR8 (OLEAUT32.316)\n *\n * Compare a VT_R4 to a VT_R8.\n *\n * PARAMS\n *  fltLeft  [I] Source\n *  dblRight [I] Value to compare\n *\n * RETURNS\n *  VARCMP_LT, VARCMP_EQ or VARCMP_GT indicating that fltLeft is less than,\n *  equal to or greater than dblRight respectively.\n */\nHRESULT WINAPI VarR4CmpR816(float fltLeft, double dblRight)\n{\n  if (fltLeft < dblRight)\n    return VARCMP_LT;\n  else if (fltLeft > dblRight)\n    return VARCMP_GT;\n  return VARCMP_EQ;\n}\n\n/* R8\n */\n\n/************************************************************************\n * VarR8FromUI1 (OLEAUT32.78)\n *\n * Convert a VT_UI1 to a VT_R8.\n *\n * PARAMS\n *  bIn     [I] Source\n *  pDblOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarR8FromUI116(BYTE bIn, double *pDblOut)\n{\n  return _VarR8FromUI1(bIn, pDblOut);\n}\n\n/************************************************************************\n * VarR8FromI2 (OLEAUT32.79)\n *\n * Convert a VT_I2 to a VT_R8.\n *\n * PARAMS\n *  sIn     [I] Source\n *  pDblOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarR8FromI216(SHORT sIn, double *pDblOut)\n{\n  return _VarR8FromI2(sIn, pDblOut);\n}\n\n/************************************************************************\n * VarR8FromI4 (OLEAUT32.80)\n *\n * Convert a VT_I4 to a VT_R8.\n *\n * PARAMS\n *  sIn     [I] Source\n *  pDblOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarR8FromI416(LONG lIn, double *pDblOut)\n{\n  return _VarR8FromI4(lIn, pDblOut);\n}\n\n/************************************************************************\n * VarR8FromR4 (OLEAUT32.81)\n *\n * Convert a VT_R4 to a VT_R8.\n *\n * PARAMS\n *  fltIn   [I] Source\n *  pDblOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarR8FromR416(FLOAT fltIn, double *pDblOut)\n{\n  return _VarR8FromR4(fltIn, pDblOut);\n}\n\n/************************************************************************\n * VarR8FromCy (OLEAUT32.82)\n *\n * Convert a VT_CY to a VT_R8.\n *\n * PARAMS\n *  cyIn    [I] Source\n *  pDblOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarR8FromCy16(CY cyIn, double *pDblOut)\n{\n  return _VarR8FromCy(cyIn, pDblOut);\n}\n\n/************************************************************************\n * VarR8FromDate (OLEAUT32.83)\n *\n * Convert a VT_DATE to a VT_R8.\n *\n * PARAMS\n *  dateIn  [I] Source\n *  pDblOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarR8FromDate16(DATE dateIn, double *pDblOut)\n{\n  return _VarR8FromDate(dateIn, pDblOut);\n}\n\n/************************************************************************\n * VarR8FromStr (OLEAUT32.84)\n *\n * Convert a VT_BSTR to a VT_R8.\n *\n * PARAMS\n *  strIn   [I] Source\n *  lcid    [I] LCID for the conversion\n *  dwFlags [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pDblOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if strIn or pDblOut is invalid.\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarR8FromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, double *pDblOut)\n{\n  return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pDblOut, VT_R8);\n}\n\n/************************************************************************\n * VarR8FromDisp (OLEAUT32.85)\n *\n * Convert a VT_DISPATCH to a VT_R8.\n *\n * PARAMS\n *  pdispIn  [I] Source\n *  lcid     [I] LCID for conversion\n *  pDblOut  [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarR8FromDisp16(SEGIDispatch pdispIn, LCID lcid, double *pDblOut)\n{\n  return VARIANT_FromDisp(pdispIn, lcid, pDblOut, VT_R8, 0);\n}\n\n/************************************************************************\n * VarR8FromBool (OLEAUT32.86)\n *\n * Convert a VT_BOOL to a VT_R8.\n *\n * PARAMS\n *  boolIn  [I] Source\n *  pDblOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarR8FromBool16(VARIANT_BOOL boolIn, double *pDblOut)\n{\n  return VarR8FromI2(boolIn, pDblOut);\n}\n\n/************************************************************************\n * VarR8FromI1 (OLEAUT32.217)\n *\n * Convert a VT_I1 to a VT_R8.\n *\n * PARAMS\n *  cIn     [I] Source\n *  pDblOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarR8FromI116(signed char cIn, double *pDblOut)\n{\n  return _VarR8FromI1(cIn, pDblOut);\n}\n\n/************************************************************************\n * VarR8FromUI2 (OLEAUT32.218)\n *\n * Convert a VT_UI2 to a VT_R8.\n *\n * PARAMS\n *  usIn    [I] Source\n *  pDblOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarR8FromUI216(USHORT usIn, double *pDblOut)\n{\n  return _VarR8FromUI2(usIn, pDblOut);\n}\n\n/************************************************************************\n * VarR8FromUI4 (OLEAUT32.219)\n *\n * Convert a VT_UI4 to a VT_R8.\n *\n * PARAMS\n *  ulIn    [I] Source\n *  pDblOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarR8FromUI416(ULONG ulIn, double *pDblOut)\n{\n  return _VarR8FromUI4(ulIn, pDblOut);\n}\n\n#ifdef AVAIL_32BIT_VAR\n/************************************************************************\n * VarR8FromDec (OLEAUT32.220)\n *\n * Convert a VT_DECIMAL to a VT_R8.\n *\n * PARAMS\n *  pDecIn  [I] Source\n *  pDblOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid.\n */\nHRESULT WINAPI VarR8FromDec16(const DECIMAL* pDecIn, double *pDblOut)\n{\n  BYTE scale = DEC_SCALE(pDecIn);\n  double divisor = 1.0, highPart;\n\n  if (scale > DEC_MAX_SCALE || DEC_SIGN(pDecIn) & ~DECIMAL_NEG)\n    return E_INVALIDARG;\n\n  while (scale--)\n    divisor *= 10;\n\n  if (DEC_SIGN(pDecIn))\n    divisor = -divisor;\n\n  if (DEC_HI32(pDecIn))\n  {\n    highPart = (double)DEC_HI32(pDecIn) / divisor;\n    highPart *= 4294967296.0F;\n    highPart *= 4294967296.0F;\n  }\n  else\n    highPart = 0.0;\n\n  *pDblOut = (double)DEC_LO64(pDecIn) / divisor + highPart;\n  return S_OK;\n}\n#endif\n\n/************************************************************************\n * VarR8FromI8 (OLEAUT32.362)\n *\n * Convert a VT_I8 to a VT_R8.\n *\n * PARAMS\n *  ullIn   [I] Source\n *  pDblOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarR8FromI816(LONG64 llIn, double *pDblOut)\n{\n  return _VarR8FromI8(llIn, pDblOut);\n}\n\n/************************************************************************\n * VarR8FromUI8 (OLEAUT32.363)\n *\n * Convert a VT_UI8 to a VT_R8.\n *\n * PARAMS\n *  ullIn   [I] Source\n *  pDblOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarR8FromUI816(ULONG64 ullIn, double *pDblOut)\n{\n  return _VarR8FromUI8(ullIn, pDblOut);\n}\n\n/************************************************************************\n * VarR8Pow (OLEAUT32.315)\n *\n * Raise a VT_R8 to a power.\n *\n * PARAMS\n *  dblLeft [I] Source\n *  dblPow  [I] Power to raise dblLeft by\n *  pDblOut [O] Destination\n *\n * RETURNS\n *  S_OK. pDblOut contains dblLeft to the power of dblRight.\n */\nHRESULT WINAPI VarR8Pow16(double dblLeft, double dblPow, double *pDblOut)\n{\n  *pDblOut = pow(dblLeft, dblPow);\n  return S_OK;\n}\n\n/************************************************************************\n * VarR8Round (OLEAUT32.317)\n *\n * Round a VT_R8 to a given number of decimal points.\n *\n * PARAMS\n *  dblIn   [I] Source\n *  nDig    [I] Number of decimal points to round to\n *  pDblOut [O] Destination for rounded number\n *\n * RETURNS\n *  Success: S_OK. pDblOut is rounded to nDig digits.\n *  Failure: E_INVALIDARG, if cDecimals is less than 0.\n *\n * NOTES\n *  The native version of this function rounds using the internal\n *  binary representation of the number. Wine uses the dutch rounding\n *  convention, so therefore small differences can occur in the value returned.\n *  MSDN says that you should use your own rounding function if you want\n *  rounding to be predictable in your application.\n */\nHRESULT WINAPI VarR8Round16(double dblIn, int nDig, double *pDblOut)\n{\n  double scale, whole, fract;\n\n  if (nDig < 0)\n    return E_INVALIDARG;\n\n  scale = pow(10.0, nDig);\n\n  dblIn *= scale;\n  whole = dblIn < 0 ? ceil(dblIn) : floor(dblIn);\n  fract = dblIn - whole;\n\n  if (fract > 0.5)\n    dblIn = whole + 1.0;\n  else if (fract == 0.5)\n    dblIn = whole + fmod(whole, 2.0);\n  else if (fract >= 0.0)\n    dblIn = whole;\n  else if (fract == -0.5)\n    dblIn = whole - fmod(whole, 2.0);\n  else if (fract > -0.5)\n    dblIn = whole;\n  else\n    dblIn = whole - 1.0;\n\n  *pDblOut = dblIn / scale;\n  return S_OK;\n}\n\n/* CY\n */\n\n/* Powers of 10 from 0..4 D.P. */\nstatic const int CY_Divisors[5] = { CY_MULTIPLIER/10000, CY_MULTIPLIER/1000,\n  CY_MULTIPLIER/100, CY_MULTIPLIER/10, CY_MULTIPLIER };\n\n/************************************************************************\n * VarCyFromUI1 (OLEAUT32.98)\n *\n * Convert a VT_UI1 to a VT_CY.\n *\n * PARAMS\n *  bIn    [I] Source\n *  pCyOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarCyFromUI116(BYTE bIn, CY* pCyOut)\n{\n    pCyOut->int64 = (ULONG64)bIn * CY_MULTIPLIER;\n    return S_OK;\n}\n\n/************************************************************************\n * VarCyFromI2 (OLEAUT32.99)\n *\n * Convert a VT_I2 to a VT_CY.\n *\n * PARAMS\n *  sIn    [I] Source\n *  pCyOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarCyFromI216(SHORT sIn, CY* pCyOut)\n{\n    pCyOut->int64 = (LONG64)sIn * CY_MULTIPLIER;\n    return S_OK;\n}\n\n/************************************************************************\n * VarCyFromI4 (OLEAUT32.100)\n *\n * Convert a VT_I4 to a VT_CY.\n *\n * PARAMS\n *  sIn    [I] Source\n *  pCyOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarCyFromI416(LONG lIn, CY* pCyOut)\n{\n    pCyOut->int64 = (LONG64)lIn * CY_MULTIPLIER;\n    return S_OK;\n}\n\n/************************************************************************\n * VarCyFromR4 (OLEAUT32.101)\n *\n * Convert a VT_R4 to a VT_CY.\n *\n * PARAMS\n *  fltIn  [I] Source\n *  pCyOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarCyFromR416(FLOAT fltIn, CY* pCyOut)\n{\n  return VarCyFromR8(fltIn, pCyOut);\n}\n\n/************************************************************************\n * VarCyFromR8 (OLEAUT32.102)\n *\n * Convert a VT_R8 to a VT_CY.\n *\n * PARAMS\n *  dblIn  [I] Source\n *  pCyOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarCyFromR816(double dblIn, CY* pCyOut)\n{\n#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))\n  /* This code gives identical results to Win32 on Intel.\n   * Here we use fp exceptions to catch overflows when storing the value.\n   */\n  static const unsigned short r8_fpcontrol = 0x137f;\n  static const double r8_multiplier = CY_MULTIPLIER_F;\n  unsigned short old_fpcontrol, result_fpstatus;\n\n  /* Clear exceptions, save the old fp state and load the new state */\n  __asm__ __volatile__( \"fnclex\" );\n  __asm__ __volatile__( \"fstcw %0\"   :   \"=m\" (old_fpcontrol) : );\n  __asm__ __volatile__( \"fldcw %0\"   : : \"m\"  (r8_fpcontrol) );\n  /* Perform the conversion. */\n  __asm__ __volatile__( \"fldl  %0\"   : : \"m\"  (dblIn) );\n  __asm__ __volatile__( \"fmull %0\"   : : \"m\"  (r8_multiplier) );\n  __asm__ __volatile__( \"fistpll %0\" : : \"m\"  (*pCyOut) );\n  /* Save the resulting fp state, load the old state and clear exceptions */\n  __asm__ __volatile__( \"fstsw %0\"   :   \"=m\" (result_fpstatus) : );\n  __asm__ __volatile__( \"fnclex\" );\n  __asm__ __volatile__( \"fldcw %0\"   : : \"m\"  (old_fpcontrol) );\n\n  if (result_fpstatus & 0x9) /* Overflow | Invalid */\n    return DISP_E_OVERFLOW;\n#else\n  /* This version produces slightly different results for boundary cases */\n  if (dblIn < -922337203685477.5807 || dblIn >= 922337203685477.5807)\n    return DISP_E_OVERFLOW;\n  dblIn *= CY_MULTIPLIER_F;\n  VARIANT_DutchRound(LONG64, dblIn, pCyOut->int64);\n#endif\n  return S_OK;\n}\n\n/************************************************************************\n * VarCyFromDate (OLEAUT32.103)\n *\n * Convert a VT_DATE to a VT_CY.\n *\n * PARAMS\n *  dateIn [I] Source\n *  pCyOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarCyFromDate16(DATE dateIn, CY* pCyOut)\n{\n  return VarCyFromR8(dateIn, pCyOut);\n}\n\n/************************************************************************\n * VarCyFromStr (OLEAUT32.104)\n *\n * Convert a VT_BSTR to a VT_CY.\n *\n * PARAMS\n *  strIn   [I] Source\n *  lcid    [I] LCID for the conversion\n *  dwFlags [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pCyOut  [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarCyFromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, CY* pCyOut)\n{\n  return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pCyOut, VT_CY);\n}\n\n/************************************************************************\n * VarCyFromDisp (OLEAUT32.105)\n *\n * Convert a VT_DISPATCH to a VT_CY.\n *\n * PARAMS\n *  pdispIn [I] Source\n *  lcid    [I] LCID for conversion\n *  pCyOut  [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarCyFromDisp16(SEGIDispatch pdispIn, LCID lcid, CY* pCyOut)\n{\n  return VARIANT_FromDisp(pdispIn, lcid, pCyOut, VT_CY, 0);\n}\n\n/************************************************************************\n * VarCyFromBool (OLEAUT32.106)\n *\n * Convert a VT_BOOL to a VT_CY.\n *\n * PARAMS\n *  boolIn [I] Source\n *  pCyOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n *\n * NOTES\n *  While the sign of the boolean is stored in the currency, the value is\n *  converted to either 0 or 1.\n */\nHRESULT WINAPI VarCyFromBool16(VARIANT_BOOL boolIn, CY* pCyOut)\n{\n    pCyOut->int64 = (LONG64)boolIn * CY_MULTIPLIER;\n    return S_OK;\n}\n\n/************************************************************************\n * VarCyFromI1 (OLEAUT32.225)\n *\n * Convert a VT_I1 to a VT_CY.\n *\n * PARAMS\n *  cIn    [I] Source\n *  pCyOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarCyFromI116(signed char cIn, CY* pCyOut)\n{\n    pCyOut->int64 = (LONG64)cIn * CY_MULTIPLIER;\n    return S_OK;\n}\n\n/************************************************************************\n * VarCyFromUI2 (OLEAUT32.226)\n *\n * Convert a VT_UI2 to a VT_CY.\n *\n * PARAMS\n *  usIn   [I] Source\n *  pCyOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarCyFromUI216(USHORT usIn, CY* pCyOut)\n{\n    pCyOut->int64 = (ULONG64)usIn * CY_MULTIPLIER;\n    return S_OK;\n}\n\n/************************************************************************\n * VarCyFromUI4 (OLEAUT32.227)\n *\n * Convert a VT_UI4 to a VT_CY.\n *\n * PARAMS\n *  ulIn   [I] Source\n *  pCyOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarCyFromUI416(ULONG ulIn, CY* pCyOut)\n{\n    pCyOut->int64 = (ULONG64)ulIn * CY_MULTIPLIER;\n    return S_OK;\n}\n\n#ifdef AVAIL_32BIT_VAR\n/************************************************************************\n * VarCyFromDec (OLEAUT32.228)\n *\n * Convert a VT_DECIMAL to a VT_CY.\n *\n * PARAMS\n *  pdecIn  [I] Source\n *  pCyOut  [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarCyFromDec16(DECIMAL* pdecIn, CY* pCyOut)\n{\n  DECIMAL rounded;\n  HRESULT hRet;\n\n  hRet = VarDecRound(pdecIn, 4, &rounded);\n\n  if (SUCCEEDED(hRet))\n  {\n    double d;\n\n    if (DEC_HI32(&rounded))\n      return DISP_E_OVERFLOW;\n\n    /* Note: Without the casts this promotes to int64 which loses precision */\n    d = (double)DEC_LO64(&rounded) / (double)CY_Divisors[DEC_SCALE(&rounded)];\n    if (DEC_SIGN(&rounded))\n      d = -d;\n    return VarCyFromR8(d, pCyOut);\n  }\n  return hRet;\n}\n#endif\n\n/************************************************************************\n * VarCyFromI8 (OLEAUT32.366)\n *\n * Convert a VT_I8 to a VT_CY.\n *\n * PARAMS\n *  ullIn  [I] Source\n *  pCyOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarCyFromI816(LONG64 llIn, CY* pCyOut)\n{\n  if (llIn <= (I8_MIN/CY_MULTIPLIER) || llIn >= (I8_MAX/CY_MULTIPLIER)) return DISP_E_OVERFLOW;\n  pCyOut->int64 = llIn * CY_MULTIPLIER;\n  return S_OK;\n}\n\n/************************************************************************\n * VarCyFromUI8 (OLEAUT32.375)\n *\n * Convert a VT_UI8 to a VT_CY.\n *\n * PARAMS\n *  ullIn  [I] Source\n *  pCyOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarCyFromUI816(ULONG64 ullIn, CY* pCyOut)\n{\n    if (ullIn > (I8_MAX/CY_MULTIPLIER)) return DISP_E_OVERFLOW;\n    pCyOut->int64 = ullIn * CY_MULTIPLIER;\n    return S_OK;\n}\n\n/************************************************************************\n * VarCyAdd (OLEAUT32.299)\n *\n * Add one CY to another.\n *\n * PARAMS\n *  cyLeft  [I] Source\n *  cyRight [I] Value to add\n *  pCyOut  [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarCyAdd16(CY cyLeft, CY cyRight, CY* pCyOut)\n{\n  double l,r;\n  _VarR8FromCy(cyLeft, &l);\n  _VarR8FromCy(cyRight, &r);\n  l = l + r;\n  return VarCyFromR8(l, pCyOut);\n}\n\n/************************************************************************\n * VarCyMul (OLEAUT32.303)\n *\n * Multiply one CY by another.\n *\n * PARAMS\n *  cyLeft  [I] Source\n *  cyRight [I] Value to multiply by\n *  pCyOut  [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarCyMul16(CY cyLeft, CY cyRight, CY* pCyOut)\n{\n  double l,r;\n  _VarR8FromCy(cyLeft, &l);\n  _VarR8FromCy(cyRight, &r);\n  l = l * r;\n  return VarCyFromR8(l, pCyOut);\n}\n\n/************************************************************************\n * VarCyMulI4 (OLEAUT32.304)\n *\n * Multiply one CY by a VT_I4.\n *\n * PARAMS\n *  cyLeft  [I] Source\n *  lRight  [I] Value to multiply by\n *  pCyOut  [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarCyMulI416(CY cyLeft, LONG lRight, CY* pCyOut)\n{\n  double d;\n\n  _VarR8FromCy(cyLeft, &d);\n  d = d * lRight;\n  return VarCyFromR8(d, pCyOut);\n}\n\n/************************************************************************\n * VarCySub (OLEAUT32.305)\n *\n * Subtract one CY from another.\n *\n * PARAMS\n *  cyLeft  [I] Source\n *  cyRight [I] Value to subtract\n *  pCyOut  [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarCySub16(CY cyLeft, CY cyRight, CY* pCyOut)\n{\n  double l,r;\n  _VarR8FromCy(cyLeft, &l);\n  _VarR8FromCy(cyRight, &r);\n  l = l - r;\n  return VarCyFromR8(l, pCyOut);\n}\n\n/************************************************************************\n * VarCyAbs (OLEAUT32.306)\n *\n * Convert a VT_CY into its absolute value.\n *\n * PARAMS\n *  cyIn   [I] Source\n *  pCyOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK. pCyOut contains the absolute value.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarCyAbs16(CY cyIn, CY* pCyOut)\n{\n  if (cyIn.s.Hi == (int)0x80000000 && !cyIn.s.Lo)\n    return DISP_E_OVERFLOW;\n\n  pCyOut->int64 = cyIn.int64 < 0 ? -cyIn.int64 : cyIn.int64;\n  return S_OK;\n}\n\n/************************************************************************\n * VarCyFix (OLEAUT32.307)\n *\n * Return the integer part of a VT_CY.\n *\n * PARAMS\n *  cyIn   [I] Source\n *  pCyOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n *\n * NOTES\n *  - The difference between this function and VarCyInt() is that VarCyInt() rounds\n *    negative numbers away from 0, while this function rounds them towards zero.\n */\nHRESULT WINAPI VarCyFix16(CY cyIn, CY* pCyOut)\n{\n  pCyOut->int64 = cyIn.int64 / CY_MULTIPLIER;\n  pCyOut->int64 *= CY_MULTIPLIER;\n  return S_OK;\n}\n\n/************************************************************************\n * VarCyInt (OLEAUT32.308)\n *\n * Return the integer part of a VT_CY.\n *\n * PARAMS\n *  cyIn   [I] Source\n *  pCyOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n *\n * NOTES\n *  - The difference between this function and VarCyFix() is that VarCyFix() rounds\n *    negative numbers towards 0, while this function rounds them away from zero.\n */\nHRESULT WINAPI VarCyInt16(CY cyIn, CY* pCyOut)\n{\n  pCyOut->int64 = cyIn.int64 / CY_MULTIPLIER;\n  pCyOut->int64 *= CY_MULTIPLIER;\n\n  if (cyIn.int64 < 0 && cyIn.int64 % CY_MULTIPLIER != 0)\n  {\n    pCyOut->int64 -= CY_MULTIPLIER;\n  }\n  return S_OK;\n}\n\n/************************************************************************\n * VarCyNeg (OLEAUT32.309)\n *\n * Change the sign of a VT_CY.\n *\n * PARAMS\n *  cyIn   [I] Source\n *  pCyOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarCyNeg16(CY cyIn, CY* pCyOut)\n{\n  if (cyIn.s.Hi == (int)0x80000000 && !cyIn.s.Lo)\n    return DISP_E_OVERFLOW;\n\n  pCyOut->int64 = -cyIn.int64;\n  return S_OK;\n}\n\n/************************************************************************\n * VarCyRound (OLEAUT32.310)\n *\n * Change the precision of a VT_CY.\n *\n * PARAMS\n *  cyIn      [I] Source\n *  cDecimals [I] New number of decimals to keep\n *  pCyOut    [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if cDecimals is less than 0.\n */\nHRESULT WINAPI VarCyRound16(CY cyIn, int cDecimals, CY* pCyOut)\n{\n  if (cDecimals < 0)\n    return E_INVALIDARG;\n\n  if (cDecimals > 3)\n  {\n    /* Rounding to more precision than we have */\n    *pCyOut = cyIn;\n    return S_OK;\n  }\n  else\n  {\n    double d, div = CY_Divisors[cDecimals];\n\n    _VarR8FromCy(cyIn, &d);\n    d = d * div;\n    VARIANT_DutchRound(LONGLONG, d, pCyOut->int64);\n    d = (double)pCyOut->int64 / div * CY_MULTIPLIER_F;\n    VARIANT_DutchRound(LONGLONG, d, pCyOut->int64);\n    return S_OK;\n  }\n}\n\n/************************************************************************\n * VarCyCmp (OLEAUT32.311)\n *\n * Compare two VT_CY values.\n *\n * PARAMS\n *  cyLeft  [I] Source\n *  cyRight [I] Value to compare\n *\n * RETURNS\n *  Success: VARCMP_LT, VARCMP_EQ or VARCMP_GT indicating that the value to\n *           compare is less, equal or greater than source respectively.\n *  Failure: DISP_E_OVERFLOW, if overflow occurs during the comparison\n */\nHRESULT WINAPI VarCyCmp16(CY cyLeft, CY cyRight)\n{\n  HRESULT hRet;\n  CY result;\n\n  /* Subtract right from left, and compare the result to 0 */\n  hRet = VarCySub(cyLeft, cyRight, &result);\n\n  if (SUCCEEDED(hRet))\n  {\n    if (result.int64 < 0)\n      hRet = (HRESULT)VARCMP_LT;\n    else if (result.int64 > 0)\n      hRet = (HRESULT)VARCMP_GT;\n    else\n      hRet = (HRESULT)VARCMP_EQ;\n  }\n  return hRet;\n}\n\n/************************************************************************\n * VarCyCmpR8 (OLEAUT32.312)\n *\n * Compare a VT_CY to a double\n *\n * PARAMS\n *  cyLeft   [I] Currency Source\n *  dblRight [I] double to compare to cyLeft\n *\n * RETURNS\n *  Success: VARCMP_LT, VARCMP_EQ or VARCMP_GT indicating that dblRight is\n *           less than, equal to or greater than cyLeft respectively.\n *  Failure: DISP_E_OVERFLOW, if overflow occurs during the comparison\n */\nHRESULT WINAPI VarCyCmpR816(CY cyLeft, double dblRight)\n{\n  HRESULT hRet;\n  CY cyRight;\n\n  hRet = VarCyFromR8(dblRight, &cyRight);\n\n  if (SUCCEEDED(hRet))\n    hRet = VarCyCmp(cyLeft, cyRight);\n\n  return hRet;\n}\n\n/************************************************************************\n * VarCyMulI8 (OLEAUT32.329)\n *\n * Multiply a VT_CY by a VT_I8.\n *\n * PARAMS\n *  cyLeft  [I] Source\n *  llRight [I] Value to multiply by\n *  pCyOut  [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarCyMulI816(CY cyLeft, LONG64 llRight, CY* pCyOut)\n{\n  double d;\n\n  _VarR8FromCy(cyLeft, &d);\n  d = d  * (double)llRight;\n  return VarCyFromR8(d, pCyOut);\n}\n\n/* DECIMAL\n */\n\n/************************************************************************\n * VarDecFromUI1 (OLEAUT32.190)\n *\n * Convert a VT_UI1 to a DECIMAL.\n *\n * PARAMS\n *  bIn     [I] Source\n *  pDecOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarDecFromUI116(BYTE bIn, DECIMAL* pDecOut)\n{\n  return VarDecFromUI4(bIn, pDecOut);\n}\n\n/************************************************************************\n * VarDecFromI2 (OLEAUT32.191)\n *\n * Convert a VT_I2 to a DECIMAL.\n *\n * PARAMS\n *  sIn     [I] Source\n *  pDecOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarDecFromI216(SHORT sIn, DECIMAL* pDecOut)\n{\n  return VarDecFromI4(sIn, pDecOut);\n}\n\n#ifdef AVAIL_32BIT_VAR\n/************************************************************************\n * VarDecFromI4 (OLEAUT32.192)\n *\n * Convert a VT_I4 to a DECIMAL.\n *\n * PARAMS\n *  sIn     [I] Source\n *  pDecOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarDecFromI416(LONG lIn, DECIMAL* pDecOut)\n{\n  DEC_HI32(pDecOut) = 0;\n  DEC_MID32(pDecOut) = 0;\n\n  if (lIn < 0)\n  {\n    DEC_SIGNSCALE(pDecOut) = SIGNSCALE(DECIMAL_NEG,0);\n    DEC_LO32(pDecOut) = -lIn;\n  }\n  else\n  {\n    DEC_SIGNSCALE(pDecOut) = SIGNSCALE(DECIMAL_POS,0);\n    DEC_LO32(pDecOut) = lIn;\n  }\n  return S_OK;\n}\n#endif\n\n/* internal representation of the value stored in a DECIMAL. The bytes are\n   stored from LSB at index 0 to MSB at index 11\n */\ntypedef struct DECIMAL_internal\n{\n    DWORD bitsnum[3];  /* 96 significant bits, unsigned */\n    unsigned char scale;      /* number scaled * 10 ^ -(scale) */\n    unsigned int  sign : 1;   /* 0 - positive, 1 - negative */\n} VARIANT_DI;\n\nstatic HRESULT VARIANT_DI_FromR4(float source, VARIANT_DI * dest);\nstatic HRESULT VARIANT_DI_FromR8(double source, VARIANT_DI * dest);\n#ifdef AVAIL_32BIT_VAR\nstatic void VARIANT_DIFromDec(const DECIMAL * from, VARIANT_DI * to);\nstatic void VARIANT_DecFromDI(const VARIANT_DI * from, DECIMAL * to);\nstatic unsigned char VARIANT_int_divbychar(DWORD * p, unsigned int n, unsigned char divisor);\nstatic BOOL VARIANT_int_iszero(const DWORD * p, unsigned int n);\n\n/************************************************************************\n * VarDecFromR4 (OLEAUT32.193)\n *\n * Convert a VT_R4 to a DECIMAL.\n *\n * PARAMS\n *  fltIn   [I] Source\n *  pDecOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarDecFromR416(FLOAT fltIn, DECIMAL* pDecOut)\n{\n  VARIANT_DI di;\n  HRESULT hres;\n\n  hres = VARIANT_DI_FromR4(fltIn, &di);\n  if (hres == S_OK) VARIANT_DecFromDI(&di, pDecOut);\n  return hres;\n}\n\n/************************************************************************\n * VarDecFromR8 (OLEAUT32.194)\n *\n * Convert a VT_R8 to a DECIMAL.\n *\n * PARAMS\n *  dblIn   [I] Source\n *  pDecOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarDecFromR816(double dblIn, DECIMAL* pDecOut)\n{\n  VARIANT_DI di;\n  HRESULT hres;\n\n  hres = VARIANT_DI_FromR8(dblIn, &di);\n  if (hres == S_OK) VARIANT_DecFromDI(&di, pDecOut);\n  return hres;\n}\n\n/************************************************************************\n * VarDecFromDate (OLEAUT32.195)\n *\n * Convert a VT_DATE to a DECIMAL.\n *\n * PARAMS\n *  dateIn  [I] Source\n *  pDecOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarDecFromDate16(DATE dateIn, DECIMAL* pDecOut)\n{\n  return VarDecFromR8(dateIn, pDecOut);\n}\n\n/************************************************************************\n * VarDecFromCy (OLEAUT32.196)\n *\n * Convert a VT_CY to a DECIMAL.\n *\n * PARAMS\n *  cyIn    [I] Source\n *  pDecOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarDecFromCy16(CY cyIn, DECIMAL* pDecOut)\n{\n  DEC_HI32(pDecOut) = 0;\n\n  /* Note: This assumes 2s complement integer representation */\n  if (cyIn.s.Hi & 0x80000000)\n  {\n    DEC_SIGNSCALE(pDecOut) = SIGNSCALE(DECIMAL_NEG,4);\n    DEC_LO64(pDecOut) = -cyIn.int64;\n  }\n  else\n  {\n    DEC_SIGNSCALE(pDecOut) = SIGNSCALE(DECIMAL_POS,4);\n    DEC_MID32(pDecOut) = cyIn.s.Hi;\n    DEC_LO32(pDecOut) = cyIn.s.Lo;\n  }\n  return S_OK;\n}\n\n/************************************************************************\n * VarDecFromStr (OLEAUT32.197)\n *\n * Convert a VT_BSTR to a DECIMAL.\n *\n * PARAMS\n *  strIn   [I] Source\n *  lcid    [I] LCID for the conversion\n *  dwFlags [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pDecOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarDecFromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, DECIMAL* pDecOut)\n{\n  return VARIANT_NumberFromBstr(strIn, lcid, dwFlags, pDecOut, VT_DECIMAL);\n}\n\n/************************************************************************\n * VarDecFromDisp (OLEAUT32.198)\n *\n * Convert a VT_DISPATCH to a DECIMAL.\n *\n * PARAMS\n *  pdispIn  [I] Source\n *  lcid     [I] LCID for conversion\n *  pDecOut  [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarDecFromDisp16(SEGIDispatch pdispIn, LCID lcid, DECIMAL* pDecOut)\n{\n  return VARIANT_FromDisp(pdispIn, lcid, pDecOut, VT_DECIMAL, 0);\n}\n\n/************************************************************************\n * VarDecFromBool (OLEAUT32.199)\n *\n * Convert a VT_BOOL to a DECIMAL.\n *\n * PARAMS\n *  bIn     [I] Source\n *  pDecOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n *\n * NOTES\n *  The value is converted to either 0 (if bIn is FALSE) or -1 (TRUE).\n */\nHRESULT WINAPI VarDecFromBool16(VARIANT_BOOL bIn, DECIMAL* pDecOut)\n{\n  DEC_HI32(pDecOut) = 0;\n  DEC_MID32(pDecOut) = 0;\n  if (bIn)\n  {\n    DEC_SIGNSCALE(pDecOut) = SIGNSCALE(DECIMAL_NEG,0);\n    DEC_LO32(pDecOut) = 1;\n  }\n  else\n  {\n    DEC_SIGNSCALE(pDecOut) = SIGNSCALE(DECIMAL_POS,0);\n    DEC_LO32(pDecOut) = 0;\n  }\n  return S_OK;\n}\n\n/************************************************************************\n * VarDecFromI1 (OLEAUT32.241)\n *\n * Convert a VT_I1 to a DECIMAL.\n *\n * PARAMS\n *  cIn     [I] Source\n *  pDecOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarDecFromI116(signed char cIn, DECIMAL* pDecOut)\n{\n  return VarDecFromI4(cIn, pDecOut);\n}\n\n/************************************************************************\n * VarDecFromUI2 (OLEAUT32.242)\n *\n * Convert a VT_UI2 to a DECIMAL.\n *\n * PARAMS\n *  usIn    [I] Source\n *  pDecOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarDecFromUI216(USHORT usIn, DECIMAL* pDecOut)\n{\n  return VarDecFromUI4(usIn, pDecOut);\n}\n\n/************************************************************************\n * VarDecFromUI4 (OLEAUT32.243)\n *\n * Convert a VT_UI4 to a DECIMAL.\n *\n * PARAMS\n *  ulIn    [I] Source\n *  pDecOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarDecFromUI416(ULONG ulIn, DECIMAL* pDecOut)\n{\n  DEC_SIGNSCALE(pDecOut) = SIGNSCALE(DECIMAL_POS,0);\n  DEC_HI32(pDecOut) = 0;\n  DEC_MID32(pDecOut) = 0;\n  DEC_LO32(pDecOut) = ulIn;\n  return S_OK;\n}\n\n/************************************************************************\n * VarDecFromI8 (OLEAUT32.374)\n *\n * Convert a VT_I8 to a DECIMAL.\n *\n * PARAMS\n *  llIn    [I] Source\n *  pDecOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarDecFromI816(LONG64 llIn, DECIMAL* pDecOut)\n{\n  PULARGE_INTEGER pLi = (PULARGE_INTEGER)&llIn;\n\n  DEC_HI32(pDecOut) = 0;\n\n  /* Note: This assumes 2s complement integer representation */\n  if (pLi->u.HighPart & 0x80000000)\n  {\n    DEC_SIGNSCALE(pDecOut) = SIGNSCALE(DECIMAL_NEG,0);\n    DEC_LO64(pDecOut) = -pLi->QuadPart;\n  }\n  else\n  {\n    DEC_SIGNSCALE(pDecOut) = SIGNSCALE(DECIMAL_POS,0);\n    DEC_MID32(pDecOut) = pLi->u.HighPart;\n    DEC_LO32(pDecOut) = pLi->u.LowPart;\n  }\n  return S_OK;\n}\n\n/************************************************************************\n * VarDecFromUI8 (OLEAUT32.375)\n *\n * Convert a VT_UI8 to a DECIMAL.\n *\n * PARAMS\n *  ullIn   [I] Source\n *  pDecOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarDecFromUI816(ULONG64 ullIn, DECIMAL* pDecOut)\n{\n  DEC_SIGNSCALE(pDecOut) = SIGNSCALE(DECIMAL_POS,0);\n  DEC_HI32(pDecOut) = 0;\n  DEC_LO64(pDecOut) = ullIn;\n  return S_OK;\n}\n\n/* Make two DECIMALS the same scale; used by math functions below */\nstatic HRESULT VARIANT_DecScale(const DECIMAL** ppDecLeft,\n                                const DECIMAL** ppDecRight,\n                                DECIMAL pDecOut[2])\n{\n  static DECIMAL scaleFactor;\n  unsigned char remainder;\n  DECIMAL decTemp;\n  VARIANT_DI di;\n  int scaleAmount, i;\n\n  if (DEC_SIGN(*ppDecLeft) & ~DECIMAL_NEG || DEC_SIGN(*ppDecRight) & ~DECIMAL_NEG)\n    return E_INVALIDARG;\n\n  DEC_LO32(&scaleFactor) = 10;\n\n  i = scaleAmount = DEC_SCALE(*ppDecLeft) - DEC_SCALE(*ppDecRight);\n\n  if (!scaleAmount)\n    return S_OK; /* Same scale */\n\n  if (scaleAmount > 0)\n  {\n    decTemp = *(*ppDecRight); /* Left is bigger - scale the right hand side */\n    *ppDecRight = &pDecOut[0];\n  }\n  else\n  {\n    decTemp = *(*ppDecLeft); /* Right is bigger - scale the left hand side */\n    *ppDecLeft  = &pDecOut[0];\n    i = -scaleAmount;\n  }\n\n  /* Multiply up the value to be scaled by the correct amount (if possible) */\n  while (i > 0 && SUCCEEDED(VarDecMul(&decTemp, &scaleFactor, &pDecOut[0])))\n  {\n    decTemp = pDecOut[0];\n    i--;\n  }\n\n  if (!i)\n  {\n    DEC_SCALE(&pDecOut[0]) += (scaleAmount > 0) ? scaleAmount : (-scaleAmount);\n    return S_OK; /* Same scale */\n  }\n\n  /* Scaling further not possible, reduce accuracy of other argument */\n  pDecOut[0] = decTemp;\n  if (scaleAmount > 0)\n  {\n    DEC_SCALE(&pDecOut[0]) += scaleAmount - i;\n    VARIANT_DIFromDec(*ppDecLeft, &di);\n    *ppDecLeft = &pDecOut[1];\n  }\n  else\n  {\n    DEC_SCALE(&pDecOut[0]) += (-scaleAmount) - i;\n    VARIANT_DIFromDec(*ppDecRight, &di);\n    *ppDecRight = &pDecOut[1];\n  }\n\n  di.scale -= i;\n  remainder = 0;\n  while (i-- > 0 && !VARIANT_int_iszero(di.bitsnum, ARRAY_SIZE(di.bitsnum)))\n  {\n    remainder = VARIANT_int_divbychar(di.bitsnum, ARRAY_SIZE(di.bitsnum), 10);\n    if (remainder > 0) WARN(\"losing significant digits (remainder %u)...\\n\", remainder);\n  }\n\n  /* round up the result - native oleaut32 does this */\n  if (remainder >= 5) {\n      for (remainder = 1, i = 0; i < ARRAY_SIZE(di.bitsnum) && remainder; i++) {\n          ULONGLONG digit = di.bitsnum[i] + 1;\n          remainder = (digit > 0xFFFFFFFF) ? 1 : 0;\n          di.bitsnum[i] = digit & 0xFFFFFFFF;\n      }\n  }\n\n  VARIANT_DecFromDI(&di, &pDecOut[1]);\n  return S_OK;\n}\n#endif\n\n/* Add two unsigned 32 bit values with overflow */\nstatic ULONG VARIANT_Add(ULONG ulLeft, ULONG ulRight, ULONG* pulHigh)\n{\n  ULARGE_INTEGER ul64;\n\n  ul64.QuadPart = (ULONG64)ulLeft + (ULONG64)ulRight + (ULONG64)*pulHigh;\n  *pulHigh = ul64.u.HighPart;\n  return ul64.u.LowPart;\n}\n\n/* Subtract two unsigned 32 bit values with underflow */\nstatic ULONG VARIANT_Sub(ULONG ulLeft, ULONG ulRight, ULONG* pulHigh)\n{\n  BOOL invert = FALSE;\n  ULARGE_INTEGER ul64;\n\n  ul64.QuadPart = (LONG64)ulLeft - (ULONG64)ulRight;\n  if (ulLeft < ulRight)\n    invert = TRUE;\n\n  if (ul64.QuadPart > (ULONG64)*pulHigh)\n    ul64.QuadPart -= (ULONG64)*pulHigh;\n  else\n  {\n    ul64.QuadPart -= (ULONG64)*pulHigh;\n    invert = TRUE;\n  }\n  if (invert)\n    ul64.u.HighPart = -ul64.u.HighPart ;\n\n  *pulHigh = ul64.u.HighPart;\n  return ul64.u.LowPart;\n}\n\n/* Multiply two unsigned 32 bit values with overflow */\nstatic ULONG VARIANT_Mul(ULONG ulLeft, ULONG ulRight, ULONG* pulHigh)\n{\n  ULARGE_INTEGER ul64;\n\n  ul64.QuadPart = (ULONG64)ulLeft * (ULONG64)ulRight + (ULONG64)*pulHigh;\n  *pulHigh = ul64.u.HighPart;\n  return ul64.u.LowPart;\n}\n\n#ifdef AVAIL_32BIT_VAR\n/* Compare two decimals that have the same scale */\nstatic inline int VARIANT_DecCmp(const DECIMAL *pDecLeft, const DECIMAL *pDecRight)\n{\n  if ( DEC_HI32(pDecLeft) < DEC_HI32(pDecRight) ||\n      (DEC_HI32(pDecLeft) <= DEC_HI32(pDecRight) && DEC_LO64(pDecLeft) < DEC_LO64(pDecRight)))\n    return -1;\n  else if (DEC_HI32(pDecLeft) == DEC_HI32(pDecRight) && DEC_LO64(pDecLeft) == DEC_LO64(pDecRight))\n    return 0;\n  return 1;\n}\n\n/************************************************************************\n * VarDecAdd (OLEAUT32.177)\n *\n * Add one DECIMAL to another.\n *\n * PARAMS\n *  pDecLeft  [I] Source\n *  pDecRight [I] Value to add\n *  pDecOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarDecAdd16(const DECIMAL* pDecLeft, const DECIMAL* pDecRight, DECIMAL* pDecOut)\n{\n  HRESULT hRet;\n  DECIMAL scaled[2];\n\n  hRet = VARIANT_DecScale(&pDecLeft, &pDecRight, scaled);\n\n  if (SUCCEEDED(hRet))\n  {\n    /* Our decimals now have the same scale, we can add them as 96 bit integers */\n    ULONG overflow = 0;\n    BYTE sign = DECIMAL_POS;\n    int cmp;\n\n    /* Correct for the sign of the result */\n    if (DEC_SIGN(pDecLeft) && DEC_SIGN(pDecRight))\n    {\n      /* -x + -y : Negative */\n      sign = DECIMAL_NEG;\n      goto VarDecAdd_AsPositive;\n    }\n    else if (DEC_SIGN(pDecLeft) && !DEC_SIGN(pDecRight))\n    {\n      cmp = VARIANT_DecCmp(pDecLeft, pDecRight);\n\n      /* -x + y : Negative if x > y */\n      if (cmp > 0)\n      {\n        sign = DECIMAL_NEG;\nVarDecAdd_AsNegative:\n        DEC_LO32(pDecOut)  = VARIANT_Sub(DEC_LO32(pDecLeft),  DEC_LO32(pDecRight),  &overflow);\n        DEC_MID32(pDecOut) = VARIANT_Sub(DEC_MID32(pDecLeft), DEC_MID32(pDecRight), &overflow);\n        DEC_HI32(pDecOut)  = VARIANT_Sub(DEC_HI32(pDecLeft),  DEC_HI32(pDecRight),  &overflow);\n      }\n      else\n      {\nVarDecAdd_AsInvertedNegative:\n        DEC_LO32(pDecOut)  = VARIANT_Sub(DEC_LO32(pDecRight),  DEC_LO32(pDecLeft),  &overflow);\n        DEC_MID32(pDecOut) = VARIANT_Sub(DEC_MID32(pDecRight), DEC_MID32(pDecLeft), &overflow);\n        DEC_HI32(pDecOut)  = VARIANT_Sub(DEC_HI32(pDecRight),  DEC_HI32(pDecLeft),  &overflow);\n      }\n    }\n    else if (!DEC_SIGN(pDecLeft) && DEC_SIGN(pDecRight))\n    {\n      cmp = VARIANT_DecCmp(pDecLeft, pDecRight);\n\n      /* x + -y : Negative if x <= y */\n      if (cmp <= 0)\n      {\n        sign = DECIMAL_NEG;\n        goto VarDecAdd_AsInvertedNegative;\n      }\n      goto VarDecAdd_AsNegative;\n    }\n    else\n    {\n      /* x + y : Positive */\nVarDecAdd_AsPositive:\n      DEC_LO32(pDecOut)  = VARIANT_Add(DEC_LO32(pDecLeft),  DEC_LO32(pDecRight),  &overflow);\n      DEC_MID32(pDecOut) = VARIANT_Add(DEC_MID32(pDecLeft), DEC_MID32(pDecRight), &overflow);\n      DEC_HI32(pDecOut)  = VARIANT_Add(DEC_HI32(pDecLeft),  DEC_HI32(pDecRight),  &overflow);\n    }\n\n    if (overflow)\n      return DISP_E_OVERFLOW; /* overflowed */\n\n    DEC_SCALE(pDecOut) = DEC_SCALE(pDecLeft);\n    DEC_SIGN(pDecOut) = sign;\n  }\n  return hRet;\n}\n#endif\n\n#ifdef AVAIL_32BIT_VAR\n/* translate from external DECIMAL format into an internal representation */\nstatic void VARIANT_DIFromDec(const DECIMAL * from, VARIANT_DI * to)\n{\n    to->scale = DEC_SCALE(from);\n    to->sign = DEC_SIGN(from) ? 1 : 0;\n\n    to->bitsnum[0] = DEC_LO32(from);\n    to->bitsnum[1] = DEC_MID32(from);\n    to->bitsnum[2] = DEC_HI32(from);\n}\n\nstatic void VARIANT_DecFromDI(const VARIANT_DI * from, DECIMAL * to)\n{\n    if (from->sign) {\n        DEC_SIGNSCALE(to) = SIGNSCALE(DECIMAL_NEG, from->scale);\n    } else {\n        DEC_SIGNSCALE(to) = SIGNSCALE(DECIMAL_POS, from->scale);\n    }\n\n    DEC_LO32(to) = from->bitsnum[0];\n    DEC_MID32(to) = from->bitsnum[1];\n    DEC_HI32(to) = from->bitsnum[2];\n}\n#endif\n\n/* clear an internal representation of a DECIMAL */\nstatic void VARIANT_DI_clear(VARIANT_DI * i)\n{\n    memset(i, 0, sizeof(VARIANT_DI));\n}\n\n/* divide the (unsigned) number stored in p (LSB) by a byte value (<= 0xff). Any nonzero\n   size is supported. The value in p is replaced by the quotient of the division, and\n   the remainder is returned as a result. This routine is most often used with a divisor\n   of 10 in order to scale up numbers, and in the DECIMAL->string conversion.\n */\nstatic unsigned char VARIANT_int_divbychar(DWORD * p, unsigned int n, unsigned char divisor)\n{\n    if (divisor == 0) {\n        /* division by 0 */\n        return 0xFF;\n    } else if (divisor == 1) {\n        /* dividend remains unchanged */\n        return 0;\n    } else {\n        unsigned char remainder = 0;\n        ULONGLONG iTempDividend;\n        signed int i;\n        \n        for (i = n - 1; i >= 0 && !p[i]; i--);  /* skip leading zeros */\n        for (; i >= 0; i--) {\n            iTempDividend = ((ULONGLONG)remainder << 32) + p[i];\n            remainder = iTempDividend % divisor;\n            p[i] = iTempDividend / divisor;\n        }\n        \n        return remainder;\n    }\n}\n\n/* check to test if encoded number is a zero. Returns 1 if zero, 0 for nonzero */\nstatic BOOL VARIANT_int_iszero(const DWORD * p, unsigned int n)\n{\n    for (; n > 0; n--) if (*p++ != 0) return FALSE;\n    return TRUE;\n}\n\n/* multiply two DECIMALS, without changing either one, and place result in third\n   parameter. Result is normalized when scale is > 0. Attempts to remove significant\n   digits when scale > 0 in order to fit an overflowing result. Final overflow\n   flag is returned.\n */\nstatic int VARIANT_DI_mul(const VARIANT_DI * a, const VARIANT_DI * b, VARIANT_DI * result)\n{\n    BOOL r_overflow = FALSE;\n    DWORD running[6];\n    signed int mulstart;\n\n    VARIANT_DI_clear(result);\n    result->sign = (a->sign ^ b->sign) ? 1 : 0;\n\n    /* Multiply 128-bit operands into a (max) 256-bit result. The scale\n       of the result is formed by adding the scales of the operands.\n     */\n    result->scale = a->scale + b->scale;\n    memset(running, 0, sizeof(running));\n\n    /* count number of leading zero-bytes in operand A */\n    for (mulstart = ARRAY_SIZE(a->bitsnum) - 1; mulstart >= 0 && !a->bitsnum[mulstart]; mulstart--);\n    if (mulstart < 0) {\n        /* result is 0, because operand A is 0 */\n        result->scale = 0;\n        result->sign = 0;\n    } else {\n        unsigned char remainder = 0;\n        int iA;        \n\n        /* perform actual multiplication */\n        for (iA = 0; iA <= mulstart; iA++) {\n            ULONG iOverflowMul;\n            int iB;\n            \n            for (iOverflowMul = 0, iB = 0; iB < ARRAY_SIZE(b->bitsnum); iB++) {\n                ULONG iRV;\n                int iR;\n                \n                iRV = VARIANT_Mul(b->bitsnum[iB], a->bitsnum[iA], &iOverflowMul);\n                iR = iA + iB;\n                do {\n                    running[iR] = VARIANT_Add(running[iR], 0, &iRV);\n                    iR++;\n                } while (iRV);\n            }\n        }\n\n/* Too bad - native oleaut does not do this, so we should not either */\n#if 0\n        /* While the result is divisible by 10, and the scale > 0, divide by 10.\n           This operation should not lose significant digits, and gives an\n           opportunity to reduce the possibility of overflows in future\n           operations issued by the application.\n         */\n        while (result->scale > 0) {\n            memcpy(quotient, running, sizeof(quotient));\n            remainder = VARIANT_int_divbychar(quotient, sizeof(quotient) / sizeof(DWORD), 10);\n            if (remainder > 0) break;\n            memcpy(running, quotient, sizeof(quotient));\n            result->scale--;\n        }\n#endif\n        /* While the 256-bit result overflows, and the scale > 0, divide by 10.\n           This operation *will* lose significant digits of the result because\n           all the factors of 10 were consumed by the previous operation.\n        */\n        while (result->scale > 0 && !VARIANT_int_iszero(running + ARRAY_SIZE(result->bitsnum),\n            ARRAY_SIZE(running) - ARRAY_SIZE(result->bitsnum))) {\n\n            remainder = VARIANT_int_divbychar(running, ARRAY_SIZE(running), 10);\n            if (remainder > 0) WARN(\"losing significant digits (remainder %u)...\\n\", remainder);\n            result->scale--;\n        }\n        \n        /* round up the result - native oleaut32 does this */\n        if (remainder >= 5) {\n            unsigned int i;\n            for (remainder = 1, i = 0; i < ARRAY_SIZE(running) && remainder; i++) {\n                ULONGLONG digit = running[i] + 1;\n                remainder = (digit > 0xFFFFFFFF) ? 1 : 0;\n                running[i] = digit & 0xFFFFFFFF;\n            }\n        }\n\n        /* Signal overflow if scale == 0 and 256-bit result still overflows,\n           and copy result bits into result structure\n        */\n        r_overflow = !VARIANT_int_iszero(running + ARRAY_SIZE(result->bitsnum),\n            ARRAY_SIZE(running) - ARRAY_SIZE(result->bitsnum));\n        memcpy(result->bitsnum, running, sizeof(result->bitsnum));\n    }\n    return r_overflow;\n}\n\n/* cast DECIMAL into string. Any scale should be handled properly. en_US locale is\n   hardcoded (period for decimal separator, dash as negative sign). Returns TRUE for\n   success, FALSE if insufficient space in output buffer.\n */\nstatic BOOL VARIANT_DI_tostringA(const VARIANT_DI * a, OLECHAR16 * s, unsigned int n)\n{\n    BOOL overflow = FALSE;\n    DWORD quotient[3];\n    unsigned char remainder;\n    unsigned int i;\n\n    /* place negative sign */\n    if (!VARIANT_int_iszero(a->bitsnum, ARRAY_SIZE(a->bitsnum)) && a->sign) {\n        if (n > 0) {\n            *s++ = '-';\n            n--;\n        }\n        else overflow = TRUE;\n    }\n\n    /* prepare initial 0 */\n    if (!overflow) {\n        if (n >= 2) {\n            s[0] = '0';\n            s[1] = '\\0';\n        } else overflow = TRUE;\n    }\n\n    i = 0;\n    memcpy(quotient, a->bitsnum, sizeof(a->bitsnum));\n    while (!overflow && !VARIANT_int_iszero(quotient, ARRAY_SIZE(quotient))) {\n        remainder = VARIANT_int_divbychar(quotient, ARRAY_SIZE(quotient), 10);\n        if (i + 2 > n) {\n            overflow = TRUE;\n        } else {\n            s[i++] = '0' + remainder;\n            s[i] = '\\0';\n        }\n    }\n\n    if (!overflow && !VARIANT_int_iszero(a->bitsnum, ARRAY_SIZE(a->bitsnum))) {\n\n        /* reverse order of digits */\n        OLECHAR16 * x = s; OLECHAR16 * y = s + i - 1;\n        while (x < y) {\n            *x ^= *y;\n            *y ^= *x;\n            *x++ ^= *y--;\n        }\n\n        /* check for decimal point. \"i\" now has string length */\n        if (i <= a->scale) {\n            unsigned int numzeroes = a->scale + 1 - i;\n            if (i + 1 + numzeroes >= n) {\n                overflow = TRUE;\n            } else {\n                memmove(s + numzeroes, s, (i + 1) * sizeof(OLECHAR16));\n                i += numzeroes;\n                while (numzeroes > 0) {\n                    s[--numzeroes] = '0';\n                }\n            }\n        }\n\n        /* place decimal point */\n        if (a->scale > 0) {\n            unsigned int periodpos = i - a->scale;\n            if (i + 2 >= n) {\n                overflow = TRUE;\n            } else {\n                memmove(s + periodpos + 1, s + periodpos, (i + 1 - periodpos) * sizeof(OLECHAR16));\n                s[periodpos] = '.'; i++;\n                \n                /* remove extra zeros at the end, if any */\n                while (s[i - 1] == '0') s[--i] = '\\0';\n                if (s[i - 1] == '.') s[--i] = '\\0';\n            }\n        }\n    }\n\n    return !overflow;\n}\n\n/* shift the bits of a DWORD array to the left. p[0] is assumed LSB */\nstatic void VARIANT_int_shiftleft(DWORD * p, unsigned int n, unsigned int shift)\n{\n    DWORD shifted;\n    unsigned int i;\n    \n    /* shift whole DWORDs to the left */\n    while (shift >= 32)\n    {\n        memmove(p + 1, p, (n - 1) * sizeof(DWORD));\n        *p = 0; shift -= 32;\n    }\n    \n    /* shift remainder (1..31 bits) */\n    shifted = 0;\n    if (shift > 0) for (i = 0; i < n; i++)\n    {\n        DWORD b;\n        b = p[i] >> (32 - shift);\n        p[i] = (p[i] << shift) | shifted;\n        shifted = b;\n    }\n}\n\n/* add the (unsigned) numbers stored in two DWORD arrays with LSB at index 0.\n   Value at v is incremented by the value at p. Any size is supported, provided\n   that v is not shorter than p. Any unapplied carry is returned as a result.\n */\nstatic unsigned char VARIANT_int_add(DWORD * v, unsigned int nv, const DWORD * p,\n    unsigned int np)\n{\n    unsigned char carry = 0;\n\n    if (nv >= np) {\n        ULONGLONG sum;\n        unsigned int i;\n\n        for (i = 0; i < np; i++) {\n            sum = (ULONGLONG)v[i]\n                + (ULONGLONG)p[i]\n                + (ULONGLONG)carry;\n            v[i] = sum & 0xffffffff;\n            carry = sum >> 32;\n        }\n        for (; i < nv && carry; i++) {\n            sum = (ULONGLONG)v[i]\n                + (ULONGLONG)carry;\n            v[i] = sum & 0xffffffff;\n            carry = sum >> 32;\n        }\n    }\n    return carry;\n}\n\n#ifdef AVAIL_32BIT_VAR\n/* perform integral division with operand p as dividend. Parameter n indicates \n   number of available DWORDs in divisor p, but available space in p must be \n   actually at least 2 * n DWORDs, because the remainder of the integral \n   division is built in the next n DWORDs past the start of the quotient. This \n   routine replaces the dividend in p with the quotient, and appends n \n   additional DWORDs for the remainder.\n\n   Thanks to Lee & Mark Atkinson for their book _Using_C_ (my very first book on\n   C/C++ :-) where the \"longhand binary division\" algorithm was exposed for the\n   source code to the VLI (Very Large Integer) division operator. This algorithm\n   was then heavily modified by me (Alex Villacis Lasso) in order to handle\n   variably-scaled integers such as the MS DECIMAL representation.\n */\nstatic void VARIANT_int_div(DWORD * p, unsigned int n, const DWORD * divisor,\n    unsigned int dn)\n{\n    unsigned int i;\n    DWORD tempsub[8];\n    DWORD * negdivisor = tempsub + n;\n\n    /* build 2s-complement of divisor */\n    for (i = 0; i < n; i++) negdivisor[i] = (i < dn) ? ~divisor[i] : 0xFFFFFFFF;\n    p[n] = 1;\n    VARIANT_int_add(negdivisor, n, p + n, 1);\n    memset(p + n, 0, n * sizeof(DWORD));\n\n    /* skip all leading zero DWORDs in quotient */\n    for (i = 0; i < n && !p[n - 1]; i++) VARIANT_int_shiftleft(p, n, 32);\n    /* i is now number of DWORDs left to process */\n    for (i <<= 5; i < (n << 5); i++) {\n        VARIANT_int_shiftleft(p, n << 1, 1);    /* shl quotient+remainder */\n\n        /* trial subtraction */\n        memcpy(tempsub, p + n, n * sizeof(DWORD));\n        VARIANT_int_add(tempsub, n, negdivisor, n);\n\n        /* check whether result of subtraction was negative */\n        if ((tempsub[n - 1] & 0x80000000) == 0) {\n            memcpy(p + n, tempsub, n * sizeof(DWORD));\n            p[0] |= 1;\n        }\n    }\n}\n\n/* perform integral multiplication by a byte operand. Used for scaling by 10 */\nstatic unsigned char VARIANT_int_mulbychar(DWORD * p, unsigned int n, unsigned char m)\n{\n    unsigned int i;\n    ULONG iOverflowMul;\n    \n    for (iOverflowMul = 0, i = 0; i < n; i++)\n        p[i] = VARIANT_Mul(p[i], m, &iOverflowMul);\n    return (unsigned char)iOverflowMul;\n}\n\n/* increment value in A by the value indicated in B, with scale adjusting. \n   Modifies parameters by adjusting scales. Returns 0 if addition was \n   successful, nonzero if a parameter underflowed before it could be \n   successfully used in the addition.\n */\nstatic int VARIANT_int_addlossy(\n    DWORD * a, int * ascale, unsigned int an,\n    DWORD * b, int * bscale, unsigned int bn)\n{\n    int underflow = 0;\n\n    if (VARIANT_int_iszero(a, an)) {\n        /* if A is zero, copy B into A, after removing digits */\n        while (bn > an && !VARIANT_int_iszero(b + an, bn - an)) {\n            VARIANT_int_divbychar(b, bn, 10);\n            (*bscale)--;\n        }\n        memcpy(a, b, an * sizeof(DWORD));\n        *ascale = *bscale;\n    } else if (!VARIANT_int_iszero(b, bn)) {\n        unsigned int tn = an + 1;\n        DWORD t[5];\n\n        if (bn + 1 > tn) tn = bn + 1;\n        if (*ascale != *bscale) {\n            /* first (optimistic) try - try to scale down the one with the bigger\n               scale, while this number is divisible by 10 */\n            DWORD * digitchosen;\n            unsigned int nchosen;\n            int * scalechosen;\n            int targetscale;\n\n            if (*ascale < *bscale) {\n                targetscale = *ascale;\n                scalechosen = bscale;\n                digitchosen = b;\n                nchosen = bn;\n            } else {\n                targetscale = *bscale;\n                scalechosen = ascale;\n                digitchosen = a;\n                nchosen = an;\n            }\n            memset(t, 0, tn * sizeof(DWORD));\n            memcpy(t, digitchosen, nchosen * sizeof(DWORD));\n\n            /* divide by 10 until target scale is reached */\n            while (*scalechosen > targetscale) {\n                unsigned char remainder = VARIANT_int_divbychar(t, tn, 10);\n                if (!remainder) {\n                    (*scalechosen)--;\n                    memcpy(digitchosen, t, nchosen * sizeof(DWORD));\n                } else break;\n            }\n        }\n\n        if (*ascale != *bscale) {\n            DWORD * digitchosen;\n            unsigned int nchosen;\n            int * scalechosen;\n            int targetscale;\n\n            /* try to scale up the one with the smaller scale */\n            if (*ascale > *bscale) {\n                targetscale = *ascale;\n                scalechosen = bscale;\n                digitchosen = b;\n                nchosen = bn;\n            } else {\n                targetscale = *bscale;\n                scalechosen = ascale;\n                digitchosen = a;\n                nchosen = an;\n            }\n            memset(t, 0, tn * sizeof(DWORD));\n            memcpy(t, digitchosen, nchosen * sizeof(DWORD));\n\n            /* multiply by 10 until target scale is reached, or\n               significant bytes overflow the number\n             */\n            while (*scalechosen < targetscale && t[nchosen] == 0) {\n                VARIANT_int_mulbychar(t, tn, 10);\n                if (t[nchosen] == 0) {\n                    /* still does not overflow */\n                    (*scalechosen)++;\n                    memcpy(digitchosen, t, nchosen * sizeof(DWORD));\n                }\n            }\n        }\n\n        if (*ascale != *bscale) {\n            /* still different? try to scale down the one with the bigger scale\n               (this *will* lose significant digits) */\n            DWORD * digitchosen;\n            unsigned int nchosen;\n            int * scalechosen;\n            int targetscale;\n\n            if (*ascale < *bscale) {\n                targetscale = *ascale;\n                scalechosen = bscale;\n                digitchosen = b;\n                nchosen = bn;\n            } else {\n                targetscale = *bscale;\n                scalechosen = ascale;\n                digitchosen = a;\n                nchosen = an;\n            }\n            memset(t, 0, tn * sizeof(DWORD));\n            memcpy(t, digitchosen, nchosen * sizeof(DWORD));\n\n            /* divide by 10 until target scale is reached */\n            while (*scalechosen > targetscale) {\n                VARIANT_int_divbychar(t, tn, 10);\n                (*scalechosen)--;\n                memcpy(digitchosen, t, nchosen * sizeof(DWORD));\n            }\n        }\n\n        /* check whether any of the operands still has significant digits\n           (underflow case 1)\n         */\n        if (VARIANT_int_iszero(a, an) || VARIANT_int_iszero(b, bn)) {\n            underflow = 1;\n        } else {\n            /* at this step, both numbers have the same scale and can be added\n               as integers. However, the result might not fit in A, so further\n               scaling down might be necessary.\n             */\n            while (!underflow) {\n                memset(t, 0, tn * sizeof(DWORD));\n                memcpy(t, a, an * sizeof(DWORD));\n\n                VARIANT_int_add(t, tn, b, bn);\n                if (VARIANT_int_iszero(t + an, tn - an)) {\n                    /* addition was successful */\n                    memcpy(a, t, an * sizeof(DWORD));\n                    break;\n                } else {\n                    /* addition overflowed - remove significant digits\n                       from both operands and try again */\n                    VARIANT_int_divbychar(a, an, 10); (*ascale)--;\n                    VARIANT_int_divbychar(b, bn, 10); (*bscale)--;\n                    /* check whether any operand keeps significant digits after\n                       scaledown (underflow case 2)\n                     */\n                    underflow = (VARIANT_int_iszero(a, an) || VARIANT_int_iszero(b, bn));\n                }\n            }\n        }\n    }\n    return underflow;\n}\n\n/* perform complete DECIMAL division in the internal representation. Returns\n   0 if the division was completed (even if quotient is set to 0), or nonzero\n   in case of quotient overflow.\n */\nstatic HRESULT VARIANT_DI_div(const VARIANT_DI * dividend, const VARIANT_DI * divisor,\n                              VARIANT_DI * quotient, BOOL round_remainder)\n{\n    HRESULT r_overflow = S_OK;\n\n    if (VARIANT_int_iszero(divisor->bitsnum, ARRAY_SIZE(divisor->bitsnum))) {\n        /* division by 0 */\n        r_overflow = DISP_E_DIVBYZERO;\n    } else if (VARIANT_int_iszero(dividend->bitsnum, ARRAY_SIZE(dividend->bitsnum))) {\n        VARIANT_DI_clear(quotient);\n    } else {\n        int quotientscale, remainderscale, tempquotientscale;\n        DWORD remainderplusquotient[8];\n        int underflow;\n\n        quotientscale = remainderscale = (int)dividend->scale - (int)divisor->scale;\n        tempquotientscale = quotientscale;\n        VARIANT_DI_clear(quotient);\n        quotient->sign = (dividend->sign ^ divisor->sign) ? 1 : 0;\n\n        /*  The following strategy is used for division\n            1) if there was a nonzero remainder from previous iteration, use it as\n               dividend for this iteration, else (for first iteration) use intended\n               dividend\n            2) perform integer division in temporary buffer, develop quotient in\n               low-order part, remainder in high-order part\n            3) add quotient from step 2 to final result, with possible loss of\n               significant digits\n            4) multiply integer part of remainder by 10, while incrementing the\n               scale of the remainder. This operation preserves the intended value\n               of the remainder.\n            5) loop to step 1 until one of the following is true:\n                a) remainder is zero (exact division achieved)\n                b) addition in step 3 fails to modify bits in quotient (remainder underflow)\n         */\n        memset(remainderplusquotient, 0, sizeof(remainderplusquotient));\n        memcpy(remainderplusquotient, dividend->bitsnum, sizeof(dividend->bitsnum));\n        do {\n            VARIANT_int_div(remainderplusquotient, 4, divisor->bitsnum, ARRAY_SIZE(divisor->bitsnum));\n            underflow = VARIANT_int_addlossy( quotient->bitsnum, &quotientscale,\n                ARRAY_SIZE(quotient->bitsnum), remainderplusquotient, &tempquotientscale, 4);\n            if (round_remainder) {\n                if(remainderplusquotient[4] >= 5){\n                    unsigned int i;\n                    unsigned char remainder = 1;\n                    for (i = 0; i < ARRAY_SIZE(quotient->bitsnum) && remainder; i++) {\n                        ULONGLONG digit = quotient->bitsnum[i] + 1;\n                        remainder = (digit > 0xFFFFFFFF) ? 1 : 0;\n                        quotient->bitsnum[i] = digit & 0xFFFFFFFF;\n                    }\n                }\n                memset(remainderplusquotient, 0, sizeof(remainderplusquotient));\n            } else {\n                VARIANT_int_mulbychar(remainderplusquotient + 4, 4, 10);\n                memcpy(remainderplusquotient, remainderplusquotient + 4, 4 * sizeof(DWORD));\n            }\n            tempquotientscale = ++remainderscale;\n        } while (!underflow && !VARIANT_int_iszero(remainderplusquotient + 4, 4));\n\n        /* quotient scale might now be negative (extremely big number). If, so, try\n           to multiply quotient by 10 (without overflowing), while adjusting the scale,\n           until scale is 0. If this cannot be done, it is a real overflow.\n         */\n        while (r_overflow == S_OK && quotientscale < 0) {\n            memset(remainderplusquotient, 0, sizeof(remainderplusquotient));\n            memcpy(remainderplusquotient, quotient->bitsnum, sizeof(quotient->bitsnum));\n            VARIANT_int_mulbychar(remainderplusquotient, ARRAY_SIZE(remainderplusquotient), 10);\n            if (VARIANT_int_iszero(remainderplusquotient + ARRAY_SIZE(quotient->bitsnum),\n                ARRAY_SIZE(remainderplusquotient) - ARRAY_SIZE(quotient->bitsnum))) {\n                quotientscale++;\n                memcpy(quotient->bitsnum, remainderplusquotient, sizeof(quotient->bitsnum));\n            } else r_overflow = DISP_E_OVERFLOW;\n        }\n        if (r_overflow == S_OK) {\n            if (quotientscale <= 255) quotient->scale = quotientscale;\n            else VARIANT_DI_clear(quotient);\n        }\n    }\n    return r_overflow;\n}\n\n/* This procedure receives a VARIANT_DI with a defined mantissa and sign, but\n   with an undefined scale, which will be assigned to (if possible). It also\n   receives an exponent of 2. This procedure will then manipulate the mantissa\n   and calculate a corresponding scale, so that the exponent2 value is assimilated\n   into the VARIANT_DI and is therefore no longer necessary. Returns S_OK if\n   successful, or DISP_E_OVERFLOW if the represented value is too big to fit into\n   a DECIMAL. */\nstatic HRESULT VARIANT_DI_normalize(VARIANT_DI * val, int exponent2, BOOL isDouble)\n{\n    HRESULT hres = S_OK;\n    int exponent5, exponent10;\n\n    /* A factor of 2^exponent2 is equivalent to (10^exponent2)/(5^exponent2), and\n       thus equal to (5^-exponent2)*(10^exponent2). After all manipulations,\n       exponent10 might be used to set the VARIANT_DI scale directly. However,\n       the value of 5^-exponent5 must be assimilated into the VARIANT_DI. */\n    exponent5 = -exponent2;\n    exponent10 = exponent2;\n\n    /* Handle exponent5 > 0 */\n    while (exponent5 > 0) {\n        char bPrevCarryBit;\n        char bCurrCarryBit;\n\n        /* In order to multiply the value represented by the VARIANT_DI by 5, it\n           is best to multiply by 10/2. Therefore, exponent10 is incremented, and\n           somehow the mantissa should be divided by 2.  */\n        if ((val->bitsnum[0] & 1) == 0) {\n            /* The mantissa is divisible by 2. Therefore the division can be done\n               without losing significant digits. */\n            exponent10++; exponent5--;\n\n            /* Shift right */\n            bPrevCarryBit = val->bitsnum[2] & 1;\n            val->bitsnum[2] >>= 1;\n            bCurrCarryBit = val->bitsnum[1] & 1;\n            val->bitsnum[1] = (val->bitsnum[1] >> 1) | (bPrevCarryBit ? 0x80000000 : 0);\n            val->bitsnum[0] = (val->bitsnum[0] >> 1) | (bCurrCarryBit ? 0x80000000 : 0);\n        } else {\n            /* The mantissa is NOT divisible by 2. Therefore the mantissa should\n               be multiplied by 5, unless the multiplication overflows. */\n            DWORD temp_bitsnum[3];\n\n            exponent5--;\n\n            memcpy(temp_bitsnum, val->bitsnum, 3 * sizeof(DWORD));\n            if (0 == VARIANT_int_mulbychar(temp_bitsnum, 3, 5)) {\n                /* Multiplication succeeded without overflow, so copy result back\n                   into VARIANT_DI */\n                memcpy(val->bitsnum, temp_bitsnum, 3 * sizeof(DWORD));\n\n                /* Mask out 3 extraneous bits introduced by the multiply */\n            } else {\n                /* Multiplication by 5 overflows. The mantissa should be divided\n                   by 2, and therefore will lose significant digits. */\n                exponent10++;\n\n                /* Shift right */\n                bPrevCarryBit = val->bitsnum[2] & 1;\n                val->bitsnum[2] >>= 1;\n                bCurrCarryBit = val->bitsnum[1] & 1;\n                val->bitsnum[1] = (val->bitsnum[1] >> 1) | (bPrevCarryBit ? 0x80000000 : 0);\n                val->bitsnum[0] = (val->bitsnum[0] >> 1) | (bCurrCarryBit ? 0x80000000 : 0);\n            }\n        }\n    }\n\n    /* Handle exponent5 < 0 */\n    while (exponent5 < 0) {\n        /* In order to divide the value represented by the VARIANT_DI by 5, it\n           is best to multiply by 2/10. Therefore, exponent10 is decremented,\n           and the mantissa should be multiplied by 2 */\n        if ((val->bitsnum[2] & 0x80000000) == 0) {\n            /* The mantissa can withstand a shift-left without overflowing */\n            exponent10--; exponent5++;\n            VARIANT_int_shiftleft(val->bitsnum, 3, 1);\n        } else {\n            /* The mantissa would overflow if shifted. Therefore it should be\n               directly divided by 5. This will lose significant digits, unless\n               by chance the mantissa happens to be divisible by 5 */\n            exponent5++;\n            VARIANT_int_divbychar(val->bitsnum, 3, 5);\n        }\n    }\n\n    /* At this point, the mantissa has assimilated the exponent5, but the\n       exponent10 might not be suitable for assignment. The exponent10 must be\n       in the range [-DEC_MAX_SCALE..0], so the mantissa must be scaled up or\n       down appropriately. */\n    while (hres == S_OK && exponent10 > 0) {\n        /* In order to bring exponent10 down to 0, the mantissa should be\n           multiplied by 10 to compensate. If the exponent10 is too big, this\n           will cause the mantissa to overflow. */\n        if (0 == VARIANT_int_mulbychar(val->bitsnum, 3, 10)) {\n            exponent10--;\n        } else {\n            hres = DISP_E_OVERFLOW;\n        }\n    }\n    while (exponent10 < -DEC_MAX_SCALE) {\n        int rem10;\n        /* In order to bring exponent up to -DEC_MAX_SCALE, the mantissa should\n           be divided by 10 to compensate. If the exponent10 is too small, this\n           will cause the mantissa to underflow and become 0 */\n        rem10 = VARIANT_int_divbychar(val->bitsnum, 3, 10);\n        exponent10++;\n        if (VARIANT_int_iszero(val->bitsnum, 3)) {\n            /* Underflow, unable to keep dividing */\n            exponent10 = 0;\n        } else if (rem10 >= 5) {\n            DWORD x = 1;\n            VARIANT_int_add(val->bitsnum, 3, &x, 1);\n        }\n    }\n    /* This step is required in order to remove excess bits of precision from the\n       end of the bit representation, down to the precision guaranteed by the\n       floating point number. */\n    if (isDouble) {\n        while (exponent10 < 0 && (val->bitsnum[2] != 0 || (val->bitsnum[1] & 0xFFE00000) != 0)) {\n            int rem10;\n\n            rem10 = VARIANT_int_divbychar(val->bitsnum, 3, 10);\n            exponent10++;\n            if (rem10 >= 5) {\n                DWORD x = 1;\n                VARIANT_int_add(val->bitsnum, 3, &x, 1);\n            }\n        }\n    } else {\n        while (exponent10 < 0 && (val->bitsnum[2] != 0 || val->bitsnum[1] != 0 ||\n            (val->bitsnum[2] == 0 && val->bitsnum[1] == 0 && (val->bitsnum[0] & 0xFF000000) != 0))) {\n            int rem10;\n\n            rem10 = VARIANT_int_divbychar(val->bitsnum, 3, 10);\n            exponent10++;\n            if (rem10 >= 5) {\n                DWORD x = 1;\n                VARIANT_int_add(val->bitsnum, 3, &x, 1);\n            }\n        }\n    }\n    /* Remove multiples of 10 from the representation */\n    while (exponent10 < 0) {\n        DWORD temp_bitsnum[3];\n\n        memcpy(temp_bitsnum, val->bitsnum, 3 * sizeof(DWORD));\n        if (0 == VARIANT_int_divbychar(temp_bitsnum, 3, 10)) {\n            exponent10++;\n            memcpy(val->bitsnum, temp_bitsnum, 3 * sizeof(DWORD));\n        } else break;\n    }\n\n    /* Scale assignment */\n    if (hres == S_OK) val->scale = -exponent10;\n\n    return hres;\n}\n\ntypedef union\n{\n    struct\n    {\n        unsigned int m : 23;\n        unsigned int exp_bias : 8;\n        unsigned int sign : 1;\n    } i;\n    float f;\n} R4_FIELDS;\n\n/* Convert a 32-bit floating point number into a DECIMAL, without using an\n   intermediate string step. */\nstatic HRESULT VARIANT_DI_FromR4(float source, VARIANT_DI * dest)\n{\n    HRESULT hres = S_OK;\n    R4_FIELDS fx;\n\n    fx.f = source;\n\n    /* Detect special cases */\n    if (fx.i.m == 0 && fx.i.exp_bias == 0) {\n        /* Floating-point zero */\n        VARIANT_DI_clear(dest);\n    } else if (fx.i.m == 0  && fx.i.exp_bias == 0xFF) {\n        /* Floating-point infinity */\n        hres = DISP_E_OVERFLOW;\n    } else if (fx.i.exp_bias == 0xFF) {\n        /* Floating-point NaN */\n        hres = DISP_E_BADVARTYPE;\n    } else {\n        int exponent2;\n        VARIANT_DI_clear(dest);\n\n        exponent2 = fx.i.exp_bias - 127;   /* Get unbiased exponent */\n        dest->sign = fx.i.sign;             /* Sign is simply copied */\n\n        /* Copy significant bits to VARIANT_DI mantissa */\n        dest->bitsnum[0] = fx.i.m;\n        dest->bitsnum[0] &= 0x007FFFFF;\n        if (fx.i.exp_bias == 0) {\n            /* Denormalized number - correct exponent */\n            exponent2++;\n        } else {\n            /* Add hidden bit to mantissa */\n            dest->bitsnum[0] |= 0x00800000;\n        }\n\n        /* The act of copying a FP mantissa as integer bits is equivalent to\n           shifting left the mantissa 23 bits. The exponent2 is reduced to\n           compensate. */\n        exponent2 -= 23;\n\n        hres = VARIANT_DI_normalize(dest, exponent2, FALSE);\n    }\n\n    return hres;\n}\n\ntypedef union\n{\n    struct\n    {\n        unsigned int m_lo : 32;     /* 52 bits of precision */\n        unsigned int m_hi : 20;\n        unsigned int exp_bias : 11; /* bias == 1023 */\n        unsigned int sign : 1;\n    } i;\n    double d;\n} R8_FIELDS;\n\n/* Convert a 64-bit floating point number into a DECIMAL, without using an\n   intermediate string step. */\nstatic HRESULT VARIANT_DI_FromR8(double source, VARIANT_DI * dest)\n{\n    HRESULT hres = S_OK;\n    R8_FIELDS fx;\n\n    fx.d = source;\n\n    /* Detect special cases */\n    if (fx.i.m_lo == 0 && fx.i.m_hi == 0 && fx.i.exp_bias == 0) {\n        /* Floating-point zero */\n        VARIANT_DI_clear(dest);\n    } else if (fx.i.m_lo == 0 && fx.i.m_hi == 0 && fx.i.exp_bias == 0x7FF) {\n        /* Floating-point infinity */\n        hres = DISP_E_OVERFLOW;\n    } else if (fx.i.exp_bias == 0x7FF) {\n        /* Floating-point NaN */\n        hres = DISP_E_BADVARTYPE;\n    } else {\n        int exponent2;\n        VARIANT_DI_clear(dest);\n\n        exponent2 = fx.i.exp_bias - 1023;   /* Get unbiased exponent */\n        dest->sign = fx.i.sign;             /* Sign is simply copied */\n\n        /* Copy significant bits to VARIANT_DI mantissa */\n        dest->bitsnum[0] = fx.i.m_lo;\n        dest->bitsnum[1] = fx.i.m_hi;\n        dest->bitsnum[1] &= 0x000FFFFF;\n        if (fx.i.exp_bias == 0) {\n            /* Denormalized number - correct exponent */\n            exponent2++;\n        } else {\n            /* Add hidden bit to mantissa */\n            dest->bitsnum[1] |= 0x00100000;\n        }\n\n        /* The act of copying a FP mantissa as integer bits is equivalent to\n           shifting left the mantissa 52 bits. The exponent2 is reduced to\n           compensate. */\n        exponent2 -= 52;\n\n        hres = VARIANT_DI_normalize(dest, exponent2, TRUE);\n    }\n\n    return hres;\n}\n\nstatic HRESULT VARIANT_do_division(const DECIMAL *pDecLeft, const DECIMAL *pDecRight, DECIMAL *pDecOut,\n        BOOL round)\n{\n  HRESULT hRet = S_OK;\n  VARIANT_DI di_left, di_right, di_result;\n  HRESULT divresult;\n\n  VARIANT_DIFromDec(pDecLeft, &di_left);\n  VARIANT_DIFromDec(pDecRight, &di_right);\n  divresult = VARIANT_DI_div(&di_left, &di_right, &di_result, round);\n  if (divresult != S_OK)\n  {\n      /* division actually overflowed */\n      hRet = divresult;\n  }\n  else\n  {\n      hRet = S_OK;\n\n      if (di_result.scale > DEC_MAX_SCALE)\n      {\n        unsigned char remainder = 0;\n      \n        /* division underflowed. In order to comply with the MSDN\n           specifications for DECIMAL ranges, some significant digits\n           must be removed\n         */\n        WARN(\"result scale is %u, scaling (with loss of significant digits)...\\n\",\n            di_result.scale);\n        while (di_result.scale > DEC_MAX_SCALE && \n               !VARIANT_int_iszero(di_result.bitsnum, ARRAY_SIZE(di_result.bitsnum)))\n        {\n            remainder = VARIANT_int_divbychar(di_result.bitsnum, ARRAY_SIZE(di_result.bitsnum), 10);\n            di_result.scale--;\n        }\n        if (di_result.scale > DEC_MAX_SCALE)\n        {\n            WARN(\"result underflowed, setting to 0\\n\");\n            di_result.scale = 0;\n            di_result.sign = 0;\n        }\n        else if (remainder >= 5)    /* round up result - native oleaut32 does this */\n        {\n            unsigned int i;\n            for (remainder = 1, i = 0; i < ARRAY_SIZE(di_result.bitsnum) && remainder; i++) {\n                ULONGLONG digit = di_result.bitsnum[i] + 1;\n                remainder = (digit > 0xFFFFFFFF) ? 1 : 0;\n                di_result.bitsnum[i] = digit & 0xFFFFFFFF;\n            }\n        }\n      }\n      VARIANT_DecFromDI(&di_result, pDecOut);\n  }\n  return hRet;\n}\n\n/************************************************************************\n * VarDecDiv (OLEAUT32.178)\n *\n * Divide one DECIMAL by another.\n *\n * PARAMS\n *  pDecLeft  [I] Source\n *  pDecRight [I] Value to divide by\n *  pDecOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarDecDiv16(const DECIMAL* pDecLeft, const DECIMAL* pDecRight, DECIMAL* pDecOut)\n{\n  if (!pDecLeft || !pDecRight || !pDecOut) return E_INVALIDARG;\n\n  return VARIANT_do_division(pDecLeft, pDecRight, pDecOut, FALSE);\n}\n\n/************************************************************************\n * VarDecMul (OLEAUT32.179)\n *\n * Multiply one DECIMAL by another.\n *\n * PARAMS\n *  pDecLeft  [I] Source\n *  pDecRight [I] Value to multiply by\n *  pDecOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarDecMul16(const DECIMAL* pDecLeft, const DECIMAL* pDecRight, DECIMAL* pDecOut)\n{\n  HRESULT hRet = S_OK;\n  VARIANT_DI di_left, di_right, di_result;\n  int mulresult;\n\n  VARIANT_DIFromDec(pDecLeft, &di_left);\n  VARIANT_DIFromDec(pDecRight, &di_right);\n  mulresult = VARIANT_DI_mul(&di_left, &di_right, &di_result);\n  if (mulresult)\n  {\n    /* multiplication actually overflowed */\n    hRet = DISP_E_OVERFLOW;\n  }\n  else\n  {\n    if (di_result.scale > DEC_MAX_SCALE)\n    {\n      /* multiplication underflowed. In order to comply with the MSDN\n         specifications for DECIMAL ranges, some significant digits\n         must be removed\n       */\n      WARN(\"result scale is %u, scaling (with loss of significant digits)...\\n\",\n          di_result.scale);\n      while (di_result.scale > DEC_MAX_SCALE && \n            !VARIANT_int_iszero(di_result.bitsnum, ARRAY_SIZE(di_result.bitsnum)))\n      {\n        VARIANT_int_divbychar(di_result.bitsnum, ARRAY_SIZE(di_result.bitsnum), 10);\n        di_result.scale--;\n      }\n      if (di_result.scale > DEC_MAX_SCALE)\n      {\n        WARN(\"result underflowed, setting to 0\\n\");\n        di_result.scale = 0;\n        di_result.sign = 0;\n      }\n    }\n    VARIANT_DecFromDI(&di_result, pDecOut);\n  }\n  return hRet;\n}\n\n/************************************************************************\n * VarDecSub (OLEAUT32.181)\n *\n * Subtract one DECIMAL from another.\n *\n * PARAMS\n *  pDecLeft  [I] Source\n *  pDecRight [I] DECIMAL to subtract from pDecLeft\n *  pDecOut   [O] Destination\n *\n * RETURNS\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarDecSub16(const DECIMAL* pDecLeft, const DECIMAL* pDecRight, DECIMAL* pDecOut)\n{\n  DECIMAL decRight;\n\n  /* Implement as addition of the negative */\n  VarDecNeg(pDecRight, &decRight);\n  return VarDecAdd(pDecLeft, &decRight, pDecOut);\n}\n\n/************************************************************************\n * VarDecAbs (OLEAUT32.182)\n *\n * Convert a DECIMAL into its absolute value.\n *\n * PARAMS\n *  pDecIn  [I] Source\n *  pDecOut [O] Destination\n *\n * RETURNS\n *  S_OK. This function does not fail.\n */\nHRESULT WINAPI VarDecAbs16(const DECIMAL* pDecIn, DECIMAL* pDecOut)\n{\n  *pDecOut = *pDecIn;\n  DEC_SIGN(pDecOut) &= ~DECIMAL_NEG;\n  return S_OK;\n}\n\n/************************************************************************\n * VarDecFix (OLEAUT32.187)\n *\n * Return the integer portion of a DECIMAL.\n *\n * PARAMS\n *  pDecIn  [I] Source\n *  pDecOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n *\n * NOTES\n *  - The difference between this function and VarDecInt() is that VarDecInt() rounds\n *    negative numbers away from 0, while this function rounds them towards zero.\n */\nHRESULT WINAPI VarDecFix16(const DECIMAL* pDecIn, DECIMAL* pDecOut)\n{\n  double dbl;\n  HRESULT hr;\n\n  if (DEC_SIGN(pDecIn) & ~DECIMAL_NEG)\n    return E_INVALIDARG;\n\n  if (!DEC_SCALE(pDecIn))\n  {\n    *pDecOut = *pDecIn; /* Already an integer */\n    return S_OK;\n  }\n\n  hr = VarR8FromDec(pDecIn, &dbl);\n  if (SUCCEEDED(hr)) {\n    LONGLONG rounded = dbl;\n\n    hr = VarDecFromI8(rounded, pDecOut);\n  }\n  return hr;\n}\n\n/************************************************************************\n * VarDecInt (OLEAUT32.188)\n *\n * Return the integer portion of a DECIMAL.\n *\n * PARAMS\n *  pDecIn  [I] Source\n *  pDecOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n *\n * NOTES\n *  - The difference between this function and VarDecFix() is that VarDecFix() rounds\n *    negative numbers towards 0, while this function rounds them away from zero.\n */\nHRESULT WINAPI VarDecInt16(const DECIMAL* pDecIn, DECIMAL* pDecOut)\n{\n  double dbl;\n  HRESULT hr;\n\n  if (DEC_SIGN(pDecIn) & ~DECIMAL_NEG)\n    return E_INVALIDARG;\n\n  if (!(DEC_SIGN(pDecIn) & DECIMAL_NEG) || !DEC_SCALE(pDecIn))\n    return VarDecFix(pDecIn, pDecOut); /* The same, if +ve or no fractionals */\n\n  hr = VarR8FromDec(pDecIn, &dbl);\n  if (SUCCEEDED(hr)) {\n    LONGLONG rounded = dbl >= 0.0 ? dbl + 0.5 : dbl - 0.5;\n\n    hr = VarDecFromI8(rounded, pDecOut);\n  }\n  return hr;\n}\n\n/************************************************************************\n * VarDecNeg (OLEAUT32.189)\n *\n * Change the sign of a DECIMAL.\n *\n * PARAMS\n *  pDecIn  [I] Source\n *  pDecOut [O] Destination\n *\n * RETURNS\n *  S_OK. This function does not fail.\n */\nHRESULT WINAPI VarDecNeg16(const DECIMAL* pDecIn, DECIMAL* pDecOut)\n{\n  *pDecOut = *pDecIn;\n  DEC_SIGN(pDecOut) ^= DECIMAL_NEG;\n  return S_OK;\n}\n\n/************************************************************************\n * VarDecRound (OLEAUT32.203)\n *\n * Change the precision of a DECIMAL.\n *\n * PARAMS\n *  pDecIn    [I] Source\n *  cDecimals [I] New number of decimals to keep\n *  pDecOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK. pDecOut contains the rounded value.\n *  Failure: E_INVALIDARG if any argument is invalid.\n */\nHRESULT WINAPI VarDecRound16(const DECIMAL* pDecIn, int cDecimals, DECIMAL* pDecOut)\n{\n  DECIMAL divisor, tmp;\n  HRESULT hr;\n  unsigned int i;\n\n  if (cDecimals < 0 || (DEC_SIGN(pDecIn) & ~DECIMAL_NEG) || DEC_SCALE(pDecIn) > DEC_MAX_SCALE)\n    return E_INVALIDARG;\n\n  if (cDecimals >= DEC_SCALE(pDecIn))\n  {\n    *pDecOut = *pDecIn; /* More precision than we have */\n    return S_OK;\n  }\n\n  /* truncate significant digits and rescale */\n  memset(&divisor, 0, sizeof(divisor));\n  DEC_LO64(&divisor) = 1;\n\n  memset(&tmp, 0, sizeof(tmp));\n  DEC_LO64(&tmp) = 10;\n  for (i = 0; i < DEC_SCALE(pDecIn) - cDecimals; ++i)\n  {\n    hr = VarDecMul(&divisor, &tmp, &divisor);\n    if (FAILED(hr))\n      return hr;\n  }\n\n  hr = VARIANT_do_division(pDecIn, &divisor, pDecOut, TRUE);\n  if (FAILED(hr))\n    return hr;\n\n  DEC_SCALE(pDecOut) = cDecimals;\n\n  return S_OK;\n}\n\n/************************************************************************\n * VarDecCmp (OLEAUT32.204)\n *\n * Compare two DECIMAL values.\n *\n * PARAMS\n *  pDecLeft  [I] Source\n *  pDecRight [I] Value to compare\n *\n * RETURNS\n *  Success: VARCMP_LT, VARCMP_EQ or VARCMP_GT indicating that pDecLeft\n *           is less than, equal to or greater than pDecRight respectively.\n *  Failure: DISP_E_OVERFLOW, if overflow occurs during the comparison\n */\nHRESULT WINAPI VarDecCmp16(const DECIMAL* pDecLeft, const DECIMAL* pDecRight)\n{\n  HRESULT hRet;\n  DECIMAL result;\n\n  if (!pDecLeft || !pDecRight)\n    return VARCMP_NULL;\n\n  if ((!(DEC_SIGN(pDecLeft) & DECIMAL_NEG)) && (DEC_SIGN(pDecRight) & DECIMAL_NEG) &&\n      (DEC_HI32(pDecLeft) | DEC_MID32(pDecLeft) | DEC_LO32(pDecLeft)))\n    return VARCMP_GT;\n  else if ((DEC_SIGN(pDecLeft) & DECIMAL_NEG) && (!(DEC_SIGN(pDecRight) & DECIMAL_NEG)) &&\n      (DEC_HI32(pDecLeft) | DEC_MID32(pDecLeft) | DEC_LO32(pDecLeft)))\n    return VARCMP_LT;\n\n  /* Subtract right from left, and compare the result to 0 */\n  hRet = VarDecSub(pDecLeft, pDecRight, &result);\n\n  if (SUCCEEDED(hRet))\n  {\n    int non_zero = DEC_HI32(&result) | DEC_MID32(&result) | DEC_LO32(&result);\n\n    if ((DEC_SIGN(&result) & DECIMAL_NEG) && non_zero)\n      hRet = (HRESULT)VARCMP_LT;\n    else if (non_zero)\n      hRet = (HRESULT)VARCMP_GT;\n    else\n      hRet = (HRESULT)VARCMP_EQ;\n  }\n  return hRet;\n}\n\n/************************************************************************\n * VarDecCmpR8 (OLEAUT32.298)\n *\n * Compare a DECIMAL to a double\n *\n * PARAMS\n *  pDecLeft [I] DECIMAL Source\n *  dblRight [I] double to compare to pDecLeft\n *\n * RETURNS\n *  Success: VARCMP_LT, VARCMP_EQ or VARCMP_GT indicating that dblRight\n *           is less than, equal to or greater than pDecLeft respectively.\n *  Failure: DISP_E_OVERFLOW, if overflow occurs during the comparison\n */\nHRESULT WINAPI VarDecCmpR816(const DECIMAL* pDecLeft, double dblRight)\n{\n  HRESULT hRet;\n  DECIMAL decRight;\n\n  hRet = VarDecFromR8(dblRight, &decRight);\n\n  if (SUCCEEDED(hRet))\n    hRet = VarDecCmp(pDecLeft, &decRight);\n\n  return hRet;\n}\n#endif\n\n/* BOOL\n */\n\n/************************************************************************\n * VarBoolFromUI1 (OLEAUT32.118)\n *\n * Convert a VT_UI1 to a VT_BOOL.\n *\n * PARAMS\n *  bIn      [I] Source\n *  pBoolOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarBoolFromUI116(BYTE bIn, VARIANT_BOOL *pBoolOut)\n{\n  *pBoolOut = bIn ? VARIANT_TRUE : VARIANT_FALSE;\n  return S_OK;\n}\n\n/************************************************************************\n * VarBoolFromI2 (OLEAUT32.119)\n *\n * Convert a VT_I2 to a VT_BOOL.\n *\n * PARAMS\n *  sIn      [I] Source\n *  pBoolOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarBoolFromI216(SHORT sIn, VARIANT_BOOL *pBoolOut)\n{\n  *pBoolOut = sIn ? VARIANT_TRUE : VARIANT_FALSE;\n  return S_OK;\n}\n\n/************************************************************************\n * VarBoolFromI4 (OLEAUT32.120)\n *\n * Convert a VT_I4 to a VT_BOOL.\n *\n * PARAMS\n *  sIn      [I] Source\n *  pBoolOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarBoolFromI416(LONG lIn, VARIANT_BOOL *pBoolOut)\n{\n  *pBoolOut = lIn ? VARIANT_TRUE : VARIANT_FALSE;\n  return S_OK;\n}\n\n/************************************************************************\n * VarBoolFromR4 (OLEAUT32.121)\n *\n * Convert a VT_R4 to a VT_BOOL.\n *\n * PARAMS\n *  fltIn    [I] Source\n *  pBoolOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarBoolFromR416(FLOAT fltIn, VARIANT_BOOL *pBoolOut)\n{\n  *pBoolOut = fltIn ? VARIANT_TRUE : VARIANT_FALSE;\n  return S_OK;\n}\n\n/************************************************************************\n * VarBoolFromR8 (OLEAUT32.122)\n *\n * Convert a VT_R8 to a VT_BOOL.\n *\n * PARAMS\n *  dblIn    [I] Source\n *  pBoolOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarBoolFromR816(double dblIn, VARIANT_BOOL *pBoolOut)\n{\n  *pBoolOut = dblIn ? VARIANT_TRUE : VARIANT_FALSE;\n  return S_OK;\n}\n\n/************************************************************************\n * VarBoolFromDate (OLEAUT32.123)\n *\n * Convert a VT_DATE to a VT_BOOL.\n *\n * PARAMS\n *  dateIn   [I] Source\n *  pBoolOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarBoolFromDate16(DATE dateIn, VARIANT_BOOL *pBoolOut)\n{\n  *pBoolOut = dateIn ? VARIANT_TRUE : VARIANT_FALSE;\n  return S_OK;\n}\n\n/************************************************************************\n * VarBoolFromCy (OLEAUT32.124)\n *\n * Convert a VT_CY to a VT_BOOL.\n *\n * PARAMS\n *  cyIn     [I] Source\n *  pBoolOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarBoolFromCy16(CY cyIn, VARIANT_BOOL *pBoolOut)\n{\n  *pBoolOut = cyIn.int64 ? VARIANT_TRUE : VARIANT_FALSE;\n  return S_OK;\n}\n\n/************************************************************************\n * VARIANT_GetLocalisedText [internal]\n *\n * Get a localized string from the resources\n *\n */\nstatic BOOL VARIANT_GetLocalisedText(LANGID langId, DWORD dwId, OLECHAR16 *lpszDest)\n{\n  HRSRC hrsrc;\n\n  FIXME(\"\\n\");\n#if 0\n  hrsrc = FindResourceExA( hProxyDll, (LPWSTR)RT_STRING,\n                           MAKEINTRESOURCEA((dwId >> 4) + 1), langId );\n  if (hrsrc)\n  {\n    HGLOBAL hmem = LoadResource( hProxyDll, hrsrc );\n\n    if (hmem)\n    {\n      const OLECHAR16 *p;\n      unsigned int i;\n\n      p = LockResource( hmem );\n      for (i = 0; i < (dwId & 0x0f); i++) p += *p + 1;\n\n      memcpy( lpszDest, p + 1, *p * sizeof(OLECHAR16) );\n      lpszDest[*p] = '\\0';\n      TRACE(\"got %s for LANGID %08x\\n\", debugstr_a(lpszDest), langId);\n      return TRUE;\n    }\n  }\n#endif\n  return FALSE;\n}\n\n/************************************************************************\n * VarBoolFromStr (OLEAUT32.125)\n *\n * Convert a VT_BSTR to a VT_BOOL.\n *\n * PARAMS\n *  strIn    [I] Source\n *  lcid     [I] LCID for the conversion\n *  dwFlags  [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pBoolOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if pBoolOut is invalid.\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n *\n * NOTES\n *  - strIn will be recognised if it contains \"#TRUE#\" or \"#FALSE#\". Additionally,\n *  it may contain (in any case mapping) the text \"true\" or \"false\".\n *  - If dwFlags includes VAR_LOCALBOOL, then the text may also match the\n *  localised text of \"True\" or \"False\" in the language specified by lcid.\n *  - If none of these matches occur, the string is treated as a numeric string\n *  and the boolean pBoolOut will be set according to whether the number is zero\n *  or not. The dwFlags parameter is passed to VarR8FromStr() for this conversion.\n *  - If the text is not numeric and does not match any of the above, then\n *  DISP_E_TYPEMISMATCH is returned.\n */\nHRESULT WINAPI VarBoolFromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, VARIANT_BOOL *pBoolOut)\n{\n  /* Any VB/VBA programmers out there should recognise these strings... */\n  static const OLECHAR16 szFalse[] = { '#','F','A','L','S','E','#','\\0' };\n  static const OLECHAR16 szTrue[] = { '#','T','R','U','E','#','\\0' };\n  OLECHAR16 szBuff[64];\n  LANGID langId = MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT);\n  HRESULT hRes = S_OK;\n\n  if (!strIn || !pBoolOut)\n    return DISP_E_TYPEMISMATCH;\n\n  /* Check if we should be comparing against localised text */\n  if (dwFlags & VAR_LOCALBOOL)\n  {\n    /* Convert our LCID into a usable value */\n    lcid = ConvertDefaultLocale(lcid);\n\n    langId = LANGIDFROMLCID(lcid);\n\n    if (PRIMARYLANGID(langId) == LANG_NEUTRAL)\n      langId = MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT);\n\n    /* Note: Native oleaut32 always copies strIn and maps halfwidth characters.\n     * I don't think this is needed unless any of the localised text strings\n     * contain characters that can be so mapped. In the event that this is\n     * true for a given language (possibly some Asian languages), then strIn\n     * should be mapped here _only_ if langId is an Id for which this can occur.\n     */\n  }\n\n  /* Note that if we are not comparing against localised strings, langId\n   * will have its default value of LANG_ENGLISH. This allows us to mimic\n   * the native behaviour of always checking against English strings even\n   * after we've checked for localised ones.\n   */\nVarBoolFromStr_CheckLocalised:\n  if (VARIANT_GetLocalisedText(langId, IDS_TRUE, szBuff))\n  {\n    /* Compare against localised strings, ignoring case */\n    if (!strcmpiA(strIn, szBuff))\n    {\n      *pBoolOut = VARIANT_TRUE; /* Matched localised 'true' text */\n      return hRes;\n    }\n    VARIANT_GetLocalisedText(langId, IDS_FALSE, szBuff);\n    if (!strcmpiA(strIn, szBuff))\n    {\n      *pBoolOut = VARIANT_FALSE; /* Matched localised 'false' text */\n      return hRes;\n    }\n  }\n\n  if (langId != MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT))\n  {\n    /* We have checked the localised text, now check English */\n    langId = MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT);\n    goto VarBoolFromStr_CheckLocalised;\n  }\n\n  /* All checks against localised text have failed, try #TRUE#/#FALSE# */\n  if (!strcmpA(strIn, szFalse))\n    *pBoolOut = VARIANT_FALSE;\n  else if (!strcmpA(strIn, szTrue))\n    *pBoolOut = VARIANT_TRUE;\n  else\n  {\n    double d;\n\n    /* If this string is a number, convert it as one */\n    hRes = VarR8FromStr(strIn, lcid, dwFlags, &d);\n    if (SUCCEEDED(hRes)) *pBoolOut = d ? VARIANT_TRUE : VARIANT_FALSE;\n  }\n  return hRes;\n}\n\n/************************************************************************\n * VarBoolFromDisp (OLEAUT32.126)\n *\n * Convert a VT_DISPATCH to a VT_BOOL.\n *\n * PARAMS\n *  pdispIn   [I] Source\n *  lcid      [I] LCID for conversion\n *  pBoolOut  [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarBoolFromDisp16(SEGIDispatch pdispIn, LCID lcid, VARIANT_BOOL *pBoolOut)\n{\n  return VARIANT_FromDisp(pdispIn, lcid, pBoolOut, VT_BOOL, 0);\n}\n\n/************************************************************************\n * VarBoolFromI1 (OLEAUT32.233)\n *\n * Convert a VT_I1 to a VT_BOOL.\n *\n * PARAMS\n *  cIn      [I] Source\n *  pBoolOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarBoolFromI116(signed char cIn, VARIANT_BOOL *pBoolOut)\n{\n  *pBoolOut = cIn ? VARIANT_TRUE : VARIANT_FALSE;\n  return S_OK;\n}\n\n/************************************************************************\n * VarBoolFromUI2 (OLEAUT32.234)\n *\n * Convert a VT_UI2 to a VT_BOOL.\n *\n * PARAMS\n *  usIn     [I] Source\n *  pBoolOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarBoolFromUI216(USHORT usIn, VARIANT_BOOL *pBoolOut)\n{\n  *pBoolOut = usIn ? VARIANT_TRUE : VARIANT_FALSE;\n  return S_OK;\n}\n\n/************************************************************************\n * VarBoolFromUI4 (OLEAUT32.235)\n *\n * Convert a VT_UI4 to a VT_BOOL.\n *\n * PARAMS\n *  ulIn     [I] Source\n *  pBoolOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarBoolFromUI416(ULONG ulIn, VARIANT_BOOL *pBoolOut)\n{\n  *pBoolOut = ulIn ? VARIANT_TRUE : VARIANT_FALSE;\n  return S_OK;\n}\n\n#ifdef AVAIL_32BIT_VAR\n/************************************************************************\n * VarBoolFromDec (OLEAUT32.236)\n *\n * Convert a VT_DECIMAL to a VT_BOOL.\n *\n * PARAMS\n *  pDecIn   [I] Source\n *  pBoolOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if pDecIn is invalid.\n */\nHRESULT WINAPI VarBoolFromDec16(DECIMAL* pDecIn, VARIANT_BOOL *pBoolOut)\n{\n  if (DEC_SCALE(pDecIn) > DEC_MAX_SCALE || (DEC_SIGN(pDecIn) & ~DECIMAL_NEG))\n    return E_INVALIDARG;\n\n  if (DEC_HI32(pDecIn) || DEC_MID32(pDecIn) || DEC_LO32(pDecIn))\n    *pBoolOut = VARIANT_TRUE;\n  else\n    *pBoolOut = VARIANT_FALSE;\n  return S_OK;\n}\n#endif\n\n/************************************************************************\n * VarBoolFromI8 (OLEAUT32.370)\n *\n * Convert a VT_I8 to a VT_BOOL.\n *\n * PARAMS\n *  ullIn    [I] Source\n *  pBoolOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarBoolFromI816(LONG64 llIn, VARIANT_BOOL *pBoolOut)\n{\n  *pBoolOut = llIn ? VARIANT_TRUE : VARIANT_FALSE;\n  return S_OK;\n}\n\n/************************************************************************\n * VarBoolFromUI8 (OLEAUT32.371)\n *\n * Convert a VT_UI8 to a VT_BOOL.\n *\n * PARAMS\n *  ullIn    [I] Source\n *  pBoolOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarBoolFromUI816(ULONG64 ullIn, VARIANT_BOOL *pBoolOut)\n{\n  *pBoolOut = ullIn ? VARIANT_TRUE : VARIANT_FALSE;\n  return S_OK;\n}\n\n/* SEGBSTR16\n */\n\n/* Write a number from a UI8 and sign */\nstatic OLECHAR16 *VARIANT_WriteNumber(ULONG64 ulVal, OLECHAR16* szOut)\n{\n  do\n  {\n    OLECHAR16 ulNextDigit = ulVal % 10;\n\n    *szOut-- = '0' + ulNextDigit;\n    ulVal = (ulVal - ulNextDigit) / 10;\n  } while (ulVal);\n\n  szOut++;\n  return szOut;\n}\n\n/* Create a (possibly localised) SEGBSTR16 from a UI8 and sign */\nstatic SEGBSTR16 VARIANT_MakeBstr(LCID lcid, DWORD dwFlags, OLECHAR16 *szOut)\n{\n  OLECHAR16 szConverted[256];\n\n  if (dwFlags & VAR_NEGATIVE)\n    *--szOut = '-';\n\n  if (dwFlags & LOCALE_USE_NLS)\n  {\n    /* Format the number for the locale */\n    szConverted[0] = '\\0';\n    GetNumberFormatA(lcid, dwFlags & LOCALE_NOUSEROVERRIDE,\n                     szOut, NULL, szConverted, ARRAY_SIZE(szConverted));\n    szOut = szConverted;\n  }\n  return SysAllocStringByteLen16((LPCSTR)szOut, strlen(szOut) * sizeof(OLECHAR16));\n}\n\n/* Create a (possibly localised) SEGBSTR16 from a UI8 and sign */\nstatic HRESULT VARIANT_BstrFromUInt(ULONG64 ulVal, LCID lcid, DWORD dwFlags, SEGBSTR16 *pbstrOut)\n{\n  OLECHAR16 szBuff[64], *szOut = szBuff + ARRAY_SIZE(szBuff) - 1;\n\n  if (!pbstrOut)\n    return E_INVALIDARG;\n\n  /* Create the basic number string */\n  *szOut-- = '\\0';\n  szOut = VARIANT_WriteNumber(ulVal, szOut);\n\n  *pbstrOut = VARIANT_MakeBstr(lcid, dwFlags, szOut);\n  TRACE(\"returning %s\\n\", debugstr_a(MapSL(*pbstrOut)));\n  return *pbstrOut ? S_OK : E_OUTOFMEMORY;\n}\n\n/******************************************************************************\n * VarBstrFromUI1 (OLEAUT32.108)\n *\n * Convert a VT_UI1 to a VT_BSTR.\n *\n * PARAMS\n *  bIn      [I] Source\n *  lcid     [I] LCID for the conversion\n *  dwFlags  [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pbstrOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if pbstrOut is invalid.\n *           E_OUTOFMEMORY, if memory allocation fails.\n */\nHRESULT WINAPI VarBstrFromUI116(BYTE bIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut)\n{\n  return VARIANT_BstrFromUInt(bIn, lcid, dwFlags, pbstrOut);\n}\n\n/******************************************************************************\n * VarBstrFromI2 (OLEAUT32.109)\n *\n * Convert a VT_I2 to a VT_BSTR.\n *\n * PARAMS\n *  sIn      [I] Source\n *  lcid     [I] LCID for the conversion\n *  dwFlags  [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pbstrOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if pbstrOut is invalid.\n *           E_OUTOFMEMORY, if memory allocation fails.\n */\nHRESULT WINAPI VarBstrFromI216(short sIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut)\n{\n  ULONG64 ul64 = sIn;\n\n  if (sIn < 0)\n  {\n    ul64 = -sIn;\n    dwFlags |= VAR_NEGATIVE;\n  }\n  return VARIANT_BstrFromUInt(ul64, lcid, dwFlags, pbstrOut);\n}\n\n/******************************************************************************\n * VarBstrFromI4 (OLEAUT32.110)\n *\n * Convert a VT_I4 to a VT_BSTR.\n *\n * PARAMS\n *  lIn      [I] Source\n *  lcid     [I] LCID for the conversion\n *  dwFlags  [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pbstrOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if pbstrOut is invalid.\n *           E_OUTOFMEMORY, if memory allocation fails.\n */\nHRESULT WINAPI VarBstrFromI416(LONG lIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut)\n{\n  ULONG64 ul64 = lIn;\n\n  if (lIn < 0)\n  {\n    ul64 = -(LONG64)lIn;\n    dwFlags |= VAR_NEGATIVE;\n  }\n  return VARIANT_BstrFromUInt(ul64, lcid, dwFlags, pbstrOut);\n}\n\nstatic SEGBSTR16 VARIANT_BstrReplaceDecimal(const OLECHAR16 * buff, LCID lcid, ULONG dwFlags)\n{\n  SEGBSTR16 bstrOut;\n  OLECHAR16 lpDecimalSep[16];\n\n  /* Native oleaut32 uses the locale-specific decimal separator even in the\n     absence of the LOCALE_USE_NLS flag. For example, the Spanish/Latin \n     American locales will see \"one thousand and one tenth\" as \"1000,1\" \n     instead of \"1000.1\" (notice the comma). The following code checks for\n     the need to replace the decimal separator, and if so, will prepare an\n     appropriate NUMBERFMTW structure to do the job via GetNumberFormatA().\n   */\n  GetLocaleInfoA(lcid, LOCALE_SDECIMAL | (dwFlags & LOCALE_NOUSEROVERRIDE),\n                 lpDecimalSep, ARRAY_SIZE(lpDecimalSep));\n  if (lpDecimalSep[0] == '.' && lpDecimalSep[1] == '\\0')\n  {\n    /* locale is compatible with English - return original string */\n    bstrOut = SysAllocString16(buff);\n  }\n  else\n  {\n    OLECHAR16 *p;\n    OLECHAR16 numbuff[256];\n    OLECHAR16 empty[] = {'\\0'};\n    NUMBERFMTW minFormat;\n\n    minFormat.NumDigits = 0;\n    minFormat.LeadingZero = 0;\n    minFormat.Grouping = 0;\n    minFormat.lpDecimalSep = lpDecimalSep;\n    minFormat.lpThousandSep = empty;\n    minFormat.NegativeOrder = 1; /* NLS_NEG_LEFT */\n\n    /* count number of decimal digits in string */\n    p = strchrA( buff, '.' );\n    if (p) minFormat.NumDigits = strlenA(p + 1);\n\n    numbuff[0] = '\\0';\n    if (!GetNumberFormatA(lcid, 0, buff, &minFormat, numbuff, ARRAY_SIZE(numbuff)))\n    {\n      WARN(\"GetNumberFormatA() failed, returning raw number string instead\\n\");\n      bstrOut = SysAllocString16(buff);\n    }\n    else\n    {\n      TRACE(\"created minimal NLS string %s\\n\", debugstr_a(numbuff));\n      bstrOut = SysAllocString16(numbuff);\n    }\n  }\n  return bstrOut;\n}\n\nstatic HRESULT VARIANT_BstrFromReal(DOUBLE dblIn, LCID lcid, ULONG dwFlags,\n                                    SEGBSTR16* pbstrOut, LPCSTR lpszFormat)\n{\n  OLECHAR16 buff[256];\n\n  if (!pbstrOut)\n    return E_INVALIDARG;\n\n  sprintfA( buff, lpszFormat, dblIn );\n\n  /* Negative zeroes are disallowed (some applications depend on this).\n     If buff starts with a minus, and then nothing follows but zeroes\n     and/or a period, it is a negative zero and is replaced with a\n     canonical zero. This duplicates native oleaut32 behavior.\n   */\n  if (buff[0] == '-')\n  {\n    const OLECHAR16 szAccept[] = {'0', '.', '\\0'};\n    if (strlenA(buff + 1) == strspnA(buff + 1, szAccept))\n    { buff[0] = '0'; buff[1] = '\\0'; }\n  }\n\n  TRACE(\"created string %s\\n\", debugstr_a(buff));\n  if (dwFlags & LOCALE_USE_NLS)\n  {\n    OLECHAR16 numbuff[256];\n\n    /* Format the number for the locale */\n    numbuff[0] = '\\0';\n    GetNumberFormatA(lcid, dwFlags & LOCALE_NOUSEROVERRIDE,\n                     buff, NULL, numbuff, ARRAY_SIZE(numbuff));\n    TRACE(\"created NLS string %s\\n\", debugstr_a(numbuff));\n    *pbstrOut = SysAllocString16(numbuff);\n  }\n  else\n  {\n    *pbstrOut = VARIANT_BstrReplaceDecimal(buff, lcid, dwFlags);\n  }\n  return *pbstrOut ? S_OK : E_OUTOFMEMORY;\n}\n\n/******************************************************************************\n * VarBstrFromR4 (OLEAUT32.111)\n *\n * Convert a VT_R4 to a VT_BSTR.\n *\n * PARAMS\n *  fltIn    [I] Source\n *  lcid     [I] LCID for the conversion\n *  dwFlags  [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pbstrOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if pbstrOut is invalid.\n *           E_OUTOFMEMORY, if memory allocation fails.\n */\nHRESULT WINAPI VarBstrFromR416(FLOAT fltIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut)\n{\n  return VARIANT_BstrFromReal(fltIn, lcid, dwFlags, pbstrOut, szFloatFormatW);\n}\n\n/******************************************************************************\n * VarBstrFromR8 (OLEAUT32.112)\n *\n * Convert a VT_R8 to a VT_BSTR.\n *\n * PARAMS\n *  dblIn    [I] Source\n *  lcid     [I] LCID for the conversion\n *  dwFlags  [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pbstrOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if pbstrOut is invalid.\n *           E_OUTOFMEMORY, if memory allocation fails.\n */\nHRESULT WINAPI VarBstrFromR816_conv(DWORD dblIn1, DWORD dblIn2, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut)\n{\n  UINT64 dbl = (UINT64)dblIn1 << 32 | dblIn2;\n  return VarBstrFromR816(*(double *)&dbl, lcid, dwFlags, pbstrOut);\n}\n\nHRESULT WINAPI VarBstrFromR816(double dblIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut)\n{\n  fix_double(&dblIn);\n  return VARIANT_BstrFromReal(dblIn, lcid, dwFlags, pbstrOut, szDoubleFormatW);\n}\n\n/******************************************************************************\n *    VarBstrFromCy   [OLEAUT32.113]\n *\n * Convert a VT_CY to a VT_BSTR.\n *\n * PARAMS\n *  cyIn     [I] Source\n *  lcid     [I] LCID for the conversion\n *  dwFlags  [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pbstrOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if pbstrOut is invalid.\n *           E_OUTOFMEMORY, if memory allocation fails.\n */\nHRESULT WINAPI VarBstrFromCy16_conv(DWORD dblIn1, DWORD dblIn2, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut)\n{\n  UINT64 dbl = (UINT64)dblIn1 << 32 | dblIn2;\n  return VarBstrFromCy16(*(CY *)&dbl, lcid, dwFlags, pbstrOut);\n}\n\nHRESULT WINAPI VarBstrFromCy16(CY cyIn, LCID lcid, ULONG dwFlags, SEGBSTR16 *pbstrOut)\n{\n  OLECHAR16 buff[256];\n  VARIANT_DI decVal;\n  fix_double(&cyIn);\n\n  if (!pbstrOut)\n    return E_INVALIDARG;\n\n  decVal.scale = 4;\n  decVal.sign = 0;\n  decVal.bitsnum[0] = cyIn.s.Lo;\n  decVal.bitsnum[1] = cyIn.s.Hi;\n  if (cyIn.s.Hi & 0x80000000UL) {\n    DWORD one = 1;\n\n    /* Negative number! */\n    decVal.sign = 1;\n    decVal.bitsnum[0] = ~decVal.bitsnum[0];\n    decVal.bitsnum[1] = ~decVal.bitsnum[1];\n    VARIANT_int_add(decVal.bitsnum, 3, &one, 1);\n  }\n  decVal.bitsnum[2] = 0;\n  VARIANT_DI_tostringA(&decVal, buff, ARRAY_SIZE(buff));\n\n  if (dwFlags & LOCALE_USE_NLS)\n  {\n    OLECHAR16 cybuff[256];\n\n    /* Format the currency for the locale */\n    cybuff[0] = '\\0';\n    GetCurrencyFormatA(lcid, dwFlags & LOCALE_NOUSEROVERRIDE,\n                       buff, NULL, cybuff, ARRAY_SIZE(cybuff));\n    *pbstrOut = SysAllocString16(cybuff);\n  }\n  else\n    *pbstrOut = VARIANT_BstrReplaceDecimal(buff,lcid,dwFlags);\n\n  return *pbstrOut ? S_OK : E_OUTOFMEMORY;\n}\n\nstatic inline int output_int_len(int o, int min_len, OLECHAR16 *date, int date_len)\n{\n    int len, tmp;\n\n    if(min_len >= date_len)\n        return -1;\n\n    for(len=0, tmp=o; tmp; tmp/=10) len++;\n    if(!len) len++;\n    if(len >= date_len)\n        return -1;\n\n    for(tmp=min_len-len; tmp>0; tmp--)\n        *date++ = '0';\n    for(tmp=len; tmp>0; tmp--, o/=10)\n        date[tmp-1] = '0' + o%10;\n    return min_len>len ? min_len : len;\n}\n\n/* format date string, similar to GetDateFormatW function but works on bigger range of dates */\nBOOL get_date_format(LCID lcid, DWORD flags, const SYSTEMTIME *st,\n        const OLECHAR16 *fmt, OLECHAR16 *date, int date_len)\n{\n    static const LCTYPE dayname[] = {\n        LOCALE_SDAYNAME7, LOCALE_SDAYNAME1, LOCALE_SDAYNAME2, LOCALE_SDAYNAME3,\n        LOCALE_SDAYNAME4, LOCALE_SDAYNAME5, LOCALE_SDAYNAME6\n    };\n    static const LCTYPE sdayname[] = {\n        LOCALE_SABBREVDAYNAME7, LOCALE_SABBREVDAYNAME1, LOCALE_SABBREVDAYNAME2,\n        LOCALE_SABBREVDAYNAME3, LOCALE_SABBREVDAYNAME4, LOCALE_SABBREVDAYNAME5,\n        LOCALE_SABBREVDAYNAME6\n    };\n    static const LCTYPE monthname[] = {\n        LOCALE_SMONTHNAME1, LOCALE_SMONTHNAME2, LOCALE_SMONTHNAME3, LOCALE_SMONTHNAME4,\n        LOCALE_SMONTHNAME5, LOCALE_SMONTHNAME6, LOCALE_SMONTHNAME7, LOCALE_SMONTHNAME8,\n        LOCALE_SMONTHNAME9, LOCALE_SMONTHNAME10, LOCALE_SMONTHNAME11, LOCALE_SMONTHNAME12\n    };\n    static const LCTYPE smonthname[] = {\n        LOCALE_SABBREVMONTHNAME1, LOCALE_SABBREVMONTHNAME2, LOCALE_SABBREVMONTHNAME3,\n        LOCALE_SABBREVMONTHNAME4, LOCALE_SABBREVMONTHNAME5, LOCALE_SABBREVMONTHNAME6,\n        LOCALE_SABBREVMONTHNAME7, LOCALE_SABBREVMONTHNAME8, LOCALE_SABBREVMONTHNAME9,\n        LOCALE_SABBREVMONTHNAME10, LOCALE_SABBREVMONTHNAME11, LOCALE_SABBREVMONTHNAME12\n    };\n\n    if(flags & ~(LOCALE_NOUSEROVERRIDE|VAR_DATEVALUEONLY))\n        FIXME(\"ignoring flags %x\\n\", flags);\n    flags &= LOCALE_NOUSEROVERRIDE;\n\n    while(*fmt && date_len) {\n        int count = 1;\n\n        switch(*fmt) {\n            case 'd':\n            case 'M':\n            case 'y':\n            case 'g':\n                while(*fmt == *(fmt+count))\n                    count++;\n                fmt += count-1;\n        }\n\n        switch(*fmt) {\n        case 'd':\n            if(count >= 4)\n                count = GetLocaleInfoA(lcid, dayname[st->wDayOfWeek] | flags, date, date_len)-1;\n            else if(count == 3)\n                count = GetLocaleInfoA(lcid, sdayname[st->wDayOfWeek] | flags, date, date_len)-1;\n            else\n                count = output_int_len(st->wDay, count, date, date_len);\n            break;\n        case 'M':\n            if(count >= 4)\n                count = GetLocaleInfoA(lcid, monthname[st->wMonth-1] | flags, date, date_len)-1;\n            else if(count == 3)\n                count = GetLocaleInfoA(lcid, smonthname[st->wMonth-1] | flags, date, date_len)-1;\n            else\n                count = output_int_len(st->wMonth, count, date, date_len);\n            break;\n        case 'y':\n            if(count >= 3)\n                count = output_int_len(st->wYear, 0, date, date_len);\n            else\n                count = output_int_len(st->wYear%100, count, date, date_len);\n            break;\n        case 'g':\n            if(count == 2) {\n                FIXME(\"Should be using GetCalendarInfo(CAL_SERASTRING), defaulting to 'AD'\\n\");\n\n                *date++ = 'A';\n                date_len--;\n                if(date_len)\n                    *date = 'D';\n                else\n                    count = -1;\n                break;\n            }\n        /* fall through */\n        default:\n            *date = *fmt;\n        }\n\n        if(count < 0)\n            break;\n        fmt++;\n        date += count;\n        date_len -= count;\n    }\n\n    if(!date_len)\n        return FALSE;\n    *date++ = 0;\n    return TRUE;\n}\n\nvoid map_bstr32_16(SEGPTR *a16, const BSTR *a32);\n/******************************************************************************\n *    VarBstrFromDate    [OLEAUT32.114]\n *\n * Convert a VT_DATE to a VT_BSTR.\n *\n * PARAMS\n *  dateIn   [I] Source\n *  lcid     [I] LCID for the conversion\n *  dwFlags  [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pbstrOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if pbstrOut or dateIn is invalid.\n *           E_OUTOFMEMORY, if memory allocation fails.\n */\nHRESULT WINAPI VarBstrFromDate16_conv(DWORD dblIn1, DWORD dblIn2, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut)\n{\n  UINT64 dbl = (UINT64)dblIn1 << 32 | dblIn2;\n  return VarBstrFromDate16(*(DATE *)&dbl, lcid, dwFlags, pbstrOut);\n}\n\nHRESULT WINAPI VarBstrFromDate16(DATE dateIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut)\n{\n    BSTR bstr32;\n    HRESULT res;\n    fix_double(&dateIn);\n    TRACE(\"(%g,0x%08x,0x%08x,%p)\\n\", dateIn, lcid, dwFlags, pbstrOut);\n    res = VarBstrFromDate(dateIn, lcid, dwFlags, &bstr32);\n    if (FAILED(res))\n    {\n        *pbstrOut = 0;\n        return hresult32_16(res);\n    }\n    map_bstr32_16(pbstrOut, &bstr32);\n    SysFreeString(bstr32);\n    return hresult32_16(res);\n\n#if 0\n  SYSTEMTIME st;\n  DWORD dwFormatFlags = dwFlags & LOCALE_NOUSEROVERRIDE;\n  OLECHAR16 date[128], fmt_buff[80], *time;\n\n  TRACE(\"(%g,0x%08x,0x%08x,%p)\\n\", dateIn, lcid, dwFlags, pbstrOut);\n\n  if (!pbstrOut || !VariantTimeToSystemTime(dateIn, &st))\n    return E_INVALIDARG;\n\n  *pbstrOut = NULL;\n\n  if (dwFlags & VAR_CALENDAR_THAI)\n      st.wYear += 553; /* Use the Thai buddhist calendar year */\n  else if (dwFlags & (VAR_CALENDAR_HIJRI|VAR_CALENDAR_GREGORIAN))\n      FIXME(\"VAR_CALENDAR_HIJRI/VAR_CALENDAR_GREGORIAN not handled\\n\");\n\n  if (dwFlags & LOCALE_USE_NLS)\n    dwFlags &= ~(VAR_TIMEVALUEONLY|VAR_DATEVALUEONLY);\n  else\n  {\n    double whole = dateIn < 0 ? ceil(dateIn) : floor(dateIn);\n    double partial = dateIn - whole;\n\n    if (whole == 0.0)\n      dwFlags |= VAR_TIMEVALUEONLY;\n    else if (partial > -1e-12 && partial < 1e-12)\n      dwFlags |= VAR_DATEVALUEONLY;\n  }\n\n  if (dwFlags & VAR_TIMEVALUEONLY)\n    date[0] = '\\0';\n  else\n    if (!GetLocaleInfoA(lcid, LOCALE_SSHORTDATE, fmt_buff, ARRAY_SIZE(fmt_buff)) ||\n        !get_date_format(lcid, dwFlags, &st, fmt_buff, date, ARRAY_SIZE(date)))\n      return E_INVALIDARG;\n\n  if (!(dwFlags & VAR_DATEVALUEONLY))\n  {\n    time = date + strlenA(date);\n    if (time != date)\n      *time++ = ' ';\n    if (!GetTimeFormatA(lcid, dwFormatFlags, &st, NULL, time, ARRAY_SIZE(date)-(time-date)))\n      return E_INVALIDARG;\n  }\n\n  *pbstrOut = SysAllocString16(date);\n  if (*pbstrOut)\n    TRACE(\"returning %s\\n\", debugstr_a(*pbstrOut));\n  return *pbstrOut ? S_OK : E_OUTOFMEMORY;\n#endif\n}\n\n/******************************************************************************\n * VarBstrFromBool (OLEAUT32.116)\n *\n * Convert a VT_BOOL to a VT_BSTR.\n *\n * PARAMS\n *  boolIn   [I] Source\n *  lcid     [I] LCID for the conversion\n *  dwFlags  [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pbstrOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if pbstrOut is invalid.\n *           E_OUTOFMEMORY, if memory allocation fails.\n *\n * NOTES\n *  If dwFlags includes VARIANT_LOCALBOOL, this function converts to the\n *  localised text of \"True\" or \"False\". To convert a bool into a\n *  numeric string of \"0\" or \"-1\", use VariantChangeTypeTypeEx().\n */\nHRESULT WINAPI VarBstrFromBool16(VARIANT_BOOL boolIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut)\n{\n  OLECHAR16 szBuff[64];\n  DWORD dwResId = IDS_TRUE;\n  LANGID langId;\n\n  TRACE(\"%d,0x%08x,0x%08x,%p\\n\", boolIn, lcid, dwFlags, pbstrOut);\n\n  if (!pbstrOut)\n    return E_INVALIDARG;\n\n  /* VAR_BOOLONOFF and VAR_BOOLYESNO are internal flags used\n   * for variant formatting */\n  switch (dwFlags & (VAR_LOCALBOOL|VAR_BOOLONOFF|VAR_BOOLYESNO))\n  {\n  case VAR_BOOLONOFF:\n      dwResId = IDS_ON;\n      break;\n  case VAR_BOOLYESNO:\n      dwResId = IDS_YES;\n      break;\n  case VAR_LOCALBOOL:\n      break;\n  default:\n    lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT),SORT_DEFAULT);\n  }\n\n  lcid = ConvertDefaultLocale(lcid);\n  langId = LANGIDFROMLCID(lcid);\n  if (PRIMARYLANGID(langId) == LANG_NEUTRAL)\n    langId = MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT);\n\n  if (boolIn == VARIANT_FALSE)\n    dwResId++; /* Use negative form */\n\nVarBstrFromBool_GetLocalised:\n  if (VARIANT_GetLocalisedText(langId, dwResId, szBuff))\n  {\n    *pbstrOut = SysAllocString16(szBuff);\n    return *pbstrOut ? S_OK : E_OUTOFMEMORY;\n  }\n\n  if (langId != MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT))\n  {\n    langId = MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT);\n    goto VarBstrFromBool_GetLocalised;\n  }\n\n  /* Should never get here */\n  WARN(\"Failed to load bool text!\\n\");\n  return E_OUTOFMEMORY;\n}\n\n/******************************************************************************\n * VarBstrFromI1 (OLEAUT32.229)\n *\n * Convert a VT_I1 to a VT_BSTR.\n *\n * PARAMS\n *  cIn      [I] Source\n *  lcid     [I] LCID for the conversion\n *  dwFlags  [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pbstrOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if pbstrOut is invalid.\n *           E_OUTOFMEMORY, if memory allocation fails.\n */\nHRESULT WINAPI VarBstrFromI116(signed char cIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut)\n{\n  ULONG64 ul64 = cIn;\n\n  if (cIn < 0)\n  {\n    ul64 = -cIn;\n    dwFlags |= VAR_NEGATIVE;\n  }\n  return VARIANT_BstrFromUInt(ul64, lcid, dwFlags, pbstrOut);\n}\n\n/******************************************************************************\n * VarBstrFromUI2 (OLEAUT32.230)\n *\n * Convert a VT_UI2 to a VT_BSTR.\n *\n * PARAMS\n *  usIn     [I] Source\n *  lcid     [I] LCID for the conversion\n *  dwFlags  [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pbstrOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if pbstrOut is invalid.\n *           E_OUTOFMEMORY, if memory allocation fails.\n */\nHRESULT WINAPI VarBstrFromUI216(USHORT usIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut)\n{\n  return VARIANT_BstrFromUInt(usIn, lcid, dwFlags, pbstrOut);\n}\n\n/******************************************************************************\n * VarBstrFromUI4 (OLEAUT32.231)\n *\n * Convert a VT_UI4 to a VT_BSTR.\n *\n * PARAMS\n *  ulIn     [I] Source\n *  lcid     [I] LCID for the conversion\n *  dwFlags  [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pbstrOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if pbstrOut is invalid.\n *           E_OUTOFMEMORY, if memory allocation fails.\n */\nHRESULT WINAPI VarBstrFromUI416(ULONG ulIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut)\n{\n  return VARIANT_BstrFromUInt(ulIn, lcid, dwFlags, pbstrOut);\n}\n\n#ifdef AVAIL_32BIT_VAR\n/******************************************************************************\n * VarBstrFromDec (OLEAUT32.232)\n *\n * Convert a VT_DECIMAL to a VT_BSTR.\n *\n * PARAMS\n *  pDecIn   [I] Source\n *  lcid     [I] LCID for the conversion\n *  dwFlags  [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pbstrOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if pbstrOut is invalid.\n *           E_OUTOFMEMORY, if memory allocation fails.\n */\nHRESULT WINAPI VarBstrFromDec16(DECIMAL* pDecIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut)\n{\n  OLECHAR16 buff[256];\n  VARIANT_DI temp;\n\n  if (!pbstrOut)\n    return E_INVALIDARG;\n\n  VARIANT_DIFromDec(pDecIn, &temp);\n  VARIANT_DI_tostringA(&temp, buff, 256);\n\n  if (dwFlags & LOCALE_USE_NLS)\n  {\n    OLECHAR16 numbuff[256];\n\n    /* Format the number for the locale */\n    numbuff[0] = '\\0';\n    GetNumberFormatA(lcid, dwFlags & LOCALE_NOUSEROVERRIDE,\n                     buff, NULL, numbuff, ARRAY_SIZE(numbuff));\n    TRACE(\"created NLS string %s\\n\", debugstr_a(numbuff));\n    *pbstrOut = SysAllocString16(numbuff);\n  }\n  else\n  {\n    *pbstrOut = VARIANT_BstrReplaceDecimal(buff, lcid, dwFlags);\n  }\n  \n  TRACE(\"returning %s\\n\", debugstr_a(*pbstrOut));\n  return *pbstrOut ? S_OK : E_OUTOFMEMORY;\n}\n#endif\n\n/************************************************************************\n * VarBstrFromI8 (OLEAUT32.370)\n *\n * Convert a VT_I8 to a VT_BSTR.\n *\n * PARAMS\n *  llIn     [I] Source\n *  lcid     [I] LCID for the conversion\n *  dwFlags  [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pbstrOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if pbstrOut is invalid.\n *           E_OUTOFMEMORY, if memory allocation fails.\n */\nHRESULT WINAPI VarBstrFromI816(LONG64 llIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut)\n{\n  ULONG64 ul64 = llIn;\n\n  if (llIn < 0)\n  {\n    ul64 = -llIn;\n    dwFlags |= VAR_NEGATIVE;\n  }\n  return VARIANT_BstrFromUInt(ul64, lcid, dwFlags, pbstrOut);\n}\n\n/************************************************************************\n * VarBstrFromUI8 (OLEAUT32.371)\n *\n * Convert a VT_UI8 to a VT_BSTR.\n *\n * PARAMS\n *  ullIn    [I] Source\n *  lcid     [I] LCID for the conversion\n *  dwFlags  [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pbstrOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if pbstrOut is invalid.\n *           E_OUTOFMEMORY, if memory allocation fails.\n */\nHRESULT WINAPI VarBstrFromUI816(ULONG64 ullIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut)\n{\n  return VARIANT_BstrFromUInt(ullIn, lcid, dwFlags, pbstrOut);\n}\n\n/************************************************************************\n * VarBstrFromDisp (OLEAUT32.115)\n *\n * Convert a VT_DISPATCH to a SEGBSTR16.\n *\n * PARAMS\n *  pdispIn [I] Source\n *  lcid    [I] LCID for conversion\n *  dwFlags [I] Flags controlling the conversion (VAR_ flags from \"oleauto.h\")\n *  pbstrOut  [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarBstrFromDisp16(SEGIDispatch pdispIn, LCID lcid, ULONG dwFlags, SEGBSTR16* pbstrOut)\n{\n  return VARIANT_FromDisp(pdispIn, lcid, pbstrOut, VT_BSTR, dwFlags);\n}\n\n/**********************************************************************\n * VarBstrCat (OLEAUT32.313)\n *\n * Concatenate two SEGBSTR16 values.\n *\n * PARAMS\n *  pbstrLeft  [I] Source\n *  pbstrRight [I] Value to concatenate\n *  pbstrOut   [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if pbstrOut is invalid.\n *           E_OUTOFMEMORY, if memory allocation fails.\n */\nHRESULT WINAPI VarBstrCat16(SEGBSTR16 pbstrLeft, SEGBSTR16 pbstrRight, SEGBSTR16 *pbstrOut)\n{\n  unsigned int lenLeft, lenRight;\n\n  TRACE(\"%s,%s,%p\\n\",\n   debugstr_an(BSTR_PTR(pbstrLeft), SysStringLen16(pbstrLeft)),\n   debugstr_an(BSTR_PTR(pbstrRight), SysStringLen16(pbstrRight)), BSTR_PTR(pbstrOut));\n\n  if (!pbstrOut)\n    return E_INVALIDARG;\n\n  /* use byte length here to properly handle ansi-allocated SEGBSTR16s */\n  lenLeft = pbstrLeft ? SysStringByteLen16(pbstrLeft) : 0;\n  lenRight = pbstrRight ? SysStringByteLen16(pbstrRight) : 0;\n\n  *pbstrOut = SysAllocStringByteLen16(NULL, lenLeft + lenRight);\n  if (!*pbstrOut)\n    return E_OUTOFMEMORY;\n\n  ((OLECHAR16*)MapSL(*pbstrOut))[0] = '\\0';\n\n  if (pbstrLeft)\n    memcpy(BSTR_PTR(*pbstrOut), BSTR_PTR(pbstrLeft), lenLeft);\n\n  if (pbstrRight)\n    memcpy(BSTR_PTR((CHAR*)*pbstrOut + lenLeft), BSTR_PTR(pbstrRight), lenRight);\n\n  TRACE(\"%s\\n\", debugstr_an(BSTR_PTR(*pbstrOut), SysStringLen16(*pbstrOut)));\n  return S_OK;\n}\n\n/**********************************************************************\n * VarBstrCmp (OLEAUT32.314)\n *\n * Compare two SEGBSTR16 values.\n *\n * PARAMS\n *  pbstrLeft  [I] Source\n *  pbstrRight [I] Value to compare\n *  lcid       [I] LCID for the comparison\n *  dwFlags    [I] Flags to pass directly to CompareStringA().\n *\n * RETURNS\n *  VARCMP_LT, VARCMP_EQ or VARCMP_GT indicating that pbstrLeft is less\n *  than, equal to or greater than pbstrRight respectively.\n *\n * NOTES\n *  VARCMP_NULL is NOT returned if either string is NULL unlike MSDN\n *  states. A NULL SEGBSTR16 pointer is equivalent to an empty string.\n *  If LCID is equal to 0, a byte by byte comparison is performed.\n */\nHRESULT WINAPI VarBstrCmp16(SEGBSTR16 pbstrLeft, SEGBSTR16 pbstrRight, LCID lcid, DWORD dwFlags)\n{\n    HRESULT hres;\n    int ret;\n\n    TRACE(\"%s,%s,%d,%08x\\n\",\n     debugstr_an(BSTR_PTR(pbstrLeft), SysStringLen16(pbstrLeft)),\n     debugstr_an(BSTR_PTR(pbstrRight), SysStringLen16(pbstrRight)), lcid, dwFlags);\n\n    if (!pbstrLeft || !*BSTR_PTR(pbstrLeft))\n    {\n      if (pbstrRight && *BSTR_PTR(pbstrRight))\n        return VARCMP_LT;\n    }\n    else if (!pbstrRight || !*BSTR_PTR(pbstrRight))\n        return VARCMP_GT;\n\n    if (lcid == 0)\n    {\n      unsigned int lenLeft = SysStringByteLen16(pbstrLeft);\n      unsigned int lenRight = SysStringByteLen16(pbstrRight);\n      ret = memcmp(BSTR_PTR(pbstrLeft), BSTR_PTR(pbstrRight), min(lenLeft, lenRight));\n      if (ret < 0)\n        return VARCMP_LT;\n      if (ret > 0)\n        return VARCMP_GT;\n      if (lenLeft < lenRight)\n        return VARCMP_LT;\n      if (lenLeft > lenRight)\n        return VARCMP_GT;\n      return VARCMP_EQ;\n    }\n    else\n    {\n      unsigned int lenLeft = SysStringLen16(pbstrLeft);\n      unsigned int lenRight = SysStringLen16(pbstrRight);\n\n      if (lenLeft == 0 || lenRight == 0)\n      {\n          if (lenLeft == 0 && lenRight == 0) return VARCMP_EQ;\n          return lenLeft < lenRight ? VARCMP_LT : VARCMP_GT;\n      }\n\n      hres = CompareStringA(lcid, dwFlags, BSTR_PTR(pbstrLeft), lenLeft,\n              BSTR_PTR(pbstrRight), lenRight) - CSTR_LESS_THAN;\n      TRACE(\"%d\\n\", hres);\n      return hres;\n    }\n}\n\n/*\n * DATE\n */\n\n/******************************************************************************\n * VarDateFromUI1 (OLEAUT32.88)\n *\n * Convert a VT_UI1 to a VT_DATE.\n *\n * PARAMS\n *  bIn      [I] Source\n *  pdateOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarDateFromUI116(BYTE bIn, DATE* pdateOut)\n{\n  return VarR8FromUI1(bIn, pdateOut);\n}\n\n/******************************************************************************\n * VarDateFromI2 (OLEAUT32.89)\n *\n * Convert a VT_I2 to a VT_DATE.\n *\n * PARAMS\n *  sIn      [I] Source\n *  pdateOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarDateFromI216(short sIn, DATE* pdateOut)\n{\n  return VarR8FromI2(sIn, pdateOut);\n}\n\n/******************************************************************************\n * VarDateFromI4 (OLEAUT32.90)\n *\n * Convert a VT_I4 to a VT_DATE.\n *\n * PARAMS\n *  lIn      [I] Source\n *  pdateOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarDateFromI416(LONG lIn, DATE* pdateOut)\n{\n  return VarDateFromR8(lIn, pdateOut);\n}\n\n/******************************************************************************\n * VarDateFromR4 (OLEAUT32.91)\n *\n * Convert a VT_R4 to a VT_DATE.\n *\n * PARAMS\n *  fltIn    [I] Source\n *  pdateOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarDateFromR416(FLOAT fltIn, DATE* pdateOut)\n{\n  return VarR8FromR4(fltIn, pdateOut);\n}\n\n/******************************************************************************\n * VarDateFromR8 (OLEAUT32.92)\n *\n * Convert a VT_R8 to a VT_DATE.\n *\n * PARAMS\n *  dblIn    [I] Source\n *  pdateOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarDateFromR816(double dblIn, DATE* pdateOut)\n{\n  if (dblIn <= (DATE_MIN - 1.0) || dblIn >= (DATE_MAX + 1.0)) return DISP_E_OVERFLOW;\n  *pdateOut = (DATE)dblIn;\n  return S_OK;\n}\n\n/**********************************************************************\n * VarDateFromDisp (OLEAUT32.95)\n *\n * Convert a VT_DISPATCH to a VT_DATE.\n *\n * PARAMS\n *  pdispIn  [I] Source\n *  lcid     [I] LCID for conversion\n *  pdateOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: E_INVALIDARG, if the source value is invalid\n *           DISP_E_OVERFLOW, if the value will not fit in the destination\n *           DISP_E_TYPEMISMATCH, if the type cannot be converted\n */\nHRESULT WINAPI VarDateFromDisp16(SEGIDispatch pdispIn, LCID lcid, DATE* pdateOut)\n{\n  return VARIANT_FromDisp(pdispIn, lcid, pdateOut, VT_DATE, 0);\n}\n\n/******************************************************************************\n * VarDateFromBool (OLEAUT32.96)\n *\n * Convert a VT_BOOL to a VT_DATE.\n *\n * PARAMS\n *  boolIn   [I] Source\n *  pdateOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarDateFromBool16(VARIANT_BOOL boolIn, DATE* pdateOut)\n{\n  return VarR8FromBool(boolIn, pdateOut);\n}\n\n/**********************************************************************\n * VarDateFromCy (OLEAUT32.93)\n *\n * Convert a VT_CY to a VT_DATE.\n *\n * PARAMS\n *  lIn      [I] Source\n *  pdateOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarDateFromCy16(CY cyIn, DATE* pdateOut)\n{\n  return VarR8FromCy(cyIn, pdateOut);\n}\n\n/* Date string parsing */\n#define DP_TIMESEP 0x01 /* Time separator ( _must_ remain 0x1, used as a bitmask) */\n#define DP_DATESEP 0x02 /* Date separator */\n#define DP_MONTH   0x04 /* Month name */\n#define DP_AM      0x08 /* AM */\n#define DP_PM      0x10 /* PM */\n\ntypedef struct tagDATEPARSE\n{\n    DWORD dwCount;      /* Number of fields found so far (maximum 6) */\n    DWORD dwParseFlags; /* Global parse flags (DP_ Flags above) */\n    DWORD dwFlags[6];   /* Flags for each field */\n    DWORD dwValues[6];  /* Value of each field */\n} DATEPARSE;\n\n#define TIMEFLAG(i) ((dp.dwFlags[i] & DP_TIMESEP) << i)\n\n#define IsLeapYear(y) (((y % 4) == 0) && (((y % 100) != 0) || ((y % 400) == 0)))\n\n/* Determine if a day is valid in a given month of a given year */\nstatic BOOL VARIANT_IsValidMonthDay(DWORD day, DWORD month, DWORD year)\n{\n  static const BYTE days[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };\n\n  if (day && month && month < 13)\n  {\n    if (day <= days[month] || (month == 2 && day == 29 && IsLeapYear(year)))\n      return TRUE;\n  }\n  return FALSE;\n}\n\n/* Possible orders for 3 numbers making up a date */\n#define ORDER_MDY 0x01\n#define ORDER_YMD 0x02\n#define ORDER_YDM 0x04\n#define ORDER_DMY 0x08\n#define ORDER_MYD 0x10 /* Synthetic order, used only for funky 2 digit dates */\n\n/* Determine a date for a particular locale, from 3 numbers */\nstatic inline HRESULT VARIANT_MakeDate(DATEPARSE *dp, DWORD iDate,\n                                       DWORD offset, SYSTEMTIME *st)\n{\n  DWORD dwAllOrders, dwTry, dwCount = 0, v1, v2, v3;\n\n  if (!dp->dwCount)\n  {\n    v1 = 30; /* Default to (Variant) 0 date part */\n    v2 = 12;\n    v3 = 1899;\n    goto VARIANT_MakeDate_OK;\n  }\n\n  v1 = dp->dwValues[offset + 0];\n  v2 = dp->dwValues[offset + 1];\n  if (dp->dwCount == 2)\n  {\n    SYSTEMTIME current;\n    GetSystemTime(&current);\n    v3 = current.wYear;\n  }\n  else\n    v3 = dp->dwValues[offset + 2];\n\n  TRACE(\"(%d,%d,%d,%d,%d)\\n\", v1, v2, v3, iDate, offset);\n\n  /* If one number must be a month (Because a month name was given), then only\n   * consider orders with the month in that position.\n   * If we took the current year as 'v3', then only allow a year in that position.\n   */\n  if (dp->dwFlags[offset + 0] & DP_MONTH)\n  {\n    dwAllOrders = ORDER_MDY;\n  }\n  else if (dp->dwFlags[offset + 1] & DP_MONTH)\n  {\n    dwAllOrders = ORDER_DMY;\n    if (dp->dwCount > 2)\n      dwAllOrders |= ORDER_YMD;\n  }\n  else if (dp->dwCount > 2 && dp->dwFlags[offset + 2] & DP_MONTH)\n  {\n    dwAllOrders = ORDER_YDM;\n  }\n  else\n  {\n    dwAllOrders = ORDER_MDY|ORDER_DMY;\n    if (dp->dwCount > 2)\n      dwAllOrders |= (ORDER_YMD|ORDER_YDM);\n  }\n\nVARIANT_MakeDate_Start:\n  TRACE(\"dwAllOrders is 0x%08x\\n\", dwAllOrders);\n\n  while (dwAllOrders)\n  {\n    DWORD dwTemp;\n\n    if (dwCount == 0)\n    {\n      /* First: Try the order given by iDate */\n      switch (iDate)\n      {\n      case 0:  dwTry = dwAllOrders & ORDER_MDY; break;\n      case 1:  dwTry = dwAllOrders & ORDER_DMY; break;\n      default: dwTry = dwAllOrders & ORDER_YMD; break;\n      }\n    }\n    else if (dwCount == 1)\n    {\n      /* Second: Try all the orders compatible with iDate */\n      switch (iDate)\n      {\n      case 0:  dwTry = dwAllOrders & ~(ORDER_DMY|ORDER_YDM); break;\n      case 1:  dwTry = dwAllOrders & ~(ORDER_MDY|ORDER_YDM|ORDER_MYD); break;\n      default: dwTry = dwAllOrders & ~(ORDER_DMY|ORDER_YDM); break;\n      }\n    }\n    else\n    {\n      /* Finally: Try any remaining orders */\n      dwTry = dwAllOrders;\n    }\n\n    TRACE(\"Attempt %d, dwTry is 0x%08x\\n\", dwCount, dwTry);\n\n    dwCount++;\n    if (!dwTry)\n      continue;\n\n#define DATE_SWAP(x,y) do { dwTemp = x; x = y; y = dwTemp; } while (0)\n\n    if (dwTry & ORDER_MDY)\n    {\n      if (VARIANT_IsValidMonthDay(v2,v1,v3))\n      {\n        DATE_SWAP(v1,v2);\n        goto VARIANT_MakeDate_OK;\n      }\n      dwAllOrders &= ~ORDER_MDY;\n    }\n    if (dwTry & ORDER_YMD)\n    {\n      if (VARIANT_IsValidMonthDay(v3,v2,v1))\n      {\n        DATE_SWAP(v1,v3);\n        goto VARIANT_MakeDate_OK;\n      }\n      dwAllOrders &= ~ORDER_YMD;\n    }\n    if (dwTry & ORDER_YDM)\n    {\n      if (VARIANT_IsValidMonthDay(v2,v3,v1))\n      {\n        DATE_SWAP(v1,v2);\n        DATE_SWAP(v2,v3);\n        goto VARIANT_MakeDate_OK;\n      }\n      dwAllOrders &= ~ORDER_YDM;\n    }\n    if (dwTry & ORDER_DMY)\n    {\n      if (VARIANT_IsValidMonthDay(v1,v2,v3))\n        goto VARIANT_MakeDate_OK;\n      dwAllOrders &= ~ORDER_DMY;\n    }\n    if (dwTry & ORDER_MYD)\n    {\n      /* Only occurs if we are trying a 2 year date as M/Y not D/M */\n      if (VARIANT_IsValidMonthDay(v3,v1,v2))\n      {\n        DATE_SWAP(v1,v3);\n        DATE_SWAP(v2,v3);\n        goto VARIANT_MakeDate_OK;\n      }\n      dwAllOrders &= ~ORDER_MYD;\n    }\n  }\n\n  if (dp->dwCount == 2)\n  {\n    /* We couldn't make a date as D/M or M/D, so try M/Y or Y/M */\n    v3 = 1; /* 1st of the month */\n    dwAllOrders = ORDER_YMD|ORDER_MYD;\n    dp->dwCount = 0; /* Don't return to this code path again */\n    dwCount = 0;\n    goto VARIANT_MakeDate_Start;\n  }\n\n  /* No valid dates were able to be constructed */\n  return DISP_E_TYPEMISMATCH;\n\nVARIANT_MakeDate_OK:\n\n  /* Check that the time part is ok */\n  if (st->wHour > 23 || st->wMinute > 59 || st->wSecond > 59)\n    return DISP_E_TYPEMISMATCH;\n\n  TRACE(\"Time %d %d %d\\n\", st->wHour, st->wMinute, st->wSecond);\n  if (st->wHour < 12 && (dp->dwParseFlags & DP_PM))\n    st->wHour += 12;\n  else if (st->wHour == 12 && (dp->dwParseFlags & DP_AM))\n    st->wHour = 0;\n  TRACE(\"Time %d %d %d\\n\", st->wHour, st->wMinute, st->wSecond);\n\n  st->wDay = v1;\n  st->wMonth = v2;\n  /* FIXME: For 2 digit dates, I'm not sure if 30 is hard coded or not. It may\n   * be retrieved from:\n   * HKCU\\Control Panel\\International\\Calendars\\TwoDigitYearMax\n   * But Wine doesn't have/use that key as at the time of writing.\n   */\n  st->wYear = v3 < 30 ? 2000 + v3 : v3 < 100 ? 1900 + v3 : v3;\n  TRACE(\"Returning date %d/%d/%d\\n\", v1, v2, st->wYear);\n  return S_OK;\n}\n\n/******************************************************************************\n * VarDateFromStr [OLEAUT32.94]\n *\n * Convert a VT_BSTR to at VT_DATE.\n *\n * PARAMS\n *  strIn    [I] String to convert\n *  lcid     [I] Locale identifier for the conversion\n *  dwFlags  [I] Flags affecting the conversion (VAR_ flags from \"oleauto.h\")\n *  pdateOut [O] Destination for the converted value\n *\n * RETURNS\n *  Success: S_OK. pdateOut contains the converted value.\n *  FAILURE: An HRESULT error code indicating the problem.\n *\n * NOTES\n *  Any date format that can be created using the date formats from lcid\n *  (Either from kernel Nls functions, variant conversion or formatting) is a\n *  valid input to this function. In addition, a few more esoteric formats are\n *  also supported for compatibility with the native version. The date is\n *  interpreted according to the date settings in the control panel, unless\n *  the date is invalid in that format, in which the most compatible format\n *  that produces a valid date will be used.\n */\nHRESULT WINAPI VarDateFromStr16(OLECHAR16* strIn, LCID lcid, ULONG dwFlags, DATE* pdateOut)\n{\n  static const USHORT ParseDateTokens[] =\n  {\n    LOCALE_SMONTHNAME1, LOCALE_SMONTHNAME2, LOCALE_SMONTHNAME3, LOCALE_SMONTHNAME4,\n    LOCALE_SMONTHNAME5, LOCALE_SMONTHNAME6, LOCALE_SMONTHNAME7, LOCALE_SMONTHNAME8,\n    LOCALE_SMONTHNAME9, LOCALE_SMONTHNAME10, LOCALE_SMONTHNAME11, LOCALE_SMONTHNAME12,\n    LOCALE_SMONTHNAME13,\n    LOCALE_SABBREVMONTHNAME1, LOCALE_SABBREVMONTHNAME2, LOCALE_SABBREVMONTHNAME3,\n    LOCALE_SABBREVMONTHNAME4, LOCALE_SABBREVMONTHNAME5, LOCALE_SABBREVMONTHNAME6,\n    LOCALE_SABBREVMONTHNAME7, LOCALE_SABBREVMONTHNAME8, LOCALE_SABBREVMONTHNAME9,\n    LOCALE_SABBREVMONTHNAME10, LOCALE_SABBREVMONTHNAME11, LOCALE_SABBREVMONTHNAME12,\n    LOCALE_SABBREVMONTHNAME13,\n    LOCALE_SDAYNAME1, LOCALE_SDAYNAME2, LOCALE_SDAYNAME3, LOCALE_SDAYNAME4,\n    LOCALE_SDAYNAME5, LOCALE_SDAYNAME6, LOCALE_SDAYNAME7,\n    LOCALE_SABBREVDAYNAME1, LOCALE_SABBREVDAYNAME2, LOCALE_SABBREVDAYNAME3,\n    LOCALE_SABBREVDAYNAME4, LOCALE_SABBREVDAYNAME5, LOCALE_SABBREVDAYNAME6,\n    LOCALE_SABBREVDAYNAME7,\n    LOCALE_S1159, LOCALE_S2359,\n    LOCALE_SDATE\n  };\n  static const BYTE ParseDateMonths[] =\n  {\n    1,2,3,4,5,6,7,8,9,10,11,12,13,\n    1,2,3,4,5,6,7,8,9,10,11,12,13\n  };\n  unsigned int i;\n  SEGBSTR16 tokens[ARRAY_SIZE(ParseDateTokens)];\n  DATEPARSE dp;\n  DWORD dwDateSeps = 0, iDate = 0;\n  HRESULT hRet = S_OK;\n\n  if ((dwFlags & (VAR_TIMEVALUEONLY|VAR_DATEVALUEONLY)) ==\n      (VAR_TIMEVALUEONLY|VAR_DATEVALUEONLY))\n    return E_INVALIDARG;\n\n  if (!strIn)\n    return DISP_E_TYPEMISMATCH;\n\n  *pdateOut = 0.0;\n\n  TRACE(\"(%s,0x%08x,0x%08x,%p)\\n\", debugstr_a(strIn), lcid, dwFlags, pdateOut);\n\n  memset(&dp, 0, sizeof(dp));\n\n  GetLocaleInfoA(lcid, LOCALE_IDATE|LOCALE_RETURN_NUMBER|(dwFlags & LOCALE_NOUSEROVERRIDE),\n                 (LPWSTR)&iDate, sizeof(iDate)/sizeof(OLECHAR16));\n  TRACE(\"iDate is %d\\n\", iDate);\n\n  /* Get the month/day/am/pm tokens for this locale */\n  for (i = 0; i < ARRAY_SIZE(tokens); i++)\n  {\n    OLECHAR16 buff[128];\n    LCTYPE lctype =  ParseDateTokens[i] | (dwFlags & LOCALE_NOUSEROVERRIDE);\n\n    /* FIXME: Alternate calendars - should use GetCalendarInfo() and/or\n     *        GetAltMonthNames(). We should really cache these strings too.\n     */\n    buff[0] = '\\0';\n    GetLocaleInfoA(lcid, lctype, buff, ARRAY_SIZE(buff));\n    tokens[i] = SysAllocString16(buff);\n    TRACE(\"token %d is %s\\n\", i, debugstr_a((OLECHAR16*)MapSL(tokens[i])));\n  }\n\n  /* Parse the string into our structure */\n  while (*strIn)\n  {\n    if (isdigitA(*strIn))\n    {\n      if (dp.dwCount >= 6)\n      {\n        hRet = DISP_E_TYPEMISMATCH;\n        break;\n      }\n      dp.dwValues[dp.dwCount] = strtoulA(strIn, &strIn, 10);\n      dp.dwCount++;\n      strIn--;\n    }\n    else if (isalphaA(*strIn))\n    {\n      BOOL bFound = FALSE;\n\n      for (i = 0; i < ARRAY_SIZE(tokens); i++)\n      {\n        OLECHAR16 *token = (OLECHAR16*)MapSL(tokens[i]);\n        DWORD dwLen = strlenA(token);\n        if (dwLen && !strncmpiA(strIn, token, dwLen))\n        {\n          if (i <= 25)\n          {\n            if (dp.dwCount >= 6)\n              hRet = DISP_E_TYPEMISMATCH;\n            else\n            {\n              dp.dwValues[dp.dwCount] = ParseDateMonths[i];\n              dp.dwFlags[dp.dwCount] |= (DP_MONTH|DP_DATESEP);\n              dp.dwCount++;\n            }\n          }\n          else if (i > 39 && i < 42)\n          {\n            if (!dp.dwCount || dp.dwParseFlags & (DP_AM|DP_PM))\n              hRet = DISP_E_TYPEMISMATCH;\n            else\n            {\n              dp.dwFlags[dp.dwCount - 1] |= (i == 40 ? DP_AM : DP_PM);\n              dp.dwParseFlags |= (i == 40 ? DP_AM : DP_PM);\n            }\n          }\n          strIn += (dwLen - 1);\n          bFound = TRUE;\n          break;\n        }\n      }\n\n      if (!bFound)\n      {\n        if ((*strIn == 'a' || *strIn == 'A' || *strIn == 'p' || *strIn == 'P') &&\n            (dp.dwCount && !(dp.dwParseFlags & (DP_AM|DP_PM))))\n        {\n          /* Special case - 'a' and 'p' are recognised as short for am/pm */\n          if (*strIn == 'a' || *strIn == 'A')\n          {\n            dp.dwFlags[dp.dwCount - 1] |= DP_AM;\n            dp.dwParseFlags |=  DP_AM;\n          }\n          else\n          {\n            dp.dwFlags[dp.dwCount - 1] |= DP_PM;\n            dp.dwParseFlags |=  DP_PM;\n          }\n          strIn++;\n        }\n        else\n        {\n          TRACE(\"No matching token for %s\\n\", debugstr_a(strIn));\n          hRet = DISP_E_TYPEMISMATCH;\n          break;\n        }\n      }\n    }\n    else if (*strIn == ':' ||  *strIn == '.')\n    {\n      if (!dp.dwCount || !strIn[1])\n        hRet = DISP_E_TYPEMISMATCH;\n      else\n        if (((OLECHAR16*)MapSL(tokens[42]))[0] == *strIn)\n        {\n          dwDateSeps++;\n          if (dwDateSeps > 2)\n            hRet = DISP_E_TYPEMISMATCH;\n          else\n            dp.dwFlags[dp.dwCount - 1] |= DP_DATESEP;\n        }\n        else\n          dp.dwFlags[dp.dwCount - 1] |= DP_TIMESEP;\n    }\n    else if (*strIn == '-' || *strIn == '/')\n    {\n      dwDateSeps++;\n      if (dwDateSeps > 2 || !dp.dwCount || !strIn[1])\n        hRet = DISP_E_TYPEMISMATCH;\n      else\n        dp.dwFlags[dp.dwCount - 1] |= DP_DATESEP;\n    }\n    else if (*strIn == ',' || isspaceA(*strIn))\n    {\n      if (*strIn == ',' && !strIn[1])\n        hRet = DISP_E_TYPEMISMATCH;\n    }\n    else\n    {\n      hRet = DISP_E_TYPEMISMATCH;\n    }\n    strIn++;\n  }\n\n  if (!dp.dwCount || dp.dwCount > 6 ||\n      (dp.dwCount == 1 && !(dp.dwParseFlags & (DP_AM|DP_PM))))\n    hRet = DISP_E_TYPEMISMATCH;\n\n  if (SUCCEEDED(hRet))\n  {\n    SYSTEMTIME st;\n    DWORD dwOffset = 0; /* Start of date fields in dp.dwValues */\n\n    st.wDayOfWeek = st.wHour = st.wMinute = st.wSecond = st.wMilliseconds = 0;\n\n    /* Figure out which numbers correspond to which fields.\n     *\n     * This switch statement works based on the fact that native interprets any\n     * fields that are not joined with a time separator ('.' or ':') as date\n     * fields. Thus we construct a value from 0-32 where each set bit indicates\n     * a time field. This encapsulates the hundreds of permutations of 2-6 fields.\n     * For valid permutations, we set dwOffset to point to the first date field\n     * and shorten dp.dwCount by the number of time fields found. The real\n     * magic here occurs in VARIANT_MakeDate() above, where we determine what\n     * each date number must represent in the context of iDate.\n     */\n    TRACE(\"0x%08x\\n\", TIMEFLAG(0)|TIMEFLAG(1)|TIMEFLAG(2)|TIMEFLAG(3)|TIMEFLAG(4));\n\n    switch (TIMEFLAG(0)|TIMEFLAG(1)|TIMEFLAG(2)|TIMEFLAG(3)|TIMEFLAG(4))\n    {\n    case 0x1: /* TT TTDD TTDDD */\n      if (dp.dwCount > 3 &&\n          ((dp.dwFlags[2] & (DP_AM|DP_PM)) || (dp.dwFlags[3] & (DP_AM|DP_PM)) ||\n          (dp.dwFlags[4] & (DP_AM|DP_PM))))\n        hRet = DISP_E_TYPEMISMATCH;\n      else if (dp.dwCount != 2 && dp.dwCount != 4 && dp.dwCount != 5)\n        hRet = DISP_E_TYPEMISMATCH;\n      st.wHour = dp.dwValues[0];\n      st.wMinute  = dp.dwValues[1];\n      dp.dwCount -= 2;\n      dwOffset = 2;\n      break;\n\n    case 0x3: /* TTT TTTDD TTTDDD */\n      if (dp.dwCount > 4 &&\n          ((dp.dwFlags[3] & (DP_AM|DP_PM)) || (dp.dwFlags[4] & (DP_AM|DP_PM)) ||\n          (dp.dwFlags[5] & (DP_AM|DP_PM))))\n        hRet = DISP_E_TYPEMISMATCH;\n      else if (dp.dwCount != 3 && dp.dwCount != 5 && dp.dwCount != 6)\n        hRet = DISP_E_TYPEMISMATCH;\n      st.wHour   = dp.dwValues[0];\n      st.wMinute = dp.dwValues[1];\n      st.wSecond = dp.dwValues[2];\n      dwOffset = 3;\n      dp.dwCount -= 3;\n      break;\n\n    case 0x4: /* DDTT */\n      if (dp.dwCount != 4 ||\n          (dp.dwFlags[0] & (DP_AM|DP_PM)) || (dp.dwFlags[1] & (DP_AM|DP_PM)))\n        hRet = DISP_E_TYPEMISMATCH;\n\n      st.wHour = dp.dwValues[2];\n      st.wMinute  = dp.dwValues[3];\n      dp.dwCount -= 2;\n      break;\n\n   case 0x0: /* T DD DDD TDDD TDDD */\n      if (dp.dwCount == 1 && (dp.dwParseFlags & (DP_AM|DP_PM)))\n      {\n        st.wHour = dp.dwValues[0]; /* T */\n        dp.dwCount = 0;\n        break;\n      }\n      else if (dp.dwCount > 4 || (dp.dwCount < 3 && dp.dwParseFlags & (DP_AM|DP_PM)))\n      {\n        hRet = DISP_E_TYPEMISMATCH;\n      }\n      else if (dp.dwCount == 3)\n      {\n        if (dp.dwFlags[0] & (DP_AM|DP_PM)) /* TDD */\n        {\n          dp.dwCount = 2;\n          st.wHour = dp.dwValues[0];\n          dwOffset = 1;\n          break;\n        }\n        if (dp.dwFlags[2] & (DP_AM|DP_PM)) /* DDT */\n        {\n          dp.dwCount = 2;\n          st.wHour = dp.dwValues[2];\n          break;\n        }\n        else if (dp.dwParseFlags & (DP_AM|DP_PM))\n          hRet = DISP_E_TYPEMISMATCH;\n      }\n      else if (dp.dwCount == 4)\n      {\n        dp.dwCount = 3;\n        if (dp.dwFlags[0] & (DP_AM|DP_PM)) /* TDDD */\n        {\n          st.wHour = dp.dwValues[0];\n          dwOffset = 1;\n        }\n        else if (dp.dwFlags[3] & (DP_AM|DP_PM)) /* DDDT */\n        {\n          st.wHour = dp.dwValues[3];\n        }\n        else\n          hRet = DISP_E_TYPEMISMATCH;\n        break;\n      }\n      /* .. fall through .. */\n\n    case 0x8: /* DDDTT */\n      if ((dp.dwCount == 2 && (dp.dwParseFlags & (DP_AM|DP_PM))) ||\n          (dp.dwCount == 5 && ((dp.dwFlags[0] & (DP_AM|DP_PM)) ||\n           (dp.dwFlags[1] & (DP_AM|DP_PM)) || (dp.dwFlags[2] & (DP_AM|DP_PM)))) ||\n           dp.dwCount == 4 || dp.dwCount == 6)\n        hRet = DISP_E_TYPEMISMATCH;\n      st.wHour   = dp.dwValues[3];\n      st.wMinute = dp.dwValues[4];\n      if (dp.dwCount == 5)\n        dp.dwCount -= 2;\n      break;\n\n    case 0xC: /* DDTTT */\n      if (dp.dwCount != 5 ||\n          (dp.dwFlags[0] & (DP_AM|DP_PM)) || (dp.dwFlags[1] & (DP_AM|DP_PM)))\n        hRet = DISP_E_TYPEMISMATCH;\n      st.wHour   = dp.dwValues[2];\n      st.wMinute = dp.dwValues[3];\n      st.wSecond = dp.dwValues[4];\n      dp.dwCount -= 3;\n      break;\n\n    case 0x18: /* DDDTTT */\n      if ((dp.dwFlags[0] & (DP_AM|DP_PM)) || (dp.dwFlags[1] & (DP_AM|DP_PM)) ||\n          (dp.dwFlags[2] & (DP_AM|DP_PM)))\n        hRet = DISP_E_TYPEMISMATCH;\n      st.wHour   = dp.dwValues[3];\n      st.wMinute = dp.dwValues[4];\n      st.wSecond = dp.dwValues[5];\n      dp.dwCount -= 3;\n      break;\n\n    default:\n      hRet = DISP_E_TYPEMISMATCH;\n      break;\n    }\n\n    if (SUCCEEDED(hRet))\n    {\n      hRet = VARIANT_MakeDate(&dp, iDate, dwOffset, &st);\n\n      if (dwFlags & VAR_TIMEVALUEONLY)\n      {\n        st.wYear = 1899;\n        st.wMonth = 12;\n        st.wDay = 30;\n      }\n      else if (dwFlags & VAR_DATEVALUEONLY)\n       st.wHour = st.wMinute = st.wSecond = 0;\n\n      /* Finally, convert the value to a VT_DATE */\n      if (SUCCEEDED(hRet))\n        hRet = SystemTimeToVariantTime(&st, pdateOut) ? S_OK : DISP_E_TYPEMISMATCH;\n    }\n  }\n\n  for (i = 0; i < ARRAY_SIZE(tokens); i++)\n    SysFreeString16(tokens[i]);\n  return hRet;\n}\n\n\n/******************************************************************************\n * VarDateFromI1 (OLEAUT32.221)\n *\n * Convert a VT_I1 to a VT_DATE.\n *\n * PARAMS\n *  cIn      [I] Source\n *  pdateOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarDateFromI116(signed char cIn, DATE* pdateOut)\n{\n  return VarR8FromI1(cIn, pdateOut);\n}\n\n/******************************************************************************\n * VarDateFromUI2 (OLEAUT32.222)\n *\n * Convert a VT_UI2 to a VT_DATE.\n *\n * PARAMS\n *  uiIn     [I] Source\n *  pdateOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarDateFromUI216(USHORT uiIn, DATE* pdateOut)\n{\n  return VarR8FromUI2(uiIn, pdateOut);\n}\n\n/******************************************************************************\n * VarDateFromUI4 (OLEAUT32.223)\n *\n * Convert a VT_UI4 to a VT_DATE.\n *\n * PARAMS\n *  ulIn     [I] Source\n *  pdateOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarDateFromUI416(ULONG ulIn, DATE* pdateOut)\n{\n  return VarDateFromR8(ulIn, pdateOut);\n}\n\n/**********************************************************************\n * VarDateFromDec (OLEAUT32.224)\n *\n * Convert a VT_DECIMAL to a VT_DATE.\n *\n * PARAMS\n *  pdecIn   [I] Source\n *  pdateOut [O] Destination\n *\n * RETURNS\n *  S_OK.\n */\nHRESULT WINAPI VarDateFromDec16(DECIMAL *pdecIn, DATE* pdateOut)\n{\n  return VarR8FromDec(pdecIn, pdateOut);\n}\n\n/******************************************************************************\n * VarDateFromI8 (OLEAUT32.364)\n *\n * Convert a VT_I8 to a VT_DATE.\n *\n * PARAMS\n *  llIn     [I] Source\n *  pdateOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarDateFromI816(LONG64 llIn, DATE* pdateOut)\n{\n  if (llIn < DATE_MIN || llIn > DATE_MAX) return DISP_E_OVERFLOW;\n  *pdateOut = (DATE)llIn;\n  return S_OK;\n}\n\n/******************************************************************************\n * VarDateFromUI8 (OLEAUT32.365)\n *\n * Convert a VT_UI8 to a VT_DATE.\n *\n * PARAMS\n *  ullIn    [I] Source\n *  pdateOut [O] Destination\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: DISP_E_OVERFLOW, if the value will not fit in the destination\n */\nHRESULT WINAPI VarDateFromUI816(ULONG64 ullIn, DATE* pdateOut)\n{\n  if (ullIn > DATE_MAX) return DISP_E_OVERFLOW;\n  *pdateOut = (DATE)ullIn;\n  return S_OK;\n}\n"
  },
  {
    "path": "ole2disp/wine_typelib.c",
    "content": "/*\n *\tTYPELIB\n *\n *\tCopyright 1997\tMarcus Meissner\n *\t\t      1999  Rein Klazes\n *\t\t      2000  Francois Jacques\n *\t\t      2001  Huw D M Davies for CodeWeavers\n *\t\t      2004  Alastair Bridgewater\n *\t\t      2005  Robert Shearman, for CodeWeavers\n *\t\t      2013  Andrew Eikum for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n * --------------------------------------------------------------------------------------\n * Known problems (2000, Francois Jacques)\n *\n * - Tested using OLEVIEW (Platform SDK tool) only.\n *\n * - dual interface dispinterfaces. vtable-interface ITypeInfo instances are\n *   creating by doing a straight copy of the dispinterface instance and just changing\n *   its typekind. Pointed structures aren't copied - only the address of the pointers.\n *\n * - locale stuff is partially implemented but hasn't been tested.\n *\n * - typelib file is still read in its entirety, but it is released now.\n *\n * --------------------------------------------------------------------------------------\n *  Known problems left from previous implementation (1999, Rein Klazes) :\n *\n * -. Data structures are straightforward, but slow for look-ups.\n * -. (related) nothing is hashed\n * -. Most error return values are just guessed not checked with windows\n *      behaviour.\n * -. lousy fatal error handling\n *\n */\n\n#include \"config.h\"\n#undef HAVE_STRNCASECMP\n#define HAVE__STRNICMP\n#include \"wine/port.h\"\n\n#include <stdlib.h>\n#include <string.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <ctype.h>\n\n#define COBJMACROS\n#define NONAMELESSUNION\n#undef DUMMYUNIONNAME\n#undef DUMMYSTRUCTNAME\n#define __C89_NAMELESSUNIONNAME DUMMYUNIONNAME\n#define _WIN32_WINNT 0xA00\n\n#include \"winerror.h\"\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winnls.h\"\n#include \"winreg.h\"\n#include \"winuser.h\"\n#include \"winternl.h\"\n#include \"lzexpand.h\"\n\n#include \"wine/unicode.h\"\n#include \"objbase.h\"\n#include \"wine_typelib.h\"\n#include \"wine/debug.h\"\n#define __WINE_ALLOC_SIZE(x)\n/*#include \"variant.h\"*/\n#include \"wine/heap.h\"\n#include \"wine/list.h\"\n#include \"wine/winbase16.h\"\n#include \"wownt32.h\"\n#include \"wine/windef16.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(ole);\nWINE_DECLARE_DEBUG_CHANNEL(typelib);\n#define IFS_THUNK_NDEF_DBG_CHANNEL\n#include \"ole2disp.h\"\n#include \"../ole2/ifs_thunk.h\"\ntypedef struct _FILE_NAME_INFORMATION {\n    ULONG FileNameLength;\n    WCHAR FileName[1];\n} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;\nHRESULT WINAPI LoadTypeLibEx16Impl(\n    LPCOLESTR szFile,  /* [in] Name of file to load from */\n    REGKIND  regkind,  /* [in] Specify kind of registration */\n    ITypeLib **pptLib); /* [out] Pointer to pointer to loaded type library */\nHRESULT WINAPI LoadTypeLib16Impl(const OLECHAR *szFile, ITypeLib * *pptLib);\nINT16 WINAPI StringFromGUID216(REFGUID id, LPOLESTR16 str, INT16 cmax);\n#if 0\ntypedef struct\n{\n    WORD     offset;\n    WORD     length;\n    WORD     flags;\n    WORD     id;\n    WORD     handle;\n    WORD     usage;\n} NE_NAMEINFO;\n\ntypedef struct\n{\n    WORD        type_id;   /* Type identifier */\n    WORD        count;     /* Number of resources of this type */\n    DWORD       resloader; /* SetResourceHandler() */\n    /*\n     * Name info array.\n     */\n} NE_TYPEINFO;\n#endif\n\nstatic HRESULT typedescvt_to_variantvt(ITypeInfo *tinfo, const TYPEDESC *tdesc, VARTYPE *vt);\nstatic HRESULT TLB_AllocAndInitVarDesc(const VARDESC *src, VARDESC **dest_ptr);\nstatic void TLB_FreeVarDesc(VARDESC*);\n\n/****************************************************************************\n *              FromLExxx\n *\n * Takes p_iVal (which is in little endian) and returns it\n *   in the host machine's byte order.\n */\n#ifdef WORDS_BIGENDIAN\nstatic WORD FromLEWord(WORD p_iVal)\n{\n  return (((p_iVal & 0x00FF) << 8) |\n\t  ((p_iVal & 0xFF00) >> 8));\n}\n\n\nstatic DWORD FromLEDWord(DWORD p_iVal)\n{\n  return (((p_iVal & 0x000000FF) << 24) |\n\t  ((p_iVal & 0x0000FF00) <<  8) |\n\t  ((p_iVal & 0x00FF0000) >>  8) |\n\t  ((p_iVal & 0xFF000000) >> 24));\n}\n#else\n#define FromLEWord(X)  (X)\n#define FromLEDWord(X) (X)\n#endif\n\n#define DISPATCH_HREF_OFFSET 0x01000000\n#define DISPATCH_HREF_MASK   0xff000000\n\n/****************************************************************************\n *              FromLExxx\n *\n * Fix byte order in any structure if necessary\n */\n#ifdef WORDS_BIGENDIAN\nstatic void FromLEWords(void *p_Val, int p_iSize)\n{\n  WORD *Val = p_Val;\n\n  p_iSize /= sizeof(WORD);\n\n  while (p_iSize) {\n    *Val = FromLEWord(*Val);\n    Val++;\n    p_iSize--;\n  }\n}\n\n\nstatic void FromLEDWords(void *p_Val, int p_iSize)\n{\n  DWORD *Val = p_Val;\n\n  p_iSize /= sizeof(DWORD);\n\n  while (p_iSize) {\n    *Val = FromLEDWord(*Val);\n    Val++;\n    p_iSize--;\n  }\n}\n#else\n#define FromLEWords(X,Y) /*nothing*/\n#define FromLEDWords(X,Y) /*nothing*/\n#endif\n\n/*\n * Find a typelib key which matches a requested maj.min version.\n */\nstatic BOOL find_typelib_key( REFGUID guid, WORD *wMaj, WORD *wMin )\n{\n    static const char typelib[] = \"Typelib\\\\\";\n    char buffer[60];\n    char key_name[16];\n    DWORD len, i;\n    INT best_maj = -1, best_min = -1;\n    HKEY hkey;\n\n    memcpy( buffer, typelib, sizeof(typelib) );\n    StringFromGUID216( guid, buffer + strlen(buffer), 40 );\n\n    if (RegOpenKey16( HKEY_CLASSES_ROOT, buffer, &hkey ) != ERROR_SUCCESS)\n        return FALSE;\n\n    len = sizeof(key_name);\n    i = 0;\n    while (RegEnumKey16(hkey, i++, key_name, len) == ERROR_SUCCESS)\n    {\n        INT v_maj, v_min;\n\n        if (sscanf(key_name, \"%x.%x\", &v_maj, &v_min) == 2)\n        {\n            TRACE(\"found %s: %x.%x\\n\", debugstr_a(buffer), v_maj, v_min);\n\n            if (*wMaj == 0xffff && *wMin == 0xffff)\n            {\n                if (v_maj > best_maj) best_maj = v_maj;\n                if (v_min > best_min) best_min = v_min;\n            }\n            else if (*wMaj == v_maj)\n            {\n                best_maj = v_maj;\n\n                if (*wMin == v_min)\n                {\n                    best_min = v_min;\n                    break; /* exact match */\n                }\n                if (*wMin != 0xffff && v_min > best_min) best_min = v_min;\n            }\n        }\n        len = sizeof(key_name);\n    }\n    RegCloseKey16( hkey );\n\n    TRACE(\"found best_maj %d, best_min %d\\n\", best_maj, best_min);\n\n    if (*wMaj == 0xffff && *wMin == 0xffff)\n    {\n        if (best_maj >= 0 && best_min >= 0)\n        {\n            *wMaj = best_maj;\n            *wMin = best_min;\n            return TRUE;\n        }\n    }\n\n    if (*wMaj == best_maj && best_min >= 0)\n    {\n        *wMin = best_min;\n        return TRUE;\n    }\n    return FALSE;\n}\n\n/* get the path of a typelib key, in the form \"Typelib\\\\<guid>\\\\<maj>.<min>\" */\n/* buffer must be at least 60 characters long */\nstatic char *get_typelib_key( REFGUID guid, WORD wMaj, WORD wMin, char *buffer )\n{\n    static const char Typelib[] = \"Typelib\\\\\";\n    static const char VersionFormat[] = \"\\\\%x.%x\";\n\n    memcpy( buffer, Typelib, sizeof(Typelib) );\n    StringFromGUID216( guid, buffer + strlen(buffer), 40 );\n    sprintf( buffer + strlen(buffer), VersionFormat, wMaj, wMin );\n    return buffer;\n}\n\n/* get the path of an interface key, in the form \"Interface\\\\<guid>\" */\n/* buffer must be at least 50 characters long */\nstatic char *get_interface_key( REFGUID guid, char *buffer )\n{\n    static const char Interface[] = \"Interface\\\\\";\n\n    memcpy( buffer, Interface, sizeof(Interface) );\n    StringFromGUID216( guid, buffer + strlen(buffer), 40 );\n    return buffer;\n}\n\n/* get the lcid subkey for a typelib, in the form \"<lcid>\\\\<syskind>\" */\n/* buffer must be at least 16 characters long */\nstatic char *get_lcid_subkey( LCID lcid, SYSKIND syskind, char *buffer )\n{\n    static const char LcidFormat[] = \"%lx\\\\\";\n    static const char win16[] = \"win16\"; \n    static const char win32[] = \"win32\";\n    static const char win64[] = \"win64\";\n\n    sprintf( buffer, LcidFormat, lcid );\n    switch(syskind)\n    {\n    case SYS_WIN16: strcat( buffer, win16 ); break;\n    case SYS_WIN32: strcat( buffer, win32 ); break;\n    case SYS_WIN64: strcat( buffer, win64 ); break;\n    default:\n        TRACE(\"Typelib is for unsupported syskind %i\\n\", syskind);\n        return NULL;\n    }\n    return buffer;\n}\n\n#if 1\nstatic HRESULT TLB_ReadTypeLib(LPCWSTR pszFileName, LPWSTR pszPath, UINT cchPath, ITypeLib2 **ppTypeLib);\n\nstruct tlibredirect_data\n{\n    ULONG  size;\n    DWORD  res;\n    ULONG  name_len;\n    ULONG  name_offset;\n    LANGID langid;\n    WORD   flags;\n    ULONG  help_len;\n    ULONG  help_offset;\n    WORD   major_version;\n    WORD   minor_version;\n};\n\n/* Get the path to a registered type library. Helper for QueryPathOfRegTypeLib. */\nstatic HRESULT query_typelib_path( REFGUID guid, WORD wMaj, WORD wMin,\n                                   SYSKIND syskind, LCID lcid, char **path, BOOL redir )\n{\n    HRESULT hr = TYPE_E_LIBNOTREGISTERED;\n    LCID myLCID = lcid;\n    HKEY hkey;\n    char buffer[60];\n    char Patha[MAX_PATH];\n    LONG res;\n\n    TRACE_(typelib)(\"(%s, %x.%x, 0x%x, %p)\\n\", debugstr_guid(guid), wMaj, wMin, lcid, path);\n\n    if (redir)\n    {\n        ACTCTX_SECTION_KEYED_DATA data;\n\n        data.cbSize = sizeof(data);\n        if (FindActCtxSectionGuid( 0, NULL, ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION, guid, &data ))\n        {\n            struct tlibredirect_data *tlib = (struct tlibredirect_data*)data.lpData;\n            WCHAR *nameW;\n            DWORD len;\n            WCHAR Path[MAX_PATH];\n            char *PathWA;\n\n            if ((wMaj != 0xffff || wMin != 0xffff) && (tlib->major_version != wMaj || tlib->minor_version < wMin))\n                return TYPE_E_LIBNOTREGISTERED;\n\n            nameW = (WCHAR*)((BYTE*)data.lpSectionBase + tlib->name_offset);\n            len = SearchPathW( NULL, nameW, NULL, ARRAY_SIZE( Path ), Path, NULL );\n            if (!len) return TYPE_E_LIBNOTREGISTERED;\n\n            TRACE_(typelib)(\"got path from context %s\\n\", debugstr_w(Path));\n            *path = strdupWtoA(Path);\n            return S_OK;\n        }\n    }\n\n    if (!find_typelib_key( guid, &wMaj, &wMin )) return TYPE_E_LIBNOTREGISTERED;\n    get_typelib_key( guid, wMaj, wMin, buffer );\n\n    res = RegOpenKey16( HKEY_CLASSES_ROOT, buffer, &hkey );\n    if (res == ERROR_FILE_NOT_FOUND)\n    {\n        TRACE_(typelib)(\"%s not found\\n\", debugstr_a(buffer));\n        return TYPE_E_LIBNOTREGISTERED;\n    }\n    else if (res != ERROR_SUCCESS)\n    {\n        TRACE_(typelib)(\"failed to open %s for read access\\n\", debugstr_a(buffer));\n        return TYPE_E_REGISTRYACCESS;\n    }\n\n    while (hr != S_OK)\n    {\n        LONG dwPathLen = sizeof(Patha);\n\n        get_lcid_subkey( myLCID, syskind, buffer );\n\n        if (RegQueryValue16(hkey, buffer, Patha, &dwPathLen))\n        {\n            if (!lcid)\n                break;\n            else if (myLCID == lcid)\n            {\n                /* try with sub-langid */\n                myLCID = SUBLANGID(lcid);\n            }\n            else if ((myLCID == SUBLANGID(lcid)) && myLCID)\n            {\n                /* try with system langid */\n                myLCID = 0;\n            }\n            else\n            {\n                break;\n            }\n        }\n        else\n        {\n            *path = HeapAlloc(GetProcessHeap(), 0, strlen(Patha) + 1);\n            strcpy(*path, Patha);\n            hr = S_OK;\n        }\n    }\n    RegCloseKey16( hkey );\n    TRACE_(typelib)(\"-- 0x%08x\\n\", hr);\n    return hr;\n}\n\n#if 0\n/****************************************************************************\n *\t\tQueryPathOfRegTypeLib\t[OLEAUT32.164]\n *\n * Gets the path to a registered type library.\n *\n * PARAMS\n *  guid [I] referenced guid\n *  wMaj [I] major version\n *  wMin [I] minor version\n *  lcid [I] locale id\n *  path [O] path of typelib\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: If the type library is not registered then TYPE_E_LIBNOTREGISTERED\n *  or TYPE_E_REGISTRYACCESS if the type library registration key couldn't be\n *  opened.\n */\nHRESULT WINAPI QueryPathOfRegTypeLib( REFGUID guid, WORD wMaj, WORD wMin, LCID lcid, LPBSTR path )\n{\n    BOOL redir = TRUE;\n#ifdef _WIN64\n    HRESULT hres = query_typelib_path( guid, wMaj, wMin, SYS_WIN64, lcid, path, TRUE );\n    if(SUCCEEDED(hres))\n        return hres;\n    redir = FALSE;\n#endif\n    return query_typelib_path( guid, wMaj, wMin, SYS_WIN32, lcid, path, redir );\n}\n#endif\n\n/******************************************************************************\n * CreateTypeLib [OLEAUT32.160]  creates a typelib\n *\n * RETURNS\n *    Success: S_OK\n *    Failure: Status\n */\nHRESULT WINAPI CreateTypeLib(\n\tSYSKIND syskind, LPCOLESTR szFile, ICreateTypeLib** ppctlib\n) {\n    FIXME(\"(%d,%s,%p), stub!\\n\",syskind,debugstr_w(szFile),ppctlib);\n    return E_FAIL;\n}\n\n/******************************************************************************\n *\t\tLoadTypeLib\t[OLEAUT32.161]\n *\n * Loads a type library\n *\n * PARAMS\n *  szFile [I] Name of file to load from.\n *  pptLib [O] Pointer that receives ITypeLib object on success.\n *\n * RETURNS\n *    Success: S_OK\n *    Failure: Status\n *\n * SEE\n *  LoadTypeLibEx, LoadRegTypeLib, CreateTypeLib.\n */\nHRESULT WINAPI LoadTypeLib16Impl(const OLECHAR *szFile, ITypeLib * *pptLib)\n{\n    TRACE(\"(%s,%p)\\n\",debugstr_w(szFile), pptLib);\n    return LoadTypeLibEx16Impl(szFile, REGKIND_DEFAULT, pptLib);\n}\n\n/******************************************************************************\n *\t\tLoadTypeLibEx\t[OLEAUT32.183]\n *\n * Loads and optionally registers a type library\n *\n * RETURNS\n *    Success: S_OK\n *    Failure: Status\n */\nHRESULT WINAPI LoadTypeLibEx16Impl(\n    LPCOLESTR szFile,  /* [in] Name of file to load from */\n    REGKIND  regkind,  /* [in] Specify kind of registration */\n    ITypeLib **pptLib) /* [out] Pointer to pointer to loaded type library */\n{\n    WCHAR szPath[MAX_PATH+1];\n    HRESULT res;\n\n    TRACE(\"(%s,%d,%p)\\n\",debugstr_w(szFile), regkind, pptLib);\n\n    if (!szFile || !pptLib)\n        return E_INVALIDARG;\n\n    *pptLib = NULL;\n\n    res = TLB_ReadTypeLib(szFile, szPath, MAX_PATH + 1, (ITypeLib2**)pptLib);\n\n    if (SUCCEEDED(res))\n        switch(regkind)\n        {\n            case REGKIND_DEFAULT:\n                /* don't register typelibs supplied with full path. Experimentation confirms the following */\n                if (((szFile[0] == '\\\\') && (szFile[1] == '\\\\')) ||\n                    (szFile[0] && (szFile[1] == ':'))) break;\n                /* else fall-through */\n\n            case REGKIND_REGISTER:\n                if (FAILED(res = RegisterTypeLib(*pptLib, szPath, NULL)))\n                {\n                    ITypeLib_Release(*pptLib);\n                    *pptLib = 0;\n                }\n                break;\n            case REGKIND_NONE:\n                break;\n        }\n\n    TRACE(\" returns %08x\\n\",res);\n    return res;\n}\n\n/******************************************************************************\n *\t\tLoadRegTypeLib\t[OLEAUT32.162]\n *\n * Loads a registered type library.\n *\n * PARAMS\n *  rguid     [I] GUID of the registered type library.\n *  wVerMajor [I] major version.\n *  wVerMinor [I] minor version.\n *  lcid      [I] locale ID.\n *  ppTLib    [O] pointer that receives an ITypeLib object on success.\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: Any HRESULT code returned from QueryPathOfRegTypeLib or\n *  LoadTypeLib.\n */\nHRESULT WINAPI LoadRegTypeLib(\n\tREFGUID rguid,\n\tWORD wVerMajor,\n\tWORD wVerMinor,\n\tLCID lcid,\n\tITypeLib **ppTLib)\n{\n    BSTR bstr=NULL;\n    HRESULT res;\n\n    *ppTLib = NULL;\n\n    res = QueryPathOfRegTypeLib( rguid, wVerMajor, wVerMinor, lcid, &bstr);\n\n    if(SUCCEEDED(res))\n    {\n        res= LoadTypeLib16Impl(bstr, ppTLib);\n        SysFreeString(bstr);\n\n        if ((wVerMajor!=0xffff || wVerMinor!=0xffff) && *ppTLib)\n        {\n            TLIBATTR *attr;\n\n            res = ITypeLib_GetLibAttr(*ppTLib, &attr);\n            if (res == S_OK)\n            {\n                BOOL mismatch = attr->wMajorVerNum != wVerMajor || attr->wMinorVerNum < wVerMinor;\n                ITypeLib_ReleaseTLibAttr(*ppTLib, attr);\n\n                if (mismatch)\n                {\n                    ITypeLib_Release(*ppTLib);\n                    *ppTLib = NULL;\n                    res = TYPE_E_LIBNOTREGISTERED;\n                }\n            }\n        }\n    }\n\n    TRACE(\"(IID: %s) load %s (%p)\\n\",debugstr_guid(rguid), SUCCEEDED(res)? \"SUCCESS\":\"FAILED\", *ppTLib);\n\n    return res;\n}\n\n\n/* some string constants shared between RegisterTypeLib and UnRegisterTypeLib */\nstatic const char TypeLib[] = \"TypeLib\";\nstatic const char FLAGS[] = \"FLAGS\";\nstatic const char HELPDIR[] = \"HELPDIR\";\nstatic const char ProxyStubClsid[] = \"ProxyStubClsid\";\nstatic const char ProxyStubClsid32[] = \"ProxyStubClsid32\";\n\nstatic void TLB_register_interface(TLIBATTR *libattr, LPOLESTR name, TYPEATTR *tattr, DWORD flag)\n{\n    char keyName[60];\n    HKEY key, subKey;\n\n    static const char PSOA[] = \"{00020424-0000-0000-C000-000000000046}\";\n\n    get_interface_key( &tattr->guid, keyName );\n    if (RegCreateKey16(HKEY_CLASSES_ROOT, keyName, &key) == ERROR_SUCCESS)\n    {\n        if (name)\n            RegSetValueEx16(key, NULL, 0, REG_SZ,\n                           (BYTE *)name, (strlenW(name)+1) * sizeof(OLECHAR));\n\n        if (RegCreateKey16(key, ProxyStubClsid, &subKey) == ERROR_SUCCESS) {\n            RegSetValueEx16(subKey, NULL, 0, REG_SZ,\n                           (const BYTE *)PSOA, sizeof PSOA);\n            RegCloseKey16(subKey);\n        }\n\n        if (RegCreateKey16(key, ProxyStubClsid32, &subKey) == ERROR_SUCCESS) {\n            RegSetValueEx16(subKey, NULL, 0, REG_SZ,\n                           (const BYTE *)PSOA, sizeof PSOA);\n            RegCloseKey16(subKey);\n        }\n\n        if (RegCreateKey16(key, TypeLib, &subKey) == ERROR_SUCCESS)\n        {\n            char buffer[40];\n            static const char fmtver[] = {'%','x','.','%','x',0 };\n            static const char Version[] = \"Version\";\n\n            StringFromGUID216(&libattr->guid, buffer, 40);\n            RegSetValueEx16(subKey, NULL, 0, REG_SZ,\n                           (BYTE *)buffer, (strlen(buffer)+1) * sizeof(char));\n            sprintf(buffer, fmtver, libattr->wMajorVerNum, libattr->wMinorVerNum);\n            RegSetValueEx16(subKey, Version, 0, REG_SZ,\n                           (BYTE*)buffer, (strlen(buffer)+1) * sizeof(char));\n            RegCloseKey16(subKey);\n        }\n\n        RegCloseKey16(key);\n    }\n}\n\n/******************************************************************************\n *\t\tRegisterTypeLib\t[OLEAUT32.163]\n * Adds information about a type library to the System Registry\n * NOTES\n *    Docs: ITypeLib FAR * ptlib\n *    Docs: OLECHAR FAR* szFullPath\n *    Docs: OLECHAR FAR* szHelpDir\n *\n * RETURNS\n *    Success: S_OK\n *    Failure: Status\n */\nHRESULT WINAPI RegisterTypeLib(\n     ITypeLib * ptlib,     /* [in] Pointer to the library*/\n     OLECHAR * szFullPath, /* [in] full Path of the library*/\n     OLECHAR * szHelpDir)  /* [in] dir to the helpfile for the library,\n\t\t\t\t\t\t\t may be NULL*/\n{\n    HRESULT res;\n    TLIBATTR *attr;\n    char keyName[60];\n    char tmp[16];\n    HKEY key, subKey;\n    UINT types, tidx;\n    TYPEKIND kind;\n    DWORD disposition;\n\n    if (ptlib == NULL || szFullPath == NULL)\n        return E_INVALIDARG;\n\n    char *fullpatha = strdupWtoA(szFullPath);\n\n    if (FAILED(ITypeLib_GetLibAttr(ptlib, &attr)))\n        return E_FAIL;\n\n#ifndef _WIN64\n    if (attr->syskind == SYS_WIN64) return TYPE_E_BADMODULEKIND;\n#endif\n\n    get_typelib_key( &attr->guid, attr->wMajorVerNum, attr->wMinorVerNum, keyName );\n\n    res = S_OK;\n    if (RegCreateKey16(HKEY_CLASSES_ROOT, keyName, &key) == ERROR_SUCCESS)\n    {\n        LPOLESTR doc;\n\n        /* Set the human-readable name of the typelib */\n        if (FAILED(ITypeLib_GetDocumentation(ptlib, -1, NULL, &doc, NULL, NULL)))\n            res = E_FAIL;\n        else if (doc)\n        {\n            char *doca = strdupWtoA(doc);\n            if (RegSetValueEx16(key, NULL, 0, REG_SZ, doca, lstrlenA(doca)+1) != ERROR_SUCCESS)\n                res = E_FAIL;\n\n            SysFreeString(doc);\n            HeapFree(GetProcessHeap(), 0, doca);\n        }\n\n        /* Make up the name of the typelib path subkey */\n        if (!get_lcid_subkey( attr->lcid, attr->syskind, tmp )) res = E_FAIL;\n\n        /* Create the typelib path subkey */\n        if (res == S_OK && RegCreateKey16(key, tmp, &subKey) == ERROR_SUCCESS)\n        {\n            if (RegSetValueEx16(subKey, NULL, 0, REG_SZ, fullpatha, lstrlenA(fullpatha)+1) != ERROR_SUCCESS)\n                res = E_FAIL;\n\n            RegCloseKey16(subKey);\n        }\n        else\n            res = E_FAIL;\n\n        /* Create the flags subkey */\n        if (res == S_OK && RegCreateKey16(key, FLAGS, &subKey) == ERROR_SUCCESS)\n        {\n            /* FIXME: is %u correct? */\n            static const char format[] = \"%u\";\n            char buf[20];\n            sprintf(buf, format, attr->wLibFlags);\n            if (RegSetValueEx16(subKey, NULL, 0, REG_SZ, buf, lstrlenA(buf) + 1) != ERROR_SUCCESS)\n                res = E_FAIL;\n\n            RegCloseKey16(subKey);\n        }\n        else\n            res = E_FAIL;\n\n        /* create the helpdir subkey */\n        if (res == S_OK && RegOpenKey16(key, HELPDIR, &subKey) == ERROR_SUCCESS)\n        {\n            disposition = REG_OPENED_EXISTING_KEY;\n            RegCloseKey16(subKey);\n        }\n        else\n        {\n            disposition = REG_CREATED_NEW_KEY;\n        }\n\n        if (res == S_OK && RegCreateKey16(key, HELPDIR, &subKey) == ERROR_SUCCESS)\n        {\n            BOOL freeHelpDir = FALSE;\n            OLECHAR16* pIndexStr;\n            OLECHAR16* helpstra = NULL;\n\n            /* if we created a new key, and helpDir was null, set the helpdir\n               to the directory which contains the typelib. However,\n               if we just opened an existing key, we leave the helpdir alone */\n            if ((disposition == REG_CREATED_NEW_KEY) && (szHelpDir == NULL)) {\n                helpstra = SysAllocString16(fullpatha);\n                pIndexStr = strrchr(szHelpDir, '\\\\');\n                if (pIndexStr) {\n                    *pIndexStr = 0;\n                }\n                freeHelpDir = TRUE;\n            }\n            else if (szHelpDir != NULL)\n                helpstra = strdupWtoA(szHelpDir);\n\n\n            /* if we have an szHelpDir, set it! */\n            if (helpstra != NULL) {\n                if (RegSetValueEx16(subKey, NULL, 0, REG_SZ, helpstra, (lstrlenA(szHelpDir)+1)) != ERROR_SUCCESS)\n                    res = E_FAIL;\n                if (freeHelpDir) SysFreeString16(helpstra);\n                else HeapFree(GetProcessHeap(), 0, helpstra);\n            }\n\n            /* tidy up */\n            RegCloseKey16(subKey);\n\n        } else {\n            res = E_FAIL;\n        }\n\n        RegCloseKey16(key);\n    }\n    else\n        res = E_FAIL;\n\n    /* register OLE Automation-compatible interfaces for this typelib */\n    types = ITypeLib_GetTypeInfoCount(ptlib);\n    for (tidx=0; tidx<types; tidx++) {\n\tif (SUCCEEDED(ITypeLib_GetTypeInfoType(ptlib, tidx, &kind))) {\n\t    LPOLESTR name = NULL;\n\t    ITypeInfo *tinfo = NULL;\n\n\t    ITypeLib_GetDocumentation(ptlib, tidx, &name, NULL, NULL, NULL);\n\n\t    switch (kind) {\n\t    case TKIND_INTERFACE:\n\t\tTRACE_(typelib)(\"%d: interface %s\\n\", tidx, debugstr_w(name));\n\t\tITypeLib_GetTypeInfo(ptlib, tidx, &tinfo);\n\t\tbreak;\n\n\t    case TKIND_DISPATCH:\n\t\tTRACE_(typelib)(\"%d: dispinterface %s\\n\", tidx, debugstr_w(name));\n                ITypeLib_GetTypeInfo(ptlib, tidx, &tinfo);\n\t\tbreak;\n\n\t    default:\n\t\tTRACE_(typelib)(\"%d: %s\\n\", tidx, debugstr_w(name));\n\t\tbreak;\n\t    }\n\n\t    if (tinfo) {\n\t\tTYPEATTR *tattr = NULL;\n\t\tITypeInfo_GetTypeAttr(tinfo, &tattr);\n\n\t\tif (tattr) {\n\t\t    TRACE_(typelib)(\"guid=%s, flags=%04x (\",\n\t\t\t\t    debugstr_guid(&tattr->guid),\n\t\t\t\t    tattr->wTypeFlags);\n\n\t\t    if (TRACE_ON(typelib)) {\n#define XX(x) if (TYPEFLAG_##x & tattr->wTypeFlags) MESSAGE(#x\"|\");\n\t\t\tXX(FAPPOBJECT);\n\t\t\tXX(FCANCREATE);\n\t\t\tXX(FLICENSED);\n\t\t\tXX(FPREDECLID);\n\t\t\tXX(FHIDDEN);\n\t\t\tXX(FCONTROL);\n\t\t\tXX(FDUAL);\n\t\t\tXX(FNONEXTENSIBLE);\n\t\t\tXX(FOLEAUTOMATION);\n\t\t\tXX(FRESTRICTED);\n\t\t\tXX(FAGGREGATABLE);\n\t\t\tXX(FREPLACEABLE);\n\t\t\tXX(FDISPATCHABLE);\n\t\t\tXX(FREVERSEBIND);\n\t\t\tXX(FPROXY);\n#undef XX\n\t\t\tMESSAGE(\"\\n\");\n\t\t    }\n\n                    /* Register all dispinterfaces (which includes dual interfaces) and\n                       oleautomation interfaces */\n\t\t    if ((kind == TKIND_INTERFACE && (tattr->wTypeFlags & TYPEFLAG_FOLEAUTOMATION)) ||\n                        kind == TKIND_DISPATCH)\n\t\t    {\n                        BOOL is_wow64;\n                        DWORD opposite = (sizeof(void*) == 8 ? KEY_WOW64_32KEY : KEY_WOW64_64KEY);\n\n                        /* register interface<->typelib coupling */\n                        TLB_register_interface(attr, name, tattr, 0);\n\n                        /* register TLBs into the opposite registry view, too */\n                        if(opposite == KEY_WOW64_32KEY ||\n                                 (IsWow64Process(GetCurrentProcess(), &is_wow64) && is_wow64))\n                            TLB_register_interface(attr, name, tattr, opposite);\n\t\t    }\n\n\t\t    ITypeInfo_ReleaseTypeAttr(tinfo, tattr);\n\t\t}\n\n\t\tITypeInfo_Release(tinfo);\n\t    }\n\n\t    SysFreeString(name);\n\t}\n    }\n\n    ITypeLib_ReleaseTLibAttr(ptlib, attr);\n\n    HeapFree(GetProcessHeap(), 0, fullpatha);\n    return res;\n}\n\nstatic void TLB_unregister_interface(GUID *guid, REGSAM flag)\n{\n    WCHAR subKeyName[50];\n    HKEY subKey;\n\n    /* the path to the type */\n    get_interface_key( guid, subKeyName );\n\n    /* Delete its bits */\n    if (RegOpenKey16(HKEY_CLASSES_ROOT, subKeyName, &subKey) != ERROR_SUCCESS)\n        return;\n\n    RegDeleteKey16(subKey, ProxyStubClsid);\n    RegDeleteKey16(subKey, ProxyStubClsid32);\n    RegDeleteKey16(subKey, TypeLib);\n    RegCloseKey16(subKey);\n    RegDeleteKey16(HKEY_CLASSES_ROOT, subKeyName);\n}\n\n/******************************************************************************\n *\tUnRegisterTypeLib\t[OLEAUT32.186]\n * Removes information about a type library from the System Registry\n * NOTES\n *\n * RETURNS\n *    Success: S_OK\n *    Failure: Status\n */\nHRESULT WINAPI UnRegisterTypeLib(\n    REFGUID libid,\t/* [in] Guid of the library */\n\tWORD wVerMajor,\t/* [in] major version */\n\tWORD wVerMinor,\t/* [in] minor version */\n\tLCID lcid,\t/* [in] locale id */\n\tSYSKIND syskind)\n{\n    BSTR16 tlibPath = NULL;\n    BSTR tlibPathW;\n    DWORD tmpLength;\n    char keyName[60];\n    char subKeyName[50];\n    int result = S_OK;\n    DWORD i = 0;\n    BOOL deleteOtherStuff;\n    HKEY key = NULL;\n    TYPEATTR* typeAttr = NULL;\n    TYPEKIND kind;\n    ITypeInfo* typeInfo = NULL;\n    ITypeLib* typeLib = NULL;\n    int numTypes;\n\n    TRACE(\"(IID: %s)\\n\",debugstr_guid(libid));\n\n    /* Create the path to the key */\n    get_typelib_key( libid, wVerMajor, wVerMinor, keyName );\n\n    if (syskind != SYS_WIN16 && syskind != SYS_WIN32 && syskind != SYS_WIN64)\n    {\n        TRACE(\"Unsupported syskind %i\\n\", syskind);\n        result = E_INVALIDARG;\n        goto end;\n    }\n\n    /* get the path to the typelib on disk */\n    if (query_typelib_path(libid, wVerMajor, wVerMinor, syskind, lcid, &tlibPath, FALSE) != S_OK) {\n        result = E_INVALIDARG;\n        goto end;\n    }\n\n    /* Try and open the key to the type library. */\n    if (RegOpenKey16(HKEY_CLASSES_ROOT, keyName, &key) != ERROR_SUCCESS) {\n        result = E_INVALIDARG;\n        goto end;\n    }\n\n    /* Try and load the type library */\n    tlibPathW = strdupAtoW(tlibPath);\n    if (LoadTypeLibEx16Impl(tlibPath, REGKIND_NONE, &typeLib) != S_OK) {\n        result = TYPE_E_INVALIDSTATE;\n        goto end;\n    }\n\n    /* remove any types registered with this typelib */\n    numTypes = ITypeLib_GetTypeInfoCount(typeLib);\n    for (i=0; i<numTypes; i++) {\n        /* get the kind of type */\n        if (ITypeLib_GetTypeInfoType(typeLib, i, &kind) != S_OK) {\n            goto enddeleteloop;\n        }\n\n        /* skip non-interfaces, and get type info for the type */\n        if ((kind != TKIND_INTERFACE) && (kind != TKIND_DISPATCH)) {\n            goto enddeleteloop;\n        }\n        if (ITypeLib_GetTypeInfo(typeLib, i, &typeInfo) != S_OK) {\n            goto enddeleteloop;\n        }\n        if (ITypeInfo_GetTypeAttr(typeInfo, &typeAttr) != S_OK) {\n            goto enddeleteloop;\n        }\n\n        if ((kind == TKIND_INTERFACE && (typeAttr->wTypeFlags & TYPEFLAG_FOLEAUTOMATION)) ||\n            kind == TKIND_DISPATCH)\n        {\n            BOOL is_wow64;\n            REGSAM opposite = (sizeof(void*) == 8 ? KEY_WOW64_32KEY : KEY_WOW64_64KEY);\n\n            TLB_unregister_interface(&typeAttr->guid, 0);\n\n            /* unregister TLBs into the opposite registry view, too */\n            if(opposite == KEY_WOW64_32KEY ||\n               (IsWow64Process(GetCurrentProcess(), &is_wow64) && is_wow64)) {\n                TLB_unregister_interface(&typeAttr->guid, opposite);\n            }\n        }\n\nenddeleteloop:\n        if (typeAttr) ITypeInfo_ReleaseTypeAttr(typeInfo, typeAttr);\n        typeAttr = NULL;\n        if (typeInfo) ITypeInfo_Release(typeInfo);\n        typeInfo = NULL;\n    }\n\n    /* Now, delete the type library path subkey */\n    get_lcid_subkey( lcid, syskind, subKeyName );\n    RegDeleteKey16(key, subKeyName);\n    *strrchr( subKeyName, '\\\\' ) = 0;  /* remove last path component */\n    RegDeleteKey16(key, subKeyName);\n\n    /* check if there is anything besides the FLAGS/HELPDIR keys.\n       If there is, we don't delete them */\n    tmpLength = ARRAY_SIZE(subKeyName);\n    deleteOtherStuff = TRUE;\n    i = 0;\n    while(RegEnumKey16(key, i++, subKeyName, tmpLength) == ERROR_SUCCESS) {\n        tmpLength = ARRAY_SIZE(subKeyName);\n\n        /* if its not FLAGS or HELPDIR, then we must keep the rest of the key */\n        if (!strcmp(subKeyName, FLAGS)) continue;\n        if (!strcmp(subKeyName, HELPDIR)) continue;\n        deleteOtherStuff = FALSE;\n        break;\n    }\n\n    /* only delete the other parts of the key if we're absolutely sure */\n    if (deleteOtherStuff) {\n        RegDeleteKey16(key, FLAGS);\n        RegDeleteKey16(key, HELPDIR);\n        RegCloseKey16(key);\n        key = NULL;\n\n        RegDeleteKey16(HKEY_CLASSES_ROOT, keyName);\n        *strrchr( keyName, '\\\\' ) = 0;  /* remove last path component */\n        RegDeleteKey16(HKEY_CLASSES_ROOT, keyName);\n    }\n\nend:\n    HeapFree(GetProcessHeap(), 0, tlibPath);\n    HeapFree(GetProcessHeap(), 0, tlibPathW);\n    if (typeLib) ITypeLib_Release(typeLib);\n    if (key) RegCloseKey(key);\n    return result;\n}\n\n/******************************************************************************\n *\t\tRegisterTypeLibForUser\t[OLEAUT32.442]\n * Adds information about a type library to the user registry\n * NOTES\n *    Docs: ITypeLib FAR * ptlib\n *    Docs: OLECHAR FAR* szFullPath\n *    Docs: OLECHAR FAR* szHelpDir\n *\n * RETURNS\n *    Success: S_OK\n *    Failure: Status\n */\nHRESULT WINAPI RegisterTypeLibForUser(\n     ITypeLib * ptlib,     /* [in] Pointer to the library*/\n     OLECHAR * szFullPath, /* [in] full Path of the library*/\n     OLECHAR * szHelpDir)  /* [in] dir to the helpfile for the library,\n\t\t\t\t\t\t\t may be NULL*/\n{\n    FIXME(\"(%p, %s, %s) registering the typelib system-wide\\n\", ptlib,\n          debugstr_w(szFullPath), debugstr_w(szHelpDir));\n    return RegisterTypeLib(ptlib, szFullPath, szHelpDir);\n}\n\n/******************************************************************************\n *\tUnRegisterTypeLibForUser\t[OLEAUT32.443]\n * Removes information about a type library from the user registry\n *\n * RETURNS\n *    Success: S_OK\n *    Failure: Status\n */\nHRESULT WINAPI UnRegisterTypeLibForUser(\n    REFGUID libid,\t/* [in] GUID of the library */\n    WORD wVerMajor,\t/* [in] major version */\n    WORD wVerMinor,\t/* [in] minor version */\n    LCID lcid,\t/* [in] locale id */\n    SYSKIND syskind)\n{\n    FIXME(\"(%s, %u, %u, %u, %u) unregistering the typelib system-wide\\n\",\n          debugstr_guid(libid), wVerMajor, wVerMinor, lcid, syskind);\n    return UnRegisterTypeLib(libid, wVerMajor, wVerMinor, lcid, syskind);\n}\n#endif\n\n/*======================= ITypeLib implementation =======================*/\n\ntypedef struct tagTLBGuid {\n    GUID guid;\n    INT hreftype;\n    UINT offset;\n    struct list entry;\n} TLBGuid;\n\ntypedef struct tagTLBCustData\n{\n    TLBGuid *guid;\n    VARIANT data;\n    struct list entry;\n} TLBCustData;\n\n/* data structure for import typelibs */\ntypedef struct tagTLBImpLib\n{\n    int offset;                 /* offset in the file (MSFT)\n\t\t\t\t   offset in nametable (SLTG)\n\t\t\t\t   just used to identify library while reading\n\t\t\t\t   data from file */\n    TLBGuid *guid;                  /* libid */\n    BSTR name;                  /* name */\n\n    LCID lcid;                  /* lcid of imported typelib */\n\n    WORD wVersionMajor;         /* major version number */\n    WORD wVersionMinor;         /* minor version number */\n\n    struct tagITypeLibImpl *pImpTypeLib; /* pointer to loaded typelib, or\n\t\t\t\t\t    NULL if not yet loaded */\n    struct list entry;\n} TLBImpLib;\n\ntypedef struct tagTLBString {\n    BSTR str;\n    UINT offset;\n    struct list entry;\n} TLBString;\n\n/* internal ITypeLib data */\ntypedef struct tagITypeLibImpl\n{\n    ITypeLib2 ITypeLib2_iface;\n    ITypeComp ITypeComp_iface;\n    ICreateTypeLib2 ICreateTypeLib2_iface;\n    LONG ref;\n    TLBGuid *guid;\n    LCID lcid;\n    SYSKIND syskind;\n    int ptr_size;\n    WORD ver_major;\n    WORD ver_minor;\n    WORD libflags;\n    LCID set_lcid;\n\n    /* strings can be stored in tlb as multibyte strings BUT they are *always*\n     * exported to the application as a UNICODE string.\n     */\n    struct list string_list;\n    struct list name_list;\n    struct list guid_list;\n\n    const TLBString *Name;\n    const TLBString *DocString;\n    const TLBString *HelpFile;\n    const TLBString *HelpStringDll;\n    DWORD dwHelpContext;\n    int TypeInfoCount;          /* nr of typeinfo's in librarry */\n    struct tagITypeInfoImpl **typeinfos;\n    struct list custdata_list;\n    struct list implib_list;\n    int ctTypeDesc;             /* number of items in type desc array */\n    TYPEDESC * pTypeDesc;       /* array of TypeDescriptions found in the\n\t\t\t\t   library. Only used while reading MSFT\n\t\t\t\t   typelibs */\n    struct list ref_list;       /* list of ref types in this typelib */\n    HREFTYPE dispatch_href;     /* reference to IDispatch, -1 if unused */\n\n\n    /* typelibs are cached, keyed by path and index, so store the linked list info within them */\n    struct list entry;\n    WCHAR *path;\n    INT index;\n} ITypeLibImpl;\n\nstatic const ITypeLib2Vtbl tlbvt;\nstatic const ITypeCompVtbl tlbtcvt;\nstatic const ICreateTypeLib2Vtbl CreateTypeLib2Vtbl;\n\nstatic inline ITypeLibImpl *impl_from_ITypeLib2(ITypeLib2 *iface)\n{\n    return CONTAINING_RECORD(iface, ITypeLibImpl, ITypeLib2_iface);\n}\n\nstatic inline ITypeLibImpl *impl_from_ITypeLib(ITypeLib *iface)\n{\n    return impl_from_ITypeLib2((ITypeLib2*)iface);\n}\n\nstatic inline ITypeLibImpl *impl_from_ITypeComp( ITypeComp *iface )\n{\n    return CONTAINING_RECORD(iface, ITypeLibImpl, ITypeComp_iface);\n}\n\nstatic inline ITypeLibImpl *impl_from_ICreateTypeLib2( ICreateTypeLib2 *iface )\n{\n    return CONTAINING_RECORD(iface, ITypeLibImpl, ICreateTypeLib2_iface);\n}\n\n/* ITypeLib methods */\nstatic ITypeLib2* ITypeLib2_Constructor_MSFT(LPVOID pLib, DWORD dwTLBLength);\nstatic ITypeLib2* ITypeLib2_Constructor_SLTG(LPVOID pLib, DWORD dwTLBLength);\n\n/*======================= ITypeInfo implementation =======================*/\n\n/* data for referenced types */\ntypedef struct tagTLBRefType\n{\n    INT index;              /* Type index for internal ref or for external ref\n\t\t\t       it the format is SLTG.  -2 indicates to\n\t\t\t       use guid */\n\n    TYPEKIND tkind;\n    TLBGuid *guid;              /* guid of the referenced type */\n                            /* if index == TLB_REF_USE_GUID */\n\n    HREFTYPE reference;     /* The href of this ref */\n    TLBImpLib *pImpTLInfo;  /* If ref is external ptr to library data\n\t\t\t       TLB_REF_INTERNAL for internal refs\n\t\t\t       TLB_REF_NOT_FOUND for broken refs */\n\n    struct list entry;\n} TLBRefType;\n\n#define TLB_REF_USE_GUID -2\n\n#define TLB_REF_INTERNAL (void*)-2\n#define TLB_REF_NOT_FOUND (void*)-1\n\n/* internal Parameter data */\ntypedef struct tagTLBParDesc\n{\n    const TLBString *Name;\n    struct list custdata_list;\n} TLBParDesc;\n\n/* internal Function data */\ntypedef struct tagTLBFuncDesc\n{\n    FUNCDESC funcdesc;      /* lots of info on the function and its attributes. */\n    const TLBString *Name;             /* the name of this function */\n    TLBParDesc *pParamDesc; /* array with param names and custom data */\n    int helpcontext;\n    int HelpStringContext;\n    const TLBString *HelpString;\n    const TLBString *Entry;            /* if IS_INTRESOURCE true, it's numeric; if -1 it isn't present */\n    const TLBString *HelpFile;\n    struct list custdata_list;\n} TLBFuncDesc;\n\n/* internal Variable data */\ntypedef struct tagTLBVarDesc\n{\n    VARDESC vardesc;                /* lots of info on the variable and its attributes. */\n    VARDESC *vardesc_create;        /* additional data needed for storing VARDESC */\n    const TLBString *Name;          /* the name of this variable */\n    int HelpContext;\n    int HelpStringContext;\n    const TLBString *HelpString;\n    const TLBString *HelpFile;\n    struct list custdata_list;\n} TLBVarDesc;\n\n/* internal implemented interface data */\ntypedef struct tagTLBImplType\n{\n    HREFTYPE hRef;          /* hRef of interface */\n    int implflags;          /* IMPLFLAG_*s */\n    struct list custdata_list;\n} TLBImplType;\n\n/* internal TypeInfo data */\ntypedef struct tagITypeInfoImpl\n{\n    ITypeInfo2 ITypeInfo2_iface;\n    ITypeComp ITypeComp_iface;\n    ICreateTypeInfo2 ICreateTypeInfo2_iface;\n    LONG ref;\n    BOOL not_attached_to_typelib;\n    BOOL needs_layout;\n\n    TLBGuid *guid;\n    TYPEATTR typeattr;\n    TYPEDESC *tdescAlias;\n\n    ITypeLibImpl * pTypeLib;        /* back pointer to typelib */\n    int index;                  /* index in this typelib; */\n    HREFTYPE hreftype;          /* hreftype for app object binding */\n    /* type libs seem to store the doc strings in ascii\n     * so why should we do it in unicode?\n     */\n    const TLBString *Name;\n    const TLBString *DocString;\n    const TLBString *DllName;\n    const TLBString *Schema;\n    DWORD dwHelpContext;\n    DWORD dwHelpStringContext;\n\n    /* functions  */\n    TLBFuncDesc *funcdescs;\n\n    /* variables  */\n    TLBVarDesc *vardescs;\n\n    /* Implemented Interfaces  */\n    TLBImplType *impltypes;\n\n    struct list *pcustdata_list;\n    struct list custdata_list;\n} ITypeInfoImpl;\n\nstatic inline ITypeInfoImpl *info_impl_from_ITypeComp( ITypeComp *iface )\n{\n    return CONTAINING_RECORD(iface, ITypeInfoImpl, ITypeComp_iface);\n}\n\nstatic inline ITypeInfoImpl *impl_from_ITypeInfo2( ITypeInfo2 *iface )\n{\n    return CONTAINING_RECORD(iface, ITypeInfoImpl, ITypeInfo2_iface);\n}\n\nstatic inline ITypeInfoImpl *impl_from_ITypeInfo( ITypeInfo *iface )\n{\n    return impl_from_ITypeInfo2((ITypeInfo2*)iface);\n}\n\nstatic inline ITypeInfoImpl *info_impl_from_ICreateTypeInfo2( ICreateTypeInfo2 *iface )\n{\n    return CONTAINING_RECORD(iface, ITypeInfoImpl, ICreateTypeInfo2_iface);\n}\n\nstatic const ITypeInfo2Vtbl tinfvt;\nstatic const ITypeCompVtbl  tcompvt;\nstatic const ICreateTypeInfo2Vtbl CreateTypeInfo2Vtbl;\n\nstatic ITypeInfoImpl* ITypeInfoImpl_Constructor(void);\nstatic void ITypeInfoImpl_Destroy(ITypeInfoImpl *This);\n\ntypedef struct tagTLBContext\n{\n\tunsigned int oStart;  /* start of TLB in file */\n\tunsigned int pos;     /* current pos */\n\tunsigned int length;  /* total length */\n\tvoid *mapping;        /* memory mapping */\n\tMSFT_SegDir * pTblDir;\n\tITypeLibImpl* pLibInfo;\n} TLBContext;\n\n\nstatic inline BSTR TLB_get_bstr(const TLBString *str)\n{\n    return str != NULL ? str->str : NULL;\n}\n\nstatic inline int TLB_str_memcmp(void *left, const TLBString *str, DWORD len)\n{\n    if(!str)\n        return 1;\n    return memcmp(left, str->str, len);\n}\n\nstatic inline const GUID *TLB_get_guidref(const TLBGuid *guid)\n{\n    return guid != NULL ? &guid->guid : NULL;\n}\n\nstatic inline const GUID *TLB_get_guid_null(const TLBGuid *guid)\n{\n    return guid != NULL ? &guid->guid : &GUID_NULL;\n}\n\nstatic int get_ptr_size(SYSKIND syskind)\n{\n    switch(syskind){\n    case SYS_WIN64:\n        return 8;\n    case SYS_WIN32:\n    case SYS_MAC:\n    case SYS_WIN16:\n        return 4;\n    }\n    WARN(\"Unhandled syskind: 0x%x\\n\", syskind);\n    return 4;\n}\n\n/*\n debug\n*/\nstatic void dump_TypeDesc(const TYPEDESC *pTD,char *szVarType) {\n    if (pTD->vt & VT_RESERVED)\n\tszVarType += strlen(strcpy(szVarType, \"reserved | \"));\n    if (pTD->vt & VT_BYREF)\n\tszVarType += strlen(strcpy(szVarType, \"ref to \"));\n    if (pTD->vt & VT_ARRAY)\n\tszVarType += strlen(strcpy(szVarType, \"array of \"));\n    if (pTD->vt & VT_VECTOR)\n\tszVarType += strlen(strcpy(szVarType, \"vector of \"));\n    switch(pTD->vt & VT_TYPEMASK) {\n    case VT_UI1: sprintf(szVarType, \"VT_UI1\"); break;\n    case VT_I2: sprintf(szVarType, \"VT_I2\"); break;\n    case VT_I4: sprintf(szVarType, \"VT_I4\"); break;\n    case VT_R4: sprintf(szVarType, \"VT_R4\"); break;\n    case VT_R8: sprintf(szVarType, \"VT_R8\"); break;\n    case VT_BOOL: sprintf(szVarType, \"VT_BOOL\"); break;\n    case VT_ERROR: sprintf(szVarType, \"VT_ERROR\"); break;\n    case VT_CY: sprintf(szVarType, \"VT_CY\"); break;\n    case VT_DATE: sprintf(szVarType, \"VT_DATE\"); break;\n    case VT_BSTR: sprintf(szVarType, \"VT_BSTR\"); break;\n    case VT_UNKNOWN: sprintf(szVarType, \"VT_UNKNOWN\"); break;\n    case VT_DISPATCH: sprintf(szVarType, \"VT_DISPATCH\"); break;\n    case VT_I1: sprintf(szVarType, \"VT_I1\"); break;\n    case VT_UI2: sprintf(szVarType, \"VT_UI2\"); break;\n    case VT_UI4: sprintf(szVarType, \"VT_UI4\"); break;\n    case VT_INT: sprintf(szVarType, \"VT_INT\"); break;\n    case VT_UINT: sprintf(szVarType, \"VT_UINT\"); break;\n    case VT_VARIANT: sprintf(szVarType, \"VT_VARIANT\"); break;\n    case VT_VOID: sprintf(szVarType, \"VT_VOID\"); break;\n    case VT_HRESULT: sprintf(szVarType, \"VT_HRESULT\"); break;\n    case VT_USERDEFINED: sprintf(szVarType, \"VT_USERDEFINED ref = %x\",\n\t\t\t\t pTD->u.hreftype); break;\n    case VT_LPSTR: sprintf(szVarType, \"VT_LPSTR\"); break;\n    case VT_LPWSTR: sprintf(szVarType, \"VT_LPWSTR\"); break;\n    case VT_PTR: sprintf(szVarType, \"ptr to \");\n      dump_TypeDesc(pTD->u.lptdesc, szVarType + 7);\n      break;\n    case VT_SAFEARRAY: sprintf(szVarType, \"safearray of \");\n      dump_TypeDesc(pTD->u.lptdesc, szVarType + 13);\n      break;\n    case VT_CARRAY: sprintf(szVarType, \"%d dim array of \",\n\t\t\t    pTD->u.lpadesc->cDims); /* FIXME print out sizes */\n      dump_TypeDesc(&pTD->u.lpadesc->tdescElem, szVarType + strlen(szVarType));\n      break;\n\n    default: sprintf(szVarType, \"unknown(%d)\", pTD->vt & VT_TYPEMASK); break;\n    }\n}\n\nstatic void dump_ELEMDESC(const ELEMDESC *edesc) {\n  char buf[200];\n  USHORT flags = edesc->u.paramdesc.wParamFlags;\n  dump_TypeDesc(&edesc->tdesc,buf);\n  MESSAGE(\"\\t\\ttdesc.vartype %d (%s)\\n\",edesc->tdesc.vt,buf);\n  MESSAGE(\"\\t\\tu.paramdesc.wParamFlags\");\n  if (!flags) MESSAGE(\" PARAMFLAGS_NONE\");\n  if (flags & PARAMFLAG_FIN) MESSAGE(\" PARAMFLAG_FIN\");\n  if (flags & PARAMFLAG_FOUT) MESSAGE(\" PARAMFLAG_FOUT\");\n  if (flags & PARAMFLAG_FLCID) MESSAGE(\" PARAMFLAG_FLCID\");\n  if (flags & PARAMFLAG_FRETVAL) MESSAGE(\" PARAMFLAG_FRETVAL\");\n  if (flags & PARAMFLAG_FOPT) MESSAGE(\" PARAMFLAG_FOPT\");\n  if (flags & PARAMFLAG_FHASDEFAULT) MESSAGE(\" PARAMFLAG_FHASDEFAULT\");\n  if (flags & PARAMFLAG_FHASCUSTDATA) MESSAGE(\" PARAMFLAG_FHASCUSTDATA\");\n  MESSAGE(\"\\n\\t\\tu.paramdesc.lpex %p\\n\",edesc->u.paramdesc.pparamdescex);\n}\nstatic void dump_FUNCDESC(const FUNCDESC *funcdesc) {\n  int i;\n  MESSAGE(\"memid is %08x\\n\",funcdesc->memid);\n  for (i=0;i<funcdesc->cParams;i++) {\n      MESSAGE(\"Param %d:\\n\",i);\n      dump_ELEMDESC(funcdesc->lprgelemdescParam+i);\n  }\n  MESSAGE(\"\\tfunckind: %d (\",funcdesc->funckind);\n  switch (funcdesc->funckind) {\n  case FUNC_VIRTUAL: MESSAGE(\"virtual\");break;\n  case FUNC_PUREVIRTUAL: MESSAGE(\"pure virtual\");break;\n  case FUNC_NONVIRTUAL: MESSAGE(\"nonvirtual\");break;\n  case FUNC_STATIC: MESSAGE(\"static\");break;\n  case FUNC_DISPATCH: MESSAGE(\"dispatch\");break;\n  default: MESSAGE(\"unknown\");break;\n  }\n  MESSAGE(\")\\n\\tinvkind: %d (\",funcdesc->invkind);\n  switch (funcdesc->invkind) {\n  case INVOKE_FUNC: MESSAGE(\"func\");break;\n  case INVOKE_PROPERTYGET: MESSAGE(\"property get\");break;\n  case INVOKE_PROPERTYPUT: MESSAGE(\"property put\");break;\n  case INVOKE_PROPERTYPUTREF: MESSAGE(\"property put ref\");break;\n  }\n  MESSAGE(\")\\n\\tcallconv: %d (\",funcdesc->callconv);\n  switch (funcdesc->callconv) {\n  case CC_CDECL: MESSAGE(\"cdecl\");break;\n  case CC_PASCAL: MESSAGE(\"pascal\");break;\n  case CC_STDCALL: MESSAGE(\"stdcall\");break;\n  case CC_SYSCALL: MESSAGE(\"syscall\");break;\n  default:break;\n  }\n  MESSAGE(\")\\n\\toVft: %d\\n\", funcdesc->oVft);\n  MESSAGE(\"\\tcParamsOpt: %d\\n\", funcdesc->cParamsOpt);\n  MESSAGE(\"\\twFlags: %x\\n\", funcdesc->wFuncFlags);\n\n  MESSAGE(\"\\telemdescFunc (return value type):\\n\");\n  dump_ELEMDESC(&funcdesc->elemdescFunc);\n}\n\nstatic const char * const typekind_desc[] =\n{\n\t\"TKIND_ENUM\",\n\t\"TKIND_RECORD\",\n\t\"TKIND_MODULE\",\n\t\"TKIND_INTERFACE\",\n\t\"TKIND_DISPATCH\",\n\t\"TKIND_COCLASS\",\n\t\"TKIND_ALIAS\",\n\t\"TKIND_UNION\",\n\t\"TKIND_MAX\"\n};\n\nstatic void dump_TLBFuncDescOne(const TLBFuncDesc * pfd)\n{\n  int i;\n  MESSAGE(\"%s(%u)\\n\", debugstr_w(TLB_get_bstr(pfd->Name)), pfd->funcdesc.cParams);\n  for (i=0;i<pfd->funcdesc.cParams;i++)\n      MESSAGE(\"\\tparm%d: %s\\n\",i,debugstr_w(TLB_get_bstr(pfd->pParamDesc[i].Name)));\n\n\n  dump_FUNCDESC(&(pfd->funcdesc));\n\n  MESSAGE(\"\\thelpstring: %s\\n\", debugstr_w(TLB_get_bstr(pfd->HelpString)));\n  MESSAGE(\"\\thelpfile: %s\\n\", debugstr_w(TLB_get_bstr(pfd->HelpFile)));\n  MESSAGE(\"\\thelpcontext: %x\\n\", pfd->helpcontext);\n  if(pfd->Entry == NULL)\n      MESSAGE(\"\\tentry: (null)\\n\");\n  else if(pfd->Entry == (void*)-1)\n      MESSAGE(\"\\tentry: invalid\\n\");\n  else if(IS_INTRESOURCE(pfd->Entry))\n      MESSAGE(\"\\tentry: %p\\n\", pfd->Entry);\n  else\n      MESSAGE(\"\\tentry: %s\\n\", debugstr_w(TLB_get_bstr(pfd->Entry)));\n}\nstatic void dump_TLBFuncDesc(const TLBFuncDesc * pfd, UINT n)\n{\n\twhile (n)\n\t{\n\t  dump_TLBFuncDescOne(pfd);\n\t  ++pfd;\n\t  --n;\n\t}\n}\nstatic void dump_TLBVarDesc(const TLBVarDesc * pvd, UINT n)\n{\n\twhile (n)\n\t{\n\t  TRACE_(typelib)(\"%s\\n\", debugstr_w(TLB_get_bstr(pvd->Name)));\n\t  ++pvd;\n\t  --n;\n\t}\n}\n\nstatic void dump_TLBImpLib(const TLBImpLib *import)\n{\n    TRACE_(typelib)(\"%s %s\\n\", debugstr_guid(TLB_get_guidref(import->guid)),\n\t\t    debugstr_w(import->name));\n    TRACE_(typelib)(\"v%d.%d lcid=%x offset=%x\\n\", import->wVersionMajor,\n\t\t    import->wVersionMinor, import->lcid, import->offset);\n}\n\nstatic void dump_TLBRefType(const ITypeLibImpl *pTL)\n{\n    TLBRefType *ref;\n\n    LIST_FOR_EACH_ENTRY(ref, &pTL->ref_list, TLBRefType, entry)\n    {\n        TRACE_(typelib)(\"href:0x%08x\\n\", ref->reference);\n        if(ref->index == -1)\n\t    TRACE_(typelib)(\"%s\\n\", debugstr_guid(TLB_get_guidref(ref->guid)));\n        else\n\t    TRACE_(typelib)(\"type no: %d\\n\", ref->index);\n\n        if(ref->pImpTLInfo != TLB_REF_INTERNAL && ref->pImpTLInfo != TLB_REF_NOT_FOUND)\n        {\n            TRACE_(typelib)(\"in lib\\n\");\n            dump_TLBImpLib(ref->pImpTLInfo);\n        }\n    }\n}\n\nstatic void dump_TLBImplType(const TLBImplType * impl, UINT n)\n{\n    if(!impl)\n        return;\n    while (n) {\n        TRACE_(typelib)(\"implementing/inheriting interface hRef = %x implflags %x\\n\",\n            impl->hRef, impl->implflags);\n        ++impl;\n        --n;\n    }\n}\n\nstatic void dump_DispParms(const DISPPARAMS * pdp)\n{\n    unsigned int index;\n\n    TRACE(\"args=%u named args=%u\\n\", pdp->cArgs, pdp->cNamedArgs);\n\n    if (pdp->cNamedArgs && pdp->rgdispidNamedArgs)\n    {\n        TRACE(\"named args:\\n\");\n        for (index = 0; index < pdp->cNamedArgs; index++)\n            TRACE( \"\\t0x%x\\n\", pdp->rgdispidNamedArgs[index] );\n    }\n\n    if (pdp->cArgs && pdp->rgvarg)\n    {\n        TRACE(\"args:\\n\");\n        for (index = 0; index < pdp->cArgs; index++)\n            TRACE(\"  [%d] %s\\n\", index, debugstr_variant(pdp->rgvarg+index));\n    }\n}\n\nstatic void dump_DispParms16(const DISPPARAMS16 * pdp)\n{\n    unsigned int index;\n\n    TRACE(\"args=%u named args=%u\\n\", pdp->cArgs, pdp->cNamedArgs);\n\n    if (pdp->cNamedArgs && pdp->rgdispidNamedArgs)\n    {\n        TRACE(\"named args:\\n\");\n        for (index = 0; index < pdp->cNamedArgs; index++)\n            TRACE(\"\\t0x%x\\n\", ((DISPID*)MapSL(pdp->rgdispidNamedArgs))[index]);\n    }\n\n    if (pdp->cArgs && pdp->rgvarg)\n    {\n        TRACE(\"args:\\n\");\n        for (index = 0; index < pdp->cArgs; index++)\n            TRACE(\"  [%d] %s\\n\", index, debugstr_variant16((VARIANT16*)MapSL(pdp->rgvarg) + index));\n    }\n}\nstatic void dump_TypeInfo(const ITypeInfoImpl * pty)\n{\n    TRACE(\"%p ref=%u\\n\", pty, pty->ref);\n    TRACE(\"%s %s\\n\", debugstr_w(TLB_get_bstr(pty->Name)), debugstr_w(TLB_get_bstr(pty->DocString)));\n    TRACE(\"attr:%s\\n\", debugstr_guid(TLB_get_guidref(pty->guid)));\n    TRACE(\"kind:%s\\n\", typekind_desc[pty->typeattr.typekind]);\n    TRACE(\"fct:%u var:%u impl:%u\\n\", pty->typeattr.cFuncs, pty->typeattr.cVars, pty->typeattr.cImplTypes);\n    TRACE(\"wTypeFlags: 0x%04x\\n\", pty->typeattr.wTypeFlags);\n    TRACE(\"parent tlb:%p index in TLB:%u\\n\",pty->pTypeLib, pty->index);\n    if (pty->typeattr.typekind == TKIND_MODULE) TRACE(\"dllname:%s\\n\", debugstr_w(TLB_get_bstr(pty->DllName)));\n    if (TRACE_ON(ole))\n        dump_TLBFuncDesc(pty->funcdescs, pty->typeattr.cFuncs);\n    dump_TLBVarDesc(pty->vardescs, pty->typeattr.cVars);\n    dump_TLBImplType(pty->impltypes, pty->typeattr.cImplTypes);\n}\n\nstatic void dump_VARDESC(const VARDESC *v)\n{\n    MESSAGE(\"memid %d\\n\",v->memid);\n    MESSAGE(\"lpstrSchema %s\\n\",debugstr_w(v->lpstrSchema));\n    MESSAGE(\"oInst %d\\n\",v->u.oInst);\n    dump_ELEMDESC(&(v->elemdescVar));\n    MESSAGE(\"wVarFlags %x\\n\",v->wVarFlags);\n    MESSAGE(\"varkind %d\\n\",v->varkind);\n}\n\nstatic TYPEDESC std_typedesc[VT_LPWSTR+1] =\n{\n    /* VT_LPWSTR is largest type that, may appear in type description */\n    {{0}, VT_EMPTY},  {{0}, VT_NULL},        {{0}, VT_I2},      {{0}, VT_I4},\n    {{0}, VT_R4},     {{0}, VT_R8},          {{0}, VT_CY},      {{0}, VT_DATE},\n    {{0}, VT_BSTR},   {{0}, VT_DISPATCH},    {{0}, VT_ERROR},   {{0}, VT_BOOL},\n    {{0}, VT_VARIANT},{{0}, VT_UNKNOWN},     {{0}, VT_DECIMAL}, {{0}, 15}, /* unused in VARENUM */\n    {{0}, VT_I1},     {{0}, VT_UI1},         {{0}, VT_UI2},     {{0}, VT_UI4},\n    {{0}, VT_I8},     {{0}, VT_UI8},         {{0}, VT_INT},     {{0}, VT_UINT},\n    {{0}, VT_VOID},   {{0}, VT_HRESULT},     {{0}, VT_PTR},     {{0}, VT_SAFEARRAY},\n    {{0}, VT_CARRAY}, {{0}, VT_USERDEFINED}, {{0}, VT_LPSTR},   {{0}, VT_LPWSTR}\n};\n\nstatic void TLB_abort(void)\n{\n    DebugBreak();\n}\n\n/* returns the size required for a deep copy of a typedesc into a\n * flat buffer */\nstatic SIZE_T TLB_SizeTypeDesc( const TYPEDESC *tdesc, BOOL alloc_initial_space )\n{\n    SIZE_T size = 0;\n\n    if (alloc_initial_space)\n        size += sizeof(TYPEDESC);\n\n    switch (tdesc->vt)\n    {\n    case VT_PTR:\n    case VT_SAFEARRAY:\n        size += TLB_SizeTypeDesc(tdesc->u.lptdesc, TRUE);\n        break;\n    case VT_CARRAY:\n        size += FIELD_OFFSET(ARRAYDESC, rgbounds[tdesc->u.lpadesc->cDims]);\n        size += TLB_SizeTypeDesc(&tdesc->u.lpadesc->tdescElem, FALSE);\n        break;\n    }\n    return size;\n}\n\n/* deep copy a typedesc into a flat buffer */\nstatic void *TLB_CopyTypeDesc( TYPEDESC *dest, const TYPEDESC *src, void *buffer )\n{\n    if (!dest)\n    {\n        dest = buffer;\n        buffer = (char *)buffer + sizeof(TYPEDESC);\n    }\n\n    *dest = *src;\n\n    switch (src->vt)\n    {\n    case VT_PTR:\n    case VT_SAFEARRAY:\n        dest->u.lptdesc = buffer;\n        buffer = TLB_CopyTypeDesc(NULL, src->u.lptdesc, buffer);\n        break;\n    case VT_CARRAY:\n        dest->u.lpadesc = buffer;\n        memcpy(dest->u.lpadesc, src->u.lpadesc, FIELD_OFFSET(ARRAYDESC, rgbounds[src->u.lpadesc->cDims]));\n        buffer = (char *)buffer + FIELD_OFFSET(ARRAYDESC, rgbounds[src->u.lpadesc->cDims]);\n        buffer = TLB_CopyTypeDesc(&dest->u.lpadesc->tdescElem, &src->u.lpadesc->tdescElem, buffer);\n        break;\n    }\n    return buffer;\n}\n\n/* free custom data allocated by MSFT_CustData */\nstatic inline void TLB_FreeCustData(struct list *custdata_list)\n{\n    TLBCustData *cd, *cdn;\n    LIST_FOR_EACH_ENTRY_SAFE(cd, cdn, custdata_list, TLBCustData, entry)\n    {\n        list_remove(&cd->entry);\n        VariantClear(&cd->data);\n        heap_free(cd);\n    }\n}\n\nstatic BSTR TLB_MultiByteToBSTR(const char *ptr)\n{\n    DWORD len;\n    BSTR ret;\n\n    len = MultiByteToWideChar(CP_ACP, 0, ptr, -1, NULL, 0);\n    ret = SysAllocStringLen(NULL, len - 1);\n    if (!ret) return ret;\n    MultiByteToWideChar(CP_ACP, 0, ptr, -1, ret, len);\n    return ret;\n}\n\nstatic inline TLBFuncDesc *TLB_get_funcdesc_by_memberid(TLBFuncDesc *funcdescs,\n        UINT n, MEMBERID memid)\n{\n    while(n){\n        if(funcdescs->funcdesc.memid == memid)\n            return funcdescs;\n        ++funcdescs;\n        --n;\n    }\n    return NULL;\n}\n\nstatic inline TLBFuncDesc *TLB_get_funcdesc_by_memberid_and_invkind(TLBFuncDesc *funcdescs,\n        UINT n, MEMBERID memid, INVOKEKIND invkind)\n{\n    while(n){\n        if((funcdescs->funcdesc.memid == memid) && (funcdescs->funcdesc.invkind == invkind))\n            return funcdescs;\n        ++funcdescs;\n        --n;\n    }\n    return NULL;\n}\n\nstatic inline TLBVarDesc *TLB_get_vardesc_by_memberid(TLBVarDesc *vardescs,\n        UINT n, MEMBERID memid)\n{\n    while(n){\n        if(vardescs->vardesc.memid == memid)\n            return vardescs;\n        ++vardescs;\n        --n;\n    }\n    return NULL;\n}\n\nstatic inline TLBVarDesc *TLB_get_vardesc_by_name(TLBVarDesc *vardescs,\n        UINT n, const OLECHAR *name)\n{\n    while(n){\n        if(!lstrcmpiW(TLB_get_bstr(vardescs->Name), name))\n            return vardescs;\n        ++vardescs;\n        --n;\n    }\n    return NULL;\n}\n\nstatic inline TLBCustData *TLB_get_custdata_by_guid(struct list *custdata_list, REFGUID guid)\n{\n    TLBCustData *cust_data;\n    LIST_FOR_EACH_ENTRY(cust_data, custdata_list, TLBCustData, entry)\n        if(IsEqualIID(TLB_get_guid_null(cust_data->guid), guid))\n            return cust_data;\n    return NULL;\n}\n\nstatic inline ITypeInfoImpl *TLB_get_typeinfo_by_name(ITypeInfoImpl **typeinfos,\n        UINT n, const OLECHAR *name)\n{\n    while(n){\n        if(!lstrcmpiW(TLB_get_bstr((*typeinfos)->Name), name))\n            return *typeinfos;\n        ++typeinfos;\n        --n;\n    }\n    return NULL;\n}\n\nstatic void TLBVarDesc_Constructor(TLBVarDesc *var_desc)\n{\n    list_init(&var_desc->custdata_list);\n}\n\nstatic TLBVarDesc *TLBVarDesc_Alloc(UINT n)\n{\n    TLBVarDesc *ret;\n\n    ret = heap_alloc_zero(sizeof(TLBVarDesc) * n);\n    if(!ret)\n        return NULL;\n\n    while(n){\n        TLBVarDesc_Constructor(&ret[n-1]);\n        --n;\n    }\n\n    return ret;\n}\n\nstatic TLBParDesc *TLBParDesc_Constructor(UINT n)\n{\n    TLBParDesc *ret;\n\n    ret = heap_alloc_zero(sizeof(TLBParDesc) * n);\n    if(!ret)\n        return NULL;\n\n    while(n){\n        list_init(&ret[n-1].custdata_list);\n        --n;\n    }\n\n    return ret;\n}\n\nstatic void TLBFuncDesc_Constructor(TLBFuncDesc *func_desc)\n{\n    list_init(&func_desc->custdata_list);\n}\n\nstatic TLBFuncDesc *TLBFuncDesc_Alloc(UINT n)\n{\n    TLBFuncDesc *ret;\n\n    ret = heap_alloc_zero(sizeof(TLBFuncDesc) * n);\n    if(!ret)\n        return NULL;\n\n    while(n){\n        TLBFuncDesc_Constructor(&ret[n-1]);\n        --n;\n    }\n\n    return ret;\n}\n\nstatic void TLBImplType_Constructor(TLBImplType *impl)\n{\n    list_init(&impl->custdata_list);\n}\n\nstatic TLBImplType *TLBImplType_Alloc(UINT n)\n{\n    TLBImplType *ret;\n\n    ret = heap_alloc_zero(sizeof(TLBImplType) * n);\n    if(!ret)\n        return NULL;\n\n    while(n){\n        TLBImplType_Constructor(&ret[n-1]);\n        --n;\n    }\n\n    return ret;\n}\n\nstatic TLBGuid *TLB_append_guid(struct list *guid_list,\n        const GUID *new_guid, HREFTYPE hreftype)\n{\n    TLBGuid *guid;\n\n    LIST_FOR_EACH_ENTRY(guid, guid_list, TLBGuid, entry) {\n        if (IsEqualGUID(&guid->guid, new_guid))\n            return guid;\n    }\n\n    guid = heap_alloc(sizeof(TLBGuid));\n    if (!guid)\n        return NULL;\n\n    memcpy(&guid->guid, new_guid, sizeof(GUID));\n    guid->hreftype = hreftype;\n\n    list_add_tail(guid_list, &guid->entry);\n\n    return guid;\n}\n\nstatic HRESULT TLB_set_custdata(struct list *custdata_list, TLBGuid *tlbguid, VARIANT *var)\n{\n    TLBCustData *cust_data;\n\n    switch(V_VT(var)){\n    case VT_I4:\n    case VT_R4:\n    case VT_UI4:\n    case VT_INT:\n    case VT_UINT:\n    case VT_HRESULT:\n    case VT_BSTR:\n        break;\n    default:\n        return DISP_E_BADVARTYPE;\n    }\n\n    cust_data = TLB_get_custdata_by_guid(custdata_list, TLB_get_guid_null(tlbguid));\n\n    if (!cust_data) {\n        cust_data = heap_alloc(sizeof(TLBCustData));\n        if (!cust_data)\n            return E_OUTOFMEMORY;\n\n        cust_data->guid = tlbguid;\n        VariantInit(&cust_data->data);\n\n        list_add_tail(custdata_list, &cust_data->entry);\n    }else\n        VariantClear(&cust_data->data);\n\n    return VariantCopy(&cust_data->data, var);\n}\n\nstatic TLBString *TLB_append_str(struct list *string_list, BSTR new_str)\n{\n    TLBString *str;\n\n    if(!new_str)\n        return NULL;\n\n    LIST_FOR_EACH_ENTRY(str, string_list, TLBString, entry) {\n        if (strcmpW(str->str, new_str) == 0)\n            return str;\n    }\n\n    str = heap_alloc(sizeof(TLBString));\n    if (!str)\n        return NULL;\n\n    str->str = SysAllocString(new_str);\n    if (!str->str) {\n        heap_free(str);\n        return NULL;\n    }\n\n    list_add_tail(string_list, &str->entry);\n\n    return str;\n}\n\nstatic HRESULT TLB_get_size_from_hreftype(ITypeInfoImpl *info, HREFTYPE href,\n        ULONG *size, WORD *align)\n{\n    ITypeInfo *other;\n    TYPEATTR *attr;\n    HRESULT hr;\n\n    hr = ITypeInfo2_GetRefTypeInfo(&info->ITypeInfo2_iface, href, &other);\n    if(FAILED(hr))\n        return hr;\n\n    hr = ITypeInfo_GetTypeAttr(other, &attr);\n    if(FAILED(hr)){\n        ITypeInfo_Release(other);\n        return hr;\n    }\n\n    if(size)\n        *size = attr->cbSizeInstance;\n    if(align)\n        *align = attr->cbAlignment;\n\n    ITypeInfo_ReleaseTypeAttr(other, attr);\n    ITypeInfo_Release(other);\n\n    return S_OK;\n}\n\nstatic HRESULT TLB_size_instance(ITypeInfoImpl *info, SYSKIND sys,\n        TYPEDESC *tdesc, ULONG *size, WORD *align)\n{\n    ULONG i, sub, ptr_size;\n    HRESULT hr;\n\n    ptr_size = get_ptr_size(sys);\n\n    switch(tdesc->vt){\n    case VT_VOID:\n        *size = 0;\n        break;\n    case VT_I1:\n    case VT_UI1:\n        *size = 1;\n        break;\n    case VT_I2:\n    case VT_BOOL:\n    case VT_UI2:\n        *size = 2;\n        break;\n    case VT_I4:\n    case VT_R4:\n    case VT_ERROR:\n    case VT_UI4:\n    case VT_INT:\n    case VT_UINT:\n    case VT_HRESULT:\n        *size = 4;\n        break;\n    case VT_R8:\n    case VT_I8:\n    case VT_UI8:\n        *size = 8;\n        break;\n    case VT_BSTR:\n    case VT_DISPATCH:\n    case VT_UNKNOWN:\n    case VT_PTR:\n    case VT_SAFEARRAY:\n    case VT_LPSTR:\n    case VT_LPWSTR:\n        *size = ptr_size;\n        break;\n    case VT_DATE:\n        *size = sizeof(DATE);\n        break;\n    case VT_VARIANT:\n        *size = sizeof(VARIANT);\n#ifdef _WIN64\n        if(sys == SYS_WIN32)\n            *size -= 8; /* 32-bit VARIANT is 8 bytes smaller than 64-bit VARIANT */\n#endif\n        break;\n    case VT_DECIMAL:\n        *size = sizeof(DECIMAL);\n        break;\n    case VT_CY:\n        *size = sizeof(CY);\n        break;\n    case VT_CARRAY:\n        *size = 0;\n        for(i = 0; i < tdesc->u.lpadesc->cDims; ++i)\n            *size += tdesc->u.lpadesc->rgbounds[i].cElements;\n        hr = TLB_size_instance(info, sys, &tdesc->u.lpadesc->tdescElem, &sub, align);\n        if(FAILED(hr))\n            return hr;\n        *size *= sub;\n        return S_OK;\n    case VT_USERDEFINED:\n        return TLB_get_size_from_hreftype(info, tdesc->u.hreftype, size, align);\n    default:\n        FIXME(\"Unsized VT: 0x%x\\n\", tdesc->vt);\n        return E_FAIL;\n    }\n\n    if(align){\n        if(*size < 4)\n            *align = *size;\n        else\n            *align = 4;\n    }\n\n    return S_OK;\n}\n\n#if 1\n/**********************************************************************\n *\n *  Functions for reading MSFT typelibs (those created by CreateTypeLib2)\n */\n\nstatic inline void MSFT_Seek(TLBContext *pcx, LONG where)\n{\n    if (where != DO_NOT_SEEK)\n    {\n        where += pcx->oStart;\n        if (where > pcx->length)\n        {\n            /* FIXME */\n            ERR(\"seek beyond end (%d/%d)\\n\", where, pcx->length );\n            TLB_abort();\n        }\n        pcx->pos = where;\n    }\n}\n\n/* read function */\nstatic DWORD MSFT_Read(void *buffer,  DWORD count, TLBContext *pcx, LONG where )\n{\n    TRACE_(typelib)(\"pos=0x%08x len=0x%08x 0x%08x 0x%08x 0x%08x\\n\",\n       pcx->pos, count, pcx->oStart, pcx->length, where);\n\n    MSFT_Seek(pcx, where);\n    if (pcx->pos + count > pcx->length) count = pcx->length - pcx->pos;\n    memcpy( buffer, (char *)pcx->mapping + pcx->pos, count );\n    pcx->pos += count;\n    return count;\n}\n\nstatic DWORD MSFT_ReadLEDWords(void *buffer,  DWORD count, TLBContext *pcx,\n                               LONG where )\n{\n  DWORD ret;\n\n  ret = MSFT_Read(buffer, count, pcx, where);\n  FromLEDWords(buffer, ret);\n\n  return ret;\n}\n\nstatic DWORD MSFT_ReadLEWords(void *buffer,  DWORD count, TLBContext *pcx,\n                              LONG where )\n{\n  DWORD ret;\n\n  ret = MSFT_Read(buffer, count, pcx, where);\n  FromLEWords(buffer, ret);\n\n  return ret;\n}\n\nstatic HRESULT MSFT_ReadAllGuids(TLBContext *pcx)\n{\n    TLBGuid *guid;\n    MSFT_GuidEntry entry;\n    int offs = 0;\n\n    MSFT_Seek(pcx, pcx->pTblDir->pGuidTab.offset);\n    while (1) {\n        if (offs >= pcx->pTblDir->pGuidTab.length)\n            return S_OK;\n\n        MSFT_ReadLEWords(&entry, sizeof(MSFT_GuidEntry), pcx, DO_NOT_SEEK);\n\n        guid = heap_alloc(sizeof(TLBGuid));\n\n        guid->offset = offs;\n        guid->guid = entry.guid;\n        guid->hreftype = entry.hreftype;\n\n        list_add_tail(&pcx->pLibInfo->guid_list, &guid->entry);\n\n        offs += sizeof(MSFT_GuidEntry);\n    }\n}\n\nstatic TLBGuid *MSFT_ReadGuid( int offset, TLBContext *pcx)\n{\n    TLBGuid *ret;\n\n    LIST_FOR_EACH_ENTRY(ret, &pcx->pLibInfo->guid_list, TLBGuid, entry){\n        if(ret->offset == offset){\n            TRACE_(typelib)(\"%s\\n\", debugstr_guid(&ret->guid));\n            return ret;\n        }\n    }\n\n    return NULL;\n}\n\nstatic HREFTYPE MSFT_ReadHreftype( TLBContext *pcx, int offset )\n{\n    MSFT_NameIntro niName;\n\n    if (offset < 0)\n    {\n        ERR_(typelib)(\"bad offset %d\\n\", offset);\n        return -1;\n    }\n\n    MSFT_ReadLEDWords(&niName, sizeof(niName), pcx,\n\t\t      pcx->pTblDir->pNametab.offset+offset);\n\n    return niName.hreftype;\n}\n\nstatic HRESULT MSFT_ReadAllNames(TLBContext *pcx)\n{\n    char *string;\n    MSFT_NameIntro intro;\n    INT16 len_piece;\n    int offs = 0, lengthInChars;\n\n    MSFT_Seek(pcx, pcx->pTblDir->pNametab.offset);\n    while (1) {\n        TLBString *tlbstr;\n\n        if (offs >= pcx->pTblDir->pNametab.length)\n            return S_OK;\n\n        MSFT_ReadLEWords(&intro, sizeof(MSFT_NameIntro), pcx, DO_NOT_SEEK);\n        intro.namelen &= 0xFF;\n        len_piece = intro.namelen + sizeof(MSFT_NameIntro);\n        if(len_piece % 4)\n            len_piece = (len_piece + 4) & ~0x3;\n        if(len_piece < 8)\n            len_piece = 8;\n\n        string = heap_alloc(len_piece + 1);\n        MSFT_Read(string, len_piece - sizeof(MSFT_NameIntro), pcx, DO_NOT_SEEK);\n        string[intro.namelen] = '\\0';\n\n        lengthInChars = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED | MB_ERR_INVALID_CHARS,\n                                            string, -1, NULL, 0);\n        if (!lengthInChars) {\n            heap_free(string);\n            return E_UNEXPECTED;\n        }\n\n        tlbstr = heap_alloc(sizeof(TLBString));\n\n        tlbstr->offset = offs;\n        tlbstr->str = SysAllocStringByteLen(NULL, lengthInChars * sizeof(WCHAR));\n        MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, string, -1, tlbstr->str, lengthInChars);\n\n        heap_free(string);\n\n        list_add_tail(&pcx->pLibInfo->name_list, &tlbstr->entry);\n\n        offs += len_piece;\n    }\n}\n\nstatic TLBString *MSFT_ReadName( TLBContext *pcx, int offset)\n{\n    TLBString *tlbstr;\n\n    LIST_FOR_EACH_ENTRY(tlbstr, &pcx->pLibInfo->name_list, TLBString, entry) {\n        if (tlbstr->offset == offset) {\n            TRACE_(typelib)(\"%s\\n\", debugstr_w(tlbstr->str));\n            return tlbstr;\n        }\n    }\n\n    return NULL;\n}\n\nstatic TLBString *MSFT_ReadString( TLBContext *pcx, int offset)\n{\n    TLBString *tlbstr;\n\n    LIST_FOR_EACH_ENTRY(tlbstr, &pcx->pLibInfo->string_list, TLBString, entry) {\n        if (tlbstr->offset == offset) {\n            TRACE_(typelib)(\"%s\\n\", debugstr_w(tlbstr->str));\n            return tlbstr;\n        }\n    }\n\n    return NULL;\n}\n\n/*\n * read a value and fill a VARIANT structure\n */\nstatic void MSFT_ReadValue( VARIANT * pVar, int offset, TLBContext *pcx )\n{\n    int size;\n\n    TRACE_(typelib)(\"\\n\");\n\n    if(offset <0) { /* data are packed in here */\n        V_VT(pVar) = (offset & 0x7c000000 )>> 26;\n        V_I4(pVar) = offset & 0x3ffffff;\n        return;\n    }\n    MSFT_ReadLEWords(&(V_VT(pVar)), sizeof(VARTYPE), pcx,\n                     pcx->pTblDir->pCustData.offset + offset );\n    TRACE_(typelib)(\"Vartype = %x\\n\", V_VT(pVar));\n    switch (V_VT(pVar)){\n        case VT_EMPTY:  /* FIXME: is this right? */\n        case VT_NULL:   /* FIXME: is this right? */\n        case VT_I2  :   /* this should not happen */\n        case VT_I4  :\n        case VT_R4  :\n        case VT_ERROR   :\n        case VT_BOOL    :\n        case VT_I1  :\n        case VT_UI1 :\n        case VT_UI2 :\n        case VT_UI4 :\n        case VT_INT :\n        case VT_UINT    :\n        case VT_VOID    : /* FIXME: is this right? */\n        case VT_HRESULT :\n            size=4; break;\n        case VT_R8  :\n        case VT_CY  :\n        case VT_DATE    :\n        case VT_I8  :\n        case VT_UI8 :\n        case VT_DECIMAL :  /* FIXME: is this right? */\n        case VT_FILETIME :\n            size=8;break;\n            /* pointer types with known behaviour */\n        case VT_BSTR    :{\n            char * ptr;\n            MSFT_ReadLEDWords(&size, sizeof(INT), pcx, DO_NOT_SEEK );\n            if(size == -1){\n                V_BSTR(pVar) = NULL;\n            }else{\n                ptr = heap_alloc_zero(size);\n                MSFT_Read(ptr, size, pcx, DO_NOT_SEEK);\n                V_BSTR(pVar)=SysAllocStringLen(NULL,size);\n                /* FIXME: do we need a AtoW conversion here? */\n                V_UNION(pVar, bstrVal[size])='\\0';\n                while(size--) V_UNION(pVar, bstrVal[size])=ptr[size];\n                heap_free(ptr);\n            }\n\t}\n\tsize=-4; break;\n    /* FIXME: this will not work AT ALL when the variant contains a pointer */\n        case VT_DISPATCH :\n        case VT_VARIANT :\n        case VT_UNKNOWN :\n        case VT_PTR :\n        case VT_SAFEARRAY :\n        case VT_CARRAY  :\n        case VT_USERDEFINED :\n        case VT_LPSTR   :\n        case VT_LPWSTR  :\n        case VT_BLOB    :\n        case VT_STREAM  :\n        case VT_STORAGE :\n        case VT_STREAMED_OBJECT :\n        case VT_STORED_OBJECT   :\n        case VT_BLOB_OBJECT :\n        case VT_CF  :\n        case VT_CLSID   :\n        default:\n            size=0;\n            FIXME(\"VARTYPE %d is not supported, setting pointer to NULL\\n\",\n                V_VT(pVar));\n    }\n\n    if(size>0) /* (big|small) endian correct? */\n        MSFT_Read(&(V_I2(pVar)), size, pcx, DO_NOT_SEEK );\n    return;\n}\n/*\n * create a linked list with custom data\n */\nstatic int MSFT_CustData( TLBContext *pcx, int offset, struct list *custdata_list)\n{\n    MSFT_CDGuid entry;\n    TLBCustData* pNew;\n    int count=0;\n\n    TRACE_(typelib)(\"\\n\");\n\n    if (pcx->pTblDir->pCDGuids.offset < 0) return 0;\n\n    while(offset >=0){\n        count++;\n        pNew=heap_alloc_zero(sizeof(TLBCustData));\n        MSFT_ReadLEDWords(&entry, sizeof(entry), pcx, pcx->pTblDir->pCDGuids.offset+offset);\n        pNew->guid = MSFT_ReadGuid(entry.GuidOffset, pcx);\n        MSFT_ReadValue(&(pNew->data), entry.DataOffset, pcx);\n        list_add_head(custdata_list, &pNew->entry);\n        offset = entry.next;\n    }\n    return count;\n}\n\nstatic void MSFT_GetTdesc(TLBContext *pcx, INT type, TYPEDESC *pTd)\n{\n    if(type <0)\n        pTd->vt=type & VT_TYPEMASK;\n    else\n        *pTd=pcx->pLibInfo->pTypeDesc[type/(2*sizeof(INT))];\n\n    TRACE_(typelib)(\"vt type = %X\\n\", pTd->vt);\n}\n\nstatic BOOL TLB_is_propgetput(INVOKEKIND invkind)\n{\n    return (invkind == INVOKE_PROPERTYGET ||\n        invkind == INVOKE_PROPERTYPUT ||\n        invkind == INVOKE_PROPERTYPUTREF);\n}\n\nstatic void\nMSFT_DoFuncs(TLBContext*     pcx,\n\t    ITypeInfoImpl*  pTI,\n            int             cFuncs,\n            int             cVars,\n            int             offset,\n            TLBFuncDesc**   pptfd)\n{\n    /*\n     * member information is stored in a data structure at offset\n     * indicated by the memoffset field of the typeinfo structure\n     * There are several distinctive parts.\n     * The first part starts with a field that holds the total length\n     * of this (first) part excluding this field. Then follow the records,\n     * for each member there is one record.\n     *\n     * The first entry is always the length of the record (including this\n     * length word).\n     * The rest of the record depends on the type of the member. If there is\n     * a field indicating the member type (function, variable, interface, etc)\n     * I have not found it yet. At this time we depend on the information\n     * in the type info and the usual order how things are stored.\n     *\n     * Second follows an array sized nrMEM*sizeof(INT) with a member id\n     * for each member;\n     *\n     * Third is an equal sized array with file offsets to the name entry\n     * of each member.\n     *\n     * The fourth and last (?) part is an array with offsets to the records\n     * in the first part of this file segment.\n     */\n\n    int infolen, nameoffset, reclength, i;\n    int recoffset = offset + sizeof(INT);\n\n    char *recbuf = heap_alloc(0xffff);\n    MSFT_FuncRecord *pFuncRec = (MSFT_FuncRecord*)recbuf;\n    TLBFuncDesc *ptfd_prev = NULL, *ptfd;\n\n    TRACE_(typelib)(\"\\n\");\n\n    MSFT_ReadLEDWords(&infolen, sizeof(INT), pcx, offset);\n\n    *pptfd = TLBFuncDesc_Alloc(cFuncs);\n    ptfd = *pptfd;\n    for ( i = 0; i < cFuncs ; i++ )\n    {\n        int optional;\n\n        /* name, eventually add to a hash table */\n        MSFT_ReadLEDWords(&nameoffset, sizeof(INT), pcx,\n                          offset + infolen + (cFuncs + cVars + i + 1) * sizeof(INT));\n\n        /* read the function information record */\n        MSFT_ReadLEDWords(&reclength, sizeof(pFuncRec->Info), pcx, recoffset);\n\n        reclength &= 0xffff;\n\n        MSFT_ReadLEDWords(&pFuncRec->DataType, reclength - FIELD_OFFSET(MSFT_FuncRecord, DataType), pcx, DO_NOT_SEEK);\n\n        /* size without argument data */\n        optional = reclength - pFuncRec->nrargs*sizeof(MSFT_ParameterInfo);\n        if (pFuncRec->FKCCIC & 0x1000)\n            optional -= pFuncRec->nrargs * sizeof(INT);\n\n        if (optional > FIELD_OFFSET(MSFT_FuncRecord, HelpContext))\n            ptfd->helpcontext = pFuncRec->HelpContext;\n\n        if (optional > FIELD_OFFSET(MSFT_FuncRecord, oHelpString))\n            ptfd->HelpString = MSFT_ReadString(pcx, pFuncRec->oHelpString);\n\n        if (optional > FIELD_OFFSET(MSFT_FuncRecord, oEntry))\n        {\n            if (pFuncRec->FKCCIC & 0x2000 )\n            {\n                if (!IS_INTRESOURCE(pFuncRec->oEntry))\n                    ERR(\"ordinal 0x%08x invalid, IS_INTRESOURCE is false\\n\", pFuncRec->oEntry);\n                ptfd->Entry = (TLBString*)(DWORD_PTR)LOWORD(pFuncRec->oEntry);\n            }\n            else\n                ptfd->Entry = MSFT_ReadString(pcx, pFuncRec->oEntry);\n        }\n        else\n            ptfd->Entry = (TLBString*)-1;\n\n        if (optional > FIELD_OFFSET(MSFT_FuncRecord, HelpStringContext))\n            ptfd->HelpStringContext = pFuncRec->HelpStringContext;\n\n        if (optional > FIELD_OFFSET(MSFT_FuncRecord, oCustData) && pFuncRec->FKCCIC & 0x80)\n            MSFT_CustData(pcx, pFuncRec->oCustData, &ptfd->custdata_list);\n\n        /* fill the FuncDesc Structure */\n        MSFT_ReadLEDWords( & ptfd->funcdesc.memid, sizeof(INT), pcx,\n                           offset + infolen + ( i + 1) * sizeof(INT));\n\n        ptfd->funcdesc.funckind   =  (pFuncRec->FKCCIC)      & 0x7;\n        ptfd->funcdesc.invkind    =  (pFuncRec->FKCCIC) >> 3 & 0xF;\n        ptfd->funcdesc.callconv   =  (pFuncRec->FKCCIC) >> 8 & 0xF;\n        ptfd->funcdesc.cParams    =   pFuncRec->nrargs  ;\n        ptfd->funcdesc.cParamsOpt =   pFuncRec->nroargs ;\n        ptfd->funcdesc.oVft       =   (pFuncRec->VtableOffset & ~1) * sizeof(void *) / pTI->pTypeLib->ptr_size;\n        ptfd->funcdesc.wFuncFlags =   LOWORD(pFuncRec->Flags) ;\n\n        /* nameoffset is sometimes -1 on the second half of a propget/propput\n         * pair of functions */\n        if ((nameoffset == -1) && (i > 0) &&\n                TLB_is_propgetput(ptfd_prev->funcdesc.invkind) &&\n                TLB_is_propgetput(ptfd->funcdesc.invkind))\n            ptfd->Name = ptfd_prev->Name;\n        else\n            ptfd->Name = MSFT_ReadName(pcx, nameoffset);\n\n        MSFT_GetTdesc(pcx,\n\t\t      pFuncRec->DataType,\n\t\t      &ptfd->funcdesc.elemdescFunc.tdesc);\n\n        /* do the parameters/arguments */\n        if(pFuncRec->nrargs)\n        {\n            int j = 0;\n            MSFT_ParameterInfo paraminfo;\n\n            ptfd->funcdesc.lprgelemdescParam =\n                heap_alloc_zero(pFuncRec->nrargs * (sizeof(ELEMDESC) + sizeof(PARAMDESCEX)));\n\n            ptfd->pParamDesc = TLBParDesc_Constructor(pFuncRec->nrargs);\n\n            MSFT_ReadLEDWords(&paraminfo, sizeof(paraminfo), pcx,\n                              recoffset + reclength - pFuncRec->nrargs * sizeof(MSFT_ParameterInfo));\n\n            for ( j = 0 ; j < pFuncRec->nrargs ; j++ )\n            {\n                ELEMDESC *elemdesc = &ptfd->funcdesc.lprgelemdescParam[j];\n\n                MSFT_GetTdesc(pcx,\n\t\t\t      paraminfo.DataType,\n\t\t\t      &elemdesc->tdesc);\n\n                elemdesc->u.paramdesc.wParamFlags = paraminfo.Flags;\n\n                /* name */\n                if (paraminfo.oName != -1)\n                    ptfd->pParamDesc[j].Name =\n                        MSFT_ReadName( pcx, paraminfo.oName );\n                TRACE_(typelib)(\"param[%d] = %s\\n\", j, debugstr_w(TLB_get_bstr(ptfd->pParamDesc[j].Name)));\n\n                /* default value */\n                if ( (elemdesc->u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT) &&\n                     (pFuncRec->FKCCIC & 0x1000) )\n                {\n                    INT* pInt = (INT *)((char *)pFuncRec +\n                                   reclength -\n                                   (pFuncRec->nrargs * 4) * sizeof(INT) );\n\n                    PARAMDESC* pParamDesc = &elemdesc->u.paramdesc;\n\n                    pParamDesc->pparamdescex = (PARAMDESCEX*)(ptfd->funcdesc.lprgelemdescParam+pFuncRec->nrargs)+j;\n                    pParamDesc->pparamdescex->cBytes = sizeof(PARAMDESCEX);\n\n\t\t    MSFT_ReadValue(&(pParamDesc->pparamdescex->varDefaultValue),\n                        pInt[j], pcx);\n                }\n                else\n                    elemdesc->u.paramdesc.pparamdescex = NULL;\n\n                /* custom info */\n                if (optional > (FIELD_OFFSET(MSFT_FuncRecord, oArgCustData) +\n                                j*sizeof(pFuncRec->oArgCustData[0])) &&\n                    pFuncRec->FKCCIC & 0x80 )\n                {\n                    MSFT_CustData(pcx,\n\t\t\t\t  pFuncRec->oArgCustData[j],\n\t\t\t\t  &ptfd->pParamDesc[j].custdata_list);\n                }\n\n                /* SEEK value = jump to offset,\n                 * from there jump to the end of record,\n                 * go back by (j-1) arguments\n                 */\n                MSFT_ReadLEDWords( &paraminfo ,\n\t\t\t   sizeof(MSFT_ParameterInfo), pcx,\n\t\t\t   recoffset + reclength - ((pFuncRec->nrargs - j - 1)\n\t\t\t\t\t       * sizeof(MSFT_ParameterInfo)));\n            }\n        }\n\n        /* scode is not used: archaic win16 stuff FIXME: right? */\n        ptfd->funcdesc.cScodes   = 0 ;\n        ptfd->funcdesc.lprgscode = NULL ;\n\n        ptfd_prev = ptfd;\n        ++ptfd;\n        recoffset += reclength;\n    }\n    heap_free(recbuf);\n}\n\nstatic void MSFT_DoVars(TLBContext *pcx, ITypeInfoImpl *pTI, int cFuncs,\n\t\t       int cVars, int offset, TLBVarDesc ** pptvd)\n{\n    int infolen, nameoffset, reclength;\n    char recbuf[256];\n    MSFT_VarRecord *pVarRec = (MSFT_VarRecord*)recbuf;\n    TLBVarDesc *ptvd;\n    int i;\n    int recoffset;\n\n    TRACE_(typelib)(\"\\n\");\n\n    ptvd = *pptvd = TLBVarDesc_Alloc(cVars);\n    MSFT_ReadLEDWords(&infolen,sizeof(INT), pcx, offset);\n    MSFT_ReadLEDWords(&recoffset,sizeof(INT), pcx, offset + infolen +\n                      ((cFuncs+cVars)*2+cFuncs + 1)*sizeof(INT));\n    recoffset += offset+sizeof(INT);\n    for(i=0;i<cVars;i++, ++ptvd){\n    /* name, eventually add to a hash table */\n        MSFT_ReadLEDWords(&nameoffset, sizeof(INT), pcx,\n                          offset + infolen + (2*cFuncs + cVars + i + 1) * sizeof(INT));\n        ptvd->Name=MSFT_ReadName(pcx, nameoffset);\n    /* read the variable information record */\n        MSFT_ReadLEDWords(&reclength, sizeof(pVarRec->Info), pcx, recoffset);\n        reclength &= 0xff;\n        MSFT_ReadLEDWords(&pVarRec->DataType, reclength - FIELD_OFFSET(MSFT_VarRecord, DataType), pcx, DO_NOT_SEEK);\n\n        /* optional data */\n        if(reclength > FIELD_OFFSET(MSFT_VarRecord, HelpContext))\n            ptvd->HelpContext = pVarRec->HelpContext;\n\n        if(reclength > FIELD_OFFSET(MSFT_VarRecord, HelpString))\n            ptvd->HelpString = MSFT_ReadString(pcx, pVarRec->HelpString);\n\n        if(reclength > FIELD_OFFSET(MSFT_VarRecord, HelpStringContext))\n            ptvd->HelpStringContext = pVarRec->HelpStringContext;\n\n    /* fill the VarDesc Structure */\n        MSFT_ReadLEDWords(&ptvd->vardesc.memid, sizeof(INT), pcx,\n                          offset + infolen + (cFuncs + i + 1) * sizeof(INT));\n        ptvd->vardesc.varkind = pVarRec->VarKind;\n        ptvd->vardesc.wVarFlags = pVarRec->Flags;\n        MSFT_GetTdesc(pcx, pVarRec->DataType,\n            &ptvd->vardesc.elemdescVar.tdesc);\n/*   ptvd->vardesc.lpstrSchema; is reserved (SDK) FIXME?? */\n        if(pVarRec->VarKind == VAR_CONST ){\n            ptvd->vardesc.u.lpvarValue = heap_alloc_zero(sizeof(VARIANT));\n            MSFT_ReadValue(ptvd->vardesc.u.lpvarValue,\n                pVarRec->OffsValue, pcx);\n        } else\n            ptvd->vardesc.u.oInst=pVarRec->OffsValue;\n        recoffset += reclength;\n    }\n}\n\n/* process Implemented Interfaces of a com class */\nstatic void MSFT_DoImplTypes(TLBContext *pcx, ITypeInfoImpl *pTI, int count,\n\t\t\t    int offset)\n{\n    int i;\n    MSFT_RefRecord refrec;\n    TLBImplType *pImpl;\n\n    TRACE_(typelib)(\"\\n\");\n\n    pTI->impltypes = TLBImplType_Alloc(count);\n    pImpl = pTI->impltypes;\n    for(i=0;i<count;i++){\n        if(offset<0) break; /* paranoia */\n        MSFT_ReadLEDWords(&refrec,sizeof(refrec),pcx,offset+pcx->pTblDir->pRefTab.offset);\n        pImpl->hRef = refrec.reftype;\n        pImpl->implflags=refrec.flags;\n        MSFT_CustData(pcx, refrec.oCustData, &pImpl->custdata_list);\n        offset=refrec.onext;\n        ++pImpl;\n    }\n}\n\n#ifdef _WIN64\n/* when a 32-bit typelib is loaded in 64-bit mode, we need to resize pointers\n * and some structures, and fix the alignment */\nstatic void TLB_fix_32on64_typeinfo(ITypeInfoImpl *info)\n{\n    if(info->typeattr.typekind == TKIND_ALIAS){\n        switch(info->tdescAlias->vt){\n        case VT_BSTR:\n        case VT_DISPATCH:\n        case VT_UNKNOWN:\n        case VT_PTR:\n        case VT_SAFEARRAY:\n        case VT_LPSTR:\n        case VT_LPWSTR:\n            info->typeattr.cbSizeInstance = sizeof(void*);\n            info->typeattr.cbAlignment = sizeof(void*);\n            break;\n        case VT_CARRAY:\n        case VT_USERDEFINED:\n            TLB_size_instance(info, SYS_WIN64, info->tdescAlias, &info->typeattr.cbSizeInstance, &info->typeattr.cbAlignment);\n            break;\n        case VT_VARIANT:\n            info->typeattr.cbSizeInstance = sizeof(VARIANT);\n            info->typeattr.cbAlignment = 8;\n        default:\n            if(info->typeattr.cbSizeInstance < sizeof(void*))\n                info->typeattr.cbAlignment = info->typeattr.cbSizeInstance;\n            else\n                info->typeattr.cbAlignment = sizeof(void*);\n            break;\n        }\n    }else if(info->typeattr.typekind == TKIND_INTERFACE ||\n            info->typeattr.typekind == TKIND_DISPATCH ||\n            info->typeattr.typekind == TKIND_COCLASS){\n        info->typeattr.cbSizeInstance = sizeof(void*);\n        info->typeattr.cbAlignment = sizeof(void*);\n    }\n}\n#endif\n\n/*\n * process a typeinfo record\n */\nstatic ITypeInfoImpl * MSFT_DoTypeInfo(\n    TLBContext *pcx,\n    int count,\n    ITypeLibImpl * pLibInfo)\n{\n    MSFT_TypeInfoBase tiBase;\n    ITypeInfoImpl *ptiRet;\n\n    TRACE_(typelib)(\"count=%u\\n\", count);\n\n    ptiRet = ITypeInfoImpl_Constructor();\n    MSFT_ReadLEDWords(&tiBase, sizeof(tiBase) ,pcx ,\n                      pcx->pTblDir->pTypeInfoTab.offset+count*sizeof(tiBase));\n\n/* this is where we are coming from */\n    ptiRet->pTypeLib = pLibInfo;\n    ptiRet->index=count;\n\n    ptiRet->guid = MSFT_ReadGuid(tiBase.posguid, pcx);\n    ptiRet->typeattr.lcid = pLibInfo->set_lcid;   /* FIXME: correct? */\n    ptiRet->typeattr.lpstrSchema = NULL;              /* reserved */\n    ptiRet->typeattr.cbSizeInstance = tiBase.size;\n    ptiRet->typeattr.typekind = tiBase.typekind & 0xF;\n    ptiRet->typeattr.cFuncs = LOWORD(tiBase.cElement);\n    ptiRet->typeattr.cVars = HIWORD(tiBase.cElement);\n    ptiRet->typeattr.cbAlignment = (tiBase.typekind >> 11 )& 0x1F; /* there are more flags there */\n    ptiRet->typeattr.wTypeFlags = tiBase.flags;\n    ptiRet->typeattr.wMajorVerNum = LOWORD(tiBase.version);\n    ptiRet->typeattr.wMinorVerNum = HIWORD(tiBase.version);\n    ptiRet->typeattr.cImplTypes = tiBase.cImplTypes;\n    ptiRet->typeattr.cbSizeVft = tiBase.cbSizeVft;\n    if (ptiRet->typeattr.typekind == TKIND_ALIAS) {\n        TYPEDESC tmp;\n        MSFT_GetTdesc(pcx, tiBase.datatype1, &tmp);\n        ptiRet->tdescAlias = heap_alloc(TLB_SizeTypeDesc(&tmp, TRUE));\n        TLB_CopyTypeDesc(NULL, &tmp, ptiRet->tdescAlias);\n    }\n\n/*  FIXME: */\n/*    IDLDESC  idldescType; *//* never saw this one != zero  */\n\n/* name, eventually add to a hash table */\n    ptiRet->Name=MSFT_ReadName(pcx, tiBase.NameOffset);\n    ptiRet->hreftype = MSFT_ReadHreftype(pcx, tiBase.NameOffset);\n    TRACE_(typelib)(\"reading %s\\n\", debugstr_w(TLB_get_bstr(ptiRet->Name)));\n    /* help info */\n    ptiRet->DocString=MSFT_ReadString(pcx, tiBase.docstringoffs);\n    ptiRet->dwHelpStringContext=tiBase.helpstringcontext;\n    ptiRet->dwHelpContext=tiBase.helpcontext;\n\n    if (ptiRet->typeattr.typekind == TKIND_MODULE)\n        ptiRet->DllName = MSFT_ReadString(pcx, tiBase.datatype1);\n\n/* note: InfoType's Help file and HelpStringDll come from the containing\n * library. Further HelpString and Docstring appear to be the same thing :(\n */\n    /* functions */\n    if(ptiRet->typeattr.cFuncs >0 )\n        MSFT_DoFuncs(pcx, ptiRet, ptiRet->typeattr.cFuncs,\n\t\t    ptiRet->typeattr.cVars,\n\t\t    tiBase.memoffset, &ptiRet->funcdescs);\n    /* variables */\n    if(ptiRet->typeattr.cVars >0 )\n        MSFT_DoVars(pcx, ptiRet, ptiRet->typeattr.cFuncs,\n\t\t   ptiRet->typeattr.cVars,\n\t\t   tiBase.memoffset, &ptiRet->vardescs);\n    if(ptiRet->typeattr.cImplTypes >0 ) {\n        switch(ptiRet->typeattr.typekind)\n        {\n        case TKIND_COCLASS:\n            MSFT_DoImplTypes(pcx, ptiRet, ptiRet->typeattr.cImplTypes,\n                tiBase.datatype1);\n            break;\n        case TKIND_DISPATCH:\n            /* This is not -1 when the interface is a non-base dual interface or\n               when a dispinterface wraps an interface, i.e., the idl 'dispinterface x {interface y;};'.\n               Note however that GetRefTypeOfImplType(0) always returns a ref to IDispatch and\n               not this interface.\n            */\n\n            if (tiBase.datatype1 != -1)\n            {\n                ptiRet->impltypes = TLBImplType_Alloc(1);\n                ptiRet->impltypes[0].hRef = tiBase.datatype1;\n            }\n            break;\n        default:\n            ptiRet->impltypes = TLBImplType_Alloc(1);\n            ptiRet->impltypes[0].hRef = tiBase.datatype1;\n            break;\n       }\n    }\n    MSFT_CustData(pcx, tiBase.oCustData, ptiRet->pcustdata_list);\n\n    TRACE_(typelib)(\"%s guid: %s kind:%s\\n\",\n       debugstr_w(TLB_get_bstr(ptiRet->Name)),\n       debugstr_guid(TLB_get_guidref(ptiRet->guid)),\n       typekind_desc[ptiRet->typeattr.typekind]);\n    if (TRACE_ON(typelib))\n      dump_TypeInfo(ptiRet);\n\n    return ptiRet;\n}\n\nstatic HRESULT MSFT_ReadAllStrings(TLBContext *pcx)\n{\n    char *string;\n    INT16 len_str, len_piece;\n    int offs = 0, lengthInChars;\n\n    MSFT_Seek(pcx, pcx->pTblDir->pStringtab.offset);\n    while (1) {\n        TLBString *tlbstr;\n\n        if (offs >= pcx->pTblDir->pStringtab.length)\n            return S_OK;\n\n        MSFT_ReadLEWords(&len_str, sizeof(INT16), pcx, DO_NOT_SEEK);\n        len_piece = len_str + sizeof(INT16);\n        if(len_piece % 4)\n            len_piece = (len_piece + 4) & ~0x3;\n        if(len_piece < 8)\n            len_piece = 8;\n\n        string = heap_alloc(len_piece + 1);\n        MSFT_Read(string, len_piece - sizeof(INT16), pcx, DO_NOT_SEEK);\n        string[len_str] = '\\0';\n\n        lengthInChars = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED | MB_ERR_INVALID_CHARS,\n                                            string, -1, NULL, 0);\n        if (!lengthInChars) {\n            heap_free(string);\n            return E_UNEXPECTED;\n        }\n\n        tlbstr = heap_alloc(sizeof(TLBString));\n\n        tlbstr->offset = offs;\n        tlbstr->str = SysAllocStringByteLen(NULL, lengthInChars * sizeof(WCHAR));\n        MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, string, -1, tlbstr->str, lengthInChars);\n\n        heap_free(string);\n\n        list_add_tail(&pcx->pLibInfo->string_list, &tlbstr->entry);\n\n        offs += len_piece;\n    }\n}\n\nstatic HRESULT MSFT_ReadAllRefs(TLBContext *pcx)\n{\n    TLBRefType *ref;\n    int offs = 0;\n\n    MSFT_Seek(pcx, pcx->pTblDir->pImpInfo.offset);\n    while (offs < pcx->pTblDir->pImpInfo.length) {\n        MSFT_ImpInfo impinfo;\n        TLBImpLib *pImpLib;\n\n        MSFT_ReadLEDWords(&impinfo, sizeof(impinfo), pcx, DO_NOT_SEEK);\n\n        ref = heap_alloc_zero(sizeof(TLBRefType));\n        list_add_tail(&pcx->pLibInfo->ref_list, &ref->entry);\n\n        LIST_FOR_EACH_ENTRY(pImpLib, &pcx->pLibInfo->implib_list, TLBImpLib, entry)\n            if(pImpLib->offset==impinfo.oImpFile)\n                break;\n\n        if(&pImpLib->entry != &pcx->pLibInfo->implib_list){\n            ref->reference = offs;\n            ref->pImpTLInfo = pImpLib;\n            if(impinfo.flags & MSFT_IMPINFO_OFFSET_IS_GUID) {\n                ref->guid = MSFT_ReadGuid(impinfo.oGuid, pcx);\n                TRACE(\"importing by guid %s\\n\", debugstr_guid(TLB_get_guidref(ref->guid)));\n                ref->index = TLB_REF_USE_GUID;\n            } else\n                ref->index = impinfo.oGuid;\n        }else{\n            ERR(\"Cannot find a reference\\n\");\n            ref->reference = -1;\n            ref->pImpTLInfo = TLB_REF_NOT_FOUND;\n        }\n\n        offs += sizeof(impinfo);\n    }\n\n    return S_OK;\n}\n#endif\n\n/* Because type library parsing has some degree of overhead, and some apps repeatedly load the same\n * typelibs over and over, we cache them here. According to MSDN Microsoft have a similar scheme in\n * place. This will cause a deliberate memory leak, but generally losing RAM for cycles is an acceptable\n * tradeoff here.\n */\nstatic struct list tlb_cache = LIST_INIT(tlb_cache);\nstatic CRITICAL_SECTION cache_section;\nstatic CRITICAL_SECTION_DEBUG cache_section_debug =\n{\n    0, 0, &cache_section,\n    { &cache_section_debug.ProcessLocksList, &cache_section_debug.ProcessLocksList },\n      0, 0, { (DWORD_PTR)(__FILE__ \": typelib loader cache\") }\n};\nstatic CRITICAL_SECTION cache_section = { &cache_section_debug, -1, 0, 0, 0, 0 };\n\n\n#if 1\ntypedef struct TLB_PEFile\n{\n    IUnknown IUnknown_iface;\n    LONG refs;\n    HMODULE dll;\n    HRSRC typelib_resource;\n    HGLOBAL typelib_global;\n    LPVOID typelib_base;\n} TLB_PEFile;\n\nstatic inline TLB_PEFile *pefile_impl_from_IUnknown(IUnknown *iface)\n{\n    return CONTAINING_RECORD(iface, TLB_PEFile, IUnknown_iface);\n}\n\nstatic HRESULT WINAPI TLB_PEFile_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)\n{\n    if (IsEqualIID(riid, &IID_IUnknown))\n    {\n        *ppv = iface;\n        IUnknown_AddRef(iface);\n        return S_OK;\n    }\n    *ppv = NULL;\n    return E_NOINTERFACE;\n}\n\nstatic ULONG WINAPI TLB_PEFile_AddRef(IUnknown *iface)\n{\n    TLB_PEFile *This = pefile_impl_from_IUnknown(iface);\n    return InterlockedIncrement(&This->refs);\n}\n\nstatic ULONG WINAPI TLB_PEFile_Release(IUnknown *iface)\n{\n    TLB_PEFile *This = pefile_impl_from_IUnknown(iface);\n    ULONG refs = InterlockedDecrement(&This->refs);\n    if (!refs)\n    {\n        if (This->typelib_global)\n            FreeResource(This->typelib_global);\n        if (This->dll)\n            FreeLibrary(This->dll);\n        heap_free(This);\n    }\n    return refs;\n}\n\nstatic const IUnknownVtbl TLB_PEFile_Vtable =\n{\n    TLB_PEFile_QueryInterface,\n    TLB_PEFile_AddRef,\n    TLB_PEFile_Release\n};\n\nstatic HRESULT TLB_PEFile_Open(LPCWSTR path, INT index, LPVOID *ppBase, DWORD *pdwTLBLength, IUnknown **ppFile)\n{\n    TLB_PEFile *This;\n    HRESULT hr = TYPE_E_CANTLOADLIBRARY;\n    index = -1 ? 1 : index;\n\n    This = heap_alloc(sizeof(TLB_PEFile));\n    if (!This)\n        return E_OUTOFMEMORY;\n\n    This->IUnknown_iface.lpVtbl = &TLB_PEFile_Vtable;\n    This->refs = 1;\n    This->dll = NULL;\n    This->typelib_resource = NULL;\n    This->typelib_global = NULL;\n    This->typelib_base = NULL;\n\n    This->dll = LoadLibraryExW(path, 0, DONT_RESOLVE_DLL_REFERENCES |\n                    LOAD_LIBRARY_AS_DATAFILE | LOAD_WITH_ALTERED_SEARCH_PATH);\n\n    if (This->dll)\n    {\n        static const WCHAR TYPELIBW[] = {'T','Y','P','E','L','I','B',0};\n        This->typelib_resource = FindResourceW(This->dll, MAKEINTRESOURCEW(index), TYPELIBW);\n        if (This->typelib_resource)\n        {\n            This->typelib_global = LoadResource(This->dll, This->typelib_resource);\n            if (This->typelib_global)\n            {\n                This->typelib_base = LockResource(This->typelib_global);\n\n                if (This->typelib_base)\n                {\n                    *pdwTLBLength = SizeofResource(This->dll, This->typelib_resource);\n                    *ppBase = This->typelib_base;\n                    *ppFile = &This->IUnknown_iface;\n                    return S_OK;\n                }\n            }\n        }\n\n        TRACE(\"No TYPELIB resource found\\n\");\n        hr = E_FAIL;\n    }\n\n    TLB_PEFile_Release(&This->IUnknown_iface);\n    return hr;\n}\n\ntypedef struct TLB_NEFile\n{\n    IUnknown IUnknown_iface;\n    LONG refs;\n    LPVOID typelib_base;\n} TLB_NEFile;\n\nstatic inline TLB_NEFile *nefile_impl_from_IUnknown(IUnknown *iface)\n{\n    return CONTAINING_RECORD(iface, TLB_NEFile, IUnknown_iface);\n}\n\nstatic HRESULT WINAPI TLB_NEFile_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)\n{\n    if (IsEqualIID(riid, &IID_IUnknown))\n    {\n        *ppv = iface;\n        IUnknown_AddRef(iface);\n        return S_OK;\n    }\n    *ppv = NULL;\n    return E_NOINTERFACE;\n}\n\nstatic ULONG WINAPI TLB_NEFile_AddRef(IUnknown *iface)\n{\n    TLB_NEFile *This = nefile_impl_from_IUnknown(iface);\n    return InterlockedIncrement(&This->refs);\n}\n\nstatic ULONG WINAPI TLB_NEFile_Release(IUnknown *iface)\n{\n    TLB_NEFile *This = nefile_impl_from_IUnknown(iface);\n    ULONG refs = InterlockedDecrement(&This->refs);\n    if (!refs)\n    {\n        heap_free(This->typelib_base);\n        heap_free(This);\n    }\n    return refs;\n}\n\nstatic const IUnknownVtbl TLB_NEFile_Vtable =\n{\n    TLB_NEFile_QueryInterface,\n    TLB_NEFile_AddRef,\n    TLB_NEFile_Release\n};\n\n#pragma comment(lib, \"lz32.lib\")\n/***********************************************************************\n *           read_xx_header         [internal]\n */\nstatic int read_xx_header( HFILE lzfd )\n{\n    IMAGE_DOS_HEADER mzh;\n    char magic[3];\n\n    LZSeek( lzfd, 0, SEEK_SET );\n    if ( sizeof(mzh) != LZRead( lzfd, (LPSTR)&mzh, sizeof(mzh) ) )\n        return 0;\n    if ( mzh.e_magic != IMAGE_DOS_SIGNATURE )\n        return 0;\n\n    LZSeek( lzfd, mzh.e_lfanew, SEEK_SET );\n    if ( 2 != LZRead( lzfd, magic, 2 ) )\n        return 0;\n\n    LZSeek( lzfd, mzh.e_lfanew, SEEK_SET );\n\n    if ( magic[0] == 'N' && magic[1] == 'E' )\n        return IMAGE_OS2_SIGNATURE;\n    if ( magic[0] == 'P' && magic[1] == 'E' )\n        return IMAGE_NT_SIGNATURE;\n\n    magic[2] = '\\0';\n    WARN(\"Can't handle %s files.\\n\", magic );\n    return 0;\n}\n\n\n/***********************************************************************\n *           find_ne_resource         [internal]\n */\nstatic BOOL find_ne_resource( HFILE lzfd, LPCSTR typeid, LPCSTR resid,\n                                DWORD *resLen, DWORD *resOff )\n{\n    IMAGE_OS2_HEADER nehd;\n    NE_TYPEINFO *typeInfo;\n    NE_NAMEINFO *nameInfo;\n    DWORD nehdoffset;\n    LPBYTE resTab;\n    DWORD resTabSize;\n    int count;\n\n    /* Read in NE header */\n    nehdoffset = LZSeek( lzfd, 0, SEEK_CUR );\n    if ( sizeof(nehd) != LZRead( lzfd, (LPSTR)&nehd, sizeof(nehd) ) ) return FALSE;\n\n    resTabSize = nehd.ne_restab - nehd.ne_rsrctab;\n    if ( !resTabSize )\n    {\n        TRACE(\"No resources in NE dll\\n\" );\n        return FALSE;\n    }\n\n    /* Read in resource table */\n    resTab = heap_alloc( resTabSize );\n    if ( !resTab ) return FALSE;\n\n    LZSeek( lzfd, nehd.ne_rsrctab + nehdoffset, SEEK_SET );\n    if ( resTabSize != LZRead( lzfd, (char*)resTab, resTabSize ) )\n    {\n        heap_free( resTab );\n        return FALSE;\n    }\n\n    /* Find resource */\n    typeInfo = (NE_TYPEINFO *)(resTab + 2);\n\n    if (!IS_INTRESOURCE(typeid))  /* named type */\n    {\n        BYTE len = strlen( typeid );\n        while (typeInfo->type_id)\n        {\n            if (!(typeInfo->type_id & 0x8000))\n            {\n                BYTE *p = resTab + typeInfo->type_id;\n                if ((*p == len) && !strncasecmp( (char*)p+1, typeid, len )) goto found_type;\n            }\n            typeInfo = (NE_TYPEINFO *)((char *)(typeInfo + 1) +\n                                       typeInfo->count * sizeof(NE_NAMEINFO));\n        }\n    }\n    else  /* numeric type id */\n    {\n        WORD id = LOWORD(typeid) | 0x8000;\n        while (typeInfo->type_id)\n        {\n            if (typeInfo->type_id == id) goto found_type;\n            typeInfo = (NE_TYPEINFO *)((char *)(typeInfo + 1) +\n                                       typeInfo->count * sizeof(NE_NAMEINFO));\n        }\n    }\n    TRACE(\"No typeid entry found for %p\\n\", typeid );\n    heap_free( resTab );\n    return FALSE;\n\n found_type:\n    nameInfo = (NE_NAMEINFO *)(typeInfo + 1);\n\n    if (!IS_INTRESOURCE(resid))  /* named resource */\n    {\n        BYTE len = strlen( resid );\n        for (count = typeInfo->count; count > 0; count--, nameInfo++)\n        {\n            BYTE *p = resTab + nameInfo->id;\n            if (nameInfo->id & 0x8000) continue;\n            if ((*p == len) && !strncasecmp( (char*)p+1, resid, len )) goto found_name;\n        }\n    }\n    else  /* numeric resource id */\n    {\n        WORD id = LOWORD(resid) | 0x8000;\n        for (count = typeInfo->count; count > 0; count--, nameInfo++)\n            if (nameInfo->id == id || id == 0xffff) goto found_name;\n    }\n    TRACE(\"No resid entry found for %p\\n\", typeid );\n    heap_free( resTab );\n    return FALSE;\n\n found_name:\n    /* Return resource data */\n    if ( resLen ) *resLen = nameInfo->length << *(WORD *)resTab;\n    if ( resOff ) *resOff = nameInfo->offset << *(WORD *)resTab;\n\n    heap_free( resTab );\n    return TRUE;\n}\n\nstatic HRESULT TLB_NEFile_Open(LPCWSTR path, INT index, LPVOID *ppBase, DWORD *pdwTLBLength, IUnknown **ppFile){\n\n    HFILE lzfd = -1;\n    OFSTRUCT ofs;\n    HRESULT hr = TYPE_E_CANTLOADLIBRARY;\n    TLB_NEFile *This;\n\n    This = heap_alloc(sizeof(TLB_NEFile));\n    if (!This) return E_OUTOFMEMORY;\n\n    This->IUnknown_iface.lpVtbl = &TLB_NEFile_Vtable;\n    This->refs = 1;\n    This->typelib_base = NULL;\n\n    lzfd = LZOpenFileW( (LPWSTR)path, &ofs, OF_READ );\n    if ( lzfd >= 0 && read_xx_header( lzfd ) == IMAGE_OS2_SIGNATURE )\n    {\n        DWORD reslen, offset;\n        if( find_ne_resource( lzfd, \"TYPELIB\", MAKEINTRESOURCEA(index), &reslen, &offset ) )\n        {\n            This->typelib_base = heap_alloc(reslen);\n            if( !This->typelib_base )\n                hr = E_OUTOFMEMORY;\n            else\n            {\n                LZSeek( lzfd, offset, SEEK_SET );\n                reslen = LZRead( lzfd, This->typelib_base, reslen );\n                LZClose( lzfd );\n                *ppBase = This->typelib_base;\n                *pdwTLBLength = reslen;\n                *ppFile = &This->IUnknown_iface;\n                return S_OK;\n            }\n        }\n    }\n\n    if( lzfd >= 0) LZClose( lzfd );\n    TLB_NEFile_Release(&This->IUnknown_iface);\n    return hr;\n}\n\ntypedef struct TLB_Mapping\n{\n    IUnknown IUnknown_iface;\n    LONG refs;\n    HANDLE file;\n    HANDLE mapping;\n    LPVOID typelib_base;\n} TLB_Mapping;\n\nstatic inline TLB_Mapping *mapping_impl_from_IUnknown(IUnknown *iface)\n{\n    return CONTAINING_RECORD(iface, TLB_Mapping, IUnknown_iface);\n}\n\nstatic HRESULT WINAPI TLB_Mapping_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)\n{\n    if (IsEqualIID(riid, &IID_IUnknown))\n    {\n        *ppv = iface;\n        IUnknown_AddRef(iface);\n        return S_OK;\n    }\n    *ppv = NULL;\n    return E_NOINTERFACE;\n}\n\nstatic ULONG WINAPI TLB_Mapping_AddRef(IUnknown *iface)\n{\n    TLB_Mapping *This = mapping_impl_from_IUnknown(iface);\n    return InterlockedIncrement(&This->refs);\n}\n\nstatic ULONG WINAPI TLB_Mapping_Release(IUnknown *iface)\n{\n    TLB_Mapping *This = mapping_impl_from_IUnknown(iface);\n    ULONG refs = InterlockedDecrement(&This->refs);\n    if (!refs)\n    {\n        if (This->typelib_base)\n            UnmapViewOfFile(This->typelib_base);\n        if (This->mapping)\n            CloseHandle(This->mapping);\n        if (This->file != INVALID_HANDLE_VALUE)\n            CloseHandle(This->file);\n        heap_free(This);\n    }\n    return refs;\n}\n\nstatic const IUnknownVtbl TLB_Mapping_Vtable =\n{\n    TLB_Mapping_QueryInterface,\n    TLB_Mapping_AddRef,\n    TLB_Mapping_Release\n};\n\nstatic HRESULT TLB_Mapping_Open(LPCWSTR path, LPVOID *ppBase, DWORD *pdwTLBLength, IUnknown **ppFile)\n{\n    TLB_Mapping *This;\n\n    This = heap_alloc(sizeof(TLB_Mapping));\n    if (!This)\n        return E_OUTOFMEMORY;\n\n    This->IUnknown_iface.lpVtbl = &TLB_Mapping_Vtable;\n    This->refs = 1;\n    This->file = INVALID_HANDLE_VALUE;\n    This->mapping = NULL;\n    This->typelib_base = NULL;\n\n    This->file = CreateFileW(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0);\n    if (INVALID_HANDLE_VALUE != This->file)\n    {\n        This->mapping = CreateFileMappingW(This->file, NULL, PAGE_READONLY | SEC_COMMIT, 0, 0, NULL);\n        if (This->mapping)\n        {\n            This->typelib_base = MapViewOfFile(This->mapping, FILE_MAP_READ, 0, 0, 0);\n            if(This->typelib_base)\n            {\n                /* retrieve file size */\n                *pdwTLBLength = GetFileSize(This->file, NULL);\n                *ppBase = This->typelib_base;\n                *ppFile = &This->IUnknown_iface;\n                return S_OK;\n            }\n        }\n    }\n\n    IUnknown_Release(&This->IUnknown_iface);\n    return TYPE_E_CANTLOADLIBRARY;\n}\n\nstatic HRESULT TLB_FileMoniker_Open(LPCWSTR path, ITypeLib2 **ppTypeLib)\n{\n    LPBC bindctx;\n    HRESULT ret = TYPE_E_CANTLOADLIBRARY;\n    if(CreateBindCtx(0, &bindctx) == S_OK)\n    {\n        ULONG eaten;\n        LPMONIKER moniker;\n        if(MkParseDisplayName(bindctx, (LPOLESTR)path, &eaten, &moniker) == S_OK)\n        {\n            // XXX: VB4 VBX wrapper only returns a ITypeLib, should be safe because LoadTypeLib returns ITypeLib not ITypeLib2\n            if(moniker->lpVtbl->BindToObject(moniker, bindctx, NULL, &IID_ITypeLib, (void **)ppTypeLib) == S_OK)\n                ret = S_OK;\n            moniker->lpVtbl->Release(moniker);\n        }\n        bindctx->lpVtbl->Release(bindctx);\n    }\n    return ret;\n}\n\n#include <winternl.h>\ntypedef struct _IO_STATUS_BLOCK {\n    union {\n        NTSTATUS Status;\n        PVOID Pointer;\n    } DUMMYUNIONNAME;\n\n    ULONG_PTR Information;\n} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;\n\nNTSYSAPI NTSTATUS WINAPI NtQueryInformationFile(HANDLE, PIO_STATUS_BLOCK, PVOID, LONG, DWORD);\nNTSYSAPI ULONG NTAPI RtlNtStatusToDosError(NTSTATUS Status);\nBOOL WINAPI callGetFileInformationByHandleEx(HANDLE hFile, LPVOID lpFileInformation, DWORD dwBufferSize)\n{\n    NTSTATUS status;\n    static HMODULE hKernel32;\n    IO_STATUS_BLOCK iosb;\n    static BOOL (WINAPI *pGetFileInformationByHandleEx)(HANDLE, FILE_INFO_BY_HANDLE_CLASS, LPVOID, DWORD);\n    if (!hKernel32)\n    {\n        hKernel32 = LoadLibraryA(\"kernel32\");\n        pGetFileInformationByHandleEx = (BOOL(WINAPI*)(HANDLE, FILE_INFO_BY_HANDLE_CLASS, LPVOID, DWORD))GetProcAddress(hKernel32, \"GetFileInformationByHandleEx\");\n    }\n    if (pGetFileInformationByHandleEx)\n    {\n        return pGetFileInformationByHandleEx(hFile, FileNameInfo, lpFileInformation, dwBufferSize);\n    }\n    status = NtQueryInformationFile(hFile, &iosb, lpFileInformation, dwBufferSize, 9/*FileNameInformation*/);\n    if (FAILED(status))\n    {\n        SetLastError(RtlNtStatusToDosError(status));\n        return FALSE;\n    }\n    return TRUE;\n}\n/****************************************************************************\n *\tTLB_ReadTypeLib\n *\n * find the type of the typelib file and map the typelib resource into\n * the memory\n */\n\n#define SLTG_SIGNATURE 0x47544c53 /* \"SLTG\" */\nstatic HRESULT TLB_ReadTypeLib(LPCWSTR pszFileName, LPWSTR pszPath, UINT cchPath, ITypeLib2 **ppTypeLib)\n{\n    ITypeLibImpl *entry;\n    HRESULT ret;\n    INT index = -1;\n    LPWSTR index_str, file = (LPWSTR)pszFileName;\n    LPVOID pBase = NULL;\n    DWORD dwTLBLength = 0;\n    IUnknown *pFile = NULL;\n    HANDLE h;\n\n    *ppTypeLib = NULL;\n\n    index_str = strrchrW(pszFileName, '\\\\');\n    if(index_str && *++index_str != '\\0')\n    {\n        LPWSTR end_ptr;\n        LONG idx = strtolW(index_str, &end_ptr, 10);\n        if(*end_ptr == '\\0')\n        {\n            int str_len = index_str - pszFileName - 1;\n            index = idx;\n            file = heap_alloc((str_len + 1) * sizeof(WCHAR));\n            memcpy(file, pszFileName, str_len * sizeof(WCHAR));\n            file[str_len] = 0;\n        }\n    }\n\n    if(!SearchPathW(NULL, file, NULL, cchPath, pszPath, NULL))\n    {\n        if(strchrW(file, '\\\\'))\n        {\n            lstrcpyW(pszPath, file);\n        }\n        else\n        {\n            int len = GetSystemDirectoryW(pszPath, cchPath);\n            pszPath[len] = '\\\\';\n            memcpy(pszPath + len + 1, file, (strlenW(file) + 1) * sizeof(WCHAR));\n        }\n    }\n\n    if(file != pszFileName) heap_free(file);\n\n    h = CreateFileW(pszPath, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);\n    if(h != INVALID_HANDLE_VALUE){\n        FILE_NAME_INFORMATION size_info;\n        BOOL br;\n\n        /* GetFileInformationByHandleEx returns the path of the file without\n         * WOW64 redirection */\n        br = callGetFileInformationByHandleEx(h, &size_info, sizeof(size_info));\n        if(br || GetLastError() == ERROR_MORE_DATA){\n            FILE_NAME_INFORMATION *info;\n            DWORD size = sizeof(*info) + size_info.FileNameLength + sizeof(WCHAR);\n\n            info = HeapAlloc(GetProcessHeap(), 0, size);\n\n            br = callGetFileInformationByHandleEx(h, info, size);\n            if(br){\n                info->FileName[info->FileNameLength / sizeof(WCHAR)] = 0;\n                lstrcpynW(pszPath + 2, info->FileName, cchPath - 2);\n            }\n\n            HeapFree(GetProcessHeap(), 0, info);\n        }\n\n        CloseHandle(h);\n    }\n\n    TRACE_(typelib)(\"File %s index %d\\n\", debugstr_w(pszPath), index);\n\n    /* We look the path up in the typelib cache. If found, we just addref it, and return the pointer. */\n    EnterCriticalSection(&cache_section);\n    LIST_FOR_EACH_ENTRY(entry, &tlb_cache, ITypeLibImpl, entry)\n    {\n        if (!strcmpiW(entry->path, pszPath) && entry->index == index)\n        {\n            TRACE(\"cache hit\\n\");\n            *ppTypeLib = &entry->ITypeLib2_iface;\n            ITypeLib2_AddRef(*ppTypeLib);\n            LeaveCriticalSection(&cache_section);\n            return S_OK;\n        }\n    }\n    LeaveCriticalSection(&cache_section);\n\n    /* now actually load and parse the typelib */\n\n    ret = TLB_PEFile_Open(pszPath, index, &pBase, &dwTLBLength, &pFile);\n    if (ret == TYPE_E_CANTLOADLIBRARY)\n        ret = TLB_NEFile_Open(pszPath, index, &pBase, &dwTLBLength, &pFile);\n    if (ret == TYPE_E_CANTLOADLIBRARY)\n        ret = TLB_Mapping_Open(pszPath, &pBase, &dwTLBLength, &pFile);\n    if (SUCCEEDED(ret))\n    {\n        if (dwTLBLength >= 4)\n        {\n            DWORD dwSignature = FromLEDWord(*((DWORD*) pBase));\n            if (dwSignature == MSFT_SIGNATURE)\n                *ppTypeLib = ITypeLib2_Constructor_MSFT(pBase, dwTLBLength);\n            else if (dwSignature == SLTG_SIGNATURE)\n                *ppTypeLib = ITypeLib2_Constructor_SLTG(pBase, dwTLBLength);\n            else\n            {\n                FIXME(\"Header type magic 0x%08x not supported.\\n\",dwSignature);\n                ret = TYPE_E_CANTLOADLIBRARY;\n            }\n        }\n        else\n            ret = TYPE_E_CANTLOADLIBRARY;\n        IUnknown_Release(pFile);\n    }\n    else if (ret == TYPE_E_CANTLOADLIBRARY)\n    {\n        ret = TLB_FileMoniker_Open(pszPath, ppTypeLib);\n        if (ret == S_OK)\n            return S_OK;\n    }\n\n    if(*ppTypeLib) {\n\tITypeLibImpl *impl = impl_from_ITypeLib2(*ppTypeLib);\n\n\tTRACE(\"adding to cache\\n\");\n\timpl->path = heap_alloc((strlenW(pszPath)+1) * sizeof(WCHAR));\n\tlstrcpyW(impl->path, pszPath);\n\t/* We should really canonicalise the path here. */\n        impl->index = index;\n\n        /* FIXME: check if it has added already in the meantime */\n        EnterCriticalSection(&cache_section);\n        list_add_head(&tlb_cache, &impl->entry);\n        LeaveCriticalSection(&cache_section);\n        ret = S_OK;\n    }\n    else\n    {\n        if(ret != E_FAIL)\n            ERR(\"Loading of typelib %s failed with error %d\\n\", debugstr_w(pszFileName), GetLastError());\n\n        ret = TYPE_E_CANTLOADLIBRARY;\n    }\n\n\n    return ret;\n}\n#endif\n\n/*================== ITypeLib(2) Methods ===================================*/\n\nstatic ITypeLibImpl* TypeLibImpl_Constructor(void)\n{\n    ITypeLibImpl* pTypeLibImpl;\n\n    pTypeLibImpl = heap_alloc_zero(sizeof(ITypeLibImpl));\n    if (!pTypeLibImpl) return NULL;\n\n    pTypeLibImpl->ITypeLib2_iface.lpVtbl = &tlbvt;\n    pTypeLibImpl->ITypeComp_iface.lpVtbl = &tlbtcvt;\n    pTypeLibImpl->ICreateTypeLib2_iface.lpVtbl = &CreateTypeLib2Vtbl;\n    pTypeLibImpl->ref = 1;\n\n    list_init(&pTypeLibImpl->implib_list);\n    list_init(&pTypeLibImpl->custdata_list);\n    list_init(&pTypeLibImpl->name_list);\n    list_init(&pTypeLibImpl->string_list);\n    list_init(&pTypeLibImpl->guid_list);\n    list_init(&pTypeLibImpl->ref_list);\n    pTypeLibImpl->dispatch_href = -1;\n\n    return pTypeLibImpl;\n}\n\n#if 1\n/****************************************************************************\n *\tITypeLib2_Constructor_MSFT\n *\n * loading an MSFT typelib from an in-memory image\n */\nstatic ITypeLib2* ITypeLib2_Constructor_MSFT(LPVOID pLib, DWORD dwTLBLength)\n{\n    TLBContext cx;\n    LONG lPSegDir;\n    MSFT_Header tlbHeader;\n    MSFT_SegDir tlbSegDir;\n    ITypeLibImpl * pTypeLibImpl;\n    int i;\n\n    TRACE(\"%p, TLB length = %d\\n\", pLib, dwTLBLength);\n\n    pTypeLibImpl = TypeLibImpl_Constructor();\n    if (!pTypeLibImpl) return NULL;\n\n    /* get pointer to beginning of typelib data */\n    cx.pos = 0;\n    cx.oStart=0;\n    cx.mapping = pLib;\n    cx.pLibInfo = pTypeLibImpl;\n    cx.length = dwTLBLength;\n\n    /* read header */\n    MSFT_ReadLEDWords(&tlbHeader, sizeof(tlbHeader), &cx, 0);\n    TRACE_(typelib)(\"header:\\n\");\n    TRACE_(typelib)(\"\\tmagic1=0x%08x ,magic2=0x%08x\\n\",tlbHeader.magic1,tlbHeader.magic2 );\n    if (tlbHeader.magic1 != MSFT_SIGNATURE) {\n\tFIXME(\"Header type magic 0x%08x not supported.\\n\",tlbHeader.magic1);\n\treturn NULL;\n    }\n    TRACE_(typelib)(\"\\tdispatchpos = 0x%x\\n\", tlbHeader.dispatchpos);\n\n    /* there is a small amount of information here until the next important\n     * part:\n     * the segment directory . Try to calculate the amount of data */\n    lPSegDir = sizeof(tlbHeader) + (tlbHeader.nrtypeinfos)*4 + ((tlbHeader.varflags & HELPDLLFLAG)? 4 :0);\n\n    /* now read the segment directory */\n    TRACE(\"read segment directory (at %d)\\n\",lPSegDir);\n    MSFT_ReadLEDWords(&tlbSegDir, sizeof(tlbSegDir), &cx, lPSegDir);\n    cx.pTblDir = &tlbSegDir;\n\n    /* just check two entries */\n    if ( tlbSegDir.pTypeInfoTab.res0c != 0x0F || tlbSegDir.pImpInfo.res0c != 0x0F)\n    {\n        ERR(\"cannot find the table directory, ptr=0x%x\\n\",lPSegDir);\n\theap_free(pTypeLibImpl);\n\treturn NULL;\n    }\n\n    MSFT_ReadAllNames(&cx);\n    MSFT_ReadAllStrings(&cx);\n    MSFT_ReadAllGuids(&cx);\n\n    /* now fill our internal data */\n    /* TLIBATTR fields */\n    pTypeLibImpl->guid = MSFT_ReadGuid(tlbHeader.posguid, &cx);\n\n    pTypeLibImpl->syskind = tlbHeader.varflags & 0x0f; /* check the mask */\n    pTypeLibImpl->ptr_size = get_ptr_size(pTypeLibImpl->syskind);\n    pTypeLibImpl->ver_major = LOWORD(tlbHeader.version);\n    pTypeLibImpl->ver_minor = HIWORD(tlbHeader.version);\n    pTypeLibImpl->libflags = ((WORD) tlbHeader.flags & 0xffff) /* check mask */ | LIBFLAG_FHASDISKIMAGE;\n\n    pTypeLibImpl->set_lcid = tlbHeader.lcid2;\n    pTypeLibImpl->lcid = tlbHeader.lcid;\n\n    /* name, eventually add to a hash table */\n    pTypeLibImpl->Name = MSFT_ReadName(&cx, tlbHeader.NameOffset);\n\n    /* help info */\n    pTypeLibImpl->DocString = MSFT_ReadString(&cx, tlbHeader.helpstring);\n    pTypeLibImpl->HelpFile = MSFT_ReadString(&cx, tlbHeader.helpfile);\n\n    if( tlbHeader.varflags & HELPDLLFLAG)\n    {\n            int offset;\n            MSFT_ReadLEDWords(&offset, sizeof(offset), &cx, sizeof(tlbHeader));\n            pTypeLibImpl->HelpStringDll = MSFT_ReadString(&cx, offset);\n    }\n\n    pTypeLibImpl->dwHelpContext = tlbHeader.helpstringcontext;\n\n    /* custom data */\n    if(tlbHeader.CustomDataOffset >= 0)\n    {\n        MSFT_CustData(&cx, tlbHeader.CustomDataOffset, &pTypeLibImpl->custdata_list);\n    }\n\n    /* fill in type descriptions */\n    if(tlbSegDir.pTypdescTab.length > 0)\n    {\n        int i, j, cTD = tlbSegDir.pTypdescTab.length / (2*sizeof(INT));\n        INT16 td[4];\n        pTypeLibImpl->ctTypeDesc = cTD;\n        pTypeLibImpl->pTypeDesc = heap_alloc_zero( cTD * sizeof(TYPEDESC));\n        MSFT_ReadLEWords(td, sizeof(td), &cx, tlbSegDir.pTypdescTab.offset);\n        for(i=0; i<cTD; )\n\t{\n            /* FIXME: add several sanity checks here */\n            pTypeLibImpl->pTypeDesc[i].vt = td[0] & VT_TYPEMASK;\n            if(td[0] == VT_PTR || td[0] == VT_SAFEARRAY)\n\t    {\n\t        /* FIXME: check safearray */\n                if(td[3] < 0)\n                    pTypeLibImpl->pTypeDesc[i].u.lptdesc = &std_typedesc[td[2]];\n                else\n                    pTypeLibImpl->pTypeDesc[i].u.lptdesc = &pTypeLibImpl->pTypeDesc[td[2]/8];\n            }\n\t    else if(td[0] == VT_CARRAY)\n            {\n\t        /* array descr table here */\n\t        pTypeLibImpl->pTypeDesc[i].u.lpadesc = (void *)(INT_PTR)td[2];  /* temp store offset in*/\n            }\n            else if(td[0] == VT_USERDEFINED)\n\t    {\n                pTypeLibImpl->pTypeDesc[i].u.hreftype = MAKELONG(td[2],td[3]);\n            }\n\t    if(++i<cTD) MSFT_ReadLEWords(td, sizeof(td), &cx, DO_NOT_SEEK);\n        }\n\n        /* second time around to fill the array subscript info */\n        for(i=0;i<cTD;i++)\n\t{\n            if(pTypeLibImpl->pTypeDesc[i].vt != VT_CARRAY) continue;\n            if(tlbSegDir.pArrayDescriptions.offset>0)\n\t    {\n                MSFT_ReadLEWords(td, sizeof(td), &cx, tlbSegDir.pArrayDescriptions.offset + (INT_PTR)pTypeLibImpl->pTypeDesc[i].u.lpadesc);\n                pTypeLibImpl->pTypeDesc[i].u.lpadesc = heap_alloc_zero(sizeof(ARRAYDESC)+sizeof(SAFEARRAYBOUND)*(td[3]-1));\n\n                if(td[1]<0)\n                    pTypeLibImpl->pTypeDesc[i].u.lpadesc->tdescElem.vt = td[0] & VT_TYPEMASK;\n                else\n                    pTypeLibImpl->pTypeDesc[i].u.lpadesc->tdescElem = cx.pLibInfo->pTypeDesc[td[0]/(2*sizeof(INT))];\n\n                pTypeLibImpl->pTypeDesc[i].u.lpadesc->cDims = td[2];\n\n                for(j = 0; j<td[2]; j++)\n\t\t{\n                    MSFT_ReadLEDWords(& pTypeLibImpl->pTypeDesc[i].u.lpadesc->rgbounds[j].cElements,\n                                      sizeof(INT), &cx, DO_NOT_SEEK);\n                    MSFT_ReadLEDWords(& pTypeLibImpl->pTypeDesc[i].u.lpadesc->rgbounds[j].lLbound,\n                                      sizeof(INT), &cx, DO_NOT_SEEK);\n                }\n            }\n\t    else\n\t    {\n                pTypeLibImpl->pTypeDesc[i].u.lpadesc = NULL;\n                ERR(\"didn't find array description data\\n\");\n            }\n        }\n    }\n\n    /* imported type libs */\n    if(tlbSegDir.pImpFiles.offset>0)\n    {\n        TLBImpLib *pImpLib;\n        int oGuid, offset = tlbSegDir.pImpFiles.offset;\n        UINT16 size;\n\n        while(offset < tlbSegDir.pImpFiles.offset +tlbSegDir.pImpFiles.length)\n\t{\n            char *name;\n\n            pImpLib = heap_alloc_zero(sizeof(TLBImpLib));\n            pImpLib->offset = offset - tlbSegDir.pImpFiles.offset;\n            MSFT_ReadLEDWords(&oGuid, sizeof(INT), &cx, offset);\n\n            MSFT_ReadLEDWords(&pImpLib->lcid,         sizeof(LCID),   &cx, DO_NOT_SEEK);\n            MSFT_ReadLEWords(&pImpLib->wVersionMajor, sizeof(WORD),   &cx, DO_NOT_SEEK);\n            MSFT_ReadLEWords(&pImpLib->wVersionMinor, sizeof(WORD),   &cx, DO_NOT_SEEK);\n            MSFT_ReadLEWords(& size,                      sizeof(UINT16), &cx, DO_NOT_SEEK);\n\n            size >>= 2;\n            name = heap_alloc_zero(size+1);\n            MSFT_Read(name, size, &cx, DO_NOT_SEEK);\n            pImpLib->name = TLB_MultiByteToBSTR(name);\n            heap_free(name);\n\n            pImpLib->guid = MSFT_ReadGuid(oGuid, &cx);\n            offset = (offset + sizeof(INT) + sizeof(DWORD) + sizeof(LCID) + sizeof(UINT16) + size + 3) & ~3;\n\n            list_add_tail(&pTypeLibImpl->implib_list, &pImpLib->entry);\n        }\n    }\n\n    MSFT_ReadAllRefs(&cx);\n\n    pTypeLibImpl->dispatch_href = tlbHeader.dispatchpos;\n\n    /* type infos */\n    if(tlbHeader.nrtypeinfos >= 0 )\n    {\n        ITypeInfoImpl **ppTI;\n\n        ppTI = pTypeLibImpl->typeinfos = heap_alloc_zero(sizeof(ITypeInfoImpl*) * tlbHeader.nrtypeinfos);\n\n        for(i = 0; i < tlbHeader.nrtypeinfos; i++)\n        {\n            *ppTI = MSFT_DoTypeInfo(&cx, i, pTypeLibImpl);\n\n            ++ppTI;\n            (pTypeLibImpl->TypeInfoCount)++;\n        }\n    }\n\n#ifdef _WIN64\n    if(pTypeLibImpl->syskind == SYS_WIN32){\n        for(i = 0; i < pTypeLibImpl->TypeInfoCount; ++i)\n            TLB_fix_32on64_typeinfo(pTypeLibImpl->typeinfos[i]);\n    }\n#endif\n\n    TRACE(\"(%p)\\n\", pTypeLibImpl);\n    return &pTypeLibImpl->ITypeLib2_iface;\n}\n\n\nstatic BOOL TLB_GUIDFromString(const char *str, GUID *guid)\n{\n  char b[3];\n  int i;\n  short s;\n\n  if(sscanf(str, \"%x-%hx-%hx-%hx\", &guid->Data1, &guid->Data2, &guid->Data3, &s) != 4) {\n    FIXME(\"Can't parse guid %s\\n\", debugstr_guid(guid));\n    return FALSE;\n  }\n\n  guid->Data4[0] = s >> 8;\n  guid->Data4[1] = s & 0xff;\n\n  b[2] = '\\0';\n  for(i = 0; i < 6; i++) {\n    memcpy(b, str + 24 + 2 * i, 2);\n    guid->Data4[i + 2] = strtol(b, NULL, 16);\n  }\n  return TRUE;\n}\n\nstruct bitstream\n{\n    const BYTE *buffer;\n    DWORD       length;\n    WORD        current;\n};\n\nstatic const char *lookup_code(const BYTE *table, DWORD table_size, struct bitstream *bits)\n{\n    const BYTE *p = table;\n\n    while (p < table + table_size && *p == 0x80)\n    {\n        if (p + 2 >= table + table_size) return NULL;\n\n        if (!(bits->current & 0xff))\n        {\n            if (!bits->length) return NULL;\n            bits->current = (*bits->buffer << 8) | 1;\n            bits->buffer++;\n            bits->length--;\n        }\n\n        if (bits->current & 0x8000)\n        {\n            p += 3;\n        }\n        else\n        {\n            p = table + (*(p + 2) | (*(p + 1) << 8));\n        }\n\n        bits->current <<= 1;\n    }\n\n    if (p + 1 < table + table_size && *(p + 1))\n    {\n        /* FIXME: Whats the meaning of *p? */\n        const BYTE *q = p + 1;\n        while (q < table + table_size && *q) q++;\n        return (q < table + table_size) ? (const char *)(p + 1) : NULL;\n    }\n\n    return NULL;\n}\n\nstatic const TLBString *decode_string(const BYTE *table, const char *stream, DWORD stream_length, ITypeLibImpl *lib)\n{\n    DWORD buf_size, table_size;\n    const char *p;\n    struct bitstream bits;\n    BSTR buf;\n    TLBString *tlbstr;\n\n    if (!stream_length) return NULL;\n\n    bits.buffer = (const BYTE *)stream;\n    bits.length = stream_length;\n    bits.current = 0;\n\n    buf_size = *(const WORD *)table;\n    table += sizeof(WORD);\n    table_size = *(const DWORD *)table;\n    table += sizeof(DWORD);\n\n    buf = SysAllocStringLen(NULL, buf_size);\n    buf[0] = 0;\n\n    while ((p = lookup_code(table, table_size, &bits)))\n    {\n        static const WCHAR spaceW[] = { ' ',0 };\n        if (buf[0]) lstrcatW(buf, spaceW);\n        MultiByteToWideChar(CP_ACP, 0, p, -1, buf + lstrlenW(buf), buf_size - lstrlenW(buf));\n    }\n\n    tlbstr = TLB_append_str(&lib->string_list, buf);\n    SysFreeString(buf);\n\n    return tlbstr;\n}\n\nstatic DWORD calc_helpcontext(DWORD base, WORD value, char *pBlk)\n{\n    if (!(value & 1))\n        return *(DWORD *)(pBlk + value);\n    if (value & 2)\n        return base - (value >> 2);\n    return base + (value >> 2);\n}\n\nstatic WORD SLTG_ReadString(const char *ptr, const TLBString **pStr, ITypeLibImpl *lib)\n{\n    WORD bytelen;\n    DWORD len;\n    BSTR tmp_str;\n\n    *pStr = NULL;\n    bytelen = *(const WORD*)ptr;\n    if(bytelen == 0xffff) return 2;\n\n    len = MultiByteToWideChar(CP_ACP, 0, ptr + 2, bytelen, NULL, 0);\n    tmp_str = SysAllocStringLen(NULL, len);\n    if (tmp_str) {\n        MultiByteToWideChar(CP_ACP, 0, ptr + 2, bytelen, tmp_str, len);\n        *pStr = TLB_append_str(&lib->string_list, tmp_str);\n        SysFreeString(tmp_str);\n    }\n    return bytelen + 2;\n}\n\nstatic WORD SLTG_ReadStringA(const char *ptr, char **str)\n{\n    WORD bytelen;\n\n    *str = NULL;\n    bytelen = *(const WORD*)ptr;\n    if(bytelen == 0xffff) return 2;\n    *str = heap_alloc(bytelen + 1);\n    memcpy(*str, ptr + 2, bytelen);\n    (*str)[bytelen] = '\\0';\n    return bytelen + 2;\n}\n\nstatic TLBString *SLTG_ReadName(const char *pNameTable, int offset, ITypeLibImpl *lib)\n{\n    BSTR tmp_str;\n    TLBString *tlbstr;\n\n    LIST_FOR_EACH_ENTRY(tlbstr, &lib->name_list, TLBString, entry) {\n        if (tlbstr->offset == offset)\n            return tlbstr;\n    }\n\n    tmp_str = TLB_MultiByteToBSTR(pNameTable + offset);\n    tlbstr = TLB_append_str(&lib->name_list, tmp_str);\n    SysFreeString(tmp_str);\n\n    return tlbstr;\n}\n\nstatic DWORD SLTG_ReadLibBlk(LPVOID pLibBlk, ITypeLibImpl *pTypeLibImpl)\n{\n    char *ptr = pLibBlk;\n    WORD w;\n\n    if((w = *(WORD*)ptr) != SLTG_LIBBLK_MAGIC) {\n        FIXME(\"libblk magic = %04x\\n\", w);\n\treturn 0;\n    }\n\n    ptr += 6;\n    if((w = *(WORD*)ptr) != 0xffff) {\n        FIXME(\"LibBlk.res06 = %04x. Assumung string and skipping\\n\", w);\n        ptr += w;\n    }\n    ptr += 2;\n\n    ptr += SLTG_ReadString(ptr, &pTypeLibImpl->DocString, pTypeLibImpl);\n\n    ptr += SLTG_ReadString(ptr, &pTypeLibImpl->HelpFile, pTypeLibImpl);\n\n    pTypeLibImpl->dwHelpContext = *(DWORD*)ptr;\n    ptr += 4;\n\n    pTypeLibImpl->syskind = *(WORD*)ptr;\n    pTypeLibImpl->ptr_size = get_ptr_size(pTypeLibImpl->syskind);\n    ptr += 2;\n\n    if(SUBLANGID(*(WORD*)ptr) == SUBLANG_NEUTRAL)\n        pTypeLibImpl->lcid = pTypeLibImpl->set_lcid = MAKELCID(MAKELANGID(PRIMARYLANGID(*(WORD*)ptr),0),0);\n    else\n        pTypeLibImpl->lcid = pTypeLibImpl->set_lcid = 0;\n    ptr += 2;\n\n    ptr += 4; /* skip res12 */\n\n    pTypeLibImpl->libflags = *(WORD*)ptr;\n    ptr += 2;\n\n    pTypeLibImpl->ver_major = *(WORD*)ptr;\n    ptr += 2;\n\n    pTypeLibImpl->ver_minor = *(WORD*)ptr;\n    ptr += 2;\n\n    pTypeLibImpl->guid = TLB_append_guid(&pTypeLibImpl->guid_list, (GUID*)ptr, -2);\n    ptr += sizeof(GUID);\n\n    return ptr - (char*)pLibBlk;\n}\n\n/* stores a mapping between the sltg typeinfo's references and the typelib's HREFTYPEs */\ntypedef struct\n{\n    unsigned int num;\n    HREFTYPE refs[1];\n} sltg_ref_lookup_t;\n\nstatic HRESULT sltg_get_typelib_ref(const sltg_ref_lookup_t *table, DWORD typeinfo_ref,\n\t\t\t\t    HREFTYPE *typelib_ref)\n{\n    if(table && typeinfo_ref < table->num)\n    {\n        *typelib_ref = table->refs[typeinfo_ref];\n        return S_OK;\n    }\n\n    ERR_(typelib)(\"Unable to find reference\\n\");\n    *typelib_ref = -1;\n    return E_FAIL;\n}\n\nstatic WORD *SLTG_DoType(WORD *pType, char *pBlk, TYPEDESC *pTD, const sltg_ref_lookup_t *ref_lookup)\n{\n    BOOL done = FALSE;\n\n    while(!done) {\n        if((*pType & 0xe00) == 0xe00) {\n\t    pTD->vt = VT_PTR;\n\t    pTD->u.lptdesc = heap_alloc_zero(sizeof(TYPEDESC));\n\t    pTD = pTD->u.lptdesc;\n\t}\n\tswitch(*pType & 0x3f) {\n\tcase VT_PTR:\n\t    pTD->vt = VT_PTR;\n\t    pTD->u.lptdesc = heap_alloc_zero(sizeof(TYPEDESC));\n\t    pTD = pTD->u.lptdesc;\n\t    break;\n\n\tcase VT_USERDEFINED:\n\t    pTD->vt = VT_USERDEFINED;\n            sltg_get_typelib_ref(ref_lookup, *(++pType) / 4, &pTD->u.hreftype);\n\t    done = TRUE;\n\t    break;\n\n\tcase VT_CARRAY:\n\t  {\n\t    /* *(pType+1) is offset to a SAFEARRAY, *(pType+2) is type of\n\t       array */\n\n\t    SAFEARRAY *pSA = (SAFEARRAY *)(pBlk + *(++pType));\n\n\t    pTD->vt = VT_CARRAY;\n\t    pTD->u.lpadesc = heap_alloc_zero(sizeof(ARRAYDESC) + (pSA->cDims - 1) * sizeof(SAFEARRAYBOUND));\n\t    pTD->u.lpadesc->cDims = pSA->cDims;\n\t    memcpy(pTD->u.lpadesc->rgbounds, pSA->rgsabound,\n\t\t   pSA->cDims * sizeof(SAFEARRAYBOUND));\n\n\t    pTD = &pTD->u.lpadesc->tdescElem;\n\t    break;\n\t  }\n\n\tcase VT_SAFEARRAY:\n\t  {\n\t    /* FIXME: *(pType+1) gives an offset to SAFEARRAY, is this\n\t       useful? */\n\n\t    pType++;\n\t    pTD->vt = VT_SAFEARRAY;\n\t    pTD->u.lptdesc = heap_alloc_zero(sizeof(TYPEDESC));\n\t    pTD = pTD->u.lptdesc;\n\t    break;\n\t  }\n\tdefault:\n\t    pTD->vt = *pType & 0x3f;\n\t    done = TRUE;\n\t    break;\n\t}\n\tpType++;\n    }\n    return pType;\n}\n\nstatic WORD *SLTG_DoElem(WORD *pType, char *pBlk,\n\t\t\t ELEMDESC *pElem, const sltg_ref_lookup_t *ref_lookup)\n{\n    /* Handle [in/out] first */\n    if((*pType & 0xc000) == 0xc000)\n        pElem->u.paramdesc.wParamFlags = PARAMFLAG_NONE;\n    else if(*pType & 0x8000)\n        pElem->u.paramdesc.wParamFlags = PARAMFLAG_FIN | PARAMFLAG_FOUT;\n    else if(*pType & 0x4000)\n        pElem->u.paramdesc.wParamFlags = PARAMFLAG_FOUT;\n    else\n        pElem->u.paramdesc.wParamFlags = PARAMFLAG_FIN;\n\n    if(*pType & 0x2000)\n        pElem->u.paramdesc.wParamFlags |= PARAMFLAG_FLCID;\n\n    if(*pType & 0x80)\n        pElem->u.paramdesc.wParamFlags |= PARAMFLAG_FRETVAL;\n\n    return SLTG_DoType(pType, pBlk, &pElem->tdesc, ref_lookup);\n}\n\n\nstatic sltg_ref_lookup_t *SLTG_DoRefs(SLTG_RefInfo *pRef, ITypeLibImpl *pTL,\n\t\t\tchar *pNameTable)\n{\n    unsigned int ref;\n    char *name;\n    TLBRefType *ref_type;\n    sltg_ref_lookup_t *table;\n    HREFTYPE typelib_ref;\n\n    if(pRef->magic != SLTG_REF_MAGIC) {\n        FIXME(\"Ref magic = %x\\n\", pRef->magic);\n\treturn NULL;\n    }\n    name = ( (char*)pRef->names + pRef->number);\n\n    table = heap_alloc(sizeof(*table) + ((pRef->number >> 3) - 1) * sizeof(table->refs[0]));\n    table->num = pRef->number >> 3;\n\n    /* FIXME should scan the existing list and reuse matching refs added by previous typeinfos */\n\n    /* We don't want the first href to be 0 */\n    typelib_ref = (list_count(&pTL->ref_list) + 1) << 2;\n\n    for(ref = 0; ref < pRef->number >> 3; ref++) {\n        char *refname;\n\tunsigned int lib_offs, type_num;\n\n\tref_type = heap_alloc_zero(sizeof(TLBRefType));\n\n\tname += SLTG_ReadStringA(name, &refname);\n\tif(sscanf(refname, \"*\\\\R%x*#%x\", &lib_offs, &type_num) != 2)\n\t    FIXME_(typelib)(\"Can't sscanf ref\\n\");\n\tif(lib_offs != 0xffff) {\n\t    TLBImpLib *import;\n\n            LIST_FOR_EACH_ENTRY(import, &pTL->implib_list, TLBImpLib, entry)\n                if(import->offset == lib_offs)\n                    break;\n\n            if(&import->entry == &pTL->implib_list) {\n\t        char fname[MAX_PATH+1];\n\t\tint len;\n                GUID tmpguid;\n\n\t\timport = heap_alloc_zero(sizeof(*import));\n\t\timport->offset = lib_offs;\n\t\tTLB_GUIDFromString( pNameTable + lib_offs + 4, &tmpguid);\n                import->guid = TLB_append_guid(&pTL->guid_list, &tmpguid, 2);\n\t\tif(sscanf(pNameTable + lib_offs + 40, \"}#%hd.%hd#%x#%s\",\n\t\t\t  &import->wVersionMajor,\n\t\t\t  &import->wVersionMinor,\n\t\t\t  &import->lcid, fname) != 4) {\n\t\t  FIXME_(typelib)(\"can't sscanf ref %s\\n\",\n\t\t\tpNameTable + lib_offs + 40);\n\t\t}\n\t\tlen = strlen(fname);\n\t\tif(fname[len-1] != '#')\n\t\t    FIXME(\"fname = %s\\n\", fname);\n\t\tfname[len-1] = '\\0';\n\t\timport->name = TLB_MultiByteToBSTR(fname);\n\t\tlist_add_tail(&pTL->implib_list, &import->entry);\n\t    }\n\t    ref_type->pImpTLInfo = import;\n\n            /* Store a reference to IDispatch */\n            if(pTL->dispatch_href == -1 && IsEqualGUID(&import->guid->guid, &IID_StdOle) && type_num == 4)\n                pTL->dispatch_href = typelib_ref;\n\n\t} else { /* internal ref */\n\t  ref_type->pImpTLInfo = TLB_REF_INTERNAL;\n\t}\n\tref_type->reference = typelib_ref;\n\tref_type->index = type_num;\n\n\theap_free(refname);\n        list_add_tail(&pTL->ref_list, &ref_type->entry);\n\n        table->refs[ref] = typelib_ref;\n        typelib_ref += 4;\n    }\n    if((BYTE)*name != SLTG_REF_MAGIC)\n      FIXME_(typelib)(\"End of ref block magic = %x\\n\", *name);\n    dump_TLBRefType(pTL);\n    return table;\n}\n\nstatic char *SLTG_DoImpls(char *pBlk, ITypeInfoImpl *pTI,\n\t\t\t  BOOL OneOnly, const sltg_ref_lookup_t *ref_lookup, int startidx)\n{\n    SLTG_ImplInfo *info;\n    TLBImplType *pImplType;\n    /* I don't really get this structure, usually it's 0x16 bytes\n       long, but iuser.tlb contains some that are 0x18 bytes long.\n       That's ok because we can use the next ptr to jump to the next\n       one. But how do we know the length of the last one?  The WORD\n       at offs 0x8 might be the clue.  For now I'm just assuming that\n       the last one is the regular 0x16 bytes. */\n\n    info = (SLTG_ImplInfo*)pBlk;\n    while(1){\n        pTI->typeattr.cImplTypes++;\n        if(info->next == 0xffff)\n            break;\n        info = (SLTG_ImplInfo*)(pBlk + info->next);\n    }\n\n    info = (SLTG_ImplInfo*)pBlk;\n    pTI->impltypes = TLBImplType_Alloc(pTI->typeattr.cImplTypes);\n    pImplType = pTI->impltypes;\n    while(1) {\n\tsltg_get_typelib_ref(ref_lookup, info->ref - startidx, &pImplType->hRef);\n\tpImplType->implflags = info->impltypeflags;\n\t++pImplType;\n\n\tif(info->next == 0xffff)\n\t    break;\n\tif(OneOnly)\n\t    FIXME_(typelib)(\"Interface inheriting more than one interface\\n\");\n\tinfo = (SLTG_ImplInfo*)(pBlk + info->next);\n    }\n    info++; /* see comment at top of function */\n    return (char*)info;\n}\n\nstatic void SLTG_DoVars(char *pBlk, char *pFirstItem, ITypeInfoImpl *pTI, unsigned short cVars,\n\t\t\tconst char *pNameTable, const sltg_ref_lookup_t *ref_lookup, const BYTE *hlp_strings, DWORD helpbase)\n{\n  TLBVarDesc *pVarDesc;\n  const TLBString *prevName = NULL;\n  SLTG_Variable *pItem;\n  unsigned short i;\n  WORD *pType;\n\n  pVarDesc = pTI->vardescs = TLBVarDesc_Alloc(cVars);\n\n  for(pItem = (SLTG_Variable *)pFirstItem, i = 0; i < cVars;\n      pItem = (SLTG_Variable *)(pBlk + pItem->next), i++, ++pVarDesc) {\n\n      pVarDesc->vardesc.memid = pItem->memid;\n\n      if (pItem->magic != SLTG_VAR_MAGIC &&\n          pItem->magic != SLTG_VAR_WITH_FLAGS_MAGIC &&\n          pItem->magic != SLTG_VAR_WITH_HELPFILE) {\n\t  FIXME_(typelib)(\"var magic = %02x\\n\", pItem->magic);\n          return;\n      }\n\n      if (pItem->name == 0xfffe)\n        pVarDesc->Name = prevName;\n      else\n        pVarDesc->Name = SLTG_ReadName(pNameTable, pItem->name, pTI->pTypeLib);\n\n      TRACE_(typelib)(\"name: %s\\n\", debugstr_w(TLB_get_bstr(pVarDesc->Name)));\n      TRACE_(typelib)(\"byte_offs = 0x%x\\n\", pItem->byte_offs);\n      TRACE_(typelib)(\"memid = 0x%x\\n\", pItem->memid);\n\n      if (pItem->helpstring != 0xffff)\n      {\n          pVarDesc->HelpString = decode_string(hlp_strings, pBlk + pItem->helpstring, pNameTable - pBlk, pTI->pTypeLib);\n          TRACE_(typelib)(\"helpstring = %s\\n\", debugstr_w(pVarDesc->HelpString->str));\n      }\n\n      if (pItem->helpcontext != 0xfffe)\n      {\n          pVarDesc->HelpContext = calc_helpcontext(helpbase, pItem->helpcontext, pBlk);\n          TRACE_(typelib)(\"helpcontext = 0x%x\\n\", pVarDesc->HelpContext);\n      }\n\n      if ((pItem->magic == SLTG_VAR_WITH_HELPFILE) && (pItem->helpfile != 0xffff))\n      {\n          pVarDesc->HelpFile = decode_string(hlp_strings, pBlk + pItem->helpfile, pNameTable - pBlk, pTI->pTypeLib);\n          TRACE_(typelib)(\"helpfile = %s\\n\", debugstr_w(pVarDesc->HelpFile->str));\n      }\n\n      if(pItem->flags & 0x02)\n\t  pType = &pItem->type;\n      else\n\t  pType = (WORD*)(pBlk + pItem->type);\n\n      if (pItem->flags & ~0xda)\n        FIXME_(typelib)(\"unhandled flags = %02x\\n\", pItem->flags & ~0xda);\n\n      SLTG_DoElem(pType, pBlk,\n\t\t  &pVarDesc->vardesc.elemdescVar, ref_lookup);\n\n      if (TRACE_ON(typelib)) {\n          char buf[300];\n          dump_TypeDesc(&pVarDesc->vardesc.elemdescVar.tdesc, buf);\n          TRACE_(typelib)(\"elemdescVar: %s\\n\", buf);\n      }\n\n      if (pItem->flags & 0x40) {\n        TRACE_(typelib)(\"VAR_DISPATCH\\n\");\n        pVarDesc->vardesc.varkind = VAR_DISPATCH;\n      }\n      else if (pItem->flags & 0x10) {\n        TRACE_(typelib)(\"VAR_CONST\\n\");\n        pVarDesc->vardesc.varkind = VAR_CONST;\n        pVarDesc->vardesc.u.lpvarValue = heap_alloc(sizeof(VARIANT));\n        V_VT(pVarDesc->vardesc.u.lpvarValue) = pVarDesc->vardesc.elemdescVar.tdesc.vt;\n        if (pItem->flags & 0x08)\n          V_INT(pVarDesc->vardesc.u.lpvarValue) = pItem->byte_offs;\n        else {\n          switch (pVarDesc->vardesc.elemdescVar.tdesc.vt)\n          {\n            case VT_LPSTR:\n            case VT_LPWSTR:\n            case VT_BSTR:\n            {\n              WORD len = *(WORD *)(pBlk + pItem->byte_offs);\n              BSTR str;\n              TRACE_(typelib)(\"len = %u\\n\", len);\n              if (len == 0xffff) {\n                str = NULL;\n              } else {\n                INT alloc_len = MultiByteToWideChar(CP_ACP, 0, pBlk + pItem->byte_offs + 2, len, NULL, 0);\n                str = SysAllocStringLen(NULL, alloc_len);\n                MultiByteToWideChar(CP_ACP, 0, pBlk + pItem->byte_offs + 2, len, str, alloc_len);\n              }\n              V_VT(pVarDesc->vardesc.u.lpvarValue) = VT_BSTR;\n              V_BSTR(pVarDesc->vardesc.u.lpvarValue) = str;\n              break;\n            }\n            case VT_I2:\n            case VT_UI2:\n            case VT_I4:\n            case VT_UI4:\n            case VT_INT:\n            case VT_UINT:\n              V_INT(pVarDesc->vardesc.u.lpvarValue) =\n                *(INT*)(pBlk + pItem->byte_offs);\n              break;\n            default:\n              FIXME_(typelib)(\"VAR_CONST unimplemented for type %d\\n\", pVarDesc->vardesc.elemdescVar.tdesc.vt);\n          }\n        }\n      }\n      else {\n        TRACE_(typelib)(\"VAR_PERINSTANCE\\n\");\n        pVarDesc->vardesc.u.oInst = pItem->byte_offs;\n        pVarDesc->vardesc.varkind = VAR_PERINSTANCE;\n      }\n\n      if (pItem->magic == SLTG_VAR_WITH_FLAGS_MAGIC)\n        pVarDesc->vardesc.wVarFlags = pItem->varflags;\n\n      if (pItem->flags & 0x80)\n        pVarDesc->vardesc.wVarFlags |= VARFLAG_FREADONLY;\n\n      prevName = pVarDesc->Name;\n  }\n  pTI->typeattr.cVars = cVars;\n}\n\nstatic void SLTG_DoFuncs(char *pBlk, char *pFirstItem, ITypeInfoImpl *pTI,\n\t\t\t unsigned short cFuncs, char *pNameTable, const sltg_ref_lookup_t *ref_lookup,\n\t\t\t const BYTE *hlp_strings, DWORD helpbase)\n{\n    SLTG_Function *pFunc;\n    unsigned short i;\n    TLBFuncDesc *pFuncDesc;\n\n    pTI->funcdescs = TLBFuncDesc_Alloc(cFuncs);\n\n    pFuncDesc = pTI->funcdescs;\n    for(pFunc = (SLTG_Function*)pFirstItem, i = 0; i < cFuncs && pFunc != (SLTG_Function*)0xFFFF;\n\tpFunc = (SLTG_Function*)(pBlk + pFunc->next), i++, ++pFuncDesc) {\n\n        int param;\n\tWORD *pType, *pArg;\n\n        switch (pFunc->magic & ~(SLTG_FUNCTION_FLAGS_PRESENT | SLTG_FUNCTION_HELPFILE_PRESENT)) {\n        case SLTG_FUNCTION_MAGIC:\n            pFuncDesc->funcdesc.funckind = FUNC_PUREVIRTUAL;\n            break;\n        case SLTG_DISPATCH_FUNCTION_MAGIC:\n            pFuncDesc->funcdesc.funckind = FUNC_DISPATCH;\n            break;\n        case SLTG_STATIC_FUNCTION_MAGIC:\n            pFuncDesc->funcdesc.funckind = FUNC_STATIC;\n            break;\n        default:\n\t    FIXME(\"unimplemented func magic = %02x\\n\", pFunc->magic & ~(SLTG_FUNCTION_FLAGS_PRESENT | SLTG_FUNCTION_HELPFILE_PRESENT));\n\t    continue;\n\t}\n\tpFuncDesc->Name = SLTG_ReadName(pNameTable, pFunc->name, pTI->pTypeLib);\n\n\tpFuncDesc->funcdesc.memid = pFunc->dispid;\n\tpFuncDesc->funcdesc.invkind = pFunc->inv >> 4;\n\tpFuncDesc->funcdesc.callconv = pFunc->nacc & 0x7;\n\tpFuncDesc->funcdesc.cParams = pFunc->nacc >> 3;\n\tpFuncDesc->funcdesc.cParamsOpt = (pFunc->retnextopt & 0x7e) >> 1;\n\tpFuncDesc->funcdesc.oVft = (pFunc->vtblpos & ~1) * sizeof(void *) / pTI->pTypeLib->ptr_size;\n\tif (pFunc->helpstring != 0xffff)\n\t\tpFuncDesc->HelpString = decode_string(hlp_strings, pBlk + pFunc->helpstring, pNameTable - pBlk, pTI->pTypeLib);\n\n\tif(pFunc->magic & SLTG_FUNCTION_FLAGS_PRESENT)\n\t\tpFuncDesc->funcdesc.wFuncFlags = pFunc->funcflags;\n\tif (pFunc->inv & 0x08)\n\t{\n\t\tpFuncDesc->funcdesc.wFuncFlags |= FUNCFLAG_FRESTRICTED;\n\t}\n\n\tif ((pFunc->magic & SLTG_FUNCTION_HELPFILE_PRESENT) && (pFunc->helpfile != 0xffff))\n\t\tpFuncDesc->HelpFile = decode_string(hlp_strings, pBlk + pFunc->helpfile, pNameTable - pBlk, pTI->pTypeLib);\n\n\tif (pFunc->helpcontext != 0xfffe)\n\t\tpFuncDesc->helpcontext = calc_helpcontext(helpbase, pFunc->helpcontext, pBlk);\n\n\tif(pFunc->retnextopt & 0x80)\n\t    pType = &pFunc->rettype;\n\telse\n\t    pType = (WORD*)(pBlk + pFunc->rettype);\n\n\tSLTG_DoElem(pType, pBlk, &pFuncDesc->funcdesc.elemdescFunc, ref_lookup);\n\n\tpFuncDesc->funcdesc.lprgelemdescParam =\n\t  heap_alloc_zero(pFuncDesc->funcdesc.cParams * sizeof(ELEMDESC));\n\tpFuncDesc->pParamDesc = TLBParDesc_Constructor(pFuncDesc->funcdesc.cParams);\n\n\tpArg = (WORD*)(pBlk + pFunc->arg_off);\n\n\tfor(param = 0; param < pFuncDesc->funcdesc.cParams; param++) {\n\t    char *paramName = pNameTable + *pArg;\n\t    BOOL HaveOffs;\n\t    /* If arg type follows then paramName points to the 2nd\n\t       letter of the name, else the next WORD is an offset to\n\t       the arg type and paramName points to the first letter.\n\t       So let's take one char off paramName and see if we're\n\t       pointing at an alpha-numeric char.  However if *pArg is\n\t       0xffff or 0xfffe then the param has no name, the former\n\t       meaning that the next WORD is the type, the latter\n\t       meaning that the next WORD is an offset to the type. */\n\n\t    HaveOffs = FALSE;\n\t    if(*pArg == 0xffff)\n\t        paramName = NULL;\n\t    else if(*pArg == 0xfffe) {\n\t        paramName = NULL;\n\t\tHaveOffs = TRUE;\n\t    }\n\t    else if(paramName[-1] && !isalnum(paramName[-1]) && (paramName[-1] != '_'))\n\t        HaveOffs = TRUE;\n\n\t    pArg++;\n\n\t    if(HaveOffs) { /* the next word is an offset to type */\n\t        pType = (WORD*)(pBlk + *pArg);\n\t\tSLTG_DoElem(pType, pBlk,\n\t\t\t    &pFuncDesc->funcdesc.lprgelemdescParam[param], ref_lookup);\n\t\tpArg++;\n\t    } else {\n\t\tif(paramName)\n\t\t  paramName--;\n\t\tpArg = SLTG_DoElem(pArg, pBlk,\n                                   &pFuncDesc->funcdesc.lprgelemdescParam[param], ref_lookup);\n\t    }\n\n\t    /* Are we an optional param ? */\n\t    if(pFuncDesc->funcdesc.cParams - param <=\n\t       pFuncDesc->funcdesc.cParamsOpt)\n\t      pFuncDesc->funcdesc.lprgelemdescParam[param].u.paramdesc.wParamFlags |= PARAMFLAG_FOPT;\n\n\t    if(paramName) {\n\t        pFuncDesc->pParamDesc[param].Name = SLTG_ReadName(pNameTable,\n\t                paramName - pNameTable, pTI->pTypeLib);\n\t    } else {\n\t        pFuncDesc->pParamDesc[param].Name = pFuncDesc->Name;\n\t    }\n\t}\n    }\n    pTI->typeattr.cFuncs = cFuncs;\n}\n\nstatic void SLTG_ProcessCoClass(char *pBlk, ITypeInfoImpl *pTI,\n\t\t\t\tchar *pNameTable, SLTG_TypeInfoHeader *pTIHeader,\n\t\t\t\tSLTG_TypeInfoTail *pTITail)\n{\n    char *pFirstItem;\n    sltg_ref_lookup_t *ref_lookup = NULL;\n\n    if(pTIHeader->href_table != 0xffffffff) {\n        ref_lookup = SLTG_DoRefs((SLTG_RefInfo*)((char *)pTIHeader + pTIHeader->href_table), pTI->pTypeLib,\n\t\t    pNameTable);\n    }\n\n    pFirstItem = pBlk;\n\n    if(*(WORD*)pFirstItem == SLTG_IMPL_MAGIC) {\n        SLTG_DoImpls(pFirstItem, pTI, FALSE, ref_lookup, 0);\n    }\n    heap_free(ref_lookup);\n}\n\n\nstatic void SLTG_ProcessInterface(char *pBlk, ITypeInfoImpl *pTI,\n\t\t\t\t  char *pNameTable, SLTG_TypeInfoHeader *pTIHeader,\n\t\t\t\t  const SLTG_TypeInfoTail *pTITail, const BYTE *hlp_strings)\n{\n    char *pFirstItem;\n    sltg_ref_lookup_t *ref_lookup = NULL;\n\n    if(pTIHeader->href_table != 0xffffffff) {\n        ref_lookup = SLTG_DoRefs((SLTG_RefInfo*)((char *)pTIHeader + pTIHeader->href_table), pTI->pTypeLib,\n\t\t    pNameTable);\n    }\n\n    pFirstItem = pBlk;\n\n    if(*(WORD*)pFirstItem == SLTG_IMPL_MAGIC) {\n        SLTG_DoImpls(pFirstItem, pTI, TRUE, ref_lookup, 0);\n    }\n\n    if (pTITail->funcs_off != 0xffff)\n        SLTG_DoFuncs(pBlk, pBlk + pTITail->funcs_off, pTI, pTITail->cFuncs, pNameTable, ref_lookup, hlp_strings, pTITail->helpctxtbase);\n\n    heap_free(ref_lookup);\n\n    if (TRACE_ON(typelib))\n        dump_TLBFuncDesc(pTI->funcdescs, pTI->typeattr.cFuncs);\n}\n\nstatic void SLTG_ProcessRecord(char *pBlk, ITypeInfoImpl *pTI,\n\t\t\t       const char *pNameTable, SLTG_TypeInfoHeader *pTIHeader,\n\t\t\t       const SLTG_TypeInfoTail *pTITail, const BYTE *hlp_strings)\n{\n  SLTG_DoVars(pBlk, pBlk + pTITail->vars_off, pTI, pTITail->cVars, pNameTable, NULL, hlp_strings, pTITail->helpctxtbase);\n}\n\nstatic void SLTG_ProcessAlias(char *pBlk, ITypeInfoImpl *pTI,\n\t\t\t      char *pNameTable, SLTG_TypeInfoHeader *pTIHeader,\n\t\t\t      const SLTG_TypeInfoTail *pTITail)\n{\n  WORD *pType;\n  sltg_ref_lookup_t *ref_lookup = NULL;\n\n  if (pTITail->simple_alias) {\n      /* if simple alias, no more processing required */\n      pTI->tdescAlias = heap_alloc_zero(sizeof(TYPEDESC));\n      pTI->tdescAlias->vt = pTITail->tdescalias_vt;\n      return;\n  }\n\n  if(pTIHeader->href_table != 0xffffffff) {\n      ref_lookup = SLTG_DoRefs((SLTG_RefInfo*)((char *)pTIHeader + pTIHeader->href_table), pTI->pTypeLib,\n\t\t  pNameTable);\n  }\n\n  /* otherwise it is an offset to a type */\n  pType = (WORD *)(pBlk + pTITail->tdescalias_vt);\n\n  pTI->tdescAlias = heap_alloc(sizeof(TYPEDESC));\n  SLTG_DoType(pType, pBlk, pTI->tdescAlias, ref_lookup);\n\n  heap_free(ref_lookup);\n}\n\nstatic void SLTG_ProcessDispatch(char *pBlk, ITypeInfoImpl *pTI,\n\t\t\t\t char *pNameTable, SLTG_TypeInfoHeader *pTIHeader,\n\t\t\t\t const SLTG_TypeInfoTail *pTITail, const BYTE *hlp_strings)\n{\n  sltg_ref_lookup_t *ref_lookup = NULL;\n  if (pTIHeader->href_table != 0xffffffff)\n      ref_lookup = SLTG_DoRefs((SLTG_RefInfo*)((char *)pTIHeader + pTIHeader->href_table), pTI->pTypeLib,\n                                  pNameTable);\n\n  if (pTITail->vars_off != 0xffff)\n    SLTG_DoVars(pBlk, pBlk + pTITail->vars_off, pTI, pTITail->cVars, pNameTable, ref_lookup, hlp_strings, pTITail->helpctxtbase);\n\n  if (pTITail->funcs_off != 0xffff)\n    SLTG_DoFuncs(pBlk, pBlk + pTITail->funcs_off, pTI, pTITail->cFuncs, pNameTable, ref_lookup, hlp_strings, pTITail->helpctxtbase);\n\n  if (pTITail->impls_off != 0xffff)\n    SLTG_DoImpls(pBlk + pTITail->impls_off, pTI, FALSE, ref_lookup, pTITail->cVars);\n\n  /* this is necessary to cope with MSFT typelibs that set cFuncs to the number\n   * of dispinterface functions including the IDispatch ones, so\n   * ITypeInfo::GetFuncDesc takes the real value for cFuncs from cbSizeVft */\n  pTI->typeattr.cbSizeVft = pTI->typeattr.cFuncs * pTI->pTypeLib->ptr_size;\n\n  heap_free(ref_lookup);\n  if (TRACE_ON(typelib))\n      dump_TLBFuncDesc(pTI->funcdescs, pTI->typeattr.cFuncs);\n}\n\nstatic void SLTG_ProcessEnum(char *pBlk, ITypeInfoImpl *pTI,\n\t\t\t     const char *pNameTable, SLTG_TypeInfoHeader *pTIHeader,\n\t\t\t     const SLTG_TypeInfoTail *pTITail, const BYTE *hlp_strings)\n{\n  SLTG_DoVars(pBlk, pBlk + pTITail->vars_off, pTI, pTITail->cVars, pNameTable, NULL, hlp_strings, pTITail->helpctxtbase);\n}\n\nstatic void SLTG_DoModuleEntry(char *pNameTable, ITypeInfoImpl *pTI, int count, int size, char *base)\n{\n    SLTG_ModuleEntryInfo *pEntry = (SLTG_ModuleEntryInfo*)(base + size);\n    TLBString *dllname = NULL;\n    int i = 0;\n    for (i = count - 1; i >= 0; i--)\n    {\n        TLBString *name = SLTG_ReadName(pNameTable, (pEntry->module) & -2 /* ? */, pTI->pTypeLib);\n        if (!dllname)\n        {\n            dllname = name;\n        }\n        else if (wcscmp(name->str, dllname->str))\n        {\n            FIXME(\"%s != %s\\n\", debugstr_w(name->str), debugstr_w(dllname->str));\n        }\n        if (pEntry->is_ord)\n        {\n            TRACE_(typelib)(\"rel off = %04x, module=%s, entry=%d, %04x\\n\", (size_t)pEntry - (size_t)base, debugstr_w(name->str), pEntry->ord_or_entry_offs, pEntry->prev_offset);\n            pTI->funcdescs[i].Entry = (TLBString*)pEntry->ord_or_entry_offs;\n        }\n        else\n        {\n            char *n = base + pEntry->ord_or_entry_offs;\n            TRACE_(typelib)(\"rel off = %04x, module=%s, entry=%s, %04x\\n\", (size_t)pEntry - (size_t)base, debugstr_w(name->str), n, pEntry->prev_offset);\n            pTI->funcdescs[i].Entry = SLTG_ReadName(pNameTable, n - pNameTable, pTI->pTypeLib);\n        }\n        if (pEntry->prev_offset == 0xffff)\n            break;\n        pEntry = (SLTG_ModuleEntryInfo*)(base + pEntry->prev_offset);\n    }\n    if (dllname)\n    {\n        pTI->DllName = dllname;\n    }\n}\n\nstatic void SLTG_ProcessModule(char *pBlk, ITypeInfoImpl *pTI,\n\t\t\t       char *pNameTable, SLTG_TypeInfoHeader *pTIHeader,\n\t\t\t       const SLTG_TypeInfoTail *pTITail, const BYTE *hlp_strings)\n{\n  sltg_ref_lookup_t *ref_lookup = NULL;\n  if (pTIHeader->href_table != 0xffffffff)\n      ref_lookup = SLTG_DoRefs((SLTG_RefInfo*)((char *)pTIHeader + pTIHeader->href_table), pTI->pTypeLib,\n                                  pNameTable);\n\n  if (pTITail->vars_off != 0xffff)\n    SLTG_DoVars(pBlk, pBlk + pTITail->vars_off, pTI, pTITail->cVars, pNameTable, ref_lookup, hlp_strings, pTITail->helpctxtbase);\n\n  if (pTITail->funcs_off != 0xffff)\n    SLTG_DoFuncs(pBlk, pBlk + pTITail->funcs_off, pTI, pTITail->cFuncs, pNameTable, ref_lookup, hlp_strings, pTITail->helpctxtbase);\n\n  if (pTITail->cFuncs != 0)\n    SLTG_DoModuleEntry(pNameTable, pTI, pTITail->cFuncs, pTITail->module_entry_info_size, (char*)pTITail + pTITail->module_entry_info_off - 2);\n\n  heap_free(ref_lookup);\n  if (TRACE_ON(typelib))\n    dump_TypeInfo(pTI);\n}\n\n/* Because SLTG_OtherTypeInfo is such a painful struct, we make a more\n   manageable copy of it into this */\ntypedef struct {\n  char *index_name;\n  char *other_name;\n  WORD res1a;\n  WORD name_offs;\n  WORD hlpstr_len;\n  char *extra;\n  WORD res20;\n  DWORD helpcontext;\n  WORD res26;\n  GUID uuid;\n  WORD typekind;\n} SLTG_InternalOtherTypeInfo;\n\n/****************************************************************************\n *\tITypeLib2_Constructor_SLTG\n *\n * loading a SLTG typelib from an in-memory image\n */\nstatic ITypeLib2* ITypeLib2_Constructor_SLTG(LPVOID pLib, DWORD dwTLBLength)\n{\n    ITypeLibImpl *pTypeLibImpl;\n    SLTG_Header *pHeader;\n    SLTG_BlkEntry *pBlkEntry;\n    SLTG_Magic *pMagic;\n    SLTG_Index *pIndex;\n    SLTG_Pad9 *pPad9;\n    LPVOID pBlk, pFirstBlk;\n    SLTG_LibBlk *pLibBlk;\n    SLTG_InternalOtherTypeInfo *pOtherTypeInfoBlks;\n    char *pNameTable, *ptr;\n    const BYTE *hlp_strings;\n    int i;\n    DWORD len, order;\n    ITypeInfoImpl **ppTypeInfoImpl;\n\n    TRACE_(typelib)(\"%p, TLB length = %d\\n\", pLib, dwTLBLength);\n\n\n    pTypeLibImpl = TypeLibImpl_Constructor();\n    if (!pTypeLibImpl) return NULL;\n\n    pHeader = pLib;\n\n    TRACE_(typelib)(\"header:\\n\");\n    TRACE_(typelib)(\"\\tmagic=0x%08x, file blocks = %d\\n\", pHeader->SLTG_magic,\n\t  pHeader->nrOfFileBlks );\n    if (pHeader->SLTG_magic != SLTG_SIGNATURE) {\n\tFIXME_(typelib)(\"Header type magic 0x%08x not supported.\\n\",\n\t      pHeader->SLTG_magic);\n\treturn NULL;\n    }\n\n    /* There are pHeader->nrOfFileBlks - 2 TypeInfo records in this typelib */\n    pTypeLibImpl->TypeInfoCount = pHeader->nrOfFileBlks - 2;\n\n    /* This points to pHeader->nrOfFileBlks - 1 of SLTG_BlkEntry */\n    pBlkEntry = (SLTG_BlkEntry*)(pHeader + 1);\n\n    /* Next we have a magic block */\n    pMagic = (SLTG_Magic*)(pBlkEntry + pHeader->nrOfFileBlks - 1);\n\n    /* Let's see if we're still in sync */\n    if(memcmp(pMagic->CompObj_magic, SLTG_COMPOBJ_MAGIC,\n\t      sizeof(SLTG_COMPOBJ_MAGIC))) {\n        FIXME_(typelib)(\"CompObj magic = %s\\n\", pMagic->CompObj_magic);\n\treturn NULL;\n    }\n    if(memcmp(pMagic->dir_magic, SLTG_DIR_MAGIC,\n\t      sizeof(SLTG_DIR_MAGIC))) {\n        FIXME_(typelib)(\"dir magic = %s\\n\", pMagic->dir_magic);\n\treturn NULL;\n    }\n\n    pIndex = (SLTG_Index*)(pMagic+1);\n\n    pPad9 = (SLTG_Pad9*)(pIndex + pTypeLibImpl->TypeInfoCount);\n\n    pFirstBlk = pPad9 + 1;\n\n    /* We'll set up a ptr to the main library block, which is the last one. */\n\n    for(pBlk = pFirstBlk, order = pHeader->first_blk - 1;\n\t  pBlkEntry[order].next != 0;\n\t  order = pBlkEntry[order].next - 1) {\n       pBlk = (char*)pBlk + pBlkEntry[order].len;\n    }\n    pLibBlk = pBlk;\n\n    len = SLTG_ReadLibBlk(pLibBlk, pTypeLibImpl);\n\n    /* Now there are 0x40 bytes of 0xffff with the numbers 0 to TypeInfoCount\n       interspersed */\n\n    len += 0x40;\n\n    /* And now TypeInfoCount of SLTG_OtherTypeInfo */\n    pTypeLibImpl->TypeInfoCount = *(WORD *)((char *)pLibBlk + len);\n    len += sizeof(WORD);\n\n    pOtherTypeInfoBlks = heap_alloc_zero(sizeof(*pOtherTypeInfoBlks) * pTypeLibImpl->TypeInfoCount);\n\n    ptr = (char*)pLibBlk + len;\n\n    for(i = 0; i < pTypeLibImpl->TypeInfoCount; i++) {\n\tWORD w, extra;\n\tlen = 0;\n\n\tw = *(WORD*)ptr;\n\tif(w != 0xffff) {\n\t    len += w;\n\t    pOtherTypeInfoBlks[i].index_name = heap_alloc(w+1);\n\t    memcpy(pOtherTypeInfoBlks[i].index_name, ptr + 2, w);\n\t    pOtherTypeInfoBlks[i].index_name[w] = '\\0';\n\t}\n\tw = *(WORD*)(ptr + 2 + len);\n\tif(w != 0xffff) {\n\t    TRACE_(typelib)(\"\\twith %s\\n\", debugstr_an(ptr + 4 + len, w));\n\t    pOtherTypeInfoBlks[i].other_name = heap_alloc(w+1);\n\t    memcpy(pOtherTypeInfoBlks[i].other_name, ptr + 4 + len, w);\n\t    pOtherTypeInfoBlks[i].other_name[w] = '\\0';\n\t    len += w;\n\t}\n\tpOtherTypeInfoBlks[i].res1a = *(WORD*)(ptr + 4 + len);\n\tpOtherTypeInfoBlks[i].name_offs = *(WORD*)(ptr + 6 + len);\n\textra = pOtherTypeInfoBlks[i].hlpstr_len = *(WORD*)(ptr + 8 + len);\n\tif(extra) {\n\t    pOtherTypeInfoBlks[i].extra = heap_alloc(extra);\n\t    memcpy(pOtherTypeInfoBlks[i].extra, ptr + 10 + len, extra);\n\t    len += extra;\n\t}\n\tpOtherTypeInfoBlks[i].res20 = *(WORD*)(ptr + 10 + len);\n\tpOtherTypeInfoBlks[i].helpcontext = *(DWORD*)(ptr + 12 + len);\n\tpOtherTypeInfoBlks[i].res26 = *(WORD*)(ptr + 16 + len);\n\tmemcpy(&pOtherTypeInfoBlks[i].uuid, ptr + 18 + len, sizeof(GUID));\n\tpOtherTypeInfoBlks[i].typekind = *(WORD*)(ptr + 18 + sizeof(GUID) + len);\n\tlen += sizeof(SLTG_OtherTypeInfo);\n\tptr += len;\n    }\n\n    /* Get the next DWORD */\n    len = *(DWORD*)ptr;\n\n    hlp_strings = (const BYTE *)ptr + sizeof(DWORD);\n    TRACE(\"max help string length %#x, help strings length %#x\\n\",\n        *(WORD *)hlp_strings, *(DWORD *)(hlp_strings + 2));\n\n    /* Now add this to pLibBLk look at what we're pointing at and\n       possibly add 0x20, then add 0x216, sprinkle a bit a magic\n       dust and we should be pointing at the beginning of the name\n       table */\n\n    pNameTable = (char*)pLibBlk + len;\n\n   switch(*(WORD*)pNameTable) {\n   case 0xffff:\n       break;\n   case 0x0200:\n       pNameTable += 0x20;\n       break;\n   default:\n       FIXME_(typelib)(\"pNameTable jump = %x\\n\", *(WORD*)pNameTable);\n       break;\n   }\n\n    pNameTable += 0x216;\n\n    pNameTable += 2;\n\n    TRACE_(typelib)(\"Library name is %s\\n\", pNameTable + pLibBlk->name);\n\n    pTypeLibImpl->Name = SLTG_ReadName(pNameTable, pLibBlk->name, pTypeLibImpl);\n\n\n    /* Hopefully we now have enough ptrs set up to actually read in\n       some TypeInfos.  It's not clear which order to do them in, so\n       I'll just follow the links along the BlkEntry chain and read\n       them in the order in which they are in the file */\n\n    pTypeLibImpl->typeinfos = heap_alloc_zero(pTypeLibImpl->TypeInfoCount * sizeof(ITypeInfoImpl*));\n    ppTypeInfoImpl = pTypeLibImpl->typeinfos;\n\n    for(pBlk = pFirstBlk, order = pHeader->first_blk - 1, i = 0;\n\tpBlkEntry[order].next != 0;\n\torder = pBlkEntry[order].next - 1, i++) {\n\n      SLTG_TypeInfoHeader *pTIHeader;\n      SLTG_TypeInfoTail *pTITail;\n      SLTG_MemberHeader *pMemHeader;\n\n      if(strcmp(pBlkEntry[order].index_string + (char*)pMagic, pOtherTypeInfoBlks[i].index_name)) {\n        FIXME_(typelib)(\"Index strings don't match\\n\");\n        heap_free(pOtherTypeInfoBlks);\n        return NULL;\n      }\n\n      pTIHeader = pBlk;\n      if(pTIHeader->magic != SLTG_TIHEADER_MAGIC) {\n\tFIXME_(typelib)(\"TypeInfoHeader magic = %04x\\n\", pTIHeader->magic);\n       heap_free(pOtherTypeInfoBlks);\n\treturn NULL;\n      }\n      TRACE_(typelib)(\"pTIHeader->res06 = %x, pTIHeader->res0e = %x, \"\n        \"pTIHeader->res16 = %x, pTIHeader->res1e = %x\\n\",\n        pTIHeader->res06, pTIHeader->res0e, pTIHeader->res16, pTIHeader->res1e);\n\n      *ppTypeInfoImpl = ITypeInfoImpl_Constructor();\n      (*ppTypeInfoImpl)->pTypeLib = pTypeLibImpl;\n      (*ppTypeInfoImpl)->index = i;\n      (*ppTypeInfoImpl)->Name = SLTG_ReadName(pNameTable, pOtherTypeInfoBlks[i].name_offs, pTypeLibImpl);\n      (*ppTypeInfoImpl)->dwHelpContext = pOtherTypeInfoBlks[i].helpcontext;\n      (*ppTypeInfoImpl)->DocString = decode_string(hlp_strings, pOtherTypeInfoBlks[i].extra, pOtherTypeInfoBlks[i].hlpstr_len, pTypeLibImpl);\n      (*ppTypeInfoImpl)->guid = TLB_append_guid(&pTypeLibImpl->guid_list, &pOtherTypeInfoBlks[i].uuid, 2);\n      (*ppTypeInfoImpl)->typeattr.typekind = pTIHeader->typekind;\n      (*ppTypeInfoImpl)->typeattr.wMajorVerNum = pTIHeader->major_version;\n      (*ppTypeInfoImpl)->typeattr.wMinorVerNum = pTIHeader->minor_version;\n      (*ppTypeInfoImpl)->typeattr.wTypeFlags =\n\t(pTIHeader->typeflags1 >> 3) | (pTIHeader->typeflags2 << 5);\n\n      /* FIXME */\n      if(pTIHeader->typekind != TKIND_MODULE && (*ppTypeInfoImpl)->typeattr.wTypeFlags & TYPEFLAG_FDUAL)\n\t(*ppTypeInfoImpl)->typeattr.typekind = TKIND_DISPATCH;\n\n      if((pTIHeader->typeflags1 & 7) != 2)\n\tFIXME_(typelib)(\"typeflags1 = %02x\\n\", pTIHeader->typeflags1);\n      if(pTIHeader->typeflags3 != 2)\n\tFIXME_(typelib)(\"typeflags3 = %02x\\n\", pTIHeader->typeflags3);\n\n      TRACE_(typelib)(\"TypeInfo %s of kind %s guid %s typeflags %04x\\n\",\n\t    debugstr_w(TLB_get_bstr((*ppTypeInfoImpl)->Name)),\n\t    typekind_desc[pTIHeader->typekind],\n\t    debugstr_guid(TLB_get_guidref((*ppTypeInfoImpl)->guid)),\n\t    (*ppTypeInfoImpl)->typeattr.wTypeFlags);\n\n      pMemHeader = (SLTG_MemberHeader*)((char *)pBlk + pTIHeader->elem_table);\n\n      pTITail = (SLTG_TypeInfoTail*)((char *)(pMemHeader + 1) + pMemHeader->cbExtra);\n\n      (*ppTypeInfoImpl)->typeattr.cbAlignment = pTITail->cbAlignment;\n      (*ppTypeInfoImpl)->typeattr.cbSizeInstance = pTITail->cbSizeInstance;\n      (*ppTypeInfoImpl)->typeattr.cbSizeVft = pTITail->cbSizeVft;\n\n      switch(pTIHeader->typekind) {\n      case TKIND_ENUM:\n\tSLTG_ProcessEnum((char *)(pMemHeader + 1), *ppTypeInfoImpl, pNameTable,\n                         pTIHeader, pTITail, hlp_strings);\n\tbreak;\n\n      case TKIND_RECORD:\n\tSLTG_ProcessRecord((char *)(pMemHeader + 1), *ppTypeInfoImpl, pNameTable,\n                           pTIHeader, pTITail, hlp_strings);\n\tbreak;\n\n      case TKIND_INTERFACE:\n\tSLTG_ProcessInterface((char *)(pMemHeader + 1), *ppTypeInfoImpl, pNameTable,\n                              pTIHeader, pTITail, hlp_strings);\n\tbreak;\n\n      case TKIND_COCLASS:\n\tSLTG_ProcessCoClass((char *)(pMemHeader + 1), *ppTypeInfoImpl, pNameTable,\n                            pTIHeader, pTITail);\n    {\n        TLBRefType *ref_type, *ref_type_next;\n        LIST_FOR_EACH_ENTRY_SAFE(ref_type, ref_type_next, &(*ppTypeInfoImpl)->pTypeLib->ref_list, TLBRefType, entry)\n        {\n            if (ref_type->index == (*ppTypeInfoImpl)->index)\n            {\n                (*ppTypeInfoImpl)->hreftype = ref_type->reference;\n            }\n        }\n    }\n\tbreak;\n\n      case TKIND_ALIAS:\n\tSLTG_ProcessAlias((char *)(pMemHeader + 1), *ppTypeInfoImpl, pNameTable,\n                          pTIHeader, pTITail);\n\tbreak;\n\n      case TKIND_DISPATCH:\n\tSLTG_ProcessDispatch((char *)(pMemHeader + 1), *ppTypeInfoImpl, pNameTable,\n                             pTIHeader, pTITail, hlp_strings);\n\tbreak;\n\n      case TKIND_MODULE:\n\tSLTG_ProcessModule((char *)(pMemHeader + 1), *ppTypeInfoImpl, pNameTable,\n                           pTIHeader, pTITail, hlp_strings);\n\tbreak;\n\n      default:\n\tFIXME(\"Not processing typekind %d\\n\", pTIHeader->typekind);\n\tbreak;\n\n      }\n\n      /* could get cFuncs, cVars and cImplTypes from here\n\t\t       but we've already set those */\n#define X(x) TRACE_(typelib)(\"tt \"#x\": %x\\n\",pTITail->res##x);\n      X(06);\n      X(16);\n      X(1e);\n      X(24);\n      X(26);\n      X(2a);\n      X(2c);\n      X(2e);\n      X(30);\n      X(32);\n      X(34);\n#undef X\n      ++ppTypeInfoImpl;\n      pBlk = (char*)pBlk + pBlkEntry[order].len;\n    }\n\n    if(i != pTypeLibImpl->TypeInfoCount) {\n      FIXME(\"Somehow processed %d TypeInfos\\n\", i);\n      heap_free(pOtherTypeInfoBlks);\n      return NULL;\n    }\n\n    heap_free(pOtherTypeInfoBlks);\n    return &pTypeLibImpl->ITypeLib2_iface;\n}\n#endif\n\nstatic HRESULT WINAPI ITypeLib2_fnQueryInterface(ITypeLib2 *iface, REFIID riid, void **ppv)\n{\n    ITypeLibImpl *This = impl_from_ITypeLib2(iface);\n\n    TRACE(\"(%p)->(IID: %s)\\n\",This,debugstr_guid(riid));\n\n    if(IsEqualIID(riid, &IID_IUnknown) ||\n       IsEqualIID(riid,&IID_ITypeLib)||\n       IsEqualIID(riid,&IID_ITypeLib2))\n    {\n        *ppv = &This->ITypeLib2_iface;\n    }\n    else if(IsEqualIID(riid, &IID_ICreateTypeLib) ||\n             IsEqualIID(riid, &IID_ICreateTypeLib2))\n    {\n        *ppv = &This->ICreateTypeLib2_iface;\n    }\n    else\n    {\n        *ppv = NULL;\n        TRACE(\"-- Interface: E_NOINTERFACE\\n\");\n        return E_NOINTERFACE;\n    }\n\n    IUnknown_AddRef((IUnknown*)*ppv);\n    return S_OK;\n}\n\nstatic ULONG WINAPI ITypeLib2_fnAddRef( ITypeLib2 *iface)\n{\n    ITypeLibImpl *This = impl_from_ITypeLib2(iface);\n    ULONG ref = InterlockedIncrement(&This->ref);\n\n    TRACE(\"(%p) ref=%u\\n\", This, ref);\n\n    return ref;\n}\n\nstatic ULONG WINAPI ITypeLib2_fnRelease( ITypeLib2 *iface)\n{\n    ITypeLibImpl *This = impl_from_ITypeLib2(iface);\n    ULONG ref = InterlockedDecrement(&This->ref);\n\n    TRACE(\"(%p) ref=%u\\n\",This, ref);\n\n    if (!ref)\n    {\n      TLBImpLib *pImpLib, *pImpLibNext;\n      TLBRefType *ref_type, *ref_type_next;\n      TLBString *tlbstr, *tlbstr_next;\n      TLBGuid *tlbguid, *tlbguid_next;\n      int i;\n\n      /* remove cache entry */\n      if(This->path)\n      {\n          TRACE(\"removing from cache list\\n\");\n          EnterCriticalSection(&cache_section);\n          if(This->entry.next)\n              list_remove(&This->entry);\n          LeaveCriticalSection(&cache_section);\n          heap_free(This->path);\n      }\n      TRACE(\" destroying ITypeLib(%p)\\n\",This);\n\n      LIST_FOR_EACH_ENTRY_SAFE(tlbstr, tlbstr_next, &This->string_list, TLBString, entry) {\n          list_remove(&tlbstr->entry);\n          SysFreeString(tlbstr->str);\n          heap_free(tlbstr);\n      }\n\n      LIST_FOR_EACH_ENTRY_SAFE(tlbstr, tlbstr_next, &This->name_list, TLBString, entry) {\n          list_remove(&tlbstr->entry);\n          SysFreeString(tlbstr->str);\n          heap_free(tlbstr);\n      }\n\n      LIST_FOR_EACH_ENTRY_SAFE(tlbguid, tlbguid_next, &This->guid_list, TLBGuid, entry) {\n          list_remove(&tlbguid->entry);\n          heap_free(tlbguid);\n      }\n\n      TLB_FreeCustData(&This->custdata_list);\n\n      for (i = 0; i < This->ctTypeDesc; i++)\n          if (This->pTypeDesc[i].vt == VT_CARRAY)\n              heap_free(This->pTypeDesc[i].u.lpadesc);\n\n      heap_free(This->pTypeDesc);\n\n      LIST_FOR_EACH_ENTRY_SAFE(pImpLib, pImpLibNext, &This->implib_list, TLBImpLib, entry)\n      {\n          if (pImpLib->pImpTypeLib)\n              ITypeLib2_Release(&pImpLib->pImpTypeLib->ITypeLib2_iface);\n          SysFreeString(pImpLib->name);\n\n          list_remove(&pImpLib->entry);\n          heap_free(pImpLib);\n      }\n\n      LIST_FOR_EACH_ENTRY_SAFE(ref_type, ref_type_next, &This->ref_list, TLBRefType, entry)\n      {\n          list_remove(&ref_type->entry);\n          heap_free(ref_type);\n      }\n\n      for (i = 0; i < This->TypeInfoCount; ++i){\n          heap_free(This->typeinfos[i]->tdescAlias);\n          ITypeInfoImpl_Destroy(This->typeinfos[i]);\n      }\n      heap_free(This->typeinfos);\n      heap_free(This);\n      return 0;\n    }\n\n    return ref;\n}\n\n/* ITypeLib::GetTypeInfoCount\n *\n * Returns the number of type descriptions in the type library\n */\nstatic UINT WINAPI ITypeLib2_fnGetTypeInfoCount( ITypeLib2 *iface)\n{\n    ITypeLibImpl *This = impl_from_ITypeLib2(iface);\n    TRACE(\"(%p)->count is %d\\n\",This, This->TypeInfoCount);\n    return This->TypeInfoCount;\n}\n\n/* ITypeLib::GetTypeInfo\n *\n * retrieves the specified type description in the library.\n */\nstatic HRESULT WINAPI ITypeLib2_fnGetTypeInfo(\n    ITypeLib2 *iface,\n    UINT index,\n    ITypeInfo **ppTInfo)\n{\n    ITypeLibImpl *This = impl_from_ITypeLib2(iface);\n\n    TRACE(\"%p %u %p\\n\", This, index, ppTInfo);\n\n    if(!ppTInfo)\n        return E_INVALIDARG;\n\n    if(index >= This->TypeInfoCount)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    *ppTInfo = (ITypeInfo *)&This->typeinfos[index]->ITypeInfo2_iface;\n    ITypeInfo_AddRef(*ppTInfo);\n\n    return S_OK;\n}\n\n\n/* ITypeLibs::GetTypeInfoType\n *\n * Retrieves the type of a type description.\n */\nstatic HRESULT WINAPI ITypeLib2_fnGetTypeInfoType(\n    ITypeLib2 *iface,\n    UINT index,\n    TYPEKIND *pTKind)\n{\n    ITypeLibImpl *This = impl_from_ITypeLib2(iface);\n\n    TRACE(\"(%p, %d, %p)\\n\", This, index, pTKind);\n\n    if(!pTKind)\n        return E_INVALIDARG;\n\n    if(index >= This->TypeInfoCount)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    *pTKind = This->typeinfos[index]->typeattr.typekind;\n\n    return S_OK;\n}\n\n/* ITypeLib::GetTypeInfoOfGuid\n *\n * Retrieves the type description that corresponds to the specified GUID.\n *\n */\nstatic HRESULT WINAPI ITypeLib2_fnGetTypeInfoOfGuid(\n    ITypeLib2 *iface,\n    REFGUID guid,\n    ITypeInfo **ppTInfo)\n{\n    ITypeLibImpl *This = impl_from_ITypeLib2(iface);\n    int i;\n\n    TRACE(\"%p %s %p\\n\", This, debugstr_guid(guid), ppTInfo);\n\n    for(i = 0; i < This->TypeInfoCount; ++i){\n        if(IsEqualIID(TLB_get_guid_null(This->typeinfos[i]->guid), guid)){\n            *ppTInfo = (ITypeInfo *)&This->typeinfos[i]->ITypeInfo2_iface;\n            ITypeInfo_AddRef(*ppTInfo);\n            return S_OK;\n        }\n    }\n\n    return TYPE_E_ELEMENTNOTFOUND;\n}\n\n/* ITypeLib::GetLibAttr\n *\n * Retrieves the structure that contains the library's attributes.\n *\n */\nstatic HRESULT WINAPI ITypeLib2_fnGetLibAttr(\n\tITypeLib2 *iface,\n\tLPTLIBATTR *attr)\n{\n    ITypeLibImpl *This = impl_from_ITypeLib2(iface);\n\n    TRACE(\"(%p, %p)\\n\", This, attr);\n\n    if (!attr) return E_INVALIDARG;\n\n    *attr = heap_alloc(sizeof(**attr));\n    if (!*attr) return E_OUTOFMEMORY;\n\n    (*attr)->guid = *TLB_get_guid_null(This->guid);\n    (*attr)->lcid = This->set_lcid;\n    (*attr)->syskind = This->syskind;\n    (*attr)->wMajorVerNum = This->ver_major;\n    (*attr)->wMinorVerNum = This->ver_minor;\n    (*attr)->wLibFlags = This->libflags;\n\n    return S_OK;\n}\n\n/* ITypeLib::GetTypeComp\n *\n * Enables a client compiler to bind to a library's types, variables,\n * constants, and global functions.\n *\n */\nstatic HRESULT WINAPI ITypeLib2_fnGetTypeComp(\n\tITypeLib2 *iface,\n\tITypeComp **ppTComp)\n{\n    ITypeLibImpl *This = impl_from_ITypeLib2(iface);\n\n    TRACE(\"(%p)->(%p)\\n\",This,ppTComp);\n    *ppTComp = &This->ITypeComp_iface;\n    ITypeComp_AddRef(*ppTComp);\n\n    return S_OK;\n}\n\n/* ITypeLib::GetDocumentation\n *\n * Retrieves the library's documentation string, the complete Help file name\n * and path, and the context identifier for the library Help topic in the Help\n * file.\n *\n * On a successful return all non-null BSTR pointers will have been set,\n * possibly to NULL.\n */\nstatic HRESULT WINAPI ITypeLib2_fnGetDocumentation(\n    ITypeLib2 *iface,\n    INT index,\n    BSTR *pBstrName,\n    BSTR *pBstrDocString,\n    DWORD *pdwHelpContext,\n    BSTR *pBstrHelpFile)\n{\n    ITypeLibImpl *This = impl_from_ITypeLib2(iface);\n    HRESULT result = E_INVALIDARG;\n    ITypeInfo *pTInfo;\n\n    TRACE(\"(%p) index %d Name(%p) DocString(%p) HelpContext(%p) HelpFile(%p)\\n\",\n        This, index,\n        pBstrName, pBstrDocString,\n        pdwHelpContext, pBstrHelpFile);\n\n    if(index<0)\n    {\n        /* documentation for the typelib */\n        if(pBstrName)\n        {\n            if (This->Name)\n            {\n                if(!(*pBstrName = SysAllocString(TLB_get_bstr(This->Name))))\n                    goto memerr1;\n            }\n            else\n                *pBstrName = NULL;\n        }\n        if(pBstrDocString)\n        {\n            if (This->DocString)\n            {\n                if(!(*pBstrDocString = SysAllocString(TLB_get_bstr(This->DocString))))\n                    goto memerr2;\n            }\n            else\n                *pBstrDocString = NULL;\n        }\n        if(pdwHelpContext)\n        {\n            *pdwHelpContext = This->dwHelpContext;\n        }\n        if(pBstrHelpFile)\n        {\n            if (This->HelpFile)\n            {\n                if(!(*pBstrHelpFile = SysAllocString(TLB_get_bstr(This->HelpFile))))\n                    goto memerr3;\n            }\n            else\n                *pBstrHelpFile = NULL;\n        }\n\n        result = S_OK;\n    }\n    else\n    {\n        /* for a typeinfo */\n        result = ITypeLib2_fnGetTypeInfo(iface, index, &pTInfo);\n\n        if(SUCCEEDED(result))\n        {\n            result = ITypeInfo_GetDocumentation(pTInfo,\n                                          MEMBERID_NIL,\n                                          pBstrName,\n                                          pBstrDocString,\n                                          pdwHelpContext, pBstrHelpFile);\n\n            ITypeInfo_Release(pTInfo);\n        }\n    }\n    return result;\nmemerr3:\n    if (pBstrDocString) SysFreeString (*pBstrDocString);\nmemerr2:\n    if (pBstrName) SysFreeString (*pBstrName);\nmemerr1:\n    return STG_E_INSUFFICIENTMEMORY;\n}\n\n/* ITypeLib::IsName\n *\n * Indicates whether a passed-in string contains the name of a type or member\n * described in the library.\n *\n */\nstatic HRESULT WINAPI ITypeLib2_fnIsName(\n\tITypeLib2 *iface,\n\tLPOLESTR szNameBuf,\n\tULONG lHashVal,\n\tBOOL *pfName)\n{\n    ITypeLibImpl *This = impl_from_ITypeLib2(iface);\n    int tic;\n    UINT nNameBufLen = (lstrlenW(szNameBuf)+1)*sizeof(WCHAR), fdc, vrc;\n\n    TRACE(\"(%p)->(%s,%08x,%p)\\n\", This, debugstr_w(szNameBuf), lHashVal,\n\t  pfName);\n\n    *pfName=TRUE;\n    for(tic = 0; tic < This->TypeInfoCount; ++tic){\n        ITypeInfoImpl *pTInfo = This->typeinfos[tic];\n        if(!TLB_str_memcmp(szNameBuf, pTInfo->Name, nNameBufLen)) goto ITypeLib2_fnIsName_exit;\n        for(fdc = 0; fdc < pTInfo->typeattr.cFuncs; ++fdc) {\n            TLBFuncDesc *pFInfo = &pTInfo->funcdescs[fdc];\n            int pc;\n            if(!TLB_str_memcmp(szNameBuf, pFInfo->Name, nNameBufLen)) goto ITypeLib2_fnIsName_exit;\n            for(pc=0; pc < pFInfo->funcdesc.cParams; pc++){\n                if(!TLB_str_memcmp(szNameBuf, pFInfo->pParamDesc[pc].Name, nNameBufLen))\n                    goto ITypeLib2_fnIsName_exit;\n            }\n        }\n        for(vrc = 0; vrc < pTInfo->typeattr.cVars; ++vrc){\n            TLBVarDesc *pVInfo = &pTInfo->vardescs[vrc];\n            if(!TLB_str_memcmp(szNameBuf, pVInfo->Name, nNameBufLen)) goto ITypeLib2_fnIsName_exit;\n        }\n\n    }\n    *pfName=FALSE;\n\nITypeLib2_fnIsName_exit:\n    TRACE(\"(%p)slow! search for %s: %sfound!\\n\", This,\n          debugstr_w(szNameBuf), *pfName ? \"\" : \"NOT \");\n\n    return S_OK;\n}\n\n/* ITypeLib::FindName\n *\n * Finds occurrences of a type description in a type library. This may be used\n * to quickly verify that a name exists in a type library.\n *\n */\nstatic HRESULT WINAPI ITypeLib2_fnFindName(\n\tITypeLib2 *iface,\n\tLPOLESTR name,\n\tULONG hash,\n\tITypeInfo **ppTInfo,\n\tMEMBERID *memid,\n\tUINT16 *found)\n{\n    ITypeLibImpl *This = impl_from_ITypeLib2(iface);\n    int tic;\n    UINT count = 0;\n    UINT len;\n\n    TRACE(\"(%p)->(%s %u %p %p %p)\\n\", This, debugstr_w(name), hash, ppTInfo, memid, found);\n\n    if ((!name && hash == 0) || !ppTInfo || !memid || !found)\n        return E_INVALIDARG;\n\n    len = (lstrlenW(name) + 1)*sizeof(WCHAR);\n    for(tic = 0; count < *found && tic < This->TypeInfoCount; ++tic) {\n        ITypeInfoImpl *pTInfo = This->typeinfos[tic];\n        TLBVarDesc *var;\n        UINT fdc;\n\n        if(!TLB_str_memcmp(name, pTInfo->Name, len)) {\n            memid[count] = MEMBERID_NIL;\n            goto ITypeLib2_fnFindName_exit;\n        }\n\n        for(fdc = 0; fdc < pTInfo->typeattr.cFuncs; ++fdc) {\n            TLBFuncDesc *func = &pTInfo->funcdescs[fdc];\n\n            if(!TLB_str_memcmp(name, func->Name, len)) {\n                memid[count] = func->funcdesc.memid;\n                goto ITypeLib2_fnFindName_exit;\n            }\n        }\n\n        var = TLB_get_vardesc_by_name(pTInfo->vardescs, pTInfo->typeattr.cVars, name);\n        if (var) {\n            memid[count] = var->vardesc.memid;\n            goto ITypeLib2_fnFindName_exit;\n        }\n\n        continue;\nITypeLib2_fnFindName_exit:\n        ITypeInfo2_AddRef(&pTInfo->ITypeInfo2_iface);\n        ppTInfo[count] = (ITypeInfo *)&pTInfo->ITypeInfo2_iface;\n        count++;\n    }\n    TRACE(\"found %d typeinfos\\n\", count);\n\n    *found = count;\n\n    return S_OK;\n}\n\n/* ITypeLib::ReleaseTLibAttr\n *\n * Releases the TLIBATTR originally obtained from ITypeLib::GetLibAttr.\n *\n */\nstatic VOID WINAPI ITypeLib2_fnReleaseTLibAttr(\n\tITypeLib2 *iface,\n\tTLIBATTR *pTLibAttr)\n{\n    ITypeLibImpl *This = impl_from_ITypeLib2(iface);\n    TRACE(\"(%p)->(%p)\\n\", This, pTLibAttr);\n    heap_free(pTLibAttr);\n}\n\n/* ITypeLib2::GetCustData\n *\n * gets the custom data\n */\nstatic HRESULT WINAPI ITypeLib2_fnGetCustData(\n\tITypeLib2 * iface,\n\tREFGUID guid,\n        VARIANT *pVarVal)\n{\n    ITypeLibImpl *This = impl_from_ITypeLib2(iface);\n    TLBCustData *pCData;\n\n    TRACE(\"(%p)->(%s %p)\\n\", This, debugstr_guid(guid), pVarVal);\n\n    pCData = TLB_get_custdata_by_guid(&This->custdata_list, guid);\n    if(!pCData)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    VariantInit(pVarVal);\n    VariantCopy(pVarVal, &pCData->data);\n\n    return S_OK;\n}\n\n/* ITypeLib2::GetLibStatistics\n *\n * Returns statistics about a type library that are required for efficient\n * sizing of hash tables.\n *\n */\nstatic HRESULT WINAPI ITypeLib2_fnGetLibStatistics(\n\tITypeLib2 * iface,\n        ULONG *pcUniqueNames,\n\tULONG *pcchUniqueNames)\n{\n    ITypeLibImpl *This = impl_from_ITypeLib2(iface);\n\n    FIXME(\"(%p): stub!\\n\", This);\n\n    if(pcUniqueNames) *pcUniqueNames=1;\n    if(pcchUniqueNames) *pcchUniqueNames=1;\n    return S_OK;\n}\n\n/* ITypeLib2::GetDocumentation2\n *\n * Retrieves the library's documentation string, the complete Help file name\n * and path, the localization context to use, and the context ID for the\n * library Help topic in the Help file.\n *\n */\nstatic HRESULT WINAPI ITypeLib2_fnGetDocumentation2(\n\tITypeLib2 * iface,\n        INT index,\n\tLCID lcid,\n\tBSTR *pbstrHelpString,\n        DWORD *pdwHelpStringContext,\n\tBSTR *pbstrHelpStringDll)\n{\n    ITypeLibImpl *This = impl_from_ITypeLib2(iface);\n    HRESULT result;\n    ITypeInfo *pTInfo;\n\n    FIXME(\"(%p) index %d lcid %d half implemented stub!\\n\", This, index, lcid);\n\n    /* the help string should be obtained from the helpstringdll,\n     * using the _DLLGetDocumentation function, based on the supplied\n     * lcid. Nice to do sometime...\n     */\n    if(index<0)\n    {\n      /* documentation for the typelib */\n      if(pbstrHelpString)\n        *pbstrHelpString=SysAllocString(TLB_get_bstr(This->DocString));\n      if(pdwHelpStringContext)\n        *pdwHelpStringContext=This->dwHelpContext;\n      if(pbstrHelpStringDll)\n        *pbstrHelpStringDll=SysAllocString(TLB_get_bstr(This->HelpStringDll));\n\n      result = S_OK;\n    }\n    else\n    {\n      /* for a typeinfo */\n      result=ITypeLib2_GetTypeInfo(iface, index, &pTInfo);\n\n      if(SUCCEEDED(result))\n      {\n        ITypeInfo2 * pTInfo2;\n        result = ITypeInfo_QueryInterface(pTInfo,\n                                          &IID_ITypeInfo2,\n                                          (LPVOID*) &pTInfo2);\n\n        if(SUCCEEDED(result))\n        {\n          result = ITypeInfo2_GetDocumentation2(pTInfo2,\n                                           MEMBERID_NIL,\n                                           lcid,\n                                           pbstrHelpString,\n                                           pdwHelpStringContext,\n                                           pbstrHelpStringDll);\n\n          ITypeInfo2_Release(pTInfo2);\n        }\n\n        ITypeInfo_Release(pTInfo);\n      }\n    }\n    return result;\n}\n\nstatic HRESULT TLB_copy_all_custdata(struct list *custdata_list, CUSTDATA *pCustData)\n{\n    TLBCustData *pCData;\n    unsigned int ct;\n    CUSTDATAITEM *cdi;\n\n    ct = list_count(custdata_list);\n\n    pCustData->prgCustData = CoTaskMemAlloc(ct * sizeof(CUSTDATAITEM));\n    if(!pCustData->prgCustData)\n        return E_OUTOFMEMORY;\n\n    pCustData->cCustData = ct;\n\n    cdi = pCustData->prgCustData;\n    LIST_FOR_EACH_ENTRY(pCData, custdata_list, TLBCustData, entry){\n        cdi->guid = *TLB_get_guid_null(pCData->guid);\n        VariantCopy(&cdi->varValue, &pCData->data);\n        ++cdi;\n    }\n\n    return S_OK;\n}\n\n\n/* ITypeLib2::GetAllCustData\n *\n * Gets all custom data items for the library.\n *\n */\nstatic HRESULT WINAPI ITypeLib2_fnGetAllCustData(\n\tITypeLib2 * iface,\n        CUSTDATA *pCustData)\n{\n    ITypeLibImpl *This = impl_from_ITypeLib2(iface);\n    TRACE(\"(%p)->(%p)\\n\", This, pCustData);\n    return TLB_copy_all_custdata(&This->custdata_list, pCustData);\n}\n\nstatic const ITypeLib2Vtbl tlbvt = {\n    ITypeLib2_fnQueryInterface,\n    ITypeLib2_fnAddRef,\n    ITypeLib2_fnRelease,\n    ITypeLib2_fnGetTypeInfoCount,\n    ITypeLib2_fnGetTypeInfo,\n    ITypeLib2_fnGetTypeInfoType,\n    ITypeLib2_fnGetTypeInfoOfGuid,\n    ITypeLib2_fnGetLibAttr,\n    ITypeLib2_fnGetTypeComp,\n    ITypeLib2_fnGetDocumentation,\n    ITypeLib2_fnIsName,\n    ITypeLib2_fnFindName,\n    ITypeLib2_fnReleaseTLibAttr,\n\n    ITypeLib2_fnGetCustData,\n    ITypeLib2_fnGetLibStatistics,\n    ITypeLib2_fnGetDocumentation2,\n    ITypeLib2_fnGetAllCustData\n };\n\n\nstatic HRESULT WINAPI ITypeLibComp_fnQueryInterface(ITypeComp * iface, REFIID riid, LPVOID * ppv)\n{\n    ITypeLibImpl *This = impl_from_ITypeComp(iface);\n\n    return ITypeLib2_QueryInterface(&This->ITypeLib2_iface, riid, ppv);\n}\n\nstatic ULONG WINAPI ITypeLibComp_fnAddRef(ITypeComp * iface)\n{\n    ITypeLibImpl *This = impl_from_ITypeComp(iface);\n\n    return ITypeLib2_AddRef(&This->ITypeLib2_iface);\n}\n\nstatic ULONG WINAPI ITypeLibComp_fnRelease(ITypeComp * iface)\n{\n    ITypeLibImpl *This = impl_from_ITypeComp(iface);\n\n    return ITypeLib2_Release(&This->ITypeLib2_iface);\n}\n\nstatic HRESULT WINAPI ITypeLibComp_fnBind(\n    ITypeComp * iface,\n    OLECHAR * szName,\n    ULONG lHash,\n    WORD wFlags,\n    ITypeInfo ** ppTInfo,\n    DESCKIND * pDescKind,\n    BINDPTR * pBindPtr)\n{\n    ITypeLibImpl *This = impl_from_ITypeComp(iface);\n    BOOL typemismatch = FALSE;\n    int i;\n\n    TRACE(\"(%p)->(%s, 0x%x, 0x%x, %p, %p, %p)\\n\", This, debugstr_w(szName), lHash, wFlags, ppTInfo, pDescKind, pBindPtr);\n\n    *pDescKind = DESCKIND_NONE;\n    pBindPtr->lptcomp = NULL;\n    *ppTInfo = NULL;\n\n    for(i = 0; i < This->TypeInfoCount; ++i){\n        ITypeInfoImpl *pTypeInfo = This->typeinfos[i];\n        TRACE(\"testing %s\\n\", debugstr_w(TLB_get_bstr(pTypeInfo->Name)));\n\n        /* FIXME: check wFlags here? */\n        /* FIXME: we should use a hash table to look this info up using lHash\n         * instead of an O(n) search */\n        if ((pTypeInfo->typeattr.typekind == TKIND_ENUM) ||\n            (pTypeInfo->typeattr.typekind == TKIND_MODULE))\n        {\n            if (pTypeInfo->Name && !strcmpW(pTypeInfo->Name->str, szName))\n            {\n                *pDescKind = DESCKIND_TYPECOMP;\n                pBindPtr->lptcomp = &pTypeInfo->ITypeComp_iface;\n                ITypeComp_AddRef(pBindPtr->lptcomp);\n                TRACE(\"module or enum: %s\\n\", debugstr_w(szName));\n                return S_OK;\n            }\n        }\n\n        if ((pTypeInfo->typeattr.typekind == TKIND_MODULE) ||\n            (pTypeInfo->typeattr.typekind == TKIND_ENUM))\n        {\n            ITypeComp *pSubTypeComp = &pTypeInfo->ITypeComp_iface;\n            HRESULT hr;\n\n            hr = ITypeComp_Bind(pSubTypeComp, szName, lHash, wFlags, ppTInfo, pDescKind, pBindPtr);\n            if (SUCCEEDED(hr) && (*pDescKind != DESCKIND_NONE))\n            {\n                TRACE(\"found in module or in enum: %s\\n\", debugstr_w(szName));\n                return S_OK;\n            }\n            else if (hr == TYPE_E_TYPEMISMATCH)\n                typemismatch = TRUE;\n        }\n\n        if ((pTypeInfo->typeattr.typekind == TKIND_COCLASS) &&\n            (pTypeInfo->typeattr.wTypeFlags & TYPEFLAG_FAPPOBJECT))\n        {\n            ITypeComp *pSubTypeComp = &pTypeInfo->ITypeComp_iface;\n            HRESULT hr;\n            ITypeInfo *subtypeinfo;\n            BINDPTR subbindptr;\n            DESCKIND subdesckind;\n            if (pTypeInfo->Name && !strcmpW(pTypeInfo->Name->str, szName))\n            {\n                TYPEDESC tdesc_appobject;\n                const VARDESC vardesc_appobject =\n                {\n                    ID_DEFAULTINST, /* memid */\n                    NULL,       /* lpstrSchema */\n                    {\n                        0       /* oInst */\n                    },\n                    {\n                                /* ELEMDESC */\n                        {\n                                /* TYPEDESC */\n                                {\n                                    &tdesc_appobject\n                                },\n                                VT_PTR\n                        },\n                    },\n                    0,          /* wVarFlags */\n                    VAR_STATIC  /* varkind */\n                };\n\n                tdesc_appobject.u.hreftype = pTypeInfo->hreftype;\n                tdesc_appobject.vt = VT_USERDEFINED;\n\n                TRACE(\"found in implicit app object: %s\\n\", debugstr_w(szName));\n\n\n                if (pTypeInfo->hreftype == -1)\n                {\n                    FIXME(\"no hreftype for interface %p\\n\", pTypeInfo);\n                }\n\n                hr = TLB_AllocAndInitVarDesc(&vardesc_appobject, &pBindPtr->lpvardesc);\n                if (FAILED(hr))\n                    return hr;\n\n                *pDescKind = DESCKIND_VARDESC;\n                *ppTInfo = (ITypeInfo *)&pTypeInfo->ITypeInfo2_iface;\n                ITypeInfo_AddRef(*ppTInfo);\n                return S_OK;\n            }\n            hr = ITypeComp_Bind(pSubTypeComp, szName, lHash, wFlags,\n                &subtypeinfo, &subdesckind, &subbindptr);\n            if (SUCCEEDED(hr) && (subdesckind != DESCKIND_NONE))\n            {\n                TYPEDESC tdesc_appobject;\n                const VARDESC vardesc_appobject =\n                {\n                    ID_DEFAULTINST, /* memid */\n                    NULL,       /* lpstrSchema */\n                    {\n                        0       /* oInst */\n                    },\n                    {\n                                /* ELEMDESC */\n                        {\n                                /* TYPEDESC */\n                                {\n                                    &tdesc_appobject\n                                },\n                                VT_PTR\n                        },\n                    },\n                    0,          /* wVarFlags */\n                    VAR_STATIC  /* varkind */\n                };\n\n                tdesc_appobject.u.hreftype = pTypeInfo->hreftype;\n                tdesc_appobject.vt = VT_USERDEFINED;\n\n                TRACE(\"found in implicit app object: %s\\n\", debugstr_w(szName));\n\n                /* cleanup things filled in by Bind call so we can put our\n                 * application object data in there instead */\n                switch (subdesckind)\n                {\n                case DESCKIND_FUNCDESC:\n                    ITypeInfo_ReleaseFuncDesc(subtypeinfo, subbindptr.lpfuncdesc);\n                    break;\n                case DESCKIND_VARDESC:\n                    ITypeInfo_ReleaseVarDesc(subtypeinfo, subbindptr.lpvardesc);\n                    break;\n                default:\n                    break;\n                }\n                if (subtypeinfo) ITypeInfo_Release(subtypeinfo);\n\n                if (pTypeInfo->hreftype == -1)\n                {\n                    FIXME(\"no hreftype for interface %p\\n\", pTypeInfo);\n                }\n\n                hr = TLB_AllocAndInitVarDesc(&vardesc_appobject, &pBindPtr->lpvardesc);\n                if (FAILED(hr))\n                    return hr;\n\n                *pDescKind = DESCKIND_IMPLICITAPPOBJ;\n                *ppTInfo = (ITypeInfo *)&pTypeInfo->ITypeInfo2_iface;\n                ITypeInfo_AddRef(*ppTInfo);\n                return S_OK;\n            }\n            else if (hr == TYPE_E_TYPEMISMATCH)\n                typemismatch = TRUE;\n        }\n    }\n\n    if (typemismatch)\n    {\n        TRACE(\"type mismatch %s\\n\", debugstr_w(szName));\n        return TYPE_E_TYPEMISMATCH;\n    }\n    else\n    {\n        TRACE(\"name not found %s\\n\", debugstr_w(szName));\n        return S_OK;\n    }\n}\n\nstatic HRESULT WINAPI ITypeLibComp_fnBindType(\n    ITypeComp * iface,\n    OLECHAR * szName,\n    ULONG lHash,\n    ITypeInfo ** ppTInfo,\n    ITypeComp ** ppTComp)\n{\n    ITypeLibImpl *This = impl_from_ITypeComp(iface);\n    ITypeInfoImpl *info;\n\n    TRACE(\"(%s, %x, %p, %p)\\n\", debugstr_w(szName), lHash, ppTInfo, ppTComp);\n\n    if(!szName || !ppTInfo || !ppTComp)\n        return E_INVALIDARG;\n\n    info = TLB_get_typeinfo_by_name(This->typeinfos, This->TypeInfoCount, szName);\n    if(!info){\n        *ppTInfo = NULL;\n        *ppTComp = NULL;\n        return S_OK;\n    }\n\n    *ppTInfo = (ITypeInfo *)&info->ITypeInfo2_iface;\n    ITypeInfo_AddRef(*ppTInfo);\n    *ppTComp = &info->ITypeComp_iface;\n    ITypeComp_AddRef(*ppTComp);\n\n    return S_OK;\n}\n\nstatic const ITypeCompVtbl tlbtcvt =\n{\n\n    ITypeLibComp_fnQueryInterface,\n    ITypeLibComp_fnAddRef,\n    ITypeLibComp_fnRelease,\n\n    ITypeLibComp_fnBind,\n    ITypeLibComp_fnBindType\n};\n\nstatic HRESULT CDECL ITypeInfo_fnInvoke16(\n    /* ITypeInfo2 * */SEGPTR spiface,\n    /* VOID  * */SEGPTR pIUnk,\n    MEMBERID memid,\n    UINT16 wFlags,\n    /* DISPPARAMS  * */ SEGPTR spDispParams,\n    /* VARIANT  * */ SEGPTR spVarResult,\n    /* EXCEPINFO  * */ SEGPTR spExcepInfo,\n    /* UINT  * */SEGPTR spArgErr);\n/*================== ITypeInfo(2) Methods ===================================*/\nstatic ITypeInfoImpl* ITypeInfoImpl_Constructor(void)\n{\n    ITypeInfoImpl *pTypeInfoImpl;\n    SEGPTR typeinfo16;\n    ITypeInfo16Vtbl *vtbl16;\n    static SEGPTR sITypeInfo_fnInvoke16;\n\n    pTypeInfoImpl = heap_alloc_zero(sizeof(ITypeInfoImpl));\n    if (pTypeInfoImpl)\n    {\n      pTypeInfoImpl->ITypeInfo2_iface.lpVtbl = &tinfvt;\n      pTypeInfoImpl->ITypeComp_iface.lpVtbl = &tcompvt;\n      pTypeInfoImpl->ICreateTypeInfo2_iface.lpVtbl = &CreateTypeInfo2Vtbl;\n      pTypeInfoImpl->ref = 0;\n      pTypeInfoImpl->hreftype = -1;\n      pTypeInfoImpl->typeattr.memidConstructor = MEMBERID_NIL;\n      pTypeInfoImpl->typeattr.memidDestructor = MEMBERID_NIL;\n      pTypeInfoImpl->pcustdata_list = &pTypeInfoImpl->custdata_list;\n      list_init(pTypeInfoImpl->pcustdata_list);\n      typeinfo16 = iface32_16(&IID_ITypeInfo, &pTypeInfoImpl->ITypeInfo2_iface);\n      vtbl16 = (ITypeInfo16Vtbl*)copy_iface16_vtbl(typeinfo16);\n      SEGPTR make_thunk_32(void *funcptr, const char *arguments, const char *name, BOOL ret_32bit, BOOL reg_func, BOOL is_cdecl);\n      if (!sITypeInfo_fnInvoke16)\n      {\n          sITypeInfo_fnInvoke16 = make_thunk_32(ITypeInfo_fnInvoke16, \"sslwssss\", \"ITypeInfo2_fnInvoke16\", TRUE, FALSE, TRUE);\n      }\n      vtbl16->Invoke = sITypeInfo_fnInvoke16;\n    }\n    TRACE(\"(%p)\\n\", pTypeInfoImpl);\n    return pTypeInfoImpl;\n}\n\n/* ITypeInfo::QueryInterface\n */\nstatic HRESULT WINAPI ITypeInfo_fnQueryInterface(\n\tITypeInfo2 *iface,\n\tREFIID riid,\n\tVOID **ppvObject)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n\n    TRACE(\"(%p)->(IID: %s)\\n\",This,debugstr_guid(riid));\n\n    *ppvObject=NULL;\n    if(IsEqualIID(riid, &IID_IUnknown) ||\n            IsEqualIID(riid,&IID_ITypeInfo)||\n            IsEqualIID(riid,&IID_ITypeInfo2))\n        *ppvObject = &This->ITypeInfo2_iface;\n    else if(IsEqualIID(riid, &IID_ICreateTypeInfo) ||\n             IsEqualIID(riid, &IID_ICreateTypeInfo2))\n        *ppvObject = &This->ICreateTypeInfo2_iface;\n    else if(IsEqualIID(riid, &IID_ITypeComp))\n        *ppvObject = &This->ITypeComp_iface;\n\n    if(*ppvObject){\n        IUnknown_AddRef((IUnknown*)*ppvObject);\n        TRACE(\"-- Interface: (%p)->(%p)\\n\",ppvObject,*ppvObject);\n        return S_OK;\n    }\n    TRACE(\"-- Interface: E_NOINTERFACE\\n\");\n    return E_NOINTERFACE;\n}\n\n/* ITypeInfo::AddRef\n */\nstatic ULONG WINAPI ITypeInfo_fnAddRef( ITypeInfo2 *iface)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    ULONG ref = InterlockedIncrement(&This->ref);\n\n    TRACE(\"(%p)->ref is %u\\n\",This, ref);\n\n    if (ref == 1 /* incremented from 0 */)\n        ITypeLib2_AddRef(&This->pTypeLib->ITypeLib2_iface);\n\n    return ref;\n}\n\nstatic void ITypeInfoImpl_Destroy(ITypeInfoImpl *This)\n{\n    UINT i;\n\n    TRACE(\"destroying ITypeInfo(%p)\\n\",This);\n\n    for (i = 0; i < This->typeattr.cFuncs; ++i)\n    {\n        int j;\n        TLBFuncDesc *pFInfo = &This->funcdescs[i];\n        for(j = 0; j < pFInfo->funcdesc.cParams; j++)\n        {\n            ELEMDESC *elemdesc = &pFInfo->funcdesc.lprgelemdescParam[j];\n            if (elemdesc->u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT)\n                VariantClear(&elemdesc->u.paramdesc.pparamdescex->varDefaultValue);\n            TLB_FreeCustData(&pFInfo->pParamDesc[j].custdata_list);\n        }\n        heap_free(pFInfo->funcdesc.lprgelemdescParam);\n        heap_free(pFInfo->pParamDesc);\n        TLB_FreeCustData(&pFInfo->custdata_list);\n    }\n    heap_free(This->funcdescs);\n\n    for(i = 0; i < This->typeattr.cVars; ++i)\n    {\n        TLBVarDesc *pVInfo = &This->vardescs[i];\n        if (pVInfo->vardesc_create) {\n            TLB_FreeVarDesc(pVInfo->vardesc_create);\n        } else if (pVInfo->vardesc.varkind == VAR_CONST) {\n            VariantClear(pVInfo->vardesc.u.lpvarValue);\n            heap_free(pVInfo->vardesc.u.lpvarValue);\n        }\n        TLB_FreeCustData(&pVInfo->custdata_list);\n    }\n    heap_free(This->vardescs);\n\n    if(This->impltypes){\n        for (i = 0; i < This->typeattr.cImplTypes; ++i){\n            TLBImplType *pImpl = &This->impltypes[i];\n            TLB_FreeCustData(&pImpl->custdata_list);\n        }\n        heap_free(This->impltypes);\n    }\n\n    TLB_FreeCustData(&This->custdata_list);\n\n    heap_free(This);\n}\n\n/* ITypeInfo::Release\n */\nstatic ULONG WINAPI ITypeInfo_fnRelease(ITypeInfo2 *iface)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    ULONG ref = InterlockedDecrement(&This->ref);\n\n    TRACE(\"(%p)->(%u)\\n\",This, ref);\n\n    if (!ref)\n    {\n        BOOL not_attached_to_typelib = This->not_attached_to_typelib;\n        ITypeLib2_Release(&This->pTypeLib->ITypeLib2_iface);\n        if (not_attached_to_typelib)\n            heap_free(This);\n        /* otherwise This will be freed when typelib is freed */\n    }\n\n    return ref;\n}\n\n/* ITypeInfo::GetTypeAttr\n *\n * Retrieves a TYPEATTR structure that contains the attributes of the type\n * description.\n *\n */\nstatic HRESULT WINAPI ITypeInfo_fnGetTypeAttr( ITypeInfo2 *iface,\n        LPTYPEATTR  *ppTypeAttr)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    SIZE_T size;\n\n    TRACE(\"(%p)\\n\",This);\n\n    size = sizeof(**ppTypeAttr);\n    if (This->typeattr.typekind == TKIND_ALIAS && This->tdescAlias)\n        size += TLB_SizeTypeDesc(This->tdescAlias, FALSE);\n\n    *ppTypeAttr = heap_alloc(size);\n    if (!*ppTypeAttr)\n        return E_OUTOFMEMORY;\n\n    **ppTypeAttr = This->typeattr;\n    (*ppTypeAttr)->guid = *TLB_get_guid_null(This->guid);\n\n    if (This->tdescAlias)\n        TLB_CopyTypeDesc(&(*ppTypeAttr)->tdescAlias, This->tdescAlias, *ppTypeAttr + 1);\n\n    if((*ppTypeAttr)->typekind == TKIND_DISPATCH) {\n        /* This should include all the inherited funcs */\n        (*ppTypeAttr)->cFuncs = (*ppTypeAttr)->cbSizeVft / This->pTypeLib->ptr_size;\n        /* This is always the size of IDispatch's vtbl */\n        (*ppTypeAttr)->cbSizeVft = sizeof(IDispatchVtbl);\n        (*ppTypeAttr)->wTypeFlags &= ~TYPEFLAG_FOLEAUTOMATION;\n    }\n    return S_OK;\n}\n\n/* ITypeInfo::GetTypeComp\n *\n * Retrieves the ITypeComp interface for the type description, which enables a\n * client compiler to bind to the type description's members.\n *\n */\nstatic HRESULT WINAPI ITypeInfo_fnGetTypeComp( ITypeInfo2 *iface,\n        ITypeComp  * *ppTComp)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n\n    TRACE(\"(%p)->(%p)\\n\", This, ppTComp);\n\n    *ppTComp = &This->ITypeComp_iface;\n    ITypeComp_AddRef(*ppTComp);\n    return S_OK;\n}\n\nstatic SIZE_T TLB_SizeElemDesc( const ELEMDESC *elemdesc )\n{\n    SIZE_T size = TLB_SizeTypeDesc(&elemdesc->tdesc, FALSE);\n    if (elemdesc->u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT)\n        size += sizeof(*elemdesc->u.paramdesc.pparamdescex);\n    return size;\n}\n\nstatic HRESULT TLB_CopyElemDesc( const ELEMDESC *src, ELEMDESC *dest, char **buffer )\n{\n    *dest = *src;\n    *buffer = TLB_CopyTypeDesc(&dest->tdesc, &src->tdesc, *buffer);\n    if (src->u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT)\n    {\n        const PARAMDESCEX *pparamdescex_src = src->u.paramdesc.pparamdescex;\n        PARAMDESCEX *pparamdescex_dest = dest->u.paramdesc.pparamdescex = (PARAMDESCEX *)*buffer;\n        *buffer += sizeof(PARAMDESCEX);\n        *pparamdescex_dest = *pparamdescex_src;\n        pparamdescex_dest->cBytes = sizeof(PARAMDESCEX);\n        VariantInit(&pparamdescex_dest->varDefaultValue);\n        return VariantCopy(&pparamdescex_dest->varDefaultValue, \n                           (VARIANTARG *)&pparamdescex_src->varDefaultValue);\n    }\n    else\n        dest->u.paramdesc.pparamdescex = NULL;\n    return S_OK;\n}\n\nstatic HRESULT TLB_SanitizeBSTR(BSTR str)\n{\n    UINT len = SysStringLen(str), i;\n    for (i = 0; i < len; ++i)\n        if (str[i] > 0x7f)\n            str[i] = '?';\n    return S_OK;\n}\n\nstatic HRESULT TLB_SanitizeVariant(VARIANT *var)\n{\n    if (V_VT(var) == VT_INT)\n        return VariantChangeType(var, var, 0, VT_I4);\n    else if (V_VT(var) == VT_UINT)\n        return VariantChangeType(var, var, 0, VT_UI4);\n    else if (V_VT(var) == VT_BSTR)\n        return TLB_SanitizeBSTR(V_BSTR(var));\n\n    return S_OK;\n}\n\nstatic void TLB_FreeElemDesc( ELEMDESC *elemdesc )\n{\n    if (elemdesc->u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT)\n        VariantClear(&elemdesc->u.paramdesc.pparamdescex->varDefaultValue);\n}\n\nstatic HRESULT TLB_AllocAndInitFuncDesc( const FUNCDESC *src, FUNCDESC **dest_ptr, BOOL dispinterface )\n{\n    FUNCDESC *dest;\n    char *buffer;\n    SIZE_T size = sizeof(*src);\n    SHORT i;\n    HRESULT hr;\n\n    size += sizeof(*src->lprgscode) * src->cScodes;\n    size += TLB_SizeElemDesc(&src->elemdescFunc);\n    for (i = 0; i < src->cParams; i++)\n    {\n        size += sizeof(ELEMDESC);\n        size += TLB_SizeElemDesc(&src->lprgelemdescParam[i]);\n    }\n\n    dest = (FUNCDESC *)SysAllocStringByteLen(NULL, size);\n    if (!dest) return E_OUTOFMEMORY;\n\n    *dest = *src;\n    if (dispinterface)    /* overwrite funckind */\n        dest->funckind = FUNC_DISPATCH;\n    buffer = (char *)(dest + 1);\n\n    dest->oVft = dest->oVft & 0xFFFC;\n\n    if (dest->cScodes) {\n        dest->lprgscode = (SCODE *)buffer;\n        memcpy(dest->lprgscode, src->lprgscode, sizeof(*src->lprgscode) * src->cScodes);\n        buffer += sizeof(*src->lprgscode) * src->cScodes;\n    } else\n        dest->lprgscode = NULL;\n\n    hr = TLB_CopyElemDesc(&src->elemdescFunc, &dest->elemdescFunc, &buffer);\n    if (FAILED(hr))\n    {\n        SysFreeString((BSTR)dest);\n        return hr;\n    }\n\n    if (dest->cParams) {\n        dest->lprgelemdescParam = (ELEMDESC *)buffer;\n        buffer += sizeof(ELEMDESC) * src->cParams;\n        for (i = 0; i < src->cParams; i++)\n        {\n            hr = TLB_CopyElemDesc(&src->lprgelemdescParam[i], &dest->lprgelemdescParam[i], &buffer);\n            if (FAILED(hr))\n                break;\n        }\n        if (FAILED(hr))\n        {\n            /* undo the above actions */\n            for (i = i - 1; i >= 0; i--)\n                TLB_FreeElemDesc(&dest->lprgelemdescParam[i]);\n            TLB_FreeElemDesc(&dest->elemdescFunc);\n            SysFreeString((BSTR)dest);\n            return hr;\n        }\n    } else\n        dest->lprgelemdescParam = NULL;\n\n    /* special treatment for dispinterfaces: this makes functions appear\n     * to return their [retval] value when it is really returning an\n     * HRESULT */\n    if (dispinterface && dest->elemdescFunc.tdesc.vt == VT_HRESULT)\n    {\n        if (dest->cParams &&\n            (dest->lprgelemdescParam[dest->cParams - 1].u.paramdesc.wParamFlags & PARAMFLAG_FRETVAL))\n        {\n            ELEMDESC *elemdesc = &dest->lprgelemdescParam[dest->cParams - 1];\n            if (elemdesc->tdesc.vt != VT_PTR)\n            {\n                ERR(\"elemdesc should have started with VT_PTR instead of:\\n\");\n                if (ERR_ON(ole))\n                    dump_ELEMDESC(elemdesc);\n                return E_UNEXPECTED;\n            }\n\n            /* copy last parameter to the return value. we are using a flat\n             * buffer so there is no danger of leaking memory in\n             * elemdescFunc */\n            dest->elemdescFunc.tdesc = *elemdesc->tdesc.u.lptdesc;\n\n            /* remove the last parameter */\n            dest->cParams--;\n        }\n        else\n            /* otherwise this function is made to appear to have no return\n             * value */\n            dest->elemdescFunc.tdesc.vt = VT_VOID;\n\n    }\n\n    *dest_ptr = dest;\n    return S_OK;\n}\n\nstatic void TLB_FreeVarDesc(VARDESC *var_desc)\n{\n    TLB_FreeElemDesc(&var_desc->elemdescVar);\n    if (var_desc->varkind == VAR_CONST)\n        VariantClear(var_desc->u.lpvarValue);\n    SysFreeString((BSTR)var_desc);\n}\n\nHRESULT ITypeInfoImpl_GetInternalFuncDesc( ITypeInfo *iface, UINT index, const FUNCDESC **ppFuncDesc )\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo(iface);\n\n    if (index >= This->typeattr.cFuncs)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    *ppFuncDesc = &This->funcdescs[index].funcdesc;\n    return S_OK;\n}\n\n/* internal function to make the inherited interfaces' methods appear\n * part of the interface */\nstatic HRESULT ITypeInfoImpl_GetInternalDispatchFuncDesc( ITypeInfo *iface,\n    UINT index, const FUNCDESC **ppFuncDesc, UINT *funcs, UINT *hrefoffset)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo(iface);\n    HRESULT hr;\n    UINT implemented_funcs = 0;\n\n    if (funcs)\n        *funcs = 0;\n    else\n        *hrefoffset = DISPATCH_HREF_OFFSET;\n\n    if(This->impltypes)\n    {\n        ITypeInfo *pSubTypeInfo;\n        UINT sub_funcs;\n\n        hr = ITypeInfo_GetRefTypeInfo(iface, This->impltypes[0].hRef, &pSubTypeInfo);\n        if (FAILED(hr))\n            return hr;\n\n        hr = ITypeInfoImpl_GetInternalDispatchFuncDesc(pSubTypeInfo,\n                                                       index,\n                                                       ppFuncDesc,\n                                                       &sub_funcs, hrefoffset);\n        implemented_funcs += sub_funcs;\n        ITypeInfo_Release(pSubTypeInfo);\n        if (SUCCEEDED(hr))\n            return hr;\n        *hrefoffset += DISPATCH_HREF_OFFSET;\n    }\n\n    if (funcs)\n        *funcs = implemented_funcs + This->typeattr.cFuncs;\n    else\n        *hrefoffset = 0;\n    \n    if (index < implemented_funcs)\n        return E_INVALIDARG;\n    return ITypeInfoImpl_GetInternalFuncDesc(iface, index - implemented_funcs,\n                                             ppFuncDesc);\n}\n\nstatic inline void ITypeInfoImpl_ElemDescAddHrefOffset( LPELEMDESC pElemDesc, UINT hrefoffset)\n{\n    TYPEDESC *pTypeDesc = &pElemDesc->tdesc;\n    while (TRUE)\n    {\n        switch (pTypeDesc->vt)\n        {\n        case VT_USERDEFINED:\n            pTypeDesc->u.hreftype += hrefoffset;\n            return;\n        case VT_PTR:\n        case VT_SAFEARRAY:\n            pTypeDesc = pTypeDesc->u.lptdesc;\n            break;\n        case VT_CARRAY:\n            pTypeDesc = &pTypeDesc->u.lpadesc->tdescElem;\n            break;\n        default:\n            return;\n        }\n    }\n}\n\nstatic inline void ITypeInfoImpl_FuncDescAddHrefOffset( LPFUNCDESC pFuncDesc, UINT hrefoffset)\n{\n    SHORT i;\n    for (i = 0; i < pFuncDesc->cParams; i++)\n        ITypeInfoImpl_ElemDescAddHrefOffset(&pFuncDesc->lprgelemdescParam[i], hrefoffset);\n    ITypeInfoImpl_ElemDescAddHrefOffset(&pFuncDesc->elemdescFunc, hrefoffset);\n}\n\n/* ITypeInfo::GetFuncDesc\n *\n * Retrieves the FUNCDESC structure that contains information about a\n * specified function.\n *\n */\nstatic HRESULT WINAPI ITypeInfo_fnGetFuncDesc( ITypeInfo2 *iface, UINT index,\n        LPFUNCDESC  *ppFuncDesc)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    const FUNCDESC *internal_funcdesc;\n    HRESULT hr;\n    UINT hrefoffset = 0;\n\n    TRACE(\"(%p) index %d\\n\", This, index);\n\n    if (!ppFuncDesc)\n        return E_INVALIDARG;\n\n    if (This->needs_layout)\n        ICreateTypeInfo2_LayOut(&This->ICreateTypeInfo2_iface);\n\n    if (This->typeattr.typekind == TKIND_DISPATCH)\n        hr = ITypeInfoImpl_GetInternalDispatchFuncDesc((ITypeInfo *)iface, index,\n                                                       &internal_funcdesc, NULL,\n                                                       &hrefoffset);\n    else\n        hr = ITypeInfoImpl_GetInternalFuncDesc((ITypeInfo *)iface, index,\n                                               &internal_funcdesc);\n    if (FAILED(hr))\n    {\n        WARN(\"description for function %d not found\\n\", index);\n        return hr;\n    }\n\n    hr = TLB_AllocAndInitFuncDesc(\n        internal_funcdesc,\n        ppFuncDesc,\n        This->typeattr.typekind == TKIND_DISPATCH);\n\n    if ((This->typeattr.typekind == TKIND_DISPATCH) && hrefoffset)\n        ITypeInfoImpl_FuncDescAddHrefOffset(*ppFuncDesc, hrefoffset);\n\n    TRACE(\"-- 0x%08x\\n\", hr);\n    return hr;\n}\n\nstatic HRESULT TLB_AllocAndInitVarDesc( const VARDESC *src, VARDESC **dest_ptr )\n{\n    VARDESC *dest;\n    char *buffer;\n    SIZE_T size = sizeof(*src);\n    HRESULT hr;\n\n    if (src->lpstrSchema) size += (strlenW(src->lpstrSchema) + 1) * sizeof(WCHAR);\n    if (src->varkind == VAR_CONST)\n        size += sizeof(VARIANT);\n    size += TLB_SizeElemDesc(&src->elemdescVar);\n\n    dest = (VARDESC *)SysAllocStringByteLen(NULL, size);\n    if (!dest) return E_OUTOFMEMORY;\n\n    *dest = *src;\n    buffer = (char *)(dest + 1);\n    if (src->lpstrSchema)\n    {\n        int len;\n        dest->lpstrSchema = (LPOLESTR)buffer;\n        len = strlenW(src->lpstrSchema);\n        memcpy(dest->lpstrSchema, src->lpstrSchema, (len + 1) * sizeof(WCHAR));\n        buffer += (len + 1) * sizeof(WCHAR);\n    }\n\n    if (src->varkind == VAR_CONST)\n    {\n        HRESULT hr;\n\n        dest->u.lpvarValue = (VARIANT *)buffer;\n        *dest->u.lpvarValue = *src->u.lpvarValue;\n        buffer += sizeof(VARIANT);\n        VariantInit(dest->u.lpvarValue);\n        hr = VariantCopy(dest->u.lpvarValue, src->u.lpvarValue);\n        if (FAILED(hr))\n        {\n            SysFreeString((BSTR)dest);\n            return hr;\n        }\n    }\n    hr = TLB_CopyElemDesc(&src->elemdescVar, &dest->elemdescVar, &buffer);\n    if (FAILED(hr))\n    {\n        if (src->varkind == VAR_CONST)\n            VariantClear(dest->u.lpvarValue);\n        SysFreeString((BSTR)dest);\n        return hr;\n    }\n    *dest_ptr = dest;\n    return S_OK;\n}\n\n/* ITypeInfo::GetVarDesc\n *\n * Retrieves a VARDESC structure that describes the specified variable.\n *\n */\nstatic HRESULT WINAPI ITypeInfo_fnGetVarDesc( ITypeInfo2 *iface, UINT index,\n        LPVARDESC  *ppVarDesc)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    const TLBVarDesc *pVDesc = &This->vardescs[index];\n\n    TRACE(\"(%p) index %d\\n\", This, index);\n\n    if(index >= This->typeattr.cVars)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    if (This->needs_layout)\n        ICreateTypeInfo2_LayOut(&This->ICreateTypeInfo2_iface);\n\n    return TLB_AllocAndInitVarDesc(&pVDesc->vardesc, ppVarDesc);\n}\n\n/* ITypeInfo_GetNames\n *\n * Retrieves the variable with the specified member ID (or the name of the\n * property or method and its parameters) that correspond to the specified\n * function ID.\n */\nstatic HRESULT WINAPI ITypeInfo_fnGetNames( ITypeInfo2 *iface, MEMBERID memid,\n        BSTR  *rgBstrNames, UINT cMaxNames, UINT  *pcNames)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    const TLBFuncDesc *pFDesc;\n    const TLBVarDesc *pVDesc;\n    int i;\n    TRACE(\"(%p) memid=0x%08x Maxname=%d\\n\", This, memid, cMaxNames);\n\n    if(!rgBstrNames)\n        return E_INVALIDARG;\n\n    *pcNames = 0;\n\n    pFDesc = TLB_get_funcdesc_by_memberid(This->funcdescs, This->typeattr.cFuncs, memid);\n    if(pFDesc)\n    {\n        if(!cMaxNames || !pFDesc->Name)\n            return S_OK;\n\n        *rgBstrNames = SysAllocString(TLB_get_bstr(pFDesc->Name));\n        ++(*pcNames);\n\n        for(i = 0; i < pFDesc->funcdesc.cParams; ++i){\n            if(*pcNames >= cMaxNames || !pFDesc->pParamDesc[i].Name)\n                return S_OK;\n            rgBstrNames[*pcNames] = SysAllocString(TLB_get_bstr(pFDesc->pParamDesc[i].Name));\n            ++(*pcNames);\n        }\n        return S_OK;\n    }\n\n    pVDesc = TLB_get_vardesc_by_memberid(This->vardescs, This->typeattr.cVars, memid);\n    if(pVDesc)\n    {\n      *rgBstrNames=SysAllocString(TLB_get_bstr(pVDesc->Name));\n      *pcNames=1;\n    }\n    else\n    {\n        if(This->impltypes &&\n\t   (This->typeattr.typekind == TKIND_INTERFACE || This->typeattr.typekind == TKIND_DISPATCH)) {\n          /* recursive search */\n          ITypeInfo *pTInfo;\n          HRESULT result;\n          result = ITypeInfo2_GetRefTypeInfo(iface, This->impltypes[0].hRef, &pTInfo);\n          if(SUCCEEDED(result))\n\t  {\n            result=ITypeInfo_GetNames(pTInfo, memid, rgBstrNames, cMaxNames, pcNames);\n            ITypeInfo_Release(pTInfo);\n            return result;\n          }\n          WARN(\"Could not search inherited interface!\\n\");\n        }\n        else\n\t{\n          WARN(\"no names found\\n\");\n\t}\n        *pcNames=0;\n        return TYPE_E_ELEMENTNOTFOUND;\n    }\n    return S_OK;\n}\n\n\n/* ITypeInfo::GetRefTypeOfImplType\n *\n * If a type description describes a COM class, it retrieves the type\n * description of the implemented interface types. For an interface,\n * GetRefTypeOfImplType returns the type information for inherited interfaces,\n * if any exist.\n *\n */\nstatic HRESULT WINAPI ITypeInfo_fnGetRefTypeOfImplType(\n\tITypeInfo2 *iface,\n        UINT16 index,\n\tHREFTYPE  *pRefType)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    HRESULT hr = S_OK;\n\n    TRACE(\"(%p) index %d\\n\", This, index);\n    if (TRACE_ON(ole)) dump_TypeInfo(This);\n\n    if(index==0xffff)\n    {\n      /* only valid on dual interfaces;\n         retrieve the associated TKIND_INTERFACE handle for the current TKIND_DISPATCH\n      */\n\n      if (This->typeattr.wTypeFlags & TYPEFLAG_FDUAL)\n      {\n          *pRefType = -2;\n      }\n      else\n      {\n        hr = TYPE_E_ELEMENTNOTFOUND;\n      }\n    }\n    else if(index == 0 && This->typeattr.typekind == TKIND_DISPATCH)\n    {\n      /* All TKIND_DISPATCHs are made to look like they inherit from IDispatch */\n      *pRefType = This->pTypeLib->dispatch_href;\n    }\n    else\n    {\n        if(index >= This->typeattr.cImplTypes)\n            hr = TYPE_E_ELEMENTNOTFOUND;\n        else{\n            *pRefType = This->impltypes[index].hRef;\n            if (This->typeattr.typekind == TKIND_INTERFACE)\n                *pRefType |= 0x2;\n        }\n    }\n\n    if(TRACE_ON(ole))\n    {\n        if(SUCCEEDED(hr))\n            TRACE(\"SUCCESS -- hRef = 0x%08x\\n\", *pRefType );\n        else\n            TRACE(\"FAILURE -- hresult = 0x%08x\\n\", hr);\n    }\n\n    return hr;\n}\n\n/* ITypeInfo::GetImplTypeFlags\n *\n * Retrieves the IMPLTYPEFLAGS enumeration for one implemented interface\n * or base interface in a type description.\n */\nstatic HRESULT WINAPI ITypeInfo_fnGetImplTypeFlags( ITypeInfo2 *iface,\n        UINT index, INT  *pImplTypeFlags)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n\n    TRACE(\"(%p) index %d\\n\", This, index);\n\n    if(!pImplTypeFlags)\n        return E_INVALIDARG;\n\n    if(This->typeattr.typekind == TKIND_DISPATCH && index == 0){\n        *pImplTypeFlags = 0;\n        return S_OK;\n    }\n\n    if(index >= This->typeattr.cImplTypes)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    *pImplTypeFlags = This->impltypes[index].implflags;\n\n    return S_OK;\n}\n\n/* GetIDsOfNames\n * Maps between member names and member IDs, and parameter names and\n * parameter IDs.\n */\nstatic HRESULT WINAPI ITypeInfo_fnGetIDsOfNames( ITypeInfo2 *iface,\n        LPOLESTR  *rgszNames, UINT cNames, MEMBERID  *pMemId)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    const TLBVarDesc *pVDesc;\n    HRESULT ret=S_OK;\n    UINT i, fdc;\n\n    TRACE(\"(%p) Name %s cNames %d\\n\", This, debugstr_w(*rgszNames),\n            cNames);\n\n    /* init out parameters in case of failure */\n    for (i = 0; i < cNames; i++)\n        pMemId[i] = MEMBERID_NIL;\n\n    for (fdc = 0; fdc < This->typeattr.cFuncs; ++fdc) {\n        int j;\n        const TLBFuncDesc *pFDesc = &This->funcdescs[fdc];\n        if(!lstrcmpiW(*rgszNames, TLB_get_bstr(pFDesc->Name))) {\n            if(cNames) *pMemId=pFDesc->funcdesc.memid;\n            for(i=1; i < cNames; i++){\n                for(j=0; j<pFDesc->funcdesc.cParams; j++)\n                    if(!lstrcmpiW(rgszNames[i],TLB_get_bstr(pFDesc->pParamDesc[j].Name)))\n                            break;\n                if( j<pFDesc->funcdesc.cParams)\n                    pMemId[i]=j;\n                else\n                   ret=DISP_E_UNKNOWNNAME;\n            };\n            TRACE(\"-- 0x%08x\\n\", ret);\n            return ret;\n        }\n    }\n    pVDesc = TLB_get_vardesc_by_name(This->vardescs, This->typeattr.cVars, *rgszNames);\n    if(pVDesc){\n        if(cNames)\n            *pMemId = pVDesc->vardesc.memid;\n        return ret;\n    }\n    /* not found, see if it can be found in an inherited interface */\n    if(This->impltypes) {\n        /* recursive search */\n        ITypeInfo *pTInfo;\n        ret = ITypeInfo2_GetRefTypeInfo(iface, This->impltypes[0].hRef, &pTInfo);\n        if(SUCCEEDED(ret)){\n            ret=ITypeInfo_GetIDsOfNames(pTInfo, rgszNames, cNames, pMemId );\n            ITypeInfo_Release(pTInfo);\n            return ret;\n        }\n        WARN(\"Could not search inherited interface!\\n\");\n    } else\n        WARN(\"no names found\\n\");\n    return DISP_E_UNKNOWNNAME;\n}\n\n\n#ifdef __i386__\n\nextern LONGLONG call_method( void *func, int nb_args, const DWORD *args, int *stack_offset );\nextern double call_double_method( void *func, int nb_args, const DWORD *args, int *stack_offset );\nLONGLONG call_method(void *func, int nb_args, const DWORD *args, int *stack_offset)\n{\n    DWORD ret;\n    WOWCallback16Ex(func, WCB16_PASCAL, nb_args * 2, args, &ret);\n    return ret;\n}\ndouble call_double_method(void *func, int nb_args, const DWORD *args, int *stack_offset)\n{\n    FIXME(\"\\n\");\n    return 0;\n}\n#if 0\n__ASM_GLOBAL_FUNC( call_method,\n                   \"pushl %ebp\\n\\t\"\n                   __ASM_CFI(\".cfi_adjust_cfa_offset 4\\n\\t\")\n                   __ASM_CFI(\".cfi_rel_offset %ebp,0\\n\\t\")\n                   \"movl %esp,%ebp\\n\\t\"\n                   __ASM_CFI(\".cfi_def_cfa_register %ebp\\n\\t\")\n                   \"pushl %esi\\n\\t\"\n                  __ASM_CFI(\".cfi_rel_offset %esi,-4\\n\\t\")\n                   \"pushl %edi\\n\\t\"\n                  __ASM_CFI(\".cfi_rel_offset %edi,-8\\n\\t\")\n                   \"movl 12(%ebp),%edx\\n\\t\"\n                   \"movl %esp,%edi\\n\\t\"\n                   \"shll $2,%edx\\n\\t\"\n                   \"jz 1f\\n\\t\"\n                   \"subl %edx,%edi\\n\\t\"\n                   \"andl $~15,%edi\\n\\t\"\n                   \"movl %edi,%esp\\n\\t\"\n                   \"movl 12(%ebp),%ecx\\n\\t\"\n                   \"movl 16(%ebp),%esi\\n\\t\"\n                   \"cld\\n\\t\"\n                   \"rep; movsl\\n\"\n                   \"1:\\tcall *8(%ebp)\\n\\t\"\n                   \"subl %esp,%edi\\n\\t\"\n                   \"movl 20(%ebp),%ecx\\n\\t\"\n                   \"movl %edi,(%ecx)\\n\\t\"\n                   \"leal -8(%ebp),%esp\\n\\t\"\n                   \"popl %edi\\n\\t\"\n                   __ASM_CFI(\".cfi_same_value %edi\\n\\t\")\n                   \"popl %esi\\n\\t\"\n                   __ASM_CFI(\".cfi_same_value %esi\\n\\t\")\n                   \"popl %ebp\\n\\t\"\n                   __ASM_CFI(\".cfi_def_cfa %esp,4\\n\\t\")\n                   __ASM_CFI(\".cfi_same_value %ebp\\n\\t\")\n                   \"ret\" )\n__ASM_GLOBAL_FUNC( call_double_method,\n                   \"jmp \" __ASM_NAME(\"call_method\") )\n#endif\n\n/* ITypeInfo::Invoke\n *\n * Invokes a method, or accesses a property of an object, that implements the\n * interface described by the type description.\n */\nDWORD\n_invoke(FARPROC func,CALLCONV callconv, int nrargs, DWORD *args) {\n    DWORD res;\n    int stack_offset;\n\n    if (TRACE_ON(ole)) {\n\tint i;\n\tTRACE(\"Calling %p(\",func);\n\tfor (i=0;i<min(nrargs,30);i++) TRACE(\"%08x,\",args[i]);\n\tif (nrargs > 30) TRACE(\"...\");\n\tTRACE(\")\\n\");\n    }\n\n    switch (callconv) {\n    case CC_STDCALL:\n    case CC_CDECL:\n        res = call_method( func, nrargs, args, &stack_offset );\n\tbreak;\n    default:\n\tFIXME(\"unsupported calling convention %d\\n\",callconv);\n\tres = -1;\n\tbreak;\n    }\n    TRACE(\"returns %08x\\n\",res);\n    return res;\n}\n\n#elif defined(__x86_64__)\n\nextern DWORD_PTR CDECL call_method( void *func, int nb_args, const DWORD_PTR *args );\nextern double CDECL call_double_method( void *func, int nb_args, const DWORD_PTR *args );\n__ASM_GLOBAL_FUNC( call_method,\n                   \"pushq %rbp\\n\\t\"\n                   __ASM_CFI(\".cfi_adjust_cfa_offset 8\\n\\t\")\n                   __ASM_CFI(\".cfi_rel_offset %rbp,0\\n\\t\")\n                   \"movq %rsp,%rbp\\n\\t\"\n                   __ASM_CFI(\".cfi_def_cfa_register %rbp\\n\\t\")\n                   \"pushq %rsi\\n\\t\"\n                   __ASM_CFI(\".cfi_rel_offset %rsi,-8\\n\\t\")\n                   \"pushq %rdi\\n\\t\"\n                   __ASM_CFI(\".cfi_rel_offset %rdi,-16\\n\\t\")\n                   \"movq %rcx,%rax\\n\\t\"\n                   \"movq $4,%rcx\\n\\t\"\n                   \"cmp %rcx,%rdx\\n\\t\"\n                   \"cmovgq %rdx,%rcx\\n\\t\"\n                   \"leaq 0(,%rcx,8),%rdx\\n\\t\"\n                   \"subq %rdx,%rsp\\n\\t\"\n                   \"andq $~15,%rsp\\n\\t\"\n                   \"movq %rsp,%rdi\\n\\t\"\n                   \"movq %r8,%rsi\\n\\t\"\n                   \"rep; movsq\\n\\t\"\n                   \"movq 0(%rsp),%rcx\\n\\t\"\n                   \"movq 8(%rsp),%rdx\\n\\t\"\n                   \"movq 16(%rsp),%r8\\n\\t\"\n                   \"movq 24(%rsp),%r9\\n\\t\"\n                   \"movq 0(%rsp),%xmm0\\n\\t\"\n                   \"movq 8(%rsp),%xmm1\\n\\t\"\n                   \"movq 16(%rsp),%xmm2\\n\\t\"\n                   \"movq 24(%rsp),%xmm3\\n\\t\"\n                   \"callq *%rax\\n\\t\"\n                   \"leaq -16(%rbp),%rsp\\n\\t\"\n                   \"popq %rdi\\n\\t\"\n                   __ASM_CFI(\".cfi_same_value %rdi\\n\\t\")\n                   \"popq %rsi\\n\\t\"\n                   __ASM_CFI(\".cfi_same_value %rsi\\n\\t\")\n                   __ASM_CFI(\".cfi_def_cfa_register %rsp\\n\\t\")\n                   \"popq %rbp\\n\\t\"\n                   __ASM_CFI(\".cfi_adjust_cfa_offset -8\\n\\t\")\n                   __ASM_CFI(\".cfi_same_value %rbp\\n\\t\")\n                   \"ret\")\n__ASM_GLOBAL_FUNC( call_double_method,\n                   \"jmp \" __ASM_NAME(\"call_method\") )\n\n#elif defined(__arm__)\n\nextern LONGLONG CDECL call_method( void *func, int nb_stk_args, const DWORD *stk_args, const DWORD *reg_args );\nextern float CDECL call_float_method( void *func, int nb_stk_args, const DWORD *stk_args, const DWORD *reg_args );\nextern double CDECL call_double_method( void *func, int nb_stk_args, const DWORD *stk_args, const DWORD *reg_args );\n__ASM_GLOBAL_FUNC( call_method,\n                    /* r0 = *func\n                     * r1 = nb_stk_args\n                     * r2 = *stk_args (pointer to 'nb_stk_args' DWORD values to push on stack)\n                     * r3 = *reg_args (pointer to 8, 64-bit d0-d7 (double) values OR as 16, 32-bit s0-s15 (float) values, followed by 4, 32-bit (DWORD) r0-r3 values)\n                     */\n\n                    \"push {fp, lr}\\n\\t\"             /* Save frame pointer and return address (stack still aligned to 8 bytes) */\n                    \"mov fp, sp\\n\\t\"                /* Save stack pointer as our frame for cleaning the stack on return */\n\n                    \"lsls r1, r1, #2\\n\\t\"           /* r1 = nb_stk_args * sizeof(DWORD) */\n                    \"beq 1f\\n\\t\"                    /* Skip allocation if no stack args */\n                    \"add r2, r2, r1\\n\"              /* Calculate ending address of incoming stack data */\n                    \"2:\\tldr ip, [r2, #-4]!\\n\\t\"    /* Get next value */\n                    \"str ip, [sp, #-4]!\\n\\t\"        /* Push it on the stack */\n                    \"subs r1, r1, #4\\n\\t\"           /* Decrement count */\n                    \"bgt 2b\\n\\t\"                    /* Loop till done */\n\n                    \"1:\\n\\t\"\n#ifndef __SOFTFP__\n                    \"vldm r3!, {s0-s15}\\n\\t\"        /* Load the s0-s15/d0-d7 arguments */\n#endif\n                    \"mov ip, r0\\n\\t\"                /* Save the function call address to ip before we nuke r0 with arguments to pass */\n                    \"ldm r3, {r0-r3}\\n\\t\"           /* Load the r0-r3 arguments */\n\n                    \"blx ip\\n\\t\"                    /* Call the target function */\n\n                    \"mov sp, fp\\n\\t\"                /* Clean the stack using fp */\n                    \"pop {fp, pc}\\n\\t\"              /* Restore fp and return */\n                )\n__ASM_GLOBAL_FUNC( call_float_method,\n                   \"b \" __ASM_NAME(\"call_method\") )\n__ASM_GLOBAL_FUNC( call_double_method,\n                   \"b \" __ASM_NAME(\"call_method\") )\n\n#endif  /* __arm__ */\n\nstatic HRESULT userdefined_to_variantvt(ITypeInfo *tinfo, const TYPEDESC *tdesc, VARTYPE *vt)\n{\n    HRESULT hr = S_OK;\n    ITypeInfo *tinfo2 = NULL;\n    TYPEATTR *tattr = NULL;\n\n    hr = ITypeInfo_GetRefTypeInfo(tinfo, tdesc->u.hreftype, &tinfo2);\n    if (hr)\n    {\n        ERR(\"Could not get typeinfo of hreftype %x for VT_USERDEFINED, \"\n            \"hr = 0x%08x\\n\",\n              tdesc->u.hreftype, hr);\n        return hr;\n    }\n    hr = ITypeInfo_GetTypeAttr(tinfo2, &tattr);\n    if (hr)\n    {\n        ERR(\"ITypeInfo_GetTypeAttr failed, hr = 0x%08x\\n\", hr);\n        ITypeInfo_Release(tinfo2);\n        return hr;\n    }\n\n    switch (tattr->typekind)\n    {\n    case TKIND_ENUM:\n        *vt |= VT_I4;\n        break;\n\n    case TKIND_ALIAS:\n        hr = typedescvt_to_variantvt(tinfo2, &tattr->tdescAlias, vt);\n        break;\n\n    case TKIND_INTERFACE:\n        if (tattr->wTypeFlags & TYPEFLAG_FDISPATCHABLE)\n           *vt |= VT_DISPATCH;\n        else\n           *vt |= VT_UNKNOWN;\n        break;\n\n    case TKIND_DISPATCH:\n        *vt |= VT_DISPATCH;\n        break;\n\n    case TKIND_COCLASS:\n        *vt |= VT_DISPATCH;\n        break;\n\n    case TKIND_RECORD:\n        FIXME(\"TKIND_RECORD unhandled.\\n\");\n        hr = E_NOTIMPL;\n        break;\n\n    case TKIND_UNION:\n        FIXME(\"TKIND_UNION unhandled.\\n\");\n        hr = E_NOTIMPL;\n        break;\n\n    default:\n        FIXME(\"TKIND %d unhandled.\\n\",tattr->typekind);\n        hr = E_NOTIMPL;\n        break;\n    }\n    ITypeInfo_ReleaseTypeAttr(tinfo2, tattr);\n    ITypeInfo_Release(tinfo2);\n    return hr;\n}\n\nstatic HRESULT typedescvt_to_variantvt(ITypeInfo *tinfo, const TYPEDESC *tdesc, VARTYPE *vt)\n{\n    HRESULT hr = S_OK;\n\n    /* enforce only one level of pointer indirection */\n    if (!(*vt & VT_BYREF) && !(*vt & VT_ARRAY) && (tdesc->vt == VT_PTR))\n    {\n        tdesc = tdesc->u.lptdesc;\n\n        /* munch VT_PTR -> VT_USERDEFINED(interface) into VT_UNKNOWN or\n         * VT_DISPATCH and VT_PTR -> VT_PTR -> VT_USERDEFINED(interface) into \n         * VT_BYREF|VT_DISPATCH or VT_BYREF|VT_UNKNOWN */\n        if ((tdesc->vt == VT_USERDEFINED) ||\n            ((tdesc->vt == VT_PTR) && (tdesc->u.lptdesc->vt == VT_USERDEFINED)))\n        {\n            VARTYPE vt_userdefined = 0;\n            const TYPEDESC *tdesc_userdefined = tdesc;\n            if (tdesc->vt == VT_PTR)\n            {\n                vt_userdefined = VT_BYREF;\n                tdesc_userdefined = tdesc->u.lptdesc;\n            }\n            hr = userdefined_to_variantvt(tinfo, tdesc_userdefined, &vt_userdefined);\n            if ((hr == S_OK) && \n                (((vt_userdefined & VT_TYPEMASK) == VT_UNKNOWN) ||\n                 ((vt_userdefined & VT_TYPEMASK) == VT_DISPATCH)))\n            {\n                *vt |= vt_userdefined;\n                return S_OK;\n            }\n        }\n        *vt = VT_BYREF;\n    }\n\n    switch (tdesc->vt)\n    {\n    case VT_HRESULT:\n        *vt |= VT_ERROR;\n        break;\n    case VT_USERDEFINED:\n        hr = userdefined_to_variantvt(tinfo, tdesc, vt);\n        break;\n    case VT_VOID:\n    case VT_CARRAY:\n    case VT_PTR:\n    case VT_LPSTR:\n    case VT_LPWSTR:\n        ERR(\"cannot convert type %d into variant VT\\n\", tdesc->vt);\n        hr = DISP_E_BADVARTYPE;\n        break;\n    case VT_SAFEARRAY:\n        *vt |= VT_ARRAY;\n        hr = typedescvt_to_variantvt(tinfo, tdesc->u.lptdesc, vt);\n        break;\n    case VT_INT:\n        *vt |= VT_I4;\n        break;\n    case VT_UINT:\n        *vt |= VT_UI4;\n        break;\n    default:\n        *vt |= tdesc->vt;\n        break;\n    }\n    return hr;\n}\n\nstatic HRESULT get_iface_guid(ITypeInfo *tinfo, const TYPEDESC *tdesc, GUID *guid)\n{\n    ITypeInfo *tinfo2;\n    TYPEATTR *tattr;\n    HRESULT hres;\n\n    hres = ITypeInfo_GetRefTypeInfo(tinfo, tdesc->u.hreftype, &tinfo2);\n    if(FAILED(hres))\n        return hres;\n\n    hres = ITypeInfo_GetTypeAttr(tinfo2, &tattr);\n    if(FAILED(hres)) {\n        ITypeInfo_Release(tinfo2);\n        return hres;\n    }\n\n    switch(tattr->typekind) {\n    case TKIND_ALIAS:\n        hres = get_iface_guid(tinfo2, &tattr->tdescAlias, guid);\n        break;\n\n    case TKIND_INTERFACE:\n    case TKIND_DISPATCH:\n        *guid = tattr->guid;\n        break;\n\n    default:\n        ERR(\"Unexpected typekind %d\\n\", tattr->typekind);\n        hres = E_UNEXPECTED;\n    }\n\n    ITypeInfo_ReleaseTypeAttr(tinfo2, tattr);\n    ITypeInfo_Release(tinfo2);\n    return hres;\n}\n\nHRESULT WINAPI\nDispCallFunc16(\n    SEGPTR pvInstance, ULONG_PTR oVft, CALLCONV cc, VARTYPE vtReturn, UINT cActuals,\n    VARTYPE* prgvt, VARIANTARG16** prgpvarg, VARIANT16* pvargResult)\n{\n    int argspos, stack_offset;\n    void *func;\n    UINT i;\n    WORD *args;\n#define WRITE_DWORD(v) args[argspos++] = LOWORD(v);args[argspos++] = HIWORD(v)\n\n    TRACE(\"(%p, %ld, %d, %d, %d, %p, %p, %p (vt=%d))\\n\",\n        pvInstance, oVft, cc, vtReturn, cActuals, prgvt, prgpvarg,\n        pvargResult, V_VT(pvargResult));\n\n    if (cc != /*CC_STDCALL*/CC_MSCPASCAL && cc != CC_CDECL)\n    {\n        FIXME(\"unsupported calling convention %d\\n\",cc);\n        return E_INVALIDARG16;\n    }\n\n    /* maximum size for an argument is sizeof(VARIANT) */\n    args = heap_alloc(sizeof(VARIANT) * cActuals + sizeof(DWORD) * 2 );\n\n    /* start at 1 in case we need to pass a pointer to the return value as arg 0 */\n    argspos = 2;\n    if (pvInstance)\n    {\n        const FARPROC *vtable = *(FARPROC **)MapSL(pvInstance); /* We expect pvInstance to be segmented pointer.!? */\n        func = ((SEGPTR*)MapSL(vtable))[oVft/sizeof(void *)];\n        WRITE_DWORD((DWORD)pvInstance); /* the This pointer is always the first parameter */\n    }\n    else func = (void *)oVft;\n\n    for (i = 0; i < cActuals; i++)\n    {\n        VARIANT16 *arg = prgpvarg[i];\n\n        switch (prgvt[i])\n        {\n        case VT_EMPTY:\n            break;\n        case VT_I8:\n        case VT_UI8:\n        case VT_R8:\n        case VT_DATE:\n        case VT_CY:\n            memcpy( &args[argspos], &V_I8(arg), sizeof(V_I8(arg)) );\n            argspos += sizeof(V_I8(arg)) / sizeof(WORD);\n            break;\n        case VT_DECIMAL:\n        case VT_VARIANT:\n            memcpy( &args[argspos], arg, sizeof(*arg) );\n            argspos += sizeof(*arg) / sizeof(WORD);\n            break;\n        case VT_BOOL:  /* VT_BOOL is 16-bit but BOOL is 32-bit, needs to be extended */\n            args[argspos++] = V_BOOL(arg);\n            break;\n        case VT_UI4:\n        case VT_I4:\n            WRITE_DWORD(V_UI4(arg));\n            break;\n        case VT_UI2:\n        case VT_I2:\n            args[argspos++] = V_UI2(arg);\n            break;\n        default:\n            WRITE_DWORD(V_UI4(arg));\n            break;\n        }\n        TRACE(\"arg %u: type %s %s\\n\", i, debugstr_vt(prgvt[i]), debugstr_variant16(arg));\n    }\n\n    switch (vtReturn)\n    {\n    case VT_EMPTY:\n        call_method( func, argspos - 2, args + 2, &stack_offset );\n        break;\n    case VT_R4:\n        V_R4(pvargResult) = call_double_method( func, argspos - 2, args + 2, &stack_offset );\n        break;\n    case VT_R8:\n    case VT_DATE:\n        V_R8(pvargResult) = call_double_method( func, argspos - 2, args + 2, &stack_offset );\n        break;\n    case VT_DECIMAL:\n    case VT_VARIANT:\n        args[0] = (DWORD)pvargResult;  /* arg 0 is a pointer to the result */\n        call_method( func, argspos, args, &stack_offset );\n        break;\n    case VT_I8:\n    case VT_UI8:\n    case VT_CY:\n        V_UI8(pvargResult) = call_method( func, argspos - 2, args + 2, &stack_offset );\n        break;\n    case VT_HRESULT:\n        WARN(\"invalid return type %u\\n\", vtReturn);\n        heap_free( args );\n        return E_INVALIDARG16;\n    default:\n        V_UI4(pvargResult) = call_method( func, argspos - 2, args + 2, &stack_offset );\n        break;\n    }\n    heap_free( args );\n    if (stack_offset && cc == CC_STDCALL)\n    {\n        WARN( \"stack pointer off by %d\\n\", stack_offset );\n        return DISP_E_BADCALLEE;\n    }\n    if (vtReturn != VT_VARIANT) V_VT(pvargResult) = vtReturn;\n    TRACE(\"retval: %s\\n\", debugstr_variant16(pvargResult));\n    return S_OK;\n}\n\n/***********************************************************************\n *\t\tDispCallFunc (OLEAUT32.@)\n *\n * Invokes a function of the specified calling convention, passing the\n * specified arguments and returns the result.\n *\n * PARAMS\n *  pvInstance  [I] Optional pointer to the instance whose function to invoke.\n *  oVft        [I] The offset in the vtable. See notes.\n *  cc          [I] Calling convention of the function to call.\n *  vtReturn    [I] The return type of the function.\n *  cActuals    [I] Number of parameters.\n *  prgvt       [I] The types of the parameters to pass. This is used for sizing only.\n *  prgpvarg    [I] The arguments to pass.\n *  pvargResult [O] The return value of the function. Can be NULL.\n *\n * RETURNS\n *  Success: S_OK.\n *  Failure: HRESULT code.\n *\n * NOTES\n *  The HRESULT return value of this function is not affected by the return\n *  value of the user supplied function, which is returned in pvargResult.\n *\n *  If pvInstance is NULL then a non-object function is to be called and oVft\n *  is the address of the function to call.\n *\n * The cc parameter can be one of the following values:\n *|CC_FASTCALL\n *|CC_CDECL\n *|CC_PASCAL\n *|CC_STDCALL\n *|CC_FPFASTCALL\n *|CC_SYSCALL\n *|CC_MPWCDECL\n *|CC_MPWPASCAL\n *\n */\nHRESULT WINAPI\nDispCallFunc(\n    void* pvInstance, ULONG_PTR oVft, CALLCONV cc, VARTYPE vtReturn, UINT cActuals,\n    VARTYPE* prgvt, VARIANTARG** prgpvarg, VARIANT* pvargResult)\n{\n#ifdef __i386__\n    int argspos, stack_offset;\n    void *func;\n    UINT i;\n    WORD *args;\n#define WRITE_DWORD(v) args[argspos++] = LOWORD(v);args[argspos++] = HIWORD(v)\n\n    TRACE(\"(%p, %ld, %d, %d, %d, %p, %p, %p (vt=%d))\\n\",\n        pvInstance, oVft, cc, vtReturn, cActuals, prgvt, prgpvarg,\n        pvargResult, V_VT(pvargResult));\n\n    if (cc != /*CC_STDCALL*/CC_MSCPASCAL && cc != CC_CDECL)\n    {\n        FIXME(\"unsupported calling convention %d\\n\",cc);\n        return E_INVALIDARG;\n    }\n\n    /* maximum size for an argument is sizeof(VARIANT) */\n    args = heap_alloc(sizeof(VARIANT) * cActuals + sizeof(DWORD) * 2 );\n\n    /* start at 1 in case we need to pass a pointer to the return value as arg 0 */\n    argspos = 2;\n    if (pvInstance)\n    {\n        const FARPROC *vtable = *(FARPROC **)MapSL(pvInstance); /* We expect pvInstance to be segmented pointer.!? */\n        func = ((SEGPTR*)MapSL(vtable))[oVft/sizeof(void *)];\n        WRITE_DWORD((DWORD)pvInstance); /* the This pointer is always the first parameter */\n    }\n    else func = (void *)oVft;\n\n    for (i = 0; i < cActuals; i++)\n    {\n        VARIANT *arg = prgpvarg[i];\n\n        switch (prgvt[i])\n        {\n        case VT_EMPTY:\n            break;\n        case VT_I8:\n        case VT_UI8:\n        case VT_R8:\n        case VT_DATE:\n        case VT_CY:\n            memcpy( &args[argspos], &V_I8(arg), sizeof(V_I8(arg)) );\n            argspos += sizeof(V_I8(arg)) / sizeof(WORD);\n            break;\n        case VT_DECIMAL:\n        case VT_VARIANT:\n            memcpy( &args[argspos], arg, sizeof(*arg) );\n            argspos += sizeof(*arg) / sizeof(WORD);\n            break;\n        case VT_BOOL:  /* VT_BOOL is 16-bit but BOOL is 32-bit, needs to be extended */\n            args[argspos++] = V_BOOL(arg);\n            break;\n        case VT_UI4:\n        case VT_I4:\n            WRITE_DWORD(V_UI4(arg));\n        case VT_UI2:\n        case VT_I2:\n            args[argspos++] = V_UI2(arg);\n            break;\n        default:\n            FIXME(\"unk type %s\\n\", debugstr_vt(V_VT(arg)));\n            break;\n        }\n        TRACE(\"arg %u: type %s %s\\n\", i, debugstr_vt(prgvt[i]), debugstr_variant(arg));\n    }\n\n    switch (vtReturn)\n    {\n    case VT_EMPTY:\n        call_method( func, argspos - 2, args + 2, &stack_offset );\n        break;\n    case VT_R4:\n        V_R4(pvargResult) = call_double_method( func, argspos - 2, args + 2, &stack_offset );\n        break;\n    case VT_R8:\n    case VT_DATE:\n        V_R8(pvargResult) = call_double_method( func, argspos - 2, args + 2, &stack_offset );\n        break;\n    case VT_DECIMAL:\n    case VT_VARIANT:\n        args[0] = (DWORD)pvargResult;  /* arg 0 is a pointer to the result */\n        call_method( func, argspos, args, &stack_offset );\n        break;\n    case VT_I8:\n    case VT_UI8:\n    case VT_CY:\n        V_UI8(pvargResult) = call_method( func, argspos - 2, args + 2, &stack_offset );\n        break;\n    case VT_HRESULT:\n        WARN(\"invalid return type %u\\n\", vtReturn);\n        heap_free( args );\n        return E_INVALIDARG;\n    default:\n        V_UI4(pvargResult) = call_method( func, argspos - 2, args + 2, &stack_offset );\n        break;\n    }\n    heap_free( args );\n    if (stack_offset && cc == CC_STDCALL)\n    {\n        WARN( \"stack pointer off by %d\\n\", stack_offset );\n        return DISP_E_BADCALLEE;\n    }\n    if (vtReturn != VT_VARIANT) V_VT(pvargResult) = vtReturn;\n    TRACE(\"retval: %s\\n\", debugstr_variant(pvargResult));\n    return S_OK;\n\n#elif defined(__x86_64__)\n    int argspos;\n    UINT i;\n    DWORD_PTR *args;\n    void *func;\n\n    TRACE(\"(%p, %ld, %d, %d, %d, %p, %p, %p (vt=%d))\\n\",\n          pvInstance, oVft, cc, vtReturn, cActuals, prgvt, prgpvarg,\n          pvargResult, V_VT(pvargResult));\n\n    if (cc != CC_STDCALL && cc != CC_CDECL)\n    {\n\tFIXME(\"unsupported calling convention %d\\n\",cc);\n        return E_INVALIDARG;\n    }\n\n    /* maximum size for an argument is sizeof(DWORD_PTR) */\n    args = heap_alloc( sizeof(DWORD_PTR) * (cActuals + 2) );\n\n    /* start at 1 in case we need to pass a pointer to the return value as arg 0 */\n    argspos = 1;\n    if (pvInstance)\n    {\n        const FARPROC *vtable = *(FARPROC **)pvInstance;\n        func = vtable[oVft/sizeof(void *)];\n        args[argspos++] = (DWORD_PTR)pvInstance; /* the This pointer is always the first parameter */\n    }\n    else func = (void *)oVft;\n\n    for (i = 0; i < cActuals; i++)\n    {\n        VARIANT *arg = prgpvarg[i];\n\n        switch (prgvt[i])\n        {\n        case VT_DECIMAL:\n        case VT_VARIANT:\n            args[argspos++] = (ULONG_PTR)arg;\n            break;\n        case VT_BOOL:  /* VT_BOOL is 16-bit but BOOL is 32-bit, needs to be extended */\n            args[argspos++] = V_BOOL(arg);\n            break;\n        default:\n            args[argspos++] = V_UI8(arg);\n            break;\n        }\n        TRACE(\"arg %u: type %s %s\\n\", i, debugstr_vt(prgvt[i]), debugstr_variant(arg));\n    }\n\n    switch (vtReturn)\n    {\n    case VT_R4:\n        V_R4(pvargResult) = call_double_method( func, argspos - 1, args + 1 );\n        break;\n    case VT_R8:\n    case VT_DATE:\n        V_R8(pvargResult) = call_double_method( func, argspos - 1, args + 1 );\n        break;\n    case VT_DECIMAL:\n    case VT_VARIANT:\n        args[0] = (DWORD_PTR)pvargResult;  /* arg 0 is a pointer to the result */\n        call_method( func, argspos, args );\n        break;\n    case VT_HRESULT:\n        WARN(\"invalid return type %u\\n\", vtReturn);\n        heap_free( args );\n        return E_INVALIDARG;\n    default:\n        V_UI8(pvargResult) = call_method( func, argspos - 1, args + 1 );\n        break;\n    }\n    heap_free( args );\n    if (vtReturn != VT_VARIANT) V_VT(pvargResult) = vtReturn;\n    TRACE(\"retval: %s\\n\", debugstr_variant(pvargResult));\n    return S_OK;\n\n#elif defined(__arm__)\n    int argspos;\n    void *func;\n    UINT i;\n    DWORD *args;\n    struct {\n#ifndef __SOFTFP__\n        union {\n            float s[16];\n            double d[8];\n        } sd;\n#endif\n        DWORD r[4];\n    } regs;\n    int rcount;     /* 32-bit register index count */\n#ifndef __SOFTFP__\n    int scount = 0; /* single-precision float register index count */\n    int dcount = 0; /* double-precision float register index count */\n#endif\n\n    TRACE(\"(%p, %ld, %d, %d, %d, %p, %p, %p (vt=%d))\\n\",\n        pvInstance, oVft, cc, vtReturn, cActuals, prgvt, prgpvarg, pvargResult, V_VT(pvargResult));\n\n    if (cc != CC_STDCALL && cc != CC_CDECL)\n    {\n        FIXME(\"unsupported calling convention %d\\n\",cc);\n        return E_INVALIDARG;\n    }\n\n    argspos = 0;\n    rcount = 0;\n\n    /* Determine if we need to pass a pointer for the return value as arg 0.  If so, do that */\n    /*  first as it will need to be in the 'r' registers:                                    */\n    switch (vtReturn)\n    {\n    case VT_DECIMAL:\n    case VT_VARIANT:\n        regs.r[rcount++] = (DWORD)pvargResult;  /* arg 0 is a pointer to the result */\n        break;\n    case VT_HRESULT:\n        WARN(\"invalid return type %u\\n\", vtReturn);\n        return E_INVALIDARG;\n    default:                    /* And all others are in 'r', 's', or 'd' registers or have no return value */\n        break;\n    }\n\n    if (pvInstance)\n    {\n        const FARPROC *vtable = *(FARPROC **)pvInstance;\n        func = vtable[oVft/sizeof(void *)];\n        regs.r[rcount++] = (DWORD)pvInstance; /* the This pointer is always the first parameter */\n    }\n    else func = (void *)oVft;\n\n    /* maximum size for an argument is sizeof(VARIANT).  Also allow for return pointer and stack alignment. */\n    args = heap_alloc( sizeof(VARIANT) * cActuals + sizeof(DWORD) * 4 );\n\n    for (i = 0; i < cActuals; i++)\n    {\n        VARIANT *arg = prgpvarg[i];\n        DWORD *pdwarg = (DWORD *)(arg);     /* a reinterpret_cast of the variant, used for copying structures when they are split between registers and stack */\n        int ntemp;              /* Used for counting words split between registers and stack */\n\n        switch (prgvt[i])\n        {\n        case VT_EMPTY:\n            break;\n        case VT_R8:             /* these must be 8-byte aligned, and put in 'd' regs or stack, as they are double-floats */\n        case VT_DATE:\n#ifndef __SOFTFP__\n            dcount = max( (scount + 1) / 2, dcount );\n            if (dcount < 8)\n            {\n                regs.sd.d[dcount++] = V_R8(arg);\n            }\n            else\n            {\n                argspos += (argspos % 2);   /* align argspos to 8-bytes */\n                memcpy( &args[argspos], &V_R8(arg), sizeof(V_R8(arg)) );\n                argspos += sizeof(V_R8(arg)) / sizeof(DWORD);\n            }\n            break;\n#endif\n        case VT_I8:             /* these must be 8-byte aligned, and put in 'r' regs or stack, as they are long-longs */\n        case VT_UI8:\n        case VT_CY:\n            if (rcount < 3)\n            {\n                rcount += (rcount % 2);     /* align rcount to 8-byte register pair */\n                memcpy( &regs.r[rcount], &V_UI8(arg), sizeof(V_UI8(arg)) );\n                rcount += sizeof(V_UI8(arg)) / sizeof(DWORD);\n            }\n            else\n            {\n                rcount = 4;                 /* Make sure we flag that all 'r' regs are full */\n                argspos += (argspos % 2);   /* align argspos to 8-bytes */\n                memcpy( &args[argspos], &V_UI8(arg), sizeof(V_UI8(arg)) );\n                argspos += sizeof(V_UI8(arg)) / sizeof(DWORD);\n            }\n            break;\n        case VT_DECIMAL:        /* these structures are 8-byte aligned, and put in 'r' regs or stack, can be split between the two */\n        case VT_VARIANT:\n            /* 8-byte align 'r' and/or stack: */\n            if (rcount < 3)\n                rcount += (rcount % 2);\n            else\n            {\n                rcount = 4;\n                argspos += (argspos % 2);\n            }\n            ntemp = sizeof(*arg) / sizeof(DWORD);\n            while (ntemp > 0)\n            {\n                if (rcount < 4)\n                    regs.r[rcount++] = *pdwarg++;\n                else\n                    args[argspos++] = *pdwarg++;\n                --ntemp;\n            }\n            break;\n        case VT_BOOL:  /* VT_BOOL is 16-bit but BOOL is 32-bit, needs to be extended */\n            if (rcount < 4)\n                regs.r[rcount++] = V_BOOL(arg);\n            else\n                args[argspos++] = V_BOOL(arg);\n            break;\n        case VT_R4:             /* these must be 4-byte aligned, and put in 's' regs or stack, as they are single-floats */\n#ifndef __SOFTFP__\n            if (!(scount % 2)) scount = max( scount, dcount * 2 );\n            if (scount < 16)\n                regs.sd.s[scount++] = V_R4(arg);\n            else\n                args[argspos++] = V_UI4(arg);\n            break;\n#endif\n        default:\n            if (rcount < 4)\n                regs.r[rcount++] = V_UI4(arg);\n            else\n                args[argspos++] = V_UI4(arg);\n            break;\n        }\n        TRACE(\"arg %u: type %s %s\\n\", i, debugstr_vt(prgvt[i]), debugstr_variant(arg));\n    }\n\n    argspos += (argspos % 2);   /* Make sure stack function alignment is 8-byte */\n\n    switch (vtReturn)\n    {\n    case VT_EMPTY:      /* EMPTY = no return value */\n    case VT_DECIMAL:    /* DECIMAL and VARIANT already have a pointer argument passed (see above) */\n    case VT_VARIANT:\n        call_method( func, argspos, args, (DWORD*)&regs );\n        break;\n    case VT_R4:\n        V_R4(pvargResult) = call_float_method( func, argspos, args, (DWORD*)&regs );\n        break;\n    case VT_R8:\n    case VT_DATE:\n        V_R8(pvargResult) = call_double_method( func, argspos, args, (DWORD*)&regs );\n        break;\n    case VT_I8:\n    case VT_UI8:\n    case VT_CY:\n        V_UI8(pvargResult) = call_method( func, argspos, args, (DWORD*)&regs );\n        break;\n    default:\n        V_UI4(pvargResult) = call_method( func, argspos, args, (DWORD*)&regs );\n        break;\n    }\n    heap_free( args );\n    if (vtReturn != VT_VARIANT) V_VT(pvargResult) = vtReturn;\n    TRACE(\"retval: %s\\n\", debugstr_variant(pvargResult));\n    return S_OK;\n\n#else\n    FIXME( \"(%p, %ld, %d, %d, %d, %p, %p, %p (vt=%d)): not implemented for this CPU\\n\",\n           pvInstance, oVft, cc, vtReturn, cActuals, prgvt, prgpvarg, pvargResult, V_VT(pvargResult));\n    return E_NOTIMPL;\n#endif\n}\n\nstatic inline BOOL func_restricted( const FUNCDESC *desc )\n{\n    return (desc->wFuncFlags & FUNCFLAG_FRESTRICTED) && (desc->memid >= 0);\n}\n\n#define INVBUF_ELEMENT_SIZE \\\n    (sizeof(VARIANTARG) + sizeof(VARIANTARG) + sizeof(VARIANTARG *) + sizeof(VARTYPE))\n#define INVBUF_GET_ARG_ARRAY(buffer, params) (buffer)\n#define INVBUF_GET_MISSING_ARG_ARRAY(buffer, params) \\\n    ((VARIANTARG *)((char *)(buffer) + sizeof(VARIANTARG) * (params)))\n#define INVBUF_GET_ARG_PTR_ARRAY(buffer, params) \\\n    ((VARIANTARG **)((char *)(buffer) + (sizeof(VARIANTARG) + sizeof(VARIANTARG)) * (params)))\n#define INVBUF_GET_ARG_TYPE_ARRAY(buffer, params) \\\n    ((VARTYPE *)((char *)(buffer) + (sizeof(VARIANTARG) + sizeof(VARIANTARG) + sizeof(VARIANTARG *)) * (params)))\n\n#define INVBUF_ELEMENT_SIZE16 \\\n    (sizeof(VARIANTARG16) + sizeof(VARIANTARG16) + sizeof(SEGPTR) + sizeof(VARTYPE))\n#define INVBUF_GET_ARG_ARRAY16(buffer, params) (buffer)\n#define INVBUF_GET_MISSING_ARG_ARRAY16(buffer, params) \\\n    ((VARIANTARG16 *)((char *)(buffer) + sizeof(VARIANTARG16) * (params)))\n#define INVBUF_GET_ARG_PTR_ARRAY16(buffer, params) \\\n    ((/*VARIANTARG16 * */SEGPTR *)((char *)(buffer) + (sizeof(VARIANTARG16) + sizeof(VARIANTARG16)) * (params)))\n#define INVBUF_GET_ARG_TYPE_ARRAY16(buffer, params) \\\n    ((VARTYPE *)((char *)(buffer) + (sizeof(VARIANTARG16) + sizeof(VARIANTARG16) + sizeof(VARIANTARG16 *)) * (params)))\n\nvoid map_bstr32_16(SEGPTR *a16, const BSTR *a32)\n{\n    UINT len;\n    int len16;\n    if (*a32 == NULL)\n    {\n        *a16 = 0;\n        return;\n    }\n    len = SysStringLen(*a32);\n    len16 = WideCharToMultiByte(CP_ACP, 0, *a32, len, NULL, 0, NULL, NULL);\n    *a16 = SysAllocStringLen16(NULL, len16);\n    WideCharToMultiByte(CP_ACP, 0, *a32, len, MapSL(*a16), len16, NULL, NULL);\n    ((char*)MapSL(*a16))[len16] = 0;\n}\nstatic HRESULT CDECL ITypeInfo_fnInvoke16(\n    /* ITypeInfo2 * */SEGPTR spiface,\n    /* VOID  * */SEGPTR pIUnk,\n    MEMBERID memid,\n    UINT16 wFlags,\n    /* DISPPARAMS  * */ SEGPTR spDispParams,\n    /* VARIANT  * */ SEGPTR spVarResult,\n    /* EXCEPINFO  * */ SEGPTR spExcepInfo,\n    /* UINT  * */SEGPTR spArgErr)\n{\n    ITypeInfo2 *iface = (ITypeInfo2*)get_interface32(spiface);\n    DISPPARAMS16 *pDispParams = (DISPPARAMS16*)MapSL(spDispParams);\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    VARIANT16 *pVarResult = (VARIANT16*)MapSL(spVarResult);\n    EXCEPINFO16 *pExcepInfo = (EXCEPINFO16*)MapSL(spExcepInfo);\n    UINT16 *pArgErr = (UINT16*)MapSL(spArgErr);\n    int i;\n    unsigned int var_index;\n    TYPEKIND type_kind;\n    HRESULT hres;\n    const TLBFuncDesc *pFuncInfo;\n    UINT fdc;\n\n    TRACE(\"(%p)(%p,id=%d,flags=0x%08x,%p,%p,%p,%p)\\n\",\n      This,pIUnk,memid,wFlags,pDispParams,pVarResult,pExcepInfo,pArgErr\n    );\n\n    if( This->typeattr.wTypeFlags & TYPEFLAG_FRESTRICTED )\n        return DISP_E_MEMBERNOTFOUND;\n\n    if (!pDispParams)\n    {\n        ERR(\"NULL pDispParams not allowed\\n\");\n        return E_INVALIDARG16;\n    }\n\n    dump_DispParms16(pDispParams);\n\n    if (pDispParams->cNamedArgs > pDispParams->cArgs)\n    {\n        ERR(\"named argument array cannot be bigger than argument array (%d/%d)\\n\",\n            pDispParams->cNamedArgs, pDispParams->cArgs);\n        return E_INVALIDARG16;\n    }\n\n    /* we do this instead of using GetFuncDesc since it will return a fake\n     * FUNCDESC for dispinterfaces and we want the real function description */\n    for (fdc = 0; fdc < This->typeattr.cFuncs; ++fdc){\n        pFuncInfo = &This->funcdescs[fdc];\n        if ((memid == pFuncInfo->funcdesc.memid) &&\n            (wFlags & pFuncInfo->funcdesc.invkind) &&\n            !func_restricted( &pFuncInfo->funcdesc ))\n            break;\n    }\n\n    if (fdc < This->typeattr.cFuncs) {\n        const FUNCDESC *func_desc = &pFuncInfo->funcdesc;\n\n        if (TRACE_ON(ole))\n        {\n            TRACE(\"invoking:\\n\");\n            dump_TLBFuncDescOne(pFuncInfo);\n        }\n        \n\tswitch (func_desc->funckind) {\n\tcase FUNC_PUREVIRTUAL:\n\tcase FUNC_VIRTUAL: {\n            void *buffer = heap_alloc_zero(INVBUF_ELEMENT_SIZE16 * func_desc->cParams);\n            VARIANT16 varresult;\n            VARIANT16 retval; /* pointer for storing byref retvals in */\n            VARIANTARG16 **prgpvarg = INVBUF_GET_ARG_PTR_ARRAY16(buffer, func_desc->cParams);\n            VARIANTARG16 *rgvarg = INVBUF_GET_ARG_ARRAY16(buffer, func_desc->cParams);\n            VARTYPE *rgvt = INVBUF_GET_ARG_TYPE_ARRAY16(buffer, func_desc->cParams);\n            UINT16 cNamedArgs = pDispParams->cNamedArgs;\n            DISPID *rgdispidNamedArgs = pDispParams->rgdispidNamedArgs;\n            UINT16 vargs_converted=0;\n\n            hres = S_OK;\n\n            if (func_desc->invkind & (INVOKE_PROPERTYPUT|INVOKE_PROPERTYPUTREF))\n            {\n                if (!cNamedArgs || (rgdispidNamedArgs[0] != DISPID_PROPERTYPUT))\n                {\n                    ERR(\"first named arg for property put invocation must be DISPID_PROPERTYPUT\\n\");\n                    hres = DISP_E_PARAMNOTFOUND;\n                    goto func_fail;\n                }\n            }\n\n            if (func_desc->cParamsOpt < 0 && cNamedArgs)\n            {\n                ERR(\"functions with the vararg attribute do not support named arguments\\n\");\n                hres = DISP_E_NONAMEDARGS;\n                goto func_fail;\n            }\n\n            for (i = 0; i < func_desc->cParams; i++)\n            {\n                TYPEDESC *tdesc = &func_desc->lprgelemdescParam[i].tdesc;\n                hres = hresult32_16(typedescvt_to_variantvt((ITypeInfo *)iface, tdesc, &rgvt[i]));\n                if (FAILED(hres))\n                    goto func_fail;\n            }\n\n            TRACE(\"changing args\\n\");\n            for (i = 0; i < func_desc->cParams; i++)\n            {\n                USHORT wParamFlags = func_desc->lprgelemdescParam[i].u.paramdesc.wParamFlags;\n                TYPEDESC *tdesc = &func_desc->lprgelemdescParam[i].tdesc;\n                VARIANTARG16 *src_arg;\n\n                if (wParamFlags & PARAMFLAG_FLCID)\n                {\n                    VARIANTARG16 *arg;\n                    arg = prgpvarg[i] = &rgvarg[i];\n                    V_VT(arg) = VT_I4;\n                    V_I4(arg) = This->pTypeLib->lcid;\n                    continue;\n                }\n\n                src_arg = NULL;\n\n                if (cNamedArgs)\n                {\n                    USHORT j;\n                    for (j = 0; j < cNamedArgs; j++)\n                        if (rgdispidNamedArgs[j] == i || (i == func_desc->cParams-1 && rgdispidNamedArgs[j] == DISPID_PROPERTYPUT))\n                        {\n                            src_arg = &((VARIANTARG16*)MapSL(pDispParams->rgvarg))[j];\n                            break;\n                        }\n                }\n\n                if (!src_arg && vargs_converted + cNamedArgs < pDispParams->cArgs)\n                {\n                    src_arg = &((VARIANTARG16*)MapSL(pDispParams->rgvarg))[pDispParams->cArgs - 1 - vargs_converted];\n                    vargs_converted++;\n                }\n\n                if (wParamFlags & PARAMFLAG_FRETVAL)\n                {\n                    /* under most conditions the caller is not allowed to\n                     * pass in a dispparam arg in the index of what would be\n                     * the retval parameter. however, there is an exception\n                     * where the extra parameter is used in an extra\n                     * IDispatch::Invoke below */\n                    if ((i < pDispParams->cArgs) &&\n                        ((func_desc->cParams != 1) || !pVarResult ||\n                         !(func_desc->invkind & INVOKE_PROPERTYGET)))\n                    {\n                        hres = DISP_E_BADPARAMCOUNT;\n                        break;\n                    }\n\n                    /* note: this check is placed so that if the caller passes\n                     * in a VARIANTARG for the retval we just ignore it, like\n                     * native does */\n                    if (i == func_desc->cParams - 1)\n                    {\n                        VARIANTARG16 *arg;\n                        arg = prgpvarg[i] = &rgvarg[i];\n                        memset(arg, 0, sizeof(*arg));\n                        V_VT(arg) = rgvt[i];\n                        memset(&retval, 0, sizeof(retval));\n                        V_BYREF(arg) = MapLS(&retval);\n                    }\n                    else\n                    {\n                        ERR(\"[retval] parameter must be the last parameter of the method (%d/%d)\\n\", i, func_desc->cParams);\n                        hres = E_UNEXPECTED16;\n                        break;\n                    }\n                }\n                else if (src_arg)\n                {\n                    TRACE(\"%s\\n\", debugstr_variant16(src_arg));\n\n                    if(rgvt[i]!=V_VT(src_arg))\n                    {\n                        if (rgvt[i] == VT_VARIANT)\n                            hres = VariantCopy16(&rgvarg[i], src_arg);\n                        else if (rgvt[i] == (VT_VARIANT | VT_BYREF))\n                        {\n                            if (rgvt[i] == V_VT(src_arg))\n                                V_VARIANTREF(&rgvarg[i]) = V_VARIANTREF(src_arg);\n                            else\n                            {\n                                VARIANTARG *missing_arg = INVBUF_GET_MISSING_ARG_ARRAY(buffer, func_desc->cParams);\n                                if (wParamFlags & PARAMFLAG_FIN)\n                                    hres = VariantCopy16(&missing_arg[i], src_arg);\n                                V_VARIANTREF(&rgvarg[i]) = &missing_arg[i];\n                            }\n                            V_VT(&rgvarg[i]) = rgvt[i];\n                        }\n                        else if ((rgvt[i] == (VT_VARIANT | VT_ARRAY) || rgvt[i] == (VT_VARIANT | VT_ARRAY | VT_BYREF)) && func_desc->cParamsOpt < 0)\n                        {\n                            SAFEARRAY16 *a;\n                            SEGPTR sega;\n                            SAFEARRAYBOUND16 bound;\n                            SEGPTR sv = 0;\n                            VARIANT16 *v;\n                            LONG j;\n                            bound.lLbound = 0;\n                            bound.cElements = pDispParams->cArgs-i;\n                            if (!(a = (SAFEARRAY16*)MapSL(sega = SafeArrayCreate16(VT_VARIANT, 1, &bound))))\n                            {\n                                ERR(\"SafeArrayCreate failed\\n\");\n                                break;\n                            }\n                            hres = SafeArrayAccessData16(a, (LPVOID)&sv);\n                            v = (VARIANT16*)MapSL(sv);\n                            if (hres != S_OK)\n                            {\n                                ERR(\"SafeArrayAccessData failed with %x\\n\", hres);\n                                SafeArrayDestroy16(a);\n                                break;\n                            }\n                            for (j = 0; j < bound.cElements; j++)\n                                VariantCopy16(&v[j], &((VARIANTARG16*)MapSL(pDispParams->rgvarg))[pDispParams->cArgs - 1 - i - j]);\n                            hres = SafeArrayUnaccessData16(a);\n                            if (hres != S_OK)\n                            {\n                                ERR(\"SafeArrayUnaccessData failed with %x\\n\", hres);\n                                SafeArrayDestroy16(a);\n                                break;\n                            }\n                            if (rgvt[i] & VT_BYREF)\n                                V_BYREF(&rgvarg[i]) = MapLS(&sega);\n                            else\n                                V_ARRAY(&rgvarg[i]) = sega;\n                            V_VT(&rgvarg[i]) = rgvt[i];\n                        }\n                        else if ((rgvt[i] & VT_BYREF) && !V_ISBYREF(src_arg))\n                        {\n                            VARIANTARG16 *missing_arg = INVBUF_GET_MISSING_ARG_ARRAY16(buffer, func_desc->cParams);\n                            if (wParamFlags & PARAMFLAG_FIN)\n                                hres = VariantChangeType16(&missing_arg[i], src_arg, 0, rgvt[i] & ~VT_BYREF);\n                            else\n                                V_VT(&missing_arg[i]) = rgvt[i] & ~VT_BYREF;\n                            V_BYREF(&rgvarg[i]) = &V_NONE(&missing_arg[i]);\n                            V_VT(&rgvarg[i]) = rgvt[i];\n                        }\n                        else if ((rgvt[i] & VT_BYREF) && (rgvt[i] == V_VT(src_arg)))\n                        {\n                            V_BYREF(&rgvarg[i]) = V_BYREF(src_arg);\n                            V_VT(&rgvarg[i]) = rgvt[i];\n                        }\n                        else\n                        {\n                            /* FIXME: this doesn't work for VT_BYREF arguments if\n                             * they are not the same type as in the paramdesc */\n                            V_VT(&rgvarg[i]) = V_VT(src_arg);\n                            hres = VariantChangeType16(&rgvarg[i], src_arg, 0, rgvt[i]);\n                            V_VT(&rgvarg[i]) = rgvt[i];\n                        }\n\n                        if (FAILED(hres))\n                        {\n                            ERR(\"failed to convert param %d to %s from %s\\n\", i,\n                                debugstr_vt(rgvt[i]), debugstr_variant(src_arg));\n                            break;\n                        }\n                        prgpvarg[i] = &rgvarg[i];\n                    }\n                    else\n                    {\n                        prgpvarg[i] = src_arg;\n                    }\n\n                    if((tdesc->vt == VT_USERDEFINED || (tdesc->vt == VT_PTR && tdesc->u.lptdesc->vt == VT_USERDEFINED))\n                       && (V_VT(prgpvarg[i]) == VT_DISPATCH || V_VT(prgpvarg[i]) == VT_UNKNOWN)\n                       && V_UNKNOWN(prgpvarg[i])) {\n                        SEGPTR userdefined_iface;\n                        GUID guid;\n\n                        hres = hresult32_16(get_iface_guid((ITypeInfo*)iface, tdesc->vt == VT_PTR ? tdesc->u.lptdesc : tdesc, &guid));\n                        if(FAILED(hres))\n                            break;\n\n                        hres = IUnknown16_QueryInterface(V_UNKNOWN(prgpvarg[i]), MapLS(&guid), MapLS((void**)&userdefined_iface));\n                        if(FAILED(hres)) {\n                            ERR(\"argument does not support %s interface\\n\", debugstr_guid(&guid));\n                            break;\n                        }\n\n                        IUnknown16_Release(V_UNKNOWN(prgpvarg[i]));\n                        V_UNKNOWN(prgpvarg[i]) = userdefined_iface;\n                    }\n                }\n                else if (wParamFlags & PARAMFLAG_FOPT)\n                {\n                    VARIANTARG16 *arg;\n                    arg = prgpvarg[i] = &rgvarg[i];\n                    if (wParamFlags & PARAMFLAG_FHASDEFAULT)\n                    {\n                        FIXME(\"wParamFlags & PARAMFLAG_FHASDEFAULT\\n\");\n                        /* hres = VariantCopy(arg, &func_desc->lprgelemdescParam[i].u.paramdesc.pparamdescex->varDefaultValue); */\n                        if (FAILED(hres))\n                            break;\n                    }\n                    else\n                    {\n                        VARIANTARG16 *missing_arg;\n                        /* if the function wants a pointer to a variant then\n                         * set that up, otherwise just pass the VT_ERROR in\n                         * the argument by value */\n                        if (rgvt[i] & VT_BYREF)\n                        {\n                            missing_arg = INVBUF_GET_MISSING_ARG_ARRAY16(buffer, func_desc->cParams) + i;\n                            V_VT(arg) = VT_VARIANT | VT_BYREF;\n                            V_VARIANTREF(arg) = MapLS(missing_arg);\n                        }\n                        else\n                            missing_arg = arg;\n                        V_VT(missing_arg) = VT_ERROR;\n                        V_ERROR(missing_arg) = DISP_E_PARAMNOTFOUND;\n                    }\n                }\n                else\n                {\n                    hres = DISP_E_BADPARAMCOUNT;\n                    break;\n                }\n            }\n            if (FAILED(hres)) goto func_fail; /* FIXME: we don't free changed types here */\n\n            /* VT_VOID is a special case for return types, so it is not\n             * handled in the general function */\n            if (func_desc->elemdescFunc.tdesc.vt == VT_VOID)\n                V_VT(&varresult) = VT_EMPTY;\n            else\n            {\n                V_VT(&varresult) = 0;\n                hres = hresult32_16(typedescvt_to_variantvt((ITypeInfo *)iface, &func_desc->elemdescFunc.tdesc, &V_VT(&varresult)));\n                if (FAILED(hres)) goto func_fail; /* FIXME: we don't free changed types here */\n            }\n\n            hres = DispCallFunc16(pIUnk, func_desc->oVft & 0xFFFC, func_desc->callconv,\n                                V_VT(&varresult), func_desc->cParams, rgvt,\n                                prgpvarg, &varresult);\n\n            vargs_converted = 0;\n\n            for (i = 0; i < func_desc->cParams; i++)\n            {\n                USHORT wParamFlags = func_desc->lprgelemdescParam[i].u.paramdesc.wParamFlags;\n                VARIANTARG16 *missing_arg = INVBUF_GET_MISSING_ARG_ARRAY16(buffer, func_desc->cParams);\n\n                if (wParamFlags & PARAMFLAG_FLCID)\n                    continue;\n                else if (wParamFlags & PARAMFLAG_FRETVAL)\n                {\n                    TRACE(\"[retval] value: %s\\n\", debugstr_variant16(prgpvarg[i]));\n\n                    if (pVarResult)\n                    {\n                        VariantInit16(pVarResult);\n                        /* deref return value */\n                        hres = VariantCopyInd16(pVarResult, prgpvarg[i]);\n                    }\n\n                    HRESULT VARIANT_ClearInd(VARIANTARG16 *pVarg);\n                    VARIANT_ClearInd(prgpvarg[i]);\n                }\n                else if (vargs_converted < pDispParams->cArgs)\n                {\n                    VARIANTARG16 *arg = &((VARIANTARG16*)MapSL(pDispParams->rgvarg))[pDispParams->cArgs - 1 - vargs_converted];\n                    if (wParamFlags & PARAMFLAG_FOUT)\n                    {\n                        if ((rgvt[i] & VT_BYREF) && !(V_VT(arg) & VT_BYREF))\n                        {\n                            hres = VariantChangeType(arg, &rgvarg[i], 0, V_VT(arg));\n\n                            if (FAILED(hres))\n                            {\n                                ERR(\"failed to convert param %d to vt %d\\n\", i,\n                                    V_VT(&((VARIANTARG16*)MapSL(pDispParams->rgvarg))[pDispParams->cArgs - 1 - vargs_converted]));\n                                break;\n                            }\n                        }\n                    }\n                    else if (V_VT(prgpvarg[i]) == (VT_VARIANT | VT_ARRAY) &&\n                             func_desc->cParamsOpt < 0 &&\n                             i == func_desc->cParams-1)\n                    {\n                        SAFEARRAY16 *a = (SAFEARRAY16*)MapSL(V_ARRAY(prgpvarg[i]));\n                        LONG j, ubound;\n                        SEGPTR sv = 0;\n                        VARIANT16 *v;\n                        hres = SafeArrayGetUBound16(a, 1, &ubound);\n                        if (hres != S_OK)\n                        {\n                            ERR(\"SafeArrayGetUBound failed with %x\\n\", hres);\n                            break;\n                        }\n                        hres = SafeArrayAccessData16(a, (LPVOID)&sv);\n                        if (hres != S_OK)\n                        {\n                            ERR(\"SafeArrayAccessData failed with %x\\n\", hres);\n                            break;\n                        }\n                        v = (VARIANT16*)MapSL(sv);\n                        for (j = 0; j <= ubound; j++)\n                            VariantClear16(&v[j]);\n                        hres = SafeArrayUnaccessData16(a);\n                        if (hres != S_OK)\n                        {\n                            ERR(\"SafeArrayUnaccessData failed with %x\\n\", hres);\n                            break;\n                        }\n                    }\n                    VariantClear16(&rgvarg[i]);\n                    vargs_converted++;\n                }\n                else if (wParamFlags & PARAMFLAG_FOPT)\n                {\n                    if (wParamFlags & PARAMFLAG_FHASDEFAULT)\n                        VariantClear16(&rgvarg[i]);\n                }\n\n                VariantClear16(&missing_arg[i]);\n            }\n\n            if ((V_VT(&varresult) == VT_ERROR) && FAILED(V_ERROR(&varresult)))\n            {\n                WARN(\"invoked function failed with error 0x%08x\\n\", V_ERROR(&varresult));\n                hres = DISP_E_EXCEPTION;\n                if (pExcepInfo)\n                {\n                    IErrorInfo *pErrorInfo;\n                    pExcepInfo->scode = V_ERROR(&varresult);\n                    if (GetErrorInfo(0, &pErrorInfo) == S_OK)\n                    {\n                        EXCEPINFO excepinfo32 = { 0 };\n                        IErrorInfo_GetDescription(pErrorInfo, &excepinfo32.bstrDescription);\n                        IErrorInfo_GetHelpFile(pErrorInfo, &excepinfo32.bstrHelpFile);\n                        IErrorInfo_GetSource(pErrorInfo, &excepinfo32.bstrSource);\n                        IErrorInfo_GetHelpContext(pErrorInfo, &pExcepInfo->dwHelpContext);\n                        map_bstr32_16(&pExcepInfo->bstrDescription, &excepinfo32.bstrDescription);\n                        map_bstr32_16(&pExcepInfo->bstrHelpFile, &excepinfo32.bstrHelpFile);\n                        map_bstr32_16(&pExcepInfo->bstrSource, &excepinfo32.bstrSource);\n\n                        IErrorInfo_Release(pErrorInfo);\n                    }\n                }\n            }\n            if (V_VT(&varresult) != VT_ERROR)\n            {\n                TRACE(\"varresult value: %s\\n\", debugstr_variant16(&varresult));\n\n                if (pVarResult)\n                {\n                    VariantClear16(pVarResult);\n                    *pVarResult = varresult;\n                }\n                else\n                    VariantClear16(&varresult);\n            }\n\n            if (SUCCEEDED(hres) && pVarResult && (func_desc->cParams == 1) &&\n                (func_desc->invkind & INVOKE_PROPERTYGET) &&\n                (func_desc->lprgelemdescParam[0].u.paramdesc.wParamFlags & PARAMFLAG_FRETVAL) &&\n                (pDispParams->cArgs != 0))\n            {\n                if (V_VT(pVarResult) == VT_DISPATCH)\n                {\n                    SEGPTR pDispatch = V_DISPATCH(pVarResult);\n                    /* Note: not VariantClear; we still need the dispatch\n                     * pointer to be valid */\n                    VariantInit(pVarResult);\n                    hres = IDispatch16_Invoke(pDispatch, DISPID_VALUE, MapLS(&IID_NULL),\n                        GetSystemDefaultLCID(), wFlags,\n                        spDispParams, spVarResult, spExcepInfo, spArgErr);\n                    IDispatch16_Release(pDispatch);\n                }\n                else\n                {\n                    VariantClear16(pVarResult);\n                    hres = DISP_E_NOTACOLLECTION;\n                }\n            }\n\nfunc_fail:\n            heap_free(buffer);\n            break;\n        }\n\tcase FUNC_DISPATCH:  {\n\t   SEGPTR disp;\n\n\t   hres = IUnknown16_QueryInterface(pIUnk,MapLS(&IID_IDispatch),MapLS((LPVOID)&disp));\n\t   if (SUCCEEDED(hres)) {\n               FIXME(\"Calling Invoke in IDispatch iface. untested!\\n\");\n               hres = IDispatch16_Invoke(\n                                     disp,memid,MapLS(&IID_NULL),LOCALE_USER_DEFAULT,wFlags,spDispParams,\n                                     spVarResult,spExcepInfo,spArgErr\n                                     );\n               if (FAILED(hres))\n                   FIXME(\"IDispatch::Invoke failed with %08x. (Could be not a real error?)\\n\", hres);\n               IDispatch16_Release(disp);\n           } else\n\t       FIXME(\"FUNC_DISPATCH used on object without IDispatch iface?\\n\");\n           break;\n\t}\n\tdefault:\n            FIXME(\"Unknown function invocation type %d\\n\", func_desc->funckind);\n            hres = E_FAIL16;\n            break;\n        }\n\n        TRACE(\"-- 0x%08x\\n\", hres);\n        return hres;\n\n    } else if(SUCCEEDED(hres = ITypeInfo2_GetVarIndexOfMemId(iface, memid, &var_index))) {\n        VARDESC *var_desc;\n\n        hres = ITypeInfo2_GetVarDesc(iface, var_index, &var_desc);\n        if(FAILED(hres)) return hresult32_16(hres);\n        \n        FIXME(\"varseek: Found memid, but variable-based invoking not supported\\n\");\n        dump_VARDESC(var_desc);\n        ITypeInfo2_ReleaseVarDesc(iface, var_desc);\n        return E_NOTIMPL16;\n    }\n\n    /* not found, look for it in inherited interfaces */\n    ITypeInfo2_GetTypeKind(iface, &type_kind);\n    if(type_kind == TKIND_INTERFACE || type_kind == TKIND_DISPATCH) {\n        if(This->impltypes) {\n            /* recursive search */\n            ITypeInfo *pTInfo;\n            hres = ITypeInfo2_GetRefTypeInfo(iface, This->impltypes[0].hRef, &pTInfo);\n            if(SUCCEEDED(hres)){\n                hres = ITypeInfo16_Invoke(iface32_16(&IID_ITypeInfo, pTInfo),pIUnk,memid,wFlags,spDispParams,spVarResult,spExcepInfo,spArgErr);\n                ITypeInfo_Release(pTInfo);\n                return hres;\n            }\n            WARN(\"Could not search inherited interface!\\n\");\n        }\n    }\n    WARN(\"did not find member id %d, flags 0x%x!\\n\", memid, wFlags);\n    return DISP_E_MEMBERNOTFOUND;\n}\n\nstatic HRESULT WINAPI ITypeInfo_fnInvoke(\n    ITypeInfo2 *iface,\n    VOID  *pIUnk,\n    MEMBERID memid,\n    UINT16 wFlags,\n    DISPPARAMS  *pDispParams,\n    VARIANT  *pVarResult,\n    EXCEPINFO  *pExcepInfo,\n    UINT  *pArgErr)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    int i;\n    unsigned int var_index;\n    TYPEKIND type_kind;\n    HRESULT hres;\n    const TLBFuncDesc *pFuncInfo;\n    UINT fdc;\n\n    TRACE(\"(%p)(%p,id=%d,flags=0x%08x,%p,%p,%p,%p)\\n\",\n      This,pIUnk,memid,wFlags,pDispParams,pVarResult,pExcepInfo,pArgErr\n    );\n\n    if( This->typeattr.wTypeFlags & TYPEFLAG_FRESTRICTED )\n        return DISP_E_MEMBERNOTFOUND;\n\n    if (!pDispParams)\n    {\n        ERR(\"NULL pDispParams not allowed\\n\");\n        return E_INVALIDARG;\n    }\n\n    dump_DispParms(pDispParams);\n\n    if (pDispParams->cNamedArgs > pDispParams->cArgs)\n    {\n        ERR(\"named argument array cannot be bigger than argument array (%d/%d)\\n\",\n            pDispParams->cNamedArgs, pDispParams->cArgs);\n        return E_INVALIDARG;\n    }\n\n    /* we do this instead of using GetFuncDesc since it will return a fake\n     * FUNCDESC for dispinterfaces and we want the real function description */\n    for (fdc = 0; fdc < This->typeattr.cFuncs; ++fdc){\n        pFuncInfo = &This->funcdescs[fdc];\n        if ((memid == pFuncInfo->funcdesc.memid) &&\n            (wFlags & pFuncInfo->funcdesc.invkind) &&\n            !func_restricted( &pFuncInfo->funcdesc ))\n            break;\n    }\n\n    if (fdc < This->typeattr.cFuncs) {\n        const FUNCDESC *func_desc = &pFuncInfo->funcdesc;\n\n        if (TRACE_ON(ole))\n        {\n            TRACE(\"invoking:\\n\");\n            dump_TLBFuncDescOne(pFuncInfo);\n        }\n        \n\tswitch (func_desc->funckind) {\n\tcase FUNC_PUREVIRTUAL:\n\tcase FUNC_VIRTUAL: {\n            void *buffer = heap_alloc_zero(INVBUF_ELEMENT_SIZE * func_desc->cParams);\n            VARIANT varresult;\n            VARIANT retval; /* pointer for storing byref retvals in */\n            VARIANTARG **prgpvarg = INVBUF_GET_ARG_PTR_ARRAY(buffer, func_desc->cParams);\n            VARIANTARG *rgvarg = INVBUF_GET_ARG_ARRAY(buffer, func_desc->cParams);\n            VARTYPE *rgvt = INVBUF_GET_ARG_TYPE_ARRAY(buffer, func_desc->cParams);\n            UINT cNamedArgs = pDispParams->cNamedArgs;\n            DISPID *rgdispidNamedArgs = pDispParams->rgdispidNamedArgs;\n            UINT vargs_converted=0;\n\n            hres = S_OK;\n\n            if (func_desc->invkind & (INVOKE_PROPERTYPUT|INVOKE_PROPERTYPUTREF))\n            {\n                if (!cNamedArgs || (rgdispidNamedArgs[0] != DISPID_PROPERTYPUT))\n                {\n                    ERR(\"first named arg for property put invocation must be DISPID_PROPERTYPUT\\n\");\n                    hres = DISP_E_PARAMNOTFOUND;\n                    goto func_fail;\n                }\n            }\n\n            if (func_desc->cParamsOpt < 0 && cNamedArgs)\n            {\n                ERR(\"functions with the vararg attribute do not support named arguments\\n\");\n                hres = DISP_E_NONAMEDARGS;\n                goto func_fail;\n            }\n\n            for (i = 0; i < func_desc->cParams; i++)\n            {\n                TYPEDESC *tdesc = &func_desc->lprgelemdescParam[i].tdesc;\n                hres = typedescvt_to_variantvt((ITypeInfo *)iface, tdesc, &rgvt[i]);\n                if (FAILED(hres))\n                    goto func_fail;\n            }\n\n            TRACE(\"changing args\\n\");\n            for (i = 0; i < func_desc->cParams; i++)\n            {\n                USHORT wParamFlags = func_desc->lprgelemdescParam[i].u.paramdesc.wParamFlags;\n                TYPEDESC *tdesc = &func_desc->lprgelemdescParam[i].tdesc;\n                VARIANTARG *src_arg;\n\n                if (wParamFlags & PARAMFLAG_FLCID)\n                {\n                    VARIANTARG *arg;\n                    arg = prgpvarg[i] = &rgvarg[i];\n                    V_VT(arg) = VT_I4;\n                    V_I4(arg) = This->pTypeLib->lcid;\n                    continue;\n                }\n\n                src_arg = NULL;\n\n                if (cNamedArgs)\n                {\n                    USHORT j;\n                    for (j = 0; j < cNamedArgs; j++)\n                        if (rgdispidNamedArgs[j] == i || (i == func_desc->cParams-1 && rgdispidNamedArgs[j] == DISPID_PROPERTYPUT))\n                        {\n                            src_arg = &pDispParams->rgvarg[j];\n                            break;\n                        }\n                }\n\n                if (!src_arg && vargs_converted + cNamedArgs < pDispParams->cArgs)\n                {\n                    src_arg = &pDispParams->rgvarg[pDispParams->cArgs - 1 - vargs_converted];\n                    vargs_converted++;\n                }\n\n                if (wParamFlags & PARAMFLAG_FRETVAL)\n                {\n                    /* under most conditions the caller is not allowed to\n                     * pass in a dispparam arg in the index of what would be\n                     * the retval parameter. however, there is an exception\n                     * where the extra parameter is used in an extra\n                     * IDispatch::Invoke below */\n                    if ((i < pDispParams->cArgs) &&\n                        ((func_desc->cParams != 1) || !pVarResult ||\n                         !(func_desc->invkind & INVOKE_PROPERTYGET)))\n                    {\n                        hres = DISP_E_BADPARAMCOUNT;\n                        break;\n                    }\n\n                    /* note: this check is placed so that if the caller passes\n                     * in a VARIANTARG for the retval we just ignore it, like\n                     * native does */\n                    if (i == func_desc->cParams - 1)\n                    {\n                        VARIANTARG *arg;\n                        arg = prgpvarg[i] = &rgvarg[i];\n                        memset(arg, 0, sizeof(*arg));\n                        V_VT(arg) = rgvt[i];\n                        memset(&retval, 0, sizeof(retval));\n                        V_BYREF(arg) = &retval;\n                    }\n                    else\n                    {\n                        ERR(\"[retval] parameter must be the last parameter of the method (%d/%d)\\n\", i, func_desc->cParams);\n                        hres = E_UNEXPECTED;\n                        break;\n                    }\n                }\n                else if (src_arg)\n                {\n                    TRACE(\"%s\\n\", debugstr_variant(src_arg));\n\n                    if(rgvt[i]!=V_VT(src_arg))\n                    {\n                        if (rgvt[i] == VT_VARIANT)\n                            hres = VariantCopy(&rgvarg[i], src_arg);\n                        else if (rgvt[i] == (VT_VARIANT | VT_BYREF))\n                        {\n                            if (rgvt[i] == V_VT(src_arg))\n                                V_VARIANTREF(&rgvarg[i]) = V_VARIANTREF(src_arg);\n                            else\n                            {\n                                VARIANTARG *missing_arg = INVBUF_GET_MISSING_ARG_ARRAY(buffer, func_desc->cParams);\n                                if (wParamFlags & PARAMFLAG_FIN)\n                                    hres = VariantCopy(&missing_arg[i], src_arg);\n                                V_VARIANTREF(&rgvarg[i]) = &missing_arg[i];\n                            }\n                            V_VT(&rgvarg[i]) = rgvt[i];\n                        }\n                        else if ((rgvt[i] == (VT_VARIANT | VT_ARRAY) || rgvt[i] == (VT_VARIANT | VT_ARRAY | VT_BYREF)) && func_desc->cParamsOpt < 0)\n                        {\n                            SAFEARRAY *a;\n                            SAFEARRAYBOUND bound;\n                            VARIANT *v;\n                            LONG j;\n                            bound.lLbound = 0;\n                            bound.cElements = pDispParams->cArgs-i;\n                            if (!(a = SafeArrayCreate(VT_VARIANT, 1, &bound)))\n                            {\n                                ERR(\"SafeArrayCreate failed\\n\");\n                                break;\n                            }\n                            hres = SafeArrayAccessData(a, (LPVOID)&v);\n                            if (hres != S_OK)\n                            {\n                                ERR(\"SafeArrayAccessData failed with %x\\n\", hres);\n                                SafeArrayDestroy(a);\n                                break;\n                            }\n                            for (j = 0; j < bound.cElements; j++)\n                                VariantCopy(&v[j], &pDispParams->rgvarg[pDispParams->cArgs - 1 - i - j]);\n                            hres = SafeArrayUnaccessData(a);\n                            if (hres != S_OK)\n                            {\n                                ERR(\"SafeArrayUnaccessData failed with %x\\n\", hres);\n                                SafeArrayDestroy(a);\n                                break;\n                            }\n                            if (rgvt[i] & VT_BYREF)\n                                V_BYREF(&rgvarg[i]) = &a;\n                            else\n                                V_ARRAY(&rgvarg[i]) = a;\n                            V_VT(&rgvarg[i]) = rgvt[i];\n                        }\n                        else if ((rgvt[i] & VT_BYREF) && !V_ISBYREF(src_arg))\n                        {\n                            VARIANTARG *missing_arg = INVBUF_GET_MISSING_ARG_ARRAY(buffer, func_desc->cParams);\n                            if (wParamFlags & PARAMFLAG_FIN)\n                                hres = VariantChangeType(&missing_arg[i], src_arg, 0, rgvt[i] & ~VT_BYREF);\n                            else\n                                V_VT(&missing_arg[i]) = rgvt[i] & ~VT_BYREF;\n                            V_BYREF(&rgvarg[i]) = &V_NONE(&missing_arg[i]);\n                            V_VT(&rgvarg[i]) = rgvt[i];\n                        }\n                        else if ((rgvt[i] & VT_BYREF) && (rgvt[i] == V_VT(src_arg)))\n                        {\n                            V_BYREF(&rgvarg[i]) = V_BYREF(src_arg);\n                            V_VT(&rgvarg[i]) = rgvt[i];\n                        }\n                        else\n                        {\n                            /* FIXME: this doesn't work for VT_BYREF arguments if\n                             * they are not the same type as in the paramdesc */\n                            V_VT(&rgvarg[i]) = V_VT(src_arg);\n                            hres = VariantChangeType(&rgvarg[i], src_arg, 0, rgvt[i]);\n                            V_VT(&rgvarg[i]) = rgvt[i];\n                        }\n\n                        if (FAILED(hres))\n                        {\n                            ERR(\"failed to convert param %d to %s from %s\\n\", i,\n                                debugstr_vt(rgvt[i]), debugstr_variant(src_arg));\n                            break;\n                        }\n                        prgpvarg[i] = &rgvarg[i];\n                    }\n                    else\n                    {\n                        prgpvarg[i] = src_arg;\n                    }\n\n                    if((tdesc->vt == VT_USERDEFINED || (tdesc->vt == VT_PTR && tdesc->u.lptdesc->vt == VT_USERDEFINED))\n                       && (V_VT(prgpvarg[i]) == VT_DISPATCH || V_VT(prgpvarg[i]) == VT_UNKNOWN)\n                       && V_UNKNOWN(prgpvarg[i])) {\n                        IUnknown *userdefined_iface;\n                        GUID guid;\n\n                        hres = get_iface_guid((ITypeInfo*)iface, tdesc->vt == VT_PTR ? tdesc->u.lptdesc : tdesc, &guid);\n                        if(FAILED(hres))\n                            break;\n\n                        hres = IUnknown_QueryInterface(V_UNKNOWN(prgpvarg[i]), &guid, (void**)&userdefined_iface);\n                        if(FAILED(hres)) {\n                            ERR(\"argument does not support %s interface\\n\", debugstr_guid(&guid));\n                            break;\n                        }\n\n                        IUnknown_Release(V_UNKNOWN(prgpvarg[i]));\n                        V_UNKNOWN(prgpvarg[i]) = userdefined_iface;\n                    }\n                }\n                else if (wParamFlags & PARAMFLAG_FOPT)\n                {\n                    VARIANTARG *arg;\n                    arg = prgpvarg[i] = &rgvarg[i];\n                    if (wParamFlags & PARAMFLAG_FHASDEFAULT)\n                    {\n                        hres = VariantCopy(arg, &func_desc->lprgelemdescParam[i].u.paramdesc.pparamdescex->varDefaultValue);\n                        if (FAILED(hres))\n                            break;\n                    }\n                    else\n                    {\n                        VARIANTARG *missing_arg;\n                        /* if the function wants a pointer to a variant then\n                         * set that up, otherwise just pass the VT_ERROR in\n                         * the argument by value */\n                        if (rgvt[i] & VT_BYREF)\n                        {\n                            missing_arg = INVBUF_GET_MISSING_ARG_ARRAY(buffer, func_desc->cParams) + i;\n                            V_VT(arg) = VT_VARIANT | VT_BYREF;\n                            V_VARIANTREF(arg) = missing_arg;\n                        }\n                        else\n                            missing_arg = arg;\n                        V_VT(missing_arg) = VT_ERROR;\n                        V_ERROR(missing_arg) = DISP_E_PARAMNOTFOUND;\n                    }\n                }\n                else\n                {\n                    hres = DISP_E_BADPARAMCOUNT;\n                    break;\n                }\n            }\n            if (FAILED(hres)) goto func_fail; /* FIXME: we don't free changed types here */\n\n            /* VT_VOID is a special case for return types, so it is not\n             * handled in the general function */\n            if (func_desc->elemdescFunc.tdesc.vt == VT_VOID)\n                V_VT(&varresult) = VT_EMPTY;\n            else\n            {\n                V_VT(&varresult) = 0;\n                hres = typedescvt_to_variantvt((ITypeInfo *)iface, &func_desc->elemdescFunc.tdesc, &V_VT(&varresult));\n                if (FAILED(hres)) goto func_fail; /* FIXME: we don't free changed types here */\n            }\n\n            hres = DispCallFunc(pIUnk, func_desc->oVft & 0xFFFC, func_desc->callconv,\n                                V_VT(&varresult), func_desc->cParams, rgvt,\n                                prgpvarg, &varresult);\n\n            vargs_converted = 0;\n\n            for (i = 0; i < func_desc->cParams; i++)\n            {\n                USHORT wParamFlags = func_desc->lprgelemdescParam[i].u.paramdesc.wParamFlags;\n                VARIANTARG *missing_arg = INVBUF_GET_MISSING_ARG_ARRAY(buffer, func_desc->cParams);\n\n                if (wParamFlags & PARAMFLAG_FLCID)\n                    continue;\n                else if (wParamFlags & PARAMFLAG_FRETVAL)\n                {\n                    TRACE(\"[retval] value: %s\\n\", debugstr_variant(prgpvarg[i]));\n\n                    if (pVarResult)\n                    {\n                        VariantInit(pVarResult);\n                        /* deref return value */\n                        hres = VariantCopyInd(pVarResult, prgpvarg[i]);\n                    }\n\n                    /* FIXME */\n                    HRESULT VARIANT_ClearInd(VARIANTARG16 *pVarg);\n                    VARIANT_ClearInd((VARIANTARG16*)prgpvarg[i]);\n                }\n                else if (vargs_converted < pDispParams->cArgs)\n                {\n                    VARIANTARG *arg = &pDispParams->rgvarg[pDispParams->cArgs - 1 - vargs_converted];\n                    if (wParamFlags & PARAMFLAG_FOUT)\n                    {\n                        if ((rgvt[i] & VT_BYREF) && !(V_VT(arg) & VT_BYREF))\n                        {\n                            hres = VariantChangeType(arg, &rgvarg[i], 0, V_VT(arg));\n\n                            if (FAILED(hres))\n                            {\n                                ERR(\"failed to convert param %d to vt %d\\n\", i,\n                                    V_VT(&pDispParams->rgvarg[pDispParams->cArgs - 1 - vargs_converted]));\n                                break;\n                            }\n                        }\n                    }\n                    else if (V_VT(prgpvarg[i]) == (VT_VARIANT | VT_ARRAY) &&\n                             func_desc->cParamsOpt < 0 &&\n                             i == func_desc->cParams-1)\n                    {\n                        SAFEARRAY *a = V_ARRAY(prgpvarg[i]);\n                        LONG j, ubound;\n                        VARIANT *v;\n                        hres = SafeArrayGetUBound(a, 1, &ubound);\n                        if (hres != S_OK)\n                        {\n                            ERR(\"SafeArrayGetUBound failed with %x\\n\", hres);\n                            break;\n                        }\n                        hres = SafeArrayAccessData(a, (LPVOID)&v);\n                        if (hres != S_OK)\n                        {\n                            ERR(\"SafeArrayAccessData failed with %x\\n\", hres);\n                            break;\n                        }\n                        for (j = 0; j <= ubound; j++)\n                            VariantClear(&v[j]);\n                        hres = SafeArrayUnaccessData(a);\n                        if (hres != S_OK)\n                        {\n                            ERR(\"SafeArrayUnaccessData failed with %x\\n\", hres);\n                            break;\n                        }\n                    }\n                    VariantClear(&rgvarg[i]);\n                    vargs_converted++;\n                }\n                else if (wParamFlags & PARAMFLAG_FOPT)\n                {\n                    if (wParamFlags & PARAMFLAG_FHASDEFAULT)\n                        VariantClear(&rgvarg[i]);\n                }\n\n                VariantClear(&missing_arg[i]);\n            }\n\n            if ((V_VT(&varresult) == VT_ERROR) && FAILED(V_ERROR(&varresult)))\n            {\n                WARN(\"invoked function failed with error 0x%08x\\n\", V_ERROR(&varresult));\n                hres = DISP_E_EXCEPTION;\n                if (pExcepInfo)\n                {\n                    IErrorInfo *pErrorInfo;\n                    pExcepInfo->scode = V_ERROR(&varresult);\n                    if (GetErrorInfo(0, &pErrorInfo) == S_OK)\n                    {\n                        IErrorInfo_GetDescription(pErrorInfo, &pExcepInfo->bstrDescription);\n                        IErrorInfo_GetHelpFile(pErrorInfo, &pExcepInfo->bstrHelpFile);\n                        IErrorInfo_GetSource(pErrorInfo, &pExcepInfo->bstrSource);\n                        IErrorInfo_GetHelpContext(pErrorInfo, &pExcepInfo->dwHelpContext);\n\n                        IErrorInfo_Release(pErrorInfo);\n                    }\n                }\n            }\n            if (V_VT(&varresult) != VT_ERROR)\n            {\n                TRACE(\"varresult value: %s\\n\", debugstr_variant(&varresult));\n\n                if (pVarResult)\n                {\n                    VariantClear(pVarResult);\n                    *pVarResult = varresult;\n                }\n                else\n                    VariantClear(&varresult);\n            }\n\n            if (SUCCEEDED(hres) && pVarResult && (func_desc->cParams == 1) &&\n                (func_desc->invkind & INVOKE_PROPERTYGET) &&\n                (func_desc->lprgelemdescParam[0].u.paramdesc.wParamFlags & PARAMFLAG_FRETVAL) &&\n                (pDispParams->cArgs != 0))\n            {\n                if (V_VT(pVarResult) == VT_DISPATCH)\n                {\n                    IDispatch *pDispatch = V_DISPATCH(pVarResult);\n                    /* Note: not VariantClear; we still need the dispatch\n                     * pointer to be valid */\n                    VariantInit(pVarResult);\n                    hres = IDispatch_Invoke(pDispatch, DISPID_VALUE, &IID_NULL,\n                        GetSystemDefaultLCID(), wFlags,\n                        pDispParams, pVarResult, pExcepInfo, pArgErr);\n                    IDispatch_Release(pDispatch);\n                }\n                else\n                {\n                    VariantClear(pVarResult);\n                    hres = DISP_E_NOTACOLLECTION;\n                }\n            }\n\nfunc_fail:\n            heap_free(buffer);\n            break;\n        }\n\tcase FUNC_DISPATCH:  {\n\t   IDispatch *disp;\n\n\t   hres = IUnknown_QueryInterface((LPUNKNOWN)pIUnk,&IID_IDispatch,(LPVOID*)&disp);\n\t   if (SUCCEEDED(hres)) {\n               FIXME(\"Calling Invoke in IDispatch iface. untested!\\n\");\n               hres = IDispatch_Invoke(\n                                     disp,memid,&IID_NULL,LOCALE_USER_DEFAULT,wFlags,pDispParams,\n                                     pVarResult,pExcepInfo,pArgErr\n                                     );\n               if (FAILED(hres))\n                   FIXME(\"IDispatch::Invoke failed with %08x. (Could be not a real error?)\\n\", hres);\n               IDispatch_Release(disp);\n           } else\n\t       FIXME(\"FUNC_DISPATCH used on object without IDispatch iface?\\n\");\n           break;\n\t}\n\tdefault:\n            FIXME(\"Unknown function invocation type %d\\n\", func_desc->funckind);\n            hres = E_FAIL;\n            break;\n        }\n\n        TRACE(\"-- 0x%08x\\n\", hres);\n        return hres;\n\n    } else if(SUCCEEDED(hres = ITypeInfo2_GetVarIndexOfMemId(iface, memid, &var_index))) {\n        VARDESC *var_desc;\n\n        hres = ITypeInfo2_GetVarDesc(iface, var_index, &var_desc);\n        if(FAILED(hres)) return hres;\n        \n        FIXME(\"varseek: Found memid, but variable-based invoking not supported\\n\");\n        dump_VARDESC(var_desc);\n        ITypeInfo2_ReleaseVarDesc(iface, var_desc);\n        return E_NOTIMPL;\n    }\n\n    /* not found, look for it in inherited interfaces */\n    ITypeInfo2_GetTypeKind(iface, &type_kind);\n    if(type_kind == TKIND_INTERFACE || type_kind == TKIND_DISPATCH) {\n        if(This->impltypes) {\n            /* recursive search */\n            ITypeInfo *pTInfo;\n            hres = ITypeInfo2_GetRefTypeInfo(iface, This->impltypes[0].hRef, &pTInfo);\n            if(SUCCEEDED(hres)){\n                hres = ITypeInfo_Invoke(pTInfo,pIUnk,memid,wFlags,pDispParams,pVarResult,pExcepInfo,pArgErr);\n                ITypeInfo_Release(pTInfo);\n                return hres;\n            }\n            WARN(\"Could not search inherited interface!\\n\");\n        }\n    }\n    WARN(\"did not find member id %d, flags 0x%x!\\n\", memid, wFlags);\n    return DISP_E_MEMBERNOTFOUND;\n}\n\n/* ITypeInfo::GetDocumentation\n *\n * Retrieves the documentation string, the complete Help file name and path,\n * and the context ID for the Help topic for a specified type description.\n *\n * (Can be tested by the Visual Basic Editor in Word for instance.)\n */\nstatic HRESULT WINAPI ITypeInfo_fnGetDocumentation( ITypeInfo2 *iface,\n        MEMBERID memid, BSTR  *pBstrName, BSTR  *pBstrDocString,\n        DWORD  *pdwHelpContext, BSTR  *pBstrHelpFile)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    const TLBFuncDesc *pFDesc;\n    const TLBVarDesc *pVDesc;\n    TRACE(\"(%p) memid %d Name(%p) DocString(%p)\"\n          \" HelpContext(%p) HelpFile(%p)\\n\",\n        This, memid, pBstrName, pBstrDocString, pdwHelpContext, pBstrHelpFile);\n    if(memid==MEMBERID_NIL){ /* documentation for the typeinfo */\n        if(pBstrName)\n            *pBstrName=SysAllocString(TLB_get_bstr(This->Name));\n        if(pBstrDocString)\n            *pBstrDocString=SysAllocString(TLB_get_bstr(This->DocString));\n        if(pdwHelpContext)\n            *pdwHelpContext=This->dwHelpContext;\n        if(pBstrHelpFile)\n            *pBstrHelpFile=SysAllocString(TLB_get_bstr(This->pTypeLib->HelpFile));\n        return S_OK;\n    }else {/* for a member */\n        pFDesc = TLB_get_funcdesc_by_memberid(This->funcdescs, This->typeattr.cFuncs, memid);\n        if(pFDesc){\n            if(pBstrName)\n              *pBstrName = SysAllocString(TLB_get_bstr(pFDesc->Name));\n            if(pBstrDocString)\n              *pBstrDocString=SysAllocString(TLB_get_bstr(pFDesc->HelpString));\n            if(pdwHelpContext)\n              *pdwHelpContext=pFDesc->helpcontext;\n            if(pBstrHelpFile)\n            {\n              if(pFDesc->HelpFile)\n                *pBstrHelpFile = SysAllocString(TLB_get_bstr(pFDesc->HelpFile));\n              else\n                *pBstrHelpFile = SysAllocString(TLB_get_bstr(This->pTypeLib->HelpFile));\n            }\n            return S_OK;\n        }\n        pVDesc = TLB_get_vardesc_by_memberid(This->vardescs, This->typeattr.cVars, memid);\n        if(pVDesc){\n            if(pBstrName)\n              *pBstrName = SysAllocString(TLB_get_bstr(pVDesc->Name));\n            if(pBstrDocString)\n              *pBstrDocString=SysAllocString(TLB_get_bstr(pVDesc->HelpString));\n            if(pdwHelpContext)\n              *pdwHelpContext=pVDesc->HelpContext;\n            if(pBstrHelpFile)\n            {\n              if(pVDesc->HelpFile)\n                *pBstrHelpFile = SysAllocString(TLB_get_bstr(pVDesc->HelpFile));\n              else\n                *pBstrHelpFile = SysAllocString(TLB_get_bstr(This->pTypeLib->HelpFile));\n            }\n            return S_OK;\n        }\n    }\n\n    if(This->impltypes &&\n       (This->typeattr.typekind == TKIND_INTERFACE || This->typeattr.typekind == TKIND_DISPATCH)) {\n        /* recursive search */\n        ITypeInfo *pTInfo;\n        HRESULT result;\n        result = ITypeInfo2_GetRefTypeInfo(iface, This->impltypes[0].hRef, &pTInfo);\n        if(SUCCEEDED(result)) {\n            result = ITypeInfo_GetDocumentation(pTInfo, memid, pBstrName,\n                pBstrDocString, pdwHelpContext, pBstrHelpFile);\n            ITypeInfo_Release(pTInfo);\n            return result;\n        }\n        WARN(\"Could not search inherited interface!\\n\");\n    }\n\n    WARN(\"member %d not found\\n\", memid);\n    return TYPE_E_ELEMENTNOTFOUND;\n}\n\n/*  ITypeInfo::GetDllEntry\n *\n * Retrieves a description or specification of an entry point for a function\n * in a DLL.\n */\nstatic HRESULT WINAPI ITypeInfo_fnGetDllEntry( ITypeInfo2 *iface, MEMBERID memid,\n        INVOKEKIND invKind, BSTR  *pBstrDllName, BSTR  *pBstrName,\n        WORD  *pwOrdinal)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    const TLBFuncDesc *pFDesc;\n\n    TRACE(\"(%p)->(memid %x, %d, %p, %p, %p)\\n\", This, memid, invKind, pBstrDllName, pBstrName, pwOrdinal);\n\n    if (pBstrDllName) *pBstrDllName = NULL;\n    if (pBstrName) *pBstrName = NULL;\n    if (pwOrdinal) *pwOrdinal = 0;\n\n    if (This->typeattr.typekind != TKIND_MODULE)\n        return TYPE_E_BADMODULEKIND;\n\n    pFDesc = TLB_get_funcdesc_by_memberid_and_invkind(This->funcdescs, This->typeattr.cFuncs, memid, invKind);\n    if(pFDesc){\n\t    dump_TypeInfo(This);\n\t    if (TRACE_ON(ole))\n\t\tdump_TLBFuncDescOne(pFDesc);\n\n\t    if (pBstrDllName)\n\t\t*pBstrDllName = SysAllocString(TLB_get_bstr(This->DllName));\n\n            if (!IS_INTRESOURCE(pFDesc->Entry) && (pFDesc->Entry != (void*)-1)) {\n\t\tif (pBstrName)\n\t\t    *pBstrName = SysAllocString(TLB_get_bstr(pFDesc->Entry));\n\t\tif (0)\n\t\t{\n\t\t    if (pwOrdinal)\n\t\t        *pwOrdinal = -1;\n\t\t}\n\t\treturn S_OK;\n\t    }\n\t    if (pBstrName)\n\t\t*pBstrName = NULL;\n\t    if (pwOrdinal)\n\t\t*pwOrdinal = LOWORD(pFDesc->Entry);\n\t    return S_OK;\n        }\n    return TYPE_E_ELEMENTNOTFOUND;\n}\n\n/* internal function to make the inherited interfaces' methods appear\n * part of the interface */\nstatic HRESULT ITypeInfoImpl_GetDispatchRefTypeInfo( ITypeInfo *iface,\n    HREFTYPE *hRefType, ITypeInfo  **ppTInfo)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo(iface);\n    HRESULT hr;\n\n    TRACE(\"%p, 0x%x\\n\", iface, *hRefType);\n\n    if (This->impltypes && (*hRefType & DISPATCH_HREF_MASK))\n    {\n        ITypeInfo *pSubTypeInfo;\n\n        hr = ITypeInfo_GetRefTypeInfo(iface, This->impltypes[0].hRef, &pSubTypeInfo);\n        if (FAILED(hr))\n            return hr;\n\n        hr = ITypeInfoImpl_GetDispatchRefTypeInfo(pSubTypeInfo,\n                                                  hRefType, ppTInfo);\n        ITypeInfo_Release(pSubTypeInfo);\n        if (SUCCEEDED(hr))\n            return hr;\n    }\n    *hRefType -= DISPATCH_HREF_OFFSET;\n\n    if (!(*hRefType & DISPATCH_HREF_MASK))\n        return ITypeInfo_GetRefTypeInfo(iface, *hRefType, ppTInfo);\n    else\n        return E_FAIL;\n}\n\nstruct search_res_tlb_params\n{\n    const GUID *guid;\n    ITypeLib *pTLib;\n};\n\nstatic BOOL CALLBACK search_res_tlb(HMODULE hModule, LPCWSTR lpszType, LPWSTR lpszName, LONG_PTR lParam)\n{\n    struct search_res_tlb_params *params = (LPVOID)lParam;\n    static const WCHAR formatW[] = {'\\\\','%','d',0};\n    WCHAR szPath[MAX_PATH+1];\n    ITypeLib *pTLib = NULL;\n    HRESULT ret;\n    DWORD len;\n\n    if (IS_INTRESOURCE(lpszName) == FALSE)\n        return TRUE;\n\n    if (!(len = GetModuleFileNameW(hModule, szPath, MAX_PATH)))\n        return TRUE;\n\n    if (snprintfW(szPath + len, ARRAY_SIZE(szPath) - len, formatW, LOWORD(lpszName)) < 0)\n        return TRUE;\n\n    ret = LoadTypeLibEx16Impl(szPath, REGKIND_NONE, &pTLib);\n    if (SUCCEEDED(ret))\n    {\n        ITypeLibImpl *impl = impl_from_ITypeLib(pTLib);\n        if (IsEqualGUID(params->guid, impl->guid))\n        {\n            params->pTLib = pTLib;\n            return FALSE; /* stop enumeration */\n        }\n        ITypeLib_Release(pTLib);\n    }\n\n    return TRUE;\n}\n\n#if 0\nstatic HRESULT WINAPI\nQueryPathOfRegTypeLib16(\n\tREFGUID guid,\t/* [in] Guid to get the key name for */\n\tWORD wMaj,\t/* [in] Major version */\n\tWORD wMin,\t/* [in] Minor version */\n\tLCID lcid,\t/* [in] Locale Id */\n\t/* BSTR16 */SEGPTR *path)\t/* [out] Destination for the registry key name */\n{\n\tchar\txguid[80];\n\tchar\ttypelibkey[100],pathname[260];\n\tLONG\tplen;\n        char   *ret;\n\n\tTRACE(\"\\n\");\n    *path = 0;\n\tif (HIWORD(guid)) {\n            sprintf( typelibkey, \"SOFTWARE\\\\Classes\\\\Typelib\\\\{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\\\\%d.%d\\\\%x\\\\win16\",\n                     guid->Data1, guid->Data2, guid->Data3,\n                     guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3],\n                     guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7],\n                     wMaj,wMin,lcid);\n\t} else {\n\t\tsprintf(xguid,\"<guid 0x%08x>\",(DWORD)guid);\n\t\tFIXME(\"(%s,%d,%d,0x%04x,%p),can't handle non-string guids.\\n\",xguid,wMaj,wMin,lcid,path);\n\t\treturn E_FAIL;\n\t}\n\tplen = sizeof(pathname);\n\tif (RegQueryValueA(HKEY_LOCAL_MACHINE,typelibkey,pathname,&plen) || !*pathname) {\n\t\t/* try again without lang specific id */\n\t\tif (SUBLANGID(lcid))\n\t\t\treturn QueryPathOfRegTypeLib16(guid,wMaj,wMin,PRIMARYLANGID(lcid),path);\n\n        plen = sizeof(pathname);\n        if (RegQueryValueA(HKEY_CURRENT_USER, typelibkey, pathname, &plen) || !*pathname) {\n            sprintf(typelibkey, \"Typelib\\\\{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\\\\%d.%d\\\\%x\\\\win16\",\n                guid->Data1, guid->Data2, guid->Data3,\n                guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3],\n                guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7],\n                wMaj, wMin, lcid);\n            plen = sizeof(pathname);\n            if (RegQueryValue16(HKEY_LOCAL_MACHINE, typelibkey, pathname, &plen)) {\n                if (lcid)\n                    return QueryPathOfRegTypeLib16(guid, wMaj, wMin, 0, path);\n                FIXME(\"key %s not found\\n\", typelibkey);\n                return E_FAIL;\n            }\n        }\n\t}\n    {\n        UINT len = MultiByteToWideChar(CP_ACP, 0, pathname, -1, NULL, 0);\n        *path = SysAllocStringLen(L\"\", len);\n        MultiByteToWideChar(CP_ACP, 0, pathname, -1, *path, len);\n    }\n    if (!*path) return E_FAIL;\n\treturn S_OK;\n}\nstatic HRESULT query_typelib_path(REFGUID guid, WORD wMaj, WORD wMin,\n    SYSKIND syskind, LCID lcid, BSTR *path, BOOL redir)\n{\n    HRESULT a = QueryPathOfRegTypeLib16(guid, wMaj, wMin, lcid, path);\n    return a;\n}\n#endif\n/* ITypeInfo::GetRefTypeInfo\n *\n * If a type description references other type descriptions, it retrieves\n * the referenced type descriptions.\n */\nstatic HRESULT WINAPI ITypeInfo_fnGetRefTypeInfo(\n\tITypeInfo2 *iface,\n        HREFTYPE hRefType,\n\tITypeInfo  **ppTInfo)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    HRESULT result = E_FAIL;\n\n    if(!ppTInfo)\n        return E_INVALIDARG;\n\n    if ((INT)hRefType < 0) {\n        ITypeInfoImpl *pTypeInfoImpl;\n\n        if (!(This->typeattr.wTypeFlags & TYPEFLAG_FDUAL) ||\n                !(This->typeattr.typekind == TKIND_INTERFACE ||\n                    This->typeattr.typekind == TKIND_DISPATCH))\n            return TYPE_E_ELEMENTNOTFOUND;\n\n        /* when we meet a DUAL typeinfo, we must create the alternate\n        * version of it.\n        */\n        pTypeInfoImpl = ITypeInfoImpl_Constructor();\n\n        *pTypeInfoImpl = *This;\n        pTypeInfoImpl->ref = 0;\n        list_init(&pTypeInfoImpl->custdata_list);\n\n        if (This->typeattr.typekind == TKIND_INTERFACE)\n            pTypeInfoImpl->typeattr.typekind = TKIND_DISPATCH;\n        else\n            pTypeInfoImpl->typeattr.typekind = TKIND_INTERFACE;\n\n        *ppTInfo = (ITypeInfo *)&pTypeInfoImpl->ITypeInfo2_iface;\n        /* the AddRef implicitly adds a reference to the parent typelib, which\n         * stops the copied data from being destroyed until the new typeinfo's\n         * refcount goes to zero, but we need to signal to the new instance to\n         * not free its data structures when it is destroyed */\n        pTypeInfoImpl->not_attached_to_typelib = TRUE;\n\n        ITypeInfo_AddRef(*ppTInfo);\n\n        result = S_OK;\n    } else if ((hRefType & DISPATCH_HREF_MASK) &&\n        (This->typeattr.typekind == TKIND_DISPATCH))\n    {\n        HREFTYPE href_dispatch = hRefType;\n        result = ITypeInfoImpl_GetDispatchRefTypeInfo((ITypeInfo *)iface, &href_dispatch, ppTInfo);\n    } else {\n        TLBRefType *ref_type;\n        ITypeLib *pTLib = NULL;\n        UINT i;\n\n        if(!(hRefType & 0x1)){\n            for(i = 0; i < This->pTypeLib->TypeInfoCount; ++i)\n            {\n                if (This->pTypeLib->typeinfos[i]->hreftype == (hRefType&(~0x3)))\n                {\n                    result = S_OK;\n                    *ppTInfo = (ITypeInfo*)&This->pTypeLib->typeinfos[i]->ITypeInfo2_iface;\n                    ITypeInfo_AddRef(*ppTInfo);\n                    goto end;\n                }\n            }\n        }\n\n        LIST_FOR_EACH_ENTRY(ref_type, &This->pTypeLib->ref_list, TLBRefType, entry)\n        {\n            if(ref_type->reference == (hRefType & (~0x3)))\n                break;\n        }\n        if(&ref_type->entry == &This->pTypeLib->ref_list)\n        {\n            FIXME(\"Can't find pRefType for ref %x\\n\", hRefType);\n            goto end;\n        }\n\n        if(ref_type->pImpTLInfo == TLB_REF_INTERNAL) {\n            UINT Index;\n            TRACE(\"internal reference\\n\");\n            result = ITypeInfo2_GetContainingTypeLib(iface, &pTLib, &Index);\n        } else {\n            if(ref_type->pImpTLInfo->pImpTypeLib) {\n                TRACE(\"typeinfo in imported typelib that is already loaded\\n\");\n                pTLib = (ITypeLib*)&ref_type->pImpTLInfo->pImpTypeLib->ITypeLib2_iface;\n                ITypeLib_AddRef(pTLib);\n                result = S_OK;\n            } else {\n                static const WCHAR TYPELIBW[] = {'T','Y','P','E','L','I','B',0};\n                struct search_res_tlb_params params;\n\n                TRACE(\"typeinfo in imported typelib that isn't already loaded\\n\");\n\n                /* Search in resource table */\n                params.guid  = TLB_get_guid_null(ref_type->pImpTLInfo->guid);\n                params.pTLib = NULL;\n                EnumResourceNamesW(NULL, TYPELIBW, search_res_tlb, (LONG_PTR)&params);\n                pTLib  = params.pTLib;\n                result = S_OK;\n\n                if (!pTLib)\n                {\n                    WCHAR *libnamW;\n                    char *libnam;\n                    /* Search on disk */\n                    result = query_typelib_path(TLB_get_guid_null(ref_type->pImpTLInfo->guid),\n                            ref_type->pImpTLInfo->wVersionMajor,\n                            ref_type->pImpTLInfo->wVersionMinor,\n                            This->pTypeLib->syskind,\n                            ref_type->pImpTLInfo->lcid, &libnam, TRUE);\n                    if (FAILED(result))\n                    {\n                        libnamW = HeapAlloc(GetProcessHeap(), 0, (wcslen(ref_type->pImpTLInfo->name) + 1) * sizeof(WCHAR));\n                        wcscpy(libnamW, ref_type->pImpTLInfo->name);\n                    }\n                    else\n                        libnamW = strdupAtoW(libnam);\n\n                    result = LoadTypeLib16Impl(libnamW, &pTLib);\n                    HeapFree(GetProcessHeap(), 0, libnamW);\n                }\n\n                if(SUCCEEDED(result)) {\n                    ref_type->pImpTLInfo->pImpTypeLib = impl_from_ITypeLib(pTLib);\n                    ITypeLib_AddRef(pTLib);\n                }\n            }\n        }\n        if(SUCCEEDED(result)) {\n            if(ref_type->index == TLB_REF_USE_GUID)\n                result = ITypeLib_GetTypeInfoOfGuid(pTLib, TLB_get_guid_null(ref_type->guid), ppTInfo);\n            else\n                result = ITypeLib_GetTypeInfo(pTLib, ref_type->index, ppTInfo);\n        }\n        if (pTLib != NULL)\n            ITypeLib_Release(pTLib);\n    }\n\nend:\n    TRACE(\"(%p) hreftype 0x%04x loaded %s (%p)\\n\", This, hRefType,\n          SUCCEEDED(result)? \"SUCCESS\":\"FAILURE\", *ppTInfo);\n    return result;\n}\n\nstatic CRITICAL_SECTION app_obj_section;\nstatic CRITICAL_SECTION_DEBUG app_obj_section_debug =\n{\n    0, 0, &app_obj_section,\n    { &app_obj_section_debug.ProcessLocksList, &app_obj_section_debug.ProcessLocksList },\n      0, 0, { (DWORD_PTR)(__FILE__ \": typelib app obj\") }\n};\nstatic CRITICAL_SECTION app_obj_section = { &app_obj_section_debug, -1, 0, 0, 0, 0 };\n\nstruct app_obj\n{\n    struct list entry;\n    GUID guid;\n    void *data;\n};\n\nstruct list app_obj_table = LIST_INIT(app_obj_table);\nvoid addressof_app_obj(GUID *guid, PVOID *ppv)\n{\n    struct app_obj *entry;\n    EnterCriticalSection(&app_obj_section);\n    LIST_FOR_EACH_ENTRY(entry, &app_obj_table, struct app_obj, entry)\n    {\n        if (IsEqualGUID(guid, &entry->guid))\n        {\n            *ppv = &entry->data;\n            LeaveCriticalSection(&app_obj_section);\n            return;\n        }\n    }\n    entry = (struct app_obj*)heap_alloc(sizeof(struct app_obj));\n    entry->guid = *guid;\n    entry->data = NULL;\n    list_add_tail(&app_obj_table, &entry->entry);\n    *ppv = &entry->data;\n    LeaveCriticalSection(&app_obj_section);\n}\n/* ITypeInfo::AddressOfMember\n *\n * Retrieves the addresses of static functions or variables, such as those\n * defined in a DLL.\n */\nstatic HRESULT WINAPI ITypeInfo_fnAddressOfMember( ITypeInfo2 *iface,\n        MEMBERID memid, INVOKEKIND invKind, PVOID *ppv)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    HRESULT hr;\n    BSTR dll, entry;\n    WORD ordinal;\n    HMODULE module;\n    HMODULE16 module16;\n\n    TRACE(\"(%p)->(0x%x, 0x%x, %p)\\n\", This, memid, invKind, ppv);\n\n    if (memid == ID_DEFAULTINST)\n    {\n        if (This->typeattr.typekind == TKIND_COCLASS && This->typeattr.wTypeFlags & TYPEFLAG_FAPPOBJECT)\n        {\n            addressof_app_obj(&This->guid, ppv);\n            *ppv = MapLS(*ppv);\n            return S_OK;\n        }\n        else\n        {\n            return TYPE_E_ELEMENTNOTFOUND;\n        }\n    }\n\n    hr = ITypeInfo2_GetDllEntry(iface, memid, invKind, &dll, &entry, &ordinal);\n    if (FAILED(hr))\n        return hr;\n\n    module = LoadLibraryW(dll);\n    if (!module)\n    {\n        LPSTR moduleA;\n        INT len = WideCharToMultiByte(CP_ACP, 0, dll, -1, NULL, 0, NULL, NULL);\n        moduleA = heap_alloc(len);\n        WideCharToMultiByte(CP_ACP, 0, dll, -1, moduleA, len, NULL, NULL);\n\n        module16 = LoadLibrary16(moduleA);\n\n        heap_free(moduleA);\n    }\n    if (!module16)\n    {\n        ERR(\"couldn't load %s\\n\", debugstr_w(dll));\n        SysFreeString(dll);\n        SysFreeString(entry);\n        return STG_E_FILENOTFOUND;\n    }\n    /* FIXME: store library somewhere where we can free it */\n\n    if (entry)\n    {\n        LPSTR entryA;\n        INT len = WideCharToMultiByte(CP_ACP, 0, entry, -1, NULL, 0, NULL, NULL);\n        entryA = heap_alloc(len);\n        WideCharToMultiByte(CP_ACP, 0, entry, -1, entryA, len, NULL, NULL);\n\n        if (module16)\n        {\n            *ppv = GetProcAddress16(module16, entryA);\n        }\n        else\n        {\n            *ppv = GetProcAddress(module, entryA);\n        }\n        if (!*ppv)\n            ERR(\"function not found %s\\n\", debugstr_a(entryA));\n\n        heap_free(entryA);\n    }\n    else\n    {\n        if (module16)\n        {\n            *ppv = GetProcAddress16(module16, MAKEINTRESOURCEA(ordinal));\n        }\n        else\n        {\n            *ppv = GetProcAddress(module, MAKEINTRESOURCEA(ordinal));\n        }\n        if (!*ppv)\n            ERR(\"function not found %d\\n\", ordinal);\n    }\n\n    SysFreeString(dll);\n    SysFreeString(entry);\n\n    if (!*ppv)\n        return TYPE_E_DLLFUNCTIONNOTFOUND;\n\n    return S_OK;\n}\n\n/* ITypeInfo::CreateInstance\n *\n * Creates a new instance of a type that describes a component object class\n * (coclass).\n */\nstatic HRESULT WINAPI ITypeInfo_fnCreateInstance( ITypeInfo2 *iface,\n        IUnknown *pOuterUnk, REFIID riid, VOID  **ppvObj)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    HRESULT hr;\n    TYPEATTR *pTA;\n\n    TRACE(\"(%p)->(%p, %s, %p)\\n\", This, pOuterUnk, debugstr_guid(riid), ppvObj);\n\n    *ppvObj = NULL;\n\n    if(pOuterUnk)\n    {\n        WARN(\"Not able to aggregate\\n\");\n        return CLASS_E_NOAGGREGATION;\n    }\n\n    hr = ITypeInfo2_GetTypeAttr(iface, &pTA);\n    if(FAILED(hr)) return hr;\n\n    if(pTA->typekind != TKIND_COCLASS)\n    {\n        WARN(\"CreateInstance on typeinfo of type %x\\n\", pTA->typekind);\n        hr = E_INVALIDARG;\n        goto end;\n    }\n\n    hr = S_FALSE;\n    if(pTA->wTypeFlags & TYPEFLAG_FAPPOBJECT)\n    {\n        IUnknown *pUnk;\n        hr = GetActiveObject(&pTA->guid, NULL, &pUnk);\n        TRACE(\"GetActiveObject rets %08x\\n\", hr);\n        if(hr == S_OK)\n        {\n            hr = IUnknown_QueryInterface(pUnk, riid, ppvObj);\n            IUnknown_Release(pUnk);\n        }\n    }\n\n    if(hr != S_OK)\n        hr = CoCreateInstance(&pTA->guid, NULL,\n                              CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER,\n                              riid, ppvObj);\n\nend:\n    ITypeInfo2_ReleaseTypeAttr(iface, pTA);\n    return hr;\n}\n\n/* ITypeInfo::GetMops\n *\n * Retrieves marshalling information.\n */\nstatic HRESULT WINAPI ITypeInfo_fnGetMops( ITypeInfo2 *iface, MEMBERID memid,\n\t\t\t\tBSTR  *pBstrMops)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    FIXME(\"(%p %d) stub!\\n\", This, memid);\n    *pBstrMops = NULL;\n    return S_OK;\n}\n\n/* ITypeInfo::GetContainingTypeLib\n *\n * Retrieves the containing type library and the index of the type description\n * within that type library.\n */\nstatic HRESULT WINAPI ITypeInfo_fnGetContainingTypeLib( ITypeInfo2 *iface,\n        ITypeLib  * *ppTLib, UINT  *pIndex)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n\n    /* If a pointer is null, we simply ignore it, the ATL in particular passes pIndex as 0 */\n    if (pIndex) {\n      *pIndex=This->index;\n      TRACE(\"returning pIndex=%d\\n\", *pIndex);\n    }\n\n    if (ppTLib) {\n      *ppTLib = (ITypeLib *)&This->pTypeLib->ITypeLib2_iface;\n      ITypeLib_AddRef(*ppTLib);\n      TRACE(\"returning ppTLib=%p\\n\", *ppTLib);\n    }\n\n    return S_OK;\n}\n\n/* ITypeInfo::ReleaseTypeAttr\n *\n * Releases a TYPEATTR previously returned by Get\n *\n */\nstatic void WINAPI ITypeInfo_fnReleaseTypeAttr( ITypeInfo2 *iface,\n        TYPEATTR* pTypeAttr)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    TRACE(\"(%p)->(%p)\\n\", This, pTypeAttr);\n    heap_free(pTypeAttr);\n}\n\n/* ITypeInfo::ReleaseFuncDesc\n *\n * Releases a FUNCDESC previously returned by GetFuncDesc. *\n */\nstatic void WINAPI ITypeInfo_fnReleaseFuncDesc(\n\tITypeInfo2 *iface,\n        FUNCDESC *pFuncDesc)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    SHORT i;\n\n    TRACE(\"(%p)->(%p)\\n\", This, pFuncDesc);\n\n    for (i = 0; i < pFuncDesc->cParams; i++)\n        TLB_FreeElemDesc(&pFuncDesc->lprgelemdescParam[i]);\n    TLB_FreeElemDesc(&pFuncDesc->elemdescFunc);\n\n    SysFreeString((BSTR)pFuncDesc);\n}\n\n/* ITypeInfo::ReleaseVarDesc\n *\n * Releases a VARDESC previously returned by GetVarDesc.\n */\nstatic void WINAPI ITypeInfo_fnReleaseVarDesc( ITypeInfo2 *iface,\n        VARDESC *pVarDesc)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    TRACE(\"(%p)->(%p)\\n\", This, pVarDesc);\n\n    TLB_FreeVarDesc(pVarDesc);\n}\n\n/* ITypeInfo2::GetTypeKind\n *\n * Returns the TYPEKIND enumeration quickly, without doing any allocations.\n *\n */\nstatic HRESULT WINAPI ITypeInfo2_fnGetTypeKind( ITypeInfo2 * iface,\n    TYPEKIND *pTypeKind)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    *pTypeKind = This->typeattr.typekind;\n    TRACE(\"(%p) type 0x%0x\\n\", This,*pTypeKind);\n    return S_OK;\n}\n\n/* ITypeInfo2::GetTypeFlags\n *\n * Returns the type flags without any allocations. This returns a DWORD type\n * flag, which expands the type flags without growing the TYPEATTR (type\n * attribute).\n *\n */\nstatic HRESULT WINAPI ITypeInfo2_fnGetTypeFlags( ITypeInfo2 *iface, ULONG *pTypeFlags)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    *pTypeFlags=This->typeattr.wTypeFlags;\n    TRACE(\"(%p) flags 0x%x\\n\", This,*pTypeFlags);\n    return S_OK;\n}\n\n/* ITypeInfo2::GetFuncIndexOfMemId\n * Binds to a specific member based on a known DISPID, where the member name\n * is not known (for example, when binding to a default member).\n *\n */\nstatic HRESULT WINAPI ITypeInfo2_fnGetFuncIndexOfMemId( ITypeInfo2 * iface,\n    MEMBERID memid, INVOKEKIND invKind, UINT *pFuncIndex)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    UINT fdc;\n    HRESULT result;\n\n    for (fdc = 0; fdc < This->typeattr.cFuncs; ++fdc){\n        const TLBFuncDesc *pFuncInfo = &This->funcdescs[fdc];\n        if(memid == pFuncInfo->funcdesc.memid && (invKind & pFuncInfo->funcdesc.invkind))\n            break;\n    }\n    if(fdc < This->typeattr.cFuncs) {\n        *pFuncIndex = fdc;\n        result = S_OK;\n    } else\n        result = TYPE_E_ELEMENTNOTFOUND;\n\n    TRACE(\"(%p) memid 0x%08x invKind 0x%04x -> %s\\n\", This,\n          memid, invKind, SUCCEEDED(result) ? \"SUCCESS\" : \"FAILED\");\n    return result;\n}\n\n/* TypeInfo2::GetVarIndexOfMemId\n *\n * Binds to a specific member based on a known DISPID, where the member name\n * is not known (for example, when binding to a default member).\n *\n */\nstatic HRESULT WINAPI ITypeInfo2_fnGetVarIndexOfMemId( ITypeInfo2 * iface,\n    MEMBERID memid, UINT *pVarIndex)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    TLBVarDesc *pVarInfo;\n\n    TRACE(\"%p %d %p\\n\", iface, memid, pVarIndex);\n\n    pVarInfo = TLB_get_vardesc_by_memberid(This->vardescs, This->typeattr.cVars, memid);\n    if(!pVarInfo)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    *pVarIndex = (pVarInfo - This->vardescs);\n\n    return S_OK;\n}\n\n/* ITypeInfo2::GetCustData\n *\n * Gets the custom data\n */\nstatic HRESULT WINAPI ITypeInfo2_fnGetCustData(\n\tITypeInfo2 * iface,\n\tREFGUID guid,\n\tVARIANT *pVarVal)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    TLBCustData *pCData;\n\n    TRACE(\"%p %s %p\\n\", This, debugstr_guid(guid), pVarVal);\n\n    if(!guid || !pVarVal)\n        return E_INVALIDARG;\n\n    pCData = TLB_get_custdata_by_guid(This->pcustdata_list, guid);\n\n    VariantInit( pVarVal);\n    if (pCData)\n        VariantCopy( pVarVal, &pCData->data);\n    else\n        VariantClear( pVarVal );\n    return S_OK;\n}\n\n/* ITypeInfo2::GetFuncCustData\n *\n * Gets the custom data\n */\nstatic HRESULT WINAPI ITypeInfo2_fnGetFuncCustData(\n\tITypeInfo2 * iface,\n\tUINT index,\n\tREFGUID guid,\n\tVARIANT *pVarVal)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    TLBCustData *pCData;\n    TLBFuncDesc *pFDesc = &This->funcdescs[index];\n\n    TRACE(\"%p %u %s %p\\n\", This, index, debugstr_guid(guid), pVarVal);\n\n    if(index >= This->typeattr.cFuncs)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    pCData = TLB_get_custdata_by_guid(&pFDesc->custdata_list, guid);\n    if(!pCData)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    VariantInit(pVarVal);\n    VariantCopy(pVarVal, &pCData->data);\n\n    return S_OK;\n}\n\n/* ITypeInfo2::GetParamCustData\n *\n * Gets the custom data\n */\nstatic HRESULT WINAPI ITypeInfo2_fnGetParamCustData(\n\tITypeInfo2 * iface,\n\tUINT indexFunc,\n\tUINT indexParam,\n\tREFGUID guid,\n\tVARIANT *pVarVal)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    TLBCustData *pCData;\n    TLBFuncDesc *pFDesc = &This->funcdescs[indexFunc];\n\n    TRACE(\"%p %u %u %s %p\\n\", This, indexFunc, indexParam,\n            debugstr_guid(guid), pVarVal);\n\n    if(indexFunc >= This->typeattr.cFuncs)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    if(indexParam >= pFDesc->funcdesc.cParams)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    pCData = TLB_get_custdata_by_guid(&pFDesc->pParamDesc[indexParam].custdata_list, guid);\n    if(!pCData)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    VariantInit(pVarVal);\n    VariantCopy(pVarVal, &pCData->data);\n\n    return S_OK;\n}\n\n/* ITypeInfo2::GetVarCustData\n *\n * Gets the custom data\n */\nstatic HRESULT WINAPI ITypeInfo2_fnGetVarCustData(\n\tITypeInfo2 * iface,\n\tUINT index,\n\tREFGUID guid,\n\tVARIANT *pVarVal)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    TLBCustData *pCData;\n    TLBVarDesc *pVDesc = &This->vardescs[index];\n\n    TRACE(\"%p %s %p\\n\", This, debugstr_guid(guid), pVarVal);\n\n    if(index >= This->typeattr.cVars)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    pCData = TLB_get_custdata_by_guid(&pVDesc->custdata_list, guid);\n    if(!pCData)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    VariantInit(pVarVal);\n    VariantCopy(pVarVal, &pCData->data);\n\n    return S_OK;\n}\n\n/* ITypeInfo2::GetImplCustData\n *\n * Gets the custom data\n */\nstatic HRESULT WINAPI ITypeInfo2_fnGetImplTypeCustData(\n\tITypeInfo2 * iface,\n\tUINT index,\n\tREFGUID guid,\n\tVARIANT *pVarVal)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    TLBCustData *pCData;\n    TLBImplType *pRDesc = &This->impltypes[index];\n\n    TRACE(\"%p %u %s %p\\n\", This, index, debugstr_guid(guid), pVarVal);\n\n    if(index >= This->typeattr.cImplTypes)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    pCData = TLB_get_custdata_by_guid(&pRDesc->custdata_list, guid);\n    if(!pCData)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    VariantInit(pVarVal);\n    VariantCopy(pVarVal, &pCData->data);\n\n    return S_OK;\n}\n\n/* ITypeInfo2::GetDocumentation2\n *\n * Retrieves the documentation string, the complete Help file name and path,\n * the localization context to use, and the context ID for the library Help\n * topic in the Help file.\n *\n */\nstatic HRESULT WINAPI ITypeInfo2_fnGetDocumentation2(\n\tITypeInfo2 * iface,\n\tMEMBERID memid,\n\tLCID lcid,\n\tBSTR *pbstrHelpString,\n\tDWORD *pdwHelpStringContext,\n\tBSTR *pbstrHelpStringDll)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    const TLBFuncDesc *pFDesc;\n    const TLBVarDesc *pVDesc;\n    TRACE(\"(%p) memid %d lcid(0x%x)  HelpString(%p) \"\n          \"HelpStringContext(%p) HelpStringDll(%p)\\n\",\n          This, memid, lcid, pbstrHelpString, pdwHelpStringContext,\n          pbstrHelpStringDll );\n    /* the help string should be obtained from the helpstringdll,\n     * using the _DLLGetDocumentation function, based on the supplied\n     * lcid. Nice to do sometime...\n     */\n    if(memid==MEMBERID_NIL){ /* documentation for the typeinfo */\n        if(pbstrHelpString)\n            *pbstrHelpString=SysAllocString(TLB_get_bstr(This->Name));\n        if(pdwHelpStringContext)\n            *pdwHelpStringContext=This->dwHelpStringContext;\n        if(pbstrHelpStringDll)\n            *pbstrHelpStringDll=\n                SysAllocString(TLB_get_bstr(This->pTypeLib->HelpStringDll));/* FIXME */\n        return S_OK;\n    }else {/* for a member */\n        pFDesc = TLB_get_funcdesc_by_memberid(This->funcdescs, This->typeattr.cFuncs, memid);\n        if(pFDesc){\n            if(pbstrHelpString)\n                *pbstrHelpString=SysAllocString(TLB_get_bstr(pFDesc->HelpString));\n            if(pdwHelpStringContext)\n                *pdwHelpStringContext=pFDesc->HelpStringContext;\n            if(pbstrHelpStringDll)\n                *pbstrHelpStringDll=\n                    SysAllocString(TLB_get_bstr(This->pTypeLib->HelpStringDll));/* FIXME */\n            return S_OK;\n        }\n        pVDesc = TLB_get_vardesc_by_memberid(This->vardescs, This->typeattr.cVars, memid);\n        if(pVDesc){\n            if(pbstrHelpString)\n                *pbstrHelpString=SysAllocString(TLB_get_bstr(pVDesc->HelpString));\n            if(pdwHelpStringContext)\n                *pdwHelpStringContext=pVDesc->HelpStringContext;\n            if(pbstrHelpStringDll)\n                *pbstrHelpStringDll=\n                    SysAllocString(TLB_get_bstr(This->pTypeLib->HelpStringDll));/* FIXME */\n            return S_OK;\n        }\n    }\n    return TYPE_E_ELEMENTNOTFOUND;\n}\n\n/* ITypeInfo2::GetAllCustData\n *\n * Gets all custom data items for the Type info.\n *\n */\nstatic HRESULT WINAPI ITypeInfo2_fnGetAllCustData(\n\tITypeInfo2 * iface,\n\tCUSTDATA *pCustData)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n\n    TRACE(\"%p %p\\n\", This, pCustData);\n\n    return TLB_copy_all_custdata(This->pcustdata_list, pCustData);\n}\n\n/* ITypeInfo2::GetAllFuncCustData\n *\n * Gets all custom data items for the specified Function\n *\n */\nstatic HRESULT WINAPI ITypeInfo2_fnGetAllFuncCustData(\n\tITypeInfo2 * iface,\n\tUINT index,\n\tCUSTDATA *pCustData)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    TLBFuncDesc *pFDesc = &This->funcdescs[index];\n\n    TRACE(\"%p %u %p\\n\", This, index, pCustData);\n\n    if(index >= This->typeattr.cFuncs)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    return TLB_copy_all_custdata(&pFDesc->custdata_list, pCustData);\n}\n\n/* ITypeInfo2::GetAllParamCustData\n *\n * Gets all custom data items for the Functions\n *\n */\nstatic HRESULT WINAPI ITypeInfo2_fnGetAllParamCustData( ITypeInfo2 * iface,\n    UINT indexFunc, UINT indexParam, CUSTDATA *pCustData)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    TLBFuncDesc *pFDesc = &This->funcdescs[indexFunc];\n\n    TRACE(\"%p %u %u %p\\n\", This, indexFunc, indexParam, pCustData);\n\n    if(indexFunc >= This->typeattr.cFuncs)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    if(indexParam >= pFDesc->funcdesc.cParams)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    return TLB_copy_all_custdata(&pFDesc->pParamDesc[indexParam].custdata_list, pCustData);\n}\n\n/* ITypeInfo2::GetAllVarCustData\n *\n * Gets all custom data items for the specified Variable\n *\n */\nstatic HRESULT WINAPI ITypeInfo2_fnGetAllVarCustData( ITypeInfo2 * iface,\n    UINT index, CUSTDATA *pCustData)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    TLBVarDesc * pVDesc = &This->vardescs[index];\n\n    TRACE(\"%p %u %p\\n\", This, index, pCustData);\n\n    if(index >= This->typeattr.cVars)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    return TLB_copy_all_custdata(&pVDesc->custdata_list, pCustData);\n}\n\n/* ITypeInfo2::GetAllImplCustData\n *\n * Gets all custom data items for the specified implementation type\n *\n */\nstatic HRESULT WINAPI ITypeInfo2_fnGetAllImplTypeCustData(\n\tITypeInfo2 * iface,\n\tUINT index,\n\tCUSTDATA *pCustData)\n{\n    ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);\n    TLBImplType *pRDesc = &This->impltypes[index];\n\n    TRACE(\"%p %u %p\\n\", This, index, pCustData);\n\n    if(index >= This->typeattr.cImplTypes)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    return TLB_copy_all_custdata(&pRDesc->custdata_list, pCustData);\n}\n\nstatic const ITypeInfo2Vtbl tinfvt =\n{\n\n    ITypeInfo_fnQueryInterface,\n    ITypeInfo_fnAddRef,\n    ITypeInfo_fnRelease,\n\n    ITypeInfo_fnGetTypeAttr,\n    ITypeInfo_fnGetTypeComp,\n    ITypeInfo_fnGetFuncDesc,\n    ITypeInfo_fnGetVarDesc,\n    ITypeInfo_fnGetNames,\n    ITypeInfo_fnGetRefTypeOfImplType,\n    ITypeInfo_fnGetImplTypeFlags,\n    ITypeInfo_fnGetIDsOfNames,\n    ITypeInfo_fnInvoke,\n    ITypeInfo_fnGetDocumentation,\n    ITypeInfo_fnGetDllEntry,\n    ITypeInfo_fnGetRefTypeInfo,\n    ITypeInfo_fnAddressOfMember,\n    ITypeInfo_fnCreateInstance,\n    ITypeInfo_fnGetMops,\n    ITypeInfo_fnGetContainingTypeLib,\n    ITypeInfo_fnReleaseTypeAttr,\n    ITypeInfo_fnReleaseFuncDesc,\n    ITypeInfo_fnReleaseVarDesc,\n\n    ITypeInfo2_fnGetTypeKind,\n    ITypeInfo2_fnGetTypeFlags,\n    ITypeInfo2_fnGetFuncIndexOfMemId,\n    ITypeInfo2_fnGetVarIndexOfMemId,\n    ITypeInfo2_fnGetCustData,\n    ITypeInfo2_fnGetFuncCustData,\n    ITypeInfo2_fnGetParamCustData,\n    ITypeInfo2_fnGetVarCustData,\n    ITypeInfo2_fnGetImplTypeCustData,\n    ITypeInfo2_fnGetDocumentation2,\n    ITypeInfo2_fnGetAllCustData,\n    ITypeInfo2_fnGetAllFuncCustData,\n    ITypeInfo2_fnGetAllParamCustData,\n    ITypeInfo2_fnGetAllVarCustData,\n    ITypeInfo2_fnGetAllImplTypeCustData,\n};\n\nstatic ITypeLibImpl* TypeLibImpl_Constructor_stub(void)\n{\n    ITypeLibImpl* pTypeLibImpl;\n\n    pTypeLibImpl = heap_alloc_zero(sizeof(ITypeLibImpl));\n    if (!pTypeLibImpl) return NULL;\n\n    pTypeLibImpl->ITypeLib2_iface.lpVtbl = &tlbvt;\n    pTypeLibImpl->ITypeComp_iface.lpVtbl = &tlbtcvt;\n    pTypeLibImpl->ICreateTypeLib2_iface.lpVtbl = &CreateTypeLib2Vtbl;\n    pTypeLibImpl->ref = 1;\n\n    list_init(&pTypeLibImpl->implib_list);\n    list_init(&pTypeLibImpl->custdata_list);\n    list_init(&pTypeLibImpl->name_list);\n    list_init(&pTypeLibImpl->string_list);\n    list_init(&pTypeLibImpl->guid_list);\n    list_init(&pTypeLibImpl->ref_list);\n    pTypeLibImpl->dispatch_href = -1;\n\n    return pTypeLibImpl;\n}\n/******************************************************************************\n * CreateDispTypeInfo [OLEAUT32.31]\n *\n * Build type information for an object so it can be called through an\n * IDispatch interface.\n *\n * RETURNS\n *  Success: S_OK. pptinfo contains the created ITypeInfo object.\n *  Failure: E_INVALIDARG, if one or more arguments is invalid.\n *\n * NOTES\n *  This call allows an objects methods to be accessed through IDispatch, by\n *  building an ITypeInfo object that IDispatch can use to call through.\n */\nHRESULT WINAPI CreateDispTypeInfo16Impl(\n\tINTERFACEDATA *pidata, /* [I] Description of the interface to build type info for */\n\tLCID lcid, /* [I] Locale Id */\n\tITypeInfo **pptinfo) /* [O] Destination for created ITypeInfo object */\n{\n    ITypeInfoImpl *pTIClass, *pTIIface;\n    ITypeLibImpl *pTypeLibImpl;\n    unsigned int param, func;\n    TLBFuncDesc *pFuncDesc;\n    TLBRefType *ref;\n\n    TRACE(\"\\n\");\n    pTypeLibImpl = TypeLibImpl_Constructor();\n    if (!pTypeLibImpl) return E_FAIL;\n\n#if 0\n    pTypeLibImpl->TypeInfoCount = 2;\n#else\n    pTypeLibImpl->TypeInfoCount = 1;\n#endif\n    pTypeLibImpl->typeinfos = heap_alloc_zero(pTypeLibImpl->TypeInfoCount * sizeof(ITypeInfoImpl*));\n\n    pTIIface = pTypeLibImpl->typeinfos[0] = ITypeInfoImpl_Constructor();\n    pTIIface->pTypeLib = pTypeLibImpl;\n    pTIIface->index = 0;\n    pTIIface->Name = NULL;\n    pTIIface->dwHelpContext = -1;\n    pTIIface->guid = NULL;\n    pTIIface->typeattr.lcid = lcid;\n    pTIIface->typeattr.typekind = TKIND_INTERFACE;\n    pTIIface->typeattr.wMajorVerNum = 0;\n    pTIIface->typeattr.wMinorVerNum = 0;\n    pTIIface->typeattr.cbAlignment = 2;\n    pTIIface->typeattr.cbSizeInstance = -1;\n    pTIIface->typeattr.cbSizeVft = -1;\n    pTIIface->typeattr.cFuncs = 0;\n    pTIIface->typeattr.cImplTypes = 0;\n    pTIIface->typeattr.cVars = 0;\n    pTIIface->typeattr.wTypeFlags = 0;\n    pTIIface->hreftype = 0;\n\n    pTIIface->funcdescs = TLBFuncDesc_Alloc(pidata->cMembers);\n    pFuncDesc = pTIIface->funcdescs;\n    for(func = 0; func < pidata->cMembers; func++) {\n        METHODDATA *md = pidata->pmethdata + func;\n        pFuncDesc->Name = TLB_append_str(&pTypeLibImpl->name_list, md->szName);\n        pFuncDesc->funcdesc.memid = md->dispid;\n        pFuncDesc->funcdesc.lprgscode = NULL;\n        pFuncDesc->funcdesc.funckind = FUNC_VIRTUAL;\n        pFuncDesc->funcdesc.invkind = md->wFlags;\n        pFuncDesc->funcdesc.callconv = md->cc;\n        pFuncDesc->funcdesc.cParams = md->cArgs;\n        pFuncDesc->funcdesc.cParamsOpt = 0;\n        pFuncDesc->funcdesc.oVft = md->iMeth * sizeof(void *);\n        pFuncDesc->funcdesc.cScodes = 0;\n        pFuncDesc->funcdesc.wFuncFlags = 0;\n        pFuncDesc->funcdesc.elemdescFunc.tdesc.vt = md->vtReturn;\n        pFuncDesc->funcdesc.elemdescFunc.u.paramdesc.wParamFlags = PARAMFLAG_NONE;\n        pFuncDesc->funcdesc.elemdescFunc.u.paramdesc.pparamdescex = NULL;\n        pFuncDesc->funcdesc.lprgelemdescParam = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,\n                                                              md->cArgs * sizeof(ELEMDESC));\n        pFuncDesc->pParamDesc = TLBParDesc_Constructor(md->cArgs);\n        for(param = 0; param < md->cArgs; param++) {\n            pFuncDesc->funcdesc.lprgelemdescParam[param].tdesc.vt = md->ppdata[param].vt;\n            pFuncDesc->pParamDesc[param].Name = TLB_append_str(&pTypeLibImpl->name_list, md->ppdata[param].szName);\n        }\n        pFuncDesc->helpcontext = 0;\n        pFuncDesc->HelpStringContext = 0;\n        pFuncDesc->HelpString = NULL;\n        pFuncDesc->Entry = NULL;\n        list_init(&pFuncDesc->custdata_list);\n        pTIIface->typeattr.cFuncs++;\n        ++pFuncDesc;\n    }\n\n    dump_TypeInfo(pTIIface);\n\n#if 0\n    pTIClass = pTypeLibImpl->typeinfos[1] = ITypeInfoImpl_Constructor();\n    pTIClass->pTypeLib = pTypeLibImpl;\n    pTIClass->index = 1;\n    pTIClass->Name = NULL;\n    pTIClass->dwHelpContext = -1;\n    pTIClass->guid = NULL;\n    pTIClass->typeattr.lcid = lcid;\n    pTIClass->typeattr.typekind = TKIND_COCLASS;\n    pTIClass->typeattr.wMajorVerNum = 0;\n    pTIClass->typeattr.wMinorVerNum = 0;\n    pTIClass->typeattr.cbAlignment = 2;\n    pTIClass->typeattr.cbSizeInstance = -1;\n    pTIClass->typeattr.cbSizeVft = -1;\n    pTIClass->typeattr.cFuncs = 0;\n    pTIClass->typeattr.cImplTypes = 1;\n    pTIClass->typeattr.cVars = 0;\n    pTIClass->typeattr.wTypeFlags = 0;\n    pTIClass->hreftype = sizeof(MSFT_TypeInfoBase);\n\n    pTIClass->impltypes = TLBImplType_Alloc(1);\n\n    ref = heap_alloc_zero(sizeof(*ref));\n    ref->pImpTLInfo = TLB_REF_INTERNAL;\n    list_add_head(&pTypeLibImpl->ref_list, &ref->entry);\n\n    dump_TypeInfo(pTIClass);\n\n    *pptinfo = (ITypeInfo *)&pTIClass->ITypeInfo2_iface;\n#else\n    *pptinfo = (ITypeInfo *)&pTIIface->ITypeInfo2_iface;\n#endif\n\n    ITypeInfo_AddRef(*pptinfo);\n    ITypeLib2_Release(&pTypeLibImpl->ITypeLib2_iface);\n\n    return S_OK;\n\n}\n\nstatic HRESULT WINAPI ITypeComp_fnQueryInterface(ITypeComp * iface, REFIID riid, LPVOID * ppv)\n{\n    ITypeInfoImpl *This = info_impl_from_ITypeComp(iface);\n\n    return ITypeInfo2_QueryInterface(&This->ITypeInfo2_iface, riid, ppv);\n}\n\nstatic ULONG WINAPI ITypeComp_fnAddRef(ITypeComp * iface)\n{\n    ITypeInfoImpl *This = info_impl_from_ITypeComp(iface);\n\n    return ITypeInfo2_AddRef(&This->ITypeInfo2_iface);\n}\n\nstatic ULONG WINAPI ITypeComp_fnRelease(ITypeComp * iface)\n{\n    ITypeInfoImpl *This = info_impl_from_ITypeComp(iface);\n\n    return ITypeInfo2_Release(&This->ITypeInfo2_iface);\n}\n\nstatic HRESULT WINAPI ITypeComp_fnBind(\n    ITypeComp * iface,\n    OLECHAR * szName,\n    ULONG lHash,\n    WORD wFlags,\n    ITypeInfo ** ppTInfo,\n    DESCKIND * pDescKind,\n    BINDPTR * pBindPtr)\n{\n    ITypeInfoImpl *This = info_impl_from_ITypeComp(iface);\n    const TLBFuncDesc *pFDesc;\n    const TLBVarDesc *pVDesc;\n    HRESULT hr = DISP_E_MEMBERNOTFOUND;\n    UINT fdc;\n\n    TRACE(\"(%p)->(%s, %x, 0x%x, %p, %p, %p)\\n\", This, debugstr_w(szName), lHash, wFlags, ppTInfo, pDescKind, pBindPtr);\n\n    *pDescKind = DESCKIND_NONE;\n    pBindPtr->lpfuncdesc = NULL;\n    *ppTInfo = NULL;\n\n    for(fdc = 0; fdc < This->typeattr.cFuncs; ++fdc){\n        pFDesc = &This->funcdescs[fdc];\n        if (!lstrcmpiW(TLB_get_bstr(pFDesc->Name), szName)) {\n            if (!wFlags || (pFDesc->funcdesc.invkind & wFlags))\n                break;\n            else\n                /* name found, but wrong flags */\n                hr = TYPE_E_TYPEMISMATCH;\n        }\n    }\n\n    if (fdc < This->typeattr.cFuncs)\n    {\n        HRESULT hr = TLB_AllocAndInitFuncDesc(\n            &pFDesc->funcdesc,\n            &pBindPtr->lpfuncdesc,\n            This->typeattr.typekind == TKIND_DISPATCH);\n        if (FAILED(hr))\n            return hr;\n        *pDescKind = DESCKIND_FUNCDESC;\n        *ppTInfo = (ITypeInfo *)&This->ITypeInfo2_iface;\n        ITypeInfo_AddRef(*ppTInfo);\n        return S_OK;\n    } else {\n        pVDesc = TLB_get_vardesc_by_name(This->vardescs, This->typeattr.cVars, szName);\n        if(pVDesc){\n            HRESULT hr = TLB_AllocAndInitVarDesc(&pVDesc->vardesc, &pBindPtr->lpvardesc);\n            if (FAILED(hr))\n                return hr;\n            *pDescKind = DESCKIND_VARDESC;\n            *ppTInfo = (ITypeInfo *)&This->ITypeInfo2_iface;\n            ITypeInfo_AddRef(*ppTInfo);\n            return S_OK;\n        }\n    }\n\n    if (hr == DISP_E_MEMBERNOTFOUND && This->impltypes) {\n        /* recursive search */\n        ITypeInfo *pTInfo;\n        ITypeComp *pTComp;\n        HRESULT hr;\n        hr=ITypeInfo2_GetRefTypeInfo(&This->ITypeInfo2_iface, This->impltypes[0].hRef, &pTInfo);\n        if (SUCCEEDED(hr))\n        {\n            hr = ITypeInfo_GetTypeComp(pTInfo,&pTComp);\n            ITypeInfo_Release(pTInfo);\n        }\n        if (SUCCEEDED(hr))\n        {\n            hr = ITypeComp_Bind(pTComp, szName, lHash, wFlags, ppTInfo, pDescKind, pBindPtr);\n            ITypeComp_Release(pTComp);\n            if (SUCCEEDED(hr) && *pDescKind == DESCKIND_FUNCDESC &&\n                    This->typeattr.typekind == TKIND_DISPATCH)\n            {\n                FUNCDESC *tmp = pBindPtr->lpfuncdesc;\n                hr = TLB_AllocAndInitFuncDesc(tmp, &pBindPtr->lpfuncdesc, TRUE);\n                SysFreeString((BSTR)tmp);\n            }\n            return hr;\n        }\n        WARN(\"Could not search inherited interface!\\n\");\n    }\n    if (hr == DISP_E_MEMBERNOTFOUND)\n        hr = S_OK;\n    TRACE(\"did not find member with name %s, flags 0x%x\\n\", debugstr_w(szName), wFlags);\n    return hr;\n}\n\nstatic HRESULT WINAPI ITypeComp_fnBindType(\n    ITypeComp * iface,\n    OLECHAR * szName,\n    ULONG lHash,\n    ITypeInfo ** ppTInfo,\n    ITypeComp ** ppTComp)\n{\n    TRACE(\"(%s, %x, %p, %p)\\n\", debugstr_w(szName), lHash, ppTInfo, ppTComp);\n\n    /* strange behaviour (does nothing) but like the\n     * original */\n\n    if (!ppTInfo || !ppTComp)\n        return E_POINTER;\n\n    *ppTInfo = NULL;\n    *ppTComp = NULL;\n\n    return S_OK;\n}\n\nstatic const ITypeCompVtbl tcompvt =\n{\n\n    ITypeComp_fnQueryInterface,\n    ITypeComp_fnAddRef,\n    ITypeComp_fnRelease,\n\n    ITypeComp_fnBind,\n    ITypeComp_fnBindType\n};\n\n#if 1\nHRESULT WINAPI CreateTypeLib2Impl(SYSKIND syskind, LPCOLESTR szFile,\n        ICreateTypeLib2** ppctlib)\n{\n    ITypeLibImpl *This;\n    HRESULT hres;\n\n    TRACE(\"(%d,%s,%p)\\n\", syskind, debugstr_w(szFile), ppctlib);\n\n    if (!szFile) return E_INVALIDARG;\n\n    This = TypeLibImpl_Constructor();\n    if (!This)\n        return E_OUTOFMEMORY;\n\n    This->lcid = GetSystemDefaultLCID();\n    This->syskind = syskind;\n    This->ptr_size = get_ptr_size(syskind);\n\n    This->path = heap_alloc((lstrlenW(szFile) + 1) * sizeof(WCHAR));\n    if (!This->path) {\n        ITypeLib2_Release(&This->ITypeLib2_iface);\n        return E_OUTOFMEMORY;\n    }\n    lstrcpyW(This->path, szFile);\n\n    hres = ITypeLib2_QueryInterface(&This->ITypeLib2_iface, &IID_ICreateTypeLib2, (LPVOID*)ppctlib);\n    ITypeLib2_Release(&This->ITypeLib2_iface);\n    return hres;\n}\n#endif\n\nstatic HRESULT WINAPI ICreateTypeLib2_fnQueryInterface(ICreateTypeLib2 *iface,\n        REFIID riid, void **object)\n{\n    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);\n\n    return ITypeLib2_QueryInterface(&This->ITypeLib2_iface, riid, object);\n}\n\nstatic ULONG WINAPI ICreateTypeLib2_fnAddRef(ICreateTypeLib2 *iface)\n{\n    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);\n\n    return ITypeLib2_AddRef(&This->ITypeLib2_iface);\n}\n\nstatic ULONG WINAPI ICreateTypeLib2_fnRelease(ICreateTypeLib2 *iface)\n{\n    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);\n\n    return ITypeLib2_Release(&This->ITypeLib2_iface);\n}\n\nstatic HRESULT WINAPI ICreateTypeLib2_fnCreateTypeInfo(ICreateTypeLib2 *iface,\n        LPOLESTR name, TYPEKIND kind, ICreateTypeInfo **ctinfo)\n{\n    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);\n    ITypeInfoImpl *info;\n    HRESULT hres;\n\n    TRACE(\"%p %s %d %p\\n\", This, wine_dbgstr_w(name), kind, ctinfo);\n\n    if (!ctinfo || !name)\n        return E_INVALIDARG;\n\n    info = TLB_get_typeinfo_by_name(This->typeinfos, This->TypeInfoCount, name);\n    if (info)\n        return TYPE_E_NAMECONFLICT;\n\n    if (This->typeinfos)\n        This->typeinfos = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, This->typeinfos,\n                sizeof(ITypeInfoImpl*) * (This->TypeInfoCount + 1));\n    else\n        This->typeinfos = heap_alloc_zero(sizeof(ITypeInfoImpl*));\n\n    info = This->typeinfos[This->TypeInfoCount] = ITypeInfoImpl_Constructor();\n\n    info->pTypeLib = This;\n    info->Name = TLB_append_str(&This->name_list, name);\n    info->index = This->TypeInfoCount;\n    info->typeattr.typekind = kind;\n    info->typeattr.cbAlignment = 4;\n\n    switch (info->typeattr.typekind) {\n    case TKIND_ENUM:\n    case TKIND_INTERFACE:\n    case TKIND_DISPATCH:\n    case TKIND_COCLASS:\n        info->typeattr.cbSizeInstance = This->ptr_size;\n        break;\n    case TKIND_RECORD:\n    case TKIND_UNION:\n        info->typeattr.cbSizeInstance = 0;\n        break;\n    case TKIND_MODULE:\n        info->typeattr.cbSizeInstance = 2;\n        break;\n    case TKIND_ALIAS:\n        info->typeattr.cbSizeInstance = -0x75;\n        break;\n    default:\n        FIXME(\"unrecognized typekind %d\\n\", info->typeattr.typekind);\n        info->typeattr.cbSizeInstance = 0xdeadbeef;\n        break;\n    }\n\n    hres = ITypeInfo2_QueryInterface(&info->ITypeInfo2_iface,\n            &IID_ICreateTypeInfo, (void **)ctinfo);\n    if (FAILED(hres)) {\n        ITypeInfo2_Release(&info->ITypeInfo2_iface);\n        return hres;\n    }\n\n    info->hreftype = info->index * sizeof(MSFT_TypeInfoBase);\n\n    ++This->TypeInfoCount;\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeLib2_fnSetName(ICreateTypeLib2 *iface,\n        LPOLESTR name)\n{\n    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);\n\n    TRACE(\"%p %s\\n\", This, wine_dbgstr_w(name));\n\n    if (!name)\n        return E_INVALIDARG;\n\n    This->Name = TLB_append_str(&This->name_list, name);\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeLib2_fnSetVersion(ICreateTypeLib2 *iface,\n        WORD majorVerNum, WORD minorVerNum)\n{\n    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);\n\n    TRACE(\"%p %d %d\\n\", This, majorVerNum, minorVerNum);\n\n    This->ver_major = majorVerNum;\n    This->ver_minor = minorVerNum;\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeLib2_fnSetGuid(ICreateTypeLib2 *iface,\n        REFGUID guid)\n{\n    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);\n\n    TRACE(\"%p %s\\n\", This, debugstr_guid(guid));\n\n    This->guid = TLB_append_guid(&This->guid_list, guid, -2);\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeLib2_fnSetDocString(ICreateTypeLib2 *iface,\n        LPOLESTR doc)\n{\n    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);\n\n    TRACE(\"%p %s\\n\", This, wine_dbgstr_w(doc));\n\n    if (!doc)\n        return E_INVALIDARG;\n\n    This->DocString = TLB_append_str(&This->string_list, doc);\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeLib2_fnSetHelpFileName(ICreateTypeLib2 *iface,\n        LPOLESTR helpFileName)\n{\n    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);\n\n    TRACE(\"%p %s\\n\", This, wine_dbgstr_w(helpFileName));\n\n    if (!helpFileName)\n        return E_INVALIDARG;\n\n    This->HelpFile = TLB_append_str(&This->string_list, helpFileName);\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeLib2_fnSetHelpContext(ICreateTypeLib2 *iface,\n        DWORD helpContext)\n{\n    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);\n\n    TRACE(\"%p %d\\n\", This, helpContext);\n\n    This->dwHelpContext = helpContext;\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeLib2_fnSetLcid(ICreateTypeLib2 *iface,\n        LCID lcid)\n{\n    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);\n\n    TRACE(\"%p %x\\n\", This, lcid);\n\n    This->set_lcid = lcid;\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeLib2_fnSetLibFlags(ICreateTypeLib2 *iface,\n        UINT libFlags)\n{\n    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);\n\n    TRACE(\"%p %x\\n\", This, libFlags);\n\n    This->libflags = libFlags;\n\n    return S_OK;\n}\n\ntypedef struct tagWMSFT_SegContents {\n    DWORD len;\n    void *data;\n} WMSFT_SegContents;\n\ntypedef struct tagWMSFT_TLBFile {\n    MSFT_Header header;\n    WMSFT_SegContents typeinfo_seg;\n    WMSFT_SegContents impfile_seg;\n    WMSFT_SegContents impinfo_seg;\n    WMSFT_SegContents ref_seg;\n    WMSFT_SegContents guidhash_seg;\n    WMSFT_SegContents guid_seg;\n    WMSFT_SegContents namehash_seg;\n    WMSFT_SegContents name_seg;\n    WMSFT_SegContents string_seg;\n    WMSFT_SegContents typdesc_seg;\n    WMSFT_SegContents arraydesc_seg;\n    WMSFT_SegContents custdata_seg;\n    WMSFT_SegContents cdguids_seg;\n    MSFT_SegDir segdir;\n    WMSFT_SegContents aux_seg;\n} WMSFT_TLBFile;\n\nstatic HRESULT WMSFT_compile_strings(ITypeLibImpl *This,\n        WMSFT_TLBFile *file)\n{\n    TLBString *str;\n    UINT last_offs;\n    char *data;\n\n    file->string_seg.len = 0;\n    LIST_FOR_EACH_ENTRY(str, &This->string_list, TLBString, entry) {\n        int size;\n\n        size = WideCharToMultiByte(CP_ACP, 0, str->str, strlenW(str->str), NULL, 0, NULL, NULL);\n        if (size == 0)\n            return E_UNEXPECTED;\n\n        size += sizeof(INT16);\n        if (size % 4)\n            size = (size + 4) & ~0x3;\n        if (size < 8)\n            size = 8;\n\n        file->string_seg.len += size;\n\n        /* temporarily use str->offset to store the length of the aligned,\n         * converted string */\n        str->offset = size;\n    }\n\n    file->string_seg.data = data = heap_alloc(file->string_seg.len);\n\n    last_offs = 0;\n    LIST_FOR_EACH_ENTRY(str, &This->string_list, TLBString, entry) {\n        int size;\n\n        size = WideCharToMultiByte(CP_ACP, 0, str->str, strlenW(str->str),\n                data + sizeof(INT16), file->string_seg.len - last_offs - sizeof(INT16), NULL, NULL);\n        if (size == 0) {\n            heap_free(file->string_seg.data);\n            return E_UNEXPECTED;\n        }\n\n        *((INT16*)data) = size;\n\n        memset(data + sizeof(INT16) + size, 0x57, str->offset - size - sizeof(INT16));\n\n        size = str->offset;\n        data += size;\n        str->offset = last_offs;\n        last_offs += size;\n    }\n\n    return S_OK;\n}\n\nstatic HRESULT WMSFT_compile_names(ITypeLibImpl *This,\n        WMSFT_TLBFile *file)\n{\n    TLBString *str;\n    UINT last_offs;\n    char *data;\n    MSFT_NameIntro *last_intro = NULL;\n\n    file->header.nametablecount = 0;\n    file->header.nametablechars = 0;\n\n    file->name_seg.len = 0;\n    LIST_FOR_EACH_ENTRY(str, &This->name_list, TLBString, entry) {\n        int size;\n\n        size = strlenW(str->str);\n        file->header.nametablechars += size;\n        file->header.nametablecount++;\n\n        size = WideCharToMultiByte(CP_ACP, 0, str->str, size, NULL, 0, NULL, NULL);\n        if (size == 0)\n            return E_UNEXPECTED;\n\n        size += sizeof(MSFT_NameIntro);\n        if (size % 4)\n            size = (size + 4) & ~0x3;\n        if (size < 8)\n            size = 8;\n\n        file->name_seg.len += size;\n\n        /* temporarily use str->offset to store the length of the aligned,\n         * converted string */\n        str->offset = size;\n    }\n\n    /* Allocate bigger buffer so we can temporarily NULL terminate the name */\n    file->name_seg.data = data = heap_alloc(file->name_seg.len+1);\n\n    last_offs = 0;\n    LIST_FOR_EACH_ENTRY(str, &This->name_list, TLBString, entry) {\n        int size, hash;\n        MSFT_NameIntro *intro = (MSFT_NameIntro*)data;\n\n        size = WideCharToMultiByte(CP_ACP, 0, str->str, strlenW(str->str),\n                data + sizeof(MSFT_NameIntro),\n                file->name_seg.len - last_offs - sizeof(MSFT_NameIntro), NULL, NULL);\n        if (size == 0) {\n            heap_free(file->name_seg.data);\n            return E_UNEXPECTED;\n        }\n        data[sizeof(MSFT_NameIntro) + size] = '\\0';\n\n        intro->hreftype = -1; /* TODO? */\n        intro->namelen = size & 0xFF;\n        /* TODO: namelen & 0xFF00 == ??? maybe HREF type indicator? */\n        hash = LHashValOfNameSysA(This->syskind, This->lcid, data + sizeof(MSFT_NameIntro));\n        intro->namelen |= hash << 16;\n        intro->next_hash = ((DWORD*)file->namehash_seg.data)[hash & 0x7f];\n        ((DWORD*)file->namehash_seg.data)[hash & 0x7f] = last_offs;\n\n        memset(data + sizeof(MSFT_NameIntro) + size, 0x57,\n                str->offset - size - sizeof(MSFT_NameIntro));\n\n        /* update str->offset to actual value to use in other\n         * compilation functions that require positions within\n         * the string table */\n        last_intro = intro;\n        size = str->offset;\n        data += size;\n        str->offset = last_offs;\n        last_offs += size;\n    }\n\n    if(last_intro)\n        last_intro->hreftype = 0; /* last one is 0? */\n\n    return S_OK;\n}\n\nstatic inline int hash_guid(GUID *guid)\n{\n    int i, hash = 0;\n\n    for (i = 0; i < 8; i ++)\n        hash ^= ((const short *)guid)[i];\n\n    return hash & 0x1f;\n}\n\nstatic HRESULT WMSFT_compile_guids(ITypeLibImpl *This, WMSFT_TLBFile *file)\n{\n    TLBGuid *guid;\n    MSFT_GuidEntry *entry;\n    DWORD offs;\n    int hash_key, *guidhashtab;\n\n    file->guid_seg.len = sizeof(MSFT_GuidEntry) * list_count(&This->guid_list);\n    file->guid_seg.data = heap_alloc(file->guid_seg.len);\n\n    entry = file->guid_seg.data;\n    offs = 0;\n    guidhashtab = file->guidhash_seg.data;\n    LIST_FOR_EACH_ENTRY(guid, &This->guid_list, TLBGuid, entry){\n        memcpy(&entry->guid, &guid->guid, sizeof(GUID));\n        entry->hreftype = guid->hreftype;\n\n        hash_key = hash_guid(&guid->guid);\n        entry->next_hash = guidhashtab[hash_key];\n        guidhashtab[hash_key] = offs;\n\n        guid->offset = offs;\n        offs += sizeof(MSFT_GuidEntry);\n        ++entry;\n    }\n\n    return S_OK;\n}\n\nstatic DWORD WMSFT_encode_variant(VARIANT *value, WMSFT_TLBFile *file)\n{\n    VARIANT v = *value;\n    VARTYPE arg_type = V_VT(value);\n    int mask = 0;\n    HRESULT hres;\n    DWORD ret = file->custdata_seg.len;\n\n    if(arg_type == VT_INT)\n        arg_type = VT_I4;\n    if(arg_type == VT_UINT)\n        arg_type = VT_UI4;\n\n    v = *value;\n    if(V_VT(value) != arg_type) {\n        hres = VariantChangeType(&v, value, 0, arg_type);\n        if(FAILED(hres)){\n            ERR(\"VariantChangeType failed: %08x\\n\", hres);\n            return -1;\n        }\n    }\n\n    /* Check if default value can be stored in-place */\n    switch(arg_type){\n    case VT_I4:\n    case VT_UI4:\n        mask = 0x3ffffff;\n        if(V_UI4(&v) > 0x3ffffff)\n            break;\n        /* fall through */\n    case VT_I1:\n    case VT_UI1:\n    case VT_BOOL:\n        if(!mask)\n            mask = 0xff;\n        /* fall through */\n    case VT_I2:\n    case VT_UI2:\n        if(!mask)\n            mask = 0xffff;\n        return ((0x80 + 0x4 * V_VT(value)) << 24) | (V_UI4(&v) & mask);\n    }\n\n    /* have to allocate space in custdata_seg */\n    switch(arg_type) {\n    case VT_I4:\n    case VT_R4:\n    case VT_UI4:\n    case VT_INT:\n    case VT_UINT:\n    case VT_HRESULT:\n    case VT_PTR: {\n        /* Construct the data to be allocated */\n        int *data;\n\n        if(file->custdata_seg.data){\n            file->custdata_seg.data = heap_realloc(file->custdata_seg.data, file->custdata_seg.len + sizeof(int) * 2);\n            data = (int *)(((char *)file->custdata_seg.data) + file->custdata_seg.len);\n            file->custdata_seg.len += sizeof(int) * 2;\n        }else{\n            file->custdata_seg.len = sizeof(int) * 2;\n            data = file->custdata_seg.data = heap_alloc(file->custdata_seg.len);\n        }\n\n        data[0] = V_VT(value) + (V_UI4(&v) << 16);\n        data[1] = (V_UI4(&v) >> 16) + 0x57570000;\n\n        /* TODO: Check if the encoded data is already present in custdata_seg */\n\n        return ret;\n    }\n\n    case VT_BSTR: {\n        int i, len = (6+SysStringLen(V_BSTR(&v))+3) & ~0x3;\n        char *data;\n\n        if(file->custdata_seg.data){\n            file->custdata_seg.data = heap_realloc(file->custdata_seg.data, file->custdata_seg.len + len);\n            data = ((char *)file->custdata_seg.data) + file->custdata_seg.len;\n            file->custdata_seg.len += len;\n        }else{\n            file->custdata_seg.len = len;\n            data = file->custdata_seg.data = heap_alloc(file->custdata_seg.len);\n        }\n\n        *((unsigned short *)data) = V_VT(value);\n        *((unsigned int *)(data+2)) = SysStringLen(V_BSTR(&v));\n        for(i=0; i<SysStringLen(V_BSTR(&v)); i++) {\n            if(V_BSTR(&v)[i] <= 0x7f)\n                data[i+6] = V_BSTR(&v)[i];\n            else\n                data[i+6] = '?';\n        }\n        WideCharToMultiByte(CP_ACP, 0, V_BSTR(&v), SysStringLen(V_BSTR(&v)), &data[6], len-6, NULL, NULL);\n        for(i=6+SysStringLen(V_BSTR(&v)); i<len; i++)\n            data[i] = 0x57;\n\n        /* TODO: Check if the encoded data is already present in custdata_seg */\n\n        return ret;\n    }\n    default:\n        FIXME(\"Argument type not yet handled\\n\");\n        return -1;\n    }\n}\n\nstatic DWORD WMSFT_append_typedesc(TYPEDESC *desc, WMSFT_TLBFile *file, DWORD *out_mix, INT16 *out_size);\n\nstatic DWORD WMSFT_append_arraydesc(ARRAYDESC *desc, WMSFT_TLBFile *file)\n{\n    DWORD offs = file->arraydesc_seg.len;\n    DWORD *encoded;\n    USHORT i;\n\n    /* TODO: we should check for duplicates, but that's harder because each\n     * chunk is variable length (really we should store TYPEDESC and ARRAYDESC\n     * at the library-level) */\n\n    file->arraydesc_seg.len += (2 + desc->cDims * 2) * sizeof(DWORD);\n    if(!file->arraydesc_seg.data)\n        file->arraydesc_seg.data = heap_alloc(file->arraydesc_seg.len);\n    else\n        file->arraydesc_seg.data = heap_realloc(file->arraydesc_seg.data, file->arraydesc_seg.len);\n    encoded = (DWORD*)((char *)file->arraydesc_seg.data + offs);\n\n    encoded[0] = WMSFT_append_typedesc(&desc->tdescElem, file, NULL, NULL);\n    encoded[1] = desc->cDims | ((desc->cDims * 2 * sizeof(DWORD)) << 16);\n    for(i = 0; i < desc->cDims; ++i){\n        encoded[2 + i * 2] =  desc->rgbounds[i].cElements;\n        encoded[2 + i * 2 + 1] = desc->rgbounds[i].lLbound;\n    }\n\n    return offs;\n}\n\nstatic DWORD WMSFT_append_typedesc(TYPEDESC *desc, WMSFT_TLBFile *file, DWORD *out_mix, INT16 *out_size)\n{\n    DWORD junk;\n    INT16 junk2;\n    DWORD offs = 0;\n    DWORD encoded[2];\n    VARTYPE vt, subtype;\n    char *data;\n\n    if(!desc)\n        return -1;\n\n    if(!out_mix)\n        out_mix = &junk;\n    if(!out_size)\n        out_size = &junk2;\n\n    vt = desc->vt & VT_TYPEMASK;\n\n    if(vt == VT_PTR || vt == VT_SAFEARRAY){\n        DWORD mix;\n        encoded[1] = WMSFT_append_typedesc(desc->u.lptdesc, file, &mix, out_size);\n        encoded[0] = desc->vt | ((mix | VT_BYREF) << 16);\n        *out_mix = 0x7FFF;\n        *out_size += 2 * sizeof(DWORD);\n    }else if(vt == VT_CARRAY){\n        encoded[0] = desc->vt | (0x7FFE << 16);\n        encoded[1] = WMSFT_append_arraydesc(desc->u.lpadesc, file);\n        *out_mix = 0x7FFE;\n    }else if(vt == VT_USERDEFINED){\n        encoded[0] = desc->vt | (0x7FFF << 16);\n        encoded[1] = desc->u.hreftype;\n        *out_mix = 0x7FFF; /* FIXME: Should get TYPEKIND of the hreftype, e.g. TKIND_ENUM => VT_I4 */\n    }else{\n        TRACE(\"Mixing in-place, VT: 0x%x\\n\", desc->vt);\n\n        switch(vt){\n        case VT_INT:\n            subtype = VT_I4;\n            break;\n        case VT_UINT:\n            subtype = VT_UI4;\n            break;\n        case VT_VOID:\n            subtype = VT_EMPTY;\n            break;\n        default:\n            subtype = vt;\n            break;\n        }\n\n        *out_mix = subtype;\n        return 0x80000000 | (subtype << 16) | desc->vt;\n    }\n\n    data = file->typdesc_seg.data;\n    while(offs < file->typdesc_seg.len){\n        if(!memcmp(&data[offs], encoded, sizeof(encoded)))\n            return offs;\n        offs += sizeof(encoded);\n    }\n\n    file->typdesc_seg.len += sizeof(encoded);\n    if(!file->typdesc_seg.data)\n        data = file->typdesc_seg.data = heap_alloc(file->typdesc_seg.len);\n    else\n        data = file->typdesc_seg.data = heap_realloc(file->typdesc_seg.data, file->typdesc_seg.len);\n\n    memcpy(&data[offs], encoded, sizeof(encoded));\n\n    return offs;\n}\n\nstatic DWORD WMSFT_compile_custdata(struct list *custdata_list, WMSFT_TLBFile *file)\n{\n    WMSFT_SegContents *cdguids_seg = &file->cdguids_seg;\n    DWORD ret = cdguids_seg->len, offs;\n    MSFT_CDGuid *cdguid;\n    TLBCustData *cd;\n\n    if(list_empty(custdata_list))\n        return -1;\n\n    cdguids_seg->len += sizeof(MSFT_CDGuid) * list_count(custdata_list);\n    if(!cdguids_seg->data){\n        cdguid = cdguids_seg->data = heap_alloc(cdguids_seg->len);\n    }else {\n        cdguids_seg->data = heap_realloc(cdguids_seg->data, cdguids_seg->len);\n        cdguid = (MSFT_CDGuid*)((char*)cdguids_seg->data + ret);\n    }\n\n    offs = ret + sizeof(MSFT_CDGuid);\n    LIST_FOR_EACH_ENTRY(cd, custdata_list, TLBCustData, entry){\n        cdguid->GuidOffset = cd->guid->offset;\n        cdguid->DataOffset = WMSFT_encode_variant(&cd->data, file);\n        cdguid->next = offs;\n        offs += sizeof(MSFT_CDGuid);\n        ++cdguid;\n    }\n\n    --cdguid;\n    cdguid->next = -1;\n\n    return ret;\n}\n\nstatic DWORD WMSFT_compile_typeinfo_aux(ITypeInfoImpl *info,\n        WMSFT_TLBFile *file)\n{\n    WMSFT_SegContents *aux_seg = &file->aux_seg;\n    DWORD ret = aux_seg->len, i, j, recorded_size = 0, extra_size = 0;\n    MSFT_VarRecord *varrecord;\n    MSFT_FuncRecord *funcrecord;\n    MEMBERID *memid;\n    DWORD *name, *offsets, offs;\n\n    for(i = 0; i < info->typeattr.cFuncs; ++i){\n        TLBFuncDesc *desc = &info->funcdescs[i];\n\n        recorded_size += 6 * sizeof(INT); /* mandatory fields */\n\n        /* optional fields */\n        /* TODO: oArgCustData - FuncSetCustData not impl yet */\n        if(!list_empty(&desc->custdata_list))\n            recorded_size += 7 * sizeof(INT);\n        else if(desc->HelpStringContext != 0)\n            recorded_size += 6 * sizeof(INT);\n        /* res9? resA? */\n        else if(desc->Entry)\n            recorded_size += 3 * sizeof(INT);\n        else if(desc->HelpString)\n            recorded_size += 2 * sizeof(INT);\n        else if(desc->helpcontext)\n            recorded_size += sizeof(INT);\n\n        recorded_size += desc->funcdesc.cParams * sizeof(MSFT_ParameterInfo);\n\n        for(j = 0; j < desc->funcdesc.cParams; ++j){\n            if(desc->funcdesc.lprgelemdescParam[j].u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT){\n                recorded_size += desc->funcdesc.cParams * sizeof(INT);\n                break;\n            }\n        }\n\n        extra_size += 2 * sizeof(INT); /* memberid, name offs */\n    }\n\n    for(i = 0; i < info->typeattr.cVars; ++i){\n        TLBVarDesc *desc = &info->vardescs[i];\n\n        recorded_size += 5 * sizeof(INT); /* mandatory fields */\n\n        /* optional fields */\n        if(desc->HelpStringContext != 0)\n            recorded_size += 5 * sizeof(INT);\n        else if(!list_empty(&desc->custdata_list))\n            recorded_size += 4 * sizeof(INT);\n        /* res9? */\n        else if(desc->HelpString)\n            recorded_size += 2 * sizeof(INT);\n        else if(desc->HelpContext != 0)\n            recorded_size += sizeof(INT);\n\n        extra_size += 2 * sizeof(INT); /* memberid, name offs */\n    }\n\n    if(!recorded_size && !extra_size)\n        return ret;\n\n    extra_size += sizeof(INT); /* total aux size for this typeinfo */\n\n    aux_seg->len += recorded_size + extra_size;\n\n    aux_seg->len += sizeof(INT) * (info->typeattr.cVars + info->typeattr.cFuncs); /* offsets at the end */\n\n    if(aux_seg->data)\n        aux_seg->data = heap_realloc(aux_seg->data, aux_seg->len);\n    else\n        aux_seg->data = heap_alloc(aux_seg->len);\n\n    *((DWORD*)((char *)aux_seg->data + ret)) = recorded_size;\n\n    offsets = (DWORD*)((char *)aux_seg->data + ret + recorded_size + extra_size);\n    offs = 0;\n\n    funcrecord = (MSFT_FuncRecord*)(((char *)aux_seg->data) + ret + sizeof(INT));\n    for(i = 0; i < info->typeattr.cFuncs; ++i){\n        TLBFuncDesc *desc = &info->funcdescs[i];\n        DWORD size = 6 * sizeof(INT), paramdefault_size = 0, *paramdefault;\n\n        funcrecord->funcdescsize = sizeof(desc->funcdesc) + desc->funcdesc.cParams * sizeof(ELEMDESC);\n        funcrecord->DataType = WMSFT_append_typedesc(&desc->funcdesc.elemdescFunc.tdesc, file, NULL, &funcrecord->funcdescsize);\n        funcrecord->Flags = desc->funcdesc.wFuncFlags;\n        funcrecord->VtableOffset = desc->funcdesc.oVft;\n\n        /* FKCCIC:\n         * XXXX XXXX XXXX XXXX  XXXX XXXX XXXX XXXX\n         *                                      ^^^funckind\n         *                                 ^^^ ^invkind\n         *                                ^has_cust_data\n         *                           ^^^^callconv\n         *                         ^has_param_defaults\n         *                        ^oEntry_is_intresource\n         */\n        funcrecord->FKCCIC =\n            desc->funcdesc.funckind |\n            (desc->funcdesc.invkind << 3) |\n            (list_empty(&desc->custdata_list) ? 0 : 0x80) |\n            (desc->funcdesc.callconv << 8);\n\n        if(desc->Entry && desc->Entry != (TLBString*)-1 && IS_INTRESOURCE(desc->Entry))\n            funcrecord->FKCCIC |= 0x2000;\n\n        for(j = 0; j < desc->funcdesc.cParams; ++j){\n            if(desc->funcdesc.lprgelemdescParam[j].u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT){\n                paramdefault_size = sizeof(INT) * desc->funcdesc.cParams;\n                funcrecord->funcdescsize += sizeof(PARAMDESCEX);\n            }\n        }\n        if(paramdefault_size > 0)\n            funcrecord->FKCCIC |= 0x1000;\n\n        funcrecord->nrargs = desc->funcdesc.cParams;\n        funcrecord->nroargs = desc->funcdesc.cParamsOpt;\n\n        /* optional fields */\n        /* res9? resA? */\n        if(!list_empty(&desc->custdata_list)){\n            size += 7 * sizeof(INT);\n            funcrecord->HelpContext = desc->helpcontext;\n            if(desc->HelpString)\n                funcrecord->oHelpString = desc->HelpString->offset;\n            else\n                funcrecord->oHelpString = -1;\n            if(!desc->Entry)\n                funcrecord->oEntry = -1;\n            else if(IS_INTRESOURCE(desc->Entry))\n                funcrecord->oEntry = LOWORD(desc->Entry);\n            else\n                funcrecord->oEntry = desc->Entry->offset;\n            funcrecord->res9 = -1;\n            funcrecord->resA = -1;\n            funcrecord->HelpStringContext = desc->HelpStringContext;\n            funcrecord->oCustData = WMSFT_compile_custdata(&desc->custdata_list, file);\n        }else if(desc->HelpStringContext != 0){\n            size += 6 * sizeof(INT);\n            funcrecord->HelpContext = desc->helpcontext;\n            if(desc->HelpString)\n                funcrecord->oHelpString = desc->HelpString->offset;\n            else\n                funcrecord->oHelpString = -1;\n            if(!desc->Entry)\n                funcrecord->oEntry = -1;\n            else if(IS_INTRESOURCE(desc->Entry))\n                funcrecord->oEntry = LOWORD(desc->Entry);\n            else\n                funcrecord->oEntry = desc->Entry->offset;\n            funcrecord->res9 = -1;\n            funcrecord->resA = -1;\n            funcrecord->HelpStringContext = desc->HelpStringContext;\n        }else if(desc->Entry){\n            size += 3 * sizeof(INT);\n            funcrecord->HelpContext = desc->helpcontext;\n            if(desc->HelpString)\n                funcrecord->oHelpString = desc->HelpString->offset;\n            else\n                funcrecord->oHelpString = -1;\n            if(!desc->Entry)\n                funcrecord->oEntry = -1;\n            else if(IS_INTRESOURCE(desc->Entry))\n                funcrecord->oEntry = LOWORD(desc->Entry);\n            else\n                funcrecord->oEntry = desc->Entry->offset;\n        }else if(desc->HelpString){\n            size += 2 * sizeof(INT);\n            funcrecord->HelpContext = desc->helpcontext;\n            funcrecord->oHelpString = desc->HelpString->offset;\n        }else if(desc->helpcontext){\n            size += sizeof(INT);\n            funcrecord->HelpContext = desc->helpcontext;\n        }\n\n        paramdefault = (DWORD*)((char *)funcrecord + size);\n        size += paramdefault_size;\n\n        for(j = 0; j < desc->funcdesc.cParams; ++j){\n            MSFT_ParameterInfo *info = (MSFT_ParameterInfo*)(((char *)funcrecord) + size);\n\n            info->DataType = WMSFT_append_typedesc(&desc->funcdesc.lprgelemdescParam[j].tdesc, file, NULL, &funcrecord->funcdescsize);\n            if(desc->pParamDesc[j].Name)\n                info->oName = desc->pParamDesc[j].Name->offset;\n            else\n                info->oName = -1;\n            info->Flags = desc->funcdesc.lprgelemdescParam[j].u.paramdesc.wParamFlags;\n\n            if(paramdefault_size){\n                if(desc->funcdesc.lprgelemdescParam[j].u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT)\n                    *paramdefault = WMSFT_encode_variant(&desc->funcdesc.lprgelemdescParam[j].u.paramdesc.pparamdescex->varDefaultValue, file);\n                else if(paramdefault_size)\n                    *paramdefault = -1;\n                ++paramdefault;\n            }\n\n            size += sizeof(MSFT_ParameterInfo);\n        }\n\n        funcrecord->Info = size | (i << 16); /* is it just the index? */\n\n        *offsets = offs;\n        offs += size;\n        ++offsets;\n\n        funcrecord = (MSFT_FuncRecord*)(((char*)funcrecord) + size);\n    }\n\n    varrecord = (MSFT_VarRecord*)funcrecord;\n    for(i = 0; i < info->typeattr.cVars; ++i){\n        TLBVarDesc *desc = &info->vardescs[i];\n        DWORD size = 5 * sizeof(INT);\n\n        varrecord->vardescsize = sizeof(desc->vardesc);\n        varrecord->DataType = WMSFT_append_typedesc(&desc->vardesc.elemdescVar.tdesc, file, NULL, &varrecord->vardescsize);\n        varrecord->Flags = desc->vardesc.wVarFlags;\n        varrecord->VarKind = desc->vardesc.varkind;\n\n        if(desc->vardesc.varkind == VAR_CONST){\n            varrecord->vardescsize += sizeof(VARIANT);\n            varrecord->OffsValue = WMSFT_encode_variant(desc->vardesc.u.lpvarValue, file);\n        }else\n            varrecord->OffsValue = desc->vardesc.u.oInst;\n\n        /* res9? */\n        if(desc->HelpStringContext != 0){\n            size += 5 * sizeof(INT);\n            varrecord->HelpContext = desc->HelpContext;\n            if(desc->HelpString)\n                varrecord->HelpString = desc->HelpString->offset;\n            else\n                varrecord->HelpString = -1;\n            varrecord->res9 = -1;\n            varrecord->oCustData = WMSFT_compile_custdata(&desc->custdata_list, file);\n            varrecord->HelpStringContext = desc->HelpStringContext;\n        }else if(!list_empty(&desc->custdata_list)){\n            size += 4 * sizeof(INT);\n            varrecord->HelpContext = desc->HelpContext;\n            if(desc->HelpString)\n                varrecord->HelpString = desc->HelpString->offset;\n            else\n                varrecord->HelpString = -1;\n            varrecord->res9 = -1;\n            varrecord->oCustData = WMSFT_compile_custdata(&desc->custdata_list, file);\n        }else if(desc->HelpString){\n            size += 2 * sizeof(INT);\n            varrecord->HelpContext = desc->HelpContext;\n            if(desc->HelpString)\n                varrecord->HelpString = desc->HelpString->offset;\n            else\n                varrecord->HelpString = -1;\n        }else if(desc->HelpContext != 0){\n            size += sizeof(INT);\n            varrecord->HelpContext = desc->HelpContext;\n        }\n\n        varrecord->Info = size | (i << 16);\n\n        *offsets = offs;\n        offs += size;\n        ++offsets;\n\n        varrecord = (MSFT_VarRecord*)(((char*)varrecord) + size);\n    }\n\n    memid = (MEMBERID*)varrecord;\n    for(i = 0; i < info->typeattr.cFuncs; ++i){\n        TLBFuncDesc *desc = &info->funcdescs[i];\n        *memid = desc->funcdesc.memid;\n        ++memid;\n    }\n    for(i = 0; i < info->typeattr.cVars; ++i){\n        TLBVarDesc *desc = &info->vardescs[i];\n        *memid = desc->vardesc.memid;\n        ++memid;\n    }\n\n    name = (UINT*)memid;\n    for(i = 0; i < info->typeattr.cFuncs; ++i){\n        TLBFuncDesc *desc = &info->funcdescs[i];\n        if(desc->Name)\n            *name = desc->Name->offset;\n        else\n            *name = -1;\n        ++name;\n    }\n    for(i = 0; i < info->typeattr.cVars; ++i){\n        TLBVarDesc *desc = &info->vardescs[i];\n        if(desc->Name)\n            *name = desc->Name->offset;\n        else\n            *name = -1;\n        ++name;\n    }\n\n    return ret;\n}\n\ntypedef struct tagWMSFT_RefChunk {\n    DWORD href;\n    DWORD res04;\n    DWORD res08;\n    DWORD next;\n} WMSFT_RefChunk;\n\nstatic DWORD WMSFT_compile_typeinfo_ref(ITypeInfoImpl *info, WMSFT_TLBFile *file)\n{\n    DWORD offs = file->ref_seg.len, i;\n    WMSFT_RefChunk *chunk;\n\n    file->ref_seg.len += info->typeattr.cImplTypes * sizeof(WMSFT_RefChunk);\n    if(!file->ref_seg.data)\n        file->ref_seg.data = heap_alloc(file->ref_seg.len);\n    else\n        file->ref_seg.data = heap_realloc(file->ref_seg.data, file->ref_seg.len);\n\n    chunk = (WMSFT_RefChunk*)((char*)file->ref_seg.data + offs);\n\n    for(i = 0; i < info->typeattr.cImplTypes; ++i){\n        chunk->href = info->impltypes[i].hRef;\n        chunk->res04 = info->impltypes[i].implflags;\n        chunk->res08 = -1;\n        if(i < info->typeattr.cImplTypes - 1)\n            chunk->next = offs + sizeof(WMSFT_RefChunk) * (i + 1);\n        else\n            chunk->next = -1;\n        ++chunk;\n    }\n\n    return offs;\n}\n\nstatic DWORD WMSFT_compile_typeinfo(ITypeInfoImpl *info, INT16 index, WMSFT_TLBFile *file, char *data)\n{\n    DWORD size;\n\n    size = sizeof(MSFT_TypeInfoBase);\n\n    if(data){\n        MSFT_TypeInfoBase *base = (MSFT_TypeInfoBase*)data;\n        if(info->typeattr.wTypeFlags & TYPEFLAG_FDUAL)\n            base->typekind = TKIND_DISPATCH;\n        else\n            base->typekind = info->typeattr.typekind;\n        base->typekind |= index << 16; /* TODO: There are some other flags here */\n        base->typekind |= (info->typeattr.cbAlignment << 11) | (info->typeattr.cbAlignment << 6);\n        base->memoffset = WMSFT_compile_typeinfo_aux(info, file);\n        base->res2 = 0;\n        base->res3 = 0;\n        base->res4 = 3;\n        base->res5 = 0;\n        base->cElement = (info->typeattr.cVars << 16) | info->typeattr.cFuncs;\n        base->res7 = 0;\n        base->res8 = 0;\n        base->res9 = 0;\n        base->resA = 0;\n        if(info->guid)\n            base->posguid = info->guid->offset;\n        else\n            base->posguid = -1;\n        base->flags = info->typeattr.wTypeFlags;\n        if(info->Name) {\n            base->NameOffset = info->Name->offset;\n\n            ((unsigned char*)file->name_seg.data)[info->Name->offset+9] = 0x38;\n            *(HREFTYPE*)((unsigned char*)file->name_seg.data+info->Name->offset) = info->hreftype;\n        }else {\n            base->NameOffset = -1;\n        }\n        base->version = (info->typeattr.wMinorVerNum << 16) | info->typeattr.wMajorVerNum;\n        if(info->DocString)\n            base->docstringoffs = info->DocString->offset;\n        else\n            base->docstringoffs = -1;\n        base->helpstringcontext = info->dwHelpStringContext;\n        base->helpcontext = info->dwHelpContext;\n        base->oCustData = WMSFT_compile_custdata(info->pcustdata_list, file);\n        base->cImplTypes = info->typeattr.cImplTypes;\n        base->cbSizeVft = info->typeattr.cbSizeVft;\n        base->size = info->typeattr.cbSizeInstance;\n        if(info->typeattr.typekind == TKIND_COCLASS){\n            base->datatype1 = WMSFT_compile_typeinfo_ref(info, file);\n        }else if(info->typeattr.typekind == TKIND_ALIAS){\n            base->datatype1 = WMSFT_append_typedesc(info->tdescAlias, file, NULL, NULL);\n        }else if(info->typeattr.typekind == TKIND_MODULE){\n            if(info->DllName)\n                base->datatype1 = info->DllName->offset;\n            else\n                base->datatype1 = -1;\n        }else{\n            if(info->typeattr.cImplTypes > 0)\n                base->datatype1 = info->impltypes[0].hRef;\n            else\n                base->datatype1 = -1;\n        }\n        base->datatype2 = index; /* FIXME: i think there's more here */\n        base->res18 = 0;\n        base->res19 = -1;\n    }\n\n    return size;\n}\n\nstatic void WMSFT_compile_typeinfo_seg(ITypeLibImpl *This, WMSFT_TLBFile *file, DWORD *junk)\n{\n    UINT i;\n\n    file->typeinfo_seg.len = 0;\n    for(i = 0; i < This->TypeInfoCount; ++i){\n        ITypeInfoImpl *info = This->typeinfos[i];\n        *junk = file->typeinfo_seg.len;\n        ++junk;\n        file->typeinfo_seg.len += WMSFT_compile_typeinfo(info, i, NULL, NULL);\n    }\n\n    file->typeinfo_seg.data = heap_alloc(file->typeinfo_seg.len);\n    memset(file->typeinfo_seg.data, 0x96, file->typeinfo_seg.len);\n\n    file->aux_seg.len = 0;\n    file->aux_seg.data = NULL;\n\n    file->typeinfo_seg.len = 0;\n    for(i = 0; i < This->TypeInfoCount; ++i){\n        ITypeInfoImpl *info = This->typeinfos[i];\n        file->typeinfo_seg.len += WMSFT_compile_typeinfo(info, i, file,\n                ((char *)file->typeinfo_seg.data) + file->typeinfo_seg.len);\n    }\n}\n\ntypedef struct tagWMSFT_ImpFile {\n    INT guid_offs;\n    LCID lcid;\n    DWORD version;\n} WMSFT_ImpFile;\n\nstatic void WMSFT_compile_impfile(ITypeLibImpl *This, WMSFT_TLBFile *file)\n{\n    TLBImpLib *implib;\n    WMSFT_ImpFile *impfile;\n    char *data;\n    DWORD last_offs = 0;\n\n    file->impfile_seg.len = 0;\n    LIST_FOR_EACH_ENTRY(implib, &This->implib_list, TLBImpLib, entry){\n        int size = 0;\n\n        if(implib->name){\n            WCHAR *path = strrchrW(implib->name, '\\\\');\n            if(path)\n                ++path;\n            else\n                path = implib->name;\n            size = WideCharToMultiByte(CP_ACP, 0, path, strlenW(path), NULL, 0, NULL, NULL);\n            if (size == 0)\n                ERR(\"failed to convert wide string: %s\\n\", debugstr_w(path));\n        }\n\n        size += sizeof(INT16);\n        if (size % 4)\n            size = (size + 4) & ~0x3;\n        if (size < 8)\n            size = 8;\n\n        file->impfile_seg.len += sizeof(WMSFT_ImpFile) + size;\n    }\n\n    data = file->impfile_seg.data = heap_alloc(file->impfile_seg.len);\n\n    LIST_FOR_EACH_ENTRY(implib, &This->implib_list, TLBImpLib, entry){\n        int strlen = 0, size;\n\n        impfile = (WMSFT_ImpFile*)data;\n        impfile->guid_offs = implib->guid->offset;\n        impfile->lcid = implib->lcid;\n        impfile->version = (implib->wVersionMinor << 16) | implib->wVersionMajor;\n\n        data += sizeof(WMSFT_ImpFile);\n\n        if(implib->name){\n            WCHAR *path= strrchrW(implib->name, '\\\\');\n            if(path)\n                ++path;\n            else\n                path = implib->name;\n            strlen = WideCharToMultiByte(CP_ACP, 0, path, strlenW(path),\n                    data + sizeof(INT16), file->impfile_seg.len - last_offs - sizeof(INT16), NULL, NULL);\n            if (strlen == 0)\n                ERR(\"failed to convert wide string: %s\\n\", debugstr_w(path));\n        }\n\n        *((INT16*)data) = (strlen << 2) | 1; /* FIXME: is that a flag, or what? */\n\n        size = strlen + sizeof(INT16);\n        if (size % 4)\n            size = (size + 4) & ~0x3;\n        if (size < 8)\n            size = 8;\n        memset(data + sizeof(INT16) + strlen, 0x57, size - strlen - sizeof(INT16));\n\n        data += size;\n        implib->offset = last_offs;\n        last_offs += size + sizeof(WMSFT_ImpFile);\n    }\n}\n\nstatic void WMSFT_compile_impinfo(ITypeLibImpl *This, WMSFT_TLBFile *file)\n{\n    MSFT_ImpInfo *info;\n    TLBRefType *ref_type;\n    UINT i = 0;\n\n    WMSFT_compile_impfile(This, file);\n\n    file->impinfo_seg.len = sizeof(MSFT_ImpInfo) * list_count(&This->ref_list);\n    info = file->impinfo_seg.data = heap_alloc(file->impinfo_seg.len);\n\n    LIST_FOR_EACH_ENTRY(ref_type, &This->ref_list, TLBRefType, entry){\n        info->flags = i | ((ref_type->tkind & 0xFF) << 24);\n        if(ref_type->index == TLB_REF_USE_GUID){\n            info->flags |= MSFT_IMPINFO_OFFSET_IS_GUID;\n            info->oGuid = ref_type->guid->offset;\n        }else\n            info->oGuid = ref_type->index;\n        info->oImpFile = ref_type->pImpTLInfo->offset;\n        ++i;\n        ++info;\n    }\n}\n\nstatic void WMSFT_compile_guidhash(ITypeLibImpl *This, WMSFT_TLBFile *file)\n{\n    file->guidhash_seg.len = 0x80;\n    file->guidhash_seg.data = heap_alloc(file->guidhash_seg.len);\n    memset(file->guidhash_seg.data, 0xFF, file->guidhash_seg.len);\n}\n\nstatic void WMSFT_compile_namehash(ITypeLibImpl *This, WMSFT_TLBFile *file)\n{\n    file->namehash_seg.len = 0x200;\n    file->namehash_seg.data = heap_alloc(file->namehash_seg.len);\n    memset(file->namehash_seg.data, 0xFF, file->namehash_seg.len);\n}\n\nstatic void tmp_fill_segdir_seg(MSFT_pSeg *segdir, WMSFT_SegContents *contents, DWORD *running_offset)\n{\n    if(contents && contents->len){\n        segdir->offset = *running_offset;\n        segdir->length = contents->len;\n        *running_offset += segdir->length;\n    }else{\n        segdir->offset = -1;\n        segdir->length = 0;\n    }\n\n    /* TODO: do these ever change? */\n    segdir->res08 = -1;\n    segdir->res0c = 0xf;\n}\n\nstatic void WMSFT_write_segment(HANDLE outfile, WMSFT_SegContents *segment)\n{\n    DWORD written;\n    if(segment)\n        WriteFile(outfile, segment->data, segment->len, &written, NULL);\n}\n\nstatic HRESULT WMSFT_fixup_typeinfos(ITypeLibImpl *This, WMSFT_TLBFile *file,\n        DWORD file_len)\n{\n    DWORD i;\n    MSFT_TypeInfoBase *base = (MSFT_TypeInfoBase *)file->typeinfo_seg.data;\n\n    for(i = 0; i < This->TypeInfoCount; ++i){\n        base->memoffset += file_len;\n        ++base;\n    }\n\n    return S_OK;\n}\n\nstatic void WMSFT_free_file(WMSFT_TLBFile *file)\n{\n    HeapFree(GetProcessHeap(), 0, file->typeinfo_seg.data);\n    HeapFree(GetProcessHeap(), 0, file->guidhash_seg.data);\n    HeapFree(GetProcessHeap(), 0, file->guid_seg.data);\n    HeapFree(GetProcessHeap(), 0, file->ref_seg.data);\n    HeapFree(GetProcessHeap(), 0, file->impinfo_seg.data);\n    HeapFree(GetProcessHeap(), 0, file->impfile_seg.data);\n    HeapFree(GetProcessHeap(), 0, file->namehash_seg.data);\n    HeapFree(GetProcessHeap(), 0, file->name_seg.data);\n    HeapFree(GetProcessHeap(), 0, file->string_seg.data);\n    HeapFree(GetProcessHeap(), 0, file->typdesc_seg.data);\n    HeapFree(GetProcessHeap(), 0, file->arraydesc_seg.data);\n    HeapFree(GetProcessHeap(), 0, file->custdata_seg.data);\n    HeapFree(GetProcessHeap(), 0, file->cdguids_seg.data);\n    HeapFree(GetProcessHeap(), 0, file->aux_seg.data);\n}\n\nstatic HRESULT WINAPI ICreateTypeLib2_fnSaveAllChanges(ICreateTypeLib2 *iface)\n{\n    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);\n    WMSFT_TLBFile file;\n    DWORD written, junk_size, junk_offs, running_offset;\n    BOOL br;\n    HANDLE outfile;\n    HRESULT hres;\n    DWORD *junk;\n    UINT i;\n\n    TRACE(\"%p\\n\", This);\n\n    for(i = 0; i < This->TypeInfoCount; ++i)\n        if(This->typeinfos[i]->needs_layout)\n            ICreateTypeInfo2_LayOut(&This->typeinfos[i]->ICreateTypeInfo2_iface);\n\n    memset(&file, 0, sizeof(file));\n\n    file.header.magic1 = 0x5446534D;\n    file.header.magic2 = 0x00010002;\n    file.header.lcid = This->set_lcid ? This->set_lcid : MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);\n    file.header.lcid2 = This->set_lcid;\n    file.header.varflags = 0x40 | This->syskind;\n    if (This->HelpFile)\n        file.header.varflags |= 0x10;\n    if (This->HelpStringDll)\n        file.header.varflags |= HELPDLLFLAG;\n    file.header.version = (This->ver_minor << 16) | This->ver_major;\n    file.header.flags = This->libflags;\n    file.header.helpstringcontext = 0; /* TODO - SetHelpStringContext not implemented yet */\n    file.header.helpcontext = This->dwHelpContext;\n    file.header.res44 = 0x20;\n    file.header.res48 = 0x80;\n    file.header.dispatchpos = This->dispatch_href;\n\n    WMSFT_compile_namehash(This, &file);\n    /* do name and string compilation to get offsets for other compilations */\n    hres = WMSFT_compile_names(This, &file);\n    if (FAILED(hres)){\n        WMSFT_free_file(&file);\n        return hres;\n    }\n\n    hres = WMSFT_compile_strings(This, &file);\n    if (FAILED(hres)){\n        WMSFT_free_file(&file);\n        return hres;\n    }\n\n    WMSFT_compile_guidhash(This, &file);\n    hres = WMSFT_compile_guids(This, &file);\n    if (FAILED(hres)){\n        WMSFT_free_file(&file);\n        return hres;\n    }\n\n    if(This->HelpFile)\n        file.header.helpfile = This->HelpFile->offset;\n    else\n        file.header.helpfile = -1;\n\n    if(This->DocString)\n        file.header.helpstring = This->DocString->offset;\n    else\n        file.header.helpstring = -1;\n\n    /* do some more segment compilation */\n    file.header.nimpinfos = list_count(&This->ref_list);\n    file.header.nrtypeinfos = This->TypeInfoCount;\n\n    if(This->Name)\n        file.header.NameOffset = This->Name->offset;\n    else\n        file.header.NameOffset = -1;\n\n    file.header.CustomDataOffset = WMSFT_compile_custdata(&This->custdata_list, &file);\n\n    if(This->guid)\n        file.header.posguid = This->guid->offset;\n    else\n        file.header.posguid = -1;\n\n    junk_size = file.header.nrtypeinfos * sizeof(DWORD);\n    if(file.header.varflags & HELPDLLFLAG)\n        junk_size += sizeof(DWORD);\n    if(junk_size){\n        junk = heap_alloc_zero(junk_size);\n        if(file.header.varflags & HELPDLLFLAG){\n            *junk = This->HelpStringDll->offset;\n            junk_offs = 1;\n        }else\n            junk_offs = 0;\n    }else{\n        junk = NULL;\n        junk_offs = 0;\n    }\n\n    WMSFT_compile_typeinfo_seg(This, &file, junk + junk_offs);\n    WMSFT_compile_impinfo(This, &file);\n\n    running_offset = 0;\n\n    TRACE(\"header at: 0x%x\\n\", running_offset);\n    running_offset += sizeof(file.header);\n\n    TRACE(\"junk at: 0x%x\\n\", running_offset);\n    running_offset += junk_size;\n\n    TRACE(\"segdir at: 0x%x\\n\", running_offset);\n    running_offset += sizeof(file.segdir);\n\n    TRACE(\"typeinfo at: 0x%x\\n\", running_offset);\n    tmp_fill_segdir_seg(&file.segdir.pTypeInfoTab, &file.typeinfo_seg, &running_offset);\n\n    TRACE(\"guidhashtab at: 0x%x\\n\", running_offset);\n    tmp_fill_segdir_seg(&file.segdir.pGuidHashTab, &file.guidhash_seg, &running_offset);\n\n    TRACE(\"guidtab at: 0x%x\\n\", running_offset);\n    tmp_fill_segdir_seg(&file.segdir.pGuidTab, &file.guid_seg, &running_offset);\n\n    TRACE(\"reftab at: 0x%x\\n\", running_offset);\n    tmp_fill_segdir_seg(&file.segdir.pRefTab, &file.ref_seg, &running_offset);\n\n    TRACE(\"impinfo at: 0x%x\\n\", running_offset);\n    tmp_fill_segdir_seg(&file.segdir.pImpInfo, &file.impinfo_seg, &running_offset);\n\n    TRACE(\"impfiles at: 0x%x\\n\", running_offset);\n    tmp_fill_segdir_seg(&file.segdir.pImpFiles, &file.impfile_seg, &running_offset);\n\n    TRACE(\"namehashtab at: 0x%x\\n\", running_offset);\n    tmp_fill_segdir_seg(&file.segdir.pNameHashTab, &file.namehash_seg, &running_offset);\n\n    TRACE(\"nametab at: 0x%x\\n\", running_offset);\n    tmp_fill_segdir_seg(&file.segdir.pNametab, &file.name_seg, &running_offset);\n\n    TRACE(\"stringtab at: 0x%x\\n\", running_offset);\n    tmp_fill_segdir_seg(&file.segdir.pStringtab, &file.string_seg, &running_offset);\n\n    TRACE(\"typdesc at: 0x%x\\n\", running_offset);\n    tmp_fill_segdir_seg(&file.segdir.pTypdescTab, &file.typdesc_seg, &running_offset);\n\n    TRACE(\"arraydescriptions at: 0x%x\\n\", running_offset);\n    tmp_fill_segdir_seg(&file.segdir.pArrayDescriptions, &file.arraydesc_seg, &running_offset);\n\n    TRACE(\"custdata at: 0x%x\\n\", running_offset);\n    tmp_fill_segdir_seg(&file.segdir.pCustData, &file.custdata_seg, &running_offset);\n\n    TRACE(\"cdguids at: 0x%x\\n\", running_offset);\n    tmp_fill_segdir_seg(&file.segdir.pCDGuids, &file.cdguids_seg, &running_offset);\n\n    TRACE(\"res0e at: 0x%x\\n\", running_offset);\n    tmp_fill_segdir_seg(&file.segdir.res0e, NULL, &running_offset);\n\n    TRACE(\"res0f at: 0x%x\\n\", running_offset);\n    tmp_fill_segdir_seg(&file.segdir.res0f, NULL, &running_offset);\n\n    TRACE(\"aux_seg at: 0x%x\\n\", running_offset);\n\n    WMSFT_fixup_typeinfos(This, &file, running_offset);\n\n    outfile = CreateFileW(This->path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,\n            FILE_ATTRIBUTE_NORMAL, 0);\n    if (outfile == INVALID_HANDLE_VALUE){\n        WMSFT_free_file(&file);\n        heap_free(junk);\n        return TYPE_E_IOERROR;\n    }\n\n    br = WriteFile(outfile, &file.header, sizeof(file.header), &written, NULL);\n    if (!br) {\n        WMSFT_free_file(&file);\n        CloseHandle(outfile);\n        heap_free(junk);\n        return TYPE_E_IOERROR;\n    }\n\n    br = WriteFile(outfile, junk, junk_size, &written, NULL);\n    heap_free(junk);\n    if (!br) {\n        WMSFT_free_file(&file);\n        CloseHandle(outfile);\n        return TYPE_E_IOERROR;\n    }\n\n    br = WriteFile(outfile, &file.segdir, sizeof(file.segdir), &written, NULL);\n    if (!br) {\n        WMSFT_free_file(&file);\n        CloseHandle(outfile);\n        return TYPE_E_IOERROR;\n    }\n\n    WMSFT_write_segment(outfile, &file.typeinfo_seg);\n    WMSFT_write_segment(outfile, &file.guidhash_seg);\n    WMSFT_write_segment(outfile, &file.guid_seg);\n    WMSFT_write_segment(outfile, &file.ref_seg);\n    WMSFT_write_segment(outfile, &file.impinfo_seg);\n    WMSFT_write_segment(outfile, &file.impfile_seg);\n    WMSFT_write_segment(outfile, &file.namehash_seg);\n    WMSFT_write_segment(outfile, &file.name_seg);\n    WMSFT_write_segment(outfile, &file.string_seg);\n    WMSFT_write_segment(outfile, &file.typdesc_seg);\n    WMSFT_write_segment(outfile, &file.arraydesc_seg);\n    WMSFT_write_segment(outfile, &file.custdata_seg);\n    WMSFT_write_segment(outfile, &file.cdguids_seg);\n    WMSFT_write_segment(outfile, &file.aux_seg);\n\n    WMSFT_free_file(&file);\n\n    CloseHandle(outfile);\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeLib2_fnDeleteTypeInfo(ICreateTypeLib2 *iface,\n        LPOLESTR name)\n{\n    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);\n    FIXME(\"%p %s - stub\\n\", This, wine_dbgstr_w(name));\n    return E_NOTIMPL;\n}\n\nstatic HRESULT WINAPI ICreateTypeLib2_fnSetCustData(ICreateTypeLib2 *iface,\n        REFGUID guid, VARIANT *varVal)\n{\n    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);\n    TLBGuid *tlbguid;\n\n    TRACE(\"%p %s %p\\n\", This, debugstr_guid(guid), varVal);\n\n    if (!guid || !varVal)\n        return E_INVALIDARG;\n\n    tlbguid = TLB_append_guid(&This->guid_list, guid, -1);\n\n    return TLB_set_custdata(&This->custdata_list, tlbguid, varVal);\n}\n\nstatic HRESULT WINAPI ICreateTypeLib2_fnSetHelpStringContext(ICreateTypeLib2 *iface,\n        ULONG helpStringContext)\n{\n    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);\n    FIXME(\"%p %u - stub\\n\", This, helpStringContext);\n    return E_NOTIMPL;\n}\n\nstatic HRESULT WINAPI ICreateTypeLib2_fnSetHelpStringDll(ICreateTypeLib2 *iface,\n        LPOLESTR filename)\n{\n    ITypeLibImpl *This = impl_from_ICreateTypeLib2(iface);\n    TRACE(\"%p %s\\n\", This, wine_dbgstr_w(filename));\n\n    if (!filename)\n        return E_INVALIDARG;\n\n    This->HelpStringDll = TLB_append_str(&This->string_list, filename);\n\n    return S_OK;\n}\n\nstatic const ICreateTypeLib2Vtbl CreateTypeLib2Vtbl = {\n    ICreateTypeLib2_fnQueryInterface,\n    ICreateTypeLib2_fnAddRef,\n    ICreateTypeLib2_fnRelease,\n    ICreateTypeLib2_fnCreateTypeInfo,\n    ICreateTypeLib2_fnSetName,\n    ICreateTypeLib2_fnSetVersion,\n    ICreateTypeLib2_fnSetGuid,\n    ICreateTypeLib2_fnSetDocString,\n    ICreateTypeLib2_fnSetHelpFileName,\n    ICreateTypeLib2_fnSetHelpContext,\n    ICreateTypeLib2_fnSetLcid,\n    ICreateTypeLib2_fnSetLibFlags,\n    ICreateTypeLib2_fnSaveAllChanges,\n    ICreateTypeLib2_fnDeleteTypeInfo,\n    ICreateTypeLib2_fnSetCustData,\n    ICreateTypeLib2_fnSetHelpStringContext,\n    ICreateTypeLib2_fnSetHelpStringDll\n};\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnQueryInterface(ICreateTypeInfo2 *iface,\n        REFIID riid, void **object)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n\n    return ITypeInfo2_QueryInterface(&This->ITypeInfo2_iface, riid, object);\n}\n\nstatic ULONG WINAPI ICreateTypeInfo2_fnAddRef(ICreateTypeInfo2 *iface)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n\n    return ITypeInfo2_AddRef(&This->ITypeInfo2_iface);\n}\n\nstatic ULONG WINAPI ICreateTypeInfo2_fnRelease(ICreateTypeInfo2 *iface)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n\n    return ITypeInfo2_Release(&This->ITypeInfo2_iface);\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetGuid(ICreateTypeInfo2 *iface,\n        REFGUID guid)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n\n    TRACE(\"%p %s\\n\", This, debugstr_guid(guid));\n\n    This->guid = TLB_append_guid(&This->pTypeLib->guid_list, guid, This->hreftype);\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetTypeFlags(ICreateTypeInfo2 *iface,\n        UINT typeFlags)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    WORD old_flags;\n    HRESULT hres;\n\n    TRACE(\"%p %x\\n\", This, typeFlags);\n\n    if (typeFlags & TYPEFLAG_FDUAL) {\n        static const WCHAR stdole2tlb[] = { 's','t','d','o','l','e','2','.','t','l','b',0 };\n        ITypeLib *stdole;\n        ITypeInfo *dispatch;\n        HREFTYPE hreftype;\n        HRESULT hres;\n\n        hres = LoadTypeLib(stdole2tlb, &stdole);\n        if(FAILED(hres))\n            return hres;\n\n        hres = ITypeLib_GetTypeInfoOfGuid(stdole, &IID_IDispatch, &dispatch);\n        ITypeLib_Release(stdole);\n        if(FAILED(hres))\n            return hres;\n\n        hres = ICreateTypeInfo2_AddRefTypeInfo(iface, dispatch, &hreftype);\n        ITypeInfo_Release(dispatch);\n        if(FAILED(hres))\n            return hres;\n    }\n\n    old_flags = This->typeattr.wTypeFlags;\n    This->typeattr.wTypeFlags = typeFlags;\n\n    hres = ICreateTypeInfo2_LayOut(iface);\n    if (FAILED(hres)) {\n        This->typeattr.wTypeFlags = old_flags;\n        return hres;\n    }\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetDocString(ICreateTypeInfo2 *iface,\n        LPOLESTR doc)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n\n    TRACE(\"%p %s\\n\", This, wine_dbgstr_w(doc));\n\n    if (!doc)\n        return E_INVALIDARG;\n\n    This->DocString = TLB_append_str(&This->pTypeLib->string_list, doc);\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetHelpContext(ICreateTypeInfo2 *iface,\n        DWORD helpContext)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n\n    TRACE(\"%p %d\\n\", This, helpContext);\n\n    This->dwHelpContext = helpContext;\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetVersion(ICreateTypeInfo2 *iface,\n        WORD majorVerNum, WORD minorVerNum)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n\n    TRACE(\"%p %d %d\\n\", This, majorVerNum, minorVerNum);\n\n    This->typeattr.wMajorVerNum = majorVerNum;\n    This->typeattr.wMinorVerNum = minorVerNum;\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnAddRefTypeInfo(ICreateTypeInfo2 *iface,\n        ITypeInfo *typeInfo, HREFTYPE *refType)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    UINT index;\n    ITypeLib *container;\n    TLBRefType *ref_type;\n    TLBImpLib *implib;\n    TYPEATTR *typeattr;\n    TLIBATTR *libattr;\n    HRESULT hres;\n\n    TRACE(\"%p %p %p\\n\", This, typeInfo, refType);\n\n    if (!typeInfo || !refType)\n        return E_INVALIDARG;\n\n    hres = ITypeInfo_GetContainingTypeLib(typeInfo, &container, &index);\n    if (FAILED(hres))\n        return hres;\n\n    if (container == (ITypeLib*)&This->pTypeLib->ITypeLib2_iface) {\n        ITypeInfoImpl *target = impl_from_ITypeInfo(typeInfo);\n\n        ITypeLib_Release(container);\n\n        *refType = target->hreftype;\n\n        return S_OK;\n    }\n\n    hres = ITypeLib_GetLibAttr(container, &libattr);\n    if (FAILED(hres)) {\n        ITypeLib_Release(container);\n        return hres;\n    }\n\n    LIST_FOR_EACH_ENTRY(implib, &This->pTypeLib->implib_list, TLBImpLib, entry){\n        if(IsEqualGUID(&implib->guid->guid, &libattr->guid) &&\n                implib->lcid == libattr->lcid &&\n                implib->wVersionMajor == libattr->wMajorVerNum &&\n                implib->wVersionMinor == libattr->wMinorVerNum)\n            break;\n    }\n\n    if(&implib->entry == &This->pTypeLib->implib_list){\n        implib = heap_alloc_zero(sizeof(TLBImpLib));\n\n        if((ITypeLib2Vtbl*)container->lpVtbl == &tlbvt){\n            const ITypeLibImpl *our_container = impl_from_ITypeLib2((ITypeLib2*)container);\n            implib->name = SysAllocString(our_container->path);\n        }else{\n            hres = QueryPathOfRegTypeLib(&libattr->guid, libattr->wMajorVerNum,\n                    libattr->wMinorVerNum, libattr->lcid, &implib->name);\n            if(FAILED(hres)){\n                implib->name = NULL;\n                TRACE(\"QueryPathOfRegTypeLib failed, no name stored: %08x\\n\", hres);\n            }\n        }\n\n        implib->guid = TLB_append_guid(&This->pTypeLib->guid_list, &libattr->guid, 2);\n        implib->lcid = libattr->lcid;\n        implib->wVersionMajor = libattr->wMajorVerNum;\n        implib->wVersionMinor = libattr->wMinorVerNum;\n\n        list_add_tail(&This->pTypeLib->implib_list, &implib->entry);\n    }\n\n    ITypeLib_ReleaseTLibAttr(container, libattr);\n    ITypeLib_Release(container);\n\n    hres = ITypeInfo_GetTypeAttr(typeInfo, &typeattr);\n    if (FAILED(hres))\n        return hres;\n\n    index = 0;\n    LIST_FOR_EACH_ENTRY(ref_type, &This->pTypeLib->ref_list, TLBRefType, entry){\n        if(ref_type->index == TLB_REF_USE_GUID &&\n                IsEqualGUID(&ref_type->guid->guid, &typeattr->guid) &&\n                ref_type->tkind == typeattr->typekind)\n            break;\n        ++index;\n    }\n\n    if(&ref_type->entry == &This->pTypeLib->ref_list){\n        ref_type = heap_alloc_zero(sizeof(TLBRefType));\n\n        ref_type->tkind = typeattr->typekind;\n        ref_type->pImpTLInfo = implib;\n        ref_type->reference = index * sizeof(MSFT_ImpInfo);\n\n        ref_type->index = TLB_REF_USE_GUID;\n\n        ref_type->guid = TLB_append_guid(&This->pTypeLib->guid_list, &typeattr->guid, ref_type->reference+1);\n\n        list_add_tail(&This->pTypeLib->ref_list, &ref_type->entry);\n    }\n\n    ITypeInfo_ReleaseTypeAttr(typeInfo, typeattr);\n\n    *refType = ref_type->reference | 0x1;\n\n    if(IsEqualGUID(&ref_type->guid->guid, &IID_IDispatch))\n        This->pTypeLib->dispatch_href = *refType;\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnAddFuncDesc(ICreateTypeInfo2 *iface,\n        UINT index, FUNCDESC *funcDesc)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    TLBFuncDesc tmp_func_desc, *func_desc;\n    int buf_size, i;\n    char *buffer;\n    HRESULT hres;\n\n    TRACE(\"%p %u %p\\n\", This, index, funcDesc);\n\n    if (!funcDesc || funcDesc->oVft & 3)\n        return E_INVALIDARG;\n\n    switch (This->typeattr.typekind) {\n    case TKIND_MODULE:\n        if (funcDesc->funckind != FUNC_STATIC)\n            return TYPE_E_BADMODULEKIND;\n        break;\n    case TKIND_DISPATCH:\n        if (funcDesc->funckind != FUNC_DISPATCH)\n            return TYPE_E_BADMODULEKIND;\n        break;\n    default:\n        if (funcDesc->funckind != FUNC_PUREVIRTUAL)\n            return TYPE_E_BADMODULEKIND;\n    }\n\n    if (index > This->typeattr.cFuncs)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    if (funcDesc->invkind & (INVOKE_PROPERTYPUT | INVOKE_PROPERTYPUTREF) &&\n            !funcDesc->cParams)\n        return TYPE_E_INCONSISTENTPROPFUNCS;\n\n#ifdef _WIN64\n    if(This->pTypeLib->syskind == SYS_WIN64 &&\n            funcDesc->oVft % 8 != 0)\n        return E_INVALIDARG;\n#endif\n\n    memset(&tmp_func_desc, 0, sizeof(tmp_func_desc));\n    TLBFuncDesc_Constructor(&tmp_func_desc);\n\n    tmp_func_desc.funcdesc = *funcDesc;\n\n    if (tmp_func_desc.funcdesc.oVft != 0)\n        tmp_func_desc.funcdesc.oVft |= 1;\n\n    if (funcDesc->cScodes && funcDesc->lprgscode) {\n        tmp_func_desc.funcdesc.lprgscode = heap_alloc(sizeof(SCODE) * funcDesc->cScodes);\n        memcpy(tmp_func_desc.funcdesc.lprgscode, funcDesc->lprgscode, sizeof(SCODE) * funcDesc->cScodes);\n    } else {\n        tmp_func_desc.funcdesc.lprgscode = NULL;\n        tmp_func_desc.funcdesc.cScodes = 0;\n    }\n\n    buf_size = TLB_SizeElemDesc(&funcDesc->elemdescFunc);\n    for (i = 0; i < funcDesc->cParams; ++i) {\n        buf_size += sizeof(ELEMDESC);\n        buf_size += TLB_SizeElemDesc(funcDesc->lprgelemdescParam + i);\n    }\n    tmp_func_desc.funcdesc.lprgelemdescParam = heap_alloc(buf_size);\n    buffer = (char*)(tmp_func_desc.funcdesc.lprgelemdescParam + funcDesc->cParams);\n\n    hres = TLB_CopyElemDesc(&funcDesc->elemdescFunc, &tmp_func_desc.funcdesc.elemdescFunc, &buffer);\n    if (FAILED(hres)) {\n        heap_free(tmp_func_desc.funcdesc.lprgelemdescParam);\n        heap_free(tmp_func_desc.funcdesc.lprgscode);\n        return hres;\n    }\n\n    for (i = 0; i < funcDesc->cParams; ++i) {\n        hres = TLB_CopyElemDesc(funcDesc->lprgelemdescParam + i,\n                tmp_func_desc.funcdesc.lprgelemdescParam + i, &buffer);\n        if (FAILED(hres)) {\n            heap_free(tmp_func_desc.funcdesc.lprgelemdescParam);\n            heap_free(tmp_func_desc.funcdesc.lprgscode);\n            return hres;\n        }\n        if (tmp_func_desc.funcdesc.lprgelemdescParam[i].u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT &&\n                tmp_func_desc.funcdesc.lprgelemdescParam[i].tdesc.vt != VT_VARIANT &&\n                tmp_func_desc.funcdesc.lprgelemdescParam[i].tdesc.vt != VT_USERDEFINED){\n            hres = TLB_SanitizeVariant(&tmp_func_desc.funcdesc.lprgelemdescParam[i].u.paramdesc.pparamdescex->varDefaultValue);\n            if (FAILED(hres)) {\n                heap_free(tmp_func_desc.funcdesc.lprgelemdescParam);\n                heap_free(tmp_func_desc.funcdesc.lprgscode);\n                return hres;\n            }\n        }\n    }\n\n    tmp_func_desc.pParamDesc = TLBParDesc_Constructor(funcDesc->cParams);\n\n    if (This->funcdescs) {\n        This->funcdescs = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, This->funcdescs,\n                sizeof(TLBFuncDesc) * (This->typeattr.cFuncs + 1));\n\n        if (index < This->typeattr.cFuncs) {\n            memmove(This->funcdescs + index + 1, This->funcdescs + index,\n                    (This->typeattr.cFuncs - index) * sizeof(TLBFuncDesc));\n            func_desc = This->funcdescs + index;\n        } else\n            func_desc = This->funcdescs + This->typeattr.cFuncs;\n\n        /* move custdata lists to the new memory location */\n        for(i = 0; i < This->typeattr.cFuncs + 1; ++i){\n            if(index != i){\n                TLBFuncDesc *fd = &This->funcdescs[i];\n                if(fd->custdata_list.prev == fd->custdata_list.next)\n                    list_init(&fd->custdata_list);\n                else{\n                    fd->custdata_list.prev->next = &fd->custdata_list;\n                    fd->custdata_list.next->prev = &fd->custdata_list;\n                }\n            }\n        }\n    } else\n        func_desc = This->funcdescs = heap_alloc(sizeof(TLBFuncDesc));\n\n    memcpy(func_desc, &tmp_func_desc, sizeof(tmp_func_desc));\n    list_init(&func_desc->custdata_list);\n\n    ++This->typeattr.cFuncs;\n\n    This->needs_layout = TRUE;\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnAddImplType(ICreateTypeInfo2 *iface,\n        UINT index, HREFTYPE refType)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    TLBImplType *impl_type;\n    HRESULT hres;\n\n    TRACE(\"%p %u %d\\n\", This, index, refType);\n\n    switch(This->typeattr.typekind){\n        case TKIND_COCLASS: {\n            if (index == -1) {\n                FIXME(\"Unhandled index: -1\\n\");\n                return E_NOTIMPL;\n            }\n\n            if(index != This->typeattr.cImplTypes)\n                return TYPE_E_ELEMENTNOTFOUND;\n\n            break;\n        }\n        case TKIND_INTERFACE:\n        case TKIND_DISPATCH:\n            if (index != 0 || This->typeattr.cImplTypes)\n                return TYPE_E_ELEMENTNOTFOUND;\n            break;\n        default:\n            FIXME(\"Unimplemented typekind: %d\\n\", This->typeattr.typekind);\n            return E_NOTIMPL;\n    }\n\n    if (This->impltypes){\n        UINT i;\n\n        This->impltypes = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, This->impltypes,\n                sizeof(TLBImplType) * (This->typeattr.cImplTypes + 1));\n\n        if (index < This->typeattr.cImplTypes) {\n            memmove(This->impltypes + index + 1, This->impltypes + index,\n                    (This->typeattr.cImplTypes - index) * sizeof(TLBImplType));\n            impl_type = This->impltypes + index;\n        } else\n            impl_type = This->impltypes + This->typeattr.cImplTypes;\n\n        /* move custdata lists to the new memory location */\n        for(i = 0; i < This->typeattr.cImplTypes + 1; ++i){\n            if(index != i){\n                TLBImplType *it = &This->impltypes[i];\n                if(it->custdata_list.prev == it->custdata_list.next)\n                    list_init(&it->custdata_list);\n                else{\n                    it->custdata_list.prev->next = &it->custdata_list;\n                    it->custdata_list.next->prev = &it->custdata_list;\n                }\n            }\n        }\n    } else\n        impl_type = This->impltypes = heap_alloc(sizeof(TLBImplType));\n\n    memset(impl_type, 0, sizeof(TLBImplType));\n    TLBImplType_Constructor(impl_type);\n    impl_type->hRef = refType;\n\n    ++This->typeattr.cImplTypes;\n\n    if((refType & (~0x3)) == (This->pTypeLib->dispatch_href & (~0x3)))\n        This->typeattr.wTypeFlags |= TYPEFLAG_FDISPATCHABLE;\n\n    hres = ICreateTypeInfo2_LayOut(iface);\n    if (FAILED(hres))\n        return hres;\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetImplTypeFlags(ICreateTypeInfo2 *iface,\n        UINT index, INT implTypeFlags)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    TLBImplType *impl_type = &This->impltypes[index];\n\n    TRACE(\"%p %u %x\\n\", This, index, implTypeFlags);\n\n    if (This->typeattr.typekind != TKIND_COCLASS)\n        return TYPE_E_BADMODULEKIND;\n\n    if (index >= This->typeattr.cImplTypes)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    impl_type->implflags = implTypeFlags;\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetAlignment(ICreateTypeInfo2 *iface,\n        WORD alignment)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n\n    TRACE(\"%p %d\\n\", This, alignment);\n\n    This->typeattr.cbAlignment = alignment;\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetSchema(ICreateTypeInfo2 *iface,\n        LPOLESTR schema)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n\n    TRACE(\"%p %s\\n\", This, wine_dbgstr_w(schema));\n\n    if (!schema)\n        return E_INVALIDARG;\n\n    This->Schema = TLB_append_str(&This->pTypeLib->string_list, schema);\n\n    This->typeattr.lpstrSchema = This->Schema->str;\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnAddVarDesc(ICreateTypeInfo2 *iface,\n        UINT index, VARDESC *varDesc)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    TLBVarDesc *var_desc;\n\n    TRACE(\"%p %u %p\\n\", This, index, varDesc);\n\n    if (This->vardescs){\n        UINT i;\n\n        This->vardescs = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, This->vardescs,\n                sizeof(TLBVarDesc) * (This->typeattr.cVars + 1));\n\n        if (index < This->typeattr.cVars) {\n            memmove(This->vardescs + index + 1, This->vardescs + index,\n                    (This->typeattr.cVars - index) * sizeof(TLBVarDesc));\n            var_desc = This->vardescs + index;\n        } else\n            var_desc = This->vardescs + This->typeattr.cVars;\n\n        /* move custdata lists to the new memory location */\n        for(i = 0; i < This->typeattr.cVars + 1; ++i){\n            if(index != i){\n                TLBVarDesc *var = &This->vardescs[i];\n                if(var->custdata_list.prev == var->custdata_list.next)\n                    list_init(&var->custdata_list);\n                else{\n                    var->custdata_list.prev->next = &var->custdata_list;\n                    var->custdata_list.next->prev = &var->custdata_list;\n                }\n            }\n        }\n    } else\n        var_desc = This->vardescs = heap_alloc_zero(sizeof(TLBVarDesc));\n\n    TLBVarDesc_Constructor(var_desc);\n    TLB_AllocAndInitVarDesc(varDesc, &var_desc->vardesc_create);\n    var_desc->vardesc = *var_desc->vardesc_create;\n\n    ++This->typeattr.cVars;\n\n    This->needs_layout = TRUE;\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetFuncAndParamNames(ICreateTypeInfo2 *iface,\n        UINT index, LPOLESTR *names, UINT numNames)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    TLBFuncDesc *func_desc = &This->funcdescs[index];\n    int i;\n\n    TRACE(\"%p %u %p %u\\n\", This, index, names, numNames);\n\n    if (!names)\n        return E_INVALIDARG;\n\n    if (index >= This->typeattr.cFuncs || numNames == 0)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    if (func_desc->funcdesc.invkind & (INVOKE_PROPERTYPUT | INVOKE_PROPERTYPUTREF)){\n        if(numNames > func_desc->funcdesc.cParams)\n            return TYPE_E_ELEMENTNOTFOUND;\n    } else\n        if(numNames > func_desc->funcdesc.cParams + 1)\n            return TYPE_E_ELEMENTNOTFOUND;\n\n    for(i = 0; i < This->typeattr.cFuncs; ++i) {\n        TLBFuncDesc *iter = &This->funcdescs[i];\n        if (iter->Name && !strcmpW(TLB_get_bstr(iter->Name), *names)) {\n            if (iter->funcdesc.invkind & (INVOKE_PROPERTYPUT | INVOKE_PROPERTYPUTREF | INVOKE_PROPERTYGET) &&\n                    func_desc->funcdesc.invkind & (INVOKE_PROPERTYPUT | INVOKE_PROPERTYPUTREF | INVOKE_PROPERTYGET) &&\n                    func_desc->funcdesc.invkind != iter->funcdesc.invkind)\n                continue;\n            return TYPE_E_AMBIGUOUSNAME;\n        }\n    }\n\n    func_desc->Name = TLB_append_str(&This->pTypeLib->name_list, *names);\n\n    for (i = 1; i < numNames; ++i) {\n        TLBParDesc *par_desc = func_desc->pParamDesc + i - 1;\n        par_desc->Name = TLB_append_str(&This->pTypeLib->name_list, *(names + i));\n    }\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetVarName(ICreateTypeInfo2 *iface,\n        UINT index, LPOLESTR name)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n\n    TRACE(\"%p %u %s\\n\", This, index, wine_dbgstr_w(name));\n\n    if(!name)\n        return E_INVALIDARG;\n\n    if(index >= This->typeattr.cVars)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    This->vardescs[index].Name = TLB_append_str(&This->pTypeLib->name_list, name);\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetTypeDescAlias(ICreateTypeInfo2 *iface,\n        TYPEDESC *tdescAlias)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    HRESULT hr;\n\n    TRACE(\"%p %p\\n\", This, tdescAlias);\n\n    if(!tdescAlias)\n        return E_INVALIDARG;\n\n    if(This->typeattr.typekind != TKIND_ALIAS)\n        return TYPE_E_BADMODULEKIND;\n\n    hr = TLB_size_instance(This, This->pTypeLib->syskind, tdescAlias, &This->typeattr.cbSizeInstance, &This->typeattr.cbAlignment);\n    if(FAILED(hr))\n        return hr;\n\n    heap_free(This->tdescAlias);\n    This->tdescAlias = heap_alloc(TLB_SizeTypeDesc(tdescAlias, TRUE));\n    TLB_CopyTypeDesc(NULL, tdescAlias, This->tdescAlias);\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnDefineFuncAsDllEntry(ICreateTypeInfo2 *iface,\n        UINT index, LPOLESTR dllName, LPOLESTR procName)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    FIXME(\"%p %u %s %s - stub\\n\", This, index, wine_dbgstr_w(dllName), wine_dbgstr_w(procName));\n    return E_NOTIMPL;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetFuncDocString(ICreateTypeInfo2 *iface,\n        UINT index, LPOLESTR docString)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    TLBFuncDesc *func_desc = &This->funcdescs[index];\n\n    TRACE(\"%p %u %s\\n\", This, index, wine_dbgstr_w(docString));\n\n    if(!docString)\n        return E_INVALIDARG;\n\n    if(index >= This->typeattr.cFuncs)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    func_desc->HelpString = TLB_append_str(&This->pTypeLib->string_list, docString);\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetVarDocString(ICreateTypeInfo2 *iface,\n        UINT index, LPOLESTR docString)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    TLBVarDesc *var_desc = &This->vardescs[index];\n\n    TRACE(\"%p %u %s\\n\", This, index, wine_dbgstr_w(docString));\n\n    if(!docString)\n        return E_INVALIDARG;\n\n    if(index >= This->typeattr.cVars)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    var_desc->HelpString = TLB_append_str(&This->pTypeLib->string_list, docString);\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetFuncHelpContext(ICreateTypeInfo2 *iface,\n        UINT index, DWORD helpContext)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    TLBFuncDesc *func_desc = &This->funcdescs[index];\n\n    TRACE(\"%p %u %d\\n\", This, index, helpContext);\n\n    if(index >= This->typeattr.cFuncs)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    func_desc->helpcontext = helpContext;\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetVarHelpContext(ICreateTypeInfo2 *iface,\n        UINT index, DWORD helpContext)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    TLBVarDesc *var_desc = &This->vardescs[index];\n\n    TRACE(\"%p %u %d\\n\", This, index, helpContext);\n\n    if(index >= This->typeattr.cVars)\n        return TYPE_E_ELEMENTNOTFOUND;\n\n    var_desc->HelpContext = helpContext;\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetMops(ICreateTypeInfo2 *iface,\n        UINT index, BSTR bstrMops)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    FIXME(\"%p %u %s - stub\\n\", This, index, wine_dbgstr_w(bstrMops));\n    return E_NOTIMPL;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetTypeIdldesc(ICreateTypeInfo2 *iface,\n        IDLDESC *idlDesc)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n\n    TRACE(\"%p %p\\n\", This, idlDesc);\n\n    if (!idlDesc)\n        return E_INVALIDARG;\n\n    This->typeattr.idldescType.dwReserved = idlDesc->dwReserved;\n    This->typeattr.idldescType.wIDLFlags = idlDesc->wIDLFlags;\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnLayOut(ICreateTypeInfo2 *iface)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    ITypeInfo *tinfo;\n    TLBFuncDesc *func_desc;\n    UINT user_vft = 0, i, depth = 0;\n    HRESULT hres = S_OK;\n\n    TRACE(\"%p\\n\", This);\n\n    This->needs_layout = FALSE;\n\n    hres = ICreateTypeInfo2_QueryInterface(iface, &IID_ITypeInfo, (LPVOID*)&tinfo);\n    if (FAILED(hres))\n        return hres;\n\n    if (This->typeattr.typekind == TKIND_INTERFACE) {\n        ITypeInfo *inh;\n        TYPEATTR *attr;\n        HREFTYPE inh_href;\n\n        hres = ITypeInfo_GetRefTypeOfImplType(tinfo, 0, &inh_href);\n\n        if (SUCCEEDED(hres)) {\n            hres = ITypeInfo_GetRefTypeInfo(tinfo, inh_href, &inh);\n\n            if (SUCCEEDED(hres)) {\n                hres = ITypeInfo_GetTypeAttr(inh, &attr);\n                if (FAILED(hres)) {\n                    ITypeInfo_Release(inh);\n                    ITypeInfo_Release(tinfo);\n                    return hres;\n                }\n                This->typeattr.cbSizeVft = attr->cbSizeVft;\n                ITypeInfo_ReleaseTypeAttr(inh, attr);\n\n                do{\n                    ++depth;\n                    hres = ITypeInfo_GetRefTypeOfImplType(inh, 0, &inh_href);\n                    if(SUCCEEDED(hres)){\n                        ITypeInfo *next;\n                        hres = ITypeInfo_GetRefTypeInfo(inh, inh_href, &next);\n                        if(SUCCEEDED(hres)){\n                            ITypeInfo_Release(inh);\n                            inh = next;\n                        }\n                    }\n                }while(SUCCEEDED(hres));\n                hres = S_OK;\n\n                ITypeInfo_Release(inh);\n            } else if (hres == TYPE_E_ELEMENTNOTFOUND) {\n                This->typeattr.cbSizeVft = 0;\n                hres = S_OK;\n            } else {\n                ITypeInfo_Release(tinfo);\n                return hres;\n            }\n        } else if (hres == TYPE_E_ELEMENTNOTFOUND) {\n            This->typeattr.cbSizeVft = 0;\n            hres = S_OK;\n        } else {\n            ITypeInfo_Release(tinfo);\n            return hres;\n        }\n    } else if (This->typeattr.typekind == TKIND_DISPATCH)\n        This->typeattr.cbSizeVft = 7 * This->pTypeLib->ptr_size;\n    else\n        This->typeattr.cbSizeVft = 0;\n\n    func_desc = This->funcdescs;\n    i = 0;\n    while (i < This->typeattr.cFuncs) {\n        if (!(func_desc->funcdesc.oVft & 0x1))\n            func_desc->funcdesc.oVft = This->typeattr.cbSizeVft;\n\n        if ((func_desc->funcdesc.oVft & 0xFFFC) > user_vft)\n            user_vft = func_desc->funcdesc.oVft & 0xFFFC;\n\n        This->typeattr.cbSizeVft += This->pTypeLib->ptr_size;\n\n        if (func_desc->funcdesc.memid == MEMBERID_NIL) {\n            TLBFuncDesc *iter;\n            UINT j = 0;\n            BOOL reset = FALSE;\n\n            func_desc->funcdesc.memid = 0x60000000 + (depth << 16) + i;\n\n            iter = This->funcdescs;\n            while (j < This->typeattr.cFuncs) {\n                if (iter != func_desc && iter->funcdesc.memid == func_desc->funcdesc.memid) {\n                    if (!reset) {\n                        func_desc->funcdesc.memid = 0x60000000 + (depth << 16) + This->typeattr.cFuncs;\n                        reset = TRUE;\n                    } else\n                        ++func_desc->funcdesc.memid;\n                    iter = This->funcdescs;\n                    j = 0;\n                } else {\n                    ++iter;\n                    ++j;\n                }\n            }\n        }\n\n        ++func_desc;\n        ++i;\n    }\n\n    if (user_vft > This->typeattr.cbSizeVft)\n        This->typeattr.cbSizeVft = user_vft + This->pTypeLib->ptr_size;\n\n    for(i = 0; i < This->typeattr.cVars; ++i){\n        TLBVarDesc *var_desc = &This->vardescs[i];\n        if(var_desc->vardesc.memid == MEMBERID_NIL){\n            UINT j = 0;\n            BOOL reset = FALSE;\n            TLBVarDesc *iter;\n\n            var_desc->vardesc.memid = 0x40000000 + (depth << 16) + i;\n\n            iter = This->vardescs;\n            while (j < This->typeattr.cVars) {\n                if (iter != var_desc && iter->vardesc.memid == var_desc->vardesc.memid) {\n                    if (!reset) {\n                        var_desc->vardesc.memid = 0x40000000 + (depth << 16) + This->typeattr.cVars;\n                        reset = TRUE;\n                    } else\n                        ++var_desc->vardesc.memid;\n                    iter = This->vardescs;\n                    j = 0;\n                } else {\n                    ++iter;\n                    ++j;\n                }\n            }\n        }\n    }\n\n    ITypeInfo_Release(tinfo);\n    return hres;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnDeleteFuncDesc(ICreateTypeInfo2 *iface,\n        UINT index)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    FIXME(\"%p %u - stub\\n\", This, index);\n    return E_NOTIMPL;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnDeleteFuncDescByMemId(ICreateTypeInfo2 *iface,\n        MEMBERID memid, INVOKEKIND invKind)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    FIXME(\"%p %x %d - stub\\n\", This, memid, invKind);\n    return E_NOTIMPL;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnDeleteVarDesc(ICreateTypeInfo2 *iface,\n        UINT index)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    FIXME(\"%p %u - stub\\n\", This, index);\n    return E_NOTIMPL;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnDeleteVarDescByMemId(ICreateTypeInfo2 *iface,\n        MEMBERID memid)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    FIXME(\"%p %x - stub\\n\", This, memid);\n    return E_NOTIMPL;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnDeleteImplType(ICreateTypeInfo2 *iface,\n        UINT index)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    FIXME(\"%p %u - stub\\n\", This, index);\n    return E_NOTIMPL;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetCustData(ICreateTypeInfo2 *iface,\n        REFGUID guid, VARIANT *varVal)\n{\n    TLBGuid *tlbguid;\n\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n\n    TRACE(\"%p %s %p\\n\", This, debugstr_guid(guid), varVal);\n\n    if (!guid || !varVal)\n        return E_INVALIDARG;\n\n    tlbguid = TLB_append_guid(&This->pTypeLib->guid_list, guid, -1);\n\n    return TLB_set_custdata(This->pcustdata_list, tlbguid, varVal);\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetFuncCustData(ICreateTypeInfo2 *iface,\n        UINT index, REFGUID guid, VARIANT *varVal)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    FIXME(\"%p %u %s %p - stub\\n\", This, index, debugstr_guid(guid), varVal);\n    return E_NOTIMPL;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetParamCustData(ICreateTypeInfo2 *iface,\n        UINT funcIndex, UINT paramIndex, REFGUID guid, VARIANT *varVal)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    FIXME(\"%p %u %u %s %p - stub\\n\", This, funcIndex, paramIndex, debugstr_guid(guid), varVal);\n    return E_NOTIMPL;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetVarCustData(ICreateTypeInfo2 *iface,\n        UINT index, REFGUID guid, VARIANT *varVal)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    FIXME(\"%p %u %s %p - stub\\n\", This, index, debugstr_guid(guid), varVal);\n    return E_NOTIMPL;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetImplTypeCustData(ICreateTypeInfo2 *iface,\n        UINT index, REFGUID guid, VARIANT *varVal)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    FIXME(\"%p %u %s %p - stub\\n\", This, index, debugstr_guid(guid), varVal);\n    return E_NOTIMPL;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetHelpStringContext(ICreateTypeInfo2 *iface,\n        ULONG helpStringContext)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n\n    TRACE(\"%p %u\\n\", This, helpStringContext);\n\n    This->dwHelpStringContext = helpStringContext;\n\n    return S_OK;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetFuncHelpStringContext(ICreateTypeInfo2 *iface,\n        UINT index, ULONG helpStringContext)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    FIXME(\"%p %u %u - stub\\n\", This, index, helpStringContext);\n    return E_NOTIMPL;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetVarHelpStringContext(ICreateTypeInfo2 *iface,\n        UINT index, ULONG helpStringContext)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    FIXME(\"%p %u %u - stub\\n\", This, index, helpStringContext);\n    return E_NOTIMPL;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnInvalidate(ICreateTypeInfo2 *iface)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n    FIXME(\"%p - stub\\n\", This);\n    return E_NOTIMPL;\n}\n\nstatic HRESULT WINAPI ICreateTypeInfo2_fnSetName(ICreateTypeInfo2 *iface,\n        LPOLESTR name)\n{\n    ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);\n\n    TRACE(\"%p %s\\n\", This, wine_dbgstr_w(name));\n\n    if (!name)\n        return E_INVALIDARG;\n\n    This->Name = TLB_append_str(&This->pTypeLib->name_list, name);\n\n    return S_OK;\n}\n\nstatic const ICreateTypeInfo2Vtbl CreateTypeInfo2Vtbl = {\n    ICreateTypeInfo2_fnQueryInterface,\n    ICreateTypeInfo2_fnAddRef,\n    ICreateTypeInfo2_fnRelease,\n    ICreateTypeInfo2_fnSetGuid,\n    ICreateTypeInfo2_fnSetTypeFlags,\n    ICreateTypeInfo2_fnSetDocString,\n    ICreateTypeInfo2_fnSetHelpContext,\n    ICreateTypeInfo2_fnSetVersion,\n    ICreateTypeInfo2_fnAddRefTypeInfo,\n    ICreateTypeInfo2_fnAddFuncDesc,\n    ICreateTypeInfo2_fnAddImplType,\n    ICreateTypeInfo2_fnSetImplTypeFlags,\n    ICreateTypeInfo2_fnSetAlignment,\n    ICreateTypeInfo2_fnSetSchema,\n    ICreateTypeInfo2_fnAddVarDesc,\n    ICreateTypeInfo2_fnSetFuncAndParamNames,\n    ICreateTypeInfo2_fnSetVarName,\n    ICreateTypeInfo2_fnSetTypeDescAlias,\n    ICreateTypeInfo2_fnDefineFuncAsDllEntry,\n    ICreateTypeInfo2_fnSetFuncDocString,\n    ICreateTypeInfo2_fnSetVarDocString,\n    ICreateTypeInfo2_fnSetFuncHelpContext,\n    ICreateTypeInfo2_fnSetVarHelpContext,\n    ICreateTypeInfo2_fnSetMops,\n    ICreateTypeInfo2_fnSetTypeIdldesc,\n    ICreateTypeInfo2_fnLayOut,\n    ICreateTypeInfo2_fnDeleteFuncDesc,\n    ICreateTypeInfo2_fnDeleteFuncDescByMemId,\n    ICreateTypeInfo2_fnDeleteVarDesc,\n    ICreateTypeInfo2_fnDeleteVarDescByMemId,\n    ICreateTypeInfo2_fnDeleteImplType,\n    ICreateTypeInfo2_fnSetCustData,\n    ICreateTypeInfo2_fnSetFuncCustData,\n    ICreateTypeInfo2_fnSetParamCustData,\n    ICreateTypeInfo2_fnSetVarCustData,\n    ICreateTypeInfo2_fnSetImplTypeCustData,\n    ICreateTypeInfo2_fnSetHelpStringContext,\n    ICreateTypeInfo2_fnSetFuncHelpStringContext,\n    ICreateTypeInfo2_fnSetVarHelpStringContext,\n    ICreateTypeInfo2_fnInvalidate,\n    ICreateTypeInfo2_fnSetName\n};\n\n/******************************************************************************\n * ClearCustData (OLEAUT32.171)\n *\n * Clear a custom data type's data.\n *\n * PARAMS\n *  lpCust [I] The custom data type instance\n *\n * RETURNS\n *  Nothing.\n */\nvoid WINAPI ClearCustData(CUSTDATA *lpCust)\n{\n    if (lpCust && lpCust->cCustData)\n    {\n        if (lpCust->prgCustData)\n        {\n            DWORD i;\n\n            for (i = 0; i < lpCust->cCustData; i++)\n                VariantClear(&lpCust->prgCustData[i].varValue);\n\n            CoTaskMemFree(lpCust->prgCustData);\n            lpCust->prgCustData = NULL;\n        }\n        lpCust->cCustData = 0;\n    }\n}\n"
  },
  {
    "path": "ole2disp/wine_typelib.h",
    "content": "/*\n * typelib.h  internal wine data structures\n * used to decode typelib's\n *\n * Copyright 1999 Rein KLazes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef _WINE_TYPELIB_H\n#define _WINE_TYPELIB_H\n\n#include <stdarg.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"oleauto.h\"\n\n#define HELPDLLFLAG (0x0100)\n#define DO_NOT_SEEK (-1)\n\n#define MSFT_HREFTYPE_INTHISFILE(href) (!((href) & 3))\n#define MSFT_HREFTYPE_INDEX(href) ((href) /sizeof(MSFT_TypeInfoBase))\n\n/*-------------------------FILE STRUCTURES-----------------------------------*/\n\n/* There are two known file formats, those created with ICreateTypeLib\n * have the signature \"SLTG\" as their first four bytes, while those created\n * with ICreateTypeLib2 have \"MSFT\".\n */\n\n/*****************************************************\n *                MSFT typelibs\n *\n * These are TypeLibs created with ICreateTypeLib2\n *\n */\n\n/*\n * structure of the typelib type2 header\n * it is at the beginning of a type lib file\n *\n */\n\n#define MSFT_SIGNATURE 0x5446534D /* \"MSFT\" */\n\ntypedef struct tagMSFT_Header {\n/*0x00*/INT   magic1;       /* 0x5446534D \"MSFT\" */\n        INT   magic2;       /* 0x00010002 version nr? */\n        INT   posguid;      /* position of libid in guid table  */\n                            /* (should be,  else -1) */\n        INT   lcid;         /* locale id */\n/*0x10*/INT   lcid2;\n        INT   varflags;     /* (largely) unknown flags ,seems to be always 41 */\n                            /* becomes 0x51 with a helpfile defined */\n                            /* if help dll defined it's 0x151 */\n                            /* update : the lower nibble is syskind */\n        INT   version;      /* set with SetVersion() */\n        INT   flags;        /* set with SetFlags() */\n/*0x20*/INT   nrtypeinfos;  /* number of typeinfo's (till so far) */\n        INT   helpstring;   /* position of help string in stringtable */\n        INT   helpstringcontext;\n        INT   helpcontext;\n/*0x30*/INT   nametablecount;   /* number of names in name table */\n        INT   nametablechars;   /* nr of characters in name table */\n        INT   NameOffset;       /* offset of name in name table */\n        INT   helpfile;         /* position of helpfile in stringtable */\n/*0x40*/INT   CustomDataOffset; /* if -1 no custom data, else it is offset */\n                                /* in customer data/guid offset table */\n        INT   res44;            /* unknown always: 0x20 (guid hash size?) */\n        INT   res48;            /* unknown always: 0x80 (name hash size?) */\n        INT   dispatchpos;      /* HREFTYPE to IDispatch, or -1 if no IDispatch */\n/*0x50*/INT   nimpinfos;        /* number of impinfos */\n} MSFT_Header;\n\n/* segments in the type lib file have a structure like this: */\ntypedef struct tagMSFT_pSeg {\n        INT   offset;       /* absolute offset in file */\n        INT   length;       /* length of segment */\n        INT   res08;        /* unknown always -1 */\n        INT   res0c;        /* unknown always 0x0f in the header */\n                            /* 0x03 in the typeinfo_data */\n} MSFT_pSeg;\n\n/* layout of the main segment directory */\ntypedef struct tagMSFT_SegDir {\n/*1*/MSFT_pSeg pTypeInfoTab; /* each type info get an entry of 0x64 bytes */\n                             /* (25 ints) */\n/*2*/MSFT_pSeg pImpInfo;     /* table with info for imported types */\n/*3*/MSFT_pSeg pImpFiles;    /* import libraries */\n/*4*/MSFT_pSeg pRefTab;      /* References table */\n/*5*/MSFT_pSeg pGuidHashTab; /* always exists, always same size (0x80) */\n                             /* hash table with offsets to guid */\n/*6*/MSFT_pSeg pGuidTab;     /* all guids are stored here together with  */\n                             /* offset in some table???? */\n/*7*/MSFT_pSeg pNameHashTab; /* always created, always same size (0x200) */\n                             /* hash table with offsets to names */\n/*8*/MSFT_pSeg pNametab;     /* name tables */\n/*9*/MSFT_pSeg pStringtab;   /* string table */\n/*A*/MSFT_pSeg pTypdescTab;  /* table with type descriptors */\n/*B*/MSFT_pSeg pArrayDescriptions;\n/*C*/MSFT_pSeg pCustData;    /* data table, used for custom data and default */\n                             /* parameter values */\n/*D*/MSFT_pSeg pCDGuids;     /* table with offsets for the guids and into */\n                             /* the customer data table */\n/*E*/MSFT_pSeg res0e;        /* unknown */\n/*F*/MSFT_pSeg res0f;        /* unknown  */\n} MSFT_SegDir;\n\n\n/* base type info data */\ntypedef struct tagMSFT_TypeInfoBase {\n/*000*/ INT   typekind;             /*  it is the TKIND_xxx */\n                                    /* some byte alignment stuff */\n        INT     memoffset;          /* points past the file, if no elements */\n        INT     res2;               /* zero if no element, N*0x40 */\n        INT     res3;               /* -1 if no element, (N-1)*0x38 */\n/*010*/ INT     res4;               /* always? 3 */\n        INT     res5;               /* always? zero */\n        INT     cElement;           /* counts elements, HI=cVars, LO=cFuncs */\n        INT     res7;               /* always? zero */\n/*020*/ INT     res8;               /* always? zero */\n        INT     res9;               /* always? zero */\n        INT     resA;               /* always? zero */\n        INT     posguid;            /* position in guid table */\n/*030*/ INT     flags;              /* Typeflags */\n        INT     NameOffset;         /* offset in name table */\n        INT     version;            /* element version */\n        INT     docstringoffs;      /* offset of docstring in string tab */\n/*040*/ INT     helpstringcontext;  /*  */\n        INT     helpcontext;    /* */\n        INT     oCustData;          /* offset in customer data table */\n#ifdef WORDS_BIGENDIAN\n        INT16   cbSizeVft;      /* virtual table size, including inherits */\n        INT16   cImplTypes;     /* nr of implemented interfaces */\n#else\n        INT16   cImplTypes;     /* nr of implemented interfaces */\n        INT16   cbSizeVft;      /* virtual table size, including inherits */\n#endif\n/*050*/ INT     size;           /* size in bytes, at least for structures */\n        /* FIXME: name of this field */\n        INT     datatype1;      /* position in type description table */\n                                /* or in base interfaces */\n                                /* if coclass: offset in reftable */\n                                /* if interface: reference to inherited if */\n                                /* if module: offset to dllname in name table */\n        INT     datatype2;      /* for interfaces: hiword is num of inherited funcs */\n                                /*                 loword is num of inherited interfaces */\n        INT     res18;          /* always? 0 */\n/*060*/ INT     res19;          /* always? -1 */\n} MSFT_TypeInfoBase;\n\n/* layout of an entry with information on imported types */\ntypedef struct tagMSFT_ImpInfo {\n    INT     flags;          /* bits 0 - 15:  count */\n                            /* bit  16:      if set oGuid is an offset to Guid */\n                            /*               if clear oGuid is a typeinfo index in the specified typelib */\n                            /* bits 24 - 31: TKIND of reference */\n    INT     oImpFile;       /* offset in the Import File table */\n    INT     oGuid;          /* offset in Guid table or typeinfo index (see bit 16 of res0) */\n} MSFT_ImpInfo;\n\n#define MSFT_IMPINFO_OFFSET_IS_GUID 0x00010000\n\n/* function description data */\ntypedef struct {\n    INT   Info;         /* record size including some extra stuff */\n    INT   DataType;     /* data type of the member, eg return of function */\n    INT   Flags;        /* something to do with attribute flags (LOWORD) */\n#ifdef WORDS_BIGENDIAN\n    INT16 funcdescsize; /* size of reconstituted FUNCDESC and related structs */\n    INT16 VtableOffset; /* offset in vtable */\n#else\n    INT16 VtableOffset; /* offset in vtable */\n    INT16 funcdescsize; /* size of reconstituted FUNCDESC and related structs */\n#endif\n    INT   FKCCIC;       /* bit string with the following  */\n                        /* meaning (bit 0 is the msb): */\n                        /* bit 2 indicates that oEntry is numeric */\n                        /* bit 3 that parameter has default values */\n                        /* calling convention (bits 4-7 ) */\n                        /* bit 8 indicates that custom data is present */\n                        /* Invocation kind (bits 9-12 ) */\n                        /* function kind (eg virtual), bits 13-15  */\n#ifdef WORDS_BIGENDIAN\n    INT16 nroargs;      /* nr of optional arguments */\n    INT16 nrargs;       /* number of arguments (including optional ????) */\n#else\n    INT16 nrargs;       /* number of arguments (including optional ????) */\n    INT16 nroargs;      /* nr of optional arguments */\n#endif\n\n    /* optional attribute fields, the number of them is variable */\n    INT   HelpContext;\n    INT   oHelpString;\n    INT   oEntry;       /* either offset in string table or numeric as it is */\n    INT   res9;         /* unknown (-1) */\n    INT   resA;         /* unknown (-1) */\n    INT   HelpStringContext;\n    /* these are controlled by a bit set in the FKCCIC field  */\n    INT   oCustData;        /* custom data for function */\n    INT   oArgCustData[1];  /* custom data per argument */\n} MSFT_FuncRecord;\n\n/* after this may follow an array with default value pointers if the\n * appropriate bit in the FKCCIC field has been set:\n * INT   oDefaultValue[nrargs];\n */\n\n    /* Parameter info one per argument*/\ntypedef struct {\n        INT   DataType;\n        INT   oName;\n        INT   Flags;\n    } MSFT_ParameterInfo;\n\n/* Variable description data */\ntypedef struct {\n    INT   Info;         /* record size including some extra stuff */\n    INT   DataType;     /* data type of the variable */\n    INT   Flags;        /* VarFlags (LOWORD) */\n#ifdef WORDS_BIGENDIAN\n    INT16 vardescsize;  /* size of reconstituted VARDESC and related structs */\n    INT16 VarKind;      /* VarKind */\n#else\n    INT16 VarKind;      /* VarKind */\n    INT16 vardescsize;  /* size of reconstituted VARDESC and related structs */\n#endif\n    INT   OffsValue;    /* value of the variable or the offset  */\n                        /* in the data structure */\n    /* optional attribute fields, the number of them is variable */\n    /* controlled by record length */\n    INT   HelpContext;\n    INT   HelpString;\n    INT   res9;         /* unknown (-1) */\n    INT   oCustData;        /* custom data for variable */\n    INT   HelpStringContext;\n} MSFT_VarRecord;\n\n/* Structure of the reference data  */\ntypedef struct {\n    INT   reftype;  /* either offset in type info table, then it's */\n                    /* a multiple of 64 */\n                    /* or offset in the external reference table */\n                    /* with an offset of 1 */\n    INT   flags;\n    INT   oCustData;    /* custom data */\n    INT   onext;    /* next offset, -1 if last */\n} MSFT_RefRecord;\n\n/* this is how a guid is stored */\ntypedef struct {\n    GUID guid;\n    INT   hreftype;     /* -2 for the typelib guid, typeinfo offset\n\t\t\t   for typeinfo guid, low two bits are 01 if\n\t\t\t   this is an imported typeinfo, low two bits\n\t\t\t   are 10 if this is an imported typelib (used\n\t\t\t   by imported typeinfos) */\n    INT   next_hash;    /* offset to next guid in the hash bucket */\n} MSFT_GuidEntry;\n/* some data preceding entries in the name table */\ntypedef struct {\n    INT   hreftype;     /* is -1 if name is for neither a typeinfo,\n\t\t\t   a variable, or a function (that is, name\n\t\t\t   is for a typelib or a function parameter).\n\t\t\t   otherwise is the offset of the first\n\t\t\t   typeinfo that this name refers to (either\n\t\t\t   to the typeinfo itself or to a member of\n\t\t\t   the typeinfo */\n    INT   next_hash;    /* offset to next name in the hash bucket */\n    INT   namelen;      /* only lower 8 bits are valid */\n                        /* 0x1000 if name is only used once as a variable name */\n                        /* 0x2000 if name is a variable in an enumeration */\n                        /* 0x3800 if name is typeinfo name */\n} MSFT_NameIntro;\n/* the custom data table directory has entries like this */\ntypedef struct {\n    INT   GuidOffset;\n    INT   DataOffset;\n    INT   next;     /* next offset in the table, -1 if it's the last */\n} MSFT_CDGuid;\n\n\n/***********************************************************\n *\n *                SLTG typelibs.\n *\n * These are created with ICreateTypeLib\n *\n */\n\n#include \"pshpack1.h\"\n\ntypedef struct {\n/*00*/\tDWORD SLTG_magic;\t/* 0x47544c53  == \"SLTG\" */\n/*04*/\tWORD nrOfFileBlks;\t/* no of SLTG_BlkEntry's + 1 */\n/*06*/  WORD res06;\t\t/* ?? always 9 */\n/*08*/  WORD res08;             /* some kind of len/offset ?? */\n/*0a*/\tWORD first_blk;\t\t/* 1 based index into blk entries that\n\t\t\t\t   corresponds to first block in file */\n/*0c*/\tDWORD res0c;\t\t/* always 0x000204ff */\n/*10*/  DWORD res10;\t\t/* always 0x00000000 */\n/*14*/\tDWORD res14;\t\t/* always 0x000000c0 */\n/*18*/\tDWORD res18;\t\t/* always 0x46000000 */\n/*1c*/\tDWORD res1c;\t\t/* always 0x00000044 */\n/*20*/\tDWORD res20;\t\t/* always 0xffff0000 */\n} SLTG_Header;\n\n/* This gets followed by a list of block entries */\ntypedef struct {\n/*00*/  DWORD len;\n/*04*/\tWORD index_string; /* offs from start of SLTG_Magic to index string */\n/*06*/  WORD next;\n} SLTG_BlkEntry;\n\n/* The order of the blocks in the file is given by starting at Block\n   entry firt_blk and stepping through using the next pointer */\n\n/* These then get followed by this magic */\ntypedef struct {\n/*00*/ BYTE res00;\t\t/* always 0x01 */\n/*01*/ CHAR CompObj_magic[8];\t/* always \"CompObj\" */\n/*09*/ CHAR dir_magic[4];\t/* always \"dir\" */\n} SLTG_Magic;\n\n#define SLTG_COMPOBJ_MAGIC \"CompObj\"\n#define SLTG_DIR_MAGIC \"dir\"\n\n/* Next we have SLTG_Header.nrOfFileBlks - 2 of Index strings.  These\nare presumably unique to within the file and look something like\n\"AAAAAAAAAA\" with the first character incremented from 'A' to ensure\nuniqueness.  I guess successive chars increment when we need to wrap\nthe first one. */\n\ntypedef struct {\n/*00*/ CHAR string[11];\n} SLTG_Index;\n\n\n/* This is followed by SLTG_pad9 */\ntypedef struct {\n/*00*/ CHAR pad[9];\t/* 9 '\\0's */\n} SLTG_Pad9;\n\n\n/* Now we have the noOfFileBlks - 1 worth of blocks. The length of\neach block is given by its entry in SLTG_BlkEntry. */\n\n/* type SLTG_NAME in rather like a BSTR except that the length in\nbytes is given by the first WORD and the string contains 8bit chars */\n\ntypedef WORD SLTG_Name;\n\n/* The main library block looks like this.  This one seems to come last */\n\ntypedef struct {\n/*00*/\tWORD magic;\t\t/* 0x51cc */\n/*02*/  WORD res02;\t\t/* 0x0003, 0x0004 */\n/*04*/  WORD name;              /* offset to name in name table */\n/*06*/  SLTG_Name res06;\t/* maybe this is just WORD == 0xffff */\n\tSLTG_Name helpstring;\n\tSLTG_Name helpfile;\n\tDWORD helpcontext;\n\tWORD syskind;\t\t/* == 1 for win32, 0 for win16 */\n\tWORD lcid;\t\t/* == 0x409, 0x809 etc */\n\tDWORD res12;\t\t/* == 0 */\n \tWORD libflags;\t\t/* LIBFLAG_* */\n\tWORD maj_vers;\n\tWORD min_vers;\n\tGUID uuid;\n} SLTG_LibBlk;\n\n#define SLTG_LIBBLK_MAGIC 0x51cc\n\n/* we then get 0x40 bytes worth of 0xffff or small numbers followed by\n   nrOfFileBlks - 2 of these */\ntypedef struct {\n\tSLTG_Name index_name; /* This refers to a name in the directory */\n\tSLTG_Name other_name; /* Another one of these weird names */\n\tWORD res1a;\t      /* 0xffff */\n\tWORD name_offs;\t      /* offset to name in name table */\n\tWORD hlpstr_len;      /* if this is non-zero we get this many\n\t\t\t\t bytes before the next element, which seem\n\t\t\t\t to reference the docstring of the type ? */\n\tWORD res20;\t      /* 0xffff */\n\tDWORD helpcontext;\n\tWORD res26;\t      /* 0xffff */\n        GUID uuid;\n        WORD typekind;\n} SLTG_OtherTypeInfo;\n\n/* Next we get WORD 0x0003 followed by a DWORD which if we add to\n0x216 gives the offset to the name table from the start of the LibBlk\nstruct */\n\ntypedef struct {\n/*00*/\tWORD magic;\t\t/* 0x0501 */\n/*02*/\tDWORD href_table;\t/* if not 0xffffffff, then byte offset from\n\t\t\t\t   beginning of struct to href table */\n/*06*/\tDWORD res06;\t\t/* 0xffffffff */\n/*0a*/\tDWORD elem_table;\t/* offset to members */\n/*0e*/\tDWORD res0e;\t\t/* 0xffffffff */\n/*12*/\tWORD major_version;\t/* major version number */\n/*14*/  WORD minor_version;\t/* minor version number */\n/*16*/\tDWORD res16;\t/* 0xfffe0000 or 0xfffc0000 (on dual interfaces?) */\n/*1a*/\tBYTE typeflags1;/* 0x02 | top 5 bits hold l5sbs of TYPEFLAGS */\n/*1b*/\tBYTE typeflags2;/* TYPEFLAGS >> 5 */\n/*1c*/\tBYTE typeflags3;/* 0x02*/\n/*1d*/\tBYTE typekind;\t/* 0x03 == TKIND_INTERFACE etc. */\n/*1e*/  DWORD res1e;\t/* 0x00000000 or 0xffffffff */\n} SLTG_TypeInfoHeader;\n\n#define SLTG_TIHEADER_MAGIC 0x0501\n\ntypedef struct {\n/*00*/  WORD cFuncs;\n/*02*/  WORD cVars;\n/*04*/  WORD cImplTypes;\n/*06*/  WORD res06; /* always 0000 */\n/*08*/  WORD funcs_off; /* offset to functions (starting from the member header) */\n/*0a*/  WORD vars_off; /* offset to vars (starting from the member header) */\n/*0c*/  WORD impls_off; /* offset to implemented types (starting from the member header) */\n/*0e*/  WORD funcs_bytes; /* bytes used by function data */\n/*10*/  WORD vars_bytes; /* bytes used by var data */\n/*12*/  WORD impls_bytes; /* bytes used by implemented type data */\n/*14*/  WORD tdescalias_vt; /* for TKIND_ALIAS */\n/*16*/  WORD res16; /* always ffff */\n/*18*/  DWORD helpctxtbase; /* base value of member help context */\n/*1c*/  WORD simple_alias; /* tdescalias_vt is a vt rather than an offset? */\n/*1e*/  WORD res1e; /* always 0000 */\n/*20*/  WORD cbSizeInstance;\n/*22*/  WORD cbAlignment;\n/*24*/  WORD res24;\n/*26*/  WORD res26;\n/*28*/  WORD cbSizeVft;\n/*2a*/  WORD res2a; /* always ffff */\n/*2c*/  WORD res2c; /* always ffff */\n/*2e*/  WORD res2e; /* always ffff */\n/*30*/  WORD res30; /* always ffff */\n/*32*/  WORD res32;\n/*34*/  WORD res34;\n/*36*/  BYTE module_entry_info_off;\n/*37*/  BYTE res37;\n/*38*/  WORD res38;\n/*3a*/  WORD module_entry_info_size;\n} SLTG_TypeInfoTail;\n\ntypedef struct {\n/*00*/ WORD res00; /* 0x0001 sometimes 0x0003 ?? */\n/*02*/ WORD res02; /* 0xffff */\n/*04*/ BYTE res04; /* 0x01 */\n/*05*/ DWORD cbExtra; /* No of bytes that follow */\n} SLTG_MemberHeader;\n\ntypedef struct {\n/*00*/\tWORD magic;\t/* 0x120a */\n/*02*/\tWORD next;\t/* offset in bytes to next block from start of block\n                           group, 0xffff if last item */\n/*04*/\tWORD name;\t/* offset to name within name table */\n/*06*/\tWORD value;\t/* offset to value from start of block group */\n/*08*/\tWORD res08;\t/* 0x56 */\n/*0a*/\tDWORD memid;\t/* memid */\n/*0e*/  WORD helpcontext;/* 0xfffe == no context, 0x0001 == stored in EnumInfo struct, else offset\n\t\t\t    to value from start of block group */\n/*10*/\tWORD helpstring;/* offset from start of block group to string offset */\n} SLTG_EnumItem;\n\n#define SLTG_ENUMITEM_MAGIC 0x120a\n\ntypedef struct {\n\tBYTE magic;\t/* 0x4c, 0xcb or 0x8b with optional SLTG_FUNCTION_FLAGS_PRESENT flag */\n\tBYTE inv;\t/* high nibble is INVOKE_KIND, low nibble = 2 */\n\tWORD next;\t/* byte offset from beginning of group to next fn */\n\tWORD name;\t/* Offset within name table to name */\n\tDWORD dispid;\t/* dispid */\n\tWORD helpcontext; /* helpcontext (again 1 is special) */\n\tWORD helpstring;/* helpstring offset to offset */\n\tWORD arg_off;\t/* offset to args from start of block */\n\tBYTE nacc;\t/* lowest 3bits are CALLCONV, rest are no of args */\n        BYTE retnextopt;/* if 0x80 bit set ret type follows else next WORD\n\t\t\t   is offset to ret type. No of optional args is\n\t\t\t   middle 6 bits */\n\tWORD rettype;\t/* return type VT_?? or offset to ret type */\n\tWORD vtblpos;\t/* position in vtbl? */\n\tWORD funcflags; /* present if magic & 0x20 */\n\tWORD res18;\t/* flags? this and below only present if magic & 0x10 */\n\tWORD helpfile;\t/* encoded help file name */\n/* Param list starts, repeat next two as required */\n#if 0\n\tWORD  name;\t/* offset to 2nd letter of name */\n\tWORD+ type;\t/* VT_ of param */\n#endif\n} SLTG_Function;\n\n#define SLTG_FUNCTION_FLAGS_PRESENT 0x20\n#define SLTG_FUNCTION_HELPFILE_PRESENT 0x10\n#define SLTG_FUNCTION_MAGIC 0x4c\n#define SLTG_DISPATCH_FUNCTION_MAGIC 0xcb\n#define SLTG_STATIC_FUNCTION_MAGIC 0x8b\n\ntypedef struct {\n/*00*/\tBYTE magic;\t\t/* 0xdf */\n/*01*/  BYTE res01;\t\t/* 0x00 */\n/*02*/\tDWORD res02;\t\t/* 0xffffffff */\n/*06*/\tDWORD res06;\t\t/* 0xffffffff */\n/*0a*/\tDWORD res0a;\t\t/* 0xffffffff */\n/*0e*/\tDWORD res0e;\t\t/* 0xffffffff */\n/*12*/\tDWORD res12;\t\t/* 0xffffffff */\n/*16*/\tDWORD res16;\t\t/* 0xffffffff */\n/*1a*/\tDWORD res1a;\t\t/* 0xffffffff */\n/*1e*/\tDWORD res1e;\t\t/* 0xffffffff */\n/*22*/\tDWORD res22;\t\t/* 0xffffffff */\n/*26*/\tDWORD res26;\t\t/* 0xffffffff */\n/*2a*/\tDWORD res2a;\t\t/* 0xffffffff */\n/*2e*/\tDWORD res2e;\t\t/* 0xffffffff */\n/*32*/\tDWORD res32;\t\t/* 0xffffffff */\n/*36*/\tDWORD res36;\t\t/* 0xffffffff */\n/*3a*/\tDWORD res3a;\t\t/* 0xffffffff */\n/*3e*/\tDWORD res3e;\t\t/* 0xffffffff */\n/*42*/\tWORD  res42;\t\t/* 0xffff */\n/*44*/\tDWORD number;\t\t/* this is 8 times the number of refs */\n/*48*/\t/* Now we have number bytes (8 for each ref) of SLTG_UnknownRefInfo */\n\n/*50*/\tWORD res50;\t\t/* 0xffff */\n/*52*/\tBYTE res52;\t\t/* 0x01 */\n/*53*/\tDWORD res53;\t\t/* 0x00000000 */\n/*57*/  SLTG_Name names[1];\n  /*    Now we have number/8 SLTG_Names (first WORD is no of bytes in the ascii\n   *    string).  Strings look like \"*\\Rxxxx*#n\".  If xxxx == ffff then the\n   *    ref refers to the nth type listed in this library (0 based).  Else\n   *    the xxxx (which maybe fewer than 4 digits) is the offset into the name\n   *    table to a string \"*\\G{<guid>}#1.0#0#C:\\WINNT\\System32\\stdole32.tlb#\"\n   *    The guid is the typelib guid; the ref again refers to the nth type of\n   *    the imported typelib.\n   */\n\n/*xx*/ BYTE resxx;\t\t/* 0xdf */\n\n} SLTG_RefInfo;\n\n#define SLTG_REF_MAGIC 0xdf\n\ntypedef struct {\n\tWORD res00;\t/* 0x0001 */\n\tBYTE res02;\t/* 0x02 */\n\tBYTE res03;\t/* 0x40 if internal ref, 0x00 if external ? */\n\tWORD res04;\t/* 0xffff */\n\tWORD res06;\t/* 0x0000, 0x0013 or 0xffff ?? */\n} SLTG_UnknownRefInfo;\n\ntypedef struct {\n  WORD res00; /* 0x004a */\n  WORD next;  /* byte offs to next interface */\n  WORD res04; /* 0xffff */\n  BYTE impltypeflags; /* IMPLTYPEFLAG_* */\n  BYTE res07; /* 0x80 */\n  WORD res08; /* 0x0012, 0x0028 ?? */\n  WORD ref;   /* number in ref table ? */\n  WORD res0c; /* 0x4000 */\n  WORD res0e; /* 0xfffe */\n  WORD res10; /* 0xffff */\n  WORD res12; /* 0x001d */\n  WORD pos_in_table; /* 0x0, 0x4, ? */\n} SLTG_ImplInfo;\n\n#define SLTG_IMPL_MAGIC 0x004a\n\ntypedef struct {\n  BYTE magic; /* 0x0a */\n  BYTE flags;\n  WORD next;\n  WORD name;\n  WORD byte_offs; /* pos in struct, or offset to const type or const data (if flags & 0x08) */\n  WORD type; /* if flags & 0x02 this is the type, else offset to type */\n  DWORD memid;\n  WORD helpcontext; /* ?? */\n  WORD helpstring; /* ?? */\n  WORD varflags; /* only present if magic & 0x20 */\n  WORD res14; /* flags? this and below only present if magic & 0x10 */\n  WORD helpfile; /* encoded help file name */\n} SLTG_Variable;\n\n#define SLTG_VAR_MAGIC 0x0a\n#define SLTG_VAR_WITH_FLAGS_MAGIC 0x2a\n#define SLTG_VAR_WITH_HELPFILE 0x3a\n\n\n/* CARRAYs look like this\nWORD type == VT_CARRAY\nWORD offset from start of block to SAFEARRAY\nWORD typeofarray\n*/\n\n\ntypedef struct\n{\n    WORD is_ord;\n    WORD module;\n    WORD ord_or_entry_offs;\n    WORD prev_offset;\n    WORD res0a;/* always 0 */\n    WORD res0c;/* always 0 */\n    WORD res0e;/* always 0 */\n    WORD res10;/* always 0 */\n    /* 2-byte aligned null-terminated string (is_ord = 0) */\n} SLTG_ModuleEntryInfo;\n#include \"poppack.h\"\n\nHRESULT ITypeInfoImpl_GetInternalFuncDesc( ITypeInfo *iface, UINT index, const FUNCDESC **ppFuncDesc ) DECLSPEC_HIDDEN;\n\nextern DWORD _invoke(FARPROC func,CALLCONV callconv, int nrargs, DWORD *args) DECLSPEC_HIDDEN;\n\nHRESULT TMARSHAL_DllGetClassObject(REFCLSID rclsid, REFIID iid,LPVOID *ppv) DECLSPEC_HIDDEN;\n\n/* The OLE Automation ProxyStub Interface Class (aka Typelib Marshaler) */\nDEFINE_OLEGUID( CLSID_PSDispatch,    0x00020420, 0x0000, 0x0000 );\nDEFINE_OLEGUID( CLSID_PSEnumVariant, 0x00020421, 0x0000, 0x0000 );\nDEFINE_OLEGUID( CLSID_PSTypeInfo,    0x00020422, 0x0000, 0x0000 );\nDEFINE_OLEGUID( CLSID_PSTypeLib,     0x00020423, 0x0000, 0x0000 );\nDEFINE_OLEGUID( CLSID_PSOAInterface, 0x00020424, 0x0000, 0x0000 );\nDEFINE_OLEGUID( CLSID_PSTypeComp,    0x00020425, 0x0000, 0x0000 );\n\n/*---------------------------END--------------------------------------------*/\n#endif\n"
  },
  {
    "path": "ole2nls/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(ole2nls SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/ole2nls.def ole2nls.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(ole2nls.dll16 ole2nls)\ntarget_link_libraries(ole2nls libwine winecrt0 krnl386)\nset_target_properties(ole2nls PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "ole2nls/Makefile.in",
    "content": "MODULE    = ole2nls.dll16\n\nEXTRADLLFLAGS = -m16 -Wb,--main-module,ole32.dll\n\nC_SRCS = ole2nls.c\n\nRC_SRCS = version.rc\n"
  },
  {
    "path": "ole2nls/ole2nls.c",
    "content": "/*\n *\tOLE2NLS library\n *\n *\tCopyright 1995\tMartin von Loewis\n *      Copyright 1998  David Lee Lambert\n *      Copyright 2000  Julio César Gázquez\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <string.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <ctype.h>\n#include <stdlib.h>\n#include <locale.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winnls.h\"\n#include \"winuser.h\"\n\n#include \"wine/winbase16.h\"\n\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(ole);\n\n/* FIXME: other language flags? */\n\n/* same as win32 */\n#define NORM_IGNORECASE16           0x00000001\n#define NORM_IGNORENONSPACE16       0x00000002\n#define NORM_IGNORESYMBOLS16        0x00000004\n/* different from win32 */\n#define NORM_IGNOREWIDTH16          0x00000008\n#define NORM_IGNOREKANATYPE16       0x00000040\n\n/* deleted? */\n#define NORM_IGNOREJAPANACCENT16    0x00000080\n#define NORM_IGNOREKASHIDA16        0x00040000\n\n#define NORM_ALL16 (NORM_IGNORECASE16 | NORM_IGNORENONSPACE16 | NORM_IGNORESYMBOLS16 | NORM_IGNOREWIDTH16 | NORM_IGNOREKANATYPE16 | NORM_IGNOREJAPANACCENT16 | NORM_IGNOREKASHIDA16)\n\n/* same as win32 */\n#define LCMAP_LOWERCASE16    0x00000100\n#define LCMAP_UPPERCASE16    0x00000200\n#define LCMAP_SORTKEY16      0x00000400\n/* different from win32 */\n#define LCMAP_HALFWIDTH16    0x00000800\n#define LCMAP_FULLWIDTH16    0x00001000\n#define LCMAP_HIRAGANA16     0x00002000\n#define LCMAP_KATAKANA16     0x00004000\n\n#define LCMAP_ALL16 (LCMAP_LOWERCASE16 | LCMAP_UPPERCASE16 | LCMAP_SORTKEY16 | LCMAP_HALFWIDTH16 | LCMAP_FULLWIDTH16 | LCMAP_HIRAGANA16 | LCMAP_KATAKANA16)\nstatic LPVOID lpNLSInfo = NULL;\n\n/******************************************************************************\n *\t\tGetLocaleInfoA\t[OLE2NLS.5]\n * Is the last parameter really WORD for Win16?\n */\nINT16 WINAPI GetLocaleInfo16(LCID lcid,LCTYPE LCType,LPSTR buf,INT16 len)\n{\n\treturn GetLocaleInfoA(lcid,LCType,buf,len);\n}\n\n/******************************************************************************\n *\t\tGetStringTypeA\t[OLE2NLS.7]\n */\nBOOL16 WINAPI GetStringType16(LCID locale,DWORD dwInfoType,LPCSTR src,\n                              INT16 cchSrc,LPWORD chartype)\n{\n\treturn GetStringTypeExA(locale,dwInfoType,src,cchSrc,chartype);\n}\n\n/******************************************************************************\n *\t\tGetUserDefaultLCID\t[OLE2NLS.1]\n */\nLCID WINAPI GetUserDefaultLCID16(void)\n{\n    return GetUserDefaultLCID();\n}\n\n/******************************************************************************\n *\t\tGetSystemDefaultLCID\t[OLE2NLS.2]\n */\nLCID WINAPI GetSystemDefaultLCID16(void)\n{\n    return GetSystemDefaultLCID();\n}\n\n/******************************************************************************\n *\t\tGetUserDefaultLangID\t[OLE2NLS.3]\n */\nLANGID WINAPI GetUserDefaultLangID16(void)\n{\n    return GetUserDefaultLangID();\n}\n\n/******************************************************************************\n *\t\tGetSystemDefaultLangID\t[OLE2NLS.4]\n */\nLANGID WINAPI GetSystemDefaultLangID16(void)\n{\n    return GetSystemDefaultLangID();\n}\n\nstatic DWORD convert_NORM16_to_NORM(DWORD flags16)\n{\n    DWORD flags = 0;\n    if (flags16 & NORM_IGNORECASE16)\n        flags |= NORM_IGNORECASE;\n    if (flags16 & NORM_IGNORENONSPACE16)\n        flags |= NORM_IGNORENONSPACE;\n    if (flags16 & NORM_IGNORESYMBOLS16)\n        flags |= NORM_IGNORESYMBOLS;\n    if (flags16 & NORM_IGNOREWIDTH16)\n        flags |= NORM_IGNOREWIDTH;\n    if (flags16 & NORM_IGNOREKANATYPE16)\n        flags |= NORM_IGNOREKANATYPE;\n    if (flags16 & NORM_IGNOREJAPANACCENT16)\n    {\n        FIXME(\"NORM_IGNOREJAPANACCENT\\n\");\n        flags |= 0;\n    }\n    if (flags16 & NORM_IGNOREKASHIDA16)\n    {\n        FIXME(\"NORM_IGNOREKASHIDA\\n\");\n        flags |= 0;\n    }\n    return flags;\n}\nstatic DWORD convert_LCMAP16_to_LCMAP(DWORD mapflags16)\n{\n    DWORD mapflags = 0;\n    if (mapflags16 & LCMAP_LOWERCASE16)\n        mapflags |= LCMAP_LOWERCASE;\n    if (mapflags16 & LCMAP_UPPERCASE16)\n        mapflags |= LCMAP_UPPERCASE;\n    if (mapflags16 & LCMAP_SORTKEY16)\n        mapflags |= LCMAP_SORTKEY;\n    if (mapflags16 & LCMAP_HALFWIDTH16)\n        mapflags |= LCMAP_HALFWIDTH;\n    if (mapflags16 & LCMAP_FULLWIDTH16)\n        mapflags |= LCMAP_FULLWIDTH;\n    if (mapflags16 & LCMAP_HIRAGANA16)\n        mapflags |= LCMAP_HIRAGANA;\n    if (mapflags16 & LCMAP_KATAKANA16)\n        mapflags |= LCMAP_KATAKANA;\n    return mapflags | convert_NORM16_to_NORM(mapflags16);\n}\n\n/******************************************************************************\n *\t\tLCMapStringA\t[OLE2NLS.6]\n */\nINT16 WINAPI LCMapString16(LCID lcid, DWORD mapflags16, LPCSTR srcstr, INT16 srclen,\n\t\t\t   LPSTR dststr, INT16 dstlen)\n{\n    DWORD mapflags = 0;\n    if ((mapflags16 & ~(LCMAP_ALL16 | NORM_ALL16)) != 0)\n    {\n        return 0;\n    }\n    mapflags = convert_LCMAP16_to_LCMAP(mapflags16);\n    return (INT16)LCMapStringA(lcid, mapflags, srcstr, srclen, dststr, dstlen);\n}\n\n/***********************************************************************\n *           CompareStringA       (OLE2NLS.8)\n */\nINT16 WINAPI CompareString16(LCID lcid, DWORD flags16, LPCSTR str1, INT16 len1, LPCSTR str2, INT16 len2)\n{\n    DWORD flags = 0;\n    if ((flags16 & ~NORM_ALL16) != 0)\n    {\n        return 0;\n    }\n    flags = convert_NORM16_to_NORM(flags16);\n    return CompareStringA(lcid, flags, str1, len1, str2, len2);\n}\n\n/******************************************************************************\n *      RegisterNLSInfoChanged  [OLE2NLS.9]\n */\nBOOL16 WINAPI RegisterNLSInfoChanged16(LPVOID lpNewNLSInfo) /* [???] FIXME */\n{\n\tFIXME(\"Fully implemented, but doesn't effect anything.\\n\");\n\n\tif (!lpNewNLSInfo) {\n\t\tlpNLSInfo = NULL;\n\t\treturn TRUE;\n\t}\n\telse {\n\t\tif (!lpNLSInfo) {\n\t\t\tlpNLSInfo = lpNewNLSInfo;\n\t\t\treturn TRUE;\n\t\t}\n\t}\n\n\treturn FALSE; /* ptr not set */\n}\n"
  },
  {
    "path": "ole2nls/ole2nls.def",
    "content": "; File generated automatically from ole2nls\\ole2nls.dll16.spec; do not edit!\n\nLIBRARY ole2nls.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "ole2nls/ole2nls.dll16.spec",
    "content": "1 pascal GetUserDefaultLCID() GetUserDefaultLCID16\n2 pascal GetSystemDefaultLCID() GetSystemDefaultLCID16\n3 pascal -ret16 GetUserDefaultLangID() GetUserDefaultLangID16\n4 pascal -ret16 GetSystemDefaultLangID() GetSystemDefaultLangID16\n5 pascal GetLocaleInfoA(long long ptr word) GetLocaleInfo16\n6 pascal -ret16 LCMapStringA(long long ptr word ptr word) LCMapString16\n7 pascal -ret16 GetStringTypeA(long long str word ptr) GetStringType16\n8 pascal -ret16 CompareStringA(long long str word str word) CompareString16\n9 pascal -ret16 RegisterNLSInfoChanged(ptr) RegisterNLSInfoChanged16\n#10 stub WEP\n11 stub LIBMAIN\n12 stub NOTIFYWINDOWPROC\n"
  },
  {
    "path": "ole2nls/ole2nls.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n    <RootNamespace>ole2nls</RootNamespace>\n    <ProjectGuid>{504CC4CA-612C-4681-AD9A-90E51785A5D2}</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <Import Project=\"..\\PropertySheet.props\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n%(AdditionalDependencies)</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\nole2nls.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\nole2nls.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"ole2nls.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"ole2nls.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"ole2nls.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Platform)'=='Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" OLE2NLS &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Platform)'=='Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"ole2nls.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "ole2nls/version.rc",
    "content": "/*\n * Copyright 2007 Stefan Leichter\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#define WINE_FILEVERSION 2,10,3050,1\n#define WINE_FILEVERSION_STR \"2.10.3050.1\"\n#define WINE_FILEDESCRIPTION_STR \"Wine OLE dll\"\n#define WINE_FILENAME_STR \"OLE2NLS.DLL\"\n\n#include \"wine/wine_common_ver.rc\"\n"
  },
  {
    "path": "ole2prox/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(ole2prox SHARED ${SOURCE} ${CMAKE_SOURCE_DIR}/dummy.c ${CMAKE_CURRENT_BINARY_DIR}/ole2prox.def ole2prox.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(ole2prox.dll16 ole2prox)\ntarget_link_libraries(ole2prox libwine winecrt0 krnl386)\nset_target_properties(ole2prox PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "ole2prox/Makefile.in",
    "content": "MODULE    = ole2prox.dll16\nEXTRADLLFLAGS = -m16 -Wb,--main-module,ole32.dll\n"
  },
  {
    "path": "ole2prox/ole2prox.def",
    "content": "; File generated automatically from ole2prox\\ole2prox.dll16.spec; do not edit!\n\nLIBRARY ole2prox.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "ole2prox/ole2prox.dll16.spec",
    "content": "1 stub DLLGETCLASSOBJECT\n#2 WEP\n#3 ___EXPORTEDSTUB\n"
  },
  {
    "path": "ole2prox/ole2prox.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n    <RootNamespace>ole2prox</RootNamespace>\n    <ProjectGuid>{6139024B-2348-440D-9192-3A40C3CE31B5}</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <Import Project=\"..\\PropertySheet.props\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n%(AdditionalDependencies)</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\nole2prox.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\nole2prox.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"ole2prox.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"ole2prox.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Platform)'=='Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" OLE2PROX &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Platform)'=='Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"ole2prox.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "ole2thk/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(ole2thk SHARED ${SOURCE} ${CMAKE_SOURCE_DIR}/dummy.c ${CMAKE_CURRENT_BINARY_DIR}/ole2thk.def ole2thk.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(ole2thk.dll16 ole2thk)\ntarget_link_libraries(ole2thk libwine winecrt0 krnl386)\nset_target_properties(ole2thk PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "ole2thk/Makefile.in",
    "content": "MODULE    = ole2thk.dll16\nEXTRADLLFLAGS = -m16 -Wb,--main-module,ole32.dll\n"
  },
  {
    "path": "ole2thk/ole2thk.def",
    "content": "; File generated automatically from ole2thx\\ole2thk.dll16.spec; do not edit!\n\nLIBRARY ole2thk.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "ole2thk/ole2thk.dll16.spec",
    "content": "#1 stub WEP\n2 stub ROT16_ISRUNNING16\n3 stub ISWIN32SHANDLE\n4 stub ___EXPORTEDSTUB\n5 stub COTHKCOMMON\n6 stub ROT16_GETTIMEOFLASTCHANGE16\n7 stub ROT16_GETOBJECT16\n"
  },
  {
    "path": "ole2thk/ole2thk.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n    <RootNamespace>ole2thk</RootNamespace>\n    <ProjectGuid>{94C8AE24-778A-4FEB-B3E1-457BDCCE06DF}</ProjectGuid>\n    <ProjectName>ole2thk</ProjectName>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <Import Project=\"..\\PropertySheet.props\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n%(AdditionalDependencies)</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>ole2thk.def</ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>ole2thk.def</ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <None Include=\"ole2thk.def\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"ole2thk.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"ole2thk.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Platform)'=='Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" OLE2THK &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Platform)'=='Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "olecli/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(olecli SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/olecli.def olecli.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(olecli.dll16 olecli)\ntarget_link_libraries(olecli libwine winecrt0 krnl386 olecli32.lib)\nset_target_properties(olecli PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "olecli/Makefile.in",
    "content": "MODULE    = olecli.dll16\nIMPORTS   = gdi32\nEXTRADLLFLAGS = -m16 -Wb,--main-module,olecli32.dll\n\nC_SRCS = olecli.c\n"
  },
  {
    "path": "olecli/olecli.c",
    "content": "/*\n *\tOLECLI library\n *\n *\tCopyright 1995\tMartin von Loewis\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n/*\tAt the moment, these are only empty stubs.\n */\n\n#include \"config.h\"\n//?????\n#define __oleidl_h__\n#define _OLE2_H_\n#include <stdarg.h>\n\n#include <windows.h>\n#ifndef _MSC_VER\n#define _Analysis_noreturn_\n#endif\n#include <ole.h>\n //#include \"windef.h\"\n#include \"wine/windef16.h\"\n#include \"wine/winbase16.h\"\n#include \"wine/wingdi16.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n#include \"wownt32.h\"\n#include \"objbase.h\"\n//#include \"olecli.h\"\n#include \"wine/debug.h\"\n\ntypedef LONG LHCLIENTDOC;\ntypedef struct _OLEOBJECT *_LPOLEOBJECT;\ntypedef struct _OLECLIENT *LPOLECLIENT;\ntypedef OLEOPT_UPDATE *LPOLEOPT_UPDATE;\ntypedef LPCSTR LPCOLESTR16;\n\nstruct _OLESTREAM;\nWINE_DEFAULT_DEBUG_CHANNEL(ole);\nLPOLECLIENT get_ole_client32(SEGPTR client);\n\ntypedef struct _OLEOBJECTVTBL16 {\n    SEGPTR QueryProtocol; /* void *(CALLBACK *QueryProtocol)(_LPOLEOBJECT,LPCOLESTR16);*/\n    SEGPTR Release; /* OLESTATUS (CALLBACK *Release)(_LPOLEOBJECT);*/\n    SEGPTR Show; /* OLESTATUS (CALLBACK *Show)(_LPOLEOBJECT,BOOL16);*/\n    SEGPTR DoVerb; /* OLESTATUS (CALLBACK *DoVerb)(_LPOLEOBJECT,UINT16,BOOL16,BOOL16);*/\n    SEGPTR GetData; /* OLESTATUS (CALLBACK *GetData)(_LPOLEOBJECT,OLECLIPFORMAT,HANDLE16 *);*/\n    SEGPTR SetData; /* OLESTATUS (CALLBACK *SetData)(_LPOLEOBJECT,OLECLIPFORMAT,HANDLE16);*/\n    SEGPTR SetTargetDevice; /* OLESTATUS (CALLBACK *SetTargetDevice)(_LPOLEOBJECT,HGLOBAL16);*/\n    SEGPTR SetBounds; /* OLESTATUS (CALLBACK *SetBounds)(_LPOLEOBJECT,LPRECT16);*/\n    SEGPTR EnumFormats; /* OLESTATUS (CALLBACK *EnumFormats)(_LPOLEOBJECT,OLECLIPFORMAT);*/\n    SEGPTR SetColorScheme; /* OLESTATUS (CALLBACK *SetColorScheme)(_LPOLEOBJECT,struct tagLOGPALETTE*);*/\n    SEGPTR Delete; /* OLESTATUS (CALLBACK *Delete)(_LPOLEOBJECT);*/\n    SEGPTR SetHostNames; /* OLESTATUS (CALLBACK *SetHostNames)(_LPOLEOBJECT,LPCOLESTR16,LPCOLESTR16);*/\n    SEGPTR SaveToStream; /* OLESTATUS (CALLBACK *SaveToStream)(_LPOLEOBJECT,struct _OLESTREAM*);*/\n    SEGPTR Clone; /* OLESTATUS (CALLBACK *Clone)(_LPOLEOBJECT,LPOLECLIENT,LHCLIENTDOC,LPCOLESTR16,_LPOLEOBJECT *);*/\n    SEGPTR CopyFromLink; /* OLESTATUS (CALLBACK *CopyFromLink)(_LPOLEOBJECT,LPOLECLIENT,LHCLIENTDOC,LPCOLESTR16,_LPOLEOBJECT *);*/\n    SEGPTR Equal; /* OLESTATUS (CALLBACK *Equal)(_LPOLEOBJECT,_LPOLEOBJECT);*/\n    SEGPTR CopyToClipBoard; /* OLESTATUS (CALLBACK *CopyToClipBoard)(_LPOLEOBJECT);*/\n    SEGPTR Draw; /* OLESTATUS (CALLBACK *Draw)(_LPOLEOBJECT,HDC16,LPRECT16,LPRECT16,HDC16);*/\n    SEGPTR Activate; /* OLESTATUS (CALLBACK *Activate)(_LPOLEOBJECT,UINT16,BOOL16,BOOL16,HWND16,LPRECT16);*/\n    SEGPTR Execute; /* OLESTATUS (CALLBACK *Execute)(_LPOLEOBJECT,HGLOBAL16,UINT16);*/\n    SEGPTR Close; /* OLESTATUS (CALLBACK *Close)(_LPOLEOBJECT);*/\n    SEGPTR Update; /* OLESTATUS (CALLBACK *Update)(_LPOLEOBJECT);*/\n    SEGPTR Reconnect; /* OLESTATUS (CALLBACK *Reconnect)(_LPOLEOBJECT);*/\n    SEGPTR ObjectConvert; /* OLESTATUS (CALLBACK *ObjectConvert)(_LPOLEOBJECT,LPCOLESTR16,LPOLECLIENT,LHCLIENTDOC,LPCOLESTR16,_LPOLEOBJECT*);*/\n    SEGPTR GetLinkUpdateOptions; /* OLESTATUS (CALLBACK *GetLinkUpdateOptions)(_LPOLEOBJECT,LPOLEOPT_UPDATE);*/\n    SEGPTR SetLinkUpdateOptions; /* OLESTATUS (CALLBACK *SetLinkUpdateOptions)(_LPOLEOBJECT,OLEOPT_UPDATE);*/\n    SEGPTR Rename; /* OLESTATUS (CALLBACK *Rename)(_LPOLEOBJECT,LPCOLESTR16);*/\n    SEGPTR QueryName; /* OLESTATUS (CALLBACK *QueryName)(_LPOLEOBJECT,LPSTR,LPUINT16);*/\n    SEGPTR QueryType; /* OLESTATUS (CALLBACK *QueryType)(_LPOLEOBJECT,LPLONG);*/\n    SEGPTR QueryBounds; /* OLESTATUS (CALLBACK *QueryBounds)(_LPOLEOBJECT,LPRECT16);*/\n    SEGPTR QuerySize; /* OLESTATUS (CALLBACK *QuerySize)(_LPOLEOBJECT,LPDWORD);*/\n    SEGPTR QueryOpen; /* OLESTATUS (CALLBACK *QueryOpen)(_LPOLEOBJECT);*/\n    SEGPTR QueryOutOfDate; /* OLESTATUS (CALLBACK *QueryOutOfDate)(_LPOLEOBJECT);*/\n    SEGPTR QueryReleaseStatus; /* OLESTATUS (CALLBACK *QueryReleaseStatus)(_LPOLEOBJECT);*/\n    SEGPTR QueryReleaseError; /* OLESTATUS (CALLBACK *QueryReleaseError)(_LPOLEOBJECT);*/\n    SEGPTR QueryReleaseMethod; /* OLE_RELEASE_METHOD (CALLBACK *QueryReleaseMethod)(_LPOLEOBJECT);*/\n    SEGPTR RequestData; /* OLESTATUS (CALLBACK *RequestData)(_LPOLEOBJECT,OLECLIPFORMAT);*/\n    SEGPTR ObjectLong; /* OLESTATUS (CALLBACK *ObjectLong)(_LPOLEOBJECT,UINT16,LPLONG);*/\n\n} OLEOBJECTVTBL16;\ntypedef OLEOBJECTVTBL16 *LPOLEOBJECTVTBL16;\n\ntypedef struct _OLEOBJECT16\n{\n    SEGPTR lpvtbl; /* const OLEOBJECTVTBL16 *lpvtbl; */\n} OLEOBJECT16;\n\n/* ole client definitions */\ntypedef struct _OLECLIENTVTBL16\n{\n    SEGPTR CallBack;\n} OLECLIENTVTBL16;\n\ntypedef  OLECLIENTVTBL16 FAR*  LPOLECLIENTVTBL16;\n\ntypedef struct _OLECLIENT16\n{\n    SEGPTR   lpvtbl;\n} OLECLIENT16;\nDWORD WINAPI OleQueryClientVersion16()\n{\n    return OleQueryClientVersion();\n}\n#define MAX_OLECLIENT 256\nstruct ole_client_info\n{\n    BOOL used;\n    OLECLIENT client;\n    OLECLIENTVTBL vtable;\n    /*OLECLIENT16 */SEGPTR client16;\n    /*OLECLIENTVTBL16 */SEGPTR vtable16;\n} ole_clients[MAX_OLECLIENT];\nstruct ole_client_info *find_ole_client(LPOLECLIENT client)\n{\n    for (int i = 0; i < MAX_OLECLIENT; i++)\n    {\n        if (ole_clients[i].used && &ole_clients[i].client == client)\n        {\n            return ole_clients + i;\n        }\n    }\n    return NULL;\n}\n\nstruct ole_client_info *find_ole_client_16(SEGPTR client)\n{\n    for (int i = 0; i < MAX_OLECLIENT; i++)\n    {\n        if (ole_clients[i].used && ole_clients[i].client16 == client)\n        {\n            return ole_clients + i;\n        }\n    }\n    return NULL;\n}\n\nstatic SEGPTR OLEOBJ16(LPOLEOBJECT oleobj)\n{\n    return (SEGPTR)oleobj;\n}\n\nstatic LPOLEOBJECT OLEOBJ32(SEGPTR oleobj)\n{\n    return (LPOLEOBJECT)oleobj;\n}\n#include \"wine/list.h\"\n\ntypedef struct _OLESTREAM16 *LPOLESTREAM16;\ntypedef struct _OLESTREAMVTBL16\n{\n    SEGPTR Get; /* DWORD(CALLBACK* Get)(LPOLESTREAM16, void*, DWORD); */\n    SEGPTR Put; /* DWORD(CALLBACK* Put)(LPOLESTREAM16, OLE_CONST void*, DWORD); */\n} OLESTREAMVTBL16;\ntypedef  OLESTREAMVTBL16 FAR*  LPOLESTREAMVTBL16;\n\ntypedef struct _OLESTREAM16\n{\n    SEGPTR    lpstbl;\n} OLESTREAM16;\nstruct olestream_entry\n{\n    struct list entry;\n    SEGPTR olestream16;\n    OLESTREAM olestream32;\n};\n/***********************************************************************\n *           SELECTOR_SetEntries\n *\n * Set the LDT entries for an array of selectors.\n */\nstatic BOOL SELECTOR_SetEntries(WORD sel, const void *base, DWORD size, unsigned char flags)\n{\n    LDT_ENTRY entry;\n    WORD i, count;\n\n    wine_ldt_set_base(&entry, base);\n    wine_ldt_set_limit(&entry, size - 1);\n    wine_ldt_set_flags(&entry, flags);\n    count = (size + 0xffff) / 0x10000;\n    for (i = 0; i < count; i++)\n    {\n        if (wine_ldt_set_entry(sel + (i << __AHSHIFT), &entry) < 0) return FALSE;\n        wine_ldt_set_base(&entry, (char*)wine_ldt_get_base(&entry) + 0x10000);\n        /* yep, Windows sets limit like that, not 64K sel units */\n        wine_ldt_set_limit(&entry, wine_ldt_get_limit(&entry) - 0x10000);\n    }\n    return TRUE;\n}\nstatic SEGPTR OLESTREAM_16(LPOLESTREAM stream32);\nLPOLESTREAMVTBL16 get_olestream16_vtbl(SEGPTR this16)\n{\n    LPOLESTREAM16 o16 = (LPOLESTREAM16)MapSL(this16);\n    LPOLESTREAMVTBL16 vtbnl16 = (LPOLESTREAMVTBL16)MapSL(o16->lpstbl);\n    return vtbnl16;\n}\nDWORD CALLBACK OLESTREAM32_Get(LPOLESTREAM this_, void *a, DWORD b)\n{\n    WORD args[2 + 2 + 2];\n    SEGPTR this16 = OLESTREAM_16(this_);\n    WORD seg = AllocSelectorArray16(b / 0x10000 + 1);\n    DWORD ret;\n    if (!seg)\n        return 0;\n    SELECTOR_SetEntries(seg, a, b, WINE_LDT_FLAGS_DATA);\n    args[5] = HIWORD(this16);\n    args[4] = LOWORD(this16);\n    args[3] = seg;\n    args[2] = 0;\n    args[1] = HIWORD(b);\n    args[0] = LOWORD(b);\n    TRACE(\"seg=%04x size=%08x\\n\", seg, b);\n    WOWCallback16Ex(get_olestream16_vtbl(this16)->Get, WCB16_PASCAL, sizeof(args), args, &ret);\n    for (WORD i = 0; i <= b / 0x10000; i++)\n        FreeSelector16(seg + i);\n    TRACE(\"result=%08x\\n\", ret);\n    return ret;\n}\nDWORD CALLBACK OLESTREAM32_Put(LPOLESTREAM this_, OLE_CONST void *a, DWORD b)\n{\n    WORD args[2 + 2 + 2];\n    SEGPTR this16 = OLESTREAM_16(this_);\n    WORD seg = AllocSelectorArray16(b / 0x10000 + 1);\n    if (!seg)\n        return 0;\n    SELECTOR_SetEntries(seg, a, b, WINE_LDT_FLAGS_DATA);\n    DWORD ret;\n    args[5] = HIWORD(this16);\n    args[4] = LOWORD(this16);\n    args[3] = seg;\n    args[2] = 0;\n    args[1] = HIWORD(b);\n    args[0] = LOWORD(b);\n    TRACE(\"seg=%04x size=%08x\\n\", seg, b);\n    WOWCallback16Ex(get_olestream16_vtbl(this16)->Put, WCB16_PASCAL, sizeof(args), args, &ret);\n    for (WORD i = 0; i <= b / 0x10000; i++)\n        FreeSelector16(seg + i);\n    TRACE(\"result=%08x\\n\", ret);\n    return ret;\n}\nstatic struct list olestream_list = LIST_INIT(olestream_list);\nOLESTREAMVTBL olestream32_vtbl = { OLESTREAM32_Get, OLESTREAM32_Put };\nstatic struct olestream_entry *add_olestream_thunk(SEGPTR s16)\n{\n    struct olestream_entry *data = HeapAlloc(GetProcessHeap(), 0, sizeof(struct olestream_entry));\n    data->olestream16 = s16;\n    data->olestream32.lpstbl = &olestream32_vtbl;\n    list_add_tail(&olestream_list, &data->entry);\n    return data;\n}\nstatic SEGPTR OLESTREAM_16(LPOLESTREAM stream32)\n{\n    struct olestream_entry *cur, *next;\n    LIST_FOR_EACH_ENTRY_SAFE(cur, next, &olestream_list, struct olestream_entry, entry)\n    {\n        if (&cur->olestream32 == stream32)\n            return cur->olestream16;\n    }\n    FIXME(\"\\n\");\n    return 0;\n}\nstatic LPOLESTREAM OLESTREAM_32(SEGPTR stream16)\n{\n    struct olestream_entry *cur, *next;\n    LIST_FOR_EACH_ENTRY_SAFE(cur, next, &olestream_list, struct olestream_entry, entry)\n    {\n        if (cur->olestream16 == stream16)\n            return &cur->olestream32;\n    }\n    return &add_olestream_thunk(stream16)->olestream32;\n}\n\n/******************************************************************************\n *\t\tOleSavedClientDoc\t[OLECLI.45]\n */\nOLESTATUS WINAPI OleSavedClientDoc16(LHCLIENTDOC hDoc)\n{\n    return OleSavedClientDoc(hDoc);\n}\n\n/******************************************************************************\n *\t\tOleRegisterClientDoc\t[OLECLI.41]\n */\nOLESTATUS WINAPI OleRegisterClientDoc16(LPCSTR classname, LPCSTR docname,\n                                        LONG reserved, LHCLIENTDOC *hRet )\n{\n    return OleRegisterClientDoc(classname, docname, reserved, hRet);\n}\n\n/******************************************************************************\n *\t\tOleRenameClientDoc\t[OLECLI.43]\n */\nOLESTATUS WINAPI OleRenameClientDoc16(LHCLIENTDOC hDoc, LPCSTR newName)\n{\n    return OleRenameClientDoc(hDoc, newName);\n}\n\n/******************************************************************************\n *\t\tOleRevokeClientDoc\t[OLECLI.42]\n */\nOLESTATUS WINAPI OleRevokeClientDoc16(LHCLIENTDOC hServerDoc)\n{\n    return OleRevokeClientDoc(hServerDoc);\n}\n\n/******************************************************************************\n *\t\tOleRevertClientDoc\t[OLECLI.44]\n */\nOLESTATUS WINAPI OleRevertClientDoc16(LHCLIENTDOC hServerDoc)\n{\n    return OleRevertClientDoc(hServerDoc);\n}\n\n/******************************************************************************\n *\t\tOleEnumObjects\t[OLECLI.47]\n */\nOLESTATUS WINAPI OleEnumObjects16(LHCLIENTDOC hServerDoc, SEGPTR *data)\n{\n    LPOLEOBJECT obj32 = OLEOBJ32(*data);\n    OLESTATUS result = OleEnumObjects(hServerDoc, &obj32);\n    *data = OLEOBJ16(obj32);\n    return result;\n}\n\n/******************************************************************************\n *\t     OleCreateLinkFromClip\t[OLECLI.11]\n */\nOLESTATUS WINAPI OleCreateLinkFromClip16( LPCSTR name, SEGPTR olecli, LHCLIENTDOC hclientdoc,\n                                          LPCSTR xname, SEGPTR *lpoleob, OLEOPT_RENDER render,\n                                          OLECLIPFORMAT clipformat )\n{\n    LPOLECLIENT olecli32 = get_ole_client32(olecli);\n    LPOLEOBJECT obj32 = 0;\n    OLESTATUS status = OleCreateLinkFromClip(name, olecli32, hclientdoc, xname, &obj32, render, clipformat);\n    *lpoleob = OLEOBJ16(obj32);\n\treturn status;\n}\n\n/******************************************************************************\n *           OleQueryLinkFromClip\t[OLECLI.9]\n */\nOLESTATUS WINAPI OleQueryLinkFromClip16(LPCSTR name, UINT16 render, UINT16 clipformat)\n{\n\treturn OleQueryLinkFromClip(name, render, clipformat);\n}\n\n/******************************************************************************\n *           OleQueryCreateFromClip\t[OLECLI.10]\n */\nOLESTATUS WINAPI OleQueryCreateFromClip16(LPCSTR name, UINT16 render, UINT16 clipformat)\n{\n    return OleQueryCreateFromClip(name, render, clipformat);\n}\n\n/******************************************************************************\n *\t\tOleIsDcMeta\t[OLECLI.60]\n */\nBOOL16 WINAPI OleIsDcMeta16(HDC16 hdc)\n{\n    return GetObjectType( HDC_32(hdc) ) == OBJ_METADC;\n}\n\n/******************************************************************************\n *\t\tOleQueryType\t[OLECLI.14]\n */\nOLESTATUS WINAPI OleQueryType16(SEGPTR oleobj16,  LPLONG xlong) {\n    LPOLEOBJECT oleobj = OLEOBJ32(oleobj16);\n    OLESTATUS result =  OleQueryType(oleobj, xlong);\n    return result;\n}\n\n/******************************************************************************\n *\t\tOleCreateFromClip\t[OLECLI.12]\n */\nOLESTATUS WINAPI OleCreateFromClip16( LPCSTR name, SEGPTR olecli, LHCLIENTDOC hclientdoc,\n                                      LPCSTR xname, SEGPTR lpoleob,\n                                      UINT16 render, UINT16 clipformat )\n{\n    return OleCreateFromClip(name, MapSL(olecli), hclientdoc, xname, MapSL(lpoleob), render, clipformat);\n}\n\nint CALLBACK ole_client_Callback(LPOLECLIENT client, OLE_NOTIFICATION notif, LPOLEOBJECT oleobject)\n{\n    struct ole_client_info *info = find_ole_client(client);\n    int ret;\n    WORD args[5];\n    SEGPTR obj16 = OLEOBJ16(oleobject);\n    args[4] = HIWORD(info->client16);\n    args[3] = LOWORD(info->client16);\n    args[2] = (WORD)notif;\n    args[1] = HIWORD(obj16);\n    args[0] = LOWORD(obj16);\n    TRACE(\"(%08x,%04x,%08x)\\n\", info->client16, notif, obj16);\n    WOWCallback16Ex(((OLECLIENTVTBL16*)MapSL(((OLECLIENT16*)MapSL(info->client16))->lpvtbl))->CallBack, WCB16_PASCAL, sizeof(args), args, &ret);\n    return ret;\n}\nLPOLECLIENT get_ole_client32(SEGPTR client)\n{\n    struct ole_client_info *info = NULL;\n    for (int i = 0; i < MAX_OLECLIENT; i++)\n    {\n        if (!ole_clients[i].used)\n        {\n            info = ole_clients + i;\n            break;\n        }\n    }\n    if (!info)\n        return NULL;\n    info->used = TRUE;\n    info->client.lpvtbl = &info->vtable;\n    info->vtable.CallBack = ole_client_Callback;\n    info->client16 = client;\n    OLECLIENT16 *clientp = MapSL(client);\n    info->vtable16 = clientp->lpvtbl;\n    return &info->client;\n}\nOLESTATUS WINAPI OleCreate16(LPCSTR name, SEGPTR client, LPCSTR xname, LHCLIENTDOC hclientdoc, LPCSTR xxname, SEGPTR *oleobject, OLEOPT_RENDER render, OLECLIPFORMAT format)\n{\n    LPOLECLIENT client32 = get_ole_client32(client);\n    LPOLEOBJECT obj32 = 0;\n    DWORD count;\n    ReleaseThunkLock(&count);\n    OLESTATUS status = OleCreate(name, client32, xname, hclientdoc, xxname, &obj32, render, format);\n    RestoreThunkLock(count);\n    *oleobject = OLEOBJ16(obj32);\n    return status;\n}\nOLESTATUS WINAPI OleSetHostNames16(DWORD oleobj, LPCSTR name, LPCSTR name2)\n{\n    LPOLEOBJECT oleobj32 = OLEOBJ32(oleobj);\n    OLESTATUS status = OleSetHostNames(oleobj32, name, name2);\n    return status = OLE_OK/*workaround for WRITE.EXE*/;\n}\nOLE_RELEASE_METHOD WINAPI OleQueryReleaseMethod16(SEGPTR oleobj)\n{\n    LPOLEOBJECT oleobj32 = OLEOBJ32(oleobj);\n    OLE_RELEASE_METHOD ret = OleQueryReleaseMethod(oleobj32);\n    return ret;\n}\nOLESTATUS WINAPI OleQueryReleaseError16(SEGPTR oleobj)\n{\n    LPOLEOBJECT oleobj32 = OLEOBJ32(oleobj);\n    OLESTATUS ret = OleQueryReleaseError(oleobj32);\n    return ret;\n}\n\nOLESTATUS WINAPI OleQuerySize16(SEGPTR oleobj, DWORD *size)\n{\n    LPOLEOBJECT oleobj32 = OLEOBJ32(oleobj);\n    OLESTATUS ret = OleQuerySize(oleobj32, size);\n    return ret;\n}\n\nstatic void RECT16to32(const RECT16 *from, RECT *to)\n{\n    to->left = from->left;\n    to->top = from->top;\n    to->right = from->right;\n    to->bottom = from->bottom;\n}\n\nstatic void RECT32to16(const RECT *from, RECT16 *to)\n{\n    to->left = from->left;\n    to->top = from->top;\n    to->right = from->right;\n    to->bottom = from->bottom;\n}\n\n\nOLESTATUS WINAPI OleQueryBounds16(SEGPTR oleobj, RECT16 *rect)\n{\n    LPOLEOBJECT oleobj32 = OLEOBJ32(oleobj);\n    RECT rect32;\n    OLESTATUS ret = OleQueryBounds(oleobj32, &rect32);\n    RECT32to16(&rect32, rect);\n    return ret;\n}\n\nOLESTATUS WINAPI OleDraw16(DWORD oleobj, HDC16 hdc1, const RECT16 *rect1, const RECT16 *rect2, HDC16 hdc2)\n{\n    LPOLEOBJECT oleobj32 = OLEOBJ32(oleobj);\n    RECT rect132, rect232;\n    if (rect1)\n    {\n        RECT16to32(rect1, &rect132);\n    }\n    if (rect2)\n    {\n        RECT16to32(rect2, &rect232);\n    }\n    OLESTATUS status = OleDraw(oleobj32, HDC_32(hdc1), rect1 ? &rect132 : NULL, rect2 ? &rect232 : NULL, HDC_32(hdc2));\n    return status;\n}\nOLESTATUS WINAPI OleActivate16(SEGPTR oleobj, UINT uint, BOOL b1, BOOL b2, HWND16 hwnd, const RECT16 FAR * rect)\n{\n    LPOLEOBJECT oleobj32 = OLEOBJ32(oleobj);\n    RECT rect32;\n    DWORD count;\n    if (rect)\n    {\n        RECT16to32(rect, &rect32);\n    }\n    ReleaseThunkLock(&count);\n    OLESTATUS status = OleActivate(oleobj32, uint, b1, b2, HWND_32(hwnd), rect ? &rect32 : NULL);\n    RestoreThunkLock(count);\n    return status;\n}\n\n#include <pshpack1.h>\ntypedef struct {\n    UINT16 otdDeviceNameOffset;\n    UINT16 otdDriverNameOffset;\n    UINT16 otdPortNameOffset;\n    UINT16 otdExtDevmodeOffset;\n    UINT16 otdExtDevmodeSize;\n    UINT16 otdEnvironmentOffset;\n    UINT16 otdEnvironmentSize;\n    BYTE otdData[1];\n} OLETARGETDEVICE16;\n#include <poppack.h>\nOLESTATUS WINAPI OleSetTargetDevice16(SEGPTR oleobj16, HGLOBAL16 hotd)\n{\n    LPOLEOBJECT oleobj = OLEOBJ32(oleobj16);\n    OLETARGETDEVICE16 *otd = GlobalLock16(hotd);\n    DWORD size = GlobalSize16(hotd);\n    DWORD exdata = size - sizeof(OLETARGETDEVICE16) + 1;\n    HGLOBAL hotd32 = GlobalAlloc(0, sizeof(OLETARGETDEVICE) + exdata);\n    OLETARGETDEVICE *otd32 = GlobalLock(hotd32);\n    otd32->otdDeviceNameOffset = otd->otdDeviceNameOffset;\n    otd32->otdDriverNameOffset = otd->otdDriverNameOffset;\n    otd32->otdPortNameOffset = otd->otdPortNameOffset;\n    otd32->otdExtDevmodeOffset = otd->otdExtDevmodeOffset;\n    otd32->otdExtDevmodeSize = otd->otdExtDevmodeSize;\n    otd32->otdEnvironmentOffset = otd->otdEnvironmentOffset;\n    otd32->otdEnvironmentSize = otd->otdEnvironmentSize;\n    memcpy(&otd32->otdData, &otd->otdData, exdata);\n    OLESTATUS status = OleSetTargetDevice(oleobj, otd32);\n    GlobalUnlock(otd32);\n    GlobalFree(hotd32);\n    GlobalUnlock16(hotd);\n    /* workaround for WRITE.EXE */\n    if (status == OLE_BUSY)\n        return OLE_OK;\n    return status;\n}\n\nOLESTATUS WINAPI OleCreateFromFile16(LPCSTR protocol, SEGPTR client, LPCSTR lpszClass, LPCSTR file, LHCLIENTDOC clientdoc, LPCSTR objname, SEGPTR *lplpObject, OLEOPT_RENDER render, OLECLIPFORMAT fmt)\n{\n    LPOLECLIENT client32 = get_ole_client32(client);\n    LPOLEOBJECT obj32 = 0;\n    OLESTATUS result = OleCreateFromFile(protocol, client32, lpszClass, file, clientdoc, objname, &obj32, render, fmt);\n    *lplpObject = OLEOBJ16(obj32);\n    if (result == OLE_ERROR_OPEN)\n    {\n        int count = 5;\n        while (--count && result == OLE_ERROR_OPEN)\n        {\n            ERR(\"(%s,%08x,%s,%s,%08x,%s,%p,%d,%d):result == OLE_ERROR_OPEN\\n\", protocol, client32, lpszClass, file, clientdoc, objname, lplpObject, render, fmt);\n            result = OleCreateFromFile(protocol, client32, lpszClass, file, clientdoc, objname, &obj32, render, fmt);\n        }\n        *lplpObject = OLEOBJ16(obj32);\n        if (result == OLE_OK)\n            ERR(\"success.\\n\");\n    }\n    return result;\n}\n\nOLESTATUS WINAPI OleQueryReleaseStatus16(SEGPTR oleobj16)\n{\n    LPOLEOBJECT oleobj = OLEOBJ32(oleobj16);\n    OLESTATUS result = OleQueryReleaseStatus(oleobj);\n    return result;\n}\n\nOLESTATUS WINAPI OleLockServer16(SEGPTR oleobj16, LHSERVER *server)\n{\n    LPOLEOBJECT oleobj = OLEOBJ32(oleobj16);\n    OLESTATUS result = OleLockServer(oleobj, server);\n    return result;\n}\n\nOLESTATUS WINAPI OleUnlockServer16(LHSERVER hserver16)\n{\n    OLESTATUS result = OleUnlockServer(hserver16);\n    return result;\n}\n\nOLESTATUS WINAPI OleDelete16(SEGPTR oleobj16)\n{\n    LPOLEOBJECT oleobj = OLEOBJ32(oleobj16);\n    OLESTATUS result = OleDelete(oleobj);\n    return result;\n}\n\nOLESTATUS WINAPI OleQueryOpen16(SEGPTR oleobj16)\n{\n    LPOLEOBJECT oleobj = OLEOBJ32(oleobj16);\n    OLESTATUS result = OleQueryOpen(oleobj);\n    return result;\n}\n\nOLESTATUS WINAPI OleRelease16(SEGPTR oleobj16)\n{\n    LPOLEOBJECT oleobj = OLEOBJ32(oleobj16);\n    OLESTATUS result = OleRelease(oleobj);\n    return result;\n}\n\nOLESTATUS WINAPI OleUpdate16(SEGPTR oleobj16)\n{\n    LPOLEOBJECT oleobj = OLEOBJ32(oleobj16);\n    OLESTATUS result = OleUpdate(oleobj);\n    return result;\n}\n\nOLESTATUS WINAPI OleClose16(SEGPTR oleobj16)\n{\n    LPOLEOBJECT oleobj = OLEOBJ32(oleobj16);\n    OLESTATUS result = OleClose(oleobj);\n    return result;\n}\n\nOLESTATUS WINAPI OleReconnect16(SEGPTR oleobj16)\n{\n    LPOLEOBJECT oleobj = OLEOBJ32(oleobj16);\n    OLESTATUS result = OleReconnect(oleobj);\n    return result;\n}\n\nOLESTATUS WINAPI OleEqual16(SEGPTR oleobj16, SEGPTR oleobj162)\n{\n    LPOLEOBJECT oleobj = OLEOBJ32(oleobj16);\n    LPOLEOBJECT oleobj2 = OLEOBJ32(oleobj162);\n    OLESTATUS result = OleEqual(oleobj, oleobj2);\n    return result;\n}\n\nOLESTATUS WINAPI OleRename16(SEGPTR oleobj16, LPCSTR name)\n{\n    LPOLEOBJECT oleobj = OLEOBJ32(oleobj16);\n    OLESTATUS result = OleRename(oleobj, name);\n    return result;\n}\n\nOLESTATUS WINAPI OleGetData16(SEGPTR oleobj16, OLECLIPFORMAT fmt, HANDLE16 *handle)\n{\n    LPOLEOBJECT oleobj = OLEOBJ32(oleobj16);\n    HANDLE handle32;\n    OLESTATUS result;\n    *handle = 0;\n    if (TRACE_ON(ole))\n    {\n        char buf[100];\n        if (GetClipboardFormatNameA(fmt, buf, 100))\n        {\n            TRACE(\"(%p,%04x(%s),%p)\\n\", oleobj, fmt, debugstr_a(buf), handle);\n        }\n        else\n        {\n            TRACE(\"(%p,%04x,%p)\\n\", oleobj, fmt, handle);\n        }\n    }\n    if (fmt == CF_METAFILEPICT)\n    {\n        /* user.c SetClipboardData16 */\n        HANDLE16 data16 = 0;\n        UINT size;\n        void *ptr;\n        result = OleGetData(oleobj, fmt, &handle32);\n        METAFILEPICT16 *pict16;\n        METAFILEPICT *pict32 = GlobalLock(handle32);\n\n        if (pict32)\n        {\n            if (!(data16 = GlobalAlloc16(GMEM_MOVEABLE, sizeof(*pict16)))) return 0;\n            pict16 = GlobalLock16(data16);\n            pict16->mm = pict32->mm;\n            pict16->xExt = pict32->xExt;\n            pict16->yExt = pict32->yExt;\n            size = GetMetaFileBitsEx(pict32->hMF, 0, NULL);\n            pict16->hMF = GlobalAlloc16(GMEM_MOVEABLE, size);\n            ptr = GlobalLock16(pict16->hMF);\n            GetMetaFileBitsEx(pict32->hMF, size, ptr);\n            GlobalUnlock16(pict16->hMF);\n            GlobalUnlock16(data16);\n        }\n        *handle = data16;\n        return result;\n    }\n    if (fmt == CF_BITMAP)\n    {\n        result = OleGetData(oleobj, fmt, &handle32);\n        *handle = HBITMAP_16(handle32);\n        return result;\n    }\n    if (fmt < 0xc000)\n    {\n        FIXME(\"unknown format %04x\\n\", fmt);\n    }\n    result = OleGetData(oleobj, fmt, &handle32);\n    if ((result == OLE_OK || result == OLE_WARN_DELETE_DATA) && handle32)\n    {\n        SIZE_T size = GlobalSize(handle32);\n        HGLOBAL16 handle16 = GlobalAlloc16(GMEM_MOVEABLE, size);\n        *handle = handle16;\n        LPVOID mem = GlobalLock16(handle16);\n        memcpy(mem, GlobalLock(handle32), size);\n        GlobalUnlock(handle32);\n        if (result == OLE_WARN_DELETE_DATA)\n            GlobalFree(handle32);\n        GlobalUnlock16(handle16);\n        return OLE_WARN_DELETE_DATA;  // hopefully the client will free the handle\n    }\n    return result;\n}\n\nOLESTATUS WINAPI OleSetData16(SEGPTR oleobj16, OLECLIPFORMAT fmt, HANDLE16 handle)\n{\n    LPOLEOBJECT oleobj = OLEOBJ32(oleobj16);\n    OLESTATUS result;\n    if (TRACE_ON(ole))\n    {\n        char buf[100];\n        if (GetClipboardFormatNameA(fmt, buf, 100))\n        {\n            TRACE(\"(%p,%04x(%s),%04x)\\n\", oleobj, fmt, debugstr_a(buf), handle);\n        }\n        else\n        {\n            TRACE(\"(%p,%04x,%04x)\\n\", oleobj, fmt, handle);\n        }\n    }\n    if (fmt == CF_METAFILEPICT)\n    {\n        FIXME(\"fmt == CF_METAFILEPICT\\n\");\n        return OLE_ERROR_OBJECT;\n    }\n    if (fmt == CF_BITMAP)\n    {\n        FIXME(\"fmt == CF_BITMAP\\n\");\n        return OLE_ERROR_OBJECT;\n    }\n    if (fmt < 0xc000)\n    {\n        FIXME(\"unknown format %04x\\n\", fmt);\n    }\n    DWORD size = GlobalSize16(handle);\n    LPVOID mem = GlobalLock16(handle);\n    HGLOBAL hg = GlobalAlloc(0, size);\n    LPVOID mem32 = GlobalLock(hg);\n    memcpy(mem32, mem, size);\n    GlobalUnlock(hg);\n    GlobalUnlock16(handle);\n    result = OleSetData(oleobj, fmt, hg);\n    GlobalFree(hg);\n    return result;\n}\n\nOLECLIPFORMAT WINAPI OleEnumFormats16(SEGPTR oleobj16, OLECLIPFORMAT fmt)\n{\n    LPOLEOBJECT oleobj = OLEOBJ32(oleobj16);\n    return OleEnumFormats(oleobj, fmt);\n}\n\nOLESTATUS WINAPI OleCopyToClipboard16(SEGPTR oleobj16)\n{\n    LPOLEOBJECT oleobj = OLEOBJ32(oleobj16);\n    OLESTATUS result = OleCopyToClipboard(oleobj);\n    return result;\n}\n\nOLESTATUS WINAPI OleClone16(SEGPTR oleobj16, SEGPTR client, LHCLIENTDOC doc, LPCSTR name, LPOLEOBJECT *lplpobj)\n{\n    LPOLEOBJECT oleobj = OLEOBJ32(oleobj16);\n    LPOLECLIENT client32 = get_ole_client32(client);\n    OLESTATUS result = OleClone(oleobj, client32, doc, name, lplpobj);\n    return result;\n}\nOLESTATUS WINAPI OleSaveToStream16(SEGPTR oleobj16, SEGPTR lpStream)\n{\n    LPOLEOBJECT oleobj = OLEOBJ32(oleobj16);\n    LPOLESTREAM stream = OLESTREAM_32(lpStream);\n    OLESTATUS result = OleSaveToStream(oleobj, stream);\n    return result;\n}\nOLESTATUS WINAPI OleLoadFromStream16(SEGPTR lpStream16, LPCSTR protocol, SEGPTR client, LHCLIENTDOC doc, LPCSTR objname, SEGPTR *lplpoleobj16)\n{\n    LPOLESTREAM stream32 = OLESTREAM_32(lpStream16);\n    LPOLECLIENT client32 = get_ole_client32(client);\n    LPOLEOBJECT obj = 0;\n    OLESTATUS result = OleLoadFromStream(stream32, protocol, client32, doc, objname, &obj);\n    *lplpoleobj16 = OLEOBJ16(obj);\n    return result;\n}\n\nOLESTATUS WINAPI OleSetBounds16(SEGPTR oleobj16, RECT16 *rect)\n{\n    RECT rect32;\n    LPOLEOBJECT oleobj = OLEOBJ32(oleobj16);\n    if (rect)\n        RECT16to32(rect, &rect32);\n    OLESTATUS result = OleSetBounds(oleobj, rect ? &rect32 : NULL);\n    return result;\n}\n\nOLESTATUS WINAPI OleQueryName16(SEGPTR oleobj16, LPSTR name, UINT16 *lpbufsize)\n{\n    LPOLEOBJECT oleobj = OLEOBJ32(oleobj16);\n    UINT bufsize = 0;\n    bufsize = *lpbufsize;\n    OLESTATUS result = OleQueryName(oleobj, name, &bufsize);\n    *lpbufsize = bufsize;\n    return result;\n}\n\nOLESTATUS WINAPI OleCreateInvisible16(LPCSTR protocol, SEGPTR olecli16, LPCSTR cls, LHCLIENTDOC doc, LPCSTR obj, SEGPTR *lplpoleobj16, OLEOPT_RENDER renderopt, OLECLIPFORMAT fmt, BOOL actv)\n{\n    LPOLECLIENT client32 = get_ole_client32(olecli16);\n    LPOLEOBJECT obj32 = NULL;\n    OLESTATUS result = OleCreateInvisible(protocol, client32, cls, doc, obj, &obj32, renderopt, fmt, actv);\n    *lplpoleobj16 = OLEOBJ16(obj32);\n    return result;\n}\n\nOLESTATUS WINAPI OleSetColorScheme16(SEGPTR oleobj16, const LOGPALETTE *pal)\n{\n    LPOLEOBJECT obj32 = OLEOBJ32(oleobj16);\n    OLESTATUS result = OleSetColorScheme(obj32, pal);\n    return result;\n}\n\nOLESTATUS WINAPI OleGetLinkUpdateOptions16(SEGPTR oleobj16, WORD *update)\n{\n    LPOLEOBJECT obj32 = OLEOBJ32(oleobj16);\n    OLEOPT_UPDATE update32 = *update;\n    OLESTATUS result = OleGetLinkUpdateOptions(obj32, &update32);\n    *update = (WORD)update32;\n    return result;\n}\n\nOLESTATUS WINAPI OleSetLinkUpdateOptions16(SEGPTR oleobj16, OLEOPT_UPDATE update)\n{\n    LPOLEOBJECT obj32 = OLEOBJ32(oleobj16);\n    OLESTATUS result = OleSetLinkUpdateOptions(obj32, update);\n    return result;\n}\n"
  },
  {
    "path": "olecli/olecli.def",
    "content": "; File generated automatically from ..\\olecli\\olecli.dll16.spec; do not edit!\n\nLIBRARY olecli.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "olecli/olecli.dll16.spec",
    "content": "#1 WEP\n2 pascal -ret16 OleDelete(segptr) OleDelete16\n3 pascal -ret16 OleSaveToStream(segptr segptr) OleSaveToStream16\n4 pascal -ret16 OleLoadFromStream(segptr str segptr long str ptr) OleLoadFromStream16\n6 pascal -ret16 OleClone(segptr segptr long str ptr) OleClone16\n7 stub OLECOPYFROMLINK\n8 pascal -ret16 OleEqual(segptr segptr) OleEqual16\n9 pascal -ret16 OleQueryLinkFromClip(str word word) OleQueryLinkFromClip16\n10 pascal -ret16 OleQueryCreateFromClip(str word word) OleQueryCreateFromClip16\n11 pascal -ret16 OleCreateLinkFromClip (str segptr long str ptr word word) OleCreateLinkFromClip16\n12 pascal -ret16 OleCreateFromClip(str segptr long str long word word) OleCreateFromClip16\n13 pascal -ret16 OleCopyToClipboard(segptr) OleCopyToClipboard16\n14 pascal -ret16 OleQueryType(segptr ptr) OleQueryType16\n15 pascal -ret16 OleSetHostNames(long str str) OleSetHostNames16\n16 pascal -ret16 OleSetTargetDevice(segptr word) OleSetTargetDevice16\n17 pascal -ret16 OleSetBounds(segptr ptr) OleSetBounds16\n18 pascal -ret16 OleQueryBounds(long ptr) OleQueryBounds16\n19 pascal -ret16 OleDraw(long word ptr ptr word) OleDraw16\n20 pascal -ret16 OleQueryOpen(segptr) OleQueryOpen16\n21 pascal -ret16 OleActivate(segptr word word word word ptr) OleActivate16\n22 pascal -ret16 OleUpdate(segptr) OleUpdate16\n23 pascal -ret16 OleReconnect(segptr) OleReconnect16\n24 pascal -ret16 OleGetLinkUpdateOptions(segptr ptr) OleGetLinkUpdateOptions16\n25 pascal -ret16 OleSetLinkUpdateOptions(segptr word) OleSetLinkUpdateOptions16\n26 pascal -ret16 OleEnumFormats(segptr word) OleEnumFormats16\n27 pascal -ret16 OleClose(segptr) OleClose16\n28 pascal -ret16 OleGetData(segptr word ptr) OleGetData16\n29 pascal -ret16 OleSetData(segptr word word) OleSetData16\n30 stub OLEQUERYPROTOCOL\n31 stub OLEQUERYOUTOFDATE\n32 stub OLEOBJECTCONVERT\n33 stub OLECREATEFROMTEMPLATE\n34 pascal -ret16 OleCreate(str segptr str long str ptr word word) OleCreate16\n35 pascal -ret16 OleQueryReleaseStatus(segptr) OleQueryReleaseStatus16\n36 pascal -ret16 OleQueryReleaseError(long) OleQueryReleaseError16\n37 pascal -ret16 OleQueryReleaseMethod(long) OleQueryReleaseMethod16\n38 pascal -ret16 OleCreateFromFile(str segptr str str long str ptr word word) OleCreateFromFile16\n39 stub OLECREATELINKFROMFILE\n40 pascal -ret16 OleRelease(segptr) OleRelease16\n41 pascal -ret16 OleRegisterClientDoc(ptr ptr long ptr) OleRegisterClientDoc16\n42 pascal -ret16 OleRevokeClientDoc(long) OleRevokeClientDoc16\n43 pascal -ret16 OleRenameClientDoc(long ptr) OleRenameClientDoc16\n44 pascal -ret16 OleRevertClientDoc(long) OleRevertClientDoc16\n45 pascal -ret16 OleSavedClientDoc(long) OleSavedClientDoc16\n46 pascal -ret16 OleRename(segptr str) OleRename16\n47 pascal -ret16 OleEnumObjects(long ptr) OleEnumObjects16\n48 pascal -ret16 OleQueryName(segptr str ptr) OleQueryName16\n49 pascal -ret16 OleSetColorScheme(segptr ptr) OleSetColorScheme16\n50 stub OLEREQUESTDATA\n54 pascal -ret16 OleLockServer(segptr ptr) OleLockServer16\n55 pascal -ret16 OleUnlockServer(segptr) OleUnlockServer16\n56 pascal -ret16 OleQuerySize(long ptr) OleQuerySize16\n57 stub OLEEXECUTE\n58 pascal -ret16 OleCreateInvisible(str segptr str long str ptr word word word) OleCreateInvisible16\n59 pascal -ret16 OleQueryClientVersion() OleQueryClientVersion16\n60 pascal -ret16 OleIsDcMeta(word) OleIsDcMeta16\n100 stub DOCWNDPROC\n101 stub SRVRWNDPROC\n102 stub MFCALLBACKFUNC\n110 stub DEFLOADFROMSTREAM\n111 stub DEFCREATEFROMCLIP\n112 stub DEFCREATELINKFROMCLIP\n113 stub DEFCREATEFROMTEMPLATE\n114 stub DEFCREATE\n115 stub DEFCREATEFROMFILE\n116 stub DEFCREATELINKFROMFILE\n117 stub DEFCREATEINVISIBLE\n200 stub LERELEASE\n201 stub LESHOW\n202 stub LEGETDATA\n203 stub LESETDATA\n204 stub LESETHOSTNAMES\n205 stub LESETTARGETDEVICE\n206 stub LESETBOUNDS\n207 stub LESAVETOSTREAM\n208 stub LECLONE\n209 stub LECOPYFROMLINK\n210 stub LEEQUAL\n211 stub LECOPY\n212 stub LEQUERYTYPE\n213 stub LEQUERYBOUNDS\n214 stub LEDRAW\n215 stub LEQUERYOPEN\n216 stub LEACTIVATE\n218 stub LEUPDATE\n219 stub LERECONNECT\n220 stub LEENUMFORMAT\n221 stub LEQUERYPROTOCOL\n222 stub LEQUERYOUTOFDATE\n223 stub LEOBJECTCONVERT\n224 stub LECHANGEDATA\n225 stub LECLOSE\n226 stub LEGETUPDATEOPTIONS\n227 stub LESETUPDATEOPTIONS\n228 stub LEEXECUTE\n229 stub LEOBJECTLONG\n230 stub LECREATEINVISIBLE\n300 stub MFRELEASE\n301 stub MFGETDATA\n302 stub MFSAVETOSTREAM\n303 stub MFCLONE\n304 stub MFEQUAL\n305 stub MFCOPY\n307 stub MFQUERYBOUNDS\n308 stub MFDRAW\n309 stub MFENUMFORMAT\n310 stub MFCHANGEDATA\n400 stub BMRELEASE\n401 stub BMGETDATA\n402 stub BMSAVETOSTREAM\n403 stub BMCLONE\n404 stub BMEQUAL\n405 stub BMCOPY\n407 stub BMQUERYBOUNDS\n408 stub BMDRAW\n409 stub BMENUMFORMAT\n410 stub BMCHANGEDATA\n500 stub DIBRELEASE\n501 stub DIBGETDATA\n502 stub DIBSAVETOSTREAM\n503 stub DIBCLONE\n504 stub DIBEQUAL\n505 stub DIBCOPY\n507 stub DIBQUERYBOUNDS\n508 stub DIBDRAW\n509 stub DIBENUMFORMAT\n510 stub DIBCHANGEDATA\n600 stub GENRELEASE\n601 stub GENGETDATA\n602 stub GENSETDATA\n603 stub GENSAVETOSTREAM\n604 stub GENCLONE\n605 stub GENEQUAL\n606 stub GENCOPY\n608 stub GENQUERYBOUNDS\n609 stub GENDRAW\n610 stub GENENUMFORMAT\n611 stub GENCHANGEDATA\n701 stub ERRSHOW\n702 stub ERRSETDATA\n703 stub ERRSETHOSTNAMES\n704 stub ERRSETTARGETDEVICE\n705 stub ERRSETBOUNDS\n706 stub ERRCOPYFROMLINK\n707 stub ERRQUERYOPEN\n708 stub ERRACTIVATE\n709 stub ERRCLOSE\n710 stub ERRUPDATE\n711 stub ERRRECONNECT\n712 stub ERRQUERYPROTOCOL\n713 stub ERRQUERYOUTOFDATE\n714 stub ERROBJECTCONVERT\n715 stub ERRGETUPDATEOPTIONS\n716 stub ERRSETUPDATEOPTIONS\n717 stub ERREXECUTE\n718 stub ERROBJECTLONG\n800 stub PBLOADFROMSTREAM\n801 stub PBCREATEFROMCLIP\n802 stub PBCREATELINKFROMCLIP\n803 stub PBCREATEFROMTEMPLATE\n804 stub PBCREATE\n805 stub PBDRAW\n806 stub PBQUERYBOUNDS\n807 stub PBCOPYTOCLIPBOARD\n808 stub PBCREATEFROMFILE\n809 stub PBCREATELINKFROMFILE\n810 stub PBENUMFORMATS\n811 stub PBGETDATA\n812 stub PBCREATEINVISIBLE\n910 stub OBJQUERYNAME\n911 stub OBJRENAME\n912 stub OBJQUERYTYPE\n913 stub OBJQUERYSIZE\n950 stub CONNECTDLGPROC\n951 stub SETNETNAME\n952 stub CHECKNETDRIVE\n953 stub SETNEXTNETDRIVE\n954 stub GETTASKVISIBLEWINDOW\n"
  },
  {
    "path": "olecli/olecli.h",
    "content": "/*\n *\tOLECLI library\n *\n *\tCopyright 1995\tMartin von Loewis\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\ntypedef enum\n{\n    OLE_OK,\n    OLE_WAIT_FOR_RELEASE,\n    OLE_BUSY,\n    OLE_ERROR_PROTECT_ONLY,\n    OLE_ERROR_MEMORY,\n    OLE_ERROR_STREAM,\n    OLE_ERROR_STATIC,\n    OLE_ERROR_BLANK,\n    OLE_ERROR_DRAW,\n    OLE_ERROR_METAFILE,\n    OLE_ERROR_ABORT,\n    OLE_ERROR_CLIPBOARD,\n    OLE_ERROR_FORMAT,\n    OLE_ERROR_OBJECT,\n    OLE_ERROR_OPTION,\n    OLE_ERROR_PROTOCOL,\n    OLE_ERROR_ADDRESS,\n    OLE_ERROR_NOT_EQUAL,\n    OLE_ERROR_HANDLE,\n    OLE_ERROR_GENERIC,\n    OLE_ERROR_CLASS,\n    OLE_ERROR_SYNTAX,\n    OLE_ERROR_DATATYPE,\n    OLE_ERROR_PALETTE,\n    OLE_ERROR_NOT_LINK,\n    OLE_ERROR_NOT_EMPTY,\n    OLE_ERROR_SIZE,\n    OLE_ERROR_DRIVE,\n    OLE_ERROR_NETWORK,\n    OLE_ERROR_NAME,\n    OLE_ERROR_TEMPLATE,\n    OLE_ERROR_NEW,\n    OLE_ERROR_EDIT,\n    OLE_ERROR_OPEN,\n    OLE_ERROR_NOT_OPEN,\n    OLE_ERROR_LAUNCH,\n    OLE_ERROR_COMM,\n    OLE_ERROR_TERMINATE,\n    OLE_ERROR_COMMAND,\n    OLE_ERROR_SHOW,\n    OLE_ERROR_DOVERB,\n    OLE_ERROR_ADVISE_NATIVE,\n    OLE_ERROR_ADVISE_PICT,\n    OLE_ERROR_ADVISE_RENAME,\n    OLE_ERROR_POKE_NATIVE,\n    OLE_ERROR_REQUEST_NATIVE,\n    OLE_ERROR_REQUEST_PICT,\n    OLE_ERROR_SERVER_BLOCKED,\n    OLE_ERROR_REGISTRATION,\n    OLE_ERROR_ALREADY_REGISTERED,\n    OLE_ERROR_TASK,\n    OLE_ERROR_OUTOFDATE,\n    OLE_ERROR_CANT_UPDATE_CLIENT,\n    OLE_ERROR_UPDATE,\n    OLE_ERROR_SETDATA_FORMAT,\n    OLE_ERROR_STATIC_FROM_OTHER_OS,\n    OLE_WARN_DELETE_DATA = 1000\n} OLESTATUS;\n\ntypedef enum\n{\n    oleupdate_always,\n    oleupdate_onsave,\n    oleupdate_oncall,\n    oleupdate_onclose\n} OLEOPT_UPDATE;\n\ntypedef enum {\n    OLE_NONE,     /* none */\n    OLE_DELETE,   /* delete object */\n    OLE_LNKPASTE, /* link paste */\n    OLE_EMBPASTE, /* paste(and update) */\n    OLE_SHOW,\n    OLE_RUN,\n    OLE_ACTIVATE,\n    OLE_UPDATE,\n    OLE_CLOSE,\n    OLE_RECONNECT,\n    OLE_SETUPDATEOPTIONS,\n    OLE_SERVERRUNLAUNCH, /* unlaunch (terminate?) server */\n    OLE_LOADFROMSTREAM,  /* (auto reconnect) */\n    OLE_SETDATA,         /* OleSetData */\n    OLE_REQUESTDATA,     /* OleRequestData */\n    OLE_OTHER,\n    OLE_CREATE,\n    OLE_CREATEFROMTEMPLATE,\n    OLE_CREATELINKFROMFILE,\n    OLE_COPYFROMLNK,\n    OLE_CREATREFROMFILE,\n    OLE_CREATEINVISIBLE\n} OLE_RELEASE_METHOD;\n\ntypedef LONG LHCLIENTDOC;\ntypedef struct _OLEOBJECT *_LPOLEOBJECT;\ntypedef struct _OLECLIENT *LPOLECLIENT;\ntypedef LONG OLECLIPFORMAT;/* dunno about this type, please change/add */\ntypedef OLEOPT_UPDATE *LPOLEOPT_UPDATE;\ntypedef LPCSTR LPCOLESTR16;\n\nstruct _OLESTREAM;\n"
  },
  {
    "path": "olecli/olecli.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>olecli</RootNamespace>\n    <ProjectGuid>{B3496128-1B1F-4D55-8F7F-7E39A53ABE75}</ProjectGuid>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>olecli32.lib;ole32.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\ngdi32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\nolecli.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\nolecli.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>olecli32.lib;ole32.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\ngdi32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"olecli.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"olecli.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"olecli.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" OLECLI &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" OLECLI &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"olecli.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "olesvr/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(olesvr SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/olesvr.def olesvr.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(olesvr.dll16 olesvr)\ntarget_link_libraries(olesvr libwine winecrt0 krnl386 olesvr32.lib)\nset_target_properties(olesvr PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "olesvr/Makefile.in",
    "content": "MODULE    = olesvr.dll16\nIMPORTS   = gdi32\nEXTRADLLFLAGS = -m16 -Wb,--main-module,olesvr32.dll\n\nC_SRCS = olesvr.c\n"
  },
  {
    "path": "olesvr/olesvr.c",
    "content": "/*\n *\tOLESVR library\n *\n *\tCopyright 1995\tMartin von Loewis\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n/*\tAt the moment, these are only empty stubs.\n */\n\n#include \"config.h\"\n\n//?????\n#define __oleidl_h__\n#define _OLE2_H_\n#include <windows.h>\n#ifndef _MSC_VER\n#define _Analysis_noreturn_\n#endif\n#define SERVERONLY\n#include <ole.h>\n#include <stdarg.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wownt32.h\"\n#include \"wine/windef16.h\"\n#include \"wine/winbase16.h\"\n#include \"objbase.h\"\n#include \"wine/debug.h\"\n#include \"wine/wingdi16.h\"\n#include \"wingdi.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(ole);\n\n#define HINSTANCE_32(h16)      ((HINSTANCE)(ULONG_PTR)(h16))\n#define HINSTANCE_16(h32)      (LOWORD(h32))\n#define MAX_OLESERVER 32\ntypedef LONG LHSERVER;\ntypedef LONG LHSERVERDOC;\ntypedef LPCSTR LPCOLESTR16;\ntypedef INT16 OLE_NOTIFICATION16;\ntypedef OLEOPT_UPDATE *LPOLEOPT_UPDATE;\n\ntypedef struct\n{\n    OLEOBJECT obj;\n    SEGPTR obj16;\n} ole_object_wrapper;\nole_object_wrapper ole_objs[MAX_OLESERVER];\nole_object_wrapper *impl_from_oleobject(LPOLEOBJECT obj)\n{\n    return (ole_object_wrapper*)CONTAINING_RECORD(obj, ole_object_wrapper, obj);\n}\nole_object_wrapper *find_oleobject(SEGPTR obj16)\n{\n    for (int i = 0; i < MAX_OLESERVER; i++)\n        if (ole_objs[i].obj16 == obj16) return &ole_objs[i];\n    return NULL;\n}\ntypedef struct _OLEOBJECTVTBL16 {\n    SEGPTR QueryProtocol; /* void *(CALLBACK *QueryProtocol)(_LPOLEOBJECT,LPCOLESTR16);*/\n    SEGPTR Release; /* OLESTATUS (CALLBACK *Release)(_LPOLEOBJECT);*/\n    SEGPTR Show; /* OLESTATUS (CALLBACK *Show)(_LPOLEOBJECT,BOOL16);*/\n    SEGPTR DoVerb; /* OLESTATUS (CALLBACK *DoVerb)(_LPOLEOBJECT,UINT16,BOOL16,BOOL16);*/\n    SEGPTR GetData; /* OLESTATUS (CALLBACK *GetData)(_LPOLEOBJECT,OLECLIPFORMAT,HANDLE16 *);*/\n    SEGPTR SetData; /* OLESTATUS (CALLBACK *SetData)(_LPOLEOBJECT,OLECLIPFORMAT,HANDLE16);*/\n    SEGPTR SetTargetDevice; /* OLESTATUS (CALLBACK *SetTargetDevice)(_LPOLEOBJECT,HGLOBAL16);*/\n    SEGPTR SetBounds; /* OLESTATUS (CALLBACK *SetBounds)(_LPOLEOBJECT,LPRECT16);*/\n    SEGPTR EnumFormats; /* OLESTATUS (CALLBACK *EnumFormats)(_LPOLEOBJECT,OLECLIPFORMAT);*/\n    SEGPTR SetColorScheme; /* OLESTATUS (CALLBACK *SetColorScheme)(_LPOLEOBJECT,struct tagLOGPALETTE*);*/\n#ifndef SERVERONLY // nothing below used here\n    SEGPTR Delete; /* OLESTATUS (CALLBACK *Delete)(_LPOLEOBJECT);*/\n    SEGPTR SetHostNames; /* OLESTATUS (CALLBACK *SetHostNames)(_LPOLEOBJECT,LPCOLESTR16,LPCOLESTR16);*/\n    SEGPTR SaveToStream; /* OLESTATUS (CALLBACK *SaveToStream)(_LPOLEOBJECT,struct _OLESTREAM*);*/\n    SEGPTR Clone; /* OLESTATUS (CALLBACK *Clone)(_LPOLEOBJECT,LPOLECLIENT,LHCLIENTDOC,LPCOLESTR16,_LPOLEOBJECT *);*/\n    SEGPTR CopyFromLink; /* OLESTATUS (CALLBACK *CopyFromLink)(_LPOLEOBJECT,LPOLECLIENT,LHCLIENTDOC,LPCOLESTR16,_LPOLEOBJECT *);*/\n    SEGPTR Equal; /* OLESTATUS (CALLBACK *Equal)(_LPOLEOBJECT,_LPOLEOBJECT);*/\n    SEGPTR CopyToClipBoard; /* OLESTATUS (CALLBACK *CopyToClipBoard)(_LPOLEOBJECT);*/\n    SEGPTR Draw; /* OLESTATUS (CALLBACK *Draw)(_LPOLEOBJECT,HDC16,LPRECT16,LPRECT16,HDC16);*/\n    SEGPTR Activate; /* OLESTATUS (CALLBACK *Activate)(_LPOLEOBJECT,UINT16,BOOL16,BOOL16,HWND16,LPRECT16);*/\n    SEGPTR Execute; /* OLESTATUS (CALLBACK *Execute)(_LPOLEOBJECT,HGLOBAL16,UINT16);*/\n    SEGPTR Close; /* OLESTATUS (CALLBACK *Close)(_LPOLEOBJECT);*/\n    SEGPTR Update; /* OLESTATUS (CALLBACK *Update)(_LPOLEOBJECT);*/\n    SEGPTR Reconnect; /* OLESTATUS (CALLBACK *Reconnect)(_LPOLEOBJECT);*/\n    SEGPTR ObjectConvert; /* OLESTATUS (CALLBACK *ObjectConvert)(_LPOLEOBJECT,LPCOLESTR16,LPOLECLIENT,LHCLIENTDOC,LPCOLESTR16,_LPOLEOBJECT*);*/\n    SEGPTR GetLinkUpdateOptions; /* OLESTATUS (CALLBACK *GetLinkUpdateOptions)(_LPOLEOBJECT,LPOLEOPT_UPDATE);*/\n    SEGPTR SetLinkUpdateOptions; /* OLESTATUS (CALLBACK *SetLinkUpdateOptions)(_LPOLEOBJECT,OLEOPT_UPDATE);*/\n    SEGPTR Rename; /* OLESTATUS (CALLBACK *Rename)(_LPOLEOBJECT,LPCOLESTR16);*/\n    SEGPTR QueryName; /* OLESTATUS (CALLBACK *QueryName)(_LPOLEOBJECT,LPSTR,LPUINT16);*/\n    SEGPTR QueryType; /* OLESTATUS (CALLBACK *QueryType)(_LPOLEOBJECT,LPLONG);*/\n    SEGPTR QueryBounds; /* OLESTATUS (CALLBACK *QueryBounds)(_LPOLEOBJECT,LPRECT16);*/\n    SEGPTR QuerySize; /* OLESTATUS (CALLBACK *QuerySize)(_LPOLEOBJECT,LPDWORD);*/\n    SEGPTR QueryOpen; /* OLESTATUS (CALLBACK *QueryOpen)(_LPOLEOBJECT);*/\n    SEGPTR QueryOutOfDate; /* OLESTATUS (CALLBACK *QueryOutOfDate)(_LPOLEOBJECT);*/\n    SEGPTR QueryReleaseStatus; /* OLESTATUS (CALLBACK *QueryReleaseStatus)(_LPOLEOBJECT);*/\n    SEGPTR QueryReleaseError; /* OLESTATUS (CALLBACK *QueryReleaseError)(_LPOLEOBJECT);*/\n    SEGPTR QueryReleaseMethod; /* OLE_RELEASE_METHOD (CALLBACK *QueryReleaseMethod)(_LPOLEOBJECT);*/\n    SEGPTR RequestData; /* OLESTATUS (CALLBACK *RequestData)(_LPOLEOBJECT,OLECLIPFORMAT);*/\n    SEGPTR ObjectLong; /* OLESTATUS (CALLBACK *ObjectLong)(_LPOLEOBJECT,UINT16,LPLONG);*/\n#endif\n} OLEOBJECTVTBL16, *LPOLEOBJECTVTBL16;\n\ntypedef struct _OLEOBJECT16\n{\n    SEGPTR lpvtbl; /* const OLEOBJECTVTBL16 *lpvtbl; */\n} OLEOBJECT16, *LPOLEOBJECT16;\n\nLPOLEOBJECTVTBL16 get_oleobjectvtbl16(ole_object_wrapper *obj)\n{\n    return ((LPOLEOBJECTVTBL16)MapSL(((LPOLEOBJECT16)MapSL(obj->obj16))->lpvtbl));\n}\n\nvoid * CALLBACK ole_obj_QueryProtocol(LPOLEOBJECT obj, LPCOLESTR a)\n{\n   TRACE(\"\\n\");\n   return OLE_OK;\n}\nOLESTATUS CALLBACK ole_obj_Release(LPOLEOBJECT obj)\n{\n    TRACE(\"\\n\");\n    WORD args[2];\n    ole_object_wrapper *objw = impl_from_oleobject(obj);\n    LPOLEOBJECTVTBL16 vtbl16 = get_oleobjectvtbl16(objw);\n    DWORD ret;\n    args[1] = HIWORD(objw->obj16);\n    args[0] = LOWORD(objw->obj16);\n    WOWCallback16Ex(vtbl16->Release, WCB16_PASCAL, sizeof(args), args, &ret);\n    return (OLESTATUS)(WORD)ret;\n}\nOLESTATUS CALLBACK ole_obj_Show(LPOLEOBJECT obj,BOOL a)\n{\n    TRACE(\"\\n\");\n    WORD args[3];\n    ole_object_wrapper *objw = impl_from_oleobject(obj);\n    LPOLEOBJECTVTBL16 vtbl16 = get_oleobjectvtbl16(objw);\n    DWORD ret;\n    args[2] = HIWORD(objw->obj16);\n    args[1] = LOWORD(objw->obj16);\n    args[0] = LOWORD(a);\n    WOWCallback16Ex(vtbl16->Show, WCB16_PASCAL, sizeof(args), args, &ret);\n    return (OLESTATUS)(WORD)ret;\n}\nOLESTATUS CALLBACK ole_obj_DoVerb(LPOLEOBJECT obj,UINT a,BOOL b,BOOL c)\n{\n    TRACE(\"\\n\");\n    WORD args[5];\n    ole_object_wrapper *objw = impl_from_oleobject(obj);\n    LPOLEOBJECTVTBL16 vtbl16 = get_oleobjectvtbl16(objw);\n    DWORD ret;\n    args[4] = HIWORD(objw->obj16);\n    args[3] = LOWORD(objw->obj16);\n    args[2] = LOWORD(a);\n    args[1] = LOWORD(b);\n    args[0] = LOWORD(c);\n    WOWCallback16Ex(vtbl16->DoVerb, WCB16_PASCAL, sizeof(args), args, &ret);\n    return (OLESTATUS)(WORD)ret;\n}\nOLESTATUS CALLBACK ole_obj_GetData(LPOLEOBJECT obj,OLECLIPFORMAT a,HANDLE *b)\n{\n    TRACE(\"\\n\");\n    WORD args[5];\n    ole_object_wrapper *objw = impl_from_oleobject(obj);\n    LPOLEOBJECTVTBL16 vtbl16 = get_oleobjectvtbl16(objw);\n    DWORD hndl = MapLS(b);\n    DWORD ret;\n    args[4] = HIWORD(objw->obj16);\n    args[3] = LOWORD(objw->obj16);\n    args[2] = LOWORD(a);\n    args[1] = HIWORD(hndl);\n    args[0] = LOWORD(hndl);\n    WOWCallback16Ex(vtbl16->GetData, WCB16_PASCAL, sizeof(args), args, &ret);\n    UnMapLS(hndl);\n    HGLOBAL16 hmem16 = *b;\n    if (hmem16)\n    {\n        if (a == CF_BITMAP)\n            *b = HBITMAP_32(hmem16);\n        else if (a == CF_METAFILEPICT)\n        {\n            HGLOBAL hmem = GlobalAlloc(GMEM_DDESHARE, sizeof(METAFILEPICT));\n            METAFILEPICT16 *pic16 = GlobalLock16(hmem16);\n            METAFILEPICT *pic = GlobalLock(hmem);\n            pic->mm = pic16->mm;\n            pic->xExt = pic16->xExt;\n            pic->yExt = pic16->yExt;\n            void *mf = GlobalLock16(pic16->hMF);\n            pic->hMF = SetMetaFileBitsEx(GlobalSize16(pic16->hMF), mf);\n            GlobalUnlock16(pic16->hMF);\n            GlobalFree16(pic16->hMF);\n            GlobalUnlock16(hmem16);\n            GlobalFree16(hmem16);\n            GlobalUnlock(hmem);\n            *b = hmem;\n        }\n        else\n        {\n            if (a < 0xc000) FIXME(\"unknown format %04x\\n\", a);\n            int size = GlobalSize16(hmem16);\n            void *optr = GlobalLock16(hmem16);\n            HGLOBAL hmem = GlobalAlloc(GMEM_MOVEABLE, size);\n            void *nptr = GlobalLock(hmem);\n            memcpy(nptr, optr, size);\n            GlobalUnlock16(hmem16);\n            GlobalUnlock(hmem);\n            GlobalFree16(hmem16);\n            *b = hmem;\n        }\n    }\n    return (OLESTATUS)(WORD)ret;\n}\nOLESTATUS CALLBACK ole_obj_SetData(LPOLEOBJECT obj,OLECLIPFORMAT fmt,HANDLE handle32)\n{\n    TRACE(\"\\n\");\n    HANDLE16 handle = 0;\n    if (fmt == CF_METAFILEPICT)\n    {\n        /* user.c SetClipboardData16 */\n        HANDLE16 data16 = 0;\n        UINT size;\n        void *ptr;\n        METAFILEPICT16 *pict16;\n        METAFILEPICT *pict32 = GlobalLock(handle32);\n\n        if (pict32)\n        {\n            data16 = GlobalAlloc16(GMEM_MOVEABLE, sizeof(*pict16));\n            pict16 = GlobalLock16(data16);\n            pict16->mm = pict32->mm;\n            pict16->xExt = pict32->xExt;\n            pict16->yExt = pict32->yExt;\n            size = GetMetaFileBitsEx(pict32->hMF, 0, NULL);\n            pict16->hMF = GlobalAlloc16(GMEM_MOVEABLE, size);\n            ptr = GlobalLock16(pict16->hMF);\n            GetMetaFileBitsEx(pict32->hMF, size, ptr);\n            DeleteMetaFile(pict32->hMF);\n            GlobalUnlock16(pict16->hMF);\n            GlobalUnlock16(data16);\n        }\n        GlobalUnlock(handle32);\n        GlobalFree(handle32);\n        handle = data16;\n    }\n    else if (fmt == CF_BITMAP)\n        handle = HBITMAP_16(handle32);\n    else\n    {\n        if (fmt < 0xc000) FIXME(\"unknown format %04x\\n\", fmt);\n        int size = GlobalSize(handle32);\n        void *optr = GlobalLock(handle32);\n        HGLOBAL hmem = GlobalAlloc16(GMEM_MOVEABLE, size);\n        void *nptr = GlobalLock16(hmem);\n        memcpy(nptr, optr, size);\n        GlobalUnlock16(hmem);\n        GlobalUnlock(handle32);\n        GlobalFree(handle32);\n        handle = hmem;\n    }\n    WORD args[4];\n    ole_object_wrapper *objw = impl_from_oleobject(obj);\n    LPOLEOBJECTVTBL16 vtbl16 = get_oleobjectvtbl16(objw);\n    DWORD ret;\n    args[3] = HIWORD(objw->obj16);\n    args[2] = LOWORD(objw->obj16);\n    args[1] = LOWORD(fmt);\n    args[0] = handle;\n    WOWCallback16Ex(vtbl16->SetData, WCB16_PASCAL, sizeof(args), args, &ret);\n    return (OLESTATUS)(WORD)ret;\n}\nOLESTATUS CALLBACK ole_obj_SetTargetDevice(LPOLEOBJECT obj,HGLOBAL a)\n{\n    TRACE(\"\\n\");\n    WORD args[3];\n    ole_object_wrapper *objw = impl_from_oleobject(obj);\n    LPOLEOBJECTVTBL16 vtbl16 = get_oleobjectvtbl16(objw);\n    DWORD ret;\n    if (a)\n    {\n        int size = GlobalSize(a);\n        void *optr = GlobalLock(a);\n        HGLOBAL16 hmem16 = GlobalAlloc16(GMEM_MOVEABLE, size);\n        void *nptr = GlobalLock16(hmem16);\n        memcpy(nptr, optr, size);\n        GlobalUnlock16(hmem16);\n        GlobalUnlock(a);\n        GlobalFree(a);\n        a = hmem16;\n    }\n    args[2] = HIWORD(objw->obj16);\n    args[1] = LOWORD(objw->obj16);\n    args[0] = LOWORD(a);\n    WOWCallback16Ex(vtbl16->SetTargetDevice, WCB16_PASCAL, sizeof(args), args, &ret);\n    return (OLESTATUS)(WORD)ret;\n}\nOLESTATUS CALLBACK ole_obj_SetBounds(LPOLEOBJECT obj,LPRECT a)\n{\n   TRACE(\"\\n\");\n   return OLE_OK;\n}\nOLECLIPFORMAT CALLBACK ole_obj_EnumFormats(LPOLEOBJECT obj,OLECLIPFORMAT a)\n{\n    TRACE(\"\\n\");\n    WORD args[3];\n    ole_object_wrapper *objw = impl_from_oleobject(obj);\n    LPOLEOBJECTVTBL16 vtbl16 = get_oleobjectvtbl16(objw);\n    DWORD ret;\n    args[2] = HIWORD(objw->obj16);\n    args[1] = LOWORD(objw->obj16);\n    args[0] = LOWORD(a);\n    WOWCallback16Ex(vtbl16->EnumFormats, WCB16_PASCAL, sizeof(args), args, &ret);\n    return (OLECLIPFORMAT)(WORD)ret;\n}\nOLESTATUS CALLBACK ole_obj_SetColorScheme(LPOLEOBJECT obj,struct tagLOGPALETTE* a)\n{\n   TRACE(\"\\n\");\n   return OLE_OK;\n}\n\nOLEOBJECTVTBL oleobject_vtbl = \n{\n    ole_obj_QueryProtocol,\n    ole_obj_Release,\n    ole_obj_Show,\n    ole_obj_DoVerb,\n    ole_obj_GetData,\n    ole_obj_SetData,\n    ole_obj_SetTargetDevice,\n    ole_obj_SetBounds,\n    ole_obj_EnumFormats,\n    ole_obj_SetColorScheme\n};\n\nint current_oleobject = 0;\nstatic LPOLEOBJECT register_oleobject(SEGPTR obj16)\n{\n    if (current_oleobject >= MAX_OLESERVER)\n        return NULL;\n    current_oleobject++;\n    LPOLEOBJECT obj = &ole_objs[current_oleobject - 1].obj;\n    obj->lpvtbl = &oleobject_vtbl;\n    ole_objs[current_oleobject - 1].obj16 = obj16;\n    return obj;\n}\n\nINT16 CALLBACK ItemCallBack16(LPOLECLIENT client, OLE_NOTIFICATION16 notif, SEGPTR oleobject);\n\ntypedef struct _OLESERVERDOCVTBL16 {\n    SEGPTR Save;\n    SEGPTR Close;\n    SEGPTR SetHostNames;\n    SEGPTR SetDocDimensions;\n    SEGPTR GetObject;\n    SEGPTR Release;\n    SEGPTR SetColorScheme;\n    SEGPTR Execute;\n} OLESERVERDOCVTBL16, *LPOLESERVERDOCVTBL16;\n\ntypedef struct _OLESERVERDOC16\n{\n    const struct _OLESERVERDOCVTBL16 *lpvtbl;\n} OLESERVERDOC16, *LPOLESERVERDOC16;\n\ntypedef struct\n{\n    OLESERVERDOC document;\n    SEGPTR doc16;\n} ole_server_doc_wrapper;\nole_server_doc_wrapper ole_docs[MAX_OLESERVER];\nole_server_doc_wrapper *impl_from_oleserverdoc(LPOLESERVERDOC document)\n{\n    return (ole_server_doc_wrapper*)CONTAINING_RECORD(document, ole_server_doc_wrapper, document);\n}\nLPOLESERVERDOCVTBL16 get_oleserverdocvtbl16(ole_server_doc_wrapper *doc)\n{\n    return ((LPOLESERVERDOCVTBL16)MapSL(((LPOLESERVERDOC16)MapSL(doc->doc16))->lpvtbl));\n}\nOLESTATUS CALLBACK ole_doc_Save(LPOLESERVERDOC document)\n{\n    TRACE(\"\\n\");\n    return OLE_OK;\n}\nOLESTATUS CALLBACK ole_doc_Close(LPOLESERVERDOC document)\n{\n    TRACE(\"\\n\");\n    WORD args[2];\n    ole_server_doc_wrapper *doc = impl_from_oleserverdoc(document);\n    LPOLESERVERDOCVTBL16 vtbl16 = get_oleserverdocvtbl16(doc);\n    DWORD ret;\n    args[1] = HIWORD(doc->doc16);\n    args[0] = LOWORD(doc->doc16);\n    WOWCallback16Ex(vtbl16->Close, WCB16_PASCAL, sizeof(args), args, &ret);\n    return (OLESTATUS)(WORD)ret;\n}\nOLESTATUS CALLBACK ole_doc_SetHostNames(LPOLESERVERDOC document, OLE_LPCSTR name1, OLE_LPCSTR name2)\n{\n    TRACE(\"\\n\");\n    ole_server_doc_wrapper *doc = impl_from_oleserverdoc(document);\n    LPOLESERVERDOCVTBL16 vtbl16 = get_oleserverdocvtbl16(doc);\n    WORD args[6];\n    DWORD name116 = MapLS(name1);\n    DWORD name216 = MapLS(name2);\n    DWORD ret;\n    args[5] = HIWORD(doc->doc16);\n    args[4] = LOWORD(doc->doc16);\n    args[3] = HIWORD(name116);\n    args[2] = LOWORD(name116);\n    args[1] = HIWORD(name216);\n    args[0] = LOWORD(name216);\n    WOWCallback16Ex(vtbl16->SetHostNames, WCB16_PASCAL, sizeof(args), args, &ret);\n    UnMapLS(name116);\n    UnMapLS(name216);\n    return (OLESTATUS)(WORD)ret;\n}\nOLESTATUS CALLBACK ole_doc_SetDocDimensions(LPOLESERVERDOC document, OLE_CONST RECT FAR* rect)\n{\n    TRACE(\"\\n\");\n    return OLE_OK;\n}\n\nOLESTATUS CALLBACK ole_doc_GetObject(LPOLESERVERDOC document, OLE_LPCSTR name, LPOLEOBJECT FAR* object, LPOLECLIENT client)\n{\n    TRACE(\"\\n\");\n    static OLECLIENTVTBL oleclientvtbl16 = {0};\n    static SEGPTR ptrvtbl16;\n    ole_server_doc_wrapper *doc = impl_from_oleserverdoc(document);\n    LPOLESERVERDOCVTBL16 vtbl16 = get_oleserverdocvtbl16(doc);\n    WORD args[8];\n    DWORD name16 = MapLS(name);\n    DWORD obj16 = MapLS(object);\n    DWORD cli16 = MapLS(client); // FIXME: this can't be freed until Release\n    DWORD ret;\n    if (!oleclientvtbl16.CallBack)\n    {\n        oleclientvtbl16.CallBack = GetProcAddress16(GetModuleHandle16(\"OLESVR\"), \"ITEMCALLBACK\");\n        ptrvtbl16 = MapLS(&oleclientvtbl16);\n    }\n    client->lpvtbl = ptrvtbl16;\n    args[7] = HIWORD(doc->doc16);\n    args[6] = LOWORD(doc->doc16);\n    args[5] = HIWORD(name16);\n    args[4] = LOWORD(name16);\n    args[3] = HIWORD(obj16);\n    args[2] = LOWORD(obj16);\n    args[1] = HIWORD(cli16);\n    args[0] = LOWORD(cli16);\n    WOWCallback16Ex(vtbl16->GetObject, WCB16_PASCAL, sizeof(args), args, &ret);\n    UnMapLS(name16);\n    UnMapLS(obj16);\n    if ((WORD)ret == OLE_OK)\n        *object = register_oleobject(*object);\n    return (OLESTATUS)(WORD)ret;\n}\nOLESTATUS CALLBACK ole_doc_Release(LPOLESERVERDOC document)\n{\n    TRACE(\"\\n\");\n    WORD args[2];\n    ole_server_doc_wrapper *doc = impl_from_oleserverdoc(document);\n    LPOLESERVERDOCVTBL16 vtbl16 = get_oleserverdocvtbl16(doc);\n    DWORD ret;\n    args[1] = HIWORD(doc->doc16);\n    args[0] = LOWORD(doc->doc16);\n    WOWCallback16Ex(vtbl16->Release, WCB16_PASCAL, sizeof(args), args, &ret);\n    return (OLESTATUS)(WORD)ret;\n}\nOLESTATUS CALLBACK ole_doc_SetColorScheme(LPOLESERVERDOC document, OLE_CONST LOGPALETTE FAR* palette)\n{\n    return OLE_OK;\n}\nOLESTATUS CALLBACK ole_doc_Execute(LPOLESERVERDOC document, HGLOBAL h)\n{\n    return OLE_OK;\n}\nOLESERVERDOCVTBL oleserverdoc_vtable =\n{\n    ole_doc_Save,\n    ole_doc_Close,\n    ole_doc_SetHostNames,\n    ole_doc_SetDocDimensions,\n    ole_doc_GetObject,\n    ole_doc_Release,\n    ole_doc_SetColorScheme,\n    ole_doc_Execute\n};\nint current_oleserver_doc = 0;\nstatic LPOLESERVERDOC register_oleserver_doc(SEGPTR doc16)\n{\n    if (current_oleserver_doc >= MAX_OLESERVER)\n        return NULL;\n    current_oleserver_doc++;\n    LPOLESERVERDOC doc = &ole_docs[current_oleserver_doc - 1].document;\n    doc->lpvtbl = &oleserverdoc_vtable;\n    ole_docs[current_oleserver_doc - 1].doc16 = doc16;\n    return doc;\n}\ntypedef struct _OLESERVER16 *LPOLESERVER16;\ntypedef struct _OLESERVERVTBL16\n{\n    OLESTATUS (CALLBACK *Open)(LPOLESERVER,LHSERVERDOC,LPCOLESTR16,LPOLESERVERDOC *);\n    OLESTATUS (CALLBACK *Create)(LPOLESERVER,LHSERVERDOC,LPCOLESTR16,LPCOLESTR16,LPOLESERVERDOC*);\n    OLESTATUS (CALLBACK *CreateFromTemplate)(LPOLESERVER,LHSERVERDOC,LPCOLESTR16,LPCOLESTR16,LPCOLESTR16,LPOLESERVERDOC *);\n    OLESTATUS (CALLBACK *Edit)(LPOLESERVER,LHSERVERDOC,LPCOLESTR16,LPCOLESTR16,LPOLESERVERDOC *);\n    OLESTATUS (CALLBACK *Exit)(LPOLESERVER);\n    OLESTATUS (CALLBACK *Release)(LPOLESERVER);\n    OLESTATUS (CALLBACK *Execute)(LPOLESERVER);\n} OLESERVERVTBL16, *LPOLESERVERVTBL16;\n\ntypedef struct _OLESERVER16\n{\n    const OLESERVERVTBL16 *lpvtbl;\n} OLESERVER16;\n\nstatic LONG OLE_current_handle;\nint current_oleserver = 0;\ntypedef struct\n{\n    OLESERVER server;\n    SEGPTR server16;\n} ole_server_wrapper;\nole_server_wrapper ole_servers[MAX_OLESERVER];\nole_server_wrapper *impl_from_oleserver(LPOLESERVER server)\n{\n    return (ole_server_wrapper*)CONTAINING_RECORD(server, ole_server_wrapper, server);\n}\nLPOLESERVERVTBL16 get_oleservervtbl16(ole_server_wrapper *server)\n{\n    return ((LPOLESERVERVTBL16)MapSL(((LPOLESERVER16)MapSL(server->server16))->lpvtbl));\n}\nstatic OLESTATUS CALLBACK ole_open_callback(LPOLESERVER a, LHSERVERDOC b, OLE_LPCSTR doc_name, LPOLESERVERDOC FAR* d)\n{\n    TRACE(\"\\n\");\n    ole_server_wrapper *server = impl_from_oleserver(a);\n    WORD args[8];\n    LPOLESERVERVTBL16 vtbl16 = get_oleservervtbl16(server);\n    DWORD doc_name16 = MapLS(doc_name);\n    DWORD doc16 = MapLS(d);\n    DWORD ret;\n    args[7] = HIWORD(server->server16);\n    args[6] = LOWORD(server->server16);\n    args[5] = HIWORD(b);\n    args[4] = LOWORD(b);\n    args[3] = HIWORD(doc_name16);\n    args[2] = LOWORD(doc_name16);\n    args[1] = HIWORD(doc16);\n    args[0] = LOWORD(doc16);\n    WOWCallback16Ex(vtbl16->Open, WCB16_PASCAL, sizeof(args), args, &ret);\n    UnMapLS(doc_name16);\n    UnMapLS(doc16);\n    if ((WORD)ret == OLE_OK)\n        *d = register_oleserver_doc(*d);\n    return (OLESTATUS)(WORD)ret;\n}\nstatic OLESTATUS CALLBACK ole_create_callback(LPOLESERVER a, LHSERVERDOC b, OLE_LPCSTR c, OLE_LPCSTR d, LPOLESERVERDOC FAR* e)\n{\n    TRACE(\"\\n\");\n    ole_server_wrapper *server = impl_from_oleserver(a);\n    WORD args[10];\n    LPOLESERVERVTBL16 vtbl16 = get_oleservervtbl16(server);\n    DWORD doc_name16 = MapLS(d);\n    DWORD class16 = MapLS(c);\n    DWORD doc16 = MapLS(e);\n    DWORD ret;\n    args[9] = HIWORD(server->server16);\n    args[8] = LOWORD(server->server16);\n    args[7] = HIWORD(b);\n    args[6] = LOWORD(b);\n    args[5] = HIWORD(class16);\n    args[4] = LOWORD(class16);\n    args[3] = HIWORD(doc_name16);\n    args[2] = LOWORD(doc_name16);\n    args[1] = HIWORD(doc16);\n    args[0] = LOWORD(doc16);\n    WOWCallback16Ex(vtbl16->Create, WCB16_PASCAL, sizeof(args), args, &ret);\n    UnMapLS(doc_name16);\n    UnMapLS(class16);\n    UnMapLS(doc16);\n    if ((WORD)ret == OLE_OK)\n        *e = register_oleserver_doc(*e);\n    return (OLESTATUS)(WORD)ret;\n}\nstatic OLESTATUS CALLBACK ole_create_from_template_callback(LPOLESERVER a, LHSERVERDOC b, OLE_LPCSTR c, OLE_LPCSTR d, OLE_LPCSTR e, LPOLESERVERDOC FAR* f)\n{\n    TRACE(\"\\n\");\n    return OLE_OK;\n}\nstatic OLESTATUS CALLBACK ole_edit_callback(LPOLESERVER a, LHSERVERDOC b, OLE_LPCSTR c, OLE_LPCSTR d, LPOLESERVERDOC FAR* e)\n{\n    TRACE(\"\\n\");\n    ole_server_wrapper *server = impl_from_oleserver(a);\n    WORD args[10];\n    LPOLESERVERVTBL16 vtbl16 = get_oleservervtbl16(server);\n    DWORD doc_name16 = MapLS(d);\n    DWORD class16 = MapLS(c);\n    DWORD doc16 = MapLS(e);\n    DWORD ret;\n    args[9] = HIWORD(server->server16);\n    args[8] = LOWORD(server->server16);\n    args[7] = HIWORD(b);\n    args[6] = LOWORD(b);\n    args[5] = HIWORD(class16);\n    args[4] = LOWORD(class16);\n    args[3] = HIWORD(doc_name16);\n    args[2] = LOWORD(doc_name16);\n    args[1] = HIWORD(doc16);\n    args[0] = LOWORD(doc16);\n    WOWCallback16Ex(vtbl16->Edit, WCB16_PASCAL, sizeof(args), args, &ret);\n    UnMapLS(doc_name16);\n    UnMapLS(class16);\n    UnMapLS(doc16);\n    if ((WORD)ret == OLE_OK)\n        *e = register_oleserver_doc(*e);\n    return (OLESTATUS)(WORD)ret;\n}\nstatic OLESTATUS CALLBACK ole_exit_callback(LPOLESERVER a)\n{\n    TRACE(\"\\n\");\n    return OLE_OK;\n}\nstatic OLESTATUS CALLBACK ole_release_callback(LPOLESERVER a)\n{\n    TRACE(\"\\n\");\n    ole_server_wrapper *server = impl_from_oleserver(a);\n    WORD args[2];\n    LPOLESERVERVTBL16 vtbl16 = get_oleservervtbl16(server);\n    DWORD ret;\n    args[1] = HIWORD(server->server16);\n    args[0] = LOWORD(server->server16);\n    WOWCallback16Ex(vtbl16->Release, WCB16_PASCAL, sizeof(args), args, &ret);\n    return (OLESTATUS)(WORD)ret;\n}\nstatic OLESTATUS CALLBACK ole_excute_callback(LPOLESERVER a, HGLOBAL b)\n{\n    return OLE_OK;\n}\nstatic OLESERVERVTBL oleserver_vtbl =\n{\n    ole_open_callback,\n    ole_create_callback,\n    ole_create_from_template_callback,\n    ole_edit_callback,\n    ole_exit_callback,\n    ole_release_callback,\n    ole_excute_callback\n};\nstatic OLESERVER *register_oleserver(SEGPTR s16)\n{\n    if (current_oleserver >= MAX_OLESERVER)\n        return NULL;\n    ole_servers[current_oleserver].server16 = s16;\n    ole_servers[current_oleserver].server.lpvtbl = &oleserver_vtbl;\n    current_oleserver++;\n    return &ole_servers[current_oleserver - 1].server;\n}\n\n/******************************************************************************\n *\t\tOleRegisterServer\t[OLESVR.2]\n */\nOLESTATUS WINAPI OleRegisterServer16( LPCSTR name, LPOLESERVER16 serverStruct,\n                                      LHSERVER *hRet, HINSTANCE16 hServer,\n                                      OLE_SERVER_USE use )\n{\n    OLESERVER *s = register_oleserver(serverStruct);\n    OLESTATUS status = OleRegisterServer(name, s, hRet, HINSTANCE_32(hServer), use);\n    return status;\n}\n\n/******************************************************************************\n *\t\tOleRevokeServer\t[OLESVR.3]\n */\nOLESTATUS WINAPI OleRevokeServer16(LHSERVER hServer)\n{\n    return OleRevokeServer(hServer);\n}\n\n/******************************************************************************\n *\t\tOleBlockServer\t[OLESVR.4]\n */\nOLESTATUS WINAPI OleBlockServer16(LHSERVER hServer)\n{\n    return OleBlockServer(hServer);\n}\n\n/******************************************************************************\n *\t\tOleUnblockServer\t[OLESVR.5]\n */\nOLESTATUS WINAPI OleUnblockServer16(LHSERVER hServer, BOOL16 *block)\n{\n    BOOL block32 = *block;\n    OLESTATUS status = OleUnblockServer(hServer, &block32);\n    *block = block32;\n    return status;\n}\n/***********************************************************************\n *\t\tOleRegisterServerDoc\t[OLESVR.6]\n */\nOLESTATUS WINAPI OleRegisterServerDoc16( LHSERVER hServer, LPCSTR docname,\n                                         SEGPTR document,\n                                         LHSERVERDOC *hRet)\n{\n    LPOLESERVERDOC doc32 = register_oleserver_doc(document);\n    OLESTATUS result = OleRegisterServerDoc(hServer, docname, doc32, hRet);\n    return result;\n}\n\n/******************************************************************************\n *\t\tOleRevokeServerDoc\t[OLESVR.7]\n */\nOLESTATUS WINAPI OleRevokeServerDoc16(LHSERVERDOC hServerDoc)\n{\n    return OleRevokeServerDoc(hServerDoc);\n}\n\n/******************************************************************************\n *\t\tOleRenameServerDoc\t[OLESVR.8]\n *\n */\nOLESTATUS WINAPI OleRenameServerDoc16(LHSERVERDOC hDoc, LPCSTR newName)\n{\n    return OleRenameServerDoc(hDoc, newName);\n}\n\n/******************************************************************************\n *\t\tOleRevertServerDoc\t[OLESVR.9]\n *\n */\nOLESTATUS WINAPI OleRevertServerDoc16(LHSERVERDOC hDoc)\n{\n    return OleRevertServerDoc(hDoc);\n}\n\n/******************************************************************************\n *\t\tOleSavedServerDoc\t[OLESVR.10]\n *\n */\nOLESTATUS WINAPI OleSavedServerDoc16(LHSERVERDOC hDoc)\n{\n    return OleSavedServerDoc(hDoc);\n}\n\nOLESTATUS WINAPI OleRevokeObject16(LPOLECLIENT client)\n{\n    return OleRevokeObject(client);\n}\n\nDWORD WINAPI OleQueryServerVersion16()\n{\n    return OleQueryServerVersion();\n}\n\nINT16 CALLBACK ItemCallBack16(LPOLECLIENT client, OLE_NOTIFICATION16 notif, SEGPTR oleobject)\n{\n    static INT (CALLBACK *ItemCallBack)(LPOLECLIENT, OLE_NOTIFICATION, LPOLEOBJECT) = NULL;\n    if (!ItemCallBack) ItemCallBack = (INT (CALLBACK *)(LPOLECLIENT, OLE_NOTIFICATION, LPOLEOBJECT))GetProcAddress(GetModuleHandleA(\"olesvr32\"), \"ItemCallBack\");\n    // oleobject must have been created with GetObject\n    return ItemCallBack(client, notif, &find_oleobject(oleobject)->obj);\n}\n\nBOOL WINAPI DllEntryPoint16(DWORD reason, HINSTANCE16 inst, WORD ds, WORD heap, DWORD reserved1, WORD reserved2)\n{\n    // olesvr32 has a bug where it will fail to load again if it is unloaded so force it to stay loaded\n    LoadLibraryA(\"olesvr32.dll\");\n    return TRUE;\n}\n"
  },
  {
    "path": "olesvr/olesvr.def",
    "content": "; File generated automatically from ..\\olesvr\\olesvr.dll16.spec; do not edit!\n\nLIBRARY olesvr.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA \n"
  },
  {
    "path": "olesvr/olesvr.dll16.spec",
    "content": "#1 WEP\n2  pascal OleRegisterServer(str segptr ptr word word) OleRegisterServer16\n3  pascal OleRevokeServer(long) OleRevokeServer16\n4  pascal OleBlockServer(long) OleBlockServer16\n5  pascal OleUnblockServer(long ptr) OleUnblockServer16\n6  pascal OleRegisterServerDoc(long str segptr ptr) OleRegisterServerDoc16\n7  pascal OleRevokeServerDoc(long) OleRevokeServerDoc16\n8  pascal OleRenameServerDoc(long str) OleRenameServerDoc16\n9  pascal OleRevertServerDoc(long) OleRevertServerDoc16\n10 pascal OleSavedServerDoc(long) OleSavedServerDoc16\n11 pascal OleRevokeObject(ptr) OleRevokeObject16\n12 pascal OleQueryServerVersion() OleQueryServerVersion16\n21 stub SRVRWNDPROC\n22 stub DOCWNDPROC\n23 stub ITEMWNDPROC\n24 stub SENDDATAMSG\n25 stub FINDITEMWND\n26 pascal ItemCallBack(ptr word long) ItemCallBack16\n27 stub TERMINATECLIENTS\n28 stub TERMINATEDOCCLIENTS\n29 stub DELETECLIENTINFO\n30 stub SENDRENAMEMSG\n31 stub ENUMFORTERMINATE\n32 pascal -ret16 DllEntryPoint(long word word word long word) DllEntryPoint16\n"
  },
  {
    "path": "olesvr/olesvr.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"olesvr.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"olesvr.def\" />\n    <CustomBuild Include=\"olesvr.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" OLESVR &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" OLESVR &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"olesvr.dll16.obj\">\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n      </ExcludedFromBuild>\n    </Object>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{22C717E1-BDA2-4AB0-BF3F-FBBEB46681D4}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>olesvr</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"Shared\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <LinkIncremental>true</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <LinkIncremental>false</LinkIncremental>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;OLESVR_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>olesvr32.lib;ole32.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <ModuleDefinitionFile>olesvr.def</ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;OLESVR_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;OLESVR_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>olesvr32.lib;ole32.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <ModuleDefinitionFile>olesvr.def</ModuleDefinitionFile>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;OLESVR_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n    </Link>\n  </ItemDefinitionGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "olesvr/olesvr.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"ソース ファイル\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"ヘッダー ファイル\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"リソース ファイル\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"olesvr.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"olesvr.def\">\n      <Filter>ソース ファイル</Filter>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"olesvr.dll16.obj\">\n      <Filter>ソース ファイル</Filter>\n    </Object>\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"olesvr.dll16.spec\">\n      <Filter>ソース ファイル</Filter>\n    </CustomBuild>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "otvdm/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c)\nadd_executable(otvdm ${SOURCE})\ninclude_directories(../wine)\nadd_definitions(-D_X86_)\ntarget_link_libraries(otvdm libwine krnl386)\nset(DELAYED_LOADS \"/DELAYLOAD:krnl386.exe16 /DELAYLOAD:libwine.dll /DELAYLOAD:user32.dll /DELAYLOAD:kernel32.dll /DELAYLOAD:gdi32.dll /DELAYLOAD:shell32.dll /DELAYLOAD:comdlg32.dll /DELAYLOAD:ADVAPI32.dll\")\ntarget_compile_definitions(otvdm PRIVATE -D_CONSOLE)\nif (MSVC)\n    set_target_properties(otvdm PROPERTIES LINK_FLAGS ${DELAYED_LOADS})\nendif()\nadd_executable(otvdmw WIN32 ${SOURCE})\ntarget_link_libraries(otvdmw libwine krnl386)\nif (MSVC)\n    set_target_properties(otvdmw PROPERTIES LINK_FLAGS ${DELAYED_LOADS})\nendif()\n"
  },
  {
    "path": "otvdm/otvdm.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"winevdm.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"resource.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"otvdm.rc\" />\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{9C0EBE04-AE9A-40D5-ACFA-5F0854456DDA}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>otvdm</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <LibraryPath>$(OutDir);$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);</LibraryPath>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;_X86_;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>$(SolutionDir)wine;$(SolutionDir)wine\\wine;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <ExceptionHandling>Async</ExceptionHandling>\n      <MultiProcessorCompilation>false</MultiProcessorCompilation>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>libwine.lib;krnl386.lib;user.lib;ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>\n      <DelayLoadDLLs>krnl386.exe16;libwine.dll;user32.dll;kernel32.dll;gdi32.dll;shell32.dll;comdlg32.dll;</DelayLoadDLLs>\n    </Link>\n    <PostBuildEvent>\n      <Command>mkdir \"$(SolutionDir)$(Configuration)\\WINDOWS\\SYSTEM\" 2&gt; NUL || ver &gt; NUL</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;_X86_;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <AdditionalDependencies>libwine.lib;krnl386.lib;user.lib;ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <DelayLoadDLLs>krnl386.exe16;libwine.dll;user32.dll;kernel32.dll;gdi32.dll;shell32.dll;comdlg32.dll;</DelayLoadDLLs>\n    </Link>\n    <PostBuildEvent>\n      <Command>mkdir \"$(SolutionDir)$(Configuration)\\WINDOWS\\SYSTEM\" 2&gt; NUL || ver &gt; NUL</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "otvdm/otvdm.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"ソース ファイル\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"ヘッダー ファイル\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"リソース ファイル\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"winevdm.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"resource.h\">\n      <Filter>ヘッダー ファイル</Filter>\n    </ClInclude>\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"otvdm.rc\">\n      <Filter>リソース ファイル</Filter>\n    </ResourceCompile>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "otvdm/otvdmw.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"winevdm.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"resource.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"otvdm.rc\" />\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{73E019BF-2393-4BB3-90CA-B5B5749E4B69}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>otvdmw</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <LibraryPath>$(OutDir);$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);</LibraryPath>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WINDOW;WIN32;_DEBUG;_LIB;_X86_;SUPPORT_DOS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>$(SolutionDir)wine;$(SolutionDir)wine\\wine;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n      <ExceptionHandling>Async</ExceptionHandling>\n      <MultiProcessorCompilation>false</MultiProcessorCompilation>\n      <AssemblerListingLocation>w$(IntDir)</AssemblerListingLocation>\n      <ObjectFileName>w$(IntDir)</ObjectFileName>\n      <ProgramDataBaseFileName>w$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>\n      <XMLDocumentationFileName>w$(IntDir)</XMLDocumentationFileName>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>libwine.lib;krnl386.lib;user.lib;ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>\n      <DelayLoadDLLs>krnl386.exe16;libwine.dll;user32.dll;kernel32.dll;gdi32.dll;shell32.dll;comdlg32.dll;</DelayLoadDLLs>\n    </Link>\n    <PostBuildEvent>\n      <Command>mkdir \"$(SolutionDir)$(Configuration)\\WINDOWS\\SYSTEM\" 2&gt; NUL || ver &gt; NUL</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WINDOW;WIN32;NDEBUG;_LIB;_X86_;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n      <AssemblerListingLocation>w$(IntDir)</AssemblerListingLocation>\n      <ObjectFileName>w$(IntDir)</ObjectFileName>\n      <ProgramDataBaseFileName>w$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>\n      <XMLDocumentationFileName>w$(IntDir)</XMLDocumentationFileName>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <AdditionalDependencies>libwine.lib;krnl386.lib;user.lib;ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <DelayLoadDLLs>krnl386.exe16;libwine.dll;user32.dll;kernel32.dll;gdi32.dll;shell32.dll;comdlg32.dll;</DelayLoadDLLs>\n    </Link>\n    <PostBuildEvent>\n      <Command>mkdir \"$(SolutionDir)$(Configuration)\\WINDOWS\\SYSTEM\" 2&gt; NUL || ver &gt; NUL</Command>\n    </PostBuildEvent>\n  </ItemDefinitionGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "otvdm/otvdmw.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"ソース ファイル\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"ヘッダー ファイル\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"リソース ファイル\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"winevdm.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"resource.h\">\n      <Filter>ヘッダー ファイル</Filter>\n    </ClInclude>\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"otvdm.rc\">\n      <Filter>リソース ファイル</Filter>\n    </ResourceCompile>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "otvdm/resource.h",
    "content": "#define IDS_MANIFEST                   101\n"
  },
  {
    "path": "otvdm/visualstyle.manifest",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersion=\"1.0\">\n<assemblyIdentity\n    version=\"1.0.0.0\"\n    processorArchitecture=\"X86\"\n    name=\"CompanyName.ProductName.YourApp\"\n    type=\"win32\"\n/>\n<description>a</description>\n<dependency>\n    <dependentAssembly>\n        <assemblyIdentity\n            type=\"win32\"\n            name=\"Microsoft.Windows.Common-Controls\"\n            version=\"6.0.0.0\"\n            processorArchitecture=\"X86\"\n            publicKeyToken=\"6595b64144ccf1df\"\n            language=\"*\"\n        />\n    </dependentAssembly>\n</dependency>\n</assembly>\n\n"
  },
  {
    "path": "otvdm/winevdm.c",
    "content": "/*\n * Wine virtual DOS machine\n *\n * Copyright 2003 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#include \"config.h\"\n#define CP_UNIXCP CP_ACP\n#include \"wine/port.h\"\n\n#include <stdarg.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <stddef.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/winbase16.h\"\n#include \"wine/unicode.h\"\n#include \"wine/debug.h\"\n#include \"resource.h\"\n#include \"windows.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(winevdm);\n\nextern void __wine_load_dos_exe( LPCSTR filename, LPCSTR cmdline );\n\n/***********************************************************************\n *           build_command_line\n *\n * Build the command line of a process from the argv array.\n * Copied from ENV_BuildCommandLine.\n */\nstatic char *build_command_line( char **argv )\n{\n    int len;\n    char *p, **arg, *cmd_line;\n\n    if (!argv[0])\n        return \"\";\n    len = 0;\n    for (arg = argv; *arg; arg++)\n    {\n        BOOL has_space;\n        int bcount;\n        char* a;\n\n        has_space=FALSE;\n        bcount=0;\n        a=*arg;\n        if( !*a ) has_space=TRUE;\n        while (*a!='\\0') {\n            if (*a=='\\\\') {\n                bcount++;\n            } else {\n                if (*a==' ' || *a=='\\t') {\n                    has_space=TRUE;\n                } else if (*a=='\"') {\n                    /* doubling of '\\' preceding a '\"',\n                     * plus escaping of said '\"'\n                     */\n                    len+=2*bcount+1;\n                }\n                bcount=0;\n            }\n            a++;\n        }\n        len+=(a-*arg)+1 /* for the separating space */;\n        if (has_space)\n            len+=2; /* for the quotes */\n    }\n\n    if (!(cmd_line = HeapAlloc( GetProcessHeap(), 0, len ? len + 1 : 2 ))) \n        return NULL;\n\n    p = cmd_line;\n    *p++ = (len - 1 < 256) ? len - 1 /* remove last space */ : 255;\n    for (arg = argv; *arg; arg++)\n    {\n        BOOL has_space,has_quote;\n        char* a;\n\n        /* Check for quotes and spaces in this argument */\n        has_space=has_quote=FALSE;\n        a=*arg;\n        if( !*a ) has_space=TRUE;\n        while (*a!='\\0') {\n            if (*a==' ' || *a=='\\t') {\n                has_space=TRUE;\n                if (has_quote)\n                    break;\n            } else if (*a=='\"') {\n                has_quote=TRUE;\n                if (has_space)\n                    break;\n            }\n            a++;\n        }\n\n        /* Now transfer it to the command line */\n        if (has_space)\n            *p++='\"';\n        if (has_quote) {\n            int bcount;\n\n            bcount=0;\n            a=*arg;\n            while (*a!='\\0') {\n                if (*a=='\\\\') {\n                    *p++=*a;\n                    bcount++;\n                } else {\n                    if (*a=='\"') {\n                        int i;\n\n                        /* Double all the '\\\\' preceding this '\"', plus one */\n                        for (i=0;i<=bcount;i++)\n                            *p++='\\\\';\n                        *p++='\"';\n                    } else {\n                        *p++=*a;\n                    }\n                    bcount=0;\n                }\n                a++;\n            }\n        } else {\n            strcpy(p,*arg);\n            p+=strlen(*arg);\n        }\n        if (has_space)\n            *p++='\"';\n        *p++=' ';\n    }\n    if (len) p--;  /* remove last space */\n    *p = '\\0';\n    return cmd_line;\n}\n\n/***********************************************************************\n *           usage\n */\nstatic void usage(void)\n{\n    WINE_MESSAGE( \"Usage: winevdm.exe [--app-name app.exe] command line\\n\\n\" );\n    ExitProcess(1);\n}\n\n#include <winternl.h>\n\ntypedef struct _CURDIR\n{\n    UNICODE_STRING DosPath;\n    PVOID Handle;\n} CURDIR, *PCURDIR;\n\ntypedef struct RTL_DRIVE_LETTER_CURDIR\n{\n    USHORT              Flags;\n    USHORT              Length;\n    ULONG               TimeStamp;\n    UNICODE_STRING      DosPath;\n} RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;\n\ntypedef struct tagRTL_BITMAP {\n    ULONG  SizeOfBitMap; /* Number of bits in the bitmap */\n    PULONG Buffer; /* Bitmap data, assumed sized to a DWORD boundary */\n} RTL_BITMAP, *PRTL_BITMAP;\n\ntypedef const RTL_BITMAP *PCRTL_BITMAP;\n\ntypedef struct tagRTL_BITMAP_RUN {\n    ULONG StartingIndex; /* Bit position at which run starts */\n    ULONG NumberOfBits;  /* Size of the run in bits */\n} RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;\n\ntypedef const RTL_BITMAP_RUN *PCRTL_BITMAP_RUN;\n\n/* value for Flags field (FIXME: not the correct name) */\n#define PROCESS_PARAMS_FLAG_NORMALIZED 1\n\ntypedef struct _GDI_TEB_BATCH\n{\n    ULONG  Offset;\n    HANDLE HDC;\n    ULONG  Buffer[0x136];\n} GDI_TEB_BATCH;\n\ntypedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME\n{\n    struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME *Previous;\n    struct _ACTIVATION_CONTEXT                 *ActivationContext;\n    ULONG                                       Flags;\n} RTL_ACTIVATION_CONTEXT_STACK_FRAME, *PRTL_ACTIVATION_CONTEXT_STACK_FRAME;\n\ntypedef struct _ACTIVATION_CONTEXT_STACK\n{\n    ULONG                               Flags;\n    ULONG                               NextCookieSequenceNumber;\n    RTL_ACTIVATION_CONTEXT_STACK_FRAME *ActiveFrame;\n    LIST_ENTRY                          FrameListCache;\n} ACTIVATION_CONTEXT_STACK, *PACTIVATION_CONTEXT_STACK;\n\n/***********************************************************************\n* PEB data structure\n*/\ntypedef struct \n{                                                                 /* win32/win64 */\n    BOOLEAN                      InheritedAddressSpace;             /* 000/000 */\n    BOOLEAN                      ReadImageFileExecOptions;          /* 001/001 */\n    BOOLEAN                      BeingDebugged;                     /* 002/002 */\n    BOOLEAN                      SpareBool;                         /* 003/003 */\n    HANDLE                       Mutant;                            /* 004/008 */\n    HMODULE                      ImageBaseAddress;                  /* 008/010 */\n    PPEB_LDR_DATA                LdrData;                           /* 00c/018 */\n    RTL_USER_PROCESS_PARAMETERS *ProcessParameters;                 /* 010/020 */\n    PVOID                        SubSystemData;                     /* 014/028 */\n    HANDLE                       ProcessHeap;                       /* 018/030 */\n    PRTL_CRITICAL_SECTION        FastPebLock;                       /* 01c/038 */\n    PVOID /*PPEBLOCKROUTINE*/    FastPebLockRoutine;                /* 020/040 */\n    PVOID /*PPEBLOCKROUTINE*/    FastPebUnlockRoutine;              /* 024/048 */\n    ULONG                        EnvironmentUpdateCount;            /* 028/050 */\n    PVOID                        KernelCallbackTable;               /* 02c/058 */\n    ULONG                        Reserved[2];                       /* 030/060 */\n    PVOID /*PPEB_FREE_BLOCK*/    FreeList;                          /* 038/068 */\n    ULONG                        TlsExpansionCounter;               /* 03c/070 */\n    PRTL_BITMAP                  TlsBitmap;                         /* 040/078 */\n    ULONG                        TlsBitmapBits[2];                  /* 044/080 */\n    PVOID                        ReadOnlySharedMemoryBase;          /* 04c/088 */\n    PVOID                        ReadOnlySharedMemoryHeap;          /* 050/090 */\n    PVOID                       *ReadOnlyStaticServerData;          /* 054/098 */\n    PVOID                        AnsiCodePageData;                  /* 058/0a0 */\n    PVOID                        OemCodePageData;                   /* 05c/0a8 */\n    PVOID                        UnicodeCaseTableData;              /* 060/0b0 */\n    ULONG                        NumberOfProcessors;                /* 064/0b8 */\n    ULONG                        NtGlobalFlag;                      /* 068/0bc */\n    LARGE_INTEGER                CriticalSectionTimeout;            /* 070/0c0 */\n    SIZE_T                       HeapSegmentReserve;                /* 078/0c8 */\n    SIZE_T                       HeapSegmentCommit;                 /* 07c/0d0 */\n    SIZE_T                       HeapDeCommitTotalFreeThreshold;    /* 080/0d8 */\n    SIZE_T                       HeapDeCommitFreeBlockThreshold;    /* 084/0e0 */\n    ULONG                        NumberOfHeaps;                     /* 088/0e8 */\n    ULONG                        MaximumNumberOfHeaps;              /* 08c/0ec */\n    PVOID                       *ProcessHeaps;                      /* 090/0f0 */\n    PVOID                        GdiSharedHandleTable;              /* 094/0f8 */\n    PVOID                        ProcessStarterHelper;              /* 098/100 */\n    PVOID                        GdiDCAttributeList;                /* 09c/108 */\n    PVOID                        LoaderLock;                        /* 0a0/110 */\n    ULONG                        OSMajorVersion;                    /* 0a4/118 */\n    ULONG                        OSMinorVersion;                    /* 0a8/11c */\n    ULONG                        OSBuildNumber;                     /* 0ac/120 */\n    ULONG                        OSPlatformId;                      /* 0b0/124 */\n    ULONG                        ImageSubSystem;                    /* 0b4/128 */\n    ULONG                        ImageSubSystemMajorVersion;        /* 0b8/12c */\n    ULONG                        ImageSubSystemMinorVersion;        /* 0bc/130 */\n    ULONG                        ImageProcessAffinityMask;          /* 0c0/134 */\n    HANDLE                       GdiHandleBuffer[28];               /* 0c4/138 */\n    ULONG                        unknown[6];                        /* 134/218 */\n    PVOID                        PostProcessInitRoutine;            /* 14c/230 */\n    PRTL_BITMAP                  TlsExpansionBitmap;                /* 150/238 */\n    ULONG                        TlsExpansionBitmapBits[32];        /* 154/240 */\n    ULONG                        SessionId;                         /* 1d4/2c0 */\n    ULARGE_INTEGER               AppCompatFlags;                    /* 1d8/2c8 */\n    ULARGE_INTEGER               AppCompatFlagsUser;                /* 1e0/2d0 */\n    PVOID                        ShimData;                          /* 1e8/2d8 */\n    PVOID                        AppCompatInfo;                     /* 1ec/2e0 */\n    UNICODE_STRING               CSDVersion;                        /* 1f0/2e8 */\n    PVOID                        ActivationContextData;             /* 1f8/2f8 */\n    PVOID                        ProcessAssemblyStorageMap;         /* 1fc/300 */\n    PVOID                        SystemDefaultActivationData;       /* 200/308 */\n    PVOID                        SystemAssemblyStorageMap;          /* 204/310 */\n    SIZE_T                       MinimumStackCommit;                /* 208/318 */\n    PVOID                       *FlsCallback;                       /* 20c/320 */\n    LIST_ENTRY                   FlsListHead;                       /* 210/328 */\n    PRTL_BITMAP                  FlsBitmap;                         /* 218/338 */\n    ULONG                        FlsBitmapBits[4];                  /* 21c/340 */\n} PEB2, *PPEB2;\n/***********************************************************************\n* TEB data structure\n*/\ntypedef struct\n{                                                                 /* win32/win64 */\n    NT_TIB                       Tib;                               /* 000/0000 */\n    PVOID                        EnvironmentPointer;                /* 01c/0038 */\n    HANDLE                    ClientId1, ClientId2;                          /* 020/0040 */\n    PVOID                        ActiveRpcHandle;                   /* 028/0050 */\n    PVOID                        ThreadLocalStoragePointer;         /* 02c/0058 */\n    PPEB2                         Peb;                               /* 030/0060 */\n} TEB2, *PTEB2;\n\n//===reactos/sdk/include/ndk/pstypes.h==\n// PEB.AppCompatFlags\n// Tag FLAG_MASK_KERNEL\n//\ntypedef enum _APPCOMPAT_FLAGS\n{\n    GetShortPathNameNT4 = 0x1,\n    GetDiskFreeSpace2GB = 0x8,\n    FTMFromCurrentAPI = 0x20,\n    DisallowCOMBindingNotifications = 0x40,\n    Ole32ValidatePointers = 0x80,\n    DisableCicero = 0x100,\n    Ole32EnableAsyncDocFile = 0x200,\n    EnableLegacyExceptionHandlinginOLE = 0x400,\n    DisableAdvanceRPCClientHardening = 0x800,\n    DisableMaybeNULLSizeisConsistencycheck = 0x1000,\n    DisableAdvancedRPCrangeCheck = 0x4000,\n    EnableLegacyExceptionHandlingInRPC = 0x8000,\n    EnableLegacyNTFSFlagsForDocfileOpens = 0x10000,\n    DisableNDRIIDConsistencyCheck = 0x20000,\n    UserDisableForwarderPatch = 0x40000,\n    DisableNewWMPAINTDispatchInOLE = 0x100000,\n    Unknown0x00400000 = 0x00400000,\n    DoNotAddToCache = 0x80000000,\n} APPCOMPAT_FLAGS;\n\n\n//\n// PEB.AppCompatFlagsUser.LowPart\n// Tag FLAG_MASK_USER\n//\ntypedef enum _APPCOMPAT_USERFLAGS\n{\n    DisableAnimation = 0x1,\n    DisableKeyboardCues = 0x2,\n    No50StylebitsInSetWindowLong = 0x4,\n    DisableDrawPatternRect = 0x8,\n    MSShellDialog = 0x10,\n    NoDDETerminateDuringDestroy = 0x20,\n    GiveupForeground = 0x40,\n    AlwaysActiveMenus = 0x80,\n    NoMouseHideInEdit = 0x100,\n    NoGdiBatching = 0x200,\n    FontSubstitution = 0x400,\n    No50StylebitsInCreateWindow = 0x800,\n    NoCustomPaperSizes = 0x1000,\n    AllTheDdeHacks = 0x2000,\n    UseDefaultCharset = 0x4000,\n    NoCharDeadKey = 0x8000,\n    NoTryExceptForWindowProc = 0x10000,\n    NoInitInsertReplaceFlags = 0x20000,\n    NoDdeSync = 0x40000,\n    NoGhost = 0x80000,\n    NoDdeAsyncReg = 0x100000,\n    StrictLLHook = 0x200000,\n    NoShadow = 0x400000,\n    NoTimerCallbackProtection = 0x1000000,\n    HighDpiAware = 0x2000000,\n    OpenGLEmfAware = 0x4000000,\n    EnableTransparantBltMirror = 0x8000000,\n    NoPaddedBorder = 0x10000000,\n    ForceLegacyResizeCM = 0x20000000,\n    HardwareAudioMixer = 0x40000000,\n    DisableSWCursorOnMoveSize = 0x80000000,\n#if 0\n    DisableWindowArrangement = 0x100000000,\n    ReorderWaveForCommunications = 0x200000000,\n    NoGdiHwAcceleration = 0x400000000,\n#endif\n} APPCOMPAT_USERFLAGS;\n\n//\n// PEB.AppCompatFlagsUser.HighPart\n// Tag FLAG_MASK_USER\n//\ntypedef enum _APPCOMPAT_USERFLAGS_HIGHPART\n{\n    DisableWindowArrangement = 0x1,\n    ReorderWaveForCommunications = 0x2,\n    NoGdiHwAcceleration = 0x4,\n} APPCOMPAT_USERFLAGS_HIGHPART;\n//===reactos/sdk/include/ndk/pstypes.h==\n\nvoid set_dll_path()\n{\n    WCHAR mod_path[MAX_PATH];\n    DWORD attr;\n    GetModuleFileNameW(NULL, mod_path, _countof(mod_path));\n    LPWSTR last = wcsrchr(mod_path, L'\\\\');\n    last[0] = 0;\n    LPCWSTR dir = L\"\\\\dll\";\n    if (wcslen(mod_path) + wcslen(dir) + 1 < MAX_PATH)\n    {\n        memcpy(last, dir, (wcslen(dir) + 1) * sizeof(*dir));\n        attr = GetFileAttributesW(mod_path);\n        if (attr != INVALID_FILE_ATTRIBUTES && attr & FILE_ATTRIBUTE_DIRECTORY)\n        {\n            WINE_TRACE(\"%s\\n\", wine_dbgstr_wn(mod_path, -1));\n            SetDllDirectoryW(mod_path);\n            return;\n        }\n    }\n    last[0] = 0;\n    WINE_TRACE(\"%s\\n\", wine_dbgstr_wn(mod_path, -1));\n    SetDllDirectoryW(mod_path);\n}\n\nstatic BOOL set_peb_compatible_flag()\n{\n    BOOL success = TRUE;\n    TEB2 *teb = (TEB2*)NtCurrentTeb();\n    APPCOMPAT_FLAGS flags1 = (APPCOMPAT_FLAGS)teb->Peb->AppCompatFlags.LowPart;\n    APPCOMPAT_USERFLAGS flags2 = (APPCOMPAT_USERFLAGS)teb->Peb->AppCompatFlagsUser.LowPart;\n    APPCOMPAT_USERFLAGS_HIGHPART flags3 = (APPCOMPAT_USERFLAGS_HIGHPART)teb->Peb->AppCompatFlagsUser.HighPart;\n    APPCOMPAT_FLAGS f = NoPaddedBorder | NoGhost;\n    HMODULE user32 = GetModuleHandleA(\"user32.dll\");\n    set_dll_path();\n    /* is old windows? */\n    if (GetProcAddress(GetModuleHandleA(\"kernel32\"), \"GetFileInformationByHandleEx\") == NULL)\n        return TRUE;\n    if ((flags2 & f) != f && user32 != NULL)\n    {\n        /* Lazy loading currently only works with MSVC. */\n#ifdef _MSC_VER\n        WINE_ERR(\"user32.dll has already been loaded. (Anti-virus software may be the cause.)\\n\");\n#else\n        WINE_ERR(\"user32.dll has already been loaded.\\n\");\n#endif\n        WINE_ERR(\"Some compatibility flags can not be applied.\\n\");\n        success = FALSE;\n    }\n    teb->Peb->AppCompatFlagsUser.LowPart |= f;\n    //teb->Peb->AppCompatFlagsUser.LowPart = -1;\n    //teb->Peb->AppCompatFlagsUser.HighPart = -1;\n    //teb->Peb->AppCompatFlags.LowPart = -1;\n    return success;\n}\n\nstatic BOOL fix_compatible(void)\n{\n    WCHAR image_path[MAX_PATH];\n    LPWSTR arg = GetCommandLineW();\n    DWORD pid = GetCurrentProcessId();\n    LPWSTR compat_arg = L\"--fix-compat-mode \";\n    PROCESS_BASIC_INFORMATION pbi;\n    PWSTR arg2;\n    PROCESS_INFORMATION proc_inf;\n    STARTUPINFOW start_inf = { sizeof(STARTUPINFOW) };\n    GetModuleFileNameW(NULL, image_path, sizeof(image_path));\n#ifdef SET_COMPAT_LAYER\n    {\n        HKEY hkey;\n        LSTATUS stat = RegOpenKeyW(HKEY_CURRENT_USER, L\"Software\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\AppCompatFlags\\\\Layers\", &hkey);\n        if (stat)\n            return FALSE;\n        LPWSTR reg_value = L\"VistaRTM\";// L\"~ Win7RTM\";\n        stat = RegSetValueExW(hkey, image_path, 0, REG_SZ, reg_value, strlenW(reg_value) * sizeof(WCHAR));\n        if (stat)\n            return FALSE;\n        RegCloseKey(hkey);\n    }\n#endif\n    arg2 = (PWSTR)malloc(sizeof(WCHAR) * (11 + strlenW(arg) + strlenW(compat_arg)));\n    sprintfW(arg2, L\"%s%d %s\", compat_arg, pid, arg);\n    if (!CreateProcessW(image_path, arg2, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &start_inf, &proc_inf))\n    {\n        free(arg2);\n        return FALSE;\n    }\n    free(arg2);\n    WINE_ERR(\"child pid = %d\\n\", proc_inf.dwProcessId);\n    if (NT_SUCCESS(NtQueryInformationProcess(proc_inf.hProcess, ProcessBasicInformation, &pbi, sizeof(pbi), NULL)))\n    {\n        ULARGE_INTEGER AppCompatFlagsUser;\n        if (ReadProcessMemory(proc_inf.hProcess, (ULONG_PTR)pbi.PebBaseAddress + offsetof(PEB2, AppCompatFlagsUser), &AppCompatFlagsUser, sizeof(AppCompatFlagsUser), NULL))\n        {\n            AppCompatFlagsUser.LowPart |= NoPaddedBorder;\n            WriteProcessMemory(proc_inf.hProcess, (ULONG_PTR)pbi.PebBaseAddress + offsetof(PEB2, AppCompatFlagsUser), &AppCompatFlagsUser, sizeof(AppCompatFlagsUser), NULL);\n        }\n    }\n    ResumeThread(proc_inf.hThread);\n    WaitForSingleObject(proc_inf.hProcess, INFINITE);\n    CloseHandle(proc_inf.hProcess);\n    CloseHandle(proc_inf.hThread);\n    return TRUE;\n}\n\nstatic BOOL is_win32_exe(LPCSTR appname)\n{\n    HANDLE file = CreateFileA(appname, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);\n    IMAGE_DOS_HEADER header;\n    DWORD read = 0;\n    ReadFile(file, &header, sizeof(header), &read, NULL);\n    if (read == sizeof(header) && header.e_lfanew >= sizeof(header))\n    {\n        SetFilePointer(file, header.e_lfanew, 0, FILE_BEGIN);\n        WORD magic;\n        ReadFile(file, &magic, sizeof(WORD), &read, NULL);\n        if (read == sizeof(WORD))\n        {\n            if (magic == IMAGE_NT_SIGNATURE)\n            {\n                CloseHandle(file);\n                return TRUE;\n            }\n        }\n    }\n    CloseHandle(file);\n    return FALSE;\n}\nstatic void exec16(LOADPARAMS16 params, LPCSTR appname, LPCSTR cmdline, BOOL exit)\n{\n    char *p;\n    HINSTANCE16 instance;\n    char shortpath[MAX_PATH];\n    GetShortPathNameA(appname, shortpath, MAX_PATH);\n    appname = shortpath;\n\n    if (is_win32_exe(appname))\n    {\n        WINE_ERR(\"%s is a win32 executable file!\\n\", appname);\n    }\n    if ((instance = LoadModule16(appname, &params)) < 32)\n    {\n        if (instance == 11)\n        {\n            __wine_load_dos_exe(appname, cmdline + 1);\n            /* if we get back here it failed */\n            instance = GetLastError();\n        }\n\n        WINE_MESSAGE(\"winevdm: can't exec '%s': \", appname);\n        switch (instance)\n        {\n        case  2: WINE_MESSAGE(\"file not found\\n\"); break;\n        case 11: WINE_MESSAGE(\"invalid program file\\n\"); break;\n        default: WINE_MESSAGE(\"error=%d\\n\", instance); break;\n        }\n        if (exit)\n            ExitProcess(instance);\n    }\n\n}\n\n#include <pshpack1.h>\n#define SHARED_WOW_CURDIR_SUPPORTED 1\ntypedef struct {\n    WORD header;\n    WORD showCmd;\n    CHAR appname[MAX_PATH];\n    CHAR cmdline[MAX_PATH];\n    CHAR curdir[MAX_PATH];\n    /* environment variables... */\n} shared_wow_exec;\n#include <poppack.h>\nDWORD exec16_thread(LPVOID args)\n{\n    shared_wow_exec exec_data = *(shared_wow_exec*)args;\n    HeapFree(GetProcessHeap(), 0, args);\n    LOADPARAMS16 params;\n    WORD showCmd[2];\n    params.hEnvironment = 0;\n    params.reserved = 0;\n    if (exec_data.header == SHARED_WOW_CURDIR_SUPPORTED)\n    {\n        params.hEnvironment = 0x0bef;\n        params.reserved = &exec_data.curdir;\n    }\n    showCmd[0] = 2;\n    showCmd[1] = SW_SHOW;\n\n    params.cmdLine = MapLS(exec_data.cmdline);\n    params.showCmd = MapLS(showCmd);\n    exec16(params, exec_data.appname, exec_data.cmdline, FALSE);\n    return 0;\n}\n\n/* Returns TRUE if the pipe is pending. */\nstatic BOOL connect_new_client(HANDLE handle, LPOVERLAPPED lpov)\n{\n    DWORD err;\n    if (ConnectNamedPipe(handle, lpov))\n    {\n        return FALSE;\n    }\n    err = GetLastError();\n    if (err == ERROR_IO_PENDING)\n    {\n        return TRUE;\n    }\n    if (err == ERROR_PIPE_CONNECTED)\n    {\n        SetEvent(lpov->hEvent);\n    }\n    return FALSE;\n}\n\n/* \\\\.\\pipe\\otvdmpipe */\nHANDLE run_shared_wow_server()\n{\n    OVERLAPPED overlapped = { 0 };\n    BOOL pending;\n    HANDLE server = CreateNamedPipeA(\"\\\\\\\\.\\\\pipe\\\\otvdmpipe\", PIPE_ACCESS_INBOUND | PIPE_ACCESS_OUTBOUND | FILE_FLAG_OVERLAPPED, PIPE_TYPE_BYTE | PIPE_WAIT, 10, 0, 0, 1000, NULL);\n    HANDLE event = CreateEventA(NULL, TRUE, TRUE, NULL);\n    overlapped.hEvent = event;\n    pending = connect_new_client(server, &overlapped);\n    while (TRUE)\n    {\n        HANDLE handles[1] = { overlapped.hEvent };\n        MSG msg;\n        DWORD ret = MsgWaitForMultipleObjects(1, handles, FALSE, INFINITE, QS_ALLINPUT);\n\n        if (ret == WAIT_OBJECT_0 + 1 && PeekMessageA(&msg, NULL, 0, 0, TRUE))\n        {\n            TranslateMessage(&msg);\n            DispatchMessageA(&msg);\n        }\n        else if (pending)\n        {\n            DWORD read;\n            shared_wow_exec exec_data = { 0 };\n            BOOL r = ReadFile(server, &exec_data, sizeof(exec_data), &read, NULL);\n            DisconnectNamedPipe(server);\n            if (r)\n            {\n                WINE_TRACE(\"%s %s\\n\", exec_data.appname, exec_data.cmdline);\n                LPVOID data = HeapAlloc(GetProcessHeap(), 0, sizeof(exec_data));\n                memcpy(data, &exec_data, sizeof(exec_data));\n                /* LoadModule16 blocks thread */\n                HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)exec16_thread, data, 0, NULL);\n                CloseHandle(hThread);\n            }\n            pending = connect_new_client(server, &overlapped);\n        }\n    }\n}\n\nBOOL run_shared_wow(LPCSTR appname, WORD showCmd, LPCSTR cmdline)\n{\n    ULONG pid;\n    HANDLE client = CreateFileA(\"\\\\\\\\.\\\\pipe\\\\otvdmpipe\", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);\n    BOOL (WINAPI *pGetNamedPipeServerProcessId)(HANDLE, PULONG) = (BOOL(WINAPI *)(HANDLE, PULONG))GetProcAddress(GetModuleHandleA(\"kernel32\"), \"GetNamedPipeServerProcessId\");\n    if (client == INVALID_HANDLE_VALUE)\n    {\n        return FALSE;\n    }\n    if (pGetNamedPipeServerProcessId && pGetNamedPipeServerProcessId(client, &pid))\n    {\n        AllowSetForegroundWindow(pid);\n    }\n    shared_wow_exec exec_data = { 0 };\n    exec_data.header = SHARED_WOW_CURDIR_SUPPORTED;\n    exec_data.showCmd = showCmd;\n    lstrcpynA(exec_data.cmdline, cmdline, MAX_PATH);\n    lstrcpynA(exec_data.appname, appname, MAX_PATH);\n    GetCurrentDirectoryA(MAX_PATH, exec_data.curdir);\n    WriteFile(client, &exec_data, sizeof(exec_data), NULL, NULL);\n    CloseHandle(client);\n    return TRUE;\n\n}\n\n/***********************************************************************\n *           main\n */\n#ifdef _CONSOLE\nint main( int argc, char *argv[] )\n#else\nint entry_point( int argc, char *argv[] )\n#endif\n{\n    DWORD count;\n    LOADPARAMS16 params;\n    WORD showCmd[2];\n    char buffer[MAX_PATH];\n    STARTUPINFOA info;\n    char *cmdline, *appname, **first_arg;\n    DWORD pid;\n    const char *cmdline1 = strstr(argv[0], \"  --ntvdm64:\");\n    char **argv_copy = HeapAlloc(GetProcessHeap(), 0, sizeof(*argv) * (argc + 1));\n    BOOL compat_success = set_peb_compatible_flag();\n    BOOL use_shared_wow_server;\n#ifdef __CI_VERSION\n#define STR(x) #x\n#define STRSTR(x) STR(x)\n    fprintf(stderr, \"version: %s\\n\", STRSTR(__CI_VERSION));\n#undef STR\n#undef STRSTR\n#endif\n    memcpy(argv_copy, argv, argc * sizeof(*argv));\n    argv = argv_copy;\n    /*\n    NtVdm64 command line handling is buggy.\n    Can not be handled if the extension is omitted\n    CommandLine = \"%c\"\n\n    >A.EXE\n    GetCommandLineA()=\"A.EXE \"\n    >\"A.EXE\"\n    GetCommandLineA()=\"\\\"A.EXE\\\" \"\n    >A.EXE a b c d\n    GetCommandLineA()=\"A.EXE a b c d\"\n\n    >A\n    GetCommandLineA()=\"A \"\n    >\"A\"\n    GetCommandLineA()=\"\\\"A \\\"\"\n                          ^????????????\n    >A a b c d\n    GetCommandLineA()=\"A a b c d\"\n    >\"A\" a b c d\n    GetCommandLineA()=\"\\\"A \\\"  a b c d\"\n\n\n    CommandLine = \"aaaa%cbbbb\"\n\n    >A.EXE\n    GetCommandLineA()=\"A.EXE aaaabbbb\"\n    >A.EXE 1 2 3 4\n    GetCommandLineA()=\"A.EXE aaaa1 2 3 4bbbb\"\n    >\"A.EXE\"\n    GetCommandLineA()=\"\\\"A\\\" aaaabbbb\"\n    >\"A.EXE\" 1 2 3 4\n    GetCommandLineA()=\"\\\"A.EXE\\\" aaaa1 2 3 4bbbb\"\n\n    >A\n    GetCommandLineA()=\"A aaaabbbb\"\n    >A 1 2 3 4\n    GetCommandLineA()=\"A aaaa1 2 3 4bbbb\"\n    >\"A\"\n    GetCommandLineA()=\"\\\"A aaaa\\\"bbbb\"\n    >\"A\" 1 2 3 4\n    GetCommandLineA()=\"\\\"A aaaa\\\"  1 2 3 4bbbb~\"\n    Workaround\n    \" --ntvdm64: \"%m\" --ntvdm64-args: %c\"\n\n    if argv[0] contains \" --ntvdm64:\"\n       \"\\\"A  --ntvdm64: \\\"full-dos-path\\A.EXE\\\" --ntvdm64-args \\\"  1 2 3 4\"\n    =>\"\\\"A\\\"            \\\"full-dos-path\\A.EXE\\\" --ntvdm64-args    1 2 3 4\"\n    */\n    if (!strcmp(argv[0], \"--fix-compat-mode\"))\n    {\n        pid = atoi(argv[1]);\n        WINE_ERR(\"parent pid = %d\\n\", pid);\n        argv += 2;\n        argc -= 2;\n        compat_success = TRUE;\n    }\n    //compatible mode\n    else if ((!compat_success\n\n#ifdef FIX_COMPAT_MODE\n            || 1\n#endif\n            )\n#ifdef SET_COMPAT_LAYER\n        && getenv(\"__COMPAT_LAYER\") == NULL\n#endif\n        )\n    {\n#ifdef SET_COMPAT_LAYER\n        WINE_ERR(\"Set compatible mode to VistaRTM\\n\");\n#else\n        WINE_ERR(\"Spawn a child process to apply compatible flags.\\n\");\n#endif\n        if (fix_compatible())\n        {\n            return 0;\n        }\n        else\n        {\n            WINE_ERR(\"failed\");\n        }\n    }\n\n    if (cmdline1)\n    {\n        LPWSTR raw = GetCommandLineW();\n        if (raw[0] == L'\"')\n        {\n            LPWSTR new_cmdline = HeapAlloc(GetProcessHeap(), 0, (wcslen(raw) + 1) * sizeof(WCHAR));\n            memcpy(new_cmdline, raw, (wcslen(raw) + 1) * sizeof(WCHAR));\n            LPWSTR magic = wcsstr(new_cmdline, L\"  --ntvdm64:\");\n            if (magic)\n            {\n                magic[0] = L'\\\"';\n            }\n            LPWSTR magic2 = wcsstr(new_cmdline, L\"--ntvdm64-args: \\\"\");\n            if (magic2)\n            {\n                *wcschr(magic2, L'\\\"') = L' ';\n            }\n            LPWSTR *argvw = CommandLineToArgvW(new_cmdline, &argc);\n            HeapFree(GetProcessHeap(), 0, argv_copy);\n            argv_copy = HeapAlloc(GetProcessHeap(), 0, sizeof(*argv) * (argc + 1));\n            for (int i = 0; i < argc; i++)\n            {\n                int length = WideCharToMultiByte(CP_ACP, 0, argvw[i], -1, NULL, 0, NULL, NULL);\n                LPSTR arg = HeapAlloc(GetProcessHeap(), NULL, (length + 1) * sizeof(CHAR));\n                WideCharToMultiByte(CP_ACP, 0, argvw[i], -1, arg, length, NULL, NULL);\n                arg[length] = '\\0';\n                argv_copy[i] = arg;\n            }\n            LocalFree(argvw);\n            argv = argv_copy;\n        }\n    }\n    if (argc > 1 && !strcmp(argv[1], \"--ntvdm64:\"))\n    {\n        //remove argv[1]\n        for (int i = 1; i < argc - 1; i++)\n        {\n            argv[i] = argv[i + 1];\n        }\n        argc--;\n    }\n    if (argc > 2 && !strcmp(argv[2], \"--ntvdm64-args:\"))\n    {\n        //remove argv[2]\n        for (int i = 2; i < argc - 1; i++)\n        {\n            argv[i] = argv[i + 1];\n        }\n        argc--;\n    }\n    /* argv must be null-terminated */\n    argv[argc] = NULL;\n\n\n    if (!argv[1]) usage();\n\n    if (!strcmp( argv[1], \"--app-name\" ))\n    {\n        if (!(appname = argv[2])) usage();\n        first_arg = argv + 3;\n    }\n    else\n    {\n        if (!SearchPathA( \".\", argv[1], \".exe\", sizeof(buffer), buffer, NULL ) &&\n            !SearchPathA( \".\", argv[1], \".com\", sizeof(buffer), buffer, NULL ) &&\n            !SearchPathA( NULL, argv[1], \".exe\", sizeof(buffer), buffer, NULL ) &&\n            !SearchPathA( NULL, argv[1], \".com\", sizeof(buffer), buffer, NULL ))\n        {\n            WINE_MESSAGE( \"winevdm: unable to exec '%s': file not found\\n\", argv[1] );\n            ExitProcess(1);\n        }\n        appname = buffer;\n        first_arg = argv + 1;\n    }\n\n    if (*first_arg) first_arg++;  /* skip program name */\n    cmdline = build_command_line( first_arg );\n\n    if (WINE_TRACE_ON(winevdm))\n    {\n        int i;\n        WINE_TRACE( \"GetCommandLine = '%s'\\n\", GetCommandLineA() );\n        WINE_TRACE( \"appname = '%s'\\n\", appname );\n        WINE_TRACE( \"cmdline = '%.*s'\\n\", cmdline[0], cmdline+1 );\n        for (i = 0; argv[i]; i++) WINE_TRACE( \"argv[%d]: '%s'\\n\", i, argv[i] );\n    }\n\n    GetStartupInfoA( &info );\n    showCmd[0] = 2;\n    showCmd[1] = (info.dwFlags & STARTF_USESHOWWINDOW) ? info.wShowWindow : SW_SHOWNORMAL;\n\n    params.hEnvironment = 0;\n\n    use_shared_wow_server = !krnl386_get_config_int(\"otvdm\", \"SeparateWOWVDM\", TRUE);\n    if (use_shared_wow_server && run_shared_wow(appname, showCmd[1], cmdline))\n    {\n        return 0;\n    }\n\n    params.cmdLine = MapLS( cmdline );\n    params.showCmd = MapLS( showCmd );\n    params.reserved = 0;\n\n    RestoreThunkLock(1);  /* grab the Win16 lock */\n\n    if (krnl386_get_config_int(\"otvdm\", \"ForceSingleProcessor\", FALSE))\n        SetProcessAffinityMask(GetCurrentProcess(), 1);\n\n    /* some programs assume mmsystem is always present */\n    LoadLibrary16( \"gdi.exe\" );\n    LoadLibrary16( \"user.exe\" );\n    LoadLibrary16( \"mmsystem.dll\" );\n    LoadLibrary16( \"shell.dll\" );\n\n    krnl386_set_compat_path(appname);\n\n    if (krnl386_get_config_int(\"otvdm\", \"EnableVisualStyle\", FALSE))\n    {\n        ACTCTXA actctx = { 0 };\n        actctx.cbSize = sizeof(actctx);\n        actctx.hModule = GetModuleHandleW(NULL);\n        actctx.dwFlags = ACTCTX_FLAG_HMODULE_VALID | ACTCTX_FLAG_RESOURCE_NAME_VALID;\n        actctx.lpResourceName = MAKEINTRESOURCE(IDS_MANIFEST);\n        HANDLE result = CreateActCtxA(&actctx);\n        ULONG_PTR lpCookie;\n        BOOL res = ActivateActCtx(result, &lpCookie);\n    }\n\n    exec16(params, appname, cmdline, TRUE);\n    /* wait forever; the process will be killed when the last task exits */\n    ReleaseThunkLock(&count);\n    if (use_shared_wow_server)\n        run_shared_wow_server();\n    Sleep(1000);  // sleep for a second so the loaded task can start, allows waitforinputidle to work\n    while (TRUE)\n    {\n        MSG msg;\n        GetMessageA(&msg, NULL, 0, 0);\n        TranslateMessage(&msg);\n        DispatchMessageA(&msg);\n    }\n    Sleep( INFINITE );\n    return 0;\n}\n\n#ifndef _CONSOLE\n/* otvdmw.exe entry point */\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nShowCmd)\n{\n    UNREFERENCED_PARAMETER(hInstance);\n    UNREFERENCED_PARAMETER(hPrevInst);\n    UNREFERENCED_PARAMETER(lpszCmdLine);\n    UNREFERENCED_PARAMETER(nShowCmd);\n    set_peb_compatible_flag();\n    if (__argc == 1)\n    {\n        OPENFILENAMEA ofn = { 0 };\n        char file[MAX_PATH] = { 0 };\n        ofn.lpstrFilter = \"EXE(*.EXE)\\0*.EXE\\0\";\n        ofn.nFilterIndex = 1;\n        ofn.lStructSize = sizeof(ofn);\n        ofn.lpstrFile = file;\n        ofn.nMaxFile = sizeof(file);\n        ofn.Flags = OFN_FILEMUSTEXIST;\n        ofn.lpstrDefExt = \"EXE\";\n        ofn.lpstrTitle = \"\";\n        if (!GetOpenFileNameA(&ofn))\n            return 1;\n        LPSTR *argv = HeapAlloc(GetProcessHeap(), 0, sizeof(char*) * 3);\n        argv[0] = __argv[0];\n        argv[1] = ofn.lpstrFile;\n        argv[2] = 0;\n        if (is_win32_exe(argv[1]))\n        {\n            char buf[1000];\n            snprintf(buf, sizeof(buf), \"\\\"%s\\\" is a win32 executable file!\\n\", argv[1]);\n            WINE_ERR(\"%s is a win32 executable file!\\n\", argv[1]);\n            MessageBoxA(NULL, buf, NULL, MB_OK | MB_ICONWARNING);\n        }\n        return entry_point(2, argv);\n    }\n    return entry_point(__argc, __argv);\n}\n#endif\n"
  },
  {
    "path": "otvdm.ini",
    "content": ";The leading semicolon represents a comment. If you want to edit the settings, delete the leading semicolon.\r\n[otvdm]\r\n\r\n; Enable visual style. (default: 0)\r\n; Setting this to 1 will significantly affect compatibility.\r\n;EnableVisualStyle=0\r\n\r\n; Disable window theme. (defualt: 1)\r\n; Setting this to 0 will affect compatibility a bit.\r\n;DisableAero=1\r\n\r\n; The path to redirected Windows directory. (default: .\\WINDOWS)\r\n;WINDIR=WINDOWS\r\n\r\n; DOS version (default: 8.0)\r\n;VDMDOSVER=x.x\r\n\r\n; Windows version (default: 3.95)\r\n;WINVER=3.1\r\n\r\n; Don't report running under Windows NT. (default: 0, report running under Windows NT)\r\n;IAmNotNT=1\r\n\r\n; Separate taskbar icons among programs. (default: 2)\r\n; 0: Don't separate\r\n; 1: Separate for each otvdm.exe process\r\n; 2: Separate\r\n;SeparateTaskbar=2\r\n\r\n; SeparateWOWVDM (default: 1)\r\n;SeparateWOWVDM=1\r\n\r\n; VM dll (default: vm86.dll software x86 emulator)\r\n; vm86.dll: The slowest, most compatible, and most stable.\r\n\r\n; haxmvm.dll: VM using a hypervisor\r\n;  You must install intel HAXM driver.\r\n;  https://software.intel.com/en-us/articles/intel-hardware-accelerated-execution-manager-intel-haxm\r\n;  It is 100 times faster (in some cases) than the software CPU emulator.\r\n\r\n; gvm.dll: KVM ported to Windows\r\n; You must install https://github.com/google/android-emulator-hypervisor-driver-for-amd-processors/releases\r\n; Works with both AMD and Intel.\r\n\r\n; whpxvm.dll: VM using Windows Hypervisor Platform\r\n;  HAXM, GVM cannot be installed if you are using WSL2, Hyper-V.\r\n;  Windows Hypervisor Platform should be enabled.\r\n;  Since whpxvm.dll is implemented by forcibly loading a 64-bit DLL into a 32-bit process,\r\n;  it may not work depending on the version of Windows.\r\n;  You must download the DLL from the following URL and place it in the dll directory.\r\n;  https://github.com/otya128/WinHvPlatform32/releases/tag/1.1\r\n\r\n; whpxvm.dll is the most stable of the hypervisors.\r\n\r\n;vm=haxmvm.dll\r\n\r\n; Fix the size of the screen to the value considering taskbar. (default: 0)\r\n;FixScreenSize=1\r\n\r\n; Enable registry redirection (default: 0)\r\n; All registry operations are redirected to:\r\n; HKEY_CURRENT_USER\\Software\\otvdm\\HKEY_CLASSES_ROOT\r\n; HKEY_CURRENT_USER\\Software\\otvdm\\HKEY_CURRENT_USER\r\n; HKEY_CURRENT_USER\\Software\\otvdm\\HKEY_LOCAL_MACHINE\r\n; If necessary, combine SETUP.REG on windows setup disk with 16-bit REGEDIT.\r\n;EnableRegistryRedirection=1\r\n\r\n; Limit the number of fonts. (some old programs can not process many fonts)\r\n; (default: 0)\r\n;EnumFontLimitation=1\r\n\r\n; Tweak rendering of TrueType fonts.\r\n; Forced font quality values: (default: -1)\r\n;  -1: No forced quality        3: Non-antialiased\r\n;   0: Default                  4: Antialiased\r\n;   1: Draft                    5: ClearType\r\n;   2: Proof\r\n;ForceFontQuality=-1\r\n\r\n; Enable font antialias (default: 0)\r\n; If EnableFontAntialias is 1, it is equivalent to ForceFontQuality=3.\r\n;EnableFontAntialias=0\r\n\r\n; Improve XOR composition. (default: 0)\r\n;DWMDesktopDCFix=1\r\n\r\n;DWMDesktopDCFixBackgroundColorR=254\r\n;DWMDesktopDCFixBackgroundColorG=254\r\n;DWMDesktopDCFixBackgroundColorB=254\r\n\r\n; Set application to launch MSDOS programs with\r\n; Works with msdos player, dosbox (default: otvdm.exe)\r\n;dosemu=msdos.exe\r\n\r\n; Limit environment variable strings. (default: 1)\r\n;EnvironmentVariableLimitation=1\r\n\r\n; Force otvdm onto a single processor, programs that require tight sync\r\n; between two processes can be more reliable (default: 0)\r\n;ForceSingleProcessor=1\r\n\r\n; Sleep for extra time in PeekMessage for programs that poll the message queue\r\n; in a tight loop using all the available cpu time, wait time in milliseconds (default: 0)\r\n;PeekMessageSleep=5\r\n\r\n; Emulate 8bpp color mode using DIBs (default: 0)\r\n;DIBPalette=0\r\n\r\n; If EnumFontLimitation=1, this section declare the font to be enumerated.\r\n;[EnumFontLimitation]\r\n;font name=1(enumerated)/0(not enumerated)\r\n;MS Serif=1\r\n;Webdings=0\r\n\r\n; Run a compatibility shim for elevated processes, requires full path to program if it isn't in %PATH%\r\n; isfixload will shim installshield which calls sendmessagea(HWND_BROADCAST) which can hang if there\r\n; is a process not servicing it's message queue\r\n;ElevationShim=isfixload.exe\r\n\r\n; Adjust the dpi for programs, especially visual basic, which use dpi for calculating\r\n; font and window sizes but can get an integer overflow on large displays, can also\r\n; make text larger in some cases\r\n;AdjustDPI=120\r\n"
  },
  {
    "path": "otvdm.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 16\r\nVisualStudioVersion = 16.0.34931.43\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"otvdm\", \"otvdm\\otvdm.vcxproj\", \"{9C0EBE04-AE9A-40D5-ACFA-5F0854456DDA}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{E4950E01-C995-49A5-9FED-5EF03155FD65} = {E4950E01-C995-49A5-9FED-5EF03155FD65}\r\n\t\t{E4950E01-C995-49A5-9FED-5EF03155FD66} = {E4950E01-C995-49A5-9FED-5EF03155FD66}\r\n\t\t{258FD007-046D-4625-BB5A-B7934B71934F} = {258FD007-046D-4625-BB5A-B7934B71934F}\r\n\t\t{F234FA09-76BC-4154-8420-737CD7FA4EF7} = {F234FA09-76BC-4154-8420-737CD7FA4EF7}\r\n\t\t{7F73550E-724D-4F7A-B192-35A764AC24D6} = {7F73550E-724D-4F7A-B192-35A764AC24D6}\r\n\t\t{0A37BC0E-8433-453D-9DEA-7AAD7C0E6E5C} = {0A37BC0E-8433-453D-9DEA-7AAD7C0E6E5C}\r\n\t\t{CB9C6113-15AB-4DB9-A323-C2094A9A6E92} = {CB9C6113-15AB-4DB9-A323-C2094A9A6E92}\r\n\t\t{7B417913-AE01-41E5-BFEA-AB971B779F63} = {7B417913-AE01-41E5-BFEA-AB971B779F63}\r\n\t\t{B88A001B-29A3-45C1-8FF9-A75CB7C7DCCF} = {B88A001B-29A3-45C1-8FF9-A75CB7C7DCCF}\r\n\t\t{066A261B-90F6-4AB7-8F53-1455F068D6F7} = {066A261B-90F6-4AB7-8F53-1455F068D6F7}\r\n\t\t{B83EEE1C-F8DE-4F82-8928-67F1B142E5F2} = {B83EEE1C-F8DE-4F82-8928-67F1B142E5F2}\r\n\t\t{94C8AE24-778A-4FEB-B3E1-457BDCCE06DF} = {94C8AE24-778A-4FEB-B3E1-457BDCCE06DF}\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{F10EEF26-6451-4988-84D4-D193A4D2BF8C} = {F10EEF26-6451-4988-84D4-D193A4D2BF8C}\r\n\t\t{F10EEF26-6451-4988-84D4-D193A4D2BF8D} = {F10EEF26-6451-4988-84D4-D193A4D2BF8D}\r\n\t\t{B3496128-1B1F-4D55-8F7F-7E39A53ABE75} = {B3496128-1B1F-4D55-8F7F-7E39A53ABE75}\r\n\t\t{BD91A02B-907B-4512-A963-1166D1EBC5C4} = {BD91A02B-907B-4512-A963-1166D1EBC5C4}\r\n\t\t{1AAA3531-513D-4A96-9795-D48CF33BF516} = {1AAA3531-513D-4A96-9795-D48CF33BF516}\r\n\t\t{DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2}\r\n\t\t{5AB8CD32-0031-4D8B-BFE0-382C6C1E1770} = {5AB8CD32-0031-4D8B-BFE0-382C6C1E1770}\r\n\t\t{3D889B37-09C8-4030-B815-830566CD57A3} = {3D889B37-09C8-4030-B815-830566CD57A3}\r\n\t\t{3D889B37-09C8-4030-B815-830566CD57A4} = {3D889B37-09C8-4030-B815-830566CD57A4}\r\n\t\t{3D889B37-09C8-4030-B815-830566CD57A5} = {3D889B37-09C8-4030-B815-830566CD57A5}\r\n\t\t{72482539-7702-455E-81E0-F3AF237CF57F} = {72482539-7702-455E-81E0-F3AF237CF57F}\r\n\t\t{2D769A3B-881A-4307-B6C9-02EBC61211A4} = {2D769A3B-881A-4307-B6C9-02EBC61211A4}\r\n\t\t{96925A3C-9DD9-418E-A772-A112FFE93DC2} = {96925A3C-9DD9-418E-A772-A112FFE93DC2}\r\n\t\t{ABEECE42-C504-4F41-AF77-BE6AAE7E9B8A} = {ABEECE42-C504-4F41-AF77-BE6AAE7E9B8A}\r\n\t\t{8914D84A-84BD-4F85-99AC-723F8AEABAEB} = {8914D84A-84BD-4F85-99AC-723F8AEABAEB}\r\n\t\t{6139024B-2348-440D-9192-3A40C3CE31B5} = {6139024B-2348-440D-9192-3A40C3CE31B5}\r\n\t\t{90843552-9BC9-4DF2-AFC5-F4ECEDDF7E58} = {90843552-9BC9-4DF2-AFC5-F4ECEDDF7E58}\r\n\t\t{09EF1555-CA21-47F8-8830-04A53295F8B6} = {09EF1555-CA21-47F8-8830-04A53295F8B6}\r\n\t\t{0EBCFB5B-3092-4E06-A007-CA50B1DA3298} = {0EBCFB5B-3092-4E06-A007-CA50B1DA3298}\r\n\t\t{0DCF5163-4049-4850-92BE-5D6A2444C51D} = {0DCF5163-4049-4850-92BE-5D6A2444C51D}\r\n\t\t{7C04956D-FEBE-410F-ABB1-945695CDDFE5} = {7C04956D-FEBE-410F-ABB1-945695CDDFE5}\r\n\t\t{55AC3B70-9AFB-498C-BEC6-F56AF538FEDF} = {55AC3B70-9AFB-498C-BEC6-F56AF538FEDF}\r\n\t\t{E0AF9E72-F364-481A-A6E5-63EA88DF684E} = {E0AF9E72-F364-481A-A6E5-63EA88DF684E}\r\n\t\t{3825B17A-681F-48CF-B9AD-5337B1F521C8} = {3825B17A-681F-48CF-B9AD-5337B1F521C8}\r\n\t\t{C8F4997D-B814-43BB-A71B-507B2E956F55} = {C8F4997D-B814-43BB-A71B-507B2E956F55}\r\n\t\t{B1A8AC7F-6B94-4AD0-8471-2C44F3014B5A} = {B1A8AC7F-6B94-4AD0-8471-2C44F3014B5A}\r\n\t\t{3A10E48B-E88F-46C6-8A01-7A62112D0E05} = {3A10E48B-E88F-46C6-8A01-7A62112D0E05}\r\n\t\t{90402A90-8D53-4843-BF11-7AE93361ED13} = {90402A90-8D53-4843-BF11-7AE93361ED13}\r\n\t\t{08AEBC9F-464E-41DD-B4CB-F2921F69B591} = {08AEBC9F-464E-41DD-B4CB-F2921F69B591}\r\n\t\t{D4EED8A5-2B15-4299-9F65-D56383AC7848} = {D4EED8A5-2B15-4299-9F65-D56383AC7848}\r\n\t\t{F9B66ABE-3489-434C-8340-65B3421DC30C} = {F9B66ABE-3489-434C-8340-65B3421DC30C}\r\n\t\t{37F4B5BE-FB3C-44E7-BA9B-6D0E0C7709F2} = {37F4B5BE-FB3C-44E7-BA9B-6D0E0C7709F2}\r\n\t\t{FA7FFBC0-45A5-4419-B18C-DEC8363C2413} = {FA7FFBC0-45A5-4419-B18C-DEC8363C2413}\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\t\t{583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2}\r\n\t\t{504CC4CA-612C-4681-AD9A-90E51785A5D2} = {504CC4CA-612C-4681-AD9A-90E51785A5D2}\r\n\t\t{6E81B0D8-0218-4EB9-88D7-AD2F2EBD928C} = {6E81B0D8-0218-4EB9-88D7-AD2F2EBD928C}\r\n\t\t{22C717E1-BDA2-4AB0-BF3F-FBBEB46681D4} = {22C717E1-BDA2-4AB0-BF3F-FBBEB46681D4}\r\n\t\t{249FBAE5-EC5D-4988-87AC-A4371D827BA4} = {249FBAE5-EC5D-4988-87AC-A4371D827BA4}\r\n\t\t{B76406F9-E89B-4791-ACDE-CD23813F764B} = {B76406F9-E89B-4791-ACDE-CD23813F764B}\r\n\t\t{F1DEC3F9-706B-410D-91D5-0381BB9BA22A} = {F1DEC3F9-706B-410D-91D5-0381BB9BA22A}\r\n\t\t{4A75E3F9-856A-4854-8AA2-34C06F7415BD} = {4A75E3F9-856A-4854-8AA2-34C06F7415BD}\r\n\t\t{2DF233FE-CBB8-4102-A68D-7D30C38961C1} = {2DF233FE-CBB8-4102-A68D-7D30C38961C1}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"wine\", \"wine\\wine.vcxproj\", \"{C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"krnl386\", \"krnl386\\krnl386.vcxproj\", \"{D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2}\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\t\t{583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"wow32\", \"wow32\\wow32.vcxproj\", \"{E4950E01-C995-49A5-9FED-5EF03155FD65}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"ntvdm\", \"ntvdm\\ntvdm.vcxproj\", \"{E4950E01-C995-49A5-9FED-5EF03155FD66}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"convspec\", \"convspec\\convspec.vcxproj\", \"{DC6BA231-C318-436F-8F5C-5E2CC73779E2}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"user\", \"user\\user.vcxproj\", \"{066A261B-90F6-4AB7-8F53-1455F068D6F7}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\t\t{583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"vm86\", \"vm86\\vm86.vcxproj\", \"{0A37BC0E-8433-453D-9DEA-7AAD7C0E6E5C}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"gdi\", \"gdi\\gdi.vcxproj\", \"{0EBCFB5B-3092-4E06-A007-CA50B1DA3298}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{066A261B-90F6-4AB7-8F53-1455F068D6F7} = {066A261B-90F6-4AB7-8F53-1455F068D6F7}\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2}\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\t\t{583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"win87em\", \"win87em\\win87em.vcxproj\", \"{08AEBC9F-464E-41DD-B4CB-F2921F69B591}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"shell\", \"shell\\shell.vcxproj\", \"{BD91A02B-907B-4512-A963-1166D1EBC5C4}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"keyboard\", \"keyboard\\keyboard.vcxproj\", \"{B83EEE1C-F8DE-4F82-8928-67F1B142E5F2}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2}\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\t\t{583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"winnls\", \"winnls\\winnls.vcxproj\", \"{F234FA09-76BC-4154-8420-737CD7FA4EF7}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"commdlg\", \"commdlg\\commdlg.vcxproj\", \"{8914D84A-84BD-4F85-99AC-723F8AEABAEB}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{066A261B-90F6-4AB7-8F53-1455F068D6F7} = {066A261B-90F6-4AB7-8F53-1455F068D6F7}\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2}\r\n\t\t{08AEBC9F-464E-41DD-B4CB-F2921F69B591} = {08AEBC9F-464E-41DD-B4CB-F2921F69B591}\r\n\t\t{583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"olesvr\", \"olesvr\\olesvr.vcxproj\", \"{22C717E1-BDA2-4AB0-BF3F-FBBEB46681D4}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"lzexpand\", \"lzexpand\\lzexpand.vcxproj\", \"{3A10E48B-E88F-46C6-8A01-7A62112D0E05}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2}\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\t\t{583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"convertwinefile\", \"convertwinefile\\convertwinefile.vcxproj\", \"{782AFA35-AE4C-4BC1-9AC9-6D0075AF6AB7}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"wing\", \"wing\\wing.vcxproj\", \"{90402A90-8D53-4843-BF11-7AE93361ED13}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"mmsystem\", \"mmsystem\\mmsystem.vcxproj\", \"{249FBAE5-EC5D-4988-87AC-A4371D827BA4}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2}\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\t\t{583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"sound\", \"sound\\sound.vcxproj\", \"{7B417913-AE01-41E5-BFEA-AB971B779F63}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"mouse\", \"mouse\\mouse.vcxproj\", \"{F1DEC3F9-706B-410D-91D5-0381BB9BA22A}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2}\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"wifeman\", \"wifeman\\wifeman.vcxproj\", \"{B76406F9-E89B-4791-ACDE-CD23813F764B}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"ctl3dv2\", \"ctl3dv2\\ctl3dv2.vcxproj\", \"{7F73550E-724D-4F7A-B192-35A764AC24D6}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{066A261B-90F6-4AB7-8F53-1455F068D6F7} = {066A261B-90F6-4AB7-8F53-1455F068D6F7}\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2}\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\t\t{583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"ctl3d\", \"ctl3d\\ctl3d.vcxproj\", \"{B1A8AC7F-6B94-4AD0-8471-2C44F3014B5A}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{7F73550E-724D-4F7A-B192-35A764AC24D6} = {7F73550E-724D-4F7A-B192-35A764AC24D6}\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2}\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\t\t{583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"winoldap\", \"winoldap\\winoldap.vcxproj\", \"{F10EEF26-6451-4988-84D4-D193A4D2BF8C}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"regedit\", \"regedit\\regedit.vcxproj\", \"{F10EEF26-6451-4988-84D4-D193A4D2BF8D}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"olecli\", \"olecli\\olecli.vcxproj\", \"{B3496128-1B1F-4D55-8F7F-7E39A53ABE75}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2}\r\n\t\t{3A10E48B-E88F-46C6-8A01-7A62112D0E05} = {3A10E48B-E88F-46C6-8A01-7A62112D0E05}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"ddeml\", \"ddeml\\ddeml.vcxproj\", \"{D4EED8A5-2B15-4299-9F65-D56383AC7848}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2}\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\t\t{583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"toolhelp\", \"toolhelp\\toolhelp.vcxproj\", \"{96925A3C-9DD9-418E-A772-A112FFE93DC2}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{066A261B-90F6-4AB7-8F53-1455F068D6F7} = {066A261B-90F6-4AB7-8F53-1455F068D6F7}\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\t\t{583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"ver\", \"ver\\ver.vcxproj\", \"{7C04956D-FEBE-410F-ABB1-945695CDDFE5}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"winecrt0\", \"winecrt0\\winecrt0.vcxproj\", \"{583655C3-2633-4597-BD31-C5AA1EC78AD2}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"system\", \"system\\system.vcxproj\", \"{6E81B0D8-0218-4EB9-88D7-AD2F2EBD928C}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"comm\", \"comm\\comm.vcxproj\", \"{3D889B37-09C8-4030-B815-830566CD57A3}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2}\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\t\t{583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"dispdib\", \"dispdib\\dispdib.vcxproj\", \"{3D889B37-09C8-4030-B815-830566CD57A4}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2}\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\t\t{583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"rmpatch\", \"rmpatch\\rmpatch.vcxproj\", \"{3D889B37-09C8-4030-B815-830566CD57A5}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{DC6BA231-C318-436F-8F5C-5E2CC73779E2} = {DC6BA231-C318-436F-8F5C-5E2CC73779E2}\r\n\t\t{96925A3C-9DD9-418E-A772-A112FFE93DC2} = {96925A3C-9DD9-418E-A772-A112FFE93DC2}\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\t\t{583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"ole2\", \"ole2\\ole2.vcxproj\", \"{F9B66ABE-3489-434C-8340-65B3421DC30C}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{066A261B-90F6-4AB7-8F53-1455F068D6F7} = {066A261B-90F6-4AB7-8F53-1455F068D6F7}\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\t\t{583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2}\r\n\t\t{8A7A52D0-4772-475F-AB85-9C074CFEFDE8} = {8A7A52D0-4772-475F-AB85-9C074CFEFDE8}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"compobj\", \"compobj\\compobj.vcxproj\", \"{B88A001B-29A3-45C1-8FF9-A75CB7C7DCCF}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{F9B66ABE-3489-434C-8340-65B3421DC30C} = {F9B66ABE-3489-434C-8340-65B3421DC30C}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"storage\", \"storage\\storage.vcxproj\", \"{4A75E3F9-856A-4854-8AA2-34C06F7415BD}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{F9B66ABE-3489-434C-8340-65B3421DC30C} = {F9B66ABE-3489-434C-8340-65B3421DC30C}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"winspool\", \"winspool\\winspool.vcxproj\", \"{C8F4997D-B814-43BB-A71B-507B2E956F55}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{0A37BC0E-8433-453D-9DEA-7AAD7C0E6E5C} = {0A37BC0E-8433-453D-9DEA-7AAD7C0E6E5C}\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\t\t{583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"ole2conv\", \"ole2conv\\ole2conv.vcxproj\", \"{90843552-9BC9-4DF2-AFC5-F4ECEDDF7E58}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{F9B66ABE-3489-434C-8340-65B3421DC30C} = {F9B66ABE-3489-434C-8340-65B3421DC30C}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"ole2disp\", \"ole2disp\\ole2disp.vcxproj\", \"{2D769A3B-881A-4307-B6C9-02EBC61211A4}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{B88A001B-29A3-45C1-8FF9-A75CB7C7DCCF} = {B88A001B-29A3-45C1-8FF9-A75CB7C7DCCF}\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{F9B66ABE-3489-434C-8340-65B3421DC30C} = {F9B66ABE-3489-434C-8340-65B3421DC30C}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"ole2nls\", \"ole2nls\\ole2nls.vcxproj\", \"{504CC4CA-612C-4681-AD9A-90E51785A5D2}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{F9B66ABE-3489-434C-8340-65B3421DC30C} = {F9B66ABE-3489-434C-8340-65B3421DC30C}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"ole2prox\", \"ole2prox\\ole2prox.vcxproj\", \"{6139024B-2348-440D-9192-3A40C3CE31B5}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{F9B66ABE-3489-434C-8340-65B3421DC30C} = {F9B66ABE-3489-434C-8340-65B3421DC30C}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"ole2thk\", \"ole2thk\\ole2thk.vcxproj\", \"{94C8AE24-778A-4FEB-B3E1-457BDCCE06DF}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{F9B66ABE-3489-434C-8340-65B3421DC30C} = {F9B66ABE-3489-434C-8340-65B3421DC30C}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"winhlp32\", \"winhlp32\\winhlp32.vcxproj\", \"{37F4B5BE-FB3C-44E7-BA9B-6D0E0C7709F2}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"msvideo\", \"msvideo\\msvideo.vcxproj\", \"{0DCF5163-4049-4850-92BE-5D6A2444C51D}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{249FBAE5-EC5D-4988-87AC-A4371D827BA4} = {249FBAE5-EC5D-4988-87AC-A4371D827BA4}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"avifile\", \"avifile\\avifile.vcxproj\", \"{3825B17A-681F-48CF-B9AD-5337B1F521C8}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"msacm\", \"msacm\\msacm.vcxproj\", \"{FA7FFBC0-45A5-4419-B18C-DEC8363C2413}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"otvdmw\", \"otvdm\\otvdmw.vcxproj\", \"{73E019BF-2393-4BB3-90CA-B5B5749E4B69}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{9C0EBE04-AE9A-40D5-ACFA-5F0854456DDA} = {9C0EBE04-AE9A-40D5-ACFA-5F0854456DDA}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"haxmvm\", \"haxmvm\\haxmvm.vcxproj\", \"{55AC3B70-9AFB-498C-BEC6-F56AF538FEDF}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"display\", \"display\\display.vcxproj\", \"{E0AF9E72-F364-481A-A6E5-63EA88DF684E}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"winsock\", \"winsock\\winsock.vcxproj\", \"{ABEECE42-C504-4F41-AF77-BE6AAE7E9B8A}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\t\t{583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"nddeapi\", \"nddeapi\\nddeapi.vcxproj\", \"{72482539-7702-455E-81E0-F3AF237CF57F}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{066A261B-90F6-4AB7-8F53-1455F068D6F7} = {066A261B-90F6-4AB7-8F53-1455F068D6F7}\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"widl\", \"widl\\widl.vcxproj\", \"{8A7A52D0-4772-475F-AB85-9C074CFEFDE8}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{433BAA32-23BE-4B63-B24B-B89938F4FF35} = {433BAA32-23BE-4B63-B24B-B89938F4FF35}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"wpp\", \"wpp\\wpp.vcxproj\", \"{433BAA32-23BE-4B63-B24B-B89938F4FF35}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"commctrl\", \"commctrl\\commctrl.vcxproj\", \"{CB9C6113-15AB-4DB9-A323-C2094A9A6E92}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{066A261B-90F6-4AB7-8F53-1455F068D6F7} = {066A261B-90F6-4AB7-8F53-1455F068D6F7}\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"typelib\", \"typelib\\typelib.vcxproj\", \"{1AAA3531-513D-4A96-9795-D48CF33BF516}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{2D769A3B-881A-4307-B6C9-02EBC61211A4} = {2D769A3B-881A-4307-B6C9-02EBC61211A4}\r\n\t\t{F9B66ABE-3489-434C-8340-65B3421DC30C} = {F9B66ABE-3489-434C-8340-65B3421DC30C}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"timer\", \"timer\\timer.vcxproj\", \"{09EF1555-CA21-47F8-8830-04A53295F8B6}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"whpxvm\", \"whpxvm\\whpxvm.vcxproj\", \"{2DF233FE-CBB8-4102-A68D-7D30C38961C1}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"gvm\", \"gvm\\gvm.vcxproj\", \"{258FD007-046D-4625-BB5A-B7934B71934F}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"netapi\", \"netapi\\netapi.vcxproj\", \"{5AB8CD32-0031-4D8B-BFE0-382C6C1E1770}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966} = {D3F34C25-272C-4E4F-9B6F-BE7ABB472966}\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE} = {C978A6C2-F788-4F5E-8E14-73C1B6B521CE}\r\n\t\t{583655C3-2633-4597-BD31-C5AA1EC78AD2} = {583655C3-2633-4597-BD31-C5AA1EC78AD2}\r\n\tEndProjectSection\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tRelease|Win32 = Release|Win32\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{9C0EBE04-AE9A-40D5-ACFA-5F0854456DDA}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{9C0EBE04-AE9A-40D5-ACFA-5F0854456DDA}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{9C0EBE04-AE9A-40D5-ACFA-5F0854456DDA}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{9C0EBE04-AE9A-40D5-ACFA-5F0854456DDA}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{C978A6C2-F788-4F5E-8E14-73C1B6B521CE}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{D3F34C25-272C-4E4F-9B6F-BE7ABB472966}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{E4950E01-C995-49A5-9FED-5EF03155FD65}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{E4950E01-C995-49A5-9FED-5EF03155FD65}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{E4950E01-C995-49A5-9FED-5EF03155FD65}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{E4950E01-C995-49A5-9FED-5EF03155FD65}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{E4950E01-C995-49A5-9FED-5EF03155FD66}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{E4950E01-C995-49A5-9FED-5EF03155FD66}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{E4950E01-C995-49A5-9FED-5EF03155FD66}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{E4950E01-C995-49A5-9FED-5EF03155FD66}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{DC6BA231-C318-436F-8F5C-5E2CC73779E2}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{DC6BA231-C318-436F-8F5C-5E2CC73779E2}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{DC6BA231-C318-436F-8F5C-5E2CC73779E2}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{DC6BA231-C318-436F-8F5C-5E2CC73779E2}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{066A261B-90F6-4AB7-8F53-1455F068D6F7}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{066A261B-90F6-4AB7-8F53-1455F068D6F7}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{066A261B-90F6-4AB7-8F53-1455F068D6F7}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{066A261B-90F6-4AB7-8F53-1455F068D6F7}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{0A37BC0E-8433-453D-9DEA-7AAD7C0E6E5C}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{0A37BC0E-8433-453D-9DEA-7AAD7C0E6E5C}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{0A37BC0E-8433-453D-9DEA-7AAD7C0E6E5C}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{0A37BC0E-8433-453D-9DEA-7AAD7C0E6E5C}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{0EBCFB5B-3092-4E06-A007-CA50B1DA3298}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{0EBCFB5B-3092-4E06-A007-CA50B1DA3298}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{0EBCFB5B-3092-4E06-A007-CA50B1DA3298}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{0EBCFB5B-3092-4E06-A007-CA50B1DA3298}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{08AEBC9F-464E-41DD-B4CB-F2921F69B591}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{08AEBC9F-464E-41DD-B4CB-F2921F69B591}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{08AEBC9F-464E-41DD-B4CB-F2921F69B591}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{08AEBC9F-464E-41DD-B4CB-F2921F69B591}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{BD91A02B-907B-4512-A963-1166D1EBC5C4}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{BD91A02B-907B-4512-A963-1166D1EBC5C4}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{BD91A02B-907B-4512-A963-1166D1EBC5C4}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{BD91A02B-907B-4512-A963-1166D1EBC5C4}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{B83EEE1C-F8DE-4F82-8928-67F1B142E5F2}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{B83EEE1C-F8DE-4F82-8928-67F1B142E5F2}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{B83EEE1C-F8DE-4F82-8928-67F1B142E5F2}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{B83EEE1C-F8DE-4F82-8928-67F1B142E5F2}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{F234FA09-76BC-4154-8420-737CD7FA4EF7}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{F234FA09-76BC-4154-8420-737CD7FA4EF7}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{F234FA09-76BC-4154-8420-737CD7FA4EF7}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{F234FA09-76BC-4154-8420-737CD7FA4EF7}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{8914D84A-84BD-4F85-99AC-723F8AEABAEB}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{8914D84A-84BD-4F85-99AC-723F8AEABAEB}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{8914D84A-84BD-4F85-99AC-723F8AEABAEB}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{8914D84A-84BD-4F85-99AC-723F8AEABAEB}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{22C717E1-BDA2-4AB0-BF3F-FBBEB46681D4}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{22C717E1-BDA2-4AB0-BF3F-FBBEB46681D4}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{22C717E1-BDA2-4AB0-BF3F-FBBEB46681D4}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{22C717E1-BDA2-4AB0-BF3F-FBBEB46681D4}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{3A10E48B-E88F-46C6-8A01-7A62112D0E05}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{3A10E48B-E88F-46C6-8A01-7A62112D0E05}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{3A10E48B-E88F-46C6-8A01-7A62112D0E05}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{3A10E48B-E88F-46C6-8A01-7A62112D0E05}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{782AFA35-AE4C-4BC1-9AC9-6D0075AF6AB7}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{782AFA35-AE4C-4BC1-9AC9-6D0075AF6AB7}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{782AFA35-AE4C-4BC1-9AC9-6D0075AF6AB7}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{782AFA35-AE4C-4BC1-9AC9-6D0075AF6AB7}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{90402A90-8D53-4843-BF11-7AE93361ED13}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{90402A90-8D53-4843-BF11-7AE93361ED13}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{90402A90-8D53-4843-BF11-7AE93361ED13}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{90402A90-8D53-4843-BF11-7AE93361ED13}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{249FBAE5-EC5D-4988-87AC-A4371D827BA4}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{249FBAE5-EC5D-4988-87AC-A4371D827BA4}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{249FBAE5-EC5D-4988-87AC-A4371D827BA4}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{249FBAE5-EC5D-4988-87AC-A4371D827BA4}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{7B417913-AE01-41E5-BFEA-AB971B779F63}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{7B417913-AE01-41E5-BFEA-AB971B779F63}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{7B417913-AE01-41E5-BFEA-AB971B779F63}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{7B417913-AE01-41E5-BFEA-AB971B779F63}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{F1DEC3F9-706B-410D-91D5-0381BB9BA22A}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{F1DEC3F9-706B-410D-91D5-0381BB9BA22A}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{F1DEC3F9-706B-410D-91D5-0381BB9BA22A}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{F1DEC3F9-706B-410D-91D5-0381BB9BA22A}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{B76406F9-E89B-4791-ACDE-CD23813F764B}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{B76406F9-E89B-4791-ACDE-CD23813F764B}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{B76406F9-E89B-4791-ACDE-CD23813F764B}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{B76406F9-E89B-4791-ACDE-CD23813F764B}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{7F73550E-724D-4F7A-B192-35A764AC24D6}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{7F73550E-724D-4F7A-B192-35A764AC24D6}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{7F73550E-724D-4F7A-B192-35A764AC24D6}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{7F73550E-724D-4F7A-B192-35A764AC24D6}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{B1A8AC7F-6B94-4AD0-8471-2C44F3014B5A}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{B1A8AC7F-6B94-4AD0-8471-2C44F3014B5A}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{B1A8AC7F-6B94-4AD0-8471-2C44F3014B5A}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{B1A8AC7F-6B94-4AD0-8471-2C44F3014B5A}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{F10EEF26-6451-4988-84D4-D193A4D2BF8C}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{F10EEF26-6451-4988-84D4-D193A4D2BF8C}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{F10EEF26-6451-4988-84D4-D193A4D2BF8C}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{F10EEF26-6451-4988-84D4-D193A4D2BF8C}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{F10EEF26-6451-4988-84D4-D193A4D2BF8D}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{F10EEF26-6451-4988-84D4-D193A4D2BF8D}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{F10EEF26-6451-4988-84D4-D193A4D2BF8D}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{F10EEF26-6451-4988-84D4-D193A4D2BF8D}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{B3496128-1B1F-4D55-8F7F-7E39A53ABE75}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{B3496128-1B1F-4D55-8F7F-7E39A53ABE75}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{B3496128-1B1F-4D55-8F7F-7E39A53ABE75}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{B3496128-1B1F-4D55-8F7F-7E39A53ABE75}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{D4EED8A5-2B15-4299-9F65-D56383AC7848}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{D4EED8A5-2B15-4299-9F65-D56383AC7848}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{D4EED8A5-2B15-4299-9F65-D56383AC7848}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{D4EED8A5-2B15-4299-9F65-D56383AC7848}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{96925A3C-9DD9-418E-A772-A112FFE93DC2}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{96925A3C-9DD9-418E-A772-A112FFE93DC2}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{96925A3C-9DD9-418E-A772-A112FFE93DC2}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{96925A3C-9DD9-418E-A772-A112FFE93DC2}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{7C04956D-FEBE-410F-ABB1-945695CDDFE5}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{7C04956D-FEBE-410F-ABB1-945695CDDFE5}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{7C04956D-FEBE-410F-ABB1-945695CDDFE5}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{7C04956D-FEBE-410F-ABB1-945695CDDFE5}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{583655C3-2633-4597-BD31-C5AA1EC78AD2}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{583655C3-2633-4597-BD31-C5AA1EC78AD2}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{583655C3-2633-4597-BD31-C5AA1EC78AD2}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{583655C3-2633-4597-BD31-C5AA1EC78AD2}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{6E81B0D8-0218-4EB9-88D7-AD2F2EBD928C}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{6E81B0D8-0218-4EB9-88D7-AD2F2EBD928C}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{6E81B0D8-0218-4EB9-88D7-AD2F2EBD928C}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{6E81B0D8-0218-4EB9-88D7-AD2F2EBD928C}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{3D889B37-09C8-4030-B815-830566CD57A3}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{3D889B37-09C8-4030-B815-830566CD57A3}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{3D889B37-09C8-4030-B815-830566CD57A3}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{3D889B37-09C8-4030-B815-830566CD57A3}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{3D889B37-09C8-4030-B815-830566CD57A4}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{3D889B37-09C8-4030-B815-830566CD57A4}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{3D889B37-09C8-4030-B815-830566CD57A4}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{3D889B37-09C8-4030-B815-830566CD57A4}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{3D889B37-09C8-4030-B815-830566CD57A5}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{3D889B37-09C8-4030-B815-830566CD57A5}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{3D889B37-09C8-4030-B815-830566CD57A5}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{3D889B37-09C8-4030-B815-830566CD57A5}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{F9B66ABE-3489-434C-8340-65B3421DC30C}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{F9B66ABE-3489-434C-8340-65B3421DC30C}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{F9B66ABE-3489-434C-8340-65B3421DC30C}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{F9B66ABE-3489-434C-8340-65B3421DC30C}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{B88A001B-29A3-45C1-8FF9-A75CB7C7DCCF}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{B88A001B-29A3-45C1-8FF9-A75CB7C7DCCF}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{B88A001B-29A3-45C1-8FF9-A75CB7C7DCCF}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{B88A001B-29A3-45C1-8FF9-A75CB7C7DCCF}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{4A75E3F9-856A-4854-8AA2-34C06F7415BD}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{4A75E3F9-856A-4854-8AA2-34C06F7415BD}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{4A75E3F9-856A-4854-8AA2-34C06F7415BD}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{4A75E3F9-856A-4854-8AA2-34C06F7415BD}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{C8F4997D-B814-43BB-A71B-507B2E956F55}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{C8F4997D-B814-43BB-A71B-507B2E956F55}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{C8F4997D-B814-43BB-A71B-507B2E956F55}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{C8F4997D-B814-43BB-A71B-507B2E956F55}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{90843552-9BC9-4DF2-AFC5-F4ECEDDF7E58}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{90843552-9BC9-4DF2-AFC5-F4ECEDDF7E58}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{90843552-9BC9-4DF2-AFC5-F4ECEDDF7E58}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{90843552-9BC9-4DF2-AFC5-F4ECEDDF7E58}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{2D769A3B-881A-4307-B6C9-02EBC61211A4}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{2D769A3B-881A-4307-B6C9-02EBC61211A4}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{2D769A3B-881A-4307-B6C9-02EBC61211A4}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{2D769A3B-881A-4307-B6C9-02EBC61211A4}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{504CC4CA-612C-4681-AD9A-90E51785A5D2}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{504CC4CA-612C-4681-AD9A-90E51785A5D2}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{504CC4CA-612C-4681-AD9A-90E51785A5D2}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{504CC4CA-612C-4681-AD9A-90E51785A5D2}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{6139024B-2348-440D-9192-3A40C3CE31B5}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{6139024B-2348-440D-9192-3A40C3CE31B5}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{6139024B-2348-440D-9192-3A40C3CE31B5}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{6139024B-2348-440D-9192-3A40C3CE31B5}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{94C8AE24-778A-4FEB-B3E1-457BDCCE06DF}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{94C8AE24-778A-4FEB-B3E1-457BDCCE06DF}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{94C8AE24-778A-4FEB-B3E1-457BDCCE06DF}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{94C8AE24-778A-4FEB-B3E1-457BDCCE06DF}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{37F4B5BE-FB3C-44E7-BA9B-6D0E0C7709F2}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{37F4B5BE-FB3C-44E7-BA9B-6D0E0C7709F2}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{37F4B5BE-FB3C-44E7-BA9B-6D0E0C7709F2}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{37F4B5BE-FB3C-44E7-BA9B-6D0E0C7709F2}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{0DCF5163-4049-4850-92BE-5D6A2444C51D}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{0DCF5163-4049-4850-92BE-5D6A2444C51D}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{0DCF5163-4049-4850-92BE-5D6A2444C51D}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{0DCF5163-4049-4850-92BE-5D6A2444C51D}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{3825B17A-681F-48CF-B9AD-5337B1F521C8}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{3825B17A-681F-48CF-B9AD-5337B1F521C8}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{3825B17A-681F-48CF-B9AD-5337B1F521C8}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{3825B17A-681F-48CF-B9AD-5337B1F521C8}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{FA7FFBC0-45A5-4419-B18C-DEC8363C2413}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{FA7FFBC0-45A5-4419-B18C-DEC8363C2413}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{FA7FFBC0-45A5-4419-B18C-DEC8363C2413}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{FA7FFBC0-45A5-4419-B18C-DEC8363C2413}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{73E019BF-2393-4BB3-90CA-B5B5749E4B69}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{73E019BF-2393-4BB3-90CA-B5B5749E4B69}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{73E019BF-2393-4BB3-90CA-B5B5749E4B69}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{73E019BF-2393-4BB3-90CA-B5B5749E4B69}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{55AC3B70-9AFB-498C-BEC6-F56AF538FEDF}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{55AC3B70-9AFB-498C-BEC6-F56AF538FEDF}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{55AC3B70-9AFB-498C-BEC6-F56AF538FEDF}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{55AC3B70-9AFB-498C-BEC6-F56AF538FEDF}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{E0AF9E72-F364-481A-A6E5-63EA88DF684E}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{E0AF9E72-F364-481A-A6E5-63EA88DF684E}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{E0AF9E72-F364-481A-A6E5-63EA88DF684E}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{E0AF9E72-F364-481A-A6E5-63EA88DF684E}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{ABEECE42-C504-4F41-AF77-BE6AAE7E9B8A}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{ABEECE42-C504-4F41-AF77-BE6AAE7E9B8A}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{ABEECE42-C504-4F41-AF77-BE6AAE7E9B8A}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{ABEECE42-C504-4F41-AF77-BE6AAE7E9B8A}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{72482539-7702-455E-81E0-F3AF237CF57F}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{72482539-7702-455E-81E0-F3AF237CF57F}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{72482539-7702-455E-81E0-F3AF237CF57F}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{72482539-7702-455E-81E0-F3AF237CF57F}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{8A7A52D0-4772-475F-AB85-9C074CFEFDE8}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{8A7A52D0-4772-475F-AB85-9C074CFEFDE8}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{8A7A52D0-4772-475F-AB85-9C074CFEFDE8}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{8A7A52D0-4772-475F-AB85-9C074CFEFDE8}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{433BAA32-23BE-4B63-B24B-B89938F4FF35}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{433BAA32-23BE-4B63-B24B-B89938F4FF35}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{433BAA32-23BE-4B63-B24B-B89938F4FF35}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{433BAA32-23BE-4B63-B24B-B89938F4FF35}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{CB9C6113-15AB-4DB9-A323-C2094A9A6E92}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{CB9C6113-15AB-4DB9-A323-C2094A9A6E92}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{CB9C6113-15AB-4DB9-A323-C2094A9A6E92}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{CB9C6113-15AB-4DB9-A323-C2094A9A6E92}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{1AAA3531-513D-4A96-9795-D48CF33BF516}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{1AAA3531-513D-4A96-9795-D48CF33BF516}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{1AAA3531-513D-4A96-9795-D48CF33BF516}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{1AAA3531-513D-4A96-9795-D48CF33BF516}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{09EF1555-CA21-47F8-8830-04A53295F8B6}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{09EF1555-CA21-47F8-8830-04A53295F8B6}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{09EF1555-CA21-47F8-8830-04A53295F8B6}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{09EF1555-CA21-47F8-8830-04A53295F8B6}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{2DF233FE-CBB8-4102-A68D-7D30C38961C1}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{2DF233FE-CBB8-4102-A68D-7D30C38961C1}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{2DF233FE-CBB8-4102-A68D-7D30C38961C1}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{2DF233FE-CBB8-4102-A68D-7D30C38961C1}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{258FD007-046D-4625-BB5A-B7934B71934F}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{258FD007-046D-4625-BB5A-B7934B71934F}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{258FD007-046D-4625-BB5A-B7934B71934F}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{258FD007-046D-4625-BB5A-B7934B71934F}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{5AB8CD32-0031-4D8B-BFE0-382C6C1E1770}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{5AB8CD32-0031-4D8B-BFE0-382C6C1E1770}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{5AB8CD32-0031-4D8B-BFE0-382C6C1E1770}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{5AB8CD32-0031-4D8B-BFE0-382C6C1E1770}.Release|Win32.Build.0 = Release|Win32\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {692D1D4A-93CF-4B31-BF6F-4901B375934E}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "regedit/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(regedit SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/regedit.def regedit.exe16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(regedit.exe16 regedit)\ntarget_link_libraries(regedit libwine winecrt0 krnl386)\nset_target_properties(regedit PROPERTIES SUFFIX \".exe16\")\n"
  },
  {
    "path": "regedit/Makefile.in",
    "content": "MODULE    = regedit.exe16\n\nEXTRADLLFLAGS = -m16\n\n"
  },
  {
    "path": "regedit/regedit.c",
    "content": "/*\n * Windows regedit.exe registry editor implementation.\n *\n * Copyright 1999 Sylvain St-Germain\n * Copyright 2002 Andriy Palamarchuk\n * Copyright 2008 Alexander N. Srnes <alex@thehandofagony.com>\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n */\n\n#include <ctype.h>\n#include <limits.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <fcntl.h>\n#include <io.h>\n#include \"windows.h\"\n#include \"winnt.h\"\n#include \"winreg.h\"\n#include \"assert.h\"\n#include \"wine/debug.h\"\n\n#define REG_VAL_BUF_SIZE        4096\nDWORD WINAPI RegSetValue16(HKEY hkey, LPCSTR name, DWORD type, LPCSTR data, DWORD count);\nLPCSTR RedirectSystemDir(LPCSTR path, LPSTR to, size_t max_len);\n\n/* version for Windows 3.1 */\nstatic void processRegEntry31(char *line)\n{\n    int key_end = 0;\n    char *value;\n    int res;\n    static const char hkcr[] = \"HKEY_CLASSES_ROOT\";\n   \n    if (line[0] == '\\0') return;\n    if (memcmp(line, hkcr, sizeof(hkcr) - 1)) return;\n    line += sizeof(hkcr) - 1;\n\n    /* get key name */\n    while (line[key_end] && !isspace(line[key_end])) key_end++;\n\n    value = line + key_end;\n    while (isspace(value[0])) value++;\n\n    if (value[0] == '=') value++;\n    if (value[0] == ' ') value++; /* at most one space is skipped */\n\n    line[key_end] = '\\0';\n\n    res = RegSetValue16(HKEY_CLASSES_ROOT, line, REG_SZ, value, strlen(value) + 1);\n}\n\n/******************************************************************************\n * Processes a registry file.\n * Correctly processes comments (in # and ; form), line continuation.\n *\n * Parameters:\n *   in - input stream to read from\n *   first_chars - beginning of stream, read due to Unicode check\n */\nstatic void processRegLinesA(FILE *in)\n{\n    char *buf = NULL;  /* the line read from the input stream */\n    unsigned long line_size = REG_VAL_BUF_SIZE;\n    size_t chars_in_buf = -1;\n    char *s; /* A pointer to buf for fread */\n    char *line; /* The start of the current line */\n    unsigned long version = 0;\n\n    static const char header_31[] = \"REGEDIT\";\n\n    buf = HeapAlloc(GetProcessHeap(), 0, line_size);\n    s = buf;\n    line = buf;\n\n    while (!feof(in)) {\n        size_t size_remaining;\n        int size_to_get;\n        char *s_eol = NULL; /* various local uses */\n\n        /* Do we need to expand the buffer? */\n        assert(s >= buf && s <= buf + line_size);\n        size_remaining = line_size - (s - buf);\n        if (size_remaining < 3) /* we need at least 3 bytes of room for \\r\\n\\0 */\n        {\n            char *new_buffer;\n            size_t new_size = line_size + REG_VAL_BUF_SIZE;\n            if (new_size > line_size) /* no arithmetic overflow */\n                new_buffer = HeapReAlloc(GetProcessHeap(), 0, buf, new_size);\n            else\n                new_buffer = NULL;\n            buf = new_buffer;\n            line = buf;\n            s = buf + line_size - size_remaining;\n            line_size = new_size;\n            size_remaining = line_size - (s - buf);\n        }\n\n        /* Get as much as possible into the buffer, terminating on EOF,\n         * error or once we have read the maximum amount. Abort on error.\n         */\n        size_to_get = (size_remaining > INT_MAX ? INT_MAX : size_remaining);\n\n        chars_in_buf = fread(s, 1, size_to_get - 1, in);\n        s[chars_in_buf] = 0;\n\n        if (chars_in_buf == 0) {\n            if (ferror(in)) {\n                ExitThread(1);\n            } else {\n                assert(feof(in));\n                *s = '\\0';\n            }\n        }\n\n        /* If we didn't read the end-of-line sequence or EOF, go around again */\n        while (1)\n        {\n            s_eol = strpbrk(line, \"\\r\\n\");\n            if (!s_eol) {\n                /* Move the stub of the line to the start of the buffer so\n                 * we get the maximum space to read into, and so we don't\n                 * have to recalculate 'line' if the buffer expands */\n                MoveMemory(buf, line, strlen(line) + 1);\n                line = buf;\n                s = strchr(line, '\\0');\n                break;\n            }\n\n            /* If we find a comment line, discard it and go around again */\n            if (line [0] == '#' || line [0] == ';') {\n                if (*s_eol == '\\r' && *(s_eol + 1) == '\\n')\n                    line = s_eol + 2;\n                else\n                    line = s_eol + 1;\n                continue;\n            }\n\n            /* Remove any line feed. Leave s_eol on the last \\0 */\n            if (*s_eol == '\\r' && *(s_eol + 1) == '\\n')\n                *s_eol++ = '\\0';\n            *s_eol = '\\0';\n\n    \t    /* Check if the line is a header string */\n            if (!memcmp(line, header_31, sizeof(header_31)))\n                version = 1;\n            else if (version)\n                processRegEntry31(line);\n            line = s_eol + 1;\n        }\n    }\n    HeapFree(GetProcessHeap(), 0, buf);\n}\n\n /******************************************************************************\n * Copies file name from command line string to the buffer.\n * Rewinds the command line string pointer to the next non-spece character\n * after the file name.\n * Buffer contains an empty string if no filename was found;\n *\n * params:\n * command_line - command line current position pointer\n *      where *s[0] is the first symbol of the file name.\n * file_name - buffer to write the file name to.\n */\nvoid get_file_name(CHAR **command_line, CHAR *file_name)\n{\n    CHAR *s = *command_line;\n    int pos = 0;                /* position of pointer \"s\" in *command_line */\n    file_name[0] = 0;\n\n    if (!s[0])\n    {\n        return;\n    }\n\n    if (s[0] == '\"')\n    {\n        s++;\n        (*command_line)++;\n        while(s[0] != '\"')\n        {\n            if (!s[0])\n            {\n                ExitThread(1);\n            }\n            s++;\n            pos++;\n        }\n    } else {\n        while(s[0] && !isspace(s[0]))\n        {\n            s++;\n            pos++;\n        }\n    }\n    memcpy(file_name, *command_line, pos * sizeof((*command_line)[0]));\n    /* remove the last backslash */\n    if (file_name[pos - 1] == '\\\\')\n    {\n        file_name[pos - 1] = '\\0';\n    } else {\n        file_name[pos] = '\\0';\n    }\n\n    if (s[0])\n    {\n        s++;\n        pos++;\n    }\n    while(s[0] && isspace(s[0]))\n    {\n        s++;\n        pos++;\n    }\n    (*command_line) += pos;\n}\n\nint WINAPI WinMain16(HINSTANCE hInstance, HINSTANCE hPrevInstance,\n                   LPSTR lpCmdLine, int nCmdShow)\n{\n    LPSTR s = lpCmdLine;        /* command line pointer */\n    CHAR ch = *s;               /* current character */\n   \n    while (isspace(ch))\n    {\n        s++;\n        ch = *s;\n    } \n \n    while (ch && ((ch == '-') || (ch == '/')))\n    {\n        char chu;\n        char ch2;\n        \n        s++;\n        ch = *s;\n        ch2 = *(s+1);\n        chu = toupper(ch);\n        if (!ch2 || isspace(ch2)) \n        {\n            if (chu == 'S' || chu == 'V')\n            {\n                /* ignore these switches */\n            } else {\n                ExitThread(1);\n                break;\n            }\n            s++;\n        } else {\n            if (ch2 == ':')\n            {\n                switch (chu)\n                {\n                case 'L':\n                    /* fall through */\n                case 'R':\n                    s += 2;\n                    while (*s && !isspace(*s))\n                    {\n                        s++;\n                    }\n                    break;\n                default:\n                    ExitThread(1);\n                    break;\n                }\n            } else {\n                ExitThread(1);\n                break;\n            }\n        }\n        /* skip spaces to the next parameter */\n        ch = *s;\n        while (ch && isspace(ch))\n        {\n            s++;\n            ch = *s;\n        }\n    }\n\n    CHAR filename[MAX_PATH];\n    FILE *reg_file;\n\n    get_file_name(&s, filename);\n    if (!filename[0])\n        ExitThread(1);\n\n    while(filename[0])\n    {\n        reg_file = fopen(filename, \"r\");\n        if (!reg_file) // start dir for regedit should be the windows dir\n        {\n            char regdir[MAX_PATH];\n            RedirectSystemDir(\"C:\\\\WINDOWS\", regdir, MAX_PATH);\n            strcat(regdir, \"\\\\\");\n            strcat(regdir, filename);\n            reg_file = fopen(regdir, \"r\");\n        }\n        if (reg_file)\n        {\n            processRegLinesA(reg_file);\n        }\n        get_file_name(&s, filename);\n    }\n    ExitThread(0);\n}\n"
  },
  {
    "path": "regedit/regedit.def",
    "content": "LIBRARY regedit.exe16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "regedit/regedit.exe16.spec",
    "content": ""
  },
  {
    "path": "regedit/regedit.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>regedit</RootNamespace>\n    <ProjectGuid>{F10EEF26-6451-4988-84D4-D193A4D2BF8D}</ProjectGuid>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.exe16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.exe16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n$(OutDir)winecrt0.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\nregedit.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\nregedit.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n$(OutDir)winecrt0.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"regedit.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"regedit.exe16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"regedit.exe16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" REGEDIT -EXE &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" REGEDIT -EXE &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"regedit.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>\n"
  },
  {
    "path": "rmpatch/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp)\nadd_library(rmpatch SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/rmpatch.def rmpatch.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(rmpatch.dll16 rmpatch)\ntarget_link_libraries(rmpatch libwine winecrt0 krnl386 toolhelp)\nset_target_properties(rmpatch PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "rmpatch/Makefile.in",
    "content": "MODULE    = rmpatch.dll16\nEXTRADLLFLAGS = -m16\n\nC_SRCS = rmpatch.c instr.c\n"
  },
  {
    "path": "rmpatch/instr.c",
    "content": "/*\n * Emulation of privileged instructions\n *\n * Copyright 1995 Alexandre Julliard\n * Copyright 2005 Ivan Leo Puoti\n * Copyright 2005 Laurent Pinchart\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; ifnot, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n// modified to only apply to real mode windows programs running in protected mode\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/winuser16.h\"\n#include \"wine/exception.h\"\n\n/* macros to set parts of a DWORD */\n#define SET_LOWORD(dw,val)  ((dw) = ((dw) & 0xffff0000) | LOWORD(val))\n#define SET_LOBYTE(dw,val)  ((dw) = ((dw) & 0xffffff00) | LOBYTE(val))\n#define ADD_LOWORD(dw,val)  ((dw) = ((dw) & 0xffff0000) | LOWORD((DWORD)(dw)+(val)))\n\nstatic WORD dosmem_0040H = 0; \nstatic WORD dosmem_0000H = 0;\n\nstatic inline void add_stack(CONTEXT *context, int offset)\n{\n    ADD_LOWORD(context->Esp, offset);\n}\n\nstatic inline void *make_ptr(CONTEXT *context, DWORD seg, DWORD off, int long_addr)\n{\n    return (char *) MapSL(MAKESEGPTR(seg, off));\n}\n\nstatic inline void *get_stack(CONTEXT *context)\n{\n    return (char *) MapSL(MAKESEGPTR(context->SegSs, context->Esp));\n}\n\n/***********************************************************************\n *           INSTR_ReplaceSelector\n *\n * Try to replace an invalid selector by a valid one.\n * The only selector where it is allowed to do \"mov ax,40;mov es,ax\"\n * is the so called 'bimodal' selector 0x40, which points to the BIOS\n * data segment. Used by (at least) Borland products (and programs compiled\n * using Borland products).\n *\n * See Undocumented Windows, Chapter 5, __0040.\n */\nstatic BOOL INSTR_ReplaceSelector(CONTEXT *context, WORD *sel)\n{\n    if(*sel == 0x40)\n    {\n        DOSVM_start_bios_timer();\n        *sel = dosmem_0040H;\n        return TRUE;\n    }\n    *sel = dosmem_0000H; // xerox presents does a use after free with a global memory block\n    return TRUE;\n}\n\nstatic WORD get_reg_word(CONTEXT *context, BYTE regmodrm)\n{\n    WORD ret;\n    switch((regmodrm >> 3) & 7)\n    {\n    case 0: ret = context->Eax; break;\n    case 1: ret = context->Ecx; break;\n    case 2: ret = context->Edx; break;\n    case 3: ret = context->Ebx; break;\n    case 4: ret = context->Esp; break;\n    case 5: ret = context->Ebp; break;\n    case 6: ret = context->Esi; break;\n    case 7: ret = context->Edi; break;\n    }\n    return ret;\n}\n\nstatic BYTE get_reg_byte(CONTEXT *context, BYTE regmodrm)\n{\n    BYTE ret;\n    switch((regmodrm >> 3) & 7)\n    {\n    case 0: ret = context->Eax; break;\n    case 1: ret = context->Ecx; break;\n    case 2: ret = context->Edx; break;\n    case 3: ret = context->Ebx; break;\n    case 4: ret = context->Eax >> 8; break;\n    case 5: ret = context->Ecx >> 8; break;\n    case 6: ret = context->Edx >> 8; break;\n    case 7: ret = context->Ebx >> 8; break;\n    }\n    return ret;\n}\n\n/* store an operand into a register */\nstatic void store_reg_word(CONTEXT *context, BYTE regmodrm, const BYTE *addr)\n{\n    WORD data;\n    __TRY\n    {\n        data = *(const WORD *)addr;\n    }\n    __EXCEPT_ALL\n    {\n        data = 0;\n    }\n    __ENDTRY\n    switch((regmodrm >> 3) & 7)\n    {\n    case 0:\n        SET_LOWORD(context->Eax, data);\n        break;\n    case 1:\n        SET_LOWORD(context->Ecx, data);\n        break;\n    case 2:\n        SET_LOWORD(context->Edx, data);\n        break;\n    case 3:\n        SET_LOWORD(context->Ebx, data);\n        break;\n    case 4:\n        SET_LOWORD(context->Esp, data);\n        break;\n    case 5:\n        SET_LOWORD(context->Ebp, data);\n        break;\n    case 6:\n        SET_LOWORD(context->Esi, data);\n        break;\n    case 7:\n        SET_LOWORD(context->Edi, data);\n        break;\n    }\n}\n\n/* store an operand into a byte register */\nstatic void store_reg_byte(CONTEXT *context, BYTE regmodrm, const BYTE *addr)\n{\n    BYTE data;\n    __TRY\n    {\n        data = *addr;\n    }\n    __EXCEPT_ALL\n    {\n        data = 0;\n    }\n    __ENDTRY\n    switch((regmodrm >> 3) & 7)\n    {\n    case 0: context->Eax = (context->Eax & 0xffffff00) | data; break;\n    case 1: context->Ecx = (context->Ecx & 0xffffff00) | data; break;\n    case 2: context->Edx = (context->Edx & 0xffffff00) | data; break;\n    case 3: context->Ebx = (context->Ebx & 0xffffff00) | data; break;\n    case 4: context->Eax = (context->Eax & 0xffff00ff) | (data << 8); break;\n    case 5: context->Ecx = (context->Ecx & 0xffff00ff) | (data << 8); break;\n    case 6: context->Edx = (context->Edx & 0xffff00ff) | (data << 8); break;\n    case 7: context->Ebx = (context->Ebx & 0xffff00ff) | (data << 8); break;\n    }\n}\n\nstatic BYTE *get_addr(int seg, int base)\n{\n    LDT_ENTRY entry;\n    /* Make sure the segment and offset are valid */\n    if(wine_ldt_is_system(seg)) return (BYTE *)base;\n    if((seg & 7) != 7) return NULL;\n    wine_ldt_get_entry(seg, &entry);\n    if(wine_ldt_is_empty(&entry)) return NULL;\n    if(wine_ldt_get_limit(&entry) < base) return NULL;\n    return (BYTE *)wine_ldt_get_base(&entry) + base;\n}\n\n/***********************************************************************\n *           INSTR_GetOperandAddr\n *\n * Return the address of an instruction operand (from the mod/rm byte).\n */\nstatic BYTE *INSTR_GetOperandAddr(CONTEXT *context, BYTE *instr, int segprefix, int *len)\n{\n    int mod, rm, base = 0, seg = 0, off;\n\n#define GET_VAL(val,type) \\\n    { *val = *(type *)instr; instr += sizeof(type); *len += sizeof(type); }\n\n    *len = 0;\n    GET_VAL(&mod, BYTE);\n    rm = mod & 7;\n    mod >>= 6;\n\n    if(mod == 3)\n    {\n        switch(rm)\n        {\n        case 0: return (BYTE *)&context->Eax;\n        case 1: return (BYTE *)&context->Ecx;\n        case 2: return (BYTE *)&context->Edx;\n        case 3: return (BYTE *)&context->Ebx;\n        case 4: return (BYTE *)&context->Esp;\n        case 5: return (BYTE *)&context->Ebp;\n        case 6: return (BYTE *)&context->Esi;\n        case 7: return (BYTE *)&context->Edi;\n        }\n    }\n\n    switch(rm)\n    {\n    case 0:  /* ds:(bx,si) */\n        base = LOWORD(context->Ebx) + LOWORD(context->Esi);\n        seg  = context->SegDs;\n        break;\n    case 1:  /* ds:(bx,di) */\n        base = LOWORD(context->Ebx) + LOWORD(context->Edi);\n        seg  = context->SegDs;\n        break;\n    case 2:  /* ss:(bp,si) */\n        base = LOWORD(context->Ebp) + LOWORD(context->Esi);\n        seg  = context->SegSs;\n        break;\n    case 3:  /* ss:(bp,di) */\n        base = LOWORD(context->Ebp) + LOWORD(context->Edi);\n        seg  = context->SegSs;\n        break;\n    case 4:  /* ds:(si) */\n        base = LOWORD(context->Esi);\n        seg  = context->SegDs;\n        break;\n    case 5:  /* ds:(di) */\n        base = LOWORD(context->Edi);\n        seg  = context->SegDs;\n        break;\n    case 6:  /* ss:(bp) */\n        base = LOWORD(context->Ebp);\n        seg  = context->SegSs;\n        break;\n    case 7:  /* ds:(bx) */\n        base = LOWORD(context->Ebx);\n        seg  = context->SegDs;\n        break;\n    }\n\n    switch(mod)\n    {\n    case 0:\n        if(rm == 6)  /* special case: ds:(disp16) */\n        {\n            GET_VAL(&base, WORD);\n            seg  = context->SegDs;\n        }\n        break;\n\n    case 1:  /* 8-bit disp */\n        GET_VAL(&off, BYTE);\n        base += (signed char)off;\n        break;\n\n    case 2:  /* 16-bit disp */\n        GET_VAL(&off, WORD);\n        base += (signed short)off;\n        break;\n    }\n    base &= 0xffff;\n\n    if(segprefix != -1) seg = segprefix;\n\n    if(!seg) seg = dosmem_0000H;\n\n    return get_addr(seg, base);\n#undef GET_VAL\n}\n\n\n/***********************************************************************\n *           INSTR_EmulateLDS\n *\n * Emulate the LDS instruction.\n */\nstatic BOOL INSTR_EmulateLDS(CONTEXT *context, BYTE *instr, int segprefix, int *len)\n{\n    WORD seg;\n    BYTE *regmodrm = instr + 1;\n    BYTE *addr = INSTR_GetOperandAddr(context, regmodrm, segprefix, len);\n    if(!addr)\n        return FALSE;  /* Unable to emulate it */\n    seg = *(WORD *)(addr + 2);\n\n    if(!INSTR_ReplaceSelector(context, &seg))\n        return FALSE;  /* Unable to emulate it */\n\n    /* Now store the offset in the correct register */\n\n    store_reg_word(context, *regmodrm, addr);\n\n    /* Store the correct segment in the segment register */\n\n    switch(*instr)\n    {\n    case 0xc4: context->SegEs = seg; break;  /* les */\n    case 0xc5: context->SegDs = seg; break;  /* lds */\n    }\n\n    /* Add the opcode size to the total length */\n\n    *len += 1;\n    return TRUE;\n}\n\n/***********************************************************************\n *           rmpatch_emulate_instruction\n *\n * Emulate a privileged instruction.\n * Returns exception continuation status.\n */\nBOOL rmpatch_emulate_instruction(CONTEXT *context)\n{\n    int prefix, segprefix, prefixlen, len, repX;\n    BYTE *instr;\n\n    if(!dosmem_0000H)\n        dosmem_0000H = (WORD)GetProcAddress16(GetModuleHandle16(\"KERNEL\"), (LPCSTR)183);\n    if(!dosmem_0040H)\n        dosmem_0040H = (WORD)GetProcAddress16(GetModuleHandle16(\"KERNEL\"), (LPCSTR)193);\n\n    instr = make_ptr(context, context->SegCs, context->Eip, TRUE);\n    if(!instr) return FALSE;\n\n    /* First handle any possible prefix */\n\n    segprefix = -1;  /* no prefix */\n    prefix = 1;\n    repX = 0;\n    prefixlen = 0;\n    while(prefix)\n    {\n        switch(*instr)\n        {\n        case 0x2e:\n            segprefix = context->SegCs;\n            break;\n        case 0x36:\n            segprefix = context->SegSs;\n            break;\n        case 0x3e:\n            segprefix = context->SegDs;\n            break;\n        case 0x26:\n            segprefix = context->SegEs;\n            if (!segprefix)\n            {\n                context->SegEs = dosmem_0000H;\n                return;\n            }\n            break;\n        case 0x64:\n            break;\n        case 0xf0:  /* lock */\n\t    break;\n        case 0xf2:  /* repne */\n\t    repX = 1;\n\t    break;\n        case 0xf3:  /* repe */\n\t    repX = 2;\n            break;\n        default:\n            prefix = 0;  /* no more prefixes */\n            break;\n        }\n        if(prefix)\n        {\n            instr++;\n            prefixlen++;\n        }\n    }\n\n    /* Now look at the actual instruction */\n\n    switch(*instr)\n    {\n        case 0x07: /* pop es */\n        case 0x17: /* pop ss */\n        case 0x1f: /* pop ds */\n            {\n                WORD seg = *(WORD *)get_stack(context);\n                if(INSTR_ReplaceSelector(context, &seg))\n                {\n                    switch(*instr)\n                    {\n                    case 0x07: context->SegEs = seg; break;\n                    case 0x17: context->SegSs = seg; break;\n                    case 0x1f: context->SegDs = seg; break;\n                    }\n                    add_stack(context, 2);\n                    context->Eip += prefixlen + 1;\n                    return TRUE;\n                }\n            }\n            break;  /* Unable to emulate it */\n\n        case 0x2b:\n            {\n                BYTE *addr = INSTR_GetOperandAddr(context, instr + 1, segprefix, &len);\n                if (addr) // this is likely unnecessary as there's no other way this can be reached                 \n                    break;\n                context->Eip += prefixlen + len + 1;\n                return TRUE;\n            }                \n\n        case 0xfe:\n            {\n                BYTE *addr = INSTR_GetOperandAddr(context, instr + 1, segprefix, &len);\n                switch (instr[1] & 0x38)\n                {\n                    case 0:\n                        *addr++;\n                        break;\n                    case 8:\n                        *addr--;\n                        break;\n                    default:\n                        return FALSE;\n                }\n                context->Eip += prefixlen + len + 1;\n                return TRUE;\n            }                \n\n        case 0x88: /* mov Gb, Eb */\n        case 0x89: /* mov Gv, Ev */\n            {\n                BYTE *addr = INSTR_GetOperandAddr(context, instr + 1, segprefix, &len);\n                switch (*instr)\n                {\n                    case 0x88: *addr = get_reg_byte(context, instr[1]); break;\n                    case 0x89: *(WORD *)addr = get_reg_word(context, instr[1]); break;\n                }\n                context->Eip += prefixlen + len + 1;\n                return TRUE;\n            }\n            break;  /* Unable to emulate it */\n\n        case 0x8a: /* mov Eb, Gb */\n        case 0x8b: /* mov Ev, Gv */\n            {\n                BYTE *addr = INSTR_GetOperandAddr(context, instr + 1, segprefix, &len);\n                switch (*instr)\n                {\n                    case 0x8a: store_reg_byte(context, instr[1], addr); break;\n                    case 0x8b: store_reg_word(context, instr[1], addr); break;\n                }\n                context->Eip += prefixlen + len + 1;\n                return TRUE;\n            }\n            break;  /* Unable to emulate it */\n\n        case 0x8c:\n            {\n                BYTE *addr = INSTR_GetOperandAddr(context, instr + 1, segprefix, &len);\n                DWORD seg;\n                switch((instr[1] >> 3) & 7)\n                {\n                    case 0:\n                        seg = context->SegEs;\n                        break;\n                    case 1:\n                        seg = context->SegCs;\n                        break;\n                    case 2:\n                        seg = context->SegSs;\n                        break;\n                    case 3:\n                        seg = context->SegDs;\n                        break;\n                    default:\n                        seg = -1;\n                        break;\n                }\n                if(seg != -1)\n                {\n                    *(WORD *)addr = seg;\n                    context->Eip += prefixlen + len + 1;\n                    return TRUE;\n                }\n            }\n            break;  /* Unable to emulate it */\n\n\n        case 0x8e: /* mov XX,segment_reg */\n            {\n                WORD seg;\n                BYTE *addr = INSTR_GetOperandAddr(context, instr + 1, segprefix, &len);\n                if(!addr)\n                    break;  /* Unable to emulate it */\n                seg = *(WORD *)addr;\n                if(!INSTR_ReplaceSelector(context, &seg))\n                    break;  /* Unable to emulate it */\n\n                switch((instr[1] >> 3) & 7)\n                {\n                case 0:\n                    context->SegEs = seg;\n                    context->Eip += prefixlen + len + 1;\n                    return TRUE;\n                case 1:  /* cs */\n                    break;\n                case 2:\n                    context->SegSs = seg;\n                    context->Eip += prefixlen + len + 1;\n                    return TRUE;\n                case 3:\n                    context->SegDs = seg;\n                    context->Eip += prefixlen + len + 1;\n                    return TRUE;\n                case 4:\n                    context->SegFs = seg;\n                    context->Eip += prefixlen + len + 1;\n                    return TRUE;\n                case 5:\n                    context->SegGs = seg;\n                    context->Eip += prefixlen + len + 1;\n                    return TRUE;\n                case 6:  /* unused */\n                case 7:  /* unused */\n                    break;\n                }\n            }\n            break;  /* Unable to emulate it */\n\n        case 0x8f: /* pop Ev */\n            {\n                if (instr[1] & 0x38)\n                    break;\n                WORD data = *(WORD *)get_stack(context);\n                BYTE *addr = INSTR_GetOperandAddr(context, instr + 1, segprefix, &len);\n                *(WORD *)addr = data;\n                add_stack(context, 2);\n                context->Eip += prefixlen + len + 1;\n                return TRUE;\n            }\n\n        case 0xa2:\n        case 0xa3:\n            {\n                BYTE *addr = get_addr((segprefix != -1) ? segprefix : context->SegDs, *(WORD *)(instr + 1));\n                if(addr)\n                {\n                    if(*instr == 0xa3)\n                        *(WORD *)addr = context->Eax;\n                    else\n                        *addr = context->Eax;\n                    context->Eip += prefixlen + 3;\n                    return TRUE;\n                }\n                break;\n            }\n\n        case 0xc4: /* les addr,reg */\n        case 0xc5: /* lds addr,reg */\n            if(INSTR_EmulateLDS(context, instr, segprefix, &len))\n            {\n                context->Eip += prefixlen + len;\n                return TRUE;\n            }\n            break;  /* Unable to emulate it */\n\n        case 0xc6: /* mov Eb, Ib */\n        case 0xc7: /* mov Ev, Iv */\n            {\n                if (instr[1] & 0x38)\n                    break;\n                BYTE *addr = INSTR_GetOperandAddr(context, instr + 1, segprefix, &len);\n                __TRY\n                {\n                    switch (*instr)\n                    {\n                        case 0xc6: *addr = instr[2]; break;\n                        case 0xc7: *(WORD *)addr = instr[2] | (instr[3] << 8); break;\n                    }\n                }\n                __EXCEPT_ALL\n                {\n                }\n                __ENDTRY\n                context->Eip += prefixlen + ((*instr == 0xc7) ? 2 : 1) + len + 1;\n                return TRUE;\n            }\n            break;  /* Unable to emulate it */\n\n        case 0xff:\n            {\n                if ((instr[1] & 0x38) != 0x18)\n                    break;\n                BYTE *addr = INSTR_GetOperandAddr(context, instr + 1, segprefix, &len);\n                // this is a standard pattern for MSC _int86\n                if (*(WORD *)(addr + 2) != context->SegSs)\n                    break;\n                static WORD stackcode = NULL;\n                if (!stackcode)\n                    stackcode = AllocDStoCSAlias16(context->SegSs);\n                *(WORD *)(addr + 2) = stackcode;\n                return TRUE;\n            }\n            break;\n\n    }\n    return FALSE;\n}\n\n"
  },
  {
    "path": "rmpatch/rmpatch.c",
    "content": "#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/winbase16.h\"\n#include \"../krnl386/kernel16_private.h\"\n\n// htask is an ldt selector above 0x1000, use a gdt selector below 0x1000 here\n// it's only used as an index\n#define FAKE_HTASK16 0xf01\n\nBOOL16 WINAPI InterruptRegister16(HTASK16 htask, FARPROC16 callback);\nBOOL16 WINAPI InterruptUnRegister16(HTASK16 htask);\nBOOL16 WINAPI NotifyRegister16(HTASK16 htask, FARPROC16 lpfnCallback, WORD wFlags);\nBOOL16 WINAPI NotifyUnRegister16(HTASK16 htask);\nBOOL16 WINAPI IsOldWindowsTask(HINSTANCE16 hinst);\nvoid WINAPI next_intcb(CONTEXT *context);\n\n#include <pshpack1.h>\ntypedef struct {\n\tDWORD\tdwSize;\n\tWORD\twSelector;\n\tWORD\twSegNum;\n\tWORD\twType;\t\t/* bit 0 set if this is a code segment */\n\tWORD\twcInstance;\t/* only valid for data segment */\n\tSEGPTR  lpstrModuleName;\n} NFYLOADSEG;\n#include <poppack.h>\n\nBOOL WINAPI checkpatch(WORD id, DWORD data)\n{\n\tif (id != 1 /*NFY_LOADSEG*/)\n\t\treturn;\n\tNFYLOADSEG *seg = (NFYLOADSEG *)MapSL(data);\n\tchar *name = (char *)MapSL(seg->lpstrModuleName);\n\tif (GetExpWinVer16(GetModuleHandle16(name)) >= 0x300)\n\t\treturn 0;\n\tchar *mem = MapSL(MAKELONG(0, seg->wSelector));\n\tWORD segment = seg->wSegNum;\n\tif (!memcmp(mem, \"MSEM87\", 6)) // check for linked in MS 8087 emulator\n\t{\n\t\tFARPROC16 fpmath = GetProcAddress16(LoadLibrary16(\"WIN87EM.DLL\"), \"__FPMATH\");\n\t\tmem[0x24] = 0xea;  // JMP FAR\n\t\t*(FARPROC16 *)(mem + 0x25) = fpmath;\n\t}\n\telse if (!strcmp(name, \"MGXWIN20\"))\n\t{\n\t\t// drawing lib from Micrographics Designer 1.1 (segment arithmitic)\n\t\tif ((segment == 13) && (*(DWORD *)(mem + 0x1e4d) == 0x000fe781))\n\t\t{\n\t\t\tconst char patch[] = {0x90, 0x90, 0x90, 0x90, 0x03, 0xf9, 0xc3};\n\t\t\tmemcpy(mem + 0x1e4d, patch, sizeof(patch));\n\t\t}\n\t}\n\telse if (!strcmp(name, \"GLIB\"))\n\t{\n\t\t// drawing lib from Micrographics Portfolio 1.0 (segment arithmitic)\n\t\tif ((segment == 1) && (*(DWORD *)(mem + 0x274c) == 0x000fe781))\n\t\t{\n\t\t\tconst char patch[] = {0x90, 0x90, 0x90, 0x90, 0x03, 0xf9, 0xc3};\n\t\t\tmemcpy(mem + 0x274c, patch, sizeof(patch));\n\t\t}\n\t}\n\telse if (!strcmp(name, \"XP\"))\n\t{\n\t\t// Xerox Presents (calls int 13h to parse root dir unnecessarily)\n\t\tif ((segment == 71) && (*(DWORD *)(mem + 0x11f2) == 0xec8b5545))\n\t\t\tmem[0x11f2] = 0xcb;\n\t}\n\telse if (!strcmp(name, \"BOP\"))\n\t{\n\t\t// use MM_ANISOTROPIC instead of MM_ISOTROPIC and fix viewport\n\t\tif ((segment == 2) && (*(BYTE *)(mem + 0x0d) == 0x07))\n\t\t{\n\t\t\tconst char patch[] = {0xb8, 0xd0, 0x02, 0x50, 0xb8, 0x49, 0x01, 0x50};\n\t\t\tmemcpy(mem + 0x2a, patch, sizeof(patch));\n\t\t\tmem[0x0d] = 0x08;\n\t\t\tmem[0x2c1] = 0x34;\n\t\t}\n\t}\n\telse if (!strcmp(name, \"WFE\"))\n\t{\n\t\t// ZSoft PTF Outline Editor (uninitialized stack variable)\n\t\tif ((segment == 3) && (*(DWORD *)(mem + 0x8c5) == 0x5efc468b))\n\t\t{\n\t\t\tmem[0x8c5] = 0xb8;\n\t\t\tmem[0x8c6] = 0x01;\n\t\t\tmem[0x8c7] = 0x00;\n\t\t}\n\t}\n\treturn 0;\n}\n\n#include <pshpack1.h>\nstruct stkframe\n{\n\tDWORD ret;\n\tWORD ax;\n\tWORD err;\n\tWORD handle;\n\tDWORD addr;\n\tWORD flags;\n};\n#include <poppack.h>\n\nvoid WINAPI intcb(CONTEXT *context)\n{\n\tstruct stkframe *frame = MapSL(MAKESEGPTR(context->SegSs, context->Esp));\n\tif((frame->err == 0xd) && IsOldWindowsTask(GetCurrentTask()))\n\t{\n\t\tcontext->Esp += sizeof(struct stkframe);\n\t\tcontext->Eip = OFFSETOF(frame->addr);\n\t\tcontext->SegCs = SELECTOROF(frame->addr);\n\t\tcontext->EFlags = frame->flags;\n\t\tif(rmpatch_emulate_instruction(context))\n\t\t\treturn;\n\t\tcontext->Esp -= sizeof(struct stkframe);\n\t}\n\tcontext->Esp += 4;\n\tnext_intcb(context);\n}\n\nBOOL WINAPI DllEntryPoint(DWORD fdwReason, HINSTANCE16 hinstDLL, WORD ds,\n\t\t\t  WORD wHeapSize, DWORD dwReserved1, WORD wReserved2)\n{\n\tswitch(fdwReason)\n\t{\n\tcase DLL_PROCESS_ATTACH:\n\t\tLoadLibrary16(\"TOOLHELP\");\n\t\tInterruptRegister16(FAKE_HTASK16, GetProcAddress16(GetModuleHandle16(\"RMPATCH\"), \"intcb\"));\n\t\tNotifyRegister16(FAKE_HTASK16, GetProcAddress16(GetModuleHandle16(\"RMPATCH\"), \"checkpatch\"), 0 /*NF_NORMAL*/);\n\t\tbreak;\n\tcase DLL_PROCESS_DETACH:\n\t\tInterruptUnRegister16(FAKE_HTASK16);\n\t\tNotifyUnRegister16(FAKE_HTASK16);\n\t\tFreeLibrary16(\"TOOLHELP\");\n\t\tbreak;\n\t}\n\treturn TRUE;\n}\n"
  },
  {
    "path": "rmpatch/rmpatch.def",
    "content": "LIBRARY rmpatch.dll16\n\nEXPORTS\n  _wine_spec_dos_header; @1 DATA PRIVATE"
  },
  {
    "path": "rmpatch/rmpatch.dll16.spec",
    "content": "1 pascal DllEntryPoint(long word word word long word) DllEntryPoint\n2 pascal -register intcb() intcb\n3 pascal checkpatch(word long) checkpatch\n"
  },
  {
    "path": "rmpatch/rmpatch.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>rmpatch</RootNamespace>\n    <ProjectGuid>{3D889B37-09C8-4030-B815-830566CD57A5}</ProjectGuid>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;$(OutDir)toolhelp.lib;\n%(AdditionalDependencies)</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\nrmpatch.def\n</ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\nrmpatch.def\n</ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;$(OutDir)toolhelp.lib;\n%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"rmpatch.c\" />\n    <ClCompile Include=\"instr.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"rmpatch.dll16.obj\">\n       <FileType>Document</FileType>\n       <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">as --32 -o rmpatch.dll16.obj ddeml.dll16.asm</Command>\n       <AdditionalInputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">rmpatch.dll16.asm;%(AdditionalInputs)</AdditionalInputs>\n    </Object>\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"rmpatch.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" RMPATCH &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" RMPATCH &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"rmpatch.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>\n"
  },
  {
    "path": "shell/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp)\nadd_library(shell SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/shell.def shell.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(shell.dll16 shell)\ntarget_link_libraries(shell libwine winecrt0 krnl386 shell32.lib)\nset_target_properties(shell PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "shell/shell.c",
    "content": "/*\n * \t\t\t\tShell Library Functions\n *\n * Copyright 1998 Marcus Meissner\n * Copyright 2000 Juergen Schmied\n * Copyright 2002 Eric Pouech\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdarg.h>\n#include <stdlib.h>\n#include <string.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#include <ctype.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winreg.h\"\n#include \"wownt32.h\"\n#include \"shellapi.h\"\n#include \"winuser.h\"\n#include \"wingdi.h\"\n#include \"shlobj.h\"\n#include \"shlwapi.h\"\n\n#include \"wine/winbase16.h\"\n#include \"wine/winuser16.h\"\n\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(shell);\n\nextern HINSTANCE WINAPI WOWShellExecute(HWND hWnd, LPCSTR lpOperation,LPCSTR lpFile,\n                                        LPCSTR lpParameters,LPCSTR lpDirectory,\n                                        INT iShowCmd, void *callback);\n\n#define HINSTANCE_32(h16)\t((HINSTANCE)(ULONG_PTR)(h16))\n#define HINSTANCE_16(h32)\t(LOWORD(h32))\n\ntypedef struct {     /* structure for dropped files */\n WORD     wSize;\n POINT16  ptMousePos;\n BOOL16   fInNonClientArea;\n /* memory block with filenames follows */\n} DROPFILESTRUCT16, *LPDROPFILESTRUCT16;\n\nstatic const char lpstrMsgWndCreated[] = \"OTHERWINDOWCREATED\";\nstatic const char lpstrMsgWndDestroyed[] = \"OTHERWINDOWDESTROYED\";\nstatic const char lpstrMsgShellActivate[] = \"ACTIVATESHELLWINDOW\";\n\nstatic HWND\tSHELL_hWnd = 0;\nstatic HHOOK\tSHELL_hHook = 0;\nstatic UINT\tuMsgWndCreated = 0;\nstatic UINT\tuMsgWndDestroyed = 0;\nstatic UINT\tuMsgShellActivate = 0;\n\nLPCSTR krnl386_search_executable_file(LPCSTR lpFile, LPSTR buf, SIZE_T size, BOOL search_builtin);\nstatic HICON convert_icon_to_32( HICON16 icon16 )\n{\n\tif (!icon16) return 0;\n    CURSORICONINFO *info = GlobalLock16( icon16 );\n    void *and_bits = info + 1;\n    void *xor_bits = (BYTE *)and_bits + info->nHeight * 2 * ((info->nWidth + 15) / 16);\n    HICON ret = CreateIcon( 0, info->nWidth, info->nHeight, info->bPlanes, info->bBitsPerPixel,\n                            and_bits, xor_bits );\n    GlobalUnlock16( icon16 );\n    return ret;\n}\n\nstatic HICON16 convert_icon_to_16( HINSTANCE16 inst, HICON icon )\n{\n\tif (!icon) return 0;\n    static HICON16 (WINAPI *pCreateIcon16)(HINSTANCE16,INT16,INT16,BYTE,BYTE,LPCVOID,LPCVOID);\n    ICONINFO info;\n    BITMAP bm;\n    UINT and_size, xor_size;\n    void *xor_bits = NULL, *and_bits;\n    HICON16 handle = 0;\n\n    if (!pCreateIcon16 &&\n        !(pCreateIcon16 = (void *)GetProcAddress( GetModuleHandleA(\"user.exe16\"), \"CreateIcon16\" )))\n        return 0;\n\n    if (!(GetIconInfo( icon, &info ))) return 0;\n    GetObjectW( info.hbmMask, sizeof(bm), &bm );\n    and_size = bm.bmHeight * bm.bmWidthBytes;\n    if (!(and_bits = HeapAlloc( GetProcessHeap(), 0, and_size ))) goto done;\n    GetBitmapBits( info.hbmMask, and_size, and_bits );\n    if (info.hbmColor)\n    {\n        GetObjectW( info.hbmColor, sizeof(bm), &bm );\n        xor_size = bm.bmHeight * bm.bmWidthBytes;\n        if (!(xor_bits = HeapAlloc( GetProcessHeap(), 0, xor_size ))) goto done;\n        GetBitmapBits( info.hbmColor, xor_size, xor_bits );\n    }\n    else\n    {\n        bm.bmHeight /= 2;\n        xor_bits = (char *)and_bits + and_size / 2;\n    }\n    handle = pCreateIcon16( inst, bm.bmWidth, bm.bmHeight, bm.bmPlanes, bm.bmBitsPixel,\n                            and_bits, xor_bits );\ndone:\n    HeapFree( GetProcessHeap(), 0, and_bits );\n    if (info.hbmColor)\n    {\n        HeapFree( GetProcessHeap(), 0, xor_bits );\n        DeleteObject( info.hbmColor );\n    }\n    DeleteObject( info.hbmMask );\n    DestroyIcon( icon );\n    return handle;\n}\n\n/***********************************************************************\n * DllEntryPoint [SHELL.101]\n *\n * Initialization code for shell.dll. Automatically loads the\n * 32-bit shell32.dll to allow thunking up to 32-bit code.\n *\n * RETURNS\n *  Success: TRUE. Initialization completed successfully.\n *  Failure: FALSE.\n */\nBOOL WINAPI SHELL_DllEntryPoint(DWORD Reason, HINSTANCE16 hInst,\n\t\t\t\tWORD ds, WORD HeapSize, DWORD res1, WORD res2)\n{\n    return TRUE;\n}\n\n/*************************************************************************\n *\t\t\t\tDragAcceptFiles\t\t[SHELL.9]\n */\nvoid WINAPI DragAcceptFiles16(HWND16 hWnd, BOOL16 b)\n{\n  DragAcceptFiles(HWND_32(hWnd), b);\n}\n\n/*************************************************************************\n *\t\t\t\tDragQueryFile\t\t[SHELL.11]\n */\nUINT16 WINAPI DragQueryFile16(\n\tHDROP16 hDrop,\n\tWORD wFile,\n\tLPSTR lpszFile,\n\tWORD wLength)\n{\n \tLPSTR lpDrop;\n\tUINT i = 0;\n\tLPDROPFILESTRUCT16 lpDropFileStruct = (LPDROPFILESTRUCT16) GlobalLock16(hDrop);\n\n\tTRACE(\"(%04x, %x, %p, %u)\\n\", hDrop,wFile,lpszFile,wLength);\n\n\tif(!lpDropFileStruct) goto end;\n\n\tlpDrop = (LPSTR) lpDropFileStruct + lpDropFileStruct->wSize;\n\n\twhile (i++ < wFile)\n\t{\n\t  while (*lpDrop++); /* skip filename */\n\t  if (!*lpDrop)\n\t  {\n\t    i = (wFile == 0xFFFF) ? i : 0;\n\t    goto end;\n\t  }\n\t}\n\n\ti = strlen(lpDrop);\n\tif (!lpszFile ) goto end;   /* needed buffer size */\n\tlstrcpynA (lpszFile, lpDrop, wLength);\nend:\n\tGlobalUnlock16(hDrop);\n\treturn i;\n}\n\n/*************************************************************************\n *\t\t\t\tDragFinish\t\t[SHELL.12]\n */\nvoid WINAPI DragFinish16(HDROP16 h)\n{\n    TRACE(\"\\n\");\n    GlobalFree16(h);\n}\n\n\n/*************************************************************************\n *\t\t\t\tDragQueryPoint\t\t[SHELL.13]\n */\nBOOL16 WINAPI DragQueryPoint16(HDROP16 hDrop, POINT16 *p)\n{\n  LPDROPFILESTRUCT16 lpDropFileStruct;\n  BOOL16           bRet;\n  TRACE(\"\\n\");\n  lpDropFileStruct = (LPDROPFILESTRUCT16) GlobalLock16(hDrop);\n\n  memcpy(p,&lpDropFileStruct->ptMousePos,sizeof(POINT16));\n  bRet = lpDropFileStruct->fInNonClientArea;\n\n  GlobalUnlock16(hDrop);\n  return bRet;\n}\n\n/*************************************************************************\n *             FindExecutable   (SHELL.21)\n */\nHINSTANCE16 WINAPI FindExecutable16( LPCSTR lpFile, LPCSTR lpDirectory,\n                                     LPSTR lpResult )\n{\n    HINSTANCE hInst = FindExecutableA( lpFile, lpDirectory, lpResult );\n    if (hInst == ERROR_FILE_NOT_FOUND)\n    {\n        if (!lpDirectory || !*lpDirectory)\n        {\n            char buf[MAX_PATH];\n            if (krnl386_search_executable_file(lpFile, buf, ARRAYSIZE(buf), TRUE) == buf)\n            {\n                hInst = FindExecutableA(buf, NULL, lpResult);\n            }\n        }\n    }\n    GetShortPathNameA(lpResult, lpResult, strlen(lpResult) + 1);\n    return HINSTANCE_16(hInst);\n}\n\n/*************************************************************************\n *             AboutDlgProc   (SHELL.33)\n */\nBOOL16 WINAPI AboutDlgProc16( HWND16 hWnd, UINT16 msg, WPARAM16 wParam,\n                               LPARAM lParam )\n{\n    FIXME( \"stub\\n\" );\n    return FALSE;\n}\n\n\n/*************************************************************************\n *             ShellAbout   (SHELL.22)\n */\nBOOL16 WINAPI ShellAbout16( HWND16 hWnd, LPCSTR szApp, LPCSTR szOtherStuff, HICON16 icon16 )\n{\n    HICON icon = convert_icon_to_32( icon16 );\n    BOOL ret = ShellAboutA( HWND_32(hWnd), szApp, szOtherStuff, icon );\n    DestroyIcon( icon );\n    return ret;\n}\n\n\n__declspec(dllimport) HICON NE_ExtractIcon(LPCSTR lpszExeFileName,\n\tHICON * RetPtr,\n\tINT nIconIndex,\n\tUINT nIcons,\n\tUINT cxDesired,\n\tUINT cyDesired,\n\tUINT *pIconId,\n\tUINT flags);\nstatic inline UINT PrivateExtractIconsNE(\n\tLPCSTR lpwstrFile,\n\tint nIndex,\n\tint sizeX,\n\tint sizeY,\n\tHICON * phicon, /* [out] pointer to array of nIcons HICON handles */\n\tUINT* pIconId,  /* [out] pointer to array of nIcons icon identifiers or NULL */\n\tUINT nIcons,    /* [in] number of icons to retrieve */\n\tUINT flags)    /* [in] LR_* flags used by LoadImage */\n{\n\tHICON ret;\n\treturn (ret = PrivateExtractIconsA(lpwstrFile, nIndex, sizeX, sizeY, phicon, pIconId, nIcons, flags))\n\t\t? ret : NE_ExtractIcon(lpwstrFile, phicon, nIndex, nIcons, sizeX, sizeY, pIconId, flags);\n}\n/*************************************************************************\n *\t\t\tInternalExtractIcon\t\t[SHELL.39]\n *\n * This abortion is called directly by Progman\n */\nHGLOBAL16 WINAPI InternalExtractIcon16(HINSTANCE16 hInstance,\n                                     LPCSTR lpszExeFileName, UINT16 nIconIndex, WORD n )\n{\n    HGLOBAL16 hRet = 0;\n    HICON16 *RetPtr = NULL;\n\n\tTRACE(\"(%04x,file %s,start %d,extract %d\\n\",\n\t\t       hInstance, lpszExeFileName, nIconIndex, n);\n\n\tif (!n)\n\t  return 0;\n\n\thRet = GlobalAlloc16(GMEM_FIXED | GMEM_ZEROINIT, sizeof(*RetPtr) * n);\n        RetPtr = GlobalLock16(hRet);\n\n\tif (nIconIndex == (UINT16)-1)  /* get number of icons */\n\t{\n\t  RetPtr[0] = PrivateExtractIconsNE(lpszExeFileName, -1, 0, 0, NULL, NULL, 0, LR_DEFAULTCOLOR);\n\t}\n\telse\n\t{\n\t  UINT ret;\n\t  HICON *icons;\n\n\t  icons = HeapAlloc(GetProcessHeap(), 0, n * sizeof(*icons));\n\t  ret = PrivateExtractIconsNE(lpszExeFileName, nIconIndex,\n\t                             GetSystemMetrics(SM_CXICON),\n\t                             GetSystemMetrics(SM_CYICON),\n\t                             icons, NULL, n, LR_DEFAULTCOLOR);\n\t  if ((ret != 0xffffffff) && ret)\n\t  {\n\t    int i;\n\t    for (i = 0; i < n; i++) RetPtr[i] = convert_icon_to_16(hInstance, icons[i]);\n\t  }\n\t  else\n\t  {\n\t    GlobalFree16(hRet);\n\t    hRet = 0;\n\t  }\n\t  HeapFree(GetProcessHeap(), 0, icons);\n\t}\n\treturn hRet;\n}\n\n/*************************************************************************\n* ExtractIconW                [SHELL32.@]\n*/\nHICON WINAPI ExtractIconNE(HINSTANCE hInstance, LPCSTR lpszFile, UINT nIconIndex)\n{\n\tHICON  hIcon = NULL;\n\tUINT ret;\n\tUINT cx = GetSystemMetrics(SM_CXICON), cy = GetSystemMetrics(SM_CYICON);\n\n\tTRACE(\"%p %s %d\\n\", hInstance, debugstr_a(lpszFile), nIconIndex);\n\n\tif (nIconIndex == (UINT)-1)\n\t{\n\t\tret = PrivateExtractIconsNE(lpszFile, -1, cx, cy, NULL, NULL, 0, LR_DEFAULTCOLOR);\n\t\tif (ret != (UINT)-1 && ret)\n\t\t\treturn (HICON)(UINT_PTR)ret;\n\t\treturn NULL;\n\t}\n\telse\n\t\tret = PrivateExtractIconsNE(lpszFile, nIconIndex, cx, cy, &hIcon, NULL, 1, LR_DEFAULTCOLOR);\n\n\tif (ret == (UINT)-1)\n\t\treturn (HICON)1;\n\telse if (ret > 0 && hIcon)\n\t\treturn hIcon;\n\n\treturn NULL;\n}\n__declspec(dllimport) LPCSTR RedirectSystemDir(LPCSTR path, LPSTR to, size_t max_len);\n/*************************************************************************\n *             ExtractIcon   (SHELL.34)\n */\nHICON16 WINAPI ExtractIcon16( HINSTANCE16 hInstance, LPCSTR lpszExeFileName,\n\tUINT16 nIconIndex )\n{\n    char buf[MAX_PATH];\n    TRACE(\"\\n\");\n    lpszExeFileName = RedirectSystemDir(lpszExeFileName, buf, MAX_PATH);\n    if (nIconIndex == 0xFFFF)\n    {\n\t    return ExtractIconNE(NULL, lpszExeFileName, -1);\n    }\n    return convert_icon_to_16( hInstance, ExtractIconNE(NULL, lpszExeFileName, nIconIndex) );\n}\n\n/*************************************************************************\n *             ExtractIconEx   (SHELL.40)\n */\nUINT16 WINAPI ExtractIconEx16(\n\tLPCSTR lpszFile, INT16 nIconIndex, HICON16 *phiconLarge,\n\tHICON16 *phiconSmall, UINT16 nIcons\n) {\n    HICON\t*ilarge,*ismall;\n    int\t\ti, ret;\n\n    if (phiconLarge)\n    \tilarge = HeapAlloc(GetProcessHeap(),0,nIcons*sizeof(HICON));\n    else\n    \tilarge = NULL;\n    if (phiconSmall)\n    \tismall = HeapAlloc(GetProcessHeap(),0,nIcons*sizeof(HICON));\n    else\n    \tismall = NULL;\n    ret = ExtractIconExA(lpszFile,nIconIndex,ilarge,ismall,nIcons);\n    if (ilarge) {\n\tfor (i=0;i<ret;i++)\n\t    phiconLarge[i] = convert_icon_to_16(0, ilarge[i]);\n\tHeapFree(GetProcessHeap(),0,ilarge);\n    }\n    if (ismall) {\n\tfor (i=0;i<ret;i++)\n\t    phiconSmall[i] = convert_icon_to_16(0, ismall[i]);\n\tHeapFree(GetProcessHeap(),0,ismall);\n    }\n    return ret;\n}\n\n/*************************************************************************\n*\t\t\t\tExtractAssociatedIconW (SHELL32.@)\n*\n* Return icon for given file (either from file itself or from associated\n* executable) and patch parameters if needed.\n*/\nHICON16 WINAPI ExtractAssociatedIconNE(HINSTANCE hInst, LPSTR lpIconPath, LPWORD lpiIcon)\n{\n\tHICON hIcon = NULL;\n\tWORD wDummyIcon = 0;\n\n\tTRACE(\"%p %s %p\\n\", hInst, debugstr_a(lpIconPath), lpiIcon);\n\n\tif (lpiIcon == NULL)\n\t\tlpiIcon = &wDummyIcon;\n\n\thIcon = ExtractIcon16(hInst, lpIconPath, *lpiIcon);\n\n\tif (hIcon < (HICON)2)\n\t{\n\t\treturn convert_icon_to_16(hInst, ExtractAssociatedIconA(hInst, lpIconPath, lpiIcon));\n\t}\n\treturn hIcon;\n}\n/*************************************************************************\n *\t\t\t\tExtractAssociatedIcon\t[SHELL.36]\n *\n * Return icon for given file (either from file itself or from associated\n * executable) and patch parameters if needed.\n */\nHICON16 WINAPI ExtractAssociatedIcon16(HINSTANCE16 hInst, LPSTR lpIconPath, LPWORD lpiIcon)\n{\n    return ExtractAssociatedIconNE(NULL, lpIconPath, lpiIcon);\n}\n\n/*************************************************************************\n *\t\t\t\tFindEnvironmentString\t[SHELL.38]\n *\n * Returns a pointer into the DOS environment... Ugh.\n */\nstatic LPSTR SHELL_FindString(LPSTR lpEnv, LPCSTR entry)\n{ UINT16 l;\n\n  TRACE(\"\\n\");\n\n  l = strlen(entry);\n  for( ; *lpEnv ; lpEnv+=strlen(lpEnv)+1 )\n  { if( strncasecmp(lpEnv, entry, l) )\n      continue;\n\tif( !*(lpEnv+l) )\n\t    return (lpEnv + l); \t\t/* empty entry */\n\telse if ( *(lpEnv+l)== '=' )\n\t    return (lpEnv + l + 1);\n    }\n    return NULL;\n}\n\n/**********************************************************************/\n\nSEGPTR WINAPI FindEnvironmentString16(LPCSTR str)\n{ SEGPTR  spEnv;\n  LPSTR lpEnv,lpString;\n  TRACE(\"\\n\");\n\n  spEnv = GetDOSEnvironment16();\n\n  lpEnv = MapSL(spEnv);\n  lpString = (spEnv)?SHELL_FindString(lpEnv, str):NULL;\n\n    if( lpString )\t\t/*  offset should be small enough */\n\treturn spEnv + (lpString - lpEnv);\n    return 0;\n}\n\n/*************************************************************************\n *              \t\tDoEnvironmentSubst      [SHELL.37]\n *\n * Replace %KEYWORD% in the str with the value of variable KEYWORD\n * from \"DOS\" environment. If it is not found the %KEYWORD% is left\n * intact. If the buffer is too small, str is not modified.\n *\n * PARAMS\n *  str        [I] '\\0' terminated string with %keyword%.\n *             [O] '\\0' terminated string with %keyword% substituted.\n *  length     [I] size of str.\n *\n * RETURNS\n *  str length in the LOWORD and 1 in HIWORD if subst was successful.\n */\nDWORD WINAPI DoEnvironmentSubst16(LPSTR str,WORD length)\n{\n  LPSTR   lpEnv = MapSL(GetDOSEnvironment16());\n  LPSTR   lpstr = str;\n  LPSTR   lpend;\n  LPSTR   lpBuffer = HeapAlloc( GetProcessHeap(), 0, length);\n  WORD    bufCnt = 0;\n  WORD    envKeyLen;\n  LPSTR   lpKey;\n  WORD    retStatus = 0;\n  WORD    retLength = length;\n\n  CharToOemA(str,str);\n\n  TRACE(\"accept %s\\n\", str);\n\n  while( *lpstr && bufCnt <= length - 1 ) {\n     if ( *lpstr != '%' ) {\n        lpBuffer[bufCnt++] = *lpstr++;\n        continue;\n     }\n\n     for( lpend = lpstr + 1; *lpend && *lpend != '%'; lpend++) /**/;\n\n     envKeyLen = lpend - lpstr - 1;\n     if( *lpend != '%' || envKeyLen == 0)\n        goto err; /* \"%\\0\" or \"%%\" found; back off and whine */\n\n     *lpend = '\\0';\n     lpKey = SHELL_FindString(lpEnv, lpstr+1);\n     *lpend = '%';\n     if( lpKey ) {\n         int l = strlen(lpKey);\n\n         if( bufCnt + l > length - 1 )\n                goto err;\n\n        memcpy(lpBuffer + bufCnt, lpKey, l);\n        bufCnt += l;\n     } else { /* Keyword not found; Leave the %KEYWORD% intact */\n        if( bufCnt + envKeyLen + 2 > length - 1 )\n            goto err;\n\n         memcpy(lpBuffer + bufCnt, lpstr, envKeyLen + 2);\n        bufCnt += envKeyLen + 2;\n     }\n\n     lpstr = lpend + 1;\n  }\n\n  if (!*lpstr && bufCnt <= length - 1) {\n      memcpy(str,lpBuffer, bufCnt);\n      str[bufCnt] = '\\0';\n      retLength = bufCnt + 1;\n      retStatus = 1;\n  }\n\n  err:\n  if (!retStatus)\n      WARN(\"-- Env subst aborted - string too short or invalid input\\n\");\n  TRACE(\"-- return %s\\n\", str);\n\n  OemToCharA(str,str);\n  HeapFree( GetProcessHeap(), 0, lpBuffer);\n\n  return (DWORD)MAKELONG(retLength, retStatus);\n}\n\n/*************************************************************************\n *\t\t\t\tSHELL_HookProc\n *\n * 32-bit version of the system-wide WH_SHELL hook.\n */\nstatic LRESULT WINAPI SHELL_HookProc(INT code, WPARAM wParam, LPARAM lParam)\n{\n    TRACE(\"%i, %lx, %08lx\\n\", code, wParam, lParam );\n\n    if (SHELL_hWnd)\n    {\n        switch( code )\n        {\n        case HSHELL_WINDOWCREATED:\n            PostMessageA( SHELL_hWnd, uMsgWndCreated, wParam, 0 );\n            break;\n        case HSHELL_WINDOWDESTROYED:\n            PostMessageA( SHELL_hWnd, uMsgWndDestroyed, wParam, 0 );\n            break;\n        case HSHELL_ACTIVATESHELLWINDOW:\n            PostMessageA( SHELL_hWnd, uMsgShellActivate, wParam, 0 );\n            break;\n        }\n    }\n    return CallNextHookEx( SHELL_hHook, code, wParam, lParam );\n}\n\n/*************************************************************************\n *\t\t\t\tShellHookProc\t\t[SHELL.103]\n * System-wide WH_SHELL hook.\n */\nLRESULT WINAPI ShellHookProc16(INT16 code, WPARAM16 wParam, LPARAM lParam)\n{\n    return SHELL_HookProc( code, wParam, lParam );\n}\n\n/*************************************************************************\n *\t\t\t\tRegisterShellHook\t[SHELL.102]\n */\nBOOL WINAPI RegisterShellHook16(HWND16 hWnd, UINT16 uAction)\n{\n    TRACE(\"%04x [%u]\\n\", hWnd, uAction );\n\n    switch( uAction )\n    {\n    case 2:  /* register hWnd as a shell window */\n        if( !SHELL_hHook )\n        {\n            SHELL_hHook = SetWindowsHookExA( WH_SHELL, SHELL_HookProc,\n                                             GetModuleHandleA(\"shell32.dll\"), 0 );\n            if ( SHELL_hHook )\n            {\n                uMsgWndCreated = RegisterWindowMessageA( lpstrMsgWndCreated );\n                uMsgWndDestroyed = RegisterWindowMessageA( lpstrMsgWndDestroyed );\n                uMsgShellActivate = RegisterWindowMessageA( lpstrMsgShellActivate );\n            }\n            else\n                WARN(\"-- unable to install ShellHookProc()!\\n\");\n        }\n\n        if ( SHELL_hHook )\n            return ((SHELL_hWnd = HWND_32(hWnd)) != 0);\n        break;\n\n    default:\n        WARN(\"-- unknown code %i\\n\", uAction );\n        SHELL_hWnd = 0; /* just in case */\n    }\n    return FALSE;\n}\n\n\n/***********************************************************************\n *           DriveType   (SHELL.262)\n */\nUINT16 WINAPI DriveType16( UINT16 drive )\n{\n    UINT ret;\n    char path[] = \"A:\\\\\";\n    path[0] += drive;\n    ret = GetDriveTypeA(path);\n    switch(ret)  /* some values are not supported in Win16 */\n    {\n    case DRIVE_CDROM:\n        ret = DRIVE_REMOTE;\n        break;\n    case DRIVE_NO_ROOT_DIR:\n        ret = DRIVE_UNKNOWN;\n        break;\n    }\n    return ret;\n}\n\nBOOL is_reactos_or_wine()\n{\n    static BOOL detected;\n    static BOOL is;\n    HKEY hKey;\n    CHAR name[100];\n    DWORD dwType, dwSize = sizeof(name);\n    if (detected)\n        return is;\n    detected = TRUE;\n    if (ERROR_SUCCESS != RegOpenKeyExA(HKEY_LOCAL_MACHINE, \"SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\", 0, KEY_QUERY_VALUE, &hKey))\n        return FALSE;\n    if (ERROR_SUCCESS != RegQueryValueExA(hKey, \"ProductName\", NULL, &dwType, (LPBYTE)name, &dwSize))\n    {\n        RegCloseKey(hKey);\n        return FALSE;\n    }\n    RegCloseKey(hKey);\n    if (dwType != REG_SZ)\n        return FALSE;\n    is = strstr(name, \"ReactOS\") != NULL;\n    if (!is)\n    {\n        is = GetProcAddress(GetModuleHandleW(\"ntdll\"), \"wine_get_version\") != NULL;\n    }\n    return is;\n}\n\n/*************************************************************************\n *           SHELL_Execute16 [Internal]\n */\nstatic UINT_PTR SHELL_Execute16(const WCHAR *lpCmd, WCHAR *env, BOOL shWait,\n\t\t\t    const SHELLEXECUTEINFOW *psei, LPSHELLEXECUTEINFOW psei_out)\n{\n    UINT ret;\n    char sCmd[MAX_PATH];\n    WideCharToMultiByte(CP_ACP, 0, lpCmd, -1, sCmd, MAX_PATH, NULL, NULL);\n    ret = WinExec16(sCmd, (UINT16)psei->nShow);\n    psei_out->hInstApp = HINSTANCE_32(ret);\n    return ret;\n}\n\nstatic UINT_PTR WINAPI SHELL_Execute16_Windows(const CHAR *lpCmd, int nShowCmd, const CHAR *lpDir)\n{\n\tUINT ret;\n\tchar currdir[MAX_PATH];\n\tGetCurrentDirectoryA(MAX_PATH, currdir);\n\tSetCurrentDirectoryA(lpDir);\n\tret = WinExec16(lpCmd, nShowCmd);\n\tSetCurrentDirectoryA(currdir);\n\treturn ret;\n}\n\n/*************************************************************************\n *                              ShellExecute            [SHELL.20]\n */\nHINSTANCE16 WINAPI ShellExecute16( HWND16 hWnd, LPCSTR lpOperation,\n                                   LPCSTR lpFile, LPCSTR lpParameters,\n                                   LPCSTR lpDirectory, INT16 iShowCmd )\n{\n    void *callback = is_reactos_or_wine() ? (void*)SHELL_Execute16 : (void*)SHELL_Execute16_Windows;\n    HINSTANCE rret1632 = WOWShellExecute(HWND_32(hWnd), lpOperation, lpFile, lpParameters,\n        lpDirectory, iShowCmd, callback);\n    if (rret1632 >= 32)\n    {\n        return HINSTANCE_16(rret1632);\n    }\n    if (rret1632 == ERROR_FILE_NOT_FOUND)\n    {\n        return rret1632;\n    }\n\tHINSTANCE rret = ShellExecuteA(HWND_32(hWnd), lpOperation, lpFile, lpParameters,\n\t\tlpDirectory, iShowCmd);\n\tif (GetLastError() == 0x000000d8)\n\t{\n        return (HINSTANCE16)rret;\n\t}\n\telse\n\t{\n\t\tif (rret >= 32)\n\t\t\treturn HINSTANCE_16(rret);\n\t\treturn (HINSTANCE16)rret;\n\t}\n}\n\n\nHMODULE16 WINAPI MapHModuleLS(HMODULE hmod);\n/*************************************************************************\n * RunDLL_CallEntry16\n *\n * Only exported from shell32 on Windows, probably imported\n * from shell through the 16/32 thunks.\n */\nvoid WINAPI RunDLL_CallEntry16( DWORD proc, HWND hwnd, HINSTANCE inst, LPCSTR cmdline, INT cmdshow )\n{\n    WORD args[5];\n    SEGPTR cmdline_seg;\n\n    TRACE( \"proc %x hwnd %p inst %p cmdline %s cmdshow %d\\n\",\n           proc, hwnd, inst, debugstr_a(cmdline), cmdshow );\n\n    cmdline_seg = MapLS( cmdline );\n    args[4] = HWND_16(hwnd);\n    args[3] = MapHModuleLS(inst);\n    args[2] = SELECTOROF(cmdline_seg);\n    args[1] = OFFSETOF(cmdline_seg);\n    args[0] = cmdshow;\n    WOWCallback16Ex( proc, WCB16_PASCAL, sizeof(args), args, NULL );\n    UnMapLS( cmdline_seg );\n}\n\nDWORD WINAPI SHFormatDrive16(HWND16 hwnd, UINT16 drive, UINT16 fmtID, UINT16 options)\n{\n    return SHFormatDrive(HWND_32(hwnd), drive, fmtID, options);\n}\n"
  },
  {
    "path": "shell/shell.def",
    "content": "; File generated automatically from shell.dll16.spec; do not edit!\n\nLIBRARY shell.dll16\n\nEXPORTS\n  _wine_spec_dos_header;=.L__wine_spec_dos_header @1 DATA PRIVATE\n  _RunDLL_CallEntry16@20 @2\n"
  },
  {
    "path": "shell/shell.dll16.spec",
    "content": "  1 pascal   RegOpenKey(long str ptr) RegOpenKey16\n  2 pascal   RegCreateKey(long str ptr) RegCreateKey16\n  3 pascal   RegCloseKey(long) RegCloseKey16\n  4 pascal   RegDeleteKey(long str) RegDeleteKey16\n  5 pascal   RegSetValue(long str long str long) RegSetValue16\n  6 pascal   RegQueryValue(long str ptr ptr) RegQueryValue16\n  7 pascal   RegEnumKey(long long ptr long) RegEnumKey16\n# 8 stub     WEP\n  9 pascal -ret16 DragAcceptFiles(word word) DragAcceptFiles16\n 11 pascal -ret16 DragQueryFile(word s_word ptr s_word) DragQueryFile16\n 12 pascal -ret16 DragFinish(word) DragFinish16\n 13 pascal -ret16 DragQueryPoint(word ptr) DragQueryPoint16\n 20 pascal -ret16 ShellExecute(word str str str str s_word) ShellExecute16\n 21 pascal -ret16 FindExecutable(str str ptr) FindExecutable16\n 22 pascal -ret16 ShellAbout(word ptr ptr word) ShellAbout16\n 33 pascal -ret16 AboutDlgProc(word word word long) AboutDlgProc16\n 34 pascal -ret16 ExtractIcon(word str s_word) ExtractIcon16\n 36 pascal -ret16 ExtractAssociatedIcon(word ptr ptr) ExtractAssociatedIcon16\n 37 pascal   DoEnvironmentSubst(ptr word) DoEnvironmentSubst16\n 38 pascal   FindEnvironmentString(ptr) FindEnvironmentString16\n 39 pascal -ret16 InternalExtractIcon(word ptr s_word word) InternalExtractIcon16\n 40 pascal -ret16 ExtractIconEx(str word ptr ptr word) ExtractIconEx16\n# 98 stub SHL3216_THUNKDATA16\n# 99 stub SHL1632_THUNKDATA16\n\n#100   4  0550  HERETHARBETYGARS exported, shared data\n#101   8  010e  FINDEXEDLGPROC exported, shared data\n101 pascal DllEntryPoint(long word word word long word) SHELL_DllEntryPoint\n\n102 pascal -ret16 RegisterShellHook(word word) RegisterShellHook16\n103 pascal   ShellHookProc(word word long) ShellHookProc16\n\n157 stub RESTARTDIALOG\n#  166 PICKICONDLG\n\n262 pascal -ret16 DriveType(long) DriveType16\n\n#  263 SH16TO32DRIVEIOCTL\n#  264 SH16TO32INT2526\n#  300 SHGETFILEINFO\n400 pascal SHFormatDrive(word word word word) SHFormatDrive16\n401 stub SHCHECKDRIVE\n#  402 _RUNDLLCHECKDRIVE\n\n#32 WCI\n\n################################################################\n# Wine extensions: functions needed by shell32\n@ stdcall -arch=win32 RunDLL_CallEntry16(long long ptr str long)\n"
  },
  {
    "path": "shell/shell.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{BD91A02B-907B-4512-A963-1166D1EBC5C4}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>shell</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;strncasecmp=_strnicmp;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;shell32.lib;gdi32.lib;user32.lib;advapi32.lib</AdditionalDependencies>\n      <ModuleDefinitionFile>shell.def</ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;strncasecmp=_strnicmp;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ModuleDefinitionFile>shell.def</ModuleDefinitionFile>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;shell32.lib;gdi32.lib;user32.lib;advapi32.lib</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"shell.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"shell.def\" />\n    <CustomBuild Include=\"shell.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" SHELL &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" SHELL &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"shell.dll16.obj\">\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n      </ExcludedFromBuild>\n    </Object>\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "shell/shell.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"ソース ファイル\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"ヘッダー ファイル\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"リソース ファイル\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"shell.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"shell.def\">\n      <Filter>ソース ファイル</Filter>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"shell.dll16.obj\">\n      <Filter>ソース ファイル</Filter>\n    </Object>\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"shell.dll16.spec\">\n      <Filter>ソース ファイル</Filter>\n    </CustomBuild>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "sound/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(sound SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/sound.def sound.drv16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(sound.drv16 sound)\ntarget_link_libraries(sound libwine winecrt0 krnl386 winmm.lib)\nset_target_properties(sound PROPERTIES SUFFIX \".drv16\")\n"
  },
  {
    "path": "sound/Makefile.in",
    "content": "MODULE    = sound.drv16\nEXTRADLLFLAGS = -m16 -Wb,--main-module,winmm.dll\n\nC_SRCS = sound.c\n"
  },
  {
    "path": "sound/sound.c",
    "content": "/*\n * 16-bit sound support\n *\n *  Copyright  Robert J. Amstadt, 1993\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n#include <stdlib.h>\n#include <math.h>\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/winbase16.h\"\n#include \"wine/windef16.h\"\n#include \"wine/debug.h\"\n#include \"mmsystem.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(sound);\n\n#define S_SERDVNA (-1)\n#define S_SERMACT (-3)\n#define S_SERQFUL (-4)\n#define S_SERDNT  (-5)\n#define S_SERDLN  (-6)\n#define S_SERDTP  (-8)\n#define S_SERDMD (-10)\n#define S_SERDPT (-12)\n#define S_SERDFQ (-13)\n#define S_QUEUEEMPTY 0\n#define S_NORMAL     0\n#define S_LEGATO     1\n#define S_STACCATO   2\n\ntypedef struct {\n  UINT16 freq;\n  UINT16 duration;\n  UINT16 interstice;\n} NOTE;\n\nstatic NOTE *queue;\nstatic int queuelen;\nstatic HTASK owner = 0;\nstatic volatile BOOL playing;\nstatic int nextnote;\nstatic HANDLE thread;\nstatic LPHWAVEOUT wohand;\nstatic HANDLE event;\nstatic int pitch;\nstatic int tempo;\nstatic int mode;\n\nINT16 WINAPI StopSound16(void);\nINT16 WINAPI WaitSoundState16(INT16 x);\n\n/***********************************************************************\n *\t\tOpenSound (SOUND.1)\n */\nINT16 WINAPI OpenSound16(void)\n{\n\n  if (owner) return S_SERDVNA;\n\n  const WAVEFORMATEX wfmt = { WAVE_FORMAT_PCM, 1, 48000, 48000, 1, 8, 0 };\n  event = CreateEventA(NULL, FALSE, FALSE, NULL);\n\n  if (waveOutOpen(&wohand, WAVE_MAPPER, &wfmt, event, 0, CALLBACK_EVENT) != MMSYSERR_NOERROR)\n  {\n      CloseHandle(event);\n      return S_SERDVNA;\n  }\n  owner = GetCurrentTask();\n  queue = (NOTE *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 32 * sizeof(NOTE));\n  queuelen = 32 * sizeof(NOTE);\n  playing = 0;\n  nextnote = 0;\n  pitch = 0;\n  tempo = 120;\n  mode = S_NORMAL;\n  return 1;\n}\n\n/***********************************************************************\n *\t\tCloseSound (SOUND.2)\n */\nvoid WINAPI CloseSound16(void)\n{\n  if (owner != GetCurrentTask()) return;\n  StopSound16();\n  WaitSoundState16(S_QUEUEEMPTY);\n  HeapFree(GetProcessHeap(), 0, (LPVOID)queue);\n  waveOutClose(wohand);\n  CloseHandle(event);\n  event = NULL;\n  wohand = NULL;\n  queue = NULL;\n  playing = 0;\n  owner = 0;\n}\n\n/***********************************************************************\n *\t\tSetVoiceQueueSize (SOUND.3)\n */\nINT16 WINAPI SetVoiceQueueSize16(INT16 nVoice, INT16 nBytes)\n{\n  if (owner != GetCurrentTask()) return 0;\n  if (nVoice != 1) return 0;\n  if (playing) return S_SERMACT;\n  HeapFree(GetProcessHeap(), 0, (LPVOID)queue);\n  queue = (NOTE *)HeapAlloc(GetProcessHeap(), 0, nBytes); \n  queuelen = nBytes;\n  nextnote = 0;\n  return 0;\n}\n\n/***********************************************************************\n *\t\tSetVoiceAccent (SOUND.5)\n */\nINT16 WINAPI SetVoiceAccent16(INT16 nVoice, INT16 nTempo, INT16 nVolume,\n                              INT16 nMode, INT16 nPitch)\n{\n  // nVolume is ignored and some programs set it to 0\n  if (owner != GetCurrentTask()) return 0;\n  if (nVoice != 1) return 0;\n  TRACE(\"(%d,%d,%d,%d,%d):\\n\", nVoice, nTempo, nVolume, nMode, nPitch);\n  if ((nTempo < 32) || (nTempo > 255)) return S_SERDTP;\n  if (nPitch > 83) return S_SERDPT;\n  if (nMode > 2) return S_SERDMD;\n  tempo = nTempo;\n  pitch = nPitch;\n  mode = nMode;\n  return 0;\n}\n\n/***********************************************************************\n *\t\tSetVoiceEnvelope (SOUND.6)\n */\nINT16 WINAPI SetVoiceEnvelope16(INT16 nVoice, INT16 nShape, INT16 nRepeat)\n{\n  FIXME(\"(%d,%d,%d): stub\\n\",nVoice,nShape,nRepeat);\n  return 0;\n}\n\n/***********************************************************************\n *\t\tSetSoundNoise (SOUND.7)\n */\nINT16 WINAPI SetSoundNoise16(INT16 nSource, INT16 nDuration)\n{\n  FIXME(\"(%d,%d): stub\\n\",nSource,nDuration);\n  return 0;\n}\n\n/***********************************************************************\n *\t\tSetVoiceSound (SOUND.8)\n */\nINT16 WINAPI SetVoiceSound16(INT16 nVoice, DWORD lFrequency, INT16 nDuration)\n{\n  if (owner != GetCurrentTask()) return 0;\n  if (nVoice != 1) return 0;\n  if (playing) return 0;\n  if (nextnote >= (queuelen / sizeof(NOTE))) return S_SERQFUL;\n  int freq = HIWORD(lFrequency);\n  if (freq && ((freq < 37) || (freq > 32767))) return S_SERDFQ;\n\n  TRACE(\"freq: %d duration: %d\\n\", freq, nDuration);\n  queue[nextnote].freq = freq;\n  int len = ((nDuration + 1) / 2) * 5; // 2.5 ms per tick rounded up\n  queue[nextnote].duration = freq ? len : 0;\n  queue[nextnote].interstice = !freq ? len : 0;\n  nextnote++;\n  return 0;\n}\n\n/***********************************************************************\n *\t\tSetVoiceNote (SOUND.4)\n */\nINT16 WINAPI SetVoiceNote16(INT16 nVoice, INT16 nValue, INT16 nLength,\n                            INT16 nCdots)\n{\n  if (owner != GetCurrentTask()) return 0;\n  if (nVoice != 1) return 0;\n  if (playing) return 0;\n  if (nextnote >= (queuelen / sizeof(NOTE))) return S_SERQFUL;\n  if ((UINT16)nValue > 84) return S_SERDNT;\n  if (nLength <= 0) return S_SERDLN;\n  TRACE(\"(%d,%d,%d,%d)\\n\",nVoice,nValue,nLength,nCdots);\n  const int notes[] = { 4186, 4435, 4699, 4978, 5274, 5588, 5920, 6272, 6645, 7040, 7459, 7902 };\n  float modelen = 0;\n  int freq = 0;\n  float len = (240000 * (2 - powf(.5f, nCdots))) / (nLength * tempo);\n  if (len >= 65536) return S_SERDLN;\n  if (nValue)\n  {\n    nValue = ((nValue + pitch) % 84) - 1;\n    freq = notes[nValue % 12] >> (6 - (nValue / 12));\n    modelen = (mode == S_STACCATO) ? .75f : (mode == S_LEGATO) ? 1 : .875f;\n  }\n\n  queue[nextnote].freq = freq;\n  queue[nextnote].duration = roundf(len * modelen);\n  queue[nextnote].interstice = len - queue[nextnote].duration;\n  nextnote++;\n  \n  return 0;\n}\n\nstatic DWORD WINAPI play(LPVOID param)\n{\n  int len = 0;\n  const float mspersamp = 1000.0f / 48000.0f;\n  for (int i = 0; i < nextnote; i++)\n    len += (float)(queue[i].duration + queue[i].interstice) / mspersamp;\n  if (!len) return;\n \n  int buflen = len;\n  char *wavbuf = (char *)HeapAlloc(GetProcessHeap(), 0, buflen);\n  int k = 0;\n\n  // sound.drv that came with Windows 2-3 only supported the pc speaker\n  // make square waves to simulate it\n  for (int i = 0; i < nextnote; i++)\n  {\n    int notelen = (float)queue[i].duration / mspersamp;\n    if (notelen)\n    {\n      int hwavelen = max(1, (int)((1000.0f / ((float)queue[i].freq * mspersamp)) / 2));\n      char samp = 0x99;\n      for (int j = 0; j < notelen; j++)\n      {\n        wavbuf[k + j] = samp;\n        if (!(j % hwavelen)) samp = ~samp;\n      }\n    }\n    k += notelen;\n    int interslen = (float)queue[i].interstice / mspersamp;\n    if (interslen)\n    {\n        for (int j = 0; j < interslen; j++)\n            wavbuf[k + j] = 0x80;\n    }\n    k += interslen;\n  }\n\n  WAVEHDR whdr = { wavbuf, buflen, 0, 0, 0, 0, NULL, NULL };\n  if (waveOutPrepareHeader(wohand, &whdr, sizeof(whdr)) == MMSYSERR_NOERROR)\n  {\n      if (waveOutWrite(wohand, &whdr, sizeof(whdr)) == MMSYSERR_NOERROR)\n      {\n          do\n              WaitForSingleObject(event, INFINITE);\n          while (!(whdr.dwFlags & WHDR_DONE));\n      }\n      waveOutUnprepareHeader(wohand, &whdr, sizeof(whdr));\n  }\n  HeapFree(GetProcessHeap(), 0, wavbuf);\n\n  nextnote = 0;\n  playing = 0;\n  ExitThread(0);\n}\n\n/***********************************************************************\n *\t\tStartSound (SOUND.9)\n */\nINT16 WINAPI StartSound16(void)\n{\n  if (owner != GetCurrentTask()) return 0;\n  if (playing) return 0;\n  playing = 1;\n  thread = CreateThread(NULL, 0, play, 0, 0, NULL);\n  return 0;\n}\n\n/***********************************************************************\n *\t\tWaitSoundState (SOUND.11)\n */\nINT16 WINAPI WaitSoundState16(INT16 x)\n{\n  if (owner != GetCurrentTask()) return 0;\n  if (!playing) return 0;\n  HANDLE dup;\n  if (DuplicateHandle(GetCurrentProcess(), thread, GetCurrentProcess(), &dup, 0, FALSE, DUPLICATE_SAME_ACCESS))\n  {\n    BOOL exitcode;\n    GetExitCodeThread(dup, &exitcode);\n    if (exitcode == STILL_ACTIVE)\n    {\n      DWORD count;\n      ReleaseThunkLock(&count);\n      WaitForSingleObject(dup, INFINITE);\n      RestoreThunkLock(count);\n    }\n    CloseHandle(dup);\n  }\n  return 0;\n}\n\n/***********************************************************************\n *\t\tStopSound (SOUND.10)\n */\nINT16 WINAPI StopSound16(void)\n{\n  if (owner != GetCurrentTask()) return 0;\n  if (!playing) return 0;\n  waveOutReset(wohand);\n  return 0;\n}\n\n/***********************************************************************\n *\t\tSyncAllVoices (SOUND.12)\n */\nINT16 WINAPI SyncAllVoices16(void)\n{\n    FIXME(\"(void): stub\\n\");\n    return 0;\n}\n\n/***********************************************************************\n *\t\tCountVoiceNotes (SOUND.13)\n */\nINT16 WINAPI CountVoiceNotes16(INT16 nVoice)\n{\n    if (nVoice != 1) return 0;\n    return nextnote;\n}\n\n/***********************************************************************\n *\t\tGetThresholdEvent (SOUND.14)\n */\nLPINT16 WINAPI GetThresholdEvent16(void)\n{\n    FIXME(\"(void): stub\\n\");\n    return NULL;\n}\n\n/***********************************************************************\n *\t\tGetThresholdStatus (SOUND.15)\n */\nINT16 WINAPI GetThresholdStatus16(void)\n{\n    FIXME(\"(void): stub\\n\");\n    return 0;\n}\n\n/***********************************************************************\n *\t\tSetVoiceThreshold (SOUND.16)\n */\nINT16 WINAPI SetVoiceThreshold16(INT16 a, INT16 b)\n{\n    FIXME(\"(%d,%d): stub\\n\", a, b);\n    return 0;\n}\n\n/***********************************************************************\n *\t\tDoBeep (SOUND.17)\n */\nvoid WINAPI DoBeep16(void)\n{\n    FIXME(\"(void): stub!\\n\");\n}\n"
  },
  {
    "path": "sound/sound.def",
    "content": "; File generated automatically from ..\\sound\\sound.drv16.spec; do not edit!\n\nLIBRARY sound.drv16\n\nEXPORTS\n  _wine_spec_dos_header=_wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "sound/sound.drv16.spec",
    "content": "1  pascal -ret16 OpenSound() OpenSound16\n2  pascal -ret16 CloseSound() CloseSound16\n3  pascal -ret16 SetVoiceQueueSize(word word) SetVoiceQueueSize16\n4  pascal -ret16 SetVoiceNote(word word word word) SetVoiceNote16\n5  pascal -ret16 SetVoiceAccent(word word word word word) SetVoiceAccent16\n6  pascal -ret16 SetVoiceEnvelope(word word word) SetVoiceEnvelope16\n7  pascal -ret16 SetSoundNoise(word word) SetSoundNoise16\n8  pascal -ret16 SetVoiceSound(word long word) SetVoiceSound16\n9  pascal -ret16 StartSound() StartSound16\n10 pascal -ret16 StopSound() StopSound16\n11 pascal -ret16 WaitSoundState(word) WaitSoundState16\n12 pascal -ret16 SyncAllVoices() SyncAllVoices16\n13 pascal -ret16 CountVoiceNotes(word) CountVoiceNotes16\n14 pascal   GetThresholdEvent() GetThresholdEvent16\n15 pascal -ret16 GetThresholdStatus() GetThresholdStatus16\n16 pascal -ret16 SetVoiceThreshold(word word) SetVoiceThreshold16\n17 pascal -ret16 DoBeep() DoBeep16\n18 stub MYOPENSOUND # W1.1, W2.0\n"
  },
  {
    "path": "sound/sound.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <Keyword>Win32Proj</Keyword>\r\n    <RootNamespace>sound</RootNamespace>\r\n    <ProjectGuid>{7B417913-AE01-41E5-BFEA-AB971B779F63}</ProjectGuid>\r\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v141</PlatformToolset>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v141</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n    <Import Project=\"..\\PropertySheet.props\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n    <Import Project=\"..\\PropertySheet.props\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n    <TargetExt>.drv16</TargetExt>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n    <IntDir>Release</IntDir>\r\n    <TargetExt>.drv16</TargetExt>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;winmm.lib;\r</AdditionalDependencies>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <ModuleDefinitionFile>\r\nsound.def\r\n      </ModuleDefinitionFile>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\r\n      <ModuleDefinitionFile>\r\nsound.def\r\n      </ModuleDefinitionFile>\r\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;winmm.lib;\r</AdditionalDependencies>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"sound.c\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Object Include=\"sound.drv16.obj\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <CustomBuild Include=\"sound.drv16.spec\">\r\n      <FileType>Document</FileType>\r\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" SOUND &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\r\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" SOUND &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\r\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\r\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\r\n    </CustomBuild>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"sound.def\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "storage/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(storage SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/storage.def storage.dll16.obj)\ninclude_directories(../wine ${CMAKE_BINARY_DIR})\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(storage.dll16 storage)\ntarget_link_libraries(storage libwine winecrt0 krnl386 ole2)\nset_target_properties(storage PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "storage/Makefile.in",
    "content": "MODULE    = storage.dll16\nIMPORTS   = uuid ole32\nEXTRADLLFLAGS = -m16 -Wb,--main-module,ole32.dll\n\nC_SRCS = storage.c\n"
  },
  {
    "path": "storage/ifs.h",
    "content": "/*\n * Copyright 1997 Marcus Meissner\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_OLE_IFS_H\n#define __WINE_OLE_IFS_H\n\n#include <stdarg.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"objbase.h\"\n\ntypedef CHAR OLECHAR16;\ntypedef LPSTR LPOLESTR16;\ntypedef LPCSTR LPCOLESTR16;\n\n#define STDMETHOD16CALLTYPE __cdecl\n#define STDMETHOD16(m) HRESULT (STDMETHOD16CALLTYPE *m)\n#define STDMETHOD16_(t,m) t (STDMETHOD16CALLTYPE *m)\n\n\n/**********************************************************************/\n\ntypedef struct ILockBytes16 *LPLOCKBYTES16;\n\n#define INTERFACE ILockBytes16\nDECLARE_INTERFACE_(ILockBytes16,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD16_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD16_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD16_(ULONG,Release)(THIS) PURE;\n    /*** ILockBytes16 methods ***/\n    STDMETHOD16(ReadAt)(THIS_ ULARGE_INTEGER ulOffset, void *pv, ULONG  cb, ULONG *pcbRead) PURE;\n    STDMETHOD16(WriteAt)(THIS_ ULARGE_INTEGER ulOffset, const void *pv, ULONG cb, ULONG *pcbWritten) PURE;\n    STDMETHOD16(Flush)(THIS) PURE;\n    STDMETHOD16(SetSize)(THIS_ ULARGE_INTEGER cb) PURE;\n    STDMETHOD16(LockRegion)(THIS_ ULARGE_INTEGER libOffset, ULARGE_INTEGER  cb, DWORD dwLockType) PURE;\n    STDMETHOD16(UnlockRegion)(THIS_ ULARGE_INTEGER libOffset, ULARGE_INTEGER  cb, DWORD dwLockType) PURE;\n    STDMETHOD16(Stat)(THIS_ STATSTG *pstatstg, DWORD grfStatFlag) PURE;\n};\n#undef INTERFACE\n\n/**********************************************************************/\n\ntypedef struct tagSTATSTG16\n{\n    LPOLESTR16 pwcsName;\n    DWORD type;\n    ULARGE_INTEGER cbSize;\n    FILETIME mtime;\n    FILETIME ctime;\n    FILETIME atime;\n    DWORD grfMode;\n    DWORD grfLocksSupported;\n    CLSID clsid;\n    DWORD grfStateBits;\n    DWORD reserved;\n} STATSTG16;\n\ntypedef struct IStream16 *LPSTREAM16;\n\n#define INTERFACE IStream16\nDECLARE_INTERFACE_(IStream16,ISequentialStream)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD16_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD16_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD16_(ULONG,Release)(THIS) PURE;\n    /*** ISequentialStream methods ***/\n    STDMETHOD16_(HRESULT,Read)(THIS_ void* pv, ULONG cb, ULONG* pcbRead) PURE;\n    STDMETHOD16_(HRESULT,Write)(THIS_ const void* pv, ULONG cb, ULONG* pcbWritten) PURE;\n    /*** IStream16 methods ***/\n    STDMETHOD16(Seek)(THIS_ LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER* plibNewPosition) PURE;\n    STDMETHOD16(SetSize)(THIS_ ULARGE_INTEGER libNewSize) PURE;\n    STDMETHOD16(CopyTo)(THIS_ IStream16* pstm, ULARGE_INTEGER cb, ULARGE_INTEGER* pcbRead, ULARGE_INTEGER* pcbWritten) PURE;\n    STDMETHOD16(Commit)(THIS_ DWORD grfCommitFlags) PURE;\n    STDMETHOD16(Revert)(THIS) PURE;\n    STDMETHOD16(LockRegion)(THIS_ ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType) PURE;\n    STDMETHOD16(UnlockRegion)(THIS_ ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType) PURE;\n    STDMETHOD16(Stat)(THIS_ STATSTG* pstatstg, DWORD grfStatFlag) PURE;\n    STDMETHOD16(Clone)(THIS_ IStream16** ppstm) PURE;\n};\n#undef INTERFACE\n\n/**********************************************************************/\n\ntypedef OLECHAR16 **SNB16;\n\ntypedef struct IStorage16 *LPSTORAGE16;\n\n#define INTERFACE IStorage16\nDECLARE_INTERFACE_(IStorage16,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD16_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD16_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD16_(ULONG,Release)(THIS) PURE;\n    /*** IStorage16 methods ***/\n    STDMETHOD16_(HRESULT,CreateStream)(THIS_ LPCOLESTR16 pwcsName, DWORD grfMode, DWORD reserved1, DWORD reserved2, IStream16** ppstm) PURE;\n    STDMETHOD16_(HRESULT,OpenStream)(THIS_ LPCOLESTR16 pwcsName, void* reserved1, DWORD grfMode, DWORD reserved2, IStream16** ppstm) PURE;\n    STDMETHOD16_(HRESULT,CreateStorage)(THIS_ LPCOLESTR16 pwcsName, DWORD grfMode, DWORD dwStgFmt, DWORD reserved2, IStorage16** ppstg) PURE;\n    STDMETHOD16_(HRESULT,OpenStorage)(THIS_ LPCOLESTR16 pwcsName, IStorage16* pstgPriority, DWORD grfMode, SNB16 snbExclude, DWORD reserved, IStorage16** ppstg) PURE;\n    STDMETHOD16_(HRESULT,CopyTo)(THIS_ DWORD ciidExclude, const IID* rgiidExclude, SNB16 snbExclude, IStorage16* pstgDest) PURE;\n    STDMETHOD16_(HRESULT,MoveElementTo)(THIS_ LPCOLESTR16 pwcsName, IStorage16* pstgDest, LPCOLESTR16 pwcsNewName, DWORD grfFlags) PURE;\n    STDMETHOD16_(HRESULT,Commit)(THIS_ DWORD grfCommitFlags) PURE;\n    STDMETHOD16_(HRESULT,Revert)(THIS) PURE;\n    STDMETHOD16_(HRESULT,EnumElements)(THIS_ DWORD reserved1, void* reserved2, DWORD reserved3, IEnumSTATSTG** ppenum) PURE;\n    STDMETHOD16_(HRESULT,DestroyElement)(THIS_ LPCOLESTR16 pwcsName) PURE;\n    STDMETHOD16_(HRESULT,RenameElement)(THIS_ LPCOLESTR16 pwcsOldName, LPCOLESTR16 pwcsNewName) PURE;\n    STDMETHOD16_(HRESULT,SetElementTimes)(THIS_ LPCOLESTR16 pwcsName, const FILETIME* pctime, const FILETIME* patime, const FILETIME* pmtime) PURE;\n    STDMETHOD16_(HRESULT,SetClass)(THIS_ REFCLSID clsid) PURE;\n    STDMETHOD16_(HRESULT,SetStateBits)(THIS_ DWORD grfStateBits, DWORD grfMask) PURE;\n    STDMETHOD16_(HRESULT,Stat)(THIS_ STATSTG* pstatstg, DWORD grfStatFlag) PURE;\n};\n#undef INTERFACE\n\n#endif /* __WINE_OLE_IFS_H */\n"
  },
  {
    "path": "storage/storage.c",
    "content": "/* Compound Storage\n *\n * Implemented using the documentation of the LAOLA project at\n * <URL:http://wwwwbs.cs.tu-berlin.de/~schwartz/pmh/index.html>\n * (Thanks to Martin Schwartz <schwartz@cs.tu-berlin.de>)\n *\n * Copyright 1998 Marcus Meissner\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#define NONAMELESSUNION\n#include \"config.h\"\n\n#include <assert.h>\n#include <time.h>\n#include <stdarg.h>\n#include <string.h>\n#include <sys/types.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#undef _WINTERNL_\n#define _WIN32_WINNT 0x600\n#include <winternl.h>\nNTSYSAPI BOOLEAN   WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING, LPCSTR);\n#include \"winerror.h\"\n#include \"wine/winbase16.h\"\n#include \"wownt32.h\"\n#include \"wine/unicode.h\"\n#include \"objbase.h\"\n#include \"wine/debug.h\"\n\n#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))\n\nWINE_DEFAULT_DEBUG_CHANNEL(ole);\n#include \"../ole2/ifs.h\"\n/******************************************************************************\n *\t\tStgCreateDocFileA\t[STORAGE.1]\n */\nHRESULT WINAPI StgCreateDocFile16(\n\tLPCOLESTR16 pwcsName,DWORD grfMode,DWORD reserved,/*IStorage16 * */SEGPTR *ppstgOpen\n) {\n    LPSTORAGE stg;\n    LPWSTR w = strdupAtoW(pwcsName);\n    HRESULT result;\n\tTRACE(\"(%s,0x%08x,0x%08x,%p)\\n\",\n\t\tpwcsName,grfMode,reserved,ppstgOpen\n\t);\n    result = StgCreateDocfile(w, grfMode, reserved, &stg);\n    HeapFree(GetProcessHeap(), 0, w);\n    *ppstgOpen = iface32_16(&IID_IStorage, stg);\n    return result;\n}\nHRESULT WINAPI StgCreateDocfileOnILockBytes16(\n    SEGPTR plkbyt,\n    DWORD grfMode,\n    DWORD reserved,\n    /* IStorage16 */SEGPTR *ppstgOpen\n)\n{\n    HRESULT result;\n    IStorage *pstg;\n    TRACE(\"(%08x,%08x,%08x,%p)\\n\", plkbyt, grfMode, reserved, ppstgOpen);\n    result = StgCreateDocfileOnILockBytes(iface16_32(&IID_ILockBytes, plkbyt), grfMode, reserved, &pstg);\n    *ppstgOpen = iface32_16(&IID_IStorage, pstg);\n    return result;\n}\n\n/******************************************************************************\n * StgOpenStorage [STORAGE.3]\n */\nHRESULT WINAPI StgOpenStorage16(\n    LPCOLESTR16 pwcsName, /* IStorage16 * */SEGPTR pstgPriority, DWORD grfMode,\n    SNB16 snbExclude, DWORD reserved, /* IStorage16 * */SEGPTR *ppstgOpen\n) {\n    LPSTORAGE stg;\n    LPWSTR w = strdupAtoW(pwcsName);\n    HRESULT result;\n    IStorage *pstg;\n\tTRACE(\"(%s,%p,0x%08x,%p,%d,%p)\\n\",\n              pwcsName,pstgPriority,grfMode,snbExclude,reserved,ppstgOpen\n\t);\n    if (snbExclude)\n        FIXME(\"snbExclude\\n\");\n    result = StgOpenStorage(w, (IStorage*)iface16_32(&IID_IStorage, pstgPriority), grfMode, NULL, reserved, &pstg);\n    HeapFree(GetProcessHeap(), 0, w);\n    *ppstgOpen = iface32_16(&IID_IStorage, pstg);\n    return result;\n}\n/******************************************************************************\n * StgIsStorageFile [STORAGE.5]\n */\nHRESULT WINAPI StgIsStorageFile16(LPCOLESTR16 fn) {\n\tUNICODE_STRING strW;\n\tHRESULT ret;\n\n\tRtlCreateUnicodeStringFromAsciiz(&strW, fn);\n\tret = StgIsStorageFile( strW.Buffer );\n\tRtlFreeUnicodeString( &strW );\n\n\treturn ret;\n}\n\n/******************************************************************************\n *              StgIsStorageILockBytes        [STORAGE.6]\n *\n * Determines if the ILockBytes contains a storage object.\n */\nHRESULT WINAPI StgIsStorageILockBytes16(SEGPTR plkbyt)\n{\n    return StgIsStorageILockBytes((ILockBytes*)iface16_32(&IID_ILockBytes, plkbyt));\n}\n\n/******************************************************************************\n *    StgOpenStorageOnILockBytes    [STORAGE.4]\n *\n * PARAMS\n *  plkbyt  FIXME: Should probably be an ILockBytes16 *.\n */\nHRESULT WINAPI StgOpenStorageOnILockBytes16(\n    SEGPTR plkbyt,\n    /* IStorage16 * */SEGPTR pstgPriority,\n    DWORD grfMode,\n    SNB16 snbExclude,\n    DWORD reserved,\n    /* IStorage16 * */SEGPTR *ppstgOpen)\n{\n    IStorage *pstg;\n    HRESULT result;\n\tTRACE(\"(%x, %08x, 0x%08x, %p, %x, %p)\\n\", plkbyt, pstgPriority, grfMode, snbExclude, reserved, ppstgOpen);\n    if (snbExclude)\n        FIXME(\"snbExclude\\n\");\n    result = StgOpenStorageOnILockBytes((ILockBytes*)iface16_32(&IID_ILockBytes, plkbyt), (IStorage*)iface16_32(&IID_IStorage, pstgPriority),\n        grfMode, NULL, reserved, &pstg);\n    *ppstgOpen = iface32_16(&IID_IStorage, pstg);\n    return result;\n}\n\nHRESULT WINAPI StgSetTimes16(char const *lpszName, FILETIME const *pctime, FILETIME const *patime, FILETIME const *pmtime)\n{\n    HRESULT result;\n    const WCHAR *lpwszName;\n    TRACE(\"(%s,%p,%p,%p)\\n\", debugstr_a(lpszName), pctime, patime, pmtime);\n    lpwszName = strdupAtoW(lpszName);\n    result = StgSetTimes(lpwszName, pctime, patime, pmtime);\n    HeapFree(GetProcessHeap(), 0, lpwszName);\n    return hresult32_16(result);\n}\n\n#if 0\n#include \"ifs.h\"\nWINE_DEFAULT_DEBUG_CHANNEL(ole);\nWINE_DECLARE_DEBUG_CHANNEL(relay);\n\nstruct storage_header {\n\tBYTE\tmagic[8];\t/* 00: magic */\n\tBYTE\tunknown1[36];\t/* 08: unknown */\n\tDWORD\tnum_of_bbd_blocks;/* 2C: length of big datablocks */\n\tDWORD\troot_startblock;/* 30: root storage first big block */\n\tDWORD\tunknown2[2];\t/* 34: unknown */\n\tDWORD\tsbd_startblock;\t/* 3C: small block depot first big block */\n\tDWORD\tunknown3[3];\t/* 40: unknown */\n\tDWORD\tbbd_list[109];\t/* 4C: big data block list (up to end of sector)*/\n};\nstruct storage_pps_entry {\n\tWCHAR\tpps_rawname[32];/* 00: \\0 terminated widechar name */\n\tWORD\tpps_sizeofname;\t/* 40: namelength in bytes */\n\tBYTE\tpps_type;\t/* 42: flags, 1 storage/dir, 2 stream, 5 root */\n\tBYTE\tpps_unknown0;\t/* 43: unknown */\n\tDWORD\tpps_prev;\t/* 44: previous pps */\n\tDWORD\tpps_next;\t/* 48: next pps */\n\tDWORD\tpps_dir;\t/* 4C: directory pps */\n\tGUID\tpps_guid;\t/* 50: class ID */\n\tDWORD\tpps_unknown1;\t/* 60: unknown */\n\tFILETIME pps_ft1;\t/* 64: filetime1 */\n\tFILETIME pps_ft2;\t/* 6C: filetime2 */\n\tDWORD\tpps_sb;\t\t/* 74: data startblock */\n\tDWORD\tpps_size;\t/* 78: datalength. (<0x1000)?small:big blocks*/\n\tDWORD\tpps_unknown2;\t/* 7C: unknown */\n};\n\n#define STORAGE_CHAINENTRY_FAT\t\t0xfffffffd\n#define STORAGE_CHAINENTRY_ENDOFCHAIN\t0xfffffffe\n#define STORAGE_CHAINENTRY_FREE\t\t0xffffffff\n\n\nstatic const BYTE STORAGE_magic[8]   ={0xd0,0xcf,0x11,0xe0,0xa1,0xb1,0x1a,0xe1};\n\n#define BIGSIZE\t\t512\n#define SMALLSIZE\t\t64\n\n#define SMALLBLOCKS_PER_BIGBLOCK\t(BIGSIZE/SMALLSIZE)\n\n#define READ_HEADER(str)\tSTORAGE_get_big_block(str,-1,(LPBYTE)&sth);assert(!memcmp(STORAGE_magic,sth.magic,sizeof(STORAGE_magic)));\nstatic IStorage16Vtbl stvt16;\nstatic const IStorage16Vtbl *segstvt16 = NULL;\nstatic IStream16Vtbl strvt16;\nstatic const IStream16Vtbl *segstrvt16 = NULL;\n\n/*ULONG WINAPI IStorage16_AddRef(LPSTORAGE16 this);*/\nstatic void _create_istorage16(LPSTORAGE16 *stg);\nstatic void _create_istream16(LPSTREAM16 *str);\n\n#define IMPLEMENTED 1\n\n/* The following is taken from the CorVu implementation of docfiles, and\n * documents things about the file format that are not implemented here, and\n * not documented by the LAOLA project. The CorVu implementation was posted\n * to wine-devel in February 2004, and released under the LGPL at the same\n * time. Because that implementation is in C++, it's not directly usable in\n * Wine, but does have documentation value.\n *\n *\n * #define DF_EXT_VTOC\t\t-4\n * #define DF_VTOC_VTOC\t\t-3\n * #define DF_VTOC_EOF\t\t-2\n * #define DF_VTOC_FREE\t\t-1\n * #define DF_NAMELEN\t0x20\t// Maximum entry name length - 31 characters plus\n * \t\t\t\t// a NUL terminator\n *\n * #define DF_FT_STORAGE\t1\n * #define DF_FT_STREAM\t\t2\n * #define DF_FT_LOCKBYTES\t3\t// Not used -- How the bloody hell did I manage\n * #define DF_FT_PROPERTY\t4\t// Not Used -- to figure these two out?\n * #define DF_FT_ROOT\t\t5\n *\n * #define DF_BLOCK_SIZE\t0x200\n * #define DF_VTOC_SIZE\t\t0x80\n * #define DF_DE_PER_BLOCK\t4\n * #define DF_STREAM_BLOCK_SIZE\t0x40\n *\n * A DocFile is divided into blocks of 512 bytes.\n * The first block contains the header.\n *\n * The file header contains The first 109 entries in the VTOC of VTOCs.\n *\n * Each block pointed to by a VTOC of VTOCs contains a VTOC, which\n * includes block chains - just like FAT. This is a somewhat poor\n * design for the following reasons:\n *\n *\t1. FAT was a poor file system design to begin with, and\n *\t   has long been known to be horrendously inefficient\n *\t   for day to day operations.\n *\n *\t2. The problem is compounded here, since the file\n *\t   level streams are generally *not* read sequentially.\n *\t   This means that a significant percentage of reads\n *\t   require seeking from the start of the chain.\n *\n * Data chains also contain an internal VTOC. The block size for\n * the standard VTOC is 512. The block size for the internal VTOC\n * is 64.\n *\n * Now, the 109 blocks in the VTOC of VTOCs allows for files of\n * up to around 7MB. So what do you think happens if that's\n * exceeded? Well, there's an entry in the header block which\n * points to the first block used as additional storage for\n * the VTOC of VTOCs.\n *\n * Now we can get up to around 15MB. Now, guess how the file\n * format adds in another block to the VTOC of VTOCs. Come on,\n * it's no big surprise. That's right - the last entry in each\n * block extending the VTOC of VTOCs is, you guessed it, the\n * block number of the next block containing an extension to\n * the VTOC of VTOCs. The VTOC of VTOCs is chained!!!!\n *\n * So, to review:\n *\n * 1. If you are using a FAT file system, the location of\n *    your file's blocks is stored in chains.\n *\n * 2. At the abstract level, the file contains a VTOC of VTOCs,\n *    which is stored in the most inefficient possible format for\n *    random access - a chain (AKA list).\n *\n * 3. The VTOC of VTOCs contains descriptions of three file level\n *    streams:\n *\n *    a. The Directory stream\n *    b. The Data stream\n *    c. The Data VTOC stream\n *\n *    These are, of course, represented as chains.\n *\n * 4. The Data VTOC contains data describing the chains of blocks\n *    within the Data stream.\n *\n * That's right - we have a total of four levels of block chains!\n *\n * Now, is that complicated enough for you? No? OK, there's another\n * complication. If an individual stream (ie. an IStream) reaches\n * 4096 bytes in size, it gets moved from the Data Stream to\n * a new file level stream. Now, if the stream then gets truncated\n * back to less than 4096 bytes, it returns to the data stream.\n *\n * The effect of using this format can be seen very easily. Pick\n * an arbitrary application with a grid data representation that\n * can export to both Lotus 123 and Excel 5 or higher. Export\n * a large file to Lotus 123 and time it. Export the same thing\n * to Excel 5 and time that. The difference is the inefficiency\n * of the Microsoft DocFile format.\n *\n *\n * #define TOTAL_SIMPLE_VTOCS\t109\n *\n * struct\tDocFile_Header\n * {\n * \tdf_byte iMagic1;\t// 0xd0\n * \tdf_byte iMagic2;\t// 0xcf\n * \tdf_byte iMagic3;\t// 0x11\n * \tdf_byte iMagic4;\t// 0xe0 - Spells D0CF11E0, or DocFile\n * \tdf_byte iMagic5;\t// 161\t(igi upside down)\n * \tdf_byte iMagic6;\t// 177\t(lli upside down - see below\n * \tdf_byte iMagic7;\t// 26 (gz upside down)\n * \tdf_byte iMagic8;\t// 225 (szz upside down) - see below\n * \tdf_int4 aiUnknown1[4];\n * \tdf_int4 iVersion;\t// DocFile Version - 0x03003E\n * \tdf_int4 aiUnknown2[4];\n * \tdf_int4 nVTOCs;\t\t// Number of VTOCs\n * \tdf_int4 iFirstDirBlock; // First Directory Block\n * \tdf_int4 aiUnknown3[2];\n * \tdf_int4 iFirstDataVTOC; // First data VTOC block\n * \tdf_int4 iHasData;\t// 1 if there is data in the file - yes, this is important\n * \tdf_int4 iExtendedVTOC;\t// Extended VTOC location\n * \tdf_int4 iExtendedVTOCSize; // Size of extended VTOC (+1?)\n * \tdf_int4 aiVTOCofVTOCs[TOTAL_SIMPLE_VTOCS];\n * };\n *\n * struct\tDocFile_VTOC\n * {\n * \tdf_int4 aiBlocks[DF_VTOC_SIZE];\n * };\n *\n *\n * The meaning of the magic numbers\n *\n * 0xd0cf11e0 is DocFile with a zero on the end (sort of)\n *\n * If you key 177161 into a calculator, then turn the calculator\n * upside down, you get igilli, which may be a reference to\n * somebody's name, or to the Hebrew word for \"angel\".\n *\n * If you key 26225 into a calculator, then turn it upside down, you\n * get szzgz. Microsoft has a tradition of creating nonsense words\n * using the letters s, g, z and y. We think szzgz may be one of the\n * Microsoft placeholder variables, along the lines of foo, bar and baz.\n * Alternatively, it could be 22526, which would be gzszz.\n *\n *\n * struct\tDocFile_DirEnt\n * {\n * \tdf_char achEntryName[DF_NAMELEN];\t// Entry Name\n * \tdf_int2 iNameLen;\t\t\t// Name length in bytes, including NUL terminator\n * \tdf_byte iFileType;\t\t\t// Entry type\n * \tdf_byte iColour;\t\t\t// 1 = Black, 0 = Red\n * \tdf_int4 iLeftSibling;\t\t\t// Next Left Sibling Entry - See below\n * \tdf_int4 iRightSibling;\t\t\t// Next Right Sibling Entry\n * \tdf_int4 iFirstChild;\t\t\t// First Child Entry\n * \tdf_byte achClassID[16];\t\t\t// Class ID\n * \tdf_int4 iStateBits;\t\t\t// [GS]etStateBits value\n * \tdf_int4 iCreatedLow;\t\t\t// Low DWORD of creation time\n * \tdf_int4 iCreatedHigh;\t\t\t// High DWORD of creation time\n * \tdf_int4 iModifiedLow;\t\t\t// Low DWORD of modification time\n * \tdf_int4 iModifiedHigh;\t\t\t// High DWORD of modification time\n * \tdf_int4 iVTOCPosition;\t\t\t// VTOC Position\n * \tdf_int4 iFileSize;\t\t\t// Size of the stream\n * \tdf_int4 iZero;\t\t\t\t// We think this is part of the 64 bit stream size - must be 0\n * };\n *\n * Siblings\n * ========\n *\n * Siblings are stored in an obscure but incredibly elegant\n * data structure called a red-black tree. This is generally\n * defined as a 2-3-4 tree stored in a binary tree.\n *\n * A red-black tree can always be balanced very easily. The rules\n * for a red-black tree are as follows:\n *\n *\t1. The root node is always black.\n *\t2. The parent of a red node is always black.\n *\n * There is a Java demo of red-black trees at:\n *\n *\thttp://langevin.usc.edu/BST/RedBlackTree-Example.html\n *\n * This demo is an excellent tool for learning how red-black\n * trees work, without having to go through the process of\n * learning how they were derived.\n *\n * Within the tree, elements are ordered by the length of the\n * name and within that, ASCII order by name. This causes the\n * apparently bizarre reordering you see when you use dfview.\n *\n * This is a somewhat bizarre choice. It suggests that the\n * designer of the DocFile format was trying to optimise\n * searching through the directory entries. However searching\n * through directory entries is a relatively rare operation.\n * Reading and seeking within a stream are much more common\n * operations, especially within the file level streams, yet\n * these use the horrendously inefficient FAT chains.\n *\n * This suggests that the designer was probably somebody\n * fresh out of university, who had some basic knowledge of\n * basic data structures, but little knowledge of anything\n * more practical. It is bizarre to attempt to optimise\n * directory searches while not using a more efficient file\n * block locating system than FAT (seedling/sapling/tree\n * would result in a massive improvement - in fact we have\n * an alternative to docfiles that we use internally that\n * uses seedling/sapling/tree and *is* far more efficient).\n *\n * It is worth noting that the MS implementation of red-black\n * trees is incorrect (I can tell you're surprised) and\n * actually causes more operations to occur than are really\n * needed. Fortunately the fact that our implementation is\n * correct will not cause any problems - the MS implementation\n * still appears to cause the tree to satisfy the rules, albeit\n * a sequence of the same insertions in the different\n * implementations may result in a different, and possibly\n * deeper (but never shallower) tree.\n */\n\ntypedef struct {\n\tHANDLE\t\thf;\n\tSEGPTR\t\tlockbytes;\n} stream_access16;\n/* --- IStorage16 implementation struct */\n\ntypedef struct\n{\n        IStorage16                      IStorage16_iface;\n        LONG                            ref;\n        /* IStorage16 fields */\n        SEGPTR                          thisptr; /* pointer to this struct as segmented */\n        struct storage_pps_entry        stde;\n        int                             ppsent;\n\tstream_access16\t\t\tstr;\n} IStorage16Impl;\n\n\n/******************************************************************************\n *\t\tSTORAGE_get_big_block\t[Internal]\n *\n * Reading OLE compound storage\n */\nstatic BOOL\nSTORAGE_get_big_block(stream_access16 *str,int n,BYTE *block)\n{\n    DWORD result;\n\n    assert(n>=-1);\n    if (str->hf) {\n\tif ((SetFilePointer( str->hf, (n+1)*BIGSIZE, NULL,\n\t\t\t     SEEK_SET ) == INVALID_SET_FILE_POINTER) && GetLastError())\n\t{\n            WARN(\"(%p,%d,%p), seek failed (%d)\\n\",str->hf, n, block, GetLastError());\n\t    return FALSE;\n\t}\n\tif (!ReadFile( str->hf, block, BIGSIZE, &result, NULL ) || result != BIGSIZE)\n\t{\n            WARN(\"(hf=%p, block size %d): read didn't read (%d)\\n\",str->hf,n,GetLastError());\n\t    return FALSE;\n\t}\n    } else {\n\tDWORD args[6];\n\tHRESULT hres;\n\tHANDLE16 hsig;\n\n\targs[0] = (DWORD)str->lockbytes;\t/* iface */\n\targs[1] = (n+1)*BIGSIZE;\n\targs[2] = 0;\t/* ULARGE_INTEGER offset */\n\targs[3] = WOWGlobalAllocLock16( 0, BIGSIZE, &hsig ); /* sig */\n\targs[4] = BIGSIZE;\n\targs[5] = 0;\n\n\tif (!WOWCallback16Ex(\n\t    (DWORD)((const ILockBytes16Vtbl*)MapSL(\n\t\t\t(SEGPTR)((LPLOCKBYTES16)MapSL(str->lockbytes))->lpVtbl)\n\t    )->ReadAt,\n\t    WCB16_PASCAL,\n\t    6*sizeof(DWORD),\n\t    (LPVOID)args,\n\t    (LPDWORD)&hres\n\t)) {\n            ERR(\"CallTo16 ILockBytes16::ReadAt() failed, hres %x\\n\",hres);\n\t    return FALSE;\n\t}\n\tmemcpy(block, MapSL(args[3]), BIGSIZE);\n\tWOWGlobalUnlockFree16(args[3]);\n    }\n    return TRUE;\n}\n\nstatic BOOL\n_ilockbytes16_writeat(SEGPTR lockbytes, DWORD offset, DWORD length, void *buffer) {\n    DWORD args[6];\n    HRESULT hres;\n\n    args[0] = (DWORD)lockbytes;\t/* iface */\n    args[1] = offset;\n    args[2] = 0;\t/* ULARGE_INTEGER offset */\n    args[3] = (DWORD)MapLS( buffer );\n    args[4] = length;\n    args[5] = 0;\n\n    /* THIS_ ULARGE_INTEGER ulOffset, const void *pv, ULONG cb, ULONG *pcbWritten); */\n\n    if (!WOWCallback16Ex(\n\t(DWORD)((const ILockBytes16Vtbl*)MapSL(\n\t\t    (SEGPTR)((LPLOCKBYTES16)MapSL(lockbytes))->lpVtbl)\n\t)->WriteAt,\n\tWCB16_PASCAL,\n\t6*sizeof(DWORD),\n\t(LPVOID)args,\n\t(LPDWORD)&hres\n    )) {\n\tERR(\"CallTo16 ILockBytes16::WriteAt() failed, hres %x\\n\",hres);\n\treturn FALSE;\n    }\n    UnMapLS(args[3]);\n    return TRUE;\n}\n\n/******************************************************************************\n * STORAGE_put_big_block [INTERNAL]\n */\nstatic BOOL\nSTORAGE_put_big_block(stream_access16 *str,int n,BYTE *block)\n{\n    DWORD result;\n\n    assert(n>=-1);\n    if (str->hf) {\n\tif ((SetFilePointer( str->hf, (n+1)*BIGSIZE, NULL,\n\t\t\t     SEEK_SET ) == INVALID_SET_FILE_POINTER) && GetLastError())\n\t{\n            WARN(\"seek failed (%d)\\n\",GetLastError());\n\t    return FALSE;\n\t}\n\tif (!WriteFile( str->hf, block, BIGSIZE, &result, NULL ) || result != BIGSIZE)\n\t{\n            WARN(\" write failed (%d)\\n\",GetLastError());\n\t    return FALSE;\n\t}\n\treturn TRUE;\n    } else {\n\t_ilockbytes16_writeat(str->lockbytes, (n+1)*BIGSIZE, BIGSIZE, block);\n\treturn TRUE;\n    }\n}\n\n/******************************************************************************\n * STORAGE_get_next_big_blocknr [INTERNAL]\n */\nstatic int\nSTORAGE_get_next_big_blocknr(stream_access16 *str,int blocknr) {\n\tINT\tbbs[BIGSIZE/sizeof(INT)];\n\tstruct\tstorage_header\tsth;\n\n\tREAD_HEADER(str);\n\n\tassert(blocknr>>7<sth.num_of_bbd_blocks);\n\tif (sth.bbd_list[blocknr>>7]==0xffffffff)\n\t\treturn -5;\n\tif (!STORAGE_get_big_block(str,sth.bbd_list[blocknr>>7],(LPBYTE)bbs))\n\t\treturn -5;\n\tassert(bbs[blocknr&0x7f]!=STORAGE_CHAINENTRY_FREE);\n\treturn bbs[blocknr&0x7f];\n}\n\n/******************************************************************************\n * STORAGE_get_nth_next_big_blocknr [INTERNAL]\n */\nstatic int\nSTORAGE_get_nth_next_big_blocknr(stream_access16 *str,int blocknr,int nr) {\n\tINT\tbbs[BIGSIZE/sizeof(INT)];\n\tint\tlastblock = -1;\n\tstruct storage_header sth;\n\n\tTRACE(\"(blocknr=%d, nr=%d)\\n\", blocknr, nr);\n\tREAD_HEADER(str);\n\n\tassert(blocknr>=0);\n\twhile (nr--) {\n\t\tassert((blocknr>>7)<sth.num_of_bbd_blocks);\n\t\tassert(sth.bbd_list[blocknr>>7]!=0xffffffff);\n\n\t\t/* simple caching... */\n\t\tif (lastblock!=sth.bbd_list[blocknr>>7]) {\n\t\t\tBOOL ret = STORAGE_get_big_block(str,sth.bbd_list[blocknr>>7],(LPBYTE)bbs);\n\t\t\tassert(ret);\n\t\t\tlastblock = sth.bbd_list[blocknr>>7];\n\t\t}\n\t\tblocknr = bbs[blocknr&0x7f];\n\t}\n\treturn blocknr;\n}\n\n/******************************************************************************\n *\t\tSTORAGE_get_root_pps_entry\t[Internal]\n */\nstatic BOOL\nSTORAGE_get_root_pps_entry(stream_access16* str,struct storage_pps_entry *pstde) {\n\tint\tblocknr,i;\n\tBYTE\tblock[BIGSIZE];\n\tstruct storage_pps_entry\t*stde=(struct storage_pps_entry*)block;\n\tstruct storage_header sth;\n\n\tREAD_HEADER(str);\n\tblocknr = sth.root_startblock;\n\tTRACE(\"startblock is %d\\n\", blocknr);\n\twhile (blocknr>=0) {\n\t\tBOOL ret = STORAGE_get_big_block(str,blocknr,block);\n\t\tassert(ret);\n\t\tfor (i=0;i<4;i++) {\n\t\t\tif (!stde[i].pps_sizeofname)\n\t\t\t\tcontinue;\n\t\t\tif (stde[i].pps_type==5) {\n\t\t\t\t*pstde=stde[i];\n\t\t\t\treturn TRUE;\n\t\t\t}\n\t\t}\n\t\tblocknr=STORAGE_get_next_big_blocknr(str,blocknr);\n\t\tTRACE(\"next block is %d\\n\", blocknr);\n\t}\n\treturn FALSE;\n}\n\n/******************************************************************************\n * STORAGE_get_small_block [INTERNAL]\n */\nstatic BOOL\nSTORAGE_get_small_block(stream_access16 *str,int blocknr,BYTE *sblock) {\n\tBYTE\t\t\t\tblock[BIGSIZE];\n\tint\t\t\t\tbigblocknr;\n\tstruct storage_pps_entry\troot;\n\tBOOL ret;\n\n\tTRACE(\"(blocknr=%d)\\n\", blocknr);\n\tassert(blocknr>=0);\n\tret = STORAGE_get_root_pps_entry(str,&root);\n\tassert(ret);\n\tbigblocknr = STORAGE_get_nth_next_big_blocknr(str,root.pps_sb,blocknr/SMALLBLOCKS_PER_BIGBLOCK);\n\tassert(bigblocknr>=0);\n\tret = STORAGE_get_big_block(str,bigblocknr,block);\n\tassert(ret);\n\n\tmemcpy(sblock,((LPBYTE)block)+SMALLSIZE*(blocknr&(SMALLBLOCKS_PER_BIGBLOCK-1)),SMALLSIZE);\n\treturn TRUE;\n}\n\n/******************************************************************************\n * STORAGE_put_small_block [INTERNAL]\n */\nstatic BOOL\nSTORAGE_put_small_block(stream_access16 *str,int blocknr,const BYTE *sblock) {\n\tBYTE\t\t\t\tblock[BIGSIZE];\n\tint\t\t\t\tbigblocknr;\n\tstruct storage_pps_entry\troot;\n\tBOOL ret;\n\n\tassert(blocknr>=0);\n\tTRACE(\"(blocknr=%d)\\n\", blocknr);\n\n\tret = STORAGE_get_root_pps_entry(str,&root);\n\tassert(ret);\n\tbigblocknr = STORAGE_get_nth_next_big_blocknr(str,root.pps_sb,blocknr/SMALLBLOCKS_PER_BIGBLOCK);\n\tassert(bigblocknr>=0);\n\tret = STORAGE_get_big_block(str,bigblocknr,block);\n\tassert(ret);\n\n\tmemcpy(((LPBYTE)block)+SMALLSIZE*(blocknr&(SMALLBLOCKS_PER_BIGBLOCK-1)),sblock,SMALLSIZE);\n\tret = STORAGE_put_big_block(str,bigblocknr,block);\n\tassert(ret);\n\treturn TRUE;\n}\n\n/******************************************************************************\n * STORAGE_get_next_small_blocknr [INTERNAL]\n */\nstatic int\nSTORAGE_get_next_small_blocknr(stream_access16 *str,int blocknr) {\n\tBYTE\t\t\t\tblock[BIGSIZE];\n\tLPINT\t\t\t\tsbd = (LPINT)block;\n\tint\t\t\t\tbigblocknr;\n\tstruct storage_header\t\tsth;\n\tBOOL ret;\n\n\tTRACE(\"(blocknr=%d)\\n\", blocknr);\n\tREAD_HEADER(str);\n\tassert(blocknr>=0);\n\tbigblocknr = STORAGE_get_nth_next_big_blocknr(str,sth.sbd_startblock,blocknr/128);\n\tassert(bigblocknr>=0);\n\tret = STORAGE_get_big_block(str,bigblocknr,block);\n\tassert(ret);\n\tassert(sbd[blocknr & 127]!=STORAGE_CHAINENTRY_FREE);\n\treturn sbd[blocknr & (128-1)];\n}\n\n/******************************************************************************\n * STORAGE_get_nth_next_small_blocknr [INTERNAL]\n */\nstatic int\nSTORAGE_get_nth_next_small_blocknr(stream_access16*str,int blocknr,int nr) {\n\tint\tlastblocknr=-129;\n\tBYTE\tblock[BIGSIZE];\n\tLPINT\tsbd = (LPINT)block;\n\tstruct storage_header sth;\n\tBOOL ret;\n\n\tTRACE(\"(blocknr=%d, nr=%d)\\n\", blocknr, nr);\n\tREAD_HEADER(str);\n\tassert(blocknr>=0);\n\twhile ((nr--) && (blocknr>=0)) {\n\t\tif (lastblocknr/128!=blocknr/128) {\n\t\t\tint\tbigblocknr;\n\t\t\tbigblocknr = STORAGE_get_nth_next_big_blocknr(str,sth.sbd_startblock,blocknr/128);\n\t\t\tassert(bigblocknr>=0);\n\t\t\tret = STORAGE_get_big_block(str,bigblocknr,block);\n\t\t\tassert(ret);\n\t\t\tlastblocknr = blocknr;\n\t\t}\n\t\tassert(lastblocknr>=0);\n\t\tlastblocknr=blocknr;\n\t\tblocknr=sbd[blocknr & (128-1)];\n\t\tassert(blocknr!=STORAGE_CHAINENTRY_FREE);\n\t}\n\treturn blocknr;\n}\n\n/******************************************************************************\n * STORAGE_get_pps_entry [INTERNAL]\n */\nstatic int\nSTORAGE_get_pps_entry(stream_access16*str,int n,struct storage_pps_entry *pstde) {\n\tint\tblocknr;\n\tBYTE\tblock[BIGSIZE];\n\tstruct storage_pps_entry *stde = (struct storage_pps_entry*)(((LPBYTE)block)+128*(n&3));\n\tstruct storage_header sth;\n\tBOOL ret;\n\n\tTRACE(\"(n=%d)\\n\", n);\n\tREAD_HEADER(str);\n\t/* we have 4 pps entries per big block */\n\tblocknr = STORAGE_get_nth_next_big_blocknr(str,sth.root_startblock,n/4);\n\tassert(blocknr>=0);\n\tret = STORAGE_get_big_block(str,blocknr,block);\n\tassert(ret);\n\n\t*pstde=*stde;\n\treturn 1;\n}\n\n/******************************************************************************\n *\t\tSTORAGE_put_pps_entry\t[Internal]\n */\nstatic int\nSTORAGE_put_pps_entry(stream_access16*str,int n,const struct storage_pps_entry *pstde) {\n\tint\tblocknr;\n\tBYTE\tblock[BIGSIZE];\n\tstruct storage_pps_entry *stde = (struct storage_pps_entry*)(((LPBYTE)block)+128*(n&3));\n\tstruct storage_header sth;\n\tBOOL ret;\n\n\tTRACE(\"(n=%d)\\n\", n);\n\tREAD_HEADER(str);\n\t/* we have 4 pps entries per big block */\n\tblocknr = STORAGE_get_nth_next_big_blocknr(str,sth.root_startblock,n/4);\n\tassert(blocknr>=0);\n\tret = STORAGE_get_big_block(str,blocknr,block);\n\tassert(ret);\n\t*stde=*pstde;\n\tret = STORAGE_put_big_block(str,blocknr,block);\n\tassert(ret);\n\treturn 1;\n}\n\n/******************************************************************************\n *\t\tSTORAGE_look_for_named_pps\t[Internal]\n */\nstatic int\nSTORAGE_look_for_named_pps(stream_access16*str,int n,LPOLESTR name) {\n\tstruct storage_pps_entry\tstde;\n\tint\t\t\t\tret;\n\n\tTRACE(\"(n=%d,name=%s)\\n\", n, debugstr_w(name));\n\tif (n==-1)\n\t\treturn -1;\n\tif (1!=STORAGE_get_pps_entry(str,n,&stde))\n\t\treturn -1;\n\n\tif (!lstrcmpW(name,stde.pps_rawname))\n\t\treturn n;\n\tif (stde.pps_prev != -1) {\n\t\tret=STORAGE_look_for_named_pps(str,stde.pps_prev,name);\n\t\tif (ret!=-1)\n\t\t\treturn ret;\n\t}\n\tif (stde.pps_next != -1) {\n\t\tret=STORAGE_look_for_named_pps(str,stde.pps_next,name);\n\t\tif (ret!=-1)\n\t\t\treturn ret;\n\t}\n\treturn -1;\n}\n\n/******************************************************************************\n *\t\tSTORAGE_dump_pps_entry\t[Internal]\n *\n * This function is there to simplify debugging. It is otherwise unused.\n */\nvoid\nSTORAGE_dump_pps_entry(struct storage_pps_entry *stde) {\n    char\tname[33];\n\n    WideCharToMultiByte( CP_ACP, 0, stde->pps_rawname, -1, name, sizeof(name), NULL, NULL);\n\tif (!stde->pps_sizeofname)\n\t\treturn;\n\tTRACE(\"name: %s\\n\",name);\n\tTRACE(\"type: %d\\n\",stde->pps_type);\n\tTRACE(\"prev pps: %d\\n\",stde->pps_prev);\n\tTRACE(\"next pps: %d\\n\",stde->pps_next);\n\tTRACE(\"dir pps: %d\\n\",stde->pps_dir);\n\tTRACE(\"guid: %s\\n\",debugstr_guid(&(stde->pps_guid)));\n\tif (stde->pps_type !=2) {\n\t\ttime_t\tt;\n                DWORD dw;\n\t\tRtlTimeToSecondsSince1970((LARGE_INTEGER *)&(stde->pps_ft1),&dw);\n                t = dw;\n\t\tTRACE(\"ts1: %s\\n\",ctime(&t));\n\t\tRtlTimeToSecondsSince1970((LARGE_INTEGER *)&(stde->pps_ft2),&dw);\n                t = dw;\n\t\tTRACE(\"ts2: %s\\n\",ctime(&t));\n\t}\n\tTRACE(\"startblock: %d\\n\",stde->pps_sb);\n\tTRACE(\"size: %d\\n\",stde->pps_size);\n}\n\n/******************************************************************************\n * STORAGE_init_storage [INTERNAL]\n */\nstatic BOOL\nSTORAGE_init_storage(stream_access16 *str) {\n\tBYTE\tblock[BIGSIZE];\n\tLPDWORD\tbbs;\n\tstruct storage_header *sth;\n\tstruct storage_pps_entry *stde;\n        DWORD result;\n\n\tif (str->hf)\n\t    SetFilePointer( str->hf, 0, NULL, SEEK_SET );\n\t/* block -1 is the storage header */\n\tsth = (struct storage_header*)block;\n\tmemcpy(sth->magic,STORAGE_magic,8);\n\tmemset(sth->unknown1,0,sizeof(sth->unknown1));\n\tmemset(sth->unknown2,0,sizeof(sth->unknown2));\n\tmemset(sth->unknown3,0,sizeof(sth->unknown3));\n\tsth->num_of_bbd_blocks\t= 1;\n\tsth->root_startblock\t= 1;\n\tsth->sbd_startblock\t= 0xffffffff;\n\tmemset(sth->bbd_list,0xff,sizeof(sth->bbd_list));\n\tsth->bbd_list[0]\t= 0;\n\tif (str->hf) {\n\t    if (!WriteFile( str->hf, block, BIGSIZE, &result, NULL ) || result != BIGSIZE) return FALSE;\n\t} else {\n\t    if (!_ilockbytes16_writeat(str->lockbytes, 0, BIGSIZE, block)) return FALSE;\n\t}\n\t/* block 0 is the big block directory */\n\tbbs=(LPDWORD)block;\n\tmemset(block,0xff,sizeof(block)); /* mark all blocks as free */\n\tbbs[0]=STORAGE_CHAINENTRY_ENDOFCHAIN; /* for this block */\n\tbbs[1]=STORAGE_CHAINENTRY_ENDOFCHAIN; /* for directory entry */\n\tif (str->hf) {\n\t    if (!WriteFile( str->hf, block, BIGSIZE, &result, NULL ) || result != BIGSIZE) return FALSE;\n\t} else {\n\t    if (!_ilockbytes16_writeat(str->lockbytes, BIGSIZE, BIGSIZE, block)) return FALSE;\n\t}\n\t/* block 1 is the root directory entry */\n\tmemset(block,0x00,sizeof(block));\n\tstde = (struct storage_pps_entry*)block;\n        MultiByteToWideChar(CP_ACP, 0, \"RootEntry\", -1, stde->pps_rawname,\n                            ARRAY_SIZE(stde->pps_rawname));\n\tstde->pps_sizeofname\t= (strlenW(stde->pps_rawname)+1) * sizeof(WCHAR);\n\tstde->pps_type\t\t= 5;\n\tstde->pps_dir\t\t= -1;\n\tstde->pps_next\t\t= -1;\n\tstde->pps_prev\t\t= -1;\n\tstde->pps_sb\t\t= 0xffffffff;\n\tstde->pps_size\t\t= 0;\n\tif (str->hf) {\n\t    return (WriteFile( str->hf, block, BIGSIZE, &result, NULL ) && result == BIGSIZE);\n\t} else {\n\t    return _ilockbytes16_writeat(str->lockbytes, BIGSIZE, BIGSIZE, block);\n\t}\n}\n\n/******************************************************************************\n *\t\tSTORAGE_set_big_chain\t[Internal]\n */\nstatic BOOL\nSTORAGE_set_big_chain(stream_access16*str,int blocknr,INT type) {\n\tBYTE\tblock[BIGSIZE];\n\tLPINT\tbbd = (LPINT)block;\n\tint\tnextblocknr,bigblocknr;\n\tstruct storage_header sth;\n\tBOOL ret;\n\n\tREAD_HEADER(str);\n\tassert(blocknr!=type);\n\twhile (blocknr>=0) {\n\t\tbigblocknr = sth.bbd_list[blocknr/128];\n\t\tassert(bigblocknr>=0);\n\t\tret = STORAGE_get_big_block(str,bigblocknr,block);\n\t\tassert(ret);\n\n\t\tnextblocknr = bbd[blocknr&(128-1)];\n\t\tbbd[blocknr&(128-1)] = type;\n\t\tif (type>=0)\n\t\t\treturn TRUE;\n\t\tret = STORAGE_put_big_block(str,bigblocknr,block);\n\t\tassert(ret);\n\t\ttype = STORAGE_CHAINENTRY_FREE;\n\t\tblocknr = nextblocknr;\n\t}\n\treturn TRUE;\n}\n\n/******************************************************************************\n * STORAGE_set_small_chain [Internal]\n */\nstatic BOOL\nSTORAGE_set_small_chain(stream_access16*str,int blocknr,INT type) {\n\tBYTE\tblock[BIGSIZE];\n\tLPINT\tsbd = (LPINT)block;\n\tint\tlastblocknr,nextsmallblocknr,bigblocknr;\n\tstruct storage_header sth;\n\tBOOL ret;\n\n\tREAD_HEADER(str);\n\n\tassert(blocknr!=type);\n\tlastblocknr=-129;bigblocknr=-2;\n\twhile (blocknr>=0) {\n\t\t/* cache block ... */\n\t\tif (lastblocknr/128!=blocknr/128) {\n\t\t\tbigblocknr = STORAGE_get_nth_next_big_blocknr(str,sth.sbd_startblock,blocknr/128);\n\t\t\tassert(bigblocknr>=0);\n\t\t\tret = STORAGE_get_big_block(str,bigblocknr,block);\n\t\t\tassert(ret);\n\t\t}\n\t\tlastblocknr = blocknr;\n\t\tnextsmallblocknr = sbd[blocknr&(128-1)];\n\t\tsbd[blocknr&(128-1)] = type;\n\t\tret = STORAGE_put_big_block(str,bigblocknr,block);\n\t\tassert(ret);\n\t\tif (type>=0)\n\t\t\treturn TRUE;\n\t\ttype = STORAGE_CHAINENTRY_FREE;\n\t\tblocknr = nextsmallblocknr;\n\t}\n\treturn TRUE;\n}\n\n/******************************************************************************\n *\t\tSTORAGE_get_free_big_blocknr\t[Internal]\n */\nstatic int\nSTORAGE_get_free_big_blocknr(stream_access16 *str) {\n\tBYTE\tblock[BIGSIZE];\n\tLPINT\tsbd = (LPINT)block;\n\tint\tlastbigblocknr,i,bigblocknr;\n\tunsigned int curblock;\n\tstruct storage_header sth;\n\tBOOL ret;\n\n\tREAD_HEADER(str);\n\tcurblock\t= 0;\n\tlastbigblocknr\t= -1;\n\tbigblocknr\t= sth.bbd_list[curblock];\n\twhile (curblock<sth.num_of_bbd_blocks) {\n\t\tassert(bigblocknr>=0);\n\t\tret = STORAGE_get_big_block(str,bigblocknr,block);\n\t\tassert(ret);\n\t\tfor (i=0;i<128;i++)\n\t\t\tif (sbd[i]==STORAGE_CHAINENTRY_FREE) {\n\t\t\t\tsbd[i] = STORAGE_CHAINENTRY_ENDOFCHAIN;\n\t\t\t\tret = STORAGE_put_big_block(str,bigblocknr,block);\n\t\t\t\tassert(ret);\n\t\t\t\tmemset(block,0x42,sizeof(block));\n\t\t\t\tret = STORAGE_put_big_block(str,i+curblock*128,block);\n\t\t\t\tassert(ret);\n\t\t\t\treturn i+curblock*128;\n\t\t\t}\n\t\tlastbigblocknr = bigblocknr;\n\t\tbigblocknr = sth.bbd_list[++curblock];\n\t}\n\tbigblocknr = curblock*128;\n\t/* since we have marked all blocks from 0 up to curblock*128-1\n\t * the next free one is curblock*128, where we happily put our\n\t * next large block depot.\n\t */\n\tmemset(block,0xff,sizeof(block));\n\t/* mark the block allocated and returned by this function */\n\tsbd[1] = STORAGE_CHAINENTRY_ENDOFCHAIN;\n\tret = STORAGE_put_big_block(str,bigblocknr,block);\n\tassert(ret);\n\n\t/* if we had a bbd block already (most likely) we need\n\t * to link the new one into the chain\n\t */\n\tif (lastbigblocknr!=-1) {\n\t\tret = STORAGE_set_big_chain(str,lastbigblocknr,bigblocknr);\n\t\tassert(ret);\n\t}\n\tsth.bbd_list[curblock]=bigblocknr;\n\tsth.num_of_bbd_blocks++;\n\tassert(sth.num_of_bbd_blocks==curblock+1);\n\tret = STORAGE_put_big_block(str,-1,(LPBYTE)&sth);\n\tassert(ret);\n\n\t/* Set the end of the chain for the bigblockdepots */\n\tret = STORAGE_set_big_chain(str,bigblocknr,STORAGE_CHAINENTRY_ENDOFCHAIN);\n\tassert(ret);\n\t/* add 1, for the first entry is used for the additional big block\n\t * depot. (means we already used bigblocknr) */\n\tmemset(block,0x42,sizeof(block));\n\t/* allocate this block (filled with 0x42) */\n\tret = STORAGE_put_big_block(str,bigblocknr+1,block);\n\tassert(ret);\n\treturn bigblocknr+1;\n}\n\n\n/******************************************************************************\n *\t\tSTORAGE_get_free_small_blocknr\t[Internal]\n */\nstatic int\nSTORAGE_get_free_small_blocknr(stream_access16 *str) {\n\tBYTE\tblock[BIGSIZE];\n\tLPINT\tsbd = (LPINT)block;\n\tint\tlastbigblocknr,newblocknr,i,curblock,bigblocknr;\n\tstruct storage_pps_entry\troot;\n\tstruct storage_header sth;\n\n\tREAD_HEADER(str);\n\tbigblocknr\t= sth.sbd_startblock;\n\tcurblock\t= 0;\n\tlastbigblocknr\t= -1;\n\tnewblocknr\t= -1;\n\twhile (bigblocknr>=0) {\n\t\tif (!STORAGE_get_big_block(str,bigblocknr,block))\n\t\t\treturn -1;\n\t\tfor (i=0;i<128;i++)\n\t\t\tif (sbd[i]==STORAGE_CHAINENTRY_FREE) {\n\t\t\t\tsbd[i]=STORAGE_CHAINENTRY_ENDOFCHAIN;\n\t\t\t\tnewblocknr = i+curblock*128;\n\t\t\t\tbreak;\n\t\t\t}\n\t\tif (i!=128)\n\t\t\tbreak;\n\t\tlastbigblocknr = bigblocknr;\n\t\tbigblocknr = STORAGE_get_next_big_blocknr(str,bigblocknr);\n\t\tcurblock++;\n\t}\n\tif (newblocknr==-1) {\n\t\tbigblocknr = STORAGE_get_free_big_blocknr(str);\n\t\tif (bigblocknr<0)\n\t\t\treturn -1;\n\t\tREAD_HEADER(str);\n\t\tmemset(block,0xff,sizeof(block));\n\t\tsbd[0]=STORAGE_CHAINENTRY_ENDOFCHAIN;\n\t\tif (!STORAGE_put_big_block(str,bigblocknr,block))\n\t\t\treturn -1;\n\t\tif (lastbigblocknr==-1) {\n\t\t\tsth.sbd_startblock = bigblocknr;\n\t\t\tif (!STORAGE_put_big_block(str,-1,(LPBYTE)&sth)) /* need to write it */\n\t\t\t\treturn -1;\n\t\t} else {\n\t\t\tif (!STORAGE_set_big_chain(str,lastbigblocknr,bigblocknr))\n\t\t\t\treturn -1;\n\t\t}\n\t\tif (!STORAGE_set_big_chain(str,bigblocknr,STORAGE_CHAINENTRY_ENDOFCHAIN))\n\t\t\treturn -1;\n\t\tnewblocknr = curblock*128;\n\t}\n\t/* allocate enough big blocks for storing the allocated small block */\n\tif (!STORAGE_get_root_pps_entry(str,&root))\n\t\treturn -1;\n\tif (root.pps_sb==-1)\n\t\tlastbigblocknr\t= -1;\n\telse\n\t\tlastbigblocknr\t= STORAGE_get_nth_next_big_blocknr(str,root.pps_sb,(root.pps_size-1)/BIGSIZE);\n\twhile (root.pps_size < (newblocknr*SMALLSIZE+SMALLSIZE-1)) {\n\t\t/* we need to allocate more stuff */\n\t\tbigblocknr = STORAGE_get_free_big_blocknr(str);\n\t\tif (bigblocknr<0)\n\t\t\treturn -1;\n\t\tREAD_HEADER(str);\n\t\tif (root.pps_sb==-1) {\n\t\t\troot.pps_sb\t = bigblocknr;\n\t\t\troot.pps_size\t+= BIGSIZE;\n\t\t} else {\n\t\t\tif (!STORAGE_set_big_chain(str,lastbigblocknr,bigblocknr))\n\t\t\t\treturn -1;\n\t\t\troot.pps_size\t+= BIGSIZE;\n\t\t}\n\t\tlastbigblocknr = bigblocknr;\n\t}\n\tif (!STORAGE_set_big_chain(str,lastbigblocknr,STORAGE_CHAINENTRY_ENDOFCHAIN))\n\t\treturn -1;\n\tif (!STORAGE_put_pps_entry(str,0,&root))\n\t\treturn -1;\n\treturn newblocknr;\n}\n\n/******************************************************************************\n *\t\tSTORAGE_get_free_pps_entry\t[Internal]\n */\nstatic int\nSTORAGE_get_free_pps_entry(stream_access16*str) {\n\tint\tblocknr, i, curblock, lastblocknr=-1;\n\tBYTE\tblock[BIGSIZE];\n\tstruct storage_pps_entry *stde = (struct storage_pps_entry*)block;\n\tstruct storage_header sth;\n\n\tREAD_HEADER(str);\n\tblocknr = sth.root_startblock;\n\tassert(blocknr>=0);\n\tcurblock=0;\n\twhile (blocknr>=0) {\n\t\tif (!STORAGE_get_big_block(str,blocknr,block))\n\t\t\treturn -1;\n\t\tfor (i=0;i<4;i++)\n\t\t\tif (stde[i].pps_sizeofname==0) /* free */\n\t\t\t\treturn curblock*4+i;\n\t\tlastblocknr = blocknr;\n\t\tblocknr = STORAGE_get_next_big_blocknr(str,blocknr);\n\t\tcurblock++;\n\t}\n\tassert(blocknr==STORAGE_CHAINENTRY_ENDOFCHAIN);\n\tblocknr = STORAGE_get_free_big_blocknr(str);\n\t/* sth invalidated */\n\tif (blocknr<0)\n\t\treturn -1;\n\n\tif (!STORAGE_set_big_chain(str,lastblocknr,blocknr))\n\t\treturn -1;\n\tif (!STORAGE_set_big_chain(str,blocknr,STORAGE_CHAINENTRY_ENDOFCHAIN))\n\t\treturn -1;\n\tmemset(block,0,sizeof(block));\n\tSTORAGE_put_big_block(str,blocknr,block);\n\treturn curblock*4;\n}\n\n/* --- IStream16 implementation */\n\ntypedef struct\n{\n        IStream16                       IStream16_iface;\n        LONG                            ref;\n        /* IStream16 fields */\n        SEGPTR                          thisptr; /* pointer to this struct as segmented */\n        struct storage_pps_entry        stde;\n        int                             ppsent;\n        ULARGE_INTEGER                  offset;\n\tstream_access16\t\t\tstr;\n} IStream16Impl;\n\nstatic inline IStream16Impl *impl_from_IStream16(IStream16 *iface)\n{\n        return CONTAINING_RECORD(iface, IStream16Impl, IStream16_iface);\n}\n\n/******************************************************************************\n *\t\tIStream16_QueryInterface\t[STORAGE.518]\n */\nHRESULT CDECL IStream16_fnQueryInterface(IStream16 *iface, REFIID refiid, void **obj)\n{\n\tIStream16Impl *This = impl_from_IStream16(iface);\n\tTRACE_(relay)(\"(%p)->(%s,%p)\\n\",This,debugstr_guid(refiid),obj);\n\tif (!memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown))) {\n\t\t*obj = This;\n\t\treturn 0;\n\t}\n\treturn OLE_E_ENUM_NOMORE;\n\n}\n\n/******************************************************************************\n * IStream16_AddRef [STORAGE.519]\n */\nULONG CDECL IStream16_fnAddRef(IStream16 *iface)\n{\n\tIStream16Impl *This = impl_from_IStream16(iface);\n\treturn InterlockedIncrement(&This->ref);\n}\n\nstatic void\n_ilockbytes16_addref(SEGPTR lockbytes) {\n    DWORD args[1];\n    HRESULT hres;\n\n    args[0] = (DWORD)lockbytes;\t/* iface */\n    if (!WOWCallback16Ex(\n\t(DWORD)((const ILockBytes16Vtbl*)MapSL(\n\t\t    (SEGPTR)((LPLOCKBYTES16)MapSL(lockbytes))->lpVtbl)\n\t)->AddRef,\n\tWCB16_PASCAL,\n\t1*sizeof(DWORD),\n\t(LPVOID)args,\n\t(LPDWORD)&hres\n    ))\n\tERR(\"CallTo16 ILockBytes16::AddRef() failed, hres %x\\n\",hres);\n}\n\nstatic void\n_ilockbytes16_release(SEGPTR lockbytes) {\n    DWORD args[1];\n    HRESULT hres;\n\n    args[0] = (DWORD)lockbytes;\t/* iface */\n    if (!WOWCallback16Ex(\n\t(DWORD)((const ILockBytes16Vtbl*)MapSL(\n\t\t    (SEGPTR)((LPLOCKBYTES16)MapSL(lockbytes))->lpVtbl)\n\t)->Release,\n\tWCB16_PASCAL,\n\t1*sizeof(DWORD),\n\t(LPVOID)args,\n\t(LPDWORD)&hres\n    ))\n\tERR(\"CallTo16 ILockBytes16::Release() failed, hres %x\\n\",hres);\n}\n\nstatic void\n_ilockbytes16_flush(SEGPTR lockbytes) {\n    DWORD args[1];\n    HRESULT hres;\n\n    args[0] = (DWORD)lockbytes;\t/* iface */\n    if (!WOWCallback16Ex(\n\t(DWORD)((const ILockBytes16Vtbl*)MapSL(\n\t\t    (SEGPTR)((LPLOCKBYTES16)MapSL(lockbytes))->lpVtbl)\n\t)->Flush,\n\tWCB16_PASCAL,\n\t1*sizeof(DWORD),\n\t(LPVOID)args,\n\t(LPDWORD)&hres\n    ))\n\tERR(\"CallTo16 ILockBytes16::Flush() failed, hres %x\\n\",hres);\n}\n\n/******************************************************************************\n * IStream16_Release [STORAGE.520]\n */\nULONG CDECL IStream16_fnRelease(IStream16 *iface)\n{\n\tIStream16Impl *This = impl_from_IStream16(iface);\n        ULONG ref;\n\n\tif (This->str.hf)\n\t    FlushFileBuffers(This->str.hf);\n\telse\n\t    _ilockbytes16_flush(This->str.lockbytes);\n        ref = InterlockedDecrement(&This->ref);\n\tif (ref)\n\t    return ref;\n\n\tif (This->str.hf)\n\t    CloseHandle(This->str.hf);\n\telse\n\t    _ilockbytes16_release(This->str.lockbytes);\n        UnMapLS( This->thisptr );\n\tHeapFree( GetProcessHeap(), 0, This );\n\treturn 0;\n}\n\n/******************************************************************************\n *\t\tIStream16_Seek\t[STORAGE.523]\n *\n * FIXME\n *    Does not handle 64 bits\n */\nHRESULT CDECL IStream16_fnSeek(IStream16 *iface, LARGE_INTEGER offset, DWORD whence,\n                               ULARGE_INTEGER *newpos)\n{\n    IStream16Impl *This = impl_from_IStream16(iface);\n    TRACE_(relay)(\"(%p)->([%d.%d],%d,%p)\\n\",This,offset.u.HighPart,offset.u.LowPart,whence,newpos);\n\n    switch (whence) {\n    case STREAM_SEEK_SET:\n        This->offset.QuadPart = offset.QuadPart;\n        break;\n    case STREAM_SEEK_CUR:\n        if ((offset.QuadPart < 0 && -offset.QuadPart > This->offset.QuadPart) ||\n            (offset.QuadPart > 0 && -offset.QuadPart <= This->offset.QuadPart))\n            return STG_E_INVALIDFUNCTION;\n        This->offset.QuadPart += offset.QuadPart;\n        break;\n    case STREAM_SEEK_END:\n        if (-offset.QuadPart > This->stde.pps_size)\n            return STG_E_INVALIDFUNCTION;\n\n        This->offset.QuadPart = This->stde.pps_size + offset.QuadPart;\n        break;\n    }\n\n    if (This->offset.QuadPart>This->stde.pps_size)\n        This->offset.QuadPart=This->stde.pps_size;\n    if (newpos) *newpos = This->offset;\n    return S_OK;\n}\n\n/******************************************************************************\n *\t\tIStream16_Read\t[STORAGE.521]\n */\nHRESULT CDECL IStream16_fnRead(IStream16 *iface, void *pv, ULONG cb, ULONG *pcbRead)\n{\n\tIStream16Impl *This = impl_from_IStream16(iface);\n\tBYTE\tblock[BIGSIZE];\n\tULONG\t*bytesread=pcbRead,xxread;\n\tint\tblocknr;\n\tLPBYTE\tpbv = pv;\n\n\tTRACE_(relay)(\"(%p)->(%p,%d,%p)\\n\",This,pv,cb,pcbRead);\n\tif (!pcbRead) bytesread=&xxread;\n\t*bytesread = 0;\n\n\tif (cb>This->stde.pps_size-This->offset.u.LowPart)\n\t\tcb=This->stde.pps_size-This->offset.u.LowPart;\n\tif (This->stde.pps_size < 0x1000) {\n\t\t/* use small block reader */\n\t\tblocknr = STORAGE_get_nth_next_small_blocknr(&This->str,This->stde.pps_sb,This->offset.u.LowPart/SMALLSIZE);\n\t\twhile (cb) {\n\t\t\tunsigned int cc;\n\n\t\t\tif (!STORAGE_get_small_block(&This->str,blocknr,block)) {\n\t\t\t   WARN(\"small block read failed!!!\\n\");\n\t\t\t\treturn E_FAIL;\n\t\t\t}\n\t\t\tcc = cb;\n\t\t\tif (cc>SMALLSIZE-(This->offset.u.LowPart&(SMALLSIZE-1)))\n\t\t\t\tcc=SMALLSIZE-(This->offset.u.LowPart&(SMALLSIZE-1));\n\t\t\tmemcpy(pbv,block+(This->offset.u.LowPart&(SMALLSIZE-1)),cc);\n\t\t\tThis->offset.u.LowPart+=cc;\n\t\t\tpbv+=cc;\n\t\t\t*bytesread+=cc;\n\t\t\tcb-=cc;\n\t\t\tblocknr = STORAGE_get_next_small_blocknr(&This->str,blocknr);\n\t\t}\n\t} else {\n\t\t/* use big block reader */\n\t\tblocknr = STORAGE_get_nth_next_big_blocknr(&This->str,This->stde.pps_sb,This->offset.u.LowPart/BIGSIZE);\n\t\twhile (cb) {\n\t\t\tunsigned int cc;\n\n\t\t\tif (!STORAGE_get_big_block(&This->str,blocknr,block)) {\n\t\t\t\tWARN(\"big block read failed!!!\\n\");\n\t\t\t\treturn E_FAIL;\n\t\t\t}\n\t\t\tcc = cb;\n\t\t\tif (cc>BIGSIZE-(This->offset.u.LowPart&(BIGSIZE-1)))\n\t\t\t\tcc=BIGSIZE-(This->offset.u.LowPart&(BIGSIZE-1));\n\t\t\tmemcpy(pbv,block+(This->offset.u.LowPart&(BIGSIZE-1)),cc);\n\t\t\tThis->offset.u.LowPart+=cc;\n\t\t\tpbv+=cc;\n\t\t\t*bytesread+=cc;\n\t\t\tcb-=cc;\n\t\t\tblocknr=STORAGE_get_next_big_blocknr(&This->str,blocknr);\n\t\t}\n\t}\n\treturn S_OK;\n}\n\n/******************************************************************************\n *\t\tIStream16_Write\t[STORAGE.522]\n */\nHRESULT CDECL IStream16_fnWrite(IStream16 *iface, const void *pv, ULONG cb, ULONG *pcbWrite)\n{\n\tIStream16Impl *This = impl_from_IStream16(iface);\n\tBYTE\tblock[BIGSIZE];\n\tULONG\t*byteswritten=pcbWrite,xxwritten;\n\tint\toldsize,newsize,i,curoffset=0,lastblocknr,blocknr,cc;\n\tconst BYTE* pbv = pv;\n\n\tif (!pcbWrite) byteswritten=&xxwritten;\n\t*byteswritten = 0;\n\n\tTRACE_(relay)(\"(%p)->(%p,%d,%p)\\n\",This,pv,cb,pcbWrite);\n\t/* do we need to junk some blocks? */\n\tnewsize\t= This->offset.u.LowPart+cb;\n\toldsize\t= This->stde.pps_size;\n\tif (newsize < oldsize) {\n\t\tif (oldsize < 0x1000) {\n\t\t\t/* only small blocks */\n\t\t\tblocknr=STORAGE_get_nth_next_small_blocknr(&This->str,This->stde.pps_sb,newsize/SMALLSIZE);\n\n\t\t\tassert(blocknr>=0);\n\n\t\t\t/* will set the rest of the chain to 'free' */\n\t\t\tif (!STORAGE_set_small_chain(&This->str,blocknr,STORAGE_CHAINENTRY_ENDOFCHAIN))\n\t\t\t\treturn E_FAIL;\n\t\t} else {\n\t\t\tif (newsize >= 0x1000) {\n\t\t\t\tblocknr=STORAGE_get_nth_next_big_blocknr(&This->str,This->stde.pps_sb,newsize/BIGSIZE);\n\t\t\t\tassert(blocknr>=0);\n\n\t\t\t\t/* will set the rest of the chain to 'free' */\n\t\t\t\tif (!STORAGE_set_big_chain(&This->str,blocknr,STORAGE_CHAINENTRY_ENDOFCHAIN))\n\t\t\t\t\treturn E_FAIL;\n\t\t\t} else {\n\t\t\t\t/* Migrate large blocks to small blocks\n\t\t\t\t * (we just migrate newsize bytes)\n\t\t\t\t */\n\t\t\t\tLPBYTE\tcurdata,data = HeapAlloc(GetProcessHeap(),0,newsize+BIGSIZE);\n\t\t\t\tHRESULT r = E_FAIL;\n\n\t\t\t\tcc\t= newsize;\n\t\t\t\tblocknr = This->stde.pps_sb;\n\t\t\t\tcurdata = data;\n\t\t\t\twhile (cc>0) {\n\t\t\t\t\tif (!STORAGE_get_big_block(&This->str,blocknr,curdata)) {\n\t\t\t\t\t\tHeapFree(GetProcessHeap(),0,data);\n\t\t\t\t\t\treturn E_FAIL;\n\t\t\t\t\t}\n\t\t\t\t\tcurdata\t+= BIGSIZE;\n\t\t\t\t\tcc\t-= BIGSIZE;\n\t\t\t\t\tblocknr\t = STORAGE_get_next_big_blocknr(&This->str,blocknr);\n\t\t\t\t}\n\t\t\t\t/* frees complete chain for this stream */\n\t\t\t\tif (!STORAGE_set_big_chain(&This->str,This->stde.pps_sb,STORAGE_CHAINENTRY_FREE))\n\t\t\t\t\tgoto err;\n\t\t\t\tcurdata\t= data;\n\t\t\t\tblocknr = This->stde.pps_sb = STORAGE_get_free_small_blocknr(&This->str);\n\t\t\t\tif (blocknr<0)\n\t\t\t\t\tgoto err;\n\t\t\t\tcc\t= newsize;\n\t\t\t\twhile (cc>0) {\n\t\t\t\t\tif (!STORAGE_put_small_block(&This->str,blocknr,curdata))\n\t\t\t\t\t\tgoto err;\n\t\t\t\t\tcc\t-= SMALLSIZE;\n\t\t\t\t\tif (cc<=0) {\n\t\t\t\t\t\tif (!STORAGE_set_small_chain(&This->str,blocknr,STORAGE_CHAINENTRY_ENDOFCHAIN))\n\t\t\t\t\t\t\tgoto err;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tint newblocknr = STORAGE_get_free_small_blocknr(&This->str);\n\t\t\t\t\t\tif (newblocknr<0)\n\t\t\t\t\t\t\tgoto err;\n\t\t\t\t\t\tif (!STORAGE_set_small_chain(&This->str,blocknr,newblocknr))\n\t\t\t\t\t\t\tgoto err;\n\t\t\t\t\t\tblocknr = newblocknr;\n\t\t\t\t\t}\n\t\t\t\t\tcurdata\t+= SMALLSIZE;\n\t\t\t\t}\n\t\t\t\tr = S_OK;\n\t\t\terr:\n\t\t\t\tHeapFree(GetProcessHeap(),0,data);\n\t\t\t\tif(r != S_OK)\n\t\t\t\t\treturn r;\n\t\t\t}\n\t\t}\n\t\tThis->stde.pps_size = newsize;\n\t}\n\n\tif (newsize > oldsize) {\n\t\tif (oldsize >= 0x1000) {\n\t\t\t/* should return the block right before the 'endofchain' */\n\t\t\tblocknr = STORAGE_get_nth_next_big_blocknr(&This->str,This->stde.pps_sb,This->stde.pps_size/BIGSIZE);\n\t\t\tassert(blocknr>=0);\n\t\t\tlastblocknr\t= blocknr;\n\t\t\tfor (i=oldsize/BIGSIZE;i<newsize/BIGSIZE;i++) {\n\t\t\t\tblocknr = STORAGE_get_free_big_blocknr(&This->str);\n\t\t\t\tif (blocknr<0)\n\t\t\t\t\treturn E_FAIL;\n\t\t\t\tif (!STORAGE_set_big_chain(&This->str,lastblocknr,blocknr))\n\t\t\t\t\treturn E_FAIL;\n\t\t\t\tlastblocknr = blocknr;\n\t\t\t}\n\t\t\tif (!STORAGE_set_big_chain(&This->str,blocknr,STORAGE_CHAINENTRY_ENDOFCHAIN))\n\t\t\t\treturn E_FAIL;\n\t\t} else {\n\t\t\tif (newsize < 0x1000) {\n\t\t\t\t/* find startblock */\n\t\t\t\tif (!oldsize)\n\t\t\t\t\tThis->stde.pps_sb = blocknr = STORAGE_get_free_small_blocknr(&This->str);\n\t\t\t\telse\n\t\t\t\t\tblocknr = STORAGE_get_nth_next_small_blocknr(&This->str,This->stde.pps_sb,This->stde.pps_size/SMALLSIZE);\n\t\t\t\tif (blocknr<0)\n\t\t\t\t\treturn E_FAIL;\n\n\t\t\t\t/* allocate required new small blocks */\n\t\t\t\tlastblocknr = blocknr;\n\t\t\t\tfor (i=oldsize/SMALLSIZE;i<newsize/SMALLSIZE;i++) {\n\t\t\t\t\tblocknr = STORAGE_get_free_small_blocknr(&This->str);\n\t\t\t\t\tif (blocknr<0)\n\t\t\t\t\t\treturn E_FAIL;\n\t\t\t\t\tif (!STORAGE_set_small_chain(&This->str,lastblocknr,blocknr))\n\t\t\t\t\t\treturn E_FAIL;\n\t\t\t\t\tlastblocknr = blocknr;\n\t\t\t\t}\n\t\t\t\t/* and terminate the chain */\n\t\t\t\tif (!STORAGE_set_small_chain(&This->str,lastblocknr,STORAGE_CHAINENTRY_ENDOFCHAIN))\n\t\t\t\t\treturn E_FAIL;\n\t\t\t} else {\n\t\t\t\tif (!oldsize) {\n\t\t\t\t\t/* no single block allocated yet */\n\t\t\t\t\tblocknr=STORAGE_get_free_big_blocknr(&This->str);\n\t\t\t\t\tif (blocknr<0)\n\t\t\t\t\t\treturn E_FAIL;\n\t\t\t\t\tThis->stde.pps_sb = blocknr;\n\t\t\t\t} else {\n\t\t\t\t\t/* Migrate small blocks to big blocks */\n\t\t\t\t\tLPBYTE\tcurdata,data = HeapAlloc(GetProcessHeap(),0,oldsize+BIGSIZE);\n\t\t\t\t\tHRESULT r = E_FAIL;\n\n\t\t\t\t\tcc\t= oldsize;\n\t\t\t\t\tblocknr = This->stde.pps_sb;\n\t\t\t\t\tcurdata = data;\n\t\t\t\t\t/* slurp in */\n\t\t\t\t\twhile (cc>0) {\n\t\t\t\t\t\tif (!STORAGE_get_small_block(&This->str,blocknr,curdata))\n\t\t\t\t\t\t\tgoto err2;\n\t\t\t\t\t\tcurdata\t+= SMALLSIZE;\n\t\t\t\t\t\tcc\t-= SMALLSIZE;\n\t\t\t\t\t\tblocknr\t = STORAGE_get_next_small_blocknr(&This->str,blocknr);\n\t\t\t\t\t}\n\t\t\t\t\t/* free small block chain */\n\t\t\t\t\tif (!STORAGE_set_small_chain(&This->str,This->stde.pps_sb,STORAGE_CHAINENTRY_FREE))\n\t\t\t\t\t\tgoto err2;\n\t\t\t\t\tcurdata\t= data;\n\t\t\t\t\tblocknr = This->stde.pps_sb = STORAGE_get_free_big_blocknr(&This->str);\n\t\t\t\t\tif (blocknr<0)\n\t\t\t\t\t\tgoto err2;\n\t\t\t\t\t/* put the data into the big blocks */\n\t\t\t\t\tcc\t= This->stde.pps_size;\n\t\t\t\t\twhile (cc>0) {\n\t\t\t\t\t\tif (!STORAGE_put_big_block(&This->str,blocknr,curdata))\n\t\t\t\t\t\t\tgoto err2;\n\t\t\t\t\t\tcc\t-= BIGSIZE;\n\t\t\t\t\t\tif (cc<=0) {\n\t\t\t\t\t\t\tif (!STORAGE_set_big_chain(&This->str,blocknr,STORAGE_CHAINENTRY_ENDOFCHAIN))\n\t\t\t\t\t\t\t\tgoto err2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tint newblocknr = STORAGE_get_free_big_blocknr(&This->str);\n\t\t\t\t\t\t\tif (newblocknr<0)\n\t\t\t\t\t\t\t\tgoto err2;\n\t\t\t\t\t\t\tif (!STORAGE_set_big_chain(&This->str,blocknr,newblocknr))\n\t\t\t\t\t\t\t\tgoto err2;\n\t\t\t\t\t\t\tblocknr = newblocknr;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurdata\t+= BIGSIZE;\n\t\t\t\t\t}\n\t\t\t\t\tr = S_OK;\n\t\t\t\terr2:\n\t\t\t\t\tHeapFree(GetProcessHeap(),0,data);\n\t\t\t\t\tif(r != S_OK)\n\t\t\t\t\t\treturn r;\n\t\t\t\t}\n\t\t\t\t/* generate big blocks to fit the new data */\n\t\t\t\tlastblocknr\t= blocknr;\n\t\t\t\tfor (i=oldsize/BIGSIZE;i<newsize/BIGSIZE;i++) {\n\t\t\t\t\tblocknr = STORAGE_get_free_big_blocknr(&This->str);\n\t\t\t\t\tif (blocknr<0)\n\t\t\t\t\t\treturn E_FAIL;\n\t\t\t\t\tif (!STORAGE_set_big_chain(&This->str,lastblocknr,blocknr))\n\t\t\t\t\t\treturn E_FAIL;\n\t\t\t\t\tlastblocknr = blocknr;\n\t\t\t\t}\n\t\t\t\t/* terminate chain */\n\t\t\t\tif (!STORAGE_set_big_chain(&This->str,lastblocknr,STORAGE_CHAINENTRY_ENDOFCHAIN))\n\t\t\t\t\treturn E_FAIL;\n\t\t\t}\n\t\t}\n\t\tThis->stde.pps_size = newsize;\n\t}\n\n\t/* There are just some cases where we didn't modify it, we write it out\n\t * every time\n\t */\n\tif (!STORAGE_put_pps_entry(&This->str,This->ppsent,&(This->stde)))\n\t\treturn E_FAIL;\n\n\t/* finally the write pass */\n\tif (This->stde.pps_size < 0x1000) {\n\t\tblocknr = STORAGE_get_nth_next_small_blocknr(&This->str,This->stde.pps_sb,This->offset.u.LowPart/SMALLSIZE);\n\t\tassert(blocknr>=0);\n\t\twhile (cb>0) {\n\t\t\t/* we ensured that it is allocated above */\n\t\t\tassert(blocknr>=0);\n\t\t\t/* Read old block every time, since we can have\n\t\t\t * overlapping data at START and END of the write\n\t\t\t */\n\t\t\tif (!STORAGE_get_small_block(&This->str,blocknr,block))\n\t\t\t\treturn E_FAIL;\n\n\t\t\tcc = SMALLSIZE-(This->offset.u.LowPart&(SMALLSIZE-1));\n\t\t\tif (cc>cb)\n\t\t\t\tcc=cb;\n\t\t\tmemcpy(\t((LPBYTE)block)+(This->offset.u.LowPart&(SMALLSIZE-1)),\n\t\t\t\tpbv+curoffset,\n\t\t\t\tcc\n\t\t\t);\n\t\t\tif (!STORAGE_put_small_block(&This->str,blocknr,block))\n\t\t\t\treturn E_FAIL;\n\t\t\tcb\t\t\t-= cc;\n\t\t\tcuroffset\t\t+= cc;\n\t\t\tpbv\t\t\t+= cc;\n\t\t\tThis->offset.u.LowPart\t+= cc;\n\t\t\t*byteswritten\t\t+= cc;\n\t\t\tblocknr = STORAGE_get_next_small_blocknr(&This->str,blocknr);\n\t\t}\n\t} else {\n\t\tblocknr = STORAGE_get_nth_next_big_blocknr(&This->str,This->stde.pps_sb,This->offset.u.LowPart/BIGSIZE);\n\t\tassert(blocknr>=0);\n\t\twhile (cb>0) {\n\t\t\t/* we ensured that it is allocated above, so it better is */\n\t\t\tassert(blocknr>=0);\n\t\t\t/* read old block every time, since we can have\n\t\t\t * overlapping data at START and END of the write\n\t\t\t */\n\t\t\tif (!STORAGE_get_big_block(&This->str,blocknr,block))\n\t\t\t\treturn E_FAIL;\n\n\t\t\tcc = BIGSIZE-(This->offset.u.LowPart&(BIGSIZE-1));\n\t\t\tif (cc>cb)\n\t\t\t\tcc=cb;\n\t\t\tmemcpy(\t((LPBYTE)block)+(This->offset.u.LowPart&(BIGSIZE-1)),\n\t\t\t\tpbv+curoffset,\n\t\t\t\tcc\n\t\t\t);\n\t\t\tif (!STORAGE_put_big_block(&This->str,blocknr,block))\n\t\t\t\treturn E_FAIL;\n\t\t\tcb\t\t\t-= cc;\n\t\t\tcuroffset\t\t+= cc;\n\t\t\tpbv\t\t\t+= cc;\n\t\t\tThis->offset.u.LowPart\t+= cc;\n\t\t\t*byteswritten\t\t+= cc;\n\t\t\tblocknr = STORAGE_get_next_big_blocknr(&This->str,blocknr);\n\t\t}\n\t}\n\treturn S_OK;\n}\n\n/******************************************************************************\n *\t\t_create_istream16\t[Internal]\n */\nstatic void _create_istream16(LPSTREAM16 *str) {\n\tIStream16Impl*\tlpst;\n\n\tif (!strvt16.QueryInterface) {\n\t\tHMODULE16\twp = GetModuleHandle16(\"STORAGE\");\n\t\tif (wp>=32) {\n\t\t  /* FIXME: what is This GetProcAddress16. Should the name be IStream16_QueryInterface of IStream16_fnQueryInterface */\n#define VTENT(xfn)  strvt16.xfn = (void*)GetProcAddress16(wp,\"IStream16_\"#xfn);assert(strvt16.xfn)\n\t\t\tVTENT(QueryInterface);\n\t\t\tVTENT(AddRef);\n\t\t\tVTENT(Release);\n\t\t\tVTENT(Read);\n\t\t\tVTENT(Write);\n\t\t\tVTENT(Seek);\n\t\t\tVTENT(SetSize);\n\t\t\tVTENT(CopyTo);\n\t\t\tVTENT(Commit);\n\t\t\tVTENT(Revert);\n\t\t\tVTENT(LockRegion);\n\t\t\tVTENT(UnlockRegion);\n\t\t\tVTENT(Stat);\n\t\t\tVTENT(Clone);\n#undef VTENT\n\t\t\tsegstrvt16 = (const IStream16Vtbl*)MapLS( &strvt16 );\n\t\t} else {\n#define VTENT(xfn) strvt16.xfn = IStream16_fn##xfn;\n\t\t\tVTENT(QueryInterface);\n\t\t\tVTENT(AddRef);\n\t\t\tVTENT(Release);\n\t\t\tVTENT(Read);\n\t\t\tVTENT(Write);\n\t\t\tVTENT(Seek);\n\t/*\n\t\t\tVTENT(CopyTo);\n\t\t\tVTENT(Commit);\n\t\t\tVTENT(SetSize);\n\t\t\tVTENT(Revert);\n\t\t\tVTENT(LockRegion);\n\t\t\tVTENT(UnlockRegion);\n\t\t\tVTENT(Stat);\n\t\t\tVTENT(Clone);\n\t*/\n#undef VTENT\n\t\t\tsegstrvt16 = &strvt16;\n\t\t}\n\t}\n\tlpst = HeapAlloc( GetProcessHeap(), 0, sizeof(*lpst) );\n\tlpst->IStream16_iface.lpVtbl = segstrvt16;\n\tlpst->ref\t= 1;\n\tlpst->thisptr\t= MapLS( lpst );\n\tlpst->str.hf\t= NULL;\n\tlpst->str.lockbytes\t= 0;\n\t*str = (void*)lpst->thisptr;\n}\n\nstatic inline IStorage16Impl *impl_from_IStorage16(IStorage16 *iface)\n{\n        return CONTAINING_RECORD(iface, IStorage16Impl, IStorage16_iface);\n}\n\n/******************************************************************************\n *\t\tIStorage16_QueryInterface\t[STORAGE.500]\n */\nHRESULT CDECL IStorage16_fnQueryInterface(IStorage16 *iface, REFIID refiid, void **obj)\n{\n\tIStorage16Impl *This = impl_from_IStorage16(iface);\n\n\tTRACE_(relay)(\"(%p)->(%s,%p)\\n\",This,debugstr_guid(refiid),obj);\n\n\tif (!memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown))) {\n\t\t*obj = This;\n\t\treturn 0;\n\t}\n\treturn OLE_E_ENUM_NOMORE;\n}\n\n/******************************************************************************\n * IStorage16_AddRef [STORAGE.501]\n */\nULONG CDECL IStorage16_fnAddRef(IStorage16 *iface)\n{\n\tIStorage16Impl *This = impl_from_IStorage16(iface);\n\treturn InterlockedIncrement(&This->ref);\n}\n\n/******************************************************************************\n * IStorage16_Release [STORAGE.502]\n */\nULONG CDECL IStorage16_fnRelease(IStorage16 *iface)\n{\n        IStorage16Impl *This = impl_from_IStorage16(iface);\n        ULONG ref;\n        ref = InterlockedDecrement(&This->ref);\n        if (!ref)\n        {\n            UnMapLS( This->thisptr );\n            HeapFree( GetProcessHeap(), 0, This );\n        }\n        return ref;\n}\n\n/******************************************************************************\n * IStorage16_Stat [STORAGE.517]\n */\nHRESULT CDECL IStorage16_fnStat(IStorage16 *iface, STATSTG16 *pstatstg, DWORD grfStatFlag)\n{\n        IStorage16Impl *This = impl_from_IStorage16(iface);\n        DWORD len = WideCharToMultiByte( CP_ACP, 0, This->stde.pps_rawname, -1, NULL, 0, NULL, NULL );\n        LPSTR nameA = HeapAlloc( GetProcessHeap(), 0, len );\n\n\tTRACE(\"(%p)->(%p,0x%08x)\\n\",\n\t\tThis,pstatstg,grfStatFlag\n\t);\n        WideCharToMultiByte( CP_ACP, 0, This->stde.pps_rawname, -1, nameA, len, NULL, NULL );\n\tpstatstg->pwcsName=(LPOLESTR16)MapLS( nameA );\n\tpstatstg->type = This->stde.pps_type;\n\tpstatstg->cbSize.u.LowPart = This->stde.pps_size;\n\tpstatstg->mtime = This->stde.pps_ft1; /* FIXME */ /* why? */\n\tpstatstg->atime = This->stde.pps_ft2; /* FIXME */\n\tpstatstg->ctime = This->stde.pps_ft2; /* FIXME */\n\tpstatstg->grfMode\t= 0; /* FIXME */\n\tpstatstg->grfLocksSupported = 0; /* FIXME */\n\tpstatstg->clsid\t\t= This->stde.pps_guid;\n\tpstatstg->grfStateBits\t= 0; /* FIXME */\n\tpstatstg->reserved\t= 0;\n\treturn S_OK;\n}\n\n/******************************************************************************\n *\t\tIStorage16_Commit\t[STORAGE.509]\n */\nHRESULT CDECL IStorage16_fnCommit(IStorage16 *iface, DWORD commitflags)\n{\n\tIStorage16Impl *This = impl_from_IStorage16(iface);\n\tFIXME(\"(%p)->(0x%08x),STUB!\\n\",\n\t\tThis,commitflags\n\t);\n\treturn S_OK;\n}\n\n/******************************************************************************\n * IStorage16_CopyTo [STORAGE.507]\n */\nHRESULT CDECL IStorage16_fnCopyTo(IStorage16 *iface, DWORD ciidExclude, const IID *rgiidExclude,\n\tSNB16 SNB16Exclude, IStorage16 *pstgDest)\n{\n\tIStorage16Impl *This = impl_from_IStorage16(iface);\n\tFIXME(\"IStorage16(%p)->(0x%08x,%s,%p,%p),stub!\\n\",\n\t\tThis,ciidExclude,debugstr_guid(rgiidExclude),SNB16Exclude,pstgDest\n\t);\n\treturn S_OK;\n}\n\n\n/******************************************************************************\n * IStorage16_CreateStorage [STORAGE.505]\n */\nHRESULT CDECL IStorage16_fnCreateStorage(IStorage16 *iface, LPCOLESTR16 pwcsName, DWORD grfMode,\n\tDWORD dwStgFormat, DWORD reserved2, IStorage16 **ppstg)\n{\n\tIStorage16Impl *This = impl_from_IStorage16(iface);\n\tIStorage16Impl*\tlpstg;\n\tint\t\tppsent,x;\n\tstruct storage_pps_entry\tstde;\n\tstruct storage_header sth;\n\tBOOL ret;\n\tint\t nPPSEntries;\n\n\tREAD_HEADER(&This->str);\n\tTRACE(\"(%p)->(%s,0x%08x,0x%08x,0x%08x,%p)\\n\",\n\t\tThis,pwcsName,grfMode,dwStgFormat,reserved2,ppstg\n\t);\n\tif (grfMode & STGM_TRANSACTED)\n\t\tFIXME(\"We do not support transacted Compound Storage. Using direct mode.\\n\");\n\t_create_istorage16(ppstg);\n\tlpstg = MapSL((SEGPTR)*ppstg);\n\tif (This->str.hf) {\n\t    DuplicateHandle( GetCurrentProcess(), This->str.hf, GetCurrentProcess(),\n\t\t\t     &lpstg->str.hf, 0, TRUE, DUPLICATE_SAME_ACCESS );\n\t} else {\n\t    lpstg->str.lockbytes = This->str.lockbytes;\n\t    _ilockbytes16_addref(This->str.lockbytes);\n\t}\n\n\tppsent=STORAGE_get_free_pps_entry(&lpstg->str);\n\tif (ppsent<0)\n\t\treturn E_FAIL;\n\tstde=This->stde;\n\tif (stde.pps_dir==-1) {\n\t\tstde.pps_dir = ppsent;\n\t\tx = This->ppsent;\n\t} else {\n\t\tFIXME(\" use prev chain too ?\\n\");\n\t\tx=stde.pps_dir;\n\t\tif (1!=STORAGE_get_pps_entry(&lpstg->str,x,&stde))\n\t\t\treturn E_FAIL;\n\t\twhile (stde.pps_next!=-1) {\n\t\t\tx=stde.pps_next;\n\t\t\tif (1!=STORAGE_get_pps_entry(&lpstg->str,x,&stde))\n\t\t\t\treturn E_FAIL;\n\t\t}\n\t\tstde.pps_next = ppsent;\n\t}\n\tret = STORAGE_put_pps_entry(&lpstg->str,x,&stde);\n\tassert(ret);\n\tnPPSEntries = STORAGE_get_pps_entry(&lpstg->str,ppsent,&(lpstg->stde));\n\tassert(nPPSEntries == 1);\n        MultiByteToWideChar(CP_ACP, 0, pwcsName, -1, lpstg->stde.pps_rawname,\n                            ARRAY_SIZE(lpstg->stde.pps_rawname));\n\tlpstg->stde.pps_sizeofname = (strlenW(lpstg->stde.pps_rawname)+1)*sizeof(WCHAR);\n\tlpstg->stde.pps_next\t= -1;\n\tlpstg->stde.pps_prev\t= -1;\n\tlpstg->stde.pps_dir\t= -1;\n\tlpstg->stde.pps_sb\t= -1;\n\tlpstg->stde.pps_size\t=  0;\n\tlpstg->stde.pps_type\t=  1;\n\tlpstg->ppsent\t\t= ppsent;\n\t/* FIXME: timestamps? */\n\tif (!STORAGE_put_pps_entry(&lpstg->str,ppsent,&(lpstg->stde)))\n\t\treturn E_FAIL;\n\treturn S_OK;\n}\n\n/******************************************************************************\n *\t\tIStorage16_CreateStream\t[STORAGE.503]\n */\nHRESULT CDECL IStorage16_fnCreateStream(IStorage16 *iface, LPCOLESTR16 pwcsName, DWORD grfMode,\n\tDWORD reserved1, DWORD reserved2, IStream16 **ppstm)\n{\n\tIStorage16Impl *This = impl_from_IStorage16(iface);\n\tIStream16Impl*\tlpstr;\n\tint\t\tppsent,x;\n\tstruct storage_pps_entry\tstde;\n\tBOOL ret;\n\tint\t nPPSEntries;\n\n\tTRACE(\"(%p)->(%s,0x%08x,0x%08x,0x%08x,%p)\\n\",\n\t\tThis,pwcsName,grfMode,reserved1,reserved2,ppstm\n\t);\n\tif (grfMode & STGM_TRANSACTED)\n\t\tFIXME(\"We do not support transacted Compound Storage. Using direct mode.\\n\");\n\t_create_istream16(ppstm);\n\tlpstr = MapSL((SEGPTR)*ppstm);\n\tif (This->str.hf) {\n\t    DuplicateHandle( GetCurrentProcess(), This->str.hf, GetCurrentProcess(),\n\t\t\t     &lpstr->str.hf, 0, TRUE, DUPLICATE_SAME_ACCESS );\n\t} else {\n\t    lpstr->str.lockbytes = This->str.lockbytes;\n\t    _ilockbytes16_addref(This->str.lockbytes);\n\t}\n\tlpstr->offset.u.LowPart\t= 0;\n\tlpstr->offset.u.HighPart= 0;\n\n\tppsent=STORAGE_get_free_pps_entry(&lpstr->str);\n\tif (ppsent<0)\n\t\treturn E_FAIL;\n\tstde=This->stde;\n\tif (stde.pps_next==-1)\n\t\tx=This->ppsent;\n\telse\n\t\twhile (stde.pps_next!=-1) {\n\t\t\tx=stde.pps_next;\n\t\t\tif (1!=STORAGE_get_pps_entry(&lpstr->str,x,&stde))\n\t\t\t\treturn E_FAIL;\n\t\t}\n\tstde.pps_next = ppsent;\n\tret = STORAGE_put_pps_entry(&lpstr->str,x,&stde);\n\tassert(ret);\n\tnPPSEntries = STORAGE_get_pps_entry(&lpstr->str,ppsent,&(lpstr->stde));\n\tassert(nPPSEntries == 1);\n        MultiByteToWideChar(CP_ACP, 0, pwcsName, -1, lpstr->stde.pps_rawname,\n                            ARRAY_SIZE(lpstr->stde.pps_rawname));\n\tlpstr->stde.pps_sizeofname = (strlenW(lpstr->stde.pps_rawname)+1) * sizeof(WCHAR);\n\tlpstr->stde.pps_next\t= -1;\n\tlpstr->stde.pps_prev\t= -1;\n\tlpstr->stde.pps_dir\t= -1;\n\tlpstr->stde.pps_sb\t= -1;\n\tlpstr->stde.pps_size\t=  0;\n\tlpstr->stde.pps_type\t=  2;\n\tlpstr->ppsent\t\t= ppsent;\n\n\t/* FIXME: timestamps? */\n\tif (!STORAGE_put_pps_entry(&lpstr->str,ppsent,&(lpstr->stde)))\n\t\treturn E_FAIL;\n\treturn S_OK;\n}\n\n/******************************************************************************\n *\t\tIStorage16_OpenStorage\t[STORAGE.506]\n */\nHRESULT CDECL IStorage16_fnOpenStorage(IStorage16 *iface, LPCOLESTR16 pwcsName,\n\tIStorage16 *pstgPrio, DWORD grfMode, SNB16 snbExclude, DWORD reserved, IStorage16 **ppstg)\n{\n\tIStorage16Impl *This = impl_from_IStorage16(iface);\n\tIStorage16Impl *lpstg;\n\tWCHAR\t\tname[33];\n\tint\t\tnewpps;\n\n\tTRACE(\"(%p)->(%s,%p,0x%08x,%p,0x%08x,%p)\\n\",\n\t\tThis,pwcsName,pstgPrio,grfMode,snbExclude,reserved,ppstg\n\t);\n\tif (grfMode & STGM_TRANSACTED)\n\t\tFIXME(\"We do not support transacted Compound Storage. Using direct mode.\\n\");\n\t_create_istorage16(ppstg);\n\tlpstg = MapSL((SEGPTR)*ppstg);\n\tif (This->str.hf) {\n\t    DuplicateHandle( GetCurrentProcess(), This->str.hf, GetCurrentProcess(),\n\t\t\t     &lpstg->str.hf, 0, TRUE, DUPLICATE_SAME_ACCESS );\n\t} else {\n\t    lpstg->str.lockbytes = This->str.lockbytes;\n\t    _ilockbytes16_addref(This->str.lockbytes);\n\t}\n        MultiByteToWideChar(CP_ACP, 0, pwcsName, -1, name, ARRAY_SIZE(name));\n\tnewpps = STORAGE_look_for_named_pps(&lpstg->str,This->stde.pps_dir,name);\n\tif (newpps==-1) {\n\t\tIStorage16_fnRelease(&lpstg->IStorage16_iface);\n\t\t*ppstg = NULL;\n\t\treturn E_FAIL;\n\t}\n\n\tif (1!=STORAGE_get_pps_entry(&lpstg->str,newpps,&(lpstg->stde))) {\n\t\tIStorage16_fnRelease(&lpstg->IStorage16_iface);\n\t\t*ppstg = NULL;\n\t\treturn E_FAIL;\n\t}\n\tlpstg->ppsent\t\t= newpps;\n\treturn S_OK;\n}\n\n/******************************************************************************\n * IStorage16_OpenStream [STORAGE.504]\n */\nHRESULT CDECL IStorage16_fnOpenStream(IStorage16 *iface, LPCOLESTR16 pwcsName, void *reserved1,\n\tDWORD grfMode, DWORD reserved2, IStream16 **ppstm)\n{\n\tIStorage16Impl *This = impl_from_IStorage16(iface);\n\tIStream16Impl*\tlpstr;\n\tWCHAR\t\tname[33];\n\tint\t\tnewpps;\n\n\tTRACE(\"(%p)->(%s,%p,0x%08x,0x%08x,%p)\\n\",\n\t\tThis,pwcsName,reserved1,grfMode,reserved2,ppstm\n\t);\n\tif (grfMode & STGM_TRANSACTED)\n\t\tFIXME(\"We do not support transacted Compound Storage. Using direct mode.\\n\");\n\t_create_istream16(ppstm);\n\tlpstr = MapSL((SEGPTR)*ppstm);\n\tif (This->str.hf) {\n\t    DuplicateHandle( GetCurrentProcess(), This->str.hf, GetCurrentProcess(),\n\t\t\t     &lpstr->str.hf, 0, TRUE, DUPLICATE_SAME_ACCESS );\n\t} else {\n\t    lpstr->str.lockbytes = This->str.lockbytes;\n\t    _ilockbytes16_addref(This->str.lockbytes);\n\t}\n        MultiByteToWideChar(CP_ACP, 0, pwcsName, -1, name, ARRAY_SIZE(name));\n\tnewpps = STORAGE_look_for_named_pps(&lpstr->str,This->stde.pps_dir,name);\n\tif (newpps==-1) {\n\t\tIStream16_fnRelease(&lpstr->IStream16_iface);\n\t\t*ppstm = NULL;\n\t\treturn E_FAIL;\n\t}\n\n\tif (1!=STORAGE_get_pps_entry(&lpstr->str,newpps,&(lpstr->stde))) {\n\t\tIStream16_fnRelease(&lpstr->IStream16_iface);\n\t\t*ppstm = NULL;\n\t\treturn E_FAIL;\n\t}\n\tlpstr->offset.u.LowPart\t\t= 0;\n\tlpstr->offset.u.HighPart\t= 0;\n\tlpstr->ppsent\t\t\t= newpps;\n\treturn S_OK;\n}\n\n/******************************************************************************\n * _create_istorage16 [INTERNAL]\n */\nstatic void _create_istorage16(LPSTORAGE16 *stg) {\n\tIStorage16Impl*\tlpst;\n\n\tif (!stvt16.QueryInterface) {\n\t\tHMODULE16\twp = GetModuleHandle16(\"STORAGE\");\n\t\tif (wp>=32) {\n#define VTENT(xfn)  stvt16.xfn = (void*)GetProcAddress16(wp,\"IStorage16_\"#xfn);\n\t\t\tVTENT(QueryInterface)\n\t\t\tVTENT(AddRef)\n\t\t\tVTENT(Release)\n\t\t\tVTENT(CreateStream)\n\t\t\tVTENT(OpenStream)\n\t\t\tVTENT(CreateStorage)\n\t\t\tVTENT(OpenStorage)\n\t\t\tVTENT(CopyTo)\n\t\t\tVTENT(MoveElementTo)\n\t\t\tVTENT(Commit)\n\t\t\tVTENT(Revert)\n\t\t\tVTENT(EnumElements)\n\t\t\tVTENT(DestroyElement)\n\t\t\tVTENT(RenameElement)\n\t\t\tVTENT(SetElementTimes)\n\t\t\tVTENT(SetClass)\n\t\t\tVTENT(SetStateBits)\n\t\t\tVTENT(Stat)\n#undef VTENT\n\t\t\tsegstvt16 = (const IStorage16Vtbl*)MapLS( &stvt16 );\n\t\t} else {\n#define VTENT(xfn) stvt16.xfn = IStorage16_fn##xfn;\n\t\t\tVTENT(QueryInterface)\n\t\t\tVTENT(AddRef)\n\t\t\tVTENT(Release)\n\t\t\tVTENT(CreateStream)\n\t\t\tVTENT(OpenStream)\n\t\t\tVTENT(CreateStorage)\n\t\t\tVTENT(OpenStorage)\n\t\t\tVTENT(CopyTo)\n\t\t\tVTENT(Commit)\n\t/*  not (yet) implemented ...\n\t\t\tVTENT(MoveElementTo)\n\t\t\tVTENT(Revert)\n\t\t\tVTENT(EnumElements)\n\t\t\tVTENT(DestroyElement)\n\t\t\tVTENT(RenameElement)\n\t\t\tVTENT(SetElementTimes)\n\t\t\tVTENT(SetClass)\n\t\t\tVTENT(SetStateBits)\n\t\t\tVTENT(Stat)\n\t*/\n#undef VTENT\n\t\t\tsegstvt16 = &stvt16;\n\t\t}\n\t}\n\tlpst = HeapAlloc( GetProcessHeap(), 0, sizeof(*lpst) );\n\tlpst->IStorage16_iface.lpVtbl = segstvt16;\n\tlpst->str.hf\t= NULL;\n\tlpst->str.lockbytes\t= 0;\n\tlpst->ref\t= 1;\n\tlpst->thisptr\t= MapLS(lpst);\n\t*stg = (void*)lpst->thisptr;\n}\n\n/******************************************************************************\n *\tStorage API functions\n */\n\n/******************************************************************************\n *\t\tStgCreateDocFileA\t[STORAGE.1]\n */\nHRESULT WINAPI StgCreateDocFile16(\n\tLPCOLESTR16 pwcsName,DWORD grfMode,DWORD reserved,IStorage16 **ppstgOpen\n) {\n\tHANDLE\t\thf = INVALID_HANDLE_VALUE;\n\tint\t\ti,ret;\n\tIStorage16Impl*\tlpstg;\n\tstruct storage_pps_entry\tstde;\n    char temp_file[MAX_PATH];\n\n\tTRACE(\"(%s,0x%08x,0x%08x,%p)\\n\",\n\t\tpwcsName,grfMode,reserved,ppstgOpen\n\t);\n\t_create_istorage16(ppstgOpen);\n\tif (pwcsName == NULL)\n\t{\n\t\tchar temp_path[MAX_PATH];\n\t\tif (GetTempPathA(MAX_PATH, temp_path))\n\t\t{\n\t\t\tif (GetTempFileNameA(temp_path, \"\", 0, temp_file))\n\t\t\t{\n\t\t\t\tpwcsName = temp_file;\n\t\t        hf = CreateFileA(pwcsName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t{\n\t\thf = CreateFileA(pwcsName,GENERIC_READ|GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,0);\n\t}\n\tif (hf==INVALID_HANDLE_VALUE) {\n\t\tWARN(\"couldn't open file for storage:%d\\n\",GetLastError());\n\t\treturn E_FAIL;\n\t}\n\tlpstg = MapSL((SEGPTR)*ppstgOpen);\n\tlpstg->str.hf = hf;\n\tlpstg->str.lockbytes = 0;\n\t/* FIXME: check for existence before overwriting? */\n\tif (!STORAGE_init_storage(&lpstg->str)) {\n\t\tCloseHandle(hf);\n\t\treturn E_FAIL;\n\t}\n\ti=0;ret=0;\n\twhile (!ret) { /* neither 1 nor <0 */\n\t\tret=STORAGE_get_pps_entry(&lpstg->str,i,&stde);\n\t\tif ((ret==1) && (stde.pps_type==5)) {\n\t\t\tlpstg->stde\t= stde;\n\t\t\tlpstg->ppsent\t= i;\n\t\t\tbreak;\n\t\t}\n\t\ti++;\n\t}\n\tif (ret!=1) {\n\t\tIStorage16_fnRelease(&lpstg->IStorage16_iface);\n\t\treturn E_FAIL;\n\t}\n\n\treturn S_OK;\n}\n\n/******************************************************************************\n * StgIsStorageFile [STORAGE.5]\n */\nHRESULT WINAPI StgIsStorageFile16(LPCOLESTR16 fn) {\n\tUNICODE_STRING strW;\n\tHRESULT ret;\n\n\tRtlCreateUnicodeStringFromAsciiz(&strW, fn);\n\tret = StgIsStorageFile( strW.Buffer );\n\tRtlFreeUnicodeString( &strW );\n\n\treturn ret;\n}\n\n/******************************************************************************\n * StgOpenStorage [STORAGE.3]\n */\nHRESULT WINAPI StgOpenStorage16(\n\tLPCOLESTR16 pwcsName,IStorage16 *pstgPriority,DWORD grfMode,\n\tSNB16 snbExclude,DWORD reserved, IStorage16 **ppstgOpen\n) {\n\tHANDLE\t\thf;\n\tint\t\tret,i;\n\tIStorage16Impl*\tlpstg;\n\tstruct storage_pps_entry\tstde;\n\n\tTRACE(\"(%s,%p,0x%08x,%p,%d,%p)\\n\",\n              pwcsName,pstgPriority,grfMode,snbExclude,reserved,ppstgOpen\n\t);\n\t_create_istorage16(ppstgOpen);\n\thf = CreateFileA(pwcsName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);\n\tif (hf==INVALID_HANDLE_VALUE) {\n\t\tWARN(\"Couldn't open file for storage\\n\");\n\t\treturn E_FAIL;\n\t}\n\tlpstg = MapSL((SEGPTR)*ppstgOpen);\n\tlpstg->str.hf = hf;\n\n\ti=0;ret=0;\n\twhile (!ret) { /* neither 1 nor <0 */\n\t\tret=STORAGE_get_pps_entry(&lpstg->str,i,&stde);\n\t\tif ((ret==1) && (stde.pps_type==5)) {\n\t\t\tlpstg->stde=stde;\n\t\t\tbreak;\n\t\t}\n\t\ti++;\n\t}\n\tif (ret!=1) {\n\t\tIStorage16_fnRelease(&lpstg->IStorage16_iface);\n\t\treturn E_FAIL;\n\t}\n\treturn S_OK;\n\n}\n\n/******************************************************************************\n *              StgIsStorageILockBytes        [STORAGE.6]\n *\n * Determines if the ILockBytes contains a storage object.\n */\nHRESULT WINAPI StgIsStorageILockBytes16(SEGPTR plkbyt)\n{\n  DWORD args[6];\n  HRESULT hres;\n  HANDLE16 hsig;\n\n  args[0] = (DWORD)plkbyt;\t/* iface */\n  args[1] = args[2] = 0;\t/* ULARGE_INTEGER offset */\n  args[3] = WOWGlobalAllocLock16( 0, 8, &hsig ); /* sig */\n  args[4] = 8;\n  args[5] = 0;\n\n  if (!WOWCallback16Ex(\n      (DWORD)((const ILockBytes16Vtbl*)MapSL(\n                  (SEGPTR)((LPLOCKBYTES16)MapSL(plkbyt))->lpVtbl)\n      )->ReadAt,\n      WCB16_PASCAL,\n      6*sizeof(DWORD),\n      (LPVOID)args,\n      (LPDWORD)&hres\n  )) {\n      ERR(\"CallTo16 ILockBytes16::ReadAt() failed, hres %x\\n\",hres);\n      return hres;\n  }\n  if (memcmp(MapSL(args[3]), STORAGE_magic, sizeof(STORAGE_magic)) == 0) {\n    WOWGlobalUnlockFree16(args[3]);\n    return S_OK;\n  }\n  WOWGlobalUnlockFree16(args[3]);\n  return S_FALSE;\n}\n\n/******************************************************************************\n *    StgOpenStorageOnILockBytes    [STORAGE.4]\n *\n * PARAMS\n *  plkbyt  FIXME: Should probably be an ILockBytes16 *.\n */\nHRESULT WINAPI StgOpenStorageOnILockBytes16(\n\tSEGPTR plkbyt,\n\tIStorage16 *pstgPriority,\n\tDWORD grfMode,\n\tSNB16 snbExclude,\n\tDWORD reserved,\n\tIStorage16 **ppstgOpen)\n{\n\tIStorage16Impl*\tlpstg;\n\tint i,ret;\n\tstruct storage_pps_entry\tstde;\n\n\tFIXME(\"(%x, %p, 0x%08x, %d, %x, %p)\\n\", plkbyt, pstgPriority, grfMode, (int)snbExclude, reserved, ppstgOpen);\n\tif ((plkbyt == 0) || (ppstgOpen == 0))\n\t\treturn STG_E_INVALIDPOINTER;\n\n\t*ppstgOpen = 0;\n\n\t_create_istorage16(ppstgOpen);\n\tlpstg = MapSL((SEGPTR)*ppstgOpen);\n\tlpstg->str.hf = NULL;\n\tlpstg->str.lockbytes = plkbyt;\n\ti=0;ret=0;\n\twhile (!ret) { /* neither 1 nor <0 */\n\t\tret=STORAGE_get_pps_entry(&lpstg->str,i,&stde);\n\t\tif ((ret==1) && (stde.pps_type==5)) {\n\t\t\tlpstg->stde=stde;\n\t\t\tbreak;\n\t\t}\n\t\ti++;\n\t}\n\tif (ret!=1) {\n\t\tIStorage16_fnRelease(&lpstg->IStorage16_iface);\n\t\treturn E_FAIL;\n\t}\n\treturn S_OK;\n}\n\n#endif\n"
  },
  {
    "path": "storage/storage.def",
    "content": "; File generated automatically from ..\\storage\\storage.dll16.spec; do not edit!\n\nLIBRARY storage.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA ;PRIVATE\n"
  },
  {
    "path": "storage/storage.dll16.spec",
    "content": "# Compound Storage DLL.\n# (FIXME: some methods are commented out. Commenting them in _WILL_\n#  result in dataloss. Do it at your own risk.)\n\n1 pascal StgCreateDocFileA(str long long ptr) StgCreateDocFile16\n2 pascal StgCreateDocfileOnILockBytes(segptr long long ptr) StgCreateDocfileOnILockBytes16\n3 pascal StgOpenStorage(str segptr long ptr long ptr) StgOpenStorage16\n4 pascal StgOpenStorageOnILockBytes(segptr segptr long ptr long ptr) StgOpenStorageOnILockBytes16\n5 pascal StgIsStorageFile(str) StgIsStorageFile16\n6 pascal StgIsStorageILockBytes(segptr) StgIsStorageILockBytes16\n7 pascal StgSetTimes(str ptr ptr ptr) StgSetTimes16\n#8 WEP\n#9 ___EXPORTEDSTUB\n103 stub DllGetClassObject\n\n# Storage Interface functions. Starting at 500\n# these are not exported in the real storage.dll, we use them\n# as 16->32 relays. They use the cdecl calling convention.\n\n# IStorage\n#500 cdecl IStorage16_QueryInterface(ptr ptr ptr) IStorage16_fnQueryInterface\n#501 cdecl IStorage16_AddRef(ptr) IStorage16_fnAddRef\n#502 cdecl IStorage16_Release(ptr) IStorage16_fnRelease\n#503 cdecl IStorage16_CreateStream(ptr str long long long ptr) IStorage16_fnCreateStream\n#\n#504 cdecl IStorage16_OpenStream(ptr str ptr long long ptr) IStorage16_fnOpenStream\n#505 cdecl IStorage16_CreateStorage(ptr str long long long ptr) IStorage16_fnCreateStorage\n#506 cdecl IStorage16_OpenStorage(ptr str ptr long ptr long ptr) IStorage16_fnOpenStorage\n#507 cdecl IStorage16_CopyTo(ptr long ptr ptr ptr) IStorage16_fnCopyTo\n#508 stub  IStorage16_MoveElementTo\n#509 cdecl IStorage16_Commit(ptr long) IStorage16_fnCommit\n#510 stub  IStorage16_Revert\n#511 stub  IStorage16_EnumElements\n#512 stub  IStorage16_DestroyElement\n#513 stub  IStorage16_RenameElement\n#514 stub  IStorage16_SetElementTimes\n#515 stub  IStorage16_SetClass\n#516 stub  IStorage16_SetStateBits\n#517 cdecl IStorage16_Stat(ptr ptr long) IStorage16_fnStat\n\n# IStream\n#518 cdecl IStream16_QueryInterface(ptr ptr ptr) IStream16_fnQueryInterface\n#519 cdecl IStream16_AddRef(ptr) IStream16_fnAddRef\n#520 cdecl IStream16_Release(ptr) IStream16_fnRelease\n#521 cdecl IStream16_Read(ptr ptr long ptr) IStream16_fnRead\n#522 cdecl IStream16_Write(ptr ptr long ptr) IStream16_fnWrite\n#523 cdecl IStream16_Seek(ptr int64 long ptr) IStream16_fnSeek\n#524 stub  IStream16_SetSize\n#525 stub  IStream16_CopyTo\n#526 stub  IStream16_Commit\n#527 stub  IStream16_Revert\n#528 stub  IStream16_LockRegion\n#529 stub  IStream16_UnlockRegion\n#530 stub  IStream16_Stat\n#531 stub  IStream16_Clone\n"
  },
  {
    "path": "storage/storage.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n    <RootNamespace>storage</RootNamespace>\n    <ProjectGuid>{4A75E3F9-856A-4854-8AA2-34C06F7415BD}</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <Import Project=\"..\\PropertySheet.props\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)ole2.lib;ntdll.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nuuid.lib;ole32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\nstorage.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\nstorage.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)ole2.lib;ntdll.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nuuid.lib;ole32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"storage.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"storage.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"storage.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Platform)'=='Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" STORAGE &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Platform)'=='Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"storage.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "system/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(system SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/system.def system.drv16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(system.drv16 system)\ntarget_link_libraries(system libwine winecrt0 krnl386)\nset_target_properties(system PROPERTIES SUFFIX \".drv16\")\n"
  },
  {
    "path": "system/Makefile.in",
    "content": "MODULE    = system.drv16\nEXTRADLLFLAGS = -m16\n\nC_SRCS = system.c\n"
  },
  {
    "path": "system/system.c",
    "content": "/*\n * SYSTEM DLL routines\n *\n * Copyright 1996 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n\n#define NONAMELESSUNION\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/winbase16.h\"\n#include \"wine/winuser16.h\"\n#include \"wownt32.h\"\n#include \"../krnl386/kernel16_private.h\"\n#include \"winternl.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(system);\n\ntypedef struct\n{\n    FARPROC16       callback16;\n    INT             rate;\n    INT             ticks;\n} SYSTEM_TIMER;\n\n#define NB_SYS_TIMERS   8\n#define SYS_TIMER_RATE  54925\n\nstatic SYSTEM_TIMER SYS_Timers[NB_SYS_TIMERS];\nstatic int SYS_NbTimers = 0;\nstatic HANDLE SYS_timer;\nstatic HANDLE SYS_thread;\nstatic BOOL SYS_timers_disabled;\n\n\n/***********************************************************************\n *           SYSTEM_TimerTick\n */\nstatic void CALLBACK SYSTEM_TimerTick( LPVOID arg, DWORD low, DWORD high )\n{\n    int i;\n\n    if (SYS_timers_disabled) return;\n    for (i = 0; i < NB_SYS_TIMERS; i++)\n    {\n        if (!SYS_Timers[i].callback16) continue;\n        if ((SYS_Timers[i].ticks -= SYS_TIMER_RATE) <= 0)\n        {\n            FARPROC16 proc = SYS_Timers[i].callback16;\n            CONTEXT context;\n\n            SYS_Timers[i].ticks += SYS_Timers[i].rate;\n\n            memset( &context, 0, sizeof(context) );\n            context.SegFs = wine_get_fs();\n            context.SegGs = wine_get_gs();\n            context.SegCs = SELECTOROF( proc );\n            context.Eip   = OFFSETOF( proc );\n            context.Ebp   = OFFSETOF(getWOW32Reserved()) + FIELD_OFFSET(STACK16FRAME, bp);\n            context.Eax   = i + 1;\n\n            WOWCallback16Ex( 0, WCB16_REGS, 0, NULL, (DWORD *)&context );\n        }\n    }\n}\n\n\n/***********************************************************************\n *           SYSTEM_TimerThread\n */\nstatic DWORD CALLBACK SYSTEM_TimerThread( void *dummy )\n{\n    LARGE_INTEGER when;\n\n    if (!(SYS_timer = CreateWaitableTimerA( NULL, FALSE, NULL ))) return 0;\n\n    when.u.LowPart = when.u.HighPart = 0;\n    SetWaitableTimer( SYS_timer, &when, (SYS_TIMER_RATE+500)/1000, SYSTEM_TimerTick, 0, FALSE );\n    for (;;) SleepEx( INFINITE, TRUE );\n}\n\n\n/**********************************************************************\n *           SYSTEM_StartTicks\n *\n * Start the system tick timer.\n */\nstatic void SYSTEM_StartTicks(void)\n{\n    if (!SYS_thread) SYS_thread = CreateThread( NULL, 0, SYSTEM_TimerThread, NULL, 0, NULL );\n}\n\n\n/**********************************************************************\n *           SYSTEM_StopTicks\n *\n * Stop the system tick timer.\n */\nstatic void SYSTEM_StopTicks(void)\n{\n    if (SYS_thread)\n    {\n        CancelWaitableTimer( SYS_timer );\n        TerminateThread( SYS_thread, 0 );\n        CloseHandle( SYS_thread );\n        CloseHandle( SYS_timer );\n        SYS_thread = 0;\n    }\n}\n\n\n/***********************************************************************\n *           InquireSystem   (SYSTEM.1)\n *\n * Note: the function always takes 2 WORD arguments, contrary to what\n *       \"Undocumented Windows\" says.\n  */\nDWORD WINAPI InquireSystem16( WORD code, WORD arg )\n{\n    WORD drivetype;\n    WCHAR root[3];\n\n    switch(code)\n    {\n    case 0:  /* Get timer resolution */\n        return SYS_TIMER_RATE;\n\n    case 1:  /* Get drive type */\n        root[0] = 'A' + arg;\n        root[1] = ':';\n        root[2] = 0;\n        drivetype = GetDriveTypeW( root );\n        if (drivetype == DRIVE_CDROM) drivetype = DRIVE_REMOTE;\n        else if (drivetype == DRIVE_NO_ROOT_DIR) drivetype = DRIVE_UNKNOWN;\n        return MAKELONG( drivetype, drivetype );\n\n    case 2:  /* Enable one-drive logic */\n        FIXME(\"Case %d: set single-drive %d not supported\\n\", code, arg );\n        return 0;\n    }\n    WARN(\"Unknown code %d\\n\", code );\n    return 0;\n}\n\n\n/***********************************************************************\n *           CreateSystemTimer   (SYSTEM.2)\n */\nWORD WINAPI CreateSystemTimer16( WORD rate, FARPROC16 proc )\n{\n    int i;\n    for (i = 0; i < NB_SYS_TIMERS; i++)\n        if (!SYS_Timers[i].callback16)  /* Found one */\n        {\n            SYS_Timers[i].rate = (UINT)rate * 1000;\n            if (SYS_Timers[i].rate < SYS_TIMER_RATE)\n                SYS_Timers[i].rate = SYS_TIMER_RATE;\n            SYS_Timers[i].ticks = SYS_Timers[i].rate;\n            SYS_Timers[i].callback16 = proc;\n            if (++SYS_NbTimers == 1) SYSTEM_StartTicks();\n            return i + 1;  /* 0 means error */\n        }\n    return 0;\n}\n\n\n/***********************************************************************\n *           KillSystemTimer   (SYSTEM.3)\n *\n * Note: do not confuse this function with USER.182\n */\nWORD WINAPI SYSTEM_KillSystemTimer( WORD timer )\n{\n    if ( !timer || timer > NB_SYS_TIMERS || !SYS_Timers[timer-1].callback16 )\n        return timer;  /* Error */\n    SYS_Timers[timer-1].callback16 = 0;\n    if (!--SYS_NbTimers) SYSTEM_StopTicks();\n    return 0;\n}\n\n\n/***********************************************************************\n *           EnableSystemTimers   (SYSTEM.4)\n */\nvoid WINAPI EnableSystemTimers16(void)\n{\n    SYS_timers_disabled = FALSE;\n}\n\n\n/***********************************************************************\n *           DisableSystemTimers   (SYSTEM.5)\n */\nvoid WINAPI DisableSystemTimers16(void)\n{\n    SYS_timers_disabled = TRUE;\n}\n\n\n/***********************************************************************\n *           GetSystemMSecCount (SYSTEM.6)\n */\nDWORD WINAPI GetSystemMSecCount16(void)\n{\n    return GetTickCount();\n}\n\n\n/***********************************************************************\n *           Get80x87SaveSize   (SYSTEM.7)\n */\nWORD WINAPI Get80x87SaveSize16(void)\n{\n    return 94;\n}\n\n\ntypedef void(*fldcw_t)(WORD);\ntypedef void(*wait_t)();\ntypedef void(*fninit_t)();\ntypedef void(*fstcw_t)(WORD*);\ntypedef void(*frndint_t)();\ntypedef void(*fclex_t)();\ntypedef void(*fsave_t)(char*);\ntypedef void(*frstor_t)(const char*);\ntypedef DWORD(*fistp_t)(WORD);\n\nvoid fsave_stub(char* a)\n{\n    FIXME(\"stub\\n\");\n}\nvoid frstor_stub(const char* a)\n{\n    FIXME(\"stub\\n\");\n}\ntypedef struct\n{\n    fldcw_t fldcw;\n    wait_t wait;\n    fninit_t fninit;\n    fstcw_t fstcw;\n    frndint_t frndint;\n    fclex_t fclex;\n    fsave_t fsave;\n    frstor_t frstor;\n    fistp_t fistp;\n} x87function;\nx87function x87;\ntypedef void (*load_x87function_t)(x87function *func);\nvoid load_x87()\n{\n    char dllname[MAX_PATH];\n    load_x87function_t load_x87function;\n    krnl386_get_config_string(\"otvdm\", \"vm\", \"vm86.dll\", dllname, sizeof(dllname));\n    HMODULE vm = LoadLibraryA(dllname);\n    load_x87function = (load_x87function_t)GetProcAddress(vm, \"load_x87function\");\n    if (load_x87function)\n        load_x87function(&x87);\n    if (!x87.fsave)\n        x87.fsave = fsave_stub;\n    if (!x87.frstor)\n        x87.frstor = frstor_stub;\n}\n#define USE_VM86_DLL 1\n/***********************************************************************\n *           Save80x87State   (SYSTEM.8)\n */\nvoid WINAPI Save80x87State16( char *ptr )\n{\n#ifdef USE_VM86_DLL\n    x87.fsave(ptr);\n#elif defined(__i386__)\n    __asm__(\".byte 0x66; fsave %0; fwait\" : \"=m\" (ptr) );\n#endif\n}\n\n\n/***********************************************************************\n *           Restore80x87State   (SYSTEM.9)\n */\nvoid WINAPI Restore80x87State16( const char *ptr )\n{\n#ifdef USE_VM86_DLL\n    x87.frstor(ptr);\n#elif defined(__i386__)\n    __asm__(\".byte 0x66; frstor %0\" : : \"m\" (ptr) );\n#endif\n}\n\n\n/***********************************************************************\n *           A20_Proc  (SYSTEM.20)\n */\nvoid WINAPI A20_Proc16( WORD unused )\n{\n    /* this is also a NOP in Windows */\n}\n"
  },
  {
    "path": "system/system.def",
    "content": "; File generated automatically from ..\\system.drv16\\system.drv16.spec; do not edit!\n\nLIBRARY system.drv16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "system/system.drv16.spec",
    "content": "1 pascal InquireSystem(word word) InquireSystem16\n2 pascal -ret16 CreateSystemTimer(word segptr) CreateSystemTimer16\n3 pascal -ret16 KillSystemTimer(word) SYSTEM_KillSystemTimer\n4 pascal -ret16 EnableSystemTimers() EnableSystemTimers16\n5 pascal -ret16 DisableSystemTimers() DisableSystemTimers16\n6 pascal GetSystemMSecCount() GetSystemMSecCount16\n7 pascal -ret16 Get80x87SaveSize() Get80x87SaveSize16\n8 pascal -ret16 Save80x87State(ptr) Save80x87State16\n9 pascal -ret16 Restore80x87State(ptr) Restore80x87State16\n13 stub INQUIRELONGINTS # W1.1, W2.0\n#14 stub ordinal only W1.1\n20 pascal -ret16 A20_Proc(word) A20_Proc16\n"
  },
  {
    "path": "system/system.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <Keyword>Win32Proj</Keyword>\r\n    <RootNamespace>system</RootNamespace>\r\n    <ProjectGuid>{6E81B0D8-0218-4EB9-88D7-AD2F2EBD928C}</ProjectGuid>\r\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v141</PlatformToolset>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v141</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n    <Import Project=\"..\\PropertySheet.props\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n    <Import Project=\"..\\PropertySheet.props\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n    <TargetExt>.drv16</TargetExt>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n    <IntDir>Release</IntDir>\r\n    <TargetExt>.drv16</TargetExt>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>USE_VM86_DLL;WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\r</AdditionalDependencies>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <ModuleDefinitionFile>\r\nsystem.def\r\n      </ModuleDefinitionFile>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>USE_VM86_DLL;WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\r\n      <ModuleDefinitionFile>\r\nsystem.def\r\n      </ModuleDefinitionFile>\r\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\r</AdditionalDependencies>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"system.c\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Object Include=\"system.drv16.obj\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <CustomBuild Include=\"system.drv16.spec\">\r\n      <FileType>Document</FileType>\r\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" SYSTEM &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\r\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\r\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" SYSTEM &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\r\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\r\n    </CustomBuild>\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "timer/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(timer SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/timer.def timer.drv16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(timer.drv16 timer)\ntarget_link_libraries(timer libwine winecrt0 krnl386)\nset_target_properties(timer PROPERTIES SUFFIX \".drv16\")\n"
  },
  {
    "path": "timer/timer.c",
    "content": "#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/debug.h\"\n#include \"wine/winbase16.h\"\n#include \"wownt32.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(timer);\nLRESULT WINAPI DriverProc16(DWORD dwDevID, HDRVR16 hDrv, WORD wMsg,\n\t\t\t    DWORD dwParam1, DWORD dwParam2)\n{\n\tFIXME(\"\\n\");\n\treturn 0;\n}\n"
  },
  {
    "path": "timer/timer.def",
    "content": "; File generated automatically from timer\\timer.drv16.spec; do not edit!\n\nLIBRARY timer.drv16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "timer/timer.drv16.spec",
    "content": "#1 WEP\n2 pascal DriverProc(long word word long long) DriverProc16\n"
  },
  {
    "path": "timer/timer.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n    <RootNamespace>timer</RootNamespace>\n    <ProjectGuid>{09EF1555-CA21-47F8-8830-04A53295F8B6}</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <Import Project=\"..\\PropertySheet.props\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.drv16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.drv16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\ntimer.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\ntimer.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"timer.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"timer.drv16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"timer.drv16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Platform)'=='Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" TIMER &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Platform)'=='Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"timer.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "toolhelp/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(toolhelp SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/toolhelp.def toolhelp.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(toolhelp.dll16 toolhelp)\ntarget_link_libraries(toolhelp libwine winecrt0 krnl386 user)\nset_target_properties(toolhelp PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "toolhelp/Makefile.in",
    "content": "MODULE    = toolhelp.dll16\nEXTRADLLFLAGS = -m16\n\nC_SRCS = toolhelp.c\n"
  },
  {
    "path": "toolhelp/toolhelp.c",
    "content": "/*\n * Toolhelp functions\n *\n * Copyright 1996 Marcus Meissner\n * Copyright 2009 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <stdarg.h>\n#include <stdlib.h>\n#include <string.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#include <ctype.h>\n#include <assert.h>\n#include \"windef.h\"\n#include \"winbase.h\"\n//#include \"winternl.h\"\n#include \"../krnl386/kernel16_private.h\"\n#include \"wownt32.h\"\n\n#include \"wine/winbase16.h\"\n#include \"toolhelp.h\"\n#include \"wine/debug.h\"\n#include \"wine/exception.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(toolhelp);\n\n#include \"pshpack1.h\"\n\n/* Global arena block */\ntypedef struct\n{\n    void     *base;          /* Base address (0 if discarded) */\n    DWORD     size;          /* Size in bytes (0 indicates a free block) */\n    HGLOBAL16 handle;        /* Handle for this block */\n    HGLOBAL16 hOwner;        /* Owner of this block */\n    BYTE      lockCount;     /* Count of GlobalFix() calls */\n    BYTE      pageLockCount; /* Count of GlobalPageLock() calls */\n    BYTE      flags;         /* Allocation flags */\n    BYTE      selCount;      /* Number of selectors allocated for this block */\n    DWORD     dib_avail_size;\n    WORD      wSeg;\n    WORD      wType;\n    BYTE      pad[0x10 - 4 - 2 - 2];     /* win31 GLOBALARENA size = 0x20 */\n} GLOBALARENA;\n\n#define GLOBAL_MAX_COUNT  8192        /* Max number of allocated blocks */\n\ntypedef struct\n{\n    WORD check;                 /* 00 Heap checking flag */\n    WORD freeze;                /* 02 Heap frozen flag */\n    WORD items;                 /* 04 Count of items on the heap */\n    WORD first;                 /* 06 First item of the heap */\n    WORD pad1;                  /* 08 Always 0 */\n    WORD last;                  /* 0a Last item of the heap */\n    WORD pad2;                  /* 0c Always 0 */\n    BYTE ncompact;              /* 0e Compactions counter */\n    BYTE dislevel;              /* 0f Discard level */\n    DWORD distotal;             /* 10 Total bytes discarded */\n    WORD htable;                /* 14 Pointer to handle table */\n    WORD hfree;                 /* 16 Pointer to free handle table */\n    WORD hdelta;                /* 18 Delta to expand the handle table */\n    WORD expand;                /* 1a Pointer to expand function (unused) */\n    WORD pstat;                 /* 1c Pointer to status structure (unused) */\n    FARPROC16 notify;           /* 1e Pointer to LocalNotify() function */\n    WORD lock;                  /* 22 Lock count for the heap */\n    WORD extra;                 /* 24 Extra bytes to allocate when expanding */\n    WORD minsize;               /* 26 Minimum size of the heap */\n    WORD magic;                 /* 28 Magic number */\n} LOCALHEAPINFO;\n\ntypedef struct\n{\n/* Arena header */\n    WORD prev;          /* Previous arena | arena type */\n    WORD next;          /* Next arena */\n/* Start of the memory block or free-list info */\n    WORD size;          /* Size of the free block */\n    WORD free_prev;     /* Previous free block */\n    WORD free_next;     /* Next free block */\n} LOCALARENA;\n\n#define LOCAL_ARENA_HEADER_SIZE      4\n#define LOCAL_ARENA_HEADER( handle) ((handle) - LOCAL_ARENA_HEADER_SIZE)\n#define LOCAL_ARENA_PTR(ptr,arena)  ((LOCALARENA *)((char *)(ptr)+(arena)))\n\n#include \"poppack.h\"\n\n#define TDB_MAGIC    ('T' | ('D' << 8))\n\n/* FIXME: to make this work, we have to call back all these registered\n * functions from all over the WINE code. Someone with more knowledge than\n * me please do that. -Marcus\n */\n\nstatic struct notify\n{\n    HTASK16   htask;\n    FARPROC16 lpfnCallback;\n    WORD     wFlags;\n} *notifys = NULL;\n\nstatic struct intcb \n{\n    HTASK16   htask;\n    FARPROC16 lpfnIntCallback;\n} *intcbs = NULL;\n\nstatic int nrofnotifys = 0;\nstatic int nrofintcbs = 0;\n\nstatic THHOOK *get_thhook(void)\n{\n    static THHOOK *thhook;\n\n    if (!thhook) thhook = MapSL( (SEGPTR)GetProcAddress16( GetModuleHandle16(\"KERNEL\"), (LPCSTR)332 ));\n    return thhook;\n}\n\nstatic GLOBALARENA *get_global_arena(void)\n{\n    return MapSL(MAKESEGPTR(get_thhook()->hGlobalHeap, 0));\n}\n\n#define LOCAL_HEAP_MAGIC  0x484c  /* 'LH' */\nstatic LOCALHEAPINFO *get_local_heap( HANDLE16 ds )\n{\n    INSTANCEDATA *ptr = MapSL( MAKESEGPTR( ds, 0 ));\n    LOCALHEAPINFO *pInfo;\n\n    if (!ptr || !ptr->heap) return NULL;\n    pInfo = (LOCALHEAPINFO*)((char*)ptr + ptr->heap);\n    if (pInfo->magic != LOCAL_HEAP_MAGIC)\n        return NULL;\n    return pInfo;\n}\n\n\n/***********************************************************************\n *           GlobalHandleToSel   (TOOLHELP.50)\n */\nWORD WINAPI GlobalHandleToSel16( HGLOBAL16 handle )\n{\n    if (!handle) return 0;\n    if (!(handle & 7)) return handle - 1;\n    return handle | 7;\n}\n\n\n/***********************************************************************\n *           GlobalFirst   (TOOLHELP.51)\n */\nBOOL16 WINAPI GlobalFirst16( GLOBALENTRY *pGlobal, WORD wFlags )\n{\n    if (wFlags == GLOBAL_LRU) return FALSE;\n    pGlobal->dwNext = 0;\n    return GlobalNext16( pGlobal, wFlags );\n}\n\n\n/***********************************************************************\n *           GlobalNext   (TOOLHELP.52)\n */\nBOOL16 WINAPI GlobalNext16( GLOBALENTRY *pGlobal, WORD wFlags)\n{\n    GLOBALARENA *pGlobalArena = get_global_arena();\n    GLOBALARENA *pArena;\n\n    if (pGlobal->dwNext >= GLOBAL_MAX_COUNT) return FALSE;\n    pArena = pGlobalArena + pGlobal->dwNext;\n    if (wFlags == GLOBAL_FREE)  /* only free blocks */\n    {\n        int i;\n        for (i = pGlobal->dwNext; i < GLOBAL_MAX_COUNT; i++, pArena++)\n            if (pArena->size == 0) break;  /* block is free */\n        if (i >= GLOBAL_MAX_COUNT) return FALSE;\n        pGlobal->dwNext = i;\n    }\n\n    pGlobal->dwAddress    = (DWORD_PTR)pArena->base;\n    pGlobal->dwBlockSize  = pArena->size;\n    pGlobal->hBlock       = pArena->handle;\n    pGlobal->wcLock       = pArena->lockCount;\n    pGlobal->wcPageLock   = pArena->pageLockCount;\n    pGlobal->wFlags       = (GetCurrentPDB16() == pArena->hOwner);\n    pGlobal->wHeapPresent = FALSE;\n    pGlobal->hOwner       = pArena->hOwner;\n    pGlobal->wType        = pArena->wType;\n    pGlobal->wData        = pArena->wType == GT_CODE || pArena->wType == GT_DATA || pArena->wType == GT_DGROUP ? pArena->wSeg : 0;\n    pGlobal->dwNext++;\n    TRACE(\"%04x, %04x, %04x\\n\", pGlobal->hBlock, pGlobal->dwNext, pGlobal->wData);\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           GlobalInfo   (TOOLHELP.53)\n */\nBOOL16 WINAPI GlobalInfo16( GLOBALINFO *pInfo )\n{\n    GLOBALARENA *pGlobalArena = get_global_arena();\n    GLOBALARENA *pArena;\n    int i;\n\n    pInfo->wcItems = GLOBAL_MAX_COUNT;\n    pInfo->wcItemsFree = 0;\n    pInfo->wcItemsLRU = 0;\n    for (i = 0, pArena = pGlobalArena; i < GLOBAL_MAX_COUNT; i++, pArena++)\n        if (pArena->size == 0) pInfo->wcItemsFree++;\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           GlobalEntryHandle   (TOOLHELP.54)\n */\nBOOL16 WINAPI GlobalEntryHandle16( GLOBALENTRY *pGlobal, HGLOBAL16 hItem )\n{\n    GLOBALARENA *pGlobalArena = get_global_arena();\n    GLOBALARENA *pArena = pGlobalArena + (hItem >> __AHSHIFT);\n\n    pGlobal->dwAddress    = (DWORD_PTR)pArena->base;\n    pGlobal->dwBlockSize  = pArena->size;\n    pGlobal->hBlock       = pArena->handle;\n    pGlobal->wcLock       = pArena->lockCount;\n    pGlobal->wcPageLock   = pArena->pageLockCount;\n    pGlobal->wFlags       = (GetCurrentPDB16() == pArena->hOwner);\n    pGlobal->wHeapPresent = FALSE;\n    pGlobal->hOwner       = pArena->hOwner;\n    pGlobal->wType        = pArena->wType;\n    pGlobal->wData        = pArena->wType == GT_CODE || pArena->wType == GT_DATA || pArena->wType == GT_DGROUP ? pArena->wSeg : 0;\n    pGlobal->dwNext       = (hItem >> __AHSHIFT) + 1;\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           GlobalEntryModule   (TOOLHELP.55)\n */\nBOOL16 WINAPI GlobalEntryModule16( GLOBALENTRY *pGlobal, HMODULE16 hModule,\n                                 WORD wSeg )\n{\n    BOOL r = GlobalFirst16(pGlobal, 0);\n    while (r)\n    {\n        if (pGlobal->hOwner == hModule)\n        {\n            if ((pGlobal->wType == GT_CODE || pGlobal->wType == GT_DATA || pGlobal->wType == GT_DGROUP) && pGlobal->wData == wSeg)\n            {\n                return TRUE;\n            }\n        }\n        r = GlobalNext16(pGlobal, 0);\n    }\n    return FALSE;\n}\n\n\n/***********************************************************************\n *           LocalInfo   (TOOLHELP.56)\n */\nBOOL16 WINAPI LocalInfo16( LOCALINFO *pLocalInfo, HGLOBAL16 handle )\n{\n    LOCALHEAPINFO *pInfo = get_local_heap( SELECTOROF(WOWGlobalLock16(handle)) );\n    if (!pInfo) return FALSE;\n    pLocalInfo->wcItems = pInfo->items;\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           LocalFirst   (TOOLHELP.57)\n */\nBOOL16 WINAPI LocalFirst16( LOCALENTRY *pLocalEntry, HGLOBAL16 handle )\n{\n    WORD ds = GlobalHandleToSel16( handle );\n    char *ptr = MapSL( MAKESEGPTR( ds, 0 ) );\n    LOCALHEAPINFO *pInfo = get_local_heap( ds );\n    if (!pInfo) return FALSE;\n\n    pLocalEntry->hHandle   = pInfo->first + LOCAL_ARENA_HEADER_SIZE;\n    pLocalEntry->wAddress  = pLocalEntry->hHandle;\n    pLocalEntry->wFlags    = LF_FIXED;\n    pLocalEntry->wcLock    = 0;\n    pLocalEntry->wType     = LT_NORMAL;\n    pLocalEntry->hHeap     = handle;\n    pLocalEntry->wHeapType = NORMAL_HEAP;\n    pLocalEntry->wNext     = LOCAL_ARENA_PTR(ptr,pInfo->first)->next;\n    pLocalEntry->wSize     = pLocalEntry->wNext - pLocalEntry->hHandle;\n    TRACE(\"%04x, %04x, %04x, %d\\n\", ds, pLocalEntry->hHandle, pLocalEntry->wNext, pLocalEntry->wSize);\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           LocalNext   (TOOLHELP.58)\n */\nBOOL16 WINAPI LocalNext16( LOCALENTRY *pLocalEntry )\n{\n    WORD ds = GlobalHandleToSel16( pLocalEntry->hHeap );\n    char *ptr = MapSL( MAKESEGPTR( ds, 0 ) );\n    LOCALARENA *pArena;\n\n    if (!get_local_heap( ds )) return FALSE;\n    if (!pLocalEntry->wNext) return FALSE;\n    pArena = LOCAL_ARENA_PTR( ptr, pLocalEntry->wNext );\n\n    pLocalEntry->hHandle   = pLocalEntry->wNext + LOCAL_ARENA_HEADER_SIZE;\n    pLocalEntry->wAddress  = pLocalEntry->hHandle;\n    pLocalEntry->wFlags    = (pArena->prev & 3) + 1;\n    pLocalEntry->wcLock    = 0;\n    pLocalEntry->wType     = LT_NORMAL;\n    if (pArena->next != pLocalEntry->wNext)  /* last one? */\n        pLocalEntry->wNext = pArena->next;\n    else\n        pLocalEntry->wNext = 0;\n    pLocalEntry->wSize     = pLocalEntry->wNext - pLocalEntry->hHandle;\n    TRACE(\"%04x, %04x, %04x, %d\\n\", ds, pLocalEntry->hHandle, pLocalEntry->wNext, pLocalEntry->wSize);\n    return TRUE;\n}\n\n\n/**********************************************************************\n *\t    ModuleFirst    (TOOLHELP.59)\n */\nBOOL16 WINAPI ModuleFirst16( MODULEENTRY *lpme )\n{\n    lpme->wNext = get_thhook()->hExeHead;\n    return ModuleNext16( lpme );\n}\n\n\n/**********************************************************************\n *\t    ModuleNext    (TOOLHELP.60)\n */\nBOOL16 WINAPI ModuleNext16( MODULEENTRY *lpme )\n{\n    NE_MODULE *pModule;\n    char *name;\n\n    if (!lpme->wNext) return FALSE;\n    if (!(pModule = GlobalLock16( GetExePtr(lpme->wNext) ))) return FALSE;\n    name = (char *)pModule + pModule->ne_restab;\n    memcpy( lpme->szModule, name + 1, min(*name, MAX_MODULE_NAME) );\n    lpme->szModule[min(*name, MAX_MODULE_NAME)] = '\\0';\n    lpme->hModule = lpme->wNext;\n    lpme->wcUsage = pModule->count;\n    name = ((OFSTRUCT *)((char*)pModule + pModule->fileinfo))->szPathName;\n    lstrcpynA( lpme->szExePath, name, sizeof(lpme->szExePath) );\n    lpme->wNext = pModule->next;\n    return TRUE;\n}\n\n\n/**********************************************************************\n *\t    ModuleFindName    (TOOLHELP.61)\n */\nHMODULE16 WINAPI ModuleFindName16( MODULEENTRY *lpme, LPCSTR name )\n{\n    HMODULE16 hModule = GetModuleHandle16( name );\n    lpme->wNext = hModule;\n    return ModuleNext16( lpme ) ? hModule : 0;\n}\n\n\n/**********************************************************************\n *\t    ModuleFindHandle    (TOOLHELP.62)\n */\nHMODULE16 WINAPI ModuleFindHandle16( MODULEENTRY *lpme, HMODULE16 hModule )\n{\n    NE_MODULE *pModule;\n    if (!(pModule = GlobalLock16(hModule))) return 0;\n    if (pModule->ne_magic != IMAGE_OS2_SIGNATURE)\n        return 0;\n    lpme->wNext = hModule;\n    return ModuleNext16( lpme ) ? hModule : 0;\n}\n\n\n/***********************************************************************\n *           TaskFirst   (TOOLHELP.63)\n */\nBOOL16 WINAPI TaskFirst16( TASKENTRY *lpte )\n{\n    lpte->hNext = get_thhook()->HeadTDB;\n    return TaskNext16( lpte );\n}\n\n\n/***********************************************************************\n *           TaskNext   (TOOLHELP.64)\n */\nBOOL16 WINAPI TaskNext16( TASKENTRY *lpte )\n{\n    TDB *pTask;\n    INSTANCEDATA *pInstData;\n\n    TRACE_(toolhelp)(\"(%p): task=%04x\\n\", lpte, lpte->hNext );\n    if (!lpte->hNext) return FALSE;\n\n    /* make sure that task and hInstance are valid (skip initial Wine task !) */\n    while (1) {\n        pTask = GlobalLock16( lpte->hNext );\n        if (!pTask || pTask->magic != TDB_MAGIC) return FALSE;\n        if (pTask->hInstance)\n            break;\n        lpte->hNext = pTask->hNext;\n    }\n    pInstData = MapSL( MAKESEGPTR( GlobalHandleToSel16(pTask->hInstance), 0 ) );\n    lpte->hTask         = lpte->hNext;\n    lpte->hTaskParent   = pTask->hParent;\n    lpte->hInst         = pTask->hInstance;\n    lpte->hModule       = pTask->hModule;\n    lpte->wSS           = SELECTOROF(pTask->teb->TlsSlots[WOW32RESERVED_TLS_INDEX]);\n    lpte->wSP           = OFFSETOF(pTask->teb->TlsSlots[WOW32RESERVED_TLS_INDEX]);\n    lpte->wStackTop     = pInstData->stacktop;\n    lpte->wStackMinimum = pInstData->stackmin;\n    lpte->wStackBottom  = pInstData->stackbottom;\n    lpte->wcEvents      = pTask->nEvents;\n    lpte->hQueue        = pTask->hQueue;\n    lstrcpynA( lpte->szModule, pTask->module_name, sizeof(lpte->szModule) );\n    lpte->wPSPOffset    = 0x100;  /*??*/\n    lpte->hNext         = pTask->hNext;\n    return TRUE;\n}\n\n\n/***********************************************************************\n *           TaskFindHandle   (TOOLHELP.65)\n */\nBOOL16 WINAPI TaskFindHandle16( TASKENTRY *lpte, HTASK16 hTask )\n{\n    lpte->hNext = hTask;\n    return TaskNext16( lpte );\n}\n\n\ntypedef NTSTATUS\n(NTAPI *NtQuerySystemInformation_t)(\n    IN SYSTEM_INFORMATION_CLASS SystemInformationClass,\n    OUT PVOID SystemInformation,\n    IN ULONG SystemInformationLength,\n    OUT PULONG ReturnLength OPTIONAL\n);\nNtQuerySystemInformation_t fNtQuerySystemInformation;\n/***********************************************************************\n *           MemManInfo   (TOOLHELP.72)\n */\nBOOL16 WINAPI MemManInfo16( MEMMANINFO *info )\n{\n    SYSTEM_BASIC_INFORMATION sbi;\n    MEMORYSTATUS status;\n\n    /*\n     * Not unsurprisingly although the documentation says you\n     * _must_ provide the size in the dwSize field, this function\n     * (under Windows) always fills the structure and returns true.\n     */\n    if (!fNtQuerySystemInformation)\n        fNtQuerySystemInformation = (NtQuerySystemInformation_t)GetProcAddress(GetModuleHandleA(\"ntdll.dll\"), \"NtQuerySystemInformation\");\n    fNtQuerySystemInformation( SystemBasicInformation, &sbi, sizeof(sbi), NULL );\n    GlobalMemoryStatus( &status );\n    info->wPageSize            = sbi.PageSize;\n    info->dwLargestFreeBlock   = status.dwAvailVirtual;\n    info->dwMaxPagesAvailable  = info->dwLargestFreeBlock / info->wPageSize;\n    info->dwMaxPagesLockable   = info->dwMaxPagesAvailable;\n    info->dwTotalLinearSpace   = status.dwTotalVirtual / info->wPageSize;\n    info->dwTotalUnlockedPages = info->dwTotalLinearSpace;\n    info->dwFreePages          = info->dwMaxPagesAvailable;\n    info->dwTotalPages         = info->dwTotalLinearSpace;\n    info->dwFreeLinearSpace    = info->dwMaxPagesAvailable;\n    info->dwSwapFilePages      = status.dwTotalPageFile / info->wPageSize;\n    return TRUE;\n}\n\n\n/***********************************************************************\n *\t\tNotifyRegister (TOOLHELP.73)\n */\nBOOL16 WINAPI NotifyRegister16( HTASK16 htask, FARPROC16 lpfnCallback,\n                              WORD wFlags )\n{\n    int\ti;\n\n    WARN(\"(%x,%x,%x), semi-stub.\\n\",\n                      htask, (DWORD)lpfnCallback, wFlags );\n    if (!htask) htask = GetCurrentTask();\n    for (i=0;i<nrofnotifys;i++)\n        if (notifys[i].htask==htask)\n            break;\n    if (i==nrofnotifys) {\n        if (notifys==NULL)\n            notifys=HeapAlloc( GetProcessHeap(), 0,\n                                               sizeof(struct notify) );\n        else\n            notifys=HeapReAlloc( GetProcessHeap(), 0, notifys,\n                                        sizeof(struct notify)*(nrofnotifys+1));\n        if (!notifys) return FALSE;\n        nrofnotifys++;\n    }\n    notifys[i].htask=htask;\n    notifys[i].lpfnCallback=lpfnCallback;\n    notifys[i].wFlags=wFlags;\n    return TRUE;\n}\n\n/***********************************************************************\n *\t\tNotifyUnRegister (TOOLHELP.74)\n */\nBOOL16 WINAPI NotifyUnRegister16( HTASK16 htask )\n{\n    int\ti;\n\n    WARN(\"(%x), semi-stub.\\n\", htask );\n    if (!htask) htask = GetCurrentTask();\n    for (i=nrofnotifys;i--;)\n        if (notifys[i].htask==htask)\n            break;\n    if (i==-1)\n        return FALSE;\n    memcpy(notifys+i,notifys+(i+1),sizeof(struct notify)*(nrofnotifys-i-1));\n    notifys=HeapReAlloc( GetProcessHeap(), 0, notifys,\n                                        (nrofnotifys-1)*sizeof(struct notify));\n    nrofnotifys--;\n    return TRUE;\n}\n\nstatic int lastcb = 0;\nstatic SEGPTR lastaddr = 0;\n\nvoid WINAPI next_intcb(CONTEXT *context)\n{\n    WORD *stkptr = (WORD *)MapSL(MAKESEGPTR(context->SegSs, LOWORD(context->Esp)));\n    if (lastcb == nrofintcbs)\n    {\n        lastcb = 0;\n        context->Esp += 12;\n        context->Eip = stkptr[3];\n        context->SegCs = stkptr[4];\n        context->EFlags = stkptr[5];\n        lastaddr = MAKESEGPTR(context->SegCs, context->Eip);\n        return;\n    }\n    stkptr -= 2;\n    FARPROC16 next_intcb16 = GetProcAddress16(GetModuleHandle16(\"TOOLHELP\"), \"next_intcb\");\n    stkptr[0] = OFFSETOF(next_intcb16);\n    stkptr[1] = SELECTOROF(next_intcb16);\n    context->Esp -= 4;\n    context->Eip = OFFSETOF(intcbs[lastcb].lpfnIntCallback);\n    context->SegCs = SELECTOROF(intcbs[lastcb].lpfnIntCallback);\n    lastcb++;\n}\n\nFARPROC16 WINAPI get_intcb(SEGPTR *stack, SEGPTR addr, WORD flags, WORD err, WORD ax)\n{\n    if(!nrofintcbs)\n        return FALSE;\n    if(addr == lastaddr) // failed to handle once\n        return FALSE;\n    lastaddr = 0;\n\n    WORD *stkptr = (WORD *)MapSL(*stack);\n    FARPROC16 next_intcb16 = GetProcAddress16(GetModuleHandle16(\"TOOLHELP\"), \"next_intcb\");\n    stkptr -= 8;\n    stkptr[0] = OFFSETOF(next_intcb16);\n    stkptr[1] = SELECTOROF(next_intcb16);\n    stkptr[2] = ax;\n    stkptr[3] = err;\n    stkptr[4] = 0;\n    stkptr[5] = OFFSETOF(addr);\n    stkptr[6] = SELECTOROF(addr);\n    stkptr[7] = flags;\n    *stack -= 16;\n    lastcb = 1;\n    return intcbs[0].lpfnIntCallback;\n}        \n\n/***********************************************************************\n *\t\tInterruptRegister (TOOLHELP.75)\n */\nBOOL16 WINAPI InterruptRegister16( HTASK16 htask, FARPROC16 callback )\n{\n    int\ti;\n\n    WARN(\"(%04x, %04x:%04x), semi-stub.\\n\", htask, SELECTOROF(callback), OFFSETOF(callback));\n    if (!htask) htask = GetCurrentTask();\n    for (i=0;i<nrofintcbs;i++)\n        if (intcbs[i].htask==htask)\n            break;\n    if (i==nrofintcbs) {\n        if (intcbs==NULL)\n            intcbs=HeapAlloc( GetProcessHeap(), 0,\n                                               sizeof(struct intcb) );\n        else\n            intcbs=HeapReAlloc( GetProcessHeap(), 0, intcbs,\n                                        sizeof(struct intcb)*(nrofintcbs+1));\n        if (!intcbs) return FALSE;\n        nrofintcbs++;\n    }\n    intcbs[i].htask=htask;\n    intcbs[i].lpfnIntCallback=callback;\n    return TRUE;\n}\n\n/***********************************************************************\n *\t\tInterruptUnRegister (TOOLHELP.76)\n */\nBOOL16 WINAPI InterruptUnRegister16( HTASK16 htask )\n{\n    int\ti;\n\n    WARN(\"(%x), semi-stub.\\n\", htask );\n    if (!htask) htask = GetCurrentTask();\n    for (i=nrofintcbs;i--;)\n        if (intcbs[i].htask==htask)\n            break;\n    if (i==-1)\n        return FALSE;\n    memcpy(intcbs+i,intcbs+(i+1),sizeof(struct intcb)*(nrofintcbs-i-1));\n    intcbs=HeapReAlloc( GetProcessHeap(), 0, intcbs,\n                                        (nrofintcbs-1)*sizeof(struct intcb));\n    nrofintcbs--;\n    return TRUE;\n}\n\n/***********************************************************************\n *           TerminateApp   (TOOLHELP.77)\n *\n * See \"Undocumented Windows\".\n */\nvoid WINAPI TerminateApp16(HTASK16 hTask, WORD wFlags)\n{\n    if (hTask && hTask != GetCurrentTask())\n    {\n        FIXME(\"cannot terminate task %x\\n\", hTask);\n        return;\n    }\n\n#if 0  /* FIXME */\n    /* check undocumented flag */\n    if (!(wFlags & 0x8000))\n        TASK_CallTaskSignalProc( USIG16_TERMINATION, hTask );\n#endif\n\n    /* UndocWin says to call int 0x21/0x4c exit=0xff here,\n       but let's just call ExitThread */\n    ExitThread(0xff);\n}\n\n/***********************************************************************\n *           MemoryRead   (TOOLHELP.78)\n */\nDWORD WINAPI MemoryRead16( WORD sel, DWORD offset, void *buffer, DWORD count )\n{\n    LDT_ENTRY entry;\n    DWORD limit;\n\n    wine_ldt_get_entry( sel, &entry );\n    if (wine_ldt_is_empty( &entry )) return 0;\n    limit = wine_ldt_get_limit( &entry );\n    if (offset > limit) return 0;\n    if (offset + count > limit + 1) count = limit + 1 - offset;\n    memcpy( buffer, (char *)wine_ldt_get_base(&entry) + offset, count );\n    return count;\n}\n\n\n/***********************************************************************\n *           MemoryWrite   (TOOLHELP.79)\n */\nDWORD WINAPI MemoryWrite16( WORD sel, DWORD offset, void *buffer, DWORD count )\n{\n    LDT_ENTRY entry;\n    DWORD limit;\n\n    wine_ldt_get_entry( sel, &entry );\n    if (wine_ldt_is_empty( &entry )) return 0;\n    limit = wine_ldt_get_limit( &entry );\n    if (offset > limit) return 0;\n    if (offset + count > limit) count = limit + 1 - offset;\n    memcpy( (char *)wine_ldt_get_base(&entry) + offset, buffer, count );\n    return count;\n}\n\n/***********************************************************************\n *           TimerCount   (TOOLHELP.80)\n */\nBOOL16 WINAPI TimerCount16( TIMERINFO *pTimerInfo )\n{\n    /* FIXME\n     * In standard mode, dwmsSinceStart = dwmsThisVM\n     *\n     * I tested this, under Windows in enhanced mode, and\n     * if you never switch VM (ie start/stop DOS) these\n     * values should be the same as well.\n     *\n     * Also, Wine should adjust for the hardware timer\n     * to reduce the amount of error to ~1ms.\n     * I can't be bothered, can you?\n     */\n    pTimerInfo->dwmsSinceStart = pTimerInfo->dwmsThisVM = GetTickCount();\n    return TRUE;\n}\n\n/***********************************************************************\n *           SystemHeapInfo   (TOOLHELP.71)\n */\nBOOL16 WINAPI SystemHeapInfo16( SYSHEAPINFO *pHeapInfo )\n{\n    STACK16FRAME* stack16 = MapSL((SEGPTR)/*NtCurrentTeb()->WOW32Reserved*/getWOW32Reserved());\n    HANDLE16 oldDS = stack16->ds;\n    WORD user = LoadLibrary16( \"USER.EXE\" );\n    WORD gdi = LoadLibrary16( \"GDI.EXE\" );\n    stack16->ds = user;\n    pHeapInfo->wUserFreePercent = (int)LocalCountFree16() * 100 / LocalHeapSize16();\n    stack16->ds = gdi;\n    pHeapInfo->wGDIFreePercent  = (int)LocalCountFree16() * 100 / LocalHeapSize16();\n    stack16->ds = oldDS;\n    pHeapInfo->hUserSegment = user;\n    pHeapInfo->hGDISegment  = gdi;\n    FreeLibrary16( user );\n    FreeLibrary16( gdi );\n    return TRUE;\n}\n\n/***********************************************************************\n *           Local32Info   (TOOLHELP.84)\n */\nBOOL16 WINAPI Local32Info16( LOCAL32INFO *pLocal32Info, HGLOBAL16 handle )\n{\n    FIXME( \"Call Local32Info16 in kernel\\n\" );\n    return FALSE;\n}\n\n/***********************************************************************\n *           Local32First   (TOOLHELP.85)\n */\nBOOL16 WINAPI Local32First16( LOCAL32ENTRY *pLocal32Entry, HGLOBAL16 handle )\n{\n    FIXME( \"Call Local32First16 in kernel\\n\" );\n    return FALSE;\n}\n\n/***********************************************************************\n *           Local32Next   (TOOLHELP.86)\n */\nBOOL16 WINAPI Local32Next16( LOCAL32ENTRY *pLocal32Entry )\n{\n    FIXME( \"Call Local32Next16 in kernel\\n\" );\n    return FALSE;\n}\n__declspec(dllimport) BOOL16 WINAPI USER_ClassFirst16(CLASSENTRY *pClassEntry);\n__declspec(dllimport) BOOL16 WINAPI USER_ClassNext16(CLASSENTRY *pClassEntry);\nBOOL16 WINAPI ClassFirst16(CLASSENTRY *pClassEntry)\n{\n    return USER_ClassFirst16(pClassEntry);\n}\nBOOL16 WINAPI ClassNext16(CLASSENTRY *pClassEntry)\n{\n    return USER_ClassNext16(pClassEntry);\n}\n\nBOOL WINAPI TOOLHELP_CallNotify(WORD wID, DWORD dwData)\n{\n    int i;\n    DWORD ret = FALSE;\n    if (nrofnotifys == 0)\n        return FALSE;\n    TRACE(\"(%04x,%08x)\\n\", wID, dwData);\n    for (i = 0; i < nrofnotifys; i++)\n    {\n        WORD args[3];\n        PVOID sssp;\n        BOOL skip = FALSE;\n        if ((wID == NFY_TASKIN || wID == NFY_TASKOUT) && (notifys[i].wFlags & NF_TASKSWITCH) != NF_TASKSWITCH)\n        {\n            continue;\n        }\n        if ((wID == NFY_RIP) && (notifys[i].wFlags & NF_RIP) != NF_RIP)\n        {\n            continue;\n        }\n        __TRY\n        {\n            // TODO: call notifiers in own thread\n            skip = !IsTask16(GetCurrentTask());\n        }\n        __EXCEPT_ALL\n        {\n            skip = TRUE;  // task is likely dead\n        }\n        __ENDTRY\n        if (skip) continue;\n        sssp = getWOW32Reserved();\n        args[2] = wID;\n        args[1] = HIWORD(dwData);\n        args[0] = LOWORD(dwData);\n        WOWCallback16Ex(notifys[i].lpfnCallback, WCB16_PASCAL, 6, &args, &ret);\n        setWOW32Reserved(sssp);\n        if (LOWORD(ret))\n            break;\n    }\n    TRACE(\"ret (%04x,%08x) retval=%04x\\n\", wID, dwData, LOWORD(ret));\n    return LOWORD(ret);\n}\n"
  },
  {
    "path": "toolhelp/toolhelp.def",
    "content": "; File generated automatically from toolhelp\\toolhelp.dll16.spec; do not edit!\n\nLIBRARY toolhelp.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n  get_intcb\n  next_intcb\n  InterruptRegister16\n  InterruptUnRegister16\n  NotifyRegister16\n  NotifyUnRegister16\n  TOOLHELP_CallNotify\n"
  },
  {
    "path": "toolhelp/toolhelp.dll16.spec",
    "content": "50 pascal -ret16 GlobalHandleToSel(word) GlobalHandleToSel16\n51 pascal -ret16 GlobalFirst(ptr word) GlobalFirst16\n52 pascal -ret16 GlobalNext(ptr word) GlobalNext16\n53 pascal -ret16 GlobalInfo(ptr) GlobalInfo16\n54 pascal -ret16 GlobalEntryHandle(ptr word) GlobalEntryHandle16\n55 pascal -ret16 GlobalEntryModule(ptr word word) GlobalEntryModule16\n56 pascal -ret16 LocalInfo(ptr word) LocalInfo16\n57 pascal -ret16 LocalFirst(ptr word) LocalFirst16\n58 pascal -ret16 LocalNext(ptr) LocalNext16\n59 pascal -ret16 ModuleFirst(ptr) ModuleFirst16\n60 pascal -ret16 ModuleNext(ptr) ModuleNext16\n61 pascal -ret16 ModuleFindName(ptr ptr) ModuleFindName16\n62 pascal -ret16 ModuleFindHandle(ptr word) ModuleFindHandle16\n63 pascal -ret16 TaskFirst(ptr) TaskFirst16\n64 pascal -ret16 TaskNext(ptr) TaskNext16\n65 pascal -ret16 TaskFindHandle(ptr word) TaskFindHandle16\n66 pascal -ret16 StackTraceFirst(ptr word) StackTraceFirst16\n67 pascal -ret16 StackTraceCSIPFirst(ptr word word word word) StackTraceCSIPFirst16\n68 pascal -ret16 StackTraceNext(ptr) StackTraceNext16\n69 pascal -ret16 ClassFirst(ptr) ClassFirst16\n70 pascal -ret16 ClassNext(ptr) ClassNext16\n71 pascal -ret16 SystemHeapInfo(ptr) SystemHeapInfo16\n72 pascal -ret16 MemManInfo(ptr) MemManInfo16\n73 pascal -ret16 NotifyRegister(word segptr word) NotifyRegister16\n74 pascal -ret16 NotifyUnRegister(word) NotifyUnRegister16\n75 pascal -ret16 InterruptRegister(word segptr) InterruptRegister16\n76 pascal -ret16 InterruptUnRegister(word) InterruptUnRegister16\n77 pascal -ret16 TerminateApp(word word) TerminateApp16\n78 pascal   MemoryRead(word long ptr long) MemoryRead16\n79 pascal   MemoryWrite(word long ptr long) MemoryWrite16\n80 pascal -ret16 TimerCount(ptr) TimerCount16\n81 pascal -ret16 TaskSetCSIP(word word word) TaskSetCSIP16\n82 pascal TaskGetCSIP(word) TaskGetCSIP16\n83 pascal -ret16 TaskSwitch(word segptr) TaskSwitch16\n84 pascal -ret16 Local32Info(ptr word) Local32Info16\n85 pascal -ret16 Local32First(ptr word) Local32First16\n86 pascal -ret16 Local32Next(ptr) Local32Next16\n\n100 pascal -register next_intcb() next_intcb\n\n@ stdcall -arch=win32 get_intcb(ptr long long long long)\n@ stdcall -arch=win32 next_intcb(ptr)\n@ stdcall -arch=win32 InterruptRegister16(long long)\n@ stdcall -arch=win32 InterruptUnRegister16(long)\n@ stdcall -arch=win32 NotifyRegister16(long long long)\n@ stdcall -arch=win32 NotifyUnRegister16(long)\n@ stdcall -arch=win32 TOOLHELP_CallNotify(long long)\n"
  },
  {
    "path": "toolhelp/toolhelp.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_TOOLHELP_H\n#define __WINE_TOOLHELP_H\n\n#include <windef.h>\n#include <wine/windef16.h>\n\n#define MAX_DATA\t11\n#define MAX_MODULE_NAME\t9\n#define MAX_PATH16\t255\n#define MAX_CLASSNAME\t255\n\n#include <pshpack1.h>\n\n/* Global heap */\n\ntypedef struct\n{\n    DWORD dwSize;\n    WORD  wcItems;\n    WORD  wcItemsFree;\n    WORD  wcItemsLRU;\n} GLOBALINFO;\n\ntypedef struct\n{\n    DWORD     dwSize;\n    DWORD     dwAddress;\n    DWORD     dwBlockSize;\n    HGLOBAL16 hBlock;\n    WORD      wcLock;\n    WORD      wcPageLock;\n    WORD      wFlags;\n    BOOL16    wHeapPresent;\n    HGLOBAL16 hOwner;\n    WORD      wType;\n    WORD      wData;\n    DWORD     dwNext;\n    DWORD     dwNextAlt;\n} GLOBALENTRY;\n\n  /* GlobalFirst()/GlobalNext() flags */\n#define GLOBAL_ALL      0\n#define GLOBAL_LRU      1\n#define GLOBAL_FREE     2\n\n  /* wType values */\n#define GT_UNKNOWN      0\n#define GT_DGROUP       1\n#define GT_DATA         2\n#define GT_CODE         3\n#define GT_TASK         4\n#define GT_RESOURCE     5\n#define GT_MODULE       6\n#define GT_FREE         7\n#define GT_INTERNAL     8\n#define GT_SENTINEL     9\n#define GT_BURGERMASTER 10\n\n/* wData values */\n#define GD_USERDEFINED      0\n#define GD_CURSORCOMPONENT  1\n#define GD_BITMAP           2\n#define GD_ICONCOMPONENT    3\n#define GD_MENU             4\n#define GD_DIALOG           5\n#define GD_STRING           6\n#define GD_FONTDIR          7\n#define GD_FONT             8\n#define GD_ACCELERATORS     9\n#define GD_RCDATA           10\n#define GD_ERRTABLE         11\n#define GD_CURSOR           12\n#define GD_ICON             14\n#define GD_NAMETABLE        15\n#define GD_MAX_RESOURCE     15\n\n/* wFlags values */\n#define GF_PDB_OWNER        0x0100      /* Low byte is KERNEL flags */\n\nBOOL16 WINAPI GlobalInfo16( GLOBALINFO *pInfo );\nBOOL16 WINAPI GlobalFirst16( GLOBALENTRY *pGlobal, WORD wFlags );\nBOOL16 WINAPI GlobalNext16( GLOBALENTRY *pGlobal, WORD wFlags) ;\nBOOL16 WINAPI GlobalEntryHandle16( GLOBALENTRY *pGlobal, HGLOBAL16 hItem );\nBOOL16 WINAPI GlobalEntryModule16( GLOBALENTRY *pGlobal, HMODULE16 hModule,\n                                 WORD wSeg );\n\n/* Local heap */\n\ntypedef struct\n{\n    DWORD   dwSize;\n    WORD    wcItems;\n} LOCALINFO;\n\ntypedef struct\n{\n    DWORD   dwSize;\n    HLOCAL16  hHandle;\n    WORD    wAddress;\n    WORD    wSize;\n    WORD    wFlags;\n    WORD    wcLock;\n    WORD    wType;\n    WORD    hHeap;\n    WORD    wHeapType;\n    WORD    wNext;\n} LOCALENTRY;\n\n/* wHeapType values */\n#define NORMAL_HEAP     0\n#define USER_HEAP       1\n#define GDI_HEAP        2\n\n/* wFlags values */\n#define LF_FIXED        1\n#define LF_FREE         2\n#define LF_MOVEABLE     4\n\n/* wType values */\n#define LT_NORMAL                   0\n#define LT_FREE                     0xff\n#define LT_GDI_PEN                  1   /* LT_GDI_* is for GDI's heap */\n#define LT_GDI_BRUSH                2\n#define LT_GDI_FONT                 3\n#define LT_GDI_PALETTE              4\n#define LT_GDI_BITMAP               5\n#define LT_GDI_RGN                  6\n#define LT_GDI_DC                   7\n#define LT_GDI_DISABLED_DC          8\n#define LT_GDI_METADC               9\n#define LT_GDI_METAFILE             10\n#define LT_GDI_MAX                  LT_GDI_METAFILE\n#define LT_USER_CLASS               1   /* LT_USER_* is for USER's heap */\n#define LT_USER_WND                 2\n#define LT_USER_STRING              3\n#define LT_USER_MENU                4\n#define LT_USER_CLIP                5\n#define LT_USER_CBOX                6\n#define LT_USER_PALETTE             7\n#define LT_USER_ED                  8\n#define LT_USER_BWL                 9\n#define LT_USER_OWNERDRAW           10\n#define LT_USER_SPB                 11\n#define LT_USER_CHECKPOINT          12\n#define LT_USER_DCE                 13\n#define LT_USER_MWP                 14\n#define LT_USER_PROP                15\n#define LT_USER_LBIV                16\n#define LT_USER_MISC                17\n#define LT_USER_ATOMS               18\n#define LT_USER_LOCKINPUTSTATE      19\n#define LT_USER_HOOKLIST            20\n#define LT_USER_USERSEEUSERDOALLOC  21\n#define LT_USER_HOTKEYLIST          22\n#define LT_USER_POPUPMENU           23\n#define LT_USER_HANDLETABLE         32\n#define LT_USER_MAX                 LT_USER_HANDLETABLE\n\nBOOL16 WINAPI LocalInfo16( LOCALINFO *pLocalInfo, HGLOBAL16 handle );\nBOOL16 WINAPI LocalFirst16( LOCALENTRY *pLocalEntry, HGLOBAL16 handle );\nBOOL16 WINAPI LocalNext16( LOCALENTRY *pLocalEntry );\n\n/* Local 32-bit heap */\n\ntypedef struct\n{\n    DWORD dwSize;                /* 00 */\n    DWORD dwMemReserved;         /* 04 */\n    DWORD dwMemCommitted;        /* 08 */\n    DWORD dwTotalFree;           /* 0C */\n    DWORD dwLargestFreeBlock;    /* 10 */\n    DWORD dwcFreeHandles;        /* 14 */\n} LOCAL32INFO;\n\ntypedef struct\n{\n    DWORD dwSize;                /* 00 */\n    WORD hHandle;                /* 04 */\n    DWORD dwAddress;             /* 06 */\n    DWORD dwSizeBlock;           /* 0A */\n    WORD wFlags;                 /* 0E */\n    WORD wType;                  /* 10 */\n    WORD hHeap;                  /* 12 */\n    WORD wHeapType;              /* 14 */\n    DWORD dwNext;                /* 16 */\n    DWORD dwNextAlt;             /* 1A */\n} LOCAL32ENTRY;\n\n/* LOCAL32ENTRY.wHeapType flags same as LOCALENTRY.wHeapType flags */\n/* LOCAL32ENTRY.wFlags same as LOCALENTRY.wFlags */\n/* LOCAL32ENTRY.wType same as LOCALENTRY.wType */\n\nBOOL16 WINAPI Local32Info16( LOCAL32INFO *pLocal32Info, HGLOBAL16 handle );\nBOOL16 WINAPI Local32First16( LOCAL32ENTRY *pLocal32Entry, HGLOBAL16 handle );\nBOOL16 WINAPI Local32Next16( LOCAL32ENTRY *pLocal32Entry );\n\n\n/* modules */\n\ntypedef struct\n{\n    DWORD      dwSize;\n    char       szModule[MAX_MODULE_NAME + 1];\n    HMODULE16  hModule;\n    WORD       wcUsage;\n    char       szExePath[MAX_PATH16 + 1];\n    HANDLE16   wNext;\n} MODULEENTRY, *LPMODULEENTRY;\n\nBOOL16 WINAPI ModuleFirst16(MODULEENTRY *lpModule);\nBOOL16 WINAPI ModuleNext16(MODULEENTRY *lpModule);\nHMODULE16 WINAPI ModuleFindName16(MODULEENTRY *lpModule, LPCSTR lpstrName);\nHMODULE16 WINAPI ModuleFindHandle16(MODULEENTRY *lpModule, HMODULE16 hModule);\n\n/* tasks */\n\ntypedef struct\n{\n    DWORD        dwSize;\n    HTASK16      hTask;\n    HTASK16      hTaskParent;\n    HINSTANCE16  hInst;\n    HMODULE16    hModule;\n    WORD         wSS;\n    WORD         wSP;\n    WORD         wStackTop;\n    WORD         wStackMinimum;\n    WORD         wStackBottom;\n    WORD         wcEvents;\n    HGLOBAL16    hQueue;\n    char         szModule[MAX_MODULE_NAME + 1];\n    WORD         wPSPOffset;\n    HANDLE16     hNext;\n} TASKENTRY, *LPTASKENTRY;\n\nBOOL16 WINAPI TaskFirst16(LPTASKENTRY lpTask);\nBOOL16 WINAPI TaskNext16(LPTASKENTRY lpTask);\nBOOL16 WINAPI TaskFindHandle16(LPTASKENTRY lpTask, HTASK16 hTask);\nDWORD  WINAPI TaskSetCSIP(HTASK16 hTask, WORD wCS, WORD wIP);\nDWORD  WINAPI TaskGetCSIP(HTASK16 hTask);\nBOOL16 WINAPI TaskSwitch(HTASK16 hTask, DWORD dwNewCSIP);\n\n/* flag for TerminateApp16() */\n#define NO_UAE_BOX     1\n\n/* mem info */\n\ntypedef struct tagMEMMANINFO {\n\tDWORD dwSize;\n\tDWORD dwLargestFreeBlock;\n\tDWORD dwMaxPagesAvailable;\n\tDWORD dwMaxPagesLockable;\n\tDWORD dwTotalLinearSpace;\n\tDWORD dwTotalUnlockedPages;\n\tDWORD dwFreePages;\n\tDWORD dwTotalPages;\n\tDWORD dwFreeLinearSpace;\n\tDWORD dwSwapFilePages;\n\tWORD wPageSize;\n} MEMMANINFO;\ntypedef MEMMANINFO *LPMEMMANINFO;\n\ntypedef struct\n{\n    DWORD     dwSize;\n    WORD      wUserFreePercent;\n    WORD      wGDIFreePercent;\n    HGLOBAL16 hUserSegment;\n    HGLOBAL16 hGDISegment;\n} SYSHEAPINFO;\n\nBOOL16 WINAPI MemManInfo16(LPMEMMANINFO lpEnhMode);\nBOOL16 WINAPI SystemHeapInfo16( SYSHEAPINFO *pHeapInfo );\n\n/* timer info */\n\ntypedef struct tagTIMERINFO {\n\tDWORD dwSize;\n\tDWORD dwmsSinceStart;\n\tDWORD dwmsThisVM;\n} TIMERINFO;\n\nBOOL16 WINAPI TimerCount16( TIMERINFO *pTimerInfo );\n\n/* Window classes */\n\ntypedef struct\n{\n    DWORD     dwSize;\n    HMODULE16 hInst;              /* This is really an hModule */\n    char      szClassName[MAX_CLASSNAME + 1];\n    HANDLE16  wNext;\n} CLASSENTRY;\n\nBOOL16 WINAPI ClassFirst16( CLASSENTRY *pClassEntry );\nBOOL16 WINAPI ClassNext16( CLASSENTRY *pClassEntry );\n\n\n/* Memory read/write */\n\nDWORD WINAPI MemoryRead16( WORD sel, DWORD offset, void *buffer, DWORD count );\nDWORD WINAPI MemoryWrite16( WORD sel, DWORD offset, void *buffer, DWORD count );\n\n/* flags to NotifyRegister() */\n#define NF_NORMAL\t0\t/* everything except taskswitches, debugerrors,\n\t\t\t\t * debugstrings\n\t\t\t\t */\n#define NF_TASKSWITCH\t1\t/* get taskswitch information */\n#define NF_RIP\t\t2\t/* get debugerrors of system */\n\nBOOL16 WINAPI NotifyRegister16(HTASK16 htask,FARPROC16 lpfnCallback,WORD wFlags);\n\n#define NFY_UNKNOWN\t0\n#define NFY_LOADSEG\t1\n/* DATA is a pointer to following struct: */\ntypedef struct {\n\tDWORD\tdwSize;\n\tWORD\twSelector;\n\tWORD\twSegNum;\n\tWORD\twType;\t\t/* bit 0 set if this is a code segment */\n\tWORD\twcInstance;\t/* only valid for data segment */\n\tSEGPTR  lpstrModuleName;\n} NFYLOADSEG;\n/* called when freeing a segment. LOWORD(dwData) is the freed selector */\n#define NFY_FREESEG\t2\n\n/* called when loading/starting a DLL */\n#define NFY_STARTDLL\t3\ntypedef struct {\n    DWORD      dwSize;\n    HMODULE16  hModule;\n    WORD       wCS;\n    WORD       wIP;\n} NFYSTARTDLL;\n\n/* called when starting a task. dwData is CS:IP */\n#define NFY_STARTTASK\t4\n\n/* called when a task terminates. dwData is the return code */\n#define NFY_EXITTASK\t5\n\n/* called when module is removed. LOWORD(dwData) is the handle */\n#define NFY_DELMODULE\t6\n\n/* RIP? debugevent */\n#define NFY_RIP\t\t7\ntypedef struct {\n\tDWORD\tdwSize;\n\tWORD\twIP;\n\tWORD\twCS;\n\tWORD\twSS;\n\tWORD\twBP;\n\tWORD\twExitCode;\n} NFYRIP;\n\n/* called before (after?) switching to a task\n * no data, callback should call GetCurrentTask\n */\n#define\tNFY_TASKIN\t8\n\n/* called before(after?) switching from a task\n * no data, callback should call GetCurrentTask\n*/\n#define NFY_TASKOUT\t9\n\n/* returns ASCII input value, dwData not set */\n#define NFY_INCHAR\t10\n\n/* output debugstring (pointed to by dwData) */\n#define NFY_OUTSTRING\t11\n\n/* log errors */\n#define NFY_LOGERROR\t12\ntypedef struct {\n\tDWORD\tdwSize;\n\tUINT16\twErrCode;\n\tVOID   *lpInfo; /* depends on wErrCode */\n} NFYLOGERROR;\n\n/* called for parameter errors? */\n#define NFY_LOGPARAMERROR\t13\ntypedef struct {\n    DWORD       dwSize;\n    UINT16      wErrCode;\n    FARPROC16   lpfnErrorAddr;\n    void      **lpBadParam;\n} NFYLOGPARAMERROR;\n\ntypedef struct {\n    DWORD dwSize;\n    HTASK16 hTask;\n    WORD wSS;\n    WORD wBP;\n    WORD wCS;\n    WORD wIP;\n    HMODULE16 hModule;\n    WORD wSegment;\n    WORD wFlags;\n} STACKTRACEENTRY;\n\n#include <poppack.h>\n\nBOOL WINAPI TOOLHELP_CallNotify(WORD wID, DWORD dwData);\n\n#endif /* __WINE_TOOLHELP_H */\n"
  },
  {
    "path": "toolhelp/toolhelp.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>toolhelp</RootNamespace>\n    <ProjectGuid>{96925A3C-9DD9-418E-A772-A112FFE93DC2}</ProjectGuid>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)user.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\ntoolhelp.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\ntoolhelp.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)user.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"toolhelp.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"toolhelp.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"toolhelp.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" TOOLHELP &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" TOOLHELP &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"toolhelp.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "tools/package.ps1",
    "content": "Param([parameter(mandatory)] [string]$root, [parameter(mandatory)] [string]$src, [parameter(mandatory)] [string]$dst, [parameter(mandatory)] [string]$objcopy, [parameter(mandatory)] [string]$as, [string]$dll)\n$ErrorActionPreference = \"Stop\"\nif (!($dll))\n{\n  $dll = (Join-Path $dst \"dll/\")\n}\nfunction Make-Dll([string]$spec, [string]$name, [string]$dst)\n{\n  Write-Host $name\n  cmd.exe /c (Join-Path $src convspec.exe) $spec $name -ver | cmd.exe /c $as -o \"$dst.o\"\n  cmd.exe /c $objcopy -O binary -j .data \"$dst.o\" $dst\n  rm \"$dst.o\"\n}\nmkdir $dst -ErrorAction SilentlyContinue > $null\ncopy (Join-Path $src \"otvdm.exe\") $dst\ncopy (Join-Path $src \"otvdmw.exe\") $dst\ncopy (Join-Path $src \"winhlp32.exe\") $dst\ncopy (Join-Path $root \"otvdm.ini\") $dst\ncopy (Join-Path $root \"LICENSE\") $dst\ncopy (Join-Path $root \"README.md\") (Join-Path $dst \"README.txt\")\ncopy (Join-Path $root \"install.inf\") $dst\ncopy (Join-Path $root \"install.lnk\") $dst\ncopy (Join-Path $root \"installw.inf\") $dst\ncopy (Join-Path $root \"install (no console).lnk\") $dst\ncopy (Join-Path $root \"uninstall.reg\") $dst\nmkdir $dll -ErrorAction SilentlyContinue > $null\ncopy (Join-Path $src \"*16\") $dll\ncopy (Join-Path $src \"haxmvm.dll\") $dll -ErrorAction SilentlyContinue > $null\ncopy (Join-Path $src \"gvm.dll\") $dll -ErrorAction SilentlyContinue > $null\ncopy (Join-Path $src \"whpxvm.dll\") $dll -ErrorAction SilentlyContinue > $null\ncopy (Join-Path $src \"vm86.dll\") $dll\ncopy (Join-Path $src \"wow32.dll\") $dll\ncopy (Join-Path $src \"libwine.dll\") $dst\nmkdir (Join-Path $dst \"WINDOWS\") -ErrorAction SilentlyContinue > $null\nni (Join-Path $dst \"WINDOWS/WIN.INI\") -ErrorAction SilentlyContinue > $null\nni (Join-Path $dst \"WINDOWS/SYSTEM.INI\") -ErrorAction SilentlyContinue > $null\nmkdir (Join-Path $dst \"dummydll\") -ErrorAction SilentlyContinue > $null\nmkdir (Join-Path $dst \"dummydll/SYSTEM\") -ErrorAction SilentlyContinue > $null\nmkdir (Join-Path $dst \"dummydll/SYSTEM32\") -ErrorAction SilentlyContinue > $null\nMake-Dll (Join-Path $root \"ctl3d/ctl3d.dll16.spec\") \"CTL3D\" (Join-Path $dst \"dummydll/SYSTEM/CTL3D.DLL\")\nMake-Dll (Join-Path $root \"ctl3dv2/ctl3dv2.dll16.spec\") \"CTL3DV2\" (Join-Path $dst \"dummydll/SYSTEM/CTL3DV2.DLL\")\nMake-Dll (Join-Path $root \"avifile/avifile.dll16.spec\") \"AVIFILE\" (Join-Path $dst \"dummydll/SYSTEM/AVIFILE.DLL\")\nMake-Dll (Join-Path $root \"comm/comm.drv16.spec\") \"COMM\" (Join-Path $dst \"dummydll/SYSTEM/COMM.DRV\")\nMake-Dll (Join-Path $root \"commdlg/commdlg.dll16.spec\") \"COMMDLG\" (Join-Path $dst \"dummydll/SYSTEM/COMMDLG.DLL\")\nMake-Dll (Join-Path $root \"compobj/compobj.dll16.spec\") \"COMPOBJ\" (Join-Path $dst \"dummydll/SYSTEM/COMPOBJ.DLL\")\nMake-Dll (Join-Path $root \"ddeml/ddeml.dll16.spec\") \"DDEML\" (Join-Path $dst \"dummydll/SYSTEM/DDEML.DLL\")\nMake-Dll (Join-Path $root \"display/display.drv16.spec\") \"DISPLAY\" (Join-Path $dst \"dummydll/SYSTEM/DISPLAY.DRV\")\nMake-Dll (Join-Path $root \"gdi/gdi.exe16.spec\") \"GDI\" (Join-Path $dst \"dummydll/SYSTEM/GDI.EXE\")\nMake-Dll (Join-Path $root \"keyboard/keyboard.drv16.spec\") \"KEYBOARD\" (Join-Path $dst \"dummydll/SYSTEM/KEYBOARD.DRV\")\nMake-Dll (Join-Path $root \"krnl386/krnl386.exe16.spec\") \"KERNEL\" (Join-Path $dst \"dummydll/SYSTEM/KRNL386.EXE\")\nMake-Dll (Join-Path $root \"lzexpand/lzexpand.dll16.spec\") \"LZEXPAND\" (Join-Path $dst \"dummydll/SYSTEM/LZEXPAND.DLL\")\nMake-Dll (Join-Path $root \"mmsystem/mmsystem.dll16.spec\") \"MMSYSTEM\" (Join-Path $dst \"dummydll/SYSTEM/MMSYSTEM.DLL\")\nMake-Dll (Join-Path $root \"mouse/mouse.drv16.spec\") \"MOUSE\" (Join-Path $dst \"dummydll/SYSTEM/MOUSE.DRV\")\nMake-Dll (Join-Path $root \"msacm/msacm.dll16.spec\") \"MSACM\" (Join-Path $dst \"dummydll/SYSTEM/MSACM.DLL\")\nMake-Dll (Join-Path $root \"msvideo/msvideo.dll16.spec\") \"MSVIDEO\" (Join-Path $dst \"dummydll/SYSTEM/MSVIDEO.DLL\")\nMake-Dll (Join-Path $root \"netapi/netapi.dll16.spec\") \"NETAPI\" (Join-Path $dst \"dummydll/SYSTEM/NETAPI.DLL\")\nMake-Dll (Join-Path $root \"nddeapi/nddeapi.dll16.spec\") \"NDDEAPI\" (Join-Path $dst \"dummydll/SYSTEM/NDDEAPI.DLL\")\nMake-Dll (Join-Path $root \"ole2/ole2.dll16.spec\") \"OLE2\" (Join-Path $dst \"dummydll/SYSTEM/OLE2.DLL\")\nMake-Dll (Join-Path $root \"ole2conv/ole2conv.dll16.spec\") \"OLE2CONV\" (Join-Path $dst \"dummydll/SYSTEM/OLE2CONV.DLL\")\nMake-Dll (Join-Path $root \"ole2disp/ole2disp.dll16.spec\") \"OLE2DISP\" (Join-Path $dst \"dummydll/SYSTEM/OLE2DISP.DLL\")\nMake-Dll (Join-Path $root \"ole2nls/ole2nls.dll16.spec\") \"OLE2NLS\" (Join-Path $dst \"dummydll/SYSTEM/OLE2NLS.DLL\")\nMake-Dll (Join-Path $root \"ole2prox/ole2prox.dll16.spec\") \"OLE2PROX\" (Join-Path $dst \"dummydll/SYSTEM/OLE2PROX.DLL\")\nMake-Dll (Join-Path $root \"ole2thk/ole2thk.dll16.spec\") \"OLE2THK\" (Join-Path $dst \"dummydll/SYSTEM/OLE2THK.DLL\")\nMake-Dll (Join-Path $root \"olecli/olecli.dll16.spec\") \"OLECLI\" (Join-Path $dst \"dummydll/SYSTEM/OLECLI.DLL\")\nMake-Dll (Join-Path $root \"olesvr/olesvr.dll16.spec\") \"OLESVR\" (Join-Path $dst \"dummydll/SYSTEM/OLESVR.DLL\")\nMake-Dll (Join-Path $root \"shell/shell.dll16.spec\") \"SHELL\" (Join-Path $dst \"dummydll/SYSTEM/SHELL.DLL\")\nMake-Dll (Join-Path $root \"sound/sound.drv16.spec\") \"SOUND\" (Join-Path $dst \"dummydll/SYSTEM/SOUND.DRV\")\nMake-Dll (Join-Path $root \"storage/storage.dll16.spec\") \"STORAGE\" (Join-Path $dst \"dummydll/SYSTEM/STORAGE.DLL\")\nMake-Dll (Join-Path $root \"system/system.drv16.spec\") \"SYSTEM\" (Join-Path $dst \"dummydll/SYSTEM/SYSTEM.DRV\")\nMake-Dll (Join-Path $root \"toolhelp/toolhelp.dll16.spec\") \"TOOLHELP\" (Join-Path $dst \"dummydll/SYSTEM/TOOLHELP.DLL\")\nMake-Dll (Join-Path $root \"user/user.exe16.spec\") \"USER\" (Join-Path $dst \"dummydll/SYSTEM/USER.EXE\")\nMake-Dll (Join-Path $root \"ver/ver.dll16.spec\") \"VER\" (Join-Path $dst \"dummydll/SYSTEM/VER.DLL\")\nMake-Dll (Join-Path $root \"wifeman/wifeman.dll16.spec\") \"WIFEMAN\" (Join-Path $dst \"dummydll/SYSTEM/WIFEMAN.DLL\")\nMake-Dll (Join-Path $root \"win87em/win87em.dll16.spec\") \"WIN87EM\" (Join-Path $dst \"dummydll/SYSTEM/WIN87EM.DLL\")\nMake-Dll (Join-Path $root \"wing/wing.dll16.spec\") \"WING\" (Join-Path $dst \"dummydll/SYSTEM/WING.DLL\")\nMake-Dll (Join-Path $root \"winnls/winnls.dll16.spec\") \"WINNLS\" (Join-Path $dst \"dummydll/SYSTEM/WINNLS.DLL\")\nMake-Dll (Join-Path $root \"winoldap/winoldap.mod16.spec\") \"WINOLDAP\" (Join-Path $dst \"dummydll/SYSTEM/WINOLDAP.MOD\")\nMake-Dll (Join-Path $root \"winsock/winsock.dll16.spec\") \"WINSOCK\" (Join-Path $dst \"dummydll/SYSTEM/WINSOCK.DLL\")\nMake-Dll (Join-Path $root \"winspool/winspool.drv16.spec\") \"WINSPOOL\" (Join-Path $dst \"dummydll/SYSTEM/WINSPOOL.DRV\")\ncopy (Join-Path $root \"dummydll/dummydll.dll\") (Join-Path $dst \"dummydll/SYSTEM/KRNL286.EXE\") -ErrorAction SilentlyContinue\ncopy (Join-Path $root \"dummydll/dummydll.dll\") (Join-Path $dst \"dummydll/SYSTEM/VGA.DRV\") -ErrorAction SilentlyContinue\ncopy (Join-Path $root \"dummydll/vgaoem.fon\") (Join-Path $dst \"dummydll/SYSTEM/VGAOEM.FON\") -ErrorAction SilentlyContinue\ncopy (Join-Path $root \"dummydll/dummydll.dll\") (Join-Path $dst \"dummydll/SYSTEM32/WOWEXEC.EXE\") -ErrorAction SilentlyContinue\nCopy-Item -Filter * -Path (Join-Path $dst \"dummydll/*\") -Recurse -Destination (Join-Path $dst \"WINDOWS/\") -ErrorAction SilentlyContinue\nni (Join-Path $dst \"WINDOWS/SYSTEM/MIDIMAP.CFG\") -ErrorAction SilentlyContinue > $null\n"
  },
  {
    "path": "typelib/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(typelib SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/typelib.def typelib.dll16.obj)\ninclude_directories(../wine ${CMAKE_BINARY_DIR})\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(typelib.dll16 typelib)\ntarget_link_libraries(typelib libwine winecrt0 krnl386 ole2 ole2disp)\nset_target_properties(typelib PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "typelib/Makefile.in",
    "content": "MODULE    = typelib.dll16\nIMPORTS   = oleaut32 advapi32\nEXTRADLLFLAGS = -m16 -Wb,--main-module,oleaut32.dll\n\nC_SRCS = typelib.c\n"
  },
  {
    "path": "typelib/typelib.c",
    "content": "/*\n *\tTYPELIB 16bit part.\n *\n * Copyright 1997 Marcus Meissner\n * Copyright 1999 Rein Klazes\n * Copyright 2000 Francois Jacques\n * Copyright 2001 Huw D M Davies for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdlib.h>\n#include <string.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <ctype.h>\n\n#include \"winerror.h\"\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/winbase16.h\"\n#include \"winreg.h\"\n#include \"winuser.h\"\n#include \"objbase.h\"\n#include \"oleauto.h\"\n#include \"wine/debug.h\"\n#include \"../ole2/ifs.h\"\n#include \"../ole2disp/ole2disp.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(ole);\n\n/*************************************************************************\n * TYPELIB {TYPELIB}\n *\n * This dll is the 16 bit version of the Typelib API, part the original\n * implementation of Ole automation. It and its companion ole2disp.dll were\n * superseded by oleaut32.dll which provides 32 bit implementations of these\n * functions and greatly extends the OLE API.\n *\n * Winelib developers cannot use these functions directly, they are implemented\n * solely for backwards compatibility with existing legacy applications.\n *\n * SEE ALSO\n *  oleaut32(), ole2disp().\n */\n\n/****************************************************************************\n *\t\tQueryPathOfRegTypeLib\t[TYPELIB.14]\n *\n * Get the registry key of a registered type library.\n *\n * RETURNS\n *  Success: S_OK. path is updated with the key name\n *  Failure: E_FAIL, if guid was not found in the registry\n *\n * NOTES\n *  The key takes the form \"Classes\\Typelib\\<guid>\\<major>.<minor>\\<lcid>\\win16\\\"\n */\nHRESULT WINAPI\nQueryPathOfRegTypeLib16(\n\tREFGUID guid,\t/* [in] Guid to get the key name for */\n\tWORD wMaj,\t/* [in] Major version */\n\tWORD wMin,\t/* [in] Minor version */\n\tLCID lcid,\t/* [in] Locale Id */\n\t/* BSTR16 */SEGPTR *path)\t/* [out] Destination for the registry key name */\n{\n\tchar\txguid[80];\n\tchar\ttypelibkey[100],pathname[260];\n\tLONG\tplen;\n        char   *ret;\n\n\tTRACE(\"\\n\");\n    *path = 0;\n\tif (HIWORD(guid)) {\n            sprintf( typelibkey, \"SOFTWARE\\\\Classes\\\\Typelib\\\\{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\\\\%d.%d\\\\%x\\\\win16\",\n                     guid->Data1, guid->Data2, guid->Data3,\n                     guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3],\n                     guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7],\n                     wMaj,wMin,lcid);\n\t} else {\n\t\tsprintf(xguid,\"<guid 0x%08x>\",(DWORD)guid);\n\t\tFIXME(\"(%s,%d,%d,0x%04x,%p),can't handle non-string guids.\\n\",xguid,wMaj,wMin,lcid,path);\n\t\treturn E_FAIL16;\n\t}\n\tplen = sizeof(pathname);\n\tif (RegQueryValue16(HKEY_LOCAL_MACHINE,typelibkey,pathname,&plen) || !*pathname) {\n\t\t/* try again without lang specific id */\n\t\tif (SUBLANGID(lcid))\n\t\t\treturn QueryPathOfRegTypeLib16(guid,wMaj,wMin,PRIMARYLANGID(lcid),path);\n\n        plen = sizeof(pathname);\n        if (RegQueryValue16(HKEY_CURRENT_USER, typelibkey, pathname, &plen) || !*pathname) {\n            sprintf(typelibkey, \"Typelib\\\\{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\\\\%d.%d\\\\%x\\\\win16\",\n                guid->Data1, guid->Data2, guid->Data3,\n                guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3],\n                guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7],\n                wMaj, wMin, lcid);\n            plen = sizeof(pathname);\n            if (RegQueryValue16(HKEY_LOCAL_MACHINE, typelibkey, pathname, &plen)) {\n                if (lcid)\n                    return QueryPathOfRegTypeLib16(guid, wMaj, wMin, 0, path);\n                FIXME(\"key %s not found\\n\", typelibkey);\n                return E_FAIL16;\n            }\n        }\n\t}\n    *path = SysAllocString16(pathname);\n    if (!*path) return E_FAIL16;\n\treturn S_OK;\n}\n\n/* yeah */\nHRESULT WINAPI LoadTypeLib16Impl(const OLECHAR *szFile, ITypeLib * *pptLib);\n/******************************************************************************\n * LoadTypeLib [TYPELIB.3]\n *\n * Load and register a type library.\n *\n * RETURNS\n *  Success: S_OK. pptLib contains the type libraries ITypeLib interface.\n *  Failure: An HRESULT error code.\n *\n * NOTES\n *  Both parameters are FAR pointers.\n */\nHRESULT WINAPI LoadTypeLib16(\n    LPSTR szFile, /* [in] Name of file to load from */\n    SEGPTR* pptLib) /* [out] Destination for loaded ITypeLib interface */\n{\n    LPWSTR w;\n    HRESULT result;\n    ITypeLib *ptLib = NULL;\n    TRACE(\"(%s,%p)\\n\",debugstr_a(szFile),pptLib);\n    w = strdupAtoW(szFile);\n    result = hresult32_16(LoadTypeLib16Impl(w, &ptLib));\n    HeapFree(GetProcessHeap(), 0, w);\n    *pptLib = iface32_16(&IID_ITypeLib, ptLib);\n    return result;\n}\n\n/***********************************************************************\n *              LHashValOfNameSys  (TYPELIB.4)\n */\nULONG WINAPI LHashValOfNameSys16( SYSKIND skind, LCID lcid, LPCSTR lpStr)\n{\n    return LHashValOfNameSysA( skind, lcid, lpStr );\n}\n\n/****************************************************************************\n *\tOaBuildVersion\t\t\t\t(TYPELIB.15)\n *\n * Get the Ole Automation build version.\n *\n * PARAMS\n *  None\n *\n * RETURNS\n *  The build version.\n *\n * NOTES\n *  Known typelib.dll versions:\n *| OLE Ver.  Comments                   Date    Build Ver.\n *| --------  -------------------------  ----    ---------\n *| OLE 2.01  Call not available         1993     N/A\n *| OLE 2.02                             1993-94  02 3002\n *| OLE 2.03                                      23 730\n *| OLE 2.03                                      03 3025\n *| OLE 2.03  W98 SE orig. file !!       1993-95  10 3024\n *| OLE 2.1   NT                         1993-95  ?? ???\n *| OLE 2.3.1 W95                                 23 700\n *| OLE2 4.0  NT4SP6                     1993-98  40 4277\n *| OLE 2.1   W2K                        2000     10 3029\n *| OLE 2.1   WXP                        2002     10 3029\n *| OLE 2.1   Vista                      2007     10 3029\n */\nDWORD WINAPI OaBuildVersion16(void)\n{\n    /* FIXME: I'd like to return the highest currently known version value\n     * in case the user didn't force a --winver, but I don't know how\n     * to retrieve the \"versionForced\" info from misc/version.c :(\n     * (this would be useful in other places, too) */\n    FIXME(\"If you get version error messages, please report them\\n\");\n    switch(GetVersion() & 0x8000ffff)  /* mask off build number */\n    {\n    case 0x80000a03:  /* WIN31 */\n\t\treturn MAKELONG(3027, 3); /* WfW 3.11 */\n    case 0x80000004:  /* WIN95 */\n\t\treturn MAKELONG(700, 23); /* Win95A */\n    case 0x80000a04:  /* WIN98 */\n\t\treturn MAKELONG(3024, 10); /* W98 SE */\n    case 0x00000004:  /* NT4 */\n\t\treturn MAKELONG(4277, 40); /* NT4 SP6 */\n    case 0x00000005:  /* W2K */\n\t\treturn MAKELONG(3029, 10); /* W2K SP4 */\n    case 0x00000105:  /* WXP */\n\t\treturn MAKELONG(3029, 10); /* WXP SP2 */\n    case 0x00000006:  /* Vista */\n    case 0x00000106:\n    case 0x00000206:  /* W10 */\n\t\treturn MAKELONG(3029, 10); /* Vista */\n    default:\n\tFIXME(\"Version value not known yet. Please investigate it!\\n\");\n\t\treturn MAKELONG(3027, 3); /* WfW 3.11 */\n    }\n}\nHRESULT WINAPI RegisterTypeLibForUser(ITypeLib * ptlib, OLECHAR * szFullPath, OLECHAR * szHelpDir);\nHRESULT WINAPI RegisterTypeLib16(SEGPTR /* ITypeLib* */ptlib, LPCOLESTR16 szFullPath, LPCOLESTR16 szHelpDir)\n{\n    LPOLESTR w1 = strdupAtoW(szFullPath);\n    LPOLESTR w2 = strdupAtoW(szHelpDir);\n    ITypeLib *lib32 = (ITypeLib*)iface16_32(&IID_ITypeLib, ptlib);\n    HRESULT result = RegisterTypeLibForUser(lib32, w1, w2);\n    HeapFree(GetProcessHeap(), 0, w1);\n    HeapFree(GetProcessHeap(), 0, w2);\n    return hresult32_16(result);\n}\n\nHRESULT WINAPI LoadRegTypeLib16(REFGUID guid, unsigned short wVerMajor, unsigned short wVerMinor, LCID lcid, SEGPTR /* ITypeLib* */ *lplptlib)\n{\n    ITypeLib *ptlib = NULL;\n    HRESULT result;\n    SEGPTR bstr16 = NULL;\n    if (SUCCEEDED(QueryPathOfRegTypeLib16(guid, wVerMajor, wVerMinor, lcid, &bstr16)))\n    {\n        result = LoadTypeLib16((LPSTR)MapSL(bstr16), lplptlib);\n        SysFreeString16(bstr16);\n        if (SUCCEEDED(result))\n            return result;\n    }\n    result = LoadRegTypeLib(guid, wVerMajor, wVerMinor, lcid, &ptlib);\n\n    *lplptlib = iface32_16(&IID_ITypeLib, ptlib);\n    return hresult32_16(result);\n}\n\nHRESULT WINAPI CreateTypeLib2Impl(SYSKIND syskind, LPCOLESTR szFile,\n        ICreateTypeLib2** ppctlib);\nHRESULT WINAPI CreateTypeLib16(\n    SYSKIND syskind, LPCOLESTR16 szFile, SEGPTR* ppctlib\n) {\n    ICreateTypeLib2 *lib2;\n    ICreateTypeLib *lib1;\n    LPCOLESTR wszFile = strdupAtoW(szFile);\n    HRESULT result;\n    result = CreateTypeLib2Impl(syskind, wszFile, &lib2);\n    if (FAILED(result))\n    {\n        return hresult32_16(result);\n    }\n    HeapFree(GetProcessHeap(), 0, wszFile);\n    result = lib2->lpVtbl->QueryInterface(lib2, &IID_ICreateTypeLib, &lib1);\n    if (FAILED(result))\n    {\n        return hresult32_16(result);\n    }\n    lib2->lpVtbl->Release(lib2);\n    *ppctlib = iface32_16(&IID_ICreateTypeLib, lib1);\n    return hresult32_16(result);\n}\n"
  },
  {
    "path": "typelib/typelib.def",
    "content": "; File generated automatically from typelib\\typelib.dll16.spec; do not edit!\n\nLIBRARY typelib.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "typelib/typelib.dll16.spec",
    "content": "2  pascal CreateTypeLib(word str ptr) CreateTypeLib16\n3  pascal LoadTypeLib(ptr ptr) LoadTypeLib16\n4  pascal LHashValOfNameSys(word long str) LHashValOfNameSys16\n5  variable _IID_ICreateTypeInfo(0x00020405 0x00000000 0x000000c0 0x46000000)\n6  variable _IID_ICreateTypeLib(0x00020406 0x00000000 0x000000c0 0x46000000)\n7  variable _IID_ITypeComp(0x00020403 0x00000000 0x000000c0 0x46000000)\n8  variable _IID_ITypeInfo(0x00020401 0x00000000 0x000000c0 0x46000000)\n9  variable _IID_ITypeLib(0x00020402 0x00000000 0x000000c0 0x46000000)\n10 pascal RegisterTypeLib(segptr str str) RegisterTypeLib16\n11 pascal LoadRegTypeLib(ptr word word long ptr) LoadRegTypeLib16\n14 pascal QueryPathOfRegTypeLib(ptr word word long ptr) QueryPathOfRegTypeLib16\n15 pascal OaBuildVersion() OaBuildVersion16\n"
  },
  {
    "path": "typelib/typelib.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n    <RootNamespace>typelib</RootNamespace>\n    <ProjectGuid>{1AAA3531-513D-4A96-9795-D48CF33BF516}</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <Import Project=\"..\\PropertySheet.props\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)ole2disp.lib;$(OutDir)ole2.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\noleaut32.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\ntypelib.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\ntypelib.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)ole2disp.lib;$(OutDir)ole2.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\noleaut32.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"typelib.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"typelib.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"typelib.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Platform)'=='Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" TYPELIB &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Platform)'=='Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"typelib.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "uninstall.reg",
    "content": "Windows Registry Editor Version 5.00\r\n\r\n[-HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NtVdm64\\OTVDM]\r\n\r\n[-HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows NT\\CurrentVersion\\NtVdm64\\OTVDM]\r\n\r\n[-HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NtVdm64\\0OTVDM]\r\n\r\n[-HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows NT\\CurrentVersion\\NtVdm64\\0OTVDM]\r\n"
  },
  {
    "path": "user/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c)\nadd_library(user SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/user.def user.exe16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp -D_WIN32_WINNT=0x0A00)\nspec_build(user.exe16 USER ARG --heap 65520)\ntarget_link_libraries(user libwine winecrt0 krnl386 Mpr.lib UxTheme.lib ole32.lib version.lib)\nset_target_properties(user PROPERTIES SUFFIX \".exe16\")\n"
  },
  {
    "path": "user/bidi.c",
    "content": "/*\n * Win16 BiDi functions\n * Copyright 2000 Erez Volk\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n * NOTE: Right now, most of these functions do nothing.\n */\n\n#include <stdarg.h>\n#include <string.h>\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n#include \"wine/winuser16.h\"\n#include \"winerror.h\"\n#include \"wine/debug.h\"\n#include \"user_private.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(user);\n\n/***********************************************************************\n *\t\tChangeDialogTemplate   (USER.905)\n * FIXME: The prototypes of this function have not been found yet.\n */\nLONG WINAPI ChangeDialogTemplate16(void) { FIXME(\"stub (no prototype)\\n\"); return 0; }\n\n\n/******************************************************************************\n *                    ChangeKeyboardCodePage [USER.924]\n * Change the keyboard layouts to a new pair.\n * If the language IDs are set to -1, the language is not to be changed.\n */\nDWORD WINAPI ChangeKeyboardCodePage16( UINT16 iLangLeft, UINT16 iLangRight )\n{\n    FIXME( \"( %hu, %hu ): stub\\n\", iLangLeft, iLangRight );\n    return 0;\n}\n\n\n/******************************************************************************\n *                    ChangeKeyboardLanguage [USER.912]\n * Change the keyboard layouts to a new pair.\n *\n * RETURNS\n *    The old keyboard layout pair.\n */\nDWORD WINAPI ChangeKeyboardLanguage16( UINT16 iLangLeft, UINT16 iLangRight )\n{\n    FIXME( \"( %hu, %hu ): stub\\n\", iLangLeft, iLangRight );\n    return 0;\n}\n\n\n/******************************************************************************\n *                    CreateDialogIndirectParamML [USER.916]\n */\nHWND16 WINAPI CreateDialogIndirectParamML16( HINSTANCE16 hinstWnd,\n                                             const void * lpvDlgTmp,\n                                             HWND16 hwndOwner,\n                                             DLGPROC16 dlgProc,\n                                             LPARAM lParamInit,\n                                             UINT16 iCodePage, UINT16 iLang,\n                                             LPCSTR lpDlgName,\n                                             HINSTANCE16 hinstLoad )\n{\n    FIXME( \"( %04hx, %p, %04hx, %p, %08lx, %hu, %hu, %p, %04hx ): stub\\n\",\n           hinstWnd, lpvDlgTmp, hwndOwner, dlgProc, lParamInit,\n           iCodePage, iLang, lpDlgName, hinstLoad );\n    return 0;\n}\n\n\n/******************************************************************************\n *                    DialogBoxIndirectParamML [USER.918]\n */\nHWND16 WINAPI DialogBoxIndirectParamML16( HINSTANCE16 hinstWnd,\n                                          HGLOBAL16 hglbDlgTemp,\n                                          HWND16 hwndOwner,\n                                          DLGPROC16 dlgprc,\n                                          LPARAM lParamInit,\n                                          UINT16 iCodePage, UINT16 iLang,\n                                          LPCSTR lpDlgName,\n                                          HINSTANCE16 hinstLoad )\n{\n    FIXME( \"( %04hx, %04hx, %04hx, %p, %08lx, %hu, %hu, %p, %04hx ): stub\\n\",\n           hinstWnd, hglbDlgTemp, hwndOwner, dlgprc, lParamInit,\n           iCodePage, iLang, lpDlgName, hinstLoad );\n    return 0;\n}\n\n\n\n/******************************************************************************\n *                    FindLanguageResource [USER.923]\n */\nHRSRC16 WINAPI FindLanguageResource16( HINSTANCE16 hinst, LPCSTR lpRes,\n                                       LPCSTR lpResType, UINT16 iLang )\n{\n    FIXME( \"( %04hx, %p, %p, %hu ): stub\\n\", hinst, lpRes, lpResType, iLang );\n    return 0;\n}\n\n\n/******************************************************************************\n *                    GetAppCodePage [USER.915]\n * Returns the code page and language of the window\n *\n * RETURNS\n *    The low word contains the code page, the high word contains the resource language.\n */\nDWORD WINAPI GetAppCodePage16( HWND16 hwnd )\n{\n    FIXME( \"( %04hx ): stub\\n\", hwnd );\n    return 0;\n}\n\n\n/******************************************************************************\n *                    GetBaseCodePage [USER.922]\n * Returns the base code page and resource language.\n * For example, Hebrew windows will return HebrewCodePage in the low word\n * and English in the high word.\n */\nDWORD WINAPI GetBaseCodePage16( void )\n{\n    FIXME( \": stub\\n\" );\n    return 0;\n}\n\n\n\n/******************************************************************************\n *                    GetCodePageSystemFont [USER.913]\n * Returns the stock font for the requested code page.\n */\nHFONT16 WINAPI GetCodePageSystemFont16( UINT16 iFont, UINT16 iCodePage )\n{\n    FIXME( \"( %hu, %hu ): stub\\n\", iFont, iCodePage );\n    return 1;\n}\n\n\n\n/******************************************************************************\n *                    GetLanguageName [USER.907]\n * Returns the name of one language in (possibly) a different language.\n * Currently only handles language 0 (english).\n *\n * RETURNS\n *    Success: The number of bytes copied to the buffer, not including the null.\n *    Failure: 0\n */\nUINT WINAPI GetLanguageName16( UINT16 iLang, UINT16 iName,\n                               LPSTR lpszName, UINT16 cbBuffer )\n{\n    if ( (iLang == 0) && (iName == 0) ) {\n        if ( !lpszName || cbBuffer < 8 ) {\n            SetLastError( ERROR_INVALID_PARAMETER );\n            return 0;\n        }\n        strcpy( lpszName, \"English\" );\n        return 7;\n    }\n\n    FIXME( \"( %hu, %hu, %p, %hu ): No BiDi16\\n\", iLang, iName, lpszName, cbBuffer );\n    return 0;\n}\n\n\n/******************************************************************************\n *                    GetNumLanguages [USER.906]\n * Returns the number of languages in the system.\n */\nUINT WINAPI GetNumLanguages16( void )\n{\n    FIXME( \": No Bidi16\\n\" );\n    return 1;\n}\n\n\n\n/******************************************************************************\n *                    GetProcessDefaultLayout [USER.1001]\n *\n * Gets the default layout for parentless windows.\n * Right now, just returns 0 (left-to-right).\n *\n * RETURNS\n *    Success: Nonzero\n *    Failure: Zero\n */\nBOOL16 WINAPI GetProcessDefaultLayout16( DWORD *pdwDefaultLayout )\n{\n    FIXME( \"( %p ): no BiDi16\\n\", pdwDefaultLayout );\n    return GetProcessDefaultLayout( pdwDefaultLayout );\n}\n\n\n/******************************************************************************\n *                   LoadLanguageString [USER.919]\n * Loads a string for a specific language.\n *\n * RETURNS\n *    SUCCESS: The length of the string loaded.\n *    FAILURE: Zero.\n */\nUINT16 WINAPI LoadLanguageString16( HINSTANCE16 hinst, UINT16 id, UINT16 iLang,\n                                    LPSTR lpszText, INT16 nBytes )\n{\n    FIXME( \"( %04hx, %hu, %hu, %p, %hd ): stub\\n\", hinst, id, iLang, lpszText, nBytes );\n    return 0;\n}\n\n\n\n/******************************************************************************\n *                   LoadSystemLanguageString [USER.902]\n * Loads a string which is in one of the system language modules.\n *\n * RETURNS\n *    Success: The length of the string loaded\n *    Failure: Zero\n */\nUINT WINAPI LoadSystemLanguageString16( HINSTANCE16 hinstCaller, UINT16 id,\n                                        LPSTR lpszText, INT16 nBytes, UINT16 iLang )\n{\n    FIXME( \"( %04hx, %hu, %p, %hd, %hu ): stub\\n\", hinstCaller, id, lpszText, nBytes, iLang );\n    return 0;\n}\n\nLONG WINAPI FindResourceEx16()\n{\n    FIXME(\"stub(np)\\n\");\n    return 0;\n}\n\nLONG WINAPI GetClipboardCodePage16(WORD a1, WORD a2, WORD a3)\n{\n    FIXME(\"stub(%04x,%04x,%04x)\\n\", a1, a2, a3);\n    return 0;\n}\n\nLONG WINAPI ResetDialogTemplate16()\n{\n    FIXME(\"stub(np)\\n\");\n    return 0;\n}\n\nLONG WINAPI GetLanguageResId16()\n{\n    FIXME(\"stub(np)\\n\");\n    return 0;\n}\n\nLONG WINAPI CreateDialogParamML16()\n{\n    FIXME(\"stub(np)\\n\");\n    return 0;\n}\n\n\n\n/***********************************************************************\n *           MessageBoxEx [USER.930]\n * The multilingual version of MessageBox.\n */\nINT16 WINAPI MessageBoxEx16( HWND16 hwndParent, LPCSTR lpszText,\n                             LPCSTR lpszTitle, UINT16 fuStyle, UINT16 iLang )\n{\n    return MessageBoxExA(WIN_Handle32(hwndParent), lpszText, lpszTitle, fuStyle, iLang);\n}\n\n\n/***********************************************************************\n *           QueryCodePage   [USER.914]\n * Query code page specific data.\n */\nLRESULT WINAPI QueryCodePage16( UINT16 idxLang, UINT16 msg,\n                                WPARAM16 wParam, LPARAM lParam )\n{\n    FIXME( \"( %hu, %hu, %04hx, %08lx ): stub\\n\", idxLang, msg, wParam, lParam );\n    return 1;\n}\n\n/***********************************************************************\n *           SetAppCodePage   [USER.920]\n * Set the code page and language of the window to new values.\n *\n * RETURNS\n *    The low word contains the old code page, the high word contains\n *       the old resource language.\n */\nDWORD WINAPI SetAppCodePage16( HWND16 hwnd, UINT16 iCodePage, UINT16 iLang,\n                               UINT16 fRedraw )\n{\n    FIXME( \"( %04hx, %hu, %hu, %hu ): stub\\n\", hwnd, iCodePage, iLang, fRedraw );\n    return 0;\n}\n\n/***********************************************************************\n *           SetDlgItemTextEx   [USER.911]\n * Sets the title or text of a control in a dialog box.\n * Currently only works for language 0 (english)\n */\nvoid WINAPI SetDlgItemTextEx16( HWND16 hwnd, INT16 id,\n                                LPCSTR lpszText, UINT16 iLang )\n{\n    FIXME( \"( %04hx, %hd, %p, %hu ): stub\\n\", hwnd, id, lpszText, iLang );\n}\n\n/******************************************************************************\n *                    SetProcessDefaultLayout [USER.1000]\n *\n * Sets the default layout for parentless windows.\n * Right now, only accepts 0 (left-to-right).\n *\n * RETURNS\n *    Success: Nonzero\n *    Failure: Zero\n */\nBOOL16 WINAPI SetProcessDefaultLayout16( DWORD dwDefaultLayout )\n{\n    FIXME( \"( %08x ): No BiDi16\\n\", dwDefaultLayout );\n    return SetProcessDefaultLayout( dwDefaultLayout );\n}\n\n/******************************************************************************\n *                    SetWindowTextEx [USER.909]\n * Sets the given window's title to the specified text in the specified language.\n */\nvoid WINAPI SetWindowTextEx16( HWND16 hwnd, LPCSTR lpsz, UINT16 iLang )\n{\n    FIXME( \"( %04hx, %p, %hu ): stub\\n\", hwnd, lpsz, iLang );\n    SetWindowTextA(WIN_Handle32(hwnd), lpsz);\n}\n"
  },
  {
    "path": "user/comm.c",
    "content": "/*\n * DEC 93 Erik Bos <erik@xs4all.nl>\n *\n * Copyright 1996 Marcus Meissner\n *\n * Copyright 2001 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n * History:\n *\n * Mar 31, 1999. Ove Kåven <ovek@arcticnet.no>\n * - Implemented buffers and EnableCommNotification.\n *\n * Apr 3, 1999.  Lawson Whitney <lawson_whitney@juno.com>\n * - Fixed the modem control part of EscapeCommFunction16.\n *\n * Mar 3, 1999. Ove Kåven <ovek@arcticnet.no>\n * - Use port indices instead of unixfds for win16\n * - Moved things around (separated win16 and win32 routines)\n * - Added some hints on how to implement buffers and EnableCommNotification.\n *\n * May 26, 1997.  Fixes and comments by Rick Richardson <rick@dgii.com> [RER]\n * - ptr->fd wasn't getting cleared on close.\n * - GetCommEventMask() and GetCommError() didn't do much of anything.\n *   IMHO, they are still wrong, but they at least implement the RXCHAR\n *   event and return I/O queue sizes, which makes the app I'm interested\n *   in (analog devices EZKIT DSP development system) work.\n *\n * August 12, 1997.  Take a bash at SetCommEventMask - Lawson Whitney\n *                                     <lawson_whitney@juno.com>\n * July 6, 1998. Fixes and comments by Valentijn Sessink\n *                                     <vsessink@ic.uva.nl> [V]\n * Oktober 98, Rein Klazes [RHK]\n * A program that wants to monitor the modem status line (RLSD/DCD) may\n * poll the modem status register in the commMask structure. I update the bit\n * in GetCommError, waiting for an implementation of communication events.\n *\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdlib.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <string.h>\n#include <errno.h>\n#include <ctype.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/winuser16.h\"\n#include \"user_private.h\"\n\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(comm);\n\n/* window's semi documented modem status register */\n#define COMM_MSR_OFFSET  35\n#define MSR_CTS  0x10\n#define MSR_DSR  0x20\n#define MSR_RI   0x40\n#define MSR_RLSD 0x80\n#define MSR_MASK (MSR_CTS|MSR_DSR|MSR_RI|MSR_RLSD)\n\n#define FLAG_LPT 0x80\n\n#define MAX_PORTS   9\n\nstruct DosDeviceStruct {\n    HANDLE handle;\n    BOOL unget;\n    int ungetchar;\n    int evtchar;\n    /* events */\n    int commerror, eventmask;\n    /* buffers */\n    char *outbuf;\n    unsigned obuf_size,obuf_head,obuf_tail;\n    /* notifications */\n    HWND wnd;\n    int n_read, n_write;\n    /* save terminal states */\n    DCB16 dcb;\n    /* pointer to unknown(==undocumented) comm structure */\n    SEGPTR seg_unknown;\n    BYTE unknown[40];\n    HANDLE eventth;\n    HANDLE writeth;\n    HANDLE writeev;\n    CRITICAL_SECTION writelock;\n    BOOL exit;\n};\n\nstatic struct DosDeviceStruct COM[MAX_PORTS];\nstatic struct DosDeviceStruct LPT[MAX_PORTS];\n\nstatic struct DosDeviceStruct *GetDeviceStruct(int index)\n{\n\tif ((index&0x7F)<=MAX_PORTS) {\n            if (!(index&FLAG_LPT)) {\n\t\tif (COM[index].handle)\n\t\t    return &COM[index];\n\t    } else {\n\t\tindex &= 0x7f;\n\t\tif (LPT[index].handle)\n\t\t    return &LPT[index];\n\t    }\n\t}\n\n\treturn NULL;\n}\n\nstatic int WinError(void)\n{\n        TRACE(\"errno = %d\\n\", errno);\n\tswitch (errno) {\n\t\tdefault:\n\t\t\treturn CE_IOE;\n\t\t}\n}\n\nstatic DWORD WINAPI eventth(LPVOID cid)\n{\n\tstruct DosDeviceStruct *ptr = GetDeviceStruct(cid);\n\tDWORD evtmask = EV_BREAK | EV_CTS | EV_DSR | EV_ERR | EV_PERR | EV_RING | EV_RLSD | EV_RXCHAR | EV_RXFLAG | EV_TXEMPTY;\n\tDWORD temperror, mstat = 0;\n\tCOMSTAT stat;\n\tDWORD count = -1;\n\tOVERLAPPED ov;\n\tint ret = 0;\n\n\tZeroMemory(&ov, sizeof(ov));\n\tov.hEvent = CreateEventW(NULL, 0, 0, NULL);\n\tif(ov.hEvent == INVALID_HANDLE_VALUE)\n\t\treturn -1;\n\t\n\tClearCommError(ptr->handle, &temperror, &stat);\n\tSetCommMask(ptr->handle, evtmask);\n\n\twhile (ptr->handle)\n\t{\n\t\tDWORD ret;\n\t\tif (!WaitCommEvent(ptr->handle, &evtmask, &ov))\n\t\t{\n\t\t\tDWORD ret = 0, error = GetLastError();\n\t\t\tif(error == ERROR_IO_PENDING)\n\t\t\t{\n\t\t\t\tif (!(ret = GetOverlappedResult(ptr->handle, &ov, &count, TRUE)))\n\t\t\t\t\terror = GetLastError();\n\t\t\t}\n\t\t\tif (!ret && (error == ERROR_OPERATION_ABORTED))\n\t\t\t\tbreak;\n\t\t}\n\t\tif (ptr->exit)\n\t\t\tbreak;\n\n\t\tif(GetCommModemStatus(ptr->handle, &mstat))\n\t\t\t*((WORD *)(ptr->unknown + COMM_MSR_OFFSET)) = mstat;\n\n\t\t*(WORD*)(ptr->unknown) |= evtmask;\n\t\tif ((evtmask & ptr->eventmask) && ptr->wnd)\n\t\t\tPostMessageA(ptr->wnd, WM_COMMNOTIFY, cid, CN_EVENT);\n\n\t\tif (!ClearCommError(ptr->handle, &temperror, &stat))\n\t\t{\n\t\t\tret = -1;\n\t\t\tbreak;\n\t\t}\n\t\t\n\t\t// send cn_receive unconditionally since win31 has a 100ms timeout after\n\t\t// which it sends the notification even if the count is less than cbWriteNotify\n\t\tif ((ptr->n_read != -1) && ptr->n_read && stat.cbInQue && ptr->wnd)\n\t\t\tPostMessageA(ptr->wnd, WM_COMMNOTIFY, cid, CN_RECEIVE);\n\t\t\t\n\t\tif ((ptr->n_write != -1) && (ptr->n_write > stat.cbOutQue) && ptr->wnd)\n\t\t\tPostMessageA(ptr->wnd, WM_COMMNOTIFY, cid, CN_TRANSMIT);\n\t}\n\tCloseHandle(ov.hEvent);\n\treturn ret;\n}\n\nstatic DWORD WINAPI writeth(LPVOID cid)\n{\n\tstruct DosDeviceStruct *ptr = GetDeviceStruct(cid);\n\tOVERLAPPED write_ov = {0};\n\twrite_ov.hEvent = CreateEventW(NULL, 0, TRUE, NULL);\n\tHANDLE handles[] = {ptr->writeev, write_ov.hEvent};\n\n\twhile (ptr->handle)\n\t{\n\t\tDWORD ret;\n\t\tret = WaitForSingleObjectEx(ptr->writeev, INFINITE, TRUE);\n\t\tif ((ret == WAIT_ABANDONED) || ptr->exit)\n\t\t\tbreak;\n\t\tif (ret == WAIT_OBJECT_0)\n\t\t{\n\t\t\tEnterCriticalSection(&ptr->writelock);\n\t\t\tint len, bleft = ((ptr->obuf_tail <= ptr->obuf_head) ? ptr->obuf_head : ptr->obuf_size) - ptr->obuf_tail;\n\t\t\twhile (bleft)\n\t\t\t{\n\t\t\t\tif (!WriteFile(ptr->handle, ptr->outbuf + ptr->obuf_tail, bleft, &len, &write_ov))\n\t\t\t\t{\n\t\t\t\t\tDWORD ret = 0, error = GetLastError();\n\t\t\t\t\tif(error == ERROR_IO_PENDING)\n\t\t\t\t\t{\n\t\t\t\t\t\tLeaveCriticalSection(&ptr->writelock);\n\t\t\t\t\t\twhile ((ret = WaitForMultipleObjects(2, handles, FALSE, INFINITE)) == WAIT_OBJECT_0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (ptr->exit)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tCancelIo(ptr->handle);\n\t\t\t\t\t\t\t\tCloseHandle(write_ov.hEvent);\n\t\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tEnterCriticalSection(&ptr->writelock);\n\t\t\t\t\t\tif (ret == (WAIT_OBJECT_0 + 1))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (!(ret = GetOverlappedResult(ptr->handle, &write_ov, &len, TRUE)))\n\t\t\t\t\t\t\t\terror = GetLastError();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (ret == -1)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\terror = GetLastError();\n\t\t\t\t\t\t\tret = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tret = error;\n\t\t\t\t\t}\n\t\t\t\t\tif (!ret)\n\t\t\t\t\t{\n\t\t\t\t\t\tERR(\"async write failed, error %d\\n\", error);\n\t\t\t\t\t\tptr->commerror = CE_RXOVER;\n\t\t\t\t\t\tCancelIo(ptr->handle);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tTRACE(\"async write completed %d bytes\\n\",len);\n\n\t\t\t\t/* update the buffer pointers */\n\t\t\t\tint prev = ((ptr->obuf_tail > ptr->obuf_head) ? ptr->obuf_size : 0) + ptr->obuf_head - ptr->obuf_tail;\n\t\t\t\tptr->obuf_tail += len;\n\t\t\t\tif (ptr->obuf_tail >= ptr->obuf_size)\n\t\t\t\t\tptr->obuf_tail = 0;\n\n\t\t\t\t/* write from output queue */\n\t\t\t\tbleft = ((ptr->obuf_tail <= ptr->obuf_head) ? ptr->obuf_head : ptr->obuf_size) - ptr->obuf_tail;\n\t\t\t}\n\t\t\tLeaveCriticalSection(&ptr->writelock);\n\t\t}\n\t}\n\tCloseHandle(write_ov.hEvent);\n\treturn 0;\n}\n\n/*****************************************************************************\n *\tCOMM16_DCBtoDCB16\t(Internal)\n */\nstatic INT16 COMM16_DCBtoDCB16(const DCB *lpdcb, LPDCB16 lpdcb16)\n{\n\tif(lpdcb->BaudRate<0x10000)\n\t\tlpdcb16->BaudRate = lpdcb->BaudRate;\n\telse if(lpdcb->BaudRate==115200)\n\t\t\tlpdcb16->BaudRate = 57601;\n\telse {\n\t\tWARN(\"Baud rate can't be converted\\n\");\n\t\tlpdcb16->BaudRate = 57601;\n\t}\n\tlpdcb16->ByteSize = lpdcb->ByteSize;\n\tlpdcb16->fParity = lpdcb->fParity;\n\tlpdcb16->Parity = lpdcb->Parity;\n\tlpdcb16->StopBits = lpdcb->StopBits;\n\n\tlpdcb16->RlsTimeout = 50;\n\tlpdcb16->CtsTimeout = 50;\n\tlpdcb16->DsrTimeout = 50;\n\tlpdcb16->fNull = 0;\n\tlpdcb16->fChEvt = 0;\n\tlpdcb16->fBinary = 1;\n\n\tlpdcb16->fDtrflow = (lpdcb->fDtrControl==DTR_CONTROL_HANDSHAKE);\n\tlpdcb16->fRtsflow = (lpdcb->fRtsControl==RTS_CONTROL_HANDSHAKE);\n\tlpdcb16->fOutxCtsFlow = lpdcb->fOutxCtsFlow;\n\tlpdcb16->fOutxDsrFlow = lpdcb->fOutxDsrFlow;\n\tlpdcb16->fDtrDisable = (lpdcb->fDtrControl==DTR_CONTROL_DISABLE);\n\tlpdcb16->fRtsDisable = (lpdcb->fDtrControl==RTS_CONTROL_DISABLE);\n\n\tlpdcb16->fInX = lpdcb->fInX;\n\n\tlpdcb16->fOutX = lpdcb->fOutX;\n/*\n\tlpdcb16->XonChar =\n\tlpdcb16->XoffChar =\n */\n\tlpdcb16->XonLim = 10;\n\tlpdcb16->XoffLim = 10;\n\n\treturn 0;\n}\n\n\n/**************************************************************************\n *         BuildCommDCB\t\t(USER.213)\n *\n * According to the ECMA-234 (368.3) the function will return FALSE on\n * success, otherwise it will return -1.\n */\nINT16 WINAPI BuildCommDCB16(LPCSTR device, LPDCB16 lpdcb)\n{\n\t/* \"COM1:96,n,8,1\"\t*/\n\t/*  012345\t\t*/\n\tint port;\n\tDCB dcb;\n\n\tTRACE(\"(%s), ptr %p\\n\", device, lpdcb);\n\n\tif (strncasecmp(device,\"COM\",3))\n\t\treturn -1;\n\tport = device[3] - '0';\n\n\tif (port-- == 0) {\n\t\tERR(\"BUG ! COM0 can't exist!\\n\");\n\t\treturn -1;\n\t}\n\tdevice += 4;\n\tdo\n\t{\n\t\tif (!*device)\n\t\t\treturn -1;\n\t\tdevice++;\n\t}\n\twhile (!isalnum(*device));\n\n\tlpdcb->Id = port;\n\tdcb.DCBlength = sizeof(DCB);\n\n\tif (strchr(device,'=')) /* block new style */\n\t\treturn -1;\n\n\tif(!BuildCommDCBA(device,&dcb))\n\t\treturn -1;\n\n\treturn COMM16_DCBtoDCB16(&dcb, lpdcb);\n}\n\n/*****************************************************************************\n *\tOpenComm\t\t(USER.200)\n */\nINT16 WINAPI OpenComm16(LPCSTR device,UINT16 cbInQueue,UINT16 cbOutQueue)\n{\n\tint port;\n\tHANDLE handle;\n\n\tTRACE(\"%s, %d, %d\\n\", device, cbInQueue, cbOutQueue);\n\n\tif (strlen(device) < 4)\n\t   return IE_BADID;\n\n\tport = device[3] - '0';\n\n\tif (port-- == 0)\n\t\tERR(\"BUG ! COM0 or LPT0 don't exist !\\n\");\n\n\tif (!strncasecmp(device,\"COM\",3))\n\t{\n\t\tif (COM[port].handle)\n\t\t\treturn IE_OPEN;\n\n\t\thandle = CreateFileA(device, GENERIC_READ|GENERIC_WRITE,\n\t\t\t0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0 );\n\t\tif (handle == INVALID_HANDLE_VALUE) {\n\t\t\tERR(\"Open %s failed Err %d\\n\", device, GetLastError());\n\t\t\treturn IE_HARDWARE;\n\t\t} else {\n\t\t\tmemset(COM[port].unknown, 0, sizeof(COM[port].unknown));\n\t\t\tCOM[port].seg_unknown = 0;\n\t\t\tCOM[port].handle = handle;\n\t\t\tCOM[port].commerror = 0;\n\t\t\tCOM[port].eventmask = 0;\n\t\t\tCOM[port].evtchar = 0; /* FIXME: default? */\n\t\t\t/* save terminal state */\n\t\t\tGetCommState16(port,&COM[port].dcb);\n\t\t\t/* init priority characters */\n\t\t\tCOM[port].unget = FALSE;\n\t\t\t/* allocate buffers */\n\t\t\tCOM[port].obuf_size = cbOutQueue;\n\t\t\tCOM[port].obuf_head = COM[port].obuf_tail = 0;\n\n\t\t\tCOM[port].outbuf = HeapAlloc( GetProcessHeap(), 0, cbOutQueue);\n\t\t\tif(!COM[port].outbuf || !SetupComm(handle, cbInQueue, cbOutQueue))\n\t\t\t{\n\t\t\t\tCloseHandle(COM[port].handle);\n\t\t\t\treturn IE_MEMORY;\n\t\t\t}\n\n\t\t\tCOMMTIMEOUTS cto = { MAXDWORD, 0, 0, 0, 1000 };\n\t\t\tSetCommTimeouts(handle, &cto);\n\n\n\t\t\tCOM[port].exit = FALSE;\n\t\t\tCOM[port].writeev = CreateEventW(NULL, 0, 0, NULL);\n\t\t\tInitializeCriticalSection(&COM[port].writelock);\n\t\t\tCOM[port].eventth = CreateThread(NULL, 0, eventth, (LPVOID)port, 0, NULL);\n\t\t\tCOM[port].writeth = CreateThread(NULL, 0, writeth, (LPVOID)port, 0, NULL);\n\t\t\treturn port;\n\t\t}\n\t}\n\telse\n\tif (!strncasecmp(device,\"LPT\",3)) {\n\n\t\tif (LPT[port].handle)\n\t\t\treturn IE_OPEN;\n\n\t\thandle = CreateFileA(device, GENERIC_READ|GENERIC_WRITE,\n\t\t\t0, NULL, OPEN_EXISTING, 0, 0 );\n\t\tif (handle == INVALID_HANDLE_VALUE) {\n\t\t\treturn IE_HARDWARE;\n\t\t} else {\n\t\t\tLPT[port].handle = handle;\n\t\t\tLPT[port].commerror = 0;\n\t\t\tLPT[port].eventmask = 0;\n\t\t\treturn port|FLAG_LPT;\n\t\t}\n\t}\n\treturn IE_BADID;\n}\n\n/*****************************************************************************\n *\tCloseComm\t\t(USER.207)\n */\nINT16 WINAPI CloseComm16(INT16 cid)\n{\n\tstruct DosDeviceStruct *ptr;\n\n\tTRACE(\"cid=%d\\n\", cid);\n\tif ((ptr = GetDeviceStruct(cid)) == NULL) {\n\t\tFIXME(\"no cid=%d found!\\n\", cid);\n\t\treturn -1;\n\t}\n\tif (!(cid&FLAG_LPT)) {\n\t\tDWORD count;\n\t\t/* COM port */\n\t\tUnMapLS( COM[cid].seg_unknown );\n\t\t/* reset modem lines */\n\t\tSetCommState16(&COM[cid].dcb);\n\t\tHeapFree(GetProcessHeap(), 0, ptr->outbuf);\n\t\tptr->exit = TRUE;\n\t\tptr->obuf_tail = ptr->obuf_head;\n\t\tSetCommMask(ptr->handle, 0);\n\t\tPurgeComm(ptr->handle, PURGE_TXABORT);\n\t\tSetEvent(ptr->writeev);\n\t\tWaitForSingleObject(ptr->eventth, 1000);\n\t\tWaitForSingleObject(ptr->writeth, 1000);\n\t\tCloseHandle(ptr->writeev);\n\t\tDeleteCriticalSection(&ptr->writelock);\n\t}\n\n\tif (!CloseHandle(ptr->handle)) {\n\t\tptr->commerror = WinError();\n\t\t/* FIXME: should we clear ptr->handle here? */\n\t\treturn -1;\n\t} else {\n\t\tptr->commerror = 0;\n\t\tptr->handle = 0;\n\t\treturn 0;\n\t}\n}\n\n/*****************************************************************************\n *\tSetCommBreak\t\t(USER.210)\n */\nINT16 WINAPI SetCommBreak16(INT16 cid)\n{\n\tstruct DosDeviceStruct *ptr;\n\n\tTRACE(\"cid=%d\\n\", cid);\n\tif ((ptr = GetDeviceStruct(cid)) == NULL) {\n\t\tFIXME(\"no cid=%d found!\\n\", cid);\n\t\treturn -1;\n\t}\n\n\treturn !SetCommBreak(ptr->handle);\n}\n\n/*****************************************************************************\n *\tClearCommBreak\t(USER.211)\n */\nINT16 WINAPI ClearCommBreak16(INT16 cid)\n{\n\tstruct DosDeviceStruct *ptr;\n\n\tTRACE(\"cid=%d\\n\", cid);\n\tif (!(ptr = GetDeviceStruct(cid))) {\n\t\tFIXME(\"no cid=%d found!\\n\", cid);\n\t\treturn -1;\n\t}\n\n\treturn !ClearCommBreak(ptr->handle);\n}\n\n/*****************************************************************************\n *\tEscapeCommFunction\t(USER.214)\n */\nLONG WINAPI EscapeCommFunction16(UINT16 cid,UINT16 nFunction)\n{\n\tstruct  DosDeviceStruct *ptr;\n\n\tTRACE(\"cid=%d, function=%d\\n\", cid, nFunction);\n\n\tswitch(nFunction) {\n\tcase GETMAXCOM:\n\t        TRACE(\"GETMAXCOM\\n\");\n                return 4;  /* FIXME */\n\n\tcase GETMAXLPT:\n\t\tTRACE(\"GETMAXLPT\\n\");\n                return FLAG_LPT + 3;  /* FIXME */\n\n\tcase GETBASEIRQ:\n\t\tTRACE(\"GETBASEIRQ\\n\");\n\t\t/* FIXME: use tables */\n\t\t/* just fake something for now */\n\t\tif (cid & FLAG_LPT) {\n\t\t\t/* LPT1: irq 7, LPT2: irq 5 */\n\t\t\treturn (cid & 0x7f) ? 5 : 7;\n\t\t} else {\n\t\t\t/* COM1: irq 4, COM2: irq 3,\n\t\t\t   COM3: irq 4, COM4: irq 3 */\n\t\t\treturn 4 - (cid & 1);\n\t\t}\n\t}\n\n\tif ((ptr = GetDeviceStruct(cid)) == NULL) {\n\t\tFIXME(\"no cid=%d found!\\n\", cid);\n\t\treturn -1;\n\t}\n\n\tswitch (nFunction) {\n\tcase RESETDEV:\n\tcase CLRDTR:\n\tcase CLRRTS:\n\tcase SETDTR:\n\tcase SETRTS:\n\tcase SETXOFF:\n\tcase SETXON:\n\t\tif(EscapeCommFunction(ptr->handle,nFunction))\n\t\t\treturn 0;\n\t\telse {\n\t\t\tptr->commerror = WinError();\n\t\t\treturn -1;\n\t\t}\n\n\tcase CLRBREAK:\n\tcase SETBREAK:\n\tdefault:\n\t\tWARN(\"(cid=%d,nFunction=%d): Unknown function\\n\",\n\t\t\tcid, nFunction);\n\t}\n\treturn -1;\n}\n\n/*****************************************************************************\n *\tFlushComm\t(USER.215)\n */\nINT16 WINAPI FlushComm16(INT16 cid,INT16 fnQueue)\n{\n\tDWORD queue;\n\tstruct DosDeviceStruct *ptr;\n\n\tTRACE(\"cid=%d, queue=%d\\n\", cid, fnQueue);\n\tif ((ptr = GetDeviceStruct(cid)) == NULL) {\n\t\tFIXME(\"no cid=%d found!\\n\", cid);\n\t\treturn -1;\n\t}\n\tswitch (fnQueue) {\n\tcase 0:\n\t\tqueue = PURGE_TXABORT;\n\t\tptr->obuf_tail = ptr->obuf_head;\n\t\tbreak;\n\tcase 1:\n\t\tqueue = PURGE_RXABORT;\n\t\tbreak;\n\tdefault:\n\t\tWARN(\"(cid=%d,fnQueue=%d):Unknown queue\\n\",\n\t\t            cid, fnQueue);\n\t\treturn -1;\n\t}\n\n\tif (!PurgeComm(ptr->handle,queue)) {\n\t\tptr->commerror = WinError();\n\t\treturn -1;\n\t} else {\n\t\tptr->commerror = 0;\n\t\treturn 0;\n\t}\n}\n\n/********************************************************************\n *\tGetCommError\t(USER.203)\n */\nINT16 WINAPI GetCommError16(INT16 cid,LPCOMSTAT16 lpStat)\n{\n\tDWORD temperror;\n\tstruct DosDeviceStruct *ptr;\n\n\tif ((UINT16)cid >= 256)\n\t\treturn 0;\n\n\tif ((ptr = GetDeviceStruct(cid)) == NULL) {\n\t\t/* Some programs frequently call GetCommError(0, ) */\n\t\t/* FIXME(\"no handle for cid = %0x!\\n\",cid); */\n\t\treturn CE_MODE;\n\t}\n        if (cid&FLAG_LPT) {\n            WARN(\" cid %d not comm port\\n\",cid);\n            return CE_MODE;\n        }\n\tif (lpStat) {\n\t\tCOMSTAT stat;\n\t\tif (!ClearCommError(ptr->handle, &temperror, &stat))\n\t\t\treturn CE_MODE;\n\t\tlpStat->status = *((BYTE *)&stat);\n\t\tlpStat->cbInQue = stat.cbInQue + ptr->unget;\n\t\tlpStat->cbOutQue = stat.cbOutQue;\n\t\tTRACE(\"cid %d, error %d, stat %d in %d out %d\\n\",\n\t\t\t\tcid, ptr->commerror, lpStat->status, lpStat->cbInQue,\n\t\t\t\tlpStat->cbOutQue);\n\t}\n\telse {\n\t\tif (!ClearCommError(ptr->handle, &temperror, NULL))\n\t\t\treturn CE_MODE;\n\t\tTRACE(\"cid %d, error %d, lpStat NULL\\n\",\n\t\t\t\tcid, ptr->commerror);\n\t}\n\n\ttemperror |= ptr->commerror;\n\tptr->commerror = 0;\n\n\treturn(temperror);\n}\n\n/*****************************************************************************\n *\tSetCommEventMask\t(USER.208)\n */\nSEGPTR WINAPI SetCommEventMask16(INT16 cid,UINT16 fuEvtMask)\n{\n\tstruct DosDeviceStruct *ptr;\n\n\tTRACE(\"cid %d,mask %d\\n\",cid,fuEvtMask);\n\tif ((ptr = GetDeviceStruct(cid)) == NULL) {\n\t\tFIXME(\"no handle for cid = %0x!\\n\",cid);\n            return 0;\n\t}\n\n\tptr->eventmask = fuEvtMask;\n\n        if (cid&FLAG_LPT) {\n            WARN(\" cid %d not comm port\\n\",cid);\n            return 0;\n        }\n        if (!COM[cid].seg_unknown) COM[cid].seg_unknown = MapLS( COM[cid].unknown );\n        return COM[cid].seg_unknown;\n}\n\n/*****************************************************************************\n *\tGetCommEventMask\t(USER.209)\n */\nUINT16 WINAPI GetCommEventMask16(INT16 cid,UINT16 fnEvtClear)\n{\n\tstruct DosDeviceStruct *ptr;\n\tWORD events;\n\n\tTRACE(\"cid %d, mask %d\\n\", cid, fnEvtClear);\n\tif ((ptr = GetDeviceStruct(cid)) == NULL) {\n\t\tFIXME(\"no handle for cid = %0x!\\n\",cid);\n\t    return 0;\n\t}\n\n        if (cid&FLAG_LPT) {\n            WARN(\" cid %d not comm port\\n\",cid);\n            return 0;\n        }\n\n\tevents = *(WORD*)(COM[cid].unknown) & COM[cid].eventmask;\n\t*(WORD*)(COM[cid].unknown) &= ~fnEvtClear;\n\treturn events;\n}\n\n/*****************************************************************************\n *\tSetCommState\t(USER.201)\n */\nINT16 WINAPI SetCommState16(LPDCB16 lpdcb)\n{\n\tstruct DosDeviceStruct *ptr;\n\tDCB dcb;\n\n\tTRACE(\"cid %d, ptr %p\\n\", lpdcb->Id, lpdcb);\n\tif ((ptr = GetDeviceStruct(lpdcb->Id)) == NULL) {\n\t\tFIXME(\"no handle for cid = %0x!\\n\",lpdcb->Id);\n\t\treturn -1;\n\t}\n\n\tmemset(&dcb,0,sizeof(dcb));\n\tdcb.DCBlength = sizeof(dcb);\n\n\t/*\n\t * according to MSDN, we should first interpret lpdcb->BaudRate as follows:\n\t * 1. if the baud rate is a CBR constant, interpret it.\n\t * 2. if it is greater than 57600, the baud rate is 115200\n\t * 3. use the actual baudrate\n\t * steps 2 and 3 are equivalent to 16550 baudrate divisor = 115200/BaudRate\n\t */\n\tswitch(lpdcb->BaudRate)\n\t{\n\tcase CBR_110:    dcb.BaudRate = 110;    break;\n\tcase CBR_300:    dcb.BaudRate = 300;    break;\n\tcase CBR_600:    dcb.BaudRate = 600;    break;\n\tcase CBR_1200:   dcb.BaudRate = 1200;   break;\n\tcase CBR_2400:   dcb.BaudRate = 2400;   break;\n\tcase CBR_4800:   dcb.BaudRate = 4800;   break;\n\tcase CBR_9600:   dcb.BaudRate = 9600;   break;\n\tcase CBR_14400:  dcb.BaudRate = 14400;  break;\n\tcase CBR_19200:  dcb.BaudRate = 19200;  break;\n\tcase CBR_38400:  dcb.BaudRate = 38400;  break;\n\tcase CBR_56000:  dcb.BaudRate = 56000;  break;\n\tcase CBR_128000: dcb.BaudRate = 128000; break;\n\tcase CBR_256000: dcb.BaudRate = 256000; break;\n\tdefault:\n\t\tif(lpdcb->BaudRate>57600)\n\t\tdcb.BaudRate = 115200;\n        else\n\t\tdcb.BaudRate = lpdcb->BaudRate;\n\t}\n\n\tdcb.ByteSize=lpdcb->ByteSize;\n\tdcb.StopBits=lpdcb->StopBits;\n\tdcb.fBinary = 1;\n\n\tdcb.fParity=lpdcb->fParity;\n\tdcb.Parity=lpdcb->Parity;\n\n\tdcb.fOutxCtsFlow = lpdcb->fOutxCtsFlow;\n\tdcb.fOutxDsrFlow = lpdcb->fOutxDsrFlow;\n\n\tdcb.fDtrControl = DTR_CONTROL_ENABLE;\n\tif (lpdcb->fDtrflow)\n\t\tdcb.fDtrControl = DTR_CONTROL_HANDSHAKE;\n\n\tif (lpdcb->fDtrDisable)\n\t\tdcb.fDtrControl = DTR_CONTROL_DISABLE;\n\n\tdcb.fRtsControl = RTS_CONTROL_ENABLE;\n\tif (lpdcb->fRtsflow)\n\t\tdcb.fRtsControl = RTS_CONTROL_HANDSHAKE;\n\n\tif (lpdcb->fRtsDisable)\n\t\tdcb.fRtsControl = RTS_CONTROL_DISABLE;\n\n\tptr->evtchar = lpdcb->EvtChar;\n\n\tdcb.fInX = lpdcb->fInX;\n\tdcb.fOutX = lpdcb->fOutX;\n\n\tif (!SetCommState(ptr->handle,&dcb)) {\n\t\tptr->commerror = WinError();\n\t\treturn -1;\n\t} else {\n\t\tptr->commerror = 0;\n\t\treturn 0;\n\t}\n}\n\n/*****************************************************************************\n *\tGetCommState\t(USER.202)\n */\nINT16 WINAPI GetCommState16(INT16 cid, LPDCB16 lpdcb)\n{\n\tstruct DosDeviceStruct *ptr;\n\tDCB dcb;\n\n\tTRACE(\"cid %d, ptr %p\\n\", cid, lpdcb);\n\tif ((ptr = GetDeviceStruct(cid)) == NULL) {\n\t\tFIXME(\"no handle for cid = %0x!\\n\",cid);\n\t\treturn -1;\n\t}\n\tif (!GetCommState(ptr->handle,&dcb)) {\n\t\tptr->commerror = WinError();\n\t\treturn -1;\n\t}\n\n\tlpdcb->Id = cid;\n\n\tCOMM16_DCBtoDCB16(&dcb,lpdcb);\n\n\tlpdcb->EvtChar = ptr->evtchar;\n\n\treturn 0;\n}\n\n/*****************************************************************************\n *\tTransmitCommChar\t(USER.206)\n */\nINT16 WINAPI TransmitCommChar16(INT16 cid,CHAR chTransmit)\n{\n\tstruct DosDeviceStruct *ptr;\n\n\tTRACE(\"cid %d, data %d\\n\", cid, chTransmit);\n\tif ((ptr = GetDeviceStruct(cid)) == NULL) {\n\t\tFIXME(\"no handle for cid = %0x!\\n\",cid);\n\t\treturn -1;\n\t}\n\t\n\treturn TransmitCommChar(ptr->handle, chTransmit) ? 0 : -1;\n}\n\n/*****************************************************************************\n *\tUngetCommChar\t(USER.212)\n */\nINT16 WINAPI UngetCommChar16(INT16 cid,CHAR chUnget)\n{\n\tstruct DosDeviceStruct *ptr;\n\n\tTRACE(\"cid %d (char %d)\\n\", cid, chUnget);\n\tif ((ptr = GetDeviceStruct(cid)) == NULL) {\n\t\tFIXME(\"no handle for cid = %0x!\\n\",cid);\n\t\treturn -1;\n\t}\n\n\tif (ptr->unget) {\n\t  /* character already queued */\n\t  return -1;\n\t}\n\n\tptr->ungetchar = chUnget;\n\tptr->unget = TRUE;\n\tptr->commerror = 0;\n\treturn 0;\n}\n\n/*****************************************************************************\n *\tReadComm\t(USER.204)\n */\nINT16 WINAPI ReadComm16(INT16 cid,LPSTR lpvBuf,INT16 cbRead)\n{\n\tint length;\n\tstruct DosDeviceStruct *ptr;\n\tLPSTR orgBuf = lpvBuf;\n\tOVERLAPPED ov;\n\tDWORD count = -1;\n\n\tZeroMemory(&ov, sizeof(ov));\n\tov.hEvent = CreateEventW(NULL, 0, 0, NULL);\n\tif(ov.hEvent == INVALID_HANDLE_VALUE)\n\t\treturn -1;\n\t\n\tTRACE(\"cid %d, ptr %p, length %d\\n\", cid, lpvBuf, cbRead);\n\tif ((ptr = GetDeviceStruct(cid)) == NULL) {\n\t\tFIXME(\"no handle for cid = %0x!\\n\",cid);\n\t\treturn -1;\n\t}\n\tif (ptr->unget)\n\t{\n\t\t*orgBuf = ptr->ungetchar;\n\t\torgBuf++;\n\t\tcbRead--;\n\t}\n\n\tif (!ReadFile(ptr->handle, orgBuf, cbRead, &length, &ov))\n\t{\n\t\tif (GetLastError() == ERROR_IO_PENDING)\n\t\t\tGetOverlappedResult(ptr->handle, &ov, &length, TRUE);\n\t}\n\n\tCloseHandle(ov.hEvent);\n\t\n\tif (ptr->unget)\n\t{\n\t\tptr->unget = FALSE;\n\t\tlength++;\n\t}\n\n\tif (length)\n\t\tTRACE(\"%d bytes read\\n\", length);\n\n\treturn length;\n}\n\n/*****************************************************************************\n *\tWriteComm\t(USER.205)\n */\nINT16 WINAPI WriteComm16(INT16 cid, LPSTR lpvBuf, INT16 cbWrite)\n{\n\tint length;\n\tstruct DosDeviceStruct *ptr;\n\n\tTRACE(\"cid %d, ptr %p, length %d\\n\",\n\t\tcid, lpvBuf, cbWrite);\n\tif ((ptr = GetDeviceStruct(cid)) == NULL) {\n\t\tFIXME(\"no handle for cid = %0x!\\n\",cid);\n\t\treturn -1;\n\t}\n\n\tif (cid&FLAG_LPT)\n\t\tWriteFile(ptr->handle, lpvBuf, cbWrite, &length, NULL);\n\telse\n\t{\n\t\tint count;\n\t\tlength = 0;\n\t\tEnterCriticalSection(&ptr->writelock);\n\t\twhile (length < cbWrite) {\n\t\t\tcount = ((ptr->obuf_tail > ptr->obuf_head) ?\n\t\t\t\t\t\t(ptr->obuf_tail-1) : ptr->obuf_size) - ptr->obuf_head;\n\t\t\tif (!count) break;\n\t\t\tif ((cbWrite - length) < count)\n\t\t\t\tcount = cbWrite - length;\n\t\t\tmemcpy(ptr->outbuf + ptr->obuf_head, lpvBuf, count);\n\t\t\tptr->obuf_head += count;\n\t\t\tif (ptr->obuf_head >= ptr->obuf_size)\n\t\t\t\tptr->obuf_head = 0;\n\t\t\tlpvBuf += count;\n\t\t\tlength += count;\n\t\t}\n\t\tLeaveCriticalSection(&ptr->writelock);\n\t\tSetEvent(ptr->writeev);\n\t}\n\n\tif (length < cbWrite)\n\t{\n\t\tptr->commerror = CE_TXFULL;\n\t\treturn -length;\n\t}\n\treturn length;\n}\n\n/***********************************************************************\n *           EnableCommNotification   (USER.245)\n */\nBOOL16 WINAPI EnableCommNotification16( INT16 cid, HWND16 hwnd,\n                                      INT16 cbWriteNotify, INT16 cbOutQueue )\n{\n\tstruct DosDeviceStruct *ptr;\n\n\tTRACE(\"(%d, %x, %d, %d)\\n\", cid, hwnd, cbWriteNotify, cbOutQueue);\n\tif ((ptr = GetDeviceStruct(cid)) == NULL) {\n\t\tFIXME(\"no handle for cid = %0x!\\n\",cid);\n\t\treturn -1;\n\t}\n\tptr->wnd = WIN_Handle32( hwnd );\n\tptr->n_read = cbWriteNotify;\n\tptr->n_write = cbOutQueue;\n\treturn TRUE;\n}\n"
  },
  {
    "path": "user/dde.c",
    "content": "/*\n * Shell DDE Handling\n *\n * Copyright 2004 Robert Shearman\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n\n#define COBJMACROS\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winuser.h\"\n#include \"ddeml.h\"\n#include \"shellapi.h\"\n#include \"shobjidl.h\"\n#include \"shlwapi.h\"\n\n/* #include \"shell32_main.h\" */\n\n#include \"wine/debug.h\"\n/* winnt.h */\n#define __WINE_ALLOC_SIZE(x)\n#include \"wine/heap.h\"\n#include \"wine/unicode.h\"\n#define ARRAY_SIZE ARRAYSIZE\n#include \"shlobj.h\"\n#pragma comment(lib, \"shlwapi.lib\")\n\nstatic inline WCHAR *strndupW(const WCHAR *src, DWORD len)\n{\n    WCHAR *dest;\n    if (!src) return NULL;\n    dest = heap_alloc((len + 1) * sizeof(*dest));\n    if (dest)\n    {\n        memcpy(dest, src, len * sizeof(WCHAR));\n        dest[len] = '\\0';\n    }\n    return dest;\n}\n\nWINE_DEFAULT_DEBUG_CHANNEL(shell);\n\n/* String handles */\nstatic HSZ hszProgmanTopic;\nstatic HSZ hszProgmanService;\nstatic HSZ hszAsterisk;\nstatic HSZ hszShell;\nstatic HSZ hszAppProperties;\nstatic HSZ hszFolders;\nstatic HSZ hszGroups;\n/* DDE Instance ID */\nstatic DWORD dwDDEInst;\n\nstatic const char *debugstr_hsz( HSZ hsz )\n{\n    WCHAR buffer[256];\n    if (!DdeQueryStringW( dwDDEInst, hsz, buffer, ARRAY_SIZE(buffer), CP_WINUNICODE ))\n        return \"<unknown>\";\n    return debugstr_w( buffer );\n}\n\nstatic inline BOOL Dde_OnConnect(HSZ hszTopic, HSZ hszService)\n{\n    if ((hszTopic == hszProgmanTopic) && (hszService == hszProgmanService))\n        return TRUE;\n    if ((hszTopic == hszProgmanTopic) && (hszService == hszAppProperties))\n        return TRUE;\n    if ((hszTopic == hszShell) && (hszService == hszFolders))\n        return TRUE;\n    if ((hszTopic == hszShell) && (hszService == hszAppProperties))\n        return TRUE;\n    return FALSE;\n}\n\nstatic inline void Dde_OnConnectConfirm(HCONV hconv, HSZ hszTopic, HSZ hszService)\n{\n    TRACE( \"%p %s %s\\n\", hconv, debugstr_hsz(hszTopic), debugstr_hsz(hszService) );\n}\n\nstatic HSZPAIR wildarr[5];\nstatic HDDEDATA hddewild = 0;\n\nstatic inline HDDEDATA Dde_OnWildConnect(HSZ hszTopic, HSZ hszService)\n{\n    if (!hddewild)\n    {\n        wildarr[0].hszSvc = hszProgmanService;\n        wildarr[0].hszTopic = hszProgmanTopic;\n        wildarr[1].hszSvc = hszAppProperties;\n        wildarr[1].hszTopic = hszProgmanTopic;\n        wildarr[2].hszSvc = hszFolders;\n        wildarr[2].hszTopic = hszShell;\n        wildarr[3].hszSvc = hszAppProperties;\n        wildarr[3].hszTopic = hszShell;\n        wildarr[4].hszSvc = 0;\n        wildarr[4].hszTopic = 0;\n        hddewild = DdeCreateDataHandle(dwDDEInst, &wildarr, sizeof(wildarr), 0, 0, 0, 0);\n    }\n    if (hszTopic || hszService)\n        return (HDDEDATA)FALSE;\n\n    return hddewild;\n}\n\n/* Returned string must be freed by caller */\nstatic WCHAR *get_programs_path(const WCHAR *name)\n{\n    static const WCHAR slashW[] = {'\\\\',0};\n    WCHAR *path;\n    WCHAR programs[MAX_PATH];\n    WCHAR clnname[MAX_PATH];\n    int len;\n\n    wcsncpy(clnname, name, MAX_PATH);\n    PathCleanupSpec(NULL, clnname);\n    SHGetFolderPathW(NULL, CSIDL_PROGRAMS, NULL, 0, &programs);\n\n    len = lstrlenW(programs) + 1 + lstrlenW(name);\n    path = heap_alloc((len + 1) * sizeof(*path));\n    lstrcpyW(path, programs);\n    lstrcatW(path, slashW);\n    lstrcatW(path, clnname);\n\n    return path;\n}\n\n/* Returned string must be freed by caller */\nstatic WCHAR *get_common_programs_path(const WCHAR *name)\n{\n    static const WCHAR slashW[] = {'\\\\',0};\n    WCHAR *path;\n    WCHAR programs[MAX_PATH];\n    WCHAR clnname[MAX_PATH];\n    int len;\n\n    wcsncpy(clnname, name, MAX_PATH);\n    PathCleanupSpec(NULL, clnname);\n    SHGetFolderPathW(NULL, CSIDL_COMMON_PROGRAMS, NULL, 0, &programs);\n\n    len = lstrlenW(programs) + 1 + lstrlenW(name);\n    path = heap_alloc((len + 1) * sizeof(*path));\n    lstrcpyW(path, programs);\n    lstrcatW(path, slashW);\n    lstrcatW(path, clnname);\n\n    return path;\n}\n\n\nstatic inline HDDEDATA Dde_OnRequest(UINT uFmt, HCONV hconv, HSZ hszTopic,\n                                     HSZ hszItem)\n{\n    if ((hszTopic == hszProgmanTopic) && uFmt == CF_TEXT)\n    {\n        if ((hszItem == hszGroups || hszItem == hszProgmanService))\n        {\n            static const WCHAR asteriskW[] = {'*',0};\n            static const WCHAR newlineW[] = {'\\r','\\n',0};\n            static const WCHAR dotW[] = {'.',0};\n            static const WCHAR dotdotW[] = {'.','.',0};\n            static const WCHAR placeholdW[] = {'x',0};\n            WCHAR *programs;\n            WIN32_FIND_DATAW finddata;\n            HANDLE hfind;\n            int len, plen;\n            WCHAR *groups_data = heap_alloc(sizeof(WCHAR));\n            char *groups_dataA;\n            HDDEDATA ret;\n\n            groups_data[0] = 0;\n            len = 1;\n            programs = get_programs_path(placeholdW); // PathCleanupSpec will remove the * so use a placeholder\n            plen = wcslen(programs);\n            programs[plen - 1] = '*';\n            hfind = FindFirstFileW(programs, &finddata);\n            if (hfind != INVALID_HANDLE_VALUE)\n            {\n                do\n                {\n                    if ((finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&\n                            lstrcmpW(finddata.cFileName, dotW) && lstrcmpW(finddata.cFileName, dotdotW))\n                    {\n                        len += lstrlenW(finddata.cFileName) + 2;\n                        groups_data = heap_realloc(groups_data, len * sizeof(WCHAR));\n                        lstrcatW(groups_data, finddata.cFileName);\n                        lstrcatW(groups_data, newlineW);\n                    }\n                } while (FindNextFileW(hfind, &finddata));\n                FindClose(hfind);\n            }\n\n            programs = get_common_programs_path(placeholdW); // PathCleanupSpec will remove the * so use a placeholder\n            plen = wcslen(programs);\n            programs[plen - 1] = '*';\n            hfind = FindFirstFileW(programs, &finddata);\n            if (hfind != INVALID_HANDLE_VALUE)\n            {\n                do\n                {\n                    if ((finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&\n                            lstrcmpW(finddata.cFileName, dotW) && lstrcmpW(finddata.cFileName, dotdotW))\n                    {\n                        len += lstrlenW(finddata.cFileName) + 2;\n                        groups_data = heap_realloc(groups_data, len * sizeof(WCHAR));\n                        lstrcatW(groups_data, finddata.cFileName);\n                        lstrcatW(groups_data, newlineW);\n                    }\n                } while (FindNextFileW(hfind, &finddata));\n                FindClose(hfind);\n            }\n\n\n            len = WideCharToMultiByte(CP_ACP, 0, groups_data, -1, NULL, 0, NULL, NULL);\n            groups_dataA = heap_alloc(len * sizeof(WCHAR));\n            WideCharToMultiByte(CP_ACP, 0, groups_data, -1, groups_dataA, len, NULL, NULL);\n            ret = DdeCreateDataHandle(dwDDEInst, (BYTE *)groups_dataA, len, 0, hszItem, uFmt, 0);\n\n            heap_free(groups_dataA);\n            heap_free(groups_data);\n            heap_free(programs);\n            return ret;\n        }\n        else\n        {\n            static const WCHAR lnkW[] = {'\\\\','*','.','l','n','k',0};\n            char *group;\n            WCHAR *find, *groupW;\n            WCHAR path[MAX_PATH];\n            WIN32_FIND_DATAW finddata;\n            HANDLE hfind;\n            DWORD len = DdeQueryStringA(dwDDEInst, hszItem, NULL, 0, CP_WINANSI);\n            if (!len) return DDE_FNOTPROCESSED;\n            group = heap_alloc(len + 1);\n            DdeQueryStringA(dwDDEInst, hszItem, (BYTE *)group, len + 1, CP_WINANSI);\n            groupW = heap_alloc((len + 1) * sizeof(WCHAR));\n            MultiByteToWideChar(CP_ACP, 0, group, -1, groupW, (len + 1) * sizeof(WCHAR)); \n            find = get_programs_path(groupW);\n            if (!GetShortPathNameW(find, path, MAX_PATH))\n            {\n                find = get_common_programs_path(groupW);\n                if (!GetShortPathNameW(find, path, MAX_PATH))\n                {\n                    heap_free(find);\n                    heap_free(groupW);\n                    heap_free(group);\n                    return NULL;\n                }\n            }\n            heap_free(groupW);\n            find = heap_realloc(find, (lstrlenW(find) + lstrlenW(lnkW) + 1) * sizeof(WCHAR));\n            lstrcatW(find, lnkW);\n\n            hfind = FindFirstFileW(find, &finddata);\n            int efind = GetLastError();\n            heap_free(find);\n            if ((hfind != INVALID_HANDLE_VALUE) || (efind == ERROR_FILE_NOT_FOUND))\n            {\n                int count = 0;\n                int pos = 0;\n                int elen;\n                int pathlen = lstrlenW(path);\n                path[pathlen++] = '\\\\';\n                path[pathlen] = 0;\n                char *data, *ret, name[MAX_PATH];\n                IShellLinkW *link = 0;\n                IPersistFile *file;\n                HRESULT hres;\n                if (efind != ERROR_FILE_NOT_FOUND)\n                {\n                    hres = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,\n                            &IID_IShellLinkA, (void **)&link);\n                    if (!FAILED(hres))\n                        hres = IShellLinkA_QueryInterface(link, &IID_IPersistFile, (void **)&file);\n                    else if (FAILED(hres))\n                    {\n                        if (link) IShellLinkA_Release(link);\n                        FindClose(hfind);\n                        heap_free(group);\n                        return NULL; \n                    }\n                    data = heap_alloc(MAX_PATH * 4 + INFOTIPSIZE);\n                    do\n                    {\n                        int icon, hotkey, min;\n                        WCHAR lnkpath[MAX_PATH];\n                        char exepath[MAX_PATH], iconpath[MAX_PATH], workdir[MAX_PATH], args[INFOTIPSIZE];\n                        len = lstrlenW(finddata.cFileName);\n                        lstrcpyW(lnkpath, path);\n                        len = WideCharToMultiByte(CP_ACP, 0, finddata.cFileName, len - 4, name, MAX_PATH, NULL, NULL);\n                        name[len] = 0; \n                        lstrcatW(lnkpath, finddata.cFileName);\n                        hres = IPersistFile_Load(file, lnkpath, STGM_READ);\n                        if (FAILED(hres)) continue;\n                        hres = IShellLinkA_GetPath(link, exepath, MAX_PATH, NULL, SLGP_SHORTPATH);\n                        if (FAILED(hres)) continue;\n                        hres = IShellLinkA_GetArguments(link, args, INFOTIPSIZE);\n                        if (FAILED(hres)) continue;\n                        hres = IShellLinkA_GetWorkingDirectory(link, workdir, MAX_PATH);\n                        if (FAILED(hres)) continue;\n                        GetShortPathNameA(workdir, workdir, MAX_PATH);\n                        hres = IShellLinkA_GetIconLocation(link, iconpath, MAX_PATH, &icon);\n                        if (FAILED(hres)) continue;\n                        if (!iconpath[0])\n                        {\n                            FindExecutableA(exepath, NULL, iconpath);\n                            icon = 0;\n                        }\n                        else if (icon < 0)\n                            icon = 0;\n                        GetShortPathNameA(iconpath, iconpath, MAX_PATH);\n                        hres = IShellLinkA_GetHotkey(link, &hotkey);\n                        if (FAILED(hres)) continue;\n                        hres = IShellLinkA_GetShowCmd(link, &min);\n                        if (FAILED(hres)) continue;\n                        count++;\n                        elen = sprintf(data + pos, \"\\\"%s\\\",\\\"%s%s%s\\\",%s,%s,32,%d,%d,%d,%d\\r\\n\", name, exepath, strlen(args) ? \" \" : \"\",\n                                args, workdir, iconpath, count * 32, icon, hotkey, min == SW_SHOWMINIMIZED ? 1 : 0);\n                        pos += elen;\n                        data = heap_realloc(data, pos + MAX_PATH * 4 + INFOTIPSIZE);\n                    } while (FindNextFileW(hfind, &finddata));\n                    IPersistFile_Release(file);\n                    IShellLinkW_Release(link);\n                }\n                else\n                {\n                    data = heap_alloc(1);\n                    data[0] = 0;\n                }\n                len = WideCharToMultiByte(CP_ACP, 0, path, -1, name, MAX_PATH, NULL, NULL);\n                ret = heap_alloc(pos + MAX_PATH * 4 + INFOTIPSIZE);\n                elen = sprintf(ret, \"\\\"%s\\\",%s,%d,1,0\\r\\n\", group, name, count);\n                lstrcat(ret + elen, data);\n                HDDEDATA hret = DdeCreateDataHandle(dwDDEInst, (BYTE *)ret, lstrlen(ret), 0, hszItem, uFmt, 0);\n                FindClose(hfind);\n                heap_free(group);\n                heap_free(data);\n                heap_free(ret);\n                return hret;\n            }\n        }\n    }\n    FIXME( \"%u %p %s %s: stub\\n\", uFmt, hconv, debugstr_hsz(hszTopic), debugstr_hsz(hszItem) );\n    return NULL;\n}\n\n__declspec(dllimport) HICON NE_ExtractIcon(LPCSTR lpszExeFileName, HICON * RetPtr, INT nIconIndex,\n                UINT nIcons, UINT cxDesired, UINT cyDesired, UINT *pIconId, UINT flags);\n\nstatic void seticon(IShellLinkW *link, WCHAR *path, int iconidx)\n{\n    HICON icon = 0;\n    UINT id;\n    ICONINFO iinfo;\n    BITMAP mbmap, cbmap;\n    int fd, i, count;\n    int cx = GetSystemMetrics(SM_CXICON);\n    int cy = GetSystemMetrics(SM_CYICON);\n    char *mbits, *cbits;\n    WCHAR *fileext;\n    WCHAR icofile[MAX_PATH];\n    char pathascii[MAX_PATH];\n    BITMAPINFOHEADER bmapi = {0};\n    HANDLE hicofile;\n#include <pshpack1.h>\n    struct {\n        WORD zero;\n        WORD type;\n        WORD count;\n        BYTE width;\n        BYTE height;\n        BYTE colors;\n        BYTE zeroa;\n        WORD planes;\n        WORD bpp;\n        DWORD size;\n        DWORD off;\n    } header = {0, 1, 1, cx, cy, 0, 0, 0, 0}; \n#include <poppack.h>\n    WideCharToMultiByte(CP_ACP, 0, path, -1, pathascii, MAX_PATH, NULL, NULL);\n    NE_ExtractIcon(pathascii, &icon, iconidx, 1, cx, cy, &id, 0);\n    if (icon)\n    {\n        wcscpy(icofile, path);\n        fileext = wcschr(icofile, '.');\n        fileext[1] = 'i';\n        fileext[2] = 'c';\n        fileext[3] = 'o';\n\n        hicofile = CreateFileW(icofile, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);\n        if (hicofile != INVALID_HANDLE_VALUE)\n        {\n            GetIconInfo(icon, &iinfo);\n            GetObject(iinfo.hbmMask, sizeof(BITMAP), &mbmap);\n            if (iinfo.hbmColor)\n            {\n                GetObject(iinfo.hbmColor, sizeof(BITMAP), &cbmap);\n                cbits = (char *)HeapAlloc(GetProcessHeap(), 0, cy * cbmap.bmWidthBytes);\n                GetBitmapBits(iinfo.hbmColor, cy * cbmap.bmWidthBytes, cbits);\n                DeleteObject(iinfo.hbmColor);\n                bmapi.biBitCount = 32;\n            }\n            else\n            {\n                cbits = NULL;\n                bmapi.biBitCount = 1;\n                header.colors = 2;\n                cbmap.bmWidthBytes = 0;\n                cy *= 2;\n            }\n            mbits = (char *)HeapAlloc(GetProcessHeap(), 0, cy * mbmap.bmWidthBytes);\n            GetBitmapBits(iinfo.hbmMask, cy * mbmap.bmWidthBytes, mbits);\n            DeleteObject(iinfo.hbmMask);\n\n            bmapi.biSize = sizeof(bmapi);\n            bmapi.biWidth = cx;\n            bmapi.biHeight = (cbits ? cy * 2 : cy);\n            bmapi.biPlanes = 1;\n\n            header.size = cy * (mbmap.bmWidthBytes + cbmap.bmWidthBytes) + sizeof(bmapi) + (cbits ? 0 : 8);\n            header.off = sizeof(header);\n\n            WriteFile(hicofile, &header, sizeof(header), &count, NULL);\n            WriteFile(hicofile, &bmapi, sizeof(bmapi), &count, NULL);\n            if (cbits)\n            {\n                for(i = cy - 1; i >= 0; i--)\n                    WriteFile(hicofile, cbits + (i * cbmap.bmWidthBytes), cbmap.bmWidthBytes, &count, NULL);\n                HeapFree(GetProcessHeap(), 0, cbits);\n            }\n            else\n            {\n                COLORREF pal[] = {0, 0xffffff};\n                WriteFile(hicofile, &pal, sizeof(COLORREF) * 2, &count, NULL);\n            }\n            for(i = cy - 1; i >= 0; i--)\n                WriteFile(hicofile, mbits + (i * mbmap.bmWidthBytes), mbmap.bmWidthBytes, &count, NULL);\n            CloseHandle(hicofile);\n\n            HeapFree(GetProcessHeap(), 0, mbits);\n            path = icofile;\n            iconidx = 0;\n        }\n        else if (GetLastError() == ERROR_FILE_EXISTS)\n        {\n            path = icofile;\n            iconidx = 0;\n        }\n        DestroyIcon(icon);\n    }\n    IShellLinkW_SetIconLocation(link, path, iconidx);\n}\n\n__declspec(dllimport) LPCSTR RedirectSystemDir(LPCSTR path, LPSTR to, size_t max_len);\nstatic DWORD PROGMAN_OnExecute(WCHAR *command, int argc, WCHAR **argv)\n{\n    static const WCHAR create_groupW[] = {'C','r','e','a','t','e','G','r','o','u','p',0};\n    static const WCHAR delete_groupW[] = {'D','e','l','e','t','e','G','r','o','u','p',0};\n    static const WCHAR show_groupW[] = {'S','h','o','w','G','r','o','u','p',0};\n    static const WCHAR add_itemW[] = {'A','d','d','I','t','e','m',0};\n    static const WCHAR delete_itemW[] = {'D','e','l','e','t','e','I','t','e','m',0};\n    static const WCHAR replace_itemW[] = {'R','e','p','l','a','c','e','I','t','e','m',0};\n    static const WCHAR exit_progmanW[] = {'E','x','i','t','P','r','o','g','m','a','n',0};\n    static const WCHAR winhelpW[] = {'w','i','n','h','e','l','p','.','e','x','e',0};\n    static const WCHAR winhlp32W[] = {'w','i','n','h','l','p','3','2','.','e','x','e',0};\n\n    static const WCHAR dotexeW[] = {'.','e','x','e',0};\n    static const WCHAR dotlnkW[] = {'.','l','n','k',0};\n    static const WCHAR slashW[] = {'\\\\',0};\n\n    static WCHAR *last_group;\n\n    if (!strcmpiW(command, create_groupW))\n    {\n        WCHAR *path;\n\n        if (argc < 1) return DDE_FNOTPROCESSED;\n\n        path = get_programs_path(argv[0]);\n\n        CreateDirectoryW(path, NULL);\n        heap_free(last_group);\n        last_group = path;\n        ShellExecuteW(NULL, NULL, path, NULL, NULL, SW_SHOWNORMAL);\n    }\n    else if (!strcmpiW(command, delete_groupW))\n    {\n        WCHAR *path, *path2;\n        SHFILEOPSTRUCTW shfos = {0};\n        int ret;\n\n        if (argc < 1) return DDE_FNOTPROCESSED;\n\n        path = get_programs_path(argv[0]);\n\n        path2 = heap_alloc((strlenW(path) + 2) * sizeof(*path));\n        strcpyW(path2, path);\n        path2[strlenW(path) + 1] = 0;\n\n        shfos.wFunc = FO_DELETE;\n        shfos.pFrom = path2;\n        shfos.fFlags = FOF_NOCONFIRMATION;\n\n        ret = SHFileOperationW(&shfos);\n\n        heap_free(path2);\n        heap_free(path);\n\n        if (ret || shfos.fAnyOperationsAborted) return DDE_FNOTPROCESSED;\n    }\n    else if (!strcmpiW(command, show_groupW))\n    {\n        WCHAR *path;\n\n        /* Win32 requires the second parameter to be present but seems to\n         * ignore its actual value. */\n        if (argc < 2) return DDE_FNOTPROCESSED;\n\n        path = get_programs_path(argv[0]);\n\n        if (ShellExecuteW(NULL, NULL, path, NULL, NULL, SW_SHOWNORMAL) <= 32)\n            return DDE_FNOTPROCESSED;\n\n        heap_free(last_group);\n        last_group = path;\n    }\n    else if (!strcmpiW(command, add_itemW))\n    {\n        WCHAR *path, *name;\n        DWORD len;\n        IShellLinkW *link;\n        IPersistFile *file;\n        HRESULT hres;\n        int cmd_argc;\n        WCHAR **cmd_argv;\n        WCHAR *prg_name, *dirend;\n        WCHAR *dirpath = NULL;\n        WCHAR windirW[MAX_PATH];\n\n        if (argc < 1) return DDE_FNOTPROCESSED;\n\n        hres = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,\n                                &IID_IShellLinkW, (void **)&link);\n        if (FAILED(hres)) return DDE_FNOTPROCESSED;\n\n        /* windows 3.1 progman: command line */\n        /* explorer DDE: program path */\n        cmd_argv = CommandLineToArgvW(argv[0], &cmd_argc);\n        if (!cmd_argv || !cmd_argc)\n            return DDE_FNOTPROCESSED;\n        if ((cmd_argv[0][0] == 0) && (cmd_argc > 1))  // if the cmd isn't an exe, the first param is empty\n            prg_name = cmd_argv[1];\n        else\n            prg_name = cmd_argv[0];\n        len = SearchPathW(NULL, prg_name, dotexeW, 0, NULL, NULL);\n        if (len == 0)\n        {\n            if (argc >= 7)\n            {\n                dirpath = argv[6];\n                len = SearchPathW(dirpath, prg_name, dotexeW, 0, NULL, NULL);\n            }\n            if (!wcsicmp(prg_name, winhelpW))\n            {\n                prg_name = winhlp32W;\n                len = SearchPathW(NULL, prg_name, dotexeW, 0, NULL, NULL);\n            }\n            if (len == 0)\n            {\n                char windirA[MAX_PATH];\n                RedirectSystemDir(\"C:\\\\windows\", windirA, MAX_PATH);\n                int res = MultiByteToWideChar(CP_ACP, 0, windirA, -1, windirW, MAX_PATH);\n                if (res)\n                {\n                    dirpath = windirW;\n                    len = SearchPathW(windirW, prg_name, dotexeW, 0, NULL, NULL);\n                }\n                if (len == 0)\n                {\n                    LocalFree(cmd_argv);\n                    IShellLinkW_Release(link);\n                    return DDE_FNOTPROCESSED;\n                }\n            }\n        }\n        path = heap_alloc(len * sizeof(WCHAR));\n        if (dirpath)\n            SearchPathW(dirpath, prg_name, dotexeW, len, path, &dirend);\n        else\n            SearchPathW(NULL, prg_name, dotexeW, len, path, &dirend);\n        IShellLinkW_SetPath(link, path);\n        if (cmd_argc > 1)\n        {\n            WCHAR *args = strstrW(argv[0], \" \");/* FIXME? */\n            if (args)\n                IShellLinkW_SetArguments(link, args + 1);\n        }\n\n        if (argc >= 2) IShellLinkW_SetDescription(link, argv[1]);\n        if (argc >= 4)\n            seticon(link, *argv[2] ? argv[2] : path, atoiW(argv[3]));\n        else\n            seticon(link, path, 0);\n        if ((argc >= 7) && strlen(argv[6]))\n            IShellLinkW_SetWorkingDirectory(link, argv[6]);\n        else if (dirpath)\n            IShellLinkW_SetWorkingDirectory(link, dirpath);\n        else\n        {\n            *dirend = 0;\n            IShellLinkW_SetWorkingDirectory(link, path);\n        }\n        if (argc >= 8) IShellLinkW_SetHotkey(link, atoiW(argv[7]));\n        if (argc >= 9)\n        {\n            if (atoiW(argv[8]) == 0) IShellLinkW_SetShowCmd(link, SW_SHOWMINNOACTIVE);\n            else if (atoiW(argv[8]) == 1) IShellLinkW_SetShowCmd(link, SW_SHOWNORMAL);\n        }\n        heap_free(path);\n\n        hres = IShellLinkW_QueryInterface(link, &IID_IPersistFile, (void **)&file);\n        if (FAILED(hres))\n        {\n            LocalFree(cmd_argv);\n            IShellLinkW_Release(link);\n            return DDE_FNOTPROCESSED;\n        }\n        if (argc >= 2)\n        {\n            name = heap_alloc((strlenW(last_group) + 1 + strlenW(argv[1]) + 5) * sizeof(*name));\n            lstrcpyW(name, last_group);\n            lstrcatW(name, slashW);\n            lstrcatW(name, argv[1]);\n            lstrcatW(name, dotlnkW);\n        }\n        else\n        {\n            const WCHAR *filename = PathFindFileNameW(prg_name);\n            int len = PathFindExtensionW(filename) - filename;\n            name = heap_alloc((strlenW(last_group) + 1 + len + 5) * sizeof(*name));\n            lstrcpyW(name, last_group);\n            lstrcatW(name, slashW);\n            lstrcpynW(name+strlenW(name), filename, len + 1);\n            lstrcatW(name, dotlnkW);\n        }\n        hres = IPersistFile_Save(file, name, TRUE);\n\n        heap_free(name);\n        IPersistFile_Release(file);\n        LocalFree(cmd_argv);\n        IShellLinkW_Release(link);\n\n        if (FAILED(hres)) return DDE_FNOTPROCESSED;\n    }\n    else if (!strcmpiW(command, delete_itemW) || !strcmpiW(command, replace_itemW))\n    {\n        WCHAR *name;\n        BOOL ret;\n\n        if (argc < 1) return DDE_FNOTPROCESSED;\n\n        name = heap_alloc((strlenW(last_group) + 1 + strlenW(argv[0]) + 5) * sizeof(*name));\n        lstrcpyW(name, last_group);\n        lstrcatW(name, slashW);\n        lstrcatW(name, argv[0]);\n        lstrcatW(name, dotlnkW);\n\n        ret = DeleteFileW(name);\n\n        heap_free(name);\n\n        if (!ret) return DDE_FNOTPROCESSED;\n    }\n    else if (!strcmpiW(command, exit_progmanW))\n    {\n        /* do nothing */\n    }\n    else\n    {\n        FIXME(\"unhandled command %s\\n\", debugstr_w(command));\n        return DDE_FNOTPROCESSED;\n    }\n    return DDE_FACK;\n}\n\nstatic DWORD parse_dde_command(HSZ hszTopic, WCHAR *command)\n{\n    static const WCHAR opcode_end[] = {' ',',','(',')','[',']','\"',0};\n    static const WCHAR param_end[] = {',','(',')','[',']',0};\n\n    WCHAR *original = command;\n    WCHAR *opcode = NULL, **argv = NULL, *p;\n    int argc = 0, i;\n    DWORD ret = DDE_FACK;\n\n    while (*command == ' ') command++;\n\n    if (*command != '[') goto error;\n    while (*command == '[')\n    {\n        argc = 0;\n        argv = heap_alloc(sizeof(*argv));\n\n        command++;\n        while (*command == ' ') command++;\n        if (!(p = strpbrkW(command, opcode_end))) goto error;\n\n        opcode = strndupW(command, p - command);\n\n        command = p;\n        while (*command == ' ') command++;\n        if (*command == '(')\n        {\n            command++;\n\n            while (*command != ')')\n            {\n                while (*command == ' ') command++;\n                if (*command != ',')\n                {\n                    if (*command == '\"')\n                    {\n                        command++;\n                        if (!(p = strchrW(command, '\"'))) goto error;\n                    }\n                    else if (*command == ')')\n                        break;\n                    else\n                    {\n                        if (!(p = strpbrkW(command, param_end))) goto error;\n                        while (p[-1] == ' ') p--;\n                    }\n                }\n                else\n                    p = command;\n\n                argc++;\n                argv = heap_realloc(argv, argc * sizeof(*argv));\n                argv[argc-1] = strndupW(command, p - command);\n\n                command = p;\n                if (*command == '\"') command++;\n                while (*command == ' ') command++;\n                if (*command == ',') command++;\n                else if (*command != ')') goto error;\n            }\n            command++;\n\n            while (*command == ' ') command++;\n        }\n\n        if (*command != ']') goto error;\n        command++;\n        while (*command == ' ') command++;\n\n        if (hszTopic == hszProgmanTopic)\n            ret = PROGMAN_OnExecute(opcode, argc, argv);\n        else\n        {\n            FIXME(\"unhandled topic %s, command %s\\n\", debugstr_hsz(hszTopic), debugstr_w(opcode));\n            ret = DDE_FNOTPROCESSED;\n        }\n\n        heap_free(opcode);\n        for (i = 0; i < argc; i++) heap_free(argv[i]);\n        heap_free(argv);\n\n        if (ret == DDE_FNOTPROCESSED) break;\n    }\n\n    return ret;\n\nerror:\n    ERR(\"failed to parse command %s\\n\", debugstr_w(original));\n    heap_free(opcode);\n    for (i = 0; i < argc; i++) heap_free(argv[i]);\n    heap_free(argv);\n    return DDE_FNOTPROCESSED;\n}\n\nstatic DWORD Dde_OnExecute(HCONV hconv, HSZ hszTopic, HDDEDATA hdata)\n{\n    WCHAR *command;\n    DWORD len;\n    DWORD ret;\n\n    len = DdeGetData(hdata, NULL, 0, 0);\n    if (!len) return DDE_FNOTPROCESSED;\n    command = heap_alloc(len);\n    DdeGetData(hdata, (BYTE *)command, len, 0);\n\n    TRACE(\"conv=%p topic=%s data=%s\\n\", hconv, debugstr_hsz(hszTopic), debugstr_w(command));\n\n    ret = parse_dde_command(hszTopic, command);\n\n    heap_free(command);\n    return ret;\n}\n\nstatic inline void Dde_OnDisconnect(HCONV hconv)\n{\n    TRACE( \"%p\\n\", hconv );\n}\n\nstatic HDDEDATA CALLBACK DdeCallback(      \n    UINT uType,\n    UINT uFmt,\n    HCONV hconv,\n    HSZ hsz1,\n    HSZ hsz2,\n    HDDEDATA hdata,\n    ULONG_PTR dwData1,\n    ULONG_PTR dwData2)\n{\n    switch (uType)\n    {\n    case XTYP_CONNECT:\n        return (HDDEDATA)(DWORD_PTR)Dde_OnConnect(hsz1, hsz2);\n    case XTYP_CONNECT_CONFIRM:\n        Dde_OnConnectConfirm(hconv, hsz1, hsz2);\n        return NULL;\n    case XTYP_WILDCONNECT:\n        return Dde_OnWildConnect(hsz1, hsz2);\n    case XTYP_REQUEST:\n        return Dde_OnRequest(uFmt, hconv, hsz1, hsz2);\n    case XTYP_EXECUTE:\n        return (HDDEDATA)(DWORD_PTR)Dde_OnExecute(hconv, hsz1, hdata);\n    case XTYP_DISCONNECT:\n        Dde_OnDisconnect(hconv);\n        return NULL;\n    default:\n        return NULL;\n    }\n}\n\nLRESULT WINAPI progman16_wndproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)\n{\n    switch (msg)\n    {\n        case WM_DDE_INITIATE:\n        {\n            SendMessage(wparam, WM_DDE_ACK, hwnd, lparam);\n            break;\n        }\n        case WM_DDE_EXECUTE:\n        {\n            char *connect = GlobalLock(lparam);\n            if (connect)\n            {\n                WCHAR command[256] = {0};\n                MultiByteToWideChar(CP_ACP, 0, connect, -1, command, 255);\n                HDDEDATA ret = parse_dde_command(hszProgmanTopic, command);\n                PostMessage(wparam, WM_DDE_ACK, hwnd, ret == DDE_FACK ? 0x8000 : 0);\n                GlobalUnlock(lparam);\n            }\n            break;\n        }\n    }\n    return DefWindowProc(hwnd, msg, wparam, lparam);\n}\n\n/*************************************************************************\n * ShellDDEInit (SHELL32.@)\n *\n * Registers the Shell DDE services with the system so that applications\n * can use them.\n *\n * PARAMS\n *  bInit [I] TRUE to initialize the services, FALSE to uninitialize.\n *\n * RETURNS\n *  Nothing.\n */\nvoid WINAPI ShellDDEInit(BOOL bInit)\n{\n    static const WCHAR wszProgman[] = {'P','r','o','g','m','a','n','1','6',0};\n    static HWND progman16_hwnd;\n    static HINSTANCE mod_instance;\n    TRACE(\"bInit = %s\\n\", bInit ? \"TRUE\" : \"FALSE\");\n\n    if (bInit)\n    {\n        static const WCHAR wszAsterisk[] = {'*',0};\n        static const WCHAR wszShell[] = {'S','h','e','l','l',0};\n        static const WCHAR wszAppProperties[] =\n            {'A','p','p','P','r','o','p','e','r','t','i','e','s',0};\n        static const WCHAR wszFolders[] = {'F','o','l','d','e','r','s',0};\n        static const WCHAR wszGroups[] = {'G','r','o','u','p','s',0};\n\n        DdeInitializeW(&dwDDEInst, DdeCallback, CBF_FAIL_ADVISES | CBF_FAIL_POKES, 0);\n\n        hszProgmanTopic = DdeCreateStringHandleW(dwDDEInst, wszProgman, CP_WINUNICODE);\n        hszProgmanService = DdeCreateStringHandleW(dwDDEInst, wszProgman, CP_WINUNICODE);\n        hszAsterisk = DdeCreateStringHandleW(dwDDEInst, wszAsterisk, CP_WINUNICODE);\n        hszShell = DdeCreateStringHandleW(dwDDEInst, wszShell, CP_WINUNICODE);\n        hszAppProperties = DdeCreateStringHandleW(dwDDEInst, wszAppProperties, CP_WINUNICODE);\n        hszFolders = DdeCreateStringHandleW(dwDDEInst, wszFolders, CP_WINUNICODE);\n        hszGroups = DdeCreateStringHandleW(dwDDEInst, wszGroups, CP_WINUNICODE);\n\n        DdeNameService(dwDDEInst, hszFolders, 0, DNS_REGISTER);\n        DdeNameService(dwDDEInst, hszProgmanService, 0, DNS_REGISTER);\n        /* DdeNameService(dwDDEInst, hszShell, 0, DNS_REGISTER); */\n        WNDCLASSW class = {0};\n        class.lpfnWndProc = &progman16_wndproc;\n        GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS|GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,\n                        (LPCSTR)&progman16_wndproc, &mod_instance);\n        class.hInstance = mod_instance;\n        class.lpszClassName = &wszProgman;\n        RegisterClassW(&class);\n        progman16_hwnd = CreateWindowW(wszProgman, wszProgman, 0, 0, 0, 0, 0, HWND_MESSAGE, NULL, mod_instance, NULL);\n        CoInitialize(NULL);\n    }\n    else\n    {\n        /* unregister all services */\n        DdeNameService(dwDDEInst, 0, 0, DNS_UNREGISTER);\n\n        DdeFreeStringHandle(dwDDEInst, hszFolders);\n        DdeFreeStringHandle(dwDDEInst, hszAppProperties);\n        DdeFreeStringHandle(dwDDEInst, hszShell);\n        DdeFreeStringHandle(dwDDEInst, hszAsterisk);\n        DdeFreeStringHandle(dwDDEInst, hszProgmanService);\n        DdeFreeStringHandle(dwDDEInst, hszProgmanTopic);\n\n        DdeUninitialize(dwDDEInst);\n        DestroyWindow(progman16_hwnd);\n        UnregisterClassW(wszProgman, mod_instance);\n    }\n}\n"
  },
  {
    "path": "user/dialog.c",
    "content": "/*\n * 16-bit dialog functions\n *\n * Copyright 1993, 1994, 1996, 2003 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdarg.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wownt32.h\"\n#include \"wine/winuser16.h\"\n#include \"user_private.h\"\n#include \"wine/debug.h\"\n#include <Uxtheme.h>\n#include \"../krnl386/kernel16_private.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(dialog);\nBOOL is_reactos();\n\n#include <pshpack1.h>\ntypedef struct\n{\n    BYTE pop_eax; /* 58 */\n    BYTE push_imm; /* 68 */\n    LPVOID this_;\n    BYTE push_eax; /* 50 */\n    BYTE jmp_rel; /* E9 */\n    UINT_PTR DlgProc;\n    BOOL used;\n    HWND hDlg;\n    LPVOID param;\n} DLGPROCTHUNK;\n#include <poppack.h>\nvoid free_proc_thunk(DLGPROCTHUNK *thunk);\nBYTE get_aflags(HMODULE16 hModule);\n\n/* Dialog control information */\ntypedef struct\n{\n    DWORD      style;\n    INT16      x;\n    INT16      y;\n    INT16      cx;\n    INT16      cy;\n    UINT       id;\n    LPCSTR     className;\n    LPCSTR     windowName;\n    LPCVOID    data;\n} DLG_CONTROL_INFO;\n\n  /* Dialog template */\ntypedef struct\n{\n    DWORD      style;\n    UINT16     nbItems;\n    INT16      x;\n    INT16      y;\n    INT16      cx;\n    INT16      cy;\n    LPCSTR     menuName;\n    LPCSTR     className;\n    LPCSTR     caption;\n    INT16      pointSize;\n    INT16      weight;\n    LPCSTR     faceName;\n} DLG_TEMPLATE;\n#include \"pshpack2.h\"\ntypedef struct\n{\n  WORD dlgVer;\n  WORD signature;\n  DWORD helpID;\n  DWORD exStyle;\n  DWORD style;\n  WORD cdit;\n  short x;\n  short y;\n  short cx;\n  short cy;\n} DLGTEMPLATEEX;\n\ntypedef struct\n{\n  DWORD helpid;\n  DWORD exStyle;\n  DWORD style;\n  short x;\n  short y;\n  short cx;\n  short cy;\n  DWORD id;\n} DLGITEMTEMPLATEEX;\n#include \"poppack.h\"\n\n#define IS_ANY_DBCS_CHARSET( CharSet )                              \\\n                   ( ((CharSet) == SHIFTJIS_CHARSET)    ? TRUE :    \\\n                     ((CharSet) == HANGEUL_CHARSET)     ? TRUE :    \\\n                     ((CharSet) == CHINESEBIG5_CHARSET) ? TRUE :    \\\n                     ((CharSet) == GB2312_CHARSET)      ? TRUE : FALSE )\n\n#define DIALOG_CLASS_ATOM MAKEINTATOM(32770)\n\n\n/***********************************************************************\n *           DIALOG_GetControl16\n *\n * Return the class and text of the control pointed to by ptr,\n * fill the header structure and return a pointer to the next control.\n */\nstatic LPCSTR DIALOG_GetControl16( LPCSTR p, DLG_CONTROL_INFO *info )\n{\n    static char buffer[10];\n    int int_id;\n\n    info->x       = GET_WORD(p);  p += sizeof(WORD);\n    info->y       = GET_WORD(p);  p += sizeof(WORD);\n    info->cx      = GET_WORD(p);  p += sizeof(WORD);\n    info->cy      = GET_WORD(p);  p += sizeof(WORD);\n    info->id      = GET_WORD(p);  p += sizeof(WORD);\n    info->style   = GET_DWORD(p); p += sizeof(DWORD);\n\n    if (*p & 0x80)\n    {\n        switch((BYTE)*p)\n        {\n            case 0x80: strcpy( buffer, \"BUTTON\" ); break;\n            case 0x81: strcpy( buffer, \"EDIT\" ); break;\n            case 0x82: strcpy( buffer, \"STATIC\" ); break;\n            case 0x83: strcpy( buffer, \"LISTBOX\" ); break;\n            case 0x84: strcpy( buffer, \"SCROLLBAR\" ); break;\n            case 0x85: strcpy( buffer, \"COMBOBOX\" ); break;\n            default:   buffer[0] = '\\0'; break;\n        }\n        info->className = buffer;\n        p++;\n    }\n    else\n    {\n        info->className = p;\n        p += strlen(p) + 1;\n    }\n\n    int_id = ((BYTE)*p == 0xff);\n    if (int_id)\n    {\n        /* Integer id, not documented (?). Only works for SS_ICON controls */\n        info->windowName = MAKEINTRESOURCEA(GET_WORD(p+1));\n        p += 3;\n    }\n    else\n    {\n        info->windowName = p;\n        p += strlen(p) + 1;\n    }\n\n    if (*p) info->data = p + 1;\n    else info->data = NULL;\n\n    p += *p + 1;\n\n    TRACE(\"   %s %s %d, %d, %d, %d, %d, %08x, %p\\n\",\n          debugstr_a(info->className),  debugstr_a(info->windowName),\n          info->id, info->x, info->y, info->cx, info->cy,\n          info->style, info->data );\n\n    return p;\n}\n\n\n/***********************************************************************\n *           DIALOG_ParseTemplate16\n *\n * Fill a DLG_TEMPLATE structure from the dialog template, and return\n * a pointer to the first control.\n */\nstatic LPCSTR DIALOG_ParseTemplate16( LPCSTR p, DLG_TEMPLATE * result )\n{\n    result->style   = GET_DWORD(p); p += sizeof(DWORD);\n    result->nbItems = (unsigned char) *p++;\n    result->x       = GET_WORD(p);  p += sizeof(WORD);\n    result->y       = GET_WORD(p);  p += sizeof(WORD);\n    result->cx      = GET_WORD(p);  p += sizeof(WORD);\n    result->cy      = GET_WORD(p);  p += sizeof(WORD);\n\n    TRACE(\"DIALOG %d, %d, %d, %d\\n\", result->x, result->y, result->cx, result->cy );\n    TRACE(\" STYLE %08x\\n\", result->style );\n\n    /* Get the menu name */\n\n    switch( (BYTE)*p )\n    {\n    case 0:\n        result->menuName = 0;\n        p++;\n        break;\n    case 0xff:\n        result->menuName = MAKEINTRESOURCEA(GET_WORD( p + 1 ));\n        p += 3;\n        TRACE(\" MENU %04x\\n\", LOWORD(result->menuName) );\n        break;\n    default:\n        result->menuName = p;\n        TRACE(\" MENU '%s'\\n\", p );\n        p += strlen(p) + 1;\n        break;\n    }\n\n    /* Get the class name */\n\n    if (*p)\n    {\n        result->className = p;\n        TRACE(\" CLASS '%s'\\n\", result->className );\n    }\n    else result->className = (LPCSTR)DIALOG_CLASS_ATOM;\n    p += strlen(p) + 1;\n\n    /* Get the window caption */\n\n    result->caption = p;\n    p += strlen(p) + 1;\n    TRACE(\" CAPTION '%s'\\n\", result->caption );\n\n    /* Get the font name */\n\n    result->pointSize = 0;\n    result->faceName = NULL;\n    result->weight = 0;\n\n    if (result->style & DS_SETFONT)\n    {\n        CHARSETINFO info;\n        if (!TranslateCharsetInfo((DWORD *)(GetACP()), &info, TCI_SRCCODEPAGE))\n            info.ciCharset = ANSI_CHARSET;\n        result->pointSize = GET_WORD(p);\n        p += sizeof(WORD);\n        result->faceName = p;\n        p += strlen(p) + 1;\n        result->weight = IS_ANY_DBCS_CHARSET(info.ciCharset) ? FW_NORMAL : FW_BOLD;\n        TRACE(\" FONT %d,'%s'\\n\", result->pointSize, result->faceName );\n    }\n    else if (IsOldWindowsTask(GetCurrentTask()) && !(get_aflags(GetExePtr(GetCurrentTask())) & NE_AFLAGS_WIN2_PROTMODE))\n    {\n        result->style |= DS_SETFONT;\n        result->pointSize = 10;\n        result->faceName = \"FIXEDSYS\";\n        result->weight = FW_NORMAL;\n    }\n    return p;\n}\nLRESULT get_message_callback(HWND16 hwnd, UINT16 msg, WPARAM16 wp, LPARAM lp,\n\tLRESULT *result, void *arg);\nLRESULT CALLBACK DlgProcCall16(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam)\n{\n\tHWND16 hWnd16 = HWND_16(hDlg);\n\tWNDPROC16 wndproc16 = GetWndProc16(hWnd16);\n\tswitch (Msg)\n\t{\n\tcase WM_INITDIALOG:\n\t\t{\n\t\t\tCREATESTRUCTA* cs = (CREATESTRUCTA*)lParam;\n\t\t\tLPARAM *params = cs->lpCreateParams;\n\t\t\tHMENU hMenu;\n\t\t\tif (cs->hMenu)\n\t\t\t{\n\t\t\t\tBOOL ret = SetMenu(hDlg, HMENU_32(cs->hMenu));\n\t\t\t}\n\t\t\tATOM classatom = GetClassLongA(hDlg, GCW_ATOM);//WNDPROC16\n\t\t\tHWND16 hWnd16 = HWND_16(hDlg);\n\t\t\tif (classatom)\n\t\t\t{\n\t\t\t\tif (params[1])\n\t\t\t\t{\n\t\t\t\t\tSetDlgProc16(hWnd16, params[1]);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n                    SetDlgProc16(hWnd16, WNDCLASS16Info[classatom].wndproc);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcs->lpCreateParams = params[0];\n\t\t\tfree(cs);\n\t\t}\n\t\tbreak;\n\t}\n\tif (wndproc16)\n\t{\n\t\tMSG msg;\n\t\tmsg.hwnd = hDlg;\n\t\tmsg.message = Msg;\n\t\tmsg.wParam = wParam;\n\t\tmsg.lParam = lParam;\n\t\tMSG16 msg16;\n\t\tLRESULT unused;\n\t\tWINPROC_CallProc32ATo16(get_message_callback, msg.hwnd, msg.message, msg.wParam, msg.lParam,\n\t\t\t&unused, &msg16);\n\t\tswitch (msg.message)\n\t\t{\n\t\tdefault:\n\t\tcase WM_PAINT:\n\t\tcase WM_COMMAND:\n\t\t\treturn DispatchMessage16(&msg16),1;\n\t\t}\n\t}\n\treturn 0;//DefWindowProcA(hDlg, Msg, wParam, lParam);\n}\nLRESULT call_window_proc16(HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam,\n    LRESULT *result, void *arg);\nLRESULT call_dialog_proc16(HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam,\n    LRESULT *result, void *arg)\n{\n    SetWindowLong16(hwnd, DWL_MSGRESULT, 0xdeadbeef);\n    call_window_proc16(hwnd, msg, wParam, lParam, result, arg);\n    *result &= 0xffff;\n    LRESULT r = *result;/* result: 16-bit */\n    if (GetWindowLong16(hwnd, DWL_MSGRESULT) == 0xdeadbeef)\n    {\n        return r;\n    }\n    else\n    {\n        *result = GetWindowLong16(hwnd, DWL_MSGRESULT);\n    }\n    return r;\n}\nINT_PTR CALLBACK DlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam);\nINT_PTR CALLBACK DlgProc_Thunk(DLGPROCTHUNK *thunk_data, HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam)\n{\n    if (!thunk_data->hDlg)\n    {\n        thunk_data->hDlg = hDlg;\n        dialog_data* cs = (dialog_data*)thunk_data->param;\n        if (cs->hMenu16)\n        {\n            BOOL ret = SetMenu(hDlg, HMENU_32(cs->hMenu16));\n        }\n        HWND16 hWnd16 = HWND_16(hDlg);\n        SetDlgProc16(hWnd16, cs->dlgProc);\n        SetWindowLongPtrA(hDlg, DWLP_DLGPROC, DlgProc);\n        HeapFree(GetProcessHeap(), 0, cs);\n        free_proc_thunk(thunk_data);\n    }\n    return DlgProc(hDlg, Msg, wParam, lParam);\n}\nINT_PTR CALLBACK DlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam)\n{\n\tHWND16 hWnd16 = HWND_16(hDlg);\n\tWNDPROC16 wndproc16 = GetDlgProc16(hWnd16);\n    LRESULT ret = 0;\n\tif (wndproc16)\n\t{\n\t\tMSG msg;\n\t\tmsg.hwnd = hDlg;\n\t\tmsg.message = Msg;\n\t\tmsg.wParam = wParam;\n\t\tmsg.lParam = lParam;\n\t\tMSG16 msg16;\n        switch (msg.message)\n        {\n        default:\n        {\n            INT_PTR result = WINPROC_CallProc32ATo16(call_dialog_proc16, msg.hwnd, msg.message, msg.wParam, msg.lParam,\n                &ret, wndproc16);\n            if (GetWindowLong16(HWND_16(msg.hwnd), DWL_MSGRESULT) != 0xdeadbeef)\n                SetWindowLongA(hDlg, DWL_MSGRESULT, ret);\n            else\n                return ret;\n            return result;\n        }\n        }\n\t}\n\n\treturn ret;\n}\n/* internal API for COMMDLG hooks */\nLRESULT WINAPI DIALOG_CallDialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, WNDPROC16 proc)\n{\n    LRESULT ret;\n    BOOL16 result = WINPROC_CallProc32ATo16(call_dialog_proc16, hwnd, msg, wParam, lParam,\n        &ret, proc);\n    if (GetWindowLong16(HWND_16(hwnd), DWL_MSGRESULT) != 0xdeadbeef)\n        SetWindowLongA(hwnd, DWL_MSGRESULT, ret);\n    return result;\n}\n\nvoid paddingDWORD(DWORD **d)\n{\n\t*d = (BYTE*)(((DWORD)*d + 3) & ~((DWORD)3));\n}\nvoid copy_widestr(LPCSTR name, LPWSTR *templatew, DLGTEMPLATEEX **template32)\n{\n\tint len = 0;\n\tint slen;\n\tif (slen = strlen(name))\n\t{\n\t\tif (slen > 256)\n\t\t{\n\t\t\tUINT_PTR off = (char *)*templatew - (char *)*template32;\n\t\t\t*template32 = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, *template32, HeapSize(GetProcessHeap(), 0, *template32) + slen * 2);\n\t\t\t*templatew = (char *)*template32 + off;\n\t\t}\n\t\tlen = MultiByteToWideChar(CP_ACP, NULL, name, -1, *templatew, strlen(name) * 4)\n\t\t\t* 2;\n\t}\n\tif (len)\n\t{\n\t\t*templatew = (WORD*)((BYTE*)*templatew + len);\n\t}\n\telse\n\t{\n\t\t**templatew = 0;\n\t\t(*templatew)++;\n\t}\n}\n/***********************************************************************\n*           DIALOG_CreateControls16\n*\n* Create the control windows for a dialog.\n*/\nstatic BOOL DIALOG_CreateControls16Ex(HWND hwnd, LPCSTR template,\n\tconst DLG_TEMPLATE *dlgTemplate, HINSTANCE16 hInst, DLGITEMTEMPLATEEX *dlgItemTemplate32, SEGPTR base16, SIZE_T base32, DLGTEMPLATEEX **template32)\n{\n\tDLG_CONTROL_INFO info;\n\tHWND hwndCtrl, hwndDefButton = 0;\n\tINT items = dlgTemplate->nbItems;\n\tdlgItemTemplate32 = (BYTE*) (((DWORD)dlgItemTemplate32 + 3) & ~((DWORD)3));\n\tWORD *dlgItemTemplatew;\n\tTRACE(\" BEGIN\\n\");\n\twhile (items--)\n\t{\n\t\tpaddingDWORD(&dlgItemTemplate32);\n\t\ttemplate = DIALOG_GetControl16(template, &info);\n\t\tdlgItemTemplate32->helpid = 0;\n\t\tdlgItemTemplate32->style = info.style | WS_CHILD;\n\t\tdlgItemTemplate32->exStyle = 0;// WS_EX_NOPARENTNOTIFY;\n\t\tdlgItemTemplate32->x = info.x;\n\t\tdlgItemTemplate32->y = info.y;\n\t\tdlgItemTemplate32->cx = info.cx;\n\t\tdlgItemTemplate32->cy = info.cy;\n\t\tdlgItemTemplate32->id = info.id;\n\t\tdlgItemTemplatew = (WORD*)(dlgItemTemplate32 + 1);\n        info.className = win32classname(hInst, info.className);\n\t\tcopy_widestr(info.className, &dlgItemTemplatew, template32);\n        if (!HIWORD(info.windowName))\n        {\n            char buffer[512];\n            if (((dlgItemTemplate32->style & 0xF) == SS_ICON || (dlgItemTemplate32->style & 0xF) == SS_BITMAP) && stricmp(info.className, \"STATIC\") == 0)\n            {\n                sprintf(buffer, \"#%d\", (int)info.windowName);\n                copy_widestr(buffer, &dlgItemTemplatew, template32);\n            }\n            else\n            {\n                if (LoadString16(hInst, LOWORD(info.windowName), buffer, sizeof(buffer)))\n                    info.windowName = buffer;\n                else\n                    info.windowName = \"dialog error: invalid window name\";\n                copy_widestr(info.windowName, &dlgItemTemplatew, template32);\n            }\n        }\n        else\n        {\n            copy_widestr(info.windowName, &dlgItemTemplatew, template32);\n        }\n\t\tif (info.data)\n\t\t{\n\t\t\t*dlgItemTemplatew++ = sizeof(info.data);\n            /* reference to 16-bit dialog template */\n            *((LPCVOID*)dlgItemTemplatew) = MAKESEGPTR(SELECTOROF(base16), OFFSETOF(base16) + (WORD)((SIZE_T)info.data - base32));\n\t\t\tdlgItemTemplatew += 2;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t*dlgItemTemplatew++ = 0;\n\t\t}\n\t\tdlgItemTemplate32 = dlgItemTemplatew;\n\t\t\n\t}\n\tTRACE(\" END\\n\");\n\treturn TRUE;\n}\nstatic BOOL DIALOG_DumpControls32(HWND hwnd, LPCSTR template,\n\tconst DLG_TEMPLATE *dlgTemplate, HINSTANCE16 hInst, DLGITEMTEMPLATEEX *dlgItemTemplate32)\n{\n\tDLG_CONTROL_INFO info;\n\tHWND hwndCtrl, hwndDefButton = 0;\n\tINT items = dlgTemplate->nbItems;\n\tdlgItemTemplate32 = (BYTE*)(((DWORD)dlgItemTemplate32 + 3) & ~((DWORD)3));\n\tWORD *dlgItemTemplatew;\n\tTRACE(\" BEGIN\\n\");\n\twhile (items--)\n\t{\n\t\tchar buf[256];\n\t\ttemplate = DIALOG_GetControl16(template, &info);\n\t\tGetDlgItemTextA(hwnd, info.id, buf, 256);\n\t\tchar\tpszError[512];\n\t\t//Ō̃G[ԍ擾\n\t\tDWORD dwError = GetLastError();\n\t\t//ϊ\n\t\tFormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, dwError, NULL, pszError, sizeof(pszError), NULL);\n\t\tDPRINTF(\"id 0x%x=%s, err=%s\\n\", info.id, buf, pszError);\n\t}\n\tTRACE(\" END\\n\");\n\treturn TRUE;\n}\n\n#include <stdio.h>\n\n/* internal API for COMMDLG hooks */\nDLGTEMPLATEEX *WINAPI dialog_template16_to_template32(HINSTANCE16 hInst, SEGPTR dlgTemplate16, DWORD *size, dialog_data *paramd)\n{\n    HINSTANCE hInst32 = HINSTANCE_32(hInst);\n    DLGTEMPLATEEX *template32;\n\tDLG_TEMPLATE template;\n\tDWORD units = GetDialogBaseUnits();\n\tHMENU16 hMenu = 0;\n\tHFONT hUserFont = 0;\n\tUINT xBaseUnit = LOWORD(units);\n\tUINT yBaseUnit = HIWORD(units);\n    LPCVOID dlgTemplate = MapSL(dlgTemplate16);\n    LPCVOID base32 = dlgTemplate;\n\n\t/* Parse dialog template */\n\n\tdlgTemplate = DIALOG_ParseTemplate16(dlgTemplate, &template);\n\n\t/* Load menu */\n\n\tif (template.menuName) hMenu = LoadMenu16(hInst, template.menuName);\n\t//FIXME:memory\n\ttemplate32 = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 1024 + template.nbItems * 512);\n\ttemplate32->dlgVer = 1;\n\ttemplate32->signature = 0xffff;\n\ttemplate32->style = template.style;\n\ttemplate32->exStyle = 0;\n\ttemplate32->helpID = 0;\n\ttemplate32->cdit = template.nbItems;\n\ttemplate32->x = template.x;\n\ttemplate32->y = template.y;\n\ttemplate32->cx = template.cx;\n\ttemplate32->cy = template.cy;\n\tWORD *templatew = (WORD*)(template32 + 1);\n\t//Menu\n\t*templatew++ = 0;\n\tint len;\n\tif (template.className == DIALOG_CLASS_ATOM)\n\t{\n        *templatew++ = 0;\n\t}\n\telse\n\t{\n\t\t//WNDclass\n        template.className = win32classname(hInst, template.className);\n\t\tlen = MultiByteToWideChar(CP_ACP, NULL, template.className, -1, (LPWSTR)templatew, (1 + strlen(template.className)) * 4)\n\t\t\t* 2;\n\t\tif (len)\n\t\t{\n\t\t\ttemplatew = (WORD*)((BYTE*)templatew + len);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t*templatew++ = 0;\n\t\t}\n\t}\n\t//dialog title\n\tlen = MultiByteToWideChar(CP_ACP, NULL, template.caption, -1, (LPWSTR)templatew, (1 + strlen(template.caption)) * 4)\n\t\t* 2;\n\tif (len)\n\t{\n\t\ttemplatew = (WORD*)((BYTE*)templatew + len);\n\t}\n\telse\n\t{\n\t\t*templatew++ = 0;\n\t}\n\tif (template.style & DS_SETFONT)\n\t{\n\t\t*templatew++ = template.pointSize;\n\t\t*templatew++ = template.weight;\n\t\t*templatew++ = (DEFAULT_CHARSET << 8) | FALSE;\n\t\tlen = MultiByteToWideChar(CP_ACP, NULL, template.faceName, -1, (LPWSTR)templatew, (1 + strlen(template.faceName)) * 4)\n\t\t\t* 2;\n\t\tif (len)\n\t\t{\n\t\t\ttemplatew = (WORD*)((BYTE*)templatew + len);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t*templatew++ = 0;\n\t\t}\n          /* We convert the size to pixels and then make it -ve.  This works\n           * for both +ve and -ve template.pointSize */\n        HDC dc;\n        int pixels;\n        dc = GetDC(0);\n        pixels = MulDiv(template.pointSize, GetDeviceCaps(dc , LOGPIXELSY), 72);\n        hUserFont = CreateFontA( -pixels, 0, 0, 0, FW_DONTCARE,\n                                 FALSE, FALSE, FALSE, DEFAULT_CHARSET, 0, 0,\n                                 PROOF_QUALITY, FF_DONTCARE, template.faceName );\n        if (hUserFont)\n        {\n            SIZE charSize;\n            HFONT hOldFont = SelectObject( dc, hUserFont );\n            charSize.cx = GdiGetCharDimensions( dc, NULL, &charSize.cy );\n            if (charSize.cx)\n            {\n                xBaseUnit = charSize.cx;\n                yBaseUnit = charSize.cy;\n            }\n            SelectObject( dc, hOldFont );\n        }\n        ReleaseDC(0, dc);\n        DeleteObject( hUserFont );\n        TRACE(\"units = %d,%d\\n\", xBaseUnit, yBaseUnit );\n\t}\n\tDIALOG_CreateControls16Ex(NULL, dlgTemplate, &template, hInst, templatew, dlgTemplate16, (SIZE_T)base32, &template32);\n\tWNDCLASSEXA wc2 = { 0 };\n\tGetClassInfoExA(hInst32, template.className, &wc2);\n\tif (!wc2.lpszClassName)\n\t\tGetClassInfoExA(GetModuleHandleW(NULL), template.className, &wc2);\n    if (!paramd)\n    {\n        if (hMenu || wc2.lpszMenuName)\n        {\n            FIXME(\"dialog menu is not supported.\\n\");\n        }\n    }\n    else\n    {\n        paramd->hMenu16 = hMenu;\n        if (!hMenu)\n            paramd->hMenu16 = LoadMenu16(hInst, wc2.lpszMenuName);\n    }\n    /* Add menu height */\n    /* Precision...? */\n    if (hMenu)\n    {\n        template32->cy += MulDiv(GetSystemMetrics(SM_CYMENU), 8, yBaseUnit);\n    }\n    return template32;\n}\nstatic DLGPROCTHUNK *thunk_array;\nstatic int MAX_THUNK;\nstatic void init_proc_thunk()\n{\n    if (thunk_array)\n        return;\n    MAX_THUNK = 4096 / sizeof(DLGPROCTHUNK);\n    thunk_array = VirtualAlloc(NULL, MAX_THUNK * sizeof(DLGPROCTHUNK), MEM_COMMIT, PAGE_EXECUTE_READWRITE);\n}\ndialog_data *get_dialog_data(HWND hWnd)\n{\n    DLGPROC dlgproc = GetWindowLongPtrA(hWnd, DWLP_DLGPROC);\n    if (thunk_array <= dlgproc && thunk_array + MAX_THUNK > dlgproc)\n    {\n        return (dialog_data*)(((DLGPROCTHUNK *)dlgproc)->param);\n    }\n    return 0;\n}\nDLGPROCTHUNK *init_thunk_data(LPVOID param, int i, LPVOID func)\n{\n    thunk_array[i].pop_eax = 0x58;\n    thunk_array[i].push_imm = 0x68;\n    thunk_array[i].this_ = thunk_array + i;\n    thunk_array[i].push_eax = 0x50;\n    thunk_array[i].jmp_rel = 0xE9;\n    thunk_array[i].DlgProc = (UINT_PTR)DlgProc_Thunk - (UINT_PTR)(&thunk_array[i].DlgProc + 1);\n    thunk_array[i].used = TRUE;\n    thunk_array[i].hDlg = 0;\n    thunk_array[i].param = param;\n    return thunk_array + i;\n}\nDLGPROC allocate_proc_thunk(LPVOID param, LPVOID func)\n{\n    init_proc_thunk();\n    for (int i = 0; i < MAX_THUNK; i++)\n    {\n        if (!thunk_array[i].used)\n        {\n            return (DLGPROC)init_thunk_data(param, i, func);\n        }\n    }\n    for (int i = 0; i < MAX_THUNK; i++)\n    {\n        if (thunk_array[i].hDlg && !IsWindow(thunk_array[i].hDlg))\n        {\n            return (DLGPROC)init_thunk_data(param, i, func);\n        }\n    }\n    ERR(\"could not allocate dialog thunk!\\n\");\n    return DlgProc;\n}\nvoid free_proc_thunk(DLGPROCTHUNK *thunk)\n{\n    thunk->used = FALSE;\n}\n/***********************************************************************\n*           DIALOG_CreateIndirect16\n*\n* Creates a dialog box window\n*\n* modal = TRUE if we are called from a modal dialog box.\n* (it's more compatible to do it here, as under Windows the owner\n* is never disabled if the dialog fails because of an invalid template)\n*/\nstatic HWND DIALOG_CreateIndirect16(HINSTANCE16 hInst, SEGPTR dlgTemplate16,\n\tHWND owner, DLGPROC16 dlgProc, LPARAM param,\n\tBOOL modal)\n{\n\tHWND result;\n    dialog_data *paramd = (dialog_data*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(dialog_data));\n    HINSTANCE hInst32 = HINSTANCE_32(hInst);\n    DWORD size;\n    DLGTEMPLATEEX *template32 = dialog_template16_to_template32(hInst32, dlgTemplate16, &size, paramd);\n    DWORD count;\n    DLGPROC proc = allocate_proc_thunk(paramd, DlgProc_Thunk);\n    paramd->dlgProc = dlgProc;\n    ReleaseThunkLock(&count);\n    if (modal)\n    {\n        SetEvent(kernel_get_thread_data()->idle_event);\n        result = (HWND)DialogBoxIndirectParamA(\n            UlongToHandle(HandleToUlong(hInst32) | (is_reactos() ? 0xfefe0000 : 0)),\n            template32,\n            owner,\n            proc, param);\n    }\n    else\n    {\n        result = CreateDialogIndirectParamA(\n            UlongToHandle(HandleToUlong(hInst32) | (is_reactos() ? 0xfefe0000 : 0)),\n            template32,\n            owner,\n            proc, param);\n    }\n    HeapFree(GetProcessHeap(), 0, template32);\n    RestoreThunkLock(count);\n    return result;\n}\n\n/***********************************************************************\n *\t\tDialogBox (USER.87)\n */\nINT16 WINAPI DialogBox16( HINSTANCE16 hInst, LPCSTR dlgTemplate,\n                          HWND16 owner, DLGPROC16 dlgProc )\n{\n    return DialogBoxParam16( hInst, dlgTemplate, owner, dlgProc, 0 );\n}\n\n\n/**************************************************************************\n *              EndDialog   (USER.88)\n */\nBOOL16 WINAPI EndDialog16( HWND16 hwnd, INT16 retval )\n{\n    DWORD count;\n    BOOL result;\n    ReleaseThunkLock(&count);\n    result = EndDialog( WIN_Handle32(hwnd), retval );\n    RestoreThunkLock(count);\n    return (BOOL16)result;\n}\n\n\n/***********************************************************************\n *\t\tCreateDialog (USER.89)\n */\nHWND16 WINAPI CreateDialog16( HINSTANCE16 hInst, LPCSTR dlgTemplate,\n                              HWND16 owner, DLGPROC16 dlgProc )\n{\n    return CreateDialogParam16( hInst, dlgTemplate, owner, dlgProc, 0 );\n}\n\n\n/**************************************************************************\n *              GetDlgItem   (USER.91)\n */\nHWND16 WINAPI GetDlgItem16( HWND16 hwndDlg, INT16 id )\n{\n    return HWND_16( GetDlgItem( WIN_Handle32(hwndDlg), (UINT16) id ));\n}\n\n\n/**************************************************************************\n *              SetDlgItemText   (USER.92)\n */\nvoid WINAPI SetDlgItemText16( HWND16 hwnd, INT16 id, SEGPTR lpString )\n{\n\tconst char *txt = MapSL(lpString);\n\tSetDlgItemTextA(HWND_32(hwnd), (UINT16)id, txt);\n    SendDlgItemMessage16( hwnd, id, WM_SETTEXT, 0, lpString );\n}\n\n\n/**************************************************************************\n *              GetDlgItemText   (USER.93)\n */\nINT16 WINAPI GetDlgItemText16( HWND16 hwnd, INT16 id, SEGPTR str, UINT16 len )\n{\n\treturn GetDlgItemTextA(HWND_32(hwnd), (UINT16)id, MapSL(str), len);\n    return SendDlgItemMessage16( hwnd, id, WM_GETTEXT, len, str );\n}\n\n\n/**************************************************************************\n *              SetDlgItemInt   (USER.94)\n */\nvoid WINAPI SetDlgItemInt16( HWND16 hwnd, INT16 id, UINT16 value, BOOL16 fSigned )\n{\n    SetDlgItemInt( WIN_Handle32(hwnd), (UINT)(UINT16)id,\n             (UINT)(fSigned ? (INT16) value : value), fSigned );\n}\n\n\n/**************************************************************************\n *              GetDlgItemInt   (USER.95)\n */\nUINT16 WINAPI GetDlgItemInt16( HWND16 hwnd, INT16 id, BOOL16 *translated, BOOL16 fSigned )\n{\n    UINT result;\n    BOOL ok;\n\n    if (translated) *translated = FALSE;\n    result = GetDlgItemInt( WIN_Handle32(hwnd), (UINT)(UINT16)id, &ok, fSigned );\n    if (!ok) return 0;\n    if (fSigned)\n    {\n        if (((INT)result < -32767) || ((INT)result > 32767)) return 0;\n    }\n    else\n    {\n        if (result > 65535) return 0;\n    }\n    if (translated) *translated = TRUE;\n    return (UINT16)result;\n}\n\n\n/**************************************************************************\n *              CheckRadioButton   (USER.96)\n */\nBOOL16 WINAPI CheckRadioButton16( HWND16 hwndDlg, UINT16 firstID,\n                                  UINT16 lastID, UINT16 checkID )\n{\n    return CheckRadioButton( WIN_Handle32(hwndDlg), firstID, lastID, checkID );\n}\n\n\n/**************************************************************************\n *              CheckDlgButton   (USER.97)\n */\nBOOL16 WINAPI CheckDlgButton16( HWND16 hwnd, INT16 id, UINT16 check )\n{\n    SendDlgItemMessage16( hwnd, id, BM_SETCHECK16, check, 0 );\n    return TRUE;\n}\n\n\n/**************************************************************************\n *              IsDlgButtonChecked   (USER.98)\n */\nUINT16 WINAPI IsDlgButtonChecked16( HWND16 hwnd, UINT16 id )\n{\n    return (UINT16)SendDlgItemMessage16( hwnd, id, BM_GETCHECK16, 0, 0 );\n}\n\n\n/**************************************************************************\n *              DlgDirSelect   (USER.99)\n */\nBOOL16 WINAPI DlgDirSelect16( HWND16 hwnd, LPSTR str, INT16 id )\n{\n    return DlgDirSelectEx16( hwnd, str, 128, id );\n}\n\n\n/**************************************************************************\n *              DlgDirList   (USER.100)\n */\nINT16 WINAPI DlgDirList16( HWND16 hDlg, LPSTR spec, INT16 idLBox,\n                           INT16 idStatic, UINT16 attrib )\n{\n    /* according to Win16 docs, DDL_DRIVES should make DDL_EXCLUSIVE\n     * be set automatically (this is different in Win32, and\n     * DIALOG_DlgDirList sends Win32 messages to the control,\n     * so do it here) */\n    if (attrib == DDL_DRIVES) attrib |= DDL_EXCLUSIVE;\n    return DlgDirListA( WIN_Handle32(hDlg), spec, idLBox, idStatic, attrib );\n}\n\n\n/**************************************************************************\n *              SendDlgItemMessage   (USER.101)\n */\nLRESULT WINAPI SendDlgItemMessage16( HWND16 hwnd, INT16 id, UINT16 msg,\n                                     WPARAM16 wParam, LPARAM lParam )\n{\n    HWND16 hwndCtrl = GetDlgItem16( hwnd, id );\n    if (hwndCtrl) return SendMessage16( hwndCtrl, msg, wParam, lParam );\n    else return 0;\n}\n\n\n/**************************************************************************\n *              MapDialogRect   (USER.103)\n */\nvoid WINAPI MapDialogRect16( HWND16 hwnd, LPRECT16 rect )\n{\n    RECT rect32 = { rect->left, rect->top, rect->right, rect->bottom };\n    MapDialogRect( WIN_Handle32(hwnd), &rect32 );\n    rect->left   = rect32.left;\n    rect->right  = rect32.right;\n    rect->top    = rect32.top;\n    rect->bottom = rect32.bottom;\n}\n\n\n/**************************************************************************\n *              DlgDirSelectComboBox   (USER.194)\n */\nBOOL16 WINAPI DlgDirSelectComboBox16( HWND16 hwnd, LPSTR str, INT16 id )\n{\n    return DlgDirSelectComboBoxEx16( hwnd, str, 128, id );\n}\n\n\n/**************************************************************************\n *              DlgDirListComboBox   (USER.195)\n */\nINT16 WINAPI DlgDirListComboBox16( HWND16 hDlg, LPSTR spec, INT16 idCBox,\n                                   INT16 idStatic, UINT16 attrib )\n{\n    return DlgDirListComboBoxA( WIN_Handle32(hDlg), spec, idCBox, idStatic, attrib );\n}\n\n\n/***********************************************************************\n *\t\tDialogBoxIndirect (USER.218)\n */\nINT16 WINAPI DialogBoxIndirect16( HINSTANCE16 hInst, HANDLE16 dlgTemplate,\n                                  HWND16 owner, DLGPROC16 dlgProc )\n{\n    return DialogBoxIndirectParam16( hInst, dlgTemplate, owner, dlgProc, 0 );\n}\n\n\n/***********************************************************************\n *\t\tCreateDialogIndirect (USER.219)\n */\nHWND16 WINAPI CreateDialogIndirect16( HINSTANCE16 hInst, SEGPTR dlgTemplate,\n                                      HWND16 owner, DLGPROC16 dlgProc )\n{\n    return CreateDialogIndirectParam16( hInst, dlgTemplate, owner, dlgProc, 0);\n}\n\n\n/**************************************************************************\n *              GetNextDlgGroupItem   (USER.227)\n */\nHWND16 WINAPI GetNextDlgGroupItem16( HWND16 hwndDlg, HWND16 hwndCtrl,\n                                     BOOL16 fPrevious )\n{\n    return HWND_16( GetNextDlgGroupItem( WIN_Handle32(hwndDlg), WIN_Handle32(hwndCtrl), fPrevious ));\n}\n\n\n/**************************************************************************\n *              GetNextDlgTabItem   (USER.228)\n */\nHWND16 WINAPI GetNextDlgTabItem16( HWND16 hwndDlg, HWND16 hwndCtrl,\n                                   BOOL16 fPrevious )\n{\n    return HWND_16( GetNextDlgTabItem( WIN_Handle32(hwndDlg), WIN_Handle32(hwndCtrl), fPrevious ));\n}\n\n\n/***********************************************************************\n *\t\tDialogBoxParam (USER.239)\n */\nINT16 WINAPI DialogBoxParam16( HINSTANCE16 hInst, LPCSTR template,\n                               HWND16 owner16, DLGPROC16 dlgProc, LPARAM param )\n{\n    HWND hwnd = 0;\n    HRSRC16 hRsrc;\n    HGLOBAL16 hmem;\n    SEGPTR data;\n    int ret = -1;\n\n    if (!(hRsrc = FindResource16( hInst, template, (LPSTR)RT_DIALOG ))) return -1;\n    if (!(hmem = LoadResource16( hInst, hRsrc ))) return -1;\n    if ((data = WOWGlobalLock16( hmem )))\n    {\n        HWND owner = WIN_Handle32(owner16);\n        hwnd = DIALOG_CreateIndirect16( hInst, data, owner, dlgProc, param, TRUE );\n        GlobalUnlock16( hmem );\n        return hwnd;\n    }\n    FreeResource16( hmem );\n    return ret;\n}\n\n\n/***********************************************************************\n *\t\tDialogBoxIndirectParam (USER.240)\n */\nINT16 WINAPI DialogBoxIndirectParam16( HINSTANCE16 hInst, HANDLE16 dlgTemplate,\n                                       HWND16 owner16, DLGPROC16 dlgProc, LPARAM param )\n{\n    HWND hwnd, owner = WIN_Handle32( owner16 );\n    SEGPTR ptr;\n\n    if (!(ptr = WOWGlobalLock16( dlgTemplate ))) return -1;\n    hwnd = DIALOG_CreateIndirect16( hInst, ptr, owner, dlgProc, param, TRUE );\n    GlobalUnlock16( dlgTemplate );\n    return hwnd;\n}\n\n\n/***********************************************************************\n *\t\tCreateDialogParam (USER.241)\n */\nHWND16 WINAPI CreateDialogParam16( HINSTANCE16 hInst, LPCSTR dlgTemplate,\n                                   HWND16 owner, DLGPROC16 dlgProc, LPARAM param )\n{\n    HWND16 hwnd = 0;\n    HRSRC16 hRsrc;\n    HGLOBAL16 hmem;\n    SEGPTR data;\n\n    TRACE(\"%04x,%s,%04x,%p,%ld\\n\",\n          hInst, debugstr_a(dlgTemplate), owner, dlgProc, param );\n\n    if (!(hRsrc = FindResource16( hInst, dlgTemplate, (LPSTR)RT_DIALOG ))) return 0;\n    if (!(hmem = LoadResource16( hInst, hRsrc ))) return 0;\n    if (!(data = WOWGlobalLock16( hmem ))) hwnd = 0;\n    else hwnd = CreateDialogIndirectParam16( hInst, data, owner, dlgProc, param );\n    FreeResource16( hmem );\n    return hwnd;\n}\n\n\n/***********************************************************************\n *\t\tCreateDialogIndirectParam (USER.242)\n */\nHWND16 WINAPI CreateDialogIndirectParam16( HINSTANCE16 hInst, SEGPTR dlgTemplate,\n                                           HWND16 owner, DLGPROC16 dlgProc, LPARAM param )\n{\n    if (!dlgTemplate) return 0;\n    return HWND_16( DIALOG_CreateIndirect16( hInst, dlgTemplate, WIN_Handle32(owner),\n                                             dlgProc, param, FALSE ));\n}\n\n\n/**************************************************************************\n *              DlgDirSelectEx   (USER.422)\n */\nBOOL16 WINAPI DlgDirSelectEx16( HWND16 hwnd, LPSTR str, INT16 len, INT16 id )\n{\n    return DlgDirSelectExA( WIN_Handle32(hwnd), str, len, id );\n}\n\n\n/**************************************************************************\n *              DlgDirSelectComboBoxEx   (USER.423)\n */\nBOOL16 WINAPI DlgDirSelectComboBoxEx16( HWND16 hwnd, LPSTR str, INT16 len,\n                                        INT16 id )\n{\n    return DlgDirSelectComboBoxExA( WIN_Handle32(hwnd), str, len, id );\n}\n\nLONG WINAPI GetDialogBaseUnits16(VOID)\n{\n    return GetDialogBaseUnits();\n}\n"
  },
  {
    "path": "user/hook.c",
    "content": "/*\n * Windows 16-bit hook functions\n *\n * Copyright 1994, 1995, 2002 Alexandre Julliard\n * Copyright 1996 Andrew Lewycky\n *\n * Based on investigations by Alex Korobka\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winuser.h\"\n#include \"wownt32.h\"\n#include \"wine/winuser16.h\"\n#include \"user_private.h\"\n#include \"wine/debug.h\"\n#undef _WINTERNL_\n#include \"winternl.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(hook);\n\n\nstatic BOOL WINAPI TebTlsSetValue(TEB *teb, DWORD index, LPVOID value)\n{\n    if (index < TLS_MINIMUM_AVAILABLE)\n    {\n        teb->TlsSlots[index] = value;\n    }\n    else\n    {\n        index -= TLS_MINIMUM_AVAILABLE;\n        if (index >= 8 * 32 /* 8 * sizeof(teb->Peb->TlsExpansionBitmapBits) */)\n        {\n            return FALSE;\n        }\n        ((PVOID*)teb->TlsExpansionSlots)[index] = value;\n    }\n    return TRUE;\n}\n\nstatic LPVOID WINAPI TebTlsGetValue(TEB *teb, DWORD index)\n{\n    LPVOID ret;\n\n    if (index < TLS_MINIMUM_AVAILABLE)\n    {\n        ret = teb->TlsSlots[index];\n    }\n    else\n    {\n        index -= TLS_MINIMUM_AVAILABLE;\n        if (index >= 8 * 32 /* 8 * sizeof(teb->Peb->TlsExpansionBitmapBits) */)\n        {\n            return NULL;\n        }\n        if (!teb->TlsExpansionSlots) ret = NULL;\n        else ret = ((PVOID*)teb->TlsExpansionSlots)[index];\n    }\n    return ret;\n}\n\nstatic LRESULT CALLBACK task_call_WH_MSGFILTER( INT code, WPARAM wp, LPARAM lp );\nstatic LRESULT CALLBACK task_call_WH_KEYBOARD( INT code, WPARAM wp, LPARAM lp );\nstatic LRESULT CALLBACK task_call_WH_GETMESSAGE( INT code, WPARAM wp, LPARAM lp );\nstatic LRESULT CALLBACK task_call_WH_CALLWNDPROC( INT code, WPARAM wp, LPARAM lp );\nstatic LRESULT CALLBACK task_call_WH_CBT( INT code, WPARAM wp, LPARAM lp );\nstatic LRESULT CALLBACK task_call_WH_SYSMSGFILTER( INT code, WPARAM wp, LPARAM lp );\nstatic LRESULT CALLBACK task_call_WH_MOUSE( INT code, WPARAM wp, LPARAM lp );\nstatic LRESULT CALLBACK task_call_WH_SHELL( INT code, WPARAM wp, LPARAM lp );\n\nstatic LRESULT CALLBACK global_call_WH_MSGFILTER(INT code, WPARAM wp, LPARAM lp);\nstatic LRESULT CALLBACK global_call_WH_KEYBOARD(INT code, WPARAM wp, LPARAM lp);\nstatic LRESULT CALLBACK global_call_WH_GETMESSAGE(INT code, WPARAM wp, LPARAM lp);\nstatic LRESULT CALLBACK global_call_WH_CALLWNDPROC(INT code, WPARAM wp, LPARAM lp);\nstatic LRESULT CALLBACK global_call_WH_CBT(INT code, WPARAM wp, LPARAM lp);\nstatic LRESULT CALLBACK global_call_WH_SYSMSGFILTER(INT code, WPARAM wp, LPARAM lp);\nstatic LRESULT CALLBACK global_call_WH_MOUSE(INT code, WPARAM wp, LPARAM lp);\nstatic LRESULT CALLBACK global_call_WH_SHELL(INT code, WPARAM wp, LPARAM lp);\n\n#define WH_MAXHOOK16 WH_SHELL  /* Win16 only supports up to WH_SHELL */\n#define NB_HOOKS16 (WH_MAXHOOK16 - WH_MINHOOK + 1)\n\nstatic const HOOKPROC hook_procs[NB_HOOKS16] =\n{\n    task_call_WH_MSGFILTER,   /* WH_MSGFILTER\t*/\n    NULL,                /* WH_JOURNALRECORD */\n    (HOOKPROC)-1,        /* WH_JOURNALPLAYBACK */\n    task_call_WH_KEYBOARD,    /* WH_KEYBOARD */\n    task_call_WH_GETMESSAGE,  /* WH_GETMESSAGE */\n    task_call_WH_CALLWNDPROC, /* WH_CALLWNDPROC */\n    task_call_WH_CBT,         /* WH_CBT */\n    task_call_WH_SYSMSGFILTER, /* WH_SYSMSGFILTER */\n    task_call_WH_MOUSE,       /* WH_MOUSE */\n    NULL,                /* WH_HARDWARE */\n    NULL,                /* WH_DEBUG */\n    task_call_WH_SHELL        /* WH_SHELL */\n};\n\n\nstatic const HOOKPROC global_hook_procs[NB_HOOKS16] =\n{\n    global_call_WH_MSGFILTER,   /* WH_MSGFILTER\t*/\n    NULL,                /* WH_JOURNALRECORD */\n    (HOOKPROC) - 1,        /* WH_JOURNALPLAYBACK */\n    global_call_WH_KEYBOARD,    /* WH_KEYBOARD */\n    global_call_WH_GETMESSAGE,  /* WH_GETMESSAGE */\n    global_call_WH_CALLWNDPROC, /* WH_CALLWNDPROC */\n    global_call_WH_CBT,         /* WH_CBT */\n    global_call_WH_SYSMSGFILTER, /* WH_SYSMSGFILTER */\n    global_call_WH_MOUSE,       /* WH_MOUSE */\n    NULL,                /* WH_HARDWARE */\n    NULL,                /* WH_DEBUG */\n    global_call_WH_SHELL        /* WH_SHELL */\n};\n\nstruct hook_entry\n{\n    struct list entry;\n    SEGPTR proc16;\n    HTASK16 htask16;\n    HINSTANCE16 hinst16;\n    INT type;\n    BOOL global;\n    BOOL deleted;\n};\n\nextern HQUEUE16 hqFirst;\nstatic CRITICAL_SECTION global_hook_section;\nstatic CRITICAL_SECTION_DEBUG global_hook_section_debug =\n{\n    0, 0, &global_hook_section,\n    { &global_hook_section_debug.ProcessLocksList, &global_hook_section_debug.ProcessLocksList },\n      0, 0, { (DWORD_PTR)(__FILE__ \": global hook\") }\n};\nstatic CRITICAL_SECTION global_hook_section = { &global_hook_section_debug, -1, 0, 0, 0, 0 };\nstruct list global_hook_entry[NB_HOOKS16] =\n{\n    LIST_INIT(global_hook_entry[0]),\n    LIST_INIT(global_hook_entry[1]),\n    LIST_INIT(global_hook_entry[2]),\n    LIST_INIT(global_hook_entry[3]),\n    LIST_INIT(global_hook_entry[4]),\n    LIST_INIT(global_hook_entry[5]),\n    LIST_INIT(global_hook_entry[6]),\n    LIST_INIT(global_hook_entry[7]),\n    LIST_INIT(global_hook_entry[8]),\n    LIST_INIT(global_hook_entry[9]),\n    LIST_INIT(global_hook_entry[10]),\n    LIST_INIT(global_hook_entry[11]),\n};\nstruct hook16_queue_info\n{\n    HHOOK       hhook[NB_HOOKS16];\n    struct list hook_entry[NB_HOOKS16];\n    HHOOK       global_hhook[NB_HOOKS16];\n};\n\nstatic struct hook16_queue_info *get_hook_info( BOOL create, HTASK16 hTask )\n{\n    static DWORD hook_tls = TLS_OUT_OF_INDEXES;\n    struct hook16_queue_info *info;\n    TDB *tdb;\n    if (!hTask /* current task */)\n    {\n        info = (struct hook16_queue_info*)TlsGetValue( hook_tls );\n    }\n    else\n    {\n        tdb = GlobalLock16(hTask);\n        info = (struct hook16_queue_info*)TebTlsGetValue( tdb->teb, hook_tls );\n    }\n    if (!info && create)\n    {\n        if (hook_tls == TLS_OUT_OF_INDEXES) hook_tls = TlsAlloc();\n        info = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*info) );\n        if (!hTask /* current task */)\n        {\n            TlsSetValue( hook_tls, info );\n        }\n        else\n        {\n            TebTlsSetValue( tdb->teb, hook_tls, info );\n        }\n    }\n    return info;\n}\n\n\n#define HHOOK_HIGHWORD MAKEWORD('H', 'K')\n#define HOOK_MAX 200\n/* free list */\nstruct hook_entry *hook_free;\nstruct list hook_free_list = LIST_INIT(hook_free_list);\n\nstatic void init_hook()\n{\n    if (hook_free)\n        return;\n    hook_free = HeapAlloc(GetProcessHeap(), 0, HOOK_MAX * sizeof(struct hook_entry));\n    for (int i = 1; i < HOOK_MAX; i++)\n    {\n        list_add_tail(&hook_free_list, &hook_free[i].entry);\n        hook_free[i].deleted = TRUE;\n    }\n}\n\nstatic struct hook_entry *allocate_hook()\n{\n    struct list *alloc;\n    struct hook_entry *entry;\n    init_hook();\n    alloc = list_head(&hook_free_list);\n    if (!alloc)\n    {\n        ERR(\"could not allocate HHOOK\\n\");\n        return NULL;\n    }\n    list_remove(alloc);\n    entry = LIST_ENTRY(alloc, struct hook_entry, entry);\n    entry->deleted = FALSE;\n    return entry;\n}\n\nstatic void free_hook(struct hook_entry *entry)\n{\n    entry->deleted = TRUE;\n    list_add_tail(&hook_free_list, &entry->entry);\n}\n\n/*\n * HHOOK (~Windows 3.0)\n * https://devblogs.microsoft.com/oldnewthing/20060809-18/?p=30183\n * https://devblogs.microsoft.com/oldnewthing/20060810-06/?p=30173\n * HHOOK (Windows 3.1~)\n * HIWORD: 'HK'\n * LOWORD: near pointer?\n * LOWORD: index (NTVDM)\n */\nstatic HHOOK entry_to_hhook(struct hook_entry *entry)\n{\n    if (entry->deleted)\n        return NULL;\n    if (hook_free <= entry && hook_free + HOOK_MAX >= entry)\n        return (HHOOK)MAKELONG((WORD)(entry - hook_free), HHOOK_HIGHWORD);\n    return NULL;\n}\nstatic struct hook_entry *hhook_to_entry(HHOOK hhook)\n{\n    struct hook_entry *entry = (struct hook_entry*)(LOWORD(hhook) + hook_free);\n    if (HIWORD(hhook) != HHOOK_HIGHWORD)\n        return NULL;\n    if (entry->deleted)\n        return NULL;\n    return entry;\n}\n\n/***********************************************************************\n *           map_msg_16_to_32\n */\nstatic inline void map_msg_16_to_32( const MSG16 *msg16, MSG *msg32 )\n{\n    msg32->hwnd    = WIN_Handle32(msg16->hwnd);\n    msg32->message = msg16->message;\n    msg32->wParam  = msg16->wParam;\n    msg32->lParam  = msg16->lParam;\n    msg32->time    = msg16->time;\n    msg32->pt.x    = msg16->pt.x;\n    msg32->pt.y    = msg16->pt.y;\n}\n\n\n/***********************************************************************\n *           map_msg_32_to_16\n */\nstatic inline void map_msg_32_to_16( const MSG *msg32, MSG16 *msg16 )\n{\n    msg16->hwnd    = HWND_16(msg32->hwnd);\n    msg16->message = msg32->message;\n    msg16->wParam  = msg32->wParam;\n    msg16->lParam  = msg32->lParam;\n    msg16->time    = msg32->time;\n    msg16->pt.x    = msg32->pt.x;\n    msg16->pt.y    = msg32->pt.y;\n}\n\n\nstatic LRESULT call_hook_entry_16(struct hook16_queue_info *info, struct hook_entry *hook_entry, INT id, INT code, WPARAM wp, LPARAM lp);\n/***********************************************************************\n *           call_hook_16\n */\nstatic LRESULT call_hook_16( INT id, INT code, WPARAM wp, LPARAM lp, BOOL global )\n{\n    _EnterWin16Lock();\n    struct hook16_queue_info *info = get_hook_info(FALSE, 0);\n    struct list *head = list_head(&(global ? global_hook_entry : info->hook_entry)[id - WH_MIN]);\n    LRESULT result = 0;\n    if (head)\n    {\n        struct hook_entry *hook_entry = LIST_ENTRY(head, struct hook_entry, entry);\n        result = call_hook_entry_16(info, hook_entry, id, code, wp, lp);\n    }\n    _LeaveWin16Lock();\n    return result;\n}\nstatic LRESULT call_hook_entry_16( struct hook16_queue_info *info, struct hook_entry *hook_entry, INT id, INT code, WPARAM wp, LPARAM lp )\n{\n    WORD args[4];\n    DWORD ret;\n    CONTEXT context;\n\n    args[3] = code;\n    args[2] = wp;\n    args[1] = HIWORD(lp);\n    args[0] = LOWORD(lp);\n    memset(&context, 0, sizeof(context));\n    context.SegDs = context.SegEs = SELECTOROF(getWOW32Reserved());\n    context.SegFs = wine_get_fs();\n    context.SegGs = wine_get_gs();\n    context.Eax = context.SegDs;\n    context.SegCs = SELECTOROF((DWORD)hook_entry->proc16);\n    context.Eip = OFFSETOF((DWORD)hook_entry->proc16);\n    context.Ebp = OFFSETOF(getWOW32Reserved()) + FIELD_OFFSET(STACK16FRAME, bp);\n    WOWCallback16Ex( (DWORD)hook_entry->proc16, WCB16_REGS | WCB16_PASCAL, sizeof(args), args, (LPDWORD)&context );\n\n    ret = MAKELONG(LOWORD(context.Eax), LOWORD(context.Edx));\n\n    /* Grrr. While the hook procedure is supposed to have an LRESULT return\n       value even in Win16, it seems that for those hook types where the\n       return value is interpreted as BOOL, Windows doesn't actually check\n       the HIWORD ...  Some buggy Win16 programs, notably WINFILE, rely on\n       that, because they neglect to clear DX ... */\n    if (id != WH_JOURNALPLAYBACK) ret = LOWORD( ret );\n    return ret;\n}\n\n\nstruct wndproc_hook_params\n{\n    HHOOK  hhook;\n    INT    code;\n    WPARAM wparam;\n    BOOL global;\n};\n\n/* callback for WINPROC_Call16To32A */\nstatic LRESULT wndproc_hook_callback( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp,\n                                      LRESULT *result, void *arg )\n{\n    struct wndproc_hook_params *params = arg;\n    CWPSTRUCT cwp;\n\n    cwp.hwnd    = hwnd;\n    cwp.message = msg;\n    cwp.wParam  = wp;\n    cwp.lParam  = lp;\n    *result = 0;\n    return CallNextHookEx( params->hhook, params->code, params->wparam, (LPARAM)&cwp );\n}\n\n/* callback for WINPROC_Call32ATo16 */\nstatic LRESULT wndproc_hook_callback16( HWND16 hwnd, UINT16 msg, WPARAM16 wp, LPARAM lp,\n                                        LRESULT *result, void *arg )\n{\n    struct wndproc_hook_params *params = (struct wndproc_hook_params*)arg;\n    CWPSTRUCT16 cwp;\n    LRESULT ret;\n\n    cwp.hwnd    = hwnd;\n    cwp.message = msg;\n    cwp.wParam  = wp;\n    cwp.lParam  = lp;\n\n    lp = MapLS( &cwp );\n    ret = call_hook_16( WH_CALLWNDPROC, params->code, params->wparam, lp, params->global );\n    UnMapLS( lp );\n\n    *result = 0;\n    return ret;\n}\n\nstruct msgfilter_hook_params\n{\n    HHOOK  hhook;\n    INT    code;\n    DWORD  time;\n    POINT  pt;\n    WPARAM wparam;\n    BOOL   global;\n    INT    type;\n};\n\nstatic LRESULT msgfilter_hook_callback16( HWND16 hwnd, UINT16 msg, WPARAM16 wp, LPARAM lp,\n                                        LRESULT *result, void *arg )\n{\n    struct msgfilter_hook_params *params = (struct msgfilter_hook_params*)arg;\n    MSG16 msg16;\n    LRESULT ret;\n\n    msg16.hwnd    = hwnd;\n    msg16.message = msg;\n    msg16.wParam  = wp;\n    msg16.lParam  = lp;\n    msg16.time    = params->time;\n    msg16.pt.x    = params->pt.x;\n    msg16.pt.y    = params->pt.y;\n\n    lp = MapLS( &msg16 );\n    ret = call_hook_16( params->type, params->code, params->wparam, lp, params->global );\n    UnMapLS( lp );\n\n    *result = 0;\n    return ret;\n}\n\n/* helper for SendMessage16 */\nvoid call_WH_CALLWNDPROC_hook( HWND16 hwnd, UINT16 *msg, WPARAM16 *wp, LPARAM *lp )\n{\n    CWPSTRUCT16 cwp;\n    SEGPTR lpcwp = 0;\n    struct hook16_queue_info *info = get_hook_info( FALSE, 0 );\n\n    if (!info || (!info->hhook[WH_CALLWNDPROC - WH_MINHOOK] && !info->global_hhook[WH_CALLWNDPROC - WH_MINHOOK])) return;\n\n    cwp.hwnd    = hwnd;\n    cwp.message = *msg;\n    cwp.wParam  = *wp;\n    cwp.lParam  = *lp;\n\n    lpcwp = MapLS( &cwp );\n\n    if (info->global_hhook[WH_CALLWNDPROC - WH_MINHOOK])\n        call_hook_16(WH_CALLWNDPROC, HC_ACTION, 1, lpcwp, TRUE);\n    if (info->hhook[WH_CALLWNDPROC - WH_MINHOOK])\n        call_hook_16(WH_CALLWNDPROC, HC_ACTION, 1, lpcwp, FALSE);\n    UnMapLS( lpcwp );\n    *msg = cwp.message;\n    *wp = cwp.wParam;\n    *lp = cwp.lParam;\n}\n\nHHOOK get_hhook(INT code, BOOL global)\n{\n    if (global)\n    {\n        return get_hook_info(FALSE, 0)->global_hhook[code - WH_MIN];\n    }\n    return get_hook_info(FALSE, 0)->hhook[code - WH_MIN];\n}\n\n/***********************************************************************\n *\t\tcall_WH_MSGFILTER\n */\nstatic LRESULT CALLBACK call_WH_MSGFILTER( INT code, WPARAM wp, LPARAM lp, BOOL global )\n{\n    MSG *msg32 = (MSG *)lp;\n    MSG16 msg16;\n    MSG16 *thunk;\n    LRESULT ret;\n    CallNextHookEx(get_hhook(WH_MSGFILTER, global), code, wp, lp);\n\n    if (thunk = (MSG16 *)GetPropA(msg32->hwnd, \"dialogmsgthunk\"))\n        ret = call_hook_16( WH_MSGFILTER, code, wp, thunk, global);\n    else\n    {\n        struct msgfilter_hook_params params;\n        MSG *msg = (MSG *)lp;\n        LRESULT result;\n\n        params.time   = msg->time;\n        params.pt.x   = msg->pt.x;\n        params.pt.y   = msg->pt.y;\n        params.code   = code;\n        params.wparam = wp;\n        params.global = global;\n        params.type   = WH_MSGFILTER; \n        return WINPROC_CallProc32ATo16( msgfilter_hook_callback16, msg->hwnd, msg->message,\n                                    msg->wParam, msg->lParam, &result, &params );\n    }\n    return ret;\n}\n\nstatic LRESULT CALLBACK task_call_WH_MSGFILTER(INT code, WPARAM wp, LPARAM lp)\n{\n    return call_WH_MSGFILTER(code, wp, lp, FALSE);\n}\n\nstatic LRESULT CALLBACK global_call_WH_MSGFILTER(INT code, WPARAM wp, LPARAM lp)\n{\n    return call_WH_MSGFILTER(code, wp, lp, TRUE);\n}\n\n\n/***********************************************************************\n *\t\tcall_WH_KEYBOARD\n */\nstatic LRESULT CALLBACK call_WH_KEYBOARD( INT code, WPARAM wp, LPARAM lp, BOOL global )\n{\n    CallNextHookEx(get_hhook(WH_KEYBOARD, global), code, wp, lp);\n    return call_hook_16( WH_KEYBOARD, code, wp, lp, global );\n}\n\n\nstatic LRESULT CALLBACK task_call_WH_KEYBOARD(INT code, WPARAM wp, LPARAM lp)\n{\n    return call_WH_KEYBOARD(code, wp, lp, FALSE);\n}\n\nstatic LRESULT CALLBACK global_call_WH_KEYBOARD(INT code, WPARAM wp, LPARAM lp)\n{\n    return call_WH_KEYBOARD(code, wp, lp, TRUE);\n}\n\n/***********************************************************************\n *\t\tcall_WH_GETMESSAGE\n */\nstatic LRESULT CALLBACK call_WH_GETMESSAGE( INT code, WPARAM wp, LPARAM lp, BOOL global )\n{\n    struct msgfilter_hook_params params;\n    MSG *msg = (MSG *)lp;\n    LRESULT result;\n    CallNextHookEx(get_hhook(WH_GETMESSAGE, global), code, wp, lp);\n\n    params.time   = msg->time;\n    params.pt.x   = msg->pt.x;\n    params.pt.y   = msg->pt.y;\n    params.code   = code;\n    params.wparam = wp;\n    params.global = global;\n    params.type   = WH_GETMESSAGE; \n    return WINPROC_CallProc32ATo16( msgfilter_hook_callback16, msg->hwnd, msg->message,\n                    msg->wParam, msg->lParam, &result, &params );\n}\n\n\nstatic LRESULT CALLBACK task_call_WH_GETMESSAGE(INT code, WPARAM wp, LPARAM lp)\n{\n    return call_WH_GETMESSAGE(code, wp, lp, FALSE);\n}\n\nstatic LRESULT CALLBACK global_call_WH_GETMESSAGE(INT code, WPARAM wp, LPARAM lp)\n{\n    return call_WH_GETMESSAGE(code, wp, lp, TRUE);\n}\n\n/***********************************************************************\n *\t\tcall_WH_CALLWNDPROC\n */\nstatic LRESULT CALLBACK call_WH_CALLWNDPROC( INT code, WPARAM wp, LPARAM lp, BOOL global )\n{\n    struct wndproc_hook_params params;\n    CWPSTRUCT *cwp32 = (CWPSTRUCT *)lp;\n    LRESULT result;\n    CallNextHookEx(get_hhook(WH_CALLWNDPROC, global), code, wp, lp);\n\n    params.code   = code;\n    params.wparam = wp;\n    params.global = global;\n    return WINPROC_CallProc32ATo16( wndproc_hook_callback16, cwp32->hwnd, cwp32->message,\n                                    cwp32->wParam, cwp32->lParam, &result, &params );\n}\n\n\nstatic LRESULT CALLBACK task_call_WH_CALLWNDPROC(INT code, WPARAM wp, LPARAM lp)\n{\n    return call_WH_CALLWNDPROC(code, wp, lp, FALSE);\n}\n\nstatic LRESULT CALLBACK global_call_WH_CALLWNDPROC(INT code, WPARAM wp, LPARAM lp)\n{\n    return call_WH_CALLWNDPROC(code, wp, lp, TRUE);\n}\n\n/***********************************************************************\n *\t\tcall_WH_CBT\n */\nstatic LRESULT CALLBACK call_WH_CBT( INT code, WPARAM wp, LPARAM lp, BOOL global )\n{\n    LRESULT ret = 0;\n    CallNextHookEx(get_hhook(WH_CBT, global), code, wp, lp);\n\n    switch (code)\n    {\n    case HCBT_CREATEWND:\n        {\n            CBT_CREATEWNDA *cbtcw32 = (CBT_CREATEWNDA *)lp;\n            CBT_CREATEWND16 cbtcw16;\n            CREATESTRUCT16 cs16;\n\n            cs16.lpCreateParams = (SEGPTR)cbtcw32->lpcs->lpCreateParams;\n            cs16.hInstance      = HINSTANCE_16(cbtcw32->lpcs->hInstance);\n            cs16.hMenu          = HMENU_16(cbtcw32->lpcs->hMenu);\n            cs16.hwndParent     = HWND_16(cbtcw32->lpcs->hwndParent);\n            cs16.cy             = cbtcw32->lpcs->cy;\n            cs16.cx             = cbtcw32->lpcs->cx;\n            cs16.y              = cbtcw32->lpcs->y;\n            cs16.x              = cbtcw32->lpcs->x;\n            cs16.style          = cbtcw32->lpcs->style;\n            cs16.lpszName       = MapLS( cbtcw32->lpcs->lpszName );\n            cs16.lpszClass      = MapLS( win16classname(cbtcw32->lpcs->lpszClass) );\n            cs16.dwExStyle      = cbtcw32->lpcs->dwExStyle;\n\n            cbtcw16.lpcs = (CREATESTRUCT16 *)MapLS( &cs16 );\n            cbtcw16.hwndInsertAfter = HWND_16( cbtcw32->hwndInsertAfter );\n\n            lp = MapLS( &cbtcw16 );\n            ret = call_hook_16( WH_CBT, code, HWND_16(wp), lp, global );\n            UnMapLS( cs16.lpszName );\n            UnMapLS( cs16.lpszClass );\n\n            cbtcw32->hwndInsertAfter = WIN_Handle32( cbtcw16.hwndInsertAfter );\n            UnMapLS( (SEGPTR)cbtcw16.lpcs );\n            UnMapLS( lp );\n            break;\n        }\n\n    case HCBT_ACTIVATE:\n        {\n            CBTACTIVATESTRUCT *cas32 = (CBTACTIVATESTRUCT *)lp;\n            CBTACTIVATESTRUCT16 cas16;\n\n            cas16.fMouse     = cas32->fMouse;\n            cas16.hWndActive = HWND_16( cas32->hWndActive );\n\n            lp = MapLS( &cas16 );\n            ret = call_hook_16( WH_CBT, code, HWND_16(wp), lp, global );\n            UnMapLS( lp );\n            break;\n        }\n    case HCBT_CLICKSKIPPED:\n        {\n            MOUSEHOOKSTRUCT *ms32 = (MOUSEHOOKSTRUCT *)lp;\n            MOUSEHOOKSTRUCT16 ms16;\n\n            ms16.pt.x         = ms32->pt.x;\n            ms16.pt.y         = ms32->pt.y;\n            ms16.hwnd         = HWND_16( ms32->hwnd );\n            ms16.wHitTestCode = ms32->wHitTestCode;\n            ms16.dwExtraInfo  = ms32->dwExtraInfo;\n\n            lp = MapLS( &ms16 );\n            ret = call_hook_16( WH_CBT, code, wp, lp, global );\n            UnMapLS( lp );\n            break;\n        }\n    case HCBT_MOVESIZE:\n        {\n            RECT *rect32 = (RECT *)lp;\n            RECT16 rect16;\n\n            rect16.left   = rect32->left;\n            rect16.top    = rect32->top;\n            rect16.right  = rect32->right;\n            rect16.bottom = rect32->bottom;\n            lp = MapLS( &rect16 );\n            ret = call_hook_16( WH_CBT, code, HWND_16(wp), lp, global );\n            UnMapLS( lp );\n            break;\n    }\n    case HCBT_MINMAX:\n    {\n        ret = call_hook_16(WH_CBT, code, HWND_16(wp), lp, global);\n        break;\n    }\n    case HCBT_QS:\n    {\n        ret = call_hook_16(WH_CBT, code, wp, lp, global);\n        break;\n    }\n    case HCBT_DESTROYWND:\n    {\n        ret = call_hook_16(WH_CBT, code, HWND_16(wp), lp, global);\n        break;\n    }\n    case HCBT_KEYSKIPPED:\n    {\n        ret = call_hook_16(WH_CBT, code, wp, lp, global);\n        break;\n    }\n    case HCBT_SYSCOMMAND:\n    {\n        ret = call_hook_16(WH_CBT, code, wp, lp, global);\n        break;\n    }\n    case HCBT_SETFOCUS:\n    {\n        ret = call_hook_16(WH_CBT, code, HWND_16(wp), HWND_16(lp), global);\n        break;\n    }\n    default:\n        ERR(\"unknown wndproc hook code:%04X, wParam=%p, lParam=%p\\n\", code, wp, lp);\n    }\n    return ret;\n}\n\n\nstatic LRESULT CALLBACK task_call_WH_CBT(INT code, WPARAM wp, LPARAM lp)\n{\n    return call_WH_CBT(code, wp, lp, FALSE);\n}\n\nstatic LRESULT CALLBACK global_call_WH_CBT(INT code, WPARAM wp, LPARAM lp)\n{\n    return call_WH_CBT(code, wp, lp, TRUE);\n}\n\n/***********************************************************************\n *\t\tcall_WH_SYSMSGFILTER\n */\nstatic LRESULT CALLBACK call_WH_SYSMSGFILTER( INT code, WPARAM wp, LPARAM lp, BOOL global )\n{\n    MSG *msg32 = (MSG *)lp;\n    MSG16 msg16;\n    LRESULT ret;\n    CallNextHookEx(get_hhook(WH_SYSMSGFILTER, global), code, wp, lp);\n\n    map_msg_32_to_16( msg32, &msg16 );\n    lp = MapLS( &msg16 );\n    ret = call_hook_16( WH_SYSMSGFILTER, code, wp, lp, global);\n    UnMapLS( lp );\n    return ret;\n}\n\nstatic LRESULT CALLBACK task_call_WH_SYSMSGFILTER(INT code, WPARAM wp, LPARAM lp)\n{\n    return call_WH_SYSMSGFILTER(code, wp, lp, FALSE);\n}\n\nstatic LRESULT CALLBACK global_call_WH_SYSMSGFILTER(INT code, WPARAM wp, LPARAM lp)\n{\n    return call_WH_SYSMSGFILTER(code, wp, lp, TRUE);\n}\n\n\n/***********************************************************************\n *\t\tcall_WH_MOUSE\n */\nstatic LRESULT CALLBACK call_WH_MOUSE( INT code, WPARAM wp, LPARAM lp, BOOL global )\n{\n    MOUSEHOOKSTRUCT *ms32 = (MOUSEHOOKSTRUCT *)lp;\n    MOUSEHOOKSTRUCT16 ms16;\n    LRESULT ret;\n    CallNextHookEx(get_hhook(WH_MOUSE, global), code, wp, lp);\n\n    ms16.pt.x         = ms32->pt.x;\n    ms16.pt.y         = ms32->pt.y;\n    ms16.hwnd         = HWND_16( ms32->hwnd );\n    ms16.wHitTestCode = ms32->wHitTestCode;\n    ms16.dwExtraInfo  = ms32->dwExtraInfo;\n\n    lp = MapLS( &ms16 );\n    ret = call_hook_16( WH_MOUSE, code, wp, lp, global );\n    UnMapLS( lp );\n    return ret;\n}\n\n\nstatic LRESULT CALLBACK task_call_WH_MOUSE(INT code, WPARAM wp, LPARAM lp)\n{\n    return call_WH_MOUSE(code, wp, lp, FALSE);\n}\n\nstatic LRESULT CALLBACK global_call_WH_MOUSE(INT code, WPARAM wp, LPARAM lp)\n{\n    return call_WH_MOUSE(code, wp, lp, TRUE);\n}\n\n/***********************************************************************\n *\t\tcall_WH_SHELL\n */\nstatic LRESULT CALLBACK call_WH_SHELL( INT code, WPARAM wp, LPARAM lp, BOOL global )\n{\n    CallNextHookEx(get_hhook(WH_SHELL, global), code, wp, lp);\n    return call_hook_16( WH_SHELL, code, wp, lp, global );\n}\n\nstatic LRESULT CALLBACK task_call_WH_SHELL(INT code, WPARAM wp, LPARAM lp)\n{\n    return call_WH_SHELL(code, wp, lp, FALSE);\n}\n\nstatic LRESULT CALLBACK global_call_WH_SHELL(INT code, WPARAM wp, LPARAM lp)\n{\n    return call_WH_SHELL(code, wp, lp, TRUE);\n}\n\nstruct journal_pb\n{\n    UINT_PTR timer;\n    EVENTMSG16 emsg;\n};\n\n// TODO: mouse messages\nstatic void WINAPI journal_playback_cb( HWND hwnd, UINT msg, UINT_PTR id, DWORD sysTime )\n{\n    EVENTMSG16 emsg;\n    LPARAM lp;\n    INPUT input;\n    LRESULT time = 0;\n    struct hook16_queue_info *info = get_hook_info(FALSE, 0);\n    struct journal_pb *jp = info->global_hhook[WH_JOURNALPLAYBACK - WH_MINHOOK];\n    BOOL msg_rdy = jp->emsg.message ? TRUE : FALSE;\n    if (msg_rdy)\n        memcpy(&emsg, &jp->emsg, sizeof(EVENTMSG16));\nstart:\n    if (!msg_rdy)\n    {\n        lp = MapLS( &emsg );\n        time = call_hook_16( WH_JOURNALPLAYBACK, HC_GETNEXT, 0, lp, TRUE );\n        UnMapLS( lp );\n    }\n    if (!time)\n    {\n        TRACE(\"WH_JOURNALPLAYBACK message: %x paramL: %x paramH: %x\\n\", emsg.message, emsg.paramL, emsg.paramH);\n        switch( emsg.message )\n        {\n            case WM_QUEUESYNC:\n                if (GetActiveWindow16())\n                    PostMessage16(GetActiveWindow16(), WM_QUEUESYNC, 0, NULL);\n                else\n                    PostThreadMessage(GetCurrentThreadId(), WM_QUEUESYNC, 0, NULL);\n                break;\n            case WM_KEYDOWN:\n            case WM_SYSKEYDOWN:\n                input.type = 1;\n                input.ki.wVk = emsg.paramL;\n                input.ki.wScan = emsg.paramH;\n                input.ki.dwFlags = 0;\n                input.ki.time = 0;\n                input.ki.dwExtraInfo = 0;\n                SendInput( 1, &input, sizeof(input) );\n                break;\n            case WM_KEYUP:\n            case WM_SYSKEYUP:\n                input.type = 1;\n                input.ki.wVk = emsg.paramL;\n                input.ki.wScan = emsg.paramH;\n                input.ki.dwFlags = 2;\n                input.ki.time = 0;\n                input.ki.dwExtraInfo = 0;\n                SendInput( 1, &input, sizeof(input) );\n                break;\n        }\n        if (!info->global_hhook[WH_JOURNALPLAYBACK - WH_MINHOOK]) return;\n        call_hook_16( WH_JOURNALPLAYBACK, HC_SKIP, 0, 0, TRUE );\n        msg_rdy = FALSE;\n        goto start;\n    }\n    if (!info->global_hhook[WH_JOURNALPLAYBACK - WH_MINHOOK]) return;\n    memcpy(&jp->emsg, &emsg, sizeof(EVENTMSG16));\n    SetTimer(NULL, jp->timer, time, journal_playback_cb);\n}\n\n\n/***********************************************************************\n *\t\tSetWindowsHook (USER.121)\n */\nFARPROC16 WINAPI SetWindowsHook16( INT16 id, HOOKPROC16 proc )\n{\n    HINSTANCE16 hInst = FarGetOwner16( HIWORD(proc) );\n\n    /* WH_MSGFILTER is the only task-specific hook for SetWindowsHook() */\n    HTASK16 hTask = (id == WH_MSGFILTER) ? GetCurrentTask() : 0;\n\n    if (SELECTOROF(proc) == 0x4b48) // Don't try to call an hhook, this a valid GDT selector we only use the LDT\n        return 0;\t\n\n    return (FARPROC16)SetWindowsHookEx16( id, proc, hInst, hTask );\n}\n\n\nvoid install_global_hook()\n{\n    QUEUE16 *q = (QUEUE16*)MapSL(MAKESEGPTR(hqFirst, 0));\n    while (q)\n    {\n        if (IsTask16(q->hTask))\n        {\n            struct hook16_queue_info *info = get_hook_info(TRUE, q->hTask);\n            TDB *tdb;\n            int id;\n            tdb = GlobalLock16(q->hTask);\n            for (id = WH_MINHOOK; id < WH_MAXHOOK16; id++)\n            {\n                int index = id - WH_MINHOOK;\n                if (!list_empty(&global_hook_entry[index]))\n                {\n                    if (!info->global_hhook[index])\n                    {\n                        info->global_hhook[index] = SetWindowsHookExA(id, global_hook_procs[index], 0, *(LPDWORD)((LPBYTE)tdb->teb + 0x24));\n                    }\n                }\n            }\n        }\n        q = (QUEUE16*)MapSL(MAKESEGPTR(q->next, 0));\n    }\n}\n\n/***********************************************************************\n *\t\tSetWindowsHookEx (USER.291)\n */\nHHOOK WINAPI SetWindowsHookEx16(INT16 id, HOOKPROC16 proc, HINSTANCE16 hInst, HTASK16 hTask)\n{\n    struct hook16_queue_info *info;\n    int index = id - WH_MINHOOK;\n    DWORD thread = GetCurrentThreadId();\n    struct hook_entry *entry;\n\n    TRACE(\"(%d,%04x:%04x,%04x,%04x)\\n\", id, SELECTOROF(proc), OFFSETOF(proc), hInst, hTask);\n    if (id < WH_MINHOOK || id > WH_MAXHOOK16) return 0;\n    if (!hook_procs[index])\n    {\n        FIXME(\"hook type %d broken in Win16\\n\", id);\n        return 0;\n    }\n    if (!hTask)\n        WARN(\"System-global hooks (%d) broken in Win16\\n\", id);\n    else if (hTask != GetCurrentTask())\n    {\n        thread = (DWORD)HTASK_32(hTask);\n        if (!thread)\n        {\n            ERR(\"invalid task? %04x\\n\", hTask);\n            return 0;\n        }\n    }\n    if (hTask)\n    {\n        info = get_hook_info(TRUE, hTask);\n\n        if (!info->hhook[index])\n        {\n            if (id == WH_JOURNALPLAYBACK)\n            {\n                ERR(\"WH_JOURNALPLAYBACK is always global\\n\");\n                return 0;\n            }\n            else\n            {\n                info->hhook[index] = SetWindowsHookExA(id, hook_procs[index], 0, thread);\n            }\n        }\n        if (!info->hhook[index])\n            return 0;\n        if (info)\n        {\n            struct list *head = &info->hook_entry[index];\n            entry = (struct hook_entry*)allocate_hook();\n            if (!entry)\n            {\n                ERR(\"failed to allocate hook\\n\");\n                return 0;\n            }\n            if (!head->next)\n            {\n                list_init(head);\n            }\n            list_add_head(head, &entry->entry);\n            entry->proc16 = proc;\n            entry->hinst16 = GetExePtr(hInst);\n            entry->htask16 = hTask;\n            entry->type = id;\n            entry->global = FALSE;\n        }\n    }\n    else\n    {\n        entry = (struct hook_entry*)allocate_hook();\n        if (!entry)\n        {\n            ERR(\"failed to allocate hook\\n\");\n            return 0;\n        }\n        if (id == WH_JOURNALPLAYBACK)\n        {\n            struct hook16_queue_info *info = get_hook_info(TRUE, 0);\n            if (info->global_hhook[index])\n            {\n                ERR(\"journal playback hook already set\\n\");\n                free_hook(entry);\n                return 0;\n            }\n            BlockInput(TRUE);\n            struct journal_pb *jp = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(struct journal_pb));\n            jp->timer = SetTimer(NULL, 0, 10, journal_playback_cb);\n            info->global_hhook[index] = jp;\n        }\n        entry->proc16 = proc;\n        entry->hinst16 = GetExePtr(hInst);\n        entry->htask16 = GetCurrentTask();\n        entry->type = id;\n        entry->global = TRUE;\n        list_add_head(&global_hook_entry[index], &entry->entry);\n        if (id != WH_JOURNALPLAYBACK)\n            install_global_hook();\n    }\n\n    return entry_to_hhook(entry);\n}\n\n\nstatic BOOL16 unhook_global_hook(INT16 id, HOOKPROC16 proc)\n{\n    int index = id - WH_MINHOOK;\n    EnterCriticalSection(&global_hook_section);\n    struct hook_entry *hook_entry, *next;\n    LIST_FOR_EACH_ENTRY_SAFE(hook_entry, next, &global_hook_entry[index], struct hook_entry, entry)\n    {\n        if (hook_entry->proc16 == proc)\n        {\n            LeaveCriticalSection(&global_hook_section);\n            return UnhookWindowsHookEx16(entry_to_hhook(hook_entry));\n        }\n    }\n    LeaveCriticalSection(&global_hook_section);\n}\n/***********************************************************************\n *\t\tUnhookWindowsHook (USER.234)\n */\nBOOL16 WINAPI UnhookWindowsHook16( INT16 id, HOOKPROC16 proc )\n{\n    int index = id - WH_MINHOOK;\n    struct hook16_queue_info *info;\n    struct hook_entry *hook_entry, *next;\n\n    TRACE(\"(%d,%04x:%04x)\\n\", id, SELECTOROF(proc), OFFSETOF(proc));\n    if (id < WH_MINHOOK || id > WH_MAXHOOK16) return FALSE;\n    info = get_hook_info(FALSE, 0);\n    if (!info || info->hook_entry[index].next == NULL)\n    {\n        return unhook_global_hook(id, proc);\n    }\n    LIST_FOR_EACH_ENTRY_SAFE(hook_entry, next, &info->hook_entry[index], struct hook_entry, entry)\n    {\n        if (hook_entry->proc16 == proc)\n        {\n            return UnhookWindowsHookEx16(entry_to_hhook(hook_entry));\n        }\n    }\n    return unhook_global_hook(id, proc);\n}\n\n\n/***********************************************************************\n *\t\tUnhookWindowsHookEx (USER.292)\n */\nBOOL16 WINAPI UnhookWindowsHookEx16(HHOOK hhook)\n{\n    BOOL result = FALSE;\n    struct hook16_queue_info *info;\n    struct hook_entry *unhook = hhook_to_entry(hhook);\n    INT type;\n    struct list *entry;\n    TRACE(\"(%08x)\\n\", hhook);\n    if (!unhook)\n        return FALSE;\n    info = get_hook_info(FALSE, unhook->htask16);\n    type = unhook->type;\n    int index = type - WH_MINHOOK;\n    if (unhook->global)\n    {\n        entry = &global_hook_entry[index];\n    }\n    else\n    {\n        entry = &info->hook_entry[index];\n    }\n    if (info)\n    {\n        struct hook_entry *hook_entry, *next;\n\n        LIST_FOR_EACH_ENTRY_SAFE(hook_entry, next, entry, struct hook_entry, entry)\n        {\n            if (hook_entry == unhook)\n            {\n                list_remove(&hook_entry->entry);\n                free_hook(hook_entry);\n                result = TRUE;\n            }\n        }\n        if (list_empty(entry))\n        {\n            if (type == WH_JOURNALPLAYBACK)\n            {\n                INPUT input = {0};\n                input.type = 1;\n                input.ki.dwFlags = KEYEVENTF_KEYUP;\n                // check the modifers and make sure they are released if not pressed\n                if (!(GetAsyncKeyState(VK_SHIFT) & 0x8000))\n                {\n                    input.ki.wVk = VK_SHIFT;\n                    SendInput(1, &input, sizeof(INPUT));\n                }\n                if (!(GetAsyncKeyState(VK_CONTROL) & 0x8000))\n                {\n                    input.ki.wVk = VK_CONTROL;\n                    SendInput(1, &input, sizeof(INPUT));\n                }\n                if (!(GetAsyncKeyState(VK_MENU) & 0x8000))\n                {\n                    input.ki.wVk = VK_MENU;\n                    SendInput(1, &input, sizeof(INPUT));\n                }\n                BlockInput(FALSE);\n                KillTimer(NULL, ((struct journal_pb *)(info->global_hhook[index]))->timer);\n                HeapFree(GetProcessHeap(), 0, (UINT_PTR)info->global_hhook[index]);\n                info->global_hhook[index] = NULL;\n            }\n            else\n            {\n                UnhookWindowsHookEx(info->hhook[index]);\n            }\n            info->hhook[index] = NULL;\n        }\n    }\n    return result;\n}\n\n\n/***********************************************************************\n *\t\tCallMsgFilter32 (USER.823)\n */\nBOOL16 WINAPI CallMsgFilter32_16( MSG32_16 *lpmsg16_32, INT16 code, BOOL16 wHaveParamHigh )\n{\n    MSG msg32;\n    BOOL16 ret;\n\n    if (GetSysModalWindow16()) return FALSE;\n    msg32.hwnd      = WIN_Handle32( lpmsg16_32->msg.hwnd );\n    msg32.message   = lpmsg16_32->msg.message;\n    msg32.lParam    = lpmsg16_32->msg.lParam;\n    msg32.time      = lpmsg16_32->msg.time;\n    msg32.pt.x      = lpmsg16_32->msg.pt.x;\n    msg32.pt.y      = lpmsg16_32->msg.pt.y;\n    if (wHaveParamHigh) msg32.wParam = MAKELONG(lpmsg16_32->msg.wParam, lpmsg16_32->wParamHigh);\n    else msg32.wParam = lpmsg16_32->msg.wParam;\n\n    ret = (BOOL16)CallMsgFilterA(&msg32, code);\n\n    lpmsg16_32->msg.hwnd    = HWND_16( msg32.hwnd );\n    lpmsg16_32->msg.message = msg32.message;\n    lpmsg16_32->msg.wParam  = LOWORD(msg32.wParam);\n    lpmsg16_32->msg.lParam  = msg32.lParam;\n    lpmsg16_32->msg.time    = msg32.time;\n    lpmsg16_32->msg.pt.x    = msg32.pt.x;\n    lpmsg16_32->msg.pt.y    = msg32.pt.y;\n    if (wHaveParamHigh) lpmsg16_32->wParamHigh = HIWORD(msg32.wParam);\n    return ret;\n}\n\n\n/***********************************************************************\n *\t\tCallMsgFilter (USER.123)\n */\nBOOL16 WINAPI CallMsgFilter16( MSG16 *msg, INT16 code )\n{\n    return CallMsgFilter32_16( (MSG32_16 *)msg, code, FALSE );\n}\n\n\n/***********************************************************************\n *\t\tCallNextHookEx (USER.293)\n */\nLRESULT WINAPI CallNextHookEx16( HHOOK hhook, INT16 code, WPARAM16 wparam, LPARAM lparam )\n{\n    struct hook16_queue_info *info = get_hook_info(FALSE, 0);\n    struct hook_entry *entry = hhook_to_entry(hhook);\n    LRESULT ret = 0;\n    struct list *next;\n    struct hook_entry *next_hook;\n    if (!entry)\n        return 0;\n    next = list_next(&(entry->global ? global_hook_entry : info->hook_entry)[entry->type - WH_MIN], &entry->entry);\n    if (!next)\n        return 0;\n    next_hook = LIST_ENTRY(next, struct hook_entry, entry);\n    if (!next_hook)\n        return 0;\n    return call_hook_entry_16(info, next_hook, next_hook->type, code, wparam, lparam);\n}\n\n\n/***********************************************************************\n *\t\tDefHookProc (USER.235)\n */\nLRESULT WINAPI DefHookProc16( INT16 code, WPARAM16 wparam, LPARAM lparam, HHOOK *lphhook )\n{\n    if (!((LONG_PTR)lphhook >> 16))\n    {\n        return 0;\n    }\n    return CallNextHookEx16( *lphhook, code, wparam, lparam );\n}\n\n\nvoid free_module_hooks(HINSTANCE16 hinst)\n{\n    QUEUE16 *q = (QUEUE16*)MapSL(MAKESEGPTR(hqFirst, 0));\n    while (q)\n    {\n        if (IsTask16(q->hTask))\n        {\n            struct hook16_queue_info *info = get_hook_info(FALSE, q->hTask);\n            int i;\n            if (info)\n            {\n                for (i = 0; i < NB_HOOKS16; i++)\n                {\n                    struct list *list = &info->hook_entry[i];\n                    struct hook_entry *hook_entry, *next;\n                    if (list->next == NULL)\n                        continue;\n                    LIST_FOR_EACH_ENTRY_SAFE(hook_entry, next, list, struct hook_entry, entry)\n                    {\n                        if (hook_entry->hinst16 == hinst)\n                        {\n                            UnhookWindowsHookEx16(entry_to_hhook(hook_entry));\n                        }\n                    }\n                }\n            }\n        }\n        q = (QUEUE16*)MapSL(MAKESEGPTR(q->next, 0));\n    }\n}\n"
  },
  {
    "path": "user/message.c",
    "content": "/*\n * 16-bit messaging support\n *\n * Copyright 2001 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <assert.h>\n#include <stdarg.h>\n#include <string.h>\n\n#include \"wine/winuser16.h\"\n#include \"wownt32.h\"\n#include \"winerror.h\"\n#include \"dde.h\"\n#include \"user_private.h\"\n#include \"wine/debug.h\"\n#include \"message_table.h\"\n#include \"../krnl386/kernel16_private.h\"\n#include \"commctrl.h\"\n#include \"wine/exception.h\"\n#include <shellapi.h>\n#include <shlobj.h>\n\n/*\nunknwon combobox message\nWhen EDIT received WM_KILLFOCUS, EDIT sent this message to COMBOBOX.\n*/\n#define CB_UNKNOWN_167 0x167\n#define CB_UNKNOWN_167_16 (WM_USER + 27)\n/* undocumented messages */\n//reactos sdk/include/reactos/undocuser.h\n#define WM_QUERYPARKICON    0x00000036\n#define WM_CLIENTSHUTDOWN   0x0000003B\n#define WM_COPYGLOBALDATA   0x00000049\n#define WM_LOGONNOTIFY      0x0000004C\n#define WM_KLUDGEMINRECT    0x0000008B\n#define WM_UAHDRAWMENU      0x00000091\n#define WM_UAHDRAWITEM      0x00000092 // WM_DRAWITEM\n#define WM_UAHINITMENU      0x00000093\n#define WM_UAHMEASUREITEM   0x00000094 // WM_MEASUREITEM\n#define WM_UAHDRAWMENUNC    0x00000095\n#define WM_NCUAHDRAWCAPTION 0x000000AE\n#define WM_NCUAHDRAWFRAME   0x000000AF\n#define WM_CBLOSTTEXTFOCUS  0x00000167\n#define MN_SETHMENU         0x000001e0\n#define WM_POPUPSYSTEMMENU  0x00000313\n#define WM_UAHINIT          0x0000031b\n\n\n#ifndef EM_ENABLEFEATURE /* WINVER < 0x0604 */\n#define EM_ENABLEFEATURE        0x00DA\n#endif\nWINE_DEFAULT_DEBUG_CHANNEL(msg);\nWINE_DECLARE_DEBUG_CHANNEL(message);\nBOOL is_win_menu_disallowed(DWORD style);\nULONG WINAPI get_windows_build();\nDWORD USER16_AlertableWait = 0;\nstatic UINT aviwnd_msg = 0;\nstatic void *aviwnd_cwp;\nstatic ATOM dialogmsgthunk;\n\nstruct wow_handlers32 wow_handlers32;\n#define TIMER32_LPARAM 0x42137460\n\nstruct timer32_wrapper\n{\n    WPARAM wParam;\n    LPARAM lParam;\n    BOOL ref;\n};\n\n#define TIMER32_WRAP_SIZE 400\nstatic int timer32_count;\nstatic struct timer32_wrapper timer32[TIMER32_WRAP_SIZE];\n\ntypedef enum\n{\n    WINDOW_TYPE_WINDOW,\n    WINDOW_TYPE_STATIC,\n    WINDOW_TYPE_BUTTON,\n    WINDOW_TYPE_LISTBOX,\n    WINDOW_TYPE_EDIT,\n    WINDOW_TYPE_SCROLLBAR,\n    WINDOW_TYPE_COMBOBOX,\n    WINDOW_TYPE_MDICLIENT,\n    WINDOW_TYPE_AVIWND,\n} WINDOW_TYPE;\nLPBYTE window_type_table;\n#include <pshpack1.h>\ntypedef struct\n{\n    UINT16 uNotification;\n    HWND16 hWnd;\n    POINT16 ptCursor;\n} DRAGLISTINFO16;\n#include <poppack.h>\nUINT drag_list_message;\nstatic void dump_hmenu(HMENU menu)\n{\n    int count = GetMenuItemCount(menu);\n    for (int i = 0; i < count; i++)\n    {\n        MENUITEMINFOA item = { sizeof(MENUITEMINFOA) };\n        item.fMask = MIIM_BITMAP | MIIM_ID | MIIM_STRING;\n        char buf[1000];\n        buf[0] = 0;\n        item.dwTypeData = buf;\n        item.cch = 1000;\n        if (!GetMenuItemInfoA(menu, i, TRUE, &item))\n        {\n        }\n        MESSAGE(\"%s bmp:%p id:%04x\\n\", buf, item.hbmpItem, item.wID);\n        if (item.hSubMenu)\n        {\n            MESSAGE(\"====BEGIN SUB MENU %p/%p ====\\n\", menu, item.hSubMenu);\n            dump_hmenu(item.hSubMenu);\n            MESSAGE(\"====END   SUB MENU %p/%p ====\\n\", menu, item.hSubMenu);\n        }\n    }\n}\nstatic void dump_menu(HWND hwnd)\n{\n    HMENU menu = GetMenu(hwnd);\n    dump_hmenu(menu);\n}\nstatic LRESULT send_message_callback( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp,\n                                      LRESULT *result, void *arg )\n{\n    *result = SendMessageA( hwnd, msg, wp, lp );\n    return *result;\n}\n\nstatic LRESULT post_message_callback( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp,\n                                      LRESULT *result, void *arg )\n{\n    *result = 0;\n    return PostMessageA( hwnd, msg, wp, lp );\n}\n\nstatic LRESULT post_thread_message_callback( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp,\n                                             LRESULT *result, void *arg )\n{\n    DWORD_PTR tid = (DWORD_PTR)arg;\n    *result = 0;\n    return PostThreadMessageA( tid, msg, wp, lp );\n}\n\n/*static */LRESULT get_message_callback( HWND16 hwnd, UINT16 msg, WPARAM16 wp, LPARAM lp,\n                                     LRESULT *result, void *arg )\n{\n    MSG16 *msg16 = arg;\n\n    msg16->hwnd    = hwnd;\n    msg16->message = msg;\n    msg16->wParam  = wp;\n    msg16->lParam  = lp;\n    *result = 0;\n    return 0;\n}\n\nstatic LRESULT defdlg_proc_callback( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp,\n                                     LRESULT *result, void *arg )\n{\n    *result = DefDlgProcA( hwnd, msg, wp, lp );\n    return *result;\n}\n\nstatic LRESULT call_window_proc_callback( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp,\n                                          LRESULT *result, void *arg )\n{\n    WNDPROC proc = arg;\n    DWORD count;\n    ReleaseThunkLock(&count);\n    *result = CallWindowProcA( proc, hwnd, msg, wp, lp );\n    RestoreThunkLock(count);\n    return *result;\n}\n\n\n/**********************************************************************\n * Support for window procedure thunks\n */\n\n#include \"pshpack1.h\"\ntypedef struct\n{\n    BYTE        popl_eax;        /* popl  %eax (return address) */\n    BYTE        pushl_func;      /* pushl $proc */\n    WNDPROC     proc;\n    BYTE        pushl_eax;       /* pushl %eax */\n    BYTE        ljmp;            /* ljmp relay*/\n    DWORD       relay_offset;    /* __wine_call_wndproc */\n    WORD        relay_sel;\n} WINPROC_THUNK;\n#include \"poppack.h\"\n\n/* 0xffffxxxx is already used by WOW64. */\n#define WINPROC_HANDLE 0xfffe\n#define MAX_WINPROCS32 4096\n#define MAX_WINPROCS16 1024\n\nstatic WNDPROC16 winproc16_array[MAX_WINPROCS16];\nstatic unsigned int winproc16_used;\n\nstatic WINPROC_THUNK *thunk_array;\nstatic UINT thunk_selector;\n\n/* return the window proc index for a given handle, or -1 for an invalid handle\n * indices 0 .. MAX_WINPROCS32-1 are for 32-bit procs,\n * indices MAX_WINPROCS32 .. MAX_WINPROCS32+MAX_WINPROCS16-1 for 16-bit procs */\nstatic int winproc_to_index( WNDPROC16 handle )\n{\n    unsigned int index;\n\n    if (HIWORD(handle) == thunk_selector)\n    {\n        index = LOWORD(handle) / sizeof(WINPROC_THUNK);\n        /* check alignment */\n        if (index * sizeof(WINPROC_THUNK) != LOWORD(handle)) return -1;\n        /* check array limits */\n        if (index >= MAX_WINPROCS32) return -1;\n    }\n    else\n    {\n        index = LOWORD(handle);\n        if ((ULONG_PTR)handle >> 16 != WINPROC_HANDLE) return -1;\n        /* check array limits */\n        if (index >= winproc16_used + MAX_WINPROCS32) return -1;\n    }\n    return index;\n}\n\n/* allocate a 16-bit thunk for an existing window proc */\nstatic WNDPROC16 alloc_win16_thunk( WNDPROC handle )\n{\n    static FARPROC16 relay;\n    WINPROC_THUNK *thunk;\n#if 0\n    UINT index = LOWORD( handle );\n\n    if (index >= MAX_WINPROCS32)  /* already a 16-bit proc */\n        return winproc16_array[index - MAX_WINPROCS32];\n#else\n    UINT index;\n    index = LOWORD(wow_handlers32.alloc_winproc(handle, FALSE));\n#endif\n\n    if (!thunk_array)  /* allocate the array and its selector */\n    {\n        LDT_ENTRY entry;\n\n        assert( MAX_WINPROCS16 * sizeof(WINPROC_THUNK) <= 0x10000 );\n\n        if (!(thunk_selector = wine_ldt_alloc_entries(1))) return NULL;\n        if (!(thunk_array = VirtualAlloc( NULL, MAX_WINPROCS16 * sizeof(WINPROC_THUNK), MEM_COMMIT,\n                                          PAGE_EXECUTE_READWRITE ))) return NULL;\n        wine_ldt_set_base( &entry, thunk_array );\n        wine_ldt_set_limit( &entry, MAX_WINPROCS16 * sizeof(WINPROC_THUNK) - 1 );\n        wine_ldt_set_flags( &entry, WINE_LDT_FLAGS_CODE | WINE_LDT_FLAGS_32BIT );\n        wine_ldt_set_entry( thunk_selector, &entry );\n        relay = GetProcAddress16( GetModuleHandle16(\"user\"), \"__wine_call_wndproc\" );\n    }\n\n    thunk = &thunk_array[index];\n    thunk->popl_eax     = 0x58;   /* popl  %eax */\n    thunk->pushl_func   = 0x68;   /* pushl $proc */\n    thunk->proc         = handle;\n    thunk->pushl_eax    = 0x50;   /* pushl %eax */\n    thunk->ljmp         = 0xea;   /* ljmp   relay*/\n    thunk->relay_offset = OFFSETOF(relay);\n    thunk->relay_sel    = SELECTOROF(relay);\n    return (WNDPROC16)MAKESEGPTR( thunk_selector, index * sizeof(WINPROC_THUNK) );\n}\n\nLRESULT CALLBACK WindowProc16(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam);\nLRESULT CALLBACK edit_wndproc16(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);\n\n/**********************************************************************\n *\t     WINPROC_GetProc16\n *\n * Get a window procedure pointer that can be passed to the Windows program.\n */\nWNDPROC16 WINPROC_GetProc16( WNDPROC proc, BOOL unicode )\n{\n#if 0\n    WNDPROC winproc = wow_handlers32.alloc_winproc( proc, unicode );\n\n    if ((ULONG_PTR)winproc >> 16 != WINPROC_HANDLE) return (WNDPROC16)winproc;\n    return alloc_win16_thunk( winproc );\n#else\n    if (!proc)\n        return NULL;\n\n    if (proc == WindowProc16)\n        proc = DefWindowProcA;\n\n    return alloc_win16_thunk(proc);\n#endif\n}\n\n/* call a 16-bit window procedure */\n/*static*/ LRESULT call_window_proc16( HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam,\n                                   LRESULT *result, void *arg )\n{\n    WNDPROC16 func = arg;\n    int index = winproc_to_index( func );\n    CONTEXT context;\n    size_t size = 0;\n#include <pshpack1.h>\n    struct\n    {\n        WORD params[5];\n        union\n        {\n            CREATESTRUCT16 cs16;\n            DRAWITEMSTRUCT16 dis16;\n            COMPAREITEMSTRUCT16 cis16;\n        } u;\n    } args;\n#include <poppack.h>\n\n    if (index >= MAX_WINPROCS32) func = winproc16_array[index - MAX_WINPROCS32];\n\n    /* Window procedures want ax = hInstance, ds = es = ss */\n\n    memset(&context, 0, sizeof(context));\n    context.SegDs = context.SegEs = SELECTOROF(getWOW32Reserved());\n    context.SegFs = wine_get_fs();\n    context.SegGs = wine_get_gs();\n    context.Eax = !hwnd ? 0 : GetWindowWord16(hwnd, GWLP_HINSTANCE) | 1; /* Handle To Sel */\n    if (!context.Eax || (func == GetDlgProc16(hwnd))) context.Eax = context.SegDs;\n    context.Ebx = 6;\n    context.Esi = hwnd;\n    context.SegCs = SELECTOROF(func);\n    context.Eip   = OFFSETOF(func);\n    context.Ebp   = OFFSETOF(getWOW32Reserved()) + FIELD_OFFSET(STACK16FRAME, bp);\n\n    if (lParam)\n    {\n        /* Some programs (eg. the \"Undocumented Windows\" examples, JWP) only\n           work if structures passed in lParam are placed in the stack/data\n           segment. Programmers easily make the mistake of converting lParam\n           to a near rather than a far pointer, since Windows apparently\n           allows this. We copy the structures to the 16 bit stack; this is\n           ugly but makes these programs work. */\n        switch (msg)\n        {\n          case WM_CREATE:\n          case WM_NCCREATE:\n            size = sizeof(CREATESTRUCT16); break;\n          case WM_DRAWITEM:\n            size = sizeof(DRAWITEMSTRUCT16); break;\n          case WM_COMPAREITEM:\n            size = sizeof(COMPAREITEMSTRUCT16); break;\n        }\n        if (size)\n        {\n            LPARAM lp = lParam;\n            __TRY  // Chessmaster 4000 sends WM_CREATE without a pointer in LPARAM\n            {\n                memcpy( &args.u, MapSL(lParam), size );\n                lParam = PtrToUlong(getWOW32Reserved()) - size;\n            }\n            __EXCEPT_ALL\n            {\n                lParam = lp;\n            }\n            __ENDTRY\n        }\n    }\n    PVOID old = getWOW32Reserved();\n\n    args.params[4] = hwnd;\n    args.params[3] = msg;\n    args.params[2] = wParam;\n    args.params[1] = HIWORD(lParam);\n    args.params[0] = LOWORD(lParam);\n    WOWCallback16Ex( 0, WCB16_REGS, sizeof(args.params) + size, &args, (DWORD *)&context );\n    //restore stack\n    setWOW32Reserved(old);\n    *result = MAKELONG( LOWORD(context.Eax), LOWORD(context.Edx) );\n    return *result;\n}\n\nstatic LRESULT call_dialog_proc16( HWND16 hwnd, UINT16 msg, WPARAM16 wp, LPARAM lp,\n                                   LRESULT *result, void *arg )\n{\n    LRESULT ret = call_window_proc16( hwnd, msg, wp, lp, result, arg );\n    *result = GetWindowLongPtrW( WIN_Handle32(hwnd), DWLP_MSGRESULT );\n    return LOWORD(ret);\n}\n\nstatic LRESULT call_window_proc_Ato16( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp,\n                                       LRESULT *result, void *arg )\n{\n    return WINPROC_CallProc32ATo16( call_window_proc16, hwnd, msg, wp, lp, result, arg );\n}\n\nstatic LRESULT call_dialog_proc_Ato16( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp,\n                                       LRESULT *result, void *arg )\n{\n    return WINPROC_CallProc32ATo16( call_dialog_proc16, hwnd, msg, wp, lp, result, arg );\n}\n\n\n\n/**********************************************************************\n * Support for Edit word break proc thunks\n */\n\n#define MAX_THUNKS 32\n\n#include <pshpack1.h>\nstatic struct word_break_thunk\n{\n    BYTE                popl_eax;       /* popl  %eax (return address) */\n    BYTE                pushl_proc16;   /* pushl proc16 */\n    EDITWORDBREAKPROC16 proc16;\n    BYTE                pushl_eax;      /* pushl %eax */\n    BYTE                jmp;            /* ljmp call_word_break_proc16 */\n    DWORD               callback;\n} *word_break_thunks;\n#include <poppack.h>\n\n/**********************************************************************\n *           call_word_break_proc16\n */\nstatic INT16 CALLBACK call_word_break_proc16( SEGPTR proc16, LPSTR text, INT index, INT count, INT action )\n{\n    SEGPTR segptr;\n    WORD args[5];\n    DWORD result;\n\n    segptr = MapLS( text );\n    args[4] = SELECTOROF(segptr);\n    args[3] = OFFSETOF(segptr);\n    args[2] = index;\n    args[1] = count;\n    args[0] = action;\n    WOWCallback16Ex( proc16, WCB16_PASCAL, sizeof(args), args, &result );\n    UnMapLS( segptr );\n    return LOWORD(result);\n}\n\n/******************************************************************\n *\t\tadd_word_break_thunk\n */\nstatic struct word_break_thunk *add_word_break_thunk( EDITWORDBREAKPROC16 proc16 )\n{\n    struct word_break_thunk *thunk;\n\n    if (!word_break_thunks)\n    {\n        word_break_thunks = VirtualAlloc( NULL, MAX_THUNKS * sizeof(*thunk),\n                                          MEM_COMMIT, PAGE_EXECUTE_READWRITE );\n        if (!word_break_thunks) return NULL;\n\n        for (thunk = word_break_thunks; thunk < &word_break_thunks[MAX_THUNKS]; thunk++)\n        {\n            thunk->popl_eax     = 0x58;   /* popl  %eax */\n            thunk->pushl_proc16 = 0x68;   /* pushl proc16 */\n            thunk->pushl_eax    = 0x50;   /* pushl %eax */\n            thunk->jmp          = 0xe9;   /* jmp call_word_break_proc16 */\n            thunk->callback     = (char *)call_word_break_proc16 - (char *)(&thunk->callback + 1);\n        }\n    }\n    for (thunk = word_break_thunks; thunk < &word_break_thunks[MAX_THUNKS]; thunk++)\n        if (thunk->proc16 == proc16) return thunk;\n\n    for (thunk = word_break_thunks; thunk < &word_break_thunks[MAX_THUNKS]; thunk++)\n    {\n        if (thunk->proc16) continue;\n        thunk->proc16 = proc16;\n        return thunk;\n    }\n    FIXME(\"Out of word break thunks\\n\");\n    return NULL;\n}\n\n/******************************************************************\n *\t\tget_word_break_thunk\n */\nstatic EDITWORDBREAKPROC16 get_word_break_thunk( EDITWORDBREAKPROCA proc )\n{\n    struct word_break_thunk *thunk = (struct word_break_thunk *)proc;\n    if (word_break_thunks && thunk >= word_break_thunks && thunk < &word_break_thunks[MAX_THUNKS])\n        return thunk->proc16;\n    return NULL;\n}\n\n\n/***********************************************************************\n * Support for 16<->32 message mapping\n */\n\nstatic inline void *get_buffer( void *static_buffer, size_t size, size_t need )\n{\n    if (size >= need) return static_buffer;\n    return HeapAlloc( GetProcessHeap(), 0, need );\n}\n\nstatic inline void free_buffer( void *static_buffer, void *buffer )\n{\n    if (buffer != static_buffer) HeapFree( GetProcessHeap(), 0, buffer );\n}\n\nstatic void RECT16to32( const RECT16 *from, RECT *to )\n{\n    to->left   = from->left;\n    to->top    = from->top;\n    to->right  = from->right;\n    to->bottom = from->bottom;\n}\n\nstatic void RECT32to16( const RECT *from, RECT16 *to )\n{\n    to->left   = from->left;\n    to->top    = from->top;\n    to->right  = from->right;\n    to->bottom = from->bottom;\n}\n\nstatic void MINMAXINFO32to16( const MINMAXINFO *from, MINMAXINFO16 *to )\n{\n    to->ptReserved.x     = from->ptReserved.x;\n    to->ptReserved.y     = from->ptReserved.y;\n    to->ptMaxSize.x      = from->ptMaxSize.x;\n    to->ptMaxSize.y      = from->ptMaxSize.y;\n    to->ptMaxPosition.x  = from->ptMaxPosition.x;\n    to->ptMaxPosition.y  = from->ptMaxPosition.y;\n    to->ptMinTrackSize.x = from->ptMinTrackSize.x;\n    to->ptMinTrackSize.y = from->ptMinTrackSize.y;\n    to->ptMaxTrackSize.x = from->ptMaxTrackSize.x;\n    to->ptMaxTrackSize.y = from->ptMaxTrackSize.y;\n}\n\nstatic void MINMAXINFO16to32( const MINMAXINFO16 *from, MINMAXINFO *to )\n{\n    to->ptReserved.x     = from->ptReserved.x;\n    to->ptReserved.y     = from->ptReserved.y;\n    to->ptMaxSize.x      = from->ptMaxSize.x;\n    to->ptMaxSize.y      = from->ptMaxSize.y;\n    to->ptMaxPosition.x  = from->ptMaxPosition.x;\n    to->ptMaxPosition.y  = from->ptMaxPosition.y;\n    to->ptMinTrackSize.x = from->ptMinTrackSize.x;\n    to->ptMinTrackSize.y = from->ptMinTrackSize.y;\n    to->ptMaxTrackSize.x = from->ptMaxTrackSize.x;\n    to->ptMaxTrackSize.y = from->ptMaxTrackSize.y;\n}\n\nstatic void WINDOWPOS32to16( const WINDOWPOS* from, WINDOWPOS16* to )\n{\n    to->hwnd            = HWND_16(from->hwnd);\n    to->hwndInsertAfter = HWND_16(from->hwndInsertAfter);\n    to->x               = from->x;\n    to->y               = from->y;\n    to->cx              = from->cx;\n    to->cy              = from->cy;\n    to->flags           = from->flags;\n}\n\nstatic void WINDOWPOS16to32( const WINDOWPOS16* from, WINDOWPOS* to )\n{\n    to->hwnd            = WIN_Handle32(from->hwnd);\n    to->hwndInsertAfter = (from->hwndInsertAfter == (HWND16)-1) ?\n                           HWND_TOPMOST : WIN_Handle32(from->hwndInsertAfter);\n    to->x               = from->x;\n    to->y               = from->y;\n    to->cx              = from->cx;\n    to->cy              = from->cy;\n    to->flags           = from->flags;\n}\n\n/* The strings are not copied */\nstatic void CREATESTRUCT32Ato16( HWND hwnd32, const CREATESTRUCTA* from, CREATESTRUCT16* to )\n{\n    to->lpCreateParams = (SEGPTR)from->lpCreateParams;\n    to->hInstance      = HINSTANCE_16(from->hInstance);\n    if (!is_win_menu_disallowed(GetWindowLongA(hwnd32, GWL_STYLE)))\n    {\n        to->hMenu      = HMENU_16(from->hMenu);\n    }\n    else\n    {\n        to->hMenu      = (HMENU16)from->hMenu;\n    }\n    to->hwndParent     = HWND_16(from->hwndParent);\n    to->cy             = from->cy == CW_USEDEFAULT ? CW_USEDEFAULT16 : from->cy;\n    to->cx             = from->cx == CW_USEDEFAULT ? CW_USEDEFAULT16 : from->cx;\n    to->y              = from->y == CW_USEDEFAULT ? CW_USEDEFAULT16 : from->y;\n    to->x              = from->x == CW_USEDEFAULT ? CW_USEDEFAULT16 : from->x;\n    to->style          = from->style;\n    to->dwExStyle      = from->dwExStyle;\n}\n\nstatic void CREATESTRUCT16to32A( HWND hwnd32, const CREATESTRUCT16* from, CREATESTRUCTA *to )\n{\n    to->lpCreateParams = (LPVOID)from->lpCreateParams;\n    to->hInstance      = HINSTANCE_32(from->hInstance);\n    if (!is_win_menu_disallowed(GetWindowLongA(hwnd32, GWL_STYLE)))\n    {\n        to->hMenu      = HMENU_32(from->hMenu);\n    }\n    else\n    {\n        to->hMenu      = (HMENU)from->hMenu;\n    }\n    to->hwndParent     = WIN_Handle32(from->hwndParent);\n    to->cy             = from->cy == CW_USEDEFAULT16 ? CW_USEDEFAULT : from->cy;\n    to->cx             = from->cx == CW_USEDEFAULT16 ? CW_USEDEFAULT : from->cx;\n    to->y              = from->y == CW_USEDEFAULT16 ? CW_USEDEFAULT : from->y;\n    to->x              = from->x == CW_USEDEFAULT16 ? CW_USEDEFAULT : from->x;\n    to->style          = from->style;\n    to->dwExStyle      = from->dwExStyle;\n    to->lpszName       = MapSL(from->lpszName);\n    to->lpszClass      = win32classname(from->hInstance, MapSL(from->lpszClass));\n}\n\n/* The strings are not copied */\nstatic void MDICREATESTRUCT32Ato16( const MDICREATESTRUCTA* from, MDICREATESTRUCT16* to )\n{\n    to->hOwner = HINSTANCE_16(from->hOwner);\n    to->x      = from->x;\n    to->y      = from->y;\n    to->cx     = from->cx;\n    to->cy     = from->cy;\n    to->style  = from->style;\n    to->lParam = from->lParam;\n}\n\nstatic void MDICREATESTRUCT16to32A( const MDICREATESTRUCT16* from, MDICREATESTRUCTA *to )\n{\n\tto->hOwner = HINSTANCE_32(from->hOwner);\n\n\tto->x      = (from->x == CW_USEDEFAULT16) ? CW_USEDEFAULT : (INT)from->x;\n\tto->y      = (from->y == CW_USEDEFAULT16) ? CW_USEDEFAULT : (INT)from->y;\n\tto->cx     = (from->cx == CW_USEDEFAULT16) ? CW_USEDEFAULT : (INT)from->cx;\n\tto->cy     = (from->cy == CW_USEDEFAULT16) ? CW_USEDEFAULT : (INT)from->cy;\n    to->style  = from->style;\n    to->lParam = from->lParam;\n    to->szTitle = MapSL(from->szTitle);\n    to->szClass = win32classname(from->hOwner, MapSL(from->szClass));\n}\n\nHGLOBAL GLOBAL_GetLink(HGLOBAL16 hg);\nvoid GLOBAL_SetLink(HGLOBAL16 hg16, HGLOBAL hg);\nHGLOBAL16 GLOBAL_FindLink(HGLOBAL hg);\n\nstatic UINT_PTR convert_handle_16_to_32(HANDLE16 src, unsigned int flags)\n{\n    HANDLE      dst;\n    UINT        sz = GlobalSize16(src);\n    LPSTR       ptr16, ptr32;\n\n    if (dst = GLOBAL_GetLink(src))\n    {\n        if (GlobalSize(dst) != sz)\n            dst = GlobalReAlloc(dst, sz, 0);\n    }\n    else if (!(dst = GlobalAlloc(flags, sz)))\n        return 0;\n    ptr16 = GlobalLock16(src);\n    ptr32 = GlobalLock(dst);\n    if (ptr16 != NULL && ptr32 != NULL) memcpy(ptr32, ptr16, sz);\n    GlobalUnlock16(src);\n    GlobalUnlock(dst);\n    GLOBAL_SetLink(src, dst);\n\n    return (UINT_PTR)dst;\n}\n\nstatic HANDLE16 convert_handle_32_to_16(UINT_PTR src, unsigned int flags)\n{\n    HANDLE16    dst;\n    UINT        sz = GlobalSize((HANDLE)src);\n    LPSTR       ptr16, ptr32;\n\n    if (dst = GLOBAL_FindLink(src))\n    {\n        if (GlobalSize16(dst) != sz)\n            dst = GlobalReAlloc16(dst, sz, 0);\n    }\n    else if (!(dst = GlobalAlloc16(flags, sz)))\n        return 0;\n    ptr32 = GlobalLock((HANDLE)src);\n    ptr16 = GlobalLock16(dst);\n    if (ptr16 != NULL && ptr32 != NULL) memcpy(ptr16, ptr32, sz);\n    GlobalUnlock((HANDLE)src);\n    GlobalUnlock16(dst);\n    GLOBAL_SetLink(dst, (HANDLE)src);\n\n    return dst;\n}\n\nstatic BOOL is_old_app( HWND hwnd )\n{\n    HINSTANCE inst = (HINSTANCE)GetWindowLongPtrW( hwnd, GWLP_HINSTANCE );\n    return inst && !((ULONG_PTR)inst >> 16) && (GetExpWinVer16(LOWORD(inst)) & 0xFFFF) == 0x0300;\n}\n\nstatic int find_sub_menu( HMENU *hmenu, HMENU16 target )\n{\n    int i, pos, count = GetMenuItemCount( *hmenu );\n\n    for (i = 0; i < count; i++)\n    {\n        HMENU sub = GetSubMenu( *hmenu, i );\n        if (!sub) continue;\n        if (HMENU_16(sub) == target) return i;\n        if ((pos = find_sub_menu( &sub, target )) != -1)\n        {\n            *hmenu = sub;\n            return pos;\n        }\n    }\n    return -1;\n}\n\nWNDPROC get_classinfo_wndproc(const char *class)\n{\n    WNDCLASSA wc;\n    GetClassInfoA(NULL, class, &wc);\n    return wc.lpfnWndProc;\n}\nWNDPROC get_window_wndproc(const char *class)\n{\n    WNDPROC lpfnWndProc2 = NULL;\n    HWND hWnd = CreateWindowExA(0, class, \"\", 0, 0, 0, 1, 1, 0, 0, GetModuleHandleA(NULL), 0);\n    if (hWnd)\n    {\n        lpfnWndProc2 = (WNDPROC)GetWindowLongPtrA(hWnd, GWLP_WNDPROC);\n        DestroyWindow(hWnd);\n    }\n    return lpfnWndProc2;\n}\nBOOL is_listbox_wndproc(WNDPROC lpfnWndProc)\n{\n    static WNDPROC lpfnWndProc1 = 0;\n    static WNDPROC lpfnWndProc2 = 0;\n    if (!lpfnWndProc1)\n        lpfnWndProc1 = get_classinfo_wndproc(\"LISTBOX\");\n    if (!lpfnWndProc2)\n        lpfnWndProc2 = get_window_wndproc(\"LISTBOX\");\n    return lpfnWndProc ? (lpfnWndProc == lpfnWndProc1 || lpfnWndProc == lpfnWndProc2) : FALSE;\n}\nBOOL isListBox(HWND16 hWnd16, HWND hWnd)\n{\n    if (window_type_table[hWnd16] == WINDOW_TYPE_LISTBOX)\n        return TRUE;\n    WNDPROC lpfnWndProc = (WNDPROC)GetWindowLongPtrA(hWnd, GWLP_WNDPROC);\n    return is_listbox_wndproc(lpfnWndProc);\n}\n\nBOOL is_edit_wndproc(WNDPROC lpfnWndProc)\n{\n    static WNDPROC lpfnWndProc1 = 0;\n    static WNDPROC lpfnWndProc2 = 0;\n    if (!lpfnWndProc1)\n        lpfnWndProc1 = get_classinfo_wndproc(\"EDIT\");\n    if (!lpfnWndProc2)\n        lpfnWndProc2 = get_window_wndproc(\"EDIT\");\n    return lpfnWndProc ? (lpfnWndProc == lpfnWndProc1 || lpfnWndProc == lpfnWndProc2) : FALSE;\n}\nBOOL isEdit(HWND16 hWnd16, HWND hWnd)\n{\n    if (window_type_table[hWnd16] == WINDOW_TYPE_EDIT)\n        return TRUE;\n    WNDPROC lpfnWndProc = (WNDPROC)GetWindowLongPtrA(hWnd, GWLP_WNDPROC);\n    return is_edit_wndproc(lpfnWndProc);\n}\n\nBOOL is_scrollbar_wndproc(WNDPROC lpfnWndProc)\n{\n    static WNDPROC lpfnWndProc1 = 0;\n    static WNDPROC lpfnWndProc2 = 0;\n    if (!lpfnWndProc1)\n        lpfnWndProc1 = get_classinfo_wndproc(\"SCROLLBAR\");\n    if (!lpfnWndProc2)\n        lpfnWndProc2 = get_window_wndproc(\"SCROLLBAR\");\n    return lpfnWndProc ? (lpfnWndProc == lpfnWndProc1 || lpfnWndProc == lpfnWndProc2) : FALSE;\n}\nBOOL isScrollBar(HWND16 hWnd16, HWND hWnd)\n{\n    if (window_type_table[hWnd16] == WINDOW_TYPE_SCROLLBAR)\n        return TRUE;\n    WNDPROC lpfnWndProc = (WNDPROC)GetWindowLongPtrA(hWnd, GWLP_WNDPROC);\n    return is_scrollbar_wndproc(lpfnWndProc);\n}\n\nBOOL is_combobox_wndproc(WNDPROC lpfnWndProc)\n{\n    static WNDPROC lpfnWndProc1 = 0;\n    static WNDPROC lpfnWndProc2 = 0;\n    if (!lpfnWndProc1)\n        lpfnWndProc1 = get_classinfo_wndproc(\"COMBOBOX\");\n    if (!lpfnWndProc2)\n        lpfnWndProc2 = get_window_wndproc(\"COMBOBOX\");\n    return lpfnWndProc ? (lpfnWndProc == lpfnWndProc1 || lpfnWndProc == lpfnWndProc2) : FALSE;\n}\nBOOL isComboBox(HWND16 hWnd16, HWND hWnd)\n{\n    if (window_type_table[hWnd16] == WINDOW_TYPE_COMBOBOX)\n        return TRUE;\n    WNDPROC lpfnWndProc = (WNDPROC)GetWindowLongPtrA(hWnd, GWLP_WNDPROC);\n    return is_combobox_wndproc(lpfnWndProc);\n}\n\nBOOL is_static_wndproc(WNDPROC lpfnWndProc)\n{\n    static WNDPROC lpfnWndProc1 = 0;\n    static WNDPROC lpfnWndProc2 = 0;\n    if (!lpfnWndProc1)\n        lpfnWndProc1 = get_classinfo_wndproc(\"STATIC\");\n    if (!lpfnWndProc2)\n        lpfnWndProc2 = get_window_wndproc(\"STATIC\");\n    return lpfnWndProc ? (lpfnWndProc == lpfnWndProc1 || lpfnWndProc == lpfnWndProc2) : FALSE;\n}\nBOOL isStatic(HWND16 hWnd16, HWND hWnd)\n{\n    if (window_type_table[hWnd16] == WINDOW_TYPE_STATIC)\n        return TRUE;\n    WNDPROC lpfnWndProc = (WNDPROC)GetWindowLongPtrA(hWnd, GWLP_WNDPROC);\n    return is_static_wndproc(lpfnWndProc);\n}\n\nBOOL is_button_wndproc(WNDPROC lpfnWndProc)\n{\n    static WNDPROC lpfnWndProc1 = 0;\n    static WNDPROC lpfnWndProc2 = 0;\n    if (!lpfnWndProc1)\n        lpfnWndProc1 = get_classinfo_wndproc(\"BUTTON\");\n    if (!lpfnWndProc2)\n        lpfnWndProc2 = get_window_wndproc(\"BUTTON\");\n    return lpfnWndProc ? (lpfnWndProc == lpfnWndProc1 || lpfnWndProc == lpfnWndProc2) : FALSE;\n}\nBOOL isButton(HWND16 hWnd16, HWND hWnd)\n{\n    if (window_type_table[hWnd16] == WINDOW_TYPE_BUTTON)\n        return TRUE;\n    WNDPROC lpfnWndProc = (WNDPROC)GetWindowLongPtrA(hWnd, GWLP_WNDPROC);\n    return is_button_wndproc(lpfnWndProc);\n}\n\nBOOL is_mdiclient_wndproc(WNDPROC lpfnWndProc)\n{\n    static WNDPROC lpfnWndProc1 = 0;\n    static WNDPROC lpfnWndProc2 = 0;\n    if (!lpfnWndProc1)\n        lpfnWndProc1 = get_classinfo_wndproc(\"MDICLIENT\");\n    if (!lpfnWndProc2)\n    {\n        CLIENTCREATESTRUCT ccs = { 0 };\n        HWND hwnd = CreateWindowExA(0, \"MDICLIENT\", \"\", 0, 0, 0, 1, 1, 0, 0, GetModuleHandleA(NULL), &ccs);\n        lpfnWndProc2 = (WNDPROC)GetWindowLongPtrA(hwnd, GWLP_WNDPROC);\n        DestroyWindow(hwnd);\n    }\n    return lpfnWndProc ? (lpfnWndProc == lpfnWndProc1 || lpfnWndProc == lpfnWndProc2) : FALSE;\n}\nBOOL is_mdiclient(HWND16 hWnd16, HWND hWnd)\n{\n    if (window_type_table[hWnd16] == WINDOW_TYPE_MDICLIENT)\n        return TRUE;\n    WNDPROC lpfnWndProc = (WNDPROC)GetWindowLongPtrA(hWnd, GWLP_WNDPROC);\n    return is_mdiclient_wndproc(lpfnWndProc);\n}\n\nBOOL is_aviwnd(HWND16 hWnd16, HWND hWnd)\n{\n    if (window_type_table[hWnd16] == WINDOW_TYPE_AVIWND)\n        return TRUE;\n    char name[10];\n    if (GetClassNameA(hWnd, &name, 10))\n    {\n        if (!strcmp(name, \"AVIWnd32\"))\n        {\n            window_type_table[hWnd16] = WINDOW_TYPE_AVIWND;\n            return TRUE;\n        }\n    }\n    return FALSE;\n}\n\n/***********************************************************************\n *           LISTBOX_FindFileStrPos\n *\n * Find the nearest string located before a given string in directory\n * sort order (i.e. first files, then directories, then drives).\n */\nstatic INT LISTBOX_FindFileStrPos( HWND lbhwnd, LPCSTR str )\n{\n    INT min, max, res;\n    CHAR p[MAX_PATH];\n\n    if (!(GetWindowLongA(lbhwnd, GWL_STYLE) & LBS_HASSTRINGS))\n        return SendMessageA(lbhwnd, LB_FINDSTRING, -1, str);\n    min = 0;\n    max = SendMessageA(lbhwnd, LB_GETCOUNT, 0, 0);\n    while (min != max)\n    {\n        INT index = (min + max) / 2;\n        SendMessageA(lbhwnd, LB_GETTEXT, index, p);\n        if (*p == '[')  /* drive or directory */\n        {\n            if (*str != '[') res = -1;\n            else if (p[1] == '-')  /* drive */\n            {\n                if (str[1] == '-') res = str[2] - p[2];\n                else res = -1;\n            }\n            else  /* directory */\n            {\n                if (str[1] == '-') res = 1;\n                else res = lstrcmpiA( str, p );\n            }\n        }\n        else  /* filename */\n        {\n            if (*str == '[') res = 1;\n            else res = lstrcmpiA( str, p );\n        }\n        if (!res) return index;\n        if (res < 0) max = index;\n        else min = index + 1;\n    }\n    return max;\n}\n\n/***********************************************************************\n *           LISTBOX_Directory\n */\nstatic LRESULT LISTBOX_Directory( HWND lbhwnd, UINT attrib, LPCWSTR filespec )\n{\n    HANDLE handle;\n    LRESULT ret = LB_OKAY;\n    WIN32_FIND_DATAA entry;\n    int pos;\n    LRESULT maxinsert = LB_ERR;\n\n    /* don't scan directory if we just want drives exclusively */\n    if (attrib != (DDL_DRIVES | DDL_EXCLUSIVE)) {\n        /* scan directory */\n        if ((handle = FindFirstFileA(filespec, &entry)) == INVALID_HANDLE_VALUE)\n        {\n            int le = GetLastError();\n            if ((le != ERROR_NO_MORE_FILES) && (le != ERROR_FILE_NOT_FOUND)) return LB_ERR;\n        }\n        else\n        {\n            do\n            {\n                CHAR buffer[270];\n                if (entry.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)\n                {\n                    if (!(attrib & DDL_DIRECTORY) ||\n                        !strcmp( entry.cFileName, \".\" )) continue;\n                    buffer[0] = '[';\n                    if (entry.cAlternateFileName[0])\n                        lstrcpyA( buffer + 1, entry.cAlternateFileName );\n                    else\n                        lstrcpyA( buffer + 1, entry.cFileName );\n                    lstrcatA(buffer, \"]\");\n                }\n                else  /* not a directory */\n                {\n#define ATTRIBS (FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN | \\\n                 FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_DIRECTORY)\n\n                    if ((attrib & DDL_EXCLUSIVE) &&\n                        ((attrib & ATTRIBS) != (entry.dwFileAttributes & ATTRIBS)))\n                        continue;\n#undef ATTRIBS\n                    if (entry.cAlternateFileName[0])\n                        lstrcpyA( buffer, entry.cAlternateFileName );\n                    else\n                        lstrcpyA( buffer, entry.cFileName );\n                }\n                CharLowerA( buffer );\n                pos = LISTBOX_FindFileStrPos( lbhwnd, buffer );\n                if ((ret = SendMessageA(lbhwnd, LB_INSERTSTRING, pos, buffer)) < 0)\n                    break;\n                if (ret <= maxinsert) maxinsert++; else maxinsert = ret;\n            } while (FindNextFileA( handle, &entry ));\n            FindClose( handle );\n        }\n    }\n    if (ret >= 0)\n    {\n        ret = maxinsert;\n\n        /* scan drives */\n        if (attrib & DDL_DRIVES)\n        {\n            CHAR buffer[] = \"[-a-]\";\n            CHAR root[] = \"A:\\\\\";\n            int drive;\n            for (drive = 0; drive < 26; drive++, buffer[2]++, root[0]++)\n            {\n                if (GetDriveTypeA(root) <= DRIVE_NO_ROOT_DIR) continue;\n                if ((ret = SendMessageA(lbhwnd, LB_ADDSTRING, 0, buffer)) < 0)\n                    break;\n            }\n        }\n    }\n    return ret;\n}\n\n/***********************************************************************\n*           listbox_proc16\n*/\nstatic LRESULT listbox_proc_CallProc16To32A(winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode\n\t, LRESULT *result, void *arg, BOOL *f)\n{\n\tstatic const UINT msg16_offset = LB_ADDSTRING16 - LB_ADDSTRING;\n\tLRESULT ret;\n\n\t*f = TRUE;\n\tswitch (msg)\n\t{\n\tcase WM_SIZE:\n\t\tif (is_old_app(hwnd))\n\t\t{\n\t\t\tDWORD style = GetWindowLongW(hwnd, GWL_STYLE);\n\t\t\tint height, remaining, item_height;\n\t\t\tRECT rect;\n\n\t\t\t/* give a margin for error to old 16 bits programs - if we need\n\t\t\tless than the height of the nonclient area, round to the\n\t\t\t*next* number of items */\n\n\t\t\tif (!(style & LBS_NOINTEGRALHEIGHT) && !(style & LBS_OWNERDRAWVARIABLE) && !(style & LBS_OWNERDRAWFIXED))\n\t\t\t{\n\t\t\t\tGetClientRect(hwnd, &rect);\n\t\t\t\theight = rect.bottom - rect.top;\n\t\t\t\titem_height = wow_handlers32.listbox_proc(hwnd, LB_GETITEMHEIGHT, 0, 0, FALSE);\n\t\t\t\tremaining = item_height ? (height % item_height) : 0;\n\t\t\t\tif ((height > item_height) && remaining)\n\t\t\t\t{\n\t\t\t\t\tGetWindowRect(hwnd, &rect);\n\t\t\t\t\tif ((item_height - remaining) <= rect.bottom - rect.top - height)\n\t\t\t\t\t\tremaining = remaining - item_height;\n\t\t\t\t\tTRACE(\"[%p]: changing height %d -> %d\\n\", hwnd, height, height - remaining);\n\t\t\t\t\tSetWindowPos(hwnd, 0, 0, 0, rect.right - rect.left,\n\t\t\t\t\t\trect.bottom - rect.top - remaining,\n\t\t\t\t\t\tSWP_NOZORDER | SWP_NOACTIVATE | SWP_NOMOVE);\n\t\t\t\t\t*result = 0;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn callback(hwnd, msg, wParam, lParam, result, arg);\n//\t\treturn wow_handlers32.listbox_proc(hwnd, msg, wParam, lParam, unicode);\n\n\tcase LB_RESETCONTENT16:\n\tcase LB_DELETESTRING16:\n\tcase LB_GETITEMDATA16:\n\tcase LB_SETITEMDATA16:\n\tcase LB_GETCOUNT16:\n\tcase LB_GETTEXTLEN16:\n\tcase LB_GETCURSEL16:\n\tcase LB_GETTOPINDEX16:\n\tcase LB_GETITEMHEIGHT16:\n\tcase LB_SETCARETINDEX16:\n\tcase LB_GETCARETINDEX16:\n\tcase LB_SETTOPINDEX16:\n\tcase LB_SETCOLUMNWIDTH16:\n\tcase LB_GETSELCOUNT16:\n\tcase LB_SELITEMRANGE16:\n\tcase LB_SELITEMRANGEEX16:\n\tcase LB_GETHORIZONTALEXTENT16:\n\tcase LB_SETHORIZONTALEXTENT16:\n\tcase LB_GETANCHORINDEX16:\n\tcase LB_CARETON16:\n\tcase LB_CARETOFF16:\n\t\tmsg -= msg16_offset;\n\t\tbreak;\n\tcase LB_GETSEL16:\n\tcase LB_SETSEL16:\n\tcase LB_SETCURSEL16:\n\tcase LB_SETANCHORINDEX16:\n\t\twParam = (INT)(INT16)wParam;\n\t\tmsg -= msg16_offset;\n\t\tbreak;\n\tcase LB_INSERTSTRING16:\n\tcase LB_FINDSTRING16:\n\tcase LB_FINDSTRINGEXACT16:\n\tcase LB_SELECTSTRING16:\n\t\twParam = (INT)(INT16)wParam;\n\t\t/* fall through */\n\tcase LB_ADDSTRING16:\n\tcase LB_ADDFILE16:\n\t{\n\t\tDWORD style = GetWindowLongW(hwnd, GWL_STYLE);\n\t\tif ((style & LBS_HASSTRINGS) || !(style & (LBS_OWNERDRAWFIXED | LBS_OWNERDRAWVARIABLE)))\n\t\t\tlParam = (LPARAM)MapSL(lParam);\n\t\tmsg -= msg16_offset;\n\t\tbreak;\n\t}\n\tcase LB_GETTEXT16:\n\t\tlParam = (LPARAM)MapSL(lParam);\n\t\tmsg -= msg16_offset;\n        ret = callback(hwnd, msg, wParam, lParam, result, arg);\n        return *result;\n\t\tbreak;\n\tcase LB_SETITEMHEIGHT16:\n\t\tlParam = LOWORD(lParam);\n\t\tmsg -= msg16_offset;\n\t\tbreak;\n\tcase LB_GETITEMRECT16:\n\t{\n\t\tRECT rect;\n\t\tRECT16 *r16 = MapSL(lParam);\n\t\tret = callback(hwnd, LB_GETITEMRECT, (INT16)wParam, (LPARAM)&rect, result, arg);\n//\t\tret = wow_handlers32.listbox_proc(hwnd, LB_GETITEMRECT, (INT16)wParam, (LPARAM)&rect, FALSE);\n\t\tr16->left = rect.left;\n\t\tr16->top = rect.top;\n\t\tr16->right = rect.right;\n\t\tr16->bottom = rect.bottom;\n\t\treturn ret;\n\t}\n\tcase LB_GETSELITEMS16:\n\t{\n\t\tINT16 *array16 = MapSL(lParam);\n\t\tINT i, count = (INT16)wParam, *array;\n\t\tif (!(array = HeapAlloc(GetProcessHeap(), 0, wParam * sizeof(*array)))) return LB_ERRSPACE;\n\t\tret = callback(hwnd, LB_GETSELITEMS, count, (LPARAM)array, result, arg);\n\t\t//ret = wow_handlers32.listbox_proc(hwnd, LB_GETSELITEMS, count, (LPARAM)array, FALSE);\n\t\tfor (i = 0; i < ret; i++) array16[i] = array[i];\n\t\tHeapFree(GetProcessHeap(), 0, array);\n\t\treturn ret;\n\t}\n\tcase LB_DIR16:\n\t\t/* according to Win16 docs, DDL_DRIVES should make DDL_EXCLUSIVE\n\t\t* be set automatically (this is different in Win32) */\n\t\tif (wParam & DDL_DRIVES) wParam |= DDL_EXCLUSIVE;\n\t\tlParam = (LPARAM)MapSL(lParam);\n        *result = LISTBOX_Directory(hwnd, wParam, lParam);\n        return *result;\n\tcase LB_SETTABSTOPS16:\n\t{\n\t\tINT i, count, *tabs = NULL;\n\t\tINT16 *tabs16 = MapSL(lParam);\n\n\t\tif ((count = (INT16)wParam) > 0)\n\t\t{\n\t\t\tif (!(tabs = HeapAlloc(GetProcessHeap(), 0, wParam * sizeof(*tabs)))) return LB_ERRSPACE;\n\t\t\tfor (i = 0; i < count; i++) tabs[i] = tabs16[i];\n\t\t}\n\t\tret = callback(hwnd, LB_SETTABSTOPS, count, (LPARAM)tabs, result, arg);\n\t\t//ret = wow_handlers32.listbox_proc(hwnd, LB_SETTABSTOPS, count, (LPARAM)tabs, FALSE);\n\t\tHeapFree(GetProcessHeap(), 0, tabs);\n\t\treturn ret;\n\t}\n\tdefault:\n\t\t*f = FALSE;\n\t\treturn 0;\n\t}\n\tret = callback(hwnd, msg, wParam, lParam, result, arg);\n\treturn ret;//wow_handlers32.listbox_proc(hwnd, msg, wParam, lParam, FALSE);\n}\nstatic LRESULT combo_proc_CallProc16To32A(winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode\n    , LRESULT *result, void *arg, BOOL *f);\nstatic LRESULT button_proc_CallProc16To32A(winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode\n    , LRESULT *result, void *arg, BOOL *f);\nstatic LRESULT edit_proc_CallProc16To32A(winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode\n    , LRESULT *result, void *arg, BOOL *f);\nstatic LRESULT scrollbar_proc_CallProc16To32A(winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode\n    , LRESULT *result, void *arg, BOOL *f);\nstatic LRESULT static_proc_CallProc16To32A(winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode\n    , LRESULT *result, void *arg, BOOL *f);\nvoid DROPSTRUCT16_32(LPDROPSTRUCT lpds32, LPDROPSTRUCT16 lpds16)\n{\n    lpds32->hwndSink = HWND_32(lpds16->hwndSink);\n    lpds32->hwndSource = HWND_32(lpds16->hwndSource);\n    lpds32->dwControlData = lpds16->dwControlData;\n    lpds32->dwData = lpds16->dwData;\n    lpds32->wFmt = lpds16->wFmt;\n    lpds32->ptDrop.x = lpds16->ptDrop.x;\n    lpds32->ptDrop.y = lpds16->ptDrop.y;\n    TRACE(\"%p,%p,%04x,%08x,%d,%d,%08x\\n\", lpds32->hwndSink, lpds32->hwndSource, lpds32->wFmt, lpds32->dwData, lpds32->ptDrop.x, lpds32->ptDrop.y, lpds32->dwControlData);\n}\nvoid DROPSTRUCT32_16(LPDROPSTRUCT lpds32, LPDROPSTRUCT16 lpds16)\n{\n    DWORD pid;\n    lpds16->hwndSink = HWND_16(lpds32->hwndSink);\n    lpds16->hwndSource = HWND_16(lpds32->hwndSource);\n    lpds16->dwControlData = lpds32->dwControlData;\n    lpds16->dwData = lpds32->dwData;\n    lpds16->wFmt = lpds32->wFmt;\n    lpds16->ptDrop.x = lpds32->ptDrop.x;\n    lpds16->ptDrop.y = lpds32->ptDrop.y;\n    if (GetWindowThreadProcessId(lpds32->hwndSource, &pid))\n    {\n        if (GetCurrentProcessId() != pid)\n        {\n            WCHAR buf[0x1000];\n            SIZE_T read;\n            HANDLE process = OpenProcess(PROCESS_VM_READ, FALSE, pid);\n            if (ReadProcessMemory(process, lpds32->dwData, buf, sizeof(buf), &read) && read >= sizeof(*buf))\n            {\n                buf[(read / sizeof(*buf)) - 1] = 0;\n                ERR(\"D&D file from other processes is broken in win32. %s\\n\", debugstr_w(buf));\n            }\n            CloseHandle(process);\n        }\n    }\n    TRACE(\"%p,%p,%04x,%08x,%d,%d,%08x\\n\", lpds32->hwndSink, lpds32->hwndSource, lpds32->wFmt, lpds32->dwData, lpds32->ptDrop.x, lpds32->ptDrop.y, lpds32->dwControlData);\n}\n\nATOM atom_progman;\nATOM atom_progman16;\nATOM gatom_progman;\nATOM gatom_progman16;\nstatic void init_atom()\n{\n    if (!atom_progman)\n    {\n        atom_progman = AddAtomA(\"Progman\");\n    }\n    if (!gatom_progman)\n    {\n        gatom_progman = GlobalAddAtomA(\"Progman\");\n    }\n    if (!atom_progman16)\n    {\n        atom_progman16 = AddAtomA(\"Progman16\");\n    }\n    if (!gatom_progman16)\n    {\n        gatom_progman16 = GlobalAddAtomA(\"Progman16\");\n    }\n}\nstatic ATOM service16_32(ATOM atom)\n{\n    init_atom();\n    if (atom_progman == atom)\n        return atom_progman16;\n    if (gatom_progman == atom)\n\treturn gatom_progman16;\n    return atom;\n}\n\nstatic ATOM service32_16(ATOM atom)\n{\n    init_atom();\n    if (atom_progman16 == atom)\n        return atom_progman;\n    if (gatom_progman16 == atom)\n        return gatom_progman;\n    return atom;\n}\n\nstatic ATOM topic16_32(ATOM atom)\n{\n    init_atom();\n    if (atom_progman == atom)\n        return atom_progman16;\n    if (gatom_progman == atom)\n        return gatom_progman16;\n    return atom;\n}\n\nstatic ATOM topic32_16(ATOM atom)\n{\n    init_atom();\n    if (atom_progman16 == atom)\n        return atom_progman;\n    if (gatom_progman16 == atom)\n        return gatom_progman;\n    return atom;\n}\n\nstatic BOOL CALLBACK child_paint(HWND hwnd, LPARAM lparam)\n{\n    if (IsWindowVisible(hwnd))\n    {\n        HWND parent = hwnd;\n        RECT crect;\n        GetWindowRect(hwnd, &crect);\n        while (parent = GetAncestor(parent, GA_PARENT))\n        {\n            RECT prect, irect;\n            GetWindowRect(parent, &prect);\n            if (!IntersectRect(&irect, &prect, &crect))\n            {\n                RedrawWindow(hwnd, NULL, NULL, RDW_INTERNALPAINT);\n                break;\n            }\n        }\n    }\n    return TRUE;\n}\n\n#include <pshpack1.h>\ntypedef struct {     /* structure for dropped files */\n    WORD     wSize;\n    POINT16  ptMousePos;\n    BOOL16   fInNonClientArea;\n    /* memory block with filenames follows */\n} DROPFILESTRUCT16, *LPDROPFILESTRUCT16;\n#include <poppack.h>\n\nstatic HDROP16 hdrop32_to_hdrop16(HDROP hdrop32)\n{\n    LPDROPFILES files = (LPDROPFILES)GlobalLock(hdrop32);\n    int size16 = sizeof(DROPFILESTRUCT16);\n    HDROP16 hdrop16;\n    LPDROPFILESTRUCT16 files16;\n    LPSTR filenames16;\n    if (!files)\n        return (HDROP16)hdrop32;\n    if (!files->fWide)\n    {\n        LPSTR filenames = (LPSTR)((LPBYTE)files + files->pFiles);\n        while (TRUE)\n        {\n            size_t len = strlen(filenames) + 1;\n            size16 += len;\n            filenames += len;\n            if (len == 1)\n                break;\n        }\n    }\n    else\n    {\n        LPWSTR filenames = (LPWSTR)((LPBYTE)files + files->pFiles);\n        while (TRUE)\n        {\n            size_t len = wcslen(filenames) + 1;\n            size16 += WideCharToMultiByte(CP_ACP, NULL, filenames, len, NULL, 0, NULL, NULL);\n            filenames += len;\n            if (len == 1)\n                break;\n        }\n    }\n    hdrop16 = (HDROP16)GlobalAlloc16(0, size16);\n    files16 = GlobalLock16(hdrop16);\n    files16->wSize = sizeof(*files16);\n    files16->ptMousePos.x = files->pt.x;\n    files16->ptMousePos.y = files->pt.y;\n    files16->fInNonClientArea = files->fNC;\n    filenames16 = (LPSTR)((LPBYTE)files16 + files16->wSize);\n    if (!files->fWide)\n    {\n        LPSTR filenames = (LPSTR)((LPBYTE)files + files->pFiles);\n        while (TRUE)\n        {\n            size_t len = strlen(filenames) + 1;\n            memcpy(filenames16, filenames, len);\n            filenames16 += len;\n            filenames += len;\n            if (len == 1)\n                break;\n        }\n    }\n    else\n    {\n        int remain_bytes = size16 - sizeof(*files16);\n        LPWSTR filenames = (LPWSTR)((LPBYTE)files + files->pFiles);\n        while (TRUE)\n        {\n            size_t len = wcslen(filenames) + 1;\n            int mblen = WideCharToMultiByte(CP_ACP, NULL, filenames, len, filenames16, remain_bytes, NULL, NULL);\n            remain_bytes -= mblen;\n            filenames16 += mblen;\n            filenames += len;\n            if (len == 1)\n                break;\n        }\n    }\n    GlobalUnlock16(hdrop16);\n    GlobalUnlock(files);\n    DragFinish(hdrop32);\n    return hdrop16;\n}\n\nstatic HDROP hdrop16_to_hdrop32(HDROP16 hdrop16)\n{\n    return (HDROP)hdrop16;\n/* win32 doesnt process WM_DROPFILES */\n#if false\n    LPDROPFILESTRUCT16 files16 = (LPDROPFILESTRUCT16)GlobalLock16(hdrop16);\n    int size32 = sizeof(DROPFILES);\n    LPSTR filenames;\n    LPDROPFILES files32;\n    HDROP hdrop32;\n    LPSTR filenames32;\n    if (!files16)\n        return NULL;\n    filenames = (LPSTR)((LPBYTE)files16 + files16->wSize);\n    while (TRUE)\n    {\n        size_t len = strlen(filenames);\n        filenames += len + 1;\n        size32 += len + 1;\n        if (len == 0)\n            break;\n    }\n    hdrop32 = (HDROP)GlobalAlloc(0, size32);\n    files32 = (LPDROPFILES)GlobalLock(hdrop32);\n    files32->fWide = FALSE;\n    files32->fNC = files16->fInNonClientArea;\n    files32->pt.x = files16->ptMousePos.x;\n    files32->pt.y = files16->ptMousePos.y;\n    files32->pFiles = sizeof(*files32);\n    filenames32 = (LPSTR)((LPBYTE)files32 + files32->pFiles);\n    filenames = (LPSTR)((LPBYTE)files16 + files16->wSize);\n    while (TRUE)\n    {\n        size_t len = strlen(filenames);\n        memcpy(filenames32, filenames, len + 1);\n        filenames += len + 1;\n        filenames32 += len + 1;\n        if (len == 0)\n            break;\n    }\n    GlobalUnlock16(files16);\n    return hdrop32;\n#endif\n}\n\n// TODO: check for and fix memory leaks\nHANDLE convert_cb_data_16_32(int format, HANDLE16 data16, BOOL set_format);\nstatic void convert_dde_msg_16_to_32(int msg, UINT_PTR handle)\n{\n    void *ptr = (void *)GlobalLock((HGLOBAL)handle);\n    char *data = 0;\n    WORD format;\n    switch (msg)\n    {\n        case WM_DDE_DATA:\n            data = ((DDEDATA *)ptr)->Value;\n            format = ((DDEDATA *)ptr)->cfFormat;\n            break;\n        case WM_DDE_POKE:\n            data = ((DDEPOKE *)ptr)->Value;\n            format = ((DDEPOKE *)ptr)->cfFormat;\n            break;\n    }\n    if (data && (format < 0xc000) && (format != CF_TEXT) && (format != CF_OEMTEXT) && *(HANDLE16 *)data)\n        *(HANDLE *)data = convert_cb_data_16_32(format, *(HANDLE16 *)data, FALSE);\n    GlobalUnlock((HGLOBAL)handle);\n}\n\nHANDLE16 convert_cb_data_32_16(int format, HANDLE data32, BOOL set_format);\nstatic void convert_dde_msg_32_to_16(int msg, HANDLE16 handle)\n{\n    void *ptr = (void *)GlobalLock16(handle);\n    char *data = 0;\n    WORD format;\n    switch (msg)\n    {\n        case WM_DDE_DATA:\n            data = ((DDEDATA *)ptr)->Value;\n            format = ((DDEDATA *)ptr)->cfFormat;\n            break;\n        case WM_DDE_POKE:\n            data = ((DDEPOKE *)ptr)->Value;\n            format = ((DDEPOKE *)ptr)->cfFormat;\n            break;\n    }\n    if (data && (format < 0xc000) && (format != CF_TEXT) && (format != CF_OEMTEXT) && *(HANDLE *)data)\n        *(HANDLE16 *)data = convert_cb_data_32_16(format, *(HANDLE *)data, FALSE);\n    GlobalUnlock16(handle);\n}\n\nstatic void check_gptr(HANDLE16 src)\n{\n    HANDLE dst;\n    if (!src) return;\n    if (dst = GLOBAL_GetLink(src))\n    {\n        BOOL valid = FALSE;\n        if ((DWORD)dst & 4)\n        {\n            if (GlobalFlags(dst) != GMEM_INVALID_HANDLE)\n                valid = TRUE;\n        }\n        else\n        {\n            if (HeapValidate(GetProcessHeap(), 0, dst))\n                valid = TRUE;\n        }\n        if (!valid)\n        {\n            GLOBAL_SetLink(src, 0);\n            GlobalFree16(src);\n        }\n    }\n}\n\n/**********************************************************************\n *\t     WINPROC_CallProc16To32A\n */\nLRESULT WINPROC_CallProc16To32A( winproc_callback_t callback, HWND16 hwnd, UINT16 msg,\n                                 WPARAM16 wParam, LPARAM lParam, LRESULT *result, void *arg )\n{\n    LRESULT ret = 0;\n    HWND hwnd32 = WIN_Handle32( hwnd );\n\n    const char *msg_str = message_to_str(msg);\n    TRACE(\"(%p, %04X, %s(%04X), %04X, %08X)\\n\", callback, hwnd, msg_str, msg, wParam, lParam);\n    if (isListBox(hwnd, hwnd32) || (call_window_proc_callback == callback && is_listbox_wndproc(arg)))\n\t{\n        BOOL f;\n        window_type_table[hwnd] = (BYTE)WINDOW_TYPE_LISTBOX;\n\t\tret = listbox_proc_CallProc16To32A(callback, hwnd32, msg, wParam, lParam, 0, result, arg, &f);\n\t\tif (f)\n\t\t\treturn ret;\n\t}\n    if (isComboBox(hwnd, hwnd32) || (call_window_proc_callback == callback && is_combobox_wndproc(arg)))\n    {\n        BOOL f;\n        window_type_table[hwnd] = (BYTE)WINDOW_TYPE_COMBOBOX;\n        ret = combo_proc_CallProc16To32A(callback, hwnd32, msg, wParam, lParam, 0, result, arg, &f);\n        if (f)\n            return ret;\n    }\n    if (isButton(hwnd, hwnd32) || (call_window_proc_callback == callback && is_button_wndproc(arg)))\n    {\n        BOOL f;\n        window_type_table[hwnd] = (BYTE)WINDOW_TYPE_BUTTON;\n        ret = button_proc_CallProc16To32A(callback, hwnd32, msg, wParam, lParam, 0, result, arg, &f);\n        if (f)\n            return ret;\n    }\n    if (isEdit(hwnd, hwnd32) || (call_window_proc_callback == callback && is_edit_wndproc(arg)))\n    {\n        BOOL f;\n        window_type_table[hwnd] = (BYTE)WINDOW_TYPE_EDIT;\n        ret = edit_proc_CallProc16To32A(callback, hwnd32, msg, wParam, lParam, 0, result, arg, &f);\n        if (f)\n            return ret;\n    }\n    if (isScrollBar(hwnd, hwnd32) || (call_window_proc_callback == callback && is_scrollbar_wndproc(arg)))\n    {\n        BOOL f;\n        window_type_table[hwnd] = (BYTE)WINDOW_TYPE_SCROLLBAR;\n        ret = scrollbar_proc_CallProc16To32A(callback, hwnd32, msg, wParam, lParam, 0, result, arg, &f);\n        if (f)\n            return ret;\n    }\n    if (isStatic(hwnd, hwnd32) || (call_window_proc_callback == callback && is_static_wndproc(arg)))\n    {\n        BOOL f;\n        window_type_table[hwnd] = (BYTE)WINDOW_TYPE_STATIC;\n        ret = static_proc_CallProc16To32A(callback, hwnd32, msg, wParam, lParam, 0, result, arg, &f);\n        if (f)\n            return ret;\n    }\n    if (is_aviwnd(hwnd, hwnd32) && (GetWindowThreadProcessId(hwnd32, NULL) != GetCurrentThreadId()))\n    {\n        aviwnd_cwp = arg;\n        return 1;\n    }\n    switch(msg)\n    {\n    case WM_NCCREATE:\n    case WM_CREATE:\n        {\n            if (!HIWORD(lParam))\n            {\n                ret = callback(hwnd32, msg, wParam, lParam, result, arg);\n                break;\n            }\n            CREATESTRUCT16 *cs16 = MapSL(lParam);\n            CREATESTRUCTA cs;\n            MDICREATESTRUCTA mdi_cs;\n            CLIENTCREATESTRUCT c32;\n            BOOL mdichild = GetWindowLongW(hwnd32, GWL_EXSTYLE) & WS_EX_MDICHILD ? TRUE : FALSE;\n            BOOL mdiclient = is_mdiclient(hwnd, hwnd32) || (call_window_proc_callback == callback && is_mdiclient_wndproc(arg));\n            BOOL fixlistbox = (get_windows_build() >= 26100) && (window_type_table[hwnd] == (BYTE)WINDOW_TYPE_LISTBOX) && (msg == WM_CREATE) && (callback != call_window_proc_callback);\n\n            CREATESTRUCT16to32A( hwnd32, cs16, &cs );\n            if (mdichild)\n            {\n                MDICREATESTRUCT16 *mdi_cs16 = MapSL(cs16->lpCreateParams);\n                MDICREATESTRUCT16to32A(mdi_cs16, &mdi_cs);\n                cs.lpCreateParams = &mdi_cs;\n            }\n            else if (mdiclient)\n            {\n                CLIENTCREATESTRUCT16 *c16 = MapSL(cs16->lpCreateParams);\n                c32.idFirstChild = c16->idFirstChild;\n                c32.hWindowMenu = HMENU_32(c16->hWindowMenu);\n                cs.lpCreateParams = (LPVOID)&c32;\n            }\n            // some programs set ws_hscroll when they want ws_vscroll\n            // this appears to work in win31 but Windows 11 24H2 broke the compatbility\n            if (fixlistbox)\n            {\n                if (cs.style & WS_HSCROLL)\n                {\n                    cs.style |= WS_VSCROLL;\n                    SetWindowLongW(hwnd32, GWL_STYLE, cs.style);\n                }\n            }\n            ret = callback( hwnd32, msg, wParam, (LPARAM)&cs, result, arg );\n            // some programs expect the listbox to be resized in create \n            // again Windows 11 24H2 broke the compatbility\n            if (fixlistbox)\n            {\n                cs.x -= 1;\n                cs.y -= 1;\n                cs.cx += 2;\n                cs.cy += 2;\n                SetWindowPos(hwnd32, 0, cs.x, cs.y, cs.cx, cs.cy, SWP_NOZORDER);\n            }\n            if (mdiclient || mdichild)\n                cs.lpCreateParams = cs16->lpCreateParams;\n            CREATESTRUCT32Ato16( hwnd32, &cs, cs16 );\n        }\n        break;\n    case WM_MDICREATE:\n        {\n            MDICREATESTRUCT16 *cs16 = MapSL(lParam);\n            MDICREATESTRUCTA cs;\n\n            MDICREATESTRUCT16to32A( cs16, &cs );\n            ret = callback( hwnd32, msg, wParam, (LPARAM)&cs, result, arg );\n\t\t\t*result = HWND_16((HWND)*result);\n            MDICREATESTRUCT32Ato16( &cs, cs16 );\n        }\n        break;\n    case WM_MDIACTIVATE:\n        if (lParam)\n            ret = callback( hwnd32, msg, (WPARAM)WIN_Handle32( HIWORD(lParam) ),\n                            (LPARAM)WIN_Handle32( LOWORD(lParam) ), result, arg );\n        else /* message sent to MDI client */\n            ret = callback( hwnd32, msg, (WPARAM)WIN_Handle32(wParam), lParam, result, arg );\n        break;\n    case WM_MDIGETACTIVE:\n        {\n            BOOL maximized = FALSE;\n            ret = callback( hwnd32, msg, wParam, (LPARAM)&maximized, result, arg );\n            *result = MAKELRESULT( LOWORD(HWND_16((HWND)*result)), maximized );\n        }\n        break;\n    case WM_MDISETMENU:\n        {\n            void SetWindowHMenu16(WORD hWnd16, HMENU16 hinst16);\n            ret = callback( hwnd32, wParam ? WM_MDIREFRESHMENU : WM_MDISETMENU,\n                            (WPARAM)HMENU_32(LOWORD(lParam)), (LPARAM)HMENU_32(HIWORD(lParam)),\n                            result, arg );\n            if (ret && LOWORD(lParam))\n                SetWindowHMenu16(GetParent16(hwnd), LOWORD(lParam));\n            *result = HMENU_16((HMENU)*result);\n        }\n        break;\n    case WM_MDIRESTORE:\n        ret = callback( hwnd32, msg, (WPARAM)WIN_Handle32(wParam), lParam, result, arg );\n        *result = 0;\n        break;\n    case WM_MDINEXT:\n        ret = callback(hwnd32, msg, (WPARAM)WIN_Handle32(wParam), lParam, result, arg);\n        break;\n    case WM_GETMINMAXINFO:\n        {\n            MINMAXINFO16 *mmi16 = MapSL(lParam);\n            MINMAXINFO mmi;\n\n            MINMAXINFO16to32( mmi16, &mmi );\n            ret = callback( hwnd32, msg, wParam, (LPARAM)&mmi, result, arg );\n            MINMAXINFO32to16( &mmi, mmi16 );\n        }\n        break;\n    case WM_WINDOWPOSCHANGING:\n    case WM_WINDOWPOSCHANGED:\n        {\n            WINDOWPOS16 *winpos16 = MapSL(lParam);\n            WINDOWPOS winpos;\n\n            WINDOWPOS16to32( winpos16, &winpos );\n            ret = callback( hwnd32, msg, wParam, (LPARAM)&winpos, result, arg );\n            WINDOWPOS32to16( &winpos, winpos16 );\n        }\n        break;\n    case WM_NCCALCSIZE:\n        {\n            NCCALCSIZE_PARAMS16 *nc16 = MapSL(lParam);\n            NCCALCSIZE_PARAMS nc;\n            WINDOWPOS winpos;\n\n            RECT16to32( &nc16->rgrc[0], &nc.rgrc[0] );\n            if (wParam)\n            {\n                RECT16to32( &nc16->rgrc[1], &nc.rgrc[1] );\n                RECT16to32( &nc16->rgrc[2], &nc.rgrc[2] );\n                WINDOWPOS16to32( MapSL(nc16->lppos), &winpos );\n                nc.lppos = &winpos;\n            }\n            ret = callback( hwnd32, msg, wParam, (LPARAM)&nc, result, arg );\n            RECT32to16( &nc.rgrc[0], &nc16->rgrc[0] );\n            if (wParam)\n            {\n                RECT32to16( &nc.rgrc[1], &nc16->rgrc[1] );\n                RECT32to16( &nc.rgrc[2], &nc16->rgrc[2] );\n                WINDOWPOS32to16( &winpos, MapSL(nc16->lppos) );\n            }\n        }\n        break;\n    case WM_COMPAREITEM:\n        {\n            COMPAREITEMSTRUCT16* cis16 = MapSL(lParam);\n            COMPAREITEMSTRUCT cis;\n            cis.CtlType    = cis16->CtlType;\n            cis.CtlID      = cis16->CtlID;\n            cis.hwndItem   = WIN_Handle32( cis16->hwndItem );\n            cis.itemID1    = cis16->itemID1;\n            cis.itemData1  = cis16->itemData1;\n            cis.itemID2    = cis16->itemID2;\n            cis.itemData2  = cis16->itemData2;\n            cis.dwLocaleId = 0;  /* FIXME */\n            ret = callback( hwnd32, msg, wParam, (LPARAM)&cis, result, arg );\n        }\n        break;\n    case WM_DELETEITEM:\n        {\n            DELETEITEMSTRUCT16* dis16 = MapSL(lParam);\n            DELETEITEMSTRUCT dis;\n            dis.CtlType  = dis16->CtlType;\n            dis.CtlID    = dis16->CtlID;\n            dis.hwndItem = WIN_Handle32( dis16->hwndItem );\n            dis.itemData = dis16->itemData;\n            ret = callback( hwnd32, msg, wParam, (LPARAM)&dis, result, arg );\n        }\n        break;\n    case WM_MEASUREITEM:\n        {\n            MEASUREITEMSTRUCT16* mis16 = MapSL(lParam);\n            MEASUREITEMSTRUCT mis;\n            mis.CtlType    = mis16->CtlType;\n            mis.CtlID      = mis16->CtlID;\n            mis.itemID     = mis16->itemID;\n            mis.itemWidth  = mis16->itemWidth;\n            mis.itemHeight = mis16->itemHeight;\n            mis.itemData   = mis16->CtlType == ODT_MENU ? MapSL(mis16->itemData) : mis16->itemData;\n            ret = callback( hwnd32, msg, wParam, (LPARAM)&mis, result, arg );\n            mis16->itemWidth  = (UINT16)mis.itemWidth;\n            mis16->itemHeight = (UINT16)mis.itemHeight;\n        }\n        break;\n    case WM_DRAWITEM:\n        {\n            DRAWITEMSTRUCT16* dis16 = MapSL(lParam);\n            DRAWITEMSTRUCT dis;\n            dis.CtlType       = dis16->CtlType;\n            dis.CtlID         = dis16->CtlID;\n            dis.itemID        = dis16->itemID;\n            dis.itemAction    = dis16->itemAction;\n            dis.itemState     = dis16->itemState;\n            dis.hwndItem      = (dis.CtlType == ODT_MENU) ? (HWND)HMENU_32(dis16->hwndItem)\n                                                          : WIN_Handle32( dis16->hwndItem );\n            dis.hDC           = HDC_32(dis16->hDC);\n            dis.itemData      = dis16->itemData;\n            dis.rcItem.left   = dis16->rcItem.left;\n            dis.rcItem.top    = dis16->rcItem.top;\n            dis.rcItem.right  = dis16->rcItem.right;\n            dis.rcItem.bottom = dis16->rcItem.bottom;\n            ret = callback( hwnd32, msg, wParam, (LPARAM)&dis, result, arg );\n        }\n        break;\n    case WM_COPYDATA:\n        {\n            COPYDATASTRUCT16 *cds16 = MapSL(lParam);\n            COPYDATASTRUCT cds;\n            cds.dwData = cds16->dwData;\n            cds.cbData = cds16->cbData;\n            cds.lpData = MapSL(cds16->lpData);\n            ret = callback( hwnd32, msg, (WPARAM)HWND_32(wParam), (LPARAM)&cds, result, arg );\n        }\n        break;\n    case WM_GETDLGCODE:\n        if (lParam)\n        {\n            MSG16 *msg16 = MapSL(lParam);\n            MSG msg32;\n            msg32.hwnd    = WIN_Handle32( msg16->hwnd );\n            msg32.message = msg16->message;\n            msg32.wParam  = msg16->wParam;\n            msg32.lParam  = msg16->lParam;\n            msg32.time    = msg16->time;\n            msg32.pt.x    = msg16->pt.x;\n            msg32.pt.y    = msg16->pt.y;\n            ret = callback( hwnd32, msg, wParam, (LPARAM)&msg32, result, arg );\n        }\n        else\n            ret = callback( hwnd32, msg, wParam, lParam, result, arg );\n        break;\n    case WM_NEXTMENU:\n        {\n            MDINEXTMENU next;\n            next.hmenuIn   = (HMENU)lParam;\n            next.hmenuNext = 0;\n            next.hwndNext  = 0;\n            ret = callback( hwnd32, msg, wParam, (LPARAM)&next, result, arg );\n            *result = MAKELONG( HMENU_16(next.hmenuNext), HWND_16(next.hwndNext) );\n        }\n        break;\n    case WM_ACTIVATE:\n    case WM_CHARTOITEM:\n    case WM_COMMAND:\n    case WM_VKEYTOITEM:\n        ret = callback( hwnd32, msg, MAKEWPARAM( wParam, HIWORD(lParam) ),\n                        (LPARAM)WIN_Handle32( LOWORD(lParam) ), result, arg );\n        break;\n    case WM_HSCROLL:\n    case WM_VSCROLL:\n        ret = callback( hwnd32, msg, MAKEWPARAM( wParam, LOWORD(lParam) ),\n                        (LPARAM)WIN_Handle32( HIWORD(lParam) ), result, arg );\n        break;\n    case WM_CTLCOLOR:\n        if (HIWORD(lParam) <= CTLCOLOR_STATIC)\n            ret = callback( hwnd32, WM_CTLCOLORMSGBOX + HIWORD(lParam),\n                            (WPARAM)HDC_32(wParam), (LPARAM)WIN_Handle32( LOWORD(lParam) ),\n                            result, arg );\n        *result = HBRUSH_16((HBRUSH)*result);\n        break;\n    case WM_GETTEXT:\n    case WM_SETTEXT:\n    case WM_WININICHANGE:\n    case WM_DEVMODECHANGE:\n    case WM_ASKCBFORMATNAME:\n    case WM_NOTIFY:\n        ret = callback( hwnd32, msg, wParam, (LPARAM)MapSL(lParam), result, arg );\n        break;\n    case WM_MENUCHAR:\n        ret = callback( hwnd32, msg, MAKEWPARAM( wParam, LOWORD(lParam) ),\n                        (LPARAM)HMENU_32(HIWORD(lParam)), result, arg );\n        break;\n    case WM_MENUSELECT:\n        if((LOWORD(lParam) & MF_POPUP) && (LOWORD(lParam) != 0xFFFF))\n        {\n            HMENU hmenu = HMENU_32(HIWORD(lParam));\n            int pos = find_sub_menu( &hmenu, wParam );\n            if (pos == -1) pos = 0;\n            wParam = pos;\n        }\n        ret = callback( hwnd32, msg, MAKEWPARAM( wParam, LOWORD(lParam) ),\n                        (LPARAM)HMENU_32(HIWORD(lParam)), result, arg );\n        break;\n    case WM_PARENTNOTIFY:\n        if ((wParam == WM_CREATE) || (wParam == WM_DESTROY))\n            ret = callback( hwnd32, msg, MAKEWPARAM( wParam, HIWORD(lParam) ),\n                            (LPARAM)WIN_Handle32( LOWORD(lParam) ), result, arg );\n        else\n            ret = callback( hwnd32, msg, wParam, lParam, result, arg );\n        break;\n    case WM_ACTIVATEAPP:\n        /* We need this when SetActiveWindow sends a Sendmessage16() to\n         * a 32-bit window. Might be superfluous with 32-bit interprocess\n         * message queues. */\n        if (lParam) lParam = HTASK_32(lParam);\n        ret = callback( hwnd32, msg, wParam, lParam, result, arg );\n        break;\n    case WM_DDE_INITIATE:\n        ret = callback(hwnd32, msg, (WPARAM)WIN_Handle32(wParam), MAKELONG(service16_32(LOWORD(lParam)), topic16_32(HIWORD(lParam))), result, arg);\n        break;\n    case WM_DDE_TERMINATE:\n        ret = callback(hwnd32, msg, (WPARAM)WIN_Handle32(wParam), lParam, result, arg);\n        break;\n    case WM_DDE_REQUEST:\n    case WM_DDE_UNADVISE:\n        ret = callback(hwnd32, msg, (WPARAM)WIN_Handle32(wParam), MAKELONG(LOWORD(lParam), topic16_32(HIWORD(lParam))), result, arg);\n        break;\n    case WM_DDE_ADVISE:\n    case WM_DDE_DATA:\n    case WM_DDE_POKE:\n        {\n            HANDLE16 lo16 = LOWORD(lParam);\n            UINT_PTR lo32 = 0;\n            if (lo16 && !(lo32 = convert_handle_16_to_32(lo16, GMEM_DDESHARE))) break;\n            convert_dde_msg_16_to_32(msg, lo32);\n            lParam = PackDDElParam( msg, lo32, topic16_32(HIWORD(lParam)) );\n            ret = callback( hwnd32, msg, (WPARAM)WIN_Handle32(wParam), lParam, result, arg );\n            check_gptr(lo16);\n        }\n        break;\n    case WM_DDE_ACK:\n        {\n            UINT_PTR lo = LOWORD(lParam);\n            UINT_PTR hi = HIWORD(lParam);\n            int flag = 0;\n            UINT_PTR hi16 = 0;\n            char buf[256];\n\n            if (hi >= 0xc000 && GlobalGetAtomNameA(hi, buf, 256) > 0) flag |= 1;\n            if (GlobalSize16(hi) != 0) flag |= 2;\n            lo = lo; /* atom or flag */\n            switch (flag)\n            {\n            case 0:\n                if (hi)\n                {\n                    WARN(\"DDE_ACK: neither atom nor handle!!!\\n\");\n                    hi = 0;\n                }\n                break;\n            case 1:\n                hi = topic16_32(hi);\n                break; /* atom, nothing to do */\n            case 3:\n                WARN(\"DDE_ACK: %lx both atom and handle... choosing handle\\n\", hi);\n                /* fall through */\n            case 2:\n                hi16 = hi;\n                hi = convert_handle_16_to_32(hi, GMEM_DDESHARE);\n                break;\n            }\n            lParam = PackDDElParam( WM_DDE_ACK, lo, hi );\n            ret = callback( hwnd32, msg, (WPARAM)WIN_Handle32(wParam), lParam, result, arg );\n            if (flag >= 2) check_gptr(hi16);\n        }\n        break;\n    case WM_DDE_EXECUTE:\n        {\n            UINT_PTR hi16 = HIWORD(lParam);\n            lParam = convert_handle_16_to_32( hi16, GMEM_DDESHARE );\n            ret = callback( hwnd32, msg, (WPARAM)HWND_32(wParam), lParam, result, arg );\n            check_gptr(hi16);\n        }\n        break;\n    case WM_PAINTCLIPBOARD:\n    case WM_SIZECLIPBOARD:\n        FIXME_(msg)( \"message %04x needs translation\\n\", msg );\n        break;\n    case WM_NCPAINT:\n        if ((get_windows_build() >= 26100) && (GetExpWinVer16(GetExePtr(GetCurrentTask())) < 0x400))\n        {\n            LONG style = GetWindowLongA(hwnd32, GWL_STYLE);\n            if ((style & (WS_SYSMENU | WS_CAPTION)) == (WS_SYSMENU | WS_CAPTION))\n            {\n                HICON icon = SendMessageA(hwnd32, WM_GETICON, ICON_SMALL, 0);\n                if (!icon)\n                {\n                    icon = SendMessageA(hwnd32, WM_QUERYDRAGICON, 0, 0);\n                    if (icon) SendMessageA(hwnd32, WM_SETICON, ICON_SMALL, icon);\n                }\n            }\n        }\n        ret = callback(hwnd32, msg, (WPARAM)HRGN_32(wParam), lParam, result, arg);\n        break;\n    case WM_ERASEBKGND:\n        ret = callback(hwnd32, msg, (WPARAM)HDC_32(wParam), lParam, result, arg);\n        break;\n    case WM_SETFONT:\n        ret = callback(hwnd32, msg, (WPARAM)HFONT_32(wParam), lParam, result, arg);\n        break;\n    case WM_MOUSEACTIVATE:\n        ret = callback(hwnd32, msg, (WPARAM)HWND_32(wParam), lParam, result, arg);\n        break;\n    case WM_SETFOCUS:\n    case WM_SETCURSOR:\n        ret = callback(hwnd32, msg, (WPARAM)HWND_32(wParam), lParam, result, arg);\n        break;\n    case WM_INITMENU:\n    case WM_INITMENUPOPUP:\n    case WM_UNINITMENUPOPUP:\n        ret = callback(hwnd32, msg, (WPARAM)HMENU_32(wParam), lParam, result, arg);\n        break;\n    case WM_THEMECHANGED:\n        ret = callback(hwnd32, msg, (INT)((INT16)wParam), lParam, result, arg);\n        break;\n    case WM_NCACTIVATE:\n        ret = callback(hwnd32, msg, wParam, (LPARAM)HWND_32((HWND16)lParam), result, arg);\n        break;\n    case WM_GETICON:\n        ret = callback(hwnd32, msg, wParam, lParam, result, arg);\n        *result = get_icon_16((HICON)*result);\n        break;\n    case WM_SETICON:\n        ret = callback(hwnd32, msg, wParam, (LPARAM)get_icon_32((HICON16)lParam), result, arg);\n        break;\n    case WM_QUERYDRAGICON:\n        ret = callback(hwnd32, msg, wParam, lParam, result, arg);\n        *result = get_icon_16((HICON)*result);\n        break;\n\n    case WM_QUERYDROPOBJECT:\n    case WM_DROPOBJECT:\n    case WM_DRAGLOOP:\n    case WM_DRAGSELECT:\n    case WM_DRAGMOVE:\n    {\n        LPDROPSTRUCT16 lpds16 = (LPDROPSTRUCT16)MapSL(lParam);\n        DROPSTRUCT ds32;\n        HICON16 icon16;\n        DROPSTRUCT16_32(&ds32, lpds16);\n        ret = callback(hwnd32, msg, wParam, (LPARAM)&ds32, result, arg);\n        DROPSTRUCT32_16(&ds32, lpds16);\n        icon16 = get_icon_16((HICON)*result);\n        if (icon16)\n        {\n            *result = (LRESULT)icon16;\n        }\n        break;\n    }\n    case WM_MOUSEWHEEL:\n    case WM_SYSTIMER:\n    case WM_TIMER:\n        if (lParam != TIMER32_LPARAM)\n        {\n            ret = callback(hwnd32, msg, wParam, lParam, result, arg);\n            break;\n        }\n        else\n        {\n            if (wParam < TIMER32_WRAP_SIZE)\n            {\n                ret = callback(hwnd32, msg, timer32[wParam].wParam, timer32[wParam].lParam, result, arg);\n                timer32[wParam].ref = FALSE;\n                timer32_count--;\n            }\n            else\n            {\n                ret = callback(hwnd32, msg, wParam, lParam, result, arg);\n            }\n            break;\n        }\n    case WM_GETFONT:\n        ret = callback(hwnd32, msg, wParam, lParam, result, arg);\n        *result = HFONT_16((HFONT)*result);\n        break;\n    case WM_KILLFOCUS:\n    case WM_INITDIALOG:\n    case WM_MDIDESTROY:\n    case WM_MDIMAXIMIZE:\n        ret = callback(hwnd32, msg, (WPARAM)HWND_32((HWND16)wParam), lParam, result, arg);\n        break;\n    case WM_ENTERIDLE:\n        ret = callback(hwnd32, msg, wParam, (LPARAM)HWND_32((HWND16)lParam), result, arg);\n        break;\n    case WM_UPDATEUISTATE:\n        ret = callback(hwnd32, msg, lParam, lParam, result, arg);\n        break;\n    case WM_PRINT:\n    case WM_PRINTCLIENT:\n    case WM_NCUAHDRAWFRAME: /* undocumented wparam: hdc */\n        ret = callback(hwnd32, msg, (WPARAM)HDC_32(wParam), lParam, result, arg);\n        break;\n    case WM_PAINT:\n        ret = callback(hwnd32, msg, (WPARAM)HDC_32(wParam), lParam, result, arg);\n        break;\n    case WM_DROPFILES:\n        ret = callback(hwnd32, msg, (WPARAM)hdrop16_to_hdrop32((HDROP16)wParam), lParam, result, arg);\n        break;\n    case WM_SETREDRAW:\n    {\n        BOOL redraw = !(GetWindowLongA(hwnd32, GWL_STYLE) & WS_VISIBLE);\n        ret = callback(hwnd32, msg, wParam, lParam, result, arg);\n        if (redraw)\n            RedrawWindow(hwnd32, NULL, NULL, RDW_INVALIDATE | RDW_ALLCHILDREN);\n        break;\n    }\n    default:\n    {\n        if (msg != WM_NULL && msg == drag_list_message)\n        {\n            DRAGLISTINFO16 *di = (DRAGLISTINFO16*)MapSL(lParam);\n            DRAGLISTINFO di32;\n            di32.hWnd = HWND_32(di->hWnd);\n            di32.uNotification = di->uNotification;\n            di32.ptCursor.x = di->ptCursor.x;\n            di32.ptCursor.y = di->ptCursor.y;\n            ret = callback(hwnd32, msg, wParam, (LPARAM)&di32, result, arg);\n            break;\n        }\n        ret = callback(hwnd32, msg, wParam, lParam, result, arg);\n        break;\n    }\n    }\n    return ret;\n}\n\nstatic HICON16 get_default_icon(HINSTANCE16 inst)\n{\n    LPBYTE restab;\n    NE_TYPEINFO *type = get_resource_table(inst, RT_GROUP_ICON, &restab);\n    if (!type)\n        type = get_resource_table(inst, RT_ICON, &restab);\n    if (type)\n    {\n        LPCSTR id = (LPCSTR)(((NE_NAMEINFO *)((char *)type + sizeof(NE_TYPEINFO)))->id);\n        char name[32] = {0};\n        if (!((int)id & 0x8000))\n        {\n            LPBYTE pos = restab + (int)id;\n            int len = pos[0] > 31 ? 31 : pos[0];\n            strncpy(name, pos + 1, len);\n            id = name;\n        }\n        return LoadIcon16(inst, id);\n    }\n    return 0;\n}\n\n#include <uxtheme.h>\n#include <vssym32.h>\n#include \"../mmsystem/winemm16.h\"\n\nvoid InitWndProc16(HWND hWnd, HWND16 hWnd16);\n/**********************************************************************\n *\t     WINPROC_CallProc32ATo16\n *\n * Call a 16-bit window procedure, translating the 32-bit args.\n */\nLRESULT WINPROC_CallProc32ATo16( winproc_callback16_t callback, HWND hwnd, UINT msg,\n                                 WPARAM wParam, LPARAM lParam, LRESULT *result, void *arg )\n{\n    LRESULT ret = 0;\n\n    HWND16 hwnd16 = HWND_16(hwnd);\n    const char *msg_str = message_to_str(msg);\n    TRACE(\"(%p, %p, %s(%04X), %08X, %08X)\\n\", callback, hwnd, msg_str, msg, wParam, lParam);\n    if (BM_GETCHECK <= msg && msg <= BM_SETDONTCLICK)\n    {\n        window_type_table[hwnd16] = (BYTE)WINDOW_TYPE_BUTTON;\n    }\n    if (LB_ADDSTRING <= msg && msg <= LB_MSGMAX)\n    {\n        window_type_table[hwnd16] = (BYTE)WINDOW_TYPE_LISTBOX;\n    }\n    if (STM_SETICON <= msg && msg <= STM_MSGMAX)\n    {\n        window_type_table[hwnd16] = (BYTE)WINDOW_TYPE_STATIC;\n    }\n    if (SBM_SETPOS <= msg && msg <= SBM_GETSCROLLBARINFO)\n    {\n        window_type_table[hwnd16] = (BYTE)WINDOW_TYPE_SCROLLBAR;\n    }\n    if (EM_GETSEL <= msg && msg <= EM_ENABLEFEATURE)\n    {\n        window_type_table[hwnd16] = (BYTE)WINDOW_TYPE_EDIT;\n    }\n    if (CB_GETEDITSEL <= msg && msg <= CB_MSGMAX)\n    {\n        window_type_table[hwnd16] = (BYTE)WINDOW_TYPE_COMBOBOX;\n    }\n    if (is_aviwnd(hwnd16, hwnd) && (GetWindowThreadProcessId(hwnd, NULL) == GetCurrentThreadId()))\n    {\n        if (!aviwnd_msg)\n            aviwnd_msg = RegisterWindowMessageA(\"AVIWnd_Msg\");\n        HWND parent = GetParent(hwnd);\n        DWORD pid;\n        GetWindowThreadProcessId(parent, &pid);\n        if (pid == GetCurrentProcessId())\n        {\n            MSG avimsg = { hwnd, msg, wParam, lParam };\n            LRESULT ret = SendMessageA(parent, aviwnd_msg, NULL, &avimsg);\n            if (msg == WM_DESTROY)\n                window_type_table[hwnd16] = 0;\n            if (avimsg.time)\n                return CallWindowProcA(avimsg.time, hwnd, msg, wParam, lParam);\n            return ret;\n        }\n    }\n    if (msg && (msg == aviwnd_msg))\n    {\n        MSG *avimsg = (MSG *)lParam;\n        aviwnd_cwp = NULL;\n        LRESULT ret = WindowProc16(avimsg->hwnd, avimsg->message, avimsg->wParam, avimsg->lParam);\n        avimsg->time = aviwnd_cwp;\n        return ret;\n    }\n            \n    switch (msg)\n    {\n    case WM_NCCREATE:\n    case WM_CREATE:\n        {\n            InitWndProc16(hwnd, HWND_16(hwnd));\n            CREATESTRUCTA *cs32 = (CREATESTRUCTA *)lParam;\n            CREATESTRUCT16 cs;\n            MDICREATESTRUCT16 mdi_cs16;\n            BOOL mdi_child = (GetWindowLongW(hwnd, GWL_EXSTYLE) & WS_EX_MDICHILD);\n\n            CREATESTRUCT32Ato16( hwnd, cs32, &cs );\n            cs.lpszName  = MapLS( cs32->lpszName );\n            cs.lpszClass = MapLS( win16classname(cs32->lpszClass) );\n            if (mdi_child)\n            {\n                MDICREATESTRUCTA *mdi_cs = cs32->lpCreateParams;\n                MDICREATESTRUCT32Ato16( mdi_cs, &mdi_cs16 );\n                mdi_cs16.szTitle = MapLS( mdi_cs->szTitle );\n                mdi_cs16.szClass = MapLS( win16classname(mdi_cs->szClass) );\n                cs.lpCreateParams = MapLS( &mdi_cs16 );\n            }\n            else if (cs32->lpCreateParams)\n            {\n                if (get_windows_build() >= 22621)\n                {\n                    // Windows 11 22H2 removed much ntvdm support from user32 including the\n                    // lpcreateparams fixup for the dialog item extra bytes\n                    char class[10];\n                    HWND roothwnd = GetAncestor(hwnd, GA_ROOT);\n                    int ret = GetClassNameA(roothwnd, &class, 10);\n                    // if a window is created with a dialog as it's parent lpCreateParams can still be a SEGPTR\n                    __TRY\n                    {\n                        if (ret && !strcmp(class, \"#32770\") && (*(WORD *)cs32->lpCreateParams == 4))\n                            cs.lpCreateParams = *(SEGPTR *)((BYTE *)cs32->lpCreateParams + 2);\n                    }\n                    __EXCEPT_ALL\n                    {\n                    }\n                    __ENDTRY\n                }\n                else if (GetModuleHandleA(\"comdlg32.dll\") == cs32->hInstance)\n                {\n                    // if a window hinstance lower 16 bits are nonzero which is not true for 32bit dlls\n                    // user32 will put the dword in the dialog item extra bytes in lpcreateparams\n                    // so fix things up for commdlg since comdlg32 uses it's own hinstance\n                    cs.lpCreateParams = *(SEGPTR *)((BYTE *)cs32->lpCreateParams + 2);\n                }\n            }\n            lParam = MapLS( &cs );\n            ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );\n            UnMapLS( lParam );\n            UnMapLS( cs.lpszName );\n            UnMapLS( cs.lpszClass );\n            if (mdi_child)\n            {\n                UnMapLS( cs.lpCreateParams );\n                UnMapLS( mdi_cs16.szTitle );\n                UnMapLS( mdi_cs16.szClass );\n            }\n        }\n        break;\n    case WM_MDICREATE:\n        {\n            MDICREATESTRUCTA *cs32 = (MDICREATESTRUCTA *)lParam;\n            MDICREATESTRUCT16 cs;\n\n            MDICREATESTRUCT32Ato16( cs32, &cs );\n            cs.szTitle = MapLS( cs32->szTitle );\n            cs.szClass = MapLS( win16classname(cs32->szClass) );\n            lParam = MapLS( &cs );\n            ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );\n            UnMapLS( lParam );\n            UnMapLS( cs.szTitle );\n            UnMapLS( cs.szClass );\n        }\n        break;\n    case WM_MDIACTIVATE:\n        if (GetWindowLongW( hwnd, GWL_EXSTYLE ) & WS_EX_MDICHILD)\n            ret = callback( HWND_16(hwnd), msg, ((HWND)lParam == hwnd),\n                            MAKELPARAM( HWND_16((HWND)lParam), HWND_16((HWND)wParam) ), result, arg );\n        else\n            ret = callback( HWND_16(hwnd), msg, (WPARAM16)HWND_16( (HWND)wParam ), 0, result, arg );\n        break;\n    case WM_MDIGETACTIVE:\n        ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );\n        if (lParam) *(BOOL *)lParam = (BOOL16)HIWORD(*result);\n        *result = (LRESULT)WIN_Handle32( LOWORD(*result) );\n        break;\n    case WM_MDISETMENU:\n        ret = callback( HWND_16(hwnd), msg, (lParam == 0),\n                        MAKELPARAM( LOWORD(wParam), LOWORD(lParam) ), result, arg );\n        *result = (LRESULT)HMENU_32((HMENU16)*result);\n        break;\n    case WM_MDINEXT:\n        ret = callback(HWND_16(hwnd), msg, HWND_16(wParam), lParam, result, arg);\n        break;\n    case WM_GETMINMAXINFO:\n        {\n            MINMAXINFO *mmi32 = (MINMAXINFO *)lParam;\n            MINMAXINFO16 mmi;\n\n            MINMAXINFO32to16( mmi32, &mmi );\n            lParam = MapLS( &mmi );\n            ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );\n            UnMapLS( lParam );\n            MINMAXINFO16to32( &mmi, mmi32 );\n        }\n        break;\n    case WM_NCCALCSIZE:\n        {\n            NCCALCSIZE_PARAMS *nc32 = (NCCALCSIZE_PARAMS *)lParam;\n            NCCALCSIZE_PARAMS16 nc;\n            WINDOWPOS16 winpos;\n            BOOL fixborder = FALSE;\n            if (get_windows_build() >= 26100)\n            {\n                DWORD exstyle = GetWindowLong(hwnd, GWL_EXSTYLE);\n                if ((exstyle & WS_EX_STATICEDGE) && (GetExpWinVer16(GetExePtr(GetCurrentTask())) < 0x400))\n                {\n                    if (exstyle & WS_EX_WINDOWEDGE)\n                        SetWindowLong(hwnd, GWL_EXSTYLE, exstyle & ~WS_EX_WINDOWEDGE);\n                    fixborder = TRUE;\n                }\n            }\n\n            RECT32to16( &nc32->rgrc[0], &nc.rgrc[0] );\n            if (wParam)\n            {\n                RECT32to16( &nc32->rgrc[1], &nc.rgrc[1] );\n                RECT32to16( &nc32->rgrc[2], &nc.rgrc[2] );\n                WINDOWPOS32to16( nc32->lppos, &winpos );\n                nc.lppos = MapLS( &winpos );\n            }\n            lParam = MapLS( &nc );\n            ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );\n            UnMapLS( lParam );\n            if (fixborder)\n            {\n                nc.rgrc[0].top--;\n                nc.rgrc[0].left--;\n                nc.rgrc[0].bottom++;\n                nc.rgrc[0].right++;\n            }\n            RECT16to32( &nc.rgrc[0], &nc32->rgrc[0] );\n            if (wParam)\n            {\n                RECT16to32( &nc.rgrc[1], &nc32->rgrc[1] );\n                RECT16to32( &nc.rgrc[2], &nc32->rgrc[2] );\n                WINDOWPOS16to32( &winpos, nc32->lppos );\n                UnMapLS( nc.lppos );\n            }\n        }\n        break;\n    case WM_WINDOWPOSCHANGING:\n    case WM_WINDOWPOSCHANGED:\n        {\n            WINDOWPOS *winpos32 = (WINDOWPOS *)lParam;\n            WINDOWPOS16 winpos;\n            // before windows 10 not set swp_statechanged on a window being maximized if wm_windowposchanging is sent twice\n            if ((msg == WM_WINDOWPOSCHANGED) && GetPropA(hwnd, \"WindowMaximized\") && (callback == call_window_proc16))\n            {\n                RemovePropA(hwnd, \"WindowMaximized\");\n                winpos32->flags &= ~0x8000; //SWP_STATECHANGED\n            }\n\n            WINDOWPOS32to16( winpos32, &winpos );\n            lParam = MapLS( &winpos );\n            ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );\n            UnMapLS( lParam );\n            WINDOWPOS16to32( &winpos, winpos32 );\n        }\n        break;\n    case WM_COMPAREITEM:\n        {\n            COMPAREITEMSTRUCT *cis32 = (COMPAREITEMSTRUCT *)lParam;\n            COMPAREITEMSTRUCT16 cis;\n            cis.CtlType    = cis32->CtlType;\n            cis.CtlID      = cis32->CtlID;\n            cis.hwndItem   = HWND_16( cis32->hwndItem );\n            cis.itemID1    = cis32->itemID1;\n            cis.itemData1  = cis32->itemData1;\n            cis.itemID2    = cis32->itemID2;\n            cis.itemData2  = cis32->itemData2;\n            lParam = MapLS( &cis );\n            ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );\n            UnMapLS( lParam );\n        }\n        break;\n    case WM_DELETEITEM:\n        {\n            DELETEITEMSTRUCT *dis32 = (DELETEITEMSTRUCT *)lParam;\n            DELETEITEMSTRUCT16 dis;\n            dis.CtlType  = dis32->CtlType;\n            dis.CtlID    = dis32->CtlID;\n            dis.itemID   = dis32->itemID;\n            dis.hwndItem = (dis.CtlType == ODT_MENU) ? (HWND16)LOWORD(dis32->hwndItem)\n                                                     : HWND_16( dis32->hwndItem );\n            dis.itemData = dis32->itemData;\n            lParam = MapLS( &dis );\n            ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );\n            UnMapLS( lParam );\n        }\n        break;\n    case WM_DRAWITEM:\n        {\n            DRAWITEMSTRUCT *dis32 = (DRAWITEMSTRUCT *)lParam;\n            DRAWITEMSTRUCT16 dis;\n            dis.CtlType       = dis32->CtlType;\n            dis.CtlID         = dis32->CtlID;\n            if ((dis32->CtlType == ODT_MENU) && (dis32->itemID > 0xffff))\n            {\n                HMENU16 menu = HMENU_16(dis32->itemID);\n                if (menu) dis.itemID = menu;\n                else dis.itemID = dis32->itemID;\n            }\n            else dis.itemID   = dis32->itemID;\n            dis.itemAction    = dis32->itemAction;\n            dis.itemState     = dis32->itemState;\n            dis.hwndItem      = HWND_16( dis32->hwndItem );\n            dis.hDC           = HDC_16(dis32->hDC);\n            dis.itemData      = dis32->itemData;\n            dis.rcItem.left   = dis32->rcItem.left;\n            dis.rcItem.top    = dis32->rcItem.top;\n            dis.rcItem.right  = dis32->rcItem.right;\n            dis.rcItem.bottom = dis32->rcItem.bottom;\n            lParam = MapLS( &dis );\n            ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );\n            UnMapLS( lParam );\n        }\n        break;\n    case WM_MEASUREITEM:\n        {\n            MEASUREITEMSTRUCT *mis32 = (MEASUREITEMSTRUCT *)lParam;\n            MEASUREITEMSTRUCT16 mis;\n            mis.CtlType    = mis32->CtlType;\n            mis.CtlID      = mis32->CtlID;\n            if ((mis32->CtlType == ODT_MENU) && (mis32->itemID > 0xffff))\n            {\n                HMENU16 menu = HMENU_16(mis32->itemID);\n                if (menu) mis.itemID = menu;\n                else mis.itemID = mis32->itemID;\n            }\n            else mis.itemID = mis32->itemID;\n            mis.itemWidth  = mis32->itemWidth;\n            mis.itemHeight = mis32->itemHeight;\n            mis.itemData   = mis32->itemData;\n            lParam = MapLS( &mis );\n            ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );\n            UnMapLS( lParam );\n            mis32->itemWidth  = (INT16)mis.itemWidth;\n            mis32->itemHeight = mis.itemHeight;\n        }\n        break;\n    case WM_COPYDATA:\n        {\n            COPYDATASTRUCT *cds32 = (COPYDATASTRUCT *)lParam;\n            COPYDATASTRUCT16 cds;\n\n            cds.dwData = cds32->dwData;\n            cds.cbData = cds32->cbData;\n            cds.lpData = MapLS( cds32->lpData );\n            lParam = MapLS( &cds );\n            ret = callback( HWND_16(hwnd), msg, HWND_16(wParam), lParam, result, arg );\n            UnMapLS( lParam );\n            UnMapLS( cds.lpData );\n        }\n        break;\n    case WM_GETDLGCODE:\n        if (lParam)\n        {\n            MSG *msg32 = (MSG *)lParam;\n            MSG16 msg16;\n\n            msg16.hwnd    = HWND_16( msg32->hwnd );\n            msg16.message = msg32->message;\n            msg16.wParam  = msg32->wParam;\n            msg16.lParam  = msg32->lParam;\n            msg16.time    = msg32->time;\n            msg16.pt.x    = msg32->pt.x;\n            msg16.pt.y    = msg32->pt.y;\n            lParam = MapLS( &msg16 );\n            ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );\n            UnMapLS( lParam );\n        }\n        else\n            ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );\n        break;\n    case WM_NEXTMENU:\n        {\n            MDINEXTMENU *next = (MDINEXTMENU *)lParam;\n            ret = callback( HWND_16(hwnd), msg, wParam, (LPARAM)next->hmenuIn, result, arg );\n            next->hmenuNext = HMENU_32( LOWORD(*result) );\n            next->hwndNext  = WIN_Handle32( HIWORD(*result) );\n            *result = 0;\n        }\n        break;\n    case WM_GETTEXT:\n    case WM_ASKCBFORMATNAME:\n        wParam = min( wParam, 0xff80 ); /* Must be < 64K */\n        /* fall through */\n    case WM_NOTIFY:\n    case WM_SETTEXT:\n    case WM_WININICHANGE:\n    case WM_DEVMODECHANGE:\n        lParam = MapLS( (void *)lParam );\n        ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );\n        UnMapLS( lParam );\n        break;\n    case WM_COMMAND:\n        if (IsOldWindowsTask(GetCurrentTask()) && (window_type_table[HWND_16((HWND)lParam)] == WINDOW_TYPE_LISTBOX) &&\n                (HIWORD(wParam) > LBN_DBLCLK) && (HIWORD(wParam) != LBN_ERRSPACE))\n            break;\n        if (HIWORD(lParam) == 0)\n            lParam = MAKELPARAM(LOWORD(lParam), HIWORD(wParam));\n        else\n            lParam = MAKELPARAM(HWND_16((HWND)lParam), HIWORD(wParam));\n        ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );\n        break;\n    case WM_ACTIVATE:\n        if (krnl386_get_compat_mode(\"256color\") && (callback == call_window_proc16) && LOWORD(wParam))\n        {\n            LRESULT res;\n            callback(HWND_16(hwnd), WM_QUERYNEWPALETTE, NULL, NULL, &res, arg);\n        }\n    case WM_CHARTOITEM:\n    case WM_VKEYTOITEM:\n        {\n            if (HIWORD(lParam) == 0)\n                lParam = MAKELPARAM(LOWORD(lParam), HIWORD(wParam));\n            else\n                lParam = MAKELPARAM(HWND_16((HWND)lParam), HIWORD(wParam));\n            ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );\n        }\n        break;\n    case WM_HSCROLL:\n    case WM_VSCROLL:\n        ret = callback( HWND_16(hwnd), msg, wParam, MAKELPARAM( HIWORD(wParam), HWND_16((HWND)lParam) ),\n                        result, arg );\n        break;\n    case WM_CTLCOLORMSGBOX:\n    case WM_CTLCOLOREDIT:\n    case WM_CTLCOLORLISTBOX:\n    case WM_CTLCOLORBTN:\n    case WM_CTLCOLORDLG:\n    case WM_CTLCOLORSCROLLBAR:\n    case WM_CTLCOLORSTATIC:\n        ret = callback( HWND_16(hwnd), WM_CTLCOLOR, HDC_16((HDC)wParam),\n                        MAKELPARAM( HWND_16((HWND)lParam), msg - WM_CTLCOLORMSGBOX ), result, arg );\n        *result = HBRUSH_32((HBRUSH16)*result);\n        break;\n    case WM_MENUSELECT:\n        if(HIWORD(wParam) & MF_POPUP)\n        {\n            HMENU hmenu;\n            if ((HIWORD(wParam) != 0xffff) || lParam)\n            {\n                if ((hmenu = GetSubMenu( (HMENU)lParam, LOWORD(wParam) )))\n                {\n                    ret = callback( HWND_16(hwnd), msg, HMENU_16(hmenu),\n                                    MAKELPARAM( HIWORD(wParam), (HMENU16)HMENU_16((HMENU)lParam) ), result, arg );\n                    break;\n                }\n            }\n        }\n        else if(lParam == GetMenu(hwnd))\n        {\n            switch(LOWORD(wParam) & 0xfff0)\n            {\n                case SC_MINIMIZE:\n                case SC_RESTORE:\n                case SC_CLOSE:\n                    wParam |= MF_SYSMENU << 16;\n                    break;\n            }\n        }\n    case WM_MENUCHAR:\n        ret = callback( HWND_16(hwnd), msg, wParam,\n                        MAKELPARAM( HIWORD(wParam), (HMENU16)HMENU_16((HMENU)lParam) ), result, arg );\n        break;\n    case WM_PARENTNOTIFY:\n        if ((LOWORD(wParam) == WM_CREATE) || (LOWORD(wParam) == WM_DESTROY))\n            ret = callback( HWND_16(hwnd), msg, wParam,\n                            MAKELPARAM( HWND_16((HWND)lParam), HIWORD(wParam) ), result, arg );\n        else\n            ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );\n        break;\n    case WM_ACTIVATEAPP:\n        ret = callback( HWND_16(hwnd), msg, wParam, HTASK_16( lParam ), result, arg );\n        break;\n    case WM_PAINT:\n        // force a paint for hidden win30 windows, KB Q80898\n        if ((GetExpWinVer16(GetExePtr(GetCurrentTask())) < 0x30a) &&  !(GetWindowLongA(hwnd, GWL_STYLE) & WS_CHILD))\n            EnumChildWindows(hwnd, child_paint, NULL);\n        if (IsIconic( hwnd ) && GetClassLongPtrW( hwnd, GCLP_HICON ))\n            ret = callback( HWND_16(hwnd), WM_PAINTICON, 1, lParam, result, arg );\n        else\n            ret = callback( HWND_16(hwnd), WM_PAINT, HDC_16(wParam), lParam, result, arg );\n        break;\n\tcase WM_NCPAINT:\n        ret = callback(HWND_16(hwnd), WM_NCPAINT, HRGN_16((HRGN)wParam), lParam, result, arg);\n\t\tbreak;\n\tcase WM_NCACTIVATE:\n\t\tret = callback(HWND_16(hwnd), WM_NCACTIVATE, wParam, HWND_16((HWND)lParam), result, arg);\n\t\tbreak;\n    case WM_ERASEBKGND:\n        if (IsIconic( hwnd ) && GetClassLongPtrW( hwnd, GCLP_HICON )) msg = WM_ICONERASEBKGND;\n        ret = callback( HWND_16(hwnd), msg, HDC_16((HDC)wParam), lParam, result, arg );\n        break;\n    case WM_SETFONT:\n        ret = callback(HWND_16(hwnd), msg, HFONT_16((HFONT)wParam), lParam, result, arg);\n        break;\n    case WM_DDE_INITIATE:\n        ret = callback( HWND_16(hwnd), msg, HWND_16((HWND)wParam), MAKELONG(service32_16(LOWORD(lParam)), topic32_16(HIWORD(lParam))), result, arg );\n        break;\n    case WM_DDE_TERMINATE:\n        ret = callback( HWND_16(hwnd), msg, HWND_16((HWND)wParam), lParam, result, arg );\n        break;\n    case WM_DDE_UNADVISE:\n    case WM_DDE_REQUEST:\n        ret = callback( HWND_16(hwnd), msg, HWND_16((HWND)wParam), MAKELONG(LOWORD(lParam), topic32_16(HIWORD(lParam))), result, arg );\n        break;\n    case WM_DDE_ADVISE:\n    case WM_DDE_DATA:\n    case WM_DDE_POKE:\n        {\n            UINT_PTR lo32, hi;\n            HANDLE16 lo16 = 0;\n\n            if (UnpackDDElParam( msg, lParam, &lo32, &hi ) && (callback == get_message_callback) && (*result & 1))\n                FreeDDElParam(msg, lParam);\n            if (lo32 && !(lo16 = convert_handle_32_to_16(lo32, GMEM_DDESHARE))) break;\n            convert_dde_msg_32_to_16(msg, lo16);\n            hi = topic32_16(hi);\n            ret = callback( HWND_16(hwnd), msg, HWND_16((HWND)wParam),\n                            MAKELPARAM(lo16, hi), result, arg );\n        }\n        break; /* FIXME don't know how to free allocated memory (handle)  !! */\n    case WM_DDE_ACK:\n        {\n            UINT_PTR lo, hi;\n            int flag = 0;\n            char buf[256];\n\n            __TRY\n            {\n                // if bit 4 is not set it's either a pointer or atom\n                if (!(lParam & 4))\n                    lo = *(UINT *)lParam;\n                if (!UnpackDDElParam( msg, lParam, &lo, &hi ))\n                {\n                    lo = LOWORD(lParam);\n                    hi = HIWORD(lParam);\n                }\n                else if((callback == get_message_callback) && (*result & 1))\n                    FreeDDElParam(msg, lParam);\n            }\n            __EXCEPT_ALL\n            {\n                lo = LOWORD(lParam);\n                hi = HIWORD(lParam);\n            }\n            __ENDTRY\n\n            if (hi >= 0xc000 && GlobalGetAtomNameA((ATOM)hi, buf, sizeof(buf)) > 0) flag |= 1;\n            if (HIWORD(hi) && GlobalSize((HANDLE)hi) != 0) flag |= 2;\n            lo = lo; /* atom or flag */\n            switch (flag)\n            {\n            case 0:\n                if (hi)\n                {\n                    WARN(\"DDE_ACK: neither atom nor handle!!!\\n\");\n                    hi = 0;\n                }\n                break;\n            case 1:\n                hi = topic32_16(hi);\n                break; /* atom, nothing to do */\n            case 3:\n                WARN(\"DDE_ACK: %lx both atom and handle... choosing handle\\n\", hi);\n                /* fall through */\n            case 2:\n                hi = convert_handle_32_to_16(hi, GMEM_DDESHARE);\n                break;\n            }\n            ret = callback( HWND_16(hwnd), msg, HWND_16((HWND)wParam),\n                            MAKELPARAM(lo, hi), result, arg );\n        }\n        break; /* FIXME don't know how to free allocated memory (handle) !! */\n    case WM_DDE_EXECUTE:\n        lParam = MAKELPARAM( 0, convert_handle_32_to_16( lParam, GMEM_DDESHARE ));\n        ret = callback( HWND_16(hwnd), msg, HWND_16((HWND)wParam), lParam, result, arg );\n        break; /* FIXME don't know how to free allocated memory (handle) !! */\n    case SBM_SETRANGE:\n        ret = callback( HWND_16(hwnd), SBM_SETRANGE16, 0, MAKELPARAM(wParam, lParam), result, arg );\n        break;\n    case SBM_GETRANGE:\n        ret = callback( HWND_16(hwnd), SBM_GETRANGE16, wParam, lParam, result, arg );\n        *(LPINT)wParam = LOWORD(*result);\n        *(LPINT)lParam = HIWORD(*result);\n        break;\n    case BM_GETCHECK:\n    case BM_SETCHECK:\n    case BM_GETSTATE:\n    case BM_SETSTATE:\n    case BM_SETSTYLE:\n        ret = callback( HWND_16(hwnd), msg + BM_GETCHECK16 - BM_GETCHECK, wParam, lParam, result, arg );\n        break;\n    case EM_GETRECT:\n    {\n        lParam = MapLS(lParam);\n        ret = callback(HWND_16(hwnd), msg + EM_GETSEL16 - EM_GETSEL, wParam, lParam, result, arg);\n        UnMapLS(lParam);\n    }\n    break;\n    case EM_GETLINE:\n        ret = callback(HWND_16(hwnd), msg + EM_GETSEL16 - EM_GETSEL, wParam, (LPARAM)MapLS(lParam), result, arg);\n        break;\n    case EM_GETSEL:\n        ret = callback(HWND_16(hwnd), msg + EM_GETSEL16 - EM_GETSEL, 0, 0, result, arg);\n        break;\n    case EM_SETRECT:\n    case EM_SETRECTNP:\n    case EM_SCROLL:\n    case EM_LINESCROLL:\n    case EM_SCROLLCARET:\n    case EM_GETMODIFY:\n    case EM_SETMODIFY:\n    case EM_GETLINECOUNT:\n    case EM_LINEINDEX:\n    case EM_SETHANDLE:\n    case EM_GETHANDLE:\n    case EM_GETTHUMB:\n    case EM_LINELENGTH:\n    case EM_REPLACESEL:\n    case EM_LIMITTEXT:\n    case EM_CANUNDO:\n    case EM_UNDO:\n    case EM_FMTLINES:\n    case EM_LINEFROMCHAR:\n    case EM_SETTABSTOPS:\n    case EM_SETPASSWORDCHAR:\n    case EM_EMPTYUNDOBUFFER:\n    case EM_GETFIRSTVISIBLELINE:\n    case EM_SETREADONLY:\n    case EM_SETWORDBREAKPROC:\n    case EM_GETWORDBREAKPROC:\n    case EM_GETPASSWORDCHAR:\n        ret = callback( HWND_16(hwnd), msg + EM_GETSEL16 - EM_GETSEL, wParam, lParam, result, arg );\n        break;\n    case EM_SETSEL:\n        ret = callback( HWND_16(hwnd), EM_SETSEL16, 0, MAKELPARAM( wParam, lParam ), result, arg );\n        break;\n    case LB_CARETOFF:\n    case LB_CARETON:\n    case LB_DELETESTRING:\n    case LB_GETANCHORINDEX:\n    case LB_GETCARETINDEX:\n    case LB_GETCOUNT:\n    case LB_GETCURSEL:\n    case LB_GETHORIZONTALEXTENT:\n    case LB_GETITEMDATA:\n    case LB_GETITEMHEIGHT:\n    case LB_GETSEL:\n    case LB_GETSELCOUNT:\n    case LB_GETTEXTLEN:\n    case LB_GETTOPINDEX:\n    case LB_RESETCONTENT:\n    case LB_SELITEMRANGE:\n    case LB_SELITEMRANGEEX:\n    case LB_SETANCHORINDEX:\n    case LB_SETCARETINDEX:\n    case LB_SETCOLUMNWIDTH:\n    case LB_SETCURSEL:\n    case LB_SETHORIZONTALEXTENT:\n    case LB_SETITEMDATA:\n    case LB_SETITEMHEIGHT:\n    case LB_SETSEL:\n    case LB_SETTOPINDEX:\n        ret = callback( HWND_16(hwnd), msg + LB_ADDSTRING16 - LB_ADDSTRING, wParam, lParam, result, arg );\n        break;\n    case LB_ADDSTRING:\n    case LB_FINDSTRING:\n    case LB_FINDSTRINGEXACT:\n    case LB_INSERTSTRING:\n    case LB_SELECTSTRING:\n    case LB_GETTEXT:\n    case LB_DIR:\n    case LB_ADDFILE:\n        lParam = MapLS( (LPSTR)lParam );\n        ret = callback( HWND_16(hwnd), msg + LB_ADDSTRING16 - LB_ADDSTRING, wParam, lParam, result, arg );\n        UnMapLS( lParam );\n        break;\n    case LB_GETSELITEMS:\n        {\n            INT *items32 = (INT *)lParam;\n            INT16 *items, buffer[512];\n            unsigned int i;\n\n            wParam = min( wParam, 0x7f80 ); /* Must be < 64K */\n            if (!(items = get_buffer( buffer, sizeof(buffer), wParam * sizeof(INT16) ))) break;\n            lParam = MapLS( items );\n            ret = callback( HWND_16(hwnd), LB_GETSELITEMS16, wParam, lParam, result, arg );\n            UnMapLS( lParam );\n            for (i = 0; i < wParam; i++) items32[i] = items[i];\n            free_buffer( buffer, items );\n        }\n        break;\n    case LB_SETTABSTOPS:\n        if (wParam)\n        {\n            INT *stops32 = (INT *)lParam;\n            INT16 *stops, buffer[512];\n            unsigned int i;\n\n            wParam = min( wParam, 0x7f80 ); /* Must be < 64K */\n            if (!(stops = get_buffer( buffer, sizeof(buffer), wParam * sizeof(INT16) ))) break;\n            for (i = 0; i < wParam; i++) stops[i] = stops32[i];\n            lParam = MapLS( stops );\n            ret = callback( HWND_16(hwnd), LB_SETTABSTOPS16, wParam, lParam, result, arg );\n            UnMapLS( lParam );\n            free_buffer( buffer, stops );\n        }\n        else ret = callback( HWND_16(hwnd), LB_SETTABSTOPS16, wParam, lParam, result, arg );\n        break;\n    case CB_DELETESTRING:\n    case CB_GETCOUNT:\n    case CB_GETLBTEXTLEN:\n    case CB_LIMITTEXT:\n    case CB_RESETCONTENT:\n    case CB_SETEDITSEL:\n    case CB_GETCURSEL:\n    case CB_SETCURSEL:\n    case CB_SHOWDROPDOWN:\n    case CB_SETITEMDATA:\n    case CB_SETITEMHEIGHT:\n    case CB_GETITEMHEIGHT:\n    case CB_SETEXTENDEDUI:\n    case CB_GETEXTENDEDUI:\n    case CB_GETDROPPEDSTATE:\n        ret = callback( HWND_16(hwnd), msg + CB_GETEDITSEL16 - CB_GETEDITSEL, wParam, lParam, result, arg );\n        break;\n    /* unknown message */\n    case CB_UNKNOWN_167:\n        ret = callback(HWND_16(hwnd), CB_UNKNOWN_167_16, wParam, lParam, result, arg);\n        break;\n    case CB_GETEDITSEL:\n        ret = callback( HWND_16(hwnd), CB_GETEDITSEL16, wParam, lParam, result, arg );\n        if (wParam) *((PUINT)(wParam)) = LOWORD(*result);\n        if (lParam) *((PUINT)(lParam)) = HIWORD(*result);  /* FIXME: subtract 1? */\n        break;\n    case CB_ADDSTRING:\n    case CB_FINDSTRING:\n    case CB_FINDSTRINGEXACT:\n    case CB_INSERTSTRING:\n    case CB_SELECTSTRING:\n    case CB_DIR:\n    case CB_GETLBTEXT:\n        lParam = MapLS( (LPSTR)lParam );\n        ret = callback( HWND_16(hwnd), msg + CB_GETEDITSEL16 - CB_GETEDITSEL, wParam, lParam, result, arg );\n        UnMapLS( lParam );\n        break;\n    case LB_GETITEMRECT:\n    case CB_GETDROPPEDCONTROLRECT:\n        {\n            RECT *r32 = (RECT *)lParam;\n            RECT16 rect;\n            lParam = MapLS( &rect );\n            ret = callback( HWND_16(hwnd),\n                            (msg == LB_GETITEMRECT) ? LB_GETITEMRECT16 : CB_GETDROPPEDCONTROLRECT16,\n                            wParam, lParam, result, arg );\n            UnMapLS( lParam );\n            RECT16to32( &rect, r32 );\n        }\n        break;\n    case WM_PAINTCLIPBOARD:\n    case WM_SIZECLIPBOARD:\n        FIXME_(msg)( \"message %04x needs translation\\n\", msg );\n        break;\n    /* the following messages should not be sent to 16-bit apps */\n    case WM_SIZING:\n    case WM_MOVING:\n    case WM_CAPTURECHANGED:\n    case WM_STYLECHANGING:\n    case WM_STYLECHANGED:\n        break;\n    case WM_MOUSEACTIVATE:\n        ret = callback(HWND_16(hwnd), msg, HWND_16((HWND)wParam), lParam, result, arg);\n        break;\n    case WM_SETFOCUS:\n    case WM_SETCURSOR:\n        ret = callback(HWND_16(hwnd), msg, HWND_16((HWND)wParam), lParam, result, arg);\n        break;\n    case WM_INITMENU:\n    case WM_INITMENUPOPUP:\n    case WM_UNINITMENUPOPUP:\n        ret = callback(HWND_16(hwnd), msg, HMENU_16((HMENU)wParam), lParam, result, arg);\n        break;\n    case WM_GETICON:\n        ret = callback(HWND_16(hwnd), msg, wParam, lParam, result, arg);\n        *result = (LRESULT)get_icon_32((HICON16)*result);\n        break;\n    case WM_SETICON:\n        ret = callback(HWND_16(hwnd), msg, wParam, get_icon_16((HICON)lParam), result, arg);\n        break;\n    case WM_QUERYDRAGICON:\n        ret = callback(HWND_16(hwnd), msg, wParam, lParam, result, arg);\n        if (!*result)\n            *result = get_default_icon(GetWindowWord16(HWND_16(hwnd), GWL_HINSTANCE));\n        *result = (LRESULT)get_icon_32((HICON16)*result);\n        break;\n    case WM_QUERYDROPOBJECT:\n    case WM_DROPOBJECT:\n    case WM_DRAGLOOP:\n    case WM_DRAGSELECT:\n    case WM_DRAGMOVE:\n    {\n        LPDROPSTRUCT lpds32 = (LPDROPSTRUCT)lParam;\n        DROPSTRUCT16 ds16;\n        LPDROPSTRUCT16 lpds16 = &ds16;\n        SEGPTR sds16 = MapLS(lpds16);\n        HICON icon32;\n        DROPSTRUCT32_16(lpds32, lpds16);\n        ret = callback(HWND_16(hwnd), msg, wParam, sds16, result, arg);\n        icon32 = get_icon_32((HICON16)*result);\n        if (icon32)\n        {\n            *result = (LRESULT)icon32;\n        }\n        DROPSTRUCT16_32(lpds32, lpds16);\n        break;\n    }\n    //some applications (afx?) crash when processing this message\n    case WM_THEMECHANGED:\n        break;\n    case MM_WOM_OPEN:\n    case MM_WOM_CLOSE:\n        ret = callback(HWND_16(hwnd), msg, HDRVR_16((HDRVR)wParam), lParam, result, arg);\n        break;\n    case MM_WOM_DONE:\n    {\n        ret = callback(HWND_16(hwnd), msg, HDRVR_16((HDRVR)wParam), lParam, result, arg);\n        break;\n    }\n    case WM_MOUSEWHEEL:\n    case WM_SYSTIMER:\n    case WM_TIMER:\n        if (!HIWORD(wParam))\n        {\n            ret = callback(HWND_16(hwnd), msg, wParam, lParam, result, arg);\n            break;\n        }\n        else\n        {\n            int index = -1;\n            for (int i = 0; i < TIMER32_WRAP_SIZE; i++)\n            {\n                if (!timer32[i].ref)\n                {\n                    index = i;\n                    break;\n                }\n            }\n            if (index == -1)\n            {\n                ERR(\"could not allocate TIMER32(%s)\\n\", message_to_str(msg));\n                ret = callback(HWND_16(hwnd), msg, wParam, lParam, result, arg);\n                break;\n            }\n            timer32_count++;\n            timer32[index].ref = TRUE;\n            timer32[index].wParam = wParam;\n            timer32[index].lParam = lParam;\n            ret = callback(HWND_16(hwnd), msg, index, TIMER32_LPARAM, result, arg);\n            break;\n        }\n    case WM_GETFONT:\n        ret = callback(HWND_16(hwnd), msg, wParam, lParam, result, arg);\n        *result = (LRESULT)HFONT_32((HFONT16)*result);\n        break;\n    case WM_KILLFOCUS:\n    case WM_MDIDESTROY:\n    case WM_INITDIALOG:\n        ret = callback(HWND_16(hwnd), msg, HWND_16((HWND)wParam), lParam, result, arg);\n        break;\n    case WM_ENTERIDLE:\n        ret = callback(HWND_16(hwnd), msg, wParam, HWND_16((HWND)lParam), result, arg);\n        break;\n    case WM_UPDATEUISTATE:\n        ret = callback(HWND_16(hwnd), msg, wParam, wParam, result, arg);\n        break;\n    case WM_PRINT:\n    case WM_PRINTCLIENT:\n    case WM_NCUAHDRAWFRAME: /* undocumented wparam: hdc */\n        ret = callback(HWND_16(hwnd), msg, HDC_16((HDC)wParam), lParam, result, arg);\n        break;\n    case 0x4c8: //MCIWNDM_NOTIFYMODE\n    {\n        char clsname[12];\n        BOOL r = GetClassNameA(wParam, &clsname, 12);\n        if (r && !stricmp(clsname, \"MCIWNDCLASS\"))\n            ret = callback(HWND_16(hwnd), msg, HWND_16(wParam), lParam, result, arg);\n        else\n            ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );\n        break;\n    }\n    case WM_DROPFILES:\n        ret = callback(HWND_16(hwnd), msg, (WPARAM16)hdrop32_to_hdrop16((HDROP)wParam), lParam, result, arg);\n        break;\n    default:\n    {\n        if (msg != WM_NULL && msg == drag_list_message)\n        {\n            LPDRAGLISTINFO di = (LPDRAGLISTINFO)lParam;\n            DRAGLISTINFO16 di16;\n            di16.hWnd = HWND_16(di->hWnd);\n            di16.uNotification = di->uNotification;\n            di16.ptCursor.x = di->ptCursor.x;\n            di16.ptCursor.y = di->ptCursor.y;\n            lParam = MapLS(&di16);\n            ret = callback(HWND_16(hwnd), msg, wParam, lParam, result, arg);\n            UnMapLS(lParam);\n            break;\n        }\n    }\n        ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );\n        break;\n    }\n    return ret;\n}\n\nstatic BOOL CALLBACK win16_windows(HWND hwnd, LPARAM lp)\n{\n    MSG *msg = (MSG *)lp;\n    char class[256];\n    LRESULT result;\n    GetClassNameA(hwnd, class, 256);\n    if (!strncmp(class, LOCAL_CLASS_PREFIX, strlen(LOCAL_CLASS_PREFIX)))\n        SendMessageTimeoutA(hwnd, msg->message, msg->wParam, msg->lParam, SMTO_ABORTIFHUNG, 1000, &result);\n    return TRUE;\n}\n\nstatic LRESULT send_message_timeout_callback( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp,\n                                      LRESULT *result, void *arg )\n{\n    DWORD count;\n    LRESULT success;\n    ReleaseThunkLock(&count);\n    if (hwnd == HWND_BROADCAST)\n    {\n        // Windows 11 24H2 disabled broadcasting WM_USER and WM_APP messages\n        // so send it ourselves to all winevdm top level windows\n        if ((get_windows_build() >= 26100) && (msg >= WM_USER) && (msg < 0xC000))\n        {\n            MSG message;\n            message.hwnd = hwnd;\n            message.message = msg;\n            message.wParam = wp;\n            message.lParam = lp;\n            *result = 0;\n            success = EnumWindows(win16_windows, (LPARAM)&message);\n        }\n        else\n        {\n            int timeout = 1000;\n            switch (msg)\n            {\n                case WM_PALETTECHANGED:\n                case WM_SYSCOLORCHANGE:\n                case WM_FONTCHANGE:\n                case WM_SETTINGCHANGE:\n                    timeout = 100;\n                    break;\n            }\n            success = SendMessageTimeoutA(hwnd, msg, wp, lp, SMTO_ABORTIFHUNG, timeout, result);\n        }\n    }\n    else\n        success = SendMessageTimeoutA(hwnd, msg, wp, lp, SMTO_NORMAL, 1000, result);\n    RestoreThunkLock(count);\n    if (!success)\n    {\n        if (GetLastError() == ERROR_TIMEOUT)\n        {\n            ERR(\"SendMessage(%p,%s,%04x,%08x,uTimeout=1000ms) timed out.\\n\", hwnd, message_to_str(msg), wp, lp);\n        }\n    }\n    return *result;\n}\n\ntypedef struct\n{\n    UINT msg;\n    WPARAM wp;\n    LPARAM lp;\n} send_message_to_same_process_args;\nBOOL CALLBACK send_message_to_same_process(HWND hwnd, LPARAM lp)\n{\n    DWORD pid;\n    DWORD_PTR result;\n    send_message_to_same_process_args *args = (send_message_to_same_process_args*)lp;\n    if (GetWindowThreadProcessId(hwnd, &pid) && pid == GetCurrentProcessId())\n    {\n        SendMessageTimeoutA(hwnd, args->msg, args->wp, args->lp, SMTO_NORMAL, 1000, &result);\n    }\n    return TRUE;\n}\n\nstatic LRESULT send_message_to_same_process_callback(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp,\n    LRESULT *result, void *arg)\n{\n    DWORD count;\n    send_message_to_same_process_args args;\n    args.msg = msg;\n    args.wp = wp;\n    args.lp = lp;\n    ReleaseThunkLock(&count);\n    *result = 0;\n    EnumWindows(send_message_to_same_process, &args);\n    RestoreThunkLock(count);\n    return *result;\n}\n/* InstallShield uses SendMessage(HWND_BROADCAST) for IPC */\nLRESULT WINAPI fix_installshield(HWND16 hwnd16, UINT16 msg, WPARAM16 wparam, LPARAM lparam, BOOL *fixed)\n{\n    char name[256];\n    LRESULT result;\n    static const char *table[] = \n    {\n        \"LZW_IS_CLIENT_ALIVE_SE\",\n        \"ISDEL_MSG_DELENABLE\",\n        \"ISDEL_MSG_DELEXISTS\",\n        \"ISDEL_MSG_DELDONE\",\n        \"ISMSG16_TERMINATE\",\n        \"ISMSG32_TERMINATE\",\n        \"LOGO_MSG_LOGOCLOSE_30\",\n        \"LOGO_MSG_LOGOSTATUS_30\",\n    };\n    *fixed = FALSE;\n    if (!GetClipboardFormatNameA(msg, name, ARRAYSIZE(name)))\n    {\n        return 0;\n    }\n    for (SIZE_T i = 0; i < ARRAYSIZE(table); i++)\n    {\n        if (!strcmp(name, table[i]))\n        {\n            *fixed = TRUE;\n            WINPROC_CallProc16To32A(send_message_to_same_process_callback, hwnd16, msg, wparam, lparam, &result, NULL);\n            return result;\n        }\n    }\n    return 0;\n}\n/***********************************************************************\n *\t\tSendMessage  (USER.111)\n */\nLRESULT WINAPI SendMessage16( HWND16 hwnd16, UINT16 msg, WPARAM16 wparam, LPARAM lparam )\n{\n    LRESULT result;\n    HWND hwnd = WIN_Handle32( hwnd16 );\n    DWORD pid;\n    DWORD thid = GetWindowThreadProcessId(hwnd, &pid);\n    // work around for Borland Office 2.0 installer\n//    if ((msg != WM_GETTEXT) || (thid != GetCurrentThreadId()))\n//        SetEvent(kernel_get_thread_data()->idle_event);\n\n    // SendMessageTimeout always fails with this message\n    if ((msg == WM_DDE_EXECUTE) && (thid != GetCurrentThreadId()))\n        return PostMessage16( hwnd16, msg, wparam, lparam );\n\n    if (hwnd != HWND_BROADCAST && thid == GetCurrentThreadId())\n    {\n        /* call 16-bit window proc directly */\n        WNDPROC16 winproc;\n\n\t\tif (!(winproc = (WNDPROC16)GetWndProc16(hwnd16)))\n\t\t{\n            DLGPROC16 dlgproc;\n            /* workaround for PBRUSH.EXE (color palette) */\n            if (msg == WM_COMMAND)\n            {\n                dlgproc = (DLGPROC16)GetDlgProc16(hwnd16);\n                if (dlgproc)\n                {\n                    /* first the WH_CALLWNDPROC hook */\n                    call_WH_CALLWNDPROC_hook(hwnd16, &msg, &wparam, &lparam);\n                    CallWindowProc16(dlgproc, hwnd16, msg, wparam, lparam);\n                    return GetWindowLong16(hwnd16, DWL_MSGRESULT);\n                }\n            }\n\t\t\tWINPROC_CallProc16To32A(send_message_callback, hwnd16, msg, wparam, lparam, &result, NULL);\n\t\t\treturn result;\n\t\t}\n\n        /* first the WH_CALLWNDPROC hook */\n        call_WH_CALLWNDPROC_hook(hwnd16, &msg, &wparam, &lparam);\n        TRACE_(message)(\"(0x%04x) [%04x] wp=%04x lp=%08lx\\n\", hwnd16, msg, wparam, lparam );\n        result = CallWindowProc16( winproc, hwnd16, msg, wparam, lparam );\n        TRACE_(message)(\"(0x%04x) [%04x] wp=%04x lp=%08lx returned %08lx\\n\",\n                        hwnd16, msg, wparam, lparam, result );\n    }\n    else  /* map to 32-bit unicode for inter-thread/process message */\n    {\n        if (hwnd == HWND_BROADCAST && msg >= 0xC000)\n        {\n            BOOL fixed = FALSE;\n            LRESULT result;\n            result = fix_installshield(hwnd16, msg, wparam, lparam, &fixed);\n            if (fixed)\n                return result;\n        }\n        TRACE_(message)(\"(0x%04x) to 32-bit [%04x] wp=%04x lp=%08lx\\n\", hwnd16, msg, wparam, lparam);\n        WINPROC_CallProc16To32A( send_message_timeout_callback, hwnd16, msg, wparam, lparam, &result, NULL );\n        TRACE_(message)(\"(0x%04x) to 32-bit [%04x] wp=%04x lp=%08lx returned %08lx\\n\",\n            hwnd16, msg, wparam, lparam, result);\n    }\n    return result;\n}\n\n\n/***********************************************************************\n *\t\tPostMessage  (USER.110)\n */\nBOOL16 WINAPI PostMessage16( HWND16 hwnd, UINT16 msg, WPARAM16 wparam, LPARAM lparam )\n{\n    LRESULT unused;\n    return WINPROC_CallProc16To32A( post_message_callback, hwnd, msg, wparam, lparam, &unused, NULL );\n}\n\n\n/***********************************************************************\n *\t\tPostAppMessage (USER.116)\n */\nBOOL16 WINAPI PostAppMessage16( HTASK16 hTask, UINT16 msg, WPARAM16 wparam, LPARAM lparam )\n{\n    LRESULT unused;\n    DWORD_PTR tid = HTASK_32( hTask );\n\n    if (!tid) return FALSE;\n    return WINPROC_CallProc16To32A( post_thread_message_callback, 0, msg, wparam, lparam,\n                                    &unused, (void *)tid );\n}\n\n\n/**********************************************************************\n *\t\tCallWindowProc (USER.122)\n */\nLRESULT WINAPI CallWindowProc16( WNDPROC16 func, HWND16 hwnd, UINT16 msg,\n                                 WPARAM16 wParam, LPARAM lParam )\n{\n    int index = winproc_to_index( func );\n    LRESULT result;\n\n    if (!func) return 0;\n\n    if (index == -1 || index >= MAX_WINPROCS32)\n        call_window_proc16( hwnd, msg, wParam, lParam, &result, func );\n    else\n    {\n        WNDPROC proc = (WNDPROC)func;\n        if (thunk_array && thunk_array[index].proc) proc = thunk_array[index].proc;\n        WINPROC_CallProc16To32A( call_window_proc_callback, hwnd, msg, wParam, lParam, &result, proc );\n    }\n    return result;\n}\n\n\n/**********************************************************************\n *\t     __wine_call_wndproc   (USER.1010)\n */\nLRESULT WINAPI __wine_call_wndproc( HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam, WNDPROC proc )\n{\n    LRESULT result;\n    WINPROC_CallProc16To32A( call_window_proc_callback, hwnd, msg, wParam, lParam, &result, proc );\n    return result;\n}\n\n\n/***********************************************************************\n *\t\tInSendMessage  (USER.192)\n */\nBOOL16 WINAPI InSendMessage16(void)\n{\n    return InSendMessage();\n}\n\n\n/***********************************************************************\n *\t\tReplyMessage  (USER.115)\n */\nvoid WINAPI ReplyMessage16( LRESULT result )\n{\n    ReplyMessage( result );\n}\n\nBOOL is_timer_thunk(TIMERPROC proc);\nstatic ATOM atom_UserAdapterWindowClass;\n/***********************************************************************\n *\t\tPeekMessage32 (USER.819)\n */\nBOOL16 WINAPI PeekMessage32_16( MSG32_16 *msg16, HWND16 hwnd16,\n                                UINT16 first, UINT16 last, UINT16 flags,\n                                BOOL16 wHaveParamHigh )\n{\n    MSG msg;\n    LRESULT remove = flags;\n    HWND hwnd = WIN_Handle32( hwnd16 );\n\n    if(USER16_AlertableWait)\n        MsgWaitForMultipleObjectsEx( 0, NULL, 0, 0, MWMO_ALERTABLE );\n    if (!PeekMessageA( &msg, hwnd, first, last, flags )) return FALSE;\n\n    if ((msg.message == WM_TIMER) && (flags & PM_REMOVE) && !msg.hwnd && msg.lParam && !is_timer_thunk(msg.lParam))\n    {\n        DispatchMessageA(&msg);\n        return PeekMessage32_16(msg16, hwnd16, first, last, flags, wHaveParamHigh);\n    }\n\n    if (atom_UserAdapterWindowClass == 0)\n    {\n        WNDCLASSA c;\n        HMODULE hmod = GetModuleHandleW(L\"CoreMessaging\");\n        if (hmod)\n        {\n            atom_UserAdapterWindowClass = GetClassInfoA(hmod, \"UserAdapterWindowClass\", &c);\n            if (!atom_UserAdapterWindowClass)\n            {\n                atom_UserAdapterWindowClass = GetClassInfoA(hmod, \"SystemUserAdapterWindowClass\", &c);\n            }\n        }\n    }\n    if ((flags & PM_REMOVE) && ((atom_UserAdapterWindowClass != 0 && msg.hwnd != NULL && GetClassWord(msg.hwnd, GCW_ATOM) == atom_UserAdapterWindowClass) || msg.message == WM_DWMNCRENDERINGCHANGED))\n    {\n        DispatchMessageA(&msg);\n        return PeekMessage32_16(msg16, hwnd16, first, last, flags, wHaveParamHigh);\n    }\n    msg16->msg.time    = msg.time;\n    msg16->msg.pt.x    = (INT16)msg.pt.x;\n    msg16->msg.pt.y    = (INT16)msg.pt.y;\n    if (wHaveParamHigh) msg16->wParamHigh = HIWORD(msg.wParam);\n    WINPROC_CallProc32ATo16( get_message_callback, msg.hwnd, msg.message, msg.wParam, msg.lParam,\n                             &remove, &msg16->msg );\n    return TRUE;\n}\n\n\ntypedef struct\n{\n    BOOL down;\n    BOOL found;\n    BOOL scrollable;\n    HWND hwnd;\n} enum_scrollbar_data;\nstatic void check_scrollable(enum_scrollbar_data *d, HWND hwnd)\n{\n    SCROLLINFO si = { 0 };\n    si.cbSize = sizeof(si);\n    si.fMask = SIF_ALL;\n    char ctrl[12];\n    RealGetWindowClassA(hwnd, ctrl, 12);\n    if (!stricmp(ctrl, \"SCROLLBAR\"))\n    {\n        if (GetScrollInfo(hwnd, SB_CTL, &si))\n        {\n            if ((GetWindowLongW(hwnd, GWL_STYLE) & (SBS_VERT | WS_VISIBLE)) == (SBS_VERT | WS_VISIBLE))\n            {\n                d->found = TRUE;\n                if ((d->down && si.nMax > si.nPos) || (!d->down && si.nMin < si.nPos))\n                {\n                    d->scrollable = TRUE;\n                    d->hwnd = hwnd;\n                }\n            }\n            return;\n        }\n    }\n    if (GetScrollInfo(hwnd, SB_VERT, &si))\n    {\n        d->found = TRUE;\n        if ((d->down && si.nMax > si.nPos) || (!d->down && si.nMin < si.nPos))\n        {\n            d->scrollable = TRUE;\n            d->hwnd = NULL;\n        }\n        return;\n    }\n}\nstatic BOOL CALLBACK enum_scrollbar_proc(HWND hwnd, LPARAM lp)\n{\n    enum_scrollbar_data *d = (enum_scrollbar_data*)lp;\n    check_scrollable(d, hwnd);\n    return TRUE;\n}\nstatic LRESULT defwindow_proc_callback(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp,\n    LRESULT *result, void *arg)\n{\n    DWORD count;\n    HANDLE yevent = kernel_get_thread_data()->yield_event;\n    if (!yevent)\n        ReleaseThunkLock(&count);\n    if (msg == WM_MOUSEWHEEL)\n    {\n        enum_scrollbar_data d = { 0 };\n        d.down = (INT16)HIWORD(wp) < 0;\n        check_scrollable(&d, hwnd);\n        EnumChildWindows(hwnd, (WNDENUMPROC)enum_scrollbar_proc, (LPARAM)&d);\n        if (d.scrollable)\n        {\n            SendMessage16(HWND_16(hwnd), WM_VSCROLL, d.down ? SB_LINEDOWN : SB_LINEUP, MAKELONG(0, (WORD)HWND_16(d.hwnd)));\n            SendMessage16(HWND_16(hwnd), WM_VSCROLL, SB_ENDSCROLL, MAKELONG(0, (WORD)HWND_16(d.hwnd)));\n            if (!yevent)\n                RestoreThunkLock(count);\n            return 0;\n        }\n    }\n    *result = DefWindowProcA(hwnd, msg, wp, lp);\n    if (!yevent)\n        RestoreThunkLock(count);\n    return *result;\n}\n/***********************************************************************\n *\t\tDefWindowProc (USER.107)\n */\nLRESULT WINAPI DefWindowProc16( HWND16 hwnd16, UINT16 msg, WPARAM16 wParam, LPARAM lParam )\n{\n    LRESULT result;\n    WINPROC_CallProc16To32A(defwindow_proc_callback, hwnd16, msg, wParam, lParam, &result, 0);\n    if ((msg == WM_WINDOWPOSCHANGED) && IsOldWindowsTask(GetCurrentTask()))\n    {\n        WINDOWPOS16 *wpos = (WINDOWPOS16 *)MapSL(lParam);\n        if (wpos->flags & 0x1000 /*SWP_NOCLIENTMOVE*/)\n            SendMessage16(hwnd16, WM_MOVE, 0, MAKELONG(wpos->x, wpos->y));\n    }\n    return result;\n}\n\n\n/***********************************************************************\n *              DefDlgProc (USER.308)\n */\nLRESULT WINAPI DefDlgProc16( HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam )\n{\n    LRESULT result;\n    WINPROC_CallProc16To32A( defdlg_proc_callback, hwnd, msg, wParam, lParam, &result, 0 );\n    return result;\n}\n\n\nBOOL16 WINAPI IsOldWindowsTask(HINSTANCE16 hInst);\n/***********************************************************************\n *\t\tPeekMessage  (USER.109)\n */\nBOOL16 WINAPI PeekMessage16( MSG16 *msg, HWND16 hwnd,\n                             UINT16 first, UINT16 last, UINT16 flags )\n{\n    DWORD count;\n    if (!(flags & PM_NOYIELD))\n    {\n        SetEvent(kernel_get_thread_data()->idle_event);\n        ReleaseThunkLock(&count);\n        MsgWaitForMultipleObjects(0, NULL, FALSE, 0, QS_ALLINPUT);\n        /* Sleep(1); /* yield thread */\n        /* Some programs use PeekMessage instead of GetMessage, so use 100% CPU... */\n        static int extra_sleep = -1;\n        if (extra_sleep == -1)\n            extra_sleep = krnl386_get_config_int(\"otvdm\", \"PeekMessageSleep\", 0);\n        if (extra_sleep > 0)\n            MsgWaitForMultipleObjects(0, NULL, FALSE, extra_sleep, QS_ALLINPUT);\n    }\n    BOOL ret = PeekMessage32_16((MSG32_16 *)msg, hwnd, first, last, flags, FALSE);\n    if (!(flags & PM_NOYIELD))\n    {\n        RestoreThunkLock(count);\n    }\n    if (IsOldWindowsTask(GetCurrentTask()))\n    {\n        if (!msg->hwnd)\n            msg->hwnd = HWND_16(GetDesktopWindow());\n        if (!(flags & PM_REMOVE) && ((msg->message & ~1) == 0x100))\n        {\n            char key = msg->wParam & 0xff;\n            char keys[256];\n            GetKeyboardState(keys);\n            keys[key] = (keys[key] & 1) ^ (!(keys[key] & 0x80) && !(msg->message & 1)) ? 1 : 0;\n            keys[key] |= (msg->message & 1) ? 0 : 0x80;\n            SetKeyboardState(keys);\n        }\n    }\n    return ret;\n}\n\n\n/***********************************************************************\n *\t\tGetMessage32  (USER.820)\n */\nBOOL16 WINAPI GetMessage32_16( MSG32_16 *msg16, HWND16 hwnd16, UINT16 first,\n                               UINT16 last, BOOL16 wHaveParamHigh )\n{\n    MSG msg;\n    LRESULT remove = 1;\n    HWND hwnd = WIN_Handle32( hwnd16 );\n    SetEvent(kernel_get_thread_data()->idle_event);\n\n    if(USER16_AlertableWait)\n        MsgWaitForMultipleObjectsEx( 0, NULL, INFINITE, 0, MWMO_ALERTABLE );\n\n    DWORD count;\n\n    /* Do not yield when there is a posted message */\n    if (!PeekMessageA(&msg, hwnd, first, last, PM_REMOVE))\n    {\n        ReleaseThunkLock(&count);\n        GetMessageA(&msg, hwnd, first, last);\n        RestoreThunkLock(count);\n    }\n    if (msg.message == WM_DWMNCRENDERINGCHANGED)\n    {\n        DispatchMessageA(&msg);\n        return GetMessage32_16(msg16, hwnd16, first, last, wHaveParamHigh);\n    }\n    msg16->msg.time    = msg.time;\n    msg16->msg.pt.x    = (INT16)msg.pt.x;\n    msg16->msg.pt.y    = (INT16)msg.pt.y;\n    if (wHaveParamHigh) msg16->wParamHigh = HIWORD(msg.wParam);\n    WINPROC_CallProc32ATo16( get_message_callback, msg.hwnd, msg.message, msg.wParam, msg.lParam,\n                             &remove, &msg16->msg );\n\n    TRACE( \"message %04x, hwnd %p, filter(%04x - %04x)\\n\",\n           msg16->msg.message, hwnd, first, last );\n\n    return msg16->msg.message != WM_QUIT;\n}\n\n\n/***********************************************************************\n *\t\tGetMessage  (USER.108)\n */\nBOOL16 WINAPI GetMessage16( MSG16 *msg, HWND16 hwnd, UINT16 first, UINT16 last )\n{\n    return GetMessage32_16( (MSG32_16 *)msg, hwnd, first, last, FALSE );\n}\n\n\n/***********************************************************************\n *\t\tTranslateMessage32 (USER.821)\n */\nBOOL16 WINAPI TranslateMessage32_16( const MSG32_16 *msg, BOOL16 wHaveParamHigh )\n{\n    MSG msg32;\n\n    msg32.hwnd    = WIN_Handle32( msg->msg.hwnd );\n    msg32.message = msg->msg.message;\n    msg32.wParam  = MAKEWPARAM( msg->msg.wParam, wHaveParamHigh ? msg->wParamHigh : 0 );\n    msg32.lParam  = msg->msg.lParam;\n    return TranslateMessage( &msg32 );\n}\n\n\n/***********************************************************************\n *\t\tTranslateMessage (USER.113)\n */\nBOOL16 WINAPI TranslateMessage16( const MSG16 *msg )\n{\n    return TranslateMessage32_16( (const MSG32_16 *)msg, FALSE );\n}\n\n\nLRESULT call_native_wndproc(HWND16 hWnd16, UINT16 msg, WPARAM16 wParam, LPARAM lParam)\n{\n\tLRESULT result;\n\tWNDPROC wndproc32 = (WNDPROC)GetWindowLongPtrA(HWND_32(hWnd16), GWLP_WNDPROC);\n\tif (!wndproc32)\n\t{\n\t\tSetLastError(ERROR_INVALID_WINDOW_HANDLE);\n\t\treturn 0;\n\t}\n\tWINPROC_CallProc16To32A(call_window_proc_callback, hWnd16, msg, wParam, lParam, &result, wndproc32);\n\treturn result;\n}\n/***********************************************************************\n *\t\tDispatchMessage (USER.114)\n */\nLONG WINAPI DispatchMessage16( const MSG16* msg )\n{\n    WNDPROC16 winproc;\n    LRESULT retval;\n    WNDPROC wndproc32 = (WNDPROC)GetWindowLongPtrA(HWND_32(msg->hwnd), GWLP_WNDPROC);\n\n      /* Process timer messages */\n    if ((msg->message == WM_TIMER) || (msg->message == WM_SYSTIMER))\n    {\n        if (msg->lParam)\n        {\n            WPARAM wp = (WPARAM)msg->wParam;\n            LPARAM lp = msg->lParam;\n            if (msg->lParam == TIMER32_LPARAM)\n            {\n                timer32[msg->wParam].ref = FALSE;\n                wp = timer32[msg->wParam].wParam;\n                lp = timer32[msg->wParam].lParam;\n                timer32_count--;\n            }\n            if (msg->lParam == TIMER32_LPARAM || (msg->lParam & 0xFFFF0000) != 0xFFFF0000)\n            {\n                MSG msg32;\n\n                msg32.hwnd = WIN_Handle32(msg->hwnd);\n                msg32.wParam = wp;\n                msg32.lParam = lp;\n                msg32.time = msg->time;\n                msg32.pt.x = msg->pt.x;\n                msg32.pt.y = msg->pt.y;\n                msg32.message = msg->message;\n                return DispatchMessageA(&msg32);\n            }\n            return CallWindowProc16((WNDPROC16)msg->lParam, msg->hwnd,\n                msg->message, (WPARAM16)wp, GetTickCount());\n        }\n\t}\n\n    if (!msg->hwnd || !(winproc = (WNDPROC16)GetWndProc16( msg->hwnd )) ||\n        wndproc32 != WindowProc16 /* OleSetMenuDescriptor put a window in a subclass */)\n\t{\n\t\tLRESULT result;\n\t\tif (!wndproc32)\n\t\t{\n\t\t\tSetLastError(ERROR_INVALID_WINDOW_HANDLE);\n\t\t\treturn 0;\n\t\t}\n\t\tWINPROC_CallProc16To32A(call_window_proc_callback, msg->hwnd, msg->message, msg->wParam, msg->lParam, &result,\n\t\t\twndproc32);\n\t\treturn result;\n    }\n\tTRACE_(message)(\"(0x%04x) [%04x] wp=%04x lp=%08lx\\n\", msg->hwnd, msg->message, msg->wParam, msg->lParam);\n    retval = CallWindowProc16( winproc, msg->hwnd, msg->message, msg->wParam, msg->lParam );\n    TRACE_(message)(\"(0x%04x) [%04x] wp=%04x lp=%08lx returned %08lx\\n\",\n\t\tmsg->hwnd, msg->message, msg->wParam, msg->lParam, retval);\n    return retval;\n}\n\n\n/***********************************************************************\n *\t\tDispatchMessage32 (USER.822)\n */\nLONG WINAPI DispatchMessage32_16( const MSG32_16 *msg16, BOOL16 wHaveParamHigh )\n{\n    if (wHaveParamHigh == FALSE)\n        return DispatchMessage16( &msg16->msg );\n    else\n    {\n        MSG msg;\n\n        msg.hwnd    = WIN_Handle32( msg16->msg.hwnd );\n        msg.message = msg16->msg.message;\n        msg.wParam  = MAKEWPARAM( msg16->msg.wParam, msg16->wParamHigh );\n        msg.lParam  = msg16->msg.lParam;\n        msg.time    = msg16->msg.time;\n        msg.pt.x    = msg16->msg.pt.x;\n        msg.pt.y    = msg16->msg.pt.y;\n        return DispatchMessageA( &msg );\n    }\n}\n\n\n\nstatic LRESULT is_dialog_message_callback(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp,\n    LRESULT *result, void *arg)\n{\n    MSG16 *msg16 = (MSG16*)arg;\n    MSG mesg;\n    if (msg == WM_DWMNCRENDERINGCHANGED)\n        return;\n    mesg.hwnd = HWND_32(msg16->hwnd);\n    mesg.message = msg;\n    mesg.wParam = wp;\n    mesg.lParam = lp;\n    mesg.time = msg16->time;\n    mesg.pt.x = msg16->pt.x;\n    mesg.pt.y = msg16->pt.y;\n    *result = IsDialogMessageA(hwnd, &mesg);\n    return *result;\n}\n/***********************************************************************\n *\t\tIsDialogMessage (USER.90)\n */\nBOOL16 WINAPI IsDialogMessage16( HWND16 hwndDlg, SEGPTR pmsg16 )\n{\n    MSG msg;\n    MSG16 *msg16 = MapSL(pmsg16);\n    HWND hwndDlg32;\n    BOOL ret;\n\n    msg.hwnd  = WIN_Handle32(msg16->hwnd);\n    hwndDlg32 = WIN_Handle32(hwndDlg);\n\n    switch(msg16->message)\n    {\n    case WM_KEYDOWN:\n    case WM_CHAR:\n    case WM_SYSCHAR:\n        msg.message = msg16->message;\n        msg.wParam  = msg16->wParam;\n        msg.lParam  = msg16->lParam;\n        msg.time    = msg16->time;\n        msg.pt.x    = msg16->pt.x;\n        msg.pt.y    = msg16->pt.y;\n        SetPropA(msg.hwnd, MAKEINTATOM(dialogmsgthunk), (HANDLE)pmsg16);\n        ret = IsDialogMessageA( hwndDlg32, &msg );\n        RemovePropA(msg.hwnd, MAKEINTATOM(dialogmsgthunk));\n        return ret;\n    default:\n    {\n        LPARAM result;\n        SetPropA(msg.hwnd, MAKEINTATOM(dialogmsgthunk), (HANDLE)pmsg16);\n        ret = WINPROC_CallProc16To32A(is_dialog_message_callback, hwndDlg, msg16->message, msg16->wParam, msg16->lParam, &result, msg16);\n        RemovePropA(msg.hwnd, MAKEINTATOM(dialogmsgthunk));\n        return ret;\n    }\n    }\n\n    if ((hwndDlg32 != msg.hwnd) && !IsChild( hwndDlg32, msg.hwnd )) return FALSE;\n    TranslateMessage16( msg16 );\n\t//????\n\tif (DispatchMessage16(msg16) == FALSE)\n\t\tDefDlgProc16(hwndDlg, msg16->message, msg16->wParam, msg16->lParam);\n    return TRUE;\n}\n\n\n/***********************************************************************\n *\t\tMsgWaitForMultipleObjects  (USER.640)\n */\nDWORD WINAPI MsgWaitForMultipleObjects16( DWORD count, const HANDLE *handles,\n                                          BOOL wait_all, DWORD timeout, DWORD mask )\n{\n    return MsgWaitForMultipleObjectsEx( count, handles, timeout, mask,\n                                        wait_all ? MWMO_WAITALL : 0 );\n}\n\n\n/**********************************************************************\n *\t\tSetDoubleClickTime (USER.20)\n */\nvoid WINAPI SetDoubleClickTime16( UINT16 interval )\n{\n    SetDoubleClickTime( interval );\n}\n\n\n/**********************************************************************\n *\t\tGetDoubleClickTime (USER.21)\n */\nUINT16 WINAPI GetDoubleClickTime16(void)\n{\n    return GetDoubleClickTime();\n}\n\n\n/***********************************************************************\n *\t\tPostQuitMessage (USER.6)\n */\nvoid WINAPI PostQuitMessage16( INT16 exitCode )\n{\n    PostQuitMessage( exitCode );\n}\n\n\n/**********************************************************************\n *\t\tGetKeyState (USER.106)\n */\nINT16 WINAPI GetKeyState16(INT16 vkey)\n{\n    return GetKeyState(vkey);\n}\n\n\n/**********************************************************************\n *\t\tGetKeyboardState (USER.222)\n */\nBOOL WINAPI GetKeyboardState16( LPBYTE state )\n{\n    return GetKeyboardState( state );\n}\n\n\n/**********************************************************************\n *\t\tSetKeyboardState (USER.223)\n */\nBOOL WINAPI SetKeyboardState16( LPBYTE state )\n{\n    return SetKeyboardState( state );\n}\n\n\n/***********************************************************************\n *\t\tSetMessageQueue (USER.266)\n */\nBOOL16 WINAPI SetMessageQueue16( INT16 size )\n{\n    return SetMessageQueue( size );\n}\n\n\n/***********************************************************************\n *\t\tUserYield (USER.332)\n */\nvoid WINAPI UserYield16(void)\n{\n    MSG msg;\n    PeekMessageW( &msg, 0, 0, 0, PM_REMOVE | PM_QS_SENDMESSAGE );\n}\n\n\n/***********************************************************************\n *\t\tGetQueueStatus (USER.334)\n */\nDWORD WINAPI GetQueueStatus16( UINT16 flags )\n{\n    return GetQueueStatus( flags );\n}\n\n\n/***********************************************************************\n *\t\tGetInputState (USER.335)\n */\nBOOL16 WINAPI GetInputState16(void)\n{\n    return GetInputState();\n}\n\n\n/**********************************************************************\n *           TranslateAccelerator      (USER.178)\n */\nINT16 WINAPI TranslateAccelerator16( HWND16 hwnd, HACCEL16 hAccel, LPMSG16 msg )\n{\n    MSG msg32;\n    ACCEL16 *accel;\n\n    if (!msg) return 0;\n\n    switch (msg->message)\n    {\n    case WM_KEYDOWN:\n    case WM_SYSKEYDOWN:\n    case WM_KEYUP:\n    case WM_SYSKEYUP:\n    case WM_CHAR:\n    case WM_SYSCHAR:\n        break;\n    default:\n        return 0;\n    }\n\n    msg32.message = msg->message;\n    /* msg32.hwnd not used */\n    msg32.wParam  = msg->wParam;\n    msg32.lParam  = msg->lParam;\n\n#if 0\n    /* Some programs allocate the HACCEL directly instead of loading the HACCEL by LoadAccelerators. */\n    accel = (hAccel & 6) == 6 ? (ACCEL16*)GlobalLock16(hAccel) : 0;\n    if (accel)\n    {\n        int i;\n        int count = GlobalSize16(hAccel) / sizeof(ACCEL16);\n        ACCEL accel32[100];\n        HACCEL haccel32;\n        int ret;\n        ACCEL *table32 = accel32;\n        if (count * sizeof(ACCEL) > sizeof(accel32))\n            table32 = HeapAlloc(GetProcessHeap(), 0, count * sizeof(ACCEL));\n        if (!table32)\n            return 0;\n        for (i = 0; i < count; i++)\n        {\n            table32[i].cmd = accel[i].cmd;\n            table32[i].key = accel[i].key;\n            table32[i].fVirt = accel[i].fVirt & ~0x80;\n            if (accel[i].fVirt & 0x80)\n            {\n                count = i + 1;\n                break;\n            }\n        }\n        haccel32 = CreateAcceleratorTableW(table32, count);\n        GlobalUnlock16(hAccel);\n        if (table32 != accel32)\n            HeapFree(GetProcessHeap(), 0, table32);\n        ret = TranslateAcceleratorW(WIN_Handle32(hwnd), haccel32, &msg32);\n        DestroyAcceleratorTable(haccel32);\n        return ret;\n    }\n#endif\n    return TranslateAcceleratorW( WIN_Handle32(hwnd), HACCEL_32(hAccel), &msg32 );\n}\n\n\n/**********************************************************************\n *\t\tTranslateMDISysAccel (USER.451)\n */\nBOOL16 WINAPI TranslateMDISysAccel16( HWND16 hwndClient, LPMSG16 msg )\n{\n    if (msg->message == WM_KEYDOWN || msg->message == WM_SYSKEYDOWN)\n    {\n        MSG msg32;\n        msg32.hwnd    = WIN_Handle32(msg->hwnd);\n        msg32.message = msg->message;\n        msg32.wParam  = msg->wParam;\n        msg32.lParam  = msg->lParam;\n        /* MDICLIENTINFO is still the same for win32 and win16 ... */\n        return TranslateMDISysAccel( WIN_Handle32(hwndClient), &msg32 );\n    }\n    return 0;\n}\n\n\n\n/***********************************************************************\n*           button_proc16\n*/\nstatic LRESULT button_proc_CallProc16To32A(winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode\n    , LRESULT *result, void *arg, BOOL *f)\n{\n    static const UINT msg16_offset = BM_GETCHECK16 - BM_GETCHECK;\n    *f = TRUE;\n\n    switch (msg)\n    {\n    case BM_GETCHECK16:\n    case BM_SETCHECK16:\n    case BM_GETSTATE16:\n    case BM_SETSTATE16:\n    case BM_SETSTYLE16:\n        return callback(hwnd, msg - msg16_offset, wParam, lParam, result, arg);\n    default:\n        *f = FALSE;\n        return 0;\n    }\n}\n/***********************************************************************\n *           button_proc16\n */\nstatic LRESULT button_proc16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode )\n{\n    static const UINT msg16_offset = BM_GETCHECK16 - BM_GETCHECK;\n\n    switch (msg)\n    {\n    case BM_GETCHECK16:\n    case BM_SETCHECK16:\n    case BM_GETSTATE16:\n    case BM_SETSTATE16:\n    case BM_SETSTYLE16:\n        return wow_handlers32.button_proc( hwnd, msg - msg16_offset, wParam, lParam, FALSE );\n    default:\n        return wow_handlers32.button_proc( hwnd, msg, wParam, lParam, unicode );\n    }\n}\n\n\n/***********************************************************************\n *           combo_proc16\n */\nstatic LRESULT combo_proc16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode )\n{\n    static const UINT msg16_offset = CB_GETEDITSEL16 - CB_GETEDITSEL;\n\n    switch (msg)\n    {\n    case CB_INSERTSTRING16:\n    case CB_SELECTSTRING16:\n    case CB_FINDSTRING16:\n    case CB_FINDSTRINGEXACT16:\n        wParam = (INT)(INT16)wParam;\n        /* fall through */\n    case CB_ADDSTRING16:\n    {\n        DWORD style = GetWindowLongW( hwnd, GWL_STYLE );\n        if ((style & CBS_HASSTRINGS) || !(style & (CBS_OWNERDRAWFIXED | CBS_OWNERDRAWVARIABLE)))\n           lParam = (LPARAM)MapSL(lParam);\n        msg -= msg16_offset;\n        break;\n    }\n    case CB_SETITEMHEIGHT16:\n    case CB_GETITEMHEIGHT16:\n    case CB_SETCURSEL16:\n    case CB_GETLBTEXTLEN16:\n    case CB_GETITEMDATA16:\n    case CB_SETITEMDATA16:\n        wParam = (INT)(INT16)wParam;\t/* signed integer */\n        msg -= msg16_offset;\n        break;\n    case CB_GETDROPPEDCONTROLRECT16:\n        lParam = (LPARAM)MapSL(lParam);\n        if (lParam)\n        {\n            RECT r;\n            RECT16 *r16 = (RECT16 *)lParam;\n            wow_handlers32.combo_proc( hwnd, CB_GETDROPPEDCONTROLRECT, wParam, (LPARAM)&r, FALSE );\n            r16->left   = r.left;\n            r16->top    = r.top;\n            r16->right  = r.right;\n            r16->bottom = r.bottom;\n        }\n        return CB_OKAY;\n    case CB_DIR16:\n        if (wParam & DDL_DRIVES) wParam |= DDL_EXCLUSIVE;\n        lParam = (LPARAM)MapSL(lParam);\n        msg -= msg16_offset;\n        break;\n    case CB_GETLBTEXT16:\n        wParam = (INT)(INT16)wParam;\n        lParam = (LPARAM)MapSL(lParam);\n        msg -= msg16_offset;\n        break;\n    case CB_GETEDITSEL16:\n        wParam = lParam = 0;   /* just in case */\n        msg -= msg16_offset;\n        break;\n    case CB_LIMITTEXT16:\n    case CB_SETEDITSEL16:\n    case CB_DELETESTRING16:\n    case CB_RESETCONTENT16:\n    case CB_GETDROPPEDSTATE16:\n    case CB_SHOWDROPDOWN16:\n    case CB_GETCOUNT16:\n    case CB_GETCURSEL16:\n    case CB_SETEXTENDEDUI16:\n    case CB_GETEXTENDEDUI16:\n        msg -= msg16_offset;\n        break;\n    default:\n        return wow_handlers32.combo_proc( hwnd, msg, wParam, lParam, unicode );\n    }\n    return wow_handlers32.combo_proc( hwnd, msg, wParam, lParam, FALSE );\n}\n\n\n/***********************************************************************\n*           combo_proc16\n*/\nstatic LRESULT combo_proc_CallProc16To32A(winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode\n    , LRESULT *result, void *arg, BOOL *f) \n{\n    static const UINT msg16_offset = CB_GETEDITSEL16 - CB_GETEDITSEL;\n    *f = TRUE;\n    switch (msg)\n    {\n    case CB_INSERTSTRING16:\n    case CB_SELECTSTRING16:\n    case CB_FINDSTRING16:\n    case CB_FINDSTRINGEXACT16:\n        wParam = (INT)(INT16)wParam;\n        /* fall through */\n    case CB_ADDSTRING16:\n    {\n        DWORD style = GetWindowLongW(hwnd, GWL_STYLE);\n        if ((style & CBS_HASSTRINGS) || !(style & (CBS_OWNERDRAWFIXED | CBS_OWNERDRAWVARIABLE)))\n            lParam = (LPARAM)MapSL(lParam);\n        msg -= msg16_offset;\n        break;\n    }\n    case CB_SETITEMHEIGHT16:\n    case CB_GETITEMHEIGHT16:\n    case CB_SETCURSEL16:\n    case CB_GETLBTEXTLEN16:\n    case CB_GETITEMDATA16:\n    case CB_SETITEMDATA16:\n        wParam = (INT)(INT16)wParam;\t/* signed integer */\n        msg -= msg16_offset;\n        break;\n    case CB_GETDROPPEDCONTROLRECT16:\n        lParam = (LPARAM)MapSL(lParam);\n        if (lParam)\n        {\n            RECT r;\n            RECT16 *r16 = (RECT16 *)lParam;\n            r.left = r16->left;\n            r.top = r16->top;\n            r.right = r16->right;\n            r.bottom = r16->bottom;\n            LRESULT ret = callback(hwnd, CB_GETDROPPEDCONTROLRECT, wParam, (LPARAM)&r, result, arg);//wow_handlers32.combo_proc(hwnd, CB_GETDROPPEDCONTROLRECT, wParam, (LPARAM)&r, FALSE);\n            r16->left = r.left;\n            r16->top = r.top;\n            r16->right = r.right;\n            r16->bottom = r.bottom;\n            *result = CB_OKAY;\n            return ret;\n        }\n    case CB_DIR16:\n        if (wParam & DDL_DRIVES) wParam |= DDL_EXCLUSIVE;\n        lParam = (LPARAM)MapSL(lParam);\n        msg -= msg16_offset;\n        break;\n    case CB_GETLBTEXT16:\n        wParam = (INT)(INT16)wParam;\n        lParam = (LPARAM)MapSL(lParam);\n        msg -= msg16_offset;\n        break;\n    case CB_GETEDITSEL16:\n        wParam = lParam = 0;   /* just in case */\n        msg -= msg16_offset;\n        break;\n    case CB_LIMITTEXT16:\n    case CB_SETEDITSEL16:\n    case CB_DELETESTRING16:\n    case CB_RESETCONTENT16:\n    case CB_GETDROPPEDSTATE16:\n    case CB_SHOWDROPDOWN16:\n    case CB_GETCOUNT16:\n    case CB_GETCURSEL16:\n    case CB_SETEXTENDEDUI16:\n    case CB_GETEXTENDEDUI16:\n        msg -= msg16_offset;\n        break;\n    case CB_UNKNOWN_167_16:\n        msg = CB_UNKNOWN_167;\n        break;\n    default:\n        *f = FALSE;\n        return 0;\n    }\n    return callback(hwnd, msg, wParam, lParam, result, arg);\n}\n\n\n/*********************************************************************\n * edit_lock_buffer (internal)\n *\n * A 16 bit application might send an EM_GETHANDLE message and expect a HLOCAL16\n * (16 bit SEG:OFF handler). From that moment on we have to keep using this\n * 16 bit memory handler, because it is supposed to be valid at all times after\n * EM_GETHANDLE.\n * We create a HLOCAL16 buffer in edit_get_handle and copy the text from the\n * HLOCAL buffer, when needed\n *\n */\n\n#define GWW_HANDLE16 sizeof(void*)\n\nstatic void edit_lock_buffer( HWND hwnd )\n{\n    STACK16FRAME* stack16 = MapSL(PtrToUlong(getWOW32Reserved()));\n    HLOCAL16 hloc16 = GetWindowWord16( HWND_16(hwnd), GWW_HANDLE16 );\n    HANDLE16 oldDS;\n    HLOCAL hloc32;\n    UINT size;\n\n    if (!hloc16) return;\n    if (!(hloc32 = (HLOCAL)wow_handlers32.edit_proc( hwnd, EM_GETHANDLE, 0, 0, FALSE ))) return;\n\n    oldDS = stack16->ds;\n    stack16->ds = GetWindowWord16( HWND_16(hwnd), GWLP_HINSTANCE );\n    size = LocalSize16(hloc16);\n    if (LocalReAlloc( hloc32, size, LMEM_MOVEABLE ))\n    {\n        char *text = MapSL( LocalLock16( hloc16 ));\n        char *dest = LocalLock( hloc32 );\n        memcpy( dest, text, size );\n        LocalUnlock( hloc32 );\n        LocalUnlock16( hloc16 );\n    }\n    stack16->ds = oldDS;\n\n}\n\nstatic void edit_unlock_buffer( HWND hwnd )\n{\n    STACK16FRAME* stack16 = MapSL(PtrToUlong(getWOW32Reserved()));\n    HLOCAL16 hloc16 = GetWindowWord16( HWND_16(hwnd), GWW_HANDLE16 );\n    HANDLE16 oldDS;\n    HLOCAL hloc32;\n    UINT size;\n\n    if (!hloc16) return;\n    if (!(hloc32 = (HLOCAL)wow_handlers32.edit_proc( hwnd, EM_GETHANDLE, 0, 0, FALSE ))) return;\n    size = LocalSize( hloc32 );\n\n    oldDS = stack16->ds;\n    stack16->ds = GetWindowWord16( HWND_16(hwnd), GWLP_HINSTANCE );\n    if (LocalReAlloc16( hloc16, size, LMEM_MOVEABLE ))\n    {\n        char *text = LocalLock( hloc32 );\n        char *dest = MapSL( LocalLock16( hloc16 ));\n        memcpy( dest, text, size );\n        LocalUnlock( hloc32 );\n        LocalUnlock16( hloc16 );\n    }\n    stack16->ds = oldDS;\n}\n\nstatic HLOCAL16 edit_get_handle( HWND hwnd )\n{\n    CHAR *textA;\n    UINT alloc_size;\n    HLOCAL hloc;\n    STACK16FRAME* stack16;\n    HANDLE16 oldDS;\n    HLOCAL16 hloc16 = GetWindowWord16( HWND_16(hwnd), GWW_HANDLE16 );\n\n    if (hloc16) \n    {\n        edit_unlock_buffer(hwnd);\n        return hloc16;\n    }\n\n    if (!(hloc = (HLOCAL)wow_handlers32.edit_proc( hwnd, EM_GETHANDLE, 0, 0, FALSE ))) return 0;\n    alloc_size = LocalSize( hloc );\n\n    stack16 = MapSL(PtrToUlong(getWOW32Reserved()));\n    oldDS = stack16->ds;\n    stack16->ds = GetWindowWord16( HWND_16(hwnd), GWLP_HINSTANCE );\n\n    if (!LocalHeapSize16())\n    {\n        if (!LocalInit16(stack16->ds, 0, GlobalSize16(stack16->ds)))\n        {\n            ERR(\"could not initialize local heap\\n\");\n            goto done;\n        }\n    }\n\n    if (!(hloc16 = LocalAlloc16(LMEM_MOVEABLE | LMEM_ZEROINIT, alloc_size)))\n    {\n        ERR(\"could not allocate new 16 bit buffer\\n\");\n        goto done;\n    }\n\n    if (!(textA = MapSL(LocalLock16( hloc16))))\n    {\n        ERR(\"could not lock new 16 bit buffer\\n\");\n        LocalFree16(hloc16);\n        hloc16 = 0;\n        goto done;\n    }\n    memcpy( textA, LocalLock( hloc ), alloc_size );\n    LocalUnlock( hloc );\n    LocalUnlock16( hloc16 );\n    SetWindowWord16( HWND_16(hwnd), GWW_HANDLE16, hloc16 );\n\ndone:\n    stack16->ds = oldDS;\n    return hloc16;\n}\n\nstatic void edit_set_handle( HWND hwnd, HLOCAL16 hloc16 )\n{\n    STACK16FRAME* stack16 = MapSL(PtrToUlong(getWOW32Reserved()));\n    HINSTANCE16 hInstance = GetWindowWord16(HWND_16(hwnd), GWLP_HINSTANCE );\n    HANDLE16 oldDS = stack16->ds;\n    HLOCAL hloc32;\n    INT count;\n    CHAR *text;\n\n    if (!(GetWindowLongW( hwnd, GWL_STYLE ) & ES_MULTILINE)) return;\n    if (!hloc16) return;\n\n    stack16->ds = hInstance;\n    count = LocalSize16(hloc16);\n    text = MapSL(LocalLock16(hloc16));\n    if ((hloc32 = LocalAlloc(LMEM_MOVEABLE, count)))\n    {\n        memcpy( LocalLock(hloc32), text, count );\n        LocalUnlock(hloc32);\n        LocalUnlock16(hloc16);\n        SetWindowWord16( HWND_16(hwnd), GWW_HANDLE16, hloc16 );\n    }\n    stack16->ds = oldDS;\n\n    if (hloc32) wow_handlers32.edit_proc( hwnd, EM_SETHANDLE, (WPARAM)hloc32, 0, FALSE );\n}\n\nstatic void edit_destroy_handle( HWND hwnd )\n{\n    HLOCAL16 hloc16 = GetWindowWord16( HWND_16(hwnd), GWW_HANDLE16 );\n    if (hloc16)\n    {\n        STACK16FRAME* stack16 = MapSL(PtrToUlong(getWOW32Reserved()));\n        HANDLE16 oldDS = stack16->ds;\n\n        stack16->ds = GetWindowWord16( HWND_16(hwnd), GWLP_HINSTANCE );\n        while (LocalUnlock16(hloc16)) ;\n        LocalFree16(hloc16);\n        stack16->ds = oldDS;\n        SetWindowWord16( HWND_16(hwnd), GWW_HANDLE16, 0 );\n    }\n}\n\nstatic LRESULT edit_proc_CallProc16To32A(winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode\n, LRESULT *result, void *arg, BOOL *f)\n{\n    static const UINT msg16_offset = EM_GETSEL16 - EM_GETSEL;\n    *f = TRUE;\n\n    //edit_lock_buffer( hwnd );\n    switch (msg)\n    {\n    case EM_SCROLL16:\n    case EM_SCROLLCARET16:\n    case EM_GETMODIFY16:\n    case EM_SETMODIFY16:\n    case EM_GETLINECOUNT16:\n    case EM_GETTHUMB16:\n    case EM_LINELENGTH16:\n    case EM_LIMITTEXT16:\n    case EM_CANUNDO16:\n    case EM_UNDO16:\n    case EM_FMTLINES16:\n    case EM_LINEFROMCHAR16:\n    case EM_SETPASSWORDCHAR16:\n    case EM_EMPTYUNDOBUFFER16:\n    case EM_SETREADONLY16:\n    case EM_GETPASSWORDCHAR16:\n        /* these messages missing from specs */\n    case WM_USER + 15:\n    case WM_USER + 16:\n    case WM_USER + 19:\n    case WM_USER + 26:\n        return callback(hwnd, msg - msg16_offset, wParam, lParam, result, arg);\n    case EM_GETSEL16:\n        return callback(hwnd, msg - msg16_offset, 0, 0, result, arg);\n    case EM_REPLACESEL16:\n    case EM_GETLINE16:\n        return callback(hwnd, msg - msg16_offset, wParam, (LPARAM)MapSL(lParam), result, arg);\n    case EM_LINESCROLL16:\n        return callback(hwnd, msg - msg16_offset, (INT)(SHORT)HIWORD(lParam), (INT)(SHORT)LOWORD(lParam), result, arg);\n        break;\n    case EM_LINEINDEX16:\n        if ((INT16)wParam == -1) wParam = -1;\n        return callback(hwnd, msg - msg16_offset, wParam, lParam, result, arg);\n    case EM_SETSEL16:\n        if ((short)LOWORD(lParam) == -1)\n        {\n            wParam = -1;\n            lParam = 0;\n        }\n        else\n        {\n            wParam = LOWORD(lParam);\n            lParam = HIWORD(lParam);\n        }\n        return callback(hwnd, msg - msg16_offset, wParam, lParam, result, arg);\n    case EM_GETRECT16:\n        if (lParam)\n        {\n            RECT rect;\n            RECT16 *r16 = MapSL(lParam);\n            if (SELECTOROF(r16) == 0x0000)\n            {\n                ERR(\"EM_GETRECT16:Invalid pointer(%02X:%02X)\\n\", SELECTOROF(lParam), OFFSETOF(lParam));\n                return 0;\n            }\n            LRESULT a = callback(hwnd, msg - msg16_offset, wParam, (LPARAM)&rect, result, arg);\n            r16->left = rect.left;\n            r16->top = rect.top;\n            r16->right = rect.right;\n            r16->bottom = rect.bottom;\n            return a;\n        }\n        break;\n    case EM_SETRECT16:\n    case EM_SETRECTNP16:\n        if (lParam)\n        {\n            RECT rect;\n            RECT16 *r16 = MapSL(lParam);\n            rect.left = r16->left;\n            rect.top = r16->top;\n            rect.right = r16->right;\n            rect.bottom = r16->bottom;\n            return callback(hwnd, msg - msg16_offset, wParam, (LPARAM)&rect, result, arg);\n        }\n        break;\n    case EM_SETHANDLE16:\n        edit_set_handle(hwnd, (HLOCAL16)wParam);\n        *result = FALSE;\n        return *result;\n    case EM_GETHANDLE16:\n        *result = edit_get_handle(hwnd);\n        return *result;\n    case EM_SETTABSTOPS16:\n    {\n        INT16 *tabs16 = MapSL(lParam);\n        INT i, count = wParam, *tabs = NULL;\n        if (count > 0)\n        {\n            if (!(tabs = HeapAlloc(GetProcessHeap(), 0, count * sizeof(*tabs)))) return 0;\n            for (i = 0; i < count; i++) tabs[i] = tabs16[i];\n        }\n        LRESULT r = callback(hwnd, msg - msg16_offset, wParam, (LPARAM)tabs, result, arg);\n        HeapFree(GetProcessHeap(), 0, tabs);\n        return r;\n    }\n    case EM_GETFIRSTVISIBLELINE16:\n        if (!(GetWindowLongW(hwnd, GWL_STYLE) & ES_MULTILINE)) break;\n        return callback(hwnd, msg - msg16_offset, wParam, lParam, result, arg);\n    case EM_SETWORDBREAKPROC16:\n    {\n        struct word_break_thunk *thunk = add_word_break_thunk((EDITWORDBREAKPROC16)lParam);\n        return callback(hwnd, EM_SETWORDBREAKPROC, wParam, (LPARAM)thunk, result, arg);\n    }\n    case EM_GETWORDBREAKPROC16:\n        callback(hwnd, msg, wParam, lParam, result, arg);\n        *result = (LRESULT)get_word_break_thunk((EDITWORDBREAKPROCA)*result);\n        return *result;\n    case WM_NCDESTROY:\n        edit_destroy_handle(hwnd);\n        return callback(hwnd, msg, wParam, lParam, result, arg);/* no unlock on destroy */\n    case WM_HSCROLL:\n    case WM_VSCROLL:\n        if (LOWORD(wParam) == SB_THUMBTRACK || LOWORD(wParam) == SB_THUMBPOSITION)\n            return callback(hwnd, msg, MAKELONG(LOWORD(wParam), LOWORD(lParam)), NULL, result, arg);\n        if (LOWORD(wParam) == EM_GETTHUMB16 || LOWORD(wParam) == EM_LINESCROLL16) wParam -= msg16_offset;\n        return callback(hwnd, msg, wParam, lParam, result, arg);\n    }\n    //edit_unlock_buffer( hwnd );\n    *f = FALSE;\n    return *result;\n}\n\n\n/*********************************************************************\n *\tedit_proc16\n */\nstatic LRESULT edit_proc16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode )\n{\n    static const UINT msg16_offset = EM_GETSEL16 - EM_GETSEL;\n    LRESULT result = 0;\n\n    //edit_lock_buffer( hwnd );\n    switch (msg)\n    {\n    case EM_SCROLL16:\n    case EM_SCROLLCARET16:\n    case EM_GETMODIFY16:\n    case EM_SETMODIFY16:\n    case EM_GETLINECOUNT16:\n    case EM_GETTHUMB16:\n    case EM_LINELENGTH16:\n    case EM_LIMITTEXT16:\n    case EM_CANUNDO16:\n    case EM_UNDO16:\n    case EM_FMTLINES16:\n    case EM_LINEFROMCHAR16:\n    case EM_SETPASSWORDCHAR16:\n    case EM_EMPTYUNDOBUFFER16:\n    case EM_SETREADONLY16:\n    case EM_GETPASSWORDCHAR16:\n\t/* these messages missing from specs */\n    case WM_USER+15:\n    case WM_USER+16:\n    case WM_USER+19:\n    case WM_USER+26:\n        result = wow_handlers32.edit_proc( hwnd, msg - msg16_offset, wParam, lParam, FALSE );\n        break;\n    case EM_GETSEL16:\n        result = wow_handlers32.edit_proc( hwnd, msg - msg16_offset, 0, 0, FALSE );\n        break;\n    case EM_REPLACESEL16:\n    case EM_GETLINE16:\n        result = wow_handlers32.edit_proc( hwnd, msg - msg16_offset, wParam, (LPARAM)MapSL(lParam), FALSE );\n        break;\n    case EM_LINESCROLL16:\n        result = wow_handlers32.edit_proc( hwnd, msg - msg16_offset, (INT)(SHORT)HIWORD(lParam),\n                                           (INT)(SHORT)LOWORD(lParam), FALSE );\n        break;\n    case EM_LINEINDEX16:\n        if ((INT16)wParam == -1) wParam = -1;\n        result = wow_handlers32.edit_proc( hwnd, msg - msg16_offset, wParam, lParam, FALSE );\n        break;\n    case EM_SETSEL16:\n        if ((short)LOWORD(lParam) == -1)\n        {\n            wParam = -1;\n            lParam = 0;\n        }\n        else\n        {\n            wParam = LOWORD(lParam);\n            lParam = HIWORD(lParam);\n        }\n        result = wow_handlers32.edit_proc( hwnd, msg - msg16_offset, wParam, lParam, FALSE );\n        break;\n    case EM_GETRECT16:\n        if (lParam)\n        {\n            RECT rect;\n            RECT16 *r16 = MapSL(lParam);\n            if (SELECTOROF(r16) == 0x0000)\n            {\n                ERR(\"EM_GETRECT16:Invalid pointer(%02X:%02X)\\n\", SELECTOROF(lParam), OFFSETOF(lParam));\n                return 0;\n            }\n            wow_handlers32.edit_proc( hwnd, msg - msg16_offset, wParam, (LPARAM)&rect, FALSE );\n            r16->left   = rect.left;\n            r16->top    = rect.top;\n            r16->right  = rect.right;\n            r16->bottom = rect.bottom;\n        }\n        break;\n    case EM_SETRECT16:\n    case EM_SETRECTNP16:\n        if (lParam)\n        {\n            RECT rect;\n            RECT16 *r16 = MapSL(lParam);\n            rect.left   = r16->left;\n            rect.top    = r16->top;\n            rect.right  = r16->right;\n            rect.bottom = r16->bottom;\n            wow_handlers32.edit_proc( hwnd, msg - msg16_offset, wParam, (LPARAM)&rect, FALSE );\n        }\n        break;\n    case EM_SETHANDLE16:\n        edit_set_handle( hwnd, (HLOCAL16)wParam );\n        break;\n    case EM_GETHANDLE16:\n        result = edit_get_handle( hwnd );\n        break;\n    case EM_SETTABSTOPS16:\n    {\n        INT16 *tabs16 = MapSL(lParam);\n        INT i, count = wParam, *tabs = NULL;\n        if (count > 0)\n        {\n            if (!(tabs = HeapAlloc( GetProcessHeap(), 0, count * sizeof(*tabs) ))) return 0;\n            for (i = 0; i < count; i++) tabs[i] = tabs16[i];\n        }\n        result = wow_handlers32.edit_proc( hwnd, msg - msg16_offset, count, (LPARAM)tabs, FALSE );\n        HeapFree( GetProcessHeap(), 0, tabs );\n        break;\n    }\n    case EM_GETFIRSTVISIBLELINE16:\n        if (!(GetWindowLongW( hwnd, GWL_STYLE ) & ES_MULTILINE)) break;\n        result = wow_handlers32.edit_proc( hwnd, msg - msg16_offset, wParam, lParam, FALSE );\n        break;\n    case EM_SETWORDBREAKPROC16:\n    {\n        struct word_break_thunk *thunk = add_word_break_thunk( (EDITWORDBREAKPROC16)lParam );\n        result = wow_handlers32.edit_proc( hwnd, EM_SETWORDBREAKPROC, wParam, (LPARAM)thunk, FALSE );\n        break;\n    }\n    case EM_GETWORDBREAKPROC16:\n        result = wow_handlers32.edit_proc( hwnd, EM_GETWORDBREAKPROC, wParam, lParam, FALSE );\n        result = (LRESULT)get_word_break_thunk( (EDITWORDBREAKPROCA)result );\n        break;\n    case WM_NCDESTROY:\n        edit_destroy_handle( hwnd );\n        return wow_handlers32.edit_proc( hwnd, msg, wParam, lParam, unicode );  /* no unlock on destroy */\n    case WM_HSCROLL:\n    case WM_VSCROLL:\n        if (LOWORD(wParam) == EM_GETTHUMB16 || LOWORD(wParam) == EM_LINESCROLL16) wParam -= msg16_offset;\n        result = wow_handlers32.edit_proc( hwnd, msg, wParam, lParam, unicode );\n        break;\n    default:\n        result = wow_handlers32.edit_proc( hwnd, msg, wParam, lParam, unicode );\n        break;\n    }\n    //edit_unlock_buffer( hwnd );\n    return result;\n}\n\n\n/***********************************************************************\n *           listbox_proc16\n */\nstatic LRESULT listbox_proc16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode )\n{\n    static const UINT msg16_offset = LB_ADDSTRING16 - LB_ADDSTRING;\n    LRESULT ret;\n\n    switch (msg)\n    {\n    case WM_SIZE:\n        if (is_old_app( hwnd ))\n        {\n            DWORD style = GetWindowLongW( hwnd, GWL_STYLE );\n            int height, remaining, item_height;\n            RECT rect;\n\n            /* give a margin for error to old 16 bits programs - if we need\n               less than the height of the nonclient area, round to the\n               *next* number of items */\n\n            if (!(style & LBS_NOINTEGRALHEIGHT) && !(style & LBS_OWNERDRAWVARIABLE))\n            {\n                GetClientRect( hwnd, &rect );\n                height = rect.bottom - rect.top;\n                item_height = wow_handlers32.listbox_proc( hwnd, LB_GETITEMHEIGHT, 0, 0, FALSE );\n                remaining = item_height ? (height % item_height) : 0;\n                if ((height > item_height) && remaining)\n                {\n                    GetWindowRect( hwnd, &rect );\n                    if ((item_height - remaining) <= rect.bottom - rect.top - height)\n                        remaining = remaining - item_height;\n                    TRACE( \"[%p]: changing height %d -> %d\\n\", hwnd, height, height - remaining );\n                    SetWindowPos( hwnd, 0, 0, 0, rect.right - rect.left,\n                                  rect.bottom - rect.top - remaining,\n                                  SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOMOVE );\n                    return 0;\n                }\n            }\n        }\n        return wow_handlers32.listbox_proc( hwnd, msg, wParam, lParam, unicode );\n\n    case LB_RESETCONTENT16:\n    case LB_DELETESTRING16:\n    case LB_GETITEMDATA16:\n    case LB_SETITEMDATA16:\n    case LB_GETCOUNT16:\n    case LB_GETTEXTLEN16:\n    case LB_GETCURSEL16:\n    case LB_GETTOPINDEX16:\n    case LB_GETITEMHEIGHT16:\n    case LB_SETCARETINDEX16:\n    case LB_GETCARETINDEX16:\n    case LB_SETTOPINDEX16:\n    case LB_SETCOLUMNWIDTH16:\n    case LB_GETSELCOUNT16:\n    case LB_SELITEMRANGE16:\n    case LB_SELITEMRANGEEX16:\n    case LB_GETHORIZONTALEXTENT16:\n    case LB_SETHORIZONTALEXTENT16:\n    case LB_GETANCHORINDEX16:\n    case LB_CARETON16:\n    case LB_CARETOFF16:\n        msg -= msg16_offset;\n        break;\n    case LB_GETSEL16:\n    case LB_SETSEL16:\n    case LB_SETCURSEL16:\n    case LB_SETANCHORINDEX16:\n        wParam = (INT)(INT16)wParam;\n        msg -= msg16_offset;\n        break;\n    case LB_INSERTSTRING16:\n    case LB_FINDSTRING16:\n    case LB_FINDSTRINGEXACT16:\n    case LB_SELECTSTRING16:\n        wParam = (INT)(INT16)wParam;\n        /* fall through */\n    case LB_ADDSTRING16:\n    case LB_ADDFILE16:\n    {\n        DWORD style = GetWindowLongW( hwnd, GWL_STYLE );\n        if ((style & LBS_HASSTRINGS) || !(style & (LBS_OWNERDRAWFIXED | LBS_OWNERDRAWVARIABLE)))\n            lParam = (LPARAM)MapSL(lParam);\n        msg -= msg16_offset;\n        break;\n    }\n    case LB_GETTEXT16:\n        lParam = (LPARAM)MapSL(lParam);\n        msg -= msg16_offset;\n        break;\n    case LB_SETITEMHEIGHT16:\n        lParam = LOWORD(lParam);\n        msg -= msg16_offset;\n        break;\n    case LB_GETITEMRECT16:\n        {\n            RECT rect;\n            RECT16 *r16 = MapSL(lParam);\n            ret = wow_handlers32.listbox_proc( hwnd, LB_GETITEMRECT, (INT16)wParam, (LPARAM)&rect, FALSE );\n            r16->left   = rect.left;\n            r16->top    = rect.top;\n            r16->right  = rect.right;\n            r16->bottom = rect.bottom;\n            return ret;\n        }\n    case LB_GETSELITEMS16:\n    {\n        INT16 *array16 = MapSL( lParam );\n        INT i, count = (INT16)wParam, *array;\n        if (!(array = HeapAlloc( GetProcessHeap(), 0, wParam * sizeof(*array) ))) return LB_ERRSPACE;\n        ret = wow_handlers32.listbox_proc( hwnd, LB_GETSELITEMS, count, (LPARAM)array, FALSE );\n        for (i = 0; i < ret; i++) array16[i] = array[i];\n        HeapFree( GetProcessHeap(), 0, array );\n        return ret;\n    }\n    case LB_DIR16:\n        /* according to Win16 docs, DDL_DRIVES should make DDL_EXCLUSIVE\n         * be set automatically (this is different in Win32) */\n        if (wParam & DDL_DRIVES) wParam |= DDL_EXCLUSIVE;\n        lParam = (LPARAM)MapSL(lParam);\n        msg -= msg16_offset;\n        break;\n    case LB_SETTABSTOPS16:\n    {\n        INT i, count, *tabs = NULL;\n        INT16 *tabs16 = MapSL( lParam );\n\n        if ((count = (INT16)wParam) > 0)\n        {\n            if (!(tabs = HeapAlloc( GetProcessHeap(), 0, wParam * sizeof(*tabs) ))) return LB_ERRSPACE;\n            for (i = 0; i < count; i++) tabs[i] = tabs16[i];\n        }\n        ret = wow_handlers32.listbox_proc( hwnd, LB_SETTABSTOPS, count, (LPARAM)tabs, FALSE );\n        HeapFree( GetProcessHeap(), 0, tabs );\n        return ret;\n    }\n    default:\n        return wow_handlers32.listbox_proc( hwnd, msg, wParam, lParam, unicode );\n    }\n    return wow_handlers32.listbox_proc( hwnd, msg, wParam, lParam, FALSE );\n}\n\n\n/***********************************************************************\n *           mdiclient_proc16\n */\nstatic LRESULT mdiclient_proc16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode )\n{\n    if (msg == WM_CREATE)\n    {\n        LPCREATESTRUCTA cs = (LPCREATESTRUCTA)lParam;\n        HINSTANCE instance = (HINSTANCE)GetWindowLongPtrW( hwnd, GWLP_HINSTANCE );\n        BOOL is_win32 = !instance || ((ULONG_PTR)instance >> 16);\n\n\t/* Translation layer doesn't know what's in the cs->lpCreateParams\n\t * so we have to keep track of what environment we're in. */\n\tif (!is_win32)\n\t{\n            void *orig = cs->lpCreateParams;\n            LRESULT ret;\n            CLIENTCREATESTRUCT ccs;\n            CLIENTCREATESTRUCT16 *ccs16 = MapSL( PtrToUlong( orig ));\n\n            ccs.hWindowMenu  = HMENU_32(ccs16->hWindowMenu);\n            ccs.idFirstChild = ccs16->idFirstChild;\n            cs->lpCreateParams = &ccs;\n            ret = wow_handlers32.mdiclient_proc( hwnd, msg, wParam, lParam, unicode );\n            cs->lpCreateParams = orig;\n            return ret;\n\t}\n    }\n    return wow_handlers32.mdiclient_proc( hwnd, msg, wParam, lParam, unicode );\n}\n\nstatic LRESULT scrollbar_proc_CallProc16To32A(winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode\n    , LRESULT *result, void *arg, BOOL *f)\n{\n    static const UINT msg16_offset = SBM_SETPOS16 - SBM_SETPOS;\n    *f = TRUE;\n    switch (msg)\n    {\n    case SBM_SETPOS16:\n    case SBM_GETPOS16:\n    case SBM_ENABLE_ARROWS16:\n        msg -= msg16_offset;\n        return callback(hwnd, msg, wParam, lParam, result, arg);\n    case SBM_SETRANGE16:\n        msg = wParam ? SBM_SETRANGEREDRAW : SBM_SETRANGE;\n        wParam = LOWORD(lParam);\n        lParam = HIWORD(lParam);\n        return callback(hwnd, msg, wParam, lParam, result, arg);\n    case SBM_GETRANGE16:\n    {\n        INT min, max;\n        callback(hwnd, SBM_GETRANGE, (WPARAM)&min, (LPARAM)&max, result, arg);\n        return *result = MAKELRESULT(min, max);\n    }\n    }\n    return *f = FALSE;\n}\n/***********************************************************************\n *           scrollbar_proc16\n */\nstatic LRESULT scrollbar_proc16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode )\n{\n    static const UINT msg16_offset = SBM_SETPOS16 - SBM_SETPOS;\n\n    switch (msg)\n    {\n    case SBM_SETPOS16:\n    case SBM_GETPOS16:\n    case SBM_ENABLE_ARROWS16:\n        msg -= msg16_offset;\n        break;\n    case SBM_SETRANGE16:\n        msg = wParam ? SBM_SETRANGEREDRAW : SBM_SETRANGE;\n        wParam = LOWORD(lParam);\n        lParam = HIWORD(lParam);\n        break;\n    case SBM_GETRANGE16:\n    {\n        INT min, max;\n        wow_handlers32.scrollbar_proc( hwnd, SBM_GETRANGE, (WPARAM)&min, (LPARAM)&max, FALSE );\n        return MAKELRESULT(min, max);\n    }\n    default:\n        return wow_handlers32.scrollbar_proc( hwnd, msg, wParam, lParam, unicode );\n    }\n    return wow_handlers32.scrollbar_proc( hwnd, msg, wParam, lParam, FALSE );\n}\n\nstatic LRESULT static_proc_CallProc16To32A(winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode\n    , LRESULT *result, void *arg, BOOL *f)\n{\n    LRESULT ret;\n    switch (msg)\n    {\n    case STM_SETICON16:\n        wParam = (WPARAM)get_icon_32((HICON16)wParam);\n        *f = TRUE;\n        ret = callback(hwnd, STM_SETICON, wParam, lParam, result, arg);\n        return ret;\n    case STM_GETICON16:\n        ret = callback(hwnd, STM_GETICON, wParam, lParam, result, arg);\n        *result = get_icon_16((HICON)*result);\n        *f = TRUE;\n        return ret;\n    default:\n        break;\n    }\n    return *f = FALSE;\n}\n/***********************************************************************\n *           static_proc16\n */\nstatic LRESULT static_proc16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode )\n{\n    switch (msg)\n    {\n    case WM_CREATE://WM_NCCREATE:\n    {\n        CREATESTRUCTA *cs = (CREATESTRUCTA *)lParam;\n        if (((ULONG_PTR)cs->hInstance >> 16)) break;  /* 32-bit instance, nothing to do */\n        switch (cs->style & SS_TYPEMASK)\n        {\n        case SS_ICON:\n            {\n                LRESULT ret = wow_handlers32.static_proc(hwnd, msg, wParam, lParam, unicode);\n                SetWindowTextA(hwnd, \"\");\n                HICON16 icon = LoadIcon16( HINSTANCE_16(cs->hInstance), cs->lpszName );\n                if (!icon) icon = LoadCursor16( HINSTANCE_16(cs->hInstance), cs->lpszName );\n                if (icon) wow_handlers32.static_proc( hwnd, STM_SETIMAGE, IMAGE_ICON,\n                                                      (LPARAM)get_icon_32(icon), FALSE );\n                return ret;\n            }\n        case SS_BITMAP:\n            {\n                LRESULT ret = wow_handlers32.static_proc(hwnd, msg, wParam, lParam, unicode);\n                SetWindowTextA(hwnd, \"\");\n                HBITMAP16 bitmap = LoadBitmap16( HINSTANCE_16(cs->hInstance), cs->lpszName );\n                if (bitmap) wow_handlers32.static_proc( hwnd, STM_SETIMAGE, IMAGE_BITMAP,\n                                                        (LPARAM)HBITMAP_32(bitmap), FALSE );\n                return ret;\n            }\n        }\n        break;\n    }\n    case STM_SETICON16:\n        wParam = (WPARAM)get_icon_32( (HICON16)wParam );\n        return wow_handlers32.static_proc( hwnd, STM_SETICON, wParam, lParam, FALSE );\n    case STM_GETICON16:\n        return get_icon_16( (HICON)wow_handlers32.static_proc( hwnd, STM_GETICON, wParam, lParam, FALSE ));\n    default:\n        break;\n    }\n    return wow_handlers32.static_proc(hwnd, msg, wParam, lParam, unicode);\n}\nLRESULT CALLBACK static_wndproc16(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)\n{\n    return static_proc16(hwnd, msg, wParam, lParam, FALSE);\n}\nLRESULT CALLBACK listbox_wndproc16(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)\n{\n    return listbox_proc16(hwnd, msg, wParam, lParam, FALSE);\n}\nLRESULT CALLBACK button_wndproc16(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)\n{\n    return button_proc16(hwnd, msg, wParam, lParam, FALSE);\n}\nLRESULT CALLBACK edit_wndproc16(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)\n{\n    return edit_proc16(hwnd, msg, wParam, lParam, FALSE);\n}\n\nBOOL aero_diasble;\nenum SEPARATE_TASKBAR {\n    SEPARATE_TASKBAR_DONT_SEPARATE = 0,\n    SEPARATE_TASKBAR_SEPARATE_FOR_EACH_WOW = 1,\n    SEPARATE_TASKBAR_SEPARATE = 2,\n};\nenum SEPARATE_TASKBAR separate_taskbar;\n\n/* set taskbar id */\n#include <shlobj.h>\n#include <propkey.h>\n#include <propvarutil.h>\nvoid set_app_id(HWND hWnd, LPCWSTR name)\n{\n    DWORD count;\n    IPropertyStore *propstore;\n    HRESULT hr;\n    static HMODULE shell32;\n    static HRESULT (STDAPICALLTYPE*pSHGetPropertyStoreForWindow)(HWND hwnd, REFIID riid, void** ppv);\n    if (!shell32)\n    {\n        shell32 = GetModuleHandleA(\"shell32\");\n        pSHGetPropertyStoreForWindow = (HRESULT (STDAPICALLTYPE*)(HWND hwnd, REFIID riid, void** ppv))GetProcAddress(shell32, \"SHGetPropertyStoreForWindow\");\n    }\n    if (!pSHGetPropertyStoreForWindow)\n        return;\n    ReleaseThunkLock(&count);\n    hr = pSHGetPropertyStoreForWindow(hWnd, &IID_IPropertyStore, &propstore);\n    if (SUCCEEDED(hr))\n    {\n        PROPVARIANT pv;\n        SIZE_T len = (wcslen(name) + 1) * sizeof(*name);\n        LPWSTR id2 = CoTaskMemAlloc(len);\n        if (id2)\n        {\n            memcpy(id2, name, len);\n            V_UNION(&pv, pwszVal) = id2;\n            V_VT(&pv) = VT_LPWSTR;\n            hr = propstore->lpVtbl->SetValue(propstore, &PKEY_AppUserModel_ID, &pv);\n            PropVariantClear(&pv);\n        }\n        propstore->lpVtbl->Release(propstore);\n    }\n    RestoreThunkLock(count);\n}\nvoid set_window_app_id(HWND hwnd)\n{\n    /* OTVDM.{PID}.{module path} */\n    WCHAR buffer[1024];\n    CHAR a[MAX_PATH];\n    INT16 len = GetModuleFileName16(GetCurrentTask(), a, MAX_PATH);\n    /* tiny canonicalize */\n    for (int i = 0; i < len; i++)\n    {\n        a[i] = (char)toupper(a[i]);\n    }\n    if (separate_taskbar == SEPARATE_TASKBAR_SEPARATE_FOR_EACH_WOW)\n    {\n        wsprintfW(buffer, L\"OTVDM.%d.%S\", GetCurrentProcessId(), a);\n    }\n    else\n    {\n        wsprintfW(buffer, L\"OTVDM.%S\", a);\n    }\n    set_app_id(hwnd, buffer);\n}\nvoid detect_window_type(HWND16 hwnd, HWND hwnd32)\n{\n    char name[100];\n    RealGetWindowClassA(hwnd32, name, 100);\n    /* detect window type */\n    if (isListBox(hwnd, hwnd32) || !stricmp(name, \"LISTBOX\") || !stricmp(name, \"COMBOLBOX\"))\n    {\n        window_type_table[hwnd] = (BYTE)WINDOW_TYPE_LISTBOX;\n    }\n    if (isComboBox(hwnd, hwnd32) || !stricmp(name, \"COMBOBOX\"))\n    {\n        window_type_table[hwnd] = (BYTE)WINDOW_TYPE_COMBOBOX;\n    }\n    if (isButton(hwnd, hwnd32) || !stricmp(name, \"BUTTON\"))\n    {\n        window_type_table[hwnd] = (BYTE)WINDOW_TYPE_BUTTON;\n    }\n    if (isEdit(hwnd, hwnd32) || !stricmp(name, \"EDIT\"))\n    {\n        window_type_table[hwnd] = (BYTE)WINDOW_TYPE_EDIT;\n    }\n    if (isScrollBar(hwnd, hwnd32) || !stricmp(name, \"SCROLLBAR\"))\n    {\n        window_type_table[hwnd] = (BYTE)WINDOW_TYPE_SCROLLBAR;\n    }\n    if (isStatic(hwnd, hwnd32) || !stricmp(name, \"STATIC\"))\n    {\n        window_type_table[hwnd] = (BYTE)WINDOW_TYPE_STATIC;\n    }\n    if (is_mdiclient(hwnd, hwnd32) || !stricmp(name, \"MDICLIENT\"))\n    {\n        window_type_table[hwnd] = (BYTE)WINDOW_TYPE_MDICLIENT;\n    }\n}\nDWORD hhook_tls_index;\ntypedef struct\n{\n    HHOOK wndproc;\n    HHOOK wndprocret;\n    HHOOK cbt;\n} user_hook_data;\n\nstatic void UB_Message(HWND hwnd, HDC hDC, UINT action)\n{\n    RECT rc;\n    HBRUSH hBrush;\n    HFONT hFont;\n    HWND parent;\n\n    GetClientRect(hwnd, &rc);\n\n    if ((hFont = SendMessageW(hwnd, WM_GETFONT, 0, 0))) SelectObject(hDC, hFont);\n\n    parent = GetParent(hwnd);\n    if (!parent) parent = hwnd;\n    hBrush = (HBRUSH)SendMessageW(parent, WM_CTLCOLORBTN, (WPARAM)hDC, (LPARAM)hwnd);\n    if (!hBrush) /* did the app forget to call defwindowproc ? */\n        hBrush = (HBRUSH)DefWindowProcW(parent, WM_CTLCOLORBTN, (WPARAM)hDC, (LPARAM)hwnd);\n\n    FillRect(hDC, &rc, hBrush);\n    if (action == BN_SETFOCUS)\n        DrawFocusRect(hDC, &rc);\n\n    SendMessageW(parent, WM_COMMAND, MAKEWPARAM(GetWindowLongW(hwnd, GWLP_ID), action), hwnd);\n}\n\nstatic LRESULT UB_DefWndProc(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam)\n{\n    LRESULT ret = 0;\n    WNDPROC origwndproc = (WNDPROC)GetPropA(hwnd, \"origwndproc\");\n    if (origwndproc)\n        ret = origwndproc(hwnd, umsg, wparam, lparam);\n    else\n        ret = DefWindowProcW(hwnd, umsg, wparam, lparam);\n    return ret;\n}\n\nstatic LRESULT UB_WndProc(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam)\n{\n    LRESULT ret = 0;\n    switch (umsg)\n    { \n        case WM_PAINT:\n        {\n            PAINTSTRUCT paint;\n            LONG style = GetWindowLongW(hwnd, GWL_STYLE);\n            LONG state = SendMessageW(hwnd, BM_GETSTATE, 0, 0);\n            HDC hDC = BeginPaint(hwnd, &paint);\n            UB_Message(hwnd, hDC, BN_PAINT);\n            if (state & BST_PUSHED)\n                UB_Message(hwnd, hDC, BN_PUSHED);\n            if (style & WS_DISABLED)\n                UB_Message(hwnd, hDC, BN_DISABLE);\n            EndPaint(hwnd, &paint);\n            break;\n        }\n/*        case WM_SETFOCUS:\n        {\n            HDC hdc = GetDC(hwnd);\n            UB_Message(hwnd, hdc, BN_SETFOCUS);\n            ReleaseDC(hwnd, hdc);\n            break;\n        }\n        case WM_KILLFOCUS:\n        {\n            HDC hdc = GetDC(hwnd);\n            UB_Message(hwnd, hdc, BN_KILLFOCUS);\n            ReleaseDC(hwnd, hdc);\n            break;\n        }*/\n        case BM_SETSTATE:\n        {\n            HDC hdc = GetDC(hwnd);\n            ret = UB_DefWndProc(hwnd, BM_SETSTATE, wparam, lparam);\n            UB_Message(hwnd, hdc, wparam ? BN_PUSHED : BN_UNPUSHED);\n            break;\n        }\n        case WM_LBUTTONDBLCLK:\n            SendMessageW(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(GetWindowLongW(hwnd, GWLP_ID), BN_DOUBLECLICKED), hwnd);\n            break;\n        default:\n            ret = UB_DefWndProc(hwnd, umsg, wparam, lparam);\n            break;\n    }\n    return ret;\n}\n\nLRESULT CALLBACK CBTHook(int nCode, WPARAM wParam, LPARAM lParam)\n{\n    user_hook_data *hd = (user_hook_data*)TlsGetValue(hhook_tls_index);\n    HHOOK hook = hd ? hd->cbt : NULL;\n    if (nCode < 0)\n    {\n        return CallNextHookEx(hook, nCode, wParam, lParam);\n    }\n    if (nCode == HCBT_CREATEWND)\n    {\n        HWND hWnd = (HWND)wParam;\n        LPCBT_CREATEWNDA create = (LPCBT_CREATEWNDA)lParam;\n        if (aero_diasble)\n        {\n            SetThemeAppProperties(0);\n            SetWindowTheme(hWnd, L\"\", L\"\");\n        }\n        // olesvr doesn't like window properties not set by itself on its windows\n        if (separate_taskbar && GetModuleHandle(\"olesvr32\") && (create->lpcs->hInstance != GetModuleHandle(\"olesvr32\")))\n        {\n            set_window_app_id(hWnd);\n        }\n        detect_window_type(HWND_16(hWnd), hWnd);\n\n        if (create->lpcs->lpszName && !strcmp(create->lpcs->lpszName, \"Default IME\"))\n        {\n            SetWindowLongA(hWnd, GWL_HINSTANCE, 0);\n        }\n        if ((window_type_table[HWND_16(hWnd)] == (BYTE)WINDOW_TYPE_BUTTON) && ((create->lpcs->style & BS_TYPEMASK) == BS_USERBUTTON))\n        {\n            WNDPROC origwndproc = SetWindowLongW(hWnd, GWL_WNDPROC, UB_WndProc);\n            SetPropA(hWnd, \"origwndproc\", (HANDLE)origwndproc);\n        }\n        // 24H2 will make integral height listboxes the wrong size\n        // TODO: correct the height\n        if ((get_windows_build() >= 26100) && (window_type_table[HWND_16(hWnd)] == (BYTE)WINDOW_TYPE_LISTBOX) && (create->lpcs->style & LBS_OWNERDRAWFIXED))\n        {\n            create->lpcs->style |= LBS_NOINTEGRALHEIGHT;\n            SetWindowLongA(hWnd, GWL_STYLE, create->lpcs->style);\n        }\n\t\n    }\n    else if((nCode == HCBT_MINMAX) && (lParam == SW_MAXIMIZE) && (GetWindowLongA(wParam, GWL_STYLE) & WS_MAXIMIZE))\n        SetPropA(wParam, \"WindowMaximized\", 1);\n    return FALSE;\n}\nLRESULT CALLBACK WndProcRetHook(int code, WPARAM wParam, LPARAM lParam)\n{\n    user_hook_data *hd = (user_hook_data*)TlsGetValue(hhook_tls_index);\n    HHOOK hook = hd ? hd->wndprocret : NULL;\n    if (code < 0)\n        return CallNextHookEx(hook, code, wParam, lParam);\n    if (code == HC_ACTION)\n    {\n        CWPRETSTRUCT *pcwp = (CWPRETSTRUCT *)lParam;\n        HWND hwnd = pcwp->hwnd;\n        if (!IsWindow(hwnd))\n        {\n            return CallNextHookEx(hook, code, wParam, lParam);\n        }\n        HWND16 hwnd16 = HWND_16(hwnd);\n        detect_window_type(hwnd16, hwnd);\n        if (window_type_table[hwnd16] == WINDOW_TYPE_STATIC)\n        {\n            if (pcwp->message == WM_CREATE)\n            {\n                do\n                {\n                    LPARAM lParam = pcwp->lParam;\n                    WPARAM wParam = pcwp->wParam;\n                    UINT msg = pcwp->message;\n                    HWND hwnd = pcwp->hwnd;\n                    CREATESTRUCTA *cs = (CREATESTRUCTA *)lParam;\n                    if (!cs)\n                        break;\n                    if (((ULONG_PTR)cs->hInstance >> 16)) break;  /* 32-bit instance, nothing to do */\n                    switch (cs->style & SS_TYPEMASK)\n                    {\n                    case SS_ICON:\n                    {\n                        SetWindowTextA(hwnd, \"\");\n                        HICON16 icon = LoadIcon16(HINSTANCE_16(cs->hInstance), cs->lpszName);\n                        if (!icon) icon = LoadCursor16(HINSTANCE_16(cs->hInstance), cs->lpszName);\n                        if (icon) wow_handlers32.static_proc(hwnd, STM_SETIMAGE, IMAGE_ICON,\n                            (LPARAM)get_icon_32(icon), FALSE);\n                        break;\n                    }\n                    case SS_BITMAP:\n                    {\n                        SetWindowTextA(hwnd, \"\");\n                        HBITMAP16 bitmap = LoadBitmap16(HINSTANCE_16(cs->hInstance), cs->lpszName);\n                        if (bitmap) wow_handlers32.static_proc(hwnd, STM_SETIMAGE, IMAGE_BITMAP,\n                            (LPARAM)HBITMAP_32(bitmap), FALSE);\n                        break;\n                    }\n                    }\n                } while (0);\n            }\n        }\n        if ((pcwp->message == WM_CREATE) && IsOldWindowsTask(GetCurrentTask()) && !(get_aflags(GetExePtr(GetCurrentTask())) & NE_AFLAGS_WIN2_PROTMODE))\n        {\n            char class[6];\n            if (GetClassNameA(pcwp->hwnd, class, ARRAY_SIZE(class)) && !strcmp(class, \"Edit\") && !SendMessageA(pcwp->hwnd, WM_GETFONT, 0, 0))\n                SendMessageA(pcwp->hwnd, WM_SETFONT, GetStockObject(SYSTEM_FIXED_FONT), FALSE);\n        }\n    }\n\n    return CallNextHookEx(hook, code, wParam, lParam);\n}\nLRESULT CALLBACK WndProcHook(int code, WPARAM wParam, LPARAM lParam)\n{\n    user_hook_data *hd = (user_hook_data*)TlsGetValue(hhook_tls_index);\n    HHOOK hook = hd ? hd->wndproc : NULL;\n    if (code < 0)\n        return CallNextHookEx(hook, code, wParam, lParam);\n    if (code == HC_ACTION) {\n        if (wParam == 0) {\n            CWPSTRUCT *pcwp = (CWPSTRUCT *)lParam;\n            //I don't know.\n            if (pcwp->message == WM_SHOWWINDOW)\n            {\n                //see 42353ecbadd096358f250a9dd931d4cf0981b417 reactos win32ss/user/ntuser/winpos.c:2551\n                //WM_SETVISIBLE is only valid for win30 and older\n                if (GetExpWinVer16(GetExePtr(GetCurrentTask())) < 0x30a)\n                    SendMessageA(pcwp->hwnd, WM_SETVISIBLE, pcwp->wParam, 0);\n                if (aero_diasble)\n                    SetWindowTheme(pcwp->hwnd, L\"\", L\"\");\n            }\n        }\n    }\n\n    return CallNextHookEx(hook, code, wParam, lParam);\n}\nLRESULT wow_static_proc_wrapper(HWND a, UINT b, WPARAM c, LPARAM d, BOOL e)\n{\n    static WNDPROC proc = NULL;\n    if (!proc)\n    {\n        proc = get_classinfo_wndproc(\"STATIC\");\n    }\n    return CallWindowProcA(proc, a, b, c, d);\n}\nLRESULT wow_listbox_proc_wrapper(HWND a, UINT b, WPARAM c, LPARAM d, BOOL e)\n{\n    static WNDPROC proc = NULL;\n    if (!proc)\n    {\n        proc = get_classinfo_wndproc(\"LISTBOX\");\n    }\n    return CallWindowProcA(proc, a, b, c, d);\n}\nLRESULT wow_button_proc_wrapper(HWND a, UINT b, WPARAM c, LPARAM d, BOOL e)\n{\n    static WNDPROC proc = NULL;\n    if (!proc)\n    {\n        proc = get_classinfo_wndproc(\"BUTTON\");\n    }\n    return CallWindowProcA(proc, a, b, c, d);\n}\nLRESULT wow_edit_proc_wrapper(HWND a, UINT b, WPARAM c, LPARAM d, BOOL e)\n{\n    static WNDPROC proc = NULL;\n    if (!proc)\n    {\n        proc = get_classinfo_wndproc(\"EDIT\");\n    }\n    return CallWindowProcA(proc, a, b, c, d);\n}\nvoid InitNewThreadHook()\n{\n    if (TlsGetValue(hhook_tls_index))\n        return;\n    user_hook_data *hd = (user_hook_data*)HeapAlloc(GetProcessHeap(), 0, sizeof(user_hook_data));\n    TlsSetValue(hhook_tls_index, hd);\n    hd->wndproc = SetWindowsHookExA(WH_CALLWNDPROC, WndProcHook, GetModuleHandle(NULL), GetCurrentThreadId());\n    hd->wndprocret = SetWindowsHookExA(WH_CALLWNDPROCRET, WndProcRetHook, GetModuleHandle(NULL), GetCurrentThreadId());\n    hd->cbt = SetWindowsHookExA(WH_CBT, CBTHook, GetModuleHandle(NULL), GetCurrentThreadId());\n}\nvoid InitHook()\n{\n    isStatic(0, NULL);\n    isListBox(0, NULL);\n    isButton(0, NULL);\n    isEdit(0, NULL);\n    isComboBox(0, NULL);\n    isScrollBar(0, NULL);\n    is_mdiclient(0, NULL);\n    hhook_tls_index = TlsAlloc();\n    InitNewThreadHook();\n}\n\nvoid WINAPI ShellDDEInit(BOOL bInit);\n#include \"wine/winbase16.h\"\nBOOL WINAPI DllMain(\n    HINSTANCE hinstDLL,\n    DWORD fdwReason,\n    LPVOID lpvReserved\n)\n{\n\n    if (fdwReason == DLL_PROCESS_ATTACH)\n    {\n        load_user32_functions();\n        window_type_table = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 65536);\n        aero_diasble = krnl386_get_config_int(\"otvdm\", \"DisableAero\", TRUE);\n        if (!IsThemeActive())\n        {\n            aero_diasble = FALSE;\n        }\n        drag_list_message = RegisterWindowMessage(DRAGLISTMSGSTRING);\n        separate_taskbar = krnl386_get_config_int(\"otvdm\", \"SeparateTaskbar\", SEPARATE_TASKBAR_SEPARATE);\n        ShellDDEInit(TRUE);\n        dialogmsgthunk = GlobalAddAtomA(\"dialogmsgthunk\");\n    }\n    if (fdwReason == DLL_PROCESS_DETACH)\n    {\n        ShellDDEInit(FALSE);\n        GlobalDeleteAtom(dialogmsgthunk);\n    }\n    return TRUE;\n}\nBOOL16 WINAPI WaitMessage16()\n{\n    DWORD lock;\n    ReleaseThunkLock(&lock);\n    SetEvent(kernel_get_thread_data()->idle_event);\n    BOOL ret = WaitMessage();\n    RestoreThunkLock(lock);\n    return ret;\n}\n/***********************************************************************\n *           wait_message16\n */\nstatic DWORD wait_message16( DWORD count, const HANDLE *handles, DWORD timeout, DWORD mask, DWORD flags )\n{\n    DWORD lock, ret;\n\n    ReleaseThunkLock( &lock );\n    ret = wow_handlers32.wait_message( count, handles, timeout, mask, flags );\n    RestoreThunkLock( lock );\n    return ret;\n}\n\n\n/***********************************************************************\n *           create_window16\n */\nHWND create_window16( CREATESTRUCTW *cs, LPCWSTR className, HINSTANCE instance, BOOL unicode )\n{\n    /* map to module handle */\n    /*if (instance && !((ULONG_PTR)instance >> 16))\n        instance = HINSTANCE_32( GetExePtr( HINSTANCE_16(instance) ));*/\n\n    return wow_handlers32.create_window( cs, className, instance, unicode );\n}\n\n\n/***********************************************************************\n *           free_icon_param\n */\nstatic void free_icon_param( ULONG_PTR param )\n{\n    GlobalFree16( LOWORD(param) );\n}\n\ntypedef struct tagHWND16Data\n{\n\tHWND hwnd;\n\tstruct tagHWND16Data *next;\n\tstruct tagHWND16Data *prev;\n} HWND16Data;\n\nHWND get_win_handle(HWND hWnd16)\n{\n\treturn HWND_32((HWND16)hWnd16);\n}\nHWND create_window(CREATESTRUCTW* cs, LPCWSTR className, HINSTANCE instance, BOOL unicode)\n{\n    CLIENTCREATESTRUCT c32;\n    if (!strncasecmp((LPCSTR)className, \"MDICLIENT\", strlen((LPCSTR)className)))\n    {\n        CLIENTCREATESTRUCT16 *c16 = MapSL(cs->lpCreateParams);\n        c32.idFirstChild = c16->idFirstChild;\n        c32.hWindowMenu = HMENU_32(c16->hWindowMenu);\n        cs->lpCreateParams = (LPVOID)&c32;\n    }\n\tSetLastError(0);\n\tHWND hWnd = CreateWindowExA(cs->dwExStyle, (LPCSTR)className, (LPCSTR)cs->lpszName, cs->style, cs->x, cs->y, cs->cx, cs->cy, cs->hwndParent, cs->hMenu, instance, cs->lpCreateParams);\n\tif (hWnd == 0)\n\t{\n\t\tif (GetLastError() == ERROR_INVALID_MENU_HANDLE)\n\t\t{\n\t\t\tcs->hMenu = HMENU_32((HMENU16)cs->hMenu);\n\t\t\thWnd = CreateWindowExA(cs->dwExStyle, (LPCSTR)className, (LPCSTR)cs->lpszName, cs->style, cs->x, cs->y, cs->cx, cs->cy, cs->hwndParent, cs->hMenu, instance, cs->lpCreateParams);\n\t\t}\n\t}\n\treturn hWnd;\n}\n__declspec(dllimport) HICON16 K32HICON_16(HICON handle);\n__declspec(dllimport) HICON K32HICON_32(HICON16 handle);\nULONG_PTR hIconParams[65536];\n//HICON->HICON16??\nULONG_PTR get_icon_param(HICON hIcon)\n{\n\treturn hIconParams[K32HICON_16(hIcon)];\n}\nULONG_PTR set_icon_param(HICON hIcon, ULONG_PTR param)\n{\n\treturn hIconParams[K32HICON_16(hIcon)] = param;\n}\nstruct tagDIALOGINFO unknown;\nstruct tagDIALOGINFO *get_dialog_info(HWND hWnd, BOOL b)\n{\n\tERR(\"should not be called (%p,%d)\\n\", hWnd, b);\n\treturn &unknown;\n}\nINT dialog_box_loop(HWND hWnd, HWND owner)\n{\n    ERR(\"should not be called (%p,%p)\\n\");\n    return 0;\n}\n\n/* based on wine 7637e49c448dc0431f9497d0f6ed9854814e8ced:dlls/user32/winproc.c */\n\ntypedef struct tagWINDOWPROC\n{\n    WNDPROC        procA;    /* ASCII window proc */\n    WNDPROC        procW;    /* Unicode window proc */\n} WINDOWPROC;\n\n#define MAX_WINPROCS  4096\n#define MAX_WINPROC_RECURSION  64\n#define WINPROC_PROC16  ((WINDOWPROC *)1)  /* placeholder for 16-bit window procs */\n\n#if 0\nstatic LRESULT WINAPI ButtonWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );\nstatic LRESULT WINAPI ButtonWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );\nstatic LRESULT WINAPI ComboWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );\nstatic LRESULT WINAPI ComboWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );\nLRESULT WINAPI EditWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );\nstatic LRESULT WINAPI EditWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );\nstatic LRESULT WINAPI ListBoxWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );\nstatic LRESULT WINAPI ListBoxWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );\nstatic LRESULT WINAPI MDIClientWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );\nstatic LRESULT WINAPI MDIClientWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );\nstatic LRESULT WINAPI ScrollBarWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );\nstatic LRESULT WINAPI ScrollBarWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );\nstatic LRESULT WINAPI StaticWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );\nstatic LRESULT WINAPI StaticWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );\n\nstatic WINDOWPROC winproc_array[MAX_WINPROCS] =\n{\n    { ButtonWndProcA, ButtonWndProcW },        /* WINPROC_BUTTON */\n    { ComboWndProcA, ComboWndProcW },          /* WINPROC_COMBO */\n    { DefWindowProcA, DefWindowProcW },        /* WINPROC_DEFWND */\n    { DefDlgProcA, DefDlgProcW },              /* WINPROC_DIALOG */\n    { EditWndProcA, EditWndProcW },            /* WINPROC_EDIT */\n    { ListBoxWndProcA, ListBoxWndProcW },      /* WINPROC_LISTBOX */\n    { MDIClientWndProcA, MDIClientWndProcW },  /* WINPROC_MDICLIENT */\n    { ScrollBarWndProcA, ScrollBarWndProcW },  /* WINPROC_SCROLLBAR */\n    { StaticWndProcA, StaticWndProcW },        /* WINPROC_STATIC */\n    { ImeWndProcA, ImeWndProcW },              /* WINPROC_IME */\n    { NULL, DesktopWndProc },                  /* WINPROC_DESKTOP */\n    { NULL, IconTitleWndProc },                /* WINPROC_ICONTITLE */\n    { NULL, PopupMenuWndProc },                /* WINPROC_MENU */\n    { NULL, MessageWndProc },                  /* WINPROC_MESSAGE */\n};\n#else\n\n#define NB_BUILTIN_AW_WINPROCS 0\n#define NB_BUILTIN_WINPROCS 0\nstatic WINDOWPROC winproc_array[MAX_WINPROCS];\n#endif\n\nstatic UINT winproc_used = NB_BUILTIN_WINPROCS;\n\nstatic CRITICAL_SECTION winproc_cs;\nstatic CRITICAL_SECTION_DEBUG critsect_debug =\n{\n    0, 0, &winproc_cs,\n    { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },\n      0, 0, { (DWORD_PTR)(__FILE__ \": winproc_cs\") }\n};\nstatic CRITICAL_SECTION winproc_cs = { &critsect_debug, -1, 0, 0, 0, 0 };\n\n/* find an existing winproc for a given function and type */\n/* FIXME: probably should do something more clever than a linear search */\nstatic inline WINDOWPROC *find_winproc( WNDPROC func, BOOL unicode )\n{\n    unsigned int i;\n\n    for (i = 0; i < NB_BUILTIN_AW_WINPROCS; i++)\n    {\n        /* match either proc, some apps confuse A and W */\n        if (winproc_array[i].procA != func && winproc_array[i].procW != func) continue;\n        return &winproc_array[i];\n    }\n    for (i = NB_BUILTIN_AW_WINPROCS; i < winproc_used; i++)\n    {\n        if (!unicode && winproc_array[i].procA != func) continue;\n        if (unicode && winproc_array[i].procW != func) continue;\n        return &winproc_array[i];\n    }\n    return NULL;\n}\n\n/* return the window proc for a given handle, or NULL for an invalid handle,\n * or WINPROC_PROC16 for a handle to a 16-bit proc. */\nstatic inline WINDOWPROC *handle_to_proc( WNDPROC handle )\n{\n    UINT index = LOWORD(handle);\n    if ((ULONG_PTR)handle >> 16 != WINPROC_HANDLE) return NULL;\n    if (index >= MAX_WINPROCS) return WINPROC_PROC16;\n    if (index >= winproc_used) return NULL;\n    return &winproc_array[index];\n}\n\n/* create a handle for a given window proc */\nstatic inline WNDPROC proc_to_handle( WINDOWPROC *proc )\n{\n    return (WNDPROC)(ULONG_PTR)((proc - winproc_array) | (WINPROC_HANDLE << 16));\n}\n\n/* allocate and initialize a new winproc */\nstatic inline WINDOWPROC *alloc_winproc( WNDPROC func, BOOL unicode )\n{\n    WINDOWPROC *proc;\n\n    /* check if the function is already a win proc */\n    if (!func) return NULL;\n    if ((proc = handle_to_proc( func ))) return proc;\n\n    EnterCriticalSection( &winproc_cs );\n\n    /* check if we already have a winproc for that function */\n    if (!(proc = find_winproc( func, unicode )))\n    {\n        if (winproc_used < MAX_WINPROCS)\n        {\n            proc = &winproc_array[winproc_used++];\n            if (unicode) proc->procW = func;\n            else proc->procA = func;\n            TRACE( \"allocated %p for %c %p (%d/%d used)\\n\",\n                   proc_to_handle(proc), unicode ? 'W' : 'A', func,\n                   winproc_used, MAX_WINPROCS );\n        }\n        else WARN( \"too many winprocs, cannot allocate one for %p\\n\", func );\n    }\n    else TRACE( \"reusing %p for %p\\n\", proc_to_handle(proc), func );\n\n    LeaveCriticalSection( &winproc_cs );\n    return proc;\n}\n\nWNDPROC WINPROC_AllocProc( WNDPROC func, BOOL unicode )\n{\n    WINDOWPROC *proc;\n\n    if (!(proc = alloc_winproc( func, unicode ))) return func;\n    if (proc == WINPROC_PROC16) return func;\n    return proc_to_handle( proc );\n}\n\n/* end */\n\nvoid register_wow_handlers(void)\n{\n    static const struct wow_handlers16 handlers16 =\n    {\n        button_proc16,\n        combo_proc16,\n        edit_proc16,\n        listbox_proc16,\n        mdiclient_proc16,\n        scrollbar_proc16,\n        static_proc16,\n        wait_message16,\n        create_window16,\n        call_window_proc_Ato16,\n        call_dialog_proc_Ato16,\n        free_icon_param\n    };\n\n\tstruct wow_handlers32 wow_handlers322 = { 0 };\n    /* UserRegisterWowHandlers( &handlers16, &wow_handlers322 ); */\n\twow_handlers32 = wow_handlers322;\n\twow_handlers32.get_win_handle = get_win_handle;\n\twow_handlers32.create_window = create_window;\n\twow_handlers32.get_icon_param = get_icon_param;\n\twow_handlers32.set_icon_param = set_icon_param;\n    wow_handlers32.alloc_winproc = WINPROC_AllocProc;\n\twow_handlers32.get_dialog_info = get_dialog_info;\n\twow_handlers32.dialog_box_loop = dialog_box_loop;\n\n    wow_handlers32.static_proc = wow_static_proc_wrapper;\n    wow_handlers32.listbox_proc = wow_listbox_proc_wrapper;\n    wow_handlers32.button_proc = wow_button_proc_wrapper;\n    wow_handlers32.edit_proc = wow_edit_proc_wrapper;\n    InitHook();\n}\n\nBOOL is_dialog(HWND hwnd);\ndialog_data *get_dialog_data(HWND hWnd);\nvoid free_proc_thunk(void *thunk);\nLRESULT CALLBACK WindowProc16(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam)\n{\n    HWND16 hWnd16 = HWND_16(hDlg);\n    if (!GetWndProc16(hWnd16))\n    {\n        InitWndProc16(hDlg, hWnd16);\n    }\n    /* some programs don't call DlgProc */\n    if (Msg == WM_INITDIALOG && is_dialog(hDlg))\n    {\n        dialog_data *dd = get_dialog_data(hDlg);\n        if (dd)\n        {\n            if (!GetMenu(hDlg) && dd->hMenu16)\n                SetMenu(hDlg, HMENU_32(dd->hMenu16));\n            dd = get_dialog_data(hDlg);\n            if (dd && !dd->dlgProc)\n            {\n                void *thunk = (void *)GetWindowLongPtrA(hDlg, DWLP_DLGPROC);\n                SetWindowLongPtrA(hDlg, DWLP_DLGPROC, NULL);\n                HeapFree(GetProcessHeap(), 0, dd);\n                free_proc_thunk(thunk);\n                return TRUE;\n            }\n        }\n    }\n    WNDPROC16 wndproc16 = (WNDPROC16)GetWndProc16(hWnd16);\n    if (wndproc16)\n    {\n        int index = winproc_to_index(wndproc16);\n        MSG msg = { 0 };\n        CLIENTCREATESTRUCT c32;\n        msg.hwnd = hDlg;\n        msg.message = Msg;\n        msg.wParam = wParam;\n        msg.lParam = lParam;\n        LRESULT result;\n\n        if (index != -1 && index < MAX_WINPROCS32 && thunk_array && thunk_array[index].proc)\n        {\n            WNDPROC wndproc32 = thunk_array[index].proc;\n            if ((Msg == WM_CREATE) && is_mdiclient(hWnd16, hDlg))\n            {\n                CLIENTCREATESTRUCT16 *c16 = MapSL(*(DWORD *)lParam);\n                c32.idFirstChild = c16->idFirstChild;\n                c32.hWindowMenu = HMENU_32(c16->hWindowMenu);\n                ((CREATESTRUCTA *)lParam)->lpCreateParams = (LPVOID)&c32;\n            }\n            return CallWindowProcA(wndproc32, hDlg, Msg, wParam, lParam);\n        }\n        WINPROC_CallProc32ATo16(call_window_proc16, msg.hwnd, msg.message, msg.wParam, msg.lParam,\n            &result, wndproc16);\n        return result;\n    }\n    return DefWindowProcA(hDlg, Msg, wParam, lParam);\n}\n\nstatic LRESULT LPMSG16_32_callback(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp,\n    LRESULT *result, void *arg)\n{\n    MSG *msg32 = (MSG*)arg;\n    msg32->hwnd = hwnd;\n    msg32->message = msg;\n    msg32->lParam = lp;\n    msg32->wParam = wp;\n    return *result = 0;\n}\n\nstatic LRESULT LPMSG32_16_callback(HWND16 hwnd, UINT16 msg, WPARAM16 wp, LPARAM lp ,\n    LRESULT *result, void *arg)\n{\n    MSG16 *msg16 = (MSG16*)arg;\n    msg16->hwnd = hwnd;\n    msg16->message = msg;\n    msg16->lParam = lp;\n    msg16->wParam = wp;\n    return *result = 0;\n}\nvoid WINAPI window_message32_16(const MSG *msg32, MSG16 *msg16)\n{\n    LRESULT ret;\n    msg16->pt.x = msg32->pt.x;\n    msg16->pt.y = msg32->pt.y;\n    msg16->time = msg32->time;\n    WINPROC_CallProc32ATo16(LPMSG32_16_callback, msg16->hwnd, msg16->message, msg16->wParam, msg16->lParam, &ret, msg16);\n}\n\nvoid WINAPI window_message16_32(const MSG16 *msg16, MSG *msg32)\n{\n    LRESULT ret;\n    msg32->pt.x = msg16->pt.x;\n    msg32->pt.y = msg16->pt.y;\n    msg32->time = msg16->time;\n    WINPROC_CallProc16To32A(LPMSG16_32_callback, msg16->hwnd, msg16->message, msg16->wParam, msg16->lParam, &ret, msg32);\n}\n\nBOOL16 WINAPI QuerySendMessage16(HANDLE16 res1, HANDLE16 res2, HANDLE16 res3, MSG16 *msg)\n{\n    WARN(\"not returning message\\n\");\n    return InSendMessage();\n}\n"
  },
  {
    "path": "user/message_table.h",
    "content": "\nstatic const char *msg_table[] = {\n    [0] = \"WM_NULL\",\n    [1] = \"WM_CREATE\",\n    [2] = \"WM_DESTROY\",\n    [3] = \"WM_MOVE\",\n    [5] = \"WM_SIZE\",\n    [6] = \"WM_ACTIVATE\",\n    [7] = \"WM_SETFOCUS\",\n    [8] = \"WM_KILLFOCUS\",\n    [9] = \"WM_SETVISIBLE\",\n    [10] = \"WM_ENABLE\",\n    [11] = \"WM_SETREDRAW\",\n    [12] = \"WM_SETTEXT\",\n    [13] = \"WM_GETTEXT\",\n    [14] = \"WM_GETTEXTLENGTH\",\n    [15] = \"WM_PAINT\",\n    [16] = \"WM_CLOSE\",\n    [17] = \"WM_QUERYENDSESSION\",\n    [18] = \"WM_QUIT\",\n    [19] = \"WM_QUERYOPEN\",\n    [20] = \"WM_ERASEBKGND\",\n    [21] = \"WM_SYSCOLORCHANGE\",\n    [22] = \"WM_ENDSESSION\",\n    [24] = \"WM_SHOWWINDOW\",\n    [25] = \"WM_CTLCOLOR\",\n    [26] = \"WM_WININICHANGE\",\n    [27] = \"WM_DEVMODECHANGE\",\n    [28] = \"WM_ACTIVATEAPP\",\n    [29] = \"WM_FONTCHANGE\",\n    [30] = \"WM_TIMECHANGE\",\n    [31] = \"WM_CANCELMODE\",\n    [32] = \"WM_SETCURSOR\",\n    [33] = \"WM_MOUSEACTIVATE\",\n    [34] = \"WM_CHILDACTIVATE\",\n    [35] = \"WM_QUEUESYNC\",\n    [36] = \"WM_GETMINMAXINFO\",\n    [38] = \"WM_PAINTICON\",\n    [39] = \"WM_ICONERASEBKGND\",\n    [40] = \"WM_NEXTDLGCTL\",\n    [42] = \"WM_SPOOLERSTATUS\",\n    [43] = \"WM_DRAWITEM\",\n    [44] = \"WM_MEASUREITEM\",\n    [45] = \"WM_DELETEITEM\",\n    [46] = \"WM_VKEYTOITEM\",\n    [47] = \"WM_CHARTOITEM\",\n    [48] = \"WM_SETFONT\",\n    [49] = \"WM_GETFONT\",\n    [50] = \"WM_SETHOTKEY\",\n    [51] = \"WM_GETHOTKEY\",\n    [55] = \"WM_QUERYDRAGICON\",\n    [57] = \"WM_COMPAREITEM\",\n    [61] = \"WM_GETOBJECT\",\n    [65] = \"WM_COMPACTING\",\n    [68] = \"WM_COMMNOTIFY\",\n    [70] = \"WM_WINDOWPOSCHANGING\",\n    [71] = \"WM_WINDOWPOSCHANGED\",\n    [72] = \"WM_POWER\",\n    [73] = \"WM_COPYGLOBALDATA\",\n    [74] = \"WM_COPYDATA\",\n    [75] = \"WM_CANCELJOURNAL\",\n    [78] = \"WM_NOTIFY\",\n    [80] = \"WM_INPUTLANGCHANGEREQUEST\",\n    [81] = \"WM_INPUTLANGCHANGE\",\n    [82] = \"WM_TCARD\",\n    [83] = \"WM_HELP\",\n    [84] = \"WM_USERCHANGED\",\n    [85] = \"WM_NOTIFYFORMAT\",\n    [123] = \"WM_CONTEXTMENU\",\n    [124] = \"WM_STYLECHANGING\",\n    [125] = \"WM_STYLECHANGED\",\n    [126] = \"WM_DISPLAYCHANGE\",\n    [127] = \"WM_GETICON\",\n    [128] = \"WM_SETICON\",\n    [129] = \"WM_NCCREATE\",\n    [130] = \"WM_NCDESTROY\",\n    [131] = \"WM_NCCALCSIZE\",\n    [132] = \"WM_NCHITTEST\",\n    [133] = \"WM_NCPAINT\",\n    [134] = \"WM_NCACTIVATE\",\n    [135] = \"WM_GETDLGCODE\",\n    [136] = \"WM_SYNCPAINT\",\n    [160] = \"WM_NCMOUSEMOVE\",\n    [161] = \"WM_NCLBUTTONDOWN\",\n    [162] = \"WM_NCLBUTTONUP\",\n    [163] = \"WM_NCLBUTTONDBLCLK\",\n    [164] = \"WM_NCRBUTTONDOWN\",\n    [165] = \"WM_NCRBUTTONUP\",\n    [166] = \"WM_NCRBUTTONDBLCLK\",\n    [167] = \"WM_NCMBUTTONDOWN\",\n    [168] = \"WM_NCMBUTTONUP\",\n    [169] = \"WM_NCMBUTTONDBLCLK\",\n    [171] = \"WM_NCXBUTTONDOWN\",\n    [172] = \"WM_NCXBUTTONUP\",\n    [173] = \"WM_NCXBUTTONDBLCLK\",\n    [174] = \"WM_NCUAHDRAWCAPTION\",\n    [175] = \"WM_NCUAHDRAWFRAME\",\n    [176] = \"EM_GETSEL\",\n    [177] = \"EM_SETSEL\",\n    [178] = \"EM_GETRECT\",\n    [179] = \"EM_SETRECT\",\n    [180] = \"EM_SETRECTNP\",\n    [181] = \"EM_SCROLL\",\n    [182] = \"EM_LINESCROLL\",\n    [183] = \"EM_SCROLLCARET\",\n    [185] = \"EM_GETMODIFY\",\n    [187] = \"EM_SETMODIFY\",\n    [188] = \"EM_GETLINECOUNT\",\n    [189] = \"EM_LINEINDEX\",\n    [190] = \"EM_SETHANDLE\",\n    [191] = \"EM_GETHANDLE\",\n    [192] = \"EM_GETTHUMB\",\n    [193] = \"EM_LINELENGTH\",\n    [194] = \"EM_REPLACESEL\",\n    [195] = \"EM_SETFONT\",\n    [196] = \"EM_GETLINE\",\n    [197] = \"EM_LIMITTEXT\",\n    [197] = \"EM_SETLIMITTEXT\",\n    [198] = \"EM_CANUNDO\",\n    [199] = \"EM_UNDO\",\n    [200] = \"EM_FMTLINES\",\n    [201] = \"EM_LINEFROMCHAR\",\n    [202] = \"EM_SETWORDBREAK\",\n    [203] = \"EM_SETTABSTOPS\",\n    [204] = \"EM_SETPASSWORDCHAR\",\n    [205] = \"EM_EMPTYUNDOBUFFER\",\n    [206] = \"EM_GETFIRSTVISIBLELINE\",\n    [207] = \"EM_SETREADONLY\",\n    [209] = \"EM_SETWORDBREAKPROC\",\n    [209] = \"EM_GETWORDBREAKPROC\",\n    [210] = \"EM_GETPASSWORDCHAR\",\n    [211] = \"EM_SETMARGINS\",\n    [212] = \"EM_GETMARGINS\",\n    [213] = \"EM_GETLIMITTEXT\",\n    [214] = \"EM_POSFROMCHAR\",\n    [215] = \"EM_CHARFROMPOS\",\n    [216] = \"EM_SETIMESTATUS\",\n    [217] = \"EM_GETIMESTATUS\",\n    [224] = \"SBM_SETPOS\",\n    [225] = \"SBM_GETPOS\",\n    [226] = \"SBM_SETRANGE\",\n    [227] = \"SBM_GETRANGE\",\n    [228] = \"SBM_ENABLE_ARROWS\",\n    [230] = \"SBM_SETRANGEREDRAW\",\n    [233] = \"SBM_SETSCROLLINFO\",\n    [234] = \"SBM_GETSCROLLINFO\",\n    [235] = \"SBM_GETSCROLLBARINFO\",\n    [240] = \"BM_GETCHECK\",\n    [241] = \"BM_SETCHECK\",\n    [242] = \"BM_GETSTATE\",\n    [243] = \"BM_SETSTATE\",\n    [244] = \"BM_SETSTYLE\",\n    [245] = \"BM_CLICK\",\n    [246] = \"BM_GETIMAGE\",\n    [247] = \"BM_SETIMAGE\",\n    [248] = \"BM_SETDONTCLICK\",\n    [255] = \"WM_INPUT\",\n    [256] = \"WM_KEYDOWN\",\n    [256] = \"WM_KEYFIRST\",\n    [257] = \"WM_KEYUP\",\n    [258] = \"WM_CHAR\",\n    [259] = \"WM_DEADCHAR\",\n    [260] = \"WM_SYSKEYDOWN\",\n    [261] = \"WM_SYSKEYUP\",\n    [262] = \"WM_SYSCHAR\",\n    [263] = \"WM_SYSDEADCHAR\",\n    [264] = \"WM_KEYLAST\",\n    [265] = \"WM_UNICHAR\",\n    [265] = \"WM_WNT_CONVERTREQUESTEX\",\n    [266] = \"WM_CONVERTREQUEST\",\n    [267] = \"WM_CONVERTRESULT\",\n    [268] = \"WM_INTERIM\",\n    [269] = \"WM_IME_STARTCOMPOSITION\",\n    [270] = \"WM_IME_ENDCOMPOSITION\",\n    [271] = \"WM_IME_COMPOSITION\",\n    [271] = \"WM_IME_KEYLAST\",\n    [272] = \"WM_INITDIALOG\",\n    [273] = \"WM_COMMAND\",\n    [274] = \"WM_SYSCOMMAND\",\n    [275] = \"WM_TIMER\",\n    [276] = \"WM_HSCROLL\",\n    [277] = \"WM_VSCROLL\",\n    [278] = \"WM_INITMENU\",\n    [279] = \"WM_INITMENUPOPUP\",\n    [280] = \"WM_SYSTIMER\",\n    [287] = \"WM_MENUSELECT\",\n    [288] = \"WM_MENUCHAR\",\n    [289] = \"WM_ENTERIDLE\",\n    [290] = \"WM_MENURBUTTONUP\",\n    [291] = \"WM_MENUDRAG\",\n    [292] = \"WM_MENUGETOBJECT\",\n    [293] = \"WM_UNINITMENUPOPUP\",\n    [294] = \"WM_MENUCOMMAND\",\n    [295] = \"WM_CHANGEUISTATE\",\n    [296] = \"WM_UPDATEUISTATE\",\n    [297] = \"WM_QUERYUISTATE\",\n    [306] = \"WM_CTLCOLORMSGBOX\",\n    [307] = \"WM_CTLCOLOREDIT\",\n    [308] = \"WM_CTLCOLORLISTBOX\",\n    [309] = \"WM_CTLCOLORBTN\",\n    [310] = \"WM_CTLCOLORDLG\",\n    [311] = \"WM_CTLCOLORSCROLLBAR\",\n    [312] = \"WM_CTLCOLORSTATIC\",\n    [512] = \"WM_MOUSEFIRST\",\n    [512] = \"WM_MOUSEMOVE\",\n    [513] = \"WM_LBUTTONDOWN\",\n    [514] = \"WM_LBUTTONUP\",\n    [515] = \"WM_LBUTTONDBLCLK\",\n    [516] = \"WM_RBUTTONDOWN\",\n    [517] = \"WM_RBUTTONUP\",\n    [518] = \"WM_RBUTTONDBLCLK\",\n    [519] = \"WM_MBUTTONDOWN\",\n    [520] = \"WM_MBUTTONUP\",\n    [521] = \"WM_MBUTTONDBLCLK\",\n    [521] = \"WM_MOUSELAST\",\n    [522] = \"WM_MOUSEWHEEL\",\n    [523] = \"WM_XBUTTONDOWN\",\n    [524] = \"WM_XBUTTONUP\",\n    [525] = \"WM_XBUTTONDBLCLK\",\n    [528] = \"WM_PARENTNOTIFY\",\n    [529] = \"WM_ENTERMENULOOP\",\n    [530] = \"WM_EXITMENULOOP\",\n    [531] = \"WM_NEXTMENU\",\n    [532] = \"WM_SIZING\",\n    [533] = \"WM_CAPTURECHANGED\",\n    [534] = \"WM_MOVING\",\n    [536] = \"WM_POWERBROADCAST\",\n    [537] = \"WM_DEVICECHANGE\",\n    [544] = \"WM_MDICREATE\",\n    [545] = \"WM_MDIDESTROY\",\n    [546] = \"WM_MDIACTIVATE\",\n    [547] = \"WM_MDIRESTORE\",\n    [548] = \"WM_MDINEXT\",\n    [549] = \"WM_MDIMAXIMIZE\",\n    [550] = \"WM_MDITILE\",\n    [551] = \"WM_MDICASCADE\",\n    [552] = \"WM_MDIICONARRANGE\",\n    [553] = \"WM_MDIGETACTIVE\",\n    [560] = \"WM_MDISETMENU\",\n    [561] = \"WM_ENTERSIZEMOVE\",\n    [562] = \"WM_EXITSIZEMOVE\",\n    [563] = \"WM_DROPFILES\",\n    [564] = \"WM_MDIREFRESHMENU\",\n    [640] = \"WM_IME_REPORT\",\n    [641] = \"WM_IME_SETCONTEXT\",\n    [642] = \"WM_IME_NOTIFY\",\n    [643] = \"WM_IME_CONTROL\",\n    [644] = \"WM_IME_COMPOSITIONFULL\",\n    [645] = \"WM_IME_SELECT\",\n    [646] = \"WM_IME_CHAR\",\n    [648] = \"WM_IME_REQUEST\",\n    [656] = \"WM_IMEKEYDOWN\",\n    [656] = \"WM_IME_KEYDOWN\",\n    [657] = \"WM_IMEKEYUP\",\n    [657] = \"WM_IME_KEYUP\",\n    [672] = \"WM_NCMOUSEHOVER\",\n    [673] = \"WM_MOUSEHOVER\",\n    [674] = \"WM_NCMOUSELEAVE\",\n    [675] = \"WM_MOUSELEAVE\",\n    [768] = \"WM_CUT\",\n    [769] = \"WM_COPY\",\n    [770] = \"WM_PASTE\",\n    [771] = \"WM_CLEAR\",\n    [772] = \"WM_UNDO\",\n    [773] = \"WM_RENDERFORMAT\",\n    [774] = \"WM_RENDERALLFORMATS\",\n    [775] = \"WM_DESTROYCLIPBOARD\",\n    [776] = \"WM_DRAWCLIPBOARD\",\n    [777] = \"WM_PAINTCLIPBOARD\",\n    [778] = \"WM_VSCROLLCLIPBOARD\",\n    [779] = \"WM_SIZECLIPBOARD\",\n    [780] = \"WM_ASKCBFORMATNAME\",\n    [781] = \"WM_CHANGECBCHAIN\",\n    [782] = \"WM_HSCROLLCLIPBOARD\",\n    [783] = \"WM_QUERYNEWPALETTE\",\n    [784] = \"WM_PALETTEISCHANGING\",\n    [785] = \"WM_PALETTECHANGED\",\n    [786] = \"WM_HOTKEY\",\n    [791] = \"WM_PRINT\",\n    [792] = \"WM_PRINTCLIENT\",\n    [793] = \"WM_APPCOMMAND\",\n    [794] = \"WM_THEMECHANGED\",\n    [856] = \"WM_HANDHELDFIRST\",\n    [863] = \"WM_HANDHELDLAST\",\n    [864] = \"WM_AFXFIRST\",\n    [895] = \"WM_AFXLAST\",\n    [896] = \"WM_PENWINFIRST\",\n    [897] = \"WM_RCRESULT\",\n    [898] = \"WM_HOOKRCRESULT\",\n    [899] = \"WM_GLOBALRCCHANGE\",\n    [899] = \"WM_PENMISCINFO\",\n    [900] = \"WM_SKB\",\n    [901] = \"WM_HEDITCTL\",\n    [901] = \"WM_PENCTL\",\n    [902] = \"WM_PENMISC\",\n    [903] = \"WM_CTLINIT\",\n    [904] = \"WM_PENEVENT\",\n    [911] = \"WM_PENWINLAST\",\n    [1024] = \"DDM_SETFMT\",\n    [1024] = \"DM_GETDEFID\",\n    [1024] = \"NIN_SELECT\",\n    [1024] = \"TBM_GETPOS\",\n    [1024] = \"WM_PSD_PAGESETUPDLG\",\n    [1024] = \"WM_USER\",\n    [1025] = \"CBEM_INSERTITEMA\",\n    [1025] = \"DDM_DRAW\",\n    [1025] = \"DM_SETDEFID\",\n    [1025] = \"HKM_SETHOTKEY\",\n    [1025] = \"PBM_SETRANGE\",\n    [1025] = \"RB_INSERTBANDA\",\n    [1025] = \"SB_SETTEXTA\",\n    [1025] = \"TB_ENABLEBUTTON\",\n    [1025] = \"TBM_GETRANGEMIN\",\n    [1025] = \"TTM_ACTIVATE\",\n    [1025] = \"WM_CHOOSEFONT_GETLOGFONT\",\n    [1025] = \"WM_PSD_FULLPAGERECT\",\n    [1026] = \"CBEM_SETIMAGELIST\",\n    [1026] = \"DDM_CLOSE\",\n    [1026] = \"DM_REPOSITION\",\n    [1026] = \"HKM_GETHOTKEY\",\n    [1026] = \"PBM_SETPOS\",\n    [1026] = \"RB_DELETEBAND\",\n    [1026] = \"SB_GETTEXTA\",\n    [1026] = \"TB_CHECKBUTTON\",\n    [1026] = \"TBM_GETRANGEMAX\",\n    [1026] = \"WM_PSD_MINMARGINRECT\",\n    [1027] = \"CBEM_GETIMAGELIST\",\n    [1027] = \"DDM_BEGIN\",\n    [1027] = \"HKM_SETRULES\",\n    [1027] = \"PBM_DELTAPOS\",\n    [1027] = \"RB_GETBARINFO\",\n    [1027] = \"SB_GETTEXTLENGTHA\",\n    [1027] = \"TBM_GETTIC\",\n    [1027] = \"TB_PRESSBUTTON\",\n    [1027] = \"TTM_SETDELAYTIME\",\n    [1027] = \"WM_PSD_MARGINRECT\",\n    [1028] = \"CBEM_GETITEMA\",\n    [1028] = \"DDM_END\",\n    [1028] = \"PBM_SETSTEP\",\n    [1028] = \"RB_SETBARINFO\",\n    [1028] = \"SB_SETPARTS\",\n    [1028] = \"TB_HIDEBUTTON\",\n    [1028] = \"TBM_SETTIC\",\n    [1028] = \"TTM_ADDTOOLA\",\n    [1028] = \"WM_PSD_GREEKTEXTRECT\",\n    [1029] = \"CBEM_SETITEMA\",\n    [1029] = \"PBM_STEPIT\",\n    [1029] = \"TB_INDETERMINATE\",\n    [1029] = \"TBM_SETPOS\",\n    [1029] = \"TTM_DELTOOLA\",\n    [1029] = \"WM_PSD_ENVSTAMPRECT\",\n    [1030] = \"CBEM_GETCOMBOCONTROL\",\n    [1030] = \"PBM_SETRANGE32\",\n    [1030] = \"RB_SETBANDINFOA\",\n    [1030] = \"SB_GETPARTS\",\n    [1030] = \"TB_MARKBUTTON\",\n    [1030] = \"TBM_SETRANGE\",\n    [1030] = \"TTM_NEWTOOLRECTA\",\n    [1030] = \"WM_PSD_YAFULLPAGERECT\",\n    [1031] = \"CBEM_GETEDITCONTROL\",\n    [1031] = \"PBM_GETRANGE\",\n    [1031] = \"RB_SETPARENT\",\n    [1031] = \"SB_GETBORDERS\",\n    [1031] = \"TBM_SETRANGEMIN\",\n    [1031] = \"TTM_RELAYEVENT\",\n    [1032] = \"CBEM_SETEXSTYLE\",\n    [1032] = \"PBM_GETPOS\",\n    [1032] = \"RB_HITTEST\",\n    [1032] = \"SB_SETMINHEIGHT\",\n    [1032] = \"TBM_SETRANGEMAX\",\n    [1032] = \"TTM_GETTOOLINFOA\",\n    [1033] = \"CBEM_GETEXSTYLE\",\n    [1033] = \"CBEM_GETEXTENDEDSTYLE\",\n    [1033] = \"PBM_SETBARCOLOR\",\n    [1033] = \"RB_GETRECT\",\n    [1033] = \"SB_SIMPLE\",\n    [1033] = \"TB_ISBUTTONENABLED\",\n    [1033] = \"TBM_CLEARTICS\",\n    [1033] = \"TTM_SETTOOLINFOA\",\n    [1034] = \"CBEM_HASEDITCHANGED\",\n    [1034] = \"RB_INSERTBANDW\",\n    [1034] = \"SB_GETRECT\",\n    [1034] = \"TB_ISBUTTONCHECKED\",\n    [1034] = \"TBM_SETSEL\",\n    [1034] = \"TTM_HITTESTA\",\n    [1034] = \"WIZ_QUERYNUMPAGES\",\n    [1035] = \"CBEM_INSERTITEMW\",\n    [1035] = \"RB_SETBANDINFOW\",\n    [1035] = \"SB_SETTEXTW\",\n    [1035] = \"TB_ISBUTTONPRESSED\",\n    [1035] = \"TBM_SETSELSTART\",\n    [1035] = \"TTM_GETTEXTA\",\n    [1035] = \"WIZ_NEXT\",\n    [1036] = \"CBEM_SETITEMW\",\n    [1036] = \"RB_GETBANDCOUNT\",\n    [1036] = \"SB_GETTEXTLENGTHW\",\n    [1036] = \"TB_ISBUTTONHIDDEN\",\n    [1036] = \"TBM_SETSELEND\",\n    [1036] = \"TTM_UPDATETIPTEXTA\",\n    [1036] = \"WIZ_PREV\",\n    [1037] = \"CBEM_GETITEMW\",\n    [1037] = \"RB_GETROWCOUNT\",\n    [1037] = \"SB_GETTEXTW\",\n    [1037] = \"TB_ISBUTTONINDETERMINATE\",\n    [1037] = \"TTM_GETTOOLCOUNT\",\n    [1038] = \"CBEM_SETEXTENDEDSTYLE\",\n    [1038] = \"RB_GETROWHEIGHT\",\n    [1038] = \"SB_ISSIMPLE\",\n    [1038] = \"TB_ISBUTTONHIGHLIGHTED\",\n    [1038] = \"TBM_GETPTICS\",\n    [1038] = \"TTM_ENUMTOOLSA\",\n    [1039] = \"SB_SETICON\",\n    [1039] = \"TBM_GETTICPOS\",\n    [1039] = \"TTM_GETCURRENTTOOLA\",\n    [1040] = \"RB_IDTOINDEX\",\n    [1040] = \"SB_SETTIPTEXTA\",\n    [1040] = \"TBM_GETNUMTICS\",\n    [1040] = \"TTM_WINDOWFROMPOINT\",\n    [1041] = \"RB_GETTOOLTIPS\",\n    [1041] = \"SB_SETTIPTEXTW\",\n    [1041] = \"TBM_GETSELSTART\",\n    [1041] = \"TB_SETSTATE\",\n    [1041] = \"TTM_TRACKACTIVATE\",\n    [1042] = \"RB_SETTOOLTIPS\",\n    [1042] = \"SB_GETTIPTEXTA\",\n    [1042] = \"TB_GETSTATE\",\n    [1042] = \"TBM_GETSELEND\",\n    [1042] = \"TTM_TRACKPOSITION\",\n    [1043] = \"RB_SETBKCOLOR\",\n    [1043] = \"SB_GETTIPTEXTW\",\n    [1043] = \"TB_ADDBITMAP\",\n    [1043] = \"TBM_CLEARSEL\",\n    [1043] = \"TTM_SETTIPBKCOLOR\",\n    [1044] = \"RB_GETBKCOLOR\",\n    [1044] = \"SB_GETICON\",\n    [1044] = \"TB_ADDBUTTONSA\",\n    [1044] = \"TBM_SETTICFREQ\",\n    [1044] = \"TTM_SETTIPTEXTCOLOR\",\n    [1045] = \"RB_SETTEXTCOLOR\",\n    [1045] = \"TB_INSERTBUTTONA\",\n    [1045] = \"TBM_SETPAGESIZE\",\n    [1045] = \"TTM_GETDELAYTIME\",\n    [1046] = \"RB_GETTEXTCOLOR\",\n    [1046] = \"TB_DELETEBUTTON\",\n    [1046] = \"TBM_GETPAGESIZE\",\n    [1046] = \"TTM_GETTIPBKCOLOR\",\n    [1047] = \"RB_SIZETORECT\",\n    [1047] = \"TB_GETBUTTON\",\n    [1047] = \"TBM_SETLINESIZE\",\n    [1047] = \"TTM_GETTIPTEXTCOLOR\",\n    [1048] = \"RB_BEGINDRAG\",\n    [1048] = \"TB_BUTTONCOUNT\",\n    [1048] = \"TBM_GETLINESIZE\",\n    [1048] = \"TTM_SETMAXTIPWIDTH\",\n    [1049] = \"RB_ENDDRAG\",\n    [1049] = \"TB_COMMANDTOINDEX\",\n    [1049] = \"TBM_GETTHUMBRECT\",\n    [1049] = \"TTM_GETMAXTIPWIDTH\",\n    [1050] = \"RB_DRAGMOVE\",\n    [1050] = \"TBM_GETCHANNELRECT\",\n    [1050] = \"TB_SAVERESTOREA\",\n    [1050] = \"TTM_SETMARGIN\",\n    [1051] = \"RB_GETBARHEIGHT\",\n    [1051] = \"TB_CUSTOMIZE\",\n    [1051] = \"TBM_SETTHUMBLENGTH\",\n    [1051] = \"TTM_GETMARGIN\",\n    [1052] = \"RB_GETBANDINFOW\",\n    [1052] = \"TB_ADDSTRINGA\",\n    [1052] = \"TBM_GETTHUMBLENGTH\",\n    [1052] = \"TTM_POP\",\n    [1053] = \"RB_GETBANDINFOA\",\n    [1053] = \"TB_GETITEMRECT\",\n    [1053] = \"TBM_SETTOOLTIPS\",\n    [1053] = \"TTM_UPDATE\",\n    [1054] = \"RB_MINIMIZEBAND\",\n    [1054] = \"TB_BUTTONSTRUCTSIZE\",\n    [1054] = \"TBM_GETTOOLTIPS\",\n    [1054] = \"TTM_GETBUBBLESIZE\",\n    [1055] = \"RB_MAXIMIZEBAND\",\n    [1055] = \"TBM_SETTIPSIDE\",\n    [1055] = \"TB_SETBUTTONSIZE\",\n    [1055] = \"TTM_ADJUSTRECT\",\n    [1056] = \"TBM_SETBUDDY\",\n    [1056] = \"TB_SETBITMAPSIZE\",\n    [1056] = \"TTM_SETTITLEA\",\n    [1057] = \"MSG_FTS_JUMP_VA\",\n    [1057] = \"TB_AUTOSIZE\",\n    [1057] = \"TBM_GETBUDDY\",\n    [1057] = \"TTM_SETTITLEW\",\n    [1058] = \"RB_GETBANDBORDERS\",\n    [1059] = \"MSG_FTS_JUMP_QWORD\",\n    [1059] = \"RB_SHOWBAND\",\n    [1059] = \"TB_GETTOOLTIPS\",\n    [1060] = \"MSG_REINDEX_REQUEST\",\n    [1060] = \"TB_SETTOOLTIPS\",\n    [1061] = \"MSG_FTS_WHERE_IS_IT\",\n    [1061] = \"RB_SETPALETTE\",\n    [1061] = \"TB_SETPARENT\",\n    [1062] = \"RB_GETPALETTE\",\n    [1063] = \"RB_MOVEBAND\",\n    [1063] = \"TB_SETROWS\",\n    [1064] = \"TB_GETROWS\",\n    [1065] = \"TB_GETBITMAPFLAGS\",\n    [1066] = \"TB_SETCMDID\",\n    [1067] = \"RB_PUSHCHEVRON\",\n    [1067] = \"TB_CHANGEBITMAP\",\n    [1068] = \"TB_GETBITMAP\",\n    [1069] = \"MSG_GET_DEFFONT\",\n    [1069] = \"TB_GETBUTTONTEXTA\",\n    [1070] = \"TB_REPLACEBITMAP\",\n    [1071] = \"TB_SETINDENT\",\n    [1072] = \"TB_SETIMAGELIST\",\n    [1073] = \"TB_GETIMAGELIST\",\n    [1074] = \"TB_LOADIMAGES\",\n    [1074] = \"EM_CANPASTE\",\n    [1074] = \"TTM_ADDTOOLW\",\n    [1075] = \"EM_DISPLAYBAND\",\n    [1075] = \"TB_GETRECT\",\n    [1075] = \"TTM_DELTOOLW\",\n    [1076] = \"EM_EXGETSEL\",\n    [1076] = \"TB_SETHOTIMAGELIST\",\n    [1076] = \"TTM_NEWTOOLRECTW\",\n    [1077] = \"EM_EXLIMITTEXT\",\n    [1077] = \"TB_GETHOTIMAGELIST\",\n    [1077] = \"TTM_GETTOOLINFOW\",\n    [1078] = \"EM_EXLINEFROMCHAR\",\n    [1078] = \"TB_SETDISABLEDIMAGELIST\",\n    [1078] = \"TTM_SETTOOLINFOW\",\n    [1079] = \"EM_EXSETSEL\",\n    [1079] = \"TB_GETDISABLEDIMAGELIST\",\n    [1079] = \"TTM_HITTESTW\",\n    [1080] = \"EM_FINDTEXT\",\n    [1080] = \"TB_SETSTYLE\",\n    [1080] = \"TTM_GETTEXTW\",\n    [1081] = \"EM_FORMATRANGE\",\n    [1081] = \"TB_GETSTYLE\",\n    [1081] = \"TTM_UPDATETIPTEXTW\",\n    [1082] = \"EM_GETCHARFORMAT\",\n    [1082] = \"TB_GETBUTTONSIZE\",\n    [1082] = \"TTM_ENUMTOOLSW\",\n    [1083] = \"EM_GETEVENTMASK\",\n    [1083] = \"TB_SETBUTTONWIDTH\",\n    [1083] = \"TTM_GETCURRENTTOOLW\",\n    [1084] = \"EM_GETOLEINTERFACE\",\n    [1084] = \"TB_SETMAXTEXTROWS\",\n    [1085] = \"EM_GETPARAFORMAT\",\n    [1085] = \"TB_GETTEXTROWS\",\n    [1086] = \"EM_GETSELTEXT\",\n    [1086] = \"TB_GETOBJECT\",\n    [1087] = \"EM_HIDESELECTION\",\n    [1087] = \"TB_GETBUTTONINFOW\",\n    [1088] = \"EM_PASTESPECIAL\",\n    [1088] = \"TB_SETBUTTONINFOW\",\n    [1089] = \"EM_REQUESTRESIZE\",\n    [1089] = \"TB_GETBUTTONINFOA\",\n    [1090] = \"EM_SELECTIONTYPE\",\n    [1090] = \"TB_SETBUTTONINFOA\",\n    [1091] = \"EM_SETBKGNDCOLOR\",\n    [1091] = \"TB_INSERTBUTTONW\",\n    [1092] = \"EM_SETCHARFORMAT\",\n    [1092] = \"TB_ADDBUTTONSW\",\n    [1093] = \"EM_SETEVENTMASK\",\n    [1093] = \"TB_HITTEST\",\n    [1094] = \"EM_SETOLECALLBACK\",\n    [1094] = \"TB_SETDRAWTEXTFLAGS\",\n    [1095] = \"EM_SETPARAFORMAT\",\n    [1095] = \"TB_GETHOTITEM\",\n    [1096] = \"EM_SETTARGETDEVICE\",\n    [1096] = \"TB_SETHOTITEM\",\n    [1097] = \"EM_STREAMIN\",\n    [1097] = \"TB_SETANCHORHIGHLIGHT\",\n    [1098] = \"EM_STREAMOUT\",\n    [1098] = \"TB_GETANCHORHIGHLIGHT\",\n    [1099] = \"EM_GETTEXTRANGE\",\n    [1099] = \"TB_GETBUTTONTEXTW\",\n    [1100] = \"EM_FINDWORDBREAK\",\n    [1100] = \"TB_SAVERESTOREW\",\n    [1101] = \"EM_SETOPTIONS\",\n    [1101] = \"TB_ADDSTRINGW\",\n    [1102] = \"EM_GETOPTIONS\",\n    [1102] = \"TB_MAPACCELERATORA\",\n    [1103] = \"EM_FINDTEXTEX\",\n    [1103] = \"TB_GETINSERTMARK\",\n    [1104] = \"EM_GETWORDBREAKPROCEX\",\n    [1104] = \"TB_SETINSERTMARK\",\n    [1105] = \"EM_SETWORDBREAKPROCEX\",\n    [1105] = \"TB_INSERTMARKHITTEST\",\n    [1106] = \"EM_SETUNDOLIMIT\",\n    [1106] = \"TB_MOVEBUTTON\",\n    [1107] = \"TB_GETMAXSIZE\",\n    [1108] = \"EM_REDO\",\n    [1108] = \"TB_SETEXTENDEDSTYLE\",\n    [1109] = \"EM_CANREDO\",\n    [1109] = \"TB_GETEXTENDEDSTYLE\",\n    [1110] = \"EM_GETUNDONAME\",\n    [1110] = \"TB_GETPADDING\",\n    [1111] = \"EM_GETREDONAME\",\n    [1111] = \"TB_SETPADDING\",\n    [1112] = \"EM_STOPGROUPTYPING\",\n    [1112] = \"TB_SETINSERTMARKCOLOR\",\n    [1113] = \"EM_SETTEXTMODE\",\n    [1113] = \"TB_GETINSERTMARKCOLOR\",\n    [1114] = \"EM_GETTEXTMODE\",\n    [1114] = \"TB_MAPACCELERATORW\",\n    [1115] = \"EM_AUTOURLDETECT\",\n    [1115] = \"TB_GETSTRINGW\",\n    [1116] = \"EM_GETAUTOURLDETECT\",\n    [1116] = \"TB_GETSTRINGA\",\n    [1117] = \"EM_SETPALETTE\",\n    [1118] = \"EM_GETTEXTEX\",\n    [1119] = \"EM_GETTEXTLENGTHEX\",\n    [1120] = \"EM_SHOWSCROLLBAR\",\n    [1121] = \"EM_SETTEXTEX\",\n    [1123] = \"TAPI_REPLY\",\n    [1124] = \"ACM_OPENA\",\n    [1124] = \"BFFM_SETSTATUSTEXTA\",\n    [1124] = \"CDM_FIRST\",\n    [1124] = \"CDM_GETSPEC\",\n    [1124] = \"EM_SETPUNCTUATION\",\n    [1124] = \"IPM_CLEARADDRESS\",\n    [1124] = \"WM_CAP_UNICODE_START\",\n    [1125] = \"ACM_PLAY\",\n    [1125] = \"BFFM_ENABLEOK\",\n    [1125] = \"CDM_GETFILEPATH\",\n    [1125] = \"EM_GETPUNCTUATION\",\n    [1125] = \"IPM_SETADDRESS\",\n    [1125] = \"PSM_SETCURSEL\",\n    [1125] = \"UDM_SETRANGE\",\n    [1125] = \"WM_CHOOSEFONT_SETLOGFONT\",\n    [1126] = \"ACM_STOP\",\n    [1126] = \"BFFM_SETSELECTIONA\",\n    [1126] = \"CDM_GETFOLDERPATH\",\n    [1126] = \"EM_SETWORDWRAPMODE\",\n    [1126] = \"IPM_GETADDRESS\",\n    [1126] = \"PSM_REMOVEPAGE\",\n    [1126] = \"UDM_GETRANGE\",\n    [1126] = \"WM_CAP_SET_CALLBACK_ERRORW\",\n    [1126] = \"WM_CHOOSEFONT_SETFLAGS\",\n    [1127] = \"ACM_OPENW\",\n    [1127] = \"BFFM_SETSELECTIONW\",\n    [1127] = \"CDM_GETFOLDERIDLIST\",\n    [1127] = \"EM_GETWORDWRAPMODE\",\n    [1127] = \"IPM_SETRANGE\",\n    [1127] = \"PSM_ADDPAGE\",\n    [1127] = \"UDM_SETPOS\",\n    [1127] = \"WM_CAP_SET_CALLBACK_STATUSW\",\n    [1128] = \"BFFM_SETSTATUSTEXTW\",\n    [1128] = \"CDM_SETCONTROLTEXT\",\n    [1128] = \"EM_SETIMECOLOR\",\n    [1128] = \"IPM_SETFOCUS\",\n    [1128] = \"PSM_CHANGED\",\n    [1128] = \"UDM_GETPOS\",\n    [1129] = \"CDM_HIDECONTROL\",\n    [1129] = \"EM_GETIMECOLOR\",\n    [1129] = \"IPM_ISBLANK\",\n    [1129] = \"PSM_RESTARTWINDOWS\",\n    [1129] = \"UDM_SETBUDDY\",\n    [1130] = \"CDM_SETDEFEXT\",\n    [1130] = \"EM_SETIMEOPTIONS\",\n    [1130] = \"PSM_REBOOTSYSTEM\",\n    [1130] = \"UDM_GETBUDDY\",\n    [1131] = \"EM_GETIMEOPTIONS\",\n    [1131] = \"PSM_CANCELTOCLOSE\",\n    [1131] = \"UDM_SETACCEL\",\n    [1132] = \"EM_CONVPOSITION\",\n    [1132] = \"EM_CONVPOSITION\",\n    [1132] = \"PSM_QUERYSIBLINGS\",\n    [1132] = \"UDM_GETACCEL\",\n    [1133] = \"MCIWNDM_GETZOOM\",\n    [1133] = \"PSM_UNCHANGED\",\n    [1133] = \"UDM_SETBASE\",\n    [1134] = \"PSM_APPLY\",\n    [1134] = \"UDM_GETBASE\",\n    [1135] = \"PSM_SETTITLEA\",\n    [1135] = \"UDM_SETRANGE32\",\n    [1136] = \"PSM_SETWIZBUTTONS\",\n    [1136] = \"UDM_GETRANGE32\",\n    [1136] = \"WM_CAP_DRIVER_GET_NAMEW\",\n    [1137] = \"PSM_PRESSBUTTON\",\n    [1137] = \"UDM_SETPOS32\",\n    [1137] = \"WM_CAP_DRIVER_GET_VERSIONW\",\n    [1138] = \"PSM_SETCURSELID\",\n    [1138] = \"UDM_GETPOS32\",\n    [1139] = \"PSM_SETFINISHTEXTA\",\n    [1140] = \"PSM_GETTABCONTROL\",\n    [1141] = \"PSM_ISDIALOGMESSAGE\",\n    [1142] = \"MCIWNDM_REALIZE\",\n    [1142] = \"PSM_GETCURRENTPAGEHWND\",\n    [1143] = \"MCIWNDM_SETTIMEFORMATA\",\n    [1143] = \"PSM_INSERTPAGE\",\n    [1144] = \"EM_SETLANGOPTIONS\",\n    [1144] = \"MCIWNDM_GETTIMEFORMATA\",\n    [1144] = \"PSM_SETTITLEW\",\n    [1144] = \"WM_CAP_FILE_SET_CAPTURE_FILEW\",\n    [1145] = \"EM_GETLANGOPTIONS\",\n    [1145] = \"MCIWNDM_VALIDATEMEDIA\",\n    [1145] = \"PSM_SETFINISHTEXTW\",\n    [1145] = \"WM_CAP_FILE_GET_CAPTURE_FILEW\",\n    [1146] = \"EM_GETIMECOMPMODE\",\n    [1147] = \"EM_FINDTEXTW\",\n    [1147] = \"MCIWNDM_PLAYTO\",\n    [1147] = \"WM_CAP_FILE_SAVEASW\",\n    [1148] = \"EM_FINDTEXTEXW\",\n    [1148] = \"MCIWNDM_GETFILENAMEA\",\n    [1149] = \"EM_RECONVERSION\",\n    [1149] = \"MCIWNDM_GETDEVICEA\",\n    [1149] = \"PSM_SETHEADERTITLEA\",\n    [1149] = \"WM_CAP_FILE_SAVEDIBW\",\n    [1150] = \"EM_SETIMEMODEBIAS\",\n    [1150] = \"MCIWNDM_GETPALETTE\",\n    [1150] = \"PSM_SETHEADERTITLEW\",\n    [1151] = \"EM_GETIMEMODEBIAS\",\n    [1151] = \"MCIWNDM_SETPALETTE\",\n    [1151] = \"PSM_SETHEADERSUBTITLEA\",\n    [1152] = \"MCIWNDM_GETERRORA\",\n    [1152] = \"PSM_SETHEADERSUBTITLEW\",\n    [1153] = \"PSM_HWNDTOINDEX\",\n    [1154] = \"PSM_INDEXTOHWND\",\n    [1155] = \"MCIWNDM_SETINACTIVETIMER\",\n    [1155] = \"PSM_PAGETOINDEX\",\n    [1156] = \"PSM_INDEXTOPAGE\",\n    [1157] = \"DL_BEGINDRAG\",\n    [1157] = \"MCIWNDM_GETINACTIVETIMER\",\n    [1157] = \"PSM_IDTOINDEX\",\n    [1158] = \"DL_DRAGGING\",\n    [1158] = \"PSM_INDEXTOID\",\n    [1159] = \"DL_DROPPED\",\n    [1159] = \"PSM_GETRESULT\",\n    [1160] = \"DL_CANCELDRAG\",\n    [1160] = \"PSM_RECALCPAGESIZES\",\n    [1164] = \"MCIWNDM_GET_SOURCE\",\n    [1165] = \"MCIWNDM_PUT_SOURCE\",\n    [1166] = \"MCIWNDM_GET_DEST\",\n    [1167] = \"MCIWNDM_PUT_DEST\",\n    [1168] = \"MCIWNDM_CAN_PLAY\",\n    [1169] = \"MCIWNDM_CAN_WINDOW\",\n    [1170] = \"MCIWNDM_CAN_RECORD\",\n    [1171] = \"MCIWNDM_CAN_SAVE\",\n    [1172] = \"MCIWNDM_CAN_EJECT\",\n    [1173] = \"MCIWNDM_CAN_CONFIG\",\n    [1174] = \"IE_GETINK\",\n    [1174] = \"IE_MSGFIRST\",\n    [1174] = \"MCIWNDM_PALETTEKICK\",\n    [1175] = \"IE_SETINK\",\n    [1176] = \"IE_GETPENTIP\",\n    [1177] = \"IE_SETPENTIP\",\n    [1178] = \"IE_GETERASERTIP\",\n    [1179] = \"IE_SETERASERTIP\",\n    [1180] = \"IE_GETBKGND\",\n    [1181] = \"IE_SETBKGND\",\n    [1182] = \"IE_GETGRIDORIGIN\",\n    [1183] = \"IE_SETGRIDORIGIN\",\n    [1184] = \"IE_GETGRIDPEN\",\n    [1185] = \"IE_SETGRIDPEN\",\n    [1186] = \"IE_GETGRIDSIZE\",\n    [1187] = \"IE_SETGRIDSIZE\",\n    [1188] = \"IE_GETMODE\",\n    [1189] = \"IE_SETMODE\",\n    [1190] = \"IE_GETINKRECT\",\n    [1190] = \"WM_CAP_SET_MCI_DEVICEW\",\n    [1191] = \"WM_CAP_GET_MCI_DEVICEW\",\n    [1204] = \"WM_CAP_PAL_OPENW\",\n    [1205] = \"WM_CAP_PAL_SAVEW\",\n    [1208] = \"IE_GETAPPDATA\",\n    [1209] = \"IE_SETAPPDATA\",\n    [1210] = \"IE_GETDRAWOPTS\",\n    [1211] = \"IE_SETDRAWOPTS\",\n    [1212] = \"IE_GETFORMAT\",\n    [1213] = \"IE_SETFORMAT\",\n    [1214] = \"IE_GETINKINPUT\",\n    [1215] = \"IE_SETINKINPUT\",\n    [1216] = \"IE_GETNOTIFY\",\n    [1217] = \"IE_SETNOTIFY\",\n    [1218] = \"IE_GETRECOG\",\n    [1219] = \"IE_SETRECOG\",\n    [1220] = \"IE_GETSECURITY\",\n    [1221] = \"IE_SETSECURITY\",\n    [1222] = \"IE_GETSEL\",\n    [1223] = \"IE_SETSEL\",\n    [1224] = \"CDM_LAST\",\n    [1224] = \"EM_SETBIDIOPTIONS\",\n    [1224] = \"IE_DOCOMMAND\",\n    [1224] = \"MCIWNDM_NOTIFYMODE\",\n    [1225] = \"EM_GETBIDIOPTIONS\",\n    [1225] = \"IE_GETCOMMAND\",\n    [1226] = \"EM_SETTYPOGRAPHYOPTIONS\",\n    [1226] = \"IE_GETCOUNT\",\n    [1227] = \"EM_GETTYPOGRAPHYOPTIONS\",\n    [1227] = \"IE_GETGESTURE\",\n    [1227] = \"MCIWNDM_NOTIFYMEDIA\",\n    [1228] = \"EM_SETEDITSTYLE\",\n    [1228] = \"IE_GETMENU\",\n    [1229] = \"EM_GETEDITSTYLE\",\n    [1229] = \"IE_GETPAINTDC\",\n    [1229] = \"MCIWNDM_NOTIFYERROR\",\n    [1230] = \"IE_GETPDEVENT\",\n    [1231] = \"IE_GETSELCOUNT\",\n    [1232] = \"IE_GETSELITEMS\",\n    [1233] = \"IE_GETSTYLE\",\n    [1243] = \"MCIWNDM_SETTIMEFORMATW\",\n    [1244] = \"EM_OUTLINE\",\n    [1244] = \"EM_OUTLINE\",\n    [1244] = \"MCIWNDM_GETTIMEFORMATW\",\n    [1245] = \"EM_GETSCROLLPOS\",\n    [1245] = \"EM_GETSCROLLPOS\",\n    [1246] = \"EM_SETSCROLLPOS\",\n    [1246] = \"EM_SETSCROLLPOS\",\n    [1247] = \"EM_SETFONTSIZE\",\n    [1247] = \"EM_SETFONTSIZE\",\n    [1248] = \"EM_GETZOOM\",\n    [1248] = \"MCIWNDM_GETFILENAMEW\",\n    [1249] = \"EM_SETZOOM\",\n    [1249] = \"MCIWNDM_GETDEVICEW\",\n    [1250] = \"EM_GETVIEWKIND\",\n    [1251] = \"EM_SETVIEWKIND\",\n    [1252] = \"EM_GETPAGE\",\n    [1252] = \"MCIWNDM_GETERRORW\",\n    [1253] = \"EM_SETPAGE\",\n    [1254] = \"EM_GETHYPHENATEINFO\",\n    [1255] = \"EM_SETHYPHENATEINFO\",\n    [1259] = \"EM_GETPAGEROTATE\",\n    [1260] = \"EM_SETPAGEROTATE\",\n    [1261] = \"EM_GETCTFMODEBIAS\",\n    [1262] = \"EM_SETCTFMODEBIAS\",\n    [1264] = \"EM_GETCTFOPENSTATUS\",\n    [1265] = \"EM_SETCTFOPENSTATUS\",\n    [1266] = \"EM_GETIMECOMPTEXT\",\n    [1267] = \"EM_ISIME\",\n    [1268] = \"EM_GETIMEPROPERTY\",\n    [1293] = \"EM_GETQUERYRTFOBJ\",\n    [1294] = \"EM_SETQUERYRTFOBJ\",\n    [1536] = \"FM_GETFOCUS\",\n    [1537] = \"FM_GETDRIVEINFOA\",\n    [1538] = \"FM_GETSELCOUNT\",\n    [1539] = \"FM_GETSELCOUNTLFN\",\n    [1540] = \"FM_GETFILESELA\",\n    [1541] = \"FM_GETFILESELLFNA\",\n    [1542] = \"FM_REFRESH_WINDOWS\",\n    [1543] = \"FM_RELOAD_EXTENSIONS\",\n    [1553] = \"FM_GETDRIVEINFOW\",\n    [1556] = \"FM_GETFILESELW\",\n    [1557] = \"FM_GETFILESELLFNW\",\n    [1625] = \"WLX_WM_SAS\",\n    [2024] = \"SM_GETSELCOUNT\",\n    [2024] = \"UM_GETSELCOUNT\",\n    [2024] = \"WM_CPL_LAUNCH\",\n    [2025] = \"SM_GETSERVERSELA\",\n    [2025] = \"UM_GETUSERSELA\",\n    [2025] = \"WM_CPL_LAUNCHED\",\n    [2026] = \"SM_GETSERVERSELW\",\n    [2026] = \"UM_GETUSERSELW\",\n    [2027] = \"SM_GETCURFOCUSA\",\n    [2027] = \"UM_GETGROUPSELA\",\n    [2028] = \"SM_GETCURFOCUSW\",\n    [2028] = \"UM_GETGROUPSELW\",\n    [2029] = \"SM_GETOPTIONS\",\n    [2029] = \"UM_GETCURFOCUSA\",\n    [2030] = \"UM_GETCURFOCUSW\",\n    [2031] = \"UM_GETOPTIONS\",\n    [2032] = \"UM_GETOPTIONS2\",\n    [4096] = \"LVM_FIRST\",\n    [4096] = \"LVM_GETBKCOLOR\",\n    [4097] = \"LVM_SETBKCOLOR\",\n    [4098] = \"LVM_GETIMAGELIST\",\n    [4099] = \"LVM_SETIMAGELIST\",\n    [4100] = \"LVM_GETITEMCOUNT\",\n    [4101] = \"LVM_GETITEMA\",\n    [4102] = \"LVM_SETITEMA\",\n    [4103] = \"LVM_INSERTITEMA\",\n    [4104] = \"LVM_DELETEITEM\",\n    [4105] = \"LVM_DELETEALLITEMS\",\n    [4106] = \"LVM_GETCALLBACKMASK\",\n    [4107] = \"LVM_SETCALLBACKMASK\",\n    [4108] = \"LVM_GETNEXTITEM\",\n    [4109] = \"LVM_FINDITEMA\",\n    [4110] = \"LVM_GETITEMRECT\",\n    [4111] = \"LVM_SETITEMPOSITION\",\n    [4112] = \"LVM_GETITEMPOSITION\",\n    [4113] = \"LVM_GETSTRINGWIDTHA\",\n    [4114] = \"LVM_HITTEST\",\n    [4115] = \"LVM_ENSUREVISIBLE\",\n    [4116] = \"LVM_SCROLL\",\n    [4117] = \"LVM_REDRAWITEMS\",\n    [4118] = \"LVM_ARRANGE\",\n    [4119] = \"LVM_EDITLABELA\",\n    [4120] = \"LVM_GETEDITCONTROL\",\n    [4121] = \"LVM_GETCOLUMNA\",\n    [4122] = \"LVM_SETCOLUMNA\",\n    [4123] = \"LVM_INSERTCOLUMNA\",\n    [4124] = \"LVM_DELETECOLUMN\",\n    [4125] = \"LVM_GETCOLUMNWIDTH\",\n    [4126] = \"LVM_SETCOLUMNWIDTH\",\n    [4127] = \"LVM_GETHEADER\",\n    [4129] = \"LVM_CREATEDRAGIMAGE\",\n    [4130] = \"LVM_GETVIEWRECT\",\n    [4131] = \"LVM_GETTEXTCOLOR\",\n    [4132] = \"LVM_SETTEXTCOLOR\",\n    [4133] = \"LVM_GETTEXTBKCOLOR\",\n    [4134] = \"LVM_SETTEXTBKCOLOR\",\n    [4135] = \"LVM_GETTOPINDEX\",\n    [4136] = \"LVM_GETCOUNTPERPAGE\",\n    [4137] = \"LVM_GETORIGIN\",\n    [4138] = \"LVM_UPDATE\",\n    [4139] = \"LVM_SETITEMSTATE\",\n    [4140] = \"LVM_GETITEMSTATE\",\n    [4141] = \"LVM_GETITEMTEXTA\",\n    [4142] = \"LVM_SETITEMTEXTA\",\n    [4143] = \"LVM_SETITEMCOUNT\",\n    [4144] = \"LVM_SORTITEMS\",\n    [4145] = \"LVM_SETITEMPOSITION32\",\n    [4146] = \"LVM_GETSELECTEDCOUNT\",\n    [4147] = \"LVM_GETITEMSPACING\",\n    [4148] = \"LVM_GETISEARCHSTRINGA\",\n    [4149] = \"LVM_SETICONSPACING\",\n    [4150] = \"LVM_SETEXTENDEDLISTVIEWSTYLE\",\n    [4151] = \"LVM_GETEXTENDEDLISTVIEWSTYLE\",\n    [4152] = \"LVM_GETSUBITEMRECT\",\n    [4153] = \"LVM_SUBITEMHITTEST\",\n    [4154] = \"LVM_SETCOLUMNORDERARRAY\",\n    [4155] = \"LVM_GETCOLUMNORDERARRAY\",\n    [4156] = \"LVM_SETHOTITEM\",\n    [4157] = \"LVM_GETHOTITEM\",\n    [4158] = \"LVM_SETHOTCURSOR\",\n    [4159] = \"LVM_GETHOTCURSOR\",\n    [4160] = \"LVM_APPROXIMATEVIEWRECT\",\n    [4161] = \"LVM_SETWORKAREAS\",\n    [4162] = \"LVM_GETSELECTIONMARK\",\n    [4163] = \"LVM_SETSELECTIONMARK\",\n    [4164] = \"LVM_SETBKIMAGEA\",\n    [4165] = \"LVM_GETBKIMAGEA\",\n    [4166] = \"LVM_GETWORKAREAS\",\n    [4167] = \"LVM_SETHOVERTIME\",\n    [4168] = \"LVM_GETHOVERTIME\",\n    [4169] = \"LVM_GETNUMBEROFWORKAREAS\",\n    [4170] = \"LVM_SETTOOLTIPS\",\n    [4171] = \"LVM_GETITEMW\",\n    [4172] = \"LVM_SETITEMW\",\n    [4173] = \"LVM_INSERTITEMW\",\n    [4174] = \"LVM_GETTOOLTIPS\",\n    [4179] = \"LVM_FINDITEMW\",\n    [4183] = \"LVM_GETSTRINGWIDTHW\",\n    [4191] = \"LVM_GETCOLUMNW\",\n    [4192] = \"LVM_SETCOLUMNW\",\n    [4193] = \"LVM_INSERTCOLUMNW\",\n    [4211] = \"LVM_GETITEMTEXTW\",\n    [4212] = \"LVM_SETITEMTEXTW\",\n    [4213] = \"LVM_GETISEARCHSTRINGW\",\n    [4214] = \"LVM_EDITLABELW\",\n    [4235] = \"LVM_GETBKIMAGEW\",\n    [4236] = \"LVM_SETSELECTEDCOLUMN\",\n    [4237] = \"LVM_SETTILEWIDTH\",\n    [4238] = \"LVM_SETVIEW\",\n    [4239] = \"LVM_GETVIEW\",\n    [4241] = \"LVM_INSERTGROUP\",\n    [4243] = \"LVM_SETGROUPINFO\",\n    [4245] = \"LVM_GETGROUPINFO\",\n    [4246] = \"LVM_REMOVEGROUP\",\n    [4247] = \"LVM_MOVEGROUP\",\n    [4250] = \"LVM_MOVEITEMTOGROUP\",\n    [4251] = \"LVM_SETGROUPMETRICS\",\n    [4252] = \"LVM_GETGROUPMETRICS\",\n    [4253] = \"LVM_ENABLEGROUPVIEW\",\n    [4254] = \"LVM_SORTGROUPS\",\n    [4255] = \"LVM_INSERTGROUPSORTED\",\n    [4256] = \"LVM_REMOVEALLGROUPS\",\n    [4257] = \"LVM_HASGROUP\",\n    [4258] = \"LVM_SETTILEVIEWINFO\",\n    [4259] = \"LVM_GETTILEVIEWINFO\",\n    [4260] = \"LVM_SETTILEINFO\",\n    [4261] = \"LVM_GETTILEINFO\",\n    [4262] = \"LVM_SETINSERTMARK\",\n    [4263] = \"LVM_GETINSERTMARK\",\n    [4264] = \"LVM_INSERTMARKHITTEST\",\n    [4265] = \"LVM_GETINSERTMARKRECT\",\n    [4266] = \"LVM_SETINSERTMARKCOLOR\",\n    [4267] = \"LVM_GETINSERTMARKCOLOR\",\n    [4269] = \"LVM_SETINFOTIP\",\n    [4270] = \"LVM_GETSELECTEDCOLUMN\",\n    [4271] = \"LVM_ISGROUPVIEWENABLED\",\n    [4272] = \"LVM_GETOUTLINECOLOR\",\n    [4273] = \"LVM_SETOUTLINECOLOR\",\n    [4275] = \"LVM_CANCELEDITLABEL\",\n    [4276] = \"LVM_MAPINDEXTOID\",\n    [4277] = \"LVM_MAPIDTOINDEX\",\n    [4278] = \"LVM_ISITEMVISIBLE\",\n    [8192] = \"OCM__BASE\",\n    [8197] = \"LVM_SETUNICODEFORMAT\",\n    [8198] = \"LVM_GETUNICODEFORMAT\",\n    [8217] = \"OCM_CTLCOLOR\",\n    [8235] = \"OCM_DRAWITEM\",\n    [8236] = \"OCM_MEASUREITEM\",\n    [8237] = \"OCM_DELETEITEM\",\n    [8238] = \"OCM_VKEYTOITEM\",\n    [8239] = \"OCM_CHARTOITEM\",\n    [8249] = \"OCM_COMPAREITEM\",\n    [8270] = \"OCM_NOTIFY\",\n    [8465] = \"OCM_COMMAND\",\n    [8468] = \"OCM_HSCROLL\",\n    [8469] = \"OCM_VSCROLL\",\n    [8498] = \"OCM_CTLCOLORMSGBOX\",\n    [8499] = \"OCM_CTLCOLOREDIT\",\n    [8500] = \"OCM_CTLCOLORLISTBOX\",\n    [8501] = \"OCM_CTLCOLORBTN\",\n    [8502] = \"OCM_CTLCOLORDLG\",\n    [8503] = \"OCM_CTLCOLORSCROLLBAR\",\n    [8504] = \"OCM_CTLCOLORSTATIC\",\n    [8720] = \"OCM_PARENTNOTIFY\",\n    [32768] = \"WM_APP\",\n};\n\nstatic const char *message_to_str(UINT msg)\n{\n    if (sizeof(msg_table) / sizeof(char*) < msg)\n        return NULL;\n    return msg_table[msg];\n}"
  },
  {
    "path": "user/network.c",
    "content": "/*\n * USER Windows Network functions\n *\n * Copyright 1995 Martin von Loewis\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <ctype.h>\n#include <stdarg.h>\n#include <string.h>\n#include <sys/types.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winnetwk.h\"\n#include \"wine/winnet16.h\"\n#include \"wine/debug.h\"\n#include \"wownt32.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(wnet);\n\nWORD map_wnet16_status(DWORD wnet32)\n{\n    switch (wnet32)\n    {\n    case -1:\n        return WN16_CANCEL;\n    case WN_SUCCESS:\n        return WN16_SUCCESS;\n    case WN_NOT_SUPPORTED:\n        return WN16_NOT_SUPPORTED;\n    case WN_NET_ERROR:\n        return WN16_NET_ERROR;\n    case WN_MORE_DATA:\n        return WN16_MORE_DATA;\n    case WN_BAD_POINTER:\n        return WN16_BAD_POINTER;\n    case WN_BAD_VALUE:\n        return WN16_BAD_VALUE;\n    case WN_BAD_PASSWORD:\n        return WN16_BAD_PASSWORD;\n    case WN_ACCESS_DENIED:\n        return WN16_ACCESS_DENIED;\n    case WN_FUNCTION_BUSY:\n        return WN16_FUNCTION_BUSY;\n        /*\n    case WN_WINDOWS_ERROR:\n        return WN16_WINDOWS_ERROR;\n        */\n    case WN_BAD_USER:\n        return WN16_BAD_USER;\n    case WN_OUT_OF_MEMORY:\n        return WN16_OUT_OF_MEMORY;\n    case WN_CANCEL:\n        return WN16_CANCEL;\n    case WN_NOT_CONNECTED:\n        return WN16_NOT_CONNECTED;\n    case WN_OPEN_FILES:\n        return WN16_OPEN_FILES;\n    case WN_BAD_NETNAME:\n        return WN16_BAD_NETNAME;\n    case WN_BAD_LOCALNAME:\n        return WN16_BAD_LOCALNAME;\n    case WN_ALREADY_CONNECTED:\n        return WN16_ALREADY_CONNECTED;\n    case WN_DEVICE_ERROR:\n        return WN16_DEVICE_ERROR;\n    case WN_CONNECTION_CLOSED:\n        return WN16_CONNECTION_CLOSED;\n        /*\n    case WN_CONTINUE:\n        return WN16_CONTINUE;\n    case WN_BAD_JOBID:\n        return WN16_BAD_JOBID;\n    case WN_JOB_NOT_FOUND:\n        return WN16_JOB_NOT_FOUND;\n    case WN_JOB_NOT_HELD:\n        return WN16_JOB_NOT_HELD;\n    case WN_BAD_QUEUE:\n        return WN16_BAD_QUEUE;\n    case WN_BAD_FILE_HANDLE:\n        return WN16_BAD_FILE_HANDLE;\n    case WN_CANT_SET_COPIES:\n        return WN16_CANT_SET_COPIES;\n    case WN_ALREADY_LOCKED:\n        return WN16_ALREADY_LOCKED;\n    case WN_NO_ERROR:\n        return WN16_NO_ERROR;\n        */\n    }\n    return WN16_WINDOWS_ERROR;\n}\n\nLPCSTR wnet16_status_error_string(WORD wnet)\n{\n#define STR(x) case x:\\\n    return #x\n    switch (wnet)\n    {\n        STR(WN16_SUCCESS);\n        STR(WN16_NOT_SUPPORTED);\n        STR(WN16_NET_ERROR);\n        STR(WN16_MORE_DATA);\n        STR(WN16_BAD_POINTER);\n        STR(WN16_BAD_VALUE);\n        STR(WN16_BAD_PASSWORD);\n        STR(WN16_ACCESS_DENIED);\n        STR(WN16_FUNCTION_BUSY);\n        STR(WN16_WINDOWS_ERROR);\n        STR(WN16_BAD_USER);\n        STR(WN16_OUT_OF_MEMORY);\n        STR(WN16_CANCEL);\n        STR(WN16_CONTINUE);\n        STR(WN16_NOT_CONNECTED);\n        STR(WN16_OPEN_FILES);\n        STR(WN16_BAD_NETNAME);\n        STR(WN16_BAD_LOCALNAME);\n        STR(WN16_ALREADY_CONNECTED);\n        STR(WN16_DEVICE_ERROR);\n        STR(WN16_CONNECTION_CLOSED);\n        STR(WN16_BAD_JOBID);\n        STR(WN16_JOB_NOT_FOUND);\n        STR(WN16_JOB_NOT_HELD);\n        STR(WN16_BAD_QUEUE);\n        STR(WN16_BAD_FILE_HANDLE);\n        STR(WN16_CANT_SET_COPIES);\n        STR(WN16_ALREADY_LOCKED);\n        STR(WN16_NO_ERROR);\n    }\n#undef STR\n    return NULL;\n}\n/*\n * Remote printing\n */\n\n/**************************************************************************\n *              WNetOpenJob       [USER.501]\n */\nWORD WINAPI WNetOpenJob16( LPSTR szQueue, LPSTR szJobTitle, WORD nCopies, LPINT16 pfh )\n{\n    FIXME( \"(%s, %s, %d, %p): stub\\n\",\n           debugstr_a(szQueue), debugstr_a(szJobTitle), nCopies, pfh );\n    return WN16_NET_ERROR;\n}\n\n/**************************************************************************\n *              WNetCloseJob      [USER.502]\n */\nWORD WINAPI WNetCloseJob16( WORD fh, LPINT16 pidJob, LPSTR szQueue )\n{\n    FIXME( \"(%d, %p, %s): stub\\n\", fh, pidJob, debugstr_a(szQueue) );\n    return WN16_NET_ERROR;\n}\n\n/**************************************************************************\n *              WNetWriteJob      [USER.524]\n */\nWORD WINAPI WNetWriteJob16( HANDLE16 hJob, LPSTR lpData, LPINT16 lpcbData )\n{\n    FIXME( \"(%04x, %p, %p): stub\\n\", hJob, lpData, lpcbData );\n    return WN16_NET_ERROR;\n}\n\n/**************************************************************************\n *              WNetAbortJob       [USER.503]\n */\nWORD WINAPI WNetAbortJob16( LPSTR szQueue, WORD wJobId )\n{\n    FIXME( \"(%s, %d): stub\\n\", debugstr_a(szQueue), wJobId );\n    return WN16_NET_ERROR;\n}\n\n/**************************************************************************\n *              WNetHoldJob       [USER.504]\n */\nWORD WINAPI WNetHoldJob16( LPSTR szQueue, WORD wJobId )\n{\n    FIXME( \"(%s, %d): stub\\n\", debugstr_a(szQueue), wJobId );\n    return WN16_NET_ERROR;\n}\n\n/**************************************************************************\n *              WNetReleaseJob       [USER.505]\n */\nWORD WINAPI WNetReleaseJob16( LPSTR szQueue, WORD wJobId )\n{\n    FIXME( \"(%s, %d): stub\\n\", debugstr_a(szQueue), wJobId );\n    return WN16_NET_ERROR;\n}\n\n/**************************************************************************\n *              WNetCancelJob       [USER.506]\n */\nWORD WINAPI WNetCancelJob16( LPSTR szQueue, WORD wJobId )\n{\n    FIXME( \"(%s, %d): stub\\n\", debugstr_a(szQueue), wJobId );\n    return WN16_NET_ERROR;\n}\n\n/**************************************************************************\n *              WNetSetJobCopies     [USER.507]\n */\nWORD WINAPI WNetSetJobCopies16( LPSTR szQueue, WORD wJobId, WORD nCopies )\n{\n    FIXME( \"(%s, %d, %d): stub\\n\", debugstr_a(szQueue), wJobId, nCopies );\n    return WN16_NET_ERROR;\n}\n\n/**************************************************************************\n *              WNetWatchQueue       [USER.508]\n */\nWORD WINAPI WNetWatchQueue16( HWND16 hWnd, LPSTR szLocal, LPSTR szUser, WORD nQueue )\n{\n    FIXME( \"(%04x, %s, %s, %d): stub\\n\",\n           hWnd, debugstr_a(szLocal), debugstr_a(szUser), nQueue );\n    return WN16_NET_ERROR;\n}\n\n/**************************************************************************\n *              WNetUnwatchQueue     [USER.509]\n */\nWORD WINAPI WNetUnwatchQueue16( LPSTR szQueue )\n{\n    FIXME( \"(%s): stub\\n\", debugstr_a(szQueue) );\n    return WN16_NET_ERROR;\n}\n\n/**************************************************************************\n *              WNetLockQueueData       [USER.510]\n */\nWORD WINAPI WNetLockQueueData16( LPSTR szQueue, LPSTR szUser,\n                                 LPQUEUESTRUCT16 *lplpQueueStruct )\n{\n    FIXME( \"(%s, %s, %p): stub\\n\",\n           debugstr_a(szQueue), debugstr_a(szUser), lplpQueueStruct );\n    return WN16_NET_ERROR;\n}\n\n/**************************************************************************\n *              WNetUnlockQueueData       [USER.511]\n */\nWORD WINAPI WNetUnlockQueueData16( LPSTR szQueue )\n{\n    FIXME( \"(%s): stub\\n\", debugstr_a(szQueue) );\n    return WN16_NET_ERROR;\n}\n\n\n/*\n * Connections\n */\n\n/********************************************************************\n *  WNetAddConnection [USER.517]  Directs a local device to net\n *\n * Redirects a local device (either a disk drive or printer port)\n * to a shared device on a remote server.\n */\nWORD WINAPI WNetAddConnection16( LPCSTR lpNetPath, LPCSTR lpPassWord,\n                                 LPCSTR lpLocalName )\n{\n    FIXME( \"(%s, %p, %s): stub\\n\",\n           debugstr_a(lpNetPath), lpPassWord, debugstr_a(lpLocalName) );\n    return WN16_NET_ERROR;\n}\n\n/********************************************************************\n *   WNetCancelConnection [USER.518]  undirects a local device\n */\nWORD WINAPI WNetCancelConnection16( LPSTR lpName, BOOL16 bForce )\n{\n    FIXME( \"(%s, %04X): stub\\n\", debugstr_a(lpName), bForce);\n    return WN16_NOT_SUPPORTED;\n}\n\n/********************************************************************\n * WNetGetConnection [USER.512] reverse-resolves a local device\n */\nWORD WINAPI WNetGetConnection16( LPSTR lpLocalName,\n                                 LPSTR lpRemoteName, UINT16 *cbRemoteName )\n{\n    char label[32];\n\n    TRACE( \"local %s\\n\", lpLocalName );\n    switch(GetDriveTypeA(lpLocalName))\n    {\n    case DRIVE_REMOTE:\n        GetVolumeInformationA( lpLocalName, label, sizeof(label), NULL, NULL, NULL, NULL, 0 );\n        if (strlen(label) + 1 > *cbRemoteName)\n        {\n            *cbRemoteName = strlen(label) + 1;\n            return WN16_MORE_DATA;\n        }\n        strcpy( lpRemoteName, label );\n        *cbRemoteName = strlen(lpRemoteName) + 1;\n        return WN16_SUCCESS;\n    case DRIVE_REMOVABLE:\n    case DRIVE_FIXED:\n    case DRIVE_CDROM:\n        TRACE(\"file is local\\n\");\n        return WN16_NOT_CONNECTED;\n    default:\n        return WN16_BAD_LOCALNAME;\n    }\n}\n\n/**************************************************************************\n *              WNetRestoreConnection       [USER.523]\n */\nWORD WINAPI WNetRestoreConnection16( HWND16 hwndOwner, LPSTR lpszDevice )\n{\n    FIXME( \"(%04x, %s): stub\\n\", hwndOwner, debugstr_a(lpszDevice) );\n    return WN16_NOT_SUPPORTED;\n}\n\n\n/*\n * Capabilities\n */\n\n/**************************************************************************\n *\t\tWNetGetCaps\t\t[USER.513]\n */\nWORD WINAPI WNetGetCaps16( WORD capability )\n{\n    switch (capability)\n    {\n    case WNNC16_SPEC_VERSION:\n        return 0x30a; /* WfW 3.11 (and apparently other 3.1x) */\n\n    case WNNC16_NET_TYPE:\n        /* hi byte = network type,\n           lo byte = network vendor (Netware = 0x03) [15 types] */\n        return WNNC16_NET_MultiNet | WNNC16_SUBNET_WinWorkgroups;\n\n    case WNNC16_DRIVER_VERSION:\n        /* driver version of vendor */\n        return 0x100; /* WfW 3.11 */\n\n    case WNNC16_USER:\n        /* 1 = WNetGetUser is supported */\n        return 1;\n\n    case WNNC16_CONNECTION:\n        /* returns mask of the supported connection functions */\n        return   WNNC16_CON_AddConnection | WNNC16_CON_CancelConnection\n               | WNNC16_CON_GetConnections /* | WNNC16_CON_AutoConnect */\n               | WNNC16_CON_BrowseDialog | WNNC16_CON_RestoreConnection;\n\n    case WNNC16_PRINTING:\n        /* returns mask of the supported printing functions */\n        return   WNNC16_PRT_OpenJob | WNNC16_PRT_CloseJob | WNNC16_PRT_HoldJob\n               | WNNC16_PRT_ReleaseJob | WNNC16_PRT_CancelJob\n               | WNNC16_PRT_SetJobCopies | WNNC16_PRT_WatchQueue\n               | WNNC16_PRT_UnwatchQueue | WNNC16_PRT_LockQueueData\n               | WNNC16_PRT_UnlockQueueData | WNNC16_PRT_AbortJob\n               | WNNC16_PRT_WriteJob;\n\n    case WNNC16_DIALOG:\n        /* returns mask of the supported dialog functions */\n        return   WNNC16_DLG_DeviceMode | WNNC16_DLG_BrowseDialog\n               | WNNC16_DLG_ConnectDialog | WNNC16_DLG_DisconnectDialog\n               | WNNC16_DLG_ViewQueueDialog | WNNC16_DLG_PropertyDialog\n               | WNNC16_DLG_ConnectionDialog\n            /* | WNNC16_DLG_PrinterConnectDialog\n               | WNNC16_DLG_SharesDialog | WNNC16_DLG_ShareAsDialog */;\n\n    case WNNC16_ADMIN:\n        /* returns mask of the supported administration functions */\n        /* not sure if long file names is a good idea */\n        return   WNNC16_ADM_GetDirectoryType\n            /* | WNNC16_ADM_DirectoryNotify */ /*not yet supported*/\n               | WNNC16_ADM_LongNames /* | WNNC16_ADM_SetDefaultDrive */;\n\n    case WNNC16_ERROR:\n        /* returns mask of the supported error functions */\n        return   WNNC16_ERR_GetError | WNNC16_ERR_GetErrorText;\n\n    case WNNC16_PRINTMGREXT:\n        /* returns the Print Manager version in major and\n           minor format if Print Manager functions are available */\n        return 0x30e; /* printman version of WfW 3.11 */\n\n    case 0xffff:\n        /* Win 3.11 returns HMODULE of network driver here\n           FIXME: what should we return ?\n           logonoff.exe needs it, msmail crashes with wrong value */\n        return 0;\n\n    default:\n        return 0;\n    }\n}\n\n\n/*\n * Get User\n */\n\n/**************************************************************************\n *\t\tWNetGetUser\t\t\t[USER.516]\n */\nWORD WINAPI WNetGetUser16( LPSTR szUser, LPINT16 nBufferSize )\n{\n    DWORD lpBufferSize, ret;\n\n    if(!szUser || !nBufferSize) return WN16_BAD_POINTER;\n\n    lpBufferSize = *nBufferSize;\n    ret = WNetGetUserA( NULL, szUser, &lpBufferSize );\n    *nBufferSize = lpBufferSize;\n\n    switch (ret)\n    {\n        case NO_ERROR:\n            return WN16_SUCCESS;\n        case ERROR_MORE_DATA:\n            return WN16_MORE_DATA;\n        default:\n            FIXME(\"Untranslated return value %d\\n\", ret);\n    }\n    return ret;\n}\n\n\n/*\n * Browsing\n */\n\n/**************************************************************************\n *              WNetDeviceMode       [USER.514]\n */\nWORD WINAPI WNetDeviceMode16( HWND16 hWndOwner )\n{\n    FIXME( \"(%04x): stub\\n\", hWndOwner );\n    return WN16_NOT_SUPPORTED;\n}\n\n/**************************************************************************\n *              WNetBrowseDialog       [USER.515]\n */\nWORD WINAPI WNetBrowseDialog16( HWND16 hParent, WORD nType, LPSTR szPath )\n{\n    FIXME( \"(%04x, %x, %s): stub\\n\", hParent, nType, szPath );\n    return WN16_NOT_SUPPORTED;\n}\n\n/********************************************************************\n *              WNetConnectDialog       [USER.525]\n */\nWORD WINAPI WNetConnectDialog16( HWND16 hWndParent, WORD iType )\n{\n    return map_wnet16_status(WNetConnectionDialog(HWND_32(hWndParent), iType));\n}\n\n/**************************************************************************\n *              WNetDisconnectDialog       [USER.526]\n */\nWORD WINAPI WNetDisconnectDialog16( HWND16 hwndOwner, WORD iType )\n{\n    return map_wnet16_status(WNetDisconnectDialog(HWND_32(hwndOwner), iType));\n}\n\n/**************************************************************************\n *              WNetConnectionDialog     [USER.527]\n */\nWORD WINAPI WNetConnectionDialog16( HWND16 hWndParent, WORD iType )\n{\n    return map_wnet16_status(WNetConnectionDialog(HWND_32(hWndParent), iType));\n}\n\n/**************************************************************************\n *              WNetViewQueueDialog       [USER.528]\n */\nWORD WINAPI WNetViewQueueDialog16( HWND16 hwndOwner, LPSTR lpszQueue )\n{\n    FIXME(\" (%04x, %s): stub\\n\", hwndOwner, debugstr_a(lpszQueue) );\n    return WN16_NOT_SUPPORTED;\n}\n\n/**************************************************************************\n *              WNetPropertyDialog       [USER.529]\n */\nWORD WINAPI WNetPropertyDialog16( HWND16 hwndParent, WORD iButton,\n                                  WORD nPropSel, LPSTR lpszName, WORD nType )\n{\n    FIXME( \"(%04x, %x, %x, %s, %x ): stub\\n\",\n          hwndParent, iButton, nPropSel, debugstr_a(lpszName), nType );\n    return WN16_NOT_SUPPORTED;\n}\n\n/**************************************************************************\n *              WNetGetPropertyText       [USER.532]\n */\nWORD WINAPI WNetGetPropertyText16( WORD iButton, WORD nPropSel, LPSTR lpszName,\n                                   LPSTR lpszButtonName, WORD cbButtonName, WORD nType )\n{\n    FIXME( \"(%04x, %04x, %s, %s, %04x): stub\\n\",\n           iButton, nPropSel, debugstr_a(lpszName), debugstr_a(lpszButtonName), nType);\n    return WN16_NOT_SUPPORTED;\n}\n\n\n/*\n * Admin\n */\n\n/*********************************************************************\n *  WNetGetDirectoryType [USER.530]  Decides whether resource is local\n *\n * RETURNS\n *    on success,  puts one of the following in *lpType:\n * - WNDT_NETWORK   on a network\n * - WNDT_LOCAL     local\n */\nWORD WINAPI WNetGetDirectoryType16( LPSTR lpName, LPINT16 lpType )\n{\n    UINT type = GetDriveTypeA(lpName);\n    if ( type == DRIVE_NO_ROOT_DIR )\n        type = GetDriveTypeA(NULL);\n\n    *lpType = (type == DRIVE_REMOTE)? WNDT_NETWORK : WNDT_NORMAL;\n\n    TRACE( \"%s is %s\\n\", debugstr_a(lpName),\n           (*lpType == WNDT_NETWORK)? \"WNDT_NETWORK\" : \"WNDT_NORMAL\" );\n    return WN16_SUCCESS;\n}\n\n/**************************************************************************\n *              WNetDirectoryNotify       [USER.531]\n */\nWORD WINAPI WNetDirectoryNotify16( HWND16 hwndOwner, LPSTR lpDir, WORD wOper )\n{\n    FIXME( \"(%04x, %s, %s): stub\\n\", hwndOwner, debugstr_a(lpDir),\n           (wOper == WNDN_MKDIR)? \"WNDN_MKDIR\" :\n           (wOper == WNDN_MVDIR)? \"WNDN_MVDIR\" :\n           (wOper == WNDN_RMDIR)? \"WNDN_RMDIR\" : \"unknown\" );\n    return WN16_NOT_SUPPORTED;\n}\n\n\n/*\n * Error handling\n */\n\n/**************************************************************************\n *              WNetGetError       [USER.519]\n */\nWORD WINAPI WNetGetError16( LPINT16 nError )\n{\n    FIXME( \"(%p): stub\\n\", nError );\n    return WN16_NOT_SUPPORTED;\n}\n\n/**************************************************************************\n *              WNetGetErrorText       [USER.520]\n */\nWORD WINAPI WNetGetErrorText16( WORD nError, LPSTR lpBuffer, LPINT16 nBufferSize )\n{\n    FIXME( \"(%x, %p, %p): stub\\n\", nError, lpBuffer, nBufferSize );\n    return WN16_NET_ERROR;\n}\n\n/**************************************************************************\n *              WNetErrorText       [USER.499]\n */\nWORD WINAPI WNetErrorText16( WORD nError, LPSTR lpszText, WORD cbText )\n{\n    LPCSTR str = wnet16_status_error_string(nError);\n    SIZE_T len;\n    if (!str || !cbText)\n        return FALSE;\n    len = min(cbText, strlen(str) + 1);\n    memcpy(lpszText, str, len);\n    lpszText[len] = 0;\n    return TRUE;\n}\n"
  },
  {
    "path": "user/stub.c",
    "content": "#include \"wine/debug.h\"\n#include \"user_private.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(user);\n\nPDrawCaptionTempA DrawCaptionTempA;\nPScrollChildren ScrollChildren;\nPCalcChildScroll CalcChildScroll;\nPSetInternalWindowPos SetInternalWindowPos;\nPSetSystemMenu SetSystemMenu;\nPKillSystemTimer KillSystemTimer;\nPSetSystemTimer SetSystemTimer;\nPSetDeskWallPaper SetDeskWallPaper;\nPUserRealizePalette UserRealizePalette;\nPUserRegisterWowHandlers UserRegisterWowHandlers;\n\nvoid WINAPI CalcChildScrollImpl(HWND hWnd, INT n)\n{\n    FIXME(\"CalcChildScrollImpl(%p, %d)\\n\", hWnd, n);\n}\n\nvoid load_user32_functions()\n{\n#define LOAD_FUNC(dll, name) name = (P##name)GetProcAddress(GetModuleHandleA(dll), #name);\n#define LOAD_FUNC_FUNC(dll, name, defaultfunc) LOAD_FUNC(dll, name); if(!name) name = defaultfunc;\n\tDrawCaptionTempA = (PDrawCaptionTempA)GetProcAddress(GetModuleHandleA(\"USER32.DLL\"), \"DrawCaptionTempA\");\n\n\tLOAD_FUNC(\"USER32.DLL\", ScrollChildren);\n\tLOAD_FUNC_FUNC(\"USER32.DLL\", CalcChildScroll, CalcChildScrollImpl);\n\tLOAD_FUNC(\"USER32.DLL\", SetInternalWindowPos);\n\tLOAD_FUNC(\"USER32.DLL\", SetSystemMenu);\n\tLOAD_FUNC(\"USER32.DLL\", KillSystemTimer);\n\tLOAD_FUNC(\"USER32.DLL\", SetSystemTimer);\n\tLOAD_FUNC(\"USER32.DLL\", SetDeskWallPaper);\n\tLOAD_FUNC(\"USER32.DLL\", UserRealizePalette);\n\tLOAD_FUNC(\"USER32.DLL\", UserRegisterWowHandlers);\n\treturn;\n}\n\n/***********************************************************************\n *\t\tSignalProc32 (USER.391)\n *\t\tUserSignalProc (USER32.@)\n *\n * The exact meaning of the USER signals is undocumented, but this\n * should cover the basic idea:\n *\n * USIG_DLL_UNLOAD_WIN16\n *     This is sent when a 16-bit module is unloaded.\n *\n * USIG_DLL_UNLOAD_WIN32\n *     This is sent when a 32-bit module is unloaded.\n *\n * USIG_DLL_UNLOAD_ORPHANS\n *     This is sent after the last Win3.1 module is unloaded,\n *     to allow removal of orphaned menus.\n *\n * USIG_FAULT_DIALOG_PUSH\n * USIG_FAULT_DIALOG_POP\n *     These are called to allow USER to prepare for displaying a\n *     fault dialog, even though the fault might have happened while\n *     inside a USER critical section.\n *\n * USIG_THREAD_INIT\n *     This is called from the context of a new thread, as soon as it\n *     has started to run.\n *\n * USIG_THREAD_EXIT\n *     This is called, still in its context, just before a thread is\n *     about to terminate.\n *\n * USIG_PROCESS_CREATE\n *     This is called, in the parent process context, after a new process\n *     has been created.\n *\n * USIG_PROCESS_INIT\n *     This is called in the new process context, just after the main thread\n *     has started execution (after the main thread's USIG_THREAD_INIT has\n *     been sent).\n *\n * USIG_PROCESS_LOADED\n *     This is called after the executable file has been loaded into the\n *     new process context.\n *\n * USIG_PROCESS_RUNNING\n *     This is called immediately before the main entry point is called.\n *\n * USIG_PROCESS_EXIT\n *     This is called in the context of a process that is about to\n *     terminate (but before the last thread's USIG_THREAD_EXIT has\n *     been sent).\n *\n * USIG_PROCESS_DESTROY\n *     This is called after a process has terminated.\n *\n *\n * The meaning of the dwFlags bits is as follows:\n *\n * USIG_FLAGS_WIN32\n *     Current process is 32-bit.\n *\n * USIG_FLAGS_GUI\n *     Current process is a (Win32) GUI process.\n *\n * USIG_FLAGS_FEEDBACK\n *     Current process needs 'feedback' (determined from the STARTUPINFO\n *     flags STARTF_FORCEONFEEDBACK / STARTF_FORCEOFFFEEDBACK).\n *\n * USIG_FLAGS_FAULT\n *     The signal is being sent due to a fault.\n */\nWORD WINAPI UserSignalProc(UINT uCode, DWORD dwThreadOrProcessID,\n\tDWORD dwFlags, HMODULE16 hModule)\n{\n\tFIXME(\"(%04x, %08x, %04x, %04x)\\n\",\n\t\tuCode, dwThreadOrProcessID, dwFlags, hModule);\n\t/* FIXME: Should chain to GdiSignalProc now. */\n\treturn 0;\n}\n\n/* wine adb926d5a5032130d55e4d39316efdb11cc1fe1d/dlls/gdi32/font.c */\n/***********************************************************************\n *           GdiGetCharDimensions    (GDI32.@)\n *\n * Gets the average width of the characters in the English alphabet.\n *\n * PARAMS\n *  hdc    [I] Handle to the device context to measure on.\n *  lptm   [O] Pointer to memory to store the text metrics into.\n *  height [O] On exit, the maximum height of characters in the English alphabet.\n *\n * RETURNS\n *  The average width of characters in the English alphabet.\n *\n * NOTES\n *  This function is used by the dialog manager to get the size of a dialog\n *  unit. It should also be used by other pieces of code that need to know\n *  the size of a dialog unit in logical units without having access to the\n *  window handle of the dialog.\n *  Windows caches the font metrics from this function, but we don't and\n *  there doesn't appear to be an immediate advantage to do so.\n *\n * SEE ALSO\n *  GetTextExtentPointW, GetTextMetricsW, MapDialogRect.\n */\nLONG WINAPI GdiGetCharDimensions(HDC hdc, LPTEXTMETRICW lptm, LONG *height)\n{\n    SIZE sz;\n    static const WCHAR alphabet[] = {\n        'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q',\n        'r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H',\n        'I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',0};\n\n    if(lptm && !GetTextMetricsW(hdc, lptm)) return 0;\n\n    if(!GetTextExtentPointW(hdc, alphabet, 52, &sz)) return 0;\n\n    if (height) *height = sz.cy;\n    return (sz.cx / 26 + 1) / 2;\n}\n"
  },
  {
    "path": "user/user.c",
    "content": "/*\n * Misc 16-bit USER functions\n *\n * Copyright 1993, 1996 Alexandre Julliard\n * Copyright 2002 Patrik Stridvall\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n#include <stdlib.h>\n#include <stdio.h>\n#include <string.h>\n#include <math.h>\n\n#define OEMRESOURCE\n\n#include \"wine/winuser16.h\"\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wownt32.h\"\n#include \"user_private.h\"\n#include \"wine/list.h\"\n#include \"wine/debug.h\"\n#include \"winver.h\"\n#define COBJMACROS\n#include \"shldisp.h\"\n#include \"wine/exception.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(user);\n\n/* handle to handle 16 conversions */\n#define HANDLE_16(h32)\t\tHWND_16(h32) /* (LOWORD(h32)) */\n#define HGDIOBJ_16(h32)\t\tHDC_16(h32) /* (LOWORD(h32)) */\n\n/* handle16 to handle conversions */\n#define HANDLE_32(h16)\t\tHWND_32(h16) /* ((HANDLE)(ULONG_PTR)(h16)) */\n#define HGDIOBJ_32(h16)\t\tHDC_32(h16) /* ((HGDIOBJ)(ULONG_PTR)(h16)) */\n\n#define IS_MENU_STRING_ITEM(flags) \\\n    (((flags) & (MF_STRING | MF_BITMAP | MF_OWNERDRAW | MF_SEPARATOR)) == MF_STRING)\n\n/* UserSeeUserDo parameters */\n#define USUD_LOCALALLOC        0x0001\n#define USUD_LOCALFREE         0x0002\n#define USUD_LOCALCOMPACT      0x0003\n#define USUD_LOCALHEAP         0x0004\n#define USUD_FIRSTCLASS        0x0005\n\n#define CID_RESOURCE  0x0001\n#define CID_WIN32     0x0004\n#define CID_NONSHARED 0x0008\n\nWORD USER_HeapSel = 0;  /* USER heap selector */\n\nstatic HINSTANCE16 gdi_inst;\n\nstruct gray_string_info\n{\n    GRAYSTRINGPROC16 proc;\n    LPARAM           param;\n    char             str[1];\n};\n/* KRNL386 */\nBOOL16 WINAPI IsOldWindowsTask(HINSTANCE16 hInst);\n\n/* callback for 16-bit gray string proc with opaque pointer */\nstatic BOOL CALLBACK gray_string_callback( HDC hdc, LPARAM param, INT len )\n{\n    const struct gray_string_info *info = (struct gray_string_info *)param;\n    WORD args[4];\n    DWORD ret;\n\n    args[3] = HDC_16(hdc);\n    args[2] = HIWORD(info->param);\n    args[1] = LOWORD(info->param);\n    args[0] = len;\n    WOWCallback16Ex( (DWORD)info->proc, WCB16_PASCAL, sizeof(args), args, &ret );\n    return LOWORD(ret);\n}\n\n/* callback for 16-bit gray string proc with string pointer */\nstatic BOOL CALLBACK gray_string_callback_ptr( HDC hdc, LPARAM param, INT len )\n{\n    const struct gray_string_info *info = CONTAINING_RECORD( (void *)param, struct gray_string_info, str );\n    return gray_string_callback( hdc, (LPARAM)info, len );\n}\n\nstruct draw_state_info\n{\n    DRAWSTATEPROC16 proc;\n    LPARAM          param;\n};\n\n/* callback for 16-bit DrawState functions */\nstatic BOOL CALLBACK draw_state_callback( HDC hdc, LPARAM lparam, WPARAM wparam, int cx, int cy )\n{\n    const struct draw_state_info *info = (struct draw_state_info *)lparam;\n    WORD args[6];\n    DWORD ret;\n\n    args[5] = HDC_16(hdc);\n    args[4] = HIWORD(info->param);\n    args[3] = LOWORD(info->param);\n    args[2] = wparam;\n    args[1] = cx;\n    args[0] = cy;\n    WOWCallback16Ex( (DWORD)info->proc, WCB16_PASCAL, sizeof(args), args, &ret );\n    return LOWORD(ret);\n}\n\n/* This function is a copy of the one in objects/font.c */\nstatic void logfont_32_to_16( const LOGFONTA* font32, LPLOGFONT16 font16 )\n{\n    font16->lfHeight = font32->lfHeight;\n    font16->lfWidth = font32->lfWidth;\n    font16->lfEscapement = font32->lfEscapement;\n    font16->lfOrientation = font32->lfOrientation;\n    font16->lfWeight = font32->lfWeight;\n    font16->lfItalic = font32->lfItalic;\n    font16->lfUnderline = font32->lfUnderline;\n    font16->lfStrikeOut = font32->lfStrikeOut;\n    font16->lfCharSet = font32->lfCharSet;\n    font16->lfOutPrecision = font32->lfOutPrecision;\n    font16->lfClipPrecision = font32->lfClipPrecision;\n    font16->lfQuality = font32->lfQuality;\n    font16->lfPitchAndFamily = font32->lfPitchAndFamily;\n    lstrcpynA( font16->lfFaceName, font32->lfFaceName, LF_FACESIZE );\n    //SYSTEM FONT\n    //lstrcpynA(font16->lfFaceName, \"SYSTEM\", LF_FACESIZE);\n}\n\nstatic int get_bitmap_width_bytes( int width, int bpp )\n{\n    switch(bpp)\n    {\n    case 1:\n        return 2 * ((width+15) / 16);\n    case 4:\n        return 2 * ((width+3) / 4);\n    case 24:\n        width *= 3;\n        /* fall through */\n    case 8:\n        return width + (width & 1);\n    case 16:\n    case 15:\n        return width * 2;\n    case 32:\n        return width * 4;\n    default:\n        WARN(\"Unknown depth %d, please report.\\n\", bpp );\n    }\n    return -1;\n}\n\nstatic HPALETTE realizedpal = 0;\n\nint WINAPI set_realized_palette(HDC hdc)\n{\n    HPALETTE hpal = GetCurrentObject(hdc, OBJ_PAL);\n    if (!hpal)\n        return 0;\n    realizedpal = hpal;\n    return GetPaletteEntries(hpal, 0, 0, NULL); //TODO: adjust palette for usage\n}\n\nHPALETTE WINAPI get_realized_palette()\n{\n    if (!realizedpal || (GetObjectType(realizedpal) != OBJ_PAL))\n    {\n        realizedpal = 0;\n        return GetStockObject(DEFAULT_PALETTE);\n    }\n    return realizedpal;\n}\n\n\n/***********************************************************************\n * Helper for wsprintf16\n */\n\n#define WPRINTF_LEFTALIGN   0x0001  /* Align output on the left ('-' prefix) */\n#define WPRINTF_PREFIX_HEX  0x0002  /* Prefix hex with 0x ('#' prefix) */\n#define WPRINTF_ZEROPAD     0x0004  /* Pad with zeros ('0' prefix) */\n#define WPRINTF_LONG        0x0008  /* Long arg ('l' prefix) */\n#define WPRINTF_SHORT       0x0010  /* Short arg ('h' prefix) */\n#define WPRINTF_UPPER_HEX   0x0020  /* Upper-case hex ('X' specifier) */\n\ntypedef enum\n{\n    WPR_UNKNOWN,\n    WPR_CHAR,\n    WPR_STRING,\n    WPR_SIGNED,\n    WPR_UNSIGNED,\n    WPR_HEXA\n} WPRINTF_TYPE;\n\ntypedef struct\n{\n    UINT         flags;\n    UINT         width;\n    UINT         precision;\n    WPRINTF_TYPE type;\n} WPRINTF_FORMAT;\n\nstatic INT parse_format( LPCSTR format, WPRINTF_FORMAT *res )\n{\n    LPCSTR p = format;\n\n    res->flags = 0;\n    res->width = 0;\n    res->precision = 0;\n    if (*p == '-') { res->flags |= WPRINTF_LEFTALIGN; p++; }\n    if (*p == '#') { res->flags |= WPRINTF_PREFIX_HEX; p++; }\n    if (*p == '0') { res->flags |= WPRINTF_ZEROPAD; p++; }\n    while ((*p >= '0') && (*p <= '9'))  /* width field */\n    {\n        res->width = res->width * 10 + *p - '0';\n        p++;\n    }\n    if (*p == '.')  /* precision field */\n    {\n        p++;\n        while ((*p >= '0') && (*p <= '9'))\n        {\n            res->precision = res->precision * 10 + *p - '0';\n            p++;\n        }\n    }\n    if (*p == 'l') { res->flags |= WPRINTF_LONG; p++; }\n    else if (*p == 'h') { res->flags |= WPRINTF_SHORT; p++; }\n    switch(*p)\n    {\n    case 'c':\n    case 'C':  /* no Unicode in Win16 */\n        res->type = WPR_CHAR;\n        break;\n    case 's':\n    case 'S':\n        res->type = WPR_STRING;\n        break;\n    case 'd':\n    case 'i':\n        res->type = WPR_SIGNED;\n        break;\n    case 'u':\n        res->type = WPR_UNSIGNED;\n        break;\n    case 'p':\n        res->width = 8;\n        res->flags |= WPRINTF_ZEROPAD;\n        /* fall through */\n    case 'X':\n        res->flags |= WPRINTF_UPPER_HEX;\n        /* fall through */\n    case 'x':\n        res->type = WPR_HEXA;\n        break;\n    default: /* unknown format char */\n        res->type = WPR_UNKNOWN;\n        p--;  /* print format as normal char */\n        break;\n    }\n    return (INT)(p - format) + 1;\n}\n\n\n/**********************************************************************\n * Management of the 16-bit cursors and icons\n */\n\nstruct cache_entry\n{\n    struct list entry;\n    HINSTANCE16 inst;\n    HRSRC16     rsrc;\n    HRSRC16     group;\n    HICON16     icon;\n    INT         count;\n};\n\nstatic struct list icon_cache = LIST_INIT( icon_cache );\n\nstatic const WORD ICON_HOTSPOT = 0x4242;\n\nstatic HICON16 alloc_icon_handle( unsigned int size )\n{\n    HGLOBAL16 handle = GlobalAlloc16( GMEM_MOVEABLE, size + sizeof(ULONG_PTR) );\n    char *ptr = GlobalLock16( handle );\n    memset( ptr + size, 0, sizeof(ULONG_PTR) );\n    GlobalUnlock16( handle );\n    FarSetOwner16( handle, 0 );\n    return handle;\n}\n\nstatic CURSORICONINFO *get_icon_ptr( HICON16 handle )\n{\n    return GlobalLock16( handle );\n}\n\nstatic void release_icon_ptr( HICON16 handle, CURSORICONINFO *ptr )\n{\n    GlobalUnlock16( handle );\n}\n\nstatic HICON store_icon_32( HICON16 icon16, HICON icon )\n{\n    HICON ret = 0;\n    CURSORICONINFO *ptr = get_icon_ptr( icon16 );\n\n    if (ptr)\n    {\n        unsigned int and_size = ptr->nHeight * get_bitmap_width_bytes( ptr->nWidth, 1 );\n        unsigned int xor_size = ptr->nHeight * get_bitmap_width_bytes( ptr->nWidth, ptr->bBitsPerPixel );\n        if (GlobalSize16( icon16 ) >= sizeof(*ptr) + sizeof(ULONG_PTR) + and_size + xor_size )\n        {\n            memcpy( &ret, (char *)(ptr + 1) + and_size + xor_size, sizeof(ret) );\n            memcpy( (char *)(ptr + 1) + and_size + xor_size, &icon, sizeof(icon) );\n            wow_handlers32.set_icon_param( icon, icon16 );\n        }\n        release_icon_ptr( icon16, ptr );\n    }\n    return ret;\n}\n\nstatic int free_icon_handle( HICON16 handle )\n{\n    HICON icon32;\n\n    if ((icon32 = wow_handlers32.get_icon_param( handle ))) DestroyIcon( icon32 );\n    wow_handlers32.set_icon_param( handle, 0);\n    return GlobalFree16( handle );\n}\n\n/* retrieve the 32-bit counterpart of a 16-bit icon, creating it if needed */\nHICON get_icon_32( HICON16 icon16 )\n{\n    HICON ret = 0;\n    CURSORICONINFO *ptr = get_icon_ptr( icon16 );\n\n    if (ptr)\n    {\n        unsigned int and_size = ptr->nHeight * get_bitmap_width_bytes( ptr->nWidth, 1 );\n        unsigned int xor_size = ptr->nHeight * get_bitmap_width_bytes( ptr->nWidth, ptr->bBitsPerPixel );\n        if (GlobalSize16( icon16 ) >= sizeof(*ptr) + sizeof(ULONG_PTR) + xor_size + and_size )\n        {\n            memcpy( &ret, (char *)(ptr + 1) + xor_size + and_size, sizeof(ret) );\n            if (!ret)\n            {\n                ICONINFO iinfo;\n\n                iinfo.fIcon = (ptr->ptHotSpot.x == ICON_HOTSPOT) && (ptr->ptHotSpot.y == ICON_HOTSPOT);\n                iinfo.xHotspot = ptr->ptHotSpot.x;\n                iinfo.yHotspot = ptr->ptHotSpot.y;\n                if ((ptr->bBitsPerPixel * ptr->bPlanes) > 1)\n                {\n                    iinfo.hbmMask  = CreateBitmap( ptr->nWidth, ptr->nHeight, 1, 1, ptr + 1 );\n                    iinfo.hbmColor = CreateBitmap( ptr->nWidth, ptr->nHeight, ptr->bPlanes, ptr->bBitsPerPixel,\n                                               (char *)(ptr + 1) + and_size );\n                }\n                else\n                {\n                    iinfo.hbmMask  = CreateBitmap( ptr->nWidth, ptr->nHeight * 2, 1, 1, ptr + 1 );\n                    iinfo.hbmColor = NULL;\n                }\n                ret = CreateIconIndirect( &iinfo );\n                DeleteObject( iinfo.hbmMask );\n                if (iinfo.hbmColor)\n                    DeleteObject( iinfo.hbmColor );\n                memcpy( (char *)(ptr + 1) + xor_size + and_size, &ret, sizeof(ret) );\n                wow_handlers32.set_icon_param( ret, icon16 );\n            }\n        }\n        release_icon_ptr( icon16, ptr );\n    }\n    return ret;\n}\n\nstruct hicons\n{\n    HICON oldicon;\n    HICON newicon;\n};\n\nBOOL CALLBACK enum_cur_wnd(HWND hwnd, LPARAM lparam)\n{\n    struct hicons *icons = (struct hicons *)lparam;\n    if (GetClassLongA(hwnd, GCL_HCURSOR) == icons->oldicon)\n        SetClassLongA(hwnd, GCL_HCURSOR, icons->newicon);\n    return TRUE;\n}\n\nvoid regen_icon(HICON16 icon)\n{\n    CURSORICONINFO *ptr = get_icon_ptr( icon );\n    if (ptr)\n    {\n        unsigned int and_size = ptr->nHeight * get_bitmap_width_bytes( ptr->nWidth, 1 );\n        unsigned int xor_size = ptr->nHeight * get_bitmap_width_bytes( ptr->nWidth, ptr->bBitsPerPixel );\n        if (GlobalSize16( icon ) >= sizeof(*ptr) + sizeof(ULONG_PTR) + xor_size + and_size )\n        {\n            DWORD *hiconptr = (DWORD *)((char *)(ptr + 1) + xor_size + and_size);\n            HICON oldicon = *(HICON *)hiconptr, newicon;\n            if (oldicon)\n            {\n                *hiconptr = 0;\n                if (newicon = get_icon_32(icon))\n                {\n                    struct hicons icons = {oldicon, newicon};\n                    // TODO: all window classes\n                    EnumThreadWindows(GetCurrentThreadId(), enum_cur_wnd, (LPARAM)&icons);\n                    if (GetCursor() == oldicon)\n                        SetCursor(newicon);\n                    DestroyIcon(oldicon);\n                }\n                else\n                    *hiconptr = oldicon;\n            }\n        }\n    }\n}\n        \n\n/* retrieve the 16-bit counterpart of a 32-bit icon, creating it if needed */\nHICON16 get_icon_16( HICON icon )\n{\n    HICON16 ret = wow_handlers32.get_icon_param( icon );\n\n    if (!ret)\n    {\n        ICONINFO info;\n        BITMAP bm;\n        UINT and_size, xor_size;\n        void *xor_bits = NULL, *and_bits;\n        CURSORICONINFO cinfo;\n\n        if (!(GetIconInfo( icon, &info ))) return 0;\n        GetObjectW( info.hbmMask, sizeof(bm), &bm );\n        and_size = bm.bmHeight * bm.bmWidthBytes;\n        if (!(and_bits = HeapAlloc( GetProcessHeap(), 0, and_size ))) goto done;\n        GetBitmapBits( info.hbmMask, and_size, and_bits );\n        if (info.hbmColor)\n        {\n            GetObjectW( info.hbmColor, sizeof(bm), &bm );\n            xor_size = bm.bmHeight * bm.bmWidthBytes;\n            if (!(xor_bits = HeapAlloc( GetProcessHeap(), 0, xor_size ))) goto done;\n            GetBitmapBits( info.hbmColor, xor_size, xor_bits );\n        }\n        else\n        {\n            bm.bmHeight /= 2;\n            xor_bits = (char *)and_bits + and_size / 2;\n        }\n        if (!info.fIcon)\n        {\n            cinfo.ptHotSpot.x = info.xHotspot;\n            cinfo.ptHotSpot.y = info.yHotspot;\n        }\n        else cinfo.ptHotSpot.x = cinfo.ptHotSpot.y = ICON_HOTSPOT;\n\n        cinfo.nWidth        = bm.bmWidth;\n        cinfo.nHeight       = bm.bmHeight;\n        cinfo.nWidthBytes   = bm.bmWidthBytes;\n        cinfo.bPlanes       = bm.bmPlanes;\n        cinfo.bBitsPerPixel = bm.bmBitsPixel;\n\n        if ((ret = CreateCursorIconIndirect16( 0, &cinfo, and_bits, xor_bits )))\n            store_icon_32( ret, icon );\n\n    done:\n        if (info.hbmColor)\n        {\n            HeapFree( GetProcessHeap(), 0, xor_bits );\n            DeleteObject( info.hbmColor );\n        }\n        HeapFree( GetProcessHeap(), 0, and_bits );\n        DeleteObject( info.hbmMask );\n    }\n    return ret;\n}\n\nstatic void add_shared_icon( HINSTANCE16 inst, HRSRC16 rsrc, HRSRC16 group, HICON16 icon )\n{\n    struct cache_entry *cache = HeapAlloc( GetProcessHeap(), 0, sizeof(*cache) );\n\n    if (!cache) return;\n    cache->inst  = inst;\n    cache->rsrc  = rsrc;\n    cache->group = group;\n    cache->icon  = icon;\n    cache->count = 1;\n    list_add_tail( &icon_cache, &cache->entry );\n}\n\nstatic HICON16 find_shared_icon( HINSTANCE16 inst, HRSRC16 rsrc )\n{\n    struct cache_entry *cache;\n\n    LIST_FOR_EACH_ENTRY( cache, &icon_cache, struct cache_entry, entry )\n    {\n        if (cache->inst != inst || cache->rsrc != rsrc) continue;\n        cache->count++;\n        return cache->icon;\n    }\n    return 0;\n}\n\nstatic int release_shared_icon( HICON16 icon )\n{\n    struct cache_entry *cache;\n\n    LIST_FOR_EACH_ENTRY( cache, &icon_cache, struct cache_entry, entry )\n    {\n        if (cache->icon != icon) continue;\n        if (!cache->count) return 0;\n        return --cache->count;\n    }\n    return -1;\n}\n\nstatic void free_module_icons( HINSTANCE16 inst )\n{\n    struct cache_entry *cache, *next;\n\n    LIST_FOR_EACH_ENTRY_SAFE( cache, next, &icon_cache, struct cache_entry, entry )\n    {\n        if (cache->inst != inst) continue;\n        list_remove( &cache->entry );\n        free_icon_handle( cache->icon );\n        HeapFree( GetProcessHeap(), 0, cache );\n    }\n}\n\n/**********************************************************************\n * Management of the 16-bit clipboard formats\n */\n\nstruct clipboard_format\n{\n    struct list entry;\n    UINT        format;\n    HANDLE16    data;\n};\n\nstatic struct list clipboard_formats = LIST_INIT( clipboard_formats );\n\nstatic void set_clipboard_format( UINT format, HANDLE16 data )\n{\n    struct clipboard_format *fmt;\n\n    /* replace it if it exists already */\n    LIST_FOR_EACH_ENTRY( fmt, &clipboard_formats, struct clipboard_format, entry )\n    {\n        if (fmt->format != format) continue;\n        GlobalFree16( fmt->data );\n        fmt->data = data;\n        return;\n    }\n\n    if ((fmt = HeapAlloc( GetProcessHeap(), 0, sizeof(*fmt) )))\n    {\n        fmt->format = format;\n        fmt->data = data;\n        list_add_tail( &clipboard_formats, &fmt->entry );\n    }\n}\n\nstatic void free_clipboard_formats(void)\n{\n    struct list *head;\n\n    while ((head = list_head( &clipboard_formats )))\n    {\n        struct clipboard_format *fmt = LIST_ENTRY( head, struct clipboard_format, entry );\n        list_remove( &fmt->entry );\n        GlobalFree16( fmt->data );\n        HeapFree( GetProcessHeap(), 0, fmt );\n    }\n}\n\n\n/***********************************************************************\n *\t\tOldExitWindows (USER.2)\n */\nvoid WINAPI OldExitWindows16(void)\n{\n    ExitWindows16(0, 0);\n}\n\n\nHQUEUE16 hqFirst;\n/**********************************************************************\n *\t\tInitApp (USER.5)\n */\nINT16 WINAPI InitApp16( HINSTANCE16 hInstance )\n{\n    HGLOBAL hqueue = GlobalAlloc16(GMEM_ZEROINIT | GMEM_SHARE, 0x120);\n    QUEUE16 *queue;\n    TDB *tdb = (TDB*)GlobalLock16(GetCurrentTask());\n    tdb->hQueue = hqueue;\n    queue = (QUEUE16*)GlobalLock16(hqueue);\n    if (!hqFirst)\n    {\n        hqFirst = hqueue;\n    }\n    else\n    {\n        queue->next = hqFirst;\n        hqFirst = hqueue;\n    }\n    queue->hTask = GetCurrentTask();\n    queue->cbMessage = 0x16;\n    queue->read = 0x6e;\n    queue->write = 0x6e;\n    queue->cbSize = 0x11e;\n    queue->expVer = tdb->version;\n    void install_global_hook();\n    install_global_hook();\n    /* Create task message queue */\n    return (InitThreadInput16( 0, 0 ) != 0);\n}\n\nstatic DWORD WINAPI exit_thread(LPVOID param)\n{\n    IShellDispatch *shelldisp;\n    HRESULT hres;\n    CoInitialize(NULL);\n    hres = CoCreateInstance(&CLSID_Shell, NULL, CLSCTX_INPROC_SERVER, &IID_IShellDispatch, (void **)&shelldisp);\n    if (SUCCEEDED(hres))\n    {\n        IShellDispatch_ShutdownWindows(shelldisp);\n        IShellDispatch_Release(shelldisp);\n    }\n    CoUninitialize();\n    return 0;\n}\n\n\n/***********************************************************************\n *\t\tExitWindows (USER.7)\n */\nBOOL16 WINAPI ExitWindows16( DWORD dwReturnCode, UINT16 wReserved )\n{\n    HANDLE exitth = CreateThread(NULL, 0, exit_thread, 0, 0, NULL);\n    WaitForSingleObject(exitth, INFINITE);\n    CloseHandle(exitth);\n    ExitProcess(0);\n}\n\n\n/***********************************************************************\n *\t\tGetTimerResolution (USER.14)\n */\nLONG WINAPI GetTimerResolution16(void)\n{\n    return (1000);\n}\n\n\n/***********************************************************************\n *\t\tClipCursor (USER.16)\n */\nBOOL16 WINAPI ClipCursor16( const RECT16 *rect )\n{\n    RECT rect32;\n\n    if (!rect) return ClipCursor( NULL );\n    rect32.left   = rect->left;\n    rect32.top    = rect->top;\n    rect32.right  = rect->right;\n    rect32.bottom = rect->bottom;\n    return ClipCursor( &rect32 );\n}\n\n\n/***********************************************************************\n *\t\tGetCursorPos (USER.17)\n */\nBOOL16 WINAPI GetCursorPos16( POINT16 *pt )\n{\n    POINT pos;\n    if (!pt) return FALSE;\n    GetCursorPos(&pos);\n    pt->x = pos.x;\n    pt->y = pos.y;\n    return TRUE;\n}\n\n\n/*******************************************************************\n *\t\tAnyPopup (USER.52)\n */\nBOOL16 WINAPI AnyPopup16(void)\n{\n    return AnyPopup();\n}\n\n\n/***********************************************************************\n *\t\tSetCursor (USER.69)\n */\nHCURSOR16 WINAPI SetCursor16(HCURSOR16 hCursor)\n{\n  return get_icon_16( SetCursor( get_icon_32(hCursor) ));\n}\n\n\n/***********************************************************************\n *\t\tSetCursorPos (USER.70)\n */\nvoid WINAPI SetCursorPos16( INT16 x, INT16 y )\n{\n    SetCursorPos( x, y );\n}\n\n\n/***********************************************************************\n *\t\tShowCursor (USER.71)\n */\nINT16 WINAPI ShowCursor16(BOOL16 bShow)\n{\n  return ShowCursor(bShow);\n}\n\n\n/***********************************************************************\n *\t\tSetRect (USER.72)\n */\nvoid WINAPI SetRect16( LPRECT16 rect, INT16 left, INT16 top, INT16 right, INT16 bottom )\n{\n    rect->left   = left;\n    rect->right  = right;\n    rect->top    = top;\n    rect->bottom = bottom;\n}\n\n\n/***********************************************************************\n *\t\tSetRectEmpty (USER.73)\n */\nvoid WINAPI SetRectEmpty16( LPRECT16 rect )\n{\n    rect->left = rect->right = rect->top = rect->bottom = 0;\n}\n\n\n/***********************************************************************\n *\t\tCopyRect (USER.74)\n */\nBOOL16 WINAPI CopyRect16( RECT16 *dest, const RECT16 *src )\n{\n    __TRY\n    {\n        *dest = *src;\n    }\n    __EXCEPT_ALL\n    {\n        return FALSE;\n    }\n    __ENDTRY\n    return TRUE;\n}\n\n\n/***********************************************************************\n *\t\tIsRectEmpty (USER.75)\n *\n * Bug compat: Windows checks for 0 or negative width/height.\n */\nBOOL16 WINAPI IsRectEmpty16( const RECT16 *rect )\n{\n    BOOL16 ret;\n    __TRY\n    {\n        ret = ((rect->left >= rect->right) || (rect->top >= rect->bottom));\n    }\n    __EXCEPT_ALL\n    {\n        ret = TRUE;\n    }\n    __ENDTRY\n    return ret;\n}\n\n\n/***********************************************************************\n *\t\tPtInRect (USER.76)\n */\nBOOL16 WINAPI PtInRect16( const RECT16 *rect, POINT16 pt )\n{\n    if (IsRectEmpty16(rect))\n        return FALSE;\n    return ((pt.x >= rect->left) && (pt.x < rect->right) &&\n            (pt.y >= rect->top) && (pt.y < rect->bottom));\n}\n\n\n/***********************************************************************\n *\t\tOffsetRect (USER.77)\n */\nvoid WINAPI OffsetRect16( LPRECT16 rect, INT16 x, INT16 y )\n{\n    rect->left   += x;\n    rect->right  += x;\n    rect->top    += y;\n    rect->bottom += y;\n}\n\n\n/***********************************************************************\n *\t\tInflateRect (USER.78)\n */\nvoid WINAPI InflateRect16( LPRECT16 rect, INT16 x, INT16 y )\n{\n    rect->left   -= x;\n    rect->top    -= y;\n    rect->right  += x;\n    rect->bottom += y;\n}\n\n\n/***********************************************************************\n *\t\tIntersectRect (USER.79)\n */\nBOOL16 WINAPI IntersectRect16( LPRECT16 dest, const RECT16 *src1,\n                               const RECT16 *src2 )\n{\n    if (IsRectEmpty16(src1) || IsRectEmpty16(src2) ||\n        (src1->left >= src2->right) || (src2->left >= src1->right) ||\n        (src1->top >= src2->bottom) || (src2->top >= src1->bottom))\n    {\n        SetRectEmpty16( dest );\n        return FALSE;\n    }\n    dest->left   = max( src1->left, src2->left );\n    dest->right  = min( src1->right, src2->right );\n    dest->top    = max( src1->top, src2->top );\n    dest->bottom = min( src1->bottom, src2->bottom );\n    return TRUE;\n}\n\n\n/***********************************************************************\n *\t\tUnionRect (USER.80)\n */\nBOOL16 WINAPI UnionRect16( LPRECT16 dest, const RECT16 *src1,\n                           const RECT16 *src2 )\n{\n    if (IsRectEmpty16(src1))\n    {\n        if (IsRectEmpty16(src2))\n        {\n            SetRectEmpty16( dest );\n            return FALSE;\n        }\n        else *dest = *src2;\n    }\n    else\n    {\n        if (IsRectEmpty16(src2)) *dest = *src1;\n        else\n        {\n            dest->left   = min( src1->left, src2->left );\n            dest->right  = max( src1->right, src2->right );\n            dest->top    = min( src1->top, src2->top );\n            dest->bottom = max( src1->bottom, src2->bottom );\n        }\n    }\n    return TRUE;\n}\n\n\n/***********************************************************************\n *\t\tFillRect (USER.81)\n * NOTE\n *   The Win16 variant doesn't support special color brushes like\n *   the Win32 one, despite the fact that Win16, as well as Win32,\n *   supports special background brushes for a window class.\n */\nINT16 WINAPI FillRect16( HDC16 hdc, const RECT16 *rect, HBRUSH16 hbrush )\n{\n\t/*RECT r32;\n\tr32.bottom = rect->bottom;\n\tr32.left = rect->left;\n\tr32.right = rect->right;\n\tr32.top = rect->top;\n\tHBRUSH hb = HBRUSH_32(hbrush);\n\tHDC hd = HDC_32(hdc);\n\tint ret = FillRect(hd, &r32, hb);\n\treturn ret;*/\n    HBRUSH prevBrush;\n    HBRUSH hbrush32 = HBRUSH_32(hbrush);\n    HDC hdc32 = HDC_32(hdc);\n\n    if (!(prevBrush = SelectObject( hdc32, hbrush32 ))) return 0;\n\n    if (krnl386_get_compat_mode(\"256color\") && krnl386_get_config_int(\"otvdm\", \"DIBPalette\", FALSE) && (GetDeviceCaps(hdc32, TECHNOLOGY) == DT_RASDISPLAY))\n    {\n        DIBSECTION dib;\n        HBITMAP hbmp = GetCurrentObject(hdc32, OBJ_BITMAP);\n        int count = GetObject(hbmp, sizeof(DIBSECTION), &dib);\n        if ((count == sizeof(DIBSECTION)) && (dib.dsBmih.biBitCount == 8) && !dib.dshSection && (GetPtr16(HBITMAP_16(hbmp), 1) == 0xd1b00001))\n        {\n            LOGBRUSH lb;\n            count = GetObject(hbrush32, sizeof(LOGBRUSH), &lb);\n            if ((count == sizeof(LOGBRUSH)) && (lb.lbStyle == BS_SOLID) && ((lb.lbColor >> 24) == 1))\n            {\n                HBRUSH newbrush = CreateSolidBrush((lb.lbColor & 0xff) | 0x10ff0000);\n                SelectObject( hdc32, newbrush );\n                PatBlt( hdc32, rect->left, rect->top,\n                        rect->right - rect->left, rect->bottom - rect->top, PATCOPY );\n                SelectObject( hdc32, prevBrush );\n                DeleteObject( newbrush );\n                return 1;\n            }\n        }\n    }        \n\n    /* coordinates are logical so we cannot fast-check 'rect',\n     * it will be done later in the PatBlt().\n     */\n    PatBlt( hdc32, rect->left, rect->top,\n              rect->right - rect->left, rect->bottom - rect->top, PATCOPY );\n    SelectObject( hdc32, prevBrush );\n    return 1;\n}\n\n\n/***********************************************************************\n *\t\tInvertRect (USER.82)\n */\nvoid WINAPI InvertRect16( HDC16 hdc, const RECT16 *rect )\n{\n    PatBlt( HDC_32(hdc), rect->left, rect->top,\n              rect->right - rect->left, rect->bottom - rect->top, DSTINVERT );\n}\n\n\n/***********************************************************************\n *\t\tFrameRect (USER.83)\n */\nINT16 WINAPI FrameRect16( HDC16 hdc, const RECT16 *rect16, HBRUSH16 hbrush )\n{\n    RECT rect;\n\n    rect.left   = rect16->left;\n    rect.top    = rect16->top;\n    rect.right  = rect16->right;\n    rect.bottom = rect16->bottom;\n    return FrameRect( HDC_32(hdc), &rect, HBRUSH_32(hbrush) );\n}\n\n\n/***********************************************************************\n *\t\tDrawIcon (USER.84)\n */\nBOOL16 WINAPI DrawIcon16(HDC16 hdc, INT16 x, INT16 y, HICON16 hIcon)\n{\n  return DrawIcon(HDC_32(hdc), x, y, get_icon_32(hIcon) );\n}\n\n\n/***********************************************************************\n *           DrawText    (USER.85)\n */\nINT16 WINAPI DrawText16( HDC16 hdc, LPCSTR str, INT16 count, LPRECT16 rect, UINT16 flags )\n{\n    INT16 ret;\n\n    __TRY\n    {\n        if (rect)\n        {\n            RECT rect32;\n\n            rect32.left   = rect->left;\n            rect32.top    = rect->top;\n            rect32.right  = rect->right;\n            rect32.bottom = rect->bottom;\n            ret = DrawTextA( HDC_32(hdc), str, count, &rect32, flags );\n            rect->left   = rect32.left;\n            rect->top    = rect32.top;\n            rect->right  = rect32.right;\n            rect->bottom = rect32.bottom;\n        }\n        else ret = DrawTextA( HDC_32(hdc), str, count, NULL, flags);\n    }\n    __EXCEPT_ALL\n    {\n        ret = 0;\n    }\n    __ENDTRY\n    return ret;\n}\n\n\n/***********************************************************************\n *\t\tIconSize (USER.86)\n *\n * See \"Undocumented Windows\". Used by W2.0 paint.exe.\n */\nDWORD WINAPI IconSize16(void)\n{\n  return MAKELONG(GetSystemMetrics(SM_CYICON), GetSystemMetrics(SM_CXICON));\n}\n\n\n/***********************************************************************\n *\t\tAdjustWindowRect (USER.102)\n */\nBOOL16 WINAPI AdjustWindowRect16( LPRECT16 rect, DWORD style, BOOL16 menu )\n{\n    return AdjustWindowRectEx16( rect, style, menu, 0 );\n}\n\n\n/***********************************************************************\n *\t\tMessageBeep (USER.104)\n */\nvoid WINAPI MessageBeep16( UINT16 i )\n{\n    MessageBeep( i );\n}\n\n\n/**************************************************************************\n *\t\tCloseClipboard (USER.138)\n */\nBOOL16 WINAPI CloseClipboard16(void)\n{\n    BOOL ret = CloseClipboard();\n    /* Clipboard data is still kept after calling CloseClipboard */\n    if (0)\n    {\n        if (ret) free_clipboard_formats();\n    }\n    return ret;\n}\n\n\n/**************************************************************************\n *\t\tEmptyClipboard (USER.139)\n */\nBOOL16 WINAPI EmptyClipboard16(void)\n{\n    BOOL ret = EmptyClipboard();\n    if (ret) free_clipboard_formats();\n    return ret;\n}\n\nHANDLE convert_cb_data_16_32(int format, HANDLE16 data16, BOOL set_format)\n{\n    HANDLE data32 = 0;\n    switch (format)\n    {\n    case CF_BITMAP:\n    {\n        DIBSECTION dib;\n        data32 = HGDIOBJ_32(data16);\n        if (GetObject(data32, sizeof(DIBSECTION), &dib) == sizeof(DIBSECTION))\n        {\n            HDC hdcsrc = CreateCompatibleDC(NULL);\n            HDC hdcdst = CreateCompatibleDC(NULL);\n            HDC hdc = GetDC(NULL);\n            HBITMAP hbmp = CreateCompatibleBitmap(hdc, dib.dsBm.bmWidth, dib.dsBm.bmHeight);\n            ReleaseDC(NULL, hdc);\n            HBITMAP oldhbmpsrc = SelectObject(hdcsrc, data32);\n            HBITMAP oldhbmpdst = SelectObject(hdcdst, hbmp);\n            BitBlt(hdcdst, 0, 0, dib.dsBm.bmWidth, dib.dsBm.bmHeight, hdcsrc, 0, 0, SRCCOPY);\n            SelectObject(hdcsrc, oldhbmpsrc);\n            SelectObject(hdcdst, oldhbmpdst);\n            DeleteDC(hdcsrc);\n            DeleteDC(hdcdst);\n            DeleteObject(data32);\n            data32 = hbmp;\n        }\n        break;\n    }\n    case CF_PALETTE:\n        data32 = HGDIOBJ_32( data16 );\n        break;\n\n    case CF_METAFILEPICT:\n    {\n        METAHEADER *header;\n        METAFILEPICT *pict32;\n        METAFILEPICT16 *pict16 = GlobalLock16( data16 );\n\n        if (pict16)\n        {\n            if (!(data32 = GlobalAlloc( GMEM_MOVEABLE, sizeof(*pict32) ))) return 0;\n            pict32 = GlobalLock( data32 );\n            pict32->mm = pict16->mm;\n            pict32->xExt = pict16->xExt;\n            pict32->yExt = pict16->yExt;\n            header = GlobalLock16( pict16->hMF );\n            pict32->hMF = SetMetaFileBitsEx( header->mtSize * 2, (BYTE *)header );\n            GlobalUnlock16( pict16->hMF );\n            GlobalUnlock( data32 );\n        }\n        if (set_format)\n            set_clipboard_format( format, data16 );\n        break;\n    }\n\n    case CF_ENHMETAFILE:\n        FIXME( \"enhmetafile not supported in 16-bit\\n\" );\n        return 0;\n\n    default:\n        if (format >= CF_GDIOBJFIRST && format <= CF_GDIOBJLAST)\n            data32 = HGDIOBJ_32( data16 );\n        else if (format >= CF_PRIVATEFIRST && format <= CF_PRIVATELAST)\n            data32 = HANDLE_32( data16 );\n        else\n        {\n            UINT size = GlobalSize16( data16 );\n            void *ptr32, *ptr16 = GlobalLock16( data16 );\n            if (ptr16)\n            {\n                if (!(data32 = GlobalAlloc( GMEM_MOVEABLE, size ))) return 0;\n                ptr32 = GlobalLock( data32 );\n                memcpy( ptr32, ptr16, size );\n                GlobalUnlock( data32 );\n            }\n            if (set_format)\n                set_clipboard_format( format, data16 );\n        }\n        break;\n    }\n    return data32;\n}\n\n\n/**************************************************************************\n *\t\tSetClipboardData (USER.141)\n */\nHANDLE16 WINAPI SetClipboardData16( UINT16 format, HANDLE16 data16 )\n{\n    if (!SetClipboardData( format, convert_cb_data_16_32(format, data16, TRUE) )) return 0;\n    return data16;\n}\n\nHANDLE16 convert_cb_data_32_16(int format, HANDLE data32, BOOL set_format)\n{\n    UINT size;\n    HANDLE16 data16 = 0;\n    void *ptr;\n    switch (format)\n    {\n    case CF_BITMAP:\n    case CF_PALETTE:\n        data16 = HGDIOBJ_16( data32 );\n        break;\n\n    case CF_METAFILEPICT:\n    {\n        METAFILEPICT16 *pict16;\n        METAFILEPICT *pict32 = GlobalLock( data32 );\n\n        if (pict32)\n        {\n            if (!(data16 = GlobalAlloc16( GMEM_MOVEABLE, sizeof(*pict16) ))) return 0;\n            pict16 = GlobalLock16( data16 );\n            pict16->mm   = pict32->mm;\n            pict16->xExt = pict32->xExt;\n            pict16->yExt = pict32->yExt;\n            size = GetMetaFileBitsEx( pict32->hMF, 0, NULL );\n            pict16->hMF = GlobalAlloc16( GMEM_MOVEABLE, size );\n            ptr = GlobalLock16( pict16->hMF );\n            GetMetaFileBitsEx( pict32->hMF, size, ptr );\n            GlobalUnlock16( pict16->hMF );\n            GlobalUnlock16( data16 );\n            if (set_format)\n                set_clipboard_format( format, data16 );\n        }\n        break;\n    }\n\n    case CF_ENHMETAFILE:\n        FIXME( \"enhmetafile not supported in 16-bit\\n\" );\n        return 0;\n\n    default:\n        if (format >= CF_GDIOBJFIRST && format <= CF_GDIOBJLAST)\n            data16 = HGDIOBJ_16( data32 );\n        else if (format >= CF_PRIVATEFIRST && format <= CF_PRIVATELAST)\n            data16 = HANDLE_16( data32 );\n        else\n        {\n            void *ptr16, *ptr32 = GlobalLock( data32 );\n            if (ptr32)\n            {\n                size = GlobalSize( data32 );\n                if (!(data16 = GlobalAlloc16( GMEM_MOVEABLE, size ))) return 0;\n                ptr16 = GlobalLock16( data16 );\n                memcpy( ptr16, ptr32, size );\n                GlobalUnlock16( data16 );\n                if (set_format)\n                    set_clipboard_format( format, data16 );\n            }\n        }\n        break;\n    }\n    return data16;\n}\n    \n\n/**************************************************************************\n *\t\tGetClipboardData (USER.142)\n */\nHANDLE16 WINAPI GetClipboardData16( UINT16 format )\n{\n    HANDLE data32 = GetClipboardData( format );\n\n    if (!data32) return 0;\n    return convert_cb_data_32_16(format, data32, TRUE);\n}\n\n\n/**************************************************************************\n *\t\tCountClipboardFormats (USER.143)\n */\nINT16 WINAPI CountClipboardFormats16(void)\n{\n    return CountClipboardFormats();\n}\n\n\n/**************************************************************************\n *\t\tEnumClipboardFormats (USER.144)\n */\nUINT16 WINAPI EnumClipboardFormats16( UINT16 id )\n{\n    return EnumClipboardFormats( id );\n}\n\n\n/**************************************************************************\n *\t\tRegisterClipboardFormat (USER.145)\n */\nUINT16 WINAPI RegisterClipboardFormat16( LPCSTR name )\n{\n    return RegisterClipboardFormatA( name );\n}\n\n\n/**************************************************************************\n *\t\tGetClipboardFormatName (USER.146)\n */\nINT16 WINAPI GetClipboardFormatName16( UINT16 id, LPSTR buffer, INT16 maxlen )\n{\n    return GetClipboardFormatNameA( id, buffer, maxlen );\n}\n\n\n/**********************************************************************\n *\t    LoadMenu    (USER.150)\n */\nHMENU16 WINAPI LoadMenu16( HINSTANCE16 instance, LPCSTR name )\n{\n    HRSRC16 hRsrc;\n    HGLOBAL16 handle;\n    HMENU16 hMenu;\n\n    if (HIWORD(name) && name[0] == '#') name = ULongToPtr(atoi( name + 1 ));\n    if (!name) return 0;\n\n    instance = GetExePtr( instance );\n    if (!(hRsrc = FindResource16( instance, name, (LPSTR)RT_MENU ))) return 0;\n    if (!(handle = LoadResource16( instance, hRsrc ))) return 0;\n    hMenu = LoadMenuIndirect16(K32WOWGlobalLock16(handle));\n    FreeResource16( handle );\n    return hMenu;\n}\n\n\n/**********************************************************************\n *         CreateMenu    (USER.151)\n */\nHMENU16 WINAPI CreateMenu16(void)\n{\n    return HMENU_16( CreateMenu() );\n}\n\n\n/**********************************************************************\n *         DestroyMenu    (USER.152)\n */\nBOOL16 WINAPI DestroyMenu16( HMENU16 hMenu )\n{\n    return DestroyMenu( HMENU_32(hMenu) );\n}\n\n\n/*******************************************************************\n *         ChangeMenu    (USER.153)\n */\nBOOL16 WINAPI ChangeMenu16( HMENU16 hMenu, UINT16 pos, SEGPTR data,\n                            UINT16 id, UINT16 flags )\n{\n    if (flags & MF_APPEND) return AppendMenu16( hMenu, flags & ~MF_APPEND, id, data );\n\n    /* FIXME: Word passes the item id in 'pos' and 0 or 0xffff as id */\n    /* for MF_DELETE. We should check the parameters for all others */\n    /* MF_* actions also (anybody got a doc on ChangeMenu?). */\n\n    if (flags & MF_DELETE) return DeleteMenu16(hMenu, pos, flags & ~MF_DELETE);\n    if (flags & MF_CHANGE) return ModifyMenu16(hMenu, pos, flags & ~MF_CHANGE, id, data );\n    if (flags & MF_REMOVE) return RemoveMenu16(hMenu, flags & MF_BYPOSITION ? pos : id,\n                                               flags & ~MF_REMOVE );\n    /* Default: MF_INSERT */\n    return InsertMenu16( hMenu, pos, flags, id, data );\n}\n\n\n/*******************************************************************\n *         CheckMenuItem    (USER.154)\n */\nBOOL16 WINAPI CheckMenuItem16( HMENU16 hMenu, UINT16 id, UINT16 flags )\n{\n    return CheckMenuItem( HMENU_32(hMenu), id, flags );\n}\n\n\n/**********************************************************************\n *         EnableMenuItem    (USER.155)\n */\nBOOL16 WINAPI EnableMenuItem16( HMENU16 hMenu, UINT16 wItemID, UINT16 wFlags )\n{\n    return EnableMenuItem( HMENU_32(hMenu), wItemID, wFlags );\n}\n\n\n/**********************************************************************\n *         GetSubMenu    (USER.159)\n */\nHMENU16 WINAPI GetSubMenu16( HMENU16 hMenu, INT16 nPos )\n{\n    return HMENU_16( GetSubMenu( HMENU_32(hMenu), nPos ) );\n}\n\n\n/*******************************************************************\n *         GetMenuString    (USER.161)\n */\nINT16 WINAPI GetMenuString16( HMENU16 hMenu, UINT16 wItemID,\n                              LPSTR str, INT16 nMaxSiz, UINT16 wFlags )\n{\n    return GetMenuStringA( HMENU_32(hMenu), wItemID, str, nMaxSiz, wFlags );\n}\n\n\nstatic BOOL is_builtin_winhlp32_stub()\n{\n    WCHAR windir[MAX_PATH];\n    WCHAR winhlp32[MAX_PATH];\n    static BOOL is_stub = FALSE;\n    static BOOL detected;\n    DWORD ret;\n    if (detected)\n        return is_stub;\n    detected = TRUE;\n    GetSystemWindowsDirectoryW(windir, MAX_PATH);\n    ret = SearchPathW(windir, L\"winhlp32.exe\", NULL, MAX_PATH, winhlp32, NULL);\n    if (ret && ret < MAX_PATH)\n    {\n        DWORD size = GetFileVersionInfoSizeW(winhlp32, NULL);\n        LPVOID vd = HeapAlloc(GetProcessHeap(), 0, size);\n#ifndef FILE_VER_GET_NEUTRAL\n#define FILE_VER_GET_NEUTRAL 0x02\n#endif\n#ifndef GetFileVersionInfoSizeEx\n        typedef BOOL (WINAPI*GetFileVersionInfoExW_t)(LPCWSTR lptstrFilename, LPDWORD lpdwHandle, DWORD dwHandle,DWORD dwLen, LPVOID lpData);\n        static GetFileVersionInfoExW_t GetFileVersionInfoExW;\n        if (!GetFileVersionInfoExW)\n        {\n            GetFileVersionInfoExW = (GetFileVersionInfoExW_t)GetProcAddress(GetModuleHandleA(\"version\"), \"GetFileVersionInfoExW\");\n        }\n#endif\n        if (GetFileVersionInfoExW(FILE_VER_GET_NEUTRAL, winhlp32, 0, size, vd))\n        {\n            WCHAR *internalname = NULL;\n            UINT ulen;\n            if (VerQueryValueW(vd, L\"\\\\StringFileInfo\\\\040904B0\\\\InternalName\", &internalname, &ulen))\n            {\n                if (!memcmp(internalname, L\"WINHSTB\", sizeof(L\"WINHSTB\")))\n                {\n                    is_stub = TRUE;\n                }\n            }\n        }\n        HeapFree(GetProcessHeap(), 0, vd);\n    }\n    return is_stub;\n}\n//winhelp.c\nBOOL WINAPI wine_WinHelp16A(HWND16 hWnd, LPCSTR lpHelpFile, UINT wCommand, DWORD_PTR dwData, BOOL *success_exec);\nBOOL WINAPI wine_WinHelp32A(HWND hWnd, LPCSTR lpHelpFile, UINT wCommand, ULONG_PTR dwData, BOOL *success_exec);\n/**********************************************************************\n *\t\tWinHelp (USER.171)\n */\nBOOL16 WINAPI WinHelp16( HWND16 hWnd, LPCSTR lpHelpFile, UINT16 wCommand,\n                         DWORD dwData )\n{\n    BOOL ret;\n    DWORD mutex_count;\n    BOOL success_exec = FALSE;\n    //trying to 16bit WINHELP.EXE\n    switch (wCommand)\n    {\n        case HELP_CONTEXT:\n        case HELP_SETCONTENTS:\n        case HELP_CONTENTS:\n        case HELP_CONTEXTPOPUP:\n        case HELP_FORCEFILE:\n        case HELP_HELPONHELP:\n        case HELP_FINDER:\n        case HELP_QUIT:\n            break;\n        case HELP_KEY:\n        case HELP_PARTIALKEY:\n        case HELP_COMMAND:\n        case HELP_SETWINPOS:\n        case HELP_MULTIKEY:\n            dwData = (DWORD)MapSL(dwData);\n            break;\n        default:\n            FIXME(\"Unknown help command %d\\n\",wCommand);\n            return FALSE;\n    }\n    ret = wine_WinHelp16A(hWnd, lpHelpFile, wCommand, dwData, &success_exec);\n    if (!success_exec)\n    {\n        if (!is_builtin_winhlp32_stub())\n        {\n            /* FIXME: some programs expect WinHelp not to yield. (wCommand=HELP_QUIT) */\n            ReleaseThunkLock(&mutex_count);\n            ret = WinHelpA(WIN_Handle32(hWnd), lpHelpFile, wCommand, dwData);\n            RestoreThunkLock(mutex_count);\n        }\n        else\n        {\n            ret = wine_WinHelp32A(WIN_Handle32(hWnd), lpHelpFile, wCommand, dwData, &success_exec);\n            if (!success_exec)\n            {\n                /* FIXME: some programs expect WinHelp not to yield. (wCommand=HELP_QUIT) */\n                ReleaseThunkLock(&mutex_count);\n                ret = WinHelpA(WIN_Handle32(hWnd), lpHelpFile, wCommand, dwData);\n                RestoreThunkLock(mutex_count);\n            }\n        }\n    }\n\n    return ret;\n}\n\n\n/***********************************************************************\n *\t\tLoadCursor (USER.173)\n */\nHCURSOR16 WINAPI LoadCursor16(HINSTANCE16 hInstance, LPCSTR name)\n{\n    return LoadImage16( hInstance, name, IMAGE_CURSOR, 0, 0, LR_SHARED | LR_DEFAULTSIZE );\n}\n\n\n/***********************************************************************\n *\t\tLoadIcon (USER.174)\n */\nHICON16 WINAPI LoadIcon16(HINSTANCE16 hInstance, LPCSTR name)\n{\n    return LoadImage16( hInstance, name, IMAGE_ICON, 0, 0, LR_SHARED | LR_DEFAULTSIZE );\n}\n\n/**********************************************************************\n *\t\tLoadBitmap (USER.175)\n */\nHBITMAP16 WINAPI LoadBitmap16(HINSTANCE16 hInstance, LPCSTR name)\n{\n    return LoadImage16( hInstance, name, IMAGE_BITMAP, 0, 0, 0 );\n}\n\n/**********************************************************************\n *     LoadString   (USER.176)\n */\nINT16 WINAPI LoadString16( HINSTANCE16 instance, UINT16 resource_id, LPSTR buffer, INT16 buflen )\n{\n    HGLOBAL16 hmem = 0;\n    HRSRC16 hrsrc;\n    unsigned char *p;\n    int string_num;\n    int ret;\n\n    TRACE(\"inst=%04x id=%04x buff=%p len=%d\\n\", instance, resource_id, buffer, buflen);\n\n    hrsrc = FindResource16( instance, MAKEINTRESOURCEA((resource_id>>4)+1), (LPSTR)RT_STRING );\n    if (!hrsrc) return 0;\n    hmem = LoadResource16( instance, hrsrc );\n    if (!hmem) return 0;\n    __TRY\n    {\n        if (buflen && buffer)\n            buffer[0] = 0;\n\n        p = LockResource16(hmem);\n        string_num = resource_id & 0x000f;\n        while (string_num--) p += *p + 1;\n\n        if (buffer == NULL) ret = *p;\n        else\n        {\n            ret = min(buflen - 1, *p);\n            if (ret > 0)\n            {\n                memcpy(buffer, p + 1, ret);\n                buffer[ret] = '\\0';\n            }\n            else if (buflen > 1)\n            {\n                buffer[0] = '\\0';\n                ret = 0;\n            }\n            TRACE( \"%s loaded\\n\", debugstr_a(buffer));\n        }\n    }\n    __EXCEPT_ALL\n    {\n        ret = 0;\n    }\n    __ENDTRY\n\n    FreeResource16( hmem );\n    return ret;\n}\n\n/**********************************************************************\n *              LoadAccelerators  (USER.177)\n */\nHACCEL16 WINAPI LoadAccelerators16(HINSTANCE16 instance, LPCSTR lpTableName)\n{\n    HRSRC16 hRsrc;\n    HGLOBAL16 hMem;\n    ACCEL16 *table16;\n    HACCEL ret = 0;\n\n    TRACE(\"%04x %s\\n\", instance, debugstr_a(lpTableName) );\n\n    if (!(hRsrc = FindResource16( instance, lpTableName, (LPSTR)RT_ACCELERATOR )) ||\n        !(hMem = LoadResource16(instance,hRsrc)))\n    {\n        WARN(\"couldn't find %04x %s\\n\", instance, debugstr_a(lpTableName));\n        return 0;\n    }\n    if ((table16 = LockResource16( hMem )))\n    {\n        DWORD i, count = SizeofResource16( instance, hRsrc ) / sizeof(*table16);\n        ACCEL *table = HeapAlloc( GetProcessHeap(), 0, count * sizeof(*table) );\n        if (table)\n        {\n            for (i = 0; i < count; i++)\n            {\n                table[i].fVirt = table16[i].fVirt & 0x7f;\n                table[i].key   = table16[i].key;\n                table[i].cmd   = table16[i].cmd;\n                if (table16[i].fVirt & 0x80)\n                {\n                    count = i + 1;\n                    break;\n                }\n            }\n            ret = CreateAcceleratorTableA( table, count );\n            HeapFree( GetProcessHeap(), 0, table );\n        }\n    }\n    FreeResource16( hMem );\n    return HACCEL_16(ret);\n}\n\n/***********************************************************************\n *\t\tGetSystemMetrics (USER.179)\n */\nINT16 WINAPI GetSystemMetrics16( INT16 index )\n{\n    static BOOL init_fix_screen_size;\n    static BOOL fix_screen_size;\n    if (!init_fix_screen_size)\n    {\n        init_fix_screen_size = TRUE;\n        fix_screen_size = krnl386_get_config_int(\"otvdm\", \"FixScreenSize\", FALSE);\n    }\n    /* Fix the size of the screen to the value considering taskbar. */\n    if (fix_screen_size && (index == SM_CXSCREEN || index == SM_CYSCREEN))\n    {\n        RECT point;\n        if (SystemParametersInfoA(SPI_GETWORKAREA, 0, &point, FALSE))\n        {\n            if (index == SM_CXSCREEN)\n            {\n                return point.right - point.left;\n            }\n            if (index == SM_CYSCREEN)\n            {\n                return point.bottom - point.top;\n            }\n        }\n    }\n    if (krnl386_get_compat_mode(\"640X480\"))\n    {\n        switch (index)\n        {\n            case SM_CXSCREEN:\n            case SM_CXFULLSCREEN:\n                return 640;\n            case SM_CYSCREEN:\n                return 480;\n            case SM_CYFULLSCREEN:\n                return 480 - GetSystemMetrics(SM_CYMIN);\n        }\n    }\n        \n    return GetSystemMetrics( index );\n}\n\n\n/*************************************************************************\n *\t\tGetSysColor (USER.180)\n */\nCOLORREF WINAPI GetSysColor16( INT16 index )\n{\n    return GetSysColor( index );\n}\n\n\n/*************************************************************************\n *\t\tSetSysColors (USER.181)\n */\nVOID WINAPI SetSysColors16( INT16 count, const INT16 *list16, const COLORREF *values )\n{\n    INT i, *list;\n\n    if ((list = HeapAlloc( GetProcessHeap(), 0, count * sizeof(*list) )))\n    {\n        for (i = 0; i < count; i++) list[i] = list16[i];\n        SetSysColors( count, list, values );\n        HeapFree( GetProcessHeap(), 0, list );\n    }\n}\n\n\n/***********************************************************************\n *           GrayString   (USER.185)\n */\nBOOL16 WINAPI GrayString16( HDC16 hdc, HBRUSH16 hbr, GRAYSTRINGPROC16 gsprc,\n                            LPARAM lParam, INT16 cch, INT16 x, INT16 y,\n                            INT16 cx, INT16 cy )\n{\n    BOOL ret;\n\n    if (!gsprc) return GrayStringA( HDC_32(hdc), HBRUSH_32(hbr), NULL,\n                                    (LPARAM)MapSL(lParam), cch, x, y, cx, cy );\n\n    if (cch == -1 || (cch && cx && cy))\n    {\n        /* lParam can be treated as an opaque pointer */\n        struct gray_string_info info;\n\n        info.proc  = gsprc;\n        info.param = lParam;\n        ret = GrayStringA( HDC_32(hdc), HBRUSH_32(hbr), gray_string_callback,\n                           (LPARAM)&info, cch, x, y, cx, cy );\n    }\n    else  /* here we need some string conversions */\n    {\n        char *str16 = MapSL(lParam);\n        struct gray_string_info *info;\n\n        if (!cch) cch = strlen(str16);\n        info = HeapAlloc( GetProcessHeap(), 0, FIELD_OFFSET( struct gray_string_info, str[cch] ));\n        if (!info) return FALSE;\n        info->proc  = gsprc;\n        info->param = lParam;\n        memcpy( info->str, str16, cch );\n        ret = GrayStringA( HDC_32(hdc), HBRUSH_32(hbr), gray_string_callback_ptr,\n                           (LPARAM)info->str, cch, x, y, cx, cy );\n        HeapFree( GetProcessHeap(), 0, info );\n    }\n    return ret;\n}\n\n\n/***********************************************************************\n *\t\tSwapMouseButton (USER.186)\n */\nBOOL16 WINAPI SwapMouseButton16( BOOL16 fSwap )\n{\n    return SwapMouseButton( fSwap );\n}\n\n\n/**************************************************************************\n *\t\tIsClipboardFormatAvailable (USER.193)\n */\nBOOL16 WINAPI IsClipboardFormatAvailable16( UINT16 wFormat )\n{\n    return IsClipboardFormatAvailable( wFormat );\n}\n\n\n/***********************************************************************\n *           TabbedTextOut    (USER.196)\n */\nLONG WINAPI TabbedTextOut16( HDC16 hdc, INT16 x, INT16 y, LPCSTR lpstr,\n                             INT16 count, INT16 nb_tabs, const INT16 *tabs16, INT16 tab_org )\n{\n    LONG ret;\n    INT i, *tabs = HeapAlloc( GetProcessHeap(), 0, nb_tabs * sizeof(*tabs) );\n    if (!tabs) return 0;\n    for (i = 0; i < nb_tabs; i++) tabs[i] = tabs16[i];\n    ret = TabbedTextOutA( HDC_32(hdc), x, y, lpstr, count, nb_tabs, tabs, tab_org );\n    HeapFree( GetProcessHeap(), 0, tabs );\n    return ret;\n}\n\n\nvoid check_font_rotation(HDC hdc, SIZE *box)\n{\n    if (LOWORD(LOBYTE(GetVersion())) >= 0x6)\n    {\n        HFONT hfont = GetCurrentObject(hdc, OBJ_FONT);\n        TEXTMETRICA tm;\n        GetTextMetricsA(hdc, &tm);\n        if((tm.tmPitchAndFamily & (TMPF_VECTOR | TMPF_TRUETYPE)) != TMPF_VECTOR)\n            return;\n        LOGFONT lfont;\n        GetObject(hfont, sizeof(LOGFONT), &lfont);\n        if (lfont.lfEscapement == lfont.lfOrientation)\n        {\n            int angle = lfont.lfEscapement % 1800;\n            const float d2r = 3.14159265358979323846 / 1800;\n            if (angle)\n            {\n                int x = box->cx, y = box->cy;\n                box->cx = (y * cosf((900 - angle) * d2r)) + (x * fabsf(cosf(angle * d2r)));\n                box->cy = (x * cosf((900 - angle) * d2r)) + (y * fabsf(cosf(angle * d2r)));\n            }\n        }\n    }\n}\n\n/***********************************************************************\n *           GetTabbedTextExtent    (USER.197)\n */\nDWORD WINAPI GetTabbedTextExtent16( HDC16 hdc, LPCSTR lpstr, INT16 count,\n                                    INT16 nb_tabs, const INT16 *tabs16 )\n{\n    LONG ret;\n    HDC hdc32 = HDC_32(hdc);\n    INT i, *tabs = HeapAlloc( GetProcessHeap(), 0, nb_tabs * sizeof(*tabs) );\n    if (!tabs) return 0;\n    for (i = 0; i < nb_tabs; i++) tabs[i] = tabs16[i];\n    ret = GetTabbedTextExtentA( hdc32, lpstr, count, nb_tabs, tabs );\n    SIZE size = { LOWORD(ret), HIWORD(ret) };\n    check_font_rotation( hdc32, &size );\n    ret = size.cx | (size.cy << 16);\n    HeapFree( GetProcessHeap(), 0, tabs );\n    return ret;\n}\n\n\n/***********************************************************************\n *\t\tUserSeeUserDo (USER.216)\n */\nDWORD WINAPI UserSeeUserDo16(WORD wReqType, WORD wParam1, WORD wParam2, WORD wParam3)\n{\n    STACK16FRAME* stack16 = MapSL((SEGPTR)getWOW32Reserved());\n    HANDLE16 oldDS = stack16->ds;\n    DWORD ret = (DWORD)-1;\n\n    stack16->ds = USER_HeapSel;\n    switch (wReqType)\n    {\n    case USUD_LOCALALLOC:\n        ret = LocalAlloc16(wParam1, wParam3);\n        break;\n    case USUD_LOCALFREE:\n        ret = LocalFree16(wParam1);\n        break;\n    case USUD_LOCALCOMPACT:\n        ret = LocalCompact16(wParam3);\n        break;\n    case USUD_LOCALHEAP:\n        ret = USER_HeapSel;\n        break;\n    case USUD_FIRSTCLASS:\n        FIXME(\"return a pointer to the first window class.\\n\");\n        break;\n    default:\n        WARN(\"wReqType %04x (unknown)\\n\", wReqType);\n    }\n    stack16->ds = oldDS;\n    return ret;\n}\n\n\n/***********************************************************************\n *           LookupMenuHandle   (USER.217)\n */\nHMENU16 WINAPI LookupMenuHandle16( HMENU16 hmenu, INT16 id )\n{\n    FIXME( \"%04x %04x: stub\\n\", hmenu, id );\n    return hmenu;\n}\n\n\nstatic LPCSTR parse_menu_resource( SEGPTR segres, HMENU hMenu, BOOL oldFormat )\n{\n    WORD flags, id = 0;\n    LPCSTR res = MapSL(segres);\n    LPCSTR start = res;\n    LPCSTR str;\n    BOOL end_flag;\n\n    do\n    {\n        /* Windows 3.00 and later use a WORD for the flags, whereas 1.x and 2.x use a BYTE. */\n        if (oldFormat)\n        {\n            flags = GET_BYTE(res);\n            res += sizeof(BYTE);\n        }\n        else\n        {\n            flags = GET_WORD(res);\n            res += sizeof(WORD);\n        }\n\n        end_flag = flags & MF_END;\n        /* Remove MF_END because it has the same value as MF_HILITE */\n        flags &= ~MF_END;\n        if (!(flags & MF_POPUP))\n        {\n            id = GET_WORD(res);\n            res += sizeof(WORD);\n        }\n        str = res;\n        res += strlen(str) + 1;\n        if (flags & MF_OWNERDRAW) str = segres + (str - start);\n        if (flags & MF_POPUP)\n        {\n            HMENU hSubMenu = CreatePopupMenu();\n            if (!hSubMenu) return NULL;\n            if (!(res = parse_menu_resource( segres + (res - start), hSubMenu, oldFormat ))) return NULL;\n            AppendMenuA( hMenu, flags, (UINT_PTR)hSubMenu, str );\n        }\n        else  /* Not a popup */\n        {\n            LPCSTR newitem = flags & MF_OWNERDRAW ? str : (*str ? str : NULL);\n            AppendMenuA( hMenu, flags, id, newitem );\n        }\n    } while (!end_flag);\n    return res;\n}\n\nHMENU WINAPI LoadOldMenuIndirect16(LPCVOID *template)\n{\n    HMENU hMenu;\n    LPCSTR p = *template;\n    if (!(hMenu = CreateMenu())) return 0;\n    while (TRUE)\n    {\n        UINT flag = (UINT)((BYTE)*p++);\n        BOOL end = flag & MF_END;\n        WORD id = 0;\n        if (!(flag & MF_POPUP))\n        {\n            id = GET_WORD(p);\n            p += 2;\n        }\n        SIZE_T len = strlen(p);\n        LPCSTR name = p;\n        p += len + 1;\n        if (len == 0)\n        {\n            flag |= MF_SEPARATOR;\n        }\n        if (flag & MF_POPUP)\n        {\n            AppendMenuA(hMenu, flag & ~MF_END, LoadOldMenuIndirect16(&p), name);\n            if (end)\n            {\n                break;\n            }\n            continue;\n        }\n        AppendMenuA(hMenu, flag & ~MF_END, id, name);\n        if (end)\n        {\n            break;\n        }\n    }\n    *template = p;\n    return hMenu;\n\n}\n/**********************************************************************\n *\t    LoadMenuIndirect    (USER.220)\n */\nHMENU16 WINAPI LoadMenuIndirect16( SEGPTR segtemplate )\n{\n    BOOL oldFormat;\n    HMENU hMenu;\n    WORD version, offset;\n    LPCSTR template = MapSL(segtemplate);\n    LPCSTR p = template;\n\n    TRACE(\"(%p)\\n\", template );\n\n    if (IsOldWindowsTask(GetCurrentTask()))\n    {\n        return HMENU_16(LoadOldMenuIndirect16(&template));\n    }\n\n    /* Windows 1.x and 2.x menus have a slightly different menu format from 3.x menus */\n    oldFormat = (GetExeVersion16() < 0x0300);\n\n    /* Windows 3.00 and later menu items are preceded by a MENUITEMTEMPLATEHEADER structure */\n    if (!oldFormat)\n    {\n        version = GET_WORD(p);\n        p += sizeof(WORD);\n        if (version)\n        {\n            WARN(\"version must be 0 for Win16 >= 3.00 applications\\n\" );\n            return 0;\n        }\n        offset = GET_WORD(p);\n        p += sizeof(WORD) + offset;\n    }\n\n    if (!(hMenu = CreateMenu())) return 0;\n    if (!parse_menu_resource( segtemplate + (p - template), hMenu, oldFormat ))\n    {\n        DestroyMenu( hMenu );\n        return 0;\n    }\n    return HMENU_16(hMenu);\n}\n\n\n/*************************************************************************\n *\t\tScrollDC (USER.221)\n */\nBOOL16 WINAPI ScrollDC16( HDC16 hdc, INT16 dx, INT16 dy, const RECT16 *rect,\n                          const RECT16 *cliprc, HRGN16 hrgnUpdate,\n                          LPRECT16 rcUpdate )\n{\n    RECT rect32, clipRect32, rcUpdate32;\n    BOOL16 ret;\n\n    if (rect)\n    {\n        rect32.left   = rect->left;\n        rect32.top    = rect->top;\n        rect32.right  = rect->right;\n        rect32.bottom = rect->bottom;\n    }\n    if (cliprc)\n    {\n        clipRect32.left   = cliprc->left;\n        clipRect32.top    = cliprc->top;\n        clipRect32.right  = cliprc->right;\n        clipRect32.bottom = cliprc->bottom;\n    }\n    ret = ScrollDC( HDC_32(hdc), dx, dy, rect ? &rect32 : NULL,\n                    cliprc ? &clipRect32 : NULL, HRGN_32(hrgnUpdate),\n                    &rcUpdate32 );\n    if (rcUpdate)\n    {\n        rcUpdate->left   = rcUpdate32.left;\n        rcUpdate->top    = rcUpdate32.top;\n        rcUpdate->right  = rcUpdate32.right;\n        rcUpdate->bottom = rcUpdate32.bottom;\n    }\n    return ret;\n}\n\n\n/***********************************************************************\n *\t\tGetSystemDebugState (USER.231)\n */\nWORD WINAPI GetSystemDebugState16(void)\n{\n    return 0;  /* FIXME */\n}\n\n\n/***********************************************************************\n *\t\tEqualRect (USER.244)\n */\nBOOL16 WINAPI EqualRect16( const RECT16* rect1, const RECT16* rect2 )\n{\n    return ((rect1->left == rect2->left) && (rect1->right == rect2->right) &&\n            (rect1->top == rect2->top) && (rect1->bottom == rect2->bottom));\n}\n\n\n/***********************************************************************\n *\t\tExitWindowsExec (USER.246)\n */\nBOOL16 WINAPI ExitWindowsExec16( LPCSTR lpszExe, LPCSTR lpszParams )\n{\n    TRACE(\"Should run the following in DOS-mode: \\\"%s %s\\\"\\n\",\n          lpszExe, lpszParams);\n    return ExitWindows16(0, 0);\n}\n\n\n/***********************************************************************\n *\t\tGetCursor (USER.247)\n */\nHCURSOR16 WINAPI GetCursor16(void)\n{\n  return get_icon_16( GetCursor() );\n}\n\n\n/**********************************************************************\n *\t\tGetAsyncKeyState (USER.249)\n */\nINT16 WINAPI GetAsyncKeyState16( INT16 key )\n{\n    return GetAsyncKeyState( key );\n}\n\n\n/**********************************************************************\n *         GetMenuState    (USER.250)\n */\nUINT16 WINAPI GetMenuState16( HMENU16 hMenu, UINT16 wItemID, UINT16 wFlags )\n{\n    return GetMenuState( HMENU_32(hMenu), wItemID, wFlags );\n}\n\n\n/**************************************************************************\n *\t\tSendDriverMessage (USER.251)\n */\nLRESULT WINAPI SendDriverMessage16(HDRVR16 hDriver, UINT16 msg, LPARAM lParam1,\n                                   LPARAM lParam2)\n{\n    FIXME(\"(%04x, %04x, %08lx, %08lx): stub\\n\", hDriver, msg, lParam1, lParam2);\n    return 0;\n}\n\n\n/**************************************************************************\n *\t\tOpenDriver (USER.252)\n */\nHDRVR16 WINAPI OpenDriver16(LPCSTR lpDriverName, LPCSTR lpSectionName, LPARAM lParam2)\n{\n    TRACE( \"(%s, %s, %08lx): stub\\n\", debugstr_a(lpDriverName), debugstr_a(lpSectionName), lParam2);\n    static HDRVR16 (WINAPI *DrvOpen16)(LPCSTR, LPCSTR, LPARAM) = NULL;\n    if (!DrvOpen16)\n    {\n        HMODULE mmsystem = GetModuleHandleA(\"mmsystem.dll16\");\n        if (!mmsystem)\n        {\n            ERR(\"mmsystem not loaded\\n\");\n            return 0;\n        }\n        DrvOpen16 = (HDRVR16 (WINAPI *)(LPCSTR, LPCSTR, LPARAM))GetProcAddress(mmsystem, \"DrvOpen16\");\n        if (!DrvOpen16)\n        {\n            ERR(\"DrvOpen16 load error\\n\");\n            return 0;\n        }\n    }\n    return DrvOpen16(lpDriverName, lpSectionName, lParam2);\n}\n\n\n/**************************************************************************\n *\t\tCloseDriver (USER.253)\n */\nLRESULT WINAPI CloseDriver16(HDRVR16 hDrvr, LPARAM lParam1, LPARAM lParam2)\n{\n    FIXME( \"(%04x, %08lx, %08lx): stub\\n\", hDrvr, lParam1, lParam2);\n    return FALSE;\n}\n\n\n/**************************************************************************\n *\t\tGetDriverModuleHandle (USER.254)\n */\nHMODULE16 WINAPI GetDriverModuleHandle16(HDRVR16 hDrvr)\n{\n    FIXME(\"(%04x): stub\\n\", hDrvr);\n    return 0;\n}\n\n\n/**************************************************************************\n *\t\tDefDriverProc (USER.255)\n */\nLRESULT WINAPI DefDriverProc16(DWORD dwDevID, HDRVR16 hDriv, UINT16 wMsg,\n                               LPARAM lParam1, LPARAM lParam2)\n{\n    FIXME( \"devID=0x%08x hDrv=0x%04x wMsg=%04x lP1=0x%08lx lP2=0x%08lx: stub\\n\",\n\t  dwDevID, hDriv, wMsg, lParam1, lParam2);\n    return 0;\n}\n\n\n/**************************************************************************\n *\t\tGetDriverInfo (USER.256)\n */\nstruct DRIVERINFOSTRUCT16;\nBOOL16 WINAPI GetDriverInfo16(HDRVR16 hDrvr, struct DRIVERINFOSTRUCT16 *lpDrvInfo)\n{\n    FIXME( \"(%04x, %p): stub\\n\", hDrvr, lpDrvInfo);\n    return FALSE;\n}\n\n\n/**************************************************************************\n *\t\tGetNextDriver (USER.257)\n */\nHDRVR16 WINAPI GetNextDriver16(HDRVR16 hDrvr, DWORD dwFlags)\n{\n    FIXME( \"(%04x, %08x): stub\\n\", hDrvr, dwFlags);\n    return 0;\n}\n\n\n/**********************************************************************\n *         GetMenuItemCount    (USER.263)\n */\nINT16 WINAPI GetMenuItemCount16( HMENU16 hMenu )\n{\n    return GetMenuItemCount( HMENU_32(hMenu) );\n}\n\n\n/**********************************************************************\n *         GetMenuItemID    (USER.264)\n */\nUINT16 WINAPI GetMenuItemID16( HMENU16 hMenu, INT16 nPos )\n{\n    return GetMenuItemID( HMENU_32(hMenu), nPos );\n}\n\n\n/***********************************************************************\n *\t\tGlobalAddAtom (USER.268)\n */\nATOM WINAPI GlobalAddAtom16(LPCSTR lpString)\n{\n  return GlobalAddAtomA(lpString);\n}\n\n/***********************************************************************\n *\t\tGlobalDeleteAtom (USER.269)\n */\nATOM WINAPI GlobalDeleteAtom16(ATOM nAtom)\n{\n  return GlobalDeleteAtom(nAtom);\n}\n\n/***********************************************************************\n *\t\tGlobalFindAtom (USER.270)\n */\nATOM WINAPI GlobalFindAtom16(LPCSTR lpString)\n{\n  return GlobalFindAtomA(lpString);\n}\n\n/***********************************************************************\n *\t\tGlobalGetAtomName (USER.271)\n */\nUINT16 WINAPI GlobalGetAtomName16(ATOM nAtom, LPSTR lpBuffer, INT16 nSize)\n{\n    char buffer[256];\n    extern ATOM gatom_progman16;\n    if (nSize == 0)\n        return 0;\n    if (nAtom == gatom_progman16)\n    {\n        strncpy(lpBuffer, \"PROGMAN\", nSize);\n        lpBuffer[nSize - 1] = 0;\n        return nSize < 8 ? nSize - 1 : 7;\n    }\n    /* win32 wow32:if specify a small buffer, GlobalGetAtomName returns 0 */\n    /* win16      :if specify a small buffer, GlobalGetAtomName returns max(0, nSize - 1) */\n    UINT len = GlobalGetAtomNameA(nAtom, buffer, 256);\n    if (!len)\n        return 0;\n    if (len + 1 <= nSize)\n    {\n        memcpy(lpBuffer, buffer, len + 1);\n        return len;\n    }\n    else\n    {\n        memcpy(lpBuffer, buffer, nSize - 1);\n        lpBuffer[nSize - 1] = 0;\n        return nSize - 1;\n    }\n}\n\n\n/***********************************************************************\n *\t\tControlPanelInfo (USER.273)\n */\nvoid WINAPI ControlPanelInfo16( INT16 nInfoType, WORD wData, LPSTR lpBuffer )\n{\n    FIXME(\"(%d, %04x, %p): stub.\\n\", nInfoType, wData, lpBuffer);\n}\n\n\n/***********************************************************************\n *           OldSetDeskPattern   (USER.279)\n */\nBOOL16 WINAPI SetDeskPattern16(void)\n{\n    return SystemParametersInfoA( SPI_SETDESKPATTERN, -1, NULL, FALSE );\n}\n\n\n/***********************************************************************\n *\t\tGetSysColorBrush (USER.281)\n */\nHBRUSH16 WINAPI GetSysColorBrush16( INT16 index )\n{\n    return HBRUSH_16( GetSysColorBrush(index) );\n}\n\n\n/***********************************************************************\n *\t\tSelectPalette (USER.282)\n */\nHPALETTE16 WINAPI SelectPalette16( HDC16 hdc, HPALETTE16 hpal, BOOL16 bForceBackground )\n{\n    HPALETTE hpal32 = HPALETTE_32(hpal);\n    HDC hdc32 = HDC_32(hdc);\n    if ((GetObjectType(hpal32) != OBJ_PAL) || ((GetObjectType(hdc32) != OBJ_DC) && (GetObjectType(hdc32) != OBJ_MEMDC)))\n        return NULL;\n    if (krnl386_get_compat_mode(\"256color\") && (GetDeviceCaps(hdc32, TECHNOLOGY) == DT_RASDISPLAY))\n    {\n        DWORD *dclist = (WORD *)GetPtr16(hpal, 1);\n        int found = -1;\n        if (!dclist)\n        {\n            dclist = (WORD *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 20 * sizeof(DWORD));\n            dclist[0] = 20;\n            SetPtr16(hpal, dclist, 1);\n        }\nretry:\n        for (int i = 1; i < dclist[0]; i++)\n        {\n            if ((!dclist[i] || !GetObjectType(HDC_32(dclist[i])) || (GetCurrentObject(HDC_32(dclist[i]), OBJ_PAL) != hpal32)) && (found == -1))\n                found = i;\n            if ((dclist[i] & 0xffff) == hdc)\n                found = i;\n\t    }\n        if (found == -1)\n        {\n            if (dclist[0] < 100)\n            {\n                dclist = (WORD *)HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dclist, (dclist[0] + 20) * sizeof(DWORD));\n                dclist[0] = dclist[0] + 20;\n                SetPtr16(hpal, dclist, 1);\n                goto retry;\n            }\n            else\n                ERR(\"pal->dc list growing too large\\n\", hpal);\n        }\n        else if (found != -2)\n            dclist[found] = (DWORD)hdc | (bForceBackground << 16);\n\n        DIBSECTION dib;\n        HBITMAP bitmap = GetCurrentObject(hdc32, OBJ_BITMAP);\n        int ret = GetObject(bitmap, sizeof(DIBSECTION), &dib);\n        if (krnl386_get_config_int(\"otvdm\", \"DIBPalette\", FALSE) && (ret == sizeof(DIBSECTION)) && (dib.dsBmih.biBitCount == 8)\n                && !dib.dshSection && (GetPtr16(HBITMAP_16(bitmap), 1) == 0xd1b00001))\n        {\n            PALETTEENTRY pal[256] = {0};\n            GetPaletteEntries(hpal32, 0, 256, &pal);\n            for (int i = 0; i < 256; i++)\n            {\n                BYTE tmp = pal[i].peRed;\n                pal[i].peRed = pal[i].peBlue;\n                pal[i].peBlue = tmp;\n            }\n            SetDIBColorTable(hdc32, 0, 256, &pal);\n        }\n    }\n    return HPALETTE_16( SelectPalette( hdc32, hpal32, bForceBackground ));\n}\n\n/***********************************************************************\n *\t\tRealizePalette (USER.283)\n */\nUINT16 WINAPI RealizePalette16( HDC16 hdc )\n{\n    HDC hdc32 = HDC_32(hdc);\n    if (krnl386_get_compat_mode(\"256color\"))\n    {\n        if (krnl386_get_config_int(\"otvdm\", \"DIBPalette\", FALSE)\n            && (GetDeviceCaps(hdc32, TECHNOLOGY) == DT_RASDISPLAY) && (GetObjectType(hdc32) == OBJ_DC))\n            set_realized_palette(hdc32);\n    }\n        \n    return UserRealizePalette(hdc32);\n}\n\n\n/***********************************************************************\n *\t\tGetFreeSystemResources (USER.284)\n */\nWORD WINAPI GetFreeSystemResources16( WORD resType )\n{\n\tSTACK16FRAME* stack16 = MapSL((SEGPTR)getWOW32Reserved());\n    HANDLE16 oldDS = stack16->ds;\n    int userPercent, gdiPercent;\n\n    switch(resType)\n    {\n    case GFSR_USERRESOURCES:\n    {\n        stack16->ds = USER_HeapSel;\n        WORD size = LocalHeapSize16();\n        WORD cf = LocalCountFree16();\n        if (size == 0)\n            userPercent = 100;\n        else\n            userPercent = (int)cf * 100 / size;\n        gdiPercent = 100;\n        stack16->ds = oldDS;\n        break;\n    }\n    case GFSR_GDIRESOURCES:\n    {    stack16->ds = gdi_inst;\n        WORD size = LocalHeapSize16();\n        WORD cf = LocalCountFree16();\n        if (size == 0)\n            gdiPercent = 100;\n        else\n            gdiPercent  = (int)cf * 100 / size;\n        userPercent = 100;\n        stack16->ds = oldDS;\n        break;\n    }\n    case GFSR_SYSTEMRESOURCES:\n    {\n        stack16->ds = USER_HeapSel;\n        WORD size = LocalHeapSize16();\n        WORD cf = LocalCountFree16();\n        if (size == 0)\n            userPercent = 100;\n        else\n            userPercent = (int)cf * 100 / size;\n        stack16->ds = gdi_inst;\n        gdiPercent = userPercent;\n        stack16->ds = oldDS;\n        break;\n    }\n    default:\n        userPercent = gdiPercent = 0;\n        break;\n    }\n    TRACE(\"<- userPercent %d, gdiPercent %d\\n\", userPercent, gdiPercent);\n    return (WORD)min( userPercent, gdiPercent );\n}\n\n\n/***********************************************************************\n *           SetDeskWallPaper   (USER.285)\n */\nBOOL16 WINAPI SetDeskWallPaper16( LPCSTR filename )\n{\n    return SetDeskWallPaper( filename );\n}\n\n\n/***********************************************************************\n *\t\tkeybd_event (USER.289)\n */\nvoid WINAPI keybd_event16( CONTEXT *context )\n{\n    DWORD dwFlags = 0;\n\n    if (HIBYTE(context->Eax) & 0x80) dwFlags |= KEYEVENTF_KEYUP;\n    if (HIBYTE(context->Ebx) & 0x01) dwFlags |= KEYEVENTF_EXTENDEDKEY;\n\n    keybd_event( LOBYTE(context->Eax), LOBYTE(context->Ebx),\n                 dwFlags, MAKELONG(LOWORD(context->Esi), LOWORD(context->Edi)) );\n}\n\n\n/***********************************************************************\n *\t\tmouse_event (USER.299)\n */\nvoid WINAPI mouse_event16( CONTEXT *context )\n{\n    mouse_event( LOWORD(context->Eax), LOWORD(context->Ebx), LOWORD(context->Ecx),\n                 LOWORD(context->Edx), MAKELONG(context->Esi, context->Edi) );\n}\n\n\n/***********************************************************************\n *\t\tGetClipCursor (USER.309)\n */\nvoid WINAPI GetClipCursor16( RECT16 *rect )\n{\n    if (rect)\n    {\n        RECT rect32;\n        GetClipCursor( &rect32 );\n        rect->left   = rect32.left;\n        rect->top    = rect32.top;\n        rect->right  = rect32.right;\n        rect->bottom = rect32.bottom;\n    }\n}\n\n\nQUEUE16 *hqueue_to_ptr(HQUEUE16 hqueue)\n{\n    return (QUEUE16*)MapSL(MAKESEGPTR(hqueue, 0));\n}\nvoid delete_queue(HQUEUE16 hqueue)\n{\n    HQUEUE16 *prev;\n    QUEUE16 *p;\n\n    prev = &hqFirst;\n    while (*prev && (*prev != hqueue))\n    {\n        p = hqueue_to_ptr(*prev);\n        prev = &p->next;\n    }\n    if (*prev)\n    {\n        p = hqueue_to_ptr(*prev);\n        *prev = p->next;\n        p->next = 0;\n    }\n    GlobalFree16(hqueue);\n}\n/***********************************************************************\n *\t\tSignalProc (USER.314)\n */\nvoid WINAPI SignalProc16( HANDLE16 hModule, UINT16 code,\n                          UINT16 uExitFn, HINSTANCE16 hInstance, HQUEUE16 hQueue )\n{\n    if (code == USIG16_DLL_UNLOAD)\n    {\n        hModule = GetExePtr(hModule);\n        /* HOOK_FreeModuleHooks( hModule ); */\n        free_module_hooks( hModule );\n        free_module_classes( hModule );\n        free_module_icons( hModule );\n    }\n    if (code == USIG16_TERMINATION)\n    {\n        /* delete queue */\n        TDB *tdb = (TDB*)GlobalLock16(GetCurrentTask());\n        delete_queue(tdb->hQueue);\n    }\n}\n\n\n/***********************************************************************\n *\t\tSetEventHook (USER.321)\n *\n *\tUsed by Turbo Debugger for Windows\n */\nFARPROC16 WINAPI SetEventHook16(FARPROC16 lpfnEventHook)\n{\n    FIXME(\"(lpfnEventHook=%p): stub\\n\", lpfnEventHook);\n    return 0;\n}\n\n\n/**********************************************************************\n *\t\tEnableHardwareInput (USER.331)\n */\nBOOL16 WINAPI EnableHardwareInput16(BOOL16 bEnable)\n{\n    FIXME(\"(%d) - stub\\n\", bEnable);\n    return TRUE;\n}\n\n\n/**********************************************************************\n *              LoadCursorIconHandler (USER.336)\n *\n * Supposed to load resources of Windows 2.x applications.\n */\nHGLOBAL16 WINAPI LoadCursorIconHandler16( HGLOBAL16 hResource, HMODULE16 hModule, HRSRC16 hRsrc )\n{\n    FIXME(\"(%04x,%04x,%04x): old 2.x resources are not supported!\\n\", hResource, hModule, hRsrc);\n    return 0;\n}\n\n\n/***********************************************************************\n *\t\tGetMouseEventProc (USER.337)\n */\nFARPROC16 WINAPI GetMouseEventProc16(void)\n{\n    HMODULE16 hmodule = GetModuleHandle16(\"USER\");\n    return GetProcAddress16( hmodule, \"mouse_event\" );\n}\n\n\n/***********************************************************************\n *\t\tIsUserIdle (USER.333)\n */\nBOOL16 WINAPI IsUserIdle16(void)\n{\n    if ( GetAsyncKeyState( VK_LBUTTON ) & 0x8000 )\n        return FALSE;\n    if ( GetAsyncKeyState( VK_RBUTTON ) & 0x8000 )\n        return FALSE;\n    if ( GetAsyncKeyState( VK_MBUTTON ) & 0x8000 )\n        return FALSE;\n    /* Should check for screen saver activation here ... */\n    return TRUE;\n}\n\n\n/**********************************************************************\n *              LoadDIBIconHandler (USER.357)\n *\n * RT_ICON resource loader, installed by USER_SignalProc when module\n * is initialized.\n */\nHGLOBAL16 WINAPI LoadDIBIconHandler16( HGLOBAL16 hMemObj, HMODULE16 hModule, HRSRC16 hRsrc )\n{\n    /* If hResource is zero we must allocate a new memory block, if it's\n     * non-zero but GlobalLock() returns NULL then it was discarded and\n     * we have to recommit some memory, otherwise we just need to check\n     * the block size. See LoadProc() in 16-bit SDK for more.\n     */\n    FIXME( \"%x %x %x: stub, not supported anymore\\n\", hMemObj, hModule, hRsrc );\n    return 0;\n}\n\n/**********************************************************************\n *\t\tLoadDIBCursorHandler (USER.356)\n *\n * RT_CURSOR resource loader. Same as above.\n */\nHGLOBAL16 WINAPI LoadDIBCursorHandler16( HGLOBAL16 hMemObj, HMODULE16 hModule, HRSRC16 hRsrc )\n{\n    FIXME( \"%x %x %x: stub, not supported anymore\\n\", hMemObj, hModule, hRsrc );\n    return 0;\n}\n\n\n/**********************************************************************\n *\t\tIsMenu    (USER.358)\n */\nBOOL16 WINAPI IsMenu16( HMENU16 hmenu )\n{\n    return IsMenu( HMENU_32(hmenu) );\n}\n\n\n/***********************************************************************\n *\t\tDCHook (USER.362)\n */\nBOOL16 WINAPI DCHook16( HDC16 hdc, WORD code, DWORD data, LPARAM lParam )\n{\n    FIXME( \"hDC = %x, %i: stub\\n\", hdc, code );\n    return FALSE;\n}\n\n\n/**********************************************************************\n *\t\tLookupIconIdFromDirectoryEx (USER.364)\n *\n * FIXME: exact parameter sizes\n */\nINT16 WINAPI LookupIconIdFromDirectoryEx16( LPBYTE dir, BOOL16 bIcon,\n                                            INT16 width, INT16 height, UINT16 cFlag )\n{\n    return LookupIconIdFromDirectoryEx( dir, bIcon, width, height, cFlag );\n}\n\n\n/***********************************************************************\n *\t\tCopyIcon (USER.368)\n */\nHICON16 WINAPI CopyIcon16( HINSTANCE16 hInstance, HICON16 hIcon )\n{\n    CURSORICONINFO *info = get_icon_ptr( hIcon );\n    void *and_bits = info + 1;\n    void *xor_bits = (BYTE *)and_bits + info->nHeight * get_bitmap_width_bytes( info->nWidth, 1 );\n    HGLOBAL16 ret = CreateCursorIconIndirect16( hInstance, info, and_bits, xor_bits );\n    release_icon_ptr( hIcon, info );\n    return ret;\n}\n\n\n/***********************************************************************\n *\t\tCopyCursor (USER.369)\n */\nHCURSOR16 WINAPI CopyCursor16( HINSTANCE16 hInstance, HCURSOR16 hCursor )\n{\n    CURSORICONINFO *info = get_icon_ptr( hCursor );\n    void *and_bits = info + 1;\n    void *xor_bits = (BYTE *)and_bits + info->nHeight * get_bitmap_width_bytes( info->nWidth, 1 );\n    HGLOBAL16 ret = CreateCursorIconIndirect16( hInstance, info, and_bits, xor_bits );\n    release_icon_ptr( hCursor, info );\n    return ret;\n}\n\n\n/***********************************************************************\n *\t\tSubtractRect (USER.373)\n */\nBOOL16 WINAPI SubtractRect16( LPRECT16 dest, const RECT16 *src1,\n                              const RECT16 *src2 )\n{\n    RECT16 tmp;\n\n    if (IsRectEmpty16( src1 ))\n    {\n        SetRectEmpty16( dest );\n        return FALSE;\n    }\n    *dest = *src1;\n    if (IntersectRect16( &tmp, src1, src2 ))\n    {\n        if (EqualRect16( &tmp, dest ))\n        {\n            SetRectEmpty16( dest );\n            return FALSE;\n        }\n        if ((tmp.top == dest->top) && (tmp.bottom == dest->bottom))\n        {\n            if (tmp.left == dest->left) dest->left = tmp.right;\n            else if (tmp.right == dest->right) dest->right = tmp.left;\n        }\n        else if ((tmp.left == dest->left) && (tmp.right == dest->right))\n        {\n            if (tmp.top == dest->top) dest->top = tmp.bottom;\n            else if (tmp.bottom == dest->bottom) dest->bottom = tmp.top;\n        }\n    }\n    return TRUE;\n}\n\n\n/**********************************************************************\n *\t\tDllEntryPoint (USER.374)\n */\nBOOL WINAPI DllEntryPoint( DWORD reason, HINSTANCE16 inst, WORD ds,\n                           WORD heap, DWORD reserved1, WORD reserved2 )\n{\n    if (reason != DLL_PROCESS_ATTACH) return TRUE;\n    if (USER_HeapSel)\n    {\n        void InitNewThreadHook();\n        InitNewThreadHook();\n        return TRUE;  /* already called */\n    }\n\n    USER_HeapSel = ds;\n    register_wow_handlers();\n    gdi_inst = LoadLibrary16( \"gdi.exe\" );\n    LoadLibrary16( \"display.drv\" );\n    LoadLibrary16( \"keyboard.drv\" );\n    LoadLibrary16( \"mouse.drv\" );\n    LoadLibrary16( \"user.exe\" );  /* make sure it never gets unloaded */\n    // create dummy menu window, something like this exists on windows xp created by csrss\n    // but is missing on windows 10 x64\n    CreateWindowExA(0x181, \"#32768\", \"\", 0x84800000, 0, 0, 0, 0, NULL, NULL, NULL, NULL);\n    return TRUE;\n}\n\n\n/**********************************************************************\n *         SetMenuContextHelpId    (USER.384)\n */\nBOOL16 WINAPI SetMenuContextHelpId16( HMENU16 hMenu, DWORD dwContextHelpID)\n{\n    return SetMenuContextHelpId( HMENU_32(hMenu), dwContextHelpID );\n}\n\n\n/**********************************************************************\n *         GetMenuContextHelpId    (USER.385)\n */\nDWORD WINAPI GetMenuContextHelpId16( HMENU16 hMenu )\n{\n    return GetMenuContextHelpId( HMENU_32(hMenu) );\n}\n\n\nstruct WIN1XBITMAP\n{\n\tLONG unknown1;\n\tWORD width;\n\tWORD height;\n\t//WORD unknown2[2];\n\tWORD ByteWidth;     /* Width of bitmap in bytes */\n\tBYTE Planes;        /* Number of color planes */\n\tBYTE BitsPerPixel;  /* Number of bits per pixel */\n\tWORD unknown3[2];\n\t//monochrome\n\t//\n\tBYTE bits;//1byte 8 pixels\n};\n\n/***********************************************************************\n *\t\tLoadImage (USER.389)\n */\nHANDLE16 WINAPI LoadImage16(HINSTANCE16 hinst, LPCSTR name, UINT16 type, INT16 cx, INT16 cy, UINT16 flags)\n{\n    HGLOBAL16 handle;\n    HRSRC16 hRsrc, hGroupRsrc;\n    DWORD size;\n\n    if (!hinst || (flags & LR_LOADFROMFILE) || (hinst && hinst == GetModuleHandle16(\"DISPLAY\")))\n    {\n        //OEMRESOURCE\n        WORD n = (WORD)name;\n        HINSTANCE hinst32 = NULL;\n        if ((n == OBM_OLD_CLOSE) || (n == OBM_BTNCORNERS))\n            hinst32 = GetModuleHandleA(\"user.exe16\");\n        HANDLE h = LoadImageA(hinst32, n, type, cx, cy, flags);\n        if (!h)\n        {\n            //OBM_OLD_XXXX->OBM_XXXX\n            switch (n)\n            {\n            case OBM_OLD_CLOSE:\n                n = OBM_CLOSE;\n                break;\n            case OBM_OLD_DNARROW:\n                n = OBM_DNARROW;\n                break;\n            case OBM_OLD_LFARROW:\n                n = OBM_LFARROW;\n                break;\n            case OBM_OLD_REDUCE:\n                n = OBM_REDUCE;\n                break;\n            case OBM_OLD_RESTORE:\n                n = OBM_RESTORE;\n                break;\n            case OBM_OLD_RGARROW:\n                n = OBM_RGARROW;\n                break;\n            case OBM_OLD_UPARROW:\n                n = OBM_UPARROW;\n                break;\n            case OBM_OLD_ZOOM:\n                n = OBM_ZOOM;\n                break;\n            case OCR_SIZE:\n                n = OCR_SIZEALL;\n                break;\n            case OCR_ICON:\n                n = OCR_NORMAL;\n                break;\n            case OCR_ICOCUR:\n                n = OIC_WINLOGO;\n                break;\n            default:\n                break;\n            }\n            h = LoadImageA(0, n, type, cx, cy, flags);\n            if (h == 0)\n            {\n                ERR(\"LoadImageA(%d, %d, %d, %d, %d, %d)\\n\", 0, n, type, cx, cy, flags);\n            }\n        }\n        if (type == IMAGE_BITMAP)\n            return HBITMAP_16(h);\n        else\n        {\n            HICON16 hIcon;\n            hIcon = get_icon_16(h);\n            if (flags & LR_SHARED)\n                add_shared_icon(hinst, NULL, NULL, hIcon);\n            return hIcon;\n        }\n    }\n\n    hinst = GetExePtr( hinst );\n\n    if (flags & LR_DEFAULTSIZE)\n    {\n        if (type == IMAGE_ICON)\n        {\n            if (!cx) cx = GetSystemMetrics(SM_CXICON);\n            if (!cy) cy = GetSystemMetrics(SM_CYICON);\n        }\n        else if (type == IMAGE_CURSOR)\n        {\n            if (!cx) cx = GetSystemMetrics(SM_CXCURSOR);\n            if (!cy) cy = GetSystemMetrics(SM_CYCURSOR);\n        }\n    }\n\n    switch (type)\n    {\n    case IMAGE_BITMAP:\n    {\n        HBITMAP ret = 0;\n        char *ptr;\n        static const WCHAR prefixW[] = {'b','m','p',0};\n        BITMAPFILEHEADER header;\n        WCHAR path[MAX_PATH], filename[MAX_PATH];\n        HANDLE file;\n\n        filename[0] = 0;\n        if (!(hRsrc = FindResource16( hinst, name, (LPCSTR)RT_BITMAP ))) return 0;\n        if (!(handle = LoadResource16( hinst, hRsrc ))) return 0;\n        if (!(ptr = LockResource16( handle ))) goto done;\n        size = SizeofResource16( hinst, hRsrc );\n\n\t\tif (IsOldWindowsTask(hinst))\n\t\t{\n\t\t\t//old old bitmap\n\t\t\tstruct WIN1XBITMAP *win1xbitmap = ptr;\n\t\t\tBITMAP winbitmap = { 0 };\n\t\t\t//winbitmap.bmType = win1xbitmap->unknown1;\n\t\t\twinbitmap.bmWidth = win1xbitmap->width;\n\t\t\twinbitmap.bmHeight = win1xbitmap->height;\n\t\t\twinbitmap.bmWidthBytes = win1xbitmap->ByteWidth;\n\t\t\twinbitmap.bmPlanes = win1xbitmap->Planes;\n\t\t\twinbitmap.bmBitsPixel = win1xbitmap->BitsPerPixel;\n\t\t\twinbitmap.bmBits = &win1xbitmap->bits;\n\n\t\t\tHBITMAP ret = CreateBitmapIndirect(&winbitmap);\n\t\t\tif(!ret)\n\t\t\t{\n\t\t\t\tif (winbitmap.bmPlanes == 3)\n\t\t\t\t{\n\t\t\t\t\tHDC scrhdc = GetDC(NULL);\n\t\t\t\t\tHDC hdc = CreateCompatibleDC(scrhdc);\n\t\t\t\t\tret = CreateCompatibleBitmap(scrhdc, winbitmap.bmWidth, winbitmap.bmHeight);\n\t\t\t\t\tHGDIOBJ oldobj = SelectObject(hdc, ret);\n\t\t\t\t\tint plsize = winbitmap.bmWidthBytes * winbitmap.bmHeight;\n\t\t\t\t\tfor (int y = 0; y < winbitmap.bmHeight; y++)\n\t\t\t\t\t{\n\t\t\t\t\t\tfor (int x = 0; x < winbitmap.bmWidth; x++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tUINT8 *addr = (UINT8 *)winbitmap.bmBits + (x / 8) + y * winbitmap.bmWidthBytes;\n\t\t\t\t\t\t\tint mask = 0x80 >> (x % 8);\n\t\t\t\t\t\t\tUINT8 red = (addr[0] & mask) ? 0xff : 0;\n\t\t\t\t\t\t\tUINT8 green = (addr[plsize] & mask) ? 0xff : 0;\n\t\t\t\t\t\t\tUINT8 blue = (addr[plsize * 2] & mask) ? 0xff : 0;\n\t\t\t\t\t\t\tif (SetPixel(hdc, x, y, RGB(red, green, blue)) == -1)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSelectObject(hdc, oldobj);\n\t\t\t\t\t\t\t\tDeleteDC(hdc);\n\t\t\t\t\t\t\t\tReleaseDC(NULL, scrhdc);\n\t\t\t\t\t\t\t\treturn HBITMAP_16(ret);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tSelectObject(hdc, oldobj);\n\t\t\t\t\tDeleteDC(hdc);\n\t\t\t\t\tReleaseDC(NULL, scrhdc);\n\t\t\t\t\treturn HBITMAP_16(ret);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tret = CreateBitmap(win1xbitmap->width, win1xbitmap->height, win1xbitmap->Planes, win1xbitmap->BitsPerPixel, &win1xbitmap->bits);\n\t\t\t}\n\t\t\treturn HBITMAP_16(ret);\n\t\t}\n\n        header.bfType = 0x4d42; /* 'BM' */\n        header.bfReserved1 = 0;\n        header.bfReserved2 = 0;\n        header.bfSize = sizeof(header) + size;\n        header.bfOffBits = 0;  /* not used by the 32-bit loading code */\n\n        if (!GetTempPathW( MAX_PATH, path )) goto done;\n        if (!GetTempFileNameW( path, prefixW, 0, filename )) goto done;\n\n        file = CreateFileW( filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0 );\n        if (file != INVALID_HANDLE_VALUE)\n        {\n            DWORD written;\n            BOOL ok;\n            ok = WriteFile( file, &header, sizeof(header), &written, NULL ) && (written == sizeof(header));\n            if (ok) ok = WriteFile( file, ptr, size, &written, NULL ) && (written == size);\n            CloseHandle( file );\n            if (ok) ret = LoadImageW( 0, filename, IMAGE_BITMAP, cx, cy, flags | LR_LOADFROMFILE );\n        }\n    done:\n        if (filename[0]) DeleteFileW( filename );\n        FreeResource16( handle );\n        return HBITMAP_16( ret );\n    }\n\n    case IMAGE_ICON:\n    case IMAGE_CURSOR:\n    {\n        HICON16 hIcon = 0;\n        BYTE *dir, *bits;\n        INT id = 0;\n        LPCSTR typer = (LPCSTR)(type == IMAGE_ICON ? RT_GROUP_ICON : RT_GROUP_CURSOR);\n\n        BOOL is_old = FALSE;\n        if (IsOldWindowsTask(hinst))\n        {\n            is_old = TRUE;\n            typer = (LPCSTR)(type == IMAGE_ICON ? RT_ICON : RT_CURSOR);\n        }\n        if (!(hRsrc = FindResource16( hinst, name,\n                                      typer)))\n            return 0;\n        hGroupRsrc = hRsrc;\n\n        if (!is_old)\n        {\n            if (!(handle = LoadResource16(hinst, hRsrc))) return 0;\n            if ((dir = LockResource16(handle))) id = LookupIconIdFromDirectory(dir, type == IMAGE_ICON);\n            FreeResource16(handle);\n            if (!id) return 0;\n            if (!(hRsrc = FindResource16( hinst, MAKEINTRESOURCEA(id),\n                                      (LPCSTR)(type == IMAGE_ICON ? RT_ICON : RT_CURSOR) ))) return 0;\n        }\n\n        if ((flags & LR_SHARED) && (hIcon = find_shared_icon( hinst, hRsrc ) ) != 0) return hIcon;\n\n        if (!(handle = LoadResource16( hinst, hRsrc ))) return 0;\n        bits = LockResource16( handle );\n        size = SizeofResource16( hinst, hRsrc );\n        if (is_old)\n        {\n#include <pshpack1.h>\n            typedef struct\n            {\n                BYTE unknown1[2];\n                WORD x;\n                WORD y;\n                WORD size1;\n                WORD size2;\n                BYTE unknown3[4];\n                BYTE bits[0];\n            } OLDICON, *LPOLDICON;\n            typedef struct {\n                SHORT x;\n                SHORT y;\n                BITMAPINFOHEADER   header;\n                RGBQUAD         colors[1];\n            } CURSOR, *LPCURSOR;\n#include <poppack.h>\n            /* FIXME: padding? */\n            LPOLDICON old = bits;\n            SIZE_T size16 = sizeof(OLDICON) + old->size1 / 8 * old->size2 * 2;\n            if (size16 > size)\n            {\n                FreeResource16(handle);\n                return 0;\n            }\n            SIZE_T size32 = sizeof(CURSOR) + old->size1 / 8 * old->size2 * 2 + sizeof(RGBQUAD) * 2;\n            LPCURSOR b32 = (LPCURSOR)HeapAlloc(GetProcessHeap(), 0, size32);\n            memset(b32, 0xff, size32);\n            b32->x = old->x;\n            b32->y = old->y;\n            b32->header.biBitCount = 1;\n            b32->header.biWidth = old->size1;\n            b32->header.biHeight = old->size2 * 2;\n            b32->header.biSize = sizeof(BITMAPINFOHEADER);\n            b32->header.biPlanes = 1;\n            b32->header.biCompression = BI_RGB;\n            b32->header.biSizeImage = 0;\n            b32->header.biXPelsPerMeter = 0;\n            b32->header.biYPelsPerMeter = 0;\n            b32->header.biClrUsed = 2;\n            b32->header.biClrImportant = 0;\n            b32->colors[0].rgbBlue = 0;\n            b32->colors[0].rgbGreen = 0;\n            b32->colors[0].rgbRed = 0;\n            b32->colors[1].rgbBlue = 255;\n            b32->colors[1].rgbGreen = 255;\n            b32->colors[1].rgbRed = 255;\n            SIZE_T img_size = (old->size2 * old->size1) / 8;\n            for (int y = 0; y < old->size2; y++)\n            {\n                memcpy((LPBYTE)&b32->colors[2] + (old->size2 - y - 1) * (b32->header.biWidth / 8), (LPBYTE)(old + 1) + img_size + y * (b32->header.biWidth / 8), b32->header.biWidth / 8);\n                memcpy((LPBYTE)&b32->colors[2] + img_size + (old->size2 - y - 1) * (b32->header.biWidth / 8), (LPBYTE)(old + 1) + y * (b32->header.biWidth / 8), b32->header.biWidth / 8);\n            }\n            /*\n            if (type == IMAGE_ICON)\n                hIcon = get_icon_16(CreateIcon(GetModuleHandle(NULL), old->size1, old->size2, 1, 1, (LPBYTE)(old + 1), (LPBYTE)(old + 1) + img_size));\n            else\n                hIcon = get_icon_16(CreateCursor(GetModuleHandle(NULL), old->x, old->y, old->size1, old->size2, (LPBYTE)(old + 1), (LPBYTE)(old + 1) + img_size));\n            */\n            hIcon = CreateIconFromResourceEx16(type == IMAGE_ICON ? &b32->header : b32, size32 - (type == IMAGE_ICON ? 2 : 0), type == IMAGE_ICON, 0x00030000, cx, cy, flags);\n            HeapFree(GetProcessHeap(), 0, b32);\n        }\n        else\n        {\n            hIcon = CreateIconFromResourceEx16(bits, size, type == IMAGE_ICON, 0x00030000, cx, cy, flags);\n        }\n        FreeResource16(handle);\n\n        if (hIcon && (flags & LR_SHARED)) add_shared_icon( hinst, hRsrc, hGroupRsrc, hIcon );\n        GLOBAL_SetSeg(hIcon, 0, 5 | (type == IMAGE_ICON ? 14 : 12) << 4); // GT_RESOURCE | (GD_ICON || GD_CURSOR)\n        return hIcon;\n    }\n    default:\n        return 0;\n    }\n}\n\n/******************************************************************************\n *\t\tCopyImage (USER.390) Creates new image and copies attributes to it\n *\n */\nHICON16 WINAPI CopyImage16(HANDLE16 hnd, UINT16 type, INT16 desiredx,\n\t\t\t   INT16 desiredy, UINT16 flags)\n{\n    if (flags & LR_COPYFROMRESOURCE) FIXME( \"LR_COPYFROMRESOURCE not supported\\n\" );\n\n    switch (type)\n    {\n    case IMAGE_BITMAP:\n        return HBITMAP_16( CopyImage( HBITMAP_32(hnd), type, desiredx, desiredy, flags ));\n    case IMAGE_ICON:\n    case IMAGE_CURSOR:\n        return CopyIcon16( FarGetOwner16(hnd), hnd );\n    default:\n        return 0;\n    }\n}\n\n/**********************************************************************\n *\t\tDrawIconEx (USER.394)\n */\nBOOL16 WINAPI DrawIconEx16(HDC16 hdc, INT16 xLeft, INT16 yTop, HICON16 hIcon,\n\t\t\t   INT16 cxWidth, INT16 cyWidth, UINT16 istep,\n\t\t\t   HBRUSH16 hbr, UINT16 flags)\n{\n  return DrawIconEx(HDC_32(hdc), xLeft, yTop, get_icon_32(hIcon), cxWidth, cyWidth,\n\t\t    istep, HBRUSH_32(hbr), flags);\n}\n\n/**********************************************************************\n *\t\tGetIconInfo (USER.395)\n */\nBOOL16 WINAPI GetIconInfo16(HICON16 hIcon, LPICONINFO16 iconinfo)\n{\n    CURSORICONINFO *info = get_icon_ptr( hIcon );\n    INT height;\n\n    if (!info) return FALSE;\n\n    if ((info->ptHotSpot.x == ICON_HOTSPOT) && (info->ptHotSpot.y == ICON_HOTSPOT))\n    {\n        iconinfo->fIcon    = TRUE;\n        iconinfo->xHotspot = info->nWidth / 2;\n        iconinfo->yHotspot = info->nHeight / 2;\n    }\n    else\n    {\n        iconinfo->fIcon    = FALSE;\n        iconinfo->xHotspot = info->ptHotSpot.x;\n        iconinfo->yHotspot = info->ptHotSpot.y;\n    }\n\n    height = info->nHeight;\n\n    if (info->bBitsPerPixel > 1)\n    {\n        iconinfo->hbmColor = HBITMAP_16( CreateBitmap( info->nWidth, info->nHeight,\n                                                       info->bPlanes, info->bBitsPerPixel,\n                                                       (char *)(info + 1)\n                                                       + info->nHeight *\n                                                       get_bitmap_width_bytes(info->nWidth,1) ));\n    }\n    else\n    {\n        iconinfo->hbmColor = 0;\n        height *= 2;\n    }\n\n    iconinfo->hbmMask = HBITMAP_16( CreateBitmap( info->nWidth, height, 1, 1, info + 1 ));\n    release_icon_ptr( hIcon, info );\n    return TRUE;\n}\n\n\n/***********************************************************************\n *\t\tFinalUserInit (USER.400)\n */\nvoid WINAPI FinalUserInit16( void )\n{\n    /* FIXME: Should chain to FinalGdiInit */\n}\n\n\n/***********************************************************************\n *\t\tCreateCursor (USER.406)\n */\nHCURSOR16 WINAPI CreateCursor16(HINSTANCE16 hInstance,\n\t\t\t\tINT16 xHotSpot, INT16 yHotSpot,\n\t\t\t\tINT16 nWidth, INT16 nHeight,\n\t\t\t\tLPCVOID lpANDbits, LPCVOID lpXORbits)\n{\n  CURSORICONINFO info;\n\n  info.ptHotSpot.x = xHotSpot;\n  info.ptHotSpot.y = yHotSpot;\n  info.nWidth = nWidth;\n  info.nHeight = nHeight;\n  info.nWidthBytes = 0;\n  info.bPlanes = 1;\n  info.bBitsPerPixel = 1;\n\n  return CreateCursorIconIndirect16(hInstance, &info, lpANDbits, lpXORbits);\n}\n\n\n/***********************************************************************\n *\t\tCreateIcon (USER.407)\n */\nHICON16 WINAPI CreateIcon16( HINSTANCE16 hInstance, INT16 nWidth,\n                             INT16 nHeight, BYTE bPlanes, BYTE bBitsPixel,\n                             LPCVOID lpANDbits, LPCVOID lpXORbits )\n{\n    CURSORICONINFO info;\n\n    info.ptHotSpot.x = ICON_HOTSPOT;\n    info.ptHotSpot.y = ICON_HOTSPOT;\n    info.nWidth = nWidth;\n    info.nHeight = nHeight;\n    info.nWidthBytes = 0;\n    info.bPlanes = bPlanes;\n    info.bBitsPerPixel = bBitsPixel;\n\n    return CreateCursorIconIndirect16( hInstance, &info, lpANDbits, lpXORbits );\n}\n\n\n/***********************************************************************\n *\t\tCreateCursorIconIndirect (USER.408)\n */\nHGLOBAL16 WINAPI CreateCursorIconIndirect16( HINSTANCE16 hInstance,\n                                           CURSORICONINFO *info,\n                                           LPCVOID lpANDbits,\n                                           LPCVOID lpXORbits )\n{\n    HICON16 handle;\n    CURSORICONINFO *ptr;\n    int sizeAnd, sizeXor;\n\n    hInstance = GetExePtr( hInstance );  /* Make it a module handle */\n    if (!lpXORbits || !lpANDbits || info->bPlanes != 1) return 0;\n    info->nWidthBytes = get_bitmap_width_bytes(info->nWidth,info->bBitsPerPixel);\n    sizeXor = info->nHeight * info->nWidthBytes;\n    sizeAnd = info->nHeight * get_bitmap_width_bytes( info->nWidth, 1 );\n    if (!(handle = alloc_icon_handle( sizeof(CURSORICONINFO) + sizeXor + sizeAnd )))\n        return 0;\n    FarSetOwner16( handle, hInstance );\n    ptr = get_icon_ptr( handle );\n    memcpy( ptr, info, sizeof(*info) );\n    memcpy( ptr + 1, lpANDbits, sizeAnd );\n    memcpy( (char *)(ptr + 1) + sizeAnd, lpXORbits, sizeXor );\n    release_icon_ptr( handle, ptr );\n    return handle;\n}\n\n\n/***********************************************************************\n *\t\tInitThreadInput   (USER.409)\n */\nHQUEUE16 WINAPI InitThreadInput16( WORD unknown, WORD flags )\n{\n    /* nothing to do here */\n    return 0xbeef;\n}\n\n\n/*******************************************************************\n *         InsertMenu    (USER.410)\n */\nBOOL16 WINAPI InsertMenu16( HMENU16 hMenu, UINT16 pos, UINT16 flags,\n                            UINT16 id, SEGPTR data )\n{\n    BOOL16 ret;\n    HMENU menu = HMENU_32(hMenu);\n    UINT pos32 = (UINT)pos;\n    if ((pos == (UINT16)-1) && (flags & MF_BYPOSITION)) pos32 = (UINT)-1;\n    if (flags & MF_BITMAP)\n        data = HBITMAP_32(data);\n    UINT id32 = id;\n    if (flags & MF_POPUP)\n        id32 = HMENU_32(id);\n    if (IS_MENU_STRING_ITEM(flags) && data)\n        return InsertMenuA( menu, pos32, flags, id32, MapSL(data) );\n    ret = InsertMenuA( menu, pos32, flags, id32, (LPSTR)data );\n    return ret;\n}\n\n\n/*******************************************************************\n *         AppendMenu    (USER.411)\n */\nBOOL16 WINAPI AppendMenu16(HMENU16 hMenu, UINT16 flags, UINT16 id, SEGPTR data)\n{\n    return InsertMenu16( hMenu, -1, flags | MF_BYPOSITION, id, data );\n}\n\n\n/**********************************************************************\n *         RemoveMenu   (USER.412)\n */\nBOOL16 WINAPI RemoveMenu16( HMENU16 hMenu, UINT16 nPos, UINT16 wFlags )\n{\n    return RemoveMenu( HMENU_32(hMenu), nPos, wFlags );\n}\n\n\n/**********************************************************************\n *         DeleteMenu    (USER.413)\n */\nBOOL16 WINAPI DeleteMenu16( HMENU16 hMenu, UINT16 nPos, UINT16 wFlags )\n{\n    return DeleteMenu( HMENU_32(hMenu), nPos, wFlags );\n}\n\n\n/*******************************************************************\n *         ModifyMenu    (USER.414)\n */\nBOOL16 WINAPI ModifyMenu16( HMENU16 hMenu, UINT16 pos, UINT16 flags,\n                            UINT16 id, SEGPTR data )\n{\n    if (flags & MF_BITMAP)\n        data = HBITMAP_32(data);\n    UINT id32 = id;\n    if (flags & MF_POPUP)\n        id32 = HMENU_32(id);\n    if (IS_MENU_STRING_ITEM(flags))\n        return ModifyMenuA( HMENU_32(hMenu), pos, flags, id32, MapSL(data) );\n    return ModifyMenuA( HMENU_32(hMenu), pos, flags, id32, (LPSTR)data );\n}\n\n\n/**********************************************************************\n *         CreatePopupMenu    (USER.415)\n */\nHMENU16 WINAPI CreatePopupMenu16(void)\n{\n    return HMENU_16( CreatePopupMenu() );\n}\n\n\n/**********************************************************************\n *         SetMenuItemBitmaps    (USER.418)\n */\nBOOL16 WINAPI SetMenuItemBitmaps16( HMENU16 hMenu, UINT16 nPos, UINT16 wFlags,\n                                    HBITMAP16 hNewUnCheck, HBITMAP16 hNewCheck)\n{\n    return SetMenuItemBitmaps( HMENU_32(hMenu), nPos, wFlags,\n                               HBITMAP_32(hNewUnCheck), HBITMAP_32(hNewCheck) );\n}\n\n\n/***********************************************************************\n *           wvsprintf   (USER.421)\n */\nINT16 WINAPI wvsprintf16( LPSTR buffer, LPCSTR spec, VA_LIST16 args )\n{\n    WPRINTF_FORMAT format;\n    LPSTR p = buffer;\n    UINT i, len, sign;\n    CHAR number[20];\n    CHAR char_view = 0;\n    LPCSTR lpcstr_view = NULL;\n    INT int_view;\n    SEGPTR seg_str;\n    INT16 ret = 0;\n\n    __TRY\n    {\n        while (*spec)\n        {\n            if (*spec != '%') { *p++ = *spec++; continue; }\n            spec++;\n            if (*spec == '%') { *p++ = *spec++; continue; }\n            spec += parse_format( spec, &format );\n            switch(format.type)\n            {\n                case WPR_CHAR:\n                    char_view = VA_ARG16( args, CHAR );\n                    len = format.precision = 1;\n                    break;\n                case WPR_STRING:\n                    seg_str = VA_ARG16( args, SEGPTR );\n                    if (IsBadReadPtr16( seg_str, 1 )) lpcstr_view = \"\";\n                    else lpcstr_view = MapSL( seg_str );\n                    if (!lpcstr_view) lpcstr_view = \"(null)\";\n                    for (len = 0; !format.precision || (len < format.precision); len++)\n                        if (!lpcstr_view[len]) break;\n                    format.precision = len;\n                    break;\n                case WPR_SIGNED:\n                    if (format.flags & WPRINTF_LONG) int_view = VA_ARG16( args, INT );\n                    else int_view = VA_ARG16( args, INT16 );\n                    len = sprintf( number, \"%d\", int_view );\n                    break;\n                case WPR_UNSIGNED:\n                    if (format.flags & WPRINTF_LONG) int_view = VA_ARG16( args, UINT );\n                    else int_view = VA_ARG16( args, UINT16 );\n                    len = sprintf( number, \"%u\", int_view );\n                    break;\n                case WPR_HEXA:\n                    if (format.flags & WPRINTF_LONG) int_view = VA_ARG16( args, UINT );\n                    else int_view = VA_ARG16( args, UINT16 );\n                    len = sprintf( number, (format.flags & WPRINTF_UPPER_HEX) ? \"%X\" : \"%x\", int_view);\n                    break;\n                case WPR_UNKNOWN:\n                    continue;\n            }\n            if (format.precision < len) format.precision = len;\n            if (format.flags & WPRINTF_LEFTALIGN) format.flags &= ~WPRINTF_ZEROPAD;\n            if ((format.flags & WPRINTF_ZEROPAD) && (format.width > format.precision))\n                format.precision = format.width;\n            if ((format.flags & WPRINTF_PREFIX_HEX) && (format.type == WPR_HEXA)) len += 2;\n\n            sign = 0;\n            if (!(format.flags & WPRINTF_LEFTALIGN))\n                for (i = format.precision; i < format.width; i++) *p++ = ' ';\n            switch(format.type)\n            {\n                case WPR_CHAR:\n                    *p = char_view;\n                    /* wsprintf16 ignores null characters */\n                    if (*p != '\\0') p++;\n                    else if (format.width > 1) *p++ = ' ';\n                    break;\n                case WPR_STRING:\n                    if (len) memcpy( p, lpcstr_view, len );\n                    p += len;\n                    break;\n                case WPR_HEXA:\n                    if (format.flags & WPRINTF_PREFIX_HEX)\n                    {\n                        *p++ = '0';\n                        *p++ = (format.flags & WPRINTF_UPPER_HEX) ? 'X' : 'x';\n                        len -= 2;\n                    }\n                    /* fall through */\n                case WPR_SIGNED:\n                    /* Transfer the sign now, just in case it will be zero-padded*/\n                    if (number[0] == '-')\n                    {\n                        *p++ = '-';\n                        sign = 1;\n                    }\n                    /* fall through */\n                case WPR_UNSIGNED:\n                    for (i = len; i < format.precision; i++) *p++ = '0';\n                    if (len > sign) memcpy( p, number + sign, len - sign );\n                    p += len-sign;\n                    break;\n                case WPR_UNKNOWN:\n                    continue;\n            }\n            if (format.flags & WPRINTF_LEFTALIGN)\n                for (i = format.precision; i < format.width; i++) *p++ = ' ';\n        }\n        *p = 0;\n        ret = p - buffer;\n    }\n    __EXCEPT_ALL\n    {\n    }\n    __ENDTRY\n    return ret;\n}\n\n\n/***********************************************************************\n *           _wsprintf   (USER.420)\n */\nINT16 WINAPIV wsprintf16( LPSTR buffer, LPCSTR spec, VA_LIST16 valist )\n{\n    return wvsprintf16( buffer, spec, valist );\n}\n\n\n#if 0\n/***********************************************************************\n *           lstrcmp   (USER.430)\n */\nINT16 WINAPI lstrcmp16( LPCSTR str1, LPCSTR str2 )\n{\n    int ret;\n    /* Looks too complicated, but in optimized strcpy we might get\n    * a 32bit wide difference and would truncate it to 16 bit, so\n     * erroneously returning equality. */\n    ret = strcmp( str1, str2 );\n    if (ret < 0) return -1;\n    if (ret > 0) return  1;\n    return 0;\n}\n#endif\n\n/***********************************************************************\n *           AnsiUpper   (USER.431)\n */\nSEGPTR WINAPI AnsiUpper16( SEGPTR strOrChar )\n{\n    /* uppercase only one char if strOrChar < 0x10000 */\n    if (HIWORD(strOrChar))\n    {\n        CharUpperA( MapSL(strOrChar) );\n        return strOrChar;\n    }\n    else return (SEGPTR)CharUpperA( (LPSTR)strOrChar );\n}\n\n\n/***********************************************************************\n *           AnsiLower   (USER.432)\n */\nSEGPTR WINAPI AnsiLower16( SEGPTR strOrChar )\n{\n    /* lowercase only one char if strOrChar < 0x10000 */\n    if (HIWORD(strOrChar))\n    {\n        CharLowerA( MapSL(strOrChar) );\n        return strOrChar;\n    }\n    else return (SEGPTR)CharLowerA( (LPSTR)strOrChar );\n}\n\n\n/***********************************************************************\n *           AnsiUpperBuff   (USER.437)\n */\nUINT16 WINAPI AnsiUpperBuff16( LPSTR str, UINT16 len )\n{\n    CharUpperBuffA( str, len ? len : 65536 );\n    return len;\n}\n\n\n/***********************************************************************\n *           AnsiLowerBuff   (USER.438)\n */\nUINT16 WINAPI AnsiLowerBuff16( LPSTR str, UINT16 len )\n{\n    CharLowerBuffA( str, len ? len : 65536 );\n    return len;\n}\n\n\n/*******************************************************************\n *              InsertMenuItem   (USER.441)\n *\n * FIXME: untested\n */\nBOOL16 WINAPI InsertMenuItem16( HMENU16 hmenu, UINT16 pos, BOOL16 byposition,\n                                const MENUITEMINFO16 *mii )\n{\n    MENUITEMINFOA miia;\n\n    miia.cbSize        = sizeof(miia);\n    miia.fMask         = mii->fMask;\n    miia.dwTypeData    = (LPSTR)mii->dwTypeData;\n    miia.fType         = mii->fType;\n    miia.fState        = mii->fState;\n    miia.wID           = mii->wID;\n    miia.hSubMenu      = HMENU_32(mii->hSubMenu);\n    miia.hbmpChecked   = HBITMAP_32(mii->hbmpChecked);\n    miia.hbmpUnchecked = HBITMAP_32(mii->hbmpUnchecked);\n    miia.dwItemData    = mii->dwItemData;\n    miia.cch           = mii->cch;\n    if (IS_MENU_STRING_ITEM(miia.fType))\n        miia.dwTypeData = MapSL(mii->dwTypeData);\n    return InsertMenuItemA( HMENU_32(hmenu), pos, byposition, &miia );\n}\n\n\n/**********************************************************************\n *\t     DrawState    (USER.449)\n */\nBOOL16 WINAPI DrawState16( HDC16 hdc, HBRUSH16 hbr, DRAWSTATEPROC16 func, LPARAM ldata,\n                           WPARAM16 wdata, INT16 x, INT16 y, INT16 cx, INT16 cy, UINT16 flags )\n{\n    struct draw_state_info info;\n    UINT opcode = flags & 0xf;\n\n    if (opcode == DST_TEXT || opcode == DST_PREFIXTEXT)\n    {\n        /* make sure DrawStateA doesn't try to use ldata as a pointer */\n        if (!wdata) wdata = strlen( MapSL(ldata) );\n        if (!cx || !cy)\n        {\n            SIZE s;\n            if (!GetTextExtentPoint32A( HDC_32(hdc), MapSL(ldata), wdata, &s )) return FALSE;\n            if (!cx) cx = s.cx;\n            if (!cy) cy = s.cy;\n        }\n    }\n    info.proc  = func;\n    info.param = ldata;\n    return DrawStateA( HDC_32(hdc), HBRUSH_32(hbr), draw_state_callback,\n                       (LPARAM)&info, wdata, x, y, cx, cy, flags );\n}\n\n\n/**********************************************************************\n *\t\tCreateIconFromResourceEx (USER.450)\n *\n * FIXME: not sure about exact parameter types\n */\nHICON16 WINAPI CreateIconFromResourceEx16(LPBYTE bits, UINT16 cbSize,\n\t\t\t\t\t  BOOL16 bIcon, DWORD dwVersion,\n\t\t\t\t\t  INT16 width, INT16 height,\n\t\t\t\t\t  UINT16 cFlag)\n{\n    return get_icon_16( CreateIconFromResourceEx( bits, cbSize, bIcon, dwVersion, width, height, cFlag ));\n}\n\n\n/***********************************************************************\n *\t\tAdjustWindowRectEx (USER.454)\n */\nBOOL16 WINAPI AdjustWindowRectEx16( LPRECT16 rect, DWORD style, BOOL16 menu, DWORD exStyle )\n{\n    RECT rect32;\n    BOOL ret;\n\n    rect32.left   = rect->left;\n    rect32.top    = rect->top;\n    rect32.right  = rect->right;\n    rect32.bottom = rect->bottom;\n    ret = AdjustWindowRectEx( &rect32, style, menu, exStyle );\n    /*\n        win16:SM_CYCAPTION  = 20 win32:SM_CYCAPTION  = 24\n        win16:SM_CXBORDER   =  1 win32:SM_CXBORDER   =  1\n        win16:SM_CYBORDER   =  1 win32:SM_CYBORDER   =  1\n        win16:SM_CXDLGFRAME =  4 win32:SM_CXDLGFRAME =  2\n        win16:SM_CYDLGFRAME =  4 win32:SM_CYDLGFRAME =  2\n        win16: AdjustWindowRectEx(WS_DLGFRAME,...)=>non-client width(5,5,5,5)\n        win32: AdjustWindowRectEx(WS_DLGFRAME,...)=>non-client width(3,3,3,3)\n        win16: CreateWindow(WS_DLGFRAME,...)=>non-client width(1,20,1,1)\n        win32: CreateWindow(WS_DLGFRAME,...)=>non-client width(3,26,3,3)\n    */\n    if (menu)\n    {\n        /*\n        win16 bug?\n        +-------------+ <= SM_CYCAPTION (when caption is required)\n        |   CAPTION   | <= SM_CYCAPTION\n        +-------------+ <= 1px (win16 ignores this?)\n        |     MENU    | <= SM_CYMENU\n        +-------------+ <= SM_CYMENU\n        |             |\n        | client area |\n        |             |\n        */\n        rect32.top++;\n    }\n    rect->left   = rect32.left;\n    rect->top    = rect32.top;\n    rect->right  = rect32.right;\n    rect->bottom = rect32.bottom;\n    return ret;\n}\n\n\n/**********************************************************************\n *              GetIconID (USER.455)\n */\nWORD WINAPI GetIconID16( HGLOBAL16 hResource, DWORD resType )\n{\n    BYTE *dir = GlobalLock16(hResource);\n\n    switch (resType)\n    {\n    case (DWORD)RT_CURSOR:\n        return LookupIconIdFromDirectoryEx16( dir, FALSE, GetSystemMetrics(SM_CXCURSOR),\n                                              GetSystemMetrics(SM_CYCURSOR), LR_MONOCHROME );\n    case (DWORD)RT_ICON:\n        return LookupIconIdFromDirectoryEx16( dir, TRUE, GetSystemMetrics(SM_CXICON),\n                                              GetSystemMetrics(SM_CYICON), 0 );\n    }\n    return 0;\n}\n\n\n/**********************************************************************\n *              LoadIconHandler (USER.456)\n */\nHICON16 WINAPI LoadIconHandler16( HGLOBAL16 hResource, BOOL16 bNew )\n{\n    return CreateIconFromResourceEx16( LockResource16( hResource ), 0xffff, TRUE,\n                                       bNew ? 0x00030000 : 0x00020000, 0, 0, LR_DEFAULTCOLOR );\n}\n\n\n/***********************************************************************\n *\t\tDestroyIcon (USER.457)\n */\nBOOL16 WINAPI DestroyIcon16(HICON16 hIcon)\n{\n    int count;\n\n    TRACE(\"%04x\\n\", hIcon );\n\n    count = release_shared_icon( hIcon );\n    if (count != -1) return !count;\n    /* assume non-shared */\n    free_icon_handle( hIcon );\n    return TRUE;\n}\n\n/***********************************************************************\n *\t\tDestroyCursor (USER.458)\n */\nBOOL16 WINAPI DestroyCursor16(HCURSOR16 hCursor)\n{\n    return DestroyIcon16( hCursor );\n}\n\n\n/***********************************************************************\n *\t\tDumpIcon (USER.459)\n */\nDWORD WINAPI DumpIcon16( SEGPTR pInfo, WORD *lpLen,\n                       SEGPTR *lpAndBits, SEGPTR *lpXorBits )\n{\n    CURSORICONINFO *info = MapSL( pInfo );\n    int sizeAnd, sizeXor;\n\n    if (!info) return 0;\n    sizeXor = info->nHeight * info->nWidthBytes;\n    sizeAnd = info->nHeight * get_bitmap_width_bytes( info->nWidth, 1 );\n    if (lpAndBits) *lpAndBits = pInfo + sizeof(CURSORICONINFO);\n    if (lpXorBits) *lpXorBits = pInfo + sizeof(CURSORICONINFO) + sizeAnd;\n    if (lpLen) *lpLen = sizeof(CURSORICONINFO) + sizeAnd + sizeXor;\n    return MAKELONG( ((info->bPlanes * info->bBitsPerPixel) > 1) ? sizeAnd : sizeXor, sizeXor );\n}\n\n\n/*******************************************************************\n *\t\t\tDRAG_QueryUpdate16\n *\n * Recursively find a child that contains spDragInfo->pt point\n * and send WM_QUERYDROPOBJECT. Helper for DragObject16.\n */\nstatic BOOL DRAG_QueryUpdate16( HWND hQueryWnd, SEGPTR spDragInfo )\n{\n    BOOL bResult;\n    WPARAM wParam;\n    POINT pt, old_pt;\n    LPDRAGINFO16 ptrDragInfo = MapSL(spDragInfo);\n    RECT tempRect;\n    HWND child;\n\n    if (!IsWindowEnabled(hQueryWnd)) return FALSE;\n\n    old_pt.x = ptrDragInfo->pt.x;\n    old_pt.y = ptrDragInfo->pt.y;\n    pt = old_pt;\n    ScreenToClient( hQueryWnd, &pt );\n    child = ChildWindowFromPointEx( hQueryWnd, pt, CWP_SKIPINVISIBLE );\n    if (!child) return FALSE;\n\n    if (child != hQueryWnd)\n    {\n        wParam = 0;\n        if (DRAG_QueryUpdate16( child, spDragInfo )) return TRUE;\n    }\n    else\n    {\n        GetClientRect( hQueryWnd, &tempRect );\n        wParam = !PtInRect( &tempRect, pt );\n    }\n\n    ptrDragInfo->pt.x = pt.x;\n    ptrDragInfo->pt.y = pt.y;\n    ptrDragInfo->hScope = HWND_16(hQueryWnd);\n\n    bResult = SendMessage16( HWND_16(hQueryWnd), WM_QUERYDROPOBJECT, wParam, spDragInfo );\n\n    if (!bResult)\n    {\n        ptrDragInfo->pt.x = old_pt.x;\n        ptrDragInfo->pt.y = old_pt.y;\n    }\n    return bResult;\n}\n\n\n/******************************************************************************\n *\t\tDragObject (USER.464)\n */\nDWORD WINAPI DragObject16( HWND16 hwndScope, HWND16 hWnd, UINT16 wObj,\n                           HANDLE16 hOfStruct, WORD szList, HCURSOR16 hCursor )\n{\n    return DragObject(HWND_32(hwndScope), HWND_32(hWnd), wObj, MAKELONG(szList, hOfStruct), get_icon_32(hCursor));\n#if 0\n    MSG\tmsg;\n    LPDRAGINFO16 lpDragInfo;\n    SEGPTR\tspDragInfo;\n    HCURSOR \thOldCursor=0, hBummer=0, hCursor32;\n    HGLOBAL16\thDragInfo  = GlobalAlloc16( GMEM_SHARE | GMEM_ZEROINIT, 2*sizeof(DRAGINFO16));\n    HCURSOR\thCurrentCursor = 0;\n    HWND16\thCurrentWnd = 0;\n\n    lpDragInfo = (LPDRAGINFO16) GlobalLock16(hDragInfo);\n    spDragInfo = WOWGlobalLock16(hDragInfo);\n\n    if( !lpDragInfo || !spDragInfo ) return 0L;\n\n    if (!(hBummer = LoadCursorA(0, MAKEINTRESOURCEA(OCR_NO))))\n    {\n        GlobalFree16(hDragInfo);\n        return 0L;\n    }\n\n    if ((hCursor32 = get_icon_32( hCursor ))) SetCursor( hCursor32 );\n\n    lpDragInfo->hWnd   = hWnd;\n    lpDragInfo->hScope = 0;\n    lpDragInfo->wFlags = wObj;\n    lpDragInfo->hList  = szList; /* near pointer! */\n    lpDragInfo->hOfStruct = hOfStruct;\n    lpDragInfo->l = 0L;\n\n    SetCapture( HWND_32(hWnd) );\n    ShowCursor( TRUE );\n\n    do\n    {\n        GetMessageW( &msg, 0, WM_MOUSEFIRST, WM_MOUSELAST );\n\n       *(lpDragInfo+1) = *lpDragInfo;\n\n\tlpDragInfo->pt.x = msg.pt.x;\n\tlpDragInfo->pt.y = msg.pt.y;\n\n\t/* update DRAGINFO struct */\n\tif( DRAG_QueryUpdate16(WIN_Handle32(hwndScope), spDragInfo) > 0 )\n\t    hCurrentCursor = hCursor32;\n\telse\n        {\n            hCurrentCursor = hBummer;\n            lpDragInfo->hScope = 0;\n\t}\n\tif( hCurrentCursor )\n\t    SetCursor(hCurrentCursor);\n\n\t/* send WM_DRAGLOOP */\n        SendMessage16( hWnd, WM_DRAGLOOP, hCurrentCursor != hBummer, spDragInfo );\n\t/* send WM_DRAGSELECT or WM_DRAGMOVE */\n\tif( hCurrentWnd != lpDragInfo->hScope )\n\t{\n\t    if( hCurrentWnd )\n\t        SendMessage16( hCurrentWnd, WM_DRAGSELECT, 0,\n                        MAKELPARAM(LOWORD(spDragInfo)+sizeof(DRAGINFO16),\n                                   HIWORD(spDragInfo)) );\n\t    hCurrentWnd = lpDragInfo->hScope;\n\t    if( hCurrentWnd )\n                SendMessage16( hCurrentWnd, WM_DRAGSELECT, 1, spDragInfo);\n\t}\n\telse\n\t    if( hCurrentWnd )\n                SendMessage16( hCurrentWnd, WM_DRAGMOVE, 0, spDragInfo);\n\n    } while( msg.message != WM_LBUTTONUP && msg.message != WM_NCLBUTTONUP );\n\n    ReleaseCapture();\n    ShowCursor( FALSE );\n\n    if( hCursor ) SetCursor(hOldCursor);\n\n    if( hCurrentCursor != hBummer )\n\tmsg.lParam = SendMessage16( lpDragInfo->hScope, WM_DROPOBJECT,\n                                    hWnd, spDragInfo );\n    else\n        msg.lParam = 0;\n    GlobalFree16(hDragInfo);\n\n    return (DWORD)(msg.lParam);\n#endif\n}\n\n\n/***********************************************************************\n *\t\tDrawFocusRect (USER.466)\n */\nvoid WINAPI DrawFocusRect16( HDC16 hdc, const RECT16* rc )\n{\n    RECT rect32;\n\n    rect32.left   = rc->left;\n    rect32.top    = rc->top;\n    rect32.right  = rc->right;\n    rect32.bottom = rc->bottom;\n    DrawFocusRect( HDC_32(hdc), &rect32 );\n}\n\n\n/***********************************************************************\n *           AnsiNext   (USER.472)\n */\nSEGPTR WINAPI AnsiNext16(SEGPTR current)\n{\n    char *ptr = MapSL(current);\n    if (!*ptr) return current;\n    if (IsDBCSLeadByte( ptr[0] ) && ptr[1]) return current + 2;\n    return current + 1;\n}\n\n\n/***********************************************************************\n *           AnsiPrev   (USER.473)\n */\nSEGPTR WINAPI AnsiPrev16( SEGPTR sstart, SEGPTR current )\n{\n    char *ptr = MapSL(current);\n    SEGPTR sptr = current - 1;\n    ptr--;\n    if (sstart == current) return current;\n    while (sptr != sstart)\n    {\n        ptr--;\n        if (!IsDBCSLeadByte(*ptr)) break;\n        sptr--;\n    }\n    if ((current - sptr) & 1) return current - 1;\n    return current - 2;\n}\n\n\n/****************************************************************************\n *\t\tGetKeyboardLayoutName (USER.477)\n */\nINT16 WINAPI GetKeyboardLayoutName16( LPSTR name )\n{\n    return GetKeyboardLayoutNameA( name );\n}\n\n\n/***********************************************************************\n *\t\tSystemParametersInfo (USER.483)\n */\nBOOL16 WINAPI SystemParametersInfo16( UINT16 uAction, UINT16 uParam,\n                                      LPVOID lpvParam, UINT16 fuWinIni )\n{\n    BOOL16 ret;\n\n    TRACE(\"(%u, %u, %p, %u)\\n\", uAction, uParam, lpvParam, fuWinIni);\n\n    switch (uAction)\n    {\n    case SPI_GETBEEP:\n    case SPI_GETSCREENSAVEACTIVE:\n    case SPI_GETICONTITLEWRAP:\n    case SPI_GETMENUDROPALIGNMENT:\n    case SPI_GETFASTTASKSWITCH:\n    case SPI_GETDRAGFULLWINDOWS:\n    {\n\tBOOL tmp;\n\tret = SystemParametersInfoA( uAction, uParam, lpvParam ? &tmp : NULL, fuWinIni );\n\tif (ret && lpvParam) *(BOOL16 *)lpvParam = tmp;\n\tbreak;\n    }\n\n    case SPI_GETBORDER:\n    case SPI_ICONHORIZONTALSPACING:\n    case SPI_GETSCREENSAVETIMEOUT:\n    case SPI_GETGRIDGRANULARITY:\n    case SPI_GETKEYBOARDDELAY:\n    case SPI_ICONVERTICALSPACING:\n    {\n\tINT tmp;\n\tret = SystemParametersInfoA( uAction, uParam, lpvParam ? &tmp : NULL, fuWinIni );\n\tif (ret && lpvParam) *(INT16 *)lpvParam = tmp;\n\tbreak;\n    }\n\n    case SPI_GETKEYBOARDSPEED:\n    case SPI_GETMOUSEHOVERWIDTH:\n    case SPI_GETMOUSEHOVERHEIGHT:\n    case SPI_GETMOUSEHOVERTIME:\n    {\n\tDWORD tmp;\n\tret = SystemParametersInfoA( uAction, uParam, lpvParam ? &tmp : NULL, fuWinIni );\n\tif (ret && lpvParam) *(WORD *)lpvParam = tmp;\n\tbreak;\n    }\n\n    case SPI_GETICONTITLELOGFONT:\n    {\n\tLOGFONTA tmp;\n\tret = SystemParametersInfoA( uAction, uParam, lpvParam ? &tmp : NULL, fuWinIni );\n\tif (ret && lpvParam) logfont_32_to_16( &tmp, (LPLOGFONT16)lpvParam );\n\tbreak;\n    }\n\n    case SPI_GETNONCLIENTMETRICS:\n    {\n\tNONCLIENTMETRICSA tmp;\n\tLPNONCLIENTMETRICS16 lpnm16 = (LPNONCLIENTMETRICS16)lpvParam;\n\tif (lpnm16 && lpnm16->cbSize == sizeof(NONCLIENTMETRICS16))\n\t{\n\t    tmp.cbSize = sizeof(NONCLIENTMETRICSA);\n\t    ret = SystemParametersInfoA( uAction, uParam, &tmp, fuWinIni );\n\t    if (ret)\n            {\n                lpnm16->iBorderWidth\t = tmp.iBorderWidth;\n                lpnm16->iScrollWidth\t = tmp.iScrollWidth;\n                lpnm16->iScrollHeight\t = tmp.iScrollHeight;\n                lpnm16->iCaptionWidth\t = tmp.iCaptionWidth;\n                lpnm16->iCaptionHeight\t = tmp.iCaptionHeight;\n                lpnm16->iSmCaptionWidth\t = tmp.iSmCaptionWidth;\n                lpnm16->iSmCaptionHeight = tmp.iSmCaptionHeight;\n                lpnm16->iMenuWidth       = tmp.iMenuWidth;\n                lpnm16->iMenuHeight      = tmp.iMenuHeight;\n                logfont_32_to_16( &tmp.lfCaptionFont,\t&lpnm16->lfCaptionFont );\n                logfont_32_to_16( &tmp.lfSmCaptionFont,\t&lpnm16->lfSmCaptionFont );\n                logfont_32_to_16( &tmp.lfMenuFont,\t&lpnm16->lfMenuFont );\n                logfont_32_to_16( &tmp.lfStatusFont,\t&lpnm16->lfStatusFont );\n                logfont_32_to_16( &tmp.lfMessageFont,\t&lpnm16->lfMessageFont );\n            }\n\t}\n\telse /* winfile 95 sets cbSize to 340 */\n\t    ret = SystemParametersInfoA( uAction, uParam, lpvParam, fuWinIni );\n\tbreak;\n    }\n\n    case SPI_GETWORKAREA:\n    {\n\tRECT tmp;\n\tret = SystemParametersInfoA( uAction, uParam, lpvParam ? &tmp : NULL, fuWinIni );\n\tif (ret && lpvParam)\n        {\n            RECT16 *r16 = lpvParam;\n            r16->left   = tmp.left;\n            r16->top    = tmp.top;\n            r16->right  = tmp.right;\n            r16->bottom = tmp.bottom;\n        }\n\tbreak;\n    }\n\n    default:\n\tret = SystemParametersInfoA( uAction, uParam, lpvParam, fuWinIni );\n        break;\n    }\n\n    return ret;\n}\n\n\n/***********************************************************************\n *\t\tGetKeyboardLanguage (USER.489)\n */\nLONG WINAPI GetKeyboardLanguage16(void)\n{\n    FIXME(\"stub()\\n\");\n    return 0;\n}\n\n\n/***********************************************************************\n *\t\tSetKeyboardLanguage (USER.490)\n */\nLONG WINAPI SetKeyboardLanguage16(WORD a1, WORD a2)\n{\n    FIXME(\"stub(%04x,%04x)\\n\", a1, a2);\n    return 0;\n}\n\n\n/***********************************************************************\n *\t\tMakeScrollBarsRToL (USER.492)\n */\nLONG WINAPI MakeScrollBarsRToL(WORD a1, WORD a2, WORD a3)\n{\n    FIXME(\"stub(%04x,%04x,%04x)\\n\", a1, a2, a3);\n    return 0;\n}\n\n\n/***********************************************************************\n *\t\tUSER_496 (USER.496)\n */\nLONG WINAPI stub_USER_496(void)\n{\n    FIXME(\"stub\\n\");\n    return 0;\n}\n\nBOOL WINAPI MakeMenuRToL16(HMENU16 hmenu, BOOL16 rol)\n{\n    FIXME(\"stub(%04x,%d\\n)\", hmenu, rol);\n    return 0;\n}\n\nLONG WINAPI stub_USER_486(void)\n{\n    FIXME(\"stub\\n\");\n    return 0;\n}\n\nINT16 WINAPI RawDrawText16( HDC16 hdc, LPCSTR str, INT16 count, LPRECT16 rect, UINT16 flags )\n{\n    FIXME(\"(%04x,%s,%d,%p,%04x)\\n\", hdc, debugstr_an(str, count), rect, flags);\n    return DrawText16(hdc, str, count, rect, flags);\n}\n\nLONG WINAPI stub_USER_488(void)\n{\n    FIXME(\"stub\\n\");\n    return 0;\n}\n\nLONG WINAPI stub_USER_491(void)\n{\n    FIXME(\"stub\\n\");\n    return 0;\n}\n\nLONG WINAPI stub_USER_493(void)\n{\n    FIXME(\"stub\\n\");\n    return 0;\n}\n\nLONG WINAPI stub_USER_494(void)\n{\n    FIXME(\"stub\\n\");\n    return 0;\n}\n\nLONG WINAPI stub_USER_495(void)\n{\n    FIXME(\"stub\\n\");\n    return 0;\n}\n\nLONG WINAPI LangToBestCodePage16(void)\n{\n    FIXME(\"stub\\n\");\n    return 0;\n}\n\nLONG WINAPI GetNumKeyboards16(void)\n{\n    FIXME(\"stub\\n\");\n    return 0;\n}\n\nLONG WINAPI IsCharHebrew16(WORD a)\n{\n    FIXME(\"stub(%04x)\\n\", a);\n    return 0;\n}\n\nLONG WINAPI IsCharFrench16(WORD a)\n{\n    FIXME(\"stub(%04x)\\n\", a);\n    return 0;\n}\n\nLONG WINAPI IsCharArabic16(WORD a)\n{\n    FIXME(\"stub(%04x)\\n\", a);\n    return 0;\n}\n\n/***********************************************************************\n *           FormatMessage   (USER.606)\n */\nDWORD WINAPI FormatMessage16(\n    DWORD   dwFlags,\n    SEGPTR lpSource,     /* [in] NOTE: not always a valid pointer */\n    WORD   dwMessageId,\n    WORD   dwLanguageId,\n    LPSTR  lpBuffer,     /* [out] NOTE: *((HLOCAL16*)) for FORMAT_MESSAGE_ALLOCATE_BUFFER*/\n    WORD   nSize,\n    LPDWORD args )       /* [in] NOTE: va_list *args */\n{\n/* This implementation is completely dependent on the format of the va_list on x86 CPUs */\n    LPSTR       target,t;\n    DWORD       talloced;\n    LPSTR       from,f;\n    DWORD       width = dwFlags & FORMAT_MESSAGE_MAX_WIDTH_MASK;\n    BOOL        eos = FALSE;\n    LPSTR       allocstring = NULL;\n\n    TRACE(\"(0x%x,%x,%d,0x%x,%p,%d,%p)\\n\",\n          dwFlags,lpSource,dwMessageId,dwLanguageId,lpBuffer,nSize,args);\n        if ((dwFlags & FORMAT_MESSAGE_FROM_SYSTEM)\n                && (dwFlags & FORMAT_MESSAGE_FROM_HMODULE)) return 0;\n        if ((dwFlags & FORMAT_MESSAGE_FROM_STRING)\n                &&((dwFlags & FORMAT_MESSAGE_FROM_SYSTEM)\n                        || (dwFlags & FORMAT_MESSAGE_FROM_HMODULE))) return 0;\n\n    if (width && width != FORMAT_MESSAGE_MAX_WIDTH_MASK)\n        FIXME(\"line wrapping (%u) not supported.\\n\", width);\n    from = NULL;\n    if (dwFlags & FORMAT_MESSAGE_FROM_STRING)\n    {\n        char *source = MapSL(lpSource);\n        from = HeapAlloc( GetProcessHeap(), 0, strlen(source)+1 );\n        strcpy( from, source );\n    }\n    else if (dwFlags & FORMAT_MESSAGE_FROM_SYSTEM) {\n        from = HeapAlloc( GetProcessHeap(),0,200 );\n        sprintf(from,\"Systemmessage, messageid = 0x%08x\\n\",dwMessageId);\n    }\n    else if (dwFlags & FORMAT_MESSAGE_FROM_HMODULE) {\n        INT16   bufsize;\n        HINSTANCE16 hinst16 = ((HINSTANCE16)lpSource & 0xffff);\n\n        dwMessageId &= 0xFFFF;\n        bufsize=LoadString16(hinst16,dwMessageId,NULL,0);\n        if (bufsize) {\n            from = HeapAlloc( GetProcessHeap(), 0, bufsize +1);\n            LoadString16(hinst16,dwMessageId,from,bufsize+1);\n        }\n    }\n    target      = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, 100);\n    t   = target;\n    talloced= 100;\n\n#define ADD_TO_T(c) \\\n        do { \\\n            *t++=c;\\\n            if (t-target == talloced) {\\\n                target  = HeapReAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,target,talloced*2);\\\n                t       = target+talloced;\\\n                talloced*=2;\\\n            } \\\n        } while(0)\n\n    if (from) {\n        f=from;\n        while (*f && !eos) {\n            if (*f=='%') {\n                int     insertnr;\n                char    *fmtstr,*x,*lastf;\n                DWORD   *argliststart;\n\n                fmtstr = NULL;\n                lastf = f;\n                f++;\n                if (!*f) {\n                    ADD_TO_T('%');\n                    continue;\n                }\n                switch (*f) {\n                case '1':case '2':case '3':case '4':case '5':\n                case '6':case '7':case '8':case '9':\n                    insertnr=*f-'0';\n                    switch (f[1]) {\n                    case '0':case '1':case '2':case '3':\n                    case '4':case '5':case '6':case '7':\n                    case '8':case '9':\n                        f++;\n                        insertnr=insertnr*10+*f-'0';\n                        f++;\n                        break;\n                    default:\n                        f++;\n                        break;\n                    }\n                    if (*f=='!') {\n                        f++;\n                        if (NULL!=(x=strchr(f,'!'))) {\n                            *x='\\0';\n                            fmtstr=HeapAlloc(GetProcessHeap(),0,strlen(f)+2);\n                            sprintf(fmtstr,\"%%%s\",f);\n                            f=x+1;\n                        } else {\n                            fmtstr=HeapAlloc(GetProcessHeap(),0,strlen(f)+2);\n                            sprintf(fmtstr,\"%%%s\",f);\n                            f+=strlen(f); /*at \\0*/\n                        }\n                    }\n                    else\n                    {\n                        if(!args) break;\n                        fmtstr=HeapAlloc( GetProcessHeap(), 0, 3 );\n                        strcpy( fmtstr, \"%s\" );\n                    }\n                    if (args) {\n                        int     ret;\n                        int     sz;\n                        LPSTR   b = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sz = 100);\n\n                        argliststart=args+insertnr-1;\n\n                        /* CMF - This makes a BIG assumption about va_list */\n                        while ((ret = vsnprintf(b, sz, fmtstr, (va_list) argliststart)) < 0 || ret >= sz) {\n                            LPSTR new_b;\n                            sz = (ret == -1 ? sz + 100 : ret + 1);\n                            new_b = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, b, sz);\n                            if (!new_b) break;\n                            b = new_b;\n                        }\n                        for (x=b; *x; x++) ADD_TO_T(*x);\n                        HeapFree(GetProcessHeap(), 0, b);\n                    } else {\n                        /* NULL args - copy formatstr\n                         * (probably wrong)\n                         */\n                        while ((lastf<f)&&(*lastf)) {\n                            ADD_TO_T(*lastf++);\n                        }\n                    }\n                    HeapFree(GetProcessHeap(),0,fmtstr);\n                    break;\n                case '0': /* Just stop processing format string */\n                    eos = TRUE;\n                    f++;\n                    break;\n                case 'n': /* 16 bit version just outputs 'n' */\n                default:\n                    ADD_TO_T(*f++);\n                    break;\n                }\n            } else { /* '\\n' or '\\r' gets mapped to \"\\r\\n\" */\n                if(*f == '\\n' || *f == '\\r') {\n                    if (width == 0) {\n                        ADD_TO_T('\\r');\n                        ADD_TO_T('\\n');\n                        if(*f++ == '\\r' && *f == '\\n')\n                            f++;\n                    }\n                } else {\n                    ADD_TO_T(*f++);\n                }\n            }\n        }\n        *t='\\0';\n    }\n    talloced = strlen(target)+1;\n    TRACE(\"-- %s\\n\",debugstr_a(target));\n    if (dwFlags & FORMAT_MESSAGE_ALLOCATE_BUFFER) {\n        /* nSize is the MINIMUM size */\n        HLOCAL16 h = LocalAlloc16(LPTR,talloced);\n        SEGPTR ptr = LocalLock16(h);\n        allocstring = MapSL( ptr );\n        memcpy( allocstring,target,talloced);\n        LocalUnlock16( h );\n        *((HLOCAL16*)lpBuffer) = h;\n    } else\n        lstrcpynA(lpBuffer,target,nSize);\n    HeapFree(GetProcessHeap(),0,target);\n    HeapFree(GetProcessHeap(),0,from);\n    return (dwFlags & FORMAT_MESSAGE_ALLOCATE_BUFFER) ?\n        strlen(allocstring):\n        strlen(lpBuffer);\n}\n#undef ADD_TO_T\n\n\n/**********************************************************************\n *\t\tDestroyIcon32 (USER.610)\n *\n * This routine is actually exported from Win95 USER under the name\n * DestroyIcon32 ...  The behaviour implemented here should mimic\n * the Win95 one exactly, especially the return values, which\n * depend on the setting of various flags.\n */\nWORD WINAPI DestroyIcon32( HGLOBAL16 handle, UINT16 flags )\n{\n    WORD retv;\n\n    /* Check whether destroying active cursor */\n\n    if (GetCursor16() == handle)\n    {\n        WARN(\"Destroying active cursor!\\n\" );\n        return FALSE;\n    }\n\n    /* Try shared cursor/icon first */\n\n    if (!(flags & CID_NONSHARED))\n    {\n        INT count = release_shared_icon( handle );\n        if (count != -1)\n            return (flags & CID_WIN32) ? TRUE : (count == 0);\n    }\n\n    /* Now assume non-shared cursor/icon */\n\n    retv = free_icon_handle( handle );\n    return (flags & CID_RESOURCE)? retv : TRUE;\n}\n\n\n/***********************************************************************\n *\t\tChangeDisplaySettings (USER.620)\n */\nLONG WINAPI ChangeDisplaySettings16( LPDEVMODEA devmode, DWORD flags )\n{\n    return ChangeDisplaySettingsA( devmode, flags );\n}\n\n\n/***********************************************************************\n *\t\tEnumDisplaySettings (USER.621)\n */\nBOOL16 WINAPI EnumDisplaySettings16( LPCSTR name, DWORD n, LPDEVMODEA devmode )\n{\n    return EnumDisplaySettingsA( name, n, devmode );\n}\n\n/**********************************************************************\n *          DrawFrameControl  (USER.656)\n */\nBOOL16 WINAPI DrawFrameControl16( HDC16 hdc, LPRECT16 rc, UINT16 uType, UINT16 uState )\n{\n    RECT rect32;\n    BOOL ret;\n\n    rect32.left   = rc->left;\n    rect32.top    = rc->top;\n    rect32.right  = rc->right;\n    rect32.bottom = rc->bottom;\n    ret = DrawFrameControl( HDC_32(hdc), &rect32, uType, uState );\n    rc->left   = rect32.left;\n    rc->top    = rect32.top;\n    rc->right  = rect32.right;\n    rc->bottom = rect32.bottom;\n    return ret;\n}\n\n/**********************************************************************\n *          DrawEdge   (USER.659)\n */\nBOOL16 WINAPI DrawEdge16( HDC16 hdc, LPRECT16 rc, UINT16 edge, UINT16 flags )\n{\n    RECT rect32;\n    BOOL ret;\n\n    rect32.left   = rc->left;\n    rect32.top    = rc->top;\n    rect32.right  = rc->right;\n    rect32.bottom = rc->bottom;\n    ret = DrawEdge( HDC_32(hdc), &rect32, edge, flags );\n    rc->left   = rect32.left;\n    rc->top    = rect32.top;\n    rc->right  = rect32.right;\n    rc->bottom = rect32.bottom;\n    return ret;\n}\n\n/**********************************************************************\n *\t\tCheckMenuRadioItem (USER.666)\n */\nBOOL16 WINAPI CheckMenuRadioItem16(HMENU16 hMenu, UINT16 first, UINT16 last,\n                                   UINT16 check, BOOL16 bypos)\n{\n     return CheckMenuRadioItem( HMENU_32(hMenu), first, last, check, bypos );\n}\n#if 0\n/* wow32 */\n#define SYSERRORBOX_NONE 0\n#define SYSERRORBOX_OK 1\n#define SYSERRORBOX_CANCEL 2\n#define SYSERRORBOX_YES 3\n#define SYSERRORBOX_NO 4\n#define SYSERRORBOX_ABORT 5\n#define SYSERRORBOX_RETRY 6\n#define SYSERRORBOX_IGNORE 7\n#define SYSERRORBOX_CLOSE 8\n#define SYSERRORBOX_HELP 9\n#define SYSERRORBOX_TRYAGAIN 10\n#define SYSERRORBOX_CONTINUE 11\n#define SYSERRORBOX_MAX 12\n#else\n/* win31 */\n#define SYSERRORBOX_NONE 0\n#define SYSERRORBOX_OK 1\n#define SYSERRORBOX_CANCEL 2\n#define SYSERRORBOX_YES 3\n#define SYSERRORBOX_NO 4\n#define SYSERRORBOX_RETRY 5\n#define SYSERRORBOX_ABORT 6\n#define SYSERRORBOX_IGNORE 7\n/* 終了(&C) (win31JP) 閉じる(&C) (windows) */\n#define SYSERRORBOX_CLOSE 8\n/* crash! */\n#define SYSERRORBOX_HELP 9\n#define SYSERRORBOX_TRYAGAIN 10\n#define SYSERRORBOX_CONTINUE 11\n#define SYSERRORBOX_MAX 12\n#endif\n#define SYSERRORBOX_DEFBUTTON 0x8000\nDWORD SysErrorBox_table[] =\n{\n    [SYSERRORBOX_OK] = IDOK,\n    [SYSERRORBOX_CANCEL] = IDCANCEL,\n    [SYSERRORBOX_YES] = IDYES,\n    [SYSERRORBOX_NO] = IDNO,\n    [SYSERRORBOX_ABORT] = IDABORT,\n    [SYSERRORBOX_RETRY] = IDRETRY,\n    [SYSERRORBOX_IGNORE] = IDIGNORE,\n    [SYSERRORBOX_CLOSE] = IDCLOSE,\n    [SYSERRORBOX_HELP] = IDHELP,\n    [SYSERRORBOX_TRYAGAIN] = IDTRYAGAIN,\n    [SYSERRORBOX_CONTINUE] = IDCONTINUE,\n};\n//Based on 65bfc47fd6ed628f7696080f04857318aef82226 reactos/include/reactos/undocuser.h\ntypedef struct _MSGBOXDATA\n{\n    MSGBOXPARAMSW mbp;          // Size: 0x28 (on x86), 0x50 (on x64)\n    HWND     hwndOwner;\n#if defined(_WIN32) && (_WIN32_WINNT >= _WIN32_WINNT_WIN7) /* (NTDDI_VERSION >= NTDDI_WIN7) */\n    DWORD    dwPadding;\n#endif\n    WORD     wLanguageId;\n    INT*     pidButton;         // Array of button IDs\n    LPCWSTR* ppszButtonText;    // Array of button text strings\n    DWORD    dwButtons;         // Number of buttons\n    UINT     uDefButton;        // Default button ID\n    UINT     uCancelId;         // Button ID for Cancel action\n#if (_WIN32_WINNT >= _WIN32_WINNT_WINXP)    /* (NTDDI_VERSION >= NTDDI_WINXP) */\n    DWORD    dwTimeout;         // Message box timeout\n#endif\n    DWORD    dwReserved0;\n#if (_WIN32_WINNT >= _WIN32_WINNT_WIN7)     /* (NTDDI_VERSION >= NTDDI_WIN7) */\n    DWORD    dwReserved[4];\n    /* win10 (WOW64) has an extra field */\n    DWORD    dwReserved2;\n#endif\n} MSGBOXDATA, *PMSGBOXDATA, *LPMSGBOXDATA;\ntypedef int (WINAPI*SoftModalMessageBox_t)(IN LPMSGBOXDATA lpMsgBoxData);\nSoftModalMessageBox_t SoftModalMessageBox;\nLPCWSTR(WINAPI*MB_GetString)(int);\n/* FIXME:wine does not have SoftModalMessageBox implementation */\nINT16 WINAPI SysErrorBox16(LPCSTR text, LPCSTR caption, UINT16 btn1, UINT16 btn2, UINT16 btn3)\n{\n    MSGBOXDATA data;\n    int res = 0;\n\n    INT pids[3] = { 0 };\n    LPCWSTR ppText[3] = { 0 };\n    int i = 0;\n    UINT16 a1 = btn1 & ~SYSERRORBOX_DEFBUTTON;\n    UINT16 a2 = btn2 & ~SYSERRORBOX_DEFBUTTON;\n    UINT16 a3 = btn3 & ~SYSERRORBOX_DEFBUTTON;\n    if (!SoftModalMessageBox)\n    {\n        HMODULE user32 = GetModuleHandleW(L\"user32\");\n        SoftModalMessageBox = GetProcAddress(user32, \"SoftModalMessageBox\");\n        MB_GetString = (LPCWSTR(WINAPI*)(int))GetProcAddress(user32, \"MB_GetString\");\n    }\n    if (a1 != SYSERRORBOX_NONE && a1 < SYSERRORBOX_MAX)\n    {\n        pids[i] = 1;\n        ppText[i] = MB_GetString(SysErrorBox_table[a1] - 1);\n        if (ppText[i])\n        {\n            i++;\n        }\n    }\n    if (a2 != SYSERRORBOX_NONE && a2 < SYSERRORBOX_MAX)\n    {\n        pids[i] = 2;\n        ppText[i] = MB_GetString(SysErrorBox_table[a2] - 1);\n        if (ppText[i])\n        {\n            i++;\n        }\n    }\n    if (a3 != SYSERRORBOX_NONE && a3 < SYSERRORBOX_MAX)\n    {\n        pids[i] = 3;\n        ppText[i] = MB_GetString(SysErrorBox_table[a3] - 1);\n        if (ppText[i])\n        {\n            i++;\n        }\n    }\n    ZeroMemory(&data, sizeof(data));\n    data.mbp.cbSize = sizeof(data.mbp);\n    data.mbp.hwndOwner = NULL;\n    data.mbp.hInstance = NULL;\n    SIZE_T textwc = MultiByteToWideChar(CP_ACP, 0, text, -1, NULL, 0);\n    SIZE_T capwc = MultiByteToWideChar(CP_ACP, 0, caption, -1, NULL, 0);\n    LPWSTR wtext = HeapAlloc(GetProcessHeap(), 0, textwc * sizeof(WCHAR));\n    LPWSTR wcaption = HeapAlloc(GetProcessHeap(), 0, capwc * sizeof(WCHAR));\n    MultiByteToWideChar(CP_ACP, 0, text, -1, wtext, textwc);\n    MultiByteToWideChar(CP_ACP, 0, caption, -1, wcaption, capwc);\n    data.mbp.lpszText = wtext;\n    data.mbp.lpszCaption = wcaption;\n    data.mbp.lpfnMsgBoxCallback = NULL;\n    data.mbp.dwStyle = MB_TASKMODAL | MB_OKCANCEL;\n\n    data.wLanguageId = 0;\n    data.pidButton = pids;\n    data.ppszButtonText = ppText;\n    data.dwButtons = i;\n    data.uDefButton = 4;\n    if (btn3 & SYSERRORBOX_DEFBUTTON)\n    {\n        data.uDefButton = 2;\n    }\n    if (btn2 & SYSERRORBOX_DEFBUTTON)\n    {\n        data.uDefButton = 1;\n    }\n    if (btn1 & SYSERRORBOX_DEFBUTTON)\n    {\n        data.uDefButton = 0;\n    }\n    data.uCancelId = 0;\n\n#if (_WIN32_WINNT >= _WIN32_WINNT_WINXP) /* (NTDDI_VERSION >= NTDDI_WINXP) */\n    data.dwTimeout = INFINITE;\n#endif\n    int result = SoftModalMessageBox(&data);\n    HeapFree(GetProcessHeap(), 0, wtext);\n    HeapFree(GetProcessHeap(), 0, wcaption);\n    return result;\n}\n\nBOOL16 WINAPI LockInput16(HANDLE16 res, HWND16 hwnd, BOOL16 lock)\n{\n    FIXME(\"(%d, %d, %d) - stub\\n\", res, hwnd, lock);\n    return FALSE;\n}\n\nvoid WINAPI RepaintScreen16()\n{\n    FIXME(\" - stub\\n\");\n}\n"
  },
  {
    "path": "user/user.def",
    "content": "; File generated automatically from user.exe16.spec; do not edit!\n\nLIBRARY user.exe16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA;=.L__wine_spec_dos_header @1 DATA PRIVATE\n  CreateIcon16 @2\n  CreateIconFromResourceEx16\n  SelectPalette16\n  dialog_template16_to_template32\n  DIALOG_CallDialogProc\n  __wine_call_wndproc\n  LoadBitmap16\n  window_message16_32\n  window_message32_16\n  LoadString16\n  set_realized_palette\n  get_realized_palette\n  regen_icon\n"
  },
  {
    "path": "user/user.exe16.spec",
    "content": "1   pascal -ret16 MessageBox(word str str word) MessageBox16\n2   pascal -ret16 OldExitWindows() OldExitWindows16\n3   stub EnableOEMLayer\n4   stub DisableOEMLayer\n5   pascal -ret16 InitApp(word) InitApp16\n6   pascal -ret16 PostQuitMessage(word) PostQuitMessage16\n7   pascal -ret16 ExitWindows(long word) ExitWindows16\n10  pascal -ret16 SetTimer(word word word segptr) SetTimer16\n11  pascal -ret16 SetSystemTimer(word word word segptr) SetSystemTimer16 # BEAR11\n12  pascal -ret16 KillTimer(word word) KillTimer16\n13  pascal   GetTickCount() GetTickCount\n14  pascal   GetTimerResolution() GetTimerResolution16\n# GetCurrentTime is effectively identical to GetTickCount\n15  pascal   GetCurrentTime() GetTickCount\n16  pascal -ret16 ClipCursor(ptr) ClipCursor16\n17  pascal -ret16 GetCursorPos(ptr) GetCursorPos16\n18  pascal -ret16 SetCapture(word) SetCapture16\n19  pascal -ret16 ReleaseCapture() ReleaseCapture16\n20  pascal -ret16 SetDoubleClickTime(word) SetDoubleClickTime16\n21  pascal -ret16 GetDoubleClickTime() GetDoubleClickTime16\n22  pascal -ret16 SetFocus(word) SetFocus16\n23  pascal -ret16 GetFocus() GetFocus16\n24  pascal -ret16 RemoveProp(word ptr) RemoveProp16\n25  pascal -ret16 GetProp(word str) GetProp16\n26  pascal -ret16 SetProp(word str word) SetProp16\n27  pascal -ret16 EnumProps(word segptr) EnumProps16\n28  pascal -ret16 ClientToScreen(word ptr) ClientToScreen16\n29  pascal -ret16 ScreenToClient(word ptr) ScreenToClient16\n30  pascal -ret16 WindowFromPoint(long) WindowFromPoint16\n31  pascal -ret16 IsIconic(word) IsIconic16\n32  pascal -ret16 GetWindowRect(word ptr) GetWindowRect16\n33  pascal -ret16 GetClientRect(word ptr) GetClientRect16\n34  pascal -ret16 EnableWindow(word word) EnableWindow16\n35  pascal -ret16 IsWindowEnabled(word) IsWindowEnabled16\n36  pascal -ret16 GetWindowText(word segptr word) GetWindowText16\n37  pascal -ret16 SetWindowText(word segstr) SetWindowText16\n38  pascal -ret16 GetWindowTextLength(word) GetWindowTextLength16\n39  pascal -ret16 BeginPaint(word ptr) BeginPaint16\n40  pascal -ret16 EndPaint(word ptr) EndPaint16\n41  pascal -ret16 CreateWindow(str str long s_word s_word s_word s_word word word word segptr) CreateWindow16\n42  pascal -ret16 ShowWindow(word word) ShowWindow16\n43  pascal -ret16 CloseWindow(word) CloseWindow16\n44  pascal -ret16 OpenIcon(word) OpenIcon16\n45  pascal -ret16 BringWindowToTop(word) BringWindowToTop16\n46  pascal -ret16 GetParent(word) GetParent16\n47  pascal -ret16 IsWindow(word) IsWindow16\n48  pascal -ret16 IsChild(word word) IsChild16\n49  pascal -ret16 IsWindowVisible(word) IsWindowVisible16\n50  pascal -ret16 FindWindow(str str) FindWindow16\n51  stub BEAR51 # IsTwoByteCharPrefix\n52  pascal -ret16 AnyPopup() AnyPopup16\n53  pascal -ret16 DestroyWindow(word) DestroyWindow16\n54  pascal -ret16 EnumWindows(segptr long) EnumWindows16\n55  pascal -ret16 EnumChildWindows(word segptr long) EnumChildWindows16\n56  pascal -ret16 MoveWindow(word word word word word word) MoveWindow16\n57  pascal -ret16 RegisterClass(ptr) RegisterClass16\n58  pascal -ret16 GetClassName(word ptr word) GetClassName16\n59  pascal -ret16 SetActiveWindow(word) SetActiveWindow16\n60  pascal -ret16 GetActiveWindow() GetActiveWindow16\n61  pascal -ret16 ScrollWindow(word s_word s_word ptr ptr) ScrollWindow16\n62  pascal -ret16 SetScrollPos(word word s_word word) SetScrollPos16\n63  pascal -ret16 GetScrollPos(word word) GetScrollPos16\n64  pascal -ret16 SetScrollRange(word word s_word s_word word) SetScrollRange16\n65  pascal -ret16 GetScrollRange(word word ptr ptr) GetScrollRange16\n66  pascal -ret16 GetDC(word) GetDC16\n67  pascal -ret16 GetWindowDC(word) GetWindowDC16\n68  pascal -ret16 ReleaseDC(word word) ReleaseDC16\n69  pascal -ret16 SetCursor(word) SetCursor16\n70  pascal -ret16 SetCursorPos(word word) SetCursorPos16\n71  pascal -ret16 ShowCursor(word) ShowCursor16\n72  pascal -ret16 SetRect(ptr s_word s_word s_word s_word) SetRect16\n73  pascal -ret16 SetRectEmpty(ptr) SetRectEmpty16\n74  pascal -ret16 CopyRect(ptr ptr) CopyRect16\n75  pascal -ret16 IsRectEmpty(ptr) IsRectEmpty16\n76  pascal -ret16 PtInRect(ptr long) PtInRect16\n77  pascal -ret16 OffsetRect(ptr s_word s_word) OffsetRect16\n78  pascal -ret16 InflateRect(ptr s_word s_word) InflateRect16\n79  pascal -ret16 IntersectRect(ptr ptr ptr) IntersectRect16\n80  pascal -ret16 UnionRect(ptr ptr ptr) UnionRect16\n81  pascal -ret16 FillRect(word ptr word) FillRect16\n82  pascal -ret16 InvertRect(word ptr) InvertRect16\n83  pascal -ret16 FrameRect(word ptr word) FrameRect16\n84  pascal -ret16 DrawIcon(word s_word s_word word) DrawIcon16\n85  pascal -ret16 DrawText(word str s_word ptr word) DrawText16\n86  pascal   IconSize() IconSize16 # later versions: BEAR86\n87  pascal -ret16 DialogBox(word str word segptr) DialogBox16\n88  pascal -ret16 EndDialog(word s_word) EndDialog16\n89  pascal -ret16 CreateDialog(word str word segptr) CreateDialog16\n90  pascal -ret16 IsDialogMessage(word segptr) IsDialogMessage16\n91  pascal -ret16 GetDlgItem(word word) GetDlgItem16\n92  pascal -ret16 SetDlgItemText(word word segstr) SetDlgItemText16\n93  pascal -ret16 GetDlgItemText(word word segptr word) GetDlgItemText16\n94  pascal -ret16 SetDlgItemInt(word word word word) SetDlgItemInt16\n95  pascal -ret16 GetDlgItemInt(word s_word ptr word) GetDlgItemInt16\n96  pascal -ret16 CheckRadioButton(word word word word) CheckRadioButton16\n97  pascal -ret16 CheckDlgButton(word word word) CheckDlgButton16\n98  pascal -ret16 IsDlgButtonChecked(word word) IsDlgButtonChecked16\n99  pascal -ret16 DlgDirSelect(word ptr word) DlgDirSelect16\n100 pascal -ret16 DlgDirList(word str word word word) DlgDirList16\n101 pascal   SendDlgItemMessage(word word word word long) SendDlgItemMessage16\n102 pascal -ret16 AdjustWindowRect(ptr long word) AdjustWindowRect16\n103 pascal -ret16 MapDialogRect(word ptr) MapDialogRect16\n104 pascal -ret16 MessageBeep(word) MessageBeep16\n105 pascal -ret16 FlashWindow(word word) FlashWindow16\n106 pascal -ret16 GetKeyState(word) GetKeyState16\n107 pascal   DefWindowProc(word word word long) DefWindowProc16\n108 pascal -ret16 GetMessage(ptr word word word) GetMessage16\n109 pascal -ret16 PeekMessage(ptr word word word word) PeekMessage16\n110 pascal -ret16 PostMessage(word word word long) PostMessage16\n111 pascal   SendMessage(word word word long) SendMessage16\n112 pascal -ret16 WaitMessage() WaitMessage16\n113 pascal -ret16 TranslateMessage(ptr) TranslateMessage16\n114 pascal   DispatchMessage(ptr) DispatchMessage16\n115 pascal -ret16 ReplyMessage(long) ReplyMessage16\n116 pascal -ret16 PostAppMessage(word word word long) PostAppMessage16\n117 pascal -ret16 WindowFromDC(word) WindowFromDC16 # not in W1.1, W2.0\n118 pascal -ret16 RegisterWindowMessage(str) RegisterWindowMessageA\n119 pascal   GetMessagePos() GetMessagePos\n120 pascal   GetMessageTime() GetMessageTime\n121 pascal   SetWindowsHook(s_word segptr) SetWindowsHook16\n122 pascal   CallWindowProc(segptr word word word long) CallWindowProc16\n123 pascal -ret16 CallMsgFilter(ptr s_word) CallMsgFilter16\n124 pascal -ret16 UpdateWindow(word) UpdateWindow16\n125 pascal -ret16 InvalidateRect(word ptr word) InvalidateRect16\n126 pascal -ret16 InvalidateRgn(word word word) InvalidateRgn16\n127 pascal -ret16 ValidateRect(word ptr) ValidateRect16\n128 pascal -ret16 ValidateRgn(word word) ValidateRgn16\n129 pascal -ret16 GetClassWord(word s_word) GetClassWord16\n130 pascal -ret16 SetClassWord(word s_word word) SetClassWord16\n131 pascal   GetClassLong(word s_word) GetClassLong16\n132 pascal   SetClassLong(word s_word long) SetClassLong16\n133 pascal -ret16 GetWindowWord(word s_word) GetWindowWord16\n134 pascal -ret16 SetWindowWord(word s_word word) SetWindowWord16\n135 pascal   GetWindowLong(word s_word) GetWindowLong16\n136 pascal   SetWindowLong(word s_word long) SetWindowLong16\n137 pascal -ret16 OpenClipboard(word) OpenClipboard16\n138 pascal -ret16 CloseClipboard() CloseClipboard16\n139 pascal -ret16 EmptyClipboard() EmptyClipboard16\n140 pascal -ret16 GetClipboardOwner() GetClipboardOwner16\n141 pascal -ret16 SetClipboardData(word word) SetClipboardData16\n142 pascal -ret16 GetClipboardData(word) GetClipboardData16\n143 pascal -ret16 CountClipboardFormats() CountClipboardFormats16\n144 pascal -ret16 EnumClipboardFormats(word) EnumClipboardFormats16\n145 pascal -ret16 RegisterClipboardFormat(str) RegisterClipboardFormat16\n146 pascal -ret16 GetClipboardFormatName(word ptr s_word) GetClipboardFormatName16\n147 pascal -ret16 SetClipboardViewer(word) SetClipboardViewer16\n148 pascal -ret16 GetClipboardViewer() GetClipboardViewer16\n149 pascal -ret16 ChangeClipboardChain(word word) ChangeClipboardChain16\n150 pascal -ret16 LoadMenu(word str) LoadMenu16\n151 pascal -ret16 CreateMenu() CreateMenu16\n152 pascal -ret16 DestroyMenu(word) DestroyMenu16\n153 pascal -ret16 ChangeMenu(word word segstr word word) ChangeMenu16\n154 pascal -ret16 CheckMenuItem(word word word) CheckMenuItem16\n155 pascal -ret16 EnableMenuItem(word word word) EnableMenuItem16\n156 pascal -ret16 GetSystemMenu(word word) GetSystemMenu16\n157 pascal -ret16 GetMenu(word) GetMenu16\n158 pascal -ret16 SetMenu(word word) SetMenu16\n159 pascal -ret16 GetSubMenu(word word) GetSubMenu16\n160 pascal -ret16 DrawMenuBar(word) DrawMenuBar16\n161 pascal -ret16 GetMenuString(word word ptr s_word word) GetMenuString16\n162 pascal -ret16 HiliteMenuItem(word word word word) HiliteMenuItem16\n163 pascal -ret16 CreateCaret(word word word word) CreateCaret16\n164 pascal -ret16 DestroyCaret() DestroyCaret16\n165 pascal -ret16 SetCaretPos(word word) SetCaretPos16\n166 pascal -ret16 HideCaret(word) HideCaret16\n167 pascal -ret16 ShowCaret(word) ShowCaret16\n168 pascal -ret16 SetCaretBlinkTime(word) SetCaretBlinkTime16\n169 pascal -ret16 GetCaretBlinkTime() GetCaretBlinkTime16\n170 pascal -ret16 ArrangeIconicWindows(word) ArrangeIconicWindows16 # W1.1: CREATECONVERTWINDOW, W2.0: nothing !\n171 pascal -ret16 WinHelp(word str word long) WinHelp16 # W1.1: SHOWCONVERTWINDOW, W2.0: nothing !\n172 pascal -ret16 SwitchToThisWindow(word word) SwitchToThisWindow16 # W1.1: SETCONVERTWINDOWHEIGHT, W2.0: nothing !\n173 pascal -ret16 LoadCursor(word str) LoadCursor16\n174 pascal -ret16 LoadIcon(word str) LoadIcon16\n175 pascal -ret16 LoadBitmap(word str) LoadBitmap16\n176 pascal -ret16 LoadString(word word ptr s_word) LoadString16\n177 pascal -ret16 LoadAccelerators(word str) LoadAccelerators16\n178 pascal -ret16 TranslateAccelerator(word word ptr) TranslateAccelerator16\n179 pascal -ret16 GetSystemMetrics(s_word) GetSystemMetrics16\n180 pascal   GetSysColor(word) GetSysColor16\n181 pascal -ret16 SetSysColors(word ptr ptr) SetSysColors16\n182 pascal -ret16 KillSystemTimer(word word) KillSystemTimer16 # BEAR182\n183 pascal -ret16 GetCaretPos(ptr) GetCaretPos16\n184 pascal -ret16 QuerySendMessage(word word word ptr) QuerySendMessage16\n185 pascal -ret16 GrayString(word word segptr segptr s_word s_word s_word s_word s_word) GrayString16\n186 pascal -ret16 SwapMouseButton(word) SwapMouseButton16\n187 pascal -ret16 EndMenu() EndMenu\n188 pascal -ret16 SetSysModalWindow(word) SetSysModalWindow16\n189 pascal -ret16 GetSysModalWindow() GetSysModalWindow16\n190 pascal -ret16 GetUpdateRect(word ptr word) GetUpdateRect16\n191 pascal -ret16 ChildWindowFromPoint(word long) ChildWindowFromPoint16\n192 pascal -ret16 InSendMessage() InSendMessage16\n193 pascal -ret16 IsClipboardFormatAvailable(word) IsClipboardFormatAvailable16\n194 pascal -ret16 DlgDirSelectComboBox(word ptr word) DlgDirSelectComboBox16\n195 pascal -ret16 DlgDirListComboBox(word ptr word word word) DlgDirListComboBox16\n196 pascal   TabbedTextOut(word s_word s_word ptr s_word s_word ptr s_word) TabbedTextOut16\n197 pascal   GetTabbedTextExtent(word ptr word word ptr) GetTabbedTextExtent16\n198 pascal -ret16 CascadeChildWindows(word word) CascadeChildWindows16\n199 pascal -ret16 TileChildWindows(word word) TileChildWindows16\n200 pascal -ret16 OpenComm(str word word) OpenComm16\n201 pascal -ret16 SetCommState(ptr) SetCommState16\n202 pascal -ret16 GetCommState(word ptr) GetCommState16\n203 pascal -ret16 GetCommError(word ptr) GetCommError16\n204 pascal -ret16 ReadComm(word ptr word) ReadComm16\n205 pascal -ret16 WriteComm(word ptr word) WriteComm16\n206 pascal -ret16 TransmitCommChar(word word) TransmitCommChar16\n207 pascal -ret16 CloseComm(word) CloseComm16\n208 pascal   SetCommEventMask(word word) SetCommEventMask16\n209 pascal -ret16 GetCommEventMask(word word) GetCommEventMask16\n210 pascal -ret16 SetCommBreak(word) SetCommBreak16\n211 pascal -ret16 ClearCommBreak(word) ClearCommBreak16\n212 pascal -ret16 UngetCommChar(word word) UngetCommChar16\n213 pascal -ret16 BuildCommDCB(ptr ptr) BuildCommDCB16\n214 pascal   EscapeCommFunction(word word) EscapeCommFunction16\n215 pascal -ret16 FlushComm(word word) FlushComm16\n216 pascal   UserSeeUserDo(word word word word) UserSeeUserDo16 # W1.1, W2.0: MYOPENCOMM\n#217-299 not in W1.1\n217 pascal -ret16 LookupMenuHandle(word s_word) LookupMenuHandle16\n218 pascal -ret16 DialogBoxIndirect(word word word segptr) DialogBoxIndirect16\n219 pascal -ret16 CreateDialogIndirect(word segptr word segptr) CreateDialogIndirect16\n220 pascal -ret16 LoadMenuIndirect(segptr) LoadMenuIndirect16\n221 pascal -ret16 ScrollDC(word s_word s_word ptr ptr word ptr) ScrollDC16\n222 pascal -ret16 GetKeyboardState(ptr) GetKeyboardState16\n223 pascal -ret16 SetKeyboardState(ptr) SetKeyboardState16\n224 pascal -ret16 GetWindowTask(word) GetWindowTask16\n225 pascal -ret16 EnumTaskWindows(word segptr long) EnumTaskWindows16\n226 pascal -ret16 LockInput(word word word) LockInput16\n227 pascal -ret16 GetNextDlgGroupItem(word word word) GetNextDlgGroupItem16\n228 pascal -ret16 GetNextDlgTabItem(word word word) GetNextDlgTabItem16\n229 pascal -ret16 GetTopWindow(word) GetTopWindow16\n230 pascal -ret16 GetNextWindow(word word) GetNextWindow16\n231 pascal -ret16 GetSystemDebugState() GetSystemDebugState16\n232 pascal -ret16 SetWindowPos(word word word word word word word) SetWindowPos16\n233 pascal -ret16 SetParent(word word) SetParent16\n234 pascal -ret16 UnhookWindowsHook(s_word segptr) UnhookWindowsHook16\n235 pascal   DefHookProc(s_word word long ptr) DefHookProc16\n236 pascal -ret16 GetCapture() GetCapture16\n237 pascal -ret16 GetUpdateRgn(word word word) GetUpdateRgn16\n238 pascal -ret16 ExcludeUpdateRgn(word word) ExcludeUpdateRgn16\n239 pascal -ret16 DialogBoxParam(word str word segptr long) DialogBoxParam16\n240 pascal -ret16 DialogBoxIndirectParam(word word word segptr long) DialogBoxIndirectParam16\n241 pascal -ret16 CreateDialogParam(word str word segptr long) CreateDialogParam16\n242 pascal -ret16 CreateDialogIndirectParam(word segptr word segptr long) CreateDialogIndirectParam16\n243 pascal   GetDialogBaseUnits() GetDialogBaseUnits16\n244 pascal -ret16 EqualRect(ptr ptr) EqualRect16\n245 pascal -ret16 EnableCommNotification(s_word word s_word s_word) EnableCommNotification16\n246 pascal -ret16 ExitWindowsExec(str str) ExitWindowsExec16\n247 pascal -ret16 GetCursor() GetCursor16\n248 pascal -ret16 GetOpenClipboardWindow() GetOpenClipboardWindow16\n249 pascal -ret16 GetAsyncKeyState(word) GetAsyncKeyState16\n250 pascal -ret16 GetMenuState(word word word) GetMenuState16\n251 pascal   SendDriverMessage(word word long long) SendDriverMessage16\n252 pascal -ret16 OpenDriver(str str long) OpenDriver16\n253 pascal   CloseDriver(word long long) CloseDriver16\n254 pascal -ret16 GetDriverModuleHandle(word) GetDriverModuleHandle16\n255 pascal   DefDriverProc(long word word long long) DefDriverProc16\n256 pascal -ret16 GetDriverInfo(word ptr) GetDriverInfo16\n257 pascal -ret16 GetNextDriver(word long) GetNextDriver16\n258 pascal -ret16 MapWindowPoints(word word ptr word) MapWindowPoints16\n259 pascal -ret16 BeginDeferWindowPos(s_word) BeginDeferWindowPos16\n260 pascal -ret16 DeferWindowPos(word word word s_word s_word s_word s_word word) DeferWindowPos16\n261 pascal -ret16 EndDeferWindowPos(word) EndDeferWindowPos16\n262 pascal -ret16 GetWindow(word word) GetWindow16\n263 pascal -ret16 GetMenuItemCount(word) GetMenuItemCount16\n264 pascal -ret16 GetMenuItemID(word word) GetMenuItemID16\n265 pascal -ret16 ShowOwnedPopups(word word) ShowOwnedPopups16\n266 pascal -ret16 SetMessageQueue(word) SetMessageQueue16\n267 pascal -ret16 ShowScrollBar(word word word) ShowScrollBar16\n268 pascal -ret16 GlobalAddAtom(str) GlobalAddAtom16\n269 pascal -ret16 GlobalDeleteAtom(word) GlobalDeleteAtom16\n270 pascal -ret16 GlobalFindAtom(str) GlobalFindAtom16\n271 pascal -ret16 GlobalGetAtomName(word ptr s_word) GlobalGetAtomName16\n272 pascal -ret16 IsZoomed(word) IsZoomed16\n273 pascal -ret16 ControlPanelInfo(word word str) ControlPanelInfo16\n274 stub GetNextQueueWindow\n275 pascal -ret16 RepaintScreen() RepaintScreen16\n276 stub LockMyTask\n277 pascal -ret16 GetDlgCtrlID(word) GetDlgCtrlID16\n278 pascal -ret16 GetDesktopHwnd() GetDesktopHwnd16\n279 pascal -ret16 OldSetDeskPattern() SetDeskPattern16\n280 pascal -ret16 SetSystemMenu(word word) SetSystemMenu16\n281 pascal -ret16 GetSysColorBrush(word) GetSysColorBrush16\n282 pascal -ret16 SelectPalette(word word word) SelectPalette16\n283 pascal -ret16 RealizePalette(word) RealizePalette16\n284 pascal -ret16 GetFreeSystemResources(word) GetFreeSystemResources16\n285 pascal -ret16 SetDeskWallPaper(ptr) SetDeskWallPaper16 # BEAR285\n286 pascal -ret16 GetDesktopWindow() GetDesktopWindow16\n287 pascal -ret16 GetLastActivePopup(word) GetLastActivePopup16\n288 pascal   GetMessageExtraInfo() GetMessageExtraInfo\n289 pascal -register keybd_event() keybd_event16\n290 pascal -ret16 RedrawWindow(word ptr word word) RedrawWindow16\n291 pascal   SetWindowsHookEx(s_word segptr word word) SetWindowsHookEx16\n292 pascal -ret16 UnhookWindowsHookEx(segptr) UnhookWindowsHookEx16\n293 pascal   CallNextHookEx(segptr s_word word long) CallNextHookEx16\n294 pascal -ret16 LockWindowUpdate(word) LockWindowUpdate16\n299 pascal -register mouse_event() mouse_event16\n300 stub UnloadInstalledDrivers # W1.1: USER_FARFRAME\n301 stub EDITWNDPROC # BOZOSLIVEHERE :-))\n302 stub STATICWNDPROC\n303 stub BUTTONWNDPROC\n304 stub SBWNDPROC\n305 stub DESKTOPWNDPROC # W1.1: ICONWNDPROC\n306 stub MENUWNDPROC # BEAR306\n307 stub LBOXCTLWNDPROC\n308 pascal   DefDlgProc(word word word long) DefDlgProc16 # W1.1, W2.0: DLGWNDPROC\n309 pascal -ret16 GetClipCursor(ptr) GetClipCursor16 # W1.1, W2.0: MESSAGEBOXWNDPROC\n#310 ContScroll\n#311 CaretBlinkProc # W1.1\n#312 SendMessage2\n#313 PostMessage2\n314 pascal -ret16 SignalProc(word word word word word) SignalProc16\n#315 XCStoDS\n#316 CompUpdateRect\n#317 CompUpdateRgn\n#318 GetWC2\n319 pascal -ret16 ScrollWindowEx(word s_word s_word ptr ptr word ptr word) ScrollWindowEx16 # W1.1, W2.0: SETWC2\n320 pascal -ret16 SysErrorBox(str str word word word) SysErrorBox16 # W1.1: ICONNAMEWNDPROC, W2.0: nothing !\n321 pascal   SetEventHook(segptr) SetEventHook16 # W1.1, W2.0: DESTROYTASKWINDOWS2\n322 stub WinOldAppHackOMatic # W1.1, W2.0: POSTSYSERROR\n323 stub GetMessage2\n324 pascal -ret16 FillWindow(word word word word) FillWindow16\n325 pascal -ret16 PaintRect(word word word word ptr) PaintRect16\n326 pascal -ret16 GetControlBrush(word word word) GetControlBrush16\n#327 KillTimer2\n#328 SetTimer2\n#329 MenuItemState # W1.1\n#330 SetGetKbdState\n331 pascal -ret16 EnableHardwareInput(word) EnableHardwareInput16\n332 pascal -ret16 UserYield() UserYield16\n333 pascal -ret16 IsUserIdle() IsUserIdle16\n334 pascal   GetQueueStatus(word) GetQueueStatus16\n335 pascal -ret16 GetInputState() GetInputState16\n336 pascal -ret16 LoadCursorIconHandler(word word word) LoadCursorIconHandler16\n337 pascal   GetMouseEventProc() GetMouseEventProc16\n338 stub ECGETDS # W2.0 (only ?)\n#340 WinFarFrame\n#341 _FFFE_FARFRAME\n343 stub GetFilePortName\n344 stub COMBOBOXCTLWNDPROC\n345 stub BEAR345\n#354 TabTheTextOutForWimps\n#355 BroadcastMessage\n356 pascal -ret16 LoadDIBCursorHandler(word word word) LoadDIBCursorHandler16\n357 pascal -ret16 LoadDIBIconHandler(word word word) LoadDIBIconHandler16\n358 pascal -ret16 IsMenu(word) IsMenu16\n359 pascal -ret16 GetDCEx(word word long) GetDCEx16\n362 pascal -ret16 DCHook(word word long long) DCHook16\n364 pascal -ret16 LookupIconIdFromDirectoryEx(ptr word word word word) LookupIconIdFromDirectoryEx16\n368 pascal -ret16 CopyIcon(word word) CopyIcon16\n369 pascal -ret16 CopyCursor(word word) CopyCursor16\n370 pascal -ret16 GetWindowPlacement(word ptr) GetWindowPlacement16\n371 pascal -ret16 SetWindowPlacement(word ptr) SetWindowPlacement16\n372 stub GetInternalIconHeader\n373 pascal -ret16 SubtractRect(ptr ptr ptr) SubtractRect16\n374 pascal -ret16 DllEntryPoint(long word word word long word)\n375 stub DrawTextEx\n376 stub SetMessageExtraInfo\n378 stub SetPropEx\n379 stub GetPropEx\n380 stub RemovePropEx\n#381 stub UsrMPR_ThunkData16\n382 stub SetWindowContextHelpID\n383 stub GetWindowContextHelpID\n384 pascal -ret16 SetMenuContextHelpId(word word) SetMenuContextHelpId16\n385 pascal -ret16 GetMenuContextHelpId(word) GetMenuContextHelpId16\n389 pascal   LoadImage(word str word word word word) LoadImage16\n390 pascal -ret16 CopyImage(word word word word word) CopyImage16\n391 pascal -ret16 SignalProc32(long long long word) UserSignalProc\n394 pascal -ret16 DrawIconEx(word word word word word word word word word) DrawIconEx16\n395 pascal -ret16 GetIconInfo(word ptr) GetIconInfo16\n397 pascal -ret16 RegisterClassEx(ptr) RegisterClassEx16\n398 pascal -ret16 GetClassInfoEx(word segstr ptr) GetClassInfoEx16\n399 pascal -ret16 ChildWindowFromPointEx(word long word) ChildWindowFromPointEx16\n400 pascal -ret16 FinalUserInit() FinalUserInit16\n402 pascal -ret16 GetPriorityClipboardFormat(ptr s_word) GetPriorityClipboardFormat16\n403 pascal -ret16 UnregisterClass(str word) UnregisterClass16\n404 pascal -ret16 GetClassInfo(word segstr ptr) GetClassInfo16\n406 pascal -ret16 CreateCursor(word word word word word ptr ptr) CreateCursor16\n407 pascal -ret16 CreateIcon(word word word word word ptr ptr) CreateIcon16\n408 pascal -ret16 CreateCursorIconIndirect(word ptr ptr ptr) CreateCursorIconIndirect16\n409 pascal -ret16 InitThreadInput(word word) InitThreadInput16\n410 pascal -ret16 InsertMenu(word word word word segptr) InsertMenu16\n411 pascal -ret16 AppendMenu(word word word segptr) AppendMenu16\n412 pascal -ret16 RemoveMenu(word word word) RemoveMenu16\n413 pascal -ret16 DeleteMenu(word word word) DeleteMenu16\n414 pascal -ret16 ModifyMenu(word word word word segptr) ModifyMenu16\n415 pascal -ret16 CreatePopupMenu() CreatePopupMenu16\n416 pascal -ret16 TrackPopupMenu(word word s_word s_word s_word word ptr) TrackPopupMenu16\n417 pascal   GetMenuCheckMarkDimensions() GetMenuCheckMarkDimensions\n418 pascal -ret16 SetMenuItemBitmaps(word word word word word) SetMenuItemBitmaps16\n420 varargs -ret16 _wsprintf(ptr str) wsprintf16\n421 pascal -ret16 wvsprintf(ptr str ptr) wvsprintf16\n422 pascal -ret16 DlgDirSelectEx(word ptr word word) DlgDirSelectEx16\n423 pascal -ret16 DlgDirSelectComboBoxEx(word ptr word word) DlgDirSelectComboBoxEx16\n427 pascal -ret16 FindWindowEx(word word str str) FindWindowEx16\n428 stub TileWindows\n429 stub CascadeWindows\n430 pascal -ret16 lstrcmp(str str) lstrcmpA\n431 pascal   AnsiUpper(segstr) AnsiUpper16\n432 pascal   AnsiLower(segstr) AnsiLower16\n433 pascal -ret16 IsCharAlpha(word) IsCharAlphaA\n434 pascal -ret16 IsCharAlphaNumeric(word) IsCharAlphaNumericA\n435 pascal -ret16 IsCharUpper(word) IsCharUpperA\n436 pascal -ret16 IsCharLower(word) IsCharLowerA\n437 pascal -ret16 AnsiUpperBuff(str word) AnsiUpperBuff16\n438 pascal -ret16 AnsiLowerBuff(str word) AnsiLowerBuff16\n441 pascal -ret16 InsertMenuItem(word word word ptr) InsertMenuItem16\n443 stub GetMenuItemInfo\n445 pascal   DefFrameProc(word word word word long) DefFrameProc16\n446 stub SetMenuItemInfo\n447 pascal   DefMDIChildProc(word word word long) DefMDIChildProc16\n448 pascal -ret16 DrawAnimatedRects(word word ptr ptr) DrawAnimatedRects16\n449 pascal -ret16 DrawState(word word segptr long word s_word s_word s_word s_word word) DrawState16\n450 pascal -ret16 CreateIconFromResourceEx(ptr long word long word word word) CreateIconFromResourceEx16\n451 pascal -ret16 TranslateMDISysAccel(word ptr) TranslateMDISysAccel16\n452 pascal -ret16 CreateWindowEx(long str str long s_word s_word s_word s_word word word word segptr) CreateWindowEx16\n454 pascal -ret16 AdjustWindowRectEx(ptr long word long) AdjustWindowRectEx16\n455 pascal -ret16 GetIconID(word long) GetIconID16\n456 pascal -ret16 LoadIconHandler(word word) LoadIconHandler16\n457 pascal -ret16 DestroyIcon(word) DestroyIcon16\n458 pascal -ret16 DestroyCursor(word) DestroyCursor16\n459 pascal   DumpIcon(segptr ptr ptr ptr) DumpIcon16\n460 pascal -ret16 GetInternalWindowPos(word ptr ptr) GetInternalWindowPos16\n461 pascal -ret16 SetInternalWindowPos(word word ptr ptr) SetInternalWindowPos16\n462 pascal -ret16 CalcChildScroll(word word) CalcChildScroll16\n463 pascal -ret16 ScrollChildren(word word word long) ScrollChildren16\n464 pascal   DragObject(word word word word word word) DragObject16\n465 pascal -ret16 DragDetect(word long) DragDetect16\n466 pascal -ret16 DrawFocusRect(word ptr) DrawFocusRect16\n470 stub StringFunc\n471 pascal -ret16 lstrcmpi(str str) lstrcmpiA\n472 pascal   AnsiNext(segptr) AnsiNext16\n473 pascal   AnsiPrev(segptr segptr) AnsiPrev16\n475 pascal -ret16 SetScrollInfo(word s_word ptr word) SetScrollInfo16\n476 pascal -ret16 GetScrollInfo(word s_word ptr) GetScrollInfo16\n477 pascal -ret16 GetKeyboardLayoutName(ptr) GetKeyboardLayoutName16\n478 stub LoadKeyboardLayout\n479 stub MenuItemFromPoint\n480 stub GetUserLocalObjType\n#481 HARDWARE_EVENT\n482 pascal -ret16 EnableScrollBar(word word word) EnableScrollBar16\n483 pascal -ret16 SystemParametersInfo(word word ptr word) SystemParametersInfo16\n#484 __GP\n# Stubs for Hebrew version\n485 pascal -ret16 MakeMenuRToL(word word) MakeMenuRToL16 \n486 pascal -ret16 RawGetTabbedTextExtent() stub_USER_486\n487 pascal -ret16 RawDrawText(word str s_word ptr word) RawDrawText16\n488 pascal -ret16 RawTabbedTextOut() stub_USER_488\n489 pascal -ret16 GetKeyboardLanguage() GetKeyboardLanguage16\n490 pascal -ret16 SetKeyboardLanguage(word word) SetKeyboardLanguage16\n491 pascal -ret16 BiDiGrayString() stub_USER_491\n492 pascal -ret16 MakeScrollBarsRToL(word word word) MakeScrollBarsRToL\n493 pascal -ret16 IsCharBiDi() stub_USER_493\n494 pascal -ret16 IsCharEnglish() stub_USER_494\n495 pascal -ret16 LenFruser1() stub_USER_495\n496 pascal -ret16 DrawTextRToL() stub_USER_496\n498 stub BEAR498\n499 pascal -ret16 WNetErrorText(word ptr word) WNetErrorText16\n500 stub FARCALLNETDRIVER \t\t\t# Undocumented Windows\n501 pascal -ret16 WNetOpenJob(ptr ptr word ptr)  WNetOpenJob16\n502 pascal -ret16 WNetCloseJob(word ptr ptr) WNetCloseJob16\n503 pascal -ret16 WNetAbortJob(ptr word) WNetAbortJob16\n504 pascal -ret16 WNetHoldJob(ptr word) WNetHoldJob16\n505 pascal -ret16 WNetReleaseJob(ptr word) WNetReleaseJob16\n506 pascal -ret16 WNetCancelJob(ptr word) WNetCancelJob16\n507 pascal -ret16 WNetSetJobCopies(ptr word word) WNetSetJobCopies16\n508 pascal -ret16 WNetWatchQueue(word ptr ptr word) WNetWatchQueue16\n509 pascal -ret16 WNetUnwatchQueue(str) WNetUnwatchQueue16\n510 pascal -ret16 WNetLockQueueData(ptr ptr ptr) WNetLockQueueData16\n511 pascal -ret16 WNetUnlockQueueData(ptr) WNetUnlockQueueData16\n512 pascal -ret16 WNetGetConnection(ptr ptr ptr) WNetGetConnection16\n513 pascal -ret16 WNetGetCaps(word) WNetGetCaps16\n514 pascal -ret16 WNetDeviceMode(word) WNetDeviceMode16\n515 pascal -ret16 WNetBrowseDialog(word word ptr) WNetBrowseDialog16\n516 pascal -ret16 WNetGetUser(ptr ptr) WNetGetUser16\n517 pascal -ret16 WNetAddConnection(str str str) WNetAddConnection16\n518 pascal -ret16 WNetCancelConnection(str word) WNetCancelConnection16\n519 pascal -ret16 WNetGetError(ptr) WNetGetError16\n520 pascal -ret16 WNetGetErrorText(word ptr ptr) WNetGetErrorText16\n521 stub WNetEnable\n522 stub WNetDisable\n523 pascal -ret16 WNetRestoreConnection(word ptr) WNetRestoreConnection16\n524 pascal -ret16 WNetWriteJob(word ptr ptr) WNetWriteJob16\n525 pascal -ret16 WNetConnectDialog(word word) WNetConnectDialog16\n526 pascal -ret16 WNetDisconnectDialog(word word) WNetDisconnectDialog16\n527 pascal -ret16 WNetConnectionDialog(word word) WNetConnectionDialog16\n528 pascal -ret16 WNetViewQueueDialog(word ptr) WNetViewQueueDialog16\n529 pascal -ret16 WNetPropertyDialog(word word word str word) WNetPropertyDialog16\n530 pascal -ret16 WNetGetDirectoryType(ptr ptr) WNetGetDirectoryType16\n531 pascal -ret16 WNetDirectoryNotify(word ptr word) WNetDirectoryNotify16\n532 pascal -ret16 WNetGetPropertyText(word word str str word word) WNetGetPropertyText16\n533 stub WNetInitialize\n#533 stub NOTIFYWOW # ordinal conflict with WNetInitialize !!\n534 stub WNetLogon\n#534 stub DEFDLGPROCTHUNK # ordinal conflict with WNetLogon !!\n535 stub WOWWORDBREAKPROC\n537 stub MOUSEEVENT\n538 stub KEYBDEVENT\n595 stub OLDEXITWINDOWS\n600 pascal -ret16 GetShellWindow() GetShellWindow16\n601 stub DoHotkeyStuff\n602 stub SetCheckCursorTimer\n604 stub BroadcastSystemMessage\n605 stub HackTaskMonitor\n606 pascal -ret16 FormatMessage(long segptr word word ptr word ptr) FormatMessage16\n608 pascal -ret16 GetForegroundWindow() GetForegroundWindow16\n609 pascal -ret16 SetForegroundWindow(word) SetForegroundWindow16\n610 pascal -ret16 DestroyIcon32(word word) DestroyIcon32\n620 pascal   ChangeDisplaySettings(ptr long) ChangeDisplaySettings16\n621 pascal -ret16 EnumDisplaySettings(str long ptr) EnumDisplaySettings16\n640 pascal   MsgWaitForMultipleObjects(long ptr long long long) MsgWaitForMultipleObjects16\n650 stub ActivateKeyboardLayout\n651 stub GetKeyboardLayout\n652 stub GetKeyboardLayoutList\n654 stub UnloadKeyboardLayout\n655 stub PostPostedMessages\n656 pascal -ret16 DrawFrameControl(word ptr word word) DrawFrameControl16\n657 pascal -ret16 DrawCaptionTemp(word word ptr word word ptr word) DrawCaptionTemp16\n658 stub DispatchInput\n659 pascal -ret16 DrawEdge(word ptr word word) DrawEdge16\n660 pascal -ret16 DrawCaption(word word ptr word) DrawCaption16\n661 stub SetSysColorsTemp\n662 stub DrawMenubarTemp\n663 stub GetMenuDefaultItem\n664 stub SetMenuDefaultItem\n665 pascal -ret16 GetMenuItemRect(word word word ptr) GetMenuItemRect16\n666 pascal -ret16 CheckMenuRadioItem(word word word word word) CheckMenuRadioItem16\n667 stub TrackPopupMenuEx\n668 pascal -ret16 SetWindowRgn(word word word) SetWindowRgn16\n669 stub GetWindowRgn\n800 stub CHOOSEFONT_CALLBACK16\n801 stub FINDREPLACE_CALLBACK16\n802 stub OPENFILENAME_CALLBACK16\n803 stub PRINTDLG_CALLBACK16\n804 stub CHOOSECOLOR_CALLBACK16\n819 pascal -ret16 PeekMessage32(ptr word word word word word) PeekMessage32_16\n820 pascal   GetMessage32(ptr word word word word) GetMessage32_16\n821 pascal -ret16 TranslateMessage32(ptr word) TranslateMessage32_16\n#821 stub IsDialogMessage32\t\t# FIXME: two ordinal 821???\n822 pascal   DispatchMessage32(ptr word) DispatchMessage32_16\n823 pascal -ret16 CallMsgFilter32(ptr word word) CallMsgFilter32_16\n825 stub PostMessage32\n826 stub PostThreadMessage32\n827 pascal -ret16 MessageBoxIndirect(ptr) MessageBoxIndirect16\n851 stub MsgThkConnectionDataLS\n853 stub FT_USRFTHKTHKCONNECTIONDATA\n854 stub FT__USRF2THKTHKCONNECTIONDATA\n855 stub Usr32ThkConnectionDataSL\n890 stub InstallIMT\n891 stub UninstallIMT\n# API for Hebrew version\n901 pascal -ret16 FindResourceEx() FindResourceEx16\n902 pascal -ret16 LoadSystemLanguageString(word word ptr word word) LoadSystemLanguageString16\n903 pascal -ret16 GetClipboardCodePage(word word word) GetClipboardCodePage16\n904 pascal -ret16 ResetDialogTemplate() ResetDialogTemplate16\n905 pascal -ret16 ChangeDialogTemplate() ChangeDialogTemplate16\n906 pascal -ret16 GetNumLanguages() GetNumLanguages16\n907 pascal -ret16 GetLanguageName(word word ptr word) GetLanguageName16\n908 pascal -ret16 GetLanguageResId() GetLanguageResId16\n909 pascal -ret16 SetWindowTextEx(word str word) SetWindowTextEx16\n910 pascal -ret16 BiDiMessageBoxEx(word str str word word) MessageBoxEx16\n911 pascal -ret16 SetDlgItemTextEx(word word str word) SetDlgItemTextEx16\n912 pascal   ChangeKeyboardLanguage(word word) ChangeKeyboardLanguage16\n913 pascal -ret16 GetCodePageSystemFont(word word) GetCodePageSystemFont16\n914 pascal -ret16 QueryCodePage(word word word long) QueryCodePage16\n915 pascal   GetAppCodePage(word) GetAppCodePage16\n916 pascal -ret16 CreateDialogIndirectParamML(word ptr word ptr long word word str word) CreateDialogIndirectParamML16\n917 pascal -ret16 CreateDialogParamML() CreateDialogParamML16\n918 pascal -ret16 DialogBoxIndirectParamML(word word word ptr long word word str word) DialogBoxIndirectParamML16\n919 pascal -ret16 LoadLanguageString(word word word ptr word) LoadLanguageString16\n920 pascal   SetAppCodePage(word word word word) SetAppCodePage16\n922 pascal   GetBaseCodePage() GetBaseCodePage16\n923 pascal -ret16 FindLanguageResource(word str str word) FindLanguageResource16\n924 pascal   ChangeKeyboardCodePage(word word) ChangeKeyboardCodePage16\n925 pascal -ret16 LangToBestCodePage() LangToBestCodePage16\n926 pascal -ret16 GetNumKeyboards() GetNumKeyboards16\n927 pascal -ret16 IsCharHebrew(word) IsCharHebrew16\n928 pascal -ret16 IsCharFrench(word) IsCharFrench16\n929 pascal -ret16 IsCharArabic(word) IsCharArabic16\n930 pascal -ret16 MessageBoxEx(word str str word word) MessageBoxEx16\n1000 pascal -ret16 SetProcessDefaultLayout(long) SetProcessDefaultLayout16\n1001 pascal -ret16 GetProcessDefaultLayout(ptr) GetProcessDefaultLayout16\n\n# Wine internal functions\n1010 pascal __wine_call_wndproc(word word word long long) __wine_call_wndproc\n\n################################################################\n# 32-bit exports of the 16-bit functions needed by other dlls\n#\n@ stdcall -arch=win32 CreateIcon16(long long long long long ptr ptr)\n@ stdcall -arch=win32 CreateIconFromResourceEx16(ptr long long long long long long)\n@ stdcall -arch=win32 SelectPalette16(long long long)\n@ stdcall -arch=win32 dialog_template16_to_template32(long long ptr ptr)\n@ stdcall -arch=win32 DIALOG_CallDialogProc(ptr long ptr ptr ptr)\n@ stdcall -arch=win32 __wine_call_wndproc(long long long long long)\n@ stdcall -arch=win32 LoadBitmap16(long str)\n@ stdcall -arch=win32 window_message16_32(ptr ptr)\n@ stdcall -arch=win32 window_message32_16(ptr ptr)\n@ stdcall -arch=win32 LoadString16(long long ptr long)\n@ stdcall -arch=win32 set_realized_palette(long)\n@ stdcall -arch=win32 get_realized_palette()\n@ cdecl   -arch=win32 regen_icon(long)\n"
  },
  {
    "path": "user/user.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{066A261B-90F6-4AB7-8F53-1455F068D6F7}</ProjectGuid>\n    <RootNamespace>user</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <TargetExt>.exe16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <TargetExt>.exe16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <SDLCheck>false</SDLCheck>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ExceptionHandling>false</ExceptionHandling>\n    </ClCompile>\n    <Link>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>advapi32.lib;version.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;Mpr.lib;UxTheme.lib;user32.lib;shell32.lib;gdi32.lib;ole32.lib</AdditionalDependencies>\n      <ModuleDefinitionFile>user.def</ModuleDefinitionFile>\n      <SubSystem>Windows</SubSystem>\n      <DelayLoadDLLs>ole32.dll</DelayLoadDLLs>\n      <ForceSymbolReferences>\n      </ForceSymbolReferences>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <SDLCheck>false</SDLCheck>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n      <PreprocessorDefinitions>_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ClCompile>\n    <Link>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ModuleDefinitionFile>user.def</ModuleDefinitionFile>\n      <AdditionalDependencies>advapi32.lib;version.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;Mpr.lib;UxTheme.lib;user32.lib;shell32.lib;gdi32.lib;ole32.lib</AdditionalDependencies>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ForceSymbolReferences>\n      </ForceSymbolReferences>\n      <DelayLoadDLLs>ole32.dll</DelayLoadDLLs>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"bidi.c\" />\n    <ClCompile Include=\"comm.c\" />\n    <ClCompile Include=\"dde.c\" />\n    <ClCompile Include=\"dialog.c\" />\n    <ClCompile Include=\"hook.c\" />\n    <ClCompile Include=\"message.c\" />\n    <ClCompile Include=\"network.c\" />\n    <ClCompile Include=\"stub.c\">\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</ExcludedFromBuild>\n    </ClCompile>\n    <ClCompile Include=\"user.c\" />\n    <ClCompile Include=\"window.c\" />\n    <ClCompile Include=\"winhelp.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"message_table.h\" />\n    <ClInclude Include=\"user_private.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"user.exe16.obj\">\n      <ExcludedFromBuild Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</ExcludedFromBuild>\n    </Object>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"user.def\" />\n    <CustomBuild Include=\"user.exe16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" --heap 65520 USER &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" --heap 65520 USER &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"user.rc\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "user/user.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"ソース ファイル\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"ヘッダー ファイル\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"リソース ファイル\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"hook.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"message.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"network.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"user.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"window.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"bidi.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"comm.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"dialog.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"winhelp.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"dde.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"stub.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"user_private.h\">\n      <Filter>ソース ファイル</Filter>\n    </ClInclude>\n    <ClInclude Include=\"message_table.h\">\n      <Filter>ヘッダー ファイル</Filter>\n    </ClInclude>\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"user.exe16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"user.def\">\n      <Filter>ソース ファイル</Filter>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"user.exe16.spec\">\n      <Filter>ソース ファイル</Filter>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"user.rc\">\n      <Filter>リソース ファイル</Filter>\n    </ResourceCompile>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "user/user_private.h",
    "content": "/*\n * USER private definitions\n *\n * Copyright 1993, 2009 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_USER_PRIVATE_H\n#define __WINE_USER_PRIVATE_H\n\n#include <stdarg.h>\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n#include \"winreg.h\"\n#include \"winternl.h\"\n#include \"wine/windef16.h\"\n#include \"wine/library.h\"\n\n/* Wow handlers */\n\n/* the structures must match the corresponding ones in user32 */\nstruct wow_handlers16\n{\n    LRESULT (*button_proc)(HWND,UINT,WPARAM,LPARAM,BOOL);\n    LRESULT (*combo_proc)(HWND,UINT,WPARAM,LPARAM,BOOL);\n    LRESULT (*edit_proc)(HWND,UINT,WPARAM,LPARAM,BOOL);\n    LRESULT (*listbox_proc)(HWND,UINT,WPARAM,LPARAM,BOOL);\n    LRESULT (*mdiclient_proc)(HWND,UINT,WPARAM,LPARAM,BOOL);\n    LRESULT (*scrollbar_proc)(HWND,UINT,WPARAM,LPARAM,BOOL);\n    LRESULT (*static_proc)(HWND,UINT,WPARAM,LPARAM,BOOL);\n    DWORD   (*wait_message)(DWORD,const HANDLE*,DWORD,DWORD,DWORD);\n    HWND    (*create_window)(CREATESTRUCTW*,LPCWSTR,HINSTANCE,BOOL);\n    LRESULT (*call_window_proc)(HWND,UINT,WPARAM,LPARAM,LRESULT*,void*);\n    LRESULT (*call_dialog_proc)(HWND,UINT,WPARAM,LPARAM,LRESULT*,void*);\n    void    (*free_icon_param)(ULONG_PTR);\n};\n\nstruct wow_handlers32\n{\n    LRESULT (*button_proc)(HWND,UINT,WPARAM,LPARAM,BOOL);\n    LRESULT (*combo_proc)(HWND,UINT,WPARAM,LPARAM,BOOL);\n    LRESULT (*edit_proc)(HWND,UINT,WPARAM,LPARAM,BOOL);\n    LRESULT (*listbox_proc)(HWND,UINT,WPARAM,LPARAM,BOOL);\n    LRESULT (*mdiclient_proc)(HWND,UINT,WPARAM,LPARAM,BOOL);\n    LRESULT (*scrollbar_proc)(HWND,UINT,WPARAM,LPARAM,BOOL);\n    LRESULT (*static_proc)(HWND,UINT,WPARAM,LPARAM,BOOL);\n    DWORD   (*wait_message)(DWORD,const HANDLE*,DWORD,DWORD,DWORD);\n    HWND    (*create_window)(CREATESTRUCTW*,LPCWSTR,HINSTANCE,BOOL);\n    HWND    (*get_win_handle)(HWND);\n    WNDPROC (*alloc_winproc)(WNDPROC,BOOL);\n    struct tagDIALOGINFO *(*get_dialog_info)(HWND,BOOL);\n    INT     (*dialog_box_loop)(HWND,HWND);\n    ULONG_PTR (*get_icon_param)(HICON);\n    ULONG_PTR (*set_icon_param)(HICON,ULONG_PTR);\n};\n\nextern struct wow_handlers32 wow_handlers32 DECLSPEC_HIDDEN;\n\nextern HWND create_window16(CREATESTRUCTW*,LPCWSTR,HINSTANCE,BOOL) DECLSPEC_HIDDEN;\nextern void free_module_classes(HINSTANCE16) DECLSPEC_HIDDEN;\nextern void register_wow_handlers(void) DECLSPEC_HIDDEN;\n//extern void WINAPI UserRegisterWowHandlers( const struct wow_handlers16 *new,\n//                                            struct wow_handlers32 *orig );\n\nstatic inline HWND WIN_Handle32( HWND16 hwnd16 )\n{\n    return wow_handlers32.get_win_handle( (HWND)(ULONG_PTR)hwnd16 );\n}\n\ntypedef LRESULT (*winproc_callback_t)( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp,\n                                       LRESULT *result, void *arg );\ntypedef LRESULT (*winproc_callback16_t)( HWND16 hwnd, UINT16 msg, WPARAM16 wp, LPARAM lp,\n                                         LRESULT *result, void *arg );\n\nextern WNDPROC16 WINPROC_GetProc16( WNDPROC proc, BOOL unicode ) DECLSPEC_HIDDEN;\nextern WNDPROC WINPROC_AllocProc16( WNDPROC16 func ) DECLSPEC_HIDDEN;\nextern LRESULT WINPROC_CallProc16To32A( winproc_callback_t callback, HWND16 hwnd, UINT16 msg,\n                                        WPARAM16 wParam, LPARAM lParam, LRESULT *result, void *arg ) DECLSPEC_HIDDEN;\nextern LRESULT WINPROC_CallProc32ATo16( winproc_callback16_t callback, HWND hwnd, UINT msg,\n                                        WPARAM wParam, LPARAM lParam, LRESULT *result, void *arg ) DECLSPEC_HIDDEN;\n\nextern void call_WH_CALLWNDPROC_hook( HWND16 hwnd, UINT16 *msg, WPARAM16 *wp, LPARAM *lp ) DECLSPEC_HIDDEN;\n\n#define GET_BYTE(ptr)  (*(const BYTE *)(ptr))\n#define GET_WORD(ptr)  (*(const WORD *)(ptr))\n#define GET_DWORD(ptr) (*(const DWORD *)(ptr))\n\n#define WM_SYSTIMER 0x0118\n\n/* Dialog info structure (must match the user32 one) */\ntypedef struct tagDIALOGINFO\n{\n    HWND      hwndFocus;   /* Current control with focus */\n    HFONT     hUserFont;   /* Dialog font */\n    HMENU     hMenu;       /* Dialog menu */\n    UINT      xBaseUnit;   /* Dialog units (depends on the font) */\n    UINT      yBaseUnit;\n    INT       idResult;    /* EndDialog() result / default pushbutton ID */\n    UINT      flags;       /* EndDialog() called for this dialog */\n} DIALOGINFO;\n\ntypedef struct\n{\n    HMENU16 hMenu16;\n    DLGPROC16 dlgProc;\n} dialog_data;\n\n#define DF_END  0x0001\n#define DF_OWNERENABLED 0x0002\n\n/* HANDLE16 <-> HANDLE conversions */\n#define HINSTANCE_16(h32)  (LOWORD(h32))\n#define HINSTANCE_32(h16)  ((HINSTANCE)(ULONG_PTR)(h16))\n\nextern HICON16 get_icon_16( HICON icon ) DECLSPEC_HIDDEN;\nextern HICON get_icon_32( HICON16 icon16 ) DECLSPEC_HIDDEN;\n\nextern DWORD USER16_AlertableWait DECLSPEC_HIDDEN;\nextern WORD USER_HeapSel DECLSPEC_HIDDEN;\n//add\n/* those defines are (some of the) regular LDR_MODULE.Flags values */\n#define LDR_IMAGE_IS_DLL                0x00000004\n#define LDR_LOAD_IN_PROGRESS            0x00001000\n#define LDR_UNLOAD_IN_PROGRESS          0x00002000\n#define LDR_NO_DLL_CALLS                0x00040000\n#define LDR_PROCESS_ATTACHED            0x00080000\n#define LDR_MODULE_REBASED              0x00200000\n\n/* these ones is Wine specific */\n#define LDR_DONT_RESOLVE_REFS           0x40000000\n#define LDR_WINE_INTERNAL               0x80000000\n\n/* flag for LdrAddRefDll */\n#define LDR_ADDREF_DLL_PIN              0x00000001\n\n/* Wine extensions: call register function, context ptr is passed in the return value LPDWORD */\n#define WCB16_REGS       2\n#define WCB16_REGS_LONG  4  /* function uses 32-bit lret */\n/* Windows Exit Procedure flag values */\n#define\tWEP_FREE_DLL        0\n#define\tWEP_SYSTEM_EXIT     1\n//wine winbase.h\n#define OF_SEARCH             0x0400   /* Used without OF_REOPEN */\n/* GetTempFileName() Flags */\n#define TF_FORCEDRIVE\t        0x80\n//winnt.h\n/* This flag allows it to create heaps shared by all processes under win95,\nFIXME: correct name */\n#define HEAP_SHARED                     0x04000000\n\n\n#define WH_HARDWARE\t    8\n#define WM_CTLCOLOR            0x0019 /* Added from windowsx.h */\n//winuser\n#define LB_CARETON             0x01a3\n#define LB_CARETOFF            0x01a4\n#include <windowsx.h>\n//#include \"winuser.rh\"\n#define WM_SIZEWAIT            0x0004 /* DDK / Win16 */\n#define WM_SETVISIBLE          0x0009 /* DDK / Win16 */\n#define WM_SYSTEMERROR         0x0017 /* DDK / Win16 */\n#define WM_ALTTABACTIVE        0x0029 /* DDK / Win16 */\n#define WM_FILESYSCHANGE       0x0034 /* DDK / Win16 */\n#define WM_ISACTIVEICON        0x0035 /* DDK / Win16 */\n#define WM_TESTING             0x003a /* DDK / Win16 */\n#define WM_KEYF1               0x004d /* DDK / Win16 */\n#define WM_SYNCTASK            0x0089 /* DDK / Win16 */\n#define WM_LBTRACKPOINT        0x0131 /* DDK / Win16 */\n/* D&D messages */\n#define WM_DROPOBJECT          0x022A /* DDK / Win16 */\n#define WM_QUERYDROPOBJECT     0x022B /* DDK / Win16 */\n#define WM_BEGINDRAG           0x022C /* DDK / Win16 */\n#define WM_DRAGLOOP            0x022D /* DDK / Win16 */\n#define WM_DRAGSELECT          0x022E /* DDK / Win16 */\n#define WM_DRAGMOVE            0x022F /* DDK / Win16 */\n/* DDK / Win16 defines */\n#define MFS_MASK               __MSABI_LONG(0x0000108B)\n#define MFS_HOTTRACKDRAWN      __MSABI_LONG(0x10000000)\n#define MFS_CACHEDBMP          __MSABI_LONG(0x20000000)\n#define MFS_BOTTOMGAPDROP      __MSABI_LONG(0x40000000)\n#define MFS_TOPGAPDROP         __MSABI_LONG(0x80000000)\n#define MFS_GAPDROP            (MFS_BOTTOMGAPDROP | MFS_TOPGAPDROP)\n\n#define OCR_HELP               32651 /* DDK / Win16 */\n#define OCR_RDRVERT            32652 /* DDK / Win16 */\n#define OCR_RDRHORZ            32653 /* DDK / Win16 */\n#define OCR_RDR2DIM            32654 /* DDK / Win16 */\n#define OCR_RDRNORTH           32655 /* DDK / Win16 */\n#define OCR_RDRSOUTH           32656 /* DDK / Win16 */\n#define OCR_RDRWEST            32657 /* DDK / Win16 */\n#define OCR_RDREAST            32658 /* DDK / Win16 */\n#define OCR_RDRNORTHWEST       32659 /* DDK / Win16 */\n#define OCR_RDRNORTHEAST       32660 /* DDK / Win16 */\n#define OCR_RDRSOUTHWEST       32661 /* DDK / Win16 */\n#define OCR_RDRSOUTHEAST       32662 /* DDK / Win16 */\n#define EM_SETFONT             0x00c3 /* DDK / Win16 */\n#define EM_SETWORDBREAK        0x00ca /* DDK / Win16 */\n//winuser\n#define DCX_USESTYLE         0x00010000\n__declspec(dllimport) PVOID getWOW32Reserved();\n__declspec(dllimport) PVOID setWOW32Reserved(PVOID w);\nLONG WINAPI GdiGetCharDimensions(HDC hdc, LPTEXTMETRICW lptm, LONG *height);\ntypedef BOOL(WINAPI *PDrawCaptionTempA)\n(\nHWND hwnd,\nHDC hdc,\nconst RECT *rect,\nHFONT hFont,\nHICON hIcon,\nLPCSTR str,\nUINT32 uFlags\n);\nextern PDrawCaptionTempA DrawCaptionTempA;\ntypedef VOID(WINAPI *PScrollChildren)(HWND, UINT, WPARAM, LPARAM);\nextern PScrollChildren ScrollChildren;\ntypedef void        (WINAPI *PCalcChildScroll)(HWND, INT);\nextern PCalcChildScroll CalcChildScroll;\ntypedef void        (WINAPI *PSetInternalWindowPos)(HWND, UINT, LPRECT, LPPOINT);\nextern PSetInternalWindowPos SetInternalWindowPos;\ntypedef BOOL        (WINAPI *PSetSystemMenu)(HWND, HMENU);\nextern PSetSystemMenu SetSystemMenu;\ntypedef BOOL        (WINAPI *PKillSystemTimer)(HWND, UINT_PTR);\nextern PKillSystemTimer KillSystemTimer;\ntypedef UINT_PTR    (WINAPI *PSetSystemTimer)(HWND, UINT_PTR, UINT, TIMERPROC);\nextern PSetSystemTimer SetSystemTimer;\ntypedef BOOL        (WINAPI *PSetDeskWallPaper)(LPCSTR);\nextern PSetDeskWallPaper SetDeskWallPaper;\ntypedef UINT        (WINAPI *PUserRealizePalette)(HDC);\nextern PUserRealizePalette UserRealizePalette;\ntypedef void (WINAPI *PUserRegisterWowHandlers)(const struct wow_handlers16 *new, struct wow_handlers32 *orig);\nextern PUserRegisterWowHandlers UserRegisterWowHandlers;\nvoid load_user32_functions();\n\n#define strncasecmp _strnicmp\n__declspec(dllimport) void SetWndProc16(WORD hWnd16, DWORD WndProc);\n__declspec(dllimport) DWORD GetWndProc16(WORD hWnd16);\n#define STR_ATOM_MIN MAXINTATOM\n#define STR_ATOM_MAX 0xFFFF\n#define STR_ATOM_SIZE STR_ATOM_MAX - STR_ATOM_MIN\nstruct WNDCLASS16Info\n{\n    BOOL allocated;\n    DWORD wndproc;\n    WORD cbWndExtra;\n};\nextern struct WNDCLASS16Info WNDCLASS16Info[65536];\nextern struct WNDCLASS16Info *WNDCLASS16InfoStringAtom[65536];\n#include \"wine/list.h\"\n\nstruct class_entry\n{\n    struct list entry;\n    ATOM        atom;\n    HINSTANCE16 inst;\n    DWORD wndproc16;\n\n\n    WNDCLASSEXA classInfo;\n    LPCSTR win32_classname;\n};\nstruct class_entry *find_win16_class(HINSTANCE16 hInst16, LPCSTR name);\nstruct class_entry *find_win32_class(LPCSTR name);\nLPCSTR win16classname(LPCSTR name);\nLPCSTR win32classname(HINSTANCE16 hInst16, LPCSTR name);\n#define LOCAL_CLASS_PREFIX \"WIN16\"\n\n#include <pshpack1.h>\ntypedef struct\n{\n    HWND16 hwndSource;\n    HWND16 hwndSink;\n    WORD wFmt;\n    DWORD dwData;\n    POINT16 ptDrop;\n    DWORD dwControlData;\n} DROPSTRUCT16, *PDROPSTRUCT16, *LPDROPSTRUCT16;\n#include <poppack.h>\nextern void free_module_hooks(HINSTANCE16) DECLSPEC_HIDDEN;\n\n#endif /* __WINE_USER_PRIVATE_H */\n"
  },
  {
    "path": "user/window.c",
    "content": "/*\n * 16-bit windowing functions\n *\n * Copyright 2001 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"wine/winuser16.h\"\n#include \"wownt32.h\"\n#include \"user_private.h\"\n#include \"wine/debug.h\"\n#include \"wine/exception.h\"\n#include \"../krnl386/kernel16_private.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(win);\n\nstruct {\n    int next;\n    HDC16 dcs[5];\n    HWND16 wnds[5];\n} dcc = {0};\n\n/* Workaround for ReactOS */\nBOOL is_reactos()\n{\n    static BOOL detected;\n    static BOOL is;\n    HKEY hKey;\n    CHAR name[100];\n    DWORD dwType, dwSize = sizeof(name);\n    if (detected)\n        return is;\n    detected = TRUE;\n    if (ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, \"SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\", 0, KEY_QUERY_VALUE, &hKey))\n        return FALSE;\n    if (ERROR_SUCCESS != RegQueryValueExA(hKey, \"ProductName\", NULL, &dwType, (LPBYTE)name, &dwSize))\n    {\n        RegCloseKey(hKey);\n        return FALSE;\n    }\n    RegCloseKey(hKey);\n    if (dwType != REG_SZ)\n        return FALSE;\n    is = strstr(name, \"ReactOS\") != NULL;\n    return is;\n}\n\nvoid WINAPI K32WOWHandle16Destroy(HANDLE handle, WOW_HANDLE_TYPE type);\nvoid WINAPI K32WOWHandle16DestroyHint(HANDLE handle, WOW_HANDLE_TYPE type);\nBOOL16 WINAPI IsOldWindowsTask(HINSTANCE16 hInst);\nBYTE get_aflags(HMODULE16 hModule);\nULONG WINAPI get_windows_build();\nLRESULT CALLBACK WindowProc16(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam);\n/* size of buffer needed to store an atom string */\n#define ATOM_BUFFER_SIZE 256\n\n/* handle <--> handle16 conversions */\n#define HANDLE_16(h32)\t\t(LOWORD(h32))\n#define HANDLE_32(h16)\t\t((HANDLE)(ULONG_PTR)(h16))\n\n/* wine(25cc380b8ed41652b135657ef7651beef2f20ae4) dlls/user32/menu.c */\nBOOL is_win_menu_disallowed(DWORD style)\n{\n    return (style & (WS_CHILD | WS_POPUP)) == WS_CHILD;\n}\n\nstatic HWND16 hwndSysModal;\n\n\nstatic struct list class_list = LIST_INIT( class_list );\n\nstruct wnd_enum_info\n{\n    WNDENUMPROC16 proc;\n    LPARAM        param;\n};\n\n/* callback for 16-bit window enumeration functions */\nstatic BOOL CALLBACK wnd_enum_callback( HWND hwnd, LPARAM param )\n{\n    const struct wnd_enum_info *info = (struct wnd_enum_info *)param;\n    WORD args[3];\n    DWORD ret;\n    CONTEXT context = {0};\n    context.SegDs = context.SegEs = SELECTOROF(getWOW32Reserved());\n    context.SegFs = wine_get_fs();\n    context.SegGs = wine_get_gs();\n    context.Eax = context.SegDs;\n    context.SegCs = SELECTOROF((DWORD)info->proc);\n    context.Eip = OFFSETOF((DWORD)info->proc);\n    context.Ebp = OFFSETOF(getWOW32Reserved()) + FIELD_OFFSET(STACK16FRAME, bp);\n\n    args[2] = HWND_16(hwnd);\n    args[1] = HIWORD(info->param);\n    args[0] = LOWORD(info->param);\n    WOWCallback16Ex( (DWORD)info->proc, WCB16_PASCAL | WCB16_REGS, sizeof(args), args,  (LPDWORD)&context );\n\n    ret = MAKELONG(LOWORD(context.Eax), LOWORD(context.Edx));\n    return LOWORD(ret);\n}\n\n/* convert insert after window handle to 32-bit */\nstatic inline HWND full_insert_after_hwnd( HWND16 hwnd )\n{\n    if (hwnd == (HWND)0xffff)\n        return HWND_TOPMOST;\n    if (hwnd == (HWND)0xfffe)\n        return HWND_NOTOPMOST;\n    if (hwnd == (HWND)HWND_TOP)\n        return HWND_TOP;\n    if (hwnd == (HWND)HWND_BOTTOM)\n        return HWND_BOTTOM;\n    HWND ret = WIN_Handle32( hwnd );\n    return ret;\n}\n\nBOOL CALLBACK remove_wndproc(HWND hwnd, LPARAM lparam)\n{\n    if (GetExePtr(GetWindowWord16(HWND_16(hwnd), GWL_HINSTANCE)) == lparam)\n    {\n        TRACE(\"HWND %x WNDPROC removed\\n\", hwnd);\n        EnumChildWindows(hwnd, remove_wndproc, lparam);\n        if (GetWindowLongPtrA(hwnd, GWL_WNDPROC) == (LONG_PTR)WindowProc16)\n            SetWindowLongPtrA(hwnd, GWLP_WNDPROC, DefWindowProcA);\n    }\n    return TRUE;\n}\n\nBOOL CALLBACK enum_thread_window(HWND hwnd, LPARAM lparam)\n{\n    struct class_entry *clazz = (struct class_entry*)lparam;\n    if (GetClassWord(hwnd, GCW_ATOM) == clazz->atom)\n    {\n        if (GetWindowLongPtrA(hwnd, GWLP_WNDPROC) != DefWindowProcA)\n        {\n            TRACE(\"HWND %x WNDPROC removed\\n\", hwnd);\n            SetWindowLongPtrA(hwnd, GWLP_WNDPROC, DefWindowProcA);\n        }\n        TRACE(\"HWND %x destroyed\\n\", hwnd);\n        DestroyWindow(hwnd);\n    }\n    return TRUE;\n}\n\nvoid free_module_classes( HINSTANCE16 inst )\n{\n    struct class_entry *class, *next;\n\n    EnumThreadWindows(GetCurrentThreadId(), remove_wndproc, (LPARAM)inst);\n    LIST_FOR_EACH_ENTRY_SAFE( class, next, &class_list, struct class_entry, entry )\n    {\n        if (class->inst != inst) continue;\n        list_remove( &class->entry );\n        if (!UnregisterClassA( (LPCSTR)MAKEINTATOM(class->atom), HINSTANCE_32(class->inst) ))\n        {\n            if (GetLastError() == ERROR_CLASS_HAS_WINDOWS)\n            {\n                EnumThreadWindows( GetCurrentThreadId(), enum_thread_window, (LPARAM)class );\n                UnregisterClassA( (LPCSTR)MAKEINTATOM(class->atom), HINSTANCE_32(class->inst) );\n            }\n        }\n        WNDCLASS16Info[class->atom].allocated = FALSE;\n        TRACE(\"Class %s unregistered\\n\", debugstr_a(class->win32_classname));\n        HeapFree( GetProcessHeap(), 0, class );\n\t}\n}\n\nBOOL is_dialog(HWND hwnd)\n{\n    struct WW\n    {\n        union\n        {\n            DWORD state;\n            struct\n            {\n                int WFMPRESENT : 1;\n                int WFVPRESENT : 1;\n                int WFHPRESENT : 1;\n                int WFCPRESENT : 1;\n                int WFSENDSIZEMOVE : 1;\n                int WFMSGBOX : 1;\n                int WFFRAMEON : 1;\n                int WFHASSPB : 1;\n                int WFNONCPAINT : 1;\n                int WFSENDERASEBKGND : 1;\n                int WFERASEBKGND : 1;\n                int WFSENDNCPAINT : 1;\n                int WFINTERNALPAINT : 1;\n                int WFUPDATEDIRTY : 1;\n                int WFHIDDENPOPUP : 1;\n                int WFMENUDRAW : 1;\n                int WFDIALOGWINDOW : 1;\n                /*...*/\n            } stateFlags;\n        };\n        DWORD state2;\n        DWORD exstyle;\n        DWORD style;\n        /*...*/\n    };\n    BOOL ret = FALSE;\n    if (is_reactos())\n    {\n        /* see dialog.c DIALOG_CreateIndirect16 */\n        return HIWORD(GetWindowLongPtrW(hwnd, GWLP_HINSTANCE)) == 0xfefe;\n    }\n    /* undocumented, GetWindowLongW(hwnd, -1) returns a pointer to the internal window structure */\n    struct WW *ww = GetWindowLongW(hwnd, -1);\n    if (!ww)\n        return FALSE;\n    __TRY\n    {\n        if (ww->stateFlags.WFDIALOGWINDOW)\n            ret = TRUE;\n    }\n    __EXCEPT_ALL\n    {\n    }\n    __ENDTRY\n    return ret;\n}\n\nstruct ThreadWindows\n{\n    UINT numHandles;\n    UINT numAllocs;\n    HWND *handles;\n};\n\nstatic BOOL CALLBACK MSGBOX_EnumProc(HWND hwnd, LPARAM lParam)\n{\n    struct ThreadWindows *threadWindows = (struct ThreadWindows *)lParam;\n\n    if (!EnableWindow(hwnd, FALSE))\n    {\n        if(threadWindows->numHandles >= threadWindows->numAllocs)\n        {\n            threadWindows->handles = HeapReAlloc(GetProcessHeap(), 0, threadWindows->handles,\n                                                 (threadWindows->numAllocs*2)*sizeof(HWND));\n            threadWindows->numAllocs *= 2;\n        }\n        threadWindows->handles[threadWindows->numHandles++]=hwnd;\n    }\n    return TRUE;\n}\n\n/**************************************************************************\n *              MessageBox   (USER.1)\n */\nINT16 WINAPI MessageBox16( HWND16 hwnd, LPCSTR text, LPCSTR title, UINT16 type )\n{\n    DWORD count;\n    struct ThreadWindows threadWindows;\n    ReleaseThunkLock(&count);\n#ifdef ATTACH_THREAD_INPUT\n    //Force to set window to foreground.\n    DWORD foregroundID = GetWindowThreadProcessId(GetForegroundWindow(), NULL);\n    AttachThreadInput(GetCurrentThreadId(), foregroundID, TRUE);\n#endif\n    if ((type & MB_TASKMODAL) && (hwnd == NULL))\n    {\n        threadWindows.numHandles = 0;\n        threadWindows.numAllocs = 10;\n        threadWindows.handles = HeapAlloc(GetProcessHeap(), 0, 10*sizeof(HWND));\n        EnumThreadWindows(GetCurrentThreadId(), MSGBOX_EnumProc, (LPARAM)&threadWindows);\n    }\n    int ret = MessageBoxA( WIN_Handle32(hwnd), text, title, type & ~MB_TASKMODAL );\n    if ((type & MB_TASKMODAL) && (hwnd == NULL))\n    {\n        for (int i = 0; i < threadWindows.numHandles; i++)\n            EnableWindow(threadWindows.handles[i], TRUE);\n        HeapFree(GetProcessHeap(), 0, threadWindows.handles);\n    }\n#ifdef ATTACH_THREAD_INPUT\n    AttachThreadInput(GetCurrentThreadId(), foregroundID, FALSE);\n#endif\n    RestoreThunkLock(count);\n    return ret;\n}\n\n#include <pshpack1.h>\ntypedef struct\n{\n    BYTE pop_eax; /* 58 */\n    BYTE push_imm; /* 68 */\n    LPVOID this_;\n    BYTE push_eax; /* 50 */\n    BYTE jmp; /* E9 */\n    UINT_PTR func;\n    BOOL used;\n    LPVOID param;\n} TIMERTHUNK;\n#include <poppack.h>\nstatic TIMERTHUNK *timer_thunk_array;\nstatic int MAX_TIMER_THUNK;\nstatic void init_timer_thunk()\n{\n    if (timer_thunk_array)\n        return;\n    MAX_TIMER_THUNK = 4096 / sizeof(TIMERTHUNK);\n    timer_thunk_array = VirtualAlloc(NULL, MAX_TIMER_THUNK * sizeof(TIMERTHUNK), MEM_COMMIT, PAGE_EXECUTE_READWRITE);\n}\nstatic TIMERTHUNK *init_timer_thunk_data(LPVOID param, int i, LPVOID func)\n{\n    timer_thunk_array[i].pop_eax = 0x58;\n    timer_thunk_array[i].push_imm = 0x68;\n    timer_thunk_array[i].this_ = timer_thunk_array + i;\n    timer_thunk_array[i].push_eax = 0x50;\n    timer_thunk_array[i].jmp = 0xE9;\n    timer_thunk_array[i].func = (UINT_PTR)func - (UINT_PTR)(&timer_thunk_array[i].func + 1);\n    timer_thunk_array[i].used = TRUE;\n    timer_thunk_array[i].param = param;\n    return timer_thunk_array + i;\n}\n\nstatic TIMERPROC allocate_timer_thunk(LPVOID param, LPVOID func, BOOL re)\n{\n    init_timer_thunk();\n    if (re)\n    {\n        for (int i = 0; i < MAX_TIMER_THUNK; i++)\n        {\n            if (timer_thunk_array[i].used && timer_thunk_array[i].param == param)\n            {\n                return (TIMERPROC)(timer_thunk_array + i);\n            }\n        }\n    }\n    for (int i = 0; i < MAX_TIMER_THUNK; i++)\n    {\n        if (!timer_thunk_array[i].used)\n        {\n            return (TIMERPROC)init_timer_thunk_data(param, i, func);\n        }\n    }\n    ERR(\"could not allocate timer thunk!\\n\");\n    return NULL;\n}\n\nVOID CALLBACK TimerProc_Thunk(TIMERTHUNK *data, HWND hWnd, UINT msg, UINT_PTR wp, DWORD lp)\n{\n    CallWindowProc16(data->param, HWND_16(hWnd), msg, wp, lp);\n    return;\n}\n\nBOOL is_timer_thunk(TIMERPROC proc)\n{\n    return timer_thunk_array <= proc && proc < timer_thunk_array + MAX_TIMER_THUNK;\n}\n\n/***********************************************************************\n *\t\tSetTimer (USER.10)\n */\nUINT16 WINAPI SetTimer16( HWND16 hwnd, UINT16 id, UINT16 timeout, TIMERPROC16 proc )\n{\n    TIMERPROC proc32;\n    UINT ret;\n    timeout = timeout < 55 ? 55 : timeout;\n    if (proc == NULL)\n    {\n        return SetTimer(WIN_Handle32(hwnd), id, timeout, NULL);\n    }\n    proc32 = allocate_timer_thunk(proc, TimerProc_Thunk, TRUE);\n    ret = SetTimer( WIN_Handle32(hwnd), id, timeout, proc32 );\n    return ret;\n}\n\n\n/***********************************************************************\n *\t\tSetSystemTimer (USER.11)\n */\nUINT16 WINAPI SetSystemTimer16( HWND16 hwnd, UINT16 id, UINT16 timeout, TIMERPROC16 proc )\n{\n    TIMERPROC proc32 = proc == NULL ? NULL : allocate_timer_thunk(proc, TimerProc_Thunk, TRUE);\n    if (!SetSystemTimer)\n    {\n        ERR(\"SetSystemTimer NULL\\n\");\n        return 0;\n    }\n    return SetSystemTimer( WIN_Handle32(hwnd), id, timeout, proc32 );\n}\n\n\n/**************************************************************************\n *              KillTimer   (USER.12)\n */\nBOOL16 WINAPI KillTimer16( HWND16 hwnd, UINT16 id )\n{\n    return KillTimer( WIN_Handle32(hwnd), id );\n}\n\n\n/**************************************************************************\n *              SetCapture   (USER.18)\n */\nHWND16 WINAPI SetCapture16( HWND16 hwnd )\n{\n    return HWND_16( SetCapture( WIN_Handle32(hwnd) ));\n}\n\n\n/**************************************************************************\n *              ReleaseCapture   (USER.19)\n */\nBOOL16 WINAPI ReleaseCapture16(void)\n{\n    BOOL result = ReleaseCapture();\n    static BOOL checked_is_windows_10;\n    static BOOL is_windows_10_or_later;\n    if (!checked_is_windows_10)\n    {\n        checked_is_windows_10 = TRUE;\n        is_windows_10_or_later = GetProcAddress(GetModuleHandleA(\"KERNEL32\"), \"InitializeEnclave\") != NULL;\n    }\n    if (is_windows_10_or_later)\n    {\n        /* Windows 10 doesn't send WM_MOUSEMOVE */\n#if 0\n        POINT point;\n        if (GetCursorPos(&point))\n        {\n            HWND hwnd = GetCapture();\n            if (!hwnd)\n                hwnd = WindowFromPoint(point);\n            if (hwnd)\n                PostMessageA(hwnd, WM_MOUSEMOVE, 0, MAKELPARAM(point.x, point.y));\n        }\n#endif\n        INPUT input;\n        input.type = INPUT_MOUSE;\n        input.mi.mouseData = 0;\n        input.mi.dwFlags = MOUSEEVENTF_MOVE;\n        input.mi.time = 0;\n        input.mi.dwExtraInfo = 0;\n        input.mi.dx = 1;\n        input.mi.dy = 0;\n        SendInput(1, &input, sizeof(input));\n        input.mi.dx = -1;\n        input.mi.dy = 0;\n        SendInput(1, &input, sizeof(input));\n    }\n    return result;\n}\n\n\n/**************************************************************************\n *              SetFocus   (USER.22)\n */\nHWND16 WINAPI SetFocus16( HWND16 hwnd )\n{\n    DWORD count;\n    HWND16 result;\n    ReleaseThunkLock(&count);\n    result = HWND_16(SetFocus(WIN_Handle32(hwnd)));\n    RestoreThunkLock(count);\n    return result;\n}\n\n\n/**************************************************************************\n *              GetFocus   (USER.23)\n */\nHWND16 WINAPI GetFocus16(void)\n{\n    return HWND_16( GetFocus() );\n}\n\n\n/**************************************************************************\n *              RemoveProp   (USER.24)\n */\nHANDLE16 WINAPI RemoveProp16( HWND16 hwnd, LPCSTR str )\n{\n    return HANDLE_16(RemovePropA( WIN_Handle32(hwnd), str ));\n}\n\n\n/**************************************************************************\n *              GetProp   (USER.25)\n */\nHANDLE16 WINAPI GetProp16( HWND16 hwnd, LPCSTR str )\n{\n    return HANDLE_16(GetPropA( WIN_Handle32(hwnd), str ));\n}\n\n\n/**************************************************************************\n *              SetProp   (USER.26)\n */\nBOOL16 WINAPI SetProp16( HWND16 hwnd, LPCSTR str, HANDLE16 handle )\n{\n    return SetPropA( WIN_Handle32(hwnd), str, HANDLE_32(handle) );\n}\n\n\n/***********************************************************************\n *              EnumProps   (USER.27)\n */\nINT16 WINAPI EnumProps16( HWND16 hwnd, PROPENUMPROC16 func )\n{\n    ERR(\"(%04x,%08x)\\n\", hwnd, func);\n\treturn 0;\n#if 0\n    int ret = -1, i, count, total = 32;\n    property_data_t *list;\n\n    while (total)\n    {\n        if (!(list = HeapAlloc( GetProcessHeap(), 0, total * sizeof(*list) ))) break;\n        count = 0;\n        SERVER_START_REQ( get_window_properties )\n        {\n            req->window = wine_server_user_handle( HWND_32(hwnd) );\n            wine_server_set_reply( req, list, total * sizeof(*list) );\n            if (!wine_server_call( req )) count = reply->total;\n        }\n        SERVER_END_REQ;\n\n        if (count && count <= total)\n        {\n            char string[ATOM_BUFFER_SIZE];\n            SEGPTR segptr = MapLS( string );\n            WORD args[4];\n            DWORD result;\n\n            for (i = 0; i < count; i++)\n            {\n                if (list[i].string)  /* it was a string originally */\n                {\n                    if (!GlobalGetAtomNameA( list[i].atom, string, ATOM_BUFFER_SIZE )) continue;\n                    args[3] = hwnd;\n                    args[2] = SELECTOROF(segptr);\n                    args[1] = OFFSETOF(segptr);\n                    args[0] = LOWORD(list[i].data);\n                }\n                else\n                {\n                    args[3] = hwnd;\n                    args[2] = 0;\n                    args[1] = list[i].atom;\n                    args[0] = LOWORD(list[i].data);\n                }\n                WOWCallback16Ex( (DWORD)func, WCB16_PASCAL, sizeof(args), args, &result );\n                if (!(ret = LOWORD(result))) break;\n            }\n            UnMapLS( segptr );\n            HeapFree( GetProcessHeap(), 0, list );\n            break;\n        }\n        HeapFree( GetProcessHeap(), 0, list );\n        total = count;  /* restart with larger buffer */\n    }\n    return ret;\n#endif\n}\n\n\n/**************************************************************************\n *              ClientToScreen   (USER.28)\n */\nvoid WINAPI ClientToScreen16( HWND16 hwnd, LPPOINT16 lppnt )\n{\n    MapWindowPoints16( hwnd, 0, lppnt, 1 );\n}\n\n\n/**************************************************************************\n *              ScreenToClient   (USER.29)\n */\nvoid WINAPI ScreenToClient16( HWND16 hwnd, LPPOINT16 lppnt )\n{\n    MapWindowPoints16( 0, hwnd, lppnt, 1 );\n}\n\n\n/**************************************************************************\n *              WindowFromPoint   (USER.30)\n */\nHWND16 WINAPI WindowFromPoint16( POINT16 pt )\n{\n    POINT pt32;\n\n    pt32.x = pt.x;\n    pt32.y = pt.y;\n    return HWND_16( WindowFromPoint( pt32 ) );\n}\n\n\n/**************************************************************************\n *              IsIconic   (USER.31)\n */\nBOOL16 WINAPI IsIconic16(HWND16 hwnd)\n{\n    return IsIconic( WIN_Handle32(hwnd) );\n}\n\n\n/**************************************************************************\n *              GetWindowRect   (USER.32)\n */\nvoid WINAPI GetWindowRect16( HWND16 hwnd, LPRECT16 rect )\n{\n    RECT rect32;\n\n    if (GetWindowRect( WIN_Handle32(hwnd), &rect32 ))\n    {\n        rect->left   = rect32.left;\n        rect->top    = rect32.top;\n        rect->right  = rect32.right;\n        rect->bottom = rect32.bottom;\n    }\n}\n\n\n/**************************************************************************\n *              GetClientRect   (USER.33)\n */\nvoid WINAPI GetClientRect16( HWND16 hwnd, LPRECT16 rect )\n{\n    RECT rect32;\n\n    if (GetClientRect( WIN_Handle32(hwnd), &rect32 ))\n    {\n        rect->left   = rect32.left;\n        rect->top    = rect32.top;\n        rect->right  = rect32.right;\n        rect->bottom = rect32.bottom;\n    }\n}\n\n\n/**************************************************************************\n *              EnableWindow   (USER.34)\n */\nBOOL16 WINAPI EnableWindow16( HWND16 hwnd, BOOL16 enable )\n{\n    DWORD count;\n    ReleaseThunkLock(&count);\n    BOOL16 result = EnableWindow( WIN_Handle32(hwnd), enable );\n    RestoreThunkLock(count);\n    return result;\n}\n\n\n/**************************************************************************\n *              IsWindowEnabled   (USER.35)\n */\nBOOL16 WINAPI IsWindowEnabled16(HWND16 hwnd)\n{\n    return IsWindowEnabled( WIN_Handle32(hwnd) );\n}\n\n\n/**************************************************************************\n *              GetWindowText   (USER.36)\n */\nINT16 WINAPI GetWindowText16( HWND16 hwnd, SEGPTR lpString, INT16 nMaxCount )\n{\n    return SendMessage16( hwnd, WM_GETTEXT, nMaxCount, lpString );\n}\n\n\n/**************************************************************************\n *              SetWindowText   (USER.37)\n */\nBOOL16 WINAPI SetWindowText16( HWND16 hwnd, SEGPTR lpString )\n{\n    if (IsBadReadPtr16(lpString, 1)) return FALSE;\n    return SendMessage16( hwnd, WM_SETTEXT, 0, lpString );\n}\n\n\n/**************************************************************************\n *              GetWindowTextLength   (USER.38)\n */\nINT16 WINAPI GetWindowTextLength16( HWND16 hwnd )\n{\n    return SendMessage16( hwnd, WM_GETTEXTLENGTH, 0, 0 );\n}\n\n\n/***********************************************************************\n *\t\tBeginPaint (USER.39)\n */\nHDC16 WINAPI BeginPaint16( HWND16 hwnd, LPPAINTSTRUCT16 lps )\n{\n\tPAINTSTRUCT ps = { 0 };\n\n    BeginPaint( WIN_Handle32(hwnd), &ps );\n    lps->hdc            = HDC_16(ps.hdc);\n    lps->fErase         = ps.fErase;\n    lps->rcPaint.top    = ps.rcPaint.top;\n    lps->rcPaint.left   = ps.rcPaint.left;\n    lps->rcPaint.right  = ps.rcPaint.right;\n    lps->rcPaint.bottom = ps.rcPaint.bottom;\n    lps->fRestore       = ps.fRestore;\n    lps->fIncUpdate     = ps.fIncUpdate;\n    if (IsOldWindowsTask(GetCurrentTask()) && !(get_aflags(GetExePtr(GetCurrentTask())) & NE_AFLAGS_WIN2_PROTMODE) && (GetCurrentObject(ps.hdc, OBJ_FONT) == GetStockObject(SYSTEM_FONT)))\n        SelectObject(ps.hdc, GetStockObject(SYSTEM_FIXED_FONT));\n    // check the hdc is in the cache becuase it was removed and deleted\n    for (int i = 0; i < 5; i++)\n    {\n        if (dcc.dcs[i] == lps->hdc)\n        {\n            dcc.dcs[i] = 0;\n            dcc.wnds[i] = 0;\n        }\n    }\n    return lps->hdc;\n}\n\n\n/***********************************************************************\n *\t\tEndPaint (USER.40)\n */\nBOOL16 WINAPI EndPaint16( HWND16 hwnd, const PAINTSTRUCT16* lps )\n{\n    PAINTSTRUCT ps = { 0 };\n\n    ps.hdc = HDC_32(lps->hdc);\n\tps.fErase = lps->fErase;\n\tps.rcPaint.top = lps->rcPaint.top;\n\tps.rcPaint.left = lps->rcPaint.left;\n\tps.rcPaint.right = lps->rcPaint.right;\n\tps.rcPaint.bottom = lps->rcPaint.bottom;\n\tps.fRestore = lps->fRestore;\n\tps.fIncUpdate = lps->fIncUpdate;\n    BOOL result = EndPaint( WIN_Handle32(hwnd), &ps );\n    if (result)\n    {\n        for (int i = 0; i < 5; i++)\n        {\n            if (dcc.dcs[i] == lps->hdc)\n            {\n                dcc.dcs[i] = 0;\n                dcc.wnds[i] = 0;\n            }\n        }\n        K32WOWHandle16DestroyHint(ps.hdc, WOW_TYPE_HDC);\n    }\n    return result;\n}\n\n\n/***********************************************************************\n *\t\tCreateWindow (USER.41)\n */\nHWND16 WINAPI CreateWindow16( LPCSTR className, LPCSTR windowName,\n                              DWORD style, INT16 x, INT16 y, INT16 width,\n                              INT16 height, HWND16 parent, HMENU16 menu,\n                              HINSTANCE16 instance, LPVOID data )\n{\n    return CreateWindowEx16( 0, className, windowName, style,\n                             x, y, width, height, parent, menu, instance, data );\n}\n\n\n/**************************************************************************\n *              ShowWindow   (USER.42)\n */\nBOOL16 WINAPI ShowWindow16( HWND16 hwnd, INT16 cmd )\n{\n    DWORD count;\n\n    ReleaseThunkLock(&count);\n#ifdef ATTACH_THREAD_INPUT\n    DWORD foregroundID = GetWindowThreadProcessId(GetForegroundWindow(), NULL);\n    //Attach\n    AttachThreadInput(GetCurrentThreadId(), foregroundID, TRUE);\n#endif\n    BOOL ret = ShowWindow( WIN_Handle32(hwnd), cmd );\n#ifdef ATTACH_THREAD_INPUT\n    //Dettach\n    AttachThreadInput(GetCurrentThreadId(), foregroundID, FALSE);\n#endif\n    RestoreThunkLock(count);\n    return ret;\n}\n\n\n/**************************************************************************\n *              CloseWindow   (USER.43)\n */\nBOOL16 WINAPI CloseWindow16( HWND16 hwnd )\n{\n    DWORD count;\n    ReleaseThunkLock(&count);\n    BOOL16 result = CloseWindow( WIN_Handle32(hwnd) );\n    RestoreThunkLock(count);\n    return result;\n}\n\n\n/**************************************************************************\n *              OpenIcon   (USER.44)\n */\nBOOL16 WINAPI OpenIcon16( HWND16 hwnd )\n{\n    return OpenIcon( WIN_Handle32(hwnd) );\n}\n\n\n/**************************************************************************\n *              BringWindowToTop   (USER.45)\n */\nBOOL16 WINAPI BringWindowToTop16( HWND16 hwnd )\n{\n    DWORD count;\n    BOOL16 result;\n    ReleaseThunkLock(&count);\n#ifdef ATTACH_THREAD_INPUT\n    //Force to set window to foreground.\n    DWORD foregroundID = GetWindowThreadProcessId(GetForegroundWindow(), NULL);\n    AttachThreadInput(GetCurrentThreadId(), foregroundID, TRUE);\n#endif\n    result = (BOOL16)BringWindowToTop( WIN_Handle32(hwnd) );\n#ifdef ATTACH_THREAD_INPUT\n    AttachThreadInput(GetCurrentThreadId(), foregroundID, FALSE);\n#endif\n    RestoreThunkLock(count);\n    return result;\n}\n\n\n/**************************************************************************\n *              GetParent   (USER.46)\n */\nHWND16 WINAPI GetParent16( HWND16 hwnd )\n{\n    return HWND_16( GetParent( WIN_Handle32(hwnd) ));\n}\n\n\n/**************************************************************************\n *              IsWindow   (USER.47)\n */\nBOOL16 WINAPI IsWindow16( HWND16 hwnd )\n{\n    STACK16FRAME *frame = MapSL( (SEGPTR)getWOW32Reserved() );\n    frame->es = USER_HeapSel;\n    HWND hwnd32 = HWND_32(hwnd);\n    if (!HIWORD(hwnd32))\n    {\n        /* invalid handle */\n        return FALSE;\n    }\n    /* don't use WIN_Handle32 here, we don't care about the full handle */\n    return IsWindow( hwnd32 );\n}\n\n\n/**************************************************************************\n *              IsChild   (USER.48)\n */\nBOOL16 WINAPI IsChild16( HWND16 parent, HWND16 child )\n{\n    return IsChild( WIN_Handle32(parent), WIN_Handle32(child) );\n}\n\n\n/**************************************************************************\n *              IsWindowVisible   (USER.49)\n */\nBOOL16 WINAPI IsWindowVisible16( HWND16 hwnd )\n{\n    return IsWindowVisible( WIN_Handle32(hwnd) );\n}\n\n\nHWND16 WINAPI FindWindowEx16(HWND16 parent, HWND16 child, LPCSTR className, LPCSTR title);\n/**************************************************************************\n *              FindWindow   (USER.50)\n */\nHWND16 WINAPI FindWindow16( LPCSTR className, LPCSTR title )\n{\n    return FindWindowEx16( (HWND16)NULL, (HWND16)NULL, className, title );\n}\n\n\n/**************************************************************************\n *              DestroyWindow   (USER.53)\n */\nBOOL16 WINAPI DestroyWindow16( HWND16 hwnd )\n{\n    DWORD count;\n    BOOL result;\n    HMENU16 hmenu16 = GetMenu16(hwnd);\n    ReleaseThunkLock(&count);\n    result = DestroyWindow(WIN_Handle32(hwnd));\n    RestoreThunkLock(count);\n    if (result && IsMenu16(hmenu16))\n        DestroyMenu16(hmenu16);\n    return result;\n}\n\n\n/*******************************************************************\n *           EnumWindows   (USER.54)\n */\nBOOL16 WINAPI EnumWindows16( WNDENUMPROC16 func, LPARAM lParam )\n{\n    struct wnd_enum_info info;\n\n    info.proc  = func;\n    info.param = lParam;\n    return EnumWindows( wnd_enum_callback, (LPARAM)&info );\n}\n\n\n/**********************************************************************\n *           EnumChildWindows   (USER.55)\n */\nBOOL16 WINAPI EnumChildWindows16( HWND16 parent, WNDENUMPROC16 func, LPARAM lParam )\n{\n    struct wnd_enum_info info;\n\n    info.proc  = func;\n    info.param = lParam;\n    return EnumChildWindows( WIN_Handle32(parent), wnd_enum_callback, (LPARAM)&info );\n}\n\n\n/**************************************************************************\n *              MoveWindow   (USER.56)\n */\nBOOL16 WINAPI MoveWindow16( HWND16 hwnd, INT16 x, INT16 y, INT16 cx, INT16 cy, BOOL16 repaint )\n{\n    return SetWindowPos16(hwnd, 0, x, y, cx, cy, SWP_NOZORDER | SWP_NOACTIVATE | (repaint ? 0 : SWP_NOREDRAW));\n}\n\n\n/***********************************************************************\n *\t\tRegisterClass (USER.57)\n */\nBOOL16 WINAPI RegisterClass16( const WNDCLASS16 *wc )\n{\n    WNDCLASSEX16 wcex;\n\n    wcex.cbSize        = sizeof(wcex);\n    wcex.style         = wc->style;\n    wcex.lpfnWndProc   = wc->lpfnWndProc;\n    wcex.cbClsExtra    = wc->cbClsExtra;\n    wcex.cbWndExtra    = wc->cbWndExtra;\n    wcex.hInstance     = wc->hInstance;\n    wcex.hIcon         = wc->hIcon;\n    wcex.hCursor       = wc->hCursor;\n    wcex.hbrBackground = wc->hbrBackground;\n    wcex.lpszMenuName  = wc->lpszMenuName;\n    wcex.lpszClassName = wc->lpszClassName;\n    wcex.hIconSm       = 0;\n    return RegisterClassEx16( &wcex ) != 0;\n}\n\n\n/**************************************************************************\n *              GetClassName   (USER.58)\n */\nINT16 WINAPI GetClassName16( HWND16 hwnd, LPSTR buffer, INT16 count )\n{\n    char sclassName[200];\n    SIZE_T len = sizeof(sclassName) / sizeof(sclassName[0]);\n    LPSTR className = sclassName;\n    SIZE_T clen;\n    if (count == 0)\n        return 0;\n    if (count == 1)\n    {\n        buffer[0] = '\\0';\n        return 0;\n    }\n    while (TRUE)\n    {\n        clen = GetClassNameA(WIN_Handle32(hwnd), className, len);\n        //className is truncated\n        if (len - 1 == clen)\n        {\n            LPVOID heap;\n            if (className != sclassName)\n            {\n                heap = HeapReAlloc(GetProcessHeap(), 0, className, len * 2);\n            }\n            else\n            {\n                heap = HeapAlloc(GetProcessHeap(), 0, len * 2);\n            }\n            if (!heap)\n                break;\n            className = (LPSTR)heap;\n            len *= 2;\n            continue;\n        }\n        break;\n    }\n    if (clen > 32767)\n    {\n        clen = 32767;\n    }\n    if (clen != 0)\n    {\n        struct class_entry *entry = find_win32_class(className);\n        if (!entry)\n        {\n            clen = min(clen, (SIZE_T)(count - 1));\n            memcpy(buffer, className, clen);\n            buffer[clen] = 0;\n        }\n        else\n        {\n            clen = min(strlen(entry->classInfo.lpszClassName), (SIZE_T)(count - 1));\n            memcpy(buffer, entry->classInfo.lpszClassName, clen);\n            buffer[clen] = 0;\n        }\n    }\n    if (className != sclassName)\n    {\n        HeapFree(GetProcessHeap(), 0, className);\n    }\n    return (INT16)clen;\n}\n\n\n/**************************************************************************\n *              SetActiveWindow   (USER.59)\n */\nHWND16 WINAPI SetActiveWindow16( HWND16 hwnd )\n{\n    return HWND_16( SetActiveWindow( WIN_Handle32(hwnd) ));\n}\n\n\n/**************************************************************************\n *              GetActiveWindow   (USER.60)\n */\nHWND16 WINAPI GetActiveWindow16(void)\n{\n    return HWND_16( GetActiveWindow() );\n}\n\n\n/**************************************************************************\n *              ScrollWindow   (USER.61)\n */\nvoid WINAPI ScrollWindow16( HWND16 hwnd, INT16 dx, INT16 dy, const RECT16 *rect,\n                            const RECT16 *clipRect )\n{\n    RECT rect32, clipRect32;\n\n    if (rect)\n    {\n        rect32.left   = rect->left;\n        rect32.top    = rect->top;\n        rect32.right  = rect->right;\n        rect32.bottom = rect->bottom;\n    }\n    if (clipRect)\n    {\n        clipRect32.left   = clipRect->left;\n        clipRect32.top    = clipRect->top;\n        clipRect32.right  = clipRect->right;\n        clipRect32.bottom = clipRect->bottom;\n    }\n    ScrollWindow( WIN_Handle32(hwnd), dx, dy, rect ? &rect32 : NULL,\n                  clipRect ? &clipRect32 : NULL );\n}\n\n\n/**************************************************************************\n *              SetScrollPos   (USER.62)\n */\nINT16 WINAPI SetScrollPos16( HWND16 hwnd, INT16 nBar, INT16 nPos, BOOL16 redraw )\n{\n    return SetScrollPos( WIN_Handle32(hwnd), nBar, nPos, redraw );\n}\n\n\n/**************************************************************************\n *              GetScrollPos   (USER.63)\n */\nINT16 WINAPI GetScrollPos16( HWND16 hwnd, INT16 nBar )\n{\n    return GetScrollPos( WIN_Handle32(hwnd), nBar );\n}\n\n\n/**************************************************************************\n *              SetScrollRange   (USER.64)\n */\nvoid WINAPI SetScrollRange16( HWND16 hwnd, INT16 nBar, INT16 MinVal, INT16 MaxVal, BOOL16 redraw )\n{\n    HWND hwnd32 = HWND_32(hwnd);\n    /* Invalid range -> range is set to (0,0) */\n    if ((INT)MaxVal - (INT)MinVal > 0x7fff) MinVal = MaxVal = 0;\n    // don't create a scrollbar if none is wanted\n    if (MinVal == MaxVal)\n    {\n        INT min, max;\n        GetScrollRange(hwnd32, nBar, &min, &max); // always returns TRUE\n        if (!min && !max && GetLastError() == ERROR_NO_SCROLLBARS)\n            return;\n    }\n    SetScrollRange(hwnd32, nBar, MinVal, MaxVal, redraw);\n}\n\n\n/**************************************************************************\n *              GetScrollRange   (USER.65)\n */\nBOOL16 WINAPI GetScrollRange16( HWND16 hwnd, INT16 nBar, LPINT16 lpMin, LPINT16 lpMax)\n{\n    INT min, max;\n    BOOL ret = GetScrollRange( WIN_Handle32(hwnd), nBar, &min, &max );\n    if (lpMin) *lpMin = min;\n    if (lpMax) *lpMax = max;\n    return ret;\n}\n\n\n/* layered-window based desktop DC emulation for DWM */\nLRESULT WINAPI DesktopDCEmulationWindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)\n{\n    switch (msg)\n    {\n    case WM_NCCALCSIZE:\n        return 0;\n    default:\n        return DefWindowProcW(hwnd, msg, wparam, lparam);\n    }\n}\nstatic HWND dcemu_hwnd;\nstatic COLORREF DWMDesktopDCFixBackgroundColor = RGB(254, 254, 254);\nvoid init_dcemu()\n{\n    WNDCLASSW wc = { 0 };\n    RECT wkara = { 0 };\n    HWND hwnd;\n    COLORREF colorkey = DWMDesktopDCFixBackgroundColor;\n    if (dcemu_hwnd)\n        return;\n    wc.lpfnWndProc = DesktopDCEmulationWindowProc;\n    wc.style = CS_OWNDC;\n    wc.hbrBackground = CreateSolidBrush(colorkey);\n    wc.hCursor = LoadCursorW(NULL, IDC_ARROW);\n    wc.lpszClassName = L\"DesktopDCEmulation\";\n    RegisterClassW(&wc);\n    SystemParametersInfoW(SPI_GETWORKAREA, 0, &wkara, 0);\n    hwnd = CreateWindowExW(WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_TOPMOST, L\"DesktopDCEmulation\", L\"\", 0, wkara.left, wkara.top, wkara.right - wkara.left, wkara.bottom - wkara.top, NULL, NULL, NULL, NULL);\n    if (!hwnd)\n        return;\n    SetWindowLongW(hwnd, GWL_STYLE, GetWindowLongW(hwnd, GWL_STYLE) & ~WS_BORDER & ~WS_SIZEBOX &~WS_DLGFRAME);\n    SetLayeredWindowAttributes(hwnd, colorkey, 0, LWA_COLORKEY);\n    ShowWindow(hwnd, SW_NORMAL);\n    UpdateWindow(hwnd);\n    dcemu_hwnd = hwnd;\n}\n/**************************************************************************\n *              GetDC   (USER.66)\n */\nHDC16 WINAPI GetDC16( HWND16 hwnd )\n{\n    static BOOL DWMDesktopDCFix_init;\n    static BOOL DWMDesktopDCFix;\n    HDC hdc;\n    if (!DWMDesktopDCFix_init)\n    {\n        DWMDesktopDCFix_init = TRUE;\n        DWMDesktopDCFix = krnl386_get_config_int(\"otvdm\", \"DWMDesktopDCFix\", FALSE);\n        int R = krnl386_get_config_int(\"otvdm\", \"DWMDesktopDCFixBackgroundColorR\", 254);\n        int G = krnl386_get_config_int(\"otvdm\", \"DWMDesktopDCFixBackgroundColorG\", 254);\n        int B = krnl386_get_config_int(\"otvdm\", \"DWMDesktopDCFixBackgroundColorB\", 254);\n        DWMDesktopDCFixBackgroundColor = RGB(R, G, B);\n    }\n    if (DWMDesktopDCFix && hwnd == 0)\n    {\n        init_dcemu();\n        SetWindowPos(dcemu_hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOREDRAW);\n        HDC dc = GetDC(dcemu_hwnd);\n        SetWindowOrgEx(dc, 0, 0, NULL);\n        MoveToEx(dc, 0, 0, NULL);\n        SelectClipRgn(dc, NULL);\n        hdc = dc;\n    }\n    else\n        hdc = GetDC( WIN_Handle32(hwnd) );\n    if (IsOldWindowsTask(GetCurrentTask()) && !(get_aflags(GetExePtr(GetCurrentTask())) & NE_AFLAGS_WIN2_PROTMODE) && (GetCurrentObject(hdc, OBJ_FONT) == GetStockObject(SYSTEM_FONT)))\n        SelectObject(hdc, GetStockObject(SYSTEM_FIXED_FONT));\n    HDC16 hdc16 = HDC_16(hdc);\n    // check the hdc is in the cache becuase it was removed and deleted\n    for (int i = 0; i < 5; i++)\n    {\n        if (dcc.dcs[i] == hdc16)\n        {\n            dcc.dcs[i] = 0;\n            dcc.wnds[i] = 0;\n        }\n    }\n    return hdc16;\n}\n\n\n/**************************************************************************\n *              GetWindowDC   (USER.67)\n */\nHDC16 WINAPI GetWindowDC16( HWND16 hwnd )\n{\n    return GetDCEx16( hwnd, 0, DCX_USESTYLE | DCX_WINDOW );\n}\n\n\n/**************************************************************************\n *              ReleaseDC   (USER.68)\n */\nINT16 WINAPI ReleaseDC16( HWND16 hwnd, HDC16 hdc )\n{\n    if (!hwnd)\n        hwnd = HWND_16(GetDesktopWindow());\n    if (WindowFromDC(HDC_32(hdc)) != HWND_32(hwnd))\n        return 0;\n    if (dcc.dcs[dcc.next])\n    {\n        HDC16 oldhdc = dcc.dcs[dcc.next];\n        HDC16 oldhwnd = dcc.wnds[dcc.next];\n        if(ReleaseDC( WIN_Handle32(oldhwnd), HDC_32(oldhdc) ) || !IsWindow(HWND_32(oldhwnd)))\n        {\n            K32WOWHandle16DestroyHint(HDC_32(oldhdc), WOW_TYPE_HDC);\n        }\n        for (int i = 0; i < 5; i++)\n        {\n            if (dcc.dcs[i] == oldhdc)\n            {\n                dcc.dcs[i] = 0;\n                dcc.wnds[i] = 0;\n            }\n        }\n    }\n    dcc.dcs[dcc.next] = hdc;\n    dcc.wnds[dcc.next] = hwnd;\n    dcc.next = (dcc.next + 1) % 5;\n    return 1;\n}\n\n\n/**************************************************************************\n *              FlashWindow   (USER.105)\n */\nBOOL16 WINAPI FlashWindow16( HWND16 hwnd, BOOL16 bInvert )\n{\n    return FlashWindow( WIN_Handle32(hwnd), bInvert );\n}\n\n\n/**************************************************************************\n *              WindowFromDC   (USER.117)\n */\nHWND16 WINAPI WindowFromDC16( HDC16 hDC )\n{\n    return HWND_16( WindowFromDC( HDC_32(hDC) ) );\n}\n\n\n/**************************************************************************\n *              UpdateWindow   (USER.124)\n */\nvoid WINAPI UpdateWindow16( HWND16 hwnd )\n{\n    RedrawWindow16( hwnd, NULL, 0, RDW_UPDATENOW | RDW_ALLCHILDREN );\n}\n\n\n/**************************************************************************\n *              InvalidateRect   (USER.125)\n */\nvoid WINAPI InvalidateRect16( HWND16 hwnd, const RECT16 *rect, BOOL16 erase )\n{\n    UINT16 flags = RDW_INVALIDATE | (erase ? RDW_ERASE : 0);\n\n    if (!hwnd)\n    {\n        flags = RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_FRAME | RDW_ERASE | RDW_ERASENOW;\n        rect = NULL;\n    }\n    RedrawWindow16( hwnd, rect, 0, flags );\n}\n\n\n/**************************************************************************\n *              InvalidateRgn   (USER.126)\n */\nvoid WINAPI InvalidateRgn16( HWND16 hwnd, HRGN16 hrgn, BOOL16 erase )\n{\n    RedrawWindow16( hwnd, NULL, hrgn, RDW_INVALIDATE | (erase ? RDW_ERASE : 0) );\n}\n\n\n/**************************************************************************\n *              ValidateRect   (USER.127)\n */\nvoid WINAPI ValidateRect16( HWND16 hwnd, const RECT16 *rect )\n{\n    UINT flags = RDW_VALIDATE;\n\n    if (!hwnd)\n    {\n        flags = RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_FRAME | RDW_ERASE | RDW_ERASENOW;\n        rect = NULL;\n    }\n    RedrawWindow16( hwnd, rect, 0, flags );\n}\n\n\n/**************************************************************************\n *              ValidateRgn   (USER.128)\n */\nvoid WINAPI ValidateRgn16( HWND16 hwnd, HRGN16 hrgn )\n{\n    RedrawWindow16( hwnd, NULL, hrgn, RDW_VALIDATE );\n}\n\n\nstatic WORD get_system_window_class_wndextra(const char *cls, BOOL *f)\n{\n    char buf[100];\n    *f = TRUE;\n    if (IS_INTRESOURCE(cls))\n    {\n        GlobalGetAtomNameA((ATOM)LOWORD(cls), buf, 100);\n        cls = buf;\n    }\n    if (!strncasecmp(cls, \"EDIT\", sizeof(cls)))\n        return 6;\n    if (!strncasecmp(cls, \"LISTBOX\", sizeof(cls)))\n        return 2;\n    if (!strncasecmp(cls, \"SCROLLBAR\", sizeof(cls)))\n        return 12;\n    if (!strncasecmp(cls, \"COMBOBOX\", sizeof(cls)))\n        return 2;\n    if (!strncasecmp(cls, \"STATIC\", sizeof(cls)))\n        return 6;\n    if (!strncasecmp(cls, \"BUTTON\", sizeof(cls)))\n        return 4;\n    *f = FALSE;\n    return 0;\n}\n\n/**************************************************************************\n *              GetClassWord   (USER.129)\n */\nWORD WINAPI GetClassWord16( HWND16 hwnd, INT16 offset )\n{\n    HICON icon;\n\n    switch (offset)\n    {\n    case GCL_CBCLSEXTRA:\n    case GCL_HMODULE:\n        return GetClassLongA(WIN_Handle32(hwnd), offset);\n    case GCL_CBWNDEXTRA:\n    {\n        char cls[1000];\n        GetClassNameA(HWND_32(hwnd), cls, sizeof(cls));\n        BOOL f;\n        WORD cb = get_system_window_class_wndextra(cls, &f);\n        if (f)\n            return cb;\n        ATOM atom = GetClassWord(HWND_32(hwnd), GCW_ATOM);\n        if (WNDCLASS16Info[atom].allocated)\n        {\n            return WNDCLASS16Info[atom].cbWndExtra;\n        }\n        else\n        {\n            return (WORD)GetClassLongA(WIN_Handle32(hwnd), offset);\n        }\n    }\n    case GCLP_HCURSOR:\n    case GCLP_HICON:\n    case GCLP_HICONSM:\n        icon = (HICON)GetClassLongPtrW( WIN_Handle32(hwnd), offset );\n        return get_icon_16( icon );\n    case GCLP_HBRBACKGROUND:\n        return HBRUSH_16((HBRUSH)GetClassLongPtrW(WIN_Handle32(hwnd), offset));\n    }\n    return GetClassWord( WIN_Handle32(hwnd), offset );\n}\n\n\n/**************************************************************************\n *              SetClassWord   (USER.130)\n */\nWORD WINAPI SetClassWord16( HWND16 hwnd, INT16 offset, WORD newval )\n{\n    HICON icon;\n\n    switch (offset)\n    {\n    case GCLP_HCURSOR:\n    case GCLP_HICON:\n    case GCLP_HICONSM:\n        icon = (HICON)SetClassLongPtrW( WIN_Handle32(hwnd), offset, (ULONG_PTR)get_icon_32(newval) );\n        return get_icon_16( icon );\n    case GCLP_HBRBACKGROUND:\n        return HBRUSH_16((HBRUSH)SetClassLongPtrW(WIN_Handle32(hwnd), offset, HBRUSH_32(newval)));\n    }\n    return SetClassWord( WIN_Handle32(hwnd), offset, newval );\n}\n\n\nLRESULT CALLBACK UserAdapterWindowClass(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)\n{\n    ERR(\"(%p, %d, %d, %d)\\n\", msg, wparam, lparam);\n    return FALSE;\n}\n/***********************************************************************\n *\t\tGetClassLong (USER.131)\n */\nLONG WINAPI GetClassLong16( HWND16 hwnd16, INT16 offset )\n{\n    LONG_PTR ret = GetClassLongA( WIN_Handle32(hwnd16), offset );\n\n    switch( offset )\n    {\n    case GCLP_WNDPROC:\n    {\n        ATOM atom = GetClassWord(WIN_Handle32(hwnd16), GCW_ATOM);\n        WNDPROC proc = GetClassLongPtrA(WIN_Handle32(hwnd16), GCLP_WNDPROC);\n        return WNDCLASS16Info[atom].wndproc ? WNDCLASS16Info[atom].wndproc : (LONG_PTR)WINPROC_GetProc16((WNDPROC)ret, FALSE);\n    }\n    case GCLP_MENUNAME:\n        return MapLS( (void *)ret );  /* leak */\n    case GCLP_HCURSOR:\n    case GCLP_HICON:\n    case GCLP_HICONSM:\n        return get_icon_16( (HICON)ret );\n    case GCLP_HBRBACKGROUND:\n        return HBRUSH_16(ret);\n    default:\n        return ret;\n    }\n}\n\n\n/***********************************************************************\n *\t\tSetClassLong (USER.132)\n */\nLONG WINAPI SetClassLong16( HWND16 hwnd16, INT16 offset, LONG newval )\n{\n    HICON icon;\n\n    switch( offset )\n    {\n    case GCLP_HCURSOR:\n    case GCLP_HICON:\n    case GCLP_HICONSM:\n        icon = (HICON)SetClassLongPtrW( WIN_Handle32(hwnd16), offset, (ULONG_PTR)get_icon_32(newval) );\n        return get_icon_16( icon );\n    case GCLP_WNDPROC:\n        {\n            WNDPROC new_proc = (WNDPROC16)newval;\n            //WNDPROC old_proc = (WNDPROC)SetClassLongA( WIN_Handle32(hwnd16), offset, (LONG_PTR)new_proc );\n            ATOM atom = GetClassWord(WIN_Handle32(hwnd16), GCW_ATOM);\n            WNDPROC old = WNDCLASS16Info[atom].wndproc;\n            WNDCLASS16Info[atom].wndproc = new_proc;\n            return old;//(LONG)WINPROC_GetProc16(old_proc, FALSE);\n        }\n    case GCLP_HBRBACKGROUND:\n        return HBRUSH_32(SetClassLongA(WIN_Handle32(hwnd16), offset, HBRUSH_32(newval)));\n    case GCLP_MENUNAME:\n        newval = (LONG)MapSL( newval );\n        /* fall through */\n    default:\n        return SetClassLongA( WIN_Handle32(hwnd16), offset, newval );\n    }\n}\n\nBYTE *hwndwordbuf[65536];\n//__declspec(dllexport)\nvoid SetWindowHInst16(WORD hWnd16, HINSTANCE16 hinst16);\n//__declspec(dllexport) \nHINSTANCE16 GetWindowHInst16(WORD hWnd16);\n//__declspec(dllexport)\nvoid SetWindowHMenu16(WORD hWnd16, HMENU16 hinst16);\n//__declspec(dllexport) \nHMENU16 GetWindowHMenu16(WORD hWnd16);\nBOOL isButton(HWND16 hWnd16, HWND hWnd);\nstatic WORD get_actual_cbwndextra(HWND16 hwnd16)\n{\n    SIZE_T siz = GetClassWord16(hwnd16, GCL_CBWNDEXTRA);\n    if (siz >= 65536)\n        return 65535;\n    WORD w = (WORD)siz;\n    if (w < DLGWINDOWEXTRA)\n        return DLGWINDOWEXTRA;\n    return w;\n}\n/**************************************************************************\n *              GetWindowWord   (USER.133)\n */\nWORD WINAPI GetWindowWord16( HWND16 hwnd, INT16 offset )\n{\n    if (offset >= 0)\n    {\n        if (!offset && isButton(hwnd, WIN_Handle32(hwnd)))\n            return GetWindowWord( WIN_Handle32(hwnd), offset );\n\n        size_t siz = get_actual_cbwndextra(hwnd);\n        if (siz + sizeof(WORD) < offset)\n        {\n            ERR(\"(0x%04X, %d) Out of range\\n\", hwnd, offset);\n            return 0;\n        }\n        if (!hwndwordbuf[hwnd])\n        {\n            //TODO:leak\n            hwndwordbuf[hwnd] = calloc(siz, sizeof(BYTE));\n        }\n        return *(WORD*)(hwndwordbuf[hwnd] + offset);\n    }\n    switch (offset)\n    {\n    case GWL_STYLE:\n        return (WORD)GetWindowLong16(hwnd, offset);\n    case GWL_HINSTANCE:\n    {\n        HINSTANCE16 h16 = GetWindowHInst16(hwnd);\n        if (h16)\n        {\n            return h16;\n        }\n        HINSTANCE h = GetWindowLongPtrW(WIN_Handle32(hwnd), offset);\n        /* 32-bit dll -> 16-bit hinst mapping? */\n        /* LoadLibrary16 returns hinst GetModuleHandle16 returns hmodule */\n        if (h && (h == GetModuleHandleW(L\"COMDLG32.DLL\") || h == GetModuleHandleW(L\"COMMDLG.DLL16\")))\n        {\n            if (GetModuleHandle16(\"COMMDLG\"))\n            {\n                HINSTANCE16 commdlg = LoadLibrary16(\"COMMDLG\");\n                FreeLibrary16(commdlg);\n                return commdlg;\n            }\n        }\n\n        if (h == 0xFFFF0000)\n        {\n            HINSTANCE16 user = LoadLibrary16(\"USER\");\n            FreeLibrary16(user);\n            return user;\n        }\n        if (HIWORD(h))\n        {\n            HTASK16 task = GetWindowTask16(hwnd);\n            if (!task)\n            {\n                HINSTANCE16 user = LoadLibrary16(\"USER\");\n                FreeLibrary16(user);\n                return user;\n            }\n            TDB *tdb = GlobalLock16(task);\n            h16 = tdb->hInstance;\n            GlobalUnlock16(task);\n            return h16;\n        }\n        return LOWORD(h);\n    }\n    case GWL_ID:\n    {\n        LONG ret = GetWindowLongA(WIN_Handle32(hwnd), GWL_ID);\n        return ret;\n    }\n    case GWL_HWNDPARENT:\n        return HWND_16(GetWindowLongA(WIN_Handle32(hwnd), offset));\n    default:\n        break;\n    }\n    return GetWindowWord( WIN_Handle32(hwnd), offset );\n}\n\n\n/**************************************************************************\n *              SetWindowWord   (USER.134)\n */\nWORD WINAPI SetWindowWord16( HWND16 hwnd, INT16 offset, WORD newval )\n{\n    if (offset >= 0)\n    {\n        if (!offset && isButton(hwnd, WIN_Handle32(hwnd)))\n            return SetWindowWord( WIN_Handle32(hwnd), offset, newval );\n\n        size_t siz = get_actual_cbwndextra(hwnd);\n        if (siz + sizeof(WORD) < offset)\n        {\n            ERR(\"(0x%04X, %d, 0x%04X) Out of range\\n\", hwnd, offset, newval);\n            return 0;\n        }\n        if (!hwndwordbuf[hwnd])\n        {\n            //TODO:leak\n            hwndwordbuf[hwnd] = calloc(siz, sizeof(BYTE));\n        }\n        WORD old = *(WORD*)(hwndwordbuf[hwnd] + offset);\n        *(WORD*)(hwndwordbuf[hwnd] + offset) = newval;\n        return old;\n    }\n    switch (offset)\n    {\n    case GWL_HINSTANCE:\n    {\n        HINSTANCE16 old = (HINSTANCE16)GetWindowWord16(hwnd, offset);\n        SetWindowHInst16(hwnd, newval);\n        (SetWindowLongA(WIN_Handle32(hwnd), offset, HINSTANCE_32(newval)));\n        return old;\n    }\n    case GWL_ID:\n    {\n        LONG ret = SetWindowLongA(WIN_Handle32(hwnd), GWL_ID, newval);\n        return ret;\n    }\n    case GWL_HWNDPARENT:\n        return (SetWindowLongA(WIN_Handle32(hwnd), offset, HWND_32(newval)));\n    default:\n        break;\n    }\n    return SetWindowWord( WIN_Handle32(hwnd), offset, newval );\n}\n\n\n/**********************************************************************\n *\t\tGetWindowLong (USER.135)\n */\nLONG WINAPI GetWindowLong16( HWND16 hwnd16, INT16 offset )\n{\n    HWND hwnd = WIN_Handle32( hwnd16 );\n    LONG_PTR retvalue;\n    BOOL is_winproc = (offset == GWLP_WNDPROC);\n\n    if (offset >= 0)\n    {\n        int cbWndExtra = get_actual_cbwndextra( hwnd16 );\n\n        if (offset > (int)(cbWndExtra - sizeof(LONG)))\n        {\n            /*\n             * Some programs try to access last element from 16 bit\n             * code using illegal offset value. Hopefully this is\n             * what those programs really expect.\n             */\n            if (cbWndExtra >= 4 && offset == cbWndExtra - sizeof(WORD))\n            {\n                offset = cbWndExtra - sizeof(LONG);\n            }\n            else\n            {\n                ERR(\"(0x%04X, %d) Out of range\\n\", hwnd, offset);\n                SetLastError( ERROR_INVALID_INDEX );\n                return 0;\n            }\n        }\n        else if (offset == DWLP_DLGPROC)\n        {\n            is_winproc = is_dialog(hwnd);\n        }\n    }\n    if (is_winproc)\n    {\n        if (offset == DWLP_DLGPROC)\n        {\n            retvalue = (LONG_PTR)GetDlgProc16(hwnd16);\n        }\n        else\n        {\n            retvalue = (LONG_PTR)GetWndProc16(hwnd16);\n        }\n        if (retvalue)\n            return retvalue;\n        retvalue = GetWindowLongA(hwnd, offset);\n        if (retvalue)\n            retvalue = (LONG_PTR)WINPROC_GetProc16( (WNDPROC)retvalue, FALSE );\n        return retvalue;\n    }\n    if (offset >= 0)\n    {\n        size_t siz = get_actual_cbwndextra(hwnd16);\n        if (siz + sizeof(LONG) < offset)\n        {\n            ERR(\"(0x%04X, %d) Out of range\\n\", hwnd, offset);\n            SetLastError(ERROR_INVALID_INDEX);\n            return 0;\n        }\n        if (!hwndwordbuf[hwnd16])\n        {\n            //TODO:leak\n            hwndwordbuf[hwnd16] = calloc(siz, sizeof(BYTE));\n        }\n        return *(LONG*)(hwndwordbuf[hwnd16] + offset);\n    }\n    retvalue = GetWindowLongA(hwnd, offset);\n    return retvalue;\n}\n\n\nvoid InitWndProc16(HWND hWnd, HWND16 hWnd16);\nLRESULT get_message_callback(HWND16 hwnd, UINT16 msg, WPARAM16 wp, LPARAM lp,\n    LRESULT *result, void *arg);\nLRESULT call_window_proc16(HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam,\n    LRESULT *result, void *arg);\nLRESULT CALLBACK DlgProcCall16(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam);\nINT_PTR CALLBACK DlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam);\nWNDPROC get_classinfo_wndproc(const char *class);\n/**********************************************************************\n *\t\tSetWindowLong (USER.136)\n */\nLONG WINAPI SetWindowLong16( HWND16 hwnd16, INT16 offset, LONG newval )\n{\n    HWND hwnd = WIN_Handle32( hwnd16 );\n    BOOL is_winproc = (offset == GWLP_WNDPROC);\n\n    if (offset == DWLP_DLGPROC)\n        is_winproc = is_dialog(hwnd);\n\n\tif (is_winproc)\n    {\n        FARPROC oldproc = GetWindowLongA(hwnd, offset);\n        DWORD old = ((LONG_PTR)GetWindowLong16(hwnd16, offset));\n        WNDPROC new_proc = (WNDPROC16)newval;\n        if (offset == DWLP_DLGPROC)\n        {\n            SetDlgProc16(hwnd16, new_proc);\n        }\n        else\n        {\n            SetWndProc16(hwnd16, new_proc);//krnl386.exe\n        }\n        if (offset == DWLP_DLGPROC)\n        {\n            if (oldproc != DlgProc)\n            {\n                /* FIXME: set DlgProc */\n                SetWindowLongA(hwnd, offset, DlgProc);\n            }\n        }\n        else if (oldproc != WindowProc16)\n        {\n            SetWindowLongA(hwnd, offset, WindowProc16);\n        }\n\t\treturn old;\n    }\n    if (offset >= 0)\n    {\n        size_t siz = get_actual_cbwndextra(hwnd16);\n        if (siz + sizeof(LONG) < offset)\n        {\n            ERR(\"(0x%04X, %d) Out of range\\n\", hwnd, offset);\n            SetLastError(ERROR_INVALID_INDEX);\n            return 0;\n        }\n        if (!hwndwordbuf[hwnd16])\n        {\n            //TODO:leak\n            hwndwordbuf[hwnd16] = calloc(siz, sizeof(BYTE));\n        }\n        LONG old = *(LONG*)(hwndwordbuf[hwnd16] + offset);\n        *(LONG*)(hwndwordbuf[hwnd16] + offset) = newval;\n        return old;\n    }\n    else if (offset == GWL_HWNDPARENT)\n        return (SetWindowLongA(WIN_Handle32(hwnd), offset, HWND_32(newval)));\n    else if (offset == GWL_STYLE) // WPWIN61\n    {\n        DWORD count;\n        ReleaseThunkLock(&count);\n        LONG ret = SetWindowLongA( hwnd, offset, newval );\n        RestoreThunkLock(count);\n        return ret;\n    }\n    /*else*/ return SetWindowLongA( hwnd, offset, newval );\n}\n\n\n/**************************************************************************\n *              OpenClipboard   (USER.137)\n */\nBOOL16 WINAPI OpenClipboard16( HWND16 hwnd )\n{\n    return OpenClipboard( WIN_Handle32(hwnd) );\n}\n\n\n/**************************************************************************\n *              GetClipboardOwner   (USER.140)\n */\nHWND16 WINAPI GetClipboardOwner16(void)\n{\n    return HWND_16( GetClipboardOwner() );\n}\n\n\n/**************************************************************************\n *              SetClipboardViewer   (USER.147)\n */\nHWND16 WINAPI SetClipboardViewer16( HWND16 hwnd )\n{\n    return HWND_16( SetClipboardViewer( WIN_Handle32(hwnd) ));\n}\n\n\n/**************************************************************************\n *              GetClipboardViewer   (USER.148)\n */\nHWND16 WINAPI GetClipboardViewer16(void)\n{\n    return HWND_16( GetClipboardViewer() );\n}\n\n\n/**************************************************************************\n *              ChangeClipboardChain   (USER.149)\n */\nBOOL16 WINAPI ChangeClipboardChain16(HWND16 hwnd, HWND16 hwndNext)\n{\n    return ChangeClipboardChain( WIN_Handle32(hwnd), WIN_Handle32(hwndNext) );\n}\n\n\n/**************************************************************************\n *              GetSystemMenu   (USER.156)\n */\nHMENU16 WINAPI GetSystemMenu16( HWND16 hwnd, BOOL16 revert )\n{\n    return HMENU_16(GetSystemMenu( WIN_Handle32(hwnd), revert ));\n}\n\n\n/**************************************************************************\n *              GetMenu   (USER.157)\n */\nHMENU16 WINAPI GetMenu16( HWND16 hwnd )\n{\n    return GetWindowHMenu16(( /*WIN_Handle32*/(hwnd) ));\n}\n\n\n/**************************************************************************\n *              SetMenu   (USER.158)\n */\nBOOL16 WINAPI SetMenu16( HWND16 hwnd, HMENU16 hMenu )\n{\n    BOOL result = SetMenu(WIN_Handle32(hwnd), HMENU_32(hMenu));\n    if (result)\n    {\n        SetWindowHMenu16(hwnd, hMenu);\n    }\n    else if ((GetLastError() == ERROR_INVALID_PARAMETER) && !(GetWindowLongA(HWND_32(hwnd), -20) & WS_CHILD))\n    {\n        // if last error isn't ERROR_INVALID_xxx_HANDLE then hmenu and hwnd are valid\n        // hmenu is likely a popup, set it and return true\n        SetWindowHMenu16(hwnd, hMenu);\n        return TRUE;\n    }\n    return result;\n}\n\n\n/**************************************************************************\n *              DrawMenuBar   (USER.160)\n */\nvoid WINAPI DrawMenuBar16( HWND16 hwnd )\n{\n    HWND hwnd32 = HWND_32(hwnd);\n    HMENU menu = GetMenu(hwnd32);\n    MENUITEMINFOA mii = {0};\n    mii.cbSize = sizeof(MENUITEMINFOA);\n    mii.fMask = MIIM_TYPE | MIIM_SUBMENU;\n    if (GetMenuItemInfoA(menu, 0, TRUE, &mii) && (mii.fType & MFT_BITMAP) && mii.hSubMenu)\n    {\n        mii.fMask = MIIM_BITMAP;\n        if (GetMenuItemInfoA(menu, 1, TRUE, &mii))\n        {\n            // if the second item is a bitmap, it's probably a buttonbar\n            if (!mii.hbmpItem)\n            {\n                mii.hbmpItem = HBMMENU_SYSTEM;\n                SetMenuItemInfoA(menu, 0, TRUE, &mii);\n            }\n        }\n    }\n    DrawMenuBar(hwnd32);\n}\n\n\n/**************************************************************************\n *              HiliteMenuItem   (USER.162)\n */\nBOOL16 WINAPI HiliteMenuItem16( HWND16 hwnd, HMENU16 hMenu, UINT16 id, UINT16 wHilite )\n{\n    return HiliteMenuItem( WIN_Handle32(hwnd), HMENU_32(hMenu), id, wHilite );\n}\n\n\n/**************************************************************************\n *              CreateCaret   (USER.163)\n */\nvoid WINAPI CreateCaret16( HWND16 hwnd, HBITMAP16 bitmap, INT16 width, INT16 height )\n{\n    CreateCaret( WIN_Handle32(hwnd), HBITMAP_32(bitmap), width, height );\n}\n\n\n/*****************************************************************\n *\t\tDestroyCaret (USER.164)\n */\nvoid WINAPI DestroyCaret16(void)\n{\n    DestroyCaret();\n}\n\n\n/*****************************************************************\n *\t\tSetCaretPos (USER.165)\n */\nvoid WINAPI SetCaretPos16( INT16 x, INT16 y )\n{\n    SetCaretPos( x, y );\n}\n\n\n/**************************************************************************\n *              HideCaret   (USER.166)\n */\nvoid WINAPI HideCaret16( HWND16 hwnd )\n{\n    HideCaret( WIN_Handle32(hwnd) );\n}\n\n\n/**************************************************************************\n *              ShowCaret   (USER.167)\n */\nvoid WINAPI ShowCaret16( HWND16 hwnd )\n{\n    ShowCaret( WIN_Handle32(hwnd) );\n}\n\n\n/*****************************************************************\n *\t\tSetCaretBlinkTime (USER.168)\n */\nvoid WINAPI SetCaretBlinkTime16( UINT16 msecs )\n{\n    SetCaretBlinkTime( msecs );\n}\n\n\n/*****************************************************************\n *\t\tGetCaretBlinkTime (USER.169)\n */\nUINT16 WINAPI GetCaretBlinkTime16(void)\n{\n    return GetCaretBlinkTime();\n}\n\n\n/**************************************************************************\n *              ArrangeIconicWindows   (USER.170)\n */\nUINT16 WINAPI ArrangeIconicWindows16( HWND16 parent)\n{\n    return ArrangeIconicWindows( WIN_Handle32(parent) );\n}\n\n\n/**************************************************************************\n *              SwitchToThisWindow   (USER.172)\n */\nvoid WINAPI SwitchToThisWindow16( HWND16 hwnd, BOOL16 restore )\n{\n    DWORD count;\n    ReleaseThunkLock(&count);\n    SwitchToThisWindow( WIN_Handle32(hwnd), restore );\n    RestoreThunkLock(count);\n}\n\n\n/**************************************************************************\n *              KillSystemTimer   (USER.182)\n */\nBOOL16 WINAPI KillSystemTimer16( HWND16 hwnd, UINT16 id )\n{\n    if (!KillSystemTimer)\n    {\n        ERR(\"KillSystemTimer NULL\\n\");\n        return 0;\n    }\n    return KillSystemTimer( WIN_Handle32(hwnd), id );\n}\n\n\n/*****************************************************************\n *\t\tGetCaretPos (USER.183)\n */\nvoid WINAPI GetCaretPos16( LPPOINT16 pt16 )\n{\n    POINT pt;\n    if (GetCaretPos( &pt ))\n    {\n        pt16->x = pt.x;\n        pt16->y = pt.y;\n    }\n}\n\n\n/**************************************************************************\n *              SetSysModalWindow   (USER.188)\n */\nHWND16 WINAPI SetSysModalWindow16( HWND16 hwnd )\n{\n    HWND16 old = hwndSysModal;\n    hwndSysModal = hwnd;\n    return old;\n}\n\n\n/**************************************************************************\n *              GetSysModalWindow   (USER.189)\n */\nHWND16 WINAPI GetSysModalWindow16(void)\n{\n    return hwndSysModal;\n}\n\n\n/**************************************************************************\n *              GetUpdateRect   (USER.190)\n */\nBOOL16 WINAPI GetUpdateRect16( HWND16 hwnd, LPRECT16 rect, BOOL16 erase )\n{\n    RECT r;\n    BOOL16 ret;\n    HWND hwnd32 = WIN_Handle32(hwnd);\n\n    if (!rect) return GetUpdateRect(hwnd32, NULL, erase );\n    if (!IsWindow(hwnd32))\n        return FALSE;\n    ret = GetUpdateRect( hwnd32, &r, erase );\n    rect->left   = r.left;\n    rect->top    = r.top;\n    rect->right  = r.right;\n    rect->bottom = r.bottom;\n    return ret;\n}\n\n\n/**************************************************************************\n *              ChildWindowFromPoint   (USER.191)\n */\nHWND16 WINAPI ChildWindowFromPoint16( HWND16 hwndParent, POINT16 pt )\n{\n    POINT pt32;\n\n    pt32.x = pt.x;\n    pt32.y = pt.y;\n    return HWND_16( ChildWindowFromPoint( WIN_Handle32(hwndParent), pt32 ));\n}\n\n\n/***********************************************************************\n *\t\tCascadeChildWindows (USER.198)\n */\nvoid WINAPI CascadeChildWindows16( HWND16 parent, WORD action )\n{\n    CascadeWindows( WIN_Handle32(parent), action, NULL, 0, NULL );\n}\n\n\n/***********************************************************************\n *\t\tTileChildWindows (USER.199)\n */\nvoid WINAPI TileChildWindows16( HWND16 parent, WORD action )\n{\n    TileWindows( WIN_Handle32(parent), action, NULL, 0, NULL );\n}\n\n\n/***********************************************************************\n *\t\tGetWindowTask   (USER.224)\n */\nHTASK16 WINAPI GetWindowTask16( HWND16 hwnd )\n{\n    DWORD tid = GetWindowThreadProcessId( HWND_32(hwnd), NULL );\n    if (!tid) return 0;\n    return HTASK_16(tid);\n}\n\n/**********************************************************************\n *\t\tEnumTaskWindows   (USER.225)\n */\nBOOL16 WINAPI EnumTaskWindows16( HTASK16 hTask, WNDENUMPROC16 func, LPARAM lParam )\n{\n    struct wnd_enum_info info;\n    DWORD tid = HTASK_32( hTask );\n\n    if (!tid) return FALSE;\n    info.proc  = func;\n    info.param = lParam;\n    return EnumThreadWindows( tid, wnd_enum_callback, (LPARAM)&info );\n}\n\n\n/**************************************************************************\n *              GetTopWindow   (USER.229)\n */\nHWND16 WINAPI GetTopWindow16( HWND16 hwnd )\n{\n    return HWND_16( GetTopWindow( WIN_Handle32(hwnd) ));\n}\n\n\n/**************************************************************************\n *              GetNextWindow   (USER.230)\n */\nHWND16 WINAPI GetNextWindow16( HWND16 hwnd, WORD flag )\n{\n    if ((flag != GW_HWNDNEXT) && (flag != GW_HWNDPREV)) return 0;\n    return GetWindow16( hwnd, flag );\n}\n\n\n/**************************************************************************\n *              SetWindowPos   (USER.232)\n */\nBOOL16 WINAPI SetWindowPos16( HWND16 hwnd, HWND16 hwndInsertAfter,\n                              INT16 x, INT16 y, INT16 cx, INT16 cy, WORD flags)\n{\n    HWND hwnd32 = WIN_Handle32(hwnd);\n    if (hwnd == (WORD)HWND_TOPMOST)\n    {\n        hwnd32 = HWND_TOPMOST;\n    }\n    if (hwnd == (WORD)HWND_NOTOPMOST)\n    {\n        hwnd32 = HWND_NOTOPMOST;\n    }\n    if (GetExpWinVer16(GetExePtr(GetCurrentTask())) < 0x30a)\n    {\n        RECT rect;\n        if (flags & SWP_NOREDRAW)\n        {\n            GetWindowRect(hwnd32, &rect);\n            /* top-level window */\n            if (GetAncestor(hwnd32, GA_PARENT) == GetDesktopWindow())\n            {\n                flags &= ~SWP_NOREDRAW;\n            }\n            if (rect.left == rect.right || rect.bottom == rect.top)\n            {\n                flags &= ~SWP_NOREDRAW;\n            }\n        }\n        if (!(flags & SWP_NOMOVE) && !(flags & SWP_NOSIZE))\n        {\n            GetClientRect(hwnd32, &rect);\n            if ((cx != rect.right) || (cy != rect.bottom))\n                flags |= SWP_FRAMECHANGED; // force WM_NCCALCSIZE\n        }\n    }\n    DWORD count;\n    ReleaseThunkLock(&count);\n    BOOL16 result = SetWindowPos( hwnd32, full_insert_after_hwnd(hwndInsertAfter),\n                         x, y, cx, cy, flags );\n    RestoreThunkLock(count);\n    return result;\n}\n\n\n/**************************************************************************\n *              SetParent   (USER.233)\n */\nHWND16 WINAPI SetParent16( HWND16 hwndChild, HWND16 hwndNewParent )\n{\n    DWORD count;\n    ReleaseThunkLock(&count);\n    HWND16 hwnd16 = HWND_16( SetParent( WIN_Handle32(hwndChild), WIN_Handle32(hwndNewParent) ));\n    RestoreThunkLock(count);\n    return hwnd16;\n}\n\n\n/**************************************************************************\n *              GetCapture   (USER.236)\n */\nHWND16 WINAPI GetCapture16(void)\n{\n    return HWND_16( GetCapture() );\n}\n\n\n/**************************************************************************\n *              GetUpdateRgn   (USER.237)\n */\nINT16 WINAPI GetUpdateRgn16( HWND16 hwnd, HRGN16 hrgn, BOOL16 erase )\n{\n    return GetUpdateRgn( WIN_Handle32(hwnd), HRGN_32(hrgn), erase );\n}\n\n\n/**************************************************************************\n *              ExcludeUpdateRgn   (USER.238)\n */\nINT16 WINAPI ExcludeUpdateRgn16( HDC16 hdc, HWND16 hwnd )\n{\n    return ExcludeUpdateRgn( HDC_32(hdc), WIN_Handle32(hwnd) );\n}\n\n\n/**************************************************************************\n *              GetOpenClipboardWindow   (USER.248)\n */\nHWND16 WINAPI GetOpenClipboardWindow16(void)\n{\n    return HWND_16( GetOpenClipboardWindow() );\n}\n\n\n/*******************************************************************\n *\t\tMapWindowPoints (USER.258)\n */\nvoid WINAPI MapWindowPoints16( HWND16 hwndFrom, HWND16 hwndTo, LPPOINT16 lppt, UINT16 count )\n{\n    POINT buffer[8], *ppt = buffer;\n    UINT i;\n\n    if (count > 8) ppt = HeapAlloc( GetProcessHeap(), 0, count * sizeof(*ppt) );\n    for (i = 0; i < count; i++)\n    {\n        ppt[i].x = lppt[i].x;\n        ppt[i].y = lppt[i].y;\n    }\n    MapWindowPoints( WIN_Handle32(hwndFrom), WIN_Handle32(hwndTo), ppt, count );\n    for (i = 0; i < count; i++)\n    {\n        lppt[i].x = ppt[i].x;\n        lppt[i].y = ppt[i].y;\n    }\n    if (ppt != buffer) HeapFree( GetProcessHeap(), 0, ppt );\n}\n\n\n/**************************************************************************\n *              BeginDeferWindowPos   (USER.259)\n */\nHDWP16 WINAPI BeginDeferWindowPos16( INT16 count )\n{\n    return HDWP_16(BeginDeferWindowPos( count ));\n}\n\n\n/**************************************************************************\n *              DeferWindowPos   (USER.260)\n */\nHDWP16 WINAPI DeferWindowPos16( HDWP16 hdwp, HWND16 hwnd, HWND16 hwndAfter,\n                                INT16 x, INT16 y, INT16 cx, INT16 cy,\n                                UINT16 flags )\n{\n    return HDWP_16(DeferWindowPos( HDWP_32(hdwp), WIN_Handle32(hwnd),\n\t\t   full_insert_after_hwnd(hwndAfter), x, y, cx, cy, flags ));\n}\n\n\n/**************************************************************************\n *              EndDeferWindowPos   (USER.261)\n */\nBOOL16 WINAPI EndDeferWindowPos16( HDWP16 hdwp )\n{\n    DWORD count;\n    BOOL result;\n    HDWP hdwp32 = HDWP_32(hdwp);\n    ReleaseThunkLock(&count);\n    result = EndDeferWindowPos(hdwp32);\n    RestoreThunkLock(count);\n    if (result)\n    {\n        K32WOWHandle16Destroy(hdwp32, WOW_TYPE_HDWP);\n    }\n    return result;\n}\n\n\n/**************************************************************************\n *              GetWindow   (USER.262)\n */\nHWND16 WINAPI GetWindow16( HWND16 hwnd, WORD rel )\n{\n    return HWND_16( GetWindow( WIN_Handle32(hwnd), rel ) );\n}\n\n\n/**************************************************************************\n *              ShowOwnedPopups   (USER.265)\n */\nvoid WINAPI ShowOwnedPopups16( HWND16 owner, BOOL16 fShow )\n{\n    ShowOwnedPopups( WIN_Handle32(owner), fShow );\n}\n\n\n/**************************************************************************\n *              ShowScrollBar   (USER.267)\n */\nvoid WINAPI ShowScrollBar16( HWND16 hwnd, INT16 nBar, BOOL16 fShow )\n{\n    ShowScrollBar( WIN_Handle32(hwnd), nBar, fShow );\n}\n\n\n/**************************************************************************\n *              IsZoomed   (USER.272)\n */\nBOOL16 WINAPI IsZoomed16(HWND16 hwnd)\n{\n    return IsZoomed( WIN_Handle32(hwnd) );\n}\n\n\n/**************************************************************************\n *              GetDlgCtrlID   (USER.277)\n */\nINT16 WINAPI GetDlgCtrlID16( HWND16 hwnd )\n{\n    return GetDlgCtrlID( WIN_Handle32(hwnd) );\n}\n\n\n/**************************************************************************\n *              GetDesktopHwnd   (USER.278)\n *\n * Exactly the same thing as GetDesktopWindow(), but not documented.\n * Don't ask me why...\n */\nHWND16 WINAPI GetDesktopHwnd16(void)\n{\n    return GetDesktopWindow16();\n}\n\n\n/**************************************************************************\n *              SetSystemMenu   (USER.280)\n */\nBOOL16 WINAPI SetSystemMenu16( HWND16 hwnd, HMENU16 hMenu )\n{\n    return SetSystemMenu( WIN_Handle32(hwnd), HMENU_32(hMenu) );\n}\n\n\n/**************************************************************************\n *              GetDesktopWindow   (USER.286)\n */\nHWND16 WINAPI GetDesktopWindow16(void)\n{\n    return HWND_16( GetDesktopWindow() );\n}\n\n\n/**************************************************************************\n *              GetLastActivePopup   (USER.287)\n */\nHWND16 WINAPI GetLastActivePopup16( HWND16 hwnd )\n{\n    return HWND_16( GetLastActivePopup( WIN_Handle32(hwnd) ));\n}\n\n\n/**************************************************************************\n *              RedrawWindow   (USER.290)\n */\nBOOL16 WINAPI RedrawWindow16( HWND16 hwnd, const RECT16 *rectUpdate,\n                              HRGN16 hrgnUpdate, UINT16 flags )\n{\n    DWORD count;\n    BOOL result;\n    ReleaseThunkLock(&count);\n    if (rectUpdate)\n    {\n        RECT r;\n        r.left   = rectUpdate->left;\n        r.top    = rectUpdate->top;\n        r.right  = rectUpdate->right;\n        r.bottom = rectUpdate->bottom;\n        result = RedrawWindow(WIN_Handle32(hwnd), &r, HRGN_32(hrgnUpdate), flags);\n    }\n    else\n    {\n        result = RedrawWindow(WIN_Handle32(hwnd), NULL, HRGN_32(hrgnUpdate), flags);\n    }\n    RestoreThunkLock(count);\n    return result;\n}\n\n\n/**************************************************************************\n *              LockWindowUpdate   (USER.294)\n */\nBOOL16 WINAPI LockWindowUpdate16( HWND16 hwnd )\n{\n    return LockWindowUpdate( WIN_Handle32(hwnd) );\n}\n\n\n/**************************************************************************\n *              ScrollWindowEx   (USER.319)\n */\nINT16 WINAPI ScrollWindowEx16( HWND16 hwnd, INT16 dx, INT16 dy,\n                               const RECT16 *rect, const RECT16 *clipRect,\n                               HRGN16 hrgnUpdate, LPRECT16 rcUpdate,\n                               UINT16 flags )\n{\n    RECT rect32, clipRect32, rcUpdate32;\n    BOOL16 ret;\n\n    if (rect)\n    {\n        rect32.left   = rect->left;\n        rect32.top    = rect->top;\n        rect32.right  = rect->right;\n        rect32.bottom = rect->bottom;\n    }\n    if (clipRect)\n    {\n        clipRect32.left   = clipRect->left;\n        clipRect32.top    = clipRect->top;\n        clipRect32.right  = clipRect->right;\n        clipRect32.bottom = clipRect->bottom;\n    }\n    ret = ScrollWindowEx( WIN_Handle32(hwnd), dx, dy, rect ? &rect32 : NULL,\n                          clipRect ? &clipRect32 : NULL, HRGN_32(hrgnUpdate),\n                          (rcUpdate) ? &rcUpdate32 : NULL, flags );\n    if (rcUpdate)\n    {\n        rcUpdate->left   = rcUpdate32.left;\n        rcUpdate->top    = rcUpdate32.top;\n        rcUpdate->right  = rcUpdate32.right;\n        rcUpdate->bottom = rcUpdate32.bottom;\n    }\n    return ret;\n}\n\n\n/**************************************************************************\n *              FillWindow   (USER.324)\n */\nvoid WINAPI FillWindow16( HWND16 hwndParent, HWND16 hwnd, HDC16 hdc, HBRUSH16 hbrush )\n{\n    RECT rect;\n    RECT16 rc16;\n    GetClientRect( WIN_Handle32(hwnd), &rect );\n    DPtoLP( HDC_32(hdc), (LPPOINT)&rect, 2 );\n    rc16.left   = rect.left;\n    rc16.top    = rect.top;\n    rc16.right  = rect.right;\n    rc16.bottom = rect.bottom;\n    PaintRect16( hwndParent, hwnd, hdc, hbrush, &rc16 );\n}\n\n\n/**************************************************************************\n *              PaintRect   (USER.325)\n */\nvoid WINAPI PaintRect16( HWND16 hwndParent, HWND16 hwnd, HDC16 hdc,\n                         HBRUSH16 hbrush, const RECT16 *rect)\n{\n    if (hbrush <= CTLCOLOR_STATIC)\n    {\n        HWND parent = WIN_Handle32(hwndParent), hwnd32 = WIN_Handle32(hwnd);\n\n        if (!parent) return;\n        hbrush = SendMessageW( parent, WM_CTLCOLORMSGBOX + hbrush, hdc, (LPARAM)hwnd32 );\n        if (!hbrush) hbrush = DefWindowProcW( parent, WM_CTLCOLORMSGBOX + hbrush,\n                                              hdc, (LPARAM)hwnd32 );\n    }\n    if (hbrush) FillRect16( hdc, rect, hbrush );\n}\n\n\n/**************************************************************************\n *              GetControlBrush   (USER.326)\n */\nHBRUSH16 WINAPI GetControlBrush16( HWND16 hwnd, HDC16 hdc, UINT16 ctlType )\n{\n    HBRUSH16 ret;\n    HWND hwnd32 = WIN_Handle32(hwnd);\n    HWND parent = GetParent( hwnd32 );\n\n    if (!parent) parent = hwnd32;\n    ret = SendMessageW( parent, WM_CTLCOLORMSGBOX + ctlType, hdc, (LPARAM)hwnd32 );\n    if (!ret) ret = DefWindowProcW( parent, WM_CTLCOLORMSGBOX + ctlType,\n                                    hdc, (LPARAM)hwnd32 );\n    return ret;\n}\n\n\n/**************************************************************************\n *              GetDCEx   (USER.359)\n */\nHDC16 WINAPI GetDCEx16( HWND16 hwnd, HRGN16 hrgnClip, DWORD flags )\n{\n    return HDC_16(GetDCEx(WIN_Handle32(hwnd), HRGN_32(hrgnClip), flags));\n}\n\n\n/**************************************************************************\n *              GetWindowPlacement   (USER.370)\n */\nBOOL16 WINAPI GetWindowPlacement16( HWND16 hwnd, WINDOWPLACEMENT16 *wp16 )\n{\n    WINDOWPLACEMENT wpl;\n\n    wpl.length = sizeof(wpl);\n    if (!GetWindowPlacement( WIN_Handle32(hwnd), &wpl )) return FALSE;\n    wp16->length  = sizeof(*wp16);\n    wp16->flags   = wpl.flags;\n    wp16->showCmd = wpl.showCmd;\n    wp16->ptMinPosition.x = wpl.ptMinPosition.x;\n    wp16->ptMinPosition.y = wpl.ptMinPosition.y;\n    wp16->ptMaxPosition.x = wpl.ptMaxPosition.x;\n    wp16->ptMaxPosition.y = wpl.ptMaxPosition.y;\n    wp16->rcNormalPosition.left   = wpl.rcNormalPosition.left;\n    wp16->rcNormalPosition.top    = wpl.rcNormalPosition.top;\n    wp16->rcNormalPosition.right  = wpl.rcNormalPosition.right;\n    wp16->rcNormalPosition.bottom = wpl.rcNormalPosition.bottom;\n    return TRUE;\n}\n\n\n/**************************************************************************\n *              SetWindowPlacement   (USER.371)\n */\nBOOL16 WINAPI SetWindowPlacement16( HWND16 hwnd, const WINDOWPLACEMENT16 *wp16 )\n{\n    WINDOWPLACEMENT wpl;\n\n    if (!wp16) return FALSE;\n    wpl.length  = sizeof(wpl);\n    wpl.flags   = wp16->flags;\n    wpl.showCmd = wp16->showCmd;\n    wpl.ptMinPosition.x = wp16->ptMinPosition.x;\n    wpl.ptMinPosition.y = wp16->ptMinPosition.y;\n    wpl.ptMaxPosition.x = wp16->ptMaxPosition.x;\n    wpl.ptMaxPosition.y = wp16->ptMaxPosition.y;\n    wpl.rcNormalPosition.left   = wp16->rcNormalPosition.left;\n    wpl.rcNormalPosition.top    = wp16->rcNormalPosition.top;\n    wpl.rcNormalPosition.right  = wp16->rcNormalPosition.right;\n    wpl.rcNormalPosition.bottom = wp16->rcNormalPosition.bottom;\n    DWORD count;\n    ReleaseThunkLock(&count);\n    BOOL ret = SetWindowPlacement( WIN_Handle32(hwnd), &wpl );\n    RestoreThunkLock(count);\n    return ret;\n}\n\nstruct WNDCLASS16Info WNDCLASS16Info[65536];\nstruct WNDCLASS16Info *WNDCLASS16InfoStringAtom[65536];\n#include \"../toolhelp/toolhelp.h\"\n\n__declspec(dllexport) BOOL16 WINAPI USER_ClassFirst16(CLASSENTRY *pClassEntry)\n{\n    FIXME(\"\\n\");\n    return FALSE;\n}\n__declspec(dllexport) BOOL16 WINAPI USER_ClassNext16(CLASSENTRY *pClassEntry)\n{\n    FIXME(\"\\n\");\n    return FALSE;\n}\n\nNE_TYPEINFO *get_resource_table(HMODULE16 hmod, LPCSTR type, LPBYTE *restab);\n/***********************************************************************\n *\t\tRegisterClassEx (USER.397)\n */\nATOM WINAPI RegisterClassEx16( const WNDCLASSEX16 *wc )\n{\n    struct class_entry *class;\n    WNDCLASSEXA wc32;\n    HINSTANCE16 inst;\n    ATOM atom;\n    SIZE_T class_len;\n    SIZE_T menu_len;\n    SIZE_T buf_len;\n    struct A\n    {\n        LPCSTR local_class_prefix;\n        DWORD hInst;\n        LPCSTR name;\n    } a;\n    char atombuf[256];\n    va_list arg;\n    LPCSTR buf = NULL;\n    LPCSTR classname32 = MapSL(wc->lpszClassName);\n\n    inst = GetExePtr( wc->hInstance );\n    if (!inst)\n    {\n        inst = GetExePtr(GetCurrentTask());\n    }\n\n    wc32.cbSize        = sizeof(wc32);\n    wc32.style         = wc->style | CS_GLOBALCLASS;\n    wc32.lpfnWndProc   = WindowProc16;\n    wc32.cbClsExtra    = wc->cbClsExtra;\n    wc32.cbWndExtra    = 100;\n    wc32.hInstance     = HINSTANCE_32(inst);\n    wc32.hIcon         = get_icon_32(wc->hIcon);\n    wc32.hCursor       = get_icon_32( wc->hCursor );\n    wc32.hbrBackground = HBRUSH_32(wc->hbrBackground);\n    wc32.lpszMenuName  = MapSL(wc->lpszMenuName);\n    wc32.lpszClassName = classname32;\n    wc32.hIconSm       = get_icon_32(wc->hIconSm);\n    if (!HIWORD(wc32.lpszClassName))\n    {\n        GlobalGetAtomNameA(wc32.lpszClassName, atombuf, 256);\n        wc32.lpszClassName = atombuf;\n    }\n    a.hInst = inst;\n    a.name = wc32.lpszClassName;\n    a.local_class_prefix = LOCAL_CLASS_PREFIX;\n    arg = (va_list)&a;\n    /*\n     * add hModule prefix to classname\n     */\n    if (FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING, \"%1!s!%2!04X!%3!s!%0\", NULL, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), &buf, 0, &arg))\n    {\n        wc32.lpszClassName = buf;\n    }\n    /*\n     * register same class:\n     *   Win3.1 returns 0\n     *   WOW returns same class atom\n     */\n    atom = RegisterClassExA( &wc32 );\n    TRACE(\"(%08x,%08x,%04x,%04x,%04x,%04x,%04x,%04x,%s,%s,%04x) Ret:%04x\\n\", wc->style, wc->lpfnWndProc, wc->cbClsExtra, wc->cbWndExtra, wc->hInstance, wc->hIcon, wc->hCursor, wc->hbrBackground, debugstr_a(wc32.lpszMenuName), debugstr_a(wc32.lpszClassName), wc->hIconSm, atom);\n\tif (atom)\n\t{\n        WNDCLASS16Info[atom].allocated = TRUE;\n        WNDCLASS16Info[atom].wndproc = (DWORD)(wc->lpfnWndProc);\n        WNDCLASS16Info[atom].cbWndExtra = wc->cbWndExtra;\n\t}\n    class_len = strlen(a.name) + 1;\n    menu_len = !IS_INTRESOURCE(wc->lpszMenuName) && ((ULONG_PTR)wc32.lpszMenuName >> 16) ? strlen(wc32.lpszMenuName) + 1 : 0;\n    buf_len = strlen(buf) + 1;\n\n\tif (atom && (class = HeapAlloc(GetProcessHeap(), 0, sizeof(*class) + class_len + menu_len + buf_len)))\n    {\n\t\tclass->atom = atom;\n        class->inst = inst;\n\t\tclass->wndproc16 = WNDCLASS16Info[atom].wndproc;\n        class->classInfo = wc32;\n        class->classInfo.style = wc->style | (IsOldWindowsTask(GetCurrentTask()) ? CS_GLOBALCLASS : 0);\n        class->classInfo.lpszClassName = (LPBYTE)class + sizeof(*class);\n        memcpy(class->classInfo.lpszClassName, a.name, class_len);\n        if (menu_len)\n        {\n            class->classInfo.lpszMenuName = (LPBYTE)class + sizeof(*class) + class_len;\n            memcpy(class->classInfo.lpszMenuName, wc32.lpszMenuName, menu_len);\n        }\n        class->win32_classname = (LPBYTE)class + sizeof(*class) + class_len + menu_len;\n        memcpy(class->win32_classname, buf, buf_len);\n        list_add_tail( &class_list, &class->entry );\n    }\n    LocalFree(buf);\n    return atom;\n}\n\nstruct class_entry *find_win32_class(LPCSTR name)\n{\n    struct class_entry *clazz;\n    ATOM class_atom = LOWORD(name);\n    BOOL is_atom = IS_INTRESOURCE(name);\n    LIST_FOR_EACH_ENTRY(clazz, &class_list, struct class_entry, entry)\n    {\n        if (is_atom)\n        {\n            if (class_atom == clazz->atom)\n            {\n                return clazz;\n            }\n            continue;\n        }\n        if (!strcmpi(name, clazz->win32_classname))\n        {\n            return clazz;\n        }\n    }\n    return NULL;\n}\n\nstruct class_entry *find_win16_class(HINSTANCE16 hInst16, LPCSTR name)\n{\n    struct class_entry *clazz;\n    ATOM class_atom = LOWORD(name);\n    BOOL is_atom = IS_INTRESOURCE(name);\n    hInst16 = GetExePtr(hInst16);\n    LIST_FOR_EACH_ENTRY(clazz, &class_list, struct class_entry, entry)\n    {\n        if ((clazz->inst == hInst16 || (clazz->classInfo.style & CS_GLOBALCLASS)))\n        {\n            if (is_atom)\n            {\n                if (class_atom == clazz->atom)\n                {\n                    return clazz;\n                }\n                continue;\n            }\n            if (!strcmpi(name, clazz->classInfo.lpszClassName))\n            {\n                return clazz;\n            }\n        }\n    }\n    return NULL;\n}\nLPCSTR win16classname(LPCSTR name)\n{\n    struct class_entry *entry = find_win32_class(name);\n    if (entry)\n        return entry->classInfo.lpszClassName;\n    if (HIWORD(name) && name[0] == '#')\n    {\n        ATOM atom = FindAtomA(name);\n        if (atom != 0)\n            return atom;\n    }\n    return name;\n}\nLPCSTR win32classname(HINSTANCE16 hInst16, LPCSTR name)\n{\n    struct class_entry *entry = find_win16_class(hInst16, name);\n    if (entry)\n        return entry->win32_classname;\n    return name;\n}\n\n/***********************************************************************\n *\t\tGetClassInfoEx (USER.398)\n *\n * FIXME: this is just a guess, I have no idea if GetClassInfoEx() is the\n * same in Win16 as in Win32. --AJ\n */\nBOOL16 WINAPI GetClassInfoEx16( HINSTANCE16 hInst16, SEGPTR name, WNDCLASSEX16 *wc )\n{\n    static HMODULE user32_module;\n    WNDCLASSEXA wc32;\n    HINSTANCE hInstance;\n    ATOM ret = 0;\n    struct class_entry *class;\n    LPCSTR name32 = MapSL(name);\n    ATOM class_atom = LOWORD(name);\n    BOOL is_atom = IS_INTRESOURCE(name);\n\n    if (!user32_module) user32_module = GetModuleHandleA( \"user32.dll\" );\n    if (hInst16 == GetModuleHandle16(\"user\")) hInstance = user32_module;\n    else hInstance = HINSTANCE_32(GetExePtr( hInst16 ));\n\n    class = find_win16_class(hInst16, name32);\n    if (class)\n    {\n        wc32 = class->classInfo;\n        ret = class->atom;\n    }\n    /* win32 class */\n    if (!ret)\n        ret = GetClassInfoExA( hInstance, name32, &wc32 );\n\n    if (ret)\n    {\n        wc->lpfnWndProc = WNDCLASS16Info[ret].wndproc ? WNDCLASS16Info[ret].wndproc : WINPROC_GetProc16( wc32.lpfnWndProc, FALSE );\n        wc->style         = wc32.style;\n        wc->cbClsExtra    = wc32.cbClsExtra;\n        BOOL f;\n        WORD cb = get_system_window_class_wndextra(wc32.lpszClassName, &f);\n        wc->cbWndExtra    = f ? cb : wc32.cbWndExtra;\n        if (GetExePtr(hInst16) == HINSTANCE_16(wc32.hInstance))\n            wc->hInstance = hInst16;\n        else\n            wc->hInstance = (wc32.hInstance == user32_module) ? GetModuleHandle16(\"user\") : HINSTANCE_16(wc32.hInstance);\n        wc->hIcon         = get_icon_16( wc32.hIcon );\n        wc->hIconSm       = get_icon_16( wc32.hIconSm );\n        wc->hCursor       = get_icon_16( wc32.hCursor );\n        wc->hbrBackground = HBRUSH_16(wc32.hbrBackground);\n        wc->lpszClassName = MapLS(wc32.lpszClassName);\n        wc->lpszMenuName  = MapLS(wc32.lpszMenuName);  /* FIXME: leak */\n    }\n    return ret;\n}\n\n\n/**************************************************************************\n *              ChildWindowFromPointEx   (USER.399)\n */\nHWND16 WINAPI ChildWindowFromPointEx16( HWND16 hwndParent, POINT16 pt, UINT16 uFlags)\n{\n    POINT pt32;\n\n    pt32.x = pt.x;\n    pt32.y = pt.y;\n    return HWND_16( ChildWindowFromPointEx( WIN_Handle32(hwndParent), pt32, uFlags ));\n}\n\n\n/**************************************************************************\n *              GetPriorityClipboardFormat   (USER.402)\n */\nINT16 WINAPI GetPriorityClipboardFormat16( UINT16 *list, INT16 count )\n{\n    int i;\n\n    for (i = 0; i < count; i++)\n        if (IsClipboardFormatAvailable( list[i] )) return list[i];\n    return -1;\n}\n\n\n/***********************************************************************\n *\t\tUnregisterClass (USER.403)\n */\nBOOL16 WINAPI UnregisterClass16( LPCSTR className, HINSTANCE16 hInstance )\n{\n    ATOM atom;\n\n    if (hInstance == GetModuleHandle16(\"user\")) hInstance = 0;\n    else hInstance = GetExePtr( hInstance );\n    struct class_entry *win32 = find_win16_class(hInstance, className);\n\n    if (win32)\n    {\n        WNDCLASS16Info[win32->atom].allocated = FALSE;\n        className = win32->win32_classname;\n        BOOL ret = UnregisterClassA(className, HINSTANCE_32(hInstance));\n        list_remove(&win32->entry);\n        HeapFree(GetProcessHeap(), 0, win32);\n        return ret;\n    }\n    return UnregisterClassA( className, HINSTANCE_32(hInstance) );\n}\n\n\n/***********************************************************************\n *\t\tGetClassInfo (USER.404)\n */\nBOOL16 WINAPI GetClassInfo16( HINSTANCE16 hInst16, SEGPTR name, WNDCLASS16 *wc )\n{\n    WNDCLASSEX16 wcex;\n    UINT16 ret = GetClassInfoEx16( hInst16, name, &wcex );\n\n    if (ret)\n    {\n        wc->style         = wcex.style;\n        wc->lpfnWndProc   = wcex.lpfnWndProc;\n        wc->cbClsExtra    = wcex.cbClsExtra;\n        wc->cbWndExtra    = wcex.cbWndExtra;\n        wc->hInstance     = wcex.hInstance;\n        wc->hIcon         = wcex.hIcon;\n        wc->hCursor       = wcex.hCursor;\n        wc->hbrBackground = wcex.hbrBackground;\n        wc->lpszMenuName  = wcex.lpszMenuName;\n        wc->lpszClassName = wcex.lpszClassName;\n    }\n    return ret;\n}\n\n\n/**************************************************************************\n *              TrackPopupMenu   (USER.416)\n */\nBOOL16 WINAPI TrackPopupMenu16( HMENU16 hMenu, UINT16 wFlags, INT16 x, INT16 y,\n                                INT16 nReserved, HWND16 hwnd, const RECT16 *lpRect )\n{\n    RECT r;\n    BOOL ret, err;\n    if (lpRect)\n    {\n        r.left   = lpRect->left;\n        r.top    = lpRect->top;\n        r.right  = lpRect->right;\n        r.bottom = lpRect->bottom;\n    }\n    ret = TrackPopupMenu( HMENU_32(hMenu), wFlags | TPM_RETURNCMD, x, y, nReserved,\n                           WIN_Handle32(hwnd), lpRect ? &r : NULL );\n    err = GetLastError() ? FALSE : TRUE;\n    if (ret && !(wFlags & TPM_RETURNCMD))\n    {\n        if (GetExpWinVer16(GetExePtr(GetCurrentTask())) < 0x30a)\n            SendMessage16(hwnd, WM_COMMAND, ret, 0);\n        else\n            PostMessage16(hwnd, WM_COMMAND, ret, 0);\n    }\n    return wFlags & TPM_RETURNCMD ? ret : err;\n}\n\n\n/**************************************************************************\n *              FindWindowEx   (USER.427)\n */\nHWND16 WINAPI FindWindowEx16( HWND16 parent, HWND16 child, LPCSTR className, LPCSTR title )\n{\n    char sbuf[200];\n    char *buf = sbuf;\n    SIZE_T buf_size = sizeof(sbuf) / sizeof(char);\n    HWND child32 = WIN_Handle32(child);\n    HWND parent32 = WIN_Handle32(parent);\n    LPCSTR lcprefix = LOCAL_CLASS_PREFIX;\n    SIZE_T lcprefix_len = strlen(lcprefix);\n    char atomname[256];\n\n    if (!HIWORD(className) && LOWORD(className))\n    {\n        GlobalGetAtomNameA(className, atomname, ARRAYSIZE(atomname));\n        className = atomname;\n    }\n    else if (className && !strcmp(className, \"PROGMAN\"))\n    {\n        parent32 = HWND_MESSAGE;\n        className = \"PROGMAN16\";\n    }\n\n    while (TRUE)\n    {\n        child32 = FindWindowExA(parent32, child32, NULL, title);\n        if (!child32)\n            break;\n        if (!className)\n            break;\n        int classname_len = 0;\n        while (TRUE)\n        {\n            classname_len = GetClassNameA(child32, buf, buf_size);\n            if (!classname_len)\n            {\n                if (buf_size != 0)\n                {\n                    sbuf[0] = '\\0';\n                }\n                break;\n            }\n            //truncated\n            if (classname_len == buf_size - 1)\n            {\n                LPVOID heap;\n                if (buf != sbuf)\n                {\n                    heap = HeapReAlloc(GetProcessHeap(), 0, buf, buf_size * 2);\n                }\n                else\n                {\n                    heap = HeapAlloc(GetProcessHeap(), 0, buf_size * 2);\n                }\n                if (!heap)\n                    break;\n                buf = (LPCSTR)heap;\n                buf_size *= 2;\n                continue;\n            }\n            break;\n        }\n        if (classname_len <= lcprefix_len)\n        {\n            if (!strcmpi(sbuf, className))\n            {\n                break;\n            }\n            continue;\n        }\n        //is win16 local class\n        if (!memicmp(sbuf, LOCAL_CLASS_PREFIX, lcprefix_len))\n        {\n            LPCSTR win16cls = win16classname(sbuf);\n            if (!strcmpi(win16cls, className))\n            {\n                break;\n            }\n        }\n        if (!strcmpi(sbuf, className))\n        {\n            break;\n        }\n    }\n    if (buf != sbuf)\n    {\n        HeapFree(GetProcessHeap(), 0, buf);\n    }\n    return HWND_16(child32);\n}\n\n\nLRESULT def_frame_proc_callback(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *result, void *arg)\n{\n    DWORD count;\n    HANDLE yevent = kernel_get_thread_data()->yield_event;\n    if (!yevent)\n        ReleaseThunkLock(&count);\n    if (hwnd == (HWND)arg)\n        arg = NULL;\n    *result = DefFrameProcA(hwnd, (HWND)arg, msg, wp, lp);\n    if (!yevent)\n        RestoreThunkLock(count);\n    return *result;\n}\n/***********************************************************************\n *\t\tDefFrameProc (USER.445)\n */\nLRESULT WINAPI DefFrameProc16( HWND16 hwnd, HWND16 hwndMDIClient,\n                               UINT16 message, WPARAM16 wParam, LPARAM lParam )\n{\n    switch (message)\n    {\n    case WM_SETTEXT:\n        lParam = (LPARAM)MapSL(lParam);\n        /* fall through */\n    case WM_COMMAND:\n    case WM_SETFOCUS:\n    case WM_SIZE:\n        return DefFrameProcA( WIN_Handle32(hwnd), WIN_Handle32(hwndMDIClient),\n                              message, wParam, lParam );\n\tcase WM_NCACTIVATE:\n\t\treturn DefFrameProcA(WIN_Handle32(hwnd), WIN_Handle32(hwndMDIClient),\n\t\t\tmessage, wParam, HRGN_32(lParam));\n\n    case WM_NEXTMENU:\n        {\n            MDINEXTMENU next_menu;\n            DefFrameProcW( WIN_Handle32(hwnd), WIN_Handle32(hwndMDIClient),\n                           message, wParam, (LPARAM)&next_menu );\n            return MAKELONG( HMENU_16(next_menu.hmenuNext), HWND_16(next_menu.hwndNext) );\n        }\n    default:\n    {\n        LRESULT result;\n        WINPROC_CallProc16To32A(def_frame_proc_callback, hwnd, message, wParam, lParam, &result, HWND_32(hwndMDIClient));\n        return result;\n    }\n    }\n}\n\n/***********************************************************************\n *\t\tDefMDIChildProc (USER.447)\n */\nLRESULT WINAPI DefMDIChildProc16( HWND16 hwnd, UINT16 message,\n                                  WPARAM16 wParam, LPARAM lParam )\n{\n    LRESULT ret;\n    DWORD count;\n    switch (message)\n    {\n    case WM_SETTEXT:\n        lParam = (LPARAM)MapSL(lParam);\n        break;\n\n    case WM_SETFOCUS:\n        wParam = HWND_32(wParam);\n        break;\n\n    case WM_MENUCHAR:\n    case WM_CLOSE:\n    case WM_CHILDACTIVATE:\n    case WM_SYSCOMMAND:\n    case WM_SETVISIBLE:\n    case WM_SIZE:\n    case WM_SYSCHAR:\n        break;\n\n    case WM_GETMINMAXINFO:\n        {\n            MINMAXINFO16 *mmi16 = MapSL(lParam);\n            MINMAXINFO mmi;\n\n            mmi.ptReserved.x     = mmi16->ptReserved.x;\n            mmi.ptReserved.y     = mmi16->ptReserved.y;\n            mmi.ptMaxSize.x      = mmi16->ptMaxSize.x;\n            mmi.ptMaxSize.y      = mmi16->ptMaxSize.y;\n            mmi.ptMaxPosition.x  = mmi16->ptMaxPosition.x;\n            mmi.ptMaxPosition.y  = mmi16->ptMaxPosition.y;\n            mmi.ptMinTrackSize.x = mmi16->ptMinTrackSize.x;\n            mmi.ptMinTrackSize.y = mmi16->ptMinTrackSize.y;\n            mmi.ptMaxTrackSize.x = mmi16->ptMaxTrackSize.x;\n            mmi.ptMaxTrackSize.y = mmi16->ptMaxTrackSize.y;\n\n            ReleaseThunkLock(&count);\n            DefMDIChildProcA(HWND_32(hwnd), message, wParam, (LPARAM)&mmi);\n            RestoreThunkLock(count);\n\n            mmi16->ptReserved.x     = mmi.ptReserved.x;\n            mmi16->ptReserved.y     = mmi.ptReserved.y;\n            mmi16->ptMaxSize.x      = mmi.ptMaxSize.x;\n            mmi16->ptMaxSize.y      = mmi.ptMaxSize.y;\n            mmi16->ptMaxPosition.x  = mmi.ptMaxPosition.x;\n            mmi16->ptMaxPosition.y  = mmi.ptMaxPosition.y;\n            mmi16->ptMinTrackSize.x = mmi.ptMinTrackSize.x;\n            mmi16->ptMinTrackSize.y = mmi.ptMinTrackSize.y;\n            mmi16->ptMaxTrackSize.x = mmi.ptMaxTrackSize.x;\n            mmi16->ptMaxTrackSize.y = mmi.ptMaxTrackSize.y;\n            return 0;\n        }\n    case WM_NEXTMENU:\n        {\n            MDINEXTMENU next_menu;\n            ReleaseThunkLock(&count);\n            DefMDIChildProcA(HWND_32(hwnd), message, wParam, (LPARAM)&next_menu);\n            RestoreThunkLock(count);\n            return MAKELONG( HMENU_16(next_menu.hmenuNext), HWND_16(next_menu.hwndNext) );\n        }\n    default:\n        return DefWindowProc16(hwnd, message, wParam, lParam);\n    }\n    ReleaseThunkLock(&count);\n    ret = DefMDIChildProcA(HWND_32(hwnd), message, wParam, lParam);\n    RestoreThunkLock(count);\n    return ret;\n}\n\n\n/**************************************************************************\n *              DrawAnimatedRects   (USER.448)\n */\nBOOL16 WINAPI DrawAnimatedRects16( HWND16 hwnd, INT16 idAni,\n                                   const RECT16* lprcFrom, const RECT16* lprcTo )\n{\n    RECT rcFrom32, rcTo32;\n    rcFrom32.left   = lprcFrom->left;\n    rcFrom32.top    = lprcFrom->top;\n    rcFrom32.right  = lprcFrom->right;\n    rcFrom32.bottom = lprcFrom->bottom;\n    rcTo32.left     = lprcTo->left;\n    rcTo32.top      = lprcTo->top;\n    rcTo32.right    = lprcTo->right;\n    rcTo32.bottom   = lprcTo->bottom;\n    return DrawAnimatedRects( WIN_Handle32(hwnd), idAni, &rcFrom32, &rcTo32 );\n}\n\n/***********************************************************************\n *\t\tCreateWindowEx (USER.452)\n */\nHWND16 WINAPI CreateWindowEx16( DWORD exStyle, LPCSTR className,\n                                LPCSTR windowName, DWORD style, INT16 x,\n                                INT16 y, INT16 width, INT16 height,\n                                HWND16 parent, HMENU16 menu,\n                                HINSTANCE16 instance, LPVOID data )\n{\n    CREATESTRUCTA cs;\n    char buffer[256];\n    HWND hwnd;\n    BOOL release = FALSE;\n    DWORD count;\n\n    if (instance == NULL)\n    {\n        HTASK16 task = GetCurrentTask();\n        TDB *tdb = GlobalLock16(task);\n        instance = tdb->hInstance;\n        GlobalUnlock16(task);\n    }\n\n    /* Fix the coordinates */\n\n    cs.x  = (x == CW_USEDEFAULT16) ? CW_USEDEFAULT : (INT)x;\n    cs.y  = (y == CW_USEDEFAULT16) ? CW_USEDEFAULT : (INT)y;\n    cs.cx = (width == CW_USEDEFAULT16) ? CW_USEDEFAULT : (INT)width;\n    cs.cy = (height == CW_USEDEFAULT16) ? CW_USEDEFAULT : (INT)height;\n\n    if (!(style & (WS_POPUP | WS_CHILD)))\n        style |= WS_CAPTION;\n\n    // make windows 1.0 programs appear in a usable window\n    if ((GetExpWinVer16(GetExePtr(GetCurrentTask())) < 0x201) && !(style & WS_CHILD))\n    {\n        if (!cs.cx || !cs.cy)\n        {\n            cs.x = CW_USEDEFAULT;\n            cs.y = CW_USEDEFAULT;\n            cs.cx = CW_USEDEFAULT;\n            cs.cy = CW_USEDEFAULT;\n        }\n        if ((style & (WS_CAPTION | WS_SIZEBOX)) == (WS_CAPTION | WS_SIZEBOX))\n            style |= WS_MINIMIZEBOX | WS_MAXIMIZEBOX;\n    }\n\n    // work around WS_EX_WINDOWEDGE 3.10 compat breakage in Windows 11 24H2\n    // must be done after create because otherwise both windowedge and staticedge get set\n    // even though they are supposed to be mutually exclusive\n    if (get_windows_build() >= 26100)\n    {\n        if (((style & (WS_CAPTION | WS_SIZEBOX)) == WS_CAPTION) && !(style & WS_CHILD) && !(exStyle & (WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE)) &&\n            (GetExpWinVer16(GetExePtr(GetCurrentTask())) < 0x400))\n            exStyle |= WS_EX_STATICEDGE;\n    }\n\n    /* Create the window */\n\n    cs.lpCreateParams = data;\n    cs.hInstance      = HINSTANCE_32(instance);\n    cs.hMenu          = menu;\n\t\n    cs.hwndParent     = WIN_Handle32( parent );\n    cs.style          = style;\n    cs.lpszName       = windowName;\n    cs.lpszClass      = className;\n    cs.dwExStyle      = exStyle;\n\n    if (cs.hwndParent && IsWindow(cs.hwndParent))\n    {\n        HTASK16 parenttask = GetWindowTask16(parent);\n        if (parenttask != 0 && parenttask != GetCurrentTask())\n        {\n            TRACE(\"GetWindowTask16(parent) != GetCurrentTask()\\n\");\n            release = TRUE;\n        }\n    }\n\n    cs.lpszClass = win32classname(cs.hInstance, cs.lpszClass);\n    if (!IS_INTRESOURCE(cs.lpszClass))\n    {\n    }\n    else\n    {\n        if (!GlobalGetAtomNameA(LOWORD(className), buffer, sizeof(buffer))) return 0;\n        cs.lpszClass = buffer;\n        cs.lpszClass = win32classname(cs.hInstance, cs.lpszClass);\n    }\n    /* load the menu */\n    if (!menu && !is_win_menu_disallowed(style))\n    {\n        WNDCLASSA class;\n        HINSTANCE16 module = GetExePtr( instance );\n\n        if (GetClassInfoA( HINSTANCE_32(module), cs.lpszClass, &class ))\n            cs.hMenu = HMENU_32( LoadMenu16( module, class.lpszMenuName ));\n    }\n    else if (!is_win_menu_disallowed(style))\n    {\n        cs.hMenu = HMENU_32(menu);\n    }\n\n    if (release)\n    {\n        ReleaseThunkLock(&count);\n    }\n    hwnd = create_window16((CREATESTRUCTW *)&cs, (LPCWSTR)cs.lpszClass, HINSTANCE_32(instance), FALSE);\n    if (release)\n    {\n        RestoreThunkLock(count);\n    }\n    if (hwnd == NULL)\n    {\n        ERR(\"Could not create window(%08x,\\\"%s\\\"(\\\"%s\\\"),\\\"%s\\\",%08x,%04x,%04x,%04x,%04x,%04x,%04x,%04x,%08x)\\n\", exStyle, IS_INTRESOURCE(className) ? \"(ATOM)\" : className, cs.lpszClass, windowName, style, x, y, width, height, parent, menu, instance, data);\n        return NULL;\n    }\n\n    HWND16 hWnd16 = HWND_16(hwnd);\n\tInitWndProc16(hwnd, hWnd16);\n    SetWindowHInst16(hWnd16, instance);\n    if (!GetWindowHMenu16(hWnd16))\n        SetWindowHMenu16(hWnd16, menu);\n    return hWnd16;\n}\nvoid InitWndProc16(HWND hWnd, HWND16 hWnd16)\n{\n\tATOM classatom = GetClassLongA(hWnd, GCW_ATOM);//WNDPROC16\n\tif (classatom && !GetWndProc16(hWnd16))\n\t{\n\t\tSetWndProc16(hWnd16, WNDCLASS16Info[classatom].wndproc);\n\t}\n}\n\n\n/***********************************************************************\n *\t\tGetInternalWindowPos (USER.460)\n */\nUINT16 WINAPI GetInternalWindowPos16( HWND16 hwnd, LPRECT16 rectWnd, LPPOINT16 ptIcon )\n{\n    WINDOWPLACEMENT16 wndpl;\n\n    if (!GetWindowPlacement16( hwnd, &wndpl )) return 0;\n    if (rectWnd) *rectWnd = wndpl.rcNormalPosition;\n    if (ptIcon)  *ptIcon = wndpl.ptMinPosition;\n    return wndpl.showCmd;\n}\n\n\n/**************************************************************************\n *              SetInternalWindowPos   (USER.461)\n */\nvoid WINAPI SetInternalWindowPos16( HWND16 hwnd, UINT16 showCmd, LPRECT16 rect, LPPOINT16 pt )\n{\n    RECT rc32;\n    POINT pt32;\n\n    if (rect)\n    {\n        rc32.left   = rect->left;\n        rc32.top    = rect->top;\n        rc32.right  = rect->right;\n        rc32.bottom = rect->bottom;\n    }\n    if (pt)\n    {\n        pt32.x = pt->x;\n        pt32.y = pt->y;\n    }\n    SetInternalWindowPos( WIN_Handle32(hwnd), showCmd,\n                          rect ? &rc32 : NULL, pt ? &pt32 : NULL );\n}\n\n\n/**************************************************************************\n *              CalcChildScroll   (USER.462)\n */\nvoid WINAPI CalcChildScroll16( HWND16 hwnd, WORD scroll )\n{\n    CalcChildScroll( WIN_Handle32(hwnd), scroll );\n}\n\n\n/**************************************************************************\n *              ScrollChildren   (USER.463)\n */\nvoid WINAPI ScrollChildren16(HWND16 hwnd, UINT16 uMsg, WPARAM16 wParam, LPARAM lParam)\n{\n    ScrollChildren( WIN_Handle32(hwnd), uMsg, wParam, lParam );\n}\n\n\n/**************************************************************************\n *              DragDetect   (USER.465)\n */\nBOOL16 WINAPI DragDetect16( HWND16 hwnd, POINT16 pt )\n{\n    POINT pt32;\n\n    pt32.x = pt.x;\n    pt32.y = pt.y;\n    return DragDetect( WIN_Handle32(hwnd), pt32 );\n}\n\n\n/**************************************************************************\n *              SetScrollInfo   (USER.475)\n */\nINT16 WINAPI SetScrollInfo16( HWND16 hwnd, INT16 nBar, const SCROLLINFO *info, BOOL16 redraw )\n{\n    return SetScrollInfo( WIN_Handle32(hwnd), nBar, info, redraw );\n}\n\n\n/**************************************************************************\n *              GetScrollInfo   (USER.476)\n */\nBOOL16 WINAPI GetScrollInfo16( HWND16 hwnd, INT16 nBar, LPSCROLLINFO info )\n{\n    return GetScrollInfo( WIN_Handle32(hwnd), nBar, info );\n}\n\n\n/**************************************************************************\n *              EnableScrollBar   (USER.482)\n */\nBOOL16 WINAPI EnableScrollBar16( HWND16 hwnd, INT16 nBar, UINT16 flags )\n{\n    return EnableScrollBar( WIN_Handle32(hwnd), nBar, flags );\n}\n\n\n/**************************************************************************\n *              GetShellWindow   (USER.600)\n */\nHWND16 WINAPI GetShellWindow16(void)\n{\n    return HWND_16( GetShellWindow() );\n}\n\n\n/**************************************************************************\n *              GetForegroundWindow   (USER.608)\n */\nHWND16 WINAPI GetForegroundWindow16(void)\n{\n    return HWND_16( GetForegroundWindow() );\n}\n\n\n/**************************************************************************\n *              SetForegroundWindow   (USER.609)\n */\nBOOL16 WINAPI SetForegroundWindow16( HWND16 hwnd )\n{\n    return SetForegroundWindow( WIN_Handle32(hwnd) );\n}\n\n\n/**************************************************************************\n *              DrawCaptionTemp   (USER.657)\n */\nBOOL16 WINAPI DrawCaptionTemp16( HWND16 hwnd, HDC16 hdc, const RECT16 *rect,\n                                 HFONT16 hFont, HICON16 hIcon, LPCSTR str, UINT16 uFlags )\n{\n    RECT rect32;\n\n    if (rect)\n    {\n        rect32.left   = rect->left;\n        rect32.top    = rect->top;\n        rect32.right  = rect->right;\n        rect32.bottom = rect->bottom;\n    }\n    return DrawCaptionTempA( WIN_Handle32(hwnd), HDC_32(hdc),\n\t\t\t     rect ? &rect32 : NULL, HFONT_32(hFont),\n\t\t\t     get_icon_32(hIcon), str, uFlags & 0x1f );\n}\n\n\n/**************************************************************************\n *              DrawCaption   (USER.660)\n */\nBOOL16 WINAPI DrawCaption16( HWND16 hwnd, HDC16 hdc, const RECT16 *rect, UINT16 flags )\n{\n    RECT rect32;\n\n    if (rect)\n    {\n        rect32.left   = rect->left;\n        rect32.top    = rect->top;\n        rect32.right  = rect->right;\n        rect32.bottom = rect->bottom;\n    }\n    return DrawCaption(WIN_Handle32(hwnd), HDC_32(hdc), rect ? &rect32 : NULL, flags);\n}\n\n\n/**************************************************************************\n *              GetMenuItemRect   (USER.665)\n */\nBOOL16 WINAPI GetMenuItemRect16( HWND16 hwnd, HMENU16 hMenu, UINT16 uItem,\n                                 LPRECT16 rect)\n{\n     RECT r32;\n     BOOL res;\n     if (!rect) return FALSE;\n     res = GetMenuItemRect( WIN_Handle32(hwnd), HMENU_32(hMenu), uItem, &r32 );\n     rect->left   = r32.left;\n     rect->top    = r32.top;\n     rect->right  = r32.right;\n     rect->bottom = r32.bottom;\n     return res;\n}\n\n\n/**************************************************************************\n *              SetWindowRgn   (USER.668)\n */\nINT16 WINAPI SetWindowRgn16( HWND16 hwnd, HRGN16 hrgn, BOOL16 redraw )\n{\n    return SetWindowRgn( WIN_Handle32(hwnd), HRGN_32(hrgn), redraw );\n}\n\n\n/**************************************************************************\n *              MessageBoxIndirect   (USER.827)\n */\nINT16 WINAPI MessageBoxIndirect16( LPMSGBOXPARAMS16 msgbox )\n{\n    char caption[256], text[256];\n    MSGBOXPARAMSA msgbox32;\n\n    msgbox32.cbSize             = msgbox->cbSize;\n    msgbox32.hwndOwner          = WIN_Handle32( msgbox->hwndOwner );\n    msgbox32.hInstance          = 0;\n    msgbox32.dwStyle            = msgbox->dwStyle;\n    msgbox32.lpszIcon           = NULL;\n    msgbox32.dwContextHelpId    = msgbox->dwContextHelpId;\n    msgbox32.lpfnMsgBoxCallback = msgbox->lpfnMsgBoxCallback;\n    msgbox32.dwLanguageId       = msgbox->dwLanguageId;\n\n    if (!HIWORD(msgbox->lpszCaption))\n    {\n        LoadString16( msgbox->hInstance, LOWORD(msgbox->lpszCaption), caption, sizeof(caption) );\n        msgbox32.lpszCaption = caption;\n    }\n    else msgbox32.lpszCaption = MapSL(msgbox->lpszCaption);\n\n    if (!HIWORD(msgbox->lpszText))\n    {\n        LoadString16( msgbox->hInstance, LOWORD(msgbox->lpszText), text, sizeof(text) );\n        msgbox32.lpszText = text;\n    }\n    else msgbox32.lpszText = MapSL(msgbox->lpszText);\n\n    if ((msgbox->dwStyle & MB_ICONMASK) == MB_USERICON)\n    {\n        FIXME( \"user icon %s not supported\\n\", debugstr_a( MapSL(msgbox->lpszIcon) ));\n        msgbox32.dwStyle &= ~MB_USERICON;\n    }\n\n    return MessageBoxIndirectA( &msgbox32 );\n}\n"
  },
  {
    "path": "user/winhelp.c",
    "content": "#include \"config.h\"\n\n#include <stdlib.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <string.h>\n/* offsetof */\n#include <stddef.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#include \"wine/debug.h\"\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n#include \"winnls.h\"\n#include <WowNT32.h>\n#include \"wine/winuser16.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(win);\n/*\n*  ReactOS kernel\n*  Copyright (C) 1998, 1999, 2000, 2001, 2002 ReactOS Team\n*\n*  This program is free software; you can redistribute it and/or modify\n*  it under the terms of the GNU General Public License as published by\n*  the Free Software Foundation; either version 2 of the License, or\n*  (at your option) any later version.\n*\n*  This program is distributed in the hope that it will be useful,\n*  but WITHOUT ANY WARRANTY; without even the implied warranty of\n*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n*  GNU General Public License for more details.\n*\n*  You should have received a copy of the GNU General Public License\n*  along with this program; if not, write to the Free Software\n*  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n*/\n/*\n* PROJECT:         ReactOS user32.dll\n* FILE:            win32ss/user/user32/misc/winhelp.c\n* PURPOSE:         WinHelp\n* PROGRAMMER:      Robert Dickenson(robd@reactos.org)\n* UPDATE HISTORY:\n*      23-08-2002  RDD  Created from wine sources\n*/\n\n\n/* WinHelp internal structure */\ntypedef struct\n{\n    WORD size;\n    WORD command;\n    LONG data;\n    LONG reserved;\n    WORD ofsFilename;\n    WORD ofsData;\n} WINHELP, *LPWINHELP;\n\ntypedef struct {\n    WORD   mkSize;\n    CHAR   mkKeylist;\n    CHAR   szKeyphrase[1];\n} MULTIKEYHELP16, *PMULTIKEYHELP16, *LPMULTIKEYHELP16;\ntypedef struct {\n    INT16  wStructSize;\n    INT16  x;\n    INT16  y;\n    INT16  dx;\n    INT16  dy;\n    INT16  wMax;\n    CHAR   rgchMember[2];\n} HELPWININFO16, *PHELPWININFO16, *LPHELPWININFO16;\n//16bit WINHELP.EXE\nHWND16 WINAPI FindWindow16(LPCSTR className, LPCSTR title);\nBOOL\nWINAPI\nwine_WinHelp16A(HWND16 hWnd, LPCSTR lpszHelp, UINT uCommand, DWORD_PTR dwData, BOOL *success_exec)\n{\n    static WORD WM_WINHELP = 0;\n    HWND hDest;\n    LPWINHELP lpwh;\n    HGLOBAL16 hwh;\n    int size, dsize, nlen;\n    DWORD mutex_count;\n    *success_exec = FALSE;\n\n    if (!WM_WINHELP) {\n        WM_WINHELP = RegisterWindowMessageA(\"WM_WINHELP\");\n        if (!WM_WINHELP)\n            return FALSE;\n    }\n\n    hDest = HWND_32(FindWindow16(\"MS_WINHELP\", NULL));\n    if (!hDest) {\n        if (uCommand == HELP_QUIT)\n        {\n            *success_exec = TRUE;\n            return TRUE;\n        }\n        ReleaseThunkLock(&mutex_count);\n        if (WinExec16(\"winhelp.exe -x\", SW_SHOWNORMAL) < 32) {\n            RestoreThunkLock(mutex_count);\n            ERR(\"can't start winhelp.exe -x ?\\n\");\n            return FALSE;\n        }\n        RestoreThunkLock(mutex_count);\n        //sleep 100ms~2000ms...\n        for (int i = 0; i < 20; i++)\n        {\n            hDest = HWND_32(FindWindow16(\"MS_WINHELP\", NULL));\n            if (hDest)\n                break;\n            Sleep(100);\n        }\n        if (!hDest) {\n            FIXME(\"did not find MS_WINHELP\\n\");\n            return FALSE;\n        }\n    }\n    *success_exec = TRUE;\n    switch (uCommand) {\n    case HELP_CONTEXT:\n    case HELP_SETCONTENTS:\n    case HELP_CONTENTS:\n    case HELP_CONTEXTPOPUP:\n    case HELP_FORCEFILE:\n    case HELP_HELPONHELP:\n    case HELP_FINDER:\n    case HELP_QUIT:\n        dsize = 0;\n        break;\n    case HELP_KEY:\n    case HELP_PARTIALKEY:\n    case HELP_COMMAND:\n        dsize = dwData ? strlen((LPSTR)dwData) + 1 : 0;\n        break;\n    case HELP_MULTIKEY:\n        dsize = ((LPMULTIKEYHELP16)dwData)->mkSize;\n        break;\n    case HELP_SETWINPOS:\n        dsize = ((LPHELPWININFO16)dwData)->wStructSize;\n        break;\n    default:\n        FIXME(\"Unknown help command %d\\n\",uCommand);\n        return FALSE;\n    }\n    if (lpszHelp)\n        nlen = strlen(lpszHelp) + 1;\n    else\n        nlen = 0;\n    size = sizeof(WINHELP) + nlen + dsize;\n    hwh = GlobalAlloc16(0, size);\n    if (hwh == NULL)\n        return FALSE;\n    lpwh = GlobalLock16(hwh);\n    lpwh->size = size;\n    lpwh->command = uCommand;\n    lpwh->data = dwData;\n    if (nlen) {\n        strcpy(((char*)lpwh) + sizeof(WINHELP), lpszHelp);\n        lpwh->ofsFilename = sizeof(WINHELP);\n    }\n    else {\n        lpwh->ofsFilename = 0;\n    }\n    if (dsize) {\n        memcpy(((char*)lpwh) + sizeof(WINHELP) + nlen, (LPSTR)dwData, dsize);\n        lpwh->ofsData = sizeof(WINHELP) + nlen;\n    }\n    else {\n        lpwh->ofsData = 0;\n    }\n    GlobalUnlock16(hwh);\n    ReleaseThunkLock(&mutex_count);\n    LRESULT result = SendMessageA(hDest, WM_WINHELP, (WPARAM)hWnd, (LPARAM)hwh);\n    RestoreThunkLock(mutex_count);\n    if (!result)\n    {\n        //failure\n        //maybe winhlp32 launcher?\n        GlobalFree16(hwh);\n        *success_exec = FALSE;\n    }\n    return result;\n}\n\n/* WinHelp internal structure */\ntypedef struct\n{\n    WORD size;\n    WORD command;\n    LONG data;\n    LONG reserved;\n    WORD ofsFilename;\n    WORD ofsData;\n    WORD ofsPath;\n} WINEHELP, *LPWINEHELP;\n\n/* magic number for this message:\n*  aide means help is French ;-)\n*  SOS means ???\n*/\n#define WINHELP_MAGIC   0xA1DE505\n\n/**********************************************************************\n*\t\tWinHelpA (USER32.@)\n*/\nBOOL WINAPI wine_WinHelp32A(HWND hWnd, LPCSTR lpHelpFile, UINT wCommand, ULONG_PTR dwData, BOOL *success_exec)\n{\n    COPYDATASTRUCT      cds;\n    HWND                hDest;\n    int                 size, dsize, nlen, plen;\n    char                path[MAX_PATH];\n    char*               pathend;\n    WINEHELP*           lpwh;\n    LRESULT             ret;\n    DWORD mutex_count;\n\n    hDest = FindWindowA(\"MS_WINHELP\", NULL);\n    *success_exec = FALSE;\n    if (!hDest)\n    {\n        if (wCommand == HELP_QUIT)\n        {\n            *success_exec = TRUE;\n            return TRUE;\n        }\n        ReleaseThunkLock(&mutex_count);\n        if (WinExec16(\"winhlp32.exe -x\", SW_SHOWNORMAL) < 32)\n        {\n            RestoreThunkLock(mutex_count);\n            ERR(\"can't start winhlp32.exe -x ?\\n\");\n            return FALSE;\n        }\n        RestoreThunkLock(mutex_count);\n        //sleep 100ms~2000ms...\n        for (int i = 0; i < 20; i++)\n        {\n            hDest = FindWindowA(\"MS_WINHELP\", NULL);\n            if (hDest)\n                break;\n            Sleep(100);\n        }\n        if (!(hDest = FindWindowA(\"MS_WINHELP\", NULL)))\n        {\n            FIXME(\"Did not find a MS_WINHELP Window\\n\");\n            return FALSE;\n        }\n    }\n    *success_exec = TRUE;\n    MULTIKEYHELPA *multikey32 = NULL;\n    HELPWININFOA info32;\n    switch (wCommand)\n    {\n    case HELP_CONTEXT:\n    case HELP_SETCONTENTS:\n    case HELP_CONTENTS:\n    case HELP_CONTEXTPOPUP:\n    case HELP_FORCEFILE:\n    case HELP_HELPONHELP:\n    case HELP_FINDER:\n    case HELP_QUIT:\n        dsize = 0;\n        break;\n    case HELP_KEY:\n    case HELP_PARTIALKEY:\n    case HELP_COMMAND:\n        dsize = dwData ? strlen((LPSTR)dwData) + 1 : 0;\n        break;\n    case HELP_MULTIKEY:\n    {\n        //this conversion is not tested.\n        MESSAGE(\"HELP_MULTIKEY\\n\");\n        LPMULTIKEYHELP16 multikey16 = (LPMULTIKEYHELP16)dwData;\n        size = multikey16->mkSize + (sizeof(MULTIKEYHELPA) - sizeof(MULTIKEYHELP16));\n        multikey32 = HeapAlloc(GetProcessHeap(), 0, size);\n        multikey32->mkKeylist = multikey16->mkKeylist;\n        multikey32->mkSize = size;\n        memcpy(&multikey32->szKeyphrase, multikey16->szKeyphrase, multikey16->mkSize - offsetof(MULTIKEYHELP16, szKeyphrase));\n        dwData = multikey32;\n        dsize = size;\n    }\n    break;\n    case HELP_SETWINPOS:\n    {\n        //this conversion is not tested.\n        MESSAGE(\"HELP_SETWINPOS\\n\");\n        LPHELPWININFO16 info16 = (LPHELPWININFO16)dwData;\n        info32.dx = info16->dx;\n        info32.dy = info16->dy;\n        info32.x = info16->x;\n        info32.y = info16->y;\n        info32.wStructSize = info16->wStructSize - (sizeof(HELPWININFOA) - sizeof(HELPWININFO16));\n        info32.rgchMember[0] = info16->rgchMember[0];\n        info32.rgchMember[2] = info16->rgchMember[1];\n        dwData = &info32;\n        dsize = ((LPHELPWININFOA)dwData)->wStructSize;\n    }\n    break;\n    default:\n        FIXME(\"Unknown help command %d\\n\", wCommand);\n        return FALSE;\n    }\n    if (lpHelpFile)\n    {\n        GetModuleFileName16(NULL, path, MAX_PATH);\n        pathend = strrchr(path, '\\\\');\n        if (pathend)\n        {\n            *pathend = '\\0';\n            plen = strlen(path) + 1;\n        }\n        else\n            plen = 0;\n        nlen = strlen(lpHelpFile) + 1;\n    }\n    else\n    {\n        plen = 0;\n        nlen = 0;\n    }\n    size = sizeof(WINEHELP) + nlen + dsize + plen;\n\n    lpwh = HeapAlloc(GetProcessHeap(), 0, size);\n    if (!lpwh) return FALSE;\n\n    cds.dwData = WINHELP_MAGIC;\n    cds.cbData = size;\n    cds.lpData = (void*)lpwh;\n\n    lpwh->size = size;\n    lpwh->command = wCommand;\n    lpwh->data = dwData;\n    if (nlen)\n    {\n        strcpy(((char*)lpwh) + sizeof(WINEHELP), lpHelpFile);\n        lpwh->ofsFilename = sizeof(WINEHELP);\n    }\n    else\n        lpwh->ofsFilename = 0;\n    if (dsize)\n    {\n        memcpy(((char*)lpwh) + sizeof(WINEHELP) + nlen, (LPSTR)dwData, dsize);\n        lpwh->ofsData = sizeof(WINEHELP) + nlen;\n    }\n    else\n        lpwh->ofsData = 0;\n    if (plen)\n    {\n        strcpy(((char*)lpwh) + sizeof(WINEHELP) + nlen + dsize, path);\n        lpwh->ofsPath = sizeof(WINEHELP) + nlen + dsize;\n    }\n    else\n        lpwh->ofsPath = 0;\n    TRACE(\"Sending[%u]: cmd=%u data=%08x fn=%s\\n\",\n        lpwh->size, lpwh->command, lpwh->data,\n        lpwh->ofsFilename ? (LPSTR)lpwh + lpwh->ofsFilename : \"\");\n\n    ReleaseThunkLock(&mutex_count);\n    ret = SendMessageA(hDest, WM_COPYDATA, (WPARAM)hWnd, (LPARAM)&cds);\n    RestoreThunkLock(mutex_count);\n    HeapFree(GetProcessHeap(), 0, lpwh);\n    if (multikey32)\n        HeapFree(GetProcessHeap(), 0, multikey32);\n    return ret;\n}\n\n"
  },
  {
    "path": "ver/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(ver SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/ver.def ver.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(ver.dll16 ver)\ntarget_link_libraries(ver libwine winecrt0 krnl386 version.lib)\nset_target_properties(ver PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "ver/Makefile.in",
    "content": "MODULE    = ver.dll16\nIMPORTS   = version lz32\n\nEXTRADLLFLAGS = -m16 -Wb,--main-module,version.dll\n\nC_SRCS = version.c\n"
  },
  {
    "path": "ver/ver.def",
    "content": "; File generated automatically from ..\\ver\\ver.dll16.spec; do not edit!\n\nLIBRARY ver.dll16\n\nEXPORTS\n  _wine_spec_dos_header;=.L__wine_spec_dos_header @1 DATA PRIVATE\n"
  },
  {
    "path": "ver/ver.dll16.spec",
    "content": "#1 DLLENTRYPOINT\n2 pascal GetFileResourceSize(str str str ptr) GetFileResourceSize16\n3 pascal GetFileResource(str str str long long ptr) GetFileResource16\n6 pascal GetFileVersionInfoSize(str ptr) GetFileVersionInfoSize16\n7 pascal GetFileVersionInfo(str long long ptr) GetFileVersionInfo16\n8 pascal VerFindFile(word str str str ptr ptr ptr ptr) VerFindFile16\n9 pascal VerInstallFile(word str str str str str ptr ptr) VerInstallFile16\n10 pascal VerLanguageName(word ptr word) VerLanguageName16\n11 pascal VerQueryValue(segptr str ptr ptr) VerQueryValue16\n20 stub GETFILEVERSIONINFORAW\n#21 VERFTHK_THUNKDATA16\n#22 VERTHKSL_THUNKDATA16\n"
  },
  {
    "path": "ver/ver.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>ver</RootNamespace>\n    <ProjectGuid>{7C04956D-FEBE-410F-ABB1-945695CDDFE5}</ProjectGuid>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nversion.lib;lz32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\nver.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\nver.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nversion.lib;lz32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"version.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"ver.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"ver.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" VER &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" VER &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"ver.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "ver/version.c",
    "content": "/*\n * Implementation of VER.DLL\n *\n * Copyright 1996, 1997 Marcus Meissner\n * Copyright 1997 David Cuthbert\n * Copyright 1999 Ulrich Weigand\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#define NONAMELESSUNION\n#define NONAMELESSSTRUCT\n#include <stdarg.h>\n#include <stdlib.h>\n#include <string.h>\n#include <sys/types.h>\n\n#include \"windef.h\"\n#include \"wine/winbase16.h\"\n#include \"winuser.h\"\n#include \"winver.h\"\n#include \"lzexpand.h\"\n#include \"wine/unicode.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(ver);\n\n#ifndef SEEK_SET\n#define SEEK_SET   0\n#define SEEK_CUR   1\n#define SEEK_END   2\n#endif\n\n#ifdef _MSC_VER\n#define strncasecmp _strnicmp\n#endif\n/* get dll search path */\nchar *krnl386_get_search_path(void);\n\n/**********************************************************************\n *  find_entry_by_id\n *\n * Find an entry by id in a resource directory\n * Copied from loader/pe_resource.c\n */\nstatic const IMAGE_RESOURCE_DIRECTORY *find_entry_by_id( const IMAGE_RESOURCE_DIRECTORY *dir,\n                                                         WORD id, const void *root )\n{\n    const IMAGE_RESOURCE_DIRECTORY_ENTRY *entry;\n    int min, max, pos;\n\n    entry = (const IMAGE_RESOURCE_DIRECTORY_ENTRY *)(dir + 1);\n    min = dir->NumberOfNamedEntries;\n    max = min + dir->NumberOfIdEntries - 1;\n    while (min <= max)\n    {\n        pos = (min + max) / 2;\n        if (entry[pos].u.Id == id)\n            return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry[pos].u2.s2.OffsetToDirectory);\n        if (entry[pos].u.Id > id) max = pos - 1;\n        else min = pos + 1;\n    }\n    return NULL;\n}\n\n\n/**********************************************************************\n *  find_entry_default\n *\n * Find a default entry in a resource directory\n * Copied from loader/pe_resource.c\n */\nstatic const IMAGE_RESOURCE_DIRECTORY *find_entry_default( const IMAGE_RESOURCE_DIRECTORY *dir,\n                                                           const void *root )\n{\n    const IMAGE_RESOURCE_DIRECTORY_ENTRY *entry;\n\n    entry = (const IMAGE_RESOURCE_DIRECTORY_ENTRY *)(dir + 1);\n    return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry->u2.s2.OffsetToDirectory);\n}\n\n\n/**********************************************************************\n *  find_entry_by_name\n *\n * Find an entry by name in a resource directory\n * Copied from loader/pe_resource.c\n */\nstatic const IMAGE_RESOURCE_DIRECTORY *find_entry_by_name( const IMAGE_RESOURCE_DIRECTORY *dir,\n                                                           LPCSTR name, const void *root )\n{\n    const IMAGE_RESOURCE_DIRECTORY *ret = NULL;\n    LPWSTR nameW;\n    DWORD namelen;\n\n    if (!HIWORD(name)) return find_entry_by_id( dir, LOWORD(name), root );\n    if (name[0] == '#')\n    {\n        return find_entry_by_id( dir, atoi(name+1), root );\n    }\n\n    namelen = MultiByteToWideChar( CP_ACP, 0, name, -1, NULL, 0 );\n    if ((nameW = HeapAlloc( GetProcessHeap(), 0, namelen * sizeof(WCHAR) )))\n    {\n        const IMAGE_RESOURCE_DIRECTORY_ENTRY *entry;\n        const IMAGE_RESOURCE_DIR_STRING_U *str;\n        int min, max, res, pos;\n\n        MultiByteToWideChar( CP_ACP, 0, name, -1, nameW, namelen );\n        namelen--;  /* remove terminating null */\n        entry = (const IMAGE_RESOURCE_DIRECTORY_ENTRY *)(dir + 1);\n        min = 0;\n        max = dir->NumberOfNamedEntries - 1;\n        while (min <= max)\n        {\n            pos = (min + max) / 2;\n            str = (const IMAGE_RESOURCE_DIR_STRING_U *)((const char *)root + entry[pos].u.s.NameOffset);\n            res = strncmpiW( nameW, str->NameString, str->Length );\n            if (!res && namelen == str->Length)\n            {\n                ret = (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry[pos].u2.s2.OffsetToDirectory);\n                break;\n            }\n            if (res < 0) max = pos - 1;\n            else min = pos + 1;\n        }\n        HeapFree( GetProcessHeap(), 0, nameW );\n    }\n    return ret;\n}\n\n\n/***********************************************************************\n *           read_xx_header         [internal]\n */\nstatic int read_xx_header( HFILE lzfd )\n{\n    IMAGE_DOS_HEADER mzh;\n    char magic[3];\n\n    LZSeek( lzfd, 0, SEEK_SET );\n    if ( sizeof(mzh) != LZRead( lzfd, (LPSTR)&mzh, sizeof(mzh) ) )\n        return 0;\n    if ( mzh.e_magic != IMAGE_DOS_SIGNATURE )\n        return 0;\n\n    LZSeek( lzfd, mzh.e_lfanew, SEEK_SET );\n    if ( 2 != LZRead( lzfd, magic, 2 ) )\n        return 0;\n\n    LZSeek( lzfd, mzh.e_lfanew, SEEK_SET );\n\n    if ( magic[0] == 'N' && magic[1] == 'E' )\n        return IMAGE_OS2_SIGNATURE;\n    if ( magic[0] == 'P' && magic[1] == 'E' )\n        return IMAGE_NT_SIGNATURE;\n    if ( magic[0] == 'L' && magic[1] == 'E' )\n        return IMAGE_VXD_SIGNATURE;\n\n    magic[2] = '\\0';\n    WARN(\"Can't handle %s files.\\n\", magic );\n    return 0;\n}\n\n/***********************************************************************\n *           find_ne_resource         [internal]\n */\nstatic BOOL find_ne_resource( HFILE lzfd, LPCSTR typeid, LPCSTR resid,\n                                DWORD *resLen, DWORD *resOff )\n{\n    IMAGE_OS2_HEADER nehd;\n    NE_TYPEINFO *typeInfo;\n    NE_NAMEINFO *nameInfo;\n    DWORD nehdoffset;\n    LPBYTE resTab;\n    DWORD resTabSize;\n    int count;\n\n    /* Read in NE header */\n    nehdoffset = LZSeek( lzfd, 0, SEEK_CUR );\n    if ( sizeof(nehd) != LZRead( lzfd, (LPSTR)&nehd, sizeof(nehd) ) ) return FALSE;\n\n    resTabSize = nehd.ne_restab - nehd.ne_rsrctab;\n    if ( !resTabSize )\n    {\n        TRACE(\"No resources in NE dll\\n\" );\n        return FALSE;\n    }\n\n    /* Read in resource table */\n    resTab = HeapAlloc( GetProcessHeap(), 0, resTabSize );\n    if ( !resTab ) return FALSE;\n\n    LZSeek( lzfd, nehd.ne_rsrctab + nehdoffset, SEEK_SET );\n    if ( resTabSize != LZRead( lzfd, (char*)resTab, resTabSize ) )\n    {\n        HeapFree( GetProcessHeap(), 0, resTab );\n        return FALSE;\n    }\n\n    /* Find resource */\n    typeInfo = (NE_TYPEINFO *)(resTab + 2);\n\n    if (HIWORD(typeid) != 0)  /* named type */\n    {\n        BYTE len = strlen( typeid );\n        while (typeInfo->type_id)\n        {\n            if (!(typeInfo->type_id & 0x8000))\n            {\n                BYTE *p = resTab + typeInfo->type_id;\n                if ((*p == len) && !strncasecmp( (char*)p+1, typeid, len )) goto found_type;\n            }\n            typeInfo = (NE_TYPEINFO *)((char *)(typeInfo + 1) +\n                                       typeInfo->count * sizeof(NE_NAMEINFO));\n        }\n    }\n    else  /* numeric type id */\n    {\n        WORD id = LOWORD(typeid) | 0x8000;\n        while (typeInfo->type_id)\n        {\n            if (typeInfo->type_id == id) goto found_type;\n            typeInfo = (NE_TYPEINFO *)((char *)(typeInfo + 1) +\n                                       typeInfo->count * sizeof(NE_NAMEINFO));\n        }\n    }\n    TRACE(\"No typeid entry found for %p\\n\", typeid );\n    HeapFree( GetProcessHeap(), 0, resTab );\n    return FALSE;\n\n found_type:\n    nameInfo = (NE_NAMEINFO *)(typeInfo + 1);\n\n    if (HIWORD(resid) != 0)  /* named resource */\n    {\n        BYTE len = strlen( resid );\n        for (count = typeInfo->count; count > 0; count--, nameInfo++)\n        {\n            BYTE *p = resTab + nameInfo->id;\n            if (nameInfo->id & 0x8000) continue;\n            if ((*p == len) && !strncasecmp( (char*)p+1, resid, len )) goto found_name;\n        }\n    }\n    else  /* numeric resource id */\n    {\n        WORD id = LOWORD(resid) | 0x8000;\n        for (count = typeInfo->count; count > 0; count--, nameInfo++)\n            if (nameInfo->id == id) goto found_name;\n    }\n    TRACE(\"No resid entry found for %p\\n\", typeid );\n    HeapFree( GetProcessHeap(), 0, resTab );\n    return FALSE;\n\n found_name:\n    /* Return resource data */\n    if ( resLen ) *resLen = nameInfo->length << *(WORD *)resTab;\n    if ( resOff ) *resOff = nameInfo->offset << *(WORD *)resTab;\n\n    HeapFree( GetProcessHeap(), 0, resTab );\n    return TRUE;\n}\n\n/***********************************************************************\n *           find_pe_resource         [internal]\n */\nstatic BOOL find_pe_resource( HFILE lzfd, LPCSTR typeid, LPCSTR resid,\n                                DWORD *resLen, DWORD *resOff )\n{\n    IMAGE_NT_HEADERS pehd;\n    DWORD pehdoffset;\n    PIMAGE_DATA_DIRECTORY resDataDir;\n    PIMAGE_SECTION_HEADER sections;\n    LPBYTE resSection;\n    DWORD resSectionSize;\n    const void *resDir;\n    const IMAGE_RESOURCE_DIRECTORY *resPtr;\n    const IMAGE_RESOURCE_DATA_ENTRY *resData;\n    int i, nSections;\n    BOOL ret = FALSE;\n\n    /* Read in PE header */\n    pehdoffset = LZSeek( lzfd, 0, SEEK_CUR );\n    if ( sizeof(pehd) != LZRead( lzfd, (LPSTR)&pehd, sizeof(pehd) ) ) return FALSE;\n\n    resDataDir = pehd.OptionalHeader.DataDirectory+IMAGE_DIRECTORY_ENTRY_RESOURCE;\n    if ( !resDataDir->Size )\n    {\n        TRACE(\"No resources in PE dll\\n\" );\n        return FALSE;\n    }\n\n    /* Read in section table */\n    nSections = pehd.FileHeader.NumberOfSections;\n    sections = HeapAlloc( GetProcessHeap(), 0,\n                          nSections * sizeof(IMAGE_SECTION_HEADER) );\n    if ( !sections ) return FALSE;\n\n    LZSeek( lzfd, pehdoffset +\n                    sizeof(DWORD) + /* Signature */\n                    sizeof(IMAGE_FILE_HEADER) +\n                    pehd.FileHeader.SizeOfOptionalHeader, SEEK_SET );\n\n    if ( nSections * sizeof(IMAGE_SECTION_HEADER) !=\n         LZRead( lzfd, (LPSTR)sections, nSections * sizeof(IMAGE_SECTION_HEADER) ) )\n    {\n        HeapFree( GetProcessHeap(), 0, sections );\n        return FALSE;\n    }\n\n    /* Find resource section */\n    for ( i = 0; i < nSections; i++ )\n        if (    resDataDir->VirtualAddress >= sections[i].VirtualAddress\n             && resDataDir->VirtualAddress <  sections[i].VirtualAddress +\n                                              sections[i].SizeOfRawData )\n            break;\n\n    if ( i == nSections )\n    {\n        HeapFree( GetProcessHeap(), 0, sections );\n        TRACE(\"Couldn't find resource section\\n\" );\n        return FALSE;\n    }\n\n    /* Read in resource section */\n    resSectionSize = sections[i].SizeOfRawData;\n    resSection = HeapAlloc( GetProcessHeap(), 0, resSectionSize );\n    if ( !resSection )\n    {\n        HeapFree( GetProcessHeap(), 0, sections );\n        return FALSE;\n    }\n\n    LZSeek( lzfd, sections[i].PointerToRawData, SEEK_SET );\n    if ( resSectionSize != LZRead( lzfd, (char*)resSection, resSectionSize ) ) goto done;\n\n    /* Find resource */\n    resDir = resSection + (resDataDir->VirtualAddress - sections[i].VirtualAddress);\n\n    resPtr = resDir;\n    resPtr = find_entry_by_name( resPtr, typeid, resDir );\n    if ( !resPtr )\n    {\n        TRACE(\"No typeid entry found for %p\\n\", typeid );\n        goto done;\n    }\n    resPtr = find_entry_by_name( resPtr, resid, resDir );\n    if ( !resPtr )\n    {\n        TRACE(\"No resid entry found for %p\\n\", resid );\n        goto done;\n    }\n    resPtr = find_entry_default( resPtr, resDir );\n    if ( !resPtr )\n    {\n        TRACE(\"No default language entry found for %p\\n\", resid );\n        goto done;\n    }\n\n    /* Find resource data section */\n    resData = (const IMAGE_RESOURCE_DATA_ENTRY*)resPtr;\n    for ( i = 0; i < nSections; i++ )\n        if (    resData->OffsetToData >= sections[i].VirtualAddress\n             && resData->OffsetToData <  sections[i].VirtualAddress +\n                                         sections[i].SizeOfRawData )\n            break;\n\n    if ( i == nSections )\n    {\n        TRACE(\"Couldn't find resource data section\\n\" );\n        goto done;\n    }\n\n    /* Return resource data */\n    if ( resLen ) *resLen = resData->Size;\n    if ( resOff ) *resOff = resData->OffsetToData - sections[i].VirtualAddress\n                            + sections[i].PointerToRawData;\n    ret = TRUE;\n\n done:\n    HeapFree( GetProcessHeap(), 0, resSection );\n    HeapFree( GetProcessHeap(), 0, sections );\n    return ret;\n}\n\n/***********************************************************************\n *           find_vxdver_resource         [internal]\n */\nstatic BOOL find_vxdver_resource( HFILE lzfd, DWORD *resLen, DWORD *resOff )\n{\n    IMAGE_VXD_HEADER lehd;\n    DWORD lehdoffset;\n    int count;\n\n    /* Read in LE header */\n    lehdoffset = LZSeek( lzfd, 0, SEEK_CUR );\n    if ( sizeof(lehd) != LZRead( lzfd, (LPSTR)&lehd, sizeof(lehd) ) ) return FALSE;\n\n    if ( !lehd.e32_winreslen )\n    {\n        TRACE(\"No resources in vxd\\n\" );\n        return FALSE;\n    }\n\n    LZSeek( lzfd, lehd.e32_winresoff + 8, SEEK_SET );\n    if ( resLen ) LZRead( lzfd, (LPSTR *)resLen, 4 );\n    if ( resOff ) *resOff = lehd.e32_winresoff + 12;\n    return TRUE;\n}\n\n/***********************************************************************\n *           find_resource         [internal]\n */\nstatic DWORD find_resource( HFILE lzfd, LPCSTR type, LPCSTR id, DWORD *reslen, DWORD *offset )\n{\n    DWORD magic = read_xx_header( lzfd );\n\n    switch (magic)\n    {\n    case IMAGE_OS2_SIGNATURE:\n        if (!find_ne_resource( lzfd, type, id, reslen, offset )) magic = 0;\n        break;\n    case IMAGE_NT_SIGNATURE:\n        if (!find_pe_resource( lzfd, type, id, reslen, offset )) magic = 0;\n        break;\n    case IMAGE_VXD_SIGNATURE:\n        if ((type != RT_VERSION) || !find_vxdver_resource( lzfd, reslen, offset )) magic = 0;\n        break;\n    }\n    return magic;\n}\n\nLPCSTR RedirectSystemDir(LPCSTR path, LPSTR to, size_t max_len);\nchar *krnl386_get_search_path(void);\nBOOL findfile(const char *file, char *out, int size)\n{\n    const char *path = krnl386_get_search_path();\n    RedirectSystemDir(file, out, size);\n    if (GetFileAttributesA(out) != INVALID_FILE_ATTRIBUTES)\n        return TRUE;\n    if (SearchPathA(path, file, NULL, size, out, NULL))\n        return TRUE;\n    HeapFree(GetProcessHeap(), 0, path);\n    return FALSE;\n}\n\nLPCSTR krnl386_search_executable_file(LPCSTR lpFile, LPSTR buf, SIZE_T size, BOOL search_builtin);\n/*************************************************************************\n * GetFileResourceSize                     [VER.2]\n */\nDWORD WINAPI GetFileResourceSize16( LPCSTR lpszFileName, LPCSTR lpszResType,\n                                    LPCSTR lpszResId, LPDWORD lpdwFileOffset )\n{\n    HFILE lzfd;\n    OFSTRUCT ofs;\n    DWORD reslen = 0;\n    char buf[MAX_PATH];\n\n    TRACE(\"(%s,type=%p,id=%p,off=%p)\\n\",\n          debugstr_a(lpszFileName), lpszResType, lpszResId, lpszResId );\n\n    lpszFileName = krnl386_search_executable_file(lpszFileName, buf, MAX_PATH, TRUE);\n    lzfd = LZOpenFileA( (LPSTR)lpszFileName, &ofs, OF_READ );\n    if (lzfd < 0)\n    {\n        char path[MAX_PATH];\n        if (findfile( lpszFileName, path, MAX_PATH ))\n            lzfd = LZOpenFileA( (LPSTR)path, &ofs, OF_READ );\n    }\n    if (lzfd >= 0)\n    {\n        if (!find_resource( lzfd, lpszResType, lpszResId, &reslen, lpdwFileOffset )) reslen = 0;\n        LZClose( lzfd );\n    }\n    return reslen;\n}\n\n\n/*************************************************************************\n * GetFileResource                         [VER.3]\n */\nDWORD WINAPI GetFileResource16( LPCSTR lpszFileName, LPCSTR lpszResType,\n                                LPCSTR lpszResId, DWORD dwFileOffset,\n                                DWORD dwResLen, LPVOID lpvData )\n{\n    HFILE lzfd;\n    OFSTRUCT ofs;\n    DWORD reslen = dwResLen;\n    char buf[MAX_PATH];\n\n    TRACE(\"(%s,type=%p,id=%p,off=%d,len=%d,data=%p)\\n\",\n\t\tdebugstr_a(lpszFileName), lpszResType, lpszResId,\n                dwFileOffset, dwResLen, lpvData );\n\n    lpszFileName = krnl386_search_executable_file(lpszFileName, buf, MAX_PATH, TRUE);\n    lzfd = LZOpenFileA( (LPSTR)lpszFileName, &ofs, OF_READ );\n    if (lzfd < 0)\n    {\n        char path[MAX_PATH];\n        if (findfile( lpszFileName, path, MAX_PATH ))\n            lzfd = LZOpenFileA( (LPSTR)path, &ofs, OF_READ );\n    }\n    if ( lzfd < 0 ) return 0;\n\n    if ( !dwFileOffset )\n    {\n        if (!find_resource( lzfd, lpszResType, lpszResId, &reslen, &dwFileOffset ))\n        {\n            LZClose( lzfd );\n            return 0;\n        }\n    }\n\n    LZSeek( lzfd, dwFileOffset, SEEK_SET );\n    reslen = LZRead( lzfd, lpvData, min( reslen, dwResLen ) );\n    LZClose( lzfd );\n\n    return reslen;\n}\n\n/*************************************************************************\n * GetFileVersionInfoSize                  [VER.6]\n */\nDWORD WINAPI GetFileVersionInfoSize16( LPCSTR lpszFileName, LPDWORD lpdwHandle )\n{\n    BOOL ret;\n    TRACE(\"(%s, %p)\\n\", debugstr_a(lpszFileName), lpdwHandle );\n    ret = GetFileResourceSize16( lpszFileName, VS_FILE_INFO, VS_VERSION_INFO, lpdwHandle );\n    if (!ret)\n    {\n        char path[MAX_PATH];\n        if (findfile( lpszFileName, path, MAX_PATH ))\n            ret = GetFileResourceSize16( lpszFileName, VS_FILE_INFO, VS_VERSION_INFO, lpdwHandle );\n    }\n    if (!ret) *lpdwHandle = NULL;\n    return ret;\n}\n\n/*************************************************************************\n * GetFileVersionInfo                      [VER.7]\n */\nDWORD WINAPI GetFileVersionInfo16( LPCSTR lpszFileName, DWORD handle,\n                                   DWORD cbBuf, LPVOID lpvData )\n{\n    DWORD ret, size;\n    char *buf;\n    TRACE(\"(%s, %08x, %d, %p)\\n\",\n                debugstr_a(lpszFileName), handle, cbBuf, lpvData );\n    ret = GetFileResource16( lpszFileName, VS_FILE_INFO, VS_VERSION_INFO, NULL, cbBuf, lpvData );\n    if (!ret)\n    {\n        char path[MAX_PATH];\n        if (findfile( lpszFileName, path, MAX_PATH ))\n            ret = GetFileResource16( lpszFileName, VS_FILE_INFO, VS_VERSION_INFO, NULL, cbBuf, lpvData );\n    }\n    return ret;\n}\n\n/*************************************************************************\n * VerFindFile                             [VER.8]\n */\nDWORD WINAPI VerFindFile16( UINT16 flags, LPSTR lpszFilename,\n                            LPSTR lpszWinDir, LPSTR lpszAppDir,\n                            LPSTR lpszCurDir, UINT16 *lpuCurDirLen,\n                            LPSTR lpszDestDir, UINT16 *lpuDestDirLen )\n{\n    UINT curDirLen, destDirLen;\n    UINT *pcurDirLen = NULL, *pdestDirLen = NULL;\n    DWORD retv;\n    char buf[MAX_PATH];\n    char systemdir[MAX_PATH];\n    lpszFilename = krnl386_search_executable_file(lpszFilename, buf, MAX_PATH, TRUE);\n\n    if (lpuCurDirLen) {\n        curDirLen = *lpuCurDirLen;\n        pcurDirLen = &curDirLen;\n    }\n    if (lpuDestDirLen) {\n        destDirLen = *lpuDestDirLen;\n        pdestDirLen = &destDirLen;\n    }\n    if (flags & VFFF_ISSHAREDFILE) {\n        RedirectSystemDir(\"c:\\\\windows\\\\system\", systemdir, MAX_PATH);\n        lpszAppDir = systemdir;\n        flags &= ~VFFF_ISSHAREDFILE;\n    }\n    \n    retv = VerFindFileA( flags, lpszFilename, lpszWinDir, lpszAppDir,\n                                lpszCurDir, pcurDirLen, lpszDestDir, pdestDirLen );\n    if (lpuCurDirLen)\n        *lpuCurDirLen = (UINT16)curDirLen;\n    if (lpuDestDirLen)\n        *lpuDestDirLen = (UINT16)destDirLen;\n    return retv;\n}\n\n/*************************************************************************\n * VerInstallFile                          [VER.9]\n */\nDWORD WINAPI VerInstallFile16( UINT16 flags,\n                               LPSTR lpszSrcFilename, LPSTR lpszDestFilename,\n                               LPSTR lpszSrcDir, LPSTR lpszDestDir, LPSTR lpszCurDir,\n                               LPSTR lpszTmpFile, UINT16 *lpwTmpFileLen )\n{\n    UINT filelen = *lpwTmpFileLen;\n\n    DWORD retv = VerInstallFileA( flags, lpszSrcFilename, lpszDestFilename,\n                                    lpszSrcDir, lpszDestDir, lpszCurDir,\n                                    lpszTmpFile, &filelen);\n\n    *lpwTmpFileLen = (UINT16)filelen;\n    return retv;\n}\n\n/*************************************************************************\n * VerLanguageName                        [VER.10]\n */\nDWORD WINAPI VerLanguageName16( UINT16 uLang, LPSTR lpszLang, UINT16 cbLang )\n{\n    return VerLanguageNameA( uLang, lpszLang, cbLang );\n}\n\n/*************************************************************************\n * VerQueryValue                          [VER.11]\n */\nDWORD WINAPI VerQueryValue16( SEGPTR spvBlock, LPSTR lpszSubBlock,\n                              SEGPTR *lpspBuffer, UINT16 *lpcb )\n{\n    LPVOID lpvBlock = MapSL( spvBlock );\n    LPVOID buffer = lpvBlock;\n    UINT buflen;\n    DWORD retv;\n\n    TRACE(\"(%p, %s, %p, %p)\\n\",\n                lpvBlock, debugstr_a(lpszSubBlock), lpspBuffer, lpcb );\n\n    retv = VerQueryValueA( lpvBlock, lpszSubBlock, &buffer, &buflen );\n    if ( !retv ) return FALSE;\n\n    if ( OFFSETOF( spvBlock ) + ((char *) buffer - (char *) lpvBlock) >= 0x10000 )\n    {\n        FIXME(\"offset %08X too large relative to %04X:%04X\\n\",\n               (char *) buffer - (char *) lpvBlock, SELECTOROF( spvBlock ), OFFSETOF( spvBlock ) );\n        return FALSE;\n    }\n\n    if (lpcb) *lpcb = buflen;\n    *lpspBuffer = (SEGPTR) ((char *) spvBlock + ((char *) buffer - (char *) lpvBlock));\n\n    return retv;\n}\n"
  },
  {
    "path": "vm86/CMakeLists.txt",
    "content": "add_library(vm86 SHARED msdos.cpp vm86.def)\ninclude_directories(../wine)\nadd_definitions(-D__i386__ -DHAS_I486 -DSUPPORT_FPU -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Uinline -DPSAPI_VERSION=1)\nif (NOT(MSVC))\n    string(APPEND CMAKE_CXX_FLAGS \" -fpermissive -Wl,--enable-stdcall-fixup \")\nendif()\ntarget_link_libraries(vm86 libwine winecrt0 dbghelp.lib Psapi.lib)\nset_target_properties(vm86 PROPERTIES PREFIX \"\")\n"
  },
  {
    "path": "vm86/COPYING.txt",
    "content": "\t\t    GNU GENERAL PUBLIC LICENSE\n\t\t       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc.\n                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\t\t\t    Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicense is intended to guarantee your freedom to share and change free\nsoftware--to make sure the software is free for all its users.  This\nGeneral Public License applies to most of the Free Software\nFoundation's software and to any other program whose authors commit to\nusing it.  (Some other Free Software Foundation software is covered by\nthe GNU Library General Public License instead.)  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthis service if you wish), that you receive source code or can get it\nif you want it, that you can change the software or use pieces of it\nin new free programs; and that you know you can do these things.\n\n  To protect your rights, we need to make restrictions that forbid\nanyone to deny you these rights or to ask you to surrender the rights.\nThese restrictions translate to certain responsibilities for you if you\ndistribute copies of the software, or if you modify it.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must give the recipients all the rights that\nyou have.  You must make sure that they, too, receive or can get the\nsource code.  And you must show them these terms so they know their\nrights.\n\n  We protect your rights with two steps: (1) copyright the software, and\n(2) offer you this license which gives you legal permission to copy,\ndistribute and/or modify the software.\n\n  Also, for each author's protection and ours, we want to make certain\nthat everyone understands that there is no warranty for this free\nsoftware.  If the software is modified by someone else and passed on, we\nwant its recipients to know that what they have is not the original, so\nthat any problems introduced by others will not reflect on the original\nauthors' reputations.\n\n  Finally, any free program is threatened constantly by software\npatents.  We wish to avoid the danger that redistributors of a free\nprogram will individually obtain patent licenses, in effect making the\nprogram proprietary.  To prevent this, we have made it clear that any\npatent must be licensed for everyone's free use or not licensed at all.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\f\n\t\t    GNU GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License applies to any program or other work which contains\na notice placed by the copyright holder saying it may be distributed\nunder the terms of this General Public License.  The \"Program\", below,\nrefers to any such program or work, and a \"work based on the Program\"\nmeans either the Program or any derivative work under copyright law:\nthat is to say, a work containing the Program or a portion of it,\neither verbatim or with modifications and/or translated into another\nlanguage.  (Hereinafter, translation is included without limitation in\nthe term \"modification\".)  Each licensee is addressed as \"you\".\n\nActivities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning the Program is not restricted, and the output from the Program\nis covered only if its contents constitute a work based on the\nProgram (independent of having been made by running the Program).\nWhether that is true depends on what the Program does.\n\n  1. You may copy and distribute verbatim copies of the Program's\nsource code as you receive it, in any medium, provided that you\nconspicuously and appropriately publish on each copy an appropriate\ncopyright notice and disclaimer of warranty; keep intact all the\nnotices that refer to this License and to the absence of any warranty;\nand give any other recipients of the Program a copy of this License\nalong with the Program.\n\nYou may charge a fee for the physical act of transferring a copy, and\nyou may at your option offer warranty protection in exchange for a fee.\n\n  2. You may modify your copy or copies of the Program or any portion\nof it, thus forming a work based on the Program, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) You must cause the modified files to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    b) You must cause any work that you distribute or publish, that in\n    whole or in part contains or is derived from the Program or any\n    part thereof, to be licensed as a whole at no charge to all third\n    parties under the terms of this License.\n\n    c) If the modified program normally reads commands interactively\n    when run, you must cause it, when started running for such\n    interactive use in the most ordinary way, to print or display an\n    announcement including an appropriate copyright notice and a\n    notice that there is no warranty (or else, saying that you provide\n    a warranty) and that users may redistribute the program under\n    these conditions, and telling the user how to view a copy of this\n    License.  (Exception: if the Program itself is interactive but\n    does not normally print such an announcement, your work based on\n    the Program is not required to print an announcement.)\n\f\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Program,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Program, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote it.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Program.\n\nIn addition, mere aggregation of another work not based on the Program\nwith the Program (or with a work based on the Program) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may copy and distribute the Program (or a work based on it,\nunder Section 2) in object code or executable form under the terms of\nSections 1 and 2 above provided that you also do one of the following:\n\n    a) Accompany it with the complete corresponding machine-readable\n    source code, which must be distributed under the terms of Sections\n    1 and 2 above on a medium customarily used for software interchange; or,\n\n    b) Accompany it with a written offer, valid for at least three\n    years, to give any third party, for a charge no more than your\n    cost of physically performing source distribution, a complete\n    machine-readable copy of the corresponding source code, to be\n    distributed under the terms of Sections 1 and 2 above on a medium\n    customarily used for software interchange; or,\n\n    c) Accompany it with the information you received as to the offer\n    to distribute corresponding source code.  (This alternative is\n    allowed only for noncommercial distribution and only if you\n    received the program in object code or executable form with such\n    an offer, in accord with Subsection b above.)\n\nThe source code for a work means the preferred form of the work for\nmaking modifications to it.  For an executable work, complete source\ncode means all the source code for all modules it contains, plus any\nassociated interface definition files, plus the scripts used to\ncontrol compilation and installation of the executable.  However, as a\nspecial exception, the source code distributed need not include\nanything that is normally distributed (in either source or binary\nform) with the major components (compiler, kernel, and so on) of the\noperating system on which the executable runs, unless that component\nitself accompanies the executable.\n\nIf distribution of executable or object code is made by offering\naccess to copy from a designated place, then offering equivalent\naccess to copy the source code from the same place counts as\ndistribution of the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\f\n  4. You may not copy, modify, sublicense, or distribute the Program\nexcept as expressly provided under this License.  Any attempt\notherwise to copy, modify, sublicense or distribute the Program is\nvoid, and will automatically terminate your rights under this License.\nHowever, parties who have received copies, or rights, from you under\nthis License will not have their licenses terminated so long as such\nparties remain in full compliance.\n\n  5. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Program or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Program (or any work based on the\nProgram), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Program or works based on it.\n\n  6. Each time you redistribute the Program (or any work based on the\nProgram), the recipient automatically receives a license from the\noriginal licensor to copy, distribute or modify the Program subject to\nthese terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties to\nthis License.\n\n  7. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Program at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Program by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Program.\n\nIf any portion of this section is held invalid or unenforceable under\nany particular circumstance, the balance of the section is intended to\napply and the section as a whole is intended to apply in other\ncircumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system, which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\f\n  8. If the distribution and/or use of the Program is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Program under this License\nmay add an explicit geographical distribution limitation excluding\nthose countries, so that distribution is permitted only in or among\ncountries not thus excluded.  In such case, this License incorporates\nthe limitation as if written in the body of this License.\n\n  9. The Free Software Foundation may publish revised and/or new versions\nof the General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Program\nspecifies a version number of this License which applies to it and \"any\nlater version\", you have the option of following the terms and conditions\neither of that version or of any later version published by the Free\nSoftware Foundation.  If the Program does not specify a version number of\nthis License, you may choose any version ever published by the Free Software\nFoundation.\n\n  10. If you wish to incorporate parts of the Program into other free\nprograms whose distribution conditions are different, write to the author\nto ask for permission.  For software which is copyrighted by the Free\nSoftware Foundation, write to the Free Software Foundation; we sometimes\nmake exceptions for this.  Our decision will be guided by the two goals\nof preserving the free status of all derivatives of our free software and\nof promoting the sharing and reuse of software generally.\n\n\t\t\t    NO WARRANTY\n\n  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\nFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\nOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\nPROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\nOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\nTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\nPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\nREPAIR OR CORRECTION.\n\n  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\nREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\nINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\nOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\nTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\nYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\nPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGES.\n\n\t\t     END OF TERMS AND CONDITIONS\n\f\n\t    How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) 19yy  <name of author>\n\n    This program is free software; you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation; either version 2 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program; if not, write to the Free Software\n    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n\n\nAlso add information on how to contact you by electronic and paper mail.\n\nIf the program is interactive, make it output a short notice like this\nwhen it starts in an interactive mode:\n\n    Gnomovision version 69, Copyright (C) 19yy name of author\n    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, the commands you use may\nbe called something other than `show w' and `show c'; they could even be\nmouse-clicks or menu items--whatever suits your program.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the program, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n  `Gnomovision' (which makes passes at compilers) written by James Hacker.\n\n  <signature of Ty Coon>, 1 April 1989\n  Ty Coon, President of Vice\n\nThis General Public License does not permit incorporating your program into\nproprietary programs.  If your program is a subroutine library, you may\nconsider it more useful to permit linking proprietary applications with the\nlibrary.  If this is what you want to do, use the GNU Library General\nPublic License instead of this License.\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386/cycles.h",
    "content": "// license:BSD-3-Clause\n// copyright-holders:Ville Linde, Barry Rodewald, Carl, Phil Bennett\n\n#pragma once\n\n#ifndef __CYCLES_H__\n#define __CYCLES_H__\n\nenum X86_CYCLES\n{\n\tCYCLES_MOV_REG_REG,\n\tCYCLES_MOV_REG_MEM,\n\tCYCLES_MOV_MEM_REG,\n\tCYCLES_MOV_IMM_REG,\n\tCYCLES_MOV_IMM_MEM,\n\tCYCLES_MOV_ACC_MEM,\n\tCYCLES_MOV_MEM_ACC,\n\tCYCLES_MOV_REG_SREG,\n\tCYCLES_MOV_MEM_SREG,\n\tCYCLES_MOV_SREG_REG,\n\tCYCLES_MOV_SREG_MEM,\n\tCYCLES_MOVSX_REG_REG,\n\tCYCLES_MOVSX_MEM_REG,\n\tCYCLES_MOVZX_REG_REG,\n\tCYCLES_MOVZX_MEM_REG,\n\tCYCLES_PUSH_RM,\n\tCYCLES_PUSH_REG_SHORT,\n\tCYCLES_PUSH_SREG,\n\tCYCLES_PUSH_IMM,\n\tCYCLES_PUSHA,\n\tCYCLES_POP_RM,\n\tCYCLES_POP_REG_SHORT,\n\tCYCLES_POP_SREG,\n\tCYCLES_POPA,\n\tCYCLES_XCHG_REG_REG,\n\tCYCLES_XCHG_REG_MEM,\n\tCYCLES_IN,\n\tCYCLES_IN_VAR,\n\tCYCLES_OUT,\n\tCYCLES_OUT_VAR,\n\tCYCLES_LEA,\n\tCYCLES_LDS,\n\tCYCLES_LES,\n\tCYCLES_LFS,\n\tCYCLES_LGS,\n\tCYCLES_LSS,\n\tCYCLES_CLC,\n\tCYCLES_CLD,\n\tCYCLES_CLI,\n\tCYCLES_CLTS,\n\tCYCLES_CMC,\n\tCYCLES_LAHF,\n\tCYCLES_POPF,\n\tCYCLES_PUSHF,\n\tCYCLES_SAHF,\n\tCYCLES_STC,\n\tCYCLES_STD,\n\tCYCLES_STI,\n\tCYCLES_ALU_REG_REG,\n\tCYCLES_ALU_REG_MEM,\n\tCYCLES_ALU_MEM_REG,\n\tCYCLES_ALU_IMM_REG,\n\tCYCLES_ALU_IMM_MEM,\n\tCYCLES_ALU_IMM_ACC,\n\tCYCLES_INC_REG,\n\tCYCLES_INC_MEM,\n\tCYCLES_DEC_REG,\n\tCYCLES_DEC_MEM,\n\tCYCLES_CMP_REG_REG,\n\tCYCLES_CMP_REG_MEM,\n\tCYCLES_CMP_MEM_REG,\n\tCYCLES_CMP_IMM_REG,\n\tCYCLES_CMP_IMM_MEM,\n\tCYCLES_CMP_IMM_ACC,\n\tCYCLES_TEST_REG_REG,\n\tCYCLES_TEST_REG_MEM,\n\tCYCLES_TEST_IMM_REG,\n\tCYCLES_TEST_IMM_MEM,\n\tCYCLES_TEST_IMM_ACC,\n\tCYCLES_NEG_REG,\n\tCYCLES_NEG_MEM,\n\tCYCLES_AAA,\n\tCYCLES_AAS,\n\tCYCLES_DAA,\n\tCYCLES_DAS,\n\tCYCLES_MUL8_ACC_REG,\n\tCYCLES_MUL8_ACC_MEM,\n\tCYCLES_MUL16_ACC_REG,\n\tCYCLES_MUL16_ACC_MEM,\n\tCYCLES_MUL32_ACC_REG,\n\tCYCLES_MUL32_ACC_MEM,\n\tCYCLES_IMUL8_ACC_REG,\n\tCYCLES_IMUL8_ACC_MEM,\n\tCYCLES_IMUL16_ACC_REG,\n\tCYCLES_IMUL16_ACC_MEM,\n\tCYCLES_IMUL32_ACC_REG,\n\tCYCLES_IMUL32_ACC_MEM,\n\tCYCLES_IMUL8_REG_REG,\n\tCYCLES_IMUL8_REG_MEM,\n\tCYCLES_IMUL16_REG_REG,\n\tCYCLES_IMUL16_REG_MEM,\n\tCYCLES_IMUL32_REG_REG,\n\tCYCLES_IMUL32_REG_MEM,\n\tCYCLES_IMUL16_REG_IMM_REG,\n\tCYCLES_IMUL16_MEM_IMM_REG,\n\tCYCLES_IMUL32_REG_IMM_REG,\n\tCYCLES_IMUL32_MEM_IMM_REG,\n\tCYCLES_DIV8_ACC_REG,\n\tCYCLES_DIV8_ACC_MEM,\n\tCYCLES_DIV16_ACC_REG,\n\tCYCLES_DIV16_ACC_MEM,\n\tCYCLES_DIV32_ACC_REG,\n\tCYCLES_DIV32_ACC_MEM,\n\tCYCLES_IDIV8_ACC_REG,\n\tCYCLES_IDIV8_ACC_MEM,\n\tCYCLES_IDIV16_ACC_REG,\n\tCYCLES_IDIV16_ACC_MEM,\n\tCYCLES_IDIV32_ACC_REG,\n\tCYCLES_IDIV32_ACC_MEM,\n\tCYCLES_AAD,\n\tCYCLES_AAM,\n\tCYCLES_CBW,\n\tCYCLES_CWD,\n\tCYCLES_ROTATE_REG,\n\tCYCLES_ROTATE_MEM,\n\tCYCLES_ROTATE_CARRY_REG,\n\tCYCLES_ROTATE_CARRY_MEM,\n\tCYCLES_SHLD_REG,\n\tCYCLES_SHLD_MEM,\n\tCYCLES_SHRD_REG,\n\tCYCLES_SHRD_MEM,\n\tCYCLES_NOT_REG,\n\tCYCLES_NOT_MEM,\n\tCYCLES_CMPS,\n\tCYCLES_INS,\n\tCYCLES_LODS,\n\tCYCLES_MOVS,\n\tCYCLES_OUTS,\n\tCYCLES_SCAS,\n\tCYCLES_STOS,\n\tCYCLES_XLAT,\n\tCYCLES_REP_CMPS_BASE,\n\tCYCLES_REP_INS_BASE,\n\tCYCLES_REP_LODS_BASE,\n\tCYCLES_REP_MOVS_BASE,\n\tCYCLES_REP_OUTS_BASE,\n\tCYCLES_REP_SCAS_BASE,\n\tCYCLES_REP_STOS_BASE,\n\tCYCLES_REP_CMPS,\n\tCYCLES_REP_INS,\n\tCYCLES_REP_LODS,\n\tCYCLES_REP_MOVS,\n\tCYCLES_REP_OUTS,\n\tCYCLES_REP_SCAS,\n\tCYCLES_REP_STOS,\n\tCYCLES_BSF_BASE,\n\tCYCLES_BSF,\n\tCYCLES_BSR_BASE,\n\tCYCLES_BSR,\n\tCYCLES_BT_IMM_REG,\n\tCYCLES_BT_IMM_MEM,\n\tCYCLES_BT_REG_REG,\n\tCYCLES_BT_REG_MEM,\n\tCYCLES_BTC_IMM_REG,\n\tCYCLES_BTC_IMM_MEM,\n\tCYCLES_BTC_REG_REG,\n\tCYCLES_BTC_REG_MEM,\n\tCYCLES_BTR_IMM_REG,\n\tCYCLES_BTR_IMM_MEM,\n\tCYCLES_BTR_REG_REG,\n\tCYCLES_BTR_REG_MEM,\n\tCYCLES_BTS_IMM_REG,\n\tCYCLES_BTS_IMM_MEM,\n\tCYCLES_BTS_REG_REG,\n\tCYCLES_BTS_REG_MEM,\n\tCYCLES_CALL,                // E8\n\tCYCLES_CALL_REG,            // FF /2\n\tCYCLES_CALL_MEM,            // FF /2\n\tCYCLES_CALL_INTERSEG,       // 9A\n\tCYCLES_CALL_REG_INTERSEG,   // FF /3\n\tCYCLES_CALL_MEM_INTERSEG,   // FF /3\n\tCYCLES_JMP_SHORT,           // EB\n\tCYCLES_JMP,                 // E9\n\tCYCLES_JMP_REG,             // FF /4\n\tCYCLES_JMP_MEM,             // FF /4\n\tCYCLES_JMP_INTERSEG,        // EA\n\tCYCLES_JMP_REG_INTERSEG,    // FF /5\n\tCYCLES_JMP_MEM_INTERSEG,    // FF /5\n\tCYCLES_RET,                 // C3\n\tCYCLES_RET_IMM,             // C2\n\tCYCLES_RET_INTERSEG,        // CB\n\tCYCLES_RET_IMM_INTERSEG,    // CA\n\tCYCLES_JCC_DISP8,\n\tCYCLES_JCC_FULL_DISP,\n\tCYCLES_JCC_DISP8_NOBRANCH,\n\tCYCLES_JCC_FULL_DISP_NOBRANCH,\n\tCYCLES_JCXZ,\n\tCYCLES_JCXZ_NOBRANCH,\n\tCYCLES_LOOP,\n\tCYCLES_LOOPZ,\n\tCYCLES_LOOPNZ,\n\tCYCLES_SETCC_REG,\n\tCYCLES_SETCC_MEM,\n\tCYCLES_ENTER,\n\tCYCLES_LEAVE,\n\tCYCLES_INT,\n\tCYCLES_INT3,\n\tCYCLES_INTO_OF1,\n\tCYCLES_INTO_OF0,\n\tCYCLES_BOUND_IN_RANGE,\n\tCYCLES_BOUND_OUT_RANGE,\n\tCYCLES_IRET,\n\tCYCLES_HLT,\n\tCYCLES_MOV_REG_CR0,\n\tCYCLES_MOV_REG_CR2,\n\tCYCLES_MOV_REG_CR3,\n\tCYCLES_MOV_CR_REG,\n\tCYCLES_MOV_REG_DR0_3,\n\tCYCLES_MOV_REG_DR6_7,\n\tCYCLES_MOV_DR6_7_REG,\n\tCYCLES_MOV_DR0_3_REG,\n\tCYCLES_MOV_REG_TR6_7,\n\tCYCLES_MOV_TR6_7_REG,\n\tCYCLES_NOP,\n\tCYCLES_WAIT,\n\tCYCLES_ARPL_REG,\n\tCYCLES_ARPL_MEM,\n\tCYCLES_LAR_REG,\n\tCYCLES_LAR_MEM,\n\tCYCLES_LGDT,\n\tCYCLES_LIDT,\n\tCYCLES_LLDT_REG,\n\tCYCLES_LLDT_MEM,\n\tCYCLES_LMSW_REG,\n\tCYCLES_LMSW_MEM,\n\tCYCLES_LSL_REG,\n\tCYCLES_LSL_MEM,\n\tCYCLES_LTR_REG,\n\tCYCLES_LTR_MEM,\n\tCYCLES_SGDT,\n\tCYCLES_SIDT,\n\tCYCLES_SLDT_REG,\n\tCYCLES_SLDT_MEM,\n\tCYCLES_SMSW_REG,\n\tCYCLES_SMSW_MEM,\n\tCYCLES_STR_REG,\n\tCYCLES_STR_MEM,\n\tCYCLES_VERR_REG,\n\tCYCLES_VERR_MEM,\n\tCYCLES_VERW_REG,\n\tCYCLES_VERW_MEM,\n\tCYCLES_LOCK,\n\n\tCYCLES_BSWAP,\n\tCYCLES_CMPXCHG8B,\n\tCYCLES_CMPXCHG,\n\tCYCLES_CPUID,\n\tCYCLES_CPUID_EAX1,\n\tCYCLES_INVD,\n\tCYCLES_XADD,\n\tCYCLES_RDTSC,\n\tCYCLES_RSM,\n\tCYCLES_RDMSR,\n\n\tCYCLES_FABS,\n\tCYCLES_FADD,\n\tCYCLES_FBLD,\n\tCYCLES_FBSTP,\n\tCYCLES_FCHS,\n\tCYCLES_FCLEX,\n\tCYCLES_FCOM,\n\tCYCLES_FCOS,\n\tCYCLES_FDECSTP,\n\tCYCLES_FDISI,\n\tCYCLES_FDIV,\n\tCYCLES_FDIVR,\n\tCYCLES_FENI,\n\tCYCLES_FFREE,\n\tCYCLES_FIADD,\n\tCYCLES_FICOM,\n\tCYCLES_FIDIV,\n\tCYCLES_FILD,\n\tCYCLES_FIMUL,\n\tCYCLES_FINCSTP,\n\tCYCLES_FINIT,\n\tCYCLES_FIST,\n\tCYCLES_FISUB,\n\tCYCLES_FLD,\n\tCYCLES_FLDZ,\n\tCYCLES_FLD1,\n\tCYCLES_FLDL2E,\n\tCYCLES_FLDL2T,\n\tCYCLES_FLDLG2,\n\tCYCLES_FLDLN2,\n\tCYCLES_FLDPI,\n\tCYCLES_FLDCW,\n\tCYCLES_FLDENV,\n\tCYCLES_FMUL,\n\tCYCLES_FNOP,\n\tCYCLES_FPATAN,\n\tCYCLES_FPREM,\n\tCYCLES_FPREM1,\n\tCYCLES_FPTAN,\n\tCYCLES_FRNDINT,\n\tCYCLES_FRSTOR,\n\tCYCLES_FSAVE,\n\tCYCLES_FSCALE,\n\tCYCLES_FSETPM,\n\tCYCLES_FSIN,\n\tCYCLES_FSINCOS,\n\tCYCLES_FSQRT,\n\tCYCLES_FST,\n\tCYCLES_FSTCW,\n\tCYCLES_FSTENV,\n\tCYCLES_FSTSW,\n\tCYCLES_FSUB,\n\tCYCLES_FSUBR,\n\tCYCLES_FTST,\n\tCYCLES_FUCOM,\n\tCYCLES_FXAM,\n\tCYCLES_FXCH,\n\tCYCLES_FXTRACT,\n\tCYCLES_FYL2X,\n\tCYCLES_FYL2XPI,\n\tCYCLES_CMPXCHG_REG_REG_T,\n\tCYCLES_CMPXCHG_REG_REG_F,\n\tCYCLES_CMPXCHG_REG_MEM_T,\n\tCYCLES_CMPXCHG_REG_MEM_F,\n\tCYCLES_XADD_REG_REG,\n\tCYCLES_XADD_REG_MEM,\n\n\tCYCLES_NUM_OPCODES\n};\n\n\n#define X86_NUM_CPUS        4\n#define CPU_CYCLES_I386         0\n#define CPU_CYCLES_I486         1\n#define CPU_CYCLES_PENTIUM      2\n#define CPU_CYCLES_MEDIAGX      3\n\n\nstruct X86_CYCLE_TABLE\n{\n\tX86_CYCLES op;\n\tUINT8 cpu_cycles[X86_NUM_CPUS][2];\n};\n\nstatic const X86_CYCLE_TABLE x86_cycle_table[] =\n{\n\t// opcode                     rm/pmode\n\t//                            i386         i486         pentium      mediagx\n\t{ CYCLES_MOV_REG_REG,       { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_MOV_REG_MEM,       { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_MOV_MEM_REG,       { {  4,  4 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_MOV_IMM_REG,       { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_MOV_IMM_MEM,       { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_MOV_ACC_MEM,       { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_MOV_MEM_ACC,       { {  4,  4 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_MOV_REG_SREG,      { {  2, 18 },  {  3,  3 },  {  2,  2 },  {  1,  6 } }       },\n\t{ CYCLES_MOV_MEM_SREG,      { {  5, 19 },  {  9,  9 },  {  3,  3 },  {  1,  6 } }       },\n\t{ CYCLES_MOV_SREG_REG,      { {  2,  2 },  {  3,  3 },  {  1,  1 },  {  1,  6 } }       },\n\t{ CYCLES_MOV_SREG_MEM,      { {  2,  2 },  {  3,  3 },  {  1,  1 },  {  1,  6 } }       },\n\t{ CYCLES_MOVSX_REG_REG,     { {  3,  3 },  {  3,  3 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_MOVSX_MEM_REG,     { {  6,  6 },  {  3,  3 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_MOVZX_REG_REG,     { {  3,  3 },  {  3,  3 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_MOVZX_MEM_REG,     { {  6,  6 },  {  3,  3 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_PUSH_RM,           { {  5,  5 },  {  4,  4 },  {  2,  2 },  {  3,  3 } }       },\n\t{ CYCLES_PUSH_REG_SHORT,    { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_PUSH_SREG,         { {  2,  2 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_PUSH_IMM,          { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_PUSHA,             { { 18, 18 },  { 11, 11 },  {  5,  5 },  { 11, 11 } }       },\n\t{ CYCLES_POP_RM,            { {  5,  5 },  {  4,  4 },  {  3,  3 },  {  4,  4 } }       },\n\t{ CYCLES_POP_REG_SHORT,     { {  4,  4 },  {  4,  4 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_POP_SREG,          { {  7, 21 },  {  3,  3 },  {  3,  3 },  {  1,  6 } }       },\n\t{ CYCLES_POPA,              { { 24, 24 },  {  9,  9 },  {  5,  5 },  {  9,  9 } }       },\n\t{ CYCLES_XCHG_REG_REG,      { {  3,  3 },  {  3,  3 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_XCHG_REG_MEM,      { {  5,  5 },  {  5,  5 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_IN,                { { 12, 26 },  { 14, 27 },  {  7, 19 },  {  8,  8 } }       },\n\t{ CYCLES_IN_VAR,            { { 13, 27 },  { 14, 27 },  {  7, 19 },  {  8,  8 } }       },\n\t{ CYCLES_OUT,               { { 10, 24 },  { 16, 29 },  { 12, 24 },  { 14, 14 } }       },\n\t{ CYCLES_OUT_VAR,           { { 11, 25 },  { 16, 29 },  { 12, 24 },  { 14, 14 } }       },\n\t{ CYCLES_LEA,               { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_LDS,               { {  7, 22 },  {  6, 12 },  {  4,  4 },  {  4,  9 } }       },\n\t{ CYCLES_LES,               { {  7, 22 },  {  6, 12 },  {  4,  4 },  {  4,  9 } }       },\n\t{ CYCLES_LFS,               { {  7, 22 },  {  6, 12 },  {  4,  4 },  {  4,  9 } }       },\n\t{ CYCLES_LGS,               { {  7, 22 },  {  6, 12 },  {  4,  4 },  {  4,  9 } }       },\n\t{ CYCLES_LSS,               { {  7, 22 },  {  6, 12 },  {  4,  4 },  {  4, 10 } }       },\n\t{ CYCLES_CLC,               { {  2,  2 },  {  2,  2 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_CLD,               { {  2,  2 },  {  2,  2 },  {  2,  2 },  {  4,  4 } }       },\n\t{ CYCLES_CLI,               { {  8,  8 },  {  5,  5 },  {  7,  7 },  {  6,  6 } }       },\n\t{ CYCLES_CLTS,              { {  6,  6 },  {  7,  7 },  { 10, 10 },  {  7,  7 } }       },\n\t{ CYCLES_CMC,               { {  2,  2 },  {  2,  2 },  {  2,  2 },  {  3,  3 } }       },\n\t{ CYCLES_LAHF,              { {  2,  2 },  {  3,  3 },  {  2,  2 },  {  2,  2 } }       },\n\t{ CYCLES_POPF,              { {  5,  5 },  {  9,  9 },  {  6,  6 },  {  8,  8 } }       },\n\t{ CYCLES_PUSHF,             { {  4,  4 },  {  4,  4 },  {  9,  9 },  {  2,  2 } }       },\n\t{ CYCLES_SAHF,              { {  3,  3 },  {  2,  2 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_STC,               { {  2,  2 },  {  2,  2 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_STD,               { {  2,  2 },  {  2,  2 },  {  2,  2 },  {  4,  4 } }       },\n\t{ CYCLES_STI,               { {  8,  8 },  {  5,  5 },  {  7,  7 },  {  6,  6 } }       },\n\t{ CYCLES_ALU_REG_REG,       { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_ALU_REG_MEM,       { {  7,  7 },  {  3,  3 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_ALU_MEM_REG,       { {  6,  6 },  {  2,  2 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_ALU_IMM_REG,       { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_ALU_IMM_MEM,       { {  7,  7 },  {  3,  3 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_ALU_IMM_ACC,       { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_INC_REG,           { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_INC_MEM,           { {  6,  6 },  {  3,  3 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_DEC_REG,           { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_DEC_MEM,           { {  6,  6 },  {  3,  3 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_CMP_REG_REG,       { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_CMP_REG_MEM,       { {  5,  5 },  {  2,  2 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_CMP_MEM_REG,       { {  6,  6 },  {  2,  2 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_CMP_IMM_REG,       { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_CMP_IMM_MEM,       { {  5,  5 },  {  2,  2 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_CMP_IMM_ACC,       { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_TEST_REG_REG,      { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_TEST_REG_MEM,      { {  5,  5 },  {  2,  2 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_TEST_IMM_REG,      { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_TEST_IMM_MEM,      { {  5,  5 },  {  2,  2 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_TEST_IMM_ACC,      { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_NEG_REG,           { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_NEG_MEM,           { {  6,  6 },  {  3,  3 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_AAA,               { {  4,  4 },  {  3,  3 },  {  3,  3 },  {  3,  3 } }       },\n\t{ CYCLES_AAS,               { {  4,  4 },  {  3,  3 },  {  3,  3 },  {  3,  3 } }       },\n\t{ CYCLES_DAA,               { {  4,  4 },  {  2,  2 },  {  3,  3 },  {  2,  2 } }       },\n\t{ CYCLES_DAS,               { {  4,  4 },  {  2,  2 },  {  3,  3 },  {  2,  2 } }       },\n\t{ CYCLES_MUL8_ACC_REG,      { { 17, 17 },  { 13, 13 },  { 11, 11 },  {  4,  4 } }       },\n\t{ CYCLES_MUL8_ACC_MEM,      { { 20, 20 },  { 13, 13 },  { 11, 11 },  {  4,  4 } }       },\n\t{ CYCLES_MUL16_ACC_REG,     { { 25, 25 },  { 13, 13 },  { 11, 11 },  {  5,  5 } }       },\n\t{ CYCLES_MUL16_ACC_MEM,     { { 28, 28 },  { 13, 13 },  { 11, 11 },  {  5,  5 } }       },\n\t{ CYCLES_MUL32_ACC_REG,     { { 41, 41 },  { 13, 13 },  { 10, 10 },  { 15, 15 } }       },\n\t{ CYCLES_MUL32_ACC_MEM,     { { 44, 44 },  { 13, 13 },  { 10, 10 },  { 15, 15 } }       },\n\t{ CYCLES_IMUL8_ACC_REG,     { { 17, 17 },  { 18, 18 },  { 11, 11 },  {  4,  4 } }       },\n\t{ CYCLES_IMUL8_ACC_MEM,     { { 20, 20 },  { 18, 18 },  { 11, 11 },  {  4,  4 } }       },\n\t{ CYCLES_IMUL16_ACC_REG,    { { 25, 25 },  { 26, 26 },  { 11, 11 },  {  5,  5 } }       },\n\t{ CYCLES_IMUL16_ACC_MEM,    { { 28, 28 },  { 26, 26 },  { 11, 11 },  {  5,  5 } }       },\n\t{ CYCLES_IMUL32_ACC_REG,    { { 41, 41 },  { 42, 42 },  { 10, 10 },  { 15, 15 } }       },\n\t{ CYCLES_IMUL32_ACC_MEM,    { { 44, 44 },  { 42, 42 },  { 10, 10 },  { 15, 15 } }       },\n\t{ CYCLES_IMUL8_REG_REG,     { { 17, 17 },  { 13, 13 },  { 10, 10 },  {  4,  4 } }       },\n\t{ CYCLES_IMUL8_REG_MEM,     { { 20, 20 },  { 13, 13 },  { 10, 10 },  {  4,  4 } }       },\n\t{ CYCLES_IMUL16_REG_REG,    { { 25, 25 },  { 13, 13 },  { 10, 10 },  {  5,  5 } }       },\n\t{ CYCLES_IMUL16_REG_MEM,    { { 28, 28 },  { 13, 13 },  { 10, 10 },  {  5,  5 } }       },\n\t{ CYCLES_IMUL32_REG_REG,    { { 41, 41 },  { 13, 13 },  { 10, 10 },  { 15, 15 } }       },\n\t{ CYCLES_IMUL32_REG_MEM,    { { 44, 44 },  { 13, 13 },  { 10, 10 },  { 15, 15 } }       },\n\t{ CYCLES_IMUL16_REG_IMM_REG,{ { 26, 26 },  { 26, 26 },  { 10, 10 },  {  6,  6 } }       },\n\t{ CYCLES_IMUL16_MEM_IMM_REG,{ { 27, 27 },  { 26, 26 },  { 10, 10 },  {  6,  6 } }       },\n\t{ CYCLES_IMUL32_REG_IMM_REG,{ { 42, 42 },  { 42, 42 },  { 10, 10 },  { 16, 16 } }       },\n\t{ CYCLES_IMUL32_MEM_IMM_REG,{ { 43, 43 },  { 42, 42 },  { 10, 10 },  { 16, 16 } }       },\n\t{ CYCLES_DIV8_ACC_REG,      { { 14, 14 },  { 16, 16 },  { 17, 17 },  { 20, 20 } }       },\n\t{ CYCLES_DIV8_ACC_MEM,      { { 17, 17 },  { 16, 16 },  { 17, 17 },  { 20, 20 } }       },\n\t{ CYCLES_DIV16_ACC_REG,     { { 22, 22 },  { 24, 24 },  { 25, 25 },  { 29, 29 } }       },\n\t{ CYCLES_DIV16_ACC_MEM,     { { 25, 25 },  { 24, 24 },  { 25, 25 },  { 29, 29 } }       },\n\t{ CYCLES_DIV32_ACC_REG,     { { 38, 38 },  { 40, 40 },  { 41, 41 },  { 45, 45 } }       },\n\t{ CYCLES_DIV32_ACC_MEM,     { { 41, 41 },  { 40, 40 },  { 41, 41 },  { 45, 45 } }       },\n\t{ CYCLES_IDIV8_ACC_REG,     { { 19, 19 },  { 19, 19 },  { 22, 22 },  { 20, 20 } }       },\n\t{ CYCLES_IDIV8_ACC_MEM,     { { 22, 22 },  { 20, 20 },  { 22, 22 },  { 20, 20 } }       },\n\t{ CYCLES_IDIV16_ACC_REG,    { { 27, 27 },  { 27, 27 },  { 30, 30 },  { 29, 29 } }       },\n\t{ CYCLES_IDIV16_ACC_MEM,    { { 30, 30 },  { 28, 28 },  { 30, 30 },  { 29, 29 } }       },\n\t{ CYCLES_IDIV32_ACC_REG,    { { 43, 43 },  { 43, 43 },  { 46, 46 },  { 45, 45 } }       },\n\t{ CYCLES_IDIV32_ACC_MEM,    { { 46, 46 },  { 44, 44 },  { 46, 46 },  { 45, 45 } }       },\n\t{ CYCLES_AAD,               { { 19, 19 },  { 14, 14 },  { 10, 10 },  {  7,  7 } }       },\n\t{ CYCLES_AAM,               { { 17, 17 },  { 15, 15 },  { 18, 18 },  { 19, 19 } }       },\n\t{ CYCLES_CBW,               { {  3,  3 },  {  3,  3 },  {  3,  3 },  {  3,  3 } }       },\n\t{ CYCLES_CWD,               { {  2,  2 },  {  3,  3 },  {  2,  2 },  {  2,  2 } }       },\n\t{ CYCLES_ROTATE_REG,        { {  3,  3 },  {  3,  3 },  {  1,  1 },  {  2,  2 } }       },\n\t{ CYCLES_ROTATE_MEM,        { {  7,  7 },  {  4,  4 },  {  3,  3 },  {  2,  2 } }       },\n\t{ CYCLES_ROTATE_CARRY_REG,  { {  9,  9 },  {  8,  8 },  {  7,  7 },  {  8,  8 } }       },\n\t{ CYCLES_ROTATE_CARRY_MEM,  { { 10, 10 },  {  9,  9 },  {  8,  8 },  {  8,  8 } }       },\n\t{ CYCLES_SHLD_REG,          { {  3,  3 },  {  2,  2 },  {  4,  4 },  {  3,  3 } }       },\n\t{ CYCLES_SHLD_MEM,          { {  7,  7 },  {  3,  3 },  {  4,  4 },  {  6,  6 } }       },\n\t{ CYCLES_SHRD_REG,          { {  3,  3 },  {  2,  2 },  {  4,  4 },  {  3,  3 } }       },\n\t{ CYCLES_SHRD_MEM,          { {  7,  7 },  {  3,  3 },  {  4,  4 },  {  6,  6 } }       },\n\t{ CYCLES_NOT_REG,           { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_NOT_MEM,           { {  6,  6 },  {  3,  3 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_CMPS,              { { 10, 10 },  {  8,  8 },  {  5,  5 },  {  6,  6 } }       },\n\t{ CYCLES_INS,               { { 15, 29 },  { 17, 30 },  {  9, 22 },  { 11, 11 } }       },\n\t{ CYCLES_LODS,              { {  5,  5 },  {  5,  5 },  {  2,  2 },  {  3,  3 } }       },\n\t{ CYCLES_MOVS,              { {  8,  8 },  {  7,  7 },  {  4,  4 },  {  6,  6 } }       },\n\t{ CYCLES_OUTS,              { { 14, 28 },  { 17, 30 },  { 13, 25 },  { 15, 15 } }       },\n\t{ CYCLES_SCAS,              { {  8,  8 },  {  6,  6 },  {  4,  4 },  {  2,  2 } }       },\n\t{ CYCLES_STOS,              { {  5,  5 },  {  5,  5 },  {  3,  3 },  {  2,  2 } }       },\n\t{ CYCLES_XLAT,              { {  5,  5 },  {  4,  4 },  {  4,  4 },  {  5,  5 } }       },\n\t{ CYCLES_REP_CMPS_BASE,     { {  5,  5 },  {  0,  0 },  {  0,  0 },  { 11, 11 } }       },\n\t{ CYCLES_REP_INS_BASE,      { { 14,  8 },  {  0,  0 },  {  0,  0 },  { 17, 17 } }       },\n\t{ CYCLES_REP_LODS_BASE,     { {  5,  5 },  {  0,  0 },  {  0,  0 },  {  9,  9 } }       },\n\t{ CYCLES_REP_MOVS_BASE,     { {  8,  8 },  {  0,  0 },  {  0,  0 },  { 12, 12 } }       },\n\t{ CYCLES_REP_OUTS_BASE,     { { 12,  6 },  {  0,  0 },  {  0,  0 },  { 24, 24 } }       },\n\t{ CYCLES_REP_SCAS_BASE,     { {  5,  5 },  {  0,  0 },  {  0,  0 },  {  9,  9 } }       },\n\t{ CYCLES_REP_STOS_BASE,     { {  5,  5 },  {  0,  0 },  {  0,  0 },  {  9,  9 } }       },\n\t{ CYCLES_REP_CMPS,          { {  5,  5 },  {  8,  8 },  {  5,  5 },  {  4,  4 } }       },\n\t{ CYCLES_REP_INS,           { { 14,  8 },  { 17, 30 },  {  9, 22 },  {  4,  4 } }       },\n\t{ CYCLES_REP_LODS,          { {  5,  5 },  {  5,  5 },  {  2,  2 },  {  2,  2 } }       },\n\t{ CYCLES_REP_MOVS,          { {  8,  8 },  {  7,  7 },  {  4,  4 },  {  2,  2 } }       },\n\t{ CYCLES_REP_OUTS,          { { 12,  6 },  { 17, 30 },  { 13, 25 },  {  4,  4 } }       },\n\t{ CYCLES_REP_SCAS,          { {  5,  5 },  {  6,  6 },  {  4,  4 },  {  3,  3 } }       },\n\t{ CYCLES_REP_STOS,          { {  5,  5 },  {  5,  5 },  {  3,  3 },  {  2,  2 } }       },\n\t{ CYCLES_BSF_BASE,          { { 11, 11 },  {  6,  6 },  {  6,  6 },  {  4,  4 } }       },\n\t{ CYCLES_BSF,               { {  3,  3 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_BSR_BASE,          { {  9,  9 },  {  6,  6 },  {  7,  7 },  {  4,  4 } }       },\n\t{ CYCLES_BSR,               { {  3,  3 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_BT_IMM_REG,        { {  3,  3 },  {  3,  3 },  {  4,  4 },  {  1,  1 } }       },\n\t{ CYCLES_BT_IMM_MEM,        { {  6,  6 },  {  6,  6 },  {  4,  4 },  {  1,  1 } }       },\n\t{ CYCLES_BT_REG_REG,        { {  3,  3 },  {  3,  3 },  {  4,  4 },  {  1,  1 } }       },\n\t{ CYCLES_BT_REG_MEM,        { { 12, 12 },  { 12, 12 },  {  9,  9 },  {  7,  7 } }       },\n\t{ CYCLES_BTC_IMM_REG,       { {  6,  6 },  {  6,  6 },  {  7,  7 },  {  2,  2 } }       },\n\t{ CYCLES_BTC_IMM_MEM,       { {  8,  8 },  {  8,  8 },  {  8,  8 },  {  2,  2 } }       },\n\t{ CYCLES_BTC_REG_REG,       { {  6,  6 },  {  6,  6 },  {  7,  7 },  {  2,  2 } }       },\n\t{ CYCLES_BTC_REG_MEM,       { { 13, 13 },  { 13, 13 },  { 13, 13 },  {  8,  8 } }       },\n\t{ CYCLES_BTR_IMM_REG,       { {  6,  6 },  {  6,  6 },  {  7,  7 },  {  2,  2 } }       },\n\t{ CYCLES_BTR_IMM_MEM,       { {  8,  8 },  {  8,  8 },  {  8,  8 },  {  2,  2 } }       },\n\t{ CYCLES_BTR_REG_REG,       { {  6,  6 },  {  6,  6 },  {  7,  7 },  {  2,  2 } }       },\n\t{ CYCLES_BTR_REG_MEM,       { { 13, 13 },  { 13, 13 },  { 13, 13 },  {  8,  8 } }       },\n\t{ CYCLES_BTS_IMM_REG,       { {  6,  6 },  {  6,  6 },  {  7,  7 },  {  2,  2 } }       },\n\t{ CYCLES_BTS_IMM_MEM,       { {  8,  8 },  {  8,  8 },  {  8,  8 },  {  2,  2 } }       },\n\t{ CYCLES_BTS_REG_REG,       { {  6,  6 },  {  6,  6 },  {  7,  7 },  {  2,  2 } }       },\n\t{ CYCLES_BTS_REG_MEM,       { { 13, 13 },  { 13, 13 },  { 13, 13 },  {  8,  8 } }       },\n\t{ CYCLES_CALL,              { {  7,  7 },  {  3,  3 },  {  1,  1 },  {  3,  3 } }       },\n\t{ CYCLES_CALL_REG,          { {  7,  7 },  {  5,  5 },  {  2,  2 },  {  3,  3 } }       },\n\t{ CYCLES_CALL_MEM,          { { 10, 10 },  {  5,  5 },  {  2,  2 },  {  4,  4 } }       },\n\t{ CYCLES_CALL_INTERSEG,     { { 17, 34 },  { 18, 20 },  {  4, 13 },  {  9, 14 } }       },\n\t{ CYCLES_CALL_REG_INTERSEG, { { 22, 38 },  { 17, 20 },  {  4, 14 },  { 11, 15 } }       },\n\t{ CYCLES_CALL_MEM_INTERSEG, { { 22, 38 },  { 17, 20 },  {  4, 14 },  { 11, 15 } }       },\n\t{ CYCLES_JMP_SHORT,         { {  7,  7 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_JMP,               { {  7,  7 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_JMP_REG,           { {  7,  7 },  {  5,  5 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_JMP_MEM,           { { 10, 10 },  {  5,  5 },  {  2,  2 },  {  3,  3 } }       },\n\t{ CYCLES_JMP_INTERSEG,      { { 12, 27 },  { 17, 19 },  {  3,  3 },  {  8, 12 } }       },\n\t{ CYCLES_JMP_REG_INTERSEG,  { { 17, 31 },  { 13, 18 },  {  4,  4 },  { 10, 10 } }       },\n\t{ CYCLES_JMP_MEM_INTERSEG,  { { 17, 31 },  { 13, 18 },  {  4,  4 },  { 10, 13 } }       },\n\t{ CYCLES_RET,               { { 10, 10 },  {  5,  5 },  {  2,  2 },  {  3,  3 } }       },\n\t{ CYCLES_RET_IMM,           { { 10, 10 },  {  5,  5 },  {  2,  2 },  {  3,  3 } }       },\n\t{ CYCLES_RET_INTERSEG,      { { 18, 32 },  { 13, 13 },  {  4,  4 },  { 10, 13 } }       },\n\t{ CYCLES_RET_IMM_INTERSEG,  { { 18, 32 },  { 14, 14 },  {  4,  4 },  { 10, 13 } }       },\n\t{ CYCLES_JCC_DISP8,         { {  7,  7 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_JCC_FULL_DISP,     { {  7,  7 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_JCC_DISP8_NOBRANCH,{ {  3,  3 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_JCC_FULL_DISP_NOBRANCH,{ {  3,  3 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_JCXZ,              { {  9,  9 },  {  1,  1 },  {  1,  1 },  {  2,  2 } }       },\n\t{ CYCLES_JCXZ_NOBRANCH,     { {  5,  5 },  {  1,  1 },  {  1,  1 },  {  2,  2 } }       },\n\t{ CYCLES_LOOP,              { { 11, 11 },  {  6,  6 },  {  5,  5 },  {  2,  2 } }       },\n\t{ CYCLES_LOOPZ,             { { 11, 11 },  {  9,  9 },  {  8,  8 },  {  2,  2 } }       },\n\t{ CYCLES_LOOPNZ,            { { 11, 11 },  {  9,  9 },  {  8,  8 },  {  2,  2 } }       },\n\t{ CYCLES_SETCC_REG,         { {  4,  4 },  {  3,  3 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_SETCC_MEM,         { {  5,  5 },  {  4,  4 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_ENTER,             { { 10, 10 },  { 14, 14 },  { 11, 11 },  { 13, 13 } }       },\n\t{ CYCLES_LEAVE,             { {  4,  4 },  {  5,  5 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_INT,               { { 37, 37 },  { 30, 30 },  { 16, 16 },  { 19, 19 } }       },\n\t{ CYCLES_INT3,              { { 33, 33 },  { 26, 26 },  { 13, 13 },  { 19, 19 } }       },\n\t{ CYCLES_INTO_OF1,          { { 35, 35 },  { 28, 28 },  { 13, 13 },  { 19, 19 } }       },\n\t{ CYCLES_INTO_OF0,          { {  3,  3 },  {  3,  3 },  {  4,  4 },  {  4,  4 } }       },\n\t{ CYCLES_BOUND_IN_RANGE,    { { 10, 10 },  {  7,  7 },  {  8,  8 },  {  7,  7 } }       },\n\t{ CYCLES_BOUND_OUT_RANGE,   { { 44, 44 },  {  7,  7 },  {  8,  8 },  {  8,  8 } }       },\n\t{ CYCLES_IRET,              { { 22, 22 },  { 15, 15 },  {  8,  8 },  { 13, 13 } }       },\n\t{ CYCLES_HLT,               { {  5,  5 },  {  4,  4 },  {  4,  4 },  { 10, 10 } }       },\n\t{ CYCLES_MOV_REG_CR0,       { { 11, 11 },  { 16, 16 },  { 16, 16 },  { 20, 18 } }       },\n\t{ CYCLES_MOV_REG_CR2,       { {  4,  4 },  {  4,  4 },  {  4,  4 },  {  5,  5 } }       },\n\t{ CYCLES_MOV_REG_CR3,       { {  5,  5 },  {  4,  4 },  {  4,  4 },  {  5,  6 } }       },\n\t{ CYCLES_MOV_CR_REG,        { {  6,  6 },  {  4,  4 },  {  4,  4 },  {  6,  6 } }       },\n\t{ CYCLES_MOV_REG_DR0_3,     { { 22, 22 },  { 10, 10 },  { 10, 10 },  { 10, 10 } }       },\n\t{ CYCLES_MOV_REG_DR6_7,     { { 16, 16 },  { 10, 10 },  { 10, 10 },  { 10, 10 } }       },\n\t{ CYCLES_MOV_DR6_7_REG,     { { 14, 14 },  { 11, 11 },  { 11, 11 },  {  9,  9 } }       },\n\t{ CYCLES_MOV_DR0_3_REG,     { { 22, 22 },  { 11, 11 },  { 11, 11 },  {  9,  9 } }       },\n\t{ CYCLES_MOV_REG_TR6_7,     { { 12, 12 },  {  4,  4 },  {  4,  4 },  { 11, 11 } }       },\n\t{ CYCLES_MOV_TR6_7_REG,     { { 12, 12 },  {  3,  3 },  {  3,  3 },  {  3,  3 } }       },\n\t{ CYCLES_NOP,               { {  3,  3 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_WAIT,              { {  7,  7 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_ARPL_REG,          { {  0, 20 },  {  0,  9 },  {  0,  7 },  {  0,  9 } }       },\n\t{ CYCLES_ARPL_MEM,          { {  0, 21 },  {  0,  9 },  {  0,  7 },  {  0,  9 } }       },\n\t{ CYCLES_LAR_REG,           { {  0, 15 },  { 11, 11 },  {  8,  8 },  {  0,  9 } }       },\n\t{ CYCLES_LAR_MEM,           { {  0, 16 },  { 11, 11 },  {  8,  8 },  {  0,  9 } }       },\n\t{ CYCLES_LGDT,              { { 11, 11 },  { 11, 11 },  {  6,  6 },  { 10, 10 } }       },\n\t{ CYCLES_LIDT,              { { 11, 11 },  { 11, 11 },  {  6,  6 },  { 10, 10 } }       },\n\t{ CYCLES_LLDT_REG,          { {  0, 20 },  { 11, 11 },  {  9,  9 },  {  0,  8 } }       },\n\t{ CYCLES_LLDT_MEM,          { {  0, 24 },  { 11, 11 },  {  9,  9 },  {  0,  8 } }       },\n\t{ CYCLES_LMSW_REG,          { { 11, 11 },  { 13, 13 },  {  8,  8 },  { 11, 11 } }       },\n\t{ CYCLES_LMSW_MEM,          { { 14, 14 },  { 13, 13 },  {  8,  8 },  { 11, 11 } }       },\n\t{ CYCLES_LSL_REG,           { {  0, 21 },  { 10, 10 },  {  8,  8 },  {  0,  9 } }       },\n\t{ CYCLES_LSL_MEM,           { {  0, 22 },  { 10, 10 },  {  8,  8 },  {  0,  9 } }       },\n\t{ CYCLES_LTR_REG,           { {  0, 23 },  { 20, 20 },  { 10, 10 },  {  0,  9 } }       },\n\t{ CYCLES_LTR_MEM,           { {  0, 27 },  { 20, 20 },  { 10, 10 },  {  0,  9 } }       },\n\t{ CYCLES_SGDT,              { {  9,  9 },  { 10, 10 },  {  4,  4 },  {  6,  6 } }       },\n\t{ CYCLES_SIDT,              { {  9,  9 },  { 10, 10 },  {  4,  4 },  {  6,  6 } }       },\n\t{ CYCLES_SLDT_REG,          { {  0,  2 },  {  2,  2 },  {  2,  2 },  {  0,  1 } }       },\n\t{ CYCLES_SLDT_MEM,          { {  0,  2 },  {  3,  3 },  {  2,  2 },  {  0,  1 } }       },\n\t{ CYCLES_SMSW_REG,          { {  2,  2 },  {  2,  2 },  {  4,  4 },  {  4,  4 } }       },\n\t{ CYCLES_SMSW_MEM,          { {  2,  2 },  {  3,  3 },  {  4,  4 },  {  4,  4 } }       },\n\t{ CYCLES_STR_REG,           { {  0,  2 },  {  2,  2 },  {  2,  2 },  {  0,  3 } }       },\n\t{ CYCLES_STR_MEM,           { {  0,  2 },  {  3,  3 },  {  2,  2 },  {  0,  3 } }       },\n\t{ CYCLES_VERR_REG,          { {  0, 10 },  { 11, 11 },  {  7,  7 },  {  0,  8 } }       },\n\t{ CYCLES_VERR_MEM,          { {  0, 11 },  { 11, 11 },  {  7,  7 },  {  0,  8 } }       },\n\t{ CYCLES_VERW_REG,          { {  0, 15 },  { 11, 11 },  {  7,  7 },  {  0,  8 } }       },\n\t{ CYCLES_VERW_MEM,          { {  0, 16 },  { 11, 11 },  {  7,  7 },  {  0,  8 } }       },\n\t{ CYCLES_LOCK,              { {  0,  0 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\n\t// i486+\n\t{ CYCLES_BSWAP,             { {  0,  0 },  {  1,  1 },  {  1,  1 },  {  6,  6 } }       },\n\t{ CYCLES_CMPXCHG,           { {  0,  0 },  {  6,  6 },  {  5,  5 },  {  6,  6 } }       },\n\t{ CYCLES_INVD,              { {  0,  0 },  {  4,  4 },  { 15, 15 },  { 20, 20 } }       },\n\t{ CYCLES_XADD,              { {  0,  0 },  {  4,  4 },  {  4,  4 },  {  2,  2 } }       },\n\n\t// Pentium+\n\t{ CYCLES_CMPXCHG8B,         { {  0,  0 },  {  0,  0 },  { 10, 10 },  {  6,  6 } }       },\n\t{ CYCLES_CPUID,             { {  0,  0 },  {  0,  0 },  { 14, 14 },  { 12, 12 } }       },\n\t{ CYCLES_CPUID_EAX1,        { {  0,  0 },  {  0,  0 },  { 14, 14 },  { 12, 12 } }       },\n\t{ CYCLES_RDTSC,             { {  0,  0 },  {  0,  0 },  { 20, 20 },  {  1,  1 } }       },\n\t{ CYCLES_RSM,               { {  0,  0 },  {  0,  0 },  { 82, 82 },  { 57, 57 } }       },\n\t{ CYCLES_RDMSR,             { {  0,  0 },  {  0,  0 },  { 20, 20 },  {  1,  1 } }       },\n\n\t// FPU\n\t{ CYCLES_FABS,              { {  0,  0 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_FADD,              { {  0,  0 },  {  8,  8 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_FBLD,              { {  0,  0 },  { 70, 70 },  { 48, 48 },  {  1,  1 } }       },\n\t{ CYCLES_FBSTP,             { {  0,  0 },  {172,172 },  {148,148 },  {  1,  1 } }       },\n\t{ CYCLES_FCHS,              { {  0,  0 },  {  6,  6 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_FCLEX,             { {  0,  0 },  {  7,  7 },  {  9,  9 },  {  1,  1 } }       },\n\t{ CYCLES_FCOM,              { {  0,  0 },  {  4,  4 },  {  4,  4 },  {  1,  1 } }       },\n\t{ CYCLES_FCOS,              { {  0,  0 },  {255,255 },  {124,124 },  {  1,  1 } }       },\n\t{ CYCLES_FDECSTP,           { {  0,  0 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_FDISI,             { {  0,  0 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_FDIV,              { {  0,  0 },  { 73, 73 },  { 39, 39 },  {  1,  1 } }       },\n\t{ CYCLES_FDIVR,             { {  0,  0 },  { 73, 73 },  { 39, 39 },  {  1,  1 } }       },\n\t{ CYCLES_FENI,              { {  0,  0 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_FFREE,             { {  0,  0 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_FIADD,             { {  0,  0 },  { 20, 20 },  {  7,  7 },  {  1,  1 } }       },\n\t{ CYCLES_FICOM,             { {  0,  0 },  { 16, 16 },  {  8,  8 },  {  1,  1 } }       },\n\t{ CYCLES_FIDIV,             { {  0,  0 },  { 85, 85 },  { 42, 42 },  {  1,  1 } }       },\n\t{ CYCLES_FILD,              { {  0,  0 },  { 13, 13 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_FIMUL,             { {  0,  0 },  { 23, 23 },  {  7,  7 },  {  1,  1 } }       },\n\t{ CYCLES_FINCSTP,           { {  0,  0 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_FINIT,             { {  0,  0 },  { 17, 17 },  { 16, 16 },  {  1,  1 } }       },\n\t{ CYCLES_FIST,              { {  0,  0 },  { 29, 29 },  {  6,  6 },  {  1,  1 } }       },\n\t{ CYCLES_FISUB,             { {  0,  0 },  { 20, 20 },  {  7,  7 },  {  1,  1 } }       },\n\t{ CYCLES_FLD,               { {  0,  0 },  {  4,  4 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_FLDZ,              { {  0,  0 },  {  4,  4 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_FLD1,              { {  0,  0 },  {  4,  4 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_FLDL2E,            { {  0,  0 },  {  8,  8 },  {  5,  5 },  {  1,  1 } }       },\n\t{ CYCLES_FLDL2T,            { {  0,  0 },  {  8,  8 },  {  5,  5 },  {  1,  1 } }       },\n\t{ CYCLES_FLDLG2,            { {  0,  0 },  {  8,  8 },  {  5,  5 },  {  1,  1 } }       },\n\t{ CYCLES_FLDLN2,            { {  0,  0 },  {  8,  8 },  {  5,  5 },  {  1,  1 } }       },\n\t{ CYCLES_FLDPI,             { {  0,  0 },  {  8,  8 },  {  5,  5 },  {  1,  1 } }       },\n\t{ CYCLES_FLDCW,             { {  0,  0 },  {  4,  4 },  {  7,  7 },  {  1,  1 } }       },\n\t{ CYCLES_FLDENV,            { {  0,  0 },  { 44, 44 },  { 37, 37 },  {  1,  1 } }       },\n\t{ CYCLES_FMUL,              { {  0,  0 },  { 16, 16 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_FNOP,              { {  0,  0 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_FPATAN,            { {  0,  0 },  {218,218 },  {173,173 },  {  1,  1 } }       },\n\t{ CYCLES_FPREM,             { {  0,  0 },  { 70, 70 },  { 16, 16 },  {  1,  1 } }       },\n\t{ CYCLES_FPREM1,            { {  0,  0 },  { 72, 72 },  { 20, 20 },  {  1,  1 } }       },\n\t{ CYCLES_FPTAN,             { {  0,  0 },  {200,200 },  {173,173 },  {  1,  1 } }       },\n\t{ CYCLES_FRNDINT,           { {  0,  0 },  { 21, 21 },  {  9,  9 },  {  1,  1 } }       },\n\t{ CYCLES_FRSTOR,            { {  0,  0 },  {131,131 },  { 75, 75 },  {  1,  1 } }       },\n\t{ CYCLES_FSAVE,             { {  0,  0 },  {154,154 },  {127,127 },  {  1,  1 } }       },\n\t{ CYCLES_FSCALE,            { {  0,  0 },  { 30, 30 },  { 20, 20 },  {  1,  1 } }       },\n\t{ CYCLES_FSETPM,            { {  0,  0 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_FSIN,              { {  0,  0 },  {255,255 },  {126,126 },  {  1,  1 } }       },\n\t{ CYCLES_FSINCOS,           { {  0,  0 },  {255,255 },  {137,137 },  {  1,  1 } }       },\n\t{ CYCLES_FSQRT,             { {  0,  0 },  { 83, 83 },  { 70, 70 },  {  1,  1 } }       },\n\t{ CYCLES_FST,               { {  0,  0 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_FSTCW,             { {  0,  0 },  {  3,  3 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_FSTENV,            { {  0,  0 },  { 67, 67 },  { 48, 48 },  {  1,  1 } }       },\n\t{ CYCLES_FSTSW,             { {  0,  0 },  {  3,  3 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_FSUB,              { {  0,  0 },  {  8,  8 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_FSUBR,             { {  0,  0 },  {  8,  8 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_FTST,              { {  0,  0 },  {  4,  4 },  {  4,  4 },  {  1,  1 } }       },\n\t{ CYCLES_FUCOM,             { {  0,  0 },  {  4,  4 },  {  4,  4 },  {  1,  1 } }       },\n\t{ CYCLES_FXAM,              { {  0,  0 },  {  8,  8 },  { 21, 21 },  {  1,  1 } }       },\n\t{ CYCLES_FXCH,              { {  0,  0 },  {  4,  4 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_FXTRACT,           { {  0,  0 },  { 16, 16 },  { 13, 13 },  {  1,  1 } }       },\n\t{ CYCLES_FYL2X,             { {  0,  0 },  {196,196 },  {111,111 },  {  1,  1 } }       },\n\t{ CYCLES_FYL2XPI,           { {  0,  0 },  {171,171 },  {103,103 },  {  1,  1 } }       },\n\t{ CYCLES_CMPXCHG_REG_REG_T, { {  0,  0 },  {  6,  6 },  {  6,  6 },  {  6,  6 } }       },\n\t{ CYCLES_CMPXCHG_REG_REG_F, { {  0,  0 },  {  9,  9 },  {  9,  9 },  {  9,  9 } }       },\n\t{ CYCLES_CMPXCHG_REG_MEM_T, { {  0,  0 },  {  7,  7 },  {  7,  7 },  {  7,  7 } }       },\n\t{ CYCLES_CMPXCHG_REG_MEM_F, { {  0,  0 },  { 10, 10 },  { 10, 10 },  { 10, 10 } }       },\n};\n\n#endif /* __CYCLES_H__ */\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386/i386.c",
    "content": "// license:BSD-3-Clause\n// copyright-holders:Ville Linde, Barry Rodewald, Carl, Phil Bennett\n/*\n    Intel 386 emulator\n\n    Written by Ville Linde\n\n    Currently supports:\n        Intel 386\n        Intel 486\n        Intel Pentium\n        Cyrix MediaGX\n        Intel Pentium MMX\n        Intel Pentium Pro\n        Intel Pentium II\n        Intel Pentium III\n        Intel Pentium 4\n*/\n\n//#include \"emu.h\"\n//#include \"debugger.h\"\n#include \"i386priv.h\"\n//#include \"i386.h\"\n\n//#include \"debug/debugcpu.h\"\n\n/* seems to be defined on mingw-gcc */\n#undef i386\n\nstatic CPU_RESET( CPU_MODEL );\n\nint i386_parity_table[256];\nMODRM_TABLE i386_MODRM_table[256];\n\nstatic void i386_trap_with_error(int irq, int irq_gate, int trap_level, UINT32 err);\nstatic void i286_task_switch(UINT16 selector, UINT8 nested);\nstatic void i386_task_switch(UINT16 selector, UINT8 nested);\nstatic void build_opcode_table(UINT32 features);\nstatic void zero_state();\nstatic void pentium_smi();\n\n#define FAULT(fault,error) {m_ext = 1; i386_trap_with_error(fault,0,0,error); return;}\n#define FAULT_EXP(fault,error) {m_ext = 1; i386_trap_with_error(fault,0,trap_level+1,error); return;}\n\n/*************************************************************************/\n\nstatic UINT32 i386_load_protected_mode_segment(I386_SREG *seg, UINT64 *desc )\n{\n\tUINT32 v1,v2;\n\tUINT32 base, limit;\n\tint entry;\n\n\tif(!seg->selector)\n\t{\n\t\tseg->flags = 0;\n\t\tseg->base = 0;\n\t\tseg->limit = 0;\n\t\tseg->d = 0;\n\t\tseg->valid = false;\n\t\treturn 0;\n\t}\n\n\tif ( seg->selector & 0x4 )\n\t{\n\t\tbase = m_ldtr.base;\n\t\tlimit = m_ldtr.limit;\n\t} else {\n\t\tbase = m_gdtr.base;\n\t\tlimit = m_gdtr.limit;\n\t}\n\n\tentry = seg->selector & ~0x7;\n\tif (limit == 0 || entry + 7 > limit)\n\t\treturn 0;\n\n\tv1 = READ32PL0(base + entry );\n\tv2 = READ32PL0(base + entry + 4 );\n\n\tseg->flags = (v2 >> 8) & 0xf0ff;\n\tseg->base = (v2 & 0xff000000) | ((v2 & 0xff) << 16) | ((v1 >> 16) & 0xffff);\n\tseg->limit = (v2 & 0xf0000) | (v1 & 0xffff);\n\tif (seg->flags & 0x8000)\n\t\tseg->limit = (seg->limit << 12) | 0xfff;\n\tseg->d = (seg->flags & 0x4000) ? 1 : 0;\n\tseg->valid = true;\n\n\tif(desc)\n\t\t*desc = ((UINT64)v2<<32)|v1;\n\treturn 1;\n}\n\nstatic void i386_load_call_gate(I386_CALL_GATE *gate)\n{\n\tUINT32 v1,v2;\n\tUINT32 base,limit;\n\tint entry;\n\n\tif ( gate->segment & 0x4 )\n\t{\n\t\tbase = m_ldtr.base;\n\t\tlimit = m_ldtr.limit;\n\t} else {\n\t\tbase = m_gdtr.base;\n\t\tlimit = m_gdtr.limit;\n\t}\n\n\tentry = gate->segment & ~0x7;\n\tif (limit == 0 || entry + 7 > limit)\n\t\treturn;\n\n\tv1 = READ32PL0(base + entry );\n\tv2 = READ32PL0(base + entry + 4 );\n\n\t/* Note that for task gates, offset and dword_count are not used */\n\tgate->selector = (v1 >> 16) & 0xffff;\n\tgate->offset = (v1 & 0x0000ffff) | (v2 & 0xffff0000);\n\tgate->ar = (v2 >> 8) & 0xff;\n\tgate->dword_count = v2 & 0x001f;\n\tgate->present = (gate->ar >> 7) & 0x01;\n\tgate->dpl = (gate->ar >> 5) & 0x03;\n}\n\nstatic void i386_set_descriptor_accessed(UINT16 selector)\n{\n\t// assume the selector is valid, we don't need to check it again\n\tUINT32 base, addr;\n\tUINT8 rights;\n\tif(!(selector & ~3))\n\t\treturn;\n\n\tif ( selector & 0x4 )\n\t\tbase = m_ldtr.base;\n\telse\n\t\tbase = m_gdtr.base;\n\n\taddr = base + (selector & ~7) + 5;\n\ti386_translate_address(TRANSLATE_READ, &addr, NULL);\n\trights = read_byte(addr);\n\t// Should a fault be thrown if the table is read only?\n\twrite_byte(addr, rights | 1);\n}\n//\nvoid load_segment_descriptor_wine(int sreg);\n//\nstatic void i386_load_segment_descriptor(int segment )\n{\n\tif (PROTECTED_MODE)\n\t{\n\t\tif (!V8086_MODE)\n\t\t{\n\t\t\ti386_load_protected_mode_segment(&m_sreg[segment], NULL );\n\t\t\tif(m_sreg[segment].selector)\n\t\t\t\ti386_set_descriptor_accessed(m_sreg[segment].selector);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_sreg[segment].base = m_sreg[segment].selector << 4;\n\t\t\tm_sreg[segment].limit = 0xffff;\n\t\t\tm_sreg[segment].flags = (segment == CS) ? 0x00fb : 0x00f3;\n\t\t\tm_sreg[segment].d = 0;\n\t\t\tm_sreg[segment].valid = true;\n\t\t}\n\t}\n\telse\n\t{\n\t\tm_sreg[segment].base = m_sreg[segment].selector << 4;\n\t\t//\n\t\t//load_segment_descriptor_wine(segment);\n\t\t//\n\t\tm_sreg[segment].d = 0;\n\t\tm_sreg[segment].valid = true;\n\n\t\tif( segment == CS && !m_performed_intersegment_jump )\n\t\t\tm_sreg[segment].base |= 0xfff00000;\n\t}\n}\n\n/* Retrieves the stack selector located in the current TSS */\nstatic UINT32 i386_get_stack_segment(UINT8 privilege)\n{\n\tUINT32 ret;\n\tif(privilege >= 3)\n\t\treturn 0;\n\n\tif(m_task.flags & 8)\n\t\tret = READ32PL0((m_task.base+8) + (8*privilege));\n\telse\n\t\tret = READ16PL0((m_task.base+4) + (4*privilege));\n\n\treturn ret;\n}\n\n/* Retrieves the stack pointer located in the current TSS */\nstatic UINT32 i386_get_stack_ptr(UINT8 privilege)\n{\n\tUINT32 ret;\n\tif(privilege >= 3)\n\t\treturn 0;\n\n\tif(m_task.flags & 8)\n\t\tret = READ32PL0((m_task.base+4) + (8*privilege));\n\telse\n\t\tret = READ16PL0((m_task.base+2) + (4*privilege));\n\n\treturn ret;\n}\n\nstatic UINT32 get_flags()\n{\n\tUINT32 f = 0x2;\n\tf |= m_CF;\n\tf |= m_PF << 2;\n\tf |= m_AF << 4;\n\tf |= m_ZF << 6;\n\tf |= m_SF << 7;\n\tf |= m_TF << 8;\n\tf |= m_IF << 9;\n\tf |= m_DF << 10;\n\tf |= m_OF << 11;\n\tf |= m_IOP1 << 12;\n\tf |= m_IOP2 << 13;\n\tf |= m_NT << 14;\n\tf |= m_RF << 16;\n\tf |= m_VM << 17;\n\tf |= m_AC << 18;\n\tf |= m_VIF << 19;\n\tf |= m_VIP << 20;\n\tf |= m_ID << 21;\n\treturn (m_eflags & ~m_eflags_mask) | (f & m_eflags_mask);\n}\n\nstatic void set_flags(UINT32 f )\n{\n\tm_CF = (f & 0x1) ? 1 : 0;\n\tm_PF = (f & 0x4) ? 1 : 0;\n\tm_AF = (f & 0x10) ? 1 : 0;\n\tm_ZF = (f & 0x40) ? 1 : 0;\n\tm_SF = (f & 0x80) ? 1 : 0;\n\tm_TF = (f & 0x100) ? 1 : 0;\n\tm_IF = (f & 0x200) ? 1 : 0;\n\tm_DF = (f & 0x400) ? 1 : 0;\n\tm_OF = (f & 0x800) ? 1 : 0;\n\tm_IOP1 = (f & 0x1000) ? 1 : 0;\n\tm_IOP2 = (f & 0x2000) ? 1 : 0;\n\tm_NT = (f & 0x4000) ? 1 : 0;\n\tm_RF = (f & 0x10000) ? 1 : 0;\n\tm_VM = (f & 0x20000) ? 1 : 0;\n\tm_AC = (f & 0x40000) ? 1 : 0;\n\tm_VIF = (f & 0x80000) ? 1 : 0;\n\tm_VIP = (f & 0x100000) ? 1 : 0;\n\tm_ID = (f & 0x200000) ? 1 : 0;\n\tm_eflags = f & m_eflags_mask;\n}\n\nstatic void sib_byte(UINT8 mod, UINT32* out_ea, UINT8* out_segment)\n{\n\tUINT32 ea = 0;\n\tUINT8 segment = 0;\n\tUINT8 scale, i, base;\n\tUINT8 sib = FETCH();\n\tscale = (sib >> 6) & 0x3;\n\ti = (sib >> 3) & 0x7;\n\tbase = sib & 0x7;\n\n\tswitch( base )\n\t{\n\t\tcase 0: ea = REG32(EAX); segment = DS; break;\n\t\tcase 1: ea = REG32(ECX); segment = DS; break;\n\t\tcase 2: ea = REG32(EDX); segment = DS; break;\n\t\tcase 3: ea = REG32(EBX); segment = DS; break;\n\t\tcase 4: ea = REG32(ESP); segment = SS; break;\n\t\tcase 5:\n\t\t\tif( mod == 0 ) {\n\t\t\t\tea = FETCH32();\n\t\t\t\tsegment = DS;\n\t\t\t} else if( mod == 1 ) {\n\t\t\t\tea = REG32(EBP);\n\t\t\t\tsegment = SS;\n\t\t\t} else if( mod == 2 ) {\n\t\t\t\tea = REG32(EBP);\n\t\t\t\tsegment = SS;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6: ea = REG32(ESI); segment = DS; break;\n\t\tcase 7: ea = REG32(EDI); segment = DS; break;\n\t}\n\tswitch( i )\n\t{\n\t\tcase 0: ea += REG32(EAX) * (1 << scale); break;\n\t\tcase 1: ea += REG32(ECX) * (1 << scale); break;\n\t\tcase 2: ea += REG32(EDX) * (1 << scale); break;\n\t\tcase 3: ea += REG32(EBX) * (1 << scale); break;\n\t\tcase 4: break;\n\t\tcase 5: ea += REG32(EBP) * (1 << scale); break;\n\t\tcase 6: ea += REG32(ESI) * (1 << scale); break;\n\t\tcase 7: ea += REG32(EDI) * (1 << scale); break;\n\t}\n\t*out_ea = ea;\n\t*out_segment = segment;\n}\n\nstatic void modrm_to_EA(UINT8 mod_rm, UINT32* out_ea, UINT8* out_segment)\n{\n\tINT8 disp8;\n\tINT16 disp16;\n\tINT32 disp32;\n\tUINT8 mod = (mod_rm >> 6) & 0x3;\n\tUINT8 rm = mod_rm & 0x7;\n\tUINT32 ea;\n\tUINT8 segment;\n\n\tif( mod_rm >= 0xc0 )\n\t\tfatalerror(\"i386: Called modrm_to_EA with modrm value %02X!\\n\",mod_rm);\n\n\n\tif( m_address_size ) {\n\t\tswitch( rm )\n\t\t{\n\t\t\tdefault:\n\t\t\tcase 0: ea = REG32(EAX); segment = DS; break;\n\t\t\tcase 1: ea = REG32(ECX); segment = DS; break;\n\t\t\tcase 2: ea = REG32(EDX); segment = DS; break;\n\t\t\tcase 3: ea = REG32(EBX); segment = DS; break;\n\t\t\tcase 4: sib_byte(mod, &ea, &segment ); break;\n\t\t\tcase 5:\n\t\t\t\tif( mod == 0 ) {\n\t\t\t\t\tea = FETCH32(); segment = DS;\n\t\t\t\t} else {\n\t\t\t\t\tea = REG32(EBP); segment = SS;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 6: ea = REG32(ESI); segment = DS; break;\n\t\t\tcase 7: ea = REG32(EDI); segment = DS; break;\n\t\t}\n\t\tif( mod == 1 ) {\n\t\t\tdisp8 = FETCH();\n\t\t\tea += (INT32)disp8;\n\t\t} else if( mod == 2 ) {\n\t\t\tdisp32 = FETCH32();\n\t\t\tea += disp32;\n\t\t}\n\n\t\tif( m_segment_prefix )\n\t\t\tsegment = m_segment_override;\n\n\t\t*out_ea = ea;\n\t\t*out_segment = segment;\n\n\t} else {\n\t\tswitch( rm )\n\t\t{\n\t\t\tdefault:\n\t\t\tcase 0: ea = REG16(BX) + REG16(SI); segment = DS; break;\n\t\t\tcase 1: ea = REG16(BX) + REG16(DI); segment = DS; break;\n\t\t\tcase 2: ea = REG16(BP) + REG16(SI); segment = SS; break;\n\t\t\tcase 3: ea = REG16(BP) + REG16(DI); segment = SS; break;\n\t\t\tcase 4: ea = REG16(SI); segment = DS; break;\n\t\t\tcase 5: ea = REG16(DI); segment = DS; break;\n\t\t\tcase 6:\n\t\t\t\tif( mod == 0 ) {\n\t\t\t\t\tea = FETCH16(); segment = DS;\n\t\t\t\t} else {\n\t\t\t\t\tea = REG16(BP); segment = SS;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 7: ea = REG16(BX); segment = DS; break;\n\t\t}\n\t\tif( mod == 1 ) {\n\t\t\tdisp8 = FETCH();\n\t\t\tea += (INT32)disp8;\n\t\t} else if( mod == 2 ) {\n\t\t\tdisp16 = FETCH16();\n\t\t\tea += (INT32)disp16;\n\t\t}\n\n\t\tif( m_segment_prefix )\n\t\t\tsegment = m_segment_override;\n\n\t\t*out_ea = ea & 0xffff;\n\t\t*out_segment = segment;\n\t}\n}\n\nstatic UINT32 GetNonTranslatedEA(UINT8 modrm,UINT8 *seg)\n{\n\tUINT8 segment;\n\tUINT32 ea;\n\tmodrm_to_EA(modrm, &ea, &segment );\n\tif(seg) *seg = segment;\n\treturn ea;\n}\n\nstatic UINT32 GetEA(UINT8 modrm, int rwn)\n{\n\tUINT8 segment;\n\tUINT32 ea;\n\tmodrm_to_EA(modrm, &ea, &segment );\n\treturn i386_translate(segment, ea, rwn );\n}\n\n/* Check segment register for validity when changing privilege level after an RETF */\nstatic void i386_check_sreg_validity(int reg)\n{\n\tUINT16 selector = m_sreg[reg].selector;\n\tUINT8 CPL = m_CPL;\n\tUINT8 DPL,RPL;\n\tI386_SREG desc;\n\tint invalid = 0;\n\n\tmemset(&desc, 0, sizeof(desc));\n\tdesc.selector = selector;\n\ti386_load_protected_mode_segment(&desc,NULL);\n\tDPL = (desc.flags >> 5) & 0x03;  // descriptor privilege level\n\tRPL = selector & 0x03;\n\n\t/* Must be within the relevant descriptor table limits */\n\tif(selector & 0x04)\n\t{\n\t\tif((selector & ~0x07) > m_ldtr.limit)\n\t\t\tinvalid = 1;\n\t}\n\telse\n\t{\n\t\tif((selector & ~0x07) > m_gdtr.limit)\n\t\t\tinvalid = 1;\n\t}\n\n\t/* Must be either a data or readable code segment */\n\tif(((desc.flags & 0x0018) == 0x0018 && (desc.flags & 0x0002)) || (desc.flags & 0x0018) == 0x0010)\n\t\tinvalid = 0;\n\telse\n\t\tinvalid = 1;\n\n\t/* If a data segment or non-conforming code segment, then either DPL >= CPL or DPL >= RPL */\n\tif(((desc.flags & 0x0018) == 0x0018 && (desc.flags & 0x0004) == 0) || (desc.flags & 0x0018) == 0x0010)\n\t{\n\t\tif((DPL < CPL) || (DPL < RPL))\n\t\t\tinvalid = 1;\n\t}\n\n\t/* if segment is invalid, then segment register is nulled */\n\tif(invalid != 0)\n\t{\n\t\tm_sreg[reg].selector = 0;\n\t\ti386_load_segment_descriptor(reg);\n\t}\n}\n\nstatic int i386_limit_check(int seg, UINT32 offset)\n{\n\tif(PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\tif((m_sreg[seg].flags & 0x0018) == 0x0010 && m_sreg[seg].flags & 0x0004) // if expand-down data segment\n\t\t{\n\t\t\t// compare if greater then 0xffffffff when we're passed the access size\n\t\t\tif((offset <= m_sreg[seg].limit) || ((m_sreg[seg].d)?0:(offset > 0xffff)))\n\t\t\t{\n\t\t\t\tlogerror(\"Limit check at 0x%08x failed. Segment %04x, limit %08x, offset %08x (expand-down)\\n\",m_pc,m_sreg[seg].selector,m_sreg[seg].limit,offset);\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(offset > m_sreg[seg].limit)\n\t\t\t{\n\t\t\t\tlogerror(\"Limit check at 0x%08x failed. Segment %04x, limit %08x, offset %08x\\n\",m_pc,m_sreg[seg].selector,m_sreg[seg].limit,offset);\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t}\n\t}\n\treturn 0;\n}\n\nstatic void i386_sreg_load(UINT16 selector, UINT8 reg, bool *fault)\n{\n\t// Checks done when MOV changes a segment register in protected mode\n\tUINT8 CPL,RPL,DPL;\n\n\tCPL = m_CPL;\n\tRPL = selector & 0x0003;\n\n\tif(!PROTECTED_MODE || V8086_MODE)\n\t{\n\t\tm_sreg[reg].selector = selector;\n\t\ti386_load_segment_descriptor(reg);\n\t\tif(fault) *fault = false;\n\t\treturn;\n\t}\n\n\tif(fault) *fault = true;\n\tif(reg == SS)\n\t{\n\t\tI386_SREG stack;\n\n\t\tmemset(&stack, 0, sizeof(stack));\n\t\tstack.selector = selector;\n\t\ti386_load_protected_mode_segment(&stack,NULL);\n\t\tDPL = (stack.flags >> 5) & 0x03;\n\n\t\tif((selector & ~0x0003) == 0)\n\t\t{\n\t\t\tlogerror(\"SReg Load (%08x): Selector is null.\\n\",m_pc);\n\t\t\tFAULT(FAULT_GP,0)\n\t\t}\n\t\tif(selector & 0x0004)  // LDT\n\t\t{\n\t\t\tif((selector & ~0x0007) > m_ldtr.limit)\n\t\t\t{\n\t\t\t\tlogerror(\"SReg Load (%08x): Selector is out of LDT bounds.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_GP,selector & ~0x03)\n\t\t\t}\n\t\t}\n\t\telse  // GDT\n\t\t{\n\t\t\tif((selector & ~0x0007) > m_gdtr.limit)\n\t\t\t{\n\t\t\t\tlogerror(\"SReg Load (%08x): Selector is out of GDT bounds.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_GP,selector & ~0x03)\n\t\t\t}\n\t\t}\n\t\tif (RPL != CPL)\n\t\t{\n\t\t\tlogerror(\"SReg Load (%08x): Selector RPL does not equal CPL.\\n\",m_pc);\n\t\t\tFAULT(FAULT_GP,selector & ~0x03)\n\t\t}\n\t\tif(((stack.flags & 0x0018) != 0x10) && (stack.flags & 0x0002) != 0)\n\t\t{\n\t\t\tlogerror(\"SReg Load (%08x): Segment is not a writable data segment.\\n\",m_pc);\n\t\t\tFAULT(FAULT_GP,selector & ~0x03)\n\t\t}\n\t\tif(DPL != CPL)\n\t\t{\n\t\t\tlogerror(\"SReg Load (%08x): Segment DPL does not equal CPL.\\n\",m_pc);\n\t\t\tFAULT(FAULT_GP,selector & ~0x03)\n\t\t}\n\t\tif(!(stack.flags & 0x0080))\n\t\t{\n\t\t\tlogerror(\"SReg Load (%08x): Segment is not present.\\n\",m_pc);\n\t\t\tFAULT(FAULT_SS,selector & ~0x03)\n\t\t}\n\t}\n\tif(reg == DS || reg == ES || reg == FS || reg == GS)\n\t{\n\t\tI386_SREG desc;\n\n\t\tif((selector & ~0x0003) == 0)\n\t\t{\n\t\t\tm_sreg[reg].selector = selector;\n\t\t\ti386_load_segment_descriptor(reg );\n\t\t\tif(fault) *fault = false;\n\t\t\treturn;\n\t\t}\n\n\t\tmemset(&desc, 0, sizeof(desc));\n\t\tdesc.selector = selector;\n\t\ti386_load_protected_mode_segment(&desc,NULL);\n\t\tDPL = (desc.flags >> 5) & 0x03;\n\n\t\tif(selector & 0x0004)  // LDT\n\t\t{\n\t\t\tif((selector & ~0x0007) > m_ldtr.limit)\n\t\t\t{\n\t\t\t\tlogerror(\"SReg Load (%08x): Selector is out of LDT bounds.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_GP,selector & ~0x03)\n\t\t\t}\n\t\t}\n\t\telse  // GDT\n\t\t{\n\t\t\tif((selector & ~0x0007) > m_gdtr.limit)\n\t\t\t{\n\t\t\t\tlogerror(\"SReg Load (%08x): Selector is out of GDT bounds.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_GP,selector & ~0x03)\n\t\t\t}\n\t\t}\n\t\tif((desc.flags & 0x0018) != 0x10)\n\t\t{\n\t\t\tif((((desc.flags & 0x0002) != 0) && ((desc.flags & 0x0018) != 0x18)) || !(desc.flags & 0x10))\n\t\t\t{\n\t\t\t\tlogerror(\"SReg Load (%08x): Segment is not a data segment or readable code segment.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_GP,selector & ~0x03)\n\t\t\t}\n\t\t}\n\t\tif(((desc.flags & 0x0018) == 0x10) || ((!(desc.flags & 0x0004)) && ((desc.flags & 0x0018) == 0x18)))\n\t\t{\n\t\t\t// if data or non-conforming code segment\n\t\t\tif((RPL > DPL) || (CPL > DPL))\n\t\t\t{\n\t\t\t\tlogerror(\"SReg Load (%08x): Selector RPL or CPL is not less or equal to segment DPL.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_GP,selector & ~0x03)\n\t\t\t}\n\t\t}\n\t\tif(!(desc.flags & 0x0080))\n\t\t{\n\t\t\tlogerror(\"SReg Load (%08x): Segment is not present.\\n\",m_pc);\n\t\t\tFAULT(FAULT_NP,selector & ~0x03)\n\t\t}\n\t}\n\n\tm_sreg[reg].selector = selector;\n\ti386_load_segment_descriptor(reg );\n\tif(fault) *fault = false;\n}\n\nstatic void i386_trap(int irq, int irq_gate, int trap_level)\n{\n\t/*  I386 Interrupts/Traps/Faults:\n\t *\n\t *  0x00    Divide by zero\n\t *  0x01    Debug exception\n\t *  0x02    NMI\n\t *  0x03    Int3\n\t *  0x04    Overflow\n\t *  0x05    Array bounds check\n\t *  0x06    Illegal Opcode\n\t *  0x07    FPU not available\n\t *  0x08    Double fault\n\t *  0x09    Coprocessor segment overrun\n\t *  0x0a    Invalid task state\n\t *  0x0b    Segment not present\n\t *  0x0c    Stack exception\n\t *  0x0d    General Protection Fault\n\t *  0x0e    Page fault\n\t *  0x0f    Reserved\n\t *  0x10    Coprocessor error\n\t */\n\tUINT32 v1, v2;\n\tUINT32 offset, oldflags = get_flags();\n\tUINT16 segment;\n\tint entry = irq * (PROTECTED_MODE ? 8 : 4);\n\tint SetRPL = 0;\n\tm_lock = false;\n\n\tif( !(PROTECTED_MODE) )\n\t{\n\t\t/* 16-bit */\n\t\tPUSH16(oldflags & 0xffff );\n\t\tPUSH16(m_sreg[CS].selector );\n\t\tif(irq == 3 || irq == 4 || irq == 9 || irq_gate == 1)\n\t\t\tPUSH16(m_eip );\n\t\telse\n\t\t\tPUSH16(m_prev_eip );\n\n\t\tm_sreg[CS].selector = READ16(m_idtr.base + entry + 2 );\n\t\tm_eip = READ16(m_idtr.base + entry );\n\n\t\tm_TF = 0;\n\t\tm_IF = 0;\n\t}\n\telse\n\t{\n\t\tint type;\n\t\tUINT16 flags;\n\t\tI386_SREG desc;\n\t\tUINT8 CPL = m_CPL, DPL = 0; //, RPL = 0;\n\n\t\t/* 32-bit */\n\t\tv1 = READ32PL0(m_idtr.base + entry );\n\t\tv2 = READ32PL0(m_idtr.base + entry + 4 );\n\t\toffset = (v2 & 0xffff0000) | (v1 & 0xffff);\n\t\tsegment = (v1 >> 16) & 0xffff;\n\t\ttype = (v2>>8) & 0x1F;\n\t\tflags = (v2>>8) & 0xf0ff;\n\n\t\tif(trap_level == 2)\n\t\t{\n\t\t\tlogerror(\"IRQ: Double fault.\\n\");\n\t\t\tFAULT_EXP(FAULT_DF,0);\n\t\t}\n\t\tif(trap_level >= 3)\n\t\t{\n\t\t\tlogerror(\"IRQ: Triple fault. CPU reset.\\n\");\n\t\t\tCPU_RESET_CALL(CPU_MODEL);\n\t\t\treturn;\n\t\t}\n\n\t\t/* segment privilege checks */\n\t\tif(entry >= m_idtr.limit)\n\t\t{\n\t\t\tlogerror(\"IRQ (%08x): Vector %02xh is past IDT limit.\\n\",m_pc,entry);\n\t\t\tFAULT_EXP(FAULT_GP,entry+2)\n\t\t}\n\t\t/* segment must be interrupt gate, trap gate, or task gate */\n\t\tif(type != 0x05 && type != 0x06 && type != 0x07 && type != 0x0e && type != 0x0f)\n\t\t{\n\t\t\tlogerror(\"IRQ#%02x (%08x): Vector segment %04x is not an interrupt, trap or task gate.\\n\",irq,m_pc,segment);\n\t\t\tFAULT_EXP(FAULT_GP,entry+2)\n\t\t}\n\n\t\tif(m_ext == 0) // if software interrupt (caused by INT/INTO/INT3)\n\t\t{\n\t\t\tif(((flags >> 5) & 0x03) < CPL)\n\t\t\t{\n\t\t\t\tlogerror(\"IRQ (%08x): Software IRQ - gate DPL is less than CPL.\\n\",m_pc);\n\t\t\t\tFAULT_EXP(FAULT_GP,entry+2)\n\t\t\t}\n\t\t\tif(V8086_MODE)\n\t\t\t{\n\t\t\t\tif((!m_IOP1 || !m_IOP2) && (m_opcode != 0xcc))\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRQ (%08x): Is in Virtual 8086 mode and IOPL != 3.\\n\",m_pc);\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\tif((flags & 0x0080) == 0)\n\t\t{\n\t\t\tlogerror(\"IRQ: Vector segment is not present.\\n\");\n\t\t\tFAULT_EXP(FAULT_NP,entry+2)\n\t\t}\n\n\t\tif(type == 0x05)\n\t\t{\n\t\t\t/* Task gate */\n\t\t\tmemset(&desc, 0, sizeof(desc));\n\t\t\tdesc.selector = segment;\n\t\t\ti386_load_protected_mode_segment(&desc,NULL);\n\t\t\tif(segment & 0x04)\n\t\t\t{\n\t\t\t\tlogerror(\"IRQ: Task gate: TSS is not in the GDT.\\n\");\n\t\t\t\tFAULT_EXP(FAULT_TS,segment & ~0x03);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif(segment > m_gdtr.limit)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRQ: Task gate: TSS is past GDT limit.\\n\");\n\t\t\t\t\tFAULT_EXP(FAULT_TS,segment & ~0x03);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif((desc.flags & 0x000f) != 0x09 && (desc.flags & 0x000f) != 0x01)\n\t\t\t{\n\t\t\t\tlogerror(\"IRQ: Task gate: TSS is not an available TSS.\\n\");\n\t\t\t\tFAULT_EXP(FAULT_TS,segment & ~0x03);\n\t\t\t}\n\t\t\tif((desc.flags & 0x0080) == 0)\n\t\t\t{\n\t\t\t\tlogerror(\"IRQ: Task gate: TSS is not present.\\n\");\n\t\t\t\tFAULT_EXP(FAULT_NP,segment & ~0x03);\n\t\t\t}\n\t\t\tif(!(irq == 3 || irq == 4 || irq == 9 || irq_gate == 1))\n\t\t\t\tm_eip = m_prev_eip;\n\t\t\tif(desc.flags & 0x08)\n\t\t\t\ti386_task_switch(desc.selector,1);\n\t\t\telse\n\t\t\t\ti286_task_switch(desc.selector,1);\n\t\t\treturn;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* Interrupt or Trap gate */\n\t\t\tmemset(&desc, 0, sizeof(desc));\n\t\t\tdesc.selector = segment;\n\t\t\ti386_load_protected_mode_segment(&desc,NULL);\n\t\t\tCPL = m_CPL;  // current privilege level\n\t\t\tDPL = (desc.flags >> 5) & 0x03;  // descriptor privilege level\n//          RPL = segment & 0x03;  // requested privilege level\n\n\t\t\tif((segment & ~0x03) == 0)\n\t\t\t{\n\t\t\t\tlogerror(\"IRQ: Gate segment is null.\\n\");\n\t\t\t\tFAULT_EXP(FAULT_GP,m_ext)\n\t\t\t}\n\t\t\tif(segment & 0x04)\n\t\t\t{\n\t\t\t\tif((segment & ~0x07) > m_ldtr.limit)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRQ: Gate segment is past LDT limit.\\n\");\n\t\t\t\t\tFAULT_EXP(FAULT_GP,(segment & 0x03)+m_ext)\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif((segment & ~0x07) > m_gdtr.limit)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRQ: Gate segment is past GDT limit.\\n\");\n\t\t\t\t\tFAULT_EXP(FAULT_GP,(segment & 0x03)+m_ext)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif((desc.flags & 0x0018) != 0x18)\n\t\t\t{\n\t\t\t\tlogerror(\"IRQ: Gate descriptor is not a code segment.\\n\");\n\t\t\t\tFAULT_EXP(FAULT_GP,(segment & 0x03)+m_ext)\n\t\t\t}\n\t\t\tif((desc.flags & 0x0080) == 0)\n\t\t\t{\n\t\t\t\tlogerror(\"IRQ: Gate segment is not present.\\n\");\n\t\t\t\tFAULT_EXP(FAULT_NP,(segment & 0x03)+m_ext)\n\t\t\t}\n\t\t\tif((desc.flags & 0x0004) == 0 && (DPL < CPL))\n\t\t\t{\n\t\t\t\t/* IRQ to inner privilege */\n\t\t\t\tI386_SREG stack;\n\t\t\t\tUINT32 newESP,oldSS,oldESP;\n\n\t\t\t\tif(V8086_MODE && DPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRQ: Gate to CPL>0 from VM86 mode.\\n\");\n\t\t\t\t\tFAULT_EXP(FAULT_GP,segment & ~0x03);\n\t\t\t\t}\n\t\t\t\t/* Check new stack segment in TSS */\n\t\t\t\tmemset(&stack, 0, sizeof(stack));\n\t\t\t\tstack.selector = i386_get_stack_segment(DPL);\n\t\t\t\ti386_load_protected_mode_segment(&stack,NULL);\n\t\t\t\toldSS = m_sreg[SS].selector;\n\t\t\t\tif(flags & 0x0008)\n\t\t\t\t\toldESP = REG32(ESP);\n\t\t\t\telse\n\t\t\t\t\toldESP = REG16(SP);\n\t\t\t\tif((stack.selector & ~0x03) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRQ: New stack selector is null.\\n\");\n\t\t\t\t\tFAULT_EXP(FAULT_GP,m_ext)\n\t\t\t\t}\n\t\t\t\tif(stack.selector & 0x04)\n\t\t\t\t{\n\t\t\t\t\tif((stack.selector & ~0x07) > m_ldtr.base)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRQ: New stack selector is past LDT limit.\\n\");\n\t\t\t\t\t\tFAULT_EXP(FAULT_TS,(stack.selector & ~0x03)+m_ext)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif((stack.selector & ~0x07) > m_gdtr.base)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRQ: New stack selector is past GDT limit.\\n\");\n\t\t\t\t\t\tFAULT_EXP(FAULT_TS,(stack.selector & ~0x03)+m_ext)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif((stack.selector & 0x03) != DPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRQ: New stack selector RPL is not equal to code segment DPL.\\n\");\n\t\t\t\t\tFAULT_EXP(FAULT_TS,(stack.selector & ~0x03)+m_ext)\n\t\t\t\t}\n\t\t\t\tif(((stack.flags >> 5) & 0x03) != DPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRQ: New stack segment DPL is not equal to code segment DPL.\\n\");\n\t\t\t\t\tFAULT_EXP(FAULT_TS,(stack.selector & ~0x03)+m_ext)\n\t\t\t\t}\n\t\t\t\tif(((stack.flags & 0x0018) != 0x10) && (stack.flags & 0x0002) != 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRQ: New stack segment is not a writable data segment.\\n\");\n\t\t\t\t\tFAULT_EXP(FAULT_TS,(stack.selector & ~0x03)+m_ext) // #TS(stack selector + EXT)\n\t\t\t\t}\n\t\t\t\tif((stack.flags & 0x0080) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRQ: New stack segment is not present.\\n\");\n\t\t\t\t\tFAULT_EXP(FAULT_SS,(stack.selector & ~0x03)+m_ext) // #TS(stack selector + EXT)\n\t\t\t\t}\n\t\t\t\tnewESP = i386_get_stack_ptr(DPL);\n\t\t\t\tif(type & 0x08) // 32-bit gate\n\t\t\t\t{\n\t\t\t\t\tif(((newESP < (V8086_MODE?36:20)) && !(stack.flags & 0x4)) || ((~stack.limit < (~(newESP - 1) + (V8086_MODE?36:20))) && (stack.flags & 0x4)))\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRQ: New stack has no space for return addresses.\\n\");\n\t\t\t\t\t\tFAULT_EXP(FAULT_SS,0)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse // 16-bit gate\n\t\t\t\t{\n\t\t\t\t\tnewESP &= 0xffff;\n\t\t\t\t\tif(((newESP < (V8086_MODE?18:10)) && !(stack.flags & 0x4)) || ((~stack.limit < (~(newESP - 1) + (V8086_MODE?18:10))) && (stack.flags & 0x4)))\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRQ: New stack has no space for return addresses.\\n\");\n\t\t\t\t\t\tFAULT_EXP(FAULT_SS,0)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(offset > desc.limit)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRQ: New EIP is past code segment limit.\\n\");\n\t\t\t\t\tFAULT_EXP(FAULT_GP,0)\n\t\t\t\t}\n\t\t\t\t/* change CPL before accessing the stack */\n\t\t\t\tm_CPL = DPL;\n\t\t\t\t/* check for page fault at new stack TODO: check if stack frame crosses page boundary */\n\t\t\t\tWRITE_TEST(stack.base+newESP-1);\n\t\t\t\t/* Load new stack segment descriptor */\n\t\t\t\tm_sreg[SS].selector = stack.selector;\n\t\t\t\ti386_load_protected_mode_segment(&m_sreg[SS],NULL);\n\t\t\t\ti386_set_descriptor_accessed(stack.selector);\n\t\t\t\tREG32(ESP) = newESP;\n\t\t\t\tif(V8086_MODE)\n\t\t\t\t{\n\t\t\t\t\t//logerror(\"IRQ (%08x): Interrupt during V8086 task\\n\",m_pc);\n\t\t\t\t\tif(type & 0x08)\n\t\t\t\t\t{\n\t\t\t\t\t\tPUSH32(m_sreg[GS].selector & 0xffff);\n\t\t\t\t\t\tPUSH32(m_sreg[FS].selector & 0xffff);\n\t\t\t\t\t\tPUSH32(m_sreg[DS].selector & 0xffff);\n\t\t\t\t\t\tPUSH32(m_sreg[ES].selector & 0xffff);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tPUSH16(m_sreg[GS].selector);\n\t\t\t\t\t\tPUSH16(m_sreg[FS].selector);\n\t\t\t\t\t\tPUSH16(m_sreg[DS].selector);\n\t\t\t\t\t\tPUSH16(m_sreg[ES].selector);\n\t\t\t\t\t}\n\t\t\t\t\tm_sreg[GS].selector = 0;\n\t\t\t\t\tm_sreg[FS].selector = 0;\n\t\t\t\t\tm_sreg[DS].selector = 0;\n\t\t\t\t\tm_sreg[ES].selector = 0;\n\t\t\t\t\tm_VM = 0;\n\t\t\t\t\ti386_load_segment_descriptor(GS);\n\t\t\t\t\ti386_load_segment_descriptor(FS);\n\t\t\t\t\ti386_load_segment_descriptor(DS);\n\t\t\t\t\ti386_load_segment_descriptor(ES);\n\t\t\t\t}\n\t\t\t\tif(type & 0x08)\n\t\t\t\t{\n\t\t\t\t\t// 32-bit gate\n\t\t\t\t\tPUSH32(oldSS);\n\t\t\t\t\tPUSH32(oldESP);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// 16-bit gate\n\t\t\t\t\tPUSH16(oldSS);\n\t\t\t\t\tPUSH16(oldESP);\n\t\t\t\t}\n\t\t\t\tSetRPL = 1;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tint stack_limit;\n\t\t\t\tif((desc.flags & 0x0004) || (DPL == CPL))\n\t\t\t\t{\n\t\t\t\t\t/* IRQ to same privilege */\n\t\t\t\t\tif(V8086_MODE && !m_ext)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRQ: Gate to same privilege from VM86 mode.\\n\");\n\t\t\t\t\t\tFAULT_EXP(FAULT_GP,segment & ~0x03);\n\t\t\t\t\t}\n\t\t\t\t\tif(type == 0x0e || type == 0x0f)  // 32-bit gate\n\t\t\t\t\t\tstack_limit = 10;\n\t\t\t\t\telse\n\t\t\t\t\t\tstack_limit = 6;\n\t\t\t\t\t// TODO: Add check for error code (2 extra bytes)\n\t\t\t\t\tif(REG32(ESP) < stack_limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRQ: Stack has no space left (needs %i bytes).\\n\",stack_limit);\n\t\t\t\t\t\tFAULT_EXP(FAULT_SS,0)\n\t\t\t\t\t}\n\t\t\t\t\tif(offset > desc.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRQ: Gate segment offset is past segment limit.\\n\");\n\t\t\t\t\t\tFAULT_EXP(FAULT_GP,0)\n\t\t\t\t\t}\n\t\t\t\t\tSetRPL = 1;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRQ: Gate descriptor is non-conforming, and DPL does not equal CPL.\\n\");\n\t\t\t\t\tFAULT_EXP(FAULT_GP,segment)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tUINT32 tempSP = REG32(ESP);\n\t\ttry\n\t\t{\n\t\t\t// this is ugly but the alternative is worse\n\t\t\tif(type != 0x0e && type != 0x0f)  // if not 386 interrupt or trap gate\n\t\t\t{\n\t\t\t\tPUSH16(oldflags & 0xffff );\n\t\t\t\tPUSH16(m_sreg[CS].selector );\n\t\t\t\tif(irq == 3 || irq == 4 || irq == 9 || irq_gate == 1)\n\t\t\t\t\tPUSH16(m_eip );\n\t\t\t\telse\n\t\t\t\t\tPUSH16(m_prev_eip );\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tPUSH32(oldflags & 0x00ffffff );\n\t\t\t\tPUSH32(m_sreg[CS].selector );\n\t\t\t\tif(irq == 3 || irq == 4 || irq == 9 || irq_gate == 1)\n\t\t\t\t\tPUSH32(m_eip );\n\t\t\t\telse\n\t\t\t\t\tPUSH32(m_prev_eip );\n\t\t\t}\n\t\t}\n\t\tcatch(UINT64 e)\n\t\t{\n\t\t\tREG32(ESP) = tempSP;\n\t\t\tthrow e;\n\t\t}\n\t\tif(SetRPL != 0)\n\t\t\tsegment = (segment & ~0x03) | m_CPL;\n\t\tm_sreg[CS].selector = segment;\n\t\tm_eip = offset;\n\n\t\tif(type == 0x0e || type == 0x06)\n\t\t\tm_IF = 0;\n\t\tm_TF = 0;\n\t\tm_NT = 0;\n\t}\n\n\ti386_load_segment_descriptor(CS);\n\tCHANGE_PC(m_eip);\n\n}\n\nstatic void i386_trap_with_error(int irq, int irq_gate, int trap_level, UINT32 error)\n{\n\ti386_trap(irq,irq_gate,trap_level);\n\tif(irq == 8 || irq == 10 || irq == 11 || irq == 12 || irq == 13 || irq == 14)\n\t{\n\t\t// for these exceptions, an error code is pushed onto the stack by the processor.\n\t\t// no error code is pushed for software interrupts, either.\n\t\tif(PROTECTED_MODE)\n\t\t{\n\t\t\tUINT32 entry = irq * 8;\n\t\t\tUINT32 v2,type;\n\t\t\tv2 = READ32PL0(m_idtr.base + entry + 4 );\n\t\t\ttype = (v2>>8) & 0x1F;\n\t\t\tif(type == 5)\n\t\t\t{\n\t\t\t\tv2 = READ32PL0(m_idtr.base + entry);\n\t\t\t\tv2 = READ32PL0(m_gdtr.base + ((v2 >> 16) & 0xfff8) + 4);\n\t\t\t\ttype = (v2>>8) & 0x1F;\n\t\t\t}\n\t\t\tif(type >= 9)\n\t\t\t\tPUSH32(error);\n\t\t\telse\n\t\t\t\tPUSH16(error);\n\t\t}\n\t\telse\n\t\t\tPUSH16(error);\n\t}\n}\n\n\nstatic void i286_task_switch(UINT16 selector, UINT8 nested)\n{\n\tUINT32 tss;\n\tI386_SREG seg;\n\tUINT16 old_task;\n\tUINT8 ar_byte;  // access rights byte\n\n\t/* TODO: Task State Segment privilege checks */\n\n\t/* For tasks that aren't nested, clear the busy bit in the task's descriptor */\n\tif(nested == 0)\n\t{\n\t\tif(m_task.segment & 0x0004)\n\t\t{\n\t\t\tar_byte = READ8(m_ldtr.base + (m_task.segment & ~0x0007) + 5);\n\t\t\tWRITE8(m_ldtr.base + (m_task.segment & ~0x0007) + 5,ar_byte & ~0x02);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tar_byte = READ8(m_gdtr.base + (m_task.segment & ~0x0007) + 5);\n\t\t\tWRITE8(m_gdtr.base + (m_task.segment & ~0x0007) + 5,ar_byte & ~0x02);\n\t\t}\n\t}\n\n\t/* Save the state of the current task in the current TSS (TR register base) */\n\ttss = m_task.base;\n\tWRITE16(tss+0x0e,m_eip & 0x0000ffff);\n\tWRITE16(tss+0x10,get_flags() & 0x0000ffff);\n\tWRITE16(tss+0x12,REG16(AX));\n\tWRITE16(tss+0x14,REG16(CX));\n\tWRITE16(tss+0x16,REG16(DX));\n\tWRITE16(tss+0x18,REG16(BX));\n\tWRITE16(tss+0x1a,REG16(SP));\n\tWRITE16(tss+0x1c,REG16(BP));\n\tWRITE16(tss+0x1e,REG16(SI));\n\tWRITE16(tss+0x20,REG16(DI));\n\tWRITE16(tss+0x22,m_sreg[ES].selector);\n\tWRITE16(tss+0x24,m_sreg[CS].selector);\n\tWRITE16(tss+0x26,m_sreg[SS].selector);\n\tWRITE16(tss+0x28,m_sreg[DS].selector);\n\n\told_task = m_task.segment;\n\n\t/* Load task register with the selector of the incoming task */\n\tm_task.segment = selector;\n\tmemset(&seg, 0, sizeof(seg));\n\tseg.selector = m_task.segment;\n\ti386_load_protected_mode_segment(&seg,NULL);\n\tm_task.limit = seg.limit;\n\tm_task.base = seg.base;\n\tm_task.flags = seg.flags;\n\n\t/* Set TS bit in CR0 */\n\tm_cr[0] |= 0x08;\n\n\t/* Load incoming task state from the new task's TSS */\n\ttss = m_task.base;\n\tm_ldtr.segment = READ16(tss+0x2a) & 0xffff;\n\tseg.selector = m_ldtr.segment;\n\ti386_load_protected_mode_segment(&seg,NULL);\n\tm_ldtr.limit = seg.limit;\n\tm_ldtr.base = seg.base;\n\tm_ldtr.flags = seg.flags;\n\tm_eip = READ16(tss+0x0e);\n\tset_flags(READ16(tss+0x10));\n\tREG16(AX) = READ16(tss+0x12);\n\tREG16(CX) = READ16(tss+0x14);\n\tREG16(DX) = READ16(tss+0x16);\n\tREG16(BX) = READ16(tss+0x18);\n\tREG16(SP) = READ16(tss+0x1a);\n\tREG16(BP) = READ16(tss+0x1c);\n\tREG16(SI) = READ16(tss+0x1e);\n\tREG16(DI) = READ16(tss+0x20);\n\tm_sreg[ES].selector = READ16(tss+0x22) & 0xffff;\n\ti386_load_segment_descriptor(ES);\n\tm_sreg[CS].selector = READ16(tss+0x24) & 0xffff;\n\ti386_load_segment_descriptor(CS);\n\tm_sreg[SS].selector = READ16(tss+0x26) & 0xffff;\n\ti386_load_segment_descriptor(SS);\n\tm_sreg[DS].selector = READ16(tss+0x28) & 0xffff;\n\ti386_load_segment_descriptor(DS);\n\n\t/* Set the busy bit in the new task's descriptor */\n\tif(selector & 0x0004)\n\t{\n\t\tar_byte = READ8(m_ldtr.base + (selector & ~0x0007) + 5);\n\t\tWRITE8(m_ldtr.base + (selector & ~0x0007) + 5,ar_byte | 0x02);\n\t}\n\telse\n\t{\n\t\tar_byte = READ8(m_gdtr.base + (selector & ~0x0007) + 5);\n\t\tWRITE8(m_gdtr.base + (selector & ~0x0007) + 5,ar_byte | 0x02);\n\t}\n\n\t/* For nested tasks, we write the outgoing task's selector to the back-link field of the new TSS,\n\t   and set the NT flag in the EFLAGS register */\n\tif(nested != 0)\n\t{\n\t\tWRITE16(tss+0,old_task);\n\t\tm_NT = 1;\n\t}\n\tCHANGE_PC(m_eip);\n\n\tm_CPL = (m_sreg[SS].flags >> 5) & 3;\n//  printf(\"286 Task Switch from selector %04x to %04x\\n\",old_task,selector);\n}\n\nstatic void i386_task_switch(UINT16 selector, UINT8 nested)\n{\n\tUINT32 tss;\n\tI386_SREG seg;\n\tUINT16 old_task;\n\tUINT8 ar_byte;  // access rights byte\n\tUINT32 oldcr3 = m_cr[3];\n\n\t/* TODO: Task State Segment privilege checks */\n\n\t/* For tasks that aren't nested, clear the busy bit in the task's descriptor */\n\tif(nested == 0)\n\t{\n\t\tif(m_task.segment & 0x0004)\n\t\t{\n\t\t\tar_byte = READ8(m_ldtr.base + (m_task.segment & ~0x0007) + 5);\n\t\t\tWRITE8(m_ldtr.base + (m_task.segment & ~0x0007) + 5,ar_byte & ~0x02);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tar_byte = READ8(m_gdtr.base + (m_task.segment & ~0x0007) + 5);\n\t\t\tWRITE8(m_gdtr.base + (m_task.segment & ~0x0007) + 5,ar_byte & ~0x02);\n\t\t}\n\t}\n\n\t/* Save the state of the current task in the current TSS (TR register base) */\n\ttss = m_task.base;\n\tWRITE32(tss+0x1c,m_cr[3]);  // correct?\n\tWRITE32(tss+0x20,m_eip);\n\tWRITE32(tss+0x24,get_flags());\n\tWRITE32(tss+0x28,REG32(EAX));\n\tWRITE32(tss+0x2c,REG32(ECX));\n\tWRITE32(tss+0x30,REG32(EDX));\n\tWRITE32(tss+0x34,REG32(EBX));\n\tWRITE32(tss+0x38,REG32(ESP));\n\tWRITE32(tss+0x3c,REG32(EBP));\n\tWRITE32(tss+0x40,REG32(ESI));\n\tWRITE32(tss+0x44,REG32(EDI));\n\tWRITE32(tss+0x48,m_sreg[ES].selector);\n\tWRITE32(tss+0x4c,m_sreg[CS].selector);\n\tWRITE32(tss+0x50,m_sreg[SS].selector);\n\tWRITE32(tss+0x54,m_sreg[DS].selector);\n\tWRITE32(tss+0x58,m_sreg[FS].selector);\n\tWRITE32(tss+0x5c,m_sreg[GS].selector);\n\n\told_task = m_task.segment;\n\n\t/* Load task register with the selector of the incoming task */\n\tm_task.segment = selector;\n\tmemset(&seg, 0, sizeof(seg));\n\tseg.selector = m_task.segment;\n\ti386_load_protected_mode_segment(&seg,NULL);\n\tm_task.limit = seg.limit;\n\tm_task.base = seg.base;\n\tm_task.flags = seg.flags;\n\n\t/* Set TS bit in CR0 */\n\tm_cr[0] |= 0x08;\n\n\t/* Load incoming task state from the new task's TSS */\n\ttss = m_task.base;\n\tm_ldtr.segment = READ32(tss+0x60) & 0xffff;\n\tseg.selector = m_ldtr.segment;\n\ti386_load_protected_mode_segment(&seg,NULL);\n\tm_ldtr.limit = seg.limit;\n\tm_ldtr.base = seg.base;\n\tm_ldtr.flags = seg.flags;\n\tm_eip = READ32(tss+0x20);\n\tset_flags(READ32(tss+0x24));\n\tREG32(EAX) = READ32(tss+0x28);\n\tREG32(ECX) = READ32(tss+0x2c);\n\tREG32(EDX) = READ32(tss+0x30);\n\tREG32(EBX) = READ32(tss+0x34);\n\tREG32(ESP) = READ32(tss+0x38);\n\tREG32(EBP) = READ32(tss+0x3c);\n\tREG32(ESI) = READ32(tss+0x40);\n\tREG32(EDI) = READ32(tss+0x44);\n\tm_sreg[ES].selector = READ32(tss+0x48) & 0xffff;\n\ti386_load_segment_descriptor(ES);\n\tm_sreg[CS].selector = READ32(tss+0x4c) & 0xffff;\n\ti386_load_segment_descriptor(CS);\n\tm_sreg[SS].selector = READ32(tss+0x50) & 0xffff;\n\ti386_load_segment_descriptor(SS);\n\tm_sreg[DS].selector = READ32(tss+0x54) & 0xffff;\n\ti386_load_segment_descriptor(DS);\n\tm_sreg[FS].selector = READ32(tss+0x58) & 0xffff;\n\ti386_load_segment_descriptor(FS);\n\tm_sreg[GS].selector = READ32(tss+0x5c) & 0xffff;\n\ti386_load_segment_descriptor(GS);\n\t/* For nested tasks, we write the outgoing task's selector to the back-link field of the new TSS,\n\t   and set the NT flag in the EFLAGS register before setting cr3 as the old tss address might be gone */\n\tif(nested != 0)\n\t{\n\t\tWRITE32(tss+0,old_task);\n\t\tm_NT = 1;\n\t}\n\tm_cr[3] = READ32(tss+0x1c);  // CR3 (PDBR)\n\tif(oldcr3 != m_cr[3])\n\t\tvtlb_flush_dynamic(m_vtlb);\n\n\t/* Set the busy bit in the new task's descriptor */\n\tif(selector & 0x0004)\n\t{\n\t\tar_byte = READ8(m_ldtr.base + (selector & ~0x0007) + 5);\n\t\tWRITE8(m_ldtr.base + (selector & ~0x0007) + 5,ar_byte | 0x02);\n\t}\n\telse\n\t{\n\t\tar_byte = READ8(m_gdtr.base + (selector & ~0x0007) + 5);\n\t\tWRITE8(m_gdtr.base + (selector & ~0x0007) + 5,ar_byte | 0x02);\n\t}\n\n\tCHANGE_PC(m_eip);\n\n\tm_CPL = (m_sreg[SS].flags >> 5) & 3;\n//  printf(\"386 Task Switch from selector %04x to %04x\\n\",old_task,selector);\n}\n\nstatic void i386_check_irq_line()\n{\n\tif(!m_smm && m_smi)\n\t{\n\t\tpentium_smi();\n\t\treturn;\n\t}\n\n\t/* Check if the interrupts are enabled */\n\tif ( (m_irq_state) && m_IF )\n\t{\n#ifdef SUPPORT_RDTSC\n\t\tm_cycles -= 2;\n#endif\n\t\ti386_trap(pic_ack(), 1, 0);\n\t\tm_irq_state = CLEAR_LINE;\n\t}\n}\n\nstatic void i386_protected_mode_jump(UINT16 seg, UINT32 off, int indirect, int operand32)\n{\n\tI386_SREG desc;\n\tI386_CALL_GATE call_gate;\n\tUINT8 CPL,DPL,RPL;\n\tUINT8 SetRPL = 0;\n\tUINT16 segment = seg;\n\tUINT32 offset = off;\n\n\t/* Check selector is not null */\n\tif((segment & ~0x03) == 0)\n\t{\n\t\tlogerror(\"JMP: Segment is null.\\n\");\n\t\tFAULT(FAULT_GP,0)\n\t}\n\t/* Selector is within descriptor table limit */\n\tif((segment & 0x04) == 0)\n\t{\n\t\t/* check GDT limit */\n\t\tif((segment & ~0x07) > (m_gdtr.limit))\n\t\t{\n\t\t\tlogerror(\"JMP: Segment is past GDT limit.\\n\");\n\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t}\n\t}\n\telse\n\t{\n\t\t/* check LDT limit */\n\t\tif((segment & ~0x07) > (m_ldtr.limit))\n\t\t{\n\t\t\tlogerror(\"JMP: Segment is past LDT limit.\\n\");\n\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t}\n\t}\n\t/* Determine segment type */\n\tmemset(&desc, 0, sizeof(desc));\n\tdesc.selector = segment;\n\ti386_load_protected_mode_segment(&desc,NULL);\n\tCPL = m_CPL;  // current privilege level\n\tDPL = (desc.flags >> 5) & 0x03;  // descriptor privilege level\n\tRPL = segment & 0x03;  // requested privilege level\n\tif((desc.flags & 0x0018) == 0x0018)\n\t{\n\t\t/* code segment */\n\t\tif((desc.flags & 0x0004) == 0)\n\t\t{\n\t\t\t/* non-conforming */\n\t\t\tif(RPL > CPL)\n\t\t\t{\n\t\t\t\tlogerror(\"JMP: RPL %i is less than CPL %i\\n\",RPL,CPL);\n\t\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t\t}\n\t\t\tif(DPL != CPL)\n\t\t\t{\n\t\t\t\tlogerror(\"JMP: DPL %i is not equal CPL %i\\n\",DPL,CPL);\n\t\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* conforming */\n\t\t\tif(DPL > CPL)\n\t\t\t{\n\t\t\t\tlogerror(\"JMP: DPL %i is less than CPL %i\\n\",DPL,CPL);\n\t\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t\t}\n\t\t}\n\t\tSetRPL = 1;\n\t\tif((desc.flags & 0x0080) == 0)\n\t\t{\n\t\t\tlogerror(\"JMP: Segment is not present\\n\");\n\t\t\tFAULT(FAULT_NP,segment & 0xfffc)\n\t\t}\n\t\tif(offset > desc.limit)\n\t\t{\n\t\t\tlogerror(\"JMP: Offset is past segment limit\\n\");\n\t\t\tFAULT(FAULT_GP,0)\n\t\t}\n\t}\n\telse\n\t{\n\t\tif((desc.flags & 0x0010) != 0)\n\t\t{\n\t\t\tlogerror(\"JMP: Segment is a data segment\\n\");\n\t\t\tFAULT(FAULT_GP,segment & 0xfffc)  // #GP (cannot execute code in a data segment)\n\t\t}\n\t\telse\n\t\t{\n\t\t\tswitch(desc.flags & 0x000f)\n\t\t\t{\n\t\t\tcase 0x01:  // 286 Available TSS\n\t\t\tcase 0x09:  // 386 Available TSS\n\t\t\t\tlogerror(\"JMP: Available 386 TSS at %08x\\n\",m_pc);\n\t\t\t\tmemset(&desc, 0, sizeof(desc));\n\t\t\t\tdesc.selector = segment;\n\t\t\t\ti386_load_protected_mode_segment(&desc,NULL);\n\t\t\t\tDPL = (desc.flags >> 5) & 0x03;  // descriptor privilege level\n\t\t\t\tif(DPL < CPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: TSS: DPL %i is less than CPL %i\\n\",DPL,CPL);\n\t\t\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t\t\t}\n\t\t\t\tif(DPL < RPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: TSS: DPL %i is less than TSS RPL %i\\n\",DPL,RPL);\n\t\t\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t\t\t}\n\t\t\t\tif((desc.flags & 0x0080) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: TSS: Segment is not present\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t\t\t}\n\t\t\t\tif(desc.flags & 0x0008)\n\t\t\t\t\ti386_task_switch(desc.selector,0);\n\t\t\t\telse\n\t\t\t\t\ti286_task_switch(desc.selector,0);\n\t\t\t\treturn;\n\t\t\tcase 0x04:  // 286 Call Gate\n\t\t\tcase 0x0c:  // 386 Call Gate\n\t\t\t\t//logerror(\"JMP: Call gate at %08x\\n\",m_pc);\n\t\t\t\tSetRPL = 1;\n\t\t\t\tmemset(&call_gate, 0, sizeof(call_gate));\n\t\t\t\tcall_gate.segment = segment;\n\t\t\t\ti386_load_call_gate(&call_gate);\n\t\t\t\tDPL = call_gate.dpl;\n\t\t\t\tif(DPL < CPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Call Gate: DPL %i is less than CPL %i\\n\",DPL,CPL);\n\t\t\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t\t\t}\n\t\t\t\tif(DPL < RPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Call Gate: DPL %i is less than RPL %i\\n\",DPL,RPL);\n\t\t\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t\t\t}\n\t\t\t\tif((desc.flags & 0x0080) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Call Gate: Segment is not present\\n\");\n\t\t\t\t\tFAULT(FAULT_NP,segment & 0xfffc)\n\t\t\t\t}\n\t\t\t\t/* Now we examine the segment that the call gate refers to */\n\t\t\t\tif(call_gate.selector == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Call Gate: Gate selector is null\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\t}\n\t\t\t\tif(call_gate.selector & 0x04)\n\t\t\t\t{\n\t\t\t\t\tif((call_gate.selector & ~0x07) > m_ldtr.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"JMP: Call Gate: Gate Selector is past LDT segment limit\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,call_gate.selector & 0xfffc)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif((call_gate.selector & ~0x07) > m_gdtr.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"JMP: Call Gate: Gate Selector is past GDT segment limit\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,call_gate.selector & 0xfffc)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdesc.selector = call_gate.selector;\n\t\t\t\ti386_load_protected_mode_segment(&desc,NULL);\n\t\t\t\tDPL = (desc.flags >> 5) & 0x03;\n\t\t\t\tif((desc.flags & 0x0018) != 0x18)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Call Gate: Gate does not point to a code segment\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,call_gate.selector & 0xfffc)\n\t\t\t\t}\n\t\t\t\tif((desc.flags & 0x0004) == 0)\n\t\t\t\t{  // non-conforming\n\t\t\t\t\tif(DPL != CPL)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"JMP: Call Gate: Gate DPL does not equal CPL\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,call_gate.selector & 0xfffc)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{  // conforming\n\t\t\t\t\tif(DPL > CPL)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"JMP: Call Gate: Gate DPL is greater than CPL\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,call_gate.selector & 0xfffc)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif((desc.flags & 0x0080) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Call Gate: Gate Segment is not present\\n\");\n\t\t\t\t\tFAULT(FAULT_NP,call_gate.selector & 0xfffc)\n\t\t\t\t}\n\t\t\t\tif(call_gate.offset > desc.limit)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Call Gate: Gate offset is past Gate segment limit\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,call_gate.selector & 0xfffc)\n\t\t\t\t}\n\t\t\t\tsegment = call_gate.selector;\n\t\t\t\toffset = call_gate.offset;\n\t\t\t\tbreak;\n\t\t\tcase 0x05:  // Task Gate\n\t\t\t\tlogerror(\"JMP: Task gate at %08x\\n\",m_pc);\n\t\t\t\tmemset(&call_gate, 0, sizeof(call_gate));\n\t\t\t\tcall_gate.segment = segment;\n\t\t\t\ti386_load_call_gate(&call_gate);\n\t\t\t\tDPL = call_gate.dpl;\n\t\t\t\tif(DPL < CPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Task Gate: Gate DPL %i is less than CPL %i\\n\",DPL,CPL);\n\t\t\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t\t\t}\n\t\t\t\tif(DPL < RPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Task Gate: Gate DPL %i is less than CPL %i\\n\",DPL,CPL);\n\t\t\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t\t\t}\n\t\t\t\tif(call_gate.present == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Task Gate: Gate is not present.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t\t\t}\n\t\t\t\t/* Check the TSS that the task gate points to */\n\t\t\t\tdesc.selector = call_gate.selector;\n\t\t\t\ti386_load_protected_mode_segment(&desc,NULL);\n\t\t\t\tDPL = (desc.flags >> 5) & 0x03;  // descriptor privilege level\n\t\t\t\tRPL = call_gate.selector & 0x03;  // requested privilege level\n\t\t\t\tif(call_gate.selector & 0x04)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Task Gate TSS: TSS must be global.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,call_gate.selector & 0xfffc)\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif((call_gate.selector & ~0x07) > m_gdtr.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"JMP: Task Gate TSS: TSS is past GDT limit.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,call_gate.selector & 0xfffc)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif((call_gate.ar & 0x000f) == 0x0009 || (call_gate.ar & 0x000f) == 0x0001)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Task Gate TSS: Segment is not an available TSS.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,call_gate.selector & 0xfffc)\n\t\t\t\t}\n\t\t\t\tif(call_gate.present == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Task Gate TSS: TSS is not present.\\n\");\n\t\t\t\t\tFAULT(FAULT_NP,call_gate.selector & 0xfffc)\n\t\t\t\t}\n\t\t\t\tif(call_gate.ar & 0x08)\n\t\t\t\t\ti386_task_switch(call_gate.selector,0);\n\t\t\t\telse\n\t\t\t\t\ti286_task_switch(call_gate.selector,0);\n\t\t\t\treturn;\n\t\t\tdefault:  // invalid segment type\n\t\t\t\tlogerror(\"JMP: Invalid segment type (%i) to jump to.\\n\",desc.flags & 0x000f);\n\t\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t\t}\n\t\t}\n\t}\n\n\tif(SetRPL != 0)\n\t\tsegment = (segment & ~0x03) | m_CPL;\n\tif(operand32 == 0)\n\t\tm_eip = offset & 0x0000ffff;\n\telse\n\t\tm_eip = offset;\n\tm_sreg[CS].selector = segment;\n\tm_performed_intersegment_jump = 1;\n\ti386_load_segment_descriptor(CS);\n\tCHANGE_PC(m_eip);\n}\n\nstatic void i386_protected_mode_call(UINT16 seg, UINT32 off, int indirect, int operand32)\n{\n\tI386_SREG desc;\n\tI386_CALL_GATE gate;\n\tUINT8 SetRPL = 0;\n\tUINT8 CPL, DPL, RPL;\n\tUINT16 selector = seg;\n\tUINT32 offset = off;\n\tint x;\n\n\tif((selector & ~0x03) == 0)\n\t{\n\t\tlogerror(\"CALL (%08x): Selector is null.\\n\",m_pc);\n\t\tFAULT(FAULT_GP,0)  // #GP(0)\n\t}\n\tif(selector & 0x04)\n\t{\n\t\tif((selector & ~0x07) > m_ldtr.limit)\n\t\t{\n\t\t\tlogerror(\"CALL: Selector is past LDT limit.\\n\");\n\t\t\tFAULT(FAULT_GP,selector & ~0x03)  // #GP(selector)\n\t\t}\n\t}\n\telse\n\t{\n\t\tif((selector & ~0x07) > m_gdtr.limit)\n\t\t{\n\t\t\tlogerror(\"CALL: Selector is past GDT limit.\\n\");\n\t\t\tFAULT(FAULT_GP,selector & ~0x03)  // #GP(selector)\n\t\t}\n\t}\n\n\t/* Determine segment type */\n\tmemset(&desc, 0, sizeof(desc));\n\tdesc.selector = selector;\n\ti386_load_protected_mode_segment(&desc,NULL);\n\tCPL = m_CPL;  // current privilege level\n\tDPL = (desc.flags >> 5) & 0x03;  // descriptor privilege level\n\tRPL = selector & 0x03;  // requested privilege level\n\tif((desc.flags & 0x0018) == 0x18)  // is a code segment\n\t{\n\t\tif(desc.flags & 0x0004)\n\t\t{\n\t\t\t/* conforming */\n\t\t\tif(DPL > CPL)\n\t\t\t{\n\t\t\t\tlogerror(\"CALL: Code segment DPL %i is greater than CPL %i\\n\",DPL,CPL);\n\t\t\t\tFAULT(FAULT_GP,selector & ~0x03)  // #GP(selector)\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* non-conforming */\n\t\t\tif(RPL > CPL)\n\t\t\t{\n\t\t\t\tlogerror(\"CALL: RPL %i is greater than CPL %i\\n\",RPL,CPL);\n\t\t\t\tFAULT(FAULT_GP,selector & ~0x03)  // #GP(selector)\n\t\t\t}\n\t\t\tif(DPL != CPL)\n\t\t\t{\n\t\t\t\tlogerror(\"CALL: Code segment DPL %i is not equal to CPL %i\\n\",DPL,CPL);\n\t\t\t\tFAULT(FAULT_GP,selector & ~0x03)  // #GP(selector)\n\t\t\t}\n\t\t}\n\t\tSetRPL = 1;\n\t\tif((desc.flags & 0x0080) == 0)\n\t\t{\n\t\t\tlogerror(\"CALL (%08x): Code segment is not present.\\n\",m_pc);\n\t\t\tFAULT(FAULT_NP,selector & ~0x03)  // #NP(selector)\n\t\t}\n\t\tif (operand32 != 0)  // if 32-bit\n\t\t{\n\t\t\tUINT32 offset = (STACK_32BIT ? REG32(ESP) - 8 : (REG16(SP) - 8) & 0xffff);\n\t\t\tif(i386_limit_check(SS, offset))\n\t\t\t{\n\t\t\t\tlogerror(\"CALL (%08x): Stack has no room for return address.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_SS,0)  // #SS(0)\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tUINT32 offset = (STACK_32BIT ? REG32(ESP) - 4 : (REG16(SP) - 4) & 0xffff);\n\t\t\tif(i386_limit_check(SS, offset))\n\t\t\t{\n\t\t\t\tlogerror(\"CALL (%08x): Stack has no room for return address.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_SS,0)  // #SS(0)\n\t\t\t}\n\t\t}\n\t\tif(offset > desc.limit)\n\t\t{\n\t\t\tlogerror(\"CALL: EIP is past segment limit.\\n\");\n\t\t\tFAULT(FAULT_GP,0)  // #GP(0)\n\t\t}\n\t}\n\telse\n\t{\n\t\t/* special segment type */\n\t\tif(desc.flags & 0x0010)\n\t\t{\n\t\t\tlogerror(\"CALL: Segment is a data segment.\\n\");\n\t\t\tFAULT(FAULT_GP,desc.selector & ~0x03)  // #GP(selector)\n\t\t}\n\t\telse\n\t\t{\n\t\t\tswitch(desc.flags & 0x000f)\n\t\t\t{\n\t\t\tcase 0x01:  // Available 286 TSS\n\t\t\tcase 0x09:  // Available 386 TSS\n\t\t\t\tlogerror(\"CALL: Available TSS at %08x\\n\",m_pc);\n\t\t\t\tif(DPL < CPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: TSS: DPL is less than CPL.\\n\");\n\t\t\t\t\tFAULT(FAULT_TS,selector & ~0x03) // #TS(selector)\n\t\t\t\t}\n\t\t\t\tif(DPL < RPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: TSS: DPL is less than RPL.\\n\");\n\t\t\t\t\tFAULT(FAULT_TS,selector & ~0x03) // #TS(selector)\n\t\t\t\t}\n\t\t\t\tif(desc.flags & 0x0002)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: TSS: TSS is busy.\\n\");\n\t\t\t\t\tFAULT(FAULT_TS,selector & ~0x03) // #TS(selector)\n\t\t\t\t}\n\t\t\t\tif((desc.flags & 0x0080) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: TSS: Segment %02x is not present.\\n\",selector);\n\t\t\t\t\tFAULT(FAULT_NP,selector & ~0x03) // #NP(selector)\n\t\t\t\t}\n\t\t\t\tif(desc.flags & 0x08)\n\t\t\t\t\ti386_task_switch(desc.selector,1);\n\t\t\t\telse\n\t\t\t\t\ti286_task_switch(desc.selector,1);\n\t\t\t\treturn;\n\t\t\tcase 0x04:  // 286 call gate\n\t\t\tcase 0x0c:  // 386 call gate\n\t\t\t\tif((desc.flags & 0x000f) == 0x04)\n\t\t\t\t\toperand32 = 0;\n\t\t\t\telse\n\t\t\t\t\toperand32 = 1;\n\t\t\t\tmemset(&gate, 0, sizeof(gate));\n\t\t\t\tgate.segment = selector;\n\t\t\t\ti386_load_call_gate(&gate);\n\t\t\t\tDPL = gate.dpl;\n\t\t\t\t//logerror(\"CALL: Call gate at %08x (%i parameters)\\n\",m_pc,gate.dword_count);\n\t\t\t\tif(DPL < CPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: Call gate DPL %i is less than CPL %i.\\n\",DPL,CPL);\n\t\t\t\t\tFAULT(FAULT_GP,desc.selector & ~0x03)  // #GP(selector)\n\t\t\t\t}\n\t\t\t\tif(DPL < RPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: Call gate DPL %i is less than RPL %i.\\n\",DPL,RPL);\n\t\t\t\t\tFAULT(FAULT_GP,desc.selector & ~0x03)  // #GP(selector)\n\t\t\t\t}\n\t\t\t\tif(gate.present == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: Call gate is not present.\\n\");\n\t\t\t\t\tFAULT(FAULT_NP,desc.selector & ~0x03)  // #GP(selector)\n\t\t\t\t}\n\t\t\t\tdesc.selector = gate.selector;\n\t\t\t\tif((gate.selector & ~0x03) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: Call gate: Segment is null.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,0)  // #GP(0)\n\t\t\t\t}\n\t\t\t\tif(desc.selector & 0x04)\n\t\t\t\t{\n\t\t\t\t\tif((desc.selector & ~0x07) > m_ldtr.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"CALL: Call gate: Segment is past LDT limit\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,desc.selector & ~0x03)  // #GP(selector)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif((desc.selector & ~0x07) > m_gdtr.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"CALL: Call gate: Segment is past GDT limit\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,desc.selector & ~0x03)  // #GP(selector)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ti386_load_protected_mode_segment(&desc,NULL);\n\t\t\t\tif((desc.flags & 0x0018) != 0x18)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: Call gate: Segment is not a code segment.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,desc.selector & ~0x03)  // #GP(selector)\n\t\t\t\t}\n\t\t\t\tDPL = ((desc.flags >> 5) & 0x03);\n\t\t\t\tif(DPL > CPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: Call gate: Segment DPL %i is greater than CPL %i.\\n\",DPL,CPL);\n\t\t\t\t\tFAULT(FAULT_GP,desc.selector & ~0x03)  // #GP(selector)\n\t\t\t\t}\n\t\t\t\tif((desc.flags & 0x0080) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL (%08x): Code segment is not present.\\n\",m_pc);\n\t\t\t\t\tFAULT(FAULT_NP,desc.selector & ~0x03)  // #NP(selector)\n\t\t\t\t}\n\t\t\t\tif(DPL < CPL && (desc.flags & 0x0004) == 0)\n\t\t\t\t{\n\t\t\t\t\tI386_SREG stack;\n\t\t\t\t\tI386_SREG temp;\n\t\t\t\t\tUINT32 oldSS,oldESP;\n\t\t\t\t\t/* more privilege */\n\t\t\t\t\t/* Check new SS segment for privilege level from TSS */\n\t\t\t\t\tmemset(&stack, 0, sizeof(stack));\n\t\t\t\t\tstack.selector = i386_get_stack_segment(DPL);\n\t\t\t\t\ti386_load_protected_mode_segment(&stack,NULL);\n\t\t\t\t\tif((stack.selector & ~0x03) == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"CALL: Call gate: TSS selector is null\\n\");\n\t\t\t\t\t\tFAULT(FAULT_TS,0)  // #TS(0)\n\t\t\t\t\t}\n\t\t\t\t\tif(stack.selector & 0x04)\n\t\t\t\t\t{\n\t\t\t\t\t\tif((stack.selector & ~0x07) > m_ldtr.limit)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlogerror(\"CALL: Call gate: TSS selector is past LDT limit\\n\");\n\t\t\t\t\t\t\tFAULT(FAULT_TS,stack.selector)  // #TS(SS selector)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tif((stack.selector & ~0x07) > m_gdtr.limit)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlogerror(\"CALL: Call gate: TSS selector is past GDT limit\\n\");\n\t\t\t\t\t\t\tFAULT(FAULT_TS,stack.selector)  // #TS(SS selector)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif((stack.selector & 0x03) != DPL)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"CALL: Call gate: Stack selector RPL does not equal code segment DPL %i\\n\",DPL);\n\t\t\t\t\t\tFAULT(FAULT_TS,stack.selector)  // #TS(SS selector)\n\t\t\t\t\t}\n\t\t\t\t\tif(((stack.flags >> 5) & 0x03) != DPL)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"CALL: Call gate: Stack DPL does not equal code segment DPL %i\\n\",DPL);\n\t\t\t\t\t\tFAULT(FAULT_TS,stack.selector)  // #TS(SS selector)\n\t\t\t\t\t}\n\t\t\t\t\tif((stack.flags & 0x0018) != 0x10 && (stack.flags & 0x0002))\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"CALL: Call gate: Stack segment is not a writable data segment\\n\");\n\t\t\t\t\t\tFAULT(FAULT_TS,stack.selector)  // #TS(SS selector)\n\t\t\t\t\t}\n\t\t\t\t\tif((stack.flags & 0x0080) == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"CALL: Call gate: Stack segment is not present\\n\");\n\t\t\t\t\t\tFAULT(FAULT_SS,stack.selector)  // #SS(SS selector)\n\t\t\t\t\t}\n\t\t\t\t\tUINT32 newESP = i386_get_stack_ptr(DPL);\n\t\t\t\t\tif(!stack.d)\n\t\t\t\t\t{\n\t\t\t\t\t\tnewESP &= 0xffff;\n\t\t\t\t\t}\n\t\t\t\t\tif(operand32 != 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(newESP < ((gate.dword_count & 0x1f) + 16))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlogerror(\"CALL: Call gate: New stack has no room for 32-bit return address and parameters.\\n\");\n\t\t\t\t\t\t\tFAULT(FAULT_SS,0) // #SS(0)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(gate.offset > desc.limit)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlogerror(\"CALL: Call gate: EIP is past segment limit.\\n\");\n\t\t\t\t\t\t\tFAULT(FAULT_GP,0) // #GP(0)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tif(newESP < ((gate.dword_count & 0x1f) + 8))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlogerror(\"CALL: Call gate: New stack has no room for 16-bit return address and parameters.\\n\");\n\t\t\t\t\t\t\tFAULT(FAULT_SS,0) // #SS(0)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif((gate.offset & 0xffff) > desc.limit)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlogerror(\"CALL: Call gate: IP is past segment limit.\\n\");\n\t\t\t\t\t\t\tFAULT(FAULT_GP,0) // #GP(0)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tselector = gate.selector;\n\t\t\t\t\toffset = gate.offset;\n\n\t\t\t\t\tm_CPL = (stack.flags >> 5) & 0x03;\n\t\t\t\t\t/* check for page fault at new stack */\n\t\t\t\t\tWRITE_TEST(stack.base+newESP-1);\n\t\t\t\t\t/* switch to new stack */\n\t\t\t\t\toldSS = m_sreg[SS].selector;\n\t\t\t\t\tm_sreg[SS].selector = i386_get_stack_segment(m_CPL);\n\t\t\t\t\tif(operand32 != 0)\n\t\t\t\t\t{\n\t\t\t\t\t\toldESP = REG32(ESP);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\toldESP = REG16(SP);\n\t\t\t\t\t}\n\t\t\t\t\ti386_load_segment_descriptor(SS );\n\t\t\t\t\tREG32(ESP) = newESP;\n\n\t\t\t\t\tif(operand32 != 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tPUSH32(oldSS);\n\t\t\t\t\t\tPUSH32(oldESP);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tPUSH16(oldSS);\n\t\t\t\t\t\tPUSH16(oldESP & 0xffff);\n\t\t\t\t\t}\n\n\t\t\t\t\tmemset(&temp, 0, sizeof(temp));\n\t\t\t\t\ttemp.selector = oldSS;\n\t\t\t\t\ti386_load_protected_mode_segment(&temp,NULL);\n\t\t\t\t\t/* copy parameters from old stack to new stack */\n\t\t\t\t\tfor(x=(gate.dword_count & 0x1f)-1;x>=0;x--)\n\t\t\t\t\t{\n\t\t\t\t\t\tUINT32 addr = oldESP + (operand32?(x*4):(x*2));\n\t\t\t\t\t\taddr = temp.base + (temp.d?addr:(addr&0xffff));\n\t\t\t\t\t\tif(operand32)\n\t\t\t\t\t\t\tPUSH32(READ32(addr));\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tPUSH16(READ16(addr));\n\t\t\t\t\t}\n\t\t\t\t\tSetRPL = 1;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t/* same privilege */\n\t\t\t\t\tif (operand32 != 0)  // if 32-bit\n\t\t\t\t\t{\n\t\t\t\t\t\tUINT32 stkoff = (STACK_32BIT ? REG32(ESP) - 8 : (REG16(SP) - 8) & 0xffff);\n\t\t\t\t\t\tif(i386_limit_check(SS, stkoff))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlogerror(\"CALL: Stack has no room for return address.\\n\");\n\t\t\t\t\t\t\tFAULT(FAULT_SS,0) // #SS(0)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tselector = gate.selector;\n\t\t\t\t\t\toffset = gate.offset;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tUINT32 stkoff = (STACK_32BIT ? REG32(ESP) - 4 : (REG16(SP) - 4) & 0xffff);\n\t\t\t\t\t\tif(i386_limit_check(SS, stkoff))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlogerror(\"CALL: Stack has no room for return address.\\n\");\n\t\t\t\t\t\t\tFAULT(FAULT_SS,0) // #SS(0)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tselector = gate.selector;\n\t\t\t\t\t\toffset = gate.offset & 0xffff;\n\t\t\t\t\t}\n\t\t\t\t\tif(offset > desc.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"CALL: EIP is past segment limit.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,0) // #GP(0)\n\t\t\t\t\t}\n\t\t\t\t\tSetRPL = 1;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x05:  // task gate\n\t\t\t\tlogerror(\"CALL: Task gate at %08x\\n\",m_pc);\n\t\t\t\tmemset(&gate, 0, sizeof(gate));\n\t\t\t\tgate.segment = selector;\n\t\t\t\ti386_load_call_gate(&gate);\n\t\t\t\tDPL = gate.dpl;\n\t\t\t\tif(DPL < CPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: Task Gate: Gate DPL is less than CPL.\\n\");\n\t\t\t\t\tFAULT(FAULT_TS,selector & ~0x03) // #TS(selector)\n\t\t\t\t}\n\t\t\t\tif(DPL < RPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: Task Gate: Gate DPL is less than RPL.\\n\");\n\t\t\t\t\tFAULT(FAULT_TS,selector & ~0x03) // #TS(selector)\n\t\t\t\t}\n\t\t\t\tif((gate.ar & 0x0080) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: Task Gate: Gate is not present.\\n\");\n\t\t\t\t\tFAULT(FAULT_NP,selector & ~0x03) // #NP(selector)\n\t\t\t\t}\n\t\t\t\t/* Check the TSS that the task gate points to */\n\t\t\t\tdesc.selector = gate.selector;\n\t\t\t\ti386_load_protected_mode_segment(&desc,NULL);\n\t\t\t\tif(gate.selector & 0x04)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: Task Gate: TSS is not global.\\n\");\n\t\t\t\t\tFAULT(FAULT_TS,gate.selector & ~0x03) // #TS(selector)\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif((gate.selector & ~0x07) > m_gdtr.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"CALL: Task Gate: TSS is past GDT limit.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_TS,gate.selector & ~0x03) // #TS(selector)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(desc.flags & 0x0002)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: Task Gate: TSS is busy.\\n\");\n\t\t\t\t\tFAULT(FAULT_TS,gate.selector & ~0x03) // #TS(selector)\n\t\t\t\t}\n\t\t\t\tif((desc.flags & 0x0080) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: Task Gate: TSS is not present.\\n\");\n\t\t\t\t\tFAULT(FAULT_NP,gate.selector & ~0x03) // #TS(selector)\n\t\t\t\t}\n\t\t\t\tif(desc.flags & 0x08)\n\t\t\t\t\ti386_task_switch(desc.selector,1);  // with nesting\n\t\t\t\telse\n\t\t\t\t\ti286_task_switch(desc.selector,1);\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\tlogerror(\"CALL: Invalid special segment type (%i) to jump to.\\n\",desc.flags & 0x000f);\n\t\t\t\tFAULT(FAULT_GP,selector & ~0x07)  // #GP(selector)\n\t\t\t}\n\t\t}\n\t}\n\n\tif(SetRPL != 0)\n\t\tselector = (selector & ~0x03) | m_CPL;\n\n\tUINT32 tempSP = REG32(ESP);\n\ttry\n\t{\n\t\t// this is ugly but the alternative is worse\n\t\tif(operand32 == 0)\n\t\t{\n\t\t\t/* 16-bit operand size */\n\t\t\tPUSH16(m_sreg[CS].selector );\n\t\t\tPUSH16(m_eip & 0x0000ffff );\n\t\t\tm_sreg[CS].selector = selector;\n\t\t\tm_performed_intersegment_jump = 1;\n\t\t\tm_eip = offset;\n\t\t\ti386_load_segment_descriptor(CS);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* 32-bit operand size */\n\t\t\tPUSH32(m_sreg[CS].selector );\n\t\t\tPUSH32(m_eip );\n\t\t\tm_sreg[CS].selector = selector;\n\t\t\tm_performed_intersegment_jump = 1;\n\t\t\tm_eip = offset;\n\t\t\ti386_load_segment_descriptor(CS );\n\t\t}\n\t}\n\tcatch(UINT64 e)\n\t{\n\t\tREG32(ESP) = tempSP;\n\t\tthrow e;\n\t}\n\n\tCHANGE_PC(m_eip);\n}\n\nstatic void i386_protected_mode_retf(UINT16 count, UINT8 operand32)\n{\n\tUINT32 newCS, newEIP;\n\tI386_SREG desc;\n\tUINT8 CPL, RPL, DPL;\n\n\tUINT32 ea = i386_translate(SS, (STACK_32BIT)?REG32(ESP):REG16(SP), 0);\n\n\tif(operand32 == 0)\n\t{\n\t\tnewEIP = READ16(ea) & 0xffff;\n\t\tnewCS = READ16(ea+2) & 0xffff;\n\t}\n\telse\n\t{\n\t\tnewEIP = READ32(ea);\n\t\tnewCS = READ32(ea+4) & 0xffff;\n\t}\n\n\tmemset(&desc, 0, sizeof(desc));\n\tdesc.selector = newCS;\n\ti386_load_protected_mode_segment(&desc,NULL);\n\tCPL = m_CPL;  // current privilege level\n\tDPL = (desc.flags >> 5) & 0x03;  // descriptor privilege level\n\tRPL = newCS & 0x03;\n\n\tif(RPL < CPL)\n\t{\n\t\tlogerror(\"RETF (%08x): Return segment RPL is less than CPL.\\n\",m_pc);\n\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t}\n\n\tif(RPL == CPL)\n\t{\n\t\t/* same privilege level */\n\t\tif((newCS & ~0x03) == 0)\n\t\t{\n\t\t\tlogerror(\"RETF: Return segment is null.\\n\");\n\t\t\tFAULT(FAULT_GP,0)\n\t\t}\n\t\tif(newCS & 0x04)\n\t\t{\n\t\t\tif((newCS & ~0x07) >= m_ldtr.limit)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF: Return segment is past LDT limit.\\n\");\n\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif((newCS & ~0x07) >= m_gdtr.limit)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF: Return segment is past GDT limit.\\n\");\n\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t}\n\t\t}\n\t\tif((desc.flags & 0x0018) != 0x0018)\n\t\t{\n\t\t\tlogerror(\"RETF: Return segment is not a code segment.\\n\");\n\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t}\n\t\tif(desc.flags & 0x0004)\n\t\t{\n\t\t\tif(DPL > RPL)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF: Conforming code segment DPL is greater than CS RPL.\\n\");\n\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(DPL != RPL)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF: Non-conforming code segment DPL does not equal CS RPL.\\n\");\n\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t}\n\t\t}\n\t\tif((desc.flags & 0x0080) == 0)\n\t\t{\n\t\t\tlogerror(\"RETF (%08x): Code segment is not present.\\n\",m_pc);\n\t\t\tFAULT(FAULT_NP,newCS & ~0x03)\n\t\t}\n\t\tif(newEIP > desc.limit)\n\t\t{\n\t\t\tlogerror(\"RETF: EIP is past code segment limit.\\n\");\n\t\t\tFAULT(FAULT_GP,0)\n\t\t}\n\t\tif(operand32 == 0)\n\t\t{\n\t\t\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\t\t\tif(i386_limit_check(SS,offset+count+3) != 0)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF (%08x): SP is past stack segment limit.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_SS,0)\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\t\t\tif(i386_limit_check(SS,offset+count+7) != 0)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF: ESP is past stack segment limit.\\n\");\n\t\t\t\tFAULT(FAULT_SS,0)\n\t\t\t}\n\t\t}\n\t\tif(operand32 == 0)\n\t\t\tREG16(SP) += (4+count);\n\t\telse\n\t\t\tREG32(ESP) += (8+count);\n\t}\n\telse if(RPL > CPL)\n\t{\n\t\tUINT32 newSS, newESP;  // when changing privilege\n\t\t/* outer privilege level */\n\t\tif(operand32 == 0)\n\t\t{\n\t\t\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\t\t\tif(i386_limit_check(SS,offset+count+7) != 0)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF (%08x): SP is past stack segment limit.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_SS,0)\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\t\t\tif(i386_limit_check(SS,offset+count+15) != 0)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF: ESP is past stack segment limit.\\n\");\n\t\t\t\tFAULT(FAULT_SS,0)\n\t\t\t}\n\t\t}\n\t\t/* Check CS selector and descriptor */\n\t\tif((newCS & ~0x03) == 0)\n\t\t{\n\t\t\tlogerror(\"RETF: CS segment is null.\\n\");\n\t\t\tFAULT(FAULT_GP,0)\n\t\t}\n\t\tif(newCS & 0x04)\n\t\t{\n\t\t\tif((newCS & ~0x07) >= m_ldtr.limit)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF: CS segment selector is past LDT limit.\\n\");\n\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif((newCS & ~0x07) >= m_gdtr.limit)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF: CS segment selector is past GDT limit.\\n\");\n\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t}\n\t\t}\n\t\tif((desc.flags & 0x0018) != 0x0018)\n\t\t{\n\t\t\tlogerror(\"RETF: CS segment is not a code segment.\\n\");\n\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t}\n\t\tif(desc.flags & 0x0004)\n\t\t{\n\t\t\tif(DPL > RPL)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF: Conforming CS segment DPL is greater than return selector RPL.\\n\");\n\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(DPL != RPL)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF: Non-conforming CS segment DPL is not equal to return selector RPL.\\n\");\n\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t}\n\t\t}\n\t\tif((desc.flags & 0x0080) == 0)\n\t\t{\n\t\t\tlogerror(\"RETF: CS segment is not present.\\n\");\n\t\t\tFAULT(FAULT_NP,newCS & ~0x03)\n\t\t}\n\t\tif(newEIP > desc.limit)\n\t\t{\n\t\t\tlogerror(\"RETF: EIP is past return CS segment limit.\\n\");\n\t\t\tFAULT(FAULT_GP,0)\n\t\t}\n\n\t\tif(operand32 == 0)\n\t\t{\n\t\t\tea += count+4;\n\t\t\tnewESP = READ16(ea) & 0xffff;\n\t\t\tnewSS = READ16(ea+2) & 0xffff;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tea += count+8;\n\t\t\tnewESP = READ32(ea);\n\t\t\tnewSS = READ32(ea+4) & 0xffff;\n\t\t}\n\n\t\t/* Check SS selector and descriptor */\n\t\tdesc.selector = newSS;\n\t\ti386_load_protected_mode_segment(&desc,NULL);\n\t\tDPL = (desc.flags >> 5) & 0x03;  // descriptor privilege level\n\t\tif((newSS & ~0x07) == 0)\n\t\t{\n\t\t\tlogerror(\"RETF: SS segment is null.\\n\");\n\t\t\tFAULT(FAULT_GP,0)\n\t\t}\n\t\tif(newSS & 0x04)\n\t\t{\n\t\t\tif((newSS & ~0x07) > m_ldtr.limit)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF (%08x): SS segment selector is past LDT limit.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_GP,newSS & ~0x03)\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif((newSS & ~0x07) > m_gdtr.limit)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF (%08x): SS segment selector is past GDT limit.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_GP,newSS & ~0x03)\n\t\t\t}\n\t\t}\n\t\tif((newSS & 0x03) != RPL)\n\t\t{\n\t\t\tlogerror(\"RETF: SS segment RPL is not equal to CS segment RPL.\\n\");\n\t\t\tFAULT(FAULT_GP,newSS & ~0x03)\n\t\t}\n\t\tif((desc.flags & 0x0018) != 0x0010 || (desc.flags & 0x0002) == 0)\n\t\t{\n\t\t\tlogerror(\"RETF: SS segment is not a writable data segment.\\n\");\n\t\t\tFAULT(FAULT_GP,newSS & ~0x03)\n\t\t}\n\t\tif(((desc.flags >> 5) & 0x03) != RPL)\n\t\t{\n\t\t\tlogerror(\"RETF: SS DPL is not equal to CS segment RPL.\\n\");\n\t\t\tFAULT(FAULT_GP,newSS & ~0x03)\n\t\t}\n\t\tif((desc.flags & 0x0080) == 0)\n\t\t{\n\t\t\tlogerror(\"RETF: SS segment is not present.\\n\");\n\t\t\tFAULT(FAULT_GP,newSS & ~0x03)\n\t\t}\n\t\tm_CPL = newCS & 0x03;\n\n\t\t/* Load new SS:(E)SP */\n\t\tif(operand32 == 0)\n\t\t\tREG16(SP) = (newESP+count) & 0xffff;\n\t\telse\n\t\t\tREG32(ESP) = newESP+count;\n\t\tm_sreg[SS].selector = newSS;\n\t\ti386_load_segment_descriptor(SS );\n\n\t\t/* Check that DS, ES, FS and GS are valid for the new privilege level */\n\t\ti386_check_sreg_validity(DS);\n\t\ti386_check_sreg_validity(ES);\n\t\ti386_check_sreg_validity(FS);\n\t\ti386_check_sreg_validity(GS);\n\t}\n\n\t/* Load new CS:(E)IP */\n\tif(operand32 == 0)\n\t\tm_eip = newEIP & 0xffff;\n\telse\n\t\tm_eip = newEIP;\n\tm_sreg[CS].selector = newCS;\n\ti386_load_segment_descriptor(CS );\n\tCHANGE_PC(m_eip);\n}\n\nstatic void i386_protected_mode_iret(int operand32)\n{\n\tUINT32 newCS, newEIP;\n\tUINT32 newSS, newESP;  // when changing privilege\n\tI386_SREG desc,stack;\n\tUINT8 CPL, RPL, DPL;\n\tUINT32 newflags;\n\n\tCPL = m_CPL;\n\tUINT32 ea = i386_translate(SS, (STACK_32BIT)?REG32(ESP):REG16(SP), 0);\n\tif(operand32 == 0)\n\t{\n\t\tnewEIP = READ16(ea) & 0xffff;\n\t\tnewCS = READ16(ea+2) & 0xffff;\n\t\tnewflags = READ16(ea+4) & 0xffff;\n\t}\n\telse\n\t{\n\t\tnewEIP = READ32(ea);\n\t\tnewCS = READ32(ea+4) & 0xffff;\n\t\tnewflags = READ32(ea+8);\n\t}\n\n\tif(V8086_MODE)\n\t{\n\t\tUINT32 oldflags = get_flags();\n\t\tif(!m_IOP1 || !m_IOP2)\n\t\t{\n\t\t\tlogerror(\"IRET (%08x): Is in Virtual 8086 mode and IOPL != 3.\\n\",m_pc);\n\t\t\tFAULT(FAULT_GP,0)\n\t\t}\n\t\tif(operand32 == 0)\n\t\t{\n\t\t\tm_eip = newEIP & 0xffff;\n\t\t\tm_sreg[CS].selector = newCS & 0xffff;\n\t\t\tnewflags &= ~(3<<12);\n\t\t\tnewflags |= (((oldflags>>12)&3)<<12);  // IOPL cannot be changed in V86 mode\n\t\t\tset_flags((newflags & 0xffff) | (oldflags & ~0xffff));\n\t\t\tREG16(SP) += 6;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = newEIP;\n\t\t\tm_sreg[CS].selector = newCS & 0xffff;\n\t\t\tnewflags &= ~(3<<12);\n\t\t\tnewflags |= 0x20000 | (((oldflags>>12)&3)<<12);  // IOPL and VM cannot be changed in V86 mode\n\t\t\tset_flags(newflags);\n\t\t\tREG32(ESP) += 12;\n\t\t}\n\t}\n\telse if(NESTED_TASK)\n\t{\n\t\tUINT32 task = READ32(m_task.base);\n\t\t/* Task Return */\n\t\tlogerror(\"IRET (%08x): Nested task return.\\n\",m_pc);\n\t\t/* Check back-link selector in TSS */\n\t\tif(task & 0x04)\n\t\t{\n\t\t\tlogerror(\"IRET: Task return: Back-linked TSS is not in GDT.\\n\");\n\t\t\tFAULT(FAULT_TS,task & ~0x03)\n\t\t}\n\t\tif((task & ~0x07) >= m_gdtr.limit)\n\t\t{\n\t\t\tlogerror(\"IRET: Task return: Back-linked TSS is not in GDT.\\n\");\n\t\t\tFAULT(FAULT_TS,task & ~0x03)\n\t\t}\n\t\tmemset(&desc, 0, sizeof(desc));\n\t\tdesc.selector = task;\n\t\ti386_load_protected_mode_segment(&desc,NULL);\n\t\tif((desc.flags & 0x001f) != 0x000b)\n\t\t{\n\t\t\tlogerror(\"IRET (%08x): Task return: Back-linked TSS is not a busy TSS.\\n\",m_pc);\n\t\t\tFAULT(FAULT_TS,task & ~0x03)\n\t\t}\n\t\tif((desc.flags & 0x0080) == 0)\n\t\t{\n\t\t\tlogerror(\"IRET: Task return: Back-linked TSS is not present.\\n\");\n\t\t\tFAULT(FAULT_NP,task & ~0x03)\n\t\t}\n\t\tif(desc.flags & 0x08)\n\t\t\ti386_task_switch(desc.selector,0);\n\t\telse\n\t\t\ti286_task_switch(desc.selector,0);\n\t\treturn;\n\t}\n\telse\n\t{\n\t\tif(newflags & 0x00020000) // if returning to virtual 8086 mode\n\t\t{\n\t\t\t// 16-bit iret can't reach here\n\t\t\tnewESP = READ32(ea+12);\n\t\t\tnewSS = READ32(ea+16) & 0xffff;\n\t\t\t/* Return to v86 mode */\n\t\t\t//logerror(\"IRET (%08x): Returning to Virtual 8086 mode.\\n\",m_pc);\n\t\t\tif(CPL != 0)\n\t\t\t{\n\t\t\t\tUINT32 oldflags = get_flags();\n\t\t\t\tnewflags = (newflags & ~0x00003000) | (oldflags & 0x00003000);\n\t\t\t}\n\t\t\tset_flags(newflags);\n\t\t\tm_eip = POP32() & 0xffff;  // high 16 bits are ignored\n\t\t\tm_sreg[CS].selector = POP32() & 0xffff;\n\t\t\tPOP32();  // already set flags\n\t\t\tnewESP = POP32();\n\t\t\tnewSS = POP32() & 0xffff;\n\t\t\tm_sreg[ES].selector = POP32() & 0xffff;\n\t\t\tm_sreg[DS].selector = POP32() & 0xffff;\n\t\t\tm_sreg[FS].selector = POP32() & 0xffff;\n\t\t\tm_sreg[GS].selector = POP32() & 0xffff;\n\t\t\tREG32(ESP) = newESP;  // all 32 bits are loaded\n\t\t\tm_sreg[SS].selector = newSS;\n\t\t\ti386_load_segment_descriptor(ES);\n\t\t\ti386_load_segment_descriptor(DS);\n\t\t\ti386_load_segment_descriptor(FS);\n\t\t\ti386_load_segment_descriptor(GS);\n\t\t\ti386_load_segment_descriptor(SS);\n\t\t\tm_CPL = 3;  // Virtual 8086 tasks are always run at CPL 3\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(operand32 == 0)\n\t\t\t{\n\t\t\t\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\t\t\t\tif(i386_limit_check(SS,offset+3) != 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Data on stack is past SS limit.\\n\");\n\t\t\t\t\tFAULT(FAULT_SS,0)\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\t\t\t\tif(i386_limit_check(SS,offset+7) != 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Data on stack is past SS limit.\\n\");\n\t\t\t\t\tFAULT(FAULT_SS,0)\n\t\t\t\t}\n\t\t\t}\n\t\t\tRPL = newCS & 0x03;\n\t\t\tif(RPL < CPL)\n\t\t\t{\n\t\t\t\tlogerror(\"IRET (%08x): Return CS RPL is less than CPL.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t}\n\t\t\tif(RPL == CPL)\n\t\t\t{\n\t\t\t\t/* return to same privilege level */\n\t\t\t\tif(operand32 == 0)\n\t\t\t\t{\n\t\t\t\t\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\t\t\t\t\tif(i386_limit_check(SS,offset+5) != 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET (%08x): Data on stack is past SS limit.\\n\",m_pc);\n\t\t\t\t\t\tFAULT(FAULT_SS,0)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\t\t\t\t\tif(i386_limit_check(SS,offset+11) != 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET (%08x): Data on stack is past SS limit.\\n\",m_pc);\n\t\t\t\t\t\tFAULT(FAULT_SS,0)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif((newCS & ~0x03) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Return CS selector is null.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\t}\n\t\t\t\tif(newCS & 0x04)\n\t\t\t\t{\n\t\t\t\t\tif((newCS & ~0x07) >= m_ldtr.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET: Return CS selector (%04x) is past LDT limit.\\n\",newCS);\n\t\t\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif((newCS & ~0x07) >= m_gdtr.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET: Return CS selector is past GDT limit.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tmemset(&desc, 0, sizeof(desc));\n\t\t\t\tdesc.selector = newCS;\n\t\t\t\ti386_load_protected_mode_segment(&desc,NULL);\n\t\t\t\tDPL = (desc.flags >> 5) & 0x03;  // descriptor privilege level\n\t\t\t\tRPL = newCS & 0x03;\n\t\t\t\tif((desc.flags & 0x0018) != 0x0018)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET (%08x): Return CS segment is not a code segment.\\n\",m_pc);\n\t\t\t\t\tFAULT(FAULT_GP,newCS & ~0x07)\n\t\t\t\t}\n\t\t\t\tif(desc.flags & 0x0004)\n\t\t\t\t{\n\t\t\t\t\tif(DPL > RPL)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET: Conforming return CS DPL is greater than CS RPL.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif(DPL != RPL)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET: Non-conforming return CS DPL is not equal to CS RPL.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif((desc.flags & 0x0080) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Return CS segment is not present.\\n\");\n\t\t\t\t\tFAULT(FAULT_NP,newCS & ~0x03)\n\t\t\t\t}\n\t\t\t\tif(newEIP > desc.limit)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Return EIP is past return CS limit.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\t}\n\n\t\t\t\tif(CPL != 0)\n\t\t\t\t{\n\t\t\t\t\tUINT32 oldflags = get_flags();\n\t\t\t\t\tnewflags = (newflags & ~0x00003000) | (oldflags & 0x00003000);\n\t\t\t\t}\n\n\t\t\t\tif(operand32 == 0)\n\t\t\t\t{\n\t\t\t\t\tm_eip = newEIP;\n\t\t\t\t\tm_sreg[CS].selector = newCS;\n\t\t\t\t\tset_flags(newflags);\n\t\t\t\t\tREG16(SP) += 6;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tm_eip = newEIP;\n\t\t\t\t\tm_sreg[CS].selector = newCS & 0xffff;\n\t\t\t\t\tset_flags(newflags);\n\t\t\t\t\tREG32(ESP) += 12;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if(RPL > CPL)\n\t\t\t{\n\t\t\t\t/* return to outer privilege level */\n\t\t\t\tmemset(&desc, 0, sizeof(desc));\n\t\t\t\tdesc.selector = newCS;\n\t\t\t\ti386_load_protected_mode_segment(&desc,NULL);\n\t\t\t\tDPL = (desc.flags >> 5) & 0x03;  // descriptor privilege level\n\t\t\t\tRPL = newCS & 0x03;\n\t\t\t\tif(operand32 == 0)\n\t\t\t\t{\n\t\t\t\t\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\t\t\t\t\tif(i386_limit_check(SS,offset+9) != 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET: SP is past SS limit.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_SS,0)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\t\t\t\t\tif(i386_limit_check(SS,offset+19) != 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET: ESP is past SS limit.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_SS,0)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t/* Check CS selector and descriptor */\n\t\t\t\tif((newCS & ~0x03) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Return CS selector is null.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\t}\n\t\t\t\tif(newCS & 0x04)\n\t\t\t\t{\n\t\t\t\t\tif((newCS & ~0x07) >= m_ldtr.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET: Return CS selector is past LDT limit.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif((newCS & ~0x07) >= m_gdtr.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET: Return CS selector is past GDT limit.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif((desc.flags & 0x0018) != 0x0018)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Return CS segment is not a code segment.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t\t}\n\t\t\t\tif(desc.flags & 0x0004)\n\t\t\t\t{\n\t\t\t\t\tif(DPL > RPL)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET: Conforming return CS DPL is greater than CS RPL.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif(DPL != RPL)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET: Non-conforming return CS DPL does not equal CS RPL.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif((desc.flags & 0x0080) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Return CS segment is not present.\\n\");\n\t\t\t\t\tFAULT(FAULT_NP,newCS & ~0x03)\n\t\t\t\t}\n\n\t\t\t\t/* Check SS selector and descriptor */\n\t\t\t\tif(operand32 == 0)\n\t\t\t\t{\n\t\t\t\t\tnewESP = READ16(ea+6) & 0xffff;\n\t\t\t\t\tnewSS = READ16(ea+8) & 0xffff;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tnewESP = READ32(ea+12);\n\t\t\t\t\tnewSS = READ32(ea+16) & 0xffff;\n\t\t\t\t}\n\t\t\t\tmemset(&stack, 0, sizeof(stack));\n\t\t\t\tstack.selector = newSS;\n\t\t\t\ti386_load_protected_mode_segment(&stack,NULL);\n\t\t\t\tDPL = (stack.flags >> 5) & 0x03;\n\t\t\t\tif((newSS & ~0x03) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Return SS selector is null.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\t}\n\t\t\t\tif(newSS & 0x04)\n\t\t\t\t{\n\t\t\t\t\tif((newSS & ~0x07) >= m_ldtr.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET: Return SS selector is past LDT limit.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,newSS & ~0x03);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif((newSS & ~0x07) >= m_gdtr.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET: Return SS selector is past GDT limit.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,newSS & ~0x03);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif((newSS & 0x03) != RPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Return SS RPL is not equal to return CS RPL.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,newSS & ~0x03)\n\t\t\t\t}\n\t\t\t\tif((stack.flags & 0x0018) != 0x0010)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Return SS segment is not a data segment.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,newSS & ~0x03)\n\t\t\t\t}\n\t\t\t\tif((stack.flags & 0x0002) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Return SS segment is not writable.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,newSS & ~0x03)\n\t\t\t\t}\n\t\t\t\tif(DPL != RPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Return SS DPL does not equal SS RPL.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,newSS & ~0x03)\n\t\t\t\t}\n\t\t\t\tif((stack.flags & 0x0080) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Return SS segment is not present.\\n\");\n\t\t\t\t\tFAULT(FAULT_NP,newSS & ~0x03)\n\t\t\t\t}\n\t\t\t\tif(newEIP > desc.limit)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: EIP is past return CS limit.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\t}\n\n//              if(operand32 == 0)\n//                  REG16(SP) += 10;\n//              else\n//                  REG32(ESP) += 20;\n\n\t\t\t\t// IOPL can only change if CPL is zero\n\t\t\t\tif(CPL != 0)\n\t\t\t\t{\n\t\t\t\t\tUINT32 oldflags = get_flags();\n\t\t\t\t\tnewflags = (newflags & ~0x00003000) | (oldflags & 0x00003000);\n\t\t\t\t}\n\n\t\t\t\tif(operand32 == 0)\n\t\t\t\t{\n\t\t\t\t\tm_eip = newEIP & 0xffff;\n\t\t\t\t\tm_sreg[CS].selector = newCS;\n\t\t\t\t\tset_flags(newflags);\n\t\t\t\t\tREG16(SP) = newESP & 0xffff;\n\t\t\t\t\tm_sreg[SS].selector = newSS;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tm_eip = newEIP;\n\t\t\t\t\tm_sreg[CS].selector = newCS & 0xffff;\n\t\t\t\t\tset_flags(newflags);\n\t\t\t\t\tREG32(ESP) = newESP;\n\t\t\t\t\tm_sreg[SS].selector = newSS & 0xffff;\n\t\t\t\t}\n\t\t\t\tm_CPL = newCS & 0x03;\n\t\t\t\ti386_load_segment_descriptor(SS);\n\n\t\t\t\t/* Check that DS, ES, FS and GS are valid for the new privilege level */\n\t\t\t\ti386_check_sreg_validity(DS);\n\t\t\t\ti386_check_sreg_validity(ES);\n\t\t\t\ti386_check_sreg_validity(FS);\n\t\t\t\ti386_check_sreg_validity(GS);\n\t\t\t}\n\t\t}\n\t}\n\n\ti386_load_segment_descriptor(CS);\n\tCHANGE_PC(m_eip);\n}\n\n#include \"cycles.h\"\n\nstatic UINT8 cycle_table_rm[X86_NUM_CPUS][CYCLES_NUM_OPCODES];\nstatic UINT8 cycle_table_pm[X86_NUM_CPUS][CYCLES_NUM_OPCODES];\n\n#ifdef SUPPORT_RDTSC\n\n#define CYCLES_NUM(x)   (m_cycles -= (x))\n\nINLINE void CYCLES(int x)\n{\n\tif (PROTECTED_MODE)\n\t{\n\t\tm_cycles -= m_cycle_table_pm[x];\n\t}\n\telse\n\t{\n\t\tm_cycles -= m_cycle_table_rm[x];\n\t}\n}\n\nINLINE void CYCLES_RM(int modrm, int r, int m)\n{\n\tif (modrm >= 0xc0)\n\t{\n\t\tif (PROTECTED_MODE)\n\t\t{\n\t\t\tm_cycles -= m_cycle_table_pm[r];\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_cycles -= m_cycle_table_rm[r];\n\t\t}\n\t}\n\telse\n\t{\n\t\tif (PROTECTED_MODE)\n\t\t{\n\t\t\tm_cycles -= m_cycle_table_pm[m];\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_cycles -= m_cycle_table_rm[m];\n\t\t}\n\t}\n}\n\n#else\n\n/* i386/i486: we don't need to update cycles for rdtsc */\n#define CYCLES_NUM(x)\n#define CYCLES(x)\n#define CYCLES_RM(modrm, r, m)\n\n#endif\n\nstatic void build_cycle_table()\n{\n\tint i, j;\n\tfor (j=0; j < X86_NUM_CPUS; j++)\n\t{\n//\t\tcycle_table_rm[j] = (UINT8 *)malloc(sizeof(UINT8) * CYCLES_NUM_OPCODES);\n//\t\tcycle_table_pm[j] = (UINT8 *)malloc(sizeof(UINT8) * CYCLES_NUM_OPCODES);\n\n\t\tfor (i=0; i < sizeof(x86_cycle_table)/sizeof(X86_CYCLE_TABLE); i++)\n\t\t{\n\t\t\tint opcode = x86_cycle_table[i].op;\n\t\t\tcycle_table_rm[j][opcode] = x86_cycle_table[i].cpu_cycles[j][0];\n\t\t\tcycle_table_pm[j][opcode] = x86_cycle_table[i].cpu_cycles[j][1];\n\t\t}\n\t}\n}\n\nstatic void report_invalid_opcode()\n{\n#ifndef DEBUG_MISSING_OPCODE\n\tlogerror(\"i386: Invalid opcode %02X at %08X %s\\n\", m_opcode, m_pc - 1, m_lock ? \"with lock\" : \"\");\n#else\n\tlogerror(\"i386: Invalid opcode\");\n\tfor (int a = 0; a < m_opcode_bytes_length; a++)\n\t\tlogerror(\" %02X\", m_opcode_bytes[a]);\n\tlogerror(\" at %08X\\n\", m_opcode_pc);\n#endif\n}\n\nstatic void report_invalid_modrm(const char* opcode, UINT8 modrm)\n{\n#ifndef DEBUG_MISSING_OPCODE\n\tlogerror(\"i386: Invalid %s modrm %01X at %08X\\n\", opcode, modrm, m_pc - 2);\n#else\n\tlogerror(\"i386: Invalid %s modrm %01X\", opcode, modrm);\n\tfor (int a = 0; a < m_opcode_bytes_length; a++)\n\t\tlogerror(\" %02X\", m_opcode_bytes[a]);\n\tlogerror(\" at %08X\\n\", m_opcode_pc);\n#endif\n\ti386_trap(6, 0, 0);\n}\n\n/* Forward declarations */\nstatic void I386OP(decode_opcode)();\nstatic void I386OP(decode_two_byte)();\nstatic void I386OP(decode_three_byte38)();\nstatic void I386OP(decode_three_byte3a)();\nstatic void I386OP(decode_three_byte66)();\nstatic void I386OP(decode_three_bytef2)();\nstatic void I386OP(decode_three_bytef3)();\nstatic void I386OP(decode_four_byte3866)();\nstatic void I386OP(decode_four_byte3a66)();\nstatic void I386OP(decode_four_byte38f2)();\nstatic void I386OP(decode_four_byte3af2)();\nstatic void I386OP(decode_four_byte38f3)();\n\n\n\n#include \"i386ops.c\"\n#include \"i386op16.c\"\n#include \"i386op32.c\"\n#include \"i486ops.c\"\n#include \"pentops.c\"\n#include \"x87ops.c\"\n#include \"i386ops.h\"\n\nstatic void I386OP(decode_opcode)()\n{\n\tm_opcode = FETCH();\n\n\tif(m_lock && !m_lock_table[0][m_opcode])\n\t\treturn I386OP(invalid)();\n\n\tif( m_operand_size )\n\t\tm_opcode_table1_32[m_opcode]();\n\telse\n\t\tm_opcode_table1_16[m_opcode]();\n}\n\n/* Two-byte opcode 0f xx */\nstatic void I386OP(decode_two_byte)()\n{\n\tm_opcode = FETCH();\n\n\tif(m_lock && !m_lock_table[1][m_opcode])\n\t\treturn I386OP(invalid)();\n\n\tif( m_operand_size )\n\t\tm_opcode_table2_32[m_opcode]();\n\telse\n\t\tm_opcode_table2_16[m_opcode]();\n}\n\n/* Three-byte opcode 0f 38 xx */\nstatic void I386OP(decode_three_byte38)()\n{\n\tm_opcode = FETCH();\n\n\tif (m_operand_size)\n\t\tm_opcode_table338_32[m_opcode]();\n\telse\n\t\tm_opcode_table338_16[m_opcode]();\n}\n\n/* Three-byte opcode 0f 3a xx */\nstatic void I386OP(decode_three_byte3a)()\n{\n\tm_opcode = FETCH();\n\n\tif (m_operand_size)\n\t\tm_opcode_table33a_32[m_opcode]();\n\telse\n\t\tm_opcode_table33a_16[m_opcode]();\n}\n\n/* Three-byte opcode prefix 66 0f xx */\nstatic void I386OP(decode_three_byte66)()\n{\n\tm_opcode = FETCH();\n\tif( m_operand_size )\n\t\tm_opcode_table366_32[m_opcode]();\n\telse\n\t\tm_opcode_table366_16[m_opcode]();\n}\n\n/* Three-byte opcode prefix f2 0f xx */\nstatic void I386OP(decode_three_bytef2)()\n{\n\tm_opcode = FETCH();\n\tif( m_operand_size )\n\t\tm_opcode_table3f2_32[m_opcode]();\n\telse\n\t\tm_opcode_table3f2_16[m_opcode]();\n}\n\n/* Three-byte opcode prefix f3 0f */\nstatic void I386OP(decode_three_bytef3)()\n{\n\tm_opcode = FETCH();\n\tif( m_operand_size )\n\t\tm_opcode_table3f3_32[m_opcode]();\n\telse\n\t\tm_opcode_table3f3_16[m_opcode]();\n}\n\n/* Four-byte opcode prefix 66 0f 38 xx */\nstatic void I386OP(decode_four_byte3866)()\n{\n\tm_opcode = FETCH();\n\tif (m_operand_size)\n\t\tm_opcode_table46638_32[m_opcode]();\n\telse\n\t\tm_opcode_table46638_16[m_opcode]();\n}\n\n/* Four-byte opcode prefix 66 0f 3a xx */\nstatic void I386OP(decode_four_byte3a66)()\n{\n\tm_opcode = FETCH();\n\tif (m_operand_size)\n\t\tm_opcode_table4663a_32[m_opcode]();\n\telse\n\t\tm_opcode_table4663a_16[m_opcode]();\n}\n\n/* Four-byte opcode prefix f2 0f 38 xx */\nstatic void I386OP(decode_four_byte38f2)()\n{\n\tm_opcode = FETCH();\n\tif (m_operand_size)\n\t\tm_opcode_table4f238_32[m_opcode]();\n\telse\n\t\tm_opcode_table4f238_16[m_opcode]();\n}\n\n/* Four-byte opcode prefix f2 0f 3a xx */\nstatic void I386OP(decode_four_byte3af2)()\n{\n\tm_opcode = FETCH();\n\tif (m_operand_size)\n\t\tm_opcode_table4f23a_32[m_opcode]();\n\telse\n\t\tm_opcode_table4f23a_16[m_opcode]();\n}\n\n/* Four-byte opcode prefix f3 0f 38 xx */\nstatic void I386OP(decode_four_byte38f3)()\n{\n\tm_opcode = FETCH();\n\tif (m_operand_size)\n\t\tm_opcode_table4f338_32[m_opcode]();\n\telse\n\t\tm_opcode_table4f338_16[m_opcode]();\n}\n\n\n/*************************************************************************/\n\nstatic void i386_postload()\n{\n\tint i;\n\tfor (i = 0; i < 6; i++)\n\t\ti386_load_segment_descriptor(i);\n\tCHANGE_PC(m_eip);\n}\n\nstatic void i386_common_init(int tlbsize)\n{\n\tint i, j;\n\tstatic const int regs8[8] = {AL,CL,DL,BL,AH,CH,DH,BH};\n\tstatic const int regs16[8] = {AX,CX,DX,BX,SP,BP,SI,DI};\n\tstatic const int regs32[8] = {EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI};\n\n\tassert((sizeof(XMM_REG)/sizeof(double)) == 2);\n\n\tbuild_cycle_table();\n\n\tfor( i=0; i < 256; i++ ) {\n\t\tint c=0;\n\t\tfor( j=0; j < 8; j++ ) {\n\t\t\tif( i & (1 << j) )\n\t\t\t\tc++;\n\t\t}\n\t\ti386_parity_table[i] = ~(c & 0x1) & 0x1;\n\t}\n\n\tfor( i=0; i < 256; i++ ) {\n\t\ti386_MODRM_table[i].reg.b = regs8[(i >> 3) & 0x7];\n\t\ti386_MODRM_table[i].reg.w = regs16[(i >> 3) & 0x7];\n\t\ti386_MODRM_table[i].reg.d = regs32[(i >> 3) & 0x7];\n\n\t\ti386_MODRM_table[i].rm.b = regs8[i & 0x7];\n\t\ti386_MODRM_table[i].rm.w = regs16[i & 0x7];\n\t\ti386_MODRM_table[i].rm.d = regs32[i & 0x7];\n\t}\n\n\tm_vtlb = vtlb_alloc(AS_PROGRAM, 0, tlbsize);\n\tm_smi = false;\n\tm_lock = false;\n\n//\ti386_interface *intf = (i386_interface *) device->static_config();\n//\n//\tif (intf != NULL)\n//\t\tm_smiact.resolve(intf->smiact, *device);\n//\telse\n//\t\tmemset(&m_smiact, 0, sizeof(m_smiact));\n\n\tzero_state();\n}\n\nCPU_INIT( i386 )\n{\n\ti386_common_init(32);\n\n\tbuild_opcode_table(OP_I386);\n\tm_cycle_table_rm = cycle_table_rm[CPU_CYCLES_I386];\n\tm_cycle_table_pm = cycle_table_pm[CPU_CYCLES_I386];\n}\n\nstatic void build_opcode_table(UINT32 features)\n{\n\tint i;\n\tfor (i=0; i < 256; i++)\n\t{\n\t\tm_opcode_table1_16[i] = I386OP(invalid);\n\t\tm_opcode_table1_32[i] = I386OP(invalid);\n\t\tm_opcode_table2_16[i] = I386OP(invalid);\n\t\tm_opcode_table2_32[i] = I386OP(invalid);\n\t\tm_opcode_table366_16[i] = I386OP(invalid);\n\t\tm_opcode_table366_32[i] = I386OP(invalid);\n\t\tm_opcode_table3f2_16[i] = I386OP(invalid);\n\t\tm_opcode_table3f2_32[i] = I386OP(invalid);\n\t\tm_opcode_table3f3_16[i] = I386OP(invalid);\n\t\tm_opcode_table3f3_32[i] = I386OP(invalid);\n\t\tm_lock_table[0][i] = false;\n\t\tm_lock_table[1][i] = false;\n\t}\n\n\tfor (i=0; i < sizeof(x86_opcode_table)/sizeof(X86_OPCODE); i++)\n\t{\n\t\tconst X86_OPCODE *op = &x86_opcode_table[i];\n\n\t\tif ((op->flags & features))\n\t\t{\n\t\t\tif (op->flags & OP_2BYTE)\n\t\t\t{\n\t\t\t\tm_opcode_table2_32[op->opcode] = op->handler32;\n\t\t\t\tm_opcode_table2_16[op->opcode] = op->handler16;\n\t\t\t\tm_opcode_table366_32[op->opcode] = op->handler32;\n\t\t\t\tm_opcode_table366_16[op->opcode] = op->handler16;\n\t\t\t\tm_lock_table[1][op->opcode] = op->lockable;\n\t\t\t}\n\t\t\telse if (op->flags & OP_3BYTE66)\n\t\t\t{\n\t\t\t\tm_opcode_table366_32[op->opcode] = op->handler32;\n\t\t\t\tm_opcode_table366_16[op->opcode] = op->handler16;\n\t\t\t}\n\t\t\telse if (op->flags & OP_3BYTEF2)\n\t\t\t{\n\t\t\t\tm_opcode_table3f2_32[op->opcode] = op->handler32;\n\t\t\t\tm_opcode_table3f2_16[op->opcode] = op->handler16;\n\t\t\t}\n\t\t\telse if (op->flags & OP_3BYTEF3)\n\t\t\t{\n\t\t\t\tm_opcode_table3f3_32[op->opcode] = op->handler32;\n\t\t\t\tm_opcode_table3f3_16[op->opcode] = op->handler16;\n\t\t\t}\n\t\t\telse if (op->flags & OP_3BYTE38)\n\t\t\t{\n\t\t\t\tm_opcode_table338_32[op->opcode] = op->handler32;\n\t\t\t\tm_opcode_table338_16[op->opcode] = op->handler16;\n\t\t\t}\n\t\t\telse if (op->flags & OP_3BYTE3A)\n\t\t\t{\n\t\t\t\tm_opcode_table33a_32[op->opcode] = op->handler32;\n\t\t\t\tm_opcode_table33a_16[op->opcode] = op->handler16;\n\t\t\t}\n\t\t\telse if (op->flags & OP_4BYTE3866)\n\t\t\t{\n\t\t\t\tm_opcode_table46638_32[op->opcode] = op->handler32;\n\t\t\t\tm_opcode_table46638_16[op->opcode] = op->handler16;\n\t\t\t}\n\t\t\telse if (op->flags & OP_4BYTE3A66)\n\t\t\t{\n\t\t\t\tm_opcode_table4663a_32[op->opcode] = op->handler32;\n\t\t\t\tm_opcode_table4663a_16[op->opcode] = op->handler16;\n\t\t\t}\n\t\t\telse if (op->flags & OP_4BYTE38F2)\n\t\t\t{\n\t\t\t\tm_opcode_table4f238_32[op->opcode] = op->handler32;\n\t\t\t\tm_opcode_table4f238_16[op->opcode] = op->handler16;\n\t\t\t}\n\t\t\telse if (op->flags & OP_4BYTE3AF2)\n\t\t\t{\n\t\t\t\tm_opcode_table4f23a_32[op->opcode] = op->handler32;\n\t\t\t\tm_opcode_table4f23a_16[op->opcode] = op->handler16;\n\t\t\t}\n\t\t\telse if (op->flags & OP_4BYTE38F3)\n\t\t\t{\n\t\t\t\tm_opcode_table4f338_32[op->opcode] = op->handler32;\n\t\t\t\tm_opcode_table4f338_16[op->opcode] = op->handler16;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tm_opcode_table1_32[op->opcode] = op->handler32;\n\t\t\t\tm_opcode_table1_16[op->opcode] = op->handler16;\n\t\t\t\tm_lock_table[0][op->opcode] = op->lockable;\n\t\t\t}\n\t\t}\n\t}\n}\n\nstatic void zero_state()\n{\n\tmemset( &m_reg, 0, sizeof(m_reg) );\n\tmemset( m_sreg, 0, sizeof(m_sreg) );\n\tm_eip = 0;\n\tm_pc = 0;\n\tm_prev_eip = 0;\n\tm_eflags = 0;\n\tm_eflags_mask = 0;\n\tm_CF = 0;\n\tm_DF = 0;\n\tm_SF = 0;\n\tm_OF = 0;\n\tm_ZF = 0;\n\tm_PF = 0;\n\tm_AF = 0;\n\tm_IF = 0;\n\tm_TF = 0;\n\tm_IOP1 = 0;\n\tm_IOP2 = 0;\n\tm_NT = 0;\n\tm_RF = 0;\n\tm_VM = 0;\n\tm_AC = 0;\n\tm_VIF = 0;\n\tm_VIP = 0;\n\tm_ID = 0;\n\tm_CPL = 0;\n\tm_performed_intersegment_jump = 0;\n\tm_delayed_interrupt_enable = 0;\n\tmemset( m_cr, 0, sizeof(m_cr) );\n\tmemset( m_dr, 0, sizeof(m_dr) );\n\tmemset( m_tr, 0, sizeof(m_tr) );\n\tmemset( &m_gdtr, 0, sizeof(m_gdtr) );\n\tmemset( &m_idtr, 0, sizeof(m_idtr) );\n\tmemset( &m_task, 0, sizeof(m_task) );\n\tmemset( &m_ldtr, 0, sizeof(m_ldtr) );\n\tm_ext = 0;\n\tm_halted = 0;\n\tm_operand_size = 0;\n\tm_xmm_operand_size = 0;\n\tm_address_size = 0;\n\tm_operand_prefix = 0;\n\tm_address_prefix = 0;\n\tm_segment_prefix = 0;\n\tm_segment_override = 0;\n\tm_cycles = 0;\n\tm_base_cycles = 0;\n\tm_opcode = 0;\n\tm_irq_state = 0;\n\tm_a20_mask = 0;\n\tm_cpuid_max_input_value_eax = 0;\n\tm_cpuid_id0 = 0;\n\tm_cpuid_id1 = 0;\n\tm_cpuid_id2 = 0;\n\tm_cpu_version = 0;\n\tm_feature_flags = 0;\n\tm_tsc = 0;\n\tm_perfctr[0] = m_perfctr[1] = 0;\n\tmemset( m_x87_reg, 0, sizeof(m_x87_reg) );\n\tm_x87_cw = 0;\n\tm_x87_sw = 0;\n\tm_x87_tw = 0;\n\tm_x87_data_ptr = 0;\n\tm_x87_inst_ptr = 0;\n\tm_x87_opcode = 0;\n\tmemset( m_sse_reg, 0, sizeof(m_sse_reg) );\n\tm_mxcsr = 0;\n\tm_smm = false;\n\tm_smi = false;\n\tm_smi_latched = false;\n\tm_nmi_masked = false;\n\tm_nmi_latched = false;\n\tm_smbase = 0;\n#ifdef DEBUG_MISSING_OPCODE\n\tmemset( m_opcode_bytes, 0, sizeof(m_opcode_bytes) );\n\tm_opcode_pc = 0;\n\tm_opcode_bytes_length = 0;\n#endif\n}\n\nstatic CPU_RESET( i386 )\n{\n\tzero_state();\n\tvtlb_flush_dynamic(m_vtlb);\n\n\tm_sreg[CS].selector = 0xf000;\n\tm_sreg[CS].base     = 0xffff0000;\n\tm_sreg[CS].limit    = 0xffff;\n\tm_sreg[CS].flags    = 0x9b;\n\tm_sreg[CS].valid    = true;\n\n\tm_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000;\n\tm_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff;\n\tm_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092;\n\tm_sreg[DS].valid = m_sreg[ES].valid = m_sreg[FS].valid = m_sreg[GS].valid = m_sreg[SS].valid =true;\n\n\tm_idtr.base = 0;\n\tm_idtr.limit = 0x3ff;\n\tm_smm = false;\n\tm_smi_latched = false;\n\tm_nmi_masked = false;\n\tm_nmi_latched = false;\n\n\tm_a20_mask = ~0;\n\n\tm_cr[0] = 0x7fffffe0; // reserved bits set to 1\n\tm_eflags = 0;\n\tm_eflags_mask = 0x00037fd7;\n\tm_eip = 0xfff0;\n\n\t// [11:8] Family\n\t// [ 7:4] Model\n\t// [ 3:0] Stepping ID\n\t// Family 3 (386), Model 0 (DX), Stepping 8 (D1)\n\tREG32(EAX) = 0;\n\tREG32(EDX) = (3 << 8) | (0 << 4) | (8);\n\n\tm_CPL = 0;\n\n\tCHANGE_PC(m_eip);\n}\n\nstatic void pentium_smi()\n{\n\tUINT32 smram_state = m_smbase + 0xfe00;\n\tUINT32 old_cr0 = m_cr[0];\n\tUINT32 old_flags = get_flags();\n\n\tif(m_smm)\n\t\treturn;\n\n\tm_cr[0] &= ~(0x8000000d);\n\tset_flags(2);\n//\tif(!m_smiact.isnull())\n//\t\tm_smiact(true);\n\tm_smm = true;\n\tm_smi_latched = false;\n\n\t// save state\n\tWRITE32(m_cr[4], smram_state+SMRAM_IP5_CR4);\n\tWRITE32(m_sreg[ES].limit, smram_state+SMRAM_IP5_ESLIM);\n\tWRITE32(m_sreg[ES].base, smram_state+SMRAM_IP5_ESBASE);\n\tWRITE32(m_sreg[ES].flags, smram_state+SMRAM_IP5_ESACC);\n\tWRITE32(m_sreg[CS].limit, smram_state+SMRAM_IP5_CSLIM);\n\tWRITE32(m_sreg[CS].base, smram_state+SMRAM_IP5_CSBASE);\n\tWRITE32(m_sreg[CS].flags, smram_state+SMRAM_IP5_CSACC);\n\tWRITE32(m_sreg[SS].limit, smram_state+SMRAM_IP5_SSLIM);\n\tWRITE32(m_sreg[SS].base, smram_state+SMRAM_IP5_SSBASE);\n\tWRITE32(m_sreg[SS].flags, smram_state+SMRAM_IP5_SSACC);\n\tWRITE32(m_sreg[DS].limit, smram_state+SMRAM_IP5_DSLIM);\n\tWRITE32(m_sreg[DS].base, smram_state+SMRAM_IP5_DSBASE);\n\tWRITE32(m_sreg[DS].flags, smram_state+SMRAM_IP5_DSACC);\n\tWRITE32(m_sreg[FS].limit, smram_state+SMRAM_IP5_FSLIM);\n\tWRITE32(m_sreg[FS].base, smram_state+SMRAM_IP5_FSBASE);\n\tWRITE32(m_sreg[FS].flags, smram_state+SMRAM_IP5_FSACC);\n\tWRITE32(m_sreg[GS].limit, smram_state+SMRAM_IP5_GSLIM);\n\tWRITE32(m_sreg[GS].base, smram_state+SMRAM_IP5_GSBASE);\n\tWRITE32(m_sreg[GS].flags, smram_state+SMRAM_IP5_GSACC);\n\tWRITE32(m_ldtr.flags, smram_state+SMRAM_IP5_LDTACC);\n\tWRITE32(m_ldtr.limit, smram_state+SMRAM_IP5_LDTLIM);\n\tWRITE32(m_ldtr.base, smram_state+SMRAM_IP5_LDTBASE);\n\tWRITE32(m_gdtr.limit, smram_state+SMRAM_IP5_GDTLIM);\n\tWRITE32(m_gdtr.base, smram_state+SMRAM_IP5_GDTBASE);\n\tWRITE32(m_idtr.limit, smram_state+SMRAM_IP5_IDTLIM);\n\tWRITE32(m_idtr.base, smram_state+SMRAM_IP5_IDTBASE);\n\tWRITE32(m_task.limit, smram_state+SMRAM_IP5_TRLIM);\n\tWRITE32(m_task.base, smram_state+SMRAM_IP5_TRBASE);\n\tWRITE32(m_task.flags, smram_state+SMRAM_IP5_TRACC);\n\n\tWRITE32(m_sreg[ES].selector, smram_state+SMRAM_ES);\n\tWRITE32(m_sreg[CS].selector, smram_state+SMRAM_CS);\n\tWRITE32(m_sreg[SS].selector, smram_state+SMRAM_SS);\n\tWRITE32(m_sreg[DS].selector, smram_state+SMRAM_DS);\n\tWRITE32(m_sreg[FS].selector, smram_state+SMRAM_FS);\n\tWRITE32(m_sreg[GS].selector, smram_state+SMRAM_GS);\n\tWRITE32(m_ldtr.segment, smram_state+SMRAM_LDTR);\n\tWRITE32(m_task.segment, smram_state+SMRAM_TR);\n\n\tWRITE32(m_dr[7], smram_state+SMRAM_DR7);\n\tWRITE32(m_dr[6], smram_state+SMRAM_DR6);\n\tWRITE32(REG32(EAX), smram_state+SMRAM_EAX);\n\tWRITE32(REG32(ECX), smram_state+SMRAM_ECX);\n\tWRITE32(REG32(EDX), smram_state+SMRAM_EDX);\n\tWRITE32(REG32(EBX), smram_state+SMRAM_EBX);\n\tWRITE32(REG32(ESP), smram_state+SMRAM_ESP);\n\tWRITE32(REG32(EBP), smram_state+SMRAM_EBP);\n\tWRITE32(REG32(ESI), smram_state+SMRAM_ESI);\n\tWRITE32(REG32(EDI), smram_state+SMRAM_EDI);\n\tWRITE32(m_eip, smram_state+SMRAM_EIP);\n\tWRITE32(old_flags, smram_state+SMRAM_EAX);\n\tWRITE32(m_cr[3], smram_state+SMRAM_CR3);\n\tWRITE32(old_cr0, smram_state+SMRAM_CR0);\n\n\tm_sreg[DS].selector = m_sreg[ES].selector = m_sreg[FS].selector = m_sreg[GS].selector = m_sreg[SS].selector = 0;\n\tm_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000;\n\tm_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffffffff;\n\tm_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x8093;\n\tm_sreg[DS].valid = m_sreg[ES].valid = m_sreg[FS].valid = m_sreg[GS].valid = m_sreg[SS].valid =true;\n\tm_sreg[CS].selector = 0x3000; // pentium only, ppro sel = smbase >> 4\n\tm_sreg[CS].base = m_smbase;\n\tm_sreg[CS].limit = 0xffffffff;\n\tm_sreg[CS].flags = 0x809b;\n\tm_sreg[CS].valid = true;\n\tm_cr[4] = 0;\n\tm_dr[7] = 0x400;\n\tm_eip = 0x8000;\n\n\tm_nmi_masked = true;\n\tCHANGE_PC(m_eip);\n}\n\nstatic void i386_set_irq_line(int irqline, int state)\n{\n\tif (state != CLEAR_LINE && m_halted)\n\t{\n\t\tm_halted = 0;\n\t}\n\n\tif ( irqline == INPUT_LINE_NMI )\n\t{\n\t\t/* NMI (I do not think that this is 100% right) */\n\t\tif(m_nmi_masked)\n\t\t{\n\t\t\tm_nmi_latched = true;\n\t\t\treturn;\n\t\t}\n\t\tif ( state )\n\t\t\ti386_trap(2, 1, 0);\n\t}\n\telse\n\t{\n\t\tm_irq_state = state;\n\t}\n}\n\nstatic void i386_set_a20_line(int state)\n{\n\tif (state)\n\t{\n\t\tm_a20_mask = ~0;\n\t}\n\telse\n\t{\n\t\tm_a20_mask = ~(1 << 20);\n\t}\n\t// TODO: how does A20M and the tlb interact\n\tvtlb_flush_dynamic(m_vtlb);\n}\n\nstatic CPU_EXECUTE( i386 )\n{\n#ifdef SUPPORT_RDTSC\n\tm_cycles = 1;\n\tint cycles = m_cycles;\n\tm_base_cycles = cycles;\n#endif\n\tCHANGE_PC(m_eip);\n\n//\tif (m_halted)\n//\t{\n//\t\tm_tsc += cycles;\n//\t\tm_cycles = 0;\n//\t\treturn;\n//\t}\n\n//\twhile( m_cycles > 0 )\n//\t{\n\t\ti386_check_irq_line();\n\t\tm_operand_size = m_sreg[CS].d;\n\t\tm_xmm_operand_size = 0;\n\t\tm_address_size = m_sreg[CS].d;\n\t\tm_operand_prefix = 0;\n\t\tm_address_prefix = 0;\n\n\t\tm_ext = 1;\n\t\tint old_tf = m_TF;\n\n\t\tm_segment_prefix = 0;\n\t\tm_prev_eip = m_eip;\n\n//\t\tdebugger_instruction_hook(device, m_pc);\n\n\t\tif(m_delayed_interrupt_enable != 0)\n\t\t{\n\t\t\tm_IF = 1;\n\t\t\tm_delayed_interrupt_enable = 0;\n\t\t}\n#ifdef DEBUG_MISSING_OPCODE\n\t\tm_opcode_bytes_length = 0;\n\t\tm_opcode_pc = m_pc;\n#endif\n\t\ttry\n\t\t{\n\t\t\tI386OP(decode_opcode)();\n\t\t\tif(m_TF && old_tf)\n\t\t\t{\n\t\t\t\tm_prev_eip = m_eip;\n\t\t\t\tm_ext = 1;\n\t\t\t\ti386_trap(1,0,0);\n\t\t\t}\n\t\t\tif(m_lock && (m_opcode != 0xf0))\n\t\t\t\tm_lock = false;\n\t\t}\n\t\tcatch(UINT64 e)\n\t\t{\n\t\t\tm_ext = 1;\n\t\t\ti386_trap_with_error(e&0xffffffff,0,0,e>>32);\n\t\t}\n//\t}\n#ifdef SUPPORT_RDTSC\n\tm_tsc += (cycles - m_cycles);\n#endif\n}\n\n/*************************************************************************/\n\nstatic CPU_TRANSLATE( i386 )\n{\n\tint ret = TRUE;\n\tif(space == AS_PROGRAM)\n\t\tret = i386_translate_address(intention, address, NULL);\n\t*address &= m_a20_mask;\n\treturn ret;\n}\n\n/*****************************************************************************/\n/* Intel 486 */\n\n\nstatic CPU_INIT( i486 )\n{\n\ti386_common_init(32);\n\n\tbuild_opcode_table(OP_I386 | OP_FPU | OP_I486);\n\tbuild_x87_opcode_table();\n\tm_cycle_table_rm = cycle_table_rm[CPU_CYCLES_I486];\n\tm_cycle_table_pm = cycle_table_pm[CPU_CYCLES_I486];\n}\n\nstatic CPU_RESET( i486 )\n{\n\tzero_state();\n\tvtlb_flush_dynamic(m_vtlb);\n\n\tm_sreg[CS].selector = 0xf000;\n\tm_sreg[CS].base     = 0xffff0000;\n\tm_sreg[CS].limit    = 0xffff;\n\tm_sreg[CS].flags    = 0x009b;\n\n\tm_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000;\n\tm_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff;\n\tm_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092;\n\n\tm_idtr.base = 0;\n\tm_idtr.limit = 0x3ff;\n\n\tm_a20_mask = ~0;\n\n\tm_cr[0] = 0x00000010;\n\tm_eflags = 0;\n\tm_eflags_mask = 0x00077fd7;\n\tm_eip = 0xfff0;\n\tm_smm = false;\n\tm_smi_latched = false;\n\tm_nmi_masked = false;\n\tm_nmi_latched = false;\n\n\tx87_reset();\n\n\t// [11:8] Family\n\t// [ 7:4] Model\n\t// [ 3:0] Stepping ID\n\t// Family 4 (486), Model 0/1 (DX), Stepping 3\n\tREG32(EAX) = 0;\n\tREG32(EDX) = (4 << 8) | (0 << 4) | (3);\n\n\tCHANGE_PC(m_eip);\n}\n\n/*****************************************************************************/\n/* Pentium */\n\n\nstatic CPU_INIT( pentium )\n{\n\t// 64 dtlb small, 8 dtlb large, 32 itlb\n\ti386_common_init(96);\n\n\tbuild_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM);\n\tbuild_x87_opcode_table();\n\tm_cycle_table_rm = cycle_table_rm[CPU_CYCLES_PENTIUM];\n\tm_cycle_table_pm = cycle_table_pm[CPU_CYCLES_PENTIUM];\n}\n\nstatic CPU_RESET( pentium )\n{\n\tzero_state();\n\tvtlb_flush_dynamic(m_vtlb);\n\n\tm_sreg[CS].selector = 0xf000;\n\tm_sreg[CS].base     = 0xffff0000;\n\tm_sreg[CS].limit    = 0xffff;\n\tm_sreg[CS].flags    = 0x009b;\n\n\tm_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000;\n\tm_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff;\n\tm_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092;\n\n\tm_idtr.base = 0;\n\tm_idtr.limit = 0x3ff;\n\n\tm_a20_mask = ~0;\n\n\tm_cr[0] = 0x00000010;\n\tm_eflags = 0x00200000;\n\tm_eflags_mask = 0x003f7fd7;\n\tm_eip = 0xfff0;\n\tm_mxcsr = 0x1f80;\n\tm_smm = false;\n\tm_smi_latched = false;\n\tm_smbase = 0x30000;\n\tm_nmi_masked = false;\n\tm_nmi_latched = false;\n\n\tx87_reset();\n\n\t// [11:8] Family\n\t// [ 7:4] Model\n\t// [ 3:0] Stepping ID\n\t// Family 5 (Pentium), Model 2 (75 - 200MHz), Stepping 5\n\tREG32(EAX) = 0;\n\tREG32(EDX) = (5 << 8) | (2 << 4) | (5);\n\n\tm_cpuid_id0 = 0x756e6547;   // Genu\n\tm_cpuid_id1 = 0x49656e69;   // ineI\n\tm_cpuid_id2 = 0x6c65746e;   // ntel\n\n\tm_cpuid_max_input_value_eax = 0x01;\n\tm_cpu_version = REG32(EDX);\n\n\t// [ 0:0] FPU on chip\n\t// [ 2:2] I/O breakpoints\n\t// [ 4:4] Time Stamp Counter\n\t// [ 5:5] Pentium CPU style model specific registers\n\t// [ 7:7] Machine Check Exception\n\t// [ 8:8] CMPXCHG8B instruction\n\tm_feature_flags = 0x000001bf;\n\n\tCHANGE_PC(m_eip);\n}\n\n/*****************************************************************************/\n/* Cyrix MediaGX */\n\n\nstatic CPU_INIT( mediagx )\n{\n\t// probably 32 unified\n\ti386_common_init(32);\n\n\tbuild_x87_opcode_table();\n\tbuild_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM | OP_CYRIX);\n\tm_cycle_table_rm = cycle_table_rm[CPU_CYCLES_MEDIAGX];\n\tm_cycle_table_pm = cycle_table_pm[CPU_CYCLES_MEDIAGX];\n}\n\nstatic CPU_RESET( mediagx )\n{\n\tzero_state();\n\tvtlb_flush_dynamic(m_vtlb);\n\n\tm_sreg[CS].selector = 0xf000;\n\tm_sreg[CS].base     = 0xffff0000;\n\tm_sreg[CS].limit    = 0xffff;\n\tm_sreg[CS].flags    = 0x009b;\n\n\tm_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000;\n\tm_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff;\n\tm_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092;\n\n\tm_idtr.base = 0;\n\tm_idtr.limit = 0x3ff;\n\n\tm_a20_mask = ~0;\n\n\tm_cr[0] = 0x00000010;\n\tm_eflags = 0x00200000;\n\tm_eflags_mask = 0x00277fd7; /* TODO: is this correct? */\n\tm_eip = 0xfff0;\n\tm_smm = false;\n\tm_smi_latched = false;\n\tm_nmi_masked = false;\n\tm_nmi_latched = false;\n\n\tx87_reset();\n\n\t// [11:8] Family\n\t// [ 7:4] Model\n\t// [ 3:0] Stepping ID\n\t// Family 4, Model 4 (MediaGX)\n\tREG32(EAX) = 0;\n\tREG32(EDX) = (4 << 8) | (4 << 4) | (1); /* TODO: is this correct? */\n\n\tm_cpuid_id0 = 0x69727943;   // Cyri\n\tm_cpuid_id1 = 0x736e4978;   // xIns\n\tm_cpuid_id2 = 0x6d616574;   // tead\n\n\tm_cpuid_max_input_value_eax = 0x01;\n\tm_cpu_version = REG32(EDX);\n\n\t// [ 0:0] FPU on chip\n\tm_feature_flags = 0x00000001;\n\n\tCHANGE_PC(m_eip);\n}\n\n/*****************************************************************************/\n/* Intel Pentium Pro */\n\nstatic CPU_INIT( pentium_pro )\n{\n\t// 64 dtlb small, 32 itlb\n\ti386_common_init(96);\n\n\tbuild_x87_opcode_table();\n\tbuild_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM | OP_PPRO);\n\tm_cycle_table_rm = cycle_table_rm[CPU_CYCLES_PENTIUM];  // TODO: generate own cycle tables\n\tm_cycle_table_pm = cycle_table_pm[CPU_CYCLES_PENTIUM];  // TODO: generate own cycle tables\n}\n\nstatic CPU_RESET( pentium_pro )\n{\n\tzero_state();\n\tvtlb_flush_dynamic(m_vtlb);\n\n\tm_sreg[CS].selector = 0xf000;\n\tm_sreg[CS].base     = 0xffff0000;\n\tm_sreg[CS].limit    = 0xffff;\n\tm_sreg[CS].flags    = 0x009b;\n\n\tm_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000;\n\tm_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff;\n\tm_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092;\n\n\tm_idtr.base = 0;\n\tm_idtr.limit = 0x3ff;\n\n\tm_a20_mask = ~0;\n\n\tm_cr[0] = 0x60000010;\n\tm_eflags = 0x00200000;\n\tm_eflags_mask = 0x00277fd7; /* TODO: is this correct? */\n\tm_eip = 0xfff0;\n\tm_mxcsr = 0x1f80;\n\tm_smm = false;\n\tm_smi_latched = false;\n\tm_smbase = 0x30000;\n\tm_nmi_masked = false;\n\tm_nmi_latched = false;\n\n\tx87_reset();\n\n\t// [11:8] Family\n\t// [ 7:4] Model\n\t// [ 3:0] Stepping ID\n\t// Family 6, Model 1 (Pentium Pro)\n\tREG32(EAX) = 0;\n\tREG32(EDX) = (6 << 8) | (1 << 4) | (1); /* TODO: is this correct? */\n\n\tm_cpuid_id0 = 0x756e6547;   // Genu\n\tm_cpuid_id1 = 0x49656e69;   // ineI\n\tm_cpuid_id2 = 0x6c65746e;   // ntel\n\n\tm_cpuid_max_input_value_eax = 0x02;\n\tm_cpu_version = REG32(EDX);\n\n\t// [ 0:0] FPU on chip\n\t// [ 2:2] I/O breakpoints\n\t// [ 4:4] Time Stamp Counter\n\t// [ 5:5] Pentium CPU style model specific registers\n\t// [ 7:7] Machine Check Exception\n\t// [ 8:8] CMPXCHG8B instruction\n\t// [15:15] CMOV and FCMOV\n\t// No MMX\n\tm_feature_flags = 0x000081bf;\n\n\tCHANGE_PC(m_eip);\n}\n\n/*****************************************************************************/\n/* Intel Pentium MMX */\n\nstatic CPU_INIT( pentium_mmx )\n{\n\t// 64 dtlb small, 8 dtlb large, 32 itlb small, 2 itlb large\n\ti386_common_init(96);\n\n\tbuild_x87_opcode_table();\n\tbuild_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM | OP_MMX);\n\tm_cycle_table_rm = cycle_table_rm[CPU_CYCLES_PENTIUM];  // TODO: generate own cycle tables\n\tm_cycle_table_pm = cycle_table_pm[CPU_CYCLES_PENTIUM];  // TODO: generate own cycle tables\n}\n\nstatic CPU_RESET( pentium_mmx )\n{\n\tzero_state();\n\tvtlb_flush_dynamic(m_vtlb);\n\n\tm_sreg[CS].selector = 0xf000;\n\tm_sreg[CS].base     = 0xffff0000;\n\tm_sreg[CS].limit    = 0xffff;\n\tm_sreg[CS].flags    = 0x009b;\n\n\tm_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000;\n\tm_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff;\n\tm_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092;\n\n\tm_idtr.base = 0;\n\tm_idtr.limit = 0x3ff;\n\n\tm_a20_mask = ~0;\n\n\tm_cr[0] = 0x60000010;\n\tm_eflags = 0x00200000;\n\tm_eflags_mask = 0x00277fd7; /* TODO: is this correct? */\n\tm_eip = 0xfff0;\n\tm_mxcsr = 0x1f80;\n\tm_smm = false;\n\tm_smi_latched = false;\n\tm_smbase = 0x30000;\n\tm_nmi_masked = false;\n\tm_nmi_latched = false;\n\n\tx87_reset();\n\n\t// [11:8] Family\n\t// [ 7:4] Model\n\t// [ 3:0] Stepping ID\n\t// Family 5, Model 4 (P55C)\n\tREG32(EAX) = 0;\n\tREG32(EDX) = (5 << 8) | (4 << 4) | (1);\n\n\tm_cpuid_id0 = 0x756e6547;   // Genu\n\tm_cpuid_id1 = 0x49656e69;   // ineI\n\tm_cpuid_id2 = 0x6c65746e;   // ntel\n\n\tm_cpuid_max_input_value_eax = 0x01;\n\tm_cpu_version = REG32(EDX);\n\n\t// [ 0:0] FPU on chip\n\t// [ 2:2] I/O breakpoints\n\t// [ 4:4] Time Stamp Counter\n\t// [ 5:5] Pentium CPU style model specific registers\n\t// [ 7:7] Machine Check Exception\n\t// [ 8:8] CMPXCHG8B instruction\n\t// [23:23] MMX instructions\n\tm_feature_flags = 0x008001bf;\n\n\tCHANGE_PC(m_eip);\n}\n\n/*****************************************************************************/\n/* Intel Pentium II */\n\nstatic CPU_INIT( pentium2 )\n{\n\t// 64 dtlb small, 8 dtlb large, 32 itlb small, 2 itlb large\n\ti386_common_init(96);\n\n\tbuild_x87_opcode_table();\n\tbuild_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM | OP_PPRO | OP_MMX);\n\tm_cycle_table_rm = cycle_table_rm[CPU_CYCLES_PENTIUM];  // TODO: generate own cycle tables\n\tm_cycle_table_pm = cycle_table_pm[CPU_CYCLES_PENTIUM];  // TODO: generate own cycle tables\n}\n\nstatic CPU_RESET( pentium2 )\n{\n\tzero_state();\n\tvtlb_flush_dynamic(m_vtlb);\n\n\tm_sreg[CS].selector = 0xf000;\n\tm_sreg[CS].base     = 0xffff0000;\n\tm_sreg[CS].limit    = 0xffff;\n\tm_sreg[CS].flags    = 0x009b;\n\n\tm_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000;\n\tm_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff;\n\tm_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092;\n\n\tm_idtr.base = 0;\n\tm_idtr.limit = 0x3ff;\n\n\tm_a20_mask = ~0;\n\n\tm_cr[0] = 0x60000010;\n\tm_eflags = 0x00200000;\n\tm_eflags_mask = 0x00277fd7; /* TODO: is this correct? */\n\tm_eip = 0xfff0;\n\tm_mxcsr = 0x1f80;\n\tm_smm = false;\n\tm_smi_latched = false;\n\tm_smbase = 0x30000;\n\tm_nmi_masked = false;\n\tm_nmi_latched = false;\n\n\tx87_reset();\n\n\t// [11:8] Family\n\t// [ 7:4] Model\n\t// [ 3:0] Stepping ID\n\t// Family 6, Model 3 (Pentium II / Klamath)\n\tREG32(EAX) = 0;\n\tREG32(EDX) = (6 << 8) | (3 << 4) | (1); /* TODO: is this correct? */\n\n\tm_cpuid_id0 = 0x756e6547;   // Genu\n\tm_cpuid_id1 = 0x49656e69;   // ineI\n\tm_cpuid_id2 = 0x6c65746e;   // ntel\n\n\tm_cpuid_max_input_value_eax = 0x02;\n\tm_cpu_version = REG32(EDX);\n\n\t// [ 0:0] FPU on chip\n\tm_feature_flags = 0x008081bf;       // TODO: enable relevant flags here\n\n\tCHANGE_PC(m_eip);\n}\n\n/*****************************************************************************/\n/* Intel Pentium III */\n\nstatic CPU_INIT( pentium3 )\n{\n\t// 64 dtlb small, 8 dtlb large, 32 itlb small, 2 itlb large\n\ti386_common_init(96);\n\n\tbuild_x87_opcode_table();\n\tbuild_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM | OP_PPRO | OP_MMX | OP_SSE);\n\tm_cycle_table_rm = cycle_table_rm[CPU_CYCLES_PENTIUM];  // TODO: generate own cycle tables\n\tm_cycle_table_pm = cycle_table_pm[CPU_CYCLES_PENTIUM];  // TODO: generate own cycle tables\n}\n\nstatic CPU_RESET( pentium3 )\n{\n\tzero_state();\n\tvtlb_flush_dynamic(m_vtlb);\n\n\tm_sreg[CS].selector = 0xf000;\n\tm_sreg[CS].base     = 0xffff0000;\n\tm_sreg[CS].limit    = 0xffff;\n\tm_sreg[CS].flags    = 0x009b;\n\n\tm_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000;\n\tm_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff;\n\tm_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092;\n\n\tm_idtr.base = 0;\n\tm_idtr.limit = 0x3ff;\n\n\tm_a20_mask = ~0;\n\n\tm_cr[0] = 0x60000010;\n\tm_eflags = 0x00200000;\n\tm_eflags_mask = 0x00277fd7; /* TODO: is this correct? */\n\tm_eip = 0xfff0;\n\tm_mxcsr = 0x1f80;\n\tm_smm = false;\n\tm_smi_latched = false;\n\tm_smbase = 0x30000;\n\tm_nmi_masked = false;\n\tm_nmi_latched = false;\n\n\tx87_reset();\n\n\t// [11:8] Family\n\t// [ 7:4] Model\n\t// [ 3:0] Stepping ID\n\t// Family 6, Model 8 (Pentium III / Coppermine)\n\tREG32(EAX) = 0;\n\tREG32(EDX) = (6 << 8) | (8 << 4) | (10);\n\n\tm_cpuid_id0 = 0x756e6547;   // Genu\n\tm_cpuid_id1 = 0x49656e69;   // ineI\n\tm_cpuid_id2 = 0x6c65746e;   // ntel\n\n\tm_cpuid_max_input_value_eax = 0x03;\n\tm_cpu_version = REG32(EDX);\n\n\t// [ 0:0] FPU on chip\n\t// [ 4:4] Time Stamp Counter\n\t// [ D:D] PTE Global Bit\n\tm_feature_flags = 0x00002011;       // TODO: enable relevant flags here\n\n\tCHANGE_PC(m_eip);\n}\n\n/*****************************************************************************/\n/* Intel Pentium 4 */\n\nstatic CPU_INIT( pentium4 )\n{\n\t// 128 dtlb, 64 itlb\n\ti386_common_init(196);\n\n\tbuild_x87_opcode_table();\n\tbuild_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM | OP_PPRO | OP_MMX | OP_SSE | OP_SSE2);\n\tm_cycle_table_rm = cycle_table_rm[CPU_CYCLES_PENTIUM];  // TODO: generate own cycle tables\n\tm_cycle_table_pm = cycle_table_pm[CPU_CYCLES_PENTIUM];  // TODO: generate own cycle tables\n}\n\nstatic CPU_RESET( pentium4 )\n{\n\tzero_state();\n\tvtlb_flush_dynamic(m_vtlb);\n\n\tm_sreg[CS].selector = 0xf000;\n\tm_sreg[CS].base     = 0xffff0000;\n\tm_sreg[CS].limit    = 0xffff;\n\tm_sreg[CS].flags    = 0x009b;\n\n\tm_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000;\n\tm_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff;\n\tm_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092;\n\n\tm_idtr.base = 0;\n\tm_idtr.limit = 0x3ff;\n\n\tm_a20_mask = ~0;\n\n\tm_cr[0] = 0x60000010;\n\tm_eflags = 0x00200000;\n\tm_eflags_mask = 0x00277fd7; /* TODO: is this correct? */\n\tm_eip = 0xfff0;\n\tm_mxcsr = 0x1f80;\n\tm_smm = false;\n\tm_smi_latched = false;\n\tm_smbase = 0x30000;\n\tm_nmi_masked = false;\n\tm_nmi_latched = false;\n\n\tx87_reset();\n\n\t// [27:20] Extended family\n\t// [19:16] Extended model\n\t// [13:12] Type\n\t// [11: 8] Family\n\t// [ 7: 4] Model\n\t// [ 3: 0] Stepping ID\n\t// Family 15, Model 0 (Pentium 4 / Willamette)\n\tREG32(EAX) = 0;\n\tREG32(EDX) = (0 << 20) | (0xf << 8) | (0 << 4) | (1);\n\n\tm_cpuid_id0 = 0x756e6547;   // Genu\n\tm_cpuid_id1 = 0x49656e69;   // ineI\n\tm_cpuid_id2 = 0x6c65746e;   // ntel\n\n\tm_cpuid_max_input_value_eax = 0x02;\n\tm_cpu_version = REG32(EDX);\n\n\t// [ 0:0] FPU on chip\n\tm_feature_flags = 0x00000001;       // TODO: enable relevant flags here\n\n\tCHANGE_PC(m_eip);\n}\n\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386/i386.h",
    "content": "// license:BSD-3-Clause\n// copyright-holders:Ville Linde, Barry Rodewald, Carl, Phil Bennett\n#pragma once\n\n#ifndef __I386INTF_H__\n#define __I386INTF_H__\n\n#define INPUT_LINE_A20      1\n#define INPUT_LINE_SMI      2\n\nstruct i386_interface\n{\n\tdevcb_write_line smiact;\n};\n\n// mingw has this defined for 32-bit compiles\n#undef i386\n\nDECLARE_LEGACY_CPU_DEVICE(I386, i386);\nDECLARE_LEGACY_CPU_DEVICE(I386SX, i386SX);\nDECLARE_LEGACY_CPU_DEVICE(I486, i486);\nDECLARE_LEGACY_CPU_DEVICE(PENTIUM, pentium);\nDECLARE_LEGACY_CPU_DEVICE(MEDIAGX, mediagx);\nDECLARE_LEGACY_CPU_DEVICE(PENTIUM_PRO, pentium_pro);\nDECLARE_LEGACY_CPU_DEVICE(PENTIUM_MMX, pentium_mmx);\nDECLARE_LEGACY_CPU_DEVICE(PENTIUM2, pentium2);\nDECLARE_LEGACY_CPU_DEVICE(PENTIUM3, pentium3);\nDECLARE_LEGACY_CPU_DEVICE(PENTIUM4, pentium4);\n\n\n\n#endif /* __I386INTF_H__ */\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386/i386dasm.c",
    "content": "// license:BSD-3-Clause\n// copyright-holders:Ville Linde\n/*\n   i386 Disassembler\n\n   Written by Ville Linde\n*/\n\n//#include \"emu.h\"\n\nenum\n{\n\tPARAM_REG = 1,      /* 16 or 32-bit register */\n\tPARAM_REG8,         /* 8-bit register */\n\tPARAM_REG16,        /* 16-bit register */\n\tPARAM_REG32,        /* 32-bit register */\n\tPARAM_REG3264,      /* 32-bit or 64-bit register */\n\tPARAM_REG2_32,      /* 32-bit register */\n\tPARAM_MMX,          /* MMX register */\n\tPARAM_MMX2,         /* MMX register in modrm */\n\tPARAM_XMM,          /* XMM register */\n\tPARAM_RM,           /* 16 or 32-bit memory or register */\n\tPARAM_RM8,          /* 8-bit memory or register */\n\tPARAM_RM16,         /* 16-bit memory or register */\n\tPARAM_RM32,         /* 32-bit memory or register */\n\tPARAM_RMPTR,        /* 16 or 32-bit memory or register */\n\tPARAM_RMPTR8,       /* 8-bit memory or register */\n\tPARAM_RMPTR16,      /* 16-bit memory or register */\n\tPARAM_RMPTR32,      /* 32-bit memory or register */\n\tPARAM_RMXMM,        /* 32 or 64-bit memory or register */\n\tPARAM_REGORXMM,     /* 32 or 64-bit register or XMM register */\n\tPARAM_M64,          /* 64-bit memory */\n\tPARAM_M64PTR,       /* 64-bit memory */\n\tPARAM_MMXM,         /* 64-bit memory or MMX register */\n\tPARAM_XMMM,         /* 128-bit memory or XMM register */\n\tPARAM_I4,           /* 4-bit signed immediate */\n\tPARAM_I8,           /* 8-bit signed immediate */\n\tPARAM_I16,          /* 16-bit signed immediate */\n\tPARAM_UI8,          /* 8-bit unsigned immediate */\n\tPARAM_UI16,         /* 16-bit unsigned immediate */\n\tPARAM_IMM,          /* 16 or 32-bit immediate */\n\tPARAM_IMM64,        /* 16, 32 or 64-bit immediate */\n\tPARAM_ADDR,         /* 16:16 or 16:32 address */\n\tPARAM_REL,          /* 16 or 32-bit PC-relative displacement */\n\tPARAM_REL8,         /* 8-bit PC-relative displacement */\n\tPARAM_MEM_OFFS,     /* 16 or 32-bit mem offset */\n\tPARAM_PREIMP,       /* prefix with implicit register */\n\tPARAM_SREG,         /* segment register */\n\tPARAM_CREG,         /* control register */\n\tPARAM_DREG,         /* debug register */\n\tPARAM_TREG,         /* test register */\n\tPARAM_1,            /* used by shift/rotate instructions */\n\tPARAM_AL,\n\tPARAM_CL,\n\tPARAM_DL,\n\tPARAM_BL,\n\tPARAM_AH,\n\tPARAM_CH,\n\tPARAM_DH,\n\tPARAM_BH,\n\tPARAM_DX,\n\tPARAM_EAX,          /* EAX or AX */\n\tPARAM_ECX,          /* ECX or CX */\n\tPARAM_EDX,          /* EDX or DX */\n\tPARAM_EBX,          /* EBX or BX */\n\tPARAM_ESP,          /* ESP or SP */\n\tPARAM_EBP,          /* EBP or BP */\n\tPARAM_ESI,          /* ESI or SI */\n\tPARAM_EDI,          /* EDI or DI */\n\tPARAM_XMM0,\n\tPARAM_XMM64,            /* 64-bit memory or XMM register */\n\tPARAM_XMM32,            /* 32-bit memory or XMM register */\n\tPARAM_XMM16,            /* 16-bit memory or XMM register */\n};\n\nenum\n{\n\tMODRM = 1,\n\tGROUP,\n\tFPU,\n\tOP_SIZE,\n\tADDR_SIZE,\n\tTWO_BYTE,\n\tPREFIX,\n\tSEG_CS,\n\tSEG_DS,\n\tSEG_ES,\n\tSEG_FS,\n\tSEG_GS,\n\tSEG_SS,\n\tISREX,\n\tTHREE_BYTE          /* [prefix] 0f op1 op2 and then mod/rm */\n};\n\n#define FLAGS_MASK          0x0ff\n#define VAR_NAME            0x100\n#define VAR_NAME4           0x200\n#define ALWAYS64            0x400\n#define SPECIAL64           0x800\n#define SPECIAL64_ENT(x)    (SPECIAL64 | ((x) << 24))\n#define GROUP_MOD           0x1000\n\nstruct I386_OPCODE {\n\tconst char *mnemonic;\n\tUINT32 flags;\n\tUINT32 param1;\n\tUINT32 param2;\n\tUINT32 param3;\n\toffs_t dasm_flags;\n};\n\nstruct GROUP_OP {\n\tchar mnemonic[32];\n\tconst I386_OPCODE *opcode;\n};\n\nstatic const UINT8 *opcode_ptr;\nstatic const UINT8 *opcode_ptr_base;\n\nstatic const I386_OPCODE i386_opcode_table1[256] =\n{\n\t// 0x00\n\t{\"add\",             MODRM,          PARAM_RM8,          PARAM_REG8,         0               },\n\t{\"add\",             MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"add\",             MODRM,          PARAM_REG8,         PARAM_RM8,          0               },\n\t{\"add\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"add\",             0,              PARAM_AL,           PARAM_UI8,          0               },\n\t{\"add\",             0,              PARAM_EAX,          PARAM_IMM,          0               },\n\t{\"push    es\",      0,              0,                  0,                  0               },\n\t{\"pop     es\",      0,              0,                  0,                  0               },\n\t{\"or\",              MODRM,          PARAM_RM8,          PARAM_REG8,         0               },\n\t{\"or\",              MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"or\",              MODRM,          PARAM_REG8,         PARAM_RM8,          0               },\n\t{\"or\",              MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"or\",              0,              PARAM_AL,           PARAM_UI8,          0               },\n\t{\"or\",              0,              PARAM_EAX,          PARAM_IMM,          0               },\n\t{\"push    cs\",      0,              0,                  0,                  0               },\n\t{\"two_byte\",        TWO_BYTE,       0,                  0,                  0               },\n\t// 0x10\n\t{\"adc\",             MODRM,          PARAM_RM8,          PARAM_REG8,         0               },\n\t{\"adc\",             MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"adc\",             MODRM,          PARAM_REG8,         PARAM_RM8,          0               },\n\t{\"adc\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"adc\",             0,              PARAM_AL,           PARAM_UI8,          0               },\n\t{\"adc\",             0,              PARAM_EAX,          PARAM_IMM,          0               },\n\t{\"push    ss\",      0,              0,                  0,                  0               },\n\t{\"pop     ss\",      0,              0,                  0,                  0               },\n\t{\"sbb\",             MODRM,          PARAM_RM8,          PARAM_REG8,         0               },\n\t{\"sbb\",             MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"sbb\",             MODRM,          PARAM_REG8,         PARAM_RM8,          0               },\n\t{\"sbb\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"sbb\",             0,              PARAM_AL,           PARAM_UI8,          0               },\n\t{\"sbb\",             0,              PARAM_EAX,          PARAM_IMM,          0               },\n\t{\"push    ds\",      0,              0,                  0,                  0               },\n\t{\"pop     ds\",      0,              0,                  0,                  0               },\n\t// 0x20\n\t{\"and\",             MODRM,          PARAM_RM8,          PARAM_REG8,         0               },\n\t{\"and\",             MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"and\",             MODRM,          PARAM_REG8,         PARAM_RM8,          0               },\n\t{\"and\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"and\",             0,              PARAM_AL,           PARAM_UI8,          0               },\n\t{\"and\",             0,              PARAM_EAX,          PARAM_IMM,          0               },\n\t{\"seg_es\",          SEG_ES,         0,                  0,                  0               },\n\t{\"daa\",             0,              0,                  0,                  0               },\n\t{\"sub\",             MODRM,          PARAM_RM8,          PARAM_REG8,         0               },\n\t{\"sub\",             MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"sub\",             MODRM,          PARAM_REG8,         PARAM_RM8,          0               },\n\t{\"sub\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"sub\",             0,              PARAM_AL,           PARAM_UI8,          0               },\n\t{\"sub\",             0,              PARAM_EAX,          PARAM_IMM,          0               },\n\t{\"seg_cs\",          SEG_CS,         0,                  0,                  0               },\n\t{\"das\",             0,              0,                  0,                  0               },\n\t// 0x30\n\t{\"xor\",             MODRM,          PARAM_RM8,          PARAM_REG8,         0               },\n\t{\"xor\",             MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"xor\",             MODRM,          PARAM_REG8,         PARAM_RM8,          0               },\n\t{\"xor\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"xor\",             0,              PARAM_AL,           PARAM_UI8,          0               },\n\t{\"xor\",             0,              PARAM_EAX,          PARAM_IMM,          0               },\n\t{\"seg_ss\",          SEG_SS,         0,                  0,                  0               },\n\t{\"aaa\",             0,              0,                  0,                  0               },\n\t{\"cmp\",             MODRM,          PARAM_RM8,          PARAM_REG8,         0               },\n\t{\"cmp\",             MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"cmp\",             MODRM,          PARAM_REG8,         PARAM_RM8,          0               },\n\t{\"cmp\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmp\",             0,              PARAM_AL,           PARAM_UI8,          0               },\n\t{\"cmp\",             0,              PARAM_EAX,          PARAM_IMM,          0               },\n\t{\"seg_ds\",          SEG_DS,         0,                  0,                  0               },\n\t{\"aas\",             0,              0,                  0,                  0               },\n\t// 0x40\n\t{\"inc\",             ISREX,          PARAM_EAX,          0,                  0               },\n\t{\"inc\",             ISREX,          PARAM_ECX,          0,                  0               },\n\t{\"inc\",             ISREX,          PARAM_EDX,          0,                  0               },\n\t{\"inc\",             ISREX,          PARAM_EBX,          0,                  0               },\n\t{\"inc\",             ISREX,          PARAM_ESP,          0,                  0               },\n\t{\"inc\",             ISREX,          PARAM_EBP,          0,                  0               },\n\t{\"inc\",             ISREX,          PARAM_ESI,          0,                  0               },\n\t{\"inc\",             ISREX,          PARAM_EDI,          0,                  0               },\n\t{\"dec\",             ISREX,          PARAM_EAX,          0,                  0               },\n\t{\"dec\",             ISREX,          PARAM_ECX,          0,                  0               },\n\t{\"dec\",             ISREX,          PARAM_EDX,          0,                  0               },\n\t{\"dec\",             ISREX,          PARAM_EBX,          0,                  0               },\n\t{\"dec\",             ISREX,          PARAM_ESP,          0,                  0               },\n\t{\"dec\",             ISREX,          PARAM_EBP,          0,                  0               },\n\t{\"dec\",             ISREX,          PARAM_ESI,          0,                  0               },\n\t{\"dec\",             ISREX,          PARAM_EDI,          0,                  0               },\n\t// 0x50\n\t{\"push\",            ALWAYS64,       PARAM_EAX,          0,                  0               },\n\t{\"push\",            ALWAYS64,       PARAM_ECX,          0,                  0               },\n\t{\"push\",            ALWAYS64,       PARAM_EDX,          0,                  0               },\n\t{\"push\",            ALWAYS64,       PARAM_EBX,          0,                  0               },\n\t{\"push\",            ALWAYS64,       PARAM_ESP,          0,                  0               },\n\t{\"push\",            ALWAYS64,       PARAM_EBP,          0,                  0               },\n\t{\"push\",            ALWAYS64,       PARAM_ESI,          0,                  0               },\n\t{\"push\",            ALWAYS64,       PARAM_EDI,          0,                  0               },\n\t{\"pop\",             ALWAYS64,       PARAM_EAX,          0,                  0               },\n\t{\"pop\",             ALWAYS64,       PARAM_ECX,          0,                  0               },\n\t{\"pop\",             ALWAYS64,       PARAM_EDX,          0,                  0               },\n\t{\"pop\",             ALWAYS64,       PARAM_EBX,          0,                  0               },\n\t{\"pop\",             ALWAYS64,       PARAM_ESP,          0,                  0               },\n\t{\"pop\",             ALWAYS64,       PARAM_EBP,          0,                  0               },\n\t{\"pop\",             ALWAYS64,       PARAM_ESI,          0,                  0               },\n\t{\"pop\",             ALWAYS64,       PARAM_EDI,          0,                  0               },\n\t// 0x60\n\t{\"pusha\\0pushad\\0<invalid>\",VAR_NAME,0,                 0,                  0               },\n\t{\"popa\\0popad\\0<invalid>\",  VAR_NAME,0,                 0,                  0               },\n\t{\"bound\",           MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"arpl\",            MODRM | SPECIAL64_ENT(0),PARAM_RM,  PARAM_REG16,        0               },\n\t{\"seg_fs\",          SEG_FS,         0,                  0,                  0               },\n\t{\"seg_gs\",          SEG_GS,         0,                  0,                  0               },\n\t{\"op_size\",         OP_SIZE,        0,                  0,                  0               },\n\t{\"addr_size\",       ADDR_SIZE,      0,                  0,                  0               },\n\t{\"push\",            0,              PARAM_IMM,          0,                  0               },\n\t{\"imul\",            MODRM,          PARAM_REG,          PARAM_RM,           PARAM_IMM       },\n\t{\"push\",            0,              PARAM_I8,           0,                  0               },\n\t{\"imul\",            MODRM,          PARAM_REG,          PARAM_RM,           PARAM_I8        },\n\t{\"insb\",            0,              0,                  0,                  0               },\n\t{\"insw\\0insd\\0insd\",VAR_NAME,       0,                  0,                  0               },\n\t{\"outsb\",           0,              PARAM_PREIMP,       0,                  0               },\n\t{\"outsw\\0outsd\\0outsd\",VAR_NAME,    PARAM_PREIMP,       0,                  0               },\n\t// 0x70\n\t{\"jo\",              0,              PARAM_REL8,         0,                  0               },\n\t{\"jno\",             0,              PARAM_REL8,         0,                  0               },\n\t{\"jb\",              0,              PARAM_REL8,         0,                  0               },\n\t{\"jae\",             0,              PARAM_REL8,         0,                  0               },\n\t{\"je\",              0,              PARAM_REL8,         0,                  0               },\n\t{\"jne\",             0,              PARAM_REL8,         0,                  0               },\n\t{\"jbe\",             0,              PARAM_REL8,         0,                  0               },\n\t{\"ja\",              0,              PARAM_REL8,         0,                  0               },\n\t{\"js\",              0,              PARAM_REL8,         0,                  0               },\n\t{\"jns\",             0,              PARAM_REL8,         0,                  0               },\n\t{\"jp\",              0,              PARAM_REL8,         0,                  0               },\n\t{\"jnp\",             0,              PARAM_REL8,         0,                  0               },\n\t{\"jl\",              0,              PARAM_REL8,         0,                  0               },\n\t{\"jge\",             0,              PARAM_REL8,         0,                  0               },\n\t{\"jle\",             0,              PARAM_REL8,         0,                  0               },\n\t{\"jg\",              0,              PARAM_REL8,         0,                  0               },\n\t// 0x80\n\t{\"group80\",         GROUP,          0,                  0,                  0               },\n\t{\"group81\",         GROUP,          0,                  0,                  0               },\n\t{\"group80\",         GROUP,          0,                  0,                  0               },\n\t{\"group83\",         GROUP,          0,                  0,                  0               },\n\t{\"test\",            MODRM,          PARAM_RM8,          PARAM_REG8,         0               },\n\t{\"test\",            MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"xchg\",            MODRM,          PARAM_REG8,         PARAM_RM8,          0               },\n\t{\"xchg\",            MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"mov\",             MODRM,          PARAM_RM8,          PARAM_REG8,         0               },\n\t{\"mov\",             MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"mov\",             MODRM,          PARAM_REG8,         PARAM_RM8,          0               },\n\t{\"mov\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"mov\",             MODRM,          PARAM_RM,           PARAM_SREG,         0               },\n\t{\"lea\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"mov\",             MODRM,          PARAM_SREG,         PARAM_RM,           0               },\n\t{\"pop\",             MODRM,          PARAM_RM,           0,                  0               },\n\t// 0x90\n\t{\"nop\\0???\\0???\\0pause\",    VAR_NAME4,          0,                  0,                  0               },\n\t{\"xchg\",            0,              PARAM_EAX,          PARAM_ECX,          0               },\n\t{\"xchg\",            0,              PARAM_EAX,          PARAM_EDX,          0               },\n\t{\"xchg\",            0,              PARAM_EAX,          PARAM_EBX,          0               },\n\t{\"xchg\",            0,              PARAM_EAX,          PARAM_ESP,          0               },\n\t{\"xchg\",            0,              PARAM_EAX,          PARAM_EBP,          0               },\n\t{\"xchg\",            0,              PARAM_EAX,          PARAM_ESI,          0               },\n\t{\"xchg\",            0,              PARAM_EAX,          PARAM_EDI,          0               },\n\t{\"cbw\\0cwde\\0cdqe\", VAR_NAME,       0,                  0,                  0               },\n\t{\"cwd\\0cdq\\0cqo\",   VAR_NAME,       0,                  0,                  0               },\n\t{\"call\",            ALWAYS64,       PARAM_ADDR,         0,                  0,              DASMFLAG_STEP_OVER},\n\t{\"wait\",            0,              0,                  0,                  0               },\n\t{\"pushf\\0pushfd\\0pushfq\",VAR_NAME,  0,                  0,                  0               },\n\t{\"popf\\0popfd\\0popfq\",VAR_NAME,     0,                  0,                  0               },\n\t{\"sahf\",            0,              0,                  0,                  0               },\n\t{\"lahf\",            0,              0,                  0,                  0               },\n\t// 0xa0\n\t{\"mov\",             0,              PARAM_AL,           PARAM_MEM_OFFS,     0               },\n\t{\"mov\",             0,              PARAM_EAX,          PARAM_MEM_OFFS,     0               },\n\t{\"mov\",             0,              PARAM_MEM_OFFS,     PARAM_AL,           0               },\n\t{\"mov\",             0,              PARAM_MEM_OFFS,     PARAM_EAX,          0               },\n\t{\"movsb\",           0,              PARAM_PREIMP,       0,                  0               },\n\t{\"movsw\\0movsd\\0movsq\",VAR_NAME,    PARAM_PREIMP,       0,                  0               },\n\t{\"cmpsb\",           0,              PARAM_PREIMP,       0,                  0               },\n\t{\"cmpsw\\0cmpsd\\0cmpsq\",VAR_NAME,    PARAM_PREIMP,       0,                  0               },\n\t{\"test\",            0,              PARAM_AL,           PARAM_UI8,          0               },\n\t{\"test\",            0,              PARAM_EAX,          PARAM_IMM,          0               },\n\t{\"stosb\",           0,              0,                  0,                  0               },\n\t{\"stosw\\0stosd\\0stosq\",VAR_NAME,    0,                  0,                  0               },\n\t{\"lodsb\",           0,              PARAM_PREIMP,       0,                  0               },\n\t{\"lodsw\\0lodsd\\0lodsq\",VAR_NAME,    PARAM_PREIMP,       0,                  0               },\n\t{\"scasb\",           0,              0,                  0,                  0               },\n\t{\"scasw\\0scasd\\0scasq\",VAR_NAME,    0,                  0,                  0               },\n\t// 0xb0\n\t{\"mov\",             0,              PARAM_AL,           PARAM_UI8,          0               },\n\t{\"mov\",             0,              PARAM_CL,           PARAM_UI8,          0               },\n\t{\"mov\",             0,              PARAM_DL,           PARAM_UI8,          0               },\n\t{\"mov\",             0,              PARAM_BL,           PARAM_UI8,          0               },\n\t{\"mov\",             0,              PARAM_AH,           PARAM_UI8,          0               },\n\t{\"mov\",             0,              PARAM_CH,           PARAM_UI8,          0               },\n\t{\"mov\",             0,              PARAM_DH,           PARAM_UI8,          0               },\n\t{\"mov\",             0,              PARAM_BH,           PARAM_UI8,          0               },\n\t{\"mov\",             0,              PARAM_EAX,          PARAM_IMM64,        0               },\n\t{\"mov\",             0,              PARAM_ECX,          PARAM_IMM64,        0               },\n\t{\"mov\",             0,              PARAM_EDX,          PARAM_IMM64,        0               },\n\t{\"mov\",             0,              PARAM_EBX,          PARAM_IMM64,        0               },\n\t{\"mov\",             0,              PARAM_ESP,          PARAM_IMM64,        0               },\n\t{\"mov\",             0,              PARAM_EBP,          PARAM_IMM64,        0               },\n\t{\"mov\",             0,              PARAM_ESI,          PARAM_IMM64,        0               },\n\t{\"mov\",             0,              PARAM_EDI,          PARAM_IMM64,        0               },\n\t// 0xc0\n\t{\"groupC0\",         GROUP,          0,                  0,                  0               },\n\t{\"groupC1\",         GROUP,          0,                  0,                  0               },\n\t{\"ret\",             0,              PARAM_UI16,         0,                  0,              DASMFLAG_STEP_OUT},\n\t{\"ret\",             0,              0,                  0,                  0,              DASMFLAG_STEP_OUT},\n\t{\"les\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"lds\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"mov\",             MODRM,          PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"mov\",             MODRM,          PARAM_RMPTR,        PARAM_IMM,          0               },\n\t{\"enter\",           0,              PARAM_UI16,         PARAM_UI8,          0               },\n\t{\"leave\",           0,              0,                  0,                  0               },\n\t{\"retf\",            0,              PARAM_UI16,         0,                  0,              DASMFLAG_STEP_OUT},\n\t{\"retf\",            0,              0,                  0,                  0,              DASMFLAG_STEP_OUT},\n\t{\"int 3\",           0,              0,                  0,                  0,              DASMFLAG_STEP_OVER},\n\t{\"int\",             0,              PARAM_UI8,          0,                  0,              DASMFLAG_STEP_OVER},\n\t{\"into\",            0,              0,                  0,                  0               },\n\t{\"iret\",            0,              0,                  0,                  0,              DASMFLAG_STEP_OUT},\n\t// 0xd0\n\t{\"groupD0\",         GROUP,          0,                  0,                  0               },\n\t{\"groupD1\",         GROUP,          0,                  0,                  0               },\n\t{\"groupD2\",         GROUP,          0,                  0,                  0               },\n\t{\"groupD3\",         GROUP,          0,                  0,                  0               },\n\t{\"aam\",             0,              PARAM_UI8,          0,                  0               },\n\t{\"aad\",             0,              PARAM_UI8,          0,                  0               },\n\t{\"salc\",            0,              0,                  0,                  0               }, //AMD docs name it\n\t{\"xlat\",            0,              0,                  0,                  0               },\n\t{\"escape\",          FPU,            0,                  0,                  0               },\n\t{\"escape\",          FPU,            0,                  0,                  0               },\n\t{\"escape\",          FPU,            0,                  0,                  0               },\n\t{\"escape\",          FPU,            0,                  0,                  0               },\n\t{\"escape\",          FPU,            0,                  0,                  0               },\n\t{\"escape\",          FPU,            0,                  0,                  0               },\n\t{\"escape\",          FPU,            0,                  0,                  0               },\n\t{\"escape\",          FPU,            0,                  0,                  0               },\n\t// 0xe0\n\t{\"loopne\",          0,              PARAM_REL8,         0,                  0,              DASMFLAG_STEP_OVER},\n\t{\"loopz\",           0,              PARAM_REL8,         0,                  0,              DASMFLAG_STEP_OVER},\n\t{\"loop\",            0,              PARAM_REL8,         0,                  0,              DASMFLAG_STEP_OVER},\n\t{\"jcxz\\0jecxz\\0jrcxz\",VAR_NAME,     PARAM_REL8,         0,                  0               },\n\t{\"in\",              0,              PARAM_AL,           PARAM_UI8,          0               },\n\t{\"in\",              0,              PARAM_EAX,          PARAM_UI8,          0               },\n\t{\"out\",             0,              PARAM_UI8,          PARAM_AL,           0               },\n\t{\"out\",             0,              PARAM_UI8,          PARAM_EAX,          0               },\n\t{\"call\",            0,              PARAM_REL,          0,                  0,              DASMFLAG_STEP_OVER},\n\t{\"jmp\",             0,              PARAM_REL,          0,                  0               },\n\t{\"jmp\",             0,              PARAM_ADDR,         0,                  0               },\n\t{\"jmp\",             0,              PARAM_REL8,         0,                  0               },\n\t{\"in\",              0,              PARAM_AL,           PARAM_DX,           0               },\n\t{\"in\",              0,              PARAM_EAX,          PARAM_DX,           0               },\n\t{\"out\",             0,              PARAM_DX,           PARAM_AL,           0               },\n\t{\"out\",             0,              PARAM_DX,           PARAM_EAX,          0               },\n\t// 0xf0\n\t{\"lock\",            0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"repne\",           PREFIX,         0,                  0,                  0               },\n\t{\"rep\",             PREFIX,         0,                  0,                  0               },\n\t{\"hlt\",             0,              0,                  0,                  0               },\n\t{\"cmc\",             0,              0,                  0,                  0               },\n\t{\"groupF6\",         GROUP,          0,                  0,                  0               },\n\t{\"groupF7\",         GROUP,          0,                  0,                  0               },\n\t{\"clc\",             0,              0,                  0,                  0               },\n\t{\"stc\",             0,              0,                  0,                  0               },\n\t{\"cli\",             0,              0,                  0,                  0               },\n\t{\"sti\",             0,              0,                  0,                  0               },\n\t{\"cld\",             0,              0,                  0,                  0               },\n\t{\"std\",             0,              0,                  0,                  0               },\n\t{\"groupFE\",         GROUP,          0,                  0,                  0               },\n\t{\"groupFF\",         GROUP,          0,                  0,                  0               }\n};\n\nstatic const I386_OPCODE x64_opcode_alt[] =\n{\n\t{\"movsxd\",          MODRM | ALWAYS64,PARAM_REG,         PARAM_RMPTR32,      0               },\n};\n\nstatic const I386_OPCODE i386_opcode_table2[256] =\n{\n\t// 0x00\n\t{\"group0F00\",       GROUP,          0,                  0,                  0               },\n\t{\"group0F01\",       GROUP,          0,                  0,                  0               },\n\t{\"lar\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"lsl\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"syscall\",         0,              0,                  0,                  0               },\n\t{\"clts\",            0,              0,                  0,                  0               },\n\t{\"sysret\",          0,              0,                  0,                  0               },\n\t{\"invd\",            0,              0,                  0,                  0               },\n\t{\"wbinvd\",          0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"ud2\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"group0F0D\",           GROUP,              0,                  0,                  0               }, //AMD only\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t// 0x10\n\t{\"movups\\0\"\n\t\t\"movupd\\0\"\n\t\t\"movsd\\0\"\n\t\t\"movss\",            MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"movups\\0\"\n\t\t\"movupd\\0\"\n\t\t\"movsd\\0\"\n\t\t\"movss\",            MODRM|VAR_NAME4,PARAM_XMMM,         PARAM_XMM,          0               },\n\t{\"movlps\\0\"\n\t\t\"movlpd\\0\"\n\t\t\"movddup\\0\"\n\t\t\"movsldup\",     MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"movlps\\0\"\n\t\t\"movlpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMMM,         PARAM_XMM,          0               },\n\t{\"unpcklps\\0\"\n\t\t\"unpcklpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"unpckhps\\0\"\n\t\t\"unpckhpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{ \"group0F16\",     GROUP|GROUP_MOD, 0,                  0,                  0                   },\n\t{\"movhps\\0\"\n\t\t\"movhpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMMM,          PARAM_XMM,         0               },\n\t{\"group0F18\",       GROUP,          0,                  0,                  0               },\n\t{\"nop_hint\",        0,              PARAM_RMPTR8,               0,                  0               },\n\t{\"nop_hint\",        0,              PARAM_RMPTR8,               0,                  0               },\n\t{\"nop_hint\",        0,              PARAM_RMPTR8,               0,                  0               },\n\t{\"nop_hint\",        0,              PARAM_RMPTR8,               0,                  0               },\n\t{\"nop_hint\",        0,              PARAM_RMPTR8,               0,                  0               },\n\t{\"nop_hint\",        0,              PARAM_RMPTR8,               0,                  0               },\n\t{\"nop_hint\",        0,              PARAM_RMPTR8,               0,                  0               },\n\t// 0x20\n\t{\"mov\",             MODRM,          PARAM_REG2_32,      PARAM_CREG,         0               },\n\t{\"mov\",             MODRM,          PARAM_REG2_32,      PARAM_DREG,         0               },\n\t{\"mov\",             MODRM,          PARAM_CREG,         PARAM_REG2_32,      0               },\n\t{\"mov\",             MODRM,          PARAM_DREG,         PARAM_REG2_32,      0               },\n\t{\"mov\",             MODRM,          PARAM_REG2_32,      PARAM_TREG,         0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"mov\",             MODRM,          PARAM_TREG,         PARAM_REG2_32,      0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"movaps\\0\"\n\t\t\"movapd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"movaps\\0\"\n\t\t\"movapd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMMM,         PARAM_XMM,          0               },\n\t{\"cvtpi2ps\\0\"\n\t\t\"cvtpi2pd\\0\"\n\t\t\"cvtsi2sd\\0\"\n\t\t\"cvtsi2ss\",     MODRM|VAR_NAME4,PARAM_XMM,          PARAM_RMXMM,        0               },\n\t{\"movntps\\0\"\n\t\t\"movntpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMMM,         PARAM_XMM,          0               },\n\t{\"cvttps2pi\\0\"\n\t\t\"cvttpd2pi\\0\"\n\t\t\"cvttsd2si\\0\"\n\t\t\"cvttss2si\",        MODRM|VAR_NAME4,PARAM_REGORXMM,     PARAM_XMMM,         0               },\n\t{\"cvtps2pi\\0\"\n\t\t\"cvtpd2pi\\0\"\n\t\t\"cvtsd2si\\0\"\n\t\t\"cvtss2si\",     MODRM|VAR_NAME4,PARAM_REGORXMM,     PARAM_XMMM,         0               },\n\t{\"ucomiss\\0\"\n\t\t\"ucomisd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"comiss\\0\"\n\t\t\"comisd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t// 0x30\n\t{\"wrmsr\",           0,              0,                  0,                  0               },\n\t{\"rdtsc\",           0,              0,                  0,                  0               },\n\t{\"rdmsr\",           0,              0,                  0,                  0               },\n\t{\"rdpmc\",           0,              0,                  0,                  0               },\n\t{\"sysenter\",        0,              0,                  0,                  0               },\n\t{\"sysexit\",         0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"three_byte\",          THREE_BYTE,         0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"three_byte\",          THREE_BYTE,         0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t// 0x40\n\t{\"cmovo\",           MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovno\",          MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovb\",           MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovae\",          MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmove\",           MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovne\",          MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovbe\",          MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmova\",           MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovs\",           MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovns\",          MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovpe\",          MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovpo\",          MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovl\",           MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovge\",          MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovle\",          MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovg\",           MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t// 0x50\n\t{\"movmskps\\0\"\n\t\t\"movmskpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_REG3264,      PARAM_XMMM,         0               },\n\t{\"sqrtps\\0\"\n\t\t\"sqrtpd\\0\"\n\t\t\"sqrtsd\\0\"\n\t\t\"sqrtss\",           MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"rsqrtps\\0\"\n\t\t\"???\\0\"\n\t\t\"???\\0\"\n\t\t\"rsqrtss\",          MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"rcpps\\0\"\n\t\t\"???\\0\"\n\t\t\"???\\0\"\n\t\t\"rcpss\",            MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"andps\\0\"\n\t\t\"andpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"andnps\\0\"\n\t\t\"andnpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"orps\\0\"\n\t\t\"orpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"xorps\\0\"\n\t\t\"xorpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"addps\\0\"\n\t\t\"addpd\\0\"\n\t\t\"addsd\\0\"\n\t\t\"addss\",            MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"mulps\\0\"\n\t\t\"mulpd\\0\"\n\t\t\"mulsd\\0\"\n\t\t\"mulss\",            MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"cvtps2pd\\0\"\n\t\t\"cvtpd2ps\\0\"\n\t\t\"cvtsd2ss\\0\"\n\t\t\"cvtss2sd\",     MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"cvtdq2ps\\0\"\n\t\t\"cvtps2dq\\0\"\n\t\t\"???\\0\"\n\t\t\"cvttps2dq\",        MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"subps\\0\"\n\t\t\"subpd\\0\"\n\t\t\"subsd\\0\"\n\t\t\"subss\",            MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"minps\\0\"\n\t\t\"minpd\\0\"\n\t\t\"minsd\\0\"\n\t\t\"minss\",            MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"divps\\0\"\n\t\t\"divpd\\0\"\n\t\t\"divsd\\0\"\n\t\t\"divss\",            MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"maxps\\0\"\n\t\t\"maxpd\\0\"\n\t\t\"maxsd\\0\"\n\t\t\"maxss\",            MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t// 0x60\n\t{\"punpcklbw\",       MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"punpcklwd\",       MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"punpckldq\",       MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"packsswb\",        MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pcmpgtb\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pcmpgtw\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pcmpgtd\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"packuswb\",        MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"punpckhbw\",       MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"punpckhwd\",       MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"punpckhdq\",       MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"packssdw\",        MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"???\\0\"\n\t\t\"punpcklqdq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\\0\",        MODRM|VAR_NAME4,            PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"punpckhqdq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\\0\",        MODRM|VAR_NAME4,            PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"movd\",            MODRM,          PARAM_MMX,          PARAM_RM,           0               },\n\t{\"movq\\0\"\n\t\t\"movdqa\\0\"\n\t\t\"???\\0\"\n\t\t\"movdqu\",           MODRM|VAR_NAME4,PARAM_MMX,          PARAM_MMXM,         0               },\n\t// 0x70\n\t{\"pshufw\\0\"\n\t\t\"pshufd\\0\"\n\t\t\"pshuflw\\0\"\n\t\t\"pshufhw\",          MODRM|VAR_NAME4,PARAM_MMX,          PARAM_MMXM,         PARAM_UI8       },\n\t{\"group0F71\",       GROUP,          0,                  0,                  0               },\n\t{\"group0F72\",       GROUP,          0,                  0,                  0               },\n\t{\"group0F73\",       GROUP,          0,                  0,                  0               },\n\t{\"pcmpeqb\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pcmpeqw\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pcmpeqd\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"emms\",            0,              0,                  0,                  0               },\n\t{\"vmread\",          MODRM,              PARAM_RM,               PARAM_REG,              0               },\n\t{\"vmwrite\",         MODRM,              PARAM_RM,               PARAM_REG,              0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\\0\"\n\t\t\"haddpd\\0\"\n\t\t\"haddps\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"???\\0\"\n\t\t\"hsubpd\\0\"\n\t\t\"hsubps\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"movd\\0\"\n\t\t\"movd\\0\"\n\t\t\"???\\0\"\n\t\t\"movq\",         MODRM|VAR_NAME4,PARAM_RM,           PARAM_MMX,          0               },\n\t{\"movq\\0\"\n\t\t\"movdqa\\0\"\n\t\t\"???\\0\"\n\t\t\"movdqu\",           MODRM|VAR_NAME4,PARAM_MMXM,         PARAM_MMX,          0               },\n\t// 0x80\n\t{\"jo\",              0,              PARAM_REL,          0,                  0               },\n\t{\"jno\",             0,              PARAM_REL,          0,                  0               },\n\t{\"jb\",              0,              PARAM_REL,          0,                  0               },\n\t{\"jae\",             0,              PARAM_REL,          0,                  0               },\n\t{\"je\",              0,              PARAM_REL,          0,                  0               },\n\t{\"jne\",             0,              PARAM_REL,          0,                  0               },\n\t{\"jbe\",             0,              PARAM_REL,          0,                  0               },\n\t{\"ja\",              0,              PARAM_REL,          0,                  0               },\n\t{\"js\",              0,              PARAM_REL,          0,                  0               },\n\t{\"jns\",             0,              PARAM_REL,          0,                  0               },\n\t{\"jp\",              0,              PARAM_REL,          0,                  0               },\n\t{\"jnp\",             0,              PARAM_REL,          0,                  0               },\n\t{\"jl\",              0,              PARAM_REL,          0,                  0               },\n\t{\"jge\",             0,              PARAM_REL,          0,                  0               },\n\t{\"jle\",             0,              PARAM_REL,          0,                  0               },\n\t{\"jg\",              0,              PARAM_REL,          0,                  0               },\n\t// 0x90\n\t{\"seto\",            MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"setno\",           MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"setb\",            MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"setae\",           MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"sete\",            MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"setne\",           MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"setbe\",           MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"seta\",            MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"sets\",            MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"setns\",           MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"setp\",            MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"setnp\",           MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"setl\",            MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"setge\",           MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"setle\",           MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"setg\",            MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t// 0xa0\n\t{\"push    fs\",      0,              0,                  0,                  0               },\n\t{\"pop     fs\",      0,              0,                  0,                  0               },\n\t{\"cpuid\",           0,              0,                  0,                  0               },\n\t{\"bt\",              MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"shld\",            MODRM,          PARAM_RM,           PARAM_REG,          PARAM_UI8       },\n\t{\"shld\",            MODRM,          PARAM_RM,           PARAM_REG,          PARAM_CL        },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"push    gs\",      0,              0,                  0,                  0               },\n\t{\"pop     gs\",      0,              0,                  0,                  0               },\n\t{\"rsm\",             0,              0,                  0,                  0               },\n\t{\"bts\",             MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"shrd\",            MODRM,          PARAM_RM,           PARAM_REG,          PARAM_UI8       },\n\t{\"shrd\",            MODRM,          PARAM_RM,           PARAM_REG,          PARAM_CL        },\n\t{\"group0FAE\",       GROUP,          0,                  0,                  0               },\n\t{\"imul\",            MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t// 0xb0\n\t{\"cmpxchg\",         MODRM,          PARAM_RM8,          PARAM_REG,          0               },\n\t{\"cmpxchg\",         MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"lss\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"btr\",             MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"lfs\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"lgs\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"movzx\",           MODRM,          PARAM_REG,          PARAM_RMPTR8,       0               },\n\t{\"movzx\",           MODRM,          PARAM_REG,          PARAM_RMPTR16,      0               },\n\t{\"???\\0\"\n\t\t\"???\\0\"\n\t\t\"???\\0\"\n\t\t\"popcnt\",           MODRM|VAR_NAME4,        PARAM_REG,              PARAM_RM16,             0               },\n\t{\"ud2\",             0,              0,                  0,                  0               },\n\t{\"group0FBA\",       GROUP,          0,                  0,                  0               },\n\t{\"btc\",             MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"bsf\\0\"\n\t\t\"???\\0\"\n\t\t\"???\\0\"\n\t\t\"tzcnt\",            MODRM|VAR_NAME4,    PARAM_REG,          PARAM_RM,           0               },\n\t{\"bsr\\0\"\n\t\t\"???\\0\"\n\t\t\"???\\0\"\n\t\t\"lzcnt\",            MODRM|VAR_NAME4,    PARAM_REG,          PARAM_RM,           0,              DASMFLAG_STEP_OVER},\n\t{\"movsx\",           MODRM,          PARAM_REG,          PARAM_RMPTR8,       0               },\n\t{\"movsx\",           MODRM,          PARAM_REG,          PARAM_RMPTR16,      0               },\n\t// 0xc0\n\t{\"xadd\",            MODRM,          PARAM_RM8,          PARAM_REG,          0               },\n\t{\"xadd\",            MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"cmpps\\0\"\n\t\t\"cmppd\\0\"\n\t\t\"cmpsd\\0\"\n\t\t\"cmpss\",            MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"movnti\",          MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"pinsrw\",          MODRM,          PARAM_MMX,          PARAM_RM,           PARAM_UI8       },\n\t{\"pextrw\",          MODRM,          PARAM_MMX,          PARAM_RM,           PARAM_UI8       },\n\t{\"shufps\\0\"\n\t\t\"shufpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         PARAM_UI8       },\n\t{\"group0FC7\",           GROUP,          0,          0,                  0               },\n\t{\"bswap\",           0,              PARAM_EAX,          0,                  0               },\n\t{\"bswap\",           0,              PARAM_ECX,          0,                  0               },\n\t{\"bswap\",           0,              PARAM_EDX,          0,                  0               },\n\t{\"bswap\",           0,              PARAM_EBX,          0,                  0               },\n\t{\"bswap\",           0,              PARAM_ESP,          0,                  0               },\n\t{\"bswap\",           0,              PARAM_EBP,          0,                  0               },\n\t{\"bswap\",           0,              PARAM_ESI,          0,                  0               },\n\t{\"bswap\",           0,              PARAM_EDI,          0,                  0               },\n\t// 0xd0\n\t{\"???\\0\"\n\t\t\"addsubpd\\0\"\n\t\t\"addsubps\\0\"\n\t\t\"???\\0\",            MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"psrlw\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"psrld\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"psrlq\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"paddq\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pmullw\",          MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"???\\0\"\n\t\t\"movq\\0\"\n\t\t\"movdq2q\\0\"\n\t\t\"movq2dq\",          MODRM|VAR_NAME4,PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pmovmskb\",        MODRM,          PARAM_REG3264,      PARAM_MMXM,         0               },\n\t{\"psubusb\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"psubusw\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pminub\",          MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pand\",            MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"paddusb\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"paddusw\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pmaxub\",          MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pandn\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t// 0xe0\n\t{\"pavgb\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"psraw\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"psrad\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pavgw\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pmulhuw\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pmulhw\",          MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"???\\0\"\n\t\t\"cvttpd2dq\\0\"\n\t\t\"cvtpd2dq\\0\"\n\t\t\"cvtdq2pd\",     MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"movntq\\0\"\n\t\t\"movntdq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\\0\",            MODRM|VAR_NAME4,    PARAM_M64,          PARAM_MMX,          0               },\n\t{\"psubsb\",          MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"psubsw\",          MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pminsw\",          MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"por\",             MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"paddsb\",          MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"paddsw\",          MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pmaxsw\",          MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pxor\",            MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t// 0xf0\n\t{\"???\\0\"\n\t\t\"???\\0\"\n\t\t\"lddqu\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"psllw\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pslld\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"psllq\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pmuludq\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pmaddwd\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"psadbw\",          MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"maskmovq\\0\"\n\t\t\"maskmovdqu\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"psubb\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"psubw\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"psubd\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"psubq\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"paddb\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"paddw\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"paddd\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"???\",             0,              0,                  0,                  0               }\n};\n\nstatic const I386_OPCODE i386_opcode_table0F38[256] =\n{\n\t// 0x00\n\t{\"pshufb\\0\"\n\t\t\"pshufb\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"phaddw\\0\"\n\t\t\"phaddw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"phaddd\\0\"\n\t\t\"phadd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"phaddsw\\0\"\n\t\t\"phaddsw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"pmaddubsw\\0\"\n\t\t\"pmaddubsw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"phsubw\\0\"\n\t\t\"phsubw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"phsubd\\0\"\n\t\t\"phsubd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"phsubsw\\0\"\n\t\t\"phsubsw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"psignb\\0\"\n\t\t\"psignb\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"psignw\\0\"\n\t\t\"psignw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"psignd\\0\"\n\t\t\"psignd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"pmulhrsw\\0\"\n\t\t\"pmulhrsw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x10\n\t{\"???\\0\"\n\t\t\"pblendvb\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_XMM0          },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\\0\"\n\t\t\"blendvps\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_XMM0          },\n\t{\"???\\0\"\n\t\t\"blendvpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_XMM0          },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\\0\"\n\t\t\"ptest\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"pabsb\\0\"\n\t\t\"pabsb\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"pabsw\\0\"\n\t\t\"pabsw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"pabsd\\0\"\n\t\t\"pabsd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x20\n\t{\"???\\0\"\n\t\t\"pmovsxbw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMM64,            0               },\n\t{\"???\\0\"\n\t\t\"pmovsxbd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMM32,            0               },\n\t{\"???\\0\"\n\t\t\"pmovsxbq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMM16,            0               },\n\t{\"???\\0\"\n\t\t\"pmovsxwd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMM64,            0               },\n\t{\"???\\0\"\n\t\t\"pmovsxwq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMM32,            0               },\n\t{\"???\\0\"\n\t\t\"pmovsxdq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMM64,            0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\\0\"\n\t\t\"pmuldq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"pcmpeqq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"movntdqa\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"packusdw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x30\n\t{\"???\\0\"\n\t\t\"pmovzxbw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMM64,            0               },\n\t{\"???\\0\"\n\t\t\"pmovzxbd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMM32,            0               },\n\t{\"???\\0\"\n\t\t\"pmovzxbq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMM16,            0               },\n\t{\"???\\0\"\n\t\t\"pmovzxwd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMM64,            0               },\n\t{\"???\\0\"\n\t\t\"pmovzxwq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMM32,            0               },\n\t{\"???\\0\"\n\t\t\"pmovzxdq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMM64,            0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\\0\"\n\t\t\"pcmpgtq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"pminsb\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"pminsd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"pminuw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"pminud\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"pmaxsb\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"pmaxsd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"pmaxuw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"pmaxud\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t// 0x40\n\t{\"???\\0\"\n\t\t\"pmulld\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"phminposuw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x50\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x60\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x70\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x80\n\t{\"???\\0\"\n\t\t\"invept\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_REG32,            PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"invvpid\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_REG32,            PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"invpcid\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_REG32,            PARAM_XMMM,         0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x90\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0xa0\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0xb0\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0xc0\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0xd0\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\\0\"\n\t\t\"aesimc\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"aesenc\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"aesenclast\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"aesdec\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"aesdeclast\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t// 0xe0\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0xf0\n\t{\"movbe\\0\"\n\t\t\"???\\0\"\n\t\t\"crc32\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_REG32,            PARAM_RMPTR,            0               }, // not quite correct\n\t{\"movbe\\0\"\n\t\t\"???\\0\"\n\t\t\"crc32\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_RMPTR,            PARAM_REG32,            0               }, // not quite correct\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n};\n\nstatic const I386_OPCODE i386_opcode_table0F3A[256] =\n{\n\t// 0x00\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\\0\"\n\t\t\"roundps\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"roundpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"roundss\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"roundsd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"blendps\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"blendpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"pblendw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"palignr\\0\"\n\t\t\"palignr\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t// 0x10\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\\0\"\n\t\t\"pextrb\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_RM8,          PARAM_XMM,          PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"pextrw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_RM16,         PARAM_XMM,          PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"pextrd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_RM8,          PARAM_XMM,          PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"extractps\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_RM32,         PARAM_XMM,          PARAM_UI8           },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x20\n\t{\"???\\0\"\n\t\t\"pinsrb\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_RM8,          PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"insertps\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_RM8,          PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"pinsrd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_RM32,         PARAM_UI8           },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x30\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x40\n\t{\"???\\0\"\n\t\t\"dpps\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"dppd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"mpsadbw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\\0\"\n\t\t\"pclmulqdq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x50\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x60\n\t{\"???\\0\"\n\t\t\"pcmestrm\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"pcmestri\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"pcmistrm\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"pcmistri\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x70\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x80\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x90\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0xa0\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0xb0\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0xc0\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0xd0\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\\0\"\n\t\t\"aeskeygenassist\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t// 0xe0\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0xf0\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n};\n\nstatic const I386_OPCODE group80_table[8] =\n{\n\t{\"add\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"or\",              0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"adc\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"sbb\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"and\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"sub\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"xor\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"cmp\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               }\n};\n\nstatic const I386_OPCODE group81_table[8] =\n{\n\t{\"add\",             0,              PARAM_RMPTR,        PARAM_IMM,          0               },\n\t{\"or\",              0,              PARAM_RMPTR,        PARAM_IMM,          0               },\n\t{\"adc\",             0,              PARAM_RMPTR,        PARAM_IMM,          0               },\n\t{\"sbb\",             0,              PARAM_RMPTR,        PARAM_IMM,          0               },\n\t{\"and\",             0,              PARAM_RMPTR,        PARAM_IMM,          0               },\n\t{\"sub\",             0,              PARAM_RMPTR,        PARAM_IMM,          0               },\n\t{\"xor\",             0,              PARAM_RMPTR,        PARAM_IMM,          0               },\n\t{\"cmp\",             0,              PARAM_RMPTR,        PARAM_IMM,          0               }\n};\n\nstatic const I386_OPCODE group83_table[8] =\n{\n\t{\"add\",             0,              PARAM_RMPTR,        PARAM_I8,           0               },\n\t{\"or\",              0,              PARAM_RMPTR,        PARAM_I8,           0               },\n\t{\"adc\",             0,              PARAM_RMPTR,        PARAM_I8,           0               },\n\t{\"sbb\",             0,              PARAM_RMPTR,        PARAM_I8,           0               },\n\t{\"and\",             0,              PARAM_RMPTR,        PARAM_I8,           0               },\n\t{\"sub\",             0,              PARAM_RMPTR,        PARAM_I8,           0               },\n\t{\"xor\",             0,              PARAM_RMPTR,        PARAM_I8,           0               },\n\t{\"cmp\",             0,              PARAM_RMPTR,        PARAM_I8,           0               }\n};\n\nstatic const I386_OPCODE groupC0_table[8] =\n{\n\t{\"rol\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"ror\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"rcl\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"rcr\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"shl\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"shr\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"sal\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"sar\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               }\n};\n\nstatic const I386_OPCODE groupC1_table[8] =\n{\n\t{\"rol\",             0,              PARAM_RMPTR,        PARAM_UI8,          0               },\n\t{\"ror\",             0,              PARAM_RMPTR,        PARAM_UI8,          0               },\n\t{\"rcl\",             0,              PARAM_RMPTR,        PARAM_UI8,          0               },\n\t{\"rcr\",             0,              PARAM_RMPTR,        PARAM_UI8,          0               },\n\t{\"shl\",             0,              PARAM_RMPTR,        PARAM_UI8,          0               },\n\t{\"shr\",             0,              PARAM_RMPTR,        PARAM_UI8,          0               },\n\t{\"sal\",             0,              PARAM_RMPTR,        PARAM_UI8,          0               },\n\t{\"sar\",             0,              PARAM_RMPTR,        PARAM_UI8,          0               }\n};\n\nstatic const I386_OPCODE groupD0_table[8] =\n{\n\t{\"rol\",             0,              PARAM_RMPTR8,       PARAM_1,            0               },\n\t{\"ror\",             0,              PARAM_RMPTR8,       PARAM_1,            0               },\n\t{\"rcl\",             0,              PARAM_RMPTR8,       PARAM_1,            0               },\n\t{\"rcr\",             0,              PARAM_RMPTR8,       PARAM_1,            0               },\n\t{\"shl\",             0,              PARAM_RMPTR8,       PARAM_1,            0               },\n\t{\"shr\",             0,              PARAM_RMPTR8,       PARAM_1,            0               },\n\t{\"sal\",             0,              PARAM_RMPTR8,       PARAM_1,            0               },\n\t{\"sar\",             0,              PARAM_RMPTR8,       PARAM_1,            0               }\n};\n\nstatic const I386_OPCODE groupD1_table[8] =\n{\n\t{\"rol\",             0,              PARAM_RMPTR,        PARAM_1,            0               },\n\t{\"ror\",             0,              PARAM_RMPTR,        PARAM_1,            0               },\n\t{\"rcl\",             0,              PARAM_RMPTR,        PARAM_1,            0               },\n\t{\"rcr\",             0,              PARAM_RMPTR,        PARAM_1,            0               },\n\t{\"shl\",             0,              PARAM_RMPTR,        PARAM_1,            0               },\n\t{\"shr\",             0,              PARAM_RMPTR,        PARAM_1,            0               },\n\t{\"sal\",             0,              PARAM_RMPTR,        PARAM_1,            0               },\n\t{\"sar\",             0,              PARAM_RMPTR,        PARAM_1,            0               }\n};\n\nstatic const I386_OPCODE groupD2_table[8] =\n{\n\t{\"rol\",             0,              PARAM_RMPTR8,       PARAM_CL,           0               },\n\t{\"ror\",             0,              PARAM_RMPTR8,       PARAM_CL,           0               },\n\t{\"rcl\",             0,              PARAM_RMPTR8,       PARAM_CL,           0               },\n\t{\"rcr\",             0,              PARAM_RMPTR8,       PARAM_CL,           0               },\n\t{\"shl\",             0,              PARAM_RMPTR8,       PARAM_CL,           0               },\n\t{\"shr\",             0,              PARAM_RMPTR8,       PARAM_CL,           0               },\n\t{\"sal\",             0,              PARAM_RMPTR8,       PARAM_CL,           0               },\n\t{\"sar\",             0,              PARAM_RMPTR8,       PARAM_CL,           0               }\n};\n\nstatic const I386_OPCODE groupD3_table[8] =\n{\n\t{\"rol\",             0,              PARAM_RMPTR,        PARAM_CL,           0               },\n\t{\"ror\",             0,              PARAM_RMPTR,        PARAM_CL,           0               },\n\t{\"rcl\",             0,              PARAM_RMPTR,        PARAM_CL,           0               },\n\t{\"rcr\",             0,              PARAM_RMPTR,        PARAM_CL,           0               },\n\t{\"shl\",             0,              PARAM_RMPTR,        PARAM_CL,           0               },\n\t{\"shr\",             0,              PARAM_RMPTR,        PARAM_CL,           0               },\n\t{\"sal\",             0,              PARAM_RMPTR,        PARAM_CL,           0               },\n\t{\"sar\",             0,              PARAM_RMPTR,        PARAM_CL,           0               }\n};\n\nstatic const I386_OPCODE groupF6_table[8] =\n{\n\t{\"test\",            0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"test\",            0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"not\",             0,              PARAM_RMPTR8,       0,                  0               },\n\t{\"neg\",             0,              PARAM_RMPTR8,       0,                  0               },\n\t{\"mul\",             0,              PARAM_RMPTR8,       0,                  0               },\n\t{\"imul\",            0,              PARAM_RMPTR8,       0,                  0               },\n\t{\"div\",             0,              PARAM_RMPTR8,       0,                  0               },\n\t{\"idiv\",            0,              PARAM_RMPTR8,       0,                  0               }\n};\n\nstatic const I386_OPCODE groupF7_table[8] =\n{\n\t{\"test\",            0,              PARAM_RMPTR,        PARAM_IMM,          0               },\n\t{\"test\",            0,              PARAM_RMPTR,        PARAM_IMM,          0               },\n\t{\"not\",             0,              PARAM_RMPTR,        0,                  0               },\n\t{\"neg\",             0,              PARAM_RMPTR,        0,                  0               },\n\t{\"mul\",             0,              PARAM_RMPTR,        0,                  0               },\n\t{\"imul\",            0,              PARAM_RMPTR,        0,                  0               },\n\t{\"div\",             0,              PARAM_RMPTR,        0,                  0               },\n\t{\"idiv\",            0,              PARAM_RMPTR,        0,                  0               }\n};\n\nstatic const I386_OPCODE groupFE_table[8] =\n{\n\t{\"inc\",             0,              PARAM_RMPTR8,       0,                  0               },\n\t{\"dec\",             0,              PARAM_RMPTR8,       0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               }\n};\n\nstatic const I386_OPCODE groupFF_table[8] =\n{\n\t{\"inc\",             0,              PARAM_RMPTR,        0,                  0               },\n\t{\"dec\",             0,              PARAM_RMPTR,        0,                  0               },\n\t{\"call\",            ALWAYS64,       PARAM_RMPTR,        0,                  0,              DASMFLAG_STEP_OVER},\n\t{\"call    far ptr \",0,              PARAM_RM,           0,                  0,              DASMFLAG_STEP_OVER},\n\t{\"jmp\",             ALWAYS64,       PARAM_RMPTR,        0,                  0               },\n\t{\"jmp     far ptr \",0,              PARAM_RM,           0,                  0               },\n\t{\"push\",            0,              PARAM_RMPTR,        0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               }\n};\n\nstatic const I386_OPCODE group0F00_table[8] =\n{\n\t{\"sldt\",            0,              PARAM_RM,           0,                  0               },\n\t{\"str\",             0,              PARAM_RM,           0,                  0               },\n\t{\"lldt\",            0,              PARAM_RM,           0,                  0               },\n\t{\"ltr\",             0,              PARAM_RM,           0,                  0               },\n\t{\"verr\",            0,              PARAM_RM,           0,                  0               },\n\t{\"verw\",            0,              PARAM_RM,           0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               }\n};\n\nstatic const I386_OPCODE group0F01_table[8] =\n{\n\t{\"sgdt\",            0,              PARAM_RM,           0,                  0               },\n\t{\"sidt\",            0,              PARAM_RM,           0,                  0               },\n\t{\"lgdt\",            0,              PARAM_RM,           0,                  0               },\n\t{\"lidt\",            0,              PARAM_RM,           0,                  0               },\n\t{\"smsw\",            0,              PARAM_RM,           0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"lmsw\",            0,              PARAM_RM,           0,                  0               },\n\t{\"invlpg\",          0,              PARAM_RM,           0,                  0               }\n};\n\nstatic const I386_OPCODE group0F0D_table[8] =\n{\n\t{\"prefetch\",        0,              PARAM_RM8,          0,                  0               },\n\t{\"prefetchw\",       0,              PARAM_RM8,          0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               }\n};\n\nstatic const I386_OPCODE group0F12_table[4] =\n{\n\t{ \"movlps\\0\"\n\t\t\"movlpd\\0\"\n\t\t\"movddup\\0\"\n\t\t\"movsldup\",     VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{ \"movlps\\0\"\n\t\t\"movlpd\\0\"\n\t\t\"movddup\\0\"\n\t\t\"movsldup\",     VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{ \"movlps\\0\"\n\t\t\"movlpd\\0\"\n\t\t\"movddup\\0\"\n\t\t\"movsldup\",     VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{ \"movhlps\\0\"\n\t\t\"???\\0\"\n\t\t\"movddup\\0\"\n\t\t\"movsldup\",     VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               }\n};\n\nstatic const I386_OPCODE group0F16_table[4] =\n{\n\t{ \"movhps\\0\"\n\t\t\"movhpd\\0\"\n\t\t\"???\\0\"\n\t\t\"movshdup\",     VAR_NAME4,PARAM_XMM,         PARAM_XMMM,          0               },\n\t{ \"movhps\\0\"\n\t\t\"movhpd\\0\"\n\t\t\"???\\0\"\n\t\t\"movshdup\",     VAR_NAME4,PARAM_XMM,         PARAM_XMMM,          0               },\n\t{ \"movhps\\0\"\n\t\t\"movhpd\\0\"\n\t\t\"???\\0\"\n\t\t\"movshdup\",     VAR_NAME4,PARAM_XMM,         PARAM_XMMM,          0               },\n\t{ \"movlhps\\0\"\n\t\t\"movhpd\\0\"\n\t\t\"???\\0\"\n\t\t\"movshdup\",     VAR_NAME4,PARAM_XMM,         PARAM_XMMM,          0               }\n};\n\nstatic const I386_OPCODE group0F18_table[8] =\n{\n\t{\"prefetchnta\",     0,              PARAM_RM8,          0,                  0               },\n\t{\"prefetch0\",       0,              PARAM_RM8,          0,                  0               },\n\t{\"prefetch1\",       0,              PARAM_RM8,          0,                  0               },\n\t{\"prefetch2\",       0,              PARAM_RM8,          0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               }\n};\n\nstatic const I386_OPCODE group0F71_table[8] =\n{\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"psrlw\",           0,              PARAM_MMX2,         PARAM_UI8,          0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"psraw\",           0,              PARAM_MMX2,         PARAM_UI8,          0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"psllw\",           0,              PARAM_MMX2,         PARAM_UI8,          0               },\n\t{\"???\",             0,              0,                  0,                  0               }\n};\n\nstatic const I386_OPCODE group0F72_table[8] =\n{\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"psrld\",           0,              PARAM_MMX2,         PARAM_UI8,          0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"psrad\",           0,              PARAM_MMX2,         PARAM_UI8,          0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"pslld\",           0,              PARAM_MMX2,         PARAM_UI8,          0               },\n\t{\"???\",             0,              0,                  0,                  0               }\n};\n\nstatic const I386_OPCODE group0F73_table[8] =\n{\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"psrlq\",           0,              PARAM_MMX2,         PARAM_UI8,          0               },\n\t{\"psrldq\",          0,              PARAM_MMX2,         PARAM_UI8,          0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"psllq\",           0,              PARAM_MMX2,         PARAM_UI8,          0               },\n\t{\"pslldq\",          0,              PARAM_MMX2,         PARAM_UI8,          0               },\n};\n\nstatic const I386_OPCODE group0FAE_table[8] =\n{\n\t{\"fxsave\",          0,              PARAM_RM,           0,                  0               },\n\t{\"fxrstor\",         0,              PARAM_RM,           0,                  0               },\n\t{\"ldmxcsr\",         0,              PARAM_RM,           0,                  0               },\n\t{\"stmxscr\",         0,              PARAM_RM,           0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"lfence\",          0,              0,                  0,                  0               },\n\t{\"mfence\",          0,              0,                  0,                  0               },\n\t{\"sfence\",          0,              0,                  0,                  0               }\n};\n\n\nstatic const I386_OPCODE group0FBA_table[8] =\n{\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"bt\",              0,              PARAM_RM,           PARAM_UI8,          0               },\n\t{\"bts\",             0,              PARAM_RM,           PARAM_UI8,          0               },\n\t{\"btr\",             0,              PARAM_RM,           PARAM_UI8,          0               },\n\t{\"btc\",             0,              PARAM_RM,           PARAM_UI8,          0               }\n};\n\nstatic const I386_OPCODE group0FC7_table[8] =\n{\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"cmpxchg8b\",           MODRM,              PARAM_M64PTR,               0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"vmptrld\\0\"\n\t\t\"vmclear\\0\"\n\t\t\"???\\0\"\n\t\t\"vmxon\",            MODRM|VAR_NAME4,        PARAM_M64PTR,               0,                  0               },\n\t{\"vmptrtst\",            MODRM,              PARAM_M64PTR,               0,                  0               }\n};\n\nstatic const GROUP_OP group_op_table[] =\n{\n\t{ \"group80\",            group80_table           },\n\t{ \"group81\",            group81_table           },\n\t{ \"group83\",            group83_table           },\n\t{ \"groupC0\",            groupC0_table           },\n\t{ \"groupC1\",            groupC1_table           },\n\t{ \"groupD0\",            groupD0_table           },\n\t{ \"groupD1\",            groupD1_table           },\n\t{ \"groupD2\",            groupD2_table           },\n\t{ \"groupD3\",            groupD3_table           },\n\t{ \"groupF6\",            groupF6_table           },\n\t{ \"groupF7\",            groupF7_table           },\n\t{ \"groupFE\",            groupFE_table           },\n\t{ \"groupFF\",            groupFF_table           },\n\t{ \"group0F00\",          group0F00_table         },\n\t{ \"group0F01\",          group0F01_table         },\n\t{ \"group0F0D\",          group0F0D_table         },\n\t{ \"group0F12\",          group0F12_table         },\n\t{ \"group0F16\",          group0F16_table         },\n\t{ \"group0F18\",          group0F18_table         },\n\t{ \"group0F71\",          group0F71_table         },\n\t{ \"group0F72\",          group0F72_table         },\n\t{ \"group0F73\",          group0F73_table         },\n\t{ \"group0FAE\",          group0FAE_table         },\n\t{ \"group0FBA\",          group0FBA_table         },\n\t{ \"group0FC7\",          group0FC7_table         }\n};\n\n\n\nstatic const char *const i386_reg[3][16] =\n{\n\t{\"ax\",  \"cx\",  \"dx\",  \"bx\",  \"sp\",  \"bp\",  \"si\",  \"di\",  \"r8w\", \"r9w\", \"r10w\",\"r11w\",\"r12w\",\"r13w\",\"r14w\",\"r15w\"},\n\t{\"eax\", \"ecx\", \"edx\", \"ebx\", \"esp\", \"ebp\", \"esi\", \"edi\", \"r8d\", \"r9d\", \"r10d\",\"r11d\",\"r12d\",\"r13d\",\"r14d\",\"r15d\"},\n\t{\"rax\", \"rcx\", \"rdx\", \"rbx\", \"rsp\", \"rbp\", \"rsi\", \"rdi\", \"r8\",  \"r9\",  \"r10\", \"r11\", \"r12\", \"r13\", \"r14\", \"r15\"}\n};\n\nstatic const char *const i386_reg8[8] = {\"al\", \"cl\", \"dl\", \"bl\", \"ah\", \"ch\", \"dh\", \"bh\"};\nstatic const char *const i386_reg8rex[16] = {\"al\", \"cl\", \"dl\", \"bl\", \"spl\", \"bpl\", \"sil\", \"dil\", \"r8l\", \"r9l\", \"r10l\", \"r11l\", \"r12l\", \"r13l\", \"r14l\", \"r15l\"};\nstatic const char *const i386_sreg[8] = {\"es\", \"cs\", \"ss\", \"ds\", \"fs\", \"gs\", \"???\", \"???\"};\n\nstatic int address_size;\nstatic int operand_size;\nstatic int address_prefix;\nstatic int operand_prefix;\nstatic int max_length;\nstatic UINT64 pc;\nstatic UINT8 modrm;\nstatic UINT32 segment;\nstatic offs_t dasm_flags;\nstatic char modrm_string[256];\nstatic UINT8 rex, regex, sibex, rmex;\nstatic UINT8 pre0f;\nstatic UINT8 curmode;\n\n#define MODRM_REG1  ((modrm >> 3) & 0x7)\n#define MODRM_REG2  (modrm & 0x7)\n#define MODRM_MOD   ((modrm >> 6) & 0x3)\n\nINLINE UINT8 _FETCH(void)\n{\n\tif ((opcode_ptr - opcode_ptr_base) + 1 > max_length)\n\t\treturn 0xff;\n\tpc++;\n\treturn *opcode_ptr++;\n}\n\n#if 0\nINLINE UINT16 _FETCH16(void)\n{\n\tUINT16 d;\n\tif ((opcode_ptr - opcode_ptr_base) + 2 > max_length)\n\t\treturn 0xffff;\n\td = opcode_ptr[0] | (opcode_ptr[1] << 8);\n\topcode_ptr += 2;\n\tpc += 2;\n\treturn d;\n}\n#endif\n\nINLINE UINT32 _FETCH32(void)\n{\n\tUINT32 d;\n\tif ((opcode_ptr - opcode_ptr_base) + 4 > max_length)\n\t\treturn 0xffffffff;\n\td = opcode_ptr[0] | (opcode_ptr[1] << 8) | (opcode_ptr[2] << 16) | (opcode_ptr[3] << 24);\n\topcode_ptr += 4;\n\tpc += 4;\n\treturn d;\n}\n\nINLINE UINT8 _FETCHD(void)\n{\n\tif ((opcode_ptr - opcode_ptr_base) + 1 > max_length)\n\t\treturn 0xff;\n\tpc++;\n\treturn *opcode_ptr++;\n}\n\nINLINE UINT16 _FETCHD16(void)\n{\n\tUINT16 d;\n\tif ((opcode_ptr - opcode_ptr_base) + 2 > max_length)\n\t\treturn 0xffff;\n\td = opcode_ptr[0] | (opcode_ptr[1] << 8);\n\topcode_ptr += 2;\n\tpc += 2;\n\treturn d;\n}\n\nINLINE UINT32 _FETCHD32(void)\n{\n\tUINT32 d;\n\tif ((opcode_ptr - opcode_ptr_base) + 4 > max_length)\n\t\treturn 0xffffffff;\n\td = opcode_ptr[0] | (opcode_ptr[1] << 8) | (opcode_ptr[2] << 16) | (opcode_ptr[3] << 24);\n\topcode_ptr += 4;\n\tpc += 4;\n\treturn d;\n}\n\nstatic char *hexstring(UINT32 value, int digits)\n{\n\tstatic char buffer[20];\n\tbuffer[0] = '0';\n\tif (digits)\n\t\tsprintf(&buffer[1], \"%0*Xh\", digits, value);\n\telse\n\t\tsprintf(&buffer[1], \"%Xh\", value);\n\treturn (buffer[1] >= '0' && buffer[1] <= '9') ? &buffer[1] : &buffer[0];\n}\n\nstatic char *hexstring64(UINT32 lo, UINT32 hi)\n{\n\tstatic char buffer[40];\n\tbuffer[0] = '0';\n\tif (hi != 0)\n\t\tsprintf(&buffer[1], \"%X%08Xh\", hi, lo);\n\telse\n\t\tsprintf(&buffer[1], \"%Xh\", lo);\n\treturn (buffer[1] >= '0' && buffer[1] <= '9') ? &buffer[1] : &buffer[0];\n}\n\nstatic char *hexstringpc(UINT64 pc)\n{\n\tif (curmode == 64)\n\t\treturn hexstring64((UINT32)pc, (UINT32)(pc >> 32));\n\telse\n\t\treturn hexstring((UINT32)pc, 0);\n}\n\nstatic char *shexstring(UINT32 value, int digits, int always)\n{\n\tstatic char buffer[20];\n\tif (value >= 0x80000000)\n\t\tsprintf(buffer, \"-%s\", hexstring(-value, digits));\n\telse if (always)\n\t\tsprintf(buffer, \"+%s\", hexstring(value, digits));\n\telse\n\t\treturn hexstring(value, digits);\n\treturn buffer;\n}\n\nstatic char* handle_sib_byte( char* s, UINT8 mod )\n{\n\tUINT32 i32;\n\tUINT8 scale, i, base;\n\tUINT8 sib = _FETCHD();\n\n\tscale = (sib >> 6) & 0x3;\n\ti = ((sib >> 3) & 0x7) | sibex;\n\tbase = (sib & 0x7) | rmex;\n\n\tif (base == 5 && mod == 0) {\n\t\ti32 = _FETCH32();\n\t\ts += sprintf( s, \"%s\", hexstring(i32, 0) );\n\t} else if (base != 5 || mod != 3)\n\t\ts += sprintf( s, \"%s\", i386_reg[address_size][base] );\n\n\tif ( i != 4 ) {\n\t\ts += sprintf( s, \"+%s\", i386_reg[address_size][i] );\n\t\tif (scale)\n\t\t\ts += sprintf( s, \"*%d\", 1 << scale );\n\t}\n\treturn s;\n}\n\nstatic void handle_modrm(char* s)\n{\n\tINT8 disp8;\n\tINT16 disp16;\n\tINT32 disp32;\n\tUINT8 mod, rm;\n\n\tmodrm = _FETCHD();\n\tmod = (modrm >> 6) & 0x3;\n\trm = (modrm & 0x7) | rmex;\n\n\tif( modrm >= 0xc0 )\n\t\treturn;\n\n\tswitch(segment)\n\t{\n\t\tcase SEG_CS: s += sprintf( s, \"cs:\" ); break;\n\t\tcase SEG_DS: s += sprintf( s, \"ds:\" ); break;\n\t\tcase SEG_ES: s += sprintf( s, \"es:\" ); break;\n\t\tcase SEG_FS: s += sprintf( s, \"fs:\" ); break;\n\t\tcase SEG_GS: s += sprintf( s, \"gs:\" ); break;\n\t\tcase SEG_SS: s += sprintf( s, \"ss:\" ); break;\n\t}\n\n\ts += sprintf( s, \"[\" );\n\tif( address_size == 2 ) {\n\t\tif ((rm & 7) == 4)\n\t\t\ts = handle_sib_byte( s, mod );\n\t\telse if ((rm & 7) == 5 && mod == 0) {\n\t\t\tdisp32 = _FETCHD32();\n\t\t\ts += sprintf( s, \"rip%s\", shexstring(disp32, 0, TRUE) );\n\t\t} else\n\t\t\ts += sprintf( s, \"%s\", i386_reg[2][rm]);\n\t\tif( mod == 1 ) {\n\t\t\tdisp8 = _FETCHD();\n\t\t\tif (disp8 != 0)\n\t\t\t\ts += sprintf( s, \"%s\", shexstring((INT32)disp8, 0, TRUE) );\n\t\t} else if( mod == 2 ) {\n\t\t\tdisp32 = _FETCHD32();\n\t\t\tif (disp32 != 0)\n\t\t\t\ts += sprintf( s, \"%s\", shexstring(disp32, 0, TRUE) );\n\t\t}\n\t} else if (address_size == 1) {\n\t\tif ((rm & 7) == 4)\n\t\t\ts = handle_sib_byte( s, mod );\n\t\telse if ((rm & 7) == 5 && mod == 0) {\n\t\t\tdisp32 = _FETCHD32();\n\t\t\tif (curmode == 64)\n\t\t\t\ts += sprintf( s, \"eip%s\", shexstring(disp32, 0, TRUE) );\n\t\t\telse\n\t\t\t\ts += sprintf( s, \"%s\", hexstring(disp32, 0) );\n\t\t} else\n\t\t\ts += sprintf( s, \"%s\", i386_reg[1][rm]);\n\t\tif( mod == 1 ) {\n\t\t\tdisp8 = _FETCHD();\n\t\t\tif (disp8 != 0)\n\t\t\t\ts += sprintf( s, \"%s\", shexstring((INT32)disp8, 0, TRUE) );\n\t\t} else if( mod == 2 ) {\n\t\t\tdisp32 = _FETCHD32();\n\t\t\tif (disp32 != 0)\n\t\t\t\ts += sprintf( s, \"%s\", shexstring(disp32, 0, TRUE) );\n\t\t}\n\t} else {\n\t\tswitch( rm )\n\t\t{\n\t\t\tcase 0: s += sprintf( s, \"bx+si\" ); break;\n\t\t\tcase 1: s += sprintf( s, \"bx+di\" ); break;\n\t\t\tcase 2: s += sprintf( s, \"bp+si\" ); break;\n\t\t\tcase 3: s += sprintf( s, \"bp+di\" ); break;\n\t\t\tcase 4: s += sprintf( s, \"si\" ); break;\n\t\t\tcase 5: s += sprintf( s, \"di\" ); break;\n\t\t\tcase 6:\n\t\t\t\tif( mod == 0 ) {\n\t\t\t\t\tdisp16 = _FETCHD16();\n\t\t\t\t\ts += sprintf( s, \"%s\", hexstring((unsigned) (UINT16) disp16, 0) );\n\t\t\t\t} else {\n\t\t\t\t\ts += sprintf( s, \"bp\" );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 7: s += sprintf( s, \"bx\" ); break;\n\t\t}\n\t\tif( mod == 1 ) {\n\t\t\tdisp8 = _FETCHD();\n\t\t\tif (disp8 != 0)\n\t\t\t\ts += sprintf( s, \"%s\", shexstring((INT32)disp8, 0, TRUE) );\n\t\t} else if( mod == 2 ) {\n\t\t\tdisp16 = _FETCHD16();\n\t\t\tif (disp16 != 0)\n\t\t\t\ts += sprintf( s, \"%s\", shexstring((INT32)disp16, 0, TRUE) );\n\t\t}\n\t}\n\ts += sprintf( s, \"]\" );\n}\n\nstatic char* handle_param(char* s, UINT32 param)\n{\n\tUINT8 i8;\n\tUINT16 i16;\n\tUINT32 i32;\n\tUINT16 ptr;\n\tUINT32 addr;\n\tINT8 d8;\n\tINT16 d16;\n\tINT32 d32;\n\n\tswitch(param)\n\t{\n\t\tcase PARAM_REG:\n\t\t\ts += sprintf( s, \"%s\", i386_reg[operand_size][MODRM_REG1 | regex] );\n\t\t\tbreak;\n\n\t\tcase PARAM_REG8:\n\t\t\ts += sprintf( s, \"%s\", (rex ? i386_reg8rex : i386_reg8)[MODRM_REG1 | regex] );\n\t\t\tbreak;\n\n\t\tcase PARAM_REG16:\n\t\t\ts += sprintf( s, \"%s\", i386_reg[0][MODRM_REG1 | regex] );\n\t\t\tbreak;\n\n\t\tcase PARAM_REG32:\n\t\t\ts += sprintf( s, \"%s\", i386_reg[1][MODRM_REG1 | regex] );\n\t\t\tbreak;\n\n\t\tcase PARAM_REG3264:\n\t\t\ts += sprintf( s, \"%s\", i386_reg[(operand_size == 2) ? 2 : 1][MODRM_REG1 | regex] );\n\t\t\tbreak;\n\n\t\tcase PARAM_MMX:\n\t\t\tif (pre0f == 0x66 || pre0f == 0xf2 || pre0f == 0xf3)\n\t\t\t\ts += sprintf( s, \"xmm%d\", MODRM_REG1 | regex );\n\t\t\telse\n\t\t\t\ts += sprintf( s, \"mm%d\", MODRM_REG1 | regex );\n\t\t\tbreak;\n\n\t\tcase PARAM_MMX2:\n\t\t\tif (pre0f == 0x66 || pre0f == 0xf2 || pre0f == 0xf3)\n\t\t\t\ts += sprintf( s, \"xmm%d\", MODRM_REG2 | regex );\n\t\t\telse\n\t\t\t\ts += sprintf( s, \"mm%d\", MODRM_REG2 | regex );\n\t\t\tbreak;\n\n\t\tcase PARAM_XMM:\n\t\t\ts += sprintf( s, \"xmm%d\", MODRM_REG1 | regex );\n\t\t\tbreak;\n\n\t\tcase PARAM_REGORXMM:\n\t\t\tif (pre0f != 0xf2 && pre0f != 0xf3)\n\t\t\t\ts += sprintf( s, \"xmm%d\", MODRM_REG1 | regex );\n\t\t\telse\n\t\t\t\ts += sprintf( s, \"%s\", i386_reg[(operand_size == 2) ? 2 : 1][MODRM_REG1 | regex] );\n\t\t\tbreak;\n\n\t\tcase PARAM_REG2_32:\n\t\t\ts += sprintf( s, \"%s\", i386_reg[1][MODRM_REG2 | rmex] );\n\t\t\tbreak;\n\n\t\tcase PARAM_RM:\n\t\tcase PARAM_RMPTR:\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\ts += sprintf( s, \"%s\", i386_reg[operand_size][MODRM_REG2 | rmex] );\n\t\t\t} else {\n\t\t\t\tif (param == PARAM_RMPTR)\n\t\t\t\t{\n\t\t\t\t\tif( operand_size == 2 )\n\t\t\t\t\t\ts += sprintf( s, \"qword ptr \" );\n\t\t\t\t\telse if (operand_size == 1)\n\t\t\t\t\t\ts += sprintf( s, \"dword ptr \" );\n\t\t\t\t\telse\n\t\t\t\t\t\ts += sprintf( s, \"word ptr \" );\n\t\t\t\t}\n\t\t\t\ts += sprintf( s, \"%s\", modrm_string );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_RM8:\n\t\tcase PARAM_RMPTR8:\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\ts += sprintf( s, \"%s\", (rex ? i386_reg8rex : i386_reg8)[MODRM_REG2 | rmex] );\n\t\t\t} else {\n\t\t\t\tif (param == PARAM_RMPTR8)\n\t\t\t\t\ts += sprintf( s, \"byte ptr \" );\n\t\t\t\ts += sprintf( s, \"%s\", modrm_string );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_RM16:\n\t\tcase PARAM_RMPTR16:\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\ts += sprintf( s, \"%s\", i386_reg[0][MODRM_REG2 | rmex] );\n\t\t\t} else {\n\t\t\t\tif (param == PARAM_RMPTR16)\n\t\t\t\t\ts += sprintf( s, \"word ptr \" );\n\t\t\t\ts += sprintf( s, \"%s\", modrm_string );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_RM32:\n\t\tcase PARAM_RMPTR32:\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\ts += sprintf( s, \"%s\", i386_reg[1][MODRM_REG2 | rmex] );\n\t\t\t} else {\n\t\t\t\tif (param == PARAM_RMPTR32)\n\t\t\t\t\ts += sprintf( s, \"dword ptr \" );\n\t\t\t\ts += sprintf( s, \"%s\", modrm_string );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_RMXMM:\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tif (pre0f != 0xf2 && pre0f != 0xf3)\n\t\t\t\t\ts += sprintf( s, \"xmm%d\", MODRM_REG2 | rmex );\n\t\t\t\telse\n\t\t\t\t\ts += sprintf( s, \"%s\", i386_reg[(operand_size == 2) ? 2 : 1][MODRM_REG2 | rmex] );\n\t\t\t} else {\n\t\t\t\tif (param == PARAM_RMPTR32)\n\t\t\t\t\ts += sprintf( s, \"dword ptr \" );\n\t\t\t\ts += sprintf( s, \"%s\", modrm_string );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_M64:\n\t\tcase PARAM_M64PTR:\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\ts += sprintf( s, \"???\" );\n\t\t\t} else {\n\t\t\t\tif (param == PARAM_M64PTR)\n\t\t\t\t\ts += sprintf( s, \"qword ptr \" );\n\t\t\t\ts += sprintf( s, \"%s\", modrm_string );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_MMXM:\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tif (pre0f == 0x66 || pre0f == 0xf2 || pre0f == 0xf3)\n\t\t\t\t\ts += sprintf( s, \"xmm%d\", MODRM_REG2 | rmex );\n\t\t\t\telse\n\t\t\t\t\ts += sprintf( s, \"mm%d\", MODRM_REG2 | rmex );\n\t\t\t} else {\n\t\t\t\ts += sprintf( s, \"%s\", modrm_string );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_XMMM:\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\ts += sprintf( s, \"xmm%d\", MODRM_REG2 | rmex );\n\t\t\t} else {\n\t\t\t\ts += sprintf( s, \"%s\", modrm_string );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_I4:\n\t\t\ti8 = _FETCHD();\n\t\t\ts += sprintf( s, \"%d\", i8 & 0x0f );\n\t\t\tbreak;\n\n\t\tcase PARAM_I8:\n\t\t\ti8 = _FETCHD();\n\t\t\ts += sprintf( s, \"%s\", shexstring((INT8)i8, 0, FALSE) );\n\t\t\tbreak;\n\n\t\tcase PARAM_I16:\n\t\t\ti16 = _FETCHD16();\n\t\t\ts += sprintf( s, \"%s\", shexstring((INT16)i16, 0, FALSE) );\n\t\t\tbreak;\n\n\t\tcase PARAM_UI8:\n\t\t\ti8 = _FETCHD();\n\t\t\ts += sprintf( s, \"%s\", shexstring((UINT8)i8, 0, FALSE) );\n\t\t\tbreak;\n\n\t\tcase PARAM_UI16:\n\t\t\ti16 = _FETCHD16();\n\t\t\ts += sprintf( s, \"%s\", shexstring((UINT16)i16, 0, FALSE) );\n\t\t\tbreak;\n\n\t\tcase PARAM_IMM64:\n\t\t\tif (operand_size == 2) {\n\t\t\t\tUINT32 lo32 = _FETCHD32();\n\t\t\t\ti32 = _FETCHD32();\n\t\t\t\ts += sprintf( s, \"%s\", hexstring64(lo32, i32) );\n\t\t\t} else if( operand_size ) {\n\t\t\t\ti32 = _FETCHD32();\n\t\t\t\ts += sprintf( s, \"%s\", hexstring(i32, 0) );\n\t\t\t} else {\n\t\t\t\ti16 = _FETCHD16();\n\t\t\t\ts += sprintf( s, \"%s\", hexstring(i16, 0) );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_IMM:\n\t\t\tif( operand_size ) {\n\t\t\t\ti32 = _FETCHD32();\n\t\t\t\ts += sprintf( s, \"%s\", hexstring(i32, 0) );\n\t\t\t} else {\n\t\t\t\ti16 = _FETCHD16();\n\t\t\t\ts += sprintf( s, \"%s\", hexstring(i16, 0) );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_ADDR:\n\t\t\tif( operand_size ) {\n\t\t\t\taddr = _FETCHD32();\n\t\t\t\tptr = _FETCHD16();\n\t\t\t\ts += sprintf( s, \"%s:\", hexstring(ptr, 4) );\n\t\t\t\ts += sprintf( s, \"%s\", hexstring(addr, 0) );\n\t\t\t} else {\n\t\t\t\taddr = _FETCHD16();\n\t\t\t\tptr = _FETCHD16();\n\t\t\t\ts += sprintf( s, \"%s:\", hexstring(ptr, 4) );\n\t\t\t\ts += sprintf( s, \"%s\", hexstring(addr, 0) );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_REL:\n\t\t\tif( operand_size ) {\n\t\t\t\td32 = _FETCHD32();\n\t\t\t\ts += sprintf( s, \"%s\", hexstringpc(pc + d32) );\n\t\t\t} else {\n\t\t\t\t/* make sure to keep the relative offset within the segment */\n\t\t\t\td16 = _FETCHD16();\n\t\t\t\ts += sprintf( s, \"%s\", hexstringpc((pc & 0xFFFF0000) | ((pc + d16) & 0x0000FFFF)) );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_REL8:\n\t\t\td8 = _FETCHD();\n\t\t\ts += sprintf( s, \"%s\", hexstringpc(pc + d8) );\n\t\t\tbreak;\n\n\t\tcase PARAM_MEM_OFFS:\n\t\t\tswitch(segment)\n\t\t\t{\n\t\t\t\tcase SEG_CS: s += sprintf( s, \"cs:\" ); break;\n\t\t\t\tcase SEG_DS: s += sprintf( s, \"ds:\" ); break;\n\t\t\t\tcase SEG_ES: s += sprintf( s, \"es:\" ); break;\n\t\t\t\tcase SEG_FS: s += sprintf( s, \"fs:\" ); break;\n\t\t\t\tcase SEG_GS: s += sprintf( s, \"gs:\" ); break;\n\t\t\t\tcase SEG_SS: s += sprintf( s, \"ss:\" ); break;\n\t\t\t}\n\n\t\t\tif( address_size ) {\n\t\t\t\ti32 = _FETCHD32();\n\t\t\t\ts += sprintf( s, \"[%s]\", hexstring(i32, 0) );\n\t\t\t} else {\n\t\t\t\ti16 = _FETCHD16();\n\t\t\t\ts += sprintf( s, \"[%s]\", hexstring(i16, 0) );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_PREIMP:\n\t\t\tswitch(segment)\n\t\t\t{\n\t\t\t\tcase SEG_CS: s += sprintf( s, \"cs:\" ); break;\n\t\t\t\tcase SEG_DS: s += sprintf( s, \"ds:\" ); break;\n\t\t\t\tcase SEG_ES: s += sprintf( s, \"es:\" ); break;\n\t\t\t\tcase SEG_FS: s += sprintf( s, \"fs:\" ); break;\n\t\t\t\tcase SEG_GS: s += sprintf( s, \"gs:\" ); break;\n\t\t\t\tcase SEG_SS: s += sprintf( s, \"ss:\" ); break;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_SREG:\n\t\t\ts += sprintf( s, \"%s\", i386_sreg[MODRM_REG1] );\n\t\t\tbreak;\n\n\t\tcase PARAM_CREG:\n\t\t\ts += sprintf( s, \"cr%d\", MODRM_REG1 | regex );\n\t\t\tbreak;\n\n\t\tcase PARAM_TREG:\n\t\t\ts += sprintf( s, \"tr%d\", MODRM_REG1 | regex );\n\t\t\tbreak;\n\n\t\tcase PARAM_DREG:\n\t\t\ts += sprintf( s, \"dr%d\", MODRM_REG1 | regex );\n\t\t\tbreak;\n\n\t\tcase PARAM_1:\n\t\t\ts += sprintf( s, \"1\" );\n\t\t\tbreak;\n\n\t\tcase PARAM_DX:\n\t\t\ts += sprintf( s, \"dx\" );\n\t\t\tbreak;\n\n\t\tcase PARAM_XMM0:\n\t\t\ts += sprintf( s, \"xmm0\" );\n\t\t\tbreak;\n\n\t\tcase PARAM_AL: s += sprintf( s, \"al\" ); break;\n\t\tcase PARAM_CL: s += sprintf( s, \"cl\" ); break;\n\t\tcase PARAM_DL: s += sprintf( s, \"dl\" ); break;\n\t\tcase PARAM_BL: s += sprintf( s, \"bl\" ); break;\n\t\tcase PARAM_AH: s += sprintf( s, \"ah\" ); break;\n\t\tcase PARAM_CH: s += sprintf( s, \"ch\" ); break;\n\t\tcase PARAM_DH: s += sprintf( s, \"dh\" ); break;\n\t\tcase PARAM_BH: s += sprintf( s, \"bh\" ); break;\n\n\t\tcase PARAM_EAX: s += sprintf( s, \"%s\", i386_reg[operand_size][0 | rmex] ); break;\n\t\tcase PARAM_ECX: s += sprintf( s, \"%s\", i386_reg[operand_size][1 | rmex] ); break;\n\t\tcase PARAM_EDX: s += sprintf( s, \"%s\", i386_reg[operand_size][2 | rmex] ); break;\n\t\tcase PARAM_EBX: s += sprintf( s, \"%s\", i386_reg[operand_size][3 | rmex] ); break;\n\t\tcase PARAM_ESP: s += sprintf( s, \"%s\", i386_reg[operand_size][4 | rmex] ); break;\n\t\tcase PARAM_EBP: s += sprintf( s, \"%s\", i386_reg[operand_size][5 | rmex] ); break;\n\t\tcase PARAM_ESI: s += sprintf( s, \"%s\", i386_reg[operand_size][6 | rmex] ); break;\n\t\tcase PARAM_EDI: s += sprintf( s, \"%s\", i386_reg[operand_size][7 | rmex] ); break;\n\t}\n\treturn s;\n}\n\nstatic void handle_fpu(char *s, UINT8 op1, UINT8 op2)\n{\n\tswitch (op1 & 0x7)\n\t{\n\t\tcase 0:     // Group D8\n\t\t{\n\t\t\tif (op2 < 0xc0)\n\t\t\t{\n\t\t\t\tpc--;       // adjust fetch pointer, so modrm byte read again\n\t\t\t\topcode_ptr--;\n\t\t\t\thandle_modrm( modrm_string );\n\t\t\t\tswitch ((op2 >> 3) & 0x7)\n\t\t\t\t{\n\t\t\t\t\tcase 0: sprintf(s, \"fadd    dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 1: sprintf(s, \"fmul    dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 2: sprintf(s, \"fcom    dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 3: sprintf(s, \"fcomp   dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 4: sprintf(s, \"fsub    dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 5: sprintf(s, \"fsubr   dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 6: sprintf(s, \"fdiv    dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 7: sprintf(s, \"fdivr   dword ptr %s\", modrm_string); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tswitch ((op2 >> 3) & 0x7)\n\t\t\t\t{\n\t\t\t\t\tcase 0: sprintf(s, \"fadd    st(0),st(%d)\", op2 & 0x7); break;\n\t\t\t\t\tcase 1: sprintf(s, \"fmul    st(0),st(%d)\", op2 & 0x7); break;\n\t\t\t\t\tcase 2: sprintf(s, \"fcom    st(0),st(%d)\", op2 & 0x7); break;\n\t\t\t\t\tcase 3: sprintf(s, \"fcomp   st(0),st(%d)\", op2 & 0x7); break;\n\t\t\t\t\tcase 4: sprintf(s, \"fsub    st(0),st(%d)\", op2 & 0x7); break;\n\t\t\t\t\tcase 5: sprintf(s, \"fsubr   st(0),st(%d)\", op2 & 0x7); break;\n\t\t\t\t\tcase 6: sprintf(s, \"fdiv    st(0),st(%d)\", op2 & 0x7); break;\n\t\t\t\t\tcase 7: sprintf(s, \"fdivr   st(0),st(%d)\", op2 & 0x7); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 1:     // Group D9\n\t\t{\n\t\t\tif (op2 < 0xc0)\n\t\t\t{\n\t\t\t\tpc--;       // adjust fetch pointer, so modrm byte read again\n\t\t\t\topcode_ptr--;\n\t\t\t\thandle_modrm( modrm_string );\n\t\t\t\tswitch ((op2 >> 3) & 0x7)\n\t\t\t\t{\n\t\t\t\t\tcase 0: sprintf(s, \"fld     dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 1: sprintf(s, \"??? (FPU)\"); break;\n\t\t\t\t\tcase 2: sprintf(s, \"fst     dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 3: sprintf(s, \"fstp    dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 4: sprintf(s, \"fldenv  word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 5: sprintf(s, \"fldcw   word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 6: sprintf(s, \"fstenv  word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 7: sprintf(s, \"fstcw   word ptr %s\", modrm_string); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tswitch (op2 & 0x3f)\n\t\t\t\t{\n\t\t\t\t\tcase 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07:\n\t\t\t\t\t\tsprintf(s, \"fld     st(0),st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f:\n\t\t\t\t\t\tsprintf(s, \"fxch    st(0),st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x10: sprintf(s, \"fnop\"); break;\n\t\t\t\t\tcase 0x20: sprintf(s, \"fchs\"); break;\n\t\t\t\t\tcase 0x21: sprintf(s, \"fabs\"); break;\n\t\t\t\t\tcase 0x24: sprintf(s, \"ftst\"); break;\n\t\t\t\t\tcase 0x25: sprintf(s, \"fxam\"); break;\n\t\t\t\t\tcase 0x28: sprintf(s, \"fld1\"); break;\n\t\t\t\t\tcase 0x29: sprintf(s, \"fldl2t\"); break;\n\t\t\t\t\tcase 0x2a: sprintf(s, \"fldl2e\"); break;\n\t\t\t\t\tcase 0x2b: sprintf(s, \"fldpi\"); break;\n\t\t\t\t\tcase 0x2c: sprintf(s, \"fldlg2\"); break;\n\t\t\t\t\tcase 0x2d: sprintf(s, \"fldln2\"); break;\n\t\t\t\t\tcase 0x2e: sprintf(s, \"fldz\"); break;\n\t\t\t\t\tcase 0x30: sprintf(s, \"f2xm1\"); break;\n\t\t\t\t\tcase 0x31: sprintf(s, \"fyl2x\"); break;\n\t\t\t\t\tcase 0x32: sprintf(s, \"fptan\"); break;\n\t\t\t\t\tcase 0x33: sprintf(s, \"fpatan\"); break;\n\t\t\t\t\tcase 0x34: sprintf(s, \"fxtract\"); break;\n\t\t\t\t\tcase 0x35: sprintf(s, \"fprem1\"); break;\n\t\t\t\t\tcase 0x36: sprintf(s, \"fdecstp\"); break;\n\t\t\t\t\tcase 0x37: sprintf(s, \"fincstp\"); break;\n\t\t\t\t\tcase 0x38: sprintf(s, \"fprem\"); break;\n\t\t\t\t\tcase 0x39: sprintf(s, \"fyl2xp1\"); break;\n\t\t\t\t\tcase 0x3a: sprintf(s, \"fsqrt\"); break;\n\t\t\t\t\tcase 0x3b: sprintf(s, \"fsincos\"); break;\n\t\t\t\t\tcase 0x3c: sprintf(s, \"frndint\"); break;\n\t\t\t\t\tcase 0x3d: sprintf(s, \"fscale\"); break;\n\t\t\t\t\tcase 0x3e: sprintf(s, \"fsin\"); break;\n\t\t\t\t\tcase 0x3f: sprintf(s, \"fcos\"); break;\n\n\t\t\t\t\tdefault: sprintf(s, \"??? (FPU)\"); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 2:     // Group DA\n\t\t{\n\t\t\tif (op2 < 0xc0)\n\t\t\t{\n\t\t\t\tpc--;       // adjust fetch pointer, so modrm byte read again\n\t\t\t\topcode_ptr--;\n\t\t\t\thandle_modrm( modrm_string );\n\t\t\t\tswitch ((op2 >> 3) & 0x7)\n\t\t\t\t{\n\t\t\t\t\tcase 0: sprintf(s, \"fiadd   dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 1: sprintf(s, \"fimul   dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 2: sprintf(s, \"ficom   dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 3: sprintf(s, \"ficomp  dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 4: sprintf(s, \"fisub   dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 5: sprintf(s, \"fisubr  dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 6: sprintf(s, \"fidiv   dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 7: sprintf(s, \"fidivr  dword ptr %s\", modrm_string); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tswitch (op2 & 0x3f)\n\t\t\t\t{\n\t\t\t\t\tcase 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07:\n\t\t\t\t\t\tsprintf(s, \"fcmovb  st(0),st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f:\n\t\t\t\t\t\tsprintf(s, \"fcmove  st(0),st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17:\n\t\t\t\t\t\tsprintf(s, \"fcmovbe st(0),st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x18: case 0x19: case 0x1a: case 0x1b: case 0x1c: case 0x1d: case 0x1e: case 0x1f:\n\t\t\t\t\t\tsprintf(s, \"fcmovu  st(0),st(%d)\", op2 & 0x7); break;\n\t\t\t\t\tcase 0x29:\n\t\t\t\t\t\tsprintf(s, \"fucompp\"); break;\n\n\t\t\t\t\tdefault: sprintf(s, \"??? (FPU)\"); break;\n\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 3:     // Group DB\n\t\t{\n\t\t\tif (op2 < 0xc0)\n\t\t\t{\n\t\t\t\tpc--;       // adjust fetch pointer, so modrm byte read again\n\t\t\t\topcode_ptr--;\n\t\t\t\thandle_modrm( modrm_string );\n\t\t\t\tswitch ((op2 >> 3) & 0x7)\n\t\t\t\t{\n\t\t\t\t\tcase 0: sprintf(s, \"fild    dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 1: sprintf(s, \"fisttp  dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 2: sprintf(s, \"fist    dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 3: sprintf(s, \"fistp   dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 4: sprintf(s, \"??? (FPU)\"); break;\n\t\t\t\t\tcase 5: sprintf(s, \"fld     tword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 6: sprintf(s, \"??? (FPU)\"); break;\n\t\t\t\t\tcase 7: sprintf(s, \"fstp    tword ptr %s\", modrm_string); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tswitch (op2 & 0x3f)\n\t\t\t\t{\n\t\t\t\t\tcase 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07:\n\t\t\t\t\t\tsprintf(s, \"fcmovnb st(0),st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f:\n\t\t\t\t\t\tsprintf(s, \"fcmovne st(0),st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17:\n\t\t\t\t\t\tsprintf(s, \"fcmovnbe st(0),st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x18: case 0x19: case 0x1a: case 0x1b: case 0x1c: case 0x1d: case 0x1e: case 0x1f:\n\t\t\t\t\t\tsprintf(s, \"fcmovnu st(0),st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x22: sprintf(s, \"fclex\"); break;\n\t\t\t\t\tcase 0x23: sprintf(s, \"finit\"); break;\n\n\t\t\t\t\tcase 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f:\n\t\t\t\t\t\tsprintf(s, \"fucomi  st(0),st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37:\n\t\t\t\t\t\tsprintf(s, \"fcomi   st(0),st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tdefault: sprintf(s, \"??? (FPU)\"); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 4:     // Group DC\n\t\t{\n\t\t\tif (op2 < 0xc0)\n\t\t\t{\n\t\t\t\tpc--;       // adjust fetch pointer, so modrm byte read again\n\t\t\t\topcode_ptr--;\n\t\t\t\thandle_modrm( modrm_string );\n\t\t\t\tswitch ((op2 >> 3) & 0x7)\n\t\t\t\t{\n\t\t\t\t\tcase 0: sprintf(s, \"fadd    qword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 1: sprintf(s, \"fmul    qword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 2: sprintf(s, \"fcom    qword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 3: sprintf(s, \"fcomp   qword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 4: sprintf(s, \"fsub    qword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 5: sprintf(s, \"fsubr   qword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 6: sprintf(s, \"fdiv    qword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 7: sprintf(s, \"fdivr   qword ptr %s\", modrm_string); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tswitch (op2 & 0x3f)\n\t\t\t\t{\n\t\t\t\t\tcase 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07:\n\t\t\t\t\t\tsprintf(s, \"fadd    st(%d),st(0)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f:\n\t\t\t\t\t\tsprintf(s, \"fmul    st(%d),st(0)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27:\n\t\t\t\t\t\tsprintf(s, \"fsubr   st(%d),st(0)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f:\n\t\t\t\t\t\tsprintf(s, \"fsub    st(%d),st(0)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37:\n\t\t\t\t\t\tsprintf(s, \"fdivr   st(%d),st(0)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x38: case 0x39: case 0x3a: case 0x3b: case 0x3c: case 0x3d: case 0x3e: case 0x3f:\n\t\t\t\t\t\tsprintf(s, \"fdiv    st(%d),st(0)\", op2 & 0x7); break;\n\n\t\t\t\t\tdefault: sprintf(s, \"??? (FPU)\"); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 5:     // Group DD\n\t\t{\n\t\t\tif (op2 < 0xc0)\n\t\t\t{\n\t\t\t\tpc--;       // adjust fetch pointer, so modrm byte read again\n\t\t\t\topcode_ptr--;\n\t\t\t\thandle_modrm( modrm_string );\n\t\t\t\tswitch ((op2 >> 3) & 0x7)\n\t\t\t\t{\n\t\t\t\t\tcase 0: sprintf(s, \"fld     qword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 1: sprintf(s, \"fisttp  qword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 2: sprintf(s, \"fst     qword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 3: sprintf(s, \"fstp    qword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 4: sprintf(s, \"frstor  %s\", modrm_string); break;\n\t\t\t\t\tcase 5: sprintf(s, \"??? (FPU)\"); break;\n\t\t\t\t\tcase 6: sprintf(s, \"fsave   %s\", modrm_string); break;\n\t\t\t\t\tcase 7: sprintf(s, \"fstsw   word ptr %s\", modrm_string); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tswitch (op2 & 0x3f)\n\t\t\t\t{\n\t\t\t\t\tcase 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07:\n\t\t\t\t\t\tsprintf(s, \"ffree   st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17:\n\t\t\t\t\t\tsprintf(s, \"fst     st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x18: case 0x19: case 0x1a: case 0x1b: case 0x1c: case 0x1d: case 0x1e: case 0x1f:\n\t\t\t\t\t\tsprintf(s, \"fstp    st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27:\n\t\t\t\t\t\tsprintf(s, \"fucom   st(%d), st(0)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f:\n\t\t\t\t\t\tsprintf(s, \"fucomp  st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tdefault: sprintf(s, \"??? (FPU)\"); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 6:     // Group DE\n\t\t{\n\t\t\tif (op2 < 0xc0)\n\t\t\t{\n\t\t\t\tpc--;       // adjust fetch pointer, so modrm byte read again\n\t\t\t\topcode_ptr--;\n\t\t\t\thandle_modrm( modrm_string );\n\t\t\t\tswitch ((op2 >> 3) & 0x7)\n\t\t\t\t{\n\t\t\t\t\tcase 0: sprintf(s, \"fiadd   word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 1: sprintf(s, \"fimul   word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 2: sprintf(s, \"ficom   word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 3: sprintf(s, \"ficomp  word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 4: sprintf(s, \"fisub   word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 5: sprintf(s, \"fisubr  word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 6: sprintf(s, \"fidiv   word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 7: sprintf(s, \"fidivr  word ptr %s\", modrm_string); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tswitch (op2 & 0x3f)\n\t\t\t\t{\n\t\t\t\t\tcase 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07:\n\t\t\t\t\t\tsprintf(s, \"faddp   st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f:\n\t\t\t\t\t\tsprintf(s, \"fmulp   st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x19: sprintf(s, \"fcompp\"); break;\n\n\t\t\t\t\tcase 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27:\n\t\t\t\t\t\tsprintf(s, \"fsubrp  st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f:\n\t\t\t\t\t\tsprintf(s, \"fsubp   st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37:\n\t\t\t\t\t\tsprintf(s, \"fdivrp  st(%d), st(0)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x38: case 0x39: case 0x3a: case 0x3b: case 0x3c: case 0x3d: case 0x3e: case 0x3f:\n\t\t\t\t\t\tsprintf(s, \"fdivp   st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tdefault: sprintf(s, \"??? (FPU)\"); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 7:     // Group DF\n\t\t{\n\t\t\tif (op2 < 0xc0)\n\t\t\t{\n\t\t\t\tpc--;       // adjust fetch pointer, so modrm byte read again\n\t\t\t\topcode_ptr--;\n\t\t\t\thandle_modrm( modrm_string );\n\t\t\t\tswitch ((op2 >> 3) & 0x7)\n\t\t\t\t{\n\t\t\t\t\tcase 0: sprintf(s, \"fild    word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 1: sprintf(s, \"fisttp  word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 2: sprintf(s, \"fist    word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 3: sprintf(s, \"fistp   word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 4: sprintf(s, \"fbld    %s\", modrm_string); break;\n\t\t\t\t\tcase 5: sprintf(s, \"fild    qword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 6: sprintf(s, \"fbstp   %s\", modrm_string); break;\n\t\t\t\t\tcase 7: sprintf(s, \"fistp   qword ptr %s\", modrm_string); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tswitch (op2 & 0x3f)\n\t\t\t\t{\n\t\t\t\t\tcase 0x20: sprintf(s, \"fstsw   ax\"); break;\n\n\t\t\t\t\tcase 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f:\n\t\t\t\t\t\tsprintf(s, \"fucomip st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37:\n\t\t\t\t\t\tsprintf(s, \"fcomip  st(%d),st(0)\", op2 & 0x7); break;\n\n\t\t\t\t\tdefault: sprintf(s, \"??? (FPU)\"); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\nstatic void decode_opcode(char *s, const I386_OPCODE *op, UINT8 op1)\n{\n\tint i;\n\tUINT8 op2;\n\n\tif ((op->flags & SPECIAL64) && (address_size == 2))\n\t\top = &x64_opcode_alt[op->flags >> 24];\n\n\tswitch( op->flags & FLAGS_MASK )\n\t{\n\t\tcase ISREX:\n\t\t\tif (curmode == 64)\n\t\t\t{\n\t\t\t\trex = op1;\n\t\t\t\toperand_size = (op1 & 8) ? 2 : 1;\n\t\t\t\tregex = (op1 << 1) & 8;\n\t\t\t\tsibex = (op1 << 2) & 8;\n\t\t\t\trmex = (op1 << 3) & 8;\n\t\t\t\top2 = _FETCH();\n\t\t\t\tdecode_opcode( s, &i386_opcode_table1[op2], op1 );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase OP_SIZE:\n\t\t\trex = regex = sibex = rmex = 0;\n\t\t\tif (operand_size < 2 && operand_prefix == 0)\n\t\t\t{\n\t\t\t\toperand_size ^= 1;\n\t\t\t\toperand_prefix = 1;\n\t\t\t}\n\t\t\top2 = _FETCH();\n\t\t\tdecode_opcode( s, &i386_opcode_table1[op2], op2 );\n\t\t\treturn;\n\n\t\tcase ADDR_SIZE:\n\t\t\trex = regex = sibex = rmex = 0;\n\t\t\tif(address_prefix == 0)\n\t\t\t{\n\t\t\t\tif (curmode != 64)\n\t\t\t\t\taddress_size ^= 1;\n\t\t\t\telse\n\t\t\t\t\taddress_size ^= 3;\n\t\t\t\taddress_prefix = 1;\n\t\t\t}\n\t\t\top2 = _FETCH();\n\t\t\tdecode_opcode( s, &i386_opcode_table1[op2], op2 );\n\t\t\treturn;\n\n\t\tcase TWO_BYTE:\n\t\t\tif (&opcode_ptr[-2] >= opcode_ptr_base)\n\t\t\t\tpre0f = opcode_ptr[-2];\n\t\t\top2 = _FETCHD();\n\t\t\tdecode_opcode( s, &i386_opcode_table2[op2], op1 );\n\t\t\treturn;\n\n\t\tcase THREE_BYTE:\n\t\t\top2 = _FETCHD();\n\t\t\tif (opcode_ptr[-2] == 0x38)\n\t\t\t\tdecode_opcode( s, &i386_opcode_table0F38[op2], op1 );\n\t\t\telse\n\t\t\t\tdecode_opcode( s, &i386_opcode_table0F3A[op2], op1 );\n\t\t\treturn;\n\n\t\tcase SEG_CS:\n\t\tcase SEG_DS:\n\t\tcase SEG_ES:\n\t\tcase SEG_FS:\n\t\tcase SEG_GS:\n\t\tcase SEG_SS:\n\t\t\trex = regex = sibex = rmex = 0;\n\t\t\tsegment = op->flags;\n\t\t\top2 = _FETCH();\n\t\t\tdecode_opcode( s, &i386_opcode_table1[op2], op2 );\n\t\t\treturn;\n\n\t\tcase PREFIX:\n\t\t\top2 = _FETCH();\n\t\t\tif ((op2 != 0x0f) && (op2 != 0x90))\n\t\t\t\ts += sprintf( s, \"%-7s \", op->mnemonic );\n\t\t\tif ((op2 == 0x90) && !pre0f)\n\t\t\t\tpre0f = op1;\n\t\t\tdecode_opcode( s, &i386_opcode_table1[op2], op2 );\n\t\t\treturn;\n\n\t\tcase GROUP:\n\t\t\thandle_modrm( modrm_string );\n\t\t\tfor( i=0; i < ARRAY_LENGTH(group_op_table); i++ ) {\n\t\t\t\tif( strcmp(op->mnemonic, group_op_table[i].mnemonic) == 0 ) {\n\t\t\t\t\tif (op->flags & GROUP_MOD)\n\t\t\t\t\t\tdecode_opcode( s, &group_op_table[i].opcode[MODRM_MOD], op1 );\n\t\t\t\t\telse\n\t\t\t\t\t\tdecode_opcode( s, &group_op_table[i].opcode[MODRM_REG1], op1 );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tgoto handle_unknown;\n\n\t\tcase FPU:\n\t\t\top2 = _FETCHD();\n\t\t\thandle_fpu( s, op1, op2);\n\t\t\treturn;\n\n\t\tcase MODRM:\n\t\t\thandle_modrm( modrm_string );\n\t\t\tbreak;\n\t}\n\n\tif ((op->flags & ALWAYS64) && curmode == 64)\n\t\toperand_size = 2;\n\n\tif ((op->flags & VAR_NAME) && operand_size > 0)\n\t{\n\t\tconst char *mnemonic = op->mnemonic + strlen(op->mnemonic) + 1;\n\t\tif (operand_size == 2)\n\t\t\tmnemonic += strlen(mnemonic) + 1;\n\t\ts += sprintf( s, \"%-7s \", mnemonic );\n\t}\n\telse if (op->flags & VAR_NAME4)\n\t{\n\t\tconst char *mnemonic = op->mnemonic;\n\t\tint which = (pre0f == 0xf3) ? 3 : (pre0f == 0xf2) ? 2 : (pre0f == 0x66) ? 1 : 0;\n\t\twhile (which--)\n\t\t\tmnemonic += strlen(mnemonic) + 1;\n\t\ts += sprintf( s, \"%-7s \", mnemonic );\n\t}\n\telse\n\t\ts += sprintf( s, \"%-7s \", op->mnemonic );\n\tdasm_flags = op->dasm_flags;\n\n\tif( op->param1 != 0 ) {\n\t\ts = handle_param( s, op->param1 );\n\t}\n\n\tif( op->param2 != 0 ) {\n\t\ts += sprintf( s, \",\" );\n\t\ts = handle_param( s, op->param2 );\n\t}\n\n\tif( op->param3 != 0 ) {\n\t\ts += sprintf( s, \",\" );\n\t\ts = handle_param( s, op->param3 );\n\t}\n\treturn;\n\nhandle_unknown:\n\tsprintf(s, \"???\");\n}\n\nint i386_dasm_one_ex(char *buffer, UINT64 eip, const UINT8 *oprom, int mode)\n{\n\tUINT8 op;\n\n\topcode_ptr = opcode_ptr_base = oprom;\n\tswitch(mode)\n\t{\n\t\tcase 1: /* 8086/8088/80186/80188 */\n\t\t\taddress_size = 0;\n\t\t\toperand_size = 0;\n\t\t\tmax_length = 8; /* maximum without redundant prefixes - not enforced by chip */\n\t\t\tbreak;\n\t\tcase 2: /* 80286 */\n\t\t\taddress_size = 0;\n\t\t\toperand_size = 0;\n\t\t\tmax_length = 10;\n\t\t\tbreak;\n\t\tcase 16: /* 80386+ 16-bit code segment */\n\t\t\taddress_size = 0;\n\t\t\toperand_size = 0;\n\t\t\tmax_length = 15;\n\t\t\tbreak;\n\t\tcase 32: /* 80386+ 32-bit code segment */\n\t\t\taddress_size = 1;\n\t\t\toperand_size = 1;\n\t\t\tmax_length = 15;\n\t\t\tbreak;\n\t\tcase 64: /* x86_64 */\n\t\t\taddress_size = 2;\n\t\t\toperand_size = 1;\n\t\t\tmax_length = 15;\n\t\t\tbreak;\n\t}\n\tpc = eip;\n\tdasm_flags = 0;\n\tsegment = 0;\n\tcurmode = mode;\n\tpre0f = 0;\n\trex = regex = sibex = rmex = 0;\n\taddress_prefix = 0;\n\toperand_prefix = 0;\n\n\top = _FETCH();\n\n\tdecode_opcode( buffer, &i386_opcode_table1[op], op );\n\treturn (pc-eip) | dasm_flags | DASMFLAG_SUPPORTED;\n}\n\nint i386_dasm_one(char *buffer, offs_t eip, const UINT8 *oprom, int mode)\n{\n\treturn i386_dasm_one_ex(buffer, eip, oprom, mode);\n}\n\nCPU_DISASSEMBLE( x86_16 )\n{\n\treturn i386_dasm_one_ex(buffer, pc, oprom, 16);\n}\n\nCPU_DISASSEMBLE( x86_32 )\n{\n\treturn i386_dasm_one_ex(buffer, pc, oprom, 32);\n}\n\nCPU_DISASSEMBLE( x86_64 )\n{\n\treturn i386_dasm_one_ex(buffer, pc, oprom, 64);\n}\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386/i386op16.c",
    "content": "// license:BSD-3-Clause\n// copyright-holders:Ville Linde, Barry Rodewald, Carl, Phil Bennett\nstatic UINT16 I386OP(shift_rotate16)(UINT8 modrm, UINT32 value, UINT8 shift)\n{\n\tUINT32 src = value & 0xffff;\n\tUINT16 dst = value;\n\n\tif( shift == 0 ) {\n\t\tCYCLES_RM(modrm, 3, 7);\n\t} else if( shift == 1 ) {\n\t\tswitch( (modrm >> 3) & 0x7 )\n\t\t{\n\t\t\tcase 0:         /* ROL rm16, 1 */\n\t\t\t\tm_CF = (src & 0x8000) ? 1 : 0;\n\t\t\t\tdst = (src << 1) + m_CF;\n\t\t\t\tm_OF = ((src ^ dst) & 0x8000) ? 1 : 0;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 1:         /* ROR rm16, 1 */\n\t\t\t\tm_CF = (src & 0x1) ? 1 : 0;\n\t\t\t\tdst = (m_CF << 15) | (src >> 1);\n\t\t\t\tm_OF = ((src ^ dst) & 0x8000) ? 1 : 0;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 2:         /* RCL rm16, 1 */\n\t\t\t\tdst = (src << 1) + m_CF;\n\t\t\t\tm_CF = (src & 0x8000) ? 1 : 0;\n\t\t\t\tm_OF = ((src ^ dst) & 0x8000) ? 1 : 0;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 3:         /* RCR rm16, 1 */\n\t\t\t\tdst = (m_CF << 15) | (src >> 1);\n\t\t\t\tm_CF = src & 0x1;\n\t\t\t\tm_OF = ((src ^ dst) & 0x8000) ? 1 : 0;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 4:         /* SHL/SAL rm16, 1 */\n\t\t\tcase 6:\n\t\t\t\tdst = src << 1;\n\t\t\t\tm_CF = (src & 0x8000) ? 1 : 0;\n\t\t\t\tm_OF = (((m_CF << 15) ^ dst) & 0x8000) ? 1 : 0;\n\t\t\t\tSetSZPF16(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 5:         /* SHR rm16, 1 */\n\t\t\t\tdst = src >> 1;\n\t\t\t\tm_CF = src & 0x1;\n\t\t\t\tm_OF = (dst & 0x8000) ? 1 : 0;\n\t\t\t\tSetSZPF16(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 7:         /* SAR rm16, 1 */\n\t\t\t\tdst = (INT16)(src) >> 1;\n\t\t\t\tm_CF = src & 0x1;\n\t\t\t\tm_OF = 0;\n\t\t\t\tSetSZPF16(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t}\n\t} else {\n\t\tswitch( (modrm >> 3) & 0x7 )\n\t\t{\n\t\t\tcase 0:         /* ROL rm16, i8 */\n\t\t\t\tif(!(shift & 15))\n\t\t\t\t{\n\t\t\t\t\tif(shift & 16)\n\t\t\t\t\t{\n\t\t\t\t\t\tm_CF = src & 1;\n\t\t\t\t\t\tm_OF = (src & 1) ^ ((src >> 15) & 1);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tshift &= 15;\n\t\t\t\tdst = ((src & ((UINT16)0xffff >> shift)) << shift) |\n\t\t\t\t\t\t((src & ((UINT16)0xffff << (16-shift))) >> (16-shift));\n\t\t\t\tm_CF = dst & 0x1;\n\t\t\t\tm_OF = (dst & 1) ^ (dst >> 15);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 1:         /* ROR rm16, i8 */\n\t\t\t\tif(!(shift & 15))\n\t\t\t\t{\n\t\t\t\t\tif(shift & 16)\n\t\t\t\t\t{\n\t\t\t\t\t\tm_CF = (src >> 15) & 1;\n\t\t\t\t\t\tm_OF = ((src >> 15) & 1) ^ ((src >> 14) & 1);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tshift &= 15;\n\t\t\t\tdst = ((src & ((UINT16)0xffff << shift)) >> shift) |\n\t\t\t\t\t\t((src & ((UINT16)0xffff >> (16-shift))) << (16-shift));\n\t\t\t\tm_CF = (dst >> 15) & 1;\n\t\t\t\tm_OF = ((dst >> 15) ^ (dst >> 14)) & 1;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 2:         /* RCL rm16, i8 */\n\t\t\t\tshift %= 17;\n\t\t\t\tdst = ((src & ((UINT16)0xffff >> shift)) << shift) |\n\t\t\t\t\t\t((src & ((UINT16)0xffff << (17-shift))) >> (17-shift)) |\n\t\t\t\t\t\t(m_CF << (shift-1));\n\t\t\t\tif(shift) m_CF = (src >> (16-shift)) & 0x1;\n\t\t\t\tm_OF = m_CF ^ ((dst >> 15) & 1);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 3:         /* RCR rm16, i8 */\n\t\t\t\tshift %= 17;\n\t\t\t\tdst = ((src & ((UINT16)0xffff << shift)) >> shift) |\n\t\t\t\t\t\t((src & ((UINT16)0xffff >> (16-shift))) << (17-shift)) |\n\t\t\t\t\t\t(m_CF << (16-shift));\n\t\t\t\tif(shift) m_CF = (src >> (shift-1)) & 0x1;\n\t\t\t\tm_OF = ((dst >> 15) ^ (dst >> 14)) & 1;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 4:         /* SHL/SAL rm16, i8 */\n\t\t\tcase 6:\n\t\t\t\tshift &= 31;\n\t\t\t\tdst = src << shift;\n\t\t\t\tm_CF = (shift <= 16) && (src & (1 << (16-shift)));\n\t\t\t\tSetSZPF16(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 5:         /* SHR rm16, i8 */\n\t\t\t\tshift &= 31;\n\t\t\t\tdst = src >> shift;\n\t\t\t\tm_CF = (src & (1 << (shift-1))) ? 1 : 0;\n\t\t\t\tSetSZPF16(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 7:         /* SAR rm16, i8 */\n\t\t\t\tshift &= 31;\n\t\t\t\tdst = (INT16)src >> shift;\n\t\t\t\tm_CF = (src & (1 << (shift-1))) ? 1 : 0;\n\t\t\t\tSetSZPF16(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t}\n\n\t}\n\treturn dst;\n}\n\n\n\nstatic void I386OP(adc_rm16_r16)()      // Opcode 0x11\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = LOAD_RM16(modrm);\n\t\tdst = ADC16(dst, src, m_CF);\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = READ16(ea);\n\t\tdst = ADC16(dst, src, m_CF);\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(adc_r16_rm16)()      // Opcode 0x13\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM16(modrm);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = ADC16(dst, src, m_CF);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ16(ea);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = ADC16(dst, src, m_CF);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(adc_ax_i16)()        // Opcode 0x15\n{\n\tUINT16 src, dst;\n\tsrc = FETCH16();\n\tdst = REG16(AX);\n\tdst = ADC16(dst, src, m_CF);\n\tREG16(AX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(add_rm16_r16)()      // Opcode 0x01\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = LOAD_RM16(modrm);\n\t\tdst = ADD16(dst, src);\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = READ16(ea);\n\t\tdst = ADD16(dst, src);\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(add_r16_rm16)()      // Opcode 0x03\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM16(modrm);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = ADD16(dst, src);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ16(ea);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = ADD16(dst, src);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(add_ax_i16)()        // Opcode 0x05\n{\n\tUINT16 src, dst;\n\tsrc = FETCH16();\n\tdst = REG16(AX);\n\tdst = ADD16(dst, src);\n\tREG16(AX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(and_rm16_r16)()      // Opcode 0x21\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = LOAD_RM16(modrm);\n\t\tdst = AND16(dst, src);\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = READ16(ea);\n\t\tdst = AND16(dst, src);\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(and_r16_rm16)()      // Opcode 0x23\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM16(modrm);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = AND16(dst, src);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ16(ea);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = AND16(dst, src);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(and_ax_i16)()        // Opcode 0x25\n{\n\tUINT16 src, dst;\n\tsrc = FETCH16();\n\tdst = REG16(AX);\n\tdst = AND16(dst, src);\n\tREG16(AX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(bsf_r16_rm16)()      // Opcode 0x0f bc\n{\n\tUINT16 src, dst, temp;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM16(modrm);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ16(ea);\n\t}\n\n\tdst = 0;\n\n\tif( src == 0 ) {\n\t\tm_ZF = 1;\n\t} else {\n\t\tm_ZF = 0;\n\t\ttemp = 0;\n\t\twhile( (src & (1 << temp)) == 0 ) {\n\t\t\ttemp++;\n\t\t\tdst = temp;\n\t\t\tCYCLES(CYCLES_BSF);\n\t\t}\n\t\tSTORE_REG16(modrm, dst);\n\t}\n\tCYCLES(CYCLES_BSF_BASE);\n}\n\nstatic void I386OP(bsr_r16_rm16)()      // Opcode 0x0f bd\n{\n\tUINT16 src, dst, temp;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM16(modrm);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ16(ea);\n\t}\n\n\tdst = 0;\n\n\tif( src == 0 ) {\n\t\tm_ZF = 1;\n\t} else {\n\t\tm_ZF = 0;\n\t\tdst = temp = 15;\n\t\twhile( (src & (1 << temp)) == 0 ) {\n\t\t\ttemp--;\n\t\t\tdst = temp;\n\t\t\tCYCLES(CYCLES_BSR);\n\t\t}\n\t\tSTORE_REG16(modrm, dst);\n\t}\n\tCYCLES(CYCLES_BSR_BASE);\n}\n\n\nstatic void I386OP(bt_rm16_r16)()       // Opcode 0x0f a3\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\tUINT16 bit = LOAD_REG16(modrm);\n\n\t\tif( dst & (1 << (bit & 0xf)) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\n\t\tCYCLES(CYCLES_BT_REG_REG);\n\t} else {\n\t\tUINT8 segment;\n\t\tUINT32 ea = GetNonTranslatedEA(modrm,&segment);\n\t\tUINT16 bit = LOAD_REG16(modrm);\n\t\tea += 2*(bit/16);\n\t\tea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),0);\n\t\tbit %= 16;\n\t\tUINT16 dst = READ16(ea);\n\n\t\tif( dst & (1 << bit) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\n\t\tCYCLES(CYCLES_BT_REG_MEM);\n\t}\n}\n\nstatic void I386OP(btc_rm16_r16)()      // Opcode 0x0f bb\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\tUINT16 bit = LOAD_REG16(modrm);\n\n\t\tif( dst & (1 << (bit & 0xf)) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\t\tdst ^= (1 << (bit & 0xf));\n\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_BTC_REG_REG);\n\t} else {\n\t\tUINT8 segment;\n\t\tUINT32 ea = GetNonTranslatedEA(modrm,&segment);\n\t\tUINT16 bit = LOAD_REG16(modrm);\n\t\tea += 2*(bit/16);\n\t\tea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),1);\n\t\tbit %= 16;\n\t\tUINT16 dst = READ16(ea);\n\n\t\tif( dst & (1 << bit) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\t\tdst ^= (1 << bit);\n\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_BTC_REG_MEM);\n\t}\n}\n\nstatic void I386OP(btr_rm16_r16)()      // Opcode 0x0f b3\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\tUINT16 bit = LOAD_REG16(modrm);\n\n\t\tif( dst & (1 << (bit & 0xf)) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\t\tdst &= ~(1 << (bit & 0xf));\n\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_BTR_REG_REG);\n\t} else {\n\t\tUINT8 segment;\n\t\tUINT32 ea = GetNonTranslatedEA(modrm,&segment);\n\t\tUINT16 bit = LOAD_REG16(modrm);\n\t\tea += 2*(bit/16);\n\t\tea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),1);\n\t\tbit %= 16;\n\t\tUINT16 dst = READ16(ea);\n\n\t\tif( dst & (1 << bit) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\t\tdst &= ~(1 << bit);\n\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_BTR_REG_MEM);\n\t}\n}\n\nstatic void I386OP(bts_rm16_r16)()      // Opcode 0x0f ab\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\tUINT16 bit = LOAD_REG16(modrm);\n\n\t\tif( dst & (1 << (bit & 0xf)) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\t\tdst |= (1 << (bit & 0xf));\n\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_BTS_REG_REG);\n\t} else {\n\t\tUINT8 segment;\n\t\tUINT32 ea = GetNonTranslatedEA(modrm,&segment);\n\t\tUINT16 bit = LOAD_REG16(modrm);\n\t\tea += 2*(bit/16);\n\t\tea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),1);\n\t\tbit %= 16;\n\t\tUINT16 dst = READ16(ea);\n\n\t\tif( dst & (1 << bit) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\t\tdst |= (1 << bit);\n\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_BTS_REG_MEM);\n\t}\n}\n\nstatic void I386OP(call_abs16)()        // Opcode 0x9a\n{\n\tUINT16 offset = FETCH16();\n\tUINT16 ptr = FETCH16();\n\n\tif( PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\ti386_protected_mode_call(ptr,offset,0,0);\n\t}\n\telse\n\t{\n\t\tPUSH16(m_sreg[CS].selector );\n\t\tPUSH16(m_eip );\n\t\tm_sreg[CS].selector = ptr;\n\t\tm_performed_intersegment_jump = 1;\n\t\tm_eip = offset;\n\t\ti386_load_segment_descriptor(CS);\n\t}\n\tCYCLES(CYCLES_CALL_INTERSEG);      /* TODO: Timing = 17 + m */\n\tCHANGE_PC(m_eip);\n}\n\nstatic void I386OP(call_rel16)()        // Opcode 0xe8\n{\n\tINT16 disp = FETCH16();\n\n\tPUSH16(m_eip );\n\tif (m_sreg[CS].d)\n\t{\n\t\tm_eip += disp;\n\t}\n\telse\n\t{\n\t\tm_eip = (m_eip + disp) & 0xffff;\n\t}\n\tCHANGE_PC(m_eip);\n\tCYCLES(CYCLES_CALL);       /* TODO: Timing = 7 + m */\n}\n\nstatic void I386OP(cbw)()               // Opcode 0x98\n{\n\tREG16(AX) = (INT16)((INT8)REG8(AL));\n\tCYCLES(CYCLES_CBW);\n}\n\nstatic void I386OP(cmp_rm16_r16)()      // Opcode 0x39\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = LOAD_RM16(modrm);\n\t\tSUB16(dst, src);\n\t\tCYCLES(CYCLES_CMP_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = READ16(ea);\n\t\tSUB16(dst, src);\n\t\tCYCLES(CYCLES_CMP_REG_MEM);\n\t}\n}\n\nstatic void I386OP(cmp_r16_rm16)()      // Opcode 0x3b\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM16(modrm);\n\t\tdst = LOAD_REG16(modrm);\n\t\tSUB16(dst, src);\n\t\tCYCLES(CYCLES_CMP_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ16(ea);\n\t\tdst = LOAD_REG16(modrm);\n\t\tSUB16(dst, src);\n\t\tCYCLES(CYCLES_CMP_MEM_REG);\n\t}\n}\n\nstatic void I386OP(cmp_ax_i16)()        // Opcode 0x3d\n{\n\tUINT16 src, dst;\n\tsrc = FETCH16();\n\tdst = REG16(AX);\n\tSUB16(dst, src);\n\tCYCLES(CYCLES_CMP_IMM_ACC);\n}\n\nstatic void I386OP(cmpsw)()             // Opcode 0xa7\n{\n\tUINT32 eas, ead;\n\tUINT16 src, dst;\n\tif( m_segment_prefix ) {\n\t\teas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t} else {\n\t\teas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t}\n\tead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 0 );\n\tsrc = READ16(eas);\n\tdst = READ16(ead);\n\tSUB16(src,dst);\n\tBUMP_SI(2);\n\tBUMP_DI(2);\n\tCYCLES(CYCLES_CMPS);\n}\n\nstatic void I386OP(cwd)()               // Opcode 0x99\n{\n\tif( REG16(AX) & 0x8000 ) {\n\t\tREG16(DX) = 0xffff;\n\t} else {\n\t\tREG16(DX) = 0x0000;\n\t}\n\tCYCLES(CYCLES_CWD);\n}\n\nstatic void I386OP(dec_ax)()            // Opcode 0x48\n{\n\tREG16(AX) = DEC16(REG16(AX) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_cx)()            // Opcode 0x49\n{\n\tREG16(CX) = DEC16(REG16(CX) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_dx)()            // Opcode 0x4a\n{\n\tREG16(DX) = DEC16(REG16(DX) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_bx)()            // Opcode 0x4b\n{\n\tREG16(BX) = DEC16(REG16(BX) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_sp)()            // Opcode 0x4c\n{\n\tREG16(SP) = DEC16(REG16(SP) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_bp)()            // Opcode 0x4d\n{\n\tREG16(BP) = DEC16(REG16(BP) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_si)()            // Opcode 0x4e\n{\n\tREG16(SI) = DEC16(REG16(SI) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_di)()            // Opcode 0x4f\n{\n\tREG16(DI) = DEC16(REG16(DI) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(imul_r16_rm16)()     // Opcode 0x0f af\n{\n\tUINT8 modrm = FETCH();\n\tINT32 result;\n\tINT32 src, dst;\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = (INT32)(INT16)LOAD_RM16(modrm);\n\t\tCYCLES(CYCLES_IMUL16_REG_REG);     /* TODO: Correct multiply timing */\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = (INT32)(INT16)READ16(ea);\n\t\tCYCLES(CYCLES_IMUL16_REG_MEM);     /* TODO: Correct multiply timing */\n\t}\n\n\tdst = (INT32)(INT16)LOAD_REG16(modrm);\n\tresult = src * dst;\n\n\tSTORE_REG16(modrm, (UINT16)result);\n\n\tm_CF = m_OF = !(result == (INT32)(INT16)result);\n}\n\nstatic void I386OP(imul_r16_rm16_i16)() // Opcode 0x69\n{\n\tUINT8 modrm = FETCH();\n\tINT32 result;\n\tINT32 src, dst;\n\tif( modrm >= 0xc0 ) {\n\t\tdst = (INT32)(INT16)LOAD_RM16(modrm);\n\t\tCYCLES(CYCLES_IMUL16_REG_IMM_REG);     /* TODO: Correct multiply timing */\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tdst = (INT32)(INT16)READ16(ea);\n\t\tCYCLES(CYCLES_IMUL16_MEM_IMM_REG);     /* TODO: Correct multiply timing */\n\t}\n\n\tsrc = (INT32)(INT16)FETCH16();\n\tresult = src * dst;\n\n\tSTORE_REG16(modrm, (UINT16)result);\n\n\tm_CF = m_OF = !(result == (INT32)(INT16)result);\n}\n\nstatic void I386OP(imul_r16_rm16_i8)()  // Opcode 0x6b\n{\n\tUINT8 modrm = FETCH();\n\tINT32 result;\n\tINT32 src, dst;\n\tif( modrm >= 0xc0 ) {\n\t\tdst = (INT32)(INT16)LOAD_RM16(modrm);\n\t\tCYCLES(CYCLES_IMUL16_REG_IMM_REG);     /* TODO: Correct multiply timing */\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tdst = (INT32)(INT16)READ16(ea);\n\t\tCYCLES(CYCLES_IMUL16_MEM_IMM_REG);     /* TODO: Correct multiply timing */\n\t}\n\n\tsrc = (INT32)(INT8)FETCH();\n\tresult = src * dst;\n\n\tSTORE_REG16(modrm, (UINT16)result);\n\n\tm_CF = m_OF = !(result == (INT32)(INT16)result);\n}\n\nstatic void I386OP(in_ax_i8)()          // Opcode 0xe5\n{\n\tUINT16 port = FETCH();\n\tUINT16 data = READPORT16(port);\n\tREG16(AX) = data;\n\tCYCLES(CYCLES_IN_VAR);\n}\n\nstatic void I386OP(in_ax_dx)()          // Opcode 0xed\n{\n\tUINT16 port = REG16(DX);\n\tUINT16 data = READPORT16(port);\n\tREG16(AX) = data;\n\tCYCLES(CYCLES_IN);\n}\n\nstatic void I386OP(inc_ax)()            // Opcode 0x40\n{\n\tREG16(AX) = INC16(REG16(AX) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_cx)()            // Opcode 0x41\n{\n\tREG16(CX) = INC16(REG16(CX) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_dx)()            // Opcode 0x42\n{\n\tREG16(DX) = INC16(REG16(DX) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_bx)()            // Opcode 0x43\n{\n\tREG16(BX) = INC16(REG16(BX) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_sp)()            // Opcode 0x44\n{\n\tREG16(SP) = INC16(REG16(SP) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_bp)()            // Opcode 0x45\n{\n\tREG16(BP) = INC16(REG16(BP) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_si)()            // Opcode 0x46\n{\n\tREG16(SI) = INC16(REG16(SI) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_di)()            // Opcode 0x47\n{\n\tREG16(DI) = INC16(REG16(DI) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(iret16)()            // Opcode 0xcf\n{\n\tUINT32 old = m_pc - 1;\n\n\tif( PROTECTED_MODE )\n\t{\n\t\ti386_protected_mode_iret(0);\n\t}\n\telse\n\t{\n\t\t/* TODO: #SS(0) exception */\n\t\t/* TODO: #GP(0) exception */\n\t\tm_eip = POP16();\n\t\tm_sreg[CS].selector = POP16();\n\t\tset_flags(POP16() );\n\t\ti386_load_segment_descriptor(CS);\n\t\tCHANGE_PC(m_eip);\n\t}\n\tCYCLES(CYCLES_IRET);\n\n\t// MS-DOS system call\n\tif(IRET_TOP <= old && old < (IRET_TOP + IRET_SIZE)) {\n\t\tmsdos_syscall(old - IRET_TOP);\n\t}\n}\n\nstatic void I386OP(ja_rel16)()          // Opcode 0x0f 87\n{\n\tINT16 disp = FETCH16();\n\tif( m_CF == 0 && m_ZF == 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jbe_rel16)()         // Opcode 0x0f 86\n{\n\tINT16 disp = FETCH16();\n\tif( m_CF != 0 || m_ZF != 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jc_rel16)()          // Opcode 0x0f 82\n{\n\tINT16 disp = FETCH16();\n\tif( m_CF != 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jg_rel16)()          // Opcode 0x0f 8f\n{\n\tINT16 disp = FETCH16();\n\tif( m_ZF == 0 && (m_SF == m_OF) ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jge_rel16)()         // Opcode 0x0f 8d\n{\n\tINT16 disp = FETCH16();\n\tif(m_SF == m_OF) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jl_rel16)()          // Opcode 0x0f 8c\n{\n\tINT16 disp = FETCH16();\n\tif( (m_SF != m_OF) ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jle_rel16)()         // Opcode 0x0f 8e\n{\n\tINT16 disp = FETCH16();\n\tif( m_ZF != 0 || (m_SF != m_OF) ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jnc_rel16)()         // Opcode 0x0f 83\n{\n\tINT16 disp = FETCH16();\n\tif( m_CF == 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jno_rel16)()         // Opcode 0x0f 81\n{\n\tINT16 disp = FETCH16();\n\tif( m_OF == 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jnp_rel16)()         // Opcode 0x0f 8b\n{\n\tINT16 disp = FETCH16();\n\tif( m_PF == 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jns_rel16)()         // Opcode 0x0f 89\n{\n\tINT16 disp = FETCH16();\n\tif( m_SF == 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jnz_rel16)()         // Opcode 0x0f 85\n{\n\tINT16 disp = FETCH16();\n\tif( m_ZF == 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jo_rel16)()          // Opcode 0x0f 80\n{\n\tINT16 disp = FETCH16();\n\tif( m_OF != 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jp_rel16)()          // Opcode 0x0f 8a\n{\n\tINT16 disp = FETCH16();\n\tif( m_PF != 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(js_rel16)()          // Opcode 0x0f 88\n{\n\tINT16 disp = FETCH16();\n\tif( m_SF != 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jz_rel16)()          // Opcode 0x0f 84\n{\n\tINT16 disp = FETCH16();\n\tif( m_ZF != 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jcxz16)()            // Opcode 0xe3\n{\n\tINT8 disp = FETCH();\n\tint val = (m_address_size)?(REG32(ECX) == 0):(REG16(CX) == 0);\n\tif( val ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCXZ);       /* TODO: Timing = 9 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCXZ_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jmp_rel16)()         // Opcode 0xe9\n{\n\tINT16 disp = FETCH16();\n\n\tif (m_sreg[CS].d)\n\t{\n\t\tm_eip += disp;\n\t}\n\telse\n\t{\n\t\tm_eip = (m_eip + disp) & 0xffff;\n\t}\n\tCHANGE_PC(m_eip);\n\tCYCLES(CYCLES_JMP);        /* TODO: Timing = 7 + m */\n}\n\nstatic void I386OP(jmp_abs16)()         // Opcode 0xea\n{\n\tUINT16 address = FETCH16();\n\tUINT16 segment = FETCH16();\n\n\tif( PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\ti386_protected_mode_jump(segment,address,0,0);\n\t}\n\telse\n\t{\n\t\tm_eip = address;\n\t\tm_sreg[CS].selector = segment;\n\t\tm_performed_intersegment_jump = 1;\n\t\ti386_load_segment_descriptor(CS);\n\t\tCHANGE_PC(m_eip);\n\t}\n\tCYCLES(CYCLES_JMP_INTERSEG);\n}\n\nstatic void I386OP(lea16)()             // Opcode 0x8d\n{\n\tUINT8 modrm = FETCH();\n\tUINT32 ea = GetNonTranslatedEA(modrm,NULL);\n\tSTORE_REG16(modrm, ea);\n\tCYCLES(CYCLES_LEA);\n}\n\nstatic void I386OP(enter16)()           // Opcode 0xc8\n{\n\tUINT16 framesize = FETCH16();\n\tUINT8 level = FETCH() % 32;\n\tUINT8 x;\n\tUINT16 frameptr;\n\tPUSH16(REG16(BP));\n\n\tif(!STACK_32BIT)\n\t\tframeptr = REG16(SP);\n\telse\n\t\tframeptr = REG32(ESP);\n\n\tif(level > 0)\n\t{\n\t\tfor(x=1;x<=level-1;x++)\n\t\t{\n\t\t\tUINT32 addr;\n\t\t\tif(!STACK_32BIT)\n\t\t\t{\n\t\t\t\tREG16(BP) -= 2;\n\t\t\t\taddr = REG16(BP);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tREG32(EBP) -= 2;\n\t\t\t\taddr = REG32(EBP);\n\t\t\t}\n\t\t\tPUSH16(READ16(i386_translate(SS, addr, 0)));\n\t\t}\n\t\tPUSH16(frameptr);\n\t}\n\tREG16(BP) = frameptr;\n\tif(!STACK_32BIT)\n\t\tREG16(SP) -= framesize;\n\telse\n\t\tREG32(ESP) -= framesize;\n\tCYCLES(CYCLES_ENTER);\n}\n\nstatic void I386OP(leave16)()           // Opcode 0xc9\n{\n\tif(!STACK_32BIT)\n\t\tREG16(SP) = REG16(BP);\n\telse\n\t\tREG32(ESP) = REG32(EBP);\n\tREG16(BP) = POP16();\n\tCYCLES(CYCLES_LEAVE);\n}\n\nstatic void I386OP(lodsw)()             // Opcode 0xad\n{\n\tUINT32 eas;\n\tif( m_segment_prefix ) {\n\t\teas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t} else {\n\t\teas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t}\n\tREG16(AX) = READ16(eas);\n\tBUMP_SI(2);\n\tCYCLES(CYCLES_LODS);\n}\n\nstatic void I386OP(loop16)()            // Opcode 0xe2\n{\n\tINT8 disp = FETCH();\n\tINT32 val = (m_address_size)?(--REG32(ECX)):(--REG16(CX));\n\tif( val != 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t}\n\tCYCLES(CYCLES_LOOP);       /* TODO: Timing = 11 + m */\n}\n\nstatic void I386OP(loopne16)()          // Opcode 0xe0\n{\n\tINT8 disp = FETCH();\n\tINT32 val = (m_address_size)?(--REG32(ECX)):(--REG16(CX));\n\tif( val != 0 && m_ZF == 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t}\n\tCYCLES(CYCLES_LOOPNZ);     /* TODO: Timing = 11 + m */\n}\n\nstatic void I386OP(loopz16)()           // Opcode 0xe1\n{\n\tINT8 disp = FETCH();\n\tINT32 val = (m_address_size)?(--REG32(ECX)):(--REG16(CX));\n\tif( val != 0 && m_ZF != 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t}\n\tCYCLES(CYCLES_LOOPZ);      /* TODO: Timing = 11 + m */\n}\n\nstatic void I386OP(mov_rm16_r16)()      // Opcode 0x89\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG16(modrm);\n\t\tSTORE_RM16(modrm, src);\n\t\tCYCLES(CYCLES_MOV_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG16(modrm);\n\t\tWRITE16(ea, src);\n\t\tCYCLES(CYCLES_MOV_REG_MEM);\n\t}\n}\n\nstatic void I386OP(mov_r16_rm16)()      // Opcode 0x8b\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM16(modrm);\n\t\tSTORE_REG16(modrm, src);\n\t\tCYCLES(CYCLES_MOV_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ16(ea);\n\t\tSTORE_REG16(modrm, src);\n\t\tCYCLES(CYCLES_MOV_MEM_REG);\n\t}\n}\n\nstatic void I386OP(mov_rm16_i16)()      // Opcode 0xc7\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 value = FETCH16();\n\t\tSTORE_RM16(modrm, value);\n\t\tCYCLES(CYCLES_MOV_IMM_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT16 value = FETCH16();\n\t\tWRITE16(ea, value);\n\t\tCYCLES(CYCLES_MOV_IMM_MEM);\n\t}\n}\n\nstatic void I386OP(mov_ax_m16)()        // Opcode 0xa1\n{\n\tUINT32 offset, ea;\n\tif( m_address_size ) {\n\t\toffset = FETCH32();\n\t} else {\n\t\toffset = FETCH16();\n\t}\n\t/* TODO: Not sure if this is correct... */\n\tif( m_segment_prefix ) {\n\t\tea = i386_translate(m_segment_override, offset, 0 );\n\t} else {\n\t\tea = i386_translate(DS, offset, 0 );\n\t}\n\tREG16(AX) = READ16(ea);\n\tCYCLES(CYCLES_MOV_MEM_ACC);\n}\n\nstatic void I386OP(mov_m16_ax)()        // Opcode 0xa3\n{\n\tUINT32 offset, ea;\n\tif( m_address_size ) {\n\t\toffset = FETCH32();\n\t} else {\n\t\toffset = FETCH16();\n\t}\n\t/* TODO: Not sure if this is correct... */\n\tif( m_segment_prefix ) {\n\t\tea = i386_translate(m_segment_override, offset, 1 );\n\t} else {\n\t\tea = i386_translate(DS, offset, 1 );\n\t}\n\tWRITE16(ea, REG16(AX) );\n\tCYCLES(CYCLES_MOV_ACC_MEM);\n}\n\nstatic void I386OP(mov_ax_i16)()        // Opcode 0xb8\n{\n\tREG16(AX) = FETCH16();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_cx_i16)()        // Opcode 0xb9\n{\n\tREG16(CX) = FETCH16();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_dx_i16)()        // Opcode 0xba\n{\n\tREG16(DX) = FETCH16();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_bx_i16)()        // Opcode 0xbb\n{\n\tREG16(BX) = FETCH16();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_sp_i16)()        // Opcode 0xbc\n{\n\tREG16(SP) = FETCH16();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_bp_i16)()        // Opcode 0xbd\n{\n\tREG16(BP) = FETCH16();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_si_i16)()        // Opcode 0xbe\n{\n\tREG16(SI) = FETCH16();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_di_i16)()        // Opcode 0xbf\n{\n\tREG16(DI) = FETCH16();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(movsw)()             // Opcode 0xa5\n{\n\tUINT32 eas, ead;\n\tUINT16 v;\n\tif( m_segment_prefix ) {\n\t\teas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t} else {\n\t\teas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t}\n\tead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 );\n\tv = READ16(eas);\n\tWRITE16(ead, v);\n\tBUMP_SI(2);\n\tBUMP_DI(2);\n\tCYCLES(CYCLES_MOVS);\n}\n\nstatic void I386OP(movsx_r16_rm8)()     // Opcode 0x0f be\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tINT16 src = (INT8)LOAD_RM8(modrm);\n\t\tSTORE_REG16(modrm, src);\n\t\tCYCLES(CYCLES_MOVSX_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tINT16 src = (INT8)READ8(ea);\n\t\tSTORE_REG16(modrm, src);\n\t\tCYCLES(CYCLES_MOVSX_MEM_REG);\n\t}\n}\n\nstatic void I386OP(movzx_r16_rm8)()     // Opcode 0x0f b6\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 src = (UINT8)LOAD_RM8(modrm);\n\t\tSTORE_REG16(modrm, src);\n\t\tCYCLES(CYCLES_MOVZX_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tUINT16 src = (UINT8)READ8(ea);\n\t\tSTORE_REG16(modrm, src);\n\t\tCYCLES(CYCLES_MOVZX_MEM_REG);\n\t}\n}\n\nstatic void I386OP(or_rm16_r16)()       // Opcode 0x09\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = LOAD_RM16(modrm);\n\t\tdst = OR16(dst, src);\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = READ16(ea);\n\t\tdst = OR16(dst, src);\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(or_r16_rm16)()       // Opcode 0x0b\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM16(modrm);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = OR16(dst, src);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ16(ea);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = OR16(dst, src);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(or_ax_i16)()         // Opcode 0x0d\n{\n\tUINT16 src, dst;\n\tsrc = FETCH16();\n\tdst = REG16(AX);\n\tdst = OR16(dst, src);\n\tREG16(AX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(out_ax_i8)()         // Opcode 0xe7\n{\n\tUINT16 port = FETCH();\n\tUINT16 data = REG16(AX);\n\tWRITEPORT16(port, data);\n\tCYCLES(CYCLES_OUT_VAR);\n}\n\nstatic void I386OP(out_ax_dx)()         // Opcode 0xef\n{\n\tUINT16 port = REG16(DX);\n\tUINT16 data = REG16(AX);\n\tWRITEPORT16(port, data);\n\tCYCLES(CYCLES_OUT);\n}\n\nstatic void I386OP(pop_ax)()            // Opcode 0x58\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+1) == 0)\n\t\tREG16(AX) = POP16();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_cx)()            // Opcode 0x59\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+1) == 0)\n\t\tREG16(CX) = POP16();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_dx)()            // Opcode 0x5a\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+1) == 0)\n\t\tREG16(DX) = POP16();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_bx)()            // Opcode 0x5b\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+1) == 0)\n\t\tREG16(BX) = POP16();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_sp)()            // Opcode 0x5c\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+1) == 0)\n\t\tREG16(SP) = POP16();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_bp)()            // Opcode 0x5d\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+1) == 0)\n\t\tREG16(BP) = POP16();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_si)()            // Opcode 0x5e\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+1) == 0)\n\t\tREG16(SI) = POP16();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_di)()            // Opcode 0x5f\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+1) == 0)\n\t\tREG16(DI) = POP16();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic bool I386OP(pop_seg16)(int segment)\n{\n\tUINT32 ea, offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tUINT16 value;\n\tbool fault;\n\tif(i386_limit_check(SS,offset+1) == 0)\n\t{\n\t\tea = i386_translate(SS, offset, 0);\n\t\tvalue = READ16(ea);\n\t\ti386_sreg_load(value, segment, &fault);\n\t\tif(fault) return false;\n\t\tif(STACK_32BIT)\n\t\t\tREG32(ESP) = offset + 2;\n\t\telse\n\t\t\tREG16(SP) = offset + 2;\n\t}\n\telse\n\t{\n\t\tm_ext = 1;\n\t\ti386_trap_with_error(FAULT_SS,0,0,0);\n\t\treturn false;\n\t}\n\tCYCLES(CYCLES_POP_SREG);\n\treturn true;\n}\n\nstatic void I386OP(pop_ds16)()          // Opcode 0x1f\n{\n\tI386OP(pop_seg16)(DS);\n}\n\nstatic void I386OP(pop_es16)()          // Opcode 0x07\n{\n\tI386OP(pop_seg16)(ES);\n}\n\nstatic void I386OP(pop_fs16)()          // Opcode 0x0f a1\n{\n\tI386OP(pop_seg16)(FS);\n}\n\nstatic void I386OP(pop_gs16)()          // Opcode 0x0f a9\n{\n\tI386OP(pop_seg16)(GS);\n}\n\nstatic void I386OP(pop_ss16)()          // Opcode 0x17\n{\n\tif(!I386OP(pop_seg16)(SS)) return;\n\tif(m_IF != 0) // if external interrupts are enabled\n\t{\n\t\tm_IF = 0;  // reset IF for the next instruction\n\t\tm_delayed_interrupt_enable = 1;\n\t}\n}\n\nstatic void I386OP(pop_rm16)()          // Opcode 0x8f\n{\n\tUINT8 modrm = FETCH();\n\tUINT16 value;\n\tUINT32 ea, offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\n\tif(i386_limit_check(SS,offset+1) == 0)\n\t{\n\t\tUINT32 temp_sp = REG32(ESP);\n\t\tvalue = POP16();\n\n\t\tif( modrm >= 0xc0 ) {\n\t\t\tSTORE_RM16(modrm, value);\n\t\t} else {\n\t\t\ttry\n\t\t\t{\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tWRITE16(ea, value);\n\t\t\t}\n\t\t\tcatch(UINT64 e)\n\t\t\t{\n\t\t\t\tREG32(ESP) = temp_sp;\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_RM);\n}\n\nstatic void I386OP(popa)()              // Opcode 0x61\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\n\tif(i386_limit_check(SS,offset+15) == 0)\n\t{\n\t\tREG16(DI) = POP16();\n\t\tREG16(SI) = POP16();\n\t\tREG16(BP) = POP16();\n\t\tREG16(SP) += 2;\n\t\tREG16(BX) = POP16();\n\t\tREG16(DX) = POP16();\n\t\tREG16(CX) = POP16();\n\t\tREG16(AX) = POP16();\n\t}\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POPA);\n}\n\nstatic void I386OP(popf)()              // Opcode 0x9d\n{\n\tUINT32 value;\n\tUINT32 current = get_flags();\n\tUINT8 IOPL = (current >> 12) & 0x03;\n\tUINT32 mask = 0x7fd5;\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\n\t// IOPL can only change if CPL is 0\n\tif(m_CPL != 0)\n\t\tmask &= ~0x00003000;\n\n\t// IF can only change if CPL is at least as privileged as IOPL\n\tif(m_CPL > IOPL)\n\t\tmask &= ~0x00000200;\n\n\tif(V8086_MODE)\n\t{\n\t\tif(IOPL < 3)\n\t\t{\n\t\t\tlogerror(\"POPFD(%08x): IOPL < 3 while in V86 mode.\\n\",m_pc);\n\t\t\tFAULT(FAULT_GP,0)  // #GP(0)\n\t\t}\n\t\tmask &= ~0x00003000;  // IOPL cannot be changed while in V8086 mode\n\t}\n\n\tif(i386_limit_check(SS,offset+1) == 0)\n\t{\n\t\tvalue = POP16();\n\t\tset_flags((current & ~mask) | (value & mask));  // mask out reserved bits\n\t}\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POPF);\n}\n\nstatic void I386OP(push_ax)()           // Opcode 0x50\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(REG16(AX) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_cx)()           // Opcode 0x51\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(REG16(CX) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_dx)()           // Opcode 0x52\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(REG16(DX) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_bx)()           // Opcode 0x53\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(REG16(BX) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_sp)()           // Opcode 0x54\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(REG16(SP) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_bp)()           // Opcode 0x55\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(REG16(BP) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_si)()           // Opcode 0x56\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(REG16(SI) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_di)()           // Opcode 0x57\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(REG16(DI) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_cs16)()         // Opcode 0x0e\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(m_sreg[CS].selector );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_SREG);\n}\n\nstatic void I386OP(push_ds16)()         // Opcode 0x1e\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(m_sreg[DS].selector );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_SREG);\n}\n\nstatic void I386OP(push_es16)()         // Opcode 0x06\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(m_sreg[ES].selector );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_SREG);\n}\n\nstatic void I386OP(push_fs16)()         // Opcode 0x0f a0\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(m_sreg[FS].selector );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_SREG);\n}\n\nstatic void I386OP(push_gs16)()         // Opcode 0x0f a8\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(m_sreg[GS].selector );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_SREG);\n}\n\nstatic void I386OP(push_ss16)()         // Opcode 0x16\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(m_sreg[SS].selector );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_SREG);\n}\n\nstatic void I386OP(push_i16)()          // Opcode 0x68\n{\n\tUINT16 value = FETCH16();\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(value);\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_IMM);\n}\n\nstatic void I386OP(pusha)()             // Opcode 0x60\n{\n\tUINT16 temp = REG16(SP);\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 16;\n\telse\n\t\toffset = (REG16(SP) - 16) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t{\n\t\tPUSH16(REG16(AX) );\n\t\tPUSH16(REG16(CX) );\n\t\tPUSH16(REG16(DX) );\n\t\tPUSH16(REG16(BX) );\n\t\tPUSH16(temp );\n\t\tPUSH16(REG16(BP) );\n\t\tPUSH16(REG16(SI) );\n\t\tPUSH16(REG16(DI) );\n\t}\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSHA);\n}\n\nstatic void I386OP(pushf)()             // Opcode 0x9c\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(get_flags() & 0xffff );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSHF);\n}\n\nstatic void I386OP(ret_near16_i16)()    // Opcode 0xc2\n{\n\tINT16 disp = FETCH16();\n\tm_eip = POP16();\n\tREG16(SP) += disp;\n\tCHANGE_PC(m_eip);\n\tCYCLES(CYCLES_RET_IMM);        /* TODO: Timing = 10 + m */\n}\n\nstatic void I386OP(ret_near16)()        // Opcode 0xc3\n{\n\tm_eip = POP16();\n\tCHANGE_PC(m_eip);\n\tCYCLES(CYCLES_RET);        /* TODO: Timing = 10 + m */\n}\n\nstatic void I386OP(sbb_rm16_r16)()      // Opcode 0x19\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = LOAD_RM16(modrm);\n\t\tdst = SBB16(dst, src, m_CF);\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = READ16(ea);\n\t\tdst = SBB16(dst, src, m_CF);\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(sbb_r16_rm16)()      // Opcode 0x1b\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM16(modrm);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = SBB16(dst, src, m_CF);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ16(ea);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = SBB16(dst, src, m_CF);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(sbb_ax_i16)()        // Opcode 0x1d\n{\n\tUINT16 src, dst;\n\tsrc = FETCH16();\n\tdst = REG16(AX);\n\tdst = SBB16(dst, src, m_CF);\n\tREG16(AX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(scasw)()             // Opcode 0xaf\n{\n\tUINT32 eas;\n\tUINT16 src, dst;\n\teas = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 0 );\n\tsrc = READ16(eas);\n\tdst = REG16(AX);\n\tSUB16(dst, src);\n\tBUMP_DI(2);\n\tCYCLES(CYCLES_SCAS);\n}\n\nstatic void I386OP(shld16_i8)()         // Opcode 0x0f a4\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\tUINT16 upper = LOAD_REG16(modrm);\n\t\tUINT8 shift = FETCH();\n\t\tshift &= 31;\n\t\tif( shift == 0 ) {\n\t\t} else if( shift > 15 ) {\n\t\t\tm_CF = (upper & (1 << (16-shift))) ? 1 : 0;\n\t\t\t// ppro and above should be (dst >> (32-shift))\n\t\t\tdst = (upper << (shift-16)) | (upper >> (32-shift));\n\t\t\tm_OF = m_CF ^ (dst >> 15);\n\t\t\tSetSZPF16(dst);\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (16-shift))) ? 1 : 0;\n\t\t\tdst = (dst << shift) | (upper >> (16-shift));\n\t\t\tm_OF = m_CF ^ (dst >> 15);\n\t\t\tSetSZPF16(dst);\n\t\t}\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_SHLD_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT16 dst = READ16(ea);\n\t\tUINT16 upper = LOAD_REG16(modrm);\n\t\tUINT8 shift = FETCH();\n\t\tshift &= 31;\n\t\tif( shift == 0 ) {\n\t\t} else if( shift > 15 ) {\n\t\t\tm_CF = (upper & (1 << (16-shift))) ? 1 : 0;\n\t\t\tdst = (upper << (shift-16)) | (upper >> (32-shift));\n\t\t\tm_OF = m_CF ^ (dst >> 15);\n\t\t\tSetSZPF16(dst);\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (16-shift))) ? 1 : 0;\n\t\t\tdst = (dst << shift) | (upper >> (16-shift));\n\t\t\tm_OF = m_CF ^ (dst >> 15);\n\t\t\tSetSZPF16(dst);\n\t\t}\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_SHLD_MEM);\n\t}\n}\n\nstatic void I386OP(shld16_cl)()         // Opcode 0x0f a5\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\tUINT16 upper = LOAD_REG16(modrm);\n\t\tUINT8 shift = REG8(CL);\n\t\tshift &= 31;\n\t\tif( shift == 0 ) {\n\t\t} else if( shift > 15 ) {\n\t\t\tm_CF = (upper & (1 << (16-shift))) ? 1 : 0;\n\t\t\tdst = (upper << (shift-16)) | (upper >> (32-shift));\n\t\t\tm_OF = m_CF ^ (dst >> 15);\n\t\t\tSetSZPF16(dst);\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (16-shift))) ? 1 : 0;\n\t\t\tdst = (dst << shift) | (upper >> (16-shift));\n\t\t\tm_OF = m_CF ^ (dst >> 15);\n\t\t\tSetSZPF16(dst);\n\t\t}\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_SHLD_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT16 dst = READ16(ea);\n\t\tUINT16 upper = LOAD_REG16(modrm);\n\t\tUINT8 shift = REG8(CL);\n\t\tshift &= 31;\n\t\tif( shift == 0 ) {\n\t\t} else if( shift > 15 ) {\n\t\t\tm_CF = (upper & (1 << (16-shift))) ? 1 : 0;\n\t\t\tdst = (upper << (shift-16)) | (upper >> (32-shift));\n\t\t\tm_OF = m_CF ^ (dst >> 15);\n\t\t\tSetSZPF16(dst);\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (16-shift))) ? 1 : 0;\n\t\t\tdst = (dst << shift) | (upper >> (16-shift));\n\t\t\tm_OF = m_CF ^ (dst >> 15);\n\t\t\tSetSZPF16(dst);\n\t\t}\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_SHLD_MEM);\n\t}\n}\n\nstatic void I386OP(shrd16_i8)()         // Opcode 0x0f ac\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\tUINT16 upper = LOAD_REG16(modrm);\n\t\tUINT8 shift = FETCH();\n\t\tshift &= 31;\n\t\tif( shift == 0) {\n\t\t} else if( shift > 15 ) {\n\t\t\tm_CF = (upper & (1 << (shift-1))) ? 1 : 0;\n\t\t\tdst = (upper >> (shift-16)) | (upper << (32-shift));\n\t\t\tm_OF = ((dst >> 15) ^ (dst >> 14)) & 1;\n\t\t\tSetSZPF16(dst);\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (shift-1))) ? 1 : 0;\n\t\t\tdst = (dst >> shift) | (upper << (16-shift));\n\t\t\tm_OF = ((dst >> 15) ^ (dst >> 14)) & 1;\n\t\t\tSetSZPF16(dst);\n\t\t}\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_SHRD_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT16 dst = READ16(ea);\n\t\tUINT16 upper = LOAD_REG16(modrm);\n\t\tUINT8 shift = FETCH();\n\t\tshift &= 31;\n\t\tif( shift == 0) {\n\t\t} else if( shift > 15 ) {\n\t\t\tm_CF = (upper & (1 << (shift-1))) ? 1 : 0;\n\t\t\tdst = (upper >> (shift-16)) | (upper << (32-shift));\n\t\t\tm_OF = ((dst >> 15) ^ (dst >> 14)) & 1;\n\t\t\tSetSZPF16(dst);\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (shift-1))) ? 1 : 0;\n\t\t\tdst = (dst >> shift) | (upper << (16-shift));\n\t\t\tm_OF = ((dst >> 15) ^ (dst >> 14)) & 1;\n\t\t\tSetSZPF16(dst);\n\t\t}\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_SHRD_MEM);\n\t}\n}\n\nstatic void I386OP(shrd16_cl)()         // Opcode 0x0f ad\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\tUINT16 upper = LOAD_REG16(modrm);\n\t\tUINT8 shift = REG8(CL);\n\t\tshift &= 31;\n\t\tif( shift == 0) {\n\t\t} else if( shift > 15 ) {\n\t\t\tm_CF = (upper & (1 << (shift-1))) ? 1 : 0;\n\t\t\tdst = (upper >> (shift-16)) | (upper << (32-shift));\n\t\t\tm_OF = ((dst >> 15) ^ (dst >> 14)) & 1;\n\t\t\tSetSZPF16(dst);\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (shift-1))) ? 1 : 0;\n\t\t\tdst = (dst >> shift) | (upper << (16-shift));\n\t\t\tm_OF = ((dst >> 15) ^ (dst >> 14)) & 1;\n\t\t\tSetSZPF16(dst);\n\t\t}\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_SHRD_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT16 dst = READ16(ea);\n\t\tUINT16 upper = LOAD_REG16(modrm);\n\t\tUINT8 shift = REG8(CL);\n\t\tshift &= 31;\n\t\tif( shift == 0) {\n\t\t} else if( shift > 15 ) {\n\t\t\tm_CF = (upper & (1 << (shift-1))) ? 1 : 0;\n\t\t\tdst = (upper >> (shift-16)) | (upper << (32-shift));\n\t\t\tm_OF = ((dst >> 15) ^ (dst >> 14)) & 1;\n\t\t\tSetSZPF16(dst);\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (shift-1))) ? 1 : 0;\n\t\t\tdst = (dst >> shift) | (upper << (16-shift));\n\t\t\tm_OF = ((dst >> 15) ^ (dst >> 14)) & 1;\n\t\t\tSetSZPF16(dst);\n\t\t}\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_SHRD_MEM);\n\t}\n}\n\nstatic void I386OP(stosw)()             // Opcode 0xab\n{\n\tUINT32 ead;\n\tead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 );\n\tWRITE16(ead, REG16(AX));\n\tBUMP_DI(2);\n\tCYCLES(CYCLES_STOS);\n}\n\nstatic void I386OP(sub_rm16_r16)()      // Opcode 0x29\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = LOAD_RM16(modrm);\n\t\tdst = SUB16(dst, src);\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = READ16(ea);\n\t\tdst = SUB16(dst, src);\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(sub_r16_rm16)()      // Opcode 0x2b\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM16(modrm);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = SUB16(dst, src);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ16(ea);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = SUB16(dst, src);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(sub_ax_i16)()        // Opcode 0x2d\n{\n\tUINT16 src, dst;\n\tsrc = FETCH16();\n\tdst = REG16(AX);\n\tdst = SUB16(dst, src);\n\tREG16(AX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(test_ax_i16)()       // Opcode 0xa9\n{\n\tUINT16 src = FETCH16();\n\tUINT16 dst = REG16(AX);\n\tdst = src & dst;\n\tSetSZPF16(dst);\n\tm_CF = 0;\n\tm_OF = 0;\n\tCYCLES(CYCLES_TEST_IMM_ACC);\n}\n\nstatic void I386OP(test_rm16_r16)()     // Opcode 0x85\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = LOAD_RM16(modrm);\n\t\tdst = src & dst;\n\t\tSetSZPF16(dst);\n\t\tm_CF = 0;\n\t\tm_OF = 0;\n\t\tCYCLES(CYCLES_TEST_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = READ16(ea);\n\t\tdst = src & dst;\n\t\tSetSZPF16(dst);\n\t\tm_CF = 0;\n\t\tm_OF = 0;\n\t\tCYCLES(CYCLES_TEST_REG_MEM);\n\t}\n}\n\nstatic void I386OP(xchg_ax_cx)()        // Opcode 0x91\n{\n\tUINT16 temp;\n\ttemp = REG16(AX);\n\tREG16(AX) = REG16(CX);\n\tREG16(CX) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_ax_dx)()        // Opcode 0x92\n{\n\tUINT16 temp;\n\ttemp = REG16(AX);\n\tREG16(AX) = REG16(DX);\n\tREG16(DX) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_ax_bx)()        // Opcode 0x93\n{\n\tUINT16 temp;\n\ttemp = REG16(AX);\n\tREG16(AX) = REG16(BX);\n\tREG16(BX) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_ax_sp)()        // Opcode 0x94\n{\n\tUINT16 temp;\n\ttemp = REG16(AX);\n\tREG16(AX) = REG16(SP);\n\tREG16(SP) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_ax_bp)()        // Opcode 0x95\n{\n\tUINT16 temp;\n\ttemp = REG16(AX);\n\tREG16(AX) = REG16(BP);\n\tREG16(BP) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_ax_si)()        // Opcode 0x96\n{\n\tUINT16 temp;\n\ttemp = REG16(AX);\n\tREG16(AX) = REG16(SI);\n\tREG16(SI) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_ax_di)()        // Opcode 0x97\n{\n\tUINT16 temp;\n\ttemp = REG16(AX);\n\tREG16(AX) = REG16(DI);\n\tREG16(DI) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_r16_rm16)()     // Opcode 0x87\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 src = LOAD_RM16(modrm);\n\t\tUINT16 dst = LOAD_REG16(modrm);\n\t\tSTORE_REG16(modrm, src);\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_XCHG_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT16 src = READ16(ea);\n\t\tUINT16 dst = LOAD_REG16(modrm);\n\t\tSTORE_REG16(modrm, src);\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_XCHG_REG_MEM);\n\t}\n}\n\nstatic void I386OP(xor_rm16_r16)()      // Opcode 0x31\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = LOAD_RM16(modrm);\n\t\tdst = XOR16(dst, src);\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = READ16(ea);\n\t\tdst = XOR16(dst, src);\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(xor_r16_rm16)()      // Opcode 0x33\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM16(modrm);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = XOR16(dst, src);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ16(ea);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = XOR16(dst, src);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(xor_ax_i16)()        // Opcode 0x35\n{\n\tUINT16 src, dst;\n\tsrc = FETCH16();\n\tdst = REG16(AX);\n\tdst = XOR16(dst, src);\n\tREG16(AX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\n\n\nstatic void I386OP(group81_16)()        // Opcode 0x81\n{\n\tUINT32 ea;\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:     // ADD Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = ADD16(dst, src);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = ADD16(dst, src);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 1:     // OR Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = OR16(dst, src);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = OR16(dst, src);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 2:     // ADC Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = ADC16(dst, src, m_CF);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = ADC16(dst, src, m_CF);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 3:     // SBB Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = SBB16(dst, src, m_CF);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = SBB16(dst, src, m_CF);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 4:     // AND Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = AND16(dst, src);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = AND16(dst, src);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 5:     // SUB Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = SUB16(dst, src);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = SUB16(dst, src);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:     // XOR Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = XOR16(dst, src);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = XOR16(dst, src);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 7:     // CMP Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tSUB16(dst, src);\n\t\t\t\tCYCLES(CYCLES_CMP_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tSUB16(dst, src);\n\t\t\t\tCYCLES(CYCLES_CMP_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(group83_16)()        // Opcode 0x83\n{\n\tUINT32 ea;\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:     // ADD Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tdst = ADD16(dst, src);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tdst = ADD16(dst, src);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 1:     // OR Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tdst = OR16(dst, src);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tdst = OR16(dst, src);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 2:     // ADC Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tdst = ADC16(dst, src, m_CF);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tdst = ADC16(dst, src, m_CF);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 3:     // SBB Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = ((UINT16)(INT16)(INT8)FETCH());\n\t\t\t\tdst = SBB16(dst, src, m_CF);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = ((UINT16)(INT16)(INT8)FETCH());\n\t\t\t\tdst = SBB16(dst, src, m_CF);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 4:     // AND Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tdst = AND16(dst, src);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tdst = AND16(dst, src);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 5:     // SUB Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tdst = SUB16(dst, src);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tdst = SUB16(dst, src);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:     // XOR Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tdst = XOR16(dst, src);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tdst = XOR16(dst, src);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 7:     // CMP Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tSUB16(dst, src);\n\t\t\t\tCYCLES(CYCLES_CMP_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tSUB16(dst, src);\n\t\t\t\tCYCLES(CYCLES_CMP_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(groupC1_16)()        // Opcode 0xc1\n{\n\tUINT16 dst;\n\tUINT8 modrm = FETCH();\n\tUINT8 shift;\n\n\tif( modrm >= 0xc0 ) {\n\t\tdst = LOAD_RM16(modrm);\n\t\tshift = FETCH() & 0x1f;\n\t\tdst = i386_shift_rotate16(modrm, dst, shift);\n\t\tSTORE_RM16(modrm, dst);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tdst = READ16(ea);\n\t\tshift = FETCH() & 0x1f;\n\t\tdst = i386_shift_rotate16(modrm, dst, shift);\n\t\tWRITE16(ea, dst);\n\t}\n}\n\nstatic void I386OP(groupD1_16)()        // Opcode 0xd1\n{\n\tUINT16 dst;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 ) {\n\t\tdst = LOAD_RM16(modrm);\n\t\tdst = i386_shift_rotate16(modrm, dst, 1);\n\t\tSTORE_RM16(modrm, dst);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tdst = READ16(ea);\n\t\tdst = i386_shift_rotate16(modrm, dst, 1);\n\t\tWRITE16(ea, dst);\n\t}\n}\n\nstatic void I386OP(groupD3_16)()        // Opcode 0xd3\n{\n\tUINT16 dst;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 ) {\n\t\tdst = LOAD_RM16(modrm);\n\t\tdst = i386_shift_rotate16(modrm, dst, REG8(CL));\n\t\tSTORE_RM16(modrm, dst);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tdst = READ16(ea);\n\t\tdst = i386_shift_rotate16(modrm, dst, REG8(CL));\n\t\tWRITE16(ea, dst);\n\t}\n}\n\nstatic void I386OP(groupF7_16)()        // Opcode 0xf7\n{\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:         /* TEST Rm16, i16 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\t\t\tUINT16 src = FETCH16();\n\t\t\t\tdst &= src;\n\t\t\t\tm_CF = m_OF = m_AF = 0;\n\t\t\t\tSetSZPF16(dst);\n\t\t\t\tCYCLES(CYCLES_TEST_IMM_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\tUINT16 dst = READ16(ea);\n\t\t\t\tUINT16 src = FETCH16();\n\t\t\t\tdst &= src;\n\t\t\t\tm_CF = m_OF = m_AF = 0;\n\t\t\t\tSetSZPF16(dst);\n\t\t\t\tCYCLES(CYCLES_TEST_IMM_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 2:         /* NOT Rm16 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\t\t\tdst = ~dst;\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_NOT_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT16 dst = READ16(ea);\n\t\t\t\tdst = ~dst;\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_NOT_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 3:         /* NEG Rm16 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\t\t\tdst = SUB16(0, dst );\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_NEG_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT16 dst = READ16(ea);\n\t\t\t\tdst = SUB16(0, dst );\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_NEG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 4:         /* MUL AX, Rm16 */\n\t\t\t{\n\t\t\t\tUINT32 result;\n\t\t\t\tUINT16 src, dst;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_MUL16_ACC_REG);      /* TODO: Correct multiply timing */\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tsrc = READ16(ea);\n\t\t\t\t\tCYCLES(CYCLES_MUL16_ACC_MEM);      /* TODO: Correct multiply timing */\n\t\t\t\t}\n\n\t\t\t\tdst = REG16(AX);\n\t\t\t\tresult = (UINT32)src * (UINT32)dst;\n\t\t\t\tREG16(DX) = (UINT16)(result >> 16);\n\t\t\t\tREG16(AX) = (UINT16)result;\n\n\t\t\t\tm_CF = m_OF = (REG16(DX) != 0);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 5:         /* IMUL AX, Rm16 */\n\t\t\t{\n\t\t\t\tINT32 result;\n\t\t\t\tINT32 src, dst;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tsrc = (INT32)(INT16)LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_IMUL16_ACC_REG);     /* TODO: Correct multiply timing */\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tsrc = (INT32)(INT16)READ16(ea);\n\t\t\t\t\tCYCLES(CYCLES_IMUL16_ACC_MEM);     /* TODO: Correct multiply timing */\n\t\t\t\t}\n\n\t\t\t\tdst = (INT32)(INT16)REG16(AX);\n\t\t\t\tresult = src * dst;\n\n\t\t\t\tREG16(DX) = (UINT16)(result >> 16);\n\t\t\t\tREG16(AX) = (UINT16)result;\n\n\t\t\t\tm_CF = m_OF = !(result == (INT32)(INT16)result);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:         /* DIV AX, Rm16 */\n\t\t\t{\n\t\t\t\tUINT32 quotient, remainder, result;\n\t\t\t\tUINT16 src;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_DIV16_ACC_REG);\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tsrc = READ16(ea);\n\t\t\t\t\tCYCLES(CYCLES_DIV16_ACC_MEM);\n\t\t\t\t}\n\n\t\t\t\tquotient = ((UINT32)(REG16(DX)) << 16) | (UINT32)(REG16(AX));\n\t\t\t\tif( src ) {\n\t\t\t\t\tremainder = quotient % (UINT32)src;\n\t\t\t\t\tresult = quotient / (UINT32)src;\n\t\t\t\t\tif( result > 0xffff ) {\n\t\t\t\t\t\t/* TODO: Divide error */\n\t\t\t\t\t} else {\n\t\t\t\t\t\tREG16(DX) = (UINT16)remainder;\n\t\t\t\t\t\tREG16(AX) = (UINT16)result;\n\n\t\t\t\t\t\t// this flag is actually undefined, enable on non-cyrix\n\t\t\t\t\t\tif (m_cpuid_id0 != 0x69727943)\n\t\t\t\t\t\t\tm_CF = 1;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ti386_trap(0, 0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 7:         /* IDIV AX, Rm16 */\n\t\t\t{\n\t\t\t\tINT32 quotient, remainder, result;\n\t\t\t\tUINT16 src;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_IDIV16_ACC_REG);\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tsrc = READ16(ea);\n\t\t\t\t\tCYCLES(CYCLES_IDIV16_ACC_MEM);\n\t\t\t\t}\n\n\t\t\t\tquotient = (((INT32)REG16(DX)) << 16) | ((UINT32)REG16(AX));\n\t\t\t\tif( src ) {\n\t\t\t\t\tremainder = quotient % (INT32)(INT16)src;\n\t\t\t\t\tresult = quotient / (INT32)(INT16)src;\n\t\t\t\t\tif( result > 0xffff ) {\n\t\t\t\t\t\t/* TODO: Divide error */\n\t\t\t\t\t} else {\n\t\t\t\t\t\tREG16(DX) = (UINT16)remainder;\n\t\t\t\t\t\tREG16(AX) = (UINT16)result;\n\n\t\t\t\t\t\t// this flag is actually undefined, enable on non-cyrix\n\t\t\t\t\t\tif (m_cpuid_id0 != 0x69727943)\n\t\t\t\t\t\t\tm_CF = 1;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ti386_trap(0, 0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(groupFF_16)()        // Opcode 0xff\n{\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:         /* INC Rm16 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\t\t\tdst = INC16(dst);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_INC_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT16 dst = READ16(ea);\n\t\t\t\tdst = INC16(dst);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_INC_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 1:         /* DEC Rm16 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\t\t\tdst = DEC16(dst);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_DEC_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT16 dst = READ16(ea);\n\t\t\t\tdst = DEC16(dst);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_DEC_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 2:         /* CALL Rm16 */\n\t\t\t{\n\t\t\t\tUINT16 address;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_CALL_REG);       /* TODO: Timing = 7 + m */\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\taddress = READ16(ea);\n\t\t\t\t\tCYCLES(CYCLES_CALL_MEM);       /* TODO: Timing = 10 + m */\n\t\t\t\t}\n\t\t\t\tPUSH16(m_eip );\n\t\t\t\tm_eip = address;\n\t\t\t\tCHANGE_PC(m_eip);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 3:         /* CALL FAR Rm16 */\n\t\t\t{\n\t\t\t\tUINT16 address, selector;\n\t\t\t\tif( modrm >= 0xc0 )\n\t\t\t\t{\n\t\t\t\t\treport_invalid_modrm(\"groupFF_16\", modrm);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\taddress = READ16(ea + 0);\n\t\t\t\t\tselector = READ16(ea + 2);\n\t\t\t\t\tCYCLES(CYCLES_CALL_MEM_INTERSEG);      /* TODO: Timing = 10 + m */\n\n\t\t\t\t\tif(PROTECTED_MODE && !V8086_MODE)\n\t\t\t\t\t{\n\t\t\t\t\t\ti386_protected_mode_call(selector,address,1,0);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tPUSH16(m_sreg[CS].selector );\n\t\t\t\t\t\tPUSH16(m_eip );\n\t\t\t\t\t\tm_sreg[CS].selector = selector;\n\t\t\t\t\t\tm_performed_intersegment_jump = 1;\n\t\t\t\t\t\ti386_load_segment_descriptor(CS );\n\t\t\t\t\t\tm_eip = address;\n\t\t\t\t\t\tCHANGE_PC(m_eip);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 4:         /* JMP Rm16 */\n\t\t\t{\n\t\t\t\tUINT16 address;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_JMP_REG);        /* TODO: Timing = 7 + m */\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\taddress = READ16(ea);\n\t\t\t\t\tCYCLES(CYCLES_JMP_MEM);        /* TODO: Timing = 10 + m */\n\t\t\t\t}\n\t\t\t\tm_eip = address;\n\t\t\t\tCHANGE_PC(m_eip);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 5:         /* JMP FAR Rm16 */\n\t\t\t{\n\t\t\t\tUINT16 address, selector;\n\n\t\t\t\tif( modrm >= 0xc0 )\n\t\t\t\t{\n\t\t\t\t\treport_invalid_modrm(\"groupFF_16\", modrm);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\taddress = READ16(ea + 0);\n\t\t\t\t\tselector = READ16(ea + 2);\n\t\t\t\t\tCYCLES(CYCLES_JMP_MEM_INTERSEG);       /* TODO: Timing = 10 + m */\n\t\t\t\t\tif(PROTECTED_MODE && !V8086_MODE)\n\t\t\t\t\t{\n\t\t\t\t\t\ti386_protected_mode_jump(selector,address,1,0);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tm_sreg[CS].selector = selector;\n\t\t\t\t\t\tm_performed_intersegment_jump = 1;\n\t\t\t\t\t\ti386_load_segment_descriptor(CS );\n\t\t\t\t\t\tm_eip = address;\n\t\t\t\t\t\tCHANGE_PC(m_eip);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:         /* PUSH Rm16 */\n\t\t\t{\n\t\t\t\tUINT16 value;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tvalue = LOAD_RM16(modrm);\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tvalue = READ16(ea);\n\t\t\t\t}\n\t\t\t\tPUSH16(value);\n\t\t\t\tCYCLES(CYCLES_PUSH_RM);\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treport_invalid_modrm(\"groupFF_16\", modrm);\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(group0F00_16)()          // Opcode 0x0f 00\n{\n\tUINT32 address, ea;\n\tUINT8 modrm = FETCH();\n\tI386_SREG seg;\n\tUINT8 result;\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:         /* SLDT */\n\t\t\tif ( PROTECTED_MODE && !V8086_MODE )\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tSTORE_RM16(modrm, m_ldtr.segment);\n\t\t\t\t\tCYCLES(CYCLES_SLDT_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t\tWRITE16(ea, m_ldtr.segment);\n\t\t\t\t\tCYCLES(CYCLES_SLDT_MEM);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 1:         /* STR */\n\t\t\tif ( PROTECTED_MODE && !V8086_MODE )\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tSTORE_RM16(modrm, m_task.segment);\n\t\t\t\t\tCYCLES(CYCLES_STR_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t\tWRITE16(ea, m_task.segment);\n\t\t\t\t\tCYCLES(CYCLES_STR_MEM);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 2:         /* LLDT */\n\t\t\tif ( PROTECTED_MODE && !V8086_MODE )\n\t\t\t{\n\t\t\t\tif(m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tm_ldtr.segment = address;\n\t\t\t\t\tCYCLES(CYCLES_LLDT_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t\tm_ldtr.segment = READ16(ea);\n\t\t\t\t\tCYCLES(CYCLES_LLDT_MEM);\n\t\t\t\t}\n\t\t\t\tmemset(&seg, 0, sizeof(seg));\n\t\t\t\tseg.selector = m_ldtr.segment;\n\t\t\t\ti386_load_protected_mode_segment(&seg,NULL);\n\t\t\t\tm_ldtr.limit = seg.limit;\n\t\t\t\tm_ldtr.base = seg.base;\n\t\t\t\tm_ldtr.flags = seg.flags;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 3:         /* LTR */\n\t\t\tif ( PROTECTED_MODE && !V8086_MODE )\n\t\t\t{\n\t\t\t\tif(m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tm_task.segment = address;\n\t\t\t\t\tCYCLES(CYCLES_LTR_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t\tm_task.segment = READ16(ea);\n\t\t\t\t\tCYCLES(CYCLES_LTR_MEM);\n\t\t\t\t}\n\t\t\t\tmemset(&seg, 0, sizeof(seg));\n\t\t\t\tseg.selector = m_task.segment;\n\t\t\t\ti386_load_protected_mode_segment(&seg,NULL);\n\n\t\t\t\tUINT32 addr = ((seg.selector & 4) ? m_ldtr.base : m_gdtr.base) + (seg.selector & ~7) + 5;\n\t\t\t\ti386_translate_address(TRANSLATE_READ, &addr, NULL);\n\t\t\t\twrite_byte(addr, (seg.flags & 0xff) | 2);\n\n\t\t\t\tm_task.limit = seg.limit;\n\t\t\t\tm_task.base = seg.base;\n\t\t\t\tm_task.flags = seg.flags | 2;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 4:  /* VERR */\n\t\t\tif ( PROTECTED_MODE && !V8086_MODE )\n\t\t\t{\n\t\t\t\tresult = 1;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_VERR_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t\taddress = READ16(ea);\n\t\t\t\t\tCYCLES(CYCLES_VERR_MEM);\n\t\t\t\t}\n\t\t\t\tmemset(&seg, 0, sizeof(seg));\n\t\t\t\tseg.selector = address;\n\t\t\t\tresult = i386_load_protected_mode_segment(&seg,NULL);\n\t\t\t\t// check if the segment is a code or data segment (not a special segment type, like a TSS, gate, LDT...)\n\t\t\t\tif(!(seg.flags & 0x10))\n\t\t\t\t\tresult = 0;\n\t\t\t\t// check that the segment is readable\n\t\t\t\tif(seg.flags & 0x10)  // is code or data segment\n\t\t\t\t{\n\t\t\t\t\tif(seg.flags & 0x08)  // is code segment, so check if it's readable\n\t\t\t\t\t{\n\t\t\t\t\t\tif(!(seg.flags & 0x02))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tresult = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{  // check if conforming, these are always readable, regardless of privilege\n\t\t\t\t\t\t\tif(!(seg.flags & 0x04))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t// if not conforming, then we must check privilege levels (TODO: current privilege level check)\n\t\t\t\t\t\t\t\tif(((seg.flags >> 5) & 0x03) < (address & 0x03))\n\t\t\t\t\t\t\t\t\tresult = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// check that the descriptor privilege is greater or equal to the selector's privilege level and the current privilege (TODO)\n\t\t\t\tSetZF(result);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t\tlogerror(\"i386: VERR: Exception - Running in real mode or virtual 8086 mode.\\n\");\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 5:  /* VERW */\n\t\t\tif ( PROTECTED_MODE && !V8086_MODE )\n\t\t\t{\n\t\t\t\tresult = 1;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_VERW_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t\taddress = READ16(ea);\n\t\t\t\t\tCYCLES(CYCLES_VERW_MEM);\n\t\t\t\t}\n\t\t\t\tmemset(&seg, 0, sizeof(seg));\n\t\t\t\tseg.selector = address;\n\t\t\t\tresult = i386_load_protected_mode_segment(&seg,NULL);\n\t\t\t\t// check if the segment is a code or data segment (not a special segment type, like a TSS, gate, LDT...)\n\t\t\t\tif(!(seg.flags & 0x10))\n\t\t\t\t\tresult = 0;\n\t\t\t\t// check that the segment is writable\n\t\t\t\tif(seg.flags & 0x10)  // is code or data segment\n\t\t\t\t{\n\t\t\t\t\tif(seg.flags & 0x08)  // is code segment (and thus, not writable)\n\t\t\t\t\t{\n\t\t\t\t\t\tresult = 0;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{  // is data segment\n\t\t\t\t\t\tif(!(seg.flags & 0x02))\n\t\t\t\t\t\t\tresult = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// check that the descriptor privilege is greater or equal to the selector's privilege level and the current privilege (TODO)\n\t\t\t\tif(((seg.flags >> 5) & 0x03) < (address & 0x03))\n\t\t\t\t\tresult = 0;\n\t\t\t\tSetZF(result);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t\tlogerror(\"i386: VERW: Exception - Running in real mode or virtual 8086 mode.\\n\");\n\t\t\t}\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\treport_invalid_modrm(\"group0F00_16\", modrm);\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(group0F01_16)()      // Opcode 0x0f 01\n{\n\tUINT8 modrm = FETCH();\n\tUINT16 address;\n\tUINT32 ea;\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:         /* SGDT */\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tea = i386_translate(CS, address, 1 );\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t}\n\t\t\t\tWRITE16(ea, m_gdtr.limit);\n\t\t\t\tWRITE32(ea + 2, m_gdtr.base);\n\t\t\t\tCYCLES(CYCLES_SGDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 1:         /* SIDT */\n\t\t\t{\n\t\t\t\tif (modrm >= 0xc0)\n\t\t\t\t{\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tea = i386_translate(CS, address, 1 );\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t}\n\t\t\t\tWRITE16(ea, m_idtr.limit);\n\t\t\t\tWRITE32(ea + 2, m_idtr.base);\n\t\t\t\tCYCLES(CYCLES_SIDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 2:         /* LGDT */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tea = i386_translate(CS, address, 0 );\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t}\n\t\t\t\tm_gdtr.limit = READ16(ea);\n\t\t\t\tm_gdtr.base = READ32(ea + 2) & 0xffffff;\n\t\t\t\tCYCLES(CYCLES_LGDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 3:         /* LIDT */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tea = i386_translate(CS, address, 0 );\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t}\n\t\t\t\tm_idtr.limit = READ16(ea);\n\t\t\t\tm_idtr.base = READ32(ea + 2) & 0xffffff;\n\t\t\t\tCYCLES(CYCLES_LIDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 4:         /* SMSW */\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tSTORE_RM16(modrm, m_cr[0]);\n\t\t\t\t\tCYCLES(CYCLES_SMSW_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t\tWRITE16(ea, m_cr[0]);\n\t\t\t\t\tCYCLES(CYCLES_SMSW_MEM);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 6:         /* LMSW */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tUINT16 b;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tb = LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_LMSW_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t\tCYCLES(CYCLES_LMSW_MEM);\n\t\t\t\tb = READ16(ea);\n\t\t\t\t}\n\t\t\t\tif(PROTECTED_MODE)\n\t\t\t\t\tb |= 0x0001;  // cannot return to real mode using this instruction.\n\t\t\t\tm_cr[0] &= ~0x0000000f;\n\t\t\t\tm_cr[0] |= b & 0x0000000f;\n\t\t\t\tbreak;\n\t\t\t}\n\t\tdefault:\n\t\t\treport_invalid_modrm(\"group0F01_16\", modrm);\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(group0FBA_16)()      // Opcode 0x0f ba\n{\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 4:         /* BT Rm16, i8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\n\t\t\t\tCYCLES(CYCLES_BT_IMM_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\tUINT16 dst = READ16(ea);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\n\t\t\t\tCYCLES(CYCLES_BT_IMM_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 5:         /* BTS Rm16, i8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\t\t\t\tdst |= (1 << bit);\n\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_BTS_IMM_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT16 dst = READ16(ea);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\t\t\t\tdst |= (1 << bit);\n\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_BTS_IMM_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:         /* BTR Rm16, i8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\t\t\t\tdst &= ~(1 << bit);\n\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_BTR_IMM_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT16 dst = READ16(ea);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\t\t\t\tdst &= ~(1 << bit);\n\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_BTR_IMM_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 7:         /* BTC Rm16, i8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\t\t\t\tdst ^= (1 << bit);\n\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_BTC_IMM_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT16 dst = READ16(ea);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\t\t\t\tdst ^= (1 << bit);\n\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_BTC_IMM_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treport_invalid_modrm(\"group0FBA_16\", modrm);\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(lar_r16_rm16)()  // Opcode 0x0f 0x02\n{\n\tUINT8 modrm = FETCH();\n\tI386_SREG seg;\n\tUINT8 type;\n\n\tif(PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\tmemset(&seg,0,sizeof(seg));\n\t\tif(modrm >= 0xc0)\n\t\t{\n\t\t\tseg.selector = LOAD_RM16(modrm);\n\t\t\tCYCLES(CYCLES_LAR_REG);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\tseg.selector = READ16(ea);\n\t\t\tCYCLES(CYCLES_LAR_MEM);\n\t\t}\n\t\tif(seg.selector == 0)\n\t\t{\n\t\t\tSetZF(0);  // not a valid segment\n\t\t//  logerror(\"i386 (%08x): LAR: Selector %04x is invalid type.\\n\",m_pc,seg.selector);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(!i386_load_protected_mode_segment(&seg,NULL))\n\t\t\t{\n\t\t\t\tSetZF(0);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tUINT8 DPL = (seg.flags >> 5) & 3;\n\t\t\tif(((DPL < m_CPL) || (DPL < (seg.selector & 3))) && ((seg.flags & 0x1c) != 0x1c))\n\t\t\t{\n\t\t\t\tSetZF(0);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(!(seg.flags & 0x10))  // special segment\n\t\t\t{\n\t\t\t\t// check for invalid segment types\n\t\t\t\ttype = seg.flags & 0x000f;\n\t\t\t\tif(type == 0x00 || type == 0x08 || type == 0x0a || type == 0x0d)\n\t\t\t\t{\n\t\t\t\t\tSetZF(0);  // invalid segment type\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tSTORE_REG16(modrm,(seg.flags << 8) & 0xff00);\n\t\t\t\t\tSetZF(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{  // data or code segment (both are valid for LAR)\n\t\t\t\tSTORE_REG16(modrm,(seg.flags << 8) & 0xff00);\n\t\t\t\tSetZF(1);\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t{\n\t\t// illegal opcode\n\t\ti386_trap(6,0, 0);\n\t\tlogerror(\"i386: LAR: Exception - running in real mode or virtual 8086 mode.\\n\");\n\t}\n}\n\nstatic void I386OP(lsl_r16_rm16)()  // Opcode 0x0f 0x03\n{\n\tUINT8 modrm = FETCH();\n\tUINT32 limit;\n\tI386_SREG seg;\n\n\tif(PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\tmemset(&seg, 0, sizeof(seg));\n\t\tif(modrm >= 0xc0)\n\t\t{\n\t\t\tseg.selector = LOAD_RM16(modrm);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\tseg.selector = READ16(ea);\n\t\t}\n\t\tif(seg.selector == 0)\n\t\t{\n\t\t\tSetZF(0);  // not a valid segment\n\t\t}\n\t\telse\n\t\t{\n\t\t\tUINT8 type;\n\t\t\tif(!i386_load_protected_mode_segment(&seg,NULL))\n\t\t\t{\n\t\t\t\tSetZF(0);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tUINT8 DPL = (seg.flags >> 5) & 3;\n\t\t\tif(((DPL < m_CPL) || (DPL < (seg.selector & 3))) && ((seg.flags & 0x1c) != 0x1c))\n\t\t\t{\n\t\t\t\tSetZF(0);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttype = seg.flags & 0x1f;\n\t\t\tswitch(type)\n\t\t\t{\n\t\t\tcase 0:\n\t\t\tcase 4:\n\t\t\tcase 5:\n\t\t\tcase 6:\n\t\t\tcase 7:\n\t\t\tcase 8:\n\t\t\tcase 10:\n\t\t\tcase 12:\n\t\t\tcase 13:\n\t\t\tcase 14:\n\t\t\tcase 15:\n\t\t\t\tSetZF(0);\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\tlimit = seg.limit;\n\t\t\t\tSTORE_REG16(modrm,limit & 0x0000ffff);\n\t\t\t\tSetZF(1);\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t\ti386_trap(6, 0, 0);\n}\n\nstatic void I386OP(bound_r16_m16_m16)() // Opcode 0x62\n{\n\tUINT8 modrm;\n\tINT16 val, low, high;\n\n\tmodrm = FETCH();\n\n\tif (modrm >= 0xc0)\n\t{\n\t\tlow = high = LOAD_RM16(modrm);\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tlow = READ16(ea + 0);\n\t\thigh = READ16(ea + 2);\n\t}\n\tval = LOAD_REG16(modrm);\n\n\tif ((val < low) || (val > high))\n\t{\n\t\tCYCLES(CYCLES_BOUND_OUT_RANGE);\n\t\ti386_trap(5, 0, 0);\n\t}\n\telse\n\t{\n\t\tCYCLES(CYCLES_BOUND_IN_RANGE);\n\t}\n}\n\nstatic void I386OP(retf16)()            // Opcode 0xcb\n{\n\tif(PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\ti386_protected_mode_retf(0,0);\n\t}\n\telse\n\t{\n\t\tm_eip = POP16();\n\t\tm_sreg[CS].selector = POP16();\n\t\ti386_load_segment_descriptor(CS );\n\t\tCHANGE_PC(m_eip);\n\t}\n\n\tCYCLES(CYCLES_RET_INTERSEG);\n}\n\nstatic void I386OP(retf_i16)()          // Opcode 0xca\n{\n\tUINT16 count = FETCH16();\n\n\tif(PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\ti386_protected_mode_retf(count,0);\n\t}\n\telse\n\t{\n\t\tm_eip = POP16();\n\t\tm_sreg[CS].selector = POP16();\n\t\ti386_load_segment_descriptor(CS );\n\t\tCHANGE_PC(m_eip);\n\t\tREG16(SP) += count;\n\t}\n\n\tCYCLES(CYCLES_RET_IMM_INTERSEG);\n}\n\nstatic bool I386OP(load_far_pointer16)(int s)\n{\n\tUINT8 modrm = FETCH();\n\tUINT16 selector;\n\n\tif( modrm >= 0xc0 ) {\n\t\t//logerror(\"i386: load_far_pointer16 NYI\\n\"); // don't log, NT will use this a lot\n\t\ti386_trap(6, 0, 0);\n\t\treturn false;\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tSTORE_REG16(modrm, READ16(ea + 0));\n\t\tselector = READ16(ea + 2);\n\t\ti386_sreg_load(selector,s,NULL);\n\t}\n\treturn true;\n}\n\nstatic void I386OP(lds16)()             // Opcode 0xc5\n{\n\tif(I386OP(load_far_pointer16)(DS)) {\n\t\tCYCLES(CYCLES_LDS);\n\t}\n}\n\nstatic void I386OP(lss16)()             // Opcode 0x0f 0xb2\n{\n\tif(I386OP(load_far_pointer16)(SS)) {\n\t\tCYCLES(CYCLES_LSS);\n\t}\n}\n\nstatic void I386OP(les16)()             // Opcode 0xc4\n{\n\tif(I386OP(load_far_pointer16)(ES)) {\n\t\tCYCLES(CYCLES_LES);\n\t}\n}\n\nstatic void I386OP(lfs16)()             // Opcode 0x0f 0xb4\n{\n\tif(I386OP(load_far_pointer16)(FS)) {\n\t\tCYCLES(CYCLES_LFS);\n\t}\n}\n\nstatic void I386OP(lgs16)()             // Opcode 0x0f 0xb5\n{\n\tif(I386OP(load_far_pointer16)(GS)) {\n\t\tCYCLES(CYCLES_LGS);\n\t}\n}\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386/i386op32.c",
    "content": "// license:BSD-3-Clause\n// copyright-holders:Ville Linde, Barry Rodewald, Carl, Phil Bennett\nstatic UINT32 I386OP(shift_rotate32)(UINT8 modrm, UINT32 value, UINT8 shift)\n{\n\tUINT32 dst, src;\n\tdst = value;\n\tsrc = value;\n\n\tif( shift == 0 ) {\n\t\tCYCLES_RM(modrm, 3, 7);\n\t} else if( shift == 1 ) {\n\t\tswitch( (modrm >> 3) & 0x7 )\n\t\t{\n\t\t\tcase 0:         /* ROL rm32, 1 */\n\t\t\t\tm_CF = (src & 0x80000000) ? 1 : 0;\n\t\t\t\tdst = (src << 1) + m_CF;\n\t\t\t\tm_OF = ((src ^ dst) & 0x80000000) ? 1 : 0;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 1:         /* ROR rm32, 1 */\n\t\t\t\tm_CF = (src & 0x1) ? 1 : 0;\n\t\t\t\tdst = (m_CF << 31) | (src >> 1);\n\t\t\t\tm_OF = ((src ^ dst) & 0x80000000) ? 1 : 0;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 2:         /* RCL rm32, 1 */\n\t\t\t\tdst = (src << 1) + m_CF;\n\t\t\t\tm_CF = (src & 0x80000000) ? 1 : 0;\n\t\t\t\tm_OF = ((src ^ dst) & 0x80000000) ? 1 : 0;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 3:         /* RCR rm32, 1 */\n\t\t\t\tdst = (m_CF << 31) | (src >> 1);\n\t\t\t\tm_CF = src & 0x1;\n\t\t\t\tm_OF = ((src ^ dst) & 0x80000000) ? 1 : 0;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 4:         /* SHL/SAL rm32, 1 */\n\t\t\tcase 6:\n\t\t\t\tdst = src << 1;\n\t\t\t\tm_CF = (src & 0x80000000) ? 1 : 0;\n\t\t\t\tm_OF = (((m_CF << 31) ^ dst) & 0x80000000) ? 1 : 0;\n\t\t\t\tSetSZPF32(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 5:         /* SHR rm32, 1 */\n\t\t\t\tdst = src >> 1;\n\t\t\t\tm_CF = src & 0x1;\n\t\t\t\tm_OF = (src & 0x80000000) ? 1 : 0;\n\t\t\t\tSetSZPF32(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 7:         /* SAR rm32, 1 */\n\t\t\t\tdst = (INT32)(src) >> 1;\n\t\t\t\tm_CF = src & 0x1;\n\t\t\t\tm_OF = 0;\n\t\t\t\tSetSZPF32(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t}\n\n\t} else {\n\t\tshift &= 31;\n\t\tswitch( (modrm >> 3) & 0x7 )\n\t\t{\n\t\t\tcase 0:         /* ROL rm32, i8 */\n\t\t\t\tdst = ((src & ((UINT32)0xffffffff >> shift)) << shift) |\n\t\t\t\t\t\t((src & ((UINT32)0xffffffff << (32-shift))) >> (32-shift));\n\t\t\t\tm_CF = dst & 0x1;\n\t\t\t\tm_OF = (dst & 1) ^ (dst >> 31);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 1:         /* ROR rm32, i8 */\n\t\t\t\tdst = ((src & ((UINT32)0xffffffff << shift)) >> shift) |\n\t\t\t\t\t\t((src & ((UINT32)0xffffffff >> (32-shift))) << (32-shift));\n\t\t\t\tm_CF = (dst >> 31) & 0x1;\n\t\t\t\tm_OF = ((dst >> 31) ^ (dst >> 30)) & 1;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 2:         /* RCL rm32, i8 */\n\t\t\t\tdst = ((src & ((UINT32)0xffffffff >> shift)) << shift) |\n\t\t\t\t\t\t((src & ((UINT32)0xffffffff << (33-shift))) >> (33-shift)) |\n\t\t\t\t\t\t(m_CF << (shift-1));\n\t\t\t\tm_CF = (src >> (32-shift)) & 0x1;\n\t\t\t\tm_OF = m_CF ^ ((dst >> 31) & 1);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 3:         /* RCR rm32, i8 */\n\t\t\t\tdst = ((src & ((UINT32)0xffffffff << shift)) >> shift) |\n\t\t\t\t\t\t((src & ((UINT32)0xffffffff >> (32-shift))) << (33-shift)) |\n\t\t\t\t\t\t(m_CF << (32-shift));\n\t\t\t\tm_CF = (src >> (shift-1)) & 0x1;\n\t\t\t\tm_OF = ((dst >> 31) ^ (dst >> 30)) & 1;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 4:         /* SHL/SAL rm32, i8 */\n\t\t\tcase 6:\n\t\t\t\tdst = src << shift;\n\t\t\t\tm_CF = (src & (1 << (32-shift))) ? 1 : 0;\n\t\t\t\tSetSZPF32(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 5:         /* SHR rm32, i8 */\n\t\t\t\tdst = src >> shift;\n\t\t\t\tm_CF = (src & (1 << (shift-1))) ? 1 : 0;\n\t\t\t\tSetSZPF32(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 7:         /* SAR rm32, i8 */\n\t\t\t\tdst = (INT32)src >> shift;\n\t\t\t\tm_CF = (src & (1 << (shift-1))) ? 1 : 0;\n\t\t\t\tSetSZPF32(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t}\n\n\t}\n\treturn dst;\n}\n\n\n\nstatic void I386OP(adc_rm32_r32)()      // Opcode 0x11\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = LOAD_RM32(modrm);\n\t\tdst = ADC32(dst, src, m_CF);\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = READ32(ea);\n\t\tdst = ADC32(dst, src, m_CF);\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(adc_r32_rm32)()      // Opcode 0x13\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM32(modrm);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = ADC32(dst, src, m_CF);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ32(ea);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = ADC32(dst, src, m_CF);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(adc_eax_i32)()       // Opcode 0x15\n{\n\tUINT32 src, dst;\n\tsrc = FETCH32();\n\tdst = REG32(EAX);\n\tdst = ADC32(dst, src, m_CF);\n\tREG32(EAX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(add_rm32_r32)()      // Opcode 0x01\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = LOAD_RM32(modrm);\n\t\tdst = ADD32(dst, src);\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = READ32(ea);\n\t\tdst = ADD32(dst, src);\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(add_r32_rm32)()      // Opcode 0x03\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM32(modrm);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = ADD32(dst, src);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ32(ea);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = ADD32(dst, src);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(add_eax_i32)()       // Opcode 0x05\n{\n\tUINT32 src, dst;\n\tsrc = FETCH32();\n\tdst = REG32(EAX);\n\tdst = ADD32(dst, src);\n\tREG32(EAX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(and_rm32_r32)()      // Opcode 0x21\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = LOAD_RM32(modrm);\n\t\tdst = AND32(dst, src);\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = READ32(ea);\n\t\tdst = AND32(dst, src);\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(and_r32_rm32)()      // Opcode 0x23\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM32(modrm);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = AND32(dst, src);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ32(ea);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = AND32(dst, src);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(and_eax_i32)()       // Opcode 0x25\n{\n\tUINT32 src, dst;\n\tsrc = FETCH32();\n\tdst = REG32(EAX);\n\tdst = AND32(dst, src);\n\tREG32(EAX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(bsf_r32_rm32)()      // Opcode 0x0f bc\n{\n\tUINT32 src, dst, temp;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM32(modrm);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ32(ea);\n\t}\n\n\tdst = 0;\n\n\tif( src == 0 ) {\n\t\tm_ZF = 1;\n\t} else {\n\t\tm_ZF = 0;\n\t\ttemp = 0;\n\t\twhile( (src & (1 << temp)) == 0 ) {\n\t\t\ttemp++;\n\t\t\tdst = temp;\n\t\t\tCYCLES(CYCLES_BSF);\n\t\t}\n\t\tSTORE_REG32(modrm, dst);\n\t}\n\tCYCLES(CYCLES_BSF_BASE);\n}\n\nstatic void I386OP(bsr_r32_rm32)()      // Opcode 0x0f bd\n{\n\tUINT32 src, dst, temp;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM32(modrm);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ32(ea);\n\t}\n\n\tdst = 0;\n\n\tif( src == 0 ) {\n\t\tm_ZF = 1;\n\t} else {\n\t\tm_ZF = 0;\n\t\tdst = temp = 31;\n\t\twhile( (src & (1 << temp)) == 0 ) {\n\t\t\ttemp--;\n\t\t\tdst = temp;\n\t\t\tCYCLES(CYCLES_BSR);\n\t\t}\n\t\tSTORE_REG32(modrm, dst);\n\t}\n\tCYCLES(CYCLES_BSR_BASE);\n}\n\nstatic void I386OP(bt_rm32_r32)()       // Opcode 0x0f a3\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\tUINT32 bit = LOAD_REG32(modrm);\n\n\t\tif( dst & (1 << bit) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\n\t\tCYCLES(CYCLES_BT_REG_REG);\n\t} else {\n\t\tUINT8 segment;\n\t\tUINT32 ea = GetNonTranslatedEA(modrm,&segment);\n\t\tUINT32 bit = LOAD_REG32(modrm);\n\t\tea += 4*(bit/32);\n\t\tea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),0);\n\t\tbit %= 32;\n\t\tUINT32 dst = READ32(ea);\n\n\t\tif( dst & (1 << bit) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\n\t\tCYCLES(CYCLES_BT_REG_MEM);\n\t}\n}\n\nstatic void I386OP(btc_rm32_r32)()      // Opcode 0x0f bb\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\tUINT32 bit = LOAD_REG32(modrm);\n\n\t\tif( dst & (1 << bit) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\t\tdst ^= (1 << bit);\n\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_BTC_REG_REG);\n\t} else {\n\t\tUINT8 segment;\n\t\tUINT32 ea = GetNonTranslatedEA(modrm,&segment);\n\t\tUINT32 bit = LOAD_REG32(modrm);\n\t\tea += 4*(bit/32);\n\t\tea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),1);\n\t\tbit %= 32;\n\t\tUINT32 dst = READ32(ea);\n\n\t\tif( dst & (1 << bit) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\t\tdst ^= (1 << bit);\n\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_BTC_REG_MEM);\n\t}\n}\n\nstatic void I386OP(btr_rm32_r32)()      // Opcode 0x0f b3\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\tUINT32 bit = LOAD_REG32(modrm);\n\n\t\tif( dst & (1 << bit) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\t\tdst &= ~(1 << bit);\n\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_BTR_REG_REG);\n\t} else {\n\t\tUINT8 segment;\n\t\tUINT32 ea = GetNonTranslatedEA(modrm,&segment);\n\t\tUINT32 bit = LOAD_REG32(modrm);\n\t\tea += 4*(bit/32);\n\t\tea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),1);\n\t\tbit %= 32;\n\t\tUINT32 dst = READ32(ea);\n\n\t\tif( dst & (1 << bit) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\t\tdst &= ~(1 << bit);\n\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_BTR_REG_MEM);\n\t}\n}\n\nstatic void I386OP(bts_rm32_r32)()      // Opcode 0x0f ab\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\tUINT32 bit = LOAD_REG32(modrm);\n\n\t\tif( dst & (1 << bit) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\t\tdst |= (1 << bit);\n\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_BTS_REG_REG);\n\t} else {\n\t\tUINT8 segment;\n\t\tUINT32 ea = GetNonTranslatedEA(modrm,&segment);\n\t\tUINT32 bit = LOAD_REG32(modrm);\n\t\tea += 4*(bit/32);\n\t\tea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),1);\n\t\tbit %= 32;\n\t\tUINT32 dst = READ32(ea);\n\n\t\tif( dst & (1 << bit) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\t\tdst |= (1 << bit);\n\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_BTS_REG_MEM);\n\t}\n}\n\nstatic void I386OP(call_abs32)()        // Opcode 0x9a\n{\n\tUINT32 offset = FETCH32();\n\tUINT16 ptr = FETCH16();\n\n\tif(PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\ti386_protected_mode_call(ptr,offset,0,1);\n\t}\n\telse\n\t{\n\t\tPUSH32(m_sreg[CS].selector );\n\t\tPUSH32(m_eip );\n\t\tm_sreg[CS].selector = ptr;\n\t\tm_performed_intersegment_jump = 1;\n\t\tm_eip = offset;\n\t\ti386_load_segment_descriptor(CS);\n\t}\n\tCYCLES(CYCLES_CALL_INTERSEG);\n\tCHANGE_PC(m_eip);\n}\n\nstatic void I386OP(call_rel32)()        // Opcode 0xe8\n{\n\tINT32 disp = FETCH32();\n\tPUSH32(m_eip );\n\tm_eip += disp;\n\tCHANGE_PC(m_eip);\n\tCYCLES(CYCLES_CALL);       /* TODO: Timing = 7 + m */\n}\n\nstatic void I386OP(cdq)()               // Opcode 0x99\n{\n\tif( REG32(EAX) & 0x80000000 ) {\n\t\tREG32(EDX) = 0xffffffff;\n\t} else {\n\t\tREG32(EDX) = 0x00000000;\n\t}\n\tCYCLES(CYCLES_CWD);\n}\n\nstatic void I386OP(cmp_rm32_r32)()      // Opcode 0x39\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = LOAD_RM32(modrm);\n\t\tSUB32(dst, src);\n\t\tCYCLES(CYCLES_CMP_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = READ32(ea);\n\t\tSUB32(dst, src);\n\t\tCYCLES(CYCLES_CMP_REG_MEM);\n\t}\n}\n\nstatic void I386OP(cmp_r32_rm32)()      // Opcode 0x3b\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM32(modrm);\n\t\tdst = LOAD_REG32(modrm);\n\t\tSUB32(dst, src);\n\t\tCYCLES(CYCLES_CMP_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ32(ea);\n\t\tdst = LOAD_REG32(modrm);\n\t\tSUB32(dst, src);\n\t\tCYCLES(CYCLES_CMP_MEM_REG);\n\t}\n}\n\nstatic void I386OP(cmp_eax_i32)()       // Opcode 0x3d\n{\n\tUINT32 src, dst;\n\tsrc = FETCH32();\n\tdst = REG32(EAX);\n\tSUB32(dst, src);\n\tCYCLES(CYCLES_CMP_IMM_ACC);\n}\n\nstatic void I386OP(cmpsd)()             // Opcode 0xa7\n{\n\tUINT32 eas, ead, src, dst;\n\tif( m_segment_prefix ) {\n\t\teas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t} else {\n\t\teas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t}\n\tead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 0 );\n\tsrc = READ32(eas);\n\tdst = READ32(ead);\n\tSUB32(src,dst);\n\tBUMP_SI(4);\n\tBUMP_DI(4);\n\tCYCLES(CYCLES_CMPS);\n}\n\nstatic void I386OP(cwde)()              // Opcode 0x98\n{\n\tREG32(EAX) = (INT32)((INT16)REG16(AX));\n\tCYCLES(CYCLES_CBW);\n}\n\nstatic void I386OP(dec_eax)()           // Opcode 0x48\n{\n\tREG32(EAX) = DEC32(REG32(EAX) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_ecx)()           // Opcode 0x49\n{\n\tREG32(ECX) = DEC32(REG32(ECX) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_edx)()           // Opcode 0x4a\n{\n\tREG32(EDX) = DEC32(REG32(EDX) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_ebx)()           // Opcode 0x4b\n{\n\tREG32(EBX) = DEC32(REG32(EBX) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_esp)()           // Opcode 0x4c\n{\n\tREG32(ESP) = DEC32(REG32(ESP) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_ebp)()           // Opcode 0x4d\n{\n\tREG32(EBP) = DEC32(REG32(EBP) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_esi)()           // Opcode 0x4e\n{\n\tREG32(ESI) = DEC32(REG32(ESI) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_edi)()           // Opcode 0x4f\n{\n\tREG32(EDI) = DEC32(REG32(EDI) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(imul_r32_rm32)()     // Opcode 0x0f af\n{\n\tUINT8 modrm = FETCH();\n\tINT64 result;\n\tINT64 src, dst;\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = (INT64)(INT32)LOAD_RM32(modrm);\n\t\tCYCLES(CYCLES_IMUL32_REG_REG);     /* TODO: Correct multiply timing */\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = (INT64)(INT32)READ32(ea);\n\t\tCYCLES(CYCLES_IMUL32_REG_REG);     /* TODO: Correct multiply timing */\n\t}\n\n\tdst = (INT64)(INT32)LOAD_REG32(modrm);\n\tresult = src * dst;\n\n\tSTORE_REG32(modrm, (UINT32)result);\n\n\tm_CF = m_OF = !(result == (INT64)(INT32)result);\n}\n\nstatic void I386OP(imul_r32_rm32_i32)() // Opcode 0x69\n{\n\tUINT8 modrm = FETCH();\n\tINT64 result;\n\tINT64 src, dst;\n\tif( modrm >= 0xc0 ) {\n\t\tdst = (INT64)(INT32)LOAD_RM32(modrm);\n\t\tCYCLES(CYCLES_IMUL32_REG_IMM_REG);     /* TODO: Correct multiply timing */\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tdst = (INT64)(INT32)READ32(ea);\n\t\tCYCLES(CYCLES_IMUL32_MEM_IMM_REG);     /* TODO: Correct multiply timing */\n\t}\n\n\tsrc = (INT64)(INT32)FETCH32();\n\tresult = src * dst;\n\n\tSTORE_REG32(modrm, (UINT32)result);\n\n\tm_CF = m_OF = !(result == (INT64)(INT32)result);\n}\n\nstatic void I386OP(imul_r32_rm32_i8)()  // Opcode 0x6b\n{\n\tUINT8 modrm = FETCH();\n\tINT64 result;\n\tINT64 src, dst;\n\tif( modrm >= 0xc0 ) {\n\t\tdst = (INT64)(INT32)LOAD_RM32(modrm);\n\t\tCYCLES(CYCLES_IMUL32_REG_IMM_REG);     /* TODO: Correct multiply timing */\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tdst = (INT64)(INT32)READ32(ea);\n\t\tCYCLES(CYCLES_IMUL32_MEM_IMM_REG);     /* TODO: Correct multiply timing */\n\t}\n\n\tsrc = (INT64)(INT8)FETCH();\n\tresult = src * dst;\n\n\tSTORE_REG32(modrm, (UINT32)result);\n\n\tm_CF = m_OF = !(result == (INT64)(INT32)result);\n}\n\nstatic void I386OP(in_eax_i8)()         // Opcode 0xe5\n{\n\tUINT16 port = FETCH();\n\tUINT32 data = READPORT32(port);\n\tREG32(EAX) = data;\n\tCYCLES(CYCLES_IN_VAR);\n}\n\nstatic void I386OP(in_eax_dx)()         // Opcode 0xed\n{\n\tUINT16 port = REG16(DX);\n\tUINT32 data = READPORT32(port);\n\tREG32(EAX) = data;\n\tCYCLES(CYCLES_IN);\n}\n\nstatic void I386OP(inc_eax)()           // Opcode 0x40\n{\n\tREG32(EAX) = INC32(REG32(EAX) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_ecx)()           // Opcode 0x41\n{\n\tREG32(ECX) = INC32(REG32(ECX) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_edx)()           // Opcode 0x42\n{\n\tREG32(EDX) = INC32(REG32(EDX) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_ebx)()           // Opcode 0x43\n{\n\tREG32(EBX) = INC32(REG32(EBX) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_esp)()           // Opcode 0x44\n{\n\tREG32(ESP) = INC32(REG32(ESP) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_ebp)()           // Opcode 0x45\n{\n\tREG32(EBP) = INC32(REG32(EBP) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_esi)()           // Opcode 0x46\n{\n\tREG32(ESI) = INC32(REG32(ESI) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_edi)()           // Opcode 0x47\n{\n\tREG32(EDI) = INC32(REG32(EDI) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(iret32)()            // Opcode 0xcf\n{\n\tUINT32 old = m_eip;\n\n\tif( PROTECTED_MODE )\n\t{\n\t\ti386_protected_mode_iret(1);\n\t}\n\telse\n\t{\n\t\t/* TODO: #SS(0) exception */\n\t\t/* TODO: #GP(0) exception */\n\t\tm_eip = POP32();\n\t\tm_sreg[CS].selector = POP32() & 0xffff;\n\t\tset_flags(POP32() );\n\t\ti386_load_segment_descriptor(CS);\n\t\tCHANGE_PC(m_eip);\n\t}\n\tCYCLES(CYCLES_IRET);\n\n\t// MS-DOS system call\n\tif(IRET_TOP <= old && old < (IRET_TOP + IRET_SIZE)) {\n\t\tmsdos_syscall(old - IRET_TOP);\n\t}\n}\n\nstatic void I386OP(ja_rel32)()          // Opcode 0x0f 87\n{\n\tINT32 disp = FETCH32();\n\tif( m_CF == 0 && m_ZF == 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jbe_rel32)()         // Opcode 0x0f 86\n{\n\tINT32 disp = FETCH32();\n\tif( m_CF != 0 || m_ZF != 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jc_rel32)()          // Opcode 0x0f 82\n{\n\tINT32 disp = FETCH32();\n\tif( m_CF != 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jg_rel32)()          // Opcode 0x0f 8f\n{\n\tINT32 disp = FETCH32();\n\tif( m_ZF == 0 && (m_SF == m_OF) ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jge_rel32)()         // Opcode 0x0f 8d\n{\n\tINT32 disp = FETCH32();\n\tif(m_SF == m_OF) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jl_rel32)()          // Opcode 0x0f 8c\n{\n\tINT32 disp = FETCH32();\n\tif( (m_SF != m_OF) ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jle_rel32)()         // Opcode 0x0f 8e\n{\n\tINT32 disp = FETCH32();\n\tif( m_ZF != 0 || (m_SF != m_OF) ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jnc_rel32)()         // Opcode 0x0f 83\n{\n\tINT32 disp = FETCH32();\n\tif( m_CF == 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jno_rel32)()         // Opcode 0x0f 81\n{\n\tINT32 disp = FETCH32();\n\tif( m_OF == 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jnp_rel32)()         // Opcode 0x0f 8b\n{\n\tINT32 disp = FETCH32();\n\tif( m_PF == 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jns_rel32)()         // Opcode 0x0f 89\n{\n\tINT32 disp = FETCH32();\n\tif( m_SF == 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jnz_rel32)()         // Opcode 0x0f 85\n{\n\tINT32 disp = FETCH32();\n\tif( m_ZF == 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jo_rel32)()          // Opcode 0x0f 80\n{\n\tINT32 disp = FETCH32();\n\tif( m_OF != 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jp_rel32)()          // Opcode 0x0f 8a\n{\n\tINT32 disp = FETCH32();\n\tif( m_PF != 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(js_rel32)()          // Opcode 0x0f 88\n{\n\tINT32 disp = FETCH32();\n\tif( m_SF != 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jz_rel32)()          // Opcode 0x0f 84\n{\n\tINT32 disp = FETCH32();\n\tif( m_ZF != 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jcxz32)()            // Opcode 0xe3\n{\n\tINT8 disp = FETCH();\n\tint val = (m_address_size)?(REG32(ECX) == 0):(REG16(CX) == 0);\n\tif( val ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCXZ);       /* TODO: Timing = 9 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCXZ_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jmp_rel32)()         // Opcode 0xe9\n{\n\tUINT32 disp = FETCH32();\n\t/* TODO: Segment limit */\n\tm_eip += disp;\n\tCHANGE_PC(m_eip);\n\tCYCLES(CYCLES_JMP);        /* TODO: Timing = 7 + m */\n}\n\nstatic void I386OP(jmp_abs32)()         // Opcode 0xea\n{\n\tUINT32 address = FETCH32();\n\tUINT16 segment = FETCH16();\n\n\tif( PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\ti386_protected_mode_jump(segment,address,0,1);\n\t}\n\telse\n\t{\n\t\tm_eip = address;\n\t\tm_sreg[CS].selector = segment;\n\t\tm_performed_intersegment_jump = 1;\n\t\ti386_load_segment_descriptor(CS);\n\t\tCHANGE_PC(m_eip);\n\t}\n\tCYCLES(CYCLES_JMP_INTERSEG);\n}\n\nstatic void I386OP(lea32)()             // Opcode 0x8d\n{\n\tUINT8 modrm = FETCH();\n\tUINT32 ea = GetNonTranslatedEA(modrm,NULL);\n\tif (!m_address_size)\n\t{\n\t\tea &= 0xffff;\n\t}\n\tSTORE_REG32(modrm, ea);\n\tCYCLES(CYCLES_LEA);\n}\n\nstatic void I386OP(enter32)()           // Opcode 0xc8\n{\n\tUINT16 framesize = FETCH16();\n\tUINT8 level = FETCH() % 32;\n\tUINT8 x;\n\tUINT32 frameptr;\n\tPUSH32(REG32(EBP));\n\tif(!STACK_32BIT)\n\t\tframeptr = REG16(SP);\n\telse\n\t\tframeptr = REG32(ESP);\n\n\tif(level > 0)\n\t{\n\t\tfor(x=1;x<=level-1;x++)\n\t\t{\n\t\t\tUINT32 addr;\n\t\t\tif(!STACK_32BIT)\n\t\t\t{\n\t\t\t\tREG16(BP) -= 4;\n\t\t\t\taddr = REG16(BP);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tREG32(EBP) -= 4;\n\t\t\t\taddr = REG32(EBP);\n\t\t\t}\n\t\t\tPUSH32(READ32(i386_translate(SS, addr, 0)));\n\t\t}\n\t\tPUSH32(frameptr);\n\t}\n\tREG32(EBP) = frameptr;\n\tif(!STACK_32BIT)\n\t\tREG16(SP) -= framesize;\n\telse\n\t\tREG32(ESP) -= framesize;\n\tCYCLES(CYCLES_ENTER);\n}\n\nstatic void I386OP(leave32)()           // Opcode 0xc9\n{\n\tif(!STACK_32BIT)\n\t\tREG16(SP) = REG16(BP);\n\telse\n\t\tREG32(ESP) = REG32(EBP);\n\tREG32(EBP) = POP32();\n\tCYCLES(CYCLES_LEAVE);\n}\n\nstatic void I386OP(lodsd)()             // Opcode 0xad\n{\n\tUINT32 eas;\n\tif( m_segment_prefix ) {\n\t\teas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t} else {\n\t\teas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t}\n\tREG32(EAX) = READ32(eas);\n\tBUMP_SI(4);\n\tCYCLES(CYCLES_LODS);\n}\n\nstatic void I386OP(loop32)()            // Opcode 0xe2\n{\n\tINT8 disp = FETCH();\n\tINT32 reg = (m_address_size)?--REG32(ECX):--REG16(CX);\n\tif( reg != 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t}\n\tCYCLES(CYCLES_LOOP);       /* TODO: Timing = 11 + m */\n}\n\nstatic void I386OP(loopne32)()          // Opcode 0xe0\n{\n\tINT8 disp = FETCH();\n\tINT32 reg = (m_address_size)?--REG32(ECX):--REG16(CX);\n\tif( reg != 0 && m_ZF == 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t}\n\tCYCLES(CYCLES_LOOPNZ);     /* TODO: Timing = 11 + m */\n}\n\nstatic void I386OP(loopz32)()           // Opcode 0xe1\n{\n\tINT8 disp = FETCH();\n\tINT32 reg = (m_address_size)?--REG32(ECX):--REG16(CX);\n\tif( reg != 0 && m_ZF != 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t}\n\tCYCLES(CYCLES_LOOPZ);      /* TODO: Timing = 11 + m */\n}\n\nstatic void I386OP(mov_rm32_r32)()      // Opcode 0x89\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG32(modrm);\n\t\tSTORE_RM32(modrm, src);\n\t\tCYCLES(CYCLES_MOV_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG32(modrm);\n\t\tWRITE32(ea, src);\n\t\tCYCLES(CYCLES_MOV_REG_MEM);\n\t}\n}\n\nstatic void I386OP(mov_r32_rm32)()      // Opcode 0x8b\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM32(modrm);\n\t\tSTORE_REG32(modrm, src);\n\t\tCYCLES(CYCLES_MOV_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ32(ea);\n\t\tSTORE_REG32(modrm, src);\n\t\tCYCLES(CYCLES_MOV_MEM_REG);\n\t}\n}\n\nstatic void I386OP(mov_rm32_i32)()      // Opcode 0xc7\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 value = FETCH32();\n\t\tSTORE_RM32(modrm, value);\n\t\tCYCLES(CYCLES_MOV_IMM_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT32 value = FETCH32();\n\t\tWRITE32(ea, value);\n\t\tCYCLES(CYCLES_MOV_IMM_MEM);\n\t}\n}\n\nstatic void I386OP(mov_eax_m32)()       // Opcode 0xa1\n{\n\tUINT32 offset, ea;\n\tif( m_address_size ) {\n\t\toffset = FETCH32();\n\t} else {\n\t\toffset = FETCH16();\n\t}\n\tif( m_segment_prefix ) {\n\t\tea = i386_translate(m_segment_override, offset, 0 );\n\t} else {\n\t\tea = i386_translate(DS, offset, 0 );\n\t}\n\tREG32(EAX) = READ32(ea);\n\tCYCLES(CYCLES_MOV_MEM_ACC);\n}\n\nstatic void I386OP(mov_m32_eax)()       // Opcode 0xa3\n{\n\tUINT32 offset, ea;\n\tif( m_address_size ) {\n\t\toffset = FETCH32();\n\t} else {\n\t\toffset = FETCH16();\n\t}\n\tif( m_segment_prefix ) {\n\t\tea = i386_translate(m_segment_override, offset, 1 );\n\t} else {\n\t\tea = i386_translate(DS, offset, 1 );\n\t}\n\tWRITE32(ea, REG32(EAX) );\n\tCYCLES(CYCLES_MOV_ACC_MEM);\n}\n\nstatic void I386OP(mov_eax_i32)()       // Opcode 0xb8\n{\n\tREG32(EAX) = FETCH32();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_ecx_i32)()       // Opcode 0xb9\n{\n\tREG32(ECX) = FETCH32();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_edx_i32)()       // Opcode 0xba\n{\n\tREG32(EDX) = FETCH32();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_ebx_i32)()       // Opcode 0xbb\n{\n\tREG32(EBX) = FETCH32();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_esp_i32)()       // Opcode 0xbc\n{\n\tREG32(ESP) = FETCH32();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_ebp_i32)()       // Opcode 0xbd\n{\n\tREG32(EBP) = FETCH32();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_esi_i32)()       // Opcode 0xbe\n{\n\tREG32(ESI) = FETCH32();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_edi_i32)()       // Opcode 0xbf\n{\n\tREG32(EDI) = FETCH32();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(movsd)()             // Opcode 0xa5\n{\n\tUINT32 eas, ead, v;\n\tif( m_segment_prefix ) {\n\t\teas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t} else {\n\t\teas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t}\n\tead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 );\n\tv = READ32(eas);\n\tWRITE32(ead, v);\n\tBUMP_SI(4);\n\tBUMP_DI(4);\n\tCYCLES(CYCLES_MOVS);\n}\n\nstatic void I386OP(movsx_r32_rm8)()     // Opcode 0x0f be\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tINT32 src = (INT8)LOAD_RM8(modrm);\n\t\tSTORE_REG32(modrm, src);\n\t\tCYCLES(CYCLES_MOVSX_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tINT32 src = (INT8)READ8(ea);\n\t\tSTORE_REG32(modrm, src);\n\t\tCYCLES(CYCLES_MOVSX_MEM_REG);\n\t}\n}\n\nstatic void I386OP(movsx_r32_rm16)()    // Opcode 0x0f bf\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tINT32 src = (INT16)LOAD_RM16(modrm);\n\t\tSTORE_REG32(modrm, src);\n\t\tCYCLES(CYCLES_MOVSX_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tINT32 src = (INT16)READ16(ea);\n\t\tSTORE_REG32(modrm, src);\n\t\tCYCLES(CYCLES_MOVSX_MEM_REG);\n\t}\n}\n\nstatic void I386OP(movzx_r32_rm8)()     // Opcode 0x0f b6\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 src = (UINT8)LOAD_RM8(modrm);\n\t\tSTORE_REG32(modrm, src);\n\t\tCYCLES(CYCLES_MOVZX_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tUINT32 src = (UINT8)READ8(ea);\n\t\tSTORE_REG32(modrm, src);\n\t\tCYCLES(CYCLES_MOVZX_MEM_REG);\n\t}\n}\n\nstatic void I386OP(movzx_r32_rm16)()    // Opcode 0x0f b7\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 src = (UINT16)LOAD_RM16(modrm);\n\t\tSTORE_REG32(modrm, src);\n\t\tCYCLES(CYCLES_MOVZX_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tUINT32 src = (UINT16)READ16(ea);\n\t\tSTORE_REG32(modrm, src);\n\t\tCYCLES(CYCLES_MOVZX_MEM_REG);\n\t}\n}\n\nstatic void I386OP(or_rm32_r32)()       // Opcode 0x09\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = LOAD_RM32(modrm);\n\t\tdst = OR32(dst, src);\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = READ32(ea);\n\t\tdst = OR32(dst, src);\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(or_r32_rm32)()       // Opcode 0x0b\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM32(modrm);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = OR32(dst, src);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ32(ea);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = OR32(dst, src);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(or_eax_i32)()        // Opcode 0x0d\n{\n\tUINT32 src, dst;\n\tsrc = FETCH32();\n\tdst = REG32(EAX);\n\tdst = OR32(dst, src);\n\tREG32(EAX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(out_eax_i8)()        // Opcode 0xe7\n{\n\tUINT16 port = FETCH();\n\tUINT32 data = REG32(EAX);\n\tWRITEPORT32(port, data);\n\tCYCLES(CYCLES_OUT_VAR);\n}\n\nstatic void I386OP(out_eax_dx)()        // Opcode 0xef\n{\n\tUINT16 port = REG16(DX);\n\tUINT32 data = REG32(EAX);\n\tWRITEPORT32(port, data);\n\tCYCLES(CYCLES_OUT);\n}\n\nstatic void I386OP(pop_eax)()           // Opcode 0x58\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+3) == 0)\n\t\tREG32(EAX) = POP32();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_ecx)()           // Opcode 0x59\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+3) == 0)\n\t\tREG32(ECX) = POP32();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_edx)()           // Opcode 0x5a\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+3) == 0)\n\t\tREG32(EDX) = POP32();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_ebx)()           // Opcode 0x5b\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+3) == 0)\n\t\tREG32(EBX) = POP32();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_esp)()           // Opcode 0x5c\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+3) == 0)\n\t\tREG32(ESP) = POP32();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_ebp)()           // Opcode 0x5d\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+3) == 0)\n\t\tREG32(EBP) = POP32();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_esi)()           // Opcode 0x5e\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+3) == 0)\n\t\tREG32(ESI) = POP32();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_edi)()           // Opcode 0x5f\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+3) == 0)\n\t\tREG32(EDI) = POP32();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic bool I386OP(pop_seg32)(int segment)\n{\n\tUINT32 ea, offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tUINT32 value;\n\tbool fault;\n\tif(i386_limit_check(SS,offset+3) == 0)\n\t{\n\t\tea = i386_translate(SS, offset, 0);\n\t\tvalue = READ32(ea);\n\t\ti386_sreg_load(value, segment, &fault);\n\t\tif(fault) return false;\n\t\tif(STACK_32BIT)\n\t\t\tREG32(ESP) = offset + 4;\n\t\telse\n\t\t\tREG16(SP) = offset + 4;\n\t}\n\telse\n\t{\n\t\tm_ext = 1;\n\t\ti386_trap_with_error(FAULT_SS,0,0,0);\n\t\treturn false;\n\t}\n\tCYCLES(CYCLES_POP_SREG);\n\treturn true;\n}\n\nstatic void I386OP(pop_ds32)()          // Opcode 0x1f\n{\n\tI386OP(pop_seg32)(DS);\n}\n\nstatic void I386OP(pop_es32)()          // Opcode 0x07\n{\n\tI386OP(pop_seg32)(ES);\n}\n\nstatic void I386OP(pop_fs32)()          // Opcode 0x0f a1\n{\n\tI386OP(pop_seg32)(FS);\n}\n\nstatic void I386OP(pop_gs32)()          // Opcode 0x0f a9\n{\n\tI386OP(pop_seg32)(GS);\n}\n\nstatic void I386OP(pop_ss32)()          // Opcode 0x17\n{\n\tif(!I386OP(pop_seg32)(SS)) return;\n\tif(m_IF != 0) // if external interrupts are enabled\n\t{\n\t\tm_IF = 0;  // reset IF for the next instruction\n\t\tm_delayed_interrupt_enable = 1;\n\t}\n}\n\nstatic void I386OP(pop_rm32)()          // Opcode 0x8f\n{\n\tUINT8 modrm = FETCH();\n\tUINT32 value;\n\tUINT32 ea, offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+3) == 0)\n\t{\n\t\t// be careful here, if the write references the esp register\n\t\t// it expects the post-pop value but esp must be wound back\n\t\t// if the write faults\n\t\tUINT32 temp_sp = REG32(ESP);\n\t\tvalue = POP32();\n\n\t\tif( modrm >= 0xc0 ) {\n\t\t\tSTORE_RM32(modrm, value);\n\t\t} else {\n\t\t\ttry\n\t\t\t{\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tWRITE32(ea, value);\n\t\t\t}\n\t\t\tcatch(UINT64 e)\n\t\t\t{\n\t\t\t\tREG32(ESP) = temp_sp;\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_RM);\n}\n\nstatic void I386OP(popad)()             // Opcode 0x61\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+31) == 0)\n\t{\n\t\tREG32(EDI) = POP32();\n\t\tREG32(ESI) = POP32();\n\t\tREG32(EBP) = POP32();\n\t\tREG32(ESP) += 4;\n\t\tREG32(EBX) = POP32();\n\t\tREG32(EDX) = POP32();\n\t\tREG32(ECX) = POP32();\n\t\tREG32(EAX) = POP32();\n\t}\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POPA);\n}\n\nstatic void I386OP(popfd)()             // Opcode 0x9d\n{\n\tUINT32 value;\n\tUINT32 current = get_flags();\n\tUINT8 IOPL = (current >> 12) & 0x03;\n\tUINT32 mask = 0x00257fd5;  // VM, VIP and VIF cannot be set by POPF/POPFD\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\n\t// IOPL can only change if CPL is 0\n\tif(m_CPL != 0)\n\t\tmask &= ~0x00003000;\n\n\t// IF can only change if CPL is at least as privileged as IOPL\n\tif(m_CPL > IOPL)\n\t\tmask &= ~0x00000200;\n\n\tif(V8086_MODE)\n\t{\n\t\tif(IOPL < 3)\n\t\t{\n\t\t\tlogerror(\"POPFD(%08x): IOPL < 3 while in V86 mode.\\n\",m_pc);\n\t\t\tFAULT(FAULT_GP,0)  // #GP(0)\n\t\t}\n\t\tmask &= ~0x00003000;  // IOPL cannot be changed while in V8086 mode\n\t}\n\n\tif(i386_limit_check(SS,offset+3) == 0)\n\t{\n\t\tvalue = POP32();\n\t\tvalue &= ~0x00010000;  // RF will always return zero\n\t\tset_flags((current & ~mask) | (value & mask));  // mask out reserved bits\n\t}\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POPF);\n}\n\nstatic void I386OP(push_eax)()          // Opcode 0x50\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(REG32(EAX) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_ecx)()          // Opcode 0x51\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(REG32(ECX) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_edx)()          // Opcode 0x52\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(REG32(EDX) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_ebx)()          // Opcode 0x53\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(REG32(EBX) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_esp)()          // Opcode 0x54\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(REG32(ESP) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_ebp)()          // Opcode 0x55\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(REG32(EBP) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_esi)()          // Opcode 0x56\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(REG32(ESI) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_edi)()          // Opcode 0x57\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(REG32(EDI) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_cs32)()         // Opcode 0x0e\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(m_sreg[CS].selector );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_SREG);\n}\n\nstatic void I386OP(push_ds32)()         // Opcode 0x1e\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(m_sreg[DS].selector );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_SREG);\n}\n\nstatic void I386OP(push_es32)()         // Opcode 0x06\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(m_sreg[ES].selector );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_SREG);\n}\n\nstatic void I386OP(push_fs32)()         // Opcode 0x0f a0\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(m_sreg[FS].selector );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_SREG);\n}\n\nstatic void I386OP(push_gs32)()         // Opcode 0x0f a8\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(m_sreg[GS].selector );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_SREG);\n}\n\nstatic void I386OP(push_ss32)()         // Opcode 0x16\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(m_sreg[SS].selector );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_SREG);\n}\n\nstatic void I386OP(push_i32)()          // Opcode 0x68\n{\n\tUINT32 value = FETCH32();\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(value);\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_IMM);\n}\n\nstatic void I386OP(pushad)()            // Opcode 0x60\n{\n\tUINT32 temp = REG32(ESP);\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 32;\n\telse\n\t\toffset = (REG16(SP) - 32) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t{\n\t\tPUSH32(REG32(EAX) );\n\t\tPUSH32(REG32(ECX) );\n\t\tPUSH32(REG32(EDX) );\n\t\tPUSH32(REG32(EBX) );\n\t\tPUSH32(temp );\n\t\tPUSH32(REG32(EBP) );\n\t\tPUSH32(REG32(ESI) );\n\t\tPUSH32(REG32(EDI) );\n\t}\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSHA);\n}\n\nstatic void I386OP(pushfd)()            // Opcode 0x9c\n{\n\tif(!m_IOP1 && !m_IOP2 && V8086_MODE)\n\t\tFAULT(FAULT_GP,0)\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(get_flags() & 0x00fcffff );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSHF);\n}\n\nstatic void I386OP(ret_near32_i16)()    // Opcode 0xc2\n{\n\tINT16 disp = FETCH16();\n\tm_eip = POP32();\n\tREG32(ESP) += disp;\n\tCHANGE_PC(m_eip);\n\tCYCLES(CYCLES_RET_IMM);        /* TODO: Timing = 10 + m */\n}\n\nstatic void I386OP(ret_near32)()        // Opcode 0xc3\n{\n\tm_eip = POP32();\n\tCHANGE_PC(m_eip);\n\tCYCLES(CYCLES_RET);        /* TODO: Timing = 10 + m */\n}\n\nstatic void I386OP(sbb_rm32_r32)()      // Opcode 0x19\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = LOAD_RM32(modrm);\n\t\tdst = SBB32(dst, src, m_CF);\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = READ32(ea);\n\t\tdst = SBB32(dst, src, m_CF);\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(sbb_r32_rm32)()      // Opcode 0x1b\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM32(modrm);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = SBB32(dst, src, m_CF);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ32(ea);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = SBB32(dst, src, m_CF);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(sbb_eax_i32)()       // Opcode 0x1d\n{\n\tUINT32 src, dst;\n\tsrc = FETCH32();\n\tdst = REG32(EAX);\n\tdst = SBB32(dst, src, m_CF);\n\tREG32(EAX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(scasd)()             // Opcode 0xaf\n{\n\tUINT32 eas, src, dst;\n\teas = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 0 );\n\tsrc = READ32(eas);\n\tdst = REG32(EAX);\n\tSUB32(dst, src);\n\tBUMP_DI(4);\n\tCYCLES(CYCLES_SCAS);\n}\n\nstatic void I386OP(shld32_i8)()         // Opcode 0x0f a4\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\tUINT32 upper = LOAD_REG32(modrm);\n\t\tUINT8 shift = FETCH();\n\t\tshift &= 31;\n\t\tif( shift == 0 ) {\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (32-shift))) ? 1 : 0;\n\t\t\tdst = (dst << shift) | (upper >> (32-shift));\n\t\t\tm_OF = m_CF ^ (dst >> 31);\n\t\t\tSetSZPF32(dst);\n\t\t}\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_SHLD_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT32 dst = READ32(ea);\n\t\tUINT32 upper = LOAD_REG32(modrm);\n\t\tUINT8 shift = FETCH();\n\t\tshift &= 31;\n\t\tif( shift == 0 ) {\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (32-shift))) ? 1 : 0;\n\t\t\tdst = (dst << shift) | (upper >> (32-shift));\n\t\t\tm_OF = m_CF ^ (dst >> 31);\n\t\t\tSetSZPF32(dst);\n\t\t}\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_SHLD_MEM);\n\t}\n}\n\nstatic void I386OP(shld32_cl)()         // Opcode 0x0f a5\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\tUINT32 upper = LOAD_REG32(modrm);\n\t\tUINT8 shift = REG8(CL);\n\t\tshift &= 31;\n\t\tif( shift == 0 ) {\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (32-shift))) ? 1 : 0;\n\t\t\tdst = (dst << shift) | (upper >> (32-shift));\n\t\t\tm_OF = m_CF ^ (dst >> 31);\n\t\t\tSetSZPF32(dst);\n\t\t}\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_SHLD_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT32 dst = READ32(ea);\n\t\tUINT32 upper = LOAD_REG32(modrm);\n\t\tUINT8 shift = REG8(CL);\n\t\tshift &= 31;\n\t\tif( shift == 0 ) {\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (32-shift))) ? 1 : 0;\n\t\t\tdst = (dst << shift) | (upper >> (32-shift));\n\t\t\tm_OF = m_CF ^ (dst >> 31);\n\t\t\tSetSZPF32(dst);\n\t\t}\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_SHLD_MEM);\n\t}\n}\n\nstatic void I386OP(shrd32_i8)()         // Opcode 0x0f ac\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\tUINT32 upper = LOAD_REG32(modrm);\n\t\tUINT8 shift = FETCH();\n\t\tshift &= 31;\n\t\tif( shift == 0 ) {\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (shift-1))) ? 1 : 0;\n\t\t\tdst = (dst >> shift) | (upper << (32-shift));\n\t\t\tm_OF = ((dst >> 31) ^ (dst >> 30)) & 1;\n\t\t\tSetSZPF32(dst);\n\t\t}\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_SHRD_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT32 dst = READ32(ea);\n\t\tUINT32 upper = LOAD_REG32(modrm);\n\t\tUINT8 shift = FETCH();\n\t\tshift &= 31;\n\t\tif( shift == 0 ) {\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (shift-1))) ? 1 : 0;\n\t\t\tdst = (dst >> shift) | (upper << (32-shift));\n\t\t\tm_OF = ((dst >> 31) ^ (dst >> 30)) & 1;\n\t\t\tSetSZPF32(dst);\n\t\t}\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_SHRD_MEM);\n\t}\n}\n\nstatic void I386OP(shrd32_cl)()         // Opcode 0x0f ad\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\tUINT32 upper = LOAD_REG32(modrm);\n\t\tUINT8 shift = REG8(CL);\n\t\tshift &= 31;\n\t\tif( shift == 0 ) {\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (shift-1))) ? 1 : 0;\n\t\t\tdst = (dst >> shift) | (upper << (32-shift));\n\t\t\tm_OF = ((dst >> 31) ^ (dst >> 30)) & 1;\n\t\t\tSetSZPF32(dst);\n\t\t}\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_SHRD_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT32 dst = READ32(ea);\n\t\tUINT32 upper = LOAD_REG32(modrm);\n\t\tUINT8 shift = REG8(CL);\n\t\tshift &= 31;\n\t\tif( shift == 0 ) {\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (shift-1))) ? 1 : 0;\n\t\t\tdst = (dst >> shift) | (upper << (32-shift));\n\t\t\tm_OF = ((dst >> 31) ^ (dst >> 30)) & 1;\n\t\t\tSetSZPF32(dst);\n\t\t}\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_SHRD_MEM);\n\t}\n}\n\nstatic void I386OP(stosd)()             // Opcode 0xab\n{\n\tUINT32 eas = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 );\n\tWRITE32(eas, REG32(EAX));\n\tBUMP_DI(4);\n\tCYCLES(CYCLES_STOS);\n}\n\nstatic void I386OP(sub_rm32_r32)()      // Opcode 0x29\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = LOAD_RM32(modrm);\n\t\tdst = SUB32(dst, src);\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = READ32(ea);\n\t\tdst = SUB32(dst, src);\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(sub_r32_rm32)()      // Opcode 0x2b\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM32(modrm);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = SUB32(dst, src);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = READ32(ea);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = SUB32(dst, src);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(sub_eax_i32)()       // Opcode 0x2d\n{\n\tUINT32 src, dst;\n\tsrc = FETCH32();\n\tdst = REG32(EAX);\n\tdst = SUB32(dst, src);\n\tREG32(EAX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(test_eax_i32)()      // Opcode 0xa9\n{\n\tUINT32 src = FETCH32();\n\tUINT32 dst = REG32(EAX);\n\tdst = src & dst;\n\tSetSZPF32(dst);\n\tm_CF = 0;\n\tm_OF = 0;\n\tCYCLES(CYCLES_TEST_IMM_ACC);\n}\n\nstatic void I386OP(test_rm32_r32)()     // Opcode 0x85\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = LOAD_RM32(modrm);\n\t\tdst = src & dst;\n\t\tSetSZPF32(dst);\n\t\tm_CF = 0;\n\t\tm_OF = 0;\n\t\tCYCLES(CYCLES_TEST_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = READ32(ea);\n\t\tdst = src & dst;\n\t\tSetSZPF32(dst);\n\t\tm_CF = 0;\n\t\tm_OF = 0;\n\t\tCYCLES(CYCLES_TEST_REG_MEM);\n\t}\n}\n\nstatic void I386OP(xchg_eax_ecx)()      // Opcode 0x91\n{\n\tUINT32 temp;\n\ttemp = REG32(EAX);\n\tREG32(EAX) = REG32(ECX);\n\tREG32(ECX) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_eax_edx)()      // Opcode 0x92\n{\n\tUINT32 temp;\n\ttemp = REG32(EAX);\n\tREG32(EAX) = REG32(EDX);\n\tREG32(EDX) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_eax_ebx)()      // Opcode 0x93\n{\n\tUINT32 temp;\n\ttemp = REG32(EAX);\n\tREG32(EAX) = REG32(EBX);\n\tREG32(EBX) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_eax_esp)()      // Opcode 0x94\n{\n\tUINT32 temp;\n\ttemp = REG32(EAX);\n\tREG32(EAX) = REG32(ESP);\n\tREG32(ESP) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_eax_ebp)()      // Opcode 0x95\n{\n\tUINT32 temp;\n\ttemp = REG32(EAX);\n\tREG32(EAX) = REG32(EBP);\n\tREG32(EBP) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_eax_esi)()      // Opcode 0x96\n{\n\tUINT32 temp;\n\ttemp = REG32(EAX);\n\tREG32(EAX) = REG32(ESI);\n\tREG32(ESI) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_eax_edi)()      // Opcode 0x97\n{\n\tUINT32 temp;\n\ttemp = REG32(EAX);\n\tREG32(EAX) = REG32(EDI);\n\tREG32(EDI) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_r32_rm32)()     // Opcode 0x87\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 src = LOAD_RM32(modrm);\n\t\tUINT32 dst = LOAD_REG32(modrm);\n\t\tSTORE_REG32(modrm, src);\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_XCHG_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT32 src = READ32(ea);\n\t\tUINT32 dst = LOAD_REG32(modrm);\n\t\tWRITE32(ea, dst);\n\t\tSTORE_REG32(modrm, src);\n\t\tCYCLES(CYCLES_XCHG_REG_MEM);\n\t}\n}\n\nstatic void I386OP(xor_rm32_r32)()      // Opcode 0x31\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = LOAD_RM32(modrm);\n\t\tdst = XOR32(dst, src);\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = READ32(ea);\n\t\tdst = XOR32(dst, src);\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(xor_r32_rm32)()      // Opcode 0x33\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM32(modrm);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = XOR32(dst, src);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ32(ea);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = XOR32(dst, src);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(xor_eax_i32)()       // Opcode 0x35\n{\n\tUINT32 src, dst;\n\tsrc = FETCH32();\n\tdst = REG32(EAX);\n\tdst = XOR32(dst, src);\n\tREG32(EAX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\n\n\nstatic void I386OP(group81_32)()        // Opcode 0x81\n{\n\tUINT32 ea;\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:     // ADD Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = ADD32(dst, src);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = ADD32(dst, src);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 1:     // OR Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = OR32(dst, src);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = OR32(dst, src);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 2:     // ADC Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = ADC32(dst, src, m_CF);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = ADC32(dst, src, m_CF);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 3:     // SBB Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = SBB32(dst, src, m_CF);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = SBB32(dst, src, m_CF);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 4:     // AND Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = AND32(dst, src);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = AND32(dst, src);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 5:     // SUB Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = SUB32(dst, src);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = SUB32(dst, src);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:     // XOR Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = XOR32(dst, src);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = XOR32(dst, src);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 7:     // CMP Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tSUB32(dst, src);\n\t\t\t\tCYCLES(CYCLES_CMP_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tSUB32(dst, src);\n\t\t\t\tCYCLES(CYCLES_CMP_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(group83_32)()        // Opcode 0x83\n{\n\tUINT32 ea;\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:     // ADD Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tdst = ADD32(dst, src);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tdst = ADD32(dst, src);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 1:     // OR Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tdst = OR32(dst, src);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tdst = OR32(dst, src);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 2:     // ADC Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tdst = ADC32(dst, src, m_CF);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tdst = ADC32(dst, src, m_CF);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 3:     // SBB Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = ((UINT32)(INT32)(INT8)FETCH());\n\t\t\t\tdst = SBB32(dst, src, m_CF);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = ((UINT32)(INT32)(INT8)FETCH());\n\t\t\t\tdst = SBB32(dst, src, m_CF);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 4:     // AND Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tdst = AND32(dst, src);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tdst = AND32(dst, src);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 5:     // SUB Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tdst = SUB32(dst, src);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tdst = SUB32(dst, src);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:     // XOR Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tdst = XOR32(dst, src);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tdst = XOR32(dst, src);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 7:     // CMP Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tSUB32(dst, src);\n\t\t\t\tCYCLES(CYCLES_CMP_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tSUB32(dst, src);\n\t\t\t\tCYCLES(CYCLES_CMP_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(groupC1_32)()        // Opcode 0xc1\n{\n\tUINT32 dst;\n\tUINT8 modrm = FETCH();\n\tUINT8 shift;\n\n\tif( modrm >= 0xc0 ) {\n\t\tdst = LOAD_RM32(modrm);\n\t\tshift = FETCH() & 0x1f;\n\t\tdst = i386_shift_rotate32(modrm, dst, shift);\n\t\tSTORE_RM32(modrm, dst);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tdst = READ32(ea);\n\t\tshift = FETCH() & 0x1f;\n\t\tdst = i386_shift_rotate32(modrm, dst, shift);\n\t\tWRITE32(ea, dst);\n\t}\n}\n\nstatic void I386OP(groupD1_32)()        // Opcode 0xd1\n{\n\tUINT32 dst;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 ) {\n\t\tdst = LOAD_RM32(modrm);\n\t\tdst = i386_shift_rotate32(modrm, dst, 1);\n\t\tSTORE_RM32(modrm, dst);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tdst = READ32(ea);\n\t\tdst = i386_shift_rotate32(modrm, dst, 1);\n\t\tWRITE32(ea, dst);\n\t}\n}\n\nstatic void I386OP(groupD3_32)()        // Opcode 0xd3\n{\n\tUINT32 dst;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 ) {\n\t\tdst = LOAD_RM32(modrm);\n\t\tdst = i386_shift_rotate32(modrm, dst, REG8(CL));\n\t\tSTORE_RM32(modrm, dst);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tdst = READ32(ea);\n\t\tdst = i386_shift_rotate32(modrm, dst, REG8(CL));\n\t\tWRITE32(ea, dst);\n\t}\n}\n\nstatic void I386OP(groupF7_32)()        // Opcode 0xf7\n{\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:         /* TEST Rm32, i32 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\t\t\tUINT32 src = FETCH32();\n\t\t\t\tdst &= src;\n\t\t\t\tm_CF = m_OF = m_AF = 0;\n\t\t\t\tSetSZPF32(dst);\n\t\t\t\tCYCLES(CYCLES_TEST_IMM_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\tUINT32 dst = READ32(ea);\n\t\t\t\tUINT32 src = FETCH32();\n\t\t\t\tdst &= src;\n\t\t\t\tm_CF = m_OF = m_AF = 0;\n\t\t\t\tSetSZPF32(dst);\n\t\t\t\tCYCLES(CYCLES_TEST_IMM_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 2:         /* NOT Rm32 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\t\t\tdst = ~dst;\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_NOT_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT32 dst = READ32(ea);\n\t\t\t\tdst = ~dst;\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_NOT_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 3:         /* NEG Rm32 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\t\t\tdst = SUB32(0, dst );\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_NEG_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT32 dst = READ32(ea);\n\t\t\t\tdst = SUB32(0, dst );\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_NEG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 4:         /* MUL EAX, Rm32 */\n\t\t\t{\n\t\t\t\tUINT64 result;\n\t\t\t\tUINT32 src, dst;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\t\t\tCYCLES(CYCLES_MUL32_ACC_REG);      /* TODO: Correct multiply timing */\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tsrc = READ32(ea);\n\t\t\t\t\tCYCLES(CYCLES_MUL32_ACC_MEM);      /* TODO: Correct multiply timing */\n\t\t\t\t}\n\n\t\t\t\tdst = REG32(EAX);\n\t\t\t\tresult = (UINT64)src * (UINT64)dst;\n\t\t\t\tREG32(EDX) = (UINT32)(result >> 32);\n\t\t\t\tREG32(EAX) = (UINT32)result;\n\n\t\t\t\tm_CF = m_OF = (REG32(EDX) != 0);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 5:         /* IMUL EAX, Rm32 */\n\t\t\t{\n\t\t\t\tINT64 result;\n\t\t\t\tINT64 src, dst;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tsrc = (INT64)(INT32)LOAD_RM32(modrm);\n\t\t\t\t\tCYCLES(CYCLES_IMUL32_ACC_REG);     /* TODO: Correct multiply timing */\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tsrc = (INT64)(INT32)READ32(ea);\n\t\t\t\t\tCYCLES(CYCLES_IMUL32_ACC_MEM);     /* TODO: Correct multiply timing */\n\t\t\t\t}\n\n\t\t\t\tdst = (INT64)(INT32)REG32(EAX);\n\t\t\t\tresult = src * dst;\n\n\t\t\t\tREG32(EDX) = (UINT32)(result >> 32);\n\t\t\t\tREG32(EAX) = (UINT32)result;\n\n\t\t\t\tm_CF = m_OF = !(result == (INT64)(INT32)result);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:         /* DIV EAX, Rm32 */\n\t\t\t{\n\t\t\t\tUINT64 quotient, remainder, result;\n\t\t\t\tUINT32 src;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\t\t\tCYCLES(CYCLES_DIV32_ACC_REG);\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tsrc = READ32(ea);\n\t\t\t\t\tCYCLES(CYCLES_DIV32_ACC_MEM);\n\t\t\t\t}\n\n\t\t\t\tquotient = ((UINT64)(REG32(EDX)) << 32) | (UINT64)(REG32(EAX));\n\t\t\t\tif( src ) {\n\t\t\t\t\tremainder = quotient % (UINT64)src;\n\t\t\t\t\tresult = quotient / (UINT64)src;\n\t\t\t\t\tif( result > 0xffffffff ) {\n\t\t\t\t\t\t/* TODO: Divide error */\n\t\t\t\t\t} else {\n\t\t\t\t\t\tREG32(EDX) = (UINT32)remainder;\n\t\t\t\t\t\tREG32(EAX) = (UINT32)result;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ti386_trap(0, 0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 7:         /* IDIV EAX, Rm32 */\n\t\t\t{\n\t\t\t\tINT64 quotient, remainder, result;\n\t\t\t\tUINT32 src;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\t\t\tCYCLES(CYCLES_IDIV32_ACC_REG);\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tsrc = READ32(ea);\n\t\t\t\t\tCYCLES(CYCLES_IDIV32_ACC_MEM);\n\t\t\t\t}\n\n\t\t\t\tquotient = (((INT64)REG32(EDX)) << 32) | ((UINT64)REG32(EAX));\n\t\t\t\tif( src ) {\n\t\t\t\t\tremainder = quotient % (INT64)(INT32)src;\n\t\t\t\t\tresult = quotient / (INT64)(INT32)src;\n\t\t\t\t\tif( result > 0xffffffff ) {\n\t\t\t\t\t\t/* TODO: Divide error */\n\t\t\t\t\t} else {\n\t\t\t\t\t\tREG32(EDX) = (UINT32)remainder;\n\t\t\t\t\t\tREG32(EAX) = (UINT32)result;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ti386_trap(0, 0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(groupFF_32)()        // Opcode 0xff\n{\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:         /* INC Rm32 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\t\t\tdst = INC32(dst);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_INC_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT32 dst = READ32(ea);\n\t\t\t\tdst = INC32(dst);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_INC_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 1:         /* DEC Rm32 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\t\t\tdst = DEC32(dst);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_DEC_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT32 dst = READ32(ea);\n\t\t\t\tdst = DEC32(dst);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_DEC_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 2:         /* CALL Rm32 */\n\t\t\t{\n\t\t\t\tUINT32 address;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tCYCLES(CYCLES_CALL_REG);       /* TODO: Timing = 7 + m */\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\taddress = READ32(ea);\n\t\t\t\t\tCYCLES(CYCLES_CALL_MEM);       /* TODO: Timing = 10 + m */\n\t\t\t\t}\n\t\t\t\tPUSH32(m_eip );\n\t\t\t\tm_eip = address;\n\t\t\t\tCHANGE_PC(m_eip);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 3:         /* CALL FAR Rm32 */\n\t\t\t{\n\t\t\t\tUINT16 selector;\n\t\t\t\tUINT32 address;\n\n\t\t\t\tif( modrm >= 0xc0 )\n\t\t\t\t{\n\t\t\t\t\treport_invalid_modrm(\"groupFF_32\", modrm);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\taddress = READ32(ea + 0);\n\t\t\t\t\tselector = READ16(ea + 4);\n\t\t\t\t\tCYCLES(CYCLES_CALL_MEM_INTERSEG);      /* TODO: Timing = 10 + m */\n\t\t\t\t\tif(PROTECTED_MODE && !V8086_MODE)\n\t\t\t\t\t{\n\t\t\t\t\t\ti386_protected_mode_call(selector,address,1,1);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tPUSH32(m_sreg[CS].selector );\n\t\t\t\t\t\tPUSH32(m_eip );\n\t\t\t\t\t\tm_sreg[CS].selector = selector;\n\t\t\t\t\t\tm_performed_intersegment_jump = 1;\n\t\t\t\t\t\ti386_load_segment_descriptor(CS );\n\t\t\t\t\t\tm_eip = address;\n\t\t\t\t\t\tCHANGE_PC(m_eip);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 4:         /* JMP Rm32 */\n\t\t\t{\n\t\t\t\tUINT32 address;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tCYCLES(CYCLES_JMP_REG);        /* TODO: Timing = 7 + m */\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\taddress = READ32(ea);\n\t\t\t\t\tCYCLES(CYCLES_JMP_MEM);        /* TODO: Timing = 10 + m */\n\t\t\t\t}\n\t\t\t\tm_eip = address;\n\t\t\t\tCHANGE_PC(m_eip);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 5:         /* JMP FAR Rm32 */\n\t\t\t{\n\t\t\t\tUINT16 selector;\n\t\t\t\tUINT32 address;\n\n\t\t\t\tif( modrm >= 0xc0 )\n\t\t\t\t{\n\t\t\t\t\treport_invalid_modrm(\"groupFF_32\", modrm);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\taddress = READ32(ea + 0);\n\t\t\t\t\tselector = READ16(ea + 4);\n\t\t\t\t\tCYCLES(CYCLES_JMP_MEM_INTERSEG);       /* TODO: Timing = 10 + m */\n\t\t\t\t\tif(PROTECTED_MODE && !V8086_MODE)\n\t\t\t\t\t{\n\t\t\t\t\t\ti386_protected_mode_jump(selector,address,1,1);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tm_sreg[CS].selector = selector;\n\t\t\t\t\t\tm_performed_intersegment_jump = 1;\n\t\t\t\t\t\ti386_load_segment_descriptor(CS );\n\t\t\t\t\t\tm_eip = address;\n\t\t\t\t\t\tCHANGE_PC(m_eip);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:         /* PUSH Rm32 */\n\t\t\t{\n\t\t\t\tUINT32 value;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tvalue = LOAD_RM32(modrm);\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tvalue = READ32(ea);\n\t\t\t\t}\n\t\t\t\tPUSH32(value);\n\t\t\t\tCYCLES(CYCLES_PUSH_RM);\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treport_invalid_modrm(\"groupFF_32\", modrm);\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(group0F00_32)()          // Opcode 0x0f 00\n{\n\tUINT32 address, ea;\n\tUINT8 modrm = FETCH();\n\tI386_SREG seg;\n\tUINT8 result;\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:         /* SLDT */\n\t\t\tif ( PROTECTED_MODE && !V8086_MODE )\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tSTORE_RM32(modrm, m_ldtr.segment);\n\t\t\t\t\tCYCLES(CYCLES_SLDT_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t\tWRITE16(ea, m_ldtr.segment);\n\t\t\t\t\tCYCLES(CYCLES_SLDT_MEM);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 1:         /* STR */\n\t\t\tif ( PROTECTED_MODE && !V8086_MODE )\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tSTORE_RM32(modrm, m_task.segment);\n\t\t\t\t\tCYCLES(CYCLES_STR_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t\tWRITE16(ea, m_task.segment);\n\t\t\t\t\tCYCLES(CYCLES_STR_MEM);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 2:         /* LLDT */\n\t\t\tif ( PROTECTED_MODE && !V8086_MODE )\n\t\t\t{\n\t\t\t\tif(m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tm_ldtr.segment = address;\n\t\t\t\t\tCYCLES(CYCLES_LLDT_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t\tm_ldtr.segment = READ32(ea);\n\t\t\t\t\tCYCLES(CYCLES_LLDT_MEM);\n\t\t\t\t}\n\t\t\t\tmemset(&seg, 0, sizeof(seg));\n\t\t\t\tseg.selector = m_ldtr.segment;\n\t\t\t\ti386_load_protected_mode_segment(&seg,NULL);\n\t\t\t\tm_ldtr.limit = seg.limit;\n\t\t\t\tm_ldtr.base = seg.base;\n\t\t\t\tm_ldtr.flags = seg.flags;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 3:         /* LTR */\n\t\t\tif ( PROTECTED_MODE && !V8086_MODE )\n\t\t\t{\n\t\t\t\tif(m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tm_task.segment = address;\n\t\t\t\t\tCYCLES(CYCLES_LTR_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t\tm_task.segment = READ32(ea);\n\t\t\t\t\tCYCLES(CYCLES_LTR_MEM);\n\t\t\t\t}\n\t\t\t\tmemset(&seg, 0, sizeof(seg));\n\t\t\t\tseg.selector = m_task.segment;\n\t\t\t\ti386_load_protected_mode_segment(&seg,NULL);\n\n\t\t\t\tUINT32 addr = ((seg.selector & 4) ? m_ldtr.base : m_gdtr.base) + (seg.selector & ~7) + 5;\n\t\t\t\ti386_translate_address(TRANSLATE_READ, &addr, NULL);\n\t\t\t\twrite_byte(addr, (seg.flags & 0xff) | 2);\n\n\t\t\t\tm_task.limit = seg.limit;\n\t\t\t\tm_task.base = seg.base;\n\t\t\t\tm_task.flags = seg.flags | 2;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 4:  /* VERR */\n\t\t\tif ( PROTECTED_MODE && !V8086_MODE )\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tCYCLES(CYCLES_VERR_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t\taddress = READ32(ea);\n\t\t\t\t\tCYCLES(CYCLES_VERR_MEM);\n\t\t\t\t}\n\t\t\t\tmemset(&seg, 0, sizeof(seg));\n\t\t\t\tseg.selector = address;\n\t\t\t\tresult = i386_load_protected_mode_segment(&seg,NULL);\n\t\t\t\t// check if the segment is a code or data segment (not a special segment type, like a TSS, gate, LDT...)\n\t\t\t\tif(!(seg.flags & 0x10))\n\t\t\t\t\tresult = 0;\n\t\t\t\t// check that the segment is readable\n\t\t\t\tif(seg.flags & 0x10)  // is code or data segment\n\t\t\t\t{\n\t\t\t\t\tif(seg.flags & 0x08)  // is code segment, so check if it's readable\n\t\t\t\t\t{\n\t\t\t\t\t\tif(!(seg.flags & 0x02))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tresult = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{  // check if conforming, these are always readable, regardless of privilege\n\t\t\t\t\t\t\tif(!(seg.flags & 0x04))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t// if not conforming, then we must check privilege levels (TODO: current privilege level check)\n\t\t\t\t\t\t\t\tif(((seg.flags >> 5) & 0x03) < (address & 0x03))\n\t\t\t\t\t\t\t\t\tresult = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// check that the descriptor privilege is greater or equal to the selector's privilege level and the current privilege (TODO)\n\t\t\t\tSetZF(result);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t\tlogerror(\"i386: VERR: Exception - Running in real mode or virtual 8086 mode.\\n\");\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 5:  /* VERW */\n\t\t\tif ( PROTECTED_MODE && !V8086_MODE )\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_VERW_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t\taddress = READ16(ea);\n\t\t\t\t\tCYCLES(CYCLES_VERW_MEM);\n\t\t\t\t}\n\t\t\t\tmemset(&seg, 0, sizeof(seg));\n\t\t\t\tseg.selector = address;\n\t\t\t\tresult = i386_load_protected_mode_segment(&seg,NULL);\n\t\t\t\t// check if the segment is a code or data segment (not a special segment type, like a TSS, gate, LDT...)\n\t\t\t\tif(!(seg.flags & 0x10))\n\t\t\t\t\tresult = 0;\n\t\t\t\t// check that the segment is writable\n\t\t\t\tif(seg.flags & 0x10)  // is code or data segment\n\t\t\t\t{\n\t\t\t\t\tif(seg.flags & 0x08)  // is code segment (and thus, not writable)\n\t\t\t\t\t{\n\t\t\t\t\t\tresult = 0;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{  // is data segment\n\t\t\t\t\t\tif(!(seg.flags & 0x02))\n\t\t\t\t\t\t\tresult = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// check that the descriptor privilege is greater or equal to the selector's privilege level and the current privilege (TODO)\n\t\t\t\tif(((seg.flags >> 5) & 0x03) < (address & 0x03))\n\t\t\t\t\tresult = 0;\n\t\t\t\tSetZF(result);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t\tlogerror(\"i386: VERW: Exception - Running in real mode or virtual 8086 mode.\\n\");\n\t\t\t}\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\treport_invalid_modrm(\"group0F00_32\", modrm);\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(group0F01_32)()      // Opcode 0x0f 01\n{\n\tUINT8 modrm = FETCH();\n\tUINT32 address, ea;\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:         /* SGDT */\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tea = i386_translate(CS, address, 1 );\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t}\n\t\t\t\tWRITE16(ea, m_gdtr.limit);\n\t\t\t\tWRITE32(ea + 2, m_gdtr.base);\n\t\t\t\tCYCLES(CYCLES_SGDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 1:         /* SIDT */\n\t\t\t{\n\t\t\t\tif (modrm >= 0xc0)\n\t\t\t\t{\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tea = i386_translate(CS, address, 1 );\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t}\n\t\t\t\tWRITE16(ea, m_idtr.limit);\n\t\t\t\tWRITE32(ea + 2, m_idtr.base);\n\t\t\t\tCYCLES(CYCLES_SIDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 2:         /* LGDT */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tea = i386_translate(CS, address, 0 );\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t}\n\t\t\t\tm_gdtr.limit = READ16(ea);\n\t\t\t\tm_gdtr.base = READ32(ea + 2);\n\t\t\t\tCYCLES(CYCLES_LGDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 3:         /* LIDT */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tea = i386_translate(CS, address, 0 );\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t}\n\t\t\t\tm_idtr.limit = READ16(ea);\n\t\t\t\tm_idtr.base = READ32(ea + 2);\n\t\t\t\tCYCLES(CYCLES_LIDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 4:         /* SMSW */\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\t// smsw stores all of cr0 into register\n\t\t\t\t\tSTORE_RM32(modrm, m_cr[0]);\n\t\t\t\t\tCYCLES(CYCLES_SMSW_REG);\n\t\t\t\t} else {\n\t\t\t\t\t/* always 16-bit memory operand */\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t\tWRITE16(ea, m_cr[0]);\n\t\t\t\t\tCYCLES(CYCLES_SMSW_MEM);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 6:         /* LMSW */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tUINT16 b;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tb = LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_LMSW_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t\tCYCLES(CYCLES_LMSW_MEM);\n\t\t\t\tb = READ16(ea);\n\t\t\t\t}\n\t\t\t\tif(PROTECTED_MODE)\n\t\t\t\t\tb |= 0x0001;  // cannot return to real mode using this instruction.\n\t\t\t\tm_cr[0] &= ~0x0000000f;\n\t\t\t\tm_cr[0] |= b & 0x0000000f;\n\t\t\t\tbreak;\n\t\t\t}\n\t\tdefault:\n\t\t\treport_invalid_modrm(\"group0F01_32\", modrm);\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(group0FBA_32)()      // Opcode 0x0f ba\n{\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 4:         /* BT Rm32, i8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\n\t\t\t\tCYCLES(CYCLES_BT_IMM_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\tUINT32 dst = READ32(ea);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\n\t\t\t\tCYCLES(CYCLES_BT_IMM_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 5:         /* BTS Rm32, i8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\t\t\t\tdst |= (1 << bit);\n\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_BTS_IMM_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT32 dst = READ32(ea);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\t\t\t\tdst |= (1 << bit);\n\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_BTS_IMM_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:         /* BTR Rm32, i8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\t\t\t\tdst &= ~(1 << bit);\n\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_BTR_IMM_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT32 dst = READ32(ea);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\t\t\t\tdst &= ~(1 << bit);\n\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_BTR_IMM_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 7:         /* BTC Rm32, i8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\t\t\t\tdst ^= (1 << bit);\n\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_BTC_IMM_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT32 dst = READ32(ea);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\t\t\t\tdst ^= (1 << bit);\n\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_BTC_IMM_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treport_invalid_modrm(\"group0FBA_32\", modrm);\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(lar_r32_rm32)()  // Opcode 0x0f 0x02\n{\n\tUINT8 modrm = FETCH();\n\tI386_SREG seg;\n\tUINT8 type;\n\n\tif(PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\tmemset(&seg,0,sizeof(seg));\n\t\tif(modrm >= 0xc0)\n\t\t{\n\t\t\tseg.selector = LOAD_RM32(modrm);\n\t\t\tCYCLES(CYCLES_LAR_REG);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\tseg.selector = READ32(ea);\n\t\t\tCYCLES(CYCLES_LAR_MEM);\n\t\t}\n\t\tif(seg.selector == 0)\n\t\t{\n\t\t\tSetZF(0);  // not a valid segment\n\t\t}\n\t\telse\n\t\t{\n\t\t\tUINT64 desc;\n\t\t\tif(!i386_load_protected_mode_segment(&seg,&desc))\n\t\t\t{\n\t\t\t\tSetZF(0);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tUINT8 DPL = (seg.flags >> 5) & 3;\n\t\t\tif(((DPL < m_CPL) || (DPL < (seg.selector & 3))) && ((seg.flags & 0x1c) != 0x1c))\n\t\t\t{\n\t\t\t\tSetZF(0);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(!(seg.flags & 0x10))  // special segment\n\t\t\t{\n\t\t\t\t// check for invalid segment types\n\t\t\t\ttype = seg.flags & 0x000f;\n\t\t\t\tif(type == 0x00 || type == 0x08 || type == 0x0a || type == 0x0d)\n\t\t\t\t{\n\t\t\t\t\tSetZF(0);  // invalid segment type\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tSTORE_REG32(modrm,(desc>>32) & 0x00ffff00);\n\t\t\t\t\tSetZF(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tSTORE_REG32(modrm,(desc>>32) & 0x00ffff00);\n\t\t\t\tSetZF(1);\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t{\n\t\t// illegal opcode\n\t\ti386_trap(6,0, 0);\n\t\tlogerror(\"i386: LAR: Exception - running in real mode or virtual 8086 mode.\\n\");\n\t}\n}\n\nstatic void I386OP(lsl_r32_rm32)()  // Opcode 0x0f 0x03\n{\n\tUINT8 modrm = FETCH();\n\tUINT32 limit;\n\tI386_SREG seg;\n\n\tif(PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\tmemset(&seg, 0, sizeof(seg));\n\t\tif(modrm >= 0xc0)\n\t\t{\n\t\t\tseg.selector = LOAD_RM32(modrm);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\tseg.selector = READ32(ea);\n\t\t}\n\t\tif(seg.selector == 0)\n\t\t{\n\t\t\tSetZF(0);  // not a valid segment\n\t\t}\n\t\telse\n\t\t{\n\t\t\tUINT8 type;\n\t\t\tif(!i386_load_protected_mode_segment(&seg,NULL))\n\t\t\t{\n\t\t\t\tSetZF(0);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tUINT8 DPL = (seg.flags >> 5) & 3;\n\t\t\tif(((DPL < m_CPL) || (DPL < (seg.selector & 3))) && ((seg.flags & 0x1c) != 0x1c))\n\t\t\t{\n\t\t\t\tSetZF(0);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttype = seg.flags & 0x1f;\n\t\t\tswitch(type)\n\t\t\t{\n\t\t\tcase 0:\n\t\t\tcase 4:\n\t\t\tcase 5:\n\t\t\tcase 6:\n\t\t\tcase 7:\n\t\t\tcase 8:\n\t\t\tcase 10:\n\t\t\tcase 12:\n\t\t\tcase 13:\n\t\t\tcase 14:\n\t\t\tcase 15:\n\t\t\t\tSetZF(0);\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\tlimit = seg.limit;\n\t\t\t\tSTORE_REG32(modrm,limit);\n\t\t\t\tSetZF(1);\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t\ti386_trap(6, 0, 0);\n}\n\nstatic void I386OP(bound_r32_m32_m32)() // Opcode 0x62\n{\n\tUINT8 modrm;\n\tINT32 val, low, high;\n\n\tmodrm = FETCH();\n\n\tif (modrm >= 0xc0)\n\t{\n\t\tlow = high = LOAD_RM32(modrm);\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tlow = READ32(ea + 0);\n\t\thigh = READ32(ea + 4);\n\t}\n\tval = LOAD_REG32(modrm);\n\n\tif ((val < low) || (val > high))\n\t{\n\t\tCYCLES(CYCLES_BOUND_OUT_RANGE);\n\t\ti386_trap(5, 0, 0);\n\t}\n\telse\n\t{\n\t\tCYCLES(CYCLES_BOUND_IN_RANGE);\n\t}\n}\n\nstatic void I386OP(retf32)()            // Opcode 0xcb\n{\n\tif(PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\ti386_protected_mode_retf(0,1);\n\t}\n\telse\n\t{\n\t\tm_eip = POP32();\n\t\tm_sreg[CS].selector = POP32();\n\t\ti386_load_segment_descriptor(CS );\n\t\tCHANGE_PC(m_eip);\n\t}\n\n\tCYCLES(CYCLES_RET_INTERSEG);\n}\n\nstatic void I386OP(retf_i32)()          // Opcode 0xca\n{\n\tUINT16 count = FETCH16();\n\n\tif(PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\ti386_protected_mode_retf(count,1);\n\t}\n\telse\n\t{\n\t\tm_eip = POP32();\n\t\tm_sreg[CS].selector = POP32();\n\t\ti386_load_segment_descriptor(CS );\n\t\tCHANGE_PC(m_eip);\n\t\tREG32(ESP) += count;\n\t}\n\n\tCYCLES(CYCLES_RET_IMM_INTERSEG);\n}\n\nstatic void I386OP(load_far_pointer32)(int s)\n{\n\tUINT8 modrm = FETCH();\n\tUINT16 selector;\n\n\tif( modrm >= 0xc0 ) {\n\t\treport_invalid_modrm(\"load_far_pointer32\", modrm);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tSTORE_REG32(modrm, READ32(ea + 0));\n\t\tselector = READ16(ea + 4);\n\t\ti386_sreg_load(selector,s,NULL);\n\t}\n}\n\nstatic void I386OP(lds32)()             // Opcode 0xc5\n{\n\tI386OP(load_far_pointer32)(DS);\n\tCYCLES(CYCLES_LDS);\n}\n\nstatic void I386OP(lss32)()             // Opcode 0x0f 0xb2\n{\n\tI386OP(load_far_pointer32)(SS);\n\tCYCLES(CYCLES_LSS);\n}\n\nstatic void I386OP(les32)()             // Opcode 0xc4\n{\n\tI386OP(load_far_pointer32)(ES);\n\tCYCLES(CYCLES_LES);\n}\n\nstatic void I386OP(lfs32)()             // Opcode 0x0f 0xb4\n{\n\tI386OP(load_far_pointer32)(FS);\n\tCYCLES(CYCLES_LFS);\n}\n\nstatic void I386OP(lgs32)()             // Opcode 0x0f 0xb5\n{\n\tI386OP(load_far_pointer32)(GS);\n\tCYCLES(CYCLES_LGS);\n}\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386/i386ops.c",
    "content": "// license:BSD-3-Clause\n// copyright-holders:Ville Linde, Barry Rodewald, Carl, Phil Bennett\nstatic UINT8 I386OP(shift_rotate8)(UINT8 modrm, UINT32 value, UINT8 shift)\n{\n\tUINT32 src = value & 0xff;\n\tUINT8 dst = value;\n\n\tif( shift == 0 ) {\n\t\tCYCLES_RM(modrm, 3, 7);\n\t} else if( shift == 1 ) {\n\t\tswitch( (modrm >> 3) & 0x7 )\n\t\t{\n\t\t\tcase 0:         /* ROL rm8, 1 */\n\t\t\t\tm_CF = (src & 0x80) ? 1 : 0;\n\t\t\t\tdst = (src << 1) + m_CF;\n\t\t\t\tm_OF = ((src ^ dst) & 0x80) ? 1 : 0;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 1:         /* ROR rm8, 1 */\n\t\t\t\tm_CF = (src & 0x1) ? 1 : 0;\n\t\t\t\tdst = (m_CF << 7) | (src >> 1);\n\t\t\t\tm_OF = ((src ^ dst) & 0x80) ? 1 : 0;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 2:         /* RCL rm8, 1 */\n\t\t\t\tdst = (src << 1) + m_CF;\n\t\t\t\tm_CF = (src & 0x80) ? 1 : 0;\n\t\t\t\tm_OF = ((src ^ dst) & 0x80) ? 1 : 0;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 3:         /* RCR rm8, 1 */\n\t\t\t\tdst = (m_CF << 7) | (src >> 1);\n\t\t\t\tm_CF = src & 0x1;\n\t\t\t\tm_OF = ((src ^ dst) & 0x80) ? 1 : 0;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 4:         /* SHL/SAL rm8, 1 */\n\t\t\tcase 6:\n\t\t\t\tdst = src << 1;\n\t\t\t\tm_CF = (src & 0x80) ? 1 : 0;\n\t\t\t\tm_OF = (((m_CF << 7) ^ dst) & 0x80) ? 1 : 0;\n\t\t\t\tSetSZPF8(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 5:         /* SHR rm8, 1 */\n\t\t\t\tdst = src >> 1;\n\t\t\t\tm_CF = src & 0x1;\n\t\t\t\tm_OF = (dst & 0x80) ? 1 : 0;\n\t\t\t\tSetSZPF8(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 7:         /* SAR rm8, 1 */\n\t\t\t\tdst = (INT8)(src) >> 1;\n\t\t\t\tm_CF = src & 0x1;\n\t\t\t\tm_OF = 0;\n\t\t\t\tSetSZPF8(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t}\n\n\t} else {\n\t\tswitch( (modrm >> 3) & 0x7 )\n\t\t{\n\t\t\tcase 0:         /* ROL rm8, i8 */\n\t\t\t\tif(!(shift & 7))\n\t\t\t\t{\n\t\t\t\t\tif(shift & 0x18)\n\t\t\t\t\t{\n\t\t\t\t\t\tm_CF = src & 1;\n\t\t\t\t\t\tm_OF = (src & 1) ^ ((src >> 7) & 1);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tshift &= 7;\n\t\t\t\tdst = ((src & ((UINT8)0xff >> shift)) << shift) |\n\t\t\t\t\t\t((src & ((UINT8)0xff << (8-shift))) >> (8-shift));\n\t\t\t\tm_CF = dst & 0x1;\n\t\t\t\tm_OF = (dst & 1) ^ (dst >> 7);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 1:         /* ROR rm8, i8 */\n\t\t\t\tif(!(shift & 7))\n\t\t\t\t{\n\t\t\t\t\tif(shift & 0x18)\n\t\t\t\t\t{\n\t\t\t\t\t\tm_CF = (src >> 7) & 1;\n\t\t\t\t\t\tm_OF = ((src >> 7) & 1) ^ ((src >> 6) & 1);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tshift &= 7;\n\t\t\t\tdst = ((src & ((UINT8)0xff << shift)) >> shift) |\n\t\t\t\t\t\t((src & ((UINT8)0xff >> (8-shift))) << (8-shift));\n\t\t\t\tm_CF = (dst >> 7) & 1;\n\t\t\t\tm_OF = ((dst >> 7) ^ (dst >> 6)) & 1;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 2:         /* RCL rm8, i8 */\n\t\t\t\tshift %= 9;\n\t\t\t\tdst = ((src & ((UINT8)0xff >> shift)) << shift) |\n\t\t\t\t\t\t((src & ((UINT8)0xff << (9-shift))) >> (9-shift)) |\n\t\t\t\t\t\t(m_CF << (shift-1));\n\t\t\t\tif(shift) m_CF = (src >> (8-shift)) & 0x1;\n\t\t\t\tm_OF = m_CF ^ ((dst >> 7) & 1);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 3:         /* RCR rm8, i8 */\n\t\t\t\tshift %= 9;\n\t\t\t\tdst = ((src & ((UINT8)0xff << shift)) >> shift) |\n\t\t\t\t\t\t((src & ((UINT8)0xff >> (8-shift))) << (9-shift)) |\n\t\t\t\t\t\t(m_CF << (8-shift));\n\t\t\t\tif(shift) m_CF = (src >> (shift-1)) & 0x1;\n\t\t\t\tm_OF = ((dst >> 7) ^ (dst >> 6)) & 1;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 4:         /* SHL/SAL rm8, i8 */\n\t\t\tcase 6:\n\t\t\t\tshift &= 31;\n\t\t\t\tdst = src << shift;\n\t\t\t\tm_CF = (shift <= 8) && ((src >> (8 - shift)) & 1);\n\t\t\t\tSetSZPF8(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 5:         /* SHR rm8, i8 */\n\t\t\t\tshift &= 31;\n\t\t\t\tdst = src >> shift;\n\t\t\t\tm_CF = (src & (1 << (shift-1))) ? 1 : 0;\n\t\t\t\tSetSZPF8(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 7:         /* SAR rm8, i8 */\n\t\t\t\tshift &= 31;\n\t\t\t\tdst = (INT8)src >> shift;\n\t\t\t\tm_CF = (src & (1 << (shift-1))) ? 1 : 0;\n\t\t\t\tSetSZPF8(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn dst;\n}\n\n\n\nstatic void I386OP(adc_rm8_r8)()        // Opcode 0x10\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = LOAD_RM8(modrm);\n\t\tdst = ADC8(dst, src, m_CF);\n\t\tSTORE_RM8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = READ8(ea);\n\t\tdst = ADC8(dst, src, m_CF);\n\t\tWRITE8(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(adc_r8_rm8)()        // Opcode 0x12\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM8(modrm);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = ADC8(dst, src, m_CF);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ8(ea);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = ADC8(dst, src, m_CF);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(adc_al_i8)()     // Opcode 0x14\n{\n\tUINT8 src, dst;\n\tsrc = FETCH();\n\tdst = REG8(AL);\n\tdst = ADC8(dst, src, m_CF);\n\tREG8(AL) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(add_rm8_r8)()        // Opcode 0x00\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = LOAD_RM8(modrm);\n\t\tdst = ADD8(dst, src);\n\t\tSTORE_RM8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = READ8(ea);\n\t\tdst = ADD8(dst, src);\n\t\tWRITE8(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(add_r8_rm8)()        // Opcode 0x02\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM8(modrm);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = ADD8(dst, src);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ8(ea);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = ADD8(dst, src);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(add_al_i8)()     // Opcode 0x04\n{\n\tUINT8 src, dst;\n\tsrc = FETCH();\n\tdst = REG8(AL);\n\tdst = ADD8(dst, src);\n\tREG8(AL) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(and_rm8_r8)()        // Opcode 0x20\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = LOAD_RM8(modrm);\n\t\tdst = AND8(dst, src);\n\t\tSTORE_RM8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = READ8(ea);\n\t\tdst = AND8(dst, src);\n\t\tWRITE8(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(and_r8_rm8)()        // Opcode 0x22\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM8(modrm);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = AND8(dst, src);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ8(ea);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = AND8(dst, src);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(and_al_i8)()         // Opcode 0x24\n{\n\tUINT8 src, dst;\n\tsrc = FETCH();\n\tdst = REG8(AL);\n\tdst = AND8(dst, src);\n\tREG8(AL) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(clc)()               // Opcode 0xf8\n{\n\tm_CF = 0;\n\tCYCLES(CYCLES_CLC);\n}\n\nstatic void I386OP(cld)()               // Opcode 0xfc\n{\n\tm_DF = 0;\n\tCYCLES(CYCLES_CLD);\n}\n\nstatic void I386OP(cli)()               // Opcode 0xfa\n{\n\tif(PROTECTED_MODE)\n\t{\n\t\tUINT8 IOPL = m_IOP1 | (m_IOP2 << 1);\n\t\tif(m_CPL > IOPL)\n\t\t\tFAULT(FAULT_GP,0);\n\t}\n\tm_IF = 0;\n\tCYCLES(CYCLES_CLI);\n}\n\nstatic void I386OP(cmc)()               // Opcode 0xf5\n{\n\tm_CF ^= 1;\n\tCYCLES(CYCLES_CMC);\n}\n\nstatic void I386OP(cmp_rm8_r8)()        // Opcode 0x38\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = LOAD_RM8(modrm);\n\t\tSUB8(dst, src);\n\t\tCYCLES(CYCLES_CMP_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = READ8(ea);\n\t\tSUB8(dst, src);\n\t\tCYCLES(CYCLES_CMP_REG_MEM);\n\t}\n}\n\nstatic void I386OP(cmp_r8_rm8)()        // Opcode 0x3a\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM8(modrm);\n\t\tdst = LOAD_REG8(modrm);\n\t\tSUB8(dst, src);\n\t\tCYCLES(CYCLES_CMP_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ8(ea);\n\t\tdst = LOAD_REG8(modrm);\n\t\tSUB8(dst, src);\n\t\tCYCLES(CYCLES_CMP_MEM_REG);\n\t}\n}\n\nstatic void I386OP(cmp_al_i8)()         // Opcode 0x3c\n{\n\tUINT8 src, dst;\n\tsrc = FETCH();\n\tdst = REG8(AL);\n\tSUB8(dst, src);\n\tCYCLES(CYCLES_CMP_IMM_ACC);\n}\n\nstatic void I386OP(cmpsb)()             // Opcode 0xa6\n{\n\tUINT32 eas, ead;\n\tUINT8 src, dst;\n\tif( m_segment_prefix ) {\n\t\teas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t} else {\n\t\teas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t}\n\tead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 0 );\n\tsrc = READ8(eas);\n\tdst = READ8(ead);\n\tSUB8(src, dst);\n\tBUMP_SI(1);\n\tBUMP_DI(1);\n\tCYCLES(CYCLES_CMPS);\n}\n\nstatic void I386OP(in_al_i8)()          // Opcode 0xe4\n{\n\tUINT16 port = FETCH();\n\tUINT8 data = READPORT8(port);\n\tREG8(AL) = data;\n\tCYCLES(CYCLES_IN_VAR);\n}\n\nstatic void I386OP(in_al_dx)()          // Opcode 0xec\n{\n\tUINT16 port = REG16(DX);\n\tUINT8 data = READPORT8(port);\n\tREG8(AL) = data;\n\tCYCLES(CYCLES_IN);\n}\n\nstatic void I386OP(ja_rel8)()           // Opcode 0x77\n{\n\tINT8 disp = FETCH();\n\tif( m_CF == 0 && m_ZF == 0 ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jbe_rel8)()          // Opcode 0x76\n{\n\tINT8 disp = FETCH();\n\tif( m_CF != 0 || m_ZF != 0 ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jc_rel8)()           // Opcode 0x72\n{\n\tINT8 disp = FETCH();\n\tif( m_CF != 0 ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jg_rel8)()           // Opcode 0x7f\n{\n\tINT8 disp = FETCH();\n\tif( m_ZF == 0 && (m_SF == m_OF) ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jge_rel8)()          // Opcode 0x7d\n{\n\tINT8 disp = FETCH();\n\tif(m_SF == m_OF) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jl_rel8)()           // Opcode 0x7c\n{\n\tINT8 disp = FETCH();\n\tif( (m_SF != m_OF) ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jle_rel8)()      // Opcode 0x7e\n{\n\tINT8 disp = FETCH();\n\tif( m_ZF != 0 || (m_SF != m_OF) ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jnc_rel8)()          // Opcode 0x73\n{\n\tINT8 disp = FETCH();\n\tif( m_CF == 0 ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jno_rel8)()          // Opcode 0x71\n{\n\tINT8 disp = FETCH();\n\tif( m_OF == 0 ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jnp_rel8)()          // Opcode 0x7b\n{\n\tINT8 disp = FETCH();\n\tif( m_PF == 0 ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jns_rel8)()          // Opcode 0x79\n{\n\tINT8 disp = FETCH();\n\tif( m_SF == 0 ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jnz_rel8)()          // Opcode 0x75\n{\n\tINT8 disp = FETCH();\n\tif( m_ZF == 0 ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jo_rel8)()           // Opcode 0x70\n{\n\tINT8 disp = FETCH();\n\tif( m_OF != 0 ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jp_rel8)()           // Opcode 0x7a\n{\n\tINT8 disp = FETCH();\n\tif( m_PF != 0 ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(js_rel8)()           // Opcode 0x78\n{\n\tINT8 disp = FETCH();\n\tif( m_SF != 0 ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jz_rel8)()           // Opcode 0x74\n{\n\tINT8 disp = FETCH();\n\tif( m_ZF != 0 ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jmp_rel8)()          // Opcode 0xeb\n{\n\tINT8 disp = FETCH();\n\tNEAR_BRANCH(disp);\n\tCYCLES(CYCLES_JMP_SHORT);      /* TODO: Timing = 7 + m */\n}\n\nstatic void I386OP(lahf)()              // Opcode 0x9f\n{\n\tREG8(AH) = get_flags() & 0xd7;\n\tCYCLES(CYCLES_LAHF);\n}\n\nstatic void I386OP(lodsb)()             // Opcode 0xac\n{\n\tUINT32 eas;\n\tif( m_segment_prefix ) {\n\t\teas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t} else {\n\t\teas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t}\n\tREG8(AL) = READ8(eas);\n\tBUMP_SI(1);\n\tCYCLES(CYCLES_LODS);\n}\n\nstatic void I386OP(mov_rm8_r8)()        // Opcode 0x88\n{\n\tUINT8 src;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG8(modrm);\n\t\tSTORE_RM8(modrm, src);\n\t\tCYCLES(CYCLES_MOV_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG8(modrm);\n\t\tWRITE8(ea, src);\n\t\tCYCLES(CYCLES_MOV_REG_MEM);\n\t}\n}\n\nstatic void I386OP(mov_r8_rm8)()        // Opcode 0x8a\n{\n\tUINT8 src;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM8(modrm);\n\t\tSTORE_REG8(modrm, src);\n\t\tCYCLES(CYCLES_MOV_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ8(ea);\n\t\tSTORE_REG8(modrm, src);\n\t\tCYCLES(CYCLES_MOV_MEM_REG);\n\t}\n}\n\nstatic void I386OP(mov_rm8_i8)()        // Opcode 0xc6\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT8 value = FETCH();\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_MOV_IMM_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT8 value = FETCH();\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_MOV_IMM_MEM);\n\t}\n}\n\nstatic void I386OP(mov_r32_cr)()        // Opcode 0x0f 20\n{\n\tif(PROTECTED_MODE && m_CPL)\n\t\tFAULT(FAULT_GP, 0);\n\tUINT8 modrm = FETCH();\n\tUINT8 cr = (modrm >> 3) & 0x7;\n\n\tSTORE_RM32(modrm, m_cr[cr]);\n\tCYCLES(CYCLES_MOV_CR_REG);\n}\n\nstatic void I386OP(mov_r32_dr)()        // Opcode 0x0f 21\n{\n\tif(PROTECTED_MODE && m_CPL)\n\t\tFAULT(FAULT_GP, 0);\n\tUINT8 modrm = FETCH();\n\tUINT8 dr = (modrm >> 3) & 0x7;\n\n\tSTORE_RM32(modrm, m_dr[dr]);\n\tswitch(dr)\n\t{\n\t\tcase 0:\n\t\tcase 1:\n\t\tcase 2:\n\t\tcase 3:\n\t\t\tCYCLES(CYCLES_MOV_REG_DR0_3);\n\t\t\tbreak;\n\t\tcase 6:\n\t\tcase 7:\n\t\t\tCYCLES(CYCLES_MOV_REG_DR6_7);\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(mov_cr_r32)()        // Opcode 0x0f 22\n{\n\tif(PROTECTED_MODE && m_CPL)\n\t\tFAULT(FAULT_GP, 0);\n\tUINT8 modrm = FETCH();\n\tUINT8 cr = (modrm >> 3) & 0x7;\n\tUINT32 data = LOAD_RM32(modrm);\n\tswitch(cr)\n\t{\n\t\tcase 0:\n#ifndef PAGING\n\t\t\tif(data & 0x80000000)\n\t\t\t\tfatalerror(\"paging disabled\\n\");\n#endif\n\t\t\tdata &= 0xfffeffff; // wp not supported on 386\n\t\t\tCYCLES(CYCLES_MOV_REG_CR0);\n\t\t\tbreak;\n\t\tcase 2: CYCLES(CYCLES_MOV_REG_CR2); break;\n\t\tcase 3:\n\t\t\tCYCLES(CYCLES_MOV_REG_CR3);\n\t\t\tvtlb_flush_dynamic(m_vtlb);\n\t\t\tbreak;\n\t\tcase 4: CYCLES(1); break; // TODO\n\t\tdefault:\n\t\t\tlogerror(\"i386: mov_cr_r32 CR%d!\\n\", cr);\n\t\t\treturn;\n\t}\n\tm_cr[cr] = data;\n}\n\nstatic void I386OP(mov_dr_r32)()        // Opcode 0x0f 23\n{\n\tif(PROTECTED_MODE && m_CPL)\n\t\tFAULT(FAULT_GP, 0);\n\tUINT8 modrm = FETCH();\n\tUINT8 dr = (modrm >> 3) & 0x7;\n\n\tm_dr[dr] = LOAD_RM32(modrm);\n\tswitch(dr)\n\t{\n\t\tcase 0:\n\t\tcase 1:\n\t\tcase 2:\n\t\tcase 3:\n\t\t\tCYCLES(CYCLES_MOV_DR0_3_REG);\n\t\t\tbreak;\n\t\tcase 6:\n\t\tcase 7:\n\t\t\tCYCLES(CYCLES_MOV_DR6_7_REG);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tlogerror(\"i386: mov_dr_r32 DR%d!\\n\", dr);\n\t\t\treturn;\n\t}\n}\n\nstatic void I386OP(mov_al_m8)()         // Opcode 0xa0\n{\n\tUINT32 offset, ea;\n\tif( m_address_size ) {\n\t\toffset = FETCH32();\n\t} else {\n\t\toffset = FETCH16();\n\t}\n\t/* TODO: Not sure if this is correct... */\n\tif( m_segment_prefix ) {\n\t\tea = i386_translate(m_segment_override, offset, 0 );\n\t} else {\n\t\tea = i386_translate(DS, offset, 0 );\n\t}\n\tREG8(AL) = READ8(ea);\n\tCYCLES(CYCLES_MOV_IMM_MEM);\n}\n\nstatic void I386OP(mov_m8_al)()         // Opcode 0xa2\n{\n\tUINT32 offset, ea;\n\tif( m_address_size ) {\n\t\toffset = FETCH32();\n\t} else {\n\t\toffset = FETCH16();\n\t}\n\t/* TODO: Not sure if this is correct... */\n\tif( m_segment_prefix ) {\n\t\tea = i386_translate(m_segment_override, offset, 1 );\n\t} else {\n\t\tea = i386_translate(DS, offset, 1 );\n\t}\n\tWRITE8(ea, REG8(AL) );\n\tCYCLES(CYCLES_MOV_MEM_ACC);\n}\n\nstatic void I386OP(mov_rm16_sreg)()     // Opcode 0x8c\n{\n\tUINT8 modrm = FETCH();\n\tint s = (modrm >> 3) & 0x7;\n\n\tif( modrm >= 0xc0 ) {\n\t\tif(m_operand_size)\n\t\t\tSTORE_RM32(modrm, m_sreg[s].selector);\n\t\telse\n\t\t\tSTORE_RM16(modrm, m_sreg[s].selector);\n\t\tCYCLES(CYCLES_MOV_SREG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE16(ea, m_sreg[s].selector);\n\t\tCYCLES(CYCLES_MOV_SREG_MEM);\n\t}\n}\n\nstatic void I386OP(mov_sreg_rm16)()     // Opcode 0x8e\n{\n\tUINT16 selector;\n\tUINT8 modrm = FETCH();\n\tbool fault;\n\tint s = (modrm >> 3) & 0x7;\n\n\tif( modrm >= 0xc0 ) {\n\t\tselector = LOAD_RM16(modrm);\n\t\tCYCLES(CYCLES_MOV_REG_SREG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tselector = READ16(ea);\n\t\tCYCLES(CYCLES_MOV_MEM_SREG);\n\t}\n\n\ti386_sreg_load(selector,s,&fault);\n\tif((s == SS) && !fault)\n\t{\n\t\tif(m_IF != 0) // if external interrupts are enabled\n\t\t{\n\t\t\tm_IF = 0;  // reset IF for the next instruction\n\t\t\tm_delayed_interrupt_enable = 1;\n\t\t}\n\t}\n}\n\nstatic void I386OP(mov_al_i8)()         // Opcode 0xb0\n{\n\tREG8(AL) = FETCH();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_cl_i8)()         // Opcode 0xb1\n{\n\tREG8(CL) = FETCH();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_dl_i8)()         // Opcode 0xb2\n{\n\tREG8(DL) = FETCH();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_bl_i8)()         // Opcode 0xb3\n{\n\tREG8(BL) = FETCH();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_ah_i8)()         // Opcode 0xb4\n{\n\tREG8(AH) = FETCH();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_ch_i8)()         // Opcode 0xb5\n{\n\tREG8(CH) = FETCH();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_dh_i8)()         // Opcode 0xb6\n{\n\tREG8(DH) = FETCH();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_bh_i8)()         // Opcode 0xb7\n{\n\tREG8(BH) = FETCH();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(movsb)()             // Opcode 0xa4\n{\n\tUINT32 eas, ead;\n\tUINT8 v;\n\tif( m_segment_prefix ) {\n\t\teas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t} else {\n\t\teas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t}\n\tead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 );\n\tv = READ8(eas);\n\tWRITE8(ead, v);\n\tBUMP_SI(1);\n\tBUMP_DI(1);\n\tCYCLES(CYCLES_MOVS);\n}\n\nstatic void I386OP(or_rm8_r8)()         // Opcode 0x08\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = LOAD_RM8(modrm);\n\t\tdst = OR8(dst, src);\n\t\tSTORE_RM8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = READ8(ea);\n\t\tdst = OR8(dst, src);\n\t\tWRITE8(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(or_r8_rm8)()         // Opcode 0x0a\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM8(modrm);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = OR8(dst, src);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ8(ea);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = OR8(dst, src);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(or_al_i8)()          // Opcode 0x0c\n{\n\tUINT8 src, dst;\n\tsrc = FETCH();\n\tdst = REG8(AL);\n\tdst = OR8(dst, src);\n\tREG8(EAX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(out_al_i8)()         // Opcode 0xe6\n{\n\tUINT16 port = FETCH();\n\tUINT8 data = REG8(AL);\n\tWRITEPORT8(port, data);\n\tCYCLES(CYCLES_OUT_VAR);\n}\n\nstatic void I386OP(out_al_dx)()         // Opcode 0xee\n{\n\tUINT16 port = REG16(DX);\n\tUINT8 data = REG8(AL);\n\tWRITEPORT8(port, data);\n\tCYCLES(CYCLES_OUT);\n}\n\n\nstatic void I386OP(arpl)()           // Opcode 0x63\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tUINT8 flag = 0;\n\n\tif(PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\tsrc = LOAD_REG16(modrm);\n\t\t\tdst = LOAD_RM16(modrm);\n\t\t\tif( (dst&0x3) < (src&0x3) ) {\n\t\t\t\tdst = (dst&0xfffc) | (src&0x3);\n\t\t\t\tflag = 1;\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t}\n\t\t} else {\n\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\tsrc = LOAD_REG16(modrm);\n\t\t\tdst = READ16(ea);\n\t\t\tif( (dst&0x3) < (src&0x3) ) {\n\t\t\t\tdst = (dst&0xfffc) | (src&0x3);\n\t\t\t\tflag = 1;\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t}\n\t\t}\n\t\tSetZF(flag);\n\t}\n\telse\n\t\ti386_trap(6, 0, 0);  // invalid opcode in real mode or v8086 mode\n}\n\nstatic void I386OP(push_i8)()           // Opcode 0x6a\n{\n\tUINT8 value = FETCH();\n\tPUSH8(value);\n\tCYCLES(CYCLES_PUSH_IMM);\n}\n\nstatic void I386OP(ins_generic)(int size)\n{\n\tUINT32 ead;\n\tUINT8 vb;\n\tUINT16 vw;\n\tUINT32 vd;\n\n\tead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 );\n\n\tswitch(size) {\n\tcase 1:\n\t\tvb = READPORT8(REG16(DX));\n\t\tWRITE8(ead, vb);\n\t\tbreak;\n\tcase 2:\n\t\tvw = READPORT16(REG16(DX));\n\t\tWRITE16(ead, vw);\n\t\tbreak;\n\tcase 4:\n\t\tvd = READPORT32(REG16(DX));\n\t\tWRITE32(ead, vd);\n\t\tbreak;\n\t}\n\n\tif(m_address_size)\n\t\tREG32(EDI) += ((m_DF) ? -1 : 1) * size;\n\telse\n\t\tREG16(DI) += ((m_DF) ? -1 : 1) * size;\n\tCYCLES(CYCLES_INS);    // TODO: Confirm this value\n}\n\nstatic void I386OP(insb)()              // Opcode 0x6c\n{\n\tI386OP(ins_generic)(1);\n}\n\nstatic void I386OP(insw)()              // Opcode 0x6d\n{\n\tI386OP(ins_generic)(2);\n}\n\nstatic void I386OP(insd)()              // Opcode 0x6d\n{\n\tI386OP(ins_generic)(4);\n}\n\nstatic void I386OP(outs_generic)(int size)\n{\n\tUINT32 eas;\n\tUINT8 vb;\n\tUINT16 vw;\n\tUINT32 vd;\n\n\tif( m_segment_prefix ) {\n\t\teas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t} else {\n\t\teas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t}\n\n\tswitch(size) {\n\tcase 1:\n\t\tvb = READ8(eas);\n\t\tWRITEPORT8(REG16(DX), vb);\n\t\tbreak;\n\tcase 2:\n\t\tvw = READ16(eas);\n\t\tWRITEPORT16(REG16(DX), vw);\n\t\tbreak;\n\tcase 4:\n\t\tvd = READ32(eas);\n\t\tWRITEPORT32(REG16(DX), vd);\n\t\tbreak;\n\t}\n\n\tif(m_address_size)\n\t\tREG32(ESI) += ((m_DF) ? -1 : 1) * size;\n\telse\n\t\tREG16(SI) += ((m_DF) ? -1 : 1) * size;\n\tCYCLES(CYCLES_OUTS);   // TODO: Confirm this value\n}\n\nstatic void I386OP(outsb)()             // Opcode 0x6e\n{\n\tI386OP(outs_generic)(1);\n}\n\nstatic void I386OP(outsw)()             // Opcode 0x6f\n{\n\tI386OP(outs_generic)(2);\n}\n\nstatic void I386OP(outsd)()             // Opcode 0x6f\n{\n\tI386OP(outs_generic)(4);\n}\n\nstatic void I386OP(repeat)(int invert_flag)\n{\n\tUINT32 repeated_eip = m_eip;\n\tUINT32 repeated_pc = m_pc;\n\tUINT8 opcode; // = FETCH();\n//  UINT32 eas, ead;\n\tUINT32 count;\n\tINT32 cycle_base = 0, cycle_adjustment = 0;\n\tUINT8 prefix_flag=1;\n\tUINT8 *flag = NULL;\n\n\n\tdo {\n\trepeated_eip = m_eip;\n\trepeated_pc = m_pc;\n\topcode = FETCH();\n\tswitch(opcode) {\n\t\tcase 0x0f:\n\t\tif (invert_flag == 0)\n\t\t\tI386OP(decode_three_bytef3)(); // sse f3 0f\n\t\telse\n\t\t\tI386OP(decode_three_bytef2)(); // sse f2 0f\n\t\treturn;\n\t\tcase 0x26:\n\t\tm_segment_override=ES;\n\t\tm_segment_prefix=1;\n\t\tbreak;\n\t\tcase 0x2e:\n\t\tm_segment_override=CS;\n\t\tm_segment_prefix=1;\n\t\tbreak;\n\t\tcase 0x36:\n\t\tm_segment_override=SS;\n\t\tm_segment_prefix=1;\n\t\tbreak;\n\t\tcase 0x3e:\n\t\tm_segment_override=DS;\n\t\tm_segment_prefix=1;\n\t\tbreak;\n\t\tcase 0x64:\n\t\tm_segment_override=FS;\n\t\tm_segment_prefix=1;\n\t\tbreak;\n\t\tcase 0x65:\n\t\tm_segment_override=GS;\n\t\tm_segment_prefix=1;\n\t\tbreak;\n\t\tcase 0x66:\n\t\tif(!m_operand_prefix)\n\t\t{\n\t\t\tm_operand_size ^= 1;\n\t\t\tm_xmm_operand_size ^= 1;\n\t\t\tm_operand_prefix = 1;\n\t\t}\n\t\tbreak;\n\t\tcase 0x67:\n\t\tif(!m_address_prefix)\n\t\t{\n\t\t\tm_address_size ^= 1;\n\t\t\tm_address_prefix = 1;\n\t\t}\n\t\tbreak;\n\t\tdefault:\n\t\tprefix_flag=0;\n\t}\n\t} while (prefix_flag);\n\n\n\tif( m_segment_prefix ) {\n\t\t// FIXME: the following does not work if both address override and segment override are used\n\t\ti386_translate(m_segment_override, m_sreg[m_segment_prefix].d ? REG32(ESI) : REG16(SI), -1 );\n\t} else {\n\t\t//eas =\n\t\ti386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), -1 );\n\t}\n\ti386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), -1 );\n\n\tswitch(opcode)\n\t{\n\t\tcase 0x6c:\n\t\tcase 0x6d:\n\t\t\t/* INSB, INSW, INSD */\n\t\t\t// TODO: cycle count\n\t\t\tcycle_base = 8;\n\t\t\tcycle_adjustment = -4;\n\t\t\tflag = NULL;\n\t\t\tbreak;\n\n\t\tcase 0x6e:\n\t\tcase 0x6f:\n\t\t\t/* OUTSB, OUTSW, OUTSD */\n\t\t\t// TODO: cycle count\n\t\t\tcycle_base = 8;\n\t\t\tcycle_adjustment = -4;\n\t\t\tflag = NULL;\n\t\t\tbreak;\n\n\t\tcase 0xa4:\n\t\tcase 0xa5:\n\t\t\t/* MOVSB, MOVSW, MOVSD */\n\t\t\tcycle_base = 8;\n\t\t\tcycle_adjustment = -4;\n\t\t\tflag = NULL;\n\t\t\tbreak;\n\n\t\tcase 0xa6:\n\t\tcase 0xa7:\n\t\t\t/* CMPSB, CMPSW, CMPSD */\n\t\t\tcycle_base = 5;\n\t\t\tcycle_adjustment = -1;\n\t\t\tflag = &m_ZF;\n\t\t\tbreak;\n\n\t\tcase 0xac:\n\t\tcase 0xad:\n\t\t\t/* LODSB, LODSW, LODSD */\n\t\t\tcycle_base = 5;\n\t\t\tcycle_adjustment = 1;\n\t\t\tflag = NULL;\n\t\t\tbreak;\n\n\t\tcase 0xaa:\n\t\tcase 0xab:\n\t\t\t/* STOSB, STOSW, STOSD */\n\t\t\tcycle_base = 5;\n\t\t\tcycle_adjustment = 0;\n\t\t\tflag = NULL;\n\t\t\tbreak;\n\n\t\tcase 0xae:\n\t\tcase 0xaf:\n\t\t\t/* SCASB, SCASW, SCASD */\n\t\t\tcycle_base = 5;\n\t\t\tcycle_adjustment = 0;\n\t\t\tflag = &m_ZF;\n\t\t\tbreak;\n\n\t\tcase 0x90:\n\t\t\tCYCLES(CYCLES_NOP);\n\t\t\treturn;\n\n\t\tcase 0xc2: // sigh\n\t\tcase 0xc3:\n\t\t\tm_pc--;\n\t\t\treturn;\n\n\t\tdefault:\n\t\t\tfatalerror(\"i386: Invalid REP/opcode %02X combination\\n\",opcode);\n\t\t\tbreak;\n\t}\n\n\tif( m_address_size ) {\n\t\tif( REG32(ECX) == 0 )\n\t\t\treturn;\n\t} else {\n\t\tif( REG16(CX) == 0 )\n\t\t\treturn;\n\t}\n\n\t/* now actually perform the repeat */\n\tCYCLES_NUM(cycle_base);\n\tdo\n\t{\n\t\tm_eip = repeated_eip;\n\t\tm_pc = repeated_pc;\n\t\ttry\n\t\t{\n\t\t\tI386OP(decode_opcode)();\n\t\t}\n\t\tcatch (UINT64 e)\n\t\t{\n\t\t\tm_eip = m_prev_eip;\n\t\t\tthrow e;\n\t\t}\n\n\t\tCYCLES_NUM(cycle_adjustment);\n\n\t\tif (m_address_size)\n\t\t\tcount = --REG32(ECX);\n\t\telse\n\t\t\tcount = --REG16(CX);\n//\t\tif (m_cycles <= 0)\n//\t\t\tgoto outofcycles;\n\t}\n\twhile( count && (!flag || (invert_flag ? !*flag : *flag)) );\n//\treturn;\n//\n//outofcycles:\n//\t/* if we run out of cycles to execute, and we are still in the repeat, we need\n//\t * to exit this instruction in such a way to go right back into it when we have\n//\t * time to execute cycles */\n//\tif(flag && (invert_flag ? *flag : !*flag))\n//\t\treturn;\n//\tm_eip = m_prev_eip;\n//\tCHANGE_PC(m_eip);\n//\tCYCLES_NUM(-cycle_base);\n}\n\nstatic void I386OP(rep)()               // Opcode 0xf3\n{\n\tI386OP(repeat)(0);\n}\n\nstatic void I386OP(repne)()             // Opcode 0xf2\n{\n\tI386OP(repeat)(1);\n}\n\nstatic void I386OP(sahf)()              // Opcode 0x9e\n{\n\tset_flags((get_flags() & 0xffffff00) | (REG8(AH) & 0xd7) );\n\tCYCLES(CYCLES_SAHF);\n}\n\nstatic void I386OP(sbb_rm8_r8)()        // Opcode 0x18\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = LOAD_RM8(modrm);\n\t\tdst = SBB8(dst, src, m_CF);\n\t\tSTORE_RM8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = READ8(ea);\n\t\tdst = SBB8(dst, src, m_CF);\n\t\tWRITE8(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(sbb_r8_rm8)()        // Opcode 0x1a\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM8(modrm);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = SBB8(dst, src, m_CF);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ8(ea);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = SBB8(dst, src, m_CF);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(sbb_al_i8)()         // Opcode 0x1c\n{\n\tUINT8 src, dst;\n\tsrc = FETCH();\n\tdst = REG8(AL);\n\tdst = SBB8(dst, src, m_CF);\n\tREG8(EAX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(scasb)()             // Opcode 0xae\n{\n\tUINT32 eas;\n\tUINT8 src, dst;\n\teas = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 0 );\n\tsrc = READ8(eas);\n\tdst = REG8(AL);\n\tSUB8(dst, src);\n\tBUMP_DI(1);\n\tCYCLES(CYCLES_SCAS);\n}\n\nstatic void I386OP(setalc)()            // Opcode 0xd6 (undocumented)\n{\n\tif( m_CF ) {\n\t\tREG8(AL) = 0xff;\n\t} else {\n\t\tREG8(AL) = 0;\n\t}\n\tCYCLES(3);\n}\n\nstatic void I386OP(seta_rm8)()          // Opcode 0x0f 97\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_CF == 0 && m_ZF == 0 ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setbe_rm8)()         // Opcode 0x0f 96\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_CF != 0 || m_ZF != 0 ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setc_rm8)()          // Opcode 0x0f 92\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_CF != 0 ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setg_rm8)()          // Opcode 0x0f 9f\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_ZF == 0 && (m_SF == m_OF) ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setge_rm8)()         // Opcode 0x0f 9d\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif(m_SF == m_OF) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setl_rm8)()          // Opcode 0x0f 9c\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_SF != m_OF ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setle_rm8)()         // Opcode 0x0f 9e\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_ZF != 0 || (m_SF != m_OF) ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setnc_rm8)()         // Opcode 0x0f 93\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_CF == 0 ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setno_rm8)()         // Opcode 0x0f 91\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_OF == 0 ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setnp_rm8)()         // Opcode 0x0f 9b\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_PF == 0 ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setns_rm8)()         // Opcode 0x0f 99\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_SF == 0 ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setnz_rm8)()         // Opcode 0x0f 95\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_ZF == 0 ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(seto_rm8)()          // Opcode 0x0f 90\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_OF != 0 ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setp_rm8)()          // Opcode 0x0f 9a\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_PF != 0 ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(sets_rm8)()          // Opcode 0x0f 98\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_SF != 0 ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setz_rm8)()          // Opcode 0x0f 94\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_ZF != 0 ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(stc)()               // Opcode 0xf9\n{\n\tm_CF = 1;\n\tCYCLES(CYCLES_STC);\n}\n\nstatic void I386OP(std)()               // Opcode 0xfd\n{\n\tm_DF = 1;\n\tCYCLES(CYCLES_STD);\n}\n\nstatic void I386OP(sti)()               // Opcode 0xfb\n{\n\tif(PROTECTED_MODE)\n\t{\n\t\tUINT8 IOPL = m_IOP1 | (m_IOP2 << 1);\n\t\tif(m_CPL > IOPL)\n\t\t\tFAULT(FAULT_GP,0);\n\t}\n\tm_delayed_interrupt_enable = 1;  // IF is set after the next instruction.\n\tCYCLES(CYCLES_STI);\n}\n\nstatic void I386OP(stosb)()             // Opcode 0xaa\n{\n\tUINT32 ead;\n\tead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 );\n\tWRITE8(ead, REG8(AL));\n\tBUMP_DI(1);\n\tCYCLES(CYCLES_STOS);\n}\n\nstatic void I386OP(sub_rm8_r8)()        // Opcode 0x28\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = LOAD_RM8(modrm);\n\t\tdst = SUB8(dst, src);\n\t\tSTORE_RM8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = READ8(ea);\n\t\tdst = SUB8(dst, src);\n\t\tWRITE8(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(sub_r8_rm8)()        // Opcode 0x2a\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM8(modrm);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = SUB8(dst, src);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ8(ea);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = SUB8(dst, src);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(sub_al_i8)()         // Opcode 0x2c\n{\n\tUINT8 src, dst;\n\tsrc = FETCH();\n\tdst = REG8(EAX);\n\tdst = SUB8(dst, src);\n\tREG8(EAX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(test_al_i8)()        // Opcode 0xa8\n{\n\tUINT8 src = FETCH();\n\tUINT8 dst = REG8(AL);\n\tdst = src & dst;\n\tSetSZPF8(dst);\n\tm_CF = 0;\n\tm_OF = 0;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(test_rm8_r8)()       // Opcode 0x84\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = LOAD_RM8(modrm);\n\t\tdst = src & dst;\n\t\tSetSZPF8(dst);\n\t\tm_CF = 0;\n\t\tm_OF = 0;\n\t\tCYCLES(CYCLES_TEST_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = READ8(ea);\n\t\tdst = src & dst;\n\t\tSetSZPF8(dst);\n\t\tm_CF = 0;\n\t\tm_OF = 0;\n\t\tCYCLES(CYCLES_TEST_REG_MEM);\n\t}\n}\n\nstatic void I386OP(xchg_r8_rm8)()       // Opcode 0x86\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT8 src = LOAD_RM8(modrm);\n\t\tUINT8 dst = LOAD_REG8(modrm);\n\t\tSTORE_REG8(modrm, src);\n\t\tSTORE_RM8(modrm, dst);\n\t\tCYCLES(CYCLES_XCHG_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT8 src = READ8(ea);\n\t\tUINT8 dst = LOAD_REG8(modrm);\n\t\tWRITE8(ea, dst);\n\t\tSTORE_REG8(modrm, src);\n\t\tCYCLES(CYCLES_XCHG_REG_MEM);\n\t}\n}\n\nstatic void I386OP(xor_rm8_r8)()        // Opcode 0x30\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = LOAD_RM8(modrm);\n\t\tdst = XOR8(dst, src);\n\t\tSTORE_RM8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = READ8(ea);\n\t\tdst = XOR8(dst, src);\n\t\tWRITE8(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(xor_r8_rm8)()        // Opcode 0x32\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM8(modrm);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = XOR8(dst, src);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ8(ea);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = XOR8(dst, src);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(xor_al_i8)()         // Opcode 0x34\n{\n\tUINT8 src, dst;\n\tsrc = FETCH();\n\tdst = REG8(AL);\n\tdst = XOR8(dst, src);\n\tREG8(AL) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\n\n\nstatic void I386OP(group80_8)()         // Opcode 0x80\n{\n\tUINT32 ea;\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:     // ADD Rm8, i8\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM8(modrm);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = ADD8(dst, src);\n\t\t\t\tSTORE_RM8(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\tdst = READ8(ea);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = ADD8(dst, src);\n\t\t\t\tWRITE8(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 1:     // OR Rm8, i8\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM8(modrm);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = OR8(dst, src);\n\t\t\t\tSTORE_RM8(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ8(ea);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = OR8(dst, src);\n\t\t\t\tWRITE8(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 2:     // ADC Rm8, i8\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM8(modrm);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = ADC8(dst, src, m_CF);\n\t\t\t\tSTORE_RM8(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ8(ea);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = ADC8(dst, src, m_CF);\n\t\t\t\tWRITE8(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 3:     // SBB Rm8, i8\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM8(modrm);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = SBB8(dst, src, m_CF);\n\t\t\t\tSTORE_RM8(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ8(ea);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = SBB8(dst, src, m_CF);\n\t\t\t\tWRITE8(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 4:     // AND Rm8, i8\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM8(modrm);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = AND8(dst, src);\n\t\t\t\tSTORE_RM8(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ8(ea);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = AND8(dst, src);\n\t\t\t\tWRITE8(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 5:     // SUB Rm8, i8\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM8(modrm);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = SUB8(dst, src);\n\t\t\t\tSTORE_RM8(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ8(ea);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = SUB8(dst, src);\n\t\t\t\tWRITE8(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:     // XOR Rm8, i8\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM8(modrm);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = XOR8(dst, src);\n\t\t\t\tSTORE_RM8(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ8(ea);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = XOR8(dst, src);\n\t\t\t\tWRITE8(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 7:     // CMP Rm8, i8\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM8(modrm);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tSUB8(dst, src);\n\t\t\t\tCYCLES(CYCLES_CMP_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\tdst = READ8(ea);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tSUB8(dst, src);\n\t\t\t\tCYCLES(CYCLES_CMP_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(groupC0_8)()         // Opcode 0xc0\n{\n\tUINT8 dst;\n\tUINT8 modrm = FETCH();\n\tUINT8 shift;\n\n\tif( modrm >= 0xc0 ) {\n\t\tdst = LOAD_RM8(modrm);\n\t\tshift = FETCH() & 0x1f;\n\t\tdst = i386_shift_rotate8(modrm, dst, shift);\n\t\tSTORE_RM8(modrm, dst);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tdst = READ8(ea);\n\t\tshift = FETCH() & 0x1f;\n\t\tdst = i386_shift_rotate8(modrm, dst, shift);\n\t\tWRITE8(ea, dst);\n\t}\n}\n\nstatic void I386OP(groupD0_8)()         // Opcode 0xd0\n{\n\tUINT8 dst;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 ) {\n\t\tdst = LOAD_RM8(modrm);\n\t\tdst = i386_shift_rotate8(modrm, dst, 1);\n\t\tSTORE_RM8(modrm, dst);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tdst = READ8(ea);\n\t\tdst = i386_shift_rotate8(modrm, dst, 1);\n\t\tWRITE8(ea, dst);\n\t}\n}\n\nstatic void I386OP(groupD2_8)()         // Opcode 0xd2\n{\n\tUINT8 dst;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 ) {\n\t\tdst = LOAD_RM8(modrm);\n\t\tdst = i386_shift_rotate8(modrm, dst, REG8(CL));\n\t\tSTORE_RM8(modrm, dst);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tdst = READ8(ea);\n\t\tdst = i386_shift_rotate8(modrm, dst, REG8(CL));\n\t\tWRITE8(ea, dst);\n\t}\n}\n\nstatic void I386OP(groupF6_8)()         // Opcode 0xf6\n{\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:         /* TEST Rm8, i8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT8 dst = LOAD_RM8(modrm);\n\t\t\t\tUINT8 src = FETCH();\n\t\t\t\tdst &= src;\n\t\t\t\tm_CF = m_OF = m_AF = 0;\n\t\t\t\tSetSZPF8(dst);\n\t\t\t\tCYCLES(CYCLES_TEST_IMM_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\tUINT8 dst = READ8(ea);\n\t\t\t\tUINT8 src = FETCH();\n\t\t\t\tdst &= src;\n\t\t\t\tm_CF = m_OF = m_AF = 0;\n\t\t\t\tSetSZPF8(dst);\n\t\t\t\tCYCLES(CYCLES_TEST_IMM_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 2:         /* NOT Rm8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT8 dst = LOAD_RM8(modrm);\n\t\t\t\tdst = ~dst;\n\t\t\t\tSTORE_RM8(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_NOT_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT8 dst = READ8(ea);\n\t\t\t\tdst = ~dst;\n\t\t\t\tWRITE8(ea, dst);\n\t\t\t\tCYCLES(CYCLES_NOT_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 3:         /* NEG Rm8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT8 dst = LOAD_RM8(modrm);\n\t\t\t\tdst = SUB8(0, dst );\n\t\t\t\tSTORE_RM8(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_NEG_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT8 dst = READ8(ea);\n\t\t\t\tdst = SUB8(0, dst );\n\t\t\t\tWRITE8(ea, dst);\n\t\t\t\tCYCLES(CYCLES_NEG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 4:         /* MUL AL, Rm8 */\n\t\t\t{\n\t\t\t\tUINT16 result;\n\t\t\t\tUINT8 src, dst;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tsrc = LOAD_RM8(modrm);\n\t\t\t\t\tCYCLES(CYCLES_MUL8_ACC_REG);       /* TODO: Correct multiply timing */\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tsrc = READ8(ea);\n\t\t\t\t\tCYCLES(CYCLES_MUL8_ACC_MEM);       /* TODO: Correct multiply timing */\n\t\t\t\t}\n\n\t\t\t\tdst = REG8(AL);\n\t\t\t\tresult = (UINT16)src * (UINT16)dst;\n\t\t\t\tREG16(AX) = (UINT16)result;\n\n\t\t\t\tm_CF = m_OF = (REG16(AX) > 0xff);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 5:         /* IMUL AL, Rm8 */\n\t\t\t{\n\t\t\t\tINT16 result;\n\t\t\t\tINT16 src, dst;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tsrc = (INT16)(INT8)LOAD_RM8(modrm);\n\t\t\t\t\tCYCLES(CYCLES_IMUL8_ACC_REG);      /* TODO: Correct multiply timing */\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tsrc = (INT16)(INT8)READ8(ea);\n\t\t\t\t\tCYCLES(CYCLES_IMUL8_ACC_MEM);      /* TODO: Correct multiply timing */\n\t\t\t\t}\n\n\t\t\t\tdst = (INT16)(INT8)REG8(AL);\n\t\t\t\tresult = src * dst;\n\n\t\t\t\tREG16(AX) = (UINT16)result;\n\n\t\t\t\tm_CF = m_OF = !(result == (INT16)(INT8)result);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:         /* DIV AL, Rm8 */\n\t\t\t{\n\t\t\t\tUINT16 quotient, remainder, result;\n\t\t\t\tUINT8 src;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tsrc = LOAD_RM8(modrm);\n\t\t\t\t\tCYCLES(CYCLES_DIV8_ACC_REG);\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tsrc = READ8(ea);\n\t\t\t\t\tCYCLES(CYCLES_DIV8_ACC_MEM);\n\t\t\t\t}\n\n\t\t\t\tquotient = (UINT16)REG16(AX);\n\t\t\t\tif( src ) {\n\t\t\t\t\tremainder = quotient % (UINT16)src;\n\t\t\t\t\tresult = quotient / (UINT16)src;\n\t\t\t\t\tif( result > 0xff ) {\n\t\t\t\t\t\t/* TODO: Divide error */\n\t\t\t\t\t} else {\n\t\t\t\t\t\tREG8(AH) = (UINT8)remainder & 0xff;\n\t\t\t\t\t\tREG8(AL) = (UINT8)result & 0xff;\n\n\t\t\t\t\t\t// this flag is actually undefined, enable on non-cyrix\n\t\t\t\t\t\tif (m_cpuid_id0 != 0x69727943)\n\t\t\t\t\t\t\tm_CF = 1;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ti386_trap(0, 0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 7:         /* IDIV AL, Rm8 */\n\t\t\t{\n\t\t\t\tINT16 quotient, remainder, result;\n\t\t\t\tUINT8 src;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tsrc = LOAD_RM8(modrm);\n\t\t\t\t\tCYCLES(CYCLES_IDIV8_ACC_REG);\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tsrc = READ8(ea);\n\t\t\t\t\tCYCLES(CYCLES_IDIV8_ACC_MEM);\n\t\t\t\t}\n\n\t\t\t\tquotient = (INT16)REG16(AX);\n\t\t\t\tif( src ) {\n\t\t\t\t\tremainder = quotient % (INT16)(INT8)src;\n\t\t\t\t\tresult = quotient / (INT16)(INT8)src;\n\t\t\t\t\tif( result > 0xff ) {\n\t\t\t\t\t\t/* TODO: Divide error */\n\t\t\t\t\t} else {\n\t\t\t\t\t\tREG8(AH) = (UINT8)remainder & 0xff;\n\t\t\t\t\t\tREG8(AL) = (UINT8)result & 0xff;\n\n\t\t\t\t\t\t// this flag is actually undefined, enable on non-cyrix\n\t\t\t\t\t\tif (m_cpuid_id0 != 0x69727943)\n\t\t\t\t\t\t\tm_CF = 1;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ti386_trap(0, 0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(groupFE_8)()         // Opcode 0xfe\n{\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:         /* INC Rm8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT8 dst = LOAD_RM8(modrm);\n\t\t\t\tdst = INC8(dst);\n\t\t\t\tSTORE_RM8(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_INC_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT8 dst = READ8(ea);\n\t\t\t\tdst = INC8(dst);\n\t\t\t\tWRITE8(ea, dst);\n\t\t\t\tCYCLES(CYCLES_INC_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 1:         /* DEC Rm8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT8 dst = LOAD_RM8(modrm);\n\t\t\t\tdst = DEC8(dst);\n\t\t\t\tSTORE_RM8(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_DEC_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT8 dst = READ8(ea);\n\t\t\t\tdst = DEC8(dst);\n\t\t\t\tWRITE8(ea, dst);\n\t\t\t\tCYCLES(CYCLES_DEC_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:         /* PUSH Rm8*/\n\t\t\t{\n\t\t\t\tUINT8 value;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tvalue = LOAD_RM8(modrm);\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tvalue = READ8(ea);\n\t\t\t\t}\n\t\t\t\tif( m_operand_size ) {\n\t\t\t\t\tPUSH32(value);\n\t\t\t\t} else {\n\t\t\t\t\tPUSH16(value);\n\t\t\t\t}\n\t\t\t\tCYCLES(CYCLES_PUSH_RM);\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treport_invalid_modrm(\"groupFE_8\", modrm);\n\t\t\tbreak;\n\t}\n}\n\n\n\nstatic void I386OP(segment_CS)()        // Opcode 0x2e\n{\n\tm_segment_prefix = 1;\n\tm_segment_override = CS;\n\n\tI386OP(decode_opcode)();\n}\n\nstatic void I386OP(segment_DS)()        // Opcode 0x3e\n{\n\tm_segment_prefix = 1;\n\tm_segment_override = DS;\n\tCYCLES(0); // TODO: Specify cycle count\n\tI386OP(decode_opcode)();\n}\n\nstatic void I386OP(segment_ES)()        // Opcode 0x26\n{\n\tm_segment_prefix = 1;\n\tm_segment_override = ES;\n\tCYCLES(0); // TODO: Specify cycle count\n\tI386OP(decode_opcode)();\n}\n\nstatic void I386OP(segment_FS)()        // Opcode 0x64\n{\n\tm_segment_prefix = 1;\n\tm_segment_override = FS;\n\tCYCLES(1); // TODO: Specify cycle count\n\tI386OP(decode_opcode)();\n}\n\nstatic void I386OP(segment_GS)()        // Opcode 0x65\n{\n\tm_segment_prefix = 1;\n\tm_segment_override = GS;\n\tCYCLES(1); // TODO: Specify cycle count\n\tI386OP(decode_opcode)();\n}\n\nstatic void I386OP(segment_SS)()        // Opcode 0x36\n{\n\tm_segment_prefix = 1;\n\tm_segment_override = SS;\n\tCYCLES(0); // TODO: Specify cycle count\n\tI386OP(decode_opcode)();\n}\n\nstatic void I386OP(operand_size)()      // Opcode prefix 0x66\n{\n\tif(m_operand_prefix == 0)\n\t{\n\t\tm_operand_size ^= 1;\n\t\tm_xmm_operand_size ^= 1;\n\t\tm_operand_prefix = 1;\n\t}\n\tm_opcode = FETCH();\n\tif (m_opcode == 0x0f)\n\t\tI386OP(decode_three_byte66)();\n\telse\n\t{\n\t\tif( m_operand_size )\n\t\t\tm_opcode_table1_32[m_opcode]();\n\t\telse\n\t\t\tm_opcode_table1_16[m_opcode]();\n\t}\n}\n\nstatic void I386OP(address_size)()      // Opcode 0x67\n{\n\tif(m_address_prefix == 0)\n\t{\n\t\tm_address_size ^= 1;\n\t\tm_address_prefix = 1;\n\t}\n\tI386OP(decode_opcode)();\n}\n\nstatic void I386OP(nop)()               // Opcode 0x90\n{\n\tCYCLES(CYCLES_NOP);\n}\n\nstatic void I386OP(int3)()              // Opcode 0xcc\n{\n\tCYCLES(CYCLES_INT3);\n\tm_ext = 0; // not an external interrupt\n\ti386_trap(3, 1, 0);\n\tm_ext = 1;\n}\n\nstatic void I386OP(int)()               // Opcode 0xcd\n{\n\tint interrupt = FETCH();\n\tCYCLES(CYCLES_INT);\n\tm_ext = 0; // not an external interrupt\n\ti386_trap(interrupt, 1, 0);\n\tm_ext = 1;\n}\n\nstatic void I386OP(into)()              // Opcode 0xce\n{\n\tif( m_OF ) {\n\t\tm_ext = 0;\n\t\ti386_trap(4, 1, 0);\n\t\tm_ext = 1;\n\t\tCYCLES(CYCLES_INTO_OF1);\n\t}\n\telse\n\t{\n\t\tCYCLES(CYCLES_INTO_OF0);\n\t}\n}\n\nstatic UINT32 i386_escape_ea;   // hack around GCC 4.6 error because we need the side effects of GetEA()\nstatic void I386OP(escape)()            // Opcodes 0xd8 - 0xdf\n{\n\tUINT8 modrm = FETCH();\n\tif(modrm < 0xc0)\n\t{\n\t\ti386_escape_ea = GetEA(modrm,0);\n\t}\n\tCYCLES(3); // TODO: confirm this\n\t(void) LOAD_RM8(modrm);\n}\n\nstatic void I386OP(hlt)()               // Opcode 0xf4\n{\n\tif(PROTECTED_MODE && m_CPL != 0)\n\t\tFAULT(FAULT_GP,0);\n\tm_halted = 1;\n\tCYCLES(CYCLES_HLT);\n//\tif (m_cycles > 0)\n//\t\tm_cycles = 0;\n}\n\nstatic void I386OP(decimal_adjust)(int direction)\n{\n\tUINT8 tmpAL = REG8(AL);\n\tUINT8 tmpCF = m_CF;\n\n\tif (m_AF || ((REG8(AL) & 0xf) > 9))\n\t{\n\t\tUINT16 t= (UINT16)REG8(AL) + (direction * 0x06);\n\t\tREG8(AL) = (UINT8)t&0xff;\n\t\tm_AF = 1;\n\t\tif (t & 0x100)\n\t\t\tm_CF = 1;\n\t\tif (direction > 0)\n\t\t\ttmpAL = REG8(AL);\n\t}\n\n\tif (tmpCF || (tmpAL > 0x99))\n\t{\n\t\tREG8(AL) += (direction * 0x60);\n\t\tm_CF = 1;\n\t}\n\n\tSetSZPF8(REG8(AL));\n}\n\nstatic void I386OP(daa)()               // Opcode 0x27\n{\n\tI386OP(decimal_adjust)(+1);\n\tCYCLES(CYCLES_DAA);\n}\n\nstatic void I386OP(das)()               // Opcode 0x2f\n{\n\tI386OP(decimal_adjust)(-1);\n\tCYCLES(CYCLES_DAS);\n}\n\nstatic void I386OP(aaa)()               // Opcode 0x37\n{\n\tif( ( (REG8(AL) & 0x0f) > 9) || (m_AF != 0) ) {\n\t\tREG16(AX) = REG16(AX) + 6;\n\t\tREG8(AH) = REG8(AH) + 1;\n\t\tm_AF = 1;\n\t\tm_CF = 1;\n\t} else {\n\t\tm_AF = 0;\n\t\tm_CF = 0;\n\t}\n\tREG8(AL) = REG8(AL) & 0x0f;\n\tCYCLES(CYCLES_AAA);\n}\n\nstatic void I386OP(aas)()               // Opcode 0x3f\n{\n\tif (m_AF || ((REG8(AL) & 0xf) > 9))\n\t{\n\t\tREG16(AX) -= 6;\n\t\tREG8(AH) -= 1;\n\t\tm_AF = 1;\n\t\tm_CF = 1;\n\t}\n\telse\n\t{\n\t\tm_AF = 0;\n\t\tm_CF = 0;\n\t}\n\tREG8(AL) &= 0x0f;\n\tCYCLES(CYCLES_AAS);\n}\n\nstatic void I386OP(aad)()               // Opcode 0xd5\n{\n\tUINT8 tempAL = REG8(AL);\n\tUINT8 tempAH = REG8(AH);\n\tUINT8 i = FETCH();\n\n\tREG8(AL) = (tempAL + (tempAH * i)) & 0xff;\n\tREG8(AH) = 0;\n\tSetSZPF8( REG8(AL) );\n\tCYCLES(CYCLES_AAD);\n}\n\nstatic void I386OP(aam)()               // Opcode 0xd4\n{\n\tUINT8 tempAL = REG8(AL);\n\tUINT8 i = FETCH();\n\n\tif(!i)\n\t{\n\t\ti386_trap(0, 0, 0);\n\t\treturn;\n\t}\n\tREG8(AH) = tempAL / i;\n\tREG8(AL) = tempAL % i;\n\tSetSZPF8( REG8(AL) );\n\tCYCLES(CYCLES_AAM);\n}\n\nstatic void I386OP(clts)()              // Opcode 0x0f 0x06\n{\n\t// Privileged instruction, CPL must be zero.  Can be used in real or v86 mode.\n\tif(PROTECTED_MODE && m_CPL != 0)\n\t\tFAULT(FAULT_GP,0)\n\tm_cr[0] &= ~0x08;   /* clear TS bit */\n\tCYCLES(CYCLES_CLTS);\n}\n\nstatic void I386OP(wait)()              // Opcode 0x9B\n{\n\t// TODO\n}\n\nstatic void I386OP(lock)()              // Opcode 0xf0\n{\n\t// lock doesn't depend on iopl on 386\n\tm_lock = true;\n\tCYCLES(CYCLES_LOCK);       // TODO: Determine correct cycle count\n\tI386OP(decode_opcode)();\n}\n\nstatic void I386OP(mov_r32_tr)()        // Opcode 0x0f 24\n{\n\tFETCH();\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void I386OP(mov_tr_r32)()        // Opcode 0x0f 26\n{\n\tFETCH();\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void I386OP(loadall)()       // Opcode 0x0f 0x07 (0x0f 0x05 on 80286), undocumented\n{\n\tfatalerror(\"i386: LOADALL unimplemented at %08X\\n\", m_pc - 1);\n}\n\nstatic void I386OP(invalid)()\n{\n\t/* for ISH.COM */\n//\treport_invalid_opcode();\n//\ti386_trap(6, 0, 0);\n}\n\nstatic void I386OP(xlat)()          // Opcode 0xd7\n{\n\tUINT32 ea;\n\tif( m_segment_prefix ) {\n\t\tif(!m_address_size)\n\t\t{\n\t\t\tea = i386_translate(m_segment_override, REG16(BX) + REG8(AL), 0 );\n\t\t}\n\t\telse\n\t\t{\n\t\t\tea = i386_translate(m_segment_override, REG32(EBX) + REG8(AL), 0 );\n\t\t}\n\t} else {\n\t\tif(!m_address_size)\n\t\t{\n\t\t\tea = i386_translate(DS, REG16(BX) + REG8(AL), 0 );\n\t\t}\n\t\telse\n\t\t{\n\t\t\tea = i386_translate(DS, REG32(EBX) + REG8(AL), 0 );\n\t\t}\n\t}\n\tREG8(AL) = READ8(ea);\n\tCYCLES(CYCLES_XLAT);\n}\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386/i386ops.h",
    "content": "// license:BSD-3-Clause\n// copyright-holders:Ville Linde, Barry Rodewald, Carl, Phil Bennett\nstruct X86_OPCODE {\n\tUINT8 opcode;\n\tUINT32 flags;\n\tvoid (*handler16)();\n\tvoid (*handler32)();\n\tbool lockable;\n};\n\n#define OP_I386         0x1\n#define OP_FPU          0x2\n#define OP_I486         0x4\n#define OP_PENTIUM      0x8\n#define OP_MMX          0x10\n#define OP_PPRO         0x20\n#define OP_SSE          0x40\n#define OP_SSE2         0x80\n#define OP_SSE3         0x100\n#define OP_CYRIX        0x8000\n#define OP_2BYTE        0x80000000\n#define OP_3BYTE66      0x40000000\n#define OP_3BYTEF2      0x20000000\n#define OP_3BYTEF3      0x10000000\n#define OP_3BYTE38      0x08000000\n#define OP_3BYTE3A      0x04000000\n#define OP_4BYTE3866    0x02000000\n#define OP_4BYTE3A66    0x01000000\n#define OP_4BYTE38F2    0x00800000\n#define OP_4BYTE3AF2    0x00400000\n#define OP_4BYTE38F3    0x00200000\n\nstatic const X86_OPCODE x86_opcode_table[] =\n{\n//  Opcode      Flags                       16-bit handler                  32-bit handler\n\t{ 0x00,     OP_I386,                    I386OP(add_rm8_r8),             I386OP(add_rm8_r8),         true },\n\t{ 0x01,     OP_I386,                    I386OP(add_rm16_r16),           I386OP(add_rm32_r32),       true },\n\t{ 0x02,     OP_I386,                    I386OP(add_r8_rm8),             I386OP(add_r8_rm8),         false},\n\t{ 0x03,     OP_I386,                    I386OP(add_r16_rm16),           I386OP(add_r32_rm32),       false},\n\t{ 0x04,     OP_I386,                    I386OP(add_al_i8),              I386OP(add_al_i8),          false},\n\t{ 0x05,     OP_I386,                    I386OP(add_ax_i16),             I386OP(add_eax_i32),        false},\n\t{ 0x06,     OP_I386,                    I386OP(push_es16),              I386OP(push_es32),          false},\n\t{ 0x07,     OP_I386,                    I386OP(pop_es16),               I386OP(pop_es32),           false},\n\t{ 0x08,     OP_I386,                    I386OP(or_rm8_r8),              I386OP(or_rm8_r8),          true },\n\t{ 0x09,     OP_I386,                    I386OP(or_rm16_r16),            I386OP(or_rm32_r32),        true },\n\t{ 0x0A,     OP_I386,                    I386OP(or_r8_rm8),              I386OP(or_r8_rm8),          false},\n\t{ 0x0B,     OP_I386,                    I386OP(or_r16_rm16),            I386OP(or_r32_rm32),        false},\n\t{ 0x0C,     OP_I386,                    I386OP(or_al_i8),               I386OP(or_al_i8),           false},\n\t{ 0x0D,     OP_I386,                    I386OP(or_ax_i16),              I386OP(or_eax_i32),         false},\n\t{ 0x0E,     OP_I386,                    I386OP(push_cs16),              I386OP(push_cs32),          false},\n\t{ 0x0F,     OP_I386,                    I386OP(decode_two_byte),        I386OP(decode_two_byte),    true },\n\t{ 0x10,     OP_I386,                    I386OP(adc_rm8_r8),             I386OP(adc_rm8_r8),         true },\n\t{ 0x11,     OP_I386,                    I386OP(adc_rm16_r16),           I386OP(adc_rm32_r32),       true },\n\t{ 0x12,     OP_I386,                    I386OP(adc_r8_rm8),             I386OP(adc_r8_rm8),         false},\n\t{ 0x13,     OP_I386,                    I386OP(adc_r16_rm16),           I386OP(adc_r32_rm32),       false},\n\t{ 0x14,     OP_I386,                    I386OP(adc_al_i8),              I386OP(adc_al_i8),          false},\n\t{ 0x15,     OP_I386,                    I386OP(adc_ax_i16),             I386OP(adc_eax_i32),        false},\n\t{ 0x16,     OP_I386,                    I386OP(push_ss16),              I386OP(push_ss32),          false},\n\t{ 0x17,     OP_I386,                    I386OP(pop_ss16),               I386OP(pop_ss32),           false},\n\t{ 0x18,     OP_I386,                    I386OP(sbb_rm8_r8),             I386OP(sbb_rm8_r8),         true },\n\t{ 0x19,     OP_I386,                    I386OP(sbb_rm16_r16),           I386OP(sbb_rm32_r32),       true },\n\t{ 0x1A,     OP_I386,                    I386OP(sbb_r8_rm8),             I386OP(sbb_r8_rm8),         false},\n\t{ 0x1B,     OP_I386,                    I386OP(sbb_r16_rm16),           I386OP(sbb_r32_rm32),       false},\n\t{ 0x1C,     OP_I386,                    I386OP(sbb_al_i8),              I386OP(sbb_al_i8),          false},\n\t{ 0x1D,     OP_I386,                    I386OP(sbb_ax_i16),             I386OP(sbb_eax_i32),        false},\n\t{ 0x1E,     OP_I386,                    I386OP(push_ds16),              I386OP(push_ds32),          false},\n\t{ 0x1F,     OP_I386,                    I386OP(pop_ds16),               I386OP(pop_ds32),           false},\n\t{ 0x20,     OP_I386,                    I386OP(and_rm8_r8),             I386OP(and_rm8_r8),         true },\n\t{ 0x21,     OP_I386,                    I386OP(and_rm16_r16),           I386OP(and_rm32_r32),       true },\n\t{ 0x22,     OP_I386,                    I386OP(and_r8_rm8),             I386OP(and_r8_rm8),         false},\n\t{ 0x23,     OP_I386,                    I386OP(and_r16_rm16),           I386OP(and_r32_rm32),       false},\n\t{ 0x24,     OP_I386,                    I386OP(and_al_i8),              I386OP(and_al_i8),          false},\n\t{ 0x25,     OP_I386,                    I386OP(and_ax_i16),             I386OP(and_eax_i32),        false},\n\t{ 0x26,     OP_I386,                    I386OP(segment_ES),             I386OP(segment_ES),         false},\n\t{ 0x27,     OP_I386,                    I386OP(daa),                    I386OP(daa),                false},\n\t{ 0x28,     OP_I386,                    I386OP(sub_rm8_r8),             I386OP(sub_rm8_r8),         true },\n\t{ 0x29,     OP_I386,                    I386OP(sub_rm16_r16),           I386OP(sub_rm32_r32),       true },\n\t{ 0x2A,     OP_I386,                    I386OP(sub_r8_rm8),             I386OP(sub_r8_rm8),         false},\n\t{ 0x2B,     OP_I386,                    I386OP(sub_r16_rm16),           I386OP(sub_r32_rm32),       false},\n\t{ 0x2C,     OP_I386,                    I386OP(sub_al_i8),              I386OP(sub_al_i8),          false},\n\t{ 0x2D,     OP_I386,                    I386OP(sub_ax_i16),             I386OP(sub_eax_i32),        false},\n\t{ 0x2E,     OP_I386,                    I386OP(segment_CS),             I386OP(segment_CS),         false},\n\t{ 0x2F,     OP_I386,                    I386OP(das),                    I386OP(das),                false},\n\t{ 0x30,     OP_I386,                    I386OP(xor_rm8_r8),             I386OP(xor_rm8_r8),         true },\n\t{ 0x31,     OP_I386,                    I386OP(xor_rm16_r16),           I386OP(xor_rm32_r32),       true },\n\t{ 0x32,     OP_I386,                    I386OP(xor_r8_rm8),             I386OP(xor_r8_rm8),         false},\n\t{ 0x33,     OP_I386,                    I386OP(xor_r16_rm16),           I386OP(xor_r32_rm32),       false},\n\t{ 0x34,     OP_I386,                    I386OP(xor_al_i8),              I386OP(xor_al_i8),          false},\n\t{ 0x35,     OP_I386,                    I386OP(xor_ax_i16),             I386OP(xor_eax_i32),        false},\n\t{ 0x36,     OP_I386,                    I386OP(segment_SS),             I386OP(segment_SS),         false},\n\t{ 0x37,     OP_I386,                    I386OP(aaa),                    I386OP(aaa),                false},\n\t{ 0x38,     OP_I386,                    I386OP(cmp_rm8_r8),             I386OP(cmp_rm8_r8),         false},\n\t{ 0x39,     OP_I386,                    I386OP(cmp_rm16_r16),           I386OP(cmp_rm32_r32),       false},\n\t{ 0x3A,     OP_I386,                    I386OP(cmp_r8_rm8),             I386OP(cmp_r8_rm8),         false},\n\t{ 0x3B,     OP_I386,                    I386OP(cmp_r16_rm16),           I386OP(cmp_r32_rm32),       false},\n\t{ 0x3C,     OP_I386,                    I386OP(cmp_al_i8),              I386OP(cmp_al_i8),          false},\n\t{ 0x3D,     OP_I386,                    I386OP(cmp_ax_i16),             I386OP(cmp_eax_i32),        false},\n\t{ 0x3E,     OP_I386,                    I386OP(segment_DS),             I386OP(segment_DS),         false},\n\t{ 0x3F,     OP_I386,                    I386OP(aas),                    I386OP(aas),                false},\n\t{ 0x40,     OP_I386,                    I386OP(inc_ax),                 I386OP(inc_eax),            false},\n\t{ 0x41,     OP_I386,                    I386OP(inc_cx),                 I386OP(inc_ecx),            false},\n\t{ 0x42,     OP_I386,                    I386OP(inc_dx),                 I386OP(inc_edx),            false},\n\t{ 0x43,     OP_I386,                    I386OP(inc_bx),                 I386OP(inc_ebx),            false},\n\t{ 0x44,     OP_I386,                    I386OP(inc_sp),                 I386OP(inc_esp),            false},\n\t{ 0x45,     OP_I386,                    I386OP(inc_bp),                 I386OP(inc_ebp),            false},\n\t{ 0x46,     OP_I386,                    I386OP(inc_si),                 I386OP(inc_esi),            false},\n\t{ 0x47,     OP_I386,                    I386OP(inc_di),                 I386OP(inc_edi),            false},\n\t{ 0x48,     OP_I386,                    I386OP(dec_ax),                 I386OP(dec_eax),            false},\n\t{ 0x49,     OP_I386,                    I386OP(dec_cx),                 I386OP(dec_ecx),            false},\n\t{ 0x4A,     OP_I386,                    I386OP(dec_dx),                 I386OP(dec_edx),            false},\n\t{ 0x4B,     OP_I386,                    I386OP(dec_bx),                 I386OP(dec_ebx),            false},\n\t{ 0x4C,     OP_I386,                    I386OP(dec_sp),                 I386OP(dec_esp),            false},\n\t{ 0x4D,     OP_I386,                    I386OP(dec_bp),                 I386OP(dec_ebp),            false},\n\t{ 0x4E,     OP_I386,                    I386OP(dec_si),                 I386OP(dec_esi),            false},\n\t{ 0x4F,     OP_I386,                    I386OP(dec_di),                 I386OP(dec_edi),            false},\n\t{ 0x50,     OP_I386,                    I386OP(push_ax),                I386OP(push_eax),           false},\n\t{ 0x51,     OP_I386,                    I386OP(push_cx),                I386OP(push_ecx),           false},\n\t{ 0x52,     OP_I386,                    I386OP(push_dx),                I386OP(push_edx),           false},\n\t{ 0x53,     OP_I386,                    I386OP(push_bx),                I386OP(push_ebx),           false},\n\t{ 0x54,     OP_I386,                    I386OP(push_sp),                I386OP(push_esp),           false},\n\t{ 0x55,     OP_I386,                    I386OP(push_bp),                I386OP(push_ebp),           false},\n\t{ 0x56,     OP_I386,                    I386OP(push_si),                I386OP(push_esi),           false},\n\t{ 0x57,     OP_I386,                    I386OP(push_di),                I386OP(push_edi),           false},\n\t{ 0x58,     OP_I386,                    I386OP(pop_ax),                 I386OP(pop_eax),            false},\n\t{ 0x59,     OP_I386,                    I386OP(pop_cx),                 I386OP(pop_ecx),            false},\n\t{ 0x5A,     OP_I386,                    I386OP(pop_dx),                 I386OP(pop_edx),            false},\n\t{ 0x5B,     OP_I386,                    I386OP(pop_bx),                 I386OP(pop_ebx),            false},\n\t{ 0x5C,     OP_I386,                    I386OP(pop_sp),                 I386OP(pop_esp),            false},\n\t{ 0x5D,     OP_I386,                    I386OP(pop_bp),                 I386OP(pop_ebp),            false},\n\t{ 0x5E,     OP_I386,                    I386OP(pop_si),                 I386OP(pop_esi),            false},\n\t{ 0x5F,     OP_I386,                    I386OP(pop_di),                 I386OP(pop_edi),            false},\n\t{ 0x60,     OP_I386,                    I386OP(pusha),                  I386OP(pushad),             false},\n\t{ 0x61,     OP_I386,                    I386OP(popa),                   I386OP(popad),              false},\n\t{ 0x62,     OP_I386,                    I386OP(bound_r16_m16_m16),      I386OP(bound_r32_m32_m32),  false},\n\t{ 0x63,     OP_I386,                    I386OP(arpl),                   I386OP(arpl),               false},\n\t{ 0x64,     OP_I386,                    I386OP(segment_FS),             I386OP(segment_FS),         false},\n\t{ 0x65,     OP_I386,                    I386OP(segment_GS),             I386OP(segment_GS),         false},\n\t{ 0x66,     OP_I386,                    I386OP(operand_size),           I386OP(operand_size),       false},\n\t{ 0x67,     OP_I386,                    I386OP(address_size),           I386OP(address_size),       false},\n\t{ 0x68,     OP_I386,                    I386OP(push_i16),               I386OP(push_i32),           false},\n\t{ 0x69,     OP_I386,                    I386OP(imul_r16_rm16_i16),      I386OP(imul_r32_rm32_i32),  false},\n\t{ 0x6A,     OP_I386,                    I386OP(push_i8),                I386OP(push_i8),            false},\n\t{ 0x6B,     OP_I386,                    I386OP(imul_r16_rm16_i8),       I386OP(imul_r32_rm32_i8),   false},\n\t{ 0x6C,     OP_I386,                    I386OP(insb),                   I386OP(insb),               false},\n\t{ 0x6D,     OP_I386,                    I386OP(insw),                   I386OP(insd),               false},\n\t{ 0x6E,     OP_I386,                    I386OP(outsb),                  I386OP(outsb),              false},\n\t{ 0x6F,     OP_I386,                    I386OP(outsw),                  I386OP(outsd),              false},\n\t{ 0x70,     OP_I386,                    I386OP(jo_rel8),                I386OP(jo_rel8),            false},\n\t{ 0x71,     OP_I386,                    I386OP(jno_rel8),               I386OP(jno_rel8),           false},\n\t{ 0x72,     OP_I386,                    I386OP(jc_rel8),                I386OP(jc_rel8),            false},\n\t{ 0x73,     OP_I386,                    I386OP(jnc_rel8),               I386OP(jnc_rel8),           false},\n\t{ 0x74,     OP_I386,                    I386OP(jz_rel8),                I386OP(jz_rel8),            false},\n\t{ 0x75,     OP_I386,                    I386OP(jnz_rel8),               I386OP(jnz_rel8),           false},\n\t{ 0x76,     OP_I386,                    I386OP(jbe_rel8),               I386OP(jbe_rel8),           false},\n\t{ 0x77,     OP_I386,                    I386OP(ja_rel8),                I386OP(ja_rel8),            false},\n\t{ 0x78,     OP_I386,                    I386OP(js_rel8),                I386OP(js_rel8),            false},\n\t{ 0x79,     OP_I386,                    I386OP(jns_rel8),               I386OP(jns_rel8),           false},\n\t{ 0x7A,     OP_I386,                    I386OP(jp_rel8),                I386OP(jp_rel8),            false},\n\t{ 0x7B,     OP_I386,                    I386OP(jnp_rel8),               I386OP(jnp_rel8),           false},\n\t{ 0x7C,     OP_I386,                    I386OP(jl_rel8),                I386OP(jl_rel8),            false},\n\t{ 0x7D,     OP_I386,                    I386OP(jge_rel8),               I386OP(jge_rel8),           false},\n\t{ 0x7E,     OP_I386,                    I386OP(jle_rel8),               I386OP(jle_rel8),           false},\n\t{ 0x7F,     OP_I386,                    I386OP(jg_rel8),                I386OP(jg_rel8),            false},\n\t{ 0x80,     OP_I386,                    I386OP(group80_8),              I386OP(group80_8),          true },\n\t{ 0x81,     OP_I386,                    I386OP(group81_16),             I386OP(group81_32),         true },\n\t{ 0x82,     OP_I386,                    I386OP(group80_8),              I386OP(group80_8),          true },\n\t{ 0x83,     OP_I386,                    I386OP(group83_16),             I386OP(group83_32),         true },\n\t{ 0x84,     OP_I386,                    I386OP(test_rm8_r8),            I386OP(test_rm8_r8),        false},\n\t{ 0x85,     OP_I386,                    I386OP(test_rm16_r16),          I386OP(test_rm32_r32),      false},\n\t{ 0x86,     OP_I386,                    I386OP(xchg_r8_rm8),            I386OP(xchg_r8_rm8),        true },\n\t{ 0x87,     OP_I386,                    I386OP(xchg_r16_rm16),          I386OP(xchg_r32_rm32),      true },\n\t{ 0x88,     OP_I386,                    I386OP(mov_rm8_r8),             I386OP(mov_rm8_r8),         false},\n\t{ 0x89,     OP_I386,                    I386OP(mov_rm16_r16),           I386OP(mov_rm32_r32),       false},\n\t{ 0x8A,     OP_I386,                    I386OP(mov_r8_rm8),             I386OP(mov_r8_rm8),         false},\n\t{ 0x8B,     OP_I386,                    I386OP(mov_r16_rm16),           I386OP(mov_r32_rm32),       false},\n\t{ 0x8C,     OP_I386,                    I386OP(mov_rm16_sreg),          I386OP(mov_rm16_sreg),      false},\n\t{ 0x8D,     OP_I386,                    I386OP(lea16),                  I386OP(lea32),              false},\n\t{ 0x8E,     OP_I386,                    I386OP(mov_sreg_rm16),          I386OP(mov_sreg_rm16),      false},\n\t{ 0x8F,     OP_I386,                    I386OP(pop_rm16),               I386OP(pop_rm32),           false},\n\t{ 0x90,     OP_I386,                    I386OP(nop),                    I386OP(nop),                false},\n\t{ 0x91,     OP_I386,                    I386OP(xchg_ax_cx),             I386OP(xchg_eax_ecx),       false},\n\t{ 0x92,     OP_I386,                    I386OP(xchg_ax_dx),             I386OP(xchg_eax_edx),       false},\n\t{ 0x93,     OP_I386,                    I386OP(xchg_ax_bx),             I386OP(xchg_eax_ebx),       false},\n\t{ 0x94,     OP_I386,                    I386OP(xchg_ax_sp),             I386OP(xchg_eax_esp),       false},\n\t{ 0x95,     OP_I386,                    I386OP(xchg_ax_bp),             I386OP(xchg_eax_ebp),       false},\n\t{ 0x96,     OP_I386,                    I386OP(xchg_ax_si),             I386OP(xchg_eax_esi),       false},\n\t{ 0x97,     OP_I386,                    I386OP(xchg_ax_di),             I386OP(xchg_eax_edi),       false},\n\t{ 0x98,     OP_I386,                    I386OP(cbw),                    I386OP(cwde),               false},\n\t{ 0x99,     OP_I386,                    I386OP(cwd),                    I386OP(cdq),                false},\n\t{ 0x9A,     OP_I386,                    I386OP(call_abs16),             I386OP(call_abs32),         false},\n\t{ 0x9B,     OP_I386,                    I386OP(wait),                   I386OP(wait),               false},\n\t{ 0x9B,     OP_I486,                    I486OP(wait),                   I486OP(wait),               false},\n\t{ 0x9C,     OP_I386,                    I386OP(pushf),                  I386OP(pushfd),             false},\n\t{ 0x9D,     OP_I386,                    I386OP(popf),                   I386OP(popfd),              false},\n\t{ 0x9E,     OP_I386,                    I386OP(sahf),                   I386OP(sahf),               false},\n\t{ 0x9F,     OP_I386,                    I386OP(lahf),                   I386OP(lahf),               false},\n\t{ 0xA0,     OP_I386,                    I386OP(mov_al_m8),              I386OP(mov_al_m8),          false},\n\t{ 0xA1,     OP_I386,                    I386OP(mov_ax_m16),             I386OP(mov_eax_m32),        false},\n\t{ 0xA2,     OP_I386,                    I386OP(mov_m8_al),              I386OP(mov_m8_al),          false},\n\t{ 0xA3,     OP_I386,                    I386OP(mov_m16_ax),             I386OP(mov_m32_eax),        false},\n\t{ 0xA4,     OP_I386,                    I386OP(movsb),                  I386OP(movsb),              false},\n\t{ 0xA5,     OP_I386,                    I386OP(movsw),                  I386OP(movsd),              false},\n\t{ 0xA6,     OP_I386,                    I386OP(cmpsb),                  I386OP(cmpsb),              false},\n\t{ 0xA7,     OP_I386,                    I386OP(cmpsw),                  I386OP(cmpsd),              false},\n\t{ 0xA8,     OP_I386,                    I386OP(test_al_i8),             I386OP(test_al_i8),         false},\n\t{ 0xA9,     OP_I386,                    I386OP(test_ax_i16),            I386OP(test_eax_i32),       false},\n\t{ 0xAA,     OP_I386,                    I386OP(stosb),                  I386OP(stosb),              false},\n\t{ 0xAB,     OP_I386,                    I386OP(stosw),                  I386OP(stosd),              false},\n\t{ 0xAC,     OP_I386,                    I386OP(lodsb),                  I386OP(lodsb),              false},\n\t{ 0xAD,     OP_I386,                    I386OP(lodsw),                  I386OP(lodsd),              false},\n\t{ 0xAE,     OP_I386,                    I386OP(scasb),                  I386OP(scasb),              false},\n\t{ 0xAF,     OP_I386,                    I386OP(scasw),                  I386OP(scasd),              false},\n\t{ 0xB0,     OP_I386,                    I386OP(mov_al_i8),              I386OP(mov_al_i8),          false},\n\t{ 0xB1,     OP_I386,                    I386OP(mov_cl_i8),              I386OP(mov_cl_i8),          false},\n\t{ 0xB2,     OP_I386,                    I386OP(mov_dl_i8),              I386OP(mov_dl_i8),          false},\n\t{ 0xB3,     OP_I386,                    I386OP(mov_bl_i8),              I386OP(mov_bl_i8),          false},\n\t{ 0xB4,     OP_I386,                    I386OP(mov_ah_i8),              I386OP(mov_ah_i8),          false},\n\t{ 0xB5,     OP_I386,                    I386OP(mov_ch_i8),              I386OP(mov_ch_i8),          false},\n\t{ 0xB6,     OP_I386,                    I386OP(mov_dh_i8),              I386OP(mov_dh_i8),          false},\n\t{ 0xB7,     OP_I386,                    I386OP(mov_bh_i8),              I386OP(mov_bh_i8),          false},\n\t{ 0xB8,     OP_I386,                    I386OP(mov_ax_i16),             I386OP(mov_eax_i32),        false},\n\t{ 0xB9,     OP_I386,                    I386OP(mov_cx_i16),             I386OP(mov_ecx_i32),        false},\n\t{ 0xBA,     OP_I386,                    I386OP(mov_dx_i16),             I386OP(mov_edx_i32),        false},\n\t{ 0xBB,     OP_I386,                    I386OP(mov_bx_i16),             I386OP(mov_ebx_i32),        false},\n\t{ 0xBC,     OP_I386,                    I386OP(mov_sp_i16),             I386OP(mov_esp_i32),        false},\n\t{ 0xBD,     OP_I386,                    I386OP(mov_bp_i16),             I386OP(mov_ebp_i32),        false},\n\t{ 0xBE,     OP_I386,                    I386OP(mov_si_i16),             I386OP(mov_esi_i32),        false},\n\t{ 0xBF,     OP_I386,                    I386OP(mov_di_i16),             I386OP(mov_edi_i32),        false},\n\t{ 0xC0,     OP_I386,                    I386OP(groupC0_8),              I386OP(groupC0_8),          false},\n\t{ 0xC1,     OP_I386,                    I386OP(groupC1_16),             I386OP(groupC1_32),         false},\n\t{ 0xC2,     OP_I386,                    I386OP(ret_near16_i16),         I386OP(ret_near32_i16),     false},\n\t{ 0xC3,     OP_I386,                    I386OP(ret_near16),             I386OP(ret_near32),         false},\n\t{ 0xC4,     OP_I386,                    I386OP(les16),                  I386OP(les32),              false},\n\t{ 0xC5,     OP_I386,                    I386OP(lds16),                  I386OP(lds32),              false},\n\t{ 0xC6,     OP_I386,                    I386OP(mov_rm8_i8),             I386OP(mov_rm8_i8),         false},\n\t{ 0xC7,     OP_I386,                    I386OP(mov_rm16_i16),           I386OP(mov_rm32_i32),       false},\n\t{ 0xC8,     OP_I386,                    I386OP(enter16),                I386OP(enter32),            false},\n\t{ 0xC9,     OP_I386,                    I386OP(leave16),                I386OP(leave32),            false},\n\t{ 0xCA,     OP_I386,                    I386OP(retf_i16),               I386OP(retf_i32),           false},\n\t{ 0xCB,     OP_I386,                    I386OP(retf16),                 I386OP(retf32),             false},\n\t{ 0xCC,     OP_I386,                    I386OP(int3),                   I386OP(int3),               false},\n\t{ 0xCD,     OP_I386,                    I386OP(int),                    I386OP(int),                false},\n\t{ 0xCE,     OP_I386,                    I386OP(into),                   I386OP(into),               false},\n\t{ 0xCF,     OP_I386,                    I386OP(iret16),                 I386OP(iret32),             false},\n\t{ 0xD0,     OP_I386,                    I386OP(groupD0_8),              I386OP(groupD0_8),          false},\n\t{ 0xD1,     OP_I386,                    I386OP(groupD1_16),             I386OP(groupD1_32),         false},\n\t{ 0xD2,     OP_I386,                    I386OP(groupD2_8),              I386OP(groupD2_8),          false},\n\t{ 0xD3,     OP_I386,                    I386OP(groupD3_16),             I386OP(groupD3_32),         false},\n\t{ 0xD4,     OP_I386,                    I386OP(aam),                    I386OP(aam),                false},\n\t{ 0xD5,     OP_I386,                    I386OP(aad),                    I386OP(aad),                false},\n\t{ 0xD6,     OP_I386,                    I386OP(setalc),                 I386OP(setalc),             false},\n\t{ 0xD7,     OP_I386,                    I386OP(xlat),                   I386OP(xlat),               false},\n\t{ 0xD8,     OP_I386,                    I386OP(escape),                 I386OP(escape),             false},\n\t{ 0xD9,     OP_I386,                    I386OP(escape),                 I386OP(escape),             false},\n\t{ 0xDA,     OP_I386,                    I386OP(escape),                 I386OP(escape),             false},\n\t{ 0xDB,     OP_I386,                    I386OP(escape),                 I386OP(escape),             false},\n\t{ 0xDC,     OP_I386,                    I386OP(escape),                 I386OP(escape),             false},\n\t{ 0xDD,     OP_I386,                    I386OP(escape),                 I386OP(escape),             false},\n\t{ 0xDE,     OP_I386,                    I386OP(escape),                 I386OP(escape),             false},\n\t{ 0xDF,     OP_I386,                    I386OP(escape),                 I386OP(escape),             false},\n\t{ 0xD8,     OP_FPU,                     I386OP(x87_group_d8),           I386OP(x87_group_d8),       false},\n\t{ 0xD9,     OP_FPU,                     I386OP(x87_group_d9),           I386OP(x87_group_d9),       false},\n\t{ 0xDA,     OP_FPU,                     I386OP(x87_group_da),           I386OP(x87_group_da),       false},\n\t{ 0xDB,     OP_FPU,                     I386OP(x87_group_db),           I386OP(x87_group_db),       false},\n\t{ 0xDC,     OP_FPU,                     I386OP(x87_group_dc),           I386OP(x87_group_dc),       false},\n\t{ 0xDD,     OP_FPU,                     I386OP(x87_group_dd),           I386OP(x87_group_dd),       false},\n\t{ 0xDE,     OP_FPU,                     I386OP(x87_group_de),           I386OP(x87_group_de),       false},\n\t{ 0xDF,     OP_FPU,                     I386OP(x87_group_df),           I386OP(x87_group_df),       false},\n\t{ 0xE0,     OP_I386,                    I386OP(loopne16),               I386OP(loopne32),           false},\n\t{ 0xE1,     OP_I386,                    I386OP(loopz16),                I386OP(loopz32),            false},\n\t{ 0xE2,     OP_I386,                    I386OP(loop16),                 I386OP(loop32),             false},\n\t{ 0xE3,     OP_I386,                    I386OP(jcxz16),                 I386OP(jcxz32),             false},\n\t{ 0xE4,     OP_I386,                    I386OP(in_al_i8),               I386OP(in_al_i8),           false},\n\t{ 0xE5,     OP_I386,                    I386OP(in_ax_i8),               I386OP(in_eax_i8),          false},\n\t{ 0xE6,     OP_I386,                    I386OP(out_al_i8),              I386OP(out_al_i8),          false},\n\t{ 0xE7,     OP_I386,                    I386OP(out_ax_i8),              I386OP(out_eax_i8),         false},\n\t{ 0xE8,     OP_I386,                    I386OP(call_rel16),             I386OP(call_rel32),         false},\n\t{ 0xE9,     OP_I386,                    I386OP(jmp_rel16),              I386OP(jmp_rel32),          false},\n\t{ 0xEA,     OP_I386,                    I386OP(jmp_abs16),              I386OP(jmp_abs32),          false},\n\t{ 0xEB,     OP_I386,                    I386OP(jmp_rel8),               I386OP(jmp_rel8),           false},\n\t{ 0xEC,     OP_I386,                    I386OP(in_al_dx),               I386OP(in_al_dx),           false},\n\t{ 0xED,     OP_I386,                    I386OP(in_ax_dx),               I386OP(in_eax_dx),          false},\n\t{ 0xEE,     OP_I386,                    I386OP(out_al_dx),              I386OP(out_al_dx),          false},\n\t{ 0xEF,     OP_I386,                    I386OP(out_ax_dx),              I386OP(out_eax_dx),         false},\n\t{ 0xF0,     OP_I386,                    I386OP(lock),                   I386OP(lock),               false},\n\t{ 0xF1,     OP_I386,                    I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xF2,     OP_I386,                    I386OP(repne),                  I386OP(repne),              false},\n\t{ 0xF3,     OP_I386,                    I386OP(rep),                    I386OP(rep),                false},\n\t{ 0xF4,     OP_I386,                    I386OP(hlt),                    I386OP(hlt),                false},\n\t{ 0xF5,     OP_I386,                    I386OP(cmc),                    I386OP(cmc),                false},\n\t{ 0xF6,     OP_I386,                    I386OP(groupF6_8),              I386OP(groupF6_8),          true },\n\t{ 0xF7,     OP_I386,                    I386OP(groupF7_16),             I386OP(groupF7_32),         true },\n\t{ 0xF8,     OP_I386,                    I386OP(clc),                    I386OP(clc),                false},\n\t{ 0xF9,     OP_I386,                    I386OP(stc),                    I386OP(stc),                false},\n\t{ 0xFA,     OP_I386,                    I386OP(cli),                    I386OP(cli),                false},\n\t{ 0xFB,     OP_I386,                    I386OP(sti),                    I386OP(sti),                false},\n\t{ 0xFC,     OP_I386,                    I386OP(cld),                    I386OP(cld),                false},\n\t{ 0xFD,     OP_I386,                    I386OP(std),                    I386OP(std),                false},\n\t{ 0xFE,     OP_I386,                    I386OP(groupFE_8),              I386OP(groupFE_8),          true },\n\t{ 0xFF,     OP_I386,                    I386OP(groupFF_16),             I386OP(groupFF_32),         true },\n\t/* 0F ?? */\n\t{ 0x00,     OP_2BYTE|OP_I386,           I386OP(group0F00_16),           I386OP(group0F00_32),       false},\n\t{ 0x01,     OP_2BYTE|OP_I386,           I386OP(group0F01_16),           I386OP(group0F01_32),       false},\n\t{ 0x01,     OP_2BYTE|OP_I486,           I486OP(group0F01_16),           I486OP(group0F01_32),       false},\n\t{ 0x02,     OP_2BYTE|OP_I386,           I386OP(lar_r16_rm16),           I386OP(lar_r32_rm32),       false},\n\t{ 0x03,     OP_2BYTE|OP_I386,           I386OP(lsl_r16_rm16),           I386OP(lsl_r32_rm32),       false},\n\t{ 0x06,     OP_2BYTE|OP_I386,           I386OP(clts),                   I386OP(clts),               false},\n\t{ 0x07,     OP_2BYTE|OP_I386,           I386OP(loadall),                I386OP(loadall),            false},\n\t{ 0x08,     OP_2BYTE|OP_I486,           I486OP(invd),                   I486OP(invd),               false},\n\t{ 0x09,     OP_2BYTE|OP_I486,           I486OP(wbinvd),                 I486OP(wbinvd),             false},\n\t{ 0x0B,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(ud2),                 PENTIUMOP(ud2),             false},\n\t{ 0x10,     OP_2BYTE|OP_SSE,            SSEOP(movups_r128_rm128),       SSEOP(movups_r128_rm128),   false},\n\t{ 0x11,     OP_2BYTE|OP_SSE,            SSEOP(movups_rm128_r128),       SSEOP(movups_rm128_r128),   false},\n\t{ 0x12,     OP_2BYTE|OP_SSE,            SSEOP(movlps_r128_m64),         SSEOP(movlps_r128_m64),     false},\n\t{ 0x13,     OP_2BYTE|OP_SSE,            SSEOP(movlps_m64_r128),         SSEOP(movlps_m64_r128),     false},\n\t{ 0x14,     OP_2BYTE|OP_SSE,            SSEOP(unpcklps_r128_rm128),     SSEOP(unpcklps_r128_rm128), false},\n\t{ 0x15,     OP_2BYTE|OP_SSE,            SSEOP(unpckhps_r128_rm128),     SSEOP(unpckhps_r128_rm128), false},\n\t{ 0x16,     OP_2BYTE|OP_SSE,            SSEOP(movhps_r128_m64),         SSEOP(movhps_r128_m64),     false},\n\t{ 0x17,     OP_2BYTE|OP_SSE,            SSEOP(movhps_m64_r128),         SSEOP(movhps_m64_r128),     false},\n\t{ 0x18,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(prefetch_m8),         PENTIUMOP(prefetch_m8),     false},\n\t{ 0x20,     OP_2BYTE|OP_I386,           I386OP(mov_r32_cr),             I386OP(mov_r32_cr),         false},\n\t{ 0x21,     OP_2BYTE|OP_I386,           I386OP(mov_r32_dr),             I386OP(mov_r32_dr),         false},\n\t{ 0x22,     OP_2BYTE|OP_I386,           I386OP(mov_cr_r32),             I386OP(mov_cr_r32),         false},\n\t{ 0x22,     OP_2BYTE|OP_I486,           I486OP(mov_cr_r32),             I486OP(mov_cr_r32),         false},\n\t{ 0x23,     OP_2BYTE|OP_I386,           I386OP(mov_dr_r32),             I386OP(mov_dr_r32),         false},\n\t{ 0x24,     OP_2BYTE|OP_I386,           I386OP(mov_r32_tr),             I386OP(mov_r32_tr),         false},\n\t{ 0x26,     OP_2BYTE|OP_I386,           I386OP(mov_tr_r32),             I386OP(mov_tr_r32),         false},\n\t{ 0x28,     OP_2BYTE|OP_SSE,            SSEOP(movaps_r128_rm128),       SSEOP(movaps_r128_rm128),   false},\n\t{ 0x29,     OP_2BYTE|OP_SSE,            SSEOP(movaps_rm128_r128),       SSEOP(movaps_rm128_r128),   false},\n\t{ 0x2a,     OP_2BYTE|OP_SSE,            SSEOP(cvtpi2ps_r128_rm64),      SSEOP(cvtpi2ps_r128_rm64),  false},\n\t{ 0x2b,     OP_2BYTE|OP_SSE,            SSEOP(movntps_m128_r128),       SSEOP(movntps_m128_r128),   false},\n\t{ 0x2c,     OP_2BYTE|OP_SSE,            SSEOP(cvttps2pi_r64_r128m64),   SSEOP(cvttps2pi_r64_r128m64),false},\n\t{ 0x2d,     OP_2BYTE|OP_SSE,            SSEOP(cvtps2pi_r64_r128m64),    SSEOP(cvtps2pi_r64_r128m64),false},\n\t{ 0x2e,     OP_2BYTE|OP_SSE,            SSEOP(ucomiss_r128_r128m32),    SSEOP(ucomiss_r128_r128m32),false},\n\t{ 0x2f,     OP_2BYTE|OP_SSE,            SSEOP(comiss_r128_r128m32),     SSEOP(comiss_r128_r128m32), false},\n\t{ 0x30,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(wrmsr),               PENTIUMOP(wrmsr),           false},\n\t{ 0x31,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(rdtsc),               PENTIUMOP(rdtsc),           false},\n\t{ 0x32,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(rdmsr),               PENTIUMOP(rdmsr),           false},\n\t{ 0x38,     OP_2BYTE|OP_PENTIUM,        I386OP(decode_three_byte38),    I386OP(decode_three_byte38),false},\n\t{ 0x3A,     OP_2BYTE|OP_PENTIUM,        I386OP(decode_three_byte3a),    I386OP(decode_three_byte3a),false},\n\t{ 0x3A,     OP_2BYTE|OP_CYRIX,          I386OP(cyrix_special),          I386OP(cyrix_special),      false},\n\t{ 0x3B,     OP_2BYTE|OP_CYRIX,          I386OP(cyrix_special),          I386OP(cyrix_special),      false},\n\t{ 0x3C,     OP_2BYTE|OP_CYRIX,          I386OP(cyrix_special),          I386OP(cyrix_special),      false},\n\t{ 0x3D,     OP_2BYTE|OP_CYRIX,          I386OP(cyrix_special),          I386OP(cyrix_special),      false},\n\t{ 0x40,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovo_r16_rm16),      PENTIUMOP(cmovo_r32_rm32),  false},\n\t{ 0x41,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovno_r16_rm16),     PENTIUMOP(cmovno_r32_rm32), false},\n\t{ 0x42,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovb_r16_rm16),      PENTIUMOP(cmovb_r32_rm32),  false},\n\t{ 0x43,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovae_r16_rm16),     PENTIUMOP(cmovae_r32_rm32), false},\n\t{ 0x44,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmove_r16_rm16),      PENTIUMOP(cmove_r32_rm32),  false},\n\t{ 0x45,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovne_r16_rm16),     PENTIUMOP(cmovne_r32_rm32), false},\n\t{ 0x46,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovbe_r16_rm16),     PENTIUMOP(cmovbe_r32_rm32), false},\n\t{ 0x47,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmova_r16_rm16),      PENTIUMOP(cmova_r32_rm32),  false},\n\t{ 0x48,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovs_r16_rm16),      PENTIUMOP(cmovs_r32_rm32),  false},\n\t{ 0x49,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovns_r16_rm16),     PENTIUMOP(cmovns_r32_rm32), false},\n\t{ 0x4a,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovp_r16_rm16),      PENTIUMOP(cmovp_r32_rm32),  false},\n\t{ 0x4b,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovnp_r16_rm16),     PENTIUMOP(cmovnp_r32_rm32), false},\n\t{ 0x4c,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovl_r16_rm16),      PENTIUMOP(cmovl_r32_rm32),  false},\n\t{ 0x4d,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovge_r16_rm16),     PENTIUMOP(cmovge_r32_rm32), false},\n\t{ 0x4e,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovle_r16_rm16),     PENTIUMOP(cmovle_r32_rm32), false},\n\t{ 0x4f,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovg_r16_rm16),      PENTIUMOP(cmovg_r32_rm32),  false},\n\t{ 0x50,     OP_2BYTE|OP_SSE,            SSEOP(movmskps_r16_r128),       SSEOP(movmskps_r32_r128),   false},\n\t{ 0x51,     OP_2BYTE|OP_SSE,            SSEOP(sqrtps_r128_rm128),       SSEOP(sqrtps_r128_rm128),   false},\n\t{ 0x52,     OP_2BYTE|OP_SSE,            SSEOP(rsqrtps_r128_rm128),      SSEOP(rsqrtps_r128_rm128),  false},\n\t{ 0x53,     OP_2BYTE|OP_SSE,            SSEOP(rcpps_r128_rm128),        SSEOP(rcpps_r128_rm128),    false},\n\t{ 0x54,     OP_2BYTE|OP_SSE,            SSEOP(andps_r128_rm128),        SSEOP(andps_r128_rm128),    false},\n\t{ 0x55,     OP_2BYTE|OP_SSE,            SSEOP(andnps_r128_rm128),       SSEOP(andnps_r128_rm128),   false},\n\t{ 0x56,     OP_2BYTE|OP_SSE,            SSEOP(orps_r128_rm128),         SSEOP(orps_r128_rm128),     false},\n\t{ 0x57,     OP_2BYTE|OP_SSE,            SSEOP(xorps),                   SSEOP(xorps),               false},\n\t{ 0x58,     OP_2BYTE|OP_SSE,            SSEOP(addps),                   SSEOP(addps),               false},\n\t{ 0x59,     OP_2BYTE|OP_SSE,            SSEOP(mulps),                   SSEOP(mulps),               false},\n\t{ 0x5a,     OP_2BYTE|OP_SSE,            SSEOP(cvtps2pd_r128_r128m64),   SSEOP(cvtps2pd_r128_r128m64),false},\n\t{ 0x5b,     OP_2BYTE|OP_SSE,            SSEOP(cvtdq2ps_r128_rm128),     SSEOP(cvtdq2ps_r128_rm128), false},\n\t{ 0x5c,     OP_2BYTE|OP_SSE,            SSEOP(subps),                   SSEOP(subps),               false},\n\t{ 0x5d,     OP_2BYTE|OP_SSE,            SSEOP(minps),                   SSEOP(minps),               false},\n\t{ 0x5e,     OP_2BYTE|OP_SSE,            SSEOP(divps),                   SSEOP(divps),               false},\n\t{ 0x5f,     OP_2BYTE|OP_SSE,            SSEOP(maxps),                   SSEOP(maxps),               false},\n\t{ 0x60,     OP_2BYTE|OP_MMX,            MMXOP(punpcklbw_r64_r64m32),    MMXOP(punpcklbw_r64_r64m32),false},\n\t{ 0x61,     OP_2BYTE|OP_MMX,            MMXOP(punpcklwd_r64_r64m32),    MMXOP(punpcklwd_r64_r64m32),false},\n\t{ 0x62,     OP_2BYTE|OP_MMX,            MMXOP(punpckldq_r64_r64m32),    MMXOP(punpckldq_r64_r64m32),false},\n\t{ 0x63,     OP_2BYTE|OP_MMX,            MMXOP(packsswb_r64_rm64),       MMXOP(packsswb_r64_rm64),   false},\n\t{ 0x64,     OP_2BYTE|OP_MMX,            MMXOP(pcmpgtb_r64_rm64),        MMXOP(pcmpgtb_r64_rm64),    false},\n\t{ 0x65,     OP_2BYTE|OP_MMX,            MMXOP(pcmpgtw_r64_rm64),        MMXOP(pcmpgtw_r64_rm64),    false},\n\t{ 0x66,     OP_2BYTE|OP_MMX,            MMXOP(pcmpgtd_r64_rm64),        MMXOP(pcmpgtd_r64_rm64),    false},\n\t{ 0x67,     OP_2BYTE|OP_MMX,            MMXOP(packuswb_r64_rm64),       MMXOP(packuswb_r64_rm64),   false},\n\t{ 0x68,     OP_2BYTE|OP_MMX,            MMXOP(punpckhbw_r64_rm64),      MMXOP(punpckhbw_r64_rm64),  false},\n\t{ 0x69,     OP_2BYTE|OP_MMX,            MMXOP(punpckhwd_r64_rm64),      MMXOP(punpckhwd_r64_rm64),  false},\n\t{ 0x6a,     OP_2BYTE|OP_MMX,            MMXOP(punpckhdq_r64_rm64),      MMXOP(punpckhdq_r64_rm64),  false},\n\t{ 0x6b,     OP_2BYTE|OP_MMX,            MMXOP(packssdw_r64_rm64),       MMXOP(packssdw_r64_rm64),   false},\n\t{ 0x6e,     OP_2BYTE|OP_MMX,            MMXOP(movd_r64_rm32),           MMXOP(movd_r64_rm32),       false},\n\t{ 0x6f,     OP_2BYTE|OP_MMX,            MMXOP(movq_r64_rm64),           MMXOP(movq_r64_rm64),       false},\n\t{ 0x70,     OP_2BYTE|OP_MMX,            MMXOP(pshufw_r64_rm64_i8),      MMXOP(pshufw_r64_rm64_i8),  false},\n\t{ 0x71,     OP_2BYTE|OP_MMX,            MMXOP(group_0f71),              MMXOP(group_0f71),          false},\n\t{ 0x72,     OP_2BYTE|OP_MMX,            MMXOP(group_0f72),              MMXOP(group_0f72),          false},\n\t{ 0x73,     OP_2BYTE|OP_MMX,            MMXOP(group_0f73),              MMXOP(group_0f73),          false},\n\t{ 0x74,     OP_2BYTE|OP_CYRIX,          I386OP(cyrix_unknown),          I386OP(cyrix_unknown),      false},\n\t{ 0x74,     OP_2BYTE|OP_MMX,            MMXOP(pcmpeqb_r64_rm64),        MMXOP(pcmpeqb_r64_rm64),    false},\n\t{ 0x75,     OP_2BYTE|OP_MMX,            MMXOP(pcmpeqw_r64_rm64),        MMXOP(pcmpeqw_r64_rm64),    false},\n\t{ 0x76,     OP_2BYTE|OP_MMX,            MMXOP(pcmpeqd_r64_rm64),        MMXOP(pcmpeqd_r64_rm64),    false},\n\t{ 0x77,     OP_2BYTE|OP_MMX,            MMXOP(emms),                    MMXOP(emms),                false},\n\t{ 0x78,     OP_2BYTE|OP_CYRIX,          I386OP(cyrix_svdc),             I386OP(cyrix_svdc),         false},\n\t{ 0x79,     OP_2BYTE|OP_CYRIX,          I386OP(cyrix_rsdc),             I386OP(cyrix_rsdc),         false},\n\t{ 0x7a,     OP_2BYTE|OP_CYRIX,          I386OP(cyrix_svldt),            I386OP(cyrix_svldt),        false},\n\t{ 0x7b,     OP_2BYTE|OP_CYRIX,          I386OP(cyrix_rsldt),            I386OP(cyrix_rsldt),        false},\n\t{ 0x7c,     OP_2BYTE|OP_CYRIX,          I386OP(cyrix_svts),             I386OP(cyrix_svts),         false},\n\t{ 0x7d,     OP_2BYTE|OP_CYRIX,          I386OP(cyrix_rsts),             I386OP(cyrix_rsts),         false},\n\t{ 0x7e,     OP_2BYTE|OP_MMX,            MMXOP(movd_rm32_r64),           MMXOP(movd_rm32_r64),       false},\n\t{ 0x7f,     OP_2BYTE|OP_MMX,            MMXOP(movq_rm64_r64),           MMXOP(movq_rm64_r64),       false},\n\t{ 0x80,     OP_2BYTE|OP_I386,           I386OP(jo_rel16),               I386OP(jo_rel32),           false},\n\t{ 0x81,     OP_2BYTE|OP_I386,           I386OP(jno_rel16),              I386OP(jno_rel32),          false},\n\t{ 0x82,     OP_2BYTE|OP_I386,           I386OP(jc_rel16),               I386OP(jc_rel32),           false},\n\t{ 0x83,     OP_2BYTE|OP_I386,           I386OP(jnc_rel16),              I386OP(jnc_rel32),          false},\n\t{ 0x84,     OP_2BYTE|OP_I386,           I386OP(jz_rel16),               I386OP(jz_rel32),           false},\n\t{ 0x85,     OP_2BYTE|OP_I386,           I386OP(jnz_rel16),              I386OP(jnz_rel32),          false},\n\t{ 0x86,     OP_2BYTE|OP_I386,           I386OP(jbe_rel16),              I386OP(jbe_rel32),          false},\n\t{ 0x87,     OP_2BYTE|OP_I386,           I386OP(ja_rel16),               I386OP(ja_rel32),           false},\n\t{ 0x88,     OP_2BYTE|OP_I386,           I386OP(js_rel16),               I386OP(js_rel32),           false},\n\t{ 0x89,     OP_2BYTE|OP_I386,           I386OP(jns_rel16),              I386OP(jns_rel32),          false},\n\t{ 0x8A,     OP_2BYTE|OP_I386,           I386OP(jp_rel16),               I386OP(jp_rel32),           false},\n\t{ 0x8B,     OP_2BYTE|OP_I386,           I386OP(jnp_rel16),              I386OP(jnp_rel32),          false},\n\t{ 0x8C,     OP_2BYTE|OP_I386,           I386OP(jl_rel16),               I386OP(jl_rel32),           false},\n\t{ 0x8D,     OP_2BYTE|OP_I386,           I386OP(jge_rel16),              I386OP(jge_rel32),          false},\n\t{ 0x8E,     OP_2BYTE|OP_I386,           I386OP(jle_rel16),              I386OP(jle_rel32),          false},\n\t{ 0x8F,     OP_2BYTE|OP_I386,           I386OP(jg_rel16),               I386OP(jg_rel32),           false},\n\t{ 0x90,     OP_2BYTE|OP_I386,           I386OP(seto_rm8),               I386OP(seto_rm8),           false},\n\t{ 0x91,     OP_2BYTE|OP_I386,           I386OP(setno_rm8),              I386OP(setno_rm8),          false},\n\t{ 0x92,     OP_2BYTE|OP_I386,           I386OP(setc_rm8),               I386OP(setc_rm8),           false},\n\t{ 0x93,     OP_2BYTE|OP_I386,           I386OP(setnc_rm8),              I386OP(setnc_rm8),          false},\n\t{ 0x94,     OP_2BYTE|OP_I386,           I386OP(setz_rm8),               I386OP(setz_rm8),           false},\n\t{ 0x95,     OP_2BYTE|OP_I386,           I386OP(setnz_rm8),              I386OP(setnz_rm8),          false},\n\t{ 0x96,     OP_2BYTE|OP_I386,           I386OP(setbe_rm8),              I386OP(setbe_rm8),          false},\n\t{ 0x97,     OP_2BYTE|OP_I386,           I386OP(seta_rm8),               I386OP(seta_rm8),           false},\n\t{ 0x98,     OP_2BYTE|OP_I386,           I386OP(sets_rm8),               I386OP(sets_rm8),           false},\n\t{ 0x99,     OP_2BYTE|OP_I386,           I386OP(setns_rm8),              I386OP(setns_rm8),          false},\n\t{ 0x9A,     OP_2BYTE|OP_I386,           I386OP(setp_rm8),               I386OP(setp_rm8),           false},\n\t{ 0x9B,     OP_2BYTE|OP_I386,           I386OP(setnp_rm8),              I386OP(setnp_rm8),          false},\n\t{ 0x9C,     OP_2BYTE|OP_I386,           I386OP(setl_rm8),               I386OP(setl_rm8),           false},\n\t{ 0x9D,     OP_2BYTE|OP_I386,           I386OP(setge_rm8),              I386OP(setge_rm8),          false},\n\t{ 0x9E,     OP_2BYTE|OP_I386,           I386OP(setle_rm8),              I386OP(setle_rm8),          false},\n\t{ 0x9F,     OP_2BYTE|OP_I386,           I386OP(setg_rm8),               I386OP(setg_rm8),           false},\n\t{ 0xA0,     OP_2BYTE|OP_I386,           I386OP(push_fs16),              I386OP(push_fs32),          false},\n\t{ 0xA1,     OP_2BYTE|OP_I386,           I386OP(pop_fs16),               I386OP(pop_fs32),           false},\n\t{ 0xA2,     OP_2BYTE|OP_I486,           I486OP(cpuid),                  I486OP(cpuid),              false},\n\t{ 0xA3,     OP_2BYTE|OP_I386,           I386OP(bt_rm16_r16),            I386OP(bt_rm32_r32),        false},\n\t{ 0xA4,     OP_2BYTE|OP_I386,           I386OP(shld16_i8),              I386OP(shld32_i8),          false},\n\t{ 0xA5,     OP_2BYTE|OP_I386,           I386OP(shld16_cl),              I386OP(shld32_cl),          false},\n\t{ 0xA8,     OP_2BYTE|OP_I386,           I386OP(push_gs16),              I386OP(push_gs32),          false},\n\t{ 0xA9,     OP_2BYTE|OP_I386,           I386OP(pop_gs16),               I386OP(pop_gs32),           false},\n\t{ 0xAA,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(rsm),                 PENTIUMOP(rsm),             false},\n\t{ 0xAB,     OP_2BYTE|OP_I386,           I386OP(bts_rm16_r16),           I386OP(bts_rm32_r32),       true },\n\t{ 0xAC,     OP_2BYTE|OP_I386,           I386OP(shrd16_i8),              I386OP(shrd32_i8),          false},\n\t{ 0xAD,     OP_2BYTE|OP_I386,           I386OP(shrd16_cl),              I386OP(shrd32_cl),          false},\n\t{ 0xAE,     OP_2BYTE|OP_SSE,            SSEOP(group_0fae),              SSEOP(group_0fae),          false},\n\t{ 0xAF,     OP_2BYTE|OP_I386,           I386OP(imul_r16_rm16),          I386OP(imul_r32_rm32),      false},\n\t{ 0xB0,     OP_2BYTE|OP_I486,           I486OP(cmpxchg_rm8_r8),         I486OP(cmpxchg_rm8_r8),     true },\n\t{ 0xB1,     OP_2BYTE|OP_I486,           I486OP(cmpxchg_rm16_r16),       I486OP(cmpxchg_rm32_r32),   true },\n\t{ 0xB2,     OP_2BYTE|OP_I386,           I386OP(lss16),                  I386OP(lss32),              false},\n\t{ 0xB3,     OP_2BYTE|OP_I386,           I386OP(btr_rm16_r16),           I386OP(btr_rm32_r32),       true },\n\t{ 0xB4,     OP_2BYTE|OP_I386,           I386OP(lfs16),                  I386OP(lfs32),              false},\n\t{ 0xB5,     OP_2BYTE|OP_I386,           I386OP(lgs16),                  I386OP(lgs32),              false},\n\t{ 0xB6,     OP_2BYTE|OP_I386,           I386OP(movzx_r16_rm8),          I386OP(movzx_r32_rm8),      false},\n\t{ 0xB7,     OP_2BYTE|OP_I386,           I386OP(mov_r16_rm16),           I386OP(movzx_r32_rm16),     false},\n\t{ 0xBA,     OP_2BYTE|OP_I386,           I386OP(group0FBA_16),           I386OP(group0FBA_32),       true },\n\t{ 0xBB,     OP_2BYTE|OP_I386,           I386OP(btc_rm16_r16),           I386OP(btc_rm32_r32),       true },\n\t{ 0xBC,     OP_2BYTE|OP_I386,           I386OP(bsf_r16_rm16),           I386OP(bsf_r32_rm32),       false},\n\t{ 0xBD,     OP_2BYTE|OP_I386,           I386OP(bsr_r16_rm16),           I386OP(bsr_r32_rm32),       false},\n\t{ 0xBE,     OP_2BYTE|OP_I386,           I386OP(movsx_r16_rm8),          I386OP(movsx_r32_rm8),      false},\n\t{ 0xBF,     OP_2BYTE|OP_I386,           I386OP(mov_r16_rm16),           I386OP(movsx_r32_rm16),     false},\n\t{ 0xC0,     OP_2BYTE|OP_I486,           I486OP(xadd_rm8_r8),            I486OP(xadd_rm8_r8),        true },\n\t{ 0xC1,     OP_2BYTE|OP_I486,           I486OP(xadd_rm16_r16),          I486OP(xadd_rm32_r32),      true },\n\t{ 0xC2,     OP_2BYTE|OP_SSE,            SSEOP(cmpps_r128_rm128_i8),     SSEOP(cmpps_r128_rm128_i8), false},\n\t{ 0xC3,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(movnti_m16_r16),      PENTIUMOP(movnti_m32_r32),  false},\n\t{ 0xC4,     OP_2BYTE|OP_SSE,            SSEOP(pinsrw_r64_r16m16_i8),    SSEOP(pinsrw_r64_r32m16_i8),false},\n\t{ 0xC5,     OP_2BYTE|OP_SSE,            SSEOP(pextrw_r16_r64_i8),       SSEOP(pextrw_r32_r64_i8),   false},\n\t{ 0xC6,     OP_2BYTE|OP_SSE,            SSEOP(shufps),                  SSEOP(shufps),              false},\n\t{ 0xC7,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmpxchg8b_m64),       PENTIUMOP(cmpxchg8b_m64),   true },\n\t{ 0xC8,     OP_2BYTE|OP_I486,           I486OP(bswap_eax),              I486OP(bswap_eax),          false},\n\t{ 0xC9,     OP_2BYTE|OP_I486,           I486OP(bswap_ecx),              I486OP(bswap_ecx),          false},\n\t{ 0xCA,     OP_2BYTE|OP_I486,           I486OP(bswap_edx),              I486OP(bswap_edx),          false},\n\t{ 0xCB,     OP_2BYTE|OP_I486,           I486OP(bswap_ebx),              I486OP(bswap_ebx),          false},\n\t{ 0xCC,     OP_2BYTE|OP_I486,           I486OP(bswap_esp),              I486OP(bswap_esp),          false},\n\t{ 0xCD,     OP_2BYTE|OP_I486,           I486OP(bswap_ebp),              I486OP(bswap_ebp),          false},\n\t{ 0xCE,     OP_2BYTE|OP_I486,           I486OP(bswap_esi),              I486OP(bswap_esi),          false},\n\t{ 0xCF,     OP_2BYTE|OP_I486,           I486OP(bswap_edi),              I486OP(bswap_edi),          false},\n\t{ 0xD1,     OP_2BYTE|OP_MMX,            MMXOP(psrlw_r64_rm64),          MMXOP(psrlw_r64_rm64),      false},\n\t{ 0xD2,     OP_2BYTE|OP_MMX,            MMXOP(psrld_r64_rm64),          MMXOP(psrld_r64_rm64),      false},\n\t{ 0xD3,     OP_2BYTE|OP_MMX,            MMXOP(psrlq_r64_rm64),          MMXOP(psrlq_r64_rm64),      false},\n\t{ 0xD4,     OP_2BYTE|OP_MMX,            MMXOP(paddq_r64_rm64),          MMXOP(paddq_r64_rm64),      false},\n\t{ 0xD5,     OP_2BYTE|OP_MMX,            MMXOP(pmullw_r64_rm64),         MMXOP(pmullw_r64_rm64),     false},\n\t{ 0xD7,     OP_2BYTE|OP_SSE,            SSEOP(pmovmskb_r16_r64),        SSEOP(pmovmskb_r32_r64),    false},\n\t{ 0xD8,     OP_2BYTE|OP_MMX,            MMXOP(psubusb_r64_rm64),        MMXOP(psubusb_r64_rm64),    false},\n\t{ 0xD9,     OP_2BYTE|OP_MMX,            MMXOP(psubusw_r64_rm64),        MMXOP(psubusw_r64_rm64),    false},\n\t{ 0xDA,     OP_2BYTE|OP_SSE,            SSEOP(pminub_r64_rm64),         SSEOP(pminub_r64_rm64),     false},\n\t{ 0xDB,     OP_2BYTE|OP_MMX,            MMXOP(pand_r64_rm64),           MMXOP(pand_r64_rm64),       false},\n\t{ 0xDC,     OP_2BYTE|OP_MMX,            MMXOP(paddusb_r64_rm64),        MMXOP(paddusb_r64_rm64),    false},\n\t{ 0xDD,     OP_2BYTE|OP_MMX,            MMXOP(paddusw_r64_rm64),        MMXOP(paddusw_r64_rm64),    false},\n\t{ 0xDE,     OP_2BYTE|OP_SSE,            SSEOP(pmaxub_r64_rm64),         SSEOP(pmaxub_r64_rm64),     false},\n\t{ 0xDF,     OP_2BYTE|OP_MMX,            MMXOP(pandn_r64_rm64),          MMXOP(pandn_r64_rm64),      false},\n\t{ 0xE0,     OP_2BYTE|OP_SSE,            SSEOP(pavgb_r64_rm64),          SSEOP(pavgb_r64_rm64),      false},\n\t{ 0xE1,     OP_2BYTE|OP_MMX,            MMXOP(psraw_r64_rm64),          MMXOP(psraw_r64_rm64),      false},\n\t{ 0xE2,     OP_2BYTE|OP_MMX,            MMXOP(psrad_r64_rm64),          MMXOP(psrad_r64_rm64),      false},\n\t{ 0xE3,     OP_2BYTE|OP_SSE,            SSEOP(pavgw_r64_rm64),          SSEOP(pavgw_r64_rm64),      false},\n\t{ 0xE4,     OP_2BYTE|OP_SSE,            SSEOP(pmulhuw_r64_rm64),        SSEOP(pmulhuw_r64_rm64),    false},\n\t{ 0xE5,     OP_2BYTE|OP_MMX,            MMXOP(pmulhw_r64_rm64),         MMXOP(pmulhw_r64_rm64),     false},\n\t{ 0xE7,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(movntq_m64_r64),      PENTIUMOP(movntq_m64_r64),  false},\n\t{ 0xE8,     OP_2BYTE|OP_MMX,            MMXOP(psubsb_r64_rm64),         MMXOP(psubsb_r64_rm64),     false},\n\t{ 0xE9,     OP_2BYTE|OP_MMX,            MMXOP(psubsw_r64_rm64),         MMXOP(psubsw_r64_rm64),     false},\n\t{ 0xEA,     OP_2BYTE|OP_SSE,            SSEOP(pminsw_r64_rm64),         SSEOP(pminsw_r64_rm64),     false},\n\t{ 0xEB,     OP_2BYTE|OP_MMX,            MMXOP(por_r64_rm64),            MMXOP(por_r64_rm64),        false},\n\t{ 0xEC,     OP_2BYTE|OP_MMX,            MMXOP(paddsb_r64_rm64),         MMXOP(paddsb_r64_rm64),     false},\n\t{ 0xED,     OP_2BYTE|OP_MMX,            MMXOP(paddsw_r64_rm64),         MMXOP(paddsw_r64_rm64),     false},\n\t{ 0xEE,     OP_2BYTE|OP_SSE,            SSEOP(pmaxsw_r64_rm64),         SSEOP(pmaxsw_r64_rm64),     false},\n\t{ 0xEF,     OP_2BYTE|OP_MMX,            MMXOP(pxor_r64_rm64),           MMXOP(pxor_r64_rm64),       false},\n\t{ 0xF1,     OP_2BYTE|OP_MMX,            MMXOP(psllw_r64_rm64),          MMXOP(psllw_r64_rm64),      false},\n\t{ 0xF2,     OP_2BYTE|OP_MMX,            MMXOP(pslld_r64_rm64),          MMXOP(pslld_r64_rm64),      false},\n\t{ 0xF3,     OP_2BYTE|OP_MMX,            MMXOP(psllq_r64_rm64),          MMXOP(psllq_r64_rm64),      false},\n\t{ 0xF4,     OP_2BYTE|OP_SSE,            SSEOP(pmuludq_r64_rm64),        SSEOP(pmuludq_r64_rm64),    false},\n\t{ 0xF5,     OP_2BYTE|OP_MMX,            MMXOP(pmaddwd_r64_rm64),        MMXOP(pmaddwd_r64_rm64),    false},\n\t{ 0xF6,     OP_2BYTE|OP_SSE,            SSEOP(psadbw_r64_rm64),         SSEOP(psadbw_r64_rm64),     false},\n\t{ 0xf7,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(maskmovq_r64_r64),    PENTIUMOP(maskmovq_r64_r64),false},\n\t{ 0xF8,     OP_2BYTE|OP_MMX,            MMXOP(psubb_r64_rm64),          MMXOP(psubb_r64_rm64),      false},\n\t{ 0xF9,     OP_2BYTE|OP_MMX,            MMXOP(psubw_r64_rm64),          MMXOP(psubw_r64_rm64),      false},\n\t{ 0xFA,     OP_2BYTE|OP_MMX,            MMXOP(psubd_r64_rm64),          MMXOP(psubd_r64_rm64),      false},\n\t{ 0xFB,     OP_2BYTE|OP_SSE,            SSEOP(psubq_r64_rm64),          SSEOP(psubq_r64_rm64),      false},\n\t{ 0xFC,     OP_2BYTE|OP_MMX,            MMXOP(paddb_r64_rm64),          MMXOP(paddb_r64_rm64),      false},\n\t{ 0xFD,     OP_2BYTE|OP_MMX,            MMXOP(paddw_r64_rm64),          MMXOP(paddw_r64_rm64),      false},\n\t{ 0xFE,     OP_2BYTE|OP_MMX,            MMXOP(paddd_r64_rm64),          MMXOP(paddd_r64_rm64),      false},\n\t/* F3 0F ?? */\n\t{ 0x10,     OP_3BYTEF3|OP_SSE,          SSEOP(movss_r128_rm128),        SSEOP(movss_r128_rm128),    false},\n\t{ 0x11,     OP_3BYTEF3|OP_SSE,          SSEOP(movss_rm128_r128),        SSEOP(movss_rm128_r128),    false},\n\t{ 0x12,     OP_3BYTEF3|OP_SSE,          SSEOP(movsldup_r128_rm128),     SSEOP(movsldup_r128_rm128), false},\n\t{ 0x16,     OP_3BYTEF3|OP_SSE,          SSEOP(movshdup_r128_rm128),     SSEOP(movshdup_r128_rm128), false},\n\t{ 0x2A,     OP_3BYTEF3|OP_SSE,          SSEOP(cvtsi2ss_r128_rm32),      SSEOP(cvtsi2ss_r128_rm32),  false},\n\t{ 0x2C,     OP_3BYTEF3|OP_SSE,          SSEOP(cvttss2si_r32_r128m32),   SSEOP(cvttss2si_r32_r128m32),false},\n\t{ 0x2D,     OP_3BYTEF3|OP_SSE,          SSEOP(cvtss2si_r32_r128m32),    SSEOP(cvtss2si_r32_r128m32),false},\n\t{ 0x51,     OP_3BYTEF3|OP_SSE,          SSEOP(sqrtss_r128_r128m32),     SSEOP(sqrtss_r128_r128m32), false},\n\t{ 0x52,     OP_3BYTEF3|OP_SSE,          SSEOP(rsqrtss_r128_r128m32),    SSEOP(rsqrtss_r128_r128m32),false},\n\t{ 0x53,     OP_3BYTEF3|OP_SSE,          SSEOP(rcpss_r128_r128m32),      SSEOP(rcpss_r128_r128m32),  false},\n\t{ 0x58,     OP_3BYTEF3|OP_SSE,          SSEOP(addss),                   SSEOP(addss),               false},\n\t{ 0x59,     OP_3BYTEF3|OP_SSE,          SSEOP(mulss),                   SSEOP(mulss),               false},\n\t{ 0x5A,     OP_3BYTEF3|OP_SSE,          SSEOP(cvtss2sd_r128_r128m32),   SSEOP(cvtss2sd_r128_r128m32),false},\n\t{ 0x5B,     OP_3BYTEF3|OP_SSE,          SSEOP(cvttps2dq_r128_rm128),    SSEOP(cvttps2dq_r128_rm128),false},\n\t{ 0x5C,     OP_3BYTEF3|OP_SSE,          SSEOP(subss),                   SSEOP(subss),               false},\n\t{ 0x5D,     OP_3BYTEF3|OP_SSE,          SSEOP(minss_r128_r128m32),      SSEOP(minss_r128_r128m32),  false},\n\t{ 0x5E,     OP_3BYTEF3|OP_SSE,          SSEOP(divss),                   SSEOP(divss),               false},\n\t{ 0x5F,     OP_3BYTEF3|OP_SSE,          SSEOP(maxss_r128_r128m32),      SSEOP(maxss_r128_r128m32),  false},\n\t{ 0x6F,     OP_3BYTEF3|OP_SSE,          SSEOP(movdqu_r128_rm128),       SSEOP(movdqu_r128_rm128),   false},\n\t{ 0x70,     OP_3BYTEF3|OP_SSE,          SSEOP(pshufhw_r128_rm128_i8),   SSEOP(pshufhw_r128_rm128_i8),false},\n\t{ 0x7E,     OP_3BYTEF3|OP_SSE,          SSEOP(movq_r128_r128m64),       SSEOP(movq_r128_r128m64),   false},\n\t{ 0x7F,     OP_3BYTEF3|OP_SSE,          SSEOP(movdqu_rm128_r128),       SSEOP(movdqu_rm128_r128),   false},\n\t{ 0xAE,     OP_3BYTE66|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xB8,     OP_3BYTEF3|OP_PENTIUM,      PENTIUMOP(popcnt_r16_rm16),     PENTIUMOP(popcnt_r32_rm32), false},\n\t{ 0xBC,     OP_3BYTEF3|OP_PENTIUM,      PENTIUMOP(tzcnt_r16_rm16),      PENTIUMOP(tzcnt_r32_rm32),  false},\n\t{ 0xC2,     OP_3BYTEF3|OP_SSE,          SSEOP(cmpss_r128_r128m32_i8),   SSEOP(cmpss_r128_r128m32_i8),false},\n\t{ 0xC7,     OP_3BYTEF2|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xD6,     OP_3BYTEF3|OP_SSE,          SSEOP(movq2dq_r128_r64),        SSEOP(movq2dq_r128_r64),    false},\n\t{ 0xE6,     OP_3BYTEF3|OP_SSE,          SSEOP(cvtdq2pd_r128_r128m64),   SSEOP(cvtdq2pd_r128_r128m64),false},\n\t/* F2 0F ?? */\n\t{ 0x10,     OP_3BYTEF2|OP_SSE,          SSEOP(movsd_r128_r128m64),      SSEOP(movsd_r128_r128m64),  false},\n\t{ 0x11,     OP_3BYTEF2|OP_SSE,          SSEOP(movsd_r128m64_r128),      SSEOP(movsd_r128m64_r128),  false},\n\t{ 0x12,     OP_3BYTEF2|OP_SSE,          SSEOP(movddup_r128_r128m64),    SSEOP(movddup_r128_r128m64),false},\n\t{ 0x2A,     OP_3BYTEF2|OP_SSE,          SSEOP(cvtsi2sd_r128_rm32),      SSEOP(cvtsi2sd_r128_rm32),  false},\n\t{ 0x2C,     OP_3BYTEF2|OP_SSE,          SSEOP(cvttsd2si_r32_r128m64),   SSEOP(cvttsd2si_r32_r128m64),false},\n\t{ 0x2D,     OP_3BYTEF2|OP_SSE,          SSEOP(cvtsd2si_r32_r128m64),    SSEOP(cvtsd2si_r32_r128m64),false},\n\t{ 0x51,     OP_3BYTEF2|OP_SSE,          SSEOP(sqrtsd_r128_r128m64),     SSEOP(sqrtsd_r128_r128m64), false},\n\t{ 0x58,     OP_3BYTEF2|OP_SSE,          SSEOP(addsd_r128_r128m64),      SSEOP(addsd_r128_r128m64),  false},\n\t{ 0x59,     OP_3BYTEF2|OP_SSE,          SSEOP(mulsd_r128_r128m64),      SSEOP(mulsd_r128_r128m64),  false},\n\t{ 0x5A,     OP_3BYTEF2|OP_SSE,          SSEOP(cvtsd2ss_r128_r128m64),   SSEOP(cvtsd2ss_r128_r128m64),false},\n\t{ 0x5C,     OP_3BYTEF2|OP_SSE,          SSEOP(subsd_r128_r128m64),      SSEOP(subsd_r128_r128m64),  false},\n\t{ 0x5D,     OP_3BYTEF2|OP_SSE,          SSEOP(minsd_r128_r128m64),      SSEOP(minsd_r128_r128m64),  false},\n\t{ 0x5E,     OP_3BYTEF2|OP_SSE,          SSEOP(divsd_r128_r128m64),      SSEOP(divsd_r128_r128m64),  false},\n\t{ 0x5F,     OP_3BYTEF2|OP_SSE,          SSEOP(maxsd_r128_r128m64),      SSEOP(maxsd_r128_r128m64),  false},\n\t{ 0x70,     OP_3BYTEF2|OP_SSE,          SSEOP(pshuflw_r128_rm128_i8),   SSEOP(pshuflw_r128_rm128_i8),false},\n\t{ 0x7C,     OP_3BYTEF2|OP_SSE,          SSEOP(haddps_r128_rm128),       SSEOP(haddps_r128_rm128),   false},\n\t{ 0x7D,     OP_3BYTEF2|OP_SSE,          SSEOP(hsubps_r128_rm128),       SSEOP(hsubps_r128_rm128),   false},\n\t{ 0xC2,     OP_3BYTEF2|OP_SSE,          SSEOP(cmpsd_r128_r128m64_i8),   SSEOP(cmpsd_r128_r128m64_i8),false},\n\t{ 0xD0,     OP_3BYTEF2|OP_SSE,          SSEOP(addsubps_r128_rm128),     SSEOP(addsubps_r128_rm128), false},\n\t{ 0xD6,     OP_3BYTEF2|OP_SSE,          SSEOP(movdq2q_r64_r128),        SSEOP(movdq2q_r64_r128),    false},\n\t{ 0xE6,     OP_3BYTEF2|OP_SSE,          SSEOP(cvtpd2dq_r128_rm128),     SSEOP(cvtpd2dq_r128_rm128), false},\n\t{ 0xF0,     OP_3BYTEF2|OP_SSE,          SSEOP(lddqu_r128_m128),         SSEOP(lddqu_r128_m128),     false},\n\t/* 66 0F ?? */\n\t{ 0x10,     OP_3BYTE66|OP_SSE,          SSEOP(movupd_r128_rm128),       SSEOP(movupd_r128_rm128),   false},\n\t{ 0x11,     OP_3BYTE66|OP_SSE,          SSEOP(movupd_rm128_r128),       SSEOP(movupd_rm128_r128),   false},\n\t{ 0x12,     OP_3BYTE66|OP_SSE,          SSEOP(movlpd_r128_m64),         SSEOP(movlpd_r128_m64),     false},\n\t{ 0x13,     OP_3BYTE66|OP_SSE,          SSEOP(movlpd_m64_r128),         SSEOP(movlpd_m64_r128),     false},\n\t{ 0x14,     OP_3BYTE66|OP_SSE,          SSEOP(unpcklpd_r128_rm128),     SSEOP(unpcklpd_r128_rm128), false},\n\t{ 0x15,     OP_3BYTE66|OP_SSE,          SSEOP(unpckhpd_r128_rm128),     SSEOP(unpckhpd_r128_rm128), false},\n\t{ 0x16,     OP_3BYTE66|OP_SSE,          SSEOP(movhpd_r128_m64),         SSEOP(movhpd_r128_m64),     false},\n\t{ 0x17,     OP_3BYTE66|OP_SSE,          SSEOP(movhpd_m64_r128),         SSEOP(movhpd_m64_r128),     false},\n\t{ 0x28,     OP_3BYTE66|OP_SSE,          SSEOP(movapd_r128_rm128),       SSEOP(movapd_r128_rm128),   false},\n\t{ 0x29,     OP_3BYTE66|OP_SSE,          SSEOP(movapd_rm128_r128),       SSEOP(movapd_rm128_r128),   false},\n\t{ 0x2A,     OP_3BYTE66|OP_SSE,          SSEOP(cvtpi2pd_r128_rm64),      SSEOP(cvtpi2pd_r128_rm64),  false},\n\t{ 0x2B,     OP_3BYTE66|OP_SSE,          SSEOP(movntpd_m128_r128),       SSEOP(movntpd_m128_r128),   false},\n\t{ 0x2C,     OP_3BYTE66|OP_SSE,          SSEOP(cvttpd2pi_r64_rm128),     SSEOP(cvttpd2pi_r64_rm128), false},\n\t{ 0x2D,     OP_3BYTE66|OP_SSE,          SSEOP(cvtpd2pi_r64_rm128),      SSEOP(cvtpd2pi_r64_rm128),  false},\n\t{ 0x2E,     OP_3BYTE66|OP_SSE,          SSEOP(ucomisd_r128_r128m64),    SSEOP(ucomisd_r128_r128m64),false},\n\t{ 0x2F,     OP_3BYTE66|OP_SSE,          SSEOP(comisd_r128_r128m64),     SSEOP(comisd_r128_r128m64), false},\n\t{ 0x50,     OP_3BYTE66|OP_SSE,          SSEOP(movmskpd_r32_r128),       SSEOP(movmskpd_r32_r128),   false},\n\t{ 0x51,     OP_3BYTE66|OP_SSE,          SSEOP(sqrtpd_r128_rm128),       SSEOP(sqrtpd_r128_rm128),   false},\n\t{ 0x54,     OP_3BYTE66|OP_SSE,          SSEOP(andpd_r128_rm128),        SSEOP(andpd_r128_rm128),    false},\n\t{ 0x55,     OP_3BYTE66|OP_SSE,          SSEOP(andnpd_r128_rm128),       SSEOP(andnpd_r128_rm128),   false},\n\t{ 0x56,     OP_3BYTE66|OP_SSE,          SSEOP(orpd_r128_rm128),         SSEOP(orpd_r128_rm128),     false},\n\t{ 0x57,     OP_3BYTE66|OP_SSE,          SSEOP(xorpd_r128_rm128),        SSEOP(xorpd_r128_rm128),    false},\n\t{ 0x58,     OP_3BYTE66|OP_SSE,          SSEOP(addpd_r128_rm128),        SSEOP(addpd_r128_rm128),    false},\n\t{ 0x59,     OP_3BYTE66|OP_SSE,          SSEOP(mulpd_r128_rm128),        SSEOP(mulpd_r128_rm128),    false},\n\t{ 0x5A,     OP_3BYTE66|OP_SSE,          SSEOP(cvtpd2ps_r128_rm128),     SSEOP(cvtpd2ps_r128_rm128), false},\n\t{ 0x5B,     OP_3BYTE66|OP_SSE,          SSEOP(cvtps2dq_r128_rm128),     SSEOP(cvtps2dq_r128_rm128), false},\n\t{ 0x5C,     OP_3BYTE66|OP_SSE,          SSEOP(subpd_r128_rm128),        SSEOP(subpd_r128_rm128),    false},\n\t{ 0x5D,     OP_3BYTE66|OP_SSE,          SSEOP(minpd_r128_rm128),        SSEOP(minpd_r128_rm128),    false},\n\t{ 0x5E,     OP_3BYTE66|OP_SSE,          SSEOP(divpd_r128_rm128),        SSEOP(divpd_r128_rm128),    false},\n\t{ 0x5F,     OP_3BYTE66|OP_SSE,          SSEOP(maxpd_r128_rm128),        SSEOP(maxpd_r128_rm128),    false},\n\t{ 0x60,     OP_3BYTE66|OP_SSE,          SSEOP(punpcklbw_r128_rm128),    SSEOP(punpcklbw_r128_rm128),false},\n\t{ 0x61,     OP_3BYTE66|OP_SSE,          SSEOP(punpcklwd_r128_rm128),    SSEOP(punpcklwd_r128_rm128),false},\n\t{ 0x62,     OP_3BYTE66|OP_SSE,          SSEOP(punpckldq_r128_rm128),    SSEOP(punpckldq_r128_rm128),false},\n\t{ 0x63,     OP_3BYTE66|OP_SSE,          SSEOP(packsswb_r128_rm128),     SSEOP(packsswb_r128_rm128), false},\n\t{ 0x64,     OP_3BYTE66|OP_SSE,          SSEOP(pcmpgtb_r128_rm128),      SSEOP(pcmpgtb_r128_rm128),  false},\n\t{ 0x65,     OP_3BYTE66|OP_SSE,          SSEOP(pcmpgtw_r128_rm128),      SSEOP(pcmpgtw_r128_rm128),  false},\n\t{ 0x66,     OP_3BYTE66|OP_SSE,          SSEOP(pcmpgtd_r128_rm128),      SSEOP(pcmpgtd_r128_rm128),  false},\n\t{ 0x67,     OP_3BYTE66|OP_SSE,          SSEOP(packuswb_r128_rm128),     SSEOP(packuswb_r128_rm128), false},\n\t{ 0x68,     OP_3BYTE66|OP_SSE,          SSEOP(punpckhbw_r128_rm128),    SSEOP(punpckhbw_r128_rm128),false},\n\t{ 0x69,     OP_3BYTE66|OP_SSE,          SSEOP(punpckhwd_r128_rm128),    SSEOP(punpckhwd_r128_rm128),false},\n\t{ 0x6A,     OP_3BYTE66|OP_SSE,          SSEOP(unpckhdq_r128_rm128),     SSEOP(unpckhdq_r128_rm128), false},\n\t{ 0x6B,     OP_3BYTE66|OP_SSE,          SSEOP(packssdw_r128_rm128),     SSEOP(packssdw_r128_rm128), false},\n\t{ 0x6C,     OP_3BYTE66|OP_SSE,          SSEOP(punpcklqdq_r128_rm128),   SSEOP(punpcklqdq_r128_rm128),false},\n\t{ 0x6D,     OP_3BYTE66|OP_SSE,          SSEOP(punpckhqdq_r128_rm128),   SSEOP(punpckhqdq_r128_rm128),false},\n\t{ 0x6E,     OP_3BYTE66|OP_SSE,          SSEOP(movd_m128_rm32),          SSEOP(movd_m128_rm32),      false},\n\t{ 0x6F,     OP_3BYTE66|OP_SSE,          SSEOP(movdqa_m128_rm128),       SSEOP(movdqa_m128_rm128),   false},\n\t{ 0x70,     OP_3BYTE66|OP_SSE,          SSEOP(pshufd_r128_rm128_i8),    SSEOP(pshufd_r128_rm128_i8),false},\n\t{ 0x71,     OP_3BYTE66|OP_SSE,          SSEOP(group_660f71),            SSEOP(group_660f71),        false},\n\t{ 0x72,     OP_3BYTE66|OP_SSE,          SSEOP(group_660f72),            SSEOP(group_660f72),        false},\n\t{ 0x73,     OP_3BYTE66|OP_SSE,          SSEOP(group_660f73),            SSEOP(group_660f73),        false},\n\t{ 0x74,     OP_3BYTE66|OP_SSE,          SSEOP(pcmpeqb_r128_rm128),      SSEOP(pcmpeqb_r128_rm128),  false},\n\t{ 0x75,     OP_3BYTE66|OP_SSE,          SSEOP(pcmpeqw_r128_rm128),      SSEOP(pcmpeqw_r128_rm128),  false},\n\t{ 0x76,     OP_3BYTE66|OP_SSE,          SSEOP(pcmpeqd_r128_rm128),      SSEOP(pcmpeqd_r128_rm128),  false},\n\t{ 0x7C,     OP_3BYTE66|OP_SSE,          SSEOP(haddpd_r128_rm128),       SSEOP(haddpd_r128_rm128),   false},\n\t{ 0x7D,     OP_3BYTE66|OP_SSE,          SSEOP(hsubpd_r128_rm128),       SSEOP(hsubpd_r128_rm128),   false},\n\t{ 0x7E,     OP_3BYTE66|OP_SSE,          SSEOP(movd_rm32_r128),          SSEOP(movd_rm32_r128),      false},\n\t{ 0x7F,     OP_3BYTE66|OP_SSE,          SSEOP(movdqa_rm128_r128),       SSEOP(movdqa_rm128_r128),   false},\n\t{ 0xC2,     OP_3BYTE66|OP_SSE,          SSEOP(cmppd_r128_rm128_i8),     SSEOP(cmppd_r128_rm128_i8), false},\n\t{ 0xC4,     OP_3BYTE66|OP_SSE,          SSEOP(pinsrw_r128_r32m16_i8),   SSEOP(pinsrw_r128_r32m16_i8),false},\n\t{ 0xC5,     OP_3BYTE66|OP_SSE,          SSEOP(pextrw_reg_r128_i8),      SSEOP(pextrw_reg_r128_i8),  false},\n\t{ 0xC6,     OP_3BYTE66|OP_SSE,          SSEOP(shufpd_r128_rm128_i8),    SSEOP(shufpd_r128_rm128_i8),false},\n\t{ 0xC7,     OP_3BYTE66|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xD0,     OP_3BYTE66|OP_SSE,          SSEOP(addsubpd_r128_rm128),     SSEOP(addsubpd_r128_rm128), false},\n\t{ 0xD1,     OP_3BYTE66|OP_SSE,          SSEOP(psrlw_r128_rm128),        SSEOP(psrlw_r128_rm128),    false},\n\t{ 0xD2,     OP_3BYTE66|OP_SSE,          SSEOP(psrld_r128_rm128),        SSEOP(psrld_r128_rm128),    false},\n\t{ 0xD3,     OP_3BYTE66|OP_SSE,          SSEOP(psrlq_r128_rm128),        SSEOP(psrlq_r128_rm128),    false},\n\t{ 0xD4,     OP_3BYTE66|OP_SSE,          SSEOP(paddq_r128_rm128),        SSEOP(paddq_r128_rm128),    false},\n\t{ 0xD5,     OP_3BYTE66|OP_SSE,          SSEOP(pmullw_r128_rm128),       SSEOP(pmullw_r128_rm128),   false},\n\t{ 0xD6,     OP_3BYTE66|OP_SSE,          SSEOP(movq_r128m64_r128),       SSEOP(movq_r128m64_r128),   false},\n\t{ 0xD7,     OP_3BYTE66|OP_SSE,          SSEOP(pmovmskb_r32_r128),       SSEOP(pmovmskb_r32_r128),   false},\n\t{ 0xD8,     OP_3BYTE66|OP_SSE,          SSEOP(psubusb_r128_rm128),      SSEOP(psubusb_r128_rm128),  false},\n\t{ 0xD9,     OP_3BYTE66|OP_SSE,          SSEOP(psubusw_r128_rm128),      SSEOP(psubusw_r128_rm128),  false},\n\t{ 0xDA,     OP_3BYTE66|OP_SSE,          SSEOP(pminub_r128_rm128),       SSEOP(pminub_r128_rm128),   false},\n\t{ 0xDB,     OP_3BYTE66|OP_SSE,          SSEOP(pand_r128_rm128),         SSEOP(pand_r128_rm128),     false},\n\t{ 0xDC,     OP_3BYTE66|OP_SSE,          SSEOP(paddusb_r128_rm128),      SSEOP(paddusb_r128_rm128),  false},\n\t{ 0xDD,     OP_3BYTE66|OP_SSE,          SSEOP(paddusw_r128_rm128),      SSEOP(paddusw_r128_rm128),  false},\n\t{ 0xDE,     OP_3BYTE66|OP_SSE,          SSEOP(pmaxub_r128_rm128),       SSEOP(pmaxub_r128_rm128),   false},\n\t{ 0xDF,     OP_3BYTE66|OP_SSE,          SSEOP(pandn_r128_rm128),        SSEOP(pandn_r128_rm128),    false},\n\t{ 0xE0,     OP_3BYTE66|OP_SSE,          SSEOP(pavgb_r128_rm128),        SSEOP(pavgb_r128_rm128),    false},\n\t{ 0xE1,     OP_3BYTE66|OP_SSE,          SSEOP(psraw_r128_rm128),        SSEOP(psraw_r128_rm128),    false},\n\t{ 0xE2,     OP_3BYTE66|OP_SSE,          SSEOP(psrad_r128_rm128),        SSEOP(psrad_r128_rm128),    false},\n\t{ 0xE3,     OP_3BYTE66|OP_SSE,          SSEOP(pavgw_r128_rm128),        SSEOP(pavgw_r128_rm128),    false},\n\t{ 0xE4,     OP_3BYTE66|OP_SSE,          SSEOP(pmulhuw_r128_rm128),      SSEOP(pmulhuw_r128_rm128),  false},\n\t{ 0xE5,     OP_3BYTE66|OP_SSE,          SSEOP(pmulhw_r128_rm128),       SSEOP(pmulhw_r128_rm128),   false},\n\t{ 0xE6,     OP_3BYTE66|OP_SSE,          SSEOP(cvttpd2dq_r128_rm128),    SSEOP(cvttpd2dq_r128_rm128),false},\n\t{ 0xE7,     OP_3BYTE66|OP_SSE,          SSEOP(movntdq_m128_r128),       SSEOP(movntdq_m128_r128),   false},\n\t{ 0xE8,     OP_3BYTE66|OP_SSE,          SSEOP(psubsb_r128_rm128),       SSEOP(psubsb_r128_rm128),   false},\n\t{ 0xE9,     OP_3BYTE66|OP_SSE,          SSEOP(psubsw_r128_rm128),       SSEOP(psubsw_r128_rm128),   false},\n\t{ 0xEA,     OP_3BYTE66|OP_SSE,          SSEOP(pminsw_r128_rm128),       SSEOP(pminsw_r128_rm128),   false},\n\t{ 0xEB,     OP_3BYTE66|OP_SSE,          SSEOP(por_r128_rm128),          SSEOP(por_r128_rm128),      false},\n\t{ 0xEC,     OP_3BYTE66|OP_SSE,          SSEOP(paddsb_r128_rm128),       SSEOP(paddsb_r128_rm128),   false},\n\t{ 0xED,     OP_3BYTE66|OP_SSE,          SSEOP(paddsw_r128_rm128),       SSEOP(paddsw_r128_rm128),   false},\n\t{ 0xEE,     OP_3BYTE66|OP_SSE,          SSEOP(pmaxsw_r128_rm128),       SSEOP(pmaxsw_r128_rm128),   false},\n\t{ 0xEF,     OP_3BYTE66|OP_SSE,          SSEOP(pxor_r128_rm128),         SSEOP(pxor_r128_rm128),     false},\n\t{ 0xF1,     OP_3BYTE66|OP_SSE,          SSEOP(psllw_r128_rm128),        SSEOP(psllw_r128_rm128),    false},\n\t{ 0xF2,     OP_3BYTE66|OP_SSE,          SSEOP(pslld_r128_rm128),        SSEOP(pslld_r128_rm128),    false},\n\t{ 0xF3,     OP_3BYTE66|OP_SSE,          SSEOP(psllq_r128_rm128),        SSEOP(psllq_r128_rm128),    false},\n\t{ 0xF4,     OP_3BYTE66|OP_SSE,          SSEOP(pmuludq_r128_rm128),      SSEOP(pmuludq_r128_rm128),  false},\n\t{ 0xF5,     OP_3BYTE66|OP_SSE,          SSEOP(pmaddwd_r128_rm128),      SSEOP(pmaddwd_r128_rm128),  false},\n\t{ 0xF6,     OP_3BYTE66|OP_SSE,          SSEOP(psadbw_r128_rm128),       SSEOP(psadbw_r128_rm128),   false},\n\t{ 0xF7,     OP_3BYTE66|OP_SSE,          SSEOP(maskmovdqu_r128_r128),    SSEOP(maskmovdqu_r128_r128),false},\n\t{ 0xF8,     OP_3BYTE66|OP_SSE,          SSEOP(psubb_r128_rm128),        SSEOP(psubb_r128_rm128),    false},\n\t{ 0xF9,     OP_3BYTE66|OP_SSE,          SSEOP(psubw_r128_rm128),        SSEOP(psubw_r128_rm128),    false},\n\t{ 0xFA,     OP_3BYTE66|OP_SSE,          SSEOP(psubd_r128_rm128),        SSEOP(psubd_r128_rm128),    false},\n\t{ 0xFB,     OP_3BYTE66|OP_SSE,          SSEOP(psubq_r128_rm128),        SSEOP(psubq_r128_rm128),    false},\n\t{ 0xFC,     OP_3BYTE66|OP_SSE,          SSEOP(paddb_r128_rm128),        SSEOP(paddb_r128_rm128),    false},\n\t{ 0xFD,     OP_3BYTE66|OP_SSE,          SSEOP(paddw_r128_rm128),        SSEOP(paddw_r128_rm128),    false},\n\t{ 0xFE,     OP_3BYTE66|OP_SSE,          SSEOP(paddd_r128_rm128),        SSEOP(paddd_r128_rm128),    false},\n\t/* 0F 38 ?? */\n\t{ 0x00,     OP_3BYTE38|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x01,     OP_3BYTE38|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x02,     OP_3BYTE38|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x03,     OP_3BYTE38|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x04,     OP_3BYTE38|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x05,     OP_3BYTE38|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x06,     OP_3BYTE38|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x07,     OP_3BYTE38|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x08,     OP_3BYTE38|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x09,     OP_3BYTE38|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x0A,     OP_3BYTE38|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x0B,     OP_3BYTE38|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x1C,     OP_3BYTE38|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x1D,     OP_3BYTE38|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x1E,     OP_3BYTE38|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xF0,     OP_3BYTE38|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xF1,     OP_3BYTE38|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xF2,     OP_3BYTE38|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xF3,     OP_3BYTE38|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xF5,     OP_3BYTE38|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xF7,     OP_3BYTE38|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t/* 0F 3A ?? */\n\t{ 0x0F,     OP_3BYTE3A|OP_SSE,          I386OP(invalid),                I386OP(invalid),            false},\n\t/* 66 0F 38 ?? */\n\t{ 0x00,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x01,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x02,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x03,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x04,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x05,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x06,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x07,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x08,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x09,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x0A,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x0B,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x0C,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x0D,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x0E,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x0F,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x10,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x13,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x14,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x15,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x16,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x17,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x18,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x19,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x1A,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x1C,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x1D,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x1E,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x20,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x21,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x22,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x23,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x24,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x25,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x28,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x29,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x2A,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x2B,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x2C,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x2D,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x2E,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x2F,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x30,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x31,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x32,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x33,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x34,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x35,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x36,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x37,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x38,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x39,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x3A,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x3B,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x3C,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x3D,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x3E,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x3F,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x40,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x41,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x45,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x46,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x47,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x58,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x59,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x5A,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x78,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x79,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x80,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x81,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x82,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x8C,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x8E,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x90,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x91,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x92,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x93,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x96,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x97,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x98,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x99,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x9A,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x9B,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x9C,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x9D,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x9E,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x9F,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xA6,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xA7,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xA8,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xA9,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xAA,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xAB,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xAC,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xAD,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xAE,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xAF,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xB6,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xB7,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xB8,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xB9,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xBA,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xBB,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xBC,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xBD,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xBE,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xBF,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xDB,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xDC,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xDD,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xDE,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xDF,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xF0,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xF1,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xF3,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xF6,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xF7,     OP_4BYTE3866|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t/* F2 0F 38 ?? */\n\t{ 0xF0,     OP_4BYTE38F2|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xF1,     OP_4BYTE38F2|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xF3,     OP_4BYTE38F2|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xF5,     OP_4BYTE38F2|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xF6,     OP_4BYTE38F2|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xF7,     OP_4BYTE38F2|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t/* F3 0F 38 ?? */\n\t{ 0xF3,     OP_4BYTE38F3|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xF5,     OP_4BYTE38F3|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xF6,     OP_4BYTE38F3|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xF7,     OP_4BYTE38F3|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t/* 66 0F 3A ?? */\n\t{ 0x00,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x01,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x02,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x04,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x05,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x06,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x08,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x09,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x0A,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x0B,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x0C,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x0D,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x0E,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x0F,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x14,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x15,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x16,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x17,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x18,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x19,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x1D,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x20,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x21,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x22,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x38,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x39,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x40,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x41,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x42,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x44,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x46,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x4A,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x4B,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x4C,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x60,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x61,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x62,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0x63,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t{ 0xDF,     OP_4BYTE3A66|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false},\n\t/* F2 0F 3A ?? */\n\t{ 0xF0,     OP_4BYTE3AF2|OP_SSE,        I386OP(invalid),                I386OP(invalid),            false}\n};\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386/i386priv.h",
    "content": "// license:BSD-3-Clause\n// copyright-holders:Ville Linde, Barry Rodewald, Carl, Phil Bennett\n#pragma once\n\n#ifndef __I386_H__\n#define __I386_H__\n\n//#include \"i386.h\"\n#include \"../../../lib/softfloat/milieu.h\"\n#include \"../../../lib/softfloat/softfloat.h\"\n#include \"../vtlb.h\"\n\n//#define DEBUG_MISSING_OPCODE\n\n#define I386OP(XX)      i386_##XX\n#define I486OP(XX)      i486_##XX\n#define PENTIUMOP(XX)   pentium_##XX\n#define MMXOP(XX)       mmx_##XX\n#define SSEOP(XX)       sse_##XX\n\nextern int i386_dasm_one(char *buffer, UINT32 pc, const UINT8 *oprom, int mode);\nextern int x87_mf_fault();\n\nenum SREGS { ES, CS, SS, DS, FS, GS };\n\nenum BREGS\n{\n\tAL = NATIVE_ENDIAN_VALUE_LE_BE(0,3),\n\tAH = NATIVE_ENDIAN_VALUE_LE_BE(1,2),\n\tCL = NATIVE_ENDIAN_VALUE_LE_BE(4,7),\n\tCH = NATIVE_ENDIAN_VALUE_LE_BE(5,6),\n\tDL = NATIVE_ENDIAN_VALUE_LE_BE(8,11),\n\tDH = NATIVE_ENDIAN_VALUE_LE_BE(9,10),\n\tBL = NATIVE_ENDIAN_VALUE_LE_BE(12,15),\n\tBH = NATIVE_ENDIAN_VALUE_LE_BE(13,14)\n};\n\nenum WREGS\n{\n\tAX = NATIVE_ENDIAN_VALUE_LE_BE(0,1),\n\tCX = NATIVE_ENDIAN_VALUE_LE_BE(2,3),\n\tDX = NATIVE_ENDIAN_VALUE_LE_BE(4,5),\n\tBX = NATIVE_ENDIAN_VALUE_LE_BE(6,7),\n\tSP = NATIVE_ENDIAN_VALUE_LE_BE(8,9),\n\tBP = NATIVE_ENDIAN_VALUE_LE_BE(10,11),\n\tSI = NATIVE_ENDIAN_VALUE_LE_BE(12,13),\n\tDI = NATIVE_ENDIAN_VALUE_LE_BE(14,15)\n};\n\nenum DREGS { EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI };\n\nenum\n{\n\tI386_PC = 0,\n\n\t/* 8-bit registers */\n\tI386_AL,\n\tI386_AH,\n\tI386_BL,\n\tI386_BH,\n\tI386_CL,\n\tI386_CH,\n\tI386_DL,\n\tI386_DH,\n\n\t/* 16-bit registers */\n\tI386_AX,\n\tI386_BX,\n\tI386_CX,\n\tI386_DX,\n\tI386_BP,\n\tI386_SP,\n\tI386_SI,\n\tI386_DI,\n\tI386_IP,\n\n\t/* 32-bit registers */\n\tI386_EAX,\n\tI386_ECX,\n\tI386_EDX,\n\tI386_EBX,\n\tI386_EBP,\n\tI386_ESP,\n\tI386_ESI,\n\tI386_EDI,\n\tI386_EIP,\n\n\t/* segment registers */\n\tI386_CS,\n\tI386_CS_BASE,\n\tI386_CS_LIMIT,\n\tI386_CS_FLAGS,\n\tI386_SS,\n\tI386_SS_BASE,\n\tI386_SS_LIMIT,\n\tI386_SS_FLAGS,\n\tI386_DS,\n\tI386_DS_BASE,\n\tI386_DS_LIMIT,\n\tI386_DS_FLAGS,\n\tI386_ES,\n\tI386_ES_BASE,\n\tI386_ES_LIMIT,\n\tI386_ES_FLAGS,\n\tI386_FS,\n\tI386_FS_BASE,\n\tI386_FS_LIMIT,\n\tI386_FS_FLAGS,\n\tI386_GS,\n\tI386_GS_BASE,\n\tI386_GS_LIMIT,\n\tI386_GS_FLAGS,\n\n\t/* other */\n\tI386_EFLAGS,\n\n\tI386_CR0,\n\tI386_CR1,\n\tI386_CR2,\n\tI386_CR3,\n\tI386_CR4,\n\n\tI386_DR0,\n\tI386_DR1,\n\tI386_DR2,\n\tI386_DR3,\n\tI386_DR4,\n\tI386_DR5,\n\tI386_DR6,\n\tI386_DR7,\n\n\tI386_TR6,\n\tI386_TR7,\n\n\tI386_GDTR_BASE,\n\tI386_GDTR_LIMIT,\n\tI386_IDTR_BASE,\n\tI386_IDTR_LIMIT,\n\tI386_TR,\n\tI386_TR_BASE,\n\tI386_TR_LIMIT,\n\tI386_TR_FLAGS,\n\tI386_LDTR,\n\tI386_LDTR_BASE,\n\tI386_LDTR_LIMIT,\n\tI386_LDTR_FLAGS,\n\n\tI386_CPL,\n\n\tX87_CTRL,\n\tX87_STATUS,\n\tX87_TAG,\n\tX87_ST0,\n\tX87_ST1,\n\tX87_ST2,\n\tX87_ST3,\n\tX87_ST4,\n\tX87_ST5,\n\tX87_ST6,\n\tX87_ST7,\n\n\tSSE_XMM0,\n\tSSE_XMM1,\n\tSSE_XMM2,\n\tSSE_XMM3,\n\tSSE_XMM4,\n\tSSE_XMM5,\n\tSSE_XMM6,\n\tSSE_XMM7\n};\n\nenum\n{\n\t/* mmx registers aliased to x87 ones */\n\tMMX_MM0=X87_ST0,\n\tMMX_MM1=X87_ST1,\n\tMMX_MM2=X87_ST2,\n\tMMX_MM3=X87_ST3,\n\tMMX_MM4=X87_ST4,\n\tMMX_MM5=X87_ST5,\n\tMMX_MM6=X87_ST6,\n\tMMX_MM7=X87_ST7\n};\n\nenum smram\n{\n\tSMRAM_SMBASE = 0xF8,\n\tSMRAM_SMREV  = 0xFC,\n\tSMRAM_IORSRT = 0x100,\n\tSMRAM_AHALT  = 0x102,\n\tSMRAM_IOEDI  = 0x104,\n\tSMRAM_IOECX  = 0x108,\n\tSMRAM_IOESI  = 0x10C,\n\n\tSMRAM_ES     = 0x1A8,\n\tSMRAM_CS     = 0x1AC,\n\tSMRAM_SS     = 0x1B0,\n\tSMRAM_DS     = 0x1B4,\n\tSMRAM_FS     = 0x1B8,\n\tSMRAM_GS     = 0x1BC,\n\tSMRAM_LDTR   = 0x1C0,\n\tSMRAM_TR     = 0x1C4,\n\tSMRAM_DR7    = 0x1C8,\n\tSMRAM_DR6    = 0x1CC,\n\tSMRAM_EAX    = 0x1D0,\n\tSMRAM_ECX    = 0x1D4,\n\tSMRAM_EDX    = 0x1D8,\n\tSMRAM_EBX    = 0x1DC,\n\tSMRAM_ESP    = 0x1E0,\n\tSMRAM_EBP    = 0x1E4,\n\tSMRAM_ESI    = 0x1E8,\n\tSMRAM_EDI    = 0x1EC,\n\tSMRAM_EIP    = 0x1F0,\n\tSMRAM_EFLAGS = 0x1F4,\n\tSMRAM_CR3    = 0x1F8,\n\tSMRAM_CR0    = 0x1FC,\n};\n\nenum smram_intel_p5\n{\n\tSMRAM_IP5_IOEIP   = 0x110,\n\tSMRAM_IP5_CR4     = 0x128,\n\tSMRAM_IP5_ESLIM   = 0x130,\n\tSMRAM_IP5_ESBASE  = 0x134,\n\tSMRAM_IP5_ESACC   = 0x138,\n\tSMRAM_IP5_CSLIM   = 0x13C,\n\tSMRAM_IP5_CSBASE  = 0x140,\n\tSMRAM_IP5_CSACC   = 0x144,\n\tSMRAM_IP5_SSLIM   = 0x148,\n\tSMRAM_IP5_SSBASE  = 0x14C,\n\tSMRAM_IP5_SSACC   = 0x150,\n\tSMRAM_IP5_DSLIM   = 0x154,\n\tSMRAM_IP5_DSBASE  = 0x158,\n\tSMRAM_IP5_DSACC   = 0x15C,\n\tSMRAM_IP5_FSLIM   = 0x160,\n\tSMRAM_IP5_FSBASE  = 0x164,\n\tSMRAM_IP5_FSACC   = 0x168,\n\tSMRAM_IP5_GSLIM   = 0x16C,\n\tSMRAM_IP5_GSBASE  = 0x170,\n\tSMRAM_IP5_GSACC   = 0x174,\n\tSMRAM_IP5_LDTLIM  = 0x178,\n\tSMRAM_IP5_LDTBASE = 0x17C,\n\tSMRAM_IP5_LDTACC  = 0x180,\n\tSMRAM_IP5_GDTLIM  = 0x184,\n\tSMRAM_IP5_GDTBASE = 0x188,\n\tSMRAM_IP5_GDTACC  = 0x18C,\n\tSMRAM_IP5_IDTLIM  = 0x190,\n\tSMRAM_IP5_IDTBASE = 0x194,\n\tSMRAM_IP5_IDTACC  = 0x198,\n\tSMRAM_IP5_TRLIM   = 0x19C,\n\tSMRAM_IP5_TRBASE  = 0x1A0,\n\tSMRAM_IP5_TRACC   = 0x1A4,\n};\n\n/* Protected mode exceptions */\n#define FAULT_UD 6   // Invalid Opcode\n#define FAULT_NM 7   // Coprocessor not available\n#define FAULT_DF 8   // Double Fault\n#define FAULT_TS 10  // Invalid TSS\n#define FAULT_NP 11  // Segment or Gate not present\n#define FAULT_SS 12  // Stack fault\n#define FAULT_GP 13  // General Protection Fault\n#define FAULT_PF 14  // Page Fault\n#define FAULT_MF 16  // Match (Coprocessor) Fault\n\n/* MXCSR Control and Status Register */\n#define MXCSR_IE  (1<<0)  // Invalid Operation Flag\n#define MXCSR_DE  (1<<1)  // Denormal Flag\n#define MXCSR_ZE  (1<<2)  // Divide-by-Zero Flag\n#define MXCSR_OE  (1<<3)  // Overflow Flag\n#define MXCSR_UE  (1<<4)  // Underflow Flag\n#define MXCSR_PE  (1<<5)  // Precision Flag\n#define MXCSR_DAZ (1<<6)  // Denormals Are Zeros\n#define MXCSR_IM  (1<<7)  // Invalid Operation Mask\n#define MXCSR_DM  (1<<8)  // Denormal Operation Mask\n#define MXCSR_ZM  (1<<9)  // Divide-by-Zero Mask\n#define MXCSR_OM  (1<<10) // Overflow Mask\n#define MXCSR_UM  (1<<11) // Underflow Mask\n#define MXCSR_PM  (1<<12) // Precision Mask\n#define MXCSR_RC  (3<<13) // Rounding Control\n#define MXCSR_FZ  (1<<15) // Flush to Zero\n\nstruct I386_SREG {\n\tUINT16 selector;\n\tUINT16 flags;\n\tUINT32 base;\n\tUINT32 limit;\n\tint d;      // Operand size\n\tbool valid;\n};\n\nstruct I386_CALL_GATE\n{\n\tUINT16 segment;\n\tUINT16 selector;\n\tUINT32 offset;\n\tUINT8 ar;  // access rights\n\tUINT8 dpl;\n\tUINT8 dword_count;\n\tUINT8 present;\n};\n\nstruct I386_SYS_TABLE {\n\tUINT32 base;\n\tUINT16 limit;\n};\n\nstruct I386_SEG_DESC {\n\tUINT16 segment;\n\tUINT16 flags;\n\tUINT32 base;\n\tUINT32 limit;\n};\n\nunion I386_GPR {\n\tUINT32 d[8];\n\tUINT16 w[16];\n\tUINT8 b[32];\n};\n\nunion MMX_REG {\n\tUINT32 d[2];\n\tINT32  i[2];\n\tUINT16 w[4];\n\tINT16  s[4];\n\tUINT8  b[8];\n\tINT8   c[8];\n\tfloat  f[2];\n\tUINT64 q;\n\tINT64  l;\n};\n\nunion XMM_REG {\n\tUINT8  b[16];\n\tUINT16 w[8];\n\tUINT32 d[4];\n\tUINT64 q[2];\n\tINT8   c[16];\n\tINT16  s[8];\n\tINT32  i[4];\n\tINT64  l[2];\n\tfloat  f[4];\n\tdouble  f64[2];\n};\n\n//struct i386_state\n//{\n\tI386_GPR m_reg;\n\tI386_SREG m_sreg[6];\n\tUINT32 m_eip;\n\tUINT32 m_pc;\n\tUINT32 m_prev_eip;\n\tUINT32 m_eflags;\n\tUINT32 m_eflags_mask;\n\tUINT8 m_CF;\n\tUINT8 m_DF;\n\tUINT8 m_SF;\n\tUINT8 m_OF;\n\tUINT8 m_ZF;\n\tUINT8 m_PF;\n\tUINT8 m_AF;\n\tUINT8 m_IF;\n\tUINT8 m_TF;\n\tUINT8 m_IOP1;\n\tUINT8 m_IOP2;\n\tUINT8 m_NT;\n\tUINT8 m_RF;\n\tUINT8 m_VM;\n\tUINT8 m_AC;\n\tUINT8 m_VIF;\n\tUINT8 m_VIP;\n\tUINT8 m_ID;\n\n\tUINT8 m_CPL;  // current privilege level\n\n\tUINT8 m_performed_intersegment_jump;\n\tUINT8 m_delayed_interrupt_enable;\n\n\tUINT32 m_cr[5];       // Control registers\n\tUINT32 m_dr[8];       // Debug registers\n\tUINT32 m_tr[8];       // Test registers\n\n\tI386_SYS_TABLE m_gdtr;    // Global Descriptor Table Register\n\tI386_SYS_TABLE m_idtr;    // Interrupt Descriptor Table Register\n\tI386_SEG_DESC m_task;     // Task register\n\tI386_SEG_DESC m_ldtr;     // Local Descriptor Table Register\n\n\tUINT8 m_ext;  // external interrupt\n\n\tint m_halted;\n\n\tint m_operand_size;\n\tint m_xmm_operand_size;\n\tint m_address_size;\n\tint m_operand_prefix;\n\tint m_address_prefix;\n\n\tint m_segment_prefix;\n\tint m_segment_override;\n\n\tint m_cycles;\n\tint m_base_cycles;\n\tUINT8 m_opcode;\n\n\tUINT8 m_irq_state;\n\tUINT32 m_a20_mask;\n\n\tint m_cpuid_max_input_value_eax;\n\tUINT32 m_cpuid_id0, m_cpuid_id1, m_cpuid_id2;\n\tUINT32 m_cpu_version;\n\tUINT32 m_feature_flags;\n\tUINT64 m_tsc;\n\tUINT64 m_perfctr[2];\n\n\t// FPU\n\tfloatx80 m_x87_reg[8];\n\n\tUINT16 m_x87_cw;\n\tUINT16 m_x87_sw;\n\tUINT16 m_x87_tw;\n\tUINT16 m_x87_ds;\n\tUINT64 m_x87_data_ptr;\n\tUINT16 m_x87_cs;\n\tUINT64 m_x87_inst_ptr;\n\tUINT16 m_x87_opcode;\n\n\tvoid (*m_opcode_table_x87_d8[256])(UINT8 modrm);\n\tvoid (*m_opcode_table_x87_d9[256])(UINT8 modrm);\n\tvoid (*m_opcode_table_x87_da[256])(UINT8 modrm);\n\tvoid (*m_opcode_table_x87_db[256])(UINT8 modrm);\n\tvoid (*m_opcode_table_x87_dc[256])(UINT8 modrm);\n\tvoid (*m_opcode_table_x87_dd[256])(UINT8 modrm);\n\tvoid (*m_opcode_table_x87_de[256])(UINT8 modrm);\n\tvoid (*m_opcode_table_x87_df[256])(UINT8 modrm);\n\n\t// SSE\n\tXMM_REG m_sse_reg[8];\n\tUINT32 m_mxcsr;\n\n\tvoid (*m_opcode_table1_16[256])();\n\tvoid (*m_opcode_table1_32[256])();\n\tvoid (*m_opcode_table2_16[256])();\n\tvoid (*m_opcode_table2_32[256])();\n\tvoid (*m_opcode_table338_16[256])();\n\tvoid (*m_opcode_table338_32[256])();\n\tvoid (*m_opcode_table33a_16[256])();\n\tvoid (*m_opcode_table33a_32[256])();\n\tvoid (*m_opcode_table366_16[256])();\n\tvoid (*m_opcode_table366_32[256])();\n\tvoid (*m_opcode_table3f2_16[256])();\n\tvoid (*m_opcode_table3f2_32[256])();\n\tvoid (*m_opcode_table3f3_16[256])();\n\tvoid (*m_opcode_table3f3_32[256])();\n\tvoid (*m_opcode_table46638_16[256])();\n\tvoid (*m_opcode_table46638_32[256])();\n\tvoid (*m_opcode_table4f238_16[256])();\n\tvoid (*m_opcode_table4f238_32[256])();\n\tvoid (*m_opcode_table4f338_16[256])();\n\tvoid (*m_opcode_table4f338_32[256])();\n\tvoid (*m_opcode_table4663a_16[256])();\n\tvoid (*m_opcode_table4663a_32[256])();\n\tvoid (*m_opcode_table4f23a_16[256])();\n\tvoid (*m_opcode_table4f23a_32[256])();\n\n\tbool m_lock_table[2][256];\n\n\tUINT8 *m_cycle_table_pm;\n\tUINT8 *m_cycle_table_rm;\n\n\tvtlb_state *m_vtlb;\n\n\tbool m_smm;\n\tbool m_smi;\n\tbool m_smi_latched;\n\tbool m_nmi_masked;\n\tbool m_nmi_latched;\n\tUINT32 m_smbase;\n//\tdevcb_resolved_write_line m_smiact;\n\tbool m_lock;\n\n\t// bytes in current opcode, debug only\n#ifdef DEBUG_MISSING_OPCODE\n\tUINT8 m_opcode_bytes[16];\n\tUINT32 m_opcode_pc;\n\tint m_opcode_bytes_length;\n#endif\n//};\n\nextern int i386_parity_table[256];\nstatic int i386_limit_check(int seg, UINT32 offset);\n\n#define FAULT_THROW(fault,error) { throw (UINT64)(fault | (UINT64)error << 32); }\n#define PF_THROW(error) { m_cr[2] = address; FAULT_THROW(FAULT_PF,error); }\n\n#define PROTECTED_MODE      (m_cr[0] & 0x1)\n#define STACK_32BIT         (m_sreg[SS].d)\n#define V8086_MODE          (m_VM)\n#define NESTED_TASK         (m_NT)\n#define WP                  (m_cr[0] & 0x10000)\n\n#define SetOF_Add32(r,s,d)  (m_OF = (((r) ^ (s)) & ((r) ^ (d)) & 0x80000000) ? 1: 0)\n#define SetOF_Add16(r,s,d)  (m_OF = (((r) ^ (s)) & ((r) ^ (d)) & 0x8000) ? 1 : 0)\n#define SetOF_Add8(r,s,d)   (m_OF = (((r) ^ (s)) & ((r) ^ (d)) & 0x80) ? 1 : 0)\n\n#define SetOF_Sub32(r,s,d)  (m_OF = (((d) ^ (s)) & ((d) ^ (r)) & 0x80000000) ? 1 : 0)\n#define SetOF_Sub16(r,s,d)  (m_OF = (((d) ^ (s)) & ((d) ^ (r)) & 0x8000) ? 1 : 0)\n#define SetOF_Sub8(r,s,d)   (m_OF = (((d) ^ (s)) & ((d) ^ (r)) & 0x80) ? 1 : 0)\n\n#define SetCF8(x)           {m_CF = ((x) & 0x100) ? 1 : 0; }\n#define SetCF16(x)          {m_CF = ((x) & 0x10000) ? 1 : 0; }\n#define SetCF32(x)          {m_CF = ((x) & (((UINT64)1) << 32)) ? 1 : 0; }\n\n#define SetSF(x)            (m_SF = (x))\n#define SetZF(x)            (m_ZF = (x))\n#define SetAF(x,y,z)        (m_AF = (((x) ^ ((y) ^ (z))) & 0x10) ? 1 : 0)\n#define SetPF(x)            (m_PF = i386_parity_table[(x) & 0xFF])\n\n#define SetSZPF8(x)         {m_ZF = ((UINT8)(x)==0);  m_SF = ((x)&0x80) ? 1 : 0; m_PF = i386_parity_table[x & 0xFF]; }\n#define SetSZPF16(x)        {m_ZF = ((UINT16)(x)==0);  m_SF = ((x)&0x8000) ? 1 : 0; m_PF = i386_parity_table[x & 0xFF]; }\n#define SetSZPF32(x)        {m_ZF = ((UINT32)(x)==0);  m_SF = ((x)&0x80000000) ? 1 : 0; m_PF = i386_parity_table[x & 0xFF]; }\n\n#define MMX(n)              (*((MMX_REG *)(&m_x87_reg[(n)].low)))\n#define XMM(n)              m_sse_reg[(n)]\n\n/***********************************************************************************/\n\nstruct MODRM_TABLE {\n\tstruct {\n\t\tint b;\n\t\tint w;\n\t\tint d;\n\t} reg;\n\tstruct {\n\t\tint b;\n\t\tint w;\n\t\tint d;\n\t} rm;\n};\n\nextern MODRM_TABLE i386_MODRM_table[256];\n\n#define REG8(x)         (m_reg.b[x])\n#define REG16(x)        (m_reg.w[x])\n#define REG32(x)        (m_reg.d[x])\n\n#define LOAD_REG8(x)    (REG8(i386_MODRM_table[x].reg.b))\n#define LOAD_REG16(x)   (REG16(i386_MODRM_table[x].reg.w))\n#define LOAD_REG32(x)   (REG32(i386_MODRM_table[x].reg.d))\n#define LOAD_RM8(x)     (REG8(i386_MODRM_table[x].rm.b))\n#define LOAD_RM16(x)    (REG16(i386_MODRM_table[x].rm.w))\n#define LOAD_RM32(x)    (REG32(i386_MODRM_table[x].rm.d))\n\n#define STORE_REG8(x, value)    (REG8(i386_MODRM_table[x].reg.b) = value)\n#define STORE_REG16(x, value)   (REG16(i386_MODRM_table[x].reg.w) = value)\n#define STORE_REG32(x, value)   (REG32(i386_MODRM_table[x].reg.d) = value)\n#define STORE_RM8(x, value)     (REG8(i386_MODRM_table[x].rm.b) = value)\n#define STORE_RM16(x, value)    (REG16(i386_MODRM_table[x].rm.w) = value)\n#define STORE_RM32(x, value)    (REG32(i386_MODRM_table[x].rm.d) = value)\n\n#define SWITCH_ENDIAN_32(x) (((((x) << 24) & (0xff << 24)) | (((x) << 8) & (0xff << 16)) | (((x) >> 8) & (0xff << 8)) | (((x) >> 24) & (0xff << 0))))\n\n/***********************************************************************************/\n\n//\nUINT get_segment_descriptor_wine(int sreg);\n//\nINLINE UINT32 i386_translate(int segment, UINT32 ip, int rwn)\n{\n\t// TODO: segment limit access size, execution permission, handle exception thrown from exception handler\n\tif(PROTECTED_MODE && !V8086_MODE && (rwn != -1))\n\t{\n\t\tif(!(m_sreg[segment].valid))\n\t\t\tFAULT_THROW((segment==SS)?FAULT_SS:FAULT_GP, 0);\n\t\tif(i386_limit_check(segment, ip))\n\t\t\tFAULT_THROW((segment==SS)?FAULT_SS:FAULT_GP, 0);\n\t\tif((rwn == 0) && ((m_sreg[segment].flags & 8) && !(m_sreg[segment].flags & 2)))\n\t\t\tFAULT_THROW(FAULT_GP, 0);\n\t\tif((rwn == 1) && ((m_sreg[segment].flags & 8) || !(m_sreg[segment].flags & 2)))\n\t\t\tFAULT_THROW(FAULT_GP, 0);\n\t}\n\t//\n\t//return get_segment_descriptor_wine(segment) + ip;\n\t//\n\treturn m_sreg[segment].base + ip;\n}\n\n#define VTLB_FLAG_DIRTY 0x100\n\nINLINE vtlb_entry get_permissions(UINT32 pte, int wp)\n{\n\tvtlb_entry ret = VTLB_READ_ALLOWED | ((pte & 4) ? VTLB_USER_READ_ALLOWED : 0);\n\tif(!wp)\n\t\tret |= VTLB_WRITE_ALLOWED;\n\tif(pte & 2)\n\t\tret |= VTLB_WRITE_ALLOWED | ((pte & 4) ? VTLB_USER_WRITE_ALLOWED : 0);\n\treturn ret;\n}\n\nstatic int i386_translate_address(int intention, offs_t *address, vtlb_entry *entry)\n{\n\tUINT32 a = *address;\n\tUINT32 pdbr = m_cr[3] & 0xfffff000;\n\tUINT32 directory = (a >> 22) & 0x3ff;\n\tUINT32 table = (a >> 12) & 0x3ff;\n\tvtlb_entry perm = 0;\n\tint ret = FALSE;\n\tbool user = (intention & TRANSLATE_USER_MASK) ? true : false;\n\tbool write = (intention & TRANSLATE_WRITE) ? true : false;\n\tbool debug = (intention & TRANSLATE_DEBUG_MASK) ? true : false;\n\n\tif(!(m_cr[0] & 0x80000000))\n\t{\n\t\tif(entry)\n\t\t\t*entry = 0x77;\n\t\treturn TRUE;\n\t}\n\n\tUINT32 page_dir = read_dword(pdbr + directory * 4);\n\tif(page_dir & 1)\n\t{\n\t\tif ((page_dir & 0x80) && (m_cr[4] & 0x10))\n\t\t{\n\t\t\ta = (page_dir & 0xffc00000) | (a & 0x003fffff);\n\t\t\tif(debug)\n\t\t\t{\n\t\t\t\t*address = a;\n\t\t\t\treturn TRUE;\n\t\t\t}\n\t\t\tperm = get_permissions(page_dir, WP);\n\t\t\tif(write && (!(perm & VTLB_WRITE_ALLOWED) || (user && !(perm & VTLB_USER_WRITE_ALLOWED))))\n\t\t\t\tret = FALSE;\n\t\t\telse if(user && !(perm & VTLB_USER_READ_ALLOWED))\n\t\t\t\tret = FALSE;\n\t\t\telse\n\t\t\t{\n\t\t\t\tif(write)\n\t\t\t\t\tperm |= VTLB_FLAG_DIRTY;\n\t\t\t\tif(!(page_dir & 0x40) && write)\n\t\t\t\t\twrite_dword(pdbr + directory * 4, page_dir | 0x60);\n\t\t\t\telse if(!(page_dir & 0x20))\n\t\t\t\t\twrite_dword(pdbr + directory * 4, page_dir | 0x20);\n\t\t\t\tret = TRUE;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tUINT32 page_entry = read_dword((page_dir & 0xfffff000) + (table * 4));\n\t\t\tif(!(page_entry & 1))\n\t\t\t\tret = FALSE;\n\t\t\telse\n\t\t\t{\n\t\t\t\ta = (page_entry & 0xfffff000) | (a & 0xfff);\n\t\t\t\tif(debug)\n\t\t\t\t{\n\t\t\t\t\t*address = a;\n\t\t\t\t\treturn TRUE;\n\t\t\t\t}\n\t\t\t\tperm = get_permissions(page_entry, WP);\n\t\t\t\tif(write && (!(perm & VTLB_WRITE_ALLOWED) || (user && !(perm & VTLB_USER_WRITE_ALLOWED))))\n\t\t\t\t\tret = FALSE;\n\t\t\t\telse if(user && !(perm & VTLB_USER_READ_ALLOWED))\n\t\t\t\t\tret = FALSE;\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif(write)\n\t\t\t\t\t\tperm |= VTLB_FLAG_DIRTY;\n\t\t\t\t\tif(!(page_dir & 0x20))\n\t\t\t\t\t\twrite_dword(pdbr + directory * 4, page_dir | 0x20);\n\t\t\t\t\tif(!(page_entry & 0x40) && write)\n\t\t\t\t\t\twrite_dword((page_dir & 0xfffff000) + (table * 4), page_entry | 0x60);\n\t\t\t\t\telse if(!(page_entry & 0x20))\n\t\t\t\t\t\twrite_dword((page_dir & 0xfffff000) + (table * 4), page_entry | 0x20);\n\t\t\t\t\tret = TRUE;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t\tret = FALSE;\n\tif(entry)\n\t\t*entry = perm;\n\tif(ret)\n\t\t*address = a;\n\treturn ret;\n}\n\n//#define TEST_TLB\n\nINLINE int translate_address(int pl, int type, UINT32 *address, UINT32 *error)\n{\n#ifdef PAGING\n\tif(!(m_cr[0] & 0x80000000)) // Some (very few) old OS's won't work with this\n\t\treturn TRUE;\n\n\tconst vtlb_entry *table = vtlb_table(m_vtlb);\n\tUINT32 index = *address >> 12;\n\tvtlb_entry entry = table[index];\n\tif(type == TRANSLATE_FETCH)\n\t\ttype = TRANSLATE_READ;\n\tif(pl == 3)\n\t\ttype |= TRANSLATE_USER_MASK;\n#ifdef TEST_TLB\n\tUINT32 test_addr = *address;\n#endif\n\n\tif(!(entry & VTLB_FLAG_VALID) || ((type & TRANSLATE_WRITE) && !(entry & VTLB_FLAG_DIRTY)))\n\t{\n\t\tif(!i386_translate_address(type, address, &entry))\n\t\t{\n\t\t\t*error = ((type & TRANSLATE_WRITE) ? 2 : 0) | ((m_CPL == 3) ? 4 : 0);\n\t\t\tif(entry)\n\t\t\t\t*error |= 1;\n\t\t\treturn FALSE;\n\t\t}\n\t\tvtlb_dynload(m_vtlb, index, *address, entry);\n\t\treturn TRUE;\n\t}\n\tif(!(entry & (1 << type)))\n\t{\n\t\t*error = ((type & TRANSLATE_WRITE) ? 2 : 0) | ((m_CPL == 3) ? 4 : 0) | 1;\n\t\treturn FALSE;\n\t}\n\t*address = (entry & 0xfffff000) | (*address & 0xfff);\n#ifdef TEST_TLB\n\tint test_ret = i386_translate_address(type | TRANSLATE_DEBUG_MASK, &test_addr, NULL);\n\tif(!test_ret || (test_addr != *address))\n\t\tlogerror(\"TLB-PTE mismatch! %06X %06X %06x\\n\", *address, test_addr, m_pc);\n#endif\n#endif\n\treturn TRUE;\n}\n\nINLINE void CHANGE_PC(UINT32 pc)\n{\n\tm_pc = i386_translate(CS, pc, -1 );\n}\n\nINLINE void NEAR_BRANCH(INT32 offs)\n{\n\t/* TODO: limit */\n\tm_eip += offs;\n\tm_pc += offs;\n}\n\nINLINE UINT8 FETCH()\n{\n\tUINT8 value;\n\tUINT32 address = m_pc, error;\n\n\tif(!translate_address(m_CPL,TRANSLATE_FETCH,&address,&error))\n\t\tPF_THROW(error);\n\n\tvalue = read_decrypted_byte(address & m_a20_mask);\n#ifdef DEBUG_MISSING_OPCODE\n\tm_opcode_bytes[m_opcode_bytes_length] = value;\n\tm_opcode_bytes_length = (m_opcode_bytes_length + 1) & 15;\n#endif\n\tm_eip++;\n\tm_pc++;\n\treturn value;\n}\nINLINE UINT16 FETCH16()\n{\n\tUINT16 value;\n\tUINT32 address = m_pc, error;\n\n\tif( address & 0x1 ) {       /* Unaligned read */\n\t\tvalue = (FETCH() << 0);\n\t\tvalue |= (FETCH() << 8);\n\t} else {\n\t\tif(!translate_address(m_CPL,TRANSLATE_FETCH,&address,&error))\n\t\t\tPF_THROW(error);\n\t\taddress &= m_a20_mask;\n\t\tvalue = read_decrypted_word(address);\n\t\tm_eip += 2;\n\t\tm_pc += 2;\n\t}\n\treturn value;\n}\nINLINE UINT32 FETCH32()\n{\n\tUINT32 value;\n\tUINT32 address = m_pc, error;\n\n\tif( m_pc & 0x3 ) {      /* Unaligned read */\n\t\tvalue = (FETCH() << 0);\n\t\tvalue |= (FETCH() << 8);\n\t\tvalue |= (FETCH() << 16);\n\t\tvalue |= (FETCH() << 24);\n\t} else {\n\t\tif(!translate_address(m_CPL,TRANSLATE_FETCH,&address,&error))\n\t\t\tPF_THROW(error);\n\n\t\taddress &= m_a20_mask;\n\t\tvalue = read_decrypted_dword(address);\n\t\tm_eip += 4;\n\t\tm_pc += 4;\n\t}\n\treturn value;\n}\n\nINLINE UINT8 READ8(UINT32 ea)\n{\n\tUINT32 address = ea, error;\n\n\tif(!translate_address(m_CPL,TRANSLATE_READ,&address, &error))\n\t\tPF_THROW(error);\n\n\taddress &= m_a20_mask;\n\treturn read_byte(address);\n}\nINLINE UINT16 READ16(UINT32 ea)\n{\n\tUINT16 value;\n\tUINT32 address = ea, error;\n\n\tif( ea & 0x1 ) {        /* Unaligned read */\n\t\tvalue = (READ8( address+0 ) << 0);\n\t\tvalue |= (READ8( address+1 ) << 8);\n\t} else {\n\t\tif(!translate_address(m_CPL,TRANSLATE_READ,&address,&error))\n\t\t\tPF_THROW(error);\n\n\t\taddress &= m_a20_mask;\n\t\tvalue = read_word( address );\n\t}\n\treturn value;\n}\nINLINE UINT32 READ32(UINT32 ea)\n{\n\tUINT32 value;\n\tUINT32 address = ea, error;\n\n\tif( ea & 0x3 ) {        /* Unaligned read */\n\t\tvalue = (READ8( address+0 ) << 0);\n\t\tvalue |= (READ8( address+1 ) << 8);\n\t\tvalue |= (READ8( address+2 ) << 16),\n\t\tvalue |= (READ8( address+3 ) << 24);\n\t} else {\n\t\tif(!translate_address(m_CPL,TRANSLATE_READ,&address,&error))\n\t\t\tPF_THROW(error);\n\n\t\taddress &= m_a20_mask;\n\t\tvalue = read_dword( address );\n\t}\n\treturn value;\n}\n\nINLINE UINT64 READ64(UINT32 ea)\n{\n\tUINT64 value;\n\tUINT32 address = ea, error;\n\n\tif( ea & 0x7 ) {        /* Unaligned read */\n\t\tvalue = (((UINT64) READ8( address+0 )) << 0);\n\t\tvalue |= (((UINT64) READ8( address+1 )) << 8);\n\t\tvalue |= (((UINT64) READ8( address+2 )) << 16);\n\t\tvalue |= (((UINT64) READ8( address+3 )) << 24);\n\t\tvalue |= (((UINT64) READ8( address+4 )) << 32);\n\t\tvalue |= (((UINT64) READ8( address+5 )) << 40);\n\t\tvalue |= (((UINT64) READ8( address+6 )) << 48);\n\t\tvalue |= (((UINT64) READ8( address+7 )) << 56);\n\t} else {\n\t\tif(!translate_address(m_CPL,TRANSLATE_READ,&address,&error))\n\t\t\tPF_THROW(error);\n\n\t\taddress &= m_a20_mask;\n\t\tvalue = (((UINT64) read_dword( address+0 )) << 0);\n\t\tvalue |= (((UINT64) read_dword( address+4 )) << 32);\n\t}\n\treturn value;\n}\nINLINE UINT8 READ8PL0(UINT32 ea)\n{\n\tUINT32 address = ea, error;\n\n\tif(!translate_address(0,TRANSLATE_READ,&address,&error))\n\t\tPF_THROW(error);\n\n\taddress &= m_a20_mask;\n\treturn read_byte(address);\n}\nINLINE UINT16 READ16PL0(UINT32 ea)\n{\n\tUINT16 value;\n\tUINT32 address = ea, error;\n\n\tif( ea & 0x1 ) {        /* Unaligned read */\n\t\tvalue = (READ8PL0( address+0 ) << 0);\n\t\tvalue |= (READ8PL0( address+1 ) << 8);\n\t} else {\n\t\tif(!translate_address(0,TRANSLATE_READ,&address,&error))\n\t\t\tPF_THROW(error);\n\n\t\taddress &= m_a20_mask;\n\t\tvalue = read_word( address );\n\t}\n\treturn value;\n}\n\nINLINE UINT32 READ32PL0(UINT32 ea)\n{\n\tUINT32 value;\n\tUINT32 address = ea, error;\n\n\tif( ea & 0x3 ) {        /* Unaligned read */\n\t\tvalue = (READ8PL0( address+0 ) << 0);\n\t\tvalue |= (READ8PL0( address+1 ) << 8);\n\t\tvalue |= (READ8PL0( address+2 ) << 16);\n\t\tvalue |= (READ8PL0( address+3 ) << 24);\n\t} else {\n\t\tif(!translate_address(0,TRANSLATE_READ,&address,&error))\n\t\t\tPF_THROW(error);\n\n\t\taddress &= m_a20_mask;\n\t\tvalue = read_dword( address );\n\t}\n\treturn value;\n}\n\nINLINE void WRITE_TEST(UINT32 ea)\n{\n\tUINT32 address = ea, error;\n\tif(!translate_address(m_CPL,TRANSLATE_WRITE,&address,&error))\n\t\tPF_THROW(error);\n}\n\nINLINE void WRITE8(UINT32 ea, UINT8 value)\n{\n\tUINT32 address = ea, error;\n\n\tif(!translate_address(m_CPL,TRANSLATE_WRITE,&address,&error))\n\t\tPF_THROW(error);\n\n\taddress &= m_a20_mask;\n\twrite_byte(address, value);\n}\nINLINE void WRITE16(UINT32 ea, UINT16 value)\n{\n\tUINT32 address = ea, error;\n\n\tif( ea & 0x1 ) {        /* Unaligned write */\n\t\tWRITE8( address+0, value & 0xff );\n\t\tWRITE8( address+1, (value >> 8) & 0xff );\n\t} else {\n\t\tif(!translate_address(m_CPL,TRANSLATE_WRITE,&address,&error))\n\t\t\tPF_THROW(error);\n\n\t\taddress &= m_a20_mask;\n\t\twrite_word(address, value);\n\t}\n}\nINLINE void WRITE32(UINT32 ea, UINT32 value)\n{\n\tUINT32 address = ea, error;\n\n\tif( ea & 0x3 ) {        /* Unaligned write */\n\t\tWRITE8( address+0, value & 0xff );\n\t\tWRITE8( address+1, (value >> 8) & 0xff );\n\t\tWRITE8( address+2, (value >> 16) & 0xff );\n\t\tWRITE8( address+3, (value >> 24) & 0xff );\n\t} else {\n\t\tif(!translate_address(m_CPL,TRANSLATE_WRITE,&address,&error))\n\t\t\tPF_THROW(error);\n\n\t\tea &= m_a20_mask;\n\t\twrite_dword(address, value);\n\t}\n}\n\nINLINE void WRITE64(UINT32 ea, UINT64 value)\n{\n\tUINT32 address = ea, error;\n\n\tif( ea & 0x7 ) {        /* Unaligned write */\n\t\tWRITE8( address+0, value & 0xff );\n\t\tWRITE8( address+1, (value >> 8) & 0xff );\n\t\tWRITE8( address+2, (value >> 16) & 0xff );\n\t\tWRITE8( address+3, (value >> 24) & 0xff );\n\t\tWRITE8( address+4, (value >> 32) & 0xff );\n\t\tWRITE8( address+5, (value >> 40) & 0xff );\n\t\tWRITE8( address+6, (value >> 48) & 0xff );\n\t\tWRITE8( address+7, (value >> 56) & 0xff );\n\t} else {\n\t\tif(!translate_address(m_CPL,TRANSLATE_WRITE,&address,&error))\n\t\t\tPF_THROW(error);\n\n\t\tea &= m_a20_mask;\n\t\twrite_dword(address+0, value & 0xffffffff);\n\t\twrite_dword(address+4, (value >> 32) & 0xffffffff);\n\t}\n}\n\n/***********************************************************************************/\n\nINLINE UINT8 OR8(UINT8 dst, UINT8 src)\n{\n\tUINT8 res = dst | src;\n\tm_CF = m_OF = 0;\n\tSetSZPF8(res);\n\treturn res;\n}\nINLINE UINT16 OR16(UINT16 dst, UINT16 src)\n{\n\tUINT16 res = dst | src;\n\tm_CF = m_OF = 0;\n\tSetSZPF16(res);\n\treturn res;\n}\nINLINE UINT32 OR32(UINT32 dst, UINT32 src)\n{\n\tUINT32 res = dst | src;\n\tm_CF = m_OF = 0;\n\tSetSZPF32(res);\n\treturn res;\n}\n\nINLINE UINT8 AND8(UINT8 dst, UINT8 src)\n{\n\tUINT8 res = dst & src;\n\tm_CF = m_OF = 0;\n\tSetSZPF8(res);\n\treturn res;\n}\nINLINE UINT16 AND16(UINT16 dst, UINT16 src)\n{\n\tUINT16 res = dst & src;\n\tm_CF = m_OF = 0;\n\tSetSZPF16(res);\n\treturn res;\n}\nINLINE UINT32 AND32(UINT32 dst, UINT32 src)\n{\n\tUINT32 res = dst & src;\n\tm_CF = m_OF = 0;\n\tSetSZPF32(res);\n\treturn res;\n}\n\nINLINE UINT8 XOR8(UINT8 dst, UINT8 src)\n{\n\tUINT8 res = dst ^ src;\n\tm_CF = m_OF = 0;\n\tSetSZPF8(res);\n\treturn res;\n}\nINLINE UINT16 XOR16(UINT16 dst, UINT16 src)\n{\n\tUINT16 res = dst ^ src;\n\tm_CF = m_OF = 0;\n\tSetSZPF16(res);\n\treturn res;\n}\nINLINE UINT32 XOR32(UINT32 dst, UINT32 src)\n{\n\tUINT32 res = dst ^ src;\n\tm_CF = m_OF = 0;\n\tSetSZPF32(res);\n\treturn res;\n}\n\n#define SUB8(dst, src) SBB8(dst, src, 0)\nINLINE UINT8 SBB8(UINT8 dst, UINT8 src, UINT8 b)\n{\n\tUINT16 res = (UINT16)dst - (UINT16)src - (UINT8)b;\n\tSetCF8(res);\n\tSetOF_Sub8(res,src,dst);\n\tSetAF(res,src,dst);\n\tSetSZPF8(res);\n\treturn (UINT8)res;\n}\n\n#define SUB16(dst, src) SBB16(dst, src, 0)\nINLINE UINT16 SBB16(UINT16 dst, UINT16 src, UINT16 b)\n{\n\tUINT32 res = (UINT32)dst - (UINT32)src - (UINT32)b;\n\tSetCF16(res);\n\tSetOF_Sub16(res,src,dst);\n\tSetAF(res,src,dst);\n\tSetSZPF16(res);\n\treturn (UINT16)res;\n}\n\n#define SUB32(dst, src) SBB32(dst, src, 0)\nINLINE UINT32 SBB32(UINT32 dst, UINT32 src, UINT32 b)\n{\n\tUINT64 res = (UINT64)dst - (UINT64)src - (UINT64) b;\n\tSetCF32(res);\n\tSetOF_Sub32(res,src,dst);\n\tSetAF(res,src,dst);\n\tSetSZPF32(res);\n\treturn (UINT32)res;\n}\n\n#define ADD8(dst, src) ADC8(dst, src, 0)\nINLINE UINT8 ADC8(UINT8 dst, UINT8 src, UINT8 c)\n{\n\tUINT16 res = (UINT16)dst + (UINT16)src + (UINT16)c;\n\tSetCF8(res);\n\tSetOF_Add8(res,src,dst);\n\tSetAF(res,src,dst);\n\tSetSZPF8(res);\n\treturn (UINT8)res;\n}\n\n#define ADD16(dst, src) ADC16(dst, src, 0)\nINLINE UINT16 ADC16(UINT16 dst, UINT16 src, UINT8 c)\n{\n\tUINT32 res = (UINT32)dst + (UINT32)src + (UINT32)c;\n\tSetCF16(res);\n\tSetOF_Add16(res,src,dst);\n\tSetAF(res,src,dst);\n\tSetSZPF16(res);\n\treturn (UINT16)res;\n}\n\n#define ADD32(dst, src) ADC32(dst, src, 0)\nINLINE UINT32 ADC32(UINT32 dst, UINT32 src, UINT32 c)\n{\n\tUINT64 res = (UINT64)dst + (UINT64)src + (UINT64) c;\n\tSetCF32(res);\n\tSetOF_Add32(res,src,dst);\n\tSetAF(res,src,dst);\n\tSetSZPF32(res);\n\treturn (UINT32)res;\n}\n\nINLINE UINT8 INC8(UINT8 dst)\n{\n\tUINT16 res = (UINT16)dst + 1;\n\tSetOF_Add8(res,1,dst);\n\tSetAF(res,1,dst);\n\tSetSZPF8(res);\n\treturn (UINT8)res;\n}\nINLINE UINT16 INC16(UINT16 dst)\n{\n\tUINT32 res = (UINT32)dst + 1;\n\tSetOF_Add16(res,1,dst);\n\tSetAF(res,1,dst);\n\tSetSZPF16(res);\n\treturn (UINT16)res;\n}\nINLINE UINT32 INC32(UINT32 dst)\n{\n\tUINT64 res = (UINT64)dst + 1;\n\tSetOF_Add32(res,1,dst);\n\tSetAF(res,1,dst);\n\tSetSZPF32(res);\n\treturn (UINT32)res;\n}\n\nINLINE UINT8 DEC8(UINT8 dst)\n{\n\tUINT16 res = (UINT16)dst - 1;\n\tSetOF_Sub8(res,1,dst);\n\tSetAF(res,1,dst);\n\tSetSZPF8(res);\n\treturn (UINT8)res;\n}\nINLINE UINT16 DEC16(UINT16 dst)\n{\n\tUINT32 res = (UINT32)dst - 1;\n\tSetOF_Sub16(res,1,dst);\n\tSetAF(res,1,dst);\n\tSetSZPF16(res);\n\treturn (UINT16)res;\n}\nINLINE UINT32 DEC32(UINT32 dst)\n{\n\tUINT64 res = (UINT64)dst - 1;\n\tSetOF_Sub32(res,1,dst);\n\tSetAF(res,1,dst);\n\tSetSZPF32(res);\n\treturn (UINT32)res;\n}\n\n\n\nINLINE void PUSH16(UINT16 value)\n{\n\tUINT32 ea, new_esp;\n\tif( STACK_32BIT ) {\n\t\tnew_esp = REG32(ESP) - 2;\n\t\tea = i386_translate(SS, new_esp, 1);\n\t\tWRITE16(ea, value );\n\t\tREG32(ESP) = new_esp;\n\t} else {\n\t\tnew_esp = (REG16(SP) - 2) & 0xffff;\n\t\tea = i386_translate(SS, new_esp, 1);\n\t\tWRITE16(ea, value );\n\t\tREG16(SP) = new_esp;\n\t}\n}\nINLINE void PUSH32(UINT32 value)\n{\n\tUINT32 ea, new_esp;\n\tif( STACK_32BIT ) {\n\t\tnew_esp = REG32(ESP) - 4;\n\t\tea = i386_translate(SS, new_esp, 1);\n\t\tWRITE32(ea, value );\n\t\tREG32(ESP) = new_esp;\n\t} else {\n\t\tnew_esp = (REG16(SP) - 4) & 0xffff;\n\t\tea = i386_translate(SS, new_esp, 1);\n\t\tWRITE32(ea, value );\n\t\tREG16(SP) = new_esp;\n\t}\n}\nINLINE void PUSH8(UINT8 value)\n{\n\tif( m_operand_size ) {\n\t\tPUSH32((INT32)(INT8)value);\n\t} else {\n\t\tPUSH16((INT16)(INT8)value);\n\t}\n}\n\nINLINE UINT8 POP8()\n{\n\tUINT8 value;\n\tUINT32 ea, new_esp;\n\tif( STACK_32BIT ) {\n\t\tnew_esp = REG32(ESP) + 1;\n\t\tea = i386_translate(SS, new_esp - 1, 0);\n\t\tvalue = READ8(ea );\n\t\tREG32(ESP) = new_esp;\n\t} else {\n\t\tnew_esp = REG16(SP) + 1;\n\t\tea = i386_translate(SS, (new_esp - 1) & 0xffff, 0);\n\t\tvalue = READ8(ea );\n\t\tREG16(SP) = new_esp;\n\t}\n\treturn value;\n}\nINLINE UINT16 POP16()\n{\n\tUINT16 value;\n\tUINT32 ea, new_esp;\n\tif( STACK_32BIT ) {\n\t\tnew_esp = REG32(ESP) + 2;\n\t\tea = i386_translate(SS, new_esp - 2, 0);\n\t\tvalue = READ16(ea );\n\t\tREG32(ESP) = new_esp;\n\t} else {\n\t\tnew_esp = REG16(SP) + 2;\n\t\tea = i386_translate(SS, (new_esp - 2) & 0xffff, 0);\n\t\tvalue = READ16(ea );\n\t\tREG16(SP) = new_esp;\n\t}\n\treturn value;\n}\nINLINE UINT32 POP32()\n{\n\tUINT32 value;\n\tUINT32 ea, new_esp;\n\tif( STACK_32BIT ) {\n\t\tnew_esp = REG32(ESP) + 4;\n\t\tea = i386_translate(SS, new_esp - 4, 0);\n\t\tvalue = READ32(ea );\n\t\tREG32(ESP) = new_esp;\n\t} else {\n\t\tnew_esp = REG16(SP) + 4;\n\t\tea = i386_translate(SS, (new_esp - 4) & 0xffff, 0);\n\t\tvalue = READ32(ea );\n\t\tREG16(SP) = new_esp;\n\t}\n\treturn value;\n}\n\nINLINE void BUMP_SI(int adjustment)\n{\n\tif ( m_address_size )\n\t\tREG32(ESI) += ((m_DF) ? -adjustment : +adjustment);\n\telse\n\t\tREG16(SI) += ((m_DF) ? -adjustment : +adjustment);\n}\n\nINLINE void BUMP_DI(int adjustment)\n{\n\tif ( m_address_size )\n\t\tREG32(EDI) += ((m_DF) ? -adjustment : +adjustment);\n\telse\n\t\tREG16(DI) += ((m_DF) ? -adjustment : +adjustment);\n}\n\n\n\n/***********************************************************************************\n    I/O ACCESS\n***********************************************************************************/\n\nINLINE void check_ioperm(offs_t port, UINT8 mask)\n{\n\tUINT8 IOPL, map;\n\tUINT16 IOPB;\n\tUINT32 address;\n\n\tif(!PROTECTED_MODE)\n\t\treturn;\n\n\tIOPL = m_IOP1 | (m_IOP2 << 1);\n\tif(!V8086_MODE && (m_CPL <= IOPL))\n\t\treturn;\n\n\tif((m_task.limit < 0x67) || ((m_task.flags & 0xd) != 9))\n\t\tFAULT_THROW(FAULT_GP,0);\n\n\taddress = m_task.base;\n\tIOPB = READ16PL0(address+0x66);\n\tif((IOPB+(port/8)) > m_task.limit)\n\t\tFAULT_THROW(FAULT_GP,0);\n\n\tmap = READ8PL0(address+IOPB+(port/8));\n\tmap >>= (port%8);\n\tif(map & mask)\n\t\tFAULT_THROW(FAULT_GP,0);\n}\n\nINLINE UINT8 READPORT8(offs_t port)\n{\n\tcheck_ioperm(port, 1);\n\treturn read_io_byte(port);\n}\n\nINLINE void WRITEPORT8(offs_t port, UINT8 value)\n{\n\tcheck_ioperm(port, 1);\n\twrite_io_byte(port, value);\n}\n\nINLINE UINT16 READPORT16(offs_t port)\n{\n\tif (port & 1)\n\t{\n\t\tUINT16 value = READPORT8(port);\n\t\tvalue |= (READPORT8(port + 1) << 8);\n\t\treturn value;\n\t}\n\telse\n\t{\n\t\tcheck_ioperm(port, 3);\n\t\treturn read_io_word(port);\n\t}\n}\n\nINLINE void WRITEPORT16(offs_t port, UINT16 value)\n{\n\tif (port & 1)\n\t{\n\t\tWRITEPORT8(port, value & 0xff);\n\t\tWRITEPORT8(port + 1, (value >> 8) & 0xff);\n\t}\n\telse\n\t{\n\t\tcheck_ioperm(port, 3);\n\t\twrite_io_word(port, value);\n\t}\n}\n\nINLINE UINT32 READPORT32(offs_t port)\n{\n\tif (port & 3)\n\t{\n\t\tUINT32 value = READPORT8(port);\n\t\tvalue |= (READPORT8(port + 1) << 8);\n\t\tvalue |= (READPORT8(port + 2) << 16);\n\t\tvalue |= (READPORT8(port + 3) << 24);\n\t\treturn value;\n\t}\n\telse\n\t{\n\t\tcheck_ioperm(port, 0xf);\n\t\treturn read_io_dword(port);\n\t}\n}\n\nINLINE void WRITEPORT32(offs_t port, UINT32 value)\n{\n\tif (port & 3)\n\t{\n\t\tWRITEPORT8(port, value & 0xff);\n\t\tWRITEPORT8(port + 1, (value >> 8) & 0xff);\n\t\tWRITEPORT8(port + 2, (value >> 16) & 0xff);\n\t\tWRITEPORT8(port + 3, (value >> 24) & 0xff);\n\t}\n\telse\n\t{\n\t\tcheck_ioperm(port, 0xf);\n\t\twrite_io_dword(port, value);\n\t}\n}\n\n/***********************************************************************************\n    MSR ACCESS\n***********************************************************************************/\n\n// Pentium MSR handling\nUINT64 pentium_msr_read(UINT32 offset,UINT8 *valid_msr)\n{\n\tswitch(offset)\n\t{\n\t// Machine Check Exception (TODO)\n\tcase 0x00:\n\t\t*valid_msr = 1;\n\t\tpopmessage(\"RDMSR: Reading P5_MC_ADDR\");\n\t\treturn 0;\n\tcase 0x01:\n\t\t*valid_msr = 1;\n\t\tpopmessage(\"RDMSR: Reading P5_MC_TYPE\");\n\t\treturn 0;\n\t// Time Stamp Counter\n\tcase 0x10:\n\t\t*valid_msr = 1;\n\t\tpopmessage(\"RDMSR: Reading TSC\");\n\t\treturn m_tsc;\n\t// Event Counters (TODO)\n\tcase 0x11:  // CESR\n\t\t*valid_msr = 1;\n\t\tpopmessage(\"RDMSR: Reading CESR\");\n\t\treturn 0;\n\tcase 0x12:  // CTR0\n\t\t*valid_msr = 1;\n\t\treturn m_perfctr[0];\n\tcase 0x13:  // CTR1\n\t\t*valid_msr = 1;\n\t\treturn m_perfctr[1];\n\tdefault:\n\t\tif(!(offset & ~0xf)) // 2-f are test registers\n\t\t{\n\t\t\t*valid_msr = 1;\n\t\t\tlogerror(\"RDMSR: Reading test MSR %x\", offset);\n\t\t\treturn 0;\n\t\t}\n\t\tlogerror(\"RDMSR: invalid P5 MSR read %08x at %08x\\n\",offset,m_pc-2);\n\t\t*valid_msr = 0;\n\t\treturn 0;\n\t}\n\treturn -1;\n}\n\nvoid pentium_msr_write(UINT32 offset, UINT64 data, UINT8 *valid_msr)\n{\n\tswitch(offset)\n\t{\n\t// Machine Check Exception (TODO)\n\tcase 0x00:\n\t\tpopmessage(\"WRMSR: Writing P5_MC_ADDR\");\n\t\t*valid_msr = 1;\n\t\tbreak;\n\tcase 0x01:\n\t\tpopmessage(\"WRMSR: Writing P5_MC_TYPE\");\n\t\t*valid_msr = 1;\n\t\tbreak;\n\t// Time Stamp Counter\n\tcase 0x10:\n\t\tm_tsc = data;\n\t\tpopmessage(\"WRMSR: Writing to TSC\");\n\t\t*valid_msr = 1;\n\t\tbreak;\n\t// Event Counters (TODO)\n\tcase 0x11:  // CESR\n\t\tpopmessage(\"WRMSR: Writing to CESR\");\n\t\t*valid_msr = 1;\n\t\tbreak;\n\tcase 0x12:  // CTR0\n\t\tm_perfctr[0] = data;\n\t\t*valid_msr = 1;\n\t\tbreak;\n\tcase 0x13:  // CTR1\n\t\tm_perfctr[1] = data;\n\t\t*valid_msr = 1;\n\t\tbreak;\n\tdefault:\n\t\tif(!(offset & ~0xf)) // 2-f are test registers\n\t\t{\n\t\t\t*valid_msr = 1;\n\t\t\tlogerror(\"WRMSR: Writing test MSR %x\", offset);\n\t\t\tbreak;\n\t\t}\n\t\tlogerror(\"WRMSR: invalid MSR write %08x (%08x%08x) at %08x\\n\",offset,(UINT32)(data >> 32),(UINT32)data,m_pc-2);\n\t\t*valid_msr = 0;\n\t\tbreak;\n\t}\n}\n\n// P6 (Pentium Pro, Pentium II, Pentium III) MSR handling\nUINT64 p6_msr_read(UINT32 offset,UINT8 *valid_msr)\n{\n\tswitch(offset)\n\t{\n\t// Machine Check Exception (TODO)\n\tcase 0x00:\n\t\t*valid_msr = 1;\n\t\tpopmessage(\"RDMSR: Reading P5_MC_ADDR\");\n\t\treturn 0;\n\tcase 0x01:\n\t\t*valid_msr = 1;\n\t\tpopmessage(\"RDMSR: Reading P5_MC_TYPE\");\n\t\treturn 0;\n\t// Time Stamp Counter\n\tcase 0x10:\n\t\t*valid_msr = 1;\n\t\tpopmessage(\"RDMSR: Reading TSC\");\n\t\treturn m_tsc;\n\t// Performance Counters (TODO)\n\tcase 0xc1:  // PerfCtr0\n\t\t*valid_msr = 1;\n\t\treturn m_perfctr[0];\n\tcase 0xc2:  // PerfCtr1\n\t\t*valid_msr = 1;\n\t\treturn m_perfctr[1];\n\tdefault:\n\t\tlogerror(\"RDMSR: unimplemented register called %08x at %08x\\n\",offset,m_pc-2);\n\t\t*valid_msr = 1;\n\t\treturn 0;\n\t}\n\treturn -1;\n}\n\nvoid p6_msr_write(UINT32 offset, UINT64 data, UINT8 *valid_msr)\n{\n\tswitch(offset)\n\t{\n\t// Time Stamp Counter\n\tcase 0x10:\n\t\tm_tsc = data;\n\t\tpopmessage(\"WRMSR: Writing to TSC\");\n\t\t*valid_msr = 1;\n\t\tbreak;\n\t// Performance Counters (TODO)\n\tcase 0xc1:  // PerfCtr0\n\t\tm_perfctr[0] = data;\n\t\t*valid_msr = 1;\n\t\tbreak;\n\tcase 0xc2:  // PerfCtr1\n\t\tm_perfctr[1] = data;\n\t\t*valid_msr = 1;\n\t\tbreak;\n\tdefault:\n\t\tlogerror(\"WRMSR: unimplemented register called %08x (%08x%08x) at %08x\\n\",offset,(UINT32)(data >> 32),(UINT32)data,m_pc-2);\n\t\t*valid_msr = 1;\n\t\tbreak;\n\t}\n}\n\n// PIV (Pentium 4+)\nUINT64 piv_msr_read(UINT32 offset,UINT8 *valid_msr)\n{\n\tswitch(offset)\n\t{\n\tdefault:\n\t\tlogerror(\"RDMSR: unimplemented register called %08x at %08x\\n\",offset,m_pc-2);\n\t\t*valid_msr = 1;\n\t\treturn 0;\n\t}\n\treturn -1;\n}\n\nvoid piv_msr_write(UINT32 offset, UINT64 data, UINT8 *valid_msr)\n{\n\tswitch(offset)\n\t{\n\tdefault:\n\t\tlogerror(\"WRMSR: unimplemented register called %08x (%08x%08x) at %08x\\n\",offset,(UINT32)(data >> 32),(UINT32)data,m_pc-2);\n\t\t*valid_msr = 1;\n\t\tbreak;\n\t}\n}\n\nINLINE UINT64 MSR_READ(UINT32 offset,UINT8 *valid_msr)\n{\n\tUINT64 res;\n\tUINT8 cpu_type = (m_cpu_version >> 8) & 0x0f;\n\n\t*valid_msr = 0;\n\n\tswitch(cpu_type)\n\t{\n\tcase 5:  // Pentium\n\t\tres = pentium_msr_read(offset,valid_msr);\n\t\tbreak;\n\tcase 6:  // Pentium Pro, Pentium II, Pentium III\n\t\tres = p6_msr_read(offset,valid_msr);\n\t\tbreak;\n\tcase 15:  // Pentium 4+\n\t\tres = piv_msr_read(offset,valid_msr);\n\t\tbreak;\n\tdefault:\n\t\tres = 0;\n\t\tbreak;\n\t}\n\n\treturn res;\n}\n\nINLINE void MSR_WRITE(UINT32 offset, UINT64 data, UINT8 *valid_msr)\n{\n\t*valid_msr = 0;\n\tUINT8 cpu_type = (m_cpu_version >> 8) & 0x0f;\n\n\tswitch(cpu_type)\n\t{\n\tcase 5:  // Pentium\n\t\tpentium_msr_write(offset,data,valid_msr);\n\t\tbreak;\n\tcase 6:  // Pentium Pro, Pentium II, Pentium III\n\t\tp6_msr_write(offset,data,valid_msr);\n\t\tbreak;\n\tcase 15:  // Pentium 4+\n\t\tpiv_msr_write(offset,data,valid_msr);\n\t\tbreak;\n\t}\n}\n\n#endif /* __I386_H__ */\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386/i486ops.c",
    "content": "// license:BSD-3-Clause\n// copyright-holders:Ville Linde, Barry Rodewald, Carl, Phil Bennett\n// Intel 486+ specific opcodes\n\nstatic void I486OP(cpuid)()             // Opcode 0x0F A2\n{\n\tif (m_cpuid_id0 == 0)\n\t{\n\t\t// this 486 doesn't support the CPUID instruction\n\t\tlogerror(\"CPUID not supported at %08x!\\n\", m_eip);\n\t\ti386_trap(6, 0, 0);\n\t}\n\telse\n\t{\n\t\tswitch (REG32(EAX))\n\t\t{\n\t\t\tcase 0:\n\t\t\t{\n\t\t\t\tREG32(EAX) = m_cpuid_max_input_value_eax;\n\t\t\t\tREG32(EBX) = m_cpuid_id0;\n\t\t\t\tREG32(ECX) = m_cpuid_id2;\n\t\t\t\tREG32(EDX) = m_cpuid_id1;\n\t\t\t\tCYCLES(CYCLES_CPUID);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 1:\n\t\t\t{\n\t\t\t\tREG32(EAX) = m_cpu_version;\n\t\t\t\tREG32(EDX) = m_feature_flags;\n\t\t\t\tCYCLES(CYCLES_CPUID_EAX1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\nstatic void I486OP(invd)()              // Opcode 0x0f 08\n{\n\t// Nothing to do ?\n\tCYCLES(CYCLES_INVD);\n}\n\nstatic void I486OP(wbinvd)()            // Opcode 0x0f 09\n{\n\t// Nothing to do ?\n}\n\nstatic void I486OP(cmpxchg_rm8_r8)()    // Opcode 0x0f b0\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT8 dst = LOAD_RM8(modrm);\n\t\tUINT8 src = LOAD_REG8(modrm);\n\n\t\tif( REG8(AL) == dst ) {\n\t\t\tSTORE_RM8(modrm, src);\n\t\t\tm_ZF = 1;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_REG_T);\n\t\t} else {\n\t\t\tREG8(AL) = dst;\n\t\t\tm_ZF = 0;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_REG_F);\n\t\t}\n\t} else {\n\t\t// TODO: Check write if needed\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tUINT8 dst = READ8(ea);\n\t\tUINT8 src = LOAD_REG8(modrm);\n\n\t\tif( REG8(AL) == dst ) {\n\t\t\tWRITE8(ea, src);\n\t\t\tm_ZF = 1;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_MEM_T);\n\t\t} else {\n\t\t\tREG8(AL) = dst;\n\t\t\tm_ZF = 0;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_MEM_F);\n\t\t}\n\t}\n}\n\nstatic void I486OP(cmpxchg_rm16_r16)()  // Opcode 0x0f b1\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\tUINT16 src = LOAD_REG16(modrm);\n\n\t\tif( REG16(AX) == dst ) {\n\t\t\tSTORE_RM16(modrm, src);\n\t\t\tm_ZF = 1;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_REG_T);\n\t\t} else {\n\t\t\tREG16(AX) = dst;\n\t\t\tm_ZF = 0;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_REG_F);\n\t\t}\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tUINT16 dst = READ16(ea);\n\t\tUINT16 src = LOAD_REG16(modrm);\n\n\t\tif( REG16(AX) == dst ) {\n\t\t\tWRITE16(ea, src);\n\t\t\tm_ZF = 1;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_MEM_T);\n\t\t} else {\n\t\t\tREG16(AX) = dst;\n\t\t\tm_ZF = 0;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_MEM_F);\n\t\t}\n\t}\n}\n\nstatic void I486OP(cmpxchg_rm32_r32)()  // Opcode 0x0f b1\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\tUINT32 src = LOAD_REG32(modrm);\n\n\t\tif( REG32(EAX) == dst ) {\n\t\t\tSTORE_RM32(modrm, src);\n\t\t\tm_ZF = 1;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_REG_T);\n\t\t} else {\n\t\t\tREG32(EAX) = dst;\n\t\t\tm_ZF = 0;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_REG_F);\n\t\t}\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tUINT32 dst = READ32(ea);\n\t\tUINT32 src = LOAD_REG32(modrm);\n\n\t\tif( REG32(EAX) == dst ) {\n\t\t\tWRITE32(ea, src);\n\t\t\tm_ZF = 1;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_MEM_T);\n\t\t} else {\n\t\t\tREG32(EAX) = dst;\n\t\t\tm_ZF = 0;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_MEM_F);\n\t\t}\n\t}\n}\n\nstatic void I486OP(xadd_rm8_r8)()   // Opcode 0x0f c0\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT8 dst = LOAD_RM8(modrm);\n\t\tUINT8 src = LOAD_REG8(modrm);\n\t\tSTORE_REG8(modrm, dst);\n\t\tSTORE_RM8(modrm, dst + src);\n\t\tCYCLES(CYCLES_XADD_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT8 dst = READ8(ea);\n\t\tUINT8 src = LOAD_REG8(modrm);\n\t\tWRITE8(ea, dst + src);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_XADD_REG_MEM);\n\t}\n}\n\nstatic void I486OP(xadd_rm16_r16)() // Opcode 0x0f c1\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\tUINT16 src = LOAD_REG16(modrm);\n\t\tSTORE_REG16(modrm, dst);\n\t\tSTORE_RM16(modrm, dst + src);\n\t\tCYCLES(CYCLES_XADD_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT16 dst = READ16(ea);\n\t\tUINT16 src = LOAD_REG16(modrm);\n\t\tWRITE16(ea, dst + src);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_XADD_REG_MEM);\n\t}\n}\n\nstatic void I486OP(xadd_rm32_r32)() // Opcode 0x0f c1\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\tUINT32 src = LOAD_REG32(modrm);\n\t\tSTORE_REG32(modrm, dst);\n\t\tSTORE_RM32(modrm, dst + src);\n\t\tCYCLES(CYCLES_XADD_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT32 dst = READ32(ea);\n\t\tUINT32 src = LOAD_REG32(modrm);\n\t\tWRITE32(ea, dst + src);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_XADD_REG_MEM);\n\t}\n}\n\nstatic void I486OP(group0F01_16)()      // Opcode 0x0f 01\n{\n\tUINT8 modrm = FETCH();\n\tUINT16 address;\n\tUINT32 ea;\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:         /* SGDT */\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tea = i386_translate( CS, address, 1 );\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t}\n\t\t\t\tWRITE16(ea, m_gdtr.limit);\n\t\t\t\tWRITE32(ea + 2, m_gdtr.base & 0xffffff);\n\t\t\t\tCYCLES(CYCLES_SGDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 1:         /* SIDT */\n\t\t\t{\n\t\t\t\tif (modrm >= 0xc0)\n\t\t\t\t{\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tea = i386_translate( CS, address, 1 );\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t}\n\t\t\t\tWRITE16(ea, m_idtr.limit);\n\t\t\t\tWRITE32(ea + 2, m_idtr.base & 0xffffff);\n\t\t\t\tCYCLES(CYCLES_SIDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 2:         /* LGDT */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tea = i386_translate( CS, address, 0 );\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t}\n\t\t\t\tm_gdtr.limit = READ16(ea);\n\t\t\t\tm_gdtr.base = READ32(ea + 2) & 0xffffff;\n\t\t\t\tCYCLES(CYCLES_LGDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 3:         /* LIDT */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tea = i386_translate( CS, address, 0 );\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t}\n\t\t\t\tm_idtr.limit = READ16(ea);\n\t\t\t\tm_idtr.base = READ32(ea + 2) & 0xffffff;\n\t\t\t\tCYCLES(CYCLES_LIDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 4:         /* SMSW */\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tSTORE_RM16(modrm, m_cr[0]);\n\t\t\t\t\tCYCLES(CYCLES_SMSW_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t\tWRITE16(ea, m_cr[0]);\n\t\t\t\t\tCYCLES(CYCLES_SMSW_MEM);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 6:         /* LMSW */\n\t\t\t{\n\t\t\t\tUINT16 b;\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tb = LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_LMSW_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t\tCYCLES(CYCLES_LMSW_MEM);\n\t\t\t\t\tb = READ16(ea);\n\t\t\t\t}\n\t\t\t\tif(PROTECTED_MODE)\n\t\t\t\t\tb |= 0x0001;  // cannot return to real mode using this instruction.\n\t\t\t\tm_cr[0] &= ~0x0000000f;\n\t\t\t\tm_cr[0] |= b & 0x0000000f;\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 7:         /* INVLPG */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif(modrm >= 0xc0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"i486: invlpg with modrm %02X\\n\", modrm);\n\t\t\t\t\tFAULT(FAULT_UD,0)\n\t\t\t\t}\n\t\t\t\tea = GetEA(modrm,-1);\n\t\t\t\tCYCLES(25); // TODO: add to cycles.h\n\t\t\t\tvtlb_flush_address(m_vtlb, ea);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tdefault:\n\t\t\treport_invalid_modrm(\"group0F01_16\", modrm);\n\t\t\tbreak;\n\t}\n}\n\nstatic void I486OP(group0F01_32)()      // Opcode 0x0f 01\n{\n\tUINT8 modrm = FETCH();\n\tUINT32 address, ea;\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:         /* SGDT */\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tea = i386_translate( CS, address, 1 );\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t}\n\t\t\t\tWRITE16(ea, m_gdtr.limit);\n\t\t\t\tWRITE32(ea + 2, m_gdtr.base);\n\t\t\t\tCYCLES(CYCLES_SGDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 1:         /* SIDT */\n\t\t\t{\n\t\t\t\tif (modrm >= 0xc0)\n\t\t\t\t{\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tea = i386_translate( CS, address, 1 );\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t}\n\t\t\t\tWRITE16(ea, m_idtr.limit);\n\t\t\t\tWRITE32(ea + 2, m_idtr.base);\n\t\t\t\tCYCLES(CYCLES_SIDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 2:         /* LGDT */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tea = i386_translate( CS, address, 0 );\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t}\n\t\t\t\tm_gdtr.limit = READ16(ea);\n\t\t\t\tm_gdtr.base = READ32(ea + 2);\n\t\t\t\tCYCLES(CYCLES_LGDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 3:         /* LIDT */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tea = i386_translate( CS, address, 0 );\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t}\n\t\t\t\tm_idtr.limit = READ16(ea);\n\t\t\t\tm_idtr.base = READ32(ea + 2);\n\t\t\t\tCYCLES(CYCLES_LIDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 4:         /* SMSW */\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tSTORE_RM32(modrm, m_cr[0] & 0xffff);\n\t\t\t\t\tCYCLES(CYCLES_SMSW_REG);\n\t\t\t\t} else {\n\t\t\t\t\t/* always 16-bit memory operand */\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t\tWRITE16(ea, m_cr[0]);\n\t\t\t\t\tCYCLES(CYCLES_SMSW_MEM);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 6:         /* LMSW */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tUINT16 b;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tb = LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_LMSW_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t\tCYCLES(CYCLES_LMSW_MEM);\n\t\t\t\tb = READ16(ea);\n\t\t\t\t}\n\t\t\t\tif(PROTECTED_MODE)\n\t\t\t\t\tb |= 0x0001;  // cannot return to real mode using this instruction.\n\t\t\t\tm_cr[0] &= ~0x0000000f;\n\t\t\t\tm_cr[0] |= b & 0x0000000f;\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 7:         /* INVLPG */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif(modrm >= 0xc0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"i486: invlpg with modrm %02X\\n\", modrm);\n\t\t\t\t\tFAULT(FAULT_UD,0)\n\t\t\t\t}\n\t\t\t\tea = GetEA(modrm,-1);\n\t\t\t\tCYCLES(25); // TODO: add to cycles.h\n\t\t\t\tvtlb_flush_address(m_vtlb, ea);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tdefault:\n\t\t\treport_invalid_modrm(\"group0F01_32\", modrm);\n\t\t\tbreak;\n\t}\n}\n\nstatic void I486OP(bswap_eax)()     // Opcode 0x0f 38\n{\n\tREG32(EAX) = SWITCH_ENDIAN_32(REG32(EAX));\n\tCYCLES(1);     // TODO\n}\n\nstatic void I486OP(bswap_ecx)()     // Opcode 0x0f 39\n{\n\tREG32(ECX) = SWITCH_ENDIAN_32(REG32(ECX));\n\tCYCLES(1);     // TODO\n}\n\nstatic void I486OP(bswap_edx)()     // Opcode 0x0f 3A\n{\n\tREG32(EDX) = SWITCH_ENDIAN_32(REG32(EDX));\n\tCYCLES(1);     // TODO\n}\n\nstatic void I486OP(bswap_ebx)()     // Opcode 0x0f 3B\n{\n\tREG32(EBX) = SWITCH_ENDIAN_32(REG32(EBX));\n\tCYCLES(1);     // TODO\n}\n\nstatic void I486OP(bswap_esp)()     // Opcode 0x0f 3C\n{\n\tREG32(ESP) = SWITCH_ENDIAN_32(REG32(ESP));\n\tCYCLES(1);     // TODO\n}\n\nstatic void I486OP(bswap_ebp)()     // Opcode 0x0f 3D\n{\n\tREG32(EBP) = SWITCH_ENDIAN_32(REG32(EBP));\n\tCYCLES(1);     // TODO\n}\n\nstatic void I486OP(bswap_esi)()     // Opcode 0x0f 3E\n{\n\tREG32(ESI) = SWITCH_ENDIAN_32(REG32(ESI));\n\tCYCLES(1);     // TODO\n}\n\nstatic void I486OP(bswap_edi)()     // Opcode 0x0f 3F\n{\n\tREG32(EDI) = SWITCH_ENDIAN_32(REG32(EDI));\n\tCYCLES(1);     // TODO\n}\n\nstatic void I486OP(mov_cr_r32)()        // Opcode 0x0f 22\n{\n\tif(PROTECTED_MODE && m_CPL)\n\t\tFAULT(FAULT_GP, 0);\n\tUINT8 modrm = FETCH();\n\tUINT8 cr = (modrm >> 3) & 0x7;\n\tUINT32 oldcr = m_cr[cr];\n\tUINT32 data = LOAD_RM32(modrm);\n\tswitch(cr)\n\t{\n\t\tcase 0:\n#ifndef PAGING\n\t\t\tif(data & 0x80000000)\n\t\t\t\tfatalerror(\"paging disabled\\n\");\n#endif\n\t\t\tCYCLES(CYCLES_MOV_REG_CR0);\n\t\t\tif((oldcr ^ m_cr[cr]) & 0x80010000)\n\t\t\t\tvtlb_flush_dynamic(m_vtlb);\n\t\t\tbreak;\n\t\tcase 2: CYCLES(CYCLES_MOV_REG_CR2); break;\n\t\tcase 3:\n\t\t\tCYCLES(CYCLES_MOV_REG_CR3);\n\t\t\tvtlb_flush_dynamic(m_vtlb);\n\t\t\tbreak;\n\t\tcase 4: CYCLES(1); break; // TODO\n\t\tdefault:\n\t\t\tlogerror(\"i386: mov_cr_r32 CR%d!\\n\", cr);\n\t\t\treturn;\n\t}\n\tm_cr[cr] = data;\n}\n\nvoid I486OP(wait)()\n{\n\tx87_mf_fault();\n}\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386/pentops.c",
    "content": "// license:BSD-3-Clause\n// copyright-holders:Ville Linde, Barry Rodewald, Carl, Phil Bennett\n// Pentium+ specific opcodes\n\nextern flag float32_is_nan( float32 a ); // since its not defined in softfloat.h\nextern flag float64_is_nan( float64 a ); // since its not defined in softfloat.h\n\nINLINE void MMXPROLOG()\n{\n\t//m_x87_sw &= ~(X87_SW_TOP_MASK << X87_SW_TOP_SHIFT); // top = 0\n\tm_x87_tw = 0; // tag word = 0\n}\n\nINLINE void READMMX(UINT32 ea,MMX_REG &r)\n{\n\tr.q=READ64(ea);\n}\n\nINLINE void WRITEMMX(UINT32 ea,MMX_REG &r)\n{\n\tWRITE64(ea, r.q);\n}\n\nINLINE void READXMM(UINT32 ea,XMM_REG &r)\n{\n\tr.q[0]=READ64(ea);\n\tr.q[1]=READ64(ea+8);\n}\n\nINLINE void WRITEXMM(UINT32 ea,XMM_REG &r)\n{\n\tWRITE64(ea, r.q[0]);\n\tWRITE64(ea+8, r.q[1]);\n}\n\nINLINE void READXMM_LO64(UINT32 ea,XMM_REG &r)\n{\n\tr.q[0]=READ64(ea);\n}\n\nINLINE void WRITEXMM_LO64(UINT32 ea,XMM_REG &r)\n{\n\tWRITE64(ea, r.q[0]);\n}\n\nINLINE void READXMM_HI64(UINT32 ea,XMM_REG &r)\n{\n\tr.q[1]=READ64(ea);\n}\n\nINLINE void WRITEXMM_HI64(UINT32 ea,XMM_REG &r)\n{\n\tWRITE64(ea, r.q[1]);\n}\n\nstatic void PENTIUMOP(rdmsr)()          // Opcode 0x0f 32\n{\n\tUINT64 data;\n\tUINT8 valid_msr = 0;\n\n\tdata = MSR_READ(REG32(ECX),&valid_msr);\n\tREG32(EDX) = data >> 32;\n\tREG32(EAX) = data & 0xffffffff;\n\n\tif(m_CPL != 0 || valid_msr == 0) // if current privilege level isn't 0 or the register isn't recognized ...\n\t\tFAULT(FAULT_GP,0) // ... throw a general exception fault\n\n\tCYCLES(CYCLES_RDMSR);\n}\n\nstatic void PENTIUMOP(wrmsr)()          // Opcode 0x0f 30\n{\n\tUINT64 data;\n\tUINT8 valid_msr = 0;\n\n\tdata = (UINT64)REG32(EAX);\n\tdata |= (UINT64)(REG32(EDX)) << 32;\n\n\tMSR_WRITE(REG32(ECX),data,&valid_msr);\n\n\tif(m_CPL != 0 || valid_msr == 0) // if current privilege level isn't 0 or the register isn't recognized\n\t\tFAULT(FAULT_GP,0) // ... throw a general exception fault\n\n\tCYCLES(1);     // TODO: correct cycle count (~30-45)\n}\n\nstatic void PENTIUMOP(rdtsc)()          // Opcode 0x0f 31\n{\n\tUINT64 ts = m_tsc + (m_base_cycles - m_cycles);\n\tREG32(EAX) = (UINT32)(ts);\n\tREG32(EDX) = (UINT32)(ts >> 32);\n\n\tCYCLES(CYCLES_RDTSC);\n}\n\nstatic void PENTIUMOP(ud2)()    // Opcode 0x0f 0b\n{\n\ti386_trap(6, 0, 0);\n}\n\nstatic void PENTIUMOP(rsm)()\n{\n\tUINT32 smram_state = m_smbase + 0xfe00;\n\tif(!m_smm)\n\t{\n\t\tlogerror(\"i386: Invalid RSM outside SMM at %08X\\n\", m_pc - 1);\n\t\ti386_trap(6, 0, 0);\n\t\treturn;\n\t}\n\n\t// load state, no sanity checks anywhere\n\tm_smbase = READ32(smram_state+SMRAM_SMBASE);\n\tm_cr[4] = READ32(smram_state+SMRAM_IP5_CR4);\n\tm_sreg[ES].limit = READ32(smram_state+SMRAM_IP5_ESLIM);\n\tm_sreg[ES].base = READ32(smram_state+SMRAM_IP5_ESBASE);\n\tm_sreg[ES].flags = READ32(smram_state+SMRAM_IP5_ESACC);\n\tm_sreg[CS].limit = READ32(smram_state+SMRAM_IP5_CSLIM);\n\tm_sreg[CS].base = READ32(smram_state+SMRAM_IP5_CSBASE);\n\tm_sreg[CS].flags = READ32(smram_state+SMRAM_IP5_CSACC);\n\tm_sreg[SS].limit = READ32(smram_state+SMRAM_IP5_SSLIM);\n\tm_sreg[SS].base = READ32(smram_state+SMRAM_IP5_SSBASE);\n\tm_sreg[SS].flags = READ32(smram_state+SMRAM_IP5_SSACC);\n\tm_sreg[DS].limit = READ32(smram_state+SMRAM_IP5_DSLIM);\n\tm_sreg[DS].base = READ32(smram_state+SMRAM_IP5_DSBASE);\n\tm_sreg[DS].flags = READ32(smram_state+SMRAM_IP5_DSACC);\n\tm_sreg[FS].limit = READ32(smram_state+SMRAM_IP5_FSLIM);\n\tm_sreg[FS].base = READ32(smram_state+SMRAM_IP5_FSBASE);\n\tm_sreg[FS].flags = READ32(smram_state+SMRAM_IP5_FSACC);\n\tm_sreg[GS].limit = READ32(smram_state+SMRAM_IP5_GSLIM);\n\tm_sreg[GS].base = READ32(smram_state+SMRAM_IP5_GSBASE);\n\tm_sreg[GS].flags = READ32(smram_state+SMRAM_IP5_GSACC);\n\tm_ldtr.flags = READ32(smram_state+SMRAM_IP5_LDTACC);\n\tm_ldtr.limit = READ32(smram_state+SMRAM_IP5_LDTLIM);\n\tm_ldtr.base = READ32(smram_state+SMRAM_IP5_LDTBASE);\n\tm_gdtr.limit = READ32(smram_state+SMRAM_IP5_GDTLIM);\n\tm_gdtr.base = READ32(smram_state+SMRAM_IP5_GDTBASE);\n\tm_idtr.limit = READ32(smram_state+SMRAM_IP5_IDTLIM);\n\tm_idtr.base = READ32(smram_state+SMRAM_IP5_IDTBASE);\n\tm_task.limit = READ32(smram_state+SMRAM_IP5_TRLIM);\n\tm_task.base = READ32(smram_state+SMRAM_IP5_TRBASE);\n\tm_task.flags = READ32(smram_state+SMRAM_IP5_TRACC);\n\n\tm_sreg[ES].selector = READ32(smram_state+SMRAM_ES);\n\tm_sreg[CS].selector = READ32(smram_state+SMRAM_CS);\n\tm_sreg[SS].selector = READ32(smram_state+SMRAM_SS);\n\tm_sreg[DS].selector = READ32(smram_state+SMRAM_DS);\n\tm_sreg[FS].selector = READ32(smram_state+SMRAM_FS);\n\tm_sreg[GS].selector = READ32(smram_state+SMRAM_GS);\n\tm_ldtr.segment = READ32(smram_state+SMRAM_LDTR);\n\tm_task.segment = READ32(smram_state+SMRAM_TR);\n\n\tm_dr[7] = READ32(smram_state+SMRAM_DR7);\n\tm_dr[6] = READ32(smram_state+SMRAM_DR6);\n\tREG32(EAX) = READ32(smram_state+SMRAM_EAX);\n\tREG32(ECX) = READ32(smram_state+SMRAM_ECX);\n\tREG32(EDX) = READ32(smram_state+SMRAM_EDX);\n\tREG32(EBX) = READ32(smram_state+SMRAM_EBX);\n\tREG32(ESP) = READ32(smram_state+SMRAM_ESP);\n\tREG32(EBP) = READ32(smram_state+SMRAM_EBP);\n\tREG32(ESI) = READ32(smram_state+SMRAM_ESI);\n\tREG32(EDI) = READ32(smram_state+SMRAM_EDI);\n\tm_eip = READ32(smram_state+SMRAM_EIP);\n\tm_eflags = READ32(smram_state+SMRAM_EAX);\n\tm_cr[3] = READ32(smram_state+SMRAM_CR3);\n\tm_cr[0] = READ32(smram_state+SMRAM_CR0);\n\n\tm_CPL = (m_sreg[SS].flags >> 13) & 3; // cpl == dpl of ss\n\n\tfor(int i = 0; i < GS; i++)\n\t{\n\t\tif(PROTECTED_MODE && !V8086_MODE)\n\t\t{\n\t\t\tm_sreg[i].valid = m_sreg[i].selector ? true : false;\n\t\t\tm_sreg[i].d = (m_sreg[i].flags & 0x4000) ? 1 : 0;\n\t\t}\n\t\telse\n\t\t\tm_sreg[i].valid = true;\n\t}\n\n//\tif(!m_smiact.isnull())\n//\t\tm_smiact(false);\n\tm_smm = false;\n\n\tCHANGE_PC(m_eip);\n\tm_nmi_masked = false;\n\tif(m_smi_latched)\n\t{\n\t\tpentium_smi();\n\t\treturn;\n\t}\n\tif(m_nmi_latched)\n\t{\n\t\tm_nmi_latched = false;\n\t\ti386_trap(2, 1, 0);\n\t}\n}\n\nstatic void PENTIUMOP(prefetch_m8)()    // Opcode 0x0f 18\n{\n\tUINT8 modrm = FETCH();\n\tUINT32 ea = GetEA(modrm,0);\n\tCYCLES(1+(ea & 1)); // TODO: correct cycle count\n}\n\nstatic void PENTIUMOP(cmovo_r16_rm16)()    // Opcode 0x0f 40\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_OF == 1)\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_OF == 1)\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovo_r32_rm32)()    // Opcode 0x0f 40\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_OF == 1)\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_OF == 1)\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovno_r16_rm16)()    // Opcode 0x0f 41\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_OF == 0)\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_OF == 0)\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovno_r32_rm32)()    // Opcode 0x0f 41\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_OF == 0)\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_OF == 0)\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovb_r16_rm16)()    // Opcode 0x0f 42\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_CF == 1)\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_CF == 1)\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovb_r32_rm32)()    // Opcode 0x0f 42\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_CF == 1)\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_CF == 1)\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovae_r16_rm16)()    // Opcode 0x0f 43\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_CF == 0)\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_CF == 0)\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovae_r32_rm32)()    // Opcode 0x0f 43\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_CF == 0)\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_CF == 0)\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmove_r16_rm16)()    // Opcode 0x0f 44\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_ZF == 1)\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_ZF == 1)\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmove_r32_rm32)()    // Opcode 0x0f 44\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_ZF == 1)\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_ZF == 1)\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovne_r16_rm16)()    // Opcode 0x0f 45\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_ZF == 0)\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_ZF == 0)\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovne_r32_rm32)()    // Opcode 0x0f 45\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_ZF == 0)\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_ZF == 0)\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovbe_r16_rm16)()    // Opcode 0x0f 46\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif ((m_CF == 1) || (m_ZF == 1))\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif ((m_CF == 1) || (m_ZF == 1))\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovbe_r32_rm32)()    // Opcode 0x0f 46\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif ((m_CF == 1) || (m_ZF == 1))\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif ((m_CF == 1) || (m_ZF == 1))\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmova_r16_rm16)()    // Opcode 0x0f 47\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif ((m_CF == 0) && (m_ZF == 0))\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif ((m_CF == 0) && (m_ZF == 0))\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmova_r32_rm32)()    // Opcode 0x0f 47\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif ((m_CF == 0) && (m_ZF == 0))\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif ((m_CF == 0) && (m_ZF == 0))\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovs_r16_rm16)()    // Opcode 0x0f 48\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_SF == 1)\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_SF == 1)\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovs_r32_rm32)()    // Opcode 0x0f 48\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_SF == 1)\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_SF == 1)\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovns_r16_rm16)()    // Opcode 0x0f 49\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_SF == 0)\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_SF == 0)\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovns_r32_rm32)()    // Opcode 0x0f 49\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_SF == 0)\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_SF == 0)\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovp_r16_rm16)()    // Opcode 0x0f 4a\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_PF == 1)\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_PF == 1)\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovp_r32_rm32)()    // Opcode 0x0f 4a\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_PF == 1)\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_PF == 1)\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovnp_r16_rm16)()    // Opcode 0x0f 4b\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_PF == 0)\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_PF == 0)\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovnp_r32_rm32)()    // Opcode 0x0f 4b\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_PF == 0)\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_PF == 0)\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovl_r16_rm16)()    // Opcode 0x0f 4c\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_SF != m_OF)\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_SF != m_OF)\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovl_r32_rm32)()    // Opcode 0x0f 4c\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_SF != m_OF)\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_SF != m_OF)\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovge_r16_rm16)()    // Opcode 0x0f 4d\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_SF == m_OF)\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_SF == m_OF)\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovge_r32_rm32)()    // Opcode 0x0f 4d\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_SF == m_OF)\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_SF == m_OF)\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovle_r16_rm16)()    // Opcode 0x0f 4e\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif ((m_ZF == 1) || (m_SF != m_OF))\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif ((m_ZF == 1) || (m_SF != m_OF))\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovle_r32_rm32)()    // Opcode 0x0f 4e\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif ((m_ZF == 1) || (m_SF != m_OF))\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif ((m_ZF == 1) || (m_SF != m_OF))\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovg_r16_rm16)()    // Opcode 0x0f 4f\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif ((m_ZF == 0) && (m_SF == m_OF))\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif ((m_ZF == 0) && (m_SF == m_OF))\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovg_r32_rm32)()    // Opcode 0x0f 4f\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif ((m_ZF == 0) && (m_SF == m_OF))\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif ((m_ZF == 0) && (m_SF == m_OF))\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(movnti_m16_r16)() // Opcode 0f c3\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\t// unsupported by cpu\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t} else {\n\t\t// since cache is not implemented\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITE16(ea,LOAD_RM16(modrm));\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(movnti_m32_r32)() // Opcode 0f c3\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\t// unsupported by cpu\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t} else {\n\t\t// since cache is not implemented\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITE32(ea,LOAD_RM32(modrm));\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t}\n}\n\nstatic void I386OP(cyrix_special)()     // Opcode 0x0f 3a-3d\n{\n/*\n0f 3a       BB0_RESET (set BB0 pointer = base)\n0f 3b       BB1_RESET (set BB1 pointer = base)\n0f 3c       CPU_WRITE (write special CPU memory-mapped register, [ebx] = eax)\n0f 3d       CPU_READ (read special CPU memory-mapped register, eax, = [ebx])\n*/\n\n\tCYCLES(1);\n}\n\nstatic void I386OP(cyrix_unknown)()     // Opcode 0x0f 74\n{\n\tlogerror(\"Unemulated 0x0f 0x74 opcode called\\n\");\n\n\tCYCLES(1);\n}\n\nstatic void PENTIUMOP(cmpxchg8b_m64)()  // Opcode 0x0f c7\n{\n\tUINT8 modm = FETCH();\n\tif( modm >= 0xc0 ) {\n\t\treport_invalid_modrm(\"cmpxchg8b_m64\", modm);\n\t} else {\n\t\tUINT32 ea = GetEA(modm, 0);\n\t\tUINT64 value = READ64(ea);\n\t\tUINT64 edx_eax = (((UINT64) REG32(EDX)) << 32) | REG32(EAX);\n\t\tUINT64 ecx_ebx = (((UINT64) REG32(ECX)) << 32) | REG32(EBX);\n\n\t\tif( value == edx_eax ) {\n\t\t\tWRITE64(ea, ecx_ebx);\n\t\t\tm_ZF = 1;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_MEM_T);\n\t\t} else {\n\t\t\tREG32(EDX) = (UINT32) (value >> 32);\n\t\t\tREG32(EAX) = (UINT32) (value >>  0);\n\t\t\tm_ZF = 0;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_MEM_F);\n\t\t}\n\t}\n}\n\nstatic void PENTIUMOP(movntq_m64_r64)() // Opcode 0f e7\n{\n\t//MMXPROLOG(); // TODO: check if needed\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tCYCLES(1);     // unsupported\n\t} else {\n\t\t// since cache is not implemented\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITEMMX(ea, MMX((modrm >> 3) & 0x7));\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(maskmovq_r64_r64)()  // Opcode 0f f7\n{\n\tint s,m,n;\n\tUINT8 modm = FETCH();\n\tUINT32 ea = GetEA(7, 0); // ds:di/edi/rdi register\n\tMMXPROLOG();\n\ts=(modm >> 3) & 7;\n\tm=modm & 7;\n\tfor (n=0;n <= 7;n++)\n\t\tif (MMX(m).b[n] & 127)\n\t\t\tWRITE8(ea+n, MMX(s).b[n]);\n}\n\nstatic void SSEOP(maskmovdqu_r128_r128)()  // Opcode 66 0f f7\n{\n\tint s,m,n;\n\tUINT8 modm = FETCH();\n\tUINT32 ea = GetEA(7, 0); // ds:di/edi/rdi register\n\ts=(modm >> 3) & 7;\n\tm=modm & 7;\n\tfor (n=0;n < 16;n++)\n\t\tif (XMM(m).b[n] & 127)\n\t\t\tWRITE8(ea+n, XMM(s).b[n]);\n}\n\nstatic void PENTIUMOP(popcnt_r16_rm16)()    // Opcode f3 0f b8\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\tint n,count;\n\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM16(modrm);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ16(ea);\n\t}\n\tcount=0;\n\tfor (n=0;n < 16;n++) {\n\t\tcount=count+(src & 1);\n\t\tsrc=src >> 1;\n\t}\n\tSTORE_REG16(modrm, count);\n\tCYCLES(1); // TODO: correct cycle count\n}\n\nstatic void PENTIUMOP(popcnt_r32_rm32)()    // Opcode f3 0f b8\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\tint n,count;\n\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM32(modrm);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ32(ea);\n\t}\n\tcount=0;\n\tfor (n=0;n < 32;n++) {\n\t\tcount=count+(src & 1);\n\t\tsrc=src >> 1;\n\t}\n\tSTORE_REG32(modrm, count);\n\tCYCLES(1); // TODO: correct cycle count\n}\n\nstatic void PENTIUMOP(tzcnt_r16_rm16)()\n{\n\t// for CPUs that don't support TZCNT, fall back to BSF\n\ti386_bsf_r16_rm16();\n\t// TODO: actually implement TZCNT\n}\n\nstatic void PENTIUMOP(tzcnt_r32_rm32)()\n{\n\t// for CPUs that don't support TZCNT, fall back to BSF\n\ti386_bsf_r32_rm32();\n\t// TODO: actually implement TZCNT\n}\n\nINLINE INT8 SaturatedSignedWordToSignedByte(INT16 word)\n{\n\tif (word > 127)\n\t\treturn 127;\n\tif (word < -128)\n\t\treturn -128;\n\treturn (INT8)word;\n}\n\nINLINE UINT8 SaturatedSignedWordToUnsignedByte(INT16 word)\n{\n\tif (word > 255)\n\t\treturn 255;\n\tif (word < 0)\n\t\treturn 0;\n\treturn (UINT8)word;\n}\n\nINLINE INT16 SaturatedSignedDwordToSignedWord(INT32 dword)\n{\n\tif (dword > 32767)\n\t\treturn 32767;\n\tif (dword < -32768)\n\t\treturn -32768;\n\treturn (INT16)dword;\n}\n\nINLINE UINT16 SaturatedSignedDwordToUnsignedWord(INT32 dword)\n{\n\tif (dword > 65535)\n\t\treturn 65535;\n\tif (dword < 0)\n\t\treturn 0;\n\treturn (UINT16)dword;\n}\n\nstatic void MMXOP(group_0f71)()  // Opcode 0f 71\n{\n\tUINT8 modm = FETCH();\n\tUINT8 imm8 = FETCH();\n\tMMXPROLOG();\n\tif( modm >= 0xc0 ) {\n\t\tswitch ( (modm & 0x38) >> 3 )\n\t\t{\n\t\t\tcase 2: // psrlw\n\t\t\t\tMMX(modm & 7).w[0]=MMX(modm & 7).w[0] >> imm8;\n\t\t\t\tMMX(modm & 7).w[1]=MMX(modm & 7).w[1] >> imm8;\n\t\t\t\tMMX(modm & 7).w[2]=MMX(modm & 7).w[2] >> imm8;\n\t\t\t\tMMX(modm & 7).w[3]=MMX(modm & 7).w[3] >> imm8;\n\t\t\t\tbreak;\n\t\t\tcase 4: // psraw\n\t\t\t\tMMX(modm & 7).s[0]=MMX(modm & 7).s[0] >> imm8;\n\t\t\t\tMMX(modm & 7).s[1]=MMX(modm & 7).s[1] >> imm8;\n\t\t\t\tMMX(modm & 7).s[2]=MMX(modm & 7).s[2] >> imm8;\n\t\t\t\tMMX(modm & 7).s[3]=MMX(modm & 7).s[3] >> imm8;\n\t\t\t\tbreak;\n\t\t\tcase 6: // psllw\n\t\t\t\tMMX(modm & 7).w[0]=MMX(modm & 7).w[0] << imm8;\n\t\t\t\tMMX(modm & 7).w[1]=MMX(modm & 7).w[1] << imm8;\n\t\t\t\tMMX(modm & 7).w[2]=MMX(modm & 7).w[2] << imm8;\n\t\t\t\tMMX(modm & 7).w[3]=MMX(modm & 7).w[3] << imm8;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treport_invalid_modrm(\"mmx_group0f71\", modm);\n\t\t}\n\t}\n}\n\nstatic void SSEOP(group_660f71)()  // Opcode 66 0f 71\n{\n\tUINT8 modm = FETCH();\n\tUINT8 imm8 = FETCH();\n\tif (modm >= 0xc0) {\n\t\tswitch ((modm & 0x38) >> 3)\n\t\t{\n\t\t\tcase 2: // psrlw\n\t\t\t\tfor (int n = 0; n < 8;n++)\n\t\t\t\t\tXMM(modm & 7).w[n] = XMM(modm & 7).w[n] >> imm8;\n\t\t\t\tbreak;\n\t\t\tcase 4: // psraw\n\t\t\t\tfor (int n = 0; n < 8;n++)\n\t\t\t\t\tXMM(modm & 7).s[n] = XMM(modm & 7).s[n] >> imm8;\n\t\t\t\tbreak;\n\t\t\tcase 6: // psllw\n\t\t\t\tfor (int n = 0; n < 8;n++)\n\t\t\t\t\tXMM(modm & 7).w[n] = XMM(modm & 7).w[n] << imm8;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treport_invalid_modrm(\"mmx_group660f71\", modm);\n\t\t}\n\t}\n}\n\nstatic void MMXOP(group_0f72)()  // Opcode 0f 72\n{\n\tUINT8 modm = FETCH();\n\tUINT8 imm8 = FETCH();\n\tMMXPROLOG();\n\tif( modm >= 0xc0 ) {\n\t\tswitch ( (modm & 0x38) >> 3 )\n\t\t{\n\t\t\tcase 2: // psrld\n\t\t\t\tMMX(modm & 7).d[0]=MMX(modm & 7).d[0] >> imm8;\n\t\t\t\tMMX(modm & 7).d[1]=MMX(modm & 7).d[1] >> imm8;\n\t\t\t\tbreak;\n\t\t\tcase 4: // psrad\n\t\t\t\tMMX(modm & 7).i[0]=MMX(modm & 7).i[0] >> imm8;\n\t\t\t\tMMX(modm & 7).i[1]=MMX(modm & 7).i[1] >> imm8;\n\t\t\t\tbreak;\n\t\t\tcase 6: // pslld\n\t\t\t\tMMX(modm & 7).d[0]=MMX(modm & 7).d[0] << imm8;\n\t\t\t\tMMX(modm & 7).d[1]=MMX(modm & 7).d[1] << imm8;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treport_invalid_modrm(\"mmx_group0f72\", modm);\n\t\t}\n\t}\n}\n\nstatic void SSEOP(group_660f72)()  // Opcode 66 0f 72\n{\n\tUINT8 modm = FETCH();\n\tUINT8 imm8 = FETCH();\n\tif (modm >= 0xc0) {\n\t\tswitch ((modm & 0x38) >> 3)\n\t\t{\n\t\t\tcase 2: // psrld\n\t\t\t\tfor (int n = 0; n < 4;n++)\n\t\t\t\t\tXMM(modm & 7).d[n] = XMM(modm & 7).d[n] >> imm8;\n\t\t\t\tbreak;\n\t\t\tcase 4: // psrad\n\t\t\t\tfor (int n = 0; n < 4;n++)\n\t\t\t\t\tXMM(modm & 7).i[n] = XMM(modm & 7).i[n] >> imm8;\n\t\t\t\tbreak;\n\t\t\tcase 6: // pslld\n\t\t\t\tfor (int n = 0; n < 4;n++)\n\t\t\t\t\tXMM(modm & 7).d[n] = XMM(modm & 7).d[n] << imm8;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treport_invalid_modrm(\"mmx_group660f72\", modm);\n\t\t}\n\t}\n}\n\nstatic void MMXOP(group_0f73)()  // Opcode 0f 73\n{\n\tUINT8 modm = FETCH();\n\tUINT8 imm8 = FETCH();\n\tMMXPROLOG();\n\tif( modm >= 0xc0 ) {\n\t\tswitch ( (modm & 0x38) >> 3 )\n\t\t{\n\t\t\tcase 2: // psrlq\n\t\t\t\tMMX(modm & 7).q = imm8 > 63 ? 0 : MMX(modm & 7).q >> imm8;\n\t\t\t\tbreak;\n\t\t\tcase 6: // psllq\n\t\t\t\tMMX(modm & 7).q = imm8 > 63 ? 0 : MMX(modm & 7).q << imm8;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treport_invalid_modrm(\"mmx_group0f73\", modm);\n\t\t}\n\t}\n}\n\nstatic void SSEOP(group_660f73)()  // Opcode 66 0f 73\n{\n\tUINT64 t0;\n\tUINT8 modm = FETCH();\n\tUINT8 imm8 = FETCH();\n\tif (modm >= 0xc0) {\n\t\tswitch ((modm & 0x38) >> 3)\n\t\t{\n\t\tcase 2: // psrlq\n\t\t\tXMM(modm & 7).q[0] = imm8 > 63 ? 0 : XMM(modm & 7).q[0] >> imm8;\n\t\t\tXMM(modm & 7).q[1] = imm8 > 63 ? 0 : XMM(modm & 7).q[1] >> imm8;\n\t\t\tbreak;\n\t\tcase 3: // psrldq\n\t\t\tif (imm8 >= 16)\n\t\t\t{\n\t\t\t\tXMM(modm & 7).q[0] = 0;\n\t\t\t\tXMM(modm & 7).q[1] = 0;\n\t\t\t}\n\t\t\telse if (imm8 >= 8)\n\t\t\t{\n\t\t\t\timm8 = (imm8 & 7) << 3;\n\t\t\t\tXMM(modm & 7).q[0] = XMM(modm & 7).q[1] >> imm8;\n\t\t\t\tXMM(modm & 7).q[1] = 0;\n\t\t\t}\n\t\t\telse if (imm8)\n\t\t\t{\n\t\t\t\tt0 = XMM(modm & 7).q[0];\n\t\t\t\timm8 = imm8 << 3;\n\t\t\t\tXMM(modm & 7).q[0] = (XMM(modm & 7).q[1] << (64 - imm8)) | (t0 >> imm8);\n\t\t\t\tXMM(modm & 7).q[1] = t0 >> imm8;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6: // psllq\n\t\t\tXMM(modm & 7).q[0] = imm8 > 63 ? 0 : XMM(modm & 7).q[0] << imm8;\n\t\t\tXMM(modm & 7).q[1] = imm8 > 63 ? 0 : XMM(modm & 7).q[1] << imm8;\n\t\t\tbreak;\n\t\tcase 7: // pslldq\n\t\t\tif (imm8 >= 16)\n\t\t\t{\n\t\t\t\tXMM(modm & 7).q[0] = 0;\n\t\t\t\tXMM(modm & 7).q[1] = 0;\n\t\t\t}\n\t\t\telse if (imm8 >= 8)\n\t\t\t{\n\t\t\t\timm8 = (imm8 & 7) << 3;\n\t\t\t\tXMM(modm & 7).q[1] = XMM(modm & 7).q[0] << imm8;\n\t\t\t\tXMM(modm & 7).q[0] = 0;\n\t\t\t}\n\t\t\telse if (imm8)\n\t\t\t{\n\t\t\t\timm8 = imm8 << 3;\n\t\t\t\tXMM(modm & 7).q[1] = (XMM(modm & 7).q[0] >> (64 - imm8)) | (XMM(modm & 7).q[1] << imm8);\n\t\t\t\tXMM(modm & 7).q[0] = XMM(modm & 7).q[0] << imm8;\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treport_invalid_modrm(\"sse_group660f73\", modm);\n\t\t}\n\t}\n}\n\nstatic void MMXOP(psrlw_r64_rm64)()  // Opcode 0f d1\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint count=(int)MMX(modrm & 7).q;\n\t\tMMX((modrm >> 3) & 0x7).w[0]=MMX((modrm >> 3) & 0x7).w[0] >> count;\n\t\tMMX((modrm >> 3) & 0x7).w[1]=MMX((modrm >> 3) & 0x7).w[1] >> count;\n\t\tMMX((modrm >> 3) & 0x7).w[2]=MMX((modrm >> 3) & 0x7).w[2] >> count;\n\t\tMMX((modrm >> 3) & 0x7).w[3]=MMX((modrm >> 3) & 0x7).w[3] >> count;\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tint count=(int)src.q;\n\t\tMMX((modrm >> 3) & 0x7).w[0]=MMX((modrm >> 3) & 0x7).w[0] >> count;\n\t\tMMX((modrm >> 3) & 0x7).w[1]=MMX((modrm >> 3) & 0x7).w[1] >> count;\n\t\tMMX((modrm >> 3) & 0x7).w[2]=MMX((modrm >> 3) & 0x7).w[2] >> count;\n\t\tMMX((modrm >> 3) & 0x7).w[3]=MMX((modrm >> 3) & 0x7).w[3] >> count;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psrld_r64_rm64)()  // Opcode 0f d2\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint count=(int)MMX(modrm & 7).q;\n\t\tMMX((modrm >> 3) & 0x7).d[0]=MMX((modrm >> 3) & 0x7).d[0] >> count;\n\t\tMMX((modrm >> 3) & 0x7).d[1]=MMX((modrm >> 3) & 0x7).d[1] >> count;\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tint count=(int)src.q;\n\t\tMMX((modrm >> 3) & 0x7).d[0]=MMX((modrm >> 3) & 0x7).d[0] >> count;\n\t\tMMX((modrm >> 3) & 0x7).d[1]=MMX((modrm >> 3) & 0x7).d[1] >> count;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psrlq_r64_rm64)()  // Opcode 0f d3\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint count=(int)MMX(modrm & 7).q;\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q >> count;\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tint count=(int)src.q;\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q >> count;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(paddq_r64_rm64)()  // Opcode 0f d4\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q+MMX(modrm & 7).q;\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q+src.q;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pmullw_r64_rm64)()  // Opcode 0f d5\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).w[0]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)MMX(modrm & 7).s[0]) & 0xffff;\n\t\tMMX((modrm >> 3) & 0x7).w[1]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)MMX(modrm & 7).s[1]) & 0xffff;\n\t\tMMX((modrm >> 3) & 0x7).w[2]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)MMX(modrm & 7).s[2]) & 0xffff;\n\t\tMMX((modrm >> 3) & 0x7).w[3]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)MMX(modrm & 7).s[3]) & 0xffff;\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tMMX((modrm >> 3) & 0x7).w[0]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)src.s[0]) & 0xffff;\n\t\tMMX((modrm >> 3) & 0x7).w[1]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)src.s[1]) & 0xffff;\n\t\tMMX((modrm >> 3) & 0x7).w[2]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)src.s[2]) & 0xffff;\n\t\tMMX((modrm >> 3) & 0x7).w[3]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)src.s[3]) & 0xffff;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psubusb_r64_rm64)()  // Opcode 0f d8\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] < MMX(modrm & 7).b[n] ? 0 : MMX((modrm >> 3) & 0x7).b[n]-MMX(modrm & 7).b[n];\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] < src.b[n] ? 0 : MMX((modrm >> 3) & 0x7).b[n]-src.b[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psubusw_r64_rm64)()  // Opcode 0f d9\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] < MMX(modrm & 7).w[n] ? 0 : MMX((modrm >> 3) & 0x7).w[n]-MMX(modrm & 7).w[n];\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] < src.w[n] ? 0 : MMX((modrm >> 3) & 0x7).w[n]-src.w[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pand_r64_rm64)()  // Opcode 0f db\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q & MMX(modrm & 7).q;\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q & src.q;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(paddusb_r64_rm64)()  // Opcode 0f dc\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] > (0xff-MMX(modrm & 7).b[n]) ? 0xff : MMX((modrm >> 3) & 0x7).b[n]+MMX(modrm & 7).b[n];\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] > (0xff-src.b[n]) ? 0xff : MMX((modrm >> 3) & 0x7).b[n]+src.b[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(paddusw_r64_rm64)()  // Opcode 0f dd\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] > (0xffff-MMX(modrm & 7).w[n]) ? 0xffff : MMX((modrm >> 3) & 0x7).w[n]+MMX(modrm & 7).w[n];\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] > (0xffff-src.w[n]) ? 0xffff : MMX((modrm >> 3) & 0x7).w[n]+src.w[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pandn_r64_rm64)()  // Opcode 0f df\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).q=(~MMX((modrm >> 3) & 0x7).q) & MMX(modrm & 7).q;\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tMMX((modrm >> 3) & 0x7).q=(~MMX((modrm >> 3) & 0x7).q) & src.q;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psraw_r64_rm64)()  // Opcode 0f e1\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint count=(int)MMX(modrm & 7).q;\n\t\tMMX((modrm >> 3) & 0x7).s[0]=MMX((modrm >> 3) & 0x7).s[0] >> count;\n\t\tMMX((modrm >> 3) & 0x7).s[1]=MMX((modrm >> 3) & 0x7).s[1] >> count;\n\t\tMMX((modrm >> 3) & 0x7).s[2]=MMX((modrm >> 3) & 0x7).s[2] >> count;\n\t\tMMX((modrm >> 3) & 0x7).s[3]=MMX((modrm >> 3) & 0x7).s[3] >> count;\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tint count=(int)src.q;\n\t\tMMX((modrm >> 3) & 0x7).s[0]=MMX((modrm >> 3) & 0x7).s[0] >> count;\n\t\tMMX((modrm >> 3) & 0x7).s[1]=MMX((modrm >> 3) & 0x7).s[1] >> count;\n\t\tMMX((modrm >> 3) & 0x7).s[2]=MMX((modrm >> 3) & 0x7).s[2] >> count;\n\t\tMMX((modrm >> 3) & 0x7).s[3]=MMX((modrm >> 3) & 0x7).s[3] >> count;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psrad_r64_rm64)()  // Opcode 0f e2\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint count=(int)MMX(modrm & 7).q;\n\t\tMMX((modrm >> 3) & 0x7).i[0]=MMX((modrm >> 3) & 0x7).i[0] >> count;\n\t\tMMX((modrm >> 3) & 0x7).i[1]=MMX((modrm >> 3) & 0x7).i[1] >> count;\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tint count=(int)src.q;\n\t\tMMX((modrm >> 3) & 0x7).i[0]=MMX((modrm >> 3) & 0x7).i[0] >> count;\n\t\tMMX((modrm >> 3) & 0x7).i[1]=MMX((modrm >> 3) & 0x7).i[1] >> count;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pmulhw_r64_rm64)()  // Opcode 0f e5\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).w[0]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)MMX(modrm & 7).s[0]) >> 16;\n\t\tMMX((modrm >> 3) & 0x7).w[1]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)MMX(modrm & 7).s[1]) >> 16;\n\t\tMMX((modrm >> 3) & 0x7).w[2]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)MMX(modrm & 7).s[2]) >> 16;\n\t\tMMX((modrm >> 3) & 0x7).w[3]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)MMX(modrm & 7).s[3]) >> 16;\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tMMX((modrm >> 3) & 0x7).w[0]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)src.s[0]) >> 16;\n\t\tMMX((modrm >> 3) & 0x7).w[1]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)src.s[1]) >> 16;\n\t\tMMX((modrm >> 3) & 0x7).w[2]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)src.s[2]) >> 16;\n\t\tMMX((modrm >> 3) & 0x7).w[3]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)src.s[3]) >> 16;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psubsb_r64_rm64)()  // Opcode 0f e8\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).c[n]=SaturatedSignedWordToSignedByte((INT16)MMX((modrm >> 3) & 0x7).c[n] - (INT16)MMX(modrm & 7).c[n]);\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).c[n]=SaturatedSignedWordToSignedByte((INT16)MMX((modrm >> 3) & 0x7).c[n] - (INT16)s.c[n]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psubsw_r64_rm64)()  // Opcode 0f e9\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).s[n]=SaturatedSignedDwordToSignedWord((INT32)MMX((modrm >> 3) & 0x7).s[n] - (INT32)MMX(modrm & 7).s[n]);\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).s[n]=SaturatedSignedDwordToSignedWord((INT32)MMX((modrm >> 3) & 0x7).s[n] - (INT32)s.s[n]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(por_r64_rm64)()  // Opcode 0f eb\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q | MMX(modrm & 7).q;\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q | s.q;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(paddsb_r64_rm64)()  // Opcode 0f ec\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).c[n]=SaturatedSignedWordToSignedByte((INT16)MMX((modrm >> 3) & 0x7).c[n] + (INT16)MMX(modrm & 7).c[n]);\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).c[n]=SaturatedSignedWordToSignedByte((INT16)MMX((modrm >> 3) & 0x7).c[n] + (INT16)s.c[n]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(paddsw_r64_rm64)()  // Opcode 0f ed\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).s[n]=SaturatedSignedDwordToSignedWord((INT32)MMX((modrm >> 3) & 0x7).s[n] + (INT32)MMX(modrm & 7).s[n]);\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).s[n]=SaturatedSignedDwordToSignedWord((INT32)MMX((modrm >> 3) & 0x7).s[n] + (INT32)s.s[n]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pxor_r64_rm64)()  // Opcode 0f ef\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q ^ MMX(modrm & 7).q;\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q ^ s.q;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psllw_r64_rm64)()  // Opcode 0f f1\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint count=(int)MMX(modrm & 7).q;\n\t\tMMX((modrm >> 3) & 0x7).w[0]=MMX((modrm >> 3) & 0x7).w[0] << count;\n\t\tMMX((modrm >> 3) & 0x7).w[1]=MMX((modrm >> 3) & 0x7).w[1] << count;\n\t\tMMX((modrm >> 3) & 0x7).w[2]=MMX((modrm >> 3) & 0x7).w[2] << count;\n\t\tMMX((modrm >> 3) & 0x7).w[3]=MMX((modrm >> 3) & 0x7).w[3] << count;\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tint count=(int)s.q;\n\t\tMMX((modrm >> 3) & 0x7).w[0]=MMX((modrm >> 3) & 0x7).w[0] << count;\n\t\tMMX((modrm >> 3) & 0x7).w[1]=MMX((modrm >> 3) & 0x7).w[1] << count;\n\t\tMMX((modrm >> 3) & 0x7).w[2]=MMX((modrm >> 3) & 0x7).w[2] << count;\n\t\tMMX((modrm >> 3) & 0x7).w[3]=MMX((modrm >> 3) & 0x7).w[3] << count;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pslld_r64_rm64)()  // Opcode 0f f2\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint count=(int)MMX(modrm & 7).q;\n\t\tMMX((modrm >> 3) & 0x7).d[0]=MMX((modrm >> 3) & 0x7).d[0] << count;\n\t\tMMX((modrm >> 3) & 0x7).d[1]=MMX((modrm >> 3) & 0x7).d[1] << count;\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tint count=(int)s.q;\n\t\tMMX((modrm >> 3) & 0x7).d[0]=MMX((modrm >> 3) & 0x7).d[0] << count;\n\t\tMMX((modrm >> 3) & 0x7).d[1]=MMX((modrm >> 3) & 0x7).d[1] << count;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psllq_r64_rm64)()  // Opcode 0f f3\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint count=(int)MMX(modrm & 7).q;\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q << count;\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tint count=(int)s.q;\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q << count;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pmaddwd_r64_rm64)()  // Opcode 0f f5\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).i[0]=(INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)MMX(modrm & 7).s[0]+\n\t\t\t\t\t\t\t\t\t\t(INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)MMX(modrm & 7).s[1];\n\t\tMMX((modrm >> 3) & 0x7).i[1]=(INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)MMX(modrm & 7).s[2]+\n\t\t\t\t\t\t\t\t\t\t(INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)MMX(modrm & 7).s[3];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX((modrm >> 3) & 0x7).i[0]=(INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)s.s[0]+\n\t\t\t\t\t\t\t\t\t\t(INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)s.s[1];\n\t\tMMX((modrm >> 3) & 0x7).i[1]=(INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)s.s[2]+\n\t\t\t\t\t\t\t\t\t\t(INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)s.s[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psubb_r64_rm64)()  // Opcode 0f f8\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] - MMX(modrm & 7).b[n];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] - s.b[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psubw_r64_rm64)()  // Opcode 0f f9\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] - MMX(modrm & 7).w[n];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] - s.w[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psubd_r64_rm64)()  // Opcode 0f fa\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 2;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).d[n]=MMX((modrm >> 3) & 0x7).d[n] - MMX(modrm & 7).d[n];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 2;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).d[n]=MMX((modrm >> 3) & 0x7).d[n] - s.d[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(paddb_r64_rm64)()  // Opcode 0f fc\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] + MMX(modrm & 7).b[n];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] + s.b[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(paddw_r64_rm64)()  // Opcode 0f fd\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] + MMX(modrm & 7).w[n];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] + s.w[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(paddd_r64_rm64)()  // Opcode 0f fe\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 2;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).d[n]=MMX((modrm >> 3) & 0x7).d[n] + MMX(modrm & 7).d[n];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 2;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).d[n]=MMX((modrm >> 3) & 0x7).d[n] + s.d[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(emms)() // Opcode 0f 77\n{\n\tm_x87_tw = 0xffff; // tag word = 0xffff\n\t// TODO\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void I386OP(cyrix_svdc)() // Opcode 0f 78\n{\n\tUINT8 modrm = FETCH();\n\n\tif( modrm < 0xc0 ) {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tint index = (modrm >> 3) & 7;\n\t\tint limit;\n\t\tswitch (index)\n\t\t{\n\t\t\tcase 0:\n\t\t\t{\n\t\t\t\tindex = ES;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 2:\n\t\t\t{\n\t\t\t\tindex = SS;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 3:\n\t\t\t{\n\t\t\t\tindex = DS;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 4:\n\t\t\t{\n\t\t\t\tindex = FS;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 5:\n\t\t\t{\n\t\t\t\tindex = GS;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t}\n\t\t}\n\n\t\tlimit = m_sreg[index].limit;\n\n\t\tif (m_sreg[index].flags & 0x8000) //G bit\n\t\t{\n\t\t\tlimit >>= 12;\n\t\t}\n\n\t\tWRITE16(ea + 0, limit);\n\t\tWRITE32(ea + 2, m_sreg[index].base);\n\t\tWRITE16(ea + 5, m_sreg[index].flags); //replace top 8 bits of base\n\t\tWRITE8(ea + 7, m_sreg[index].base >> 24);\n\t\tWRITE16(ea + 8, m_sreg[index].selector);\n\t} else {\n\t\ti386_trap(6, 0, 0);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void I386OP(cyrix_rsdc)() // Opcode 0f 79\n{\n\tUINT8 modrm = FETCH();\n\n\tif( modrm < 0xc0 ) {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tint index = (modrm >> 3) & 7;\n\t\tUINT16 flags;\n\t\tUINT32 base;\n\t\tUINT32 limit;\n\t\tswitch (index)\n\t\t{\n\t\t\tcase 0:\n\t\t\t{\n\t\t\t\tindex = ES;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 2:\n\t\t\t{\n\t\t\t\tindex = SS;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 3:\n\t\t\t{\n\t\t\t\tindex = DS;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 4:\n\t\t\t{\n\t\t\t\tindex = FS;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 5:\n\t\t\t{\n\t\t\t\tindex = GS;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t}\n\t\t}\n\n\t\tbase = (READ32(ea + 2) & 0x00ffffff) | (READ8(ea + 7) << 24);\n\t\tflags = READ16(ea + 5);\n\t\tlimit = READ16(ea + 0) | ((flags & 3) << 16);\n\n\t\tif (flags & 0x8000) //G bit\n\t\t{\n\t\t\tlimit = (limit << 12) | 0xfff;\n\t\t}\n\n\t\tm_sreg[index].selector = READ16(ea + 8);\n\t\tm_sreg[index].flags = flags;\n\t\tm_sreg[index].base = base;\n\t\tm_sreg[index].limit = limit;\n\t} else {\n\t\ti386_trap(6, 0, 0);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void I386OP(cyrix_svldt)() // Opcode 0f 7a\n{\n\tif ( PROTECTED_MODE && !V8086_MODE )\n\t{\n\t\tUINT8 modrm = FETCH();\n\n\t\tif( !(modrm & 0xf8) ) {\n\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\tUINT32 limit = m_ldtr.limit;\n\n\t\t\tif (m_ldtr.flags & 0x8000) //G bit\n\t\t\t{\n\t\t\t\tlimit >>= 12;\n\t\t\t}\n\n\t\t\tWRITE16(ea + 0, limit);\n\t\t\tWRITE32(ea + 2, m_ldtr.base);\n\t\t\tWRITE16(ea + 5, m_ldtr.flags); //replace top 8 bits of base\n\t\t\tWRITE8(ea + 7, m_ldtr.base >> 24);\n\t\t\tWRITE16(ea + 8, m_ldtr.segment);\n\t\t} else {\n\t\t\ti386_trap(6, 0, 0);\n\t\t}\n\t} else {\n\t\ti386_trap(6, 0, 0);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void I386OP(cyrix_rsldt)() // Opcode 0f 7b\n{\n\tif ( PROTECTED_MODE && !V8086_MODE )\n\t{\n\t\tif(m_CPL)\n\t\t\tFAULT(FAULT_GP,0)\n\n\t\tUINT8 modrm = FETCH();\n\n\t\tif( !(modrm & 0xf8) ) {\n\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\tUINT16 flags = READ16(ea + 5);\n\t\t\tUINT32 base = (READ32(ea + 2) | 0x00ffffff) | (READ8(ea + 7) << 24);\n\t\t\tUINT32 limit = READ16(ea + 0) | ((flags & 3) << 16);\n\t\t\tI386_SREG seg;\n\n\t\t\tif (flags & 0x8000) //G bit\n\t\t\t{\n\t\t\t\tlimit = (limit << 12) | 0xfff;\n\t\t\t}\n\n\t\t\tmemset(&seg, 0, sizeof(seg));\n\t\t\tseg.selector = READ16(ea + 8);\n\t\t\ti386_load_protected_mode_segment(&seg,NULL);\n\t\t\tm_ldtr.limit = limit;\n\t\t\tm_ldtr.base = base;\n\t\t\tm_ldtr.flags = flags;\n\t\t} else {\n\t\t\ti386_trap(6, 0, 0);\n\t\t}\n\t} else {\n\t\ti386_trap(6, 0, 0);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void I386OP(cyrix_svts)() // Opcode 0f 7c\n{\n\tif ( PROTECTED_MODE )\n\t{\n\t\tUINT8 modrm = FETCH();\n\n\t\tif( !(modrm & 0xf8) ) {\n\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\tUINT32 limit = m_task.limit;\n\n\t\t\tif (m_task.flags & 0x8000) //G bit\n\t\t\t{\n\t\t\t\tlimit >>= 12;\n\t\t\t}\n\n\t\t\tWRITE16(ea + 0, limit);\n\t\t\tWRITE32(ea + 2, m_task.base);\n\t\t\tWRITE16(ea + 5, m_task.flags); //replace top 8 bits of base\n\t\t\tWRITE8(ea + 7, m_task.base >> 24);\n\t\t\tWRITE16(ea + 8, m_task.segment);\n\t\t} else {\n\t\t\ti386_trap(6, 0, 0);\n\t\t}\n\t} else {\n\t\ti386_trap(6, 0, 0);\n\t}\n}\n\nstatic void I386OP(cyrix_rsts)() // Opcode 0f 7d\n{\n\tif ( PROTECTED_MODE )\n\t{\n\t\tif(m_CPL)\n\t\t\tFAULT(FAULT_GP,0)\n\n\t\tUINT8 modrm = FETCH();\n\n\t\tif( !(modrm & 0xf8) ) {\n\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\tUINT16 flags = READ16(ea + 5);\n\t\t\tUINT32 base = (READ32(ea + 2) | 0x00ffffff) | (READ8(ea + 7) << 24);\n\t\t\tUINT32 limit = READ16(ea + 0) | ((flags & 3) << 16);\n\n\t\t\tif (flags & 0x8000) //G bit\n\t\t\t{\n\t\t\t\tlimit = (limit << 12) | 0xfff;\n\t\t\t}\n\t\t\tm_task.segment = READ16(ea + 8);\n\t\t\tm_task.limit = limit;\n\t\t\tm_task.base = base;\n\t\t\tm_task.flags = flags;\n\t\t} else {\n\t\t\ti386_trap(6, 0, 0);\n\t\t}\n\t} else {\n\t\ti386_trap(6, 0, 0);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(movd_r64_rm32)() // Opcode 0f 6e\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).d[0]=LOAD_RM32(modrm);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tMMX((modrm >> 3) & 0x7).d[0]=READ32(ea);\n\t}\n\tMMX((modrm >> 3) & 0x7).d[1]=0;\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(movq_r64_rm64)() // Opcode 0f 6f\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).l=MMX(modrm & 0x7).l;\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, MMX((modrm >> 3) & 0x7));\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(movd_rm32_r64)() // Opcode 0f 7e\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM32(modrm, MMX((modrm >> 3) & 0x7).d[0]);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITE32(ea, MMX((modrm >> 3) & 0x7).d[0]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(movq_rm64_r64)() // Opcode 0f 7f\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX(modrm & 0x7)=MMX((modrm >> 3) & 0x7);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITEMMX(ea, MMX((modrm >> 3) & 0x7));\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pcmpeqb_r64_rm64)() // Opcode 0f 74\n{\n\tint c;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tfor (c=0;c <= 7;c++)\n\t\t\tMMX(d).b[c]=(MMX(d).b[c] == MMX(s).b[c]) ? 0xff : 0;\n\t} else {\n\t\tMMX_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (c=0;c <= 7;c++)\n\t\t\tMMX(d).b[c]=(MMX(d).b[c] == s.b[c]) ? 0xff : 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pcmpeqw_r64_rm64)() // Opcode 0f 75\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tMMX(d).w[0]=(MMX(d).w[0] == MMX(s).w[0]) ? 0xffff : 0;\n\t\tMMX(d).w[1]=(MMX(d).w[1] == MMX(s).w[1]) ? 0xffff : 0;\n\t\tMMX(d).w[2]=(MMX(d).w[2] == MMX(s).w[2]) ? 0xffff : 0;\n\t\tMMX(d).w[3]=(MMX(d).w[3] == MMX(s).w[3]) ? 0xffff : 0;\n\t} else {\n\t\tMMX_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX(d).w[0]=(MMX(d).w[0] == s.w[0]) ? 0xffff : 0;\n\t\tMMX(d).w[1]=(MMX(d).w[1] == s.w[1]) ? 0xffff : 0;\n\t\tMMX(d).w[2]=(MMX(d).w[2] == s.w[2]) ? 0xffff : 0;\n\t\tMMX(d).w[3]=(MMX(d).w[3] == s.w[3]) ? 0xffff : 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pcmpeqd_r64_rm64)() // Opcode 0f 76\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tMMX(d).d[0]=(MMX(d).d[0] == MMX(s).d[0]) ? 0xffffffff : 0;\n\t\tMMX(d).d[1]=(MMX(d).d[1] == MMX(s).d[1]) ? 0xffffffff : 0;\n\t} else {\n\t\tMMX_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX(d).d[0]=(MMX(d).d[0] == s.d[0]) ? 0xffffffff : 0;\n\t\tMMX(d).d[1]=(MMX(d).d[1] == s.d[1]) ? 0xffffffff : 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pshufw_r64_rm64_i8)() // Opcode 0f 70\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX_REG t;\n\t\tint s,d;\n\t\tUINT8 imm8 = FETCH();\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tt.q=MMX(s).q;\n\t\tMMX(d).w[0]=t.w[imm8 & 3];\n\t\tMMX(d).w[1]=t.w[(imm8 >> 2) & 3];\n\t\tMMX(d).w[2]=t.w[(imm8 >> 4) & 3];\n\t\tMMX(d).w[3]=t.w[(imm8 >> 6) & 3];\n\t} else {\n\t\tMMX_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tUINT8 imm8 = FETCH();\n\t\tREADMMX(ea, s);\n\t\tMMX(d).w[0]=s.w[imm8 & 3];\n\t\tMMX(d).w[1]=s.w[(imm8 >> 2) & 3];\n\t\tMMX(d).w[2]=s.w[(imm8 >> 4) & 3];\n\t\tMMX(d).w[3]=s.w[(imm8 >> 6) & 3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(punpcklbw_r128_rm128)() // Opcode 66 0f 60\n{\n\tUINT8 modrm = FETCH();\n\tif (modrm >= 0xc0) {\n\t\tXMM_REG xd,xs;\n\t\tint s, d;\n\t\ts = modrm & 0x7;\n\t\td = (modrm >> 3) & 0x7;\n\t\txd.l[0] = XMM(d).l[0];\n\t\txs.l[0] = XMM(s).l[0];\n\t\tXMM(d).b[0] = xd.b[0];\n\t\tXMM(d).b[1] = xs.b[0];\n\t\tXMM(d).b[2] = xd.b[1];\n\t\tXMM(d).b[3] = xs.b[1];\n\t\tXMM(d).b[4] = xd.b[2];\n\t\tXMM(d).b[5] = xs.b[2];\n\t\tXMM(d).b[6] = xd.b[3];\n\t\tXMM(d).b[7] = xs.b[3];\n\t\tXMM(d).b[8] = xd.b[4];\n\t\tXMM(d).b[9] = xs.b[4];\n\t\tXMM(d).b[10] = xd.b[5];\n\t\tXMM(d).b[11] = xs.b[5];\n\t\tXMM(d).b[12] = xd.b[6];\n\t\tXMM(d).b[13] = xs.b[6];\n\t\tXMM(d).b[14] = xd.b[7];\n\t\tXMM(d).b[15] = xs.b[7];\n\t}\n\telse {\n\t\tXMM_REG xd, xs;\n\t\tint d = (modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\txd.l[0] = XMM(d).l[0];\n\t\txs.q[0] = READ64(ea);\n\t\tfor (int n = 0; n < 8; n++) {\n\t\t\tXMM(d).b[n << 1] = xd.b[n];\n\t\t\tXMM(d).b[(n << 1) | 1] = xs.b[n];\n\t\t}\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(punpcklwd_r128_rm128)()\n{\n\tUINT8 modrm = FETCH();\n\tif (modrm >= 0xc0) {\n\t\tXMM_REG xd, xs;\n\t\tint s, d;\n\t\ts = modrm & 0x7;\n\t\td = (modrm >> 3) & 0x7;\n\t\txd.l[0] = XMM(d).l[0];\n\t\txs.l[0] = XMM(s).l[0];\n\t\tfor (int n = 0; n < 4; n++) {\n\t\t\tXMM(d).w[n << 1] = xd.w[n];\n\t\t\tXMM(d).w[(n << 1) | 1] = xs.w[n];\n\t\t}\n\t}\n\telse {\n\t\tXMM_REG xd, xs;\n\t\tint d = (modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\txd.l[0] = XMM(d).l[0];\n\t\txs.q[0] = READ64(ea);\n\t\tfor (int n = 0; n < 4; n++) {\n\t\t\tXMM(d).w[n << 1] = xd.w[n];\n\t\t\tXMM(d).w[(n << 1) | 1] = xs.w[n];\n\t\t}\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(punpckldq_r128_rm128)()\n{\n\tUINT8 modrm = FETCH();\n\tif (modrm >= 0xc0) {\n\t\tXMM_REG xd, xs;\n\t\tint s, d;\n\t\ts = modrm & 0x7;\n\t\td = (modrm >> 3) & 0x7;\n\t\txd.l[0] = XMM(d).l[0];\n\t\txs.l[0] = XMM(s).l[0];\n\t\tfor (int n = 0; n < 2; n++) {\n\t\t\tXMM(d).d[n << 1] = xd.d[n];\n\t\t\tXMM(d).d[(n << 1) | 1] = xs.d[n];\n\t\t}\n\t}\n\telse {\n\t\tXMM_REG xd, xs;\n\t\tint d = (modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\txd.l[0] = XMM(d).l[0];\n\t\txs.q[0] = READ64(ea);\n\t\tfor (int n = 0; n < 2; n++) {\n\t\t\tXMM(d).d[n << 1] = xd.d[n];\n\t\t\tXMM(d).d[(n << 1) | 1] = xs.d[n];\n\t\t}\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(punpcklqdq_r128_rm128)()\n{\n\tUINT8 modrm = FETCH();\n\tif (modrm >= 0xc0) {\n\t\tXMM_REG xd, xs;\n\t\tint s, d;\n\t\ts = modrm & 0x7;\n\t\td = (modrm >> 3) & 0x7;\n\t\txd.l[0] = XMM(d).l[0];\n\t\txs.l[0] = XMM(s).l[0];\n\t\tXMM(d).q[0] = xd.q[0];\n\t\tXMM(d).q[1] = xs.q[0];\n\t}\n\telse {\n\t\tXMM_REG xd, xs;\n\t\tint d = (modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\txd.l[0] = XMM(d).l[0];\n\t\txs.q[0] = READ64(ea);\n\t\tXMM(d).q[0] = xd.q[0];\n\t\tXMM(d).q[1] = xs.q[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(punpcklbw_r64_r64m32)() // Opcode 0f 60\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 t;\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tt=MMX(d).d[0];\n\t\tMMX(d).b[0]=t & 0xff;\n\t\tMMX(d).b[1]=MMX(s).b[0];\n\t\tMMX(d).b[2]=(t >> 8) & 0xff;\n\t\tMMX(d).b[3]=MMX(s).b[1];\n\t\tMMX(d).b[4]=(t >> 16) & 0xff;\n\t\tMMX(d).b[5]=MMX(s).b[2];\n\t\tMMX(d).b[6]=(t >> 24) & 0xff;\n\t\tMMX(d).b[7]=MMX(s).b[3];\n\t} else {\n\t\tUINT32 s,t;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\ts = READ32(ea);\n\t\tt=MMX(d).d[0];\n\t\tMMX(d).b[0]=t & 0xff;\n\t\tMMX(d).b[1]=s & 0xff;\n\t\tMMX(d).b[2]=(t >> 8) & 0xff;\n\t\tMMX(d).b[3]=(s >> 8) & 0xff;\n\t\tMMX(d).b[4]=(t >> 16) & 0xff;\n\t\tMMX(d).b[5]=(s >> 16) & 0xff;\n\t\tMMX(d).b[6]=(t >> 24) & 0xff;\n\t\tMMX(d).b[7]=(s >> 24) & 0xff;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(punpcklwd_r64_r64m32)() // Opcode 0f 61\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 t;\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tt=MMX(d).w[1];\n\t\tMMX(d).w[0]=MMX(d).w[0];\n\t\tMMX(d).w[1]=MMX(s).w[0];\n\t\tMMX(d).w[2]=t;\n\t\tMMX(d).w[3]=MMX(s).w[1];\n\t} else {\n\t\tUINT32 s;\n\t\tUINT16 t;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\ts = READ32(ea);\n\t\tt=MMX(d).w[1];\n\t\tMMX(d).w[0]=MMX(d).w[0];\n\t\tMMX(d).w[1]=s & 0xffff;\n\t\tMMX(d).w[2]=t;\n\t\tMMX(d).w[3]=(s >> 16) & 0xffff;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(punpckldq_r64_r64m32)() // Opcode 0f 62\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tMMX(d).d[0]=MMX(d).d[0];\n\t\tMMX(d).d[1]=MMX(s).d[0];\n\t} else {\n\t\tUINT32 s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\ts = READ32(ea);\n\t\tMMX(d).d[0]=MMX(d).d[0];\n\t\tMMX(d).d[1]=s;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(packsswb_r64_rm64)() // Opcode 0f 63\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tMMX(d).c[0]=SaturatedSignedWordToSignedByte(MMX(d).s[0]);\n\t\tMMX(d).c[1]=SaturatedSignedWordToSignedByte(MMX(d).s[1]);\n\t\tMMX(d).c[2]=SaturatedSignedWordToSignedByte(MMX(d).s[2]);\n\t\tMMX(d).c[3]=SaturatedSignedWordToSignedByte(MMX(d).s[3]);\n\t\tMMX(d).c[4]=SaturatedSignedWordToSignedByte(MMX(s).s[0]);\n\t\tMMX(d).c[5]=SaturatedSignedWordToSignedByte(MMX(s).s[1]);\n\t\tMMX(d).c[6]=SaturatedSignedWordToSignedByte(MMX(s).s[2]);\n\t\tMMX(d).c[7]=SaturatedSignedWordToSignedByte(MMX(s).s[3]);\n\t} else {\n\t\tMMX_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX(d).c[0]=SaturatedSignedWordToSignedByte(MMX(d).s[0]);\n\t\tMMX(d).c[1]=SaturatedSignedWordToSignedByte(MMX(d).s[1]);\n\t\tMMX(d).c[2]=SaturatedSignedWordToSignedByte(MMX(d).s[2]);\n\t\tMMX(d).c[3]=SaturatedSignedWordToSignedByte(MMX(d).s[3]);\n\t\tMMX(d).c[4]=SaturatedSignedWordToSignedByte(s.s[0]);\n\t\tMMX(d).c[5]=SaturatedSignedWordToSignedByte(s.s[1]);\n\t\tMMX(d).c[6]=SaturatedSignedWordToSignedByte(s.s[2]);\n\t\tMMX(d).c[7]=SaturatedSignedWordToSignedByte(s.s[3]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pcmpgtb_r64_rm64)() // Opcode 0f 64\n{\n\tint c;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tfor (c=0;c <= 7;c++)\n\t\t\tMMX(d).b[c]=(MMX(d).c[c] > MMX(s).c[c]) ? 0xff : 0;\n\t} else {\n\t\tMMX_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (c=0;c <= 7;c++)\n\t\t\tMMX(d).b[c]=(MMX(d).c[c] > s.c[c]) ? 0xff : 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pcmpgtw_r64_rm64)() // Opcode 0f 65\n{\n\tint c;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tfor (c=0;c <= 3;c++)\n\t\t\tMMX(d).w[c]=(MMX(d).s[c] > MMX(s).s[c]) ? 0xffff : 0;\n\t} else {\n\t\tMMX_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (c=0;c <= 3;c++)\n\t\t\tMMX(d).w[c]=(MMX(d).s[c] > s.s[c]) ? 0xffff : 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pcmpgtd_r64_rm64)() // Opcode 0f 66\n{\n\tint c;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tfor (c=0;c <= 1;c++)\n\t\t\tMMX(d).d[c]=(MMX(d).i[c] > MMX(s).i[c]) ? 0xffffffff : 0;\n\t} else {\n\t\tMMX_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (c=0;c <= 1;c++)\n\t\t\tMMX(d).d[c]=(MMX(d).i[c] > s.i[c]) ? 0xffffffff : 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(packuswb_r64_rm64)() // Opcode 0f 67\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX_REG ds, sd;\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tds.q = MMX(d).q;\n\t\tsd.q = MMX(s).q;\n\t\tMMX(d).b[0]=SaturatedSignedWordToUnsignedByte(ds.s[0]);\n\t\tMMX(d).b[1]=SaturatedSignedWordToUnsignedByte(ds.s[1]);\n\t\tMMX(d).b[2]=SaturatedSignedWordToUnsignedByte(ds.s[2]);\n\t\tMMX(d).b[3]=SaturatedSignedWordToUnsignedByte(ds.s[3]);\n\t\tMMX(d).b[4]=SaturatedSignedWordToUnsignedByte(sd.s[0]);\n\t\tMMX(d).b[5]=SaturatedSignedWordToUnsignedByte(sd.s[1]);\n\t\tMMX(d).b[6]=SaturatedSignedWordToUnsignedByte(sd.s[2]);\n\t\tMMX(d).b[7]=SaturatedSignedWordToUnsignedByte(sd.s[3]);\n\t} else {\n\t\tMMX_REG s,t;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tt.q = MMX(d).q;\n\t\tMMX(d).b[0]=SaturatedSignedWordToUnsignedByte(t.s[0]);\n\t\tMMX(d).b[1]=SaturatedSignedWordToUnsignedByte(t.s[1]);\n\t\tMMX(d).b[2]=SaturatedSignedWordToUnsignedByte(t.s[2]);\n\t\tMMX(d).b[3]=SaturatedSignedWordToUnsignedByte(t.s[3]);\n\t\tMMX(d).b[4]=SaturatedSignedWordToUnsignedByte(s.s[0]);\n\t\tMMX(d).b[5]=SaturatedSignedWordToUnsignedByte(s.s[1]);\n\t\tMMX(d).b[6]=SaturatedSignedWordToUnsignedByte(s.s[2]);\n\t\tMMX(d).b[7]=SaturatedSignedWordToUnsignedByte(s.s[3]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(punpckhbw_r64_rm64)() // Opcode 0f 68\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tMMX(d).b[0]=MMX(d).b[4];\n\t\tMMX(d).b[1]=MMX(s).b[4];\n\t\tMMX(d).b[2]=MMX(d).b[5];\n\t\tMMX(d).b[3]=MMX(s).b[5];\n\t\tMMX(d).b[4]=MMX(d).b[6];\n\t\tMMX(d).b[5]=MMX(s).b[6];\n\t\tMMX(d).b[6]=MMX(d).b[7];\n\t\tMMX(d).b[7]=MMX(s).b[7];\n\t} else {\n\t\tMMX_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX(d).b[0]=MMX(d).b[4];\n\t\tMMX(d).b[1]=s.b[4];\n\t\tMMX(d).b[2]=MMX(d).b[5];\n\t\tMMX(d).b[3]=s.b[5];\n\t\tMMX(d).b[4]=MMX(d).b[6];\n\t\tMMX(d).b[5]=s.b[6];\n\t\tMMX(d).b[6]=MMX(d).b[7];\n\t\tMMX(d).b[7]=s.b[7];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(punpckhwd_r64_rm64)() // Opcode 0f 69\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tMMX(d).w[0]=MMX(d).w[2];\n\t\tMMX(d).w[1]=MMX(s).w[2];\n\t\tMMX(d).w[2]=MMX(d).w[3];\n\t\tMMX(d).w[3]=MMX(s).w[3];\n\t} else {\n\t\tMMX_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX(d).w[0]=MMX(d).w[2];\n\t\tMMX(d).w[1]=s.w[2];\n\t\tMMX(d).w[2]=MMX(d).w[3];\n\t\tMMX(d).w[3]=s.w[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(punpckhdq_r64_rm64)() // Opcode 0f 6a\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tMMX(d).d[0]=MMX(d).d[1];\n\t\tMMX(d).d[1]=MMX(s).d[1];\n\t} else {\n\t\tMMX_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX(d).d[0]=MMX(d).d[1];\n\t\tMMX(d).d[1]=s.d[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(packssdw_r64_rm64)() // Opcode 0f 6b\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\tINT32 t1, t2, t3, t4;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tt1 = MMX(d).i[0];\n\t\tt2 = MMX(d).i[1];\n\t\tt3 = MMX(s).i[0];\n\t\tt4 = MMX(s).i[1];\n\t\tMMX(d).s[0] = SaturatedSignedDwordToSignedWord(t1);\n\t\tMMX(d).s[1] = SaturatedSignedDwordToSignedWord(t2);\n\t\tMMX(d).s[2] = SaturatedSignedDwordToSignedWord(t3);\n\t\tMMX(d).s[3] = SaturatedSignedDwordToSignedWord(t4);\n\t}\n\telse {\n\t\tMMX_REG s;\n\t\tINT32 t1, t2;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tt1 = MMX(d).i[0];\n\t\tt2 = MMX(d).i[1];\n\t\tMMX(d).s[0] = SaturatedSignedDwordToSignedWord(t1);\n\t\tMMX(d).s[1] = SaturatedSignedDwordToSignedWord(t2);\n\t\tMMX(d).s[2] = SaturatedSignedDwordToSignedWord(s.i[0]);\n\t\tMMX(d).s[3] = SaturatedSignedDwordToSignedWord(s.i[1]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(group_0fae)()  // Opcode 0f ae\n{\n\tUINT8 modm = FETCH();\n\tif( modm == 0xf8 ) {\n\t\tlogerror(\"Unemulated SFENCE opcode called\\n\");\n\t\tCYCLES(1); // sfence instruction\n\t} else if( modm == 0xf0 ) {\n\t\tCYCLES(1); // mfence instruction\n\t} else if( modm == 0xe8 ) {\n\t\tCYCLES(1); // lfence instruction\n\t} else if( modm < 0xc0 ) {\n\t\tUINT32 ea;\n\t\tswitch ( (modm & 0x38) >> 3 )\n\t\t{\n\t\t\tcase 2: // ldmxcsr m32\n\t\t\t\tea = GetEA(modm, 0);\n\t\t\t\tm_mxcsr = READ32(ea);\n\t\t\t\tbreak;\n\t\t\tcase 3: // stmxcsr m32\n\t\t\t\tea = GetEA(modm, 0);\n\t\t\t\tWRITE32(ea, m_mxcsr);\n\t\t\t\tbreak;\n\t\t\tcase 7: // clflush m8\n\t\t\t\tGetNonTranslatedEA(modm, NULL);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treport_invalid_modrm(\"sse_group_0fae\", modm);\n\t\t}\n\t} else {\n\t\treport_invalid_modrm(\"sse_group_0fae\", modm);\n\t}\n}\n\nstatic void SSEOP(cvttps2dq_r128_rm128)() // Opcode f3 0f 5b\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).i[0]=(INT32)XMM(modrm & 0x7).f[0];\n\t\tXMM((modrm >> 3) & 0x7).i[1]=(INT32)XMM(modrm & 0x7).f[1];\n\t\tXMM((modrm >> 3) & 0x7).i[2]=(INT32)XMM(modrm & 0x7).f[2];\n\t\tXMM((modrm >> 3) & 0x7).i[3]=(INT32)XMM(modrm & 0x7).f[3];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).i[0]=(INT32)src.f[0];\n\t\tXMM((modrm >> 3) & 0x7).i[1]=(INT32)src.f[1];\n\t\tXMM((modrm >> 3) & 0x7).i[2]=(INT32)src.f[2];\n\t\tXMM((modrm >> 3) & 0x7).i[3]=(INT32)src.f[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvtss2sd_r128_r128m32)() // Opcode f3 0f 5a\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = XMM(modrm & 0x7).f[0];\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\ts.d[0] = READ32(ea);\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = s.f[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvttss2si_r32_r128m32)() // Opcode f3 0f 2c\n{\n\tINT32 src;\n\tUINT8 modrm = FETCH(); // get mordm byte\n\tif( modrm >= 0xc0 ) { // if bits 7-6 are 11 the source is a xmm register (low doubleword)\n\t\tsrc = (INT32)XMM(modrm & 0x7).f[0^NATIVE_ENDIAN_VALUE_LE_BE(0,1)];\n\t} else { // otherwise is a memory address\n\t\tXMM_REG t;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tt.d[0] = READ32(ea);\n\t\tsrc = (INT32)t.f[0];\n\t}\n\tSTORE_REG32(modrm, (UINT32)src);\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvtss2si_r32_r128m32)() // Opcode f3 0f 2d\n{\n\tINT32 src;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = (INT32)XMM(modrm & 0x7).f[0];\n\t} else {\n\t\tXMM_REG t;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tt.d[0] = READ32(ea);\n\t\tsrc = (INT32)t.f[0];\n\t}\n\tSTORE_REG32(modrm, (UINT32)src);\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvtsi2ss_r128_rm32)() // Opcode f3 0f 2a\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = (INT32)LOAD_RM32(modrm);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = (INT32)READ32(ea);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvtpi2ps_r128_rm64)() // Opcode 0f 2a\n{\n\tUINT8 modrm = FETCH();\n\tMMXPROLOG();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = (float)MMX(modrm & 0x7).i[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = (float)MMX(modrm & 0x7).i[1];\n\t} else {\n\t\tMMX_REG r;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, r);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = (float)r.i[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = (float)r.i[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvttps2pi_r64_r128m64)() // Opcode 0f 2c\n{\n\tUINT8 modrm = FETCH();\n\tMMXPROLOG();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).i[0] = XMM(modrm & 0x7).f[0];\n\t\tMMX((modrm >> 3) & 0x7).i[1] = XMM(modrm & 0x7).f[1];\n\t} else {\n\t\tXMM_REG r;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, r);\n\t\tXMM((modrm >> 3) & 0x7).i[0] = r.f[0];\n\t\tXMM((modrm >> 3) & 0x7).i[1] = r.f[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvtps2pi_r64_r128m64)() // Opcode 0f 2d\n{\n\tUINT8 modrm = FETCH();\n\tMMXPROLOG();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).i[0] = XMM(modrm & 0x7).f[0];\n\t\tMMX((modrm >> 3) & 0x7).i[1] = XMM(modrm & 0x7).f[1];\n\t} else {\n\t\tXMM_REG r;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, r);\n\t\tXMM((modrm >> 3) & 0x7).i[0] = r.f[0];\n\t\tXMM((modrm >> 3) & 0x7).i[1] = r.f[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvtps2pd_r128_r128m64)() // Opcode 0f 5a\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = (double)XMM(modrm & 0x7).f[0];\n\t\tXMM((modrm >> 3) & 0x7).f64[1] = (double)XMM(modrm & 0x7).f[1];\n\t} else {\n\t\tMMX_REG r;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, r);\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = (double)r.f[0];\n\t\tXMM((modrm >> 3) & 0x7).f64[1] = (double)r.f[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvtdq2ps_r128_rm128)() // Opcode 0f 5b\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = (float)XMM(modrm & 0x7).i[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = (float)XMM(modrm & 0x7).i[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2] = (float)XMM(modrm & 0x7).i[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3] = (float)XMM(modrm & 0x7).i[3];\n\t} else {\n\t\tXMM_REG r;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, r);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = (float)r.i[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = (float)r.i[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2] = (float)r.i[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3] = (float)r.i[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvtdq2pd_r128_r128m64)() // Opcode f3 0f e6\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = (double)XMM(modrm & 0x7).i[0];\n\t\tXMM((modrm >> 3) & 0x7).f64[1] = (double)XMM(modrm & 0x7).i[1];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = (double)s.i[0];\n\t\tXMM((modrm >> 3) & 0x7).f64[1] = (double)s.i[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movss_r128_rm128)() // Opcode f3 0f 10\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).d[0] = XMM(modrm & 0x7).d[0];\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tXMM((modrm >> 3) & 0x7).d[0] = READ32(ea);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movss_rm128_r128)() // Opcode f3 0f 11\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM(modrm & 0x7).d[0] = XMM((modrm >> 3) & 0x7).d[0];\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITE32(ea, XMM((modrm >> 3) & 0x7).d[0]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movsldup_r128_rm128)() // Opcode f3 0f 12\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).d[0] = XMM(modrm & 0x7).d[0];\n\t\tXMM((modrm >> 3) & 0x7).d[1] = XMM(modrm & 0x7).d[0];\n\t\tXMM((modrm >> 3) & 0x7).d[2] = XMM(modrm & 0x7).d[2];\n\t\tXMM((modrm >> 3) & 0x7).d[3] = XMM(modrm & 0x7).d[2];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).d[0] = src.d[0];\n\t\tXMM((modrm >> 3) & 0x7).d[1] = src.d[0];\n\t\tXMM((modrm >> 3) & 0x7).d[2] = src.d[2];\n\t\tXMM((modrm >> 3) & 0x7).d[3] = src.d[2];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movshdup_r128_rm128)() // Opcode f3 0f 16\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).d[0] = XMM(modrm & 0x7).d[1];\n\t\tXMM((modrm >> 3) & 0x7).d[1] = XMM(modrm & 0x7).d[1];\n\t\tXMM((modrm >> 3) & 0x7).d[2] = XMM(modrm & 0x7).d[3];\n\t\tXMM((modrm >> 3) & 0x7).d[3] = XMM(modrm & 0x7).d[3];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).d[0] = src.d[1];\n\t\tXMM((modrm >> 3) & 0x7).d[1] = src.d[1];\n\t\tXMM((modrm >> 3) & 0x7).d[2] = src.d[3];\n\t\tXMM((modrm >> 3) & 0x7).d[3] = src.d[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movaps_r128_rm128)() // Opcode 0f 28\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7) = XMM(modrm & 0x7);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, XMM((modrm >> 3) & 0x7));\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movaps_rm128_r128)() // Opcode 0f 29\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM(modrm & 0x7) = XMM((modrm >> 3) & 0x7);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITEXMM(ea, XMM((modrm >> 3) & 0x7));\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movups_r128_rm128)() // Opcode 0f 10\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7) = XMM(modrm & 0x7);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, XMM((modrm >> 3) & 0x7)); // address does not need to be 16-byte aligned\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movupd_r128_rm128)() // Opcode 66 0f 10\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7) = XMM(modrm & 0x7);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, XMM((modrm >> 3) & 0x7)); // address does not need to be 16-byte aligned\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movups_rm128_r128)() // Opcode 0f 11\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM(modrm & 0x7) = XMM((modrm >> 3) & 0x7);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITEXMM(ea, XMM((modrm >> 3) & 0x7)); // address does not need to be 16-byte aligned\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movupd_rm128_r128)() // Opcode 66 0f 11\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM(modrm & 0x7) = XMM((modrm >> 3) & 0x7);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITEXMM(ea, XMM((modrm >> 3) & 0x7)); // address does not need to be 16-byte aligned\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movlps_r128_m64)() // Opcode 0f 12\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\t// MOVHLPS opcode\n\t\tXMM((modrm >> 3) & 0x7).q[0] = XMM(modrm & 0x7).q[1];\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t} else {\n\t\t// MOVLPS opcode\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM_LO64(ea, XMM((modrm >> 3) & 0x7));\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t}\n}\n\nstatic void SSEOP(movlpd_r128_m64)() // Opcode 66 0f 12\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t} else {\n\t\t// MOVLPS opcode\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM_LO64(ea, XMM((modrm >> 3) & 0x7));\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t}\n}\n\nstatic void SSEOP(movlps_m64_r128)() // Opcode 0f 13\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\t// unsupported by cpu\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITEXMM_LO64(ea, XMM((modrm >> 3) & 0x7));\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t}\n}\n\nstatic void SSEOP(movlpd_m64_r128)() // Opcode 66 0f 13\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\t// unsupported by cpu\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITEXMM_LO64(ea, XMM((modrm >> 3) & 0x7));\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t}\n}\n\nstatic void SSEOP(movhps_r128_m64)() // Opcode 0f 16\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\t// MOVLHPS opcode\n\t\tXMM((modrm >> 3) & 0x7).q[1] = XMM(modrm & 0x7).q[0];\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t} else {\n\t\t// MOVHPS opcode\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM_HI64(ea, XMM((modrm >> 3) & 0x7));\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t}\n}\n\nstatic void SSEOP(movhpd_r128_m64)() // Opcode 66 0f 16\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\t// unsupported by cpu\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t} else {\n\t\t// MOVHPS opcode\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM_HI64(ea, XMM((modrm >> 3) & 0x7));\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t}\n}\n\nstatic void SSEOP(movhps_m64_r128)() // Opcode 0f 17\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\t// unsupported by cpu\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITEXMM_HI64(ea, XMM((modrm >> 3) & 0x7));\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t}\n}\n\nstatic void SSEOP(movhpd_m64_r128)() // Opcode 66 0f 17\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\t// unsupported by cpu\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITEXMM_HI64(ea, XMM((modrm >> 3) & 0x7));\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t}\n}\n\nstatic void SSEOP(movntps_m128_r128)() // Opcode 0f 2b\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\t// unsupported by cpu\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t} else {\n\t\t// since cache is not implemented\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITEXMM(ea, XMM((modrm >> 3) & 0x7));\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t}\n}\n\nstatic void SSEOP(movmskps_r16_r128)() // Opcode 0f 50\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint b;\n\t\tb=(XMM(modrm & 0x7).d[0] >> 31) & 1;\n\t\tb=b | ((XMM(modrm & 0x7).d[1] >> 30) & 2);\n\t\tb=b | ((XMM(modrm & 0x7).d[2] >> 29) & 4);\n\t\tb=b | ((XMM(modrm & 0x7).d[3] >> 28) & 8);\n\t\tSTORE_REG16(modrm, b);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movmskps_r32_r128)() // Opcode 0f 50\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint b;\n\t\tb=(XMM(modrm & 0x7).d[0] >> 31) & 1;\n\t\tb=b | ((XMM(modrm & 0x7).d[1] >> 30) & 2);\n\t\tb=b | ((XMM(modrm & 0x7).d[2] >> 29) & 4);\n\t\tb=b | ((XMM(modrm & 0x7).d[3] >> 28) & 8);\n\t\tSTORE_REG32(modrm, b);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movmskpd_r32_r128)() // Opcode 66 0f 50\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint b;\n\t\tb=(XMM(modrm & 0x7).q[0] >> 63) & 1;\n\t\tb=b | ((XMM(modrm & 0x7).q[1] >> 62) & 2);\n\t\tSTORE_REG32(modrm, b);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movq2dq_r128_r64)() // Opcode f3 0f d6\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).q[0] = MMX(modrm & 7).q;\n\t\tXMM((modrm >> 3) & 0x7).q[1] = 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movdqu_r128_rm128)() // Opcode f3 0f 6f\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).q[0] = XMM(modrm & 0x7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = XMM(modrm & 0x7).q[1];\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, XMM((modrm >> 3) & 0x7));\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movdqu_rm128_r128)() // Opcode f3 0f 7f\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM(modrm & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0];\n\t\tXMM(modrm & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1];\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITEXMM(ea, XMM((modrm >> 3) & 0x7));\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movd_m128_rm32)() // Opcode 66 0f 6e\n{\n\tUINT8 modrm = FETCH();\n\tif (modrm >= 0xc0) {\n\t\tXMM((modrm >> 3) & 0x7).d[0] = LOAD_RM32(modrm);\n\t}\n\telse {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tXMM((modrm >> 3) & 0x7).d[0] = READ32(ea);\n\t}\n\tXMM((modrm >> 3) & 0x7).d[1] = 0;\n\tXMM((modrm >> 3) & 0x7).q[1] = 0;\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movdqa_m128_rm128)() // Opcode 66 0f 6f\n{\n\tUINT8 modrm = FETCH();\n\tif (modrm >= 0xc0) {\n\t\tXMM((modrm >> 3) & 0x7).q[0] = XMM(modrm & 0x7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = XMM(modrm & 0x7).q[1];\n\t}\n\telse {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, XMM((modrm >> 3) & 0x7));\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movq_r128_r128m64)() // Opcode f3 0f 7e\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).q[0] = XMM(modrm & 0x7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = 0;\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tXMM((modrm >> 3) & 0x7).q[0] = READ64(ea);\n\t\tXMM((modrm >> 3) & 0x7).q[1] = 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movd_rm32_r128)() // Opcode 66 0f 7e\n{\n\tUINT8 modrm = FETCH();\n\tif (modrm >= 0xc0) {\n\t\tSTORE_RM32(modrm, XMM((modrm >> 3) & 0x7).d[0]);\n\t}\n\telse {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITE32(ea, XMM((modrm >> 3) & 0x7).d[0]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movdqa_rm128_r128)() // Opcode 66 0f 7f\n{\n\tUINT8 modrm = FETCH();\n\tif (modrm >= 0xc0) {\n\t\tXMM(modrm & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0];\n\t\tXMM(modrm & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1];\n\t}\n\telse {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITEXMM(ea, XMM((modrm >> 3) & 0x7));\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pmovmskb_r16_r64)() // Opcode 0f d7\n{\n\t//MMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint b;\n\t\tb=(MMX(modrm & 0x7).b[0] >> 7) & 1;\n\t\tb=b | ((MMX(modrm & 0x7).b[1] >> 6) & 2);\n\t\tb=b | ((MMX(modrm & 0x7).b[2] >> 5) & 4);\n\t\tb=b | ((MMX(modrm & 0x7).b[3] >> 4) & 8);\n\t\tb=b | ((MMX(modrm & 0x7).b[4] >> 3) & 16);\n\t\tb=b | ((MMX(modrm & 0x7).b[5] >> 2) & 32);\n\t\tb=b | ((MMX(modrm & 0x7).b[6] >> 1) & 64);\n\t\tb=b | ((MMX(modrm & 0x7).b[7] >> 0) & 128);\n\t\tSTORE_REG16(modrm, b);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pmovmskb_r32_r64)() // Opcode 0f d7\n{\n\t//MMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint b;\n\t\tb=(MMX(modrm & 0x7).b[0] >> 7) & 1;\n\t\tb=b | ((MMX(modrm & 0x7).b[1] >> 6) & 2);\n\t\tb=b | ((MMX(modrm & 0x7).b[2] >> 5) & 4);\n\t\tb=b | ((MMX(modrm & 0x7).b[3] >> 4) & 8);\n\t\tb=b | ((MMX(modrm & 0x7).b[4] >> 3) & 16);\n\t\tb=b | ((MMX(modrm & 0x7).b[5] >> 2) & 32);\n\t\tb=b | ((MMX(modrm & 0x7).b[6] >> 1) & 64);\n\t\tb=b | ((MMX(modrm & 0x7).b[7] >> 0) & 128);\n\t\tSTORE_REG32(modrm, b);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pmovmskb_r32_r128)() // Opcode 66 0f d7\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 b;\n\t\tb=(XMM(modrm & 0x7).b[0] >> 7) & 1;\n\t\tb=b | ((XMM(modrm & 0x7).b[1] >> 6) & 2);\n\t\tb=b | ((XMM(modrm & 0x7).b[2] >> 5) & 4);\n\t\tb=b | ((XMM(modrm & 0x7).b[3] >> 4) & 8);\n\t\tb=b | ((XMM(modrm & 0x7).b[4] >> 3) & 16);\n\t\tb=b | ((XMM(modrm & 0x7).b[5] >> 2) & 32);\n\t\tb=b | ((XMM(modrm & 0x7).b[6] >> 1) & 64);\n\t\tb=b | ((XMM(modrm & 0x7).b[7] >> 0) & 128);\n\t\tb=b | ((XMM(modrm & 0x7).b[8] << 1) & 256);\n\t\tb=b | ((XMM(modrm & 0x7).b[9] << 2) & 512);\n\t\tb=b | ((XMM(modrm & 0x7).b[10] << 3) & 1024);\n\t\tb=b | ((XMM(modrm & 0x7).b[11] << 4) & 2048);\n\t\tb=b | ((XMM(modrm & 0x7).b[12] << 5) & 4096);\n\t\tb=b | ((XMM(modrm & 0x7).b[13] << 6) & 8192);\n\t\tb=b | ((XMM(modrm & 0x7).b[14] << 7) & 16384);\n\t\tb=b | ((XMM(modrm & 0x7).b[15] << 8) & 32768);\n\t\tSTORE_REG32(modrm, b);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(xorps)() // Opcode 0f 57\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).d[0] = XMM((modrm >> 3) & 0x7).d[0] ^ XMM(modrm & 0x7).d[0];\n\t\tXMM((modrm >> 3) & 0x7).d[1] = XMM((modrm >> 3) & 0x7).d[1] ^ XMM(modrm & 0x7).d[1];\n\t\tXMM((modrm >> 3) & 0x7).d[2] = XMM((modrm >> 3) & 0x7).d[2] ^ XMM(modrm & 0x7).d[2];\n\t\tXMM((modrm >> 3) & 0x7).d[3] = XMM((modrm >> 3) & 0x7).d[3] ^ XMM(modrm & 0x7).d[3];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).d[0] = XMM((modrm >> 3) & 0x7).d[0] ^ src.d[0];\n\t\tXMM((modrm >> 3) & 0x7).d[1] = XMM((modrm >> 3) & 0x7).d[1] ^ src.d[1];\n\t\tXMM((modrm >> 3) & 0x7).d[2] = XMM((modrm >> 3) & 0x7).d[2] ^ src.d[2];\n\t\tXMM((modrm >> 3) & 0x7).d[3] = XMM((modrm >> 3) & 0x7).d[3] ^ src.d[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(xorpd_r128_rm128)() // Opcode 66 0f 57\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] ^ XMM(modrm & 0x7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] ^ XMM(modrm & 0x7).q[1];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] ^ src.q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] ^ src.q[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(addps)() // Opcode 0f 58\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] + XMM(modrm & 0x7).f[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] + XMM(modrm & 0x7).f[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] + XMM(modrm & 0x7).f[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] + XMM(modrm & 0x7).f[3];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] + src.f[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] + src.f[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] + src.f[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] + src.f[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(sqrtps_r128_rm128)() // Opcode 0f 51\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = sqrt(XMM(modrm & 0x7).f[0]);\n\t\tXMM((modrm >> 3) & 0x7).f[1] = sqrt(XMM(modrm & 0x7).f[1]);\n\t\tXMM((modrm >> 3) & 0x7).f[2] = sqrt(XMM(modrm & 0x7).f[2]);\n\t\tXMM((modrm >> 3) & 0x7).f[3] = sqrt(XMM(modrm & 0x7).f[3]);\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = sqrt(src.f[0]);\n\t\tXMM((modrm >> 3) & 0x7).f[1] = sqrt(src.f[1]);\n\t\tXMM((modrm >> 3) & 0x7).f[2] = sqrt(src.f[2]);\n\t\tXMM((modrm >> 3) & 0x7).f[3] = sqrt(src.f[3]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(rsqrtps_r128_rm128)() // Opcode 0f 52\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = 1.0 / sqrt(XMM(modrm & 0x7).f[0]);\n\t\tXMM((modrm >> 3) & 0x7).f[1] = 1.0 / sqrt(XMM(modrm & 0x7).f[1]);\n\t\tXMM((modrm >> 3) & 0x7).f[2] = 1.0 / sqrt(XMM(modrm & 0x7).f[2]);\n\t\tXMM((modrm >> 3) & 0x7).f[3] = 1.0 / sqrt(XMM(modrm & 0x7).f[3]);\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = 1.0 / sqrt(src.f[0]);\n\t\tXMM((modrm >> 3) & 0x7).f[1] = 1.0 / sqrt(src.f[1]);\n\t\tXMM((modrm >> 3) & 0x7).f[2] = 1.0 / sqrt(src.f[2]);\n\t\tXMM((modrm >> 3) & 0x7).f[3] = 1.0 / sqrt(src.f[3]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(rcpps_r128_rm128)() // Opcode 0f 53\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = 1.0 / XMM(modrm & 0x7).f[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = 1.0 / XMM(modrm & 0x7).f[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2] = 1.0 / XMM(modrm & 0x7).f[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3] = 1.0 / XMM(modrm & 0x7).f[3];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = 1.0 / src.f[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = 1.0 / src.f[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2] = 1.0 / src.f[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3] = 1.0 / src.f[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(andps_r128_rm128)() // Opcode 0f 54\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] & XMM(modrm & 0x7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] & XMM(modrm & 0x7).q[1];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] & src.q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] & src.q[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(andpd_r128_rm128)() // Opcode 66 0f 54\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] & XMM(modrm & 0x7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] & XMM(modrm & 0x7).q[1];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] & src.q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] & src.q[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(andnps_r128_rm128)() // Opcode 0f 55\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).q[0] = ~(XMM((modrm >> 3) & 0x7).q[0]) & XMM(modrm & 0x7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = ~(XMM((modrm >> 3) & 0x7).q[1]) & XMM(modrm & 0x7).q[1];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).q[0] = ~(XMM((modrm >> 3) & 0x7).q[0]) & src.q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = ~(XMM((modrm >> 3) & 0x7).q[1]) & src.q[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(andnpd_r128_rm128)() // Opcode 66 0f 55\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).q[0] = ~(XMM((modrm >> 3) & 0x7).q[0]) & XMM(modrm & 0x7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = ~(XMM((modrm >> 3) & 0x7).q[1]) & XMM(modrm & 0x7).q[1];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).q[0] = ~(XMM((modrm >> 3) & 0x7).q[0]) & src.q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = ~(XMM((modrm >> 3) & 0x7).q[1]) & src.q[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(orps_r128_rm128)() // Opcode 0f 56\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] | XMM(modrm & 0x7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] | XMM(modrm & 0x7).q[1];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] | src.q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] | src.q[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(orpd_r128_rm128)() // Opcode 66 0f 56\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] | XMM(modrm & 0x7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] | XMM(modrm & 0x7).q[1];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] | src.q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] | src.q[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(mulps)() // Opcode 0f 59 ????\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] * XMM(modrm & 0x7).f[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] * XMM(modrm & 0x7).f[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] * XMM(modrm & 0x7).f[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] * XMM(modrm & 0x7).f[3];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] * src.f[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] * src.f[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] * src.f[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] * src.f[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(subps)() // Opcode 0f 5c\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] - XMM(modrm & 0x7).f[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] - XMM(modrm & 0x7).f[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] - XMM(modrm & 0x7).f[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] - XMM(modrm & 0x7).f[3];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] - src.f[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] - src.f[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] - src.f[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] - src.f[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nINLINE float sse_min_single(float src1, float src2)\n{\n\t/*if ((src1 == 0) && (src2 == 0))\n\t    return src2;\n\tif (src1 = SNaN)\n\t    return src2;\n\tif (src2 = SNaN)\n\t    return src2;*/\n\tif (src1 < src2)\n\t\treturn src1;\n\treturn src2;\n}\n\nINLINE double sse_min_double(double src1, double src2)\n{\n\t/*if ((src1 == 0) && (src2 == 0))\n\t    return src2;\n\tif (src1 = SNaN)\n\t    return src2;\n\tif (src2 = SNaN)\n\t    return src2;*/\n\tif (src1 < src2)\n\t\treturn src1;\n\treturn src2;\n}\n\nstatic void SSEOP(minps)() // Opcode 0f 5d\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = sse_min_single(XMM((modrm >> 3) & 0x7).f[0], XMM(modrm & 0x7).f[0]);\n\t\tXMM((modrm >> 3) & 0x7).f[1] = sse_min_single(XMM((modrm >> 3) & 0x7).f[1], XMM(modrm & 0x7).f[1]);\n\t\tXMM((modrm >> 3) & 0x7).f[2] = sse_min_single(XMM((modrm >> 3) & 0x7).f[2], XMM(modrm & 0x7).f[2]);\n\t\tXMM((modrm >> 3) & 0x7).f[3] = sse_min_single(XMM((modrm >> 3) & 0x7).f[3], XMM(modrm & 0x7).f[3]);\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = sse_min_single(XMM((modrm >> 3) & 0x7).f[0], src.f[0]);\n\t\tXMM((modrm >> 3) & 0x7).f[1] = sse_min_single(XMM((modrm >> 3) & 0x7).f[1], src.f[1]);\n\t\tXMM((modrm >> 3) & 0x7).f[2] = sse_min_single(XMM((modrm >> 3) & 0x7).f[2], src.f[2]);\n\t\tXMM((modrm >> 3) & 0x7).f[3] = sse_min_single(XMM((modrm >> 3) & 0x7).f[3], src.f[3]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(divps)() // Opcode 0f 5e\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] / XMM(modrm & 0x7).f[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] / XMM(modrm & 0x7).f[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] / XMM(modrm & 0x7).f[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] / XMM(modrm & 0x7).f[3];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] / src.f[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] / src.f[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] / src.f[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] / src.f[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nINLINE float sse_max_single(float src1, float src2)\n{\n\t/*if ((src1 == 0) && (src2 == 0))\n\t    return src2;\n\tif (src1 = SNaN)\n\t    return src2;\n\tif (src2 = SNaN)\n\t    return src2;*/\n\tif (src1 > src2)\n\t\treturn src1;\n\treturn src2;\n}\n\nINLINE double sse_max_double(double src1, double src2)\n{\n\t/*if ((src1 == 0) && (src2 == 0))\n\t    return src2;\n\tif (src1 = SNaN)\n\t    return src2;\n\tif (src2 = SNaN)\n\t    return src2;*/\n\tif (src1 > src2)\n\t\treturn src1;\n\treturn src2;\n}\n\nstatic void SSEOP(maxps)() // Opcode 0f 5f\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = sse_max_single(XMM((modrm >> 3) & 0x7).f[0], XMM(modrm & 0x7).f[0]);\n\t\tXMM((modrm >> 3) & 0x7).f[1] = sse_max_single(XMM((modrm >> 3) & 0x7).f[1], XMM(modrm & 0x7).f[1]);\n\t\tXMM((modrm >> 3) & 0x7).f[2] = sse_max_single(XMM((modrm >> 3) & 0x7).f[2], XMM(modrm & 0x7).f[2]);\n\t\tXMM((modrm >> 3) & 0x7).f[3] = sse_max_single(XMM((modrm >> 3) & 0x7).f[3], XMM(modrm & 0x7).f[3]);\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = sse_max_single(XMM((modrm >> 3) & 0x7).f[0], src.f[0]);\n\t\tXMM((modrm >> 3) & 0x7).f[1] = sse_max_single(XMM((modrm >> 3) & 0x7).f[1], src.f[1]);\n\t\tXMM((modrm >> 3) & 0x7).f[2] = sse_max_single(XMM((modrm >> 3) & 0x7).f[2], src.f[2]);\n\t\tXMM((modrm >> 3) & 0x7).f[3] = sse_max_single(XMM((modrm >> 3) & 0x7).f[3], src.f[3]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(maxss_r128_r128m32)() // Opcode f3 0f 5f\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = sse_max_single(XMM((modrm >> 3) & 0x7).f[0], XMM(modrm & 0x7).f[0]);\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tsrc.d[0]=READ32(ea);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = sse_max_single(XMM((modrm >> 3) & 0x7).f[0], src.f[0]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(addss)() // Opcode f3 0f 58\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] + XMM(modrm & 0x7).f[0];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] + src.f[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(subss)() // Opcode f3 0f 5c\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] - XMM(modrm & 0x7).f[0];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] - src.f[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(mulss)() // Opcode f3 0f 5e\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] * XMM(modrm & 0x7).f[0];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] * src.f[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(divss)() // Opcode 0f 59\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] / XMM(modrm & 0x7).f[0];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] / src.f[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(rcpss_r128_r128m32)() // Opcode f3 0f 53\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = 1.0 / XMM(modrm & 0x7).f[0];\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\ts.d[0]=READ32(ea);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = 1.0 / s.f[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(sqrtss_r128_r128m32)() // Opcode f3 0f 51\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = sqrt(XMM(modrm & 0x7).f[0]);\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\ts.d[0]=READ32(ea);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = sqrt(s.f[0]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(rsqrtss_r128_r128m32)() // Opcode f3 0f 52\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = 1.0 / sqrt(XMM(modrm & 0x7).f[0]);\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\ts.d[0]=READ32(ea);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = 1.0 / sqrt(s.f[0]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(minss_r128_r128m32)() // Opcode f3 0f 5d\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] < XMM(modrm & 0x7).f[0] ? XMM((modrm >> 3) & 0x7).f[0] : XMM(modrm & 0x7).f[0];\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\ts.d[0] = READ32(ea);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] < s.f[0] ? XMM((modrm >> 3) & 0x7).f[0] : s.f[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(comiss_r128_r128m32)() // Opcode 0f 2f\n{\n\tfloat32 a,b;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\ta = XMM((modrm >> 3) & 0x7).d[0];\n\t\tb = XMM(modrm & 0x7).d[0];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\ta = XMM((modrm >> 3) & 0x7).d[0];\n\t\tb = src.d[0];\n\t}\n\tm_OF=0;\n\tm_SF=0;\n\tm_AF=0;\n\tif (float32_is_nan(a) || float32_is_nan(b))\n\t{\n\t\tm_ZF = 1;\n\t\tm_PF = 1;\n\t\tm_CF = 1;\n\t}\n\telse\n\t{\n\t\tm_ZF = 0;\n\t\tm_PF = 0;\n\t\tm_CF = 0;\n\t\tif (float32_eq(a, b))\n\t\t\tm_ZF = 1;\n\t\tif (float32_lt(a, b))\n\t\t\tm_CF = 1;\n\t}\n\t// should generate exception when at least one of the operands is either QNaN or SNaN\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(comisd_r128_r128m64)() // Opcode 66 0f 2f\n{\n\tfloat64 a,b;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\ta = XMM((modrm >> 3) & 0x7).q[0];\n\t\tb = XMM(modrm & 0x7).q[0];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\ta = XMM((modrm >> 3) & 0x7).q[0];\n\t\tb = src.q[0];\n\t}\n\tm_OF=0;\n\tm_SF=0;\n\tm_AF=0;\n\tif (float64_is_nan(a) || float64_is_nan(b))\n\t{\n\t\tm_ZF = 1;\n\t\tm_PF = 1;\n\t\tm_CF = 1;\n\t}\n\telse\n\t{\n\t\tm_ZF = 0;\n\t\tm_PF = 0;\n\t\tm_CF = 0;\n\t\tif (float64_eq(a, b))\n\t\t\tm_ZF = 1;\n\t\tif (float64_lt(a, b))\n\t\t\tm_CF = 1;\n\t}\n\t// should generate exception when at least one of the operands is either QNaN or SNaN\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(ucomiss_r128_r128m32)() // Opcode 0f 2e\n{\n\tfloat32 a,b;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\ta = XMM((modrm >> 3) & 0x7).d[0];\n\t\tb = XMM(modrm & 0x7).d[0];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\ta = XMM((modrm >> 3) & 0x7).d[0];\n\t\tb = src.d[0];\n\t}\n\tm_OF=0;\n\tm_SF=0;\n\tm_AF=0;\n\tif (float32_is_nan(a) || float32_is_nan(b))\n\t{\n\t\tm_ZF = 1;\n\t\tm_PF = 1;\n\t\tm_CF = 1;\n\t}\n\telse\n\t{\n\t\tm_ZF = 0;\n\t\tm_PF = 0;\n\t\tm_CF = 0;\n\t\tif (float32_eq(a, b))\n\t\t\tm_ZF = 1;\n\t\tif (float32_lt(a, b))\n\t\t\tm_CF = 1;\n\t}\n\t// should generate exception when at least one of the operands is SNaN\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(ucomisd_r128_r128m64)() // Opcode 66 0f 2e\n{\n\tfloat64 a,b;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\ta = XMM((modrm >> 3) & 0x7).q[0];\n\t\tb = XMM(modrm & 0x7).q[0];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\ta = XMM((modrm >> 3) & 0x7).q[0];\n\t\tb = src.q[0];\n\t}\n\tm_OF=0;\n\tm_SF=0;\n\tm_AF=0;\n\tif (float64_is_nan(a) || float64_is_nan(b))\n\t{\n\t\tm_ZF = 1;\n\t\tm_PF = 1;\n\t\tm_CF = 1;\n\t}\n\telse\n\t{\n\t\tm_ZF = 0;\n\t\tm_PF = 0;\n\t\tm_CF = 0;\n\t\tif (float64_eq(a, b))\n\t\t\tm_ZF = 1;\n\t\tif (float64_lt(a, b))\n\t\t\tm_CF = 1;\n\t}\n\t// should generate exception when at least one of the operands is SNaN\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(shufps)() // Opcode 0f c6\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 sel = FETCH();\n\tint m1,m2,m3,m4;\n\tint s,d;\n\tm1=sel & 3;\n\tm2=(sel >> 2) & 3;\n\tm3=(sel >> 4) & 3;\n\tm4=(sel >> 6) & 3;\n\ts=modrm & 0x7;\n\td=(modrm >> 3) & 0x7;\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 t1,t2,t3,t4;\n\t\tt1=XMM(d).d[m1];\n\t\tt2=XMM(d).d[m2];\n\t\tt3=XMM(s).d[m3];\n\t\tt4=XMM(s).d[m4];\n\t\tXMM(d).d[0]=t1;\n\t\tXMM(d).d[1]=t2;\n\t\tXMM(d).d[2]=t3;\n\t\tXMM(d).d[3]=t4;\n\t} else {\n\t\tUINT32 t1,t2;\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tt1=XMM(d).d[m1];\n\t\tt2=XMM(d).d[m2];\n\t\tXMM(d).d[0]=t1;\n\t\tXMM(d).d[1]=t2;\n\t\tXMM(d).d[2]=src.d[m3];\n\t\tXMM(d).d[3]=src.d[m4];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(shufpd_r128_rm128_i8)() // Opcode 66 0f c6\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 sel = FETCH();\n\tint m1,m2;\n\tint s,d;\n\tm1=sel & 1;\n\tm2=(sel >> 1) & 1;\n\ts=modrm & 0x7;\n\td=(modrm >> 3) & 0x7;\n\tif( modrm >= 0xc0 ) {\n\t\tUINT64 t1,t2;\n\t\tt1=XMM(d).q[m1];\n\t\tt2=XMM(s).q[m2];\n\t\tXMM(d).q[0]=t1;\n\t\tXMM(d).q[1]=t2;\n\t} else {\n\t\tUINT64 t1;\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tt1=XMM(d).q[m1];\n\t\tXMM(d).q[0]=t1;\n\t\tXMM(d).q[1]=src.q[m2];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(unpcklps_r128_rm128)() // Opcode 0f 14\n{\n\tUINT8 modrm = FETCH();\n\tint s,d;\n\tUINT32 t1, t2, t3, t4;\n\ts=modrm & 0x7;\n\td=(modrm >> 3) & 0x7;\n\tif( modrm >= 0xc0 ) {\n\t\tt1 = XMM(s).d[1];\n\t\tt2 = XMM(d).d[1];\n\t\tt3 = XMM(s).d[0];\n\t\tt4 = XMM(d).d[0];\n\t\tXMM(d).d[3]=t1;\n\t\tXMM(d).d[2]=t2;\n\t\tXMM(d).d[1]=t3;\n\t\tXMM(d).d[0]=t4;\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tt2 = XMM(d).d[1];\n\t\tXMM(d).d[3]=src.d[1];\n\t\tXMM(d).d[2]=t2;\n\t\tXMM(d).d[1]=src.d[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(unpcklpd_r128_rm128)() // Opcode 66 0f 14\n{\n\tUINT8 modrm = FETCH();\n\tint s,d;\n\ts=modrm & 0x7;\n\td=(modrm >> 3) & 0x7;\n\tif( modrm >= 0xc0 ) {\n\t\tXMM(d).q[1]=XMM(s).q[0];\n\t\tXMM(d).q[0]=XMM(d).q[0];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM(d).q[1]=src.q[0];\n\t\tXMM(d).q[0]=XMM(d).q[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(unpckhps_r128_rm128)() // Opcode 0f 15\n{\n\tUINT8 modrm = FETCH();\n\tint s,d;\n\tUINT32 t1, t2, t3, t4;\n\ts=modrm & 0x7;\n\td=(modrm >> 3) & 0x7;\n\tif( modrm >= 0xc0 ) {\n\t\tt1 = XMM(d).d[2];\n\t\tt2 = XMM(s).d[2];\n\t\tt3 = XMM(d).d[3];\n\t\tt4 = XMM(s).d[3];\n\t\tXMM(d).d[0]=t1;\n\t\tXMM(d).d[1]=t2;\n\t\tXMM(d).d[2]=t3;\n\t\tXMM(d).d[3]=t4;\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tt1 = XMM(d).d[2];\n\t\tt2 = XMM(d).d[3];\n\t\tXMM(d).d[0]=t1;\n\t\tXMM(d).d[1]=src.d[2];\n\t\tXMM(d).d[2]=t2;\n\t\tXMM(d).d[3]=src.d[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(unpckhpd_r128_rm128)() // Opcode 66 0f 15\n{\n\tUINT8 modrm = FETCH();\n\tint s,d;\n\ts=modrm & 0x7;\n\td=(modrm >> 3) & 0x7;\n\tif( modrm >= 0xc0 ) {\n\t\tXMM(d).q[0]=XMM(d).q[1];\n\t\tXMM(d).q[1]=XMM(s).q[1];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM(d).q[0]=XMM(d).q[1];\n\t\tXMM(d).q[1]=src.q[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nINLINE bool sse_issingleordered(float op1, float op2)\n{\n\t// TODO: true when at least one of the two source operands being compared is a NaN\n\treturn (op1 != op1) || (op1 != op2);\n}\n\nINLINE bool sse_issingleunordered(float op1, float op2)\n{\n\t// TODO: true when neither source operand is a NaN\n\treturn !((op1 != op1) || (op1 != op2));\n}\n\nINLINE bool sse_isdoubleordered(double op1, double op2)\n{\n\t// TODO: true when at least one of the two source operands being compared is a NaN\n\treturn (op1 != op1) || (op1 != op2);\n}\n\nINLINE bool sse_isdoubleunordered(double op1, double op2)\n{\n\t// TODO: true when neither source operand is a NaN\n\treturn !((op1 != op1) || (op1 != op2));\n}\n\nstatic void SSEOP(predicate_compare_single)(UINT8 imm8, XMM_REG d, XMM_REG s)\n{\n\tswitch (imm8 & 7)\n\t{\n\tcase 0:\n\t\td.d[0]=d.f[0] == s.f[0] ? 0xffffffff : 0;\n\t\td.d[1]=d.f[1] == s.f[1] ? 0xffffffff : 0;\n\t\td.d[2]=d.f[2] == s.f[2] ? 0xffffffff : 0;\n\t\td.d[3]=d.f[3] == s.f[3] ? 0xffffffff : 0;\n\t\tbreak;\n\tcase 1:\n\t\td.d[0]=d.f[0] < s.f[0] ? 0xffffffff : 0;\n\t\td.d[1]=d.f[1] < s.f[1] ? 0xffffffff : 0;\n\t\td.d[2]=d.f[2] < s.f[2] ? 0xffffffff : 0;\n\t\td.d[3]=d.f[3] < s.f[3] ? 0xffffffff : 0;\n\t\tbreak;\n\tcase 2:\n\t\td.d[0]=d.f[0] <= s.f[0] ? 0xffffffff : 0;\n\t\td.d[1]=d.f[1] <= s.f[1] ? 0xffffffff : 0;\n\t\td.d[2]=d.f[2] <= s.f[2] ? 0xffffffff : 0;\n\t\td.d[3]=d.f[3] <= s.f[3] ? 0xffffffff : 0;\n\t\tbreak;\n\tcase 3:\n\t\td.d[0]=sse_issingleunordered(d.f[0], s.f[0]) ? 0xffffffff : 0;\n\t\td.d[1]=sse_issingleunordered(d.f[1], s.f[1]) ? 0xffffffff : 0;\n\t\td.d[2]=sse_issingleunordered(d.f[2], s.f[2]) ? 0xffffffff : 0;\n\t\td.d[3]=sse_issingleunordered(d.f[3], s.f[3]) ? 0xffffffff : 0;\n\t\tbreak;\n\tcase 4:\n\t\td.d[0]=d.f[0] != s.f[0] ? 0xffffffff : 0;\n\t\td.d[1]=d.f[1] != s.f[1] ? 0xffffffff : 0;\n\t\td.d[2]=d.f[2] != s.f[2] ? 0xffffffff : 0;\n\t\td.d[3]=d.f[3] != s.f[3] ? 0xffffffff : 0;\n\t\tbreak;\n\tcase 5:\n\t\td.d[0]=d.f[0] < s.f[0] ? 0 : 0xffffffff;\n\t\td.d[1]=d.f[1] < s.f[1] ? 0 : 0xffffffff;\n\t\td.d[2]=d.f[2] < s.f[2] ? 0 : 0xffffffff;\n\t\td.d[3]=d.f[3] < s.f[3] ? 0 : 0xffffffff;\n\t\tbreak;\n\tcase 6:\n\t\td.d[0]=d.f[0] <= s.f[0] ? 0 : 0xffffffff;\n\t\td.d[1]=d.f[1] <= s.f[1] ? 0 : 0xffffffff;\n\t\td.d[2]=d.f[2] <= s.f[2] ? 0 : 0xffffffff;\n\t\td.d[3]=d.f[3] <= s.f[3] ? 0 : 0xffffffff;\n\t\tbreak;\n\tcase 7:\n\t\td.d[0]=sse_issingleordered(d.f[0], s.f[0]) ? 0xffffffff : 0;\n\t\td.d[1]=sse_issingleordered(d.f[1], s.f[1]) ? 0xffffffff : 0;\n\t\td.d[2]=sse_issingleordered(d.f[2], s.f[2]) ? 0xffffffff : 0;\n\t\td.d[3]=sse_issingleordered(d.f[3], s.f[3]) ? 0xffffffff : 0;\n\t\tbreak;\n\t}\n}\n\nstatic void SSEOP(predicate_compare_double)(UINT8 imm8, XMM_REG d, XMM_REG s)\n{\n\tswitch (imm8 & 7)\n\t{\n\tcase 0:\n\t\td.q[0]=d.f64[0] == s.f64[0] ? 0xffffffffffffffff : 0;\n\t\td.q[1]=d.f64[1] == s.f64[1] ? 0xffffffffffffffff : 0;\n\t\tbreak;\n\tcase 1:\n\t\td.q[0]=d.f64[0] < s.f64[0] ? 0xffffffffffffffff : 0;\n\t\td.q[1]=d.f64[1] < s.f64[1] ? 0xffffffffffffffff : 0;\n\t\tbreak;\n\tcase 2:\n\t\td.q[0]=d.f64[0] <= s.f64[0] ? 0xffffffffffffffff : 0;\n\t\td.q[1]=d.f64[1] <= s.f64[1] ? 0xffffffffffffffff : 0;\n\t\tbreak;\n\tcase 3:\n\t\td.q[0]=sse_isdoubleunordered(d.f64[0], s.f64[0]) ? 0xffffffffffffffff : 0;\n\t\td.q[1]=sse_isdoubleunordered(d.f64[1], s.f64[1]) ? 0xffffffffffffffff : 0;\n\t\tbreak;\n\tcase 4:\n\t\td.q[0]=d.f64[0] != s.f64[0] ? 0xffffffffffffffff : 0;\n\t\td.q[1]=d.f64[1] != s.f64[1] ? 0xffffffffffffffff : 0;\n\t\tbreak;\n\tcase 5:\n\t\td.q[0]=d.f64[0] < s.f64[0] ? 0 : 0xffffffffffffffff;\n\t\td.q[1]=d.f64[1] < s.f64[1] ? 0 : 0xffffffffffffffff;\n\t\tbreak;\n\tcase 6:\n\t\td.q[0]=d.f64[0] <= s.f64[0] ? 0 : 0xffffffffffffffff;\n\t\td.q[1]=d.f64[1] <= s.f64[1] ? 0 : 0xffffffffffffffff;\n\t\tbreak;\n\tcase 7:\n\t\td.q[0]=sse_isdoubleordered(d.f64[0], s.f64[0]) ? 0xffffffffffffffff : 0;\n\t\td.q[1]=sse_isdoubleordered(d.f64[1], s.f64[1]) ? 0xffffffffffffffff : 0;\n\t\tbreak;\n\t}\n}\n\nstatic void SSEOP(predicate_compare_single_scalar)(UINT8 imm8, XMM_REG d, XMM_REG s)\n{\n\tswitch (imm8 & 7)\n\t{\n\tcase 0:\n\t\td.d[0]=d.f[0] == s.f[0] ? 0xffffffff : 0;\n\t\tbreak;\n\tcase 1:\n\t\td.d[0]=d.f[0] < s.f[0] ? 0xffffffff : 0;\n\t\tbreak;\n\tcase 2:\n\t\td.d[0]=d.f[0] <= s.f[0] ? 0xffffffff : 0;\n\t\tbreak;\n\tcase 3:\n\t\td.d[0]=sse_issingleunordered(d.f[0], s.f[0]) ? 0xffffffff : 0;\n\t\tbreak;\n\tcase 4:\n\t\td.d[0]=d.f[0] != s.f[0] ? 0xffffffff : 0;\n\t\tbreak;\n\tcase 5:\n\t\td.d[0]=d.f[0] < s.f[0] ? 0 : 0xffffffff;\n\t\tbreak;\n\tcase 6:\n\t\td.d[0]=d.f[0] <= s.f[0] ? 0 : 0xffffffff;\n\t\tbreak;\n\tcase 7:\n\t\td.d[0]=sse_issingleordered(d.f[0], s.f[0]) ? 0xffffffff : 0;\n\t\tbreak;\n\t}\n}\n\nstatic void SSEOP(predicate_compare_double_scalar)(UINT8 imm8, XMM_REG d, XMM_REG s)\n{\n\tswitch (imm8 & 7)\n\t{\n\tcase 0:\n\t\td.q[0]=d.f64[0] == s.f64[0] ? 0xffffffffffffffff : 0;\n\t\tbreak;\n\tcase 1:\n\t\td.q[0]=d.f64[0] < s.f64[0] ? 0xffffffffffffffff : 0;\n\t\tbreak;\n\tcase 2:\n\t\td.q[0]=d.f64[0] <= s.f64[0] ? 0xffffffffffffffff : 0;\n\t\tbreak;\n\tcase 3:\n\t\td.q[0]=sse_isdoubleunordered(d.f64[0], s.f64[0]) ? 0xffffffffffffffff : 0;\n\t\tbreak;\n\tcase 4:\n\t\td.q[0]=d.f64[0] != s.f64[0] ? 0xffffffffffffffff : 0;\n\t\tbreak;\n\tcase 5:\n\t\td.q[0]=d.f64[0] < s.f64[0] ? 0 : 0xffffffffffffffff;\n\t\tbreak;\n\tcase 6:\n\t\td.q[0]=d.f64[0] <= s.f64[0] ? 0 : 0xffffffffffffffff;\n\t\tbreak;\n\tcase 7:\n\t\td.q[0]=sse_isdoubleordered(d.f64[0], s.f64[0]) ? 0xffffffffffffffff : 0;\n\t\tbreak;\n\t}\n}\n\nstatic void SSEOP(cmpps_r128_rm128_i8)() // Opcode 0f c2\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\tUINT8 imm8 = FETCH();\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tsse_predicate_compare_single(imm8, XMM(d), XMM(s));\n\t} else {\n\t\tint d;\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tUINT8 imm8 = FETCH();\n\t\tREADXMM(ea, s);\n\t\td=(modrm >> 3) & 0x7;\n\t\tsse_predicate_compare_single(imm8, XMM(d), s);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cmppd_r128_rm128_i8)() // Opcode 66 0f c2\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\tUINT8 imm8 = FETCH();\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tsse_predicate_compare_double(imm8, XMM(d), XMM(s));\n\t} else {\n\t\tint d;\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tUINT8 imm8 = FETCH();\n\t\tREADXMM(ea, s);\n\t\td=(modrm >> 3) & 0x7;\n\t\tsse_predicate_compare_double(imm8, XMM(d), s);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cmpss_r128_r128m32_i8)() // Opcode f3 0f c2\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\tUINT8 imm8 = FETCH();\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tsse_predicate_compare_single_scalar(imm8, XMM(d), XMM(s));\n\t} else {\n\t\tint d;\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tUINT8 imm8 = FETCH();\n\t\ts.d[0]=READ32(ea);\n\t\td=(modrm >> 3) & 0x7;\n\t\tsse_predicate_compare_single_scalar(imm8, XMM(d), s);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pinsrw_r64_r16m16_i8)() // Opcode 0f c4, 16bit register\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT8 imm8 = FETCH();\n\t\tUINT16 v = LOAD_RM16(modrm);\n\t\tif (m_xmm_operand_size)\n\t\t\tXMM((modrm >> 3) & 0x7).w[imm8 & 7] = v;\n\t\telse\n\t\t\tMMX((modrm >> 3) & 0x7).w[imm8 & 3] = v;\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tUINT8 imm8 = FETCH();\n\t\tUINT16 v = READ16(ea);\n\t\tif (m_xmm_operand_size)\n\t\t\tXMM((modrm >> 3) & 0x7).w[imm8 & 7] = v;\n\t\telse\n\t\t\tMMX((modrm >> 3) & 0x7).w[imm8 & 3] = v;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pinsrw_r64_r32m16_i8)() // Opcode 0f c4, 32bit register\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT8 imm8 = FETCH();\n\t\tUINT16 v = (UINT16)LOAD_RM32(modrm);\n\t\tMMX((modrm >> 3) & 0x7).w[imm8 & 3] = v;\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tUINT8 imm8 = FETCH();\n\t\tUINT16 v = READ16(ea);\n\t\tMMX((modrm >> 3) & 0x7).w[imm8 & 3] = v;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pinsrw_r128_r32m16_i8)() // Opcode 66 0f c4\n{\n\tUINT8 modrm = FETCH();\n\tif (modrm >= 0xc0) {\n\t\tUINT8 imm8 = FETCH();\n\t\tUINT16 v = (UINT16)LOAD_RM32(modrm);\n\t\tXMM((modrm >> 3) & 0x7).w[imm8 & 7] = v;\n\t}\n\telse {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tUINT8 imm8 = FETCH();\n\t\tUINT16 v = READ16(ea);\n\t\tXMM((modrm >> 3) & 0x7).w[imm8 & 7] = v;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pextrw_r16_r64_i8)() // Opcode 0f c5\n{\n\t//MMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT8 imm8 = FETCH();\n\t\tif (m_xmm_operand_size)\n\t\t\tSTORE_REG16(modrm, XMM(modrm & 0x7).w[imm8 & 7]);\n\t\telse\n\t\t\tSTORE_REG16(modrm, MMX(modrm & 0x7).w[imm8 & 3]);\n\t} else {\n\t\t//UINT8 imm8 = FETCH();\n\t\treport_invalid_modrm(\"pextrw_r16_r64_i8\", modrm);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pextrw_r32_r64_i8)() // Opcode 0f c5\n{\n\t//MMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT8 imm8 = FETCH();\n\t\tSTORE_REG32(modrm, MMX(modrm & 0x7).w[imm8 & 3]);\n\t} else {\n\t\t//UINT8 imm8 = FETCH();\n\t\treport_invalid_modrm(\"pextrw_r32_r64_i8\", modrm);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pextrw_reg_r128_i8)() // Opcode 66 0f c5\n{\n\tUINT8 modrm = FETCH();\n\tif (modrm >= 0xc0) {\n\t\tUINT8 imm8 = FETCH();\n\t\tSTORE_REG32(modrm, XMM(modrm & 0x7).w[imm8 & 7]);\n\t}\n\telse {\n\t\t//UINT8 imm8 = FETCH();\n\t\treport_invalid_modrm(\"sse_pextrw_reg_r128_i8\", modrm);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pminub_r64_rm64)() // Opcode 0f da\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n] = MMX((modrm >> 3) & 0x7).b[n] < MMX(modrm & 0x7).b[n] ? MMX((modrm >> 3) & 0x7).b[n] : MMX(modrm & 0x7).b[n];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n] = MMX((modrm >> 3) & 0x7).b[n] < s.b[n] ? MMX((modrm >> 3) & 0x7).b[n] : s.b[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pminub_r128_rm128)() // Opcode 66 0f da\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (int n=0;n < 16;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).b[n] = XMM((modrm >> 3) & 0x7).b[n] < XMM(modrm & 0x7).b[n] ? XMM((modrm >> 3) & 0x7).b[n] : XMM(modrm & 0x7).b[n];\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int n=0;n < 16;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).b[n] = XMM((modrm >> 3) & 0x7).b[n] < s.b[n] ? XMM((modrm >> 3) & 0x7).b[n] : s.b[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pmaxub_r64_rm64)() // Opcode 0f de\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n] = MMX((modrm >> 3) & 0x7).b[n] > MMX(modrm & 0x7).b[n] ? MMX((modrm >> 3) & 0x7).b[n] : MMX(modrm & 0x7).b[n];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n] = MMX((modrm >> 3) & 0x7).b[n] > s.b[n] ? MMX((modrm >> 3) & 0x7).b[n] : s.b[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pavgb_r64_rm64)() // Opcode 0f e0\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n] = ((UINT16)MMX((modrm >> 3) & 0x7).b[n] + (UINT16)MMX(modrm & 0x7).b[n] + 1) >> 1;\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n] = ((UINT16)MMX((modrm >> 3) & 0x7).b[n] + (UINT16)s.b[n] + 1) >> 1;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pavgw_r64_rm64)() // Opcode 0f e3\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).w[n] = ((UINT32)MMX((modrm >> 3) & 0x7).w[n] + (UINT32)MMX(modrm & 0x7).w[n] + 1) >> 1;\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).w[n] = ((UINT32)MMX((modrm >> 3) & 0x7).w[n] + (UINT32)s.w[n] + 1) >> 1;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pmulhuw_r64_rm64)()  // Opcode 0f e4\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).w[0]=((UINT32)MMX((modrm >> 3) & 0x7).w[0]*(UINT32)MMX(modrm & 7).w[0]) >> 16;\n\t\tMMX((modrm >> 3) & 0x7).w[1]=((UINT32)MMX((modrm >> 3) & 0x7).w[1]*(UINT32)MMX(modrm & 7).w[1]) >> 16;\n\t\tMMX((modrm >> 3) & 0x7).w[2]=((UINT32)MMX((modrm >> 3) & 0x7).w[2]*(UINT32)MMX(modrm & 7).w[2]) >> 16;\n\t\tMMX((modrm >> 3) & 0x7).w[3]=((UINT32)MMX((modrm >> 3) & 0x7).w[3]*(UINT32)MMX(modrm & 7).w[3]) >> 16;\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX((modrm >> 3) & 0x7).w[0]=((UINT32)MMX((modrm >> 3) & 0x7).w[0]*(UINT32)s.w[0]) >> 16;\n\t\tMMX((modrm >> 3) & 0x7).w[1]=((UINT32)MMX((modrm >> 3) & 0x7).w[1]*(UINT32)s.w[1]) >> 16;\n\t\tMMX((modrm >> 3) & 0x7).w[2]=((UINT32)MMX((modrm >> 3) & 0x7).w[2]*(UINT32)s.w[2]) >> 16;\n\t\tMMX((modrm >> 3) & 0x7).w[3]=((UINT32)MMX((modrm >> 3) & 0x7).w[3]*(UINT32)s.w[3]) >> 16;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pminsw_r64_rm64)() // Opcode 0f ea\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).s[n] = MMX((modrm >> 3) & 0x7).s[n] < MMX(modrm & 0x7).s[n] ? MMX((modrm >> 3) & 0x7).s[n] : MMX(modrm & 0x7).s[n];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).s[n] = MMX((modrm >> 3) & 0x7).s[n] < s.s[n] ? MMX((modrm >> 3) & 0x7).s[n] : s.s[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pmaxsw_r64_rm64)() // Opcode 0f ee\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).s[n] = MMX((modrm >> 3) & 0x7).s[n] > MMX(modrm & 0x7).s[n] ? MMX((modrm >> 3) & 0x7).s[n] : MMX(modrm & 0x7).s[n];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).s[n] = MMX((modrm >> 3) & 0x7).s[n] > s.s[n] ? MMX((modrm >> 3) & 0x7).s[n] : s.s[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pmuludq_r64_rm64)() // Opcode 0f f4\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).q = (UINT64)MMX((modrm >> 3) & 0x7).d[0] * (UINT64)MMX(modrm & 0x7).d[0];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX((modrm >> 3) & 0x7).q = (UINT64)MMX((modrm >> 3) & 0x7).d[0] * (UINT64)s.d[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pmuludq_r128_rm128)() // Opcode 66 0f f4\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).q[0] = (UINT64)XMM((modrm >> 3) & 0x7).d[0] * (UINT64)XMM(modrm & 0x7).d[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = (UINT64)XMM((modrm >> 3) & 0x7).d[2] * (UINT64)XMM(modrm & 0x7).d[2];\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tXMM((modrm >> 3) & 0x7).q[0] = (UINT64)XMM((modrm >> 3) & 0x7).d[0] * (UINT64)s.d[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = (UINT64)XMM((modrm >> 3) & 0x7).d[2] * (UINT64)s.d[2];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(psadbw_r64_rm64)() // Opcode 0f f6\n{\n\tint n;\n\tINT32 temp;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\ttemp=0;\n\t\tfor (n=0;n < 8;n++)\n\t\t\ttemp += abs((INT32)MMX((modrm >> 3) & 0x7).b[n] - (INT32)MMX(modrm & 0x7).b[n]);\n\t\tMMX((modrm >> 3) & 0x7).l=(UINT64)temp & 0xffff;\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\ttemp=0;\n\t\tfor (n=0;n < 8;n++)\n\t\t\ttemp += abs((INT32)MMX((modrm >> 3) & 0x7).b[n] - (INT32)s.b[n]);\n\t\tMMX((modrm >> 3) & 0x7).l=(UINT64)temp & 0xffff;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(psubq_r64_rm64)()  // Opcode 0f fb\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q - MMX(modrm & 7).q;\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q - s.q;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(psubq_r128_rm128)()  // Opcode 66 0f fb\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0] - XMM(modrm & 7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1]=XMM((modrm >> 3) & 0x7).q[1] - XMM(modrm & 7).q[1];\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tXMM((modrm >> 3) & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0] - s.q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1]=XMM((modrm >> 3) & 0x7).q[1] - s.q[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pshufd_r128_rm128_i8)() // Opcode 66 0f 70\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM_REG t;\n\t\tint s,d;\n\t\tUINT8 imm8 = FETCH();\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tt.q[0]=XMM(s).q[0];\n\t\tt.q[1]=XMM(s).q[1];\n\t\tXMM(d).d[0]=t.d[imm8 & 3];\n\t\tXMM(d).d[1]=t.d[(imm8 >> 2) & 3];\n\t\tXMM(d).d[2]=t.d[(imm8 >> 4) & 3];\n\t\tXMM(d).d[3]=t.d[(imm8 >> 6) & 3];\n\t} else {\n\t\tXMM_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tUINT8 imm8 = FETCH();\n\t\tREADXMM(ea, s);\n\t\tXMM(d).d[0]=s.d[(imm8 & 3)];\n\t\tXMM(d).d[1]=s.d[((imm8 >> 2) & 3)];\n\t\tXMM(d).d[2]=s.d[((imm8 >> 4) & 3)];\n\t\tXMM(d).d[3]=s.d[((imm8 >> 6) & 3)];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pshuflw_r128_rm128_i8)() // Opcode f2 0f 70\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM_REG t;\n\t\tint s,d;\n\t\tUINT8 imm8 = FETCH();\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tt.q[0]=XMM(s).q[0];\n\t\tXMM(d).q[1]=XMM(s).q[1];\n\t\tXMM(d).w[0]=t.w[imm8 & 3];\n\t\tXMM(d).w[1]=t.w[(imm8 >> 2) & 3];\n\t\tXMM(d).w[2]=t.w[(imm8 >> 4) & 3];\n\t\tXMM(d).w[3]=t.w[(imm8 >> 6) & 3];\n\t} else {\n\t\tXMM_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tUINT8 imm8 = FETCH();\n\t\tREADXMM(ea, s);\n\t\tXMM(d).q[1]=s.q[1];\n\t\tXMM(d).w[0]=s.w[imm8 & 3];\n\t\tXMM(d).w[1]=s.w[(imm8 >> 2) & 3];\n\t\tXMM(d).w[2]=s.w[(imm8 >> 4) & 3];\n\t\tXMM(d).w[3]=s.w[(imm8 >> 6) & 3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pshufhw_r128_rm128_i8)() // Opcode f3 0f 70\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM_REG t;\n\t\tint s,d;\n\t\tUINT8 imm8 = FETCH();\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tt.q[0]=XMM(s).q[1];\n\t\tXMM(d).q[0]=XMM(s).q[0];\n\t\tXMM(d).w[4]=t.w[imm8 & 3];\n\t\tXMM(d).w[5]=t.w[(imm8 >> 2) & 3];\n\t\tXMM(d).w[6]=t.w[(imm8 >> 4) & 3];\n\t\tXMM(d).w[7]=t.w[(imm8 >> 6) & 3];\n\t} else {\n\t\tXMM_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tUINT8 imm8 = FETCH();\n\t\tREADXMM(ea, s);\n\t\tXMM(d).q[0]=s.q[0];\n\t\tXMM(d).w[4]=s.w[4 + (imm8 & 3)];\n\t\tXMM(d).w[5]=s.w[4 + ((imm8 >> 2) & 3)];\n\t\tXMM(d).w[6]=s.w[4 + ((imm8 >> 4) & 3)];\n\t\tXMM(d).w[7]=s.w[4 + ((imm8 >> 6) & 3)];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(packsswb_r128_rm128)() // Opcode 66 0f 63\n{\n\tUINT8 modrm = FETCH();\n\tif (modrm >= 0xc0) {\n\t\tXMM_REG t;\n\t\tint s, d;\n\t\ts = modrm & 0x7;\n\t\td = (modrm >> 3) & 0x7;\n\t\tt.q[0] = XMM(s).q[0];\n\t\tt.q[1] = XMM(s).q[1];\n\t\tfor (int n = 0; n < 8; n++)\n\t\t\tXMM(d).c[n] = SaturatedSignedWordToSignedByte(XMM(d).s[n]);\n\t\tfor (int n = 0; n < 8; n++)\n\t\t\tXMM(d).c[n+8] = SaturatedSignedWordToSignedByte(t.s[n]);\n\t}\n\telse {\n\t\tXMM_REG s;\n\t\tint d = (modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int n = 0; n < 8; n++)\n\t\t\tXMM(d).c[n] = SaturatedSignedWordToSignedByte(XMM(d).s[n]);\n\t\tfor (int n = 0; n < 8; n++)\n\t\t\tXMM(d).c[n + 8] = SaturatedSignedWordToSignedByte(s.s[n]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(packssdw_r128_rm128)() // Opcode 66 0f 6b\n{\n\tUINT8 modrm = FETCH();\n\tif (modrm >= 0xc0) {\n\t\tXMM_REG t;\n\t\tint s, d;\n\t\ts = modrm & 0x7;\n\t\td = (modrm >> 3) & 0x7;\n\t\tt.q[0] = XMM(s).q[0];\n\t\tt.q[1] = XMM(s).q[1];\n\t\tXMM(d).s[0] = SaturatedSignedDwordToSignedWord(XMM(d).i[0]);\n\t\tXMM(d).s[1] = SaturatedSignedDwordToSignedWord(XMM(d).i[1]);\n\t\tXMM(d).s[2] = SaturatedSignedDwordToSignedWord(XMM(d).i[2]);\n\t\tXMM(d).s[3] = SaturatedSignedDwordToSignedWord(XMM(d).i[3]);\n\t\tXMM(d).s[4] = SaturatedSignedDwordToSignedWord(t.i[0]);\n\t\tXMM(d).s[5] = SaturatedSignedDwordToSignedWord(t.i[1]);\n\t\tXMM(d).s[6] = SaturatedSignedDwordToSignedWord(t.i[2]);\n\t\tXMM(d).s[7] = SaturatedSignedDwordToSignedWord(t.i[3]);\n\t}\n\telse {\n\t\tXMM_REG s;\n\t\tint d = (modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tXMM(d).s[0] = SaturatedSignedDwordToSignedWord(XMM(d).i[0]);\n\t\tXMM(d).s[1] = SaturatedSignedDwordToSignedWord(XMM(d).i[1]);\n\t\tXMM(d).s[2] = SaturatedSignedDwordToSignedWord(XMM(d).i[2]);\n\t\tXMM(d).s[3] = SaturatedSignedDwordToSignedWord(XMM(d).i[3]);\n\t\tXMM(d).s[4] = SaturatedSignedDwordToSignedWord(s.i[0]);\n\t\tXMM(d).s[5] = SaturatedSignedDwordToSignedWord(s.i[1]);\n\t\tXMM(d).s[6] = SaturatedSignedDwordToSignedWord(s.i[2]);\n\t\tXMM(d).s[7] = SaturatedSignedDwordToSignedWord(s.i[3]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pcmpgtb_r128_rm128)() // Opcode 66 0f 64\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tfor (int c=0;c <= 15;c++)\n\t\t\tXMM(d).b[c]=(XMM(d).c[c] > XMM(s).c[c]) ? 0xff : 0;\n\t} else {\n\t\tXMM_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int c=0;c <= 15;c++)\n\t\t\tXMM(d).b[c]=(XMM(d).c[c] > s.c[c]) ? 0xff : 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pcmpgtw_r128_rm128)() // Opcode 66 0f 65\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tfor (int c=0;c <= 7;c++)\n\t\t\tXMM(d).w[c]=(XMM(d).s[c] > XMM(s).s[c]) ? 0xffff : 0;\n\t} else {\n\t\tXMM_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int c=0;c <= 7;c++)\n\t\t\tXMM(d).w[c]=(XMM(d).s[c] > s.s[c]) ? 0xffff : 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pcmpgtd_r128_rm128)() // Opcode 66 0f 66\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tfor (int c=0;c <= 3;c++)\n\t\t\tXMM(d).d[c]=(XMM(d).i[c] > XMM(s).i[c]) ? 0xffffffff : 0;\n\t} else {\n\t\tXMM_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int c=0;c <= 3;c++)\n\t\t\tXMM(d).d[c]=(XMM(d).i[c] > s.i[c]) ? 0xffffffff : 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(packuswb_r128_rm128)() // Opcode 66 0f 67\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM_REG t;\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tt.q[0] = XMM(s).q[0];\n\t\tt.q[1] = XMM(s).q[1];\n\t\tfor (int n = 0; n < 8;n++)\n\t\t\tXMM(d).b[n]=SaturatedSignedWordToUnsignedByte(XMM(d).s[n]);\n\t\tfor (int n = 0; n < 8;n++)\n\t\t\tXMM(d).b[n+8]=SaturatedSignedWordToUnsignedByte(t.s[n]);\n\t} else {\n\t\tXMM_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int n = 0; n < 8;n++)\n\t\t\tXMM(d).b[n]=SaturatedSignedWordToUnsignedByte(XMM(d).s[n]);\n\t\tfor (int n = 0; n < 8;n++)\n\t\t\tXMM(d).b[n+8]=SaturatedSignedWordToUnsignedByte(s.s[n]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(punpckhbw_r128_rm128)() // Opcode 66 0f 68\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM_REG t;\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tt.q[1] = XMM(s).q[1];\n\t\tfor (int n = 0; n < 16; n += 2) {\n\t\t\tXMM(d).b[n]=XMM(d).b[8+(n >> 1)];\n\t\t\tXMM(d).b[n+1]=t.b[8+(n >> 1)];\n\t\t}\n\t} else {\n\t\tXMM_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int n = 0; n < 16; n += 2) {\n\t\t\tXMM(d).b[n]=XMM(d).b[8+(n >> 1)];\n\t\t\tXMM(d).b[n+1]=s.b[8+(n >> 1)];\n\t\t}\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(punpckhwd_r128_rm128)() // Opcode 66 0f 69\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM_REG t;\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tt.q[1] = XMM(s).q[1];\n\t\tfor (int n = 0; n < 8; n += 2) {\n\t\t\tXMM(d).w[n]=XMM(d).w[4+(n >> 1)];\n\t\t\tXMM(d).w[n+1]=t.w[4+(n >> 1)];\n\t\t}\n\t} else {\n\t\tXMM_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int n = 0; n < 8; n += 2) {\n\t\t\tXMM(d).w[n]=XMM(d).w[4+(n >> 1)];\n\t\t\tXMM(d).w[n+1]=s.w[4+(n >> 1)];\n\t\t}\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(unpckhdq_r128_rm128)() // Opcode 66 0f 6a\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM_REG t;\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tt.q[1] = XMM(s).q[1];\n\t\tXMM(d).d[0]=XMM(d).d[2];\n\t\tXMM(d).d[1]=t.d[2];\n\t\tXMM(d).d[2]=XMM(d).d[3];\n\t\tXMM(d).d[3]=t.d[3];\n\t} else {\n\t\tXMM_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tXMM(d).d[0]=XMM(d).d[2];\n\t\tXMM(d).d[1]=s.d[2];\n\t\tXMM(d).d[2]=XMM(d).d[3];\n\t\tXMM(d).d[3]=s.d[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(punpckhqdq_r128_rm128)() // Opcode 66 0f 6d\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM_REG t;\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tt.q[1] = XMM(s).q[1];\n\t\tXMM(d).q[0]=XMM(d).q[1];\n\t\tXMM(d).q[1]=t.q[1];\n\t} else {\n\t\tXMM_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tXMM(d).q[0]=XMM(d).q[1];\n\t\tXMM(d).q[1]=s.q[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pcmpeqb_r128_rm128)() // Opcode 66 0f 74\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tfor (int c=0;c <= 15;c++)\n\t\t\tXMM(d).b[c]=(XMM(d).c[c] == XMM(s).c[c]) ? 0xff : 0;\n\t} else {\n\t\tXMM_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int c=0;c <= 15;c++)\n\t\t\tXMM(d).b[c]=(XMM(d).c[c] == s.c[c]) ? 0xff : 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pcmpeqw_r128_rm128)() // Opcode 66 0f 75\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tfor (int c=0;c <= 7;c++)\n\t\t\tXMM(d).w[c]=(XMM(d).s[c] == XMM(s).s[c]) ? 0xffff : 0;\n\t} else {\n\t\tXMM_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int c=0;c <= 7;c++)\n\t\t\tXMM(d).w[c]=(XMM(d).s[c] == s.s[c]) ? 0xffff : 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pcmpeqd_r128_rm128)() // Opcode 66 0f 76\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tfor (int c=0;c <= 3;c++)\n\t\t\tXMM(d).d[c]=(XMM(d).i[c] == XMM(s).i[c]) ? 0xffffffff : 0;\n\t} else {\n\t\tXMM_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int c=0;c <= 3;c++)\n\t\t\tXMM(d).d[c]=(XMM(d).i[c] == s.i[c]) ? 0xffffffff : 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(paddq_r128_rm128)()  // Opcode 66 0f d4\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tXMM(d).q[0]=XMM(d).q[0]+XMM(s).q[0];\n\t\tXMM(d).q[1]=XMM(d).q[1]+XMM(s).q[1];\n\t} else {\n\t\tXMM_REG src;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM(d).q[0]=XMM(d).q[0]+src.q[0];\n\t\tXMM(d).q[1]=XMM(d).q[1]+src.q[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pmullw_r128_rm128)()  // Opcode 66 0f d5\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tfor (int n = 0; n < 8;n++)\n\t\t\tXMM(d).w[n]=(UINT32)((INT32)XMM(d).s[n]*(INT32)XMM(s).s[n]) & 0xffff;\n\t} else {\n\t\tXMM_REG src;\n\t\tint d;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\td=(modrm >> 3) & 0x7;\n\t\tfor (int n = 0; n < 8;n++)\n\t\t\tXMM(d).w[n]=(UINT32)((INT32)XMM(d).s[n]*(INT32)src.s[n]) & 0xffff;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(paddb_r128_rm128)()  // Opcode 66 0f fc\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (int n=0;n < 16;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).b[n]=XMM((modrm >> 3) & 0x7).b[n] + XMM(modrm & 7).b[n];\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int n=0;n < 16;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).b[n]=XMM((modrm >> 3) & 0x7).b[n] + s.b[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(paddw_r128_rm128)()  // Opcode 66 0f fd\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (int n=0;n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).w[n]=XMM((modrm >> 3) & 0x7).w[n] + XMM(modrm & 7).w[n];\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int n=0;n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).w[n]=XMM((modrm >> 3) & 0x7).w[n] + s.w[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(paddd_r128_rm128)()  // Opcode 66 0f fe\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (int n=0;n < 4;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).d[n]=XMM((modrm >> 3) & 0x7).d[n] + XMM(modrm & 7).d[n];\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int n=0;n < 4;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).d[n]=XMM((modrm >> 3) & 0x7).d[n] + s.d[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(psubusb_r128_rm128)()  // Opcode 66 0f d8\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (int n=0;n < 16;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).b[n]=XMM((modrm >> 3) & 0x7).b[n] < XMM(modrm & 7).b[n] ? 0 : XMM((modrm >> 3) & 0x7).b[n]-XMM(modrm & 7).b[n];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tfor (int n=0;n < 16;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).b[n]=XMM((modrm >> 3) & 0x7).b[n] < src.b[n] ? 0 : XMM((modrm >> 3) & 0x7).b[n]-src.b[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(psubusw_r128_rm128)()  // Opcode 66 0f d9\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (int n=0;n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).w[n]=XMM((modrm >> 3) & 0x7).w[n] < XMM(modrm & 7).w[n] ? 0 : XMM((modrm >> 3) & 0x7).w[n]-XMM(modrm & 7).w[n];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tfor (int n=0;n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).w[n]=XMM((modrm >> 3) & 0x7).w[n] < src.w[n] ? 0 : XMM((modrm >> 3) & 0x7).w[n]-src.w[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pand_r128_rm128)()  // Opcode 66 0f db\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0] & XMM(modrm & 7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1]=XMM((modrm >> 3) & 0x7).q[1] & XMM(modrm & 7).q[1];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0] & src.q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1]=XMM((modrm >> 3) & 0x7).q[1] & src.q[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pandn_r128_rm128)()  // Opcode 66 0f df\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).q[0]=(~XMM((modrm >> 3) & 0x7).q[0]) & XMM(modrm & 7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1]=(~XMM((modrm >> 3) & 0x7).q[1]) & XMM(modrm & 7).q[1];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).q[0]=(~XMM((modrm >> 3) & 0x7).q[0]) & src.q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1]=(~XMM((modrm >> 3) & 0x7).q[1]) & src.q[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(paddusb_r128_rm128)()  // Opcode 66 0f dc\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (int n=0;n < 16;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).b[n]=XMM((modrm >> 3) & 0x7).b[n] > (0xff-XMM(modrm & 7).b[n]) ? 0xff : XMM((modrm >> 3) & 0x7).b[n]+XMM(modrm & 7).b[n];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tfor (int n=0;n < 16;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).b[n]=XMM((modrm >> 3) & 0x7).b[n] > (0xff-src.b[n]) ? 0xff : XMM((modrm >> 3) & 0x7).b[n]+src.b[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(paddusw_r128_rm128)()  // Opcode 66 0f dd\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (int n=0;n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).w[n]=XMM((modrm >> 3) & 0x7).w[n] > (0xffff-XMM(modrm & 7).w[n]) ? 0xffff : XMM((modrm >> 3) & 0x7).w[n]+XMM(modrm & 7).w[n];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tfor (int n=0;n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).w[n]=XMM((modrm >> 3) & 0x7).w[n] > (0xffff-src.w[n]) ? 0xffff : XMM((modrm >> 3) & 0x7).w[n]+src.w[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pmaxub_r128_rm128)() // Opcode 66 0f de\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (int n=0;n < 16;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).b[n] = XMM((modrm >> 3) & 0x7).b[n] > XMM(modrm & 0x7).b[n] ? XMM((modrm >> 3) & 0x7).b[n] : XMM(modrm & 0x7).b[n];\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int n=0;n < 16;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).b[n] = XMM((modrm >> 3) & 0x7).b[n] > s.b[n] ? XMM((modrm >> 3) & 0x7).b[n] : s.b[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pmulhuw_r128_rm128)()  // Opcode 66 0f e4\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (int n=0;n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).w[n]=((UINT32)XMM((modrm >> 3) & 0x7).w[n]*(UINT32)XMM(modrm & 7).w[n]) >> 16;\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int n=0;n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).w[n]=((UINT32)XMM((modrm >> 3) & 0x7).w[n]*(UINT32)s.w[n]) >> 16;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pmulhw_r128_rm128)()  // Opcode 66 0f e5\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (int n=0;n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).w[n]=(UINT32)((INT32)XMM((modrm >> 3) & 0x7).s[n]*(INT32)XMM(modrm & 7).s[n]) >> 16;\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tfor (int n=0;n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).w[n]=(UINT32)((INT32)XMM((modrm >> 3) & 0x7).s[n]*(INT32)src.s[n]) >> 16;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(psubsb_r128_rm128)()  // Opcode 66 0f e8\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (int n=0;n < 16;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).c[n]=SaturatedSignedWordToSignedByte((INT16)XMM((modrm >> 3) & 0x7).c[n] - (INT16)XMM(modrm & 7).c[n]);\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int n=0;n < 16;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).c[n]=SaturatedSignedWordToSignedByte((INT16)XMM((modrm >> 3) & 0x7).c[n] - (INT16)s.c[n]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(psubsw_r128_rm128)()  // Opcode 66 0f e9\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (int n=0;n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).s[n]=SaturatedSignedDwordToSignedWord((INT32)XMM((modrm >> 3) & 0x7).s[n] - (INT32)XMM(modrm & 7).s[n]);\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int n=0;n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).s[n]=SaturatedSignedDwordToSignedWord((INT32)XMM((modrm >> 3) & 0x7).s[n] - (INT32)s.s[n]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pminsw_r128_rm128)() // Opcode 66 0f ea\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (int n=0;n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).s[n] = XMM((modrm >> 3) & 0x7).s[n] < XMM(modrm & 0x7).s[n] ? XMM((modrm >> 3) & 0x7).s[n] : XMM(modrm & 0x7).s[n];\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int n=0;n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).s[n] = XMM((modrm >> 3) & 0x7).s[n] < s.s[n] ? XMM((modrm >> 3) & 0x7).s[n] : s.s[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pmaxsw_r128_rm128)() // Opcode 66 0f ee\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (int n=0;n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).s[n] = XMM((modrm >> 3) & 0x7).s[n] > XMM(modrm & 0x7).s[n] ? XMM((modrm >> 3) & 0x7).s[n] : XMM(modrm & 0x7).s[n];\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int n=0;n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).s[n] = XMM((modrm >> 3) & 0x7).s[n] > s.s[n] ? XMM((modrm >> 3) & 0x7).s[n] : s.s[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(paddsb_r128_rm128)()  // Opcode 66 0f ec\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (int n=0;n < 16;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).c[n]=SaturatedSignedWordToSignedByte((INT16)XMM((modrm >> 3) & 0x7).c[n] + (INT16)XMM(modrm & 7).c[n]);\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int n=0;n < 16;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).c[n]=SaturatedSignedWordToSignedByte((INT16)XMM((modrm >> 3) & 0x7).c[n] + (INT16)s.c[n]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(paddsw_r128_rm128)()  // Opcode 66 0f ed\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (int n=0;n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).s[n]=SaturatedSignedDwordToSignedWord((INT32)XMM((modrm >> 3) & 0x7).s[n] + (INT32)XMM(modrm & 7).s[n]);\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int n=0;n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).s[n]=SaturatedSignedDwordToSignedWord((INT32)XMM((modrm >> 3) & 0x7).s[n] + (INT32)s.s[n]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(por_r128_rm128)()  // Opcode 66 0f eb\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0] | XMM(modrm & 7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1]=XMM((modrm >> 3) & 0x7).q[1] | XMM(modrm & 7).q[1];\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tXMM((modrm >> 3) & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0] | s.q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1]=XMM((modrm >> 3) & 0x7).q[1] | s.q[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pxor_r128_rm128)()  // Opcode 66 0f ef\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0] ^ XMM(modrm & 7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1]=XMM((modrm >> 3) & 0x7).q[1] ^ XMM(modrm & 7).q[1];\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tXMM((modrm >> 3) & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0] ^ s.q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1]=XMM((modrm >> 3) & 0x7).q[1] ^ s.q[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pmaddwd_r128_rm128)()  // Opcode 66 0f f5\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (int n=0;n < 4;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).i[n]=(INT32)XMM((modrm >> 3) & 0x7).s[n]*(INT32)XMM(modrm & 7).s[n]+\n\t\t\t\t\t\t\t\t\t\t(INT32)XMM((modrm >> 3) & 0x7).s[n]*(INT32)XMM(modrm & 7).s[n];\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int n=0;n < 4;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).i[n]=(INT32)XMM((modrm >> 3) & 0x7).s[n]*(INT32)s.s[n]+\n\t\t\t\t\t\t\t\t\t\t(INT32)XMM((modrm >> 3) & 0x7).s[n]*(INT32)s.s[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(psubb_r128_rm128)()  // Opcode 66 0f f8\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (int n=0;n < 16;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).b[n]=XMM((modrm >> 3) & 0x7).b[n] - XMM(modrm & 7).b[n];\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int n=0;n < 16;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).b[n]=XMM((modrm >> 3) & 0x7).b[n] - s.b[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(psubw_r128_rm128)()  // Opcode 66 0f f9\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (int n=0;n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).w[n]=XMM((modrm >> 3) & 0x7).w[n] - XMM(modrm & 7).w[n];\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int n=0;n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).w[n]=XMM((modrm >> 3) & 0x7).w[n] - s.w[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(psubd_r128_rm128)()  // Opcode 66 0f fa\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (int n=0;n < 4;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).d[n]=XMM((modrm >> 3) & 0x7).d[n] - XMM(modrm & 7).d[n];\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int n=0;n < 4;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).d[n]=XMM((modrm >> 3) & 0x7).d[n] - s.d[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(psadbw_r128_rm128)() // Opcode 66 0f f6\n{\n\tINT32 temp;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\ttemp=0;\n\t\tfor (int n=0;n < 8;n++)\n\t\t\ttemp += abs((INT32)XMM((modrm >> 3) & 0x7).b[n] - (INT32)XMM(modrm & 0x7).b[n]);\n\t\tXMM((modrm >> 3) & 0x7).l[0]=(UINT64)temp & 0xffff;\n\t\ttemp=0;\n\t\tfor (int n=8;n < 16;n++)\n\t\t\ttemp += abs((INT32)XMM((modrm >> 3) & 0x7).b[n] - (INT32)XMM(modrm & 0x7).b[n]);\n\t\tXMM((modrm >> 3) & 0x7).l[1]=(UINT64)temp & 0xffff;\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\ttemp=0;\n\t\tfor (int n=0;n < 8;n++)\n\t\t\ttemp += abs((INT32)XMM((modrm >> 3) & 0x7).b[n] - (INT32)s.b[n]);\n\t\tXMM((modrm >> 3) & 0x7).l[0]=(UINT64)temp & 0xffff;\n\t\ttemp=0;\n\t\tfor (int n=8;n < 16;n++)\n\t\t\ttemp += abs((INT32)XMM((modrm >> 3) & 0x7).b[n] - (INT32)s.b[n]);\n\t\tXMM((modrm >> 3) & 0x7).l[1]=(UINT64)temp & 0xffff;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pavgb_r128_rm128)() // Opcode 66 0f e0\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (int n=0;n < 16;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).b[n] = ((UINT16)XMM((modrm >> 3) & 0x7).b[n] + (UINT16)XMM(modrm & 0x7).b[n] + 1) >> 1;\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int n=0;n < 16;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).b[n] = ((UINT16)XMM((modrm >> 3) & 0x7).b[n] + (UINT16)s.b[n] + 1) >> 1;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pavgw_r128_rm128)() // Opcode 66 0f e3\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (int n=0;n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).w[n] = ((UINT32)XMM((modrm >> 3) & 0x7).w[n] + (UINT32)XMM(modrm & 0x7).w[n] + 1) >> 1;\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tfor (int n=0;n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).w[n] = ((UINT32)XMM((modrm >> 3) & 0x7).w[n] + (UINT32)s.w[n] + 1) >> 1;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(psrlw_r128_rm128)()  // Opcode 66 0f d1\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint count=(int)XMM(modrm & 7).q[0];\n\t\tfor (int n=0; n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).w[n]=XMM((modrm >> 3) & 0x7).w[n] >> count;\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tint count=(int)src.q[0];\n\t\tfor (int n=0; n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).w[n]=XMM((modrm >> 3) & 0x7).w[n] >> count;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(psrld_r128_rm128)()  // Opcode 66 0f d2\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint count=(int)XMM(modrm & 7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).d[0]=XMM((modrm >> 3) & 0x7).d[0] >> count;\n\t\tXMM((modrm >> 3) & 0x7).d[1]=XMM((modrm >> 3) & 0x7).d[1] >> count;\n\t\tXMM((modrm >> 3) & 0x7).d[2]=XMM((modrm >> 3) & 0x7).d[2] >> count;\n\t\tXMM((modrm >> 3) & 0x7).d[3]=XMM((modrm >> 3) & 0x7).d[3] >> count;\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tint count=(int)src.q[0];\n\t\tXMM((modrm >> 3) & 0x7).d[0]=XMM((modrm >> 3) & 0x7).d[0] >> count;\n\t\tXMM((modrm >> 3) & 0x7).d[1]=XMM((modrm >> 3) & 0x7).d[1] >> count;\n\t\tXMM((modrm >> 3) & 0x7).d[2]=XMM((modrm >> 3) & 0x7).d[2] >> count;\n\t\tXMM((modrm >> 3) & 0x7).d[3]=XMM((modrm >> 3) & 0x7).d[3] >> count;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(psrlq_r128_rm128)()  // Opcode 66 0f d3\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint count=(int)XMM(modrm & 7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0] >> count;\n\t\tXMM((modrm >> 3) & 0x7).q[1]=XMM((modrm >> 3) & 0x7).q[1] >> count;\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tint count=(int)src.q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0] >> count;\n\t\tXMM((modrm >> 3) & 0x7).q[1]=XMM((modrm >> 3) & 0x7).q[1] >> count;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(psllw_r128_rm128)()  // Opcode 66 0f f1\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint count=(int)XMM(modrm & 7).q[0];\n\t\tfor (int n=0; n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).w[n]=XMM((modrm >> 3) & 0x7).w[n] << count;\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tint count=(int)s.q[0];\n\t\tfor (int n=0; n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).w[n]=XMM((modrm >> 3) & 0x7).w[n] << count;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pslld_r128_rm128)()  // Opcode 66 0f f2\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint count=(int)XMM(modrm & 7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).d[0]=XMM((modrm >> 3) & 0x7).d[0] << count;\n\t\tXMM((modrm >> 3) & 0x7).d[1]=XMM((modrm >> 3) & 0x7).d[1] << count;\n\t\tXMM((modrm >> 3) & 0x7).d[2]=XMM((modrm >> 3) & 0x7).d[2] << count;\n\t\tXMM((modrm >> 3) & 0x7).d[3]=XMM((modrm >> 3) & 0x7).d[3] << count;\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tint count=(int)s.q[0];\n\t\tXMM((modrm >> 3) & 0x7).d[0]=XMM((modrm >> 3) & 0x7).d[0] << count;\n\t\tXMM((modrm >> 3) & 0x7).d[1]=XMM((modrm >> 3) & 0x7).d[1] << count;\n\t\tXMM((modrm >> 3) & 0x7).d[2]=XMM((modrm >> 3) & 0x7).d[2] << count;\n\t\tXMM((modrm >> 3) & 0x7).d[3]=XMM((modrm >> 3) & 0x7).d[3] << count;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(psllq_r128_rm128)()  // Opcode 66 0f f3\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint count=(int)XMM(modrm & 7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0] << count;\n\t\tXMM((modrm >> 3) & 0x7).q[1]=XMM((modrm >> 3) & 0x7).q[1] << count;\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, s);\n\t\tint count=(int)s.q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0] << count;\n\t\tXMM((modrm >> 3) & 0x7).q[1]=XMM((modrm >> 3) & 0x7).q[1] << count;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(psraw_r128_rm128)()  // Opcode 66 0f e1\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint count=(int)XMM(modrm & 7).q[0];\n\t\tfor (int n=0; n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).s[n]=XMM((modrm >> 3) & 0x7).s[n] >> count;\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tint count=(int)src.q[0];\n\t\tfor (int n=0; n < 8;n++)\n\t\t\tXMM((modrm >> 3) & 0x7).s[n]=XMM((modrm >> 3) & 0x7).s[n] >> count;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(psrad_r128_rm128)()  // Opcode 66 0f e2\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint count=(int)XMM(modrm & 7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).i[0]=XMM((modrm >> 3) & 0x7).i[0] >> count;\n\t\tXMM((modrm >> 3) & 0x7).i[1]=XMM((modrm >> 3) & 0x7).i[1] >> count;\n\t\tXMM((modrm >> 3) & 0x7).i[2]=XMM((modrm >> 3) & 0x7).i[2] >> count;\n\t\tXMM((modrm >> 3) & 0x7).i[3]=XMM((modrm >> 3) & 0x7).i[3] >> count;\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tint count=(int)src.q[0];\n\t\tXMM((modrm >> 3) & 0x7).i[0]=XMM((modrm >> 3) & 0x7).i[0] >> count;\n\t\tXMM((modrm >> 3) & 0x7).i[1]=XMM((modrm >> 3) & 0x7).i[1] >> count;\n\t\tXMM((modrm >> 3) & 0x7).i[2]=XMM((modrm >> 3) & 0x7).i[2] >> count;\n\t\tXMM((modrm >> 3) & 0x7).i[3]=XMM((modrm >> 3) & 0x7).i[3] >> count;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movntdq_m128_r128)()  // Opcode 66 0f e7\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tCYCLES(1);     // unsupported\n\t} else {\n\t\t// since cache is not implemented\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITEXMM(ea, XMM((modrm >> 3) & 0x7));\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t}\n}\n\nstatic void SSEOP(cvttpd2dq_r128_rm128)()  // Opcode 66 0f e6\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).i[0]=(INT32)XMM((modrm >> 3) & 0x7).f64[0];\n\t\tXMM((modrm >> 3) & 0x7).i[1]=(INT32)XMM((modrm >> 3) & 0x7).f64[1];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = 0;\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).i[0]=(INT32)src.f64[0];\n\t\tXMM((modrm >> 3) & 0x7).i[1]=(INT32)src.f64[1];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movq_r128m64_r128)()  // Opcode 66 0f d6\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM(modrm & 0x7).q[0]=XMM((modrm >> 3) & 0x7).q[0];\n\t\tXMM(modrm & 0x7).q[1] = 0;\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITE64(ea, XMM((modrm >> 3) & 0x7).q[0]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(addsubpd_r128_rm128)()  // Opcode 66 0f d0\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s, d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tXMM(d).f64[0]=XMM(d).f64[0]-XMM(s).f64[0];\n\t\tXMM(d).f64[1]=XMM(d).f64[1]+XMM(s).f64[1];\n\t} else {\n\t\tXMM_REG src;\n\t\tint d;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\td=(modrm >> 3) & 0x7;\n\t\tREADXMM(ea, src);\n\t\tXMM(d).f64[0]=XMM(d).f64[0]-src.f64[0];\n\t\tXMM(d).f64[1]=XMM(d).f64[1]+src.f64[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(haddpd_r128_rm128)()  // Opcode 66 0f 7c\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s, d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tXMM(d).f64[0]=XMM(d).f64[0]+XMM(d).f64[1];\n\t\tXMM(d).f64[1]=XMM(s).f64[0]+XMM(s).f64[1];\n\t} else {\n\t\tXMM_REG src;\n\t\tint d;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\td=(modrm >> 3) & 0x7;\n\t\tREADXMM(ea, src);\n\t\tXMM(d).f64[0]=XMM(d).f64[0]+XMM(d).f64[1];\n\t\tXMM(d).f64[1]=src.f64[0]+src.f64[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(hsubpd_r128_rm128)()  // Opcode 66 0f 7d\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s, d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tXMM(d).f64[0]=XMM(d).f64[0]-XMM(d).f64[1];\n\t\tXMM(d).f64[1]=XMM(s).f64[0]-XMM(s).f64[1];\n\t} else {\n\t\tXMM_REG src;\n\t\tint d;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\td=(modrm >> 3) & 0x7;\n\t\tREADXMM(ea, src);\n\t\tXMM(d).f64[0]=XMM(d).f64[0]-XMM(d).f64[1];\n\t\tXMM(d).f64[1]=src.f64[0]-src.f64[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(sqrtpd_r128_rm128)()  // Opcode 66 0f 51\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s, d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tXMM(d).f64[0]=sqrt(XMM(s).f64[0]);\n\t\tXMM(d).f64[1]=sqrt(XMM(s).f64[1]);\n\t} else {\n\t\tXMM_REG src;\n\t\tint d;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\td=(modrm >> 3) & 0x7;\n\t\tREADXMM(ea, src);\n\t\tXMM(d).f64[0]=sqrt(src.f64[0]);\n\t\tXMM(d).f64[1]=sqrt(src.f64[1]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvtpi2pd_r128_rm64)()  // Opcode 66 0f 2a\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMXPROLOG();\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = (double)MMX(modrm & 0x7).i[0];\n\t\tXMM((modrm >> 3) & 0x7).f64[1] = (double)MMX(modrm & 0x7).i[1];\n\t} else {\n\t\tMMX_REG r;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, r);\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = (double)r.i[0];\n\t\tXMM((modrm >> 3) & 0x7).f64[1] = (double)r.i[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvttpd2pi_r64_rm128)()  // Opcode 66 0f 2c\n{\n\tUINT8 modrm = FETCH();\n\tMMXPROLOG();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).i[0] = XMM(modrm & 0x7).f64[0];\n\t\tMMX((modrm >> 3) & 0x7).i[1] = XMM(modrm & 0x7).f64[1];\n\t} else {\n\t\tXMM_REG r;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, r);\n\t\tMMX((modrm >> 3) & 0x7).i[0] = r.f64[0];\n\t\tMMX((modrm >> 3) & 0x7).i[1] = r.f64[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvtpd2pi_r64_rm128)()  // Opcode 66 0f 2d\n{\n\tUINT8 modrm = FETCH();\n\tMMXPROLOG();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).i[0] = XMM(modrm & 0x7).f64[0];\n\t\tMMX((modrm >> 3) & 0x7).i[1] = XMM(modrm & 0x7).f64[1];\n\t} else {\n\t\tXMM_REG r;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, r);\n\t\tMMX((modrm >> 3) & 0x7).i[0] = r.f64[0];\n\t\tMMX((modrm >> 3) & 0x7).i[1] = r.f64[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvtpd2ps_r128_rm128)()  // Opcode 66 0f 5a\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = (float)XMM(modrm & 0x7).f64[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = (float)XMM(modrm & 0x7).f64[1];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = 0;\n\t} else {\n\t\tXMM_REG r;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, r);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = (float)r.f64[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = (float)r.f64[1];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvtps2dq_r128_rm128)()  // Opcode 66 0f 5b\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).i[0] = XMM(modrm & 0x7).f[0];\n\t\tXMM((modrm >> 3) & 0x7).i[1] = XMM(modrm & 0x7).f[1];\n\t\tXMM((modrm >> 3) & 0x7).i[2] = XMM(modrm & 0x7).f[2];\n\t\tXMM((modrm >> 3) & 0x7).i[3] = XMM(modrm & 0x7).f[3];\n\t} else {\n\t\tXMM_REG r;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, r);\n\t\tXMM((modrm >> 3) & 0x7).i[0] = r.f[0];\n\t\tXMM((modrm >> 3) & 0x7).i[1] = r.f[1];\n\t\tXMM((modrm >> 3) & 0x7).i[2] = r.f[2];\n\t\tXMM((modrm >> 3) & 0x7).i[3] = r.f[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(addpd_r128_rm128)()  // Opcode 66 0f 58\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] + XMM(modrm & 0x7).f64[0];\n\t\tXMM((modrm >> 3) & 0x7).f64[1] = XMM((modrm >> 3) & 0x7).f64[1] + XMM(modrm & 0x7).f64[1];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] + src.f64[0];\n\t\tXMM((modrm >> 3) & 0x7).f64[1] = XMM((modrm >> 3) & 0x7).f64[1] + src.f64[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(mulpd_r128_rm128)()  // Opcode 66 0f 59\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] * XMM(modrm & 0x7).f64[0];\n\t\tXMM((modrm >> 3) & 0x7).f64[1] = XMM((modrm >> 3) & 0x7).f64[1] * XMM(modrm & 0x7).f64[1];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] * src.f64[0];\n\t\tXMM((modrm >> 3) & 0x7).f64[1] = XMM((modrm >> 3) & 0x7).f64[1] * src.f64[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(subpd_r128_rm128)()  // Opcode 66 0f 5c\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] - XMM(modrm & 0x7).f64[0];\n\t\tXMM((modrm >> 3) & 0x7).f64[1] = XMM((modrm >> 3) & 0x7).f64[1] - XMM(modrm & 0x7).f64[1];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] - src.f64[0];\n\t\tXMM((modrm >> 3) & 0x7).f64[1] = XMM((modrm >> 3) & 0x7).f64[1] - src.f64[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(minpd_r128_rm128)()  // Opcode 66 0f 5d\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = sse_min_double(XMM((modrm >> 3) & 0x7).f64[0], XMM(modrm & 0x7).f64[0]);\n\t\tXMM((modrm >> 3) & 0x7).f64[1] = sse_min_double(XMM((modrm >> 3) & 0x7).f64[1], XMM(modrm & 0x7).f64[1]);\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = sse_min_double(XMM((modrm >> 3) & 0x7).f64[0], src.f64[0]);\n\t\tXMM((modrm >> 3) & 0x7).f64[1] = sse_min_double(XMM((modrm >> 3) & 0x7).f64[1], src.f64[1]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(divpd_r128_rm128)()  // Opcode 66 0f 5e\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] / XMM(modrm & 0x7).f64[0];\n\t\tXMM((modrm >> 3) & 0x7).f64[1] = XMM((modrm >> 3) & 0x7).f64[1] / XMM(modrm & 0x7).f64[1];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] / src.f64[0];\n\t\tXMM((modrm >> 3) & 0x7).f64[1] = XMM((modrm >> 3) & 0x7).f64[1] / src.f64[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(maxpd_r128_rm128)()  // Opcode 66 0f 5f\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = sse_max_double(XMM((modrm >> 3) & 0x7).f64[0], XMM(modrm & 0x7).f64[0]);\n\t\tXMM((modrm >> 3) & 0x7).f64[1] = sse_max_double(XMM((modrm >> 3) & 0x7).f64[1], XMM(modrm & 0x7).f64[1]);\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = sse_max_double(XMM((modrm >> 3) & 0x7).f64[0], src.f64[0]);\n\t\tXMM((modrm >> 3) & 0x7).f64[1] = sse_max_double(XMM((modrm >> 3) & 0x7).f64[1], src.f64[1]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movntpd_m128_r128)()  // Opcode 66 0f 2b\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\t// unsupported by cpu\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t} else {\n\t\t// since cache is not implemented\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITEXMM(ea, XMM((modrm >> 3) & 0x7));\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t}\n}\n\nstatic void SSEOP(movapd_r128_rm128)()  // Opcode 66 0f 28\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7) = XMM(modrm & 0x7);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, XMM((modrm >> 3) & 0x7));\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movapd_rm128_r128)()  // Opcode 66 0f 29\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM(modrm & 0x7) = XMM((modrm >> 3) & 0x7);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITEXMM(ea, XMM((modrm >> 3) & 0x7));\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movsd_r128_r128m64)() // Opcode f2 0f 10\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).q[0] = XMM(modrm & 0x7).q[0];\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM_LO64(ea, XMM((modrm >> 3) & 0x7));\n\t\tXMM((modrm >> 3) & 0x7).q[1] = 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movsd_r128m64_r128)() // Opcode f2 0f 11\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM(modrm & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0];\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITEXMM_LO64(ea, XMM((modrm >> 3) & 0x7));\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movddup_r128_r128m64)() // Opcode f2 0f 12\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).q[0] = XMM(modrm & 0x7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[0];\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM_LO64(ea, XMM((modrm >> 3) & 0x7));\n\t\tXMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvtsi2sd_r128_rm32)() // Opcode f2 0f 2a\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = (INT32)LOAD_RM32(modrm);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = (INT32)READ32(ea);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvttsd2si_r32_r128m64)() // Opcode f2 0f 2c\n{\n\tINT32 src;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = (INT32)XMM(modrm & 0x7).f64[0];\n\t} else { // otherwise is a memory address\n\t\tXMM_REG t;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM_LO64(ea, t);\n\t\tsrc = (INT32)t.f64[0];\n\t}\n\tSTORE_REG32(modrm, (UINT32)src);\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvtsd2si_r32_r128m64)() // Opcode f2 0f 2d\n{\n\tINT32 src;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = (INT32)XMM(modrm & 0x7).f64[0];\n\t} else { // otherwise is a memory address\n\t\tXMM_REG t;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM_LO64(ea, t);\n\t\tsrc = (INT32)t.f64[0];\n\t}\n\tSTORE_REG32(modrm, (UINT32)src);\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(sqrtsd_r128_r128m64)() // Opcode f2 0f 51\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s, d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tXMM(d).f64[0]=sqrt(XMM(s).f64[0]);\n\t} else {\n\t\tXMM_REG src;\n\t\tint d;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\td=(modrm >> 3) & 0x7;\n\t\tREADXMM(ea, src);\n\t\tXMM(d).f64[0]=sqrt(src.f64[0]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(addsd_r128_r128m64)() // Opcode f2 0f 58\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] + XMM(modrm & 0x7).f64[0];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] + src.f64[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(mulsd_r128_r128m64)() // Opcode f2 0f 59\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] * XMM(modrm & 0x7).f64[0];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] * src.f64[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvtsd2ss_r128_r128m64)() // Opcode f2 0f 5a\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM(modrm & 0x7).f64[0];\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM_LO64(ea, s);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = s.f64[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(subsd_r128_r128m64)() // Opcode f2 0f 5c\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] - XMM(modrm & 0x7).f64[0];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] - src.f64[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(minsd_r128_r128m64)() // Opcode f2 0f 5d\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = sse_min_double(XMM((modrm >> 3) & 0x7).f64[0], XMM(modrm & 0x7).f64[0]);\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = sse_min_double(XMM((modrm >> 3) & 0x7).f64[0], src.f64[0]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(divsd_r128_r128m64)() // Opcode f2 0f 5e\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] / XMM(modrm & 0x7).f64[0];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = XMM((modrm >> 3) & 0x7).f64[0] / src.f64[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(maxsd_r128_r128m64)() // Opcode f2 0f 5f\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = sse_max_double(XMM((modrm >> 3) & 0x7).f64[0], XMM(modrm & 0x7).f64[0]);\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = sse_max_double(XMM((modrm >> 3) & 0x7).f64[0], src.f64[0]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(haddps_r128_rm128)() // Opcode f2 0f 7c\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s, d;\n\t\tfloat f1, f2, f3, f4;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tf1=XMM(d).f[0]+XMM(d).f[1];\n\t\tf2=XMM(d).f[2]+XMM(d).f[3];\n\t\tf3=XMM(s).f[0]+XMM(s).f[1];\n\t\tf4=XMM(s).f[2]+XMM(s).f[3];\n\t\tXMM(d).f[0]=f1;\n\t\tXMM(d).f[1]=f2;\n\t\tXMM(d).f[2]=f3;\n\t\tXMM(d).f[3]=f4;\n\t} else {\n\t\tXMM_REG src;\n\t\tint d;\n\t\tfloat f1, f2;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\td=(modrm >> 3) & 0x7;\n\t\tREADXMM(ea, src);\n\t\tf1=XMM(d).f[0]+XMM(d).f[1];\n\t\tf2=XMM(d).f[2]+XMM(d).f[3];\n\t\tXMM(d).f[0]=f1;\n\t\tXMM(d).f[1]=f2;\n\t\tXMM(d).f[2]=src.f[0]+src.f[1];\n\t\tXMM(d).f[3]=src.f[2]+src.f[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(hsubps_r128_rm128)() // Opcode f2 0f 7d\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s, d;\n\t\tfloat f1, f2, f3, f4;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tf1=XMM(d).f[0]-XMM(d).f[1];\n\t\tf2=XMM(d).f[2]-XMM(d).f[3];\n\t\tf3=XMM(s).f[0]-XMM(s).f[1];\n\t\tf4=XMM(s).f[2]-XMM(s).f[3];\n\t\tXMM(d).f[0]=f1;\n\t\tXMM(d).f[1]=f2;\n\t\tXMM(d).f[2]=f3;\n\t\tXMM(d).f[3]=f4;\n\t} else {\n\t\tXMM_REG src;\n\t\tint d;\n\t\tfloat f1, f2;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\td=(modrm >> 3) & 0x7;\n\t\tREADXMM(ea, src);\n\t\tf1=XMM(d).f[0]-XMM(d).f[1];\n\t\tf2=XMM(d).f[2]-XMM(d).f[3];\n\t\tXMM(d).f[0]=f1;\n\t\tXMM(d).f[1]=f2;\n\t\tXMM(d).f[2]=src.f[0]-src.f[1];\n\t\tXMM(d).f[3]=src.f[2]-src.f[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cmpsd_r128_r128m64_i8)() // Opcode f2 0f c2\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\tUINT8 imm8 = FETCH();\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tsse_predicate_compare_double_scalar(imm8, XMM(d), XMM(s));\n\t} else {\n\t\tint d;\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tUINT8 imm8 = FETCH();\n\t\tREADXMM_LO64(ea, s);\n\t\td=(modrm >> 3) & 0x7;\n\t\tsse_predicate_compare_double_scalar(imm8, XMM(d), s);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(addsubps_r128_rm128)() // Opcode f2 0f d0\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0]=XMM((modrm >> 3) & 0x7).f[0] - XMM(modrm & 0x7).f[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1]=XMM((modrm >> 3) & 0x7).f[1] + XMM(modrm & 0x7).f[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2]=XMM((modrm >> 3) & 0x7).f[2] - XMM(modrm & 0x7).f[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3]=XMM((modrm >> 3) & 0x7).f[3] + XMM(modrm & 0x7).f[3];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0]=XMM((modrm >> 3) & 0x7).f[0] - src.f[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1]=XMM((modrm >> 3) & 0x7).f[1] + src.f[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2]=XMM((modrm >> 3) & 0x7).f[2] - src.f[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3]=XMM((modrm >> 3) & 0x7).f[3] + src.f[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movdq2q_r64_r128)() // Opcode f2 0f d6\n{\n\tUINT8 modrm = FETCH();\n\tMMXPROLOG();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).q = XMM(modrm & 0x7).q[0];\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t} else {\n\t\t// unsupported by cpu\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t}\n}\n\nstatic void SSEOP(cvtpd2dq_r128_rm128)() // Opcode f2 0f e6\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).i[0]=(INT32)XMM((modrm >> 3) & 0x7).f64[0];\n\t\tXMM((modrm >> 3) & 0x7).i[1]=(INT32)XMM((modrm >> 3) & 0x7).f64[1];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = 0;\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).i[0]=(INT32)src.f64[0];\n\t\tXMM((modrm >> 3) & 0x7).i[1]=(INT32)src.f64[1];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(lddqu_r128_m128)() // Opcode f2 0f f0\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\t// unsupported by cpu\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, XMM((modrm >> 3) & 0x7));\n\t}\n}\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386/readme_msdos_player.txt",
    "content": "Based on MAME 0.152.\nFixes in MAME 0.154 to 0.160 are applied.\n\ni386_state are removed and all its members are changed to global variables.\nAll registers can be accessed directly without cpustate->.\n\ncycle_table_rm/pm are changed from dynamic array to static array.\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386/x87ops.c",
    "content": "// license:BSD-3-Clause\n// copyright-holders:Phil Bennett\n/***************************************************************************\n\n    x87 FPU emulation\n\n    TODO:\n     - 80-bit precision for F2XM1, FYL2X, FPATAN\n     - Figure out why SoftFloat trig extensions produce bad values\n     - Cycle counts for all processors (currently using 486 counts)\n     - Precision-dependent cycle counts for divide instructions\n     - Last instruction, operand pointers etc.\n     - Fix FLDENV, FSTENV, FSAVE, FRSTOR and FPREM\n     - Status word C2 updates to reflect round up/down\n     - Handling of invalid and denormal numbers\n     - Remove redundant operand checks\n     - Exceptions\n\n***************************************************************************/\n\n#include <math.h>\n\n\n/*************************************\n *\n * Defines\n *\n *************************************/\n\n#define X87_SW_IE               0x0001\n#define X87_SW_DE               0x0002\n#define X87_SW_ZE               0x0004\n#define X87_SW_OE               0x0008\n#define X87_SW_UE               0x0010\n#define X87_SW_PE               0x0020\n#define X87_SW_SF               0x0040\n#define X87_SW_ES               0x0080\n#define X87_SW_C0               0x0100\n#define X87_SW_C1               0x0200\n#define X87_SW_C2               0x0400\n#define X87_SW_TOP_SHIFT        11\n#define X87_SW_TOP_MASK         7\n#define X87_SW_C3               0x4000\n#define X87_SW_BUSY             0x8000\n\n#define X87_CW_IM               0x0001\n#define X87_CW_DM               0x0002\n#define X87_CW_ZM               0x0004\n#define X87_CW_OM               0x0008\n#define X87_CW_UM               0x0010\n#define X87_CW_PM               0x0020\n#define X87_CW_PC_SHIFT         8\n#define X87_CW_PC_MASK          3\n#define X87_CW_PC_SINGLE        0\n#define X87_CW_PC_DOUBLE        2\n#define X87_CW_PC_EXTEND        3\n#define X87_CW_RC_SHIFT         10\n#define X87_CW_RC_MASK          3\n#define X87_CW_RC_NEAREST       0\n#define X87_CW_RC_DOWN          1\n#define X87_CW_RC_UP            2\n#define X87_CW_RC_ZERO          3\n\n#define X87_TW_MASK             3\n#define X87_TW_VALID            0\n#define X87_TW_ZERO             1\n#define X87_TW_SPECIAL          2\n#define X87_TW_EMPTY            3\n\n\n/*************************************\n *\n * Macros\n *\n *************************************/\n\n#define ST_TO_PHYS(x)           (((m_x87_sw >> X87_SW_TOP_SHIFT) + (x)) & X87_SW_TOP_MASK)\n#define ST(x)                   (m_x87_reg[ST_TO_PHYS(x)])\n#define X87_TW_FIELD_SHIFT(x)   ((x) << 1)\n#define X87_TAG(x)              ((m_x87_tw >> X87_TW_FIELD_SHIFT(x)) & X87_TW_MASK)\n#define X87_RC                  ((m_x87_cw >> X87_CW_RC_SHIFT) & X87_CW_RC_MASK)\n#define X87_IS_ST_EMPTY(x)      (X87_TAG(ST_TO_PHYS(x)) == X87_TW_EMPTY)\n#define X87_SW_C3_0             X87_SW_C0\n\n#define UNIMPLEMENTED           fatalerror(\"Unimplemented x87 op: %s (PC:%x)\\n\", __FUNCTION__, m_pc)\n\n/*************************************\n *\n * Constants\n *\n *************************************/\n\nstatic const floatx80 fx80_zero =   { 0x0000, U64(0x0000000000000000) };\nstatic const floatx80 fx80_one =    { 0x3fff, U64(0x8000000000000000) };\n\nstatic const floatx80 fx80_ninf =   { 0xffff, U64(0x8000000000000000) };\nstatic const floatx80 fx80_inan =   { 0xffff, U64(0xc000000000000000) };\n\n/* Maps x87 round modes to SoftFloat round modes */\nstatic const int x87_to_sf_rc[4] =\n{\n\tfloat_round_nearest_even,\n\tfloat_round_down,\n\tfloat_round_up,\n\tfloat_round_to_zero,\n};\n\n\n/*************************************\n *\n * SoftFloat helpers\n *\n *************************************/\n\nextern flag floatx80_is_nan( floatx80 a );\n\nextern flag floatx80_is_signaling_nan(floatx80 a);\n\nINLINE flag floatx80_is_quiet_nan(floatx80 a)\n{\n\tbits64 aLow;\n\n\taLow = a.low & ~LIT64(0x4000000000000000);\n\treturn\n\t\t((a.high & 0x7FFF) == 0x7FFF)\n\t\t&& (bits64)(aLow << 1)\n\t\t&& (a.low != aLow);\n}\n\nINLINE int floatx80_is_zero(floatx80 fx)\n{\n\treturn (((fx.high & 0x7fff) == 0) && ((fx.low << 1) == 0));\n}\n\nINLINE int floatx80_is_inf(floatx80 fx)\n{\n\treturn (((fx.high & 0x7fff) == 0x7fff) && ((fx.low << 1) == 0));\n}\n\nINLINE int floatx80_is_denormal(floatx80 fx)\n{\n\treturn (((fx.high & 0x7fff) == 0) &&\n\t\t\t((fx.low & U64(0x8000000000000000)) == 0) &&\n\t\t\t((fx.low << 1) != 0));\n}\n\nINLINE floatx80 floatx80_abs(floatx80 fx)\n{\n\tfx.high &= 0x7fff;\n\treturn fx;\n}\n\nINLINE double fx80_to_double(floatx80 fx)\n{\n\tUINT64 d = floatx80_to_float64(fx);\n\treturn *(double*)&d;\n}\n\nINLINE floatx80 double_to_fx80(double in)\n{\n\treturn float64_to_floatx80(*(UINT64*)&in);\n}\n\nINLINE floatx80 READ80(UINT32 ea)\n{\n\tfloatx80 t;\n\n\tt.low = READ64(ea);\n\tt.high = READ16(ea + 8);\n\n\treturn t;\n}\n\nINLINE void WRITE80(UINT32 ea, floatx80 t)\n{\n\tWRITE64(ea, t.low);\n\tWRITE16(ea + 8, t.high);\n}\n\n\n/*************************************\n *\n * x87 stack handling\n *\n *************************************/\n\nINLINE void x87_set_stack_top(int top)\n{\n\tm_x87_sw &= ~(X87_SW_TOP_MASK << X87_SW_TOP_SHIFT);\n\tm_x87_sw |= (top << X87_SW_TOP_SHIFT);\n}\n\nINLINE void x87_set_tag(int reg, int tag)\n{\n\tint shift = X87_TW_FIELD_SHIFT(reg);\n\n\tm_x87_tw &= ~(X87_TW_MASK << shift);\n\tm_x87_tw |= (tag << shift);\n}\n\nvoid x87_write_stack(int i, floatx80 value, int update_tag)\n{\n\tST(i) = value;\n\n\tif (update_tag)\n\t{\n\t\tint tag;\n\n\t\tif (floatx80_is_zero(value))\n\t\t{\n\t\t\ttag = X87_TW_ZERO;\n\t\t}\n\t\telse if (floatx80_is_inf(value) || floatx80_is_nan(value))\n\t\t{\n\t\t\ttag = X87_TW_SPECIAL;\n\t\t}\n\t\telse\n\t\t{\n\t\t\ttag = X87_TW_VALID;\n\t\t}\n\n\t\tx87_set_tag(ST_TO_PHYS(i), tag);\n\t}\n}\n\nINLINE void x87_set_stack_underflow()\n{\n\tm_x87_sw &= ~X87_SW_C1;\n\tm_x87_sw |= X87_SW_IE | X87_SW_SF;\n}\n\nINLINE void x87_set_stack_overflow()\n{\n\tm_x87_sw |= X87_SW_C1 | X87_SW_IE | X87_SW_SF;\n}\n\nint x87_inc_stack()\n{\n\tint ret = 1;\n\n\t// Check for stack underflow\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tret = 0;\n\t\tx87_set_stack_underflow();\n\n\t\t// Don't update the stack if the exception is unmasked\n\t\tif (~m_x87_cw & X87_CW_IM)\n\t\t\treturn ret;\n\t}\n\n\tx87_set_tag(ST_TO_PHYS(0), X87_TW_EMPTY);\n\tx87_set_stack_top(ST_TO_PHYS(1));\n\treturn ret;\n}\n\nint x87_dec_stack()\n{\n\tint ret = 1;\n\n\t// Check for stack overflow\n\tif (!X87_IS_ST_EMPTY(7))\n\t{\n\t\tret = 0;\n\t\tx87_set_stack_overflow();\n\n\t\t// Don't update the stack if the exception is unmasked\n\t\tif (~m_x87_cw & X87_CW_IM)\n\t\t\treturn ret;\n\t}\n\n\tx87_set_stack_top(ST_TO_PHYS(7));\n\treturn ret;\n}\n\n\n/*************************************\n *\n * Exception handling\n *\n *************************************/\n\nint x87_mf_fault()\n{\n\tif ((m_x87_sw & X87_SW_ES) && (m_cr[0] & 0x20)) // FIXME: 486 and up only\n\t{\n\t\tm_ext = 1;\n\t\ti386_trap(FAULT_MF, 0, 0);\n\t\treturn 1;\n\t}\n\treturn 0;\n}\n\nUINT32 Getx87EA(UINT8 modrm, int rwn)\n{\n\tUINT8 segment;\n\tUINT32 ea;\n\tmodrm_to_EA(modrm, &ea, &segment);\n\tUINT32 ret = i386_translate(segment, ea, rwn);\n\tm_x87_ds = m_sreg[segment].selector;\n\tif (PROTECTED_MODE && !V8086_MODE)\n\t\tm_x87_data_ptr = ea;\n\telse\n\t\tm_x87_data_ptr = ea + (m_x87_ds << 4);\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\treturn ret;\n}\n\nint x87_check_exceptions(bool store = false);\n\nint x87_check_exceptions(bool store)\n{\n\tm_x87_cs = m_sreg[CS].selector;\n\tif (PROTECTED_MODE && !V8086_MODE)\n\t\tm_x87_inst_ptr = m_prev_eip;\n\telse\n\t\tm_x87_inst_ptr = m_prev_eip + (m_x87_cs << 4);\n\n\t/* Update the exceptions from SoftFloat */\n\tif (float_exception_flags & float_flag_invalid)\n\t{\n\t\tm_x87_sw |= X87_SW_IE;\n\t\tfloat_exception_flags &= ~float_flag_invalid;\n\t}\n\tif (float_exception_flags & float_flag_overflow)\n\t{\n\t\tm_x87_sw |= X87_SW_OE;\n\t\tfloat_exception_flags &= ~float_flag_overflow;\n\t}\n\tif (float_exception_flags & float_flag_underflow)\n\t{\n\t\tm_x87_sw |= X87_SW_UE;\n\t\tfloat_exception_flags &= ~float_flag_underflow;\n\t}\n\tif (float_exception_flags & float_flag_inexact)\n\t{\n\t\tm_x87_sw |= X87_SW_PE;\n\t\tfloat_exception_flags &= ~float_flag_inexact;\n\t}\n\tif (float_exception_flags & float_flag_divbyzero)\n\t{\n\t\tm_x87_sw |= X87_SW_ZE;\n\t\tfloat_exception_flags &= ~float_flag_divbyzero;\n\t}\n\n\tUINT16 unmasked = (m_x87_sw & ~m_x87_cw) & 0x3f;\n\tif (unmasked)\n\t{\n\t\tlogerror(\"Unmasked x87 exception (CW:%.4x, SW:%.4x)\\n\", m_x87_cw, m_x87_sw);\n\t\tm_x87_sw |= X87_SW_ES;\n\t\tif (store || !(unmasked & (X87_SW_OE | X87_SW_UE)))\n\t\t\treturn 0;\n\t}\n\n\treturn 1;\n}\n\nINLINE void x87_write_cw(UINT16 cw)\n{\n\tm_x87_cw = cw;\n\n\t/* Update the SoftFloat rounding mode */\n\tfloat_rounding_mode = x87_to_sf_rc[(m_x87_cw >> X87_CW_RC_SHIFT) & X87_CW_RC_MASK];\n}\n\nvoid x87_reset()\n{\n\tx87_write_cw(0x0037f);\n\n\tm_x87_sw = 0;\n\tm_x87_tw = 0xffff;\n\n\t// TODO: FEA=0, FDS=0, FIP=0 FOP=0 FCS=0\n\tm_x87_data_ptr = 0;\n\tm_x87_inst_ptr = 0;\n\tm_x87_opcode = 0;\n}\n\n\n/*************************************\n *\n * Core arithmetic\n *\n *************************************/\n\nstatic floatx80 x87_add(floatx80 a, floatx80 b)\n{\n\tfloatx80 result = { 0 };\n\n\tswitch ((m_x87_cw >> X87_CW_PC_SHIFT) & X87_CW_PC_MASK)\n\t{\n\t\tcase X87_CW_PC_SINGLE:\n\t\t{\n\t\t\tfloat32 a32 = floatx80_to_float32(a);\n\t\t\tfloat32 b32 = floatx80_to_float32(b);\n\t\t\tresult = float32_to_floatx80(float32_add(a32, b32));\n\t\t\tbreak;\n\t\t}\n\t\tcase X87_CW_PC_DOUBLE:\n\t\t{\n\t\t\tfloat64 a64 = floatx80_to_float64(a);\n\t\t\tfloat64 b64 = floatx80_to_float64(b);\n\t\t\tresult = float64_to_floatx80(float64_add(a64, b64));\n\t\t\tbreak;\n\t\t}\n\t\tcase X87_CW_PC_EXTEND:\n\t\t{\n\t\t\tresult = floatx80_add(a, b);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn result;\n}\n\nstatic floatx80 x87_sub(floatx80 a, floatx80 b)\n{\n\tfloatx80 result = { 0 };\n\n\tswitch ((m_x87_cw >> X87_CW_PC_SHIFT) & X87_CW_PC_MASK)\n\t{\n\t\tcase X87_CW_PC_SINGLE:\n\t\t{\n\t\t\tfloat32 a32 = floatx80_to_float32(a);\n\t\t\tfloat32 b32 = floatx80_to_float32(b);\n\t\t\tresult = float32_to_floatx80(float32_sub(a32, b32));\n\t\t\tbreak;\n\t\t}\n\t\tcase X87_CW_PC_DOUBLE:\n\t\t{\n\t\t\tfloat64 a64 = floatx80_to_float64(a);\n\t\t\tfloat64 b64 = floatx80_to_float64(b);\n\t\t\tresult = float64_to_floatx80(float64_sub(a64, b64));\n\t\t\tbreak;\n\t\t}\n\t\tcase X87_CW_PC_EXTEND:\n\t\t{\n\t\t\tresult = floatx80_sub(a, b);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn result;\n}\n\nstatic floatx80 x87_mul(floatx80 a, floatx80 b)\n{\n\tfloatx80 val = { 0 };\n\n\tswitch ((m_x87_cw >> X87_CW_PC_SHIFT) & X87_CW_PC_MASK)\n\t{\n\t\tcase X87_CW_PC_SINGLE:\n\t\t{\n\t\t\tfloat32 a32 = floatx80_to_float32(a);\n\t\t\tfloat32 b32 = floatx80_to_float32(b);\n\t\t\tval = float32_to_floatx80(float32_mul(a32, b32));\n\t\t\tbreak;\n\t\t}\n\t\tcase X87_CW_PC_DOUBLE:\n\t\t{\n\t\t\tfloat64 a64 = floatx80_to_float64(a);\n\t\t\tfloat64 b64 = floatx80_to_float64(b);\n\t\t\tval = float64_to_floatx80(float64_mul(a64, b64));\n\t\t\tbreak;\n\t\t}\n\t\tcase X87_CW_PC_EXTEND:\n\t\t{\n\t\t\tval = floatx80_mul(a, b);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn val;\n}\n\n\nstatic floatx80 x87_div(floatx80 a, floatx80 b)\n{\n\tfloatx80 val = { 0 };\n\n\tswitch ((m_x87_cw >> X87_CW_PC_SHIFT) & X87_CW_PC_MASK)\n\t{\n\t\tcase X87_CW_PC_SINGLE:\n\t\t{\n\t\t\tfloat32 a32 = floatx80_to_float32(a);\n\t\t\tfloat32 b32 = floatx80_to_float32(b);\n\t\t\tval = float32_to_floatx80(float32_div(a32, b32));\n\t\t\tbreak;\n\t\t}\n\t\tcase X87_CW_PC_DOUBLE:\n\t\t{\n\t\t\tfloat64 a64 = floatx80_to_float64(a);\n\t\t\tfloat64 b64 = floatx80_to_float64(b);\n\t\t\tval = float64_to_floatx80(float64_div(a64, b64));\n\t\t\tbreak;\n\t\t}\n\t\tcase X87_CW_PC_EXTEND:\n\t\t{\n\t\t\tval = floatx80_div(a, b);\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn val;\n}\n\n\n/*************************************\n *\n * Instructions\n *\n *************************************/\n\n/*************************************\n *\n * Add\n *\n *************************************/\n\nvoid x87_fadd_m32real(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT32 m32real = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = float32_to_floatx80(m32real);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_add(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(8);\n}\n\nvoid x87_fadd_m64real(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT64 m64real = READ64(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = float64_to_floatx80(m64real);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_add(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(8);\n}\n\nvoid x87_fadd_st_sti(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_add(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(8);\n}\n\nvoid x87_fadd_sti_st(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_add(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(i, result, TRUE);\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(8);\n}\n\nvoid x87_faddp(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_add(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(i, result, TRUE);\n\t\tx87_inc_stack();\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(8);\n}\n\nvoid x87_fiadd_m32int(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tINT32 m32int = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = int32_to_floatx80(m32int);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_add(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(19);\n}\n\nvoid x87_fiadd_m16int(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tINT16 m16int = READ16(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = int32_to_floatx80(m16int);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_add(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(20);\n}\n\n\n/*************************************\n *\n * Subtract\n *\n *************************************/\n\nvoid x87_fsub_m32real(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT32 m32real = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = float32_to_floatx80(m32real);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(8);\n}\n\nvoid x87_fsub_m64real(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT64 m64real = READ64(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = float64_to_floatx80(m64real);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(8);\n}\n\nvoid x87_fsub_st_sti(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(8);\n}\n\nvoid x87_fsub_sti_st(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(i);\n\t\tfloatx80 b = ST(0);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(i, result, TRUE);\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(8);\n}\n\nvoid x87_fsubp(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(i);\n\t\tfloatx80 b = ST(0);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(i, result, TRUE);\n\t\tx87_inc_stack();\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(8);\n}\n\nvoid x87_fisub_m32int(UINT8 modrm)\n{\n\tfloatx80 result;\n\n \tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tINT32 m32int = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = int32_to_floatx80(m32int);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(19);\n}\n\nvoid x87_fisub_m16int(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tINT16 m16int = READ16(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = int32_to_floatx80(m16int);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(20);\n}\n\n\n/*************************************\n *\n * Reverse Subtract\n *\n *************************************/\n\nvoid x87_fsubr_m32real(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT32 m32real = READ32(ea);\n\n\t\tfloatx80 a = float32_to_floatx80(m32real);\n\t\tfloatx80 b = ST(0);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(8);\n}\n\nvoid x87_fsubr_m64real(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT64 m64real = READ64(ea);\n\n\t\tfloatx80 a = float64_to_floatx80(m64real);\n\t\tfloatx80 b = ST(0);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(8);\n}\n\nvoid x87_fsubr_st_sti(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(i);\n\t\tfloatx80 b = ST(0);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(8);\n}\n\nvoid x87_fsubr_sti_st(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(i, result, TRUE);\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(8);\n}\n\nvoid x87_fsubrp(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(i, result, TRUE);\n\t\tx87_inc_stack();\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(8);\n}\n\nvoid x87_fisubr_m32int(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tINT32 m32int = READ32(ea);\n\n\t\tfloatx80 a = int32_to_floatx80(m32int);\n\t\tfloatx80 b = ST(0);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(19);\n}\n\nvoid x87_fisubr_m16int(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tINT16 m16int = READ16(ea);\n\n\t\tfloatx80 a = int32_to_floatx80(m16int);\n\t\tfloatx80 b = ST(0);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(20);\n}\n\n\n/*************************************\n *\n * Divide\n *\n *************************************/\n\nvoid x87_fdiv_m32real(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT32 m32real = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = float32_to_floatx80(m32real);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\nvoid x87_fdiv_m64real(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT64 m64real = READ64(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = float64_to_floatx80(m64real);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\nvoid x87_fdiv_st_sti(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(0, result, TRUE);\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\nvoid x87_fdiv_sti_st(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(i);\n\t\tfloatx80 b = ST(0);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(i, result, TRUE);\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\nvoid x87_fdivp(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(i);\n\t\tfloatx80 b = ST(0);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(i, result, TRUE);\n\t\tx87_inc_stack();\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\nvoid x87_fidiv_m32int(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tINT32 m32int = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = int32_to_floatx80(m32int);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\nvoid x87_fidiv_m16int(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tINT16 m16int = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = int32_to_floatx80(m16int);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\n\n/*************************************\n *\n * Reverse Divide\n *\n *************************************/\n\nvoid x87_fdivr_m32real(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT32 m32real = READ32(ea);\n\n\t\tfloatx80 a = float32_to_floatx80(m32real);\n\t\tfloatx80 b = ST(0);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\nvoid x87_fdivr_m64real(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT64 m64real = READ64(ea);\n\n\t\tfloatx80 a = float64_to_floatx80(m64real);\n\t\tfloatx80 b = ST(0);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\nvoid x87_fdivr_st_sti(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(i);\n\t\tfloatx80 b = ST(0);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(0, result, TRUE);\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\nvoid x87_fdivr_sti_st(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(i, result, TRUE);\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\nvoid x87_fdivrp(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(i, result, TRUE);\n\t\tx87_inc_stack();\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\n\nvoid x87_fidivr_m32int(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tINT32 m32int = READ32(ea);\n\n\t\tfloatx80 a = int32_to_floatx80(m32int);\n\t\tfloatx80 b = ST(0);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\nvoid x87_fidivr_m16int(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tINT16 m16int = READ32(ea);\n\n\t\tfloatx80 a = int32_to_floatx80(m16int);\n\t\tfloatx80 b = ST(0);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\n\n/*************************************\n *\n * Multiply\n *\n *************************************/\n\nvoid x87_fmul_m32real(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT32 m32real = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = float32_to_floatx80(m32real);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_mul(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(11);\n}\n\nvoid x87_fmul_m64real(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT64 m64real = READ64(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = float64_to_floatx80(m64real);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_mul(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(14);\n}\n\nvoid x87_fmul_st_sti(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_mul(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(16);\n}\n\nvoid x87_fmul_sti_st(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_mul(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(i, result, TRUE);\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(16);\n}\n\nvoid x87_fmulp(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_mul(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(i, result, TRUE);\n\t\tx87_inc_stack();\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(16);\n}\n\nvoid x87_fimul_m32int(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tINT32 m32int = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = int32_to_floatx80(m32int);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_mul(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(22);\n}\n\nvoid x87_fimul_m16int(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tINT16 m16int = READ16(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = int32_to_floatx80(m16int);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_mul(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(22);\n}\n\n\n/*************************************\n*\n* Conditional Move\n*\n*************************************/\n\nvoid x87_fcmovb_sti(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (m_CF == 1)\n\t{\n\t\tif (X87_IS_ST_EMPTY(i))\n\t\t{\n\t\t\tx87_set_stack_underflow();\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t\tresult = ST(i);\n\n\t\tif (x87_check_exceptions())\n\t\t{\n\t\t\tST(0) = result;\n\t\t}\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(4);\n}\n\nvoid x87_fcmove_sti(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (m_ZF == 1)\n\t{\n\t\tif (X87_IS_ST_EMPTY(i))\n\t\t{\n\t\t\tx87_set_stack_underflow();\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t\tresult = ST(i);\n\n\t\tif (x87_check_exceptions())\n\t\t{\n\t\t\tST(0) = result;\n\t\t}\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(4);\n}\n\nvoid x87_fcmovbe_sti(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif ((m_CF | m_ZF) == 1)\n\t{\n\t\tif (X87_IS_ST_EMPTY(i))\n\t\t{\n\t\t\tx87_set_stack_underflow();\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t\tresult = ST(i);\n\n\t\tif (x87_check_exceptions())\n\t\t{\n\t\t\tST(0) = result;\n\t\t}\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(4);\n}\n\nvoid x87_fcmovu_sti(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (m_PF == 1)\n\t{\n\t\tif (X87_IS_ST_EMPTY(i))\n\t\t{\n\t\t\tx87_set_stack_underflow();\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t\tresult = ST(i);\n\n\t\tif (x87_check_exceptions())\n\t\t{\n\t\t\tST(0) = result;\n\t\t}\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(4);\n}\n\nvoid x87_fcmovnb_sti(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (m_CF == 0)\n\t{\n\t\tif (X87_IS_ST_EMPTY(i))\n\t\t{\n\t\t\tx87_set_stack_underflow();\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t\tresult = ST(i);\n\n\t\tif (x87_check_exceptions())\n\t\t{\n\t\t\tST(0) = result;\n\t\t}\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(4);\n}\n\nvoid x87_fcmovne_sti(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (m_ZF == 0)\n\t{\n\t\tif (X87_IS_ST_EMPTY(i))\n\t\t{\n\t\t\tx87_set_stack_underflow();\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t\tresult = ST(i);\n\n\t\tif (x87_check_exceptions())\n\t\t{\n\t\t\tST(0) = result;\n\t\t}\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(4);\n}\n\nvoid x87_fcmovnbe_sti(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif ((m_CF == 0) && (m_ZF == 0))\n\t{\n\t\tif (X87_IS_ST_EMPTY(i))\n\t\t{\n\t\t\tx87_set_stack_underflow();\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t\tresult = ST(i);\n\n\t\tif (x87_check_exceptions())\n\t\t{\n\t\t\tST(0) = result;\n\t\t}\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(4);\n}\n\nvoid x87_fcmovnu_sti(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (m_PF == 0)\n\t{\n\t\tif (X87_IS_ST_EMPTY(i))\n\t\t{\n\t\t\tx87_set_stack_underflow();\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t\tresult = ST(i);\n\n\t\tif (x87_check_exceptions())\n\t\t{\n\t\t\tST(0) = result;\n\t\t}\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(4);\n}\n\n/*************************************\n *\n * Miscellaneous arithmetic\n *\n *************************************/\n\nvoid x87_fprem(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a0 = ST(0);\n\t\tfloatx80 b1 = ST(1);\n\n\t \tfloatx80 a0_abs = packFloatx80(0, (a0.high & 0x7FFF), a0.low);\n\t\tfloatx80 b1_abs = packFloatx80(0, (b1.high & 0x7FFF), b1.low);\n\t\tm_x87_sw &= ~X87_SW_C2;\n\n\t\t//int d=extractFloatx80Exp(a0)-extractFloatx80Exp(b1);\n\t\tint d = (a0.high & 0x7FFF) - (b1.high & 0x7FFF);\n\t\tif (d < 64) {\n\t\t\tfloatx80 t=floatx80_div(a0_abs, b1_abs);\n\t\t\tint64 q = floatx80_to_int64_round_to_zero(t);\n\t\t\tfloatx80 qf = int64_to_floatx80(q);\n\t\t\tfloatx80 tt = floatx80_mul(b1_abs, qf);\n\t\t\tresult = floatx80_sub(a0_abs, tt);\n\t \t\tresult.high |= a0.high & 0x8000;\n\t\t\t// C2 already 0\n\t\t\tm_x87_sw &= ~(X87_SW_C0|X87_SW_C3|X87_SW_C1);\n\t\t\tif (q & 1)\n\t\t\t\tm_x87_sw |= X87_SW_C1;\n\t\t\tif (q & 2)\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\t\t\tif (q & 4)\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t\telse {\n\t\t\tm_x87_sw |= X87_SW_C2;\n\t\t\tint n = 63;\n\t\t\tint e = 1 << (d - n);\n\t\t\tfloatx80 ef = int32_to_floatx80(e);\n\t\t\tfloatx80 t=floatx80_div(a0, b1);\n\t\t\tfloatx80 td = floatx80_div(t, ef);\n\t\t\tint64 qq = floatx80_to_int64_round_to_zero(td);\n\t\t\tfloatx80 qqf = int64_to_floatx80(qq);\n\t\t\tfloatx80 tt = floatx80_mul(b1, qqf);\n\t\t\tfloatx80 ttt = floatx80_mul(tt, ef);\n\t\t\tresult = floatx80_sub(a0, ttt);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(84);\n}\n\nvoid x87_fprem1(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(1);\n\n\t\tm_x87_sw &= ~X87_SW_C2;\n\n\t\t// TODO: Implement Cx bits\n\t\tresult = floatx80_rem(a, b);\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(94);\n}\n\nvoid x87_fsqrt(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 value = ST(0);\n\n\t\tif ((!floatx80_is_zero(value) && (value.high & 0x8000)) ||\n\t\t\t\tfloatx80_is_denormal(value))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = floatx80_sqrt(value);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(8);\n}\n\n/*************************************\n *\n * Trigonometric\n *\n *************************************/\n\nvoid x87_f2xm1(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\textern floatx80 f2xm1(floatx80 a);\n\t\tresult = f2xm1(ST(0));\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(0, result, TRUE);\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(242);\n}\n\nvoid x87_fyl2x(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 x = ST(0);\n\n\t\tif (x.high & 0x8000)\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\textern floatx80 fyl2x(floatx80 a, floatx80 b);\n\t\t\tresult = fyl2x(ST(0), ST(1));\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(1, result, TRUE);\n\t\tx87_inc_stack();\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(250);\n}\n\nvoid x87_fyl2xp1(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\n\t\textern floatx80 fyl2xp1(floatx80 a, floatx80 b);\n\t\tresult = fyl2xp1(ST(0), ST(1));\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(1, result, TRUE);\n\t\tx87_inc_stack();\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(313);\n}\n\nvoid x87_fptan(UINT8 modrm)\n{\n\tfloatx80 result1, result2;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult1 = fx80_inan;\n\t\tresult2 = fx80_inan;\n\t}\n\telse if (!X87_IS_ST_EMPTY(7))\n\t{\n\t\tx87_set_stack_overflow();\n\t\tresult1 = fx80_inan;\n\t\tresult2 = fx80_inan;\n\t}\n\telse\n\t{\n\t\tresult1 = ST(0);\n\t\tresult2 = fx80_one;\n\n#if 1 // TODO: Function produces bad values\n\t\tif (floatx80_ftan(result1) != -1)\n\t\t\tm_x87_sw &= ~X87_SW_C2;\n\t\telse\n\t\t\tm_x87_sw |= X87_SW_C2;\n#else\n\t\tdouble x = fx80_to_double(result1);\n\t\tx = tan(x);\n\t\tresult1 = double_to_fx80(x);\n\n\t\tm_x87_sw &= ~X87_SW_C2;\n#endif\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(0, result1, TRUE);\n\t\tx87_dec_stack();\n\t\tx87_write_stack(0, result2, TRUE);\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(244);\n}\n\nvoid x87_fpatan(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tresult = floatx80_fpatan(ST(0), ST(1));\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(1, result, TRUE);\n\t\tx87_inc_stack();\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(289);\n}\n\nvoid x87_fsin(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tresult = ST(0);\n\n#if 1 // TODO: Function produces bad values\n\t\tif (floatx80_fsin(result) != -1)\n\t\t\tm_x87_sw &= ~X87_SW_C2;\n\t\telse\n\t\t\tm_x87_sw |= X87_SW_C2;\n#else\n\t\tdouble x = fx80_to_double(result);\n\t\tx = sin(x);\n\t\tresult = double_to_fx80(x);\n\n\t\tm_x87_sw &= ~X87_SW_C2;\n#endif\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(241);\n}\n\nvoid x87_fcos(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tresult = ST(0);\n\n#if 1 // TODO: Function produces bad values\n\t\tif (floatx80_fcos(result) != -1)\n\t\t\tm_x87_sw &= ~X87_SW_C2;\n\t\telse\n\t\t\tm_x87_sw |= X87_SW_C2;\n#else\n\t\tdouble x = fx80_to_double(result);\n\t\tx = cos(x);\n\t\tresult = double_to_fx80(x);\n\n\t\tm_x87_sw &= ~X87_SW_C2;\n#endif\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(241);\n}\n\nvoid x87_fsincos(UINT8 modrm)\n{\n\tfloatx80 s_result, c_result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\ts_result = c_result = fx80_inan;\n\t}\n\telse if (!X87_IS_ST_EMPTY(7))\n\t{\n\t\tx87_set_stack_overflow();\n\t\ts_result = c_result = fx80_inan;\n\t}\n\telse\n\t{\n\t\textern int sf_fsincos(floatx80 a, floatx80 *sin_a, floatx80 *cos_a);\n\n\t\ts_result = c_result = ST(0);\n\n#if 1 // TODO: Function produces bad values\n\t\tif (sf_fsincos(s_result, &s_result, &c_result) != -1)\n\t\t\tm_x87_sw &= ~X87_SW_C2;\n\t\telse\n\t\t\tm_x87_sw |= X87_SW_C2;\n#else\n\t\tdouble s = fx80_to_double(s_result);\n\t\tdouble c = fx80_to_double(c_result);\n\t\ts = sin(s);\n\t\tc = cos(c);\n\n\t\ts_result = double_to_fx80(s);\n\t\tc_result = double_to_fx80(c);\n\n\t\tm_x87_sw &= ~X87_SW_C2;\n#endif\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(0, s_result, TRUE);\n\t\tx87_dec_stack();\n\t\tx87_write_stack(0, c_result, TRUE);\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(291);\n}\n\n\n/*************************************\n *\n * Load data\n *\n *************************************/\n\nvoid x87_fld_m32real(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (x87_dec_stack())\n\t{\n\t\tUINT32 m32real = READ32(ea);\n\n\t\tvalue = float32_to_floatx80(m32real);\n\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tif (floatx80_is_signaling_nan(value) || floatx80_is_denormal(value))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tvalue = fx80_inan;\n\t\t}\n\t}\n\telse\n\t{\n\t\tvalue = fx80_inan;\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, value, TRUE);\n\n\tCYCLES(3);\n}\n\nvoid x87_fld_m64real(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (x87_dec_stack())\n\t{\n\t\tUINT64 m64real = READ64(ea);\n\n\t\tvalue = float64_to_floatx80(m64real);\n\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tif (floatx80_is_signaling_nan(value) || floatx80_is_denormal(value))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tvalue = fx80_inan;\n\t\t}\n\t}\n\telse\n\t{\n\t\tvalue = fx80_inan;\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, value, TRUE);\n\n\tCYCLES(3);\n}\n\nvoid x87_fld_m80real(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (x87_dec_stack())\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t\tvalue = READ80(ea);\n\t}\n\telse\n\t{\n\t\tvalue = fx80_inan;\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, value, TRUE);\n\n\tCYCLES(6);\n}\n\nvoid x87_fld_sti(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (x87_dec_stack())\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t\tvalue = ST((modrm + 1) & 7);\n\t}\n\telse\n\t{\n\t\tvalue = fx80_inan;\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, value, TRUE);\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(4);\n}\n\nvoid x87_fild_m16int(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (!x87_dec_stack())\n\t{\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tINT16 m16int = READ16(ea);\n\t\tvalue = int32_to_floatx80(m16int);\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, value, TRUE);\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(13);\n}\n\nvoid x87_fild_m32int(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (!x87_dec_stack())\n\t{\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tINT32 m32int = READ32(ea);\n\t\tvalue = int32_to_floatx80(m32int);\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, value, TRUE);\n\n\tCYCLES(9);\n}\n\nvoid x87_fild_m64int(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (!x87_dec_stack())\n\t{\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tINT64 m64int = READ64(ea);\n\t\tvalue = int64_to_floatx80(m64int);\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, value, TRUE);\n\n\tCYCLES(10);\n}\n\nvoid x87_fbld(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (!x87_dec_stack())\n\t{\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tUINT64 m64val = 0;\n\t\tUINT16 sign;\n\n\t\tvalue = READ80(ea);\n\n\t\tsign = value.high & 0x8000;\n\t\tm64val += ((value.high >> 4) & 0xf) * 10;\n\t\tm64val += ((value.high >> 0) & 0xf);\n\n\t\tfor (int i = 60; i >= 0; i -= 4)\n\t\t{\n\t\t\tm64val *= 10;\n\t\t\tm64val += (value.low >> i) & 0xf;\n\t\t}\n\n\t\tvalue = int64_to_floatx80(m64val);\n\t\tvalue.high |= sign;\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, value, TRUE);\n\n\tCYCLES(75);\n}\n\n\n/*************************************\n *\n * Store data\n *\n *************************************/\n\nvoid x87_fst_m32real(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 1);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t\tvalue = ST(0);\n\t}\n\n\tUINT32 m32real = floatx80_to_float32(value);\n\tif (x87_check_exceptions(true))\n\t\tWRITE32(ea, m32real);\n\n\tCYCLES(7);\n}\n\nvoid x87_fst_m64real(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 1);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t\tvalue = ST(0);\n\t}\n\n\t\tUINT64 m64real = floatx80_to_float64(value);\n\tif (x87_check_exceptions(true))\n\t\tWRITE64(ea, m64real);\n\n\tCYCLES(8);\n}\n\nvoid x87_fst_sti(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\tfloatx80 value;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t\tvalue = ST(0);\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(i, value, TRUE);\n\n\tCYCLES(3);\n}\n\nvoid x87_fstp_m32real(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 1);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t\tvalue = ST(0);\n\t}\n\n\tUINT32 m32real = floatx80_to_float32(value);\n\tif (x87_check_exceptions(true))\n\t{\n\t\tWRITE32(ea, m32real);\n\t\tx87_inc_stack();\n\t}\n\n\tCYCLES(7);\n}\n\nvoid x87_fstp_m64real(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t\tvalue = ST(0);\n\t}\n\n\n\tUINT32 ea = Getx87EA(modrm, 1);\n\tUINT64 m64real = floatx80_to_float64(value);\n\tif (x87_check_exceptions(true))\n\t{\n\t\tWRITE64(ea, m64real);\n\t\tx87_inc_stack();\n\t}\n\n\tCYCLES(8);\n}\n\nvoid x87_fstp_m80real(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t\tvalue = ST(0);\n\t}\n\n\tUINT32 ea = Getx87EA(modrm, 1);\n\tif (x87_check_exceptions(true))\n\t{\n\t\tWRITE80(ea, value);\n\t\tx87_inc_stack();\n\t}\n\n\tCYCLES(6);\n}\n\nvoid x87_fstp_sti(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\tfloatx80 value;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t\tvalue = ST(0);\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(i, value, TRUE);\n\t\tx87_inc_stack();\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(3);\n}\n\nvoid x87_fist_m16int(UINT8 modrm)\n{\n\tINT16 m16int;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm16int = -32768;\n\t}\n\telse\n\t{\n\t\tfloatx80 fx80 = floatx80_round_to_int(ST(0));\n\n\t\tfloatx80 lowerLim = int32_to_floatx80(-32768);\n\t\tfloatx80 upperLim = int32_to_floatx80(32767);\n\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tif (!floatx80_lt(fx80, lowerLim) && floatx80_le(fx80, upperLim))\n\t\t\tm16int = floatx80_to_int32(fx80);\n\t\telse\n\t\t{\n\t\t\tfloat_exception_flags = float_flag_invalid;\n\t\t\tm16int = -32768;\n\t\t}\n\t}\n\n\tUINT32 ea = Getx87EA(modrm, 1);\n\tif (x87_check_exceptions(true))\n\t{\n\t\tWRITE16(ea, m16int);\n\t}\n\n\tCYCLES(29);\n}\n\nvoid x87_fist_m32int(UINT8 modrm)\n{\n\tINT32 m32int;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm32int = 0x80000000;\n\t}\n\telse\n\t{\n\t\tfloatx80 fx80 = floatx80_round_to_int(ST(0));\n\n\t\tfloatx80 lowerLim = int32_to_floatx80(0x80000000);\n\t\tfloatx80 upperLim = int32_to_floatx80(0x7fffffff);\n\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tif (!floatx80_lt(fx80, lowerLim) && floatx80_le(fx80, upperLim))\n\t\t\tm32int = floatx80_to_int32(fx80);\n\t\telse\n\t\t{\n\t\t\tfloat_exception_flags = float_flag_invalid;\n\t\t\tm32int = 0x80000000;\n\t\t}\n\t}\n\n\tUINT32 ea = Getx87EA(modrm, 1);\n\tif (x87_check_exceptions(true))\n\t{\n\t\tWRITE32(ea, m32int);\n\t}\n\n\tCYCLES(28);\n}\n\nvoid x87_fistp_m16int(UINT8 modrm)\n{\n\tINT16 m16int;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm16int = (UINT16)0x8000;\n\t}\n\telse\n\t{\n\t\tfloatx80 fx80 = floatx80_round_to_int(ST(0));\n\n\t\tfloatx80 lowerLim = int32_to_floatx80(-32768);\n\t\tfloatx80 upperLim = int32_to_floatx80(32767);\n\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tif (!floatx80_lt(fx80, lowerLim) && floatx80_le(fx80, upperLim))\n\t\t\tm16int = floatx80_to_int32(fx80);\n\t\telse\n\t\t{\n\t\t\tfloat_exception_flags = float_flag_invalid;\n\t\t\tm16int = (UINT16)0x8000;\n\t\t}\n\t}\n\n\tUINT32 ea = Getx87EA(modrm, 1);\n\tif (x87_check_exceptions(true))\n\t{\n\t\tWRITE16(ea, m16int);\n\t\tx87_inc_stack();\n\t}\n\n\tCYCLES(29);\n}\n\nvoid x87_fistp_m32int(UINT8 modrm)\n{\n\tINT32 m32int;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm32int = 0x80000000;\n\t}\n\telse\n\t{\n\t\tfloatx80 fx80 = floatx80_round_to_int(ST(0));\n\n\t\tfloatx80 lowerLim = int32_to_floatx80(0x80000000);\n\t\tfloatx80 upperLim = int32_to_floatx80(0x7fffffff);\n\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tif (!floatx80_lt(fx80, lowerLim) && floatx80_le(fx80, upperLim))\n\t\t\tm32int = floatx80_to_int32(fx80);\n\t\telse\n\t\t{\n\t\t\tfloat_exception_flags = float_flag_invalid;\n\t\t\tm32int = 0x80000000;\n\t\t}\n\t}\n\n\tUINT32 ea = Getx87EA(modrm, 1);\n\tif (x87_check_exceptions(true))\n\t{\n\t\tWRITE32(ea, m32int);\n\t\tx87_inc_stack();\n\t}\n\n\tCYCLES(29);\n}\n\nvoid x87_fistp_m64int(UINT8 modrm)\n{\n\tINT64 m64int;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm64int = U64(0x8000000000000000);\n\t}\n\telse\n\t{\n\t\tfloatx80 fx80 = floatx80_round_to_int(ST(0));\n\n\t\tfloatx80 lowerLim = int64_to_floatx80(U64(0x8000000000000000));\n\t\tfloatx80 upperLim = int64_to_floatx80(U64(0x7fffffffffffffff));\n\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tif (!floatx80_lt(fx80, lowerLim) && floatx80_le(fx80, upperLim))\n\t\t\tm64int = floatx80_to_int64(fx80);\n\t\telse\n\t\t{\n\t\t\tfloat_exception_flags = float_flag_invalid;\n\t\t\tm64int = U64(0x8000000000000000);\n\t\t}\n\t}\n\n\tUINT32 ea = Getx87EA(modrm, 1);\n\tif (x87_check_exceptions(true))\n\t{\n\t\tWRITE64(ea, m64int);\n\t\tx87_inc_stack();\n\t}\n\n\tCYCLES(29);\n}\n\nvoid x87_fbstp(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT64 u64 = floatx80_to_int64(floatx80_abs(ST(0)));\n\t\tresult.low = 0;\n\n\t\tfor (int i = 0; i < 64; i += 4)\n\t\t{\n\t\t\tresult.low += (u64 % 10) << i;\n\t\t\tu64 /= 10;\n\t\t}\n\n\t\tresult.high = (u64 % 10);\n\t\tresult.high += ((u64 / 10) % 10) << 4;\n\t\tresult.high |= ST(0).high & 0x8000;\n\t}\n\n\tUINT32 ea = Getx87EA(modrm, 1);\n\tif (x87_check_exceptions(true))\n\t{\n\t\tWRITE80(ea, result);\n\t\tx87_inc_stack();\n\t}\n\n\tCYCLES(175);\n}\n\n\n/*************************************\n *\n * Constant load\n *\n *************************************/\n\nvoid x87_fld1(UINT8 modrm)\n{\n\tfloatx80 value;\n\tint tag;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (x87_dec_stack())\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t\tvalue = fx80_one;\n\t\ttag = X87_TW_VALID;\n\t}\n\telse\n\t{\n\t\tvalue = fx80_inan;\n\t\ttag = X87_TW_SPECIAL;\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_set_tag(ST_TO_PHYS(0), tag);\n\t\tx87_write_stack(0, value, FALSE);\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(4);\n}\n\nvoid x87_fldl2t(UINT8 modrm)\n{\n\tfloatx80 value;\n\tint tag;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (x87_dec_stack())\n\t{\n\t\ttag = X87_TW_VALID;\n\t\tvalue.high = 0x4000;\n\n\t\tif (X87_RC == X87_CW_RC_UP)\n\t\t\tvalue.low =  U64(0xd49a784bcd1b8aff);\n\t\telse\n\t\t\tvalue.low = U64(0xd49a784bcd1b8afe);\n\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t}\n\telse\n\t{\n\t\tvalue = fx80_inan;\n\t\ttag = X87_TW_SPECIAL;\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_set_tag(ST_TO_PHYS(0), tag);\n\t\tx87_write_stack(0, value, FALSE);\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(8);\n}\n\nvoid x87_fldl2e(UINT8 modrm)\n{\n\tfloatx80 value;\n\tint tag;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (x87_dec_stack())\n\t{\n\t\tint rc = X87_RC;\n\t\ttag = X87_TW_VALID;\n\t\tvalue.high = 0x3fff;\n\n\t\tif (rc == X87_CW_RC_UP || rc == X87_CW_RC_NEAREST)\n\t\t\tvalue.low = U64(0xb8aa3b295c17f0bc);\n\t\telse\n\t\t\tvalue.low = U64(0xb8aa3b295c17f0bb);\n\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t}\n\telse\n\t{\n\t\tvalue = fx80_inan;\n\t\ttag = X87_TW_SPECIAL;\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_set_tag(ST_TO_PHYS(0), tag);\n\t\tx87_write_stack(0, value, FALSE);\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(8);\n}\n\nvoid x87_fldpi(UINT8 modrm)\n{\n\tfloatx80 value;\n\tint tag;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (x87_dec_stack())\n\t{\n\t\tint rc = X87_RC;\n\t\ttag = X87_TW_VALID;\n\t\tvalue.high = 0x4000;\n\n\t\tif (rc == X87_CW_RC_UP || rc == X87_CW_RC_NEAREST)\n\t\t\tvalue.low = U64(0xc90fdaa22168c235);\n\t\telse\n\t\t\tvalue.low = U64(0xc90fdaa22168c234);\n\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t}\n\telse\n\t{\n\t\tvalue = fx80_inan;\n\t\ttag = X87_TW_SPECIAL;\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_set_tag(ST_TO_PHYS(0), tag);\n\t\tx87_write_stack(0, value, FALSE);\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(8);\n}\n\nvoid x87_fldlg2(UINT8 modrm)\n{\n\tfloatx80 value;\n\tint tag;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (x87_dec_stack())\n\t{\n\t\tint rc = X87_RC;\n\t\ttag = X87_TW_VALID;\n\t\tvalue.high = 0x3ffd;\n\n\t\tif (rc == X87_CW_RC_UP || rc == X87_CW_RC_NEAREST)\n\t\t\tvalue.low = U64(0x9a209a84fbcff799);\n\t\telse\n\t\t\tvalue.low = U64(0x9a209a84fbcff798);\n\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t}\n\telse\n\t{\n\t\tvalue = fx80_inan;\n\t\ttag = X87_TW_SPECIAL;\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_set_tag(ST_TO_PHYS(0), tag);\n\t\tx87_write_stack(0, value, FALSE);\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(8);\n}\n\nvoid x87_fldln2(UINT8 modrm)\n{\n\tfloatx80 value;\n\tint tag;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (x87_dec_stack())\n\t{\n\t\tint rc = X87_RC;\n\t\ttag = X87_TW_VALID;\n\t\tvalue.high = 0x3ffe;\n\n\t\tif (rc == X87_CW_RC_UP || rc == X87_CW_RC_NEAREST)\n\t\t\tvalue.low = U64(0xb17217f7d1cf79ac);\n\t\telse\n\t\t\tvalue.low = U64(0xb17217f7d1cf79ab);\n\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t}\n\telse\n\t{\n\t\tvalue = fx80_inan;\n\t\ttag = X87_TW_SPECIAL;\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_set_tag(ST_TO_PHYS(0), tag);\n\t\tx87_write_stack(0, value, FALSE);\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(8);\n}\n\nvoid x87_fldz(UINT8 modrm)\n{\n\tfloatx80 value;\n\tint tag;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (x87_dec_stack())\n\t{\n\t\tvalue = fx80_zero;\n\t\ttag = X87_TW_ZERO;\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t}\n\telse\n\t{\n\t\tvalue = fx80_inan;\n\t\ttag = X87_TW_SPECIAL;\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_set_tag(ST_TO_PHYS(0), tag);\n\t\tx87_write_stack(0, value, FALSE);\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(4);\n}\n\n\n/*************************************\n *\n * Miscellaneous\n *\n *************************************/\n\nvoid x87_fnop(UINT8 modrm)\n{\n\tx87_mf_fault();\n\tCYCLES(3);\n}\n\nvoid x87_fchs(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tvalue = ST(0);\n\t\tvalue.high ^= 0x8000;\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, value, FALSE);\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(6);\n}\n\nvoid x87_fabs(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tvalue = ST(0);\n\t\tvalue.high &= 0x7fff;\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, value, FALSE);\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(6);\n}\n\nvoid x87_fscale(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t\tvalue = floatx80_scale(ST(0), ST(1));\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, value, FALSE);\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(31);\n}\n\nvoid x87_frndint(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tvalue = floatx80_round_to_int(ST(0));\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, value, TRUE);\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(21);\n}\n\nvoid x87_fxtract(UINT8 modrm)\n{\n\tfloatx80 sig80, exp80;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tsig80 = exp80 = fx80_inan;\n\t}\n\telse if (!X87_IS_ST_EMPTY(7))\n\t{\n\t\tx87_set_stack_overflow();\n\t\tsig80 = exp80 = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 value = ST(0);\n\n\t\tif (floatx80_eq(value, fx80_zero))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_ZE;\n\n\t\t\texp80 = fx80_ninf;\n\t\t\tsig80 = fx80_zero;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Extract the unbiased exponent\n\t\t\texp80 = int32_to_floatx80((value.high & 0x7fff) - 0x3fff);\n\n\t\t\t// For the significand, replicate the original value and set its true exponent to 0.\n\t\t\tsig80 = value;\n\t\t\tsig80.high &= ~0x7fff;\n\t\t\tsig80.high |=  0x3fff;\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(0, exp80, TRUE);\n\t\tx87_dec_stack();\n\t\tx87_write_stack(0, sig80, TRUE);\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(21);\n}\n\n/*************************************\n *\n * Comparison\n *\n *************************************/\n\nvoid x87_ftst(UINT8 modrm)\n{\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tif (floatx80_is_nan(ST(0)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(ST(0), fx80_zero))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(ST(0), fx80_zero))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tx87_check_exceptions();\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(4);\n}\n\nvoid x87_fxam(UINT8 modrm)\n{\n\tfloatx80 value = ST(0);\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t// TODO: Unsupported and denormal values\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C0;\n\t}\n\telse if (floatx80_is_zero(value))\n\t{\n\t\tm_x87_sw |= X87_SW_C3;\n\t}\n\telse if (floatx80_is_nan(value))\n\t{\n\t\tm_x87_sw |= X87_SW_C0;\n\t}\n\telse if (floatx80_is_inf(value))\n\t{\n\t\tm_x87_sw |= X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw |= X87_SW_C2;\n\t}\n\n\tif (value.high & 0x8000)\n\t\tm_x87_sw |= X87_SW_C1;\n\n\tCYCLES(8);\n}\n\nvoid x87_ficom_m16int(UINT8 modrm)\n{\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tINT16 m16int = READ16(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = int32_to_floatx80(m16int);\n\n\t\tif (floatx80_is_nan(a))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tx87_check_exceptions();\n\n\tCYCLES(16);\n}\n\nvoid x87_ficom_m32int(UINT8 modrm)\n{\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tINT32 m32int = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = int32_to_floatx80(m32int);\n\n\t\tif (floatx80_is_nan(a))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tx87_check_exceptions();\n\n\tCYCLES(15);\n}\n\nvoid x87_ficomp_m16int(UINT8 modrm)\n{\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tINT16 m16int = READ16(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = int32_to_floatx80(m16int);\n\n\t\tif (floatx80_is_nan(a))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_inc_stack();\n\n\tCYCLES(16);\n}\n\nvoid x87_ficomp_m32int(UINT8 modrm)\n{\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tINT32 m32int = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = int32_to_floatx80(m32int);\n\n\t\tif (floatx80_is_nan(a))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_inc_stack();\n\n\tCYCLES(15);\n}\n\n\nvoid x87_fcom_m32real(UINT8 modrm)\n{\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tUINT32 m32real = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = float32_to_floatx80(m32real);\n\n\t\tif (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tx87_check_exceptions();\n\n\tCYCLES(4);\n}\n\nvoid x87_fcom_m64real(UINT8 modrm)\n{\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tUINT64 m64real = READ64(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = float64_to_floatx80(m64real);\n\n\t\tif (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tx87_check_exceptions();\n\n\tCYCLES(4);\n}\n\nvoid x87_fcom_sti(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tx87_check_exceptions();\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(4);\n}\n\nvoid x87_fcomp_m32real(UINT8 modrm)\n{\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tUINT32 m32real = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = float32_to_floatx80(m32real);\n\n\t\tif (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_inc_stack();\n\n\tCYCLES(4);\n}\n\nvoid x87_fcomp_m64real(UINT8 modrm)\n{\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tUINT64 m64real = READ64(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = float64_to_floatx80(m64real);\n\n\t\tif (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_inc_stack();\n\n\tCYCLES(4);\n}\n\nvoid x87_fcomp_sti(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_inc_stack();\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(4);\n}\n\nvoid x87_fcomi_sti(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_ZF = 1;\n\t\tm_PF = 1;\n\t\tm_CF = 1;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_ZF = 1;\n\t\t\tm_PF = 1;\n\t\t\tm_CF = 1;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_ZF = 0;\n\t\t\tm_PF = 0;\n\t\t\tm_CF = 0;\n\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_ZF = 1;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_CF = 1;\n\t\t}\n\t}\n\n\tx87_check_exceptions();\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(4); // TODO: correct cycle count\n}\n\nvoid x87_fcomip_sti(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_ZF = 1;\n\t\tm_PF = 1;\n\t\tm_CF = 1;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_ZF = 1;\n\t\t\tm_PF = 1;\n\t\t\tm_CF = 1;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_ZF = 0;\n\t\t\tm_PF = 0;\n\t\t\tm_CF = 0;\n\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_ZF = 1;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_CF = 1;\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_inc_stack();\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(4); // TODO: correct cycle count\n}\n\nvoid x87_fucomi_sti(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_ZF = 1;\n\t\tm_PF = 1;\n\t\tm_CF = 1;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_quiet_nan(a) || floatx80_is_quiet_nan(b))\n\t\t{\n\t\t\tm_ZF = 1;\n\t\t\tm_PF = 1;\n\t\t\tm_CF = 1;\n\t\t}\n\t\telse if (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_ZF = 1;\n\t\t\tm_PF = 1;\n\t\t\tm_CF = 1;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_ZF = 0;\n\t\t\tm_PF = 0;\n\t\t\tm_CF = 0;\n\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_ZF = 1;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_CF = 1;\n\t\t}\n\t}\n\n\tx87_check_exceptions();\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(4); // TODO: correct cycle count\n}\n\nvoid x87_fucomip_sti(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_ZF = 1;\n\t\tm_PF = 1;\n\t\tm_CF = 1;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_quiet_nan(a) || floatx80_is_quiet_nan(b))\n\t\t{\n\t\t\tm_ZF = 1;\n\t\t\tm_PF = 1;\n\t\t\tm_CF = 1;\n\t\t}\n\t\telse if (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_ZF = 1;\n\t\t\tm_PF = 1;\n\t\t\tm_CF = 1;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_ZF = 0;\n\t\t\tm_PF = 0;\n\t\t\tm_CF = 0;\n\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_ZF = 1;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_CF = 1;\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_inc_stack();\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(4); // TODO: correct cycle count\n}\n\nvoid x87_fcompp(UINT8 modrm)\n{\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(1);\n\n\t\tif (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_inc_stack();\n\t\tx87_inc_stack();\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(5);\n}\n\n\n/*************************************\n *\n * Unordererd comparison\n *\n *************************************/\n\nvoid x87_fucom_sti(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\n\t\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tx87_check_exceptions();\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(4);\n}\n\nvoid x87_fucomp_sti(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\n\t\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_inc_stack();\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(4);\n}\n\nvoid x87_fucompp(UINT8 modrm)\n{\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(1);\n\n\t\tif (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\n\t\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_inc_stack();\n\t\tx87_inc_stack();\n\t}\n\tm_x87_opcode = ((m_opcode << 8) | modrm) & 0x7ff;\n\tm_x87_data_ptr = 0;\n\tm_x87_ds = 0;\n\n\tCYCLES(4);\n}\n\n\n/*************************************\n *\n * Control\n *\n *************************************/\n\nvoid x87_fdecstp(UINT8 modrm)\n{\n\tif (x87_mf_fault())\n\t\treturn;\n\tm_x87_sw &= ~X87_SW_C1;\n\n\tx87_set_stack_top(ST_TO_PHYS(7));\n\n\tCYCLES(3);\n}\n\nvoid x87_fincstp(UINT8 modrm)\n{\n\tif (x87_mf_fault())\n\t\treturn;\n\tm_x87_sw &= ~X87_SW_C1;\n\n\tx87_set_stack_top(ST_TO_PHYS(1));\n\n\tCYCLES(3);\n}\n\nvoid x87_fclex(UINT8 modrm)\n{\n\tm_x87_sw &= ~0x80ff;\n\n\tCYCLES(7);\n}\n\nvoid x87_ffree(UINT8 modrm)\n{\n\tif (x87_mf_fault())\n\t\treturn;\n\tx87_set_tag(ST_TO_PHYS(modrm & 7), X87_TW_EMPTY);\n\n\tCYCLES(3);\n}\n\nvoid x87_finit(UINT8 modrm)\n{\n\tx87_reset();\n\n\tCYCLES(17);\n}\n\nvoid x87_fldcw(UINT8 modrm)\n{\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tUINT16 cw = READ16(ea);\n\n\tx87_write_cw(cw);\n\n\tx87_check_exceptions();\n\n\tCYCLES(4);\n}\n\nextern \"C\"\n{\n    typedef void(*fldcw_t)(WORD);\n    typedef void(*wait_t)();\n    typedef void(*fninit_t)();\n    typedef void(*fstcw_t)(WORD*);\n    typedef void(*fstsw_t)(WORD*);\n    typedef void(*frndint_t)();\n    typedef void(*fclex_t)();\n    typedef void(*fsave_t)(char*);\n    typedef void(*frstor_t)(const char*);\n    typedef void(*fstenv32_t)(char *);\n    typedef DWORD(*fistp_t)(WORD);\n    typedef struct\n    {\n        fldcw_t fldcw;\n        wait_t wait;\n        fninit_t fninit;\n        fstcw_t fstcw;\n        fstsw_t fstsw;\n        frndint_t frndint;\n        fclex_t fclex;\n        fsave_t fsave;\n        frstor_t frstor;\n        fstenv32_t fstenv32;\n        fistp_t fistp;\n    } x87function;\n    void fldcw(WORD cw)\n\t{\n\t\tx87_write_cw(cw);\n\n\t\tx87_check_exceptions();\n\t}\n\tvoid wait()\n\t{\n\t\t/*\n\t\tstatic void I386OP(wait)()              // Opcode 0x9B\n\t\t{\n\t\t// TODO\n\t\t}\n\t\t*/\n\t}\n\tvoid fninit()\n\t{\n\t\tx87_reset();\n\t}\n\tvoid fstcw(WORD *ea)\n\t{\n\t\t*ea = m_x87_cw;\n\t\t//WRITE16(ea, m_x87_cw);\n\t}\n\tvoid fstsw(WORD *ea)\n\t{\n\t\t*ea = m_x87_sw;\n\t}\n\tvoid frndint()\n\t{\n\t\tfloatx80 value;\n\n\t\tif (X87_IS_ST_EMPTY(0))\n\t\t{\n\t\t\tx87_set_stack_underflow();\n\t\t\tvalue = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\t\tvalue = floatx80_round_to_int(ST(0));\n\t\t}\n\n\t\tif (x87_check_exceptions())\n\t\t\tx87_write_stack(0, value, TRUE);\n\t}\n\tvoid fclex()\n\t{\n\t\tm_x87_sw &= ~0x80ff;\n\t}\n    void fsave(char *ptr)\n    {\n        UINT32 ea = (UINT32)ptr;\n    \tswitch(((PROTECTED_MODE && !V8086_MODE) ? 1 : 0) | (m_operand_size & 1)<<1)\n\t    {\n\t\t    case 0: // 16-bit real mode\n\t\t\t    WRITE16(ea + 0, m_x87_cw);\n                WRITE16(ea + 2, m_x87_sw);\n                WRITE16(ea + 4, m_x87_tw);\n                WRITE16(ea + 6, m_x87_inst_ptr & 0xffff);\n                WRITE16(ea + 8, (m_x87_opcode & 0x07ff) | ((m_x87_inst_ptr & 0x0f0000) >> 4));\n                WRITE16(ea + 10, m_x87_data_ptr & 0xffff);\n                WRITE16(ea + 12, (m_x87_data_ptr & 0x0f0000) >> 4);\n                ea += 14;\n                break;\n\t\t    case 1: // 16-bit protected mode\n\t\t\t    WRITE16(ea + 0, m_x87_cw);\n                WRITE16(ea + 2, m_x87_sw);\n                WRITE16(ea + 4, m_x87_tw);\n                WRITE16(ea + 6, m_x87_inst_ptr & 0xffff);\n                WRITE16(ea + 8, m_x87_cs);\n                WRITE16(ea + 10, m_x87_data_ptr & 0xffff);\n                WRITE16(ea + 12, m_x87_ds);\n                ea += 14;\n                break;\n            case 2: // 32-bit real mode\n\t\t\t    WRITE32(ea + 0, 0xffff0000 | m_x87_cw);\n                WRITE32(ea + 4, 0xffff0000 | m_x87_sw);\n                WRITE32(ea + 8, 0xffff0000 | m_x87_tw);\n                WRITE32(ea + 12, 0xffff0000 | (m_x87_inst_ptr & 0xffff));\n                WRITE32(ea + 16, (m_x87_opcode & 0x07ff) | ((m_x87_inst_ptr & 0xffff0000) >> 4));\n                WRITE32(ea + 20, 0xffff0000 | (m_x87_data_ptr & 0xffff));\n                WRITE32(ea + 24, (m_x87_data_ptr & 0xffff0000) >> 4);\n                ea += 28;\n                break;\n            case 3: // 32-bit protected mode\n                WRITE32(ea + 0,  0xffff0000 | m_x87_cw);\n                WRITE32(ea + 4,  0xffff0000 | m_x87_sw);\n                WRITE32(ea + 8,  0xffff0000 | m_x87_tw);\n                WRITE32(ea + 12, m_x87_inst_ptr);\n                WRITE32(ea + 16, (m_x87_opcode << 16) | m_x87_cs);\n                WRITE32(ea + 20, m_x87_data_ptr);\n                WRITE32(ea + 24, 0xffff0000 | m_x87_ds);\n                ea += 28;\n                break;\n        }\n\n        for (int i = 0; i < 8; ++i)\n            WRITE80(ea + i*10, ST(i));\n    }\n    void fstenv32(char *ptr)\n    {\n        UINT32 ea = (UINT32)ptr;\n        WRITE32(ea + 0,  0xffff0000 | m_x87_cw);\n        WRITE32(ea + 4,  0xffff0000 | m_x87_sw);\n        WRITE32(ea + 8,  0xffff0000 | m_x87_tw);\n        WRITE32(ea + 12, m_x87_inst_ptr);\n        WRITE32(ea + 16, (m_x87_opcode << 16) | m_x87_cs);\n        WRITE32(ea + 20, m_x87_data_ptr);\n        WRITE32(ea + 24, 0xffff0000 | m_x87_ds);\n    }\n    void frstor(const char *ptr)\n    {\n        UINT32 ea = (UINT32)ptr;\n        x87_write_cw(READ16(ea));\n        m_x87_sw = READ16(ea + 2);\n        m_x87_tw = READ16(ea + 4);\n        for (int i = 0; i < 8; ++i)\n            x87_write_stack(i, READ80(ea + i * 10), FALSE);\n    }\n\tDWORD fistp(WORD round)\n\t{\n\t\tDWORD m32int = 0x80000000;\n\t\tif (!X87_IS_ST_EMPTY(0))\n\t\t{\n\t\t\tint8 oldround = float_rounding_mode;\n\t\t\tfloat_rounding_mode = x87_to_sf_rc[round & 3];\n\t\t\tfloatx80 fx80 = floatx80_round_to_int(ST(0));\n\n\t\t\tfloatx80 lowerLim = int32_to_floatx80(0x80000000);\n\t\t\tfloatx80 upperLim = int32_to_floatx80(0x7fffffff);\n\n\t\t\tif (!floatx80_lt(fx80, lowerLim) && floatx80_le(fx80, upperLim))\n\t\t\t\tm32int = floatx80_to_int32(fx80);\n\t\t\tx87_inc_stack();\n\t\t\tfloat_rounding_mode = oldround;\n\t\t}\n\t\treturn m32int;\n\t}\n    __declspec(dllexport) void load_x87function(x87function *func)\n    {\n        func->fclex = fclex;\n        func->fldcw = fldcw;\n        func->fninit = fninit;\n        func->frndint = frndint;\n        func->frstor = frstor;\n        func->fsave = fsave;\n        func->fstcw = fstcw;\n        func->fstsw = fstsw;\n        func->wait = wait;\n\t\tfunc->fistp = fistp;\n        func->fstenv32 = fstenv32;\n    }\n}\n\nvoid x87_fstcw(UINT8 modrm)\n{\n\tUINT32 ea = GetEA(modrm, 1);\n\tWRITE16(ea, m_x87_cw);\n\n\tCYCLES(3);\n}\n\nvoid x87_fldenv(UINT8 modrm)\n{\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = Getx87EA(modrm, 0);\n\tUINT32 temp;\n\n\tswitch(((PROTECTED_MODE && !V8086_MODE) ? 1 : 0) | (m_operand_size & 1)<<1)\n\t{\n\t\tcase 0: // 16-bit real mode\n\t\t\tx87_write_cw(READ16(ea));\n\t\t\tm_x87_sw = READ16(ea + 2);\n\t\t\tm_x87_tw = READ16(ea + 4);\n\t\t\tm_x87_inst_ptr = READ16(ea + 6);\n\t\t\ttemp = READ16(ea + 8);\n\t\t\tm_x87_opcode = temp & 0x7ff;\n\t\t\tm_x87_inst_ptr |= ((temp & 0xf000) << 4);\n\t\t\tm_x87_data_ptr = READ16(ea + 10) | ((READ16(ea + 12) & 0xf000) << 4);\n\t\t\tm_x87_cs = 0;\n\t\t\tm_x87_ds = 0;\n\t\t\tea += 14;\n\t\t\tbreak;\n\t\tcase 1: // 16-bit protected mode\n\t\t\tx87_write_cw(READ16(ea));\n\t\t\tm_x87_sw = READ16(ea + 2);\n\t\t\tm_x87_tw = READ16(ea + 4);\n\t\t\tm_x87_inst_ptr = READ16(ea + 6);\n\t\t\tm_x87_opcode = 0;\n\t\t\tm_x87_cs = READ16(ea + 8);\n\t\t\tm_x87_data_ptr = READ16(ea + 10);\n\t\t\tm_x87_ds = READ16(ea + 12);\n\t\t\tea += 14;\n\t\t\tbreak;\n\t\tcase 2: // 32-bit real mode\n\t\t\tx87_write_cw(READ16(ea));\n\t\t\tm_x87_sw = READ16(ea + 4);\n\t\t\tm_x87_tw = READ16(ea + 8);\n\t\t\tm_x87_inst_ptr = READ16(ea + 12);\n\t\t\ttemp = READ32(ea + 16);\n\t\t\tm_x87_opcode = temp & 0x7ff;\n\t\t\tm_x87_inst_ptr |= ((temp & 0xffff000) << 4);\n\t\t\tm_x87_data_ptr = READ16(ea + 20) | ((READ32(ea + 24) & 0xffff000) << 4);\n\t\t\tm_x87_cs = 0;\n\t\t\tm_x87_ds = 0;\n\t\t\tea += 28;\n\t\t\tbreak;\n\t\tcase 3: // 32-bit protected mode\n\t\t\tx87_write_cw(READ16(ea));\n\t\t\tm_x87_sw = READ16(ea + 4);\n\t\t\tm_x87_tw = READ16(ea + 8);\n\t\t\tm_x87_inst_ptr = READ32(ea + 12);\n\t\t\ttemp = READ32(ea + 16);\n\t\t\tm_x87_opcode = (temp >> 16) & 0x7ff;\n\t\t\tm_x87_cs = temp & 0xffff;\n\t\t\tm_x87_data_ptr = READ32(ea + 20);\n\t\t\tm_x87_ds = READ16(ea + 24);\n\t\t\tea += 28;\n\t\t\tbreak;\n\t}\n\n\tx87_check_exceptions();\n\n\tCYCLES((m_cr[0] & 1) ? 34 : 44);\n}\n\nvoid x87_fstenv(UINT8 modrm)\n{\n\tUINT32 ea = GetEA(modrm, 1);\n\n\tswitch(((PROTECTED_MODE && !V8086_MODE) ? 1 : 0) | (m_operand_size & 1)<<1)\n\t{\n\t\tcase 0: // 16-bit real mode\n\t\t\tWRITE16(ea + 0, m_x87_cw);\n\t\t\tWRITE16(ea + 2, m_x87_sw);\n\t\t\tWRITE16(ea + 4, m_x87_tw);\n\t\t\tWRITE16(ea + 6, m_x87_inst_ptr & 0xffff);\n\t\t\tWRITE16(ea + 8, (m_x87_opcode & 0x07ff) | ((m_x87_inst_ptr & 0x0f0000) >> 4));\n\t\t\tWRITE16(ea + 10, m_x87_data_ptr & 0xffff);\n\t\t\tWRITE16(ea + 12, (m_x87_data_ptr & 0x0f0000) >> 4);\n\t\t\tbreak;\n\t\tcase 1: // 16-bit protected mode\n\t\t\tWRITE16(ea + 0, m_x87_cw);\n\t\t\tWRITE16(ea + 2, m_x87_sw);\n\t\t\tWRITE16(ea + 4, m_x87_tw);\n\t\t\tWRITE16(ea + 6, m_x87_inst_ptr & 0xffff);\n\t\t\tWRITE16(ea + 8, m_x87_cs);\n\t\t\tWRITE16(ea + 10, m_x87_data_ptr & 0xffff);\n\t\t\tWRITE16(ea + 12, m_x87_ds);\n\t\t\tbreak;\n\t\tcase 2: // 32-bit real mode\n\t\t\tWRITE32(ea + 0, 0xffff0000 | m_x87_cw);\n\t\t\tWRITE32(ea + 4, 0xffff0000 | m_x87_sw);\n\t\t\tWRITE32(ea + 8, 0xffff0000 | m_x87_tw);\n\t\t\tWRITE32(ea + 12, 0xffff0000 | (m_x87_inst_ptr & 0xffff));\n\t\t\tWRITE32(ea + 16, (m_x87_opcode & 0x07ff) | ((m_x87_inst_ptr & 0xffff0000) >> 4));\n\t\t\tWRITE32(ea + 20, 0xffff0000 | (m_x87_data_ptr & 0xffff));\n\t\t\tWRITE32(ea + 24, (m_x87_data_ptr & 0xffff0000) >> 4);\n\t\t\tbreak;\n\t\tcase 3: // 32-bit protected mode\n\t\t\tWRITE32(ea + 0,  0xffff0000 | m_x87_cw);\n\t\t\tWRITE32(ea + 4,  0xffff0000 | m_x87_sw);\n\t\t\tWRITE32(ea + 8,  0xffff0000 | m_x87_tw);\n\t\t\tWRITE32(ea + 12, m_x87_inst_ptr);\n\t\t\tWRITE32(ea + 16, (m_x87_opcode << 16) | m_x87_cs);\n\t\t\tWRITE32(ea + 20, m_x87_data_ptr);\n\t\t\tWRITE32(ea + 24, 0xffff0000 | m_x87_ds);\n\t\t\tbreak;\n\t}\n \tm_x87_cw |= 0x3f;   // set all masks\n\n\tCYCLES((m_cr[0] & 1) ? 56 : 67);\n}\n\nvoid x87_fsave(UINT8 modrm)\n{\n\tUINT32 ea = GetEA(modrm, 1);\n\n\tswitch(((PROTECTED_MODE && !V8086_MODE) ? 1 : 0) | (m_operand_size & 1)<<1)\n\t{\n\t\tcase 0: // 16-bit real mode\n\t\t\tWRITE16(ea + 0, m_x87_cw);\n\t\t\tWRITE16(ea + 2, m_x87_sw);\n\t\t\tWRITE16(ea + 4, m_x87_tw);\n\t\t\tWRITE16(ea + 6, m_x87_inst_ptr & 0xffff);\n\t\t\tWRITE16(ea + 8, (m_x87_opcode & 0x07ff) | ((m_x87_inst_ptr & 0x0f0000) >> 4));\n\t\t\tWRITE16(ea + 10, m_x87_data_ptr & 0xffff);\n\t\t\tWRITE16(ea + 12, (m_x87_data_ptr & 0x0f0000) >> 4);\n\t\t\tea += 14;\n\t\t\tbreak;\n\t\tcase 1: // 16-bit protected mode\n\t\t\tWRITE16(ea + 0, m_x87_cw);\n\t\t\tWRITE16(ea + 2, m_x87_sw);\n\t\t\tWRITE16(ea + 4, m_x87_tw);\n\t\t\tWRITE16(ea + 6, m_x87_inst_ptr & 0xffff);\n\t\t\tWRITE16(ea + 8, m_x87_cs);\n\t\t\tWRITE16(ea + 10, m_x87_data_ptr & 0xffff);\n\t\t\tWRITE16(ea + 12, m_x87_ds);\n\t\t\tea += 14;\n\t\t\tbreak;\n\t\tcase 2: // 32-bit real mode\n\t\t\tWRITE32(ea + 0, 0xffff0000 | m_x87_cw);\n\t\t\tWRITE32(ea + 4, 0xffff0000 | m_x87_sw);\n\t\t\tWRITE32(ea + 8, 0xffff0000 | m_x87_tw);\n\t\t\tWRITE32(ea + 12, 0xffff0000 | (m_x87_inst_ptr & 0xffff));\n\t\t\tWRITE32(ea + 16, (m_x87_opcode & 0x07ff) | ((m_x87_inst_ptr & 0xffff0000) >> 4));\n\t\t\tWRITE32(ea + 20, 0xffff0000 | (m_x87_data_ptr & 0xffff));\n\t\t\tWRITE32(ea + 24, (m_x87_data_ptr & 0xffff0000) >> 4);\n\t\t\tea += 28;\n\t\t\tbreak;\n\t\tcase 3: // 32-bit protected mode\n\t\t\tWRITE32(ea + 0,  0xffff0000 | m_x87_cw);\n\t\t\tWRITE32(ea + 4,  0xffff0000 | m_x87_sw);\n\t\t\tWRITE32(ea + 8,  0xffff0000 | m_x87_tw);\n\t\t\tWRITE32(ea + 12, m_x87_inst_ptr);\n\t\t\tWRITE32(ea + 16, (m_x87_opcode << 16) | m_x87_cs);\n\t\t\tWRITE32(ea + 20, m_x87_data_ptr);\n\t\t\tWRITE32(ea + 24, 0xffff0000 | m_x87_ds);\n\t\t\tea += 28;\n\t\t\tbreak;\n\t}\n\n\tfor (int i = 0; i < 8; ++i)\n\t\tWRITE80(ea + i*10, ST(i));\n\tx87_reset();\n\n\tCYCLES((m_cr[0] & 1) ? 56 : 67);\n}\n\nvoid x87_frstor(UINT8 modrm)\n{\n\tif (x87_mf_fault())\n\t\treturn;\n\tUINT32 ea = GetEA(modrm, 0);\n\tUINT32 temp;\n\n\tswitch(((PROTECTED_MODE && !V8086_MODE) ? 1 : 0) | (m_operand_size & 1)<<1)\n\t{\n\t\tcase 0: // 16-bit real mode\n\t\t\tx87_write_cw(READ16(ea));\n\t\t\tm_x87_sw = READ16(ea + 2);\n\t\t\tm_x87_tw = READ16(ea + 4);\n\t\t\tm_x87_inst_ptr = READ16(ea + 6);\n\t\t\ttemp = READ16(ea + 8);\n\t\t\tm_x87_opcode = temp & 0x7ff;\n\t\t\tm_x87_inst_ptr |= ((temp & 0xf000) << 4);\n\t\t\tm_x87_data_ptr = READ16(ea + 10) | ((READ16(ea + 12) & 0xf000) << 4);\n\t\t\tm_x87_cs = 0;\n\t\t\tm_x87_ds = 0;\n\t\t\tea += 14;\n\t\t\tbreak;\n\t\tcase 1: // 16-bit protected mode\n\t\t\tx87_write_cw(READ16(ea));\n\t\t\tm_x87_sw = READ16(ea + 2);\n\t\t\tm_x87_tw = READ16(ea + 4);\n\t\t\tm_x87_inst_ptr = READ16(ea + 6);\n\t\t\tm_x87_opcode = 0;\n\t\t\tm_x87_cs = READ16(ea + 8);\n\t\t\tm_x87_data_ptr = READ16(ea + 10);\n\t\t\tm_x87_ds = READ16(ea + 12);\n\t\t\tea += 14;\n\t\t\tbreak;\n\t\tcase 2: // 32-bit real mode\n\t\t\tx87_write_cw(READ16(ea));\n\t\t\tm_x87_sw = READ16(ea + 4);\n\t\t\tm_x87_tw = READ16(ea + 8);\n\t\t\tm_x87_inst_ptr = READ16(ea + 12);\n\t\t\ttemp = READ32(ea + 16);\n\t\t\tm_x87_opcode = temp & 0x7ff;\n\t\t\tm_x87_inst_ptr |= ((temp & 0xffff000) << 4);\n\t\t\tm_x87_data_ptr = READ16(ea + 20) | ((READ32(ea + 24) & 0xffff000) << 4);\n\t\t\tm_x87_cs = 0;\n\t\t\tm_x87_ds = 0;\n\t\t\tea += 28;\n\t\t\tbreak;\n\t\tcase 3: // 32-bit protected mode\n\t\t\tx87_write_cw(READ16(ea));\n\t\t\tm_x87_sw = READ16(ea + 4);\n\t\t\tm_x87_tw = READ16(ea + 8);\n\t\t\tm_x87_inst_ptr = READ32(ea + 12);\n\t\t\ttemp = READ32(ea + 16);\n\t\t\tm_x87_opcode = (temp >> 16) & 0x7ff;\n\t\t\tm_x87_cs = temp & 0xffff;\n\t\t\tm_x87_data_ptr = READ32(ea + 20);\n\t\t\tm_x87_ds = READ16(ea + 24);\n\t\t\tea += 28;\n\t\t\tbreak;\n\t}\n\n\tfor (int i = 0; i < 8; ++i)\n\t\tx87_write_stack(i, READ80(ea + i*10), FALSE);\n\n\tCYCLES((m_cr[0] & 1) ? 34 : 44);\n}\n\nvoid x87_fxch(UINT8 modrm)\n{\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1))\n\t\tx87_set_stack_underflow();\n\n\tif (x87_check_exceptions())\n\t{\n\t\tfloatx80 tmp = ST(0);\n\t\tST(0) = ST(1);\n\t\tST(1) = tmp;\n\n\t\t// Swap the tags\n\t\tint tag0 = X87_TAG(ST_TO_PHYS(0));\n\t\tx87_set_tag(ST_TO_PHYS(0), X87_TAG(ST_TO_PHYS(1)));\n\t\tx87_set_tag(ST_TO_PHYS(1), tag0);\n\t}\n\n\tCYCLES(4);\n}\n\nvoid x87_fxch_sti(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\n\tif (x87_mf_fault())\n\t\treturn;\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tST(0) = fx80_inan;\n\t\tx87_set_tag(ST_TO_PHYS(0), X87_TW_SPECIAL);\n\t\tx87_set_stack_underflow();\n\t}\n\tif (X87_IS_ST_EMPTY(i))\n\t{\n\t\tST(i) = fx80_inan;\n\t\tx87_set_tag(ST_TO_PHYS(i), X87_TW_SPECIAL);\n\t\tx87_set_stack_underflow();\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tfloatx80 tmp = ST(0);\n\t\tST(0) = ST(i);\n\t\tST(i) = tmp;\n\n\t\t// Swap the tags\n\t\tint tag0 = X87_TAG(ST_TO_PHYS(0));\n\t\tx87_set_tag(ST_TO_PHYS(0), X87_TAG(ST_TO_PHYS(i)));\n\t\tx87_set_tag(ST_TO_PHYS(i), tag0);\n\t}\n\n\tCYCLES(4);\n}\n\nvoid x87_fstsw_ax(UINT8 modrm)\n{\n\tREG16(AX) = m_x87_sw;\n\n\tCYCLES(3);\n}\n\nvoid x87_fstsw_m2byte(UINT8 modrm)\n{\n\tUINT32 ea = GetEA(modrm, 1);\n\n\tWRITE16(ea, m_x87_sw);\n\n\tCYCLES(3);\n}\n\nvoid x87_invalid(UINT8 modrm)\n{\n\t// TODO\n\treport_invalid_opcode();\n\ti386_trap(6, 0, 0);\n}\n\n\n\n/*************************************\n *\n * Instruction dispatch\n *\n *************************************/\n\nstatic void I386OP(x87_group_d8)()\n{\n\tUINT8 modrm = FETCH();\n\tm_opcode_table_x87_d8[modrm](modrm);\n}\n\nstatic void I386OP(x87_group_d9)()\n{\n\tUINT8 modrm = FETCH();\n\tm_opcode_table_x87_d9[modrm](modrm);\n}\n\nstatic void I386OP(x87_group_da)()\n{\n\tUINT8 modrm = FETCH();\n\tm_opcode_table_x87_da[modrm](modrm);\n}\n\nstatic void I386OP(x87_group_db)()\n{\n\tUINT8 modrm = FETCH();\n\tm_opcode_table_x87_db[modrm](modrm);\n}\n\nstatic void I386OP(x87_group_dc)()\n{\n\tUINT8 modrm = FETCH();\n\tm_opcode_table_x87_dc[modrm](modrm);\n}\n\nstatic void I386OP(x87_group_dd)()\n{\n\tUINT8 modrm = FETCH();\n\tm_opcode_table_x87_dd[modrm](modrm);\n}\n\nstatic void I386OP(x87_group_de)()\n{\n\tUINT8 modrm = FETCH();\n\tm_opcode_table_x87_de[modrm](modrm);\n}\n\nstatic void I386OP(x87_group_df)()\n{\n\tUINT8 modrm = FETCH();\n\tm_opcode_table_x87_df[modrm](modrm);\n}\n\n\n/*************************************\n *\n * Opcode table building\n *\n *************************************/\n\nvoid build_x87_opcode_table_d8()\n{\n\tint modrm = 0;\n\n\tfor (modrm = 0; modrm < 0x100; ++modrm)\n\t{\n\t\tvoid (*ptr)(UINT8 modrm) = x87_invalid;\n\n\t\tif (modrm < 0xc0)\n\t\t{\n\t\t\tswitch ((modrm >> 3) & 0x7)\n\t\t\t{\n\t\t\t\tcase 0x00: ptr = x87_fadd_m32real;  break;\n\t\t\t\tcase 0x01: ptr = x87_fmul_m32real;  break;\n\t\t\t\tcase 0x02: ptr = x87_fcom_m32real;  break;\n\t\t\t\tcase 0x03: ptr = x87_fcomp_m32real; break;\n\t\t\t\tcase 0x04: ptr = x87_fsub_m32real;  break;\n\t\t\t\tcase 0x05: ptr = x87_fsubr_m32real; break;\n\t\t\t\tcase 0x06: ptr = x87_fdiv_m32real;  break;\n\t\t\t\tcase 0x07: ptr = x87_fdivr_m32real; break;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tswitch (modrm)\n\t\t\t{\n\t\t\t\tcase 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: ptr = x87_fadd_st_sti;  break;\n\t\t\t\tcase 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: ptr = x87_fmul_st_sti;  break;\n\t\t\t\tcase 0xd0: case 0xd1: case 0xd2: case 0xd3: case 0xd4: case 0xd5: case 0xd6: case 0xd7: ptr = x87_fcom_sti;     break;\n\t\t\t\tcase 0xd8: case 0xd9: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf: ptr = x87_fcomp_sti;    break;\n\t\t\t\tcase 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7: ptr = x87_fsub_st_sti;  break;\n\t\t\t\tcase 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: ptr = x87_fsubr_st_sti; break;\n\t\t\t\tcase 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7: ptr = x87_fdiv_st_sti;  break;\n\t\t\t\tcase 0xf8: case 0xf9: case 0xfa: case 0xfb: case 0xfc: case 0xfd: case 0xfe: case 0xff: ptr = x87_fdivr_st_sti; break;\n\t\t\t}\n\t\t}\n\n\t\tm_opcode_table_x87_d8[modrm] = ptr;\n\t}\n}\n\n\nvoid build_x87_opcode_table_d9()\n{\n\tint modrm = 0;\n\n\tfor (modrm = 0; modrm < 0x100; ++modrm)\n\t{\n\t\tvoid (*ptr)(UINT8 modrm) = x87_invalid;\n\n\t\tif (modrm < 0xc0)\n\t\t{\n\t\t\tswitch ((modrm >> 3) & 0x7)\n\t\t\t{\n\t\t\t\tcase 0x00: ptr = x87_fld_m32real;   break;\n\t\t\t\tcase 0x02: ptr = x87_fst_m32real;   break;\n\t\t\t\tcase 0x03: ptr = x87_fstp_m32real;  break;\n\t\t\t\tcase 0x04: ptr = x87_fldenv;        break;\n\t\t\t\tcase 0x05: ptr = x87_fldcw;         break;\n\t\t\t\tcase 0x06: ptr = x87_fstenv;        break;\n\t\t\t\tcase 0x07: ptr = x87_fstcw;         break;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tswitch (modrm)\n\t\t\t{\n\t\t\t\tcase 0xc0:\n\t\t\t\tcase 0xc1:\n\t\t\t\tcase 0xc2:\n\t\t\t\tcase 0xc3:\n\t\t\t\tcase 0xc4:\n\t\t\t\tcase 0xc5:\n\t\t\t\tcase 0xc6:\n\t\t\t\tcase 0xc7: ptr = x87_fld_sti;   break;\n\n\t\t\t\tcase 0xc8:\n\t\t\t\tcase 0xc9:\n\t\t\t\tcase 0xca:\n\t\t\t\tcase 0xcb:\n\t\t\t\tcase 0xcc:\n\t\t\t\tcase 0xcd:\n\t\t\t\tcase 0xce:\n\t\t\t\tcase 0xcf: ptr = x87_fxch_sti;  break;\n\n\t\t\t\tcase 0xd0: ptr = x87_fnop;      break;\n\t\t\t\tcase 0xd8: case 0xd9: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf: ptr = x87_fstp_sti;     break;\n\t\t\t\tcase 0xe0: ptr = x87_fchs;      break;\n\t\t\t\tcase 0xe1: ptr = x87_fabs;      break;\n\t\t\t\tcase 0xe4: ptr = x87_ftst;      break;\n\t\t\t\tcase 0xe5: ptr = x87_fxam;      break;\n\t\t\t\tcase 0xe8: ptr = x87_fld1;      break;\n\t\t\t\tcase 0xe9: ptr = x87_fldl2t;    break;\n\t\t\t\tcase 0xea: ptr = x87_fldl2e;    break;\n\t\t\t\tcase 0xeb: ptr = x87_fldpi;     break;\n\t\t\t\tcase 0xec: ptr = x87_fldlg2;    break;\n\t\t\t\tcase 0xed: ptr = x87_fldln2;    break;\n\t\t\t\tcase 0xee: ptr = x87_fldz;      break;\n\t\t\t\tcase 0xf0: ptr = x87_f2xm1;     break;\n\t\t\t\tcase 0xf1: ptr = x87_fyl2x;     break;\n\t\t\t\tcase 0xf2: ptr = x87_fptan;     break;\n\t\t\t\tcase 0xf3: ptr = x87_fpatan;    break;\n\t\t\t\tcase 0xf4: ptr = x87_fxtract;   break;\n\t\t\t\tcase 0xf5: ptr = x87_fprem1;    break;\n\t\t\t\tcase 0xf6: ptr = x87_fdecstp;   break;\n\t\t\t\tcase 0xf7: ptr = x87_fincstp;   break;\n\t\t\t\tcase 0xf8: ptr = x87_fprem;     break;\n\t\t\t\tcase 0xf9: ptr = x87_fyl2xp1;   break;\n\t\t\t\tcase 0xfa: ptr = x87_fsqrt;     break;\n\t\t\t\tcase 0xfb: ptr = x87_fsincos;   break;\n\t\t\t\tcase 0xfc: ptr = x87_frndint;   break;\n\t\t\t\tcase 0xfd: ptr = x87_fscale;    break;\n\t\t\t\tcase 0xfe: ptr = x87_fsin;      break;\n\t\t\t\tcase 0xff: ptr = x87_fcos;      break;\n\t\t\t}\n\t\t}\n\n\t\tm_opcode_table_x87_d9[modrm] = ptr;\n\t}\n}\n\nvoid build_x87_opcode_table_da()\n{\n\tint modrm = 0;\n\n\tfor (modrm = 0; modrm < 0x100; ++modrm)\n\t{\n\t\tvoid (*ptr)(UINT8 modrm) = x87_invalid;\n\n\t\tif (modrm < 0xc0)\n\t\t{\n\t\t\tswitch ((modrm >> 3) & 0x7)\n\t\t\t{\n\t\t\t\tcase 0x00: ptr = x87_fiadd_m32int;  break;\n\t\t\t\tcase 0x01: ptr = x87_fimul_m32int;  break;\n\t\t\t\tcase 0x02: ptr = x87_ficom_m32int;  break;\n\t\t\t\tcase 0x03: ptr = x87_ficomp_m32int; break;\n\t\t\t\tcase 0x04: ptr = x87_fisub_m32int;  break;\n\t\t\t\tcase 0x05: ptr = x87_fisubr_m32int; break;\n\t\t\t\tcase 0x06: ptr = x87_fidiv_m32int;  break;\n\t\t\t\tcase 0x07: ptr = x87_fidivr_m32int; break;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tswitch (modrm)\n\t\t\t{\n\t\t\t\tcase 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: ptr = x87_fcmovb_sti;  break;\n\t\t\t\tcase 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: ptr = x87_fcmove_sti;  break;\n\t\t\t\tcase 0xd0: case 0xd1: case 0xd2: case 0xd3: case 0xd4: case 0xd5: case 0xd6: case 0xd7: ptr = x87_fcmovbe_sti; break;\n\t\t\t\tcase 0xd8: case 0xd9: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf: ptr = x87_fcmovu_sti;  break;\n\t\t\t\tcase 0xe9: ptr = x87_fucompp;       break;\n\t\t\t}\n\t\t}\n\n\t\tm_opcode_table_x87_da[modrm] = ptr;\n\t}\n}\n\n\nvoid build_x87_opcode_table_db()\n{\n\tint modrm = 0;\n\n\tfor (modrm = 0; modrm < 0x100; ++modrm)\n\t{\n\t\tvoid (*ptr)(UINT8 modrm) = x87_invalid;\n\n\t\tif (modrm < 0xc0)\n\t\t{\n\t\t\tswitch ((modrm >> 3) & 0x7)\n\t\t\t{\n\t\t\t\tcase 0x00: ptr = x87_fild_m32int;   break;\n\t\t\t\tcase 0x02: ptr = x87_fist_m32int;   break;\n\t\t\t\tcase 0x03: ptr = x87_fistp_m32int;  break;\n\t\t\t\tcase 0x05: ptr = x87_fld_m80real;   break;\n\t\t\t\tcase 0x07: ptr = x87_fstp_m80real;  break;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tswitch (modrm)\n\t\t\t{\n\t\t\t\tcase 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: ptr = x87_fcmovnb_sti;  break;\n\t\t\t\tcase 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: ptr = x87_fcmovne_sti;  break;\n\t\t\t\tcase 0xd0: case 0xd1: case 0xd2: case 0xd3: case 0xd4: case 0xd5: case 0xd6: case 0xd7: ptr = x87_fcmovnbe_sti; break;\n\t\t\t\tcase 0xd8: case 0xd9: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf: ptr = x87_fcmovnu_sti;  break;\n\t\t\t\tcase 0xe0: ptr = x87_fnop;          break; /* FENI */\n\t\t\t\tcase 0xe1: ptr = x87_fnop;          break; /* FDISI */\n\t\t\t\tcase 0xe2: ptr = x87_fclex;         break;\n\t\t\t\tcase 0xe3: ptr = x87_finit;         break;\n\t\t\t\tcase 0xe4: ptr = x87_fnop;          break; /* FSETPM */\n\t\t\t\tcase 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: ptr = x87_fucomi_sti;  break;\n\t\t\t\tcase 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7: ptr = x87_fcomi_sti; break;\n\t\t\t}\n\t\t}\n\n\t\tm_opcode_table_x87_db[modrm] = ptr;\n\t}\n}\n\n\nvoid build_x87_opcode_table_dc()\n{\n\tint modrm = 0;\n\n\tfor (modrm = 0; modrm < 0x100; ++modrm)\n\t{\n\t\tvoid (*ptr)(UINT8 modrm) = x87_invalid;\n\n\t\tif (modrm < 0xc0)\n\t\t{\n\t\t\tswitch ((modrm >> 3) & 0x7)\n\t\t\t{\n\t\t\t\tcase 0x00: ptr = x87_fadd_m64real;  break;\n\t\t\t\tcase 0x01: ptr = x87_fmul_m64real;  break;\n\t\t\t\tcase 0x02: ptr = x87_fcom_m64real;  break;\n\t\t\t\tcase 0x03: ptr = x87_fcomp_m64real; break;\n\t\t\t\tcase 0x04: ptr = x87_fsub_m64real;  break;\n\t\t\t\tcase 0x05: ptr = x87_fsubr_m64real; break;\n\t\t\t\tcase 0x06: ptr = x87_fdiv_m64real;  break;\n\t\t\t\tcase 0x07: ptr = x87_fdivr_m64real; break;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tswitch (modrm)\n\t\t\t{\n\t\t\t\tcase 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: ptr = x87_fadd_sti_st;  break;\n\t\t\t\tcase 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: ptr = x87_fmul_sti_st;  break;\n\t\t\t\tcase 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7: ptr = x87_fsubr_sti_st; break;\n\t\t\t\tcase 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: ptr = x87_fsub_sti_st;  break;\n\t\t\t\tcase 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7: ptr = x87_fdivr_sti_st; break;\n\t\t\t\tcase 0xf8: case 0xf9: case 0xfa: case 0xfb: case 0xfc: case 0xfd: case 0xfe: case 0xff: ptr = x87_fdiv_sti_st;  break;\n\t\t\t}\n\t\t}\n\n\t\tm_opcode_table_x87_dc[modrm] = ptr;\n\t}\n}\n\n\nvoid build_x87_opcode_table_dd()\n{\n\tint modrm = 0;\n\n\tfor (modrm = 0; modrm < 0x100; ++modrm)\n\t{\n\t\tvoid (*ptr)(UINT8 modrm) = x87_invalid;\n\n\t\tif (modrm < 0xc0)\n\t\t{\n\t\t\tswitch ((modrm >> 3) & 0x7)\n\t\t\t{\n\t\t\t\tcase 0x00: ptr = x87_fld_m64real;   break;\n\t\t\t\tcase 0x02: ptr = x87_fst_m64real;   break;\n\t\t\t\tcase 0x03: ptr = x87_fstp_m64real;  break;\n\t\t\t\tcase 0x04: ptr = x87_frstor;        break;\n\t\t\t\tcase 0x06: ptr = x87_fsave;         break;\n\t\t\t\tcase 0x07: ptr = x87_fstsw_m2byte;  break;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tswitch (modrm)\n\t\t\t{\n\t\t\t\tcase 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: ptr = x87_ffree;        break;\n\t\t\t\tcase 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: ptr = x87_fxch_sti;     break;\n\t\t\t\tcase 0xd0: case 0xd1: case 0xd2: case 0xd3: case 0xd4: case 0xd5: case 0xd6: case 0xd7: ptr = x87_fst_sti;      break;\n\t\t\t\tcase 0xd8: case 0xd9: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf: ptr = x87_fstp_sti;     break;\n\t\t\t\tcase 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7: ptr = x87_fucom_sti;    break;\n\t\t\t\tcase 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: ptr = x87_fucomp_sti;   break;\n\t\t\t}\n\t\t}\n\n\t\tm_opcode_table_x87_dd[modrm] = ptr;\n\t}\n}\n\n\nvoid build_x87_opcode_table_de()\n{\n\tint modrm = 0;\n\n\tfor (modrm = 0; modrm < 0x100; ++modrm)\n\t{\n\t\tvoid (*ptr)(UINT8 modrm) = x87_invalid;\n\n\t\tif (modrm < 0xc0)\n\t\t{\n\t\t\tswitch ((modrm >> 3) & 0x7)\n\t\t\t{\n\t\t\t\tcase 0x00: ptr = x87_fiadd_m16int;  break;\n\t\t\t\tcase 0x01: ptr = x87_fimul_m16int;  break;\n\t\t\t\tcase 0x02: ptr = x87_ficom_m16int;  break;\n\t\t\t\tcase 0x03: ptr = x87_ficomp_m16int; break;\n\t\t\t\tcase 0x04: ptr = x87_fisub_m16int;  break;\n\t\t\t\tcase 0x05: ptr = x87_fisubr_m16int; break;\n\t\t\t\tcase 0x06: ptr = x87_fidiv_m16int;  break;\n\t\t\t\tcase 0x07: ptr = x87_fidivr_m16int; break;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tswitch (modrm)\n\t\t\t{\n\t\t\t\tcase 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: ptr = x87_faddp;    break;\n\t\t\t\tcase 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: ptr = x87_fmulp;    break;\n\t\t\t\tcase 0xd9: ptr = x87_fcompp; break;\n\t\t\t\tcase 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7: ptr = x87_fsubrp;   break;\n\t\t\t\tcase 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: ptr = x87_fsubp;    break;\n\t\t\t\tcase 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7: ptr = x87_fdivrp;   break;\n\t\t\t\tcase 0xf8: case 0xf9: case 0xfa: case 0xfb: case 0xfc: case 0xfd: case 0xfe: case 0xff: ptr = x87_fdivp;    break;\n\t\t\t}\n\t\t}\n\n\t\tm_opcode_table_x87_de[modrm] = ptr;\n\t}\n}\n\n\nvoid build_x87_opcode_table_df()\n{\n\tint modrm = 0;\n\n\tfor (modrm = 0; modrm < 0x100; ++modrm)\n\t{\n\t\tvoid (*ptr)(UINT8 modrm) = x87_invalid;\n\n\t\tif (modrm < 0xc0)\n\t\t{\n\t\t\tswitch ((modrm >> 3) & 0x7)\n\t\t\t{\n\t\t\t\tcase 0x00: ptr = x87_fild_m16int;   break;\n\t\t\t\tcase 0x02: ptr = x87_fist_m16int;   break;\n\t\t\t\tcase 0x03: ptr = x87_fistp_m16int;  break;\n\t\t\t\tcase 0x04: ptr = x87_fbld;          break;\n\t\t\t\tcase 0x05: ptr = x87_fild_m64int;   break;\n\t\t\t\tcase 0x06: ptr = x87_fbstp;         break;\n\t\t\t\tcase 0x07: ptr = x87_fistp_m64int;  break;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tswitch (modrm)\n\t\t\t{\n\t\t\t\tcase 0xe0: ptr = x87_fstsw_ax;      break;\n\t\t\t\tcase 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: ptr = x87_fucomip_sti;    break;\n\t\t\t\tcase 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7: ptr = x87_fcomip_sti;    break;\n\t\t\t}\n\t\t}\n\n\t\tm_opcode_table_x87_df[modrm] = ptr;\n\t}\n}\n\nvoid build_x87_opcode_table()\n{\n\tbuild_x87_opcode_table_d8();\n\tbuild_x87_opcode_table_d9();\n\tbuild_x87_opcode_table_da();\n\tbuild_x87_opcode_table_db();\n\tbuild_x87_opcode_table_dc();\n\tbuild_x87_opcode_table_dd();\n\tbuild_x87_opcode_table_de();\n\tbuild_x87_opcode_table_df();\n}\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386.old/cycles.h",
    "content": "#pragma once\n\n#ifndef __CYCLES_H__\n#define __CYCLES_H__\n\nenum X86_CYCLES\n{\n\tCYCLES_MOV_REG_REG,\n\tCYCLES_MOV_REG_MEM,\n\tCYCLES_MOV_MEM_REG,\n\tCYCLES_MOV_IMM_REG,\n\tCYCLES_MOV_IMM_MEM,\n\tCYCLES_MOV_ACC_MEM,\n\tCYCLES_MOV_MEM_ACC,\n\tCYCLES_MOV_REG_SREG,\n\tCYCLES_MOV_MEM_SREG,\n\tCYCLES_MOV_SREG_REG,\n\tCYCLES_MOV_SREG_MEM,\n\tCYCLES_MOVSX_REG_REG,\n\tCYCLES_MOVSX_MEM_REG,\n\tCYCLES_MOVZX_REG_REG,\n\tCYCLES_MOVZX_MEM_REG,\n\tCYCLES_PUSH_RM,\n\tCYCLES_PUSH_REG_SHORT,\n\tCYCLES_PUSH_SREG,\n\tCYCLES_PUSH_IMM,\n\tCYCLES_PUSHA,\n\tCYCLES_POP_RM,\n\tCYCLES_POP_REG_SHORT,\n\tCYCLES_POP_SREG,\n\tCYCLES_POPA,\n\tCYCLES_XCHG_REG_REG,\n\tCYCLES_XCHG_REG_MEM,\n\tCYCLES_IN,\n\tCYCLES_IN_VAR,\n\tCYCLES_OUT,\n\tCYCLES_OUT_VAR,\n\tCYCLES_LEA,\n\tCYCLES_LDS,\n\tCYCLES_LES,\n\tCYCLES_LFS,\n\tCYCLES_LGS,\n\tCYCLES_LSS,\n\tCYCLES_CLC,\n\tCYCLES_CLD,\n\tCYCLES_CLI,\n\tCYCLES_CLTS,\n\tCYCLES_CMC,\n\tCYCLES_LAHF,\n\tCYCLES_POPF,\n\tCYCLES_PUSHF,\n\tCYCLES_SAHF,\n\tCYCLES_STC,\n\tCYCLES_STD,\n\tCYCLES_STI,\n\tCYCLES_ALU_REG_REG,\n\tCYCLES_ALU_REG_MEM,\n\tCYCLES_ALU_MEM_REG,\n\tCYCLES_ALU_IMM_REG,\n\tCYCLES_ALU_IMM_MEM,\n\tCYCLES_ALU_IMM_ACC,\n\tCYCLES_INC_REG,\n\tCYCLES_INC_MEM,\n\tCYCLES_DEC_REG,\n\tCYCLES_DEC_MEM,\n\tCYCLES_CMP_REG_REG,\n\tCYCLES_CMP_REG_MEM,\n\tCYCLES_CMP_MEM_REG,\n\tCYCLES_CMP_IMM_REG,\n\tCYCLES_CMP_IMM_MEM,\n\tCYCLES_CMP_IMM_ACC,\n\tCYCLES_TEST_REG_REG,\n\tCYCLES_TEST_REG_MEM,\n\tCYCLES_TEST_IMM_REG,\n\tCYCLES_TEST_IMM_MEM,\n\tCYCLES_TEST_IMM_ACC,\n\tCYCLES_NEG_REG,\n\tCYCLES_NEG_MEM,\n\tCYCLES_AAA,\n\tCYCLES_AAS,\n\tCYCLES_DAA,\n\tCYCLES_DAS,\n\tCYCLES_MUL8_ACC_REG,\n\tCYCLES_MUL8_ACC_MEM,\n\tCYCLES_MUL16_ACC_REG,\n\tCYCLES_MUL16_ACC_MEM,\n\tCYCLES_MUL32_ACC_REG,\n\tCYCLES_MUL32_ACC_MEM,\n\tCYCLES_IMUL8_ACC_REG,\n\tCYCLES_IMUL8_ACC_MEM,\n\tCYCLES_IMUL16_ACC_REG,\n\tCYCLES_IMUL16_ACC_MEM,\n\tCYCLES_IMUL32_ACC_REG,\n\tCYCLES_IMUL32_ACC_MEM,\n\tCYCLES_IMUL8_REG_REG,\n\tCYCLES_IMUL8_REG_MEM,\n\tCYCLES_IMUL16_REG_REG,\n\tCYCLES_IMUL16_REG_MEM,\n\tCYCLES_IMUL32_REG_REG,\n\tCYCLES_IMUL32_REG_MEM,\n\tCYCLES_IMUL16_REG_IMM_REG,\n\tCYCLES_IMUL16_MEM_IMM_REG,\n\tCYCLES_IMUL32_REG_IMM_REG,\n\tCYCLES_IMUL32_MEM_IMM_REG,\n\tCYCLES_DIV8_ACC_REG,\n\tCYCLES_DIV8_ACC_MEM,\n\tCYCLES_DIV16_ACC_REG,\n\tCYCLES_DIV16_ACC_MEM,\n\tCYCLES_DIV32_ACC_REG,\n\tCYCLES_DIV32_ACC_MEM,\n\tCYCLES_IDIV8_ACC_REG,\n\tCYCLES_IDIV8_ACC_MEM,\n\tCYCLES_IDIV16_ACC_REG,\n\tCYCLES_IDIV16_ACC_MEM,\n\tCYCLES_IDIV32_ACC_REG,\n\tCYCLES_IDIV32_ACC_MEM,\n\tCYCLES_AAD,\n\tCYCLES_AAM,\n\tCYCLES_CBW,\n\tCYCLES_CWD,\n\tCYCLES_ROTATE_REG,\n\tCYCLES_ROTATE_MEM,\n\tCYCLES_ROTATE_CARRY_REG,\n\tCYCLES_ROTATE_CARRY_MEM,\n\tCYCLES_SHLD_REG,\n\tCYCLES_SHLD_MEM,\n\tCYCLES_SHRD_REG,\n\tCYCLES_SHRD_MEM,\n\tCYCLES_NOT_REG,\n\tCYCLES_NOT_MEM,\n\tCYCLES_CMPS,\n\tCYCLES_INS,\n\tCYCLES_LODS,\n\tCYCLES_MOVS,\n\tCYCLES_OUTS,\n\tCYCLES_SCAS,\n\tCYCLES_STOS,\n\tCYCLES_XLAT,\n\tCYCLES_REP_CMPS_BASE,\n\tCYCLES_REP_INS_BASE,\n\tCYCLES_REP_LODS_BASE,\n\tCYCLES_REP_MOVS_BASE,\n\tCYCLES_REP_OUTS_BASE,\n\tCYCLES_REP_SCAS_BASE,\n\tCYCLES_REP_STOS_BASE,\n\tCYCLES_REP_CMPS,\n\tCYCLES_REP_INS,\n\tCYCLES_REP_LODS,\n\tCYCLES_REP_MOVS,\n\tCYCLES_REP_OUTS,\n\tCYCLES_REP_SCAS,\n\tCYCLES_REP_STOS,\n\tCYCLES_BSF_BASE,\n\tCYCLES_BSF,\n\tCYCLES_BSR_BASE,\n\tCYCLES_BSR,\n\tCYCLES_BT_IMM_REG,\n\tCYCLES_BT_IMM_MEM,\n\tCYCLES_BT_REG_REG,\n\tCYCLES_BT_REG_MEM,\n\tCYCLES_BTC_IMM_REG,\n\tCYCLES_BTC_IMM_MEM,\n\tCYCLES_BTC_REG_REG,\n\tCYCLES_BTC_REG_MEM,\n\tCYCLES_BTR_IMM_REG,\n\tCYCLES_BTR_IMM_MEM,\n\tCYCLES_BTR_REG_REG,\n\tCYCLES_BTR_REG_MEM,\n\tCYCLES_BTS_IMM_REG,\n\tCYCLES_BTS_IMM_MEM,\n\tCYCLES_BTS_REG_REG,\n\tCYCLES_BTS_REG_MEM,\n\tCYCLES_CALL,                // E8\n\tCYCLES_CALL_REG,            // FF /2\n\tCYCLES_CALL_MEM,            // FF /2\n\tCYCLES_CALL_INTERSEG,       // 9A\n\tCYCLES_CALL_REG_INTERSEG,   // FF /3\n\tCYCLES_CALL_MEM_INTERSEG,   // FF /3\n\tCYCLES_JMP_SHORT,           // EB\n\tCYCLES_JMP,                 // E9\n\tCYCLES_JMP_REG,             // FF /4\n\tCYCLES_JMP_MEM,             // FF /4\n\tCYCLES_JMP_INTERSEG,        // EA\n\tCYCLES_JMP_REG_INTERSEG,    // FF /5\n\tCYCLES_JMP_MEM_INTERSEG,    // FF /5\n\tCYCLES_RET,                 // C3\n\tCYCLES_RET_IMM,             // C2\n\tCYCLES_RET_INTERSEG,        // CB\n\tCYCLES_RET_IMM_INTERSEG,    // CA\n\tCYCLES_JCC_DISP8,\n\tCYCLES_JCC_FULL_DISP,\n\tCYCLES_JCC_DISP8_NOBRANCH,\n\tCYCLES_JCC_FULL_DISP_NOBRANCH,\n\tCYCLES_JCXZ,\n\tCYCLES_JCXZ_NOBRANCH,\n\tCYCLES_LOOP,\n\tCYCLES_LOOPZ,\n\tCYCLES_LOOPNZ,\n\tCYCLES_SETCC_REG,\n\tCYCLES_SETCC_MEM,\n\tCYCLES_ENTER,\n\tCYCLES_LEAVE,\n\tCYCLES_INT,\n\tCYCLES_INT3,\n\tCYCLES_INTO_OF1,\n\tCYCLES_INTO_OF0,\n\tCYCLES_BOUND_IN_RANGE,\n\tCYCLES_BOUND_OUT_RANGE,\n\tCYCLES_IRET,\n\tCYCLES_HLT,\n\tCYCLES_MOV_REG_CR0,\n\tCYCLES_MOV_REG_CR2,\n\tCYCLES_MOV_REG_CR3,\n\tCYCLES_MOV_CR_REG,\n\tCYCLES_MOV_REG_DR0_3,\n\tCYCLES_MOV_REG_DR6_7,\n\tCYCLES_MOV_DR6_7_REG,\n\tCYCLES_MOV_DR0_3_REG,\n\tCYCLES_MOV_REG_TR6_7,\n\tCYCLES_MOV_TR6_7_REG,\n\tCYCLES_NOP,\n\tCYCLES_WAIT,\n\tCYCLES_ARPL_REG,\n\tCYCLES_ARPL_MEM,\n\tCYCLES_LAR_REG,\n\tCYCLES_LAR_MEM,\n\tCYCLES_LGDT,\n\tCYCLES_LIDT,\n\tCYCLES_LLDT_REG,\n\tCYCLES_LLDT_MEM,\n\tCYCLES_LMSW_REG,\n\tCYCLES_LMSW_MEM,\n\tCYCLES_LSL_REG,\n\tCYCLES_LSL_MEM,\n\tCYCLES_LTR_REG,\n\tCYCLES_LTR_MEM,\n\tCYCLES_SGDT,\n\tCYCLES_SIDT,\n\tCYCLES_SLDT_REG,\n\tCYCLES_SLDT_MEM,\n\tCYCLES_SMSW_REG,\n\tCYCLES_SMSW_MEM,\n\tCYCLES_STR_REG,\n\tCYCLES_STR_MEM,\n\tCYCLES_VERR_REG,\n\tCYCLES_VERR_MEM,\n\tCYCLES_VERW_REG,\n\tCYCLES_VERW_MEM,\n\tCYCLES_LOCK,\n\n\tCYCLES_BSWAP,\n\tCYCLES_CMPXCHG8B,\n\tCYCLES_CMPXCHG,\n\tCYCLES_CPUID,\n\tCYCLES_CPUID_EAX1,\n\tCYCLES_INVD,\n\tCYCLES_XADD,\n\tCYCLES_RDTSC,\n\tCYCLES_RSM,\n\tCYCLES_RDMSR,\n\n\tCYCLES_FABS,\n\tCYCLES_FADD,\n\tCYCLES_FBLD,\n\tCYCLES_FBSTP,\n\tCYCLES_FCHS,\n\tCYCLES_FCLEX,\n\tCYCLES_FCOM,\n\tCYCLES_FCOS,\n\tCYCLES_FDECSTP,\n\tCYCLES_FDISI,\n\tCYCLES_FDIV,\n\tCYCLES_FDIVR,\n\tCYCLES_FENI,\n\tCYCLES_FFREE,\n\tCYCLES_FIADD,\n\tCYCLES_FICOM,\n\tCYCLES_FIDIV,\n\tCYCLES_FILD,\n\tCYCLES_FIMUL,\n\tCYCLES_FINCSTP,\n\tCYCLES_FINIT,\n\tCYCLES_FIST,\n\tCYCLES_FISUB,\n\tCYCLES_FLD,\n\tCYCLES_FLDZ,\n\tCYCLES_FLD1,\n\tCYCLES_FLDL2E,\n\tCYCLES_FLDL2T,\n\tCYCLES_FLDLG2,\n\tCYCLES_FLDLN2,\n\tCYCLES_FLDPI,\n\tCYCLES_FLDCW,\n\tCYCLES_FLDENV,\n\tCYCLES_FMUL,\n\tCYCLES_FNOP,\n\tCYCLES_FPATAN,\n\tCYCLES_FPREM,\n\tCYCLES_FPREM1,\n\tCYCLES_FPTAN,\n\tCYCLES_FRNDINT,\n\tCYCLES_FRSTOR,\n\tCYCLES_FSAVE,\n\tCYCLES_FSCALE,\n\tCYCLES_FSETPM,\n\tCYCLES_FSIN,\n\tCYCLES_FSINCOS,\n\tCYCLES_FSQRT,\n\tCYCLES_FST,\n\tCYCLES_FSTCW,\n\tCYCLES_FSTENV,\n\tCYCLES_FSTSW,\n\tCYCLES_FSUB,\n\tCYCLES_FSUBR,\n\tCYCLES_FTST,\n\tCYCLES_FUCOM,\n\tCYCLES_FXAM,\n\tCYCLES_FXCH,\n\tCYCLES_FXTRACT,\n\tCYCLES_FYL2X,\n\tCYCLES_FYL2XPI,\n\tCYCLES_CMPXCHG_REG_REG_T,\n\tCYCLES_CMPXCHG_REG_REG_F,\n\tCYCLES_CMPXCHG_REG_MEM_T,\n\tCYCLES_CMPXCHG_REG_MEM_F,\n\tCYCLES_XADD_REG_REG,\n\tCYCLES_XADD_REG_MEM,\n\n\tCYCLES_NUM_OPCODES\n};\n\n\n#define X86_NUM_CPUS        4\n#define CPU_CYCLES_I386         0\n#define CPU_CYCLES_I486         1\n#define CPU_CYCLES_PENTIUM      2\n#define CPU_CYCLES_MEDIAGX      3\n\n\nstruct X86_CYCLE_TABLE\n{\n\tX86_CYCLES op;\n\tUINT8 cpu_cycles[X86_NUM_CPUS][2];\n};\n\nstatic const X86_CYCLE_TABLE x86_cycle_table[] =\n{\n\t// opcode                     rm/pmode\n\t//                            i386         i486         pentium      mediagx\n\t{ CYCLES_MOV_REG_REG,       { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_MOV_REG_MEM,       { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_MOV_MEM_REG,       { {  4,  4 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_MOV_IMM_REG,       { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_MOV_IMM_MEM,       { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_MOV_ACC_MEM,       { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_MOV_MEM_ACC,       { {  4,  4 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_MOV_REG_SREG,      { {  2, 18 },  {  3,  3 },  {  2,  2 },  {  1,  6 } }       },\n\t{ CYCLES_MOV_MEM_SREG,      { {  5, 19 },  {  9,  9 },  {  3,  3 },  {  1,  6 } }       },\n\t{ CYCLES_MOV_SREG_REG,      { {  2,  2 },  {  3,  3 },  {  1,  1 },  {  1,  6 } }       },\n\t{ CYCLES_MOV_SREG_MEM,      { {  2,  2 },  {  3,  3 },  {  1,  1 },  {  1,  6 } }       },\n\t{ CYCLES_MOVSX_REG_REG,     { {  3,  3 },  {  3,  3 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_MOVSX_MEM_REG,     { {  6,  6 },  {  3,  3 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_MOVZX_REG_REG,     { {  3,  3 },  {  3,  3 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_MOVZX_MEM_REG,     { {  6,  6 },  {  3,  3 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_PUSH_RM,           { {  5,  5 },  {  4,  4 },  {  2,  2 },  {  3,  3 } }       },\n\t{ CYCLES_PUSH_REG_SHORT,    { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_PUSH_SREG,         { {  2,  2 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_PUSH_IMM,          { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_PUSHA,             { { 18, 18 },  { 11, 11 },  {  5,  5 },  { 11, 11 } }       },\n\t{ CYCLES_POP_RM,            { {  5,  5 },  {  4,  4 },  {  3,  3 },  {  4,  4 } }       },\n\t{ CYCLES_POP_REG_SHORT,     { {  4,  4 },  {  4,  4 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_POP_SREG,          { {  7, 21 },  {  3,  3 },  {  3,  3 },  {  1,  6 } }       },\n\t{ CYCLES_POPA,              { { 24, 24 },  {  9,  9 },  {  5,  5 },  {  9,  9 } }       },\n\t{ CYCLES_XCHG_REG_REG,      { {  3,  3 },  {  3,  3 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_XCHG_REG_MEM,      { {  5,  5 },  {  5,  5 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_IN,                { { 12, 26 },  { 14, 27 },  {  7, 19 },  {  8,  8 } }       },\n\t{ CYCLES_IN_VAR,            { { 13, 27 },  { 14, 27 },  {  7, 19 },  {  8,  8 } }       },\n\t{ CYCLES_OUT,               { { 10, 24 },  { 16, 29 },  { 12, 24 },  { 14, 14 } }       },\n\t{ CYCLES_OUT_VAR,           { { 11, 25 },  { 16, 29 },  { 12, 24 },  { 14, 14 } }       },\n\t{ CYCLES_LEA,               { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_LDS,               { {  7, 22 },  {  6, 12 },  {  4,  4 },  {  4,  9 } }       },\n\t{ CYCLES_LES,               { {  7, 22 },  {  6, 12 },  {  4,  4 },  {  4,  9 } }       },\n\t{ CYCLES_LFS,               { {  7, 22 },  {  6, 12 },  {  4,  4 },  {  4,  9 } }       },\n\t{ CYCLES_LGS,               { {  7, 22 },  {  6, 12 },  {  4,  4 },  {  4,  9 } }       },\n\t{ CYCLES_LSS,               { {  7, 22 },  {  6, 12 },  {  4,  4 },  {  4, 10 } }       },\n\t{ CYCLES_CLC,               { {  2,  2 },  {  2,  2 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_CLD,               { {  2,  2 },  {  2,  2 },  {  2,  2 },  {  4,  4 } }       },\n\t{ CYCLES_CLI,               { {  8,  8 },  {  5,  5 },  {  7,  7 },  {  6,  6 } }       },\n\t{ CYCLES_CLTS,              { {  6,  6 },  {  7,  7 },  { 10, 10 },  {  7,  7 } }       },\n\t{ CYCLES_CMC,               { {  2,  2 },  {  2,  2 },  {  2,  2 },  {  3,  3 } }       },\n\t{ CYCLES_LAHF,              { {  2,  2 },  {  3,  3 },  {  2,  2 },  {  2,  2 } }       },\n\t{ CYCLES_POPF,              { {  5,  5 },  {  9,  9 },  {  6,  6 },  {  8,  8 } }       },\n\t{ CYCLES_PUSHF,             { {  4,  4 },  {  4,  4 },  {  9,  9 },  {  2,  2 } }       },\n\t{ CYCLES_SAHF,              { {  3,  3 },  {  2,  2 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_STC,               { {  2,  2 },  {  2,  2 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_STD,               { {  2,  2 },  {  2,  2 },  {  2,  2 },  {  4,  4 } }       },\n\t{ CYCLES_STI,               { {  8,  8 },  {  5,  5 },  {  7,  7 },  {  6,  6 } }       },\n\t{ CYCLES_ALU_REG_REG,       { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_ALU_REG_MEM,       { {  7,  7 },  {  3,  3 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_ALU_MEM_REG,       { {  6,  6 },  {  2,  2 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_ALU_IMM_REG,       { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_ALU_IMM_MEM,       { {  7,  7 },  {  3,  3 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_ALU_IMM_ACC,       { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_INC_REG,           { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_INC_MEM,           { {  6,  6 },  {  3,  3 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_DEC_REG,           { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_DEC_MEM,           { {  6,  6 },  {  3,  3 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_CMP_REG_REG,       { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_CMP_REG_MEM,       { {  5,  5 },  {  2,  2 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_CMP_MEM_REG,       { {  6,  6 },  {  2,  2 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_CMP_IMM_REG,       { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_CMP_IMM_MEM,       { {  5,  5 },  {  2,  2 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_CMP_IMM_ACC,       { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_TEST_REG_REG,      { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_TEST_REG_MEM,      { {  5,  5 },  {  2,  2 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_TEST_IMM_REG,      { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_TEST_IMM_MEM,      { {  5,  5 },  {  2,  2 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_TEST_IMM_ACC,      { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_NEG_REG,           { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_NEG_MEM,           { {  6,  6 },  {  3,  3 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_AAA,               { {  4,  4 },  {  3,  3 },  {  3,  3 },  {  3,  3 } }       },\n\t{ CYCLES_AAS,               { {  4,  4 },  {  3,  3 },  {  3,  3 },  {  3,  3 } }       },\n\t{ CYCLES_DAA,               { {  4,  4 },  {  2,  2 },  {  3,  3 },  {  2,  2 } }       },\n\t{ CYCLES_DAS,               { {  4,  4 },  {  2,  2 },  {  3,  3 },  {  2,  2 } }       },\n\t{ CYCLES_MUL8_ACC_REG,      { { 17, 17 },  { 13, 13 },  { 11, 11 },  {  4,  4 } }       },\n\t{ CYCLES_MUL8_ACC_MEM,      { { 20, 20 },  { 13, 13 },  { 11, 11 },  {  4,  4 } }       },\n\t{ CYCLES_MUL16_ACC_REG,     { { 25, 25 },  { 13, 13 },  { 11, 11 },  {  5,  5 } }       },\n\t{ CYCLES_MUL16_ACC_MEM,     { { 28, 28 },  { 13, 13 },  { 11, 11 },  {  5,  5 } }       },\n\t{ CYCLES_MUL32_ACC_REG,     { { 41, 41 },  { 13, 13 },  { 10, 10 },  { 15, 15 } }       },\n\t{ CYCLES_MUL32_ACC_MEM,     { { 44, 44 },  { 13, 13 },  { 10, 10 },  { 15, 15 } }       },\n\t{ CYCLES_IMUL8_ACC_REG,     { { 17, 17 },  { 18, 18 },  { 11, 11 },  {  4,  4 } }       },\n\t{ CYCLES_IMUL8_ACC_MEM,     { { 20, 20 },  { 18, 18 },  { 11, 11 },  {  4,  4 } }       },\n\t{ CYCLES_IMUL16_ACC_REG,    { { 25, 25 },  { 26, 26 },  { 11, 11 },  {  5,  5 } }       },\n\t{ CYCLES_IMUL16_ACC_MEM,    { { 28, 28 },  { 26, 26 },  { 11, 11 },  {  5,  5 } }       },\n\t{ CYCLES_IMUL32_ACC_REG,    { { 41, 41 },  { 42, 42 },  { 10, 10 },  { 15, 15 } }       },\n\t{ CYCLES_IMUL32_ACC_MEM,    { { 44, 44 },  { 42, 42 },  { 10, 10 },  { 15, 15 } }       },\n\t{ CYCLES_IMUL8_REG_REG,     { { 17, 17 },  { 13, 13 },  { 10, 10 },  {  4,  4 } }       },\n\t{ CYCLES_IMUL8_REG_MEM,     { { 20, 20 },  { 13, 13 },  { 10, 10 },  {  4,  4 } }       },\n\t{ CYCLES_IMUL16_REG_REG,    { { 25, 25 },  { 13, 13 },  { 10, 10 },  {  5,  5 } }       },\n\t{ CYCLES_IMUL16_REG_MEM,    { { 28, 28 },  { 13, 13 },  { 10, 10 },  {  5,  5 } }       },\n\t{ CYCLES_IMUL32_REG_REG,    { { 41, 41 },  { 13, 13 },  { 10, 10 },  { 15, 15 } }       },\n\t{ CYCLES_IMUL32_REG_MEM,    { { 44, 44 },  { 13, 13 },  { 10, 10 },  { 15, 15 } }       },\n\t{ CYCLES_IMUL16_REG_IMM_REG,{ { 26, 26 },  { 26, 26 },  { 10, 10 },  {  6,  6 } }       },\n\t{ CYCLES_IMUL16_MEM_IMM_REG,{ { 27, 27 },  { 26, 26 },  { 10, 10 },  {  6,  6 } }       },\n\t{ CYCLES_IMUL32_REG_IMM_REG,{ { 42, 42 },  { 42, 42 },  { 10, 10 },  { 16, 16 } }       },\n\t{ CYCLES_IMUL32_MEM_IMM_REG,{ { 43, 43 },  { 42, 42 },  { 10, 10 },  { 16, 16 } }       },\n\t{ CYCLES_DIV8_ACC_REG,      { { 14, 14 },  { 16, 16 },  { 17, 17 },  { 20, 20 } }       },\n\t{ CYCLES_DIV8_ACC_MEM,      { { 17, 17 },  { 16, 16 },  { 17, 17 },  { 20, 20 } }       },\n\t{ CYCLES_DIV16_ACC_REG,     { { 22, 22 },  { 24, 24 },  { 25, 25 },  { 29, 29 } }       },\n\t{ CYCLES_DIV16_ACC_MEM,     { { 25, 25 },  { 24, 24 },  { 25, 25 },  { 29, 29 } }       },\n\t{ CYCLES_DIV32_ACC_REG,     { { 38, 38 },  { 40, 40 },  { 41, 41 },  { 45, 45 } }       },\n\t{ CYCLES_DIV32_ACC_MEM,     { { 41, 41 },  { 40, 40 },  { 41, 41 },  { 45, 45 } }       },\n\t{ CYCLES_IDIV8_ACC_REG,     { { 19, 19 },  { 19, 19 },  { 22, 22 },  { 20, 20 } }       },\n\t{ CYCLES_IDIV8_ACC_MEM,     { { 22, 22 },  { 20, 20 },  { 22, 22 },  { 20, 20 } }       },\n\t{ CYCLES_IDIV16_ACC_REG,    { { 27, 27 },  { 27, 27 },  { 30, 30 },  { 29, 29 } }       },\n\t{ CYCLES_IDIV16_ACC_MEM,    { { 30, 30 },  { 28, 28 },  { 30, 30 },  { 29, 29 } }       },\n\t{ CYCLES_IDIV32_ACC_REG,    { { 43, 43 },  { 43, 43 },  { 46, 46 },  { 45, 45 } }       },\n\t{ CYCLES_IDIV32_ACC_MEM,    { { 46, 46 },  { 44, 44 },  { 46, 46 },  { 45, 45 } }       },\n\t{ CYCLES_AAD,               { { 19, 19 },  { 14, 14 },  { 10, 10 },  {  7,  7 } }       },\n\t{ CYCLES_AAM,               { { 17, 17 },  { 15, 15 },  { 18, 18 },  { 19, 19 } }       },\n\t{ CYCLES_CBW,               { {  3,  3 },  {  3,  3 },  {  3,  3 },  {  3,  3 } }       },\n\t{ CYCLES_CWD,               { {  2,  2 },  {  3,  3 },  {  2,  2 },  {  2,  2 } }       },\n\t{ CYCLES_ROTATE_REG,        { {  3,  3 },  {  3,  3 },  {  1,  1 },  {  2,  2 } }       },\n\t{ CYCLES_ROTATE_MEM,        { {  7,  7 },  {  4,  4 },  {  3,  3 },  {  2,  2 } }       },\n\t{ CYCLES_ROTATE_CARRY_REG,  { {  9,  9 },  {  8,  8 },  {  7,  7 },  {  8,  8 } }       },\n\t{ CYCLES_ROTATE_CARRY_MEM,  { { 10, 10 },  {  9,  9 },  {  8,  8 },  {  8,  8 } }       },\n\t{ CYCLES_SHLD_REG,          { {  3,  3 },  {  2,  2 },  {  4,  4 },  {  3,  3 } }       },\n\t{ CYCLES_SHLD_MEM,          { {  7,  7 },  {  3,  3 },  {  4,  4 },  {  6,  6 } }       },\n\t{ CYCLES_SHRD_REG,          { {  3,  3 },  {  2,  2 },  {  4,  4 },  {  3,  3 } }       },\n\t{ CYCLES_SHRD_MEM,          { {  7,  7 },  {  3,  3 },  {  4,  4 },  {  6,  6 } }       },\n\t{ CYCLES_NOT_REG,           { {  2,  2 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_NOT_MEM,           { {  6,  6 },  {  3,  3 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_CMPS,              { { 10, 10 },  {  8,  8 },  {  5,  5 },  {  6,  6 } }       },\n\t{ CYCLES_INS,               { { 15, 29 },  { 17, 30 },  {  9, 22 },  { 11, 11 } }       },\n\t{ CYCLES_LODS,              { {  5,  5 },  {  5,  5 },  {  2,  2 },  {  3,  3 } }       },\n\t{ CYCLES_MOVS,              { {  8,  8 },  {  7,  7 },  {  4,  4 },  {  6,  6 } }       },\n\t{ CYCLES_OUTS,              { { 14, 28 },  { 17, 30 },  { 13, 25 },  { 15, 15 } }       },\n\t{ CYCLES_SCAS,              { {  8,  8 },  {  6,  6 },  {  4,  4 },  {  2,  2 } }       },\n\t{ CYCLES_STOS,              { {  5,  5 },  {  5,  5 },  {  3,  3 },  {  2,  2 } }       },\n\t{ CYCLES_XLAT,              { {  5,  5 },  {  4,  4 },  {  4,  4 },  {  5,  5 } }       },\n\t{ CYCLES_REP_CMPS_BASE,     { {  5,  5 },  {  0,  0 },  {  0,  0 },  { 11, 11 } }       },\n\t{ CYCLES_REP_INS_BASE,      { { 14,  8 },  {  0,  0 },  {  0,  0 },  { 17, 17 } }       },\n\t{ CYCLES_REP_LODS_BASE,     { {  5,  5 },  {  0,  0 },  {  0,  0 },  {  9,  9 } }       },\n\t{ CYCLES_REP_MOVS_BASE,     { {  8,  8 },  {  0,  0 },  {  0,  0 },  { 12, 12 } }       },\n\t{ CYCLES_REP_OUTS_BASE,     { { 12,  6 },  {  0,  0 },  {  0,  0 },  { 24, 24 } }       },\n\t{ CYCLES_REP_SCAS_BASE,     { {  5,  5 },  {  0,  0 },  {  0,  0 },  {  9,  9 } }       },\n\t{ CYCLES_REP_STOS_BASE,     { {  5,  5 },  {  0,  0 },  {  0,  0 },  {  9,  9 } }       },\n\t{ CYCLES_REP_CMPS,          { {  5,  5 },  {  8,  8 },  {  5,  5 },  {  4,  4 } }       },\n\t{ CYCLES_REP_INS,           { { 14,  8 },  { 17, 30 },  {  9, 22 },  {  4,  4 } }       },\n\t{ CYCLES_REP_LODS,          { {  5,  5 },  {  5,  5 },  {  2,  2 },  {  2,  2 } }       },\n\t{ CYCLES_REP_MOVS,          { {  8,  8 },  {  7,  7 },  {  4,  4 },  {  2,  2 } }       },\n\t{ CYCLES_REP_OUTS,          { { 12,  6 },  { 17, 30 },  { 13, 25 },  {  4,  4 } }       },\n\t{ CYCLES_REP_SCAS,          { {  5,  5 },  {  6,  6 },  {  4,  4 },  {  3,  3 } }       },\n\t{ CYCLES_REP_STOS,          { {  5,  5 },  {  5,  5 },  {  3,  3 },  {  2,  2 } }       },\n\t{ CYCLES_BSF_BASE,          { { 11, 11 },  {  6,  6 },  {  6,  6 },  {  4,  4 } }       },\n\t{ CYCLES_BSF,               { {  3,  3 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_BSR_BASE,          { {  9,  9 },  {  6,  6 },  {  7,  7 },  {  4,  4 } }       },\n\t{ CYCLES_BSR,               { {  3,  3 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_BT_IMM_REG,        { {  3,  3 },  {  3,  3 },  {  4,  4 },  {  1,  1 } }       },\n\t{ CYCLES_BT_IMM_MEM,        { {  6,  6 },  {  6,  6 },  {  4,  4 },  {  1,  1 } }       },\n\t{ CYCLES_BT_REG_REG,        { {  3,  3 },  {  3,  3 },  {  4,  4 },  {  1,  1 } }       },\n\t{ CYCLES_BT_REG_MEM,        { { 12, 12 },  { 12, 12 },  {  9,  9 },  {  7,  7 } }       },\n\t{ CYCLES_BTC_IMM_REG,       { {  6,  6 },  {  6,  6 },  {  7,  7 },  {  2,  2 } }       },\n\t{ CYCLES_BTC_IMM_MEM,       { {  8,  8 },  {  8,  8 },  {  8,  8 },  {  2,  2 } }       },\n\t{ CYCLES_BTC_REG_REG,       { {  6,  6 },  {  6,  6 },  {  7,  7 },  {  2,  2 } }       },\n\t{ CYCLES_BTC_REG_MEM,       { { 13, 13 },  { 13, 13 },  { 13, 13 },  {  8,  8 } }       },\n\t{ CYCLES_BTR_IMM_REG,       { {  6,  6 },  {  6,  6 },  {  7,  7 },  {  2,  2 } }       },\n\t{ CYCLES_BTR_IMM_MEM,       { {  8,  8 },  {  8,  8 },  {  8,  8 },  {  2,  2 } }       },\n\t{ CYCLES_BTR_REG_REG,       { {  6,  6 },  {  6,  6 },  {  7,  7 },  {  2,  2 } }       },\n\t{ CYCLES_BTR_REG_MEM,       { { 13, 13 },  { 13, 13 },  { 13, 13 },  {  8,  8 } }       },\n\t{ CYCLES_BTS_IMM_REG,       { {  6,  6 },  {  6,  6 },  {  7,  7 },  {  2,  2 } }       },\n\t{ CYCLES_BTS_IMM_MEM,       { {  8,  8 },  {  8,  8 },  {  8,  8 },  {  2,  2 } }       },\n\t{ CYCLES_BTS_REG_REG,       { {  6,  6 },  {  6,  6 },  {  7,  7 },  {  2,  2 } }       },\n\t{ CYCLES_BTS_REG_MEM,       { { 13, 13 },  { 13, 13 },  { 13, 13 },  {  8,  8 } }       },\n\t{ CYCLES_CALL,              { {  7,  7 },  {  3,  3 },  {  1,  1 },  {  3,  3 } }       },\n\t{ CYCLES_CALL_REG,          { {  7,  7 },  {  5,  5 },  {  2,  2 },  {  3,  3 } }       },\n\t{ CYCLES_CALL_MEM,          { { 10, 10 },  {  5,  5 },  {  2,  2 },  {  4,  4 } }       },\n\t{ CYCLES_CALL_INTERSEG,     { { 17, 34 },  { 18, 20 },  {  4, 13 },  {  9, 14 } }       },\n\t{ CYCLES_CALL_REG_INTERSEG, { { 22, 38 },  { 17, 20 },  {  4, 14 },  { 11, 15 } }       },\n\t{ CYCLES_CALL_MEM_INTERSEG, { { 22, 38 },  { 17, 20 },  {  4, 14 },  { 11, 15 } }       },\n\t{ CYCLES_JMP_SHORT,         { {  7,  7 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_JMP,               { {  7,  7 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_JMP_REG,           { {  7,  7 },  {  5,  5 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_JMP_MEM,           { { 10, 10 },  {  5,  5 },  {  2,  2 },  {  3,  3 } }       },\n\t{ CYCLES_JMP_INTERSEG,      { { 12, 27 },  { 17, 19 },  {  3,  3 },  {  8, 12 } }       },\n\t{ CYCLES_JMP_REG_INTERSEG,  { { 17, 31 },  { 13, 18 },  {  4,  4 },  { 10, 10 } }       },\n\t{ CYCLES_JMP_MEM_INTERSEG,  { { 17, 31 },  { 13, 18 },  {  4,  4 },  { 10, 13 } }       },\n\t{ CYCLES_RET,               { { 10, 10 },  {  5,  5 },  {  2,  2 },  {  3,  3 } }       },\n\t{ CYCLES_RET_IMM,           { { 10, 10 },  {  5,  5 },  {  2,  2 },  {  3,  3 } }       },\n\t{ CYCLES_RET_INTERSEG,      { { 18, 32 },  { 13, 13 },  {  4,  4 },  { 10, 13 } }       },\n\t{ CYCLES_RET_IMM_INTERSEG,  { { 18, 32 },  { 14, 14 },  {  4,  4 },  { 10, 13 } }       },\n\t{ CYCLES_JCC_DISP8,         { {  7,  7 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_JCC_FULL_DISP,     { {  7,  7 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_JCC_DISP8_NOBRANCH,{ {  3,  3 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_JCC_FULL_DISP_NOBRANCH,{ {  3,  3 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_JCXZ,              { {  9,  9 },  {  1,  1 },  {  1,  1 },  {  2,  2 } }       },\n\t{ CYCLES_JCXZ_NOBRANCH,     { {  5,  5 },  {  1,  1 },  {  1,  1 },  {  2,  2 } }       },\n\t{ CYCLES_LOOP,              { { 11, 11 },  {  6,  6 },  {  5,  5 },  {  2,  2 } }       },\n\t{ CYCLES_LOOPZ,             { { 11, 11 },  {  9,  9 },  {  8,  8 },  {  2,  2 } }       },\n\t{ CYCLES_LOOPNZ,            { { 11, 11 },  {  9,  9 },  {  8,  8 },  {  2,  2 } }       },\n\t{ CYCLES_SETCC_REG,         { {  4,  4 },  {  3,  3 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_SETCC_MEM,         { {  5,  5 },  {  4,  4 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_ENTER,             { { 10, 10 },  { 14, 14 },  { 11, 11 },  { 13, 13 } }       },\n\t{ CYCLES_LEAVE,             { {  4,  4 },  {  5,  5 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_INT,               { { 37, 37 },  { 30, 30 },  { 16, 16 },  { 19, 19 } }       },\n\t{ CYCLES_INT3,              { { 33, 33 },  { 26, 26 },  { 13, 13 },  { 19, 19 } }       },\n\t{ CYCLES_INTO_OF1,          { { 35, 35 },  { 28, 28 },  { 13, 13 },  { 19, 19 } }       },\n\t{ CYCLES_INTO_OF0,          { {  3,  3 },  {  3,  3 },  {  4,  4 },  {  4,  4 } }       },\n\t{ CYCLES_BOUND_IN_RANGE,    { { 10, 10 },  {  7,  7 },  {  8,  8 },  {  7,  7 } }       },\n\t{ CYCLES_BOUND_OUT_RANGE,   { { 44, 44 },  {  7,  7 },  {  8,  8 },  {  8,  8 } }       },\n\t{ CYCLES_IRET,              { { 22, 22 },  { 15, 15 },  {  8,  8 },  { 13, 13 } }       },\n\t{ CYCLES_HLT,               { {  5,  5 },  {  4,  4 },  {  4,  4 },  { 10, 10 } }       },\n\t{ CYCLES_MOV_REG_CR0,       { { 11, 11 },  { 16, 16 },  { 16, 16 },  { 20, 18 } }       },\n\t{ CYCLES_MOV_REG_CR2,       { {  4,  4 },  {  4,  4 },  {  4,  4 },  {  5,  5 } }       },\n\t{ CYCLES_MOV_REG_CR3,       { {  5,  5 },  {  4,  4 },  {  4,  4 },  {  5,  6 } }       },\n\t{ CYCLES_MOV_CR_REG,        { {  6,  6 },  {  4,  4 },  {  4,  4 },  {  6,  6 } }       },\n\t{ CYCLES_MOV_REG_DR0_3,     { { 22, 22 },  { 10, 10 },  { 10, 10 },  { 10, 10 } }       },\n\t{ CYCLES_MOV_REG_DR6_7,     { { 16, 16 },  { 10, 10 },  { 10, 10 },  { 10, 10 } }       },\n\t{ CYCLES_MOV_DR6_7_REG,     { { 14, 14 },  { 11, 11 },  { 11, 11 },  {  9,  9 } }       },\n\t{ CYCLES_MOV_DR0_3_REG,     { { 22, 22 },  { 11, 11 },  { 11, 11 },  {  9,  9 } }       },\n\t{ CYCLES_MOV_REG_TR6_7,     { { 12, 12 },  {  4,  4 },  {  4,  4 },  { 11, 11 } }       },\n\t{ CYCLES_MOV_TR6_7_REG,     { { 12, 12 },  {  3,  3 },  {  3,  3 },  {  3,  3 } }       },\n\t{ CYCLES_NOP,               { {  3,  3 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_WAIT,              { {  7,  7 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_ARPL_REG,          { {  0, 20 },  {  0,  9 },  {  0,  7 },  {  0,  9 } }       },\n\t{ CYCLES_ARPL_MEM,          { {  0, 21 },  {  0,  9 },  {  0,  7 },  {  0,  9 } }       },\n\t{ CYCLES_LAR_REG,           { {  0, 15 },  { 11, 11 },  {  8,  8 },  {  0,  9 } }       },\n\t{ CYCLES_LAR_MEM,           { {  0, 16 },  { 11, 11 },  {  8,  8 },  {  0,  9 } }       },\n\t{ CYCLES_LGDT,              { { 11, 11 },  { 11, 11 },  {  6,  6 },  { 10, 10 } }       },\n\t{ CYCLES_LIDT,              { { 11, 11 },  { 11, 11 },  {  6,  6 },  { 10, 10 } }       },\n\t{ CYCLES_LLDT_REG,          { {  0, 20 },  { 11, 11 },  {  9,  9 },  {  0,  8 } }       },\n\t{ CYCLES_LLDT_MEM,          { {  0, 24 },  { 11, 11 },  {  9,  9 },  {  0,  8 } }       },\n\t{ CYCLES_LMSW_REG,          { { 11, 11 },  { 13, 13 },  {  8,  8 },  { 11, 11 } }       },\n\t{ CYCLES_LMSW_MEM,          { { 14, 14 },  { 13, 13 },  {  8,  8 },  { 11, 11 } }       },\n\t{ CYCLES_LSL_REG,           { {  0, 21 },  { 10, 10 },  {  8,  8 },  {  0,  9 } }       },\n\t{ CYCLES_LSL_MEM,           { {  0, 22 },  { 10, 10 },  {  8,  8 },  {  0,  9 } }       },\n\t{ CYCLES_LTR_REG,           { {  0, 23 },  { 20, 20 },  { 10, 10 },  {  0,  9 } }       },\n\t{ CYCLES_LTR_MEM,           { {  0, 27 },  { 20, 20 },  { 10, 10 },  {  0,  9 } }       },\n\t{ CYCLES_SGDT,              { {  9,  9 },  { 10, 10 },  {  4,  4 },  {  6,  6 } }       },\n\t{ CYCLES_SIDT,              { {  9,  9 },  { 10, 10 },  {  4,  4 },  {  6,  6 } }       },\n\t{ CYCLES_SLDT_REG,          { {  0,  2 },  {  2,  2 },  {  2,  2 },  {  0,  1 } }       },\n\t{ CYCLES_SLDT_MEM,          { {  0,  2 },  {  3,  3 },  {  2,  2 },  {  0,  1 } }       },\n\t{ CYCLES_SMSW_REG,          { {  2,  2 },  {  2,  2 },  {  4,  4 },  {  4,  4 } }       },\n\t{ CYCLES_SMSW_MEM,          { {  2,  2 },  {  3,  3 },  {  4,  4 },  {  4,  4 } }       },\n\t{ CYCLES_STR_REG,           { {  0,  2 },  {  2,  2 },  {  2,  2 },  {  0,  3 } }       },\n\t{ CYCLES_STR_MEM,           { {  0,  2 },  {  3,  3 },  {  2,  2 },  {  0,  3 } }       },\n\t{ CYCLES_VERR_REG,          { {  0, 10 },  { 11, 11 },  {  7,  7 },  {  0,  8 } }       },\n\t{ CYCLES_VERR_MEM,          { {  0, 11 },  { 11, 11 },  {  7,  7 },  {  0,  8 } }       },\n\t{ CYCLES_VERW_REG,          { {  0, 15 },  { 11, 11 },  {  7,  7 },  {  0,  8 } }       },\n\t{ CYCLES_VERW_MEM,          { {  0, 16 },  { 11, 11 },  {  7,  7 },  {  0,  8 } }       },\n\t{ CYCLES_LOCK,              { {  0,  0 },  {  1,  1 },  {  1,  1 },  {  1,  1 } }       },\n\n\t// i486+\n\t{ CYCLES_BSWAP,             { {  0,  0 },  {  1,  1 },  {  1,  1 },  {  6,  6 } }       },\n\t{ CYCLES_CMPXCHG,           { {  0,  0 },  {  6,  6 },  {  5,  5 },  {  6,  6 } }       },\n\t{ CYCLES_INVD,              { {  0,  0 },  {  4,  4 },  { 15, 15 },  { 20, 20 } }       },\n\t{ CYCLES_XADD,              { {  0,  0 },  {  4,  4 },  {  4,  4 },  {  2,  2 } }       },\n\n\t// Pentium+\n\t{ CYCLES_CMPXCHG8B,         { {  0,  0 },  {  0,  0 },  { 10, 10 },  {  6,  6 } }       },\n\t{ CYCLES_CPUID,             { {  0,  0 },  {  0,  0 },  { 14, 14 },  { 12, 12 } }       },\n\t{ CYCLES_CPUID_EAX1,        { {  0,  0 },  {  0,  0 },  { 14, 14 },  { 12, 12 } }       },\n\t{ CYCLES_RDTSC,             { {  0,  0 },  {  0,  0 },  { 20, 20 },  {  1,  1 } }       },\n\t{ CYCLES_RSM,               { {  0,  0 },  {  0,  0 },  { 82, 82 },  { 57, 57 } }       },\n\t{ CYCLES_RDMSR,             { {  0,  0 },  {  0,  0 },  { 20, 20 },  {  1,  1 } }       },\n\n\t// FPU\n\t{ CYCLES_FABS,              { {  0,  0 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_FADD,              { {  0,  0 },  {  8,  8 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_FBLD,              { {  0,  0 },  { 70, 70 },  { 48, 48 },  {  1,  1 } }       },\n\t{ CYCLES_FBSTP,             { {  0,  0 },  {172,172 },  {148,148 },  {  1,  1 } }       },\n\t{ CYCLES_FCHS,              { {  0,  0 },  {  6,  6 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_FCLEX,             { {  0,  0 },  {  7,  7 },  {  9,  9 },  {  1,  1 } }       },\n\t{ CYCLES_FCOM,              { {  0,  0 },  {  4,  4 },  {  4,  4 },  {  1,  1 } }       },\n\t{ CYCLES_FCOS,              { {  0,  0 },  {255,255 },  {124,124 },  {  1,  1 } }       },\n\t{ CYCLES_FDECSTP,           { {  0,  0 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_FDISI,             { {  0,  0 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_FDIV,              { {  0,  0 },  { 73, 73 },  { 39, 39 },  {  1,  1 } }       },\n\t{ CYCLES_FDIVR,             { {  0,  0 },  { 73, 73 },  { 39, 39 },  {  1,  1 } }       },\n\t{ CYCLES_FENI,              { {  0,  0 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_FFREE,             { {  0,  0 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_FIADD,             { {  0,  0 },  { 20, 20 },  {  7,  7 },  {  1,  1 } }       },\n\t{ CYCLES_FICOM,             { {  0,  0 },  { 16, 16 },  {  8,  8 },  {  1,  1 } }       },\n\t{ CYCLES_FIDIV,             { {  0,  0 },  { 85, 85 },  { 42, 42 },  {  1,  1 } }       },\n\t{ CYCLES_FILD,              { {  0,  0 },  { 13, 13 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_FIMUL,             { {  0,  0 },  { 23, 23 },  {  7,  7 },  {  1,  1 } }       },\n\t{ CYCLES_FINCSTP,           { {  0,  0 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_FINIT,             { {  0,  0 },  { 17, 17 },  { 16, 16 },  {  1,  1 } }       },\n\t{ CYCLES_FIST,              { {  0,  0 },  { 29, 29 },  {  6,  6 },  {  1,  1 } }       },\n\t{ CYCLES_FISUB,             { {  0,  0 },  { 20, 20 },  {  7,  7 },  {  1,  1 } }       },\n\t{ CYCLES_FLD,               { {  0,  0 },  {  4,  4 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_FLDZ,              { {  0,  0 },  {  4,  4 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_FLD1,              { {  0,  0 },  {  4,  4 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_FLDL2E,            { {  0,  0 },  {  8,  8 },  {  5,  5 },  {  1,  1 } }       },\n\t{ CYCLES_FLDL2T,            { {  0,  0 },  {  8,  8 },  {  5,  5 },  {  1,  1 } }       },\n\t{ CYCLES_FLDLG2,            { {  0,  0 },  {  8,  8 },  {  5,  5 },  {  1,  1 } }       },\n\t{ CYCLES_FLDLN2,            { {  0,  0 },  {  8,  8 },  {  5,  5 },  {  1,  1 } }       },\n\t{ CYCLES_FLDPI,             { {  0,  0 },  {  8,  8 },  {  5,  5 },  {  1,  1 } }       },\n\t{ CYCLES_FLDCW,             { {  0,  0 },  {  4,  4 },  {  7,  7 },  {  1,  1 } }       },\n\t{ CYCLES_FLDENV,            { {  0,  0 },  { 44, 44 },  { 37, 37 },  {  1,  1 } }       },\n\t{ CYCLES_FMUL,              { {  0,  0 },  { 16, 16 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_FNOP,              { {  0,  0 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_FPATAN,            { {  0,  0 },  {218,218 },  {173,173 },  {  1,  1 } }       },\n\t{ CYCLES_FPREM,             { {  0,  0 },  { 70, 70 },  { 16, 16 },  {  1,  1 } }       },\n\t{ CYCLES_FPREM1,            { {  0,  0 },  { 72, 72 },  { 20, 20 },  {  1,  1 } }       },\n\t{ CYCLES_FPTAN,             { {  0,  0 },  {200,200 },  {173,173 },  {  1,  1 } }       },\n\t{ CYCLES_FRNDINT,           { {  0,  0 },  { 21, 21 },  {  9,  9 },  {  1,  1 } }       },\n\t{ CYCLES_FRSTOR,            { {  0,  0 },  {131,131 },  { 75, 75 },  {  1,  1 } }       },\n\t{ CYCLES_FSAVE,             { {  0,  0 },  {154,154 },  {127,127 },  {  1,  1 } }       },\n\t{ CYCLES_FSCALE,            { {  0,  0 },  { 30, 30 },  { 20, 20 },  {  1,  1 } }       },\n\t{ CYCLES_FSETPM,            { {  0,  0 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_FSIN,              { {  0,  0 },  {255,255 },  {126,126 },  {  1,  1 } }       },\n\t{ CYCLES_FSINCOS,           { {  0,  0 },  {255,255 },  {137,137 },  {  1,  1 } }       },\n\t{ CYCLES_FSQRT,             { {  0,  0 },  { 83, 83 },  { 70, 70 },  {  1,  1 } }       },\n\t{ CYCLES_FST,               { {  0,  0 },  {  3,  3 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_FSTCW,             { {  0,  0 },  {  3,  3 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_FSTENV,            { {  0,  0 },  { 67, 67 },  { 48, 48 },  {  1,  1 } }       },\n\t{ CYCLES_FSTSW,             { {  0,  0 },  {  3,  3 },  {  2,  2 },  {  1,  1 } }       },\n\t{ CYCLES_FSUB,              { {  0,  0 },  {  8,  8 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_FSUBR,             { {  0,  0 },  {  8,  8 },  {  3,  3 },  {  1,  1 } }       },\n\t{ CYCLES_FTST,              { {  0,  0 },  {  4,  4 },  {  4,  4 },  {  1,  1 } }       },\n\t{ CYCLES_FUCOM,             { {  0,  0 },  {  4,  4 },  {  4,  4 },  {  1,  1 } }       },\n\t{ CYCLES_FXAM,              { {  0,  0 },  {  8,  8 },  { 21, 21 },  {  1,  1 } }       },\n\t{ CYCLES_FXCH,              { {  0,  0 },  {  4,  4 },  {  1,  1 },  {  1,  1 } }       },\n\t{ CYCLES_FXTRACT,           { {  0,  0 },  { 16, 16 },  { 13, 13 },  {  1,  1 } }       },\n\t{ CYCLES_FYL2X,             { {  0,  0 },  {196,196 },  {111,111 },  {  1,  1 } }       },\n\t{ CYCLES_FYL2XPI,           { {  0,  0 },  {171,171 },  {103,103 },  {  1,  1 } }       },\n\t{ CYCLES_CMPXCHG_REG_REG_T, { {  0,  0 },  {  6,  6 },  {  6,  6 },  {  6,  6 } }       },\n\t{ CYCLES_CMPXCHG_REG_REG_F, { {  0,  0 },  {  9,  9 },  {  9,  9 },  {  9,  9 } }       },\n\t{ CYCLES_CMPXCHG_REG_MEM_T, { {  0,  0 },  {  7,  7 },  {  7,  7 },  {  7,  7 } }       },\n\t{ CYCLES_CMPXCHG_REG_MEM_F, { {  0,  0 },  { 10, 10 },  { 10, 10 },  { 10, 10 } }       },\n};\n\n#endif /* __CYCLES_H__ */\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386.old/i386.c",
    "content": "/*\n    Intel 386 emulator\n\n    Written by Ville Linde\n\n    Currently supports:\n        Intel 386\n        Intel 486\n        Intel Pentium\n        Cyrix MediaGX\n        Intel Pentium MMX\n        Intel Pentium Pro\n        Intel Pentium II\n        Intel Pentium III\n        Intel Pentium 4\n*/\n\n//#include \"emu.h\"\n//#include \"debugger.h\"\n#include \"i386priv.h\"\n//#include \"i386.h\"\n\n//#include \"debug/debugcpu.h\"\n\n/* seems to be defined on mingw-gcc */\n#undef i386\n\nstatic CPU_RESET( CPU_MODEL );\n\nint i386_parity_table[256];\nMODRM_TABLE i386_MODRM_table[256];\n\nstatic void i386_trap_with_error(int irq, int irq_gate, int trap_level, UINT32 err);\nstatic void i286_task_switch(UINT16 selector, UINT8 nested);\nstatic void i386_task_switch(UINT16 selector, UINT8 nested);\nstatic void build_opcode_table(UINT32 features);\nstatic void zero_state();\nstatic void pentium_smi();\n\n#define FAULT(fault,error) {m_ext = 1; i386_trap_with_error(fault,0,0,error); return;}\n#define FAULT_EXP(fault,error) {m_ext = 1; i386_trap_with_error(fault,0,trap_level+1,error); return;}\n\n/*************************************************************************/\n\nstatic UINT32 i386_load_protected_mode_segment(I386_SREG *seg, UINT64 *desc )\n{\n\tUINT32 v1,v2;\n\tUINT32 base, limit;\n\tint entry;\n\n\tif(!seg->selector)\n\t{\n\t\tseg->flags = 0;\n\t\tseg->base = 0;\n\t\tseg->limit = 0;\n\t\tseg->d = 0;\n\t\tseg->valid = false;\n\t\treturn 0;\n\t}\n\n\tif ( seg->selector & 0x4 )\n\t{\n\t\tbase = m_ldtr.base;\n\t\tlimit = m_ldtr.limit;\n\t} else {\n\t\tbase = m_gdtr.base;\n\t\tlimit = m_gdtr.limit;\n\t}\n\n\tentry = seg->selector & ~0x7;\n\tif (limit == 0 || entry + 7 > limit)\n\t\treturn 0;\n\n\tv1 = READ32PL0(base + entry );\n\tv2 = READ32PL0(base + entry + 4 );\n\n\tseg->flags = (v2 >> 8) & 0xf0ff;\n\tseg->base = (v2 & 0xff000000) | ((v2 & 0xff) << 16) | ((v1 >> 16) & 0xffff);\n\tseg->limit = (v2 & 0xf0000) | (v1 & 0xffff);\n\tif (seg->flags & 0x8000)\n\t\tseg->limit = (seg->limit << 12) | 0xfff;\n\tseg->d = (seg->flags & 0x4000) ? 1 : 0;\n\tseg->valid = true;\n\n\tif(desc)\n\t\t*desc = ((UINT64)v2<<32)|v1;\n\treturn 1;\n}\n\nstatic void i386_load_call_gate(I386_CALL_GATE *gate)\n{\n\tUINT32 v1,v2;\n\tUINT32 base,limit;\n\tint entry;\n\n\tif ( gate->segment & 0x4 )\n\t{\n\t\tbase = m_ldtr.base;\n\t\tlimit = m_ldtr.limit;\n\t} else {\n\t\tbase = m_gdtr.base;\n\t\tlimit = m_gdtr.limit;\n\t}\n\n\tentry = gate->segment & ~0x7;\n\tif (limit == 0 || entry + 7 > limit)\n\t\treturn;\n\n\tv1 = READ32PL0(base + entry );\n\tv2 = READ32PL0(base + entry + 4 );\n\n\t/* Note that for task gates, offset and dword_count are not used */\n\tgate->selector = (v1 >> 16) & 0xffff;\n\tgate->offset = (v1 & 0x0000ffff) | (v2 & 0xffff0000);\n\tgate->ar = (v2 >> 8) & 0xff;\n\tgate->dword_count = v2 & 0x001f;\n\tgate->present = (gate->ar >> 7) & 0x01;\n\tgate->dpl = (gate->ar >> 5) & 0x03;\n}\n\nstatic void i386_set_descriptor_accessed(UINT16 selector)\n{\n\t// assume the selector is valid, we don't need to check it again\n\tUINT32 base, addr;\n\tUINT8 rights;\n\tif(!(selector & ~3))\n\t\treturn;\n\n\tif ( selector & 0x4 )\n\t\tbase = m_ldtr.base;\n\telse\n\t\tbase = m_gdtr.base;\n\n\taddr = base + (selector & ~7) + 5;\n\ti386_translate_address(TRANSLATE_READ, &addr, NULL);\n\trights = read_byte(addr);\n\t// Should a fault be thrown if the table is read only?\n\twrite_byte(addr, rights | 1);\n}\n\nstatic void i386_load_segment_descriptor(int segment )\n{\n\tif (PROTECTED_MODE)\n\t{\n\t\tif (!V8086_MODE)\n\t\t{\n\t\t\ti386_load_protected_mode_segment(&m_sreg[segment], NULL );\n\t\t\tif(m_sreg[segment].selector)\n\t\t\t\ti386_set_descriptor_accessed(m_sreg[segment].selector);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_sreg[segment].base = m_sreg[segment].selector << 4;\n\t\t\tm_sreg[segment].limit = 0xffff;\n\t\t\tm_sreg[segment].flags = (segment == CS) ? 0x00fb : 0x00f3;\n\t\t\tm_sreg[segment].d = 0;\n\t\t\tm_sreg[segment].valid = true;\n\t\t}\n\t}\n\telse\n\t{\n\t\tm_sreg[segment].base = m_sreg[segment].selector << 4;\n\t\tm_sreg[segment].d = 0;\n\t\tm_sreg[segment].valid = true;\n\n\t\tif( segment == CS && !m_performed_intersegment_jump )\n\t\t\tm_sreg[segment].base |= 0xfff00000;\n\t}\n}\n\n/* Retrieves the stack selector located in the current TSS */\nstatic UINT32 i386_get_stack_segment(UINT8 privilege)\n{\n\tUINT32 ret;\n\tif(privilege >= 3)\n\t\treturn 0;\n\n\tif(m_task.flags & 8)\n\t\tret = READ32PL0((m_task.base+8) + (8*privilege));\n\telse\n\t\tret = READ16PL0((m_task.base+4) + (4*privilege));\n\n\treturn ret;\n}\n\n/* Retrieves the stack pointer located in the current TSS */\nstatic UINT32 i386_get_stack_ptr(UINT8 privilege)\n{\n\tUINT32 ret;\n\tif(privilege >= 3)\n\t\treturn 0;\n\n\tif(m_task.flags & 8)\n\t\tret = READ32PL0((m_task.base+4) + (8*privilege));\n\telse\n\t\tret = READ16PL0((m_task.base+2) + (4*privilege));\n\n\treturn ret;\n}\n\nstatic UINT32 get_flags()\n{\n\tUINT32 f = 0x2;\n\tf |= m_CF;\n\tf |= m_PF << 2;\n\tf |= m_AF << 4;\n\tf |= m_ZF << 6;\n\tf |= m_SF << 7;\n\tf |= m_TF << 8;\n\tf |= m_IF << 9;\n\tf |= m_DF << 10;\n\tf |= m_OF << 11;\n\tf |= m_IOP1 << 12;\n\tf |= m_IOP2 << 13;\n\tf |= m_NT << 14;\n\tf |= m_RF << 16;\n\tf |= m_VM << 17;\n\tf |= m_AC << 18;\n\tf |= m_VIF << 19;\n\tf |= m_VIP << 20;\n\tf |= m_ID << 21;\n\treturn (m_eflags & ~m_eflags_mask) | (f & m_eflags_mask);\n}\n\nstatic void set_flags(UINT32 f )\n{\n\tm_CF = (f & 0x1) ? 1 : 0;\n\tm_PF = (f & 0x4) ? 1 : 0;\n\tm_AF = (f & 0x10) ? 1 : 0;\n\tm_ZF = (f & 0x40) ? 1 : 0;\n\tm_SF = (f & 0x80) ? 1 : 0;\n\tm_TF = (f & 0x100) ? 1 : 0;\n\tm_IF = (f & 0x200) ? 1 : 0;\n\tm_DF = (f & 0x400) ? 1 : 0;\n\tm_OF = (f & 0x800) ? 1 : 0;\n\tm_IOP1 = (f & 0x1000) ? 1 : 0;\n\tm_IOP2 = (f & 0x2000) ? 1 : 0;\n\tm_NT = (f & 0x4000) ? 1 : 0;\n\tm_RF = (f & 0x10000) ? 1 : 0;\n\tm_VM = (f & 0x20000) ? 1 : 0;\n\tm_AC = (f & 0x40000) ? 1 : 0;\n\tm_VIF = (f & 0x80000) ? 1 : 0;\n\tm_VIP = (f & 0x100000) ? 1 : 0;\n\tm_ID = (f & 0x200000) ? 1 : 0;\n\tm_eflags = f & m_eflags_mask;\n}\n\nstatic void sib_byte(UINT8 mod, UINT32* out_ea, UINT8* out_segment)\n{\n\tUINT32 ea = 0;\n\tUINT8 segment = 0;\n\tUINT8 scale, i, base;\n\tUINT8 sib = FETCH();\n\tscale = (sib >> 6) & 0x3;\n\ti = (sib >> 3) & 0x7;\n\tbase = sib & 0x7;\n\n\tswitch( base )\n\t{\n\t\tcase 0: ea = REG32(EAX); segment = DS; break;\n\t\tcase 1: ea = REG32(ECX); segment = DS; break;\n\t\tcase 2: ea = REG32(EDX); segment = DS; break;\n\t\tcase 3: ea = REG32(EBX); segment = DS; break;\n\t\tcase 4: ea = REG32(ESP); segment = SS; break;\n\t\tcase 5:\n\t\t\tif( mod == 0 ) {\n\t\t\t\tea = FETCH32();\n\t\t\t\tsegment = DS;\n\t\t\t} else if( mod == 1 ) {\n\t\t\t\tea = REG32(EBP);\n\t\t\t\tsegment = SS;\n\t\t\t} else if( mod == 2 ) {\n\t\t\t\tea = REG32(EBP);\n\t\t\t\tsegment = SS;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6: ea = REG32(ESI); segment = DS; break;\n\t\tcase 7: ea = REG32(EDI); segment = DS; break;\n\t}\n\tswitch( i )\n\t{\n\t\tcase 0: ea += REG32(EAX) * (1 << scale); break;\n\t\tcase 1: ea += REG32(ECX) * (1 << scale); break;\n\t\tcase 2: ea += REG32(EDX) * (1 << scale); break;\n\t\tcase 3: ea += REG32(EBX) * (1 << scale); break;\n\t\tcase 4: break;\n\t\tcase 5: ea += REG32(EBP) * (1 << scale); break;\n\t\tcase 6: ea += REG32(ESI) * (1 << scale); break;\n\t\tcase 7: ea += REG32(EDI) * (1 << scale); break;\n\t}\n\t*out_ea = ea;\n\t*out_segment = segment;\n}\n\nstatic void modrm_to_EA(UINT8 mod_rm, UINT32* out_ea, UINT8* out_segment)\n{\n\tINT8 disp8;\n\tINT16 disp16;\n\tINT32 disp32;\n\tUINT8 mod = (mod_rm >> 6) & 0x3;\n\tUINT8 rm = mod_rm & 0x7;\n\tUINT32 ea;\n\tUINT8 segment;\n\n\tif( mod_rm >= 0xc0 )\n\t\tfatalerror(\"i386: Called modrm_to_EA with modrm value %02X!\\n\",mod_rm);\n\n\n\tif( m_address_size ) {\n\t\tswitch( rm )\n\t\t{\n\t\t\tdefault:\n\t\t\tcase 0: ea = REG32(EAX); segment = DS; break;\n\t\t\tcase 1: ea = REG32(ECX); segment = DS; break;\n\t\t\tcase 2: ea = REG32(EDX); segment = DS; break;\n\t\t\tcase 3: ea = REG32(EBX); segment = DS; break;\n\t\t\tcase 4: sib_byte(mod, &ea, &segment ); break;\n\t\t\tcase 5:\n\t\t\t\tif( mod == 0 ) {\n\t\t\t\t\tea = FETCH32(); segment = DS;\n\t\t\t\t} else {\n\t\t\t\t\tea = REG32(EBP); segment = SS;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 6: ea = REG32(ESI); segment = DS; break;\n\t\t\tcase 7: ea = REG32(EDI); segment = DS; break;\n\t\t}\n\t\tif( mod == 1 ) {\n\t\t\tdisp8 = FETCH();\n\t\t\tea += (INT32)disp8;\n\t\t} else if( mod == 2 ) {\n\t\t\tdisp32 = FETCH32();\n\t\t\tea += disp32;\n\t\t}\n\n\t\tif( m_segment_prefix )\n\t\t\tsegment = m_segment_override;\n\n\t\t*out_ea = ea;\n\t\t*out_segment = segment;\n\n\t} else {\n\t\tswitch( rm )\n\t\t{\n\t\t\tdefault:\n\t\t\tcase 0: ea = REG16(BX) + REG16(SI); segment = DS; break;\n\t\t\tcase 1: ea = REG16(BX) + REG16(DI); segment = DS; break;\n\t\t\tcase 2: ea = REG16(BP) + REG16(SI); segment = SS; break;\n\t\t\tcase 3: ea = REG16(BP) + REG16(DI); segment = SS; break;\n\t\t\tcase 4: ea = REG16(SI); segment = DS; break;\n\t\t\tcase 5: ea = REG16(DI); segment = DS; break;\n\t\t\tcase 6:\n\t\t\t\tif( mod == 0 ) {\n\t\t\t\t\tea = FETCH16(); segment = DS;\n\t\t\t\t} else {\n\t\t\t\t\tea = REG16(BP); segment = SS;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 7: ea = REG16(BX); segment = DS; break;\n\t\t}\n\t\tif( mod == 1 ) {\n\t\t\tdisp8 = FETCH();\n\t\t\tea += (INT32)disp8;\n\t\t} else if( mod == 2 ) {\n\t\t\tdisp16 = FETCH16();\n\t\t\tea += (INT32)disp16;\n\t\t}\n\n\t\tif( m_segment_prefix )\n\t\t\tsegment = m_segment_override;\n\n\t\t*out_ea = ea & 0xffff;\n\t\t*out_segment = segment;\n\t}\n}\n\nstatic UINT32 GetNonTranslatedEA(UINT8 modrm,UINT8 *seg)\n{\n\tUINT8 segment;\n\tUINT32 ea;\n\tmodrm_to_EA(modrm, &ea, &segment );\n\tif(seg) *seg = segment;\n\treturn ea;\n}\n\nstatic UINT32 GetEA(UINT8 modrm, int rwn)\n{\n\tUINT8 segment;\n\tUINT32 ea;\n\tmodrm_to_EA(modrm, &ea, &segment );\n\treturn i386_translate(segment, ea, rwn );\n}\n\n/* Check segment register for validity when changing privilege level after an RETF */\nstatic void i386_check_sreg_validity(int reg)\n{\n\tUINT16 selector = m_sreg[reg].selector;\n\tUINT8 CPL = m_CPL;\n\tUINT8 DPL,RPL;\n\tI386_SREG desc;\n\tint invalid = 0;\n\n\tmemset(&desc, 0, sizeof(desc));\n\tdesc.selector = selector;\n\ti386_load_protected_mode_segment(&desc,NULL);\n\tDPL = (desc.flags >> 5) & 0x03;  // descriptor privilege level\n\tRPL = selector & 0x03;\n\n\t/* Must be within the relevant descriptor table limits */\n\tif(selector & 0x04)\n\t{\n\t\tif((selector & ~0x07) > m_ldtr.limit)\n\t\t\tinvalid = 1;\n\t}\n\telse\n\t{\n\t\tif((selector & ~0x07) > m_gdtr.limit)\n\t\t\tinvalid = 1;\n\t}\n\n\t/* Must be either a data or readable code segment */\n\tif(((desc.flags & 0x0018) == 0x0018 && (desc.flags & 0x0002)) || (desc.flags & 0x0018) == 0x0010)\n\t\tinvalid = 0;\n\telse\n\t\tinvalid = 1;\n\n\t/* If a data segment or non-conforming code segment, then either DPL >= CPL or DPL >= RPL */\n\tif(((desc.flags & 0x0018) == 0x0018 && (desc.flags & 0x0004) == 0) || (desc.flags & 0x0018) == 0x0010)\n\t{\n\t\tif((DPL < CPL) || (DPL < RPL))\n\t\t\tinvalid = 1;\n\t}\n\n\t/* if segment is invalid, then segment register is nulled */\n\tif(invalid != 0)\n\t{\n\t\tm_sreg[reg].selector = 0;\n\t\ti386_load_segment_descriptor(reg);\n\t}\n}\n\nstatic int i386_limit_check(int seg, UINT32 offset)\n{\n\tif(PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\tif((m_sreg[seg].flags & 0x0018) == 0x0010 && m_sreg[seg].flags & 0x0004) // if expand-down data segment\n\t\t{\n\t\t\t// compare if greater then 0xffffffff when we're passed the access size\n\t\t\tif((offset <= m_sreg[seg].limit) || ((m_sreg[seg].d)?0:(offset > 0xffff)))\n\t\t\t{\n\t\t\t\tlogerror(\"Limit check at 0x%08x failed. Segment %04x, limit %08x, offset %08x (expand-down)\\n\",m_pc,m_sreg[seg].selector,m_sreg[seg].limit,offset);\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(offset > m_sreg[seg].limit)\n\t\t\t{\n\t\t\t\tlogerror(\"Limit check at 0x%08x failed. Segment %04x, limit %08x, offset %08x\\n\",m_pc,m_sreg[seg].selector,m_sreg[seg].limit,offset);\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t}\n\t}\n\treturn 0;\n}\n\nstatic void i386_sreg_load(UINT16 selector, UINT8 reg, bool *fault)\n{\n\t// Checks done when MOV changes a segment register in protected mode\n\tUINT8 CPL,RPL,DPL;\n\n\tCPL = m_CPL;\n\tRPL = selector & 0x0003;\n\n\tif(!PROTECTED_MODE || V8086_MODE)\n\t{\n\t\tm_sreg[reg].selector = selector;\n\t\ti386_load_segment_descriptor(reg);\n\t\tif(fault) *fault = false;\n\t\treturn;\n\t}\n\n\tif(fault) *fault = true;\n\tif(reg == SS)\n\t{\n\t\tI386_SREG stack;\n\n\t\tmemset(&stack, 0, sizeof(stack));\n\t\tstack.selector = selector;\n\t\ti386_load_protected_mode_segment(&stack,NULL);\n\t\tDPL = (stack.flags >> 5) & 0x03;\n\n\t\tif((selector & ~0x0003) == 0)\n\t\t{\n\t\t\tlogerror(\"SReg Load (%08x): Selector is null.\\n\",m_pc);\n\t\t\tFAULT(FAULT_GP,0)\n\t\t}\n\t\tif(selector & 0x0004)  // LDT\n\t\t{\n\t\t\tif((selector & ~0x0007) > m_ldtr.limit)\n\t\t\t{\n\t\t\t\tlogerror(\"SReg Load (%08x): Selector is out of LDT bounds.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_GP,selector & ~0x03)\n\t\t\t}\n\t\t}\n\t\telse  // GDT\n\t\t{\n\t\t\tif((selector & ~0x0007) > m_gdtr.limit)\n\t\t\t{\n\t\t\t\tlogerror(\"SReg Load (%08x): Selector is out of GDT bounds.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_GP,selector & ~0x03)\n\t\t\t}\n\t\t}\n\t\tif (RPL != CPL)\n\t\t{\n\t\t\tlogerror(\"SReg Load (%08x): Selector RPL does not equal CPL.\\n\",m_pc);\n\t\t\tFAULT(FAULT_GP,selector & ~0x03)\n\t\t}\n\t\tif(((stack.flags & 0x0018) != 0x10) && (stack.flags & 0x0002) != 0)\n\t\t{\n\t\t\tlogerror(\"SReg Load (%08x): Segment is not a writable data segment.\\n\",m_pc);\n\t\t\tFAULT(FAULT_GP,selector & ~0x03)\n\t\t}\n\t\tif(DPL != CPL)\n\t\t{\n\t\t\tlogerror(\"SReg Load (%08x): Segment DPL does not equal CPL.\\n\",m_pc);\n\t\t\tFAULT(FAULT_GP,selector & ~0x03)\n\t\t}\n\t\tif(!(stack.flags & 0x0080))\n\t\t{\n\t\t\tlogerror(\"SReg Load (%08x): Segment is not present.\\n\",m_pc);\n\t\t\tFAULT(FAULT_SS,selector & ~0x03)\n\t\t}\n\t}\n\tif(reg == DS || reg == ES || reg == FS || reg == GS)\n\t{\n\t\tI386_SREG desc;\n\n\t\tif((selector & ~0x0003) == 0)\n\t\t{\n\t\t\tm_sreg[reg].selector = selector;\n\t\t\ti386_load_segment_descriptor(reg );\n\t\t\tif(fault) *fault = false;\n\t\t\treturn;\n\t\t}\n\n\t\tmemset(&desc, 0, sizeof(desc));\n\t\tdesc.selector = selector;\n\t\ti386_load_protected_mode_segment(&desc,NULL);\n\t\tDPL = (desc.flags >> 5) & 0x03;\n\n\t\tif(selector & 0x0004)  // LDT\n\t\t{\n\t\t\tif((selector & ~0x0007) > m_ldtr.limit)\n\t\t\t{\n\t\t\t\tlogerror(\"SReg Load (%08x): Selector is out of LDT bounds.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_GP,selector & ~0x03)\n\t\t\t}\n\t\t}\n\t\telse  // GDT\n\t\t{\n\t\t\tif((selector & ~0x0007) > m_gdtr.limit)\n\t\t\t{\n\t\t\t\tlogerror(\"SReg Load (%08x): Selector is out of GDT bounds.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_GP,selector & ~0x03)\n\t\t\t}\n\t\t}\n\t\tif((desc.flags & 0x0018) != 0x10)\n\t\t{\n\t\t\tif((((desc.flags & 0x0002) != 0) && ((desc.flags & 0x0018) != 0x18)) || !(desc.flags & 0x10))\n\t\t\t{\n\t\t\t\tlogerror(\"SReg Load (%08x): Segment is not a data segment or readable code segment.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_GP,selector & ~0x03)\n\t\t\t}\n\t\t}\n\t\tif(((desc.flags & 0x0018) == 0x10) || ((!(desc.flags & 0x0004)) && ((desc.flags & 0x0018) == 0x18)))\n\t\t{\n\t\t\t// if data or non-conforming code segment\n\t\t\tif((RPL > DPL) || (CPL > DPL))\n\t\t\t{\n\t\t\t\tlogerror(\"SReg Load (%08x): Selector RPL or CPL is not less or equal to segment DPL.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_GP,selector & ~0x03)\n\t\t\t}\n\t\t}\n\t\tif(!(desc.flags & 0x0080))\n\t\t{\n\t\t\tlogerror(\"SReg Load (%08x): Segment is not present.\\n\",m_pc);\n\t\t\tFAULT(FAULT_NP,selector & ~0x03)\n\t\t}\n\t}\n\n\tm_sreg[reg].selector = selector;\n\ti386_load_segment_descriptor(reg );\n\tif(fault) *fault = false;\n}\n\nstatic void i386_trap(int irq, int irq_gate, int trap_level)\n{\n\t/*  I386 Interrupts/Traps/Faults:\n\t *\n\t *  0x00    Divide by zero\n\t *  0x01    Debug exception\n\t *  0x02    NMI\n\t *  0x03    Int3\n\t *  0x04    Overflow\n\t *  0x05    Array bounds check\n\t *  0x06    Illegal Opcode\n\t *  0x07    FPU not available\n\t *  0x08    Double fault\n\t *  0x09    Coprocessor segment overrun\n\t *  0x0a    Invalid task state\n\t *  0x0b    Segment not present\n\t *  0x0c    Stack exception\n\t *  0x0d    General Protection Fault\n\t *  0x0e    Page fault\n\t *  0x0f    Reserved\n\t *  0x10    Coprocessor error\n\t */\n\tUINT32 v1, v2;\n\tUINT32 offset, oldflags = get_flags();\n\tUINT16 segment;\n\tint entry = irq * (PROTECTED_MODE ? 8 : 4);\n\tint SetRPL = 0;\n\tm_lock = false;\n\n\tif( !(PROTECTED_MODE) )\n\t{\n\t\t/* 16-bit */\n\t\tPUSH16(oldflags & 0xffff );\n\t\tPUSH16(m_sreg[CS].selector );\n\t\tif(irq == 3 || irq == 4 || irq == 9 || irq_gate == 1)\n\t\t\tPUSH16(m_eip );\n\t\telse\n\t\t\tPUSH16(m_prev_eip );\n\n\t\tm_sreg[CS].selector = READ16(m_idtr.base + entry + 2 );\n\t\tm_eip = READ16(m_idtr.base + entry );\n\n\t\tm_TF = 0;\n\t\tm_IF = 0;\n\t}\n\telse\n\t{\n\t\tint type;\n\t\tUINT16 flags;\n\t\tI386_SREG desc;\n\t\tUINT8 CPL = m_CPL, DPL = 0; //, RPL = 0;\n\n\t\t/* 32-bit */\n\t\tv1 = READ32PL0(m_idtr.base + entry );\n\t\tv2 = READ32PL0(m_idtr.base + entry + 4 );\n\t\toffset = (v2 & 0xffff0000) | (v1 & 0xffff);\n\t\tsegment = (v1 >> 16) & 0xffff;\n\t\ttype = (v2>>8) & 0x1F;\n\t\tflags = (v2>>8) & 0xf0ff;\n\n\t\tif(trap_level == 2)\n\t\t{\n\t\t\tlogerror(\"IRQ: Double fault.\\n\");\n\t\t\tFAULT_EXP(FAULT_DF,0);\n\t\t}\n\t\tif(trap_level >= 3)\n\t\t{\n\t\t\tlogerror(\"IRQ: Triple fault. CPU reset.\\n\");\n\t\t\tCPU_RESET_CALL(CPU_MODEL);\n\t\t\treturn;\n\t\t}\n\n\t\t/* segment privilege checks */\n\t\tif(entry >= m_idtr.limit)\n\t\t{\n\t\t\tlogerror(\"IRQ (%08x): Vector %02xh is past IDT limit.\\n\",m_pc,entry);\n\t\t\tFAULT_EXP(FAULT_GP,entry+2)\n\t\t}\n\t\t/* segment must be interrupt gate, trap gate, or task gate */\n\t\tif(type != 0x05 && type != 0x06 && type != 0x07 && type != 0x0e && type != 0x0f)\n\t\t{\n\t\t\tlogerror(\"IRQ#%02x (%08x): Vector segment %04x is not an interrupt, trap or task gate.\\n\",irq,m_pc,segment);\n\t\t\tFAULT_EXP(FAULT_GP,entry+2)\n\t\t}\n\n\t\tif(m_ext == 0) // if software interrupt (caused by INT/INTO/INT3)\n\t\t{\n\t\t\tif(((flags >> 5) & 0x03) < CPL)\n\t\t\t{\n\t\t\t\tlogerror(\"IRQ (%08x): Software IRQ - gate DPL is less than CPL.\\n\",m_pc);\n\t\t\t\tFAULT_EXP(FAULT_GP,entry+2)\n\t\t\t}\n\t\t\tif(V8086_MODE)\n\t\t\t{\n\t\t\t\tif((!m_IOP1 || !m_IOP2) && (m_opcode != 0xcc))\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRQ (%08x): Is in Virtual 8086 mode and IOPL != 3.\\n\",m_pc);\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\tif((flags & 0x0080) == 0)\n\t\t{\n\t\t\tlogerror(\"IRQ: Vector segment is not present.\\n\");\n\t\t\tFAULT_EXP(FAULT_NP,entry+2)\n\t\t}\n\n\t\tif(type == 0x05)\n\t\t{\n\t\t\t/* Task gate */\n\t\t\tmemset(&desc, 0, sizeof(desc));\n\t\t\tdesc.selector = segment;\n\t\t\ti386_load_protected_mode_segment(&desc,NULL);\n\t\t\tif(segment & 0x04)\n\t\t\t{\n\t\t\t\tlogerror(\"IRQ: Task gate: TSS is not in the GDT.\\n\");\n\t\t\t\tFAULT_EXP(FAULT_TS,segment & ~0x03);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif(segment > m_gdtr.limit)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRQ: Task gate: TSS is past GDT limit.\\n\");\n\t\t\t\t\tFAULT_EXP(FAULT_TS,segment & ~0x03);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif((desc.flags & 0x000f) != 0x09 && (desc.flags & 0x000f) != 0x01)\n\t\t\t{\n\t\t\t\tlogerror(\"IRQ: Task gate: TSS is not an available TSS.\\n\");\n\t\t\t\tFAULT_EXP(FAULT_TS,segment & ~0x03);\n\t\t\t}\n\t\t\tif((desc.flags & 0x0080) == 0)\n\t\t\t{\n\t\t\t\tlogerror(\"IRQ: Task gate: TSS is not present.\\n\");\n\t\t\t\tFAULT_EXP(FAULT_NP,segment & ~0x03);\n\t\t\t}\n\t\t\tif(!(irq == 3 || irq == 4 || irq == 9 || irq_gate == 1))\n\t\t\t\tm_eip = m_prev_eip;\n\t\t\tif(desc.flags & 0x08)\n\t\t\t\ti386_task_switch(desc.selector,1);\n\t\t\telse\n\t\t\t\ti286_task_switch(desc.selector,1);\n\t\t\treturn;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* Interrupt or Trap gate */\n\t\t\tmemset(&desc, 0, sizeof(desc));\n\t\t\tdesc.selector = segment;\n\t\t\ti386_load_protected_mode_segment(&desc,NULL);\n\t\t\tCPL = m_CPL;  // current privilege level\n\t\t\tDPL = (desc.flags >> 5) & 0x03;  // descriptor privilege level\n//          RPL = segment & 0x03;  // requested privilege level\n\n\t\t\tif((segment & ~0x03) == 0)\n\t\t\t{\n\t\t\t\tlogerror(\"IRQ: Gate segment is null.\\n\");\n\t\t\t\tFAULT_EXP(FAULT_GP,m_ext)\n\t\t\t}\n\t\t\tif(segment & 0x04)\n\t\t\t{\n\t\t\t\tif((segment & ~0x07) > m_ldtr.limit)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRQ: Gate segment is past LDT limit.\\n\");\n\t\t\t\t\tFAULT_EXP(FAULT_GP,(segment & 0x03)+m_ext)\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif((segment & ~0x07) > m_gdtr.limit)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRQ: Gate segment is past GDT limit.\\n\");\n\t\t\t\t\tFAULT_EXP(FAULT_GP,(segment & 0x03)+m_ext)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif((desc.flags & 0x0018) != 0x18)\n\t\t\t{\n\t\t\t\tlogerror(\"IRQ: Gate descriptor is not a code segment.\\n\");\n\t\t\t\tFAULT_EXP(FAULT_GP,(segment & 0x03)+m_ext)\n\t\t\t}\n\t\t\tif((desc.flags & 0x0080) == 0)\n\t\t\t{\n\t\t\t\tlogerror(\"IRQ: Gate segment is not present.\\n\");\n\t\t\t\tFAULT_EXP(FAULT_NP,(segment & 0x03)+m_ext)\n\t\t\t}\n\t\t\tif((desc.flags & 0x0004) == 0 && (DPL < CPL))\n\t\t\t{\n\t\t\t\t/* IRQ to inner privilege */\n\t\t\t\tI386_SREG stack;\n\t\t\t\tUINT32 newESP,oldSS,oldESP;\n\n\t\t\t\tif(V8086_MODE && DPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRQ: Gate to CPL>0 from VM86 mode.\\n\");\n\t\t\t\t\tFAULT_EXP(FAULT_GP,segment & ~0x03);\n\t\t\t\t}\n\t\t\t\t/* Check new stack segment in TSS */\n\t\t\t\tmemset(&stack, 0, sizeof(stack));\n\t\t\t\tstack.selector = i386_get_stack_segment(DPL);\n\t\t\t\ti386_load_protected_mode_segment(&stack,NULL);\n\t\t\t\toldSS = m_sreg[SS].selector;\n\t\t\t\tif(flags & 0x0008)\n\t\t\t\t\toldESP = REG32(ESP);\n\t\t\t\telse\n\t\t\t\t\toldESP = REG16(SP);\n\t\t\t\tif((stack.selector & ~0x03) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRQ: New stack selector is null.\\n\");\n\t\t\t\t\tFAULT_EXP(FAULT_GP,m_ext)\n\t\t\t\t}\n\t\t\t\tif(stack.selector & 0x04)\n\t\t\t\t{\n\t\t\t\t\tif((stack.selector & ~0x07) > m_ldtr.base)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRQ: New stack selector is past LDT limit.\\n\");\n\t\t\t\t\t\tFAULT_EXP(FAULT_TS,(stack.selector & ~0x03)+m_ext)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif((stack.selector & ~0x07) > m_gdtr.base)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRQ: New stack selector is past GDT limit.\\n\");\n\t\t\t\t\t\tFAULT_EXP(FAULT_TS,(stack.selector & ~0x03)+m_ext)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif((stack.selector & 0x03) != DPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRQ: New stack selector RPL is not equal to code segment DPL.\\n\");\n\t\t\t\t\tFAULT_EXP(FAULT_TS,(stack.selector & ~0x03)+m_ext)\n\t\t\t\t}\n\t\t\t\tif(((stack.flags >> 5) & 0x03) != DPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRQ: New stack segment DPL is not equal to code segment DPL.\\n\");\n\t\t\t\t\tFAULT_EXP(FAULT_TS,(stack.selector & ~0x03)+m_ext)\n\t\t\t\t}\n\t\t\t\tif(((stack.flags & 0x0018) != 0x10) && (stack.flags & 0x0002) != 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRQ: New stack segment is not a writable data segment.\\n\");\n\t\t\t\t\tFAULT_EXP(FAULT_TS,(stack.selector & ~0x03)+m_ext) // #TS(stack selector + EXT)\n\t\t\t\t}\n\t\t\t\tif((stack.flags & 0x0080) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRQ: New stack segment is not present.\\n\");\n\t\t\t\t\tFAULT_EXP(FAULT_SS,(stack.selector & ~0x03)+m_ext) // #TS(stack selector + EXT)\n\t\t\t\t}\n\t\t\t\tnewESP = i386_get_stack_ptr(DPL);\n\t\t\t\tif(type & 0x08) // 32-bit gate\n\t\t\t\t{\n\t\t\t\t\tif(((newESP < (V8086_MODE?36:20)) && !(stack.flags & 0x4)) || ((~stack.limit < (~(newESP - 1) + (V8086_MODE?36:20))) && (stack.flags & 0x4)))\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRQ: New stack has no space for return addresses.\\n\");\n\t\t\t\t\t\tFAULT_EXP(FAULT_SS,0)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse // 16-bit gate\n\t\t\t\t{\n\t\t\t\t\tnewESP &= 0xffff;\n\t\t\t\t\tif(((newESP < (V8086_MODE?18:10)) && !(stack.flags & 0x4)) || ((~stack.limit < (~(newESP - 1) + (V8086_MODE?18:10))) && (stack.flags & 0x4)))\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRQ: New stack has no space for return addresses.\\n\");\n\t\t\t\t\t\tFAULT_EXP(FAULT_SS,0)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(offset > desc.limit)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRQ: New EIP is past code segment limit.\\n\");\n\t\t\t\t\tFAULT_EXP(FAULT_GP,0)\n\t\t\t\t}\n\t\t\t\t/* change CPL before accessing the stack */\n\t\t\t\tm_CPL = DPL;\n\t\t\t\t/* check for page fault at new stack TODO: check if stack frame crosses page boundary */\n\t\t\t\tWRITE_TEST(stack.base+newESP-1);\n\t\t\t\t/* Load new stack segment descriptor */\n\t\t\t\tm_sreg[SS].selector = stack.selector;\n\t\t\t\ti386_load_protected_mode_segment(&m_sreg[SS],NULL);\n\t\t\t\ti386_set_descriptor_accessed(stack.selector);\n\t\t\t\tREG32(ESP) = newESP;\n\t\t\t\tif(V8086_MODE)\n\t\t\t\t{\n\t\t\t\t\t//logerror(\"IRQ (%08x): Interrupt during V8086 task\\n\",m_pc);\n\t\t\t\t\tif(type & 0x08)\n\t\t\t\t\t{\n\t\t\t\t\t\tPUSH32(m_sreg[GS].selector & 0xffff);\n\t\t\t\t\t\tPUSH32(m_sreg[FS].selector & 0xffff);\n\t\t\t\t\t\tPUSH32(m_sreg[DS].selector & 0xffff);\n\t\t\t\t\t\tPUSH32(m_sreg[ES].selector & 0xffff);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tPUSH16(m_sreg[GS].selector);\n\t\t\t\t\t\tPUSH16(m_sreg[FS].selector);\n\t\t\t\t\t\tPUSH16(m_sreg[DS].selector);\n\t\t\t\t\t\tPUSH16(m_sreg[ES].selector);\n\t\t\t\t\t}\n\t\t\t\t\tm_sreg[GS].selector = 0;\n\t\t\t\t\tm_sreg[FS].selector = 0;\n\t\t\t\t\tm_sreg[DS].selector = 0;\n\t\t\t\t\tm_sreg[ES].selector = 0;\n\t\t\t\t\tm_VM = 0;\n\t\t\t\t\ti386_load_segment_descriptor(GS);\n\t\t\t\t\ti386_load_segment_descriptor(FS);\n\t\t\t\t\ti386_load_segment_descriptor(DS);\n\t\t\t\t\ti386_load_segment_descriptor(ES);\n\t\t\t\t}\n\t\t\t\tif(type & 0x08)\n\t\t\t\t{\n\t\t\t\t\t// 32-bit gate\n\t\t\t\t\tPUSH32(oldSS);\n\t\t\t\t\tPUSH32(oldESP);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// 16-bit gate\n\t\t\t\t\tPUSH16(oldSS);\n\t\t\t\t\tPUSH16(oldESP);\n\t\t\t\t}\n\t\t\t\tSetRPL = 1;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tint stack_limit;\n\t\t\t\tif((desc.flags & 0x0004) || (DPL == CPL))\n\t\t\t\t{\n\t\t\t\t\t/* IRQ to same privilege */\n\t\t\t\t\tif(V8086_MODE && !m_ext)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRQ: Gate to same privilege from VM86 mode.\\n\");\n\t\t\t\t\t\tFAULT_EXP(FAULT_GP,segment & ~0x03);\n\t\t\t\t\t}\n\t\t\t\t\tif(type == 0x0e || type == 0x0f)  // 32-bit gate\n\t\t\t\t\t\tstack_limit = 10;\n\t\t\t\t\telse\n\t\t\t\t\t\tstack_limit = 6;\n\t\t\t\t\t// TODO: Add check for error code (2 extra bytes)\n\t\t\t\t\tif(REG32(ESP) < stack_limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRQ: Stack has no space left (needs %i bytes).\\n\",stack_limit);\n\t\t\t\t\t\tFAULT_EXP(FAULT_SS,0)\n\t\t\t\t\t}\n\t\t\t\t\tif(offset > desc.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRQ: Gate segment offset is past segment limit.\\n\");\n\t\t\t\t\t\tFAULT_EXP(FAULT_GP,0)\n\t\t\t\t\t}\n\t\t\t\t\tSetRPL = 1;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRQ: Gate descriptor is non-conforming, and DPL does not equal CPL.\\n\");\n\t\t\t\t\tFAULT_EXP(FAULT_GP,segment)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tUINT32 tempSP = REG32(ESP);\n\t\ttry\n\t\t{\n\t\t\t// this is ugly but the alternative is worse\n\t\t\tif(type != 0x0e && type != 0x0f)  // if not 386 interrupt or trap gate\n\t\t\t{\n\t\t\t\tPUSH16(oldflags & 0xffff );\n\t\t\t\tPUSH16(m_sreg[CS].selector );\n\t\t\t\tif(irq == 3 || irq == 4 || irq == 9 || irq_gate == 1)\n\t\t\t\t\tPUSH16(m_eip );\n\t\t\t\telse\n\t\t\t\t\tPUSH16(m_prev_eip );\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tPUSH32(oldflags & 0x00ffffff );\n\t\t\t\tPUSH32(m_sreg[CS].selector );\n\t\t\t\tif(irq == 3 || irq == 4 || irq == 9 || irq_gate == 1)\n\t\t\t\t\tPUSH32(m_eip );\n\t\t\t\telse\n\t\t\t\t\tPUSH32(m_prev_eip );\n\t\t\t}\n\t\t}\n\t\tcatch(UINT64 e)\n\t\t{\n\t\t\tREG32(ESP) = tempSP;\n\t\t\tthrow e;\n\t\t}\n\t\tif(SetRPL != 0)\n\t\t\tsegment = (segment & ~0x03) | m_CPL;\n\t\tm_sreg[CS].selector = segment;\n\t\tm_eip = offset;\n\n\t\tif(type == 0x0e || type == 0x06)\n\t\t\tm_IF = 0;\n\t\tm_TF = 0;\n\t\tm_NT = 0;\n\t}\n\n\ti386_load_segment_descriptor(CS);\n\tCHANGE_PC(m_eip);\n\n}\n\nstatic void i386_trap_with_error(int irq, int irq_gate, int trap_level, UINT32 error)\n{\n\ti386_trap(irq,irq_gate,trap_level);\n\tif(irq == 8 || irq == 10 || irq == 11 || irq == 12 || irq == 13 || irq == 14)\n\t{\n\t\t// for these exceptions, an error code is pushed onto the stack by the processor.\n\t\t// no error code is pushed for software interrupts, either.\n\t\tif(PROTECTED_MODE)\n\t\t{\n\t\t\tUINT32 entry = irq * 8;\n\t\t\tUINT32 v2,type;\n\t\t\tv2 = READ32PL0(m_idtr.base + entry + 4 );\n\t\t\ttype = (v2>>8) & 0x1F;\n\t\t\tif(type == 5)\n\t\t\t{\n\t\t\t\tv2 = READ32PL0(m_idtr.base + entry);\n\t\t\t\tv2 = READ32PL0(m_gdtr.base + ((v2 >> 16) & 0xfff8) + 4);\n\t\t\t\ttype = (v2>>8) & 0x1F;\n\t\t\t}\n\t\t\tif(type >= 9)\n\t\t\t\tPUSH32(error);\n\t\t\telse\n\t\t\t\tPUSH16(error);\n\t\t}\n\t\telse\n\t\t\tPUSH16(error);\n\t}\n}\n\n\nstatic void i286_task_switch(UINT16 selector, UINT8 nested)\n{\n\tUINT32 tss;\n\tI386_SREG seg;\n\tUINT16 old_task;\n\tUINT8 ar_byte;  // access rights byte\n\n\t/* TODO: Task State Segment privilege checks */\n\n\t/* For tasks that aren't nested, clear the busy bit in the task's descriptor */\n\tif(nested == 0)\n\t{\n\t\tif(m_task.segment & 0x0004)\n\t\t{\n\t\t\tar_byte = READ8(m_ldtr.base + (m_task.segment & ~0x0007) + 5);\n\t\t\tWRITE8(m_ldtr.base + (m_task.segment & ~0x0007) + 5,ar_byte & ~0x02);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tar_byte = READ8(m_gdtr.base + (m_task.segment & ~0x0007) + 5);\n\t\t\tWRITE8(m_gdtr.base + (m_task.segment & ~0x0007) + 5,ar_byte & ~0x02);\n\t\t}\n\t}\n\n\t/* Save the state of the current task in the current TSS (TR register base) */\n\ttss = m_task.base;\n\tWRITE16(tss+0x0e,m_eip & 0x0000ffff);\n\tWRITE16(tss+0x10,get_flags() & 0x0000ffff);\n\tWRITE16(tss+0x12,REG16(AX));\n\tWRITE16(tss+0x14,REG16(CX));\n\tWRITE16(tss+0x16,REG16(DX));\n\tWRITE16(tss+0x18,REG16(BX));\n\tWRITE16(tss+0x1a,REG16(SP));\n\tWRITE16(tss+0x1c,REG16(BP));\n\tWRITE16(tss+0x1e,REG16(SI));\n\tWRITE16(tss+0x20,REG16(DI));\n\tWRITE16(tss+0x22,m_sreg[ES].selector);\n\tWRITE16(tss+0x24,m_sreg[CS].selector);\n\tWRITE16(tss+0x26,m_sreg[SS].selector);\n\tWRITE16(tss+0x28,m_sreg[DS].selector);\n\n\told_task = m_task.segment;\n\n\t/* Load task register with the selector of the incoming task */\n\tm_task.segment = selector;\n\tmemset(&seg, 0, sizeof(seg));\n\tseg.selector = m_task.segment;\n\ti386_load_protected_mode_segment(&seg,NULL);\n\tm_task.limit = seg.limit;\n\tm_task.base = seg.base;\n\tm_task.flags = seg.flags;\n\n\t/* Set TS bit in CR0 */\n\tm_cr[0] |= 0x08;\n\n\t/* Load incoming task state from the new task's TSS */\n\ttss = m_task.base;\n\tm_ldtr.segment = READ16(tss+0x2a) & 0xffff;\n\tseg.selector = m_ldtr.segment;\n\ti386_load_protected_mode_segment(&seg,NULL);\n\tm_ldtr.limit = seg.limit;\n\tm_ldtr.base = seg.base;\n\tm_ldtr.flags = seg.flags;\n\tm_eip = READ16(tss+0x0e);\n\tset_flags(READ16(tss+0x10));\n\tREG16(AX) = READ16(tss+0x12);\n\tREG16(CX) = READ16(tss+0x14);\n\tREG16(DX) = READ16(tss+0x16);\n\tREG16(BX) = READ16(tss+0x18);\n\tREG16(SP) = READ16(tss+0x1a);\n\tREG16(BP) = READ16(tss+0x1c);\n\tREG16(SI) = READ16(tss+0x1e);\n\tREG16(DI) = READ16(tss+0x20);\n\tm_sreg[ES].selector = READ16(tss+0x22) & 0xffff;\n\ti386_load_segment_descriptor(ES);\n\tm_sreg[CS].selector = READ16(tss+0x24) & 0xffff;\n\ti386_load_segment_descriptor(CS);\n\tm_sreg[SS].selector = READ16(tss+0x26) & 0xffff;\n\ti386_load_segment_descriptor(SS);\n\tm_sreg[DS].selector = READ16(tss+0x28) & 0xffff;\n\ti386_load_segment_descriptor(DS);\n\n\t/* Set the busy bit in the new task's descriptor */\n\tif(selector & 0x0004)\n\t{\n\t\tar_byte = READ8(m_ldtr.base + (selector & ~0x0007) + 5);\n\t\tWRITE8(m_ldtr.base + (selector & ~0x0007) + 5,ar_byte | 0x02);\n\t}\n\telse\n\t{\n\t\tar_byte = READ8(m_gdtr.base + (selector & ~0x0007) + 5);\n\t\tWRITE8(m_gdtr.base + (selector & ~0x0007) + 5,ar_byte | 0x02);\n\t}\n\n\t/* For nested tasks, we write the outgoing task's selector to the back-link field of the new TSS,\n\t   and set the NT flag in the EFLAGS register */\n\tif(nested != 0)\n\t{\n\t\tWRITE16(tss+0,old_task);\n\t\tm_NT = 1;\n\t}\n\tCHANGE_PC(m_eip);\n\n\tm_CPL = (m_sreg[SS].flags >> 5) & 3;\n//  printf(\"286 Task Switch from selector %04x to %04x\\n\",old_task,selector);\n}\n\nstatic void i386_task_switch(UINT16 selector, UINT8 nested)\n{\n\tUINT32 tss;\n\tI386_SREG seg;\n\tUINT16 old_task;\n\tUINT8 ar_byte;  // access rights byte\n\tUINT32 oldcr3 = m_cr[3];\n\n\t/* TODO: Task State Segment privilege checks */\n\n\t/* For tasks that aren't nested, clear the busy bit in the task's descriptor */\n\tif(nested == 0)\n\t{\n\t\tif(m_task.segment & 0x0004)\n\t\t{\n\t\t\tar_byte = READ8(m_ldtr.base + (m_task.segment & ~0x0007) + 5);\n\t\t\tWRITE8(m_ldtr.base + (m_task.segment & ~0x0007) + 5,ar_byte & ~0x02);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tar_byte = READ8(m_gdtr.base + (m_task.segment & ~0x0007) + 5);\n\t\t\tWRITE8(m_gdtr.base + (m_task.segment & ~0x0007) + 5,ar_byte & ~0x02);\n\t\t}\n\t}\n\n\t/* Save the state of the current task in the current TSS (TR register base) */\n\ttss = m_task.base;\n\tWRITE32(tss+0x1c,m_cr[3]);  // correct?\n\tWRITE32(tss+0x20,m_eip);\n\tWRITE32(tss+0x24,get_flags());\n\tWRITE32(tss+0x28,REG32(EAX));\n\tWRITE32(tss+0x2c,REG32(ECX));\n\tWRITE32(tss+0x30,REG32(EDX));\n\tWRITE32(tss+0x34,REG32(EBX));\n\tWRITE32(tss+0x38,REG32(ESP));\n\tWRITE32(tss+0x3c,REG32(EBP));\n\tWRITE32(tss+0x40,REG32(ESI));\n\tWRITE32(tss+0x44,REG32(EDI));\n\tWRITE32(tss+0x48,m_sreg[ES].selector);\n\tWRITE32(tss+0x4c,m_sreg[CS].selector);\n\tWRITE32(tss+0x50,m_sreg[SS].selector);\n\tWRITE32(tss+0x54,m_sreg[DS].selector);\n\tWRITE32(tss+0x58,m_sreg[FS].selector);\n\tWRITE32(tss+0x5c,m_sreg[GS].selector);\n\n\told_task = m_task.segment;\n\n\t/* Load task register with the selector of the incoming task */\n\tm_task.segment = selector;\n\tmemset(&seg, 0, sizeof(seg));\n\tseg.selector = m_task.segment;\n\ti386_load_protected_mode_segment(&seg,NULL);\n\tm_task.limit = seg.limit;\n\tm_task.base = seg.base;\n\tm_task.flags = seg.flags;\n\n\t/* Set TS bit in CR0 */\n\tm_cr[0] |= 0x08;\n\n\t/* Load incoming task state from the new task's TSS */\n\ttss = m_task.base;\n\tm_ldtr.segment = READ32(tss+0x60) & 0xffff;\n\tseg.selector = m_ldtr.segment;\n\ti386_load_protected_mode_segment(&seg,NULL);\n\tm_ldtr.limit = seg.limit;\n\tm_ldtr.base = seg.base;\n\tm_ldtr.flags = seg.flags;\n\tm_eip = READ32(tss+0x20);\n\tset_flags(READ32(tss+0x24));\n\tREG32(EAX) = READ32(tss+0x28);\n\tREG32(ECX) = READ32(tss+0x2c);\n\tREG32(EDX) = READ32(tss+0x30);\n\tREG32(EBX) = READ32(tss+0x34);\n\tREG32(ESP) = READ32(tss+0x38);\n\tREG32(EBP) = READ32(tss+0x3c);\n\tREG32(ESI) = READ32(tss+0x40);\n\tREG32(EDI) = READ32(tss+0x44);\n\tm_sreg[ES].selector = READ32(tss+0x48) & 0xffff;\n\ti386_load_segment_descriptor(ES);\n\tm_sreg[CS].selector = READ32(tss+0x4c) & 0xffff;\n\ti386_load_segment_descriptor(CS);\n\tm_sreg[SS].selector = READ32(tss+0x50) & 0xffff;\n\ti386_load_segment_descriptor(SS);\n\tm_sreg[DS].selector = READ32(tss+0x54) & 0xffff;\n\ti386_load_segment_descriptor(DS);\n\tm_sreg[FS].selector = READ32(tss+0x58) & 0xffff;\n\ti386_load_segment_descriptor(FS);\n\tm_sreg[GS].selector = READ32(tss+0x5c) & 0xffff;\n\ti386_load_segment_descriptor(GS);\n\t/* For nested tasks, we write the outgoing task's selector to the back-link field of the new TSS,\n\t   and set the NT flag in the EFLAGS register before setting cr3 as the old tss address might be gone */\n\tif(nested != 0)\n\t{\n\t\tWRITE32(tss+0,old_task);\n\t\tm_NT = 1;\n\t}\n\tm_cr[3] = READ32(tss+0x1c);  // CR3 (PDBR)\n\tif(oldcr3 != m_cr[3])\n\t\tvtlb_flush_dynamic(m_vtlb);\n\n\t/* Set the busy bit in the new task's descriptor */\n\tif(selector & 0x0004)\n\t{\n\t\tar_byte = READ8(m_ldtr.base + (selector & ~0x0007) + 5);\n\t\tWRITE8(m_ldtr.base + (selector & ~0x0007) + 5,ar_byte | 0x02);\n\t}\n\telse\n\t{\n\t\tar_byte = READ8(m_gdtr.base + (selector & ~0x0007) + 5);\n\t\tWRITE8(m_gdtr.base + (selector & ~0x0007) + 5,ar_byte | 0x02);\n\t}\n\n\tCHANGE_PC(m_eip);\n\n\tm_CPL = (m_sreg[SS].flags >> 5) & 3;\n//  printf(\"386 Task Switch from selector %04x to %04x\\n\",old_task,selector);\n}\n\nstatic void i386_check_irq_line()\n{\n\tif(!m_smm && m_smi)\n\t{\n\t\tpentium_smi();\n\t\treturn;\n\t}\n\n\t/* Check if the interrupts are enabled */\n\tif ( (m_irq_state) && m_IF )\n\t{\n#ifdef SUPPORT_RDTSC\n\t\tm_cycles -= 2;\n#endif\n\t\ti386_trap(pic_ack(), 1, 0);\n\t\tm_irq_state = CLEAR_LINE;\n\t}\n}\n\nstatic void i386_protected_mode_jump(UINT16 seg, UINT32 off, int indirect, int operand32)\n{\n\tI386_SREG desc;\n\tI386_CALL_GATE call_gate;\n\tUINT8 CPL,DPL,RPL;\n\tUINT8 SetRPL = 0;\n\tUINT16 segment = seg;\n\tUINT32 offset = off;\n\n\t/* Check selector is not null */\n\tif((segment & ~0x03) == 0)\n\t{\n\t\tlogerror(\"JMP: Segment is null.\\n\");\n\t\tFAULT(FAULT_GP,0)\n\t}\n\t/* Selector is within descriptor table limit */\n\tif((segment & 0x04) == 0)\n\t{\n\t\t/* check GDT limit */\n\t\tif((segment & ~0x07) > (m_gdtr.limit))\n\t\t{\n\t\t\tlogerror(\"JMP: Segment is past GDT limit.\\n\");\n\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t}\n\t}\n\telse\n\t{\n\t\t/* check LDT limit */\n\t\tif((segment & ~0x07) > (m_ldtr.limit))\n\t\t{\n\t\t\tlogerror(\"JMP: Segment is past LDT limit.\\n\");\n\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t}\n\t}\n\t/* Determine segment type */\n\tmemset(&desc, 0, sizeof(desc));\n\tdesc.selector = segment;\n\ti386_load_protected_mode_segment(&desc,NULL);\n\tCPL = m_CPL;  // current privilege level\n\tDPL = (desc.flags >> 5) & 0x03;  // descriptor privilege level\n\tRPL = segment & 0x03;  // requested privilege level\n\tif((desc.flags & 0x0018) == 0x0018)\n\t{\n\t\t/* code segment */\n\t\tif((desc.flags & 0x0004) == 0)\n\t\t{\n\t\t\t/* non-conforming */\n\t\t\tif(RPL > CPL)\n\t\t\t{\n\t\t\t\tlogerror(\"JMP: RPL %i is less than CPL %i\\n\",RPL,CPL);\n\t\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t\t}\n\t\t\tif(DPL != CPL)\n\t\t\t{\n\t\t\t\tlogerror(\"JMP: DPL %i is not equal CPL %i\\n\",DPL,CPL);\n\t\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* conforming */\n\t\t\tif(DPL > CPL)\n\t\t\t{\n\t\t\t\tlogerror(\"JMP: DPL %i is less than CPL %i\\n\",DPL,CPL);\n\t\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t\t}\n\t\t}\n\t\tSetRPL = 1;\n\t\tif((desc.flags & 0x0080) == 0)\n\t\t{\n\t\t\tlogerror(\"JMP: Segment is not present\\n\");\n\t\t\tFAULT(FAULT_NP,segment & 0xfffc)\n\t\t}\n\t\tif(offset > desc.limit)\n\t\t{\n\t\t\tlogerror(\"JMP: Offset is past segment limit\\n\");\n\t\t\tFAULT(FAULT_GP,0)\n\t\t}\n\t}\n\telse\n\t{\n\t\tif((desc.flags & 0x0010) != 0)\n\t\t{\n\t\t\tlogerror(\"JMP: Segment is a data segment\\n\");\n\t\t\tFAULT(FAULT_GP,segment & 0xfffc)  // #GP (cannot execute code in a data segment)\n\t\t}\n\t\telse\n\t\t{\n\t\t\tswitch(desc.flags & 0x000f)\n\t\t\t{\n\t\t\tcase 0x01:  // 286 Available TSS\n\t\t\tcase 0x09:  // 386 Available TSS\n\t\t\t\tlogerror(\"JMP: Available 386 TSS at %08x\\n\",m_pc);\n\t\t\t\tmemset(&desc, 0, sizeof(desc));\n\t\t\t\tdesc.selector = segment;\n\t\t\t\ti386_load_protected_mode_segment(&desc,NULL);\n\t\t\t\tDPL = (desc.flags >> 5) & 0x03;  // descriptor privilege level\n\t\t\t\tif(DPL < CPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: TSS: DPL %i is less than CPL %i\\n\",DPL,CPL);\n\t\t\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t\t\t}\n\t\t\t\tif(DPL < RPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: TSS: DPL %i is less than TSS RPL %i\\n\",DPL,RPL);\n\t\t\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t\t\t}\n\t\t\t\tif((desc.flags & 0x0080) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: TSS: Segment is not present\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t\t\t}\n\t\t\t\tif(desc.flags & 0x0008)\n\t\t\t\t\ti386_task_switch(desc.selector,0);\n\t\t\t\telse\n\t\t\t\t\ti286_task_switch(desc.selector,0);\n\t\t\t\treturn;\n\t\t\tcase 0x04:  // 286 Call Gate\n\t\t\tcase 0x0c:  // 386 Call Gate\n\t\t\t\t//logerror(\"JMP: Call gate at %08x\\n\",m_pc);\n\t\t\t\tSetRPL = 1;\n\t\t\t\tmemset(&call_gate, 0, sizeof(call_gate));\n\t\t\t\tcall_gate.segment = segment;\n\t\t\t\ti386_load_call_gate(&call_gate);\n\t\t\t\tDPL = call_gate.dpl;\n\t\t\t\tif(DPL < CPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Call Gate: DPL %i is less than CPL %i\\n\",DPL,CPL);\n\t\t\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t\t\t}\n\t\t\t\tif(DPL < RPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Call Gate: DPL %i is less than RPL %i\\n\",DPL,RPL);\n\t\t\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t\t\t}\n\t\t\t\tif((desc.flags & 0x0080) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Call Gate: Segment is not present\\n\");\n\t\t\t\t\tFAULT(FAULT_NP,segment & 0xfffc)\n\t\t\t\t}\n\t\t\t\t/* Now we examine the segment that the call gate refers to */\n\t\t\t\tif(call_gate.selector == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Call Gate: Gate selector is null\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\t}\n\t\t\t\tif(call_gate.selector & 0x04)\n\t\t\t\t{\n\t\t\t\t\tif((call_gate.selector & ~0x07) > m_ldtr.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"JMP: Call Gate: Gate Selector is past LDT segment limit\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,call_gate.selector & 0xfffc)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif((call_gate.selector & ~0x07) > m_gdtr.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"JMP: Call Gate: Gate Selector is past GDT segment limit\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,call_gate.selector & 0xfffc)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdesc.selector = call_gate.selector;\n\t\t\t\ti386_load_protected_mode_segment(&desc,NULL);\n\t\t\t\tDPL = (desc.flags >> 5) & 0x03;\n\t\t\t\tif((desc.flags & 0x0018) != 0x18)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Call Gate: Gate does not point to a code segment\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,call_gate.selector & 0xfffc)\n\t\t\t\t}\n\t\t\t\tif((desc.flags & 0x0004) == 0)\n\t\t\t\t{  // non-conforming\n\t\t\t\t\tif(DPL != CPL)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"JMP: Call Gate: Gate DPL does not equal CPL\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,call_gate.selector & 0xfffc)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{  // conforming\n\t\t\t\t\tif(DPL > CPL)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"JMP: Call Gate: Gate DPL is greater than CPL\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,call_gate.selector & 0xfffc)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif((desc.flags & 0x0080) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Call Gate: Gate Segment is not present\\n\");\n\t\t\t\t\tFAULT(FAULT_NP,call_gate.selector & 0xfffc)\n\t\t\t\t}\n\t\t\t\tif(call_gate.offset > desc.limit)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Call Gate: Gate offset is past Gate segment limit\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,call_gate.selector & 0xfffc)\n\t\t\t\t}\n\t\t\t\tsegment = call_gate.selector;\n\t\t\t\toffset = call_gate.offset;\n\t\t\t\tbreak;\n\t\t\tcase 0x05:  // Task Gate\n\t\t\t\tlogerror(\"JMP: Task gate at %08x\\n\",m_pc);\n\t\t\t\tmemset(&call_gate, 0, sizeof(call_gate));\n\t\t\t\tcall_gate.segment = segment;\n\t\t\t\ti386_load_call_gate(&call_gate);\n\t\t\t\tDPL = call_gate.dpl;\n\t\t\t\tif(DPL < CPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Task Gate: Gate DPL %i is less than CPL %i\\n\",DPL,CPL);\n\t\t\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t\t\t}\n\t\t\t\tif(DPL < RPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Task Gate: Gate DPL %i is less than CPL %i\\n\",DPL,CPL);\n\t\t\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t\t\t}\n\t\t\t\tif(call_gate.present == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Task Gate: Gate is not present.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t\t\t}\n\t\t\t\t/* Check the TSS that the task gate points to */\n\t\t\t\tdesc.selector = call_gate.selector;\n\t\t\t\ti386_load_protected_mode_segment(&desc,NULL);\n\t\t\t\tDPL = (desc.flags >> 5) & 0x03;  // descriptor privilege level\n\t\t\t\tRPL = call_gate.selector & 0x03;  // requested privilege level\n\t\t\t\tif(call_gate.selector & 0x04)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Task Gate TSS: TSS must be global.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,call_gate.selector & 0xfffc)\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif((call_gate.selector & ~0x07) > m_gdtr.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"JMP: Task Gate TSS: TSS is past GDT limit.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,call_gate.selector & 0xfffc)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif((call_gate.ar & 0x000f) == 0x0009 || (call_gate.ar & 0x000f) == 0x0001)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Task Gate TSS: Segment is not an available TSS.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,call_gate.selector & 0xfffc)\n\t\t\t\t}\n\t\t\t\tif(call_gate.present == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"JMP: Task Gate TSS: TSS is not present.\\n\");\n\t\t\t\t\tFAULT(FAULT_NP,call_gate.selector & 0xfffc)\n\t\t\t\t}\n\t\t\t\tif(call_gate.ar & 0x08)\n\t\t\t\t\ti386_task_switch(call_gate.selector,0);\n\t\t\t\telse\n\t\t\t\t\ti286_task_switch(call_gate.selector,0);\n\t\t\t\treturn;\n\t\t\tdefault:  // invalid segment type\n\t\t\t\tlogerror(\"JMP: Invalid segment type (%i) to jump to.\\n\",desc.flags & 0x000f);\n\t\t\t\tFAULT(FAULT_GP,segment & 0xfffc)\n\t\t\t}\n\t\t}\n\t}\n\n\tif(SetRPL != 0)\n\t\tsegment = (segment & ~0x03) | m_CPL;\n\tif(operand32 == 0)\n\t\tm_eip = offset & 0x0000ffff;\n\telse\n\t\tm_eip = offset;\n\tm_sreg[CS].selector = segment;\n\tm_performed_intersegment_jump = 1;\n\ti386_load_segment_descriptor(CS);\n\tCHANGE_PC(m_eip);\n}\n\nstatic void i386_protected_mode_call(UINT16 seg, UINT32 off, int indirect, int operand32)\n{\n\tI386_SREG desc;\n\tI386_CALL_GATE gate;\n\tUINT8 SetRPL = 0;\n\tUINT8 CPL, DPL, RPL;\n\tUINT16 selector = seg;\n\tUINT32 offset = off;\n\tint x;\n\n\tif((selector & ~0x03) == 0)\n\t{\n\t\tlogerror(\"CALL (%08x): Selector is null.\\n\",m_pc);\n\t\tFAULT(FAULT_GP,0)  // #GP(0)\n\t}\n\tif(selector & 0x04)\n\t{\n\t\tif((selector & ~0x07) > m_ldtr.limit)\n\t\t{\n\t\t\tlogerror(\"CALL: Selector is past LDT limit.\\n\");\n\t\t\tFAULT(FAULT_GP,selector & ~0x03)  // #GP(selector)\n\t\t}\n\t}\n\telse\n\t{\n\t\tif((selector & ~0x07) > m_gdtr.limit)\n\t\t{\n\t\t\tlogerror(\"CALL: Selector is past GDT limit.\\n\");\n\t\t\tFAULT(FAULT_GP,selector & ~0x03)  // #GP(selector)\n\t\t}\n\t}\n\n\t/* Determine segment type */\n\tmemset(&desc, 0, sizeof(desc));\n\tdesc.selector = selector;\n\ti386_load_protected_mode_segment(&desc,NULL);\n\tCPL = m_CPL;  // current privilege level\n\tDPL = (desc.flags >> 5) & 0x03;  // descriptor privilege level\n\tRPL = selector & 0x03;  // requested privilege level\n\tif((desc.flags & 0x0018) == 0x18)  // is a code segment\n\t{\n\t\tif(desc.flags & 0x0004)\n\t\t{\n\t\t\t/* conforming */\n\t\t\tif(DPL > CPL)\n\t\t\t{\n\t\t\t\tlogerror(\"CALL: Code segment DPL %i is greater than CPL %i\\n\",DPL,CPL);\n\t\t\t\tFAULT(FAULT_GP,selector & ~0x03)  // #GP(selector)\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* non-conforming */\n\t\t\tif(RPL > CPL)\n\t\t\t{\n\t\t\t\tlogerror(\"CALL: RPL %i is greater than CPL %i\\n\",RPL,CPL);\n\t\t\t\tFAULT(FAULT_GP,selector & ~0x03)  // #GP(selector)\n\t\t\t}\n\t\t\tif(DPL != CPL)\n\t\t\t{\n\t\t\t\tlogerror(\"CALL: Code segment DPL %i is not equal to CPL %i\\n\",DPL,CPL);\n\t\t\t\tFAULT(FAULT_GP,selector & ~0x03)  // #GP(selector)\n\t\t\t}\n\t\t}\n\t\tSetRPL = 1;\n\t\tif((desc.flags & 0x0080) == 0)\n\t\t{\n\t\t\tlogerror(\"CALL (%08x): Code segment is not present.\\n\",m_pc);\n\t\t\tFAULT(FAULT_NP,selector & ~0x03)  // #NP(selector)\n\t\t}\n\t\tif (operand32 != 0)  // if 32-bit\n\t\t{\n\t\t\tif(i386_limit_check(SS, REG32(ESP) - 8))\n\t\t\t{\n\t\t\t\tlogerror(\"CALL (%08x): Stack has no room for return address.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_SS,0)  // #SS(0)\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(i386_limit_check(SS, (REG16(SP) - 4) & 0xffff))\n\t\t\t{\n\t\t\t\tlogerror(\"CALL (%08x): Stack has no room for return address.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_SS,0)  // #SS(0)\n\t\t\t}\n\t\t}\n\t\tif(offset > desc.limit)\n\t\t{\n\t\t\tlogerror(\"CALL: EIP is past segment limit.\\n\");\n\t\t\tFAULT(FAULT_GP,0)  // #GP(0)\n\t\t}\n\t}\n\telse\n\t{\n\t\t/* special segment type */\n\t\tif(desc.flags & 0x0010)\n\t\t{\n\t\t\tlogerror(\"CALL: Segment is a data segment.\\n\");\n\t\t\tFAULT(FAULT_GP,desc.selector & ~0x03)  // #GP(selector)\n\t\t}\n\t\telse\n\t\t{\n\t\t\tswitch(desc.flags & 0x000f)\n\t\t\t{\n\t\t\tcase 0x01:  // Available 286 TSS\n\t\t\tcase 0x09:  // Available 386 TSS\n\t\t\t\tlogerror(\"CALL: Available TSS at %08x\\n\",m_pc);\n\t\t\t\tif(DPL < CPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: TSS: DPL is less than CPL.\\n\");\n\t\t\t\t\tFAULT(FAULT_TS,selector & ~0x03) // #TS(selector)\n\t\t\t\t}\n\t\t\t\tif(DPL < RPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: TSS: DPL is less than RPL.\\n\");\n\t\t\t\t\tFAULT(FAULT_TS,selector & ~0x03) // #TS(selector)\n\t\t\t\t}\n\t\t\t\tif(desc.flags & 0x0002)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: TSS: TSS is busy.\\n\");\n\t\t\t\t\tFAULT(FAULT_TS,selector & ~0x03) // #TS(selector)\n\t\t\t\t}\n\t\t\t\tif((desc.flags & 0x0080) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: TSS: Segment %02x is not present.\\n\",selector);\n\t\t\t\t\tFAULT(FAULT_NP,selector & ~0x03) // #NP(selector)\n\t\t\t\t}\n\t\t\t\tif(desc.flags & 0x08)\n\t\t\t\t\ti386_task_switch(desc.selector,1);\n\t\t\t\telse\n\t\t\t\t\ti286_task_switch(desc.selector,1);\n\t\t\t\treturn;\n\t\t\tcase 0x04:  // 286 call gate\n\t\t\tcase 0x0c:  // 386 call gate\n\t\t\t\tif((desc.flags & 0x000f) == 0x04)\n\t\t\t\t\toperand32 = 0;\n\t\t\t\telse\n\t\t\t\t\toperand32 = 1;\n\t\t\t\tmemset(&gate, 0, sizeof(gate));\n\t\t\t\tgate.segment = selector;\n\t\t\t\ti386_load_call_gate(&gate);\n\t\t\t\tDPL = gate.dpl;\n\t\t\t\t//logerror(\"CALL: Call gate at %08x (%i parameters)\\n\",m_pc,gate.dword_count);\n\t\t\t\tif(DPL < CPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: Call gate DPL %i is less than CPL %i.\\n\",DPL,CPL);\n\t\t\t\t\tFAULT(FAULT_GP,desc.selector & ~0x03)  // #GP(selector)\n\t\t\t\t}\n\t\t\t\tif(DPL < RPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: Call gate DPL %i is less than RPL %i.\\n\",DPL,RPL);\n\t\t\t\t\tFAULT(FAULT_GP,desc.selector & ~0x03)  // #GP(selector)\n\t\t\t\t}\n\t\t\t\tif(gate.present == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: Call gate is not present.\\n\");\n\t\t\t\t\tFAULT(FAULT_NP,desc.selector & ~0x03)  // #GP(selector)\n\t\t\t\t}\n\t\t\t\tdesc.selector = gate.selector;\n\t\t\t\tif((gate.selector & ~0x03) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: Call gate: Segment is null.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,0)  // #GP(0)\n\t\t\t\t}\n\t\t\t\tif(desc.selector & 0x04)\n\t\t\t\t{\n\t\t\t\t\tif((desc.selector & ~0x07) > m_ldtr.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"CALL: Call gate: Segment is past LDT limit\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,desc.selector & ~0x03)  // #GP(selector)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif((desc.selector & ~0x07) > m_gdtr.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"CALL: Call gate: Segment is past GDT limit\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,desc.selector & ~0x03)  // #GP(selector)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ti386_load_protected_mode_segment(&desc,NULL);\n\t\t\t\tif((desc.flags & 0x0018) != 0x18)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: Call gate: Segment is not a code segment.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,desc.selector & ~0x03)  // #GP(selector)\n\t\t\t\t}\n\t\t\t\tDPL = ((desc.flags >> 5) & 0x03);\n\t\t\t\tif(DPL > CPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: Call gate: Segment DPL %i is greater than CPL %i.\\n\",DPL,CPL);\n\t\t\t\t\tFAULT(FAULT_GP,desc.selector & ~0x03)  // #GP(selector)\n\t\t\t\t}\n\t\t\t\tif((desc.flags & 0x0080) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL (%08x): Code segment is not present.\\n\",m_pc);\n\t\t\t\t\tFAULT(FAULT_NP,desc.selector & ~0x03)  // #NP(selector)\n\t\t\t\t}\n\t\t\t\tif(DPL < CPL && (desc.flags & 0x0004) == 0)\n\t\t\t\t{\n\t\t\t\t\tI386_SREG stack;\n\t\t\t\t\tI386_SREG temp;\n\t\t\t\t\tUINT32 oldSS,oldESP;\n\t\t\t\t\t/* more privilege */\n\t\t\t\t\t/* Check new SS segment for privilege level from TSS */\n\t\t\t\t\tmemset(&stack, 0, sizeof(stack));\n\t\t\t\t\tstack.selector = i386_get_stack_segment(DPL);\n\t\t\t\t\ti386_load_protected_mode_segment(&stack,NULL);\n\t\t\t\t\tif((stack.selector & ~0x03) == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"CALL: Call gate: TSS selector is null\\n\");\n\t\t\t\t\t\tFAULT(FAULT_TS,0)  // #TS(0)\n\t\t\t\t\t}\n\t\t\t\t\tif(stack.selector & 0x04)\n\t\t\t\t\t{\n\t\t\t\t\t\tif((stack.selector & ~0x07) > m_ldtr.limit)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlogerror(\"CALL: Call gate: TSS selector is past LDT limit\\n\");\n\t\t\t\t\t\t\tFAULT(FAULT_TS,stack.selector)  // #TS(SS selector)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tif((stack.selector & ~0x07) > m_gdtr.limit)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlogerror(\"CALL: Call gate: TSS selector is past GDT limit\\n\");\n\t\t\t\t\t\t\tFAULT(FAULT_TS,stack.selector)  // #TS(SS selector)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif((stack.selector & 0x03) != DPL)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"CALL: Call gate: Stack selector RPL does not equal code segment DPL %i\\n\",DPL);\n\t\t\t\t\t\tFAULT(FAULT_TS,stack.selector)  // #TS(SS selector)\n\t\t\t\t\t}\n\t\t\t\t\tif(((stack.flags >> 5) & 0x03) != DPL)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"CALL: Call gate: Stack DPL does not equal code segment DPL %i\\n\",DPL);\n\t\t\t\t\t\tFAULT(FAULT_TS,stack.selector)  // #TS(SS selector)\n\t\t\t\t\t}\n\t\t\t\t\tif((stack.flags & 0x0018) != 0x10 && (stack.flags & 0x0002))\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"CALL: Call gate: Stack segment is not a writable data segment\\n\");\n\t\t\t\t\t\tFAULT(FAULT_TS,stack.selector)  // #TS(SS selector)\n\t\t\t\t\t}\n\t\t\t\t\tif((stack.flags & 0x0080) == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"CALL: Call gate: Stack segment is not present\\n\");\n\t\t\t\t\t\tFAULT(FAULT_SS,stack.selector)  // #SS(SS selector)\n\t\t\t\t\t}\n\t\t\t\t\tUINT32 newESP = i386_get_stack_ptr(DPL);\n\t\t\t\t\tif(!stack.d)\n\t\t\t\t\t{\n\t\t\t\t\t\tnewESP &= 0xffff;\n\t\t\t\t\t}\n\t\t\t\t\tif(operand32 != 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(newESP < ((gate.dword_count & 0x1f) + 16))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlogerror(\"CALL: Call gate: New stack has no room for 32-bit return address and parameters.\\n\");\n\t\t\t\t\t\t\tFAULT(FAULT_SS,0) // #SS(0)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(gate.offset > desc.limit)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlogerror(\"CALL: Call gate: EIP is past segment limit.\\n\");\n\t\t\t\t\t\t\tFAULT(FAULT_GP,0) // #GP(0)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tif(newESP < ((gate.dword_count & 0x1f) + 8))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlogerror(\"CALL: Call gate: New stack has no room for 16-bit return address and parameters.\\n\");\n\t\t\t\t\t\t\tFAULT(FAULT_SS,0) // #SS(0)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif((gate.offset & 0xffff) > desc.limit)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlogerror(\"CALL: Call gate: IP is past segment limit.\\n\");\n\t\t\t\t\t\t\tFAULT(FAULT_GP,0) // #GP(0)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tselector = gate.selector;\n\t\t\t\t\toffset = gate.offset;\n\n\t\t\t\t\tm_CPL = (stack.flags >> 5) & 0x03;\n\t\t\t\t\t/* check for page fault at new stack */\n\t\t\t\t\tWRITE_TEST(stack.base+newESP-1);\n\t\t\t\t\t/* switch to new stack */\n\t\t\t\t\toldSS = m_sreg[SS].selector;\n\t\t\t\t\tm_sreg[SS].selector = i386_get_stack_segment(m_CPL);\n\t\t\t\t\tif(operand32 != 0)\n\t\t\t\t\t{\n\t\t\t\t\t\toldESP = REG32(ESP);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\toldESP = REG16(SP);\n\t\t\t\t\t}\n\t\t\t\t\ti386_load_segment_descriptor(SS );\n\t\t\t\t\tREG32(ESP) = newESP;\n\n\t\t\t\t\tif(operand32 != 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tPUSH32(oldSS);\n\t\t\t\t\t\tPUSH32(oldESP);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tPUSH16(oldSS);\n\t\t\t\t\t\tPUSH16(oldESP & 0xffff);\n\t\t\t\t\t}\n\n\t\t\t\t\tmemset(&temp, 0, sizeof(temp));\n\t\t\t\t\ttemp.selector = oldSS;\n\t\t\t\t\ti386_load_protected_mode_segment(&temp,NULL);\n\t\t\t\t\t/* copy parameters from old stack to new stack */\n\t\t\t\t\tfor(x=(gate.dword_count & 0x1f)-1;x>=0;x--)\n\t\t\t\t\t{\n\t\t\t\t\t\tUINT32 addr = oldESP + (operand32?(x*4):(x*2));\n\t\t\t\t\t\taddr = temp.base + (temp.d?addr:(addr&0xffff));\n\t\t\t\t\t\tif(operand32)\n\t\t\t\t\t\t\tPUSH32(READ32(addr));\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tPUSH16(READ16(addr));\n\t\t\t\t\t}\n\t\t\t\t\tSetRPL = 1;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t/* same privilege */\n\t\t\t\t\tif (operand32 != 0)  // if 32-bit\n\t\t\t\t\t{\n\t\t\t\t\t\tif(i386_limit_check(SS, REG32(ESP) - 8))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlogerror(\"CALL: Stack has no room for return address.\\n\");\n\t\t\t\t\t\t\tFAULT(FAULT_SS,0) // #SS(0)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tselector = gate.selector;\n\t\t\t\t\t\toffset = gate.offset;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tif(i386_limit_check(SS, (REG16(SP) - 4) & 0xffff))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlogerror(\"CALL: Stack has no room for return address.\\n\");\n\t\t\t\t\t\t\tFAULT(FAULT_SS,0) // #SS(0)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tselector = gate.selector;\n\t\t\t\t\t\toffset = gate.offset & 0xffff;\n\t\t\t\t\t}\n\t\t\t\t\tif(offset > desc.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"CALL: EIP is past segment limit.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,0) // #GP(0)\n\t\t\t\t\t}\n\t\t\t\t\tSetRPL = 1;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x05:  // task gate\n\t\t\t\tlogerror(\"CALL: Task gate at %08x\\n\",m_pc);\n\t\t\t\tmemset(&gate, 0, sizeof(gate));\n\t\t\t\tgate.segment = selector;\n\t\t\t\ti386_load_call_gate(&gate);\n\t\t\t\tDPL = gate.dpl;\n\t\t\t\tif(DPL < CPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: Task Gate: Gate DPL is less than CPL.\\n\");\n\t\t\t\t\tFAULT(FAULT_TS,selector & ~0x03) // #TS(selector)\n\t\t\t\t}\n\t\t\t\tif(DPL < RPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: Task Gate: Gate DPL is less than RPL.\\n\");\n\t\t\t\t\tFAULT(FAULT_TS,selector & ~0x03) // #TS(selector)\n\t\t\t\t}\n\t\t\t\tif((gate.ar & 0x0080) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: Task Gate: Gate is not present.\\n\");\n\t\t\t\t\tFAULT(FAULT_NP,selector & ~0x03) // #NP(selector)\n\t\t\t\t}\n\t\t\t\t/* Check the TSS that the task gate points to */\n\t\t\t\tdesc.selector = gate.selector;\n\t\t\t\ti386_load_protected_mode_segment(&desc,NULL);\n\t\t\t\tif(gate.selector & 0x04)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: Task Gate: TSS is not global.\\n\");\n\t\t\t\t\tFAULT(FAULT_TS,gate.selector & ~0x03) // #TS(selector)\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif((gate.selector & ~0x07) > m_gdtr.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"CALL: Task Gate: TSS is past GDT limit.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_TS,gate.selector & ~0x03) // #TS(selector)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(desc.flags & 0x0002)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: Task Gate: TSS is busy.\\n\");\n\t\t\t\t\tFAULT(FAULT_TS,gate.selector & ~0x03) // #TS(selector)\n\t\t\t\t}\n\t\t\t\tif((desc.flags & 0x0080) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"CALL: Task Gate: TSS is not present.\\n\");\n\t\t\t\t\tFAULT(FAULT_NP,gate.selector & ~0x03) // #TS(selector)\n\t\t\t\t}\n\t\t\t\tif(desc.flags & 0x08)\n\t\t\t\t\ti386_task_switch(desc.selector,1);  // with nesting\n\t\t\t\telse\n\t\t\t\t\ti286_task_switch(desc.selector,1);\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\tlogerror(\"CALL: Invalid special segment type (%i) to jump to.\\n\",desc.flags & 0x000f);\n\t\t\t\tFAULT(FAULT_GP,selector & ~0x07)  // #GP(selector)\n\t\t\t}\n\t\t}\n\t}\n\n\tif(SetRPL != 0)\n\t\tselector = (selector & ~0x03) | m_CPL;\n\n\tUINT32 tempSP = REG32(ESP);\n\ttry\n\t{\n\t\t// this is ugly but the alternative is worse\n\t\tif(operand32 == 0)\n\t\t{\n\t\t\t/* 16-bit operand size */\n\t\t\tPUSH16(m_sreg[CS].selector );\n\t\t\tPUSH16(m_eip & 0x0000ffff );\n\t\t\tm_sreg[CS].selector = selector;\n\t\t\tm_performed_intersegment_jump = 1;\n\t\t\tm_eip = offset;\n\t\t\ti386_load_segment_descriptor(CS);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* 32-bit operand size */\n\t\t\tPUSH32(m_sreg[CS].selector );\n\t\t\tPUSH32(m_eip );\n\t\t\tm_sreg[CS].selector = selector;\n\t\t\tm_performed_intersegment_jump = 1;\n\t\t\tm_eip = offset;\n\t\t\ti386_load_segment_descriptor(CS );\n\t\t}\n\t}\n\tcatch(UINT64 e)\n\t{\n\t\tREG32(ESP) = tempSP;\n\t\tthrow e;\n\t}\n\n\tCHANGE_PC(m_eip);\n}\n\nstatic void i386_protected_mode_retf(UINT8 count, UINT8 operand32)\n{\n\tUINT32 newCS, newEIP;\n\tI386_SREG desc;\n\tUINT8 CPL, RPL, DPL;\n\n\tUINT32 ea = i386_translate(SS, (STACK_32BIT)?REG32(ESP):REG16(SP), 0);\n\n\tif(operand32 == 0)\n\t{\n\t\tnewEIP = READ16(ea) & 0xffff;\n\t\tnewCS = READ16(ea+2) & 0xffff;\n\t}\n\telse\n\t{\n\t\tnewEIP = READ32(ea);\n\t\tnewCS = READ32(ea+4) & 0xffff;\n\t}\n\n\tmemset(&desc, 0, sizeof(desc));\n\tdesc.selector = newCS;\n\ti386_load_protected_mode_segment(&desc,NULL);\n\tCPL = m_CPL;  // current privilege level\n\tDPL = (desc.flags >> 5) & 0x03;  // descriptor privilege level\n\tRPL = newCS & 0x03;\n\n\tif(RPL < CPL)\n\t{\n\t\tlogerror(\"RETF (%08x): Return segment RPL is less than CPL.\\n\",m_pc);\n\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t}\n\n\tif(RPL == CPL)\n\t{\n\t\t/* same privilege level */\n\t\tif((newCS & ~0x03) == 0)\n\t\t{\n\t\t\tlogerror(\"RETF: Return segment is null.\\n\");\n\t\t\tFAULT(FAULT_GP,0)\n\t\t}\n\t\tif(newCS & 0x04)\n\t\t{\n\t\t\tif((newCS & ~0x07) >= m_ldtr.limit)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF: Return segment is past LDT limit.\\n\");\n\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif((newCS & ~0x07) >= m_gdtr.limit)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF: Return segment is past GDT limit.\\n\");\n\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t}\n\t\t}\n\t\tif((desc.flags & 0x0018) != 0x0018)\n\t\t{\n\t\t\tlogerror(\"RETF: Return segment is not a code segment.\\n\");\n\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t}\n\t\tif(desc.flags & 0x0004)\n\t\t{\n\t\t\tif(DPL > RPL)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF: Conforming code segment DPL is greater than CS RPL.\\n\");\n\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(DPL != RPL)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF: Non-conforming code segment DPL does not equal CS RPL.\\n\");\n\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t}\n\t\t}\n\t\tif((desc.flags & 0x0080) == 0)\n\t\t{\n\t\t\tlogerror(\"RETF (%08x): Code segment is not present.\\n\",m_pc);\n\t\t\tFAULT(FAULT_NP,newCS & ~0x03)\n\t\t}\n\t\tif(newEIP > desc.limit)\n\t\t{\n\t\t\tlogerror(\"RETF: EIP is past code segment limit.\\n\");\n\t\t\tFAULT(FAULT_GP,0)\n\t\t}\n\t\tif(operand32 == 0)\n\t\t{\n\t\t\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\t\t\tif(i386_limit_check(SS,offset+count+3) != 0)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF (%08x): SP is past stack segment limit.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_SS,0)\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\t\t\tif(i386_limit_check(SS,offset+count+7) != 0)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF: ESP is past stack segment limit.\\n\");\n\t\t\t\tFAULT(FAULT_SS,0)\n\t\t\t}\n\t\t}\n\t\tif(operand32 == 0)\n\t\t\tREG16(SP) += (4+count);\n\t\telse\n\t\t\tREG32(ESP) += (8+count);\n\t}\n\telse if(RPL > CPL)\n\t{\n\t\tUINT32 newSS, newESP;  // when changing privilege\n\t\t/* outer privilege level */\n\t\tif(operand32 == 0)\n\t\t{\n\t\t\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\t\t\tif(i386_limit_check(SS,offset+count+7) != 0)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF (%08x): SP is past stack segment limit.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_SS,0)\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\t\t\tif(i386_limit_check(SS,offset+count+15) != 0)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF: ESP is past stack segment limit.\\n\");\n\t\t\t\tFAULT(FAULT_SS,0)\n\t\t\t}\n\t\t}\n\t\t/* Check CS selector and descriptor */\n\t\tif((newCS & ~0x03) == 0)\n\t\t{\n\t\t\tlogerror(\"RETF: CS segment is null.\\n\");\n\t\t\tFAULT(FAULT_GP,0)\n\t\t}\n\t\tif(newCS & 0x04)\n\t\t{\n\t\t\tif((newCS & ~0x07) >= m_ldtr.limit)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF: CS segment selector is past LDT limit.\\n\");\n\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif((newCS & ~0x07) >= m_gdtr.limit)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF: CS segment selector is past GDT limit.\\n\");\n\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t}\n\t\t}\n\t\tif((desc.flags & 0x0018) != 0x0018)\n\t\t{\n\t\t\tlogerror(\"RETF: CS segment is not a code segment.\\n\");\n\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t}\n\t\tif(desc.flags & 0x0004)\n\t\t{\n\t\t\tif(DPL > RPL)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF: Conforming CS segment DPL is greater than return selector RPL.\\n\");\n\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(DPL != RPL)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF: Non-conforming CS segment DPL is not equal to return selector RPL.\\n\");\n\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t}\n\t\t}\n\t\tif((desc.flags & 0x0080) == 0)\n\t\t{\n\t\t\tlogerror(\"RETF: CS segment is not present.\\n\");\n\t\t\tFAULT(FAULT_NP,newCS & ~0x03)\n\t\t}\n\t\tif(newEIP > desc.limit)\n\t\t{\n\t\t\tlogerror(\"RETF: EIP is past return CS segment limit.\\n\");\n\t\t\tFAULT(FAULT_GP,0)\n\t\t}\n\n\t\tif(operand32 == 0)\n\t\t{\n\t\t\tea += count+4;\n\t\t\tnewESP = READ16(ea) & 0xffff;\n\t\t\tnewSS = READ16(ea+2) & 0xffff;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tea += count+8;\n\t\t\tnewESP = READ32(ea);\n\t\t\tnewSS = READ32(ea+4) & 0xffff;\n\t\t}\n\n\t\t/* Check SS selector and descriptor */\n\t\tdesc.selector = newSS;\n\t\ti386_load_protected_mode_segment(&desc,NULL);\n\t\tDPL = (desc.flags >> 5) & 0x03;  // descriptor privilege level\n\t\tif((newSS & ~0x07) == 0)\n\t\t{\n\t\t\tlogerror(\"RETF: SS segment is null.\\n\");\n\t\t\tFAULT(FAULT_GP,0)\n\t\t}\n\t\tif(newSS & 0x04)\n\t\t{\n\t\t\tif((newSS & ~0x07) > m_ldtr.limit)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF (%08x): SS segment selector is past LDT limit.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_GP,newSS & ~0x03)\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif((newSS & ~0x07) > m_gdtr.limit)\n\t\t\t{\n\t\t\t\tlogerror(\"RETF (%08x): SS segment selector is past GDT limit.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_GP,newSS & ~0x03)\n\t\t\t}\n\t\t}\n\t\tif((newSS & 0x03) != RPL)\n\t\t{\n\t\t\tlogerror(\"RETF: SS segment RPL is not equal to CS segment RPL.\\n\");\n\t\t\tFAULT(FAULT_GP,newSS & ~0x03)\n\t\t}\n\t\tif((desc.flags & 0x0018) != 0x0010 || (desc.flags & 0x0002) == 0)\n\t\t{\n\t\t\tlogerror(\"RETF: SS segment is not a writable data segment.\\n\");\n\t\t\tFAULT(FAULT_GP,newSS & ~0x03)\n\t\t}\n\t\tif(((desc.flags >> 5) & 0x03) != RPL)\n\t\t{\n\t\t\tlogerror(\"RETF: SS DPL is not equal to CS segment RPL.\\n\");\n\t\t\tFAULT(FAULT_GP,newSS & ~0x03)\n\t\t}\n\t\tif((desc.flags & 0x0080) == 0)\n\t\t{\n\t\t\tlogerror(\"RETF: SS segment is not present.\\n\");\n\t\t\tFAULT(FAULT_GP,newSS & ~0x03)\n\t\t}\n\t\tm_CPL = newCS & 0x03;\n\n\t\t/* Load new SS:(E)SP */\n\t\tif(operand32 == 0)\n\t\t\tREG16(SP) = (newESP+count) & 0xffff;\n\t\telse\n\t\t\tREG32(ESP) = newESP+count;\n\t\tm_sreg[SS].selector = newSS;\n\t\ti386_load_segment_descriptor(SS );\n\n\t\t/* Check that DS, ES, FS and GS are valid for the new privilege level */\n\t\ti386_check_sreg_validity(DS);\n\t\ti386_check_sreg_validity(ES);\n\t\ti386_check_sreg_validity(FS);\n\t\ti386_check_sreg_validity(GS);\n\t}\n\n\t/* Load new CS:(E)IP */\n\tif(operand32 == 0)\n\t\tm_eip = newEIP & 0xffff;\n\telse\n\t\tm_eip = newEIP;\n\tm_sreg[CS].selector = newCS;\n\ti386_load_segment_descriptor(CS );\n\tCHANGE_PC(m_eip);\n}\n\nstatic void i386_protected_mode_iret(int operand32)\n{\n\tUINT32 newCS, newEIP;\n\tUINT32 newSS, newESP;  // when changing privilege\n\tI386_SREG desc,stack;\n\tUINT8 CPL, RPL, DPL;\n\tUINT32 newflags;\n\n\tCPL = m_CPL;\n\tUINT32 ea = i386_translate(SS, (STACK_32BIT)?REG32(ESP):REG16(SP), 0);\n\tif(operand32 == 0)\n\t{\n\t\tnewEIP = READ16(ea) & 0xffff;\n\t\tnewCS = READ16(ea+2) & 0xffff;\n\t\tnewflags = READ16(ea+4) & 0xffff;\n\t}\n\telse\n\t{\n\t\tnewEIP = READ32(ea);\n\t\tnewCS = READ32(ea+4) & 0xffff;\n\t\tnewflags = READ32(ea+8);\n\t}\n\n\tif(V8086_MODE)\n\t{\n\t\tUINT32 oldflags = get_flags();\n\t\tif(!m_IOP1 || !m_IOP2)\n\t\t{\n\t\t\tlogerror(\"IRET (%08x): Is in Virtual 8086 mode and IOPL != 3.\\n\",m_pc);\n\t\t\tFAULT(FAULT_GP,0)\n\t\t}\n\t\tif(operand32 == 0)\n\t\t{\n\t\t\tm_eip = newEIP & 0xffff;\n\t\t\tm_sreg[CS].selector = newCS & 0xffff;\n\t\t\tnewflags &= ~(3<<12);\n\t\t\tnewflags |= (((oldflags>>12)&3)<<12);  // IOPL cannot be changed in V86 mode\n\t\t\tset_flags((newflags & 0xffff) | (oldflags & ~0xffff));\n\t\t\tREG16(SP) += 6;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = newEIP;\n\t\t\tm_sreg[CS].selector = newCS & 0xffff;\n\t\t\tnewflags &= ~(3<<12);\n\t\t\tnewflags |= 0x20000 | (((oldflags>>12)&3)<<12);  // IOPL and VM cannot be changed in V86 mode\n\t\t\tset_flags(newflags);\n\t\t\tREG32(ESP) += 12;\n\t\t}\n\t}\n\telse if(NESTED_TASK)\n\t{\n\t\tUINT32 task = READ32(m_task.base);\n\t\t/* Task Return */\n\t\tlogerror(\"IRET (%08x): Nested task return.\\n\",m_pc);\n\t\t/* Check back-link selector in TSS */\n\t\tif(task & 0x04)\n\t\t{\n\t\t\tlogerror(\"IRET: Task return: Back-linked TSS is not in GDT.\\n\");\n\t\t\tFAULT(FAULT_TS,task & ~0x03)\n\t\t}\n\t\tif((task & ~0x07) >= m_gdtr.limit)\n\t\t{\n\t\t\tlogerror(\"IRET: Task return: Back-linked TSS is not in GDT.\\n\");\n\t\t\tFAULT(FAULT_TS,task & ~0x03)\n\t\t}\n\t\tmemset(&desc, 0, sizeof(desc));\n\t\tdesc.selector = task;\n\t\ti386_load_protected_mode_segment(&desc,NULL);\n\t\tif((desc.flags & 0x001f) != 0x000b)\n\t\t{\n\t\t\tlogerror(\"IRET (%08x): Task return: Back-linked TSS is not a busy TSS.\\n\",m_pc);\n\t\t\tFAULT(FAULT_TS,task & ~0x03)\n\t\t}\n\t\tif((desc.flags & 0x0080) == 0)\n\t\t{\n\t\t\tlogerror(\"IRET: Task return: Back-linked TSS is not present.\\n\");\n\t\t\tFAULT(FAULT_NP,task & ~0x03)\n\t\t}\n\t\tif(desc.flags & 0x08)\n\t\t\ti386_task_switch(desc.selector,0);\n\t\telse\n\t\t\ti286_task_switch(desc.selector,0);\n\t\treturn;\n\t}\n\telse\n\t{\n\t\tif(newflags & 0x00020000) // if returning to virtual 8086 mode\n\t\t{\n\t\t\t// 16-bit iret can't reach here\n\t\t\tnewESP = READ32(ea+12);\n\t\t\tnewSS = READ32(ea+16) & 0xffff;\n\t\t\t/* Return to v86 mode */\n\t\t\t//logerror(\"IRET (%08x): Returning to Virtual 8086 mode.\\n\",m_pc);\n\t\t\tif(CPL != 0)\n\t\t\t{\n\t\t\t\tUINT32 oldflags = get_flags();\n\t\t\t\tnewflags = (newflags & ~0x00003000) | (oldflags & 0x00003000);\n\t\t\t}\n\t\t\tset_flags(newflags);\n\t\t\tm_eip = POP32() & 0xffff;  // high 16 bits are ignored\n\t\t\tm_sreg[CS].selector = POP32() & 0xffff;\n\t\t\tPOP32();  // already set flags\n\t\t\tnewESP = POP32();\n\t\t\tnewSS = POP32() & 0xffff;\n\t\t\tm_sreg[ES].selector = POP32() & 0xffff;\n\t\t\tm_sreg[DS].selector = POP32() & 0xffff;\n\t\t\tm_sreg[FS].selector = POP32() & 0xffff;\n\t\t\tm_sreg[GS].selector = POP32() & 0xffff;\n\t\t\tREG32(ESP) = newESP;  // all 32 bits are loaded\n\t\t\tm_sreg[SS].selector = newSS;\n\t\t\ti386_load_segment_descriptor(ES);\n\t\t\ti386_load_segment_descriptor(DS);\n\t\t\ti386_load_segment_descriptor(FS);\n\t\t\ti386_load_segment_descriptor(GS);\n\t\t\ti386_load_segment_descriptor(SS);\n\t\t\tm_CPL = 3;  // Virtual 8086 tasks are always run at CPL 3\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(operand32 == 0)\n\t\t\t{\n\t\t\t\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\t\t\t\tif(i386_limit_check(SS,offset+3) != 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Data on stack is past SS limit.\\n\");\n\t\t\t\t\tFAULT(FAULT_SS,0)\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\t\t\t\tif(i386_limit_check(SS,offset+7) != 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Data on stack is past SS limit.\\n\");\n\t\t\t\t\tFAULT(FAULT_SS,0)\n\t\t\t\t}\n\t\t\t}\n\t\t\tRPL = newCS & 0x03;\n\t\t\tif(RPL < CPL)\n\t\t\t{\n\t\t\t\tlogerror(\"IRET (%08x): Return CS RPL is less than CPL.\\n\",m_pc);\n\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t}\n\t\t\tif(RPL == CPL)\n\t\t\t{\n\t\t\t\t/* return to same privilege level */\n\t\t\t\tif(operand32 == 0)\n\t\t\t\t{\n\t\t\t\t\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\t\t\t\t\tif(i386_limit_check(SS,offset+5) != 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET (%08x): Data on stack is past SS limit.\\n\",m_pc);\n\t\t\t\t\t\tFAULT(FAULT_SS,0)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\t\t\t\t\tif(i386_limit_check(SS,offset+11) != 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET (%08x): Data on stack is past SS limit.\\n\",m_pc);\n\t\t\t\t\t\tFAULT(FAULT_SS,0)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif((newCS & ~0x03) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Return CS selector is null.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\t}\n\t\t\t\tif(newCS & 0x04)\n\t\t\t\t{\n\t\t\t\t\tif((newCS & ~0x07) >= m_ldtr.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET: Return CS selector (%04x) is past LDT limit.\\n\",newCS);\n\t\t\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif((newCS & ~0x07) >= m_gdtr.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET: Return CS selector is past GDT limit.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tmemset(&desc, 0, sizeof(desc));\n\t\t\t\tdesc.selector = newCS;\n\t\t\t\ti386_load_protected_mode_segment(&desc,NULL);\n\t\t\t\tDPL = (desc.flags >> 5) & 0x03;  // descriptor privilege level\n\t\t\t\tRPL = newCS & 0x03;\n\t\t\t\tif((desc.flags & 0x0018) != 0x0018)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET (%08x): Return CS segment is not a code segment.\\n\",m_pc);\n\t\t\t\t\tFAULT(FAULT_GP,newCS & ~0x07)\n\t\t\t\t}\n\t\t\t\tif(desc.flags & 0x0004)\n\t\t\t\t{\n\t\t\t\t\tif(DPL > RPL)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET: Conforming return CS DPL is greater than CS RPL.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif(DPL != RPL)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET: Non-conforming return CS DPL is not equal to CS RPL.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif((desc.flags & 0x0080) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Return CS segment is not present.\\n\");\n\t\t\t\t\tFAULT(FAULT_NP,newCS & ~0x03)\n\t\t\t\t}\n\t\t\t\tif(newEIP > desc.limit)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Return EIP is past return CS limit.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\t}\n\n\t\t\t\tif(CPL != 0)\n\t\t\t\t{\n\t\t\t\t\tUINT32 oldflags = get_flags();\n\t\t\t\t\tnewflags = (newflags & ~0x00003000) | (oldflags & 0x00003000);\n\t\t\t\t}\n\n\t\t\t\tif(operand32 == 0)\n\t\t\t\t{\n\t\t\t\t\tm_eip = newEIP;\n\t\t\t\t\tm_sreg[CS].selector = newCS;\n\t\t\t\t\tset_flags(newflags);\n\t\t\t\t\tREG16(SP) += 6;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tm_eip = newEIP;\n\t\t\t\t\tm_sreg[CS].selector = newCS & 0xffff;\n\t\t\t\t\tset_flags(newflags);\n\t\t\t\t\tREG32(ESP) += 12;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if(RPL > CPL)\n\t\t\t{\n\t\t\t\t/* return to outer privilege level */\n\t\t\t\tmemset(&desc, 0, sizeof(desc));\n\t\t\t\tdesc.selector = newCS;\n\t\t\t\ti386_load_protected_mode_segment(&desc,NULL);\n\t\t\t\tDPL = (desc.flags >> 5) & 0x03;  // descriptor privilege level\n\t\t\t\tRPL = newCS & 0x03;\n\t\t\t\tif(operand32 == 0)\n\t\t\t\t{\n\t\t\t\t\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\t\t\t\t\tif(i386_limit_check(SS,offset+9) != 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET: SP is past SS limit.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_SS,0)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\t\t\t\t\tif(i386_limit_check(SS,offset+19) != 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET: ESP is past SS limit.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_SS,0)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t/* Check CS selector and descriptor */\n\t\t\t\tif((newCS & ~0x03) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Return CS selector is null.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\t}\n\t\t\t\tif(newCS & 0x04)\n\t\t\t\t{\n\t\t\t\t\tif((newCS & ~0x07) >= m_ldtr.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET: Return CS selector is past LDT limit.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif((newCS & ~0x07) >= m_gdtr.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET: Return CS selector is past GDT limit.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif((desc.flags & 0x0018) != 0x0018)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Return CS segment is not a code segment.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t\t}\n\t\t\t\tif(desc.flags & 0x0004)\n\t\t\t\t{\n\t\t\t\t\tif(DPL > RPL)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET: Conforming return CS DPL is greater than CS RPL.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif(DPL != RPL)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET: Non-conforming return CS DPL does not equal CS RPL.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,newCS & ~0x03)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif((desc.flags & 0x0080) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Return CS segment is not present.\\n\");\n\t\t\t\t\tFAULT(FAULT_NP,newCS & ~0x03)\n\t\t\t\t}\n\n\t\t\t\t/* Check SS selector and descriptor */\n\t\t\t\tif(operand32 == 0)\n\t\t\t\t{\n\t\t\t\t\tnewESP = READ16(ea+6) & 0xffff;\n\t\t\t\t\tnewSS = READ16(ea+8) & 0xffff;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tnewESP = READ32(ea+12);\n\t\t\t\t\tnewSS = READ32(ea+16) & 0xffff;\n\t\t\t\t}\n\t\t\t\tmemset(&stack, 0, sizeof(stack));\n\t\t\t\tstack.selector = newSS;\n\t\t\t\ti386_load_protected_mode_segment(&stack,NULL);\n\t\t\t\tDPL = (stack.flags >> 5) & 0x03;\n\t\t\t\tif((newSS & ~0x03) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Return SS selector is null.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\t}\n\t\t\t\tif(newSS & 0x04)\n\t\t\t\t{\n\t\t\t\t\tif((newSS & ~0x07) >= m_ldtr.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET: Return SS selector is past LDT limit.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,newSS & ~0x03);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif((newSS & ~0x07) >= m_gdtr.limit)\n\t\t\t\t\t{\n\t\t\t\t\t\tlogerror(\"IRET: Return SS selector is past GDT limit.\\n\");\n\t\t\t\t\t\tFAULT(FAULT_GP,newSS & ~0x03);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif((newSS & 0x03) != RPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Return SS RPL is not equal to return CS RPL.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,newSS & ~0x03)\n\t\t\t\t}\n\t\t\t\tif((stack.flags & 0x0018) != 0x0010)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Return SS segment is not a data segment.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,newSS & ~0x03)\n\t\t\t\t}\n\t\t\t\tif((stack.flags & 0x0002) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Return SS segment is not writable.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,newSS & ~0x03)\n\t\t\t\t}\n\t\t\t\tif(DPL != RPL)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Return SS DPL does not equal SS RPL.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,newSS & ~0x03)\n\t\t\t\t}\n\t\t\t\tif((stack.flags & 0x0080) == 0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: Return SS segment is not present.\\n\");\n\t\t\t\t\tFAULT(FAULT_NP,newSS & ~0x03)\n\t\t\t\t}\n\t\t\t\tif(newEIP > desc.limit)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"IRET: EIP is past return CS limit.\\n\");\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\t}\n\n//              if(operand32 == 0)\n//                  REG16(SP) += 10;\n//              else\n//                  REG32(ESP) += 20;\n\n\t\t\t\t// IOPL can only change if CPL is zero\n\t\t\t\tif(CPL != 0)\n\t\t\t\t{\n\t\t\t\t\tUINT32 oldflags = get_flags();\n\t\t\t\t\tnewflags = (newflags & ~0x00003000) | (oldflags & 0x00003000);\n\t\t\t\t}\n\n\t\t\t\tif(operand32 == 0)\n\t\t\t\t{\n\t\t\t\t\tm_eip = newEIP & 0xffff;\n\t\t\t\t\tm_sreg[CS].selector = newCS;\n\t\t\t\t\tset_flags(newflags);\n\t\t\t\t\tREG16(SP) = newESP & 0xffff;\n\t\t\t\t\tm_sreg[SS].selector = newSS;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tm_eip = newEIP;\n\t\t\t\t\tm_sreg[CS].selector = newCS & 0xffff;\n\t\t\t\t\tset_flags(newflags);\n\t\t\t\t\tREG32(ESP) = newESP;\n\t\t\t\t\tm_sreg[SS].selector = newSS & 0xffff;\n\t\t\t\t}\n\t\t\t\tm_CPL = newCS & 0x03;\n\t\t\t\ti386_load_segment_descriptor(SS);\n\n\t\t\t\t/* Check that DS, ES, FS and GS are valid for the new privilege level */\n\t\t\t\ti386_check_sreg_validity(DS);\n\t\t\t\ti386_check_sreg_validity(ES);\n\t\t\t\ti386_check_sreg_validity(FS);\n\t\t\t\ti386_check_sreg_validity(GS);\n\t\t\t}\n\t\t}\n\t}\n\n\ti386_load_segment_descriptor(CS);\n\tCHANGE_PC(m_eip);\n}\n\n#include \"cycles.h\"\n\nstatic UINT8 cycle_table_rm[X86_NUM_CPUS][CYCLES_NUM_OPCODES];\nstatic UINT8 cycle_table_pm[X86_NUM_CPUS][CYCLES_NUM_OPCODES];\n\n#ifdef SUPPORT_RDTSC\n\n#define CYCLES_NUM(x)   (m_cycles -= (x))\n\nINLINE void CYCLES(int x)\n{\n\tif (PROTECTED_MODE)\n\t{\n\t\tm_cycles -= m_cycle_table_pm[x];\n\t}\n\telse\n\t{\n\t\tm_cycles -= m_cycle_table_rm[x];\n\t}\n}\n\nINLINE void CYCLES_RM(int modrm, int r, int m)\n{\n\tif (modrm >= 0xc0)\n\t{\n\t\tif (PROTECTED_MODE)\n\t\t{\n\t\t\tm_cycles -= m_cycle_table_pm[r];\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_cycles -= m_cycle_table_rm[r];\n\t\t}\n\t}\n\telse\n\t{\n\t\tif (PROTECTED_MODE)\n\t\t{\n\t\t\tm_cycles -= m_cycle_table_pm[m];\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_cycles -= m_cycle_table_rm[m];\n\t\t}\n\t}\n}\n\n#else\n\n/* i386/i486: we don't need to update cycles for rdtsc */\n#define CYCLES_NUM(x)\n#define CYCLES(x)\n#define CYCLES_RM(modrm, r, m)\n\n#endif\n\nstatic void build_cycle_table()\n{\n\tint i, j;\n\tfor (j=0; j < X86_NUM_CPUS; j++)\n\t{\n//\t\tcycle_table_rm[j] = (UINT8 *)malloc(sizeof(UINT8) * CYCLES_NUM_OPCODES);\n//\t\tcycle_table_pm[j] = (UINT8 *)malloc(sizeof(UINT8) * CYCLES_NUM_OPCODES);\n\n\t\tfor (i=0; i < sizeof(x86_cycle_table)/sizeof(X86_CYCLE_TABLE); i++)\n\t\t{\n\t\t\tint opcode = x86_cycle_table[i].op;\n\t\t\tcycle_table_rm[j][opcode] = x86_cycle_table[i].cpu_cycles[j][0];\n\t\t\tcycle_table_pm[j][opcode] = x86_cycle_table[i].cpu_cycles[j][1];\n\t\t}\n\t}\n}\n\nstatic void report_invalid_opcode()\n{\n#ifndef DEBUG_MISSING_OPCODE\n\tlogerror(\"i386: Invalid opcode %02X at %08X %s\\n\", m_opcode, m_pc - 1, m_lock ? \"with lock\" : \"\");\n#else\n\tlogerror(\"i386: Invalid opcode\");\n\tfor (int a = 0; a < m_opcode_bytes_length; a++)\n\t\tlogerror(\" %02X\", m_opcode_bytes[a]);\n\tlogerror(\" at %08X\\n\", m_opcode_pc);\n#endif\n}\n\nstatic void report_invalid_modrm(const char* opcode, UINT8 modrm)\n{\n#ifndef DEBUG_MISSING_OPCODE\n\tlogerror(\"i386: Invalid %s modrm %01X at %08X\\n\", opcode, modrm, m_pc - 2);\n#else\n\tlogerror(\"i386: Invalid %s modrm %01X\", opcode, modrm);\n\tfor (int a = 0; a < m_opcode_bytes_length; a++)\n\t\tlogerror(\" %02X\", m_opcode_bytes[a]);\n\tlogerror(\" at %08X\\n\", m_opcode_pc);\n#endif\n\ti386_trap(6, 0, 0);\n}\n\n/* Forward declarations */\nstatic void I386OP(decode_opcode)();\nstatic void I386OP(decode_two_byte)();\nstatic void I386OP(decode_three_byte66)();\nstatic void I386OP(decode_three_bytef2)();\nstatic void I386OP(decode_three_bytef3)();\n\n\n\n#include \"i386ops.c\"\n#include \"i386op16.c\"\n#include \"i386op32.c\"\n#include \"i486ops.c\"\n#include \"pentops.c\"\n#include \"x87ops.c\"\n#include \"i386ops.h\"\n\nstatic void I386OP(decode_opcode)()\n{\n\tm_opcode = FETCH();\n\n\tif(m_lock && !m_lock_table[0][m_opcode])\n\t\treturn I386OP(invalid)();\n\n\tif( m_operand_size )\n\t\tm_opcode_table1_32[m_opcode]();\n\telse\n\t\tm_opcode_table1_16[m_opcode]();\n}\n\n/* Two-byte opcode prefix */\nstatic void I386OP(decode_two_byte)()\n{\n\tm_opcode = FETCH();\n\n\tif(m_lock && !m_lock_table[1][m_opcode])\n\t\treturn I386OP(invalid)();\n\n\tif( m_operand_size )\n\t\tm_opcode_table2_32[m_opcode]();\n\telse\n\t\tm_opcode_table2_16[m_opcode]();\n}\n\n/* Three-byte opcode prefix 66 0f */\nstatic void I386OP(decode_three_byte66)()\n{\n\tm_opcode = FETCH();\n\tif( m_operand_size )\n\t\tm_opcode_table366_32[m_opcode]();\n\telse\n\t\tm_opcode_table366_16[m_opcode]();\n}\n\n/* Three-byte opcode prefix f2 0f */\nstatic void I386OP(decode_three_bytef2)()\n{\n\tm_opcode = FETCH();\n\tif( m_operand_size )\n\t\tm_opcode_table3f2_32[m_opcode]();\n\telse\n\t\tm_opcode_table3f2_16[m_opcode]();\n}\n\n/* Three-byte opcode prefix f3 0f */\nstatic void I386OP(decode_three_bytef3)()\n{\n\tm_opcode = FETCH();\n\tif( m_operand_size )\n\t\tm_opcode_table3f3_32[m_opcode]();\n\telse\n\t\tm_opcode_table3f3_16[m_opcode]();\n}\n\n/*************************************************************************/\n\nstatic void i386_postload()\n{\n\tint i;\n\tfor (i = 0; i < 6; i++)\n\t\ti386_load_segment_descriptor(i);\n\tCHANGE_PC(m_eip);\n}\n\nstatic void i386_common_init(int tlbsize)\n{\n\tint i, j;\n\tstatic const int regs8[8] = {AL,CL,DL,BL,AH,CH,DH,BH};\n\tstatic const int regs16[8] = {AX,CX,DX,BX,SP,BP,SI,DI};\n\tstatic const int regs32[8] = {EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI};\n\n\tassert((sizeof(XMM_REG)/sizeof(double)) == 2);\n\n\tbuild_cycle_table();\n\n\tfor( i=0; i < 256; i++ ) {\n\t\tint c=0;\n\t\tfor( j=0; j < 8; j++ ) {\n\t\t\tif( i & (1 << j) )\n\t\t\t\tc++;\n\t\t}\n\t\ti386_parity_table[i] = ~(c & 0x1) & 0x1;\n\t}\n\n\tfor( i=0; i < 256; i++ ) {\n\t\ti386_MODRM_table[i].reg.b = regs8[(i >> 3) & 0x7];\n\t\ti386_MODRM_table[i].reg.w = regs16[(i >> 3) & 0x7];\n\t\ti386_MODRM_table[i].reg.d = regs32[(i >> 3) & 0x7];\n\n\t\ti386_MODRM_table[i].rm.b = regs8[i & 0x7];\n\t\ti386_MODRM_table[i].rm.w = regs16[i & 0x7];\n\t\ti386_MODRM_table[i].rm.d = regs32[i & 0x7];\n\t}\n\n\tm_vtlb = vtlb_alloc(AS_PROGRAM, 0, tlbsize);\n\tm_smi = false;\n\tm_lock = false;\n\n//\ti386_interface *intf = (i386_interface *) device->static_config();\n//\n//\tif (intf != NULL)\n//\t\tm_smiact.resolve(intf->smiact, *device);\n//\telse\n//\t\tmemset(&m_smiact, 0, sizeof(m_smiact));\n\n\tzero_state();\n}\n\nCPU_INIT( i386 )\n{\n\ti386_common_init(32);\n\n\tbuild_opcode_table(OP_I386);\n\tm_cycle_table_rm = cycle_table_rm[CPU_CYCLES_I386];\n\tm_cycle_table_pm = cycle_table_pm[CPU_CYCLES_I386];\n}\n\nstatic void build_opcode_table(UINT32 features)\n{\n\tint i;\n\tfor (i=0; i < 256; i++)\n\t{\n\t\tm_opcode_table1_16[i] = I386OP(invalid);\n\t\tm_opcode_table1_32[i] = I386OP(invalid);\n\t\tm_opcode_table2_16[i] = I386OP(invalid);\n\t\tm_opcode_table2_32[i] = I386OP(invalid);\n\t\tm_opcode_table366_16[i] = I386OP(invalid);\n\t\tm_opcode_table366_32[i] = I386OP(invalid);\n\t\tm_opcode_table3f2_16[i] = I386OP(invalid);\n\t\tm_opcode_table3f2_32[i] = I386OP(invalid);\n\t\tm_opcode_table3f3_16[i] = I386OP(invalid);\n\t\tm_opcode_table3f3_32[i] = I386OP(invalid);\n\t\tm_lock_table[0][i] = false;\n\t\tm_lock_table[1][i] = false;\n\t}\n\n\tfor (i=0; i < sizeof(x86_opcode_table)/sizeof(X86_OPCODE); i++)\n\t{\n\t\tconst X86_OPCODE *op = &x86_opcode_table[i];\n\n\t\tif ((op->flags & features))\n\t\t{\n\t\t\tif (op->flags & OP_2BYTE)\n\t\t\t{\n\t\t\t\tm_opcode_table2_32[op->opcode] = op->handler32;\n\t\t\t\tm_opcode_table2_16[op->opcode] = op->handler16;\n\t\t\t\tm_opcode_table366_32[op->opcode] = op->handler32;\n\t\t\t\tm_opcode_table366_16[op->opcode] = op->handler16;\n\t\t\t\tm_lock_table[1][op->opcode] = op->lockable;\n\t\t\t}\n\t\t\telse if (op->flags & OP_3BYTE66)\n\t\t\t{\n\t\t\t\tm_opcode_table366_32[op->opcode] = op->handler32;\n\t\t\t\tm_opcode_table366_16[op->opcode] = op->handler16;\n\t\t\t}\n\t\t\telse if (op->flags & OP_3BYTEF2)\n\t\t\t{\n\t\t\t\tm_opcode_table3f2_32[op->opcode] = op->handler32;\n\t\t\t\tm_opcode_table3f2_16[op->opcode] = op->handler16;\n\t\t\t}\n\t\t\telse if (op->flags & OP_3BYTEF3)\n\t\t\t{\n\t\t\t\tm_opcode_table3f3_32[op->opcode] = op->handler32;\n\t\t\t\tm_opcode_table3f3_16[op->opcode] = op->handler16;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tm_opcode_table1_32[op->opcode] = op->handler32;\n\t\t\t\tm_opcode_table1_16[op->opcode] = op->handler16;\n\t\t\t\tm_lock_table[0][op->opcode] = op->lockable;\n\t\t\t}\n\t\t}\n\t}\n}\n\nstatic void zero_state()\n{\n\tmemset( &m_reg, 0, sizeof(m_reg) );\n\tmemset( m_sreg, 0, sizeof(m_sreg) );\n\tm_eip = 0;\n\tm_pc = 0;\n\tm_prev_eip = 0;\n\tm_eflags = 0;\n\tm_eflags_mask = 0;\n\tm_CF = 0;\n\tm_DF = 0;\n\tm_SF = 0;\n\tm_OF = 0;\n\tm_ZF = 0;\n\tm_PF = 0;\n\tm_AF = 0;\n\tm_IF = 0;\n\tm_TF = 0;\n\tm_IOP1 = 0;\n\tm_IOP2 = 0;\n\tm_NT = 0;\n\tm_RF = 0;\n\tm_VM = 0;\n\tm_AC = 0;\n\tm_VIF = 0;\n\tm_VIP = 0;\n\tm_ID = 0;\n\tm_CPL = 0;\n\tm_performed_intersegment_jump = 0;\n\tm_delayed_interrupt_enable = 0;\n\tmemset( m_cr, 0, sizeof(m_cr) );\n\tmemset( m_dr, 0, sizeof(m_dr) );\n\tmemset( m_tr, 0, sizeof(m_tr) );\n\tmemset( &m_gdtr, 0, sizeof(m_gdtr) );\n\tmemset( &m_idtr, 0, sizeof(m_idtr) );\n\tmemset( &m_task, 0, sizeof(m_task) );\n\tmemset( &m_ldtr, 0, sizeof(m_ldtr) );\n\tm_ext = 0;\n\tm_halted = 0;\n\tm_operand_size = 0;\n\tm_xmm_operand_size = 0;\n\tm_address_size = 0;\n\tm_operand_prefix = 0;\n\tm_address_prefix = 0;\n\tm_segment_prefix = 0;\n\tm_segment_override = 0;\n\tm_cycles = 0;\n\tm_base_cycles = 0;\n\tm_opcode = 0;\n\tm_irq_state = 0;\n\tm_a20_mask = 0;\n\tm_cpuid_max_input_value_eax = 0;\n\tm_cpuid_id0 = 0;\n\tm_cpuid_id1 = 0;\n\tm_cpuid_id2 = 0;\n\tm_cpu_version = 0;\n\tm_feature_flags = 0;\n\tm_tsc = 0;\n\tm_perfctr[0] = m_perfctr[1] = 0;\n\tmemset( m_x87_reg, 0, sizeof(m_x87_reg) );\n\tm_x87_cw = 0;\n\tm_x87_sw = 0;\n\tm_x87_tw = 0;\n\tm_x87_data_ptr = 0;\n\tm_x87_inst_ptr = 0;\n\tm_x87_opcode = 0;\n\tmemset( m_sse_reg, 0, sizeof(m_sse_reg) );\n\tm_mxcsr = 0;\n\tm_smm = false;\n\tm_smi = false;\n\tm_smi_latched = false;\n\tm_nmi_masked = false;\n\tm_nmi_latched = false;\n\tm_smbase = 0;\n#ifdef DEBUG_MISSING_OPCODE\n\tmemset( m_opcode_bytes, 0, sizeof(m_opcode_bytes) );\n\tm_opcode_pc = 0;\n\tm_opcode_bytes_length = 0;\n#endif\n}\n\nstatic CPU_RESET( i386 )\n{\n\tzero_state();\n\tvtlb_flush_dynamic(m_vtlb);\n\n\tm_sreg[CS].selector = 0xf000;\n\tm_sreg[CS].base     = 0xffff0000;\n\tm_sreg[CS].limit    = 0xffff;\n\tm_sreg[CS].flags    = 0x9b;\n\tm_sreg[CS].valid    = true;\n\n\tm_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000;\n\tm_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff;\n\tm_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092;\n\tm_sreg[DS].valid = m_sreg[ES].valid = m_sreg[FS].valid = m_sreg[GS].valid = m_sreg[SS].valid =true;\n\n\tm_idtr.base = 0;\n\tm_idtr.limit = 0x3ff;\n\tm_smm = false;\n\tm_smi_latched = false;\n\tm_nmi_masked = false;\n\tm_nmi_latched = false;\n\n\tm_a20_mask = ~0;\n\n\tm_cr[0] = 0x7fffffe0; // reserved bits set to 1\n\tm_eflags = 0;\n\tm_eflags_mask = 0x00037fd7;\n\tm_eip = 0xfff0;\n\n\t// [11:8] Family\n\t// [ 7:4] Model\n\t// [ 3:0] Stepping ID\n\t// Family 3 (386), Model 0 (DX), Stepping 8 (D1)\n\tREG32(EAX) = 0;\n\tREG32(EDX) = (3 << 8) | (0 << 4) | (8);\n\n\tm_CPL = 0;\n\n\tCHANGE_PC(m_eip);\n}\n\nstatic void pentium_smi()\n{\n\tUINT32 smram_state = m_smbase + 0xfe00;\n\tUINT32 old_cr0 = m_cr[0];\n\tUINT32 old_flags = get_flags();\n\n\tif(m_smm)\n\t\treturn;\n\n\tm_cr[0] &= ~(0x8000000d);\n\tset_flags(2);\n//\tif(!m_smiact.isnull())\n//\t\tm_smiact(true);\n\tm_smm = true;\n\tm_smi_latched = false;\n\n\t// save state\n\tWRITE32(m_cr[4], smram_state+SMRAM_IP5_CR4);\n\tWRITE32(m_sreg[ES].limit, smram_state+SMRAM_IP5_ESLIM);\n\tWRITE32(m_sreg[ES].base, smram_state+SMRAM_IP5_ESBASE);\n\tWRITE32(m_sreg[ES].flags, smram_state+SMRAM_IP5_ESACC);\n\tWRITE32(m_sreg[CS].limit, smram_state+SMRAM_IP5_CSLIM);\n\tWRITE32(m_sreg[CS].base, smram_state+SMRAM_IP5_CSBASE);\n\tWRITE32(m_sreg[CS].flags, smram_state+SMRAM_IP5_CSACC);\n\tWRITE32(m_sreg[SS].limit, smram_state+SMRAM_IP5_SSLIM);\n\tWRITE32(m_sreg[SS].base, smram_state+SMRAM_IP5_SSBASE);\n\tWRITE32(m_sreg[SS].flags, smram_state+SMRAM_IP5_SSACC);\n\tWRITE32(m_sreg[DS].limit, smram_state+SMRAM_IP5_DSLIM);\n\tWRITE32(m_sreg[DS].base, smram_state+SMRAM_IP5_DSBASE);\n\tWRITE32(m_sreg[DS].flags, smram_state+SMRAM_IP5_DSACC);\n\tWRITE32(m_sreg[FS].limit, smram_state+SMRAM_IP5_FSLIM);\n\tWRITE32(m_sreg[FS].base, smram_state+SMRAM_IP5_FSBASE);\n\tWRITE32(m_sreg[FS].flags, smram_state+SMRAM_IP5_FSACC);\n\tWRITE32(m_sreg[GS].limit, smram_state+SMRAM_IP5_GSLIM);\n\tWRITE32(m_sreg[GS].base, smram_state+SMRAM_IP5_GSBASE);\n\tWRITE32(m_sreg[GS].flags, smram_state+SMRAM_IP5_GSACC);\n\tWRITE32(m_ldtr.flags, smram_state+SMRAM_IP5_LDTACC);\n\tWRITE32(m_ldtr.limit, smram_state+SMRAM_IP5_LDTLIM);\n\tWRITE32(m_ldtr.base, smram_state+SMRAM_IP5_LDTBASE);\n\tWRITE32(m_gdtr.limit, smram_state+SMRAM_IP5_GDTLIM);\n\tWRITE32(m_gdtr.base, smram_state+SMRAM_IP5_GDTBASE);\n\tWRITE32(m_idtr.limit, smram_state+SMRAM_IP5_IDTLIM);\n\tWRITE32(m_idtr.base, smram_state+SMRAM_IP5_IDTBASE);\n\tWRITE32(m_task.limit, smram_state+SMRAM_IP5_TRLIM);\n\tWRITE32(m_task.base, smram_state+SMRAM_IP5_TRBASE);\n\tWRITE32(m_task.flags, smram_state+SMRAM_IP5_TRACC);\n\n\tWRITE32(m_sreg[ES].selector, smram_state+SMRAM_ES);\n\tWRITE32(m_sreg[CS].selector, smram_state+SMRAM_CS);\n\tWRITE32(m_sreg[SS].selector, smram_state+SMRAM_SS);\n\tWRITE32(m_sreg[DS].selector, smram_state+SMRAM_DS);\n\tWRITE32(m_sreg[FS].selector, smram_state+SMRAM_FS);\n\tWRITE32(m_sreg[GS].selector, smram_state+SMRAM_GS);\n\tWRITE32(m_ldtr.segment, smram_state+SMRAM_LDTR);\n\tWRITE32(m_task.segment, smram_state+SMRAM_TR);\n\n\tWRITE32(m_dr[7], smram_state+SMRAM_DR7);\n\tWRITE32(m_dr[6], smram_state+SMRAM_DR6);\n\tWRITE32(REG32(EAX), smram_state+SMRAM_EAX);\n\tWRITE32(REG32(ECX), smram_state+SMRAM_ECX);\n\tWRITE32(REG32(EDX), smram_state+SMRAM_EDX);\n\tWRITE32(REG32(EBX), smram_state+SMRAM_EBX);\n\tWRITE32(REG32(ESP), smram_state+SMRAM_ESP);\n\tWRITE32(REG32(EBP), smram_state+SMRAM_EBP);\n\tWRITE32(REG32(ESI), smram_state+SMRAM_ESI);\n\tWRITE32(REG32(EDI), smram_state+SMRAM_EDI);\n\tWRITE32(m_eip, smram_state+SMRAM_EIP);\n\tWRITE32(old_flags, smram_state+SMRAM_EAX);\n\tWRITE32(m_cr[3], smram_state+SMRAM_CR3);\n\tWRITE32(old_cr0, smram_state+SMRAM_CR0);\n\n\tm_sreg[DS].selector = m_sreg[ES].selector = m_sreg[FS].selector = m_sreg[GS].selector = m_sreg[SS].selector = 0;\n\tm_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000;\n\tm_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffffffff;\n\tm_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x8093;\n\tm_sreg[DS].valid = m_sreg[ES].valid = m_sreg[FS].valid = m_sreg[GS].valid = m_sreg[SS].valid =true;\n\tm_sreg[CS].selector = 0x3000; // pentium only, ppro sel = smbase >> 4\n\tm_sreg[CS].base = m_smbase;\n\tm_sreg[CS].limit = 0xffffffff;\n\tm_sreg[CS].flags = 0x809b;\n\tm_sreg[CS].valid = true;\n\tm_cr[4] = 0;\n\tm_dr[7] = 0x400;\n\tm_eip = 0x8000;\n\n\tm_nmi_masked = true;\n\tCHANGE_PC(m_eip);\n}\n\nstatic void i386_set_irq_line(int irqline, int state)\n{\n\tif (state != CLEAR_LINE && m_halted)\n\t{\n\t\tm_halted = 0;\n\t}\n\n\tif ( irqline == INPUT_LINE_NMI )\n\t{\n\t\t/* NMI (I do not think that this is 100% right) */\n\t\tif(m_nmi_masked)\n\t\t{\n\t\t\tm_nmi_latched = true;\n\t\t\treturn;\n\t\t}\n\t\tif ( state )\n\t\t\ti386_trap(2, 1, 0);\n\t}\n\telse\n\t{\n\t\tm_irq_state = state;\n\t}\n}\n\nstatic void i386_set_a20_line(int state)\n{\n\tif (state)\n\t{\n\t\tm_a20_mask = ~0;\n\t}\n\telse\n\t{\n\t\tm_a20_mask = ~(1 << 20);\n\t}\n\t// TODO: how does A20M and the tlb interact\n\tvtlb_flush_dynamic(m_vtlb);\n}\n\nstatic CPU_EXECUTE( i386 )\n{\n#ifdef SUPPORT_RDTSC\n\tm_cycles = 1;\n\tint cycles = m_cycles;\n\tm_base_cycles = cycles;\n#endif\n\tCHANGE_PC(m_eip);\n\n//\tif (m_halted)\n//\t{\n//\t\tm_tsc += cycles;\n//\t\tm_cycles = 0;\n//\t\treturn;\n//\t}\n\n//\twhile( m_cycles > 0 )\n//\t{\n\t\ti386_check_irq_line();\n\t\tm_operand_size = m_sreg[CS].d;\n\t\tm_xmm_operand_size = 0;\n\t\tm_address_size = m_sreg[CS].d;\n\t\tm_operand_prefix = 0;\n\t\tm_address_prefix = 0;\n\n\t\tm_ext = 1;\n\t\tint old_tf = m_TF;\n\n\t\tm_segment_prefix = 0;\n\t\tm_prev_eip = m_eip;\n\n//\t\tdebugger_instruction_hook(device, m_pc);\n\n\t\tif(m_delayed_interrupt_enable != 0)\n\t\t{\n\t\t\tm_IF = 1;\n\t\t\tm_delayed_interrupt_enable = 0;\n\t\t}\n#ifdef DEBUG_MISSING_OPCODE\n\t\tm_opcode_bytes_length = 0;\n\t\tm_opcode_pc = m_pc;\n#endif\n\t\ttry\n\t\t{\n\t\t\tI386OP(decode_opcode)();\n\t\t\tif(m_TF && old_tf)\n\t\t\t{\n\t\t\t\tm_prev_eip = m_eip;\n\t\t\t\tm_ext = 1;\n\t\t\t\ti386_trap(1,0,0);\n\t\t\t}\n\t\t\tif(m_lock && (m_opcode != 0xf0))\n\t\t\t\tm_lock = false;\n\t\t}\n\t\tcatch(UINT64 e)\n\t\t{\n\t\t\tm_ext = 1;\n\t\t\ti386_trap_with_error(e&0xffffffff,0,0,e>>32);\n\t\t}\n//\t}\n#ifdef SUPPORT_RDTSC\n\tm_tsc += (cycles - m_cycles);\n#endif\n}\n\n/*************************************************************************/\n\nstatic CPU_TRANSLATE( i386 )\n{\n\tint ret = TRUE;\n\tif(space == AS_PROGRAM)\n\t\tret = i386_translate_address(intention, address, NULL);\n\t*address &= m_a20_mask;\n\treturn ret;\n}\n\n/*****************************************************************************/\n/* Intel 486 */\n\n\nstatic CPU_INIT( i486 )\n{\n\ti386_common_init(32);\n\n\tbuild_opcode_table(OP_I386 | OP_FPU | OP_I486);\n\tbuild_x87_opcode_table();\n\tm_cycle_table_rm = cycle_table_rm[CPU_CYCLES_I486];\n\tm_cycle_table_pm = cycle_table_pm[CPU_CYCLES_I486];\n}\n\nstatic CPU_RESET( i486 )\n{\n\tzero_state();\n\tvtlb_flush_dynamic(m_vtlb);\n\n\tm_sreg[CS].selector = 0xf000;\n\tm_sreg[CS].base     = 0xffff0000;\n\tm_sreg[CS].limit    = 0xffff;\n\tm_sreg[CS].flags    = 0x009b;\n\n\tm_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000;\n\tm_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff;\n\tm_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092;\n\n\tm_idtr.base = 0;\n\tm_idtr.limit = 0x3ff;\n\n\tm_a20_mask = ~0;\n\n\tm_cr[0] = 0x00000010;\n\tm_eflags = 0;\n\tm_eflags_mask = 0x00077fd7;\n\tm_eip = 0xfff0;\n\tm_smm = false;\n\tm_smi_latched = false;\n\tm_nmi_masked = false;\n\tm_nmi_latched = false;\n\n\tx87_reset();\n\n\t// [11:8] Family\n\t// [ 7:4] Model\n\t// [ 3:0] Stepping ID\n\t// Family 4 (486), Model 0/1 (DX), Stepping 3\n\tREG32(EAX) = 0;\n\tREG32(EDX) = (4 << 8) | (0 << 4) | (3);\n\n\tCHANGE_PC(m_eip);\n}\n\n/*****************************************************************************/\n/* Pentium */\n\n\nstatic CPU_INIT( pentium )\n{\n\t// 64 dtlb small, 8 dtlb large, 32 itlb\n\ti386_common_init(96);\n\n\tbuild_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM);\n\tbuild_x87_opcode_table();\n\tm_cycle_table_rm = cycle_table_rm[CPU_CYCLES_PENTIUM];\n\tm_cycle_table_pm = cycle_table_pm[CPU_CYCLES_PENTIUM];\n}\n\nstatic CPU_RESET( pentium )\n{\n\tzero_state();\n\tvtlb_flush_dynamic(m_vtlb);\n\n\tm_sreg[CS].selector = 0xf000;\n\tm_sreg[CS].base     = 0xffff0000;\n\tm_sreg[CS].limit    = 0xffff;\n\tm_sreg[CS].flags    = 0x009b;\n\n\tm_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000;\n\tm_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff;\n\tm_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092;\n\n\tm_idtr.base = 0;\n\tm_idtr.limit = 0x3ff;\n\n\tm_a20_mask = ~0;\n\n\tm_cr[0] = 0x00000010;\n\tm_eflags = 0x00200000;\n\tm_eflags_mask = 0x003f7fd7;\n\tm_eip = 0xfff0;\n\tm_mxcsr = 0x1f80;\n\tm_smm = false;\n\tm_smi_latched = false;\n\tm_smbase = 0x30000;\n\tm_nmi_masked = false;\n\tm_nmi_latched = false;\n\n\tx87_reset();\n\n\t// [11:8] Family\n\t// [ 7:4] Model\n\t// [ 3:0] Stepping ID\n\t// Family 5 (Pentium), Model 2 (75 - 200MHz), Stepping 5\n\tREG32(EAX) = 0;\n\tREG32(EDX) = (5 << 8) | (2 << 4) | (5);\n\n\tm_cpuid_id0 = 0x756e6547;   // Genu\n\tm_cpuid_id1 = 0x49656e69;   // ineI\n\tm_cpuid_id2 = 0x6c65746e;   // ntel\n\n\tm_cpuid_max_input_value_eax = 0x01;\n\tm_cpu_version = REG32(EDX);\n\n\t// [ 0:0] FPU on chip\n\t// [ 2:2] I/O breakpoints\n\t// [ 4:4] Time Stamp Counter\n\t// [ 5:5] Pentium CPU style model specific registers\n\t// [ 7:7] Machine Check Exception\n\t// [ 8:8] CMPXCHG8B instruction\n\tm_feature_flags = 0x000001bf;\n\n\tCHANGE_PC(m_eip);\n}\n\n/*****************************************************************************/\n/* Cyrix MediaGX */\n\n\nstatic CPU_INIT( mediagx )\n{\n\t// probably 32 unified\n\ti386_common_init(32);\n\n\tbuild_x87_opcode_table();\n\tbuild_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM | OP_CYRIX);\n\tm_cycle_table_rm = cycle_table_rm[CPU_CYCLES_MEDIAGX];\n\tm_cycle_table_pm = cycle_table_pm[CPU_CYCLES_MEDIAGX];\n}\n\nstatic CPU_RESET( mediagx )\n{\n\tzero_state();\n\tvtlb_flush_dynamic(m_vtlb);\n\n\tm_sreg[CS].selector = 0xf000;\n\tm_sreg[CS].base     = 0xffff0000;\n\tm_sreg[CS].limit    = 0xffff;\n\tm_sreg[CS].flags    = 0x009b;\n\n\tm_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000;\n\tm_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff;\n\tm_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092;\n\n\tm_idtr.base = 0;\n\tm_idtr.limit = 0x3ff;\n\n\tm_a20_mask = ~0;\n\n\tm_cr[0] = 0x00000010;\n\tm_eflags = 0x00200000;\n\tm_eflags_mask = 0x00277fd7; /* TODO: is this correct? */\n\tm_eip = 0xfff0;\n\tm_smm = false;\n\tm_smi_latched = false;\n\tm_nmi_masked = false;\n\tm_nmi_latched = false;\n\n\tx87_reset();\n\n\t// [11:8] Family\n\t// [ 7:4] Model\n\t// [ 3:0] Stepping ID\n\t// Family 4, Model 4 (MediaGX)\n\tREG32(EAX) = 0;\n\tREG32(EDX) = (4 << 8) | (4 << 4) | (1); /* TODO: is this correct? */\n\n\tm_cpuid_id0 = 0x69727943;   // Cyri\n\tm_cpuid_id1 = 0x736e4978;   // xIns\n\tm_cpuid_id2 = 0x6d616574;   // tead\n\n\tm_cpuid_max_input_value_eax = 0x01;\n\tm_cpu_version = REG32(EDX);\n\n\t// [ 0:0] FPU on chip\n\tm_feature_flags = 0x00000001;\n\n\tCHANGE_PC(m_eip);\n}\n\n/*****************************************************************************/\n/* Intel Pentium Pro */\n\nstatic CPU_INIT( pentium_pro )\n{\n\t// 64 dtlb small, 32 itlb\n\ti386_common_init(96);\n\n\tbuild_x87_opcode_table();\n\tbuild_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM | OP_PPRO);\n\tm_cycle_table_rm = cycle_table_rm[CPU_CYCLES_PENTIUM];  // TODO: generate own cycle tables\n\tm_cycle_table_pm = cycle_table_pm[CPU_CYCLES_PENTIUM];  // TODO: generate own cycle tables\n}\n\nstatic CPU_RESET( pentium_pro )\n{\n\tzero_state();\n\tvtlb_flush_dynamic(m_vtlb);\n\n\tm_sreg[CS].selector = 0xf000;\n\tm_sreg[CS].base     = 0xffff0000;\n\tm_sreg[CS].limit    = 0xffff;\n\tm_sreg[CS].flags    = 0x009b;\n\n\tm_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000;\n\tm_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff;\n\tm_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092;\n\n\tm_idtr.base = 0;\n\tm_idtr.limit = 0x3ff;\n\n\tm_a20_mask = ~0;\n\n\tm_cr[0] = 0x60000010;\n\tm_eflags = 0x00200000;\n\tm_eflags_mask = 0x00277fd7; /* TODO: is this correct? */\n\tm_eip = 0xfff0;\n\tm_mxcsr = 0x1f80;\n\tm_smm = false;\n\tm_smi_latched = false;\n\tm_smbase = 0x30000;\n\tm_nmi_masked = false;\n\tm_nmi_latched = false;\n\n\tx87_reset();\n\n\t// [11:8] Family\n\t// [ 7:4] Model\n\t// [ 3:0] Stepping ID\n\t// Family 6, Model 1 (Pentium Pro)\n\tREG32(EAX) = 0;\n\tREG32(EDX) = (6 << 8) | (1 << 4) | (1); /* TODO: is this correct? */\n\n\tm_cpuid_id0 = 0x756e6547;   // Genu\n\tm_cpuid_id1 = 0x49656e69;   // ineI\n\tm_cpuid_id2 = 0x6c65746e;   // ntel\n\n\tm_cpuid_max_input_value_eax = 0x02;\n\tm_cpu_version = REG32(EDX);\n\n\t// [ 0:0] FPU on chip\n\t// [ 2:2] I/O breakpoints\n\t// [ 4:4] Time Stamp Counter\n\t// [ 5:5] Pentium CPU style model specific registers\n\t// [ 7:7] Machine Check Exception\n\t// [ 8:8] CMPXCHG8B instruction\n\t// [15:15] CMOV and FCMOV\n\t// No MMX\n\tm_feature_flags = 0x000081bf;\n\n\tCHANGE_PC(m_eip);\n}\n\n/*****************************************************************************/\n/* Intel Pentium MMX */\n\nstatic CPU_INIT( pentium_mmx )\n{\n\t// 64 dtlb small, 8 dtlb large, 32 itlb small, 2 itlb large\n\ti386_common_init(96);\n\n\tbuild_x87_opcode_table();\n\tbuild_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM | OP_MMX);\n\tm_cycle_table_rm = cycle_table_rm[CPU_CYCLES_PENTIUM];  // TODO: generate own cycle tables\n\tm_cycle_table_pm = cycle_table_pm[CPU_CYCLES_PENTIUM];  // TODO: generate own cycle tables\n}\n\nstatic CPU_RESET( pentium_mmx )\n{\n\tzero_state();\n\tvtlb_flush_dynamic(m_vtlb);\n\n\tm_sreg[CS].selector = 0xf000;\n\tm_sreg[CS].base     = 0xffff0000;\n\tm_sreg[CS].limit    = 0xffff;\n\tm_sreg[CS].flags    = 0x009b;\n\n\tm_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000;\n\tm_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff;\n\tm_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092;\n\n\tm_idtr.base = 0;\n\tm_idtr.limit = 0x3ff;\n\n\tm_a20_mask = ~0;\n\n\tm_cr[0] = 0x60000010;\n\tm_eflags = 0x00200000;\n\tm_eflags_mask = 0x00277fd7; /* TODO: is this correct? */\n\tm_eip = 0xfff0;\n\tm_mxcsr = 0x1f80;\n\tm_smm = false;\n\tm_smi_latched = false;\n\tm_smbase = 0x30000;\n\tm_nmi_masked = false;\n\tm_nmi_latched = false;\n\n\tx87_reset();\n\n\t// [11:8] Family\n\t// [ 7:4] Model\n\t// [ 3:0] Stepping ID\n\t// Family 5, Model 4 (P55C)\n\tREG32(EAX) = 0;\n\tREG32(EDX) = (5 << 8) | (4 << 4) | (1);\n\n\tm_cpuid_id0 = 0x756e6547;   // Genu\n\tm_cpuid_id1 = 0x49656e69;   // ineI\n\tm_cpuid_id2 = 0x6c65746e;   // ntel\n\n\tm_cpuid_max_input_value_eax = 0x01;\n\tm_cpu_version = REG32(EDX);\n\n\t// [ 0:0] FPU on chip\n\t// [ 2:2] I/O breakpoints\n\t// [ 4:4] Time Stamp Counter\n\t// [ 5:5] Pentium CPU style model specific registers\n\t// [ 7:7] Machine Check Exception\n\t// [ 8:8] CMPXCHG8B instruction\n\t// [23:23] MMX instructions\n\tm_feature_flags = 0x008001bf;\n\n\tCHANGE_PC(m_eip);\n}\n\n/*****************************************************************************/\n/* Intel Pentium II */\n\nstatic CPU_INIT( pentium2 )\n{\n\t// 64 dtlb small, 8 dtlb large, 32 itlb small, 2 itlb large\n\ti386_common_init(96);\n\n\tbuild_x87_opcode_table();\n\tbuild_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM | OP_PPRO | OP_MMX);\n\tm_cycle_table_rm = cycle_table_rm[CPU_CYCLES_PENTIUM];  // TODO: generate own cycle tables\n\tm_cycle_table_pm = cycle_table_pm[CPU_CYCLES_PENTIUM];  // TODO: generate own cycle tables\n}\n\nstatic CPU_RESET( pentium2 )\n{\n\tzero_state();\n\tvtlb_flush_dynamic(m_vtlb);\n\n\tm_sreg[CS].selector = 0xf000;\n\tm_sreg[CS].base     = 0xffff0000;\n\tm_sreg[CS].limit    = 0xffff;\n\tm_sreg[CS].flags    = 0x009b;\n\n\tm_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000;\n\tm_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff;\n\tm_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092;\n\n\tm_idtr.base = 0;\n\tm_idtr.limit = 0x3ff;\n\n\tm_a20_mask = ~0;\n\n\tm_cr[0] = 0x60000010;\n\tm_eflags = 0x00200000;\n\tm_eflags_mask = 0x00277fd7; /* TODO: is this correct? */\n\tm_eip = 0xfff0;\n\tm_mxcsr = 0x1f80;\n\tm_smm = false;\n\tm_smi_latched = false;\n\tm_smbase = 0x30000;\n\tm_nmi_masked = false;\n\tm_nmi_latched = false;\n\n\tx87_reset();\n\n\t// [11:8] Family\n\t// [ 7:4] Model\n\t// [ 3:0] Stepping ID\n\t// Family 6, Model 3 (Pentium II / Klamath)\n\tREG32(EAX) = 0;\n\tREG32(EDX) = (6 << 8) | (3 << 4) | (1); /* TODO: is this correct? */\n\n\tm_cpuid_id0 = 0x756e6547;   // Genu\n\tm_cpuid_id1 = 0x49656e69;   // ineI\n\tm_cpuid_id2 = 0x6c65746e;   // ntel\n\n\tm_cpuid_max_input_value_eax = 0x02;\n\tm_cpu_version = REG32(EDX);\n\n\t// [ 0:0] FPU on chip\n\tm_feature_flags = 0x008081bf;       // TODO: enable relevant flags here\n\n\tCHANGE_PC(m_eip);\n}\n\n/*****************************************************************************/\n/* Intel Pentium III */\n\nstatic CPU_INIT( pentium3 )\n{\n\t// 64 dtlb small, 8 dtlb large, 32 itlb small, 2 itlb large\n\ti386_common_init(96);\n\n\tbuild_x87_opcode_table();\n\tbuild_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM | OP_PPRO | OP_MMX | OP_SSE);\n\tm_cycle_table_rm = cycle_table_rm[CPU_CYCLES_PENTIUM];  // TODO: generate own cycle tables\n\tm_cycle_table_pm = cycle_table_pm[CPU_CYCLES_PENTIUM];  // TODO: generate own cycle tables\n}\n\nstatic CPU_RESET( pentium3 )\n{\n\tzero_state();\n\tvtlb_flush_dynamic(m_vtlb);\n\n\tm_sreg[CS].selector = 0xf000;\n\tm_sreg[CS].base     = 0xffff0000;\n\tm_sreg[CS].limit    = 0xffff;\n\tm_sreg[CS].flags    = 0x009b;\n\n\tm_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000;\n\tm_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff;\n\tm_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092;\n\n\tm_idtr.base = 0;\n\tm_idtr.limit = 0x3ff;\n\n\tm_a20_mask = ~0;\n\n\tm_cr[0] = 0x60000010;\n\tm_eflags = 0x00200000;\n\tm_eflags_mask = 0x00277fd7; /* TODO: is this correct? */\n\tm_eip = 0xfff0;\n\tm_mxcsr = 0x1f80;\n\tm_smm = false;\n\tm_smi_latched = false;\n\tm_smbase = 0x30000;\n\tm_nmi_masked = false;\n\tm_nmi_latched = false;\n\n\tx87_reset();\n\n\t// [11:8] Family\n\t// [ 7:4] Model\n\t// [ 3:0] Stepping ID\n\t// Family 6, Model 8 (Pentium III / Coppermine)\n\tREG32(EAX) = 0;\n\tREG32(EDX) = (6 << 8) | (8 << 4) | (10);\n\n\tm_cpuid_id0 = 0x756e6547;   // Genu\n\tm_cpuid_id1 = 0x49656e69;   // ineI\n\tm_cpuid_id2 = 0x6c65746e;   // ntel\n\n\tm_cpuid_max_input_value_eax = 0x03;\n\tm_cpu_version = REG32(EDX);\n\n\t// [ 0:0] FPU on chip\n\t// [ 4:4] Time Stamp Counter\n\t// [ D:D] PTE Global Bit\n\tm_feature_flags = 0x00002011;       // TODO: enable relevant flags here\n\n\tCHANGE_PC(m_eip);\n}\n\n/*****************************************************************************/\n/* Intel Pentium 4 */\n\nstatic CPU_INIT( pentium4 )\n{\n\t// 128 dtlb, 64 itlb\n\ti386_common_init(196);\n\n\tbuild_x87_opcode_table();\n\tbuild_opcode_table(OP_I386 | OP_FPU | OP_I486 | OP_PENTIUM | OP_PPRO | OP_MMX | OP_SSE | OP_SSE2);\n\tm_cycle_table_rm = cycle_table_rm[CPU_CYCLES_PENTIUM];  // TODO: generate own cycle tables\n\tm_cycle_table_pm = cycle_table_pm[CPU_CYCLES_PENTIUM];  // TODO: generate own cycle tables\n}\n\nstatic CPU_RESET( pentium4 )\n{\n\tzero_state();\n\tvtlb_flush_dynamic(m_vtlb);\n\n\tm_sreg[CS].selector = 0xf000;\n\tm_sreg[CS].base     = 0xffff0000;\n\tm_sreg[CS].limit    = 0xffff;\n\tm_sreg[CS].flags    = 0x009b;\n\n\tm_sreg[DS].base = m_sreg[ES].base = m_sreg[FS].base = m_sreg[GS].base = m_sreg[SS].base = 0x00000000;\n\tm_sreg[DS].limit = m_sreg[ES].limit = m_sreg[FS].limit = m_sreg[GS].limit = m_sreg[SS].limit = 0xffff;\n\tm_sreg[DS].flags = m_sreg[ES].flags = m_sreg[FS].flags = m_sreg[GS].flags = m_sreg[SS].flags = 0x0092;\n\n\tm_idtr.base = 0;\n\tm_idtr.limit = 0x3ff;\n\n\tm_a20_mask = ~0;\n\n\tm_cr[0] = 0x60000010;\n\tm_eflags = 0x00200000;\n\tm_eflags_mask = 0x00277fd7; /* TODO: is this correct? */\n\tm_eip = 0xfff0;\n\tm_mxcsr = 0x1f80;\n\tm_smm = false;\n\tm_smi_latched = false;\n\tm_smbase = 0x30000;\n\tm_nmi_masked = false;\n\tm_nmi_latched = false;\n\n\tx87_reset();\n\n\t// [27:20] Extended family\n\t// [19:16] Extended model\n\t// [13:12] Type\n\t// [11: 8] Family\n\t// [ 7: 4] Model\n\t// [ 3: 0] Stepping ID\n\t// Family 15, Model 0 (Pentium 4 / Willamette)\n\tREG32(EAX) = 0;\n\tREG32(EDX) = (0 << 20) | (0xf << 8) | (0 << 4) | (1);\n\n\tm_cpuid_id0 = 0x756e6547;   // Genu\n\tm_cpuid_id1 = 0x49656e69;   // ineI\n\tm_cpuid_id2 = 0x6c65746e;   // ntel\n\n\tm_cpuid_max_input_value_eax = 0x02;\n\tm_cpu_version = REG32(EDX);\n\n\t// [ 0:0] FPU on chip\n\tm_feature_flags = 0x00000001;       // TODO: enable relevant flags here\n\n\tCHANGE_PC(m_eip);\n}\n\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386.old/i386.h",
    "content": "#pragma once\n\n#ifndef __I386INTF_H__\n#define __I386INTF_H__\n\n#define INPUT_LINE_A20      1\n#define INPUT_LINE_SMI      2\n\nstruct i386_interface\n{\n\tdevcb_write_line smiact;\n};\n\n// mingw has this defined for 32-bit compiles\n#undef i386\n\nDECLARE_LEGACY_CPU_DEVICE(I386, i386);\nDECLARE_LEGACY_CPU_DEVICE(I386SX, i386SX);\nDECLARE_LEGACY_CPU_DEVICE(I486, i486);\nDECLARE_LEGACY_CPU_DEVICE(PENTIUM, pentium);\nDECLARE_LEGACY_CPU_DEVICE(MEDIAGX, mediagx);\nDECLARE_LEGACY_CPU_DEVICE(PENTIUM_PRO, pentium_pro);\nDECLARE_LEGACY_CPU_DEVICE(PENTIUM_MMX, pentium_mmx);\nDECLARE_LEGACY_CPU_DEVICE(PENTIUM2, pentium2);\nDECLARE_LEGACY_CPU_DEVICE(PENTIUM3, pentium3);\nDECLARE_LEGACY_CPU_DEVICE(PENTIUM4, pentium4);\n\n\n\n#endif /* __I386INTF_H__ */\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386.old/i386dasm.c",
    "content": "/*\n   i386 Disassembler\n\n   Written by Ville Linde\n*/\n\n//#include \"emu.h\"\n\nenum\n{\n\tPARAM_REG = 1,      /* 16 or 32-bit register */\n\tPARAM_REG8,         /* 8-bit register */\n\tPARAM_REG16,        /* 16-bit register */\n\tPARAM_REG32,        /* 32-bit register */\n\tPARAM_REG3264,      /* 32-bit or 64-bit register */\n\tPARAM_REG2_32,      /* 32-bit register */\n\tPARAM_MMX,          /* MMX register */\n\tPARAM_MMX2,         /* MMX register in modrm */\n\tPARAM_XMM,          /* XMM register */\n\tPARAM_RM,           /* 16 or 32-bit memory or register */\n\tPARAM_RM8,          /* 8-bit memory or register */\n\tPARAM_RM16,         /* 16-bit memory or register */\n\tPARAM_RM32,         /* 32-bit memory or register */\n\tPARAM_RMPTR,        /* 16 or 32-bit memory or register */\n\tPARAM_RMPTR8,       /* 8-bit memory or register */\n\tPARAM_RMPTR16,      /* 16-bit memory or register */\n\tPARAM_RMPTR32,      /* 32-bit memory or register */\n\tPARAM_RMXMM,        /* 32 or 64-bit memory or register */\n\tPARAM_REGORXMM,     /* 32 or 64-bit register or XMM register */\n\tPARAM_M64,          /* 64-bit memory */\n\tPARAM_M64PTR,       /* 64-bit memory */\n\tPARAM_MMXM,         /* 64-bit memory or MMX register */\n\tPARAM_XMMM,         /* 128-bit memory or XMM register */\n\tPARAM_I4,           /* 4-bit signed immediate */\n\tPARAM_I8,           /* 8-bit signed immediate */\n\tPARAM_I16,          /* 16-bit signed immediate */\n\tPARAM_UI8,          /* 8-bit unsigned immediate */\n\tPARAM_UI16,         /* 16-bit unsigned immediate */\n\tPARAM_IMM,          /* 16 or 32-bit immediate */\n\tPARAM_IMM64,        /* 16, 32 or 64-bit immediate */\n\tPARAM_ADDR,         /* 16:16 or 16:32 address */\n\tPARAM_REL,          /* 16 or 32-bit PC-relative displacement */\n\tPARAM_REL8,         /* 8-bit PC-relative displacement */\n\tPARAM_MEM_OFFS,     /* 16 or 32-bit mem offset */\n\tPARAM_PREIMP,       /* prefix with implicit register */\n\tPARAM_SREG,         /* segment register */\n\tPARAM_CREG,         /* control register */\n\tPARAM_DREG,         /* debug register */\n\tPARAM_TREG,         /* test register */\n\tPARAM_1,            /* used by shift/rotate instructions */\n\tPARAM_AL,\n\tPARAM_CL,\n\tPARAM_DL,\n\tPARAM_BL,\n\tPARAM_AH,\n\tPARAM_CH,\n\tPARAM_DH,\n\tPARAM_BH,\n\tPARAM_DX,\n\tPARAM_EAX,          /* EAX or AX */\n\tPARAM_ECX,          /* ECX or CX */\n\tPARAM_EDX,          /* EDX or DX */\n\tPARAM_EBX,          /* EBX or BX */\n\tPARAM_ESP,          /* ESP or SP */\n\tPARAM_EBP,          /* EBP or BP */\n\tPARAM_ESI,          /* ESI or SI */\n\tPARAM_EDI,          /* EDI or DI */\n\tPARAM_XMM0,\n\tPARAM_XMM64,            /* 64-bit memory or XMM register */\n\tPARAM_XMM32,            /* 32-bit memory or XMM register */\n\tPARAM_XMM16,            /* 16-bit memory or XMM register */\n};\n\nenum\n{\n\tMODRM = 1,\n\tGROUP,\n\tFPU,\n\tOP_SIZE,\n\tADDR_SIZE,\n\tTWO_BYTE,\n\tPREFIX,\n\tSEG_CS,\n\tSEG_DS,\n\tSEG_ES,\n\tSEG_FS,\n\tSEG_GS,\n\tSEG_SS,\n\tISREX,\n\tTHREE_BYTE          /* [prefix] 0f op1 op2 and then mod/rm */\n};\n\n#define FLAGS_MASK          0x0ff\n#define VAR_NAME            0x100\n#define VAR_NAME4           0x200\n#define ALWAYS64            0x400\n#define SPECIAL64           0x800\n#define SPECIAL64_ENT(x)    (SPECIAL64 | ((x) << 24))\n\nstruct I386_OPCODE {\n\tconst char *mnemonic;\n\tUINT32 flags;\n\tUINT32 param1;\n\tUINT32 param2;\n\tUINT32 param3;\n\toffs_t dasm_flags;\n};\n\nstruct GROUP_OP {\n\tchar mnemonic[32];\n\tconst I386_OPCODE *opcode;\n};\n\nstatic const UINT8 *opcode_ptr;\nstatic const UINT8 *opcode_ptr_base;\n\nstatic const I386_OPCODE i386_opcode_table1[256] =\n{\n\t// 0x00\n\t{\"add\",             MODRM,          PARAM_RM8,          PARAM_REG8,         0               },\n\t{\"add\",             MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"add\",             MODRM,          PARAM_REG8,         PARAM_RM8,          0               },\n\t{\"add\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"add\",             0,              PARAM_AL,           PARAM_UI8,          0               },\n\t{\"add\",             0,              PARAM_EAX,          PARAM_IMM,          0               },\n\t{\"push    es\",      0,              0,                  0,                  0               },\n\t{\"pop     es\",      0,              0,                  0,                  0               },\n\t{\"or\",              MODRM,          PARAM_RM8,          PARAM_REG8,         0               },\n\t{\"or\",              MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"or\",              MODRM,          PARAM_REG8,         PARAM_RM8,          0               },\n\t{\"or\",              MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"or\",              0,              PARAM_AL,           PARAM_UI8,          0               },\n\t{\"or\",              0,              PARAM_EAX,          PARAM_IMM,          0               },\n\t{\"push    cs\",      0,              0,                  0,                  0               },\n\t{\"two_byte\",        TWO_BYTE,       0,                  0,                  0               },\n\t// 0x10\n\t{\"adc\",             MODRM,          PARAM_RM8,          PARAM_REG8,         0               },\n\t{\"adc\",             MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"adc\",             MODRM,          PARAM_REG8,         PARAM_RM8,          0               },\n\t{\"adc\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"adc\",             0,              PARAM_AL,           PARAM_UI8,          0               },\n\t{\"adc\",             0,              PARAM_EAX,          PARAM_IMM,          0               },\n\t{\"push    ss\",      0,              0,                  0,                  0               },\n\t{\"pop     ss\",      0,              0,                  0,                  0               },\n\t{\"sbb\",             MODRM,          PARAM_RM8,          PARAM_REG8,         0               },\n\t{\"sbb\",             MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"sbb\",             MODRM,          PARAM_REG8,         PARAM_RM8,          0               },\n\t{\"sbb\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"sbb\",             0,              PARAM_AL,           PARAM_UI8,          0               },\n\t{\"sbb\",             0,              PARAM_EAX,          PARAM_IMM,          0               },\n\t{\"push    ds\",      0,              0,                  0,                  0               },\n\t{\"pop     ds\",      0,              0,                  0,                  0               },\n\t// 0x20\n\t{\"and\",             MODRM,          PARAM_RM8,          PARAM_REG8,         0               },\n\t{\"and\",             MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"and\",             MODRM,          PARAM_REG8,         PARAM_RM8,          0               },\n\t{\"and\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"and\",             0,              PARAM_AL,           PARAM_UI8,          0               },\n\t{\"and\",             0,              PARAM_EAX,          PARAM_IMM,          0               },\n\t{\"seg_es\",          SEG_ES,         0,                  0,                  0               },\n\t{\"daa\",             0,              0,                  0,                  0               },\n\t{\"sub\",             MODRM,          PARAM_RM8,          PARAM_REG8,         0               },\n\t{\"sub\",             MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"sub\",             MODRM,          PARAM_REG8,         PARAM_RM8,          0               },\n\t{\"sub\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"sub\",             0,              PARAM_AL,           PARAM_UI8,          0               },\n\t{\"sub\",             0,              PARAM_EAX,          PARAM_IMM,          0               },\n\t{\"seg_cs\",          SEG_CS,         0,                  0,                  0               },\n\t{\"das\",             0,              0,                  0,                  0               },\n\t// 0x30\n\t{\"xor\",             MODRM,          PARAM_RM8,          PARAM_REG8,         0               },\n\t{\"xor\",             MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"xor\",             MODRM,          PARAM_REG8,         PARAM_RM8,          0               },\n\t{\"xor\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"xor\",             0,              PARAM_AL,           PARAM_UI8,          0               },\n\t{\"xor\",             0,              PARAM_EAX,          PARAM_IMM,          0               },\n\t{\"seg_ss\",          SEG_SS,         0,                  0,                  0               },\n\t{\"aaa\",             0,              0,                  0,                  0               },\n\t{\"cmp\",             MODRM,          PARAM_RM8,          PARAM_REG8,         0               },\n\t{\"cmp\",             MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"cmp\",             MODRM,          PARAM_REG8,         PARAM_RM8,          0               },\n\t{\"cmp\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmp\",             0,              PARAM_AL,           PARAM_UI8,          0               },\n\t{\"cmp\",             0,              PARAM_EAX,          PARAM_IMM,          0               },\n\t{\"seg_ds\",          SEG_DS,         0,                  0,                  0               },\n\t{\"aas\",             0,              0,                  0,                  0               },\n\t// 0x40\n\t{\"inc\",             ISREX,          PARAM_EAX,          0,                  0               },\n\t{\"inc\",             ISREX,          PARAM_ECX,          0,                  0               },\n\t{\"inc\",             ISREX,          PARAM_EDX,          0,                  0               },\n\t{\"inc\",             ISREX,          PARAM_EBX,          0,                  0               },\n\t{\"inc\",             ISREX,          PARAM_ESP,          0,                  0               },\n\t{\"inc\",             ISREX,          PARAM_EBP,          0,                  0               },\n\t{\"inc\",             ISREX,          PARAM_ESI,          0,                  0               },\n\t{\"inc\",             ISREX,          PARAM_EDI,          0,                  0               },\n\t{\"dec\",             ISREX,          PARAM_EAX,          0,                  0               },\n\t{\"dec\",             ISREX,          PARAM_ECX,          0,                  0               },\n\t{\"dec\",             ISREX,          PARAM_EDX,          0,                  0               },\n\t{\"dec\",             ISREX,          PARAM_EBX,          0,                  0               },\n\t{\"dec\",             ISREX,          PARAM_ESP,          0,                  0               },\n\t{\"dec\",             ISREX,          PARAM_EBP,          0,                  0               },\n\t{\"dec\",             ISREX,          PARAM_ESI,          0,                  0               },\n\t{\"dec\",             ISREX,          PARAM_EDI,          0,                  0               },\n\t// 0x50\n\t{\"push\",            ALWAYS64,       PARAM_EAX,          0,                  0               },\n\t{\"push\",            ALWAYS64,       PARAM_ECX,          0,                  0               },\n\t{\"push\",            ALWAYS64,       PARAM_EDX,          0,                  0               },\n\t{\"push\",            ALWAYS64,       PARAM_EBX,          0,                  0               },\n\t{\"push\",            ALWAYS64,       PARAM_ESP,          0,                  0               },\n\t{\"push\",            ALWAYS64,       PARAM_EBP,          0,                  0               },\n\t{\"push\",            ALWAYS64,       PARAM_ESI,          0,                  0               },\n\t{\"push\",            ALWAYS64,       PARAM_EDI,          0,                  0               },\n\t{\"pop\",             ALWAYS64,       PARAM_EAX,          0,                  0               },\n\t{\"pop\",             ALWAYS64,       PARAM_ECX,          0,                  0               },\n\t{\"pop\",             ALWAYS64,       PARAM_EDX,          0,                  0               },\n\t{\"pop\",             ALWAYS64,       PARAM_EBX,          0,                  0               },\n\t{\"pop\",             ALWAYS64,       PARAM_ESP,          0,                  0               },\n\t{\"pop\",             ALWAYS64,       PARAM_EBP,          0,                  0               },\n\t{\"pop\",             ALWAYS64,       PARAM_ESI,          0,                  0               },\n\t{\"pop\",             ALWAYS64,       PARAM_EDI,          0,                  0               },\n\t// 0x60\n\t{\"pusha\\0pushad\\0<invalid>\",VAR_NAME,0,                 0,                  0               },\n\t{\"popa\\0popad\\0<invalid>\",  VAR_NAME,0,                 0,                  0               },\n\t{\"bound\",           MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"arpl\",            MODRM | SPECIAL64_ENT(0),PARAM_RM,  PARAM_REG16,        0               },\n\t{\"seg_fs\",          SEG_FS,         0,                  0,                  0               },\n\t{\"seg_gs\",          SEG_GS,         0,                  0,                  0               },\n\t{\"op_size\",         OP_SIZE,        0,                  0,                  0               },\n\t{\"addr_size\",       ADDR_SIZE,      0,                  0,                  0               },\n\t{\"push\",            0,              PARAM_IMM,          0,                  0               },\n\t{\"imul\",            MODRM,          PARAM_REG,          PARAM_RM,           PARAM_IMM       },\n\t{\"push\",            0,              PARAM_I8,           0,                  0               },\n\t{\"imul\",            MODRM,          PARAM_REG,          PARAM_RM,           PARAM_I8        },\n\t{\"insb\",            0,              0,                  0,                  0               },\n\t{\"insw\\0insd\\0insd\",VAR_NAME,       0,                  0,                  0               },\n\t{\"outsb\",           0,              PARAM_PREIMP,       0,                  0               },\n\t{\"outsw\\0outsd\\0outsd\",VAR_NAME,    PARAM_PREIMP,       0,                  0               },\n\t// 0x70\n\t{\"jo\",              0,              PARAM_REL8,         0,                  0               },\n\t{\"jno\",             0,              PARAM_REL8,         0,                  0               },\n\t{\"jb\",              0,              PARAM_REL8,         0,                  0               },\n\t{\"jae\",             0,              PARAM_REL8,         0,                  0               },\n\t{\"je\",              0,              PARAM_REL8,         0,                  0               },\n\t{\"jne\",             0,              PARAM_REL8,         0,                  0               },\n\t{\"jbe\",             0,              PARAM_REL8,         0,                  0               },\n\t{\"ja\",              0,              PARAM_REL8,         0,                  0               },\n\t{\"js\",              0,              PARAM_REL8,         0,                  0               },\n\t{\"jns\",             0,              PARAM_REL8,         0,                  0               },\n\t{\"jp\",              0,              PARAM_REL8,         0,                  0               },\n\t{\"jnp\",             0,              PARAM_REL8,         0,                  0               },\n\t{\"jl\",              0,              PARAM_REL8,         0,                  0               },\n\t{\"jge\",             0,              PARAM_REL8,         0,                  0               },\n\t{\"jle\",             0,              PARAM_REL8,         0,                  0               },\n\t{\"jg\",              0,              PARAM_REL8,         0,                  0               },\n\t// 0x80\n\t{\"group80\",         GROUP,          0,                  0,                  0               },\n\t{\"group81\",         GROUP,          0,                  0,                  0               },\n\t{\"group80\",         GROUP,          0,                  0,                  0               },\n\t{\"group83\",         GROUP,          0,                  0,                  0               },\n\t{\"test\",            MODRM,          PARAM_RM8,          PARAM_REG8,         0               },\n\t{\"test\",            MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"xchg\",            MODRM,          PARAM_REG8,         PARAM_RM8,          0               },\n\t{\"xchg\",            MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"mov\",             MODRM,          PARAM_RM8,          PARAM_REG8,         0               },\n\t{\"mov\",             MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"mov\",             MODRM,          PARAM_REG8,         PARAM_RM8,          0               },\n\t{\"mov\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"mov\",             MODRM,          PARAM_RM,           PARAM_SREG,         0               },\n\t{\"lea\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"mov\",             MODRM,          PARAM_SREG,         PARAM_RM,           0               },\n\t{\"pop\",             MODRM,          PARAM_RM,           0,                  0               },\n\t// 0x90\n\t{\"nop\\0???\\0???\\0pause\",    VAR_NAME4,          0,                  0,                  0               },\n\t{\"xchg\",            0,              PARAM_EAX,          PARAM_ECX,          0               },\n\t{\"xchg\",            0,              PARAM_EAX,          PARAM_EDX,          0               },\n\t{\"xchg\",            0,              PARAM_EAX,          PARAM_EBX,          0               },\n\t{\"xchg\",            0,              PARAM_EAX,          PARAM_ESP,          0               },\n\t{\"xchg\",            0,              PARAM_EAX,          PARAM_EBP,          0               },\n\t{\"xchg\",            0,              PARAM_EAX,          PARAM_ESI,          0               },\n\t{\"xchg\",            0,              PARAM_EAX,          PARAM_EDI,          0               },\n\t{\"cbw\\0cwde\\0cdqe\", VAR_NAME,       0,                  0,                  0               },\n\t{\"cwd\\0cdq\\0cqo\",   VAR_NAME,       0,                  0,                  0               },\n\t{\"call\",            ALWAYS64,       PARAM_ADDR,         0,                  0,              DASMFLAG_STEP_OVER},\n\t{\"wait\",            0,              0,                  0,                  0               },\n\t{\"pushf\\0pushfd\\0pushfq\",VAR_NAME,  0,                  0,                  0               },\n\t{\"popf\\0popfd\\0popfq\",VAR_NAME,     0,                  0,                  0               },\n\t{\"sahf\",            0,              0,                  0,                  0               },\n\t{\"lahf\",            0,              0,                  0,                  0               },\n\t// 0xa0\n\t{\"mov\",             0,              PARAM_AL,           PARAM_MEM_OFFS,     0               },\n\t{\"mov\",             0,              PARAM_EAX,          PARAM_MEM_OFFS,     0               },\n\t{\"mov\",             0,              PARAM_MEM_OFFS,     PARAM_AL,           0               },\n\t{\"mov\",             0,              PARAM_MEM_OFFS,     PARAM_EAX,          0               },\n\t{\"movsb\",           0,              PARAM_PREIMP,       0,                  0               },\n\t{\"movsw\\0movsd\\0movsq\",VAR_NAME,    PARAM_PREIMP,       0,                  0               },\n\t{\"cmpsb\",           0,              PARAM_PREIMP,       0,                  0               },\n\t{\"cmpsw\\0cmpsd\\0cmpsq\",VAR_NAME,    PARAM_PREIMP,       0,                  0               },\n\t{\"test\",            0,              PARAM_AL,           PARAM_UI8,          0               },\n\t{\"test\",            0,              PARAM_EAX,          PARAM_IMM,          0               },\n\t{\"stosb\",           0,              0,                  0,                  0               },\n\t{\"stosw\\0stosd\\0stosq\",VAR_NAME,    0,                  0,                  0               },\n\t{\"lodsb\",           0,              PARAM_PREIMP,       0,                  0               },\n\t{\"lodsw\\0lodsd\\0lodsq\",VAR_NAME,    PARAM_PREIMP,       0,                  0               },\n\t{\"scasb\",           0,              0,                  0,                  0               },\n\t{\"scasw\\0scasd\\0scasq\",VAR_NAME,    0,                  0,                  0               },\n\t// 0xb0\n\t{\"mov\",             0,              PARAM_AL,           PARAM_UI8,          0               },\n\t{\"mov\",             0,              PARAM_CL,           PARAM_UI8,          0               },\n\t{\"mov\",             0,              PARAM_DL,           PARAM_UI8,          0               },\n\t{\"mov\",             0,              PARAM_BL,           PARAM_UI8,          0               },\n\t{\"mov\",             0,              PARAM_AH,           PARAM_UI8,          0               },\n\t{\"mov\",             0,              PARAM_CH,           PARAM_UI8,          0               },\n\t{\"mov\",             0,              PARAM_DH,           PARAM_UI8,          0               },\n\t{\"mov\",             0,              PARAM_BH,           PARAM_UI8,          0               },\n\t{\"mov\",             0,              PARAM_EAX,          PARAM_IMM64,        0               },\n\t{\"mov\",             0,              PARAM_ECX,          PARAM_IMM64,        0               },\n\t{\"mov\",             0,              PARAM_EDX,          PARAM_IMM64,        0               },\n\t{\"mov\",             0,              PARAM_EBX,          PARAM_IMM64,        0               },\n\t{\"mov\",             0,              PARAM_ESP,          PARAM_IMM64,        0               },\n\t{\"mov\",             0,              PARAM_EBP,          PARAM_IMM64,        0               },\n\t{\"mov\",             0,              PARAM_ESI,          PARAM_IMM64,        0               },\n\t{\"mov\",             0,              PARAM_EDI,          PARAM_IMM64,        0               },\n\t// 0xc0\n\t{\"groupC0\",         GROUP,          0,                  0,                  0               },\n\t{\"groupC1\",         GROUP,          0,                  0,                  0               },\n\t{\"ret\",             0,              PARAM_UI16,         0,                  0,              DASMFLAG_STEP_OUT},\n\t{\"ret\",             0,              0,                  0,                  0,              DASMFLAG_STEP_OUT},\n\t{\"les\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"lds\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"mov\",             MODRM,          PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"mov\",             MODRM,          PARAM_RMPTR,        PARAM_IMM,          0               },\n\t{\"enter\",           0,              PARAM_UI16,         PARAM_UI8,          0               },\n\t{\"leave\",           0,              0,                  0,                  0               },\n\t{\"retf\",            0,              PARAM_UI16,         0,                  0,              DASMFLAG_STEP_OUT},\n\t{\"retf\",            0,              0,                  0,                  0,              DASMFLAG_STEP_OUT},\n\t{\"int 3\",           0,              0,                  0,                  0,              DASMFLAG_STEP_OVER},\n\t{\"int\",             0,              PARAM_UI8,          0,                  0,              DASMFLAG_STEP_OVER},\n\t{\"into\",            0,              0,                  0,                  0               },\n\t{\"iret\",            0,              0,                  0,                  0,              DASMFLAG_STEP_OUT},\n\t// 0xd0\n\t{\"groupD0\",         GROUP,          0,                  0,                  0               },\n\t{\"groupD1\",         GROUP,          0,                  0,                  0               },\n\t{\"groupD2\",         GROUP,          0,                  0,                  0               },\n\t{\"groupD3\",         GROUP,          0,                  0,                  0               },\n\t{\"aam\",             0,              PARAM_UI8,          0,                  0               },\n\t{\"aad\",             0,              PARAM_UI8,          0,                  0               },\n\t{\"salc\",            0,              0,                  0,                  0               }, //AMD docs name it\n\t{\"xlat\",            0,              0,                  0,                  0               },\n\t{\"escape\",          FPU,            0,                  0,                  0               },\n\t{\"escape\",          FPU,            0,                  0,                  0               },\n\t{\"escape\",          FPU,            0,                  0,                  0               },\n\t{\"escape\",          FPU,            0,                  0,                  0               },\n\t{\"escape\",          FPU,            0,                  0,                  0               },\n\t{\"escape\",          FPU,            0,                  0,                  0               },\n\t{\"escape\",          FPU,            0,                  0,                  0               },\n\t{\"escape\",          FPU,            0,                  0,                  0               },\n\t// 0xe0\n\t{\"loopne\",          0,              PARAM_REL8,         0,                  0,              DASMFLAG_STEP_OVER},\n\t{\"loopz\",           0,              PARAM_REL8,         0,                  0,              DASMFLAG_STEP_OVER},\n\t{\"loop\",            0,              PARAM_REL8,         0,                  0,              DASMFLAG_STEP_OVER},\n\t{\"jcxz\\0jecxz\\0jrcxz\",VAR_NAME,     PARAM_REL8,         0,                  0               },\n\t{\"in\",              0,              PARAM_AL,           PARAM_UI8,          0               },\n\t{\"in\",              0,              PARAM_EAX,          PARAM_UI8,          0               },\n\t{\"out\",             0,              PARAM_UI8,          PARAM_AL,           0               },\n\t{\"out\",             0,              PARAM_UI8,          PARAM_EAX,          0               },\n\t{\"call\",            0,              PARAM_REL,          0,                  0,              DASMFLAG_STEP_OVER},\n\t{\"jmp\",             0,              PARAM_REL,          0,                  0               },\n\t{\"jmp\",             0,              PARAM_ADDR,         0,                  0               },\n\t{\"jmp\",             0,              PARAM_REL8,         0,                  0               },\n\t{\"in\",              0,              PARAM_AL,           PARAM_DX,           0               },\n\t{\"in\",              0,              PARAM_EAX,          PARAM_DX,           0               },\n\t{\"out\",             0,              PARAM_DX,           PARAM_AL,           0               },\n\t{\"out\",             0,              PARAM_DX,           PARAM_EAX,          0               },\n\t// 0xf0\n\t{\"lock\",            0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"repne\",           PREFIX,         0,                  0,                  0               },\n\t{\"rep\",             PREFIX,         0,                  0,                  0               },\n\t{\"hlt\",             0,              0,                  0,                  0               },\n\t{\"cmc\",             0,              0,                  0,                  0               },\n\t{\"groupF6\",         GROUP,          0,                  0,                  0               },\n\t{\"groupF7\",         GROUP,          0,                  0,                  0               },\n\t{\"clc\",             0,              0,                  0,                  0               },\n\t{\"stc\",             0,              0,                  0,                  0               },\n\t{\"cli\",             0,              0,                  0,                  0               },\n\t{\"sti\",             0,              0,                  0,                  0               },\n\t{\"cld\",             0,              0,                  0,                  0               },\n\t{\"std\",             0,              0,                  0,                  0               },\n\t{\"groupFE\",         GROUP,          0,                  0,                  0               },\n\t{\"groupFF\",         GROUP,          0,                  0,                  0               }\n};\n\nstatic const I386_OPCODE x64_opcode_alt[] =\n{\n\t{\"movsxd\",          MODRM | ALWAYS64,PARAM_REG,         PARAM_RMPTR32,      0               },\n};\n\nstatic const I386_OPCODE i386_opcode_table2[256] =\n{\n\t// 0x00\n\t{\"group0F00\",       GROUP,          0,                  0,                  0               },\n\t{\"group0F01\",       GROUP,          0,                  0,                  0               },\n\t{\"lar\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"lsl\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"syscall\",         0,              0,                  0,                  0               },\n\t{\"clts\",            0,              0,                  0,                  0               },\n\t{\"sysret\",          0,              0,                  0,                  0               },\n\t{\"invd\",            0,              0,                  0,                  0               },\n\t{\"wbinvd\",          0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"ud2\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"group0F0D\",           GROUP,              0,                  0,                  0               }, //AMD only\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t// 0x10\n\t{\"movups\\0\"\n\t\t\"movupd\\0\"\n\t\t\"movsd\\0\"\n\t\t\"movss\",            MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"movups\\0\"\n\t\t\"movupd\\0\"\n\t\t\"movsd\\0\"\n\t\t\"movss\",            MODRM|VAR_NAME4,PARAM_XMMM,         PARAM_XMM,          0               },\n\t{\"movlps\\0\"\n\t\t\"movlpd\\0\"\n\t\t\"movddup\\0\"\n\t\t\"movsldup\",     MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"movlps\\0\"\n\t\t\"movlpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMMM,         PARAM_XMM,          0               },\n\t{\"unpcklps\\0\"\n\t\t\"unpcklpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"unpckhps\\0\"\n\t\t\"unpckhpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"movhps\\0\"\n\t\t\"movhpd\\0\"\n\t\t\"???\\0\"\n\t\t\"movshdup\",     MODRM|VAR_NAME4,PARAM_XMMM,         PARAM_XMM,          0               },\n\t{\"movhps\\0\"\n\t\t\"movhpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"group0F18\",       GROUP,          0,                  0,                  0               },\n\t{\"nop_hint\",        0,              PARAM_RMPTR8,               0,                  0               },\n\t{\"nop_hint\",        0,              PARAM_RMPTR8,               0,                  0               },\n\t{\"nop_hint\",        0,              PARAM_RMPTR8,               0,                  0               },\n\t{\"nop_hint\",        0,              PARAM_RMPTR8,               0,                  0               },\n\t{\"nop_hint\",        0,              PARAM_RMPTR8,               0,                  0               },\n\t{\"nop_hint\",        0,              PARAM_RMPTR8,               0,                  0               },\n\t{\"nop_hint\",        0,              PARAM_RMPTR8,               0,                  0               },\n\t// 0x20\n\t{\"mov\",             MODRM,          PARAM_REG2_32,      PARAM_CREG,         0               },\n\t{\"mov\",             MODRM,          PARAM_REG2_32,      PARAM_DREG,         0               },\n\t{\"mov\",             MODRM,          PARAM_CREG,         PARAM_REG2_32,      0               },\n\t{\"mov\",             MODRM,          PARAM_DREG,         PARAM_REG2_32,      0               },\n\t{\"mov\",             MODRM,          PARAM_REG2_32,      PARAM_TREG,         0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"mov\",             MODRM,          PARAM_TREG,         PARAM_REG2_32,      0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"movaps\\0\"\n\t\t\"movapd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"movaps\\0\"\n\t\t\"movapd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMMM,         PARAM_XMM,          0               },\n\t{\"cvtpi2ps\\0\"\n\t\t\"cvtpi2pd\\0\"\n\t\t\"cvtsi2sd\\0\"\n\t\t\"cvtsi2ss\",     MODRM|VAR_NAME4,PARAM_XMM,          PARAM_RMXMM,        0               },\n\t{\"movntps\\0\"\n\t\t\"movntpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMMM,         PARAM_XMM,          0               },\n\t{\"cvttps2pi\\0\"\n\t\t\"cvttpd2pi\\0\"\n\t\t\"cvttsd2si\\0\"\n\t\t\"cvttss2si\",        MODRM|VAR_NAME4,PARAM_REGORXMM,     PARAM_XMMM,         0               },\n\t{\"cvtps2pi\\0\"\n\t\t\"cvtpd2pi\\0\"\n\t\t\"cvtsd2si\\0\"\n\t\t\"cvtss2si\",     MODRM|VAR_NAME4,PARAM_REGORXMM,     PARAM_XMMM,         0               },\n\t{\"ucomiss\\0\"\n\t\t\"ucomisd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"comiss\\0\"\n\t\t\"comisd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t// 0x30\n\t{\"wrmsr\",           0,              0,                  0,                  0               },\n\t{\"rdtsc\",           0,              0,                  0,                  0               },\n\t{\"rdmsr\",           0,              0,                  0,                  0               },\n\t{\"rdpmc\",           0,              0,                  0,                  0               },\n\t{\"sysenter\",        0,              0,                  0,                  0               },\n\t{\"sysexit\",         0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"three_byte\",          THREE_BYTE,         0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"three_byte\",          THREE_BYTE,         0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t// 0x40\n\t{\"cmovo\",           MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovno\",          MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovb\",           MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovae\",          MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmove\",           MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovne\",          MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovbe\",          MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmova\",           MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovs\",           MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovns\",          MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovpe\",          MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovpo\",          MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovl\",           MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovge\",          MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovle\",          MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"cmovg\",           MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t// 0x50\n\t{\"movmskps\\0\"\n\t\t\"movmskpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_REG3264,      PARAM_XMMM,         0               },\n\t{\"sqrtps\\0\"\n\t\t\"sqrtpd\\0\"\n\t\t\"sqrtsd\\0\"\n\t\t\"sqrtss\",           MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"rsqrtps\\0\"\n\t\t\"???\\0\"\n\t\t\"???\\0\"\n\t\t\"rsqrtss\",          MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"rcpps\\0\"\n\t\t\"???\\0\"\n\t\t\"???\\0\"\n\t\t\"rcpss\",            MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"andps\\0\"\n\t\t\"andpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"andnps\\0\"\n\t\t\"andnpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"orps\\0\"\n\t\t\"orpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"xorps\\0\"\n\t\t\"xorpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"addps\\0\"\n\t\t\"addpd\\0\"\n\t\t\"addsd\\0\"\n\t\t\"addss\",            MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"mulps\\0\"\n\t\t\"mulpd\\0\"\n\t\t\"mulsd\\0\"\n\t\t\"mulss\",            MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"cvtps2pd\\0\"\n\t\t\"cvtpd2ps\\0\"\n\t\t\"cvtsd2ss\\0\"\n\t\t\"cvtss2sd\",     MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"cvtdq2ps\\0\"\n\t\t\"cvtps2dq\\0\"\n\t\t\"???\\0\"\n\t\t\"cvttps2dq\",        MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"subps\\0\"\n\t\t\"subpd\\0\"\n\t\t\"subsd\\0\"\n\t\t\"subss\",            MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"minps\\0\"\n\t\t\"minpd\\0\"\n\t\t\"minsd\\0\"\n\t\t\"minss\",            MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"divps\\0\"\n\t\t\"divpd\\0\"\n\t\t\"divsd\\0\"\n\t\t\"divss\",            MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"maxps\\0\"\n\t\t\"maxpd\\0\"\n\t\t\"maxsd\\0\"\n\t\t\"maxss\",            MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t// 0x60\n\t{\"punpcklbw\",       MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"punpcklwd\",       MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"punpckldq\",       MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"packsswb\",        MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pcmpgtb\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pcmpgtw\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pcmpgtd\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"packuswb\",        MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"punpckhbw\",       MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"punpckhwd\",       MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"punpckhdq\",       MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"packssdw\",        MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"???\\0\"\n\t\t\"punpcklqdq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\\0\",        MODRM|VAR_NAME4,            PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"punpckhqdq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\\0\",        MODRM|VAR_NAME4,            PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"movd\",            MODRM,          PARAM_MMX,          PARAM_RM,           0               },\n\t{\"movq\\0\"\n\t\t\"movdqa\\0\"\n\t\t\"???\\0\"\n\t\t\"movdqu\",           MODRM|VAR_NAME4,PARAM_MMX,          PARAM_MMXM,         0               },\n\t// 0x70\n\t{\"pshufw\\0\"\n\t\t\"pshufd\\0\"\n\t\t\"pshuflw\\0\"\n\t\t\"pshufhw\",          MODRM|VAR_NAME4,PARAM_MMX,          PARAM_MMXM,         PARAM_UI8       },\n\t{\"group0F71\",       GROUP,          0,                  0,                  0               },\n\t{\"group0F72\",       GROUP,          0,                  0,                  0               },\n\t{\"group0F73\",       GROUP,          0,                  0,                  0               },\n\t{\"pcmpeqb\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pcmpeqw\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pcmpeqd\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"emms\",            0,              0,                  0,                  0               },\n\t{\"vmread\",          MODRM,              PARAM_RM,               PARAM_REG,              0               },\n\t{\"vmwrite\",         MODRM,              PARAM_RM,               PARAM_REG,              0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\\0\"\n\t\t\"haddpd\\0\"\n\t\t\"haddps\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"???\\0\"\n\t\t\"hsubpd\\0\"\n\t\t\"hsubps\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"movd\\0\"\n\t\t\"movd\\0\"\n\t\t\"???\\0\"\n\t\t\"movq\",         MODRM|VAR_NAME4,PARAM_RM,           PARAM_MMX,          0               },\n\t{\"movq\\0\"\n\t\t\"movdqa\\0\"\n\t\t\"???\\0\"\n\t\t\"movdqu\",           MODRM|VAR_NAME4,PARAM_MMXM,         PARAM_MMX,          0               },\n\t// 0x80\n\t{\"jo\",              0,              PARAM_REL,          0,                  0               },\n\t{\"jno\",             0,              PARAM_REL,          0,                  0               },\n\t{\"jb\",              0,              PARAM_REL,          0,                  0               },\n\t{\"jae\",             0,              PARAM_REL,          0,                  0               },\n\t{\"je\",              0,              PARAM_REL,          0,                  0               },\n\t{\"jne\",             0,              PARAM_REL,          0,                  0               },\n\t{\"jbe\",             0,              PARAM_REL,          0,                  0               },\n\t{\"ja\",              0,              PARAM_REL,          0,                  0               },\n\t{\"js\",              0,              PARAM_REL,          0,                  0               },\n\t{\"jns\",             0,              PARAM_REL,          0,                  0               },\n\t{\"jp\",              0,              PARAM_REL,          0,                  0               },\n\t{\"jnp\",             0,              PARAM_REL,          0,                  0               },\n\t{\"jl\",              0,              PARAM_REL,          0,                  0               },\n\t{\"jge\",             0,              PARAM_REL,          0,                  0               },\n\t{\"jle\",             0,              PARAM_REL,          0,                  0               },\n\t{\"jg\",              0,              PARAM_REL,          0,                  0               },\n\t// 0x90\n\t{\"seto\",            MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"setno\",           MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"setb\",            MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"setae\",           MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"sete\",            MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"setne\",           MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"setbe\",           MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"seta\",            MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"sets\",            MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"setns\",           MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"setp\",            MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"setnp\",           MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"setl\",            MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"setge\",           MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"setle\",           MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t{\"setg\",            MODRM,          PARAM_RMPTR8,       0,                  0               },\n\t// 0xa0\n\t{\"push    fs\",      0,              0,                  0,                  0               },\n\t{\"pop     fs\",      0,              0,                  0,                  0               },\n\t{\"cpuid\",           0,              0,                  0,                  0               },\n\t{\"bt\",              MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"shld\",            MODRM,          PARAM_RM,           PARAM_REG,          PARAM_UI8       },\n\t{\"shld\",            MODRM,          PARAM_RM,           PARAM_REG,          PARAM_CL        },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"push    gs\",      0,              0,                  0,                  0               },\n\t{\"pop     gs\",      0,              0,                  0,                  0               },\n\t{\"rsm\",             0,              0,                  0,                  0               },\n\t{\"bts\",             MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"shrd\",            MODRM,          PARAM_RM,           PARAM_REG,          PARAM_UI8       },\n\t{\"shrd\",            MODRM,          PARAM_RM,           PARAM_REG,          PARAM_CL        },\n\t{\"group0FAE\",       GROUP,          0,                  0,                  0               },\n\t{\"imul\",            MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t// 0xb0\n\t{\"cmpxchg\",         MODRM,          PARAM_RM8,          PARAM_REG,          0               },\n\t{\"cmpxchg\",         MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"lss\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"btr\",             MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"lfs\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"lgs\",             MODRM,          PARAM_REG,          PARAM_RM,           0               },\n\t{\"movzx\",           MODRM,          PARAM_REG,          PARAM_RMPTR8,       0               },\n\t{\"movzx\",           MODRM,          PARAM_REG,          PARAM_RMPTR16,      0               },\n\t{\"???\\0\"\n\t\t\"???\\0\"\n\t\t\"???\\0\"\n\t\t\"popcnt\",           MODRM|VAR_NAME4,        PARAM_REG,              PARAM_RM16,             0               },\n\t{\"ud2\",             0,              0,                  0,                  0               },\n\t{\"group0FBA\",       GROUP,          0,                  0,                  0               },\n\t{\"btc\",             MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"bsf\\0\"\n\t\t\"???\\0\"\n\t\t\"???\\0\"\n\t\t\"tzcnt\",            MODRM|VAR_NAME4,    PARAM_REG,          PARAM_RM,           0               },\n\t{\"bsr\\0\"\n\t\t\"???\\0\"\n\t\t\"???\\0\"\n\t\t\"lzcnt\",            MODRM|VAR_NAME4,    PARAM_REG,          PARAM_RM,           0,              DASMFLAG_STEP_OVER},\n\t{\"movsx\",           MODRM,          PARAM_REG,          PARAM_RMPTR8,       0               },\n\t{\"movsx\",           MODRM,          PARAM_REG,          PARAM_RMPTR16,      0               },\n\t// 0xc0\n\t{\"xadd\",            MODRM,          PARAM_RM8,          PARAM_REG,          0               },\n\t{\"xadd\",            MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"cmpps\\0\"\n\t\t\"cmppd\\0\"\n\t\t\"cmpsd\\0\"\n\t\t\"cmpss\",            MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"movnti\",          MODRM,          PARAM_RM,           PARAM_REG,          0               },\n\t{\"pinsrw\",          MODRM,          PARAM_MMX,          PARAM_RM,           PARAM_UI8       },\n\t{\"pextrw\",          MODRM,          PARAM_MMX,          PARAM_RM,           PARAM_UI8       },\n\t{\"shufps\\0\"\n\t\t\"shufpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         PARAM_UI8       },\n\t{\"group0FC7\",           GROUP,          0,          0,                  0               },\n\t{\"bswap\",           0,              PARAM_EAX,          0,                  0               },\n\t{\"bswap\",           0,              PARAM_ECX,          0,                  0               },\n\t{\"bswap\",           0,              PARAM_EDX,          0,                  0               },\n\t{\"bswap\",           0,              PARAM_EBX,          0,                  0               },\n\t{\"bswap\",           0,              PARAM_ESP,          0,                  0               },\n\t{\"bswap\",           0,              PARAM_EBP,          0,                  0               },\n\t{\"bswap\",           0,              PARAM_ESI,          0,                  0               },\n\t{\"bswap\",           0,              PARAM_EDI,          0,                  0               },\n\t// 0xd0\n\t{\"???\\0\"\n\t\t\"addsubpd\\0\"\n\t\t\"addsubps\\0\"\n\t\t\"???\\0\",            MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"psrlw\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"psrld\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"psrlq\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"paddq\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pmullw\",          MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"???\\0\"\n\t\t\"movq\\0\"\n\t\t\"movdq2q\\0\"\n\t\t\"movq2dq\",          MODRM|VAR_NAME4,PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pmovmskb\",        MODRM,          PARAM_REG3264,      PARAM_MMXM,         0               },\n\t{\"psubusb\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"psubusw\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pminub\",          MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pand\",            MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"paddusb\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"paddusw\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pmaxub\",          MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pandn\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t// 0xe0\n\t{\"pavgb\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"psraw\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"psrad\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pavgw\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pmulhuw\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pmulhw\",          MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"???\\0\"\n\t\t\"cvttpd2dq\\0\"\n\t\t\"cvtpd2dq\\0\"\n\t\t\"cvtdq2pd\",     MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"movntq\\0\"\n\t\t\"movntdq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\\0\",            MODRM|VAR_NAME4,    PARAM_M64,          PARAM_MMX,          0               },\n\t{\"psubsb\",          MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"psubsw\",          MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pminsw\",          MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"por\",             MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"paddsb\",          MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"paddsw\",          MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pmaxsw\",          MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pxor\",            MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t// 0xf0\n\t{\"???\\0\"\n\t\t\"???\\0\"\n\t\t\"lddqu\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"psllw\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pslld\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"psllq\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pmuludq\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"pmaddwd\",         MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"psadbw\",          MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"maskmovq\\0\"\n\t\t\"maskmovdqu\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"psubb\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"psubw\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"psubd\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"psubq\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"paddb\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"paddw\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"paddd\",           MODRM,          PARAM_MMX,          PARAM_MMXM,         0               },\n\t{\"???\",             0,              0,                  0,                  0               }\n};\n\nstatic const I386_OPCODE i386_opcode_table0F38[256] =\n{\n\t// 0x00\n\t{\"pshufb\\0\"\n\t\t\"pshufb\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"phaddw\\0\"\n\t\t\"phaddw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"phaddd\\0\"\n\t\t\"phadd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"phaddsw\\0\"\n\t\t\"phaddsw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"pmaddubsw\\0\"\n\t\t\"pmaddubsw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"phsubw\\0\"\n\t\t\"phsubw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"phsubd\\0\"\n\t\t\"phsubd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"phsubsw\\0\"\n\t\t\"phsubsw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"psignb\\0\"\n\t\t\"psignb\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"psignw\\0\"\n\t\t\"psignw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"psignd\\0\"\n\t\t\"psignd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"pmulhrsw\\0\"\n\t\t\"pmulhrsw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x10\n\t{\"???\\0\"\n\t\t\"pblendvb\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_XMM0          },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\\0\"\n\t\t\"blendvps\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_XMM0          },\n\t{\"???\\0\"\n\t\t\"blendvpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_XMM0          },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\\0\"\n\t\t\"ptest\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"pabsb\\0\"\n\t\t\"pabsb\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"pabsw\\0\"\n\t\t\"pabsw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"pabsd\\0\"\n\t\t\"pabsd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x20\n\t{\"???\\0\"\n\t\t\"pmovsxbw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMM64,            0               },\n\t{\"???\\0\"\n\t\t\"pmovsxbd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMM32,            0               },\n\t{\"???\\0\"\n\t\t\"pmovsxbq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMM16,            0               },\n\t{\"???\\0\"\n\t\t\"pmovsxwd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMM64,            0               },\n\t{\"???\\0\"\n\t\t\"pmovsxwq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMM32,            0               },\n\t{\"???\\0\"\n\t\t\"pmovsxdq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMM64,            0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\\0\"\n\t\t\"pmuldq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"pcmpeqq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"movntdqa\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"packusdw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x30\n\t{\"???\\0\"\n\t\t\"pmovzxbw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMM64,            0               },\n\t{\"???\\0\"\n\t\t\"pmovzxbd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMM32,            0               },\n\t{\"???\\0\"\n\t\t\"pmovzxbq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMM16,            0               },\n\t{\"???\\0\"\n\t\t\"pmovzxwd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMM64,            0               },\n\t{\"???\\0\"\n\t\t\"pmovzxwq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMM32,            0               },\n\t{\"???\\0\"\n\t\t\"pmovzxdq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMM64,            0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\\0\"\n\t\t\"pcmpgtq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"pminsb\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"pminsd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"pminuw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"pminud\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"pmaxsb\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"pmaxsd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"pmaxuw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"pmaxud\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t// 0x40\n\t{\"???\\0\"\n\t\t\"pmulld\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"phminposuw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x50\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x60\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x70\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x80\n\t{\"???\\0\"\n\t\t\"invept\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_REG32,            PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"invvpid\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_REG32,            PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"invpcid\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_REG32,            PARAM_XMMM,         0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x90\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0xa0\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0xb0\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0xc0\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0xd0\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\\0\"\n\t\t\"aesimc\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"aesenc\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"aesenclast\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"aesdec\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t{\"???\\0\"\n\t\t\"aesdeclast\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         0               },\n\t// 0xe0\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0xf0\n\t{\"movbe\\0\"\n\t\t\"???\\0\"\n\t\t\"crc32\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_REG32,            PARAM_RMPTR,            0               }, // not quite correct\n\t{\"movbe\\0\"\n\t\t\"???\\0\"\n\t\t\"crc32\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_RMPTR,            PARAM_REG32,            0               }, // not quite correct\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n};\n\nstatic const I386_OPCODE i386_opcode_table0F3A[256] =\n{\n\t// 0x00\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\\0\"\n\t\t\"roundps\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"roundpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"roundss\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"roundsd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"blendps\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"blendpd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"pblendw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"palignr\\0\"\n\t\t\"palignr\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t// 0x10\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\\0\"\n\t\t\"pextrb\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_RM8,          PARAM_XMM,          PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"pextrw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_RM16,         PARAM_XMM,          PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"pextrd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_RM8,          PARAM_XMM,          PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"extractps\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_RM32,         PARAM_XMM,          PARAM_UI8           },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x20\n\t{\"???\\0\"\n\t\t\"pinsrb\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_RM8,          PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"insertps\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_RM8,          PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"pinsrd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_RM32,         PARAM_UI8           },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x30\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x40\n\t{\"???\\0\"\n\t\t\"dpps\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"dppd\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"mpsadbw\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\\0\"\n\t\t\"pclmulqdq\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x50\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x60\n\t{\"???\\0\"\n\t\t\"pcmestrm\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"pcmestri\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"pcmistrm\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\\0\"\n\t\t\"pcmistri\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x70\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x80\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0x90\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0xa0\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0xb0\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0xc0\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0xd0\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\\0\"\n\t\t\"aeskeygenassist\\0\"\n\t\t\"???\\0\"\n\t\t\"???\",              MODRM|VAR_NAME4,    PARAM_XMM,          PARAM_XMMM,         PARAM_UI8           },\n\t// 0xe0\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t// 0xf0\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n\t{\"???\",             0,              0,          0,              0               },\n};\n\nstatic const I386_OPCODE group80_table[8] =\n{\n\t{\"add\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"or\",              0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"adc\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"sbb\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"and\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"sub\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"xor\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"cmp\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               }\n};\n\nstatic const I386_OPCODE group81_table[8] =\n{\n\t{\"add\",             0,              PARAM_RMPTR,        PARAM_IMM,          0               },\n\t{\"or\",              0,              PARAM_RMPTR,        PARAM_IMM,          0               },\n\t{\"adc\",             0,              PARAM_RMPTR,        PARAM_IMM,          0               },\n\t{\"sbb\",             0,              PARAM_RMPTR,        PARAM_IMM,          0               },\n\t{\"and\",             0,              PARAM_RMPTR,        PARAM_IMM,          0               },\n\t{\"sub\",             0,              PARAM_RMPTR,        PARAM_IMM,          0               },\n\t{\"xor\",             0,              PARAM_RMPTR,        PARAM_IMM,          0               },\n\t{\"cmp\",             0,              PARAM_RMPTR,        PARAM_IMM,          0               }\n};\n\nstatic const I386_OPCODE group83_table[8] =\n{\n\t{\"add\",             0,              PARAM_RMPTR,        PARAM_I8,           0               },\n\t{\"or\",              0,              PARAM_RMPTR,        PARAM_I8,           0               },\n\t{\"adc\",             0,              PARAM_RMPTR,        PARAM_I8,           0               },\n\t{\"sbb\",             0,              PARAM_RMPTR,        PARAM_I8,           0               },\n\t{\"and\",             0,              PARAM_RMPTR,        PARAM_I8,           0               },\n\t{\"sub\",             0,              PARAM_RMPTR,        PARAM_I8,           0               },\n\t{\"xor\",             0,              PARAM_RMPTR,        PARAM_I8,           0               },\n\t{\"cmp\",             0,              PARAM_RMPTR,        PARAM_I8,           0               }\n};\n\nstatic const I386_OPCODE groupC0_table[8] =\n{\n\t{\"rol\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"ror\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"rcl\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"rcr\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"shl\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"shr\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"sal\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"sar\",             0,              PARAM_RMPTR8,       PARAM_UI8,          0               }\n};\n\nstatic const I386_OPCODE groupC1_table[8] =\n{\n\t{\"rol\",             0,              PARAM_RMPTR,        PARAM_UI8,          0               },\n\t{\"ror\",             0,              PARAM_RMPTR,        PARAM_UI8,          0               },\n\t{\"rcl\",             0,              PARAM_RMPTR,        PARAM_UI8,          0               },\n\t{\"rcr\",             0,              PARAM_RMPTR,        PARAM_UI8,          0               },\n\t{\"shl\",             0,              PARAM_RMPTR,        PARAM_UI8,          0               },\n\t{\"shr\",             0,              PARAM_RMPTR,        PARAM_UI8,          0               },\n\t{\"sal\",             0,              PARAM_RMPTR,        PARAM_UI8,          0               },\n\t{\"sar\",             0,              PARAM_RMPTR,        PARAM_UI8,          0               }\n};\n\nstatic const I386_OPCODE groupD0_table[8] =\n{\n\t{\"rol\",             0,              PARAM_RMPTR8,       PARAM_1,            0               },\n\t{\"ror\",             0,              PARAM_RMPTR8,       PARAM_1,            0               },\n\t{\"rcl\",             0,              PARAM_RMPTR8,       PARAM_1,            0               },\n\t{\"rcr\",             0,              PARAM_RMPTR8,       PARAM_1,            0               },\n\t{\"shl\",             0,              PARAM_RMPTR8,       PARAM_1,            0               },\n\t{\"shr\",             0,              PARAM_RMPTR8,       PARAM_1,            0               },\n\t{\"sal\",             0,              PARAM_RMPTR8,       PARAM_1,            0               },\n\t{\"sar\",             0,              PARAM_RMPTR8,       PARAM_1,            0               }\n};\n\nstatic const I386_OPCODE groupD1_table[8] =\n{\n\t{\"rol\",             0,              PARAM_RMPTR,        PARAM_1,            0               },\n\t{\"ror\",             0,              PARAM_RMPTR,        PARAM_1,            0               },\n\t{\"rcl\",             0,              PARAM_RMPTR,        PARAM_1,            0               },\n\t{\"rcr\",             0,              PARAM_RMPTR,        PARAM_1,            0               },\n\t{\"shl\",             0,              PARAM_RMPTR,        PARAM_1,            0               },\n\t{\"shr\",             0,              PARAM_RMPTR,        PARAM_1,            0               },\n\t{\"sal\",             0,              PARAM_RMPTR,        PARAM_1,            0               },\n\t{\"sar\",             0,              PARAM_RMPTR,        PARAM_1,            0               }\n};\n\nstatic const I386_OPCODE groupD2_table[8] =\n{\n\t{\"rol\",             0,              PARAM_RMPTR8,       PARAM_CL,           0               },\n\t{\"ror\",             0,              PARAM_RMPTR8,       PARAM_CL,           0               },\n\t{\"rcl\",             0,              PARAM_RMPTR8,       PARAM_CL,           0               },\n\t{\"rcr\",             0,              PARAM_RMPTR8,       PARAM_CL,           0               },\n\t{\"shl\",             0,              PARAM_RMPTR8,       PARAM_CL,           0               },\n\t{\"shr\",             0,              PARAM_RMPTR8,       PARAM_CL,           0               },\n\t{\"sal\",             0,              PARAM_RMPTR8,       PARAM_CL,           0               },\n\t{\"sar\",             0,              PARAM_RMPTR8,       PARAM_CL,           0               }\n};\n\nstatic const I386_OPCODE groupD3_table[8] =\n{\n\t{\"rol\",             0,              PARAM_RMPTR,        PARAM_CL,           0               },\n\t{\"ror\",             0,              PARAM_RMPTR,        PARAM_CL,           0               },\n\t{\"rcl\",             0,              PARAM_RMPTR,        PARAM_CL,           0               },\n\t{\"rcr\",             0,              PARAM_RMPTR,        PARAM_CL,           0               },\n\t{\"shl\",             0,              PARAM_RMPTR,        PARAM_CL,           0               },\n\t{\"shr\",             0,              PARAM_RMPTR,        PARAM_CL,           0               },\n\t{\"sal\",             0,              PARAM_RMPTR,        PARAM_CL,           0               },\n\t{\"sar\",             0,              PARAM_RMPTR,        PARAM_CL,           0               }\n};\n\nstatic const I386_OPCODE groupF6_table[8] =\n{\n\t{\"test\",            0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"test\",            0,              PARAM_RMPTR8,       PARAM_UI8,          0               },\n\t{\"not\",             0,              PARAM_RMPTR8,       0,                  0               },\n\t{\"neg\",             0,              PARAM_RMPTR8,       0,                  0               },\n\t{\"mul\",             0,              PARAM_RMPTR8,       0,                  0               },\n\t{\"imul\",            0,              PARAM_RMPTR8,       0,                  0               },\n\t{\"div\",             0,              PARAM_RMPTR8,       0,                  0               },\n\t{\"idiv\",            0,              PARAM_RMPTR8,       0,                  0               }\n};\n\nstatic const I386_OPCODE groupF7_table[8] =\n{\n\t{\"test\",            0,              PARAM_RMPTR,        PARAM_IMM,          0               },\n\t{\"test\",            0,              PARAM_RMPTR,        PARAM_IMM,          0               },\n\t{\"not\",             0,              PARAM_RMPTR,        0,                  0               },\n\t{\"neg\",             0,              PARAM_RMPTR,        0,                  0               },\n\t{\"mul\",             0,              PARAM_RMPTR,        0,                  0               },\n\t{\"imul\",            0,              PARAM_RMPTR,        0,                  0               },\n\t{\"div\",             0,              PARAM_RMPTR,        0,                  0               },\n\t{\"idiv\",            0,              PARAM_RMPTR,        0,                  0               }\n};\n\nstatic const I386_OPCODE groupFE_table[8] =\n{\n\t{\"inc\",             0,              PARAM_RMPTR8,       0,                  0               },\n\t{\"dec\",             0,              PARAM_RMPTR8,       0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               }\n};\n\nstatic const I386_OPCODE groupFF_table[8] =\n{\n\t{\"inc\",             0,              PARAM_RMPTR,        0,                  0               },\n\t{\"dec\",             0,              PARAM_RMPTR,        0,                  0               },\n\t{\"call\",            ALWAYS64,       PARAM_RMPTR,        0,                  0,              DASMFLAG_STEP_OVER},\n\t{\"call    far ptr \",0,              PARAM_RM,           0,                  0,              DASMFLAG_STEP_OVER},\n\t{\"jmp\",             ALWAYS64,       PARAM_RMPTR,        0,                  0               },\n\t{\"jmp     far ptr \",0,              PARAM_RM,           0,                  0               },\n\t{\"push\",            0,              PARAM_RMPTR,        0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               }\n};\n\nstatic const I386_OPCODE group0F00_table[8] =\n{\n\t{\"sldt\",            0,              PARAM_RM,           0,                  0               },\n\t{\"str\",             0,              PARAM_RM,           0,                  0               },\n\t{\"lldt\",            0,              PARAM_RM,           0,                  0               },\n\t{\"ltr\",             0,              PARAM_RM,           0,                  0               },\n\t{\"verr\",            0,              PARAM_RM,           0,                  0               },\n\t{\"verw\",            0,              PARAM_RM,           0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               }\n};\n\nstatic const I386_OPCODE group0F01_table[8] =\n{\n\t{\"sgdt\",            0,              PARAM_RM,           0,                  0               },\n\t{\"sidt\",            0,              PARAM_RM,           0,                  0               },\n\t{\"lgdt\",            0,              PARAM_RM,           0,                  0               },\n\t{\"lidt\",            0,              PARAM_RM,           0,                  0               },\n\t{\"smsw\",            0,              PARAM_RM,           0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"lmsw\",            0,              PARAM_RM,           0,                  0               },\n\t{\"invlpg\",          0,              PARAM_RM,           0,                  0               }\n};\n\nstatic const I386_OPCODE group0F0D_table[8] =\n{\n\t{\"prefetch\",        0,              PARAM_RM8,          0,                  0               },\n\t{\"prefetchw\",       0,              PARAM_RM8,          0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               }\n};\n\nstatic const I386_OPCODE group0F18_table[8] =\n{\n\t{\"prefetchnta\",     0,              PARAM_RM8,          0,                  0               },\n\t{\"prefetch0\",       0,              PARAM_RM8,          0,                  0               },\n\t{\"prefetch1\",       0,              PARAM_RM8,          0,                  0               },\n\t{\"prefetch2\",       0,              PARAM_RM8,          0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               }\n};\n\nstatic const I386_OPCODE group0F71_table[8] =\n{\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"psrlw\",           0,              PARAM_MMX2,         PARAM_UI8,          0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"psraw\",           0,              PARAM_MMX2,         PARAM_UI8,          0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"psllw\",           0,              PARAM_MMX2,         PARAM_UI8,          0               },\n\t{\"???\",             0,              0,                  0,                  0               }\n};\n\nstatic const I386_OPCODE group0F72_table[8] =\n{\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"psrld\",           0,              PARAM_MMX2,         PARAM_UI8,          0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"psrad\",           0,              PARAM_MMX2,         PARAM_UI8,          0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"pslld\",           0,              PARAM_MMX2,         PARAM_UI8,          0               },\n\t{\"???\",             0,              0,                  0,                  0               }\n};\n\nstatic const I386_OPCODE group0F73_table[8] =\n{\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"psrlq\",           0,              PARAM_MMX2,         PARAM_UI8,          0               },\n\t{\"psrldq\",          0,              PARAM_MMX2,         PARAM_UI8,          0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"psllq\",           0,              PARAM_MMX2,         PARAM_UI8,          0               },\n\t{\"pslldq\",          0,              PARAM_MMX2,         PARAM_UI8,          0               },\n};\n\nstatic const I386_OPCODE group0FAE_table[8] =\n{\n\t{\"fxsave\",          0,              PARAM_RM,           0,                  0               },\n\t{\"fxrstor\",         0,              PARAM_RM,           0,                  0               },\n\t{\"ldmxcsr\",         0,              PARAM_RM,           0,                  0               },\n\t{\"stmxscr\",         0,              PARAM_RM,           0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"lfence\",          0,              0,                  0,                  0               },\n\t{\"mfence\",          0,              0,                  0,                  0               },\n\t{\"sfence\",          0,              0,                  0,                  0               }\n};\n\n\nstatic const I386_OPCODE group0FBA_table[8] =\n{\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"bt\",              0,              PARAM_RM,           PARAM_UI8,          0               },\n\t{\"bts\",             0,              PARAM_RM,           PARAM_UI8,          0               },\n\t{\"btr\",             0,              PARAM_RM,           PARAM_UI8,          0               },\n\t{\"btc\",             0,              PARAM_RM,           PARAM_UI8,          0               }\n};\n\nstatic const I386_OPCODE group0FC7_table[8] =\n{\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"cmpxchg8b\",           MODRM,              PARAM_M64PTR,               0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"???\",             0,              0,                  0,                  0               },\n\t{\"vmptrld\\0\"\n\t\t\"vmclear\\0\"\n\t\t\"???\\0\"\n\t\t\"vmxon\",            MODRM|VAR_NAME4,        PARAM_M64PTR,               0,                  0               },\n\t{\"vmptrtst\",            MODRM,              PARAM_M64PTR,               0,                  0               }\n};\n\nstatic const GROUP_OP group_op_table[] =\n{\n\t{ \"group80\",            group80_table           },\n\t{ \"group81\",            group81_table           },\n\t{ \"group83\",            group83_table           },\n\t{ \"groupC0\",            groupC0_table           },\n\t{ \"groupC1\",            groupC1_table           },\n\t{ \"groupD0\",            groupD0_table           },\n\t{ \"groupD1\",            groupD1_table           },\n\t{ \"groupD2\",            groupD2_table           },\n\t{ \"groupD3\",            groupD3_table           },\n\t{ \"groupF6\",            groupF6_table           },\n\t{ \"groupF7\",            groupF7_table           },\n\t{ \"groupFE\",            groupFE_table           },\n\t{ \"groupFF\",            groupFF_table           },\n\t{ \"group0F00\",          group0F00_table         },\n\t{ \"group0F01\",          group0F01_table         },\n\t{ \"group0F0D\",          group0F0D_table         },\n\t{ \"group0F18\",          group0F18_table         },\n\t{ \"group0F71\",          group0F71_table         },\n\t{ \"group0F72\",          group0F72_table         },\n\t{ \"group0F73\",          group0F73_table         },\n\t{ \"group0FAE\",          group0FAE_table         },\n\t{ \"group0FBA\",          group0FBA_table         },\n\t{ \"group0FC7\",          group0FC7_table         }\n};\n\n\n\nstatic const char *const i386_reg[3][16] =\n{\n\t{\"ax\",  \"cx\",  \"dx\",  \"bx\",  \"sp\",  \"bp\",  \"si\",  \"di\",  \"r8w\", \"r9w\", \"r10w\",\"r11w\",\"r12w\",\"r13w\",\"r14w\",\"r15w\"},\n\t{\"eax\", \"ecx\", \"edx\", \"ebx\", \"esp\", \"ebp\", \"esi\", \"edi\", \"r8d\", \"r9d\", \"r10d\",\"r11d\",\"r12d\",\"r13d\",\"r14d\",\"r15d\"},\n\t{\"rax\", \"rcx\", \"rdx\", \"rbx\", \"rsp\", \"rbp\", \"rsi\", \"rdi\", \"r8\",  \"r9\",  \"r10\", \"r11\", \"r12\", \"r13\", \"r14\", \"r15\"}\n};\n\nstatic const char *const i386_reg8[8] = {\"al\", \"cl\", \"dl\", \"bl\", \"ah\", \"ch\", \"dh\", \"bh\"};\nstatic const char *const i386_reg8rex[16] = {\"al\", \"cl\", \"dl\", \"bl\", \"spl\", \"bpl\", \"sil\", \"dil\", \"r8l\", \"r9l\", \"r10l\", \"r11l\", \"r12l\", \"r13l\", \"r14l\", \"r15l\"};\nstatic const char *const i386_sreg[8] = {\"es\", \"cs\", \"ss\", \"ds\", \"fs\", \"gs\", \"???\", \"???\"};\n\nstatic int address_size;\nstatic int operand_size;\nstatic int address_prefix;\nstatic int operand_prefix;\nstatic int max_length;\nstatic UINT64 pc;\nstatic UINT8 modrm;\nstatic UINT32 segment;\nstatic offs_t dasm_flags;\nstatic char modrm_string[256];\nstatic UINT8 rex, regex, sibex, rmex;\nstatic UINT8 pre0f;\nstatic UINT8 curmode;\n\n#define MODRM_REG1  ((modrm >> 3) & 0x7)\n#define MODRM_REG2  (modrm & 0x7)\n\nINLINE UINT8 _FETCH(void)\n{\n\tif ((opcode_ptr - opcode_ptr_base) + 1 > max_length)\n\t\treturn 0xff;\n\tpc++;\n\treturn *opcode_ptr++;\n}\n\nINLINE UINT16 _FETCH16(void)\n{\n\tUINT16 d;\n\tif ((opcode_ptr - opcode_ptr_base) + 2 > max_length)\n\t\treturn 0xffff;\n\td = opcode_ptr[0] | (opcode_ptr[1] << 8);\n\topcode_ptr += 2;\n\tpc += 2;\n\treturn d;\n}\n\nINLINE UINT32 _FETCH32(void)\n{\n\tUINT32 d;\n\tif ((opcode_ptr - opcode_ptr_base) + 4 > max_length)\n\t\treturn 0xffffffff;\n\td = opcode_ptr[0] | (opcode_ptr[1] << 8) | (opcode_ptr[2] << 16) | (opcode_ptr[3] << 24);\n\topcode_ptr += 4;\n\tpc += 4;\n\treturn d;\n}\n\nINLINE UINT8 _FETCHD(void)\n{\n\tif ((opcode_ptr - opcode_ptr_base) + 1 > max_length)\n\t\treturn 0xff;\n\tpc++;\n\treturn *opcode_ptr++;\n}\n\nINLINE UINT16 _FETCHD16(void)\n{\n\tUINT16 d;\n\tif ((opcode_ptr - opcode_ptr_base) + 2 > max_length)\n\t\treturn 0xffff;\n\td = opcode_ptr[0] | (opcode_ptr[1] << 8);\n\topcode_ptr += 2;\n\tpc += 2;\n\treturn d;\n}\n\nINLINE UINT32 _FETCHD32(void)\n{\n\tUINT32 d;\n\tif ((opcode_ptr - opcode_ptr_base) + 4 > max_length)\n\t\treturn 0xffffffff;\n\td = opcode_ptr[0] | (opcode_ptr[1] << 8) | (opcode_ptr[2] << 16) | (opcode_ptr[3] << 24);\n\topcode_ptr += 4;\n\tpc += 4;\n\treturn d;\n}\n\nstatic char *hexstring(UINT32 value, int digits)\n{\n\tstatic char buffer[20];\n\tbuffer[0] = '0';\n\tif (digits)\n\t\tsprintf(&buffer[1], \"%0*Xh\", digits, value);\n\telse\n\t\tsprintf(&buffer[1], \"%Xh\", value);\n\treturn (buffer[1] >= '0' && buffer[1] <= '9') ? &buffer[1] : &buffer[0];\n}\n\nstatic char *hexstring64(UINT32 lo, UINT32 hi)\n{\n\tstatic char buffer[40];\n\tbuffer[0] = '0';\n\tif (hi != 0)\n\t\tsprintf(&buffer[1], \"%X%08Xh\", hi, lo);\n\telse\n\t\tsprintf(&buffer[1], \"%Xh\", lo);\n\treturn (buffer[1] >= '0' && buffer[1] <= '9') ? &buffer[1] : &buffer[0];\n}\n\nstatic char *hexstringpc(UINT64 pc)\n{\n\tif (curmode == 64)\n\t\treturn hexstring64((UINT32)pc, (UINT32)(pc >> 32));\n\telse\n\t\treturn hexstring((UINT32)pc, 0);\n}\n\nstatic char *shexstring(UINT32 value, int digits, int always)\n{\n\tstatic char buffer[20];\n\tif (value >= 0x80000000)\n\t\tsprintf(buffer, \"-%s\", hexstring(-value, digits));\n\telse if (always)\n\t\tsprintf(buffer, \"+%s\", hexstring(value, digits));\n\telse\n\t\treturn hexstring(value, digits);\n\treturn buffer;\n}\n\nstatic char* handle_sib_byte( char* s, UINT8 mod )\n{\n\tUINT32 i32;\n\tUINT8 scale, i, base;\n\tUINT8 sib = _FETCHD();\n\n\tscale = (sib >> 6) & 0x3;\n\ti = ((sib >> 3) & 0x7) | sibex;\n\tbase = (sib & 0x7) | rmex;\n\n\tif (base == 5 && mod == 0) {\n\t\ti32 = _FETCH32();\n\t\ts += sprintf( s, \"%s\", hexstring(i32, 0) );\n\t} else if (base != 5 || mod != 3)\n\t\ts += sprintf( s, \"%s\", i386_reg[address_size][base] );\n\n\tif ( i != 4 ) {\n\t\ts += sprintf( s, \"+%s\", i386_reg[address_size][i] );\n\t\tif (scale)\n\t\t\ts += sprintf( s, \"*%d\", 1 << scale );\n\t}\n\treturn s;\n}\n\nstatic void handle_modrm(char* s)\n{\n\tINT8 disp8;\n\tINT16 disp16;\n\tINT32 disp32;\n\tUINT8 mod, rm;\n\n\tmodrm = _FETCHD();\n\tmod = (modrm >> 6) & 0x3;\n\trm = (modrm & 0x7) | rmex;\n\n\tif( modrm >= 0xc0 )\n\t\treturn;\n\n\tswitch(segment)\n\t{\n\t\tcase SEG_CS: s += sprintf( s, \"cs:\" ); break;\n\t\tcase SEG_DS: s += sprintf( s, \"ds:\" ); break;\n\t\tcase SEG_ES: s += sprintf( s, \"es:\" ); break;\n\t\tcase SEG_FS: s += sprintf( s, \"fs:\" ); break;\n\t\tcase SEG_GS: s += sprintf( s, \"gs:\" ); break;\n\t\tcase SEG_SS: s += sprintf( s, \"ss:\" ); break;\n\t}\n\n\ts += sprintf( s, \"[\" );\n\tif( address_size == 2 ) {\n\t\tif ((rm & 7) == 4)\n\t\t\ts = handle_sib_byte( s, mod );\n\t\telse if ((rm & 7) == 5 && mod == 0) {\n\t\t\tdisp32 = _FETCHD32();\n\t\t\ts += sprintf( s, \"rip%s\", shexstring(disp32, 0, TRUE) );\n\t\t} else\n\t\t\ts += sprintf( s, \"%s\", i386_reg[2][rm]);\n\t\tif( mod == 1 ) {\n\t\t\tdisp8 = _FETCHD();\n\t\t\tif (disp8 != 0)\n\t\t\t\ts += sprintf( s, \"%s\", shexstring((INT32)disp8, 0, TRUE) );\n\t\t} else if( mod == 2 ) {\n\t\t\tdisp32 = _FETCHD32();\n\t\t\tif (disp32 != 0)\n\t\t\t\ts += sprintf( s, \"%s\", shexstring(disp32, 0, TRUE) );\n\t\t}\n\t} else if (address_size == 1) {\n\t\tif ((rm & 7) == 4)\n\t\t\ts = handle_sib_byte( s, mod );\n\t\telse if ((rm & 7) == 5 && mod == 0) {\n\t\t\tdisp32 = _FETCHD32();\n\t\t\tif (curmode == 64)\n\t\t\t\ts += sprintf( s, \"eip%s\", shexstring(disp32, 0, TRUE) );\n\t\t\telse\n\t\t\t\ts += sprintf( s, \"%s\", hexstring(disp32, 0) );\n\t\t} else\n\t\t\ts += sprintf( s, \"%s\", i386_reg[1][rm]);\n\t\tif( mod == 1 ) {\n\t\t\tdisp8 = _FETCHD();\n\t\t\tif (disp8 != 0)\n\t\t\t\ts += sprintf( s, \"%s\", shexstring((INT32)disp8, 0, TRUE) );\n\t\t} else if( mod == 2 ) {\n\t\t\tdisp32 = _FETCHD32();\n\t\t\tif (disp32 != 0)\n\t\t\t\ts += sprintf( s, \"%s\", shexstring(disp32, 0, TRUE) );\n\t\t}\n\t} else {\n\t\tswitch( rm )\n\t\t{\n\t\t\tcase 0: s += sprintf( s, \"bx+si\" ); break;\n\t\t\tcase 1: s += sprintf( s, \"bx+di\" ); break;\n\t\t\tcase 2: s += sprintf( s, \"bp+si\" ); break;\n\t\t\tcase 3: s += sprintf( s, \"bp+di\" ); break;\n\t\t\tcase 4: s += sprintf( s, \"si\" ); break;\n\t\t\tcase 5: s += sprintf( s, \"di\" ); break;\n\t\t\tcase 6:\n\t\t\t\tif( mod == 0 ) {\n\t\t\t\t\tdisp16 = _FETCHD16();\n\t\t\t\t\ts += sprintf( s, \"%s\", hexstring((unsigned) (UINT16) disp16, 0) );\n\t\t\t\t} else {\n\t\t\t\t\ts += sprintf( s, \"bp\" );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 7: s += sprintf( s, \"bx\" ); break;\n\t\t}\n\t\tif( mod == 1 ) {\n\t\t\tdisp8 = _FETCHD();\n\t\t\tif (disp8 != 0)\n\t\t\t\ts += sprintf( s, \"%s\", shexstring((INT32)disp8, 0, TRUE) );\n\t\t} else if( mod == 2 ) {\n\t\t\tdisp16 = _FETCHD16();\n\t\t\tif (disp16 != 0)\n\t\t\t\ts += sprintf( s, \"%s\", shexstring((INT32)disp16, 0, TRUE) );\n\t\t}\n\t}\n\ts += sprintf( s, \"]\" );\n}\n\nstatic char* handle_param(char* s, UINT32 param)\n{\n\tUINT8 i8;\n\tUINT16 i16;\n\tUINT32 i32;\n\tUINT16 ptr;\n\tUINT32 addr;\n\tINT8 d8;\n\tINT16 d16;\n\tINT32 d32;\n\n\tswitch(param)\n\t{\n\t\tcase PARAM_REG:\n\t\t\ts += sprintf( s, \"%s\", i386_reg[operand_size][MODRM_REG1 | regex] );\n\t\t\tbreak;\n\n\t\tcase PARAM_REG8:\n\t\t\ts += sprintf( s, \"%s\", (rex ? i386_reg8rex : i386_reg8)[MODRM_REG1 | regex] );\n\t\t\tbreak;\n\n\t\tcase PARAM_REG16:\n\t\t\ts += sprintf( s, \"%s\", i386_reg[0][MODRM_REG1 | regex] );\n\t\t\tbreak;\n\n\t\tcase PARAM_REG32:\n\t\t\ts += sprintf( s, \"%s\", i386_reg[1][MODRM_REG1 | regex] );\n\t\t\tbreak;\n\n\t\tcase PARAM_REG3264:\n\t\t\ts += sprintf( s, \"%s\", i386_reg[(operand_size == 2) ? 2 : 1][MODRM_REG1 | regex] );\n\t\t\tbreak;\n\n\t\tcase PARAM_MMX:\n\t\t\tif (pre0f == 0x66 || pre0f == 0xf2 || pre0f == 0xf3)\n\t\t\t\ts += sprintf( s, \"xmm%d\", MODRM_REG1 | regex );\n\t\t\telse\n\t\t\t\ts += sprintf( s, \"mm%d\", MODRM_REG1 | regex );\n\t\t\tbreak;\n\n\t\tcase PARAM_MMX2:\n\t\t\tif (pre0f == 0x66 || pre0f == 0xf2 || pre0f == 0xf3)\n\t\t\t\ts += sprintf( s, \"xmm%d\", MODRM_REG2 | regex );\n\t\t\telse\n\t\t\t\ts += sprintf( s, \"mm%d\", MODRM_REG2 | regex );\n\t\t\tbreak;\n\n\t\tcase PARAM_XMM:\n\t\t\ts += sprintf( s, \"xmm%d\", MODRM_REG1 | regex );\n\t\t\tbreak;\n\n\t\tcase PARAM_REGORXMM:\n\t\t\tif (pre0f != 0xf2 && pre0f != 0xf3)\n\t\t\t\ts += sprintf( s, \"xmm%d\", MODRM_REG1 | regex );\n\t\t\telse\n\t\t\t\ts += sprintf( s, \"%s\", i386_reg[(operand_size == 2) ? 2 : 1][MODRM_REG1 | regex] );\n\t\t\tbreak;\n\n\t\tcase PARAM_REG2_32:\n\t\t\ts += sprintf( s, \"%s\", i386_reg[1][MODRM_REG2 | rmex] );\n\t\t\tbreak;\n\n\t\tcase PARAM_RM:\n\t\tcase PARAM_RMPTR:\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\ts += sprintf( s, \"%s\", i386_reg[operand_size][MODRM_REG2 | rmex] );\n\t\t\t} else {\n\t\t\t\tif (param == PARAM_RMPTR)\n\t\t\t\t{\n\t\t\t\t\tif( operand_size == 2 )\n\t\t\t\t\t\ts += sprintf( s, \"qword ptr \" );\n\t\t\t\t\telse if (operand_size == 1)\n\t\t\t\t\t\ts += sprintf( s, \"dword ptr \" );\n\t\t\t\t\telse\n\t\t\t\t\t\ts += sprintf( s, \"word ptr \" );\n\t\t\t\t}\n\t\t\t\ts += sprintf( s, \"%s\", modrm_string );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_RM8:\n\t\tcase PARAM_RMPTR8:\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\ts += sprintf( s, \"%s\", (rex ? i386_reg8rex : i386_reg8)[MODRM_REG2 | rmex] );\n\t\t\t} else {\n\t\t\t\tif (param == PARAM_RMPTR8)\n\t\t\t\t\ts += sprintf( s, \"byte ptr \" );\n\t\t\t\ts += sprintf( s, \"%s\", modrm_string );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_RM16:\n\t\tcase PARAM_RMPTR16:\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\ts += sprintf( s, \"%s\", i386_reg[0][MODRM_REG2 | rmex] );\n\t\t\t} else {\n\t\t\t\tif (param == PARAM_RMPTR16)\n\t\t\t\t\ts += sprintf( s, \"word ptr \" );\n\t\t\t\ts += sprintf( s, \"%s\", modrm_string );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_RM32:\n\t\tcase PARAM_RMPTR32:\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\ts += sprintf( s, \"%s\", i386_reg[1][MODRM_REG2 | rmex] );\n\t\t\t} else {\n\t\t\t\tif (param == PARAM_RMPTR32)\n\t\t\t\t\ts += sprintf( s, \"dword ptr \" );\n\t\t\t\ts += sprintf( s, \"%s\", modrm_string );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_RMXMM:\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tif (pre0f != 0xf2 && pre0f != 0xf3)\n\t\t\t\t\ts += sprintf( s, \"xmm%d\", MODRM_REG2 | rmex );\n\t\t\t\telse\n\t\t\t\t\ts += sprintf( s, \"%s\", i386_reg[(operand_size == 2) ? 2 : 1][MODRM_REG2 | rmex] );\n\t\t\t} else {\n\t\t\t\tif (param == PARAM_RMPTR32)\n\t\t\t\t\ts += sprintf( s, \"dword ptr \" );\n\t\t\t\ts += sprintf( s, \"%s\", modrm_string );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_M64:\n\t\tcase PARAM_M64PTR:\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\ts += sprintf( s, \"???\" );\n\t\t\t} else {\n\t\t\t\tif (param == PARAM_M64PTR)\n\t\t\t\t\ts += sprintf( s, \"qword ptr \" );\n\t\t\t\ts += sprintf( s, \"%s\", modrm_string );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_MMXM:\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tif (pre0f == 0x66 || pre0f == 0xf2 || pre0f == 0xf3)\n\t\t\t\t\ts += sprintf( s, \"xmm%d\", MODRM_REG2 | rmex );\n\t\t\t\telse\n\t\t\t\t\ts += sprintf( s, \"mm%d\", MODRM_REG2 | rmex );\n\t\t\t} else {\n\t\t\t\ts += sprintf( s, \"%s\", modrm_string );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_XMMM:\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\ts += sprintf( s, \"xmm%d\", MODRM_REG2 | rmex );\n\t\t\t} else {\n\t\t\t\ts += sprintf( s, \"%s\", modrm_string );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_I4:\n\t\t\ti8 = _FETCHD();\n\t\t\ts += sprintf( s, \"%d\", i8 & 0x0f );\n\t\t\tbreak;\n\n\t\tcase PARAM_I8:\n\t\t\ti8 = _FETCHD();\n\t\t\ts += sprintf( s, \"%s\", shexstring((INT8)i8, 0, FALSE) );\n\t\t\tbreak;\n\n\t\tcase PARAM_I16:\n\t\t\ti16 = _FETCHD16();\n\t\t\ts += sprintf( s, \"%s\", shexstring((INT16)i16, 0, FALSE) );\n\t\t\tbreak;\n\n\t\tcase PARAM_UI8:\n\t\t\ti8 = _FETCHD();\n\t\t\ts += sprintf( s, \"%s\", shexstring((UINT8)i8, 0, FALSE) );\n\t\t\tbreak;\n\n\t\tcase PARAM_UI16:\n\t\t\ti16 = _FETCHD16();\n\t\t\ts += sprintf( s, \"%s\", shexstring((UINT16)i16, 0, FALSE) );\n\t\t\tbreak;\n\n\t\tcase PARAM_IMM64:\n\t\t\tif (operand_size == 2) {\n\t\t\t\tUINT32 lo32 = _FETCHD32();\n\t\t\t\ti32 = _FETCHD32();\n\t\t\t\ts += sprintf( s, \"%s\", hexstring64(lo32, i32) );\n\t\t\t} else if( operand_size ) {\n\t\t\t\ti32 = _FETCHD32();\n\t\t\t\ts += sprintf( s, \"%s\", hexstring(i32, 0) );\n\t\t\t} else {\n\t\t\t\ti16 = _FETCHD16();\n\t\t\t\ts += sprintf( s, \"%s\", hexstring(i16, 0) );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_IMM:\n\t\t\tif( operand_size ) {\n\t\t\t\ti32 = _FETCHD32();\n\t\t\t\ts += sprintf( s, \"%s\", hexstring(i32, 0) );\n\t\t\t} else {\n\t\t\t\ti16 = _FETCHD16();\n\t\t\t\ts += sprintf( s, \"%s\", hexstring(i16, 0) );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_ADDR:\n\t\t\tif( operand_size ) {\n\t\t\t\taddr = _FETCHD32();\n\t\t\t\tptr = _FETCHD16();\n\t\t\t\ts += sprintf( s, \"%s:\", hexstring(ptr, 4) );\n\t\t\t\ts += sprintf( s, \"%s\", hexstring(addr, 0) );\n\t\t\t} else {\n\t\t\t\taddr = _FETCHD16();\n\t\t\t\tptr = _FETCHD16();\n\t\t\t\ts += sprintf( s, \"%s:\", hexstring(ptr, 4) );\n\t\t\t\ts += sprintf( s, \"%s\", hexstring(addr, 0) );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_REL:\n\t\t\tif( operand_size ) {\n\t\t\t\td32 = _FETCHD32();\n\t\t\t\ts += sprintf( s, \"%s\", hexstringpc(pc + d32) );\n\t\t\t} else {\n\t\t\t\t/* make sure to keep the relative offset within the segment */\n\t\t\t\td16 = _FETCHD16();\n\t\t\t\ts += sprintf( s, \"%s\", hexstringpc((pc & 0xFFFF0000) | ((pc + d16) & 0x0000FFFF)) );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_REL8:\n\t\t\td8 = _FETCHD();\n\t\t\ts += sprintf( s, \"%s\", hexstringpc(pc + d8) );\n\t\t\tbreak;\n\n\t\tcase PARAM_MEM_OFFS:\n\t\t\tswitch(segment)\n\t\t\t{\n\t\t\t\tcase SEG_CS: s += sprintf( s, \"cs:\" ); break;\n\t\t\t\tcase SEG_DS: s += sprintf( s, \"ds:\" ); break;\n\t\t\t\tcase SEG_ES: s += sprintf( s, \"es:\" ); break;\n\t\t\t\tcase SEG_FS: s += sprintf( s, \"fs:\" ); break;\n\t\t\t\tcase SEG_GS: s += sprintf( s, \"gs:\" ); break;\n\t\t\t\tcase SEG_SS: s += sprintf( s, \"ss:\" ); break;\n\t\t\t}\n\n\t\t\tif( address_size ) {\n\t\t\t\ti32 = _FETCHD32();\n\t\t\t\ts += sprintf( s, \"[%s]\", hexstring(i32, 0) );\n\t\t\t} else {\n\t\t\t\ti16 = _FETCHD16();\n\t\t\t\ts += sprintf( s, \"[%s]\", hexstring(i16, 0) );\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_PREIMP:\n\t\t\tswitch(segment)\n\t\t\t{\n\t\t\t\tcase SEG_CS: s += sprintf( s, \"cs:\" ); break;\n\t\t\t\tcase SEG_DS: s += sprintf( s, \"ds:\" ); break;\n\t\t\t\tcase SEG_ES: s += sprintf( s, \"es:\" ); break;\n\t\t\t\tcase SEG_FS: s += sprintf( s, \"fs:\" ); break;\n\t\t\t\tcase SEG_GS: s += sprintf( s, \"gs:\" ); break;\n\t\t\t\tcase SEG_SS: s += sprintf( s, \"ss:\" ); break;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase PARAM_SREG:\n\t\t\ts += sprintf( s, \"%s\", i386_sreg[MODRM_REG1] );\n\t\t\tbreak;\n\n\t\tcase PARAM_CREG:\n\t\t\ts += sprintf( s, \"cr%d\", MODRM_REG1 | regex );\n\t\t\tbreak;\n\n\t\tcase PARAM_TREG:\n\t\t\ts += sprintf( s, \"tr%d\", MODRM_REG1 | regex );\n\t\t\tbreak;\n\n\t\tcase PARAM_DREG:\n\t\t\ts += sprintf( s, \"dr%d\", MODRM_REG1 | regex );\n\t\t\tbreak;\n\n\t\tcase PARAM_1:\n\t\t\ts += sprintf( s, \"1\" );\n\t\t\tbreak;\n\n\t\tcase PARAM_DX:\n\t\t\ts += sprintf( s, \"dx\" );\n\t\t\tbreak;\n\n\t\tcase PARAM_XMM0:\n\t\t\ts += sprintf( s, \"xmm0\" );\n\t\t\tbreak;\n\n\t\tcase PARAM_AL: s += sprintf( s, \"al\" ); break;\n\t\tcase PARAM_CL: s += sprintf( s, \"cl\" ); break;\n\t\tcase PARAM_DL: s += sprintf( s, \"dl\" ); break;\n\t\tcase PARAM_BL: s += sprintf( s, \"bl\" ); break;\n\t\tcase PARAM_AH: s += sprintf( s, \"ah\" ); break;\n\t\tcase PARAM_CH: s += sprintf( s, \"ch\" ); break;\n\t\tcase PARAM_DH: s += sprintf( s, \"dh\" ); break;\n\t\tcase PARAM_BH: s += sprintf( s, \"bh\" ); break;\n\n\t\tcase PARAM_EAX: s += sprintf( s, \"%s\", i386_reg[operand_size][0 | rmex] ); break;\n\t\tcase PARAM_ECX: s += sprintf( s, \"%s\", i386_reg[operand_size][1 | rmex] ); break;\n\t\tcase PARAM_EDX: s += sprintf( s, \"%s\", i386_reg[operand_size][2 | rmex] ); break;\n\t\tcase PARAM_EBX: s += sprintf( s, \"%s\", i386_reg[operand_size][3 | rmex] ); break;\n\t\tcase PARAM_ESP: s += sprintf( s, \"%s\", i386_reg[operand_size][4 | rmex] ); break;\n\t\tcase PARAM_EBP: s += sprintf( s, \"%s\", i386_reg[operand_size][5 | rmex] ); break;\n\t\tcase PARAM_ESI: s += sprintf( s, \"%s\", i386_reg[operand_size][6 | rmex] ); break;\n\t\tcase PARAM_EDI: s += sprintf( s, \"%s\", i386_reg[operand_size][7 | rmex] ); break;\n\t}\n\treturn s;\n}\n\nstatic void handle_fpu(char *s, UINT8 op1, UINT8 op2)\n{\n\tswitch (op1 & 0x7)\n\t{\n\t\tcase 0:     // Group D8\n\t\t{\n\t\t\tif (op2 < 0xc0)\n\t\t\t{\n\t\t\t\tpc--;       // adjust fetch pointer, so modrm byte read again\n\t\t\t\topcode_ptr--;\n\t\t\t\thandle_modrm( modrm_string );\n\t\t\t\tswitch ((op2 >> 3) & 0x7)\n\t\t\t\t{\n\t\t\t\t\tcase 0: sprintf(s, \"fadd    dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 1: sprintf(s, \"fmul    dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 2: sprintf(s, \"fcom    dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 3: sprintf(s, \"fcomp   dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 4: sprintf(s, \"fsub    dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 5: sprintf(s, \"fsubr   dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 6: sprintf(s, \"fdiv    dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 7: sprintf(s, \"fdivr   dword ptr %s\", modrm_string); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tswitch ((op2 >> 3) & 0x7)\n\t\t\t\t{\n\t\t\t\t\tcase 0: sprintf(s, \"fadd    st(0),st(%d)\", op2 & 0x7); break;\n\t\t\t\t\tcase 1: sprintf(s, \"fmul    st(0),st(%d)\", op2 & 0x7); break;\n\t\t\t\t\tcase 2: sprintf(s, \"fcom    st(0),st(%d)\", op2 & 0x7); break;\n\t\t\t\t\tcase 3: sprintf(s, \"fcomp   st(0),st(%d)\", op2 & 0x7); break;\n\t\t\t\t\tcase 4: sprintf(s, \"fsub    st(0),st(%d)\", op2 & 0x7); break;\n\t\t\t\t\tcase 5: sprintf(s, \"fsubr   st(0),st(%d)\", op2 & 0x7); break;\n\t\t\t\t\tcase 6: sprintf(s, \"fdiv    st(0),st(%d)\", op2 & 0x7); break;\n\t\t\t\t\tcase 7: sprintf(s, \"fdivr   st(0),st(%d)\", op2 & 0x7); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 1:     // Group D9\n\t\t{\n\t\t\tif (op2 < 0xc0)\n\t\t\t{\n\t\t\t\tpc--;       // adjust fetch pointer, so modrm byte read again\n\t\t\t\topcode_ptr--;\n\t\t\t\thandle_modrm( modrm_string );\n\t\t\t\tswitch ((op2 >> 3) & 0x7)\n\t\t\t\t{\n\t\t\t\t\tcase 0: sprintf(s, \"fld     dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 1: sprintf(s, \"??? (FPU)\"); break;\n\t\t\t\t\tcase 2: sprintf(s, \"fst     dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 3: sprintf(s, \"fstp    dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 4: sprintf(s, \"fldenv  word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 5: sprintf(s, \"fldcw   word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 6: sprintf(s, \"fstenv  word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 7: sprintf(s, \"fstcw   word ptr %s\", modrm_string); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tswitch (op2 & 0x3f)\n\t\t\t\t{\n\t\t\t\t\tcase 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07:\n\t\t\t\t\t\tsprintf(s, \"fld     st(0),st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f:\n\t\t\t\t\t\tsprintf(s, \"fxch    st(0),st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x10: sprintf(s, \"fnop\"); break;\n\t\t\t\t\tcase 0x20: sprintf(s, \"fchs\"); break;\n\t\t\t\t\tcase 0x21: sprintf(s, \"fabs\"); break;\n\t\t\t\t\tcase 0x24: sprintf(s, \"ftst\"); break;\n\t\t\t\t\tcase 0x25: sprintf(s, \"fxam\"); break;\n\t\t\t\t\tcase 0x28: sprintf(s, \"fld1\"); break;\n\t\t\t\t\tcase 0x29: sprintf(s, \"fldl2t\"); break;\n\t\t\t\t\tcase 0x2a: sprintf(s, \"fldl2e\"); break;\n\t\t\t\t\tcase 0x2b: sprintf(s, \"fldpi\"); break;\n\t\t\t\t\tcase 0x2c: sprintf(s, \"fldlg2\"); break;\n\t\t\t\t\tcase 0x2d: sprintf(s, \"fldln2\"); break;\n\t\t\t\t\tcase 0x2e: sprintf(s, \"fldz\"); break;\n\t\t\t\t\tcase 0x30: sprintf(s, \"f2xm1\"); break;\n\t\t\t\t\tcase 0x31: sprintf(s, \"fyl2x\"); break;\n\t\t\t\t\tcase 0x32: sprintf(s, \"fptan\"); break;\n\t\t\t\t\tcase 0x33: sprintf(s, \"fpatan\"); break;\n\t\t\t\t\tcase 0x34: sprintf(s, \"fxtract\"); break;\n\t\t\t\t\tcase 0x35: sprintf(s, \"fprem1\"); break;\n\t\t\t\t\tcase 0x36: sprintf(s, \"fdecstp\"); break;\n\t\t\t\t\tcase 0x37: sprintf(s, \"fincstp\"); break;\n\t\t\t\t\tcase 0x38: sprintf(s, \"fprem\"); break;\n\t\t\t\t\tcase 0x39: sprintf(s, \"fyl2xp1\"); break;\n\t\t\t\t\tcase 0x3a: sprintf(s, \"fsqrt\"); break;\n\t\t\t\t\tcase 0x3b: sprintf(s, \"fsincos\"); break;\n\t\t\t\t\tcase 0x3c: sprintf(s, \"frndint\"); break;\n\t\t\t\t\tcase 0x3d: sprintf(s, \"fscale\"); break;\n\t\t\t\t\tcase 0x3e: sprintf(s, \"fsin\"); break;\n\t\t\t\t\tcase 0x3f: sprintf(s, \"fcos\"); break;\n\n\t\t\t\t\tdefault: sprintf(s, \"??? (FPU)\"); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 2:     // Group DA\n\t\t{\n\t\t\tif (op2 < 0xc0)\n\t\t\t{\n\t\t\t\tpc--;       // adjust fetch pointer, so modrm byte read again\n\t\t\t\topcode_ptr--;\n\t\t\t\thandle_modrm( modrm_string );\n\t\t\t\tswitch ((op2 >> 3) & 0x7)\n\t\t\t\t{\n\t\t\t\t\tcase 0: sprintf(s, \"fiadd   dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 1: sprintf(s, \"fimul   dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 2: sprintf(s, \"ficom   dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 3: sprintf(s, \"ficomp  dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 4: sprintf(s, \"fisub   dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 5: sprintf(s, \"fisubr  dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 6: sprintf(s, \"fidiv   dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 7: sprintf(s, \"fidivr  dword ptr %s\", modrm_string); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tswitch (op2 & 0x3f)\n\t\t\t\t{\n\t\t\t\t\tcase 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07:\n\t\t\t\t\t\tsprintf(s, \"fcmovb  st(0),st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f:\n\t\t\t\t\t\tsprintf(s, \"fcmove  st(0),st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17:\n\t\t\t\t\t\tsprintf(s, \"fcmovbe st(0),st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x18: case 0x19: case 0x1a: case 0x1b: case 0x1c: case 0x1d: case 0x1e: case 0x1f:\n\t\t\t\t\t\tsprintf(s, \"fcmovu  st(0),st(%d)\", op2 & 0x7); break;\n\t\t\t\t\tcase 0x29:\n\t\t\t\t\t\tsprintf(s, \"fucompp\"); break;\n\n\t\t\t\t\tdefault: sprintf(s, \"??? (FPU)\"); break;\n\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 3:     // Group DB\n\t\t{\n\t\t\tif (op2 < 0xc0)\n\t\t\t{\n\t\t\t\tpc--;       // adjust fetch pointer, so modrm byte read again\n\t\t\t\topcode_ptr--;\n\t\t\t\thandle_modrm( modrm_string );\n\t\t\t\tswitch ((op2 >> 3) & 0x7)\n\t\t\t\t{\n\t\t\t\t\tcase 0: sprintf(s, \"fild    dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 1: sprintf(s, \"fisttp  dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 2: sprintf(s, \"fist    dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 3: sprintf(s, \"fistp   dword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 4: sprintf(s, \"??? (FPU)\"); break;\n\t\t\t\t\tcase 5: sprintf(s, \"fld     tword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 6: sprintf(s, \"??? (FPU)\"); break;\n\t\t\t\t\tcase 7: sprintf(s, \"fstp    tword ptr %s\", modrm_string); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tswitch (op2 & 0x3f)\n\t\t\t\t{\n\t\t\t\t\tcase 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07:\n\t\t\t\t\t\tsprintf(s, \"fcmovnb st(0),st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f:\n\t\t\t\t\t\tsprintf(s, \"fcmovne st(0),st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17:\n\t\t\t\t\t\tsprintf(s, \"fcmovnbe st(0),st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x18: case 0x19: case 0x1a: case 0x1b: case 0x1c: case 0x1d: case 0x1e: case 0x1f:\n\t\t\t\t\t\tsprintf(s, \"fcmovnu st(0),st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x22: sprintf(s, \"fclex\"); break;\n\t\t\t\t\tcase 0x23: sprintf(s, \"finit\"); break;\n\n\t\t\t\t\tcase 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f:\n\t\t\t\t\t\tsprintf(s, \"fucomi  st(0),st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37:\n\t\t\t\t\t\tsprintf(s, \"fcomi   st(0),st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tdefault: sprintf(s, \"??? (FPU)\"); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 4:     // Group DC\n\t\t{\n\t\t\tif (op2 < 0xc0)\n\t\t\t{\n\t\t\t\tpc--;       // adjust fetch pointer, so modrm byte read again\n\t\t\t\topcode_ptr--;\n\t\t\t\thandle_modrm( modrm_string );\n\t\t\t\tswitch ((op2 >> 3) & 0x7)\n\t\t\t\t{\n\t\t\t\t\tcase 0: sprintf(s, \"fadd    qword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 1: sprintf(s, \"fmul    qword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 2: sprintf(s, \"fcom    qword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 3: sprintf(s, \"fcomp   qword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 4: sprintf(s, \"fsub    qword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 5: sprintf(s, \"fsubr   qword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 6: sprintf(s, \"fdiv    qword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 7: sprintf(s, \"fdivr   qword ptr %s\", modrm_string); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tswitch (op2 & 0x3f)\n\t\t\t\t{\n\t\t\t\t\tcase 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07:\n\t\t\t\t\t\tsprintf(s, \"fadd    st(%d),st(0)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f:\n\t\t\t\t\t\tsprintf(s, \"fmul    st(%d),st(0)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27:\n\t\t\t\t\t\tsprintf(s, \"fsubr   st(%d),st(0)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f:\n\t\t\t\t\t\tsprintf(s, \"fsub    st(%d),st(0)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37:\n\t\t\t\t\t\tsprintf(s, \"fdivr   st(%d),st(0)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x38: case 0x39: case 0x3a: case 0x3b: case 0x3c: case 0x3d: case 0x3e: case 0x3f:\n\t\t\t\t\t\tsprintf(s, \"fdiv    st(%d),st(0)\", op2 & 0x7); break;\n\n\t\t\t\t\tdefault: sprintf(s, \"??? (FPU)\"); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 5:     // Group DD\n\t\t{\n\t\t\tif (op2 < 0xc0)\n\t\t\t{\n\t\t\t\tpc--;       // adjust fetch pointer, so modrm byte read again\n\t\t\t\topcode_ptr--;\n\t\t\t\thandle_modrm( modrm_string );\n\t\t\t\tswitch ((op2 >> 3) & 0x7)\n\t\t\t\t{\n\t\t\t\t\tcase 0: sprintf(s, \"fld     qword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 1: sprintf(s, \"fisttp  qword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 2: sprintf(s, \"fst     qword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 3: sprintf(s, \"fstp    qword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 4: sprintf(s, \"frstor  %s\", modrm_string); break;\n\t\t\t\t\tcase 5: sprintf(s, \"??? (FPU)\"); break;\n\t\t\t\t\tcase 6: sprintf(s, \"fsave   %s\", modrm_string); break;\n\t\t\t\t\tcase 7: sprintf(s, \"fstsw   word ptr %s\", modrm_string); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tswitch (op2 & 0x3f)\n\t\t\t\t{\n\t\t\t\t\tcase 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07:\n\t\t\t\t\t\tsprintf(s, \"ffree   st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17:\n\t\t\t\t\t\tsprintf(s, \"fst     st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x18: case 0x19: case 0x1a: case 0x1b: case 0x1c: case 0x1d: case 0x1e: case 0x1f:\n\t\t\t\t\t\tsprintf(s, \"fstp    st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27:\n\t\t\t\t\t\tsprintf(s, \"fucom   st(%d), st(0)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f:\n\t\t\t\t\t\tsprintf(s, \"fucomp  st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tdefault: sprintf(s, \"??? (FPU)\"); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 6:     // Group DE\n\t\t{\n\t\t\tif (op2 < 0xc0)\n\t\t\t{\n\t\t\t\tpc--;       // adjust fetch pointer, so modrm byte read again\n\t\t\t\topcode_ptr--;\n\t\t\t\thandle_modrm( modrm_string );\n\t\t\t\tswitch ((op2 >> 3) & 0x7)\n\t\t\t\t{\n\t\t\t\t\tcase 0: sprintf(s, \"fiadd   word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 1: sprintf(s, \"fimul   word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 2: sprintf(s, \"ficom   word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 3: sprintf(s, \"ficomp  word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 4: sprintf(s, \"fisub   word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 5: sprintf(s, \"fisubr  word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 6: sprintf(s, \"fidiv   word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 7: sprintf(s, \"fidivr  word ptr %s\", modrm_string); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tswitch (op2 & 0x3f)\n\t\t\t\t{\n\t\t\t\t\tcase 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07:\n\t\t\t\t\t\tsprintf(s, \"faddp   st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f:\n\t\t\t\t\t\tsprintf(s, \"fmulp   st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x19: sprintf(s, \"fcompp\"); break;\n\n\t\t\t\t\tcase 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27:\n\t\t\t\t\t\tsprintf(s, \"fsubrp  st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f:\n\t\t\t\t\t\tsprintf(s, \"fsubp   st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37:\n\t\t\t\t\t\tsprintf(s, \"fdivrp  st(%d), st(0)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x38: case 0x39: case 0x3a: case 0x3b: case 0x3c: case 0x3d: case 0x3e: case 0x3f:\n\t\t\t\t\t\tsprintf(s, \"fdivp   st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tdefault: sprintf(s, \"??? (FPU)\"); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase 7:     // Group DF\n\t\t{\n\t\t\tif (op2 < 0xc0)\n\t\t\t{\n\t\t\t\tpc--;       // adjust fetch pointer, so modrm byte read again\n\t\t\t\topcode_ptr--;\n\t\t\t\thandle_modrm( modrm_string );\n\t\t\t\tswitch ((op2 >> 3) & 0x7)\n\t\t\t\t{\n\t\t\t\t\tcase 0: sprintf(s, \"fild    word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 1: sprintf(s, \"fisttp  word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 2: sprintf(s, \"fist    word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 3: sprintf(s, \"fistp   word ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 4: sprintf(s, \"fbld    %s\", modrm_string); break;\n\t\t\t\t\tcase 5: sprintf(s, \"fild    qword ptr %s\", modrm_string); break;\n\t\t\t\t\tcase 6: sprintf(s, \"fbstp   %s\", modrm_string); break;\n\t\t\t\t\tcase 7: sprintf(s, \"fistp   qword ptr %s\", modrm_string); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tswitch (op2 & 0x3f)\n\t\t\t\t{\n\t\t\t\t\tcase 0x20: sprintf(s, \"fstsw   ax\"); break;\n\n\t\t\t\t\tcase 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f:\n\t\t\t\t\t\tsprintf(s, \"fucomip st(%d)\", op2 & 0x7); break;\n\n\t\t\t\t\tcase 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37:\n\t\t\t\t\t\tsprintf(s, \"fcomip  st(%d),st(0)\", op2 & 0x7); break;\n\n\t\t\t\t\tdefault: sprintf(s, \"??? (FPU)\"); break;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\nstatic void decode_opcode(char *s, const I386_OPCODE *op, UINT8 op1)\n{\n\tint i;\n\tUINT8 op2;\n\n\tif ((op->flags & SPECIAL64) && (address_size == 2))\n\t\top = &x64_opcode_alt[op->flags >> 24];\n\n\tswitch( op->flags & FLAGS_MASK )\n\t{\n\t\tcase ISREX:\n\t\t\tif (curmode == 64)\n\t\t\t{\n\t\t\t\trex = op1;\n\t\t\t\toperand_size = (op1 & 8) ? 2 : 1;\n\t\t\t\tregex = (op1 << 1) & 8;\n\t\t\t\tsibex = (op1 << 2) & 8;\n\t\t\t\trmex = (op1 << 3) & 8;\n\t\t\t\top2 = _FETCH();\n\t\t\t\tdecode_opcode( s, &i386_opcode_table1[op2], op1 );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase OP_SIZE:\n\t\t\trex = regex = sibex = rmex = 0;\n\t\t\tif (operand_size < 2 && operand_prefix == 0)\n\t\t\t{\n\t\t\t\toperand_size ^= 1;\n\t\t\t\toperand_prefix = 1;\n\t\t\t}\n\t\t\top2 = _FETCH();\n\t\t\tdecode_opcode( s, &i386_opcode_table1[op2], op2 );\n\t\t\treturn;\n\n\t\tcase ADDR_SIZE:\n\t\t\trex = regex = sibex = rmex = 0;\n\t\t\tif(address_prefix == 0)\n\t\t\t{\n\t\t\t\tif (curmode != 64)\n\t\t\t\t\taddress_size ^= 1;\n\t\t\t\telse\n\t\t\t\t\taddress_size ^= 3;\n\t\t\t\taddress_prefix = 1;\n\t\t\t}\n\t\t\top2 = _FETCH();\n\t\t\tdecode_opcode( s, &i386_opcode_table1[op2], op2 );\n\t\t\treturn;\n\n\t\tcase TWO_BYTE:\n\t\t\tif (&opcode_ptr[-2] >= opcode_ptr_base)\n\t\t\t\tpre0f = opcode_ptr[-2];\n\t\t\top2 = _FETCHD();\n\t\t\tdecode_opcode( s, &i386_opcode_table2[op2], op1 );\n\t\t\treturn;\n\n\t\tcase THREE_BYTE:\n\t\t\top2 = _FETCHD();\n\t\t\tif (opcode_ptr[-2] == 0x38)\n\t\t\t\tdecode_opcode( s, &i386_opcode_table0F38[op2], op1 );\n\t\t\telse\n\t\t\t\tdecode_opcode( s, &i386_opcode_table0F3A[op2], op1 );\n\t\t\treturn;\n\n\t\tcase SEG_CS:\n\t\tcase SEG_DS:\n\t\tcase SEG_ES:\n\t\tcase SEG_FS:\n\t\tcase SEG_GS:\n\t\tcase SEG_SS:\n\t\t\trex = regex = sibex = rmex = 0;\n\t\t\tsegment = op->flags;\n\t\t\top2 = _FETCH();\n\t\t\tdecode_opcode( s, &i386_opcode_table1[op2], op2 );\n\t\t\treturn;\n\n\t\tcase PREFIX:\n\t\t\top2 = _FETCH();\n\t\t\tif ((op2 != 0x0f) && (op2 != 0x90))\n\t\t\t\ts += sprintf( s, \"%-7s \", op->mnemonic );\n\t\t\tif ((op2 == 0x90) && !pre0f)\n\t\t\t\tpre0f = op1;\n\t\t\tdecode_opcode( s, &i386_opcode_table1[op2], op2 );\n\t\t\treturn;\n\n\t\tcase GROUP:\n\t\t\thandle_modrm( modrm_string );\n\t\t\tfor( i=0; i < ARRAY_LENGTH(group_op_table); i++ ) {\n\t\t\t\tif( strcmp(op->mnemonic, group_op_table[i].mnemonic) == 0 ) {\n\t\t\t\t\tdecode_opcode( s, &group_op_table[i].opcode[MODRM_REG1], op1 );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tgoto handle_unknown;\n\n\t\tcase FPU:\n\t\t\top2 = _FETCHD();\n\t\t\thandle_fpu( s, op1, op2);\n\t\t\treturn;\n\n\t\tcase MODRM:\n\t\t\thandle_modrm( modrm_string );\n\t\t\tbreak;\n\t}\n\n\tif ((op->flags & ALWAYS64) && curmode == 64)\n\t\toperand_size = 2;\n\n\tif ((op->flags & VAR_NAME) && operand_size > 0)\n\t{\n\t\tconst char *mnemonic = op->mnemonic + strlen(op->mnemonic) + 1;\n\t\tif (operand_size == 2)\n\t\t\tmnemonic += strlen(mnemonic) + 1;\n\t\ts += sprintf( s, \"%-7s \", mnemonic );\n\t}\n\telse if (op->flags & VAR_NAME4)\n\t{\n\t\tconst char *mnemonic = op->mnemonic;\n\t\tint which = (pre0f == 0xf3) ? 3 : (pre0f == 0xf2) ? 2 : (pre0f == 0x66) ? 1 : 0;\n\t\twhile (which--)\n\t\t\tmnemonic += strlen(mnemonic) + 1;\n\t\ts += sprintf( s, \"%-7s \", mnemonic );\n\t}\n\telse\n\t\ts += sprintf( s, \"%-7s \", op->mnemonic );\n\tdasm_flags = op->dasm_flags;\n\n\tif( op->param1 != 0 ) {\n\t\ts = handle_param( s, op->param1 );\n\t}\n\n\tif( op->param2 != 0 ) {\n\t\ts += sprintf( s, \",\" );\n\t\ts = handle_param( s, op->param2 );\n\t}\n\n\tif( op->param3 != 0 ) {\n\t\ts += sprintf( s, \",\" );\n\t\ts = handle_param( s, op->param3 );\n\t}\n\treturn;\n\nhandle_unknown:\n\tsprintf(s, \"???\");\n}\n\nint i386_dasm_one_ex(char *buffer, UINT64 eip, const UINT8 *oprom, int mode)\n{\n\tUINT8 op;\n\n\topcode_ptr = opcode_ptr_base = oprom;\n\tswitch(mode)\n\t{\n\t\tcase 1: /* 8086/8088/80186/80188 */\n\t\t\taddress_size = 0;\n\t\t\toperand_size = 0;\n\t\t\tmax_length = 8; /* maximum without redundant prefixes - not enforced by chip */\n\t\t\tbreak;\n\t\tcase 2: /* 80286 */\n\t\t\taddress_size = 0;\n\t\t\toperand_size = 0;\n\t\t\tmax_length = 10;\n\t\t\tbreak;\n\t\tcase 16: /* 80386+ 16-bit code segment */\n\t\t\taddress_size = 0;\n\t\t\toperand_size = 0;\n\t\t\tmax_length = 15;\n\t\t\tbreak;\n\t\tcase 32: /* 80386+ 32-bit code segment */\n\t\t\taddress_size = 1;\n\t\t\toperand_size = 1;\n\t\t\tmax_length = 15;\n\t\t\tbreak;\n\t\tcase 64: /* x86_64 */\n\t\t\taddress_size = 2;\n\t\t\toperand_size = 1;\n\t\t\tmax_length = 15;\n\t\t\tbreak;\n\t}\n\tpc = eip;\n\tdasm_flags = 0;\n\tsegment = 0;\n\tcurmode = mode;\n\tpre0f = 0;\n\trex = regex = sibex = rmex = 0;\n\taddress_prefix = 0;\n\toperand_prefix = 0;\n\n\top = _FETCH();\n\n\tdecode_opcode( buffer, &i386_opcode_table1[op], op );\n\treturn (pc-eip) | dasm_flags | DASMFLAG_SUPPORTED;\n}\n\nint i386_dasm_one(char *buffer, offs_t eip, const UINT8 *oprom, int mode)\n{\n\treturn i386_dasm_one_ex(buffer, eip, oprom, mode);\n}\n\nCPU_DISASSEMBLE( x86_16 )\n{\n\treturn i386_dasm_one_ex(buffer, pc, oprom, 16);\n}\n\nCPU_DISASSEMBLE( x86_32 )\n{\n\treturn i386_dasm_one_ex(buffer, pc, oprom, 32);\n}\n\nCPU_DISASSEMBLE( x86_64 )\n{\n\treturn i386_dasm_one_ex(buffer, pc, oprom, 64);\n}\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386.old/i386op16.c",
    "content": "static UINT16 I386OP(shift_rotate16)(UINT8 modrm, UINT32 value, UINT8 shift)\n{\n\tUINT32 src = value & 0xffff;\n\tUINT16 dst = value;\n\n\tif( shift == 0 ) {\n\t\tCYCLES_RM(modrm, 3, 7);\n\t} else if( shift == 1 ) {\n\t\tswitch( (modrm >> 3) & 0x7 )\n\t\t{\n\t\t\tcase 0:         /* ROL rm16, 1 */\n\t\t\t\tm_CF = (src & 0x8000) ? 1 : 0;\n\t\t\t\tdst = (src << 1) + m_CF;\n\t\t\t\tm_OF = ((src ^ dst) & 0x8000) ? 1 : 0;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 1:         /* ROR rm16, 1 */\n\t\t\t\tm_CF = (src & 0x1) ? 1 : 0;\n\t\t\t\tdst = (m_CF << 15) | (src >> 1);\n\t\t\t\tm_OF = ((src ^ dst) & 0x8000) ? 1 : 0;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 2:         /* RCL rm16, 1 */\n\t\t\t\tdst = (src << 1) + m_CF;\n\t\t\t\tm_CF = (src & 0x8000) ? 1 : 0;\n\t\t\t\tm_OF = ((src ^ dst) & 0x8000) ? 1 : 0;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 3:         /* RCR rm16, 1 */\n\t\t\t\tdst = (m_CF << 15) | (src >> 1);\n\t\t\t\tm_CF = src & 0x1;\n\t\t\t\tm_OF = ((src ^ dst) & 0x8000) ? 1 : 0;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 4:         /* SHL/SAL rm16, 1 */\n\t\t\tcase 6:\n\t\t\t\tdst = src << 1;\n\t\t\t\tm_CF = (src & 0x8000) ? 1 : 0;\n\t\t\t\tm_OF = (((m_CF << 15) ^ dst) & 0x8000) ? 1 : 0;\n\t\t\t\tSetSZPF16(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 5:         /* SHR rm16, 1 */\n\t\t\t\tdst = src >> 1;\n\t\t\t\tm_CF = src & 0x1;\n\t\t\t\tm_OF = (dst & 0x8000) ? 1 : 0;\n\t\t\t\tSetSZPF16(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 7:         /* SAR rm16, 1 */\n\t\t\t\tdst = (INT16)(src) >> 1;\n\t\t\t\tm_CF = src & 0x1;\n\t\t\t\tm_OF = 0;\n\t\t\t\tSetSZPF16(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t}\n\t} else {\n\t\tswitch( (modrm >> 3) & 0x7 )\n\t\t{\n\t\t\tcase 0:         /* ROL rm16, i8 */\n\t\t\t\tif(!(shift & 15))\n\t\t\t\t{\n\t\t\t\t\tif(shift & 16)\n\t\t\t\t\t{\n\t\t\t\t\t\tm_CF = src & 1;\n\t\t\t\t\t\tm_OF = (src & 1) ^ ((src >> 15) & 1);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tshift &= 15;\n\t\t\t\tdst = ((src & ((UINT16)0xffff >> shift)) << shift) |\n\t\t\t\t\t\t((src & ((UINT16)0xffff << (16-shift))) >> (16-shift));\n\t\t\t\tm_CF = dst & 0x1;\n\t\t\t\tm_OF = (dst & 1) ^ (dst >> 15);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 1:         /* ROR rm16, i8 */\n\t\t\t\tif(!(shift & 15))\n\t\t\t\t{\n\t\t\t\t\tif(shift & 16)\n\t\t\t\t\t{\n\t\t\t\t\t\tm_CF = (src >> 15) & 1;\n\t\t\t\t\t\tm_OF = ((src >> 15) & 1) ^ ((src >> 14) & 1);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tshift &= 15;\n\t\t\t\tdst = ((src & ((UINT16)0xffff << shift)) >> shift) |\n\t\t\t\t\t\t((src & ((UINT16)0xffff >> (16-shift))) << (16-shift));\n\t\t\t\tm_CF = (dst >> 15) & 1;\n\t\t\t\tm_OF = ((dst >> 15) ^ (dst >> 14)) & 1;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 2:         /* RCL rm16, i8 */\n\t\t\t\tshift %= 17;\n\t\t\t\tdst = ((src & ((UINT16)0xffff >> shift)) << shift) |\n\t\t\t\t\t\t((src & ((UINT16)0xffff << (17-shift))) >> (17-shift)) |\n\t\t\t\t\t\t(m_CF << (shift-1));\n\t\t\t\tif(shift) m_CF = (src >> (16-shift)) & 0x1;\n\t\t\t\tm_OF = m_CF ^ ((dst >> 15) & 1);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 3:         /* RCR rm16, i8 */\n\t\t\t\tshift %= 17;\n\t\t\t\tdst = ((src & ((UINT16)0xffff << shift)) >> shift) |\n\t\t\t\t\t\t((src & ((UINT16)0xffff >> (16-shift))) << (17-shift)) |\n\t\t\t\t\t\t(m_CF << (16-shift));\n\t\t\t\tif(shift) m_CF = (src >> (shift-1)) & 0x1;\n\t\t\t\tm_OF = ((dst >> 15) ^ (dst >> 14)) & 1;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 4:         /* SHL/SAL rm16, i8 */\n\t\t\tcase 6:\n\t\t\t\tshift &= 31;\n\t\t\t\tdst = src << shift;\n\t\t\t\tm_CF = (shift <= 16) && (src & (1 << (16-shift)));\n\t\t\t\tSetSZPF16(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 5:         /* SHR rm16, i8 */\n\t\t\t\tshift &= 31;\n\t\t\t\tdst = src >> shift;\n\t\t\t\tm_CF = (src & (1 << (shift-1))) ? 1 : 0;\n\t\t\t\tSetSZPF16(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 7:         /* SAR rm16, i8 */\n\t\t\t\tshift &= 31;\n\t\t\t\tdst = (INT16)src >> shift;\n\t\t\t\tm_CF = (src & (1 << (shift-1))) ? 1 : 0;\n\t\t\t\tSetSZPF16(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t}\n\n\t}\n\treturn dst;\n}\n\n\n\nstatic void I386OP(adc_rm16_r16)()      // Opcode 0x11\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = LOAD_RM16(modrm);\n\t\tdst = ADC16(dst, src, m_CF);\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = READ16(ea);\n\t\tdst = ADC16(dst, src, m_CF);\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(adc_r16_rm16)()      // Opcode 0x13\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM16(modrm);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = ADC16(dst, src, m_CF);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ16(ea);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = ADC16(dst, src, m_CF);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(adc_ax_i16)()        // Opcode 0x15\n{\n\tUINT16 src, dst;\n\tsrc = FETCH16();\n\tdst = REG16(AX);\n\tdst = ADC16(dst, src, m_CF);\n\tREG16(AX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(add_rm16_r16)()      // Opcode 0x01\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = LOAD_RM16(modrm);\n\t\tdst = ADD16(dst, src);\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = READ16(ea);\n\t\tdst = ADD16(dst, src);\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(add_r16_rm16)()      // Opcode 0x03\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM16(modrm);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = ADD16(dst, src);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ16(ea);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = ADD16(dst, src);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(add_ax_i16)()        // Opcode 0x05\n{\n\tUINT16 src, dst;\n\tsrc = FETCH16();\n\tdst = REG16(AX);\n\tdst = ADD16(dst, src);\n\tREG16(AX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(and_rm16_r16)()      // Opcode 0x21\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = LOAD_RM16(modrm);\n\t\tdst = AND16(dst, src);\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = READ16(ea);\n\t\tdst = AND16(dst, src);\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(and_r16_rm16)()      // Opcode 0x23\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM16(modrm);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = AND16(dst, src);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ16(ea);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = AND16(dst, src);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(and_ax_i16)()        // Opcode 0x25\n{\n\tUINT16 src, dst;\n\tsrc = FETCH16();\n\tdst = REG16(AX);\n\tdst = AND16(dst, src);\n\tREG16(AX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(bsf_r16_rm16)()      // Opcode 0x0f bc\n{\n\tUINT16 src, dst, temp;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM16(modrm);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ16(ea);\n\t}\n\n\tdst = 0;\n\n\tif( src == 0 ) {\n\t\tm_ZF = 1;\n\t} else {\n\t\tm_ZF = 0;\n\t\ttemp = 0;\n\t\twhile( (src & (1 << temp)) == 0 ) {\n\t\t\ttemp++;\n\t\t\tdst = temp;\n\t\t\tCYCLES(CYCLES_BSF);\n\t\t}\n\t\tSTORE_REG16(modrm, dst);\n\t}\n\tCYCLES(CYCLES_BSF_BASE);\n}\n\nstatic void I386OP(bsr_r16_rm16)()      // Opcode 0x0f bd\n{\n\tUINT16 src, dst, temp;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM16(modrm);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ16(ea);\n\t}\n\n\tdst = 0;\n\n\tif( src == 0 ) {\n\t\tm_ZF = 1;\n\t} else {\n\t\tm_ZF = 0;\n\t\tdst = temp = 15;\n\t\twhile( (src & (1 << temp)) == 0 ) {\n\t\t\ttemp--;\n\t\t\tdst = temp;\n\t\t\tCYCLES(CYCLES_BSR);\n\t\t}\n\t\tSTORE_REG16(modrm, dst);\n\t}\n\tCYCLES(CYCLES_BSR_BASE);\n}\n\n\nstatic void I386OP(bt_rm16_r16)()       // Opcode 0x0f a3\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\tUINT16 bit = LOAD_REG16(modrm);\n\n\t\tif( dst & (1 << (bit & 0xf)) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\n\t\tCYCLES(CYCLES_BT_REG_REG);\n\t} else {\n\t\tUINT8 segment;\n\t\tUINT32 ea = GetNonTranslatedEA(modrm,&segment);\n\t\tUINT16 bit = LOAD_REG16(modrm);\n\t\tea += 2*(bit/16);\n\t\tea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),0);\n\t\tbit %= 16;\n\t\tUINT16 dst = READ16(ea);\n\n\t\tif( dst & (1 << bit) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\n\t\tCYCLES(CYCLES_BT_REG_MEM);\n\t}\n}\n\nstatic void I386OP(btc_rm16_r16)()      // Opcode 0x0f bb\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\tUINT16 bit = LOAD_REG16(modrm);\n\n\t\tif( dst & (1 << (bit & 0xf)) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\t\tdst ^= (1 << (bit & 0xf));\n\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_BTC_REG_REG);\n\t} else {\n\t\tUINT8 segment;\n\t\tUINT32 ea = GetNonTranslatedEA(modrm,&segment);\n\t\tUINT16 bit = LOAD_REG16(modrm);\n\t\tea += 2*(bit/16);\n\t\tea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),1);\n\t\tbit %= 16;\n\t\tUINT16 dst = READ16(ea);\n\n\t\tif( dst & (1 << bit) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\t\tdst ^= (1 << bit);\n\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_BTC_REG_MEM);\n\t}\n}\n\nstatic void I386OP(btr_rm16_r16)()      // Opcode 0x0f b3\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\tUINT16 bit = LOAD_REG16(modrm);\n\n\t\tif( dst & (1 << (bit & 0xf)) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\t\tdst &= ~(1 << (bit & 0xf));\n\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_BTR_REG_REG);\n\t} else {\n\t\tUINT8 segment;\n\t\tUINT32 ea = GetNonTranslatedEA(modrm,&segment);\n\t\tUINT16 bit = LOAD_REG16(modrm);\n\t\tea += 2*(bit/16);\n\t\tea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),1);\n\t\tbit %= 16;\n\t\tUINT16 dst = READ16(ea);\n\n\t\tif( dst & (1 << bit) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\t\tdst &= ~(1 << bit);\n\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_BTR_REG_MEM);\n\t}\n}\n\nstatic void I386OP(bts_rm16_r16)()      // Opcode 0x0f ab\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\tUINT16 bit = LOAD_REG16(modrm);\n\n\t\tif( dst & (1 << (bit & 0xf)) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\t\tdst |= (1 << (bit & 0xf));\n\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_BTS_REG_REG);\n\t} else {\n\t\tUINT8 segment;\n\t\tUINT32 ea = GetNonTranslatedEA(modrm,&segment);\n\t\tUINT16 bit = LOAD_REG16(modrm);\n\t\tea += 2*(bit/16);\n\t\tea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),1);\n\t\tbit %= 16;\n\t\tUINT16 dst = READ16(ea);\n\n\t\tif( dst & (1 << bit) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\t\tdst |= (1 << bit);\n\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_BTS_REG_MEM);\n\t}\n}\n\nstatic void I386OP(call_abs16)()        // Opcode 0x9a\n{\n\tUINT16 offset = FETCH16();\n\tUINT16 ptr = FETCH16();\n\n\tif( PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\ti386_protected_mode_call(ptr,offset,0,0);\n\t}\n\telse\n\t{\n\t\tPUSH16(m_sreg[CS].selector );\n\t\tPUSH16(m_eip );\n\t\tm_sreg[CS].selector = ptr;\n\t\tm_performed_intersegment_jump = 1;\n\t\tm_eip = offset;\n\t\ti386_load_segment_descriptor(CS);\n\t}\n\tCYCLES(CYCLES_CALL_INTERSEG);      /* TODO: Timing = 17 + m */\n\tCHANGE_PC(m_eip);\n}\n\nstatic void I386OP(call_rel16)()        // Opcode 0xe8\n{\n\tINT16 disp = FETCH16();\n\n\tPUSH16(m_eip );\n\tif (m_sreg[CS].d)\n\t{\n\t\tm_eip += disp;\n\t}\n\telse\n\t{\n\t\tm_eip = (m_eip + disp) & 0xffff;\n\t}\n\tCHANGE_PC(m_eip);\n\tCYCLES(CYCLES_CALL);       /* TODO: Timing = 7 + m */\n}\n\nstatic void I386OP(cbw)()               // Opcode 0x98\n{\n\tREG16(AX) = (INT16)((INT8)REG8(AL));\n\tCYCLES(CYCLES_CBW);\n}\n\nstatic void I386OP(cmp_rm16_r16)()      // Opcode 0x39\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = LOAD_RM16(modrm);\n\t\tSUB16(dst, src);\n\t\tCYCLES(CYCLES_CMP_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = READ16(ea);\n\t\tSUB16(dst, src);\n\t\tCYCLES(CYCLES_CMP_REG_MEM);\n\t}\n}\n\nstatic void I386OP(cmp_r16_rm16)()      // Opcode 0x3b\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM16(modrm);\n\t\tdst = LOAD_REG16(modrm);\n\t\tSUB16(dst, src);\n\t\tCYCLES(CYCLES_CMP_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ16(ea);\n\t\tdst = LOAD_REG16(modrm);\n\t\tSUB16(dst, src);\n\t\tCYCLES(CYCLES_CMP_MEM_REG);\n\t}\n}\n\nstatic void I386OP(cmp_ax_i16)()        // Opcode 0x3d\n{\n\tUINT16 src, dst;\n\tsrc = FETCH16();\n\tdst = REG16(AX);\n\tSUB16(dst, src);\n\tCYCLES(CYCLES_CMP_IMM_ACC);\n}\n\nstatic void I386OP(cmpsw)()             // Opcode 0xa7\n{\n\tUINT32 eas, ead;\n\tUINT16 src, dst;\n\tif( m_segment_prefix ) {\n\t\teas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t} else {\n\t\teas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t}\n\tead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 0 );\n\tsrc = READ16(eas);\n\tdst = READ16(ead);\n\tSUB16(src,dst);\n\tBUMP_SI(2);\n\tBUMP_DI(2);\n\tCYCLES(CYCLES_CMPS);\n}\n\nstatic void I386OP(cwd)()               // Opcode 0x99\n{\n\tif( REG16(AX) & 0x8000 ) {\n\t\tREG16(DX) = 0xffff;\n\t} else {\n\t\tREG16(DX) = 0x0000;\n\t}\n\tCYCLES(CYCLES_CWD);\n}\n\nstatic void I386OP(dec_ax)()            // Opcode 0x48\n{\n\tREG16(AX) = DEC16(REG16(AX) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_cx)()            // Opcode 0x49\n{\n\tREG16(CX) = DEC16(REG16(CX) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_dx)()            // Opcode 0x4a\n{\n\tREG16(DX) = DEC16(REG16(DX) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_bx)()            // Opcode 0x4b\n{\n\tREG16(BX) = DEC16(REG16(BX) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_sp)()            // Opcode 0x4c\n{\n\tREG16(SP) = DEC16(REG16(SP) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_bp)()            // Opcode 0x4d\n{\n\tREG16(BP) = DEC16(REG16(BP) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_si)()            // Opcode 0x4e\n{\n\tREG16(SI) = DEC16(REG16(SI) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_di)()            // Opcode 0x4f\n{\n\tREG16(DI) = DEC16(REG16(DI) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(imul_r16_rm16)()     // Opcode 0x0f af\n{\n\tUINT8 modrm = FETCH();\n\tINT32 result;\n\tINT32 src, dst;\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = (INT32)(INT16)LOAD_RM16(modrm);\n\t\tCYCLES(CYCLES_IMUL16_REG_REG);     /* TODO: Correct multiply timing */\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = (INT32)(INT16)READ16(ea);\n\t\tCYCLES(CYCLES_IMUL16_REG_MEM);     /* TODO: Correct multiply timing */\n\t}\n\n\tdst = (INT32)(INT16)LOAD_REG16(modrm);\n\tresult = src * dst;\n\n\tSTORE_REG16(modrm, (UINT16)result);\n\n\tm_CF = m_OF = !(result == (INT32)(INT16)result);\n}\n\nstatic void I386OP(imul_r16_rm16_i16)() // Opcode 0x69\n{\n\tUINT8 modrm = FETCH();\n\tINT32 result;\n\tINT32 src, dst;\n\tif( modrm >= 0xc0 ) {\n\t\tdst = (INT32)(INT16)LOAD_RM16(modrm);\n\t\tCYCLES(CYCLES_IMUL16_REG_IMM_REG);     /* TODO: Correct multiply timing */\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tdst = (INT32)(INT16)READ16(ea);\n\t\tCYCLES(CYCLES_IMUL16_MEM_IMM_REG);     /* TODO: Correct multiply timing */\n\t}\n\n\tsrc = (INT32)(INT16)FETCH16();\n\tresult = src * dst;\n\n\tSTORE_REG16(modrm, (UINT16)result);\n\n\tm_CF = m_OF = !(result == (INT32)(INT16)result);\n}\n\nstatic void I386OP(imul_r16_rm16_i8)()  // Opcode 0x6b\n{\n\tUINT8 modrm = FETCH();\n\tINT32 result;\n\tINT32 src, dst;\n\tif( modrm >= 0xc0 ) {\n\t\tdst = (INT32)(INT16)LOAD_RM16(modrm);\n\t\tCYCLES(CYCLES_IMUL16_REG_IMM_REG);     /* TODO: Correct multiply timing */\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tdst = (INT32)(INT16)READ16(ea);\n\t\tCYCLES(CYCLES_IMUL16_MEM_IMM_REG);     /* TODO: Correct multiply timing */\n\t}\n\n\tsrc = (INT32)(INT8)FETCH();\n\tresult = src * dst;\n\n\tSTORE_REG16(modrm, (UINT16)result);\n\n\tm_CF = m_OF = !(result == (INT32)(INT16)result);\n}\n\nstatic void I386OP(in_ax_i8)()          // Opcode 0xe5\n{\n\tUINT16 port = FETCH();\n\tUINT16 data = READPORT16(port);\n\tREG16(AX) = data;\n\tCYCLES(CYCLES_IN_VAR);\n}\n\nstatic void I386OP(in_ax_dx)()          // Opcode 0xed\n{\n\tUINT16 port = REG16(DX);\n\tUINT16 data = READPORT16(port);\n\tREG16(AX) = data;\n\tCYCLES(CYCLES_IN);\n}\n\nstatic void I386OP(inc_ax)()            // Opcode 0x40\n{\n\tREG16(AX) = INC16(REG16(AX) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_cx)()            // Opcode 0x41\n{\n\tREG16(CX) = INC16(REG16(CX) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_dx)()            // Opcode 0x42\n{\n\tREG16(DX) = INC16(REG16(DX) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_bx)()            // Opcode 0x43\n{\n\tREG16(BX) = INC16(REG16(BX) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_sp)()            // Opcode 0x44\n{\n\tREG16(SP) = INC16(REG16(SP) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_bp)()            // Opcode 0x45\n{\n\tREG16(BP) = INC16(REG16(BP) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_si)()            // Opcode 0x46\n{\n\tREG16(SI) = INC16(REG16(SI) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_di)()            // Opcode 0x47\n{\n\tREG16(DI) = INC16(REG16(DI) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(iret16)()            // Opcode 0xcf\n{\n\tUINT32 old = m_pc - 1;\n\n\tif( PROTECTED_MODE )\n\t{\n\t\ti386_protected_mode_iret(0);\n\t}\n\telse\n\t{\n\t\t/* TODO: #SS(0) exception */\n\t\t/* TODO: #GP(0) exception */\n\t\tm_eip = POP16();\n\t\tm_sreg[CS].selector = POP16();\n\t\tset_flags(POP16() );\n\t\ti386_load_segment_descriptor(CS);\n\t\tCHANGE_PC(m_eip);\n\t}\n\tCYCLES(CYCLES_IRET);\n\n\t// MS-DOS system call\n\tif(IRET_TOP <= old && old < (IRET_TOP + IRET_SIZE)) {\n\t\tmsdos_syscall(old - IRET_TOP);\n\t}\n}\n\nstatic void I386OP(ja_rel16)()          // Opcode 0x0f 87\n{\n\tINT16 disp = FETCH16();\n\tif( m_CF == 0 && m_ZF == 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jbe_rel16)()         // Opcode 0x0f 86\n{\n\tINT16 disp = FETCH16();\n\tif( m_CF != 0 || m_ZF != 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jc_rel16)()          // Opcode 0x0f 82\n{\n\tINT16 disp = FETCH16();\n\tif( m_CF != 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jg_rel16)()          // Opcode 0x0f 8f\n{\n\tINT16 disp = FETCH16();\n\tif( m_ZF == 0 && (m_SF == m_OF) ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jge_rel16)()         // Opcode 0x0f 8d\n{\n\tINT16 disp = FETCH16();\n\tif(m_SF == m_OF) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jl_rel16)()          // Opcode 0x0f 8c\n{\n\tINT16 disp = FETCH16();\n\tif( (m_SF != m_OF) ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jle_rel16)()         // Opcode 0x0f 8e\n{\n\tINT16 disp = FETCH16();\n\tif( m_ZF != 0 || (m_SF != m_OF) ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jnc_rel16)()         // Opcode 0x0f 83\n{\n\tINT16 disp = FETCH16();\n\tif( m_CF == 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jno_rel16)()         // Opcode 0x0f 81\n{\n\tINT16 disp = FETCH16();\n\tif( m_OF == 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jnp_rel16)()         // Opcode 0x0f 8b\n{\n\tINT16 disp = FETCH16();\n\tif( m_PF == 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jns_rel16)()         // Opcode 0x0f 89\n{\n\tINT16 disp = FETCH16();\n\tif( m_SF == 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jnz_rel16)()         // Opcode 0x0f 85\n{\n\tINT16 disp = FETCH16();\n\tif( m_ZF == 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jo_rel16)()          // Opcode 0x0f 80\n{\n\tINT16 disp = FETCH16();\n\tif( m_OF != 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jp_rel16)()          // Opcode 0x0f 8a\n{\n\tINT16 disp = FETCH16();\n\tif( m_PF != 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(js_rel16)()          // Opcode 0x0f 88\n{\n\tINT16 disp = FETCH16();\n\tif( m_SF != 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jz_rel16)()          // Opcode 0x0f 84\n{\n\tINT16 disp = FETCH16();\n\tif( m_ZF != 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jcxz16)()            // Opcode 0xe3\n{\n\tINT8 disp = FETCH();\n\tint val = (m_address_size)?(REG32(ECX) == 0):(REG16(CX) == 0);\n\tif( val ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCXZ);       /* TODO: Timing = 9 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCXZ_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jmp_rel16)()         // Opcode 0xe9\n{\n\tINT16 disp = FETCH16();\n\n\tif (m_sreg[CS].d)\n\t{\n\t\tm_eip += disp;\n\t}\n\telse\n\t{\n\t\tm_eip = (m_eip + disp) & 0xffff;\n\t}\n\tCHANGE_PC(m_eip);\n\tCYCLES(CYCLES_JMP);        /* TODO: Timing = 7 + m */\n}\n\nstatic void I386OP(jmp_abs16)()         // Opcode 0xea\n{\n\tUINT16 address = FETCH16();\n\tUINT16 segment = FETCH16();\n\n\tif( PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\ti386_protected_mode_jump(segment,address,0,0);\n\t}\n\telse\n\t{\n\t\tm_eip = address;\n\t\tm_sreg[CS].selector = segment;\n\t\tm_performed_intersegment_jump = 1;\n\t\ti386_load_segment_descriptor(CS);\n\t\tCHANGE_PC(m_eip);\n\t}\n\tCYCLES(CYCLES_JMP_INTERSEG);\n}\n\nstatic void I386OP(lea16)()             // Opcode 0x8d\n{\n\tUINT8 modrm = FETCH();\n\tUINT32 ea = GetNonTranslatedEA(modrm,NULL);\n\tSTORE_REG16(modrm, ea);\n\tCYCLES(CYCLES_LEA);\n}\n\nstatic void I386OP(enter16)()           // Opcode 0xc8\n{\n\tUINT16 framesize = FETCH16();\n\tUINT8 level = FETCH() % 32;\n\tUINT8 x;\n\tUINT16 frameptr;\n\tPUSH16(REG16(BP));\n\n\tif(!STACK_32BIT)\n\t\tframeptr = REG16(SP);\n\telse\n\t\tframeptr = REG32(ESP);\n\n\tif(level > 0)\n\t{\n\t\tfor(x=1;x<level-1;x++)\n\t\t{\n\t\t\tREG16(BP) -= 2;\n\t\t\tPUSH16(READ16(REG16(BP)));\n\t\t}\n\t\tPUSH16(frameptr);\n\t}\n\tREG16(BP) = frameptr;\n\tif(!STACK_32BIT)\n\t\tREG16(SP) -= framesize;\n\telse\n\t\tREG32(ESP) -= framesize;\n\tCYCLES(CYCLES_ENTER);\n}\n\nstatic void I386OP(leave16)()           // Opcode 0xc9\n{\n\tif(!STACK_32BIT)\n\t\tREG16(SP) = REG16(BP);\n\telse\n\t\tREG32(ESP) = REG32(EBP);\n\tREG16(BP) = POP16();\n\tCYCLES(CYCLES_LEAVE);\n}\n\nstatic void I386OP(lodsw)()             // Opcode 0xad\n{\n\tUINT32 eas;\n\tif( m_segment_prefix ) {\n\t\teas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t} else {\n\t\teas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t}\n\tREG16(AX) = READ16(eas);\n\tBUMP_SI(2);\n\tCYCLES(CYCLES_LODS);\n}\n\nstatic void I386OP(loop16)()            // Opcode 0xe2\n{\n\tINT8 disp = FETCH();\n\tINT32 val = (m_address_size)?(--REG32(ECX)):(--REG16(CX));\n\tif( val != 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t}\n\tCYCLES(CYCLES_LOOP);       /* TODO: Timing = 11 + m */\n}\n\nstatic void I386OP(loopne16)()          // Opcode 0xe0\n{\n\tINT8 disp = FETCH();\n\tINT32 val = (m_address_size)?(--REG32(ECX)):(--REG16(CX));\n\tif( val != 0 && m_ZF == 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t}\n\tCYCLES(CYCLES_LOOPNZ);     /* TODO: Timing = 11 + m */\n}\n\nstatic void I386OP(loopz16)()           // Opcode 0xe1\n{\n\tINT8 disp = FETCH();\n\tINT32 val = (m_address_size)?(--REG32(ECX)):(--REG16(CX));\n\tif( val != 0 && m_ZF != 0 ) {\n\t\tif (m_sreg[CS].d)\n\t\t{\n\t\t\tm_eip += disp;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_eip = (m_eip + disp) & 0xffff;\n\t\t}\n\t\tCHANGE_PC(m_eip);\n\t}\n\tCYCLES(CYCLES_LOOPZ);      /* TODO: Timing = 11 + m */\n}\n\nstatic void I386OP(mov_rm16_r16)()      // Opcode 0x89\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG16(modrm);\n\t\tSTORE_RM16(modrm, src);\n\t\tCYCLES(CYCLES_MOV_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG16(modrm);\n\t\tWRITE16(ea, src);\n\t\tCYCLES(CYCLES_MOV_REG_MEM);\n\t}\n}\n\nstatic void I386OP(mov_r16_rm16)()      // Opcode 0x8b\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM16(modrm);\n\t\tSTORE_REG16(modrm, src);\n\t\tCYCLES(CYCLES_MOV_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ16(ea);\n\t\tSTORE_REG16(modrm, src);\n\t\tCYCLES(CYCLES_MOV_MEM_REG);\n\t}\n}\n\nstatic void I386OP(mov_rm16_i16)()      // Opcode 0xc7\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 value = FETCH16();\n\t\tSTORE_RM16(modrm, value);\n\t\tCYCLES(CYCLES_MOV_IMM_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT16 value = FETCH16();\n\t\tWRITE16(ea, value);\n\t\tCYCLES(CYCLES_MOV_IMM_MEM);\n\t}\n}\n\nstatic void I386OP(mov_ax_m16)()        // Opcode 0xa1\n{\n\tUINT32 offset, ea;\n\tif( m_address_size ) {\n\t\toffset = FETCH32();\n\t} else {\n\t\toffset = FETCH16();\n\t}\n\t/* TODO: Not sure if this is correct... */\n\tif( m_segment_prefix ) {\n\t\tea = i386_translate(m_segment_override, offset, 0 );\n\t} else {\n\t\tea = i386_translate(DS, offset, 0 );\n\t}\n\tREG16(AX) = READ16(ea);\n\tCYCLES(CYCLES_MOV_MEM_ACC);\n}\n\nstatic void I386OP(mov_m16_ax)()        // Opcode 0xa3\n{\n\tUINT32 offset, ea;\n\tif( m_address_size ) {\n\t\toffset = FETCH32();\n\t} else {\n\t\toffset = FETCH16();\n\t}\n\t/* TODO: Not sure if this is correct... */\n\tif( m_segment_prefix ) {\n\t\tea = i386_translate(m_segment_override, offset, 1 );\n\t} else {\n\t\tea = i386_translate(DS, offset, 1 );\n\t}\n\tWRITE16(ea, REG16(AX) );\n\tCYCLES(CYCLES_MOV_ACC_MEM);\n}\n\nstatic void I386OP(mov_ax_i16)()        // Opcode 0xb8\n{\n\tREG16(AX) = FETCH16();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_cx_i16)()        // Opcode 0xb9\n{\n\tREG16(CX) = FETCH16();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_dx_i16)()        // Opcode 0xba\n{\n\tREG16(DX) = FETCH16();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_bx_i16)()        // Opcode 0xbb\n{\n\tREG16(BX) = FETCH16();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_sp_i16)()        // Opcode 0xbc\n{\n\tREG16(SP) = FETCH16();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_bp_i16)()        // Opcode 0xbd\n{\n\tREG16(BP) = FETCH16();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_si_i16)()        // Opcode 0xbe\n{\n\tREG16(SI) = FETCH16();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_di_i16)()        // Opcode 0xbf\n{\n\tREG16(DI) = FETCH16();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(movsw)()             // Opcode 0xa5\n{\n\tUINT32 eas, ead;\n\tUINT16 v;\n\tif( m_segment_prefix ) {\n\t\teas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t} else {\n\t\teas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t}\n\tead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 );\n\tv = READ16(eas);\n\tWRITE16(ead, v);\n\tBUMP_SI(2);\n\tBUMP_DI(2);\n\tCYCLES(CYCLES_MOVS);\n}\n\nstatic void I386OP(movsx_r16_rm8)()     // Opcode 0x0f be\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tINT16 src = (INT8)LOAD_RM8(modrm);\n\t\tSTORE_REG16(modrm, src);\n\t\tCYCLES(CYCLES_MOVSX_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tINT16 src = (INT8)READ8(ea);\n\t\tSTORE_REG16(modrm, src);\n\t\tCYCLES(CYCLES_MOVSX_MEM_REG);\n\t}\n}\n\nstatic void I386OP(movzx_r16_rm8)()     // Opcode 0x0f b6\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 src = (UINT8)LOAD_RM8(modrm);\n\t\tSTORE_REG16(modrm, src);\n\t\tCYCLES(CYCLES_MOVZX_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tUINT16 src = (UINT8)READ8(ea);\n\t\tSTORE_REG16(modrm, src);\n\t\tCYCLES(CYCLES_MOVZX_MEM_REG);\n\t}\n}\n\nstatic void I386OP(or_rm16_r16)()       // Opcode 0x09\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = LOAD_RM16(modrm);\n\t\tdst = OR16(dst, src);\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = READ16(ea);\n\t\tdst = OR16(dst, src);\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(or_r16_rm16)()       // Opcode 0x0b\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM16(modrm);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = OR16(dst, src);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ16(ea);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = OR16(dst, src);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(or_ax_i16)()         // Opcode 0x0d\n{\n\tUINT16 src, dst;\n\tsrc = FETCH16();\n\tdst = REG16(AX);\n\tdst = OR16(dst, src);\n\tREG16(AX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(out_ax_i8)()         // Opcode 0xe7\n{\n\tUINT16 port = FETCH();\n\tUINT16 data = REG16(AX);\n\tWRITEPORT16(port, data);\n\tCYCLES(CYCLES_OUT_VAR);\n}\n\nstatic void I386OP(out_ax_dx)()         // Opcode 0xef\n{\n\tUINT16 port = REG16(DX);\n\tUINT16 data = REG16(AX);\n\tWRITEPORT16(port, data);\n\tCYCLES(CYCLES_OUT);\n}\n\nstatic void I386OP(pop_ax)()            // Opcode 0x58\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+1) == 0)\n\t\tREG16(AX) = POP16();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_cx)()            // Opcode 0x59\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+1) == 0)\n\t\tREG16(CX) = POP16();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_dx)()            // Opcode 0x5a\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+1) == 0)\n\t\tREG16(DX) = POP16();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_bx)()            // Opcode 0x5b\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+1) == 0)\n\t\tREG16(BX) = POP16();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_sp)()            // Opcode 0x5c\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+1) == 0)\n\t\tREG16(SP) = POP16();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_bp)()            // Opcode 0x5d\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+1) == 0)\n\t\tREG16(BP) = POP16();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_si)()            // Opcode 0x5e\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+1) == 0)\n\t\tREG16(SI) = POP16();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_di)()            // Opcode 0x5f\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+1) == 0)\n\t\tREG16(DI) = POP16();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic bool I386OP(pop_seg16)(int segment)\n{\n\tUINT32 ea, offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tUINT16 value;\n\tbool fault;\n\tif(i386_limit_check(SS,offset+1) == 0)\n\t{\n\t\tea = i386_translate(SS, offset, 0);\n\t\tvalue = READ16(ea);\n\t\ti386_sreg_load(value, segment, &fault);\n\t\tif(fault) return false;\n\t\tif(STACK_32BIT)\n\t\t\tREG32(ESP) = offset + 2;\n\t\telse\n\t\t\tREG16(SP) = offset + 2;\n\t}\n\telse\n\t{\n\t\tm_ext = 1;\n\t\ti386_trap_with_error(FAULT_SS,0,0,0);\n\t\treturn false;\n\t}\n\tCYCLES(CYCLES_POP_SREG);\n\treturn true;\n}\n\nstatic void I386OP(pop_ds16)()          // Opcode 0x1f\n{\n\tI386OP(pop_seg16)(DS);\n}\n\nstatic void I386OP(pop_es16)()          // Opcode 0x07\n{\n\tI386OP(pop_seg16)(ES);\n}\n\nstatic void I386OP(pop_fs16)()          // Opcode 0x0f a1\n{\n\tI386OP(pop_seg16)(FS);\n}\n\nstatic void I386OP(pop_gs16)()          // Opcode 0x0f a9\n{\n\tI386OP(pop_seg16)(GS);\n}\n\nstatic void I386OP(pop_ss16)()          // Opcode 0x17\n{\n\tif(!I386OP(pop_seg16)(SS)) return;\n\tif(m_IF != 0) // if external interrupts are enabled\n\t{\n\t\tm_IF = 0;  // reset IF for the next instruction\n\t\tm_delayed_interrupt_enable = 1;\n\t}\n}\n\nstatic void I386OP(pop_rm16)()          // Opcode 0x8f\n{\n\tUINT8 modrm = FETCH();\n\tUINT16 value;\n\tUINT32 ea, offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\n\tif(i386_limit_check(SS,offset+1) == 0)\n\t{\n\t\tUINT32 temp_sp = REG32(ESP);\n\t\tvalue = POP16();\n\n\t\tif( modrm >= 0xc0 ) {\n\t\t\tSTORE_RM16(modrm, value);\n\t\t} else {\n\t\t\tea = GetEA(modrm,1);\n\t\t\ttry\n\t\t\t{\n\t\t\t\tWRITE16(ea, value);\n\t\t\t}\n\t\t\tcatch(UINT64 e)\n\t\t\t{\n\t\t\t\tREG32(ESP) = temp_sp;\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_RM);\n}\n\nstatic void I386OP(popa)()              // Opcode 0x61\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\n\tif(i386_limit_check(SS,offset+15) == 0)\n\t{\n\t\tREG16(DI) = POP16();\n\t\tREG16(SI) = POP16();\n\t\tREG16(BP) = POP16();\n\t\tREG16(SP) += 2;\n\t\tREG16(BX) = POP16();\n\t\tREG16(DX) = POP16();\n\t\tREG16(CX) = POP16();\n\t\tREG16(AX) = POP16();\n\t}\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POPA);\n}\n\nstatic void I386OP(popf)()              // Opcode 0x9d\n{\n\tUINT32 value;\n\tUINT32 current = get_flags();\n\tUINT8 IOPL = (current >> 12) & 0x03;\n\tUINT32 mask = 0x7fd5;\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\n\t// IOPL can only change if CPL is 0\n\tif(m_CPL != 0)\n\t\tmask &= ~0x00003000;\n\n\t// IF can only change if CPL is at least as privileged as IOPL\n\tif(m_CPL > IOPL)\n\t\tmask &= ~0x00000200;\n\n\tif(V8086_MODE)\n\t{\n\t\tif(IOPL < 3)\n\t\t{\n\t\t\tlogerror(\"POPFD(%08x): IOPL < 3 while in V86 mode.\\n\",m_pc);\n\t\t\tFAULT(FAULT_GP,0)  // #GP(0)\n\t\t}\n\t\tmask &= ~0x00003000;  // IOPL cannot be changed while in V8086 mode\n\t}\n\n\tif(i386_limit_check(SS,offset+1) == 0)\n\t{\n\t\tvalue = POP16();\n\t\tset_flags((current & ~mask) | (value & mask));  // mask out reserved bits\n\t}\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POPF);\n}\n\nstatic void I386OP(push_ax)()           // Opcode 0x50\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(REG16(AX) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_cx)()           // Opcode 0x51\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(REG16(CX) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_dx)()           // Opcode 0x52\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(REG16(DX) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_bx)()           // Opcode 0x53\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(REG16(BX) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_sp)()           // Opcode 0x54\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(REG16(SP) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_bp)()           // Opcode 0x55\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(REG16(BP) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_si)()           // Opcode 0x56\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(REG16(SI) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_di)()           // Opcode 0x57\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(REG16(DI) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_cs16)()         // Opcode 0x0e\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(m_sreg[CS].selector );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_SREG);\n}\n\nstatic void I386OP(push_ds16)()         // Opcode 0x1e\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(m_sreg[DS].selector );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_SREG);\n}\n\nstatic void I386OP(push_es16)()         // Opcode 0x06\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(m_sreg[ES].selector );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_SREG);\n}\n\nstatic void I386OP(push_fs16)()         // Opcode 0x0f a0\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(m_sreg[FS].selector );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_SREG);\n}\n\nstatic void I386OP(push_gs16)()         // Opcode 0x0f a8\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(m_sreg[GS].selector );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_SREG);\n}\n\nstatic void I386OP(push_ss16)()         // Opcode 0x16\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(m_sreg[SS].selector );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_SREG);\n}\n\nstatic void I386OP(push_i16)()          // Opcode 0x68\n{\n\tUINT16 value = FETCH16();\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(value);\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_IMM);\n}\n\nstatic void I386OP(pusha)()             // Opcode 0x60\n{\n\tUINT16 temp = REG16(SP);\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 16;\n\telse\n\t\toffset = (REG16(SP) - 16) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t{\n\t\tPUSH16(REG16(AX) );\n\t\tPUSH16(REG16(CX) );\n\t\tPUSH16(REG16(DX) );\n\t\tPUSH16(REG16(BX) );\n\t\tPUSH16(temp );\n\t\tPUSH16(REG16(BP) );\n\t\tPUSH16(REG16(SI) );\n\t\tPUSH16(REG16(DI) );\n\t}\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSHA);\n}\n\nstatic void I386OP(pushf)()             // Opcode 0x9c\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 2;\n\telse\n\t\toffset = (REG16(SP) - 2) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH16(get_flags() & 0xffff );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSHF);\n}\n\nstatic void I386OP(ret_near16_i16)()    // Opcode 0xc2\n{\n\tINT16 disp = FETCH16();\n\tm_eip = POP16();\n\tREG16(SP) += disp;\n\tCHANGE_PC(m_eip);\n\tCYCLES(CYCLES_RET_IMM);        /* TODO: Timing = 10 + m */\n}\n\nstatic void I386OP(ret_near16)()        // Opcode 0xc3\n{\n\tm_eip = POP16();\n\tCHANGE_PC(m_eip);\n\tCYCLES(CYCLES_RET);        /* TODO: Timing = 10 + m */\n}\n\nstatic void I386OP(sbb_rm16_r16)()      // Opcode 0x19\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = LOAD_RM16(modrm);\n\t\tdst = SBB16(dst, src, m_CF);\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = READ16(ea);\n\t\tdst = SBB16(dst, src, m_CF);\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(sbb_r16_rm16)()      // Opcode 0x1b\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM16(modrm);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = SBB16(dst, src, m_CF);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ16(ea);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = SBB16(dst, src, m_CF);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(sbb_ax_i16)()        // Opcode 0x1d\n{\n\tUINT16 src, dst;\n\tsrc = FETCH16();\n\tdst = REG16(AX);\n\tdst = SBB16(dst, src, m_CF);\n\tREG16(AX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(scasw)()             // Opcode 0xaf\n{\n\tUINT32 eas;\n\tUINT16 src, dst;\n\teas = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 0 );\n\tsrc = READ16(eas);\n\tdst = REG16(AX);\n\tSUB16(dst, src);\n\tBUMP_DI(2);\n\tCYCLES(CYCLES_SCAS);\n}\n\nstatic void I386OP(shld16_i8)()         // Opcode 0x0f a4\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\tUINT16 upper = LOAD_REG16(modrm);\n\t\tUINT8 shift = FETCH();\n\t\tshift &= 31;\n\t\tif( shift == 0 ) {\n\t\t} else if( shift > 15 ) {\n\t\t\tm_CF = (upper & (1 << (16-shift))) ? 1 : 0;\n\t\t\t// ppro and above should be (dst >> (32-shift))\n\t\t\tdst = (upper << (shift-16)) | (upper >> (32-shift));\n\t\t\tm_OF = m_CF ^ (dst >> 15);\n\t\t\tSetSZPF16(dst);\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (16-shift))) ? 1 : 0;\n\t\t\tdst = (dst << shift) | (upper >> (16-shift));\n\t\t\tm_OF = m_CF ^ (dst >> 15);\n\t\t\tSetSZPF16(dst);\n\t\t}\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_SHLD_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT16 dst = READ16(ea);\n\t\tUINT16 upper = LOAD_REG16(modrm);\n\t\tUINT8 shift = FETCH();\n\t\tshift &= 31;\n\t\tif( shift == 0 ) {\n\t\t} else if( shift > 15 ) {\n\t\t\tm_CF = (upper & (1 << (16-shift))) ? 1 : 0;\n\t\t\tdst = (upper << (shift-16)) | (upper >> (32-shift));\n\t\t\tm_OF = m_CF ^ (dst >> 15);\n\t\t\tSetSZPF16(dst);\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (16-shift))) ? 1 : 0;\n\t\t\tdst = (dst << shift) | (upper >> (16-shift));\n\t\t\tm_OF = m_CF ^ (dst >> 15);\n\t\t\tSetSZPF16(dst);\n\t\t}\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_SHLD_MEM);\n\t}\n}\n\nstatic void I386OP(shld16_cl)()         // Opcode 0x0f a5\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\tUINT16 upper = LOAD_REG16(modrm);\n\t\tUINT8 shift = REG8(CL);\n\t\tshift &= 31;\n\t\tif( shift == 0 ) {\n\t\t} else if( shift > 15 ) {\n\t\t\tm_CF = (upper & (1 << (16-shift))) ? 1 : 0;\n\t\t\tdst = (upper << (shift-16)) | (upper >> (32-shift));\n\t\t\tm_OF = m_CF ^ (dst >> 15);\n\t\t\tSetSZPF16(dst);\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (16-shift))) ? 1 : 0;\n\t\t\tdst = (dst << shift) | (upper >> (16-shift));\n\t\t\tm_OF = m_CF ^ (dst >> 15);\n\t\t\tSetSZPF16(dst);\n\t\t}\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_SHLD_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT16 dst = READ16(ea);\n\t\tUINT16 upper = LOAD_REG16(modrm);\n\t\tUINT8 shift = REG8(CL);\n\t\tshift &= 31;\n\t\tif( shift == 0 ) {\n\t\t} else if( shift > 15 ) {\n\t\t\tm_CF = (upper & (1 << (16-shift))) ? 1 : 0;\n\t\t\tdst = (upper << (shift-16)) | (upper >> (32-shift));\n\t\t\tm_OF = m_CF ^ (dst >> 15);\n\t\t\tSetSZPF16(dst);\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (16-shift))) ? 1 : 0;\n\t\t\tdst = (dst << shift) | (upper >> (16-shift));\n\t\t\tm_OF = m_CF ^ (dst >> 15);\n\t\t\tSetSZPF16(dst);\n\t\t}\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_SHLD_MEM);\n\t}\n}\n\nstatic void I386OP(shrd16_i8)()         // Opcode 0x0f ac\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\tUINT16 upper = LOAD_REG16(modrm);\n\t\tUINT8 shift = FETCH();\n\t\tshift &= 31;\n\t\tif( shift == 0) {\n\t\t} else if( shift > 15 ) {\n\t\t\tm_CF = (upper & (1 << (shift-1))) ? 1 : 0;\n\t\t\tdst = (upper >> (shift-16)) | (upper << (32-shift));\n\t\t\tm_OF = ((dst >> 15) ^ (dst >> 14)) & 1;\n\t\t\tSetSZPF16(dst);\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (shift-1))) ? 1 : 0;\n\t\t\tdst = (dst >> shift) | (upper << (16-shift));\n\t\t\tm_OF = ((dst >> 15) ^ (dst >> 14)) & 1;\n\t\t\tSetSZPF16(dst);\n\t\t}\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_SHRD_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT16 dst = READ16(ea);\n\t\tUINT16 upper = LOAD_REG16(modrm);\n\t\tUINT8 shift = FETCH();\n\t\tshift &= 31;\n\t\tif( shift == 0) {\n\t\t} else if( shift > 15 ) {\n\t\t\tm_CF = (upper & (1 << (shift-1))) ? 1 : 0;\n\t\t\tdst = (upper >> (shift-16)) | (upper << (32-shift));\n\t\t\tm_OF = ((dst >> 15) ^ (dst >> 14)) & 1;\n\t\t\tSetSZPF16(dst);\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (shift-1))) ? 1 : 0;\n\t\t\tdst = (dst >> shift) | (upper << (16-shift));\n\t\t\tm_OF = ((dst >> 15) ^ (dst >> 14)) & 1;\n\t\t\tSetSZPF16(dst);\n\t\t}\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_SHRD_MEM);\n\t}\n}\n\nstatic void I386OP(shrd16_cl)()         // Opcode 0x0f ad\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\tUINT16 upper = LOAD_REG16(modrm);\n\t\tUINT8 shift = REG8(CL);\n\t\tshift &= 31;\n\t\tif( shift == 0) {\n\t\t} else if( shift > 15 ) {\n\t\t\tm_CF = (upper & (1 << (shift-1))) ? 1 : 0;\n\t\t\tdst = (upper >> (shift-16)) | (upper << (32-shift));\n\t\t\tm_OF = ((dst >> 15) ^ (dst >> 14)) & 1;\n\t\t\tSetSZPF16(dst);\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (shift-1))) ? 1 : 0;\n\t\t\tdst = (dst >> shift) | (upper << (16-shift));\n\t\t\tm_OF = ((dst >> 15) ^ (dst >> 14)) & 1;\n\t\t\tSetSZPF16(dst);\n\t\t}\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_SHRD_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT16 dst = READ16(ea);\n\t\tUINT16 upper = LOAD_REG16(modrm);\n\t\tUINT8 shift = REG8(CL);\n\t\tshift &= 31;\n\t\tif( shift == 0) {\n\t\t} else if( shift > 15 ) {\n\t\t\tm_CF = (upper & (1 << (shift-1))) ? 1 : 0;\n\t\t\tdst = (upper >> (shift-16)) | (upper << (32-shift));\n\t\t\tm_OF = ((dst >> 15) ^ (dst >> 14)) & 1;\n\t\t\tSetSZPF16(dst);\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (shift-1))) ? 1 : 0;\n\t\t\tdst = (dst >> shift) | (upper << (16-shift));\n\t\t\tm_OF = ((dst >> 15) ^ (dst >> 14)) & 1;\n\t\t\tSetSZPF16(dst);\n\t\t}\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_SHRD_MEM);\n\t}\n}\n\nstatic void I386OP(stosw)()             // Opcode 0xab\n{\n\tUINT32 ead;\n\tead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 );\n\tWRITE16(ead, REG16(AX));\n\tBUMP_DI(2);\n\tCYCLES(CYCLES_STOS);\n}\n\nstatic void I386OP(sub_rm16_r16)()      // Opcode 0x29\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = LOAD_RM16(modrm);\n\t\tdst = SUB16(dst, src);\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = READ16(ea);\n\t\tdst = SUB16(dst, src);\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(sub_r16_rm16)()      // Opcode 0x2b\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM16(modrm);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = SUB16(dst, src);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ16(ea);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = SUB16(dst, src);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(sub_ax_i16)()        // Opcode 0x2d\n{\n\tUINT16 src, dst;\n\tsrc = FETCH16();\n\tdst = REG16(AX);\n\tdst = SUB16(dst, src);\n\tREG16(AX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(test_ax_i16)()       // Opcode 0xa9\n{\n\tUINT16 src = FETCH16();\n\tUINT16 dst = REG16(AX);\n\tdst = src & dst;\n\tSetSZPF16(dst);\n\tm_CF = 0;\n\tm_OF = 0;\n\tCYCLES(CYCLES_TEST_IMM_ACC);\n}\n\nstatic void I386OP(test_rm16_r16)()     // Opcode 0x85\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = LOAD_RM16(modrm);\n\t\tdst = src & dst;\n\t\tSetSZPF16(dst);\n\t\tm_CF = 0;\n\t\tm_OF = 0;\n\t\tCYCLES(CYCLES_TEST_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = READ16(ea);\n\t\tdst = src & dst;\n\t\tSetSZPF16(dst);\n\t\tm_CF = 0;\n\t\tm_OF = 0;\n\t\tCYCLES(CYCLES_TEST_REG_MEM);\n\t}\n}\n\nstatic void I386OP(xchg_ax_cx)()        // Opcode 0x91\n{\n\tUINT16 temp;\n\ttemp = REG16(AX);\n\tREG16(AX) = REG16(CX);\n\tREG16(CX) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_ax_dx)()        // Opcode 0x92\n{\n\tUINT16 temp;\n\ttemp = REG16(AX);\n\tREG16(AX) = REG16(DX);\n\tREG16(DX) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_ax_bx)()        // Opcode 0x93\n{\n\tUINT16 temp;\n\ttemp = REG16(AX);\n\tREG16(AX) = REG16(BX);\n\tREG16(BX) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_ax_sp)()        // Opcode 0x94\n{\n\tUINT16 temp;\n\ttemp = REG16(AX);\n\tREG16(AX) = REG16(SP);\n\tREG16(SP) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_ax_bp)()        // Opcode 0x95\n{\n\tUINT16 temp;\n\ttemp = REG16(AX);\n\tREG16(AX) = REG16(BP);\n\tREG16(BP) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_ax_si)()        // Opcode 0x96\n{\n\tUINT16 temp;\n\ttemp = REG16(AX);\n\tREG16(AX) = REG16(SI);\n\tREG16(SI) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_ax_di)()        // Opcode 0x97\n{\n\tUINT16 temp;\n\ttemp = REG16(AX);\n\tREG16(AX) = REG16(DI);\n\tREG16(DI) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_r16_rm16)()     // Opcode 0x87\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 src = LOAD_RM16(modrm);\n\t\tUINT16 dst = LOAD_REG16(modrm);\n\t\tSTORE_REG16(modrm, src);\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_XCHG_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT16 src = READ16(ea);\n\t\tUINT16 dst = LOAD_REG16(modrm);\n\t\tSTORE_REG16(modrm, src);\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_XCHG_REG_MEM);\n\t}\n}\n\nstatic void I386OP(xor_rm16_r16)()      // Opcode 0x31\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = LOAD_RM16(modrm);\n\t\tdst = XOR16(dst, src);\n\t\tSTORE_RM16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG16(modrm);\n\t\tdst = READ16(ea);\n\t\tdst = XOR16(dst, src);\n\t\tWRITE16(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(xor_r16_rm16)()      // Opcode 0x33\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM16(modrm);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = XOR16(dst, src);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ16(ea);\n\t\tdst = LOAD_REG16(modrm);\n\t\tdst = XOR16(dst, src);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(xor_ax_i16)()        // Opcode 0x35\n{\n\tUINT16 src, dst;\n\tsrc = FETCH16();\n\tdst = REG16(AX);\n\tdst = XOR16(dst, src);\n\tREG16(AX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\n\n\nstatic void I386OP(group81_16)()        // Opcode 0x81\n{\n\tUINT32 ea;\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:     // ADD Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = ADD16(dst, src);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = ADD16(dst, src);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 1:     // OR Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = OR16(dst, src);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = OR16(dst, src);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 2:     // ADC Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = ADC16(dst, src, m_CF);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = ADC16(dst, src, m_CF);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 3:     // SBB Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = SBB16(dst, src, m_CF);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = SBB16(dst, src, m_CF);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 4:     // AND Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = AND16(dst, src);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = AND16(dst, src);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 5:     // SUB Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = SUB16(dst, src);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = SUB16(dst, src);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:     // XOR Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = XOR16(dst, src);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tdst = XOR16(dst, src);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 7:     // CMP Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tSUB16(dst, src);\n\t\t\t\tCYCLES(CYCLES_CMP_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = FETCH16();\n\t\t\t\tSUB16(dst, src);\n\t\t\t\tCYCLES(CYCLES_CMP_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(group83_16)()        // Opcode 0x83\n{\n\tUINT32 ea;\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:     // ADD Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tdst = ADD16(dst, src);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tdst = ADD16(dst, src);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 1:     // OR Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tdst = OR16(dst, src);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tdst = OR16(dst, src);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 2:     // ADC Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tdst = ADC16(dst, src, m_CF);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tdst = ADC16(dst, src, m_CF);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 3:     // SBB Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = ((UINT16)(INT16)(INT8)FETCH());\n\t\t\t\tdst = SBB16(dst, src, m_CF);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = ((UINT16)(INT16)(INT8)FETCH());\n\t\t\t\tdst = SBB16(dst, src, m_CF);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 4:     // AND Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tdst = AND16(dst, src);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tdst = AND16(dst, src);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 5:     // SUB Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tdst = SUB16(dst, src);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tdst = SUB16(dst, src);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:     // XOR Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tdst = XOR16(dst, src);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tdst = XOR16(dst, src);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 7:     // CMP Rm16, i16\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM16(modrm);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tSUB16(dst, src);\n\t\t\t\tCYCLES(CYCLES_CMP_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\tdst = READ16(ea);\n\t\t\t\tsrc = (UINT16)(INT16)(INT8)FETCH();\n\t\t\t\tSUB16(dst, src);\n\t\t\t\tCYCLES(CYCLES_CMP_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(groupC1_16)()        // Opcode 0xc1\n{\n\tUINT16 dst;\n\tUINT8 modrm = FETCH();\n\tUINT8 shift;\n\n\tif( modrm >= 0xc0 ) {\n\t\tdst = LOAD_RM16(modrm);\n\t\tshift = FETCH() & 0x1f;\n\t\tdst = i386_shift_rotate16(modrm, dst, shift);\n\t\tSTORE_RM16(modrm, dst);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tdst = READ16(ea);\n\t\tshift = FETCH() & 0x1f;\n\t\tdst = i386_shift_rotate16(modrm, dst, shift);\n\t\tWRITE16(ea, dst);\n\t}\n}\n\nstatic void I386OP(groupD1_16)()        // Opcode 0xd1\n{\n\tUINT16 dst;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 ) {\n\t\tdst = LOAD_RM16(modrm);\n\t\tdst = i386_shift_rotate16(modrm, dst, 1);\n\t\tSTORE_RM16(modrm, dst);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tdst = READ16(ea);\n\t\tdst = i386_shift_rotate16(modrm, dst, 1);\n\t\tWRITE16(ea, dst);\n\t}\n}\n\nstatic void I386OP(groupD3_16)()        // Opcode 0xd3\n{\n\tUINT16 dst;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 ) {\n\t\tdst = LOAD_RM16(modrm);\n\t\tdst = i386_shift_rotate16(modrm, dst, REG8(CL));\n\t\tSTORE_RM16(modrm, dst);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tdst = READ16(ea);\n\t\tdst = i386_shift_rotate16(modrm, dst, REG8(CL));\n\t\tWRITE16(ea, dst);\n\t}\n}\n\nstatic void I386OP(groupF7_16)()        // Opcode 0xf7\n{\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:         /* TEST Rm16, i16 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\t\t\tUINT16 src = FETCH16();\n\t\t\t\tdst &= src;\n\t\t\t\tm_CF = m_OF = m_AF = 0;\n\t\t\t\tSetSZPF16(dst);\n\t\t\t\tCYCLES(CYCLES_TEST_IMM_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\tUINT16 dst = READ16(ea);\n\t\t\t\tUINT16 src = FETCH16();\n\t\t\t\tdst &= src;\n\t\t\t\tm_CF = m_OF = m_AF = 0;\n\t\t\t\tSetSZPF16(dst);\n\t\t\t\tCYCLES(CYCLES_TEST_IMM_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 2:         /* NOT Rm16 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\t\t\tdst = ~dst;\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_NOT_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT16 dst = READ16(ea);\n\t\t\t\tdst = ~dst;\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_NOT_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 3:         /* NEG Rm16 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\t\t\tdst = SUB16(0, dst );\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_NEG_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT16 dst = READ16(ea);\n\t\t\t\tdst = SUB16(0, dst );\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_NEG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 4:         /* MUL AX, Rm16 */\n\t\t\t{\n\t\t\t\tUINT32 result;\n\t\t\t\tUINT16 src, dst;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_MUL16_ACC_REG);      /* TODO: Correct multiply timing */\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tsrc = READ16(ea);\n\t\t\t\t\tCYCLES(CYCLES_MUL16_ACC_MEM);      /* TODO: Correct multiply timing */\n\t\t\t\t}\n\n\t\t\t\tdst = REG16(AX);\n\t\t\t\tresult = (UINT32)src * (UINT32)dst;\n\t\t\t\tREG16(DX) = (UINT16)(result >> 16);\n\t\t\t\tREG16(AX) = (UINT16)result;\n\n\t\t\t\tm_CF = m_OF = (REG16(DX) != 0);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 5:         /* IMUL AX, Rm16 */\n\t\t\t{\n\t\t\t\tINT32 result;\n\t\t\t\tINT32 src, dst;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tsrc = (INT32)(INT16)LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_IMUL16_ACC_REG);     /* TODO: Correct multiply timing */\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tsrc = (INT32)(INT16)READ16(ea);\n\t\t\t\t\tCYCLES(CYCLES_IMUL16_ACC_MEM);     /* TODO: Correct multiply timing */\n\t\t\t\t}\n\n\t\t\t\tdst = (INT32)(INT16)REG16(AX);\n\t\t\t\tresult = src * dst;\n\n\t\t\t\tREG16(DX) = (UINT16)(result >> 16);\n\t\t\t\tREG16(AX) = (UINT16)result;\n\n\t\t\t\tm_CF = m_OF = !(result == (INT32)(INT16)result);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:         /* DIV AX, Rm16 */\n\t\t\t{\n\t\t\t\tUINT32 quotient, remainder, result;\n\t\t\t\tUINT16 src;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_DIV16_ACC_REG);\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tsrc = READ16(ea);\n\t\t\t\t\tCYCLES(CYCLES_DIV16_ACC_MEM);\n\t\t\t\t}\n\n\t\t\t\tquotient = ((UINT32)(REG16(DX)) << 16) | (UINT32)(REG16(AX));\n\t\t\t\tif( src ) {\n\t\t\t\t\tremainder = quotient % (UINT32)src;\n\t\t\t\t\tresult = quotient / (UINT32)src;\n\t\t\t\t\tif( result > 0xffff ) {\n\t\t\t\t\t\t/* TODO: Divide error */\n\t\t\t\t\t} else {\n\t\t\t\t\t\tREG16(DX) = (UINT16)remainder;\n\t\t\t\t\t\tREG16(AX) = (UINT16)result;\n\n\t\t\t\t\t\t// this flag is actually undefined, enable on non-cyrix\n\t\t\t\t\t\tif (m_cpuid_id0 != 0x69727943)\n\t\t\t\t\t\t\tm_CF = 1;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ti386_trap(0, 0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 7:         /* IDIV AX, Rm16 */\n\t\t\t{\n\t\t\t\tINT32 quotient, remainder, result;\n\t\t\t\tUINT16 src;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_IDIV16_ACC_REG);\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tsrc = READ16(ea);\n\t\t\t\t\tCYCLES(CYCLES_IDIV16_ACC_MEM);\n\t\t\t\t}\n\n\t\t\t\tquotient = (((INT32)REG16(DX)) << 16) | ((UINT32)REG16(AX));\n\t\t\t\tif( src ) {\n\t\t\t\t\tremainder = quotient % (INT32)(INT16)src;\n\t\t\t\t\tresult = quotient / (INT32)(INT16)src;\n\t\t\t\t\tif( result > 0xffff ) {\n\t\t\t\t\t\t/* TODO: Divide error */\n\t\t\t\t\t} else {\n\t\t\t\t\t\tREG16(DX) = (UINT16)remainder;\n\t\t\t\t\t\tREG16(AX) = (UINT16)result;\n\n\t\t\t\t\t\t// this flag is actually undefined, enable on non-cyrix\n\t\t\t\t\t\tif (m_cpuid_id0 != 0x69727943)\n\t\t\t\t\t\t\tm_CF = 1;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ti386_trap(0, 0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(groupFF_16)()        // Opcode 0xff\n{\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:         /* INC Rm16 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\t\t\tdst = INC16(dst);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_INC_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT16 dst = READ16(ea);\n\t\t\t\tdst = INC16(dst);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_INC_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 1:         /* DEC Rm16 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\t\t\tdst = DEC16(dst);\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_DEC_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT16 dst = READ16(ea);\n\t\t\t\tdst = DEC16(dst);\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_DEC_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 2:         /* CALL Rm16 */\n\t\t\t{\n\t\t\t\tUINT16 address;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_CALL_REG);       /* TODO: Timing = 7 + m */\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\taddress = READ16(ea);\n\t\t\t\t\tCYCLES(CYCLES_CALL_MEM);       /* TODO: Timing = 10 + m */\n\t\t\t\t}\n\t\t\t\tPUSH16(m_eip );\n\t\t\t\tm_eip = address;\n\t\t\t\tCHANGE_PC(m_eip);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 3:         /* CALL FAR Rm16 */\n\t\t\t{\n\t\t\t\tUINT16 address, selector;\n\t\t\t\tif( modrm >= 0xc0 )\n\t\t\t\t{\n\t\t\t\t\treport_invalid_modrm(\"groupFF_16\", modrm);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\taddress = READ16(ea + 0);\n\t\t\t\t\tselector = READ16(ea + 2);\n\t\t\t\t\tCYCLES(CYCLES_CALL_MEM_INTERSEG);      /* TODO: Timing = 10 + m */\n\n\t\t\t\t\tif(PROTECTED_MODE && !V8086_MODE)\n\t\t\t\t\t{\n\t\t\t\t\t\ti386_protected_mode_call(selector,address,1,0);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tPUSH16(m_sreg[CS].selector );\n\t\t\t\t\t\tPUSH16(m_eip );\n\t\t\t\t\t\tm_sreg[CS].selector = selector;\n\t\t\t\t\t\tm_performed_intersegment_jump = 1;\n\t\t\t\t\t\ti386_load_segment_descriptor(CS );\n\t\t\t\t\t\tm_eip = address;\n\t\t\t\t\t\tCHANGE_PC(m_eip);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 4:         /* JMP Rm16 */\n\t\t\t{\n\t\t\t\tUINT16 address;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_JMP_REG);        /* TODO: Timing = 7 + m */\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\taddress = READ16(ea);\n\t\t\t\t\tCYCLES(CYCLES_JMP_MEM);        /* TODO: Timing = 10 + m */\n\t\t\t\t}\n\t\t\t\tm_eip = address;\n\t\t\t\tCHANGE_PC(m_eip);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 5:         /* JMP FAR Rm16 */\n\t\t\t{\n\t\t\t\tUINT16 address, selector;\n\n\t\t\t\tif( modrm >= 0xc0 )\n\t\t\t\t{\n\t\t\t\t\treport_invalid_modrm(\"groupFF_16\", modrm);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\taddress = READ16(ea + 0);\n\t\t\t\t\tselector = READ16(ea + 2);\n\t\t\t\t\tCYCLES(CYCLES_JMP_MEM_INTERSEG);       /* TODO: Timing = 10 + m */\n\t\t\t\t\tif(PROTECTED_MODE && !V8086_MODE)\n\t\t\t\t\t{\n\t\t\t\t\t\ti386_protected_mode_jump(selector,address,1,0);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tm_sreg[CS].selector = selector;\n\t\t\t\t\t\tm_performed_intersegment_jump = 1;\n\t\t\t\t\t\ti386_load_segment_descriptor(CS );\n\t\t\t\t\t\tm_eip = address;\n\t\t\t\t\t\tCHANGE_PC(m_eip);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:         /* PUSH Rm16 */\n\t\t\t{\n\t\t\t\tUINT16 value;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tvalue = LOAD_RM16(modrm);\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tvalue = READ16(ea);\n\t\t\t\t}\n\t\t\t\tPUSH16(value);\n\t\t\t\tCYCLES(CYCLES_PUSH_RM);\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treport_invalid_modrm(\"groupFF_16\", modrm);\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(group0F00_16)()          // Opcode 0x0f 00\n{\n\tUINT32 address, ea;\n\tUINT8 modrm = FETCH();\n\tI386_SREG seg;\n\tUINT8 result;\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:         /* SLDT */\n\t\t\tif ( PROTECTED_MODE && !V8086_MODE )\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tSTORE_RM16(modrm, m_ldtr.segment);\n\t\t\t\t\tCYCLES(CYCLES_SLDT_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t\tWRITE16(ea, m_ldtr.segment);\n\t\t\t\t\tCYCLES(CYCLES_SLDT_MEM);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 1:         /* STR */\n\t\t\tif ( PROTECTED_MODE && !V8086_MODE )\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tSTORE_RM16(modrm, m_task.segment);\n\t\t\t\t\tCYCLES(CYCLES_STR_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t\tWRITE16(ea, m_task.segment);\n\t\t\t\t\tCYCLES(CYCLES_STR_MEM);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 2:         /* LLDT */\n\t\t\tif ( PROTECTED_MODE && !V8086_MODE )\n\t\t\t{\n\t\t\t\tif(m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tm_ldtr.segment = address;\n\t\t\t\t\tCYCLES(CYCLES_LLDT_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t\tm_ldtr.segment = READ16(ea);\n\t\t\t\t\tCYCLES(CYCLES_LLDT_MEM);\n\t\t\t\t}\n\t\t\t\tmemset(&seg, 0, sizeof(seg));\n\t\t\t\tseg.selector = m_ldtr.segment;\n\t\t\t\ti386_load_protected_mode_segment(&seg,NULL);\n\t\t\t\tm_ldtr.limit = seg.limit;\n\t\t\t\tm_ldtr.base = seg.base;\n\t\t\t\tm_ldtr.flags = seg.flags;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 3:         /* LTR */\n\t\t\tif ( PROTECTED_MODE && !V8086_MODE )\n\t\t\t{\n\t\t\t\tif(m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tm_task.segment = address;\n\t\t\t\t\tCYCLES(CYCLES_LTR_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t\tm_task.segment = READ16(ea);\n\t\t\t\t\tCYCLES(CYCLES_LTR_MEM);\n\t\t\t\t}\n\t\t\t\tmemset(&seg, 0, sizeof(seg));\n\t\t\t\tseg.selector = m_task.segment;\n\t\t\t\ti386_load_protected_mode_segment(&seg,NULL);\n\n\t\t\t\tUINT32 addr = ((seg.selector & 4) ? m_ldtr.base : m_gdtr.base) + (seg.selector & ~7) + 5;\n\t\t\t\ti386_translate_address(TRANSLATE_READ, &addr, NULL);\n\t\t\t\twrite_byte(addr, (seg.flags & 0xff) | 2);\n\n\t\t\t\tm_task.limit = seg.limit;\n\t\t\t\tm_task.base = seg.base;\n\t\t\t\tm_task.flags = seg.flags | 2;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 4:  /* VERR */\n\t\t\tif ( PROTECTED_MODE && !V8086_MODE )\n\t\t\t{\n\t\t\t\tresult = 1;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_VERR_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t\taddress = READ16(ea);\n\t\t\t\t\tCYCLES(CYCLES_VERR_MEM);\n\t\t\t\t}\n\t\t\t\tmemset(&seg, 0, sizeof(seg));\n\t\t\t\tseg.selector = address;\n\t\t\t\tresult = i386_load_protected_mode_segment(&seg,NULL);\n\t\t\t\t// check if the segment is a code or data segment (not a special segment type, like a TSS, gate, LDT...)\n\t\t\t\tif(!(seg.flags & 0x10))\n\t\t\t\t\tresult = 0;\n\t\t\t\t// check that the segment is readable\n\t\t\t\tif(seg.flags & 0x10)  // is code or data segment\n\t\t\t\t{\n\t\t\t\t\tif(seg.flags & 0x08)  // is code segment, so check if it's readable\n\t\t\t\t\t{\n\t\t\t\t\t\tif(!(seg.flags & 0x02))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tresult = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{  // check if conforming, these are always readable, regardless of privilege\n\t\t\t\t\t\t\tif(!(seg.flags & 0x04))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t// if not conforming, then we must check privilege levels (TODO: current privilege level check)\n\t\t\t\t\t\t\t\tif(((seg.flags >> 5) & 0x03) < (address & 0x03))\n\t\t\t\t\t\t\t\t\tresult = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// check that the descriptor privilege is greater or equal to the selector's privilege level and the current privilege (TODO)\n\t\t\t\tSetZF(result);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t\tlogerror(\"i386: VERR: Exception - Running in real mode or virtual 8086 mode.\\n\");\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 5:  /* VERW */\n\t\t\tif ( PROTECTED_MODE && !V8086_MODE )\n\t\t\t{\n\t\t\t\tresult = 1;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_VERW_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t\taddress = READ16(ea);\n\t\t\t\t\tCYCLES(CYCLES_VERW_MEM);\n\t\t\t\t}\n\t\t\t\tmemset(&seg, 0, sizeof(seg));\n\t\t\t\tseg.selector = address;\n\t\t\t\tresult = i386_load_protected_mode_segment(&seg,NULL);\n\t\t\t\t// check if the segment is a code or data segment (not a special segment type, like a TSS, gate, LDT...)\n\t\t\t\tif(!(seg.flags & 0x10))\n\t\t\t\t\tresult = 0;\n\t\t\t\t// check that the segment is writable\n\t\t\t\tif(seg.flags & 0x10)  // is code or data segment\n\t\t\t\t{\n\t\t\t\t\tif(seg.flags & 0x08)  // is code segment (and thus, not writable)\n\t\t\t\t\t{\n\t\t\t\t\t\tresult = 0;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{  // is data segment\n\t\t\t\t\t\tif(!(seg.flags & 0x02))\n\t\t\t\t\t\t\tresult = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// check that the descriptor privilege is greater or equal to the selector's privilege level and the current privilege (TODO)\n\t\t\t\tif(((seg.flags >> 5) & 0x03) < (address & 0x03))\n\t\t\t\t\tresult = 0;\n\t\t\t\tSetZF(result);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t\tlogerror(\"i386: VERW: Exception - Running in real mode or virtual 8086 mode.\\n\");\n\t\t\t}\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\treport_invalid_modrm(\"group0F00_16\", modrm);\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(group0F01_16)()      // Opcode 0x0f 01\n{\n\tUINT8 modrm = FETCH();\n\tUINT16 address;\n\tUINT32 ea;\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:         /* SGDT */\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tea = i386_translate(CS, address, 1 );\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t}\n\t\t\t\tWRITE16(ea, m_gdtr.limit);\n\t\t\t\tWRITE32(ea + 2, m_gdtr.base & 0xffffff);\n\t\t\t\tCYCLES(CYCLES_SGDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 1:         /* SIDT */\n\t\t\t{\n\t\t\t\tif (modrm >= 0xc0)\n\t\t\t\t{\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tea = i386_translate(CS, address, 1 );\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t}\n\t\t\t\tWRITE16(ea, m_idtr.limit);\n\t\t\t\tWRITE32(ea + 2, m_idtr.base & 0xffffff);\n\t\t\t\tCYCLES(CYCLES_SIDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 2:         /* LGDT */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tea = i386_translate(CS, address, 0 );\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t}\n\t\t\t\tm_gdtr.limit = READ16(ea);\n\t\t\t\tm_gdtr.base = READ32(ea + 2) & 0xffffff;\n\t\t\t\tCYCLES(CYCLES_LGDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 3:         /* LIDT */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tea = i386_translate(CS, address, 0 );\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t}\n\t\t\t\tm_idtr.limit = READ16(ea);\n\t\t\t\tm_idtr.base = READ32(ea + 2) & 0xffffff;\n\t\t\t\tCYCLES(CYCLES_LIDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 4:         /* SMSW */\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tSTORE_RM16(modrm, m_cr[0]);\n\t\t\t\t\tCYCLES(CYCLES_SMSW_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t\tWRITE16(ea, m_cr[0]);\n\t\t\t\t\tCYCLES(CYCLES_SMSW_MEM);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 6:         /* LMSW */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tUINT16 b;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tb = LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_LMSW_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t\tCYCLES(CYCLES_LMSW_MEM);\n\t\t\t\tb = READ16(ea);\n\t\t\t\t}\n\t\t\t\tif(PROTECTED_MODE)\n\t\t\t\t\tb |= 0x0001;  // cannot return to real mode using this instruction.\n\t\t\t\tm_cr[0] &= ~0x0000000f;\n\t\t\t\tm_cr[0] |= b & 0x0000000f;\n\t\t\t\tbreak;\n\t\t\t}\n\t\tdefault:\n\t\t\treport_invalid_modrm(\"group0F01_16\", modrm);\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(group0FBA_16)()      // Opcode 0x0f ba\n{\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 4:         /* BT Rm16, i8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\n\t\t\t\tCYCLES(CYCLES_BT_IMM_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\tUINT16 dst = READ16(ea);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\n\t\t\t\tCYCLES(CYCLES_BT_IMM_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 5:         /* BTS Rm16, i8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\t\t\t\tdst |= (1 << bit);\n\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_BTS_IMM_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT16 dst = READ16(ea);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\t\t\t\tdst |= (1 << bit);\n\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_BTS_IMM_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:         /* BTR Rm16, i8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\t\t\t\tdst &= ~(1 << bit);\n\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_BTR_IMM_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT16 dst = READ16(ea);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\t\t\t\tdst &= ~(1 << bit);\n\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_BTR_IMM_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 7:         /* BTC Rm16, i8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\t\t\t\tdst ^= (1 << bit);\n\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_BTC_IMM_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT16 dst = READ16(ea);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\t\t\t\tdst ^= (1 << bit);\n\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t\tCYCLES(CYCLES_BTC_IMM_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treport_invalid_modrm(\"group0FBA_16\", modrm);\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(lar_r16_rm16)()  // Opcode 0x0f 0x02\n{\n\tUINT8 modrm = FETCH();\n\tI386_SREG seg;\n\tUINT8 type;\n\n\tif(PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\tmemset(&seg,0,sizeof(seg));\n\t\tif(modrm >= 0xc0)\n\t\t{\n\t\t\tseg.selector = LOAD_RM16(modrm);\n\t\t\tCYCLES(CYCLES_LAR_REG);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\tseg.selector = READ16(ea);\n\t\t\tCYCLES(CYCLES_LAR_MEM);\n\t\t}\n\t\tif(seg.selector == 0)\n\t\t{\n\t\t\tSetZF(0);  // not a valid segment\n\t\t//  logerror(\"i386 (%08x): LAR: Selector %04x is invalid type.\\n\",m_pc,seg.selector);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(!i386_load_protected_mode_segment(&seg,NULL))\n\t\t\t{\n\t\t\t\tSetZF(0);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tUINT8 DPL = (seg.flags >> 5) & 3;\n\t\t\tif(((DPL < m_CPL) || (DPL < (seg.selector & 3))) && ((seg.flags & 0x1c) != 0x1c))\n\t\t\t{\n\t\t\t\tSetZF(0);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(!(seg.flags & 0x10))  // special segment\n\t\t\t{\n\t\t\t\t// check for invalid segment types\n\t\t\t\ttype = seg.flags & 0x000f;\n\t\t\t\tif(type == 0x00 || type == 0x08 || type == 0x0a || type == 0x0d)\n\t\t\t\t{\n\t\t\t\t\tSetZF(0);  // invalid segment type\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tSTORE_REG16(modrm,(seg.flags << 8) & 0xff00);\n\t\t\t\t\tSetZF(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{  // data or code segment (both are valid for LAR)\n\t\t\t\tSTORE_REG16(modrm,(seg.flags << 8) & 0xff00);\n\t\t\t\tSetZF(1);\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t{\n\t\t// illegal opcode\n\t\ti386_trap(6,0, 0);\n\t\tlogerror(\"i386: LAR: Exception - running in real mode or virtual 8086 mode.\\n\");\n\t}\n}\n\nstatic void I386OP(lsl_r16_rm16)()  // Opcode 0x0f 0x03\n{\n\tUINT8 modrm = FETCH();\n\tUINT32 limit;\n\tI386_SREG seg;\n\n\tif(PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\tmemset(&seg, 0, sizeof(seg));\n\t\tif(modrm >= 0xc0)\n\t\t{\n\t\t\tseg.selector = LOAD_RM16(modrm);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\tseg.selector = READ16(ea);\n\t\t}\n\t\tif(seg.selector == 0)\n\t\t{\n\t\t\tSetZF(0);  // not a valid segment\n\t\t}\n\t\telse\n\t\t{\n\t\t\tUINT8 type;\n\t\t\tif(!i386_load_protected_mode_segment(&seg,NULL))\n\t\t\t{\n\t\t\t\tSetZF(0);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tUINT8 DPL = (seg.flags >> 5) & 3;\n\t\t\tif(((DPL < m_CPL) || (DPL < (seg.selector & 3))) && ((seg.flags & 0x1c) != 0x1c))\n\t\t\t{\n\t\t\t\tSetZF(0);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttype = seg.flags & 0x1f;\n\t\t\tswitch(type)\n\t\t\t{\n\t\t\tcase 0:\n\t\t\tcase 4:\n\t\t\tcase 5:\n\t\t\tcase 6:\n\t\t\tcase 7:\n\t\t\tcase 8:\n\t\t\tcase 10:\n\t\t\tcase 12:\n\t\t\tcase 13:\n\t\t\tcase 14:\n\t\t\tcase 15:\n\t\t\t\tSetZF(0);\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\tlimit = seg.limit;\n\t\t\t\tSTORE_REG16(modrm,limit & 0x0000ffff);\n\t\t\t\tSetZF(1);\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t\ti386_trap(6, 0, 0);\n}\n\nstatic void I386OP(bound_r16_m16_m16)() // Opcode 0x62\n{\n\tUINT8 modrm;\n\tINT16 val, low, high;\n\n\tmodrm = FETCH();\n\n\tif (modrm >= 0xc0)\n\t{\n\t\tlow = high = LOAD_RM16(modrm);\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tlow = READ16(ea + 0);\n\t\thigh = READ16(ea + 2);\n\t}\n\tval = LOAD_REG16(modrm);\n\n\tif ((val < low) || (val > high))\n\t{\n\t\tCYCLES(CYCLES_BOUND_OUT_RANGE);\n\t\ti386_trap(5, 0, 0);\n\t}\n\telse\n\t{\n\t\tCYCLES(CYCLES_BOUND_IN_RANGE);\n\t}\n}\n\nstatic void I386OP(retf16)()            // Opcode 0xcb\n{\n\tif(PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\ti386_protected_mode_retf(0,0);\n\t}\n\telse\n\t{\n\t\tm_eip = POP16();\n\t\tm_sreg[CS].selector = POP16();\n\t\ti386_load_segment_descriptor(CS );\n\t\tCHANGE_PC(m_eip);\n\t}\n\n\tCYCLES(CYCLES_RET_INTERSEG);\n}\n\nstatic void I386OP(retf_i16)()          // Opcode 0xca\n{\n\tUINT16 count = FETCH16();\n\n\tif(PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\ti386_protected_mode_retf(count,0);\n\t}\n\telse\n\t{\n\t\tm_eip = POP16();\n\t\tm_sreg[CS].selector = POP16();\n\t\ti386_load_segment_descriptor(CS );\n\t\tCHANGE_PC(m_eip);\n\t\tREG16(SP) += count;\n\t}\n\n\tCYCLES(CYCLES_RET_IMM_INTERSEG);\n}\n\nstatic bool I386OP(load_far_pointer16)(int s)\n{\n\tUINT8 modrm = FETCH();\n\tUINT16 selector;\n\n\tif( modrm >= 0xc0 ) {\n\t\t//logerror(\"i386: load_far_pointer16 NYI\\n\"); // don't log, NT will use this a lot\n\t\ti386_trap(6, 0, 0);\n\t\treturn false;\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tSTORE_REG16(modrm, READ16(ea + 0));\n\t\tselector = READ16(ea + 2);\n\t\ti386_sreg_load(selector,s,NULL);\n\t}\n\treturn true;\n}\n\nstatic void I386OP(lds16)()             // Opcode 0xc5\n{\n\tif(I386OP(load_far_pointer16)(DS)) {\n\t\tCYCLES(CYCLES_LDS);\n\t}\n}\n\nstatic void I386OP(lss16)()             // Opcode 0x0f 0xb2\n{\n\tif(I386OP(load_far_pointer16)(SS)) {\n\t\tCYCLES(CYCLES_LSS);\n\t}\n}\n\nstatic void I386OP(les16)()             // Opcode 0xc4\n{\n\tif(I386OP(load_far_pointer16)(ES)) {\n\t\tCYCLES(CYCLES_LES);\n\t}\n}\n\nstatic void I386OP(lfs16)()             // Opcode 0x0f 0xb4\n{\n\tif(I386OP(load_far_pointer16)(FS)) {\n\t\tCYCLES(CYCLES_LFS);\n\t}\n}\n\nstatic void I386OP(lgs16)()             // Opcode 0x0f 0xb5\n{\n\tif(I386OP(load_far_pointer16)(GS)) {\n\t\tCYCLES(CYCLES_LGS);\n\t}\n}\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386.old/i386op32.c",
    "content": "static UINT32 I386OP(shift_rotate32)(UINT8 modrm, UINT32 value, UINT8 shift)\n{\n\tUINT32 dst, src;\n\tdst = value;\n\tsrc = value;\n\n\tif( shift == 0 ) {\n\t\tCYCLES_RM(modrm, 3, 7);\n\t} else if( shift == 1 ) {\n\t\tswitch( (modrm >> 3) & 0x7 )\n\t\t{\n\t\t\tcase 0:         /* ROL rm32, 1 */\n\t\t\t\tm_CF = (src & 0x80000000) ? 1 : 0;\n\t\t\t\tdst = (src << 1) + m_CF;\n\t\t\t\tm_OF = ((src ^ dst) & 0x80000000) ? 1 : 0;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 1:         /* ROR rm32, 1 */\n\t\t\t\tm_CF = (src & 0x1) ? 1 : 0;\n\t\t\t\tdst = (m_CF << 31) | (src >> 1);\n\t\t\t\tm_OF = ((src ^ dst) & 0x80000000) ? 1 : 0;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 2:         /* RCL rm32, 1 */\n\t\t\t\tdst = (src << 1) + m_CF;\n\t\t\t\tm_CF = (src & 0x80000000) ? 1 : 0;\n\t\t\t\tm_OF = ((src ^ dst) & 0x80000000) ? 1 : 0;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 3:         /* RCR rm32, 1 */\n\t\t\t\tdst = (m_CF << 31) | (src >> 1);\n\t\t\t\tm_CF = src & 0x1;\n\t\t\t\tm_OF = ((src ^ dst) & 0x80000000) ? 1 : 0;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 4:         /* SHL/SAL rm32, 1 */\n\t\t\tcase 6:\n\t\t\t\tdst = src << 1;\n\t\t\t\tm_CF = (src & 0x80000000) ? 1 : 0;\n\t\t\t\tm_OF = (((m_CF << 31) ^ dst) & 0x80000000) ? 1 : 0;\n\t\t\t\tSetSZPF32(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 5:         /* SHR rm32, 1 */\n\t\t\t\tdst = src >> 1;\n\t\t\t\tm_CF = src & 0x1;\n\t\t\t\tm_OF = (src & 0x80000000) ? 1 : 0;\n\t\t\t\tSetSZPF32(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 7:         /* SAR rm32, 1 */\n\t\t\t\tdst = (INT32)(src) >> 1;\n\t\t\t\tm_CF = src & 0x1;\n\t\t\t\tm_OF = 0;\n\t\t\t\tSetSZPF32(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t}\n\n\t} else {\n\t\tshift &= 31;\n\t\tswitch( (modrm >> 3) & 0x7 )\n\t\t{\n\t\t\tcase 0:         /* ROL rm32, i8 */\n\t\t\t\tdst = ((src & ((UINT32)0xffffffff >> shift)) << shift) |\n\t\t\t\t\t\t((src & ((UINT32)0xffffffff << (32-shift))) >> (32-shift));\n\t\t\t\tm_CF = dst & 0x1;\n\t\t\t\tm_OF = (dst & 1) ^ (dst >> 31);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 1:         /* ROR rm32, i8 */\n\t\t\t\tdst = ((src & ((UINT32)0xffffffff << shift)) >> shift) |\n\t\t\t\t\t\t((src & ((UINT32)0xffffffff >> (32-shift))) << (32-shift));\n\t\t\t\tm_CF = (dst >> 31) & 0x1;\n\t\t\t\tm_OF = ((dst >> 31) ^ (dst >> 30)) & 1;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 2:         /* RCL rm32, i8 */\n\t\t\t\tdst = ((src & ((UINT32)0xffffffff >> shift)) << shift) |\n\t\t\t\t\t\t((src & ((UINT32)0xffffffff << (33-shift))) >> (33-shift)) |\n\t\t\t\t\t\t(m_CF << (shift-1));\n\t\t\t\tm_CF = (src >> (32-shift)) & 0x1;\n\t\t\t\tm_OF = m_CF ^ ((dst >> 31) & 1);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 3:         /* RCR rm32, i8 */\n\t\t\t\tdst = ((src & ((UINT32)0xffffffff << shift)) >> shift) |\n\t\t\t\t\t\t((src & ((UINT32)0xffffffff >> (32-shift))) << (33-shift)) |\n\t\t\t\t\t\t(m_CF << (32-shift));\n\t\t\t\tm_CF = (src >> (shift-1)) & 0x1;\n\t\t\t\tm_OF = ((dst >> 31) ^ (dst >> 30)) & 1;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 4:         /* SHL/SAL rm32, i8 */\n\t\t\tcase 6:\n\t\t\t\tdst = src << shift;\n\t\t\t\tm_CF = (src & (1 << (32-shift))) ? 1 : 0;\n\t\t\t\tSetSZPF32(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 5:         /* SHR rm32, i8 */\n\t\t\t\tdst = src >> shift;\n\t\t\t\tm_CF = (src & (1 << (shift-1))) ? 1 : 0;\n\t\t\t\tSetSZPF32(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 7:         /* SAR rm32, i8 */\n\t\t\t\tdst = (INT32)src >> shift;\n\t\t\t\tm_CF = (src & (1 << (shift-1))) ? 1 : 0;\n\t\t\t\tSetSZPF32(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t}\n\n\t}\n\treturn dst;\n}\n\n\n\nstatic void I386OP(adc_rm32_r32)()      // Opcode 0x11\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = LOAD_RM32(modrm);\n\t\tdst = ADC32(dst, src, m_CF);\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = READ32(ea);\n\t\tdst = ADC32(dst, src, m_CF);\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(adc_r32_rm32)()      // Opcode 0x13\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM32(modrm);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = ADC32(dst, src, m_CF);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ32(ea);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = ADC32(dst, src, m_CF);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(adc_eax_i32)()       // Opcode 0x15\n{\n\tUINT32 src, dst;\n\tsrc = FETCH32();\n\tdst = REG32(EAX);\n\tdst = ADC32(dst, src, m_CF);\n\tREG32(EAX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(add_rm32_r32)()      // Opcode 0x01\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = LOAD_RM32(modrm);\n\t\tdst = ADD32(dst, src);\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = READ32(ea);\n\t\tdst = ADD32(dst, src);\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(add_r32_rm32)()      // Opcode 0x03\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM32(modrm);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = ADD32(dst, src);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ32(ea);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = ADD32(dst, src);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(add_eax_i32)()       // Opcode 0x05\n{\n\tUINT32 src, dst;\n\tsrc = FETCH32();\n\tdst = REG32(EAX);\n\tdst = ADD32(dst, src);\n\tREG32(EAX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(and_rm32_r32)()      // Opcode 0x21\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = LOAD_RM32(modrm);\n\t\tdst = AND32(dst, src);\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = READ32(ea);\n\t\tdst = AND32(dst, src);\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(and_r32_rm32)()      // Opcode 0x23\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM32(modrm);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = AND32(dst, src);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ32(ea);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = AND32(dst, src);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(and_eax_i32)()       // Opcode 0x25\n{\n\tUINT32 src, dst;\n\tsrc = FETCH32();\n\tdst = REG32(EAX);\n\tdst = AND32(dst, src);\n\tREG32(EAX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(bsf_r32_rm32)()      // Opcode 0x0f bc\n{\n\tUINT32 src, dst, temp;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM32(modrm);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ32(ea);\n\t}\n\n\tdst = 0;\n\n\tif( src == 0 ) {\n\t\tm_ZF = 1;\n\t} else {\n\t\tm_ZF = 0;\n\t\ttemp = 0;\n\t\twhile( (src & (1 << temp)) == 0 ) {\n\t\t\ttemp++;\n\t\t\tdst = temp;\n\t\t\tCYCLES(CYCLES_BSF);\n\t\t}\n\t\tSTORE_REG32(modrm, dst);\n\t}\n\tCYCLES(CYCLES_BSF_BASE);\n}\n\nstatic void I386OP(bsr_r32_rm32)()      // Opcode 0x0f bd\n{\n\tUINT32 src, dst, temp;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM32(modrm);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ32(ea);\n\t}\n\n\tdst = 0;\n\n\tif( src == 0 ) {\n\t\tm_ZF = 1;\n\t} else {\n\t\tm_ZF = 0;\n\t\tdst = temp = 31;\n\t\twhile( (src & (1 << temp)) == 0 ) {\n\t\t\ttemp--;\n\t\t\tdst = temp;\n\t\t\tCYCLES(CYCLES_BSR);\n\t\t}\n\t\tSTORE_REG32(modrm, dst);\n\t}\n\tCYCLES(CYCLES_BSR_BASE);\n}\n\nstatic void I386OP(bt_rm32_r32)()       // Opcode 0x0f a3\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\tUINT32 bit = LOAD_REG32(modrm);\n\n\t\tif( dst & (1 << bit) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\n\t\tCYCLES(CYCLES_BT_REG_REG);\n\t} else {\n\t\tUINT8 segment;\n\t\tUINT32 ea = GetNonTranslatedEA(modrm,&segment);\n\t\tUINT32 bit = LOAD_REG32(modrm);\n\t\tea += 4*(bit/32);\n\t\tea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),0);\n\t\tbit %= 32;\n\t\tUINT32 dst = READ32(ea);\n\n\t\tif( dst & (1 << bit) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\n\t\tCYCLES(CYCLES_BT_REG_MEM);\n\t}\n}\n\nstatic void I386OP(btc_rm32_r32)()      // Opcode 0x0f bb\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\tUINT32 bit = LOAD_REG32(modrm);\n\n\t\tif( dst & (1 << bit) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\t\tdst ^= (1 << bit);\n\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_BTC_REG_REG);\n\t} else {\n\t\tUINT8 segment;\n\t\tUINT32 ea = GetNonTranslatedEA(modrm,&segment);\n\t\tUINT32 bit = LOAD_REG32(modrm);\n\t\tea += 4*(bit/32);\n\t\tea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),1);\n\t\tbit %= 32;\n\t\tUINT32 dst = READ32(ea);\n\n\t\tif( dst & (1 << bit) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\t\tdst ^= (1 << bit);\n\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_BTC_REG_MEM);\n\t}\n}\n\nstatic void I386OP(btr_rm32_r32)()      // Opcode 0x0f b3\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\tUINT32 bit = LOAD_REG32(modrm);\n\n\t\tif( dst & (1 << bit) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\t\tdst &= ~(1 << bit);\n\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_BTR_REG_REG);\n\t} else {\n\t\tUINT8 segment;\n\t\tUINT32 ea = GetNonTranslatedEA(modrm,&segment);\n\t\tUINT32 bit = LOAD_REG32(modrm);\n\t\tea += 4*(bit/32);\n\t\tea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),1);\n\t\tbit %= 32;\n\t\tUINT32 dst = READ32(ea);\n\n\t\tif( dst & (1 << bit) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\t\tdst &= ~(1 << bit);\n\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_BTR_REG_MEM);\n\t}\n}\n\nstatic void I386OP(bts_rm32_r32)()      // Opcode 0x0f ab\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\tUINT32 bit = LOAD_REG32(modrm);\n\n\t\tif( dst & (1 << bit) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\t\tdst |= (1 << bit);\n\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_BTS_REG_REG);\n\t} else {\n\t\tUINT8 segment;\n\t\tUINT32 ea = GetNonTranslatedEA(modrm,&segment);\n\t\tUINT32 bit = LOAD_REG32(modrm);\n\t\tea += 4*(bit/32);\n\t\tea = i386_translate(segment,(m_address_size)?ea:(ea&0xffff),1);\n\t\tbit %= 32;\n\t\tUINT32 dst = READ32(ea);\n\n\t\tif( dst & (1 << bit) )\n\t\t\tm_CF = 1;\n\t\telse\n\t\t\tm_CF = 0;\n\t\tdst |= (1 << bit);\n\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_BTS_REG_MEM);\n\t}\n}\n\nstatic void I386OP(call_abs32)()        // Opcode 0x9a\n{\n\tUINT32 offset = FETCH32();\n\tUINT16 ptr = FETCH16();\n\n\tif(PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\ti386_protected_mode_call(ptr,offset,0,1);\n\t}\n\telse\n\t{\n\t\tPUSH32(m_sreg[CS].selector );\n\t\tPUSH32(m_eip );\n\t\tm_sreg[CS].selector = ptr;\n\t\tm_performed_intersegment_jump = 1;\n\t\tm_eip = offset;\n\t\ti386_load_segment_descriptor(CS);\n\t}\n\tCYCLES(CYCLES_CALL_INTERSEG);\n\tCHANGE_PC(m_eip);\n}\n\nstatic void I386OP(call_rel32)()        // Opcode 0xe8\n{\n\tINT32 disp = FETCH32();\n\tPUSH32(m_eip );\n\tm_eip += disp;\n\tCHANGE_PC(m_eip);\n\tCYCLES(CYCLES_CALL);       /* TODO: Timing = 7 + m */\n}\n\nstatic void I386OP(cdq)()               // Opcode 0x99\n{\n\tif( REG32(EAX) & 0x80000000 ) {\n\t\tREG32(EDX) = 0xffffffff;\n\t} else {\n\t\tREG32(EDX) = 0x00000000;\n\t}\n\tCYCLES(CYCLES_CWD);\n}\n\nstatic void I386OP(cmp_rm32_r32)()      // Opcode 0x39\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = LOAD_RM32(modrm);\n\t\tSUB32(dst, src);\n\t\tCYCLES(CYCLES_CMP_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = READ32(ea);\n\t\tSUB32(dst, src);\n\t\tCYCLES(CYCLES_CMP_REG_MEM);\n\t}\n}\n\nstatic void I386OP(cmp_r32_rm32)()      // Opcode 0x3b\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM32(modrm);\n\t\tdst = LOAD_REG32(modrm);\n\t\tSUB32(dst, src);\n\t\tCYCLES(CYCLES_CMP_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ32(ea);\n\t\tdst = LOAD_REG32(modrm);\n\t\tSUB32(dst, src);\n\t\tCYCLES(CYCLES_CMP_MEM_REG);\n\t}\n}\n\nstatic void I386OP(cmp_eax_i32)()       // Opcode 0x3d\n{\n\tUINT32 src, dst;\n\tsrc = FETCH32();\n\tdst = REG32(EAX);\n\tSUB32(dst, src);\n\tCYCLES(CYCLES_CMP_IMM_ACC);\n}\n\nstatic void I386OP(cmpsd)()             // Opcode 0xa7\n{\n\tUINT32 eas, ead, src, dst;\n\tif( m_segment_prefix ) {\n\t\teas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t} else {\n\t\teas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t}\n\tead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 0 );\n\tsrc = READ32(eas);\n\tdst = READ32(ead);\n\tSUB32(src,dst);\n\tBUMP_SI(4);\n\tBUMP_DI(4);\n\tCYCLES(CYCLES_CMPS);\n}\n\nstatic void I386OP(cwde)()              // Opcode 0x98\n{\n\tREG32(EAX) = (INT32)((INT16)REG16(AX));\n\tCYCLES(CYCLES_CBW);\n}\n\nstatic void I386OP(dec_eax)()           // Opcode 0x48\n{\n\tREG32(EAX) = DEC32(REG32(EAX) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_ecx)()           // Opcode 0x49\n{\n\tREG32(ECX) = DEC32(REG32(ECX) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_edx)()           // Opcode 0x4a\n{\n\tREG32(EDX) = DEC32(REG32(EDX) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_ebx)()           // Opcode 0x4b\n{\n\tREG32(EBX) = DEC32(REG32(EBX) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_esp)()           // Opcode 0x4c\n{\n\tREG32(ESP) = DEC32(REG32(ESP) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_ebp)()           // Opcode 0x4d\n{\n\tREG32(EBP) = DEC32(REG32(EBP) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_esi)()           // Opcode 0x4e\n{\n\tREG32(ESI) = DEC32(REG32(ESI) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(dec_edi)()           // Opcode 0x4f\n{\n\tREG32(EDI) = DEC32(REG32(EDI) );\n\tCYCLES(CYCLES_DEC_REG);\n}\n\nstatic void I386OP(imul_r32_rm32)()     // Opcode 0x0f af\n{\n\tUINT8 modrm = FETCH();\n\tINT64 result;\n\tINT64 src, dst;\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = (INT64)(INT32)LOAD_RM32(modrm);\n\t\tCYCLES(CYCLES_IMUL32_REG_REG);     /* TODO: Correct multiply timing */\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = (INT64)(INT32)READ32(ea);\n\t\tCYCLES(CYCLES_IMUL32_REG_REG);     /* TODO: Correct multiply timing */\n\t}\n\n\tdst = (INT64)(INT32)LOAD_REG32(modrm);\n\tresult = src * dst;\n\n\tSTORE_REG32(modrm, (UINT32)result);\n\n\tm_CF = m_OF = !(result == (INT64)(INT32)result);\n}\n\nstatic void I386OP(imul_r32_rm32_i32)() // Opcode 0x69\n{\n\tUINT8 modrm = FETCH();\n\tINT64 result;\n\tINT64 src, dst;\n\tif( modrm >= 0xc0 ) {\n\t\tdst = (INT64)(INT32)LOAD_RM32(modrm);\n\t\tCYCLES(CYCLES_IMUL32_REG_IMM_REG);     /* TODO: Correct multiply timing */\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tdst = (INT64)(INT32)READ32(ea);\n\t\tCYCLES(CYCLES_IMUL32_MEM_IMM_REG);     /* TODO: Correct multiply timing */\n\t}\n\n\tsrc = (INT64)(INT32)FETCH32();\n\tresult = src * dst;\n\n\tSTORE_REG32(modrm, (UINT32)result);\n\n\tm_CF = m_OF = !(result == (INT64)(INT32)result);\n}\n\nstatic void I386OP(imul_r32_rm32_i8)()  // Opcode 0x6b\n{\n\tUINT8 modrm = FETCH();\n\tINT64 result;\n\tINT64 src, dst;\n\tif( modrm >= 0xc0 ) {\n\t\tdst = (INT64)(INT32)LOAD_RM32(modrm);\n\t\tCYCLES(CYCLES_IMUL32_REG_IMM_REG);     /* TODO: Correct multiply timing */\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tdst = (INT64)(INT32)READ32(ea);\n\t\tCYCLES(CYCLES_IMUL32_MEM_IMM_REG);     /* TODO: Correct multiply timing */\n\t}\n\n\tsrc = (INT64)(INT8)FETCH();\n\tresult = src * dst;\n\n\tSTORE_REG32(modrm, (UINT32)result);\n\n\tm_CF = m_OF = !(result == (INT64)(INT32)result);\n}\n\nstatic void I386OP(in_eax_i8)()         // Opcode 0xe5\n{\n\tUINT16 port = FETCH();\n\tUINT32 data = READPORT32(port);\n\tREG32(EAX) = data;\n\tCYCLES(CYCLES_IN_VAR);\n}\n\nstatic void I386OP(in_eax_dx)()         // Opcode 0xed\n{\n\tUINT16 port = REG16(DX);\n\tUINT32 data = READPORT32(port);\n\tREG32(EAX) = data;\n\tCYCLES(CYCLES_IN);\n}\n\nstatic void I386OP(inc_eax)()           // Opcode 0x40\n{\n\tREG32(EAX) = INC32(REG32(EAX) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_ecx)()           // Opcode 0x41\n{\n\tREG32(ECX) = INC32(REG32(ECX) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_edx)()           // Opcode 0x42\n{\n\tREG32(EDX) = INC32(REG32(EDX) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_ebx)()           // Opcode 0x43\n{\n\tREG32(EBX) = INC32(REG32(EBX) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_esp)()           // Opcode 0x44\n{\n\tREG32(ESP) = INC32(REG32(ESP) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_ebp)()           // Opcode 0x45\n{\n\tREG32(EBP) = INC32(REG32(EBP) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_esi)()           // Opcode 0x46\n{\n\tREG32(ESI) = INC32(REG32(ESI) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(inc_edi)()           // Opcode 0x47\n{\n\tREG32(EDI) = INC32(REG32(EDI) );\n\tCYCLES(CYCLES_INC_REG);\n}\n\nstatic void I386OP(iret32)()            // Opcode 0xcf\n{\n\tUINT32 old = m_eip;\n\n\tif( PROTECTED_MODE )\n\t{\n\t\ti386_protected_mode_iret(1);\n\t}\n\telse\n\t{\n\t\t/* TODO: #SS(0) exception */\n\t\t/* TODO: #GP(0) exception */\n\t\tm_eip = POP32();\n\t\tm_sreg[CS].selector = POP32() & 0xffff;\n\t\tset_flags(POP32() );\n\t\ti386_load_segment_descriptor(CS);\n\t\tCHANGE_PC(m_eip);\n\t}\n\tCYCLES(CYCLES_IRET);\n\n\t// MS-DOS system call\n\tif(IRET_TOP <= old && old < (IRET_TOP + IRET_SIZE)) {\n\t\tmsdos_syscall(old - IRET_TOP);\n\t}\n}\n\nstatic void I386OP(ja_rel32)()          // Opcode 0x0f 87\n{\n\tINT32 disp = FETCH32();\n\tif( m_CF == 0 && m_ZF == 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jbe_rel32)()         // Opcode 0x0f 86\n{\n\tINT32 disp = FETCH32();\n\tif( m_CF != 0 || m_ZF != 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jc_rel32)()          // Opcode 0x0f 82\n{\n\tINT32 disp = FETCH32();\n\tif( m_CF != 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jg_rel32)()          // Opcode 0x0f 8f\n{\n\tINT32 disp = FETCH32();\n\tif( m_ZF == 0 && (m_SF == m_OF) ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jge_rel32)()         // Opcode 0x0f 8d\n{\n\tINT32 disp = FETCH32();\n\tif(m_SF == m_OF) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jl_rel32)()          // Opcode 0x0f 8c\n{\n\tINT32 disp = FETCH32();\n\tif( (m_SF != m_OF) ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jle_rel32)()         // Opcode 0x0f 8e\n{\n\tINT32 disp = FETCH32();\n\tif( m_ZF != 0 || (m_SF != m_OF) ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jnc_rel32)()         // Opcode 0x0f 83\n{\n\tINT32 disp = FETCH32();\n\tif( m_CF == 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jno_rel32)()         // Opcode 0x0f 81\n{\n\tINT32 disp = FETCH32();\n\tif( m_OF == 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jnp_rel32)()         // Opcode 0x0f 8b\n{\n\tINT32 disp = FETCH32();\n\tif( m_PF == 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jns_rel32)()         // Opcode 0x0f 89\n{\n\tINT32 disp = FETCH32();\n\tif( m_SF == 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jnz_rel32)()         // Opcode 0x0f 85\n{\n\tINT32 disp = FETCH32();\n\tif( m_ZF == 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jo_rel32)()          // Opcode 0x0f 80\n{\n\tINT32 disp = FETCH32();\n\tif( m_OF != 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jp_rel32)()          // Opcode 0x0f 8a\n{\n\tINT32 disp = FETCH32();\n\tif( m_PF != 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(js_rel32)()          // Opcode 0x0f 88\n{\n\tINT32 disp = FETCH32();\n\tif( m_SF != 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jz_rel32)()          // Opcode 0x0f 84\n{\n\tINT32 disp = FETCH32();\n\tif( m_ZF != 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCC_FULL_DISP);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_FULL_DISP_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jcxz32)()            // Opcode 0xe3\n{\n\tINT8 disp = FETCH();\n\tint val = (m_address_size)?(REG32(ECX) == 0):(REG16(CX) == 0);\n\tif( val ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t\tCYCLES(CYCLES_JCXZ);       /* TODO: Timing = 9 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCXZ_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jmp_rel32)()         // Opcode 0xe9\n{\n\tUINT32 disp = FETCH32();\n\t/* TODO: Segment limit */\n\tm_eip += disp;\n\tCHANGE_PC(m_eip);\n\tCYCLES(CYCLES_JMP);        /* TODO: Timing = 7 + m */\n}\n\nstatic void I386OP(jmp_abs32)()         // Opcode 0xea\n{\n\tUINT32 address = FETCH32();\n\tUINT16 segment = FETCH16();\n\n\tif( PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\ti386_protected_mode_jump(segment,address,0,1);\n\t}\n\telse\n\t{\n\t\tm_eip = address;\n\t\tm_sreg[CS].selector = segment;\n\t\tm_performed_intersegment_jump = 1;\n\t\ti386_load_segment_descriptor(CS);\n\t\tCHANGE_PC(m_eip);\n\t}\n\tCYCLES(CYCLES_JMP_INTERSEG);\n}\n\nstatic void I386OP(lea32)()             // Opcode 0x8d\n{\n\tUINT8 modrm = FETCH();\n\tUINT32 ea = GetNonTranslatedEA(modrm,NULL);\n\tif (!m_address_size)\n\t{\n\t\tea &= 0xffff;\n\t}\n\tSTORE_REG32(modrm, ea);\n\tCYCLES(CYCLES_LEA);\n}\n\nstatic void I386OP(enter32)()           // Opcode 0xc8\n{\n\tUINT16 framesize = FETCH16();\n\tUINT8 level = FETCH() % 32;\n\tUINT8 x;\n\tUINT32 frameptr;\n\tPUSH32(REG32(EBP));\n\tif(!STACK_32BIT)\n\t\tframeptr = REG16(SP);\n\telse\n\t\tframeptr = REG32(ESP);\n\n\tif(level > 0)\n\t{\n\t\tfor(x=1;x<level-1;x++)\n\t\t{\n\t\t\tREG32(EBP) -= 4;\n\t\t\tPUSH32(READ32(REG32(EBP)));\n\t\t}\n\t\tPUSH32(frameptr);\n\t}\n\tREG32(EBP) = frameptr;\n\tif(!STACK_32BIT)\n\t\tREG16(SP) -= framesize;\n\telse\n\t\tREG32(ESP) -= framesize;\n\tCYCLES(CYCLES_ENTER);\n}\n\nstatic void I386OP(leave32)()           // Opcode 0xc9\n{\n\tif(!STACK_32BIT)\n\t\tREG16(SP) = REG16(BP);\n\telse\n\t\tREG32(ESP) = REG32(EBP);\n\tREG32(EBP) = POP32();\n\tCYCLES(CYCLES_LEAVE);\n}\n\nstatic void I386OP(lodsd)()             // Opcode 0xad\n{\n\tUINT32 eas;\n\tif( m_segment_prefix ) {\n\t\teas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t} else {\n\t\teas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t}\n\tREG32(EAX) = READ32(eas);\n\tBUMP_SI(4);\n\tCYCLES(CYCLES_LODS);\n}\n\nstatic void I386OP(loop32)()            // Opcode 0xe2\n{\n\tINT8 disp = FETCH();\n\tINT32 reg = (m_address_size)?--REG32(ECX):--REG16(CX);\n\tif( reg != 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t}\n\tCYCLES(CYCLES_LOOP);       /* TODO: Timing = 11 + m */\n}\n\nstatic void I386OP(loopne32)()          // Opcode 0xe0\n{\n\tINT8 disp = FETCH();\n\tINT32 reg = (m_address_size)?--REG32(ECX):--REG16(CX);\n\tif( reg != 0 && m_ZF == 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t}\n\tCYCLES(CYCLES_LOOPNZ);     /* TODO: Timing = 11 + m */\n}\n\nstatic void I386OP(loopz32)()           // Opcode 0xe1\n{\n\tINT8 disp = FETCH();\n\tINT32 reg = (m_address_size)?--REG32(ECX):--REG16(CX);\n\tif( reg != 0 && m_ZF != 0 ) {\n\t\tm_eip += disp;\n\t\tCHANGE_PC(m_eip);\n\t}\n\tCYCLES(CYCLES_LOOPZ);      /* TODO: Timing = 11 + m */\n}\n\nstatic void I386OP(mov_rm32_r32)()      // Opcode 0x89\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG32(modrm);\n\t\tSTORE_RM32(modrm, src);\n\t\tCYCLES(CYCLES_MOV_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG32(modrm);\n\t\tWRITE32(ea, src);\n\t\tCYCLES(CYCLES_MOV_REG_MEM);\n\t}\n}\n\nstatic void I386OP(mov_r32_rm32)()      // Opcode 0x8b\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM32(modrm);\n\t\tSTORE_REG32(modrm, src);\n\t\tCYCLES(CYCLES_MOV_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ32(ea);\n\t\tSTORE_REG32(modrm, src);\n\t\tCYCLES(CYCLES_MOV_MEM_REG);\n\t}\n}\n\nstatic void I386OP(mov_rm32_i32)()      // Opcode 0xc7\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 value = FETCH32();\n\t\tSTORE_RM32(modrm, value);\n\t\tCYCLES(CYCLES_MOV_IMM_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT32 value = FETCH32();\n\t\tWRITE32(ea, value);\n\t\tCYCLES(CYCLES_MOV_IMM_MEM);\n\t}\n}\n\nstatic void I386OP(mov_eax_m32)()       // Opcode 0xa1\n{\n\tUINT32 offset, ea;\n\tif( m_address_size ) {\n\t\toffset = FETCH32();\n\t} else {\n\t\toffset = FETCH16();\n\t}\n\tif( m_segment_prefix ) {\n\t\tea = i386_translate(m_segment_override, offset, 0 );\n\t} else {\n\t\tea = i386_translate(DS, offset, 0 );\n\t}\n\tREG32(EAX) = READ32(ea);\n\tCYCLES(CYCLES_MOV_MEM_ACC);\n}\n\nstatic void I386OP(mov_m32_eax)()       // Opcode 0xa3\n{\n\tUINT32 offset, ea;\n\tif( m_address_size ) {\n\t\toffset = FETCH32();\n\t} else {\n\t\toffset = FETCH16();\n\t}\n\tif( m_segment_prefix ) {\n\t\tea = i386_translate(m_segment_override, offset, 1 );\n\t} else {\n\t\tea = i386_translate(DS, offset, 1 );\n\t}\n\tWRITE32(ea, REG32(EAX) );\n\tCYCLES(CYCLES_MOV_ACC_MEM);\n}\n\nstatic void I386OP(mov_eax_i32)()       // Opcode 0xb8\n{\n\tREG32(EAX) = FETCH32();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_ecx_i32)()       // Opcode 0xb9\n{\n\tREG32(ECX) = FETCH32();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_edx_i32)()       // Opcode 0xba\n{\n\tREG32(EDX) = FETCH32();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_ebx_i32)()       // Opcode 0xbb\n{\n\tREG32(EBX) = FETCH32();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_esp_i32)()       // Opcode 0xbc\n{\n\tREG32(ESP) = FETCH32();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_ebp_i32)()       // Opcode 0xbd\n{\n\tREG32(EBP) = FETCH32();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_esi_i32)()       // Opcode 0xbe\n{\n\tREG32(ESI) = FETCH32();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_edi_i32)()       // Opcode 0xbf\n{\n\tREG32(EDI) = FETCH32();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(movsd)()             // Opcode 0xa5\n{\n\tUINT32 eas, ead, v;\n\tif( m_segment_prefix ) {\n\t\teas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t} else {\n\t\teas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t}\n\tead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 );\n\tv = READ32(eas);\n\tWRITE32(ead, v);\n\tBUMP_SI(4);\n\tBUMP_DI(4);\n\tCYCLES(CYCLES_MOVS);\n}\n\nstatic void I386OP(movsx_r32_rm8)()     // Opcode 0x0f be\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tINT32 src = (INT8)LOAD_RM8(modrm);\n\t\tSTORE_REG32(modrm, src);\n\t\tCYCLES(CYCLES_MOVSX_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tINT32 src = (INT8)READ8(ea);\n\t\tSTORE_REG32(modrm, src);\n\t\tCYCLES(CYCLES_MOVSX_MEM_REG);\n\t}\n}\n\nstatic void I386OP(movsx_r32_rm16)()    // Opcode 0x0f bf\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tINT32 src = (INT16)LOAD_RM16(modrm);\n\t\tSTORE_REG32(modrm, src);\n\t\tCYCLES(CYCLES_MOVSX_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tINT32 src = (INT16)READ16(ea);\n\t\tSTORE_REG32(modrm, src);\n\t\tCYCLES(CYCLES_MOVSX_MEM_REG);\n\t}\n}\n\nstatic void I386OP(movzx_r32_rm8)()     // Opcode 0x0f b6\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 src = (UINT8)LOAD_RM8(modrm);\n\t\tSTORE_REG32(modrm, src);\n\t\tCYCLES(CYCLES_MOVZX_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tUINT32 src = (UINT8)READ8(ea);\n\t\tSTORE_REG32(modrm, src);\n\t\tCYCLES(CYCLES_MOVZX_MEM_REG);\n\t}\n}\n\nstatic void I386OP(movzx_r32_rm16)()    // Opcode 0x0f b7\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 src = (UINT16)LOAD_RM16(modrm);\n\t\tSTORE_REG32(modrm, src);\n\t\tCYCLES(CYCLES_MOVZX_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tUINT32 src = (UINT16)READ16(ea);\n\t\tSTORE_REG32(modrm, src);\n\t\tCYCLES(CYCLES_MOVZX_MEM_REG);\n\t}\n}\n\nstatic void I386OP(or_rm32_r32)()       // Opcode 0x09\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = LOAD_RM32(modrm);\n\t\tdst = OR32(dst, src);\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = READ32(ea);\n\t\tdst = OR32(dst, src);\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(or_r32_rm32)()       // Opcode 0x0b\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM32(modrm);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = OR32(dst, src);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ32(ea);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = OR32(dst, src);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(or_eax_i32)()        // Opcode 0x0d\n{\n\tUINT32 src, dst;\n\tsrc = FETCH32();\n\tdst = REG32(EAX);\n\tdst = OR32(dst, src);\n\tREG32(EAX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(out_eax_i8)()        // Opcode 0xe7\n{\n\tUINT16 port = FETCH();\n\tUINT32 data = REG32(EAX);\n\tWRITEPORT32(port, data);\n\tCYCLES(CYCLES_OUT_VAR);\n}\n\nstatic void I386OP(out_eax_dx)()        // Opcode 0xef\n{\n\tUINT16 port = REG16(DX);\n\tUINT32 data = REG32(EAX);\n\tWRITEPORT32(port, data);\n\tCYCLES(CYCLES_OUT);\n}\n\nstatic void I386OP(pop_eax)()           // Opcode 0x58\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+3) == 0)\n\t\tREG32(EAX) = POP32();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_ecx)()           // Opcode 0x59\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+3) == 0)\n\t\tREG32(ECX) = POP32();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_edx)()           // Opcode 0x5a\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+3) == 0)\n\t\tREG32(EDX) = POP32();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_ebx)()           // Opcode 0x5b\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+3) == 0)\n\t\tREG32(EBX) = POP32();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_esp)()           // Opcode 0x5c\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+3) == 0)\n\t\tREG32(ESP) = POP32();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_ebp)()           // Opcode 0x5d\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+3) == 0)\n\t\tREG32(EBP) = POP32();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_esi)()           // Opcode 0x5e\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+3) == 0)\n\t\tREG32(ESI) = POP32();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic void I386OP(pop_edi)()           // Opcode 0x5f\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+3) == 0)\n\t\tREG32(EDI) = POP32();\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_REG_SHORT);\n}\n\nstatic bool I386OP(pop_seg32)(int segment)\n{\n\tUINT32 ea, offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tUINT32 value;\n\tbool fault;\n\tif(i386_limit_check(SS,offset+3) == 0)\n\t{\n\t\tea = i386_translate(SS, offset, 0);\n\t\tvalue = READ32(ea);\n\t\ti386_sreg_load(value, segment, &fault);\n\t\tif(fault) return false;\n\t\tif(STACK_32BIT)\n\t\t\tREG32(ESP) = offset + 4;\n\t\telse\n\t\t\tREG16(SP) = offset + 4;\n\t}\n\telse\n\t{\n\t\tm_ext = 1;\n\t\ti386_trap_with_error(FAULT_SS,0,0,0);\n\t\treturn false;\n\t}\n\tCYCLES(CYCLES_POP_SREG);\n\treturn true;\n}\n\nstatic void I386OP(pop_ds32)()          // Opcode 0x1f\n{\n\tI386OP(pop_seg32)(DS);\n}\n\nstatic void I386OP(pop_es32)()          // Opcode 0x07\n{\n\tI386OP(pop_seg32)(ES);\n}\n\nstatic void I386OP(pop_fs32)()          // Opcode 0x0f a1\n{\n\tI386OP(pop_seg32)(FS);\n}\n\nstatic void I386OP(pop_gs32)()          // Opcode 0x0f a9\n{\n\tI386OP(pop_seg32)(GS);\n}\n\nstatic void I386OP(pop_ss32)()          // Opcode 0x17\n{\n\tif(!I386OP(pop_seg32)(SS)) return;\n\tif(m_IF != 0) // if external interrupts are enabled\n\t{\n\t\tm_IF = 0;  // reset IF for the next instruction\n\t\tm_delayed_interrupt_enable = 1;\n\t}\n}\n\nstatic void I386OP(pop_rm32)()          // Opcode 0x8f\n{\n\tUINT8 modrm = FETCH();\n\tUINT32 value;\n\tUINT32 ea, offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+3) == 0)\n\t{\n\t\t// be careful here, if the write references the esp register\n\t\t// it expects the post-pop value but esp must be wound back\n\t\t// if the write faults\n\t\tUINT32 temp_sp = REG32(ESP);\n\t\tvalue = POP32();\n\n\t\tif( modrm >= 0xc0 ) {\n\t\t\tSTORE_RM32(modrm, value);\n\t\t} else {\n\t\t\tea = GetEA(modrm,1);\n\t\t\ttry\n\t\t\t{\n\t\t\t\tWRITE32(ea, value);\n\t\t\t}\n\t\t\tcatch(UINT64 e)\n\t\t\t{\n\t\t\t\tREG32(ESP) = temp_sp;\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POP_RM);\n}\n\nstatic void I386OP(popad)()             // Opcode 0x61\n{\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\tif(i386_limit_check(SS,offset+31) == 0)\n\t{\n\t\tREG32(EDI) = POP32();\n\t\tREG32(ESI) = POP32();\n\t\tREG32(EBP) = POP32();\n\t\tREG32(ESP) += 4;\n\t\tREG32(EBX) = POP32();\n\t\tREG32(EDX) = POP32();\n\t\tREG32(ECX) = POP32();\n\t\tREG32(EAX) = POP32();\n\t}\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POPA);\n}\n\nstatic void I386OP(popfd)()             // Opcode 0x9d\n{\n\tUINT32 value;\n\tUINT32 current = get_flags();\n\tUINT8 IOPL = (current >> 12) & 0x03;\n\tUINT32 mask = 0x00257fd5;  // VM, VIP and VIF cannot be set by POPF/POPFD\n\tUINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));\n\n\t// IOPL can only change if CPL is 0\n\tif(m_CPL != 0)\n\t\tmask &= ~0x00003000;\n\n\t// IF can only change if CPL is at least as privileged as IOPL\n\tif(m_CPL > IOPL)\n\t\tmask &= ~0x00000200;\n\n\tif(V8086_MODE)\n\t{\n\t\tif(IOPL < 3)\n\t\t{\n\t\t\tlogerror(\"POPFD(%08x): IOPL < 3 while in V86 mode.\\n\",m_pc);\n\t\t\tFAULT(FAULT_GP,0)  // #GP(0)\n\t\t}\n\t\tmask &= ~0x00003000;  // IOPL cannot be changed while in V8086 mode\n\t}\n\n\tif(i386_limit_check(SS,offset+3) == 0)\n\t{\n\t\tvalue = POP32();\n\t\tvalue &= ~0x00010000;  // RF will always return zero\n\t\tset_flags((current & ~mask) | (value & mask));  // mask out reserved bits\n\t}\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_POPF);\n}\n\nstatic void I386OP(push_eax)()          // Opcode 0x50\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(REG32(EAX) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_ecx)()          // Opcode 0x51\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(REG32(ECX) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_edx)()          // Opcode 0x52\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(REG32(EDX) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_ebx)()          // Opcode 0x53\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(REG32(EBX) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_esp)()          // Opcode 0x54\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(REG32(ESP) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_ebp)()          // Opcode 0x55\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(REG32(EBP) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_esi)()          // Opcode 0x56\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(REG32(ESI) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_edi)()          // Opcode 0x57\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(REG32(EDI) );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_REG_SHORT);\n}\n\nstatic void I386OP(push_cs32)()         // Opcode 0x0e\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(m_sreg[CS].selector );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_SREG);\n}\n\nstatic void I386OP(push_ds32)()         // Opcode 0x1e\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(m_sreg[DS].selector );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_SREG);\n}\n\nstatic void I386OP(push_es32)()         // Opcode 0x06\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(m_sreg[ES].selector );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_SREG);\n}\n\nstatic void I386OP(push_fs32)()         // Opcode 0x0f a0\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(m_sreg[FS].selector );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_SREG);\n}\n\nstatic void I386OP(push_gs32)()         // Opcode 0x0f a8\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(m_sreg[GS].selector );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_SREG);\n}\n\nstatic void I386OP(push_ss32)()         // Opcode 0x16\n{\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(m_sreg[SS].selector );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_SREG);\n}\n\nstatic void I386OP(push_i32)()          // Opcode 0x68\n{\n\tUINT32 value = FETCH32();\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(value);\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSH_IMM);\n}\n\nstatic void I386OP(pushad)()            // Opcode 0x60\n{\n\tUINT32 temp = REG32(ESP);\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 32;\n\telse\n\t\toffset = (REG16(SP) - 32) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t{\n\t\tPUSH32(REG32(EAX) );\n\t\tPUSH32(REG32(ECX) );\n\t\tPUSH32(REG32(EDX) );\n\t\tPUSH32(REG32(EBX) );\n\t\tPUSH32(temp );\n\t\tPUSH32(REG32(EBP) );\n\t\tPUSH32(REG32(ESI) );\n\t\tPUSH32(REG32(EDI) );\n\t}\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSHA);\n}\n\nstatic void I386OP(pushfd)()            // Opcode 0x9c\n{\n\tif(!m_IOP1 && !m_IOP2 && V8086_MODE)\n\t\tFAULT(FAULT_GP,0)\n\tUINT32 offset;\n\tif(STACK_32BIT)\n\t\toffset = REG32(ESP) - 4;\n\telse\n\t\toffset = (REG16(SP) - 4) & 0xffff;\n\tif(i386_limit_check(SS,offset) == 0)\n\t\tPUSH32(get_flags() & 0x00fcffff );\n\telse\n\t\tFAULT(FAULT_SS,0)\n\tCYCLES(CYCLES_PUSHF);\n}\n\nstatic void I386OP(ret_near32_i16)()    // Opcode 0xc2\n{\n\tINT16 disp = FETCH16();\n\tm_eip = POP32();\n\tREG32(ESP) += disp;\n\tCHANGE_PC(m_eip);\n\tCYCLES(CYCLES_RET_IMM);        /* TODO: Timing = 10 + m */\n}\n\nstatic void I386OP(ret_near32)()        // Opcode 0xc3\n{\n\tm_eip = POP32();\n\tCHANGE_PC(m_eip);\n\tCYCLES(CYCLES_RET);        /* TODO: Timing = 10 + m */\n}\n\nstatic void I386OP(sbb_rm32_r32)()      // Opcode 0x19\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = LOAD_RM32(modrm);\n\t\tdst = SBB32(dst, src, m_CF);\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = READ32(ea);\n\t\tdst = SBB32(dst, src, m_CF);\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(sbb_r32_rm32)()      // Opcode 0x1b\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM32(modrm);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = SBB32(dst, src, m_CF);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ32(ea);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = SBB32(dst, src, m_CF);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(sbb_eax_i32)()       // Opcode 0x1d\n{\n\tUINT32 src, dst;\n\tsrc = FETCH32();\n\tdst = REG32(EAX);\n\tdst = SBB32(dst, src, m_CF);\n\tREG32(EAX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(scasd)()             // Opcode 0xaf\n{\n\tUINT32 eas, src, dst;\n\teas = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 0 );\n\tsrc = READ32(eas);\n\tdst = REG32(EAX);\n\tSUB32(dst, src);\n\tBUMP_DI(4);\n\tCYCLES(CYCLES_SCAS);\n}\n\nstatic void I386OP(shld32_i8)()         // Opcode 0x0f a4\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\tUINT32 upper = LOAD_REG32(modrm);\n\t\tUINT8 shift = FETCH();\n\t\tshift &= 31;\n\t\tif( shift == 0 ) {\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (32-shift))) ? 1 : 0;\n\t\t\tdst = (dst << shift) | (upper >> (32-shift));\n\t\t\tm_OF = m_CF ^ (dst >> 31);\n\t\t\tSetSZPF32(dst);\n\t\t}\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_SHLD_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT32 dst = READ32(ea);\n\t\tUINT32 upper = LOAD_REG32(modrm);\n\t\tUINT8 shift = FETCH();\n\t\tshift &= 31;\n\t\tif( shift == 0 ) {\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (32-shift))) ? 1 : 0;\n\t\t\tdst = (dst << shift) | (upper >> (32-shift));\n\t\t\tm_OF = m_CF ^ (dst >> 31);\n\t\t\tSetSZPF32(dst);\n\t\t}\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_SHLD_MEM);\n\t}\n}\n\nstatic void I386OP(shld32_cl)()         // Opcode 0x0f a5\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\tUINT32 upper = LOAD_REG32(modrm);\n\t\tUINT8 shift = REG8(CL);\n\t\tshift &= 31;\n\t\tif( shift == 0 ) {\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (32-shift))) ? 1 : 0;\n\t\t\tdst = (dst << shift) | (upper >> (32-shift));\n\t\t\tm_OF = m_CF ^ (dst >> 31);\n\t\t\tSetSZPF32(dst);\n\t\t}\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_SHLD_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT32 dst = READ32(ea);\n\t\tUINT32 upper = LOAD_REG32(modrm);\n\t\tUINT8 shift = REG8(CL);\n\t\tshift &= 31;\n\t\tif( shift == 0 ) {\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (32-shift))) ? 1 : 0;\n\t\t\tdst = (dst << shift) | (upper >> (32-shift));\n\t\t\tm_OF = m_CF ^ (dst >> 31);\n\t\t\tSetSZPF32(dst);\n\t\t}\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_SHLD_MEM);\n\t}\n}\n\nstatic void I386OP(shrd32_i8)()         // Opcode 0x0f ac\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\tUINT32 upper = LOAD_REG32(modrm);\n\t\tUINT8 shift = FETCH();\n\t\tshift &= 31;\n\t\tif( shift == 0 ) {\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (shift-1))) ? 1 : 0;\n\t\t\tdst = (dst >> shift) | (upper << (32-shift));\n\t\t\tm_OF = ((dst >> 31) ^ (dst >> 30)) & 1;\n\t\t\tSetSZPF32(dst);\n\t\t}\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_SHRD_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT32 dst = READ32(ea);\n\t\tUINT32 upper = LOAD_REG32(modrm);\n\t\tUINT8 shift = FETCH();\n\t\tshift &= 31;\n\t\tif( shift == 0 ) {\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (shift-1))) ? 1 : 0;\n\t\t\tdst = (dst >> shift) | (upper << (32-shift));\n\t\t\tm_OF = ((dst >> 31) ^ (dst >> 30)) & 1;\n\t\t\tSetSZPF32(dst);\n\t\t}\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_SHRD_MEM);\n\t}\n}\n\nstatic void I386OP(shrd32_cl)()         // Opcode 0x0f ad\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\tUINT32 upper = LOAD_REG32(modrm);\n\t\tUINT8 shift = REG8(CL);\n\t\tshift &= 31;\n\t\tif( shift == 0 ) {\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (shift-1))) ? 1 : 0;\n\t\t\tdst = (dst >> shift) | (upper << (32-shift));\n\t\t\tm_OF = ((dst >> 31) ^ (dst >> 30)) & 1;\n\t\t\tSetSZPF32(dst);\n\t\t}\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_SHRD_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT32 dst = READ32(ea);\n\t\tUINT32 upper = LOAD_REG32(modrm);\n\t\tUINT8 shift = REG8(CL);\n\t\tshift &= 31;\n\t\tif( shift == 0 ) {\n\t\t} else {\n\t\t\tm_CF = (dst & (1 << (shift-1))) ? 1 : 0;\n\t\t\tdst = (dst >> shift) | (upper << (32-shift));\n\t\t\tm_OF = ((dst >> 31) ^ (dst >> 30)) & 1;\n\t\t\tSetSZPF32(dst);\n\t\t}\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_SHRD_MEM);\n\t}\n}\n\nstatic void I386OP(stosd)()             // Opcode 0xab\n{\n\tUINT32 eas = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 );\n\tWRITE32(eas, REG32(EAX));\n\tBUMP_DI(4);\n\tCYCLES(CYCLES_STOS);\n}\n\nstatic void I386OP(sub_rm32_r32)()      // Opcode 0x29\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = LOAD_RM32(modrm);\n\t\tdst = SUB32(dst, src);\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = READ32(ea);\n\t\tdst = SUB32(dst, src);\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(sub_r32_rm32)()      // Opcode 0x2b\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM32(modrm);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = SUB32(dst, src);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = READ32(ea);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = SUB32(dst, src);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(sub_eax_i32)()       // Opcode 0x2d\n{\n\tUINT32 src, dst;\n\tsrc = FETCH32();\n\tdst = REG32(EAX);\n\tdst = SUB32(dst, src);\n\tREG32(EAX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(test_eax_i32)()      // Opcode 0xa9\n{\n\tUINT32 src = FETCH32();\n\tUINT32 dst = REG32(EAX);\n\tdst = src & dst;\n\tSetSZPF32(dst);\n\tm_CF = 0;\n\tm_OF = 0;\n\tCYCLES(CYCLES_TEST_IMM_ACC);\n}\n\nstatic void I386OP(test_rm32_r32)()     // Opcode 0x85\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = LOAD_RM32(modrm);\n\t\tdst = src & dst;\n\t\tSetSZPF32(dst);\n\t\tm_CF = 0;\n\t\tm_OF = 0;\n\t\tCYCLES(CYCLES_TEST_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = READ32(ea);\n\t\tdst = src & dst;\n\t\tSetSZPF32(dst);\n\t\tm_CF = 0;\n\t\tm_OF = 0;\n\t\tCYCLES(CYCLES_TEST_REG_MEM);\n\t}\n}\n\nstatic void I386OP(xchg_eax_ecx)()      // Opcode 0x91\n{\n\tUINT32 temp;\n\ttemp = REG32(EAX);\n\tREG32(EAX) = REG32(ECX);\n\tREG32(ECX) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_eax_edx)()      // Opcode 0x92\n{\n\tUINT32 temp;\n\ttemp = REG32(EAX);\n\tREG32(EAX) = REG32(EDX);\n\tREG32(EDX) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_eax_ebx)()      // Opcode 0x93\n{\n\tUINT32 temp;\n\ttemp = REG32(EAX);\n\tREG32(EAX) = REG32(EBX);\n\tREG32(EBX) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_eax_esp)()      // Opcode 0x94\n{\n\tUINT32 temp;\n\ttemp = REG32(EAX);\n\tREG32(EAX) = REG32(ESP);\n\tREG32(ESP) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_eax_ebp)()      // Opcode 0x95\n{\n\tUINT32 temp;\n\ttemp = REG32(EAX);\n\tREG32(EAX) = REG32(EBP);\n\tREG32(EBP) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_eax_esi)()      // Opcode 0x96\n{\n\tUINT32 temp;\n\ttemp = REG32(EAX);\n\tREG32(EAX) = REG32(ESI);\n\tREG32(ESI) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_eax_edi)()      // Opcode 0x97\n{\n\tUINT32 temp;\n\ttemp = REG32(EAX);\n\tREG32(EAX) = REG32(EDI);\n\tREG32(EDI) = temp;\n\tCYCLES(CYCLES_XCHG_REG_REG);\n}\n\nstatic void I386OP(xchg_r32_rm32)()     // Opcode 0x87\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 src = LOAD_RM32(modrm);\n\t\tUINT32 dst = LOAD_REG32(modrm);\n\t\tSTORE_REG32(modrm, src);\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_XCHG_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT32 src = READ32(ea);\n\t\tUINT32 dst = LOAD_REG32(modrm);\n\t\tWRITE32(ea, dst);\n\t\tSTORE_REG32(modrm, src);\n\t\tCYCLES(CYCLES_XCHG_REG_MEM);\n\t}\n}\n\nstatic void I386OP(xor_rm32_r32)()      // Opcode 0x31\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = LOAD_RM32(modrm);\n\t\tdst = XOR32(dst, src);\n\t\tSTORE_RM32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG32(modrm);\n\t\tdst = READ32(ea);\n\t\tdst = XOR32(dst, src);\n\t\tWRITE32(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(xor_r32_rm32)()      // Opcode 0x33\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM32(modrm);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = XOR32(dst, src);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ32(ea);\n\t\tdst = LOAD_REG32(modrm);\n\t\tdst = XOR32(dst, src);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(xor_eax_i32)()       // Opcode 0x35\n{\n\tUINT32 src, dst;\n\tsrc = FETCH32();\n\tdst = REG32(EAX);\n\tdst = XOR32(dst, src);\n\tREG32(EAX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\n\n\nstatic void I386OP(group81_32)()        // Opcode 0x81\n{\n\tUINT32 ea;\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:     // ADD Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = ADD32(dst, src);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = ADD32(dst, src);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 1:     // OR Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = OR32(dst, src);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = OR32(dst, src);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 2:     // ADC Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = ADC32(dst, src, m_CF);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = ADC32(dst, src, m_CF);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 3:     // SBB Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = SBB32(dst, src, m_CF);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = SBB32(dst, src, m_CF);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 4:     // AND Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = AND32(dst, src);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = AND32(dst, src);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 5:     // SUB Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = SUB32(dst, src);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = SUB32(dst, src);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:     // XOR Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = XOR32(dst, src);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tdst = XOR32(dst, src);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 7:     // CMP Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tSUB32(dst, src);\n\t\t\t\tCYCLES(CYCLES_CMP_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = FETCH32();\n\t\t\t\tSUB32(dst, src);\n\t\t\t\tCYCLES(CYCLES_CMP_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(group83_32)()        // Opcode 0x83\n{\n\tUINT32 ea;\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:     // ADD Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tdst = ADD32(dst, src);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tdst = ADD32(dst, src);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 1:     // OR Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tdst = OR32(dst, src);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tdst = OR32(dst, src);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 2:     // ADC Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tdst = ADC32(dst, src, m_CF);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tdst = ADC32(dst, src, m_CF);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 3:     // SBB Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = ((UINT32)(INT32)(INT8)FETCH());\n\t\t\t\tdst = SBB32(dst, src, m_CF);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = ((UINT32)(INT32)(INT8)FETCH());\n\t\t\t\tdst = SBB32(dst, src, m_CF);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 4:     // AND Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tdst = AND32(dst, src);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tdst = AND32(dst, src);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 5:     // SUB Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tdst = SUB32(dst, src);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tdst = SUB32(dst, src);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:     // XOR Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tdst = XOR32(dst, src);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tdst = XOR32(dst, src);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 7:     // CMP Rm32, i32\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM32(modrm);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tSUB32(dst, src);\n\t\t\t\tCYCLES(CYCLES_CMP_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\tdst = READ32(ea);\n\t\t\t\tsrc = (UINT32)(INT32)(INT8)FETCH();\n\t\t\t\tSUB32(dst, src);\n\t\t\t\tCYCLES(CYCLES_CMP_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(groupC1_32)()        // Opcode 0xc1\n{\n\tUINT32 dst;\n\tUINT8 modrm = FETCH();\n\tUINT8 shift;\n\n\tif( modrm >= 0xc0 ) {\n\t\tdst = LOAD_RM32(modrm);\n\t\tshift = FETCH() & 0x1f;\n\t\tdst = i386_shift_rotate32(modrm, dst, shift);\n\t\tSTORE_RM32(modrm, dst);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tdst = READ32(ea);\n\t\tshift = FETCH() & 0x1f;\n\t\tdst = i386_shift_rotate32(modrm, dst, shift);\n\t\tWRITE32(ea, dst);\n\t}\n}\n\nstatic void I386OP(groupD1_32)()        // Opcode 0xd1\n{\n\tUINT32 dst;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 ) {\n\t\tdst = LOAD_RM32(modrm);\n\t\tdst = i386_shift_rotate32(modrm, dst, 1);\n\t\tSTORE_RM32(modrm, dst);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tdst = READ32(ea);\n\t\tdst = i386_shift_rotate32(modrm, dst, 1);\n\t\tWRITE32(ea, dst);\n\t}\n}\n\nstatic void I386OP(groupD3_32)()        // Opcode 0xd3\n{\n\tUINT32 dst;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 ) {\n\t\tdst = LOAD_RM32(modrm);\n\t\tdst = i386_shift_rotate32(modrm, dst, REG8(CL));\n\t\tSTORE_RM32(modrm, dst);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tdst = READ32(ea);\n\t\tdst = i386_shift_rotate32(modrm, dst, REG8(CL));\n\t\tWRITE32(ea, dst);\n\t}\n}\n\nstatic void I386OP(groupF7_32)()        // Opcode 0xf7\n{\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:         /* TEST Rm32, i32 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\t\t\tUINT32 src = FETCH32();\n\t\t\t\tdst &= src;\n\t\t\t\tm_CF = m_OF = m_AF = 0;\n\t\t\t\tSetSZPF32(dst);\n\t\t\t\tCYCLES(CYCLES_TEST_IMM_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\tUINT32 dst = READ32(ea);\n\t\t\t\tUINT32 src = FETCH32();\n\t\t\t\tdst &= src;\n\t\t\t\tm_CF = m_OF = m_AF = 0;\n\t\t\t\tSetSZPF32(dst);\n\t\t\t\tCYCLES(CYCLES_TEST_IMM_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 2:         /* NOT Rm32 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\t\t\tdst = ~dst;\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_NOT_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT32 dst = READ32(ea);\n\t\t\t\tdst = ~dst;\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_NOT_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 3:         /* NEG Rm32 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\t\t\tdst = SUB32(0, dst );\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_NEG_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT32 dst = READ32(ea);\n\t\t\t\tdst = SUB32(0, dst );\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_NEG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 4:         /* MUL EAX, Rm32 */\n\t\t\t{\n\t\t\t\tUINT64 result;\n\t\t\t\tUINT32 src, dst;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\t\t\tCYCLES(CYCLES_MUL32_ACC_REG);      /* TODO: Correct multiply timing */\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tsrc = READ32(ea);\n\t\t\t\t\tCYCLES(CYCLES_MUL32_ACC_MEM);      /* TODO: Correct multiply timing */\n\t\t\t\t}\n\n\t\t\t\tdst = REG32(EAX);\n\t\t\t\tresult = (UINT64)src * (UINT64)dst;\n\t\t\t\tREG32(EDX) = (UINT32)(result >> 32);\n\t\t\t\tREG32(EAX) = (UINT32)result;\n\n\t\t\t\tm_CF = m_OF = (REG32(EDX) != 0);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 5:         /* IMUL EAX, Rm32 */\n\t\t\t{\n\t\t\t\tINT64 result;\n\t\t\t\tINT64 src, dst;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tsrc = (INT64)(INT32)LOAD_RM32(modrm);\n\t\t\t\t\tCYCLES(CYCLES_IMUL32_ACC_REG);     /* TODO: Correct multiply timing */\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tsrc = (INT64)(INT32)READ32(ea);\n\t\t\t\t\tCYCLES(CYCLES_IMUL32_ACC_MEM);     /* TODO: Correct multiply timing */\n\t\t\t\t}\n\n\t\t\t\tdst = (INT64)(INT32)REG32(EAX);\n\t\t\t\tresult = src * dst;\n\n\t\t\t\tREG32(EDX) = (UINT32)(result >> 32);\n\t\t\t\tREG32(EAX) = (UINT32)result;\n\n\t\t\t\tm_CF = m_OF = !(result == (INT64)(INT32)result);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:         /* DIV EAX, Rm32 */\n\t\t\t{\n\t\t\t\tUINT64 quotient, remainder, result;\n\t\t\t\tUINT32 src;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\t\t\tCYCLES(CYCLES_DIV32_ACC_REG);\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tsrc = READ32(ea);\n\t\t\t\t\tCYCLES(CYCLES_DIV32_ACC_MEM);\n\t\t\t\t}\n\n\t\t\t\tquotient = ((UINT64)(REG32(EDX)) << 32) | (UINT64)(REG32(EAX));\n\t\t\t\tif( src ) {\n\t\t\t\t\tremainder = quotient % (UINT64)src;\n\t\t\t\t\tresult = quotient / (UINT64)src;\n\t\t\t\t\tif( result > 0xffffffff ) {\n\t\t\t\t\t\t/* TODO: Divide error */\n\t\t\t\t\t} else {\n\t\t\t\t\t\tREG32(EDX) = (UINT32)remainder;\n\t\t\t\t\t\tREG32(EAX) = (UINT32)result;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ti386_trap(0, 0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 7:         /* IDIV EAX, Rm32 */\n\t\t\t{\n\t\t\t\tINT64 quotient, remainder, result;\n\t\t\t\tUINT32 src;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\t\t\tCYCLES(CYCLES_IDIV32_ACC_REG);\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tsrc = READ32(ea);\n\t\t\t\t\tCYCLES(CYCLES_IDIV32_ACC_MEM);\n\t\t\t\t}\n\n\t\t\t\tquotient = (((INT64)REG32(EDX)) << 32) | ((UINT64)REG32(EAX));\n\t\t\t\tif( src ) {\n\t\t\t\t\tremainder = quotient % (INT64)(INT32)src;\n\t\t\t\t\tresult = quotient / (INT64)(INT32)src;\n\t\t\t\t\tif( result > 0xffffffff ) {\n\t\t\t\t\t\t/* TODO: Divide error */\n\t\t\t\t\t} else {\n\t\t\t\t\t\tREG32(EDX) = (UINT32)remainder;\n\t\t\t\t\t\tREG32(EAX) = (UINT32)result;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ti386_trap(0, 0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(groupFF_32)()        // Opcode 0xff\n{\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:         /* INC Rm32 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\t\t\tdst = INC32(dst);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_INC_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT32 dst = READ32(ea);\n\t\t\t\tdst = INC32(dst);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_INC_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 1:         /* DEC Rm32 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\t\t\tdst = DEC32(dst);\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_DEC_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT32 dst = READ32(ea);\n\t\t\t\tdst = DEC32(dst);\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_DEC_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 2:         /* CALL Rm32 */\n\t\t\t{\n\t\t\t\tUINT32 address;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tCYCLES(CYCLES_CALL_REG);       /* TODO: Timing = 7 + m */\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\taddress = READ32(ea);\n\t\t\t\t\tCYCLES(CYCLES_CALL_MEM);       /* TODO: Timing = 10 + m */\n\t\t\t\t}\n\t\t\t\tPUSH32(m_eip );\n\t\t\t\tm_eip = address;\n\t\t\t\tCHANGE_PC(m_eip);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 3:         /* CALL FAR Rm32 */\n\t\t\t{\n\t\t\t\tUINT16 selector;\n\t\t\t\tUINT32 address;\n\n\t\t\t\tif( modrm >= 0xc0 )\n\t\t\t\t{\n\t\t\t\t\treport_invalid_modrm(\"groupFF_32\", modrm);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\taddress = READ32(ea + 0);\n\t\t\t\t\tselector = READ16(ea + 4);\n\t\t\t\t\tCYCLES(CYCLES_CALL_MEM_INTERSEG);      /* TODO: Timing = 10 + m */\n\t\t\t\t\tif(PROTECTED_MODE && !V8086_MODE)\n\t\t\t\t\t{\n\t\t\t\t\t\ti386_protected_mode_call(selector,address,1,1);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tPUSH32(m_sreg[CS].selector );\n\t\t\t\t\t\tPUSH32(m_eip );\n\t\t\t\t\t\tm_sreg[CS].selector = selector;\n\t\t\t\t\t\tm_performed_intersegment_jump = 1;\n\t\t\t\t\t\ti386_load_segment_descriptor(CS );\n\t\t\t\t\t\tm_eip = address;\n\t\t\t\t\t\tCHANGE_PC(m_eip);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 4:         /* JMP Rm32 */\n\t\t\t{\n\t\t\t\tUINT32 address;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tCYCLES(CYCLES_JMP_REG);        /* TODO: Timing = 7 + m */\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\taddress = READ32(ea);\n\t\t\t\t\tCYCLES(CYCLES_JMP_MEM);        /* TODO: Timing = 10 + m */\n\t\t\t\t}\n\t\t\t\tm_eip = address;\n\t\t\t\tCHANGE_PC(m_eip);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 5:         /* JMP FAR Rm32 */\n\t\t\t{\n\t\t\t\tUINT16 selector;\n\t\t\t\tUINT32 address;\n\n\t\t\t\tif( modrm >= 0xc0 )\n\t\t\t\t{\n\t\t\t\t\treport_invalid_modrm(\"groupFF_32\", modrm);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\taddress = READ32(ea + 0);\n\t\t\t\t\tselector = READ16(ea + 4);\n\t\t\t\t\tCYCLES(CYCLES_JMP_MEM_INTERSEG);       /* TODO: Timing = 10 + m */\n\t\t\t\t\tif(PROTECTED_MODE && !V8086_MODE)\n\t\t\t\t\t{\n\t\t\t\t\t\ti386_protected_mode_jump(selector,address,1,1);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tm_sreg[CS].selector = selector;\n\t\t\t\t\t\tm_performed_intersegment_jump = 1;\n\t\t\t\t\t\ti386_load_segment_descriptor(CS );\n\t\t\t\t\t\tm_eip = address;\n\t\t\t\t\t\tCHANGE_PC(m_eip);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:         /* PUSH Rm32 */\n\t\t\t{\n\t\t\t\tUINT32 value;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tvalue = LOAD_RM32(modrm);\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tvalue = READ32(ea);\n\t\t\t\t}\n\t\t\t\tPUSH32(value);\n\t\t\t\tCYCLES(CYCLES_PUSH_RM);\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treport_invalid_modrm(\"groupFF_32\", modrm);\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(group0F00_32)()          // Opcode 0x0f 00\n{\n\tUINT32 address, ea;\n\tUINT8 modrm = FETCH();\n\tI386_SREG seg;\n\tUINT8 result;\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:         /* SLDT */\n\t\t\tif ( PROTECTED_MODE && !V8086_MODE )\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tSTORE_RM32(modrm, m_ldtr.segment);\n\t\t\t\t\tCYCLES(CYCLES_SLDT_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t\tWRITE16(ea, m_ldtr.segment);\n\t\t\t\t\tCYCLES(CYCLES_SLDT_MEM);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 1:         /* STR */\n\t\t\tif ( PROTECTED_MODE && !V8086_MODE )\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tSTORE_RM32(modrm, m_task.segment);\n\t\t\t\t\tCYCLES(CYCLES_STR_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t\tWRITE16(ea, m_task.segment);\n\t\t\t\t\tCYCLES(CYCLES_STR_MEM);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 2:         /* LLDT */\n\t\t\tif ( PROTECTED_MODE && !V8086_MODE )\n\t\t\t{\n\t\t\t\tif(m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tm_ldtr.segment = address;\n\t\t\t\t\tCYCLES(CYCLES_LLDT_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t\tm_ldtr.segment = READ32(ea);\n\t\t\t\t\tCYCLES(CYCLES_LLDT_MEM);\n\t\t\t\t}\n\t\t\t\tmemset(&seg, 0, sizeof(seg));\n\t\t\t\tseg.selector = m_ldtr.segment;\n\t\t\t\ti386_load_protected_mode_segment(&seg,NULL);\n\t\t\t\tm_ldtr.limit = seg.limit;\n\t\t\t\tm_ldtr.base = seg.base;\n\t\t\t\tm_ldtr.flags = seg.flags;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 3:         /* LTR */\n\t\t\tif ( PROTECTED_MODE && !V8086_MODE )\n\t\t\t{\n\t\t\t\tif(m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tm_task.segment = address;\n\t\t\t\t\tCYCLES(CYCLES_LTR_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t\tm_task.segment = READ32(ea);\n\t\t\t\t\tCYCLES(CYCLES_LTR_MEM);\n\t\t\t\t}\n\t\t\t\tmemset(&seg, 0, sizeof(seg));\n\t\t\t\tseg.selector = m_task.segment;\n\t\t\t\ti386_load_protected_mode_segment(&seg,NULL);\n\n\t\t\t\tUINT32 addr = ((seg.selector & 4) ? m_ldtr.base : m_gdtr.base) + (seg.selector & ~7) + 5;\n\t\t\t\ti386_translate_address(TRANSLATE_READ, &addr, NULL);\n\t\t\t\twrite_byte(addr, (seg.flags & 0xff) | 2);\n\n\t\t\t\tm_task.limit = seg.limit;\n\t\t\t\tm_task.base = seg.base;\n\t\t\t\tm_task.flags = seg.flags | 2;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 4:  /* VERR */\n\t\t\tif ( PROTECTED_MODE && !V8086_MODE )\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tCYCLES(CYCLES_VERR_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t\taddress = READ32(ea);\n\t\t\t\t\tCYCLES(CYCLES_VERR_MEM);\n\t\t\t\t}\n\t\t\t\tmemset(&seg, 0, sizeof(seg));\n\t\t\t\tseg.selector = address;\n\t\t\t\tresult = i386_load_protected_mode_segment(&seg,NULL);\n\t\t\t\t// check if the segment is a code or data segment (not a special segment type, like a TSS, gate, LDT...)\n\t\t\t\tif(!(seg.flags & 0x10))\n\t\t\t\t\tresult = 0;\n\t\t\t\t// check that the segment is readable\n\t\t\t\tif(seg.flags & 0x10)  // is code or data segment\n\t\t\t\t{\n\t\t\t\t\tif(seg.flags & 0x08)  // is code segment, so check if it's readable\n\t\t\t\t\t{\n\t\t\t\t\t\tif(!(seg.flags & 0x02))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tresult = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{  // check if conforming, these are always readable, regardless of privilege\n\t\t\t\t\t\t\tif(!(seg.flags & 0x04))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t// if not conforming, then we must check privilege levels (TODO: current privilege level check)\n\t\t\t\t\t\t\t\tif(((seg.flags >> 5) & 0x03) < (address & 0x03))\n\t\t\t\t\t\t\t\t\tresult = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// check that the descriptor privilege is greater or equal to the selector's privilege level and the current privilege (TODO)\n\t\t\t\tSetZF(result);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t\tlogerror(\"i386: VERR: Exception - Running in real mode or virtual 8086 mode.\\n\");\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 5:  /* VERW */\n\t\t\tif ( PROTECTED_MODE && !V8086_MODE )\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_VERW_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t\taddress = READ16(ea);\n\t\t\t\t\tCYCLES(CYCLES_VERW_MEM);\n\t\t\t\t}\n\t\t\t\tmemset(&seg, 0, sizeof(seg));\n\t\t\t\tseg.selector = address;\n\t\t\t\tresult = i386_load_protected_mode_segment(&seg,NULL);\n\t\t\t\t// check if the segment is a code or data segment (not a special segment type, like a TSS, gate, LDT...)\n\t\t\t\tif(!(seg.flags & 0x10))\n\t\t\t\t\tresult = 0;\n\t\t\t\t// check that the segment is writable\n\t\t\t\tif(seg.flags & 0x10)  // is code or data segment\n\t\t\t\t{\n\t\t\t\t\tif(seg.flags & 0x08)  // is code segment (and thus, not writable)\n\t\t\t\t\t{\n\t\t\t\t\t\tresult = 0;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{  // is data segment\n\t\t\t\t\t\tif(!(seg.flags & 0x02))\n\t\t\t\t\t\t\tresult = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// check that the descriptor privilege is greater or equal to the selector's privilege level and the current privilege (TODO)\n\t\t\t\tif(((seg.flags >> 5) & 0x03) < (address & 0x03))\n\t\t\t\t\tresult = 0;\n\t\t\t\tSetZF(result);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\ti386_trap(6, 0, 0);\n\t\t\t\tlogerror(\"i386: VERW: Exception - Running in real mode or virtual 8086 mode.\\n\");\n\t\t\t}\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\treport_invalid_modrm(\"group0F00_32\", modrm);\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(group0F01_32)()      // Opcode 0x0f 01\n{\n\tUINT8 modrm = FETCH();\n\tUINT32 address, ea;\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:         /* SGDT */\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tea = i386_translate(CS, address, 1 );\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t}\n\t\t\t\tWRITE16(ea, m_gdtr.limit);\n\t\t\t\tWRITE32(ea + 2, m_gdtr.base);\n\t\t\t\tCYCLES(CYCLES_SGDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 1:         /* SIDT */\n\t\t\t{\n\t\t\t\tif (modrm >= 0xc0)\n\t\t\t\t{\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tea = i386_translate(CS, address, 1 );\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t}\n\t\t\t\tWRITE16(ea, m_idtr.limit);\n\t\t\t\tWRITE32(ea + 2, m_idtr.base);\n\t\t\t\tCYCLES(CYCLES_SIDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 2:         /* LGDT */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tea = i386_translate(CS, address, 0 );\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t}\n\t\t\t\tm_gdtr.limit = READ16(ea);\n\t\t\t\tm_gdtr.base = READ32(ea + 2);\n\t\t\t\tCYCLES(CYCLES_LGDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 3:         /* LIDT */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tea = i386_translate(CS, address, 0 );\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t}\n\t\t\t\tm_idtr.limit = READ16(ea);\n\t\t\t\tm_idtr.base = READ32(ea + 2);\n\t\t\t\tCYCLES(CYCLES_LIDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 4:         /* SMSW */\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\t// smsw stores all of cr0 into register\n\t\t\t\t\tSTORE_RM32(modrm, m_cr[0]);\n\t\t\t\t\tCYCLES(CYCLES_SMSW_REG);\n\t\t\t\t} else {\n\t\t\t\t\t/* always 16-bit memory operand */\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t\tWRITE16(ea, m_cr[0]);\n\t\t\t\t\tCYCLES(CYCLES_SMSW_MEM);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 6:         /* LMSW */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tUINT16 b;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tb = LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_LMSW_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t\tCYCLES(CYCLES_LMSW_MEM);\n\t\t\t\tb = READ16(ea);\n\t\t\t\t}\n\t\t\t\tif(PROTECTED_MODE)\n\t\t\t\t\tb |= 0x0001;  // cannot return to real mode using this instruction.\n\t\t\t\tm_cr[0] &= ~0x0000000f;\n\t\t\t\tm_cr[0] |= b & 0x0000000f;\n\t\t\t\tbreak;\n\t\t\t}\n\t\tdefault:\n\t\t\treport_invalid_modrm(\"group0F01_32\", modrm);\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(group0FBA_32)()      // Opcode 0x0f ba\n{\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 4:         /* BT Rm32, i8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\n\t\t\t\tCYCLES(CYCLES_BT_IMM_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\tUINT32 dst = READ32(ea);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\n\t\t\t\tCYCLES(CYCLES_BT_IMM_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 5:         /* BTS Rm32, i8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\t\t\t\tdst |= (1 << bit);\n\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_BTS_IMM_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT32 dst = READ32(ea);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\t\t\t\tdst |= (1 << bit);\n\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_BTS_IMM_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:         /* BTR Rm32, i8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\t\t\t\tdst &= ~(1 << bit);\n\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_BTR_IMM_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT32 dst = READ32(ea);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\t\t\t\tdst &= ~(1 << bit);\n\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_BTR_IMM_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 7:         /* BTC Rm32, i8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\t\t\t\tdst ^= (1 << bit);\n\n\t\t\t\tSTORE_RM32(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_BTC_IMM_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT32 dst = READ32(ea);\n\t\t\t\tUINT8 bit = FETCH();\n\n\t\t\t\tif( dst & (1 << bit) )\n\t\t\t\t\tm_CF = 1;\n\t\t\t\telse\n\t\t\t\t\tm_CF = 0;\n\t\t\t\tdst ^= (1 << bit);\n\n\t\t\t\tWRITE32(ea, dst);\n\t\t\t\tCYCLES(CYCLES_BTC_IMM_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treport_invalid_modrm(\"group0FBA_32\", modrm);\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(lar_r32_rm32)()  // Opcode 0x0f 0x02\n{\n\tUINT8 modrm = FETCH();\n\tI386_SREG seg;\n\tUINT8 type;\n\n\tif(PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\tmemset(&seg,0,sizeof(seg));\n\t\tif(modrm >= 0xc0)\n\t\t{\n\t\t\tseg.selector = LOAD_RM32(modrm);\n\t\t\tCYCLES(CYCLES_LAR_REG);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\tseg.selector = READ32(ea);\n\t\t\tCYCLES(CYCLES_LAR_MEM);\n\t\t}\n\t\tif(seg.selector == 0)\n\t\t{\n\t\t\tSetZF(0);  // not a valid segment\n\t\t}\n\t\telse\n\t\t{\n\t\t\tUINT64 desc;\n\t\t\tif(!i386_load_protected_mode_segment(&seg,&desc))\n\t\t\t{\n\t\t\t\tSetZF(0);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tUINT8 DPL = (seg.flags >> 5) & 3;\n\t\t\tif(((DPL < m_CPL) || (DPL < (seg.selector & 3))) && ((seg.flags & 0x1c) != 0x1c))\n\t\t\t{\n\t\t\t\tSetZF(0);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(!(seg.flags & 0x10))  // special segment\n\t\t\t{\n\t\t\t\t// check for invalid segment types\n\t\t\t\ttype = seg.flags & 0x000f;\n\t\t\t\tif(type == 0x00 || type == 0x08 || type == 0x0a || type == 0x0d)\n\t\t\t\t{\n\t\t\t\t\tSetZF(0);  // invalid segment type\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tSTORE_REG32(modrm,(desc>>32) & 0x00ffff00);\n\t\t\t\t\tSetZF(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tSTORE_REG32(modrm,(desc>>32) & 0x00ffff00);\n\t\t\t\tSetZF(1);\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t{\n\t\t// illegal opcode\n\t\ti386_trap(6,0, 0);\n\t\tlogerror(\"i386: LAR: Exception - running in real mode or virtual 8086 mode.\\n\");\n\t}\n}\n\nstatic void I386OP(lsl_r32_rm32)()  // Opcode 0x0f 0x03\n{\n\tUINT8 modrm = FETCH();\n\tUINT32 limit;\n\tI386_SREG seg;\n\n\tif(PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\tmemset(&seg, 0, sizeof(seg));\n\t\tif(modrm >= 0xc0)\n\t\t{\n\t\t\tseg.selector = LOAD_RM32(modrm);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\tseg.selector = READ32(ea);\n\t\t}\n\t\tif(seg.selector == 0)\n\t\t{\n\t\t\tSetZF(0);  // not a valid segment\n\t\t}\n\t\telse\n\t\t{\n\t\t\tUINT8 type;\n\t\t\tif(!i386_load_protected_mode_segment(&seg,NULL))\n\t\t\t{\n\t\t\t\tSetZF(0);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tUINT8 DPL = (seg.flags >> 5) & 3;\n\t\t\tif(((DPL < m_CPL) || (DPL < (seg.selector & 3))) && ((seg.flags & 0x1c) != 0x1c))\n\t\t\t{\n\t\t\t\tSetZF(0);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttype = seg.flags & 0x1f;\n\t\t\tswitch(type)\n\t\t\t{\n\t\t\tcase 0:\n\t\t\tcase 4:\n\t\t\tcase 5:\n\t\t\tcase 6:\n\t\t\tcase 7:\n\t\t\tcase 8:\n\t\t\tcase 10:\n\t\t\tcase 12:\n\t\t\tcase 13:\n\t\t\tcase 14:\n\t\t\tcase 15:\n\t\t\t\tSetZF(0);\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\tlimit = seg.limit;\n\t\t\t\tSTORE_REG32(modrm,limit);\n\t\t\t\tSetZF(1);\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t\ti386_trap(6, 0, 0);\n}\n\nstatic void I386OP(bound_r32_m32_m32)() // Opcode 0x62\n{\n\tUINT8 modrm;\n\tINT32 val, low, high;\n\n\tmodrm = FETCH();\n\n\tif (modrm >= 0xc0)\n\t{\n\t\tlow = high = LOAD_RM32(modrm);\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tlow = READ32(ea + 0);\n\t\thigh = READ32(ea + 4);\n\t}\n\tval = LOAD_REG32(modrm);\n\n\tif ((val < low) || (val > high))\n\t{\n\t\tCYCLES(CYCLES_BOUND_OUT_RANGE);\n\t\ti386_trap(5, 0, 0);\n\t}\n\telse\n\t{\n\t\tCYCLES(CYCLES_BOUND_IN_RANGE);\n\t}\n}\n\nstatic void I386OP(retf32)()            // Opcode 0xcb\n{\n\tif(PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\ti386_protected_mode_retf(0,1);\n\t}\n\telse\n\t{\n\t\tm_eip = POP32();\n\t\tm_sreg[CS].selector = POP32();\n\t\ti386_load_segment_descriptor(CS );\n\t\tCHANGE_PC(m_eip);\n\t}\n\n\tCYCLES(CYCLES_RET_INTERSEG);\n}\n\nstatic void I386OP(retf_i32)()          // Opcode 0xca\n{\n\tUINT16 count = FETCH16();\n\n\tif(PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\ti386_protected_mode_retf(count,1);\n\t}\n\telse\n\t{\n\t\tm_eip = POP32();\n\t\tm_sreg[CS].selector = POP32();\n\t\ti386_load_segment_descriptor(CS );\n\t\tCHANGE_PC(m_eip);\n\t\tREG32(ESP) += count;\n\t}\n\n\tCYCLES(CYCLES_RET_IMM_INTERSEG);\n}\n\nstatic void I386OP(load_far_pointer32)(int s)\n{\n\tUINT8 modrm = FETCH();\n\tUINT16 selector;\n\n\tif( modrm >= 0xc0 ) {\n\t\treport_invalid_modrm(\"load_far_pointer32\", modrm);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tSTORE_REG32(modrm, READ32(ea + 0));\n\t\tselector = READ16(ea + 4);\n\t\ti386_sreg_load(selector,s,NULL);\n\t}\n}\n\nstatic void I386OP(lds32)()             // Opcode 0xc5\n{\n\tI386OP(load_far_pointer32)(DS);\n\tCYCLES(CYCLES_LDS);\n}\n\nstatic void I386OP(lss32)()             // Opcode 0x0f 0xb2\n{\n\tI386OP(load_far_pointer32)(SS);\n\tCYCLES(CYCLES_LSS);\n}\n\nstatic void I386OP(les32)()             // Opcode 0xc4\n{\n\tI386OP(load_far_pointer32)(ES);\n\tCYCLES(CYCLES_LES);\n}\n\nstatic void I386OP(lfs32)()             // Opcode 0x0f 0xb4\n{\n\tI386OP(load_far_pointer32)(FS);\n\tCYCLES(CYCLES_LFS);\n}\n\nstatic void I386OP(lgs32)()             // Opcode 0x0f 0xb5\n{\n\tI386OP(load_far_pointer32)(GS);\n\tCYCLES(CYCLES_LGS);\n}\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386.old/i386ops.c",
    "content": "static UINT8 I386OP(shift_rotate8)(UINT8 modrm, UINT32 value, UINT8 shift)\n{\n\tUINT32 src = value & 0xff;\n\tUINT8 dst = value;\n\n\tif( shift == 0 ) {\n\t\tCYCLES_RM(modrm, 3, 7);\n\t} else if( shift == 1 ) {\n\t\tswitch( (modrm >> 3) & 0x7 )\n\t\t{\n\t\t\tcase 0:         /* ROL rm8, 1 */\n\t\t\t\tm_CF = (src & 0x80) ? 1 : 0;\n\t\t\t\tdst = (src << 1) + m_CF;\n\t\t\t\tm_OF = ((src ^ dst) & 0x80) ? 1 : 0;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 1:         /* ROR rm8, 1 */\n\t\t\t\tm_CF = (src & 0x1) ? 1 : 0;\n\t\t\t\tdst = (m_CF << 7) | (src >> 1);\n\t\t\t\tm_OF = ((src ^ dst) & 0x80) ? 1 : 0;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 2:         /* RCL rm8, 1 */\n\t\t\t\tdst = (src << 1) + m_CF;\n\t\t\t\tm_CF = (src & 0x80) ? 1 : 0;\n\t\t\t\tm_OF = ((src ^ dst) & 0x80) ? 1 : 0;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 3:         /* RCR rm8, 1 */\n\t\t\t\tdst = (m_CF << 7) | (src >> 1);\n\t\t\t\tm_CF = src & 0x1;\n\t\t\t\tm_OF = ((src ^ dst) & 0x80) ? 1 : 0;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 4:         /* SHL/SAL rm8, 1 */\n\t\t\tcase 6:\n\t\t\t\tdst = src << 1;\n\t\t\t\tm_CF = (src & 0x80) ? 1 : 0;\n\t\t\t\tm_OF = (((m_CF << 7) ^ dst) & 0x80) ? 1 : 0;\n\t\t\t\tSetSZPF8(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 5:         /* SHR rm8, 1 */\n\t\t\t\tdst = src >> 1;\n\t\t\t\tm_CF = src & 0x1;\n\t\t\t\tm_OF = (dst & 0x80) ? 1 : 0;\n\t\t\t\tSetSZPF8(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 7:         /* SAR rm8, 1 */\n\t\t\t\tdst = (INT8)(src) >> 1;\n\t\t\t\tm_CF = src & 0x1;\n\t\t\t\tm_OF = 0;\n\t\t\t\tSetSZPF8(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t}\n\n\t} else {\n\t\tswitch( (modrm >> 3) & 0x7 )\n\t\t{\n\t\t\tcase 0:         /* ROL rm8, i8 */\n\t\t\t\tif(!(shift & 7))\n\t\t\t\t{\n\t\t\t\t\tif(shift & 0x18)\n\t\t\t\t\t{\n\t\t\t\t\t\tm_CF = src & 1;\n\t\t\t\t\t\tm_OF = (src & 1) ^ ((src >> 7) & 1);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tshift &= 7;\n\t\t\t\tdst = ((src & ((UINT8)0xff >> shift)) << shift) |\n\t\t\t\t\t\t((src & ((UINT8)0xff << (8-shift))) >> (8-shift));\n\t\t\t\tm_CF = dst & 0x1;\n\t\t\t\tm_OF = (dst & 1) ^ (dst >> 7);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 1:         /* ROR rm8, i8 */\n\t\t\t\tif(!(shift & 7))\n\t\t\t\t{\n\t\t\t\t\tif(shift & 0x18)\n\t\t\t\t\t{\n\t\t\t\t\t\tm_CF = (src >> 7) & 1;\n\t\t\t\t\t\tm_OF = ((src >> 7) & 1) ^ ((src >> 6) & 1);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tshift &= 7;\n\t\t\t\tdst = ((src & ((UINT8)0xff << shift)) >> shift) |\n\t\t\t\t\t\t((src & ((UINT8)0xff >> (8-shift))) << (8-shift));\n\t\t\t\tm_CF = (dst >> 7) & 1;\n\t\t\t\tm_OF = ((dst >> 7) ^ (dst >> 6)) & 1;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 2:         /* RCL rm8, i8 */\n\t\t\t\tshift %= 9;\n\t\t\t\tdst = ((src & ((UINT8)0xff >> shift)) << shift) |\n\t\t\t\t\t\t((src & ((UINT8)0xff << (9-shift))) >> (9-shift)) |\n\t\t\t\t\t\t(m_CF << (shift-1));\n\t\t\t\tif(shift) m_CF = (src >> (8-shift)) & 0x1;\n\t\t\t\tm_OF = m_CF ^ ((dst >> 7) & 1);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 3:         /* RCR rm8, i8 */\n\t\t\t\tshift %= 9;\n\t\t\t\tdst = ((src & ((UINT8)0xff << shift)) >> shift) |\n\t\t\t\t\t\t((src & ((UINT8)0xff >> (8-shift))) << (9-shift)) |\n\t\t\t\t\t\t(m_CF << (8-shift));\n\t\t\t\tif(shift) m_CF = (src >> (shift-1)) & 0x1;\n\t\t\t\tm_OF = ((dst >> 7) ^ (dst >> 6)) & 1;\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_CARRY_REG, CYCLES_ROTATE_CARRY_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 4:         /* SHL/SAL rm8, i8 */\n\t\t\tcase 6:\n\t\t\t\tshift &= 31;\n\t\t\t\tdst = src << shift;\n\t\t\t\tm_CF = (shift <= 8) && ((src >> (8 - shift)) & 1);\n\t\t\t\tSetSZPF8(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 5:         /* SHR rm8, i8 */\n\t\t\t\tshift &= 31;\n\t\t\t\tdst = src >> shift;\n\t\t\t\tm_CF = (src & (1 << (shift-1))) ? 1 : 0;\n\t\t\t\tSetSZPF8(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t\tcase 7:         /* SAR rm8, i8 */\n\t\t\t\tshift &= 31;\n\t\t\t\tdst = (INT8)src >> shift;\n\t\t\t\tm_CF = (src & (1 << (shift-1))) ? 1 : 0;\n\t\t\t\tSetSZPF8(dst);\n\t\t\t\tCYCLES_RM(modrm, CYCLES_ROTATE_REG, CYCLES_ROTATE_MEM);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn dst;\n}\n\n\n\nstatic void I386OP(adc_rm8_r8)()        // Opcode 0x10\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = LOAD_RM8(modrm);\n\t\tdst = ADC8(dst, src, m_CF);\n\t\tSTORE_RM8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = READ8(ea);\n\t\tdst = ADC8(dst, src, m_CF);\n\t\tWRITE8(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(adc_r8_rm8)()        // Opcode 0x12\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM8(modrm);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = ADC8(dst, src, m_CF);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ8(ea);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = ADC8(dst, src, m_CF);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(adc_al_i8)()     // Opcode 0x14\n{\n\tUINT8 src, dst;\n\tsrc = FETCH();\n\tdst = REG8(AL);\n\tdst = ADC8(dst, src, m_CF);\n\tREG8(AL) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(add_rm8_r8)()        // Opcode 0x00\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = LOAD_RM8(modrm);\n\t\tdst = ADD8(dst, src);\n\t\tSTORE_RM8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = READ8(ea);\n\t\tdst = ADD8(dst, src);\n\t\tWRITE8(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(add_r8_rm8)()        // Opcode 0x02\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM8(modrm);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = ADD8(dst, src);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ8(ea);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = ADD8(dst, src);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(add_al_i8)()     // Opcode 0x04\n{\n\tUINT8 src, dst;\n\tsrc = FETCH();\n\tdst = REG8(AL);\n\tdst = ADD8(dst, src);\n\tREG8(AL) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(and_rm8_r8)()        // Opcode 0x20\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = LOAD_RM8(modrm);\n\t\tdst = AND8(dst, src);\n\t\tSTORE_RM8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = READ8(ea);\n\t\tdst = AND8(dst, src);\n\t\tWRITE8(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(and_r8_rm8)()        // Opcode 0x22\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM8(modrm);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = AND8(dst, src);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ8(ea);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = AND8(dst, src);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(and_al_i8)()         // Opcode 0x24\n{\n\tUINT8 src, dst;\n\tsrc = FETCH();\n\tdst = REG8(AL);\n\tdst = AND8(dst, src);\n\tREG8(AL) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(clc)()               // Opcode 0xf8\n{\n\tm_CF = 0;\n\tCYCLES(CYCLES_CLC);\n}\n\nstatic void I386OP(cld)()               // Opcode 0xfc\n{\n\tm_DF = 0;\n\tCYCLES(CYCLES_CLD);\n}\n\nstatic void I386OP(cli)()               // Opcode 0xfa\n{\n\tif(PROTECTED_MODE)\n\t{\n\t\tUINT8 IOPL = m_IOP1 | (m_IOP2 << 1);\n\t\tif(m_CPL > IOPL)\n\t\t\tFAULT(FAULT_GP,0);\n\t}\n\tm_IF = 0;\n\tCYCLES(CYCLES_CLI);\n}\n\nstatic void I386OP(cmc)()               // Opcode 0xf5\n{\n\tm_CF ^= 1;\n\tCYCLES(CYCLES_CMC);\n}\n\nstatic void I386OP(cmp_rm8_r8)()        // Opcode 0x38\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = LOAD_RM8(modrm);\n\t\tSUB8(dst, src);\n\t\tCYCLES(CYCLES_CMP_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = READ8(ea);\n\t\tSUB8(dst, src);\n\t\tCYCLES(CYCLES_CMP_REG_MEM);\n\t}\n}\n\nstatic void I386OP(cmp_r8_rm8)()        // Opcode 0x3a\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM8(modrm);\n\t\tdst = LOAD_REG8(modrm);\n\t\tSUB8(dst, src);\n\t\tCYCLES(CYCLES_CMP_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ8(ea);\n\t\tdst = LOAD_REG8(modrm);\n\t\tSUB8(dst, src);\n\t\tCYCLES(CYCLES_CMP_MEM_REG);\n\t}\n}\n\nstatic void I386OP(cmp_al_i8)()         // Opcode 0x3c\n{\n\tUINT8 src, dst;\n\tsrc = FETCH();\n\tdst = REG8(AL);\n\tSUB8(dst, src);\n\tCYCLES(CYCLES_CMP_IMM_ACC);\n}\n\nstatic void I386OP(cmpsb)()             // Opcode 0xa6\n{\n\tUINT32 eas, ead;\n\tUINT8 src, dst;\n\tif( m_segment_prefix ) {\n\t\teas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t} else {\n\t\teas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t}\n\tead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 0 );\n\tsrc = READ8(eas);\n\tdst = READ8(ead);\n\tSUB8(src, dst);\n\tBUMP_SI(1);\n\tBUMP_DI(1);\n\tCYCLES(CYCLES_CMPS);\n}\n\nstatic void I386OP(in_al_i8)()          // Opcode 0xe4\n{\n\tUINT16 port = FETCH();\n\tUINT8 data = READPORT8(port);\n\tREG8(AL) = data;\n\tCYCLES(CYCLES_IN_VAR);\n}\n\nstatic void I386OP(in_al_dx)()          // Opcode 0xec\n{\n\tUINT16 port = REG16(DX);\n\tUINT8 data = READPORT8(port);\n\tREG8(AL) = data;\n\tCYCLES(CYCLES_IN);\n}\n\nstatic void I386OP(ja_rel8)()           // Opcode 0x77\n{\n\tINT8 disp = FETCH();\n\tif( m_CF == 0 && m_ZF == 0 ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jbe_rel8)()          // Opcode 0x76\n{\n\tINT8 disp = FETCH();\n\tif( m_CF != 0 || m_ZF != 0 ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jc_rel8)()           // Opcode 0x72\n{\n\tINT8 disp = FETCH();\n\tif( m_CF != 0 ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jg_rel8)()           // Opcode 0x7f\n{\n\tINT8 disp = FETCH();\n\tif( m_ZF == 0 && (m_SF == m_OF) ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jge_rel8)()          // Opcode 0x7d\n{\n\tINT8 disp = FETCH();\n\tif(m_SF == m_OF) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jl_rel8)()           // Opcode 0x7c\n{\n\tINT8 disp = FETCH();\n\tif( (m_SF != m_OF) ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jle_rel8)()      // Opcode 0x7e\n{\n\tINT8 disp = FETCH();\n\tif( m_ZF != 0 || (m_SF != m_OF) ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jnc_rel8)()          // Opcode 0x73\n{\n\tINT8 disp = FETCH();\n\tif( m_CF == 0 ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jno_rel8)()          // Opcode 0x71\n{\n\tINT8 disp = FETCH();\n\tif( m_OF == 0 ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jnp_rel8)()          // Opcode 0x7b\n{\n\tINT8 disp = FETCH();\n\tif( m_PF == 0 ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jns_rel8)()          // Opcode 0x79\n{\n\tINT8 disp = FETCH();\n\tif( m_SF == 0 ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jnz_rel8)()          // Opcode 0x75\n{\n\tINT8 disp = FETCH();\n\tif( m_ZF == 0 ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jo_rel8)()           // Opcode 0x70\n{\n\tINT8 disp = FETCH();\n\tif( m_OF != 0 ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jp_rel8)()           // Opcode 0x7a\n{\n\tINT8 disp = FETCH();\n\tif( m_PF != 0 ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(js_rel8)()           // Opcode 0x78\n{\n\tINT8 disp = FETCH();\n\tif( m_SF != 0 ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jz_rel8)()           // Opcode 0x74\n{\n\tINT8 disp = FETCH();\n\tif( m_ZF != 0 ) {\n\t\tNEAR_BRANCH(disp);\n\t\tCYCLES(CYCLES_JCC_DISP8);      /* TODO: Timing = 7 + m */\n\t} else {\n\t\tCYCLES(CYCLES_JCC_DISP8_NOBRANCH);\n\t}\n}\n\nstatic void I386OP(jmp_rel8)()          // Opcode 0xeb\n{\n\tINT8 disp = FETCH();\n\tNEAR_BRANCH(disp);\n\tCYCLES(CYCLES_JMP_SHORT);      /* TODO: Timing = 7 + m */\n}\n\nstatic void I386OP(lahf)()              // Opcode 0x9f\n{\n\tREG8(AH) = get_flags() & 0xd7;\n\tCYCLES(CYCLES_LAHF);\n}\n\nstatic void I386OP(lodsb)()             // Opcode 0xac\n{\n\tUINT32 eas;\n\tif( m_segment_prefix ) {\n\t\teas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t} else {\n\t\teas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t}\n\tREG8(AL) = READ8(eas);\n\tBUMP_SI(1);\n\tCYCLES(CYCLES_LODS);\n}\n\nstatic void I386OP(mov_rm8_r8)()        // Opcode 0x88\n{\n\tUINT8 src;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG8(modrm);\n\t\tSTORE_RM8(modrm, src);\n\t\tCYCLES(CYCLES_MOV_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG8(modrm);\n\t\tWRITE8(ea, src);\n\t\tCYCLES(CYCLES_MOV_REG_MEM);\n\t}\n}\n\nstatic void I386OP(mov_r8_rm8)()        // Opcode 0x8a\n{\n\tUINT8 src;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM8(modrm);\n\t\tSTORE_REG8(modrm, src);\n\t\tCYCLES(CYCLES_MOV_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ8(ea);\n\t\tSTORE_REG8(modrm, src);\n\t\tCYCLES(CYCLES_MOV_MEM_REG);\n\t}\n}\n\nstatic void I386OP(mov_rm8_i8)()        // Opcode 0xc6\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT8 value = FETCH();\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_MOV_IMM_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT8 value = FETCH();\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_MOV_IMM_MEM);\n\t}\n}\n\nstatic void I386OP(mov_r32_cr)()        // Opcode 0x0f 20\n{\n\tif(PROTECTED_MODE && m_CPL)\n\t\tFAULT(FAULT_GP, 0);\n\tUINT8 modrm = FETCH();\n\tUINT8 cr = (modrm >> 3) & 0x7;\n\n\tSTORE_RM32(modrm, m_cr[cr]);\n\tCYCLES(CYCLES_MOV_CR_REG);\n}\n\nstatic void I386OP(mov_r32_dr)()        // Opcode 0x0f 21\n{\n\tif(PROTECTED_MODE && m_CPL)\n\t\tFAULT(FAULT_GP, 0);\n\tUINT8 modrm = FETCH();\n\tUINT8 dr = (modrm >> 3) & 0x7;\n\n\tSTORE_RM32(modrm, m_dr[dr]);\n\tswitch(dr)\n\t{\n\t\tcase 0:\n\t\tcase 1:\n\t\tcase 2:\n\t\tcase 3:\n\t\t\tCYCLES(CYCLES_MOV_REG_DR0_3);\n\t\t\tbreak;\n\t\tcase 6:\n\t\tcase 7:\n\t\t\tCYCLES(CYCLES_MOV_REG_DR6_7);\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(mov_cr_r32)()        // Opcode 0x0f 22\n{\n\tif(PROTECTED_MODE && m_CPL)\n\t\tFAULT(FAULT_GP, 0);\n\tUINT8 modrm = FETCH();\n\tUINT8 cr = (modrm >> 3) & 0x7;\n\tUINT32 data = LOAD_RM32(modrm);\n\tswitch(cr)\n\t{\n\t\tcase 0:\n\t\t\tdata &= 0xfffeffff; // wp not supported on 386\n\t\t\tCYCLES(CYCLES_MOV_REG_CR0);\n\t\t\tbreak;\n\t\tcase 2: CYCLES(CYCLES_MOV_REG_CR2); break;\n\t\tcase 3:\n\t\t\tCYCLES(CYCLES_MOV_REG_CR3);\n\t\t\tvtlb_flush_dynamic(m_vtlb);\n\t\t\tbreak;\n\t\tcase 4: CYCLES(1); break; // TODO\n\t\tdefault:\n\t\t\tlogerror(\"i386: mov_cr_r32 CR%d!\\n\", cr);\n\t\t\treturn;\n\t}\n\tm_cr[cr] = data;\n}\n\nstatic void I386OP(mov_dr_r32)()        // Opcode 0x0f 23\n{\n\tif(PROTECTED_MODE && m_CPL)\n\t\tFAULT(FAULT_GP, 0);\n\tUINT8 modrm = FETCH();\n\tUINT8 dr = (modrm >> 3) & 0x7;\n\n\tm_dr[dr] = LOAD_RM32(modrm);\n\tswitch(dr)\n\t{\n\t\tcase 0:\n\t\tcase 1:\n\t\tcase 2:\n\t\tcase 3:\n\t\t\tCYCLES(CYCLES_MOV_DR0_3_REG);\n\t\t\tbreak;\n\t\tcase 6:\n\t\tcase 7:\n\t\t\tCYCLES(CYCLES_MOV_DR6_7_REG);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tlogerror(\"i386: mov_dr_r32 DR%d!\\n\", dr);\n\t\t\treturn;\n\t}\n}\n\nstatic void I386OP(mov_al_m8)()         // Opcode 0xa0\n{\n\tUINT32 offset, ea;\n\tif( m_address_size ) {\n\t\toffset = FETCH32();\n\t} else {\n\t\toffset = FETCH16();\n\t}\n\t/* TODO: Not sure if this is correct... */\n\tif( m_segment_prefix ) {\n\t\tea = i386_translate(m_segment_override, offset, 0 );\n\t} else {\n\t\tea = i386_translate(DS, offset, 0 );\n\t}\n\tREG8(AL) = READ8(ea);\n\tCYCLES(CYCLES_MOV_IMM_MEM);\n}\n\nstatic void I386OP(mov_m8_al)()         // Opcode 0xa2\n{\n\tUINT32 offset, ea;\n\tif( m_address_size ) {\n\t\toffset = FETCH32();\n\t} else {\n\t\toffset = FETCH16();\n\t}\n\t/* TODO: Not sure if this is correct... */\n\tif( m_segment_prefix ) {\n\t\tea = i386_translate(m_segment_override, offset, 1 );\n\t} else {\n\t\tea = i386_translate(DS, offset, 1 );\n\t}\n\tWRITE8(ea, REG8(AL) );\n\tCYCLES(CYCLES_MOV_MEM_ACC);\n}\n\nstatic void I386OP(mov_rm16_sreg)()     // Opcode 0x8c\n{\n\tUINT8 modrm = FETCH();\n\tint s = (modrm >> 3) & 0x7;\n\n\tif( modrm >= 0xc0 ) {\n\t\tif(m_operand_size)\n\t\t\tSTORE_RM32(modrm, m_sreg[s].selector);\n\t\telse\n\t\t\tSTORE_RM16(modrm, m_sreg[s].selector);\n\t\tCYCLES(CYCLES_MOV_SREG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE16(ea, m_sreg[s].selector);\n\t\tCYCLES(CYCLES_MOV_SREG_MEM);\n\t}\n}\n\nstatic void I386OP(mov_sreg_rm16)()     // Opcode 0x8e\n{\n\tUINT16 selector;\n\tUINT8 modrm = FETCH();\n\tbool fault;\n\tint s = (modrm >> 3) & 0x7;\n\n\tif( modrm >= 0xc0 ) {\n\t\tselector = LOAD_RM16(modrm);\n\t\tCYCLES(CYCLES_MOV_REG_SREG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tselector = READ16(ea);\n\t\tCYCLES(CYCLES_MOV_MEM_SREG);\n\t}\n\n\ti386_sreg_load(selector,s,&fault);\n\tif((s == SS) && !fault)\n\t{\n\t\tif(m_IF != 0) // if external interrupts are enabled\n\t\t{\n\t\t\tm_IF = 0;  // reset IF for the next instruction\n\t\t\tm_delayed_interrupt_enable = 1;\n\t\t}\n\t}\n}\n\nstatic void I386OP(mov_al_i8)()         // Opcode 0xb0\n{\n\tREG8(AL) = FETCH();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_cl_i8)()         // Opcode 0xb1\n{\n\tREG8(CL) = FETCH();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_dl_i8)()         // Opcode 0xb2\n{\n\tREG8(DL) = FETCH();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_bl_i8)()         // Opcode 0xb3\n{\n\tREG8(BL) = FETCH();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_ah_i8)()         // Opcode 0xb4\n{\n\tREG8(AH) = FETCH();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_ch_i8)()         // Opcode 0xb5\n{\n\tREG8(CH) = FETCH();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_dh_i8)()         // Opcode 0xb6\n{\n\tREG8(DH) = FETCH();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(mov_bh_i8)()         // Opcode 0xb7\n{\n\tREG8(BH) = FETCH();\n\tCYCLES(CYCLES_MOV_IMM_REG);\n}\n\nstatic void I386OP(movsb)()             // Opcode 0xa4\n{\n\tUINT32 eas, ead;\n\tUINT8 v;\n\tif( m_segment_prefix ) {\n\t\teas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t} else {\n\t\teas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t}\n\tead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 );\n\tv = READ8(eas);\n\tWRITE8(ead, v);\n\tBUMP_SI(1);\n\tBUMP_DI(1);\n\tCYCLES(CYCLES_MOVS);\n}\n\nstatic void I386OP(or_rm8_r8)()         // Opcode 0x08\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = LOAD_RM8(modrm);\n\t\tdst = OR8(dst, src);\n\t\tSTORE_RM8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = READ8(ea);\n\t\tdst = OR8(dst, src);\n\t\tWRITE8(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(or_r8_rm8)()         // Opcode 0x0a\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM8(modrm);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = OR8(dst, src);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ8(ea);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = OR8(dst, src);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(or_al_i8)()          // Opcode 0x0c\n{\n\tUINT8 src, dst;\n\tsrc = FETCH();\n\tdst = REG8(AL);\n\tdst = OR8(dst, src);\n\tREG8(EAX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(out_al_i8)()         // Opcode 0xe6\n{\n\tUINT16 port = FETCH();\n\tUINT8 data = REG8(AL);\n\tWRITEPORT8(port, data);\n\tCYCLES(CYCLES_OUT_VAR);\n}\n\nstatic void I386OP(out_al_dx)()         // Opcode 0xee\n{\n\tUINT16 port = REG16(DX);\n\tUINT8 data = REG8(AL);\n\tWRITEPORT8(port, data);\n\tCYCLES(CYCLES_OUT);\n}\n\n\nstatic void I386OP(arpl)()           // Opcode 0x63\n{\n\tUINT16 src, dst;\n\tUINT8 modrm = FETCH();\n\tUINT8 flag = 0;\n\n\tif(PROTECTED_MODE && !V8086_MODE)\n\t{\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\tsrc = LOAD_REG16(modrm);\n\t\t\tdst = LOAD_RM16(modrm);\n\t\t\tif( (dst&0x3) < (src&0x3) ) {\n\t\t\t\tdst = (dst&0xfffc) | (src&0x3);\n\t\t\t\tflag = 1;\n\t\t\t\tSTORE_RM16(modrm, dst);\n\t\t\t}\n\t\t} else {\n\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\tsrc = LOAD_REG16(modrm);\n\t\t\tdst = READ16(ea);\n\t\t\tif( (dst&0x3) < (src&0x3) ) {\n\t\t\t\tdst = (dst&0xfffc) | (src&0x3);\n\t\t\t\tflag = 1;\n\t\t\t\tWRITE16(ea, dst);\n\t\t\t}\n\t\t}\n\t\tSetZF(flag);\n\t}\n\telse\n\t\ti386_trap(6, 0, 0);  // invalid opcode in real mode or v8086 mode\n}\n\nstatic void I386OP(push_i8)()           // Opcode 0x6a\n{\n\tUINT8 value = FETCH();\n\tPUSH8(value);\n\tCYCLES(CYCLES_PUSH_IMM);\n}\n\nstatic void I386OP(ins_generic)(int size)\n{\n\tUINT32 ead;\n\tUINT8 vb;\n\tUINT16 vw;\n\tUINT32 vd;\n\n\tead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 );\n\n\tswitch(size) {\n\tcase 1:\n\t\tvb = READPORT8(REG16(DX));\n\t\tWRITE8(ead, vb);\n\t\tbreak;\n\tcase 2:\n\t\tvw = READPORT16(REG16(DX));\n\t\tWRITE16(ead, vw);\n\t\tbreak;\n\tcase 4:\n\t\tvd = READPORT32(REG16(DX));\n\t\tWRITE32(ead, vd);\n\t\tbreak;\n\t}\n\n\tif(m_address_size)\n\t\tREG32(EDI) += ((m_DF) ? -1 : 1) * size;\n\telse\n\t\tREG16(DI) += ((m_DF) ? -1 : 1) * size;\n\tCYCLES(CYCLES_INS);    // TODO: Confirm this value\n}\n\nstatic void I386OP(insb)()              // Opcode 0x6c\n{\n\tI386OP(ins_generic)(1);\n}\n\nstatic void I386OP(insw)()              // Opcode 0x6d\n{\n\tI386OP(ins_generic)(2);\n}\n\nstatic void I386OP(insd)()              // Opcode 0x6d\n{\n\tI386OP(ins_generic)(4);\n}\n\nstatic void I386OP(outs_generic)(int size)\n{\n\tUINT32 eas;\n\tUINT8 vb;\n\tUINT16 vw;\n\tUINT32 vd;\n\n\tif( m_segment_prefix ) {\n\t\teas = i386_translate(m_segment_override, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t} else {\n\t\teas = i386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), 0 );\n\t}\n\n\tswitch(size) {\n\tcase 1:\n\t\tvb = READ8(eas);\n\t\tWRITEPORT8(REG16(DX), vb);\n\t\tbreak;\n\tcase 2:\n\t\tvw = READ16(eas);\n\t\tWRITEPORT16(REG16(DX), vw);\n\t\tbreak;\n\tcase 4:\n\t\tvd = READ32(eas);\n\t\tWRITEPORT32(REG16(DX), vd);\n\t\tbreak;\n\t}\n\n\tif(m_address_size)\n\t\tREG32(ESI) += ((m_DF) ? -1 : 1) * size;\n\telse\n\t\tREG16(SI) += ((m_DF) ? -1 : 1) * size;\n\tCYCLES(CYCLES_OUTS);   // TODO: Confirm this value\n}\n\nstatic void I386OP(outsb)()             // Opcode 0x6e\n{\n\tI386OP(outs_generic)(1);\n}\n\nstatic void I386OP(outsw)()             // Opcode 0x6f\n{\n\tI386OP(outs_generic)(2);\n}\n\nstatic void I386OP(outsd)()             // Opcode 0x6f\n{\n\tI386OP(outs_generic)(4);\n}\n\nstatic void I386OP(repeat)(int invert_flag)\n{\n\tUINT32 repeated_eip = m_eip;\n\tUINT32 repeated_pc = m_pc;\n\tUINT8 opcode; // = FETCH();\n//  UINT32 eas, ead;\n\tUINT32 count;\n\tINT32 cycle_base = 0, cycle_adjustment = 0;\n\tUINT8 prefix_flag=1;\n\tUINT8 *flag = NULL;\n\n\n\tdo {\n\trepeated_eip = m_eip;\n\trepeated_pc = m_pc;\n\topcode = FETCH();\n\tswitch(opcode) {\n\t\tcase 0x0f:\n\t\tif (invert_flag == 0)\n\t\t\tI386OP(decode_three_bytef3)(); // sse f3 0f\n\t\telse\n\t\t\tI386OP(decode_three_bytef2)(); // sse f2 0f\n\t\treturn;\n\t\tcase 0x26:\n\t\tm_segment_override=ES;\n\t\tm_segment_prefix=1;\n\t\tbreak;\n\t\tcase 0x2e:\n\t\tm_segment_override=CS;\n\t\tm_segment_prefix=1;\n\t\tbreak;\n\t\tcase 0x36:\n\t\tm_segment_override=SS;\n\t\tm_segment_prefix=1;\n\t\tbreak;\n\t\tcase 0x3e:\n\t\tm_segment_override=DS;\n\t\tm_segment_prefix=1;\n\t\tbreak;\n\t\tcase 0x64:\n\t\tm_segment_override=FS;\n\t\tm_segment_prefix=1;\n\t\tbreak;\n\t\tcase 0x65:\n\t\tm_segment_override=GS;\n\t\tm_segment_prefix=1;\n\t\tbreak;\n\t\tcase 0x66:\n\t\tm_operand_size ^= 1;\n\t\tm_xmm_operand_size ^= 1;\n\t\tbreak;\n\t\tcase 0x67:\n\t\tm_address_size ^= 1;\n\t\tbreak;\n\t\tdefault:\n\t\tprefix_flag=0;\n\t}\n\t} while (prefix_flag);\n\n\n\tif( m_segment_prefix ) {\n\t\t// FIXME: the following does not work if both address override and segment override are used\n\t\ti386_translate(m_segment_override, m_sreg[m_segment_prefix].d ? REG32(ESI) : REG16(SI), -1 );\n\t} else {\n\t\t//eas =\n\t\ti386_translate(DS, m_address_size ? REG32(ESI) : REG16(SI), -1 );\n\t}\n\ti386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), -1 );\n\n\tswitch(opcode)\n\t{\n\t\tcase 0x6c:\n\t\tcase 0x6d:\n\t\t\t/* INSB, INSW, INSD */\n\t\t\t// TODO: cycle count\n\t\t\tcycle_base = 8;\n\t\t\tcycle_adjustment = -4;\n\t\t\tflag = NULL;\n\t\t\tbreak;\n\n\t\tcase 0x6e:\n\t\tcase 0x6f:\n\t\t\t/* OUTSB, OUTSW, OUTSD */\n\t\t\t// TODO: cycle count\n\t\t\tcycle_base = 8;\n\t\t\tcycle_adjustment = -4;\n\t\t\tflag = NULL;\n\t\t\tbreak;\n\n\t\tcase 0xa4:\n\t\tcase 0xa5:\n\t\t\t/* MOVSB, MOVSW, MOVSD */\n\t\t\tcycle_base = 8;\n\t\t\tcycle_adjustment = -4;\n\t\t\tflag = NULL;\n\t\t\tbreak;\n\n\t\tcase 0xa6:\n\t\tcase 0xa7:\n\t\t\t/* CMPSB, CMPSW, CMPSD */\n\t\t\tcycle_base = 5;\n\t\t\tcycle_adjustment = -1;\n\t\t\tflag = &m_ZF;\n\t\t\tbreak;\n\n\t\tcase 0xac:\n\t\tcase 0xad:\n\t\t\t/* LODSB, LODSW, LODSD */\n\t\t\tcycle_base = 5;\n\t\t\tcycle_adjustment = 1;\n\t\t\tflag = NULL;\n\t\t\tbreak;\n\n\t\tcase 0xaa:\n\t\tcase 0xab:\n\t\t\t/* STOSB, STOSW, STOSD */\n\t\t\tcycle_base = 5;\n\t\t\tcycle_adjustment = 0;\n\t\t\tflag = NULL;\n\t\t\tbreak;\n\n\t\tcase 0xae:\n\t\tcase 0xaf:\n\t\t\t/* SCASB, SCASW, SCASD */\n\t\t\tcycle_base = 5;\n\t\t\tcycle_adjustment = 0;\n\t\t\tflag = &m_ZF;\n\t\t\tbreak;\n\n\t\tcase 0x90:\n\t\t\tCYCLES(CYCLES_NOP);\n\t\t\treturn;\n\n\t\tcase 0xc2: // sigh\n\t\tcase 0xc3:\n\t\t\tm_pc--;\n\t\t\treturn;\n\n\t\tdefault:\n\t\t\tfatalerror(\"i386: Invalid REP/opcode %02X combination\\n\",opcode);\n\t\t\tbreak;\n\t}\n\n\tif( m_address_size ) {\n\t\tif( REG32(ECX) == 0 )\n\t\t\treturn;\n\t} else {\n\t\tif( REG16(CX) == 0 )\n\t\t\treturn;\n\t}\n\n\t/* now actually perform the repeat */\n\tCYCLES_NUM(cycle_base);\n\tdo\n\t{\n\t\tm_eip = repeated_eip;\n\t\tm_pc = repeated_pc;\n\t\ttry\n\t\t{\n\t\t\tI386OP(decode_opcode)();\n\t\t}\n\t\tcatch (UINT64 e)\n\t\t{\n\t\t\tm_eip = m_prev_eip;\n\t\t\tthrow e;\n\t\t}\n\n\t\tCYCLES_NUM(cycle_adjustment);\n\n\t\tif (m_address_size)\n\t\t\tcount = --REG32(ECX);\n\t\telse\n\t\t\tcount = --REG16(CX);\n//\t\tif (m_cycles <= 0)\n//\t\t\tgoto outofcycles;\n\t}\n\twhile( count && (!flag || (invert_flag ? !*flag : *flag)) );\n//\treturn;\n//\n//outofcycles:\n//\t/* if we run out of cycles to execute, and we are still in the repeat, we need\n//\t * to exit this instruction in such a way to go right back into it when we have\n//\t * time to execute cycles */\n//\tif(flag && (invert_flag ? *flag : !*flag))\n//\t\treturn;\n//\tm_eip = m_prev_eip;\n//\tCHANGE_PC(m_eip);\n//\tCYCLES_NUM(-cycle_base);\n}\n\nstatic void I386OP(rep)()               // Opcode 0xf3\n{\n\tI386OP(repeat)(0);\n}\n\nstatic void I386OP(repne)()             // Opcode 0xf2\n{\n\tI386OP(repeat)(1);\n}\n\nstatic void I386OP(sahf)()              // Opcode 0x9e\n{\n\tset_flags((get_flags() & 0xffffff00) | (REG8(AH) & 0xd7) );\n\tCYCLES(CYCLES_SAHF);\n}\n\nstatic void I386OP(sbb_rm8_r8)()        // Opcode 0x18\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = LOAD_RM8(modrm);\n\t\tdst = SBB8(dst, src, m_CF);\n\t\tSTORE_RM8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = READ8(ea);\n\t\tdst = SBB8(dst, src, m_CF);\n\t\tWRITE8(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(sbb_r8_rm8)()        // Opcode 0x1a\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM8(modrm);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = SBB8(dst, src, m_CF);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ8(ea);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = SBB8(dst, src, m_CF);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(sbb_al_i8)()         // Opcode 0x1c\n{\n\tUINT8 src, dst;\n\tsrc = FETCH();\n\tdst = REG8(AL);\n\tdst = SBB8(dst, src, m_CF);\n\tREG8(EAX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(scasb)()             // Opcode 0xae\n{\n\tUINT32 eas;\n\tUINT8 src, dst;\n\teas = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 0 );\n\tsrc = READ8(eas);\n\tdst = REG8(AL);\n\tSUB8(dst, src);\n\tBUMP_DI(1);\n\tCYCLES(CYCLES_SCAS);\n}\n\nstatic void I386OP(setalc)()            // Opcode 0xd6 (undocumented)\n{\n\tif( m_CF ) {\n\t\tREG8(AL) = 0xff;\n\t} else {\n\t\tREG8(AL) = 0;\n\t}\n\tCYCLES(3);\n}\n\nstatic void I386OP(seta_rm8)()          // Opcode 0x0f 97\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_CF == 0 && m_ZF == 0 ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setbe_rm8)()         // Opcode 0x0f 96\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_CF != 0 || m_ZF != 0 ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setc_rm8)()          // Opcode 0x0f 92\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_CF != 0 ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setg_rm8)()          // Opcode 0x0f 9f\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_ZF == 0 && (m_SF == m_OF) ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setge_rm8)()         // Opcode 0x0f 9d\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif(m_SF == m_OF) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setl_rm8)()          // Opcode 0x0f 9c\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_SF != m_OF ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setle_rm8)()         // Opcode 0x0f 9e\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_ZF != 0 || (m_SF != m_OF) ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setnc_rm8)()         // Opcode 0x0f 93\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_CF == 0 ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setno_rm8)()         // Opcode 0x0f 91\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_OF == 0 ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setnp_rm8)()         // Opcode 0x0f 9b\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_PF == 0 ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setns_rm8)()         // Opcode 0x0f 99\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_SF == 0 ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setnz_rm8)()         // Opcode 0x0f 95\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_ZF == 0 ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(seto_rm8)()          // Opcode 0x0f 90\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_OF != 0 ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setp_rm8)()          // Opcode 0x0f 9a\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_PF != 0 ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(sets_rm8)()          // Opcode 0x0f 98\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_SF != 0 ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(setz_rm8)()          // Opcode 0x0f 94\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 value = 0;\n\tif( m_ZF != 0 ) {\n\t\tvalue = 1;\n\t}\n\tif( modrm >= 0xc0 ) {\n\t\tSTORE_RM8(modrm, value);\n\t\tCYCLES(CYCLES_SETCC_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tWRITE8(ea, value);\n\t\tCYCLES(CYCLES_SETCC_MEM);\n\t}\n}\n\nstatic void I386OP(stc)()               // Opcode 0xf9\n{\n\tm_CF = 1;\n\tCYCLES(CYCLES_STC);\n}\n\nstatic void I386OP(std)()               // Opcode 0xfd\n{\n\tm_DF = 1;\n\tCYCLES(CYCLES_STD);\n}\n\nstatic void I386OP(sti)()               // Opcode 0xfb\n{\n\tif(PROTECTED_MODE)\n\t{\n\t\tUINT8 IOPL = m_IOP1 | (m_IOP2 << 1);\n\t\tif(m_CPL > IOPL)\n\t\t\tFAULT(FAULT_GP,0);\n\t}\n\tm_delayed_interrupt_enable = 1;  // IF is set after the next instruction.\n\tCYCLES(CYCLES_STI);\n}\n\nstatic void I386OP(stosb)()             // Opcode 0xaa\n{\n\tUINT32 ead;\n\tead = i386_translate(ES, m_address_size ? REG32(EDI) : REG16(DI), 1 );\n\tWRITE8(ead, REG8(AL));\n\tBUMP_DI(1);\n\tCYCLES(CYCLES_STOS);\n}\n\nstatic void I386OP(sub_rm8_r8)()        // Opcode 0x28\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = LOAD_RM8(modrm);\n\t\tdst = SUB8(dst, src);\n\t\tSTORE_RM8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = READ8(ea);\n\t\tdst = SUB8(dst, src);\n\t\tWRITE8(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(sub_r8_rm8)()        // Opcode 0x2a\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM8(modrm);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = SUB8(dst, src);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ8(ea);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = SUB8(dst, src);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(sub_al_i8)()         // Opcode 0x2c\n{\n\tUINT8 src, dst;\n\tsrc = FETCH();\n\tdst = REG8(EAX);\n\tdst = SUB8(dst, src);\n\tREG8(EAX) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(test_al_i8)()        // Opcode 0xa8\n{\n\tUINT8 src = FETCH();\n\tUINT8 dst = REG8(AL);\n\tdst = src & dst;\n\tSetSZPF8(dst);\n\tm_CF = 0;\n\tm_OF = 0;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\nstatic void I386OP(test_rm8_r8)()       // Opcode 0x84\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = LOAD_RM8(modrm);\n\t\tdst = src & dst;\n\t\tSetSZPF8(dst);\n\t\tm_CF = 0;\n\t\tm_OF = 0;\n\t\tCYCLES(CYCLES_TEST_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = READ8(ea);\n\t\tdst = src & dst;\n\t\tSetSZPF8(dst);\n\t\tm_CF = 0;\n\t\tm_OF = 0;\n\t\tCYCLES(CYCLES_TEST_REG_MEM);\n\t}\n}\n\nstatic void I386OP(xchg_r8_rm8)()       // Opcode 0x86\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT8 src = LOAD_RM8(modrm);\n\t\tUINT8 dst = LOAD_REG8(modrm);\n\t\tSTORE_REG8(modrm, src);\n\t\tSTORE_RM8(modrm, dst);\n\t\tCYCLES(CYCLES_XCHG_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT8 src = READ8(ea);\n\t\tUINT8 dst = LOAD_REG8(modrm);\n\t\tWRITE8(ea, dst);\n\t\tSTORE_REG8(modrm, src);\n\t\tCYCLES(CYCLES_XCHG_REG_MEM);\n\t}\n}\n\nstatic void I386OP(xor_rm8_r8)()        // Opcode 0x30\n{\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = LOAD_RM8(modrm);\n\t\tdst = XOR8(dst, src);\n\t\tSTORE_RM8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tsrc = LOAD_REG8(modrm);\n\t\tdst = READ8(ea);\n\t\tdst = XOR8(dst, src);\n\t\tWRITE8(ea, dst);\n\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t}\n}\n\nstatic void I386OP(xor_r8_rm8)()        // Opcode 0x32\n{\n\tUINT32 src, dst;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM8(modrm);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = XOR8(dst, src);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ8(ea);\n\t\tdst = LOAD_REG8(modrm);\n\t\tdst = XOR8(dst, src);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_ALU_MEM_REG);\n\t}\n}\n\nstatic void I386OP(xor_al_i8)()         // Opcode 0x34\n{\n\tUINT8 src, dst;\n\tsrc = FETCH();\n\tdst = REG8(AL);\n\tdst = XOR8(dst, src);\n\tREG8(AL) = dst;\n\tCYCLES(CYCLES_ALU_IMM_ACC);\n}\n\n\n\nstatic void I386OP(group80_8)()         // Opcode 0x80\n{\n\tUINT32 ea;\n\tUINT8 src, dst;\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:     // ADD Rm8, i8\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM8(modrm);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = ADD8(dst, src);\n\t\t\t\tSTORE_RM8(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\tdst = READ8(ea);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = ADD8(dst, src);\n\t\t\t\tWRITE8(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 1:     // OR Rm8, i8\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM8(modrm);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = OR8(dst, src);\n\t\t\t\tSTORE_RM8(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ8(ea);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = OR8(dst, src);\n\t\t\t\tWRITE8(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 2:     // ADC Rm8, i8\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM8(modrm);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = ADC8(dst, src, m_CF);\n\t\t\t\tSTORE_RM8(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ8(ea);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = ADC8(dst, src, m_CF);\n\t\t\t\tWRITE8(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 3:     // SBB Rm8, i8\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM8(modrm);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = SBB8(dst, src, m_CF);\n\t\t\t\tSTORE_RM8(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ8(ea);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = SBB8(dst, src, m_CF);\n\t\t\t\tWRITE8(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 4:     // AND Rm8, i8\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM8(modrm);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = AND8(dst, src);\n\t\t\t\tSTORE_RM8(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ8(ea);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = AND8(dst, src);\n\t\t\t\tWRITE8(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 5:     // SUB Rm8, i8\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM8(modrm);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = SUB8(dst, src);\n\t\t\t\tSTORE_RM8(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ8(ea);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = SUB8(dst, src);\n\t\t\t\tWRITE8(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:     // XOR Rm8, i8\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM8(modrm);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = XOR8(dst, src);\n\t\t\t\tSTORE_RM8(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\tdst = READ8(ea);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tdst = XOR8(dst, src);\n\t\t\t\tWRITE8(ea, dst);\n\t\t\t\tCYCLES(CYCLES_ALU_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 7:     // CMP Rm8, i8\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tdst = LOAD_RM8(modrm);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tSUB8(dst, src);\n\t\t\t\tCYCLES(CYCLES_CMP_REG_REG);\n\t\t\t} else {\n\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\tdst = READ8(ea);\n\t\t\t\tsrc = FETCH();\n\t\t\t\tSUB8(dst, src);\n\t\t\t\tCYCLES(CYCLES_CMP_REG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(groupC0_8)()         // Opcode 0xc0\n{\n\tUINT8 dst;\n\tUINT8 modrm = FETCH();\n\tUINT8 shift;\n\n\tif( modrm >= 0xc0 ) {\n\t\tdst = LOAD_RM8(modrm);\n\t\tshift = FETCH() & 0x1f;\n\t\tdst = i386_shift_rotate8(modrm, dst, shift);\n\t\tSTORE_RM8(modrm, dst);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tdst = READ8(ea);\n\t\tshift = FETCH() & 0x1f;\n\t\tdst = i386_shift_rotate8(modrm, dst, shift);\n\t\tWRITE8(ea, dst);\n\t}\n}\n\nstatic void I386OP(groupD0_8)()         // Opcode 0xd0\n{\n\tUINT8 dst;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 ) {\n\t\tdst = LOAD_RM8(modrm);\n\t\tdst = i386_shift_rotate8(modrm, dst, 1);\n\t\tSTORE_RM8(modrm, dst);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tdst = READ8(ea);\n\t\tdst = i386_shift_rotate8(modrm, dst, 1);\n\t\tWRITE8(ea, dst);\n\t}\n}\n\nstatic void I386OP(groupD2_8)()         // Opcode 0xd2\n{\n\tUINT8 dst;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 ) {\n\t\tdst = LOAD_RM8(modrm);\n\t\tdst = i386_shift_rotate8(modrm, dst, REG8(CL));\n\t\tSTORE_RM8(modrm, dst);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tdst = READ8(ea);\n\t\tdst = i386_shift_rotate8(modrm, dst, REG8(CL));\n\t\tWRITE8(ea, dst);\n\t}\n}\n\nstatic void I386OP(groupF6_8)()         // Opcode 0xf6\n{\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:         /* TEST Rm8, i8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT8 dst = LOAD_RM8(modrm);\n\t\t\t\tUINT8 src = FETCH();\n\t\t\t\tdst &= src;\n\t\t\t\tm_CF = m_OF = m_AF = 0;\n\t\t\t\tSetSZPF8(dst);\n\t\t\t\tCYCLES(CYCLES_TEST_IMM_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\tUINT8 dst = READ8(ea);\n\t\t\t\tUINT8 src = FETCH();\n\t\t\t\tdst &= src;\n\t\t\t\tm_CF = m_OF = m_AF = 0;\n\t\t\t\tSetSZPF8(dst);\n\t\t\t\tCYCLES(CYCLES_TEST_IMM_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 2:         /* NOT Rm8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT8 dst = LOAD_RM8(modrm);\n\t\t\t\tdst = ~dst;\n\t\t\t\tSTORE_RM8(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_NOT_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT8 dst = READ8(ea);\n\t\t\t\tdst = ~dst;\n\t\t\t\tWRITE8(ea, dst);\n\t\t\t\tCYCLES(CYCLES_NOT_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 3:         /* NEG Rm8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT8 dst = LOAD_RM8(modrm);\n\t\t\t\tdst = SUB8(0, dst );\n\t\t\t\tSTORE_RM8(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_NEG_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT8 dst = READ8(ea);\n\t\t\t\tdst = SUB8(0, dst );\n\t\t\t\tWRITE8(ea, dst);\n\t\t\t\tCYCLES(CYCLES_NEG_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 4:         /* MUL AL, Rm8 */\n\t\t\t{\n\t\t\t\tUINT16 result;\n\t\t\t\tUINT8 src, dst;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tsrc = LOAD_RM8(modrm);\n\t\t\t\t\tCYCLES(CYCLES_MUL8_ACC_REG);       /* TODO: Correct multiply timing */\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tsrc = READ8(ea);\n\t\t\t\t\tCYCLES(CYCLES_MUL8_ACC_MEM);       /* TODO: Correct multiply timing */\n\t\t\t\t}\n\n\t\t\t\tdst = REG8(AL);\n\t\t\t\tresult = (UINT16)src * (UINT16)dst;\n\t\t\t\tREG16(AX) = (UINT16)result;\n\n\t\t\t\tm_CF = m_OF = (REG16(AX) > 0xff);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 5:         /* IMUL AL, Rm8 */\n\t\t\t{\n\t\t\t\tINT16 result;\n\t\t\t\tINT16 src, dst;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tsrc = (INT16)(INT8)LOAD_RM8(modrm);\n\t\t\t\t\tCYCLES(CYCLES_IMUL8_ACC_REG);      /* TODO: Correct multiply timing */\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tsrc = (INT16)(INT8)READ8(ea);\n\t\t\t\t\tCYCLES(CYCLES_IMUL8_ACC_MEM);      /* TODO: Correct multiply timing */\n\t\t\t\t}\n\n\t\t\t\tdst = (INT16)(INT8)REG8(AL);\n\t\t\t\tresult = src * dst;\n\n\t\t\t\tREG16(AX) = (UINT16)result;\n\n\t\t\t\tm_CF = m_OF = !(result == (INT16)(INT8)result);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:         /* DIV AL, Rm8 */\n\t\t\t{\n\t\t\t\tUINT16 quotient, remainder, result;\n\t\t\t\tUINT8 src;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tsrc = LOAD_RM8(modrm);\n\t\t\t\t\tCYCLES(CYCLES_DIV8_ACC_REG);\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tsrc = READ8(ea);\n\t\t\t\t\tCYCLES(CYCLES_DIV8_ACC_MEM);\n\t\t\t\t}\n\n\t\t\t\tquotient = (UINT16)REG16(AX);\n\t\t\t\tif( src ) {\n\t\t\t\t\tremainder = quotient % (UINT16)src;\n\t\t\t\t\tresult = quotient / (UINT16)src;\n\t\t\t\t\tif( result > 0xff ) {\n\t\t\t\t\t\t/* TODO: Divide error */\n\t\t\t\t\t} else {\n\t\t\t\t\t\tREG8(AH) = (UINT8)remainder & 0xff;\n\t\t\t\t\t\tREG8(AL) = (UINT8)result & 0xff;\n\n\t\t\t\t\t\t// this flag is actually undefined, enable on non-cyrix\n\t\t\t\t\t\tif (m_cpuid_id0 != 0x69727943)\n\t\t\t\t\t\t\tm_CF = 1;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ti386_trap(0, 0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 7:         /* IDIV AL, Rm8 */\n\t\t\t{\n\t\t\t\tINT16 quotient, remainder, result;\n\t\t\t\tUINT8 src;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tsrc = LOAD_RM8(modrm);\n\t\t\t\t\tCYCLES(CYCLES_IDIV8_ACC_REG);\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tsrc = READ8(ea);\n\t\t\t\t\tCYCLES(CYCLES_IDIV8_ACC_MEM);\n\t\t\t\t}\n\n\t\t\t\tquotient = (INT16)REG16(AX);\n\t\t\t\tif( src ) {\n\t\t\t\t\tremainder = quotient % (INT16)(INT8)src;\n\t\t\t\t\tresult = quotient / (INT16)(INT8)src;\n\t\t\t\t\tif( result > 0xff ) {\n\t\t\t\t\t\t/* TODO: Divide error */\n\t\t\t\t\t} else {\n\t\t\t\t\t\tREG8(AH) = (UINT8)remainder & 0xff;\n\t\t\t\t\t\tREG8(AL) = (UINT8)result & 0xff;\n\n\t\t\t\t\t\t// this flag is actually undefined, enable on non-cyrix\n\t\t\t\t\t\tif (m_cpuid_id0 != 0x69727943)\n\t\t\t\t\t\t\tm_CF = 1;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ti386_trap(0, 0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t}\n}\n\nstatic void I386OP(groupFE_8)()         // Opcode 0xfe\n{\n\tUINT8 modrm = FETCH();\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:         /* INC Rm8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT8 dst = LOAD_RM8(modrm);\n\t\t\t\tdst = INC8(dst);\n\t\t\t\tSTORE_RM8(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_INC_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT8 dst = READ8(ea);\n\t\t\t\tdst = INC8(dst);\n\t\t\t\tWRITE8(ea, dst);\n\t\t\t\tCYCLES(CYCLES_INC_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 1:         /* DEC Rm8 */\n\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\tUINT8 dst = LOAD_RM8(modrm);\n\t\t\t\tdst = DEC8(dst);\n\t\t\t\tSTORE_RM8(modrm, dst);\n\t\t\t\tCYCLES(CYCLES_DEC_REG);\n\t\t\t} else {\n\t\t\t\tUINT32 ea = GetEA(modrm,1);\n\t\t\t\tUINT8 dst = READ8(ea);\n\t\t\t\tdst = DEC8(dst);\n\t\t\t\tWRITE8(ea, dst);\n\t\t\t\tCYCLES(CYCLES_DEC_MEM);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 6:         /* PUSH Rm8*/\n\t\t\t{\n\t\t\t\tUINT8 value;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tvalue = LOAD_RM8(modrm);\n\t\t\t\t} else {\n\t\t\t\t\tUINT32 ea = GetEA(modrm,0);\n\t\t\t\t\tvalue = READ8(ea);\n\t\t\t\t}\n\t\t\t\tif( m_operand_size ) {\n\t\t\t\t\tPUSH32(value);\n\t\t\t\t} else {\n\t\t\t\t\tPUSH16(value);\n\t\t\t\t}\n\t\t\t\tCYCLES(CYCLES_PUSH_RM);\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treport_invalid_modrm(\"groupFE_8\", modrm);\n\t\t\tbreak;\n\t}\n}\n\n\n\nstatic void I386OP(segment_CS)()        // Opcode 0x2e\n{\n\tm_segment_prefix = 1;\n\tm_segment_override = CS;\n\n\tI386OP(decode_opcode)();\n}\n\nstatic void I386OP(segment_DS)()        // Opcode 0x3e\n{\n\tm_segment_prefix = 1;\n\tm_segment_override = DS;\n\tCYCLES(0); // TODO: Specify cycle count\n\tI386OP(decode_opcode)();\n}\n\nstatic void I386OP(segment_ES)()        // Opcode 0x26\n{\n\tm_segment_prefix = 1;\n\tm_segment_override = ES;\n\tCYCLES(0); // TODO: Specify cycle count\n\tI386OP(decode_opcode)();\n}\n\nstatic void I386OP(segment_FS)()        // Opcode 0x64\n{\n\tm_segment_prefix = 1;\n\tm_segment_override = FS;\n\tCYCLES(1); // TODO: Specify cycle count\n\tI386OP(decode_opcode)();\n}\n\nstatic void I386OP(segment_GS)()        // Opcode 0x65\n{\n\tm_segment_prefix = 1;\n\tm_segment_override = GS;\n\tCYCLES(1); // TODO: Specify cycle count\n\tI386OP(decode_opcode)();\n}\n\nstatic void I386OP(segment_SS)()        // Opcode 0x36\n{\n\tm_segment_prefix = 1;\n\tm_segment_override = SS;\n\tCYCLES(0); // TODO: Specify cycle count\n\tI386OP(decode_opcode)();\n}\n\nstatic void I386OP(operand_size)()      // Opcode prefix 0x66\n{\n\tif(m_operand_prefix == 0)\n\t{\n\t\tm_operand_size ^= 1;\n\t\tm_xmm_operand_size ^= 1;\n\t\tm_operand_prefix = 1;\n\t}\n\tm_opcode = FETCH();\n\tif (m_opcode == 0x0f)\n\t\tI386OP(decode_three_byte66)();\n\telse\n\t{\n\t\tif( m_operand_size )\n\t\t\tm_opcode_table1_32[m_opcode]();\n\t\telse\n\t\t\tm_opcode_table1_16[m_opcode]();\n\t}\n}\n\nstatic void I386OP(address_size)()      // Opcode 0x67\n{\n\tif(m_address_prefix == 0)\n\t{\n\t\tm_address_size ^= 1;\n\t\tm_address_prefix = 1;\n\t}\n\tI386OP(decode_opcode)();\n}\n\nstatic void I386OP(nop)()               // Opcode 0x90\n{\n\tCYCLES(CYCLES_NOP);\n}\n\nstatic void I386OP(int3)()              // Opcode 0xcc\n{\n\tCYCLES(CYCLES_INT3);\n\tm_ext = 0; // not an external interrupt\n\ti386_trap(3, 1, 0);\n\tm_ext = 1;\n}\n\nstatic void I386OP(int)()               // Opcode 0xcd\n{\n\tint interrupt = FETCH();\n\tCYCLES(CYCLES_INT);\n\tm_ext = 0; // not an external interrupt\n\ti386_trap(interrupt, 1, 0);\n\tm_ext = 1;\n}\n\nstatic void I386OP(into)()              // Opcode 0xce\n{\n\tif( m_OF ) {\n\t\tm_ext = 0;\n\t\ti386_trap(4, 1, 0);\n\t\tm_ext = 1;\n\t\tCYCLES(CYCLES_INTO_OF1);\n\t}\n\telse\n\t{\n\t\tCYCLES(CYCLES_INTO_OF0);\n\t}\n}\n\nstatic UINT32 i386_escape_ea;   // hack around GCC 4.6 error because we need the side effects of GetEA()\nstatic void I386OP(escape)()            // Opcodes 0xd8 - 0xdf\n{\n\tUINT8 modrm = FETCH();\n\tif(modrm < 0xc0)\n\t{\n\t\ti386_escape_ea = GetEA(modrm,0);\n\t}\n\tCYCLES(3); // TODO: confirm this\n\t(void) LOAD_RM8(modrm);\n}\n\nstatic void I386OP(hlt)()               // Opcode 0xf4\n{\n\tif(PROTECTED_MODE && m_CPL != 0)\n\t\tFAULT(FAULT_GP,0);\n\tm_halted = 1;\n\tCYCLES(CYCLES_HLT);\n//\tif (m_cycles > 0)\n//\t\tm_cycles = 0;\n}\n\nstatic void I386OP(decimal_adjust)(int direction)\n{\n\tUINT8 tmpAL = REG8(AL);\n\tUINT8 tmpCF = m_CF;\n\n\tif (m_AF || ((REG8(AL) & 0xf) > 9))\n\t{\n\t\tUINT16 t= (UINT16)REG8(AL) + (direction * 0x06);\n\t\tREG8(AL) = (UINT8)t&0xff;\n\t\tm_AF = 1;\n\t\tif (t & 0x100)\n\t\t\tm_CF = 1;\n\t\tif (direction > 0)\n\t\t\ttmpAL = REG8(AL);\n\t}\n\n\tif (tmpCF || (tmpAL > 0x99))\n\t{\n\t\tREG8(AL) += (direction * 0x60);\n\t\tm_CF = 1;\n\t}\n\n\tSetSZPF8(REG8(AL));\n}\n\nstatic void I386OP(daa)()               // Opcode 0x27\n{\n\tI386OP(decimal_adjust)(+1);\n\tCYCLES(CYCLES_DAA);\n}\n\nstatic void I386OP(das)()               // Opcode 0x2f\n{\n\tI386OP(decimal_adjust)(-1);\n\tCYCLES(CYCLES_DAS);\n}\n\nstatic void I386OP(aaa)()               // Opcode 0x37\n{\n\tif( ( (REG8(AL) & 0x0f) > 9) || (m_AF != 0) ) {\n\t\tREG16(AX) = REG16(AX) + 6;\n\t\tREG8(AH) = REG8(AH) + 1;\n\t\tm_AF = 1;\n\t\tm_CF = 1;\n\t} else {\n\t\tm_AF = 0;\n\t\tm_CF = 0;\n\t}\n\tREG8(AL) = REG8(AL) & 0x0f;\n\tCYCLES(CYCLES_AAA);\n}\n\nstatic void I386OP(aas)()               // Opcode 0x3f\n{\n\tif (m_AF || ((REG8(AL) & 0xf) > 9))\n\t{\n\t\tREG16(AX) -= 6;\n\t\tREG8(AH) -= 1;\n\t\tm_AF = 1;\n\t\tm_CF = 1;\n\t}\n\telse\n\t{\n\t\tm_AF = 0;\n\t\tm_CF = 0;\n\t}\n\tREG8(AL) &= 0x0f;\n\tCYCLES(CYCLES_AAS);\n}\n\nstatic void I386OP(aad)()               // Opcode 0xd5\n{\n\tUINT8 tempAL = REG8(AL);\n\tUINT8 tempAH = REG8(AH);\n\tUINT8 i = FETCH();\n\n\tREG8(AL) = (tempAL + (tempAH * i)) & 0xff;\n\tREG8(AH) = 0;\n\tSetSZPF8( REG8(AL) );\n\tCYCLES(CYCLES_AAD);\n}\n\nstatic void I386OP(aam)()               // Opcode 0xd4\n{\n\tUINT8 tempAL = REG8(AL);\n\tUINT8 i = FETCH();\n\n\tif(!i)\n\t{\n\t\ti386_trap(0, 0, 0);\n\t\treturn;\n\t}\n\tREG8(AH) = tempAL / i;\n\tREG8(AL) = tempAL % i;\n\tSetSZPF8( REG8(AL) );\n\tCYCLES(CYCLES_AAM);\n}\n\nstatic void I386OP(clts)()              // Opcode 0x0f 0x06\n{\n\t// Privileged instruction, CPL must be zero.  Can be used in real or v86 mode.\n\tif(PROTECTED_MODE && m_CPL != 0)\n\t\tFAULT(FAULT_GP,0)\n\tm_cr[0] &= ~0x08;   /* clear TS bit */\n\tCYCLES(CYCLES_CLTS);\n}\n\nstatic void I386OP(wait)()              // Opcode 0x9B\n{\n\t// TODO\n}\n\nstatic void I386OP(lock)()              // Opcode 0xf0\n{\n\t// lock doesn't depend on iopl on 386\n\tm_lock = true;\n\tCYCLES(CYCLES_LOCK);       // TODO: Determine correct cycle count\n\tI386OP(decode_opcode)();\n}\n\nstatic void I386OP(mov_r32_tr)()        // Opcode 0x0f 24\n{\n\tFETCH();\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void I386OP(mov_tr_r32)()        // Opcode 0x0f 26\n{\n\tFETCH();\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void I386OP(loadall)()       // Opcode 0x0f 0x07 (0x0f 0x05 on 80286), undocumented\n{\n\tfatalerror(\"i386: LOADALL unimplemented at %08X\\n\", m_pc - 1);\n}\n\nstatic void I386OP(invalid)()\n{\n\t/* for ISH.COM */\n//\treport_invalid_opcode();\n//\ti386_trap(6, 0, 0);\n}\n\nstatic void I386OP(xlat)()          // Opcode 0xd7\n{\n\tUINT32 ea;\n\tif( m_segment_prefix ) {\n\t\tif(!m_address_size)\n\t\t{\n\t\t\tea = i386_translate(m_segment_override, REG16(BX) + REG8(AL), 0 );\n\t\t}\n\t\telse\n\t\t{\n\t\t\tea = i386_translate(m_segment_override, REG32(EBX) + REG8(AL), 0 );\n\t\t}\n\t} else {\n\t\tif(!m_address_size)\n\t\t{\n\t\t\tea = i386_translate(DS, REG16(BX) + REG8(AL), 0 );\n\t\t}\n\t\telse\n\t\t{\n\t\t\tea = i386_translate(DS, REG32(EBX) + REG8(AL), 0 );\n\t\t}\n\t}\n\tREG8(AL) = READ8(ea);\n\tCYCLES(CYCLES_XLAT);\n}\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386.old/i386ops.h",
    "content": "struct X86_OPCODE {\n\tUINT8 opcode;\n\tUINT32 flags;\n\tvoid (*handler16)();\n\tvoid (*handler32)();\n\tbool lockable;\n};\n\n#define OP_I386         0x1\n#define OP_FPU          0x2\n#define OP_I486         0x4\n#define OP_PENTIUM      0x8\n#define OP_MMX          0x10\n#define OP_PPRO         0x20\n#define OP_SSE          0x40\n#define OP_SSE2         0x80\n#define OP_SSE3         0x100\n#define OP_CYRIX        0x8000\n#define OP_2BYTE        0x80000000\n#define OP_3BYTE66      0x40000000\n#define OP_3BYTEF2      0x20000000\n#define OP_3BYTEF3      0x10000000\n\nstatic const X86_OPCODE x86_opcode_table[] =\n{\n//  Opcode      Flags                       16-bit handler                  32-bit handler\n\t{ 0x00,     OP_I386,                    I386OP(add_rm8_r8),            I386OP(add_rm8_r8),        true },\n\t{ 0x01,     OP_I386,                    I386OP(add_rm16_r16),          I386OP(add_rm32_r32),      true },\n\t{ 0x02,     OP_I386,                    I386OP(add_r8_rm8),            I386OP(add_r8_rm8),        false},\n\t{ 0x03,     OP_I386,                    I386OP(add_r16_rm16),          I386OP(add_r32_rm32),      false},\n\t{ 0x04,     OP_I386,                    I386OP(add_al_i8),             I386OP(add_al_i8),         false},\n\t{ 0x05,     OP_I386,                    I386OP(add_ax_i16),            I386OP(add_eax_i32),       false},\n\t{ 0x06,     OP_I386,                    I386OP(push_es16),             I386OP(push_es32),         false},\n\t{ 0x07,     OP_I386,                    I386OP(pop_es16),              I386OP(pop_es32),          false},\n\t{ 0x08,     OP_I386,                    I386OP(or_rm8_r8),             I386OP(or_rm8_r8),         true },\n\t{ 0x09,     OP_I386,                    I386OP(or_rm16_r16),           I386OP(or_rm32_r32),       true },\n\t{ 0x0A,     OP_I386,                    I386OP(or_r8_rm8),             I386OP(or_r8_rm8),         false},\n\t{ 0x0B,     OP_I386,                    I386OP(or_r16_rm16),           I386OP(or_r32_rm32),       false},\n\t{ 0x0C,     OP_I386,                    I386OP(or_al_i8),              I386OP(or_al_i8),          false},\n\t{ 0x0D,     OP_I386,                    I386OP(or_ax_i16),             I386OP(or_eax_i32),        false},\n\t{ 0x0E,     OP_I386,                    I386OP(push_cs16),             I386OP(push_cs32),         false},\n\t{ 0x0F,     OP_I386,                    I386OP(decode_two_byte),       I386OP(decode_two_byte),   true },\n\t{ 0x10,     OP_I386,                    I386OP(adc_rm8_r8),            I386OP(adc_rm8_r8),        true },\n\t{ 0x11,     OP_I386,                    I386OP(adc_rm16_r16),          I386OP(adc_rm32_r32),      true },\n\t{ 0x12,     OP_I386,                    I386OP(adc_r8_rm8),            I386OP(adc_r8_rm8),        false},\n\t{ 0x13,     OP_I386,                    I386OP(adc_r16_rm16),          I386OP(adc_r32_rm32),      false},\n\t{ 0x14,     OP_I386,                    I386OP(adc_al_i8),             I386OP(adc_al_i8),         false},\n\t{ 0x15,     OP_I386,                    I386OP(adc_ax_i16),            I386OP(adc_eax_i32),       false},\n\t{ 0x16,     OP_I386,                    I386OP(push_ss16),             I386OP(push_ss32),         false},\n\t{ 0x17,     OP_I386,                    I386OP(pop_ss16),              I386OP(pop_ss32),          false},\n\t{ 0x18,     OP_I386,                    I386OP(sbb_rm8_r8),            I386OP(sbb_rm8_r8),        true },\n\t{ 0x19,     OP_I386,                    I386OP(sbb_rm16_r16),          I386OP(sbb_rm32_r32),      true },\n\t{ 0x1A,     OP_I386,                    I386OP(sbb_r8_rm8),            I386OP(sbb_r8_rm8),        false},\n\t{ 0x1B,     OP_I386,                    I386OP(sbb_r16_rm16),          I386OP(sbb_r32_rm32),      false},\n\t{ 0x1C,     OP_I386,                    I386OP(sbb_al_i8),             I386OP(sbb_al_i8),         false},\n\t{ 0x1D,     OP_I386,                    I386OP(sbb_ax_i16),            I386OP(sbb_eax_i32),       false},\n\t{ 0x1E,     OP_I386,                    I386OP(push_ds16),             I386OP(push_ds32),         false},\n\t{ 0x1F,     OP_I386,                    I386OP(pop_ds16),              I386OP(pop_ds32),          false},\n\t{ 0x20,     OP_I386,                    I386OP(and_rm8_r8),            I386OP(and_rm8_r8),        true },\n\t{ 0x21,     OP_I386,                    I386OP(and_rm16_r16),          I386OP(and_rm32_r32),      true },\n\t{ 0x22,     OP_I386,                    I386OP(and_r8_rm8),            I386OP(and_r8_rm8),        false},\n\t{ 0x23,     OP_I386,                    I386OP(and_r16_rm16),          I386OP(and_r32_rm32),      false},\n\t{ 0x24,     OP_I386,                    I386OP(and_al_i8),             I386OP(and_al_i8),         false},\n\t{ 0x25,     OP_I386,                    I386OP(and_ax_i16),            I386OP(and_eax_i32),       false},\n\t{ 0x26,     OP_I386,                    I386OP(segment_ES),            I386OP(segment_ES),        false},\n\t{ 0x27,     OP_I386,                    I386OP(daa),                   I386OP(daa),               false},\n\t{ 0x28,     OP_I386,                    I386OP(sub_rm8_r8),            I386OP(sub_rm8_r8),        true },\n\t{ 0x29,     OP_I386,                    I386OP(sub_rm16_r16),          I386OP(sub_rm32_r32),      true },\n\t{ 0x2A,     OP_I386,                    I386OP(sub_r8_rm8),            I386OP(sub_r8_rm8),        false},\n\t{ 0x2B,     OP_I386,                    I386OP(sub_r16_rm16),          I386OP(sub_r32_rm32),      false},\n\t{ 0x2C,     OP_I386,                    I386OP(sub_al_i8),             I386OP(sub_al_i8),         false},\n\t{ 0x2D,     OP_I386,                    I386OP(sub_ax_i16),            I386OP(sub_eax_i32),       false},\n\t{ 0x2E,     OP_I386,                    I386OP(segment_CS),            I386OP(segment_CS),        false},\n\t{ 0x2F,     OP_I386,                    I386OP(das),                   I386OP(das),               false},\n\t{ 0x30,     OP_I386,                    I386OP(xor_rm8_r8),            I386OP(xor_rm8_r8),        true },\n\t{ 0x31,     OP_I386,                    I386OP(xor_rm16_r16),          I386OP(xor_rm32_r32),      true },\n\t{ 0x32,     OP_I386,                    I386OP(xor_r8_rm8),            I386OP(xor_r8_rm8),        false},\n\t{ 0x33,     OP_I386,                    I386OP(xor_r16_rm16),          I386OP(xor_r32_rm32),      false},\n\t{ 0x34,     OP_I386,                    I386OP(xor_al_i8),             I386OP(xor_al_i8),         false},\n\t{ 0x35,     OP_I386,                    I386OP(xor_ax_i16),            I386OP(xor_eax_i32),       false},\n\t{ 0x36,     OP_I386,                    I386OP(segment_SS),            I386OP(segment_SS),        false},\n\t{ 0x37,     OP_I386,                    I386OP(aaa),                   I386OP(aaa),               false},\n\t{ 0x38,     OP_I386,                    I386OP(cmp_rm8_r8),            I386OP(cmp_rm8_r8),        false},\n\t{ 0x39,     OP_I386,                    I386OP(cmp_rm16_r16),          I386OP(cmp_rm32_r32),      false},\n\t{ 0x3A,     OP_I386,                    I386OP(cmp_r8_rm8),            I386OP(cmp_r8_rm8),        false},\n\t{ 0x3B,     OP_I386,                    I386OP(cmp_r16_rm16),          I386OP(cmp_r32_rm32),      false},\n\t{ 0x3C,     OP_I386,                    I386OP(cmp_al_i8),             I386OP(cmp_al_i8),         false},\n\t{ 0x3D,     OP_I386,                    I386OP(cmp_ax_i16),            I386OP(cmp_eax_i32),       false},\n\t{ 0x3E,     OP_I386,                    I386OP(segment_DS),            I386OP(segment_DS),        false},\n\t{ 0x3F,     OP_I386,                    I386OP(aas),                   I386OP(aas),               false},\n\t{ 0x40,     OP_I386,                    I386OP(inc_ax),                I386OP(inc_eax),           false},\n\t{ 0x41,     OP_I386,                    I386OP(inc_cx),                I386OP(inc_ecx),           false},\n\t{ 0x42,     OP_I386,                    I386OP(inc_dx),                I386OP(inc_edx),           false},\n\t{ 0x43,     OP_I386,                    I386OP(inc_bx),                I386OP(inc_ebx),           false},\n\t{ 0x44,     OP_I386,                    I386OP(inc_sp),                I386OP(inc_esp),           false},\n\t{ 0x45,     OP_I386,                    I386OP(inc_bp),                I386OP(inc_ebp),           false},\n\t{ 0x46,     OP_I386,                    I386OP(inc_si),                I386OP(inc_esi),           false},\n\t{ 0x47,     OP_I386,                    I386OP(inc_di),                I386OP(inc_edi),           false},\n\t{ 0x48,     OP_I386,                    I386OP(dec_ax),                I386OP(dec_eax),           false},\n\t{ 0x49,     OP_I386,                    I386OP(dec_cx),                I386OP(dec_ecx),           false},\n\t{ 0x4A,     OP_I386,                    I386OP(dec_dx),                I386OP(dec_edx),           false},\n\t{ 0x4B,     OP_I386,                    I386OP(dec_bx),                I386OP(dec_ebx),           false},\n\t{ 0x4C,     OP_I386,                    I386OP(dec_sp),                I386OP(dec_esp),           false},\n\t{ 0x4D,     OP_I386,                    I386OP(dec_bp),                I386OP(dec_ebp),           false},\n\t{ 0x4E,     OP_I386,                    I386OP(dec_si),                I386OP(dec_esi),           false},\n\t{ 0x4F,     OP_I386,                    I386OP(dec_di),                I386OP(dec_edi),           false},\n\t{ 0x50,     OP_I386,                    I386OP(push_ax),               I386OP(push_eax),          false},\n\t{ 0x51,     OP_I386,                    I386OP(push_cx),               I386OP(push_ecx),          false},\n\t{ 0x52,     OP_I386,                    I386OP(push_dx),               I386OP(push_edx),          false},\n\t{ 0x53,     OP_I386,                    I386OP(push_bx),               I386OP(push_ebx),          false},\n\t{ 0x54,     OP_I386,                    I386OP(push_sp),               I386OP(push_esp),          false},\n\t{ 0x55,     OP_I386,                    I386OP(push_bp),               I386OP(push_ebp),          false},\n\t{ 0x56,     OP_I386,                    I386OP(push_si),               I386OP(push_esi),          false},\n\t{ 0x57,     OP_I386,                    I386OP(push_di),               I386OP(push_edi),          false},\n\t{ 0x58,     OP_I386,                    I386OP(pop_ax),                I386OP(pop_eax),           false},\n\t{ 0x59,     OP_I386,                    I386OP(pop_cx),                I386OP(pop_ecx),           false},\n\t{ 0x5A,     OP_I386,                    I386OP(pop_dx),                I386OP(pop_edx),           false},\n\t{ 0x5B,     OP_I386,                    I386OP(pop_bx),                I386OP(pop_ebx),           false},\n\t{ 0x5C,     OP_I386,                    I386OP(pop_sp),                I386OP(pop_esp),           false},\n\t{ 0x5D,     OP_I386,                    I386OP(pop_bp),                I386OP(pop_ebp),           false},\n\t{ 0x5E,     OP_I386,                    I386OP(pop_si),                I386OP(pop_esi),           false},\n\t{ 0x5F,     OP_I386,                    I386OP(pop_di),                I386OP(pop_edi),           false},\n\t{ 0x60,     OP_I386,                    I386OP(pusha),                 I386OP(pushad),            false},\n\t{ 0x61,     OP_I386,                    I386OP(popa),                  I386OP(popad),             false},\n\t{ 0x62,     OP_I386,                    I386OP(bound_r16_m16_m16),     I386OP(bound_r32_m32_m32), false},\n\t{ 0x63,     OP_I386,                    I386OP(arpl),                  I386OP(arpl),              false},\n\t{ 0x64,     OP_I386,                    I386OP(segment_FS),            I386OP(segment_FS),        false},\n\t{ 0x65,     OP_I386,                    I386OP(segment_GS),            I386OP(segment_GS),        false},\n\t{ 0x66,     OP_I386,                    I386OP(operand_size),          I386OP(operand_size),      false},\n\t{ 0x67,     OP_I386,                    I386OP(address_size),          I386OP(address_size),      false},\n\t{ 0x68,     OP_I386,                    I386OP(push_i16),              I386OP(push_i32),          false},\n\t{ 0x69,     OP_I386,                    I386OP(imul_r16_rm16_i16),     I386OP(imul_r32_rm32_i32), false},\n\t{ 0x6A,     OP_I386,                    I386OP(push_i8),               I386OP(push_i8),           false},\n\t{ 0x6B,     OP_I386,                    I386OP(imul_r16_rm16_i8),      I386OP(imul_r32_rm32_i8),  false},\n\t{ 0x6C,     OP_I386,                    I386OP(insb),                  I386OP(insb),              false},\n\t{ 0x6D,     OP_I386,                    I386OP(insw),                  I386OP(insd),              false},\n\t{ 0x6E,     OP_I386,                    I386OP(outsb),                 I386OP(outsb),             false},\n\t{ 0x6F,     OP_I386,                    I386OP(outsw),                 I386OP(outsd),             false},\n\t{ 0x70,     OP_I386,                    I386OP(jo_rel8),               I386OP(jo_rel8),           false},\n\t{ 0x71,     OP_I386,                    I386OP(jno_rel8),              I386OP(jno_rel8),          false},\n\t{ 0x72,     OP_I386,                    I386OP(jc_rel8),               I386OP(jc_rel8),           false},\n\t{ 0x73,     OP_I386,                    I386OP(jnc_rel8),              I386OP(jnc_rel8),          false},\n\t{ 0x74,     OP_I386,                    I386OP(jz_rel8),               I386OP(jz_rel8),           false},\n\t{ 0x75,     OP_I386,                    I386OP(jnz_rel8),              I386OP(jnz_rel8),          false},\n\t{ 0x76,     OP_I386,                    I386OP(jbe_rel8),              I386OP(jbe_rel8),          false},\n\t{ 0x77,     OP_I386,                    I386OP(ja_rel8),               I386OP(ja_rel8),           false},\n\t{ 0x78,     OP_I386,                    I386OP(js_rel8),               I386OP(js_rel8),           false},\n\t{ 0x79,     OP_I386,                    I386OP(jns_rel8),              I386OP(jns_rel8),          false},\n\t{ 0x7A,     OP_I386,                    I386OP(jp_rel8),               I386OP(jp_rel8),           false},\n\t{ 0x7B,     OP_I386,                    I386OP(jnp_rel8),              I386OP(jnp_rel8),          false},\n\t{ 0x7C,     OP_I386,                    I386OP(jl_rel8),               I386OP(jl_rel8),           false},\n\t{ 0x7D,     OP_I386,                    I386OP(jge_rel8),              I386OP(jge_rel8),          false},\n\t{ 0x7E,     OP_I386,                    I386OP(jle_rel8),              I386OP(jle_rel8),          false},\n\t{ 0x7F,     OP_I386,                    I386OP(jg_rel8),               I386OP(jg_rel8),           false},\n\t{ 0x80,     OP_I386,                    I386OP(group80_8),             I386OP(group80_8),         true },\n\t{ 0x81,     OP_I386,                    I386OP(group81_16),            I386OP(group81_32),        true },\n\t{ 0x82,     OP_I386,                    I386OP(group80_8),             I386OP(group80_8),         true },\n\t{ 0x83,     OP_I386,                    I386OP(group83_16),            I386OP(group83_32),        true },\n\t{ 0x84,     OP_I386,                    I386OP(test_rm8_r8),           I386OP(test_rm8_r8),       false},\n\t{ 0x85,     OP_I386,                    I386OP(test_rm16_r16),         I386OP(test_rm32_r32),     false},\n\t{ 0x86,     OP_I386,                    I386OP(xchg_r8_rm8),           I386OP(xchg_r8_rm8),       true },\n\t{ 0x87,     OP_I386,                    I386OP(xchg_r16_rm16),         I386OP(xchg_r32_rm32),     true },\n\t{ 0x88,     OP_I386,                    I386OP(mov_rm8_r8),            I386OP(mov_rm8_r8),        false},\n\t{ 0x89,     OP_I386,                    I386OP(mov_rm16_r16),          I386OP(mov_rm32_r32),      false},\n\t{ 0x8A,     OP_I386,                    I386OP(mov_r8_rm8),            I386OP(mov_r8_rm8),        false},\n\t{ 0x8B,     OP_I386,                    I386OP(mov_r16_rm16),          I386OP(mov_r32_rm32),      false},\n\t{ 0x8C,     OP_I386,                    I386OP(mov_rm16_sreg),         I386OP(mov_rm16_sreg),     false},\n\t{ 0x8D,     OP_I386,                    I386OP(lea16),                 I386OP(lea32),             false},\n\t{ 0x8E,     OP_I386,                    I386OP(mov_sreg_rm16),         I386OP(mov_sreg_rm16),     false},\n\t{ 0x8F,     OP_I386,                    I386OP(pop_rm16),              I386OP(pop_rm32),          false},\n\t{ 0x90,     OP_I386,                    I386OP(nop),                   I386OP(nop),               false},\n\t{ 0x91,     OP_I386,                    I386OP(xchg_ax_cx),            I386OP(xchg_eax_ecx),      false},\n\t{ 0x92,     OP_I386,                    I386OP(xchg_ax_dx),            I386OP(xchg_eax_edx),      false},\n\t{ 0x93,     OP_I386,                    I386OP(xchg_ax_bx),            I386OP(xchg_eax_ebx),      false},\n\t{ 0x94,     OP_I386,                    I386OP(xchg_ax_sp),            I386OP(xchg_eax_esp),      false},\n\t{ 0x95,     OP_I386,                    I386OP(xchg_ax_bp),            I386OP(xchg_eax_ebp),      false},\n\t{ 0x96,     OP_I386,                    I386OP(xchg_ax_si),            I386OP(xchg_eax_esi),      false},\n\t{ 0x97,     OP_I386,                    I386OP(xchg_ax_di),            I386OP(xchg_eax_edi),      false},\n\t{ 0x98,     OP_I386,                    I386OP(cbw),                   I386OP(cwde),              false},\n\t{ 0x99,     OP_I386,                    I386OP(cwd),                   I386OP(cdq),               false},\n\t{ 0x9A,     OP_I386,                    I386OP(call_abs16),            I386OP(call_abs32),        false},\n\t{ 0x9B,     OP_I386,                    I386OP(wait),                  I386OP(wait),              false},\n\t{ 0x9C,     OP_I386,                    I386OP(pushf),                 I386OP(pushfd),            false},\n\t{ 0x9D,     OP_I386,                    I386OP(popf),                  I386OP(popfd),             false},\n\t{ 0x9E,     OP_I386,                    I386OP(sahf),                  I386OP(sahf),              false},\n\t{ 0x9F,     OP_I386,                    I386OP(lahf),                  I386OP(lahf),              false},\n\t{ 0xA0,     OP_I386,                    I386OP(mov_al_m8),             I386OP(mov_al_m8),         false},\n\t{ 0xA1,     OP_I386,                    I386OP(mov_ax_m16),            I386OP(mov_eax_m32),       false},\n\t{ 0xA2,     OP_I386,                    I386OP(mov_m8_al),             I386OP(mov_m8_al),         false},\n\t{ 0xA3,     OP_I386,                    I386OP(mov_m16_ax),            I386OP(mov_m32_eax),       false},\n\t{ 0xA4,     OP_I386,                    I386OP(movsb),                 I386OP(movsb),             false},\n\t{ 0xA5,     OP_I386,                    I386OP(movsw),                 I386OP(movsd),             false},\n\t{ 0xA6,     OP_I386,                    I386OP(cmpsb),                 I386OP(cmpsb),             false},\n\t{ 0xA7,     OP_I386,                    I386OP(cmpsw),                 I386OP(cmpsd),             false},\n\t{ 0xA8,     OP_I386,                    I386OP(test_al_i8),            I386OP(test_al_i8),        false},\n\t{ 0xA9,     OP_I386,                    I386OP(test_ax_i16),           I386OP(test_eax_i32),      false},\n\t{ 0xAA,     OP_I386,                    I386OP(stosb),                 I386OP(stosb),             false},\n\t{ 0xAB,     OP_I386,                    I386OP(stosw),                 I386OP(stosd),             false},\n\t{ 0xAC,     OP_I386,                    I386OP(lodsb),                 I386OP(lodsb),             false},\n\t{ 0xAD,     OP_I386,                    I386OP(lodsw),                 I386OP(lodsd),             false},\n\t{ 0xAE,     OP_I386,                    I386OP(scasb),                 I386OP(scasb),             false},\n\t{ 0xAF,     OP_I386,                    I386OP(scasw),                 I386OP(scasd),             false},\n\t{ 0xB0,     OP_I386,                    I386OP(mov_al_i8),             I386OP(mov_al_i8),         false},\n\t{ 0xB1,     OP_I386,                    I386OP(mov_cl_i8),             I386OP(mov_cl_i8),         false},\n\t{ 0xB2,     OP_I386,                    I386OP(mov_dl_i8),             I386OP(mov_dl_i8),         false},\n\t{ 0xB3,     OP_I386,                    I386OP(mov_bl_i8),             I386OP(mov_bl_i8),         false},\n\t{ 0xB4,     OP_I386,                    I386OP(mov_ah_i8),             I386OP(mov_ah_i8),         false},\n\t{ 0xB5,     OP_I386,                    I386OP(mov_ch_i8),             I386OP(mov_ch_i8),         false},\n\t{ 0xB6,     OP_I386,                    I386OP(mov_dh_i8),             I386OP(mov_dh_i8),         false},\n\t{ 0xB7,     OP_I386,                    I386OP(mov_bh_i8),             I386OP(mov_bh_i8),         false},\n\t{ 0xB8,     OP_I386,                    I386OP(mov_ax_i16),            I386OP(mov_eax_i32),       false},\n\t{ 0xB9,     OP_I386,                    I386OP(mov_cx_i16),            I386OP(mov_ecx_i32),       false},\n\t{ 0xBA,     OP_I386,                    I386OP(mov_dx_i16),            I386OP(mov_edx_i32),       false},\n\t{ 0xBB,     OP_I386,                    I386OP(mov_bx_i16),            I386OP(mov_ebx_i32),       false},\n\t{ 0xBC,     OP_I386,                    I386OP(mov_sp_i16),            I386OP(mov_esp_i32),       false},\n\t{ 0xBD,     OP_I386,                    I386OP(mov_bp_i16),            I386OP(mov_ebp_i32),       false},\n\t{ 0xBE,     OP_I386,                    I386OP(mov_si_i16),            I386OP(mov_esi_i32),       false},\n\t{ 0xBF,     OP_I386,                    I386OP(mov_di_i16),            I386OP(mov_edi_i32),       false},\n\t{ 0xC0,     OP_I386,                    I386OP(groupC0_8),             I386OP(groupC0_8),         false},\n\t{ 0xC1,     OP_I386,                    I386OP(groupC1_16),            I386OP(groupC1_32),        false},\n\t{ 0xC2,     OP_I386,                    I386OP(ret_near16_i16),        I386OP(ret_near32_i16),    false},\n\t{ 0xC3,     OP_I386,                    I386OP(ret_near16),            I386OP(ret_near32),        false},\n\t{ 0xC4,     OP_I386,                    I386OP(les16),                 I386OP(les32),             false},\n\t{ 0xC5,     OP_I386,                    I386OP(lds16),                 I386OP(lds32),             false},\n\t{ 0xC6,     OP_I386,                    I386OP(mov_rm8_i8),            I386OP(mov_rm8_i8),        false},\n\t{ 0xC7,     OP_I386,                    I386OP(mov_rm16_i16),          I386OP(mov_rm32_i32),      false},\n\t{ 0xC8,     OP_I386,                    I386OP(enter16),               I386OP(enter32),           false},\n\t{ 0xC9,     OP_I386,                    I386OP(leave16),               I386OP(leave32),           false},\n\t{ 0xCA,     OP_I386,                    I386OP(retf_i16),              I386OP(retf_i32),          false},\n\t{ 0xCB,     OP_I386,                    I386OP(retf16),                I386OP(retf32),            false},\n\t{ 0xCC,     OP_I386,                    I386OP(int3),                  I386OP(int3),              false},\n\t{ 0xCD,     OP_I386,                    I386OP(int),                   I386OP(int),               false},\n\t{ 0xCE,     OP_I386,                    I386OP(into),                  I386OP(into),              false},\n\t{ 0xCF,     OP_I386,                    I386OP(iret16),                I386OP(iret32),            false},\n\t{ 0xD0,     OP_I386,                    I386OP(groupD0_8),             I386OP(groupD0_8),         false},\n\t{ 0xD1,     OP_I386,                    I386OP(groupD1_16),            I386OP(groupD1_32),        false},\n\t{ 0xD2,     OP_I386,                    I386OP(groupD2_8),             I386OP(groupD2_8),         false},\n\t{ 0xD3,     OP_I386,                    I386OP(groupD3_16),            I386OP(groupD3_32),        false},\n\t{ 0xD4,     OP_I386,                    I386OP(aam),                   I386OP(aam),               false},\n\t{ 0xD5,     OP_I386,                    I386OP(aad),                   I386OP(aad),               false},\n\t{ 0xD6,     OP_I386,                    I386OP(setalc),                I386OP(setalc),            false},\n\t{ 0xD7,     OP_I386,                    I386OP(xlat),                  I386OP(xlat),              false},\n\t{ 0xD8,     OP_I386,                    I386OP(escape),                I386OP(escape),            false},\n\t{ 0xD9,     OP_I386,                    I386OP(escape),                I386OP(escape),            false},\n\t{ 0xDA,     OP_I386,                    I386OP(escape),                I386OP(escape),            false},\n\t{ 0xDB,     OP_I386,                    I386OP(escape),                I386OP(escape),            false},\n\t{ 0xDC,     OP_I386,                    I386OP(escape),                I386OP(escape),            false},\n\t{ 0xDD,     OP_I386,                    I386OP(escape),                I386OP(escape),            false},\n\t{ 0xDE,     OP_I386,                    I386OP(escape),                I386OP(escape),            false},\n\t{ 0xDF,     OP_I386,                    I386OP(escape),                I386OP(escape),            false},\n\t{ 0xD8,     OP_FPU,                     I386OP(x87_group_d8),          I386OP(x87_group_d8),      false},\n\t{ 0xD9,     OP_FPU,                     I386OP(x87_group_d9),          I386OP(x87_group_d9),      false},\n\t{ 0xDA,     OP_FPU,                     I386OP(x87_group_da),          I386OP(x87_group_da),      false},\n\t{ 0xDB,     OP_FPU,                     I386OP(x87_group_db),          I386OP(x87_group_db),      false},\n\t{ 0xDC,     OP_FPU,                     I386OP(x87_group_dc),          I386OP(x87_group_dc),      false},\n\t{ 0xDD,     OP_FPU,                     I386OP(x87_group_dd),          I386OP(x87_group_dd),      false},\n\t{ 0xDE,     OP_FPU,                     I386OP(x87_group_de),          I386OP(x87_group_de),      false},\n\t{ 0xDF,     OP_FPU,                     I386OP(x87_group_df),          I386OP(x87_group_df),      false},\n\t{ 0xE0,     OP_I386,                    I386OP(loopne16),              I386OP(loopne32),          false},\n\t{ 0xE1,     OP_I386,                    I386OP(loopz16),               I386OP(loopz32),           false},\n\t{ 0xE2,     OP_I386,                    I386OP(loop16),                I386OP(loop32),            false},\n\t{ 0xE3,     OP_I386,                    I386OP(jcxz16),                I386OP(jcxz32),            false},\n\t{ 0xE4,     OP_I386,                    I386OP(in_al_i8),              I386OP(in_al_i8),          false},\n\t{ 0xE5,     OP_I386,                    I386OP(in_ax_i8),              I386OP(in_eax_i8),         false},\n\t{ 0xE6,     OP_I386,                    I386OP(out_al_i8),             I386OP(out_al_i8),         false},\n\t{ 0xE7,     OP_I386,                    I386OP(out_ax_i8),             I386OP(out_eax_i8),        false},\n\t{ 0xE8,     OP_I386,                    I386OP(call_rel16),            I386OP(call_rel32),        false},\n\t{ 0xE9,     OP_I386,                    I386OP(jmp_rel16),             I386OP(jmp_rel32),         false},\n\t{ 0xEA,     OP_I386,                    I386OP(jmp_abs16),             I386OP(jmp_abs32),         false},\n\t{ 0xEB,     OP_I386,                    I386OP(jmp_rel8),              I386OP(jmp_rel8),          false},\n\t{ 0xEC,     OP_I386,                    I386OP(in_al_dx),              I386OP(in_al_dx),          false},\n\t{ 0xED,     OP_I386,                    I386OP(in_ax_dx),              I386OP(in_eax_dx),         false},\n\t{ 0xEE,     OP_I386,                    I386OP(out_al_dx),             I386OP(out_al_dx),         false},\n\t{ 0xEF,     OP_I386,                    I386OP(out_ax_dx),             I386OP(out_eax_dx),        false},\n\t{ 0xF0,     OP_I386,                    I386OP(lock),                  I386OP(lock),              false},\n\t{ 0xF1,     OP_I386,                    I386OP(invalid),               I386OP(invalid),           false},\n\t{ 0xF2,     OP_I386,                    I386OP(repne),                 I386OP(repne),             false},\n\t{ 0xF3,     OP_I386,                    I386OP(rep),                   I386OP(rep),               false},\n\t{ 0xF4,     OP_I386,                    I386OP(hlt),                   I386OP(hlt),               false},\n\t{ 0xF5,     OP_I386,                    I386OP(cmc),                   I386OP(cmc),               false},\n\t{ 0xF6,     OP_I386,                    I386OP(groupF6_8),             I386OP(groupF6_8),         true },\n\t{ 0xF7,     OP_I386,                    I386OP(groupF7_16),            I386OP(groupF7_32),        true },\n\t{ 0xF8,     OP_I386,                    I386OP(clc),                   I386OP(clc),               false},\n\t{ 0xF9,     OP_I386,                    I386OP(stc),                   I386OP(stc),               false},\n\t{ 0xFA,     OP_I386,                    I386OP(cli),                   I386OP(cli),               false},\n\t{ 0xFB,     OP_I386,                    I386OP(sti),                   I386OP(sti),               false},\n\t{ 0xFC,     OP_I386,                    I386OP(cld),                   I386OP(cld),               false},\n\t{ 0xFD,     OP_I386,                    I386OP(std),                   I386OP(std),               false},\n\t{ 0xFE,     OP_I386,                    I386OP(groupFE_8),             I386OP(groupFE_8),         true },\n\t{ 0xFF,     OP_I386,                    I386OP(groupFF_16),            I386OP(groupFF_32),        true },\n\t/* 0F ?? */\n\t{ 0x00,     OP_2BYTE|OP_I386,           I386OP(group0F00_16),          I386OP(group0F00_32),      false},\n\t{ 0x01,     OP_2BYTE|OP_I386,           I386OP(group0F01_16),          I386OP(group0F01_32),      false},\n\t{ 0x01,     OP_2BYTE|OP_I486,           I486OP(group0F01_16),          I486OP(group0F01_32),      false},\n\t{ 0x02,     OP_2BYTE|OP_I386,           I386OP(lar_r16_rm16),          I386OP(lar_r32_rm32),      false},\n\t{ 0x03,     OP_2BYTE|OP_I386,           I386OP(lsl_r16_rm16),          I386OP(lsl_r32_rm32),      false},\n\t{ 0x06,     OP_2BYTE|OP_I386,           I386OP(clts),                  I386OP(clts),              false},\n\t{ 0x07,     OP_2BYTE|OP_I386,           I386OP(loadall),               I386OP(loadall),           false},\n\t{ 0x08,     OP_2BYTE|OP_I486,           I486OP(invd),                  I486OP(invd),              false},\n\t{ 0x09,     OP_2BYTE|OP_I486,           I486OP(wbinvd),                I486OP(wbinvd),            false},\n\t{ 0x0B,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(ud2),                PENTIUMOP(ud2),            false},\n\t{ 0x10,     OP_2BYTE|OP_SSE,            SSEOP(movups_r128_rm128),      SSEOP(movups_r128_rm128),  false},\n\t{ 0x11,     OP_2BYTE|OP_SSE,            SSEOP(movups_rm128_r128),      SSEOP(movups_rm128_r128),  false},\n\t{ 0x12,     OP_2BYTE|OP_SSE,            SSEOP(movlps_r128_m64),        SSEOP(movlps_r128_m64),    false},\n\t{ 0x13,     OP_2BYTE|OP_SSE,            SSEOP(movlps_m64_r128),        SSEOP(movlps_m64_r128),    false},\n\t{ 0x14,     OP_2BYTE|OP_SSE,            SSEOP(unpcklps_r128_rm128),    SSEOP(unpcklps_r128_rm128),false},\n\t{ 0x15,     OP_2BYTE|OP_SSE,            SSEOP(unpckhps_r128_rm128),    SSEOP(unpckhps_r128_rm128),false},\n\t{ 0x16,     OP_2BYTE|OP_SSE,            SSEOP(movhps_r128_m64),        SSEOP(movhps_r128_m64),    false},\n\t{ 0x17,     OP_2BYTE|OP_SSE,            SSEOP(movhps_m64_r128),        SSEOP(movhps_m64_r128),    false},\n\t{ 0x18,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(prefetch_m8),        PENTIUMOP(prefetch_m8),    false},\n\t{ 0x20,     OP_2BYTE|OP_I386,           I386OP(mov_r32_cr),            I386OP(mov_r32_cr),        false},\n\t{ 0x21,     OP_2BYTE|OP_I386,           I386OP(mov_r32_dr),            I386OP(mov_r32_dr),        false},\n\t{ 0x22,     OP_2BYTE|OP_I386,           I386OP(mov_cr_r32),            I386OP(mov_cr_r32),        false},\n\t{ 0x22,     OP_2BYTE|OP_I486,           I486OP(mov_cr_r32),            I486OP(mov_cr_r32),        false},\n\t{ 0x23,     OP_2BYTE|OP_I386,           I386OP(mov_dr_r32),            I386OP(mov_dr_r32),        false},\n\t{ 0x24,     OP_2BYTE|OP_I386,           I386OP(mov_r32_tr),            I386OP(mov_r32_tr),        false},\n\t{ 0x26,     OP_2BYTE|OP_I386,           I386OP(mov_tr_r32),            I386OP(mov_tr_r32),        false},\n\t{ 0x28,     OP_2BYTE|OP_SSE,            SSEOP(movaps_r128_rm128),      SSEOP(movaps_r128_rm128),  false},\n\t{ 0x29,     OP_2BYTE|OP_SSE,            SSEOP(movaps_rm128_r128),      SSEOP(movaps_rm128_r128),  false},\n\t{ 0x2a,     OP_2BYTE|OP_SSE,            SSEOP(cvtpi2ps_r128_rm64),     SSEOP(cvtpi2ps_r128_rm64), false},\n\t{ 0x2b,     OP_2BYTE|OP_SSE,            SSEOP(movntps_m128_r128),      SSEOP(movntps_m128_r128),  false},\n\t{ 0x2c,     OP_2BYTE|OP_SSE,            SSEOP(cvttps2pi_r64_r128m64),  SSEOP(cvttps2pi_r64_r128m64),false},\n\t{ 0x2d,     OP_2BYTE|OP_SSE,            SSEOP(cvtps2pi_r64_r128m64),   SSEOP(cvtps2pi_r64_r128m64),false},\n\t{ 0x2e,     OP_2BYTE|OP_SSE,            SSEOP(ucomiss_r128_r128m32),   SSEOP(ucomiss_r128_r128m32),false},\n\t{ 0x2f,     OP_2BYTE|OP_SSE,            SSEOP(comiss_r128_r128m32),    SSEOP(comiss_r128_r128m32),false},\n\t{ 0x30,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(wrmsr),              PENTIUMOP(wrmsr),          false},\n\t{ 0x31,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(rdtsc),              PENTIUMOP(rdtsc),          false},\n\t{ 0x32,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(rdmsr),              PENTIUMOP(rdmsr),          false},\n\t{ 0x40,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovo_r16_rm16),     PENTIUMOP(cmovo_r32_rm32), false},\n\t{ 0x41,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovno_r16_rm16),    PENTIUMOP(cmovno_r32_rm32),false},\n\t{ 0x42,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovb_r16_rm16),     PENTIUMOP(cmovb_r32_rm32), false},\n\t{ 0x43,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovae_r16_rm16),    PENTIUMOP(cmovae_r32_rm32),false},\n\t{ 0x44,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmove_r16_rm16),     PENTIUMOP(cmove_r32_rm32), false},\n\t{ 0x45,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovne_r16_rm16),    PENTIUMOP(cmovne_r32_rm32),false},\n\t{ 0x46,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovbe_r16_rm16),    PENTIUMOP(cmovbe_r32_rm32),false},\n\t{ 0x47,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmova_r16_rm16),     PENTIUMOP(cmova_r32_rm32), false},\n\t{ 0x48,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovs_r16_rm16),     PENTIUMOP(cmovs_r32_rm32), false},\n\t{ 0x49,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovns_r16_rm16),    PENTIUMOP(cmovns_r32_rm32),false},\n\t{ 0x4a,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovp_r16_rm16),     PENTIUMOP(cmovp_r32_rm32), false},\n\t{ 0x4b,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovnp_r16_rm16),    PENTIUMOP(cmovnp_r32_rm32),false},\n\t{ 0x4c,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovl_r16_rm16),     PENTIUMOP(cmovl_r32_rm32), false},\n\t{ 0x4d,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovge_r16_rm16),    PENTIUMOP(cmovge_r32_rm32),false},\n\t{ 0x4e,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovle_r16_rm16),    PENTIUMOP(cmovle_r32_rm32),false},\n\t{ 0x4f,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmovg_r16_rm16),     PENTIUMOP(cmovg_r32_rm32), false},\n\t{ 0x50,     OP_2BYTE|OP_SSE,            SSEOP(movmskps_r16_r128),      SSEOP(movmskps_r32_r128),  false},\n\t{ 0x51,     OP_2BYTE|OP_SSE,            SSEOP(sqrtps_r128_rm128),      SSEOP(sqrtps_r128_rm128),  false},\n\t{ 0x52,     OP_2BYTE|OP_SSE,            SSEOP(rsqrtps_r128_rm128),     SSEOP(rsqrtps_r128_rm128), false},\n\t{ 0x53,     OP_2BYTE|OP_SSE,            SSEOP(rcpps_r128_rm128),       SSEOP(rcpps_r128_rm128),   false},\n\t{ 0x54,     OP_2BYTE|OP_SSE,            SSEOP(andps_r128_rm128),       SSEOP(andps_r128_rm128),   false},\n\t{ 0x55,     OP_2BYTE|OP_SSE,            SSEOP(andnps_r128_rm128),      SSEOP(andnps_r128_rm128),  false},\n\t{ 0x56,     OP_2BYTE|OP_SSE,            SSEOP(orps_r128_rm128),        SSEOP(orps_r128_rm128),    false},\n\t{ 0x57,     OP_2BYTE|OP_SSE,            SSEOP(xorps),                  SSEOP(xorps),              false},\n\t{ 0x58,     OP_2BYTE|OP_SSE,            SSEOP(addps),                  SSEOP(addps),              false},\n\t{ 0x59,     OP_2BYTE|OP_SSE,            SSEOP(mulps),                  SSEOP(mulps),              false},\n\t{ 0x5a,     OP_2BYTE|OP_SSE,            SSEOP(cvtps2pd_r128_r128m64),  SSEOP(cvtps2pd_r128_r128m64),false},\n\t{ 0x5b,     OP_2BYTE|OP_SSE,            SSEOP(cvtdq2ps_r128_rm128),    SSEOP(cvtdq2ps_r128_rm128),false},\n\t{ 0x5c,     OP_2BYTE|OP_SSE,            SSEOP(subps),                  SSEOP(subps),              false},\n\t{ 0x5d,     OP_2BYTE|OP_SSE,            SSEOP(minps),                  SSEOP(minps),              false},\n\t{ 0x5e,     OP_2BYTE|OP_SSE,            SSEOP(divps),                  SSEOP(divps),              false},\n\t{ 0x5f,     OP_2BYTE|OP_SSE,            SSEOP(maxps),                  SSEOP(maxps),              false},\n\t{ 0x60,     OP_2BYTE|OP_MMX,            MMXOP(punpcklbw_r64_r64m32),   MMXOP(punpcklbw_r64_r64m32),false},\n\t{ 0x61,     OP_2BYTE|OP_MMX,            MMXOP(punpcklwd_r64_r64m32),   MMXOP(punpcklwd_r64_r64m32),false},\n\t{ 0x62,     OP_2BYTE|OP_MMX,            MMXOP(punpckldq_r64_r64m32),   MMXOP(punpckldq_r64_r64m32),false},\n\t{ 0x63,     OP_2BYTE|OP_MMX,            MMXOP(packsswb_r64_rm64),      MMXOP(packsswb_r64_rm64),  false},\n\t{ 0x64,     OP_2BYTE|OP_MMX,            MMXOP(pcmpgtb_r64_rm64),       MMXOP(pcmpgtb_r64_rm64),   false},\n\t{ 0x65,     OP_2BYTE|OP_MMX,            MMXOP(pcmpgtw_r64_rm64),       MMXOP(pcmpgtw_r64_rm64),   false},\n\t{ 0x66,     OP_2BYTE|OP_MMX,            MMXOP(pcmpgtd_r64_rm64),       MMXOP(pcmpgtd_r64_rm64),   false},\n\t{ 0x67,     OP_2BYTE|OP_MMX,            MMXOP(packuswb_r64_rm64),      MMXOP(packuswb_r64_rm64),  false},\n\t{ 0x68,     OP_2BYTE|OP_MMX,            MMXOP(punpckhbw_r64_rm64),     MMXOP(punpckhbw_r64_rm64), false},\n\t{ 0x69,     OP_2BYTE|OP_MMX,            MMXOP(punpckhwd_r64_rm64),     MMXOP(punpckhwd_r64_rm64), false},\n\t{ 0x6a,     OP_2BYTE|OP_MMX,            MMXOP(punpckhdq_r64_rm64),     MMXOP(punpckhdq_r64_rm64), false},\n\t{ 0x6b,     OP_2BYTE|OP_MMX,            MMXOP(packssdw_r64_rm64),      MMXOP(packssdw_r64_rm64),  false},\n\t{ 0x6e,     OP_2BYTE|OP_MMX,            MMXOP(movd_r64_rm32),          MMXOP(movd_r64_rm32),      false},\n\t{ 0x6f,     OP_2BYTE|OP_MMX,            MMXOP(movq_r64_rm64),          MMXOP(movq_r64_rm64),      false},\n\t{ 0x70,     OP_2BYTE|OP_MMX,            MMXOP(pshufw_r64_rm64_i8),     MMXOP(pshufw_r64_rm64_i8), false},\n\t{ 0x71,     OP_2BYTE|OP_MMX,            MMXOP(group_0f71),             MMXOP(group_0f71),         false},\n\t{ 0x72,     OP_2BYTE|OP_MMX,            MMXOP(group_0f72),             MMXOP(group_0f72),         false},\n\t{ 0x73,     OP_2BYTE|OP_MMX,            MMXOP(group_0f73),             MMXOP(group_0f73),         false},\n\t{ 0x74,     OP_2BYTE|OP_CYRIX,          I386OP(cyrix_unknown),         I386OP(cyrix_unknown),     false},\n\t{ 0x74,     OP_2BYTE|OP_MMX,            MMXOP(pcmpeqb_r64_rm64),       MMXOP(pcmpeqb_r64_rm64),   false},\n\t{ 0x75,     OP_2BYTE|OP_MMX,            MMXOP(pcmpeqw_r64_rm64),       MMXOP(pcmpeqw_r64_rm64),   false},\n\t{ 0x76,     OP_2BYTE|OP_MMX,            MMXOP(pcmpeqd_r64_rm64),       MMXOP(pcmpeqd_r64_rm64),   false},\n\t{ 0x77,     OP_2BYTE|OP_MMX,            MMXOP(emms),                   MMXOP(emms),               false},\n\t{ 0x7e,     OP_2BYTE|OP_MMX,            MMXOP(movd_rm32_r64),          MMXOP(movd_rm32_r64),      false},\n\t{ 0x7f,     OP_2BYTE|OP_MMX,            MMXOP(movq_rm64_r64),          MMXOP(movq_rm64_r64),      false},\n\t{ 0x80,     OP_2BYTE|OP_I386,           I386OP(jo_rel16),              I386OP(jo_rel32),          false},\n\t{ 0x81,     OP_2BYTE|OP_I386,           I386OP(jno_rel16),             I386OP(jno_rel32),         false},\n\t{ 0x82,     OP_2BYTE|OP_I386,           I386OP(jc_rel16),              I386OP(jc_rel32),          false},\n\t{ 0x83,     OP_2BYTE|OP_I386,           I386OP(jnc_rel16),             I386OP(jnc_rel32),         false},\n\t{ 0x84,     OP_2BYTE|OP_I386,           I386OP(jz_rel16),              I386OP(jz_rel32),          false},\n\t{ 0x85,     OP_2BYTE|OP_I386,           I386OP(jnz_rel16),             I386OP(jnz_rel32),         false},\n\t{ 0x86,     OP_2BYTE|OP_I386,           I386OP(jbe_rel16),             I386OP(jbe_rel32),         false},\n\t{ 0x87,     OP_2BYTE|OP_I386,           I386OP(ja_rel16),              I386OP(ja_rel32),          false},\n\t{ 0x88,     OP_2BYTE|OP_I386,           I386OP(js_rel16),              I386OP(js_rel32),          false},\n\t{ 0x89,     OP_2BYTE|OP_I386,           I386OP(jns_rel16),             I386OP(jns_rel32),         false},\n\t{ 0x8A,     OP_2BYTE|OP_I386,           I386OP(jp_rel16),              I386OP(jp_rel32),          false},\n\t{ 0x8B,     OP_2BYTE|OP_I386,           I386OP(jnp_rel16),             I386OP(jnp_rel32),         false},\n\t{ 0x8C,     OP_2BYTE|OP_I386,           I386OP(jl_rel16),              I386OP(jl_rel32),          false},\n\t{ 0x8D,     OP_2BYTE|OP_I386,           I386OP(jge_rel16),             I386OP(jge_rel32),         false},\n\t{ 0x8E,     OP_2BYTE|OP_I386,           I386OP(jle_rel16),             I386OP(jle_rel32),         false},\n\t{ 0x8F,     OP_2BYTE|OP_I386,           I386OP(jg_rel16),              I386OP(jg_rel32),          false},\n\t{ 0x90,     OP_2BYTE|OP_I386,           I386OP(seto_rm8),              I386OP(seto_rm8),          false},\n\t{ 0x91,     OP_2BYTE|OP_I386,           I386OP(setno_rm8),             I386OP(setno_rm8),         false},\n\t{ 0x92,     OP_2BYTE|OP_I386,           I386OP(setc_rm8),              I386OP(setc_rm8),          false},\n\t{ 0x93,     OP_2BYTE|OP_I386,           I386OP(setnc_rm8),             I386OP(setnc_rm8),         false},\n\t{ 0x94,     OP_2BYTE|OP_I386,           I386OP(setz_rm8),              I386OP(setz_rm8),          false},\n\t{ 0x95,     OP_2BYTE|OP_I386,           I386OP(setnz_rm8),             I386OP(setnz_rm8),         false},\n\t{ 0x96,     OP_2BYTE|OP_I386,           I386OP(setbe_rm8),             I386OP(setbe_rm8),         false},\n\t{ 0x97,     OP_2BYTE|OP_I386,           I386OP(seta_rm8),              I386OP(seta_rm8),          false},\n\t{ 0x98,     OP_2BYTE|OP_I386,           I386OP(sets_rm8),              I386OP(sets_rm8),          false},\n\t{ 0x99,     OP_2BYTE|OP_I386,           I386OP(setns_rm8),             I386OP(setns_rm8),         false},\n\t{ 0x9A,     OP_2BYTE|OP_I386,           I386OP(setp_rm8),              I386OP(setp_rm8),          false},\n\t{ 0x9B,     OP_2BYTE|OP_I386,           I386OP(setnp_rm8),             I386OP(setnp_rm8),         false},\n\t{ 0x9C,     OP_2BYTE|OP_I386,           I386OP(setl_rm8),              I386OP(setl_rm8),          false},\n\t{ 0x9D,     OP_2BYTE|OP_I386,           I386OP(setge_rm8),             I386OP(setge_rm8),         false},\n\t{ 0x9E,     OP_2BYTE|OP_I386,           I386OP(setle_rm8),             I386OP(setle_rm8),         false},\n\t{ 0x9F,     OP_2BYTE|OP_I386,           I386OP(setg_rm8),              I386OP(setg_rm8),          false},\n\t{ 0xA0,     OP_2BYTE|OP_I386,           I386OP(push_fs16),             I386OP(push_fs32),         false},\n\t{ 0xA1,     OP_2BYTE|OP_I386,           I386OP(pop_fs16),              I386OP(pop_fs32),          false},\n\t{ 0xA2,     OP_2BYTE|OP_I486,           I486OP(cpuid),                 I486OP(cpuid),             false},\n\t{ 0xA3,     OP_2BYTE|OP_I386,           I386OP(bt_rm16_r16),           I386OP(bt_rm32_r32),       false},\n\t{ 0xA4,     OP_2BYTE|OP_I386,           I386OP(shld16_i8),             I386OP(shld32_i8),         false},\n\t{ 0xA5,     OP_2BYTE|OP_I386,           I386OP(shld16_cl),             I386OP(shld32_cl),         false},\n\t{ 0xA8,     OP_2BYTE|OP_I386,           I386OP(push_gs16),             I386OP(push_gs32),         false},\n\t{ 0xA9,     OP_2BYTE|OP_I386,           I386OP(pop_gs16),              I386OP(pop_gs32),          false},\n\t{ 0xAA,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(rsm),                PENTIUMOP(rsm),            false},\n\t{ 0xAB,     OP_2BYTE|OP_I386,           I386OP(bts_rm16_r16),          I386OP(bts_rm32_r32),      true },\n\t{ 0xAC,     OP_2BYTE|OP_I386,           I386OP(shrd16_i8),             I386OP(shrd32_i8),         false},\n\t{ 0xAD,     OP_2BYTE|OP_I386,           I386OP(shrd16_cl),             I386OP(shrd32_cl),         false},\n\t{ 0xAE,     OP_2BYTE|OP_SSE,            SSEOP(sse_group0fae),          SSEOP(sse_group0fae),      false},\n\t{ 0xAF,     OP_2BYTE|OP_I386,           I386OP(imul_r16_rm16),         I386OP(imul_r32_rm32),     false},\n\t{ 0xB0,     OP_2BYTE|OP_I486,           I486OP(cmpxchg_rm8_r8),        I486OP(cmpxchg_rm8_r8),    true },\n\t{ 0xB1,     OP_2BYTE|OP_I486,           I486OP(cmpxchg_rm16_r16),      I486OP(cmpxchg_rm32_r32),  true },\n\t{ 0xB2,     OP_2BYTE|OP_I386,           I386OP(lss16),                 I386OP(lss32),             false},\n\t{ 0xB3,     OP_2BYTE|OP_I386,           I386OP(btr_rm16_r16),          I386OP(btr_rm32_r32),      true },\n\t{ 0xB4,     OP_2BYTE|OP_I386,           I386OP(lfs16),                 I386OP(lfs32),             false},\n\t{ 0xB5,     OP_2BYTE|OP_I386,           I386OP(lgs16),                 I386OP(lgs32),             false},\n\t{ 0xB6,     OP_2BYTE|OP_I386,           I386OP(movzx_r16_rm8),         I386OP(movzx_r32_rm8),     false},\n\t{ 0xB7,     OP_2BYTE|OP_I386,           I386OP(invalid),               I386OP(movzx_r32_rm16),    false},\n\t{ 0xBA,     OP_2BYTE|OP_I386,           I386OP(group0FBA_16),          I386OP(group0FBA_32),      true },\n\t{ 0xBB,     OP_2BYTE|OP_I386,           I386OP(btc_rm16_r16),          I386OP(btc_rm32_r32),      true },\n\t{ 0xBC,     OP_2BYTE|OP_I386,           I386OP(bsf_r16_rm16),          I386OP(bsf_r32_rm32),      false},\n\t{ 0xBD,     OP_2BYTE|OP_I386,           I386OP(bsr_r16_rm16),          I386OP(bsr_r32_rm32),      false},\n\t{ 0xBE,     OP_2BYTE|OP_I386,           I386OP(movsx_r16_rm8),         I386OP(movsx_r32_rm8),     false},\n\t{ 0xBF,     OP_2BYTE|OP_I386,           I386OP(invalid),               I386OP(movsx_r32_rm16),    false},\n\t{ 0xC0,     OP_2BYTE|OP_I486,           I486OP(xadd_rm8_r8),           I486OP(xadd_rm8_r8),       true },\n\t{ 0xC1,     OP_2BYTE|OP_I486,           I486OP(xadd_rm16_r16),         I486OP(xadd_rm32_r32),     true },\n\t{ 0xC2,     OP_2BYTE|OP_SSE,            SSEOP(cmpps_r128_rm128_i8),    SSEOP(cmpps_r128_rm128_i8),false},\n\t{ 0xC3,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(movnti_m16_r16),     PENTIUMOP(movnti_m32_r32), false},\n\t{ 0xC4,     OP_2BYTE|OP_SSE,            SSEOP(pinsrw_r64_r16m16_i8),   SSEOP(pinsrw_r64_r32m16_i8),false},\n\t{ 0xC5,     OP_2BYTE|OP_SSE,            SSEOP(pextrw_r16_r64_i8),      SSEOP(pextrw_r32_r64_i8),  false},\n\t{ 0xC6,     OP_2BYTE|OP_SSE,            SSEOP(shufps),                 SSEOP(shufps),             false},\n\t{ 0xC7,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(cmpxchg8b_m64),      PENTIUMOP(cmpxchg8b_m64),  true },\n\t{ 0xC8,     OP_2BYTE|OP_I486,           I486OP(bswap_eax),             I486OP(bswap_eax),         false},\n\t{ 0xC9,     OP_2BYTE|OP_I486,           I486OP(bswap_ecx),             I486OP(bswap_ecx),         false},\n\t{ 0xCA,     OP_2BYTE|OP_I486,           I486OP(bswap_edx),             I486OP(bswap_edx),         false},\n\t{ 0xCB,     OP_2BYTE|OP_I486,           I486OP(bswap_ebx),             I486OP(bswap_ebx),         false},\n\t{ 0xCC,     OP_2BYTE|OP_I486,           I486OP(bswap_esp),             I486OP(bswap_esp),         false},\n\t{ 0xCD,     OP_2BYTE|OP_I486,           I486OP(bswap_ebp),             I486OP(bswap_ebp),         false},\n\t{ 0xCE,     OP_2BYTE|OP_I486,           I486OP(bswap_esi),             I486OP(bswap_esi),         false},\n\t{ 0xCF,     OP_2BYTE|OP_I486,           I486OP(bswap_edi),             I486OP(bswap_edi),         false},\n\t{ 0xD1,     OP_2BYTE|OP_MMX,            MMXOP(psrlw_r64_rm64),         MMXOP(psrlw_r64_rm64),     false},\n\t{ 0xD2,     OP_2BYTE|OP_MMX,            MMXOP(psrld_r64_rm64),         MMXOP(psrld_r64_rm64),     false},\n\t{ 0xD3,     OP_2BYTE|OP_MMX,            MMXOP(psrlq_r64_rm64),         MMXOP(psrlq_r64_rm64),     false},\n\t{ 0xD4,     OP_2BYTE|OP_MMX,            MMXOP(paddq_r64_rm64),         MMXOP(paddq_r64_rm64),     false},\n\t{ 0xD5,     OP_2BYTE|OP_MMX,            MMXOP(pmullw_r64_rm64),        MMXOP(pmullw_r64_rm64),    false},\n\t{ 0xD7,     OP_2BYTE|OP_SSE,            SSEOP(pmovmskb_r16_r64),       SSEOP(pmovmskb_r32_r64),   false},\n\t{ 0xD8,     OP_2BYTE|OP_MMX,            MMXOP(psubusb_r64_rm64),       MMXOP(psubusb_r64_rm64),   false},\n\t{ 0xD9,     OP_2BYTE|OP_MMX,            MMXOP(psubusw_r64_rm64),       MMXOP(psubusw_r64_rm64),   false},\n\t{ 0xDA,     OP_2BYTE|OP_SSE,            SSEOP(pminub_r64_rm64),        SSEOP(pminub_r64_rm64),    false},\n\t{ 0xDB,     OP_2BYTE|OP_MMX,            MMXOP(pand_r64_rm64),          MMXOP(pand_r64_rm64),      false},\n\t{ 0xDC,     OP_2BYTE|OP_MMX,            MMXOP(paddusb_r64_rm64),       MMXOP(paddusb_r64_rm64),   false},\n\t{ 0xDD,     OP_2BYTE|OP_MMX,            MMXOP(paddusw_r64_rm64),       MMXOP(paddusw_r64_rm64),   false},\n\t{ 0xDE,     OP_2BYTE|OP_SSE,            SSEOP(pmaxub_r64_rm64),        SSEOP(pmaxub_r64_rm64),    false},\n\t{ 0xDF,     OP_2BYTE|OP_MMX,            MMXOP(pandn_r64_rm64),         MMXOP(pandn_r64_rm64),     false},\n\t{ 0xE0,     OP_2BYTE|OP_SSE,            SSEOP(pavgb_r64_rm64),         SSEOP(pavgb_r64_rm64),     false},\n\t{ 0xE1,     OP_2BYTE|OP_MMX,            MMXOP(psraw_r64_rm64),         MMXOP(psraw_r64_rm64),     false},\n\t{ 0xE2,     OP_2BYTE|OP_MMX,            MMXOP(psrad_r64_rm64),         MMXOP(psrad_r64_rm64),     false},\n\t{ 0xE3,     OP_2BYTE|OP_SSE,            SSEOP(pavgw_r64_rm64),         SSEOP(pavgw_r64_rm64),     false},\n\t{ 0xE4,     OP_2BYTE|OP_SSE,            SSEOP(pmulhuw_r64_rm64),       SSEOP(pmulhuw_r64_rm64),   false},\n\t{ 0xE5,     OP_2BYTE|OP_MMX,            MMXOP(pmulhw_r64_rm64),        MMXOP(pmulhw_r64_rm64),    false},\n\t{ 0xE7,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(movntq_m64_r64),     PENTIUMOP(movntq_m64_r64), false},\n\t{ 0xE8,     OP_2BYTE|OP_MMX,            MMXOP(psubsb_r64_rm64),        MMXOP(psubsb_r64_rm64),    false},\n\t{ 0xE9,     OP_2BYTE|OP_MMX,            MMXOP(psubsw_r64_rm64),        MMXOP(psubsw_r64_rm64),    false},\n\t{ 0xEA,     OP_2BYTE|OP_SSE,            SSEOP(pminsw_r64_rm64),        SSEOP(pminsw_r64_rm64),    false},\n\t{ 0xEB,     OP_2BYTE|OP_MMX,            MMXOP(por_r64_rm64),           MMXOP(por_r64_rm64),       false},\n\t{ 0xEC,     OP_2BYTE|OP_MMX,            MMXOP(paddsb_r64_rm64),        MMXOP(paddsb_r64_rm64),    false},\n\t{ 0xED,     OP_2BYTE|OP_MMX,            MMXOP(paddsw_r64_rm64),        MMXOP(paddsw_r64_rm64),    false},\n\t{ 0xEE,     OP_2BYTE|OP_SSE,            SSEOP(pmaxsw_r64_rm64),        SSEOP(pmaxsw_r64_rm64),    false},\n\t{ 0xEF,     OP_2BYTE|OP_MMX,            MMXOP(pxor_r64_rm64),          MMXOP(pxor_r64_rm64),      false},\n\t{ 0xF1,     OP_2BYTE|OP_MMX,            MMXOP(psllw_r64_rm64),         MMXOP(psllw_r64_rm64),     false},\n\t{ 0xF2,     OP_2BYTE|OP_MMX,            MMXOP(pslld_r64_rm64),         MMXOP(pslld_r64_rm64),     false},\n\t{ 0xF3,     OP_2BYTE|OP_MMX,            MMXOP(psllq_r64_rm64),         MMXOP(psllq_r64_rm64),     false},\n\t{ 0xF4,     OP_2BYTE|OP_SSE,            SSEOP(pmuludq_r64_rm64),       SSEOP(pmuludq_r64_rm64),   false},\n\t{ 0xF5,     OP_2BYTE|OP_MMX,            MMXOP(pmaddwd_r64_rm64),       MMXOP(pmaddwd_r64_rm64),   false},\n\t{ 0xF6,     OP_2BYTE|OP_SSE,            SSEOP(psadbw_r64_rm64),        SSEOP(psadbw_r64_rm64),    false},\n\t{ 0xf7,     OP_2BYTE|OP_PENTIUM,        PENTIUMOP(maskmovq_r64_r64),   PENTIUMOP(maskmovq_r64_r64),false},\n\t{ 0xF8,     OP_2BYTE|OP_MMX,            MMXOP(psubb_r64_rm64),         MMXOP(psubb_r64_rm64),     false},\n\t{ 0xF9,     OP_2BYTE|OP_MMX,            MMXOP(psubw_r64_rm64),         MMXOP(psubw_r64_rm64),     false},\n\t{ 0xFA,     OP_2BYTE|OP_MMX,            MMXOP(psubd_r64_rm64),         MMXOP(psubd_r64_rm64),     false},\n\t{ 0xFB,     OP_2BYTE|OP_SSE,            SSEOP(psubq_r64_rm64),         SSEOP(psubq_r64_rm64),     false},\n\t{ 0xFC,     OP_2BYTE|OP_MMX,            MMXOP(paddb_r64_rm64),         MMXOP(paddb_r64_rm64),     false},\n\t{ 0xFD,     OP_2BYTE|OP_MMX,            MMXOP(paddw_r64_rm64),         MMXOP(paddw_r64_rm64),     false},\n\t{ 0xFE,     OP_2BYTE|OP_MMX,            MMXOP(paddd_r64_rm64),         MMXOP(paddd_r64_rm64),     false},\n\t/* F3 0F ?? */\n\t{ 0x10,     OP_3BYTEF3|OP_SSE,          SSEOP(movss_r128_rm128),       SSEOP(movss_r128_rm128),   false},\n\t{ 0x11,     OP_3BYTEF3|OP_SSE,          SSEOP(movss_rm128_r128),       SSEOP(movss_rm128_r128),   false},\n\t{ 0x12,     OP_3BYTEF3|OP_SSE,          SSEOP(movsldup_r128_rm128),    SSEOP(movsldup_r128_rm128),false},\n\t{ 0x16,     OP_3BYTEF3|OP_SSE,          SSEOP(movshdup_r128_rm128),    SSEOP(movshdup_r128_rm128),false},\n\t{ 0x2A,     OP_3BYTEF3|OP_SSE,          SSEOP(cvtsi2ss_r128_rm32),     SSEOP(cvtsi2ss_r128_rm32), false},\n\t{ 0x2C,     OP_3BYTEF3|OP_SSE,          SSEOP(cvttss2si_r32_r128m32),  SSEOP(cvttss2si_r32_r128m32),false},\n\t{ 0x2D,     OP_3BYTEF3|OP_SSE,          SSEOP(cvtss2si_r32_r128m32),   SSEOP(cvtss2si_r32_r128m32),false},\n\t{ 0x51,     OP_3BYTEF3|OP_SSE,          SSEOP(sqrtss_r128_r128m32),    SSEOP(sqrtss_r128_r128m32),false},\n\t{ 0x52,     OP_3BYTEF3|OP_SSE,          SSEOP(rsqrtss_r128_r128m32),   SSEOP(rsqrtss_r128_r128m32),false},\n\t{ 0x53,     OP_3BYTEF3|OP_SSE,          SSEOP(rcpss_r128_r128m32),     SSEOP(rcpss_r128_r128m32), false},\n\t{ 0x58,     OP_3BYTEF3|OP_SSE,          SSEOP(addss),                  SSEOP(addss),              false},\n\t{ 0x59,     OP_3BYTEF3|OP_SSE,          SSEOP(mulss),                  SSEOP(mulss),              false},\n\t{ 0x5A,     OP_3BYTEF3|OP_SSE,          SSEOP(cvtss2sd_r128_r128m32),  SSEOP(cvtss2sd_r128_r128m32),false},\n\t{ 0x5B,     OP_3BYTEF3|OP_SSE,          SSEOP(cvttps2dq_r128_rm128),   SSEOP(cvttps2dq_r128_rm128),false},\n\t{ 0x5C,     OP_3BYTEF3|OP_SSE,          SSEOP(subss),                  SSEOP(subss),              false},\n\t{ 0x5D,     OP_3BYTEF3|OP_SSE,          SSEOP(minss_r128_r128m32),     SSEOP(minss_r128_r128m32), false},\n\t{ 0x5E,     OP_3BYTEF3|OP_SSE,          SSEOP(divss),                  SSEOP(divss),              false},\n\t{ 0x5F,     OP_3BYTEF3|OP_SSE,          SSEOP(maxss_r128_r128m32),     SSEOP(maxss_r128_r128m32), false},\n\t{ 0x6F,     OP_3BYTEF3|OP_SSE,          SSEOP(movdqu_r128_rm128),      SSEOP(movdqu_r128_rm128),  false},\n\t{ 0x70,     OP_3BYTEF3|OP_SSE,          SSEOP(pshufhw_r128_rm128_i8),  SSEOP(pshufhw_r128_rm128_i8),false},\n\t{ 0x7E,     OP_3BYTEF3|OP_SSE,          SSEOP(movq_r128_r128m64),      SSEOP(movq_r128_r128m64),  false},\n\t{ 0x7F,     OP_3BYTEF3|OP_SSE,          SSEOP(movdqu_rm128_r128),      SSEOP(movdqu_rm128_r128),  false},\n\t{ 0xB8,     OP_3BYTEF3|OP_PENTIUM,      PENTIUMOP(popcnt_r16_rm16),    PENTIUMOP(popcnt_r32_rm32),false},\n\t{ 0xBC,     OP_3BYTEF3|OP_PENTIUM,      PENTIUMOP(tzcnt_r16_rm16),     PENTIUMOP(tzcnt_r32_rm32),false},\n\t{ 0xC2,     OP_3BYTEF3|OP_SSE,          SSEOP(cmpss_r128_r128m32_i8),  SSEOP(cmpss_r128_r128m32_i8),false},\n\t{ 0xD6,     OP_3BYTEF3|OP_SSE,          SSEOP(movq2dq_r128_r64),       SSEOP(movq2dq_r128_r64),   false},\n\t{ 0xE6,     OP_3BYTEF3|OP_SSE,          SSEOP(cvtdq2pd_r128_r128m64),  SSEOP(cvtdq2pd_r128_r128m64),false}\n};\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386.old/i386priv.h",
    "content": "#pragma once\n\n#ifndef __I386_H__\n#define __I386_H__\n\n//#include \"i386.h\"\n#include \"../../../lib/softfloat/milieu.h\"\n#include \"../../../lib/softfloat/softfloat.h\"\n#include \"../vtlb.h\"\n\n//#define DEBUG_MISSING_OPCODE\n\n#define I386OP(XX)      i386_##XX\n#define I486OP(XX)      i486_##XX\n#define PENTIUMOP(XX)   pentium_##XX\n#define MMXOP(XX)       mmx_##XX\n#define SSEOP(XX)       sse_##XX\n\nextern int i386_dasm_one(char *buffer, UINT32 pc, const UINT8 *oprom, int mode);\n\nenum SREGS { ES, CS, SS, DS, FS, GS };\n\nenum BREGS\n{\n\tAL = NATIVE_ENDIAN_VALUE_LE_BE(0,3),\n\tAH = NATIVE_ENDIAN_VALUE_LE_BE(1,2),\n\tCL = NATIVE_ENDIAN_VALUE_LE_BE(4,7),\n\tCH = NATIVE_ENDIAN_VALUE_LE_BE(5,6),\n\tDL = NATIVE_ENDIAN_VALUE_LE_BE(8,11),\n\tDH = NATIVE_ENDIAN_VALUE_LE_BE(9,10),\n\tBL = NATIVE_ENDIAN_VALUE_LE_BE(12,15),\n\tBH = NATIVE_ENDIAN_VALUE_LE_BE(13,14)\n};\n\nenum WREGS\n{\n\tAX = NATIVE_ENDIAN_VALUE_LE_BE(0,1),\n\tCX = NATIVE_ENDIAN_VALUE_LE_BE(2,3),\n\tDX = NATIVE_ENDIAN_VALUE_LE_BE(4,5),\n\tBX = NATIVE_ENDIAN_VALUE_LE_BE(6,7),\n\tSP = NATIVE_ENDIAN_VALUE_LE_BE(8,9),\n\tBP = NATIVE_ENDIAN_VALUE_LE_BE(10,11),\n\tSI = NATIVE_ENDIAN_VALUE_LE_BE(12,13),\n\tDI = NATIVE_ENDIAN_VALUE_LE_BE(14,15)\n};\n\nenum DREGS { EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI };\n\nenum\n{\n\tI386_PC = 0,\n\n\t/* 8-bit registers */\n\tI386_AL,\n\tI386_AH,\n\tI386_BL,\n\tI386_BH,\n\tI386_CL,\n\tI386_CH,\n\tI386_DL,\n\tI386_DH,\n\n\t/* 16-bit registers */\n\tI386_AX,\n\tI386_BX,\n\tI386_CX,\n\tI386_DX,\n\tI386_BP,\n\tI386_SP,\n\tI386_SI,\n\tI386_DI,\n\tI386_IP,\n\n\t/* 32-bit registers */\n\tI386_EAX,\n\tI386_ECX,\n\tI386_EDX,\n\tI386_EBX,\n\tI386_EBP,\n\tI386_ESP,\n\tI386_ESI,\n\tI386_EDI,\n\tI386_EIP,\n\n\t/* segment registers */\n\tI386_CS,\n\tI386_CS_BASE,\n\tI386_CS_LIMIT,\n\tI386_CS_FLAGS,\n\tI386_SS,\n\tI386_SS_BASE,\n\tI386_SS_LIMIT,\n\tI386_SS_FLAGS,\n\tI386_DS,\n\tI386_DS_BASE,\n\tI386_DS_LIMIT,\n\tI386_DS_FLAGS,\n\tI386_ES,\n\tI386_ES_BASE,\n\tI386_ES_LIMIT,\n\tI386_ES_FLAGS,\n\tI386_FS,\n\tI386_FS_BASE,\n\tI386_FS_LIMIT,\n\tI386_FS_FLAGS,\n\tI386_GS,\n\tI386_GS_BASE,\n\tI386_GS_LIMIT,\n\tI386_GS_FLAGS,\n\n\t/* other */\n\tI386_EFLAGS,\n\n\tI386_CR0,\n\tI386_CR1,\n\tI386_CR2,\n\tI386_CR3,\n\tI386_CR4,\n\n\tI386_DR0,\n\tI386_DR1,\n\tI386_DR2,\n\tI386_DR3,\n\tI386_DR4,\n\tI386_DR5,\n\tI386_DR6,\n\tI386_DR7,\n\n\tI386_TR6,\n\tI386_TR7,\n\n\tI386_GDTR_BASE,\n\tI386_GDTR_LIMIT,\n\tI386_IDTR_BASE,\n\tI386_IDTR_LIMIT,\n\tI386_TR,\n\tI386_TR_BASE,\n\tI386_TR_LIMIT,\n\tI386_TR_FLAGS,\n\tI386_LDTR,\n\tI386_LDTR_BASE,\n\tI386_LDTR_LIMIT,\n\tI386_LDTR_FLAGS,\n\n\tI386_CPL,\n\n\tX87_CTRL,\n\tX87_STATUS,\n\tX87_TAG,\n\tX87_ST0,\n\tX87_ST1,\n\tX87_ST2,\n\tX87_ST3,\n\tX87_ST4,\n\tX87_ST5,\n\tX87_ST6,\n\tX87_ST7,\n\n\tSSE_XMM0,\n\tSSE_XMM1,\n\tSSE_XMM2,\n\tSSE_XMM3,\n\tSSE_XMM4,\n\tSSE_XMM5,\n\tSSE_XMM6,\n\tSSE_XMM7\n};\n\nenum\n{\n\t/* mmx registers aliased to x87 ones */\n\tMMX_MM0=X87_ST0,\n\tMMX_MM1=X87_ST1,\n\tMMX_MM2=X87_ST2,\n\tMMX_MM3=X87_ST3,\n\tMMX_MM4=X87_ST4,\n\tMMX_MM5=X87_ST5,\n\tMMX_MM6=X87_ST6,\n\tMMX_MM7=X87_ST7\n};\n\nenum smram\n{\n\tSMRAM_SMBASE = 0xF8,\n\tSMRAM_SMREV  = 0xFC,\n\tSMRAM_IORSRT = 0x100,\n\tSMRAM_AHALT  = 0x102,\n\tSMRAM_IOEDI  = 0x104,\n\tSMRAM_IOECX  = 0x108,\n\tSMRAM_IOESI  = 0x10C,\n\n\tSMRAM_ES     = 0x1A8,\n\tSMRAM_CS     = 0x1AC,\n\tSMRAM_SS     = 0x1B0,\n\tSMRAM_DS     = 0x1B4,\n\tSMRAM_FS     = 0x1B8,\n\tSMRAM_GS     = 0x1BC,\n\tSMRAM_LDTR   = 0x1C0,\n\tSMRAM_TR     = 0x1C4,\n\tSMRAM_DR7    = 0x1C8,\n\tSMRAM_DR6    = 0x1CC,\n\tSMRAM_EAX    = 0x1D0,\n\tSMRAM_ECX    = 0x1D4,\n\tSMRAM_EDX    = 0x1D8,\n\tSMRAM_EBX    = 0x1DC,\n\tSMRAM_ESP    = 0x1E0,\n\tSMRAM_EBP    = 0x1E4,\n\tSMRAM_ESI    = 0x1E8,\n\tSMRAM_EDI    = 0x1EC,\n\tSMRAM_EIP    = 0x1F0,\n\tSMRAM_EFLAGS = 0x1F4,\n\tSMRAM_CR3    = 0x1F8,\n\tSMRAM_CR0    = 0x1FC,\n};\n\nenum smram_intel_p5\n{\n\tSMRAM_IP5_IOEIP   = 0x110,\n\tSMRAM_IP5_CR4     = 0x128,\n\tSMRAM_IP5_ESLIM   = 0x130,\n\tSMRAM_IP5_ESBASE  = 0x134,\n\tSMRAM_IP5_ESACC   = 0x138,\n\tSMRAM_IP5_CSLIM   = 0x13C,\n\tSMRAM_IP5_CSBASE  = 0x140,\n\tSMRAM_IP5_CSACC   = 0x144,\n\tSMRAM_IP5_SSLIM   = 0x148,\n\tSMRAM_IP5_SSBASE  = 0x14C,\n\tSMRAM_IP5_SSACC   = 0x150,\n\tSMRAM_IP5_DSLIM   = 0x154,\n\tSMRAM_IP5_DSBASE  = 0x158,\n\tSMRAM_IP5_DSACC   = 0x15C,\n\tSMRAM_IP5_FSLIM   = 0x160,\n\tSMRAM_IP5_FSBASE  = 0x164,\n\tSMRAM_IP5_FSACC   = 0x168,\n\tSMRAM_IP5_GSLIM   = 0x16C,\n\tSMRAM_IP5_GSBASE  = 0x170,\n\tSMRAM_IP5_GSACC   = 0x174,\n\tSMRAM_IP5_LDTLIM  = 0x178,\n\tSMRAM_IP5_LDTBASE = 0x17C,\n\tSMRAM_IP5_LDTACC  = 0x180,\n\tSMRAM_IP5_GDTLIM  = 0x184,\n\tSMRAM_IP5_GDTBASE = 0x188,\n\tSMRAM_IP5_GDTACC  = 0x18C,\n\tSMRAM_IP5_IDTLIM  = 0x190,\n\tSMRAM_IP5_IDTBASE = 0x194,\n\tSMRAM_IP5_IDTACC  = 0x198,\n\tSMRAM_IP5_TRLIM   = 0x19C,\n\tSMRAM_IP5_TRBASE  = 0x1A0,\n\tSMRAM_IP5_TRACC   = 0x1A4,\n};\n\n/* Protected mode exceptions */\n#define FAULT_UD 6   // Invalid Opcode\n#define FAULT_NM 7   // Coprocessor not available\n#define FAULT_DF 8   // Double Fault\n#define FAULT_TS 10  // Invalid TSS\n#define FAULT_NP 11  // Segment or Gate not present\n#define FAULT_SS 12  // Stack fault\n#define FAULT_GP 13  // General Protection Fault\n#define FAULT_PF 14  // Page Fault\n#define FAULT_MF 16  // Match (Coprocessor) Fault\n\n/* MXCSR Control and Status Register */\n#define MXCSR_IE  (1<<0)  // Invalid Operation Flag\n#define MXCSR_DE  (1<<1)  // Denormal Flag\n#define MXCSR_ZE  (1<<2)  // Divide-by-Zero Flag\n#define MXCSR_OE  (1<<3)  // Overflow Flag\n#define MXCSR_UE  (1<<4)  // Underflow Flag\n#define MXCSR_PE  (1<<5)  // Precision Flag\n#define MXCSR_DAZ (1<<6)  // Denormals Are Zeros\n#define MXCSR_IM  (1<<7)  // Invalid Operation Mask\n#define MXCSR_DM  (1<<8)  // Denormal Operation Mask\n#define MXCSR_ZM  (1<<9)  // Divide-by-Zero Mask\n#define MXCSR_OM  (1<<10) // Overflow Mask\n#define MXCSR_UM  (1<<11) // Underflow Mask\n#define MXCSR_PM  (1<<12) // Precision Mask\n#define MXCSR_RC  (3<<13) // Rounding Control\n#define MXCSR_FZ  (1<<15) // Flush to Zero\n\nstruct I386_SREG {\n\tUINT16 selector;\n\tUINT16 flags;\n\tUINT32 base;\n\tUINT32 limit;\n\tint d;      // Operand size\n\tbool valid;\n};\n\nstruct I386_CALL_GATE\n{\n\tUINT16 segment;\n\tUINT16 selector;\n\tUINT32 offset;\n\tUINT8 ar;  // access rights\n\tUINT8 dpl;\n\tUINT8 dword_count;\n\tUINT8 present;\n};\n\nstruct I386_SYS_TABLE {\n\tUINT32 base;\n\tUINT16 limit;\n};\n\nstruct I386_SEG_DESC {\n\tUINT16 segment;\n\tUINT16 flags;\n\tUINT32 base;\n\tUINT32 limit;\n};\n\nunion I386_GPR {\n\tUINT32 d[8];\n\tUINT16 w[16];\n\tUINT8 b[32];\n};\n\nunion MMX_REG {\n\tUINT32 d[2];\n\tINT32  i[2];\n\tUINT16 w[4];\n\tINT16  s[4];\n\tUINT8  b[8];\n\tINT8   c[8];\n\tfloat  f[2];\n\tUINT64 q;\n\tINT64  l;\n};\n\nunion XMM_REG {\n\tUINT8  b[16];\n\tUINT16 w[8];\n\tUINT32 d[4];\n\tUINT64 q[2];\n\tINT8   c[16];\n\tINT16  s[8];\n\tINT32  i[4];\n\tINT64  l[2];\n\tfloat  f[4];\n\tdouble  f64[2];\n};\n\n//struct i386_state\n//{\n\tI386_GPR m_reg;\n\tI386_SREG m_sreg[6];\n\tUINT32 m_eip;\n\tUINT32 m_pc;\n\tUINT32 m_prev_eip;\n\tUINT32 m_eflags;\n\tUINT32 m_eflags_mask;\n\tUINT8 m_CF;\n\tUINT8 m_DF;\n\tUINT8 m_SF;\n\tUINT8 m_OF;\n\tUINT8 m_ZF;\n\tUINT8 m_PF;\n\tUINT8 m_AF;\n\tUINT8 m_IF;\n\tUINT8 m_TF;\n\tUINT8 m_IOP1;\n\tUINT8 m_IOP2;\n\tUINT8 m_NT;\n\tUINT8 m_RF;\n\tUINT8 m_VM;\n\tUINT8 m_AC;\n\tUINT8 m_VIF;\n\tUINT8 m_VIP;\n\tUINT8 m_ID;\n\n\tUINT8 m_CPL;  // current privilege level\n\n\tUINT8 m_performed_intersegment_jump;\n\tUINT8 m_delayed_interrupt_enable;\n\n\tUINT32 m_cr[5];       // Control registers\n\tUINT32 m_dr[8];       // Debug registers\n\tUINT32 m_tr[8];       // Test registers\n\n\tI386_SYS_TABLE m_gdtr;    // Global Descriptor Table Register\n\tI386_SYS_TABLE m_idtr;    // Interrupt Descriptor Table Register\n\tI386_SEG_DESC m_task;     // Task register\n\tI386_SEG_DESC m_ldtr;     // Local Descriptor Table Register\n\n\tUINT8 m_ext;  // external interrupt\n\n\tint m_halted;\n\n\tint m_operand_size;\n\tint m_xmm_operand_size;\n\tint m_address_size;\n\tint m_operand_prefix;\n\tint m_address_prefix;\n\n\tint m_segment_prefix;\n\tint m_segment_override;\n\n\tint m_cycles;\n\tint m_base_cycles;\n\tUINT8 m_opcode;\n\n\tUINT8 m_irq_state;\n\tUINT32 m_a20_mask;\n\n\tint m_cpuid_max_input_value_eax;\n\tUINT32 m_cpuid_id0, m_cpuid_id1, m_cpuid_id2;\n\tUINT32 m_cpu_version;\n\tUINT32 m_feature_flags;\n\tUINT64 m_tsc;\n\tUINT64 m_perfctr[2];\n\n\t// FPU\n\tfloatx80 m_x87_reg[8];\n\n\tUINT16 m_x87_cw;\n\tUINT16 m_x87_sw;\n\tUINT16 m_x87_tw;\n\tUINT64 m_x87_data_ptr;\n\tUINT64 m_x87_inst_ptr;\n\tUINT16 m_x87_opcode;\n\n\tvoid (*m_opcode_table_x87_d8[256])(UINT8 modrm);\n\tvoid (*m_opcode_table_x87_d9[256])(UINT8 modrm);\n\tvoid (*m_opcode_table_x87_da[256])(UINT8 modrm);\n\tvoid (*m_opcode_table_x87_db[256])(UINT8 modrm);\n\tvoid (*m_opcode_table_x87_dc[256])(UINT8 modrm);\n\tvoid (*m_opcode_table_x87_dd[256])(UINT8 modrm);\n\tvoid (*m_opcode_table_x87_de[256])(UINT8 modrm);\n\tvoid (*m_opcode_table_x87_df[256])(UINT8 modrm);\n\n\t// SSE\n\tXMM_REG m_sse_reg[8];\n\tUINT32 m_mxcsr;\n\n\tvoid (*m_opcode_table1_16[256])();\n\tvoid (*m_opcode_table1_32[256])();\n\tvoid (*m_opcode_table2_16[256])();\n\tvoid (*m_opcode_table2_32[256])();\n\tvoid (*m_opcode_table366_16[256])();\n\tvoid (*m_opcode_table366_32[256])();\n\tvoid (*m_opcode_table3f2_16[256])();\n\tvoid (*m_opcode_table3f2_32[256])();\n\tvoid (*m_opcode_table3f3_16[256])();\n\tvoid (*m_opcode_table3f3_32[256])();\n\n\tbool m_lock_table[2][256];\n\n\tUINT8 *m_cycle_table_pm;\n\tUINT8 *m_cycle_table_rm;\n\n\tvtlb_state *m_vtlb;\n\n\tbool m_smm;\n\tbool m_smi;\n\tbool m_smi_latched;\n\tbool m_nmi_masked;\n\tbool m_nmi_latched;\n\tUINT32 m_smbase;\n//\tdevcb_resolved_write_line m_smiact;\n\tbool m_lock;\n\n\t// bytes in current opcode, debug only\n#ifdef DEBUG_MISSING_OPCODE\n\tUINT8 m_opcode_bytes[16];\n\tUINT32 m_opcode_pc;\n\tint m_opcode_bytes_length;\n#endif\n//};\n\nextern int i386_parity_table[256];\nstatic int i386_limit_check(int seg, UINT32 offset);\n\n#define FAULT_THROW(fault,error) { throw (UINT64)(fault | (UINT64)error << 32); }\n#define PF_THROW(error) { m_cr[2] = address; FAULT_THROW(FAULT_PF,error); }\n\n#define PROTECTED_MODE      (m_cr[0] & 0x1)\n#define STACK_32BIT         (m_sreg[SS].d)\n#define V8086_MODE          (m_VM)\n#define NESTED_TASK         (m_NT)\n#define WP                  (m_cr[0] & 0x10000)\n\n#define SetOF_Add32(r,s,d)  (m_OF = (((r) ^ (s)) & ((r) ^ (d)) & 0x80000000) ? 1: 0)\n#define SetOF_Add16(r,s,d)  (m_OF = (((r) ^ (s)) & ((r) ^ (d)) & 0x8000) ? 1 : 0)\n#define SetOF_Add8(r,s,d)   (m_OF = (((r) ^ (s)) & ((r) ^ (d)) & 0x80) ? 1 : 0)\n\n#define SetOF_Sub32(r,s,d)  (m_OF = (((d) ^ (s)) & ((d) ^ (r)) & 0x80000000) ? 1 : 0)\n#define SetOF_Sub16(r,s,d)  (m_OF = (((d) ^ (s)) & ((d) ^ (r)) & 0x8000) ? 1 : 0)\n#define SetOF_Sub8(r,s,d)   (m_OF = (((d) ^ (s)) & ((d) ^ (r)) & 0x80) ? 1 : 0)\n\n#define SetCF8(x)           {m_CF = ((x) & 0x100) ? 1 : 0; }\n#define SetCF16(x)          {m_CF = ((x) & 0x10000) ? 1 : 0; }\n#define SetCF32(x)          {m_CF = ((x) & (((UINT64)1) << 32)) ? 1 : 0; }\n\n#define SetSF(x)            (m_SF = (x))\n#define SetZF(x)            (m_ZF = (x))\n#define SetAF(x,y,z)        (m_AF = (((x) ^ ((y) ^ (z))) & 0x10) ? 1 : 0)\n#define SetPF(x)            (m_PF = i386_parity_table[(x) & 0xFF])\n\n#define SetSZPF8(x)         {m_ZF = ((UINT8)(x)==0);  m_SF = ((x)&0x80) ? 1 : 0; m_PF = i386_parity_table[x & 0xFF]; }\n#define SetSZPF16(x)        {m_ZF = ((UINT16)(x)==0);  m_SF = ((x)&0x8000) ? 1 : 0; m_PF = i386_parity_table[x & 0xFF]; }\n#define SetSZPF32(x)        {m_ZF = ((UINT32)(x)==0);  m_SF = ((x)&0x80000000) ? 1 : 0; m_PF = i386_parity_table[x & 0xFF]; }\n\n#define MMX(n)              (*((MMX_REG *)(&m_x87_reg[(n)].low)))\n#define XMM(n)              m_sse_reg[(n)]\n\n/***********************************************************************************/\n\nstruct MODRM_TABLE {\n\tstruct {\n\t\tint b;\n\t\tint w;\n\t\tint d;\n\t} reg;\n\tstruct {\n\t\tint b;\n\t\tint w;\n\t\tint d;\n\t} rm;\n};\n\nextern MODRM_TABLE i386_MODRM_table[256];\n\n#define REG8(x)         (m_reg.b[x])\n#define REG16(x)        (m_reg.w[x])\n#define REG32(x)        (m_reg.d[x])\n\n#define LOAD_REG8(x)    (REG8(i386_MODRM_table[x].reg.b))\n#define LOAD_REG16(x)   (REG16(i386_MODRM_table[x].reg.w))\n#define LOAD_REG32(x)   (REG32(i386_MODRM_table[x].reg.d))\n#define LOAD_RM8(x)     (REG8(i386_MODRM_table[x].rm.b))\n#define LOAD_RM16(x)    (REG16(i386_MODRM_table[x].rm.w))\n#define LOAD_RM32(x)    (REG32(i386_MODRM_table[x].rm.d))\n\n#define STORE_REG8(x, value)    (REG8(i386_MODRM_table[x].reg.b) = value)\n#define STORE_REG16(x, value)   (REG16(i386_MODRM_table[x].reg.w) = value)\n#define STORE_REG32(x, value)   (REG32(i386_MODRM_table[x].reg.d) = value)\n#define STORE_RM8(x, value)     (REG8(i386_MODRM_table[x].rm.b) = value)\n#define STORE_RM16(x, value)    (REG16(i386_MODRM_table[x].rm.w) = value)\n#define STORE_RM32(x, value)    (REG32(i386_MODRM_table[x].rm.d) = value)\n\n#define SWITCH_ENDIAN_32(x) (((((x) << 24) & (0xff << 24)) | (((x) << 8) & (0xff << 16)) | (((x) >> 8) & (0xff << 8)) | (((x) >> 24) & (0xff << 0))))\n\n/***********************************************************************************/\n\nINLINE UINT32 i386_translate(int segment, UINT32 ip, int rwn)\n{\n\t// TODO: segment limit access size, execution permission, handle exception thrown from exception handler\n\tif(PROTECTED_MODE && !V8086_MODE && (rwn != -1))\n\t{\n\t\tif(!(m_sreg[segment].valid))\n\t\t\tFAULT_THROW((segment==SS)?FAULT_SS:FAULT_GP, 0);\n\t\tif(i386_limit_check(segment, ip))\n\t\t\tFAULT_THROW((segment==SS)?FAULT_SS:FAULT_GP, 0);\n\t\tif((rwn == 0) && ((m_sreg[segment].flags & 8) && !(m_sreg[segment].flags & 2)))\n\t\t\tFAULT_THROW(FAULT_GP, 0);\n\t\tif((rwn == 1) && ((m_sreg[segment].flags & 8) || !(m_sreg[segment].flags & 2)))\n\t\t\tFAULT_THROW(FAULT_GP, 0);\n\t}\n\treturn m_sreg[segment].base + ip;\n}\n\n#define VTLB_FLAG_DIRTY 0x100\n\nINLINE vtlb_entry get_permissions(UINT32 pte, int wp)\n{\n\tvtlb_entry ret = VTLB_READ_ALLOWED | ((pte & 4) ? VTLB_USER_READ_ALLOWED : 0);\n\tif(!wp)\n\t\tret |= VTLB_WRITE_ALLOWED;\n\tif(pte & 2)\n\t\tret |= VTLB_WRITE_ALLOWED | ((pte & 4) ? VTLB_USER_WRITE_ALLOWED : 0);\n\treturn ret;\n}\n\nstatic int i386_translate_address(int intention, offs_t *address, vtlb_entry *entry)\n{\n\tUINT32 a = *address;\n\tUINT32 pdbr = m_cr[3] & 0xfffff000;\n\tUINT32 directory = (a >> 22) & 0x3ff;\n\tUINT32 table = (a >> 12) & 0x3ff;\n\tvtlb_entry perm = 0;\n\tint ret = FALSE;\n\tbool user = (intention & TRANSLATE_USER_MASK) ? true : false;\n\tbool write = (intention & TRANSLATE_WRITE) ? true : false;\n\tbool debug = (intention & TRANSLATE_DEBUG_MASK) ? true : false;\n\n\tif(!(m_cr[0] & 0x80000000))\n\t{\n\t\tif(entry)\n\t\t\t*entry = 0x77;\n\t\treturn TRUE;\n\t}\n\n\tUINT32 page_dir = read_dword(pdbr + directory * 4);\n\tif(page_dir & 1)\n\t{\n\t\tif ((page_dir & 0x80) && (m_cr[4] & 0x10))\n\t\t{\n\t\t\ta = (page_dir & 0xffc00000) | (a & 0x003fffff);\n\t\t\tif(debug)\n\t\t\t{\n\t\t\t\t*address = a;\n\t\t\t\treturn TRUE;\n\t\t\t}\n\t\t\tperm = get_permissions(page_dir, WP);\n\t\t\tif(write && (!(perm & VTLB_WRITE_ALLOWED) || (user && !(perm & VTLB_USER_WRITE_ALLOWED))))\n\t\t\t\tret = FALSE;\n\t\t\telse if(user && !(perm & VTLB_USER_READ_ALLOWED))\n\t\t\t\tret = FALSE;\n\t\t\telse\n\t\t\t{\n\t\t\t\tif(write)\n\t\t\t\t\tperm |= VTLB_FLAG_DIRTY;\n\t\t\t\tif(!(page_dir & 0x40) && write)\n\t\t\t\t\twrite_dword(pdbr + directory * 4, page_dir | 0x60);\n\t\t\t\telse if(!(page_dir & 0x20))\n\t\t\t\t\twrite_dword(pdbr + directory * 4, page_dir | 0x20);\n\t\t\t\tret = TRUE;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tUINT32 page_entry = read_dword((page_dir & 0xfffff000) + (table * 4));\n\t\t\tif(!(page_entry & 1))\n\t\t\t\tret = FALSE;\n\t\t\telse\n\t\t\t{\n\t\t\t\ta = (page_entry & 0xfffff000) | (a & 0xfff);\n\t\t\t\tif(debug)\n\t\t\t\t{\n\t\t\t\t\t*address = a;\n\t\t\t\t\treturn TRUE;\n\t\t\t\t}\n\t\t\t\tperm = get_permissions(page_entry, WP);\n\t\t\t\tif(write && (!(perm & VTLB_WRITE_ALLOWED) || (user && !(perm & VTLB_USER_WRITE_ALLOWED))))\n\t\t\t\t\tret = FALSE;\n\t\t\t\telse if(user && !(perm & VTLB_USER_READ_ALLOWED))\n\t\t\t\t\tret = FALSE;\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif(write)\n\t\t\t\t\t\tperm |= VTLB_FLAG_DIRTY;\n\t\t\t\t\tif(!(page_dir & 0x20))\n\t\t\t\t\t\twrite_dword(pdbr + directory * 4, page_dir | 0x20);\n\t\t\t\t\tif(!(page_entry & 0x40) && write)\n\t\t\t\t\t\twrite_dword((page_dir & 0xfffff000) + (table * 4), page_entry | 0x60);\n\t\t\t\t\telse if(!(page_entry & 0x20))\n\t\t\t\t\t\twrite_dword((page_dir & 0xfffff000) + (table * 4), page_entry | 0x20);\n\t\t\t\t\tret = TRUE;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t\tret = FALSE;\n\tif(entry)\n\t\t*entry = perm;\n\tif(ret)\n\t\t*address = a;\n\treturn ret;\n}\n\n//#define TEST_TLB\n\nINLINE int translate_address(int pl, int type, UINT32 *address, UINT32 *error)\n{\n\tif(!(m_cr[0] & 0x80000000)) // Some (very few) old OS's won't work with this\n\t\treturn TRUE;\n\n\tconst vtlb_entry *table = vtlb_table(m_vtlb);\n\tUINT32 index = *address >> 12;\n\tvtlb_entry entry = table[index];\n\tif(type == TRANSLATE_FETCH)\n\t\ttype = TRANSLATE_READ;\n\tif(pl == 3)\n\t\ttype |= TRANSLATE_USER_MASK;\n#ifdef TEST_TLB\n\tUINT32 test_addr = *address;\n#endif\n\n\tif(!(entry & VTLB_FLAG_VALID) || ((type & TRANSLATE_WRITE) && !(entry & VTLB_FLAG_DIRTY)))\n\t{\n\t\tif(!i386_translate_address(type, address, &entry))\n\t\t{\n\t\t\t*error = ((type & TRANSLATE_WRITE) ? 2 : 0) | ((m_CPL == 3) ? 4 : 0);\n\t\t\tif(entry)\n\t\t\t\t*error |= 1;\n\t\t\treturn FALSE;\n\t\t}\n\t\tvtlb_dynload(m_vtlb, index, *address, entry);\n\t\treturn TRUE;\n\t}\n\tif(!(entry & (1 << type)))\n\t{\n\t\t*error = ((type & TRANSLATE_WRITE) ? 2 : 0) | ((m_CPL == 3) ? 4 : 0) | 1;\n\t\treturn FALSE;\n\t}\n\t*address = (entry & 0xfffff000) | (*address & 0xfff);\n#ifdef TEST_TLB\n\tint test_ret = i386_translate_address(type | TRANSLATE_DEBUG_MASK, &test_addr, NULL);\n\tif(!test_ret || (test_addr != *address))\n\t\tlogerror(\"TLB-PTE mismatch! %06X %06X %06x\\n\", *address, test_addr, m_pc);\n#endif\n\treturn TRUE;\n}\n\nINLINE void CHANGE_PC(UINT32 pc)\n{\n\tm_pc = i386_translate(CS, pc, -1 );\n}\n\nINLINE void NEAR_BRANCH(INT32 offs)\n{\n\t/* TODO: limit */\n\tm_eip += offs;\n\tm_pc += offs;\n}\n\nINLINE UINT8 FETCH()\n{\n\tUINT8 value;\n\tUINT32 address = m_pc, error;\n\n\tif(!translate_address(m_CPL,TRANSLATE_FETCH,&address,&error))\n\t\tPF_THROW(error);\n\n\tvalue = read_decrypted_byte(address & m_a20_mask);\n#ifdef DEBUG_MISSING_OPCODE\n\tm_opcode_bytes[m_opcode_bytes_length] = value;\n\tm_opcode_bytes_length = (m_opcode_bytes_length + 1) & 15;\n#endif\n\tm_eip++;\n\tm_pc++;\n\treturn value;\n}\nINLINE UINT16 FETCH16()\n{\n\tUINT16 value;\n\tUINT32 address = m_pc, error;\n\n\tif( address & 0x1 ) {       /* Unaligned read */\n\t\tvalue = (FETCH() << 0);\n\t\tvalue |= (FETCH() << 8);\n\t} else {\n\t\tif(!translate_address(m_CPL,TRANSLATE_FETCH,&address,&error))\n\t\t\tPF_THROW(error);\n\t\taddress &= m_a20_mask;\n\t\tvalue = read_decrypted_word(address);\n\t\tm_eip += 2;\n\t\tm_pc += 2;\n\t}\n\treturn value;\n}\nINLINE UINT32 FETCH32()\n{\n\tUINT32 value;\n\tUINT32 address = m_pc, error;\n\n\tif( m_pc & 0x3 ) {      /* Unaligned read */\n\t\tvalue = (FETCH() << 0);\n\t\tvalue |= (FETCH() << 8);\n\t\tvalue |= (FETCH() << 16);\n\t\tvalue |= (FETCH() << 24);\n\t} else {\n\t\tif(!translate_address(m_CPL,TRANSLATE_FETCH,&address,&error))\n\t\t\tPF_THROW(error);\n\n\t\taddress &= m_a20_mask;\n\t\tvalue = read_decrypted_dword(address);\n\t\tm_eip += 4;\n\t\tm_pc += 4;\n\t}\n\treturn value;\n}\n\nINLINE UINT8 READ8(UINT32 ea)\n{\n\tUINT32 address = ea, error;\n\n\tif(!translate_address(m_CPL,TRANSLATE_READ,&address, &error))\n\t\tPF_THROW(error);\n\n\taddress &= m_a20_mask;\n\treturn read_byte(address);\n}\nINLINE UINT16 READ16(UINT32 ea)\n{\n\tUINT16 value;\n\tUINT32 address = ea, error;\n\n\tif( ea & 0x1 ) {        /* Unaligned read */\n\t\tvalue = (READ8( address+0 ) << 0);\n\t\tvalue |= (READ8( address+1 ) << 8);\n\t} else {\n\t\tif(!translate_address(m_CPL,TRANSLATE_READ,&address,&error))\n\t\t\tPF_THROW(error);\n\n\t\taddress &= m_a20_mask;\n\t\tvalue = read_word( address );\n\t}\n\treturn value;\n}\nINLINE UINT32 READ32(UINT32 ea)\n{\n\tUINT32 value;\n\tUINT32 address = ea, error;\n\n\tif( ea & 0x3 ) {        /* Unaligned read */\n\t\tvalue = (READ8( address+0 ) << 0);\n\t\tvalue |= (READ8( address+1 ) << 8);\n\t\tvalue |= (READ8( address+2 ) << 16),\n\t\tvalue |= (READ8( address+3 ) << 24);\n\t} else {\n\t\tif(!translate_address(m_CPL,TRANSLATE_READ,&address,&error))\n\t\t\tPF_THROW(error);\n\n\t\taddress &= m_a20_mask;\n\t\tvalue = read_dword( address );\n\t}\n\treturn value;\n}\n\nINLINE UINT64 READ64(UINT32 ea)\n{\n\tUINT64 value;\n\tUINT32 address = ea, error;\n\n\tif( ea & 0x7 ) {        /* Unaligned read */\n\t\tvalue = (((UINT64) READ8( address+0 )) << 0);\n\t\tvalue |= (((UINT64) READ8( address+1 )) << 8);\n\t\tvalue |= (((UINT64) READ8( address+2 )) << 16);\n\t\tvalue |= (((UINT64) READ8( address+3 )) << 24);\n\t\tvalue |= (((UINT64) READ8( address+4 )) << 32);\n\t\tvalue |= (((UINT64) READ8( address+5 )) << 40);\n\t\tvalue |= (((UINT64) READ8( address+6 )) << 48);\n\t\tvalue |= (((UINT64) READ8( address+7 )) << 56);\n\t} else {\n\t\tif(!translate_address(m_CPL,TRANSLATE_READ,&address,&error))\n\t\t\tPF_THROW(error);\n\n\t\taddress &= m_a20_mask;\n\t\tvalue = (((UINT64) read_dword( address+0 )) << 0);\n\t\tvalue |= (((UINT64) read_dword( address+4 )) << 32);\n\t}\n\treturn value;\n}\nINLINE UINT8 READ8PL0(UINT32 ea)\n{\n\tUINT32 address = ea, error;\n\n\tif(!translate_address(0,TRANSLATE_READ,&address,&error))\n\t\tPF_THROW(error);\n\n\taddress &= m_a20_mask;\n\treturn read_byte(address);\n}\nINLINE UINT16 READ16PL0(UINT32 ea)\n{\n\tUINT16 value;\n\tUINT32 address = ea, error;\n\n\tif( ea & 0x1 ) {        /* Unaligned read */\n\t\tvalue = (READ8PL0( address+0 ) << 0);\n\t\tvalue |= (READ8PL0( address+1 ) << 8);\n\t} else {\n\t\tif(!translate_address(0,TRANSLATE_READ,&address,&error))\n\t\t\tPF_THROW(error);\n\n\t\taddress &= m_a20_mask;\n\t\tvalue = read_word( address );\n\t}\n\treturn value;\n}\n\nINLINE UINT32 READ32PL0(UINT32 ea)\n{\n\tUINT32 value;\n\tUINT32 address = ea, error;\n\n\tif( ea & 0x3 ) {        /* Unaligned read */\n\t\tvalue = (READ8PL0( address+0 ) << 0);\n\t\tvalue |= (READ8PL0( address+1 ) << 8);\n\t\tvalue |= (READ8PL0( address+2 ) << 16);\n\t\tvalue |= (READ8PL0( address+3 ) << 24);\n\t} else {\n\t\tif(!translate_address(0,TRANSLATE_READ,&address,&error))\n\t\t\tPF_THROW(error);\n\n\t\taddress &= m_a20_mask;\n\t\tvalue = read_dword( address );\n\t}\n\treturn value;\n}\n\nINLINE void WRITE_TEST(UINT32 ea)\n{\n\tUINT32 address = ea, error;\n\tif(!translate_address(m_CPL,TRANSLATE_WRITE,&address,&error))\n\t\tPF_THROW(error);\n}\n\nINLINE void WRITE8(UINT32 ea, UINT8 value)\n{\n\tUINT32 address = ea, error;\n\n\tif(!translate_address(m_CPL,TRANSLATE_WRITE,&address,&error))\n\t\tPF_THROW(error);\n\n\taddress &= m_a20_mask;\n\twrite_byte(address, value);\n}\nINLINE void WRITE16(UINT32 ea, UINT16 value)\n{\n\tUINT32 address = ea, error;\n\n\tif( ea & 0x1 ) {        /* Unaligned write */\n\t\tWRITE8( address+0, value & 0xff );\n\t\tWRITE8( address+1, (value >> 8) & 0xff );\n\t} else {\n\t\tif(!translate_address(m_CPL,TRANSLATE_WRITE,&address,&error))\n\t\t\tPF_THROW(error);\n\n\t\taddress &= m_a20_mask;\n\t\twrite_word(address, value);\n\t}\n}\nINLINE void WRITE32(UINT32 ea, UINT32 value)\n{\n\tUINT32 address = ea, error;\n\n\tif( ea & 0x3 ) {        /* Unaligned write */\n\t\tWRITE8( address+0, value & 0xff );\n\t\tWRITE8( address+1, (value >> 8) & 0xff );\n\t\tWRITE8( address+2, (value >> 16) & 0xff );\n\t\tWRITE8( address+3, (value >> 24) & 0xff );\n\t} else {\n\t\tif(!translate_address(m_CPL,TRANSLATE_WRITE,&address,&error))\n\t\t\tPF_THROW(error);\n\n\t\tea &= m_a20_mask;\n\t\twrite_dword(address, value);\n\t}\n}\n\nINLINE void WRITE64(UINT32 ea, UINT64 value)\n{\n\tUINT32 address = ea, error;\n\n\tif( ea & 0x7 ) {        /* Unaligned write */\n\t\tWRITE8( address+0, value & 0xff );\n\t\tWRITE8( address+1, (value >> 8) & 0xff );\n\t\tWRITE8( address+2, (value >> 16) & 0xff );\n\t\tWRITE8( address+3, (value >> 24) & 0xff );\n\t\tWRITE8( address+4, (value >> 32) & 0xff );\n\t\tWRITE8( address+5, (value >> 40) & 0xff );\n\t\tWRITE8( address+6, (value >> 48) & 0xff );\n\t\tWRITE8( address+7, (value >> 56) & 0xff );\n\t} else {\n\t\tif(!translate_address(m_CPL,TRANSLATE_WRITE,&address,&error))\n\t\t\tPF_THROW(error);\n\n\t\tea &= m_a20_mask;\n\t\twrite_dword(address+0, value & 0xffffffff);\n\t\twrite_dword(address+4, (value >> 32) & 0xffffffff);\n\t}\n}\n\n/***********************************************************************************/\n\nINLINE UINT8 OR8(UINT8 dst, UINT8 src)\n{\n\tUINT8 res = dst | src;\n\tm_CF = m_OF = 0;\n\tSetSZPF8(res);\n\treturn res;\n}\nINLINE UINT16 OR16(UINT16 dst, UINT16 src)\n{\n\tUINT16 res = dst | src;\n\tm_CF = m_OF = 0;\n\tSetSZPF16(res);\n\treturn res;\n}\nINLINE UINT32 OR32(UINT32 dst, UINT32 src)\n{\n\tUINT32 res = dst | src;\n\tm_CF = m_OF = 0;\n\tSetSZPF32(res);\n\treturn res;\n}\n\nINLINE UINT8 AND8(UINT8 dst, UINT8 src)\n{\n\tUINT8 res = dst & src;\n\tm_CF = m_OF = 0;\n\tSetSZPF8(res);\n\treturn res;\n}\nINLINE UINT16 AND16(UINT16 dst, UINT16 src)\n{\n\tUINT16 res = dst & src;\n\tm_CF = m_OF = 0;\n\tSetSZPF16(res);\n\treturn res;\n}\nINLINE UINT32 AND32(UINT32 dst, UINT32 src)\n{\n\tUINT32 res = dst & src;\n\tm_CF = m_OF = 0;\n\tSetSZPF32(res);\n\treturn res;\n}\n\nINLINE UINT8 XOR8(UINT8 dst, UINT8 src)\n{\n\tUINT8 res = dst ^ src;\n\tm_CF = m_OF = 0;\n\tSetSZPF8(res);\n\treturn res;\n}\nINLINE UINT16 XOR16(UINT16 dst, UINT16 src)\n{\n\tUINT16 res = dst ^ src;\n\tm_CF = m_OF = 0;\n\tSetSZPF16(res);\n\treturn res;\n}\nINLINE UINT32 XOR32(UINT32 dst, UINT32 src)\n{\n\tUINT32 res = dst ^ src;\n\tm_CF = m_OF = 0;\n\tSetSZPF32(res);\n\treturn res;\n}\n\n#define SUB8(dst, src) SBB8(dst, src, 0)\nINLINE UINT8 SBB8(UINT8 dst, UINT8 src, UINT8 b)\n{\n\tUINT16 res = (UINT16)dst - (UINT16)src - (UINT8)b;\n\tSetCF8(res);\n\tSetOF_Sub8(res,src,dst);\n\tSetAF(res,src,dst);\n\tSetSZPF8(res);\n\treturn (UINT8)res;\n}\n\n#define SUB16(dst, src) SBB16(dst, src, 0)\nINLINE UINT16 SBB16(UINT16 dst, UINT16 src, UINT16 b)\n{\n\tUINT32 res = (UINT32)dst - (UINT32)src - (UINT32)b;\n\tSetCF16(res);\n\tSetOF_Sub16(res,src,dst);\n\tSetAF(res,src,dst);\n\tSetSZPF16(res);\n\treturn (UINT16)res;\n}\n\n#define SUB32(dst, src) SBB32(dst, src, 0)\nINLINE UINT32 SBB32(UINT32 dst, UINT32 src, UINT32 b)\n{\n\tUINT64 res = (UINT64)dst - (UINT64)src - (UINT64) b;\n\tSetCF32(res);\n\tSetOF_Sub32(res,src,dst);\n\tSetAF(res,src,dst);\n\tSetSZPF32(res);\n\treturn (UINT32)res;\n}\n\n#define ADD8(dst, src) ADC8(dst, src, 0)\nINLINE UINT8 ADC8(UINT8 dst, UINT8 src, UINT8 c)\n{\n\tUINT16 res = (UINT16)dst + (UINT16)src + (UINT16)c;\n\tSetCF8(res);\n\tSetOF_Add8(res,src,dst);\n\tSetAF(res,src,dst);\n\tSetSZPF8(res);\n\treturn (UINT8)res;\n}\n\n#define ADD16(dst, src) ADC16(dst, src, 0)\nINLINE UINT16 ADC16(UINT16 dst, UINT16 src, UINT8 c)\n{\n\tUINT32 res = (UINT32)dst + (UINT32)src + (UINT32)c;\n\tSetCF16(res);\n\tSetOF_Add16(res,src,dst);\n\tSetAF(res,src,dst);\n\tSetSZPF16(res);\n\treturn (UINT16)res;\n}\n\n#define ADD32(dst, src) ADC32(dst, src, 0)\nINLINE UINT32 ADC32(UINT32 dst, UINT32 src, UINT32 c)\n{\n\tUINT64 res = (UINT64)dst + (UINT64)src + (UINT64) c;\n\tSetCF32(res);\n\tSetOF_Add32(res,src,dst);\n\tSetAF(res,src,dst);\n\tSetSZPF32(res);\n\treturn (UINT32)res;\n}\n\nINLINE UINT8 INC8(UINT8 dst)\n{\n\tUINT16 res = (UINT16)dst + 1;\n\tSetOF_Add8(res,1,dst);\n\tSetAF(res,1,dst);\n\tSetSZPF8(res);\n\treturn (UINT8)res;\n}\nINLINE UINT16 INC16(UINT16 dst)\n{\n\tUINT32 res = (UINT32)dst + 1;\n\tSetOF_Add16(res,1,dst);\n\tSetAF(res,1,dst);\n\tSetSZPF16(res);\n\treturn (UINT16)res;\n}\nINLINE UINT32 INC32(UINT32 dst)\n{\n\tUINT64 res = (UINT64)dst + 1;\n\tSetOF_Add32(res,1,dst);\n\tSetAF(res,1,dst);\n\tSetSZPF32(res);\n\treturn (UINT32)res;\n}\n\nINLINE UINT8 DEC8(UINT8 dst)\n{\n\tUINT16 res = (UINT16)dst - 1;\n\tSetOF_Sub8(res,1,dst);\n\tSetAF(res,1,dst);\n\tSetSZPF8(res);\n\treturn (UINT8)res;\n}\nINLINE UINT16 DEC16(UINT16 dst)\n{\n\tUINT32 res = (UINT32)dst - 1;\n\tSetOF_Sub16(res,1,dst);\n\tSetAF(res,1,dst);\n\tSetSZPF16(res);\n\treturn (UINT16)res;\n}\nINLINE UINT32 DEC32(UINT32 dst)\n{\n\tUINT64 res = (UINT64)dst - 1;\n\tSetOF_Sub32(res,1,dst);\n\tSetAF(res,1,dst);\n\tSetSZPF32(res);\n\treturn (UINT32)res;\n}\n\n\n\nINLINE void PUSH16(UINT16 value)\n{\n\tUINT32 ea, new_esp;\n\tif( STACK_32BIT ) {\n\t\tnew_esp = REG32(ESP) - 2;\n\t\tea = i386_translate(SS, new_esp, 1);\n\t\tWRITE16(ea, value );\n\t\tREG32(ESP) = new_esp;\n\t} else {\n\t\tnew_esp = (REG16(SP) - 2) & 0xffff;\n\t\tea = i386_translate(SS, new_esp, 1);\n\t\tWRITE16(ea, value );\n\t\tREG16(SP) = new_esp;\n\t}\n}\nINLINE void PUSH32(UINT32 value)\n{\n\tUINT32 ea, new_esp;\n\tif( STACK_32BIT ) {\n\t\tnew_esp = REG32(ESP) - 4;\n\t\tea = i386_translate(SS, new_esp, 1);\n\t\tWRITE32(ea, value );\n\t\tREG32(ESP) = new_esp;\n\t} else {\n\t\tnew_esp = (REG16(SP) - 4) & 0xffff;\n\t\tea = i386_translate(SS, new_esp, 1);\n\t\tWRITE32(ea, value );\n\t\tREG16(SP) = new_esp;\n\t}\n}\nINLINE void PUSH8(UINT8 value)\n{\n\tif( m_operand_size ) {\n\t\tPUSH32((INT32)(INT8)value);\n\t} else {\n\t\tPUSH16((INT16)(INT8)value);\n\t}\n}\n\nINLINE UINT8 POP8()\n{\n\tUINT8 value;\n\tUINT32 ea, new_esp;\n\tif( STACK_32BIT ) {\n\t\tnew_esp = REG32(ESP) + 1;\n\t\tea = i386_translate(SS, new_esp - 1, 0);\n\t\tvalue = READ8(ea );\n\t\tREG32(ESP) = new_esp;\n\t} else {\n\t\tnew_esp = REG16(SP) + 1;\n\t\tea = i386_translate(SS, (new_esp - 1) & 0xffff, 0);\n\t\tvalue = READ8(ea );\n\t\tREG16(SP) = new_esp;\n\t}\n\treturn value;\n}\nINLINE UINT16 POP16()\n{\n\tUINT16 value;\n\tUINT32 ea, new_esp;\n\tif( STACK_32BIT ) {\n\t\tnew_esp = REG32(ESP) + 2;\n\t\tea = i386_translate(SS, new_esp - 2, 0);\n\t\tvalue = READ16(ea );\n\t\tREG32(ESP) = new_esp;\n\t} else {\n\t\tnew_esp = REG16(SP) + 2;\n\t\tea = i386_translate(SS, (new_esp - 2) & 0xffff, 0);\n\t\tvalue = READ16(ea );\n\t\tREG16(SP) = new_esp;\n\t}\n\treturn value;\n}\nINLINE UINT32 POP32()\n{\n\tUINT32 value;\n\tUINT32 ea, new_esp;\n\tif( STACK_32BIT ) {\n\t\tnew_esp = REG32(ESP) + 4;\n\t\tea = i386_translate(SS, new_esp - 4, 0);\n\t\tvalue = READ32(ea );\n\t\tREG32(ESP) = new_esp;\n\t} else {\n\t\tnew_esp = REG16(SP) + 4;\n\t\tea = i386_translate(SS, (new_esp - 4) & 0xffff, 0);\n\t\tvalue = READ32(ea );\n\t\tREG16(SP) = new_esp;\n\t}\n\treturn value;\n}\n\nINLINE void BUMP_SI(int adjustment)\n{\n\tif ( m_address_size )\n\t\tREG32(ESI) += ((m_DF) ? -adjustment : +adjustment);\n\telse\n\t\tREG16(SI) += ((m_DF) ? -adjustment : +adjustment);\n}\n\nINLINE void BUMP_DI(int adjustment)\n{\n\tif ( m_address_size )\n\t\tREG32(EDI) += ((m_DF) ? -adjustment : +adjustment);\n\telse\n\t\tREG16(DI) += ((m_DF) ? -adjustment : +adjustment);\n}\n\n\n\n/***********************************************************************************\n    I/O ACCESS\n***********************************************************************************/\n\nINLINE void check_ioperm(offs_t port, UINT8 mask)\n{\n\tUINT8 IOPL, map;\n\tUINT16 IOPB;\n\tUINT32 address;\n\n\tif(!PROTECTED_MODE)\n\t\treturn;\n\n\tIOPL = m_IOP1 | (m_IOP2 << 1);\n\tif(!V8086_MODE && (m_CPL <= IOPL))\n\t\treturn;\n\n\tif((m_task.limit < 0x67) || ((m_task.flags & 0xd) != 9))\n\t\tFAULT_THROW(FAULT_GP,0);\n\n\taddress = m_task.base;\n\tIOPB = READ16PL0(address+0x66);\n\tif((IOPB+(port/8)) > m_task.limit)\n\t\tFAULT_THROW(FAULT_GP,0);\n\n\tmap = READ8PL0(address+IOPB+(port/8));\n\tmap >>= (port%8);\n\tif(map & mask)\n\t\tFAULT_THROW(FAULT_GP,0);\n}\n\nINLINE UINT8 READPORT8(offs_t port)\n{\n\tcheck_ioperm(port, 1);\n\treturn read_io_byte(port);\n}\n\nINLINE void WRITEPORT8(offs_t port, UINT8 value)\n{\n\tcheck_ioperm(port, 1);\n\twrite_io_byte(port, value);\n}\n\nINLINE UINT16 READPORT16(offs_t port)\n{\n\tif (port & 1)\n\t{\n\t\tUINT16 value = READPORT8(port);\n\t\tvalue |= (READPORT8(port + 1) << 8);\n\t\treturn value;\n\t}\n\telse\n\t{\n\t\tcheck_ioperm(port, 3);\n\t\treturn read_io_word(port);\n\t}\n}\n\nINLINE void WRITEPORT16(offs_t port, UINT16 value)\n{\n\tif (port & 1)\n\t{\n\t\tWRITEPORT8(port, value & 0xff);\n\t\tWRITEPORT8(port + 1, (value >> 8) & 0xff);\n\t}\n\telse\n\t{\n\t\tcheck_ioperm(port, 3);\n\t\twrite_io_word(port, value);\n\t}\n}\n\nINLINE UINT32 READPORT32(offs_t port)\n{\n\tif (port & 3)\n\t{\n\t\tUINT32 value = READPORT8(port);\n\t\tvalue |= (READPORT8(port + 1) << 8);\n\t\tvalue |= (READPORT8(port + 2) << 16);\n\t\tvalue |= (READPORT8(port + 3) << 24);\n\t\treturn value;\n\t}\n\telse\n\t{\n\t\tcheck_ioperm(port, 0xf);\n\t\treturn read_io_dword(port);\n\t}\n}\n\nINLINE void WRITEPORT32(offs_t port, UINT32 value)\n{\n\tif (port & 3)\n\t{\n\t\tWRITEPORT8(port, value & 0xff);\n\t\tWRITEPORT8(port + 1, (value >> 8) & 0xff);\n\t\tWRITEPORT8(port + 2, (value >> 16) & 0xff);\n\t\tWRITEPORT8(port + 3, (value >> 24) & 0xff);\n\t}\n\telse\n\t{\n\t\tcheck_ioperm(port, 0xf);\n\t\twrite_io_dword(port, value);\n\t}\n}\n\n/***********************************************************************************\n    MSR ACCESS\n***********************************************************************************/\n\n// Pentium MSR handling\nUINT64 pentium_msr_read(UINT32 offset,UINT8 *valid_msr)\n{\n\tswitch(offset)\n\t{\n\t// Machine Check Exception (TODO)\n\tcase 0x00:\n\t\t*valid_msr = 1;\n\t\tpopmessage(\"RDMSR: Reading P5_MC_ADDR\");\n\t\treturn 0;\n\tcase 0x01:\n\t\t*valid_msr = 1;\n\t\tpopmessage(\"RDMSR: Reading P5_MC_TYPE\");\n\t\treturn 0;\n\t// Time Stamp Counter\n\tcase 0x10:\n\t\t*valid_msr = 1;\n\t\tpopmessage(\"RDMSR: Reading TSC\");\n\t\treturn m_tsc;\n\t// Event Counters (TODO)\n\tcase 0x11:  // CESR\n\t\t*valid_msr = 1;\n\t\tpopmessage(\"RDMSR: Reading CESR\");\n\t\treturn 0;\n\tcase 0x12:  // CTR0\n\t\t*valid_msr = 1;\n\t\treturn m_perfctr[0];\n\tcase 0x13:  // CTR1\n\t\t*valid_msr = 1;\n\t\treturn m_perfctr[1];\n\tdefault:\n\t\tif(!(offset & ~0xf)) // 2-f are test registers\n\t\t{\n\t\t\t*valid_msr = 1;\n\t\t\tlogerror(\"RDMSR: Reading test MSR %x\", offset);\n\t\t\treturn 0;\n\t\t}\n\t\tlogerror(\"RDMSR: invalid P5 MSR read %08x at %08x\\n\",offset,m_pc-2);\n\t\t*valid_msr = 0;\n\t\treturn 0;\n\t}\n\treturn -1;\n}\n\nvoid pentium_msr_write(UINT32 offset, UINT64 data, UINT8 *valid_msr)\n{\n\tswitch(offset)\n\t{\n\t// Machine Check Exception (TODO)\n\tcase 0x00:\n\t\tpopmessage(\"WRMSR: Writing P5_MC_ADDR\");\n\t\t*valid_msr = 1;\n\t\tbreak;\n\tcase 0x01:\n\t\tpopmessage(\"WRMSR: Writing P5_MC_TYPE\");\n\t\t*valid_msr = 1;\n\t\tbreak;\n\t// Time Stamp Counter\n\tcase 0x10:\n\t\tm_tsc = data;\n\t\tpopmessage(\"WRMSR: Writing to TSC\");\n\t\t*valid_msr = 1;\n\t\tbreak;\n\t// Event Counters (TODO)\n\tcase 0x11:  // CESR\n\t\tpopmessage(\"WRMSR: Writing to CESR\");\n\t\t*valid_msr = 1;\n\t\tbreak;\n\tcase 0x12:  // CTR0\n\t\tm_perfctr[0] = data;\n\t\t*valid_msr = 1;\n\t\tbreak;\n\tcase 0x13:  // CTR1\n\t\tm_perfctr[1] = data;\n\t\t*valid_msr = 1;\n\t\tbreak;\n\tdefault:\n\t\tif(!(offset & ~0xf)) // 2-f are test registers\n\t\t{\n\t\t\t*valid_msr = 1;\n\t\t\tlogerror(\"WRMSR: Writing test MSR %x\", offset);\n\t\t\tbreak;\n\t\t}\n\t\tlogerror(\"WRMSR: invalid MSR write %08x (%08x%08x) at %08x\\n\",offset,(UINT32)(data >> 32),(UINT32)data,m_pc-2);\n\t\t*valid_msr = 0;\n\t\tbreak;\n\t}\n}\n\n// P6 (Pentium Pro, Pentium II, Pentium III) MSR handling\nUINT64 p6_msr_read(UINT32 offset,UINT8 *valid_msr)\n{\n\tswitch(offset)\n\t{\n\t// Machine Check Exception (TODO)\n\tcase 0x00:\n\t\t*valid_msr = 1;\n\t\tpopmessage(\"RDMSR: Reading P5_MC_ADDR\");\n\t\treturn 0;\n\tcase 0x01:\n\t\t*valid_msr = 1;\n\t\tpopmessage(\"RDMSR: Reading P5_MC_TYPE\");\n\t\treturn 0;\n\t// Time Stamp Counter\n\tcase 0x10:\n\t\t*valid_msr = 1;\n\t\tpopmessage(\"RDMSR: Reading TSC\");\n\t\treturn m_tsc;\n\t// Performance Counters (TODO)\n\tcase 0xc1:  // PerfCtr0\n\t\t*valid_msr = 1;\n\t\treturn m_perfctr[0];\n\tcase 0xc2:  // PerfCtr1\n\t\t*valid_msr = 1;\n\t\treturn m_perfctr[1];\n\tdefault:\n\t\tlogerror(\"RDMSR: unimplemented register called %08x at %08x\\n\",offset,m_pc-2);\n\t\t*valid_msr = 1;\n\t\treturn 0;\n\t}\n\treturn -1;\n}\n\nvoid p6_msr_write(UINT32 offset, UINT64 data, UINT8 *valid_msr)\n{\n\tswitch(offset)\n\t{\n\t// Time Stamp Counter\n\tcase 0x10:\n\t\tm_tsc = data;\n\t\tpopmessage(\"WRMSR: Writing to TSC\");\n\t\t*valid_msr = 1;\n\t\tbreak;\n\t// Performance Counters (TODO)\n\tcase 0xc1:  // PerfCtr0\n\t\tm_perfctr[0] = data;\n\t\t*valid_msr = 1;\n\t\tbreak;\n\tcase 0xc2:  // PerfCtr1\n\t\tm_perfctr[1] = data;\n\t\t*valid_msr = 1;\n\t\tbreak;\n\tdefault:\n\t\tlogerror(\"WRMSR: unimplemented register called %08x (%08x%08x) at %08x\\n\",offset,(UINT32)(data >> 32),(UINT32)data,m_pc-2);\n\t\t*valid_msr = 1;\n\t\tbreak;\n\t}\n}\n\n// PIV (Pentium 4+)\nUINT64 piv_msr_read(UINT32 offset,UINT8 *valid_msr)\n{\n\tswitch(offset)\n\t{\n\tdefault:\n\t\tlogerror(\"RDMSR: unimplemented register called %08x at %08x\\n\",offset,m_pc-2);\n\t\t*valid_msr = 1;\n\t\treturn 0;\n\t}\n\treturn -1;\n}\n\nvoid piv_msr_write(UINT32 offset, UINT64 data, UINT8 *valid_msr)\n{\n\tswitch(offset)\n\t{\n\tdefault:\n\t\tlogerror(\"WRMSR: unimplemented register called %08x (%08x%08x) at %08x\\n\",offset,(UINT32)(data >> 32),(UINT32)data,m_pc-2);\n\t\t*valid_msr = 1;\n\t\tbreak;\n\t}\n}\n\nINLINE UINT64 MSR_READ(UINT32 offset,UINT8 *valid_msr)\n{\n\tUINT64 res;\n\tUINT8 cpu_type = (m_cpu_version >> 8) & 0x0f;\n\n\t*valid_msr = 0;\n\n\tswitch(cpu_type)\n\t{\n\tcase 5:  // Pentium\n\t\tres = pentium_msr_read(offset,valid_msr);\n\t\tbreak;\n\tcase 6:  // Pentium Pro, Pentium II, Pentium III\n\t\tres = p6_msr_read(offset,valid_msr);\n\t\tbreak;\n\tcase 15:  // Pentium 4+\n\t\tres = piv_msr_read(offset,valid_msr);\n\t\tbreak;\n\tdefault:\n\t\tres = 0;\n\t\tbreak;\n\t}\n\n\treturn res;\n}\n\nINLINE void MSR_WRITE(UINT32 offset, UINT64 data, UINT8 *valid_msr)\n{\n\t*valid_msr = 0;\n\tUINT8 cpu_type = (m_cpu_version >> 8) & 0x0f;\n\n\tswitch(cpu_type)\n\t{\n\tcase 5:  // Pentium\n\t\tpentium_msr_write(offset,data,valid_msr);\n\t\tbreak;\n\tcase 6:  // Pentium Pro, Pentium II, Pentium III\n\t\tp6_msr_write(offset,data,valid_msr);\n\t\tbreak;\n\tcase 15:  // Pentium 4+\n\t\tpiv_msr_write(offset,data,valid_msr);\n\t\tbreak;\n\t}\n}\n\n#endif /* __I386_H__ */\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386.old/i486ops.c",
    "content": "// Intel 486+ specific opcodes\n\nstatic void I486OP(cpuid)()             // Opcode 0x0F A2\n{\n\tif (m_cpuid_id0 == 0)\n\t{\n\t\t// this 486 doesn't support the CPUID instruction\n\t\tlogerror(\"CPUID not supported at %08x!\\n\", m_eip);\n\t\ti386_trap(6, 0, 0);\n\t}\n\telse\n\t{\n\t\tswitch (REG32(EAX))\n\t\t{\n\t\t\tcase 0:\n\t\t\t{\n\t\t\t\tREG32(EAX) = m_cpuid_max_input_value_eax;\n\t\t\t\tREG32(EBX) = m_cpuid_id0;\n\t\t\t\tREG32(ECX) = m_cpuid_id2;\n\t\t\t\tREG32(EDX) = m_cpuid_id1;\n\t\t\t\tCYCLES(CYCLES_CPUID);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 1:\n\t\t\t{\n\t\t\t\tREG32(EAX) = m_cpu_version;\n\t\t\t\tREG32(EDX) = m_feature_flags;\n\t\t\t\tCYCLES(CYCLES_CPUID_EAX1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\nstatic void I486OP(invd)()              // Opcode 0x0f 08\n{\n\t// Nothing to do ?\n\tCYCLES(CYCLES_INVD);\n}\n\nstatic void I486OP(wbinvd)()            // Opcode 0x0f 09\n{\n\t// Nothing to do ?\n}\n\nstatic void I486OP(cmpxchg_rm8_r8)()    // Opcode 0x0f b0\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT8 dst = LOAD_RM8(modrm);\n\t\tUINT8 src = LOAD_REG8(modrm);\n\n\t\tif( REG8(AL) == dst ) {\n\t\t\tSTORE_RM8(modrm, src);\n\t\t\tm_ZF = 1;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_REG_T);\n\t\t} else {\n\t\t\tREG8(AL) = dst;\n\t\t\tm_ZF = 0;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_REG_F);\n\t\t}\n\t} else {\n\t\t// TODO: Check write if needed\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tUINT8 dst = READ8(ea);\n\t\tUINT8 src = LOAD_REG8(modrm);\n\n\t\tif( REG8(AL) == dst ) {\n\t\t\tWRITE8(ea, src);\n\t\t\tm_ZF = 1;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_MEM_T);\n\t\t} else {\n\t\t\tREG8(AL) = dst;\n\t\t\tm_ZF = 0;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_MEM_F);\n\t\t}\n\t}\n}\n\nstatic void I486OP(cmpxchg_rm16_r16)()  // Opcode 0x0f b1\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\tUINT16 src = LOAD_REG16(modrm);\n\n\t\tif( REG16(AX) == dst ) {\n\t\t\tSTORE_RM16(modrm, src);\n\t\t\tm_ZF = 1;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_REG_T);\n\t\t} else {\n\t\t\tREG16(AX) = dst;\n\t\t\tm_ZF = 0;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_REG_F);\n\t\t}\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tUINT16 dst = READ16(ea);\n\t\tUINT16 src = LOAD_REG16(modrm);\n\n\t\tif( REG16(AX) == dst ) {\n\t\t\tWRITE16(ea, src);\n\t\t\tm_ZF = 1;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_MEM_T);\n\t\t} else {\n\t\t\tREG16(AX) = dst;\n\t\t\tm_ZF = 0;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_MEM_F);\n\t\t}\n\t}\n}\n\nstatic void I486OP(cmpxchg_rm32_r32)()  // Opcode 0x0f b1\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\tUINT32 src = LOAD_REG32(modrm);\n\n\t\tif( REG32(EAX) == dst ) {\n\t\t\tSTORE_RM32(modrm, src);\n\t\t\tm_ZF = 1;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_REG_T);\n\t\t} else {\n\t\t\tREG32(EAX) = dst;\n\t\t\tm_ZF = 0;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_REG_F);\n\t\t}\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tUINT32 dst = READ32(ea);\n\t\tUINT32 src = LOAD_REG32(modrm);\n\n\t\tif( REG32(EAX) == dst ) {\n\t\t\tWRITE32(ea, src);\n\t\t\tm_ZF = 1;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_MEM_T);\n\t\t} else {\n\t\t\tREG32(EAX) = dst;\n\t\t\tm_ZF = 0;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_MEM_F);\n\t\t}\n\t}\n}\n\nstatic void I486OP(xadd_rm8_r8)()   // Opcode 0x0f c0\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT8 dst = LOAD_RM8(modrm);\n\t\tUINT8 src = LOAD_REG8(modrm);\n\t\tSTORE_REG8(modrm, dst);\n\t\tSTORE_RM8(modrm, dst + src);\n\t\tCYCLES(CYCLES_XADD_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT8 dst = READ8(ea);\n\t\tUINT8 src = LOAD_REG8(modrm);\n\t\tWRITE8(ea, dst + src);\n\t\tSTORE_REG8(modrm, dst);\n\t\tCYCLES(CYCLES_XADD_REG_MEM);\n\t}\n}\n\nstatic void I486OP(xadd_rm16_r16)() // Opcode 0x0f c1\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 dst = LOAD_RM16(modrm);\n\t\tUINT16 src = LOAD_REG16(modrm);\n\t\tSTORE_REG16(modrm, dst);\n\t\tSTORE_RM16(modrm, dst + src);\n\t\tCYCLES(CYCLES_XADD_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT16 dst = READ16(ea);\n\t\tUINT16 src = LOAD_REG16(modrm);\n\t\tWRITE16(ea, dst + src);\n\t\tSTORE_REG16(modrm, dst);\n\t\tCYCLES(CYCLES_XADD_REG_MEM);\n\t}\n}\n\nstatic void I486OP(xadd_rm32_r32)() // Opcode 0x0f c1\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 dst = LOAD_RM32(modrm);\n\t\tUINT32 src = LOAD_REG32(modrm);\n\t\tSTORE_REG32(modrm, dst);\n\t\tSTORE_RM32(modrm, dst + src);\n\t\tCYCLES(CYCLES_XADD_REG_REG);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,1);\n\t\tUINT32 dst = READ32(ea);\n\t\tUINT32 src = LOAD_REG32(modrm);\n\t\tWRITE32(ea, dst + src);\n\t\tSTORE_REG32(modrm, dst);\n\t\tCYCLES(CYCLES_XADD_REG_MEM);\n\t}\n}\n\nstatic void I486OP(group0F01_16)()      // Opcode 0x0f 01\n{\n\tUINT8 modrm = FETCH();\n\tUINT16 address;\n\tUINT32 ea;\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:         /* SGDT */\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tea = i386_translate( CS, address, 1 );\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t}\n\t\t\t\tWRITE16(ea, m_gdtr.limit);\n\t\t\t\tWRITE32(ea + 2, m_gdtr.base & 0xffffff);\n\t\t\t\tCYCLES(CYCLES_SGDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 1:         /* SIDT */\n\t\t\t{\n\t\t\t\tif (modrm >= 0xc0)\n\t\t\t\t{\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tea = i386_translate( CS, address, 1 );\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t}\n\t\t\t\tWRITE16(ea, m_idtr.limit);\n\t\t\t\tWRITE32(ea + 2, m_idtr.base & 0xffffff);\n\t\t\t\tCYCLES(CYCLES_SIDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 2:         /* LGDT */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tea = i386_translate( CS, address, 0 );\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t}\n\t\t\t\tm_gdtr.limit = READ16(ea);\n\t\t\t\tm_gdtr.base = READ32(ea + 2) & 0xffffff;\n\t\t\t\tCYCLES(CYCLES_LGDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 3:         /* LIDT */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM16(modrm);\n\t\t\t\t\tea = i386_translate( CS, address, 0 );\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t}\n\t\t\t\tm_idtr.limit = READ16(ea);\n\t\t\t\tm_idtr.base = READ32(ea + 2) & 0xffffff;\n\t\t\t\tCYCLES(CYCLES_LIDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 4:         /* SMSW */\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tSTORE_RM16(modrm, m_cr[0]);\n\t\t\t\t\tCYCLES(CYCLES_SMSW_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t\tWRITE16(ea, m_cr[0]);\n\t\t\t\t\tCYCLES(CYCLES_SMSW_MEM);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 6:         /* LMSW */\n\t\t\t{\n\t\t\t\tUINT16 b;\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tb = LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_LMSW_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t\tCYCLES(CYCLES_LMSW_MEM);\n\t\t\t\t\tb = READ16(ea);\n\t\t\t\t}\n\t\t\t\tif(PROTECTED_MODE)\n\t\t\t\t\tb |= 0x0001;  // cannot return to real mode using this instruction.\n\t\t\t\tm_cr[0] &= ~0x0000000f;\n\t\t\t\tm_cr[0] |= b & 0x0000000f;\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 7:         /* INVLPG */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif(modrm >= 0xc0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"i486: invlpg with modrm %02X\\n\", modrm);\n\t\t\t\t\tFAULT(FAULT_UD,0)\n\t\t\t\t}\n\t\t\t\tea = GetEA(modrm,-1);\n\t\t\t\tCYCLES(25); // TODO: add to cycles.h\n\t\t\t\tvtlb_flush_address(m_vtlb, ea);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tdefault:\n\t\t\treport_invalid_modrm(\"group0F01_16\", modrm);\n\t\t\tbreak;\n\t}\n}\n\nstatic void I486OP(group0F01_32)()      // Opcode 0x0f 01\n{\n\tUINT8 modrm = FETCH();\n\tUINT32 address, ea;\n\n\tswitch( (modrm >> 3) & 0x7 )\n\t{\n\t\tcase 0:         /* SGDT */\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tea = i386_translate( CS, address, 1 );\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t}\n\t\t\t\tWRITE16(ea, m_gdtr.limit);\n\t\t\t\tWRITE32(ea + 2, m_gdtr.base);\n\t\t\t\tCYCLES(CYCLES_SGDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 1:         /* SIDT */\n\t\t\t{\n\t\t\t\tif (modrm >= 0xc0)\n\t\t\t\t{\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tea = i386_translate( CS, address, 1 );\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t}\n\t\t\t\tWRITE16(ea, m_idtr.limit);\n\t\t\t\tWRITE32(ea + 2, m_idtr.base);\n\t\t\t\tCYCLES(CYCLES_SIDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 2:         /* LGDT */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tea = i386_translate( CS, address, 0 );\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t}\n\t\t\t\tm_gdtr.limit = READ16(ea);\n\t\t\t\tm_gdtr.base = READ32(ea + 2);\n\t\t\t\tCYCLES(CYCLES_LGDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 3:         /* LIDT */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\taddress = LOAD_RM32(modrm);\n\t\t\t\t\tea = i386_translate( CS, address, 0 );\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t}\n\t\t\t\tm_idtr.limit = READ16(ea);\n\t\t\t\tm_idtr.base = READ32(ea + 2);\n\t\t\t\tCYCLES(CYCLES_LIDT);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 4:         /* SMSW */\n\t\t\t{\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tSTORE_RM32(modrm, m_cr[0] & 0xffff);\n\t\t\t\t\tCYCLES(CYCLES_SMSW_REG);\n\t\t\t\t} else {\n\t\t\t\t\t/* always 16-bit memory operand */\n\t\t\t\t\tea = GetEA(modrm,1);\n\t\t\t\t\tWRITE16(ea, m_cr[0]);\n\t\t\t\t\tCYCLES(CYCLES_SMSW_MEM);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 6:         /* LMSW */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tUINT16 b;\n\t\t\t\tif( modrm >= 0xc0 ) {\n\t\t\t\t\tb = LOAD_RM16(modrm);\n\t\t\t\t\tCYCLES(CYCLES_LMSW_REG);\n\t\t\t\t} else {\n\t\t\t\t\tea = GetEA(modrm,0);\n\t\t\t\t\tCYCLES(CYCLES_LMSW_MEM);\n\t\t\t\tb = READ16(ea);\n\t\t\t\t}\n\t\t\t\tif(PROTECTED_MODE)\n\t\t\t\t\tb |= 0x0001;  // cannot return to real mode using this instruction.\n\t\t\t\tm_cr[0] &= ~0x0000000f;\n\t\t\t\tm_cr[0] |= b & 0x0000000f;\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase 7:         /* INVLPG */\n\t\t\t{\n\t\t\t\tif(PROTECTED_MODE && m_CPL)\n\t\t\t\t\tFAULT(FAULT_GP,0)\n\t\t\t\tif(modrm >= 0xc0)\n\t\t\t\t{\n\t\t\t\t\tlogerror(\"i486: invlpg with modrm %02X\\n\", modrm);\n\t\t\t\t\tFAULT(FAULT_UD,0)\n\t\t\t\t}\n\t\t\t\tea = GetEA(modrm,-1);\n\t\t\t\tCYCLES(25); // TODO: add to cycles.h\n\t\t\t\tvtlb_flush_address(m_vtlb, ea);\n\t\t\t\tbreak;\n\t\t\t}\n\t\tdefault:\n\t\t\treport_invalid_modrm(\"group0F01_32\", modrm);\n\t\t\tbreak;\n\t}\n}\n\nstatic void I486OP(bswap_eax)()     // Opcode 0x0f 38\n{\n\tREG32(EAX) = SWITCH_ENDIAN_32(REG32(EAX));\n\tCYCLES(1);     // TODO\n}\n\nstatic void I486OP(bswap_ecx)()     // Opcode 0x0f 39\n{\n\tREG32(ECX) = SWITCH_ENDIAN_32(REG32(ECX));\n\tCYCLES(1);     // TODO\n}\n\nstatic void I486OP(bswap_edx)()     // Opcode 0x0f 3A\n{\n\tREG32(EDX) = SWITCH_ENDIAN_32(REG32(EDX));\n\tCYCLES(1);     // TODO\n}\n\nstatic void I486OP(bswap_ebx)()     // Opcode 0x0f 3B\n{\n\tREG32(EBX) = SWITCH_ENDIAN_32(REG32(EBX));\n\tCYCLES(1);     // TODO\n}\n\nstatic void I486OP(bswap_esp)()     // Opcode 0x0f 3C\n{\n\tREG32(ESP) = SWITCH_ENDIAN_32(REG32(ESP));\n\tCYCLES(1);     // TODO\n}\n\nstatic void I486OP(bswap_ebp)()     // Opcode 0x0f 3D\n{\n\tREG32(EBP) = SWITCH_ENDIAN_32(REG32(EBP));\n\tCYCLES(1);     // TODO\n}\n\nstatic void I486OP(bswap_esi)()     // Opcode 0x0f 3E\n{\n\tREG32(ESI) = SWITCH_ENDIAN_32(REG32(ESI));\n\tCYCLES(1);     // TODO\n}\n\nstatic void I486OP(bswap_edi)()     // Opcode 0x0f 3F\n{\n\tREG32(EDI) = SWITCH_ENDIAN_32(REG32(EDI));\n\tCYCLES(1);     // TODO\n}\n\nstatic void I486OP(mov_cr_r32)()        // Opcode 0x0f 22\n{\n\tif(PROTECTED_MODE && m_CPL)\n\t\tFAULT(FAULT_GP, 0);\n\tUINT8 modrm = FETCH();\n\tUINT8 cr = (modrm >> 3) & 0x7;\n\tUINT32 oldcr = m_cr[cr];\n\tUINT32 data = LOAD_RM32(modrm);\n\tswitch(cr)\n\t{\n\t\tcase 0:\n\t\t\tCYCLES(CYCLES_MOV_REG_CR0);\n\t\t\tif((oldcr ^ m_cr[cr]) & 0x80010000)\n\t\t\t\tvtlb_flush_dynamic(m_vtlb);\n\t\t\tbreak;\n\t\tcase 2: CYCLES(CYCLES_MOV_REG_CR2); break;\n\t\tcase 3:\n\t\t\tCYCLES(CYCLES_MOV_REG_CR3);\n\t\t\tvtlb_flush_dynamic(m_vtlb);\n\t\t\tbreak;\n\t\tcase 4: CYCLES(1); break; // TODO\n\t\tdefault:\n\t\t\tlogerror(\"i386: mov_cr_r32 CR%d!\\n\", cr);\n\t\t\treturn;\n\t}\n\tm_cr[cr] = data;\n}\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386.old/pentops.c",
    "content": "// Pentium+ specific opcodes\n\nextern flag float32_is_nan( float32 a ); // since its not defined in softfloat.h\n\nINLINE void MMXPROLOG()\n{\n\t//m_x87_sw &= ~(X87_SW_TOP_MASK << X87_SW_TOP_SHIFT); // top = 0\n\tm_x87_tw = 0; // tag word = 0\n}\n\nINLINE void READMMX(UINT32 ea,MMX_REG &r)\n{\n\tr.q=READ64(ea);\n}\n\nINLINE void WRITEMMX(UINT32 ea,MMX_REG &r)\n{\n\tWRITE64(ea, r.q);\n}\n\nINLINE void READXMM(UINT32 ea,XMM_REG &r)\n{\n\tr.q[0]=READ64(ea);\n\tr.q[1]=READ64(ea+8);\n}\n\nINLINE void WRITEXMM(UINT32 ea,XMM_REG &r)\n{\n\tWRITE64(ea, r.q[0]);\n\tWRITE64(ea+8, r.q[1]);\n}\n\nINLINE void READXMM_LO64(UINT32 ea,XMM_REG &r)\n{\n\tr.q[0]=READ64(ea);\n}\n\nINLINE void WRITEXMM_LO64(UINT32 ea,XMM_REG &r)\n{\n\tWRITE64(ea, r.q[0]);\n}\n\nINLINE void READXMM_HI64(UINT32 ea,XMM_REG &r)\n{\n\tr.q[1]=READ64(ea);\n}\n\nINLINE void WRITEXMM_HI64(UINT32 ea,XMM_REG &r)\n{\n\tWRITE64(ea, r.q[1]);\n}\n\nstatic void PENTIUMOP(rdmsr)()          // Opcode 0x0f 32\n{\n\tUINT64 data;\n\tUINT8 valid_msr = 0;\n\n\tdata = MSR_READ(REG32(ECX),&valid_msr);\n\tREG32(EDX) = data >> 32;\n\tREG32(EAX) = data & 0xffffffff;\n\n\tif(m_CPL != 0 || valid_msr == 0) // if current privilege level isn't 0 or the register isn't recognized ...\n\t\tFAULT(FAULT_GP,0) // ... throw a general exception fault\n\n\tCYCLES(CYCLES_RDMSR);\n}\n\nstatic void PENTIUMOP(wrmsr)()          // Opcode 0x0f 30\n{\n\tUINT64 data;\n\tUINT8 valid_msr = 0;\n\n\tdata = (UINT64)REG32(EAX);\n\tdata |= (UINT64)(REG32(EDX)) << 32;\n\n\tMSR_WRITE(REG32(ECX),data,&valid_msr);\n\n\tif(m_CPL != 0 || valid_msr == 0) // if current privilege level isn't 0 or the register isn't recognized\n\t\tFAULT(FAULT_GP,0) // ... throw a general exception fault\n\n\tCYCLES(1);     // TODO: correct cycle count (~30-45)\n}\n\nstatic void PENTIUMOP(rdtsc)()          // Opcode 0x0f 31\n{\n\tUINT64 ts = m_tsc + (m_base_cycles - m_cycles);\n\tREG32(EAX) = (UINT32)(ts);\n\tREG32(EDX) = (UINT32)(ts >> 32);\n\n\tCYCLES(CYCLES_RDTSC);\n}\n\nstatic void PENTIUMOP(ud2)()    // Opcode 0x0f 0b\n{\n\ti386_trap(6, 0, 0);\n}\n\nstatic void PENTIUMOP(rsm)()\n{\n\tUINT32 smram_state = m_smbase + 0xfe00;\n\tif(!m_smm)\n\t{\n\t\tlogerror(\"i386: Invalid RSM outside SMM at %08X\\n\", m_pc - 1);\n\t\ti386_trap(6, 0, 0);\n\t\treturn;\n\t}\n\n\t// load state, no sanity checks anywhere\n\tm_smbase = READ32(smram_state+SMRAM_SMBASE);\n\tm_cr[4] = READ32(smram_state+SMRAM_IP5_CR4);\n\tm_sreg[ES].limit = READ32(smram_state+SMRAM_IP5_ESLIM);\n\tm_sreg[ES].base = READ32(smram_state+SMRAM_IP5_ESBASE);\n\tm_sreg[ES].flags = READ32(smram_state+SMRAM_IP5_ESACC);\n\tm_sreg[CS].limit = READ32(smram_state+SMRAM_IP5_CSLIM);\n\tm_sreg[CS].base = READ32(smram_state+SMRAM_IP5_CSBASE);\n\tm_sreg[CS].flags = READ32(smram_state+SMRAM_IP5_CSACC);\n\tm_sreg[SS].limit = READ32(smram_state+SMRAM_IP5_SSLIM);\n\tm_sreg[SS].base = READ32(smram_state+SMRAM_IP5_SSBASE);\n\tm_sreg[SS].flags = READ32(smram_state+SMRAM_IP5_SSACC);\n\tm_sreg[DS].limit = READ32(smram_state+SMRAM_IP5_DSLIM);\n\tm_sreg[DS].base = READ32(smram_state+SMRAM_IP5_DSBASE);\n\tm_sreg[DS].flags = READ32(smram_state+SMRAM_IP5_DSACC);\n\tm_sreg[FS].limit = READ32(smram_state+SMRAM_IP5_FSLIM);\n\tm_sreg[FS].base = READ32(smram_state+SMRAM_IP5_FSBASE);\n\tm_sreg[FS].flags = READ32(smram_state+SMRAM_IP5_FSACC);\n\tm_sreg[GS].limit = READ32(smram_state+SMRAM_IP5_GSLIM);\n\tm_sreg[GS].base = READ32(smram_state+SMRAM_IP5_GSBASE);\n\tm_sreg[GS].flags = READ32(smram_state+SMRAM_IP5_GSACC);\n\tm_ldtr.flags = READ32(smram_state+SMRAM_IP5_LDTACC);\n\tm_ldtr.limit = READ32(smram_state+SMRAM_IP5_LDTLIM);\n\tm_ldtr.base = READ32(smram_state+SMRAM_IP5_LDTBASE);\n\tm_gdtr.limit = READ32(smram_state+SMRAM_IP5_GDTLIM);\n\tm_gdtr.base = READ32(smram_state+SMRAM_IP5_GDTBASE);\n\tm_idtr.limit = READ32(smram_state+SMRAM_IP5_IDTLIM);\n\tm_idtr.base = READ32(smram_state+SMRAM_IP5_IDTBASE);\n\tm_task.limit = READ32(smram_state+SMRAM_IP5_TRLIM);\n\tm_task.base = READ32(smram_state+SMRAM_IP5_TRBASE);\n\tm_task.flags = READ32(smram_state+SMRAM_IP5_TRACC);\n\n\tm_sreg[ES].selector = READ32(smram_state+SMRAM_ES);\n\tm_sreg[CS].selector = READ32(smram_state+SMRAM_CS);\n\tm_sreg[SS].selector = READ32(smram_state+SMRAM_SS);\n\tm_sreg[DS].selector = READ32(smram_state+SMRAM_DS);\n\tm_sreg[FS].selector = READ32(smram_state+SMRAM_FS);\n\tm_sreg[GS].selector = READ32(smram_state+SMRAM_GS);\n\tm_ldtr.segment = READ32(smram_state+SMRAM_LDTR);\n\tm_task.segment = READ32(smram_state+SMRAM_TR);\n\n\tm_dr[7] = READ32(smram_state+SMRAM_DR7);\n\tm_dr[6] = READ32(smram_state+SMRAM_DR6);\n\tREG32(EAX) = READ32(smram_state+SMRAM_EAX);\n\tREG32(ECX) = READ32(smram_state+SMRAM_ECX);\n\tREG32(EDX) = READ32(smram_state+SMRAM_EDX);\n\tREG32(EBX) = READ32(smram_state+SMRAM_EBX);\n\tREG32(ESP) = READ32(smram_state+SMRAM_ESP);\n\tREG32(EBP) = READ32(smram_state+SMRAM_EBP);\n\tREG32(ESI) = READ32(smram_state+SMRAM_ESI);\n\tREG32(EDI) = READ32(smram_state+SMRAM_EDI);\n\tm_eip = READ32(smram_state+SMRAM_EIP);\n\tm_eflags = READ32(smram_state+SMRAM_EAX);\n\tm_cr[3] = READ32(smram_state+SMRAM_CR3);\n\tm_cr[0] = READ32(smram_state+SMRAM_CR0);\n\n\tm_CPL = (m_sreg[SS].flags >> 13) & 3; // cpl == dpl of ss\n\n\tfor(int i = 0; i < GS; i++)\n\t{\n\t\tif(PROTECTED_MODE && !V8086_MODE)\n\t\t{\n\t\t\tm_sreg[i].valid = m_sreg[i].selector ? true : false;\n\t\t\tm_sreg[i].d = (m_sreg[i].flags & 0x4000) ? 1 : 0;\n\t\t}\n\t\telse\n\t\t\tm_sreg[i].valid = true;\n\t}\n\n//\tif(!m_smiact.isnull())\n//\t\tm_smiact(false);\n\tm_smm = false;\n\n\tCHANGE_PC(m_eip);\n\tm_nmi_masked = false;\n\tif(m_smi_latched)\n\t{\n\t\tpentium_smi();\n\t\treturn;\n\t}\n\tif(m_nmi_latched)\n\t{\n\t\tm_nmi_latched = false;\n\t\ti386_trap(2, 1, 0);\n\t}\n}\n\nstatic void PENTIUMOP(prefetch_m8)()    // Opcode 0x0f 18\n{\n\tUINT8 modrm = FETCH();\n\tUINT32 ea = GetEA(modrm,0);\n\tCYCLES(1+(ea & 1)); // TODO: correct cycle count\n}\n\nstatic void PENTIUMOP(cmovo_r16_rm16)()    // Opcode 0x0f 40\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_OF == 1)\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_OF == 1)\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovo_r32_rm32)()    // Opcode 0x0f 40\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_OF == 1)\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_OF == 1)\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovno_r16_rm16)()    // Opcode 0x0f 41\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_OF == 0)\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_OF == 0)\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovno_r32_rm32)()    // Opcode 0x0f 41\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_OF == 0)\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_OF == 0)\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovb_r16_rm16)()    // Opcode 0x0f 42\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_CF == 1)\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_CF == 1)\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovb_r32_rm32)()    // Opcode 0x0f 42\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_CF == 1)\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_CF == 1)\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovae_r16_rm16)()    // Opcode 0x0f 43\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_CF == 0)\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_CF == 0)\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovae_r32_rm32)()    // Opcode 0x0f 43\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_CF == 0)\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_CF == 0)\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmove_r16_rm16)()    // Opcode 0x0f 44\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_ZF == 1)\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_ZF == 1)\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmove_r32_rm32)()    // Opcode 0x0f 44\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_ZF == 1)\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_ZF == 1)\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovne_r16_rm16)()    // Opcode 0x0f 45\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_ZF == 0)\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_ZF == 0)\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovne_r32_rm32)()    // Opcode 0x0f 45\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_ZF == 0)\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_ZF == 0)\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovbe_r16_rm16)()    // Opcode 0x0f 46\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif ((m_CF == 1) || (m_ZF == 1))\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif ((m_CF == 1) || (m_ZF == 1))\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovbe_r32_rm32)()    // Opcode 0x0f 46\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif ((m_CF == 1) || (m_ZF == 1))\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif ((m_CF == 1) || (m_ZF == 1))\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmova_r16_rm16)()    // Opcode 0x0f 47\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif ((m_CF == 0) && (m_ZF == 0))\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif ((m_CF == 0) && (m_ZF == 0))\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmova_r32_rm32)()    // Opcode 0x0f 47\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif ((m_CF == 0) && (m_ZF == 0))\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif ((m_CF == 0) && (m_ZF == 0))\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovs_r16_rm16)()    // Opcode 0x0f 48\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_SF == 1)\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_SF == 1)\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovs_r32_rm32)()    // Opcode 0x0f 48\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_SF == 1)\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_SF == 1)\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovns_r16_rm16)()    // Opcode 0x0f 49\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_SF == 0)\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_SF == 0)\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovns_r32_rm32)()    // Opcode 0x0f 49\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_SF == 0)\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_SF == 0)\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovp_r16_rm16)()    // Opcode 0x0f 4a\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_PF == 1)\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_PF == 1)\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovp_r32_rm32)()    // Opcode 0x0f 4a\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_PF == 1)\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_PF == 1)\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovnp_r16_rm16)()    // Opcode 0x0f 4b\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_PF == 0)\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_PF == 0)\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovnp_r32_rm32)()    // Opcode 0x0f 4b\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_PF == 0)\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_PF == 0)\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovl_r16_rm16)()    // Opcode 0x0f 4c\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_SF != m_OF)\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_SF != m_OF)\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovl_r32_rm32)()    // Opcode 0x0f 4c\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_SF != m_OF)\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_SF != m_OF)\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovge_r16_rm16)()    // Opcode 0x0f 4d\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_SF == m_OF)\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_SF == m_OF)\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovge_r32_rm32)()    // Opcode 0x0f 4d\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif (m_SF == m_OF)\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif (m_SF == m_OF)\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovle_r16_rm16)()    // Opcode 0x0f 4e\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif ((m_ZF == 1) || (m_SF != m_OF))\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif ((m_ZF == 1) || (m_SF != m_OF))\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovle_r32_rm32)()    // Opcode 0x0f 4e\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif ((m_ZF == 1) || (m_SF != m_OF))\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif ((m_ZF == 1) || (m_SF != m_OF))\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovg_r16_rm16)()    // Opcode 0x0f 4f\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif ((m_ZF == 0) && (m_SF == m_OF))\n\t\t{\n\t\t\tsrc = LOAD_RM16(modrm);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif ((m_ZF == 0) && (m_SF == m_OF))\n\t\t{\n\t\t\tsrc = READ16(ea);\n\t\t\tSTORE_REG16(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(cmovg_r32_rm32)()    // Opcode 0x0f 4f\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\n\tif( modrm >= 0xc0 )\n\t{\n\t\tif ((m_ZF == 0) && (m_SF == m_OF))\n\t\t{\n\t\t\tsrc = LOAD_RM32(modrm);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n\telse\n\t{\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tif ((m_ZF == 0) && (m_SF == m_OF))\n\t\t{\n\t\t\tsrc = READ32(ea);\n\t\t\tSTORE_REG32(modrm, src);\n\t\t}\n\t\tCYCLES(1); // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(movnti_m16_r16)() // Opcode 0f c3\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\t// unsupported by cpu\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t} else {\n\t\t// since cache is not implemented\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITE16(ea,LOAD_RM16(modrm));\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(movnti_m32_r32)() // Opcode 0f c3\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\t// unsupported by cpu\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t} else {\n\t\t// since cache is not implemented\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITE32(ea,LOAD_RM32(modrm));\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t}\n}\n\nstatic void I386OP(cyrix_unknown)()     // Opcode 0x0f 74\n{\n\tlogerror(\"Unemulated 0x0f 0x74 opcode called\\n\");\n\n\tCYCLES(1);\n}\n\nstatic void PENTIUMOP(cmpxchg8b_m64)()  // Opcode 0x0f c7\n{\n\tUINT8 modm = FETCH();\n\tif( modm >= 0xc0 ) {\n\t\treport_invalid_modrm(\"cmpxchg8b_m64\", modm);\n\t} else {\n\t\tUINT32 ea = GetEA(modm, 0);\n\t\tUINT64 value = READ64(ea);\n\t\tUINT64 edx_eax = (((UINT64) REG32(EDX)) << 32) | REG32(EAX);\n\t\tUINT64 ecx_ebx = (((UINT64) REG32(ECX)) << 32) | REG32(EBX);\n\n\t\tif( value == edx_eax ) {\n\t\t\tWRITE64(ea, ecx_ebx);\n\t\t\tm_ZF = 1;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_MEM_T);\n\t\t} else {\n\t\t\tREG32(EDX) = (UINT32) (value >> 32);\n\t\t\tREG32(EAX) = (UINT32) (value >>  0);\n\t\t\tm_ZF = 0;\n\t\t\tCYCLES(CYCLES_CMPXCHG_REG_MEM_F);\n\t\t}\n\t}\n}\n\nstatic void PENTIUMOP(movntq_m64_r64)() // Opcode 0f e7\n{\n\t//MMXPROLOG(); // TODO: check if needed\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tCYCLES(1);     // unsupported\n\t} else {\n\t\t// since cache is not implemented\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITEMMX(ea, MMX((modrm >> 3) & 0x7));\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t}\n}\n\nstatic void PENTIUMOP(maskmovq_r64_r64)()  // Opcode 0f f7\n{\n\tint s,m,n;\n\tUINT8 modm = FETCH();\n\tUINT32 ea = GetEA(7, 0); // ds:di/edi/rdi register\n\tMMXPROLOG();\n\ts=(modm >> 3) & 7;\n\tm=modm & 7;\n\tfor (n=0;n <= 7;n++)\n\t\tif (MMX(m).b[n] & 127)\n\t\t\tWRITE8(ea+n, MMX(s).b[n]);\n}\n\nstatic void PENTIUMOP(popcnt_r16_rm16)()    // Opcode f3 0f b8\n{\n\tUINT16 src;\n\tUINT8 modrm = FETCH();\n\tint n,count;\n\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM16(modrm);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ16(ea);\n\t}\n\tcount=0;\n\tfor (n=0;n < 16;n++) {\n\t\tcount=count+(src & 1);\n\t\tsrc=src >> 1;\n\t}\n\tSTORE_REG16(modrm, count);\n\tCYCLES(1); // TODO: correct cycle count\n}\n\nstatic void PENTIUMOP(popcnt_r32_rm32)()    // Opcode f3 0f b8\n{\n\tUINT32 src;\n\tUINT8 modrm = FETCH();\n\tint n,count;\n\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = LOAD_RM32(modrm);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm,0);\n\t\tsrc = READ32(ea);\n\t}\n\tcount=0;\n\tfor (n=0;n < 32;n++) {\n\t\tcount=count+(src & 1);\n\t\tsrc=src >> 1;\n\t}\n\tSTORE_REG32(modrm, count);\n\tCYCLES(1); // TODO: correct cycle count\n}\n\nstatic void PENTIUMOP(tzcnt_r16_rm16)()\n{\n\t// for CPUs that don't support TZCNT, fall back to BSF\n\ti386_bsf_r16_rm16();\n\t// TODO: actually implement TZCNT\n}\n\nstatic void PENTIUMOP(tzcnt_r32_rm32)()\n{\n\t// for CPUs that don't support TZCNT, fall back to BSF\n\ti386_bsf_r32_rm32();\n\t// TODO: actually implement TZCNT\n}\n\nINLINE INT8 SaturatedSignedWordToSignedByte(INT16 word)\n{\n\tif (word > 127)\n\t\treturn 127;\n\tif (word < -128)\n\t\treturn -128;\n\treturn (INT8)word;\n}\n\nINLINE UINT8 SaturatedSignedWordToUnsignedByte(INT16 word)\n{\n\tif (word > 255)\n\t\treturn 255;\n\tif (word < 0)\n\t\treturn 0;\n\treturn (UINT8)word;\n}\n\nINLINE INT16 SaturatedSignedDwordToSignedWord(INT32 dword)\n{\n\tif (dword > 32767)\n\t\treturn 32767;\n\tif (dword < -32768)\n\t\treturn -32768;\n\treturn (INT16)dword;\n}\n\nstatic void MMXOP(group_0f71)()  // Opcode 0f 71\n{\n\tUINT8 modm = FETCH();\n\tUINT8 imm8 = FETCH();\n\tMMXPROLOG();\n\tif( modm >= 0xc0 ) {\n\t\tswitch ( (modm & 0x38) >> 3 )\n\t\t{\n\t\t\tcase 2: // psrlw\n\t\t\t\tMMX(modm & 7).w[0]=MMX(modm & 7).w[0] >> imm8;\n\t\t\t\tMMX(modm & 7).w[1]=MMX(modm & 7).w[1] >> imm8;\n\t\t\t\tMMX(modm & 7).w[2]=MMX(modm & 7).w[2] >> imm8;\n\t\t\t\tMMX(modm & 7).w[3]=MMX(modm & 7).w[3] >> imm8;\n\t\t\t\tbreak;\n\t\t\tcase 4: // psraw\n\t\t\t\tMMX(modm & 7).s[0]=MMX(modm & 7).s[0] >> imm8;\n\t\t\t\tMMX(modm & 7).s[1]=MMX(modm & 7).s[1] >> imm8;\n\t\t\t\tMMX(modm & 7).s[2]=MMX(modm & 7).s[2] >> imm8;\n\t\t\t\tMMX(modm & 7).s[3]=MMX(modm & 7).s[3] >> imm8;\n\t\t\t\tbreak;\n\t\t\tcase 6: // psllw\n\t\t\t\tMMX(modm & 7).w[0]=MMX(modm & 7).w[0] << imm8;\n\t\t\t\tMMX(modm & 7).w[1]=MMX(modm & 7).w[1] << imm8;\n\t\t\t\tMMX(modm & 7).w[2]=MMX(modm & 7).w[2] << imm8;\n\t\t\t\tMMX(modm & 7).w[3]=MMX(modm & 7).w[3] << imm8;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treport_invalid_modrm(\"mmx_group0f71\", modm);\n\t\t}\n\t}\n}\n\nstatic void MMXOP(group_0f72)()  // Opcode 0f 72\n{\n\tUINT8 modm = FETCH();\n\tUINT8 imm8 = FETCH();\n\tMMXPROLOG();\n\tif( modm >= 0xc0 ) {\n\t\tswitch ( (modm & 0x38) >> 3 )\n\t\t{\n\t\t\tcase 2: // psrld\n\t\t\t\tMMX(modm & 7).d[0]=MMX(modm & 7).d[0] >> imm8;\n\t\t\t\tMMX(modm & 7).d[1]=MMX(modm & 7).d[1] >> imm8;\n\t\t\t\tbreak;\n\t\t\tcase 4: // psrad\n\t\t\t\tMMX(modm & 7).i[0]=MMX(modm & 7).i[0] >> imm8;\n\t\t\t\tMMX(modm & 7).i[1]=MMX(modm & 7).i[1] >> imm8;\n\t\t\t\tbreak;\n\t\t\tcase 6: // pslld\n\t\t\t\tMMX(modm & 7).d[0]=MMX(modm & 7).d[0] << imm8;\n\t\t\t\tMMX(modm & 7).d[1]=MMX(modm & 7).d[1] << imm8;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treport_invalid_modrm(\"mmx_group0f72\", modm);\n\t\t}\n\t}\n}\n\nstatic void MMXOP(group_0f73)()  // Opcode 0f 73\n{\n\tUINT8 modm = FETCH();\n\tUINT8 imm8 = FETCH();\n\tMMXPROLOG();\n\tif( modm >= 0xc0 ) {\n\t\tswitch ( (modm & 0x38) >> 3 )\n\t\t{\n\t\t\tcase 2: // psrlq\n\t\t\t\tif (m_xmm_operand_size)\n\t\t\t\t{\n\t\t\t\t\tXMM(modm & 7).q[0] = imm8 > 63 ? 0 : XMM(modm & 7).q[0] >> imm8;\n\t\t\t\t\tXMM(modm & 7).q[1] = imm8 > 63 ? 0 : XMM(modm & 7).q[1] >> imm8;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tMMX(modm & 7).q = imm8 > 63 ? 0 : MMX(modm & 7).q >> imm8;\n\t\t\t\tbreak;\n\t\t\tcase 3: // psrldq\n\t\t\t\tif (imm8 >= 16)\n\t\t\t\t{\n\t\t\t\t\tXMM(modm & 7).q[0] = 0;\n\t\t\t\t\tXMM(modm & 7).q[1] = 0;\n\t\t\t\t}\n\t\t\t\telse if(imm8 >= 8)\n\t\t\t\t{\n\t\t\t\t\timm8 = (imm8 & 7) << 3;\n\t\t\t\t\tXMM(modm & 7).q[0] = XMM(modm & 7).q[1] >> imm8;\n\t\t\t\t\tXMM(modm & 7).q[1] = 0;\n\t\t\t\t}\n\t\t\t\telse if(imm8)\n\t\t\t\t{\n\t\t\t\t\timm8 = imm8 << 3;\n\t\t\t\t\tXMM(modm & 7).q[0] = (XMM(modm & 7).q[1] << (64 - imm8)) | (XMM(modm & 7).q[0] >> imm8);\n\t\t\t\t\tXMM(modm & 7).q[1] = XMM(modm & 7).q[0] >> imm8;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 6: // psllq\n\t\t\t\tif (m_xmm_operand_size)\n\t\t\t\t{\n\t\t\t\t\tXMM(modm & 7).q[0] = imm8 > 63 ? 0 : XMM(modm & 7).q[0] << imm8;\n\t\t\t\t\tXMM(modm & 7).q[1] = imm8 > 63 ? 0 : XMM(modm & 7).q[1] << imm8;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tMMX(modm & 7).q = imm8 > 63 ? 0 : MMX(modm & 7).q << imm8;\n\t\t\t\tbreak;\n\t\t\tcase 7: // pslldq\n\t\t\t\tif (imm8 >= 16)\n\t\t\t\t{\n\t\t\t\t\tXMM(modm & 7).q[0] = 0;\n\t\t\t\t\tXMM(modm & 7).q[1] = 0;\n\t\t\t\t}\n\t\t\t\telse if(imm8 >= 8)\n\t\t\t\t{\n\t\t\t\t\timm8 = (imm8 & 7) << 3;\n\t\t\t\t\tXMM(modm & 7).q[1] = XMM(modm & 7).q[0] << imm8;\n\t\t\t\t\tXMM(modm & 7).q[0] = 0;\n\t\t\t\t}\n\t\t\t\telse if(imm8)\n\t\t\t\t{\n\t\t\t\t\timm8 = imm8 << 3;\n\t\t\t\t\tXMM(modm & 7).q[1] = (XMM(modm & 7).q[0] >> (64 - imm8)) | (XMM(modm & 7).q[1] << imm8);\n\t\t\t\t\tXMM(modm & 7).q[0] = XMM(modm & 7).q[0] << imm8;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treport_invalid_modrm(\"mmx_group0f73\", modm);\n\t\t}\n\t}\n}\n\nstatic void MMXOP(psrlw_r64_rm64)()  // Opcode 0f d1\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint count=(int)MMX(modrm & 7).q;\n\t\tMMX((modrm >> 3) & 0x7).w[0]=MMX((modrm >> 3) & 0x7).w[0] >> count;\n\t\tMMX((modrm >> 3) & 0x7).w[1]=MMX((modrm >> 3) & 0x7).w[1] >> count;\n\t\tMMX((modrm >> 3) & 0x7).w[2]=MMX((modrm >> 3) & 0x7).w[2] >> count;\n\t\tMMX((modrm >> 3) & 0x7).w[3]=MMX((modrm >> 3) & 0x7).w[3] >> count;\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tint count=(int)src.q;\n\t\tMMX((modrm >> 3) & 0x7).w[0]=MMX((modrm >> 3) & 0x7).w[0] >> count;\n\t\tMMX((modrm >> 3) & 0x7).w[1]=MMX((modrm >> 3) & 0x7).w[1] >> count;\n\t\tMMX((modrm >> 3) & 0x7).w[2]=MMX((modrm >> 3) & 0x7).w[2] >> count;\n\t\tMMX((modrm >> 3) & 0x7).w[3]=MMX((modrm >> 3) & 0x7).w[3] >> count;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psrld_r64_rm64)()  // Opcode 0f d2\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint count=(int)MMX(modrm & 7).q;\n\t\tMMX((modrm >> 3) & 0x7).d[0]=MMX((modrm >> 3) & 0x7).d[0] >> count;\n\t\tMMX((modrm >> 3) & 0x7).d[1]=MMX((modrm >> 3) & 0x7).d[1] >> count;\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tint count=(int)src.q;\n\t\tMMX((modrm >> 3) & 0x7).d[0]=MMX((modrm >> 3) & 0x7).d[0] >> count;\n\t\tMMX((modrm >> 3) & 0x7).d[1]=MMX((modrm >> 3) & 0x7).d[1] >> count;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psrlq_r64_rm64)()  // Opcode 0f d3\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint count=(int)MMX(modrm & 7).q;\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q >> count;\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tint count=(int)src.q;\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q >> count;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(paddq_r64_rm64)()  // Opcode 0f d4\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q+MMX(modrm & 7).q;\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q+src.q;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pmullw_r64_rm64)()  // Opcode 0f d5\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).w[0]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)MMX(modrm & 7).s[0]) & 0xffff;\n\t\tMMX((modrm >> 3) & 0x7).w[1]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)MMX(modrm & 7).s[1]) & 0xffff;\n\t\tMMX((modrm >> 3) & 0x7).w[2]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)MMX(modrm & 7).s[2]) & 0xffff;\n\t\tMMX((modrm >> 3) & 0x7).w[3]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)MMX(modrm & 7).s[3]) & 0xffff;\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tMMX((modrm >> 3) & 0x7).w[0]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)src.s[0]) & 0xffff;\n\t\tMMX((modrm >> 3) & 0x7).w[1]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)src.s[1]) & 0xffff;\n\t\tMMX((modrm >> 3) & 0x7).w[2]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)src.s[2]) & 0xffff;\n\t\tMMX((modrm >> 3) & 0x7).w[3]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)src.s[3]) & 0xffff;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psubusb_r64_rm64)()  // Opcode 0f d8\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] < MMX(modrm & 7).b[n] ? 0 : MMX((modrm >> 3) & 0x7).b[n]-MMX(modrm & 7).b[n];\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] < src.b[n] ? 0 : MMX((modrm >> 3) & 0x7).b[n]-src.b[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psubusw_r64_rm64)()  // Opcode 0f d9\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] < MMX(modrm & 7).w[n] ? 0 : MMX((modrm >> 3) & 0x7).w[n]-MMX(modrm & 7).w[n];\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] < src.w[n] ? 0 : MMX((modrm >> 3) & 0x7).w[n]-src.w[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pand_r64_rm64)()  // Opcode 0f db\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q & MMX(modrm & 7).q;\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q & src.q;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(paddusb_r64_rm64)()  // Opcode 0f dc\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] > (0xff-MMX(modrm & 7).b[n]) ? 0xff : MMX((modrm >> 3) & 0x7).b[n]+MMX(modrm & 7).b[n];\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] > (0xff-src.b[n]) ? 0xff : MMX((modrm >> 3) & 0x7).b[n]+src.b[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(paddusw_r64_rm64)()  // Opcode 0f dd\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] > (0xffff-MMX(modrm & 7).w[n]) ? 0xffff : MMX((modrm >> 3) & 0x7).w[n]+MMX(modrm & 7).w[n];\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] > (0xffff-src.w[n]) ? 0xffff : MMX((modrm >> 3) & 0x7).w[n]+src.w[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pandn_r64_rm64)()  // Opcode 0f df\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).q=(~MMX((modrm >> 3) & 0x7).q) & MMX(modrm & 7).q;\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tMMX((modrm >> 3) & 0x7).q=(~MMX((modrm >> 3) & 0x7).q) & src.q;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psraw_r64_rm64)()  // Opcode 0f e1\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint count=(int)MMX(modrm & 7).q;\n\t\tMMX((modrm >> 3) & 0x7).s[0]=MMX((modrm >> 3) & 0x7).s[0] >> count;\n\t\tMMX((modrm >> 3) & 0x7).s[1]=MMX((modrm >> 3) & 0x7).s[1] >> count;\n\t\tMMX((modrm >> 3) & 0x7).s[2]=MMX((modrm >> 3) & 0x7).s[2] >> count;\n\t\tMMX((modrm >> 3) & 0x7).s[3]=MMX((modrm >> 3) & 0x7).s[3] >> count;\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tint count=(int)src.q;\n\t\tMMX((modrm >> 3) & 0x7).s[0]=MMX((modrm >> 3) & 0x7).s[0] >> count;\n\t\tMMX((modrm >> 3) & 0x7).s[1]=MMX((modrm >> 3) & 0x7).s[1] >> count;\n\t\tMMX((modrm >> 3) & 0x7).s[2]=MMX((modrm >> 3) & 0x7).s[2] >> count;\n\t\tMMX((modrm >> 3) & 0x7).s[3]=MMX((modrm >> 3) & 0x7).s[3] >> count;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psrad_r64_rm64)()  // Opcode 0f e2\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint count=(int)MMX(modrm & 7).q;\n\t\tMMX((modrm >> 3) & 0x7).i[0]=MMX((modrm >> 3) & 0x7).i[0] >> count;\n\t\tMMX((modrm >> 3) & 0x7).i[1]=MMX((modrm >> 3) & 0x7).i[1] >> count;\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tint count=(int)src.q;\n\t\tMMX((modrm >> 3) & 0x7).i[0]=MMX((modrm >> 3) & 0x7).i[0] >> count;\n\t\tMMX((modrm >> 3) & 0x7).i[1]=MMX((modrm >> 3) & 0x7).i[1] >> count;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pmulhw_r64_rm64)()  // Opcode 0f e5\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).w[0]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)MMX(modrm & 7).s[0]) >> 16;\n\t\tMMX((modrm >> 3) & 0x7).w[1]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)MMX(modrm & 7).s[1]) >> 16;\n\t\tMMX((modrm >> 3) & 0x7).w[2]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)MMX(modrm & 7).s[2]) >> 16;\n\t\tMMX((modrm >> 3) & 0x7).w[3]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)MMX(modrm & 7).s[3]) >> 16;\n\t} else {\n\t\tMMX_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, src);\n\t\tMMX((modrm >> 3) & 0x7).w[0]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)src.s[0]) >> 16;\n\t\tMMX((modrm >> 3) & 0x7).w[1]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)src.s[1]) >> 16;\n\t\tMMX((modrm >> 3) & 0x7).w[2]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)src.s[2]) >> 16;\n\t\tMMX((modrm >> 3) & 0x7).w[3]=(UINT32)((INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)src.s[3]) >> 16;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psubsb_r64_rm64)()  // Opcode 0f e8\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).c[n]=SaturatedSignedWordToSignedByte((INT16)MMX((modrm >> 3) & 0x7).c[n] - (INT16)MMX(modrm & 7).c[n]);\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).c[n]=SaturatedSignedWordToSignedByte((INT16)MMX((modrm >> 3) & 0x7).c[n] - (INT16)s.c[n]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psubsw_r64_rm64)()  // Opcode 0f e9\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).s[n]=SaturatedSignedDwordToSignedWord((INT32)MMX((modrm >> 3) & 0x7).s[n] - (INT32)MMX(modrm & 7).s[n]);\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).s[n]=SaturatedSignedDwordToSignedWord((INT32)MMX((modrm >> 3) & 0x7).s[n] - (INT32)s.s[n]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(por_r64_rm64)()  // Opcode 0f eb\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q | MMX(modrm & 7).q;\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q | s.q;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(paddsb_r64_rm64)()  // Opcode 0f ec\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).c[n]=SaturatedSignedWordToSignedByte((INT16)MMX((modrm >> 3) & 0x7).c[n] + (INT16)MMX(modrm & 7).c[n]);\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).c[n]=SaturatedSignedWordToSignedByte((INT16)MMX((modrm >> 3) & 0x7).c[n] + (INT16)s.c[n]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(paddsw_r64_rm64)()  // Opcode 0f ed\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).s[n]=SaturatedSignedDwordToSignedWord((INT32)MMX((modrm >> 3) & 0x7).s[n] + (INT32)MMX(modrm & 7).s[n]);\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).s[n]=SaturatedSignedDwordToSignedWord((INT32)MMX((modrm >> 3) & 0x7).s[n] + (INT32)s.s[n]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pxor_r64_rm64)()  // Opcode 0f ef\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q ^ MMX(modrm & 7).q;\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q ^ s.q;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psllw_r64_rm64)()  // Opcode 0f f1\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint count=(int)MMX(modrm & 7).q;\n\t\tMMX((modrm >> 3) & 0x7).w[0]=MMX((modrm >> 3) & 0x7).w[0] << count;\n\t\tMMX((modrm >> 3) & 0x7).w[1]=MMX((modrm >> 3) & 0x7).w[1] << count;\n\t\tMMX((modrm >> 3) & 0x7).w[2]=MMX((modrm >> 3) & 0x7).w[2] << count;\n\t\tMMX((modrm >> 3) & 0x7).w[3]=MMX((modrm >> 3) & 0x7).w[3] << count;\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tint count=(int)s.q;\n\t\tMMX((modrm >> 3) & 0x7).w[0]=MMX((modrm >> 3) & 0x7).w[0] << count;\n\t\tMMX((modrm >> 3) & 0x7).w[1]=MMX((modrm >> 3) & 0x7).w[1] << count;\n\t\tMMX((modrm >> 3) & 0x7).w[2]=MMX((modrm >> 3) & 0x7).w[2] << count;\n\t\tMMX((modrm >> 3) & 0x7).w[3]=MMX((modrm >> 3) & 0x7).w[3] << count;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pslld_r64_rm64)()  // Opcode 0f f2\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint count=(int)MMX(modrm & 7).q;\n\t\tMMX((modrm >> 3) & 0x7).d[0]=MMX((modrm >> 3) & 0x7).d[0] << count;\n\t\tMMX((modrm >> 3) & 0x7).d[1]=MMX((modrm >> 3) & 0x7).d[1] << count;\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tint count=(int)s.q;\n\t\tMMX((modrm >> 3) & 0x7).d[0]=MMX((modrm >> 3) & 0x7).d[0] << count;\n\t\tMMX((modrm >> 3) & 0x7).d[1]=MMX((modrm >> 3) & 0x7).d[1] << count;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psllq_r64_rm64)()  // Opcode 0f f3\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint count=(int)MMX(modrm & 7).q;\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q << count;\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tint count=(int)s.q;\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q << count;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pmaddwd_r64_rm64)()  // Opcode 0f f5\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).i[0]=(INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)MMX(modrm & 7).s[0]+\n\t\t\t\t\t\t\t\t\t\t(INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)MMX(modrm & 7).s[1];\n\t\tMMX((modrm >> 3) & 0x7).i[1]=(INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)MMX(modrm & 7).s[2]+\n\t\t\t\t\t\t\t\t\t\t(INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)MMX(modrm & 7).s[3];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX((modrm >> 3) & 0x7).i[0]=(INT32)MMX((modrm >> 3) & 0x7).s[0]*(INT32)s.s[0]+\n\t\t\t\t\t\t\t\t\t\t(INT32)MMX((modrm >> 3) & 0x7).s[1]*(INT32)s.s[1];\n\t\tMMX((modrm >> 3) & 0x7).i[1]=(INT32)MMX((modrm >> 3) & 0x7).s[2]*(INT32)s.s[2]+\n\t\t\t\t\t\t\t\t\t\t(INT32)MMX((modrm >> 3) & 0x7).s[3]*(INT32)s.s[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psubb_r64_rm64)()  // Opcode 0f f8\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] - MMX(modrm & 7).b[n];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] - s.b[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psubw_r64_rm64)()  // Opcode 0f f9\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] - MMX(modrm & 7).w[n];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] - s.w[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(psubd_r64_rm64)()  // Opcode 0f fa\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 2;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).d[n]=MMX((modrm >> 3) & 0x7).d[n] - MMX(modrm & 7).d[n];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 2;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).d[n]=MMX((modrm >> 3) & 0x7).d[n] - s.d[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(paddb_r64_rm64)()  // Opcode 0f fc\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] + MMX(modrm & 7).b[n];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n]=MMX((modrm >> 3) & 0x7).b[n] + s.b[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(paddw_r64_rm64)()  // Opcode 0f fd\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] + MMX(modrm & 7).w[n];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).w[n]=MMX((modrm >> 3) & 0x7).w[n] + s.w[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(paddd_r64_rm64)()  // Opcode 0f fe\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 2;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).d[n]=MMX((modrm >> 3) & 0x7).d[n] + MMX(modrm & 7).d[n];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 2;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).d[n]=MMX((modrm >> 3) & 0x7).d[n] + s.d[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(emms)() // Opcode 0f 77\n{\n\tm_x87_tw = 0xffff; // tag word = 0xffff\n\t// TODO\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(movd_r64_rm32)() // Opcode 0f 6e\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tif (m_xmm_operand_size)\n\t\t\tXMM((modrm >> 3) & 0x7).d[0]=LOAD_RM32(modrm);\n\t\telse\n\t\t\tMMX((modrm >> 3) & 0x7).d[0]=LOAD_RM32(modrm);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tif (m_xmm_operand_size)\n\t\t\tXMM((modrm >> 3) & 0x7).d[0]=READ32(ea);\n\t\telse\n\t\t\tMMX((modrm >> 3) & 0x7).d[0]=READ32(ea);\n\t}\n\tMMX((modrm >> 3) & 0x7).d[1]=0;\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(movq_r64_rm64)() // Opcode 0f 6f\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tif (m_xmm_operand_size)\n\t\t\tXMM((modrm >> 3) & 0x7).l[0]=XMM(modrm & 0x7).l[0];\n\t\telse\n\t\t\tMMX((modrm >> 3) & 0x7).l=MMX(modrm & 0x7).l;\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tif (m_xmm_operand_size)\n\t\t\tREADXMM_LO64(ea, XMM((modrm >> 3) & 0x7));\n\t\telse\n\t\t\tREADMMX(ea, MMX((modrm >> 3) & 0x7));\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(movd_rm32_r64)() // Opcode 0f 7e\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tif (m_xmm_operand_size)\n\t\t\tSTORE_RM32(modrm, XMM((modrm >> 3) & 0x7).d[0]);\n\t\telse\n\t\t\tSTORE_RM32(modrm, MMX((modrm >> 3) & 0x7).d[0]);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tif (m_xmm_operand_size)\n\t\t\tWRITE32(ea, XMM((modrm >> 3) & 0x7).d[0]);\n\t\telse\n\t\t\tWRITE32(ea, MMX((modrm >> 3) & 0x7).d[0]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(movq_rm64_r64)() // Opcode 0f 7f\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tif (m_xmm_operand_size)\n\t\t\tXMM(modrm & 0x7).l[0]=XMM((modrm >> 3) & 0x7).l[0];\n\t\telse\n\t\t\tMMX(modrm & 0x7)=MMX((modrm >> 3) & 0x7);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITEMMX(ea, MMX((modrm >> 3) & 0x7));\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pcmpeqb_r64_rm64)() // Opcode 0f 74\n{\n\tint c;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tfor (c=0;c <= 7;c++)\n\t\t\tMMX(d).b[c]=(MMX(d).b[c] == MMX(s).b[c]) ? 0xff : 0;\n\t} else {\n\t\tMMX_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (c=0;c <= 7;c++)\n\t\t\tMMX(d).b[c]=(MMX(d).b[c] == s.b[c]) ? 0xff : 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pcmpeqw_r64_rm64)() // Opcode 0f 75\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tMMX(d).w[0]=(MMX(d).w[0] == MMX(s).w[0]) ? 0xffff : 0;\n\t\tMMX(d).w[1]=(MMX(d).w[1] == MMX(s).w[1]) ? 0xffff : 0;\n\t\tMMX(d).w[2]=(MMX(d).w[2] == MMX(s).w[2]) ? 0xffff : 0;\n\t\tMMX(d).w[3]=(MMX(d).w[3] == MMX(s).w[3]) ? 0xffff : 0;\n\t} else {\n\t\tMMX_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX(d).w[0]=(MMX(d).w[0] == s.w[0]) ? 0xffff : 0;\n\t\tMMX(d).w[1]=(MMX(d).w[1] == s.w[1]) ? 0xffff : 0;\n\t\tMMX(d).w[2]=(MMX(d).w[2] == s.w[2]) ? 0xffff : 0;\n\t\tMMX(d).w[3]=(MMX(d).w[3] == s.w[3]) ? 0xffff : 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pcmpeqd_r64_rm64)() // Opcode 0f 76\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tMMX(d).d[0]=(MMX(d).d[0] == MMX(s).d[0]) ? 0xffffffff : 0;\n\t\tMMX(d).d[1]=(MMX(d).d[1] == MMX(s).d[1]) ? 0xffffffff : 0;\n\t} else {\n\t\tMMX_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX(d).d[0]=(MMX(d).d[0] == s.d[0]) ? 0xffffffff : 0;\n\t\tMMX(d).d[1]=(MMX(d).d[1] == s.d[1]) ? 0xffffffff : 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pshufw_r64_rm64_i8)() // Opcode 0f 70\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX_REG t;\n\t\tint s,d;\n\t\tUINT8 imm8 = FETCH();\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tt.q=MMX(s).q;\n\t\tMMX(d).w[0]=t.w[imm8 & 3];\n\t\tMMX(d).w[1]=t.w[(imm8 >> 2) & 3];\n\t\tMMX(d).w[2]=t.w[(imm8 >> 4) & 3];\n\t\tMMX(d).w[3]=t.w[(imm8 >> 6) & 3];\n\t} else {\n\t\tMMX_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tUINT8 imm8 = FETCH();\n\t\tREADMMX(ea, s);\n\t\tMMX(d).w[0]=s.w[imm8 & 3];\n\t\tMMX(d).w[1]=s.w[(imm8 >> 2) & 3];\n\t\tMMX(d).w[2]=s.w[(imm8 >> 4) & 3];\n\t\tMMX(d).w[3]=s.w[(imm8 >> 6) & 3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(punpcklbw_r64_r64m32)() // Opcode 0f 60\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 t;\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tt=MMX(d).d[0];\n\t\tMMX(d).b[0]=t & 0xff;\n\t\tMMX(d).b[1]=MMX(s).b[0];\n\t\tMMX(d).b[2]=(t >> 8) & 0xff;\n\t\tMMX(d).b[3]=MMX(s).b[1];\n\t\tMMX(d).b[4]=(t >> 16) & 0xff;\n\t\tMMX(d).b[5]=MMX(s).b[2];\n\t\tMMX(d).b[6]=(t >> 24) & 0xff;\n\t\tMMX(d).b[7]=MMX(s).b[3];\n\t} else {\n\t\tUINT32 s,t;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\ts = READ32(ea);\n\t\tt=MMX(d).d[0];\n\t\tMMX(d).b[0]=t & 0xff;\n\t\tMMX(d).b[1]=s & 0xff;\n\t\tMMX(d).b[2]=(t >> 8) & 0xff;\n\t\tMMX(d).b[3]=(s >> 8) & 0xff;\n\t\tMMX(d).b[4]=(t >> 16) & 0xff;\n\t\tMMX(d).b[5]=(s >> 16) & 0xff;\n\t\tMMX(d).b[6]=(t >> 24) & 0xff;\n\t\tMMX(d).b[7]=(s >> 24) & 0xff;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(punpcklwd_r64_r64m32)() // Opcode 0f 61\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT16 t;\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tt=MMX(d).w[1];\n\t\tMMX(d).w[0]=MMX(d).w[0];\n\t\tMMX(d).w[1]=MMX(s).w[0];\n\t\tMMX(d).w[2]=t;\n\t\tMMX(d).w[3]=MMX(s).w[1];\n\t} else {\n\t\tUINT32 s;\n\t\tUINT16 t;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\ts = READ32(ea);\n\t\tt=MMX(d).w[1];\n\t\tMMX(d).w[0]=MMX(d).w[0];\n\t\tMMX(d).w[1]=s & 0xffff;\n\t\tMMX(d).w[2]=t;\n\t\tMMX(d).w[3]=(s >> 16) & 0xffff;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(punpckldq_r64_r64m32)() // Opcode 0f 62\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tMMX(d).d[0]=MMX(d).d[0];\n\t\tMMX(d).d[1]=MMX(s).d[0];\n\t} else {\n\t\tUINT32 s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\ts = READ32(ea);\n\t\tMMX(d).d[0]=MMX(d).d[0];\n\t\tMMX(d).d[1]=s;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(packsswb_r64_rm64)() // Opcode 0f 63\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tMMX(d).c[0]=SaturatedSignedWordToSignedByte(MMX(d).s[0]);\n\t\tMMX(d).c[1]=SaturatedSignedWordToSignedByte(MMX(d).s[1]);\n\t\tMMX(d).c[2]=SaturatedSignedWordToSignedByte(MMX(d).s[2]);\n\t\tMMX(d).c[3]=SaturatedSignedWordToSignedByte(MMX(d).s[3]);\n\t\tMMX(d).c[4]=SaturatedSignedWordToSignedByte(MMX(s).s[0]);\n\t\tMMX(d).c[5]=SaturatedSignedWordToSignedByte(MMX(s).s[1]);\n\t\tMMX(d).c[6]=SaturatedSignedWordToSignedByte(MMX(s).s[2]);\n\t\tMMX(d).c[7]=SaturatedSignedWordToSignedByte(MMX(s).s[3]);\n\t} else {\n\t\tMMX_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX(d).c[0]=SaturatedSignedWordToSignedByte(MMX(d).s[0]);\n\t\tMMX(d).c[1]=SaturatedSignedWordToSignedByte(MMX(d).s[1]);\n\t\tMMX(d).c[2]=SaturatedSignedWordToSignedByte(MMX(d).s[2]);\n\t\tMMX(d).c[3]=SaturatedSignedWordToSignedByte(MMX(d).s[3]);\n\t\tMMX(d).c[4]=SaturatedSignedWordToSignedByte(s.s[0]);\n\t\tMMX(d).c[5]=SaturatedSignedWordToSignedByte(s.s[1]);\n\t\tMMX(d).c[6]=SaturatedSignedWordToSignedByte(s.s[2]);\n\t\tMMX(d).c[7]=SaturatedSignedWordToSignedByte(s.s[3]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pcmpgtb_r64_rm64)() // Opcode 0f 64\n{\n\tint c;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tfor (c=0;c <= 7;c++)\n\t\t\tMMX(d).b[c]=(MMX(d).c[c] > MMX(s).c[c]) ? 0xff : 0;\n\t} else {\n\t\tMMX_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (c=0;c <= 7;c++)\n\t\t\tMMX(d).b[c]=(MMX(d).c[c] > s.c[c]) ? 0xff : 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pcmpgtw_r64_rm64)() // Opcode 0f 65\n{\n\tint c;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tfor (c=0;c <= 3;c++)\n\t\t\tMMX(d).w[c]=(MMX(d).s[c] > MMX(s).s[c]) ? 0xffff : 0;\n\t} else {\n\t\tMMX_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (c=0;c <= 3;c++)\n\t\t\tMMX(d).w[c]=(MMX(d).s[c] > s.s[c]) ? 0xffff : 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(pcmpgtd_r64_rm64)() // Opcode 0f 66\n{\n\tint c;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tfor (c=0;c <= 1;c++)\n\t\t\tMMX(d).d[c]=(MMX(d).i[c] > MMX(s).i[c]) ? 0xffffffff : 0;\n\t} else {\n\t\tMMX_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (c=0;c <= 1;c++)\n\t\t\tMMX(d).d[c]=(MMX(d).i[c] > s.i[c]) ? 0xffffffff : 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(packuswb_r64_rm64)() // Opcode 0f 67\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tMMX(d).b[0]=SaturatedSignedWordToUnsignedByte(MMX(d).s[0]);\n\t\tMMX(d).b[1]=SaturatedSignedWordToUnsignedByte(MMX(d).s[1]);\n\t\tMMX(d).b[2]=SaturatedSignedWordToUnsignedByte(MMX(d).s[2]);\n\t\tMMX(d).b[3]=SaturatedSignedWordToUnsignedByte(MMX(d).s[3]);\n\t\tMMX(d).b[4]=SaturatedSignedWordToUnsignedByte(MMX(s).s[0]);\n\t\tMMX(d).b[5]=SaturatedSignedWordToUnsignedByte(MMX(s).s[1]);\n\t\tMMX(d).b[6]=SaturatedSignedWordToUnsignedByte(MMX(s).s[2]);\n\t\tMMX(d).b[7]=SaturatedSignedWordToUnsignedByte(MMX(s).s[3]);\n\t} else {\n\t\tMMX_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX(d).b[0]=SaturatedSignedWordToUnsignedByte(MMX(d).s[0]);\n\t\tMMX(d).b[1]=SaturatedSignedWordToUnsignedByte(MMX(d).s[1]);\n\t\tMMX(d).b[2]=SaturatedSignedWordToUnsignedByte(MMX(d).s[2]);\n\t\tMMX(d).b[3]=SaturatedSignedWordToUnsignedByte(MMX(d).s[3]);\n\t\tMMX(d).b[4]=SaturatedSignedWordToUnsignedByte(s.s[0]);\n\t\tMMX(d).b[5]=SaturatedSignedWordToUnsignedByte(s.s[1]);\n\t\tMMX(d).b[6]=SaturatedSignedWordToUnsignedByte(s.s[2]);\n\t\tMMX(d).b[7]=SaturatedSignedWordToUnsignedByte(s.s[3]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(punpckhbw_r64_rm64)() // Opcode 0f 68\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tMMX(d).b[0]=MMX(d).b[4];\n\t\tMMX(d).b[1]=MMX(s).b[4];\n\t\tMMX(d).b[2]=MMX(d).b[5];\n\t\tMMX(d).b[3]=MMX(s).b[5];\n\t\tMMX(d).b[4]=MMX(d).b[6];\n\t\tMMX(d).b[5]=MMX(s).b[6];\n\t\tMMX(d).b[6]=MMX(d).b[7];\n\t\tMMX(d).b[7]=MMX(s).b[7];\n\t} else {\n\t\tMMX_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX(d).b[0]=MMX(d).b[4];\n\t\tMMX(d).b[1]=s.b[4];\n\t\tMMX(d).b[2]=MMX(d).b[5];\n\t\tMMX(d).b[3]=s.b[5];\n\t\tMMX(d).b[4]=MMX(d).b[6];\n\t\tMMX(d).b[5]=s.b[6];\n\t\tMMX(d).b[6]=MMX(d).b[7];\n\t\tMMX(d).b[7]=s.b[7];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(punpckhwd_r64_rm64)() // Opcode 0f 69\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tMMX(d).w[0]=MMX(d).w[2];\n\t\tMMX(d).w[1]=MMX(s).w[2];\n\t\tMMX(d).w[2]=MMX(d).w[3];\n\t\tMMX(d).w[3]=MMX(s).w[3];\n\t} else {\n\t\tMMX_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX(d).w[0]=MMX(d).w[2];\n\t\tMMX(d).w[1]=s.w[2];\n\t\tMMX(d).w[2]=MMX(d).w[3];\n\t\tMMX(d).w[3]=s.w[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(punpckhdq_r64_rm64)() // Opcode 0f 6a\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tMMX(d).d[0]=MMX(d).d[1];\n\t\tMMX(d).d[1]=MMX(s).d[1];\n\t} else {\n\t\tMMX_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX(d).d[0]=MMX(d).d[1];\n\t\tMMX(d).d[1]=s.d[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void MMXOP(packssdw_r64_rm64)() // Opcode 0f 6b\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tMMX(d).s[0]=SaturatedSignedDwordToSignedWord(MMX(d).i[0]);\n\t\tMMX(d).s[1]=SaturatedSignedDwordToSignedWord(MMX(d).i[1]);\n\t\tMMX(d).s[2]=SaturatedSignedDwordToSignedWord(MMX(s).i[0]);\n\t\tMMX(d).s[3]=SaturatedSignedDwordToSignedWord(MMX(s).i[1]);\n\t} else {\n\t\tMMX_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX(d).s[0]=SaturatedSignedDwordToSignedWord(MMX(d).i[0]);\n\t\tMMX(d).s[1]=SaturatedSignedDwordToSignedWord(MMX(d).i[1]);\n\t\tMMX(d).s[2]=SaturatedSignedDwordToSignedWord(s.i[0]);\n\t\tMMX(d).s[3]=SaturatedSignedDwordToSignedWord(s.i[1]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(sse_group0fae)()  // Opcode 0f ae\n{\n\tUINT8 modm = FETCH();\n\tif( modm == 0xf8 ) {\n\t\tlogerror(\"Unemulated SFENCE opcode called\\n\");\n\t\tCYCLES(1); // sfence instruction\n\t} else if( modm == 0xf0 ) {\n\t\tCYCLES(1); // mfence instruction\n\t} else if( modm == 0xe8 ) {\n\t\tCYCLES(1); // lfence instruction\n\t} else if( modm < 0xc0 ) {\n\t\tUINT32 ea;\n\t\tswitch ( (modm & 0x38) >> 3 )\n\t\t{\n\t\t\tcase 2: // ldmxcsr m32\n\t\t\t\tea = GetEA(modm, 0);\n\t\t\t\tm_mxcsr = READ32(ea);\n\t\t\t\tbreak;\n\t\t\tcase 3: // stmxcsr m32\n\t\t\t\tea = GetEA(modm, 0);\n\t\t\t\tWRITE32(ea, m_mxcsr);\n\t\t\t\tbreak;\n\t\t\tcase 7: // clflush m8\n\t\t\t\tGetNonTranslatedEA(modm, NULL);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treport_invalid_modrm(\"sse_group0fae\", modm);\n\t\t}\n\t} else {\n\t\treport_invalid_modrm(\"sse_group0fae\", modm);\n\t}\n}\n\nstatic void SSEOP(cvttps2dq_r128_rm128)() // Opcode f3 0f 5b\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).i[0]=(INT32)XMM(modrm & 0x7).f[0];\n\t\tXMM((modrm >> 3) & 0x7).i[1]=(INT32)XMM(modrm & 0x7).f[1];\n\t\tXMM((modrm >> 3) & 0x7).i[2]=(INT32)XMM(modrm & 0x7).f[2];\n\t\tXMM((modrm >> 3) & 0x7).i[3]=(INT32)XMM(modrm & 0x7).f[3];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).i[0]=(INT32)src.f[0];\n\t\tXMM((modrm >> 3) & 0x7).i[1]=(INT32)src.f[1];\n\t\tXMM((modrm >> 3) & 0x7).i[2]=(INT32)src.f[2];\n\t\tXMM((modrm >> 3) & 0x7).i[3]=(INT32)src.f[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvtss2sd_r128_r128m32)() // Opcode f3 0f 5a\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = XMM(modrm & 0x7).f[0];\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\ts.d[0] = READ32(ea);\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = s.f[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvttss2si_r32_r128m32)() // Opcode f3 0f 2c\n{\n\tINT32 src;\n\tUINT8 modrm = FETCH(); // get mordm byte\n\tif( modrm >= 0xc0 ) { // if bits 7-6 are 11 the source is a xmm register (low doubleword)\n\t\tsrc = (INT32)XMM(modrm & 0x7).f[0^NATIVE_ENDIAN_VALUE_LE_BE(0,1)];\n\t} else { // otherwise is a memory address\n\t\tXMM_REG t;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tt.d[0] = READ32(ea);\n\t\tsrc = (INT32)t.f[0];\n\t}\n\tSTORE_REG32(modrm, (UINT32)src);\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvtss2si_r32_r128m32)() // Opcode f3 0f 2d\n{\n\tINT32 src;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tsrc = (INT32)XMM(modrm & 0x7).f[0];\n\t} else {\n\t\tXMM_REG t;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tt.d[0] = READ32(ea);\n\t\tsrc = (INT32)t.f[0];\n\t}\n\tSTORE_REG32(modrm, (UINT32)src);\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvtsi2ss_r128_rm32)() // Opcode f3 0f 2a\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = (INT32)LOAD_RM32(modrm);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = (INT32)READ32(ea);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvtpi2ps_r128_rm64)() // Opcode 0f 2a\n{\n\tUINT8 modrm = FETCH();\n\tMMXPROLOG();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = MMX(modrm & 0x7).i[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = MMX(modrm & 0x7).i[1];\n\t} else {\n\t\tMMX_REG r;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, r);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = r.i[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = r.i[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvttps2pi_r64_r128m64)() // Opcode 0f 2c\n{\n\tUINT8 modrm = FETCH();\n\tMMXPROLOG();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).i[0] = XMM(modrm & 0x7).f[0];\n\t\tMMX((modrm >> 3) & 0x7).i[1] = XMM(modrm & 0x7).f[1];\n\t} else {\n\t\tXMM_REG r;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, r);\n\t\tXMM((modrm >> 3) & 0x7).i[0] = r.f[0];\n\t\tXMM((modrm >> 3) & 0x7).i[1] = r.f[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvtps2pi_r64_r128m64)() // Opcode 0f 2d\n{\n\tUINT8 modrm = FETCH();\n\tMMXPROLOG();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).i[0] = XMM(modrm & 0x7).f[0];\n\t\tMMX((modrm >> 3) & 0x7).i[1] = XMM(modrm & 0x7).f[1];\n\t} else {\n\t\tXMM_REG r;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, r);\n\t\tXMM((modrm >> 3) & 0x7).i[0] = r.f[0];\n\t\tXMM((modrm >> 3) & 0x7).i[1] = r.f[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvtps2pd_r128_r128m64)() // Opcode 0f 5a\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = (double)XMM(modrm & 0x7).f[0];\n\t\tXMM((modrm >> 3) & 0x7).f64[1] = (double)XMM(modrm & 0x7).f[1];\n\t} else {\n\t\tMMX_REG r;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, r);\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = (double)r.f[0];\n\t\tXMM((modrm >> 3) & 0x7).f64[1] = (double)r.f[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvtdq2ps_r128_rm128)() // Opcode 0f 5b\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = (float)XMM(modrm & 0x7).i[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = (float)XMM(modrm & 0x7).i[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2] = (float)XMM(modrm & 0x7).i[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3] = (float)XMM(modrm & 0x7).i[3];\n\t} else {\n\t\tXMM_REG r;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, r);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = (float)r.i[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = (float)r.i[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2] = (float)r.i[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3] = (float)r.i[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cvtdq2pd_r128_r128m64)() // Opcode f3 0f e6\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = (double)XMM(modrm & 0x7).i[0];\n\t\tXMM((modrm >> 3) & 0x7).f64[1] = (double)XMM(modrm & 0x7).i[1];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tXMM((modrm >> 3) & 0x7).f64[0] = (double)s.i[0];\n\t\tXMM((modrm >> 3) & 0x7).f64[1] = (double)s.i[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movss_r128_rm128)() // Opcode f3 0f 10\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).d[0] = XMM(modrm & 0x7).d[0];\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tXMM((modrm >> 3) & 0x7).d[0] = READ32(ea);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movss_rm128_r128)() // Opcode f3 0f 11\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM(modrm & 0x7).d[0] = XMM((modrm >> 3) & 0x7).d[0];\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITE32(ea, XMM((modrm >> 3) & 0x7).d[0]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movsldup_r128_rm128)() // Opcode f3 0f 12\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).d[0] = XMM(modrm & 0x7).d[0];\n\t\tXMM((modrm >> 3) & 0x7).d[1] = XMM(modrm & 0x7).d[0];\n\t\tXMM((modrm >> 3) & 0x7).d[2] = XMM(modrm & 0x7).d[2];\n\t\tXMM((modrm >> 3) & 0x7).d[3] = XMM(modrm & 0x7).d[2];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).d[0] = src.d[0];\n\t\tXMM((modrm >> 3) & 0x7).d[1] = src.d[0];\n\t\tXMM((modrm >> 3) & 0x7).d[2] = src.d[2];\n\t\tXMM((modrm >> 3) & 0x7).d[3] = src.d[2];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movshdup_r128_rm128)() // Opcode f3 0f 16\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).d[0] = XMM(modrm & 0x7).d[1];\n\t\tXMM((modrm >> 3) & 0x7).d[1] = XMM(modrm & 0x7).d[1];\n\t\tXMM((modrm >> 3) & 0x7).d[2] = XMM(modrm & 0x7).d[3];\n\t\tXMM((modrm >> 3) & 0x7).d[3] = XMM(modrm & 0x7).d[3];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).d[0] = src.d[1];\n\t\tXMM((modrm >> 3) & 0x7).d[1] = src.d[1];\n\t\tXMM((modrm >> 3) & 0x7).d[2] = src.d[3];\n\t\tXMM((modrm >> 3) & 0x7).d[3] = src.d[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movaps_r128_rm128)() // Opcode 0f 28\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7) = XMM(modrm & 0x7);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, XMM((modrm >> 3) & 0x7));\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movaps_rm128_r128)() // Opcode 0f 29\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM(modrm & 0x7) = XMM((modrm >> 3) & 0x7);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITEXMM(ea, XMM((modrm >> 3) & 0x7));\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movups_r128_rm128)() // Opcode 0f 10\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7) = XMM(modrm & 0x7);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, XMM((modrm >> 3) & 0x7)); // address does not need to be 16-byte aligned\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movups_rm128_r128)() // Opcode 0f 11\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM(modrm & 0x7) = XMM((modrm >> 3) & 0x7);\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITEXMM(ea, XMM((modrm >> 3) & 0x7)); // address does not need to be 16-byte aligned\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movlps_r128_m64)() // Opcode 0f 12\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\t// unsupported by cpu\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM_LO64(ea, XMM((modrm >> 3) & 0x7));\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t}\n}\n\nstatic void SSEOP(movlps_m64_r128)() // Opcode 0f 13\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\t// unsupported by cpu\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITEXMM_LO64(ea, XMM((modrm >> 3) & 0x7));\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t}\n}\n\nstatic void SSEOP(movhps_r128_m64)() // Opcode 0f 16\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\t// unsupported by cpu\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM_HI64(ea, XMM((modrm >> 3) & 0x7));\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t}\n}\n\nstatic void SSEOP(movhps_m64_r128)() // Opcode 0f 17\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\t// unsupported by cpu\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITEXMM_HI64(ea, XMM((modrm >> 3) & 0x7));\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t}\n}\n\nstatic void SSEOP(movntps_m128_r128)() // Opcode 0f 2b\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\t// unsupported by cpu\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t} else {\n\t\t// since cache is not implemented\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITEXMM(ea, XMM((modrm >> 3) & 0x7));\n\t\tCYCLES(1);     // TODO: correct cycle count\n\t}\n}\n\nstatic void SSEOP(movmskps_r16_r128)() // Opcode 0f 50\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint b;\n\t\tb=(XMM(modrm & 0x7).d[0] >> 31) & 1;\n\t\tb=b | ((XMM(modrm & 0x7).d[1] >> 30) & 2);\n\t\tb=b | ((XMM(modrm & 0x7).d[2] >> 29) & 4);\n\t\tb=b | ((XMM(modrm & 0x7).d[3] >> 28) & 8);\n\t\tSTORE_REG16(modrm, b);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movmskps_r32_r128)() // Opcode 0f 50\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint b;\n\t\tb=(XMM(modrm & 0x7).d[0] >> 31) & 1;\n\t\tb=b | ((XMM(modrm & 0x7).d[1] >> 30) & 2);\n\t\tb=b | ((XMM(modrm & 0x7).d[2] >> 29) & 4);\n\t\tb=b | ((XMM(modrm & 0x7).d[3] >> 28) & 8);\n\t\tSTORE_REG32(modrm, b);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movq2dq_r128_r64)() // Opcode f3 0f d6\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).q[0] = MMX(modrm & 7).q;\n\t\tXMM((modrm >> 3) & 0x7).q[1] = 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movdqu_r128_rm128)() // Opcode f3 0f 6f\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).q[0] = XMM(modrm & 0x7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = XMM(modrm & 0x7).q[1];\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, XMM((modrm >> 3) & 0x7));\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movdqu_rm128_r128)() // Opcode f3 0f 7f\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM(modrm & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0];\n\t\tXMM(modrm & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1];\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tWRITEXMM(ea, XMM((modrm >> 3) & 0x7));\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(movq_r128_r128m64)() // Opcode f3 0f 7e\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).q[0] = XMM(modrm & 0x7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = 0;\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tXMM((modrm >> 3) & 0x7).q[0] = READ64(ea);\n\t\tXMM((modrm >> 3) & 0x7).q[1] = 0;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pmovmskb_r16_r64)() // Opcode 0f d7\n{\n\t//MMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint b;\n\t\tb=(MMX(modrm & 0x7).b[0] >> 7) & 1;\n\t\tb=b | ((MMX(modrm & 0x7).b[1] >> 6) & 2);\n\t\tb=b | ((MMX(modrm & 0x7).b[2] >> 5) & 4);\n\t\tb=b | ((MMX(modrm & 0x7).b[3] >> 4) & 8);\n\t\tb=b | ((MMX(modrm & 0x7).b[4] >> 3) & 16);\n\t\tb=b | ((MMX(modrm & 0x7).b[5] >> 2) & 32);\n\t\tb=b | ((MMX(modrm & 0x7).b[6] >> 1) & 64);\n\t\tb=b | ((MMX(modrm & 0x7).b[7] >> 0) & 128);\n\t\tSTORE_REG16(modrm, b);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pmovmskb_r32_r64)() // Opcode 0f d7\n{\n\t//MMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint b;\n\t\tb=(MMX(modrm & 0x7).b[0] >> 7) & 1;\n\t\tb=b | ((MMX(modrm & 0x7).b[1] >> 6) & 2);\n\t\tb=b | ((MMX(modrm & 0x7).b[2] >> 5) & 4);\n\t\tb=b | ((MMX(modrm & 0x7).b[3] >> 4) & 8);\n\t\tb=b | ((MMX(modrm & 0x7).b[4] >> 3) & 16);\n\t\tb=b | ((MMX(modrm & 0x7).b[5] >> 2) & 32);\n\t\tb=b | ((MMX(modrm & 0x7).b[6] >> 1) & 64);\n\t\tb=b | ((MMX(modrm & 0x7).b[7] >> 0) & 128);\n\t\tSTORE_REG32(modrm, b);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(xorps)() // Opcode 0f 57\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).d[0] = XMM((modrm >> 3) & 0x7).d[0] ^ XMM(modrm & 0x7).d[0];\n\t\tXMM((modrm >> 3) & 0x7).d[1] = XMM((modrm >> 3) & 0x7).d[1] ^ XMM(modrm & 0x7).d[1];\n\t\tXMM((modrm >> 3) & 0x7).d[2] = XMM((modrm >> 3) & 0x7).d[2] ^ XMM(modrm & 0x7).d[2];\n\t\tXMM((modrm >> 3) & 0x7).d[3] = XMM((modrm >> 3) & 0x7).d[3] ^ XMM(modrm & 0x7).d[3];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).d[0] = XMM((modrm >> 3) & 0x7).d[0] ^ src.d[0];\n\t\tXMM((modrm >> 3) & 0x7).d[1] = XMM((modrm >> 3) & 0x7).d[1] ^ src.d[1];\n\t\tXMM((modrm >> 3) & 0x7).d[2] = XMM((modrm >> 3) & 0x7).d[2] ^ src.d[2];\n\t\tXMM((modrm >> 3) & 0x7).d[3] = XMM((modrm >> 3) & 0x7).d[3] ^ src.d[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(addps)() // Opcode 0f 58\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] + XMM(modrm & 0x7).f[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] + XMM(modrm & 0x7).f[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] + XMM(modrm & 0x7).f[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] + XMM(modrm & 0x7).f[3];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] + src.f[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] + src.f[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] + src.f[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] + src.f[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(sqrtps_r128_rm128)() // Opcode 0f 51\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = sqrt(XMM(modrm & 0x7).f[0]);\n\t\tXMM((modrm >> 3) & 0x7).f[1] = sqrt(XMM(modrm & 0x7).f[1]);\n\t\tXMM((modrm >> 3) & 0x7).f[2] = sqrt(XMM(modrm & 0x7).f[2]);\n\t\tXMM((modrm >> 3) & 0x7).f[3] = sqrt(XMM(modrm & 0x7).f[3]);\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = sqrt(src.f[0]);\n\t\tXMM((modrm >> 3) & 0x7).f[1] = sqrt(src.f[1]);\n\t\tXMM((modrm >> 3) & 0x7).f[2] = sqrt(src.f[2]);\n\t\tXMM((modrm >> 3) & 0x7).f[3] = sqrt(src.f[3]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(rsqrtps_r128_rm128)() // Opcode 0f 52\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = 1.0 / sqrt(XMM(modrm & 0x7).f[0]);\n\t\tXMM((modrm >> 3) & 0x7).f[1] = 1.0 / sqrt(XMM(modrm & 0x7).f[1]);\n\t\tXMM((modrm >> 3) & 0x7).f[2] = 1.0 / sqrt(XMM(modrm & 0x7).f[2]);\n\t\tXMM((modrm >> 3) & 0x7).f[3] = 1.0 / sqrt(XMM(modrm & 0x7).f[3]);\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = 1.0 / sqrt(src.f[0]);\n\t\tXMM((modrm >> 3) & 0x7).f[1] = 1.0 / sqrt(src.f[1]);\n\t\tXMM((modrm >> 3) & 0x7).f[2] = 1.0 / sqrt(src.f[2]);\n\t\tXMM((modrm >> 3) & 0x7).f[3] = 1.0 / sqrt(src.f[3]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(rcpps_r128_rm128)() // Opcode 0f 53\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = 1.0 / XMM(modrm & 0x7).f[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = 1.0 / XMM(modrm & 0x7).f[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2] = 1.0 / XMM(modrm & 0x7).f[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3] = 1.0 / XMM(modrm & 0x7).f[3];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = 1.0 / src.f[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = 1.0 / src.f[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2] = 1.0 / src.f[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3] = 1.0 / src.f[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(andps_r128_rm128)() // Opcode 0f 54\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] & XMM(modrm & 0x7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] & XMM(modrm & 0x7).q[1];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] & src.q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] & src.q[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(andnps_r128_rm128)() // Opcode 0f 55\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).q[0] = ~(XMM((modrm >> 3) & 0x7).q[0]) & XMM(modrm & 0x7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = ~(XMM((modrm >> 3) & 0x7).q[1]) & XMM(modrm & 0x7).q[1];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).q[0] = ~(XMM((modrm >> 3) & 0x7).q[0]) & src.q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = ~(XMM((modrm >> 3) & 0x7).q[1]) & src.q[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(orps_r128_rm128)() // Opcode 0f 56\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] | XMM(modrm & 0x7).q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] | XMM(modrm & 0x7).q[1];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).q[0] = XMM((modrm >> 3) & 0x7).q[0] | src.q[0];\n\t\tXMM((modrm >> 3) & 0x7).q[1] = XMM((modrm >> 3) & 0x7).q[1] | src.q[1];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(mulps)() // Opcode 0f 59 ????\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] * XMM(modrm & 0x7).f[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] * XMM(modrm & 0x7).f[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] * XMM(modrm & 0x7).f[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] * XMM(modrm & 0x7).f[3];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] * src.f[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] * src.f[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] * src.f[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] * src.f[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(subps)() // Opcode 0f 5c\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] - XMM(modrm & 0x7).f[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] - XMM(modrm & 0x7).f[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] - XMM(modrm & 0x7).f[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] - XMM(modrm & 0x7).f[3];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] - src.f[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] - src.f[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] - src.f[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] - src.f[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nINLINE float sse_min_single(float src1, float src2)\n{\n\t/*if ((src1 == 0) && (src2 == 0))\n\t    return src2;\n\tif (src1 = SNaN)\n\t    return src2;\n\tif (src2 = SNaN)\n\t    return src2;*/\n\tif (src1 < src2)\n\t\treturn src1;\n\treturn src2;\n}\n\nstatic void SSEOP(minps)() // Opcode 0f 5d\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = sse_min_single(XMM((modrm >> 3) & 0x7).f[0], XMM(modrm & 0x7).f[0]);\n\t\tXMM((modrm >> 3) & 0x7).f[1] = sse_min_single(XMM((modrm >> 3) & 0x7).f[1], XMM(modrm & 0x7).f[1]);\n\t\tXMM((modrm >> 3) & 0x7).f[2] = sse_min_single(XMM((modrm >> 3) & 0x7).f[2], XMM(modrm & 0x7).f[2]);\n\t\tXMM((modrm >> 3) & 0x7).f[3] = sse_min_single(XMM((modrm >> 3) & 0x7).f[3], XMM(modrm & 0x7).f[3]);\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = sse_min_single(XMM((modrm >> 3) & 0x7).f[0], src.f[0]);\n\t\tXMM((modrm >> 3) & 0x7).f[1] = sse_min_single(XMM((modrm >> 3) & 0x7).f[1], src.f[1]);\n\t\tXMM((modrm >> 3) & 0x7).f[2] = sse_min_single(XMM((modrm >> 3) & 0x7).f[2], src.f[2]);\n\t\tXMM((modrm >> 3) & 0x7).f[3] = sse_min_single(XMM((modrm >> 3) & 0x7).f[3], src.f[3]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(divps)() // Opcode 0f 5e\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] / XMM(modrm & 0x7).f[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] / XMM(modrm & 0x7).f[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] / XMM(modrm & 0x7).f[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] / XMM(modrm & 0x7).f[3];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] / src.f[0];\n\t\tXMM((modrm >> 3) & 0x7).f[1] = XMM((modrm >> 3) & 0x7).f[1] / src.f[1];\n\t\tXMM((modrm >> 3) & 0x7).f[2] = XMM((modrm >> 3) & 0x7).f[2] / src.f[2];\n\t\tXMM((modrm >> 3) & 0x7).f[3] = XMM((modrm >> 3) & 0x7).f[3] / src.f[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nINLINE float sse_max_single(float src1, float src2)\n{\n\t/*if ((src1 == 0) && (src2 == 0))\n\t    return src2;\n\tif (src1 = SNaN)\n\t    return src2;\n\tif (src2 = SNaN)\n\t    return src2;*/\n\tif (src1 > src2)\n\t\treturn src1;\n\treturn src2;\n}\n\nstatic void SSEOP(maxps)() // Opcode 0f 5f\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = sse_max_single(XMM((modrm >> 3) & 0x7).f[0], XMM(modrm & 0x7).f[0]);\n\t\tXMM((modrm >> 3) & 0x7).f[1] = sse_max_single(XMM((modrm >> 3) & 0x7).f[1], XMM(modrm & 0x7).f[1]);\n\t\tXMM((modrm >> 3) & 0x7).f[2] = sse_max_single(XMM((modrm >> 3) & 0x7).f[2], XMM(modrm & 0x7).f[2]);\n\t\tXMM((modrm >> 3) & 0x7).f[3] = sse_max_single(XMM((modrm >> 3) & 0x7).f[3], XMM(modrm & 0x7).f[3]);\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = sse_max_single(XMM((modrm >> 3) & 0x7).f[0], src.f[0]);\n\t\tXMM((modrm >> 3) & 0x7).f[1] = sse_max_single(XMM((modrm >> 3) & 0x7).f[1], src.f[1]);\n\t\tXMM((modrm >> 3) & 0x7).f[2] = sse_max_single(XMM((modrm >> 3) & 0x7).f[2], src.f[2]);\n\t\tXMM((modrm >> 3) & 0x7).f[3] = sse_max_single(XMM((modrm >> 3) & 0x7).f[3], src.f[3]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(maxss_r128_r128m32)() // Opcode f3 0f 5f\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = sse_max_single(XMM((modrm >> 3) & 0x7).f[0], XMM(modrm & 0x7).f[0]);\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tsrc.d[0]=READ32(ea);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = sse_max_single(XMM((modrm >> 3) & 0x7).f[0], src.f[0]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(addss)() // Opcode f3 0f 58\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] + XMM(modrm & 0x7).f[0];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] + src.f[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(subss)() // Opcode f3 0f 5c\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] - XMM(modrm & 0x7).f[0];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] - src.f[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(mulss)() // Opcode f3 0f 5e\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] * XMM(modrm & 0x7).f[0];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] * src.f[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(divss)() // Opcode 0f 59\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] / XMM(modrm & 0x7).f[0];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] / src.f[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(rcpss_r128_r128m32)() // Opcode f3 0f 53\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = 1.0 / XMM(modrm & 0x7).f[0];\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\ts.d[0]=READ32(ea);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = 1.0 / s.f[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(sqrtss_r128_r128m32)() // Opcode f3 0f 51\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = sqrt(XMM(modrm & 0x7).f[0]);\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\ts.d[0]=READ32(ea);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = sqrt(s.f[0]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(rsqrtss_r128_r128m32)() // Opcode f3 0f 52\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = 1.0 / sqrt(XMM(modrm & 0x7).f[0]);\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\ts.d[0]=READ32(ea);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = 1.0 / sqrt(s.f[0]);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(minss_r128_r128m32)() // Opcode f3 0f 5d\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] < XMM(modrm & 0x7).f[0] ? XMM((modrm >> 3) & 0x7).f[0] : XMM(modrm & 0x7).f[0];\n\t} else {\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\ts.d[0] = READ32(ea);\n\t\tXMM((modrm >> 3) & 0x7).f[0] = XMM((modrm >> 3) & 0x7).f[0] < s.f[0] ? XMM((modrm >> 3) & 0x7).f[0] : s.f[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(comiss_r128_r128m32)() // Opcode 0f 2f\n{\n\tfloat32 a,b;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\ta = XMM((modrm >> 3) & 0x7).d[0];\n\t\tb = XMM(modrm & 0x7).d[0];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\ta = XMM((modrm >> 3) & 0x7).d[0];\n\t\tb = src.d[0];\n\t}\n\tm_OF=0;\n\tm_SF=0;\n\tm_AF=0;\n\tif (float32_is_nan(a) || float32_is_nan(b))\n\t{\n\t\tm_ZF = 1;\n\t\tm_PF = 1;\n\t\tm_CF = 1;\n\t}\n\telse\n\t{\n\t\tm_ZF = 0;\n\t\tm_PF = 0;\n\t\tm_CF = 0;\n\t\tif (float32_eq(a, b))\n\t\t\tm_ZF = 1;\n\t\tif (float32_lt(a, b))\n\t\t\tm_CF = 1;\n\t}\n\t// should generate exception when at least one of the operands is either QNaN or SNaN\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(ucomiss_r128_r128m32)() // Opcode 0f 2e\n{\n\tfloat32 a,b;\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\ta = XMM((modrm >> 3) & 0x7).d[0];\n\t\tb = XMM(modrm & 0x7).d[0];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\ta = XMM((modrm >> 3) & 0x7).d[0];\n\t\tb = src.d[0];\n\t}\n\tm_OF=0;\n\tm_SF=0;\n\tm_AF=0;\n\tif (float32_is_nan(a) || float32_is_nan(b))\n\t{\n\t\tm_ZF = 1;\n\t\tm_PF = 1;\n\t\tm_CF = 1;\n\t}\n\telse\n\t{\n\t\tm_ZF = 0;\n\t\tm_PF = 0;\n\t\tm_CF = 0;\n\t\tif (float32_eq(a, b))\n\t\t\tm_ZF = 1;\n\t\tif (float32_lt(a, b))\n\t\t\tm_CF = 1;\n\t}\n\t// should generate exception when at least one of the operands is SNaN\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(shufps)() // Opcode 0f 67\n{\n\tUINT8 modrm = FETCH();\n\tUINT8 sel = FETCH();\n\tint m1,m2,m3,m4;\n\tint s,d;\n\tm1=sel & 3;\n\tm2=(sel >> 2) & 3;\n\tm3=(sel >> 4) & 3;\n\tm4=(sel >> 6) & 3;\n\ts=modrm & 0x7;\n\td=(modrm >> 3) & 0x7;\n\tif( modrm >= 0xc0 ) {\n\t\tUINT32 t;\n\t\tt=XMM(d).d[m1];\n\t\tXMM(d).d[1]=XMM(d).d[m2];\n\t\tXMM(d).d[0]=t;\n\t\tXMM(d).d[2]=XMM(s).d[m3];\n\t\tXMM(d).d[3]=XMM(s).d[m4];\n\t} else {\n\t\tUINT32 t;\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tt=XMM(d).d[m1];\n\t\tXMM(d).d[1]=XMM(d).d[m2];\n\t\tXMM(d).d[0]=t;\n\t\tXMM(d).d[2]=src.d[m3];\n\t\tXMM(d).d[3]=src.d[m4];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(unpcklps_r128_rm128)() // Opcode 0f 14\n{\n\tUINT8 modrm = FETCH();\n\tint s,d;\n\ts=modrm & 0x7;\n\td=(modrm >> 3) & 0x7;\n\tif( modrm >= 0xc0 ) {\n\t\tXMM(d).d[3]=XMM(s).d[1];\n\t\tXMM(d).d[2]=XMM(d).d[1];\n\t\tXMM(d).d[1]=XMM(s).d[0];\n\t\t//XMM(d).d[0]=XMM(d).d[0];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM(d).d[3]=src.d[1];\n\t\tXMM(d).d[2]=XMM(d).d[1];\n\t\tXMM(d).d[1]=src.d[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(unpckhps_r128_rm128)() // Opcode 0f 15\n{\n\tUINT8 modrm = FETCH();\n\tint s,d;\n\ts=modrm & 0x7;\n\td=(modrm >> 3) & 0x7;\n\tif( modrm >= 0xc0 ) {\n\t\tXMM(d).d[0]=XMM(d).d[2];\n\t\tXMM(d).d[1]=XMM(s).d[2];\n\t\tXMM(d).d[2]=XMM(d).d[3];\n\t\tXMM(d).d[3]=XMM(s).d[3];\n\t} else {\n\t\tXMM_REG src;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADXMM(ea, src);\n\t\tXMM(d).d[0]=XMM(d).d[2];\n\t\tXMM(d).d[1]=src.d[2];\n\t\tXMM(d).d[2]=XMM(d).d[3];\n\t\tXMM(d).d[3]=src.d[3];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nINLINE bool sse_issingleordered(float op1, float op2)\n{\n\t// TODO: true when at least one of the two source operands being compared is a NaN\n\treturn (op1 != op1) || (op1 != op2);\n}\n\nINLINE bool sse_issingleunordered(float op1, float op2)\n{\n\t// TODO: true when neither source operand is a NaN\n\treturn !((op1 != op1) || (op1 != op2));\n}\n\nINLINE void sse_predicate_compare_single(UINT8 imm8, XMM_REG d, XMM_REG s)\n{\n\tswitch (imm8 & 7)\n\t{\n\tcase 0:\n\t\ts.d[0]=s.f[0] == s.f[0] ? 0xffffffff : 0;\n\t\td.d[1]=d.f[1] == s.f[1] ? 0xffffffff : 0;\n\t\td.d[2]=d.f[2] == s.f[2] ? 0xffffffff : 0;\n\t\td.d[3]=d.f[3] == s.f[3] ? 0xffffffff : 0;\n\t\tbreak;\n\tcase 1:\n\t\td.d[0]=d.f[0] < s.f[0] ? 0xffffffff : 0;\n\t\td.d[1]=d.f[1] < s.f[1] ? 0xffffffff : 0;\n\t\td.d[2]=d.f[2] < s.f[2] ? 0xffffffff : 0;\n\t\td.d[3]=d.f[3] < s.f[3] ? 0xffffffff : 0;\n\t\tbreak;\n\tcase 2:\n\t\td.d[0]=d.f[0] <= s.f[0] ? 0xffffffff : 0;\n\t\td.d[1]=d.f[1] <= s.f[1] ? 0xffffffff : 0;\n\t\td.d[2]=d.f[2] <= s.f[2] ? 0xffffffff : 0;\n\t\td.d[3]=d.f[3] <= s.f[3] ? 0xffffffff : 0;\n\t\tbreak;\n\tcase 3:\n\t\td.d[0]=sse_issingleunordered(d.f[0], s.f[0]) ? 0xffffffff : 0;\n\t\td.d[1]=sse_issingleunordered(d.f[1], s.f[1]) ? 0xffffffff : 0;\n\t\td.d[2]=sse_issingleunordered(d.f[2], s.f[2]) ? 0xffffffff : 0;\n\t\td.d[3]=sse_issingleunordered(d.f[3], s.f[3]) ? 0xffffffff : 0;\n\t\tbreak;\n\tcase 4:\n\t\td.d[0]=d.f[0] != s.f[0] ? 0xffffffff : 0;\n\t\td.d[1]=d.f[1] != s.f[1] ? 0xffffffff : 0;\n\t\td.d[2]=d.f[2] != s.f[2] ? 0xffffffff : 0;\n\t\td.d[3]=d.f[3] != s.f[3] ? 0xffffffff : 0;\n\t\tbreak;\n\tcase 5:\n\t\td.d[0]=d.f[0] < s.f[0] ? 0 : 0xffffffff;\n\t\td.d[1]=d.f[1] < s.f[1] ? 0 : 0xffffffff;\n\t\td.d[2]=d.f[2] < s.f[2] ? 0 : 0xffffffff;\n\t\td.d[3]=d.f[3] < s.f[3] ? 0 : 0xffffffff;\n\t\tbreak;\n\tcase 6:\n\t\td.d[0]=d.f[0] <= s.f[0] ? 0 : 0xffffffff;\n\t\td.d[1]=d.f[1] <= s.f[1] ? 0 : 0xffffffff;\n\t\td.d[2]=d.f[2] <= s.f[2] ? 0 : 0xffffffff;\n\t\td.d[3]=d.f[3] <= s.f[3] ? 0 : 0xffffffff;\n\t\tbreak;\n\tcase 7:\n\t\td.d[0]=sse_issingleordered(d.f[0], s.f[0]) ? 0xffffffff : 0;\n\t\td.d[1]=sse_issingleordered(d.f[1], s.f[1]) ? 0xffffffff : 0;\n\t\td.d[2]=sse_issingleordered(d.f[2], s.f[2]) ? 0xffffffff : 0;\n\t\td.d[3]=sse_issingleordered(d.f[3], s.f[3]) ? 0xffffffff : 0;\n\t\tbreak;\n\t}\n}\n\nINLINE void sse_predicate_compare_single_scalar(UINT8 imm8, XMM_REG d, XMM_REG s)\n{\n\tswitch (imm8 & 7)\n\t{\n\tcase 0:\n\t\ts.d[0]=s.f[0] == s.f[0] ? 0xffffffff : 0;\n\t\tbreak;\n\tcase 1:\n\t\td.d[0]=d.f[0] < s.f[0] ? 0xffffffff : 0;\n\t\tbreak;\n\tcase 2:\n\t\td.d[0]=d.f[0] <= s.f[0] ? 0xffffffff : 0;\n\t\tbreak;\n\tcase 3:\n\t\td.d[0]=sse_issingleunordered(d.f[0], s.f[0]) ? 0xffffffff : 0;\n\t\tbreak;\n\tcase 4:\n\t\td.d[0]=d.f[0] != s.f[0] ? 0xffffffff : 0;\n\t\tbreak;\n\tcase 5:\n\t\td.d[0]=d.f[0] < s.f[0] ? 0 : 0xffffffff;\n\t\tbreak;\n\tcase 6:\n\t\td.d[0]=d.f[0] <= s.f[0] ? 0 : 0xffffffff;\n\t\tbreak;\n\tcase 7:\n\t\td.d[0]=sse_issingleordered(d.f[0], s.f[0]) ? 0xffffffff : 0;\n\t\tbreak;\n\t}\n}\n\nstatic void SSEOP(cmpps_r128_rm128_i8)() // Opcode 0f c2\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\tUINT8 imm8 = FETCH();\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tsse_predicate_compare_single(imm8, XMM(d), XMM(s));\n\t} else {\n\t\tint d;\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tUINT8 imm8 = FETCH();\n\t\tREADXMM(ea, s);\n\t\td=(modrm >> 3) & 0x7;\n\t\tsse_predicate_compare_single(imm8, XMM(d), s);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(cmpss_r128_r128m32_i8)() // Opcode f3 0f c2\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tint s,d;\n\t\tUINT8 imm8 = FETCH();\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tsse_predicate_compare_single_scalar(imm8, XMM(d), XMM(s));\n\t} else {\n\t\tint d;\n\t\tXMM_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tUINT8 imm8 = FETCH();\n\t\ts.d[0]=READ32(ea);\n\t\td=(modrm >> 3) & 0x7;\n\t\tsse_predicate_compare_single_scalar(imm8, XMM(d), s);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pinsrw_r64_r16m16_i8)() // Opcode 0f c4\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT8 imm8 = FETCH();\n\t\tUINT16 v = LOAD_RM16(modrm);\n\t\tif (m_xmm_operand_size)\n\t\t\tXMM((modrm >> 3) & 0x7).w[imm8 & 7] = v;\n\t\telse\n\t\t\tMMX((modrm >> 3) & 0x7).w[imm8 & 3] = v;\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tUINT8 imm8 = FETCH();\n\t\tUINT16 v = READ16(ea);\n\t\tif (m_xmm_operand_size)\n\t\t\tXMM((modrm >> 3) & 0x7).w[imm8 & 7] = v;\n\t\telse\n\t\t\tMMX((modrm >> 3) & 0x7).w[imm8 & 3] = v;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pinsrw_r64_r32m16_i8)() // Opcode 0f c4\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT8 imm8 = FETCH();\n\t\tUINT16 v = (UINT16)LOAD_RM32(modrm);\n\t\tif (m_xmm_operand_size)\n\t\t\tXMM((modrm >> 3) & 0x7).w[imm8 & 7] = v;\n\t\telse\n\t\t\tMMX((modrm >> 3) & 0x7).w[imm8 & 3] = v;\n\t} else {\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tUINT8 imm8 = FETCH();\n\t\tUINT16 v = READ16(ea);\n\t\tif (m_xmm_operand_size)\n\t\t\tXMM((modrm >> 3) & 0x7).w[imm8 & 7] = v;\n\t\telse\n\t\t\tMMX((modrm >> 3) & 0x7).w[imm8 & 3] = v;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pextrw_r16_r64_i8)() // Opcode 0f c5\n{\n\t//MMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT8 imm8 = FETCH();\n\t\tif (m_xmm_operand_size)\n\t\t\tSTORE_REG16(modrm, XMM(modrm & 0x7).w[imm8 & 7]);\n\t\telse\n\t\t\tSTORE_REG16(modrm, MMX(modrm & 0x7).w[imm8 & 3]);\n\t} else {\n\t\t//UINT8 imm8 = FETCH();\n\t\treport_invalid_modrm(\"pextrw_r16_r64_i8\", modrm);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pextrw_r32_r64_i8)() // Opcode 0f c5\n{\n\t//MMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tUINT8 imm8 = FETCH();\n\t\tif (m_xmm_operand_size)\n\t\t\tSTORE_REG32(modrm, XMM(modrm & 0x7).w[imm8 & 7]);\n\t\telse\n\t\t\tSTORE_REG32(modrm, MMX(modrm & 0x7).w[imm8 & 3]);\n\t} else {\n\t\t//UINT8 imm8 = FETCH();\n\t\treport_invalid_modrm(\"pextrw_r32_r64_i8\", modrm);\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pminub_r64_rm64)() // Opcode 0f da\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n] = MMX((modrm >> 3) & 0x7).b[n] < MMX(modrm & 0x7).b[n] ? MMX((modrm >> 3) & 0x7).b[n] : MMX(modrm & 0x7).b[n];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n] = MMX((modrm >> 3) & 0x7).b[n] < s.b[n] ? MMX((modrm >> 3) & 0x7).b[n] : s.b[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pmaxub_r64_rm64)() // Opcode 0f de\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n] = MMX((modrm >> 3) & 0x7).b[n] > MMX(modrm & 0x7).b[n] ? MMX((modrm >> 3) & 0x7).b[n] : MMX(modrm & 0x7).b[n];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n] = MMX((modrm >> 3) & 0x7).b[n] > s.b[n] ? MMX((modrm >> 3) & 0x7).b[n] : s.b[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pavgb_r64_rm64)() // Opcode 0f e0\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n] = ((UINT16)MMX((modrm >> 3) & 0x7).b[n] + (UINT16)MMX(modrm & 0x7).b[n] + 1) >> 1;\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 8;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).b[n] = ((UINT16)MMX((modrm >> 3) & 0x7).b[n] + (UINT16)s.b[n] + 1) >> 1;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pavgw_r64_rm64)() // Opcode 0f e3\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).w[n] = ((UINT32)MMX((modrm >> 3) & 0x7).w[n] + (UINT32)MMX(modrm & 0x7).w[n] + 1) >> 1;\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).w[n] = ((UINT32)MMX((modrm >> 3) & 0x7).w[n] + (UINT32)s.w[n] + 1) >> 1;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pmulhuw_r64_rm64)()  // Opcode 0f e4\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).w[0]=((UINT32)MMX((modrm >> 3) & 0x7).w[0]*(UINT32)MMX(modrm & 7).w[0]) >> 16;\n\t\tMMX((modrm >> 3) & 0x7).w[1]=((UINT32)MMX((modrm >> 3) & 0x7).w[1]*(UINT32)MMX(modrm & 7).w[1]) >> 16;\n\t\tMMX((modrm >> 3) & 0x7).w[2]=((UINT32)MMX((modrm >> 3) & 0x7).w[2]*(UINT32)MMX(modrm & 7).w[2]) >> 16;\n\t\tMMX((modrm >> 3) & 0x7).w[3]=((UINT32)MMX((modrm >> 3) & 0x7).w[3]*(UINT32)MMX(modrm & 7).w[3]) >> 16;\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX((modrm >> 3) & 0x7).w[0]=((UINT32)MMX((modrm >> 3) & 0x7).w[0]*(UINT32)s.w[0]) >> 16;\n\t\tMMX((modrm >> 3) & 0x7).w[1]=((UINT32)MMX((modrm >> 3) & 0x7).w[1]*(UINT32)s.w[1]) >> 16;\n\t\tMMX((modrm >> 3) & 0x7).w[2]=((UINT32)MMX((modrm >> 3) & 0x7).w[2]*(UINT32)s.w[2]) >> 16;\n\t\tMMX((modrm >> 3) & 0x7).w[3]=((UINT32)MMX((modrm >> 3) & 0x7).w[3]*(UINT32)s.w[3]) >> 16;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pminsw_r64_rm64)() // Opcode 0f ea\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).s[n] = MMX((modrm >> 3) & 0x7).s[n] < MMX(modrm & 0x7).s[n] ? MMX((modrm >> 3) & 0x7).s[n] : MMX(modrm & 0x7).s[n];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).s[n] = MMX((modrm >> 3) & 0x7).s[n] < s.s[n] ? MMX((modrm >> 3) & 0x7).s[n] : s.s[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pmaxsw_r64_rm64)() // Opcode 0f ee\n{\n\tint n;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).s[n] = MMX((modrm >> 3) & 0x7).s[n] > MMX(modrm & 0x7).s[n] ? MMX((modrm >> 3) & 0x7).s[n] : MMX(modrm & 0x7).s[n];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tfor (n=0;n < 4;n++)\n\t\t\tMMX((modrm >> 3) & 0x7).s[n] = MMX((modrm >> 3) & 0x7).s[n] > s.s[n] ? MMX((modrm >> 3) & 0x7).s[n] : s.s[n];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pmuludq_r64_rm64)() // Opcode 0f f4\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).q = (UINT64)MMX((modrm >> 3) & 0x7).d[0] * (UINT64)MMX(modrm & 0x7).d[0];\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX((modrm >> 3) & 0x7).q = (UINT64)MMX((modrm >> 3) & 0x7).d[0] * (UINT64)s.d[0];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(psadbw_r64_rm64)() // Opcode 0f f6\n{\n\tint n;\n\tINT32 temp;\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\ttemp=0;\n\t\tfor (n=0;n < 8;n++)\n\t\t\ttemp += abs((INT32)MMX((modrm >> 3) & 0x7).b[n] - (INT32)MMX(modrm & 0x7).b[n]);\n\t\tMMX((modrm >> 3) & 0x7).l=(UINT64)temp & 0xffff;\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\ttemp=0;\n\t\tfor (n=0;n < 8;n++)\n\t\t\ttemp += abs((INT32)MMX((modrm >> 3) & 0x7).b[n] - (INT32)s.b[n]);\n\t\tMMX((modrm >> 3) & 0x7).l=(UINT64)temp & 0xffff;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(psubq_r64_rm64)()  // Opcode 0f fb\n{\n\tMMXPROLOG();\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q - MMX(modrm & 7).q;\n\t} else {\n\t\tMMX_REG s;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tREADMMX(ea, s);\n\t\tMMX((modrm >> 3) & 0x7).q=MMX((modrm >> 3) & 0x7).q - s.q;\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n\nstatic void SSEOP(pshufhw_r128_rm128_i8)() // Opcode f3 0f 70\n{\n\tUINT8 modrm = FETCH();\n\tif( modrm >= 0xc0 ) {\n\t\tXMM_REG t;\n\t\tint s,d;\n\t\tUINT8 imm8 = FETCH();\n\t\ts=modrm & 0x7;\n\t\td=(modrm >> 3) & 0x7;\n\t\tt.q[0]=XMM(s).q[1];\n\t\tXMM(d).q[0]=XMM(s).q[0];\n\t\tXMM(d).w[4]=t.w[imm8 & 3];\n\t\tXMM(d).w[5]=t.w[(imm8 >> 2) & 3];\n\t\tXMM(d).w[6]=t.w[(imm8 >> 4) & 3];\n\t\tXMM(d).w[7]=t.w[(imm8 >> 6) & 3];\n\t} else {\n\t\tXMM_REG s;\n\t\tint d=(modrm >> 3) & 0x7;\n\t\tUINT32 ea = GetEA(modrm, 0);\n\t\tUINT8 imm8 = FETCH();\n\t\tREADXMM(ea, s);\n\t\tXMM(d).q[0]=s.q[0];\n\t\tXMM(d).w[4]=s.w[4 + (imm8 & 3)];\n\t\tXMM(d).w[5]=s.w[4 + ((imm8 >> 2) & 3)];\n\t\tXMM(d).w[6]=s.w[4 + ((imm8 >> 4) & 3)];\n\t\tXMM(d).w[7]=s.w[4 + ((imm8 >> 6) & 3)];\n\t}\n\tCYCLES(1);     // TODO: correct cycle count\n}\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386.old/readme_msdos_player.txt",
    "content": "Based on MAME 0.152.\nFixes in MAME 0.154 and 0.157 are applied.\n\ni386_state are removed and all its members are changed to global variables.\nAll registers can be accessed directly without cpustate->.\n\ncycle_table_rm/pm are changed from dynamic array to static array.\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i386.old/x87ops.c",
    "content": "/***************************************************************************\n\n    x87 FPU emulation\n\n    TODO:\n     - 80-bit precision for F2XM1, FYL2X, FPATAN\n     - Figure out why SoftFloat trig extensions produce bad values\n     - Cycle counts for all processors (currently using 486 counts)\n     - Precision-dependent cycle counts for divide instructions\n     - Last instruction, operand pointers etc.\n     - Fix FLDENV, FSTENV, FSAVE, FRSTOR and FPREM\n     - Status word C2 updates to reflect round up/down\n     - Handling of invalid and denormal numbers\n     - Remove redundant operand checks\n     - Exceptions\n\n***************************************************************************/\n\n#include <math.h>\n\n\n/*************************************\n *\n * Defines\n *\n *************************************/\n\n#define X87_SW_IE               0x0001\n#define X87_SW_DE               0x0002\n#define X87_SW_ZE               0x0004\n#define X87_SW_OE               0x0008\n#define X87_SW_UE               0x0010\n#define X87_SW_PE               0x0020\n#define X87_SW_SF               0x0040\n#define X87_SW_ES               0x0080\n#define X87_SW_C0               0x0100\n#define X87_SW_C1               0x0200\n#define X87_SW_C2               0x0400\n#define X87_SW_TOP_SHIFT        11\n#define X87_SW_TOP_MASK         7\n#define X87_SW_C3               0x4000\n#define X87_SW_BUSY             0x8000\n\n#define X87_CW_IM               0x0001\n#define X87_CW_DM               0x0002\n#define X87_CW_ZM               0x0004\n#define X87_CW_OM               0x0008\n#define X87_CW_UM               0x0010\n#define X87_CW_PM               0x0020\n#define X87_CW_PC_SHIFT         8\n#define X87_CW_PC_MASK          3\n#define X87_CW_PC_SINGLE        0\n#define X87_CW_PC_DOUBLE        2\n#define X87_CW_PC_EXTEND        3\n#define X87_CW_RC_SHIFT         10\n#define X87_CW_RC_MASK          3\n#define X87_CW_RC_NEAREST       0\n#define X87_CW_RC_DOWN          1\n#define X87_CW_RC_UP            2\n#define X87_CW_RC_ZERO          3\n\n#define X87_TW_MASK             3\n#define X87_TW_VALID            0\n#define X87_TW_ZERO             1\n#define X87_TW_SPECIAL          2\n#define X87_TW_EMPTY            3\n\n\n/*************************************\n *\n * Macros\n *\n *************************************/\n\n#define ST_TO_PHYS(x)           (((m_x87_sw >> X87_SW_TOP_SHIFT) + (x)) & X87_SW_TOP_MASK)\n#define ST(x)                   (m_x87_reg[ST_TO_PHYS(x)])\n#define X87_TW_FIELD_SHIFT(x)   ((x) << 1)\n#define X87_TAG(x)              ((m_x87_tw >> X87_TW_FIELD_SHIFT(x)) & X87_TW_MASK)\n#define X87_RC                  ((m_x87_cw >> X87_CW_RC_SHIFT) & X87_CW_RC_MASK)\n#define X87_IS_ST_EMPTY(x)      (X87_TAG(ST_TO_PHYS(x)) == X87_TW_EMPTY)\n#define X87_SW_C3_0             X87_SW_C0\n\n#define UNIMPLEMENTED           fatalerror(\"Unimplemented x87 op: %s (PC:%x)\\n\", __FUNCTION__, m_pc)\n\n\n/*************************************\n *\n * Constants\n *\n *************************************/\n\nstatic const floatx80 fx80_zero =   { 0x0000, U64(0x0000000000000000) };\nstatic const floatx80 fx80_one =    { 0x3fff, U64(0x8000000000000000) };\n\nstatic const floatx80 fx80_ninf =   { 0xffff, U64(0x8000000000000000) };\nstatic const floatx80 fx80_inan =   { 0xffff, U64(0xc000000000000000) };\n\n/* Maps x87 round modes to SoftFloat round modes */\nstatic const int x87_to_sf_rc[4] =\n{\n\tfloat_round_nearest_even,\n\tfloat_round_down,\n\tfloat_round_up,\n\tfloat_round_to_zero,\n};\n\n\n/*************************************\n *\n * SoftFloat helpers\n *\n *************************************/\n\nextern flag floatx80_is_nan( floatx80 a );\n\nINLINE int floatx80_is_zero(floatx80 fx)\n{\n\treturn (((fx.high & 0x7fff) == 0) && ((fx.low << 1) == 0));\n}\n\nINLINE int floatx80_is_inf(floatx80 fx)\n{\n\treturn (((fx.high & 0x7fff) == 0x7fff) && ((fx.low << 1) == 0));\n}\n\nINLINE int floatx80_is_denormal(floatx80 fx)\n{\n\treturn (((fx.high & 0x7fff) == 0) &&\n\t\t\t((fx.low & U64(0x8000000000000000)) == 0) &&\n\t\t\t((fx.low << 1) != 0));\n}\n\nINLINE floatx80 floatx80_abs(floatx80 fx)\n{\n\tfx.high &= 0x7fff;\n\treturn fx;\n}\n\nINLINE double fx80_to_double(floatx80 fx)\n{\n\tUINT64 d = floatx80_to_float64(fx);\n\treturn *(double*)&d;\n}\n\nINLINE floatx80 double_to_fx80(double in)\n{\n\treturn float64_to_floatx80(*(UINT64*)&in);\n}\n\nINLINE floatx80 READ80(UINT32 ea)\n{\n\tfloatx80 t;\n\n\tt.low = READ64(ea);\n\tt.high = READ16(ea + 8);\n\n\treturn t;\n}\n\nINLINE void WRITE80(UINT32 ea, floatx80 t)\n{\n\tWRITE64(ea, t.low);\n\tWRITE16(ea + 8, t.high);\n}\n\n\n/*************************************\n *\n * x87 stack handling\n *\n *************************************/\n\nINLINE void x87_set_stack_top(int top)\n{\n\tm_x87_sw &= ~(X87_SW_TOP_MASK << X87_SW_TOP_SHIFT);\n\tm_x87_sw |= (top << X87_SW_TOP_SHIFT);\n}\n\nINLINE void x87_set_tag(int reg, int tag)\n{\n\tint shift = X87_TW_FIELD_SHIFT(reg);\n\n\tm_x87_tw &= ~(X87_TW_MASK << shift);\n\tm_x87_tw |= (tag << shift);\n}\n\nvoid x87_write_stack(int i, floatx80 value, int update_tag)\n{\n\tST(i) = value;\n\n\tif (update_tag)\n\t{\n\t\tint tag;\n\n\t\tif (floatx80_is_zero(value))\n\t\t{\n\t\t\ttag = X87_TW_ZERO;\n\t\t}\n\t\telse if (floatx80_is_inf(value) || floatx80_is_nan(value))\n\t\t{\n\t\t\ttag = X87_TW_SPECIAL;\n\t\t}\n\t\telse\n\t\t{\n\t\t\ttag = X87_TW_VALID;\n\t\t}\n\n\t\tx87_set_tag(ST_TO_PHYS(i), tag);\n\t}\n}\n\nINLINE void x87_set_stack_underflow()\n{\n\tm_x87_sw |= X87_SW_C1 | X87_SW_IE | X87_SW_SF;\n}\n\nINLINE void x87_set_stack_overflow()\n{\n\tm_x87_sw &= ~X87_SW_C1;\n\tm_x87_sw |= X87_SW_IE | X87_SW_SF;\n}\n\nint x87_inc_stack()\n{\n\tint ret = 1;\n\n\t// Check for stack underflow\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tret = 0;\n\t\tx87_set_stack_underflow();\n\n\t\t// Don't update the stack if the exception is unmasked\n\t\tif (~m_x87_cw & X87_CW_IM)\n\t\t\treturn ret;\n\t}\n\n\tx87_set_tag(ST_TO_PHYS(0), X87_TW_EMPTY);\n\tx87_set_stack_top(ST_TO_PHYS(1));\n\treturn ret;\n}\n\nint x87_dec_stack()\n{\n\tint ret = 1;\n\n\t// Check for stack overflow\n\tif (!X87_IS_ST_EMPTY(7))\n\t{\n\t\tret = 0;\n\t\tx87_set_stack_overflow();\n\n\t\t// Don't update the stack if the exception is unmasked\n\t\tif (~m_x87_cw & X87_CW_IM)\n\t\t\treturn ret;\n\t}\n\n\tx87_set_stack_top(ST_TO_PHYS(7));\n\treturn ret;\n}\n\n\n/*************************************\n *\n * Exception handling\n *\n *************************************/\n\nint x87_check_exceptions()\n{\n\t/* Update the exceptions from SoftFloat */\n\tif (float_exception_flags & float_flag_invalid)\n\t{\n\t\tm_x87_sw |= X87_SW_IE;\n\t\tfloat_exception_flags &= ~float_flag_invalid;\n\t}\n\tif (float_exception_flags & float_flag_overflow)\n\t{\n\t\tm_x87_sw |= X87_SW_OE;\n\t\tfloat_exception_flags &= ~float_flag_overflow;\n\t}\n\tif (float_exception_flags & float_flag_underflow)\n\t{\n\t\tm_x87_sw |= X87_SW_UE;\n\t\tfloat_exception_flags &= ~float_flag_underflow;\n\t}\n\tif (float_exception_flags & float_flag_inexact)\n\t{\n\t\tm_x87_sw |= X87_SW_PE;\n\t\tfloat_exception_flags &= ~float_flag_inexact;\n\t}\n\n\tif ((m_x87_sw & ~m_x87_cw) & 0x3f)\n\t{\n\t\t// m_device->execute().set_input_line(INPUT_LINE_FERR, RAISE_LINE);\n\t\tlogerror(\"Unmasked x87 exception (CW:%.4x, SW:%.4x)\\n\", m_x87_cw, m_x87_sw);\n\t\tif (m_cr[0] & 0x20) // FIXME: 486 and up only\n\t\t{\n\t\t\tm_ext = 1;\n\t\t\ti386_trap(FAULT_MF, 0, 0);\n\t\t}\n\t\treturn 0;\n\t}\n\n\treturn 1;\n}\n\nINLINE void x87_write_cw(UINT16 cw)\n{\n\tm_x87_cw = cw;\n\n\t/* Update the SoftFloat rounding mode */\n\tfloat_rounding_mode = x87_to_sf_rc[(m_x87_cw >> X87_CW_RC_SHIFT) & X87_CW_RC_MASK];\n}\n\nvoid x87_reset()\n{\n\tx87_write_cw(0x0037f);\n\n\tm_x87_sw = 0;\n\tm_x87_tw = 0xffff;\n\n\t// TODO: FEA=0, FDS=0, FIP=0 FOP=0 FCS=0\n\tm_x87_data_ptr = 0;\n\tm_x87_inst_ptr = 0;\n\tm_x87_opcode = 0;\n}\n\n\n/*************************************\n *\n * Core arithmetic\n *\n *************************************/\n\nstatic floatx80 x87_add(floatx80 a, floatx80 b)\n{\n\tfloatx80 result = { 0 };\n\n\tswitch ((m_x87_cw >> X87_CW_PC_SHIFT) & X87_CW_PC_MASK)\n\t{\n\t\tcase X87_CW_PC_SINGLE:\n\t\t{\n\t\t\tfloat32 a32 = floatx80_to_float32(a);\n\t\t\tfloat32 b32 = floatx80_to_float32(b);\n\t\t\tresult = float32_to_floatx80(float32_add(a32, b32));\n\t\t\tbreak;\n\t\t}\n\t\tcase X87_CW_PC_DOUBLE:\n\t\t{\n\t\t\tfloat64 a64 = floatx80_to_float64(a);\n\t\t\tfloat64 b64 = floatx80_to_float64(b);\n\t\t\tresult = float64_to_floatx80(float64_add(a64, b64));\n\t\t\tbreak;\n\t\t}\n\t\tcase X87_CW_PC_EXTEND:\n\t\t{\n\t\t\tresult = floatx80_add(a, b);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn result;\n}\n\nstatic floatx80 x87_sub(floatx80 a, floatx80 b)\n{\n\tfloatx80 result = { 0 };\n\n\tswitch ((m_x87_cw >> X87_CW_PC_SHIFT) & X87_CW_PC_MASK)\n\t{\n\t\tcase X87_CW_PC_SINGLE:\n\t\t{\n\t\t\tfloat32 a32 = floatx80_to_float32(a);\n\t\t\tfloat32 b32 = floatx80_to_float32(b);\n\t\t\tresult = float32_to_floatx80(float32_sub(a32, b32));\n\t\t\tbreak;\n\t\t}\n\t\tcase X87_CW_PC_DOUBLE:\n\t\t{\n\t\t\tfloat64 a64 = floatx80_to_float64(a);\n\t\t\tfloat64 b64 = floatx80_to_float64(b);\n\t\t\tresult = float64_to_floatx80(float64_sub(a64, b64));\n\t\t\tbreak;\n\t\t}\n\t\tcase X87_CW_PC_EXTEND:\n\t\t{\n\t\t\tresult = floatx80_sub(a, b);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn result;\n}\n\nstatic floatx80 x87_mul(floatx80 a, floatx80 b)\n{\n\tfloatx80 val = { 0 };\n\n\tswitch ((m_x87_cw >> X87_CW_PC_SHIFT) & X87_CW_PC_MASK)\n\t{\n\t\tcase X87_CW_PC_SINGLE:\n\t\t{\n\t\t\tfloat32 a32 = floatx80_to_float32(a);\n\t\t\tfloat32 b32 = floatx80_to_float32(b);\n\t\t\tval = float32_to_floatx80(float32_mul(a32, b32));\n\t\t\tbreak;\n\t\t}\n\t\tcase X87_CW_PC_DOUBLE:\n\t\t{\n\t\t\tfloat64 a64 = floatx80_to_float64(a);\n\t\t\tfloat64 b64 = floatx80_to_float64(b);\n\t\t\tval = float64_to_floatx80(float64_mul(a64, b64));\n\t\t\tbreak;\n\t\t}\n\t\tcase X87_CW_PC_EXTEND:\n\t\t{\n\t\t\tval = floatx80_mul(a, b);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn val;\n}\n\n\nstatic floatx80 x87_div(floatx80 a, floatx80 b)\n{\n\tfloatx80 val = { 0 };\n\n\tswitch ((m_x87_cw >> X87_CW_PC_SHIFT) & X87_CW_PC_MASK)\n\t{\n\t\tcase X87_CW_PC_SINGLE:\n\t\t{\n\t\t\tfloat32 a32 = floatx80_to_float32(a);\n\t\t\tfloat32 b32 = floatx80_to_float32(b);\n\t\t\tval = float32_to_floatx80(float32_div(a32, b32));\n\t\t\tbreak;\n\t\t}\n\t\tcase X87_CW_PC_DOUBLE:\n\t\t{\n\t\t\tfloat64 a64 = floatx80_to_float64(a);\n\t\t\tfloat64 b64 = floatx80_to_float64(b);\n\t\t\tval = float64_to_floatx80(float64_div(a64, b64));\n\t\t\tbreak;\n\t\t}\n\t\tcase X87_CW_PC_EXTEND:\n\t\t{\n\t\t\tval = floatx80_div(a, b);\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn val;\n}\n\n\n/*************************************\n *\n * Instructions\n *\n *************************************/\n\n/*************************************\n *\n * Add\n *\n *************************************/\n\nvoid x87_fadd_m32real(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT32 m32real = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = float32_to_floatx80(m32real);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_add(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(8);\n}\n\nvoid x87_fadd_m64real(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT64 m64real = READ64(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = float64_to_floatx80(m64real);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_add(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(8);\n}\n\nvoid x87_fadd_st_sti(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_add(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(8);\n}\n\nvoid x87_fadd_sti_st(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_add(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(i, result, TRUE);\n\n\tCYCLES(8);\n}\n\nvoid x87_faddp(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_add(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(i, result, TRUE);\n\t\tx87_inc_stack();\n\t}\n\n\tCYCLES(8);\n}\n\nvoid x87_fiadd_m32int(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tINT32 m32int = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = int32_to_floatx80(m32int);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_add(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(19);\n}\n\nvoid x87_fiadd_m16int(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tINT16 m16int = READ16(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = int32_to_floatx80(m16int);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_add(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(20);\n}\n\n\n/*************************************\n *\n * Subtract\n *\n *************************************/\n\nvoid x87_fsub_m32real(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT32 m32real = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = float32_to_floatx80(m32real);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(8);\n}\n\nvoid x87_fsub_m64real(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT64 m64real = READ64(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = float64_to_floatx80(m64real);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(8);\n}\n\nvoid x87_fsub_st_sti(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(8);\n}\n\nvoid x87_fsub_sti_st(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(i);\n\t\tfloatx80 b = ST(0);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(i, result, TRUE);\n\n\tCYCLES(8);\n}\n\nvoid x87_fsubp(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(i);\n\t\tfloatx80 b = ST(0);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(i, result, TRUE);\n\t\tx87_inc_stack();\n\t}\n\n\tCYCLES(8);\n}\n\nvoid x87_fisub_m32int(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tINT32 m32int = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = int32_to_floatx80(m32int);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(19);\n}\n\nvoid x87_fisub_m16int(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tINT16 m16int = READ16(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = int32_to_floatx80(m16int);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(20);\n}\n\n\n/*************************************\n *\n * Reverse Subtract\n *\n *************************************/\n\nvoid x87_fsubr_m32real(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT32 m32real = READ32(ea);\n\n\t\tfloatx80 a = float32_to_floatx80(m32real);\n\t\tfloatx80 b = ST(0);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(8);\n}\n\nvoid x87_fsubr_m64real(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT64 m64real = READ64(ea);\n\n\t\tfloatx80 a = float64_to_floatx80(m64real);\n\t\tfloatx80 b = ST(0);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(8);\n}\n\nvoid x87_fsubr_st_sti(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(i);\n\t\tfloatx80 b = ST(0);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(8);\n}\n\nvoid x87_fsubr_sti_st(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(i, result, TRUE);\n\n\tCYCLES(8);\n}\n\nvoid x87_fsubrp(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(i, result, TRUE);\n\t\tx87_inc_stack();\n\t}\n\n\tCYCLES(8);\n}\n\nvoid x87_fisubr_m32int(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tINT32 m32int = READ32(ea);\n\n\t\tfloatx80 a = int32_to_floatx80(m32int);\n\t\tfloatx80 b = ST(0);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(19);\n}\n\nvoid x87_fisubr_m16int(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tINT16 m16int = READ16(ea);\n\n\t\tfloatx80 a = int32_to_floatx80(m16int);\n\t\tfloatx80 b = ST(0);\n\n\t\tif ((floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t|| (floatx80_is_inf(a) && floatx80_is_inf(b) && ((a.high ^ b.high) & 0x8000)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_sub(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(20);\n}\n\n\n/*************************************\n *\n * Divide\n *\n *************************************/\n\nvoid x87_fdiv_m32real(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT32 m32real = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = float32_to_floatx80(m32real);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\nvoid x87_fdiv_m64real(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT64 m64real = READ64(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = float64_to_floatx80(m64real);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\nvoid x87_fdiv_st_sti(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\tfloatx80 result;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(0, result, TRUE);\n\t}\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\nvoid x87_fdiv_sti_st(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\tfloatx80 result;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(i);\n\t\tfloatx80 b = ST(0);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(i, result, TRUE);\n\t}\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\nvoid x87_fdivp(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\tfloatx80 result;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(i);\n\t\tfloatx80 b = ST(0);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(i, result, TRUE);\n\t\tx87_inc_stack();\n\t}\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\nvoid x87_fidiv_m32int(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tINT32 m32int = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = int32_to_floatx80(m32int);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\nvoid x87_fidiv_m16int(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tINT16 m16int = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = int32_to_floatx80(m16int);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\n\n/*************************************\n *\n * Reverse Divide\n *\n *************************************/\n\nvoid x87_fdivr_m32real(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT32 m32real = READ32(ea);\n\n\t\tfloatx80 a = float32_to_floatx80(m32real);\n\t\tfloatx80 b = ST(0);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\nvoid x87_fdivr_m64real(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT64 m64real = READ64(ea);\n\n\t\tfloatx80 a = float64_to_floatx80(m64real);\n\t\tfloatx80 b = ST(0);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\nvoid x87_fdivr_st_sti(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\tfloatx80 result;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(i);\n\t\tfloatx80 b = ST(0);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(0, result, TRUE);\n\t}\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\nvoid x87_fdivr_sti_st(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\tfloatx80 result;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(i, result, TRUE);\n\t}\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\nvoid x87_fdivrp(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\tfloatx80 result;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(i, result, TRUE);\n\t\tx87_inc_stack();\n\t}\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\n\nvoid x87_fidivr_m32int(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tINT32 m32int = READ32(ea);\n\n\t\tfloatx80 a = int32_to_floatx80(m32int);\n\t\tfloatx80 b = ST(0);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\nvoid x87_fidivr_m16int(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tINT16 m16int = READ32(ea);\n\n\t\tfloatx80 a = int32_to_floatx80(m16int);\n\t\tfloatx80 b = ST(0);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_div(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\t// 73, 62, 35\n\tCYCLES(73);\n}\n\n\n/*************************************\n *\n * Multiply\n *\n *************************************/\n\nvoid x87_fmul_m32real(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT32 m32real = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = float32_to_floatx80(m32real);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_mul(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(11);\n}\n\nvoid x87_fmul_m64real(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT64 m64real = READ64(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = float64_to_floatx80(m64real);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_mul(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(14);\n}\n\nvoid x87_fmul_st_sti(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_mul(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(16);\n}\n\nvoid x87_fmul_sti_st(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_mul(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(i, result, TRUE);\n\n\tCYCLES(16);\n}\n\nvoid x87_fmulp(UINT8 modrm)\n{\n\tfloatx80 result;\n\tint i = modrm & 7;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_mul(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(i, result, TRUE);\n\t\tx87_inc_stack();\n\t}\n\n\tCYCLES(16);\n}\n\nvoid x87_fimul_m32int(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tINT32 m32int = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = int32_to_floatx80(m32int);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_mul(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(22);\n}\n\nvoid x87_fimul_m16int(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tINT16 m16int = READ16(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = int32_to_floatx80(m16int);\n\n\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = x87_mul(a, b);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(22);\n}\n\n\n/*************************************\n *\n * Miscellaneous arithmetic\n *\n *************************************/\n\nvoid x87_fprem(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(1);\n\n\t\tm_x87_sw &= ~X87_SW_C2;\n\n\t\t// TODO: Implement Cx bits\n\t\tresult = floatx80_rem(a, b);\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(84);\n}\n\nvoid x87_fprem1(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(1);\n\n\t\tm_x87_sw &= ~X87_SW_C2;\n\n\t\t// TODO: Implement Cx bits\n\t\tresult = floatx80_rem(a, b);\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(94);\n}\n\nvoid x87_fsqrt(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 value = ST(0);\n\n\t\tif ((!floatx80_is_zero(value) && (value.high & 0x8000)) ||\n\t\t\t\tfloatx80_is_denormal(value))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = floatx80_sqrt(value);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(8);\n}\n\n/*************************************\n *\n * Trigonometric\n *\n *************************************/\n\nvoid x87_f2xm1(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\t// TODO: Inaccurate\n\t\tdouble x = fx80_to_double(ST(0));\n\t\tdouble res = pow(2.0, x) - 1;\n\t\tresult = double_to_fx80(res);\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(0, result, TRUE);\n\t}\n\n\tCYCLES(242);\n}\n\nvoid x87_fyl2x(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 x = ST(0);\n\t\tfloatx80 y = ST(1);\n\n\t\tif (x.high & 0x8000)\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tresult = fx80_inan;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// TODO: Inaccurate\n\t\t\tdouble d64 = fx80_to_double(x);\n\t\t\tdouble l2x = log(d64)/log(2.0);\n\t\t\tresult = floatx80_mul(double_to_fx80(l2x), y);\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(1, result, TRUE);\n\t\tx87_inc_stack();\n\t}\n\n\tCYCLES(250);\n}\n\nvoid x87_fyl2xp1(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 x = ST(0);\n\t\tfloatx80 y = ST(1);\n\n\t\t// TODO: Inaccurate\n\t\tdouble d64 = fx80_to_double(x);\n\t\tdouble l2x1 = log(d64 + 1.0)/log(2.0);\n\t\tresult = floatx80_mul(double_to_fx80(l2x1), y);\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(1, result, TRUE);\n\t\tx87_inc_stack();\n\t}\n\n\tCYCLES(313);\n}\n\nvoid x87_fptan(UINT8 modrm)\n{\n\tfloatx80 result1, result2;\n\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult1 = fx80_inan;\n\t\tresult2 = fx80_inan;\n\t}\n\telse if (!X87_IS_ST_EMPTY(7))\n\t{\n\t\tx87_set_stack_overflow();\n\t\tresult1 = fx80_inan;\n\t\tresult2 = fx80_inan;\n\t}\n\telse\n\t{\n\t\tresult1 = ST(0);\n\t\tresult2 = fx80_one;\n\n#if 0 // TODO: Function produces bad values\n\t\tif (floatx80_ftan(result1) != -1)\n\t\t\tm_x87_sw &= ~X87_SW_C2;\n\t\telse\n\t\t\tm_x87_sw |= X87_SW_C2;\n#else\n\t\tdouble x = fx80_to_double(result1);\n\t\tx = tan(x);\n\t\tresult1 = double_to_fx80(x);\n\n\t\tm_x87_sw &= ~X87_SW_C2;\n#endif\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(0, result1, TRUE);\n\t\tx87_dec_stack();\n\t\tx87_write_stack(0, result2, TRUE);\n\t}\n\n\tCYCLES(244);\n}\n\nvoid x87_fpatan(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\t// TODO: Inaccurate\n\t\tdouble val = atan(fx80_to_double(ST(1)) / fx80_to_double(ST(0)));\n\t\tresult = double_to_fx80(val);\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(1, result, TRUE);\n\t\tx87_inc_stack();\n\t}\n\n\tCYCLES(289);\n}\n\nvoid x87_fsin(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tresult = ST(0);\n\n#if 0 // TODO: Function produces bad values\n\t\tif (floatx80_fsin(result) != -1)\n\t\t\tm_x87_sw &= ~X87_SW_C2;\n\t\telse\n\t\t\tm_x87_sw |= X87_SW_C2;\n#else\n\t\tdouble x = fx80_to_double(result);\n\t\tx = sin(x);\n\t\tresult = double_to_fx80(x);\n\n\t\tm_x87_sw &= ~X87_SW_C2;\n#endif\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(241);\n}\n\nvoid x87_fcos(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tresult = ST(0);\n\n#if 0 // TODO: Function produces bad values\n\t\tif (floatx80_fcos(result) != -1)\n\t\t\tm_x87_sw &= ~X87_SW_C2;\n\t\telse\n\t\t\tm_x87_sw |= X87_SW_C2;\n#else\n\t\tdouble x = fx80_to_double(result);\n\t\tx = cos(x);\n\t\tresult = double_to_fx80(x);\n\n\t\tm_x87_sw &= ~X87_SW_C2;\n#endif\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, result, TRUE);\n\n\tCYCLES(241);\n}\n\nvoid x87_fsincos(UINT8 modrm)\n{\n\tfloatx80 s_result, c_result;\n\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\ts_result = c_result = fx80_inan;\n\t}\n\telse if (!X87_IS_ST_EMPTY(7))\n\t{\n\t\tx87_set_stack_overflow();\n\t\ts_result = c_result = fx80_inan;\n\t}\n\telse\n\t{\n\t\textern int sf_fsincos(floatx80 a, floatx80 *sin_a, floatx80 *cos_a);\n\n\t\ts_result = c_result = ST(0);\n\n#if 0 // TODO: Function produces bad values\n\t\tif (sf_fsincos(s_result, &s_result, &c_result) != -1)\n\t\t\tm_x87_sw &= ~X87_SW_C2;\n\t\telse\n\t\t\tm_x87_sw |= X87_SW_C2;\n#else\n\t\tdouble s = fx80_to_double(s_result);\n\t\tdouble c = fx80_to_double(c_result);\n\t\ts = sin(s);\n\t\tc = cos(c);\n\n\t\ts_result = double_to_fx80(s);\n\t\tc_result = double_to_fx80(c);\n\n\t\tm_x87_sw &= ~X87_SW_C2;\n#endif\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(0, s_result, TRUE);\n\t\tx87_dec_stack();\n\t\tx87_write_stack(0, c_result, TRUE);\n\t}\n\n\tCYCLES(291);\n}\n\n\n/*************************************\n *\n * Load data\n *\n *************************************/\n\nvoid x87_fld_m32real(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (x87_dec_stack())\n\t{\n\t\tUINT32 m32real = READ32(ea);\n\n\t\tvalue = float32_to_floatx80(m32real);\n\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tif (floatx80_is_signaling_nan(value) || floatx80_is_denormal(value))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tvalue = fx80_inan;\n\t\t}\n\t}\n\telse\n\t{\n\t\tvalue = fx80_inan;\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, value, TRUE);\n\n\tCYCLES(3);\n}\n\nvoid x87_fld_m64real(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (x87_dec_stack())\n\t{\n\t\tUINT64 m64real = READ64(ea);\n\n\t\tvalue = float64_to_floatx80(m64real);\n\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tif (floatx80_is_signaling_nan(value) || floatx80_is_denormal(value))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t\tvalue = fx80_inan;\n\t\t}\n\t}\n\telse\n\t{\n\t\tvalue = fx80_inan;\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, value, TRUE);\n\n\tCYCLES(3);\n}\n\nvoid x87_fld_m80real(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (x87_dec_stack())\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t\tvalue = READ80(ea);\n\t}\n\telse\n\t{\n\t\tvalue = fx80_inan;\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, value, TRUE);\n\n\tCYCLES(6);\n}\n\nvoid x87_fld_sti(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tif (x87_dec_stack())\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t\tvalue = ST((modrm + 1) & 7);\n\t}\n\telse\n\t{\n\t\tvalue = fx80_inan;\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, value, TRUE);\n\n\tCYCLES(4);\n}\n\nvoid x87_fild_m16int(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (!x87_dec_stack())\n\t{\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tINT16 m16int = READ16(ea);\n\t\tvalue = int32_to_floatx80(m16int);\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, value, TRUE);\n\n\tCYCLES(13);\n}\n\nvoid x87_fild_m32int(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (!x87_dec_stack())\n\t{\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tINT32 m32int = READ32(ea);\n\t\tvalue = int32_to_floatx80(m32int);\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, value, TRUE);\n\n\tCYCLES(9);\n}\n\nvoid x87_fild_m64int(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (!x87_dec_stack())\n\t{\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tINT64 m64int = READ64(ea);\n\t\tvalue = int64_to_floatx80(m64int);\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, value, TRUE);\n\n\tCYCLES(10);\n}\n\nvoid x87_fbld(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (!x87_dec_stack())\n\t{\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tUINT64 m64val = 0;\n\t\tUINT16 sign;\n\n\t\tvalue = READ80(ea);\n\n\t\tsign = value.high & 0x8000;\n\t\tm64val += ((value.high >> 4) & 0xf) * 10;\n\t\tm64val += ((value.high >> 0) & 0xf);\n\n\t\tfor (int i = 60; i >= 0; i -= 4)\n\t\t{\n\t\t\tm64val *= 10;\n\t\t\tm64val += (value.low >> i) & 0xf;\n\t\t}\n\n\t\tvalue = int64_to_floatx80(m64val);\n\t\tvalue.high |= sign;\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, value, TRUE);\n\n\tCYCLES(75);\n}\n\n\n/*************************************\n *\n * Store data\n *\n *************************************/\n\nvoid x87_fst_m32real(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tUINT32 ea = GetEA(modrm, 1);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t\tvalue = ST(0);\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tUINT32 m32real = floatx80_to_float32(value);\n\t\tWRITE32(ea, m32real);\n\t}\n\n\tCYCLES(7);\n}\n\nvoid x87_fst_m64real(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tUINT32 ea = GetEA(modrm, 1);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t\tvalue = ST(0);\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tUINT64 m64real = floatx80_to_float64(value);\n\t\tWRITE64(ea, m64real);\n\t}\n\n\tCYCLES(8);\n}\n\nvoid x87_fst_sti(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\tfloatx80 value;\n\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t\tvalue = ST(0);\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(i, value, TRUE);\n\n\tCYCLES(3);\n}\n\nvoid x87_fstp_m32real(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tUINT32 ea = GetEA(modrm, 1);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t\tvalue = ST(0);\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tUINT32 m32real = floatx80_to_float32(value);\n\t\tWRITE32(ea, m32real);\n\t\tx87_inc_stack();\n\t}\n\n\tCYCLES(7);\n}\n\nvoid x87_fstp_m64real(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t\tvalue = ST(0);\n\t}\n\n\n\tUINT32 ea = GetEA(modrm, 1);\n\tif (x87_check_exceptions())\n\t{\n\t\tUINT64 m64real = floatx80_to_float64(value);\n\t\tWRITE64(ea, m64real);\n\t\tx87_inc_stack();\n\t}\n\n\tCYCLES(8);\n}\n\nvoid x87_fstp_m80real(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t\tvalue = ST(0);\n\t}\n\n\tUINT32 ea = GetEA(modrm, 1);\n\tif (x87_check_exceptions())\n\t{\n\t\tWRITE80(ea, value);\n\t\tx87_inc_stack();\n\t}\n\n\tCYCLES(6);\n}\n\nvoid x87_fstp_sti(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\tfloatx80 value;\n\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t\tvalue = ST(0);\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(i, value, TRUE);\n\t\tx87_inc_stack();\n\t}\n\n\tCYCLES(3);\n}\n\nvoid x87_fist_m16int(UINT8 modrm)\n{\n\tINT16 m16int;\n\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm16int = -32768;\n\t}\n\telse\n\t{\n\t\tfloatx80 fx80 = floatx80_round_to_int(ST(0));\n\n\t\tfloatx80 lowerLim = int32_to_floatx80(-32768);\n\t\tfloatx80 upperLim = int32_to_floatx80(32767);\n\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tif (!floatx80_lt(fx80, lowerLim) && floatx80_le(fx80, upperLim))\n\t\t\tm16int = floatx80_to_int32(fx80);\n\t\telse\n\t\t\tm16int = -32768;\n\t}\n\n\tUINT32 ea = GetEA(modrm, 1);\n\tif (x87_check_exceptions())\n\t{\n\t\tWRITE16(ea, m16int);\n\t}\n\n\tCYCLES(29);\n}\n\nvoid x87_fist_m32int(UINT8 modrm)\n{\n\tINT32 m32int;\n\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm32int = 0x80000000;\n\t}\n\telse\n\t{\n\t\tfloatx80 fx80 = floatx80_round_to_int(ST(0));\n\n\t\tfloatx80 lowerLim = int32_to_floatx80(0x80000000);\n\t\tfloatx80 upperLim = int32_to_floatx80(0x7fffffff);\n\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tif (!floatx80_lt(fx80, lowerLim) && floatx80_le(fx80, upperLim))\n\t\t\tm32int = floatx80_to_int32(fx80);\n\t\telse\n\t\t\tm32int = 0x80000000;\n\t}\n\n\tUINT32 ea = GetEA(modrm, 1);\n\tif (x87_check_exceptions())\n\t{\n\t\tWRITE32(ea, m32int);\n\t}\n\n\tCYCLES(28);\n}\n\nvoid x87_fistp_m16int(UINT8 modrm)\n{\n\tINT16 m16int;\n\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm16int = (UINT16)0x8000;\n\t}\n\telse\n\t{\n\t\tfloatx80 fx80 = floatx80_round_to_int(ST(0));\n\n\t\tfloatx80 lowerLim = int32_to_floatx80(-32768);\n\t\tfloatx80 upperLim = int32_to_floatx80(32767);\n\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tif (!floatx80_lt(fx80, lowerLim) && floatx80_le(fx80, upperLim))\n\t\t\tm16int = floatx80_to_int32(fx80);\n\t\telse\n\t\t\tm16int = (UINT16)0x8000;\n\t}\n\n\tUINT32 ea = GetEA(modrm, 1);\n\tif (x87_check_exceptions())\n\t{\n\t\tWRITE16(ea, m16int);\n\t\tx87_inc_stack();\n\t}\n\n\tCYCLES(29);\n}\n\nvoid x87_fistp_m32int(UINT8 modrm)\n{\n\tINT32 m32int;\n\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm32int = 0x80000000;\n\t}\n\telse\n\t{\n\t\tfloatx80 fx80 = floatx80_round_to_int(ST(0));\n\n\t\tfloatx80 lowerLim = int32_to_floatx80(0x80000000);\n\t\tfloatx80 upperLim = int32_to_floatx80(0x7fffffff);\n\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tif (!floatx80_lt(fx80, lowerLim) && floatx80_le(fx80, upperLim))\n\t\t\tm32int = floatx80_to_int32(fx80);\n\t\telse\n\t\t\tm32int = 0x80000000;\n\t}\n\n\tUINT32 ea = GetEA(modrm, 1);\n\tif (x87_check_exceptions())\n\t{\n\t\tWRITE32(ea, m32int);\n\t\tx87_inc_stack();\n\t}\n\n\tCYCLES(29);\n}\n\nvoid x87_fistp_m64int(UINT8 modrm)\n{\n\tINT64 m64int;\n\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm64int = U64(0x8000000000000000);\n\t}\n\telse\n\t{\n\t\tfloatx80 fx80 = floatx80_round_to_int(ST(0));\n\n\t\tfloatx80 lowerLim = int64_to_floatx80(U64(0x8000000000000000));\n\t\tfloatx80 upperLim = int64_to_floatx80(U64(0x7fffffffffffffff));\n\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tif (!floatx80_lt(fx80, lowerLim) && floatx80_le(fx80, upperLim))\n\t\t\tm64int = floatx80_to_int64(fx80);\n\t\telse\n\t\t\tm64int = U64(0x8000000000000000);\n\t}\n\n\tUINT32 ea = GetEA(modrm, 1);\n\tif (x87_check_exceptions())\n\t{\n\t\tWRITE64(ea, m64int);\n\t\tx87_inc_stack();\n\t}\n\n\tCYCLES(29);\n}\n\nvoid x87_fbstp(UINT8 modrm)\n{\n\tfloatx80 result;\n\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tresult = fx80_inan;\n\t}\n\telse\n\t{\n\t\tUINT64 u64 = floatx80_to_int64(floatx80_abs(ST(0)));\n\t\tresult.low = 0;\n\n\t\tfor (int i = 0; i < 64; i += 4)\n\t\t{\n\t\t\tresult.low += (u64 % 10) << i;\n\t\t\tu64 /= 10;\n\t\t}\n\n\t\tresult.high = (u64 % 10);\n\t\tresult.high += ((u64 / 10) % 10) << 4;\n\t\tresult.high |= ST(0).high & 0x8000;\n\t}\n\n\tUINT32 ea = GetEA(modrm, 1);\n\tif (x87_check_exceptions())\n\t{\n\t\tWRITE80(ea, result);\n\t\tx87_inc_stack();\n\t}\n\n\tCYCLES(175);\n}\n\n\n/*************************************\n *\n * Constant load\n *\n *************************************/\n\nvoid x87_fld1(UINT8 modrm)\n{\n\tfloatx80 value;\n\tint tag;\n\n\tif (x87_dec_stack())\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t\tvalue = fx80_one;\n\t\ttag = X87_TW_VALID;\n\t}\n\telse\n\t{\n\t\tvalue = fx80_inan;\n\t\ttag = X87_TW_SPECIAL;\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_set_tag(ST_TO_PHYS(0), tag);\n\t\tx87_write_stack(0, value, FALSE);\n\t}\n\n\tCYCLES(4);\n}\n\nvoid x87_fldl2t(UINT8 modrm)\n{\n\tfloatx80 value;\n\tint tag;\n\n\tif (x87_dec_stack())\n\t{\n\t\ttag = X87_TW_VALID;\n\t\tvalue.high = 0x4000;\n\n\t\tif (X87_RC == X87_CW_RC_UP)\n\t\t\tvalue.low =  U64(0xd49a784bcd1b8aff);\n\t\telse\n\t\t\tvalue.low = U64(0xd49a784bcd1b8afe);\n\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t}\n\telse\n\t{\n\t\tvalue = fx80_inan;\n\t\ttag = X87_TW_SPECIAL;\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_set_tag(ST_TO_PHYS(0), tag);\n\t\tx87_write_stack(0, value, FALSE);\n\t}\n\n\tCYCLES(8);\n}\n\nvoid x87_fldl2e(UINT8 modrm)\n{\n\tfloatx80 value;\n\tint tag;\n\n\tif (x87_dec_stack())\n\t{\n\t\tint rc = X87_RC;\n\t\ttag = X87_TW_VALID;\n\t\tvalue.high = 0x3fff;\n\n\t\tif (rc == X87_CW_RC_UP || rc == X87_CW_RC_NEAREST)\n\t\t\tvalue.low = U64(0xb8aa3b295c17f0bc);\n\t\telse\n\t\t\tvalue.low = U64(0xb8aa3b295c17f0bb);\n\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t}\n\telse\n\t{\n\t\tvalue = fx80_inan;\n\t\ttag = X87_TW_SPECIAL;\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_set_tag(ST_TO_PHYS(0), tag);\n\t\tx87_write_stack(0, value, FALSE);\n\t}\n\n\tCYCLES(8);\n}\n\nvoid x87_fldpi(UINT8 modrm)\n{\n\tfloatx80 value;\n\tint tag;\n\n\tif (x87_dec_stack())\n\t{\n\t\tint rc = X87_RC;\n\t\ttag = X87_TW_VALID;\n\t\tvalue.high = 0x4000;\n\n\t\tif (rc == X87_CW_RC_UP || rc == X87_CW_RC_NEAREST)\n\t\t\tvalue.low = U64(0xc90fdaa22168c235);\n\t\telse\n\t\t\tvalue.low = U64(0xc90fdaa22168c234);\n\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t}\n\telse\n\t{\n\t\tvalue = fx80_inan;\n\t\ttag = X87_TW_SPECIAL;\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_set_tag(ST_TO_PHYS(0), tag);\n\t\tx87_write_stack(0, value, FALSE);\n\t}\n\n\tCYCLES(8);\n}\n\nvoid x87_fldlg2(UINT8 modrm)\n{\n\tfloatx80 value;\n\tint tag;\n\n\tif (x87_dec_stack())\n\t{\n\t\tint rc = X87_RC;\n\t\ttag = X87_TW_VALID;\n\t\tvalue.high = 0x3ffd;\n\n\t\tif (rc == X87_CW_RC_UP || rc == X87_CW_RC_NEAREST)\n\t\t\tvalue.low = U64(0x9a209a84fbcff799);\n\t\telse\n\t\t\tvalue.low = U64(0x9a209a84fbcff798);\n\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t}\n\telse\n\t{\n\t\tvalue = fx80_inan;\n\t\ttag = X87_TW_SPECIAL;\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_set_tag(ST_TO_PHYS(0), tag);\n\t\tx87_write_stack(0, value, FALSE);\n\t}\n\n\tCYCLES(8);\n}\n\nvoid x87_fldln2(UINT8 modrm)\n{\n\tfloatx80 value;\n\tint tag;\n\n\tif (x87_dec_stack())\n\t{\n\t\tint rc = X87_RC;\n\t\ttag = X87_TW_VALID;\n\t\tvalue.high = 0x3ffe;\n\n\t\tif (rc == X87_CW_RC_UP || rc == X87_CW_RC_NEAREST)\n\t\t\tvalue.low = U64(0xb17217f7d1cf79ac);\n\t\telse\n\t\t\tvalue.low = U64(0xb17217f7d1cf79ab);\n\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t}\n\telse\n\t{\n\t\tvalue = fx80_inan;\n\t\ttag = X87_TW_SPECIAL;\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_set_tag(ST_TO_PHYS(0), tag);\n\t\tx87_write_stack(0, value, FALSE);\n\t}\n\n\tCYCLES(8);\n}\n\nvoid x87_fldz(UINT8 modrm)\n{\n\tfloatx80 value;\n\tint tag;\n\n\tif (x87_dec_stack())\n\t{\n\t\tvalue = fx80_zero;\n\t\ttag = X87_TW_ZERO;\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t}\n\telse\n\t{\n\t\tvalue = fx80_inan;\n\t\ttag = X87_TW_SPECIAL;\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_set_tag(ST_TO_PHYS(0), tag);\n\t\tx87_write_stack(0, value, FALSE);\n\t}\n\n\tCYCLES(4);\n}\n\n\n/*************************************\n *\n * Miscellaneous\n *\n *************************************/\n\nvoid x87_fnop(UINT8 modrm)\n{\n\tCYCLES(3);\n}\n\nvoid x87_fchs(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tvalue = ST(0);\n\t\tvalue.high ^= 0x8000;\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, value, FALSE);\n\n\tCYCLES(6);\n}\n\nvoid x87_fabs(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tvalue = ST(0);\n\t\tvalue.high &= 0x7fff;\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, value, FALSE);\n\n\tCYCLES(6);\n}\n\nvoid x87_fscale(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\t\tvalue = ST(0);\n\n\t\t// Set the rounding mode to truncate\n\t\tUINT16 old_cw = m_x87_cw;\n\t\tUINT16 new_cw = (old_cw & ~(X87_CW_RC_MASK << X87_CW_RC_SHIFT)) | (X87_CW_RC_ZERO << X87_CW_RC_SHIFT);\n\t\tx87_write_cw(new_cw);\n\n\t\t// Interpret ST(1) as an integer\n\t\tUINT32 st1 = floatx80_to_int32(floatx80_round_to_int(ST(1)));\n\n\t\t// Restore the rounding mode\n\t\tx87_write_cw(old_cw);\n\n\t\t// Get the unbiased exponent of ST(0)\n\t\tINT16 exp = (ST(0).high & 0x7fff) - 0x3fff;\n\n\t\t// Calculate the new exponent\n\t\texp = (exp + st1 + 0x3fff) & 0x7fff;\n\n\t\t// Write it back\n\t\tvalue.high = (value.high & ~0x7fff) + exp;\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, value, FALSE);\n\n\tCYCLES(31);\n}\n\nvoid x87_frndint(UINT8 modrm)\n{\n\tfloatx80 value;\n\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tvalue = fx80_inan;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tvalue = floatx80_round_to_int(ST(0));\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_write_stack(0, value, TRUE);\n\n\tCYCLES(21);\n}\n\nvoid x87_fxtract(UINT8 modrm)\n{\n\tfloatx80 sig80, exp80;\n\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tsig80 = exp80 = fx80_inan;\n\t}\n\telse if (!X87_IS_ST_EMPTY(7))\n\t{\n\t\tx87_set_stack_overflow();\n\t\tsig80 = exp80 = fx80_inan;\n\t}\n\telse\n\t{\n\t\tfloatx80 value = ST(0);\n\n\t\tif (floatx80_eq(value, fx80_zero))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_ZE;\n\n\t\t\texp80 = fx80_ninf;\n\t\t\tsig80 = fx80_zero;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Extract the unbiased exponent\n\t\t\texp80 = int32_to_floatx80((value.high & 0x7fff) - 0x3fff);\n\n\t\t\t// For the significand, replicate the original value and set its true exponent to 0.\n\t\t\tsig80 = value;\n\t\t\tsig80.high &= ~0x7fff;\n\t\t\tsig80.high |=  0x3fff;\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_write_stack(0, exp80, TRUE);\n\t\tx87_dec_stack();\n\t\tx87_write_stack(0, sig80, TRUE);\n\t}\n\n\tCYCLES(21);\n}\n\n/*************************************\n *\n * Comparison\n *\n *************************************/\n\nvoid x87_ftst(UINT8 modrm)\n{\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tif (floatx80_is_nan(ST(0)))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(ST(0), fx80_zero))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(ST(0), fx80_zero))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tx87_check_exceptions();\n\n\tCYCLES(4);\n}\n\nvoid x87_fxam(UINT8 modrm)\n{\n\tfloatx80 value = ST(0);\n\n\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t// TODO: Unsupported and denormal values\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C0;\n\t}\n\telse if (floatx80_is_zero(value))\n\t{\n\t\tm_x87_sw |= X87_SW_C3;\n\t}\n\tif (floatx80_is_nan(value))\n\t{\n\t\tm_x87_sw |= X87_SW_C0;\n\t}\n\telse if (floatx80_is_inf(value))\n\t{\n\t\tm_x87_sw |= X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw |= X87_SW_C2;\n\t}\n\n\tif (value.high & 0x8000)\n\t\tm_x87_sw |= X87_SW_C1;\n\n\tCYCLES(8);\n}\n\nvoid x87_ficom_m16int(UINT8 modrm)\n{\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tINT16 m16int = READ16(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = int32_to_floatx80(m16int);\n\n\t\tif (floatx80_is_nan(a))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tx87_check_exceptions();\n\n\tCYCLES(16);\n}\n\nvoid x87_ficom_m32int(UINT8 modrm)\n{\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tINT32 m32int = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = int32_to_floatx80(m32int);\n\n\t\tif (floatx80_is_nan(a))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tx87_check_exceptions();\n\n\tCYCLES(15);\n}\n\nvoid x87_ficomp_m16int(UINT8 modrm)\n{\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tINT16 m16int = READ16(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = int32_to_floatx80(m16int);\n\n\t\tif (floatx80_is_nan(a))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_inc_stack();\n\n\tCYCLES(16);\n}\n\nvoid x87_ficomp_m32int(UINT8 modrm)\n{\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tINT32 m32int = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = int32_to_floatx80(m32int);\n\n\t\tif (floatx80_is_nan(a))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_inc_stack();\n\n\tCYCLES(15);\n}\n\n\nvoid x87_fcom_m32real(UINT8 modrm)\n{\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tUINT32 m32real = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = float32_to_floatx80(m32real);\n\n\t\tif (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tx87_check_exceptions();\n\n\tCYCLES(4);\n}\n\nvoid x87_fcom_m64real(UINT8 modrm)\n{\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tUINT64 m64real = READ64(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = float64_to_floatx80(m64real);\n\n\t\tif (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tx87_check_exceptions();\n\n\tCYCLES(4);\n}\n\nvoid x87_fcom_sti(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tx87_check_exceptions();\n\n\tCYCLES(4);\n}\n\nvoid x87_fcomp_m32real(UINT8 modrm)\n{\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tUINT32 m32real = READ32(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = float32_to_floatx80(m32real);\n\n\t\tif (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_inc_stack();\n\n\tCYCLES(4);\n}\n\nvoid x87_fcomp_m64real(UINT8 modrm)\n{\n\tUINT32 ea = GetEA(modrm, 0);\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tUINT64 m64real = READ64(ea);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = float64_to_floatx80(m64real);\n\n\t\tif (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_inc_stack();\n\n\tCYCLES(4);\n}\n\nvoid x87_fcomp_sti(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_inc_stack();\n\n\tCYCLES(4);\n}\n\nvoid x87_fcomip_sti(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_ZF = 1;\n\t\tm_PF = 1;\n\t\tm_CF = 1;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~X87_SW_C1;\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_ZF = 1;\n\t\t\tm_PF = 1;\n\t\t\tm_CF = 1;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_ZF = 0;\n\t\t\tm_PF = 0;\n\t\t\tm_CF = 0;\n\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_ZF = 1;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_CF = 1;\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_inc_stack();\n\n\tCYCLES(4); // TODO: correct cycle count\n}\n\nvoid x87_fcompp(UINT8 modrm)\n{\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(1);\n\n\t\tif (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_inc_stack();\n\t\tx87_inc_stack();\n\t}\n\n\tCYCLES(5);\n}\n\n\n/*************************************\n *\n * Unordererd comparison\n *\n *************************************/\n\nvoid x87_fucom_sti(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\n\t\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tx87_check_exceptions();\n\n\tCYCLES(4);\n}\n\nvoid x87_fucomp_sti(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(i))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(i);\n\n\t\tif (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\n\t\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t\tx87_inc_stack();\n\n\tCYCLES(4);\n}\n\nvoid x87_fucompp(UINT8 modrm)\n{\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1))\n\t{\n\t\tx87_set_stack_underflow();\n\t\tm_x87_sw |= X87_SW_C3 | X87_SW_C2 | X87_SW_C0;\n\t}\n\telse\n\t{\n\t\tm_x87_sw &= ~(X87_SW_C3 | X87_SW_C2 | X87_SW_C1 | X87_SW_C0);\n\n\t\tfloatx80 a = ST(0);\n\t\tfloatx80 b = ST(1);\n\n\t\tif (floatx80_is_nan(a) || floatx80_is_nan(b))\n\t\t{\n\t\t\tm_x87_sw |= X87_SW_C0 | X87_SW_C2 | X87_SW_C3;\n\n\t\t\tif (floatx80_is_signaling_nan(a) || floatx80_is_signaling_nan(b))\n\t\t\t\tm_x87_sw |= X87_SW_IE;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (floatx80_eq(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C3;\n\n\t\t\tif (floatx80_lt(a, b))\n\t\t\t\tm_x87_sw |= X87_SW_C0;\n\t\t}\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tx87_inc_stack();\n\t\tx87_inc_stack();\n\t}\n\n\tCYCLES(4);\n}\n\n\n/*************************************\n *\n * Control\n *\n *************************************/\n\nvoid x87_fdecstp(UINT8 modrm)\n{\n\tm_x87_sw &= ~X87_SW_C1;\n\n\tx87_dec_stack();\n\tx87_check_exceptions();\n\n\tCYCLES(3);\n}\n\nvoid x87_fincstp(UINT8 modrm)\n{\n\tm_x87_sw &= ~X87_SW_C1;\n\n\tx87_inc_stack();\n\tx87_check_exceptions();\n\n\tCYCLES(3);\n}\n\nvoid x87_fclex(UINT8 modrm)\n{\n\tm_x87_sw &= ~0x80ff;\n\n\tCYCLES(7);\n}\n\nvoid x87_ffree(UINT8 modrm)\n{\n\tx87_set_tag(ST_TO_PHYS(modrm & 7), X87_TW_EMPTY);\n\n\tCYCLES(3);\n}\n\nvoid x87_finit(UINT8 modrm)\n{\n\tx87_reset();\n\n\tCYCLES(17);\n}\n\nvoid x87_fldcw(UINT8 modrm)\n{\n\tUINT32 ea = GetEA(modrm, 0);\n\tUINT16 cw = READ16(ea);\n\n\tx87_write_cw(cw);\n\n\tx87_check_exceptions();\n\n\tCYCLES(4);\n}\n\nvoid x87_fstcw(UINT8 modrm)\n{\n\tUINT32 ea = GetEA(modrm, 1);\n\tWRITE16(ea, m_x87_cw);\n\n\tCYCLES(3);\n}\n\nvoid x87_fldenv(UINT8 modrm)\n{\n\t// TODO: Pointers and selectors\n\tUINT32 ea = GetEA(modrm, 0);\n\n\tif (m_operand_size)\n\t{\n\t\t// 32-bit real/protected mode\n\t\tx87_write_cw(READ16(ea));\n\t\tm_x87_sw = READ16(ea + 4);\n\t\tm_x87_tw = READ16(ea + 8);\n\t}\n\telse\n\t{\n\t\t// 16-bit real/protected mode\n\t\tx87_write_cw(READ16(ea));\n\t\tm_x87_sw = READ16(ea + 2);\n\t\tm_x87_tw = READ16(ea + 4);\n\t}\n\n\tx87_check_exceptions();\n\n\tCYCLES((m_cr[0] & 1) ? 34 : 44);\n}\n\nvoid x87_fstenv(UINT8 modrm)\n{\n\tUINT32 ea = GetEA(modrm, 1);\n\n\t// TODO: Pointers and selectors\n\tswitch((m_cr[0] & 1)|(m_operand_size & 1)<<1)\n\t{\n\t\tcase 0: // 16-bit real mode\n\t\t\tWRITE16(ea + 0, m_x87_cw);\n\t\t\tWRITE16(ea + 2, m_x87_sw);\n\t\t\tWRITE16(ea + 4, m_x87_tw);\n//          WRITE16(ea + 6, m_fpu_inst_ptr & 0xffff);\n//          WRITE16(ea + 8, (m_fpu_opcode & 0x07ff) | ((m_fpu_inst_ptr & 0x0f0000) >> 4));\n//          WRITE16(ea + 10, m_fpu_data_ptr & 0xffff);\n//          WRITE16(ea + 12, (m_fpu_inst_ptr & 0x0f0000) >> 4);\n\t\t\tbreak;\n\t\tcase 1: // 16-bit protected mode\n\t\t\tWRITE16(ea + 0, m_x87_cw);\n\t\t\tWRITE16(ea + 2, m_x87_sw);\n\t\t\tWRITE16(ea + 4, m_x87_tw);\n//          WRITE16(ea + 6, m_fpu_inst_ptr & 0xffff);\n//          WRITE16(ea + 8, (m_fpu_opcode & 0x07ff) | ((m_fpu_inst_ptr & 0x0f0000) >> 4));\n//          WRITE16(ea + 10, m_fpu_data_ptr & 0xffff);\n//          WRITE16(ea + 12, (m_fpu_inst_ptr & 0x0f0000) >> 4);\n\t\t\tbreak;\n\t\tcase 2: // 32-bit real mode\n\t\t\tWRITE16(ea + 0, m_x87_cw);\n\t\t\tWRITE16(ea + 4, m_x87_sw);\n\t\t\tWRITE16(ea + 8, m_x87_tw);\n//          WRITE16(ea + 12, m_fpu_inst_ptr & 0xffff);\n//          WRITE16(ea + 8, (m_fpu_opcode & 0x07ff) | ((m_fpu_inst_ptr & 0x0f0000) >> 4));\n//          WRITE16(ea + 20, m_fpu_data_ptr & 0xffff);\n//          WRITE16(ea + 12, ((m_fpu_inst_ptr & 0x0f0000) >> 4));\n//          WRITE32(ea + 24, (m_fpu_data_ptr >> 16) << 12);\n\t\t\tbreak;\n\t\tcase 3: // 32-bit protected mode\n\t\t\tWRITE16(ea + 0,  m_x87_cw);\n\t\t\tWRITE16(ea + 4,  m_x87_sw);\n\t\t\tWRITE16(ea + 8,  m_x87_tw);\n//          WRITE32(ea + 12, m_fpu_inst_ptr);\n//          WRITE32(ea + 16, m_fpu_opcode);\n//          WRITE32(ea + 20, m_fpu_data_ptr);\n//          WRITE32(ea + 24, m_fpu_inst_ptr);\n\t\t\tbreak;\n\t}\n\n\tCYCLES((m_cr[0] & 1) ? 56 : 67);\n}\n\nvoid x87_fsave(UINT8 modrm)\n{\n\tUINT32 ea = GetEA(modrm, 1);\n\n\t// TODO: Pointers and selectors\n\tswitch((m_cr[0] & 1)|(m_operand_size & 1)<<1)\n\t{\n\t\tcase 0: // 16-bit real mode\n\t\t\tWRITE16(ea + 0, m_x87_cw);\n\t\t\tWRITE16(ea + 2, m_x87_sw);\n\t\t\tWRITE16(ea + 4, m_x87_tw);\n//          WRITE16(ea + 6, m_fpu_inst_ptr & 0xffff);\n//          WRITE16(ea + 8, (m_fpu_opcode & 0x07ff) | ((m_fpu_inst_ptr & 0x0f0000) >> 4));\n//          WRITE16(ea + 10, m_fpu_data_ptr & 0xffff);\n//          WRITE16(ea + 12, (m_fpu_inst_ptr & 0x0f0000) >> 4);\n\t\t\tea += 14;\n\t\t\tbreak;\n\t\tcase 1: // 16-bit protected mode\n\t\t\tWRITE16(ea + 0, m_x87_cw);\n\t\t\tWRITE16(ea + 2, m_x87_sw);\n\t\t\tWRITE16(ea + 4, m_x87_tw);\n//          WRITE16(ea + 6, m_fpu_inst_ptr & 0xffff);\n//          WRITE16(ea + 8, (m_fpu_opcode & 0x07ff) | ((m_fpu_inst_ptr & 0x0f0000) >> 4));\n//          WRITE16(ea + 10, m_fpu_data_ptr & 0xffff);\n//          WRITE16(ea + 12, (m_fpu_inst_ptr & 0x0f0000) >> 4);\n\t\t\tea += 14;\n\t\t\tbreak;\n\t\tcase 2: // 32-bit real mode\n\t\t\tWRITE16(ea + 0, m_x87_cw);\n\t\t\tWRITE16(ea + 4, m_x87_sw);\n\t\t\tWRITE16(ea + 8, m_x87_tw);\n//          WRITE16(ea + 12, m_fpu_inst_ptr & 0xffff);\n//          WRITE16(ea + 8, (m_fpu_opcode & 0x07ff) | ((m_fpu_inst_ptr & 0x0f0000) >> 4));\n//          WRITE16(ea + 20, m_fpu_data_ptr & 0xffff);\n//          WRITE16(ea + 12, ((m_fpu_inst_ptr & 0x0f0000) >> 4));\n//          WRITE32(ea + 24, (m_fpu_data_ptr >> 16) << 12);\n\t\t\tea += 28;\n\t\t\tbreak;\n\t\tcase 3: // 32-bit protected mode\n\t\t\tWRITE16(ea + 0,  m_x87_cw);\n\t\t\tWRITE16(ea + 4,  m_x87_sw);\n\t\t\tWRITE16(ea + 8,  m_x87_tw);\n//          WRITE32(ea + 12, m_fpu_inst_ptr);\n//          WRITE32(ea + 16, m_fpu_opcode);\n//          WRITE32(ea + 20, m_fpu_data_ptr);\n//          WRITE32(ea + 24, m_fpu_inst_ptr);\n\t\t\tea += 28;\n\t\t\tbreak;\n\t}\n\n\tfor (int i = 0; i < 8; ++i)\n\t\tx87_write_stack(i, READ80(ea + i*10), FALSE);\n\n\tCYCLES((m_cr[0] & 1) ? 56 : 67);\n}\n\nvoid x87_frstor(UINT8 modrm)\n{\n\tUINT32 ea = GetEA(modrm, 0);\n\n\t// TODO: Pointers and selectors\n\tswitch((m_cr[0] & 1)|(m_operand_size & 1)<<1)\n\t{\n\t\tcase 0: // 16-bit real mode\n\t\t\tx87_write_cw(READ16(ea));\n\t\t\tm_x87_sw = READ16(ea + 2);\n\t\t\tm_x87_tw = READ16(ea + 4);\n//          WRITE16(ea + 6, m_fpu_inst_ptr & 0xffff);\n//          WRITE16(ea + 8, (m_fpu_opcode & 0x07ff) | ((m_fpu_inst_ptr & 0x0f0000) >> 4));\n//          WRITE16(ea + 10, m_fpu_data_ptr & 0xffff);\n//          WRITE16(ea + 12, (m_fpu_inst_ptr & 0x0f0000) >> 4);\n\t\t\tea += 14;\n\t\t\tbreak;\n\t\tcase 1: // 16-bit protected mode\n\t\t\tx87_write_cw(READ16(ea));\n\t\t\tm_x87_sw = READ16(ea + 2);\n\t\t\tm_x87_tw = READ16(ea + 4);\n//          WRITE16(ea + 6, m_fpu_inst_ptr & 0xffff);\n//          WRITE16(ea + 8, (m_fpu_opcode & 0x07ff) | ((m_fpu_inst_ptr & 0x0f0000) >> 4));\n//          WRITE16(ea + 10, m_fpu_data_ptr & 0xffff);\n//          WRITE16(ea + 12, (m_fpu_inst_ptr & 0x0f0000) >> 4);\n\t\t\tea += 14;\n\t\t\tbreak;\n\t\tcase 2: // 32-bit real mode\n\t\t\tx87_write_cw(READ16(ea));\n\t\t\tm_x87_sw = READ16(ea + 4);\n\t\t\tm_x87_tw = READ16(ea + 8);\n//          WRITE16(ea + 12, m_fpu_inst_ptr & 0xffff);\n//          WRITE16(ea + 8, (m_fpu_opcode & 0x07ff) | ((m_fpu_inst_ptr & 0x0f0000) >> 4));\n//          WRITE16(ea + 20, m_fpu_data_ptr & 0xffff);\n//          WRITE16(ea + 12, ((m_fpu_inst_ptr & 0x0f0000) >> 4));\n//          WRITE32(ea + 24, (m_fpu_data_ptr >> 16) << 12);\n\t\t\tea += 28;\n\t\t\tbreak;\n\t\tcase 3: // 32-bit protected mode\n\t\t\tx87_write_cw(READ16(ea));\n\t\t\tm_x87_sw = READ16(ea + 4);\n\t\t\tm_x87_tw = READ16(ea + 8);\n//          WRITE32(ea + 12, m_fpu_inst_ptr);\n//          WRITE32(ea + 16, m_fpu_opcode);\n//          WRITE32(ea + 20, m_fpu_data_ptr);\n//          WRITE32(ea + 24, m_fpu_inst_ptr);\n\t\t\tea += 28;\n\t\t\tbreak;\n\t}\n\n\tfor (int i = 0; i < 8; ++i)\n\t\tWRITE80(ea + i*10, ST(i));\n\n\tCYCLES((m_cr[0] & 1) ? 34 : 44);\n}\n\nvoid x87_fxch(UINT8 modrm)\n{\n\tif (X87_IS_ST_EMPTY(0) || X87_IS_ST_EMPTY(1))\n\t\tx87_set_stack_underflow();\n\n\tif (x87_check_exceptions())\n\t{\n\t\tfloatx80 tmp = ST(0);\n\t\tST(0) = ST(1);\n\t\tST(1) = tmp;\n\n\t\t// Swap the tags\n\t\tint tag0 = X87_TAG(ST_TO_PHYS(0));\n\t\tx87_set_tag(ST_TO_PHYS(0), X87_TAG(ST_TO_PHYS(1)));\n\t\tx87_set_tag(ST_TO_PHYS(1), tag0);\n\t}\n\n\tCYCLES(4);\n}\n\nvoid x87_fxch_sti(UINT8 modrm)\n{\n\tint i = modrm & 7;\n\n\tif (X87_IS_ST_EMPTY(0))\n\t{\n\t\tST(0) = fx80_inan;\n\t\tx87_set_tag(ST_TO_PHYS(0), X87_TW_SPECIAL);\n\t\tx87_set_stack_underflow();\n\t}\n\tif (X87_IS_ST_EMPTY(i))\n\t{\n\t\tST(i) = fx80_inan;\n\t\tx87_set_tag(ST_TO_PHYS(i), X87_TW_SPECIAL);\n\t\tx87_set_stack_underflow();\n\t}\n\n\tif (x87_check_exceptions())\n\t{\n\t\tfloatx80 tmp = ST(0);\n\t\tST(0) = ST(i);\n\t\tST(i) = tmp;\n\n\t\t// Swap the tags\n\t\tint tag0 = X87_TAG(ST_TO_PHYS(0));\n\t\tx87_set_tag(ST_TO_PHYS(0), X87_TAG(ST_TO_PHYS(i)));\n\t\tx87_set_tag(ST_TO_PHYS(i), tag0);\n\t}\n\n\tCYCLES(4);\n}\n\nvoid x87_fstsw_ax(UINT8 modrm)\n{\n\tREG16(AX) = m_x87_sw;\n\n\tCYCLES(3);\n}\n\nvoid x87_fstsw_m2byte(UINT8 modrm)\n{\n\tUINT32 ea = GetEA(modrm, 1);\n\n\tWRITE16(ea, m_x87_sw);\n\n\tCYCLES(3);\n}\n\nvoid x87_invalid(UINT8 modrm)\n{\n\t// TODO\n\tfatalerror(\"x87 invalid instruction (PC:%.4x)\\n\", m_pc);\n}\n\n\n\n/*************************************\n *\n * Instruction dispatch\n *\n *************************************/\n\nstatic void I386OP(x87_group_d8)()\n{\n\tUINT8 modrm = FETCH();\n\tm_opcode_table_x87_d8[modrm](modrm);\n}\n\nstatic void I386OP(x87_group_d9)()\n{\n\tUINT8 modrm = FETCH();\n\tm_opcode_table_x87_d9[modrm](modrm);\n}\n\nstatic void I386OP(x87_group_da)()\n{\n\tUINT8 modrm = FETCH();\n\tm_opcode_table_x87_da[modrm](modrm);\n}\n\nstatic void I386OP(x87_group_db)()\n{\n\tUINT8 modrm = FETCH();\n\tm_opcode_table_x87_db[modrm](modrm);\n}\n\nstatic void I386OP(x87_group_dc)()\n{\n\tUINT8 modrm = FETCH();\n\tm_opcode_table_x87_dc[modrm](modrm);\n}\n\nstatic void I386OP(x87_group_dd)()\n{\n\tUINT8 modrm = FETCH();\n\tm_opcode_table_x87_dd[modrm](modrm);\n}\n\nstatic void I386OP(x87_group_de)()\n{\n\tUINT8 modrm = FETCH();\n\tm_opcode_table_x87_de[modrm](modrm);\n}\n\nstatic void I386OP(x87_group_df)()\n{\n\tUINT8 modrm = FETCH();\n\tm_opcode_table_x87_df[modrm](modrm);\n}\n\n\n/*************************************\n *\n * Opcode table building\n *\n *************************************/\n\nvoid build_x87_opcode_table_d8()\n{\n\tint modrm = 0;\n\n\tfor (modrm = 0; modrm < 0x100; ++modrm)\n\t{\n\t\tvoid (*ptr)(UINT8 modrm) = x87_invalid;\n\n\t\tif (modrm < 0xc0)\n\t\t{\n\t\t\tswitch ((modrm >> 3) & 0x7)\n\t\t\t{\n\t\t\t\tcase 0x00: ptr = x87_fadd_m32real;  break;\n\t\t\t\tcase 0x01: ptr = x87_fmul_m32real;  break;\n\t\t\t\tcase 0x02: ptr = x87_fcom_m32real;  break;\n\t\t\t\tcase 0x03: ptr = x87_fcomp_m32real; break;\n\t\t\t\tcase 0x04: ptr = x87_fsub_m32real;  break;\n\t\t\t\tcase 0x05: ptr = x87_fsubr_m32real; break;\n\t\t\t\tcase 0x06: ptr = x87_fdiv_m32real;  break;\n\t\t\t\tcase 0x07: ptr = x87_fdivr_m32real; break;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tswitch (modrm)\n\t\t\t{\n\t\t\t\tcase 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: ptr = x87_fadd_st_sti;  break;\n\t\t\t\tcase 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: ptr = x87_fmul_st_sti;  break;\n\t\t\t\tcase 0xd0: case 0xd1: case 0xd2: case 0xd3: case 0xd4: case 0xd5: case 0xd6: case 0xd7: ptr = x87_fcom_sti;     break;\n\t\t\t\tcase 0xd8: case 0xd9: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf: ptr = x87_fcomp_sti;    break;\n\t\t\t\tcase 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7: ptr = x87_fsub_st_sti;  break;\n\t\t\t\tcase 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: ptr = x87_fsubr_st_sti; break;\n\t\t\t\tcase 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7: ptr = x87_fdiv_st_sti;  break;\n\t\t\t\tcase 0xf8: case 0xf9: case 0xfa: case 0xfb: case 0xfc: case 0xfd: case 0xfe: case 0xff: ptr = x87_fdivr_st_sti; break;\n\t\t\t}\n\t\t}\n\n\t\tm_opcode_table_x87_d8[modrm] = ptr;\n\t}\n}\n\n\nvoid build_x87_opcode_table_d9()\n{\n\tint modrm = 0;\n\n\tfor (modrm = 0; modrm < 0x100; ++modrm)\n\t{\n\t\tvoid (*ptr)(UINT8 modrm) = x87_invalid;\n\n\t\tif (modrm < 0xc0)\n\t\t{\n\t\t\tswitch ((modrm >> 3) & 0x7)\n\t\t\t{\n\t\t\t\tcase 0x00: ptr = x87_fld_m32real;   break;\n\t\t\t\tcase 0x02: ptr = x87_fst_m32real;   break;\n\t\t\t\tcase 0x03: ptr = x87_fstp_m32real;  break;\n\t\t\t\tcase 0x04: ptr = x87_fldenv;        break;\n\t\t\t\tcase 0x05: ptr = x87_fldcw;         break;\n\t\t\t\tcase 0x06: ptr = x87_fstenv;        break;\n\t\t\t\tcase 0x07: ptr = x87_fstcw;         break;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tswitch (modrm)\n\t\t\t{\n\t\t\t\tcase 0xc0:\n\t\t\t\tcase 0xc1:\n\t\t\t\tcase 0xc2:\n\t\t\t\tcase 0xc3:\n\t\t\t\tcase 0xc4:\n\t\t\t\tcase 0xc5:\n\t\t\t\tcase 0xc6:\n\t\t\t\tcase 0xc7: ptr = x87_fld_sti;   break;\n\n\t\t\t\tcase 0xc8:\n\t\t\t\tcase 0xc9:\n\t\t\t\tcase 0xca:\n\t\t\t\tcase 0xcb:\n\t\t\t\tcase 0xcc:\n\t\t\t\tcase 0xcd:\n\t\t\t\tcase 0xce:\n\t\t\t\tcase 0xcf: ptr = x87_fxch_sti;  break;\n\n\t\t\t\tcase 0xd0: ptr = x87_fnop;      break;\n\t\t\t\tcase 0xe0: ptr = x87_fchs;      break;\n\t\t\t\tcase 0xe1: ptr = x87_fabs;      break;\n\t\t\t\tcase 0xe4: ptr = x87_ftst;      break;\n\t\t\t\tcase 0xe5: ptr = x87_fxam;      break;\n\t\t\t\tcase 0xe8: ptr = x87_fld1;      break;\n\t\t\t\tcase 0xe9: ptr = x87_fldl2t;    break;\n\t\t\t\tcase 0xea: ptr = x87_fldl2e;    break;\n\t\t\t\tcase 0xeb: ptr = x87_fldpi;     break;\n\t\t\t\tcase 0xec: ptr = x87_fldlg2;    break;\n\t\t\t\tcase 0xed: ptr = x87_fldln2;    break;\n\t\t\t\tcase 0xee: ptr = x87_fldz;      break;\n\t\t\t\tcase 0xf0: ptr = x87_f2xm1;     break;\n\t\t\t\tcase 0xf1: ptr = x87_fyl2x;     break;\n\t\t\t\tcase 0xf2: ptr = x87_fptan;     break;\n\t\t\t\tcase 0xf3: ptr = x87_fpatan;    break;\n\t\t\t\tcase 0xf4: ptr = x87_fxtract;   break;\n\t\t\t\tcase 0xf5: ptr = x87_fprem1;    break;\n\t\t\t\tcase 0xf6: ptr = x87_fdecstp;   break;\n\t\t\t\tcase 0xf7: ptr = x87_fincstp;   break;\n\t\t\t\tcase 0xf8: ptr = x87_fprem;     break;\n\t\t\t\tcase 0xf9: ptr = x87_fyl2xp1;   break;\n\t\t\t\tcase 0xfa: ptr = x87_fsqrt;     break;\n\t\t\t\tcase 0xfb: ptr = x87_fsincos;   break;\n\t\t\t\tcase 0xfc: ptr = x87_frndint;   break;\n\t\t\t\tcase 0xfd: ptr = x87_fscale;    break;\n\t\t\t\tcase 0xfe: ptr = x87_fsin;      break;\n\t\t\t\tcase 0xff: ptr = x87_fcos;      break;\n\t\t\t}\n\t\t}\n\n\t\tm_opcode_table_x87_d9[modrm] = ptr;\n\t}\n}\n\nvoid build_x87_opcode_table_da()\n{\n\tint modrm = 0;\n\n\tfor (modrm = 0; modrm < 0x100; ++modrm)\n\t{\n\t\tvoid (*ptr)(UINT8 modrm) = x87_invalid;\n\n\t\tif (modrm < 0xc0)\n\t\t{\n\t\t\tswitch ((modrm >> 3) & 0x7)\n\t\t\t{\n\t\t\t\tcase 0x00: ptr = x87_fiadd_m32int;  break;\n\t\t\t\tcase 0x01: ptr = x87_fimul_m32int;  break;\n\t\t\t\tcase 0x02: ptr = x87_ficom_m32int;  break;\n\t\t\t\tcase 0x03: ptr = x87_ficomp_m32int; break;\n\t\t\t\tcase 0x04: ptr = x87_fisub_m32int;  break;\n\t\t\t\tcase 0x05: ptr = x87_fisubr_m32int; break;\n\t\t\t\tcase 0x06: ptr = x87_fidiv_m32int;  break;\n\t\t\t\tcase 0x07: ptr = x87_fidivr_m32int; break;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tswitch (modrm)\n\t\t\t{\n\t\t\t\tcase 0xe9: ptr = x87_fucompp;       break;\n\t\t\t}\n\t\t}\n\n\t\tm_opcode_table_x87_da[modrm] = ptr;\n\t}\n}\n\n\nvoid build_x87_opcode_table_db()\n{\n\tint modrm = 0;\n\n\tfor (modrm = 0; modrm < 0x100; ++modrm)\n\t{\n\t\tvoid (*ptr)(UINT8 modrm) = x87_invalid;\n\n\t\tif (modrm < 0xc0)\n\t\t{\n\t\t\tswitch ((modrm >> 3) & 0x7)\n\t\t\t{\n\t\t\t\tcase 0x00: ptr = x87_fild_m32int;   break;\n\t\t\t\tcase 0x02: ptr = x87_fist_m32int;   break;\n\t\t\t\tcase 0x03: ptr = x87_fistp_m32int;  break;\n\t\t\t\tcase 0x05: ptr = x87_fld_m80real;   break;\n\t\t\t\tcase 0x07: ptr = x87_fstp_m80real;  break;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tswitch (modrm)\n\t\t\t{\n\t\t\t\tcase 0xe0: ptr = x87_fnop;          break; /* FENI */\n\t\t\t\tcase 0xe1: ptr = x87_fnop;          break; /* FDISI */\n\t\t\t\tcase 0xe2: ptr = x87_fclex;         break;\n\t\t\t\tcase 0xe3: ptr = x87_finit;         break;\n\t\t\t\tcase 0xe4: ptr = x87_fnop;          break; /* FSETPM */\n\t\t\t}\n\t\t}\n\n\t\tm_opcode_table_x87_db[modrm] = ptr;\n\t}\n}\n\n\nvoid build_x87_opcode_table_dc()\n{\n\tint modrm = 0;\n\n\tfor (modrm = 0; modrm < 0x100; ++modrm)\n\t{\n\t\tvoid (*ptr)(UINT8 modrm) = x87_invalid;\n\n\t\tif (modrm < 0xc0)\n\t\t{\n\t\t\tswitch ((modrm >> 3) & 0x7)\n\t\t\t{\n\t\t\t\tcase 0x00: ptr = x87_fadd_m64real;  break;\n\t\t\t\tcase 0x01: ptr = x87_fmul_m64real;  break;\n\t\t\t\tcase 0x02: ptr = x87_fcom_m64real;  break;\n\t\t\t\tcase 0x03: ptr = x87_fcomp_m64real; break;\n\t\t\t\tcase 0x04: ptr = x87_fsub_m64real;  break;\n\t\t\t\tcase 0x05: ptr = x87_fsubr_m64real; break;\n\t\t\t\tcase 0x06: ptr = x87_fdiv_m64real;  break;\n\t\t\t\tcase 0x07: ptr = x87_fdivr_m64real; break;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tswitch (modrm)\n\t\t\t{\n\t\t\t\tcase 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: ptr = x87_fadd_sti_st;  break;\n\t\t\t\tcase 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: ptr = x87_fmul_sti_st;  break;\n\t\t\t\tcase 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7: ptr = x87_fsubr_sti_st; break;\n\t\t\t\tcase 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: ptr = x87_fsub_sti_st;  break;\n\t\t\t\tcase 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7: ptr = x87_fdivr_sti_st; break;\n\t\t\t\tcase 0xf8: case 0xf9: case 0xfa: case 0xfb: case 0xfc: case 0xfd: case 0xfe: case 0xff: ptr = x87_fdiv_sti_st;  break;\n\t\t\t}\n\t\t}\n\n\t\tm_opcode_table_x87_dc[modrm] = ptr;\n\t}\n}\n\n\nvoid build_x87_opcode_table_dd()\n{\n\tint modrm = 0;\n\n\tfor (modrm = 0; modrm < 0x100; ++modrm)\n\t{\n\t\tvoid (*ptr)(UINT8 modrm) = x87_invalid;\n\n\t\tif (modrm < 0xc0)\n\t\t{\n\t\t\tswitch ((modrm >> 3) & 0x7)\n\t\t\t{\n\t\t\t\tcase 0x00: ptr = x87_fld_m64real;   break;\n\t\t\t\tcase 0x02: ptr = x87_fst_m64real;   break;\n\t\t\t\tcase 0x03: ptr = x87_fstp_m64real;  break;\n\t\t\t\tcase 0x04: ptr = x87_frstor;        break;\n\t\t\t\tcase 0x06: ptr = x87_fsave;         break;\n\t\t\t\tcase 0x07: ptr = x87_fstsw_m2byte;  break;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tswitch (modrm)\n\t\t\t{\n\t\t\t\tcase 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: ptr = x87_ffree;        break;\n\t\t\t\tcase 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: ptr = x87_fxch_sti;     break;\n\t\t\t\tcase 0xd0: case 0xd1: case 0xd2: case 0xd3: case 0xd4: case 0xd5: case 0xd6: case 0xd7: ptr = x87_fst_sti;      break;\n\t\t\t\tcase 0xd8: case 0xd9: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf: ptr = x87_fstp_sti;     break;\n\t\t\t\tcase 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7: ptr = x87_fucom_sti;    break;\n\t\t\t\tcase 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: ptr = x87_fucomp_sti;   break;\n\t\t\t}\n\t\t}\n\n\t\tm_opcode_table_x87_dd[modrm] = ptr;\n\t}\n}\n\n\nvoid build_x87_opcode_table_de()\n{\n\tint modrm = 0;\n\n\tfor (modrm = 0; modrm < 0x100; ++modrm)\n\t{\n\t\tvoid (*ptr)(UINT8 modrm) = x87_invalid;\n\n\t\tif (modrm < 0xc0)\n\t\t{\n\t\t\tswitch ((modrm >> 3) & 0x7)\n\t\t\t{\n\t\t\t\tcase 0x00: ptr = x87_fiadd_m16int;  break;\n\t\t\t\tcase 0x01: ptr = x87_fimul_m16int;  break;\n\t\t\t\tcase 0x02: ptr = x87_ficom_m16int;  break;\n\t\t\t\tcase 0x03: ptr = x87_ficomp_m16int; break;\n\t\t\t\tcase 0x04: ptr = x87_fisub_m16int;  break;\n\t\t\t\tcase 0x05: ptr = x87_fisubr_m16int; break;\n\t\t\t\tcase 0x06: ptr = x87_fidiv_m16int;  break;\n\t\t\t\tcase 0x07: ptr = x87_fidivr_m16int; break;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tswitch (modrm)\n\t\t\t{\n\t\t\t\tcase 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: ptr = x87_faddp;    break;\n\t\t\t\tcase 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: ptr = x87_fmulp;    break;\n\t\t\t\tcase 0xd9: ptr = x87_fcompp; break;\n\t\t\t\tcase 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7: ptr = x87_fsubrp;   break;\n\t\t\t\tcase 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: ptr = x87_fsubp;    break;\n\t\t\t\tcase 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7: ptr = x87_fdivrp;   break;\n\t\t\t\tcase 0xf8: case 0xf9: case 0xfa: case 0xfb: case 0xfc: case 0xfd: case 0xfe: case 0xff: ptr = x87_fdivp;    break;\n\t\t\t}\n\t\t}\n\n\t\tm_opcode_table_x87_de[modrm] = ptr;\n\t}\n}\n\n\nvoid build_x87_opcode_table_df()\n{\n\tint modrm = 0;\n\n\tfor (modrm = 0; modrm < 0x100; ++modrm)\n\t{\n\t\tvoid (*ptr)(UINT8 modrm) = x87_invalid;\n\n\t\tif (modrm < 0xc0)\n\t\t{\n\t\t\tswitch ((modrm >> 3) & 0x7)\n\t\t\t{\n\t\t\t\tcase 0x00: ptr = x87_fild_m16int;   break;\n\t\t\t\tcase 0x02: ptr = x87_fist_m16int;   break;\n\t\t\t\tcase 0x03: ptr = x87_fistp_m16int;  break;\n\t\t\t\tcase 0x04: ptr = x87_fbld;          break;\n\t\t\t\tcase 0x05: ptr = x87_fild_m64int;   break;\n\t\t\t\tcase 0x06: ptr = x87_fbstp;         break;\n\t\t\t\tcase 0x07: ptr = x87_fistp_m64int;  break;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tswitch (modrm)\n\t\t\t{\n\t\t\t\tcase 0xe0: ptr = x87_fstsw_ax;      break;\n\t\t\t\tcase 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7: ptr = x87_fcomip_sti;    break;\n\t\t\t}\n\t\t}\n\n\t\tm_opcode_table_x87_df[modrm] = ptr;\n\t}\n}\n\nvoid build_x87_opcode_table()\n{\n\tbuild_x87_opcode_table_d8();\n\tbuild_x87_opcode_table_d9();\n\tbuild_x87_opcode_table_da();\n\tbuild_x87_opcode_table_db();\n\tbuild_x87_opcode_table_dc();\n\tbuild_x87_opcode_table_dd();\n\tbuild_x87_opcode_table_de();\n\tbuild_x87_opcode_table_df();\n}\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i86/ea.h",
    "content": "static unsigned EA_000() { m_eo=(WORD)(m_regs.w[BX]+m_regs.w[SI]); m_ea_seg=DefaultSeg(DS); m_ea=DefaultBase(DS)+m_eo; return m_ea; }\nstatic unsigned EA_001() { m_eo=(WORD)(m_regs.w[BX]+m_regs.w[DI]); m_ea_seg=DefaultSeg(DS); m_ea=DefaultBase(DS)+m_eo; return m_ea; }\nstatic unsigned EA_002() { m_eo=(WORD)(m_regs.w[BP]+m_regs.w[SI]); m_ea_seg=DefaultSeg(SS); m_ea=DefaultBase(SS)+m_eo; return m_ea; }\nstatic unsigned EA_003() { m_eo=(WORD)(m_regs.w[BP]+m_regs.w[DI]); m_ea_seg=DefaultSeg(SS); m_ea=DefaultBase(SS)+m_eo; return m_ea; }\nstatic unsigned EA_004() { m_eo=m_regs.w[SI]; m_ea_seg=DefaultSeg(DS); m_ea=DefaultBase(DS)+m_eo; return m_ea; }\nstatic unsigned EA_005() { m_eo=m_regs.w[DI]; m_ea_seg=DefaultSeg(DS); m_ea=DefaultBase(DS)+m_eo; return m_ea; }\nstatic unsigned EA_006() { m_eo=FETCHOP; m_eo+=FETCHOP<<8; m_ea_seg=DefaultSeg(DS); m_ea=DefaultBase(DS)+m_eo; return m_ea; }\nstatic unsigned EA_007() { m_eo=m_regs.w[BX]; m_ea_seg=DefaultSeg(DS); m_ea=DefaultBase(DS)+m_eo; return m_ea; }\n\nstatic unsigned EA_100() { m_eo=(WORD)(m_regs.w[BX]+m_regs.w[SI]+(INT8)FETCHOP); m_ea_seg=DefaultSeg(DS); m_ea=DefaultBase(DS)+m_eo; return m_ea; }\nstatic unsigned EA_101() { m_eo=(WORD)(m_regs.w[BX]+m_regs.w[DI]+(INT8)FETCHOP); m_ea_seg=DefaultSeg(DS); m_ea=DefaultBase(DS)+m_eo; return m_ea; }\nstatic unsigned EA_102() { m_eo=(WORD)(m_regs.w[BP]+m_regs.w[SI]+(INT8)FETCHOP); m_ea_seg=DefaultSeg(SS); m_ea=DefaultBase(SS)+m_eo; return m_ea; }\nstatic unsigned EA_103() { m_eo=(WORD)(m_regs.w[BP]+m_regs.w[DI]+(INT8)FETCHOP); m_ea_seg=DefaultSeg(SS); m_ea=DefaultBase(SS)+m_eo; return m_ea; }\nstatic unsigned EA_104() { m_eo=(WORD)(m_regs.w[SI]+(INT8)FETCHOP); m_ea_seg=DefaultSeg(DS); m_ea=DefaultBase(DS)+m_eo; return m_ea; }\nstatic unsigned EA_105() { m_eo=(WORD)(m_regs.w[DI]+(INT8)FETCHOP); m_ea_seg=DefaultSeg(DS); m_ea=DefaultBase(DS)+m_eo; return m_ea; }\nstatic unsigned EA_106() { m_eo=(WORD)(m_regs.w[BP]+(INT8)FETCHOP); m_ea_seg=DefaultSeg(SS); m_ea=DefaultBase(SS)+m_eo; return m_ea; }\nstatic unsigned EA_107() { m_eo=(WORD)(m_regs.w[BX]+(INT8)FETCHOP); m_ea_seg=DefaultSeg(DS); m_ea=DefaultBase(DS)+m_eo; return m_ea; }\n\nstatic unsigned EA_200() { m_eo=FETCHOP; m_eo+=FETCHOP<<8; m_eo+=m_regs.w[BX]+m_regs.w[SI]; m_ea_seg=DefaultSeg(DS); m_ea=DefaultBase(DS)+(WORD)m_eo; return m_ea; }\nstatic unsigned EA_201() { m_eo=FETCHOP; m_eo+=FETCHOP<<8; m_eo+=m_regs.w[BX]+m_regs.w[DI]; m_ea_seg=DefaultSeg(DS); m_ea=DefaultBase(DS)+(WORD)m_eo; return m_ea; }\nstatic unsigned EA_202() { m_eo=FETCHOP; m_eo+=FETCHOP<<8; m_eo+=m_regs.w[BP]+m_regs.w[SI]; m_ea_seg=DefaultSeg(SS); m_ea=DefaultBase(SS)+(WORD)m_eo; return m_ea; }\nstatic unsigned EA_203() { m_eo=FETCHOP; m_eo+=FETCHOP<<8; m_eo+=m_regs.w[BP]+m_regs.w[DI]; m_ea_seg=DefaultSeg(SS); m_ea=DefaultBase(SS)+(WORD)m_eo; return m_ea; }\nstatic unsigned EA_204() { m_eo=FETCHOP; m_eo+=FETCHOP<<8; m_eo+=m_regs.w[SI]; m_ea_seg=DefaultSeg(DS); m_ea=DefaultBase(DS)+(WORD)m_eo; return m_ea; }\nstatic unsigned EA_205() { m_eo=FETCHOP; m_eo+=FETCHOP<<8; m_eo+=m_regs.w[DI]; m_ea_seg=DefaultSeg(DS); m_ea=DefaultBase(DS)+(WORD)m_eo; return m_ea; }\nstatic unsigned EA_206() { m_eo=FETCHOP; m_eo+=FETCHOP<<8; m_eo+=m_regs.w[BP]; m_ea_seg=DefaultSeg(SS); m_ea=DefaultBase(SS)+(WORD)m_eo; return m_ea; }\nstatic unsigned EA_207() { m_eo=FETCHOP; m_eo+=FETCHOP<<8; m_eo+=m_regs.w[BX]; m_ea_seg=DefaultSeg(DS); m_ea=DefaultBase(DS)+(WORD)m_eo; return m_ea; }\n\nstatic unsigned (*const GetEA[192])()={\n\tEA_000, EA_001, EA_002, EA_003, EA_004, EA_005, EA_006, EA_007,\n\tEA_000, EA_001, EA_002, EA_003, EA_004, EA_005, EA_006, EA_007,\n\tEA_000, EA_001, EA_002, EA_003, EA_004, EA_005, EA_006, EA_007,\n\tEA_000, EA_001, EA_002, EA_003, EA_004, EA_005, EA_006, EA_007,\n\tEA_000, EA_001, EA_002, EA_003, EA_004, EA_005, EA_006, EA_007,\n\tEA_000, EA_001, EA_002, EA_003, EA_004, EA_005, EA_006, EA_007,\n\tEA_000, EA_001, EA_002, EA_003, EA_004, EA_005, EA_006, EA_007,\n\tEA_000, EA_001, EA_002, EA_003, EA_004, EA_005, EA_006, EA_007,\n\n\tEA_100, EA_101, EA_102, EA_103, EA_104, EA_105, EA_106, EA_107,\n\tEA_100, EA_101, EA_102, EA_103, EA_104, EA_105, EA_106, EA_107,\n\tEA_100, EA_101, EA_102, EA_103, EA_104, EA_105, EA_106, EA_107,\n\tEA_100, EA_101, EA_102, EA_103, EA_104, EA_105, EA_106, EA_107,\n\tEA_100, EA_101, EA_102, EA_103, EA_104, EA_105, EA_106, EA_107,\n\tEA_100, EA_101, EA_102, EA_103, EA_104, EA_105, EA_106, EA_107,\n\tEA_100, EA_101, EA_102, EA_103, EA_104, EA_105, EA_106, EA_107,\n\tEA_100, EA_101, EA_102, EA_103, EA_104, EA_105, EA_106, EA_107,\n\n\tEA_200, EA_201, EA_202, EA_203, EA_204, EA_205, EA_206, EA_207,\n\tEA_200, EA_201, EA_202, EA_203, EA_204, EA_205, EA_206, EA_207,\n\tEA_200, EA_201, EA_202, EA_203, EA_204, EA_205, EA_206, EA_207,\n\tEA_200, EA_201, EA_202, EA_203, EA_204, EA_205, EA_206, EA_207,\n\tEA_200, EA_201, EA_202, EA_203, EA_204, EA_205, EA_206, EA_207,\n\tEA_200, EA_201, EA_202, EA_203, EA_204, EA_205, EA_206, EA_207,\n\tEA_200, EA_201, EA_202, EA_203, EA_204, EA_205, EA_206, EA_207,\n\tEA_200, EA_201, EA_202, EA_203, EA_204, EA_205, EA_206, EA_207\n};\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i86/host.h",
    "content": "/*****************************************************************************/\n/* host dependent types                                                      */\n\n\n/*#define BIGCASE*/\n\n\ntypedef UINT8 BOOLEAN;\n\ntypedef UINT8 BYTE;\ntypedef UINT16 WORD;\ntypedef UINT32 DWORD;\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i86/i286.c",
    "content": "/****************************************************************************\n*             real mode i286 emulator v1.4 by Fabrice Frances               *\n*               (initial work based on David Hedley's pcemu)                *\n****************************************************************************/\n\n//#include \"emu.h\"\n//#include \"debugger.h\"\n//#include \"host.h\"\n\n\n#define VERBOSE 0\n#define LOG(x) do { if (VERBOSE) mame_printf_debug x; } while (0)\n\n/* All post-i286 CPUs have a 16MB address space */\n#define AMASK   m_amask\n\n\n#define INPUT_LINE_A20      1\n\n//#include \"i286.h\"\n#define TRAP(fault, code)  (UINT32)(((fault&0xffff)<<16)|(code&0xffff))\n\n//#include \"i86time.c\"\n\n/***************************************************************************/\n/* cpu state                                                               */\n/***************************************************************************/\n/* I86 registers */\nunion i80286basicregs\n{                   /* eight general registers */\n\tUINT16 w[8];    /* viewed as 16 bits registers */\n\tUINT8  b[16];   /* or as 8 bit registers */\n};\n\n//struct i80286_state\n//{\n\ti80286basicregs m_regs;\n\tUINT32  m_amask;          /* address mask */\n\tUINT32  m_pc;\n\tUINT32  m_prevpc;\n\tUINT16  m_flags;\n\tUINT16  m_msw;\n\tUINT32  m_base[4];\n\tUINT16  m_sregs[4];\n\tUINT16  m_limit[4];\n\tUINT8 m_rights[4];\n\tbool m_valid[4];\n\tstruct {\n\t\tUINT32 base;\n\t\tUINT16 limit;\n\t} m_gdtr, m_idtr;\n\tstruct {\n\t\tUINT16 sel;\n\t\tUINT32 base;\n\t\tUINT16 limit;\n\t\tUINT8 rights;\n\t} m_ldtr, m_tr;\n\tINT32   m_AuxVal, m_OverVal, m_SignVal, m_ZeroVal, m_CarryVal, m_DirVal; /* 0 or non-0 valued flags */\n\tUINT8   m_ParityVal;\n\tUINT8   m_TF, m_IF;     /* 0 or 1 valued flags */\n\tINT8    m_nmi_state;\n\tINT8    m_irq_state;\n\tINT8    m_test_state;\n\n\tint m_halted;         /* Is the CPU halted ? */\n\tint m_trap_level;\n\n\tchar m_seg_prefix;\n\tUINT8   m_prefix_seg;\n\tunsigned m_ea;\n\tUINT16 m_eo; /* HJB 12/13/98 effective offset of the address (before segment is added) */\n\tUINT8 m_ea_seg;   /* effective segment of the address */\n//};\n\n#define INT_IRQ 0x01\n#define NMI_IRQ 0x02\n\nstatic UINT8 parity_table[256];\n\n//static struct i80x86_timing timing;\n\n/***************************************************************************/\n\n#define I80286\n#include \"i86priv.h\"\n#define PREFIX(fname) i80286##fname\n#define PREFIX86(fname) i80286##fname\n#define PREFIX186(fname) i80286##fname\n#define PREFIX286(fname) i80286##fname\n#define i8086_state i80286_state\n\n#include \"ea.h\"\n#include \"modrm286.h\"\n#include \"instr86.h\"\n#include \"instr186.h\"\n#include \"instr286.h\"\n#include \"table286.h\"\n#include \"instr86.c\"\n#include \"instr186.c\"\n#include \"instr286.c\"\n\nstatic void i80286_urinit(void)\n{\n\tunsigned int i,j,c;\n\tstatic const BREGS reg_name[8]={ AL, CL, DL, BL, AH, CH, DH, BH };\n\n\tfor (i = 0;i < 256; i++)\n\t{\n\t\tfor (j = i, c = 0; j > 0; j >>= 1)\n\t\t\tif (j & 1) c++;\n\n\t\tparity_table[i] = !(c & 1);\n\t}\n\n\tfor (i = 0; i < 256; i++)\n\t{\n\t\tMod_RM.reg.b[i] = reg_name[(i & 0x38) >> 3];\n\t\tMod_RM.reg.w[i] = (WREGS) ( (i & 0x38) >> 3) ;\n\t}\n\n\tfor (i = 0xc0; i < 0x100; i++)\n\t{\n\t\tMod_RM.RM.w[i] = (WREGS)( i & 7 );\n\t\tMod_RM.RM.b[i] = (BREGS)reg_name[i & 7];\n\t}\n}\n\nstatic void i80286_set_a20_line(int state)\n{\n\tm_amask = state ? 0x00ffffff : 0x000fffff;\n}\n\nstatic CPU_RESET( i80286 )\n{\n\tmemset(&m_regs, 0, sizeof(i80286basicregs));\n\tm_sregs[CS] = 0xf000;\n\tm_base[CS] = 0xff0000;\n\tm_pc = 0xfffff0;\n\tm_limit[CS]=m_limit[SS]=m_limit[DS]=m_limit[ES]=0xffff;\n\tm_sregs[DS]=m_sregs[SS]=m_sregs[ES]=0;\n\tm_base[DS]=m_base[SS]=m_base[ES]=0;\n\tm_rights[DS]=m_rights[SS]=m_rights[ES]=0x93;\n\tm_rights[CS]=0x9a;\n\tm_valid[CS]=m_valid[SS]=m_valid[DS]=m_valid[ES]=1;\n\tm_msw=0xfff0;\n\tm_flags=2;\n\tExpandFlags(m_flags);\n\tm_idtr.base=0;m_idtr.limit=0x3ff;\n\tm_gdtr.base=m_ldtr.base=m_tr.base=0;\n\tm_gdtr.limit=m_ldtr.limit=m_tr.limit=0;\n\tm_ldtr.rights=m_tr.rights=0;\n\tm_ldtr.sel=m_tr.sel=0;\n\tm_seg_prefix = FALSE;\n\n\tCHANGE_PC(m_pc);\n\n\tm_halted = 0;\n}\n\n/****************************************************************************/\n\n/* ASG 971222 -- added these interface functions */\n\nstatic void set_irq_line(int irqline, int state)\n{\n\tif (state != CLEAR_LINE && m_halted)\n\t{\n\t\tm_halted = 0;\n\t}\n\ttry\n\t{\n\t\tif (irqline == INPUT_LINE_NMI)\n\t\t{\n\t\t\tif (m_nmi_state == state)\n\t\t\t\treturn;\n\t\t\tm_nmi_state = state;\n\n\t\t\t/* on a rising edge, signal the NMI */\n\t\t\tif (state != CLEAR_LINE)\n\t\t\t\ti80286_interrupt_descriptor(I8086_NMI_INT_VECTOR, 2, -1);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tm_irq_state = state;\n\n\t\t\t/* if the IF is set, signal an interrupt */\n\t\t\tif (state != CLEAR_LINE && m_IF)\n\t\t\t{\n\t\t\t\ti80286_interrupt_descriptor(pic_ack(), 2, -1);\n\t\t\t\tm_irq_state = CLEAR_LINE;\n\t\t\t}\n\n\t\t}\n\t}\n\tcatch (UINT32 e)\n\t{\n\t\ti80286_trap2(e);\n\t}\n}\n\nstatic CPU_EXECUTE( i80286 )\n{\n//\tif (m_halted)\n//\t{\n//\t\treturn;\n//\t}\n\n\t/* run until we're out */\n//\twhile(m_icount>0)\n//\t{\n\t\tm_seg_prefix=FALSE;\n\t\ttry\n\t\t{\n\t\t\tif (PM && ((m_pc-m_base[CS]) > m_limit[CS]))\n\t\t\t\tthrow TRAP(GENERAL_PROTECTION_FAULT, m_sregs[CS] & ~3);\n\t\t\tm_prevpc = m_pc;\n\n\t\t\tTABLE286 // call instruction\n\t\t}\n\t\tcatch (UINT32 e)\n\t\t{\n\t\t\ti80286_trap2(e);\n\t\t}\n//\t}\n}\n\nextern int i386_dasm_one(char *buffer, UINT32 eip, const UINT8 *oprom, int mode);\n\nstatic CPU_DISASSEMBLE( i80286 )\n{\n\treturn i386_dasm_one(buffer, m_pc, oprom, 2);\n}\n\nstatic CPU_INIT( i80286 )\n{\n\t/* If a reset parameter is given, take it as pointer to an address mask */\n\tm_amask = 0x00ffff;\n\n\ti80286_urinit();\n}\n\n#undef I80286\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i86/i286.h",
    "content": "/* ASG 971222 -- rewrote this interface */\n#pragma once\n\n#ifndef __I286INTF_H__\n#define __I286INTF_H__\n\n#include \"i86.h\"\n\nenum\n{\n\tI286_PC = 0,\n\n\t/* 8-bit registers */\n\tI286_AL,\n\tI286_AH,\n\tI286_BL,\n\tI286_BH,\n\tI286_CL,\n\tI286_CH,\n\tI286_DL,\n\tI286_DH,\n\n\t/* 16-bit registers */\n\tI286_AX,\n\tI286_BX,\n\tI286_CX,\n\tI286_DX,\n\tI286_BP,\n\tI286_SP,\n\tI286_SI,\n\tI286_DI,\n\tI286_IP,\n\n\t/* segment registers */\n\tI286_CS,\n\tI286_CS_BASE,\n\tI286_CS_LIMIT,\n\tI286_CS_FLAGS,\n\tI286_SS,\n\tI286_SS_BASE,\n\tI286_SS_LIMIT,\n\tI286_SS_FLAGS,\n\tI286_DS,\n\tI286_DS_BASE,\n\tI286_DS_LIMIT,\n\tI286_DS_FLAGS,\n\tI286_ES,\n\tI286_ES_BASE,\n\tI286_ES_LIMIT,\n\tI286_ES_FLAGS,\n\n\t/* other */\n\tI286_FLAGS,\n\tI286_MSW,\n\n\tI286_GDTR_BASE,\n\tI286_GDTR_LIMIT,\n\tI286_IDTR_BASE,\n\tI286_IDTR_LIMIT,\n\tI286_TR,\n\tI286_TR_BASE,\n\tI286_TR_LIMIT,\n\tI286_TR_FLAGS,\n\tI286_LDTR,\n\tI286_LDTR_BASE,\n\tI286_LDTR_LIMIT,\n\tI286_LDTR_FLAGS,\n};\n\n#define TRAP(fault, code)  (UINT32)(((fault&0xffff)<<16)|(code&0xffff))\n\n/* Public functions */\nDECLARE_LEGACY_CPU_DEVICE(I80286, i80286);\n\n#endif /* __I286INTF_H__ */\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i86/i86.c",
    "content": "/****************************************************************************\n*             real mode i286 emulator v1.4 by Fabrice Frances               *\n*               (initial work based on David Hedley's pcemu)                *\n****************************************************************************/\n/* 26.March 2000 PeT changed set_irq_line */\n\n//#include \"emu.h\"\n//#include \"debugger.h\"\n\n//#include \"host.h\"\n#include \"i86priv.h\"\n//#include \"i86.h\"\n\nextern int i386_dasm_one(char *buffer, UINT32 eip, const UINT8 *oprom, int mode);\n\n#define VERBOSE 0\n#define LOG(x) do { if (VERBOSE) mame_printf_debug x; } while (0)\n\n\n/* All pre-i286 CPUs have a 1MB address space */\n#define AMASK   0xfffff\n#define AMASK   UINT_MAX\n\n\n/* I86 registers */\nunion i8086basicregs\n{                                      /* eight general registers */\n\tUINT16 w[8];                       /* viewed as 16 bits registers */\n\tUINT8 b[16];                       /* or as 8 bit registers */\n};\n\n//struct i8086_state\n//{\n\ti8086basicregs m_regs;\n\tUINT32 m_pc;\n\tUINT32 m_prevpc;\n\tUINT32 m_base[4];\n\tUINT16 m_sregs[4];\n\tUINT16 m_flags;\n\tINT32 m_AuxVal, m_OverVal, m_SignVal, m_ZeroVal, m_CarryVal, m_DirVal;      /* 0 or non-0 valued flags */\n\tUINT8 m_ParityVal;\n\tUINT8 m_TF, m_IF;                  /* 0 or 1 valued flags */\n\tUINT8 m_MF;                          /* V30 mode flag */\n\tUINT8 m_int_vector;\n\tINT8 m_nmi_state;\n\tINT8 m_irq_state;\n\tINT8 m_test_state;\n\n\tint m_halted;         /* Is the CPU halted ? */\n\n\tUINT16 m_ip;\n\tUINT32 m_sp;\n\n\tchar m_seg_prefix;                   /* prefix segment indicator */\n\tUINT8   m_prefix_seg;                 /* The prefixed segment */\n\tunsigned m_ea;\n\tUINT16 m_eo; /* HJB 12/13/98 effective offset of the address (before segment is added) */\n\tUINT8 m_ea_seg;   /* effective segment of the address */\n//};\n\n\n//#include \"i86time.c\"\n\n/***************************************************************************/\n/* cpu state                                                               */\n/***************************************************************************/\n\n\n//static struct i80x86_timing timing;\n\nstatic UINT8 parity_table[256];\n\n/* The interrupt number of a pending external interrupt pending NMI is 2.   */\n/* For INTR interrupts, the level is caught on the bus during an INTA cycle */\n\n#define PREFIX(name) i8086##name\n#define PREFIX86(name) i8086##name\n\n#define I8086\n#include \"instr86.h\"\n#include \"ea.h\"\n#include \"modrm.h\"\n#include \"table86.h\"\n\n#include \"instr86.c\"\n#undef I8086\n\n\n/***************************************************************************/\nstatic CPU_INIT( i8086 )\n{\n\tunsigned int i, j, c;\n\tstatic const BREGS reg_name[8] = {AL, CL, DL, BL, AH, CH, DH, BH};\n\tfor (i = 0; i < 256; i++)\n\t{\n\t\tfor (j = i, c = 0; j > 0; j >>= 1)\n\t\t\tif (j & 1)\n\t\t\t\tc++;\n\n\t\tparity_table[i] = !(c & 1);\n\t}\n\n\tfor (i = 0; i < 256; i++)\n\t{\n\t\tMod_RM.reg.b[i] = reg_name[(i & 0x38) >> 3];\n\t\tMod_RM.reg.w[i] = (WREGS) ((i & 0x38) >> 3);\n\t}\n\n\tfor (i = 0xc0; i < 0x100; i++)\n\t{\n\t\tMod_RM.RM.w[i] = (WREGS) (i & 7);\n\t\tMod_RM.RM.b[i] = (BREGS) reg_name[i & 7];\n\t}\n}\n\nstatic CPU_INIT( i8088 )\n{\n\tCPU_INIT_CALL(i8086);\n}\n\nstatic CPU_INIT( i80186 )\n{\n\tCPU_INIT_CALL(i8086);\n}\n\nstatic CPU_RESET( i8086 )\n{\n\tmemset(&m_regs, 0, sizeof(m_regs));\n\tmemset(m_base, 0, sizeof(m_base));\n\tmemset(m_sregs, 0, sizeof(m_sregs));\n\tm_flags = 0;\n\tm_int_vector = 0;\n\tm_nmi_state = 0;\n\tm_irq_state = 0;\n\tm_test_state = 0;\n\n\tm_halted = 0;\n\n\tm_ip = 0;\n\tm_sp = 0;\n\n\tm_seg_prefix = 0;\n\tm_prefix_seg = 0;\n\tm_ea = 0;\n\tm_eo = 0;\n\tm_ea_seg = 0;\n\n\tm_sregs[CS] = 0xffff;\n\tm_base[CS] = SegBase(CS);\n\tm_pc = 0xffff0 & AMASK;\n\tExpandFlags(m_flags);\n\n\tm_halted = 0;\n}\n\nstatic CPU_RESET( i8088 )\n{\n\tCPU_INIT_CALL(i8086);\n}\n\nstatic CPU_RESET( i80186 )\n{\n\tCPU_INIT_CALL(i8086);\n}\n\n/* ASG 971222 -- added these interface functions */\n\nstatic void set_irq_line(int irqline, int state)\n{\n\tif (state != CLEAR_LINE && m_halted)\n\t{\n\t\tm_halted = 0;\n\t}\n\n\tif (irqline == INPUT_LINE_NMI)\n\t{\n\t\tif (m_nmi_state == state)\n\t\t\treturn;\n\t\tm_nmi_state = state;\n\n\t\t/* on a rising edge, signal the NMI */\n\t\tif (state != CLEAR_LINE)\n\t\t{\n\t\t\tPREFIX(_interrupt)(I8086_NMI_INT_VECTOR);\n\t\t}\n\t}\n\telse\n\t{\n\t\tm_irq_state = state;\n\n\t\t/* if the IF is set, signal an interrupt */\n\t\tif (state != CLEAR_LINE && m_IF)\n\t\t{\n\t\t\tPREFIX(_interrupt)((UINT32)-1);\n\t\t\tm_irq_state = CLEAR_LINE;\n\t\t}\n\t}\n}\n\nstatic void set_drq_line(int irqline, int state)\n{\n\t// TODO implement me\n}\n\nstatic void set_tmrin_line(int irqline, int state)\n{\n\t// TODO implement me\n}\n\n/* PJB 03/05 */\nstatic void set_test_line(int state)\n{\n\tm_test_state = !state;\n}\n\nstatic CPU_EXECUTE( i8086 )\n{\n\tif (m_halted)\n\t{\n\t\treturn;\n\t}\n\n\tm_seg_prefix = FALSE;\n\tm_prevpc = m_pc;\n\tTABLE86;\n}\n\n\nstatic CPU_DISASSEMBLE( i8086 )\n{\n\treturn i386_dasm_one(buffer, m_pc, oprom, 1);\n}\n\n\n\n//#include \"i86.h\"\n\n#undef PREFIX\n#define PREFIX(name) i80186##name\n#define PREFIX186(name) i80186##name\n\n#define I80186\n#include \"instr186.h\"\n#include \"table186.h\"\n\n#include \"instr86.c\"\n#include \"instr186.c\"\n#undef I80186\n\nstatic CPU_EXECUTE( i80186 )\n{\n\tif (m_halted)\n\t{\n\t\treturn;\n\t}\n\n\tm_seg_prefix = FALSE;\n\tm_prevpc = m_pc;\n\tTABLE186;\n}\n\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i86/i86.h",
    "content": "/* ASG 971222 -- rewrote this interface */\n#pragma once\n\n#ifndef __I86INTF_H__\n#define __I86INTF_H__\n\n\n#define INPUT_LINE_INT0         INPUT_LINE_IRQ0\n#define INPUT_LINE_INT1         INPUT_LINE_IRQ1\n#define INPUT_LINE_INT2         INPUT_LINE_IRQ2\n#define INPUT_LINE_INT3         INPUT_LINE_IRQ3\n#define INPUT_LINE_TEST         20    /* PJB 03/05 */\n#define INPUT_LINE_DRQ0         21\n#define INPUT_LINE_DRQ1         22\n#define INPUT_LINE_TMRIN0       23\n#define INPUT_LINE_TMRIN1       24\n\n\nstruct i80186_interface\n{\n\tdevcb_write_line        out_tmrout0_func;\n\tdevcb_write_line        out_tmrout1_func;\n};\n#define I80186_INTERFACE(name) const i80186_interface (name) =\n\n\nenum\n{\n\tI8086_IP,\n\tI8086_AX,\n\tI8086_CX,\n\tI8086_DX,\n\tI8086_BX,\n\tI8086_SP,\n\tI8086_BP,\n\tI8086_SI,\n\tI8086_DI,\n\tI8086_AL,\n\tI8086_CL,\n\tI8086_DL,\n\tI8086_BL,\n\tI8086_AH,\n\tI8086_CH,\n\tI8086_DH,\n\tI8086_BH,\n\tI8086_FLAGS,\n\tI8086_ES,\n\tI8086_CS,\n\tI8086_SS,\n\tI8086_DS,\n\tI8086_VECTOR,\n\n\tI8086_GENPC = STATE_GENPC,\n\tI8086_GENSP = STATE_GENSP,\n\tI8086_GENPCBASE = STATE_GENPCBASE\n};\n\n/* Public functions */\nDECLARE_LEGACY_CPU_DEVICE(I8086, i8086);\nDECLARE_LEGACY_CPU_DEVICE(I8088, i8088);\nDECLARE_LEGACY_CPU_DEVICE(I80186, i80186);\nDECLARE_LEGACY_CPU_DEVICE(I80188, i80188);\n\n#endif /* __I86INTF_H__ */\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i86/i86.txt",
    "content": "intel 8086 and compatibles\n--------------------------\n\nthis info is here, \nto list and give some remarks on all 8086 compatible processors\n\nexcellent info in Hamarsoft's 86BUGS list\n(also distributed in ralf browns interrupt list)\n\n8086/8088\n---------\n20 bit address bus, 16 bit data bus and registers\nmany 8080 assembler sources should be compilable/reusable\n\n8086 \n----\n6 bytes prefetch queue\n\n8088\n----\n8086 with 8 bit data bus, \nprefetch queue only 4 byte, and refilled when 1 byte empty\n\nearly 8086/8088 revisions bug\n-----------------------------\n(copyright 1978 on package)\nmov sreg, doesnot disable until next operation is executed\n\n8086/8088\n---------\n\"mov cs, \" causes unconditional jump!\n\n80C86/80C88\n-----------\n\"mov cs, \" ignored\n\n80186/80188\n-----------\nintegrated pic8259, pit8253, dma8253 (but not at standard pc addresses)\nadditional instructions\n\"mov cs, \" ?\nshift count anded with 0x1f\n\n80188\n-----\n8bit data bus\n\nNEC series\n----------\n80186 instruction set, additional nec instructions\nalthough it is based on 80186 instruction set, some behaviours follow 8086\n8080 emulation mode\n\"mov cs, \" ignored\nshift count not anded (acts like 8086)\n\nNEC 70116 (V30)\n---------------\n8086 pin compatible\n\nNEC 70108 (V20)\n---------------\n8088 pinout\n\nNEC V30MX\n---------\non die ems hardware\n24 bit address but for ems memory!?\nno 8080 emulation mode\n\nNEC V40\n-------\npinout, integrated peripherals as 80186\n\nNEC V50\n-------\npinout, integrated peripherals as 80188\n\nNEC V33?\n--------\nspeed optimized V30?\n\nNEC V25/V35?\n------------\n\nNEC V25+/V35+?\n--------------\n\nNEC V60/V70\n-----------\nrisc (misc/delux) like instruction set\nv30? emulation mode (without 8080 emulation mode)\n\n80286\n-----\n80186 with additional instructions\n24 bit address bus, \nprotected mode\n\n80386 and later\n---------------\nnot covered here\n\n8087/80287/80387/80387sx\n------------------------\nmathematical coprocessors\n\nweitek, iit variants\n\nin 80486 coprocessor integrated \n(except 80486sx and several clones)\n80487: 80486 with other pinout\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i86/i86priv.h",
    "content": "/****************************************************************************/\n/*            real mode i286 emulator by Fabrice Frances                    */\n/*           (initial work based on David Hedley's pcemu)                   */\n/*                                                                          */\n/****************************************************************************/\n#pragma once\n\n#ifndef __I86_H__\n#define __I86_H__\n\n#define I8086_NMI_INT_VECTOR 2\n\nenum SREGS { ES, CS, SS, DS };\nenum WREGS { AX, CX, DX, BX, SP, BP, SI, DI };\n\n#ifndef FALSE\n#define FALSE 0\n#define TRUE 1\n#endif\n\n\nenum BREGS {\n\tAL = NATIVE_ENDIAN_VALUE_LE_BE(0x0, 0x1),\n\tAH = NATIVE_ENDIAN_VALUE_LE_BE(0x1, 0x0),\n\tCL = NATIVE_ENDIAN_VALUE_LE_BE(0x2, 0x3),\n\tCH = NATIVE_ENDIAN_VALUE_LE_BE(0x3, 0x2),\n\tDL = NATIVE_ENDIAN_VALUE_LE_BE(0x4, 0x5),\n\tDH = NATIVE_ENDIAN_VALUE_LE_BE(0x5, 0x4),\n\tBL = NATIVE_ENDIAN_VALUE_LE_BE(0x6, 0x7),\n\tBH = NATIVE_ENDIAN_VALUE_LE_BE(0x7, 0x6),\n\tSPL = NATIVE_ENDIAN_VALUE_LE_BE(0x8, 0x9),\n\tSPH = NATIVE_ENDIAN_VALUE_LE_BE(0x9, 0x8),\n\tBPL = NATIVE_ENDIAN_VALUE_LE_BE(0xa, 0xb),\n\tBPH = NATIVE_ENDIAN_VALUE_LE_BE(0xb, 0xa),\n\tSIL = NATIVE_ENDIAN_VALUE_LE_BE(0xc, 0xd),\n\tSIH = NATIVE_ENDIAN_VALUE_LE_BE(0xd, 0xc),\n\tDIL = NATIVE_ENDIAN_VALUE_LE_BE(0xe, 0xf),\n\tDIH = NATIVE_ENDIAN_VALUE_LE_BE(0xf, 0xe)\n};\n\n/* parameter x = result, y = source 1, z = source 2 */\n\n#define SetTF(x)            (m_TF = (x))\n#define SetIF(x)            (m_IF = (x))\n#define SetDF(x)            (m_DirVal = (x) ? -1 : 1)\n\n#define SetOFW_Add(x,y,z)   (m_OverVal = ((x) ^ (y)) & ((x) ^ (z)) & 0x8000)\n#define SetOFB_Add(x,y,z)   (m_OverVal = ((x) ^ (y)) & ((x) ^ (z)) & 0x80)\n#define SetOFW_Sub(x,y,z)   (m_OverVal = ((z) ^ (y)) & ((z) ^ (x)) & 0x8000)\n#define SetOFB_Sub(x,y,z)   (m_OverVal = ((z) ^ (y)) & ((z) ^ (x)) & 0x80)\n\n#define SetCFB(x)           (m_CarryVal = (x) & 0x100)\n#define SetCFW(x)           (m_CarryVal = (x) & 0x10000)\n#define SetAF(x,y,z)        (m_AuxVal = ((x) ^ ((y) ^ (z))) & 0x10)\n#define SetSF(x)            (m_SignVal = (x))\n#define SetZF(x)            (m_ZeroVal = (x))\n#define SetPF(x)            (m_ParityVal = (x))\n\n#define SetSZPF_Byte(x)     (m_ParityVal = m_SignVal = m_ZeroVal = (INT8)(x))\n#define SetSZPF_Word(x)     (m_ParityVal = m_SignVal = m_ZeroVal = (INT16)(x))\n\n#define ADDB(dst,src) { unsigned res=dst+src; SetCFB(res); SetOFB_Add(res,src,dst); SetAF(res,src,dst); SetSZPF_Byte(res); dst=(BYTE)res; }\n#define ADDW(dst,src) { unsigned res=dst+src; SetCFW(res); SetOFW_Add(res,src,dst); SetAF(res,src,dst); SetSZPF_Word(res); dst=(WORD)res; }\n\n#define SUBB(dst,src) { unsigned res=dst-src; SetCFB(res); SetOFB_Sub(res,src,dst); SetAF(res,src,dst); SetSZPF_Byte(res); dst=(BYTE)res; }\n#define SUBW(dst,src) { unsigned res=dst-src; SetCFW(res); SetOFW_Sub(res,src,dst); SetAF(res,src,dst); SetSZPF_Word(res); dst=(WORD)res; }\n\n// don't modify CF in case fault occurs\n#define ADCB(dst,src,tmpcf) { unsigned res=dst+src; tmpcf = res & 0x100; SetOFB_Add(res,src,dst); SetAF(res,src,dst); SetSZPF_Byte(res); dst=(BYTE)res; }\n#define ADCW(dst,src,tmpcf) { unsigned res=dst+src; tmpcf = res & 0x10000; SetOFW_Add(res,src,dst); SetAF(res,src,dst); SetSZPF_Word(res); dst=(WORD)res; }\n\n#define SBBB(dst,src,tmpcf) { unsigned res=dst-src; tmpcf = res & 0x100; SetOFB_Sub(res,src,dst); SetAF(res,src,dst); SetSZPF_Byte(res); dst=(BYTE)res; }\n#define SBBW(dst,src,tmpcf) { unsigned res=dst-src; tmpcf = res & 0x10000; SetOFW_Sub(res,src,dst); SetAF(res,src,dst); SetSZPF_Word(res); dst=(WORD)res; }\n\n#define ORB(dst,src)        dst |= src; m_CarryVal = m_OverVal = m_AuxVal = 0; SetSZPF_Byte(dst)\n#define ORW(dst,src)        dst |= src; m_CarryVal = m_OverVal = m_AuxVal = 0; SetSZPF_Word(dst)\n\n#define ANDB(dst,src)       dst &= src; m_CarryVal = m_OverVal = m_AuxVal = 0; SetSZPF_Byte(dst)\n#define ANDW(dst,src)       dst &= src; m_CarryVal = m_OverVal = m_AuxVal = 0; SetSZPF_Word(dst)\n\n#define XORB(dst,src)       dst ^= src; m_CarryVal = m_OverVal = m_AuxVal = 0; SetSZPF_Byte(dst)\n#define XORW(dst,src)       dst ^= src; m_CarryVal = m_OverVal = m_AuxVal = 0; SetSZPF_Word(dst)\n\n#define CF                  (int)(m_CarryVal != 0)\n#define SF                  (int)(m_SignVal < 0)\n#define ZF                  (int)(m_ZeroVal == 0)\n#define PF                  parity_table[m_ParityVal&0xff]\n#define AF                  (int)(m_AuxVal != 0)\n#define OF                  (int)(m_OverVal != 0)\n#define DF                  (int)(m_DirVal < 0)\n\n/************************************************************************/\n\n#define read_mem_byte(a)            read_byte(a)\n#define read_mem_word(a)            read_word_unaligned(a)\n#define write_mem_byte(a,d)         write_byte((a),(d))\n#define write_mem_word(a,d)         write_word_unaligned((a),(d))\n\n#define read_port_byte(a)       read_io_byte(a)\n#define read_port_word(a)       read_io_word_unaligned(a)\n#define write_port_byte(a,d)    write_io_byte((a),(d))\n#define write_port_word(a,d)    write_io_word_unaligned((a),(d))\n\n/************************************************************************/\n\n#define SegBase(Seg)            (m_sregs[Seg] << 4)\n\n#define DefaultSeg(Seg)         ((m_seg_prefix && (Seg == DS || Seg == SS)) ? m_prefix_seg : Seg)\n#define DefaultBase(Seg)        ((m_seg_prefix && (Seg == DS || Seg == SS)) ? m_base[m_prefix_seg] : m_base[Seg])\n\n#ifdef I80286\n#define GetMemB(Seg,Off)        (read_mem_byte(GetMemAddr(Seg,Off,1,I80286_READ)))\n#define GetMemW(Seg,Off)        (read_mem_word(GetMemAddr(Seg,Off,2,I80286_READ)))\n#define PutMemB(Seg,Off,x)      write_mem_byte(GetMemAddr(Seg,Off,1,I80286_WRITE), (x))\n#define PutMemW(Seg,Off,x)      write_mem_word(GetMemAddr(Seg,Off,2,I80286_WRITE), (x))\n#else\n#define GetMemB(Seg,Off)        (read_mem_byte((DefaultBase(Seg) + (Off)) & AMASK))\n#define GetMemW(Seg,Off)        (read_mem_word((DefaultBase(Seg) + (Off)) & AMASK))\n#define PutMemB(Seg,Off,x)      write_mem_byte((DefaultBase(Seg) + (Off)) & AMASK, (x))\n#define PutMemW(Seg,Off,x)      write_mem_word((DefaultBase(Seg) + (Off)) & AMASK, (x))\n#endif\n\n#define PEEKBYTE(ea)            (read_mem_byte((ea) & AMASK))\n#define ReadByte(ea)            (read_mem_byte((ea) & AMASK))\n#define ReadWord(ea)            (read_mem_word((ea) & AMASK))\n#define WriteByte(ea,val)       write_mem_byte((ea) & AMASK, val);\n#define WriteWord(ea,val)       write_mem_word((ea) & AMASK, val);\n\n#define FETCH                   (read_raw_byte(m_pc++))\n#define FETCHOP                 (read_decrypted_byte(m_pc++))\n#define PEEKOP(addr)            (read_decrypted_byte(addr))\n#define FETCHWORD(var)          { var = read_raw_byte(m_pc); var += (read_raw_byte(m_pc + 1) << 8); m_pc += 2; }\n#define CHANGE_PC(addr)\n#ifdef I80286\n#define PUSH(val)               { if(PM) i80286_check_permission(SS, m_regs.w[SP]-2, I80286_WORD, I80286_WRITE); m_regs.w[SP] -= 2; WriteWord(((m_base[SS] + m_regs.w[SP]) & AMASK), val); }\n#define POP(var)                { if(PM) i80286_check_permission(SS, m_regs.w[SP], I80286_WORD, I80286_READ); m_regs.w[SP] += 2; var = ReadWord(((m_base[SS] + ((m_regs.w[SP]-2) & 0xffff)) & AMASK)); }\n#else\n#define PUSH(val)               { m_regs.w[SP] -= 2; WriteWord(((m_base[SS] + m_regs.w[SP]) & AMASK), val); }\n#define POP(var)                { m_regs.w[SP] += 2; var = ReadWord(((m_base[SS] + ((m_regs.w[SP]-2) & 0xffff)) & AMASK)); }\n#endif\n/************************************************************************/\n#ifdef I80286\n#define IOPL ((m_flags&0x3000)>>12)\n#define NT ((m_flags&0x4000)>>14)\n#define xF (0)\n#else\n#define IOPL (3)\n#define NT (1)\n#define xF (1)\n#endif\n\n#define CompressFlags() (WORD)(CF | 2 |(PF << 2) | (AF << 4) | (ZF << 6) \\\n\t\t\t\t| (SF << 7) | (m_TF << 8) | (m_IF << 9) \\\n\t\t\t\t| (DF << 10) | (OF << 11) | (IOPL << 12) | (NT << 14) | (xF << 15))\n\n#define ExpandFlags(f) \\\n{ \\\n\t\tm_CarryVal = (f) & 1; \\\n\t\tm_ParityVal = !((f) & 4); \\\n\t\tm_AuxVal = (f) & 16; \\\n\t\tm_ZeroVal = !((f) & 64); \\\n\t\tm_SignVal = ((f) & 128) ? -1 : 0; \\\n\t\tm_TF = ((f) & 256) >> 8; \\\n\t\tm_IF = ((f) & 512) >> 9; \\\n\t\tm_DirVal = ((f) & 1024) ? -1 : 1; \\\n\t\tm_OverVal = (f) & 2048; \\\n}\n#endif /* __I86_H__ */\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i86/i86time.c",
    "content": "/****************************************************************************\n*             real mode i286 emulator v1.4 by Fabrice Frances               *\n*               (initial work based on David Hedley's pcemu)                *\n****************************************************************************/\n\nstruct i80x86_timing\n{\n\tint     id;\n\n\tUINT8   exception, iret;                                /* exception, IRET */\n\tUINT8   int3, int_imm, into_nt, into_t;                 /* INTs */\n\tUINT8   override;                                       /* segment overrides */\n\tUINT8   flag_ops, lahf, sahf;                           /* flag operations */\n\tUINT8   aaa, aas, aam, aad;                             /* arithmetic adjusts */\n\tUINT8   daa, das;                                       /* decimal adjusts */\n\tUINT8   cbw, cwd;                                       /* sign extension */\n\tUINT8   hlt, load_ptr, lea, nop, wait, xlat;            /* misc */\n\n\tUINT8   jmp_short, jmp_near, jmp_far;                   /* direct JMPs */\n\tUINT8   jmp_r16, jmp_m16, jmp_m32;                      /* indirect JMPs */\n\tUINT8   call_near, call_far;                            /* direct CALLs */\n\tUINT8   call_r16, call_m16, call_m32;                   /* indirect CALLs */\n\tUINT8   ret_near, ret_far, ret_near_imm, ret_far_imm;   /* returns */\n\tUINT8   jcc_nt, jcc_t, jcxz_nt, jcxz_t;                 /* conditional JMPs */\n\tUINT8   loop_nt, loop_t, loope_nt, loope_t;             /* loops */\n\n\tUINT8   in_imm8, in_imm16, in_dx8, in_dx16;             /* port reads */\n\tUINT8   out_imm8, out_imm16, out_dx8, out_dx16;         /* port writes */\n\n\tUINT8   mov_rr8, mov_rm8, mov_mr8;                      /* move, 8-bit */\n\tUINT8   mov_ri8, mov_mi8;                               /* move, 8-bit immediate */\n\tUINT8   mov_rr16, mov_rm16, mov_mr16;                   /* move, 16-bit */\n\tUINT8   mov_ri16, mov_mi16;                             /* move, 16-bit immediate */\n\tUINT8   mov_am8, mov_am16, mov_ma8, mov_ma16;           /* move, AL/AX memory */\n\tUINT8   mov_sr, mov_sm, mov_rs, mov_ms;                 /* move, segment registers */\n\tUINT8   xchg_rr8, xchg_rm8;                             /* exchange, 8-bit */\n\tUINT8   xchg_rr16, xchg_rm16, xchg_ar16;                /* exchange, 16-bit */\n\n\tUINT8   push_r16, push_m16, push_seg, pushf;            /* pushes */\n\tUINT8   pop_r16, pop_m16, pop_seg, popf;                /* pops */\n\n\tUINT8   alu_rr8, alu_rm8, alu_mr8;                      /* ALU ops, 8-bit */\n\tUINT8   alu_ri8, alu_mi8, alu_mi8_ro;                   /* ALU ops, 8-bit immediate */\n\tUINT8   alu_rr16, alu_rm16, alu_mr16;                   /* ALU ops, 16-bit */\n\tUINT8   alu_ri16, alu_mi16, alu_mi16_ro;                /* ALU ops, 16-bit immediate */\n\tUINT8   alu_r16i8, alu_m16i8, alu_m16i8_ro;             /* ALU ops, 16-bit w/8-bit immediate */\n\tUINT8   mul_r8, mul_r16, mul_m8, mul_m16;               /* MUL */\n\tUINT8   imul_r8, imul_r16, imul_m8, imul_m16;           /* IMUL */\n\tUINT8   div_r8, div_r16, div_m8, div_m16;               /* DIV */\n\tUINT8   idiv_r8, idiv_r16, idiv_m8, idiv_m16;           /* IDIV */\n\tUINT8   incdec_r8, incdec_r16, incdec_m8, incdec_m16;   /* INC/DEC */\n\tUINT8   negnot_r8, negnot_r16, negnot_m8, negnot_m16;   /* NEG/NOT */\n\n\tUINT8   rot_reg_1, rot_reg_base, rot_reg_bit;           /* reg shift/rotate */\n\tUINT8   rot_m8_1, rot_m8_base, rot_m8_bit;              /* m8 shift/rotate */\n\tUINT8   rot_m16_1, rot_m16_base, rot_m16_bit;           /* m16 shift/rotate */\n\n\tUINT8   cmps8, rep_cmps8_base, rep_cmps8_count;         /* CMPS 8-bit */\n\tUINT8   cmps16, rep_cmps16_base, rep_cmps16_count;      /* CMPS 16-bit */\n\tUINT8   scas8, rep_scas8_base, rep_scas8_count;         /* SCAS 8-bit */\n\tUINT8   scas16, rep_scas16_base, rep_scas16_count;      /* SCAS 16-bit */\n\tUINT8   lods8, rep_lods8_base, rep_lods8_count;         /* LODS 8-bit */\n\tUINT8   lods16, rep_lods16_base, rep_lods16_count;      /* LODS 16-bit */\n\tUINT8   stos8, rep_stos8_base, rep_stos8_count;         /* STOS 8-bit */\n\tUINT8   stos16, rep_stos16_base, rep_stos16_count;      /* STOS 16-bit */\n\tUINT8   movs8, rep_movs8_base, rep_movs8_count;         /* MOVS 8-bit */\n\tUINT8   movs16, rep_movs16_base, rep_movs16_count;      /* MOVS 16-bit */\n\n\tvoid *  check1;                                         /* marker to make sure we line up */\n\n\tUINT8   ins8, rep_ins8_base, rep_ins8_count;            /* (80186) INS 8-bit */\n\tUINT8   ins16, rep_ins16_base, rep_ins16_count;         /* (80186) INS 16-bit */\n\tUINT8   outs8, rep_outs8_base, rep_outs8_count;         /* (80186) OUTS 8-bit */\n\tUINT8   outs16, rep_outs16_base, rep_outs16_count;      /* (80186) OUTS 16-bit */\n\tUINT8   push_imm, pusha, popa;                          /* (80186) PUSH immediate, PUSHA/POPA */\n\tUINT8   imul_rri8, imul_rmi8;                           /* (80186) IMUL immediate 8-bit */\n\tUINT8   imul_rri16, imul_rmi16;                         /* (80186) IMUL immediate 16-bit */\n\tUINT8   enter0, enter1, enter_base, enter_count, leave; /* (80186) ENTER/LEAVE */\n\tUINT8   bound;                                          /* (80186) BOUND */\n\n\tvoid *  check2;                                         /* marker to make sure we line up */\n};\n\n\n/* these come from the 8088 timings in OPCODE.LST, but with the\n   penalty for 16-bit memory accesses removed wherever possible */\nstatic const struct i80x86_timing i8086_cycles =\n{\n\t8086,\n\n\t51,32,          /* exception, IRET */\n\t\t2, 0, 4, 2, /* INTs */\n\t\t2,              /* segment overrides */\n\t\t2, 4, 4,        /* flag operations */\n\t\t4, 4,83,60, /* arithmetic adjusts */\n\t\t4, 4,           /* decimal adjusts */\n\t\t2, 5,           /* sign extension */\n\t\t2,24, 2, 2, 3,11,   /* misc */\n\n\t15,15,15,       /* direct JMPs */\n\t11,18,24,       /* indirect JMPs */\n\t19,28,          /* direct CALLs */\n\t16,21,37,       /* indirect CALLs */\n\t20,32,24,31,    /* returns */\n\t\t4,16, 6,18, /* conditional JMPs */\n\t\t5,17, 6,18, /* loops */\n\n\t10,14, 8,12,    /* port reads */\n\t10,14, 8,12,    /* port writes */\n\n\t\t2, 8, 9,        /* move, 8-bit */\n\t\t4,10,           /* move, 8-bit immediate */\n\t\t2, 8, 9,        /* move, 16-bit */\n\t\t4,10,           /* move, 16-bit immediate */\n\t10,10,10,10,    /* move, AL/AX memory */\n\t\t2, 8, 2, 9, /* move, segment registers */\n\t\t4,17,           /* exchange, 8-bit */\n\t\t4,17, 3,        /* exchange, 16-bit */\n\n\t15,24,14,14,    /* pushes */\n\t12,25,12,12,    /* pops */\n\n\t\t3, 9,16,        /* ALU ops, 8-bit */\n\t\t4,17,10,        /* ALU ops, 8-bit immediate */\n\t\t3, 9,16,        /* ALU ops, 16-bit */\n\t\t4,17,10,        /* ALU ops, 16-bit immediate */\n\t\t4,17,10,        /* ALU ops, 16-bit w/8-bit immediate */\n\t70,118,76,128,  /* MUL */\n\t80,128,86,138,  /* IMUL */\n\t80,144,86,154,  /* DIV */\n\t101,165,107,175,/* IDIV */\n\t\t3, 2,15,15, /* INC/DEC */\n\t\t3, 3,16,16, /* NEG/NOT */\n\n\t\t2, 8, 4,        /* reg shift/rotate */\n\t15,20, 4,       /* m8 shift/rotate */\n\t15,20, 4,       /* m16 shift/rotate */\n\n\t22, 9,21,       /* CMPS 8-bit */\n\t22, 9,21,       /* CMPS 16-bit */\n\t15, 9,14,       /* SCAS 8-bit */\n\t15, 9,14,       /* SCAS 16-bit */\n\t12, 9,11,       /* LODS 8-bit */\n\t12, 9,11,       /* LODS 16-bit */\n\t11, 9,10,       /* STOS 8-bit */\n\t11, 9,10,       /* STOS 16-bit */\n\t18, 9,17,       /* MOVS 8-bit */\n\t18, 9,17,       /* MOVS 16-bit */\n\n\t(void *)-1      /* marker to make sure we line up */\n};\n\n/* these come from the Intel 80186 datasheet */\nstatic const struct i80x86_timing i80186_cycles =\n{\n\t80186,\n\n\t45,28,          /* exception, IRET */\n\t\t0, 2, 4, 3, /* INTs */\n\t\t2,              /* segment overrides */\n\t\t2, 2, 3,        /* flag operations */\n\t\t8, 7,19,15, /* arithmetic adjusts */\n\t\t4, 4,           /* decimal adjusts */\n\t\t2, 4,           /* sign extension */\n\t\t2,18, 6, 2, 6,11,   /* misc */\n\n\t14,14,14,       /* direct JMPs */\n\t11,17,26,       /* indirect JMPs */\n\t15,23,          /* direct CALLs */\n\t13,19,38,       /* indirect CALLs */\n\t16,22,18,25,    /* returns */\n\t\t4,13, 5,15, /* conditional JMPs */\n\t\t6,16, 6,16, /* loops */\n\n\t10,10, 8, 8,    /* port reads */\n\t\t9, 9, 7, 7, /* port writes */\n\n\t\t2, 9,12,        /* move, 8-bit */\n\t\t3,12,           /* move, 8-bit immediate */\n\t\t2, 9,12,        /* move, 16-bit */\n\t\t4,13,           /* move, 16-bit immediate */\n\t\t8, 8, 9, 9, /* move, AL/AX memory */\n\t\t2,11, 2,11, /* move, segment registers */\n\t\t4,17,           /* exchange, 8-bit */\n\t\t4,17, 3,        /* exchange, 16-bit */\n\n\t10,16, 9, 9,    /* pushes */\n\t10,20, 8, 8,    /* pops */\n\n\t\t3,10,10,        /* ALU ops, 8-bit */\n\t\t4,16,10,        /* ALU ops, 8-bit immediate */\n\t\t3,10,10,        /* ALU ops, 16-bit */\n\t\t4,16,10,        /* ALU ops, 16-bit immediate */\n\t\t4,16,10,        /* ALU ops, 16-bit w/8-bit immediate */\n\t26,35,32,41,    /* MUL */\n\t25,34,31,40,    /* IMUL */\n\t29,38,35,44,    /* DIV */\n\t44,53,50,59,    /* IDIV */\n\t\t3, 3,15,15, /* INC/DEC */\n\t\t3, 3,10,10, /* NEG/NOT */\n\n\t\t2, 5, 1,        /* reg shift/rotate */\n\t15,17, 1,       /* m8 shift/rotate */\n\t15,17, 1,       /* m16 shift/rotate */\n\n\t22, 5,22,       /* CMPS 8-bit */\n\t22, 5,22,       /* CMPS 16-bit */\n\t15, 5,15,       /* SCAS 8-bit */\n\t15, 5,15,       /* SCAS 16-bit */\n\t12, 6,11,       /* LODS 8-bit */\n\t12, 6,11,       /* LODS 16-bit */\n\t10, 6, 9,       /* STOS 8-bit */\n\t10, 6, 9,       /* STOS 16-bit */\n\t14, 8, 8,       /* MOVS 8-bit */\n\t14, 8, 8,       /* MOVS 16-bit */\n\n\t(void *)-1,     /* marker to make sure we line up */\n\n\t14, 8, 8,       /* (80186) INS 8-bit */\n\t14, 8, 8,       /* (80186) INS 16-bit */\n\t14, 8, 8,       /* (80186) OUTS 8-bit */\n\t14, 8, 8,       /* (80186) OUTS 16-bit */\n\t14,68,83,       /* (80186) PUSH immediate, PUSHA/POPA */\n\t22,29,          /* (80186) IMUL immediate 8-bit */\n\t25,32,          /* (80186) IMUL immediate 16-bit */\n\t15,25,4,16, 8,  /* (80186) ENTER/LEAVE */\n\t33,             /* (80186) BOUND */\n\n\t(void *)-1      /* marker to make sure we line up */\n};\n\n/* these come from the 80286 timings in OPCODE.LST */\n/* many of these numbers are suspect */\nstatic const struct i80x86_timing i80286_cycles =\n{\n\t80286,\n\n\t23,17,          /* exception, IRET */\n\t\t0, 2, 3, 1, /* INTs */\n\t\t2,              /* segment overrides */\n\t\t2, 2, 2,        /* flag operations */\n\t\t3, 3,16,14, /* arithmetic adjusts */\n\t\t3, 3,           /* decimal adjusts */\n\t\t2, 2,           /* sign extension */\n\t\t2, 7, 3, 3, 3, 5,   /* misc */\n\n\t\t7, 7,11,        /* direct JMPs */\n\t\t7,11,26,        /* indirect JMPs */\n\t\t7,13,           /* direct CALLs */\n\t\t7,11,29,        /* indirect CALLs */\n\t11,15,11,15,    /* returns */\n\t\t3, 7, 4, 8, /* conditional JMPs */\n\t\t4, 8, 4, 8, /* loops */\n\n\t\t5, 5, 5, 5, /* port reads */\n\t\t3, 3, 3, 3, /* port writes */\n\n\t\t2, 3, 3,        /* move, 8-bit */\n\t\t2, 3,           /* move, 8-bit immediate */\n\t\t2, 3, 3,        /* move, 16-bit */\n\t\t2, 3,           /* move, 16-bit immediate */\n\t\t5, 5, 3, 3, /* move, AL/AX memory */\n\t\t2, 5, 2, 3, /* move, segment registers */\n\t\t3, 5,           /* exchange, 8-bit */\n\t\t3, 5, 3,        /* exchange, 16-bit */\n\n\t\t5, 5, 3, 3, /* pushes */\n\t\t5, 5, 5, 5, /* pops */\n\n\t\t2, 7, 7,        /* ALU ops, 8-bit */\n\t\t3, 7, 7,        /* ALU ops, 8-bit immediate */\n\t\t2, 7, 7,        /* ALU ops, 16-bit */\n\t\t3, 7, 7,        /* ALU ops, 16-bit immediate */\n\t\t3, 7, 7,        /* ALU ops, 16-bit w/8-bit immediate */\n\t13,21,16,24,    /* MUL */\n\t13,21,16,24,    /* IMUL */\n\t14,22,17,25,    /* DIV */\n\t17,25,20,28,    /* IDIV */\n\t\t2, 2, 7, 7, /* INC/DEC */\n\t\t2, 2, 7, 7, /* NEG/NOT */\n\n\t\t2, 5, 1,        /* reg shift/rotate */\n\t\t7, 8, 1,        /* m8 shift/rotate */\n\t\t7, 8, 1,        /* m16 shift/rotate */\n\n\t13, 5,12,       /* CMPS 8-bit */\n\t13, 5,12,       /* CMPS 16-bit */\n\t\t9, 5, 8,        /* SCAS 8-bit */\n\t\t9, 5, 8,        /* SCAS 16-bit */\n\t\t5, 5, 4,        /* LODS 8-bit */\n\t\t5, 5, 4,        /* LODS 16-bit */\n\t\t4, 4, 3,        /* STOS 8-bit */\n\t\t4, 4, 3,        /* STOS 16-bit */\n\t\t5, 5, 4,        /* MOVS 8-bit */\n\t\t5, 5, 4,        /* MOVS 16-bit */\n\n\t(void *)-1,     /* marker to make sure we line up */\n\n\t\t5, 5, 4,        /* (80186) INS 8-bit */\n\t\t5, 5, 4,        /* (80186) INS 16-bit */\n\t\t5, 5, 4,        /* (80186) OUTS 8-bit */\n\t\t5, 5, 4,        /* (80186) OUTS 16-bit */\n\t\t3,17,19,        /* (80186) PUSH immediate, PUSHA/POPA */\n\t21,24,          /* (80186) IMUL immediate 8-bit */\n\t21,24,          /* (80186) IMUL immediate 16-bit */\n\t11,15,12, 4, 5, /* (80186) ENTER/LEAVE */\n\t13,             /* (80186) BOUND */\n\n\t(void *)-1      /* marker to make sure we line up */\n};\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i86/instr186.c",
    "content": "/****************************************************************************\n*             real mode i286 emulator v1.4 by Fabrice Frances               *\n*               (initial work based on David Hedley's pcemu)                *\n****************************************************************************/\n\n// file will be included in all cpu variants\n// function renaming will be added when necessary\n// timing value should move to separate array\n\nstatic void PREFIX186(_pusha)()    /* Opcode 0x60 */\n{\n\tunsigned tmp=m_regs.w[SP];\n\n#ifdef I80286\n\tif(PM) i80286_check_permission(SS, m_regs.w[SP]-16, 16, I80286_WRITE);\n#endif\n\tPUSH(m_regs.w[AX]);\n\tPUSH(m_regs.w[CX]);\n\tPUSH(m_regs.w[DX]);\n\tPUSH(m_regs.w[BX]);\n\tPUSH(tmp);\n\tPUSH(m_regs.w[BP]);\n\tPUSH(m_regs.w[SI]);\n\tPUSH(m_regs.w[DI]);\n}\n\nstatic unsigned i186_popa_tmp;  // hack around GCC 4.6 error because we need the side effects of POP\nstatic void PREFIX186(_popa)()    /* Opcode 0x61 */\n{\n#ifdef I80286\n\tif(PM) i80286_check_permission(SS, m_regs.w[SP], 16, I80286_READ);\n#endif\n\tPOP(m_regs.w[DI]);\n\tPOP(m_regs.w[SI]);\n\tPOP(m_regs.w[BP]);\n\tPOP(i186_popa_tmp);\n\tPOP(m_regs.w[BX]);\n\tPOP(m_regs.w[DX]);\n\tPOP(m_regs.w[CX]);\n\tPOP(m_regs.w[AX]);\n}\n\nstatic void PREFIX186(_bound)()    /* Opcode 0x62 */\n{\n\tunsigned ModRM = FETCHOP;\n\tint low = (INT16)GetRMWord(ModRM);\n\tint high= (INT16)GetnextRMWord;\n\tint tmp= (INT16)RegWord(ModRM);\n\tif (tmp<low || tmp>high) {\n\t\tm_pc-= ( m_seg_prefix ? 3 : 2 );\n\t\tPREFIX86(_interrupt)(5);\n\t}\n}\n\nstatic void PREFIX186(_push_d16)()    /* Opcode 0x68 */\n{\n\tunsigned tmp = FETCH;\n\n\ttmp += FETCH << 8;\n\tPUSH(tmp);\n}\n\nstatic void PREFIX186(_imul_d16)()    /* Opcode 0x69 */\n{\n\tDEF_r16w(dst,src);\n\tunsigned src2=FETCH;\n\tsrc2+=(FETCH<<8);\n\n\tdst = (INT32)((INT16)src)*(INT32)((INT16)src2);\n\tm_CarryVal = m_OverVal = (((INT32)dst) >> 15 != 0) && (((INT32)dst) >> 15 != -1);\n\tRegWord(ModRM)=(WORD)dst;\n}\n\n\nstatic void PREFIX186(_push_d8)()    /* Opcode 0x6a */\n{\n\tunsigned tmp = (WORD)((INT16)((INT8)FETCH));\n\n\tPUSH(tmp);\n}\n\nstatic void PREFIX186(_imul_d8)()    /* Opcode 0x6b */\n{\n\tDEF_r16w(dst,src);\n\tunsigned src2= (WORD)((INT16)((INT8)FETCH));\n\n\tdst = (INT32)((INT16)src)*(INT32)((INT16)src2);\n\tm_CarryVal = m_OverVal = (((INT32)dst) >> 15 != 0) && (((INT32)dst) >> 15 != -1);\n\tRegWord(ModRM)=(WORD)dst;\n}\n\nstatic void PREFIX186(_insb)()    /* Opcode 0x6c */\n{\n#ifdef I80286\n\tif (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0);\n#endif\n\tPutMemB(ES,m_regs.w[DI],read_port_byte(m_regs.w[DX]));\n\tm_regs.w[DI] += m_DirVal;\n}\n\nstatic void PREFIX186(_insw)()    /* Opcode 0x6d */\n{\n#ifdef I80286\n\tif (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0);\n#endif\n\tPutMemW(ES,m_regs.w[DI],read_port_word(m_regs.w[DX]));\n\tm_regs.w[DI] += 2 * m_DirVal;\n}\n\nstatic void PREFIX186(_outsb)()    /* Opcode 0x6e */\n{\n#ifdef I80286\n\tif (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0);\n#endif\n\twrite_port_byte(m_regs.w[DX],GetMemB(DS,m_regs.w[SI]));\n\tm_regs.w[SI] += m_DirVal; /* GOL 11/27/01 */\n}\n\nstatic void PREFIX186(_outsw)()    /* Opcode 0x6f */\n{\n#ifdef I80286\n\tif (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0);\n#endif\n\twrite_port_word(m_regs.w[DX],GetMemW(DS,m_regs.w[SI]));\n\tm_regs.w[SI] += 2 * m_DirVal; /* GOL 11/27/01 */\n}\n\nstatic void PREFIX186(_rotshft_bd8)()    /* Opcode 0xc0 */\n{\n\tunsigned ModRM = FETCH;\n\tunsigned src = GetRMByte(ModRM);\n\tunsigned count = FETCH;\n\n\tPREFIX86(_rotate_shift_Byte)(ModRM,count & 0x1f,src);\n}\n\nstatic void PREFIX186(_rotshft_wd8)()    /* Opcode 0xc1 */\n{\n\tunsigned ModRM = FETCH;\n\tunsigned src = GetRMWord(ModRM);\n\tunsigned count = FETCH;\n\n\tPREFIX86(_rotate_shift_Word)(ModRM,count & 0x1f,src);\n}\n\nstatic void PREFIX186(_enter)()    /* Opcode 0xc8 */\n{\n\tunsigned nb = FETCH;\n\tunsigned i,level;\n\tUINT16 fp;\n\n\tnb += FETCH << 8;\n#ifdef I80286\n\tlevel = FETCH & 0x1f;\n\tif(PM) i80286_check_permission(SS, m_regs.w[SP]-2-(level*2), 2+(level*2), I80286_WRITE);\n#else\n\tlevel = FETCH;\n#endif\n\tPUSH(m_regs.w[BP]);\n\tfp = m_regs.w[SP];\n\tfor (i=1;i<level;i++)\n\t\tPUSH(GetMemW(SS,m_regs.w[BP]-i*2));\n\tif (level) PUSH(fp);\n\tm_regs.w[BP] = fp;\n\tm_regs.w[SP] -= nb;\n}\n\nstatic void PREFIX186(_leave)()    /* Opcode 0xc9 */\n{\n\tm_regs.w[SP]=m_regs.w[BP];\n\tPOP(m_regs.w[BP]);\n}\n\nstatic void PREFIX186(_rotshft_bcl)()    /* Opcode 0xd2 */\n{\n\tunsigned ModRM = FETCHOP;\n\tPREFIX86(_rotate_shift_Byte)(ModRM,m_regs.b[CL] & 0x1f,GetRMByte(ModRM));\n}\n\nstatic void PREFIX186(_rotshft_wcl)()    /* Opcode 0xd3 */\n{\n\tunsigned ModRM = FETCHOP;\n\tPREFIX86(_rotate_shift_Word)(ModRM,m_regs.b[CL] & 0x1f,GetRMWord(ModRM));\n}\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i86/instr186.h",
    "content": "/****************************************************************************\n*             real mode i286 emulator v1.4 by Fabrice Frances               *\n*               (initial work based on David Hedley's pcemu)                *\n****************************************************************************/\n\n// file will be included in all cpu variants\n// timing value should move to separate array\n\nstatic void PREFIX186(_pusha)();\nstatic void PREFIX186(_popa)();\nstatic void PREFIX186(_bound)();\nstatic void PREFIX186(_push_d16)();\nstatic void PREFIX186(_imul_d16)();\nstatic void PREFIX186(_push_d8)();\nstatic void PREFIX186(_imul_d8)();\nstatic void PREFIX186(_rotshft_bd8)();\nstatic void PREFIX186(_rotshft_wd8)();\nstatic void PREFIX186(_enter)();\nstatic void PREFIX186(_leave)();\nstatic void PREFIX186(_insb)();\nstatic void PREFIX186(_insw)();\nstatic void PREFIX186(_outsb)();\nstatic void PREFIX186(_outsw)();\n\n/* changed instructions */\nstatic void PREFIX(_pop_ss)();\nstatic void PREFIX(_es)();\nstatic void PREFIX(_cs)();\nstatic void PREFIX(_ss)();\nstatic void PREFIX(_ds)();\nstatic void PREFIX(_mov_sregw)();\nstatic void PREFIX186(_repne)();\nstatic void PREFIX186(_repe)();\nstatic void PREFIX186(_sti)();\nstatic void PREFIX186(_rotshft_bcl)();\nstatic void PREFIX186(_rotshft_wcl)();\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i86/instr286.c",
    "content": "/* descriptor table format in memory\n   UINT16 limit\n   UINT24 addr\n   0..3 type\n    system segment\n     3 execute:\n      0 data segment: readable,\n       1: write\n       2: expand down\n      1 code segment\n       1: readable\n       2: conforming (can be used with higher privilege level)\n     0: access (set when processor accesses segment)\n\n   4 dt 0 system segment, 1 application segment (code, data)\n   5,6 dpl descriptor privileg level\n   7 p present 0 gives trap when accessed\n   UINT16 reserved (should be zero)\n*/\n#define LIMIT(desc)  (desc[0]&0xffff)\n#define BASE(desc)   ((desc[1]&0xffff)|((desc[2]&0xff)<<16))\n#define RIGHTS(desc) ((desc[2]>>8)&0xff)\n\n#define ACCESS(r)  (r&1)\n#define SET_ACC(desc) (desc[2]|=0x100)\n#define RW(r)      ((r>>1)&1)\n#define READ(r)    ((r>>1)&1)\n#define CONF(r)    ((r>>2)&1)\n#define EXPDOWN(r) ((r>>2)&1)\n#define CODE(r)    ((r>>3)&1)\n#define SEGDESC(r) ((r>>4)&1)\n#define DPL(r)     ((r>>5)&3)\n#define PRES(r)    ((r>>7)&1)\n#define GATE(r)    (r&31)\n#define GATESEL(desc) (desc[1])\n#define GATEOFF(desc) (desc[0])\n#define GATECNT(desc) (desc[2]&31)\n\n#define RPL(s)     (s&3)\n#define IDX(s)     (s&(~7))\n#define IDXTBL(s)  (s&(~3))\n#define TBL(s)     (s&4)\n\n#define TSSDESCIDLE 1\n#define LDTDESC    2\n#define TSSDESCBUSY 3\n#define CALLGATE   4\n#define TASKGATE   5\n#define INTGATE    6\n#define TRAPGATE   7\n\n#define TSS_BACK 0\n#define TSS_SP0  1\n#define TSS_SS0  2\n#define TSS_SP1  3\n#define TSS_SS1  4\n#define TSS_SP2  5\n#define TSS_SS2  6\n#define TSS_IP   7\n#define TSS_FLAG 8\n#define TSS_AX   9\n#define TSS_CX   10\n#define TSS_DX   11\n#define TSS_BX   12\n#define TSS_SP   13\n#define TSS_BP   14\n#define TSS_SI   15\n#define TSS_DI   16\n#define TSS_ES   17\n#define TSS_CS   18\n#define TSS_SS   19\n#define TSS_DS   20\n#define TSS_LDT  21\n\n#define PMAX(a,b) ((a<b)?b:a)\n\n#define IRET 0\n#define JMP  1\n#define CALL 2\n\nstatic CPU_RESET( CPU_MODEL );\n\n// when a cpu reset happens on a AT the bios checks for 9 in byte 0xf\n// of the nvram.  if yes, after init, it sets the stack pointer to the value in 0040:0067\n// in the bios data segment then pops es and ds off that stack, does popa then a far ret.\n\nstatic void i80286_trap2(UINT32 error)\n{\n\tint error_code = error & 0xffff;\n\tUINT16 number = error >> 16;\n\tif(error_code == 0xffff) error_code = -1;\n\tm_pc = m_prevpc;\n\ttry {\n\t\tswitch(number) {\n\t\tcase DIVIDE_BY_ZERO:\n\t\tcase INVALID_TSS:\n\t\tcase SEG_NOT_PRESENT:\n\t\tcase STACK_FAULT:\n\t\tcase GENERAL_PROTECTION_FAULT:\n\t\t\tm_trap_level++;\n\t\t\tif(m_trap_level == 2) throw TRAP(DOUBLE_FAULT,0);\n\t\t\tif(m_trap_level == 3) break;\n\t\t\ti80286_interrupt_descriptor(number,1,error_code);\n\t\t\tbreak;\n\t\tcase DOUBLE_FAULT:\n\t\t\ti80286_interrupt_descriptor(number,1,0);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\ti80286_interrupt_descriptor(number,1,-1);\n\t\t}\n\t} catch(UINT32 e) { i80286_trap2(e); }\n\tif(m_trap_level == 3)\n\t\t// this is supposed to triggered by support hardware\n\t\t// create a shutdown output line that causes a reset\n\t\t// NMI can wake processor without reset\n\t\tCPU_RESET_CALL(CPU_MODEL);\n\tm_trap_level = 0;\n}\n\nstatic UINT32 i80286_selector_address(UINT16 sel)\n{\n\tUINT32 base;\n\tUINT16 limit;\n\tif(TBL(sel)) { base = m_ldtr.base; limit = m_ldtr.limit; }\n\telse { base = m_gdtr.base; limit = m_gdtr.limit; }\n\treturn ((IDX(sel)>=limit)||!IDXTBL(sel)?-1:base+IDX(sel));\n}\n\nstatic int i80286_verify(UINT16 selector, i80286_operation operation, UINT8 rights, bool valid)\n{\n\tif (!IDXTBL(selector) && !valid) return GENERAL_PROTECTION_FAULT;\n\tif (!SEGDESC(rights)) return GENERAL_PROTECTION_FAULT;\n\n\tswitch(operation) {\n\t\tcase I80286_READ:\n\t\t\tif (CODE(rights) && !READ(rights)) return GENERAL_PROTECTION_FAULT;\n\t\t\tbreak;\n\t\tcase I80286_WRITE:\n\t\t\tif (CODE(rights) || !RW(rights)) return GENERAL_PROTECTION_FAULT;\n\t\t\tbreak;\n\t\tcase I80286_EXECUTE:\n\t\t\tif (!CODE(rights)) return GENERAL_PROTECTION_FAULT;\n\t\t\tbreak;\n\t}\n\treturn 0;\n}\n\nstatic void i80286_pop_seg(int reg)\n{\n\tUINT16 sel;\n\tif(PM) i80286_check_permission(SS, m_regs.w[SP], I80286_WORD, I80286_READ);\n\tsel = ReadWord(m_base[SS]+m_regs.w[SP]);\n\ti80286_data_descriptor(reg, sel);\n\tm_regs.w[SP] += 2;\n}\n\nstatic void i80286_data_descriptor_full(int reg, UINT16 selector, int cpl, UINT32 trap, UINT16 offset, int size)\n{\n\tif (PM) {\n\t\tUINT16 desc[3];\n\t\tUINT8 r;\n\t\tUINT32 addr;\n\t\t/* selector format\n\t\t   15..3 number/address in descriptor table\n\t\t   2: 0 global, 1 local descriptor table\n\t\t   1,0: requested privileg level\n\t\t   must be higher or same as current privileg level in code selector */\n\t\tif ((reg != SS) && !IDXTBL(selector)) {\n\t\t\tm_sregs[reg]=0;\n\t\t\tm_limit[reg]=0;\n\t\t\tm_base[reg]=0;\n\t\t\tm_rights[reg]=0;\n\t\t\tm_valid[reg]=0;\n\t\t\treturn;\n\t\t}\n\n\t\tif ((addr = i80286_selector_address(selector)) == -1) throw trap;\n\n\t\tdesc[0] = ReadWord(addr);\n\t\tdesc[1] = ReadWord(addr+2);\n\t\tdesc[2] = ReadWord(addr+4);\n\t\tr = RIGHTS(desc);\n\t\tif (!SEGDESC(r)) throw trap;\n\t\tif (reg == SS) {\n\t\t\tif (!IDXTBL(selector)) throw trap;\n\t\t\tif (DPL(r)!=cpl) throw trap;\n\t\t\tif (RPL(selector)!=cpl) throw trap;\n\t\t\tif (!RW(r) || CODE(r)) throw trap;\n\t\t\tif (!PRES(r)) throw TRAP(STACK_FAULT,(IDXTBL(selector)+(trap&1)));\n\t\t} else {\n\t\t\tif ((DPL(r) < PMAX(cpl,RPL(selector))) && (!CODE(r) || (CODE(r) && !CONF(r)))) throw trap;\n\t\t\tif (CODE(r) && !READ(r)) throw trap;\n\t\t\tif (!PRES(r)) throw TRAP(SEG_NOT_PRESENT,(IDXTBL(selector)+(trap&1)));\n\t\t}\n\t\tif (offset+size) {\n\t\t\tif ((CODE(r) || !EXPDOWN(r)) && ((offset+size-1) > LIMIT(desc))) throw (reg==SS)?TRAP(STACK_FAULT,(trap&1)):trap;\n\t\t\tif (!CODE(r) && EXPDOWN(r) && ((offset <= LIMIT(desc)) || ((offset+size-1) > 0xffff))) throw (reg==SS)?TRAP(STACK_FAULT,(trap&1)):trap;\n\t\t}\n\n\t\tSET_ACC(desc);\n\t\tWriteWord(addr+4, desc[2]);\n\t\tm_sregs[reg]=selector;\n\t\tm_limit[reg]=LIMIT(desc);\n\t\tm_base[reg]=BASE(desc);\n\t\tm_rights[reg]=RIGHTS(desc);\n\t} else {\n\t\tm_sregs[reg]=selector;\n\t\tm_base[reg]=selector<<4;\n\t}\n\tm_valid[reg]=1;\n}\n\nstatic void i80286_data_descriptor(int reg, UINT16 selector)\n{\n\ti80286_data_descriptor_full(reg, selector, CPL, TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(selector)), 0, 0);\n}\n\nstatic void i80286_switch_task(UINT16 ntask, int type)\n{\n\tUINT16 ndesc[3], desc[3], ntss[22], otss[22];\n\tUINT8 r, lr;\n\tUINT32 naddr, oaddr, ldtaddr;\n\tint i;\n\tlogerror(\"This program uses TSSs, how rare. Please report this to the developers.\\n\");\n\tif (TBL(ntask)) throw TRAP(INVALID_TSS,IDXTBL(ntask));\n\tif ((naddr = i80286_selector_address(ntask)) == -1) throw TRAP(INVALID_TSS,IDXTBL(ntask));\n\toaddr = i80286_selector_address(m_tr.sel);\n\tndesc[0] = ReadWord(naddr);\n\tndesc[1] = ReadWord(naddr+2);\n\tndesc[2] = ReadWord(naddr+4);\n\tdesc[2] = ReadWord(oaddr+4);\n\tr = RIGHTS(ndesc);\n\tif (SEGDESC(r) || ((GATE(r) & ~2) != TSSDESCIDLE)) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(ntask));\n\tif (!PRES(r)) throw TRAP(SEG_NOT_PRESENT, IDXTBL(ntask));\n\tif (LIMIT(ndesc) < 43) throw TRAP(INVALID_TSS,IDXTBL(ntask));\n\tfor (i = 0; i < 44; i+=2) ntss[i/2] = ReadWord(BASE(ndesc)+i);\n\n\tm_flags = CompressFlags();\n\tif (type == CALL) WriteWord(BASE(ndesc)+TSS_BACK*2, m_tr.sel);\n\tif (type == IRET) m_flags &= ~0x4000;\n\n\totss[TSS_IP] = m_pc-m_base[CS];\n\totss[TSS_FLAG] = m_flags;\n\totss[TSS_AX] = m_regs.w[AX];\n\totss[TSS_CX] = m_regs.w[CX];\n\totss[TSS_DX] = m_regs.w[DX];\n\totss[TSS_BX] = m_regs.w[BX];\n\totss[TSS_SP] = m_regs.w[SP];\n\totss[TSS_BP] = m_regs.w[BP];\n\totss[TSS_SI] = m_regs.w[SI];\n\totss[TSS_DI] = m_regs.w[DI];\n\totss[TSS_ES] = m_sregs[ES];\n\totss[TSS_CS] = m_sregs[CS];\n\totss[TSS_SS] = m_sregs[SS];\n\totss[TSS_DS] = m_sregs[DS];\n\totss[TSS_LDT] = m_ldtr.sel;\n\n\tfor (i = 14; i < 44; i+=2) WriteWord(m_tr.base+i, otss[i/2]);\n\n\t// jmp does both\n\tif (type != CALL) {\n\t\tdesc[2] &= ~0x200; // mark idle\n\t\tWriteWord(oaddr+4, desc[2]);\n\t}\n\tif (type != IRET) {\n\t\tndesc[2] |= 0x200;\n\t\tWriteWord(naddr+4, ndesc[2]);\n\t}\n\tm_tr.sel=ntask;\n\tm_tr.limit=LIMIT(ndesc);\n\tm_tr.base=BASE(ndesc);\n\tm_tr.rights=RIGHTS(ndesc);\n\n\tm_flags      = ntss[TSS_FLAG];\n\tm_regs.w[AX] = ntss[TSS_AX];\n\tm_regs.w[CX] = ntss[TSS_CX];\n\tm_regs.w[DX] = ntss[TSS_DX];\n\tm_regs.w[BX] = ntss[TSS_BX];\n\tm_regs.w[SP] = ntss[TSS_SP];\n\tm_regs.w[BP] = ntss[TSS_BP];\n\tm_regs.w[SI] = ntss[TSS_SI];\n\tm_regs.w[DI] = ntss[TSS_DI];\n\n\tif (TBL(ntss[TSS_LDT])) throw TRAP(INVALID_TSS,IDXTBL(ntss[TSS_LDT]));\n\tif (IDXTBL(ntss[TSS_LDT])) {\n\t\tif ((ldtaddr = i80286_selector_address(ntss[TSS_LDT])) == -1)\n\t\t\tthrow TRAP(INVALID_TSS,IDXTBL(ntss[TSS_LDT]));\n\t\tdesc[0] = ReadWord(ldtaddr);\n\t\tdesc[1] = ReadWord(ldtaddr+2);\n\t\tdesc[2] = ReadWord(ldtaddr+4);\n\t\tlr = RIGHTS(desc);\n\t\tif (SEGDESC(lr) || (GATE(lr) != LDTDESC)) throw TRAP(INVALID_TSS,IDXTBL(ntss[TSS_LDT]));\n\t\tif (!PRES(lr)) throw TRAP(INVALID_TSS,IDXTBL(ntss[TSS_LDT]));\n\t\tm_ldtr.sel=ntss[TSS_LDT];\n\t\tm_ldtr.limit=LIMIT(desc);\n\t\tm_ldtr.base=BASE(desc);\n\t\tm_ldtr.rights=RIGHTS(desc);\n\t} else {\n\t\tm_ldtr.sel=0;\n\t\tm_ldtr.limit=0;\n\t\tm_ldtr.base=0;\n\t\tm_ldtr.rights=0;\n\t}\n\n\tif (type == CALL) m_flags |= 0x4000;\n\tm_msw |= 8;\n\ti80286_data_descriptor_full(SS, ntss[TSS_SS], RPL(ntss[TSS_CS]), TRAP(INVALID_TSS,IDXTBL(ntss[TSS_SS])), 0, 0);\n\n\tm_sregs[CS] = IDXTBL(m_sregs[CS]) | RPL(ntss[TSS_CS]);  // fixme\n\ttry {\n\t\ti80286_code_descriptor(ntss[TSS_CS], ntss[TSS_IP], 0);\n\t} catch(UINT32 e) {\n\t\tint error_code = e & 0xffff;\n\t\tif(error_code == GENERAL_PROTECTION_FAULT) e = TRAP(INVALID_TSS,(e >> 16)); // #NP fault is correct\n\t\tthrow e;\n\t}\n\n\ti80286_data_descriptor_full(ES, ntss[TSS_ES], RPL(ntss[TSS_CS]), TRAP(INVALID_TSS,IDXTBL(ntss[TSS_ES])), 0, 0);\n\ti80286_data_descriptor_full(DS, ntss[TSS_DS], RPL(ntss[TSS_CS]), TRAP(INVALID_TSS,IDXTBL(ntss[TSS_DS])), 0, 0);\n}\n\nstatic void i80286_code_descriptor(UINT16 selector, UINT16 offset, int gate)\n{\n\tif (PM) {\n\t\tUINT16 desc[3];\n\t\tUINT8 r;\n\t\tUINT32 addr;\n\t\t/* selector format\n\t\t   15..3 number/address in descriptor table\n\t\t   2: 0 global, 1 local descriptor table\n\t\t   1,0: requested privileg level\n\t\t   must be higher or same as current privileg level in code selector */\n\t\tif ((addr = i80286_selector_address(selector)) == -1) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(selector));\n\t\tdesc[0] = ReadWord(addr);\n\t\tdesc[1] = ReadWord(addr+2);\n\t\tdesc[2] = ReadWord(addr+4);\n\t\tr = RIGHTS(desc);\n\n\t\tif (SEGDESC(r)) {\n\t\t\tif (!CODE(r)) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(selector));\n\t\t\tif (CONF(r)) { if(DPL(r)>CPL) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(selector)); }\n\t\t\telse if ((RPL(selector)>CPL) || (DPL(r)!=CPL)) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(selector));\n\n\t\t\tif (!PRES(r)) throw TRAP(SEG_NOT_PRESENT,IDXTBL(selector));  // this order is important\n\t\t\tif (offset > LIMIT(desc)) throw TRAP(GENERAL_PROTECTION_FAULT, 0);\n\t\t\tSET_ACC(desc);\n\t\t\tWriteWord(addr+4, desc[2]);\n\t\t\tm_sregs[CS]=IDXTBL(selector) | CPL;\n\t\t\tm_limit[CS]=LIMIT(desc);\n\t\t\tm_base[CS]=BASE(desc);\n\t\t\tm_rights[CS]=RIGHTS(desc);\n\t\t\tm_pc=m_base[CS]+offset;\n\t\t} else { // systemdescriptor\n\t\t\tUINT16 gatedesc[3]={0,0,0};\n\t\t\tUINT16 gatesel = GATESEL(desc);\n\t\t\tif (!gate) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(selector)); // tss cs must be segment\n\t\t\tif (DPL(r) < PMAX(CPL,RPL(selector))) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(selector));\n\t\t\tif (!PRES(r)) throw TRAP(SEG_NOT_PRESENT, IDXTBL(selector));\n\n\t\t\tswitch (GATE(r)) {\n\t\t\tcase CALLGATE:\n\t\t\t\tif ((addr = i80286_selector_address(gatesel)) == -1)\n\t\t\t\t\tthrow TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(gatesel));\n\t\t\t\tgatedesc[0] = ReadWord(addr);\n\t\t\t\tgatedesc[1] = ReadWord(addr+2);\n\t\t\t\tgatedesc[2] = ReadWord(addr+4);\n\t\t\t\tr = RIGHTS(gatedesc);\n\t\t\t\tif (!CODE(r) || !SEGDESC(r)) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(gatesel));\n\t\t\t\tif (DPL(r)>CPL) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(gatesel));\n\t\t\t\tif (!PRES(r)) throw TRAP(SEG_NOT_PRESENT,IDXTBL(gatesel));\n\t\t\t\tif (GATEOFF(desc) > LIMIT(gatedesc)) throw TRAP(GENERAL_PROTECTION_FAULT,0);\n\n\t\t\t\tif (!CONF(r)&&(DPL(r)<CPL)) {  // inner call\n\t\t\t\t\tUINT16 tss_ss, tss_sp, oldss, oldsp;\n\t\t\t\t\tUINT32 oldstk;\n\t\t\t\t\tint i;\n\t\t\t\t\tif(gate == JMP) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(gatesel)); // can't jmp to inner\n\t\t\t\t\ttss_ss = ReadWord(m_tr.base+TSS_SS0*2+(DPL(r)*4));\n\t\t\t\t\ttss_sp = ReadWord(m_tr.base+TSS_SP0*2+(DPL(r)*4));\n\n\t\t\t\t\toldss = m_sregs[SS];\n\t\t\t\t\toldsp = m_regs.w[SP];\n\t\t\t\t\toldstk = m_base[SS] + oldsp;\n\t\t\t\t\ti80286_data_descriptor_full(SS, tss_ss, DPL(r), TRAP(INVALID_TSS,IDXTBL(tss_ss)), tss_sp-8-(GATECNT(desc)*2), 8+(GATECNT(desc)*2));\n\t\t\t\t\tm_regs.w[SP] = tss_sp;\n\t\t\t\t\tPUSH(oldss);\n\t\t\t\t\tPUSH(oldsp);\n\t\t\t\t\tfor (i = GATECNT(desc)-1; i >= 0; i--)\n\t\t\t\t\t\tPUSH(ReadWord(oldstk+(i*2)));\n\t\t\t\t} else i80286_check_permission(SS, m_regs.w[SP]-4, 4, I80286_READ);\n\t\t\t\tSET_ACC(gatedesc);\n\t\t\t\tWriteWord(addr+4, gatedesc[2]);\n\t\t\t\tm_sregs[CS]=IDXTBL(gatesel) | DPL(r);\n\t\t\t\tm_limit[CS]=LIMIT(gatedesc);\n\t\t\t\tm_base[CS]=BASE(gatedesc);\n\t\t\t\tm_rights[CS]=RIGHTS(gatedesc);\n\t\t\t\tm_pc=(m_base[CS]+GATEOFF(desc))&AMASK;\n\t\t\t\tbreak;\n\t\t\tcase TASKGATE:\n\t\t\t\tselector = gatesel;\n\t\t\t\tif ((addr = i80286_selector_address(selector)) == -1)\n\t\t\t\t\tthrow TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(selector));\n\t\t\t\tdesc[2] = ReadWord(addr+4);\n\t\t\t\tr = RIGHTS(desc);\n\t\t\t\tif (SEGDESC(r) || (GATE(r) != TSSDESCIDLE)) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(selector));\n\t\t\tcase TSSDESCIDLE:\n\t\t\t\ti80286_switch_task(selector, gate);\n\t\t\t\ti80286_load_flags(m_flags, CPL);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(selector));\n\t\t\t}\n\t\t}\n\t} else {\n\t\tm_sregs[CS]=selector;\n\t\tm_base[CS]=selector<<4;\n\t\tm_rights[CS]=0x9a;\n\t\tm_limit[CS]=0xffff;\n\t\tm_pc=(m_base[CS]+offset)&AMASK;\n\t}\n}\n\nstatic void i80286_interrupt_descriptor(UINT16 number, int hwint, int error)\n{\n\tUINT16 desc[3], gatedesc[3]={0,0,0}, gatesel;\n\tUINT8 r;\n\tUINT32 addr;\n\n\tif(!PM) return PREFIX86(_interrupt)(number);\n\n\tif ((number<<3)>=m_idtr.limit)\n\t\tthrow TRAP(GENERAL_PROTECTION_FAULT,(number*8+2+(hwint&&1)));\n\n\tdesc[0] = ReadWord(m_idtr.base+(number<<3));\n\tdesc[1] = ReadWord(m_idtr.base+(number<<3)+2);\n\tdesc[2] = ReadWord(m_idtr.base+(number<<3)+4);\n\tr = RIGHTS(desc);\n\tif (!hwint && (DPL(r)<CPL)) throw TRAP(GENERAL_PROTECTION_FAULT,(number*8+2+(hwint&&1)));\n\tif (!PRES(r)) throw TRAP(SEG_NOT_PRESENT,(number*8+2+(hwint&&1)));\n\tgatesel = GATESEL(desc);\n\n\tswitch (GATE(r)) {\n\tcase TASKGATE:\n\t\ti80286_switch_task(gatesel, CALL);\n\t\tif((hwint == 1) && (error != -1)) PUSH(error);\n\t\ti80286_load_flags(m_flags, CPL);\n\t\tbreak;\n\tcase INTGATE:\n\tcase TRAPGATE:\n\t\tif ((addr = i80286_selector_address(gatesel)) == -1)\n\t\t\tthrow TRAP(GENERAL_PROTECTION_FAULT,(IDXTBL(gatesel)+(hwint&&1)));\n\t\tgatedesc[0] = ReadWord(addr);\n\t\tgatedesc[1] = ReadWord(addr+2);\n\t\tgatedesc[2] = ReadWord(addr+4);\n\t\tr = RIGHTS(gatedesc);\n\t\tif (!CODE(r) || !SEGDESC(r)) throw TRAP(GENERAL_PROTECTION_FAULT,(IDXTBL(gatesel)+(hwint&&1)));\n\t\tif (DPL(r)>CPL) throw TRAP(GENERAL_PROTECTION_FAULT,(IDXTBL(gatesel)+(hwint&&1)));\n\t\tif (!PRES(r)) throw TRAP(SEG_NOT_PRESENT,(IDXTBL(gatesel)+(hwint&&1)));\n\t\tif (GATEOFF(desc) > LIMIT(gatedesc)) throw TRAP(GENERAL_PROTECTION_FAULT,(int)(hwint&&1));\n\n\t\tif (!CONF(r)&&(DPL(r)<CPL)) {  // inner call\n\t\t\tUINT16 tss_ss, tss_sp, oldss, oldsp;\n\t\t\ttss_ss = ReadWord(m_tr.base+TSS_SS0*2+(DPL(r)*4));\n\t\t\ttss_sp = ReadWord(m_tr.base+TSS_SP0*2+(DPL(r)*4));\n\n\t\t\toldss = m_sregs[SS];\n\t\t\toldsp = m_regs.w[SP];\n\t\t\ti80286_data_descriptor_full(SS, tss_ss, DPL(r), TRAP(INVALID_TSS,(IDXTBL(tss_ss)+(hwint&&1))), tss_sp-((error != -1)?12:10), (error != -1)?12:10);\n\t\t\tm_regs.w[SP] = tss_sp;\n\t\t\tPUSH(oldss);\n\t\t\tPUSH(oldsp);\n\t\t} else i80286_check_permission(SS, m_regs.w[SP]-((error != -1)?8:6), (error != -1)?8:6, I80286_READ);\n\t\tSET_ACC(gatedesc);\n\t\tWriteWord(addr+4, gatedesc[2]);\n\t\tPREFIX(_pushf());\n\t\tPUSH(m_sregs[CS]);\n\t\tPUSH(m_pc-m_base[CS]);\n\t\tif((hwint == 1) && (error != -1)) PUSH(error);\n\t\tm_sregs[CS]=IDXTBL(gatesel) | DPL(r);\n\t\tm_limit[CS]=LIMIT(gatedesc);\n\t\tm_base[CS]=BASE(gatedesc);\n\t\tm_rights[CS]=RIGHTS(gatedesc);\n\t\tm_pc=(m_base[CS]+GATEOFF(desc))&AMASK;\n\t\tm_TF = 0;\n\t\tm_flags &= ~0x4000;\n\t\tif (GATE(RIGHTS(desc)) == INTGATE) m_IF = 0;\n\t\tCHANGE_PC(m_pc);\n\t\tbreak;\n\tdefault:\n\t\tthrow TRAP(GENERAL_PROTECTION_FAULT,(number*8+2+(hwint&&1)));\n\t}\n}\n\nstatic void PREFIX286(_0fpre)()\n{\n\tunsigned next = FETCHOP;\n\tUINT16 ModRM, desc[3];\n\tUINT16 tmp, msw, sel;\n\tUINT8 r;\n\tUINT32 addr;\n\n\tswitch (next) {\n\tcase 0:\n\t\tif (!PM) throw TRAP(ILLEGAL_INSTRUCTION,-1);\n\t\tModRM=FETCHOP;\n\t\tswitch (ModRM&0x38) {\n\t\tcase 0: /* sldt */\n\t\t\tPutRMWord(ModRM, m_ldtr.sel);\n\t\t\tbreak;\n\t\tcase 8: /* str */\n\t\t\tPutRMWord(ModRM, m_tr.sel);\n\t\t\tbreak;\n\t\tcase 0x10: /* lldt */\n\t\t\tif (CPL!=0) throw TRAP(GENERAL_PROTECTION_FAULT,0);\n\t\t\tsel=GetRMWord(ModRM);\n\t\t\tif (TBL(sel)) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(sel));\n\t\t\tif (IDXTBL(sel)) {\n\t\t\t\tif (IDX(sel)>=m_gdtr.limit) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(sel));\n\t\t\t\taddr = m_gdtr.base + IDX(sel);\n\t\t\t\tdesc[0] = ReadWord(addr);\n\t\t\t\tdesc[1] = ReadWord(addr+2);\n\t\t\t\tdesc[2] = ReadWord(addr+4);\n\t\t\t\tr = RIGHTS(desc);\n\t\t\t\tif (SEGDESC(r) || (GATE(r) != LDTDESC)) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(sel));\n\t\t\t\tif (!PRES(r)) throw TRAP(SEG_NOT_PRESENT,IDXTBL(sel));\n\t\t\t} else {\n\t\t\t\tdesc[0] = 0;\n\t\t\t\tdesc[1] = 0;\n\t\t\t\tdesc[2] = 0;\n\t\t\t}\n\t\t\tm_ldtr.sel=sel;\n\t\t\tm_ldtr.limit=LIMIT(desc);\n\t\t\tm_ldtr.base=BASE(desc);\n\t\t\tm_ldtr.rights=RIGHTS(desc);\n\t\t\tbreak;\n\t\tcase 0x18: /* ltr */\n\t\t\tif (CPL!=0) throw TRAP(GENERAL_PROTECTION_FAULT,0);\n\t\t\tsel=GetRMWord(ModRM);\n\t\t\tif ((addr = i80286_selector_address(sel)) == -1) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(sel));\n\t\t\tdesc[0] = ReadWord(addr);\n\t\t\tdesc[1] = ReadWord(addr+2);\n\t\t\tdesc[2] = ReadWord(addr+4);\n\t\t\tr = RIGHTS(desc);\n\t\t\tif (SEGDESC(r) || (GATE(r) != TSSDESCIDLE)) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(sel));\n\t\t\tif (!PRES(r)) throw TRAP(SEG_NOT_PRESENT,IDXTBL(sel));\n\t\t\tdesc[2] |= 0x200; // mark busy\n\t\t\tWriteWord(addr+4, desc[2]);\n\t\t\tm_tr.sel=sel;\n\t\t\tm_tr.limit=LIMIT(desc);\n\t\t\tm_tr.base=BASE(desc);\n\t\t\tm_tr.rights=RIGHTS(desc);\n\t\t\tbreak;\n\t\tcase 0x20: /* verr */\n\t\t\ttmp=GetRMWord(ModRM);\n\t\t\tif ((addr = i80286_selector_address(tmp)) == -1) m_ZeroVal = 1;\n\t\t\telse {\n\t\t\t\tdesc[2] = ReadWord(addr+4);\n\t\t\t\tr = RIGHTS(desc);\n\t\t\t\tm_ZeroVal = i80286_verify(tmp, I80286_READ, RIGHTS(desc), 0);\n\t\t\t\tm_ZeroVal = m_ZeroVal || (CODE(r) && CONF(r) ? 0 : (DPL(r)<PMAX(RPL(tmp),CPL)));\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 0x28: /* verw */\n\t\t\ttmp=GetRMWord(ModRM);\n\t\t\tif ((addr = i80286_selector_address(tmp)) == -1) m_ZeroVal = 1;\n\t\t\telse {\n\t\t\t\tdesc[2] = ReadWord(addr+4);\n\t\t\t\tr = RIGHTS(desc);\n\t\t\t\tm_ZeroVal = i80286_verify(tmp, I80286_WRITE, RIGHTS(desc), 0);\n\t\t\t\tm_ZeroVal = m_ZeroVal || (DPL(r)<PMAX(RPL(tmp),CPL));\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow TRAP(ILLEGAL_INSTRUCTION,-1);\n\t\t}\n\t\tbreak;\n\tcase 1:\n\t\t/* lgdt, lldt in protected mode privilege level 0 required else common protection\n\t\t   failure 0xd */\n\t\tModRM = FETCHOP;\n\t\tswitch (ModRM&0x38) {\n\t\tcase 0: /* sgdt */\n\t\t\tPutRMWord(ModRM,m_gdtr.limit);\n\t\t\tPutRMWordOffset(2,m_gdtr.base&0xffff);\n\t\t\tPutRMWordOffset(4,0xff00|m_gdtr.base>>16);\n\t\t\tbreak;\n\t\tcase 8: /* sidt */\n\t\t\tPutRMWord(ModRM,m_idtr.limit);\n\t\t\tPutRMWordOffset(2,m_idtr.base&0xffff);\n\t\t\tPutRMWordOffset(4,0xff00|m_idtr.base>>16);\n\t\t\tbreak;\n\t\tcase 0x10: /* lgdt */\n\t\t\tif (PM&&(CPL!=0)) throw TRAP(GENERAL_PROTECTION_FAULT,0);\n\t\t\tm_gdtr.limit=GetRMWord(ModRM);\n\t\t\tm_gdtr.base=GetRMWordOffset(2)|(GetRMByteOffset(4)<<16);\n\t\t\tbreak;\n\t\tcase 0x18: /* lidt */\n\t\t\tif (PM&&(CPL!=0)) throw TRAP(GENERAL_PROTECTION_FAULT,0);\n\t\t\tm_idtr.limit=GetRMWord(ModRM);\n\t\t\tm_idtr.base=GetRMWordOffset(2)|(GetRMByteOffset(4)<<16);\n\t\t\tbreak;\n\t\tcase 0x20: /* smsw */\n\t\t\tPutRMWord(ModRM, m_msw);\n\t\t\tbreak;\n\t\tcase 0x30: /* lmsw */\n\t\t\tif (PM&&(CPL!=0)) throw TRAP(GENERAL_PROTECTION_FAULT,0);\n\t\t\tmsw = GetRMWord(ModRM);\n\t\t\tif (!PM&&(msw&1)) m_sregs[CS] = IDX(m_sregs[CS]); // cheat and set cpl to 0\n\t\t\tm_msw=(m_msw&1)|msw;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow TRAP(ILLEGAL_INSTRUCTION,-1);\n\t\t}\n\t\tbreak;\n\tcase 2: /* LAR */\n\t\tif (!PM) throw TRAP(ILLEGAL_INSTRUCTION,-1);\n\t\tModRM = FETCHOP;\n\t\ttmp=GetRMWord(ModRM);\n\t\tif ((addr = i80286_selector_address(tmp)) == -1) m_ZeroVal = 1;\n\t\telse {\n\t\t\tdesc[2] = ReadWord(addr+4);\n\t\t\tr = RIGHTS(desc);\n\t\t\tif (DPL(r)>=PMAX(RPL(tmp),CPL) || (SEGDESC(r) && CODE(r) && CONF(r))) {\n\t\t\t\tm_ZeroVal = 0;\n\t\t\t\t// rights are expected to be in upper byte\n\t\t\t\tRegWord(ModRM) = r << 8;\n\t\t\t}\n\t\t\telse\n\t\t\t\tm_ZeroVal = 1;\n\t\t}\n\t\tbreak;\n\tcase 3: /* LSL */\n\t\tif (!PM) throw TRAP(ILLEGAL_INSTRUCTION,-1);\n\t\tModRM = FETCHOP;\n\t\ttmp=GetRMWord(ModRM);\n\t\tif ((addr = i80286_selector_address(tmp)) == -1) m_ZeroVal = 1;\n\t\telse {\n\t\t\tdesc[2] = ReadWord(addr+4);\n\t\t\tr = RIGHTS(desc);\n\t\t\tif (!SEGDESC(r) && (GATE(r) >= CALLGATE)) m_ZeroVal = 1; // not valid for gates\n\t\t\telse if (DPL(r)>=PMAX(RPL(tmp),CPL) || (SEGDESC(r) && CODE(r) && CONF(r))) {\n\t\t\t\tm_ZeroVal = 0;\n\t\t\t\tRegWord(ModRM) = ReadWord(addr);\n\t\t\t}\n\t\t\telse\n\t\t\t\tm_ZeroVal = 1;\n\t\t}\n\t\tbreak;\n\tcase 5: /* loadall */\n\t\tif (PM&&(CPL!=0)) throw TRAP(GENERAL_PROTECTION_FAULT,0);\n\t\tm_msw =        (m_msw&1)|ReadWord(0x806);\n\t\tm_tr.sel =     ReadWord(0x816);\n\t\ttmp =                  ReadWord(0x818);\n\t\tExpandFlags(tmp);\n\t\tm_flags = tmp;\n\t\tm_flags = CompressFlags();\n\t\tm_pc =         ReadWord(0x81a);\n\t\tm_ldtr.sel =   ReadWord(0x81c);\n\t\tm_sregs[DS] =  ReadWord(0x81e);\n\t\tm_sregs[SS] =  ReadWord(0x820);\n\t\tm_sregs[CS] =  ReadWord(0x822);\n\t\tm_sregs[ES] =  ReadWord(0x824);\n\t\tm_regs.w[DI] = ReadWord(0x826);\n\t\tm_regs.w[SI] = ReadWord(0x828);\n\t\tm_regs.w[BP] = ReadWord(0x82a);\n\t\tm_regs.w[SP] = ReadWord(0x82c);\n\t\tm_regs.w[BX] = ReadWord(0x82e);\n\t\tm_regs.w[DX] = ReadWord(0x830);\n\t\tm_regs.w[CX] = ReadWord(0x832);\n\t\tm_regs.w[AX] = ReadWord(0x834);\n// loadall uses base-rights-limit order\n#define LOADDESC(addr, sreg) {  desc[1] = ReadWord(addr); desc[2] = ReadWord(addr+2); desc[0] = ReadWord(addr+4); \\\n\t\t\t\tm_base[sreg] = BASE(desc); m_rights[sreg] = RIGHTS(desc); \\\n\t\t\t\tm_limit[sreg] = LIMIT(desc); }\n\t\tLOADDESC(0x836, ES);\n\t\tLOADDESC(0x83C, CS);\n\t\tLOADDESC(0x842, SS);\n\t\tLOADDESC(0x848, DS);\n#undef LOADDESC\n// void cast supresses warning\n#define LOADDESC(addr, reg, r) { desc[1] = ReadWord(addr); desc[2] = ReadWord(addr+2); desc[0] = ReadWord(addr+4); \\\n\t\t\t\treg.base = BASE(desc); (void)(r); reg.limit = LIMIT(desc); }\n\t\tLOADDESC(0x84e, m_gdtr, 1);\n\t\tLOADDESC(0x854, m_ldtr, m_ldtr.rights = RIGHTS(desc));\n\t\tLOADDESC(0x85a, m_idtr, 1);\n\t\tLOADDESC(0x860, m_tr,  m_tr.rights = RIGHTS(desc));\n#undef LOADDESC\n\t\tm_pc = (m_pc + m_base[CS]) & AMASK;\n\t\tCHANGE_PC(m_pc);\n\t\tbreak;\n\n\tcase 6: /* clts */\n\t\tif (PM&&(CPL!=0)) throw TRAP(GENERAL_PROTECTION_FAULT,0);\n\t\tm_msw&=~8;\n\t\tbreak;\n\tdefault:\n\t\tthrow TRAP(ILLEGAL_INSTRUCTION,-1);\n\t}\n}\n\nstatic void PREFIX286(_arpl)() /* 0x63 */\n{\n\tUINT16 ModRM, tmp, source;\n\tif (!PM) throw TRAP(ILLEGAL_INSTRUCTION,-1);\n\n\tModRM=FETCHOP;\n\ttmp=GetRMWord(ModRM);\n\tsource=RegWord(ModRM);\n\n\tif (RPL(tmp)<RPL(source))\n\t{\n\t\tm_ZeroVal = 0;\n\t\tPutbackRMWord(ModRM, IDXTBL(tmp)|RPL(source));\n\t}\n\telse\n\t\tm_ZeroVal = 1;\n}\n\nstatic void i80286_load_flags(UINT16 flags, int cpl)\n{\n\tm_flags = CompressFlags();\n\tif(PM && cpl) {\n\t\tUINT16 mask = 0x3000;\n\t\tif(cpl>IOPL) mask |= 0x200;\n\t\tflags &= ~mask;\n\t\tflags |= (m_flags & mask);\n\t}\n\telse if(!PM) (flags &= ~0xf000);\n\tExpandFlags(flags);\n\tm_flags = flags;\n\n\tif (m_TF) PREFIX(_trap)();\n\t/* if the IF is set, and an interrupt is pending, signal an interrupt */\n\tif (m_IF && m_irq_state)\n\t{\n\t\ti80286_interrupt_descriptor(pic_ack(), 2, -1);\n\t\tm_irq_state = CLEAR_LINE;\n\t}\n}\n\nstatic void PREFIX286(_popf)()\n{\n\tUINT16 flags;\n\tPOP(flags);\n\ti80286_load_flags(flags, CPL);\n}\n\nstatic UINT16 i80286_far_return(int iret, int bytes)\n{\n\tUINT16 sel, off, flags = 0;\n\tint spaddr;\n\n\tif (PM && NT && iret) {\n\t\ti80286_switch_task(ReadWord(m_tr.base+TSS_BACK*2), IRET);\n\t\treturn m_flags;\n\t}\n\n\t// must be restartable\n\tif(PM) i80286_check_permission(SS, m_regs.w[SP], (iret?6:4), I80286_READ);\n\tspaddr = (m_base[SS] + m_regs.w[SP]) & AMASK;\n\toff = ReadWord(spaddr);\n\tsel = ReadWord(spaddr+2);\n\tif(iret) flags = ReadWord(spaddr+4);\n\n\tif(PM) {\n\t\tUINT16 desc[3], newsp, newss;\n\t\tint addr, r;\n\n\t\tif ((addr = i80286_selector_address(sel)) == -1)\n\t\t\tthrow TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(sel));\n\n\t\tif (RPL(sel)<CPL) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(sel));\n\t\tdesc[0] = ReadWord(addr);\n\t\tdesc[1] = ReadWord(addr+2);\n\t\tdesc[2] = ReadWord(addr+4);\n\t\tr = RIGHTS(desc);\n\n\t\tif (!CODE(r) || !SEGDESC(r)) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(sel));\n\t\tif (CONF(r)) { if(DPL(r)>RPL(sel)) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(sel)); }\n\t\telse if (DPL(r)!=RPL(sel)) throw TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(sel));\n\n\t\tif (!PRES(r)) throw TRAP(SEG_NOT_PRESENT,IDXTBL(sel));\n\t\tif (off > LIMIT(desc)) throw TRAP(GENERAL_PROTECTION_FAULT,0);\n\t\tif (CPL<RPL(sel)) {\n\t\t\ti80286_check_permission(SS, m_regs.w[SP]+(iret?6:4)+bytes, 4, I80286_READ);\n\t\t\tnewsp = ReadWord(spaddr+((iret?6:4)+bytes));\n\t\t\tnewss = ReadWord(spaddr+((iret?8:6)+bytes));\n\t\t\ti80286_data_descriptor_full(SS, newss, RPL(sel), TRAP(GENERAL_PROTECTION_FAULT,IDXTBL(newss)), 0, 0);\n\t\t\tm_regs.w[SP] = newsp + bytes;\n\t\t} else m_regs.w[SP] += (iret?6:4) + bytes;\n\t\tSET_ACC(desc);\n\t\tWriteWord(addr+4, desc[2]);\n\t\tm_sregs[CS]=sel;\n\t\tm_limit[CS]=LIMIT(desc);\n\t\tm_base[CS]=BASE(desc);\n\t\tm_rights[CS]=RIGHTS(desc);\n\t\tm_pc=(m_base[CS]+off)&AMASK;\n\n\t\t// docs say check rpl but windows doesn't like it\n\t\tr = m_rights[DS];\n\t\tif (i80286_verify(m_sregs[DS], I80286_READ, r, 0) || (CODE(r) && CONF(r) ? 0 : (DPL(r) < CPL)))\n\t\t\ti80286_data_descriptor(DS, 0);\n\t\tr = m_rights[ES];\n\t\tif (i80286_verify(m_sregs[ES], I80286_READ, r, 0) || (CODE(r) && CONF(r) ? 0 : (DPL(r) < CPL)))\n\t\t\ti80286_data_descriptor(ES, 0);\n\t} else {\n\t\tm_regs.w[SP] += (iret?6:4) + bytes;\n\t\tm_sregs[CS]=sel;\n\t\tm_base[CS]=sel<<4;\n\t\tm_rights[CS]=0x9a;\n\t\tm_limit[CS]=0xffff;\n\t\tm_pc=(m_base[CS]+off)&AMASK;\n\t}\n\tCHANGE_PC(m_pc);\n\n\treturn flags;\n}\n\nstatic void PREFIX286(_iret)()\n{\n\tUINT32 old = m_pc - 1;\n\n\tint oldcpl = (PM)?CPL:0;\n\tUINT16 flags = i80286_far_return(1, 0);\n\ti80286_load_flags(flags, oldcpl);\n\n\t// MS-DOS system call\n\tif(IRET_TOP <= old && old < (IRET_TOP + IRET_SIZE)) {\n\t\tmsdos_syscall(old - IRET_TOP);\n\t}\n}\n\nstatic void PREFIX286(_retf_d16)()\n{\n\tunsigned count = FETCH;\n\tcount += FETCH << 8;\n\ti80286_far_return(0, count);\n}\n\nstatic void PREFIX286(_retf)()\n{\n\ti80286_far_return(0, 0);\n}\n\nstatic void PREFIX286(_escape)()    /* Opcodes 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde */\n{\n\tif ((m_msw&8) || (m_msw&4)) throw TRAP(FPU_UNAVAILABLE,-1);\n\tunsigned ModRM = FETCH;\n\tGetRMByte(ModRM);\n}\n\nstatic void PREFIX286(_escape_7)()    /* Opcode 0xdf */\n{\n\tif ((m_msw&8) || (m_msw&4)) throw TRAP(FPU_UNAVAILABLE,-1);\n\tunsigned ModRM = FETCH;\n\tGetRMByte(ModRM);\n\tif (ModRM == 0xe0) m_regs.w[AX] = 0xffff;  // FPU not present\n}\n\nstatic void i80286_check_permission(UINT8 check_seg, UINT32 offset, UINT16 size, i80286_operation operation)\n{\n\tint trap = 0;\n\tUINT8 rights;\n\tif (PM) {\n\t\trights = m_rights[check_seg];\n\t\ttrap = i80286_verify(m_sregs[check_seg], operation, rights, m_valid[check_seg]);\n\t\tif ((CODE(rights) || !EXPDOWN(rights)) && ((offset+size-1) > m_limit[check_seg])) trap = GENERAL_PROTECTION_FAULT;\n\t\tif (!CODE(rights) && EXPDOWN(rights) && ((offset <= m_limit[check_seg]) || ((offset+size-1) > 0xffff))) trap = GENERAL_PROTECTION_FAULT;\n\n\t\tif ((trap == GENERAL_PROTECTION_FAULT) && (check_seg == SS)) trap = STACK_FAULT;\n\t\tif (trap) throw TRAP(trap, 0);\n\t}\n}\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i86/instr286.h",
    "content": "#define DIVIDE_BY_ZERO 0\n#define SINGLE_STEP 1\n#define NMI 2\n#define BREAK 3\n#define INTO_OVERFLOW 4\n#define BOUND_OVERRUN 5\n#define ILLEGAL_INSTRUCTION 6\n#define FPU_UNAVAILABLE 7\n#define DOUBLE_FAULT 8\n#define FPU_SEG_OVERRUN 9\n#define INVALID_TSS 10\n#define SEG_NOT_PRESENT 11\n#define STACK_FAULT 12\n#define GENERAL_PROTECTION_FAULT 13\n\n#define CPL (m_sregs[CS]&3)\n#define PM (m_msw&1)\n\nstatic void i80286_trap2(UINT32 error);\nstatic void i80286_interrupt_descriptor(UINT16 number, int trap, int error);\nstatic void i80286_code_descriptor(UINT16 selector, UINT16 offset, int gate);\nstatic void i80286_data_descriptor(int reg, UINT16 selector);\nstatic void PREFIX286(_0fpre)();\nstatic void PREFIX286(_arpl)();\nstatic void PREFIX286(_escape_7)();\nstatic void i80286_pop_seg(int reg);\nstatic void i80286_load_flags(UINT16 flags, int cpl);\n\nenum i80286_size\n{\n\tI80286_BYTE = 1,\n\tI80286_WORD = 2\n};\n\nenum i80286_operation\n{\n\tI80286_READ = 1,\n\tI80286_WRITE,\n\tI80286_EXECUTE\n};\n\nstatic void i80286_check_permission(UINT8 check_seg, UINT32 offset, UINT16 size, i80286_operation operation);\n\nstatic inline UINT32 GetMemAddr(UINT8 seg, UINT32 off, UINT16 size, i80286_operation op) {\n\tseg = DefaultSeg(seg);\n\tif(PM) i80286_check_permission(seg, off, size, op);\n\treturn (m_base[seg] + off) & AMASK;\n}\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i86/instr86.c",
    "content": "/****************************************************************************\n*             real mode i286 emulator v1.4 by Fabrice Frances               *\n*               (initial work based on David Hedley's pcemu)                *\n****************************************************************************/\n\n/*\n * file will be included in all cpu variants\n * put non i86 instructions in own files (i286, i386, nec)\n * function renaming will be added when necessary\n * timing value should move to separate array\n */\n\n/*\n    PHS - 2010-12-29\n\n    Moved several instruction stubs so that they are compiled separately for\n    the 8086 and 80186. The instructions affected are :\n\n    _pop_ss, _es, _cs, _ss, _ds, _mov_sregw and _sti\n\n    This is because they call the next instruction directly as it cannot be\n    interrupted. If they are not compiled separately when executing on an\n    80186, the wrong set of instructions are used (the 8086 set). This has\n    the serious effect of ignoring the next instruction, as invalid, *IF*\n    it is an 80186 specific instruction.\n\n*/\n\n#if !defined(I80186)\nstatic void PREFIX86(_interrupt)(unsigned int_num)\n{\n\tunsigned dest_seg, dest_off;\n\tWORD ip = m_pc - m_base[CS];\n\n\tif (int_num == -1)\n\t\tint_num = pic_ack();\n\n#ifdef I80286\n\tif (PM) {\n\t\ti80286_interrupt_descriptor(int_num, 0, 0);\n\t} else {\n#endif\n\t\tdest_off = ReadWord(int_num*4);\n\t\tdest_seg = ReadWord(int_num*4+2);\n\n\t\tPREFIX(_pushf());\n\t\tm_TF = m_IF = 0;\n\t\tPUSH(m_sregs[CS]);\n\t\tPUSH(ip);\n\t\tm_sregs[CS] = (WORD)dest_seg;\n\t\tm_base[CS] = SegBase(CS);\n\t\tm_pc = (m_base[CS] + dest_off) & AMASK;\n\t\tCHANGE_PC(m_pc);\n#ifdef I80286\n\t}\n#endif\n}\n\nstatic void PREFIX86(_trap)()\n{\n\tPREFIX(_instruction)[FETCHOP]();\n\tPREFIX(_interrupt)(1);\n}\n#endif\n\n#ifndef I80186\nstatic void PREFIX86(_rotate_shift_Byte)(unsigned ModRM, unsigned count, unsigned src)\n{\n//  unsigned src = (unsigned)GetRMByte(ModRM);\n\tunsigned dst=src;\n\n\tif (count==0)\n\t{\n\t}\n\telse if (count==1)\n\t{\n\t\tswitch (ModRM & 0x38)\n\t\t{\n\t\tcase 0x00:  /* ROL eb,1 */\n\t\t\tm_CarryVal = src & 0x80;\n\t\t\tdst=(src<<1)+CF;\n\t\t\tPutbackRMByte(ModRM,dst);\n\t\t\tm_OverVal = (src^dst)&0x80;\n\t\t\tbreak;\n\t\tcase 0x08:  /* ROR eb,1 */\n\t\t\tm_CarryVal = src & 0x01;\n\t\t\tdst = ((CF<<8)+src) >> 1;\n\t\t\tPutbackRMByte(ModRM,dst);\n\t\t\tm_OverVal = (src^dst)&0x80;\n\t\t\tbreak;\n\t\tcase 0x10:  /* RCL eb,1 */\n\t\t\tdst=(src<<1)+CF;\n\t\t\tPutbackRMByte(ModRM,dst);\n\t\t\tSetCFB(dst);\n\t\t\tm_OverVal = (src^dst)&0x80;\n\t\t\tbreak;\n\t\tcase 0x18:  /* RCR eb,1 */\n\t\t\tdst = ((CF<<8)+src) >> 1;\n\t\t\tPutbackRMByte(ModRM,dst);\n\t\t\tm_CarryVal = src & 0x01;\n\t\t\tm_OverVal = (src^dst)&0x80;\n\t\t\tbreak;\n\t\tcase 0x20:  /* SHL eb,1 */\n\t\tcase 0x30:\n\t\t\tdst = src << 1;\n\t\t\tPutbackRMByte(ModRM,dst);\n\t\t\tSetCFB(dst);\n\t\t\tm_OverVal = (src^dst)&0x80;\n\t\t\tm_AuxVal = 1;\n\t\t\tSetSZPF_Byte(dst);\n\t\t\tbreak;\n\t\tcase 0x28:  /* SHR eb,1 */\n\t\t\tdst = src >> 1;\n\t\t\tPutbackRMByte(ModRM,dst);\n\t\t\tm_CarryVal = src & 0x01;\n\t\t\tm_OverVal = src & 0x80;\n\t\t\tm_AuxVal = 1;\n\t\t\tSetSZPF_Byte(dst);\n\t\t\tbreak;\n\t\tcase 0x38:  /* SAR eb,1 */\n\t\t\tdst = ((INT8)src) >> 1;\n\t\t\tPutbackRMByte(ModRM,dst);\n\t\t\tm_CarryVal = src & 0x01;\n\t\t\tm_OverVal = 0;\n\t\t\tm_AuxVal = 1;\n\t\t\tSetSZPF_Byte(dst);\n\t\t\tbreak;\n\t\t}\n\t}\n\telse\n\t{\n\t\tint tmpcf = CF;\n\n\t\tswitch (ModRM & 0x38)\n\t\t{\n\t\tcase 0x00:  /* ROL eb,count */\n\t\t\tfor (; count > 0; count--)\n\t\t\t{\n\t\t\t\tm_CarryVal = dst & 0x80;\n\t\t\t\tdst = (dst << 1) + CF;\n\t\t\t}\n\t\t\tPutbackRMByte(ModRM,(BYTE)dst);\n\t\t\tbreak;\n\t\tcase 0x08:  /* ROR eb,count */\n\t\t\tfor (; count > 0; count--)\n\t\t\t{\n\t\t\t\tm_CarryVal = dst & 0x01;\n\t\t\t\tdst = (dst >> 1) + (CF << 7);\n\t\t\t}\n\t\t\tPutbackRMByte(ModRM,(BYTE)dst);\n\t\t\tbreak;\n\t\tcase 0x10:  /* RCL eb,count */\n\t\t\tfor (; count > 0; count--)\n\t\t\t{\n\t\t\t\tdst = (dst << 1) + tmpcf;\n\t\t\t\ttmpcf = (int)((dst & 0x100) != 0);\n\t\t\t}\n\t\t\tPutbackRMByte(ModRM,(BYTE)dst);\n\t\t\tm_CarryVal = tmpcf;\n\t\t\tbreak;\n\t\tcase 0x18:  /* RCR eb,count */\n\t\t\tfor (; count > 0; count--)\n\t\t\t{\n\t\t\t\tdst = (tmpcf<<8)+dst;\n\t\t\t\ttmpcf = dst & 0x01;\n\t\t\t\tdst >>= 1;\n\t\t\t}\n\t\t\tPutbackRMByte(ModRM,(BYTE)dst);\n\t\t\tm_CarryVal = tmpcf;\n\t\t\tbreak;\n\t\tcase 0x20:\n\t\tcase 0x30:  /* SHL eb,count */\n\t\t\tfor(int i=0;i<count;i++) dst<<= 1;\n\t\t\tSetCFB(dst);\n\t\t\tm_AuxVal = 1;\n\t\t\tSetSZPF_Byte(dst);\n\t\t\tPutbackRMByte(ModRM,(BYTE)dst);\n\t\t\tbreak;\n\t\tcase 0x28:  /* SHR eb,count */\n\t\t\tfor(int i=0;i<count-1;i++) dst>>= 1;\n\t\t\tm_CarryVal = dst & 0x1;\n\t\t\tdst >>= 1;\n\t\t\tSetSZPF_Byte(dst);\n\t\t\tm_AuxVal = 1;\n\t\t\tPutbackRMByte(ModRM,(BYTE)dst);\n\t\t\tbreak;\n\t\tcase 0x38:  /* SAR eb,count */\n\t\t\tfor(int i=0;i<count-1;i++) dst = ((INT8)dst) >> 1;\n\t\t\tm_CarryVal = dst & 0x1;\n\t\t\tdst = ((INT8)((BYTE)dst)) >> 1;\n\t\t\tSetSZPF_Byte(dst);\n\t\t\tm_AuxVal = 1;\n\t\t\tPutbackRMByte(ModRM,(BYTE)dst);\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\nstatic void PREFIX86(_rotate_shift_Word)(unsigned ModRM, unsigned count, unsigned src)\n{\n//  unsigned src = GetRMWord(ModRM);\n\tunsigned dst=src;\n\n\tif (count==0)\n\t{\n\t}\n\telse if (count==1)\n\t{\n\t\tswitch (ModRM & 0x38)\n\t\t{\n#if 0\n\t\tcase 0x00:  /* ROL ew,1 */\n\t\t\ttmp2 = (tmp << 1) + CF;\n\t\t\tSetCFW(tmp2);\n\t\t\tm_OverVal = !(!(tmp & 0x4000)) != CF;\n\t\t\tPutbackRMWord(ModRM,tmp2);\n\t\t\tbreak;\n\t\tcase 0x08:  /* ROR ew,1 */\n\t\t\tm_CarryVal = tmp & 0x01;\n\t\t\ttmp2 = (tmp >> 1) + ((unsigned)CF << 15);\n\t\t\tm_OverVal = !(!(tmp & 0x8000)) != CF;\n\t\t\tPutbackRMWord(ModRM,tmp2);\n\t\t\tbreak;\n\t\tcase 0x10:  /* RCL ew,1 */\n\t\t\ttmp2 = (tmp << 1) + CF;\n\t\t\tSetCFW(tmp2);\n\t\t\tm_OverVal = (tmp ^ (tmp << 1)) & 0x8000;\n\t\t\tPutbackRMWord(ModRM,tmp2);\n\t\t\tbreak;\n\t\tcase 0x18:  /* RCR ew,1 */\n\t\t\ttmp2 = (tmp >> 1) + ((unsigned)CF << 15);\n\t\t\tm_OverVal = !(!(tmp & 0x8000)) != CF;\n\t\t\tm_CarryVal = tmp & 0x01;\n\t\t\tPutbackRMWord(ModRM,tmp2);\n\t\t\tbreak;\n\t\tcase 0x20:  /* SHL ew,1 */\n\t\tcase 0x30:\n\t\t\ttmp <<= 1;\n\n\t\t\tSetCFW(tmp);\n\t\t\tSetOFW_Add(tmp,tmp2,tmp2);\n\t\t\tm_AuxVal = 1;\n\t\t\tSetSZPF_Word(tmp);\n\n\t\t\tPutbackRMWord(ModRM,tmp);\n\t\t\tbreak;\n\t\tcase 0x28:  /* SHR ew,1 */\n\t\t\tm_CarryVal = tmp & 0x01;\n\t\t\tm_OverVal = tmp & 0x8000;\n\n\t\t\ttmp2 = tmp >> 1;\n\n\t\t\tSetSZPF_Word(tmp2);\n\t\t\tm_AuxVal = 1;\n\t\t\tPutbackRMWord(ModRM,tmp2);\n\t\t\tbreak;\n\t\t\tcase 0x38:  /* SAR ew,1 */\n\t\t\tm_CarryVal = tmp & 0x01;\n\t\t\tm_OverVal = 0;\n\n\t\t\ttmp2 = (tmp >> 1) | (tmp & 0x8000);\n\n\t\t\tSetSZPF_Word(tmp2);\n\t\t\tm_AuxVal = 1;\n\t\t\tPutbackRMWord(ModRM,tmp2);\n\t\t\tbreak;\n#else\n\t\tcase 0x00:  /* ROL ew,1 */\n\t\t\tm_CarryVal = src & 0x8000;\n\t\t\tdst=(src<<1)+CF;\n\t\t\tPutbackRMWord(ModRM,dst);\n\t\t\tm_OverVal = (src^dst)&0x8000;\n\t\t\tbreak;\n\t\tcase 0x08:  /* ROR ew,1 */\n\t\t\tm_CarryVal = src & 0x01;\n\t\t\tdst = ((CF<<16)+src) >> 1;\n\t\t\tPutbackRMWord(ModRM,dst);\n\t\t\tm_OverVal = (src^dst)&0x8000;\n\t\t\tbreak;\n\t\tcase 0x10:  /* RCL ew,1 */\n\t\t\tdst=(src<<1)+CF;\n\t\t\tPutbackRMWord(ModRM,dst);\n\t\t\tSetCFW(dst);\n\t\t\tm_OverVal = (src^dst)&0x8000;\n\t\t\tbreak;\n\t\tcase 0x18:  /* RCR ew,1 */\n\t\t\tdst = ((CF<<16)+src) >> 1;\n\t\t\tPutbackRMWord(ModRM,dst);\n\t\t\tm_CarryVal = src & 0x01;\n\t\t\tm_OverVal = (src^dst)&0x8000;\n\t\t\tbreak;\n\t\tcase 0x20:  /* SHL ew,1 */\n\t\tcase 0x30:\n\t\t\tdst = src << 1;\n\t\t\tPutbackRMWord(ModRM,dst);\n\t\t\tSetCFW(dst);\n\t\t\tm_OverVal = (src^dst)&0x8000;\n\t\t\tm_AuxVal = 1;\n\t\t\tSetSZPF_Word(dst);\n\t\t\tbreak;\n\t\tcase 0x28:  /* SHR ew,1 */\n\t\t\tdst = src >> 1;\n\t\t\tPutbackRMWord(ModRM,dst);\n\t\t\tm_CarryVal = src & 0x01;\n\t\t\tm_OverVal = src & 0x8000;\n\t\t\tm_AuxVal = 1;\n\t\t\tSetSZPF_Word(dst);\n\t\t\tbreak;\n\t\tcase 0x38:  /* SAR ew,1 */\n\t\t\tdst = ((INT16)src) >> 1;\n\t\t\tPutbackRMWord(ModRM,dst);\n\t\t\tm_CarryVal = src & 0x01;\n\t\t\tm_OverVal = 0;\n\t\t\tm_AuxVal = 1;\n\t\t\tSetSZPF_Word(dst);\n\t\t\tbreak;\n#endif\n\t\t}\n\t}\n\telse\n\t{\n\t\tint tmpcf = CF;\n\n\t\tswitch (ModRM & 0x38)\n\t\t{\n\t\tcase 0x00:  /* ROL ew,count */\n\t\t\tfor (; count > 0; count--)\n\t\t\t{\n\t\t\t\tm_CarryVal = dst & 0x8000;\n\t\t\t\tdst = (dst << 1) + CF;\n\t\t\t}\n\t\t\tPutbackRMWord(ModRM,dst);\n\t\t\tbreak;\n\t\tcase 0x08:  /* ROR ew,count */\n\t\t\tfor (; count > 0; count--)\n\t\t\t{\n\t\t\t\tm_CarryVal = dst & 0x01;\n\t\t\t\tdst = (dst >> 1) + (CF << 15);\n\t\t\t}\n\t\t\tPutbackRMWord(ModRM,dst);\n\t\t\tbreak;\n\t\tcase 0x10:  /* RCL ew,count */\n\t\t\tfor (; count > 0; count--)\n\t\t\t{\n\t\t\t\tdst = (dst << 1) + tmpcf;\n\t\t\t\ttmpcf = (int)((dst & 0x10000) != 0);\n\t\t\t}\n\t\t\tPutbackRMWord(ModRM,dst);\n\t\t\tm_CarryVal = tmpcf;\n\t\t\tbreak;\n\t\tcase 0x18:  /* RCR ew,count */\n\t\t\tfor (; count > 0; count--)\n\t\t\t{\n\t\t\t\tdst = dst + (tmpcf << 16);\n\t\t\t\ttmpcf = dst & 0x01;\n\t\t\t\tdst >>= 1;\n\t\t\t}\n\t\t\tPutbackRMWord(ModRM,dst);\n\t\t\tm_CarryVal = tmpcf;\n\t\t\tbreak;\n\t\tcase 0x20:\n\t\tcase 0x30:  /* SHL ew,count */\n\t\t\tfor(int i=0;i<count;i++) dst<<= 1;\n\t\t\tSetCFW(dst);\n\t\t\tm_AuxVal = 1;\n\t\t\tSetSZPF_Word(dst);\n\t\t\tPutbackRMWord(ModRM,dst);\n\t\t\tbreak;\n\t\tcase 0x28:  /* SHR ew,count */\n\t\t\tfor(int i=0;i<count-1;i++) dst>>= 1;\n\t\t\tm_CarryVal = dst & 0x1;\n\t\t\tdst >>= 1;\n\t\t\tSetSZPF_Word(dst);\n\t\t\tm_AuxVal = 1;\n\t\t\tPutbackRMWord(ModRM,dst);\n\t\t\tbreak;\n\t\tcase 0x38:  /* SAR ew,count */\n\t\t\tfor(int i=0;i<count-1;i++) dst = ((INT16)dst) >> 1;\n\t\t\tm_CarryVal = dst & 0x01;\n\t\t\tdst = ((INT16)((WORD)dst)) >> 1;\n\t\t\tSetSZPF_Word(dst);\n\t\t\tm_AuxVal = 1;\n\t\t\tPutbackRMWord(ModRM,dst);\n\t\t\tbreak;\n\t\t}\n\t}\n}\n#endif\n\nstatic void PREFIX(rep)(int flagval)\n{\n\t/* Handles rep- and repnz- prefixes. flagval is the value of ZF for the\n\t     loop  to continue for CMPS and SCAS instructions. */\n\n\tunsigned next = FETCHOP;\n\n\tswitch(next)\n\t{\n\tcase 0x26:  /* ES: */\n\t\tm_seg_prefix = TRUE;\n\t\tm_prefix_seg = ES;\n\t\tPREFIX(rep)(flagval);\n\t\tbreak;\n\tcase 0x2e:  /* CS: */\n\t\tm_seg_prefix = TRUE;\n\t\tm_prefix_seg = CS;\n\t\tPREFIX(rep)(flagval);\n\t\tbreak;\n\tcase 0x36:  /* SS: */\n\t\tm_seg_prefix = TRUE;\n\t\tm_prefix_seg = SS;\n\t\tPREFIX(rep)(flagval);\n\t\tbreak;\n\tcase 0x3e:  /* DS: */\n\t\tm_seg_prefix = TRUE;\n\t\tm_prefix_seg = DS;\n\t\tPREFIX(rep)(flagval);\n\t\tbreak;\n#ifndef I8086\n\tcase 0x6c:  /* REP INSB */\n#ifdef I80286\n\t\tif (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0);\n#endif\n\t\twhile(m_regs.w[CX])\n\t\t{\n\t\t\tPutMemB(ES,m_regs.w[DI],read_port_byte(m_regs.w[DX]));\n\t\t\tm_regs.w[CX]--;\n\t\t\tm_regs.w[DI] += m_DirVal;\n\t\t}\n\t\tbreak;\n\tcase 0x6d:  /* REP INSW */\n#ifdef I80286\n\t\tif (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0);\n#endif\n\t\twhile(m_regs.w[CX])\n\t\t{\n\t\t\tPutMemW(ES,m_regs.w[DI],read_port_word(m_regs.w[DX]));\n\t\t\tm_regs.w[CX]--;\n\t\t\tm_regs.w[DI] += 2 * m_DirVal;\n\t\t}\n\t\tbreak;\n\tcase 0x6e:  /* REP OUTSB */\n#ifdef I80286\n\t\tif (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0);\n#endif\n\t\twhile(m_regs.w[CX])\n\t\t{\n\t\t\twrite_port_byte(m_regs.w[DX],GetMemB(DS,m_regs.w[SI]));\n\t\t\tm_regs.w[CX]--;\n\t\t\tm_regs.w[SI] += m_DirVal; /* GOL 11/27/01 */\n\t\t}\n\t\tbreak;\n\tcase 0x6f:  /* REP OUTSW */\n#ifdef I80286\n\t\tif (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0);\n#endif\n\t\twhile(m_regs.w[CX])\n\t\t{\n\t\t\twrite_port_word(m_regs.w[DX],GetMemW(DS,m_regs.w[SI]));\n\t\t\tm_regs.w[CX]--;\n\t\t\tm_regs.w[SI] += 2 * m_DirVal; /* GOL 11/27/01 */\n\t\t}\n\t\tbreak;\n#endif\n\tcase 0xa4:  /* REP MOVSB */\n\t\twhile(m_regs.w[CX])\n\t\t{\n\t\t\tBYTE tmp;\n\n\t\t\ttmp = GetMemB(DS,m_regs.w[SI]);\n\t\t\tPutMemB(ES,m_regs.w[DI], tmp);\n\t\t\tm_regs.w[CX]--;\n\t\t\tm_regs.w[DI] += m_DirVal;\n\t\t\tm_regs.w[SI] += m_DirVal;\n\t\t}\n\t\tbreak;\n\tcase 0xa5:  /* REP MOVSW */\n\t\twhile(m_regs.w[CX])\n\t\t{\n\t\t\tWORD tmp;\n\n\t\t\ttmp = GetMemW(DS,m_regs.w[SI]);\n\t\t\tPutMemW(ES,m_regs.w[DI], tmp);\n\t\t\tm_regs.w[CX]--;\n\t\t\tm_regs.w[DI] += 2 * m_DirVal;\n\t\t\tm_regs.w[SI] += 2 * m_DirVal;\n\t\t}\n\t\tbreak;\n\tcase 0xa6:  /* REP(N)E CMPSB */\n\t\tm_ZeroVal = !flagval;\n\t\twhile(m_regs.w[CX] && (ZF == flagval))\n\t\t{\n\t\t\tunsigned dst, src;\n\n\t\t\tdst = GetMemB(ES, m_regs.w[DI]);\n\t\t\tsrc = GetMemB(DS, m_regs.w[SI]);\n\t\t\tSUBB(src,dst); /* opposite of the usual convention */\n\t\t\tm_regs.w[CX]--;\n\t\t\tm_regs.w[DI] += m_DirVal;\n\t\t\tm_regs.w[SI] += m_DirVal;\n\t\t}\n\t\tbreak;\n\tcase 0xa7:  /* REP(N)E CMPSW */\n\t\tm_ZeroVal = !flagval;\n\t\twhile(m_regs.w[CX] && (ZF == flagval))\n\t\t{\n\t\t\tunsigned dst, src;\n\n\t\t\tdst = GetMemW(ES, m_regs.w[DI]);\n\t\t\tsrc = GetMemW(DS, m_regs.w[SI]);\n\t\t\tSUBW(src,dst); /* opposite of the usual convention */\n\t\t\tm_regs.w[CX]--;\n\t\t\tm_regs.w[DI] += 2 * m_DirVal;\n\t\t\tm_regs.w[SI] += 2 * m_DirVal;\n\t\t}\n\t\tbreak;\n\tcase 0xaa:  /* REP STOSB */\n\t\twhile(m_regs.w[CX])\n\t\t{\n\t\t\tPutMemB(ES,m_regs.w[DI],m_regs.b[AL]);\n\t\t\tm_regs.w[CX]--;\n\t\t\tm_regs.w[DI] += m_DirVal;\n\t\t}\n\t\tbreak;\n\tcase 0xab:  /* REP STOSW */\n\t\twhile(m_regs.w[CX])\n\t\t{\n\t\t\tPutMemW(ES,m_regs.w[DI],m_regs.w[AX]);\n\t\t\tm_regs.w[CX]--;\n\t\t\tm_regs.w[DI] += 2 * m_DirVal;\n\t\t}\n\t\tbreak;\n\tcase 0xac:  /* REP LODSB */\n\t\twhile(m_regs.w[CX])\n\t\t{\n\t\t\tm_regs.b[AL] = GetMemB(DS,m_regs.w[SI]);\n\t\t\tm_regs.w[CX]--;\n\t\t\tm_regs.w[SI] += m_DirVal;\n\t\t}\n\t\tbreak;\n\tcase 0xad:  /* REP LODSW */\n\t\twhile(m_regs.w[CX])\n\t\t{\n\t\t\tm_regs.w[AX] = GetMemW(DS,m_regs.w[SI]);\n\t\t\tm_regs.w[CX]--;\n\t\t\tm_regs.w[SI] += 2 * m_DirVal;\n\t\t}\n\t\tbreak;\n\tcase 0xae:  /* REP(N)E SCASB */\n\t\tm_ZeroVal = !flagval;\n\t\twhile(m_regs.w[CX] && (ZF == flagval))\n\t\t{\n\t\t\tunsigned src, dst;\n\n\t\t\tsrc = GetMemB(ES, m_regs.w[DI]);\n\t\t\tdst = m_regs.b[AL];\n\t\t\tSUBB(dst,src);\n\t\t\tm_regs.w[CX]--;\n\t\t\tm_regs.w[DI] += m_DirVal;\n\t\t}\n\t\tbreak;\n\tcase 0xaf:  /* REP(N)E SCASW */\n\t\tm_ZeroVal = !flagval;\n\t\twhile(m_regs.w[CX] && (ZF == flagval))\n\t\t{\n\t\t\tunsigned src, dst;\n\n\t\t\tsrc = GetMemW(ES, m_regs.w[DI]);\n\t\t\tdst = m_regs.w[AX];\n\t\t\tSUBW(dst,src);\n\t\t\tm_regs.w[CX]--;\n\t\t\tm_regs.w[DI] += 2 * m_DirVal;\n\t\t}\n\t\tbreak;\n\tdefault:\n\t\tPREFIX(_instruction)[next]();\n\t}\n}\n\n#ifndef I80186\nstatic void PREFIX86(_add_br8)()    /* Opcode 0x00 */\n{\n\tDEF_br8(dst,src);\n\tADDB(dst,src);\n\tPutbackRMByte(ModRM,dst);\n}\n\nstatic void PREFIX86(_add_wr16)()    /* Opcode 0x01 */\n{\n\tDEF_wr16(dst,src);\n\tADDW(dst,src);\n\tPutbackRMWord(ModRM,dst);\n}\n\nstatic void PREFIX86(_add_r8b)()    /* Opcode 0x02 */\n{\n\tDEF_r8b(dst,src);\n\tADDB(dst,src);\n\tRegByte(ModRM)=dst;\n}\n\nstatic void PREFIX86(_add_r16w)()    /* Opcode 0x03 */\n{\n\tDEF_r16w(dst,src);\n\tADDW(dst,src);\n\tRegWord(ModRM)=dst;\n}\n\n\nstatic void PREFIX86(_add_ald8)()    /* Opcode 0x04 */\n{\n\tDEF_ald8(dst,src);\n\tADDB(dst,src);\n\tm_regs.b[AL]=dst;\n}\n\n\nstatic void PREFIX86(_add_axd16)()    /* Opcode 0x05 */\n{\n\tDEF_axd16(dst,src);\n\tADDW(dst,src);\n\tm_regs.w[AX]=dst;\n}\n\n\nstatic void PREFIX86(_push_es)()    /* Opcode 0x06 */\n{\n\tPUSH(m_sregs[ES]);\n}\n\n\nstatic void PREFIX86(_pop_es)()    /* Opcode 0x07 */\n{\n#ifdef I80286\n\ti80286_pop_seg(ES);\n#else\n\tPOP(m_sregs[ES]);\n\tm_base[ES] = SegBase(ES);\n#endif\n}\n\nstatic void PREFIX86(_or_br8)()    /* Opcode 0x08 */\n{\n\tDEF_br8(dst,src);\n\tORB(dst,src);\n\tPutbackRMByte(ModRM,dst);\n}\n\nstatic void PREFIX86(_or_wr16)()    /* Opcode 0x09 */\n{\n\tDEF_wr16(dst,src);\n\tORW(dst,src);\n\tPutbackRMWord(ModRM,dst);\n}\n\nstatic void PREFIX86(_or_r8b)()    /* Opcode 0x0a */\n{\n\tDEF_r8b(dst,src);\n\tORB(dst,src);\n\tRegByte(ModRM)=dst;\n}\n\nstatic void PREFIX86(_or_r16w)()    /* Opcode 0x0b */\n{\n\tDEF_r16w(dst,src);\n\tORW(dst,src);\n\tRegWord(ModRM)=dst;\n}\n\nstatic void PREFIX86(_or_ald8)()    /* Opcode 0x0c */\n{\n\tDEF_ald8(dst,src);\n\tORB(dst,src);\n\tm_regs.b[AL]=dst;\n}\n\nstatic void PREFIX86(_or_axd16)()    /* Opcode 0x0d */\n{\n\tDEF_axd16(dst,src);\n\tORW(dst,src);\n\tm_regs.w[AX]=dst;\n}\n\nstatic void PREFIX86(_push_cs)()    /* Opcode 0x0e */\n{\n\tPUSH(m_sregs[CS]);\n}\n\n#ifndef I80286\nstatic void PREFIX86(_pop_cs)()    /* Opcode 0x0f */\n{\n\tint ip = m_pc - m_base[CS];\n\tPOP(m_sregs[CS]);\n\tm_base[CS] = SegBase(CS);\n\tm_pc = (ip + m_base[CS]) & AMASK;\n\tCHANGE_PC(m_pc);\n}\n#endif\n\nstatic void PREFIX86(_adc_br8)()    /* Opcode 0x10 */\n{\n\tint tmpcf;\n\tDEF_br8(dst,src);\n\tsrc+=CF;\n\tADCB(dst,src,tmpcf);\n\tPutbackRMByte(ModRM,dst);\n\tm_CarryVal = tmpcf;\n}\n\nstatic void PREFIX86(_adc_wr16)()    /* Opcode 0x11 */\n{\n\tint tmpcf;\n\tDEF_wr16(dst,src);\n\tsrc+=CF;\n\tADCW(dst,src,tmpcf);\n\tPutbackRMWord(ModRM,dst);\n\tm_CarryVal = tmpcf;\n}\n\nstatic void PREFIX86(_adc_r8b)()    /* Opcode 0x12 */\n{\n\tDEF_r8b(dst,src);\n\tsrc+=CF;\n\tADDB(dst,src);\n\tRegByte(ModRM)=dst;\n}\n\nstatic void PREFIX86(_adc_r16w)()    /* Opcode 0x13 */\n{\n\tDEF_r16w(dst,src);\n\tsrc+=CF;\n\tADDW(dst,src);\n\tRegWord(ModRM)=dst;\n}\n\nstatic void PREFIX86(_adc_ald8)()    /* Opcode 0x14 */\n{\n\tDEF_ald8(dst,src);\n\tsrc+=CF;\n\tADDB(dst,src);\n\tm_regs.b[AL] = dst;\n}\n\nstatic void PREFIX86(_adc_axd16)()    /* Opcode 0x15 */\n{\n\tDEF_axd16(dst,src);\n\tsrc+=CF;\n\tADDW(dst,src);\n\tm_regs.w[AX]=dst;\n}\n\nstatic void PREFIX86(_push_ss)()    /* Opcode 0x16 */\n{\n\tPUSH(m_sregs[SS]);\n}\n\nstatic void PREFIX86(_sbb_br8)()    /* Opcode 0x18 */\n{\n\tint tmpcf;\n\tDEF_br8(dst,src);\n\tsrc+=CF;\n\tSBBB(dst,src,tmpcf);\n\tPutbackRMByte(ModRM,dst);\n\tm_CarryVal = tmpcf;\n}\n\nstatic void PREFIX86(_sbb_wr16)()    /* Opcode 0x19 */\n{\n\tint tmpcf;\n\tDEF_wr16(dst,src);\n\tsrc+=CF;\n\tSBBW(dst,src,tmpcf);\n\tPutbackRMWord(ModRM,dst);\n\tm_CarryVal = tmpcf;\n}\n\nstatic void PREFIX86(_sbb_r8b)()    /* Opcode 0x1a */\n{\n\tDEF_r8b(dst,src);\n\tsrc+=CF;\n\tSUBB(dst,src);\n\tRegByte(ModRM)=dst;\n}\n\nstatic void PREFIX86(_sbb_r16w)()    /* Opcode 0x1b */\n{\n\tDEF_r16w(dst,src);\n\tsrc+=CF;\n\tSUBW(dst,src);\n\tRegWord(ModRM)= dst;\n}\n\nstatic void PREFIX86(_sbb_ald8)()    /* Opcode 0x1c */\n{\n\tDEF_ald8(dst,src);\n\tsrc+=CF;\n\tSUBB(dst,src);\n\tm_regs.b[AL] = dst;\n}\n\nstatic void PREFIX86(_sbb_axd16)()    /* Opcode 0x1d */\n{\n\tDEF_axd16(dst,src);\n\tsrc+=CF;\n\tSUBW(dst,src);\n\tm_regs.w[AX]=dst;\n}\n\nstatic void PREFIX86(_push_ds)()    /* Opcode 0x1e */\n{\n\tPUSH(m_sregs[DS]);\n}\n\nstatic void PREFIX86(_pop_ds)()    /* Opcode 0x1f */\n{\n#ifdef I80286\n\ti80286_pop_seg(DS);\n#else\n\tPOP(m_sregs[DS]);\n\tm_base[DS] = SegBase(DS);\n#endif\n}\n\nstatic void PREFIX86(_and_br8)()    /* Opcode 0x20 */\n{\n\tDEF_br8(dst,src);\n\tANDB(dst,src);\n\tPutbackRMByte(ModRM,dst);\n}\n\nstatic void PREFIX86(_and_wr16)()    /* Opcode 0x21 */\n{\n\tDEF_wr16(dst,src);\n\tANDW(dst,src);\n\tPutbackRMWord(ModRM,dst);\n}\n\nstatic void PREFIX86(_and_r8b)()    /* Opcode 0x22 */\n{\n\tDEF_r8b(dst,src);\n\tANDB(dst,src);\n\tRegByte(ModRM)=dst;\n}\n\nstatic void PREFIX86(_and_r16w)()    /* Opcode 0x23 */\n{\n\tDEF_r16w(dst,src);\n\tANDW(dst,src);\n\tRegWord(ModRM)=dst;\n}\n\nstatic void PREFIX86(_and_ald8)()    /* Opcode 0x24 */\n{\n\tDEF_ald8(dst,src);\n\tANDB(dst,src);\n\tm_regs.b[AL] = dst;\n}\n\nstatic void PREFIX86(_and_axd16)()    /* Opcode 0x25 */\n{\n\tDEF_axd16(dst,src);\n\tANDW(dst,src);\n\tm_regs.w[AX]=dst;\n}\n\nstatic void PREFIX86(_daa)()    /* Opcode 0x27 */\n{\n\tif (AF || ((m_regs.b[AL] & 0xf) > 9))\n\t{\n\t\tint tmp;\n\t\tm_regs.b[AL] = tmp = m_regs.b[AL] + 6;\n\t\tm_AuxVal = 1;\n\t\tm_CarryVal |= tmp & 0x100;\n\t}\n\n\tif (CF || (m_regs.b[AL] > 0x9f))\n\t{\n\t\tm_regs.b[AL] += 0x60;\n\t\tm_CarryVal = 1;\n\t}\n\n\tSetSZPF_Byte(m_regs.b[AL]);\n}\n\nstatic void PREFIX86(_sub_br8)()    /* Opcode 0x28 */\n{\n\tDEF_br8(dst,src);\n\tSUBB(dst,src);\n\tPutbackRMByte(ModRM,dst);\n}\n\nstatic void PREFIX86(_sub_wr16)()    /* Opcode 0x29 */\n{\n\tDEF_wr16(dst,src);\n\tSUBW(dst,src);\n\tPutbackRMWord(ModRM,dst);\n}\n\nstatic void PREFIX86(_sub_r8b)()    /* Opcode 0x2a */\n{\n\tDEF_r8b(dst,src);\n\tSUBB(dst,src);\n\tRegByte(ModRM)=dst;\n}\n\nstatic void PREFIX86(_sub_r16w)()    /* Opcode 0x2b */\n{\n\tDEF_r16w(dst,src);\n\tSUBW(dst,src);\n\tRegWord(ModRM)=dst;\n}\n\nstatic void PREFIX86(_sub_ald8)()    /* Opcode 0x2c */\n{\n\tDEF_ald8(dst,src);\n\tSUBB(dst,src);\n\tm_regs.b[AL] = dst;\n}\n\nstatic void PREFIX86(_sub_axd16)()    /* Opcode 0x2d */\n{\n\tDEF_axd16(dst,src);\n\tSUBW(dst,src);\n\tm_regs.w[AX]=dst;\n}\n\nstatic void PREFIX86(_das)()    /* Opcode 0x2f */\n{\n\tUINT8 tmpAL=m_regs.b[AL];\n\tif (AF || ((m_regs.b[AL] & 0xf) > 9))\n\t{\n\t\tint tmp;\n\t\tm_regs.b[AL] = tmp = m_regs.b[AL] - 6;\n\t\tm_AuxVal = 1;\n\t\tm_CarryVal |= tmp & 0x100;\n\t}\n\n\tif (CF || (tmpAL > 0x9f))\n\t{\n\t\tm_regs.b[AL] -= 0x60;\n\t\tm_CarryVal = 1;\n\t}\n\n\tSetSZPF_Byte(m_regs.b[AL]);\n}\n\nstatic void PREFIX86(_xor_br8)()    /* Opcode 0x30 */\n{\n\tDEF_br8(dst,src);\n\tXORB(dst,src);\n\tPutbackRMByte(ModRM,dst);\n}\n\nstatic void PREFIX86(_xor_wr16)()    /* Opcode 0x31 */\n{\n\tDEF_wr16(dst,src);\n\tXORW(dst,src);\n\tPutbackRMWord(ModRM,dst);\n}\n\nstatic void PREFIX86(_xor_r8b)()    /* Opcode 0x32 */\n{\n\tDEF_r8b(dst,src);\n\tXORB(dst,src);\n\tRegByte(ModRM)=dst;\n}\n\nstatic void PREFIX86(_xor_r16w)()    /* Opcode 0x33 */\n{\n\tDEF_r16w(dst,src);\n\tXORW(dst,src);\n\tRegWord(ModRM)=dst;\n}\n\nstatic void PREFIX86(_xor_ald8)()    /* Opcode 0x34 */\n{\n\tDEF_ald8(dst,src);\n\tXORB(dst,src);\n\tm_regs.b[AL] = dst;\n}\n\nstatic void PREFIX86(_xor_axd16)()    /* Opcode 0x35 */\n{\n\tDEF_axd16(dst,src);\n\tXORW(dst,src);\n\tm_regs.w[AX]=dst;\n}\n\nstatic void PREFIX86(_aaa)()    /* Opcode 0x37 */\n{\n\tUINT8 ALcarry=1;\n\tif (m_regs.b[AL]>0xf9) ALcarry=2;\n\n\tif (AF || ((m_regs.b[AL] & 0xf) > 9))\n\t{\n\t\tm_regs.b[AL] += 6;\n\t\tm_regs.b[AH] += ALcarry;\n\t\tm_AuxVal = 1;\n\t\tm_CarryVal = 1;\n\t}\n\telse\n\t{\n\t\tm_AuxVal = 0;\n\t\tm_CarryVal = 0;\n\t}\n\tm_regs.b[AL] &= 0x0F;\n}\n\nstatic void PREFIX86(_cmp_br8)()    /* Opcode 0x38 */\n{\n\tDEF_br8(dst,src);\n\tSUBB(dst,src);\n}\n\nstatic void PREFIX86(_cmp_wr16)()    /* Opcode 0x39 */\n{\n\tDEF_wr16(dst,src);\n\tSUBW(dst,src);\n}\n\nstatic void PREFIX86(_cmp_r8b)()    /* Opcode 0x3a */\n{\n\tDEF_r8b(dst,src);\n\tSUBB(dst,src);\n}\n\nstatic void PREFIX86(_cmp_r16w)()    /* Opcode 0x3b */\n{\n\tDEF_r16w(dst,src);\n\tSUBW(dst,src);\n}\n\nstatic void PREFIX86(_cmp_ald8)()    /* Opcode 0x3c */\n{\n\tDEF_ald8(dst,src);\n\tSUBB(dst,src);\n}\n\nstatic void PREFIX86(_cmp_axd16)()    /* Opcode 0x3d */\n{\n\tDEF_axd16(dst,src);\n\tSUBW(dst,src);\n}\n\nstatic void PREFIX86(_aas)()    /* Opcode 0x3f */\n{\n//  UINT8 ALcarry=1;\n//  if (m_regs.b[AL]>0xf9) ALcarry=2;\n\n\tif (AF || ((m_regs.b[AL] & 0xf) > 9))\n\t{\n\t\tm_regs.b[AL] -= 6;\n\t\tm_regs.b[AH] -= 1;\n\t\tm_AuxVal = 1;\n\t\tm_CarryVal = 1;\n\t}\n\telse\n\t{\n\t\tm_AuxVal = 0;\n\t\tm_CarryVal = 0;\n\t}\n\tm_regs.b[AL] &= 0x0F;\n}\n\n#define IncWordReg(Reg)                     \\\n{                                           \\\n\tunsigned tmp = (unsigned)m_regs.w[Reg]; \\\n\tunsigned tmp1 = tmp+1;                  \\\n\tSetOFW_Add(tmp1,tmp,1);                 \\\n\tSetAF(tmp1,tmp,1);                      \\\n\tSetSZPF_Word(tmp1);                     \\\n\tm_regs.w[Reg]=tmp1;                     \\\n}\n\nstatic void PREFIX86(_inc_ax)()    /* Opcode 0x40 */\n{\n\tIncWordReg(AX);\n}\n\nstatic void PREFIX86(_inc_cx)()    /* Opcode 0x41 */\n{\n\tIncWordReg(CX);\n}\n\nstatic void PREFIX86(_inc_dx)()    /* Opcode 0x42 */\n{\n\tIncWordReg(DX);\n}\n\nstatic void PREFIX(_inc_bx)()    /* Opcode 0x43 */\n{\n\tIncWordReg(BX);\n}\n\nstatic void PREFIX86(_inc_sp)()    /* Opcode 0x44 */\n{\n\tIncWordReg(SP);\n}\n\nstatic void PREFIX86(_inc_bp)()    /* Opcode 0x45 */\n{\n\tIncWordReg(BP);\n}\n\nstatic void PREFIX86(_inc_si)()    /* Opcode 0x46 */\n{\n\tIncWordReg(SI);\n}\n\nstatic void PREFIX86(_inc_di)()    /* Opcode 0x47 */\n{\n\tIncWordReg(DI);\n}\n\n#define DecWordReg(Reg)                     \\\n{                                           \\\n\tunsigned tmp = (unsigned)m_regs.w[Reg]; \\\n\tunsigned tmp1 = tmp-1;                  \\\n\tSetOFW_Sub(tmp1,1,tmp);                 \\\n\tSetAF(tmp1,tmp,1);                      \\\n\tSetSZPF_Word(tmp1);                     \\\n\tm_regs.w[Reg]=tmp1;                     \\\n}\n\nstatic void PREFIX86(_dec_ax)()    /* Opcode 0x48 */\n{\n\tDecWordReg(AX);\n}\n\nstatic void PREFIX86(_dec_cx)()    /* Opcode 0x49 */\n{\n\tDecWordReg(CX);\n}\n\nstatic void PREFIX86(_dec_dx)()    /* Opcode 0x4a */\n{\n\tDecWordReg(DX);\n}\n\nstatic void PREFIX86(_dec_bx)()    /* Opcode 0x4b */\n{\n\tDecWordReg(BX);\n}\n\nstatic void PREFIX86(_dec_sp)()    /* Opcode 0x4c */\n{\n\tDecWordReg(SP);\n}\n\nstatic void PREFIX86(_dec_bp)()    /* Opcode 0x4d */\n{\n\tDecWordReg(BP);\n}\n\nstatic void PREFIX86(_dec_si)()    /* Opcode 0x4e */\n{\n\tDecWordReg(SI);\n}\n\nstatic void PREFIX86(_dec_di)()    /* Opcode 0x4f */\n{\n\tDecWordReg(DI);\n}\n\nstatic void PREFIX86(_push_ax)()    /* Opcode 0x50 */\n{\n\tPUSH(m_regs.w[AX]);\n}\n\nstatic void PREFIX86(_push_cx)()    /* Opcode 0x51 */\n{\n\tPUSH(m_regs.w[CX]);\n}\n\nstatic void PREFIX86(_push_dx)()    /* Opcode 0x52 */\n{\n\tPUSH(m_regs.w[DX]);\n}\n\nstatic void PREFIX86(_push_bx)()    /* Opcode 0x53 */\n{\n\tPUSH(m_regs.w[BX]);\n}\n\nstatic void PREFIX86(_push_sp)()    /* Opcode 0x54 */\n{\n#ifdef I80286\n\tPUSH(m_regs.w[SP]+2);\n#else\n\tPUSH(m_regs.w[SP]);\n#endif\n}\n\nstatic void PREFIX86(_push_bp)()    /* Opcode 0x55 */\n{\n\tPUSH(m_regs.w[BP]);\n}\n\n\nstatic void PREFIX86(_push_si)()    /* Opcode 0x56 */\n{\n\tPUSH(m_regs.w[SI]);\n}\n\nstatic void PREFIX86(_push_di)()    /* Opcode 0x57 */\n{\n\tPUSH(m_regs.w[DI]);\n}\n\nstatic void PREFIX86(_pop_ax)()    /* Opcode 0x58 */\n{\n\tPOP(m_regs.w[AX]);\n}\n\nstatic void PREFIX86(_pop_cx)()    /* Opcode 0x59 */\n{\n\tPOP(m_regs.w[CX]);\n}\n\nstatic void PREFIX86(_pop_dx)()    /* Opcode 0x5a */\n{\n\tPOP(m_regs.w[DX]);\n}\n\nstatic void PREFIX86(_pop_bx)()    /* Opcode 0x5b */\n{\n\tPOP(m_regs.w[BX]);\n}\n\nstatic void PREFIX86(_pop_sp)()    /* Opcode 0x5c */\n{\n\tPOP(m_regs.w[SP]);\n}\n\nstatic void PREFIX86(_pop_bp)()    /* Opcode 0x5d */\n{\n\tPOP(m_regs.w[BP]);\n}\n\nstatic void PREFIX86(_pop_si)()    /* Opcode 0x5e */\n{\n\tPOP(m_regs.w[SI]);\n}\n\nstatic void PREFIX86(_pop_di)()    /* Opcode 0x5f */\n{\n\tPOP(m_regs.w[DI]);\n}\n\nstatic void PREFIX86(_jo)()    /* Opcode 0x70 */\n{\n\tint tmp = (int)((INT8)FETCH);\n\tif (OF)\n\t{\n\t\tm_pc += tmp;\n/* ASG - can probably assume this is safe\n        CHANGE_PC(m_pc);*/\n\t}\n}\n\nstatic void PREFIX86(_jno)()    /* Opcode 0x71 */\n{\n\tint tmp = (int)((INT8)FETCH);\n\tif (!OF) {\n\t\tm_pc += tmp;\n/* ASG - can probably assume this is safe\n        CHANGE_PC(m_pc);*/\n\t}\n}\n\nstatic void PREFIX86(_jb)()    /* Opcode 0x72 */\n{\n\tint tmp = (int)((INT8)FETCH);\n\tif (CF) {\n\t\tm_pc += tmp;\n/* ASG - can probably assume this is safe\n        CHANGE_PC(m_pc);*/\n\t}\n}\n\nstatic void PREFIX86(_jnb)()    /* Opcode 0x73 */\n{\n\tint tmp = (int)((INT8)FETCH);\n\tif (!CF) {\n\t\tm_pc += tmp;\n/* ASG - can probably assume this is safe\n        CHANGE_PC(m_pc);*/\n\t}\n}\n\nstatic void PREFIX86(_jz)()    /* Opcode 0x74 */\n{\n\tint tmp = (int)((INT8)FETCH);\n\tif (ZF) {\n\t\tm_pc += tmp;\n/* ASG - can probably assume this is safe\n        CHANGE_PC(m_pc);*/\n\t}\n}\n\nstatic void PREFIX86(_jnz)()    /* Opcode 0x75 */\n{\n\tint tmp = (int)((INT8)FETCH);\n\tif (!ZF) {\n\t\tm_pc += tmp;\n/* ASG - can probably assume this is safe\n        CHANGE_PC(m_pc);*/\n\t}\n}\n\nstatic void PREFIX86(_jbe)()    /* Opcode 0x76 */\n{\n\tint tmp = (int)((INT8)FETCH);\n\tif (CF || ZF) {\n\t\tm_pc += tmp;\n/* ASG - can probably assume this is safe\n        CHANGE_PC(m_pc);*/\n\t}\n}\n\nstatic void PREFIX86(_jnbe)()    /* Opcode 0x77 */\n{\n\tint tmp = (int)((INT8)FETCH);\n\tif (!(CF || ZF)) {\n\t\tm_pc += tmp;\n/* ASG - can probably assume this is safe\n        CHANGE_PC(m_pc);*/\n\t}\n}\n\nstatic void PREFIX86(_js)()    /* Opcode 0x78 */\n{\n\tint tmp = (int)((INT8)FETCH);\n\tif (SF) {\n\t\tm_pc += tmp;\n/* ASG - can probably assume this is safe\n        CHANGE_PC(m_pc);*/\n\t}\n}\n\nstatic void PREFIX86(_jns)()    /* Opcode 0x79 */\n{\n\tint tmp = (int)((INT8)FETCH);\n\tif (!SF) {\n\t\tm_pc += tmp;\n/* ASG - can probably assume this is safe\n        CHANGE_PC(m_pc);*/\n\t}\n}\n\nstatic void PREFIX86(_jp)()    /* Opcode 0x7a */\n{\n\tint tmp = (int)((INT8)FETCH);\n\tif (PF) {\n\t\tm_pc += tmp;\n/* ASG - can probably assume this is safe\n        CHANGE_PC(m_pc);*/\n\t}\n}\n\nstatic void PREFIX86(_jnp)()    /* Opcode 0x7b */\n{\n\tint tmp = (int)((INT8)FETCH);\n\tif (!PF) {\n\t\tm_pc += tmp;\n/* ASG - can probably assume this is safe\n        CHANGE_PC(m_pc);*/\n\t}\n}\n\nstatic void PREFIX86(_jl)()    /* Opcode 0x7c */\n{\n\tint tmp = (int)((INT8)FETCH);\n\tif ((SF!=OF)&&!ZF) {\n\t\tm_pc += tmp;\n/* ASG - can probably assume this is safe\n        CHANGE_PC(m_pc);*/\n\t}\n}\n\nstatic void PREFIX86(_jnl)()    /* Opcode 0x7d */\n{\n\tint tmp = (int)((INT8)FETCH);\n\tif (ZF||(SF==OF)) {\n\t\tm_pc += tmp;\n/* ASG - can probably assume this is safe\n        CHANGE_PC(m_pc);*/\n\t}\n}\n\nstatic void PREFIX86(_jle)()    /* Opcode 0x7e */\n{\n\tint tmp = (int)((INT8)FETCH);\n\tif (ZF||(SF!=OF)) {\n\t\tm_pc += tmp;\n/* ASG - can probably assume this is safe\n        CHANGE_PC(m_pc);*/\n\t}\n}\n\nstatic void PREFIX86(_jnle)()    /* Opcode 0x7f */\n{\n\tint tmp = (int)((INT8)FETCH);\n\tif ((SF==OF)&&!ZF) {\n\t\tm_pc += tmp;\n/* ASG - can probably assume this is safe\n        CHANGE_PC(m_pc);*/\n\t}\n}\n\nstatic void PREFIX86(_80pre)()    /* Opcode 0x80 */\n{\n\tunsigned ModRM = FETCHOP;\n\tunsigned dst = GetRMByte(ModRM);\n\tunsigned src = FETCH;\n\tint tmpcf;\n\n\tswitch (ModRM & 0x38)\n\t{\n\tcase 0x00:  /* ADD eb,d8 */\n\t\tADDB(dst,src);\n\t\tPutbackRMByte(ModRM,dst);\n\t\tbreak;\n\tcase 0x08:  /* OR eb,d8 */\n\t\tORB(dst,src);\n\t\tPutbackRMByte(ModRM,dst);\n\t\tbreak;\n\tcase 0x10:  /* ADC eb,d8 */\n\t\tsrc+=CF;\n\t\tADCB(dst,src,tmpcf);\n\t\tPutbackRMByte(ModRM,dst);\n\t\tm_CarryVal = tmpcf;\n\t\tbreak;\n\tcase 0x18:  /* SBB eb,b8 */\n\t\tsrc+=CF;\n\t\tSBBB(dst,src,tmpcf);\n\t\tPutbackRMByte(ModRM,dst);\n\t\tm_CarryVal = tmpcf;\n\t\tbreak;\n\tcase 0x20:  /* AND eb,d8 */\n\t\tANDB(dst,src);\n\t\tPutbackRMByte(ModRM,dst);\n\t\tbreak;\n\tcase 0x28:  /* SUB eb,d8 */\n\t\tSUBB(dst,src);\n\t\tPutbackRMByte(ModRM,dst);\n\t\tbreak;\n\tcase 0x30:  /* XOR eb,d8 */\n\t\tXORB(dst,src);\n\t\tPutbackRMByte(ModRM,dst);\n\t\tbreak;\n\tcase 0x38:  /* CMP eb,d8 */\n\t\tSUBB(dst,src);\n\t\tbreak;\n\t}\n}\n\n\nstatic void PREFIX86(_81pre)()    /* Opcode 0x81 */\n{\n\tunsigned ModRM = FETCH;\n\tunsigned dst = GetRMWord(ModRM);\n\tunsigned src = FETCH;\n\tint tmpcf;\n\tsrc+= (FETCH << 8);\n\n\tswitch (ModRM & 0x38)\n\t{\n\tcase 0x00:  /* ADD ew,d16 */\n\t\tADDW(dst,src);\n\t\tPutbackRMWord(ModRM,dst);\n\t\tbreak;\n\tcase 0x08:  /* OR ew,d16 */\n\t\tORW(dst,src);\n\t\tPutbackRMWord(ModRM,dst);\n\t\tbreak;\n\tcase 0x10:  /* ADC ew,d16 */\n\t\tsrc+=CF;\n\t\tADCW(dst,src,tmpcf);\n\t\tPutbackRMWord(ModRM,dst);\n\t\tm_CarryVal = tmpcf;\n\t\tbreak;\n\tcase 0x18:  /* SBB ew,d16 */\n\t\tsrc+=CF;\n\t\tSBBW(dst,src,tmpcf);\n\t\tPutbackRMWord(ModRM,dst);\n\t\tm_CarryVal = tmpcf;\n\t\tbreak;\n\tcase 0x20:  /* AND ew,d16 */\n\t\tANDW(dst,src);\n\t\tPutbackRMWord(ModRM,dst);\n\t\tbreak;\n\tcase 0x28:  /* SUB ew,d16 */\n\t\tSUBW(dst,src);\n\t\tPutbackRMWord(ModRM,dst);\n\t\tbreak;\n\tcase 0x30:  /* XOR ew,d16 */\n\t\tXORW(dst,src);\n\t\tPutbackRMWord(ModRM,dst);\n\t\tbreak;\n\tcase 0x38:  /* CMP ew,d16 */\n\t\tSUBW(dst,src);\n\t\tbreak;\n\t}\n}\n\nstatic void PREFIX86(_82pre)()  /* Opcode 0x82 */\n{\n\tunsigned ModRM = FETCH;\n\tunsigned dst = GetRMByte(ModRM);\n\tunsigned src = FETCH;\n\tint tmpcf;\n\n\tswitch (ModRM & 0x38)\n\t{\n\tcase 0x00:  /* ADD eb,d8 */\n\t\tADDB(dst,src);\n\t\tPutbackRMByte(ModRM,dst);\n\t\tbreak;\n\tcase 0x08:  /* OR eb,d8 */\n\t\tORB(dst,src);\n\t\tPutbackRMByte(ModRM,dst);\n\t\tbreak;\n\tcase 0x10:  /* ADC eb,d8 */\n\t\tsrc+=CF;\n\t\tADCB(dst,src,tmpcf);\n\t\tPutbackRMByte(ModRM,dst);\n\t\tm_CarryVal = tmpcf;\n\t\tbreak;\n\tcase 0x18:  /* SBB eb,d8 */\n\t\tsrc+=CF;\n\t\tSBBB(dst,src,tmpcf);\n\t\tPutbackRMByte(ModRM,dst);\n\t\tm_CarryVal = tmpcf;\n\t\tbreak;\n\tcase 0x20:  /* AND eb,d8 */\n\t\tANDB(dst,src);\n\t\tPutbackRMByte(ModRM,dst);\n\t\tbreak;\n\tcase 0x28:  /* SUB eb,d8 */\n\t\tSUBB(dst,src);\n\t\tPutbackRMByte(ModRM,dst);\n\t\tbreak;\n\tcase 0x30:  /* XOR eb,d8 */\n\t\tXORB(dst,src);\n\t\tPutbackRMByte(ModRM,dst);\n\t\tbreak;\n\tcase 0x38:  /* CMP eb,d8 */\n\t\tSUBB(dst,src);\n\t\tbreak;\n\t}\n}\n\nstatic void PREFIX86(_83pre)()    /* Opcode 0x83 */\n{\n\tunsigned ModRM = FETCH;\n\tunsigned dst = GetRMWord(ModRM);\n\tunsigned src = (WORD)((INT16)((INT8)FETCH));\n\tint tmpcf;\n\n\tswitch (ModRM & 0x38)\n\t{\n\tcase 0x00:  /* ADD ew,d16 */\n\t\tADDW(dst,src);\n\t\tPutbackRMWord(ModRM,dst);\n\t\tbreak;\n\tcase 0x08:  /* OR ew,d16 */\n\t\tORW(dst,src);\n\t\tPutbackRMWord(ModRM,dst);\n\t\tbreak;\n\tcase 0x10:  /* ADC ew,d16 */\n\t\tsrc+=CF;\n\t\tADCW(dst,src,tmpcf);\n\t\tPutbackRMWord(ModRM,dst);\n\t\tm_CarryVal = tmpcf;\n\t\tbreak;\n\tcase 0x18:  /* SBB ew,d16 */\n\t\tsrc+=CF;\n\t\tSBBW(dst,src,tmpcf);\n\t\tPutbackRMWord(ModRM,dst);\n\t\tm_CarryVal = tmpcf;\n\t\tbreak;\n\tcase 0x20:  /* AND ew,d16 */\n\t\tANDW(dst,src);\n\t\tPutbackRMWord(ModRM,dst);\n\t\tbreak;\n\tcase 0x28:  /* SUB ew,d16 */\n\t\tSUBW(dst,src);\n\t\tPutbackRMWord(ModRM,dst);\n\t\tbreak;\n\tcase 0x30:  /* XOR ew,d16 */\n\t\tXORW(dst,src);\n\t\tPutbackRMWord(ModRM,dst);\n\t\tbreak;\n\tcase 0x38:  /* CMP ew,d16 */\n\t\tSUBW(dst,src);\n\t\tbreak;\n\t}\n}\n\nstatic void PREFIX86(_test_br8)()    /* Opcode 0x84 */\n{\n\tDEF_br8(dst,src);\n\tANDB(dst,src);\n}\n\nstatic void PREFIX86(_test_wr16)()    /* Opcode 0x85 */\n{\n\tDEF_wr16(dst,src);\n\tANDW(dst,src);\n}\n\nstatic void PREFIX86(_xchg_br8)()    /* Opcode 0x86 */\n{\n\tDEF_br8(dst,src);\n\tPutbackRMByte(ModRM,src);\n\tRegByte(ModRM)=dst;\n}\n\nstatic void PREFIX86(_xchg_wr16)()    /* Opcode 0x87 */\n{\n\tDEF_wr16(dst,src);\n\tPutbackRMWord(ModRM,src);\n\tRegWord(ModRM)=dst;\n}\n\nstatic void PREFIX86(_mov_br8)()    /* Opcode 0x88 */\n{\n\tunsigned ModRM = FETCH;\n\tBYTE src = RegByte(ModRM);\n\tPutRMByte(ModRM,src);\n}\n\nstatic void PREFIX86(_mov_wr16)()    /* Opcode 0x89 */\n{\n\tunsigned ModRM = FETCH;\n\tWORD src = RegWord(ModRM);\n\tPutRMWord(ModRM,src);\n}\n\nstatic void PREFIX86(_mov_r8b)()    /* Opcode 0x8a */\n{\n\tunsigned ModRM = FETCH;\n\tBYTE src = GetRMByte(ModRM);\n\tRegByte(ModRM)=src;\n}\n\nstatic void PREFIX86(_mov_r16w)()    /* Opcode 0x8b */\n{\n\tunsigned ModRM = FETCH;\n\tWORD src = GetRMWord(ModRM);\n\tRegWord(ModRM)=src;\n}\n\nstatic void PREFIX86(_mov_wsreg)()    /* Opcode 0x8c */\n{\n\tunsigned ModRM = FETCH;\n\tif (ModRM & 0x20) { /* HJB 12/13/98 1xx is invalid */\n\t\tm_pc = m_prevpc;\n\t\treturn PREFIX86(_invalid)();\n\t}\n\n\tPutRMWord(ModRM,m_sregs[(ModRM & 0x38) >> 3]);\n}\n\nstatic void PREFIX86(_lea)()    /* Opcode 0x8d */\n{\n\tunsigned ModRM = FETCH;\n\t(void)(*GetEA[ModRM])();\n\tRegWord(ModRM)=m_eo;    /* HJB 12/13/98 effective offset (no segment part) */\n}\n\nstatic void PREFIX86(_popw)()    /* Opcode 0x8f */\n{\n\tunsigned ModRM = FETCH;\n\t\tWORD tmp;\n\ttmp = ReadWord(m_base[SS] + m_regs.w[SP]);\n\tPutRMWord(ModRM,tmp);\n\tm_regs.w[SP] += 2;\n}\n\n\n#define XchgAXReg(Reg)              \\\n{                                   \\\n\tWORD tmp;                       \\\n\ttmp = m_regs.w[Reg];            \\\n\tm_regs.w[Reg] = m_regs.w[AX];   \\\n\tm_regs.w[AX] = tmp;             \\\n}\n\n\nstatic void PREFIX86(_nop)()    /* Opcode 0x90 */\n{\n\t/* this is XchgAXReg(AX); */\n}\n\nstatic void PREFIX86(_xchg_axcx)()    /* Opcode 0x91 */\n{\n\tXchgAXReg(CX);\n}\n\nstatic void PREFIX86(_xchg_axdx)()    /* Opcode 0x92 */\n{\n\tXchgAXReg(DX);\n}\n\nstatic void PREFIX86(_xchg_axbx)()    /* Opcode 0x93 */\n{\n\tXchgAXReg(BX);\n}\n\nstatic void PREFIX86(_xchg_axsp)()    /* Opcode 0x94 */\n{\n\tXchgAXReg(SP);\n}\n\nstatic void PREFIX86(_xchg_axbp)()    /* Opcode 0x95 */\n{\n\tXchgAXReg(BP);\n}\n\nstatic void PREFIX86(_xchg_axsi)()    /* Opcode 0x96 */\n{\n\tXchgAXReg(SI);\n}\n\nstatic void PREFIX86(_xchg_axdi)()    /* Opcode 0x97 */\n{\n\tXchgAXReg(DI);\n}\n\nstatic void PREFIX86(_cbw)()    /* Opcode 0x98 */\n{\n\tm_regs.b[AH] = (m_regs.b[AL] & 0x80) ? 0xff : 0;\n}\n\nstatic void PREFIX86(_cwd)()    /* Opcode 0x99 */\n{\n\tm_regs.w[DX] = (m_regs.b[AH] & 0x80) ? 0xffff : 0;\n}\n\nstatic void PREFIX86(_call_far)()\n{\n\tunsigned int tmp, tmp2;\n\tWORD cs, ip;\n\n\ttmp = FETCH;\n\ttmp += FETCH << 8;\n\n\ttmp2 = FETCH;\n\ttmp2 += FETCH << 8;\n\n\tip = m_pc - m_base[CS];\n\tcs = m_sregs[CS];\n\n#ifdef I80286\n\ti80286_code_descriptor(tmp2, tmp, 2);\n#else\n\tm_sregs[CS] = (WORD)tmp2;\n\tm_base[CS] = SegBase(CS);\n\tm_pc = (m_base[CS] + (WORD)tmp) & AMASK;\n#endif\n\tPUSH(cs);\n\tPUSH(ip);\n\tCHANGE_PC(m_pc);\n}\n\nstatic void PREFIX86(_wait)()    /* Opcode 0x9b */\n{\n#ifdef I80286\n\tif ((m_msw&0x0a) == 0x0a) throw TRAP(FPU_UNAVAILABLE,-1);\n#endif\n\tif (m_test_state)\n\t{\n\t\tm_pc--;\n\t}\n}\n\nstatic void PREFIX86(_pushf)()    /* Opcode 0x9c */\n{\n\tunsigned tmp;\n\n\ttmp = CompressFlags();\n#ifdef I80286\n\tif(!PM) ( tmp &= ~0xf000 );\n#endif\n\tPUSH( tmp );\n}\n\n#ifndef I80286\nstatic void PREFIX86(_popf)()    /* Opcode 0x9d */\n{\n\tunsigned tmp;\n\tPOP(tmp);\n\n\tExpandFlags(tmp);\n\tm_flags = tmp;\n\tm_flags = CompressFlags();\n\n\tif (m_TF) PREFIX(_trap)();\n\n\t/* if the IF is set, and an interrupt is pending, signal an interrupt */\n\tif (m_IF && m_irq_state)\n\t{\n\t\tPREFIX(_interrupt)((UINT32)-1);\n\t\tm_irq_state = CLEAR_LINE;\n\t}\n}\n#endif\n\nstatic void PREFIX86(_sahf)()    /* Opcode 0x9e */\n{\n\tunsigned tmp = (CompressFlags() & 0xff00) | (m_regs.b[AH] & 0xd5);\n\tExpandFlags(tmp);\n}\n\nstatic void PREFIX86(_lahf)()    /* Opcode 0x9f */\n{\n\tm_regs.b[AH] = CompressFlags() & 0xff;\n}\n\n\nstatic void PREFIX86(_mov_aldisp)()    /* Opcode 0xa0 */\n{\n\tunsigned addr;\n\n\taddr = FETCH;\n\taddr += FETCH << 8;\n\n\tm_regs.b[AL] = GetMemB(DS, addr);\n}\n\nstatic void PREFIX86(_mov_axdisp)()    /* Opcode 0xa1 */\n{\n\tunsigned addr;\n\n\taddr = FETCH;\n\taddr += FETCH << 8;\n\n\tm_regs.w[AX] = GetMemW(DS, addr);\n}\n\nstatic void PREFIX86(_mov_dispal)()    /* Opcode 0xa2 */\n{\n\tunsigned addr;\n\n\taddr = FETCH;\n\taddr += FETCH << 8;\n\n\tPutMemB(DS, addr, m_regs.b[AL]);\n}\n\nstatic void PREFIX86(_mov_dispax)()    /* Opcode 0xa3 */\n{\n\tunsigned addr;\n\n\taddr = FETCH;\n\taddr += FETCH << 8;\n\n\tPutMemW(DS, addr, m_regs.w[AX]);\n}\n\nstatic void PREFIX86(_movsb)()    /* Opcode 0xa4 */\n{\n\tBYTE tmp = GetMemB(DS,m_regs.w[SI]);\n\tPutMemB(ES,m_regs.w[DI], tmp);\n\tm_regs.w[DI] += m_DirVal;\n\tm_regs.w[SI] += m_DirVal;\n}\n\nstatic void PREFIX86(_movsw)()    /* Opcode 0xa5 */\n{\n\tWORD tmp = GetMemW(DS,m_regs.w[SI]);\n\tPutMemW(ES,m_regs.w[DI], tmp);\n\tm_regs.w[DI] += 2 * m_DirVal;\n\tm_regs.w[SI] += 2 * m_DirVal;\n}\n\nstatic void PREFIX86(_cmpsb)()    /* Opcode 0xa6 */\n{\n\tunsigned dst = GetMemB(ES, m_regs.w[DI]);\n\tunsigned src = GetMemB(DS, m_regs.w[SI]);\n\tSUBB(src,dst); /* opposite of the usual convention */\n\tm_regs.w[DI] += m_DirVal;\n\tm_regs.w[SI] += m_DirVal;\n}\n\nstatic void PREFIX86(_cmpsw)()    /* Opcode 0xa7 */\n{\n\tunsigned dst = GetMemW(ES, m_regs.w[DI]);\n\tunsigned src = GetMemW(DS, m_regs.w[SI]);\n\tSUBW(src,dst); /* opposite of the usual convention */\n\tm_regs.w[DI] += 2 * m_DirVal;\n\tm_regs.w[SI] += 2 * m_DirVal;\n}\n\nstatic void PREFIX86(_test_ald8)()    /* Opcode 0xa8 */\n{\n\tDEF_ald8(dst,src);\n\tANDB(dst,src);\n}\n\nstatic void PREFIX86(_test_axd16)()    /* Opcode 0xa9 */\n{\n\tDEF_axd16(dst,src);\n\tANDW(dst,src);\n}\n\nstatic void PREFIX86(_stosb)()    /* Opcode 0xaa */\n{\n\tPutMemB(ES,m_regs.w[DI],m_regs.b[AL]);\n\tm_regs.w[DI] += m_DirVal;\n}\n\nstatic void PREFIX86(_stosw)()    /* Opcode 0xab */\n{\n\tPutMemW(ES,m_regs.w[DI],m_regs.w[AX]);\n\tm_regs.w[DI] += 2 * m_DirVal;\n}\n\nstatic void PREFIX86(_lodsb)()    /* Opcode 0xac */\n{\n\tm_regs.b[AL] = GetMemB(DS,m_regs.w[SI]);\n\tm_regs.w[SI] += m_DirVal;\n}\n\nstatic void PREFIX86(_lodsw)()    /* Opcode 0xad */\n{\n\tm_regs.w[AX] = GetMemW(DS,m_regs.w[SI]);\n\tm_regs.w[SI] += 2 * m_DirVal;\n}\n\nstatic void PREFIX86(_scasb)()    /* Opcode 0xae */\n{\n\tunsigned src = GetMemB(ES, m_regs.w[DI]);\n\tunsigned dst = m_regs.b[AL];\n\tSUBB(dst,src);\n\tm_regs.w[DI] += m_DirVal;\n}\n\nstatic void PREFIX86(_scasw)()    /* Opcode 0xaf */\n{\n\tunsigned src = GetMemW(ES, m_regs.w[DI]);\n\tunsigned dst = m_regs.w[AX];\n\tSUBW(dst,src);\n\tm_regs.w[DI] += 2 * m_DirVal;\n}\n\nstatic void PREFIX86(_mov_ald8)()    /* Opcode 0xb0 */\n{\n\tm_regs.b[AL] = FETCH;\n}\n\nstatic void PREFIX86(_mov_cld8)()    /* Opcode 0xb1 */\n{\n\tm_regs.b[CL] = FETCH;\n}\n\nstatic void PREFIX86(_mov_dld8)()    /* Opcode 0xb2 */\n{\n\tm_regs.b[DL] = FETCH;\n}\n\nstatic void PREFIX86(_mov_bld8)()    /* Opcode 0xb3 */\n{\n\tm_regs.b[BL] = FETCH;\n}\n\nstatic void PREFIX86(_mov_ahd8)()    /* Opcode 0xb4 */\n{\n\tm_regs.b[AH] = FETCH;\n}\n\nstatic void PREFIX86(_mov_chd8)()    /* Opcode 0xb5 */\n{\n\tm_regs.b[CH] = FETCH;\n}\n\nstatic void PREFIX86(_mov_dhd8)()    /* Opcode 0xb6 */\n{\n\tm_regs.b[DH] = FETCH;\n}\n\nstatic void PREFIX86(_mov_bhd8)()    /* Opcode 0xb7 */\n{\n\tm_regs.b[BH] = FETCH;\n}\n\nstatic void PREFIX86(_mov_axd16)()    /* Opcode 0xb8 */\n{\n\tm_regs.b[AL] = FETCH;\n\tm_regs.b[AH] = FETCH;\n}\n\nstatic void PREFIX86(_mov_cxd16)()    /* Opcode 0xb9 */\n{\n\tm_regs.b[CL] = FETCH;\n\tm_regs.b[CH] = FETCH;\n}\n\nstatic void PREFIX86(_mov_dxd16)()    /* Opcode 0xba */\n{\n\tm_regs.b[DL] = FETCH;\n\tm_regs.b[DH] = FETCH;\n}\n\nstatic void PREFIX86(_mov_bxd16)()    /* Opcode 0xbb */\n{\n\tm_regs.b[BL] = FETCH;\n\tm_regs.b[BH] = FETCH;\n}\n\nstatic void PREFIX86(_mov_spd16)()    /* Opcode 0xbc */\n{\n\tm_regs.b[SPL] = FETCH;\n\tm_regs.b[SPH] = FETCH;\n}\n\nstatic void PREFIX86(_mov_bpd16)()    /* Opcode 0xbd */\n{\n\tm_regs.b[BPL] = FETCH;\n\tm_regs.b[BPH] = FETCH;\n}\n\nstatic void PREFIX86(_mov_sid16)()    /* Opcode 0xbe */\n{\n\tm_regs.b[SIL] = FETCH;\n\tm_regs.b[SIH] = FETCH;\n}\n\nstatic void PREFIX86(_mov_did16)()    /* Opcode 0xbf */\n{\n\tm_regs.b[DIL] = FETCH;\n\tm_regs.b[DIH] = FETCH;\n}\n\nstatic void PREFIX86(_ret_d16)()    /* Opcode 0xc2 */\n{\n\tunsigned count = FETCH;\n\tcount += FETCH << 8;\n\tPOP(m_pc);\n\tm_pc = (m_pc + m_base[CS]) & AMASK;\n\tm_regs.w[SP]+=count;\n\tCHANGE_PC(m_pc);\n}\n\nstatic void PREFIX86(_ret)()    /* Opcode 0xc3 */\n{\n\tPOP(m_pc);\n\tm_pc = (m_pc + m_base[CS]) & AMASK;\n\tCHANGE_PC(m_pc);\n}\n\nstatic void PREFIX86(_les_dw)()    /* Opcode 0xc4 */\n{\n\tunsigned ModRM = FETCH;\n\tWORD tmp = GetRMWord(ModRM);\n\n#ifdef I80286\n\ti80286_data_descriptor(ES,GetnextRMWord);\n#else\n\tm_sregs[ES] = GetnextRMWord;\n\tm_base[ES] = SegBase(ES);\n#endif\n\tRegWord(ModRM)= tmp;\n}\n\nstatic void PREFIX86(_lds_dw)()    /* Opcode 0xc5 */\n{\n\tunsigned ModRM = FETCH;\n\tWORD tmp = GetRMWord(ModRM);\n\n#ifdef I80286\n\ti80286_data_descriptor(DS,GetnextRMWord);\n#else\n\tm_sregs[DS] = GetnextRMWord;\n\tm_base[DS] = SegBase(DS);\n#endif\n\tRegWord(ModRM)=tmp;\n}\n\nstatic void PREFIX86(_mov_bd8)()    /* Opcode 0xc6 */\n{\n\tunsigned ModRM = FETCH;\n\tPutImmRMByte(ModRM);\n}\n\nstatic void PREFIX86(_mov_wd16)()    /* Opcode 0xc7 */\n{\n\tunsigned ModRM = FETCH;\n\tPutImmRMWord(ModRM);\n}\n\n#ifndef I80286\nstatic void PREFIX86(_retf_d16)()    /* Opcode 0xca */\n{\n\tunsigned count = FETCH;\n\tcount += FETCH << 8;\n\n\tPOP(m_pc);\n\tPOP(m_sregs[CS]);\n\tm_base[CS] = SegBase(CS);\n\tm_pc = (m_pc + m_base[CS]) & AMASK;\n\tm_regs.w[SP]+=count;\n\tCHANGE_PC(m_pc);\n}\n\nstatic void PREFIX86(_retf)()    /* Opcode 0xcb */\n{\n\tPOP(m_pc);\n\tPOP(m_sregs[CS]);\n\tm_base[CS] = SegBase(CS);\n\tm_pc = (m_pc + m_base[CS]) & AMASK;\n\tCHANGE_PC(m_pc);\n}\n#endif\n\nstatic void PREFIX86(_int3)()    /* Opcode 0xcc */\n{\n\tPREFIX(_interrupt)(3);\n}\n\nstatic void PREFIX86(_int)()    /* Opcode 0xcd */\n{\n\tunsigned int_num = FETCH;\n\tPREFIX(_interrupt)(int_num);\n}\n\nstatic void PREFIX86(_into)()    /* Opcode 0xce */\n{\n\tif (OF) {\n\t\tPREFIX(_interrupt)(4);\n\t}\n}\n\n#ifndef I80286\nstatic void PREFIX86(_iret)()    /* Opcode 0xcf */\n{\n\tUINT32 old = m_pc - 1;\n\n\tPOP(m_pc);\n\tPOP(m_sregs[CS]);\n\tm_base[CS] = SegBase(CS);\n\tm_pc = (m_pc + m_base[CS]) & AMASK;\n\t\tPREFIX(_popf)();\n\tCHANGE_PC(m_pc);\n\n\t/* if the IF is set, and an interrupt is pending, signal an interrupt */\n\tif (m_IF && m_irq_state)\n\t{\n\t\tPREFIX(_interrupt)((UINT32)-1);\n\t\tm_irq_state = CLEAR_LINE;\n\t}\n\n\t// MS-DOS system call\n\tif(IRET_TOP <= old && old < (IRET_TOP + IRET_SIZE)) {\n\t\tmsdos_syscall(old - IRET_TOP);\n\t}\n}\n#endif\n\nstatic void PREFIX86(_rotshft_b)()    /* Opcode 0xd0 */\n{\n\tunsigned ModRM = FETCHOP;\n\tPREFIX(_rotate_shift_Byte)(ModRM,1,GetRMByte(ModRM));\n}\n\n\nstatic void PREFIX86(_rotshft_w)()    /* Opcode 0xd1 */\n{\n\tunsigned ModRM = FETCHOP;\n\tPREFIX(_rotate_shift_Word)(ModRM,1,GetRMWord(ModRM));\n}\n\n\n#ifdef I8086\nstatic void PREFIX86(_rotshft_bcl)()    /* Opcode 0xd2 */\n{\n\tunsigned ModRM = FETCHOP;\n\tPREFIX(_rotate_shift_Byte)(ModRM,m_regs.b[CL],GetRMByte(ModRM));\n}\n\nstatic void PREFIX86(_rotshft_wcl)()    /* Opcode 0xd3 */\n{\n\tunsigned ModRM = FETCHOP;\n\tPREFIX(_rotate_shift_Word)(ModRM,m_regs.b[CL],GetRMWord(ModRM));\n}\n#endif\n\n/* OB: Opcode works on NEC V-Series but not the Variants              */\n/*     one could specify any byte value as operand but the NECs */\n/*     always substitute 0x0a.              */\nstatic void PREFIX86(_aam)()    /* Opcode 0xd4 */\n{\n\tunsigned mult = FETCH;\n\n\tif (mult == 0)\n\t\tPREFIX(_interrupt)(0);\n\telse\n\t{\n\t\tm_regs.b[AH] = m_regs.b[AL] / mult;\n\t\tm_regs.b[AL] %= mult;\n\n\t\tSetSZPF_Word(m_regs.w[AX]);\n\t}\n}\n\nstatic void PREFIX86(_aad)()    /* Opcode 0xd5 */\n{\n\tunsigned mult = FETCH;\n\n\tm_regs.b[AL] = m_regs.b[AH] * mult + m_regs.b[AL];\n\tm_regs.b[AH] = 0;\n\n\tSetZF(m_regs.b[AL]);\n\tSetPF(m_regs.b[AL]);\n\tm_SignVal = 0;\n}\n\n\nstatic void PREFIX86(_xlat)()    /* Opcode 0xd7 */\n{\n\tunsigned dest = m_regs.w[BX]+m_regs.b[AL];\n\n\tm_regs.b[AL] = GetMemB(DS, dest);\n}\n\n#ifndef I80286\nstatic void PREFIX86(_escape)()    /* Opcodes 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde and 0xdf */\n{\n\tunsigned ModRM = FETCH;\n\tGetRMByte(ModRM);\n}\n#endif\n\nstatic void PREFIX86(_loopne)()    /* Opcode 0xe0 */\n{\n\tint disp = (int)((INT8)FETCH);\n\tunsigned tmp = m_regs.w[CX]-1;\n\n\tm_regs.w[CX]=tmp;\n\n\tif (!ZF && tmp) {\n\t\tm_pc += disp;\n/* ASG - can probably assume this is safe\n        CHANGE_PC(m_pc);*/\n\t}\n}\n\nstatic void PREFIX86(_loope)()    /* Opcode 0xe1 */\n{\n\tint disp = (int)((INT8)FETCH);\n\tunsigned tmp = m_regs.w[CX]-1;\n\n\tm_regs.w[CX]=tmp;\n\n\tif (ZF && tmp) {\n\t\tm_pc += disp;\n/* ASG - can probably assume this is safe\n         CHANGE_PC(m_pc);*/\n\t}\n}\n\nstatic void PREFIX86(_loop)()    /* Opcode 0xe2 */\n{\n\tint disp = (int)((INT8)FETCH);\n\tunsigned tmp = m_regs.w[CX]-1;\n\n\tm_regs.w[CX]=tmp;\n\n\tif (tmp) {\n\t\tm_pc += disp;\n/* ASG - can probably assume this is safe\n        CHANGE_PC(m_pc);*/\n\t}\n}\n\nstatic void PREFIX86(_jcxz)()    /* Opcode 0xe3 */\n{\n\tint disp = (int)((INT8)FETCH);\n\n\tif (m_regs.w[CX] == 0) {\n\t\tm_pc += disp;\n/* ASG - can probably assume this is safe\n        CHANGE_PC(m_pc);*/\n\t}\n}\n\nstatic void PREFIX86(_inal)()    /* Opcode 0xe4 */\n{\n\tunsigned port;\n#ifdef I80286\n\tif (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0);\n#endif\n\tport = FETCH;\n\n\tm_regs.b[AL] = read_port_byte(port);\n}\n\nstatic void PREFIX86(_inax)()    /* Opcode 0xe5 */\n{\n\tunsigned port;\n#ifdef I80286\n\tif (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0);\n#endif\n\tport = FETCH;\n\n\tm_regs.w[AX] = read_port_word(port);\n}\n\nstatic void PREFIX86(_outal)()    /* Opcode 0xe6 */\n{\n\tunsigned port;\n#ifdef I80286\n\tif (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0);\n#endif\n\tport = FETCH;\n\n\twrite_port_byte(port, m_regs.b[AL]);\n}\n\nstatic void PREFIX86(_outax)()    /* Opcode 0xe7 */\n{\n\tunsigned port;\n#ifdef I80286\n\tif (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0);\n#endif\n\tport = FETCH;\n\n\twrite_port_word(port, m_regs.w[AX]);\n}\n\nstatic void PREFIX86(_call_d16)()    /* Opcode 0xe8 */\n{\n\tWORD ip, tmp;\n\n\tFETCHWORD(tmp);\n\tip = m_pc - m_base[CS];\n\tPUSH(ip);\n\tip += tmp;\n\tm_pc = (ip + m_base[CS]) & AMASK;\n\tCHANGE_PC(m_pc);\n}\n\nstatic void PREFIX86(_jmp_d16)()    /* Opcode 0xe9 */\n{\n\tWORD ip, tmp;\n\n\tFETCHWORD(tmp);\n\tip = m_pc - m_base[CS] + tmp;\n\tm_pc = (ip + m_base[CS]) & AMASK;\n\tCHANGE_PC(m_pc);\n}\n\nstatic void PREFIX86(_jmp_far)()    /* Opcode 0xea */\n{\n\tunsigned tmp,tmp1;\n\n\ttmp = FETCH;\n\ttmp += FETCH << 8;\n\n\ttmp1 = FETCH;\n\ttmp1 += FETCH << 8;\n\n#ifdef I80286\n\ti80286_code_descriptor(tmp1,tmp, 1);\n#else\n\tm_sregs[CS] = (WORD)tmp1;\n\tm_base[CS] = SegBase(CS);\n\tm_pc = (m_base[CS] + tmp) & AMASK;\n#endif\n\tCHANGE_PC(m_pc);\n}\n\nstatic void PREFIX86(_jmp_d8)()    /* Opcode 0xeb */\n{\n\tint tmp = (int)((INT8)FETCH);\n\tm_pc += tmp;\n/* ASG - can probably assume this is safe\n    CHANGE_PC(m_pc);*/\n}\n\nstatic void PREFIX86(_inaldx)()    /* Opcode 0xec */\n{\n#ifdef I80286\n\tif (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0);\n#endif\n\tm_regs.b[AL] = read_port_byte(m_regs.w[DX]);\n}\n\nstatic void PREFIX86(_inaxdx)()    /* Opcode 0xed */\n{\n\tunsigned port = m_regs.w[DX];\n#ifdef I80286\n\tif (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0);\n#endif\n\tm_regs.w[AX] = read_port_word(port);\n}\n\nstatic void PREFIX86(_outdxal)()    /* Opcode 0xee */\n{\n#ifdef I80286\n\tif (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0);\n#endif\n\twrite_port_byte(m_regs.w[DX], m_regs.b[AL]);\n}\n\nstatic void PREFIX86(_outdxax)()    /* Opcode 0xef */\n{\n\tunsigned port = m_regs.w[DX];\n#ifdef I80286\n\tif (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0);\n#endif\n\twrite_port_word(port, m_regs.w[AX]);\n}\n\n/* I think thats not a V20 instruction...*/\nstatic void PREFIX86(_lock)()    /* Opcode 0xf0 */\n{\n#ifdef I80286\n\tif(PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT,0);\n#endif\n\tPREFIX(_instruction)[FETCHOP]();  /* un-interruptible */\n}\n#endif\n\nstatic void PREFIX(_pop_ss)()    /* Opcode 0x17 */\n{\n#ifdef I80286\n\ti80286_pop_seg(SS);\n#else\n\tPOP(m_sregs[SS]);\n\tm_base[SS] = SegBase(SS);\n#endif\n\tPREFIX(_instruction)[FETCHOP](); /* no interrupt before next instruction */\n}\n\nstatic void PREFIX(_es)()    /* Opcode 0x26 */\n{\n\tm_seg_prefix = TRUE;\n\tm_prefix_seg = ES;\n\tPREFIX(_instruction)[FETCHOP]();\n}\n\nstatic void PREFIX(_cs)()    /* Opcode 0x2e */\n{\n\tm_seg_prefix = TRUE;\n\tm_prefix_seg = CS;\n\tPREFIX(_instruction)[FETCHOP]();\n}\n\nstatic void PREFIX(_ss)()    /* Opcode 0x36 */\n{\n\tm_seg_prefix = TRUE;\n\tm_prefix_seg = SS;\n\tPREFIX(_instruction)[FETCHOP]();\n}\n\nstatic void PREFIX(_ds)()    /* Opcode 0x3e */\n{\n\tm_seg_prefix = TRUE;\n\tm_prefix_seg = DS;\n\tPREFIX(_instruction)[FETCHOP]();\n}\n\nstatic void PREFIX(_mov_sregw)()    /* Opcode 0x8e */\n{\n\tunsigned ModRM = FETCH;\n\tWORD src = GetRMWord(ModRM);\n\n#ifdef I80286\n\tswitch (ModRM & 0x38)\n\t{\n\tcase 0x00:  /* mov es,ew */\n\t\ti80286_data_descriptor(ES,src);\n\t\tbreak;\n\tcase 0x18:  /* mov ds,ew */\n\t\ti80286_data_descriptor(DS,src);\n\t\tbreak;\n\tcase 0x10:  /* mov ss,ew */\n\t\ti80286_data_descriptor(SS,src);\n\t\tm_seg_prefix = FALSE;\n\t\tPREFIX(_instruction)[FETCHOP]();\n\t\tbreak;\n\tcase 0x08:  /* mov cs,ew */\n\t\tPREFIX(_invalid)();\n\t\tbreak;  /* doesn't do a jump far */\n\t}\n#else\n\tswitch (ModRM & 0x38)\n\t{\n\tcase 0x00:  /* mov es,ew */\n\t\tm_sregs[ES] = src;\n\t\tm_base[ES] = SegBase(ES);\n\t\tbreak;\n\tcase 0x18:  /* mov ds,ew */\n\t\tm_sregs[DS] = src;\n\t\tm_base[DS] = SegBase(DS);\n\t\tbreak;\n\tcase 0x10:  /* mov ss,ew */\n\t\tm_sregs[SS] = src;\n\t\tm_base[SS] = SegBase(SS); /* no interrupt allowed before next instr */\n\t\tm_seg_prefix = FALSE;\n\t\tPREFIX(_instruction)[FETCHOP]();\n\t\tbreak;\n\tcase 0x08:  /* mov cs,ew */\n#ifndef I80186\n\t\tint ip = m_pc - m_base[CS];\n\t\tm_sregs[CS] = src;\n\t\tm_base[CS] = SegBase(CS);\n\t\tm_pc = (ip + m_base[CS]) & AMASK;\n\t\tCHANGE_PC(m_pc);\n#endif\n\t\tbreak;\n\t}\n#endif\n}\n\nstatic void PREFIX(_repne)()    /* Opcode 0xf2 */\n{\n\t\tPREFIX(rep)(0);\n}\n\nstatic void PREFIX(_repe)()    /* Opcode 0xf3 */\n{\n\tPREFIX(rep)(1);\n}\n\nstatic void PREFIX(_sti)()    /* Opcode 0xfb */\n{\n#ifdef I80286\n\tif(PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT,0);\n#endif\n\tSetIF(1);\n\tPREFIX(_instruction)[FETCHOP](); /* no interrupt before next instruction */\n\n\t/* if an interrupt is pending, signal an interrupt */\n\tif (m_irq_state)\n\t{\n#ifdef I80286\n\t\ti80286_interrupt_descriptor(pic_ack(), 2, -1);\n#else\n\t\tPREFIX86(_interrupt)((UINT32)-1);\n#endif\n\t\tm_irq_state = CLEAR_LINE;\n\t}\n}\n\n#ifndef I80186\nstatic void PREFIX86(_hlt)()    /* Opcode 0xf4 */\n{\n#ifdef I80286\n\tif(PM && (CPL!=0)) throw TRAP(GENERAL_PROTECTION_FAULT,0);\n#endif\n\tm_halted=1;\n}\n\nstatic void PREFIX86(_cmc)()    /* Opcode 0xf5 */\n{\n\tm_CarryVal = !CF;\n}\n\nstatic void PREFIX86(_f6pre)()\n{\n\t/* Opcode 0xf6 */\n\tunsigned ModRM = FETCH;\n\tunsigned tmp = (unsigned)GetRMByte(ModRM);\n\tunsigned tmp2;\n\n\n\tswitch (ModRM & 0x38)\n\t{\n\tcase 0x00:  /* TEST Eb, data8 */\n\tcase 0x08:  /* ??? */\n\t\ttmp &= FETCH;\n\n\t\tm_CarryVal = m_OverVal = m_AuxVal = 0;\n\t\tSetSZPF_Byte(tmp);\n\t\tbreak;\n\n\tcase 0x10:  /* NOT Eb */\n\t\tPutbackRMByte(ModRM,~tmp);\n\t\tbreak;\n\n\tcase 0x18:  /* NEG Eb */\n\t\ttmp2=0;\n\t\tSUBB(tmp2,tmp);\n\t\tPutbackRMByte(ModRM,tmp2);\n\t\tbreak;\n\tcase 0x20:  /* MUL AL, Eb */\n\t\t{\n\t\t\tUINT16 result;\n\t\t\ttmp2 = m_regs.b[AL];\n\n\t\t\tSetSF((INT8)tmp2);\n\t\t\tSetPF(tmp2);\n\n\t\t\tresult = (UINT16)tmp2*tmp;\n\t\t\tm_regs.w[AX]=(WORD)result;\n\n\t\t\tSetZF(m_regs.w[AX]);\n\t\t\tm_CarryVal = m_OverVal = (m_regs.b[AH] != 0);\n\t\t}\n\t\tbreak;\n\tcase 0x28:  /* IMUL AL, Eb */\n\t\t{\n\t\t\tINT16 result;\n\n\t\t\ttmp2 = (unsigned)m_regs.b[AL];\n\n\t\t\tSetSF((INT8)tmp2);\n\t\t\tSetPF(tmp2);\n\n\t\t\tresult = (INT16)((INT8)tmp2)*(INT16)((INT8)tmp);\n\t\t\tm_regs.w[AX]=(WORD)result;\n\n\t\t\tSetZF(m_regs.w[AX]);\n\n\t\t\tm_CarryVal = m_OverVal = (result >> 7 != 0) && (result >> 7 != -1);\n\t\t}\n\t\tbreak;\n\tcase 0x30:  /* DIV AL, Ew */\n\t\t{\n\t\t\tUINT16 result;\n\n\t\t\tresult = m_regs.w[AX];\n\n\t\t\tif (tmp)\n\t\t\t{\n\t\t\t\tif ((result / tmp) > 0xff)\n\t\t\t\t{\n\t\t\t\t\tPREFIX(_interrupt)(0);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tm_regs.b[AH] = result % tmp;\n\t\t\t\t\tm_regs.b[AL] = result / tmp;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tPREFIX(_interrupt)(0);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tbreak;\n\tcase 0x38:  /* IDIV AL, Ew */\n\t\t{\n\t\t\tINT16 result;\n\n\t\t\tresult = m_regs.w[AX];\n\n\t\t\tif (tmp)\n\t\t\t{\n\t\t\t\ttmp2 = result % (INT16)((INT8)tmp);\n\n\t\t\t\tif ((result /= (INT16)((INT8)tmp)) > 0xff)\n\t\t\t\t{\n\t\t\t\t\tPREFIX(_interrupt)(0);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tm_regs.b[AL] = result;\n\t\t\t\t\tm_regs.b[AH] = tmp2;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tPREFIX(_interrupt)(0);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tbreak;\n\t}\n}\n\n\nstatic void PREFIX86(_f7pre)()\n{\n\t/* Opcode 0xf7 */\n\tunsigned ModRM = FETCH;\n\t\tunsigned tmp = GetRMWord(ModRM);\n\tunsigned tmp2;\n\n\n\tswitch (ModRM & 0x38)\n\t{\n\tcase 0x00:  /* TEST Ew, data16 */\n\tcase 0x08:  /* ??? */\n\t\ttmp2 = FETCH;\n\t\ttmp2 += FETCH << 8;\n\n\t\ttmp &= tmp2;\n\n\t\tm_CarryVal = m_OverVal = m_AuxVal = 0;\n\t\tSetSZPF_Word(tmp);\n\t\tbreak;\n\n\tcase 0x10:  /* NOT Ew */\n\t\ttmp = ~tmp;\n\t\tPutbackRMWord(ModRM,tmp);\n\t\tbreak;\n\n\tcase 0x18:  /* NEG Ew */\n\t\ttmp2 = 0;\n\t\tSUBW(tmp2,tmp);\n\t\tPutbackRMWord(ModRM,tmp2);\n\t\tbreak;\n\tcase 0x20:  /* MUL AX, Ew */\n\t\t{\n\t\t\tUINT32 result;\n\t\t\ttmp2 = m_regs.w[AX];\n\n\t\t\tSetSF((INT16)tmp2);\n\t\t\tSetPF(tmp2);\n\n\t\t\tresult = (UINT32)tmp2*tmp;\n\t\t\tm_regs.w[AX]=(WORD)result;\n\t\t\tresult >>= 16;\n\t\t\tm_regs.w[DX]=result;\n\n\t\t\tSetZF(m_regs.w[AX] | m_regs.w[DX]);\n\t\t\tm_CarryVal = m_OverVal = (m_regs.w[DX] != 0);\n\t\t}\n\t\tbreak;\n\n\tcase 0x28:  /* IMUL AX, Ew */\n\t\t{\n\t\t\tINT32 result;\n\n\t\t\ttmp2 = m_regs.w[AX];\n\n\t\t\tSetSF((INT16)tmp2);\n\t\t\tSetPF(tmp2);\n\n\t\t\tresult = (INT32)((INT16)tmp2)*(INT32)((INT16)tmp);\n\t\t\tm_CarryVal = m_OverVal = (result >> 15 != 0) && (result >> 15 != -1);\n\n\t\t\tm_regs.w[AX]=(WORD)result;\n\t\t\tresult = (WORD)(result >> 16);\n\t\t\tm_regs.w[DX]=result;\n\n\t\t\tSetZF(m_regs.w[AX] | m_regs.w[DX]);\n\t\t}\n\t\tbreak;\n\tcase 0x30:  /* DIV AX, Ew */\n\t\t{\n\t\t\tUINT32 result;\n\n\t\t\tresult = (m_regs.w[DX] << 16) + m_regs.w[AX];\n\n\t\t\tif (tmp)\n\t\t\t{\n\t\t\t\ttmp2 = result % tmp;\n\t\t\t\tif ((result / tmp) > 0xffff)\n\t\t\t\t{\n\t\t\t\t\tPREFIX(_interrupt)(0);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tm_regs.w[DX]=tmp2;\n\t\t\t\t\tresult /= tmp;\n\t\t\t\t\tm_regs.w[AX]=result;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tPREFIX(_interrupt)(0);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tbreak;\n\tcase 0x38:  /* IDIV AX, Ew */\n\t\t{\n\t\t\tINT32 result;\n\n\t\t\tresult = (m_regs.w[DX] << 16) + m_regs.w[AX];\n\n\t\t\tif (tmp)\n\t\t\t{\n\t\t\t\ttmp2 = result % (INT32)((INT16)tmp);\n\t\t\t\tif ((result /= (INT32)((INT16)tmp)) > 0xffff)\n\t\t\t\t{\n\t\t\t\t\tPREFIX(_interrupt)(0);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tm_regs.w[AX]=result;\n\t\t\t\t\tm_regs.w[DX]=tmp2;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tPREFIX(_interrupt)(0);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tbreak;\n\t}\n}\n\n\nstatic void PREFIX86(_clc)()    /* Opcode 0xf8 */\n{\n\tm_CarryVal = 0;\n}\n\nstatic void PREFIX86(_stc)()    /* Opcode 0xf9 */\n{\n\tm_CarryVal = 1;\n}\n\nstatic void PREFIX86(_cli)()    /* Opcode 0xfa */\n{\n#ifdef I80286\n\tif(PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT,0);\n#endif\n\tSetIF(0);\n}\n\nstatic void PREFIX86(_cld)()    /* Opcode 0xfc */\n{\n\tSetDF(0);\n}\n\nstatic void PREFIX86(_std)()    /* Opcode 0xfd */\n{\n\tSetDF(1);\n}\n\nstatic void PREFIX86(_fepre)()    /* Opcode 0xfe */\n{\n\tunsigned ModRM = FETCH;\n\tunsigned tmp = GetRMByte(ModRM);\n\tunsigned tmp1;\n\n\tif ((ModRM & 0x38) == 0)  /* INC eb */\n\t{\n\t\ttmp1 = tmp+1;\n\t\tSetOFB_Add(tmp1,tmp,1);\n\t}\n\telse  /* DEC eb */\n\t{\n\t\ttmp1 = tmp-1;\n\t\tSetOFB_Sub(tmp1,1,tmp);\n\t}\n\n\tSetAF(tmp1,tmp,1);\n\tSetSZPF_Byte(tmp1);\n\n\tPutbackRMByte(ModRM,(BYTE)tmp1);\n}\n\n\nstatic void PREFIX86(_ffpre)()    /* Opcode 0xff */\n{\n\tunsigned ModRM = FETCHOP;\n\tunsigned tmp;\n\tunsigned tmp1;\n\tWORD ip;\n\n\tswitch(ModRM & 0x38)\n\t{\n\tcase 0x00:  /* INC ew */\n\t\ttmp = GetRMWord(ModRM);\n\t\ttmp1 = tmp+1;\n\n\t\tSetOFW_Add(tmp1,tmp,1);\n\t\tSetAF(tmp1,tmp,1);\n\t\tSetSZPF_Word(tmp1);\n\n\t\tPutbackRMWord(ModRM,(WORD)tmp1);\n\t\tbreak;\n\n\tcase 0x08:  /* DEC ew */\n\t\ttmp = GetRMWord(ModRM);\n\t\ttmp1 = tmp-1;\n\n\t\tSetOFW_Sub(tmp1,1,tmp);\n\t\tSetAF(tmp1,tmp,1);\n\t\tSetSZPF_Word(tmp1);\n\n\t\tPutbackRMWord(ModRM,(WORD)tmp1);\n\t\tbreak;\n\n\tcase 0x10:  /* CALL ew */\n\t\ttmp = GetRMWord(ModRM);\n\t\tip = m_pc - m_base[CS];\n\t\tPUSH(ip);\n\t\tm_pc = (m_base[CS] + (WORD)tmp) & AMASK;\n\t\tCHANGE_PC(m_pc);\n\t\tbreak;\n\n\tcase 0x18:  /* CALL FAR ea */\n\t\ttmp = m_sregs[CS];  /* HJB 12/13/98 need to skip displacements of m_ea */\n\t\ttmp1 = GetRMWord(ModRM);\n\t\tip = m_pc - m_base[CS];\n#ifdef I80286\n\t\ti80286_code_descriptor(GetnextRMWord, tmp1, 2);\n#else\n\t\tm_sregs[CS] = GetnextRMWord;\n\t\tm_base[CS] = SegBase(CS);\n\t\tm_pc = (m_base[CS] + tmp1) & AMASK;\n#endif\n\t\tPUSH(tmp);\n\t\tPUSH(ip);\n\t\tCHANGE_PC(m_pc);\n\t\tbreak;\n\n\tcase 0x20:  /* JMP ea */\n\t\tip = GetRMWord(ModRM);\n\t\tm_pc = (m_base[CS] + ip) & AMASK;\n\t\tCHANGE_PC(m_pc);\n\t\tbreak;\n\n\tcase 0x28:  /* JMP FAR ea */\n\n#ifdef I80286\n\t\ttmp = GetRMWord(ModRM);\n\t\ti80286_code_descriptor(GetnextRMWord, tmp, 1);\n#else\n\t\tm_pc = GetRMWord(ModRM);\n\t\tm_sregs[CS] = GetnextRMWord;\n\t\tm_base[CS] = SegBase(CS);\n\t\tm_pc = (m_pc + m_base[CS]) & AMASK;\n#endif\n\t\tCHANGE_PC(m_pc);\n\t\tbreak;\n\n\tcase 0x30:  /* PUSH ea */\n\t\ttmp = GetRMWord(ModRM);\n\t\tPUSH(tmp);\n\t\tbreak;\n\tdefault:\n\t\ttmp = GetRMWord(ModRM);  // 286 doesn't matter but 8086?\n\t\treturn PREFIX(_invalid)();\n\t}\n}\n\n\nstatic void PREFIX86(_invalid)()\n{\n\tlogerror(\"illegal instruction %.2x at %.5x\\n\",PEEKBYTE(m_pc-1), m_pc);\n#ifdef I80286\n\tthrow TRAP(ILLEGAL_INSTRUCTION,-1);\n#else\n\t/* i8086/i8088 ignore an invalid opcode. */\n\t/* i80186/i80188 probably also ignore an invalid opcode. */\n#endif\n}\n\n#ifndef I80286\nstatic void PREFIX86(_invalid_2b)()\n{\n\tunsigned ModRM = FETCH;\n\tGetRMByte(ModRM);\n\tlogerror(\"illegal 2 byte instruction %.2x at %.5x\\n\",PEEKBYTE(m_pc-2), m_pc-2);\n}\n#endif\n#endif\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i86/instr86.h",
    "content": "#pragma once\n\n#ifndef __INSTR86_H__\n#define __INSTR86_H__\n\n/****************************************************************************\n*             real mode i286 emulator v1.4 by Fabrice Frances               *\n*               (initial work based on David Hedley's pcemu)                *\n****************************************************************************/\n\n// file will be included in all cpu variants\n// put non i86 instructions in own files (i286, i386, nec)\n// function renaming will be added when necessary\n// timing value should move to separate array\n\nstatic void PREFIX86(_add_br8)();\nstatic void PREFIX86(_add_wr16)();\nstatic void PREFIX86(_add_r8b)();\nstatic void PREFIX86(_add_r16w)();\nstatic void PREFIX86(_add_ald8)();\nstatic void PREFIX86(_add_axd16)();\nstatic void PREFIX86(_push_es)();\nstatic void PREFIX86(_pop_es)();\nstatic void PREFIX86(_or_br8)();\nstatic void PREFIX86(_or_r8b)();\nstatic void PREFIX86(_or_wr16)();\nstatic void PREFIX86(_or_r16w)();\nstatic void PREFIX86(_or_ald8)();\nstatic void PREFIX86(_or_axd16)();\nstatic void PREFIX86(_push_cs)();\n#ifndef I80286\nstatic void PREFIX86(_pop_cs)();\n#endif\nstatic void PREFIX86(_adc_br8)();\nstatic void PREFIX86(_adc_wr16)();\nstatic void PREFIX86(_adc_r8b)();\nstatic void PREFIX86(_adc_r16w)();\nstatic void PREFIX86(_adc_ald8)();\nstatic void PREFIX86(_adc_axd16)();\nstatic void PREFIX86(_push_ss)();\nstatic void PREFIX86(_pop_ss)();\nstatic void PREFIX86(_sbb_br8)();\nstatic void PREFIX86(_sbb_wr16)();\nstatic void PREFIX86(_sbb_r8b)();\nstatic void PREFIX86(_sbb_r16w)();\nstatic void PREFIX86(_sbb_ald8)();\nstatic void PREFIX86(_sbb_axd16)();\nstatic void PREFIX86(_push_ds)();\nstatic void PREFIX86(_pop_ds)();\nstatic void PREFIX86(_and_br8)();\nstatic void PREFIX86(_and_r8b)();\nstatic void PREFIX86(_and_wr16)();\nstatic void PREFIX86(_and_r16w)();\nstatic void PREFIX86(_and_ald8)();\nstatic void PREFIX86(_and_axd16)();\nstatic void PREFIX86(_es)();\nstatic void PREFIX86(_daa)();\nstatic void PREFIX86(_sub_br8)();\nstatic void PREFIX86(_sub_wr16)();\nstatic void PREFIX86(_sub_r8b)();\nstatic void PREFIX86(_sub_r16w)();\nstatic void PREFIX86(_sub_ald8)();\nstatic void PREFIX86(_sub_axd16)();\nstatic void PREFIX86(_cs)();\nstatic void PREFIX86(_das)();\nstatic void PREFIX86(_xor_br8)();\nstatic void PREFIX86(_xor_r8b)();\nstatic void PREFIX86(_xor_wr16)();\nstatic void PREFIX86(_xor_r16w)();\nstatic void PREFIX86(_xor_ald8)();\nstatic void PREFIX86(_xor_axd16)();\nstatic void PREFIX86(_ss)();\nstatic void PREFIX86(_aaa)();\nstatic void PREFIX86(_cmp_br8)();\nstatic void PREFIX86(_cmp_wr16)();\nstatic void PREFIX86(_cmp_r8b)();\nstatic void PREFIX86(_cmp_r16w)();\nstatic void PREFIX86(_cmp_ald8)();\nstatic void PREFIX86(_cmp_axd16)();\nstatic void PREFIX86(_ds)();\nstatic void PREFIX86(_aas)();\nstatic void PREFIX86(_inc_ax)();\nstatic void PREFIX86(_inc_cx)();\nstatic void PREFIX86(_inc_dx)();\nstatic void PREFIX86(_inc_bx)();\nstatic void PREFIX86(_inc_sp)();\nstatic void PREFIX86(_inc_bp)();\nstatic void PREFIX86(_inc_si)();\nstatic void PREFIX86(_inc_di)();\nstatic void PREFIX86(_dec_ax)();\nstatic void PREFIX86(_dec_cx)();\nstatic void PREFIX86(_dec_dx)();\nstatic void PREFIX86(_dec_bx)();\nstatic void PREFIX86(_dec_sp)();\nstatic void PREFIX86(_dec_bp)();\nstatic void PREFIX86(_dec_si)();\nstatic void PREFIX86(_dec_di)();\nstatic void PREFIX86(_push_ax)();\nstatic void PREFIX86(_push_cx)();\nstatic void PREFIX86(_push_dx)();\nstatic void PREFIX86(_push_bx)();\nstatic void PREFIX86(_push_sp)();\nstatic void PREFIX86(_push_bp)();\nstatic void PREFIX86(_push_si)();\nstatic void PREFIX86(_push_di)();\nstatic void PREFIX86(_pop_ax)();\nstatic void PREFIX86(_pop_cx)();\nstatic void PREFIX86(_pop_dx)();\nstatic void PREFIX86(_pop_bx)();\nstatic void PREFIX86(_pop_sp)();\nstatic void PREFIX86(_pop_bp)();\nstatic void PREFIX86(_pop_si)();\nstatic void PREFIX86(_pop_di)();\nstatic void PREFIX86(_jo)();\nstatic void PREFIX86(_jno)();\nstatic void PREFIX86(_jb)();\nstatic void PREFIX86(_jnb)();\nstatic void PREFIX86(_jz)();\nstatic void PREFIX86(_jnz)();\nstatic void PREFIX86(_jbe)();\nstatic void PREFIX86(_jnbe)();\nstatic void PREFIX86(_js)();\nstatic void PREFIX86(_jns)();\nstatic void PREFIX86(_jp)();\nstatic void PREFIX86(_jnp)();\nstatic void PREFIX86(_jl)();\nstatic void PREFIX86(_jnl)();\nstatic void PREFIX86(_jle)();\nstatic void PREFIX86(_jnle)();\nstatic void PREFIX86(_80pre)();\nstatic void PREFIX86(_82pre)();\nstatic void PREFIX86(_81pre)();\nstatic void PREFIX86(_83pre)();\nstatic void PREFIX86(_test_br8)();\nstatic void PREFIX86(_test_wr16)();\nstatic void PREFIX86(_xchg_br8)();\nstatic void PREFIX86(_xchg_wr16)();\nstatic void PREFIX86(_mov_br8)();\nstatic void PREFIX86(_mov_r8b)();\nstatic void PREFIX86(_mov_wr16)();\nstatic void PREFIX86(_mov_r16w)();\nstatic void PREFIX86(_mov_wsreg)();\nstatic void PREFIX86(_lea)();\nstatic void PREFIX86(_mov_sregw)();\nstatic void PREFIX86(_invalid)();\n#ifndef I80286\nstatic void PREFIX86(_invalid_2b)();\n#endif\nstatic void PREFIX86(_popw)();\nstatic void PREFIX86(_nop)();\nstatic void PREFIX86(_xchg_axcx)();\nstatic void PREFIX86(_xchg_axdx)();\nstatic void PREFIX86(_xchg_axbx)();\nstatic void PREFIX86(_xchg_axsp)();\nstatic void PREFIX86(_xchg_axbp)();\nstatic void PREFIX86(_xchg_axsi)();\nstatic void PREFIX86(_xchg_axdi)();\nstatic void PREFIX86(_cbw)();\nstatic void PREFIX86(_cwd)();\nstatic void PREFIX86(_call_far)();\nstatic void PREFIX86(_pushf)();\nstatic void PREFIX86(_popf)();\nstatic void PREFIX86(_sahf)();\nstatic void PREFIX86(_lahf)();\nstatic void PREFIX86(_mov_aldisp)();\nstatic void PREFIX86(_mov_axdisp)();\nstatic void PREFIX86(_mov_dispal)();\nstatic void PREFIX86(_mov_dispax)();\nstatic void PREFIX86(_movsb)();\nstatic void PREFIX86(_movsw)();\nstatic void PREFIX86(_cmpsb)();\nstatic void PREFIX86(_cmpsw)();\nstatic void PREFIX86(_test_ald8)();\nstatic void PREFIX86(_test_axd16)();\nstatic void PREFIX86(_stosb)();\nstatic void PREFIX86(_stosw)();\nstatic void PREFIX86(_lodsb)();\nstatic void PREFIX86(_lodsw)();\nstatic void PREFIX86(_scasb)();\nstatic void PREFIX86(_scasw)();\nstatic void PREFIX86(_mov_ald8)();\nstatic void PREFIX86(_mov_cld8)();\nstatic void PREFIX86(_mov_dld8)();\nstatic void PREFIX86(_mov_bld8)();\nstatic void PREFIX86(_mov_ahd8)();\nstatic void PREFIX86(_mov_chd8)();\nstatic void PREFIX86(_mov_dhd8)();\nstatic void PREFIX86(_mov_bhd8)();\nstatic void PREFIX86(_mov_axd16)();\nstatic void PREFIX86(_mov_cxd16)();\nstatic void PREFIX86(_mov_dxd16)();\nstatic void PREFIX86(_mov_bxd16)();\nstatic void PREFIX86(_mov_spd16)();\nstatic void PREFIX86(_mov_bpd16)();\nstatic void PREFIX86(_mov_sid16)();\nstatic void PREFIX86(_mov_did16)();\nstatic void PREFIX86(_ret_d16)();\nstatic void PREFIX86(_ret)();\nstatic void PREFIX86(_les_dw)();\nstatic void PREFIX86(_lds_dw)();\nstatic void PREFIX86(_mov_bd8)();\nstatic void PREFIX86(_mov_wd16)();\nstatic void PREFIX86(_retf_d16)();\nstatic void PREFIX86(_retf)();\nstatic void PREFIX86(_int3)();\nstatic void PREFIX86(_int)();\nstatic void PREFIX86(_into)();\nstatic void PREFIX86(_iret)();\nstatic void PREFIX86(_rotshft_b)();\nstatic void PREFIX86(_rotshft_w)();\nstatic void PREFIX86(_rotshft_bcl)();\nstatic void PREFIX86(_rotshft_wcl)();\nstatic void PREFIX86(_aam)();\nstatic void PREFIX86(_aad)();\nstatic void PREFIX86(_xlat)();\nstatic void PREFIX86(_escape)();\nstatic void PREFIX86(_loopne)();\nstatic void PREFIX86(_loope)();\nstatic void PREFIX86(_loop)();\nstatic void PREFIX86(_jcxz)();\nstatic void PREFIX86(_inal)();\nstatic void PREFIX86(_inax)();\nstatic void PREFIX86(_outal)();\nstatic void PREFIX86(_outax)();\nstatic void PREFIX86(_call_d16)();\nstatic void PREFIX86(_jmp_d16)();\nstatic void PREFIX86(_jmp_far)();\nstatic void PREFIX86(_jmp_d8)();\nstatic void PREFIX86(_inaldx)();\nstatic void PREFIX86(_inaxdx)();\nstatic void PREFIX86(_outdxal)();\nstatic void PREFIX86(_outdxax)();\nstatic void PREFIX86(_lock)();\nstatic void PREFIX86(_repne)();\nstatic void PREFIX86(_repe)();\nstatic void PREFIX86(_hlt)();\nstatic void PREFIX86(_cmc)();\nstatic void PREFIX86(_f6pre)();\nstatic void PREFIX86(_f7pre)();\nstatic void PREFIX86(_clc)();\nstatic void PREFIX86(_stc)();\nstatic void PREFIX86(_cli)();\nstatic void PREFIX86(_sti)();\nstatic void PREFIX86(_cld)();\nstatic void PREFIX86(_std)();\nstatic void PREFIX86(_fepre)();\nstatic void PREFIX86(_ffpre)();\nstatic void PREFIX86(_wait)();\n\n#endif /* __INSTR86_H__ */\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i86/modrm.h",
    "content": "static struct\n{\n\tstruct\n\t{\n\t\tWREGS w[256];\n\t\tBREGS b[256];\n\t} reg;\n\tstruct\n\t{\n\t\tWREGS w[256];\n\t\tBREGS b[256];\n\t} RM;\n} Mod_RM;\n\n#define RegWord(ModRM) m_regs.w[Mod_RM.reg.w[ModRM]]\n#define RegByte(ModRM) m_regs.b[Mod_RM.reg.b[ModRM]]\n\n#define GetRMWord(ModRM) \\\n\t((ModRM) >= 0xc0 ? m_regs.w[Mod_RM.RM.w[ModRM]] : ( (*GetEA[ModRM])(), ReadWord( m_ea ) ))\n\n#define PutbackRMWord(ModRM,val) \\\n{ \\\n\tif (ModRM >= 0xc0) m_regs.w[Mod_RM.RM.w[ModRM]]=val; \\\n\telse WriteWord(m_ea,val); \\\n}\n\n#define GetnextRMWord ReadWord(m_ea+2)\n\n#define GetRMWordOffset(offs) \\\n\t\tReadWord(m_ea-m_eo+(UINT16)(m_eo+offs))\n\n#define GetRMByteOffset(offs) \\\n\t\tReadByte(m_ea-m_eo+(UINT16)(m_eo+offs))\n\n#define PutRMWord(ModRM,val)                \\\n{                                           \\\n\tif (ModRM >= 0xc0)                      \\\n\t\tm_regs.w[Mod_RM.RM.w[ModRM]]=val;   \\\n\telse {                                  \\\n\t\t(*GetEA[ModRM])();                  \\\n\t\tWriteWord( m_ea ,val);              \\\n\t}                                       \\\n}\n\n#define PutRMWordOffset(offs, val) \\\n\t\tWriteWord( m_ea-m_eo+(UINT16)(m_eo+offs), val)\n\n#define PutRMByteOffset(offs, val) \\\n\t\tWriteByte( m_ea-m_eo+(UINT16)(m_eo+offs), val)\n\n#define PutImmRMWord(ModRM)                 \\\n{                                           \\\n\tWORD val;                               \\\n\tif (ModRM >= 0xc0)                      \\\n\t\tFETCHWORD(m_regs.w[Mod_RM.RM.w[ModRM]]) \\\n\telse {                                  \\\n\t\t(*GetEA[ModRM])();                  \\\n\t\tFETCHWORD(val)                      \\\n\t\tWriteWord( m_ea , val);             \\\n\t}                                       \\\n}\n\n#define GetRMByte(ModRM) \\\n\t((ModRM) >= 0xc0 ? m_regs.b[Mod_RM.RM.b[ModRM]] : ReadByte( (*GetEA[ModRM])() ))\n\n#define PutRMByte(ModRM,val)                \\\n{                                           \\\n\tif (ModRM >= 0xc0)                      \\\n\t\tm_regs.b[Mod_RM.RM.b[ModRM]]=val;   \\\n\telse                                    \\\n\t\tWriteByte( (*GetEA[ModRM])() ,val); \\\n}\n\n#define PutImmRMByte(ModRM)                 \\\n{                                           \\\n\tif (ModRM >= 0xc0)                      \\\n\t\tm_regs.b[Mod_RM.RM.b[ModRM]]=FETCH; \\\n\telse {                                  \\\n\t\t(*GetEA[ModRM])();                  \\\n\t\tWriteByte( m_ea , FETCH );          \\\n\t}                                       \\\n}\n\n#define PutbackRMByte(ModRM,val)            \\\n{                                           \\\n\tif (ModRM >= 0xc0)                      \\\n\t\tm_regs.b[Mod_RM.RM.b[ModRM]]=val;   \\\n\telse                                    \\\n\t\tWriteByte(m_ea,val);                    \\\n}\n\n#define DEF_br8(dst,src)                    \\\n\tunsigned ModRM = FETCHOP;               \\\n\tunsigned src = RegByte(ModRM);          \\\n\tunsigned dst = GetRMByte(ModRM)\n\n#define DEF_wr16(dst,src)                   \\\n\tunsigned ModRM = FETCHOP;               \\\n\tunsigned src = RegWord(ModRM);          \\\n\tunsigned dst = GetRMWord(ModRM)\n\n#define DEF_r8b(dst,src)                    \\\n\tunsigned ModRM = FETCHOP;               \\\n\tunsigned dst = RegByte(ModRM);          \\\n\tunsigned src = GetRMByte(ModRM)\n\n#define DEF_r16w(dst,src)                   \\\n\tunsigned ModRM = FETCHOP;               \\\n\tunsigned dst = RegWord(ModRM);          \\\n\tunsigned src = GetRMWord(ModRM)\n\n#define DEF_ald8(dst,src)                   \\\n\tunsigned src = FETCHOP;                 \\\n\tunsigned dst = m_regs.b[AL]\n\n#define DEF_axd16(dst,src)                  \\\n\tunsigned src = FETCHOP;                 \\\n\tunsigned dst = m_regs.w[AX];            \\\n\tsrc += (FETCH << 8)\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i86/modrm286.h",
    "content": "static struct\n{\n\tstruct\n\t{\n\t\tWREGS w[256];\n\t\tBREGS b[256];\n\t} reg;\n\tstruct\n\t{\n\t\tWREGS w[256];\n\t\tBREGS b[256];\n\t} RM;\n} Mod_RM;\n\n#define RegWord(ModRM) m_regs.w[Mod_RM.reg.w[ModRM]]\n#define RegByte(ModRM) m_regs.b[Mod_RM.reg.b[ModRM]]\n\n#define GetRMWord(ModRM) \\\n\t((ModRM) >= 0xc0 ? m_regs.w[Mod_RM.RM.w[ModRM]] : ( (*GetEA[ModRM])(), i80286_check_permission(m_ea_seg, m_eo, I80286_WORD, I80286_READ), ReadWord( m_ea ) ))\n\n#define PutbackRMWord(ModRM,val)                                                                        \\\n{                                                                                                       \\\n\tif (ModRM >= 0xc0) m_regs.w[Mod_RM.RM.w[ModRM]]=val;                                        \\\n\telse                                                                                                \\\n\t{                                                                                                   \\\n\t\ti80286_check_permission(m_ea_seg, m_eo, I80286_WORD, I80286_WRITE);   \\\n\t\tWriteWord(m_ea,val);                                                                    \\\n\t}                                                                                                   \\\n}\n\n#define GetnextRMWord                                                                                                                   \\\n\t(                                                                                                                                   \\\n\ti80286_check_permission(m_ea_seg, m_ea + 2 - m_base[m_ea_seg], I80286_WORD, I80286_READ), \\\n\tReadWord(m_ea+2)                                                                                                            \\\n\t)\n\n#define GetRMWordOffset(offs)                                                                                       \\\n\t\t(                                                                                                           \\\n\t\ti80286_check_permission(m_ea_seg, (UINT16)(m_eo+offs), I80286_WORD, I80286_READ), \\\n\t\tReadWord(m_ea-m_eo+(UINT16)(m_eo+offs))                                             \\\n\t\t)\n\n#define GetRMByteOffset(offs)                                                                                       \\\n\t\t(                                                                                                           \\\n\t\ti80286_check_permission(m_ea_seg, (UINT16)(m_eo+offs), I80286_BYTE, I80286_READ), \\\n\t\tReadByte(m_ea-m_eo+(UINT16)(m_eo+offs))                                             \\\n\t\t)\n\n#define PutRMWord(ModRM,val)                                                                            \\\n{                                                                                                       \\\n\tif (ModRM >= 0xc0)                                                                                  \\\n\t\tm_regs.w[Mod_RM.RM.w[ModRM]]=val;                                                       \\\n\telse {                                                                                              \\\n\t\t(*GetEA[ModRM])();                                                                      \\\n\t\ti80286_check_permission(m_ea_seg, m_eo, I80286_WORD, I80286_WRITE);   \\\n\t\tWriteWord( m_ea ,val);                                                                  \\\n\t}                                                                                                   \\\n}\n\n#define PutRMWordOffset(offs, val)                                                                                      \\\n\t\ti80286_check_permission(m_ea_seg, (UINT16)(m_eo+offs), I80286_WORD, I80286_WRITE);    \\\n\t\tWriteWord( m_ea-m_eo+(UINT16)(m_eo+offs), val)\n\n#define PutRMByteOffset(offs, val)                                                                                      \\\n\t\ti80286_check_permission(m_ea_seg, (UINT16)(m_eo+offs), I80286_BYTE, I80286_WRITE);    \\\n\t\tWriteByte( m_ea-m_eo+(UINT16)(m_eo+offs), val)\n\n#define PutImmRMWord(ModRM)                                                                             \\\n{                                                                                                       \\\n\tWORD val;                                                                                           \\\n\tif (ModRM >= 0xc0)                                                                                  \\\n\t\tFETCHWORD(m_regs.w[Mod_RM.RM.w[ModRM]])                                                 \\\n\telse {                                                                                              \\\n\t\t(*GetEA[ModRM])();                                                                      \\\n\t\ti80286_check_permission(m_ea_seg, m_eo, I80286_WORD, I80286_WRITE);   \\\n\t\tFETCHWORD(val)                                                                                  \\\n\t\tWriteWord( m_ea , val);                                                                 \\\n\t}                                                                                                   \\\n}\n\n#define GetRMByte(ModRM) \\\n\t((ModRM) >= 0xc0 ? m_regs.b[Mod_RM.RM.b[ModRM]] : ( (*GetEA[ModRM])(), i80286_check_permission(m_ea_seg, m_eo, I80286_BYTE, I80286_READ), ReadByte( m_ea )) )\n\n#define PutRMByte(ModRM,val)                                                                            \\\n{                                                                                                       \\\n\tif (ModRM >= 0xc0)                                                                                  \\\n\t\tm_regs.b[Mod_RM.RM.b[ModRM]]=val;                                                       \\\n\telse                                                                                                \\\n\t{                                                                                                   \\\n\t\t(*GetEA[ModRM])();                                                                      \\\n\t\ti80286_check_permission(m_ea_seg, m_eo, I80286_BYTE, I80286_WRITE);   \\\n\t\tWriteByte( m_ea,val);                                                                   \\\n\t}                                                                                                   \\\n}\n\n#define PutImmRMByte(ModRM)                                                                             \\\n{                                                                                                       \\\n\tif (ModRM >= 0xc0)                                                                                  \\\n\t\tm_regs.b[Mod_RM.RM.b[ModRM]]=FETCH;                                                     \\\n\telse {                                                                                              \\\n\t\t(*GetEA[ModRM])();                                                                      \\\n\t\ti80286_check_permission(m_ea_seg, m_eo, I80286_BYTE, I80286_WRITE);   \\\n\t\tWriteByte( m_ea , FETCH );                                                              \\\n\t}                                                                                                   \\\n}\n\n#define PutbackRMByte(ModRM,val)                                                                        \\\n{                                                                                                       \\\n\tif (ModRM >= 0xc0)                                                                                  \\\n\t\tm_regs.b[Mod_RM.RM.b[ModRM]]=val;                                                       \\\n\telse                                                                                                \\\n\t{                                                                                                   \\\n\t\ti80286_check_permission(m_ea_seg, m_eo, I80286_BYTE, I80286_WRITE);   \\\n\t\tWriteByte(m_ea,val);                                                                    \\\n\t}                                                                                                   \\\n}\n\n#define DEF_br8(dst,src)                    \\\n\tunsigned ModRM = FETCHOP;               \\\n\tunsigned src = RegByte(ModRM);          \\\n\tunsigned dst = GetRMByte(ModRM)\n\n#define DEF_wr16(dst,src)                   \\\n\tunsigned ModRM = FETCHOP;               \\\n\tunsigned src = RegWord(ModRM);          \\\n\tunsigned dst = GetRMWord(ModRM)\n\n#define DEF_r8b(dst,src)                    \\\n\tunsigned ModRM = FETCHOP;               \\\n\tunsigned dst = RegByte(ModRM);          \\\n\tunsigned src = GetRMByte(ModRM)\n\n#define DEF_r16w(dst,src)                   \\\n\tunsigned ModRM = FETCHOP;               \\\n\tunsigned dst = RegWord(ModRM);          \\\n\tunsigned src = GetRMWord(ModRM)\n\n#define DEF_ald8(dst,src)                   \\\n\tunsigned src = FETCHOP;                 \\\n\tunsigned dst = m_regs.b[AL]\n\n#define DEF_axd16(dst,src)                  \\\n\tunsigned src = FETCHOP;                 \\\n\tunsigned dst = m_regs.w[AX];    \\\n\tsrc += (FETCH << 8)\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i86/readme_msdos_player.txt",
    "content": "Based on MAME 0.149.\n\ni8086_state/i80286_state are removed and all their members are changed to\nglobal variables.\nAll registers can be accessed directly without cpustate->.\n\nTiming codes are removed.\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i86/table186.h",
    "content": "static void (*const PREFIX186(_instruction)[256])() =\n{\n\t\tPREFIX86(_add_br8),           /* 0x00 */\n\t\tPREFIX86(_add_wr16),          /* 0x01 */\n\t\tPREFIX86(_add_r8b),           /* 0x02 */\n\t\tPREFIX86(_add_r16w),          /* 0x03 */\n\t\tPREFIX86(_add_ald8),          /* 0x04 */\n\t\tPREFIX86(_add_axd16),         /* 0x05 */\n\t\tPREFIX86(_push_es),           /* 0x06 */\n\t\tPREFIX86(_pop_es),            /* 0x07 */\n\t\tPREFIX86(_or_br8),            /* 0x08 */\n\t\tPREFIX86(_or_wr16),           /* 0x09 */\n\t\tPREFIX86(_or_r8b),            /* 0x0a */\n\t\tPREFIX86(_or_r16w),           /* 0x0b */\n\t\tPREFIX86(_or_ald8),           /* 0x0c */\n\t\tPREFIX86(_or_axd16),          /* 0x0d */\n\t\tPREFIX86(_push_cs),           /* 0x0e */\n\t\tPREFIX86(_invalid),\n\t\tPREFIX86(_adc_br8),           /* 0x10 */\n\t\tPREFIX86(_adc_wr16),          /* 0x11 */\n\t\tPREFIX86(_adc_r8b),           /* 0x12 */\n\t\tPREFIX86(_adc_r16w),          /* 0x13 */\n\t\tPREFIX86(_adc_ald8),          /* 0x14 */\n\t\tPREFIX86(_adc_axd16),         /* 0x15 */\n\t\tPREFIX86(_push_ss),           /* 0x16 */\n\t\tPREFIX186(_pop_ss),           /* 0x17 */\n\t\tPREFIX86(_sbb_br8),           /* 0x18 */\n\t\tPREFIX86(_sbb_wr16),          /* 0x19 */\n\t\tPREFIX86(_sbb_r8b),           /* 0x1a */\n\t\tPREFIX86(_sbb_r16w),          /* 0x1b */\n\t\tPREFIX86(_sbb_ald8),          /* 0x1c */\n\t\tPREFIX86(_sbb_axd16),         /* 0x1d */\n\t\tPREFIX86(_push_ds),           /* 0x1e */\n\t\tPREFIX86(_pop_ds),            /* 0x1f */\n\t\tPREFIX86(_and_br8),           /* 0x20 */\n\t\tPREFIX86(_and_wr16),          /* 0x21 */\n\t\tPREFIX86(_and_r8b),           /* 0x22 */\n\t\tPREFIX86(_and_r16w),          /* 0x23 */\n\t\tPREFIX86(_and_ald8),          /* 0x24 */\n\t\tPREFIX86(_and_axd16),         /* 0x25 */\n\t\tPREFIX186(_es),               /* 0x26 */\n\t\tPREFIX86(_daa),               /* 0x27 */\n\t\tPREFIX86(_sub_br8),           /* 0x28 */\n\t\tPREFIX86(_sub_wr16),          /* 0x29 */\n\t\tPREFIX86(_sub_r8b),           /* 0x2a */\n\t\tPREFIX86(_sub_r16w),          /* 0x2b */\n\t\tPREFIX86(_sub_ald8),          /* 0x2c */\n\t\tPREFIX86(_sub_axd16),         /* 0x2d */\n\t\tPREFIX186(_cs),               /* 0x2e */\n\t\tPREFIX86(_das),            /* 0x2f */\n\t\tPREFIX86(_xor_br8),           /* 0x30 */\n\t\tPREFIX86(_xor_wr16),          /* 0x31 */\n\t\tPREFIX86(_xor_r8b),           /* 0x32 */\n\t\tPREFIX86(_xor_r16w),          /* 0x33 */\n\t\tPREFIX86(_xor_ald8),          /* 0x34 */\n\t\tPREFIX86(_xor_axd16),         /* 0x35 */\n\t\tPREFIX186(_ss),               /* 0x36 */\n\t\tPREFIX86(_aaa),            /* 0x37 */\n\t\tPREFIX86(_cmp_br8),           /* 0x38 */\n\t\tPREFIX86(_cmp_wr16),          /* 0x39 */\n\t\tPREFIX86(_cmp_r8b),           /* 0x3a */\n\t\tPREFIX86(_cmp_r16w),          /* 0x3b */\n\t\tPREFIX86(_cmp_ald8),          /* 0x3c */\n\t\tPREFIX86(_cmp_axd16),         /* 0x3d */\n\t\tPREFIX186(_ds),                /* 0x3e */\n\t\tPREFIX86(_aas),            /* 0x3f */\n\t\tPREFIX86(_inc_ax),            /* 0x40 */\n\t\tPREFIX86(_inc_cx),            /* 0x41 */\n\t\tPREFIX86(_inc_dx),            /* 0x42 */\n\t\tPREFIX86(_inc_bx),            /* 0x43 */\n\t\tPREFIX86(_inc_sp),            /* 0x44 */\n\t\tPREFIX86(_inc_bp),            /* 0x45 */\n\t\tPREFIX86(_inc_si),            /* 0x46 */\n\t\tPREFIX86(_inc_di),            /* 0x47 */\n\t\tPREFIX86(_dec_ax),            /* 0x48 */\n\t\tPREFIX86(_dec_cx),            /* 0x49 */\n\t\tPREFIX86(_dec_dx),            /* 0x4a */\n\t\tPREFIX86(_dec_bx),            /* 0x4b */\n\t\tPREFIX86(_dec_sp),            /* 0x4c */\n\t\tPREFIX86(_dec_bp),            /* 0x4d */\n\t\tPREFIX86(_dec_si),            /* 0x4e */\n\t\tPREFIX86(_dec_di),            /* 0x4f */\n\t\tPREFIX86(_push_ax),           /* 0x50 */\n\t\tPREFIX86(_push_cx),           /* 0x51 */\n\t\tPREFIX86(_push_dx),           /* 0x52 */\n\t\tPREFIX86(_push_bx),           /* 0x53 */\n\t\tPREFIX86(_push_sp),           /* 0x54 */\n\t\tPREFIX86(_push_bp),           /* 0x55 */\n\t\tPREFIX86(_push_si),           /* 0x56 */\n\t\tPREFIX86(_push_di),           /* 0x57 */\n\t\tPREFIX86(_pop_ax),            /* 0x58 */\n\t\tPREFIX86(_pop_cx),            /* 0x59 */\n\t\tPREFIX86(_pop_dx),            /* 0x5a */\n\t\tPREFIX86(_pop_bx),            /* 0x5b */\n\t\tPREFIX86(_pop_sp),            /* 0x5c */\n\t\tPREFIX86(_pop_bp),            /* 0x5d */\n\t\tPREFIX86(_pop_si),            /* 0x5e */\n\t\tPREFIX86(_pop_di),            /* 0x5f */\n\t\tPREFIX186(_pusha),             /* 0x60 */\n\t\tPREFIX186(_popa),              /* 0x61 */\n\t\tPREFIX186(_bound),             /* 0x62 */\n\t\tPREFIX86(_invalid),\n\t\tPREFIX86(_invalid),\n\t\tPREFIX86(_invalid),\n\t\tPREFIX86(_invalid),\n\t\tPREFIX86(_invalid),\n\t\tPREFIX186(_push_d16),          /* 0x68 */\n\t\tPREFIX186(_imul_d16),          /* 0x69 */\n\t\tPREFIX186(_push_d8),           /* 0x6a */\n\t\tPREFIX186(_imul_d8),           /* 0x6b */\n\t\tPREFIX186(_insb),              /* 0x6c */\n\t\tPREFIX186(_insw),              /* 0x6d */\n\t\tPREFIX186(_outsb),             /* 0x6e */\n\t\tPREFIX186(_outsw),             /* 0x6f */\n\t\tPREFIX86(_jo),                /* 0x70 */\n\t\tPREFIX86(_jno),               /* 0x71 */\n\t\tPREFIX86(_jb),                /* 0x72 */\n\t\tPREFIX86(_jnb),               /* 0x73 */\n\t\tPREFIX86(_jz),                /* 0x74 */\n\t\tPREFIX86(_jnz),               /* 0x75 */\n\t\tPREFIX86(_jbe),               /* 0x76 */\n\t\tPREFIX86(_jnbe),              /* 0x77 */\n\t\tPREFIX86(_js),                /* 0x78 */\n\t\tPREFIX86(_jns),               /* 0x79 */\n\t\tPREFIX86(_jp),                /* 0x7a */\n\t\tPREFIX86(_jnp),               /* 0x7b */\n\t\tPREFIX86(_jl),                /* 0x7c */\n\t\tPREFIX86(_jnl),               /* 0x7d */\n\t\tPREFIX86(_jle),               /* 0x7e */\n\t\tPREFIX86(_jnle),              /* 0x7f */\n\t\tPREFIX86(_80pre),             /* 0x80 */\n\t\tPREFIX86(_81pre),             /* 0x81 */\n\t\tPREFIX86(_82pre),           /* 0x82 */\n\t\tPREFIX86(_83pre),             /* 0x83 */\n\t\tPREFIX86(_test_br8),          /* 0x84 */\n\t\tPREFIX86(_test_wr16),         /* 0x85 */\n\t\tPREFIX86(_xchg_br8),          /* 0x86 */\n\t\tPREFIX86(_xchg_wr16),         /* 0x87 */\n\t\tPREFIX86(_mov_br8),           /* 0x88 */\n\t\tPREFIX86(_mov_wr16),          /* 0x89 */\n\t\tPREFIX86(_mov_r8b),           /* 0x8a */\n\t\tPREFIX86(_mov_r16w),          /* 0x8b */\n\t\tPREFIX86(_mov_wsreg),         /* 0x8c */\n\t\tPREFIX86(_lea),               /* 0x8d */\n\t\tPREFIX186(_mov_sregw),        /* 0x8e */\n\t\tPREFIX86(_popw),              /* 0x8f */\n\t\tPREFIX86(_nop),               /* 0x90 */\n\t\tPREFIX86(_xchg_axcx),         /* 0x91 */\n\t\tPREFIX86(_xchg_axdx),         /* 0x92 */\n\t\tPREFIX86(_xchg_axbx),         /* 0x93 */\n\t\tPREFIX86(_xchg_axsp),         /* 0x94 */\n\t\tPREFIX86(_xchg_axbp),         /* 0x95 */\n\t\tPREFIX86(_xchg_axsi),         /* 0x97 */\n\t\tPREFIX86(_xchg_axdi),         /* 0x97 */\n\t\tPREFIX86(_cbw),               /* 0x98 */\n\t\tPREFIX86(_cwd),               /* 0x99 */\n\t\tPREFIX86(_call_far),          /* 0x9a */\n\t\tPREFIX86(_wait),              /* 0x9b */\n\t\tPREFIX86(_pushf),             /* 0x9c */\n\t\tPREFIX86(_popf),              /* 0x9d */\n\t\tPREFIX86(_sahf),              /* 0x9e */\n\t\tPREFIX86(_lahf),              /* 0x9f */\n\t\tPREFIX86(_mov_aldisp),        /* 0xa0 */\n\t\tPREFIX86(_mov_axdisp),        /* 0xa1 */\n\t\tPREFIX86(_mov_dispal),        /* 0xa2 */\n\t\tPREFIX86(_mov_dispax),        /* 0xa3 */\n\t\tPREFIX86(_movsb),             /* 0xa4 */\n\t\tPREFIX86(_movsw),             /* 0xa5 */\n\t\tPREFIX86(_cmpsb),             /* 0xa6 */\n\t\tPREFIX86(_cmpsw),             /* 0xa7 */\n\t\tPREFIX86(_test_ald8),         /* 0xa8 */\n\t\tPREFIX86(_test_axd16),        /* 0xa9 */\n\t\tPREFIX86(_stosb),             /* 0xaa */\n\t\tPREFIX86(_stosw),             /* 0xab */\n\t\tPREFIX86(_lodsb),             /* 0xac */\n\t\tPREFIX86(_lodsw),             /* 0xad */\n\t\tPREFIX86(_scasb),             /* 0xae */\n\t\tPREFIX86(_scasw),             /* 0xaf */\n\t\tPREFIX86(_mov_ald8),          /* 0xb0 */\n\t\tPREFIX86(_mov_cld8),          /* 0xb1 */\n\t\tPREFIX86(_mov_dld8),          /* 0xb2 */\n\t\tPREFIX86(_mov_bld8),          /* 0xb3 */\n\t\tPREFIX86(_mov_ahd8),          /* 0xb4 */\n\t\tPREFIX86(_mov_chd8),          /* 0xb5 */\n\t\tPREFIX86(_mov_dhd8),          /* 0xb6 */\n\t\tPREFIX86(_mov_bhd8),          /* 0xb7 */\n\t\tPREFIX86(_mov_axd16),         /* 0xb8 */\n\t\tPREFIX86(_mov_cxd16),         /* 0xb9 */\n\t\tPREFIX86(_mov_dxd16),         /* 0xba */\n\t\tPREFIX86(_mov_bxd16),         /* 0xbb */\n\t\tPREFIX86(_mov_spd16),         /* 0xbc */\n\t\tPREFIX86(_mov_bpd16),         /* 0xbd */\n\t\tPREFIX86(_mov_sid16),         /* 0xbe */\n\t\tPREFIX86(_mov_did16),         /* 0xbf */\n\t\tPREFIX186(_rotshft_bd8),       /* 0xc0 */\n\t\tPREFIX186(_rotshft_wd8),       /* 0xc1 */\n\t\tPREFIX86(_ret_d16),           /* 0xc2 */\n\t\tPREFIX86(_ret),               /* 0xc3 */\n\t\tPREFIX86(_les_dw),            /* 0xc4 */\n\t\tPREFIX86(_lds_dw),            /* 0xc5 */\n\t\tPREFIX86(_mov_bd8),           /* 0xc6 */\n\t\tPREFIX86(_mov_wd16),          /* 0xc7 */\n\t\tPREFIX186(_enter),             /* 0xc8 */\n\t\tPREFIX186(_leave),             /* 0xc9 */\n\t\tPREFIX86(_retf_d16),          /* 0xca */\n\t\tPREFIX86(_retf),              /* 0xcb */\n\t\tPREFIX86(_int3),              /* 0xcc */\n\t\tPREFIX86(_int),               /* 0xcd */\n\t\tPREFIX86(_into),              /* 0xce */\n\t\tPREFIX86(_iret),              /* 0xcf */\n\t\tPREFIX86(_rotshft_b),         /* 0xd0 */\n\t\tPREFIX86(_rotshft_w),         /* 0xd1 */\n\t\tPREFIX186(_rotshft_bcl),       /* 0xd2 */\n\t\tPREFIX186(_rotshft_wcl),       /* 0xd3 */\n\t\tPREFIX86(_aam),               /* 0xd4 */\n\t\tPREFIX86(_aad),               /* 0xd5 */\n\t\tPREFIX86(_invalid),\n\t\tPREFIX86(_xlat),              /* 0xd7 */\n\t\tPREFIX86(_escape),            /* 0xd8 */\n\t\tPREFIX86(_escape),            /* 0xd9 */\n\t\tPREFIX86(_escape),            /* 0xda */\n\t\tPREFIX86(_escape),            /* 0xdb */\n\t\tPREFIX86(_escape),            /* 0xdc */\n\t\tPREFIX86(_escape),            /* 0xdd */\n\t\tPREFIX86(_escape),            /* 0xde */\n\t\tPREFIX86(_escape),            /* 0xdf */\n\t\tPREFIX86(_loopne),            /* 0xe0 */\n\t\tPREFIX86(_loope),             /* 0xe1 */\n\t\tPREFIX86(_loop),              /* 0xe2 */\n\t\tPREFIX86(_jcxz),              /* 0xe3 */\n\t\tPREFIX86(_inal),              /* 0xe4 */\n\t\tPREFIX86(_inax),              /* 0xe5 */\n\t\tPREFIX86(_outal),             /* 0xe6 */\n\t\tPREFIX86(_outax),             /* 0xe7 */\n\t\tPREFIX86(_call_d16),          /* 0xe8 */\n\t\tPREFIX86(_jmp_d16),           /* 0xe9 */\n\t\tPREFIX86(_jmp_far),           /* 0xea */\n\t\tPREFIX86(_jmp_d8),            /* 0xeb */\n\t\tPREFIX86(_inaldx),            /* 0xec */\n\t\tPREFIX86(_inaxdx),            /* 0xed */\n\t\tPREFIX86(_outdxal),           /* 0xee */\n\t\tPREFIX86(_outdxax),           /* 0xef */\n\t\tPREFIX86(_lock),              /* 0xf0 */\n\t\tPREFIX86(_invalid),           /* 0xf1 */\n\t\tPREFIX186(_repne),             /* 0xf2 */\n\t\tPREFIX186(_repe),              /* 0xf3 */\n\t\tPREFIX86(_hlt),     /* 0xf4 */\n\t\tPREFIX86(_cmc),               /* 0xf5 */\n\t\tPREFIX86(_f6pre),             /* 0xf6 */\n\t\tPREFIX86(_f7pre),             /* 0xf7 */\n\t\tPREFIX86(_clc),               /* 0xf8 */\n\t\tPREFIX86(_stc),               /* 0xf9 */\n\t\tPREFIX86(_cli),               /* 0xfa */\n\t\tPREFIX186(_sti),              /* 0xfb */\n\t\tPREFIX86(_cld),               /* 0xfc */\n\t\tPREFIX86(_std),               /* 0xfd */\n\t\tPREFIX86(_fepre),             /* 0xfe */\n\t\tPREFIX86(_ffpre)             /* 0xff */\n};\n\n#if defined(BIGCASE) && !defined(RS6000)\n\t/* Some compilers cannot handle large case statements */\n#define TABLE186 \\\n\tswitch(FETCHOP)\\\n\t{\\\n\tcase 0x00:    PREFIX86(_add_br8)(); break;\\\n\tcase 0x01:    PREFIX86(_add_wr16)(); break;\\\n\tcase 0x02:    PREFIX86(_add_r8b)(); break;\\\n\tcase 0x03:    PREFIX86(_add_r16w)(); break;\\\n\tcase 0x04:    PREFIX86(_add_ald8)(); break;\\\n\tcase 0x05:    PREFIX86(_add_axd16)(); break;\\\n\tcase 0x06:    PREFIX86(_push_es)(); break;\\\n\tcase 0x07:    PREFIX86(_pop_es)(); break;\\\n\tcase 0x08:    PREFIX86(_or_br8)(); break;\\\n\tcase 0x09:    PREFIX86(_or_wr16)(); break;\\\n\tcase 0x0a:    PREFIX86(_or_r8b)(); break;\\\n\tcase 0x0b:    PREFIX86(_or_r16w)(); break;\\\n\tcase 0x0c:    PREFIX86(_or_ald8)(); break;\\\n\tcase 0x0d:    PREFIX86(_or_axd16)(); break;\\\n\tcase 0x0e:    PREFIX86(_push_cs)(); break;\\\n\tcase 0x0f:    PREFIX86(_invalid)(); break;\\\n\tcase 0x10:    PREFIX86(_adc_br8)(); break;\\\n\tcase 0x11:    PREFIX86(_adc_wr16)(); break;\\\n\tcase 0x12:    PREFIX86(_adc_r8b)(); break;\\\n\tcase 0x13:    PREFIX86(_adc_r16w)(); break;\\\n\tcase 0x14:    PREFIX86(_adc_ald8)(); break;\\\n\tcase 0x15:    PREFIX86(_adc_axd16)(); break;\\\n\tcase 0x16:    PREFIX86(_push_ss)(); break;\\\n\tcase 0x17:    PREFIX86(_pop_ss)(); break;\\\n\tcase 0x18:    PREFIX86(_sbb_br8)(); break;\\\n\tcase 0x19:    PREFIX86(_sbb_wr16)(); break;\\\n\tcase 0x1a:    PREFIX86(_sbb_r8b)(); break;\\\n\tcase 0x1b:    PREFIX86(_sbb_r16w)(); break;\\\n\tcase 0x1c:    PREFIX86(_sbb_ald8)(); break;\\\n\tcase 0x1d:    PREFIX86(_sbb_axd16)(); break;\\\n\tcase 0x1e:    PREFIX86(_push_ds)(); break;\\\n\tcase 0x1f:    PREFIX86(_pop_ds)(); break;\\\n\tcase 0x20:    PREFIX86(_and_br8)(); break;\\\n\tcase 0x21:    PREFIX86(_and_wr16)(); break;\\\n\tcase 0x22:    PREFIX86(_and_r8b)(); break;\\\n\tcase 0x23:    PREFIX86(_and_r16w)(); break;\\\n\tcase 0x24:    PREFIX86(_and_ald8)(); break;\\\n\tcase 0x25:    PREFIX86(_and_axd16)(); break;\\\n\tcase 0x26:    PREFIX86(_es)(); break;\\\n\tcase 0x27:    PREFIX86(_daa)(); break;\\\n\tcase 0x28:    PREFIX86(_sub_br8)(); break;\\\n\tcase 0x29:    PREFIX86(_sub_wr16)(); break;\\\n\tcase 0x2a:    PREFIX86(_sub_r8b)(); break;\\\n\tcase 0x2b:    PREFIX86(_sub_r16w)(); break;\\\n\tcase 0x2c:    PREFIX86(_sub_ald8)(); break;\\\n\tcase 0x2d:    PREFIX86(_sub_axd16)(); break;\\\n\tcase 0x2e:    PREFIX86(_cs)(); break;\\\n\tcase 0x2f:    PREFIX86(_das)(); break;\\\n\tcase 0x30:    PREFIX86(_xor_br8)(); break;\\\n\tcase 0x31:    PREFIX86(_xor_wr16)(); break;\\\n\tcase 0x32:    PREFIX86(_xor_r8b)(); break;\\\n\tcase 0x33:    PREFIX86(_xor_r16w)(); break;\\\n\tcase 0x34:    PREFIX86(_xor_ald8)(); break;\\\n\tcase 0x35:    PREFIX86(_xor_axd16)(); break;\\\n\tcase 0x36:    PREFIX86(_ss)(); break;\\\n\tcase 0x37:    PREFIX86(_aaa)(); break;\\\n\tcase 0x38:    PREFIX86(_cmp_br8)(); break;\\\n\tcase 0x39:    PREFIX86(_cmp_wr16)(); break;\\\n\tcase 0x3a:    PREFIX86(_cmp_r8b)(); break;\\\n\tcase 0x3b:    PREFIX86(_cmp_r16w)(); break;\\\n\tcase 0x3c:    PREFIX86(_cmp_ald8)(); break;\\\n\tcase 0x3d:    PREFIX86(_cmp_axd16)(); break;\\\n\tcase 0x3e:    PREFIX86(_ds)(); break;\\\n\tcase 0x3f:    PREFIX86(_aas)(); break;\\\n\tcase 0x40:    PREFIX86(_inc_ax)(); break;\\\n\tcase 0x41:    PREFIX86(_inc_cx)(); break;\\\n\tcase 0x42:    PREFIX86(_inc_dx)(); break;\\\n\tcase 0x43:    PREFIX86(_inc_bx)(); break;\\\n\tcase 0x44:    PREFIX86(_inc_sp)(); break;\\\n\tcase 0x45:    PREFIX86(_inc_bp)(); break;\\\n\tcase 0x46:    PREFIX86(_inc_si)(); break;\\\n\tcase 0x47:    PREFIX86(_inc_di)(); break;\\\n\tcase 0x48:    PREFIX86(_dec_ax)(); break;\\\n\tcase 0x49:    PREFIX86(_dec_cx)(); break;\\\n\tcase 0x4a:    PREFIX86(_dec_dx)(); break;\\\n\tcase 0x4b:    PREFIX86(_dec_bx)(); break;\\\n\tcase 0x4c:    PREFIX86(_dec_sp)(); break;\\\n\tcase 0x4d:    PREFIX86(_dec_bp)(); break;\\\n\tcase 0x4e:    PREFIX86(_dec_si)(); break;\\\n\tcase 0x4f:    PREFIX86(_dec_di)(); break;\\\n\tcase 0x50:    PREFIX86(_push_ax)(); break;\\\n\tcase 0x51:    PREFIX86(_push_cx)(); break;\\\n\tcase 0x52:    PREFIX86(_push_dx)(); break;\\\n\tcase 0x53:    PREFIX86(_push_bx)(); break;\\\n\tcase 0x54:    PREFIX86(_push_sp)(); break;\\\n\tcase 0x55:    PREFIX86(_push_bp)(); break;\\\n\tcase 0x56:    PREFIX86(_push_si)(); break;\\\n\tcase 0x57:    PREFIX86(_push_di)(); break;\\\n\tcase 0x58:    PREFIX86(_pop_ax)(); break;\\\n\tcase 0x59:    PREFIX86(_pop_cx)(); break;\\\n\tcase 0x5a:    PREFIX86(_pop_dx)(); break;\\\n\tcase 0x5b:    PREFIX86(_pop_bx)(); break;\\\n\tcase 0x5c:    PREFIX86(_pop_sp)(); break;\\\n\tcase 0x5d:    PREFIX86(_pop_bp)(); break;\\\n\tcase 0x5e:    PREFIX86(_pop_si)(); break;\\\n\tcase 0x5f:    PREFIX86(_pop_di)(); break;\\\n\t\t\tcase 0x60:    PREFIX186(_pusha)(); break;\\\n\t\t\tcase 0x61:    PREFIX186(_popa)(); break;\\\n\t\t\tcase 0x62:    PREFIX186(_bound)(); break;\\\n\tcase 0x63:    PREFIX86(_invalid)(); break;\\\n\tcase 0x64:    PREFIX86(_invalid)(); break;\\\n\tcase 0x65:    PREFIX86(_invalid)(); break;\\\n\tcase 0x66:    PREFIX86(_invalid)(); break;\\\n\tcase 0x67:    PREFIX86(_invalid)(); break;\\\n\t\t\tcase 0x68:    PREFIX186(_push_d16)(); break;\\\n\t\t\tcase 0x69:    PREFIX186(_imul_d16)(); break;\\\n\t\t\tcase 0x6a:    PREFIX186(_push_d8)(); break;\\\n\t\t\tcase 0x6b:    PREFIX186(_imul_d8)(); break;\\\n\t\t\tcase 0x6c:    PREFIX186(_insb)(); break;\\\n\t\t\tcase 0x6d:    PREFIX186(_insw)(); break;\\\n\t\t\tcase 0x6e:    PREFIX186(_outsb)(); break;\\\n\t\t\tcase 0x6f:    PREFIX186(_outsw)(); break;\\\n\tcase 0x70:    PREFIX86(_jo)(); break;\\\n\tcase 0x71:    PREFIX86(_jno)(); break;\\\n\tcase 0x72:    PREFIX86(_jb)(); break;\\\n\tcase 0x73:    PREFIX86(_jnb)(); break;\\\n\tcase 0x74:    PREFIX86(_jz)(); break;\\\n\tcase 0x75:    PREFIX86(_jnz)(); break;\\\n\tcase 0x76:    PREFIX86(_jbe)(); break;\\\n\tcase 0x77:    PREFIX86(_jnbe)(); break;\\\n\tcase 0x78:    PREFIX86(_js)(); break;\\\n\tcase 0x79:    PREFIX86(_jns)(); break;\\\n\tcase 0x7a:    PREFIX86(_jp)(); break;\\\n\tcase 0x7b:    PREFIX86(_jnp)(); break;\\\n\tcase 0x7c:    PREFIX86(_jl)(); break;\\\n\tcase 0x7d:    PREFIX86(_jnl)(); break;\\\n\tcase 0x7e:    PREFIX86(_jle)(); break;\\\n\tcase 0x7f:    PREFIX86(_jnle)(); break;\\\n\tcase 0x80:    PREFIX86(_80pre)(); break;\\\n\tcase 0x81:    PREFIX86(_81pre)(); break;\\\n\tcase 0x82:    PREFIX86(_82pre)(); break;\\\n\tcase 0x83:    PREFIX86(_83pre)(); break;\\\n\tcase 0x84:    PREFIX86(_test_br8)(); break;\\\n\tcase 0x85:    PREFIX86(_test_wr16)(); break;\\\n\tcase 0x86:    PREFIX86(_xchg_br8)(); break;\\\n\tcase 0x87:    PREFIX86(_xchg_wr16)(); break;\\\n\tcase 0x88:    PREFIX86(_mov_br8)(); break;\\\n\tcase 0x89:    PREFIX86(_mov_wr16)(); break;\\\n\tcase 0x8a:    PREFIX86(_mov_r8b)(); break;\\\n\tcase 0x8b:    PREFIX86(_mov_r16w)(); break;\\\n\tcase 0x8c:    PREFIX86(_mov_wsreg)(); break;\\\n\tcase 0x8d:    PREFIX86(_lea)(); break;\\\n\tcase 0x8e:    PREFIX86(_mov_sregw)(); break;\\\n\tcase 0x8f:    PREFIX86(_popw)(); break;\\\n\tcase 0x90:    PREFIX86(_nop)(); break;\\\n\tcase 0x91:    PREFIX86(_xchg_axcx)(); break;\\\n\tcase 0x92:    PREFIX86(_xchg_axdx)(); break;\\\n\tcase 0x93:    PREFIX86(_xchg_axbx)(); break;\\\n\tcase 0x94:    PREFIX86(_xchg_axsp)(); break;\\\n\tcase 0x95:    PREFIX86(_xchg_axbp)(); break;\\\n\tcase 0x96:    PREFIX86(_xchg_axsi)(); break;\\\n\tcase 0x97:    PREFIX86(_xchg_axdi)(); break;\\\n\tcase 0x98:    PREFIX86(_cbw)(); break;\\\n\tcase 0x99:    PREFIX86(_cwd)(); break;\\\n\tcase 0x9a:    PREFIX86(_call_far)(); break;\\\n\tcase 0x9b:    PREFIX86(_wait)(); break;\\\n\tcase 0x9c:    PREFIX86(_pushf)(); break;\\\n\tcase 0x9d:    PREFIX86(_popf)(); break;\\\n\tcase 0x9e:    PREFIX86(_sahf)(); break;\\\n\tcase 0x9f:    PREFIX86(_lahf)(); break;\\\n\tcase 0xa0:    PREFIX86(_mov_aldisp)(); break;\\\n\tcase 0xa1:    PREFIX86(_mov_axdisp)(); break;\\\n\tcase 0xa2:    PREFIX86(_mov_dispal)(); break;\\\n\tcase 0xa3:    PREFIX86(_mov_dispax)(); break;\\\n\tcase 0xa4:    PREFIX86(_movsb)(); break;\\\n\tcase 0xa5:    PREFIX86(_movsw)(); break;\\\n\tcase 0xa6:    PREFIX86(_cmpsb)(); break;\\\n\tcase 0xa7:    PREFIX86(_cmpsw)(); break;\\\n\tcase 0xa8:    PREFIX86(_test_ald8)(); break;\\\n\tcase 0xa9:    PREFIX86(_test_axd16)(); break;\\\n\tcase 0xaa:    PREFIX86(_stosb)(); break;\\\n\tcase 0xab:    PREFIX86(_stosw)(); break;\\\n\tcase 0xac:    PREFIX86(_lodsb)(); break;\\\n\tcase 0xad:    PREFIX86(_lodsw)(); break;\\\n\tcase 0xae:    PREFIX86(_scasb)(); break;\\\n\tcase 0xaf:    PREFIX86(_scasw)(); break;\\\n\tcase 0xb0:    PREFIX86(_mov_ald8)(); break;\\\n\tcase 0xb1:    PREFIX86(_mov_cld8)(); break;\\\n\tcase 0xb2:    PREFIX86(_mov_dld8)(); break;\\\n\tcase 0xb3:    PREFIX86(_mov_bld8)(); break;\\\n\tcase 0xb4:    PREFIX86(_mov_ahd8)(); break;\\\n\tcase 0xb5:    PREFIX86(_mov_chd8)(); break;\\\n\tcase 0xb6:    PREFIX86(_mov_dhd8)(); break;\\\n\tcase 0xb7:    PREFIX86(_mov_bhd8)(); break;\\\n\tcase 0xb8:    PREFIX86(_mov_axd16)(); break;\\\n\tcase 0xb9:    PREFIX86(_mov_cxd16)(); break;\\\n\tcase 0xba:    PREFIX86(_mov_dxd16)(); break;\\\n\tcase 0xbb:    PREFIX86(_mov_bxd16)(); break;\\\n\tcase 0xbc:    PREFIX86(_mov_spd16)(); break;\\\n\tcase 0xbd:    PREFIX86(_mov_bpd16)(); break;\\\n\tcase 0xbe:    PREFIX86(_mov_sid16)(); break;\\\n\tcase 0xbf:    PREFIX86(_mov_did16)(); break;\\\n\t\t\tcase 0xc0:    PREFIX186(_rotshft_bd8)(); break;\\\n\t\t\tcase 0xc1:    PREFIX186(_rotshft_wd8)(); break;\\\n\tcase 0xc2:    PREFIX86(_ret_d16)(); break;\\\n\tcase 0xc3:    PREFIX86(_ret)(); break;\\\n\tcase 0xc4:    PREFIX86(_les_dw)(); break;\\\n\tcase 0xc5:    PREFIX86(_lds_dw)(); break;\\\n\tcase 0xc6:    PREFIX86(_mov_bd8)(); break;\\\n\tcase 0xc7:    PREFIX86(_mov_wd16)(); break;\\\n\t\t\tcase 0xc8:    PREFIX186(_enter)(); break;\\\n\t\t\tcase 0xc9:    PREFIX186(_leave)(); break;\\\n\tcase 0xca:    PREFIX86(_retf_d16)(); break;\\\n\tcase 0xcb:    PREFIX86(_retf)(); break;\\\n\tcase 0xcc:    PREFIX86(_int3)(); break;\\\n\tcase 0xcd:    PREFIX86(_int)(); break;\\\n\tcase 0xce:    PREFIX86(_into)(); break;\\\n\tcase 0xcf:    PREFIX86(_iret)(); break;\\\n\t\t\tcase 0xd0:    PREFIX86(_rotshft_b)(); break;\\\n\t\t\tcase 0xd1:    PREFIX86(_rotshft_w)(); break;\\\n\t\t\tcase 0xd2:    PREFIX186(_rotshft_bcl)(); break;\\\n\t\t\tcase 0xd3:    PREFIX186(_rotshft_wcl)(); break;\\\n\tcase 0xd4:    PREFIX86(_aam)(); break;\\\n\tcase 0xd5:    PREFIX86(_aad)(); break;\\\n\tcase 0xd6:    PREFIX86(_invalid)(); break;\\\n\tcase 0xd7:    PREFIX86(_xlat)(); break;\\\n\tcase 0xd8:    PREFIX86(_escape)(); break;\\\n\tcase 0xd9:    PREFIX86(_escape)(); break;\\\n\tcase 0xda:    PREFIX86(_escape)(); break;\\\n\tcase 0xdb:    PREFIX86(_escape)(); break;\\\n\tcase 0xdc:    PREFIX86(_escape)(); break;\\\n\tcase 0xdd:    PREFIX86(_escape)(); break;\\\n\tcase 0xde:    PREFIX86(_escape)(); break;\\\n\tcase 0xdf:    PREFIX86(_escape)(); break;\\\n\tcase 0xe0:    PREFIX86(_loopne)(); break;\\\n\tcase 0xe1:    PREFIX86(_loope)(); break;\\\n\tcase 0xe2:    PREFIX86(_loop)(); break;\\\n\tcase 0xe3:    PREFIX86(_jcxz)(); break;\\\n\tcase 0xe4:    PREFIX86(_inal)(); break;\\\n\tcase 0xe5:    PREFIX86(_inax)(); break;\\\n\tcase 0xe6:    PREFIX86(_outal)(); break;\\\n\tcase 0xe7:    PREFIX86(_outax)(); break;\\\n\tcase 0xe8:    PREFIX86(_call_d16)(); break;\\\n\tcase 0xe9:    PREFIX86(_jmp_d16)(); break;\\\n\tcase 0xea:    PREFIX86(_jmp_far)(); break;\\\n\tcase 0xeb:    PREFIX86(_jmp_d8)(); break;\\\n\tcase 0xec:    PREFIX86(_inaldx)(); break;\\\n\tcase 0xed:    PREFIX86(_inaxdx)(); break;\\\n\tcase 0xee:    PREFIX86(_outdxal)(); break;\\\n\tcase 0xef:    PREFIX86(_outdxax)(); break;\\\n\tcase 0xf0:    PREFIX86(_lock)(); break;\\\n\tcase 0xf1:    PREFIX86(_invalid)(); break;\\\n\tcase 0xf2:    PREFIX186(_repne)(); break;\\\n\tcase 0xf3:    PREFIX186(_repe)(); break;\\\n\tcase 0xf4:    PREFIX86(_hlt)(); break;\\\n\tcase 0xf5:    PREFIX86(_cmc)(); break;\\\n\tcase 0xf6:    PREFIX86(_f6pre)(); break;\\\n\tcase 0xf7:    PREFIX86(_f7pre)(); break;\\\n\tcase 0xf8:    PREFIX86(_clc)(); break;\\\n\tcase 0xf9:    PREFIX86(_stc)(); break;\\\n\tcase 0xfa:    PREFIX86(_cli)(); break;\\\n\tcase 0xfb:    PREFIX186(_sti)(); break;\\\n\tcase 0xfc:    PREFIX86(_cld)(); break;\\\n\tcase 0xfd:    PREFIX86(_std)(); break;\\\n\tcase 0xfe:    PREFIX86(_fepre)(); break;\\\n\tcase 0xff:    PREFIX86(_ffpre)(); break;\\\n\t};\n#else\n#define TABLE186 PREFIX186(_instruction)[FETCHOP]();\n#endif\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i86/table286.h",
    "content": "/*\n * special 286 protected mode instructions missing\n * at the time the same like table186.h\n */\n\nstatic void (*const PREFIX286(_instruction)[256])() =\n{\n\t\tPREFIX86(_add_br8),         /* 0x00 */\n\t\tPREFIX86(_add_wr16),            /* 0x01 */\n\t\tPREFIX86(_add_r8b),         /* 0x02 */\n\t\tPREFIX86(_add_r16w),            /* 0x03 */\n\t\tPREFIX86(_add_ald8),            /* 0x04 */\n\t\tPREFIX86(_add_axd16),           /* 0x05 */\n\t\tPREFIX86(_push_es),         /* 0x06 */\n\t\tPREFIX86(_pop_es),          /* 0x07 */\n\t\tPREFIX86(_or_br8),          /* 0x08 */\n\t\tPREFIX86(_or_wr16),         /* 0x09 */\n\t\tPREFIX86(_or_r8b),          /* 0x0a */\n\t\tPREFIX86(_or_r16w),         /* 0x0b */\n\t\tPREFIX86(_or_ald8),         /* 0x0c */\n\t\tPREFIX86(_or_axd16),            /* 0x0d */\n\t\tPREFIX86(_push_cs),         /* 0x0e */\n\t\tPREFIX286(_0fpre),\n\t\tPREFIX86(_adc_br8),         /* 0x10 */\n\t\tPREFIX86(_adc_wr16),            /* 0x11 */\n\t\tPREFIX86(_adc_r8b),         /* 0x12 */\n\t\tPREFIX86(_adc_r16w),            /* 0x13 */\n\t\tPREFIX86(_adc_ald8),            /* 0x14 */\n\t\tPREFIX86(_adc_axd16),           /* 0x15 */\n\t\tPREFIX86(_push_ss),         /* 0x16 */\n\t\tPREFIX86(_pop_ss),          /* 0x17 */\n\t\tPREFIX86(_sbb_br8),         /* 0x18 */\n\t\tPREFIX86(_sbb_wr16),            /* 0x19 */\n\t\tPREFIX86(_sbb_r8b),         /* 0x1a */\n\t\tPREFIX86(_sbb_r16w),            /* 0x1b */\n\t\tPREFIX86(_sbb_ald8),            /* 0x1c */\n\t\tPREFIX86(_sbb_axd16),           /* 0x1d */\n\t\tPREFIX86(_push_ds),         /* 0x1e */\n\t\tPREFIX86(_pop_ds),          /* 0x1f */\n\t\tPREFIX86(_and_br8),         /* 0x20 */\n\t\tPREFIX86(_and_wr16),            /* 0x21 */\n\t\tPREFIX86(_and_r8b),         /* 0x22 */\n\t\tPREFIX86(_and_r16w),            /* 0x23 */\n\t\tPREFIX86(_and_ald8),            /* 0x24 */\n\t\tPREFIX86(_and_axd16),           /* 0x25 */\n\t\tPREFIX86(_es),              /* 0x26 */\n\t\tPREFIX86(_daa),             /* 0x27 */\n\t\tPREFIX86(_sub_br8),         /* 0x28 */\n\t\tPREFIX86(_sub_wr16),            /* 0x29 */\n\t\tPREFIX86(_sub_r8b),         /* 0x2a */\n\t\tPREFIX86(_sub_r16w),            /* 0x2b */\n\t\tPREFIX86(_sub_ald8),            /* 0x2c */\n\t\tPREFIX86(_sub_axd16),           /* 0x2d */\n\t\tPREFIX86(_cs),              /* 0x2e */\n\t\tPREFIX86(_das),             /* 0x2f */\n\t\tPREFIX86(_xor_br8),         /* 0x30 */\n\t\tPREFIX86(_xor_wr16),            /* 0x31 */\n\t\tPREFIX86(_xor_r8b),         /* 0x32 */\n\t\tPREFIX86(_xor_r16w),            /* 0x33 */\n\t\tPREFIX86(_xor_ald8),            /* 0x34 */\n\t\tPREFIX86(_xor_axd16),           /* 0x35 */\n\t\tPREFIX86(_ss),              /* 0x36 */\n\t\tPREFIX86(_aaa),             /* 0x37 */\n\t\tPREFIX86(_cmp_br8),         /* 0x38 */\n\t\tPREFIX86(_cmp_wr16),            /* 0x39 */\n\t\tPREFIX86(_cmp_r8b),         /* 0x3a */\n\t\tPREFIX86(_cmp_r16w),            /* 0x3b */\n\t\tPREFIX86(_cmp_ald8),            /* 0x3c */\n\t\tPREFIX86(_cmp_axd16),           /* 0x3d */\n\t\tPREFIX86(_ds),              /* 0x3e */\n\t\tPREFIX86(_aas),             /* 0x3f */\n\t\tPREFIX86(_inc_ax),          /* 0x40 */\n\t\tPREFIX86(_inc_cx),          /* 0x41 */\n\t\tPREFIX86(_inc_dx),          /* 0x42 */\n\t\tPREFIX86(_inc_bx),          /* 0x43 */\n\t\tPREFIX86(_inc_sp),          /* 0x44 */\n\t\tPREFIX86(_inc_bp),          /* 0x45 */\n\t\tPREFIX86(_inc_si),          /* 0x46 */\n\t\tPREFIX86(_inc_di),          /* 0x47 */\n\t\tPREFIX86(_dec_ax),          /* 0x48 */\n\t\tPREFIX86(_dec_cx),          /* 0x49 */\n\t\tPREFIX86(_dec_dx),          /* 0x4a */\n\t\tPREFIX86(_dec_bx),          /* 0x4b */\n\t\tPREFIX86(_dec_sp),          /* 0x4c */\n\t\tPREFIX86(_dec_bp),          /* 0x4d */\n\t\tPREFIX86(_dec_si),          /* 0x4e */\n\t\tPREFIX86(_dec_di),          /* 0x4f */\n\t\tPREFIX86(_push_ax),         /* 0x50 */\n\t\tPREFIX86(_push_cx),         /* 0x51 */\n\t\tPREFIX86(_push_dx),         /* 0x52 */\n\t\tPREFIX86(_push_bx),         /* 0x53 */\n\t\tPREFIX86(_push_sp),         /* 0x54 */\n\t\tPREFIX86(_push_bp),         /* 0x55 */\n\t\tPREFIX86(_push_si),         /* 0x56 */\n\t\tPREFIX86(_push_di),         /* 0x57 */\n\t\tPREFIX86(_pop_ax),          /* 0x58 */\n\t\tPREFIX86(_pop_cx),          /* 0x59 */\n\t\tPREFIX86(_pop_dx),          /* 0x5a */\n\t\tPREFIX86(_pop_bx),          /* 0x5b */\n\t\tPREFIX86(_pop_sp),          /* 0x5c */\n\t\tPREFIX86(_pop_bp),          /* 0x5d */\n\t\tPREFIX86(_pop_si),          /* 0x5e */\n\t\tPREFIX86(_pop_di),          /* 0x5f */\n\t\tPREFIX186(_pusha),          /* 0x60 */\n\t\tPREFIX186(_popa),               /* 0x61 */\n\t\tPREFIX186(_bound),          /* 0x62 */\n\t\tPREFIX286(_arpl),               /* 0x63 */\n\t\tPREFIX286(_invalid),\n\t\tPREFIX286(_invalid),\n\t\tPREFIX286(_invalid),\n\t\tPREFIX286(_invalid),\n\t\tPREFIX186(_push_d16),           /* 0x68 */\n\t\tPREFIX186(_imul_d16),           /* 0x69 */\n\t\tPREFIX186(_push_d8),            /* 0x6a */\n\t\tPREFIX186(_imul_d8),            /* 0x6b */\n\t\tPREFIX186(_insb),               /* 0x6c */\n\t\tPREFIX186(_insw),               /* 0x6d */\n\t\tPREFIX186(_outsb),          /* 0x6e */\n\t\tPREFIX186(_outsw),          /* 0x6f */\n\t\tPREFIX86(_jo),              /* 0x70 */\n\t\tPREFIX86(_jno),             /* 0x71 */\n\t\tPREFIX86(_jb),              /* 0x72 */\n\t\tPREFIX86(_jnb),             /* 0x73 */\n\t\tPREFIX86(_jz),              /* 0x74 */\n\t\tPREFIX86(_jnz),             /* 0x75 */\n\t\tPREFIX86(_jbe),             /* 0x76 */\n\t\tPREFIX86(_jnbe),                /* 0x77 */\n\t\tPREFIX86(_js),              /* 0x78 */\n\t\tPREFIX86(_jns),             /* 0x79 */\n\t\tPREFIX86(_jp),              /* 0x7a */\n\t\tPREFIX86(_jnp),             /* 0x7b */\n\t\tPREFIX86(_jl),              /* 0x7c */\n\t\tPREFIX86(_jnl),             /* 0x7d */\n\t\tPREFIX86(_jle),             /* 0x7e */\n\t\tPREFIX86(_jnle),                /* 0x7f */\n\t\tPREFIX86(_80pre),               /* 0x80 */\n\t\tPREFIX86(_81pre),               /* 0x81 */\n\t\tPREFIX86(_82pre),               /* 0x82 */\n\t\tPREFIX86(_83pre),               /* 0x83 */\n\t\tPREFIX86(_test_br8),            /* 0x84 */\n\t\tPREFIX86(_test_wr16),           /* 0x85 */\n\t\tPREFIX86(_xchg_br8),            /* 0x86 */\n\t\tPREFIX86(_xchg_wr16),           /* 0x87 */\n\t\tPREFIX86(_mov_br8),         /* 0x88 */\n\t\tPREFIX86(_mov_wr16),            /* 0x89 */\n\t\tPREFIX86(_mov_r8b),         /* 0x8a */\n\t\tPREFIX86(_mov_r16w),            /* 0x8b */\n\t\tPREFIX86(_mov_wsreg),           /* 0x8c */\n\t\tPREFIX86(_lea),             /* 0x8d */\n\t\tPREFIX86(_mov_sregw),           /* 0x8e */\n\t\tPREFIX86(_popw),                /* 0x8f */\n\t\tPREFIX86(_nop),             /* 0x90 */\n\t\tPREFIX86(_xchg_axcx),           /* 0x91 */\n\t\tPREFIX86(_xchg_axdx),           /* 0x92 */\n\t\tPREFIX86(_xchg_axbx),           /* 0x93 */\n\t\tPREFIX86(_xchg_axsp),           /* 0x94 */\n\t\tPREFIX86(_xchg_axbp),           /* 0x95 */\n\t\tPREFIX86(_xchg_axsi),           /* 0x97 */\n\t\tPREFIX86(_xchg_axdi),           /* 0x97 */\n\t\tPREFIX86(_cbw),             /* 0x98 */\n\t\tPREFIX86(_cwd),             /* 0x99 */\n\t\tPREFIX86(_call_far),            /* 0x9a */\n\t\tPREFIX86(_wait),                /* 0x9b */\n\t\tPREFIX86(_pushf),               /* 0x9c */\n\t\tPREFIX286(_popf),               /* 0x9d */\n\t\tPREFIX86(_sahf),                /* 0x9e */\n\t\tPREFIX86(_lahf),                /* 0x9f */\n\t\tPREFIX86(_mov_aldisp),      /* 0xa0 */\n\t\tPREFIX86(_mov_axdisp),      /* 0xa1 */\n\t\tPREFIX86(_mov_dispal),      /* 0xa2 */\n\t\tPREFIX86(_mov_dispax),      /* 0xa3 */\n\t\tPREFIX86(_movsb),               /* 0xa4 */\n\t\tPREFIX86(_movsw),               /* 0xa5 */\n\t\tPREFIX86(_cmpsb),               /* 0xa6 */\n\t\tPREFIX86(_cmpsw),               /* 0xa7 */\n\t\tPREFIX86(_test_ald8),           /* 0xa8 */\n\t\tPREFIX86(_test_axd16),      /* 0xa9 */\n\t\tPREFIX86(_stosb),               /* 0xaa */\n\t\tPREFIX86(_stosw),               /* 0xab */\n\t\tPREFIX86(_lodsb),               /* 0xac */\n\t\tPREFIX86(_lodsw),               /* 0xad */\n\t\tPREFIX86(_scasb),               /* 0xae */\n\t\tPREFIX86(_scasw),               /* 0xaf */\n\t\tPREFIX86(_mov_ald8),            /* 0xb0 */\n\t\tPREFIX86(_mov_cld8),            /* 0xb1 */\n\t\tPREFIX86(_mov_dld8),            /* 0xb2 */\n\t\tPREFIX86(_mov_bld8),            /* 0xb3 */\n\t\tPREFIX86(_mov_ahd8),            /* 0xb4 */\n\t\tPREFIX86(_mov_chd8),            /* 0xb5 */\n\t\tPREFIX86(_mov_dhd8),            /* 0xb6 */\n\t\tPREFIX86(_mov_bhd8),            /* 0xb7 */\n\t\tPREFIX86(_mov_axd16),           /* 0xb8 */\n\t\tPREFIX86(_mov_cxd16),           /* 0xb9 */\n\t\tPREFIX86(_mov_dxd16),           /* 0xba */\n\t\tPREFIX86(_mov_bxd16),           /* 0xbb */\n\t\tPREFIX86(_mov_spd16),           /* 0xbc */\n\t\tPREFIX86(_mov_bpd16),           /* 0xbd */\n\t\tPREFIX86(_mov_sid16),           /* 0xbe */\n\t\tPREFIX86(_mov_did16),           /* 0xbf */\n\t\tPREFIX186(_rotshft_bd8),        /* 0xc0 */\n\t\tPREFIX186(_rotshft_wd8),        /* 0xc1 */\n\t\tPREFIX86(_ret_d16),         /* 0xc2 */\n\t\tPREFIX86(_ret),             /* 0xc3 */\n\t\tPREFIX86(_les_dw),          /* 0xc4 */\n\t\tPREFIX86(_lds_dw),          /* 0xc5 */\n\t\tPREFIX86(_mov_bd8),         /* 0xc6 */\n\t\tPREFIX86(_mov_wd16),            /* 0xc7 */\n\t\tPREFIX186(_enter),          /* 0xc8 */\n\t\tPREFIX186(_leave),          /* 0xc9 */\n\t\tPREFIX286(_retf_d16),           /* 0xca */\n\t\tPREFIX286(_retf),               /* 0xcb */\n\t\tPREFIX86(_int3),                /* 0xcc */\n\t\tPREFIX86(_int),             /* 0xcd */\n\t\tPREFIX86(_into),                /* 0xce */\n\t\tPREFIX286(_iret),               /* 0xcf */\n\t\tPREFIX86(_rotshft_b),           /* 0xd0 */\n\t\tPREFIX86(_rotshft_w),           /* 0xd1 */\n\t\tPREFIX186(_rotshft_bcl),        /* 0xd2 */\n\t\tPREFIX186(_rotshft_wcl),        /* 0xd3 */\n\t\tPREFIX86(_aam),             /* 0xd4 */\n\t\tPREFIX86(_aad),             /* 0xd5 */\n\t\tPREFIX286(_invalid),\n\t\tPREFIX86(_xlat),                /* 0xd7 */\n\t\tPREFIX286(_escape),         /* 0xd8 */\n\t\tPREFIX286(_escape),         /* 0xd9 */\n\t\tPREFIX286(_escape),         /* 0xda */\n\t\tPREFIX286(_escape),         /* 0xdb */\n\t\tPREFIX286(_escape),         /* 0xdc */\n\t\tPREFIX286(_escape),         /* 0xdd */\n\t\tPREFIX286(_escape),         /* 0xde */\n\t\tPREFIX286(_escape_7),           /* 0xdf */\n\t\tPREFIX86(_loopne),          /* 0xe0 */\n\t\tPREFIX86(_loope),               /* 0xe1 */\n\t\tPREFIX86(_loop),                /* 0xe2 */\n\t\tPREFIX86(_jcxz),                /* 0xe3 */\n\t\tPREFIX86(_inal),                /* 0xe4 */\n\t\tPREFIX86(_inax),                /* 0xe5 */\n\t\tPREFIX86(_outal),               /* 0xe6 */\n\t\tPREFIX86(_outax),               /* 0xe7 */\n\t\tPREFIX86(_call_d16),            /* 0xe8 */\n\t\tPREFIX86(_jmp_d16),         /* 0xe9 */\n\t\tPREFIX86(_jmp_far),         /* 0xea */\n\t\tPREFIX86(_jmp_d8),          /* 0xeb */\n\t\tPREFIX86(_inaldx),          /* 0xec */\n\t\tPREFIX86(_inaxdx),          /* 0xed */\n\t\tPREFIX86(_outdxal),         /* 0xee */\n\t\tPREFIX86(_outdxax),         /* 0xef */\n\t\tPREFIX86(_lock),                /* 0xf0 */\n\t\tPREFIX286(_invalid),            /* 0xf1 */\n\t\tPREFIX186(_repne),          /* 0xf2 */\n\t\tPREFIX186(_repe),               /* 0xf3 */\n\t\tPREFIX86(_hlt),             /* 0xf4 */\n\t\tPREFIX86(_cmc),             /* 0xf5 */\n\t\tPREFIX86(_f6pre),               /* 0xf6 */\n\t\tPREFIX86(_f7pre),               /* 0xf7 */\n\t\tPREFIX86(_clc),             /* 0xf8 */\n\t\tPREFIX86(_stc),             /* 0xf9 */\n\t\tPREFIX86(_cli),             /* 0xfa */\n\t\tPREFIX86(_sti),             /* 0xfb */\n\t\tPREFIX86(_cld),             /* 0xfc */\n\t\tPREFIX86(_std),             /* 0xfd */\n\t\tPREFIX86(_fepre),               /* 0xfe */\n\t\tPREFIX86(_ffpre)                /* 0xff */\n};\n\n#if defined(BIGCASE) && !defined(RS6000)\n\t/* Some compilers cannot handle large case statements */\n#define TABLE286 \\\n\tswitch(FETCHOP)\\\n\t{\\\n\tcase 0x00: PREFIX86(_add_br8)(); break;\\\n\tcase 0x01: PREFIX86(_add_wr16)(); break;\\\n\tcase 0x02: PREFIX86(_add_r8b)(); break;\\\n\tcase 0x03: PREFIX86(_add_r16w)(); break;\\\n\tcase 0x04: PREFIX86(_add_ald8)(); break;\\\n\tcase 0x05: PREFIX86(_add_axd16)(); break;\\\n\tcase 0x06: PREFIX86(_push_es)(); break;\\\n\tcase 0x07: PREFIX86(_pop_es)(); break;\\\n\tcase 0x08: PREFIX86(_or_br8)(); break;\\\n\tcase 0x09: PREFIX86(_or_wr16)(); break;\\\n\tcase 0x0a: PREFIX86(_or_r8b)(); break;\\\n\tcase 0x0b: PREFIX86(_or_r16w)(); break;\\\n\tcase 0x0c: PREFIX86(_or_ald8)(); break;\\\n\tcase 0x0d: PREFIX86(_or_axd16)(); break;\\\n\tcase 0x0e: PREFIX86(_push_cs)(); break;\\\n\tcase 0x0f: PREFIX286(_0fpre)(); break;\\\n\tcase 0x10: PREFIX86(_adc_br8)(); break;\\\n\tcase 0x11: PREFIX86(_adc_wr16)(); break;\\\n\tcase 0x12: PREFIX86(_adc_r8b)(); break;\\\n\tcase 0x13: PREFIX86(_adc_r16w)(); break;\\\n\tcase 0x14: PREFIX86(_adc_ald8)(); break;\\\n\tcase 0x15: PREFIX86(_adc_axd16)(); break;\\\n\tcase 0x16: PREFIX86(_push_ss)(); break;\\\n\tcase 0x17: PREFIX86(_pop_ss)(); break;\\\n\tcase 0x18: PREFIX86(_sbb_br8)(); break;\\\n\tcase 0x19: PREFIX86(_sbb_wr16)(); break;\\\n\tcase 0x1a: PREFIX86(_sbb_r8b)(); break;\\\n\tcase 0x1b: PREFIX86(_sbb_r16w)(); break;\\\n\tcase 0x1c: PREFIX86(_sbb_ald8)(); break;\\\n\tcase 0x1d: PREFIX86(_sbb_axd16)(); break;\\\n\tcase 0x1e: PREFIX86(_push_ds)(); break;\\\n\tcase 0x1f: PREFIX86(_pop_ds)(); break;\\\n\tcase 0x20: PREFIX86(_and_br8)(); break;\\\n\tcase 0x21: PREFIX86(_and_wr16)(); break;\\\n\tcase 0x22: PREFIX86(_and_r8b)(); break;\\\n\tcase 0x23: PREFIX86(_and_r16w)(); break;\\\n\tcase 0x24: PREFIX86(_and_ald8)(); break;\\\n\tcase 0x25: PREFIX86(_and_axd16)(); break;\\\n\tcase 0x26: PREFIX86(_es)(); break;\\\n\tcase 0x27: PREFIX86(_daa)(); break;\\\n\tcase 0x28: PREFIX86(_sub_br8)(); break;\\\n\tcase 0x29: PREFIX86(_sub_wr16)(); break;\\\n\tcase 0x2a: PREFIX86(_sub_r8b)(); break;\\\n\tcase 0x2b: PREFIX86(_sub_r16w)(); break;\\\n\tcase 0x2c: PREFIX86(_sub_ald8)(); break;\\\n\tcase 0x2d: PREFIX86(_sub_axd16)(); break;\\\n\tcase 0x2e: PREFIX86(_cs)(); break;\\\n\tcase 0x2f: PREFIX86(_das)(); break;\\\n\tcase 0x30: PREFIX86(_xor_br8)(); break;\\\n\tcase 0x31: PREFIX86(_xor_wr16)(); break;\\\n\tcase 0x32: PREFIX86(_xor_r8b)(); break;\\\n\tcase 0x33: PREFIX86(_xor_r16w)(); break;\\\n\tcase 0x34: PREFIX86(_xor_ald8)(); break;\\\n\tcase 0x35: PREFIX86(_xor_axd16)(); break;\\\n\tcase 0x36: PREFIX86(_ss)(); break;\\\n\tcase 0x37: PREFIX86(_aaa)(); break;\\\n\tcase 0x38: PREFIX86(_cmp_br8)(); break;\\\n\tcase 0x39: PREFIX86(_cmp_wr16)(); break;\\\n\tcase 0x3a: PREFIX86(_cmp_r8b)(); break;\\\n\tcase 0x3b: PREFIX86(_cmp_r16w)(); break;\\\n\tcase 0x3c: PREFIX86(_cmp_ald8)(); break;\\\n\tcase 0x3d: PREFIX86(_cmp_axd16)(); break;\\\n\tcase 0x3e: PREFIX86(_ds)(); break;\\\n\tcase 0x3f: PREFIX86(_aas)(); break;\\\n\tcase 0x40: PREFIX86(_inc_ax)(); break;\\\n\tcase 0x41: PREFIX86(_inc_cx)(); break;\\\n\tcase 0x42: PREFIX86(_inc_dx)(); break;\\\n\tcase 0x43: PREFIX86(_inc_bx)(); break;\\\n\tcase 0x44: PREFIX86(_inc_sp)(); break;\\\n\tcase 0x45: PREFIX86(_inc_bp)(); break;\\\n\tcase 0x46: PREFIX86(_inc_si)(); break;\\\n\tcase 0x47: PREFIX86(_inc_di)(); break;\\\n\tcase 0x48: PREFIX86(_dec_ax)(); break;\\\n\tcase 0x49: PREFIX86(_dec_cx)(); break;\\\n\tcase 0x4a: PREFIX86(_dec_dx)(); break;\\\n\tcase 0x4b: PREFIX86(_dec_bx)(); break;\\\n\tcase 0x4c: PREFIX86(_dec_sp)(); break;\\\n\tcase 0x4d: PREFIX86(_dec_bp)(); break;\\\n\tcase 0x4e: PREFIX86(_dec_si)(); break;\\\n\tcase 0x4f: PREFIX86(_dec_di)(); break;\\\n\tcase 0x50: PREFIX86(_push_ax)(); break;\\\n\tcase 0x51: PREFIX86(_push_cx)(); break;\\\n\tcase 0x52: PREFIX86(_push_dx)(); break;\\\n\tcase 0x53: PREFIX86(_push_bx)(); break;\\\n\tcase 0x54: PREFIX86(_push_sp)(); break;\\\n\tcase 0x55: PREFIX86(_push_bp)(); break;\\\n\tcase 0x56: PREFIX86(_push_si)(); break;\\\n\tcase 0x57: PREFIX86(_push_di)(); break;\\\n\tcase 0x58: PREFIX86(_pop_ax)(); break;\\\n\tcase 0x59: PREFIX86(_pop_cx)(); break;\\\n\tcase 0x5a: PREFIX86(_pop_dx)(); break;\\\n\tcase 0x5b: PREFIX86(_pop_bx)(); break;\\\n\tcase 0x5c: PREFIX86(_pop_sp)(); break;\\\n\tcase 0x5d: PREFIX86(_pop_bp)(); break;\\\n\tcase 0x5e: PREFIX86(_pop_si)(); break;\\\n\tcase 0x5f: PREFIX86(_pop_di)(); break;\\\n\tcase 0x60: PREFIX186(_pusha)(); break;\\\n\tcase 0x61: PREFIX186(_popa)(); break;\\\n\tcase 0x62: PREFIX186(_bound)(); break;\\\n\tcase 0x63: PREFIX286(_arpl)(); break;\\\n\tcase 0x64: PREFIX286(_invalid)(); break;\\\n\tcase 0x65: PREFIX286(_invalid)(); break;\\\n\tcase 0x66: PREFIX286(_invalid)(); break;\\\n\tcase 0x67: PREFIX286(_invalid)(); break;\\\n\tcase 0x68: PREFIX186(_push_d16)(); break;\\\n\tcase 0x69: PREFIX186(_imul_d16)(); break;\\\n\tcase 0x6a: PREFIX186(_push_d8)(); break;\\\n\tcase 0x6b: PREFIX186(_imul_d8)(); break;\\\n\tcase 0x6c: PREFIX186(_insb)(); break;\\\n\tcase 0x6d: PREFIX186(_insw)(); break;\\\n\tcase 0x6e: PREFIX186(_outsb)(); break;\\\n\tcase 0x6f: PREFIX186(_outsw)(); break;\\\n\tcase 0x70: PREFIX86(_jo)(); break;\\\n\tcase 0x71: PREFIX86(_jno)(); break;\\\n\tcase 0x72: PREFIX86(_jb)(); break;\\\n\tcase 0x73: PREFIX86(_jnb)(); break;\\\n\tcase 0x74: PREFIX86(_jz)(); break;\\\n\tcase 0x75: PREFIX86(_jnz)(); break;\\\n\tcase 0x76: PREFIX86(_jbe)(); break;\\\n\tcase 0x77: PREFIX86(_jnbe)(); break;\\\n\tcase 0x78: PREFIX86(_js)(); break;\\\n\tcase 0x79: PREFIX86(_jns)(); break;\\\n\tcase 0x7a: PREFIX86(_jp)(); break;\\\n\tcase 0x7b: PREFIX86(_jnp)(); break;\\\n\tcase 0x7c: PREFIX86(_jl)(); break;\\\n\tcase 0x7d: PREFIX86(_jnl)(); break;\\\n\tcase 0x7e: PREFIX86(_jle)(); break;\\\n\tcase 0x7f: PREFIX86(_jnle)(); break;\\\n\tcase 0x80: PREFIX86(_80pre)(); break;\\\n\tcase 0x81: PREFIX86(_81pre)(); break;\\\n\tcase 0x82: PREFIX86(_82pre)(); break;\\\n\tcase 0x83: PREFIX86(_83pre)(); break;\\\n\tcase 0x84: PREFIX86(_test_br8)(); break;\\\n\tcase 0x85: PREFIX86(_test_wr16)(); break;\\\n\tcase 0x86: PREFIX86(_xchg_br8)(); break;\\\n\tcase 0x87: PREFIX86(_xchg_wr16)(); break;\\\n\tcase 0x88: PREFIX86(_mov_br8)(); break;\\\n\tcase 0x89: PREFIX86(_mov_wr16)(); break;\\\n\tcase 0x8a: PREFIX86(_mov_r8b)(); break;\\\n\tcase 0x8b: PREFIX86(_mov_r16w)(); break;\\\n\tcase 0x8c: PREFIX86(_mov_wsreg)(); break;\\\n\tcase 0x8d: PREFIX86(_lea)(); break;\\\n\tcase 0x8e: PREFIX86(_mov_sregw)(); break;\\\n\tcase 0x8f: PREFIX86(_popw)(); break;\\\n\tcase 0x90: PREFIX86(_nop)(); break;\\\n\tcase 0x91: PREFIX86(_xchg_axcx)(); break;\\\n\tcase 0x92: PREFIX86(_xchg_axdx)(); break;\\\n\tcase 0x93: PREFIX86(_xchg_axbx)(); break;\\\n\tcase 0x94: PREFIX86(_xchg_axsp)(); break;\\\n\tcase 0x95: PREFIX86(_xchg_axbp)(); break;\\\n\tcase 0x96: PREFIX86(_xchg_axsi)(); break;\\\n\tcase 0x97: PREFIX86(_xchg_axdi)(); break;\\\n\tcase 0x98: PREFIX86(_cbw)(); break;\\\n\tcase 0x99: PREFIX86(_cwd)(); break;\\\n\tcase 0x9a: PREFIX86(_call_far)(); break;\\\n\tcase 0x9b: PREFIX86(_wait)(); break;\\\n\tcase 0x9c: PREFIX86(_pushf)(); break;\\\n\tcase 0x9d: PREFIX286(_popf)(); break;\\\n\tcase 0x9e: PREFIX86(_sahf)(); break;\\\n\tcase 0x9f: PREFIX86(_lahf)(); break;\\\n\tcase 0xa0: PREFIX86(_mov_aldisp)(); break;\\\n\tcase 0xa1: PREFIX86(_mov_axdisp)(); break;\\\n\tcase 0xa2: PREFIX86(_mov_dispal)(); break;\\\n\tcase 0xa3: PREFIX86(_mov_dispax)(); break;\\\n\tcase 0xa4: PREFIX86(_movsb)(); break;\\\n\tcase 0xa5: PREFIX86(_movsw)(); break;\\\n\tcase 0xa6: PREFIX86(_cmpsb)(); break;\\\n\tcase 0xa7: PREFIX86(_cmpsw)(); break;\\\n\tcase 0xa8: PREFIX86(_test_ald8)(); break;\\\n\tcase 0xa9: PREFIX86(_test_axd16)(); break;\\\n\tcase 0xaa: PREFIX86(_stosb)(); break;\\\n\tcase 0xab: PREFIX86(_stosw)(); break;\\\n\tcase 0xac: PREFIX86(_lodsb)(); break;\\\n\tcase 0xad: PREFIX86(_lodsw)(); break;\\\n\tcase 0xae: PREFIX86(_scasb)(); break;\\\n\tcase 0xaf: PREFIX86(_scasw)(); break;\\\n\tcase 0xb0: PREFIX86(_mov_ald8)(); break;\\\n\tcase 0xb1: PREFIX86(_mov_cld8)(); break;\\\n\tcase 0xb2: PREFIX86(_mov_dld8)(); break;\\\n\tcase 0xb3: PREFIX86(_mov_bld8)(); break;\\\n\tcase 0xb4: PREFIX86(_mov_ahd8)(); break;\\\n\tcase 0xb5: PREFIX86(_mov_chd8)(); break;\\\n\tcase 0xb6: PREFIX86(_mov_dhd8)(); break;\\\n\tcase 0xb7: PREFIX86(_mov_bhd8)(); break;\\\n\tcase 0xb8: PREFIX86(_mov_axd16)(); break;\\\n\tcase 0xb9: PREFIX86(_mov_cxd16)(); break;\\\n\tcase 0xba: PREFIX86(_mov_dxd16)(); break;\\\n\tcase 0xbb: PREFIX86(_mov_bxd16)(); break;\\\n\tcase 0xbc: PREFIX86(_mov_spd16)(); break;\\\n\tcase 0xbd: PREFIX86(_mov_bpd16)(); break;\\\n\tcase 0xbe: PREFIX86(_mov_sid16)(); break;\\\n\tcase 0xbf: PREFIX86(_mov_did16)(); break;\\\n\tcase 0xc0: PREFIX186(_rotshft_bd8)(); break;\\\n\tcase 0xc1: PREFIX186(_rotshft_wd8)(); break;\\\n\tcase 0xc2: PREFIX86(_ret_d16)(); break;\\\n\tcase 0xc3: PREFIX86(_ret)(); break;\\\n\tcase 0xc4: PREFIX86(_les_dw)(); break;\\\n\tcase 0xc5: PREFIX86(_lds_dw)(); break;\\\n\tcase 0xc6: PREFIX86(_mov_bd8)(); break;\\\n\tcase 0xc7: PREFIX86(_mov_wd16)(); break;\\\n\tcase 0xc8: PREFIX186(_enter)(); break;\\\n\tcase 0xc9: PREFIX186(_leave)(); break;\\\n\tcase 0xca: PREFIX286(_retf_d16)(); break;\\\n\tcase 0xcb: PREFIX286(_retf)(); break;\\\n\tcase 0xcc: PREFIX86(_int3)(); break;\\\n\tcase 0xcd: PREFIX86(_int)(); break;\\\n\tcase 0xce: PREFIX86(_into)(); break;\\\n\tcase 0xcf: PREFIX286(_iret)(); break;\\\n\tcase 0xd0: PREFIX86(_rotshft_b)(); break;\\\n\tcase 0xd1: PREFIX86(_rotshft_w)(); break;\\\n\tcase 0xd2: PREFIX186(_rotshft_bcl)(); break;\\\n\tcase 0xd3: PREFIX186(_rotshft_wcl)(); break;\\\n\tcase 0xd4: PREFIX86(_aam)(); break;\\\n\tcase 0xd5: PREFIX86(_aad)(); break;\\\n\tcase 0xd6: PREFIX286(_invalid)(); break;\\\n\tcase 0xd7: PREFIX86(_xlat)(); break;\\\n\tcase 0xd8: PREFIX286(_escape)(); break;\\\n\tcase 0xd9: PREFIX286(_escape)(); break;\\\n\tcase 0xda: PREFIX286(_escape)(); break;\\\n\tcase 0xdb: PREFIX286(_escape)(); break;\\\n\tcase 0xdc: PREFIX286(_escape)(); break;\\\n\tcase 0xdd: PREFIX286(_escape)(); break;\\\n\tcase 0xde: PREFIX286(_escape)(); break;\\\n\tcase 0xdf: PREFIX286(_escape_7)(); break;\\\n\tcase 0xe0: PREFIX86(_loopne)(); break;\\\n\tcase 0xe1: PREFIX86(_loope)(); break;\\\n\tcase 0xe2: PREFIX86(_loop)(); break;\\\n\tcase 0xe3: PREFIX86(_jcxz)(); break;\\\n\tcase 0xe4: PREFIX86(_inal)(); break;\\\n\tcase 0xe5: PREFIX86(_inax)(); break;\\\n\tcase 0xe6: PREFIX86(_outal)(); break;\\\n\tcase 0xe7: PREFIX86(_outax)(); break;\\\n\tcase 0xe8: PREFIX86(_call_d16)(); break;\\\n\tcase 0xe9: PREFIX86(_jmp_d16)(); break;\\\n\tcase 0xea: PREFIX86(_jmp_far)(); break;\\\n\tcase 0xeb: PREFIX86(_jmp_d8)(); break;\\\n\tcase 0xec: PREFIX86(_inaldx)(); break;\\\n\tcase 0xed: PREFIX86(_inaxdx)(); break;\\\n\tcase 0xee: PREFIX86(_outdxal)(); break;\\\n\tcase 0xef: PREFIX86(_outdxax)(); break;\\\n\tcase 0xf0: PREFIX86(_lock)(); break;\\\n\tcase 0xf1: PREFIX286(_invalid)(); break;\\\n\tcase 0xf2: PREFIX186(_repne)(); break;\\\n\tcase 0xf3: PREFIX186(_repe)(); break;\\\n\tcase 0xf4: PREFIX86(_hlt)(); break;\\\n\tcase 0xf5: PREFIX86(_cmc)(); break;\\\n\tcase 0xf6: PREFIX86(_f6pre)(); break;\\\n\tcase 0xf7: PREFIX86(_f7pre)(); break;\\\n\tcase 0xf8: PREFIX86(_clc)(); break;\\\n\tcase 0xf9: PREFIX86(_stc)(); break;\\\n\tcase 0xfa: PREFIX86(_cli)(); break;\\\n\tcase 0xfb: PREFIX86(_sti)(); break;\\\n\tcase 0xfc: PREFIX86(_cld)(); break;\\\n\tcase 0xfd: PREFIX86(_std)(); break;\\\n\tcase 0xfe: PREFIX86(_fepre)(); break;\\\n\tcase 0xff: PREFIX86(_ffpre)(); break;\\\n\t};\n#else\n#define TABLE286 PREFIX286(_instruction)[FETCHOP]();\n#endif\n"
  },
  {
    "path": "vm86/mame/emu/cpu/i86/table86.h",
    "content": "static void (*const PREFIX86(_instruction)[256])() =\n{\n\t\tPREFIX86(_add_br8),          /* 0x00 */\n\t\tPREFIX86(_add_wr16),         /* 0x01 */\n\t\tPREFIX86(_add_r8b),          /* 0x02 */\n\t\tPREFIX86(_add_r16w),         /* 0x03 */\n\t\tPREFIX86(_add_ald8),         /* 0x04 */\n\t\tPREFIX86(_add_axd16),        /* 0x05 */\n\t\tPREFIX86(_push_es),          /* 0x06 */\n\t\tPREFIX86(_pop_es),           /* 0x07 */\n\t\tPREFIX86(_or_br8),           /* 0x08 */\n\t\tPREFIX86(_or_wr16),          /* 0x09 */\n\t\tPREFIX86(_or_r8b),           /* 0x0a */\n\t\tPREFIX86(_or_r16w),          /* 0x0b */\n\t\tPREFIX86(_or_ald8),          /* 0x0c */\n\t\tPREFIX86(_or_axd16),         /* 0x0d */\n\t\tPREFIX86(_push_cs),          /* 0x0e */\n\t\tPREFIX86(_pop_cs),           /* 0x0f */\n\t\tPREFIX86(_adc_br8),          /* 0x10 */\n\t\tPREFIX86(_adc_wr16),         /* 0x11 */\n\t\tPREFIX86(_adc_r8b),          /* 0x12 */\n\t\tPREFIX86(_adc_r16w),         /* 0x13 */\n\t\tPREFIX86(_adc_ald8),         /* 0x14 */\n\t\tPREFIX86(_adc_axd16),        /* 0x15 */\n\t\tPREFIX86(_push_ss),          /* 0x16 */\n\t\tPREFIX86(_pop_ss),           /* 0x17 */\n\t\tPREFIX86(_sbb_br8),          /* 0x18 */\n\t\tPREFIX86(_sbb_wr16),         /* 0x19 */\n\t\tPREFIX86(_sbb_r8b),          /* 0x1a */\n\t\tPREFIX86(_sbb_r16w),         /* 0x1b */\n\t\tPREFIX86(_sbb_ald8),         /* 0x1c */\n\t\tPREFIX86(_sbb_axd16),        /* 0x1d */\n\t\tPREFIX86(_push_ds),          /* 0x1e */\n\t\tPREFIX86(_pop_ds),           /* 0x1f */\n\t\tPREFIX86(_and_br8),          /* 0x20 */\n\t\tPREFIX86(_and_wr16),         /* 0x21 */\n\t\tPREFIX86(_and_r8b),          /* 0x22 */\n\t\tPREFIX86(_and_r16w),         /* 0x23 */\n\t\tPREFIX86(_and_ald8),         /* 0x24 */\n\t\tPREFIX86(_and_axd16),        /* 0x25 */\n\t\tPREFIX86(_es),               /* 0x26 */\n\t\tPREFIX86(_daa),              /* 0x27 */\n\t\tPREFIX86(_sub_br8),          /* 0x28 */\n\t\tPREFIX86(_sub_wr16),         /* 0x29 */\n\t\tPREFIX86(_sub_r8b),          /* 0x2a */\n\t\tPREFIX86(_sub_r16w),         /* 0x2b */\n\t\tPREFIX86(_sub_ald8),         /* 0x2c */\n\t\tPREFIX86(_sub_axd16),        /* 0x2d */\n\t\tPREFIX86(_cs),               /* 0x2e */\n\t\tPREFIX86(_das),     /* 0x2f */\n\t\tPREFIX86(_xor_br8),          /* 0x30 */\n\t\tPREFIX86(_xor_wr16),         /* 0x31 */\n\t\tPREFIX86(_xor_r8b),          /* 0x32 */\n\t\tPREFIX86(_xor_r16w),         /* 0x33 */\n\t\tPREFIX86(_xor_ald8),         /* 0x34 */\n\t\tPREFIX86(_xor_axd16),        /* 0x35 */\n\t\tPREFIX86(_ss),               /* 0x36 */\n\t\tPREFIX86(_aaa),     /* 0x37 */\n\t\tPREFIX86(_cmp_br8),          /* 0x38 */\n\t\tPREFIX86(_cmp_wr16),         /* 0x39 */\n\t\tPREFIX86(_cmp_r8b),          /* 0x3a */\n\t\tPREFIX86(_cmp_r16w),         /* 0x3b */\n\t\tPREFIX86(_cmp_ald8),         /* 0x3c */\n\t\tPREFIX86(_cmp_axd16),        /* 0x3d */\n\t\tPREFIX86(_ds),               /* 0x3e */\n\t\tPREFIX86(_aas),     /* 0x3f */\n\t\tPREFIX86(_inc_ax),           /* 0x40 */\n\t\tPREFIX86(_inc_cx),           /* 0x41 */\n\t\tPREFIX86(_inc_dx),           /* 0x42 */\n\t\tPREFIX86(_inc_bx),           /* 0x43 */\n\t\tPREFIX86(_inc_sp),           /* 0x44 */\n\t\tPREFIX86(_inc_bp),           /* 0x45 */\n\t\tPREFIX86(_inc_si),           /* 0x46 */\n\t\tPREFIX86(_inc_di),           /* 0x47 */\n\t\tPREFIX86(_dec_ax),           /* 0x48 */\n\t\tPREFIX86(_dec_cx),           /* 0x49 */\n\t\tPREFIX86(_dec_dx),           /* 0x4a */\n\t\tPREFIX86(_dec_bx),           /* 0x4b */\n\t\tPREFIX86(_dec_sp),           /* 0x4c */\n\t\tPREFIX86(_dec_bp),           /* 0x4d */\n\t\tPREFIX86(_dec_si),           /* 0x4e */\n\t\tPREFIX86(_dec_di),           /* 0x4f */\n\t\tPREFIX86(_push_ax),          /* 0x50 */\n\t\tPREFIX86(_push_cx),          /* 0x51 */\n\t\tPREFIX86(_push_dx),          /* 0x52 */\n\t\tPREFIX86(_push_bx),          /* 0x53 */\n\t\tPREFIX86(_push_sp),          /* 0x54 */\n\t\tPREFIX86(_push_bp),          /* 0x55 */\n\t\tPREFIX86(_push_si),          /* 0x56 */\n\t\tPREFIX86(_push_di),          /* 0x57 */\n\t\tPREFIX86(_pop_ax),           /* 0x58 */\n\t\tPREFIX86(_pop_cx),           /* 0x59 */\n\t\tPREFIX86(_pop_dx),           /* 0x5a */\n\t\tPREFIX86(_pop_bx),           /* 0x5b */\n\t\tPREFIX86(_pop_sp),           /* 0x5c */\n\t\tPREFIX86(_pop_bp),           /* 0x5d */\n\t\tPREFIX86(_pop_si),           /* 0x5e */\n\t\tPREFIX86(_pop_di),           /* 0x5f */\n\t\tPREFIX86(_invalid_2b), // PREFIX86(_pusha),            /* 0x60 */\n\t\tPREFIX86(_invalid_2b), // PREFIX86(_popa),             /* 0x61 */\n\t\tPREFIX86(_invalid_2b), // PREFIX86(_bound),            /* 0x62 */\n\t\tPREFIX86(_invalid_2b),\n\t\tPREFIX86(_invalid_2b),\n\t\tPREFIX86(_invalid_2b),\n\t\tPREFIX86(_invalid_2b),\n\t\tPREFIX86(_invalid_2b),\n\t\tPREFIX86(_invalid_2b), //i_push_d16),         /* 0x68 */\n\t\tPREFIX86(_invalid_2b), //i_imul_d16),         /* 0x69 */\n\t\tPREFIX86(_invalid_2b), //i_push_d8),          /* 0x6a */\n\t\tPREFIX86(_invalid_2b), //i_imul_d8),          /* 0x6b */\n\t\tPREFIX86(_invalid_2b), //i_insb),             /* 0x6c */\n\t\tPREFIX86(_invalid_2b), //i_insw),             /* 0x6d */\n\t\tPREFIX86(_invalid_2b), //i_outsb),            /* 0x6e */\n\t\tPREFIX86(_invalid_2b), //i_outsw),            /* 0x6f */\n\t\tPREFIX86(_jo),               /* 0x70 */\n\t\tPREFIX86(_jno),              /* 0x71 */\n\t\tPREFIX86(_jb),               /* 0x72 */\n\t\tPREFIX86(_jnb),              /* 0x73 */\n\t\tPREFIX86(_jz),               /* 0x74 */\n\t\tPREFIX86(_jnz),              /* 0x75 */\n\t\tPREFIX86(_jbe),              /* 0x76 */\n\t\tPREFIX86(_jnbe),             /* 0x77 */\n\t\tPREFIX86(_js),               /* 0x78 */\n\t\tPREFIX86(_jns),              /* 0x79 */\n\t\tPREFIX86(_jp),               /* 0x7a */\n\t\tPREFIX86(_jnp),              /* 0x7b */\n\t\tPREFIX86(_jl),               /* 0x7c */\n\t\tPREFIX86(_jnl),              /* 0x7d */\n\t\tPREFIX86(_jle),              /* 0x7e */\n\t\tPREFIX86(_jnle),             /* 0x7f */\n\t\tPREFIX86(_80pre),            /* 0x80 */\n\t\tPREFIX86(_81pre),            /* 0x81 */\n\t\tPREFIX86(_82pre),           /* 0x82 */\n\t\tPREFIX86(_83pre),            /* 0x83 */\n\t\tPREFIX86(_test_br8),         /* 0x84 */\n\t\tPREFIX86(_test_wr16),        /* 0x85 */\n\t\tPREFIX86(_xchg_br8),         /* 0x86 */\n\t\tPREFIX86(_xchg_wr16),        /* 0x87 */\n\t\tPREFIX86(_mov_br8),          /* 0x88 */\n\t\tPREFIX86(_mov_wr16),         /* 0x89 */\n\t\tPREFIX86(_mov_r8b),          /* 0x8a */\n\t\tPREFIX86(_mov_r16w),         /* 0x8b */\n\t\tPREFIX86(_mov_wsreg),        /* 0x8c */\n\t\tPREFIX86(_lea),              /* 0x8d */\n\t\tPREFIX86(_mov_sregw),        /* 0x8e */\n\t\tPREFIX86(_popw),             /* 0x8f */\n\t\tPREFIX86(_nop),              /* 0x90 */\n\t\tPREFIX86(_xchg_axcx),        /* 0x91 */\n\t\tPREFIX86(_xchg_axdx),        /* 0x92 */\n\t\tPREFIX86(_xchg_axbx),        /* 0x93 */\n\t\tPREFIX86(_xchg_axsp),        /* 0x94 */\n\t\tPREFIX86(_xchg_axbp),        /* 0x95 */\n\t\tPREFIX86(_xchg_axsi),        /* 0x97 */\n\t\tPREFIX86(_xchg_axdi),        /* 0x97 */\n\t\tPREFIX86(_cbw),              /* 0x98 */\n\t\tPREFIX86(_cwd),              /* 0x99 */\n\t\tPREFIX86(_call_far),         /* 0x9a */\n\t\tPREFIX86(_wait),             /* 0x9b */\n\t\tPREFIX86(_pushf),            /* 0x9c */\n\t\tPREFIX86(_popf),             /* 0x9d */\n\t\tPREFIX86(_sahf),             /* 0x9e */\n\t\tPREFIX86(_lahf),             /* 0x9f */\n\t\tPREFIX86(_mov_aldisp),       /* 0xa0 */\n\t\tPREFIX86(_mov_axdisp),       /* 0xa1 */\n\t\tPREFIX86(_mov_dispal),       /* 0xa2 */\n\t\tPREFIX86(_mov_dispax),       /* 0xa3 */\n\t\tPREFIX86(_movsb),            /* 0xa4 */\n\t\tPREFIX86(_movsw),            /* 0xa5 */\n\t\tPREFIX86(_cmpsb),            /* 0xa6 */\n\t\tPREFIX86(_cmpsw),            /* 0xa7 */\n\t\tPREFIX86(_test_ald8),        /* 0xa8 */\n\t\tPREFIX86(_test_axd16),       /* 0xa9 */\n\t\tPREFIX86(_stosb),            /* 0xaa */\n\t\tPREFIX86(_stosw),            /* 0xab */\n\t\tPREFIX86(_lodsb),            /* 0xac */\n\t\tPREFIX86(_lodsw),            /* 0xad */\n\t\tPREFIX86(_scasb),            /* 0xae */\n\t\tPREFIX86(_scasw),            /* 0xaf */\n\t\tPREFIX86(_mov_ald8),         /* 0xb0 */\n\t\tPREFIX86(_mov_cld8),         /* 0xb1 */\n\t\tPREFIX86(_mov_dld8),         /* 0xb2 */\n\t\tPREFIX86(_mov_bld8),         /* 0xb3 */\n\t\tPREFIX86(_mov_ahd8),         /* 0xb4 */\n\t\tPREFIX86(_mov_chd8),         /* 0xb5 */\n\t\tPREFIX86(_mov_dhd8),         /* 0xb6 */\n\t\tPREFIX86(_mov_bhd8),         /* 0xb7 */\n\t\tPREFIX86(_mov_axd16),        /* 0xb8 */\n\t\tPREFIX86(_mov_cxd16),        /* 0xb9 */\n\t\tPREFIX86(_mov_dxd16),        /* 0xba */\n\t\tPREFIX86(_mov_bxd16),        /* 0xbb */\n\t\tPREFIX86(_mov_spd16),        /* 0xbc */\n\t\tPREFIX86(_mov_bpd16),        /* 0xbd */\n\t\tPREFIX86(_mov_sid16),        /* 0xbe */\n\t\tPREFIX86(_mov_did16),        /* 0xbf */\n\t\tPREFIX86(_invalid), // PREFIX86(_rotshft_bd8),      /* 0xc0 */\n\t\tPREFIX86(_invalid), // PREFIX86(_rotshft_wd8),      /* 0xc1 */\n\t\tPREFIX86(_ret_d16),          /* 0xc2 */\n\t\tPREFIX86(_ret),              /* 0xc3 */\n\t\tPREFIX86(_les_dw),           /* 0xc4 */\n\t\tPREFIX86(_lds_dw),           /* 0xc5 */\n\t\tPREFIX86(_mov_bd8),          /* 0xc6 */\n\t\tPREFIX86(_mov_wd16),         /* 0xc7 */\n\t\tPREFIX86(_invalid), //i_enter),            /* 0xc8 */\n\t\tPREFIX86(_invalid), //leave),            /* 0xc9 */\n\t\tPREFIX86(_retf_d16),         /* 0xca */\n\t\tPREFIX86(_retf),             /* 0xcb */\n\t\tPREFIX86(_int3),             /* 0xcc */\n\t\tPREFIX86(_int),              /* 0xcd */\n\t\tPREFIX86(_into),             /* 0xce */\n\t\tPREFIX86(_iret),             /* 0xcf */\n\t\tPREFIX86(_rotshft_b),        /* 0xd0 */\n\t\tPREFIX86(_rotshft_w),        /* 0xd1 */\n\t\tPREFIX86(_rotshft_bcl),      /* 0xd2 */\n\t\tPREFIX86(_rotshft_wcl),      /* 0xd3 */\n\t\tPREFIX86(_aam),              /* 0xd4 */\n\t\tPREFIX86(_aad),              /* 0xd5 */\n\t\tPREFIX86(_invalid),\n\t\tPREFIX86(_xlat),             /* 0xd7 */\n\t\tPREFIX86(_escape),           /* 0xd8 */\n\t\tPREFIX86(_escape),           /* 0xd9 */\n\t\tPREFIX86(_escape),           /* 0xda */\n\t\tPREFIX86(_escape),           /* 0xdb */\n\t\tPREFIX86(_escape),           /* 0xdc */\n\t\tPREFIX86(_escape),           /* 0xdd */\n\t\tPREFIX86(_escape),           /* 0xde */\n\t\tPREFIX86(_escape),           /* 0xdf */\n\t\tPREFIX86(_loopne),           /* 0xe0 */\n\t\tPREFIX86(_loope),            /* 0xe1 */\n\t\tPREFIX86(_loop),             /* 0xe2 */\n\t\tPREFIX86(_jcxz),             /* 0xe3 */\n\t\tPREFIX86(_inal),             /* 0xe4 */\n\t\tPREFIX86(_inax),             /* 0xe5 */\n\t\tPREFIX86(_outal),            /* 0xe6 */\n\t\tPREFIX86(_outax),            /* 0xe7 */\n\t\tPREFIX86(_call_d16),         /* 0xe8 */\n\t\tPREFIX86(_jmp_d16),          /* 0xe9 */\n\t\tPREFIX86(_jmp_far),          /* 0xea */\n\t\tPREFIX86(_jmp_d8),           /* 0xeb */\n\t\tPREFIX86(_inaldx),           /* 0xec */\n\t\tPREFIX86(_inaxdx),           /* 0xed */\n\t\tPREFIX86(_outdxal),          /* 0xee */\n\t\tPREFIX86(_outdxax),          /* 0xef */\n\t\tPREFIX86(_lock),             /* 0xf0 */\n\t\tPREFIX86(_invalid),          /* 0xf1 */\n\t\tPREFIX86(_repne),            /* 0xf2 */\n\t\tPREFIX86(_repe),             /* 0xf3 */\n\t\tPREFIX86(_hlt),     /* 0xf4 */\n\t\tPREFIX86(_cmc),              /* 0xf5 */\n\t\tPREFIX86(_f6pre),            /* 0xf6 */\n\t\tPREFIX86(_f7pre),            /* 0xf7 */\n\t\tPREFIX86(_clc),              /* 0xf8 */\n\t\tPREFIX86(_stc),              /* 0xf9 */\n\t\tPREFIX86(_cli),              /* 0xfa */\n\t\tPREFIX86(_sti),              /* 0xfb */\n\t\tPREFIX86(_cld),              /* 0xfc */\n\t\tPREFIX86(_std),              /* 0xfd */\n\t\tPREFIX86(_fepre),            /* 0xfe */\n\t\tPREFIX86(_ffpre)             /* 0xff */\n};\n\n#if defined(BIGCASE) && !defined(RS6000)\n\t/* Some compilers cannot handle large case statements */\n#define TABLE86 \\\n\tswitch(FETCHOP)\\\n\t{\\\n\tcase 0x00:    PREFIX86(_add_br8)(); break;\\\n\tcase 0x01:    PREFIX86(_add_wr16)(); break;\\\n\tcase 0x02:    PREFIX86(_add_r8b)(); break;\\\n\tcase 0x03:    PREFIX86(_add_r16w)(); break;\\\n\tcase 0x04:    PREFIX86(_add_ald8)(); break;\\\n\tcase 0x05:    PREFIX86(_add_axd16)(); break;\\\n\tcase 0x06:    PREFIX86(_push_es)(); break;\\\n\tcase 0x07:    PREFIX86(_pop_es)(); break;\\\n\tcase 0x08:    PREFIX86(_or_br8)(); break;\\\n\tcase 0x09:    PREFIX86(_or_wr16)(); break;\\\n\tcase 0x0a:    PREFIX86(_or_r8b)(); break;\\\n\tcase 0x0b:    PREFIX86(_or_r16w)(); break;\\\n\tcase 0x0c:    PREFIX86(_or_ald8)(); break;\\\n\tcase 0x0d:    PREFIX86(_or_axd16)(); break;\\\n\tcase 0x0e:    PREFIX86(_push_cs)(); break;\\\n\tcase 0x0f:    PREFIX86(_invalid)(); break;\\\n\tcase 0x10:    PREFIX86(_adc_br8)(); break;\\\n\tcase 0x11:    PREFIX86(_adc_wr16)(); break;\\\n\tcase 0x12:    PREFIX86(_adc_r8b)(); break;\\\n\tcase 0x13:    PREFIX86(_adc_r16w)(); break;\\\n\tcase 0x14:    PREFIX86(_adc_ald8)(); break;\\\n\tcase 0x15:    PREFIX86(_adc_axd16)(); break;\\\n\tcase 0x16:    PREFIX86(_push_ss)(); break;\\\n\tcase 0x17:    PREFIX86(_pop_ss)(); break;\\\n\tcase 0x18:    PREFIX86(_sbb_br8)(); break;\\\n\tcase 0x19:    PREFIX86(_sbb_wr16)(); break;\\\n\tcase 0x1a:    PREFIX86(_sbb_r8b)(); break;\\\n\tcase 0x1b:    PREFIX86(_sbb_r16w)(); break;\\\n\tcase 0x1c:    PREFIX86(_sbb_ald8)(); break;\\\n\tcase 0x1d:    PREFIX86(_sbb_axd16)(); break;\\\n\tcase 0x1e:    PREFIX86(_push_ds)(); break;\\\n\tcase 0x1f:    PREFIX86(_pop_ds)(); break;\\\n\tcase 0x20:    PREFIX86(_and_br8)(); break;\\\n\tcase 0x21:    PREFIX86(_and_wr16)(); break;\\\n\tcase 0x22:    PREFIX86(_and_r8b)(); break;\\\n\tcase 0x23:    PREFIX86(_and_r16w)(); break;\\\n\tcase 0x24:    PREFIX86(_and_ald8)(); break;\\\n\tcase 0x25:    PREFIX86(_and_axd16)(); break;\\\n\tcase 0x26:    PREFIX86(_es)(); break;\\\n\tcase 0x27:    PREFIX86(_daa)(); break;\\\n\tcase 0x28:    PREFIX86(_sub_br8)(); break;\\\n\tcase 0x29:    PREFIX86(_sub_wr16)(); break;\\\n\tcase 0x2a:    PREFIX86(_sub_r8b)(); break;\\\n\tcase 0x2b:    PREFIX86(_sub_r16w)(); break;\\\n\tcase 0x2c:    PREFIX86(_sub_ald8)(); break;\\\n\tcase 0x2d:    PREFIX86(_sub_axd16)(); break;\\\n\tcase 0x2e:    PREFIX86(_cs)(); break;\\\n\tcase 0x2f:    PREFIX86(_das)(); break;\\\n\tcase 0x30:    PREFIX86(_xor_br8)(); break;\\\n\tcase 0x31:    PREFIX86(_xor_wr16)(); break;\\\n\tcase 0x32:    PREFIX86(_xor_r8b)(); break;\\\n\tcase 0x33:    PREFIX86(_xor_r16w)(); break;\\\n\tcase 0x34:    PREFIX86(_xor_ald8)(); break;\\\n\tcase 0x35:    PREFIX86(_xor_axd16)(); break;\\\n\tcase 0x36:    PREFIX86(_ss)(); break;\\\n\tcase 0x37:    PREFIX86(_aaa)(); break;\\\n\tcase 0x38:    PREFIX86(_cmp_br8)(); break;\\\n\tcase 0x39:    PREFIX86(_cmp_wr16)(); break;\\\n\tcase 0x3a:    PREFIX86(_cmp_r8b)(); break;\\\n\tcase 0x3b:    PREFIX86(_cmp_r16w)(); break;\\\n\tcase 0x3c:    PREFIX86(_cmp_ald8)(); break;\\\n\tcase 0x3d:    PREFIX86(_cmp_axd16)(); break;\\\n\tcase 0x3e:    PREFIX86(_ds)(); break;\\\n\tcase 0x3f:    PREFIX86(_aas)(); break;\\\n\tcase 0x40:    PREFIX86(_inc_ax)(); break;\\\n\tcase 0x41:    PREFIX86(_inc_cx)(); break;\\\n\tcase 0x42:    PREFIX86(_inc_dx)(); break;\\\n\tcase 0x43:    PREFIX86(_inc_bx)(); break;\\\n\tcase 0x44:    PREFIX86(_inc_sp)(); break;\\\n\tcase 0x45:    PREFIX86(_inc_bp)(); break;\\\n\tcase 0x46:    PREFIX86(_inc_si)(); break;\\\n\tcase 0x47:    PREFIX86(_inc_di)(); break;\\\n\tcase 0x48:    PREFIX86(_dec_ax)(); break;\\\n\tcase 0x49:    PREFIX86(_dec_cx)(); break;\\\n\tcase 0x4a:    PREFIX86(_dec_dx)(); break;\\\n\tcase 0x4b:    PREFIX86(_dec_bx)(); break;\\\n\tcase 0x4c:    PREFIX86(_dec_sp)(); break;\\\n\tcase 0x4d:    PREFIX86(_dec_bp)(); break;\\\n\tcase 0x4e:    PREFIX86(_dec_si)(); break;\\\n\tcase 0x4f:    PREFIX86(_dec_di)(); break;\\\n\tcase 0x50:    PREFIX86(_push_ax)(); break;\\\n\tcase 0x51:    PREFIX86(_push_cx)(); break;\\\n\tcase 0x52:    PREFIX86(_push_dx)(); break;\\\n\tcase 0x53:    PREFIX86(_push_bx)(); break;\\\n\tcase 0x54:    PREFIX86(_push_sp)(); break;\\\n\tcase 0x55:    PREFIX86(_push_bp)(); break;\\\n\tcase 0x56:    PREFIX86(_push_si)(); break;\\\n\tcase 0x57:    PREFIX86(_push_di)(); break;\\\n\tcase 0x58:    PREFIX86(_pop_ax)(); break;\\\n\tcase 0x59:    PREFIX86(_pop_cx)(); break;\\\n\tcase 0x5a:    PREFIX86(_pop_dx)(); break;\\\n\tcase 0x5b:    PREFIX86(_pop_bx)(); break;\\\n\tcase 0x5c:    PREFIX86(_pop_sp)(); break;\\\n\tcase 0x5d:    PREFIX86(_pop_bp)(); break;\\\n\tcase 0x5e:    PREFIX86(_pop_si)(); break;\\\n\tcase 0x5f:    PREFIX86(_pop_di)(); break;\\\n\t\t\tcase 0x60:    PREFIX86(_invalid_2b)(); break;\\\n\t\t\tcase 0x61:    PREFIX86(_invalid_2b)(); break;\\\n\t\t\tcase 0x62:    PREFIX86(_invalid_2b)(); break;\\\n\tcase 0x63:    PREFIX86(_invalid_2b)(); break;\\\n\tcase 0x64:    PREFIX86(_invalid_2b)(); break;\\\n\tcase 0x65:    PREFIX86(_invalid_2b)(); break;\\\n\tcase 0x66:    PREFIX86(_invalid_2b)(); break;\\\n\tcase 0x67:    PREFIX86(_invalid_2b)(); break;\\\n\t\t\tcase 0x68:    PREFIX86(_invalid_2b)(); break;\\\n\t\t\tcase 0x69:    PREFIX86(_invalid_2b)(); break;\\\n\t\t\tcase 0x6a:    PREFIX86(_invalid_2b)(); break;\\\n\t\t\tcase 0x6b:    PREFIX86(_invalid_2b)(); break;\\\n\t\t\tcase 0x6c:    PREFIX86(_invalid_2b)(); break;\\\n\t\t\tcase 0x6d:    PREFIX86(_invalid_2b)(); break;\\\n\t\t\tcase 0x6e:    PREFIX86(_invalid_2b)(); break;\\\n\t\t\tcase 0x6f:    PREFIX86(_invalid_2b)(); break;\\\n\tcase 0x70:    PREFIX86(_jo)(); break;\\\n\tcase 0x71:    PREFIX86(_jno)(); break;\\\n\tcase 0x72:    PREFIX86(_jb)(); break;\\\n\tcase 0x73:    PREFIX86(_jnb)(); break;\\\n\tcase 0x74:    PREFIX86(_jz)(); break;\\\n\tcase 0x75:    PREFIX86(_jnz)(); break;\\\n\tcase 0x76:    PREFIX86(_jbe)(); break;\\\n\tcase 0x77:    PREFIX86(_jnbe)(); break;\\\n\tcase 0x78:    PREFIX86(_js)(); break;\\\n\tcase 0x79:    PREFIX86(_jns)(); break;\\\n\tcase 0x7a:    PREFIX86(_jp)(); break;\\\n\tcase 0x7b:    PREFIX86(_jnp)(); break;\\\n\tcase 0x7c:    PREFIX86(_jl)(); break;\\\n\tcase 0x7d:    PREFIX86(_jnl)(); break;\\\n\tcase 0x7e:    PREFIX86(_jle)(); break;\\\n\tcase 0x7f:    PREFIX86(_jnle)(); break;\\\n\tcase 0x80:    PREFIX86(_80pre)(); break;\\\n\tcase 0x81:    PREFIX86(_81pre)(); break;\\\n\tcase 0x82:    PREFIX86(_82pre)(); break;\\\n\tcase 0x83:    PREFIX86(_83pre)(); break;\\\n\tcase 0x84:    PREFIX86(_test_br8)(); break;\\\n\tcase 0x85:    PREFIX86(_test_wr16)(); break;\\\n\tcase 0x86:    PREFIX86(_xchg_br8)(); break;\\\n\tcase 0x87:    PREFIX86(_xchg_wr16)(); break;\\\n\tcase 0x88:    PREFIX86(_mov_br8)(); break;\\\n\tcase 0x89:    PREFIX86(_mov_wr16)(); break;\\\n\tcase 0x8a:    PREFIX86(_mov_r8b)(); break;\\\n\tcase 0x8b:    PREFIX86(_mov_r16w)(); break;\\\n\tcase 0x8c:    PREFIX86(_mov_wsreg)(); break;\\\n\tcase 0x8d:    PREFIX86(_lea)(); break;\\\n\tcase 0x8e:    PREFIX86(_mov_sregw)(); break;\\\n\tcase 0x8f:    PREFIX86(_popw)(); break;\\\n\tcase 0x90:    PREFIX86(_nop)(); break;\\\n\tcase 0x91:    PREFIX86(_xchg_axcx)(); break;\\\n\tcase 0x92:    PREFIX86(_xchg_axdx)(); break;\\\n\tcase 0x93:    PREFIX86(_xchg_axbx)(); break;\\\n\tcase 0x94:    PREFIX86(_xchg_axsp)(); break;\\\n\tcase 0x95:    PREFIX86(_xchg_axbp)(); break;\\\n\tcase 0x96:    PREFIX86(_xchg_axsi)(); break;\\\n\tcase 0x97:    PREFIX86(_xchg_axdi)(); break;\\\n\tcase 0x98:    PREFIX86(_cbw)(); break;\\\n\tcase 0x99:    PREFIX86(_cwd)(); break;\\\n\tcase 0x9a:    PREFIX86(_call_far)(); break;\\\n\tcase 0x9b:    PREFIX86(_wait)(); break;\\\n\tcase 0x9c:    PREFIX86(_pushf)(); break;\\\n\tcase 0x9d:    PREFIX86(_popf)(); break;\\\n\tcase 0x9e:    PREFIX86(_sahf)(); break;\\\n\tcase 0x9f:    PREFIX86(_lahf)(); break;\\\n\tcase 0xa0:    PREFIX86(_mov_aldisp)(); break;\\\n\tcase 0xa1:    PREFIX86(_mov_axdisp)(); break;\\\n\tcase 0xa2:    PREFIX86(_mov_dispal)(); break;\\\n\tcase 0xa3:    PREFIX86(_mov_dispax)(); break;\\\n\tcase 0xa4:    PREFIX86(_movsb)(); break;\\\n\tcase 0xa5:    PREFIX86(_movsw)(); break;\\\n\tcase 0xa6:    PREFIX86(_cmpsb)(); break;\\\n\tcase 0xa7:    PREFIX86(_cmpsw)(); break;\\\n\tcase 0xa8:    PREFIX86(_test_ald8)(); break;\\\n\tcase 0xa9:    PREFIX86(_test_axd16)(); break;\\\n\tcase 0xaa:    PREFIX86(_stosb)(); break;\\\n\tcase 0xab:    PREFIX86(_stosw)(); break;\\\n\tcase 0xac:    PREFIX86(_lodsb)(); break;\\\n\tcase 0xad:    PREFIX86(_lodsw)(); break;\\\n\tcase 0xae:    PREFIX86(_scasb)(); break;\\\n\tcase 0xaf:    PREFIX86(_scasw)(); break;\\\n\tcase 0xb0:    PREFIX86(_mov_ald8)(); break;\\\n\tcase 0xb1:    PREFIX86(_mov_cld8)(); break;\\\n\tcase 0xb2:    PREFIX86(_mov_dld8)(); break;\\\n\tcase 0xb3:    PREFIX86(_mov_bld8)(); break;\\\n\tcase 0xb4:    PREFIX86(_mov_ahd8)(); break;\\\n\tcase 0xb5:    PREFIX86(_mov_chd8)(); break;\\\n\tcase 0xb6:    PREFIX86(_mov_dhd8)(); break;\\\n\tcase 0xb7:    PREFIX86(_mov_bhd8)(); break;\\\n\tcase 0xb8:    PREFIX86(_mov_axd16)(); break;\\\n\tcase 0xb9:    PREFIX86(_mov_cxd16)(); break;\\\n\tcase 0xba:    PREFIX86(_mov_dxd16)(); break;\\\n\tcase 0xbb:    PREFIX86(_mov_bxd16)(); break;\\\n\tcase 0xbc:    PREFIX86(_mov_spd16)(); break;\\\n\tcase 0xbd:    PREFIX86(_mov_bpd16)(); break;\\\n\tcase 0xbe:    PREFIX86(_mov_sid16)(); break;\\\n\tcase 0xbf:    PREFIX86(_mov_did16)(); break;\\\n\t\t\tcase 0xc0:    PREFIX86(_invalid)(); break;\\\n\t\t\tcase 0xc1:    PREFIX86(_invalid)(); break;\\\n\tcase 0xc2:    PREFIX86(_ret_d16)(); break;\\\n\tcase 0xc3:    PREFIX86(_ret)(); break;\\\n\tcase 0xc4:    PREFIX86(_les_dw)(); break;\\\n\tcase 0xc5:    PREFIX86(_lds_dw)(); break;\\\n\tcase 0xc6:    PREFIX86(_mov_bd8)(); break;\\\n\tcase 0xc7:    PREFIX86(_mov_wd16)(); break;\\\n\t\t\tcase 0xc8:    PREFIX86(_invalid)(); break;\\\n\t\t\tcase 0xc9:    PREFIX86(_invalid)(); break;\\\n\tcase 0xca:    PREFIX86(_retf_d16)(); break;\\\n\tcase 0xcb:    PREFIX86(_retf)(); break;\\\n\tcase 0xcc:    PREFIX86(_int3)(); break;\\\n\tcase 0xcd:    PREFIX86(_int)(); break;\\\n\tcase 0xce:    PREFIX86(_into)(); break;\\\n\tcase 0xcf:    PREFIX86(_iret)(); break;\\\n\t\t\tcase 0xd0:    PREFIX86(_rotshft_b)(); break;\\\n\t\t\tcase 0xd1:    PREFIX86(_rotshft_w)(); break;\\\n\t\t\tcase 0xd2:    PREFIX86(_rotshft_bcl)(); break;\\\n\t\t\tcase 0xd3:    PREFIX86(_rotshft_wcl)(); break;\\\n\tcase 0xd4:    PREFIX86(_aam)(); break;\\\n\tcase 0xd5:    PREFIX86(_aad)(); break;\\\n\tcase 0xd6:    PREFIX86(_invalid)(); break;\\\n\tcase 0xd7:    PREFIX86(_xlat)(); break;\\\n\tcase 0xd8:    PREFIX86(_escape)(); break;\\\n\tcase 0xd9:    PREFIX86(_escape)(); break;\\\n\tcase 0xda:    PREFIX86(_escape)(); break;\\\n\tcase 0xdb:    PREFIX86(_escape)(); break;\\\n\tcase 0xdc:    PREFIX86(_escape)(); break;\\\n\tcase 0xdd:    PREFIX86(_escape)(); break;\\\n\tcase 0xde:    PREFIX86(_escape)(); break;\\\n\tcase 0xdf:    PREFIX86(_escape)(); break;\\\n\tcase 0xe0:    PREFIX86(_loopne)(); break;\\\n\tcase 0xe1:    PREFIX86(_loope)(); break;\\\n\tcase 0xe2:    PREFIX86(_loop)(); break;\\\n\tcase 0xe3:    PREFIX86(_jcxz)(); break;\\\n\tcase 0xe4:    PREFIX86(_inal)(); break;\\\n\tcase 0xe5:    PREFIX86(_inax)(); break;\\\n\tcase 0xe6:    PREFIX86(_outal)(); break;\\\n\tcase 0xe7:    PREFIX86(_outax)(); break;\\\n\tcase 0xe8:    PREFIX86(_call_d16)(); break;\\\n\tcase 0xe9:    PREFIX86(_jmp_d16)(); break;\\\n\tcase 0xea:    PREFIX86(_jmp_far)(); break;\\\n\tcase 0xeb:    PREFIX86(_jmp_d8)(); break;\\\n\tcase 0xec:    PREFIX86(_inaldx)(); break;\\\n\tcase 0xed:    PREFIX86(_inaxdx)(); break;\\\n\tcase 0xee:    PREFIX86(_outdxal)(); break;\\\n\tcase 0xef:    PREFIX86(_outdxax)(); break;\\\n\tcase 0xf0:    PREFIX86(_lock)(); break;\\\n\tcase 0xf1:    PREFIX86(_invalid)(); break;\\\n\tcase 0xf2:    PREFIX86(_repne)(); break;\\\n\tcase 0xf3:    PREFIX86(_repe)(); break;\\\n\tcase 0xf4:    PREFIX86(_hlt)(); break;\\\n\tcase 0xf5:    PREFIX86(_cmc)(); break;\\\n\tcase 0xf6:    PREFIX86(_f6pre)(); break;\\\n\tcase 0xf7:    PREFIX86(_f7pre)(); break;\\\n\tcase 0xf8:    PREFIX86(_clc)(); break;\\\n\tcase 0xf9:    PREFIX86(_stc)(); break;\\\n\tcase 0xfa:    PREFIX86(_cli)(); break;\\\n\tcase 0xfb:    PREFIX86(_sti)(); break;\\\n\tcase 0xfc:    PREFIX86(_cld)(); break;\\\n\tcase 0xfd:    PREFIX86(_std)(); break;\\\n\tcase 0xfe:    PREFIX86(_fepre)(); break;\\\n\tcase 0xff:    PREFIX86(_ffpre)(); break;\\\n\t};\n#else\n#define TABLE86 PREFIX86(_instruction)[FETCHOP]();\n#endif\n"
  },
  {
    "path": "vm86/mame/emu/cpu/readme_msdos_player.txt",
    "content": "Based on MAME 0.152.\n"
  },
  {
    "path": "vm86/mame/emu/cpu/vtlb.c",
    "content": "// license:BSD-3-Clause\n// copyright-holders:Aaron Giles\n/***************************************************************************\n\n    vtlb.c\n\n    Generic virtual TLB implementation.\n\n***************************************************************************/\n\n//#include \"emu.h\"\n#include \"vtlb.h\"\n\n\n\n/***************************************************************************\n    DEBUGGING\n***************************************************************************/\n\n#define PRINTF_TLB          (0)\n\n\n\n/***************************************************************************\n    TYPE DEFINITIONS\n***************************************************************************/\n\n/* VTLB state */\nstruct vtlb_state\n{\n//\tcpu_device *        cpudevice;          /* CPU device */\n\taddress_spacenum    space;              /* address space */\n\tint                 dynamic;            /* number of dynamic entries */\n\tint                 fixed;              /* number of fixed entries */\n\tint                 dynindex;           /* index of next dynamic entry */\n\tint                 pageshift;          /* bits to shift to get page index */\n\tint                 addrwidth;          /* logical address bus width */\n\toffs_t *            live;               /* array of live entries by table index */\n\tint *               fixedpages;         /* number of pages each fixed entry covers */\n\tvtlb_entry *        table;              /* table of entries by address */\n\tvtlb_entry *        save;               /* cache of live table entries for saving */\n};\n\n\n\n/***************************************************************************\n    INITIALIZATION/TEARDOWN\n***************************************************************************/\n\n/*-------------------------------------------------\n    vtlb_alloc - allocate a new VTLB for the\n    given CPU\n-------------------------------------------------*/\n\nvtlb_state *vtlb_alloc(/*device_t *cpu, */address_spacenum space, int fixed_entries, int dynamic_entries)\n{\n\tvtlb_state *vtlb;\n\n\t/* allocate memory for the core structure */\n\tvtlb = (vtlb_state *)calloc(1, sizeof(vtlb_state));\n\n\t/* fill in CPU information */\n//\tvtlb->cpudevice = downcast<cpu_device *>(cpu);\n\tvtlb->space = space;\n\tvtlb->dynamic = dynamic_entries;\n\tvtlb->fixed = fixed_entries;\n//\tconst address_space_config *spaceconfig = device_get_space_config(*cpu, space);\n//\tassert(spaceconfig != NULL);\n//\tvtlb->pageshift = spaceconfig->m_page_shift;\n//\tvtlb->addrwidth = spaceconfig->m_logaddr_width;\n\t/* for i386 */\n\tvtlb->pageshift = 12;\n\tvtlb->addrwidth = 32;\n\n\t/* validate CPU information */\n\tassert((1 << vtlb->pageshift) > VTLB_FLAGS_MASK);\n\tassert(vtlb->addrwidth > vtlb->pageshift);\n\n\t/* allocate the entry array */\n\tvtlb->live = (offs_t *)calloc(fixed_entries + dynamic_entries, sizeof(offs_t));\n//\tcpu->save_pointer(NAME(vtlb->live), fixed_entries + dynamic_entries, space);\n\n\t/* allocate the lookup table */\n\tvtlb->table = (vtlb_entry *)calloc((size_t) 1 << (vtlb->addrwidth - vtlb->pageshift), sizeof(vtlb_entry));\n//\tcpu->save_pointer(NAME(vtlb->table), 1 << (vtlb->addrwidth - vtlb->pageshift), space);\n\n\t/* allocate the fixed page count array */\n\tif (fixed_entries > 0)\n\t{\n\t\tvtlb->fixedpages = (int *)calloc(fixed_entries, sizeof(int));\n//\t\tcpu->save_pointer(NAME(vtlb->fixedpages), fixed_entries, space);\n\t}\n\treturn vtlb;\n}\n\n\n/*-------------------------------------------------\n    vtlb_free - free an allocated VTLB\n-------------------------------------------------*/\n\nvoid vtlb_free(vtlb_state *vtlb)\n{\n\t/* free the fixed pages if allocated */\n\tif (vtlb->fixedpages != NULL)\n\t\tfree(vtlb->fixedpages);\n\n\t/* free the table and array if they exist */\n\tif (vtlb->live != NULL)\n\t\tfree(vtlb->live);\n\tif (vtlb->table != NULL)\n\t\tfree(vtlb->table);\n\n\t/* and then the VTLB object itself */\n\tfree(vtlb);\n}\n\n\n\n/***************************************************************************\n    FILLING\n***************************************************************************/\n\n/*-------------------------------------------------\n    vtlb_fill - rcalled by the CPU core in\n    response to an unmapped access\n-------------------------------------------------*/\n\nint vtlb_fill(vtlb_state *vtlb, offs_t address, int intention)\n{\n\toffs_t tableindex = address >> vtlb->pageshift;\n\tvtlb_entry entry = vtlb->table[tableindex];\n\toffs_t taddress;\n\n//\tif (PRINTF_TLB)\n//\t\tprintf(\"vtlb_fill: %08X(%X) ... \", address, intention);\n\n\t/* should not be called here if the entry is in the table already */\n//  assert((entry & (1 << intention)) == 0);\n\n\t/* if we have no dynamic entries, we always fail */\n\tif (vtlb->dynamic == 0)\n\t{\n//\t\tif (PRINTF_TLB)\n//\t\t\tprintf(\"failed: no dynamic entries\\n\");\n\t\treturn FALSE;\n\t}\n\n\t/* ask the CPU core to translate for us */\n\ttaddress = address;\n//\tif (!vtlb->cpudevice->translate(vtlb->space, intention, taddress))\n\tif (!CPU_TRANSLATE_NAME(i386)(vtlb->space, intention, &taddress))\n\t{\n//\t\tif (PRINTF_TLB)\n//\t\t\tprintf(\"failed: no translation\\n\");\n\t\treturn FALSE;\n\t}\n\n\t/* if this is the first successful translation for this address, allocate a new entry */\n\tif ((entry & VTLB_FLAGS_MASK) == 0)\n\t{\n\t\tint liveindex = vtlb->dynindex++ % vtlb->dynamic;\n\n\t\t/* if an entry already exists at this index, free it */\n\t\tif (vtlb->live[liveindex] != 0)\n\t\t\tvtlb->table[vtlb->live[liveindex] - 1] = 0;\n\n\t\t/* claim this new entry */\n\t\tvtlb->live[liveindex] = tableindex + 1;\n\n\t\t/* form a new blank entry */\n\t\tentry = (taddress >> vtlb->pageshift) << vtlb->pageshift;\n\t\tentry |= VTLB_FLAG_VALID;\n\n//\t\tif (PRINTF_TLB)\n//\t\t\tprintf(\"success (%08X), new entry\\n\", taddress);\n\t}\n\n\t/* otherwise, ensure that different intentions do not produce different addresses */\n\telse\n\t{\n\t\tassert((entry >> vtlb->pageshift) == (taddress >> vtlb->pageshift));\n\t\tassert(entry & VTLB_FLAG_VALID);\n\n//\t\tif (PRINTF_TLB)\n//\t\t\tprintf(\"success (%08X), existing entry\\n\", taddress);\n\t}\n\n\t/* add the intention to the list of valid intentions and store */\n\tentry |= 1 << (intention & (TRANSLATE_TYPE_MASK | TRANSLATE_USER_MASK));\n\tvtlb->table[tableindex] = entry;\n\treturn TRUE;\n}\n\n\n/*-------------------------------------------------\n    vtlb_load - load a fixed VTLB entry\n-------------------------------------------------*/\n\nvoid vtlb_load(vtlb_state *vtlb, int entrynum, int numpages, offs_t address, vtlb_entry value)\n{\n\toffs_t tableindex = address >> vtlb->pageshift;\n\tint liveindex = vtlb->dynamic + entrynum;\n\tint pagenum;\n\n\t/* must be in range */\n\tassert(entrynum >= 0 && entrynum < vtlb->fixed);\n\n//\tif (PRINTF_TLB)\n//\t\tprintf(\"vtlb_load %d for %d pages at %08X == %08X\\n\", entrynum, numpages, address, value);\n\n\t/* if an entry already exists at this index, free it */\n\tif (vtlb->live[liveindex] != 0)\n\t{\n\t\tint pagecount = vtlb->fixedpages[entrynum];\n\t\tint oldtableindex = vtlb->live[liveindex] - 1;\n\t\tfor (pagenum = 0; pagenum < pagecount; pagenum++)\n\t\t\tvtlb->table[oldtableindex + pagenum] = 0;\n\t}\n\n\t/* claim this new entry */\n\tvtlb->live[liveindex] = tableindex + 1;\n\n\t/* store the raw value, making sure the \"fixed\" flag is set */\n\tvalue |= VTLB_FLAG_FIXED;\n\tvtlb->fixedpages[entrynum] = numpages;\n\tfor (pagenum = 0; pagenum < numpages; pagenum++)\n\t\tvtlb->table[tableindex + pagenum] = value + (pagenum << vtlb->pageshift);\n}\n\n/*-------------------------------------------------\n    vtlb_dynload - load a dynamic VTLB entry\n-------------------------------------------------*/\n\nvoid vtlb_dynload(vtlb_state *vtlb, UINT32 index, offs_t address, vtlb_entry value)\n{\n\tvtlb_entry entry = vtlb->table[index];\n\n\tif (vtlb->dynamic == 0)\n\t{\n//\t\tif (PRINTF_TLB)\n//\t\t\tprintf(\"failed: no dynamic entries\\n\");\n\t\treturn;\n\t}\n\n\tint liveindex = vtlb->dynindex++ % vtlb->dynamic;\n\t/* is entry already live? */\n\tif (!(entry & VTLB_FLAG_VALID))\n\t{\n\t\t/* if an entry already exists at this index, free it */\n\t\tif (vtlb->live[liveindex] != 0)\n\t\t\tvtlb->table[vtlb->live[liveindex] - 1] = 0;\n\n\t\t/* claim this new entry */\n\t\tvtlb->live[liveindex] = index + 1;\n\t}\n\t/* form a new blank entry */\n\tentry = (address >> vtlb->pageshift) << vtlb->pageshift;\n\tentry |= VTLB_FLAG_VALID | value;\n\n//\tif (PRINTF_TLB)\n//\t\tprintf(\"success (%08X), new entry\\n\", address);\n\n\tvtlb->table[index] = entry;\n}\n\n/***************************************************************************\n    FLUSHING\n***************************************************************************/\n\n/*-------------------------------------------------\n    vtlb_flush_dynamic - flush all knowledge\n    from the dynamic part of the VTLB\n-------------------------------------------------*/\n\nvoid vtlb_flush_dynamic(vtlb_state *vtlb)\n{\n\tint liveindex;\n\n//\tif (PRINTF_TLB)\n//\t\tprintf(\"vtlb_flush_dynamic\\n\");\n\n\t/* loop over live entries and release them from the table */\n\tfor (liveindex = 0; liveindex < vtlb->dynamic; liveindex++)\n\t\tif (vtlb->live[liveindex] != 0)\n\t\t{\n\t\t\toffs_t tableindex = vtlb->live[liveindex] - 1;\n\t\t\tvtlb->table[tableindex] = 0;\n\t\t\tvtlb->live[liveindex] = 0;\n\t\t}\n}\n\n\n/*-------------------------------------------------\n    vtlb_flush_address - flush knowledge of a\n    particular address from the VTLB\n-------------------------------------------------*/\n\nvoid vtlb_flush_address(vtlb_state *vtlb, offs_t address)\n{\n\toffs_t tableindex = address >> vtlb->pageshift;\n\n//\tif (PRINTF_TLB)\n//\t\tprintf(\"vtlb_flush_address %08X\\n\", address);\n\n\t/* free the entry in the table; for speed, we leave the entry in the live array */\n\tvtlb->table[tableindex] = 0;\n}\n\n\n\n/***************************************************************************\n    ACCESSORS\n***************************************************************************/\n\n/*-------------------------------------------------\n    vtlb_table - return a pointer to the base of\n    the linear VTLB lookup table\n-------------------------------------------------*/\n\nconst vtlb_entry *vtlb_table(vtlb_state *vtlb)\n{\n\treturn vtlb->table;\n}\n"
  },
  {
    "path": "vm86/mame/emu/cpu/vtlb.h",
    "content": "// license:BSD-3-Clause\n// copyright-holders:Aaron Giles\n/***************************************************************************\n\n    vtlb.h\n\n    Generic virtual TLB implementation.\n\n***************************************************************************/\n\n#pragma once\n\n#ifndef __VTLB_H__\n#define __VTLB_H__\n\n\n\n/***************************************************************************\n    CONSTANTS\n***************************************************************************/\n\n#define VTLB_FLAGS_MASK             0xff\n\n#define VTLB_READ_ALLOWED           0x01        /* (1 << TRANSLATE_READ) */\n#define VTLB_WRITE_ALLOWED          0x02        /* (1 << TRANSLATE_WRITE) */\n#define VTLB_FETCH_ALLOWED          0x04        /* (1 << TRANSLATE_FETCH) */\n#define VTLB_FLAG_VALID             0x08\n#define VTLB_USER_READ_ALLOWED      0x10        /* (1 << TRANSLATE_READ_USER) */\n#define VTLB_USER_WRITE_ALLOWED     0x20        /* (1 << TRANSLATE_WRITE_USER) */\n#define VTLB_USER_FETCH_ALLOWED     0x40        /* (1 << TRANSLATE_FETCH_USER) */\n#define VTLB_FLAG_FIXED             0x80\n\n\n\n/***************************************************************************\n    TYPE DEFINITIONS\n***************************************************************************/\n\n/* represents an entry in the VTLB */\ntypedef UINT32 vtlb_entry;\n\n\n/* opaque structure describing VTLB state */\nstruct vtlb_state;\n\n\n\n/***************************************************************************\n    FUNCTION PROTOTYPES\n***************************************************************************/\n\n\n/* ----- initialization/teardown ----- */\n\n/* allocate a new VTLB for the given CPU */\nvtlb_state *vtlb_alloc(/*device_t *cpu, */address_spacenum space, int fixed_entries, int dynamic_entries);\n\n/* free an allocated VTLB */\nvoid vtlb_free(vtlb_state *vtlb);\n\n\n/* ----- filling ----- */\n\n/* called by the CPU core in response to an unmapped access */\nint vtlb_fill(vtlb_state *vtlb, offs_t address, int intention);\n\n/* load a fixed VTLB entry */\nvoid vtlb_load(vtlb_state *vtlb, int entrynum, int numpages, offs_t address, vtlb_entry value);\n\n/* load a dynamic VTLB entry */\nvoid vtlb_dynload(vtlb_state *vtlb, UINT32 index, offs_t address, vtlb_entry value);\n\n/* ----- flushing ----- */\n\n/* flush all knowledge from the dynamic part of the VTLB */\nvoid vtlb_flush_dynamic(vtlb_state *vtlb);\n\n/* flush knowledge of a particular address from the VTLB */\nvoid vtlb_flush_address(vtlb_state *vtlb, offs_t address);\n\n\n/* ----- accessors ----- */\n\n/* return a pointer to the base of the linear VTLB lookup table */\nconst vtlb_entry *vtlb_table(vtlb_state *vtlb);\n\n\n#endif /* __VTLB_H__ */\n"
  },
  {
    "path": "vm86/mame/lib/softfloat/README.txt",
    "content": "MAME note: this package is derived from the following original SoftFloat \npackage and has been \"re-packaged\" to work with MAME's conventions and\nbuild system.  The source files come from bits64/ and bits64/templates\nin the original distribution as MAME requires a compiler with a 64-bit\ninteger type.\n\n\nPackage Overview for SoftFloat Release 2b\n\nJohn R. Hauser\n2002 May 27\n\n\n----------------------------------------------------------------------------\nOverview\n\nSoftFloat is a software implementation of floating-point that conforms to\nthe IEC/IEEE Standard for Binary Floating-Point Arithmetic.  SoftFloat is\ndistributed in the form of C source code.  Compiling the SoftFloat sources\ngenerates two things:\n\n-- A SoftFloat object file (typically `softfloat.o') containing the complete\n   set of IEC/IEEE floating-point routines.\n\n-- A `timesoftfloat' program for evaluating the speed of the SoftFloat\n   routines.  (The SoftFloat module is linked into this program.)\n\nThe SoftFloat package is documented in four text files:\n\n   SoftFloat.txt          Documentation for using the SoftFloat functions.\n   SoftFloat-source.txt   Documentation for compiling SoftFloat.\n   SoftFloat-history.txt  History of major changes to SoftFloat.\n   timesoftfloat.txt      Documentation for using `timesoftfloat'.\n\nOther files in the package comprise the source code for SoftFloat.\n\nPlease be aware that some work is involved in porting this software to other\ntargets.  It is not just a matter of getting `make' to complete without\nerror messages.  I would have written the code that way if I could, but\nthere are fundamental differences between systems that can't be hidden.\nYou should not attempt to compile SoftFloat without first reading both\n`SoftFloat.txt' and `SoftFloat-source.txt'.\n\n\n----------------------------------------------------------------------------\nLegal Notice\n\nSoftFloat was written by me, John R. Hauser.  This work was made possible in\npart by the International Computer Science Institute, located at Suite 600,\n1947 Center Street, Berkeley, California 94704.  Funding was partially\nprovided by the National Science Foundation under grant MIP-9311980.  The\noriginal version of this code was written as part of a project to build\na fixed-point vector processor in collaboration with the University of\nCalifornia at Berkeley, overseen by Profs. Nelson Morgan and John Wawrzynek.\n\nTHIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort\nhas been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT\nTIMES RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO\nPERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL\nLOSSES, COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO\nFURTHERMORE EFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER\nSCIENCE INSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES,\nCOSTS, OR OTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE\nSOFTWARE.\n\nDerivative works are acceptable, even for commercial purposes, provided\nthat the minimal documentation requirements stated in the source code are\nsatisfied.\n\n\n----------------------------------------------------------------------------\nContact Information\n\nAt the time of this writing, the most up-to-date information about\nSoftFloat and the latest release can be found at the Web page `http://\nwww.cs.berkeley.edu/~jhauser/arithmetic/SoftFloat.html'.\n\n\n"
  },
  {
    "path": "vm86/mame/lib/softfloat/f2xm1.c",
    "content": "/*============================================================================\nThis source file is an extension to the SoftFloat IEC/IEEE Floating-point\nArithmetic Package, Release 2b, written for Bochs (x86 achitecture simulator)\nfloating point emulation.\n\nTHIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\nbeen made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\nRESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\nAND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\nCOSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\nEFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\nINSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\nOTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\n\nDerivative works are acceptable, even for commercial purposes, so long as\n(1) the source code for the derivative work includes prominent notice that\nthe work is derivative, and (2) the source code includes prominent notice with\nthese four paragraphs for those parts of this code that are retained.\n=============================================================================*/\n\n/*============================================================================\n * Written for Bochs (x86 achitecture simulator) by\n *            Stanislav Shwartsman [sshwarts at sourceforge net]\n * ==========================================================================*/\n\n#define FLOAT128\n\n#define USE_estimateDiv128To64\n#include \"mamesf.h\"\n#include \"softfloat.h\"\n#include \"fpu_constant.h\"\n\n#define packFloat_128(zHi, zLo) {(zHi), (zLo)}\n#define PACK_FLOAT_128(hi,lo) packFloat_128(LIT64(hi),LIT64(lo))\n\nstatic const floatx80 floatx80_negone  = packFloatx80(1, 0x3fff, 0x8000000000000000U);\nstatic const floatx80 floatx80_neghalf = packFloatx80(1, 0x3ffe, 0x8000000000000000U);\nstatic const float128 float128_ln2     =\n    packFloat_128(0x3ffe62e42fefa39eU, 0xf35793c7673007e6U);\n\n#define LN2_SIG_HI 0xb17217f7d1cf79abU\n#define LN2_SIG_LO 0xc000000000000000U  /* 67-bit precision */\n\n#define EXP_ARR_SIZE 15\n\nstatic float128 exp_arr[EXP_ARR_SIZE] =\n{\n    PACK_FLOAT_128(0x3fff000000000000, 0x0000000000000000), /*  1 */\n    PACK_FLOAT_128(0x3ffe000000000000, 0x0000000000000000), /*  2 */\n    PACK_FLOAT_128(0x3ffc555555555555, 0x5555555555555555), /*  3 */\n    PACK_FLOAT_128(0x3ffa555555555555, 0x5555555555555555), /*  4 */\n    PACK_FLOAT_128(0x3ff8111111111111, 0x1111111111111111), /*  5 */\n    PACK_FLOAT_128(0x3ff56c16c16c16c1, 0x6c16c16c16c16c17), /*  6 */\n    PACK_FLOAT_128(0x3ff2a01a01a01a01, 0xa01a01a01a01a01a), /*  7 */\n    PACK_FLOAT_128(0x3fefa01a01a01a01, 0xa01a01a01a01a01a), /*  8 */\n    PACK_FLOAT_128(0x3fec71de3a556c73, 0x38faac1c88e50017), /*  9 */\n    PACK_FLOAT_128(0x3fe927e4fb7789f5, 0xc72ef016d3ea6679), /* 10 */\n    PACK_FLOAT_128(0x3fe5ae64567f544e, 0x38fe747e4b837dc7), /* 11 */\n    PACK_FLOAT_128(0x3fe21eed8eff8d89, 0x7b544da987acfe85), /* 12 */\n    PACK_FLOAT_128(0x3fde6124613a86d0, 0x97ca38331d23af68), /* 13 */\n    PACK_FLOAT_128(0x3fda93974a8c07c9, 0xd20badf145dfa3e5), /* 14 */\n    PACK_FLOAT_128(0x3fd6ae7f3e733b81, 0xf11d8656b0ee8cb0)  /* 15 */\n};\n\n#define EXP_BIAS 0x3FFF\n#if 0\n/*----------------------------------------------------------------------------\n| Returns the fraction bits of the extended double-precision floating-point\n| value `a'.\n*----------------------------------------------------------------------------*/\n\nINLINE UINT64 extractFloatx80Frac( floatx80 a )\n{\n\treturn a.low;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the exponent bits of the extended double-precision floating-point\n| value `a'.\n*----------------------------------------------------------------------------*/\n\nINLINE int32 extractFloatx80Exp( floatx80 a )\n{\n\treturn a.high & 0x7FFF;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the sign bit of the extended double-precision floating-point value\n| `a'.\n*----------------------------------------------------------------------------*/\n\nINLINE flag extractFloatx80Sign( floatx80 a )\n{\n\treturn a.high>>15;\n\n}\n\n/*----------------------------------------------------------------------------\n| Normalizes the subnormal extended double-precision floating-point value\n| represented by the denormalized significand `aSig'.  The normalized exponent\n| and significand are stored at the locations pointed to by `zExpPtr' and\n| `zSigPtr', respectively.\n*----------------------------------------------------------------------------*/\n\nINLINE void normalizeFloatx80Subnormal(uint64_t aSig, int32_t *zExpPtr, uint64_t *zSigPtr)\n{\n\tint shiftCount = countLeadingZeros64(aSig);\n\t*zSigPtr = aSig<<shiftCount;\n\t*zExpPtr = 1 - shiftCount;\n}\n\n#endif\n/*----------------------------------------------------------------------------\n| Takes extended double-precision floating-point  NaN  `a' and returns the\n| appropriate NaN result. If `a' is a signaling NaN, the invalid exception\n| is raised.\n*----------------------------------------------------------------------------*/\n\nINLINE floatx80 propagateFloatx80NaN1(floatx80 a)\n{\n    if (floatx80_is_signaling_nan(a))\n        float_raise(float_flag_invalid);\n\n    a.low |= 0xC000000000000000U;\n\n    return a;\n}\n#if 0\n//                            2         3         4               n\n// f(x) ~ C + (C * x) + (C * x) + (C * x) + (C * x) + ... + (C * x)\n//         0    1         2         3         4               n\n//\n//          --       2k                --        2k+1\n//   p(x) = >  C  * x           q(x) = >  C   * x\n//          --  2k                     --  2k+1\n//\n//   f(x) ~ [ p(x) + x * q(x) ]\n//\n\nstatic float128 EvalPoly(float128 x, float128 *arr, unsigned n)\n{\n\tfloat128 x2 = float128_mul(x, x);\n\tunsigned i;\n\n\tassert(n > 1);\n\n\tfloat128 r1 = arr[--n];\n\ti = n;\n\twhile(i >= 2) {\n\t\tr1 = float128_mul(r1, x2);\n\t\ti -= 2;\n\t\tr1 = float128_add(r1, arr[i]);\n\t}\n\tif (i) r1 = float128_mul(r1, x);\n\n\tfloat128 r2 = arr[--n];\n\ti = n;\n\twhile(i >= 2) {\n\t\tr2 = float128_mul(r2, x2);\n\t\ti -= 2;\n\t\tr2 = float128_add(r2, arr[i]);\n\t}\n\tif (i) r2 = float128_mul(r2, x);\n\n\treturn float128_add(r1, r2);\n}\n#endif\n/* required -1 < x < 1 */\nstatic float128 poly_exp(float128 x)\n{\n/*\n    //               2     3     4     5     6     7     8     9\n    //  x           x     x     x     x     x     x     x     x\n    // e - 1 ~ x + --- + --- + --- + --- + --- + --- + --- + --- + ...\n    //              2!    3!    4!    5!    6!    7!    8!    9!\n    //\n    //                     2     3     4     5     6     7     8\n    //              x     x     x     x     x     x     x     x\n    //   = x [ 1 + --- + --- + --- + --- + --- + --- + --- + --- + ... ]\n    //              2!    3!    4!    5!    6!    7!    8!    9!\n    //\n    //           8                          8\n    //          --       2k                --        2k+1\n    //   p(x) = >  C  * x           q(x) = >  C   * x\n    //          --  2k                     --  2k+1\n    //          k=0                        k=0\n    //\n    //    x\n    //   e  - 1 ~ x * [ p(x) + x * q(x) ]\n    //\n*/\n    float128 t = EvalPoly(x, exp_arr, EXP_ARR_SIZE);\n    return float128_mul(t, x);\n}\n\n// =================================================\n//                                  x\n// FX2M1                   Compute 2  - 1\n// =================================================\n\n//\n// Uses the following identities:\n//\n// 1. ----------------------------------------------------------\n//      x    x*ln(2)\n//     2  = e\n//\n// 2. ----------------------------------------------------------\n//                      2     3     4     5           n\n//      x        x     x     x     x     x           x\n//     e  = 1 + --- + --- + --- + --- + --- + ... + --- + ...\n//               1!    2!    3!    4!    5!          n!\n//\n\nfloatx80 f2xm1(floatx80 a)\n{\n    UINT64 zSig0, zSig1, zSig2;\n\n    UINT64 aSig = extractFloatx80Frac(a);\n    INT32 aExp = extractFloatx80Exp(a);\n    int aSign = extractFloatx80Sign(a);\n\n    if (aExp == 0x7FFF) {\n        if ((UINT64) (aSig<<1))\n            return propagateFloatx80NaN1(a);\n\n        return (aSign) ? floatx80_negone : a;\n    }\n\n    if (aExp == 0) {\n        if (aSig == 0) return a;\n        float_raise(float_flag_denormal | float_flag_inexact);\n        normalizeFloatx80Subnormal(aSig, &aExp, &aSig);\n\n    tiny_argument:\n        mul128By64To192(LN2_SIG_HI, LN2_SIG_LO, aSig, &zSig0, &zSig1, &zSig2);\n        if (0 < (INT64) zSig0) {\n            shortShift128Left(zSig0, zSig1, 1, &zSig0, &zSig1);\n            --aExp;\n        }\n        return\n            roundAndPackFloatx80(80, aSign, aExp, zSig0, zSig1);\n    }\n\n    float_raise(float_flag_inexact);\n\n    if (aExp < 0x3FFF)\n    {\n        if (aExp < EXP_BIAS-68)\n            goto tiny_argument;\n\n        /* ******************************** */\n        /* using float128 for approximation */\n        /* ******************************** */\n\n        float128 x = floatx80_to_float128(a);\n        x = float128_mul(x, float128_ln2);\n        x = poly_exp(x);\n        return float128_to_floatx80(x);\n    }\n    else\n    {\n        if (a.high == 0xBFFF && ! (aSig<<1))\n           return floatx80_neghalf;\n\n        return a;\n    }\n}\n"
  },
  {
    "path": "vm86/mame/lib/softfloat/fpatan.c",
    "content": "/*============================================================================\nThis source file is an extension to the SoftFloat IEC/IEEE Floating-point\nArithmetic Package, Release 2b, written for Bochs (x86 achitecture simulator)\nfloating point emulation.\n\nTHIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\nbeen made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\nRESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\nAND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\nCOSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\nEFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\nINSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\nOTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\n\nDerivative works are acceptable, even for commercial purposes, so long as\n(1) the source code for the derivative work includes prominent notice that\nthe work is derivative, and (2) the source code includes prominent notice with\nthese four paragraphs for those parts of this code that are retained.\n=============================================================================*/\n\n/*============================================================================\n * Written for Bochs (x86 achitecture simulator) by\n *            Stanislav Shwartsman [sshwarts at sourceforge net]\n * Adapted for 3rdparty/softfloat in MAME by Calvin Buckley (05/2021)\n * ==========================================================================*/\n\n#define FLOAT128\n\n#include \"mamesf.h\"\n#include \"softfloat.h\"\n//#include \"softfloat-specialize\"\n#include \"fpu_constant.h\"\n\n/* XXX: These are common w/ fsincos/fyl2x; should be moved to common header? */\n#define packFloat_128(zHi, zLo) {(zHi), (zLo)}\n//#define packFloat2x128m(zHi, zLo) {(zHi), (zLo)}\n#define PACK_FLOAT_128(hi,lo) packFloat2x128m(LIT64(hi),LIT64(lo))\n#define EXP_BIAS 0x3FFF\n\n/*----------------------------------------------------------------------------\n| Returns the fraction bits of the extended double-precision floating-point\n| value `a'.\n*----------------------------------------------------------------------------*/\n#if 0\nINLINE UINT64 extractFloatx80Frac( floatx80 a )\n{\n\treturn a.low;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the exponent bits of the extended double-precision floating-point\n| value `a'.\n*----------------------------------------------------------------------------*/\n\nINLINE int32 extractFloatx80Exp( floatx80 a )\n{\n\treturn a.high & 0x7FFF;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the sign bit of the extended double-precision floating-point value\n| `a'.\n*----------------------------------------------------------------------------*/\n\nINLINE flag extractFloatx80Sign( floatx80 a )\n{\n\treturn a.high>>15;\n\n}\n\n/*----------------------------------------------------------------------------\n| Normalizes the subnormal extended double-precision floating-point value\n| represented by the denormalized significand `aSig'.  The normalized exponent\n| and significand are stored at the locations pointed to by `zExpPtr' and\n| `zSigPtr', respectively.\n*----------------------------------------------------------------------------*/\n\nINLINE void normalizeFloatx80Subnormal(UINT64 aSig, INT32 *zExpPtr, UINT64 *zSigPtr)\n{\n\tint shiftCount = countLeadingZeros64(aSig);\n\t*zSigPtr = aSig<<shiftCount;\n\t*zExpPtr = 1 - shiftCount;\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the extended double-precision floating-point value `a' is a\n| NaN; otherwise returns 0.\n*----------------------------------------------------------------------------*/\n\nINLINE int floatx80_is_nan(floatx80 a)\n{\n\treturn ((a.high & 0x7FFF) == 0x7FFF) && (int64_t) (a.low<<1);\n}\n\n/*----------------------------------------------------------------------------\n| Takes two extended double-precision floating-point values `a' and `b', one\n| of which is a NaN, and returns the appropriate NaN result.  If either `a' or\n| `b' is a signaling NaN, the invalid exception is raised.\n*----------------------------------------------------------------------------*/\n\nINLINE floatx80 propagateFloatx80NaN( floatx80 a, floatx80 b )\n{\n    flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;\n\n    aIsNaN = floatx80_is_nan( a );\n    aIsSignalingNaN = floatx80_is_signaling_nan( a );\n    bIsNaN = floatx80_is_nan( b );\n    bIsSignalingNaN = floatx80_is_signaling_nan( b );\n    a.low |= LIT64( 0xC000000000000000 );\n    b.low |= LIT64( 0xC000000000000000 );\n    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );\n    if ( aIsNaN ) {\n        return ( aIsSignalingNaN & bIsNaN ) ? b : a;\n    }\n    else {\n        return b;\n    }\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the exponent bits of the quadruple-precision floating-point value\n| `a'.\n*----------------------------------------------------------------------------*/\n\nINLINE int32 extractFloat128Exp( float128 a )\n{\n\treturn ( a.high>>48 ) & 0x7FFF;\n\n}\n#endif\n/* end copied */\n\n#define FPATAN_ARR_SIZE 11\n\nstatic const float128 float128_one =\n        packFloat_128(0x3fff000000000000U, 0x0000000000000000U);\nstatic const float128 float128_sqrt3 =\n        packFloat_128(0x3fffbb67ae8584caU, 0xa73b25742d7078b8U);\n//static const floatx80 floatx80_one = packFloatx80(0, 0x3fff, 0x8000000000000000U);\nstatic const floatx80 floatx80_pi  =\n        packFloatx80(0, 0x4000, 0xc90fdaa22168c235U);\n\nstatic const float128 float128_pi2 =\n        packFloat_128(0x3fff921fb54442d1U, 0x8469898CC5170416U);\nstatic const float128 float128_pi4 =\n        packFloat_128(0x3ffe921fb54442d1U, 0x8469898CC5170416U);\nstatic const float128 float128_pi6 =\n        packFloat_128(0x3ffe0c152382d736U, 0x58465BB32E0F580FU);\n\nstatic float128 atan_arr[FPATAN_ARR_SIZE] =\n{\n    PACK_FLOAT_128(0x3fff000000000000, 0x0000000000000000), /*  1 */\n    PACK_FLOAT_128(0xbffd555555555555, 0x5555555555555555), /*  3 */\n    PACK_FLOAT_128(0x3ffc999999999999, 0x999999999999999a), /*  5 */\n    PACK_FLOAT_128(0xbffc249249249249, 0x2492492492492492), /*  7 */\n    PACK_FLOAT_128(0x3ffbc71c71c71c71, 0xc71c71c71c71c71c), /*  9 */\n    PACK_FLOAT_128(0xbffb745d1745d174, 0x5d1745d1745d1746), /* 11 */\n    PACK_FLOAT_128(0x3ffb3b13b13b13b1, 0x3b13b13b13b13b14), /* 13 */\n    PACK_FLOAT_128(0xbffb111111111111, 0x1111111111111111), /* 15 */\n    PACK_FLOAT_128(0x3ffae1e1e1e1e1e1, 0xe1e1e1e1e1e1e1e2), /* 17 */\n    PACK_FLOAT_128(0xbffaaf286bca1af2, 0x86bca1af286bca1b), /* 19 */\n    PACK_FLOAT_128(0x3ffa861861861861, 0x8618618618618618)  /* 21 */\n};\n\nextern float128 OddPoly(float128 x, float128 *arr, unsigned n);\n\n/* |x| < 1/4 */\nstatic float128 poly_atan(float128 x1)\n{\n/*\n    //                 3     5     7     9     11     13     15     17\n    //                x     x     x     x     x      x      x      x\n    // atan(x) ~ x - --- + --- - --- + --- - ---- + ---- - ---- + ----\n    //                3     5     7     9     11     13     15     17\n    //\n    //                 2     4     6     8     10     12     14     16\n    //                x     x     x     x     x      x      x      x\n    //   = x * [ 1 - --- + --- - --- + --- - ---- + ---- - ---- + ---- ]\n    //                3     5     7     9     11     13     15     17\n    //\n    //           5                          5\n    //          --       4k                --        4k+2\n    //   p(x) = >  C  * x           q(x) = >  C   * x\n    //          --  2k                     --  2k+1\n    //          k=0                        k=0\n    //\n    //                            2\n    //    atan(x) ~ x * [ p(x) + x * q(x) ]\n    //\n*/\n    return OddPoly(x1, atan_arr, FPATAN_ARR_SIZE);\n}\n\n// =================================================\n// FPATAN                  Compute y * log (x)\n//                                        2\n// =================================================\n\n//\n// Uses the following identities:\n//\n// 1. ----------------------------------------------------------\n//\n//   atan(-x) = -atan(x)\n//\n// 2. ----------------------------------------------------------\n//\n//                             x + y\n//   atan(x) + atan(y) = atan -------, xy < 1\n//                             1-xy\n//\n//                             x + y\n//   atan(x) + atan(y) = atan ------- + PI, x > 0, xy > 1\n//                             1-xy\n//\n//                             x + y\n//   atan(x) + atan(y) = atan ------- - PI, x < 0, xy > 1\n//                             1-xy\n//\n// 3. ----------------------------------------------------------\n//\n//   atan(x) = atan(INF) + atan(- 1/x)\n//\n//                           x-1\n//   atan(x) = PI/4 + atan( ----- )\n//                           x+1\n//\n//                           x * sqrt(3) - 1\n//   atan(x) = PI/6 + atan( ----------------- )\n//                             x + sqrt(3)\n//\n// 4. ----------------------------------------------------------\n//                   3     5     7     9                 2n+1\n//                  x     x     x     x              n  x\n//   atan(x) = x - --- + --- - --- + --- - ... + (-1)  ------ + ...\n//                  3     5     7     9                 2n+1\n//\n\nfloatx80 floatx80_fpatan(floatx80 a, floatx80 b)\n{\n    UINT64 aSig = extractFloatx80Frac(a);\n    INT32 aExp = extractFloatx80Exp(a);\n    int aSign = extractFloatx80Sign(a);\n    UINT64 bSig = extractFloatx80Frac(b);\n    INT32 bExp = extractFloatx80Exp(b);\n    int bSign = extractFloatx80Sign(b);\n\n    int zSign = aSign ^ bSign;\n\n    if (bExp == 0x7FFF)\n    {\n        if ((UINT64) (bSig<<1))\n            return propagateFloatx80NaN(a, b);\n\n        if (aExp == 0x7FFF) {\n            if ((UINT64) (aSig<<1))\n                return propagateFloatx80NaN(a, b);\n\n            if (aSign) {   /* return 3PI/4 */\n                return roundAndPackFloatx80(80, bSign,\n                        FLOATX80_3PI4_EXP, FLOAT_3PI4_HI, FLOAT_3PI4_LO);\n            }\n            else {         /* return  PI/4 */\n                return roundAndPackFloatx80(80, bSign,\n                        FLOATX80_PI4_EXP, FLOAT_PI_HI, FLOAT_PI_LO);\n            }\n        }\n\n        if (aSig && (aExp == 0))\n            float_raise(float_flag_denormal);\n\n        /* return PI/2 */\n        return roundAndPackFloatx80(80, bSign, FLOATX80_PI2_EXP, FLOAT_PI_HI, FLOAT_PI_LO);\n    }\n    if (aExp == 0x7FFF)\n    {\n        if ((UINT64) (aSig<<1))\n            return propagateFloatx80NaN(a, b);\n\n        if (bSig && (bExp == 0))\n            float_raise(float_flag_denormal);\n\nreturn_PI_or_ZERO:\n\n        if (aSign) {   /* return PI */\n            return roundAndPackFloatx80(80, bSign, FLOATX80_PI_EXP, FLOAT_PI_HI, FLOAT_PI_LO);\n        } else {       /* return  0 */\n            return packFloatx80(bSign, 0, 0);\n        }\n    }\n    if (bExp == 0)\n    {\n        if (bSig == 0) {\n             if (aSig && (aExp == 0)) float_raise(float_flag_denormal);\n             goto return_PI_or_ZERO;\n        }\n\n        float_raise(float_flag_denormal);\n        normalizeFloatx80Subnormal(bSig, &bExp, &bSig);\n    }\n    if (aExp == 0)\n    {\n        if (aSig == 0)   /* return PI/2 */\n            return roundAndPackFloatx80(80, bSign, FLOATX80_PI2_EXP, FLOAT_PI_HI, FLOAT_PI_LO);\n\n        float_raise(float_flag_denormal);\n        normalizeFloatx80Subnormal(aSig, &aExp, &aSig);\n    }\n\n    float_raise(float_flag_inexact);\n\n    /* |a| = |b| ==> return PI/4 */\n    if (aSig == bSig && aExp == bExp)\n        return roundAndPackFloatx80(80, bSign, FLOATX80_PI4_EXP, FLOAT_PI_HI, FLOAT_PI_LO);\n\n    /* ******************************** */\n    /* using float128 for approximation */\n    /* ******************************** */\n\n    float128 a128 = normalizeRoundAndPackFloat128(0, aExp-0x10, aSig, 0);\n    float128 b128 = normalizeRoundAndPackFloat128(0, bExp-0x10, bSig, 0);\n    float128 x;\n    int swap = 0, add_pi6 = 0, add_pi4 = 0;\n    if (aExp > bExp || (aExp == bExp && aSig > bSig))\n    {\n        x = float128_div(b128, a128);\n    }\n    else {\n        x = float128_div(a128, b128);\n        swap = 1;\n    }\n\n    INT32 xExp = extractFloat128Exp(x);\n\n    if (xExp <= EXP_BIAS-40)\n        goto approximation_completed;\n\n    if (x.high >= 0x3ffe800000000000U)        // 3/4 < x < 1\n    {\n        /*\n        arctan(x) = arctan((x-1)/(x+1)) + pi/4\n        */\n        float128 t1 = float128_sub(x, float128_one);\n        float128 t2 = float128_add(x, float128_one);\n        x = float128_div(t1, t2);\n        add_pi4 = 1;\n    }\n    else\n    {\n        /* argument correction */\n        if (xExp >= 0x3FFD)                     // 1/4 < x < 3/4\n        {\n            /*\n            arctan(x) = arctan((x*sqrt(3)-1)/(x+sqrt(3))) + pi/6\n            */\n            float128 t1 = float128_mul(x, float128_sqrt3);\n            float128 t2 = float128_add(x, float128_sqrt3);\n            x = float128_sub(t1, float128_one);\n            x = float128_div(x, t2);\n            add_pi6 = 1;\n        }\n    }\n\n    x = poly_atan(x);\n    if (add_pi6) x = float128_add(x, float128_pi6);\n    if (add_pi4) x = float128_add(x, float128_pi4);\n\napproximation_completed:\n    if (swap) x = float128_sub(float128_pi2, x);\n    floatx80 result = float128_to_floatx80(x);\n    if (zSign) result = floatx80_chs(result);\n    int rSign = extractFloatx80Sign(result);\n    if (!bSign && rSign)\n        return floatx80_add(result, floatx80_pi);\n    if (bSign && !rSign)\n        return floatx80_sub(result, floatx80_pi);\n    return result;\n}\n\n// The former function maps to x87 FPATAN, but we can simulate 68881 FATAN with\n// it by simply hardcoding one here.\nfloatx80 floatx80_fatan(floatx80 a)\n{\n\treturn floatx80_fpatan(a, floatx80_one);\n}\n"
  },
  {
    "path": "vm86/mame/lib/softfloat/fpu_constant.h",
    "content": "/*============================================================================\nThis source file is an extension to the SoftFloat IEC/IEEE Floating-point\nArithmetic Package, Release 2b, written for Bochs (x86 achitecture simulator)\nfloating point emulation.\n\nTHIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\nbeen made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\nRESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\nAND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\nCOSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\nEFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\nINSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\nOTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\n\nDerivative works are acceptable, even for commercial purposes, so long as\n(1) the source code for the derivative work includes prominent notice that\nthe work is derivative, and (2) the source code includes prominent notice with\nthese four paragraphs for those parts of this code that are retained.\n=============================================================================*/\n\n#ifndef _FPU_CONSTANTS_H_\n#define _FPU_CONSTANTS_H_\n\n// Pentium CPU uses only 68-bit precision M_PI approximation\n#define BETTER_THAN_PENTIUM\n\n/*============================================================================\n * Written for Bochs (x86 achitecture simulator) by\n *            Stanislav Shwartsman [sshwarts at sourceforge net]\n * ==========================================================================*/\n\n//////////////////////////////\n// PI, PI/2, PI/4 constants\n//////////////////////////////\n\n#define FLOATX80_PI_EXP  (0x4000)\n\n// 128-bit PI fraction\n#ifdef BETTER_THAN_PENTIUM\n#define FLOAT_PI_HI (U64(0xc90fdaa22168c234))\n#define FLOAT_PI_LO (U64(0xc4c6628b80dc1cd1))\n#else\n#define FLOAT_PI_HI (U64(0xc90fdaa22168c234))\n#define FLOAT_PI_LO (U64(0xC000000000000000))\n#endif\n\n#define FLOATX80_PI2_EXP  (0x3FFF)\n#define FLOATX80_PI4_EXP  (0x3FFE)\n\n//////////////////////////////\n// 3PI/4 constant\n//////////////////////////////\n\n#define FLOATX80_3PI4_EXP (0x4000)\n\n// 128-bit 3PI/4 fraction\n#ifdef BETTER_THAN_PENTIUM\n#define FLOAT_3PI4_HI (U64(0x96cbe3f9990e91a7))\n#define FLOAT_3PI4_LO (U64(0x9394c9e8a0a5159c))\n#else\n#define FLOAT_3PI4_HI (U64(0x96cbe3f9990e91a7))\n#define FLOAT_3PI4_LO (U64(0x9000000000000000))\n#endif\n\n//////////////////////////////\n// 1/LN2 constant\n//////////////////////////////\n\n#define FLOAT_LN2INV_EXP  (0x3FFF)\n\n// 128-bit 1/LN2 fraction\n#ifdef BETTER_THAN_PENTIUM\n#define FLOAT_LN2INV_HI (U64(0xb8aa3b295c17f0bb))\n#define FLOAT_LN2INV_LO (U64(0xbe87fed0691d3e89))\n#else\n#define FLOAT_LN2INV_HI (U64(0xb8aa3b295c17f0bb))\n#define FLOAT_LN2INV_LO (U64(0xC000000000000000))\n#endif\n\n#endif\n"
  },
  {
    "path": "vm86/mame/lib/softfloat/fsincos.c",
    "content": "/*============================================================================\nThis source file is an extension to the SoftFloat IEC/IEEE Floating-point\nArithmetic Package, Release 2b, written for Bochs (x86 achitecture simulator)\nfloating point emulation.\n\nTHIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\nbeen made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\nRESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\nAND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\nCOSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\nEFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\nINSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\nOTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\n\nDerivative works are acceptable, even for commercial purposes, so long as\n(1) the source code for the derivative work includes prominent notice that\nthe work is derivative, and (2) the source code includes prominent notice with\nthese four paragraphs for those parts of this code that are retained.\n=============================================================================*/\n\n/*============================================================================\n * Written for Bochs (x86 achitecture simulator) by\n *            Stanislav Shwartsman [sshwarts at sourceforge net]\n * ==========================================================================*/\n\n#define FLOAT128\n\n#define USE_estimateDiv128To64\n#include \"mamesf.h\"\n#include \"softfloat.h\"\n//#include \"softfloat-specialize\"\n#include \"fpu_constant.h\"\n\nstatic const floatx80 floatx80_one = packFloatx80(0, 0x3fff, U64(0x8000000000000000));\nstatic const floatx80 floatx80_default_nan = packFloatx80(0, 0xffff, U64(0xffffffffffffffff));\n\n#define packFloat2x128m(zHi, zLo) {(zHi), (zLo)}\n#define PACK_FLOAT_128(hi,lo) packFloat2x128m(LIT64(hi),LIT64(lo))\n\n#define EXP_BIAS 0x3FFF\n\n/*----------------------------------------------------------------------------\n| Returns the fraction bits of the extended double-precision floating-point\n| value `a'.\n*----------------------------------------------------------------------------*/\n\n#if 0\nINLINE bits64 extractFloatx80Frac( floatx80 a )\n{\n\treturn a.low;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the exponent bits of the extended double-precision floating-point\n| value `a'.\n*----------------------------------------------------------------------------*/\n\nINLINE int32 extractFloatx80Exp( floatx80 a )\n{\n\treturn a.high & 0x7FFF;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the sign bit of the extended double-precision floating-point value\n| `a'.\n*----------------------------------------------------------------------------*/\n\nINLINE flag extractFloatx80Sign( floatx80 a )\n{\n\treturn a.high>>15;\n\n}\n#endif\n\n/*----------------------------------------------------------------------------\n| Takes extended double-precision floating-point  NaN  `a' and returns the\n| appropriate NaN result. If `a' is a signaling NaN, the invalid exception\n| is raised.\n*----------------------------------------------------------------------------*/\n\nINLINE floatx80 propagateFloatx80NaNOneArg(floatx80 a)\n{\n\tif (floatx80_is_signaling_nan(a))\n\t\tfloat_raise(float_flag_invalid);\n\n\ta.low |= U64(0xC000000000000000);\n\n\treturn a;\n}\n\n/*----------------------------------------------------------------------------\n| Normalizes the subnormal extended double-precision floating-point value\n| represented by the denormalized significand `aSig'.  The normalized exponent\n| and significand are stored at the locations pointed to by `zExpPtr' and\n| `zSigPtr', respectively.\n*----------------------------------------------------------------------------*/\n\n#if 0\nvoid normalizeFloatx80Subnormal(UINT64 aSig, INT32 *zExpPtr, UINT64 *zSigPtr)\n{\n\tint shiftCount = countLeadingZeros64(aSig);\n\t*zSigPtr = aSig<<shiftCount;\n\t*zExpPtr = 1 - shiftCount;\n}\n#endif\n\n/* reduce trigonometric function argument using 128-bit precision\n   M_PI approximation */\nstatic UINT64 argument_reduction_kernel(UINT64 aSig0, int Exp, UINT64 *zSig0, UINT64 *zSig1)\n{\n\tUINT64 term0, term1, term2;\n\tUINT64 aSig1 = 0;\n\n\tshortShift128Left(aSig1, aSig0, Exp, &aSig1, &aSig0);\n\tUINT64 q = estimateDiv128To64(aSig1, aSig0, FLOAT_PI_HI);\n\tmul128By64To192(FLOAT_PI_HI, FLOAT_PI_LO, q, &term0, &term1, &term2);\n\tsub128(aSig1, aSig0, term0, term1, zSig1, zSig0);\n\twhile ((INT64)(*zSig1) < 0) {\n\t\t--q;\n\t\tadd192(*zSig1, *zSig0, term2, 0, FLOAT_PI_HI, FLOAT_PI_LO, zSig1, zSig0, &term2);\n\t}\n\t*zSig1 = term2;\n\treturn q;\n}\n\nstatic int reduce_trig_arg(int expDiff, int &zSign, UINT64 &aSig0, UINT64 &aSig1)\n{\n\tUINT64 term0, term1, q = 0;\n\n\tif (expDiff < 0) {\n\t\tshift128Right(aSig0, 0, 1, &aSig0, &aSig1);\n\t\texpDiff = 0;\n\t}\n\tif (expDiff > 0) {\n\t\tq = argument_reduction_kernel(aSig0, expDiff, &aSig0, &aSig1);\n\t}\n\telse {\n\t\tif (FLOAT_PI_HI <= aSig0) {\n\t\t\taSig0 -= FLOAT_PI_HI;\n\t\t\tq = 1;\n\t\t}\n\t}\n\n\tshift128Right(FLOAT_PI_HI, FLOAT_PI_LO, 1, &term0, &term1);\n\tif (! lt128(aSig0, aSig1, term0, term1))\n\t{\n\t\tint lt = lt128(term0, term1, aSig0, aSig1);\n\t\tint eq = eq128(aSig0, aSig1, term0, term1);\n\n\t\tif ((eq && (q & 1)) || lt) {\n\t\t\tzSign = !zSign;\n\t\t\t++q;\n\t\t}\n\t\tif (lt) sub128(FLOAT_PI_HI, FLOAT_PI_LO, aSig0, aSig1, &aSig0, &aSig1);\n\t}\n\n\treturn (int)(q & 3);\n}\n\n#define SIN_ARR_SIZE 11\n#define COS_ARR_SIZE 11\n\nstatic float128 sin_arr[SIN_ARR_SIZE] =\n{\n\tPACK_FLOAT_128(0x3fff000000000000, 0x0000000000000000), /*  1 */\n\tPACK_FLOAT_128(0xbffc555555555555, 0x5555555555555555), /*  3 */\n\tPACK_FLOAT_128(0x3ff8111111111111, 0x1111111111111111), /*  5 */\n\tPACK_FLOAT_128(0xbff2a01a01a01a01, 0xa01a01a01a01a01a), /*  7 */\n\tPACK_FLOAT_128(0x3fec71de3a556c73, 0x38faac1c88e50017), /*  9 */\n\tPACK_FLOAT_128(0xbfe5ae64567f544e, 0x38fe747e4b837dc7), /* 11 */\n\tPACK_FLOAT_128(0x3fde6124613a86d0, 0x97ca38331d23af68), /* 13 */\n\tPACK_FLOAT_128(0xbfd6ae7f3e733b81, 0xf11d8656b0ee8cb0), /* 15 */\n\tPACK_FLOAT_128(0x3fce952c77030ad4, 0xa6b2605197771b00), /* 17 */\n\tPACK_FLOAT_128(0xbfc62f49b4681415, 0x724ca1ec3b7b9675), /* 19 */\n\tPACK_FLOAT_128(0x3fbd71b8ef6dcf57, 0x18bef146fcee6e45)  /* 21 */\n};\n\nstatic float128 cos_arr[COS_ARR_SIZE] =\n{\n\tPACK_FLOAT_128(0x3fff000000000000, 0x0000000000000000), /*  0 */\n\tPACK_FLOAT_128(0xbffe000000000000, 0x0000000000000000), /*  2 */\n\tPACK_FLOAT_128(0x3ffa555555555555, 0x5555555555555555), /*  4 */\n\tPACK_FLOAT_128(0xbff56c16c16c16c1, 0x6c16c16c16c16c17), /*  6 */\n\tPACK_FLOAT_128(0x3fefa01a01a01a01, 0xa01a01a01a01a01a), /*  8 */\n\tPACK_FLOAT_128(0xbfe927e4fb7789f5, 0xc72ef016d3ea6679), /* 10 */\n\tPACK_FLOAT_128(0x3fe21eed8eff8d89, 0x7b544da987acfe85), /* 12 */\n\tPACK_FLOAT_128(0xbfda93974a8c07c9, 0xd20badf145dfa3e5), /* 14 */\n\tPACK_FLOAT_128(0x3fd2ae7f3e733b81, 0xf11d8656b0ee8cb0), /* 16 */\n\tPACK_FLOAT_128(0xbfca6827863b97d9, 0x77bb004886a2c2ab), /* 18 */\n\tPACK_FLOAT_128(0x3fc1e542ba402022, 0x507a9cad2bf8f0bb)  /* 20 */\n};\n\nextern float128 OddPoly (float128 x, float128 *arr, unsigned n);\n\n/* 0 <= x <= pi/4 */\nINLINE float128 poly_sin(float128 x)\n{\n\t//                 3     5     7     9     11     13     15\n\t//                x     x     x     x     x      x      x\n\t// sin (x) ~ x - --- + --- - --- + --- - ---- + ---- - ---- =\n\t//                3!    5!    7!    9!    11!    13!    15!\n\t//\n\t//                 2     4     6     8     10     12     14\n\t//                x     x     x     x     x      x      x\n\t//   = x * [ 1 - --- + --- - --- + --- - ---- + ---- - ---- ] =\n\t//                3!    5!    7!    9!    11!    13!    15!\n\t//\n\t//           3                          3\n\t//          --       4k                --        4k+2\n\t//   p(x) = >  C  * x   > 0     q(x) = >  C   * x     < 0\n\t//          --  2k                     --  2k+1\n\t//          k=0                        k=0\n\t//\n\t//                          2\n\t//   sin(x) ~ x * [ p(x) + x * q(x) ]\n\t//\n\n\treturn OddPoly(x, sin_arr, SIN_ARR_SIZE);\n}\n\nextern float128 EvenPoly(float128 x, float128 *arr, unsigned n);\n\n/* 0 <= x <= pi/4 */\nINLINE float128 poly_cos(float128 x)\n{\n\t//                 2     4     6     8     10     12     14\n\t//                x     x     x     x     x      x      x\n\t// cos (x) ~ 1 - --- + --- - --- + --- - ---- + ---- - ----\n\t//                2!    4!    6!    8!    10!    12!    14!\n\t//\n\t//           3                          3\n\t//          --       4k                --        4k+2\n\t//   p(x) = >  C  * x   > 0     q(x) = >  C   * x     < 0\n\t//          --  2k                     --  2k+1\n\t//          k=0                        k=0\n\t//\n\t//                      2\n\t//   cos(x) ~ [ p(x) + x * q(x) ]\n\t//\n\n\treturn EvenPoly(x, cos_arr, COS_ARR_SIZE);\n}\n\nINLINE void sincos_invalid(floatx80 *sin_a, floatx80 *cos_a, floatx80 a)\n{\n\tif (sin_a) *sin_a = a;\n\tif (cos_a) *cos_a = a;\n}\n\nINLINE void sincos_tiny_argument(floatx80 *sin_a, floatx80 *cos_a, floatx80 a)\n{\n\tif (sin_a) *sin_a = a;\n\tif (cos_a) *cos_a = floatx80_one;\n}\n\nstatic floatx80 sincos_approximation(int neg, float128 r, UINT64 quotient)\n{\n\tif (quotient & 0x1) {\n\t\tr = poly_cos(r);\n\t\tneg = 0;\n\t} else  {\n\t\tr = poly_sin(r);\n\t}\n\n\tfloatx80 result = float128_to_floatx80(r);\n\tif (quotient & 0x2)\n\t\tneg = ! neg;\n\n\tif (neg)\n\t\tresult = floatx80_chs(result);\n\n\treturn result;\n}\n\n// =================================================\n// SFFSINCOS               Compute sin(x) and cos(x)\n// =================================================\n\n//\n// Uses the following identities:\n// ----------------------------------------------------------\n//\n//  sin(-x) = -sin(x)\n//  cos(-x) =  cos(x)\n//\n//  sin(x+y) = sin(x)*cos(y)+cos(x)*sin(y)\n//  cos(x+y) = sin(x)*sin(y)+cos(x)*cos(y)\n//\n//  sin(x+ pi/2)  =  cos(x)\n//  sin(x+ pi)    = -sin(x)\n//  sin(x+3pi/2)  = -cos(x)\n//  sin(x+2pi)    =  sin(x)\n//\n\nint sf_fsincos(floatx80 a, floatx80 *sin_a, floatx80 *cos_a)\n{\n\tUINT64 aSig0, aSig1 = 0;\n\tINT32 aExp, zExp, expDiff;\n\tint aSign, zSign;\n\tint q = 0;\n\n\taSig0 = extractFloatx80Frac(a);\n\taExp = extractFloatx80Exp(a);\n\taSign = extractFloatx80Sign(a);\n\n\t/* invalid argument */\n\tif (aExp == 0x7FFF) {\n\t\tif ((UINT64) (aSig0<<1)) {\n\t\t\tsincos_invalid(sin_a, cos_a, propagateFloatx80NaNOneArg(a));\n\t\t\treturn 0;\n\t\t}\n\n\t\tfloat_raise(float_flag_invalid);\n\t\tsincos_invalid(sin_a, cos_a, floatx80_default_nan);\n\t\treturn 0;\n\t}\n\n\tif (aExp == 0) {\n\t\tif (aSig0 == 0) {\n\t\t\tsincos_tiny_argument(sin_a, cos_a, a);\n\t\t\treturn 0;\n\t\t}\n\n//        float_raise(float_flag_denormal);\n\n\t\t/* handle pseudo denormals */\n\t\tif (! (aSig0 & U64(0x8000000000000000)))\n\t\t{\n\t\t\tfloat_raise(float_flag_inexact);\n\t\t\tif (sin_a)\n\t\t\t\tfloat_raise(float_flag_underflow);\n\t\t\tsincos_tiny_argument(sin_a, cos_a, a);\n\t\t\treturn 0;\n\t\t}\n\n\t\tnormalizeFloatx80Subnormal(aSig0, &aExp, &aSig0);\n\t}\n\n\tzSign = aSign;\n\tzExp = EXP_BIAS;\n\texpDiff = aExp - zExp;\n\n\t/* argument is out-of-range */\n\tif (expDiff >= 63)\n\t\treturn -1;\n\n\tfloat_raise(float_flag_inexact);\n\n\tif (expDiff < -1) {    // doesn't require reduction\n\t\tif (expDiff <= -68) {\n\t\t\ta = packFloatx80(aSign, aExp, aSig0);\n\t\t\tsincos_tiny_argument(sin_a, cos_a, a);\n\t\t\treturn 0;\n\t\t}\n\t\tzExp = aExp;\n\t}\n\telse {\n\t\tq = reduce_trig_arg(expDiff, zSign, aSig0, aSig1);\n\t}\n\n\t/* **************************** */\n\t/* argument reduction completed */\n\t/* **************************** */\n\n\t/* using float128 for approximation */\n\tfloat128 r = normalizeRoundAndPackFloat128(0, zExp-0x10, aSig0, aSig1);\n\n\tif (aSign) q = -q;\n\tif (sin_a) *sin_a = sincos_approximation(zSign, r,   q);\n\tif (cos_a) *cos_a = sincos_approximation(zSign, r, q+1);\n\n\treturn 0;\n}\n\nint floatx80_fsin(floatx80 &a)\n{\n\treturn sf_fsincos(a, &a, 0);\n}\n\nint floatx80_fcos(floatx80 &a)\n{\n\treturn sf_fsincos(a, 0, &a);\n}\n\n// =================================================\n// FPTAN                 Compute tan(x)\n// =================================================\n\n//\n// Uses the following identities:\n//\n// 1. ----------------------------------------------------------\n//\n//  sin(-x) = -sin(x)\n//  cos(-x) =  cos(x)\n//\n//  sin(x+y) = sin(x)*cos(y)+cos(x)*sin(y)\n//  cos(x+y) = sin(x)*sin(y)+cos(x)*cos(y)\n//\n//  sin(x+ pi/2)  =  cos(x)\n//  sin(x+ pi)    = -sin(x)\n//  sin(x+3pi/2)  = -cos(x)\n//  sin(x+2pi)    =  sin(x)\n//\n// 2. ----------------------------------------------------------\n//\n//           sin(x)\n//  tan(x) = ------\n//           cos(x)\n//\n\nint floatx80_ftan(floatx80 &a)\n{\n\tUINT64 aSig0, aSig1 = 0;\n\tINT32 aExp, zExp, expDiff;\n\tint aSign, zSign;\n\tint q = 0;\n\n\taSig0 = extractFloatx80Frac(a);\n\taExp = extractFloatx80Exp(a);\n\taSign = extractFloatx80Sign(a);\n\n\t/* invalid argument */\n\tif (aExp == 0x7FFF) {\n\t\tif ((UINT64) (aSig0<<1))\n\t\t{\n\t\t\ta = propagateFloatx80NaNOneArg(a);\n\t\t\treturn 0;\n\t\t}\n\n\t\tfloat_raise(float_flag_invalid);\n\t\ta = floatx80_default_nan;\n\t\treturn 0;\n\t}\n\n\tif (aExp == 0) {\n\t\tif (aSig0 == 0) return 0;\n//        float_raise(float_flag_denormal);\n\t\t/* handle pseudo denormals */\n\t\tif (! (aSig0 & U64(0x8000000000000000)))\n\t\t{\n\t\t\tfloat_raise(float_flag_inexact | float_flag_underflow);\n\t\t\treturn 0;\n\t\t}\n\t\tnormalizeFloatx80Subnormal(aSig0, &aExp, &aSig0);\n\t}\n\n\tzSign = aSign;\n\tzExp = EXP_BIAS;\n\texpDiff = aExp - zExp;\n\n\t/* argument is out-of-range */\n\tif (expDiff >= 63)\n\t\treturn -1;\n\n\tfloat_raise(float_flag_inexact);\n\n\tif (expDiff < -1) {    // doesn't require reduction\n\t\tif (expDiff <= -68) {\n\t\t\ta = packFloatx80(aSign, aExp, aSig0);\n\t\t\treturn 0;\n\t\t}\n\t\tzExp = aExp;\n\t}\n\telse {\n\t\tq = reduce_trig_arg(expDiff, zSign, aSig0, aSig1);\n\t}\n\n\t/* **************************** */\n\t/* argument reduction completed */\n\t/* **************************** */\n\n\t/* using float128 for approximation */\n\tfloat128 r = normalizeRoundAndPackFloat128(0, zExp-0x10, aSig0, aSig1);\n\n\tfloat128 sin_r = poly_sin(r);\n\tfloat128 cos_r = poly_cos(r);\n\n\tif (q & 0x1) {\n\t\tr = float128_div(cos_r, sin_r);\n\t\tzSign = ! zSign;\n\t} else {\n\t\tr = float128_div(sin_r, cos_r);\n\t}\n\n\ta = float128_to_floatx80(r);\n\tif (zSign)\n\t\ta = floatx80_chs(a);\n\n\treturn 0;\n}\n\n//                            2         3         4               n\n// f(x) ~ C + (C * x) + (C * x) + (C * x) + (C * x) + ... + (C * x)\n//         0    1         2         3         4               n\n//\n//          --       2k                --        2k+1\n//   p(x) = >  C  * x           q(x) = >  C   * x\n//          --  2k                     --  2k+1\n//\n//   f(x) ~ [ p(x) + x * q(x) ]\n//\n\nfloat128 EvalPoly(float128 x, float128 *arr, unsigned n)\n{\n\tfloat128 x2 = float128_mul(x, x);\n\tunsigned i;\n\n\tassert(n > 1);\n\n\tfloat128 r1 = arr[--n];\n\ti = n;\n\twhile(i >= 2) {\n\t\tr1 = float128_mul(r1, x2);\n\t\ti -= 2;\n\t\tr1 = float128_add(r1, arr[i]);\n\t}\n\tif (i) r1 = float128_mul(r1, x);\n\n\tfloat128 r2 = arr[--n];\n\ti = n;\n\twhile(i >= 2) {\n\t\tr2 = float128_mul(r2, x2);\n\t\ti -= 2;\n\t\tr2 = float128_add(r2, arr[i]);\n\t}\n\tif (i) r2 = float128_mul(r2, x);\n\n\treturn float128_add(r1, r2);\n}\n\n//                  2         4         6         8               2n\n// f(x) ~ C + (C * x) + (C * x) + (C * x) + (C * x) + ... + (C * x)\n//         0    1         2         3         4               n\n//\n//          --       4k                --        4k+2\n//   p(x) = >  C  * x           q(x) = >  C   * x\n//          --  2k                     --  2k+1\n//\n//                    2\n//   f(x) ~ [ p(x) + x * q(x) ]\n//\n\nfloat128 EvenPoly(float128 x, float128 *arr, unsigned n)\n{\n\t\treturn EvalPoly(float128_mul(x, x), arr, n);\n}\n\n//                        3         5         7         9               2n+1\n// f(x) ~ (C * x) + (C * x) + (C * x) + (C * x) + (C * x) + ... + (C * x)\n//          0         1         2         3         4               n\n//                        2         4         6         8               2n\n//      = x * [ C + (C * x) + (C * x) + (C * x) + (C * x) + ... + (C * x)\n//               0    1         2         3         4               n\n//\n//          --       4k                --        4k+2\n//   p(x) = >  C  * x           q(x) = >  C   * x\n//          --  2k                     --  2k+1\n//\n//                        2\n//   f(x) ~ x * [ p(x) + x * q(x) ]\n//\n\nfloat128 OddPoly(float128 x, float128 *arr, unsigned n)\n{\n\t\treturn float128_mul(x, EvenPoly(x, arr, n));\n}\n\n/*----------------------------------------------------------------------------\n| Scales extended double-precision floating-point value in operand `a' by\n| value `b'. The function truncates the value in the second operand 'b' to\n| an integral value and adds that value to the exponent of the operand 'a'.\n| The operation performed according to the IEC/IEEE Standard for Binary\n| Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nextern floatx80 propagateFloatx80NaN( floatx80 a, floatx80 b );\n\nfloatx80 floatx80_scale(floatx80 a, floatx80 b)\n{\n\tsbits32 aExp, bExp;\n\tbits64 aSig, bSig;\n\n\t// handle unsupported extended double-precision floating encodings\n/*    if (floatx80_is_unsupported(a) || floatx80_is_unsupported(b))\n    {\n        float_raise(float_flag_invalid);\n        return floatx80_default_nan;\n    }*/\n\n\taSig = extractFloatx80Frac(a);\n\taExp = extractFloatx80Exp(a);\n\tint aSign = extractFloatx80Sign(a);\n\tbSig = extractFloatx80Frac(b);\n\tbExp = extractFloatx80Exp(b);\n\tint bSign = extractFloatx80Sign(b);\n\n\tif (aExp == 0x7FFF) {\n\t\tif ((bits64) (aSig<<1) || ((bExp == 0x7FFF) && (bits64) (bSig<<1)))\n\t\t{\n\t\t\treturn propagateFloatx80NaN(a, b);\n\t\t}\n\t\tif ((bExp == 0x7FFF) && bSign) {\n\t\t\tfloat_raise(float_flag_invalid);\n\t\t\treturn floatx80_default_nan;\n\t\t}\n\t\tif (bSig && (bExp == 0)) float_raise(float_flag_denormal);\n\t\treturn a;\n\t}\n\tif (bExp == 0x7FFF) {\n\t\tif ((bits64) (bSig<<1)) return propagateFloatx80NaN(a, b);\n\t\tif ((aExp | aSig) == 0) {\n\t\t\tif (! bSign) {\n\t\t\t\tfloat_raise(float_flag_invalid);\n\t\t\t\treturn floatx80_default_nan;\n\t\t\t}\n\t\t\treturn a;\n\t\t}\n\t\tif (aSig && (aExp == 0)) float_raise(float_flag_denormal);\n\t\tif (bSign) return packFloatx80(aSign, 0, 0);\n\t\treturn packFloatx80(aSign, 0x7FFF, U64(0x8000000000000000));\n\t}\n\tif (aExp == 0) {\n\t\tif (aSig == 0) return a;\n\t\tfloat_raise(float_flag_denormal);\n\t\tnormalizeFloatx80Subnormal(aSig, &aExp, &aSig);\n\t}\n\tif (bExp == 0) {\n\t\tif (bSig == 0) return a;\n\t\tfloat_raise(float_flag_denormal);\n\t\tnormalizeFloatx80Subnormal(bSig, &bExp, &bSig);\n\t}\n\n\tif (bExp > 0x400E) {\n\t\t/* generate appropriate overflow/underflow */\n\t\treturn roundAndPackFloatx80(80, aSign,\n\t\t\t\t\t\t\tbSign ? -0x3FFF : 0x7FFF, aSig, 0);\n\t}\n\tif (bExp < 0x3FFF) return a;\n\n\tint shiftCount = 0x403E - bExp;\n\tbSig >>= shiftCount;\n\tsbits32 scale = bSig;\n\tif (bSign) scale = -scale; /* -32768..32767 */\n\treturn\n\t\troundAndPackFloatx80(80, aSign, aExp+scale, aSig, 0);\n}\n"
  },
  {
    "path": "vm86/mame/lib/softfloat/fyl2x.c",
    "content": "/*============================================================================\nThis source file is an extension to the SoftFloat IEC/IEEE Floating-point\nArithmetic Package, Release 2b, written for Bochs (x86 achitecture simulator)\nfloating point emulation.\nfloat_raise(float_flag_invalid)\nTHIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\nbeen made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\nRESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\nAND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\nCOSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\nEFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\nINSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\nOTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\n\nDerivative works are acceptable, even for commercial purposes, so long as\n(1) the source code for the derivative work includes prominent notice that\nthe work is derivative, and (2) the source code includes prominent notice with\nthese four paragraphs for those parts of this code that are retained.\n=============================================================================*/\n\n/*============================================================================\n * Written for Bochs (x86 achitecture simulator) by\n *            Stanislav Shwartsman [sshwarts at sourceforge net]\n * Adapted for lib/softfloat in MESS by Hans Ostermeyer (03/2012)\n * ==========================================================================*/\n\n#define FLOAT128\n\n#define USE_estimateDiv128To64\n#include \"mamesf.h\"\n#include \"softfloat.h\"\n//#include \"softfloat-specialize\"\n#include \"fpu_constant.h\"\n\nstatic const floatx80 floatx80_log10_2 = packFloatx80(0, 0x3ffd, U64(0x9a209a84fbcff798));\nstatic const floatx80 floatx80_ln_2 = packFloatx80(0, 0x3ffe, U64(0xb17217f7d1cf79ac));\n//static const floatx80 floatx80_one = packFloatx80(0, 0x3fff, U64(0x8000000000000000));\n//static const floatx80 floatx80_default_nan = packFloatx80(0, 0xffff, U64(0xffffffffffffffff));\n\n#define packFloat_128(zHi, zLo) {(zHi), (zLo)}\n#define PACK_FLOAT_128(hi,lo) packFloat_128(LIT64(hi),LIT64(lo))\n\n#define EXP_BIAS 0x3FFF\n\n#if 0\n/*----------------------------------------------------------------------------\n| Returns the fraction bits of the extended double-precision floating-point\n| value `a'.\n*----------------------------------------------------------------------------*/\n\nINLINE bits64 extractFloatx80Frac( floatx80 a )\n{\n\treturn a.low;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the exponent bits of the extended double-precision floating-point\n| value `a'.\n*----------------------------------------------------------------------------*/\n\nINLINE int32 extractFloatx80Exp( floatx80 a )\n{\n\treturn a.high & 0x7FFF;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the sign bit of the extended double-precision floating-point value\n| `a'.\n*----------------------------------------------------------------------------*/\n\nINLINE flag extractFloatx80Sign( floatx80 a )\n{\n\treturn a.high>>15;\n\n}\n\n/*----------------------------------------------------------------------------\n| Takes extended double-precision floating-point  NaN  `a' and returns the\n| appropriate NaN result. If `a' is a signaling NaN, the invalid exception\n| is raised.\n*----------------------------------------------------------------------------*/\n\nINLINE floatx80 propagateFloatx80NaNOneArg(floatx80 a)\n{\n\tif (floatx80_is_signaling_nan(a))\n\t\tfloat_raise(float_flag_invalid);\n\n\ta.low |= U64(0xC000000000000000);\n\n\treturn a;\n}\n\n/*----------------------------------------------------------------------------\n| Normalizes the subnormal extended double-precision floating-point value\n| represented by the denormalized significand `aSig'.  The normalized exponent\n| and significand are stored at the locations pointed to by `zExpPtr' and\n| `zSigPtr', respectively.\n*----------------------------------------------------------------------------*/\n\nINLINE void normalizeFloatx80Subnormal(UINT64 aSig, INT32 *zExpPtr, UINT64 *zSigPtr)\n{\n\tint shiftCount = countLeadingZeros64(aSig);\n\t*zSigPtr = aSig<<shiftCount;\n\t*zExpPtr = 1 - shiftCount;\n}\n\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the extended double-precision floating-point value `a' is a\n| NaN; otherwise returns 0.\n*----------------------------------------------------------------------------*/\n\nINLINE int floatx80_is_nan(floatx80 a)\n{\n\treturn ((a.high & 0x7FFF) == 0x7FFF) && (INT64) (a.low<<1);\n}\n\n/*----------------------------------------------------------------------------\n| Takes two extended double-precision floating-point values `a' and `b', one\n| of which is a NaN, and returns the appropriate NaN result.  If either `a' or\n| `b' is a signaling NaN, the invalid exception is raised.\n*----------------------------------------------------------------------------*/\n\nstatic floatx80 propagateFloatx80NaN(floatx80 a, floatx80 b)\n{\n\tint aIsNaN = floatx80_is_nan(a);\n\tint aIsSignalingNaN = floatx80_is_signaling_nan(a);\n\tint bIsNaN = floatx80_is_nan(b);\n\tint bIsSignalingNaN = floatx80_is_signaling_nan(b);\n\ta.low |= U64(0xC000000000000000);\n\tb.low |= U64(0xC000000000000000);\n\tif (aIsSignalingNaN | bIsSignalingNaN) float_raise(float_flag_invalid);\n\tif (aIsSignalingNaN) {\n\t\tif (bIsSignalingNaN) goto returnLargerSignificand;\n\t\treturn bIsNaN ? b : a;\n\t}\n\telse if (aIsNaN) {\n\t\tif (bIsSignalingNaN | ! bIsNaN) return a;\n\treturnLargerSignificand:\n\t\tif (a.low < b.low) return b;\n\t\tif (b.low < a.low) return a;\n\t\treturn (a.high < b.high) ? a : b;\n\t}\n\telse {\n\t\treturn b;\n\t}\n}\n#endif\n\n//static const float128 float128_one =\n//\tpackFloat_128(U64(0x3fff000000000000), U64(0x0000000000000000));\nstatic const float128 float128_two =\n\tpackFloat_128(U64(0x4000000000000000), U64(0x0000000000000000));\n\nstatic const float128 float128_ln2inv2 =\n\tpackFloat_128(U64(0x400071547652b82f), U64(0xe1777d0ffda0d23a));\n\n#define SQRT2_HALF_SIG  U64(0xb504f333f9de6484)\n\nextern float128 OddPoly(float128 x, float128 *arr, unsigned n);\n\n#define L2_ARR_SIZE 9\n\nstatic float128 ln_arr[L2_ARR_SIZE] =\n{\n\tPACK_FLOAT_128(0x3fff000000000000, 0x0000000000000000), /*  1 */\n\tPACK_FLOAT_128(0x3ffd555555555555, 0x5555555555555555), /*  3 */\n\tPACK_FLOAT_128(0x3ffc999999999999, 0x999999999999999a), /*  5 */\n\tPACK_FLOAT_128(0x3ffc249249249249, 0x2492492492492492), /*  7 */\n\tPACK_FLOAT_128(0x3ffbc71c71c71c71, 0xc71c71c71c71c71c), /*  9 */\n\tPACK_FLOAT_128(0x3ffb745d1745d174, 0x5d1745d1745d1746), /* 11 */\n\tPACK_FLOAT_128(0x3ffb3b13b13b13b1, 0x3b13b13b13b13b14), /* 13 */\n\tPACK_FLOAT_128(0x3ffb111111111111, 0x1111111111111111), /* 15 */\n\tPACK_FLOAT_128(0x3ffae1e1e1e1e1e1, 0xe1e1e1e1e1e1e1e2)  /* 17 */\n};\n\nstatic float128 poly_ln(float128 x1)\n{\n/*\n    //\n    //                     3     5     7     9     11     13     15\n    //        1+u         u     u     u     u     u      u      u\n    // 1/2 ln ---  ~ u + --- + --- + --- + --- + ---- + ---- + ---- =\n    //        1-u         3     5     7     9     11     13     15\n    //\n    //                     2     4     6     8     10     12     14\n    //                    u     u     u     u     u      u      u\n    //       = u * [ 1 + --- + --- + --- + --- + ---- + ---- + ---- ] =\n    //                    3     5     7     9     11     13     15\n    //\n    //           3                          3\n    //          --       4k                --        4k+2\n    //   p(u) = >  C  * u           q(u) = >  C   * u\n    //          --  2k                     --  2k+1\n    //          k=0                        k=0\n    //\n    //          1+u                 2\n    //   1/2 ln --- ~ u * [ p(u) + u * q(u) ]\n    //          1-u\n    //\n*/\n\treturn OddPoly(x1, ln_arr, L2_ARR_SIZE);\n}\n\n/* required sqrt(2)/2 < x < sqrt(2) */\nstatic float128 poly_l2(float128 x)\n{\n\t/* using float128 for approximation */\n\tfloat128 x_p1 = float128_add(x, float128_one);\n\tfloat128 x_m1 = float128_sub(x, float128_one);\n\tx = float128_div(x_m1, x_p1);\n\tx = poly_ln(x);\n\tx = float128_mul(x, float128_ln2inv2);\n\treturn x;\n}\n\nstatic float128 poly_l2p1(float128 x)\n{\n\t/* using float128 for approximation */\n\tfloat128 x_p2 = float128_add(x, float128_two);\n\tx = float128_div(x, x_p2);\n\tx = poly_ln(x);\n\tx = float128_mul(x, float128_ln2inv2);\n\treturn x;\n}\n\n// =================================================\n// FYL2X                   Compute y * log (x)\n//                                        2\n// =================================================\n\n//\n// Uses the following identities:\n//\n// 1. ----------------------------------------------------------\n//              ln(x)\n//   log (x) = -------,  ln (x*y) = ln(x) + ln(y)\n//      2       ln(2)\n//\n// 2. ----------------------------------------------------------\n//                1+u             x-1\n//   ln (x) = ln -----, when u = -----\n//                1-u             x+1\n//\n// 3. ----------------------------------------------------------\n//                        3     5     7           2n+1\n//       1+u             u     u     u           u\n//   ln ----- = 2 [ u + --- + --- + --- + ... + ------ + ... ]\n//       1-u             3     5     7           2n+1\n//\n\nfloatx80 fyl2x(floatx80 a, floatx80 b)\n{\n\tUINT64 aSig = extractFloatx80Frac(a);\n\tINT32 aExp = extractFloatx80Exp(a);\n\tint aSign = extractFloatx80Sign(a);\n\tUINT64 bSig = extractFloatx80Frac(b);\n\tINT32 bExp = extractFloatx80Exp(b);\n\tint bSign = extractFloatx80Sign(b);\n\n\tint zSign = bSign ^ 1;\n\n\tif (aExp == 0x7FFF) {\n\t\tif ((UINT64) (aSig<<1)\n\t\t\t\t|| ((bExp == 0x7FFF) && (UINT64) (bSig<<1)))\n\t\t{\n\t\t\treturn propagateFloatx80NaN(a, b);\n\t\t}\n\t\tif (aSign)\n\t\t{\ninvalid:\n\t\t\tfloat_raise(float_flag_invalid);\n\t\t\treturn floatx80_default_nan;\n\t\t}\n\t\telse {\n\t\t\tif (bExp == 0) {\n\t\t\t\tif (bSig == 0) goto invalid;\n\t\t\t\tfloat_raise(float_flag_denormal);\n\t\t\t}\n\t\t\treturn packFloatx80(bSign, 0x7FFF, U64(0x8000000000000000));\n\t\t}\n\t}\n\tif (bExp == 0x7FFF)\n\t{\n\t\tif ((UINT64) (bSig<<1)) return propagateFloatx80NaN(a, b);\n\t\tif (aSign && (UINT64)(aExp | aSig)) goto invalid;\n\t\tif (aSig && (aExp == 0))\n\t\t\tfloat_raise(float_flag_denormal);\n\t\tif (aExp < 0x3FFF) {\n\t\t\treturn packFloatx80(zSign, 0x7FFF, U64(0x8000000000000000));\n\t\t}\n\t\tif (aExp == 0x3FFF && ((UINT64) (aSig<<1) == 0)) goto invalid;\n\t\treturn packFloatx80(bSign, 0x7FFF, U64(0x8000000000000000));\n\t}\n\tif (aExp == 0) {\n\t\tif (aSig == 0) {\n\t\t\tif ((bExp | bSig) == 0) goto invalid;\n\t\t\tfloat_raise(float_flag_divbyzero);\n\t\t\treturn packFloatx80(zSign, 0x7FFF, U64(0x8000000000000000));\n\t\t}\n\t\tif (aSign) goto invalid;\n\t\tfloat_raise(float_flag_denormal);\n\t\tnormalizeFloatx80Subnormal(aSig, &aExp, &aSig);\n\t}\n\tif (aSign) goto invalid;\n\tif (bExp == 0) {\n\t\tif (bSig == 0) {\n\t\t\tif (aExp < 0x3FFF) return packFloatx80(zSign, 0, 0);\n\t\t\treturn packFloatx80(bSign, 0, 0);\n\t\t}\n\t\tfloat_raise(float_flag_denormal);\n\t\tnormalizeFloatx80Subnormal(bSig, &bExp, &bSig);\n\t}\n\tif (aExp == 0x3FFF && ((UINT64) (aSig<<1) == 0))\n\t\treturn packFloatx80(bSign, 0, 0);\n\n\tfloat_raise(float_flag_inexact);\n\n\tint ExpDiff = aExp - 0x3FFF;\n\taExp = 0;\n\tif (aSig >= SQRT2_HALF_SIG) {\n\t\tExpDiff++;\n\t\taExp--;\n\t}\n\n\t/* ******************************** */\n\t/* using float128 for approximation */\n\t/* ******************************** */\n\n\tUINT64 zSig0, zSig1;\n\tshift128Right(aSig<<1, 0, 16, &zSig0, &zSig1);\n\tfloat128 x = packFloat128(0, aExp+0x3FFF, zSig0, zSig1);\n\tx = poly_l2(x);\n\tx = float128_add(x, int64_to_float128((INT64) ExpDiff));\n\treturn floatx80_mul(b, float128_to_floatx80(x));\n}\n\n// =================================================\n// FYL2XP1                 Compute y * log (x + 1)\n//                                        2\n// =================================================\n\n//\n// Uses the following identities:\n//\n// 1. ----------------------------------------------------------\n//              ln(x)\n//   log (x) = -------\n//      2       ln(2)\n//\n// 2. ----------------------------------------------------------\n//                  1+u              x\n//   ln (x+1) = ln -----, when u = -----\n//                  1-u             x+2\n//\n// 3. ----------------------------------------------------------\n//                        3     5     7           2n+1\n//       1+u             u     u     u           u\n//   ln ----- = 2 [ u + --- + --- + --- + ... + ------ + ... ]\n//       1-u             3     5     7           2n+1\n//\n\nfloatx80 fyl2xp1(floatx80 a, floatx80 b)\n{\n\tINT32 aExp, bExp;\n\tUINT64 aSig, bSig, zSig0, zSig1, zSig2;\n\tint aSign, bSign;\n\n\taSig = extractFloatx80Frac(a);\n\taExp = extractFloatx80Exp(a);\n\taSign = extractFloatx80Sign(a);\n\tbSig = extractFloatx80Frac(b);\n\tbExp = extractFloatx80Exp(b);\n\tbSign = extractFloatx80Sign(b);\n\tint zSign = aSign ^ bSign;\n\n\tif (aExp == 0x7FFF) {\n\t\tif ((UINT64) (aSig<<1)\n\t\t\t\t|| ((bExp == 0x7FFF) && (UINT64) (bSig<<1)))\n\t\t{\n\t\t\treturn propagateFloatx80NaN(a, b);\n\t\t}\n\t\tif (aSign)\n\t\t{\ninvalid:\n\t\t\tfloat_raise(float_flag_invalid);\n\t\t\treturn floatx80_default_nan;\n\t\t}\n\t\t\telse {\n\t\t\tif (bExp == 0) {\n\t\t\t\tif (bSig == 0) goto invalid;\n\t\t\t\tfloat_raise(float_flag_denormal);\n\t\t\t}\n\t\t\treturn packFloatx80(bSign, 0x7FFF, U64(0x8000000000000000));\n\t\t}\n\t}\n\tif (bExp == 0x7FFF)\n\t{\n\t\tif ((UINT64) (bSig<<1))\n\t\t\treturn propagateFloatx80NaN(a, b);\n\n\t\tif (aExp == 0) {\n\t\t\tif (aSig == 0) goto invalid;\n\t\t\tfloat_raise(float_flag_denormal);\n\t\t}\n\n\t\treturn packFloatx80(zSign, 0x7FFF, U64(0x8000000000000000));\n\t}\n\tif (aExp == 0) {\n\t\tif (aSig == 0) {\n\t\t\tif (bSig && (bExp == 0)) float_raise(float_flag_denormal);\n\t\t\treturn packFloatx80(zSign, 0, 0);\n\t\t}\n\t\tfloat_raise(float_flag_denormal);\n\t\tnormalizeFloatx80Subnormal(aSig, &aExp, &aSig);\n\t}\n\tif (bExp == 0) {\n\t\tif (bSig == 0) return packFloatx80(zSign, 0, 0);\n\t\tfloat_raise(float_flag_denormal);\n\t\tnormalizeFloatx80Subnormal(bSig, &bExp, &bSig);\n\t}\n\n\tfloat_raise(float_flag_inexact);\n\n\tif (aSign && aExp >= 0x3FFF)\n\t\treturn a;\n\n\tif (aExp >= 0x3FFC) // big argument\n\t{\n\t\treturn fyl2x(floatx80_add(a, floatx80_one), b);\n\t}\n\n\t// handle tiny argument\n\tif (aExp < EXP_BIAS-70)\n\t{\n\t\t// first order approximation, return (a*b)/ln(2)\n\t\tINT32 zExp = aExp + FLOAT_LN2INV_EXP - 0x3FFE;\n\n\tmul128By64To192(FLOAT_LN2INV_HI, FLOAT_LN2INV_LO, aSig, &zSig0, &zSig1, &zSig2);\n\t\tif (0 < (INT64) zSig0) {\n\t\t\tshortShift128Left(zSig0, zSig1, 1, &zSig0, &zSig1);\n\t\t\t--zExp;\n\t\t}\n\n\t\tzExp = zExp + bExp - 0x3FFE;\n\tmul128By64To192(zSig0, zSig1, bSig, &zSig0, &zSig1, &zSig2);\n\t\tif (0 < (INT64) zSig0) {\n\t\t\tshortShift128Left(zSig0, zSig1, 1, &zSig0, &zSig1);\n\t\t\t--zExp;\n\t\t}\n\n\t\treturn\n\t\t\troundAndPackFloatx80(80, aSign ^ bSign, zExp, zSig0, zSig1);\n\t}\n\n\t/* ******************************** */\n\t/* using float128 for approximation */\n\t/* ******************************** */\n\n\tshift128Right(aSig<<1, 0, 16, &zSig0, &zSig1);\n\tfloat128 x = packFloat128(aSign, aExp, zSig0, zSig1);\n\tx = poly_l2p1(x);\n\treturn floatx80_mul(b, float128_to_floatx80(x));\n}\n\nfloatx80 floatx80_flognp1(floatx80 a)\n{\n\treturn fyl2xp1(a, floatx80_ln_2);\n}\n\nfloatx80 floatx80_flogn(floatx80 a)\n{\n\treturn fyl2x(a, floatx80_ln_2);\n}\n\nfloatx80 floatx80_flog2(floatx80 a)\n{\n\treturn fyl2x(a, floatx80_one);\n}\n\nfloatx80 floatx80_flog10(floatx80 a)\n{\n\treturn fyl2x(a, floatx80_log10_2);\n}\n"
  },
  {
    "path": "vm86/mame/lib/softfloat/mamesf.h",
    "content": "#pragma once\n\n/*----------------------------------------------------------------------------\n| One of the macros `BIGENDIAN' or `LITTLEENDIAN' must be defined.\n*----------------------------------------------------------------------------*/\n#ifdef LSB_FIRST\n#define LITTLEENDIAN\n#else\n#define BIGENDIAN\n#endif\n\n/*----------------------------------------------------------------------------\n| The macro `BITS64' can be defined to indicate that 64-bit integer types are\n| supported by the compiler.\n*----------------------------------------------------------------------------*/\n#define BITS64\n\n/*----------------------------------------------------------------------------\n| Each of the following `typedef's defines the most convenient type that holds\n| integers of at least as many bits as specified.  For example, `uint8' should\n| be the most convenient type that can hold unsigned integers of as many as\n| 8 bits.  The `flag' type must be able to hold either a 0 or 1.  For most\n| implementations of C, `flag', `uint8', and `int8' should all be `typedef'ed\n| to the same as `int'.\n*----------------------------------------------------------------------------*/\n//#include \"emu.h\"\n\ntypedef INT8 flag;\ntypedef UINT8 uint8;\ntypedef INT8 int8;\ntypedef UINT16 uint16;\ntypedef INT16 int16;\ntypedef UINT32 uint32;\ntypedef INT32 int32;\ntypedef UINT64 uint64;\ntypedef INT64 int64;\n\n/*----------------------------------------------------------------------------\n| Each of the following `typedef's defines a type that holds integers\n| of _exactly_ the number of bits specified.  For instance, for most\n| implementation of C, `bits16' and `sbits16' should be `typedef'ed to\n| `unsigned short int' and `signed short int' (or `short int'), respectively.\n*----------------------------------------------------------------------------*/\ntypedef UINT8 bits8;\ntypedef INT8 sbits8;\ntypedef UINT16 bits16;\ntypedef INT16 sbits16;\ntypedef UINT32 bits32;\ntypedef INT32 sbits32;\ntypedef UINT64 bits64;\ntypedef INT64 sbits64;\n\n/*----------------------------------------------------------------------------\n| The `LIT64' macro takes as its argument a textual integer literal and\n| if necessary ``marks'' the literal as having a 64-bit integer type.\n| For example, the GNU C Compiler (`gcc') requires that 64-bit literals be\n| appended with the letters `LL' standing for `long long', which is `gcc's\n| name for the 64-bit integer type.  Some compilers may allow `LIT64' to be\n| defined as the identity macro:  `#define LIT64( a ) a'.\n*----------------------------------------------------------------------------*/\n#define LIT64( a ) a##ULL\n\n/*----------------------------------------------------------------------------\n| The macro `INLINE' can be used before functions that should be inlined.  If\n| a compiler does not support explicit inlining, this macro should be defined\n| to be `static'.\n*----------------------------------------------------------------------------*/\n// MAME defines INLINE\n"
  },
  {
    "path": "vm86/mame/lib/softfloat/milieu.h",
    "content": "\n/*============================================================================\n\nThis C header file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic\nPackage, Release 2b.\n\nWritten by John R. Hauser.  This work was made possible in part by the\nInternational Computer Science Institute, located at Suite 600, 1947 Center\nStreet, Berkeley, California 94704.  Funding was partially provided by the\nNational Science Foundation under grant MIP-9311980.  The original version\nof this code was written as part of a project to build a fixed-point vector\nprocessor in collaboration with the University of California at Berkeley,\noverseen by Profs. Nelson Morgan and John Wawrzynek.  More information\nis available through the Web page `http://www.cs.berkeley.edu/~jhauser/\narithmetic/SoftFloat.html'.\n\nTHIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\nbeen made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\nRESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\nAND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\nCOSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\nEFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\nINSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\nOTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\n\nDerivative works are acceptable, even for commercial purposes, so long as\n(1) the source code for the derivative work includes prominent notice that\nthe work is derivative, and (2) the source code includes prominent notice with\nthese four paragraphs for those parts of this code that are retained.\n\n=============================================================================*/\n\n/*----------------------------------------------------------------------------\n| Include common integer types and flags.\n*----------------------------------------------------------------------------*/\n#include \"mamesf.h\"\n\n/*----------------------------------------------------------------------------\n| Symbolic Boolean literals.\n*----------------------------------------------------------------------------*/\n#define FALSE 0\n#define TRUE 1\n"
  },
  {
    "path": "vm86/mame/lib/softfloat/readme_msdos_player.txt",
    "content": "Based on MAME 0.152.\n"
  },
  {
    "path": "vm86/mame/lib/softfloat/softfloat-macros",
    "content": "\n/*============================================================================\n\nThis C source fragment is part of the SoftFloat IEC/IEEE Floating-point\nArithmetic Package, Release 2b.\n\nWritten by John R. Hauser.  This work was made possible in part by the\nInternational Computer Science Institute, located at Suite 600, 1947 Center\nStreet, Berkeley, California 94704.  Funding was partially provided by the\nNational Science Foundation under grant MIP-9311980.  The original version\nof this code was written as part of a project to build a fixed-point vector\nprocessor in collaboration with the University of California at Berkeley,\noverseen by Profs. Nelson Morgan and John Wawrzynek.  More information\nis available through the Web page `http://www.cs.berkeley.edu/~jhauser/\narithmetic/SoftFloat.html'.\n\nTHIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\nbeen made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\nRESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\nAND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\nCOSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\nEFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\nINSTITUTE (possibly via similar legal notice) AGAINST ALL LOSSES, COSTS, OR\nOTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\n\nDerivative works are acceptable, even for commercial purposes, so long as\n(1) the source code for the derivative work includes prominent notice that\nthe work is derivative, and (2) the source code includes prominent notice with\nthese four paragraphs for those parts of this code that are retained.\n\n=============================================================================*/\n\n/*----------------------------------------------------------------------------\n| Shifts `a' right by the number of bits given in `count'.  If any nonzero\n| bits are shifted off, they are ``jammed'' into the least significant bit of\n| the result by setting the least significant bit to 1.  The value of `count'\n| can be arbitrarily large; in particular, if `count' is greater than 32, the\n| result will be either 0 or 1, depending on whether `a' is zero or nonzero.\n| The result is stored in the location pointed to by `zPtr'.\n*----------------------------------------------------------------------------*/\n\nINLINE void shift32RightJamming( bits32 a, int16 count, bits32 *zPtr )\n{\n    bits32 z;\n\n    if ( count == 0 ) {\n        z = a;\n    }\n    else if ( count < 32 ) {\n        z = ( a>>count ) | ( ( a<<( ( - count ) & 31 ) ) != 0 );\n    }\n    else {\n        z = ( a != 0 );\n    }\n    *zPtr = z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Shifts `a' right by the number of bits given in `count'.  If any nonzero\n| bits are shifted off, they are ``jammed'' into the least significant bit of\n| the result by setting the least significant bit to 1.  The value of `count'\n| can be arbitrarily large; in particular, if `count' is greater than 64, the\n| result will be either 0 or 1, depending on whether `a' is zero or nonzero.\n| The result is stored in the location pointed to by `zPtr'.\n*----------------------------------------------------------------------------*/\n\nINLINE void shift64RightJamming( bits64 a, int16 count, bits64 *zPtr )\n{\n    bits64 z;\n\n    if ( count == 0 ) {\n        z = a;\n    }\n    else if ( count < 64 ) {\n        z = ( a>>count ) | ( ( a<<( ( - count ) & 63 ) ) != 0 );\n    }\n    else {\n        z = ( a != 0 );\n    }\n    *zPtr = z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Shifts the 128-bit value formed by concatenating `a0' and `a1' right by 64\n| _plus_ the number of bits given in `count'.  The shifted result is at most\n| 64 nonzero bits; this is stored at the location pointed to by `z0Ptr'.  The\n| bits shifted off form a second 64-bit result as follows:  The _last_ bit\n| shifted off is the most-significant bit of the extra result, and the other\n| 63 bits of the extra result are all zero if and only if _all_but_the_last_\n| bits shifted off were all zero.  This extra result is stored in the location\n| pointed to by `z1Ptr'.  The value of `count' can be arbitrarily large.\n|     (This routine makes more sense if `a0' and `a1' are considered to form\n| a fixed-point value with binary point between `a0' and `a1'.  This fixed-\n| point value is shifted right by the number of bits given in `count', and\n| the integer part of the result is returned at the location pointed to by\n| `z0Ptr'.  The fractional part of the result may be slightly corrupted as\n| described above, and is returned at the location pointed to by `z1Ptr'.)\n*----------------------------------------------------------------------------*/\n\nINLINE void\n shift64ExtraRightJamming(\n     bits64 a0, bits64 a1, int16 count, bits64 *z0Ptr, bits64 *z1Ptr )\n{\n    bits64 z0, z1;\n    int8 negCount = ( - count ) & 63;\n\n    if ( count == 0 ) {\n        z1 = a1;\n        z0 = a0;\n    }\n    else if ( count < 64 ) {\n        z1 = ( a0<<negCount ) | ( a1 != 0 );\n        z0 = a0>>count;\n    }\n    else {\n        if ( count == 64 ) {\n            z1 = a0 | ( a1 != 0 );\n        }\n        else {\n            z1 = ( ( a0 | a1 ) != 0 );\n        }\n        z0 = 0;\n    }\n    *z1Ptr = z1;\n    *z0Ptr = z0;\n\n}\n\n/*----------------------------------------------------------------------------\n| Shifts the 128-bit value formed by concatenating `a0' and `a1' right by the\n| number of bits given in `count'.  Any bits shifted off are lost.  The value\n| of `count' can be arbitrarily large; in particular, if `count' is greater\n| than 128, the result will be 0.  The result is broken into two 64-bit pieces\n| which are stored at the locations pointed to by `z0Ptr' and `z1Ptr'.\n*----------------------------------------------------------------------------*/\n\nINLINE void\n shift128Right(\n     bits64 a0, bits64 a1, int16 count, bits64 *z0Ptr, bits64 *z1Ptr )\n{\n    bits64 z0, z1;\n    int8 negCount = ( - count ) & 63;\n\n    if ( count == 0 ) {\n        z1 = a1;\n        z0 = a0;\n    }\n    else if ( count < 64 ) {\n        z1 = ( a0<<negCount ) | ( a1>>count );\n        z0 = a0>>count;\n    }\n    else {\n        z1 = ( count < 64 ) ? ( a0>>( count & 63 ) ) : 0;\n        z0 = 0;\n    }\n    *z1Ptr = z1;\n    *z0Ptr = z0;\n\n}\n\n/*----------------------------------------------------------------------------\n| Shifts the 128-bit value formed by concatenating `a0' and `a1' right by the\n| number of bits given in `count'.  If any nonzero bits are shifted off, they\n| are ``jammed'' into the least significant bit of the result by setting the\n| least significant bit to 1.  The value of `count' can be arbitrarily large;\n| in particular, if `count' is greater than 128, the result will be either\n| 0 or 1, depending on whether the concatenation of `a0' and `a1' is zero or\n| nonzero.  The result is broken into two 64-bit pieces which are stored at\n| the locations pointed to by `z0Ptr' and `z1Ptr'.\n*----------------------------------------------------------------------------*/\n\nINLINE void\n shift128RightJamming(\n     bits64 a0, bits64 a1, int16 count, bits64 *z0Ptr, bits64 *z1Ptr )\n{\n    bits64 z0, z1;\n    int8 negCount = ( - count ) & 63;\n\n    if ( count == 0 ) {\n        z1 = a1;\n        z0 = a0;\n    }\n    else if ( count < 64 ) {\n        z1 = ( a0<<negCount ) | ( a1>>count ) | ( ( a1<<negCount ) != 0 );\n        z0 = a0>>count;\n    }\n    else {\n        if ( count == 64 ) {\n            z1 = a0 | ( a1 != 0 );\n        }\n        else if ( count < 128 ) {\n            z1 = ( a0>>( count & 63 ) ) | ( ( ( a0<<negCount ) | a1 ) != 0 );\n        }\n        else {\n            z1 = ( ( a0 | a1 ) != 0 );\n        }\n        z0 = 0;\n    }\n    *z1Ptr = z1;\n    *z0Ptr = z0;\n\n}\n\n/*----------------------------------------------------------------------------\n| Shifts the 192-bit value formed by concatenating `a0', `a1', and `a2' right\n| by 64 _plus_ the number of bits given in `count'.  The shifted result is\n| at most 128 nonzero bits; these are broken into two 64-bit pieces which are\n| stored at the locations pointed to by `z0Ptr' and `z1Ptr'.  The bits shifted\n| off form a third 64-bit result as follows:  The _last_ bit shifted off is\n| the most-significant bit of the extra result, and the other 63 bits of the\n| extra result are all zero if and only if _all_but_the_last_ bits shifted off\n| were all zero.  This extra result is stored in the location pointed to by\n| `z2Ptr'.  The value of `count' can be arbitrarily large.\n|     (This routine makes more sense if `a0', `a1', and `a2' are considered\n| to form a fixed-point value with binary point between `a1' and `a2'.  This\n| fixed-point value is shifted right by the number of bits given in `count',\n| and the integer part of the result is returned at the locations pointed to\n| by `z0Ptr' and `z1Ptr'.  The fractional part of the result may be slightly\n| corrupted as described above, and is returned at the location pointed to by\n| `z2Ptr'.)\n*----------------------------------------------------------------------------*/\n\nINLINE void\n shift128ExtraRightJamming(\n     bits64 a0,\n     bits64 a1,\n     bits64 a2,\n     int16 count,\n     bits64 *z0Ptr,\n     bits64 *z1Ptr,\n     bits64 *z2Ptr\n )\n{\n    bits64 z0, z1, z2;\n    int8 negCount = ( - count ) & 63;\n\n    if ( count == 0 ) {\n        z2 = a2;\n        z1 = a1;\n        z0 = a0;\n    }\n    else {\n        if ( count < 64 ) {\n            z2 = a1<<negCount;\n            z1 = ( a0<<negCount ) | ( a1>>count );\n            z0 = a0>>count;\n        }\n        else {\n            if ( count == 64 ) {\n                z2 = a1;\n                z1 = a0;\n            }\n            else {\n                a2 |= a1;\n                if ( count < 128 ) {\n                    z2 = a0<<negCount;\n                    z1 = a0>>( count & 63 );\n                }\n                else {\n                    z2 = ( count == 128 ) ? a0 : ( a0 != 0 );\n                    z1 = 0;\n                }\n            }\n            z0 = 0;\n        }\n        z2 |= ( a2 != 0 );\n    }\n    *z2Ptr = z2;\n    *z1Ptr = z1;\n    *z0Ptr = z0;\n\n}\n\n/*----------------------------------------------------------------------------\n| Shifts the 128-bit value formed by concatenating `a0' and `a1' left by the\n| number of bits given in `count'.  Any bits shifted off are lost.  The value\n| of `count' must be less than 64.  The result is broken into two 64-bit\n| pieces which are stored at the locations pointed to by `z0Ptr' and `z1Ptr'.\n*----------------------------------------------------------------------------*/\n\nINLINE void\n shortShift128Left(\n     bits64 a0, bits64 a1, int16 count, bits64 *z0Ptr, bits64 *z1Ptr )\n{\n\n    *z1Ptr = a1<<count;\n    *z0Ptr =\n        ( count == 0 ) ? a0 : ( a0<<count ) | ( a1>>( ( - count ) & 63 ) );\n\n}\n\n/*----------------------------------------------------------------------------\n| Shifts the 192-bit value formed by concatenating `a0', `a1', and `a2' left\n| by the number of bits given in `count'.  Any bits shifted off are lost.\n| The value of `count' must be less than 64.  The result is broken into three\n| 64-bit pieces which are stored at the locations pointed to by `z0Ptr',\n| `z1Ptr', and `z2Ptr'.\n*----------------------------------------------------------------------------*/\n\nINLINE void\n shortShift192Left(\n     bits64 a0,\n     bits64 a1,\n     bits64 a2,\n     int16 count,\n     bits64 *z0Ptr,\n     bits64 *z1Ptr,\n     bits64 *z2Ptr\n )\n{\n    bits64 z0, z1, z2;\n    int8 negCount;\n\n    z2 = a2<<count;\n    z1 = a1<<count;\n    z0 = a0<<count;\n    if ( 0 < count ) {\n        negCount = ( ( - count ) & 63 );\n        z1 |= a2>>negCount;\n        z0 |= a1>>negCount;\n    }\n    *z2Ptr = z2;\n    *z1Ptr = z1;\n    *z0Ptr = z0;\n\n}\n\n/*----------------------------------------------------------------------------\n| Adds the 128-bit value formed by concatenating `a0' and `a1' to the 128-bit\n| value formed by concatenating `b0' and `b1'.  Addition is modulo 2^128, so\n| any carry out is lost.  The result is broken into two 64-bit pieces which\n| are stored at the locations pointed to by `z0Ptr' and `z1Ptr'.\n*----------------------------------------------------------------------------*/\n\nINLINE void\n add128(\n     bits64 a0, bits64 a1, bits64 b0, bits64 b1, bits64 *z0Ptr, bits64 *z1Ptr )\n{\n    bits64 z1;\n\n    z1 = a1 + b1;\n    *z1Ptr = z1;\n    *z0Ptr = a0 + b0 + ( z1 < a1 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Adds the 192-bit value formed by concatenating `a0', `a1', and `a2' to the\n| 192-bit value formed by concatenating `b0', `b1', and `b2'.  Addition is\n| modulo 2^192, so any carry out is lost.  The result is broken into three\n| 64-bit pieces which are stored at the locations pointed to by `z0Ptr',\n| `z1Ptr', and `z2Ptr'.\n*----------------------------------------------------------------------------*/\n\nINLINE void\n add192(\n     bits64 a0,\n     bits64 a1,\n     bits64 a2,\n     bits64 b0,\n     bits64 b1,\n     bits64 b2,\n     bits64 *z0Ptr,\n     bits64 *z1Ptr,\n     bits64 *z2Ptr\n )\n{\n    bits64 z0, z1, z2;\n    uint8 carry0, carry1;\n\n    z2 = a2 + b2;\n    carry1 = ( z2 < a2 );\n    z1 = a1 + b1;\n    carry0 = ( z1 < a1 );\n    z0 = a0 + b0;\n    z1 += carry1;\n    z0 += ( z1 < carry1 );\n    z0 += carry0;\n    *z2Ptr = z2;\n    *z1Ptr = z1;\n    *z0Ptr = z0;\n\n}\n\n/*----------------------------------------------------------------------------\n| Subtracts the 128-bit value formed by concatenating `b0' and `b1' from the\n| 128-bit value formed by concatenating `a0' and `a1'.  Subtraction is modulo\n| 2^128, so any borrow out (carry out) is lost.  The result is broken into two\n| 64-bit pieces which are stored at the locations pointed to by `z0Ptr' and\n| `z1Ptr'.\n*----------------------------------------------------------------------------*/\n\nINLINE void\n sub128(\n     bits64 a0, bits64 a1, bits64 b0, bits64 b1, bits64 *z0Ptr, bits64 *z1Ptr )\n{\n\n    *z1Ptr = a1 - b1;\n    *z0Ptr = a0 - b0 - ( a1 < b1 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Subtracts the 192-bit value formed by concatenating `b0', `b1', and `b2'\n| from the 192-bit value formed by concatenating `a0', `a1', and `a2'.\n| Subtraction is modulo 2^192, so any borrow out (carry out) is lost.  The\n| result is broken into three 64-bit pieces which are stored at the locations\n| pointed to by `z0Ptr', `z1Ptr', and `z2Ptr'.\n*----------------------------------------------------------------------------*/\n\nINLINE void\n sub192(\n     bits64 a0,\n     bits64 a1,\n     bits64 a2,\n     bits64 b0,\n     bits64 b1,\n     bits64 b2,\n     bits64 *z0Ptr,\n     bits64 *z1Ptr,\n     bits64 *z2Ptr\n )\n{\n    bits64 z0, z1, z2;\n    uint8 borrow0, borrow1;\n\n    z2 = a2 - b2;\n    borrow1 = ( a2 < b2 );\n    z1 = a1 - b1;\n    borrow0 = ( a1 < b1 );\n    z0 = a0 - b0;\n    z0 -= ( z1 < borrow1 );\n    z1 -= borrow1;\n    z0 -= borrow0;\n    *z2Ptr = z2;\n    *z1Ptr = z1;\n    *z0Ptr = z0;\n\n}\n\n/*----------------------------------------------------------------------------\n| Multiplies `a' by `b' to obtain a 128-bit product.  The product is broken\n| into two 64-bit pieces which are stored at the locations pointed to by\n| `z0Ptr' and `z1Ptr'.\n*----------------------------------------------------------------------------*/\n\nINLINE void mul64To128( bits64 a, bits64 b, bits64 *z0Ptr, bits64 *z1Ptr )\n{\n    bits32 aHigh, aLow, bHigh, bLow;\n    bits64 z0, zMiddleA, zMiddleB, z1;\n\n    aLow = a;\n    aHigh = a>>32;\n    bLow = b;\n    bHigh = b>>32;\n    z1 = ( (bits64) aLow ) * bLow;\n    zMiddleA = ( (bits64) aLow ) * bHigh;\n    zMiddleB = ( (bits64) aHigh ) * bLow;\n    z0 = ( (bits64) aHigh ) * bHigh;\n    zMiddleA += zMiddleB;\n    z0 += ( ( (bits64) ( zMiddleA < zMiddleB ) )<<32 ) + ( zMiddleA>>32 );\n    zMiddleA <<= 32;\n    z1 += zMiddleA;\n    z0 += ( z1 < zMiddleA );\n    *z1Ptr = z1;\n    *z0Ptr = z0;\n\n}\n\n/*----------------------------------------------------------------------------\n| Multiplies the 128-bit value formed by concatenating `a0' and `a1' by\n| `b' to obtain a 192-bit product.  The product is broken into three 64-bit\n| pieces which are stored at the locations pointed to by `z0Ptr', `z1Ptr', and\n| `z2Ptr'.\n*----------------------------------------------------------------------------*/\n\nINLINE void\n mul128By64To192(\n     bits64 a0,\n     bits64 a1,\n     bits64 b,\n     bits64 *z0Ptr,\n     bits64 *z1Ptr,\n     bits64 *z2Ptr\n )\n{\n    bits64 z0, z1, z2, more1;\n\n    mul64To128( a1, b, &z1, &z2 );\n    mul64To128( a0, b, &z0, &more1 );\n    add128( z0, more1, 0, z1, &z0, &z1 );\n    *z2Ptr = z2;\n    *z1Ptr = z1;\n    *z0Ptr = z0;\n\n}\n\n/*----------------------------------------------------------------------------\n| Multiplies the 128-bit value formed by concatenating `a0' and `a1' to the\n| 128-bit value formed by concatenating `b0' and `b1' to obtain a 256-bit\n| product.  The product is broken into four 64-bit pieces which are stored at\n| the locations pointed to by `z0Ptr', `z1Ptr', `z2Ptr', and `z3Ptr'.\n*----------------------------------------------------------------------------*/\n\nINLINE void\n mul128To256(\n     bits64 a0,\n     bits64 a1,\n     bits64 b0,\n     bits64 b1,\n     bits64 *z0Ptr,\n     bits64 *z1Ptr,\n     bits64 *z2Ptr,\n     bits64 *z3Ptr\n )\n{\n    bits64 z0, z1, z2, z3;\n    bits64 more1, more2;\n\n    mul64To128( a1, b1, &z2, &z3 );\n    mul64To128( a1, b0, &z1, &more2 );\n    add128( z1, more2, 0, z2, &z1, &z2 );\n    mul64To128( a0, b0, &z0, &more1 );\n    add128( z0, more1, 0, z1, &z0, &z1 );\n    mul64To128( a0, b1, &more1, &more2 );\n    add128( more1, more2, 0, z2, &more1, &z2 );\n    add128( z0, z1, 0, more1, &z0, &z1 );\n    *z3Ptr = z3;\n    *z2Ptr = z2;\n    *z1Ptr = z1;\n    *z0Ptr = z0;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns an approximation to the 64-bit integer quotient obtained by dividing\n| `b' into the 128-bit value formed by concatenating `a0' and `a1'.  The\n| divisor `b' must be at least 2^63.  If q is the exact quotient truncated\n| toward zero, the approximation returned lies between q and q + 2 inclusive.\n| If the exact quotient q is larger than 64 bits, the maximum positive 64-bit\n| unsigned integer is returned.\n*----------------------------------------------------------------------------*/\n\nINLINE bits64 estimateDiv128To64( bits64 a0, bits64 a1, bits64 b )\n{\n    bits64 b0, b1;\n    bits64 rem0, rem1, term0, term1;\n    bits64 z;\n\n    if ( b <= a0 ) return LIT64( 0xFFFFFFFFFFFFFFFF );\n    b0 = b>>32;\n    z = ( b0<<32 <= a0 ) ? LIT64( 0xFFFFFFFF00000000 ) : ( a0 / b0 )<<32;\n    mul64To128( b, z, &term0, &term1 );\n    sub128( a0, a1, term0, term1, &rem0, &rem1 );\n    while ( ( (sbits64) rem0 ) < 0 ) {\n        z -= LIT64( 0x100000000 );\n        b1 = b<<32;\n        add128( rem0, rem1, b0, b1, &rem0, &rem1 );\n    }\n    rem0 = ( rem0<<32 ) | ( rem1>>32 );\n    z |= ( b0<<32 <= rem0 ) ? 0xFFFFFFFF : rem0 / b0;\n    return z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns an approximation to the square root of the 32-bit significand given\n| by `a'.  Considered as an integer, `a' must be at least 2^31.  If bit 0 of\n| `aExp' (the least significant bit) is 1, the integer returned approximates\n| 2^31*sqrt(`a'/2^31), where `a' is considered an integer.  If bit 0 of `aExp'\n| is 0, the integer returned approximates 2^31*sqrt(`a'/2^30).  In either\n| case, the approximation returned lies strictly within +/-2 of the exact\n| value.\n*----------------------------------------------------------------------------*/\n\nINLINE bits32 estimateSqrt32( int16 aExp, bits32 a )\n{\n    static const bits16 sqrtOddAdjustments[] = {\n        0x0004, 0x0022, 0x005D, 0x00B1, 0x011D, 0x019F, 0x0236, 0x02E0,\n        0x039C, 0x0468, 0x0545, 0x0631, 0x072B, 0x0832, 0x0946, 0x0A67\n    };\n    static const bits16 sqrtEvenAdjustments[] = {\n        0x0A2D, 0x08AF, 0x075A, 0x0629, 0x051A, 0x0429, 0x0356, 0x029E,\n        0x0200, 0x0179, 0x0109, 0x00AF, 0x0068, 0x0034, 0x0012, 0x0002\n    };\n    int8 index;\n    bits32 z;\n\n    index = ( a>>27 ) & 15;\n    if ( aExp & 1 ) {\n        z = 0x4000 + ( a>>17 ) - sqrtOddAdjustments[ index ];\n        z = ( ( a / z )<<14 ) + ( z<<15 );\n        a >>= 1;\n    }\n    else {\n        z = 0x8000 + ( a>>17 ) - sqrtEvenAdjustments[ index ];\n        z = a / z + z;\n        z = ( 0x20000 <= z ) ? 0xFFFF8000 : ( z<<15 );\n        if ( z <= a ) return (bits32) ( ( (sbits32) a )>>1 );\n    }\n    return ( (bits32) ( ( ( (bits64) a )<<31 ) / z ) ) + ( z>>1 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the number of leading 0 bits before the most-significant 1 bit of\n| `a'.  If `a' is zero, 32 is returned.\n*----------------------------------------------------------------------------*/\n\nstatic int8 countLeadingZeros32( bits32 a )\n{\n    static const int8 countLeadingZerosHigh[] = {\n        8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,\n        3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0\n    };\n    int8 shiftCount;\n\n    shiftCount = 0;\n    if ( a < 0x10000 ) {\n        shiftCount += 16;\n        a <<= 16;\n    }\n    if ( a < 0x1000000 ) {\n        shiftCount += 8;\n        a <<= 8;\n    }\n    shiftCount += countLeadingZerosHigh[ a>>24 ];\n    return shiftCount;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the number of leading 0 bits before the most-significant 1 bit of\n| `a'.  If `a' is zero, 64 is returned.\n*----------------------------------------------------------------------------*/\n\nstatic int8 countLeadingZeros64( bits64 a )\n{\n    int8 shiftCount;\n\n    shiftCount = 0;\n    if ( a < ( (bits64) 1 )<<32 ) {\n        shiftCount += 32;\n    }\n    else {\n        a >>= 32;\n    }\n    shiftCount += countLeadingZeros32( a );\n    return shiftCount;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the 128-bit value formed by concatenating `a0' and `a1'\n| is equal to the 128-bit value formed by concatenating `b0' and `b1'.\n| Otherwise, returns 0.\n*----------------------------------------------------------------------------*/\n\nINLINE flag eq128( bits64 a0, bits64 a1, bits64 b0, bits64 b1 )\n{\n\n    return ( a0 == b0 ) && ( a1 == b1 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the 128-bit value formed by concatenating `a0' and `a1' is less\n| than or equal to the 128-bit value formed by concatenating `b0' and `b1'.\n| Otherwise, returns 0.\n*----------------------------------------------------------------------------*/\n\nINLINE flag le128( bits64 a0, bits64 a1, bits64 b0, bits64 b1 )\n{\n\n    return ( a0 < b0 ) || ( ( a0 == b0 ) && ( a1 <= b1 ) );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the 128-bit value formed by concatenating `a0' and `a1' is less\n| than the 128-bit value formed by concatenating `b0' and `b1'.  Otherwise,\n| returns 0.\n*----------------------------------------------------------------------------*/\n\nINLINE flag lt128( bits64 a0, bits64 a1, bits64 b0, bits64 b1 )\n{\n\n    return ( a0 < b0 ) || ( ( a0 == b0 ) && ( a1 < b1 ) );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the 128-bit value formed by concatenating `a0' and `a1' is\n| not equal to the 128-bit value formed by concatenating `b0' and `b1'.\n| Otherwise, returns 0.\n*----------------------------------------------------------------------------*/\n\nINLINE flag ne128( bits64 a0, bits64 a1, bits64 b0, bits64 b1 )\n{\n\n    return ( a0 != b0 ) || ( a1 != b1 );\n\n}\n\n/*-----------------------------------------------------------------------------\n| Changes the sign of the extended double-precision floating-point value 'a'.\n| The operation is performed according to the IEC/IEEE Standard for Binary\n| Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nINLINE floatx80 floatx80_chs(floatx80 reg)\n{\n    reg.high ^= 0x8000;\n    return reg;\n}\n\n"
  },
  {
    "path": "vm86/mame/lib/softfloat/softfloat-specialize",
    "content": "\n/*============================================================================\n\nThis C source fragment is part of the SoftFloat IEC/IEEE Floating-point\nArithmetic Package, Release 2b.\n\nWritten by John R. Hauser.  This work was made possible in part by the\nInternational Computer Science Institute, located at Suite 600, 1947 Center\nStreet, Berkeley, California 94704.  Funding was partially provided by the\nNational Science Foundation under grant MIP-9311980.  The original version\nof this code was written as part of a project to build a fixed-point vector\nprocessor in collaboration with the University of California at Berkeley,\noverseen by Profs. Nelson Morgan and John Wawrzynek.  More information\nis available through the Web page `http://www.cs.berkeley.edu/~jhauser/\narithmetic/SoftFloat.html'.\n\nTHIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\nbeen made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\nRESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\nAND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\nCOSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\nEFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\nINSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\nOTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\n\nDerivative works are acceptable, even for commercial purposes, so long as\n(1) the source code for the derivative work includes prominent notice that\nthe work is derivative, and (2) the source code includes prominent notice with\nthese four paragraphs for those parts of this code that are retained.\n\n=============================================================================*/\n\n/*----------------------------------------------------------------------------\n| Underflow tininess-detection mode, statically initialized to default value.\n| (The declaration in `softfloat.h' must match the `int8' type here.)\n*----------------------------------------------------------------------------*/\nint8 float_detect_tininess = float_tininess_after_rounding;\n\n/*----------------------------------------------------------------------------\n| Raises the exceptions specified by `flags'.  Floating-point traps can be\n| defined here if desired.  It is currently not possible for such a trap to\n| substitute a result value.  If traps are not implemented, this routine\n| should be simply `float_exception_flags |= flags;'.\n*----------------------------------------------------------------------------*/\n\nvoid float_raise( int8 flags )\n{\n\n    float_exception_flags |= flags;\n\n}\n\n/*----------------------------------------------------------------------------\n| Internal canonical NaN format.\n*----------------------------------------------------------------------------*/\ntypedef struct {\n    flag sign;\n    bits64 high, low;\n} commonNaNT;\n\n/*----------------------------------------------------------------------------\n| The pattern for a default generated single-precision NaN.\n*----------------------------------------------------------------------------*/\n#define float32_default_nan 0xFFFFFFFF\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the single-precision floating-point value `a' is a NaN;\n| otherwise returns 0.\n*----------------------------------------------------------------------------*/\n\nflag float32_is_nan( float32 a )\n{\n\n    return ( 0xFF000000 < (bits32) ( a<<1 ) );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the single-precision floating-point value `a' is a signaling\n| NaN; otherwise returns 0.\n*----------------------------------------------------------------------------*/\n\nflag float32_is_signaling_nan( float32 a )\n{\n\n    return ( ( ( a>>22 ) & 0x1FF ) == 0x1FE ) && ( a & 0x003FFFFF );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the single-precision floating-point NaN\n| `a' to the canonical NaN format.  If `a' is a signaling NaN, the invalid\n| exception is raised.\n*----------------------------------------------------------------------------*/\n\nstatic commonNaNT float32ToCommonNaN( float32 a )\n{\n    commonNaNT z;\n\n    if ( float32_is_signaling_nan( a ) ) float_raise( float_flag_invalid );\n    z.sign = a>>31;\n    z.low = 0;\n    z.high = ( (bits64) a )<<41;\n    return z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the canonical NaN `a' to the single-\n| precision floating-point format.\n*----------------------------------------------------------------------------*/\n\nstatic float32 commonNaNToFloat32( commonNaNT a )\n{\n\n    return ( ( (bits32) a.sign )<<31 ) | 0x7FC00000 | ( a.high>>41 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Takes two single-precision floating-point values `a' and `b', one of which\n| is a NaN, and returns the appropriate NaN result.  If either `a' or `b' is a\n| signaling NaN, the invalid exception is raised.\n*----------------------------------------------------------------------------*/\n\nstatic float32 propagateFloat32NaN( float32 a, float32 b )\n{\n    flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;\n\n    aIsNaN = float32_is_nan( a );\n    aIsSignalingNaN = float32_is_signaling_nan( a );\n    bIsNaN = float32_is_nan( b );\n    bIsSignalingNaN = float32_is_signaling_nan( b );\n    a |= 0x00400000;\n    b |= 0x00400000;\n    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );\n    if ( aIsNaN ) {\n        return ( aIsSignalingNaN & bIsNaN ) ? b : a;\n    }\n    else {\n        return b;\n    }\n\n}\n\n/*----------------------------------------------------------------------------\n| The pattern for a default generated double-precision NaN.\n*----------------------------------------------------------------------------*/\n#define float64_default_nan LIT64( 0xFFFFFFFFFFFFFFFF )\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the double-precision floating-point value `a' is a NaN;\n| otherwise returns 0.\n*----------------------------------------------------------------------------*/\n\nflag float64_is_nan( float64 a )\n{\n\n    return ( LIT64( 0xFFE0000000000000 ) < (bits64) ( a<<1 ) );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the double-precision floating-point value `a' is a signaling\n| NaN; otherwise returns 0.\n*----------------------------------------------------------------------------*/\n\nflag float64_is_signaling_nan( float64 a )\n{\n\n    return\n           ( ( ( a>>51 ) & 0xFFF ) == 0xFFE )\n        && ( a & LIT64( 0x0007FFFFFFFFFFFF ) );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the double-precision floating-point NaN\n| `a' to the canonical NaN format.  If `a' is a signaling NaN, the invalid\n| exception is raised.\n*----------------------------------------------------------------------------*/\n\nstatic commonNaNT float64ToCommonNaN( float64 a )\n{\n    commonNaNT z;\n\n    if ( float64_is_signaling_nan( a ) ) float_raise( float_flag_invalid );\n    z.sign = a>>63;\n    z.low = 0;\n    z.high = a<<12;\n    return z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the canonical NaN `a' to the double-\n| precision floating-point format.\n*----------------------------------------------------------------------------*/\n\nstatic float64 commonNaNToFloat64( commonNaNT a )\n{\n\n    return\n          ( ( (bits64) a.sign )<<63 )\n        | LIT64( 0x7FF8000000000000 )\n        | ( a.high>>12 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Takes two double-precision floating-point values `a' and `b', one of which\n| is a NaN, and returns the appropriate NaN result.  If either `a' or `b' is a\n| signaling NaN, the invalid exception is raised.\n*----------------------------------------------------------------------------*/\n\nstatic float64 propagateFloat64NaN( float64 a, float64 b )\n{\n    flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;\n\n    aIsNaN = float64_is_nan( a );\n    aIsSignalingNaN = float64_is_signaling_nan( a );\n    bIsNaN = float64_is_nan( b );\n    bIsSignalingNaN = float64_is_signaling_nan( b );\n    a |= LIT64( 0x0008000000000000 );\n    b |= LIT64( 0x0008000000000000 );\n    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );\n    if ( aIsNaN ) {\n        return ( aIsSignalingNaN & bIsNaN ) ? b : a;\n    }\n    else {\n        return b;\n    }\n\n}\n\n#ifdef FLOATX80\n\n/*----------------------------------------------------------------------------\n| The pattern for a default generated extended double-precision NaN.  The\n| `high' and `low' values hold the most- and least-significant bits,\n| respectively.\n*----------------------------------------------------------------------------*/\n#define floatx80_default_nan_high 0xFFFF\n#define floatx80_default_nan_low  LIT64( 0xFFFFFFFFFFFFFFFF )\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the extended double-precision floating-point value `a' is a\n| NaN; otherwise returns 0.\n*----------------------------------------------------------------------------*/\n\nflag floatx80_is_nan( floatx80 a )\n{\n\n    return ( ( a.high & 0x7FFF ) == 0x7FFF ) && (bits64) ( a.low<<1 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the extended double-precision floating-point value `a' is a\n| signaling NaN; otherwise returns 0.\n*----------------------------------------------------------------------------*/\n\nflag floatx80_is_signaling_nan( floatx80 a )\n{\n    bits64 aLow;\n\n    aLow = a.low & ~ LIT64( 0x4000000000000000 );\n    return\n           ( ( a.high & 0x7FFF ) == 0x7FFF )\n        && (bits64) ( aLow<<1 )\n        && ( a.low == aLow );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the extended double-precision floating-\n| point NaN `a' to the canonical NaN format.  If `a' is a signaling NaN, the\n| invalid exception is raised.\n*----------------------------------------------------------------------------*/\n\nstatic commonNaNT floatx80ToCommonNaN( floatx80 a )\n{\n    commonNaNT z;\n\n    if ( floatx80_is_signaling_nan( a ) ) float_raise( float_flag_invalid );\n    z.sign = a.high>>15;\n    z.low = 0;\n    z.high = a.low<<1;\n    return z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the canonical NaN `a' to the extended\n| double-precision floating-point format.\n*----------------------------------------------------------------------------*/\n\nstatic floatx80 commonNaNToFloatx80( commonNaNT a )\n{\n    floatx80 z;\n\n    z.low = LIT64( 0xC000000000000000 ) | ( a.high>>1 );\n    z.high = ( ( (bits16) a.sign )<<15 ) | 0x7FFF;\n    return z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Takes two extended double-precision floating-point values `a' and `b', one\n| of which is a NaN, and returns the appropriate NaN result.  If either `a' or\n| `b' is a signaling NaN, the invalid exception is raised.\n*----------------------------------------------------------------------------*/\n\nfloatx80 propagateFloatx80NaN( floatx80 a, floatx80 b )\n{\n    flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;\n\n    aIsNaN = floatx80_is_nan( a );\n    aIsSignalingNaN = floatx80_is_signaling_nan( a );\n    bIsNaN = floatx80_is_nan( b );\n    bIsSignalingNaN = floatx80_is_signaling_nan( b );\n    a.low |= LIT64( 0xC000000000000000 );\n    b.low |= LIT64( 0xC000000000000000 );\n    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );\n    if ( aIsNaN ) {\n        return ( aIsSignalingNaN & bIsNaN ) ? b : a;\n    }\n    else {\n        return b;\n    }\n\n}\n\n#define EXP_BIAS 0x3FFF\n\n/*----------------------------------------------------------------------------\n| Returns the fraction bits of the extended double-precision floating-point\n| value `a'.\n*----------------------------------------------------------------------------*/\n\nINLINE bits64 extractFloatx80Frac( floatx80 a )\n{\n\n    return a.low;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the exponent bits of the extended double-precision floating-point\n| value `a'.\n*----------------------------------------------------------------------------*/\n\nINLINE int32 extractFloatx80Exp( floatx80 a )\n{\n\n    return a.high & 0x7FFF;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the sign bit of the extended double-precision floating-point value\n| `a'.\n*----------------------------------------------------------------------------*/\n\nINLINE flag extractFloatx80Sign( floatx80 a )\n{\n\n    return a.high>>15;\n\n}\n\n#endif\n\n#ifdef FLOAT128\n\n/*----------------------------------------------------------------------------\n| The pattern for a default generated quadruple-precision NaN.  The `high' and\n| `low' values hold the most- and least-significant bits, respectively.\n*----------------------------------------------------------------------------*/\n#define float128_default_nan_high LIT64( 0xFFFFFFFFFFFFFFFF )\n#define float128_default_nan_low  LIT64( 0xFFFFFFFFFFFFFFFF )\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the quadruple-precision floating-point value `a' is a NaN;\n| otherwise returns 0.\n*----------------------------------------------------------------------------*/\n\nflag float128_is_nan( float128 a )\n{\n\n    return\n           ( LIT64( 0xFFFE000000000000 ) <= (bits64) ( a.high<<1 ) )\n        && ( a.low || ( a.high & LIT64( 0x0000FFFFFFFFFFFF ) ) );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the quadruple-precision floating-point value `a' is a\n| signaling NaN; otherwise returns 0.\n*----------------------------------------------------------------------------*/\n\nflag float128_is_signaling_nan( float128 a )\n{\n\n    return\n           ( ( ( a.high>>47 ) & 0xFFFF ) == 0xFFFE )\n        && ( a.low || ( a.high & LIT64( 0x00007FFFFFFFFFFF ) ) );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the quadruple-precision floating-point NaN\n| `a' to the canonical NaN format.  If `a' is a signaling NaN, the invalid\n| exception is raised.\n*----------------------------------------------------------------------------*/\n\nstatic commonNaNT float128ToCommonNaN( float128 a )\n{\n    commonNaNT z;\n\n    if ( float128_is_signaling_nan( a ) ) float_raise( float_flag_invalid );\n    z.sign = a.high>>63;\n    shortShift128Left( a.high, a.low, 16, &z.high, &z.low );\n    return z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the canonical NaN `a' to the quadruple-\n| precision floating-point format.\n*----------------------------------------------------------------------------*/\n\nstatic float128 commonNaNToFloat128( commonNaNT a )\n{\n    float128 z;\n\n    shift128Right( a.high, a.low, 16, &z.high, &z.low );\n    z.high |= ( ( (bits64) a.sign )<<63 ) | LIT64( 0x7FFF800000000000 );\n    return z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Takes two quadruple-precision floating-point values `a' and `b', one of\n| which is a NaN, and returns the appropriate NaN result.  If either `a' or\n| `b' is a signaling NaN, the invalid exception is raised.\n*----------------------------------------------------------------------------*/\n\nstatic float128 propagateFloat128NaN( float128 a, float128 b )\n{\n    flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN;\n\n    aIsNaN = float128_is_nan( a );\n    aIsSignalingNaN = float128_is_signaling_nan( a );\n    bIsNaN = float128_is_nan( b );\n    bIsSignalingNaN = float128_is_signaling_nan( b );\n    a.high |= LIT64( 0x0000800000000000 );\n    b.high |= LIT64( 0x0000800000000000 );\n    if ( aIsSignalingNaN | bIsSignalingNaN ) float_raise( float_flag_invalid );\n    if ( aIsNaN ) {\n        return ( aIsSignalingNaN & bIsNaN ) ? b : a;\n    }\n    else {\n        return b;\n    }\n\n}\n\n#endif\n\n"
  },
  {
    "path": "vm86/mame/lib/softfloat/softfloat.c",
    "content": "\n/*============================================================================\n\nThis C source file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic\nPackage, Release 2b.\n\nWritten by John R. Hauser.  This work was made possible in part by the\nInternational Computer Science Institute, located at Suite 600, 1947 Center\nStreet, Berkeley, California 94704.  Funding was partially provided by the\nNational Science Foundation under grant MIP-9311980.  The original version\nof this code was written as part of a project to build a fixed-point vector\nprocessor in collaboration with the University of California at Berkeley,\noverseen by Profs. Nelson Morgan and John Wawrzynek.  More information\nis available through the Web page `http://www.cs.berkeley.edu/~jhauser/\narithmetic/SoftFloat.html'.\n\nTHIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\nbeen made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\nRESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\nAND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\nCOSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\nEFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\nINSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\nOTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\n\nDerivative works are acceptable, even for commercial purposes, so long as\n(1) the source code for the derivative work includes prominent notice that\nthe work is derivative, and (2) the source code includes prominent notice with\nthese four paragraphs for those parts of this code that are retained.\n\n=============================================================================*/\n\n#include \"milieu.h\"\n#include \"softfloat.h\"\n\n/*----------------------------------------------------------------------------\n| Floating-point rounding mode, extended double-precision rounding precision,\n| and exception flags.\n*----------------------------------------------------------------------------*/\nint8 float_exception_flags = 0;\n#ifdef FLOATX80\nint8 floatx80_rounding_precision = 80;\n#endif\n\nint8 float_rounding_mode = float_round_nearest_even;\n\n/*----------------------------------------------------------------------------\n| Functions and definitions to determine:  (1) whether tininess for underflow\n| is detected before or after rounding by default, (2) what (if anything)\n| happens when exceptions are raised, (3) how signaling NaNs are distinguished\n| from quiet NaNs, (4) the default generated quiet NaNs, and (5) how NaNs\n| are propagated from function inputs to output.  These details are target-\n| specific.\n*----------------------------------------------------------------------------*/\n#include \"softfloat-specialize\"\n\n/*----------------------------------------------------------------------------\n| Takes a 64-bit fixed-point value `absZ' with binary point between bits 6\n| and 7, and returns the properly rounded 32-bit integer corresponding to the\n| input.  If `zSign' is 1, the input is negated before being converted to an\n| integer.  Bit 63 of `absZ' must be zero.  Ordinarily, the fixed-point input\n| is simply rounded to an integer, with the inexact exception raised if the\n| input cannot be represented exactly as an integer.  However, if the fixed-\n| point input is too large, the invalid exception is raised and the largest\n| positive or negative integer is returned.\n*----------------------------------------------------------------------------*/\n\nstatic int32 roundAndPackInt32( flag zSign, bits64 absZ )\n{\n\tint8 roundingMode;\n\tflag roundNearestEven;\n\tint8 roundIncrement, roundBits;\n\tint32 z;\n\n\troundingMode = float_rounding_mode;\n\troundNearestEven = ( roundingMode == float_round_nearest_even );\n\troundIncrement = 0x40;\n\tif ( ! roundNearestEven ) {\n\t\tif ( roundingMode == float_round_to_zero ) {\n\t\t\troundIncrement = 0;\n\t\t}\n\t\telse {\n\t\t\troundIncrement = 0x7F;\n\t\t\tif ( zSign ) {\n\t\t\t\tif ( roundingMode == float_round_up ) roundIncrement = 0;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif ( roundingMode == float_round_down ) roundIncrement = 0;\n\t\t\t}\n\t\t}\n\t}\n\troundBits = absZ & 0x7F;\n\tabsZ = ( absZ + roundIncrement )>>7;\n\tabsZ &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );\n\tz = absZ;\n\tif ( zSign ) z = - z;\n\tif ( ( absZ>>32 ) || ( z && ( ( z < 0 ) ^ zSign ) ) ) {\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn zSign ? (sbits32) 0x80000000 : 0x7FFFFFFF;\n\t}\n\tif ( roundBits ) float_exception_flags |= float_flag_inexact;\n\treturn z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Takes the 128-bit fixed-point value formed by concatenating `absZ0' and\n| `absZ1', with binary point between bits 63 and 64 (between the input words),\n| and returns the properly rounded 64-bit integer corresponding to the input.\n| If `zSign' is 1, the input is negated before being converted to an integer.\n| Ordinarily, the fixed-point input is simply rounded to an integer, with\n| the inexact exception raised if the input cannot be represented exactly as\n| an integer.  However, if the fixed-point input is too large, the invalid\n| exception is raised and the largest positive or negative integer is\n| returned.\n*----------------------------------------------------------------------------*/\n\nstatic int64 roundAndPackInt64( flag zSign, bits64 absZ0, bits64 absZ1 )\n{\n\tint8 roundingMode;\n\tflag roundNearestEven, increment;\n\tint64 z;\n\n\troundingMode = float_rounding_mode;\n\troundNearestEven = ( roundingMode == float_round_nearest_even );\n\tincrement = ( (sbits64) absZ1 < 0 );\n\tif ( ! roundNearestEven ) {\n\t\tif ( roundingMode == float_round_to_zero ) {\n\t\t\tincrement = 0;\n\t\t}\n\t\telse {\n\t\t\tif ( zSign ) {\n\t\t\t\tincrement = ( roundingMode == float_round_down ) && absZ1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tincrement = ( roundingMode == float_round_up ) && absZ1;\n\t\t\t}\n\t\t}\n\t}\n\tif ( increment ) {\n\t\t++absZ0;\n\t\tif ( absZ0 == 0 ) goto overflow;\n\t\tabsZ0 &= ~ ( ( (bits64) ( absZ1<<1 ) == 0 ) & roundNearestEven );\n\t}\n\tz = absZ0;\n\tif ( zSign ) z = - z;\n\tif ( z && ( ( z < 0 ) ^ zSign ) ) {\n\toverflow:\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn\n\t\t\t\tzSign ? (sbits64) LIT64( 0x8000000000000000 )\n\t\t\t: LIT64( 0x7FFFFFFFFFFFFFFF );\n\t}\n\tif ( absZ1 ) float_exception_flags |= float_flag_inexact;\n\treturn z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the fraction bits of the single-precision floating-point value `a'.\n*----------------------------------------------------------------------------*/\n\nINLINE bits32 extractFloat32Frac( float32 a )\n{\n\treturn a & 0x007FFFFF;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the exponent bits of the single-precision floating-point value `a'.\n*----------------------------------------------------------------------------*/\n\nINLINE int16 extractFloat32Exp( float32 a )\n{\n\treturn ( a>>23 ) & 0xFF;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the sign bit of the single-precision floating-point value `a'.\n*----------------------------------------------------------------------------*/\n\nINLINE flag extractFloat32Sign( float32 a )\n{\n\treturn a>>31;\n\n}\n\n/*----------------------------------------------------------------------------\n| Normalizes the subnormal single-precision floating-point value represented\n| by the denormalized significand `aSig'.  The normalized exponent and\n| significand are stored at the locations pointed to by `zExpPtr' and\n| `zSigPtr', respectively.\n*----------------------------------------------------------------------------*/\n\nstatic void\n\tnormalizeFloat32Subnormal( bits32 aSig, int16 *zExpPtr, bits32 *zSigPtr )\n{\n\tint8 shiftCount;\n\n\tshiftCount = countLeadingZeros32( aSig ) - 8;\n\t*zSigPtr = aSig<<shiftCount;\n\t*zExpPtr = 1 - shiftCount;\n\n}\n\n/*----------------------------------------------------------------------------\n| Packs the sign `zSign', exponent `zExp', and significand `zSig' into a\n| single-precision floating-point value, returning the result.  After being\n| shifted into the proper positions, the three fields are simply added\n| together to form the result.  This means that any integer portion of `zSig'\n| will be added into the exponent.  Since a properly normalized significand\n| will have an integer portion equal to 1, the `zExp' input should be 1 less\n| than the desired result exponent whenever `zSig' is a complete, normalized\n| significand.\n*----------------------------------------------------------------------------*/\n\nINLINE float32 packFloat32( flag zSign, int16 zExp, bits32 zSig )\n{\n\treturn ( ( (bits32) zSign )<<31 ) + ( ( (bits32) zExp )<<23 ) + zSig;\n\n}\n\n/*----------------------------------------------------------------------------\n| Takes an abstract floating-point value having sign `zSign', exponent `zExp',\n| and significand `zSig', and returns the proper single-precision floating-\n| point value corresponding to the abstract input.  Ordinarily, the abstract\n| value is simply rounded and packed into the single-precision format, with\n| the inexact exception raised if the abstract input cannot be represented\n| exactly.  However, if the abstract value is too large, the overflow and\n| inexact exceptions are raised and an infinity or maximal finite value is\n| returned.  If the abstract value is too small, the input value is rounded to\n| a subnormal number, and the underflow and inexact exceptions are raised if\n| the abstract input cannot be represented exactly as a subnormal single-\n| precision floating-point number.\n|     The input significand `zSig' has its binary point between bits 30\n| and 29, which is 7 bits to the left of the usual location.  This shifted\n| significand must be normalized or smaller.  If `zSig' is not normalized,\n| `zExp' must be 0; in that case, the result returned is a subnormal number,\n| and it must not require rounding.  In the usual case that `zSig' is\n| normalized, `zExp' must be 1 less than the ``true'' floating-point exponent.\n| The handling of underflow and overflow follows the IEC/IEEE Standard for\n| Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nstatic float32 roundAndPackFloat32( flag zSign, int16 zExp, bits32 zSig )\n{\n\tint8 roundingMode;\n\tflag roundNearestEven;\n\tint8 roundIncrement, roundBits;\n\tflag isTiny;\n\n\troundingMode = float_rounding_mode;\n\troundNearestEven = ( roundingMode == float_round_nearest_even );\n\troundIncrement = 0x40;\n\tif ( ! roundNearestEven ) {\n\t\tif ( roundingMode == float_round_to_zero ) {\n\t\t\troundIncrement = 0;\n\t\t}\n\t\telse {\n\t\t\troundIncrement = 0x7F;\n\t\t\tif ( zSign ) {\n\t\t\t\tif ( roundingMode == float_round_up ) roundIncrement = 0;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif ( roundingMode == float_round_down ) roundIncrement = 0;\n\t\t\t}\n\t\t}\n\t}\n\troundBits = zSig & 0x7F;\n\tif ( 0xFD <= (bits16) zExp ) {\n\t\tif (    ( 0xFD < zExp )\n\t\t\t\t|| (    ( zExp == 0xFD )\n\t\t\t\t\t&& ( (sbits32) ( zSig + roundIncrement ) < 0 ) )\n\t\t\t) {\n\t\t\tfloat_raise( float_flag_overflow | float_flag_inexact );\n\t\t\treturn packFloat32( zSign, 0xFF, 0 ) - ( roundIncrement == 0 );\n\t\t}\n\t\tif ( zExp < 0 ) {\n\t\t\tisTiny =\n\t\t\t\t\t( float_detect_tininess == float_tininess_before_rounding )\n\t\t\t\t|| ( zExp < -1 )\n\t\t\t\t|| ( zSig + roundIncrement < 0x80000000 );\n\t\t\tshift32RightJamming( zSig, - zExp, &zSig );\n\t\t\tzExp = 0;\n\t\t\troundBits = zSig & 0x7F;\n\t\t\tif ( isTiny && roundBits ) float_raise( float_flag_underflow );\n\t\t}\n\t}\n\tif ( roundBits ) float_exception_flags |= float_flag_inexact;\n\tzSig = ( zSig + roundIncrement )>>7;\n\tzSig &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );\n\tif ( zSig == 0 ) zExp = 0;\n\treturn packFloat32( zSign, zExp, zSig );\n\n}\n\n/*----------------------------------------------------------------------------\n| Takes an abstract floating-point value having sign `zSign', exponent `zExp',\n| and significand `zSig', and returns the proper single-precision floating-\n| point value corresponding to the abstract input.  This routine is just like\n| `roundAndPackFloat32' except that `zSig' does not have to be normalized.\n| Bit 31 of `zSig' must be zero, and `zExp' must be 1 less than the ``true''\n| floating-point exponent.\n*----------------------------------------------------------------------------*/\n\nstatic float32\n\tnormalizeRoundAndPackFloat32( flag zSign, int16 zExp, bits32 zSig )\n{\n\tint8 shiftCount;\n\n\tshiftCount = countLeadingZeros32( zSig ) - 1;\n\treturn roundAndPackFloat32( zSign, zExp - shiftCount, zSig<<shiftCount );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the fraction bits of the double-precision floating-point value `a'.\n*----------------------------------------------------------------------------*/\n\nINLINE bits64 extractFloat64Frac( float64 a )\n{\n\treturn a & LIT64( 0x000FFFFFFFFFFFFF );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the exponent bits of the double-precision floating-point value `a'.\n*----------------------------------------------------------------------------*/\n\nINLINE int16 extractFloat64Exp( float64 a )\n{\n\treturn ( a>>52 ) & 0x7FF;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the sign bit of the double-precision floating-point value `a'.\n*----------------------------------------------------------------------------*/\n\nINLINE flag extractFloat64Sign( float64 a )\n{\n\treturn a>>63;\n\n}\n\n/*----------------------------------------------------------------------------\n| Normalizes the subnormal double-precision floating-point value represented\n| by the denormalized significand `aSig'.  The normalized exponent and\n| significand are stored at the locations pointed to by `zExpPtr' and\n| `zSigPtr', respectively.\n*----------------------------------------------------------------------------*/\n\nstatic void\n\tnormalizeFloat64Subnormal( bits64 aSig, int16 *zExpPtr, bits64 *zSigPtr )\n{\n\tint8 shiftCount;\n\n\tshiftCount = countLeadingZeros64( aSig ) - 11;\n\t*zSigPtr = aSig<<shiftCount;\n\t*zExpPtr = 1 - shiftCount;\n\n}\n\n/*----------------------------------------------------------------------------\n| Packs the sign `zSign', exponent `zExp', and significand `zSig' into a\n| double-precision floating-point value, returning the result.  After being\n| shifted into the proper positions, the three fields are simply added\n| together to form the result.  This means that any integer portion of `zSig'\n| will be added into the exponent.  Since a properly normalized significand\n| will have an integer portion equal to 1, the `zExp' input should be 1 less\n| than the desired result exponent whenever `zSig' is a complete, normalized\n| significand.\n*----------------------------------------------------------------------------*/\n\nINLINE float64 packFloat64( flag zSign, int16 zExp, bits64 zSig )\n{\n\treturn ( ( (bits64) zSign )<<63 ) + ( ( (bits64) zExp )<<52 ) + zSig;\n\n}\n\n/*----------------------------------------------------------------------------\n| Takes an abstract floating-point value having sign `zSign', exponent `zExp',\n| and significand `zSig', and returns the proper double-precision floating-\n| point value corresponding to the abstract input.  Ordinarily, the abstract\n| value is simply rounded and packed into the double-precision format, with\n| the inexact exception raised if the abstract input cannot be represented\n| exactly.  However, if the abstract value is too large, the overflow and\n| inexact exceptions are raised and an infinity or maximal finite value is\n| returned.  If the abstract value is too small, the input value is rounded\n| to a subnormal number, and the underflow and inexact exceptions are raised\n| if the abstract input cannot be represented exactly as a subnormal double-\n| precision floating-point number.\n|     The input significand `zSig' has its binary point between bits 62\n| and 61, which is 10 bits to the left of the usual location.  This shifted\n| significand must be normalized or smaller.  If `zSig' is not normalized,\n| `zExp' must be 0; in that case, the result returned is a subnormal number,\n| and it must not require rounding.  In the usual case that `zSig' is\n| normalized, `zExp' must be 1 less than the ``true'' floating-point exponent.\n| The handling of underflow and overflow follows the IEC/IEEE Standard for\n| Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nstatic float64 roundAndPackFloat64( flag zSign, int16 zExp, bits64 zSig )\n{\n\tint8 roundingMode;\n\tflag roundNearestEven;\n\tint16 roundIncrement, roundBits;\n\tflag isTiny;\n\n\troundingMode = float_rounding_mode;\n\troundNearestEven = ( roundingMode == float_round_nearest_even );\n\troundIncrement = 0x200;\n\tif ( ! roundNearestEven ) {\n\t\tif ( roundingMode == float_round_to_zero ) {\n\t\t\troundIncrement = 0;\n\t\t}\n\t\telse {\n\t\t\troundIncrement = 0x3FF;\n\t\t\tif ( zSign ) {\n\t\t\t\tif ( roundingMode == float_round_up ) roundIncrement = 0;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif ( roundingMode == float_round_down ) roundIncrement = 0;\n\t\t\t}\n\t\t}\n\t}\n\troundBits = zSig & 0x3FF;\n\tif ( 0x7FD <= (bits16) zExp ) {\n\t\tif (    ( 0x7FD < zExp )\n\t\t\t\t|| (    ( zExp == 0x7FD )\n\t\t\t\t\t&& ( (sbits64) ( zSig + roundIncrement ) < 0 ) )\n\t\t\t) {\n\t\t\tfloat_raise( float_flag_overflow | float_flag_inexact );\n\t\t\treturn packFloat64( zSign, 0x7FF, 0 ) - ( roundIncrement == 0 );\n\t\t}\n\t\tif ( zExp < 0 ) {\n\t\t\tisTiny =\n\t\t\t\t\t( float_detect_tininess == float_tininess_before_rounding )\n\t\t\t\t|| ( zExp < -1 )\n\t\t\t\t|| ( zSig + roundIncrement < LIT64( 0x8000000000000000 ) );\n\t\t\tshift64RightJamming( zSig, - zExp, &zSig );\n\t\t\tzExp = 0;\n\t\t\troundBits = zSig & 0x3FF;\n\t\t\tif ( isTiny && roundBits ) float_raise( float_flag_underflow );\n\t\t}\n\t}\n\tif ( roundBits ) float_exception_flags |= float_flag_inexact;\n\tzSig = ( zSig + roundIncrement )>>10;\n\tzSig &= ~ ( ( ( roundBits ^ 0x200 ) == 0 ) & roundNearestEven );\n\tif ( zSig == 0 ) zExp = 0;\n\treturn packFloat64( zSign, zExp, zSig );\n\n}\n\n/*----------------------------------------------------------------------------\n| Takes an abstract floating-point value having sign `zSign', exponent `zExp',\n| and significand `zSig', and returns the proper double-precision floating-\n| point value corresponding to the abstract input.  This routine is just like\n| `roundAndPackFloat64' except that `zSig' does not have to be normalized.\n| Bit 63 of `zSig' must be zero, and `zExp' must be 1 less than the ``true''\n| floating-point exponent.\n*----------------------------------------------------------------------------*/\n\nstatic float64\n\tnormalizeRoundAndPackFloat64( flag zSign, int16 zExp, bits64 zSig )\n{\n\tint8 shiftCount;\n\n\tshiftCount = countLeadingZeros64( zSig ) - 1;\n\treturn roundAndPackFloat64( zSign, zExp - shiftCount, zSig<<shiftCount );\n\n}\n\n#ifdef FLOATX80\n\n/*----------------------------------------------------------------------------\n| Normalizes the subnormal extended double-precision floating-point value\n| represented by the denormalized significand `aSig'.  The normalized exponent\n| and significand are stored at the locations pointed to by `zExpPtr' and\n| `zSigPtr', respectively.\n*----------------------------------------------------------------------------*/\n\nstatic void\n\tnormalizeFloatx80Subnormal( bits64 aSig, int32 *zExpPtr, bits64 *zSigPtr )\n{\n\tint8 shiftCount;\n\n\tshiftCount = countLeadingZeros64( aSig );\n\t*zSigPtr = aSig<<shiftCount;\n\t*zExpPtr = 1 - shiftCount;\n\n}\n\n/*----------------------------------------------------------------------------\n| Takes an abstract floating-point value having sign `zSign', exponent `zExp',\n| and extended significand formed by the concatenation of `zSig0' and `zSig1',\n| and returns the proper extended double-precision floating-point value\n| corresponding to the abstract input.  Ordinarily, the abstract value is\n| rounded and packed into the extended double-precision format, with the\n| inexact exception raised if the abstract input cannot be represented\n| exactly.  However, if the abstract value is too large, the overflow and\n| inexact exceptions are raised and an infinity or maximal finite value is\n| returned.  If the abstract value is too small, the input value is rounded to\n| a subnormal number, and the underflow and inexact exceptions are raised if\n| the abstract input cannot be represented exactly as a subnormal extended\n| double-precision floating-point number.\n|     If `roundingPrecision' is 32 or 64, the result is rounded to the same\n| number of bits as single or double precision, respectively.  Otherwise, the\n| result is rounded to the full precision of the extended double-precision\n| format.\n|     The input significand must be normalized or smaller.  If the input\n| significand is not normalized, `zExp' must be 0; in that case, the result\n| returned is a subnormal number, and it must not require rounding.  The\n| handling of underflow and overflow follows the IEC/IEEE Standard for Binary\n| Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\n// roundAndPackFloatx80 is now also used in fyl2x.c\n\n/* static */ floatx80\n\troundAndPackFloatx80(\n\t\tint8 roundingPrecision, flag zSign, int32 zExp, bits64 zSig0, bits64 zSig1\n\t)\n{\n\tint8 roundingMode;\n\tflag roundNearestEven, increment, isTiny;\n\tint64 roundIncrement, roundMask, roundBits;\n\n\troundingMode = float_rounding_mode;\n\troundNearestEven = ( roundingMode == float_round_nearest_even );\n\tif ( roundingPrecision == 80 ) goto precision80;\n\tif ( roundingPrecision == 64 ) {\n\t\troundIncrement = LIT64( 0x0000000000000400 );\n\t\troundMask = LIT64( 0x00000000000007FF );\n\t}\n\telse if ( roundingPrecision == 32 ) {\n\t\troundIncrement = LIT64( 0x0000008000000000 );\n\t\troundMask = LIT64( 0x000000FFFFFFFFFF );\n\t}\n\telse {\n\t\tgoto precision80;\n\t}\n\tzSig0 |= ( zSig1 != 0 );\n\tif ( ! roundNearestEven ) {\n\t\tif ( roundingMode == float_round_to_zero ) {\n\t\t\troundIncrement = 0;\n\t\t}\n\t\telse {\n\t\t\troundIncrement = roundMask;\n\t\t\tif ( zSign ) {\n\t\t\t\tif ( roundingMode == float_round_up ) roundIncrement = 0;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif ( roundingMode == float_round_down ) roundIncrement = 0;\n\t\t\t}\n\t\t}\n\t}\n\troundBits = zSig0 & roundMask;\n\tif ( 0x7FFD <= (bits32) ( zExp - 1 ) ) {\n\t\tif (    ( 0x7FFE < zExp )\n\t\t\t\t|| ( ( zExp == 0x7FFE ) && ( zSig0 + roundIncrement < zSig0 ) )\n\t\t\t) {\n\t\t\tgoto overflow;\n\t\t}\n\t\tif ( zExp <= 0 ) {\n\t\t\tisTiny =\n\t\t\t\t\t( float_detect_tininess == float_tininess_before_rounding )\n\t\t\t\t|| ( zExp < 0 )\n\t\t\t\t|| ( zSig0 <= zSig0 + roundIncrement );\n\t\t\tshift64RightJamming( zSig0, 1 - zExp, &zSig0 );\n\t\t\tzExp = 0;\n\t\t\troundBits = zSig0 & roundMask;\n\t\t\tif ( isTiny && roundBits ) float_raise( float_flag_underflow );\n\t\t\tif ( roundBits ) float_exception_flags |= float_flag_inexact;\n\t\t\tzSig0 += roundIncrement;\n\t\t\tif ( (sbits64) zSig0 < 0 ) zExp = 1;\n\t\t\troundIncrement = roundMask + 1;\n\t\t\tif ( roundNearestEven && ( roundBits<<1 == roundIncrement ) ) {\n\t\t\t\troundMask |= roundIncrement;\n\t\t\t}\n\t\t\tzSig0 &= ~ roundMask;\n\t\t\treturn packFloatx80( zSign, zExp, zSig0 );\n\t\t}\n\t}\n\tif ( roundBits ) float_exception_flags |= float_flag_inexact;\n\tzSig0 += roundIncrement;\n\tif ( zSig0 < roundIncrement ) {\n\t\t++zExp;\n\t\tzSig0 = LIT64( 0x8000000000000000 );\n\t}\n\troundIncrement = roundMask + 1;\n\tif ( roundNearestEven && ( roundBits<<1 == roundIncrement ) ) {\n\t\troundMask |= roundIncrement;\n\t}\n\tzSig0 &= ~ roundMask;\n\tif ( zSig0 == 0 ) zExp = 0;\n\treturn packFloatx80( zSign, zExp, zSig0 );\n\tprecision80:\n\tincrement = ( (sbits64) zSig1 < 0 );\n\tif ( ! roundNearestEven ) {\n\t\tif ( roundingMode == float_round_to_zero ) {\n\t\t\tincrement = 0;\n\t\t}\n\t\telse {\n\t\t\tif ( zSign ) {\n\t\t\t\tincrement = ( roundingMode == float_round_down ) && zSig1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tincrement = ( roundingMode == float_round_up ) && zSig1;\n\t\t\t}\n\t\t}\n\t}\n\tif ( 0x7FFD <= (bits32) ( zExp - 1 ) ) {\n\t\tif (    ( 0x7FFE < zExp )\n\t\t\t\t|| (    ( zExp == 0x7FFE )\n\t\t\t\t\t&& ( zSig0 == LIT64( 0xFFFFFFFFFFFFFFFF ) )\n\t\t\t\t\t&& increment\n\t\t\t\t)\n\t\t\t) {\n\t\t\troundMask = 0;\n\toverflow:\n\t\t\tfloat_raise( float_flag_overflow | float_flag_inexact );\n\t\t\tif (    ( roundingMode == float_round_to_zero )\n\t\t\t\t\t|| ( zSign && ( roundingMode == float_round_up ) )\n\t\t\t\t\t|| ( ! zSign && ( roundingMode == float_round_down ) )\n\t\t\t\t) {\n\t\t\t\treturn packFloatx80( zSign, 0x7FFE, ~ roundMask );\n\t\t\t}\n\t\t\treturn packFloatx80( zSign, 0x7FFF, LIT64( 0x8000000000000000 ) );\n\t\t}\n\t\tif ( zExp <= 0 ) {\n\t\t\tisTiny =\n\t\t\t\t\t( float_detect_tininess == float_tininess_before_rounding )\n\t\t\t\t|| ( zExp < 0 )\n\t\t\t\t|| ! increment\n\t\t\t\t|| ( zSig0 < LIT64( 0xFFFFFFFFFFFFFFFF ) );\n\t\t\tshift64ExtraRightJamming( zSig0, zSig1, 1 - zExp, &zSig0, &zSig1 );\n\t\t\tzExp = 0;\n\t\t\tif ( isTiny && zSig1 ) float_raise( float_flag_underflow );\n\t\t\tif ( zSig1 ) float_exception_flags |= float_flag_inexact;\n\t\t\tif ( roundNearestEven ) {\n\t\t\t\tincrement = ( (sbits64) zSig1 < 0 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif ( zSign ) {\n\t\t\t\t\tincrement = ( roundingMode == float_round_down ) && zSig1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tincrement = ( roundingMode == float_round_up ) && zSig1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( increment ) {\n\t\t\t\t++zSig0;\n\t\t\t\tzSig0 &=\n\t\t\t\t\t~ ( ( (bits64) ( zSig1<<1 ) == 0 ) & roundNearestEven );\n\t\t\t\tif ( (sbits64) zSig0 < 0 ) zExp = 1;\n\t\t\t}\n\t\t\treturn packFloatx80( zSign, zExp, zSig0 );\n\t\t}\n\t}\n\tif ( zSig1 ) float_exception_flags |= float_flag_inexact;\n\tif ( increment ) {\n\t\t++zSig0;\n\t\tif ( zSig0 == 0 ) {\n\t\t\t++zExp;\n\t\t\tzSig0 = LIT64( 0x8000000000000000 );\n\t\t}\n\t\telse {\n\t\t\tzSig0 &= ~ ( ( (bits64) ( zSig1<<1 ) == 0 ) & roundNearestEven );\n\t\t}\n\t}\n\telse {\n\t\tif ( zSig0 == 0 ) zExp = 0;\n\t}\n\treturn packFloatx80( zSign, zExp, zSig0 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Takes an abstract floating-point value having sign `zSign', exponent\n| `zExp', and significand formed by the concatenation of `zSig0' and `zSig1',\n| and returns the proper extended double-precision floating-point value\n| corresponding to the abstract input.  This routine is just like\n| `roundAndPackFloatx80' except that the input significand does not have to be\n| normalized.\n*----------------------------------------------------------------------------*/\n\nstatic floatx80\n\tnormalizeRoundAndPackFloatx80(\n\t\tint8 roundingPrecision, flag zSign, int32 zExp, bits64 zSig0, bits64 zSig1\n\t)\n{\n\tint8 shiftCount;\n\n\tif ( zSig0 == 0 ) {\n\t\tzSig0 = zSig1;\n\t\tzSig1 = 0;\n\t\tzExp -= 64;\n\t}\n\tshiftCount = countLeadingZeros64( zSig0 );\n\tshortShift128Left( zSig0, zSig1, shiftCount, &zSig0, &zSig1 );\n\tzExp -= shiftCount;\n\treturn\n\t\troundAndPackFloatx80( roundingPrecision, zSign, zExp, zSig0, zSig1 );\n\n}\n\n#endif\n\n#ifdef FLOAT128\n\n/*----------------------------------------------------------------------------\n| Returns the least-significant 64 fraction bits of the quadruple-precision\n| floating-point value `a'.\n*----------------------------------------------------------------------------*/\n\nINLINE bits64 extractFloat128Frac1( float128 a )\n{\n\treturn a.low;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the most-significant 48 fraction bits of the quadruple-precision\n| floating-point value `a'.\n*----------------------------------------------------------------------------*/\n\nINLINE bits64 extractFloat128Frac0( float128 a )\n{\n\treturn a.high & LIT64( 0x0000FFFFFFFFFFFF );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the exponent bits of the quadruple-precision floating-point value\n| `a'.\n*----------------------------------------------------------------------------*/\n\nINLINE int32 extractFloat128Exp( float128 a )\n{\n\treturn ( a.high>>48 ) & 0x7FFF;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the sign bit of the quadruple-precision floating-point value `a'.\n*----------------------------------------------------------------------------*/\n\nINLINE flag extractFloat128Sign( float128 a )\n{\n\treturn a.high>>63;\n\n}\n\n/*----------------------------------------------------------------------------\n| Normalizes the subnormal quadruple-precision floating-point value\n| represented by the denormalized significand formed by the concatenation of\n| `aSig0' and `aSig1'.  The normalized exponent is stored at the location\n| pointed to by `zExpPtr'.  The most significant 49 bits of the normalized\n| significand are stored at the location pointed to by `zSig0Ptr', and the\n| least significant 64 bits of the normalized significand are stored at the\n| location pointed to by `zSig1Ptr'.\n*----------------------------------------------------------------------------*/\n\nstatic void\n\tnormalizeFloat128Subnormal(\n\t\tbits64 aSig0,\n\t\tbits64 aSig1,\n\t\tint32 *zExpPtr,\n\t\tbits64 *zSig0Ptr,\n\t\tbits64 *zSig1Ptr\n\t)\n{\n\tint8 shiftCount;\n\n\tif ( aSig0 == 0 ) {\n\t\tshiftCount = countLeadingZeros64( aSig1 ) - 15;\n\t\tif ( shiftCount < 0 ) {\n\t\t\t*zSig0Ptr = aSig1>>( - shiftCount );\n\t\t\t*zSig1Ptr = aSig1<<( shiftCount & 63 );\n\t\t}\n\t\telse {\n\t\t\t*zSig0Ptr = aSig1<<shiftCount;\n\t\t\t*zSig1Ptr = 0;\n\t\t}\n\t\t*zExpPtr = - shiftCount - 63;\n\t}\n\telse {\n\t\tshiftCount = countLeadingZeros64( aSig0 ) - 15;\n\t\tshortShift128Left( aSig0, aSig1, shiftCount, zSig0Ptr, zSig1Ptr );\n\t\t*zExpPtr = 1 - shiftCount;\n\t}\n\n}\n\n#endif\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the 32-bit two's complement integer `a'\n| to the single-precision floating-point format.  The conversion is performed\n| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat32 int32_to_float32( int32 a )\n{\n\tflag zSign;\n\n\tif ( a == 0 ) return 0;\n\tif ( a == (sbits32) 0x80000000 ) return packFloat32( 1, 0x9E, 0 );\n\tzSign = ( a < 0 );\n\treturn normalizeRoundAndPackFloat32( zSign, 0x9C, zSign ? - a : a );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the 32-bit two's complement integer `a'\n| to the double-precision floating-point format.  The conversion is performed\n| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat64 int32_to_float64( int32 a )\n{\n\tflag zSign;\n\tuint32 absA;\n\tint8 shiftCount;\n\tbits64 zSig;\n\n\tif ( a == 0 ) return 0;\n\tif ( a == (sbits32) 0x80000000 ) return packFloat64( 1, 0x41E, 0 );\n\tzSign = ( a < 0 );\n\tabsA = zSign ? - a : a;\n\tshiftCount = countLeadingZeros32( absA ) + 21;\n\tzSig = absA;\n\treturn packFloat64( zSign, 0x432 - shiftCount, zSig<<shiftCount );\n\n}\n\n#ifdef FLOATX80\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the 32-bit two's complement integer `a'\n| to the extended double-precision floating-point format.  The conversion\n| is performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloatx80 int32_to_floatx80( int32 a )\n{\n\tflag zSign;\n\tuint32 absA;\n\tint8 shiftCount;\n\tbits64 zSig;\n\n\tif ( a == 0 ) return packFloatx80( 0, 0, 0 );\n\tif ( a == (sbits32) 0x80000000 ) return packFloatx80( 1, 0x401E, 0 );\n\tzSign = ( a < 0 );\n\tabsA = zSign ? - a : a;\n\tshiftCount = countLeadingZeros32( absA ) + 32;\n\tzSig = absA;\n\treturn packFloatx80( zSign, 0x403E - shiftCount, zSig<<shiftCount );\n\n}\n\n#endif\n\n#ifdef FLOAT128\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the 32-bit two's complement integer `a' to\n| the quadruple-precision floating-point format.  The conversion is performed\n| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat128 int32_to_float128( int32 a )\n{\n\tflag zSign;\n\tuint32 absA;\n\tint8 shiftCount;\n\tbits64 zSig0;\n\n\tif ( a == 0 ) return packFloat128( 0, 0, 0, 0 );\n\tzSign = ( a < 0 );\n\tabsA = zSign ? - a : a;\n\tshiftCount = countLeadingZeros32( absA ) + 17;\n\tzSig0 = absA;\n\treturn packFloat128( zSign, 0x402E - shiftCount, zSig0<<shiftCount, 0 );\n\n}\n\n#endif\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the 64-bit two's complement integer `a'\n| to the single-precision floating-point format.  The conversion is performed\n| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat32 int64_to_float32( int64 a )\n{\n\tflag zSign;\n\tuint64 absA;\n\tint8 shiftCount;\n//    bits32 zSig;\n\n\tif ( a == 0 ) return 0;\n\tzSign = ( a < 0 );\n\tabsA = zSign ? - a : a;\n\tshiftCount = countLeadingZeros64( absA ) - 40;\n\tif ( 0 <= shiftCount ) {\n\t\treturn packFloat32( zSign, 0x95 - shiftCount, absA<<shiftCount );\n\t}\n\telse {\n\t\tshiftCount += 7;\n\t\tif ( shiftCount < 0 ) {\n\t\t\tshift64RightJamming( absA, - shiftCount, &absA );\n\t\t}\n\t\telse {\n\t\t\tabsA <<= shiftCount;\n\t\t}\n\t\treturn roundAndPackFloat32( zSign, 0x9C - shiftCount, absA );\n\t}\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the 64-bit two's complement integer `a'\n| to the double-precision floating-point format.  The conversion is performed\n| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat64 int64_to_float64( int64 a )\n{\n\tflag zSign;\n\n\tif ( a == 0 ) return 0;\n\tif ( a == (sbits64) LIT64( 0x8000000000000000 ) ) {\n\t\treturn packFloat64( 1, 0x43E, 0 );\n\t}\n\tzSign = ( a < 0 );\n\treturn normalizeRoundAndPackFloat64( zSign, 0x43C, zSign ? - a : a );\n\n}\n\n#ifdef FLOATX80\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the 64-bit two's complement integer `a'\n| to the extended double-precision floating-point format.  The conversion\n| is performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloatx80 int64_to_floatx80( int64 a )\n{\n\tflag zSign;\n\tuint64 absA;\n\tint8 shiftCount;\n\n\tif ( a == 0 ) return packFloatx80( 0, 0, 0 );\n\tif ( a == (sbits64) LIT64( 0x8000000000000000 ) ) {\n\t\treturn packFloatx80( 1, 0x403E, 0x8000000000000000 );\n\t}\n\tzSign = ( a < 0 );\n\tabsA = zSign ? - a : a;\n\tshiftCount = countLeadingZeros64( absA );\n\treturn packFloatx80( zSign, 0x403E - shiftCount, absA<<shiftCount );\n\n}\n\n#endif\n\n#ifdef FLOAT128\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the 64-bit two's complement integer `a' to\n| the quadruple-precision floating-point format.  The conversion is performed\n| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat128 int64_to_float128( int64 a )\n{\n\tflag zSign;\n\tuint64 absA;\n\tint8 shiftCount;\n\tint32 zExp;\n\tbits64 zSig0, zSig1;\n\n\tif ( a == 0 ) return packFloat128( 0, 0, 0, 0 );\n\tzSign = ( a < 0 );\n\tabsA = zSign ? - a : a;\n\tshiftCount = countLeadingZeros64( absA ) + 49;\n\tzExp = 0x406E - shiftCount;\n\tif ( 64 <= shiftCount ) {\n\t\tzSig1 = 0;\n\t\tzSig0 = absA;\n\t\tshiftCount -= 64;\n\t}\n\telse {\n\t\tzSig1 = absA;\n\t\tzSig0 = 0;\n\t}\n\tshortShift128Left( zSig0, zSig1, shiftCount, &zSig0, &zSig1 );\n\treturn packFloat128( zSign, zExp, zSig0, zSig1 );\n\n}\n\n#endif\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the single-precision floating-point value\n| `a' to the 32-bit two's complement integer format.  The conversion is\n| performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic---which means in particular that the conversion is rounded\n| according to the current rounding mode.  If `a' is a NaN, the largest\n| positive integer is returned.  Otherwise, if the conversion overflows, the\n| largest integer with the same sign as `a' is returned.\n*----------------------------------------------------------------------------*/\n\nint32 float32_to_int32( float32 a )\n{\n\tflag aSign;\n\tint16 aExp, shiftCount;\n\tbits32 aSig;\n\tbits64 aSig64;\n\n\taSig = extractFloat32Frac( a );\n\taExp = extractFloat32Exp( a );\n\taSign = extractFloat32Sign( a );\n\tif ( ( aExp == 0xFF ) && aSig ) aSign = 0;\n\tif ( aExp ) aSig |= 0x00800000;\n\tshiftCount = 0xAF - aExp;\n\taSig64 = aSig;\n\taSig64 <<= 32;\n\tif ( 0 < shiftCount ) shift64RightJamming( aSig64, shiftCount, &aSig64 );\n\treturn roundAndPackInt32( aSign, aSig64 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the single-precision floating-point value\n| `a' to the 32-bit two's complement integer format.  The conversion is\n| performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic, except that the conversion is always rounded toward zero.\n| If `a' is a NaN, the largest positive integer is returned.  Otherwise, if\n| the conversion overflows, the largest integer with the same sign as `a' is\n| returned.\n*----------------------------------------------------------------------------*/\n\nint32 float32_to_int32_round_to_zero( float32 a )\n{\n\tflag aSign;\n\tint16 aExp, shiftCount;\n\tbits32 aSig;\n\tint32 z;\n\n\taSig = extractFloat32Frac( a );\n\taExp = extractFloat32Exp( a );\n\taSign = extractFloat32Sign( a );\n\tshiftCount = aExp - 0x9E;\n\tif ( 0 <= shiftCount ) {\n\t\tif ( a != 0xCF000000 ) {\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t\tif ( ! aSign || ( ( aExp == 0xFF ) && aSig ) ) return 0x7FFFFFFF;\n\t\t}\n\t\treturn (sbits32) 0x80000000;\n\t}\n\telse if ( aExp <= 0x7E ) {\n\t\tif ( aExp | aSig ) float_exception_flags |= float_flag_inexact;\n\t\treturn 0;\n\t}\n\taSig = ( aSig | 0x00800000 )<<8;\n\tz = aSig>>( - shiftCount );\n\tif ( (bits32) ( aSig<<( shiftCount & 31 ) ) ) {\n\t\tfloat_exception_flags |= float_flag_inexact;\n\t}\n\tif ( aSign ) z = - z;\n\treturn z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the single-precision floating-point value\n| `a' to the 64-bit two's complement integer format.  The conversion is\n| performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic---which means in particular that the conversion is rounded\n| according to the current rounding mode.  If `a' is a NaN, the largest\n| positive integer is returned.  Otherwise, if the conversion overflows, the\n| largest integer with the same sign as `a' is returned.\n*----------------------------------------------------------------------------*/\n\nint64 float32_to_int64( float32 a )\n{\n\tflag aSign;\n\tint16 aExp, shiftCount;\n\tbits32 aSig;\n\tbits64 aSig64, aSigExtra;\n\n\taSig = extractFloat32Frac( a );\n\taExp = extractFloat32Exp( a );\n\taSign = extractFloat32Sign( a );\n\tshiftCount = 0xBE - aExp;\n\tif ( shiftCount < 0 ) {\n\t\tfloat_raise( float_flag_invalid );\n\t\tif ( ! aSign || ( ( aExp == 0xFF ) && aSig ) ) {\n\t\t\treturn LIT64( 0x7FFFFFFFFFFFFFFF );\n\t\t}\n\t\treturn (sbits64) LIT64( 0x8000000000000000 );\n\t}\n\tif ( aExp ) aSig |= 0x00800000;\n\taSig64 = aSig;\n\taSig64 <<= 40;\n\tshift64ExtraRightJamming( aSig64, 0, shiftCount, &aSig64, &aSigExtra );\n\treturn roundAndPackInt64( aSign, aSig64, aSigExtra );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the single-precision floating-point value\n| `a' to the 64-bit two's complement integer format.  The conversion is\n| performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic, except that the conversion is always rounded toward zero.  If\n| `a' is a NaN, the largest positive integer is returned.  Otherwise, if the\n| conversion overflows, the largest integer with the same sign as `a' is\n| returned.\n*----------------------------------------------------------------------------*/\n\nint64 float32_to_int64_round_to_zero( float32 a )\n{\n\tflag aSign;\n\tint16 aExp, shiftCount;\n\tbits32 aSig;\n\tbits64 aSig64;\n\tint64 z;\n\n\taSig = extractFloat32Frac( a );\n\taExp = extractFloat32Exp( a );\n\taSign = extractFloat32Sign( a );\n\tshiftCount = aExp - 0xBE;\n\tif ( 0 <= shiftCount ) {\n\t\tif ( a != 0xDF000000 ) {\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t\tif ( ! aSign || ( ( aExp == 0xFF ) && aSig ) ) {\n\t\t\t\treturn LIT64( 0x7FFFFFFFFFFFFFFF );\n\t\t\t}\n\t\t}\n\t\treturn (sbits64) LIT64( 0x8000000000000000 );\n\t}\n\telse if ( aExp <= 0x7E ) {\n\t\tif ( aExp | aSig ) float_exception_flags |= float_flag_inexact;\n\t\treturn 0;\n\t}\n\taSig64 = aSig | 0x00800000;\n\taSig64 <<= 40;\n\tz = aSig64>>( - shiftCount );\n\tif ( (bits64) ( aSig64<<( shiftCount & 63 ) ) ) {\n\t\tfloat_exception_flags |= float_flag_inexact;\n\t}\n\tif ( aSign ) z = - z;\n\treturn z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the single-precision floating-point value\n| `a' to the double-precision floating-point format.  The conversion is\n| performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat64 float32_to_float64( float32 a )\n{\n\tflag aSign;\n\tint16 aExp;\n\tbits32 aSig;\n\n\taSig = extractFloat32Frac( a );\n\taExp = extractFloat32Exp( a );\n\taSign = extractFloat32Sign( a );\n\tif ( aExp == 0xFF ) {\n\t\tif ( aSig ) return commonNaNToFloat64( float32ToCommonNaN( a ) );\n\t\treturn packFloat64( aSign, 0x7FF, 0 );\n\t}\n\tif ( aExp == 0 ) {\n\t\tif ( aSig == 0 ) return packFloat64( aSign, 0, 0 );\n\t\tnormalizeFloat32Subnormal( aSig, &aExp, &aSig );\n\t\t--aExp;\n\t}\n\treturn packFloat64( aSign, aExp + 0x380, ( (bits64) aSig )<<29 );\n\n}\n\n#ifdef FLOATX80\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the single-precision floating-point value\n| `a' to the extended double-precision floating-point format.  The conversion\n| is performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloatx80 float32_to_floatx80( float32 a )\n{\n\tflag aSign;\n\tint16 aExp;\n\tbits32 aSig;\n\n\taSig = extractFloat32Frac( a );\n\taExp = extractFloat32Exp( a );\n\taSign = extractFloat32Sign( a );\n\tif ( aExp == 0xFF ) {\n\t\tif ( aSig ) return commonNaNToFloatx80( float32ToCommonNaN( a ) );\n\t\treturn packFloatx80( aSign, 0x7FFF, LIT64( 0x8000000000000000 ) );\n\t}\n\tif ( aExp == 0 ) {\n\t\tif ( aSig == 0 ) return packFloatx80( aSign, 0, 0 );\n\t\tnormalizeFloat32Subnormal( aSig, &aExp, &aSig );\n\t}\n\taSig |= 0x00800000;\n\treturn packFloatx80( aSign, aExp + 0x3F80, ( (bits64) aSig )<<40 );\n\n}\n\n#endif\n\n#ifdef FLOAT128\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the single-precision floating-point value\n| `a' to the double-precision floating-point format.  The conversion is\n| performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat128 float32_to_float128( float32 a )\n{\n\tflag aSign;\n\tint16 aExp;\n\tbits32 aSig;\n\n\taSig = extractFloat32Frac( a );\n\taExp = extractFloat32Exp( a );\n\taSign = extractFloat32Sign( a );\n\tif ( aExp == 0xFF ) {\n\t\tif ( aSig ) return commonNaNToFloat128( float32ToCommonNaN( a ) );\n\t\treturn packFloat128( aSign, 0x7FFF, 0, 0 );\n\t}\n\tif ( aExp == 0 ) {\n\t\tif ( aSig == 0 ) return packFloat128( aSign, 0, 0, 0 );\n\t\tnormalizeFloat32Subnormal( aSig, &aExp, &aSig );\n\t\t--aExp;\n\t}\n\treturn packFloat128( aSign, aExp + 0x3F80, ( (bits64) aSig )<<25, 0 );\n\n}\n\n#endif\n\n/*----------------------------------------------------------------------------\n| Rounds the single-precision floating-point value `a' to an integer, and\n| returns the result as a single-precision floating-point value.  The\n| operation is performed according to the IEC/IEEE Standard for Binary\n| Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat32 float32_round_to_int( float32 a )\n{\n\tflag aSign;\n\tint16 aExp;\n\tbits32 lastBitMask, roundBitsMask;\n\tint8 roundingMode;\n\tfloat32 z;\n\n\taExp = extractFloat32Exp( a );\n\tif ( 0x96 <= aExp ) {\n\t\tif ( ( aExp == 0xFF ) && extractFloat32Frac( a ) ) {\n\t\t\treturn propagateFloat32NaN( a, a );\n\t\t}\n\t\treturn a;\n\t}\n\tif ( aExp <= 0x7E ) {\n\t\tif ( (bits32) ( a<<1 ) == 0 ) return a;\n\t\tfloat_exception_flags |= float_flag_inexact;\n\t\taSign = extractFloat32Sign( a );\n\t\tswitch ( float_rounding_mode ) {\n\t\t\tcase float_round_nearest_even:\n\t\t\tif ( ( aExp == 0x7E ) && extractFloat32Frac( a ) ) {\n\t\t\t\treturn packFloat32( aSign, 0x7F, 0 );\n\t\t\t}\n\t\t\tbreak;\n\t\t\tcase float_round_down:\n\t\t\treturn aSign ? 0xBF800000 : 0;\n\t\t\tcase float_round_up:\n\t\t\treturn aSign ? 0x80000000 : 0x3F800000;\n\t\t}\n\t\treturn packFloat32( aSign, 0, 0 );\n\t}\n\tlastBitMask = 1;\n\tlastBitMask <<= 0x96 - aExp;\n\troundBitsMask = lastBitMask - 1;\n\tz = a;\n\troundingMode = float_rounding_mode;\n\tif ( roundingMode == float_round_nearest_even ) {\n\t\tz += lastBitMask>>1;\n\t\tif ( ( z & roundBitsMask ) == 0 ) z &= ~ lastBitMask;\n\t}\n\telse if ( roundingMode != float_round_to_zero ) {\n\t\tif ( extractFloat32Sign( z ) ^ ( roundingMode == float_round_up ) ) {\n\t\t\tz += roundBitsMask;\n\t\t}\n\t}\n\tz &= ~ roundBitsMask;\n\tif ( z != a ) float_exception_flags |= float_flag_inexact;\n\treturn z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of adding the absolute values of the single-precision\n| floating-point values `a' and `b'.  If `zSign' is 1, the sum is negated\n| before being returned.  `zSign' is ignored if the result is a NaN.\n| The addition is performed according to the IEC/IEEE Standard for Binary\n| Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nstatic float32 addFloat32Sigs( float32 a, float32 b, flag zSign )\n{\n\tint16 aExp, bExp, zExp;\n\tbits32 aSig, bSig, zSig;\n\tint16 expDiff;\n\n\taSig = extractFloat32Frac( a );\n\taExp = extractFloat32Exp( a );\n\tbSig = extractFloat32Frac( b );\n\tbExp = extractFloat32Exp( b );\n\texpDiff = aExp - bExp;\n\taSig <<= 6;\n\tbSig <<= 6;\n\tif ( 0 < expDiff ) {\n\t\tif ( aExp == 0xFF ) {\n\t\t\tif ( aSig ) return propagateFloat32NaN( a, b );\n\t\t\treturn a;\n\t\t}\n\t\tif ( bExp == 0 ) {\n\t\t\t--expDiff;\n\t\t}\n\t\telse {\n\t\t\tbSig |= 0x20000000;\n\t\t}\n\t\tshift32RightJamming( bSig, expDiff, &bSig );\n\t\tzExp = aExp;\n\t}\n\telse if ( expDiff < 0 ) {\n\t\tif ( bExp == 0xFF ) {\n\t\t\tif ( bSig ) return propagateFloat32NaN( a, b );\n\t\t\treturn packFloat32( zSign, 0xFF, 0 );\n\t\t}\n\t\tif ( aExp == 0 ) {\n\t\t\t++expDiff;\n\t\t}\n\t\telse {\n\t\t\taSig |= 0x20000000;\n\t\t}\n\t\tshift32RightJamming( aSig, - expDiff, &aSig );\n\t\tzExp = bExp;\n\t}\n\telse {\n\t\tif ( aExp == 0xFF ) {\n\t\t\tif ( aSig | bSig ) return propagateFloat32NaN( a, b );\n\t\t\treturn a;\n\t\t}\n\t\tif ( aExp == 0 ) return packFloat32( zSign, 0, ( aSig + bSig )>>6 );\n\t\tzSig = 0x40000000 + aSig + bSig;\n\t\tzExp = aExp;\n\t\tgoto roundAndPack;\n\t}\n\taSig |= 0x20000000;\n\tzSig = ( aSig + bSig )<<1;\n\t--zExp;\n\tif ( (sbits32) zSig < 0 ) {\n\t\tzSig = aSig + bSig;\n\t\t++zExp;\n\t}\n\troundAndPack:\n\treturn roundAndPackFloat32( zSign, zExp, zSig );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of subtracting the absolute values of the single-\n| precision floating-point values `a' and `b'.  If `zSign' is 1, the\n| difference is negated before being returned.  `zSign' is ignored if the\n| result is a NaN.  The subtraction is performed according to the IEC/IEEE\n| Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nstatic float32 subFloat32Sigs( float32 a, float32 b, flag zSign )\n{\n\tint16 aExp, bExp, zExp;\n\tbits32 aSig, bSig, zSig;\n\tint16 expDiff;\n\n\taSig = extractFloat32Frac( a );\n\taExp = extractFloat32Exp( a );\n\tbSig = extractFloat32Frac( b );\n\tbExp = extractFloat32Exp( b );\n\texpDiff = aExp - bExp;\n\taSig <<= 7;\n\tbSig <<= 7;\n\tif ( 0 < expDiff ) goto aExpBigger;\n\tif ( expDiff < 0 ) goto bExpBigger;\n\tif ( aExp == 0xFF ) {\n\t\tif ( aSig | bSig ) return propagateFloat32NaN( a, b );\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn float32_default_nan;\n\t}\n\tif ( aExp == 0 ) {\n\t\taExp = 1;\n\t\tbExp = 1;\n\t}\n\tif ( bSig < aSig ) goto aBigger;\n\tif ( aSig < bSig ) goto bBigger;\n\treturn packFloat32( float_rounding_mode == float_round_down, 0, 0 );\n\tbExpBigger:\n\tif ( bExp == 0xFF ) {\n\t\tif ( bSig ) return propagateFloat32NaN( a, b );\n\t\treturn packFloat32( zSign ^ 1, 0xFF, 0 );\n\t}\n\tif ( aExp == 0 ) {\n\t\t++expDiff;\n\t}\n\telse {\n\t\taSig |= 0x40000000;\n\t}\n\tshift32RightJamming( aSig, - expDiff, &aSig );\n\tbSig |= 0x40000000;\n\tbBigger:\n\tzSig = bSig - aSig;\n\tzExp = bExp;\n\tzSign ^= 1;\n\tgoto normalizeRoundAndPack;\n\taExpBigger:\n\tif ( aExp == 0xFF ) {\n\t\tif ( aSig ) return propagateFloat32NaN( a, b );\n\t\treturn a;\n\t}\n\tif ( bExp == 0 ) {\n\t\t--expDiff;\n\t}\n\telse {\n\t\tbSig |= 0x40000000;\n\t}\n\tshift32RightJamming( bSig, expDiff, &bSig );\n\taSig |= 0x40000000;\n\taBigger:\n\tzSig = aSig - bSig;\n\tzExp = aExp;\n\tnormalizeRoundAndPack:\n\t--zExp;\n\treturn normalizeRoundAndPackFloat32( zSign, zExp, zSig );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of adding the single-precision floating-point values `a'\n| and `b'.  The operation is performed according to the IEC/IEEE Standard for\n| Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat32 float32_add( float32 a, float32 b )\n{\n\tflag aSign, bSign;\n\n\taSign = extractFloat32Sign( a );\n\tbSign = extractFloat32Sign( b );\n\tif ( aSign == bSign ) {\n\t\treturn addFloat32Sigs( a, b, aSign );\n\t}\n\telse {\n\t\treturn subFloat32Sigs( a, b, aSign );\n\t}\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of subtracting the single-precision floating-point values\n| `a' and `b'.  The operation is performed according to the IEC/IEEE Standard\n| for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat32 float32_sub( float32 a, float32 b )\n{\n\tflag aSign, bSign;\n\n\taSign = extractFloat32Sign( a );\n\tbSign = extractFloat32Sign( b );\n\tif ( aSign == bSign ) {\n\t\treturn subFloat32Sigs( a, b, aSign );\n\t}\n\telse {\n\t\treturn addFloat32Sigs( a, b, aSign );\n\t}\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of multiplying the single-precision floating-point values\n| `a' and `b'.  The operation is performed according to the IEC/IEEE Standard\n| for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat32 float32_mul( float32 a, float32 b )\n{\n\tflag aSign, bSign, zSign;\n\tint16 aExp, bExp, zExp;\n\tbits32 aSig, bSig;\n\tbits64 zSig64;\n\tbits32 zSig;\n\n\taSig = extractFloat32Frac( a );\n\taExp = extractFloat32Exp( a );\n\taSign = extractFloat32Sign( a );\n\tbSig = extractFloat32Frac( b );\n\tbExp = extractFloat32Exp( b );\n\tbSign = extractFloat32Sign( b );\n\tzSign = aSign ^ bSign;\n\tif ( aExp == 0xFF ) {\n\t\tif ( aSig || ( ( bExp == 0xFF ) && bSig ) ) {\n\t\t\treturn propagateFloat32NaN( a, b );\n\t\t}\n\t\tif ( ( bExp | bSig ) == 0 ) {\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t\treturn float32_default_nan;\n\t\t}\n\t\treturn packFloat32( zSign, 0xFF, 0 );\n\t}\n\tif ( bExp == 0xFF ) {\n\t\tif ( bSig ) return propagateFloat32NaN( a, b );\n\t\tif ( ( aExp | aSig ) == 0 ) {\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t\treturn float32_default_nan;\n\t\t}\n\t\treturn packFloat32( zSign, 0xFF, 0 );\n\t}\n\tif ( aExp == 0 ) {\n\t\tif ( aSig == 0 ) return packFloat32( zSign, 0, 0 );\n\t\tnormalizeFloat32Subnormal( aSig, &aExp, &aSig );\n\t}\n\tif ( bExp == 0 ) {\n\t\tif ( bSig == 0 ) return packFloat32( zSign, 0, 0 );\n\t\tnormalizeFloat32Subnormal( bSig, &bExp, &bSig );\n\t}\n\tzExp = aExp + bExp - 0x7F;\n\taSig = ( aSig | 0x00800000 )<<7;\n\tbSig = ( bSig | 0x00800000 )<<8;\n\tshift64RightJamming( ( (bits64) aSig ) * bSig, 32, &zSig64 );\n\tzSig = zSig64;\n\tif ( 0 <= (sbits32) ( zSig<<1 ) ) {\n\t\tzSig <<= 1;\n\t\t--zExp;\n\t}\n\treturn roundAndPackFloat32( zSign, zExp, zSig );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of dividing the single-precision floating-point value `a'\n| by the corresponding value `b'.  The operation is performed according to the\n| IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat32 float32_div( float32 a, float32 b )\n{\n\tflag aSign, bSign, zSign;\n\tint16 aExp, bExp, zExp;\n\tbits32 aSig, bSig, zSig;\n\n\taSig = extractFloat32Frac( a );\n\taExp = extractFloat32Exp( a );\n\taSign = extractFloat32Sign( a );\n\tbSig = extractFloat32Frac( b );\n\tbExp = extractFloat32Exp( b );\n\tbSign = extractFloat32Sign( b );\n\tzSign = aSign ^ bSign;\n\tif ( aExp == 0xFF ) {\n\t\tif ( aSig ) return propagateFloat32NaN( a, b );\n\t\tif ( bExp == 0xFF ) {\n\t\t\tif ( bSig ) return propagateFloat32NaN( a, b );\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t\treturn float32_default_nan;\n\t\t}\n\t\treturn packFloat32( zSign, 0xFF, 0 );\n\t}\n\tif ( bExp == 0xFF ) {\n\t\tif ( bSig ) return propagateFloat32NaN( a, b );\n\t\treturn packFloat32( zSign, 0, 0 );\n\t}\n\tif ( bExp == 0 ) {\n\t\tif ( bSig == 0 ) {\n\t\t\tif ( ( aExp | aSig ) == 0 ) {\n\t\t\t\tfloat_raise( float_flag_invalid );\n\t\t\t\treturn float32_default_nan;\n\t\t\t}\n\t\t\tfloat_raise( float_flag_divbyzero );\n\t\t\treturn packFloat32( zSign, 0xFF, 0 );\n\t\t}\n\t\tnormalizeFloat32Subnormal( bSig, &bExp, &bSig );\n\t}\n\tif ( aExp == 0 ) {\n\t\tif ( aSig == 0 ) return packFloat32( zSign, 0, 0 );\n\t\tnormalizeFloat32Subnormal( aSig, &aExp, &aSig );\n\t}\n\tzExp = aExp - bExp + 0x7D;\n\taSig = ( aSig | 0x00800000 )<<7;\n\tbSig = ( bSig | 0x00800000 )<<8;\n\tif ( bSig <= ( aSig + aSig ) ) {\n\t\taSig >>= 1;\n\t\t++zExp;\n\t}\n\tzSig = ( ( (bits64) aSig )<<32 ) / bSig;\n\tif ( ( zSig & 0x3F ) == 0 ) {\n\t\tzSig |= ( (bits64) bSig * zSig != ( (bits64) aSig )<<32 );\n\t}\n\treturn roundAndPackFloat32( zSign, zExp, zSig );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the remainder of the single-precision floating-point value `a'\n| with respect to the corresponding value `b'.  The operation is performed\n| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat32 float32_rem( float32 a, float32 b )\n{\n\tflag aSign, zSign;\n\tint16 aExp, bExp, expDiff;\n\tbits32 aSig, bSig;\n\tbits32 q;\n\tbits64 aSig64, bSig64, q64;\n\tbits32 alternateASig;\n\tsbits32 sigMean;\n\n\taSig = extractFloat32Frac( a );\n\taExp = extractFloat32Exp( a );\n\taSign = extractFloat32Sign( a );\n\tbSig = extractFloat32Frac( b );\n\tbExp = extractFloat32Exp( b );\n//    bSign = extractFloat32Sign( b );\n\tif ( aExp == 0xFF ) {\n\t\tif ( aSig || ( ( bExp == 0xFF ) && bSig ) ) {\n\t\t\treturn propagateFloat32NaN( a, b );\n\t\t}\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn float32_default_nan;\n\t}\n\tif ( bExp == 0xFF ) {\n\t\tif ( bSig ) return propagateFloat32NaN( a, b );\n\t\treturn a;\n\t}\n\tif ( bExp == 0 ) {\n\t\tif ( bSig == 0 ) {\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t\treturn float32_default_nan;\n\t\t}\n\t\tnormalizeFloat32Subnormal( bSig, &bExp, &bSig );\n\t}\n\tif ( aExp == 0 ) {\n\t\tif ( aSig == 0 ) return a;\n\t\tnormalizeFloat32Subnormal( aSig, &aExp, &aSig );\n\t}\n\texpDiff = aExp - bExp;\n\taSig |= 0x00800000;\n\tbSig |= 0x00800000;\n\tif ( expDiff < 32 ) {\n\t\taSig <<= 8;\n\t\tbSig <<= 8;\n\t\tif ( expDiff < 0 ) {\n\t\t\tif ( expDiff < -1 ) return a;\n\t\t\taSig >>= 1;\n\t\t}\n\t\tq = ( bSig <= aSig );\n\t\tif ( q ) aSig -= bSig;\n\t\tif ( 0 < expDiff ) {\n\t\t\tq = ( ( (bits64) aSig )<<32 ) / bSig;\n\t\t\tq >>= 32 - expDiff;\n\t\t\tbSig >>= 2;\n\t\t\taSig = ( ( aSig>>1 )<<( expDiff - 1 ) ) - bSig * q;\n\t\t}\n\t\telse {\n\t\t\taSig >>= 2;\n\t\t\tbSig >>= 2;\n\t\t}\n\t}\n\telse {\n\t\tif ( bSig <= aSig ) aSig -= bSig;\n\t\taSig64 = ( (bits64) aSig )<<40;\n\t\tbSig64 = ( (bits64) bSig )<<40;\n\t\texpDiff -= 64;\n\t\twhile ( 0 < expDiff ) {\n\t\t\tq64 = estimateDiv128To64( aSig64, 0, bSig64 );\n\t\t\tq64 = ( 2 < q64 ) ? q64 - 2 : 0;\n\t\t\taSig64 = - ( ( bSig * q64 )<<38 );\n\t\t\texpDiff -= 62;\n\t\t}\n\t\texpDiff += 64;\n\t\tq64 = estimateDiv128To64( aSig64, 0, bSig64 );\n\t\tq64 = ( 2 < q64 ) ? q64 - 2 : 0;\n\t\tq = q64>>( 64 - expDiff );\n\t\tbSig <<= 6;\n\t\taSig = ( ( aSig64>>33 )<<( expDiff - 1 ) ) - bSig * q;\n\t}\n\tdo {\n\t\talternateASig = aSig;\n\t\t++q;\n\t\taSig -= bSig;\n\t} while ( 0 <= (sbits32) aSig );\n\tsigMean = aSig + alternateASig;\n\tif ( ( sigMean < 0 ) || ( ( sigMean == 0 ) && ( q & 1 ) ) ) {\n\t\taSig = alternateASig;\n\t}\n\tzSign = ( (sbits32) aSig < 0 );\n\tif ( zSign ) aSig = - aSig;\n\treturn normalizeRoundAndPackFloat32( aSign ^ zSign, bExp, aSig );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the square root of the single-precision floating-point value `a'.\n| The operation is performed according to the IEC/IEEE Standard for Binary\n| Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat32 float32_sqrt( float32 a )\n{\n\tflag aSign;\n\tint16 aExp, zExp;\n\tbits32 aSig, zSig;\n\tbits64 rem, term;\n\n\taSig = extractFloat32Frac( a );\n\taExp = extractFloat32Exp( a );\n\taSign = extractFloat32Sign( a );\n\tif ( aExp == 0xFF ) {\n\t\tif ( aSig ) return propagateFloat32NaN( a, 0 );\n\t\tif ( ! aSign ) return a;\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn float32_default_nan;\n\t}\n\tif ( aSign ) {\n\t\tif ( ( aExp | aSig ) == 0 ) return a;\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn float32_default_nan;\n\t}\n\tif ( aExp == 0 ) {\n\t\tif ( aSig == 0 ) return 0;\n\t\tnormalizeFloat32Subnormal( aSig, &aExp, &aSig );\n\t}\n\tzExp = ( ( aExp - 0x7F )>>1 ) + 0x7E;\n\taSig = ( aSig | 0x00800000 )<<8;\n\tzSig = estimateSqrt32( aExp, aSig ) + 2;\n\tif ( ( zSig & 0x7F ) <= 5 ) {\n\t\tif ( zSig < 2 ) {\n\t\t\tzSig = 0x7FFFFFFF;\n\t\t\tgoto roundAndPack;\n\t\t}\n\t\taSig >>= aExp & 1;\n\t\tterm = ( (bits64) zSig ) * zSig;\n\t\trem = ( ( (bits64) aSig )<<32 ) - term;\n\t\twhile ( (sbits64) rem < 0 ) {\n\t\t\t--zSig;\n\t\t\trem += ( ( (bits64) zSig )<<1 ) | 1;\n\t\t}\n\t\tzSig |= ( rem != 0 );\n\t}\n\tshift32RightJamming( zSig, 1, &zSig );\n\troundAndPack:\n\treturn roundAndPackFloat32( 0, zExp, zSig );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the single-precision floating-point value `a' is equal to\n| the corresponding value `b', and 0 otherwise.  The comparison is performed\n| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nflag float32_eq( float32 a, float32 b )\n{\n\tif (    ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )\n\t\t\t|| ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )\n\t\t) {\n\t\tif ( float32_is_signaling_nan( a ) || float32_is_signaling_nan( b ) ) {\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t}\n\t\treturn 0;\n\t}\n\treturn ( a == b ) || ( (bits32) ( ( a | b )<<1 ) == 0 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the single-precision floating-point value `a' is less than\n| or equal to the corresponding value `b', and 0 otherwise.  The comparison\n| is performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic.\n*----------------------------------------------------------------------------*/\n\nflag float32_le( float32 a, float32 b )\n{\n\tflag aSign, bSign;\n\n\tif (    ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )\n\t\t\t|| ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )\n\t\t) {\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn 0;\n\t}\n\taSign = extractFloat32Sign( a );\n\tbSign = extractFloat32Sign( b );\n\tif ( aSign != bSign ) return aSign || ( (bits32) ( ( a | b )<<1 ) == 0 );\n\treturn ( a == b ) || ( aSign ^ ( a < b ) );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the single-precision floating-point value `a' is less than\n| the corresponding value `b', and 0 otherwise.  The comparison is performed\n| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nflag float32_lt( float32 a, float32 b )\n{\n\tflag aSign, bSign;\n\n\tif (    ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )\n\t\t\t|| ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )\n\t\t) {\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn 0;\n\t}\n\taSign = extractFloat32Sign( a );\n\tbSign = extractFloat32Sign( b );\n\tif ( aSign != bSign ) return aSign && ( (bits32) ( ( a | b )<<1 ) != 0 );\n\treturn ( a != b ) && ( aSign ^ ( a < b ) );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the single-precision floating-point value `a' is equal to\n| the corresponding value `b', and 0 otherwise.  The invalid exception is\n| raised if either operand is a NaN.  Otherwise, the comparison is performed\n| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nflag float32_eq_signaling( float32 a, float32 b )\n{\n\tif (    ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )\n\t\t\t|| ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )\n\t\t) {\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn 0;\n\t}\n\treturn ( a == b ) || ( (bits32) ( ( a | b )<<1 ) == 0 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the single-precision floating-point value `a' is less than or\n| equal to the corresponding value `b', and 0 otherwise.  Quiet NaNs do not\n| cause an exception.  Otherwise, the comparison is performed according to the\n| IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nflag float32_le_quiet( float32 a, float32 b )\n{\n\tflag aSign, bSign;\n//    int16 aExp, bExp;\n\n\tif (    ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )\n\t\t\t|| ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )\n\t\t) {\n\t\tif ( float32_is_signaling_nan( a ) || float32_is_signaling_nan( b ) ) {\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t}\n\t\treturn 0;\n\t}\n\taSign = extractFloat32Sign( a );\n\tbSign = extractFloat32Sign( b );\n\tif ( aSign != bSign ) return aSign || ( (bits32) ( ( a | b )<<1 ) == 0 );\n\treturn ( a == b ) || ( aSign ^ ( a < b ) );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the single-precision floating-point value `a' is less than\n| the corresponding value `b', and 0 otherwise.  Quiet NaNs do not cause an\n| exception.  Otherwise, the comparison is performed according to the IEC/IEEE\n| Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nflag float32_lt_quiet( float32 a, float32 b )\n{\n\tflag aSign, bSign;\n\n\tif (    ( ( extractFloat32Exp( a ) == 0xFF ) && extractFloat32Frac( a ) )\n\t\t\t|| ( ( extractFloat32Exp( b ) == 0xFF ) && extractFloat32Frac( b ) )\n\t\t) {\n\t\tif ( float32_is_signaling_nan( a ) || float32_is_signaling_nan( b ) ) {\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t}\n\t\treturn 0;\n\t}\n\taSign = extractFloat32Sign( a );\n\tbSign = extractFloat32Sign( b );\n\tif ( aSign != bSign ) return aSign && ( (bits32) ( ( a | b )<<1 ) != 0 );\n\treturn ( a != b ) && ( aSign ^ ( a < b ) );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the double-precision floating-point value\n| `a' to the 32-bit two's complement integer format.  The conversion is\n| performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic---which means in particular that the conversion is rounded\n| according to the current rounding mode.  If `a' is a NaN, the largest\n| positive integer is returned.  Otherwise, if the conversion overflows, the\n| largest integer with the same sign as `a' is returned.\n*----------------------------------------------------------------------------*/\n\nint32 float64_to_int32( float64 a )\n{\n\tflag aSign;\n\tint16 aExp, shiftCount;\n\tbits64 aSig;\n\n\taSig = extractFloat64Frac( a );\n\taExp = extractFloat64Exp( a );\n\taSign = extractFloat64Sign( a );\n\tif ( ( aExp == 0x7FF ) && aSig ) aSign = 0;\n\tif ( aExp ) aSig |= LIT64( 0x0010000000000000 );\n\tshiftCount = 0x42C - aExp;\n\tif ( 0 < shiftCount ) shift64RightJamming( aSig, shiftCount, &aSig );\n\treturn roundAndPackInt32( aSign, aSig );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the double-precision floating-point value\n| `a' to the 32-bit two's complement integer format.  The conversion is\n| performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic, except that the conversion is always rounded toward zero.\n| If `a' is a NaN, the largest positive integer is returned.  Otherwise, if\n| the conversion overflows, the largest integer with the same sign as `a' is\n| returned.\n*----------------------------------------------------------------------------*/\n\nint32 float64_to_int32_round_to_zero( float64 a )\n{\n\tflag aSign;\n\tint16 aExp, shiftCount;\n\tbits64 aSig, savedASig;\n\tint32 z;\n\n\taSig = extractFloat64Frac( a );\n\taExp = extractFloat64Exp( a );\n\taSign = extractFloat64Sign( a );\n\tif ( 0x41E < aExp ) {\n\t\tif ( ( aExp == 0x7FF ) && aSig ) aSign = 0;\n\t\tgoto invalid;\n\t}\n\telse if ( aExp < 0x3FF ) {\n\t\tif ( aExp || aSig ) float_exception_flags |= float_flag_inexact;\n\t\treturn 0;\n\t}\n\taSig |= LIT64( 0x0010000000000000 );\n\tshiftCount = 0x433 - aExp;\n\tsavedASig = aSig;\n\taSig >>= shiftCount;\n\tz = aSig;\n\tif ( aSign ) z = - z;\n\tif ( ( z < 0 ) ^ aSign ) {\n\tinvalid:\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn aSign ? (sbits32) 0x80000000 : 0x7FFFFFFF;\n\t}\n\tif ( ( aSig<<shiftCount ) != savedASig ) {\n\t\tfloat_exception_flags |= float_flag_inexact;\n\t}\n\treturn z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the double-precision floating-point value\n| `a' to the 64-bit two's complement integer format.  The conversion is\n| performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic---which means in particular that the conversion is rounded\n| according to the current rounding mode.  If `a' is a NaN, the largest\n| positive integer is returned.  Otherwise, if the conversion overflows, the\n| largest integer with the same sign as `a' is returned.\n*----------------------------------------------------------------------------*/\n\nint64 float64_to_int64( float64 a )\n{\n\tflag aSign;\n\tint16 aExp, shiftCount;\n\tbits64 aSig, aSigExtra;\n\n\taSig = extractFloat64Frac( a );\n\taExp = extractFloat64Exp( a );\n\taSign = extractFloat64Sign( a );\n\tif ( aExp ) aSig |= LIT64( 0x0010000000000000 );\n\tshiftCount = 0x433 - aExp;\n\tif ( shiftCount <= 0 ) {\n\t\tif ( 0x43E < aExp ) {\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t\tif (    ! aSign\n\t\t\t\t\t|| (    ( aExp == 0x7FF )\n\t\t\t\t\t\t&& ( aSig != LIT64( 0x0010000000000000 ) ) )\n\t\t\t\t) {\n\t\t\t\treturn LIT64( 0x7FFFFFFFFFFFFFFF );\n\t\t\t}\n\t\t\treturn (sbits64) LIT64( 0x8000000000000000 );\n\t\t}\n\t\taSigExtra = 0;\n\t\taSig <<= - shiftCount;\n\t}\n\telse {\n\t\tshift64ExtraRightJamming( aSig, 0, shiftCount, &aSig, &aSigExtra );\n\t}\n\treturn roundAndPackInt64( aSign, aSig, aSigExtra );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the double-precision floating-point value\n| `a' to the 64-bit two's complement integer format.  The conversion is\n| performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic, except that the conversion is always rounded toward zero.\n| If `a' is a NaN, the largest positive integer is returned.  Otherwise, if\n| the conversion overflows, the largest integer with the same sign as `a' is\n| returned.\n*----------------------------------------------------------------------------*/\n\nint64 float64_to_int64_round_to_zero( float64 a )\n{\n\tflag aSign;\n\tint16 aExp, shiftCount;\n\tbits64 aSig;\n\tint64 z;\n\n\taSig = extractFloat64Frac( a );\n\taExp = extractFloat64Exp( a );\n\taSign = extractFloat64Sign( a );\n\tif ( aExp ) aSig |= LIT64( 0x0010000000000000 );\n\tshiftCount = aExp - 0x433;\n\tif ( 0 <= shiftCount ) {\n\t\tif ( 0x43E <= aExp ) {\n\t\t\tif ( a != LIT64( 0xC3E0000000000000 ) ) {\n\t\t\t\tfloat_raise( float_flag_invalid );\n\t\t\t\tif (    ! aSign\n\t\t\t\t\t\t|| (    ( aExp == 0x7FF )\n\t\t\t\t\t\t\t&& ( aSig != LIT64( 0x0010000000000000 ) ) )\n\t\t\t\t\t) {\n\t\t\t\t\treturn LIT64( 0x7FFFFFFFFFFFFFFF );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn (sbits64) LIT64( 0x8000000000000000 );\n\t\t}\n\t\tz = aSig<<shiftCount;\n\t}\n\telse {\n\t\tif ( aExp < 0x3FE ) {\n\t\t\tif ( aExp | aSig ) float_exception_flags |= float_flag_inexact;\n\t\t\treturn 0;\n\t\t}\n\t\tz = aSig>>( - shiftCount );\n\t\tif ( (bits64) ( aSig<<( shiftCount & 63 ) ) ) {\n\t\t\tfloat_exception_flags |= float_flag_inexact;\n\t\t}\n\t}\n\tif ( aSign ) z = - z;\n\treturn z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the double-precision floating-point value\n| `a' to the single-precision floating-point format.  The conversion is\n| performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat32 float64_to_float32( float64 a )\n{\n\tflag aSign;\n\tint16 aExp;\n\tbits64 aSig;\n\tbits32 zSig;\n\n\taSig = extractFloat64Frac( a );\n\taExp = extractFloat64Exp( a );\n\taSign = extractFloat64Sign( a );\n\tif ( aExp == 0x7FF ) {\n\t\tif ( aSig ) return commonNaNToFloat32( float64ToCommonNaN( a ) );\n\t\treturn packFloat32( aSign, 0xFF, 0 );\n\t}\n\tshift64RightJamming( aSig, 22, &aSig );\n\tzSig = aSig;\n\tif ( aExp || zSig ) {\n\t\tzSig |= 0x40000000;\n\t\taExp -= 0x381;\n\t}\n\treturn roundAndPackFloat32( aSign, aExp, zSig );\n\n}\n\n#ifdef FLOATX80\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the double-precision floating-point value\n| `a' to the extended double-precision floating-point format.  The conversion\n| is performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloatx80 float64_to_floatx80( float64 a )\n{\n\tflag aSign;\n\tint16 aExp;\n\tbits64 aSig;\n\n\taSig = extractFloat64Frac( a );\n\taExp = extractFloat64Exp( a );\n\taSign = extractFloat64Sign( a );\n\tif ( aExp == 0x7FF ) {\n\t\tif ( aSig ) return commonNaNToFloatx80( float64ToCommonNaN( a ) );\n\t\treturn packFloatx80( aSign, 0x7FFF, LIT64( 0x8000000000000000 ) );\n\t}\n\tif ( aExp == 0 ) {\n\t\tif ( aSig == 0 ) return packFloatx80( aSign, 0, 0 );\n\t\tnormalizeFloat64Subnormal( aSig, &aExp, &aSig );\n\t}\n\treturn\n\t\tpackFloatx80(\n\t\t\taSign, aExp + 0x3C00, ( aSig | LIT64( 0x0010000000000000 ) )<<11 );\n\n}\n\n#endif\n\n#ifdef FLOAT128\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the double-precision floating-point value\n| `a' to the quadruple-precision floating-point format.  The conversion is\n| performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat128 float64_to_float128( float64 a )\n{\n\tflag aSign;\n\tint16 aExp;\n\tbits64 aSig, zSig0, zSig1;\n\n\taSig = extractFloat64Frac( a );\n\taExp = extractFloat64Exp( a );\n\taSign = extractFloat64Sign( a );\n\tif ( aExp == 0x7FF ) {\n\t\tif ( aSig ) return commonNaNToFloat128( float64ToCommonNaN( a ) );\n\t\treturn packFloat128( aSign, 0x7FFF, 0, 0 );\n\t}\n\tif ( aExp == 0 ) {\n\t\tif ( aSig == 0 ) return packFloat128( aSign, 0, 0, 0 );\n\t\tnormalizeFloat64Subnormal( aSig, &aExp, &aSig );\n\t\t--aExp;\n\t}\n\tshift128Right( aSig, 0, 4, &zSig0, &zSig1 );\n\treturn packFloat128( aSign, aExp + 0x3C00, zSig0, zSig1 );\n\n}\n\n#endif\n\n/*----------------------------------------------------------------------------\n| Rounds the double-precision floating-point value `a' to an integer, and\n| returns the result as a double-precision floating-point value.  The\n| operation is performed according to the IEC/IEEE Standard for Binary\n| Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat64 float64_round_to_int( float64 a )\n{\n\tflag aSign;\n\tint16 aExp;\n\tbits64 lastBitMask, roundBitsMask;\n\tint8 roundingMode;\n\tfloat64 z;\n\n\taExp = extractFloat64Exp( a );\n\tif ( 0x433 <= aExp ) {\n\t\tif ( ( aExp == 0x7FF ) && extractFloat64Frac( a ) ) {\n\t\t\treturn propagateFloat64NaN( a, a );\n\t\t}\n\t\treturn a;\n\t}\n\tif ( aExp < 0x3FF ) {\n\t\tif ( (bits64) ( a<<1 ) == 0 ) return a;\n\t\tfloat_exception_flags |= float_flag_inexact;\n\t\taSign = extractFloat64Sign( a );\n\t\tswitch ( float_rounding_mode ) {\n\t\t\tcase float_round_nearest_even:\n\t\t\tif ( ( aExp == 0x3FE ) && extractFloat64Frac( a ) ) {\n\t\t\t\treturn packFloat64( aSign, 0x3FF, 0 );\n\t\t\t}\n\t\t\tbreak;\n\t\t\tcase float_round_down:\n\t\t\treturn aSign ? LIT64( 0xBFF0000000000000 ) : 0;\n\t\t\tcase float_round_up:\n\t\t\treturn\n\t\t\taSign ? LIT64( 0x8000000000000000 ) : LIT64( 0x3FF0000000000000 );\n\t\t}\n\t\treturn packFloat64( aSign, 0, 0 );\n\t}\n\tlastBitMask = 1;\n\tlastBitMask <<= 0x433 - aExp;\n\troundBitsMask = lastBitMask - 1;\n\tz = a;\n\troundingMode = float_rounding_mode;\n\tif ( roundingMode == float_round_nearest_even ) {\n\t\tz += lastBitMask>>1;\n\t\tif ( ( z & roundBitsMask ) == 0 ) z &= ~ lastBitMask;\n\t}\n\telse if ( roundingMode != float_round_to_zero ) {\n\t\tif ( extractFloat64Sign( z ) ^ ( roundingMode == float_round_up ) ) {\n\t\t\tz += roundBitsMask;\n\t\t}\n\t}\n\tz &= ~ roundBitsMask;\n\tif ( z != a ) float_exception_flags |= float_flag_inexact;\n\treturn z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of adding the absolute values of the double-precision\n| floating-point values `a' and `b'.  If `zSign' is 1, the sum is negated\n| before being returned.  `zSign' is ignored if the result is a NaN.\n| The addition is performed according to the IEC/IEEE Standard for Binary\n| Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nstatic float64 addFloat64Sigs( float64 a, float64 b, flag zSign )\n{\n\tint16 aExp, bExp, zExp;\n\tbits64 aSig, bSig, zSig;\n\tint16 expDiff;\n\n\taSig = extractFloat64Frac( a );\n\taExp = extractFloat64Exp( a );\n\tbSig = extractFloat64Frac( b );\n\tbExp = extractFloat64Exp( b );\n\texpDiff = aExp - bExp;\n\taSig <<= 9;\n\tbSig <<= 9;\n\tif ( 0 < expDiff ) {\n\t\tif ( aExp == 0x7FF ) {\n\t\t\tif ( aSig ) return propagateFloat64NaN( a, b );\n\t\t\treturn a;\n\t\t}\n\t\tif ( bExp == 0 ) {\n\t\t\t--expDiff;\n\t\t}\n\t\telse {\n\t\t\tbSig |= LIT64( 0x2000000000000000 );\n\t\t}\n\t\tshift64RightJamming( bSig, expDiff, &bSig );\n\t\tzExp = aExp;\n\t}\n\telse if ( expDiff < 0 ) {\n\t\tif ( bExp == 0x7FF ) {\n\t\t\tif ( bSig ) return propagateFloat64NaN( a, b );\n\t\t\treturn packFloat64( zSign, 0x7FF, 0 );\n\t\t}\n\t\tif ( aExp == 0 ) {\n\t\t\t++expDiff;\n\t\t}\n\t\telse {\n\t\t\taSig |= LIT64( 0x2000000000000000 );\n\t\t}\n\t\tshift64RightJamming( aSig, - expDiff, &aSig );\n\t\tzExp = bExp;\n\t}\n\telse {\n\t\tif ( aExp == 0x7FF ) {\n\t\t\tif ( aSig | bSig ) return propagateFloat64NaN( a, b );\n\t\t\treturn a;\n\t\t}\n\t\tif ( aExp == 0 ) return packFloat64( zSign, 0, ( aSig + bSig )>>9 );\n\t\tzSig = LIT64( 0x4000000000000000 ) + aSig + bSig;\n\t\tzExp = aExp;\n\t\tgoto roundAndPack;\n\t}\n\taSig |= LIT64( 0x2000000000000000 );\n\tzSig = ( aSig + bSig )<<1;\n\t--zExp;\n\tif ( (sbits64) zSig < 0 ) {\n\t\tzSig = aSig + bSig;\n\t\t++zExp;\n\t}\n\troundAndPack:\n\treturn roundAndPackFloat64( zSign, zExp, zSig );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of subtracting the absolute values of the double-\n| precision floating-point values `a' and `b'.  If `zSign' is 1, the\n| difference is negated before being returned.  `zSign' is ignored if the\n| result is a NaN.  The subtraction is performed according to the IEC/IEEE\n| Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nstatic float64 subFloat64Sigs( float64 a, float64 b, flag zSign )\n{\n\tint16 aExp, bExp, zExp;\n\tbits64 aSig, bSig, zSig;\n\tint16 expDiff;\n\n\taSig = extractFloat64Frac( a );\n\taExp = extractFloat64Exp( a );\n\tbSig = extractFloat64Frac( b );\n\tbExp = extractFloat64Exp( b );\n\texpDiff = aExp - bExp;\n\taSig <<= 10;\n\tbSig <<= 10;\n\tif ( 0 < expDiff ) goto aExpBigger;\n\tif ( expDiff < 0 ) goto bExpBigger;\n\tif ( aExp == 0x7FF ) {\n\t\tif ( aSig | bSig ) return propagateFloat64NaN( a, b );\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn float64_default_nan;\n\t}\n\tif ( aExp == 0 ) {\n\t\taExp = 1;\n\t\tbExp = 1;\n\t}\n\tif ( bSig < aSig ) goto aBigger;\n\tif ( aSig < bSig ) goto bBigger;\n\treturn packFloat64( float_rounding_mode == float_round_down, 0, 0 );\n\tbExpBigger:\n\tif ( bExp == 0x7FF ) {\n\t\tif ( bSig ) return propagateFloat64NaN( a, b );\n\t\treturn packFloat64( zSign ^ 1, 0x7FF, 0 );\n\t}\n\tif ( aExp == 0 ) {\n\t\t++expDiff;\n\t}\n\telse {\n\t\taSig |= LIT64( 0x4000000000000000 );\n\t}\n\tshift64RightJamming( aSig, - expDiff, &aSig );\n\tbSig |= LIT64( 0x4000000000000000 );\n\tbBigger:\n\tzSig = bSig - aSig;\n\tzExp = bExp;\n\tzSign ^= 1;\n\tgoto normalizeRoundAndPack;\n\taExpBigger:\n\tif ( aExp == 0x7FF ) {\n\t\tif ( aSig ) return propagateFloat64NaN( a, b );\n\t\treturn a;\n\t}\n\tif ( bExp == 0 ) {\n\t\t--expDiff;\n\t}\n\telse {\n\t\tbSig |= LIT64( 0x4000000000000000 );\n\t}\n\tshift64RightJamming( bSig, expDiff, &bSig );\n\taSig |= LIT64( 0x4000000000000000 );\n\taBigger:\n\tzSig = aSig - bSig;\n\tzExp = aExp;\n\tnormalizeRoundAndPack:\n\t--zExp;\n\treturn normalizeRoundAndPackFloat64( zSign, zExp, zSig );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of adding the double-precision floating-point values `a'\n| and `b'.  The operation is performed according to the IEC/IEEE Standard for\n| Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat64 float64_add( float64 a, float64 b )\n{\n\tflag aSign, bSign;\n\n\taSign = extractFloat64Sign( a );\n\tbSign = extractFloat64Sign( b );\n\tif ( aSign == bSign ) {\n\t\treturn addFloat64Sigs( a, b, aSign );\n\t}\n\telse {\n\t\treturn subFloat64Sigs( a, b, aSign );\n\t}\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of subtracting the double-precision floating-point values\n| `a' and `b'.  The operation is performed according to the IEC/IEEE Standard\n| for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat64 float64_sub( float64 a, float64 b )\n{\n\tflag aSign, bSign;\n\n\taSign = extractFloat64Sign( a );\n\tbSign = extractFloat64Sign( b );\n\tif ( aSign == bSign ) {\n\t\treturn subFloat64Sigs( a, b, aSign );\n\t}\n\telse {\n\t\treturn addFloat64Sigs( a, b, aSign );\n\t}\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of multiplying the double-precision floating-point values\n| `a' and `b'.  The operation is performed according to the IEC/IEEE Standard\n| for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat64 float64_mul( float64 a, float64 b )\n{\n\tflag aSign, bSign, zSign;\n\tint16 aExp, bExp, zExp;\n\tbits64 aSig, bSig, zSig0, zSig1;\n\n\taSig = extractFloat64Frac( a );\n\taExp = extractFloat64Exp( a );\n\taSign = extractFloat64Sign( a );\n\tbSig = extractFloat64Frac( b );\n\tbExp = extractFloat64Exp( b );\n\tbSign = extractFloat64Sign( b );\n\tzSign = aSign ^ bSign;\n\tif ( aExp == 0x7FF ) {\n\t\tif ( aSig || ( ( bExp == 0x7FF ) && bSig ) ) {\n\t\t\treturn propagateFloat64NaN( a, b );\n\t\t}\n\t\tif ( ( bExp | bSig ) == 0 ) {\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t\treturn float64_default_nan;\n\t\t}\n\t\treturn packFloat64( zSign, 0x7FF, 0 );\n\t}\n\tif ( bExp == 0x7FF ) {\n\t\tif ( bSig ) return propagateFloat64NaN( a, b );\n\t\tif ( ( aExp | aSig ) == 0 ) {\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t\treturn float64_default_nan;\n\t\t}\n\t\treturn packFloat64( zSign, 0x7FF, 0 );\n\t}\n\tif ( aExp == 0 ) {\n\t\tif ( aSig == 0 ) return packFloat64( zSign, 0, 0 );\n\t\tnormalizeFloat64Subnormal( aSig, &aExp, &aSig );\n\t}\n\tif ( bExp == 0 ) {\n\t\tif ( bSig == 0 ) return packFloat64( zSign, 0, 0 );\n\t\tnormalizeFloat64Subnormal( bSig, &bExp, &bSig );\n\t}\n\tzExp = aExp + bExp - 0x3FF;\n\taSig = ( aSig | LIT64( 0x0010000000000000 ) )<<10;\n\tbSig = ( bSig | LIT64( 0x0010000000000000 ) )<<11;\n\tmul64To128( aSig, bSig, &zSig0, &zSig1 );\n\tzSig0 |= ( zSig1 != 0 );\n\tif ( 0 <= (sbits64) ( zSig0<<1 ) ) {\n\t\tzSig0 <<= 1;\n\t\t--zExp;\n\t}\n\treturn roundAndPackFloat64( zSign, zExp, zSig0 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of dividing the double-precision floating-point value `a'\n| by the corresponding value `b'.  The operation is performed according to\n| the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat64 float64_div( float64 a, float64 b )\n{\n\tflag aSign, bSign, zSign;\n\tint16 aExp, bExp, zExp;\n\tbits64 aSig, bSig, zSig;\n\tbits64 rem0, rem1;\n\tbits64 term0, term1;\n\n\taSig = extractFloat64Frac( a );\n\taExp = extractFloat64Exp( a );\n\taSign = extractFloat64Sign( a );\n\tbSig = extractFloat64Frac( b );\n\tbExp = extractFloat64Exp( b );\n\tbSign = extractFloat64Sign( b );\n\tzSign = aSign ^ bSign;\n\tif ( aExp == 0x7FF ) {\n\t\tif ( aSig ) return propagateFloat64NaN( a, b );\n\t\tif ( bExp == 0x7FF ) {\n\t\t\tif ( bSig ) return propagateFloat64NaN( a, b );\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t\treturn float64_default_nan;\n\t\t}\n\t\treturn packFloat64( zSign, 0x7FF, 0 );\n\t}\n\tif ( bExp == 0x7FF ) {\n\t\tif ( bSig ) return propagateFloat64NaN( a, b );\n\t\treturn packFloat64( zSign, 0, 0 );\n\t}\n\tif ( bExp == 0 ) {\n\t\tif ( bSig == 0 ) {\n\t\t\tif ( ( aExp | aSig ) == 0 ) {\n\t\t\t\tfloat_raise( float_flag_invalid );\n\t\t\t\treturn float64_default_nan;\n\t\t\t}\n\t\t\tfloat_raise( float_flag_divbyzero );\n\t\t\treturn packFloat64( zSign, 0x7FF, 0 );\n\t\t}\n\t\tnormalizeFloat64Subnormal( bSig, &bExp, &bSig );\n\t}\n\tif ( aExp == 0 ) {\n\t\tif ( aSig == 0 ) return packFloat64( zSign, 0, 0 );\n\t\tnormalizeFloat64Subnormal( aSig, &aExp, &aSig );\n\t}\n\tzExp = aExp - bExp + 0x3FD;\n\taSig = ( aSig | LIT64( 0x0010000000000000 ) )<<10;\n\tbSig = ( bSig | LIT64( 0x0010000000000000 ) )<<11;\n\tif ( bSig <= ( aSig + aSig ) ) {\n\t\taSig >>= 1;\n\t\t++zExp;\n\t}\n\tzSig = estimateDiv128To64( aSig, 0, bSig );\n\tif ( ( zSig & 0x1FF ) <= 2 ) {\n\t\tmul64To128( bSig, zSig, &term0, &term1 );\n\t\tsub128( aSig, 0, term0, term1, &rem0, &rem1 );\n\t\twhile ( (sbits64) rem0 < 0 ) {\n\t\t\t--zSig;\n\t\t\tadd128( rem0, rem1, 0, bSig, &rem0, &rem1 );\n\t\t}\n\t\tzSig |= ( rem1 != 0 );\n\t}\n\treturn roundAndPackFloat64( zSign, zExp, zSig );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the remainder of the double-precision floating-point value `a'\n| with respect to the corresponding value `b'.  The operation is performed\n| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat64 float64_rem( float64 a, float64 b )\n{\n\tflag aSign, zSign;\n\tint16 aExp, bExp, expDiff;\n\tbits64 aSig, bSig;\n\tbits64 q, alternateASig;\n\tsbits64 sigMean;\n\n\taSig = extractFloat64Frac( a );\n\taExp = extractFloat64Exp( a );\n\taSign = extractFloat64Sign( a );\n\tbSig = extractFloat64Frac( b );\n\tbExp = extractFloat64Exp( b );\n//    bSign = extractFloat64Sign( b );\n\tif ( aExp == 0x7FF ) {\n\t\tif ( aSig || ( ( bExp == 0x7FF ) && bSig ) ) {\n\t\t\treturn propagateFloat64NaN( a, b );\n\t\t}\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn float64_default_nan;\n\t}\n\tif ( bExp == 0x7FF ) {\n\t\tif ( bSig ) return propagateFloat64NaN( a, b );\n\t\treturn a;\n\t}\n\tif ( bExp == 0 ) {\n\t\tif ( bSig == 0 ) {\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t\treturn float64_default_nan;\n\t\t}\n\t\tnormalizeFloat64Subnormal( bSig, &bExp, &bSig );\n\t}\n\tif ( aExp == 0 ) {\n\t\tif ( aSig == 0 ) return a;\n\t\tnormalizeFloat64Subnormal( aSig, &aExp, &aSig );\n\t}\n\texpDiff = aExp - bExp;\n\taSig = ( aSig | LIT64( 0x0010000000000000 ) )<<11;\n\tbSig = ( bSig | LIT64( 0x0010000000000000 ) )<<11;\n\tif ( expDiff < 0 ) {\n\t\tif ( expDiff < -1 ) return a;\n\t\taSig >>= 1;\n\t}\n\tq = ( bSig <= aSig );\n\tif ( q ) aSig -= bSig;\n\texpDiff -= 64;\n\twhile ( 0 < expDiff ) {\n\t\tq = estimateDiv128To64( aSig, 0, bSig );\n\t\tq = ( 2 < q ) ? q - 2 : 0;\n\t\taSig = - ( ( bSig>>2 ) * q );\n\t\texpDiff -= 62;\n\t}\n\texpDiff += 64;\n\tif ( 0 < expDiff ) {\n\t\tq = estimateDiv128To64( aSig, 0, bSig );\n\t\tq = ( 2 < q ) ? q - 2 : 0;\n\t\tq >>= 64 - expDiff;\n\t\tbSig >>= 2;\n\t\taSig = ( ( aSig>>1 )<<( expDiff - 1 ) ) - bSig * q;\n\t}\n\telse {\n\t\taSig >>= 2;\n\t\tbSig >>= 2;\n\t}\n\tdo {\n\t\talternateASig = aSig;\n\t\t++q;\n\t\taSig -= bSig;\n\t} while ( 0 <= (sbits64) aSig );\n\tsigMean = aSig + alternateASig;\n\tif ( ( sigMean < 0 ) || ( ( sigMean == 0 ) && ( q & 1 ) ) ) {\n\t\taSig = alternateASig;\n\t}\n\tzSign = ( (sbits64) aSig < 0 );\n\tif ( zSign ) aSig = - aSig;\n\treturn normalizeRoundAndPackFloat64( aSign ^ zSign, bExp, aSig );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the square root of the double-precision floating-point value `a'.\n| The operation is performed according to the IEC/IEEE Standard for Binary\n| Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat64 float64_sqrt( float64 a )\n{\n\tflag aSign;\n\tint16 aExp, zExp;\n\tbits64 aSig, zSig, doubleZSig;\n\tbits64 rem0, rem1, term0, term1;\n//    float64 z;\n\n\taSig = extractFloat64Frac( a );\n\taExp = extractFloat64Exp( a );\n\taSign = extractFloat64Sign( a );\n\tif ( aExp == 0x7FF ) {\n\t\tif ( aSig ) return propagateFloat64NaN( a, a );\n\t\tif ( ! aSign ) return a;\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn float64_default_nan;\n\t}\n\tif ( aSign ) {\n\t\tif ( ( aExp | aSig ) == 0 ) return a;\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn float64_default_nan;\n\t}\n\tif ( aExp == 0 ) {\n\t\tif ( aSig == 0 ) return 0;\n\t\tnormalizeFloat64Subnormal( aSig, &aExp, &aSig );\n\t}\n\tzExp = ( ( aExp - 0x3FF )>>1 ) + 0x3FE;\n\taSig |= LIT64( 0x0010000000000000 );\n\tzSig = estimateSqrt32( aExp, aSig>>21 );\n\taSig <<= 9 - ( aExp & 1 );\n\tzSig = estimateDiv128To64( aSig, 0, zSig<<32 ) + ( zSig<<30 );\n\tif ( ( zSig & 0x1FF ) <= 5 ) {\n\t\tdoubleZSig = zSig<<1;\n\t\tmul64To128( zSig, zSig, &term0, &term1 );\n\t\tsub128( aSig, 0, term0, term1, &rem0, &rem1 );\n\t\twhile ( (sbits64) rem0 < 0 ) {\n\t\t\t--zSig;\n\t\t\tdoubleZSig -= 2;\n\t\t\tadd128( rem0, rem1, zSig>>63, doubleZSig | 1, &rem0, &rem1 );\n\t\t}\n\t\tzSig |= ( ( rem0 | rem1 ) != 0 );\n\t}\n\treturn roundAndPackFloat64( 0, zExp, zSig );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the double-precision floating-point value `a' is equal to the\n| corresponding value `b', and 0 otherwise.  The comparison is performed\n| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nflag float64_eq( float64 a, float64 b )\n{\n\tif (    ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) )\n\t\t\t|| ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) )\n\t\t) {\n\t\tif ( float64_is_signaling_nan( a ) || float64_is_signaling_nan( b ) ) {\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t}\n\t\treturn 0;\n\t}\n\treturn ( a == b ) || ( (bits64) ( ( a | b )<<1 ) == 0 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the double-precision floating-point value `a' is less than or\n| equal to the corresponding value `b', and 0 otherwise.  The comparison is\n| performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic.\n*----------------------------------------------------------------------------*/\n\nflag float64_le( float64 a, float64 b )\n{\n\tflag aSign, bSign;\n\n\tif (    ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) )\n\t\t\t|| ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) )\n\t\t) {\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn 0;\n\t}\n\taSign = extractFloat64Sign( a );\n\tbSign = extractFloat64Sign( b );\n\tif ( aSign != bSign ) return aSign || ( (bits64) ( ( a | b )<<1 ) == 0 );\n\treturn ( a == b ) || ( aSign ^ ( a < b ) );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the double-precision floating-point value `a' is less than\n| the corresponding value `b', and 0 otherwise.  The comparison is performed\n| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nflag float64_lt( float64 a, float64 b )\n{\n\tflag aSign, bSign;\n\n\tif (    ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) )\n\t\t\t|| ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) )\n\t\t) {\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn 0;\n\t}\n\taSign = extractFloat64Sign( a );\n\tbSign = extractFloat64Sign( b );\n\tif ( aSign != bSign ) return aSign && ( (bits64) ( ( a | b )<<1 ) != 0 );\n\treturn ( a != b ) && ( aSign ^ ( a < b ) );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the double-precision floating-point value `a' is equal to the\n| corresponding value `b', and 0 otherwise.  The invalid exception is raised\n| if either operand is a NaN.  Otherwise, the comparison is performed\n| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nflag float64_eq_signaling( float64 a, float64 b )\n{\n\tif (    ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) )\n\t\t\t|| ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) )\n\t\t) {\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn 0;\n\t}\n\treturn ( a == b ) || ( (bits64) ( ( a | b )<<1 ) == 0 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the double-precision floating-point value `a' is less than or\n| equal to the corresponding value `b', and 0 otherwise.  Quiet NaNs do not\n| cause an exception.  Otherwise, the comparison is performed according to the\n| IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nflag float64_le_quiet( float64 a, float64 b )\n{\n\tflag aSign, bSign;\n//    int16 aExp, bExp;\n\n\tif (    ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) )\n\t\t\t|| ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) )\n\t\t) {\n\t\tif ( float64_is_signaling_nan( a ) || float64_is_signaling_nan( b ) ) {\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t}\n\t\treturn 0;\n\t}\n\taSign = extractFloat64Sign( a );\n\tbSign = extractFloat64Sign( b );\n\tif ( aSign != bSign ) return aSign || ( (bits64) ( ( a | b )<<1 ) == 0 );\n\treturn ( a == b ) || ( aSign ^ ( a < b ) );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the double-precision floating-point value `a' is less than\n| the corresponding value `b', and 0 otherwise.  Quiet NaNs do not cause an\n| exception.  Otherwise, the comparison is performed according to the IEC/IEEE\n| Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nflag float64_lt_quiet( float64 a, float64 b )\n{\n\tflag aSign, bSign;\n\n\tif (    ( ( extractFloat64Exp( a ) == 0x7FF ) && extractFloat64Frac( a ) )\n\t\t\t|| ( ( extractFloat64Exp( b ) == 0x7FF ) && extractFloat64Frac( b ) )\n\t\t) {\n\t\tif ( float64_is_signaling_nan( a ) || float64_is_signaling_nan( b ) ) {\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t}\n\t\treturn 0;\n\t}\n\taSign = extractFloat64Sign( a );\n\tbSign = extractFloat64Sign( b );\n\tif ( aSign != bSign ) return aSign && ( (bits64) ( ( a | b )<<1 ) != 0 );\n\treturn ( a != b ) && ( aSign ^ ( a < b ) );\n\n}\n\n#ifdef FLOATX80\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the extended double-precision floating-\n| point value `a' to the 32-bit two's complement integer format.  The\n| conversion is performed according to the IEC/IEEE Standard for Binary\n| Floating-Point Arithmetic---which means in particular that the conversion\n| is rounded according to the current rounding mode.  If `a' is a NaN, the\n| largest positive integer is returned.  Otherwise, if the conversion\n| overflows, the largest integer with the same sign as `a' is returned.\n*----------------------------------------------------------------------------*/\n\nint32 floatx80_to_int32( floatx80 a )\n{\n\tflag aSign;\n\tint32 aExp, shiftCount;\n\tbits64 aSig;\n\n\taSig = extractFloatx80Frac( a );\n\taExp = extractFloatx80Exp( a );\n\taSign = extractFloatx80Sign( a );\n\tif ( ( aExp == 0x7FFF ) && (bits64) ( aSig<<1 ) ) aSign = 0;\n\tshiftCount = 0x4037 - aExp;\n\tif ( shiftCount <= 0 ) shiftCount = 1;\n\tshift64RightJamming( aSig, shiftCount, &aSig );\n\treturn roundAndPackInt32( aSign, aSig );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the extended double-precision floating-\n| point value `a' to the 32-bit two's complement integer format.  The\n| conversion is performed according to the IEC/IEEE Standard for Binary\n| Floating-Point Arithmetic, except that the conversion is always rounded\n| toward zero.  If `a' is a NaN, the largest positive integer is returned.\n| Otherwise, if the conversion overflows, the largest integer with the same\n| sign as `a' is returned.\n*----------------------------------------------------------------------------*/\n\nint32 floatx80_to_int32_round_to_zero( floatx80 a )\n{\n\tflag aSign;\n\tint32 aExp, shiftCount;\n\tbits64 aSig, savedASig;\n\tint32 z;\n\n\taSig = extractFloatx80Frac( a );\n\taExp = extractFloatx80Exp( a );\n\taSign = extractFloatx80Sign( a );\n\tif ( 0x401E < aExp ) {\n\t\tif ( ( aExp == 0x7FFF ) && (bits64) ( aSig<<1 ) ) aSign = 0;\n\t\tgoto invalid;\n\t}\n\telse if ( aExp < 0x3FFF ) {\n\t\tif ( aExp || aSig ) float_exception_flags |= float_flag_inexact;\n\t\treturn 0;\n\t}\n\tshiftCount = 0x403E - aExp;\n\tsavedASig = aSig;\n\taSig >>= shiftCount;\n\tz = aSig;\n\tif ( aSign ) z = - z;\n\tif ( ( z < 0 ) ^ aSign ) {\n\tinvalid:\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn aSign ? (sbits32) 0x80000000 : 0x7FFFFFFF;\n\t}\n\tif ( ( aSig<<shiftCount ) != savedASig ) {\n\t\tfloat_exception_flags |= float_flag_inexact;\n\t}\n\treturn z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the extended double-precision floating-\n| point value `a' to the 64-bit two's complement integer format.  The\n| conversion is performed according to the IEC/IEEE Standard for Binary\n| Floating-Point Arithmetic---which means in particular that the conversion\n| is rounded according to the current rounding mode.  If `a' is a NaN,\n| the largest positive integer is returned.  Otherwise, if the conversion\n| overflows, the largest integer with the same sign as `a' is returned.\n*----------------------------------------------------------------------------*/\n\nint64 floatx80_to_int64( floatx80 a )\n{\n\tflag aSign;\n\tint32 aExp, shiftCount;\n\tbits64 aSig, aSigExtra;\n\n\taSig = extractFloatx80Frac( a );\n\taExp = extractFloatx80Exp( a );\n\taSign = extractFloatx80Sign( a );\n\tshiftCount = 0x403E - aExp;\n\tif ( shiftCount <= 0 ) {\n\t\tif ( shiftCount ) {\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t\tif (    ! aSign\n\t\t\t\t\t|| (    ( aExp == 0x7FFF )\n\t\t\t\t\t\t&& ( aSig != LIT64( 0x8000000000000000 ) ) )\n\t\t\t\t) {\n\t\t\t\treturn LIT64( 0x7FFFFFFFFFFFFFFF );\n\t\t\t}\n\t\t\treturn (sbits64) LIT64( 0x8000000000000000 );\n\t\t}\n\t\taSigExtra = 0;\n\t}\n\telse {\n\t\tshift64ExtraRightJamming( aSig, 0, shiftCount, &aSig, &aSigExtra );\n\t}\n\treturn roundAndPackInt64( aSign, aSig, aSigExtra );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the extended double-precision floating-\n| point value `a' to the 64-bit two's complement integer format.  The\n| conversion is performed according to the IEC/IEEE Standard for Binary\n| Floating-Point Arithmetic, except that the conversion is always rounded\n| toward zero.  If `a' is a NaN, the largest positive integer is returned.\n| Otherwise, if the conversion overflows, the largest integer with the same\n| sign as `a' is returned.\n*----------------------------------------------------------------------------*/\n\nint64 floatx80_to_int64_round_to_zero( floatx80 a )\n{\n\tflag aSign;\n\tint32 aExp, shiftCount;\n\tbits64 aSig;\n\tint64 z;\n\n\taSig = extractFloatx80Frac( a );\n\taExp = extractFloatx80Exp( a );\n\taSign = extractFloatx80Sign( a );\n\tshiftCount = aExp - 0x403E;\n\tif ( 0 <= shiftCount ) {\n\t\taSig &= LIT64( 0x7FFFFFFFFFFFFFFF );\n\t\tif ( ( a.high != 0xC03E ) || aSig ) {\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t\tif ( ! aSign || ( ( aExp == 0x7FFF ) && aSig ) ) {\n\t\t\t\treturn LIT64( 0x7FFFFFFFFFFFFFFF );\n\t\t\t}\n\t\t}\n\t\treturn (sbits64) LIT64( 0x8000000000000000 );\n\t}\n\telse if ( aExp < 0x3FFF ) {\n\t\tif ( aExp | aSig ) float_exception_flags |= float_flag_inexact;\n\t\treturn 0;\n\t}\n\tz = aSig>>( - shiftCount );\n\tif ( (bits64) ( aSig<<( shiftCount & 63 ) ) ) {\n\t\tfloat_exception_flags |= float_flag_inexact;\n\t}\n\tif ( aSign ) z = - z;\n\treturn z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the extended double-precision floating-\n| point value `a' to the single-precision floating-point format.  The\n| conversion is performed according to the IEC/IEEE Standard for Binary\n| Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat32 floatx80_to_float32( floatx80 a )\n{\n\tflag aSign;\n\tint32 aExp;\n\tbits64 aSig;\n\n\taSig = extractFloatx80Frac( a );\n\taExp = extractFloatx80Exp( a );\n\taSign = extractFloatx80Sign( a );\n\tif ( aExp == 0x7FFF ) {\n\t\tif ( (bits64) ( aSig<<1 ) ) {\n\t\t\treturn commonNaNToFloat32( floatx80ToCommonNaN( a ) );\n\t\t}\n\t\treturn packFloat32( aSign, 0xFF, 0 );\n\t}\n\tshift64RightJamming( aSig, 33, &aSig );\n\tif ( aExp || aSig ) aExp -= 0x3F81;\n\treturn roundAndPackFloat32( aSign, aExp, aSig );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the extended double-precision floating-\n| point value `a' to the double-precision floating-point format.  The\n| conversion is performed according to the IEC/IEEE Standard for Binary\n| Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat64 floatx80_to_float64( floatx80 a )\n{\n\tflag aSign;\n\tint32 aExp;\n\tbits64 aSig, zSig;\n\n\taSig = extractFloatx80Frac( a );\n\taExp = extractFloatx80Exp( a );\n\taSign = extractFloatx80Sign( a );\n\tif ( aExp == 0x7FFF ) {\n\t\tif ( (bits64) ( aSig<<1 ) ) {\n\t\t\treturn commonNaNToFloat64( floatx80ToCommonNaN( a ) );\n\t\t}\n\t\treturn packFloat64( aSign, 0x7FF, 0 );\n\t}\n\tshift64RightJamming( aSig, 1, &zSig );\n\tif ( aExp || aSig ) aExp -= 0x3C01;\n\treturn roundAndPackFloat64( aSign, aExp, zSig );\n\n}\n\n#ifdef FLOAT128\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the extended double-precision floating-\n| point value `a' to the quadruple-precision floating-point format.  The\n| conversion is performed according to the IEC/IEEE Standard for Binary\n| Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat128 floatx80_to_float128( floatx80 a )\n{\n\tflag aSign;\n\tint16 aExp;\n\tbits64 aSig, zSig0, zSig1;\n\n\taSig = extractFloatx80Frac( a );\n\taExp = extractFloatx80Exp( a );\n\taSign = extractFloatx80Sign( a );\n\tif ( ( aExp == 0x7FFF ) && (bits64) ( aSig<<1 ) ) {\n\t\treturn commonNaNToFloat128( floatx80ToCommonNaN( a ) );\n\t}\n\tshift128Right( aSig<<1, 0, 16, &zSig0, &zSig1 );\n\treturn packFloat128( aSign, aExp, zSig0, zSig1 );\n\n}\n\n#endif\n\n/*----------------------------------------------------------------------------\n| Rounds the extended double-precision floating-point value `a' to an integer,\n| and returns the result as an extended quadruple-precision floating-point\n| value.  The operation is performed according to the IEC/IEEE Standard for\n| Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloatx80 floatx80_round_to_int( floatx80 a )\n{\n\tflag aSign;\n\tint32 aExp;\n\tbits64 lastBitMask, roundBitsMask;\n\tint8 roundingMode;\n\tfloatx80 z;\n\n\taExp = extractFloatx80Exp( a );\n\tif ( 0x403E <= aExp ) {\n\t\tif ( ( aExp == 0x7FFF ) && (bits64) ( extractFloatx80Frac( a )<<1 ) ) {\n\t\t\treturn propagateFloatx80NaN( a, a );\n\t\t}\n\t\treturn a;\n\t}\n\tif ( aExp < 0x3FFF ) {\n\t\tif (    ( aExp == 0 )\n\t\t\t\t&& ( (bits64) ( extractFloatx80Frac( a )<<1 ) == 0 ) ) {\n\t\t\treturn a;\n\t\t}\n\t\tfloat_exception_flags |= float_flag_inexact;\n\t\taSign = extractFloatx80Sign( a );\n\t\tswitch ( float_rounding_mode ) {\n\t\t\tcase float_round_nearest_even:\n\t\t\tif ( ( aExp == 0x3FFE ) && (bits64) ( extractFloatx80Frac( a )<<1 )\n\t\t\t\t) {\n\t\t\t\treturn\n\t\t\t\t\tpackFloatx80( aSign, 0x3FFF, LIT64( 0x8000000000000000 ) );\n\t\t\t}\n\t\t\tbreak;\n\t\t\tcase float_round_down:\n\t\t\treturn\n\t\t\t\t\taSign ?\n\t\t\t\t\t\tpackFloatx80( 1, 0x3FFF, LIT64( 0x8000000000000000 ) )\n\t\t\t\t: packFloatx80( 0, 0, 0 );\n\t\t\tcase float_round_up:\n\t\t\treturn\n\t\t\t\t\taSign ? packFloatx80( 1, 0, 0 )\n\t\t\t\t: packFloatx80( 0, 0x3FFF, LIT64( 0x8000000000000000 ) );\n\t\t}\n\t\treturn packFloatx80( aSign, 0, 0 );\n\t}\n\tlastBitMask = 1;\n\tlastBitMask <<= 0x403E - aExp;\n\troundBitsMask = lastBitMask - 1;\n\tz = a;\n\troundingMode = float_rounding_mode;\n\tif ( roundingMode == float_round_nearest_even ) {\n\t\tz.low += lastBitMask>>1;\n\t\tif ( ( z.low & roundBitsMask ) == 0 ) z.low &= ~ lastBitMask;\n\t}\n\telse if ( roundingMode != float_round_to_zero ) {\n\t\tif ( extractFloatx80Sign( z ) ^ ( roundingMode == float_round_up ) ) {\n\t\t\tz.low += roundBitsMask;\n\t\t}\n\t}\n\tz.low &= ~ roundBitsMask;\n\tif ( z.low == 0 ) {\n\t\t++z.high;\n\t\tz.low = LIT64( 0x8000000000000000 );\n\t}\n\tif ( z.low != a.low ) float_exception_flags |= float_flag_inexact;\n\treturn z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of adding the absolute values of the extended double-\n| precision floating-point values `a' and `b'.  If `zSign' is 1, the sum is\n| negated before being returned.  `zSign' is ignored if the result is a NaN.\n| The addition is performed according to the IEC/IEEE Standard for Binary\n| Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nstatic floatx80 addFloatx80Sigs( floatx80 a, floatx80 b, flag zSign )\n{\n\tint32 aExp, bExp, zExp;\n\tbits64 aSig, bSig, zSig0, zSig1;\n\tint32 expDiff;\n\n\taSig = extractFloatx80Frac( a );\n\taExp = extractFloatx80Exp( a );\n\tbSig = extractFloatx80Frac( b );\n\tbExp = extractFloatx80Exp( b );\n\texpDiff = aExp - bExp;\n\tif ( 0 < expDiff ) {\n\t\tif ( aExp == 0x7FFF ) {\n\t\t\tif ( (bits64) ( aSig<<1 ) ) return propagateFloatx80NaN( a, b );\n\t\t\treturn a;\n\t\t}\n\t\tif ( bExp == 0 ) --expDiff;\n\t\tshift64ExtraRightJamming( bSig, 0, expDiff, &bSig, &zSig1 );\n\t\tzExp = aExp;\n\t}\n\telse if ( expDiff < 0 ) {\n\t\tif ( bExp == 0x7FFF ) {\n\t\t\tif ( (bits64) ( bSig<<1 ) ) return propagateFloatx80NaN( a, b );\n\t\t\treturn packFloatx80( zSign, 0x7FFF, LIT64( 0x8000000000000000 ) );\n\t\t}\n\t\tif ( aExp == 0 ) ++expDiff;\n\t\tshift64ExtraRightJamming( aSig, 0, - expDiff, &aSig, &zSig1 );\n\t\tzExp = bExp;\n\t}\n\telse {\n\t\tif ( aExp == 0x7FFF ) {\n\t\t\tif ( (bits64) ( ( aSig | bSig )<<1 ) ) {\n\t\t\t\treturn propagateFloatx80NaN( a, b );\n\t\t\t}\n\t\t\treturn a;\n\t\t}\n\t\tzSig1 = 0;\n\t\tzSig0 = aSig + bSig;\n\t\tif ( aExp == 0 ) {\n\t\t\tnormalizeFloatx80Subnormal( zSig0, &zExp, &zSig0 );\n\t\t\tgoto roundAndPack;\n\t\t}\n\t\tzExp = aExp;\n\t\tgoto shiftRight1;\n\t}\n\tzSig0 = aSig + bSig;\n\tif ( (sbits64) zSig0 < 0 ) goto roundAndPack;\n\tshiftRight1:\n\tshift64ExtraRightJamming( zSig0, zSig1, 1, &zSig0, &zSig1 );\n\tzSig0 |= LIT64( 0x8000000000000000 );\n\t++zExp;\n\troundAndPack:\n\treturn\n\t\troundAndPackFloatx80(\n\t\t\tfloatx80_rounding_precision, zSign, zExp, zSig0, zSig1 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of subtracting the absolute values of the extended\n| double-precision floating-point values `a' and `b'.  If `zSign' is 1, the\n| difference is negated before being returned.  `zSign' is ignored if the\n| result is a NaN.  The subtraction is performed according to the IEC/IEEE\n| Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nstatic floatx80 subFloatx80Sigs( floatx80 a, floatx80 b, flag zSign )\n{\n\tint32 aExp, bExp, zExp;\n\tbits64 aSig, bSig, zSig0, zSig1;\n\tint32 expDiff;\n\tfloatx80 z;\n\n\taSig = extractFloatx80Frac( a );\n\taExp = extractFloatx80Exp( a );\n\tbSig = extractFloatx80Frac( b );\n\tbExp = extractFloatx80Exp( b );\n\texpDiff = aExp - bExp;\n\tif ( 0 < expDiff ) goto aExpBigger;\n\tif ( expDiff < 0 ) goto bExpBigger;\n\tif ( aExp == 0x7FFF ) {\n\t\tif ( (bits64) ( ( aSig | bSig )<<1 ) ) {\n\t\t\treturn propagateFloatx80NaN( a, b );\n\t\t}\n\t\tfloat_raise( float_flag_invalid );\n\t\tz.low = floatx80_default_nan_low;\n\t\tz.high = floatx80_default_nan_high;\n\t\treturn z;\n\t}\n\tif ( aExp == 0 ) {\n\t\taExp = 1;\n\t\tbExp = 1;\n\t}\n\tzSig1 = 0;\n\tif ( bSig < aSig ) goto aBigger;\n\tif ( aSig < bSig ) goto bBigger;\n\treturn packFloatx80( float_rounding_mode == float_round_down, 0, 0 );\n\tbExpBigger:\n\tif ( bExp == 0x7FFF ) {\n\t\tif ( (bits64) ( bSig<<1 ) ) return propagateFloatx80NaN( a, b );\n\t\treturn packFloatx80( zSign ^ 1, 0x7FFF, LIT64( 0x8000000000000000 ) );\n\t}\n\tif ( aExp == 0 ) ++expDiff;\n\tshift128RightJamming( aSig, 0, - expDiff, &aSig, &zSig1 );\n\tbBigger:\n\tsub128( bSig, 0, aSig, zSig1, &zSig0, &zSig1 );\n\tzExp = bExp;\n\tzSign ^= 1;\n\tgoto normalizeRoundAndPack;\n\taExpBigger:\n\tif ( aExp == 0x7FFF ) {\n\t\tif ( (bits64) ( aSig<<1 ) ) return propagateFloatx80NaN( a, b );\n\t\treturn a;\n\t}\n\tif ( bExp == 0 ) --expDiff;\n\tshift128RightJamming( bSig, 0, expDiff, &bSig, &zSig1 );\n\taBigger:\n\tsub128( aSig, 0, bSig, zSig1, &zSig0, &zSig1 );\n\tzExp = aExp;\n\tnormalizeRoundAndPack:\n\treturn\n\t\tnormalizeRoundAndPackFloatx80(\n\t\t\tfloatx80_rounding_precision, zSign, zExp, zSig0, zSig1 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of adding the extended double-precision floating-point\n| values `a' and `b'.  The operation is performed according to the IEC/IEEE\n| Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloatx80 floatx80_add( floatx80 a, floatx80 b )\n{\n\tflag aSign, bSign;\n\n\taSign = extractFloatx80Sign( a );\n\tbSign = extractFloatx80Sign( b );\n\tif ( aSign == bSign ) {\n\t\treturn addFloatx80Sigs( a, b, aSign );\n\t}\n\telse {\n\t\treturn subFloatx80Sigs( a, b, aSign );\n\t}\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of subtracting the extended double-precision floating-\n| point values `a' and `b'.  The operation is performed according to the\n| IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloatx80 floatx80_sub( floatx80 a, floatx80 b )\n{\n\tflag aSign, bSign;\n\n\taSign = extractFloatx80Sign( a );\n\tbSign = extractFloatx80Sign( b );\n\tif ( aSign == bSign ) {\n\t\treturn subFloatx80Sigs( a, b, aSign );\n\t}\n\telse {\n\t\treturn addFloatx80Sigs( a, b, aSign );\n\t}\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of multiplying the extended double-precision floating-\n| point values `a' and `b'.  The operation is performed according to the\n| IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloatx80 floatx80_mul( floatx80 a, floatx80 b )\n{\n\tflag aSign, bSign, zSign;\n\tint32 aExp, bExp, zExp;\n\tbits64 aSig, bSig, zSig0, zSig1;\n\tfloatx80 z;\n\n\taSig = extractFloatx80Frac( a );\n\taExp = extractFloatx80Exp( a );\n\taSign = extractFloatx80Sign( a );\n\tbSig = extractFloatx80Frac( b );\n\tbExp = extractFloatx80Exp( b );\n\tbSign = extractFloatx80Sign( b );\n\tzSign = aSign ^ bSign;\n\tif ( aExp == 0x7FFF ) {\n\t\tif (    (bits64) ( aSig<<1 )\n\t\t\t\t|| ( ( bExp == 0x7FFF ) && (bits64) ( bSig<<1 ) ) ) {\n\t\t\treturn propagateFloatx80NaN( a, b );\n\t\t}\n\t\tif ( ( bExp | bSig ) == 0 ) goto invalid;\n\t\treturn packFloatx80( zSign, 0x7FFF, LIT64( 0x8000000000000000 ) );\n\t}\n\tif ( bExp == 0x7FFF ) {\n\t\tif ( (bits64) ( bSig<<1 ) ) return propagateFloatx80NaN( a, b );\n\t\tif ( ( aExp | aSig ) == 0 ) {\n\tinvalid:\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t\tz.low = floatx80_default_nan_low;\n\t\t\tz.high = floatx80_default_nan_high;\n\t\t\treturn z;\n\t\t}\n\t\treturn packFloatx80( zSign, 0x7FFF, LIT64( 0x8000000000000000 ) );\n\t}\n\tif ( aExp == 0 ) {\n\t\tif ( aSig == 0 ) return packFloatx80( zSign, 0, 0 );\n\t\tnormalizeFloatx80Subnormal( aSig, &aExp, &aSig );\n\t}\n\tif ( bExp == 0 ) {\n\t\tif ( bSig == 0 ) return packFloatx80( zSign, 0, 0 );\n\t\tnormalizeFloatx80Subnormal( bSig, &bExp, &bSig );\n\t}\n\tzExp = aExp + bExp - 0x3FFE;\n\tmul64To128( aSig, bSig, &zSig0, &zSig1 );\n\tif ( 0 < (sbits64) zSig0 ) {\n\t\tshortShift128Left( zSig0, zSig1, 1, &zSig0, &zSig1 );\n\t\t--zExp;\n\t}\n\treturn\n\t\troundAndPackFloatx80(\n\t\t\tfloatx80_rounding_precision, zSign, zExp, zSig0, zSig1 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of dividing the extended double-precision floating-point\n| value `a' by the corresponding value `b'.  The operation is performed\n| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloatx80 floatx80_div( floatx80 a, floatx80 b )\n{\n\tflag aSign, bSign, zSign;\n\tint32 aExp, bExp, zExp;\n\tbits64 aSig, bSig, zSig0, zSig1;\n\tbits64 rem0, rem1, rem2, term0, term1, term2;\n\tfloatx80 z;\n\n\taSig = extractFloatx80Frac( a );\n\taExp = extractFloatx80Exp( a );\n\taSign = extractFloatx80Sign( a );\n\tbSig = extractFloatx80Frac( b );\n\tbExp = extractFloatx80Exp( b );\n\tbSign = extractFloatx80Sign( b );\n\tzSign = aSign ^ bSign;\n\tif ( aExp == 0x7FFF ) {\n\t\tif ( (bits64) ( aSig<<1 ) ) return propagateFloatx80NaN( a, b );\n\t\tif ( bExp == 0x7FFF ) {\n\t\t\tif ( (bits64) ( bSig<<1 ) ) return propagateFloatx80NaN( a, b );\n\t\t\tgoto invalid;\n\t\t}\n\t\treturn packFloatx80( zSign, 0x7FFF, LIT64( 0x8000000000000000 ) );\n\t}\n\tif ( bExp == 0x7FFF ) {\n\t\tif ( (bits64) ( bSig<<1 ) ) return propagateFloatx80NaN( a, b );\n\t\treturn packFloatx80( zSign, 0, 0 );\n\t}\n\tif ( bExp == 0 ) {\n\t\tif ( bSig == 0 ) {\n\t\t\tif ( ( aExp | aSig ) == 0 ) {\n\tinvalid:\n\t\t\t\tfloat_raise( float_flag_invalid );\n\t\t\t\tz.low = floatx80_default_nan_low;\n\t\t\t\tz.high = floatx80_default_nan_high;\n\t\t\t\treturn z;\n\t\t\t}\n\t\t\tfloat_raise( float_flag_divbyzero );\n\t\t\treturn packFloatx80( zSign, 0x7FFF, LIT64( 0x8000000000000000 ) );\n\t\t}\n\t\tnormalizeFloatx80Subnormal( bSig, &bExp, &bSig );\n\t}\n\tif ( aExp == 0 ) {\n\t\tif ( aSig == 0 ) return packFloatx80( zSign, 0, 0 );\n\t\tnormalizeFloatx80Subnormal( aSig, &aExp, &aSig );\n\t}\n\tzExp = aExp - bExp + 0x3FFE;\n\trem1 = 0;\n\tif ( bSig <= aSig ) {\n\t\tshift128Right( aSig, 0, 1, &aSig, &rem1 );\n\t\t++zExp;\n\t}\n\tzSig0 = estimateDiv128To64( aSig, rem1, bSig );\n\tmul64To128( bSig, zSig0, &term0, &term1 );\n\tsub128( aSig, rem1, term0, term1, &rem0, &rem1 );\n\twhile ( (sbits64) rem0 < 0 ) {\n\t\t--zSig0;\n\t\tadd128( rem0, rem1, 0, bSig, &rem0, &rem1 );\n\t}\n\tzSig1 = estimateDiv128To64( rem1, 0, bSig );\n\tif ( (bits64) ( zSig1<<1 ) <= 8 ) {\n\t\tmul64To128( bSig, zSig1, &term1, &term2 );\n\t\tsub128( rem1, 0, term1, term2, &rem1, &rem2 );\n\t\twhile ( (sbits64) rem1 < 0 ) {\n\t\t\t--zSig1;\n\t\t\tadd128( rem1, rem2, 0, bSig, &rem1, &rem2 );\n\t\t}\n\t\tzSig1 |= ( ( rem1 | rem2 ) != 0 );\n\t}\n\treturn\n\t\troundAndPackFloatx80(\n\t\t\tfloatx80_rounding_precision, zSign, zExp, zSig0, zSig1 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the remainder of the extended double-precision floating-point value\n| `a' with respect to the corresponding value `b'.  The operation is performed\n| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloatx80 floatx80_rem( floatx80 a, floatx80 b )\n{\n\tflag aSign, zSign;\n\tint32 aExp, bExp, expDiff;\n\tbits64 aSig0, aSig1, bSig;\n\tbits64 q, term0, term1, alternateASig0, alternateASig1;\n\tfloatx80 z;\n\n\taSig0 = extractFloatx80Frac( a );\n\taExp = extractFloatx80Exp( a );\n\taSign = extractFloatx80Sign( a );\n\tbSig = extractFloatx80Frac( b );\n\tbExp = extractFloatx80Exp( b );\n//    bSign = extractFloatx80Sign( b );\n\tif ( aExp == 0x7FFF ) {\n\t\tif (    (bits64) ( aSig0<<1 )\n\t\t\t\t|| ( ( bExp == 0x7FFF ) && (bits64) ( bSig<<1 ) ) ) {\n\t\t\treturn propagateFloatx80NaN( a, b );\n\t\t}\n\t\tgoto invalid;\n\t}\n\tif ( bExp == 0x7FFF ) {\n\t\tif ( (bits64) ( bSig<<1 ) ) return propagateFloatx80NaN( a, b );\n\t\treturn a;\n\t}\n\tif ( bExp == 0 ) {\n\t\tif ( bSig == 0 ) {\n\tinvalid:\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t\tz.low = floatx80_default_nan_low;\n\t\t\tz.high = floatx80_default_nan_high;\n\t\t\treturn z;\n\t\t}\n\t\tnormalizeFloatx80Subnormal( bSig, &bExp, &bSig );\n\t}\n\tif ( aExp == 0 ) {\n\t\tif ( (bits64) ( aSig0<<1 ) == 0 ) return a;\n\t\tnormalizeFloatx80Subnormal( aSig0, &aExp, &aSig0 );\n\t}\n\tbSig |= LIT64( 0x8000000000000000 );\n\tzSign = aSign;\n\texpDiff = aExp - bExp;\n\taSig1 = 0;\n\tif ( expDiff < 0 ) {\n\t\tif ( expDiff < -1 ) return a;\n\t\tshift128Right( aSig0, 0, 1, &aSig0, &aSig1 );\n\t\texpDiff = 0;\n\t}\n\tq = ( bSig <= aSig0 );\n\tif ( q ) aSig0 -= bSig;\n\texpDiff -= 64;\n\twhile ( 0 < expDiff ) {\n\t\tq = estimateDiv128To64( aSig0, aSig1, bSig );\n\t\tq = ( 2 < q ) ? q - 2 : 0;\n\t\tmul64To128( bSig, q, &term0, &term1 );\n\t\tsub128( aSig0, aSig1, term0, term1, &aSig0, &aSig1 );\n\t\tshortShift128Left( aSig0, aSig1, 62, &aSig0, &aSig1 );\n\t\texpDiff -= 62;\n\t}\n\texpDiff += 64;\n\tif ( 0 < expDiff ) {\n\t\tq = estimateDiv128To64( aSig0, aSig1, bSig );\n\t\tq = ( 2 < q ) ? q - 2 : 0;\n\t\tq >>= 64 - expDiff;\n\t\tmul64To128( bSig, q<<( 64 - expDiff ), &term0, &term1 );\n\t\tsub128( aSig0, aSig1, term0, term1, &aSig0, &aSig1 );\n\t\tshortShift128Left( 0, bSig, 64 - expDiff, &term0, &term1 );\n\t\twhile ( le128( term0, term1, aSig0, aSig1 ) ) {\n\t\t\t++q;\n\t\t\tsub128( aSig0, aSig1, term0, term1, &aSig0, &aSig1 );\n\t\t}\n\t}\n\telse {\n\t\tterm1 = 0;\n\t\tterm0 = bSig;\n\t}\n\tsub128( term0, term1, aSig0, aSig1, &alternateASig0, &alternateASig1 );\n\tif (    lt128( alternateASig0, alternateASig1, aSig0, aSig1 )\n\t\t\t|| (    eq128( alternateASig0, alternateASig1, aSig0, aSig1 )\n\t\t\t\t&& ( q & 1 ) )\n\t\t) {\n\t\taSig0 = alternateASig0;\n\t\taSig1 = alternateASig1;\n\t\tzSign = ! zSign;\n\t}\n\treturn\n\t\tnormalizeRoundAndPackFloatx80(\n\t\t\t80, zSign, bExp + expDiff, aSig0, aSig1 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the square root of the extended double-precision floating-point\n| value `a'.  The operation is performed according to the IEC/IEEE Standard\n| for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloatx80 floatx80_sqrt( floatx80 a )\n{\n\tflag aSign;\n\tint32 aExp, zExp;\n\tbits64 aSig0, aSig1, zSig0, zSig1, doubleZSig0;\n\tbits64 rem0, rem1, rem2, rem3, term0, term1, term2, term3;\n\tfloatx80 z;\n\n\taSig0 = extractFloatx80Frac( a );\n\taExp = extractFloatx80Exp( a );\n\taSign = extractFloatx80Sign( a );\n\tif ( aExp == 0x7FFF ) {\n\t\tif ( (bits64) ( aSig0<<1 ) ) return propagateFloatx80NaN( a, a );\n\t\tif ( ! aSign ) return a;\n\t\tgoto invalid;\n\t}\n\tif ( aSign ) {\n\t\tif ( ( aExp | aSig0 ) == 0 ) return a;\n\tinvalid:\n\t\tfloat_raise( float_flag_invalid );\n\t\tz.low = floatx80_default_nan_low;\n\t\tz.high = floatx80_default_nan_high;\n\t\treturn z;\n\t}\n\tif ( aExp == 0 ) {\n\t\tif ( aSig0 == 0 ) return packFloatx80( 0, 0, 0 );\n\t\tnormalizeFloatx80Subnormal( aSig0, &aExp, &aSig0 );\n\t}\n\tzExp = ( ( aExp - 0x3FFF )>>1 ) + 0x3FFF;\n\tzSig0 = estimateSqrt32( aExp, aSig0>>32 );\n\tshift128Right( aSig0, 0, 2 + ( aExp & 1 ), &aSig0, &aSig1 );\n\tzSig0 = estimateDiv128To64( aSig0, aSig1, zSig0<<32 ) + ( zSig0<<30 );\n\tdoubleZSig0 = zSig0<<1;\n\tmul64To128( zSig0, zSig0, &term0, &term1 );\n\tsub128( aSig0, aSig1, term0, term1, &rem0, &rem1 );\n\twhile ( (sbits64) rem0 < 0 ) {\n\t\t--zSig0;\n\t\tdoubleZSig0 -= 2;\n\t\tadd128( rem0, rem1, zSig0>>63, doubleZSig0 | 1, &rem0, &rem1 );\n\t}\n\tzSig1 = estimateDiv128To64( rem1, 0, doubleZSig0 );\n\tif ( ( zSig1 & LIT64( 0x3FFFFFFFFFFFFFFF ) ) <= 5 ) {\n\t\tif ( zSig1 == 0 ) zSig1 = 1;\n\t\tmul64To128( doubleZSig0, zSig1, &term1, &term2 );\n\t\tsub128( rem1, 0, term1, term2, &rem1, &rem2 );\n\t\tmul64To128( zSig1, zSig1, &term2, &term3 );\n\t\tsub192( rem1, rem2, 0, 0, term2, term3, &rem1, &rem2, &rem3 );\n\t\twhile ( (sbits64) rem1 < 0 ) {\n\t\t\t--zSig1;\n\t\t\tshortShift128Left( 0, zSig1, 1, &term2, &term3 );\n\t\t\tterm3 |= 1;\n\t\t\tterm2 |= doubleZSig0;\n\t\t\tadd192( rem1, rem2, rem3, 0, term2, term3, &rem1, &rem2, &rem3 );\n\t\t}\n\t\tzSig1 |= ( ( rem1 | rem2 | rem3 ) != 0 );\n\t}\n\tshortShift128Left( 0, zSig1, 1, &zSig0, &zSig1 );\n\tzSig0 |= doubleZSig0;\n\treturn\n\t\troundAndPackFloatx80(\n\t\t\tfloatx80_rounding_precision, 0, zExp, zSig0, zSig1 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the extended double-precision floating-point value `a' is\n| equal to the corresponding value `b', and 0 otherwise.  The comparison is\n| performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic.\n*----------------------------------------------------------------------------*/\n\nflag floatx80_eq( floatx80 a, floatx80 b )\n{\n\tif (    (    ( extractFloatx80Exp( a ) == 0x7FFF )\n\t\t\t\t&& (bits64) ( extractFloatx80Frac( a )<<1 ) )\n\t\t\t|| (    ( extractFloatx80Exp( b ) == 0x7FFF )\n\t\t\t\t&& (bits64) ( extractFloatx80Frac( b )<<1 ) )\n\t\t) {\n\t\tif (    floatx80_is_signaling_nan( a )\n\t\t\t\t|| floatx80_is_signaling_nan( b ) ) {\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t}\n\t\treturn 0;\n\t}\n\treturn\n\t\t\t( a.low == b.low )\n\t\t&& (    ( a.high == b.high )\n\t\t\t\t|| (    ( a.low == 0 )\n\t\t\t\t\t&& ( (bits16) ( ( a.high | b.high )<<1 ) == 0 ) )\n\t\t\t);\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the extended double-precision floating-point value `a' is\n| less than or equal to the corresponding value `b', and 0 otherwise.  The\n| comparison is performed according to the IEC/IEEE Standard for Binary\n| Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nflag floatx80_le( floatx80 a, floatx80 b )\n{\n\tflag aSign, bSign;\n\n\tif (    (    ( extractFloatx80Exp( a ) == 0x7FFF )\n\t\t\t\t&& (bits64) ( extractFloatx80Frac( a )<<1 ) )\n\t\t\t|| (    ( extractFloatx80Exp( b ) == 0x7FFF )\n\t\t\t\t&& (bits64) ( extractFloatx80Frac( b )<<1 ) )\n\t\t) {\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn 0;\n\t}\n\taSign = extractFloatx80Sign( a );\n\tbSign = extractFloatx80Sign( b );\n\tif ( aSign != bSign ) {\n\t\treturn\n\t\t\t\taSign\n\t\t\t|| (    ( ( (bits16) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )\n\t\t\t\t\t== 0 );\n\t}\n\treturn\n\t\t\taSign ? le128( b.high, b.low, a.high, a.low )\n\t\t: le128( a.high, a.low, b.high, b.low );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the extended double-precision floating-point value `a' is\n| less than the corresponding value `b', and 0 otherwise.  The comparison\n| is performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic.\n*----------------------------------------------------------------------------*/\n\nflag floatx80_lt( floatx80 a, floatx80 b )\n{\n\tflag aSign, bSign;\n\n\tif (    (    ( extractFloatx80Exp( a ) == 0x7FFF )\n\t\t\t\t&& (bits64) ( extractFloatx80Frac( a )<<1 ) )\n\t\t\t|| (    ( extractFloatx80Exp( b ) == 0x7FFF )\n\t\t\t\t&& (bits64) ( extractFloatx80Frac( b )<<1 ) )\n\t\t) {\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn 0;\n\t}\n\taSign = extractFloatx80Sign( a );\n\tbSign = extractFloatx80Sign( b );\n\tif ( aSign != bSign ) {\n\t\treturn\n\t\t\t\taSign\n\t\t\t&& (    ( ( (bits16) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )\n\t\t\t\t\t!= 0 );\n\t}\n\treturn\n\t\t\taSign ? lt128( b.high, b.low, a.high, a.low )\n\t\t: lt128( a.high, a.low, b.high, b.low );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the extended double-precision floating-point value `a' is equal\n| to the corresponding value `b', and 0 otherwise.  The invalid exception is\n| raised if either operand is a NaN.  Otherwise, the comparison is performed\n| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nflag floatx80_eq_signaling( floatx80 a, floatx80 b )\n{\n\tif (    (    ( extractFloatx80Exp( a ) == 0x7FFF )\n\t\t\t\t&& (bits64) ( extractFloatx80Frac( a )<<1 ) )\n\t\t\t|| (    ( extractFloatx80Exp( b ) == 0x7FFF )\n\t\t\t\t&& (bits64) ( extractFloatx80Frac( b )<<1 ) )\n\t\t) {\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn 0;\n\t}\n\treturn\n\t\t\t( a.low == b.low )\n\t\t&& (    ( a.high == b.high )\n\t\t\t\t|| (    ( a.low == 0 )\n\t\t\t\t\t&& ( (bits16) ( ( a.high | b.high )<<1 ) == 0 ) )\n\t\t\t);\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the extended double-precision floating-point value `a' is less\n| than or equal to the corresponding value `b', and 0 otherwise.  Quiet NaNs\n| do not cause an exception.  Otherwise, the comparison is performed according\n| to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nflag floatx80_le_quiet( floatx80 a, floatx80 b )\n{\n\tflag aSign, bSign;\n\n\tif (    (    ( extractFloatx80Exp( a ) == 0x7FFF )\n\t\t\t\t&& (bits64) ( extractFloatx80Frac( a )<<1 ) )\n\t\t\t|| (    ( extractFloatx80Exp( b ) == 0x7FFF )\n\t\t\t\t&& (bits64) ( extractFloatx80Frac( b )<<1 ) )\n\t\t) {\n\t\tif (    floatx80_is_signaling_nan( a )\n\t\t\t\t|| floatx80_is_signaling_nan( b ) ) {\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t}\n\t\treturn 0;\n\t}\n\taSign = extractFloatx80Sign( a );\n\tbSign = extractFloatx80Sign( b );\n\tif ( aSign != bSign ) {\n\t\treturn\n\t\t\t\taSign\n\t\t\t|| (    ( ( (bits16) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )\n\t\t\t\t\t== 0 );\n\t}\n\treturn\n\t\t\taSign ? le128( b.high, b.low, a.high, a.low )\n\t\t: le128( a.high, a.low, b.high, b.low );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the extended double-precision floating-point value `a' is less\n| than the corresponding value `b', and 0 otherwise.  Quiet NaNs do not cause\n| an exception.  Otherwise, the comparison is performed according to the\n| IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nflag floatx80_lt_quiet( floatx80 a, floatx80 b )\n{\n\tflag aSign, bSign;\n\n\tif (    (    ( extractFloatx80Exp( a ) == 0x7FFF )\n\t\t\t\t&& (bits64) ( extractFloatx80Frac( a )<<1 ) )\n\t\t\t|| (    ( extractFloatx80Exp( b ) == 0x7FFF )\n\t\t\t\t&& (bits64) ( extractFloatx80Frac( b )<<1 ) )\n\t\t) {\n\t\tif (    floatx80_is_signaling_nan( a )\n\t\t\t\t|| floatx80_is_signaling_nan( b ) ) {\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t}\n\t\treturn 0;\n\t}\n\taSign = extractFloatx80Sign( a );\n\tbSign = extractFloatx80Sign( b );\n\tif ( aSign != bSign ) {\n\t\treturn\n\t\t\t\taSign\n\t\t\t&& (    ( ( (bits16) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )\n\t\t\t\t\t!= 0 );\n\t}\n\treturn\n\t\t\taSign ? lt128( b.high, b.low, a.high, a.low )\n\t\t: lt128( a.high, a.low, b.high, b.low );\n\n}\n\n#endif\n\n#ifdef FLOAT128\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the quadruple-precision floating-point\n| value `a' to the 32-bit two's complement integer format.  The conversion\n| is performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic---which means in particular that the conversion is rounded\n| according to the current rounding mode.  If `a' is a NaN, the largest\n| positive integer is returned.  Otherwise, if the conversion overflows, the\n| largest integer with the same sign as `a' is returned.\n*----------------------------------------------------------------------------*/\n\nint32 float128_to_int32( float128 a )\n{\n\tflag aSign;\n\tint32 aExp, shiftCount;\n\tbits64 aSig0, aSig1;\n\n\taSig1 = extractFloat128Frac1( a );\n\taSig0 = extractFloat128Frac0( a );\n\taExp = extractFloat128Exp( a );\n\taSign = extractFloat128Sign( a );\n\tif ( ( aExp == 0x7FFF ) && ( aSig0 | aSig1 ) ) aSign = 0;\n\tif ( aExp ) aSig0 |= LIT64( 0x0001000000000000 );\n\taSig0 |= ( aSig1 != 0 );\n\tshiftCount = 0x4028 - aExp;\n\tif ( 0 < shiftCount ) shift64RightJamming( aSig0, shiftCount, &aSig0 );\n\treturn roundAndPackInt32( aSign, aSig0 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the quadruple-precision floating-point\n| value `a' to the 32-bit two's complement integer format.  The conversion\n| is performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic, except that the conversion is always rounded toward zero.  If\n| `a' is a NaN, the largest positive integer is returned.  Otherwise, if the\n| conversion overflows, the largest integer with the same sign as `a' is\n| returned.\n*----------------------------------------------------------------------------*/\n\nint32 float128_to_int32_round_to_zero( float128 a )\n{\n\tflag aSign;\n\tint32 aExp, shiftCount;\n\tbits64 aSig0, aSig1, savedASig;\n\tint32 z;\n\n\taSig1 = extractFloat128Frac1( a );\n\taSig0 = extractFloat128Frac0( a );\n\taExp = extractFloat128Exp( a );\n\taSign = extractFloat128Sign( a );\n\taSig0 |= ( aSig1 != 0 );\n\tif ( 0x401E < aExp ) {\n\t\tif ( ( aExp == 0x7FFF ) && aSig0 ) aSign = 0;\n\t\tgoto invalid;\n\t}\n\telse if ( aExp < 0x3FFF ) {\n\t\tif ( aExp || aSig0 ) float_exception_flags |= float_flag_inexact;\n\t\treturn 0;\n\t}\n\taSig0 |= LIT64( 0x0001000000000000 );\n\tshiftCount = 0x402F - aExp;\n\tsavedASig = aSig0;\n\taSig0 >>= shiftCount;\n\tz = aSig0;\n\tif ( aSign ) z = - z;\n\tif ( ( z < 0 ) ^ aSign ) {\n\tinvalid:\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn aSign ? (sbits32) 0x80000000 : 0x7FFFFFFF;\n\t}\n\tif ( ( aSig0<<shiftCount ) != savedASig ) {\n\t\tfloat_exception_flags |= float_flag_inexact;\n\t}\n\treturn z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the quadruple-precision floating-point\n| value `a' to the 64-bit two's complement integer format.  The conversion\n| is performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic---which means in particular that the conversion is rounded\n| according to the current rounding mode.  If `a' is a NaN, the largest\n| positive integer is returned.  Otherwise, if the conversion overflows, the\n| largest integer with the same sign as `a' is returned.\n*----------------------------------------------------------------------------*/\n\nint64 float128_to_int64( float128 a )\n{\n\tflag aSign;\n\tint32 aExp, shiftCount;\n\tbits64 aSig0, aSig1;\n\n\taSig1 = extractFloat128Frac1( a );\n\taSig0 = extractFloat128Frac0( a );\n\taExp = extractFloat128Exp( a );\n\taSign = extractFloat128Sign( a );\n\tif ( aExp ) aSig0 |= LIT64( 0x0001000000000000 );\n\tshiftCount = 0x402F - aExp;\n\tif ( shiftCount <= 0 ) {\n\t\tif ( 0x403E < aExp ) {\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t\tif (    ! aSign\n\t\t\t\t\t|| (    ( aExp == 0x7FFF )\n\t\t\t\t\t\t&& ( aSig1 || ( aSig0 != LIT64( 0x0001000000000000 ) ) )\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\treturn LIT64( 0x7FFFFFFFFFFFFFFF );\n\t\t\t}\n\t\t\treturn (sbits64) LIT64( 0x8000000000000000 );\n\t\t}\n\t\tshortShift128Left( aSig0, aSig1, - shiftCount, &aSig0, &aSig1 );\n\t}\n\telse {\n\t\tshift64ExtraRightJamming( aSig0, aSig1, shiftCount, &aSig0, &aSig1 );\n\t}\n\treturn roundAndPackInt64( aSign, aSig0, aSig1 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the quadruple-precision floating-point\n| value `a' to the 64-bit two's complement integer format.  The conversion\n| is performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic, except that the conversion is always rounded toward zero.\n| If `a' is a NaN, the largest positive integer is returned.  Otherwise, if\n| the conversion overflows, the largest integer with the same sign as `a' is\n| returned.\n*----------------------------------------------------------------------------*/\n\nint64 float128_to_int64_round_to_zero( float128 a )\n{\n\tflag aSign;\n\tint32 aExp, shiftCount;\n\tbits64 aSig0, aSig1;\n\tint64 z;\n\n\taSig1 = extractFloat128Frac1( a );\n\taSig0 = extractFloat128Frac0( a );\n\taExp = extractFloat128Exp( a );\n\taSign = extractFloat128Sign( a );\n\tif ( aExp ) aSig0 |= LIT64( 0x0001000000000000 );\n\tshiftCount = aExp - 0x402F;\n\tif ( 0 < shiftCount ) {\n\t\tif ( 0x403E <= aExp ) {\n\t\t\taSig0 &= LIT64( 0x0000FFFFFFFFFFFF );\n\t\t\tif (    ( a.high == LIT64( 0xC03E000000000000 ) )\n\t\t\t\t\t&& ( aSig1 < LIT64( 0x0002000000000000 ) ) ) {\n\t\t\t\tif ( aSig1 ) float_exception_flags |= float_flag_inexact;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfloat_raise( float_flag_invalid );\n\t\t\t\tif ( ! aSign || ( ( aExp == 0x7FFF ) && ( aSig0 | aSig1 ) ) ) {\n\t\t\t\t\treturn LIT64( 0x7FFFFFFFFFFFFFFF );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn (sbits64) LIT64( 0x8000000000000000 );\n\t\t}\n\t\tz = ( aSig0<<shiftCount ) | ( aSig1>>( ( - shiftCount ) & 63 ) );\n\t\tif ( (bits64) ( aSig1<<shiftCount ) ) {\n\t\t\tfloat_exception_flags |= float_flag_inexact;\n\t\t}\n\t}\n\telse {\n\t\tif ( aExp < 0x3FFF ) {\n\t\t\tif ( aExp | aSig0 | aSig1 ) {\n\t\t\t\tfloat_exception_flags |= float_flag_inexact;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\t\tz = aSig0>>( - shiftCount );\n\t\tif (    aSig1\n\t\t\t\t|| ( shiftCount && (bits64) ( aSig0<<( shiftCount & 63 ) ) ) ) {\n\t\t\tfloat_exception_flags |= float_flag_inexact;\n\t\t}\n\t}\n\tif ( aSign ) z = - z;\n\treturn z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the quadruple-precision floating-point\n| value `a' to the single-precision floating-point format.  The conversion\n| is performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat32 float128_to_float32( float128 a )\n{\n\tflag aSign;\n\tint32 aExp;\n\tbits64 aSig0, aSig1;\n\tbits32 zSig;\n\n\taSig1 = extractFloat128Frac1( a );\n\taSig0 = extractFloat128Frac0( a );\n\taExp = extractFloat128Exp( a );\n\taSign = extractFloat128Sign( a );\n\tif ( aExp == 0x7FFF ) {\n\t\tif ( aSig0 | aSig1 ) {\n\t\t\treturn commonNaNToFloat32( float128ToCommonNaN( a ) );\n\t\t}\n\t\treturn packFloat32( aSign, 0xFF, 0 );\n\t}\n\taSig0 |= ( aSig1 != 0 );\n\tshift64RightJamming( aSig0, 18, &aSig0 );\n\tzSig = aSig0;\n\tif ( aExp || zSig ) {\n\t\tzSig |= 0x40000000;\n\t\taExp -= 0x3F81;\n\t}\n\treturn roundAndPackFloat32( aSign, aExp, zSig );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the quadruple-precision floating-point\n| value `a' to the double-precision floating-point format.  The conversion\n| is performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat64 float128_to_float64( float128 a )\n{\n\tflag aSign;\n\tint32 aExp;\n\tbits64 aSig0, aSig1;\n\n\taSig1 = extractFloat128Frac1( a );\n\taSig0 = extractFloat128Frac0( a );\n\taExp = extractFloat128Exp( a );\n\taSign = extractFloat128Sign( a );\n\tif ( aExp == 0x7FFF ) {\n\t\tif ( aSig0 | aSig1 ) {\n\t\t\treturn commonNaNToFloat64( float128ToCommonNaN( a ) );\n\t\t}\n\t\treturn packFloat64( aSign, 0x7FF, 0 );\n\t}\n\tshortShift128Left( aSig0, aSig1, 14, &aSig0, &aSig1 );\n\taSig0 |= ( aSig1 != 0 );\n\tif ( aExp || aSig0 ) {\n\t\taSig0 |= LIT64( 0x4000000000000000 );\n\t\taExp -= 0x3C01;\n\t}\n\treturn roundAndPackFloat64( aSign, aExp, aSig0 );\n\n}\n\n#ifdef FLOATX80\n\n/*----------------------------------------------------------------------------\n| Returns the result of converting the quadruple-precision floating-point\n| value `a' to the extended double-precision floating-point format.  The\n| conversion is performed according to the IEC/IEEE Standard for Binary\n| Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloatx80 float128_to_floatx80( float128 a )\n{\n\tflag aSign;\n\tint32 aExp;\n\tbits64 aSig0, aSig1;\n\n\taSig1 = extractFloat128Frac1( a );\n\taSig0 = extractFloat128Frac0( a );\n\taExp = extractFloat128Exp( a );\n\taSign = extractFloat128Sign( a );\n\tif ( aExp == 0x7FFF ) {\n\t\tif ( aSig0 | aSig1 ) {\n\t\t\treturn commonNaNToFloatx80( float128ToCommonNaN( a ) );\n\t\t}\n\t\treturn packFloatx80( aSign, 0x7FFF, LIT64( 0x8000000000000000 ) );\n\t}\n\tif ( aExp == 0 ) {\n\t\tif ( ( aSig0 | aSig1 ) == 0 ) return packFloatx80( aSign, 0, 0 );\n\t\tnormalizeFloat128Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 );\n\t}\n\telse {\n\t\taSig0 |= LIT64( 0x0001000000000000 );\n\t}\n\tshortShift128Left( aSig0, aSig1, 15, &aSig0, &aSig1 );\n\treturn roundAndPackFloatx80( 80, aSign, aExp, aSig0, aSig1 );\n\n}\n\n#endif\n\n/*----------------------------------------------------------------------------\n| Rounds the quadruple-precision floating-point value `a' to an integer, and\n| returns the result as a quadruple-precision floating-point value.  The\n| operation is performed according to the IEC/IEEE Standard for Binary\n| Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat128 float128_round_to_int( float128 a )\n{\n\tflag aSign;\n\tint32 aExp;\n\tbits64 lastBitMask, roundBitsMask;\n\tint8 roundingMode;\n\tfloat128 z;\n\n\taExp = extractFloat128Exp( a );\n\tif ( 0x402F <= aExp ) {\n\t\tif ( 0x406F <= aExp ) {\n\t\t\tif (    ( aExp == 0x7FFF )\n\t\t\t\t\t&& ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) )\n\t\t\t\t) {\n\t\t\t\treturn propagateFloat128NaN( a, a );\n\t\t\t}\n\t\t\treturn a;\n\t\t}\n\t\tlastBitMask = 1;\n\t\tlastBitMask = ( lastBitMask<<( 0x406E - aExp ) )<<1;\n\t\troundBitsMask = lastBitMask - 1;\n\t\tz = a;\n\t\troundingMode = float_rounding_mode;\n\t\tif ( roundingMode == float_round_nearest_even ) {\n\t\t\tif ( lastBitMask ) {\n\t\t\t\tadd128( z.high, z.low, 0, lastBitMask>>1, &z.high, &z.low );\n\t\t\t\tif ( ( z.low & roundBitsMask ) == 0 ) z.low &= ~ lastBitMask;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif ( (sbits64) z.low < 0 ) {\n\t\t\t\t\t++z.high;\n\t\t\t\t\tif ( (bits64) ( z.low<<1 ) == 0 ) z.high &= ~1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if ( roundingMode != float_round_to_zero ) {\n\t\t\tif (   extractFloat128Sign( z )\n\t\t\t\t\t^ ( roundingMode == float_round_up ) ) {\n\t\t\t\tadd128( z.high, z.low, 0, roundBitsMask, &z.high, &z.low );\n\t\t\t}\n\t\t}\n\t\tz.low &= ~ roundBitsMask;\n\t}\n\telse {\n\t\tif ( aExp < 0x3FFF ) {\n\t\t\tif ( ( ( (bits64) ( a.high<<1 ) ) | a.low ) == 0 ) return a;\n\t\t\tfloat_exception_flags |= float_flag_inexact;\n\t\t\taSign = extractFloat128Sign( a );\n\t\t\tswitch ( float_rounding_mode ) {\n\t\t\t\tcase float_round_nearest_even:\n\t\t\t\tif (    ( aExp == 0x3FFE )\n\t\t\t\t\t\t&& (   extractFloat128Frac0( a )\n\t\t\t\t\t\t\t| extractFloat128Frac1( a ) )\n\t\t\t\t\t) {\n\t\t\t\t\treturn packFloat128( aSign, 0x3FFF, 0, 0 );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\tcase float_round_down:\n\t\t\t\treturn\n\t\t\t\t\t\taSign ? packFloat128( 1, 0x3FFF, 0, 0 )\n\t\t\t\t\t: packFloat128( 0, 0, 0, 0 );\n\t\t\t\tcase float_round_up:\n\t\t\t\treturn\n\t\t\t\t\t\taSign ? packFloat128( 1, 0, 0, 0 )\n\t\t\t\t\t: packFloat128( 0, 0x3FFF, 0, 0 );\n\t\t\t}\n\t\t\treturn packFloat128( aSign, 0, 0, 0 );\n\t\t}\n\t\tlastBitMask = 1;\n\t\tlastBitMask <<= 0x402F - aExp;\n\t\troundBitsMask = lastBitMask - 1;\n\t\tz.low = 0;\n\t\tz.high = a.high;\n\t\troundingMode = float_rounding_mode;\n\t\tif ( roundingMode == float_round_nearest_even ) {\n\t\t\tz.high += lastBitMask>>1;\n\t\t\tif ( ( ( z.high & roundBitsMask ) | a.low ) == 0 ) {\n\t\t\t\tz.high &= ~ lastBitMask;\n\t\t\t}\n\t\t}\n\t\telse if ( roundingMode != float_round_to_zero ) {\n\t\t\tif (   extractFloat128Sign( z )\n\t\t\t\t\t^ ( roundingMode == float_round_up ) ) {\n\t\t\t\tz.high |= ( a.low != 0 );\n\t\t\t\tz.high += roundBitsMask;\n\t\t\t}\n\t\t}\n\t\tz.high &= ~ roundBitsMask;\n\t}\n\tif ( ( z.low != a.low ) || ( z.high != a.high ) ) {\n\t\tfloat_exception_flags |= float_flag_inexact;\n\t}\n\treturn z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of adding the absolute values of the quadruple-precision\n| floating-point values `a' and `b'.  If `zSign' is 1, the sum is negated\n| before being returned.  `zSign' is ignored if the result is a NaN.\n| The addition is performed according to the IEC/IEEE Standard for Binary\n| Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nstatic float128 addFloat128Sigs( float128 a, float128 b, flag zSign )\n{\n\tint32 aExp, bExp, zExp;\n\tbits64 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2;\n\tint32 expDiff;\n\n\taSig1 = extractFloat128Frac1( a );\n\taSig0 = extractFloat128Frac0( a );\n\taExp = extractFloat128Exp( a );\n\tbSig1 = extractFloat128Frac1( b );\n\tbSig0 = extractFloat128Frac0( b );\n\tbExp = extractFloat128Exp( b );\n\texpDiff = aExp - bExp;\n\tif ( 0 < expDiff ) {\n\t\tif ( aExp == 0x7FFF ) {\n\t\t\tif ( aSig0 | aSig1 ) return propagateFloat128NaN( a, b );\n\t\t\treturn a;\n\t\t}\n\t\tif ( bExp == 0 ) {\n\t\t\t--expDiff;\n\t\t}\n\t\telse {\n\t\t\tbSig0 |= LIT64( 0x0001000000000000 );\n\t\t}\n\t\tshift128ExtraRightJamming(\n\t\t\tbSig0, bSig1, 0, expDiff, &bSig0, &bSig1, &zSig2 );\n\t\tzExp = aExp;\n\t}\n\telse if ( expDiff < 0 ) {\n\t\tif ( bExp == 0x7FFF ) {\n\t\t\tif ( bSig0 | bSig1 ) return propagateFloat128NaN( a, b );\n\t\t\treturn packFloat128( zSign, 0x7FFF, 0, 0 );\n\t\t}\n\t\tif ( aExp == 0 ) {\n\t\t\t++expDiff;\n\t\t}\n\t\telse {\n\t\t\taSig0 |= LIT64( 0x0001000000000000 );\n\t\t}\n\t\tshift128ExtraRightJamming(\n\t\t\taSig0, aSig1, 0, - expDiff, &aSig0, &aSig1, &zSig2 );\n\t\tzExp = bExp;\n\t}\n\telse {\n\t\tif ( aExp == 0x7FFF ) {\n\t\t\tif ( aSig0 | aSig1 | bSig0 | bSig1 ) {\n\t\t\t\treturn propagateFloat128NaN( a, b );\n\t\t\t}\n\t\t\treturn a;\n\t\t}\n\t\tadd128( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1 );\n\t\tif ( aExp == 0 ) return packFloat128( zSign, 0, zSig0, zSig1 );\n\t\tzSig2 = 0;\n\t\tzSig0 |= LIT64( 0x0002000000000000 );\n\t\tzExp = aExp;\n\t\tgoto shiftRight1;\n\t}\n\taSig0 |= LIT64( 0x0001000000000000 );\n\tadd128( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1 );\n\t--zExp;\n\tif ( zSig0 < LIT64( 0x0002000000000000 ) ) goto roundAndPack;\n\t++zExp;\n\tshiftRight1:\n\tshift128ExtraRightJamming(\n\t\tzSig0, zSig1, zSig2, 1, &zSig0, &zSig1, &zSig2 );\n\troundAndPack:\n\treturn roundAndPackFloat128( zSign, zExp, zSig0, zSig1, zSig2 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of subtracting the absolute values of the quadruple-\n| precision floating-point values `a' and `b'.  If `zSign' is 1, the\n| difference is negated before being returned.  `zSign' is ignored if the\n| result is a NaN.  The subtraction is performed according to the IEC/IEEE\n| Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nstatic float128 subFloat128Sigs( float128 a, float128 b, flag zSign )\n{\n\tint32 aExp, bExp, zExp;\n\tbits64 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1;\n\tint32 expDiff;\n\tfloat128 z;\n\n\taSig1 = extractFloat128Frac1( a );\n\taSig0 = extractFloat128Frac0( a );\n\taExp = extractFloat128Exp( a );\n\tbSig1 = extractFloat128Frac1( b );\n\tbSig0 = extractFloat128Frac0( b );\n\tbExp = extractFloat128Exp( b );\n\texpDiff = aExp - bExp;\n\tshortShift128Left( aSig0, aSig1, 14, &aSig0, &aSig1 );\n\tshortShift128Left( bSig0, bSig1, 14, &bSig0, &bSig1 );\n\tif ( 0 < expDiff ) goto aExpBigger;\n\tif ( expDiff < 0 ) goto bExpBigger;\n\tif ( aExp == 0x7FFF ) {\n\t\tif ( aSig0 | aSig1 | bSig0 | bSig1 ) {\n\t\t\treturn propagateFloat128NaN( a, b );\n\t\t}\n\t\tfloat_raise( float_flag_invalid );\n\t\tz.low = float128_default_nan_low;\n\t\tz.high = float128_default_nan_high;\n\t\treturn z;\n\t}\n\tif ( aExp == 0 ) {\n\t\taExp = 1;\n\t\tbExp = 1;\n\t}\n\tif ( bSig0 < aSig0 ) goto aBigger;\n\tif ( aSig0 < bSig0 ) goto bBigger;\n\tif ( bSig1 < aSig1 ) goto aBigger;\n\tif ( aSig1 < bSig1 ) goto bBigger;\n\treturn packFloat128( float_rounding_mode == float_round_down, 0, 0, 0 );\n\tbExpBigger:\n\tif ( bExp == 0x7FFF ) {\n\t\tif ( bSig0 | bSig1 ) return propagateFloat128NaN( a, b );\n\t\treturn packFloat128( zSign ^ 1, 0x7FFF, 0, 0 );\n\t}\n\tif ( aExp == 0 ) {\n\t\t++expDiff;\n\t}\n\telse {\n\t\taSig0 |= LIT64( 0x4000000000000000 );\n\t}\n\tshift128RightJamming( aSig0, aSig1, - expDiff, &aSig0, &aSig1 );\n\tbSig0 |= LIT64( 0x4000000000000000 );\n\tbBigger:\n\tsub128( bSig0, bSig1, aSig0, aSig1, &zSig0, &zSig1 );\n\tzExp = bExp;\n\tzSign ^= 1;\n\tgoto normalizeRoundAndPack;\n\taExpBigger:\n\tif ( aExp == 0x7FFF ) {\n\t\tif ( aSig0 | aSig1 ) return propagateFloat128NaN( a, b );\n\t\treturn a;\n\t}\n\tif ( bExp == 0 ) {\n\t\t--expDiff;\n\t}\n\telse {\n\t\tbSig0 |= LIT64( 0x4000000000000000 );\n\t}\n\tshift128RightJamming( bSig0, bSig1, expDiff, &bSig0, &bSig1 );\n\taSig0 |= LIT64( 0x4000000000000000 );\n\taBigger:\n\tsub128( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1 );\n\tzExp = aExp;\n\tnormalizeRoundAndPack:\n\t--zExp;\n\treturn normalizeRoundAndPackFloat128( zSign, zExp - 14, zSig0, zSig1 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of adding the quadruple-precision floating-point values\n| `a' and `b'.  The operation is performed according to the IEC/IEEE Standard\n| for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat128 float128_add( float128 a, float128 b )\n{\n\tflag aSign, bSign;\n\n\taSign = extractFloat128Sign( a );\n\tbSign = extractFloat128Sign( b );\n\tif ( aSign == bSign ) {\n\t\treturn addFloat128Sigs( a, b, aSign );\n\t}\n\telse {\n\t\treturn subFloat128Sigs( a, b, aSign );\n\t}\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of subtracting the quadruple-precision floating-point\n| values `a' and `b'.  The operation is performed according to the IEC/IEEE\n| Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat128 float128_sub( float128 a, float128 b )\n{\n\tflag aSign, bSign;\n\n\taSign = extractFloat128Sign( a );\n\tbSign = extractFloat128Sign( b );\n\tif ( aSign == bSign ) {\n\t\treturn subFloat128Sigs( a, b, aSign );\n\t}\n\telse {\n\t\treturn addFloat128Sigs( a, b, aSign );\n\t}\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of multiplying the quadruple-precision floating-point\n| values `a' and `b'.  The operation is performed according to the IEC/IEEE\n| Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat128 float128_mul( float128 a, float128 b )\n{\n\tflag aSign, bSign, zSign;\n\tint32 aExp, bExp, zExp;\n\tbits64 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2, zSig3;\n\tfloat128 z;\n\n\taSig1 = extractFloat128Frac1( a );\n\taSig0 = extractFloat128Frac0( a );\n\taExp = extractFloat128Exp( a );\n\taSign = extractFloat128Sign( a );\n\tbSig1 = extractFloat128Frac1( b );\n\tbSig0 = extractFloat128Frac0( b );\n\tbExp = extractFloat128Exp( b );\n\tbSign = extractFloat128Sign( b );\n\tzSign = aSign ^ bSign;\n\tif ( aExp == 0x7FFF ) {\n\t\tif (    ( aSig0 | aSig1 )\n\t\t\t\t|| ( ( bExp == 0x7FFF ) && ( bSig0 | bSig1 ) ) ) {\n\t\t\treturn propagateFloat128NaN( a, b );\n\t\t}\n\t\tif ( ( bExp | bSig0 | bSig1 ) == 0 ) goto invalid;\n\t\treturn packFloat128( zSign, 0x7FFF, 0, 0 );\n\t}\n\tif ( bExp == 0x7FFF ) {\n\t\tif ( bSig0 | bSig1 ) return propagateFloat128NaN( a, b );\n\t\tif ( ( aExp | aSig0 | aSig1 ) == 0 ) {\n\tinvalid:\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t\tz.low = float128_default_nan_low;\n\t\t\tz.high = float128_default_nan_high;\n\t\t\treturn z;\n\t\t}\n\t\treturn packFloat128( zSign, 0x7FFF, 0, 0 );\n\t}\n\tif ( aExp == 0 ) {\n\t\tif ( ( aSig0 | aSig1 ) == 0 ) return packFloat128( zSign, 0, 0, 0 );\n\t\tnormalizeFloat128Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 );\n\t}\n\tif ( bExp == 0 ) {\n\t\tif ( ( bSig0 | bSig1 ) == 0 ) return packFloat128( zSign, 0, 0, 0 );\n\t\tnormalizeFloat128Subnormal( bSig0, bSig1, &bExp, &bSig0, &bSig1 );\n\t}\n\tzExp = aExp + bExp - 0x4000;\n\taSig0 |= LIT64( 0x0001000000000000 );\n\tshortShift128Left( bSig0, bSig1, 16, &bSig0, &bSig1 );\n\tmul128To256( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1, &zSig2, &zSig3 );\n\tadd128( zSig0, zSig1, aSig0, aSig1, &zSig0, &zSig1 );\n\tzSig2 |= ( zSig3 != 0 );\n\tif ( LIT64( 0x0002000000000000 ) <= zSig0 ) {\n\t\tshift128ExtraRightJamming(\n\t\t\tzSig0, zSig1, zSig2, 1, &zSig0, &zSig1, &zSig2 );\n\t\t++zExp;\n\t}\n\treturn roundAndPackFloat128( zSign, zExp, zSig0, zSig1, zSig2 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the result of dividing the quadruple-precision floating-point value\n| `a' by the corresponding value `b'.  The operation is performed according to\n| the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat128 float128_div( float128 a, float128 b )\n{\n\tflag aSign, bSign, zSign;\n\tint32 aExp, bExp, zExp;\n\tbits64 aSig0, aSig1, bSig0, bSig1, zSig0, zSig1, zSig2;\n\tbits64 rem0, rem1, rem2, rem3, term0, term1, term2, term3;\n\tfloat128 z;\n\n\taSig1 = extractFloat128Frac1( a );\n\taSig0 = extractFloat128Frac0( a );\n\taExp = extractFloat128Exp( a );\n\taSign = extractFloat128Sign( a );\n\tbSig1 = extractFloat128Frac1( b );\n\tbSig0 = extractFloat128Frac0( b );\n\tbExp = extractFloat128Exp( b );\n\tbSign = extractFloat128Sign( b );\n\tzSign = aSign ^ bSign;\n\tif ( aExp == 0x7FFF ) {\n\t\tif ( aSig0 | aSig1 ) return propagateFloat128NaN( a, b );\n\t\tif ( bExp == 0x7FFF ) {\n\t\t\tif ( bSig0 | bSig1 ) return propagateFloat128NaN( a, b );\n\t\t\tgoto invalid;\n\t\t}\n\t\treturn packFloat128( zSign, 0x7FFF, 0, 0 );\n\t}\n\tif ( bExp == 0x7FFF ) {\n\t\tif ( bSig0 | bSig1 ) return propagateFloat128NaN( a, b );\n\t\treturn packFloat128( zSign, 0, 0, 0 );\n\t}\n\tif ( bExp == 0 ) {\n\t\tif ( ( bSig0 | bSig1 ) == 0 ) {\n\t\t\tif ( ( aExp | aSig0 | aSig1 ) == 0 ) {\n\tinvalid:\n\t\t\t\tfloat_raise( float_flag_invalid );\n\t\t\t\tz.low = float128_default_nan_low;\n\t\t\t\tz.high = float128_default_nan_high;\n\t\t\t\treturn z;\n\t\t\t}\n\t\t\tfloat_raise( float_flag_divbyzero );\n\t\t\treturn packFloat128( zSign, 0x7FFF, 0, 0 );\n\t\t}\n\t\tnormalizeFloat128Subnormal( bSig0, bSig1, &bExp, &bSig0, &bSig1 );\n\t}\n\tif ( aExp == 0 ) {\n\t\tif ( ( aSig0 | aSig1 ) == 0 ) return packFloat128( zSign, 0, 0, 0 );\n\t\tnormalizeFloat128Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 );\n\t}\n\tzExp = aExp - bExp + 0x3FFD;\n\tshortShift128Left(\n\t\taSig0 | LIT64( 0x0001000000000000 ), aSig1, 15, &aSig0, &aSig1 );\n\tshortShift128Left(\n\t\tbSig0 | LIT64( 0x0001000000000000 ), bSig1, 15, &bSig0, &bSig1 );\n\tif ( le128( bSig0, bSig1, aSig0, aSig1 ) ) {\n\t\tshift128Right( aSig0, aSig1, 1, &aSig0, &aSig1 );\n\t\t++zExp;\n\t}\n\tzSig0 = estimateDiv128To64( aSig0, aSig1, bSig0 );\n\tmul128By64To192( bSig0, bSig1, zSig0, &term0, &term1, &term2 );\n\tsub192( aSig0, aSig1, 0, term0, term1, term2, &rem0, &rem1, &rem2 );\n\twhile ( (sbits64) rem0 < 0 ) {\n\t\t--zSig0;\n\t\tadd192( rem0, rem1, rem2, 0, bSig0, bSig1, &rem0, &rem1, &rem2 );\n\t}\n\tzSig1 = estimateDiv128To64( rem1, rem2, bSig0 );\n\tif ( ( zSig1 & 0x3FFF ) <= 4 ) {\n\t\tmul128By64To192( bSig0, bSig1, zSig1, &term1, &term2, &term3 );\n\t\tsub192( rem1, rem2, 0, term1, term2, term3, &rem1, &rem2, &rem3 );\n\t\twhile ( (sbits64) rem1 < 0 ) {\n\t\t\t--zSig1;\n\t\t\tadd192( rem1, rem2, rem3, 0, bSig0, bSig1, &rem1, &rem2, &rem3 );\n\t\t}\n\t\tzSig1 |= ( ( rem1 | rem2 | rem3 ) != 0 );\n\t}\n\tshift128ExtraRightJamming( zSig0, zSig1, 0, 15, &zSig0, &zSig1, &zSig2 );\n\treturn roundAndPackFloat128( zSign, zExp, zSig0, zSig1, zSig2 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the remainder of the quadruple-precision floating-point value `a'\n| with respect to the corresponding value `b'.  The operation is performed\n| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat128 float128_rem( float128 a, float128 b )\n{\n\tflag aSign, zSign;\n\tint32 aExp, bExp, expDiff;\n\tbits64 aSig0, aSig1, bSig0, bSig1, q, term0, term1, term2;\n\tbits64 allZero, alternateASig0, alternateASig1, sigMean1;\n\tsbits64 sigMean0;\n\tfloat128 z;\n\n\taSig1 = extractFloat128Frac1( a );\n\taSig0 = extractFloat128Frac0( a );\n\taExp = extractFloat128Exp( a );\n\taSign = extractFloat128Sign( a );\n\tbSig1 = extractFloat128Frac1( b );\n\tbSig0 = extractFloat128Frac0( b );\n\tbExp = extractFloat128Exp( b );\n//    bSign = extractFloat128Sign( b );\n\tif ( aExp == 0x7FFF ) {\n\t\tif (    ( aSig0 | aSig1 )\n\t\t\t\t|| ( ( bExp == 0x7FFF ) && ( bSig0 | bSig1 ) ) ) {\n\t\t\treturn propagateFloat128NaN( a, b );\n\t\t}\n\t\tgoto invalid;\n\t}\n\tif ( bExp == 0x7FFF ) {\n\t\tif ( bSig0 | bSig1 ) return propagateFloat128NaN( a, b );\n\t\treturn a;\n\t}\n\tif ( bExp == 0 ) {\n\t\tif ( ( bSig0 | bSig1 ) == 0 ) {\n\tinvalid:\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t\tz.low = float128_default_nan_low;\n\t\t\tz.high = float128_default_nan_high;\n\t\t\treturn z;\n\t\t}\n\t\tnormalizeFloat128Subnormal( bSig0, bSig1, &bExp, &bSig0, &bSig1 );\n\t}\n\tif ( aExp == 0 ) {\n\t\tif ( ( aSig0 | aSig1 ) == 0 ) return a;\n\t\tnormalizeFloat128Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 );\n\t}\n\texpDiff = aExp - bExp;\n\tif ( expDiff < -1 ) return a;\n\tshortShift128Left(\n\t\taSig0 | LIT64( 0x0001000000000000 ),\n\t\taSig1,\n\t\t15 - ( expDiff < 0 ),\n\t\t&aSig0,\n\t\t&aSig1\n\t);\n\tshortShift128Left(\n\t\tbSig0 | LIT64( 0x0001000000000000 ), bSig1, 15, &bSig0, &bSig1 );\n\tq = le128( bSig0, bSig1, aSig0, aSig1 );\n\tif ( q ) sub128( aSig0, aSig1, bSig0, bSig1, &aSig0, &aSig1 );\n\texpDiff -= 64;\n\twhile ( 0 < expDiff ) {\n\t\tq = estimateDiv128To64( aSig0, aSig1, bSig0 );\n\t\tq = ( 4 < q ) ? q - 4 : 0;\n\t\tmul128By64To192( bSig0, bSig1, q, &term0, &term1, &term2 );\n\t\tshortShift192Left( term0, term1, term2, 61, &term1, &term2, &allZero );\n\t\tshortShift128Left( aSig0, aSig1, 61, &aSig0, &allZero );\n\t\tsub128( aSig0, 0, term1, term2, &aSig0, &aSig1 );\n\t\texpDiff -= 61;\n\t}\n\tif ( -64 < expDiff ) {\n\t\tq = estimateDiv128To64( aSig0, aSig1, bSig0 );\n\t\tq = ( 4 < q ) ? q - 4 : 0;\n\t\tq >>= - expDiff;\n\t\tshift128Right( bSig0, bSig1, 12, &bSig0, &bSig1 );\n\t\texpDiff += 52;\n\t\tif ( expDiff < 0 ) {\n\t\t\tshift128Right( aSig0, aSig1, - expDiff, &aSig0, &aSig1 );\n\t\t}\n\t\telse {\n\t\t\tshortShift128Left( aSig0, aSig1, expDiff, &aSig0, &aSig1 );\n\t\t}\n\t\tmul128By64To192( bSig0, bSig1, q, &term0, &term1, &term2 );\n\t\tsub128( aSig0, aSig1, term1, term2, &aSig0, &aSig1 );\n\t}\n\telse {\n\t\tshift128Right( aSig0, aSig1, 12, &aSig0, &aSig1 );\n\t\tshift128Right( bSig0, bSig1, 12, &bSig0, &bSig1 );\n\t}\n\tdo {\n\t\talternateASig0 = aSig0;\n\t\talternateASig1 = aSig1;\n\t\t++q;\n\t\tsub128( aSig0, aSig1, bSig0, bSig1, &aSig0, &aSig1 );\n\t} while ( 0 <= (sbits64) aSig0 );\n\tadd128(\n\t\taSig0, aSig1, alternateASig0, alternateASig1, (bits64 *)&sigMean0, &sigMean1 );\n\tif (    ( sigMean0 < 0 )\n\t\t\t|| ( ( ( sigMean0 | sigMean1 ) == 0 ) && ( q & 1 ) ) ) {\n\t\taSig0 = alternateASig0;\n\t\taSig1 = alternateASig1;\n\t}\n\tzSign = ( (sbits64) aSig0 < 0 );\n\tif ( zSign ) sub128( 0, 0, aSig0, aSig1, &aSig0, &aSig1 );\n\treturn\n\t\tnormalizeRoundAndPackFloat128( aSign ^ zSign, bExp - 4, aSig0, aSig1 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns the square root of the quadruple-precision floating-point value `a'.\n| The operation is performed according to the IEC/IEEE Standard for Binary\n| Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nfloat128 float128_sqrt( float128 a )\n{\n\tflag aSign;\n\tint32 aExp, zExp;\n\tbits64 aSig0, aSig1, zSig0, zSig1, zSig2, doubleZSig0;\n\tbits64 rem0, rem1, rem2, rem3, term0, term1, term2, term3;\n\tfloat128 z;\n\n\taSig1 = extractFloat128Frac1( a );\n\taSig0 = extractFloat128Frac0( a );\n\taExp = extractFloat128Exp( a );\n\taSign = extractFloat128Sign( a );\n\tif ( aExp == 0x7FFF ) {\n\t\tif ( aSig0 | aSig1 ) return propagateFloat128NaN( a, a );\n\t\tif ( ! aSign ) return a;\n\t\tgoto invalid;\n\t}\n\tif ( aSign ) {\n\t\tif ( ( aExp | aSig0 | aSig1 ) == 0 ) return a;\n\tinvalid:\n\t\tfloat_raise( float_flag_invalid );\n\t\tz.low = float128_default_nan_low;\n\t\tz.high = float128_default_nan_high;\n\t\treturn z;\n\t}\n\tif ( aExp == 0 ) {\n\t\tif ( ( aSig0 | aSig1 ) == 0 ) return packFloat128( 0, 0, 0, 0 );\n\t\tnormalizeFloat128Subnormal( aSig0, aSig1, &aExp, &aSig0, &aSig1 );\n\t}\n\tzExp = ( ( aExp - 0x3FFF )>>1 ) + 0x3FFE;\n\taSig0 |= LIT64( 0x0001000000000000 );\n\tzSig0 = estimateSqrt32( aExp, aSig0>>17 );\n\tshortShift128Left( aSig0, aSig1, 13 - ( aExp & 1 ), &aSig0, &aSig1 );\n\tzSig0 = estimateDiv128To64( aSig0, aSig1, zSig0<<32 ) + ( zSig0<<30 );\n\tdoubleZSig0 = zSig0<<1;\n\tmul64To128( zSig0, zSig0, &term0, &term1 );\n\tsub128( aSig0, aSig1, term0, term1, &rem0, &rem1 );\n\twhile ( (sbits64) rem0 < 0 ) {\n\t\t--zSig0;\n\t\tdoubleZSig0 -= 2;\n\t\tadd128( rem0, rem1, zSig0>>63, doubleZSig0 | 1, &rem0, &rem1 );\n\t}\n\tzSig1 = estimateDiv128To64( rem1, 0, doubleZSig0 );\n\tif ( ( zSig1 & 0x1FFF ) <= 5 ) {\n\t\tif ( zSig1 == 0 ) zSig1 = 1;\n\t\tmul64To128( doubleZSig0, zSig1, &term1, &term2 );\n\t\tsub128( rem1, 0, term1, term2, &rem1, &rem2 );\n\t\tmul64To128( zSig1, zSig1, &term2, &term3 );\n\t\tsub192( rem1, rem2, 0, 0, term2, term3, &rem1, &rem2, &rem3 );\n\t\twhile ( (sbits64) rem1 < 0 ) {\n\t\t\t--zSig1;\n\t\t\tshortShift128Left( 0, zSig1, 1, &term2, &term3 );\n\t\t\tterm3 |= 1;\n\t\t\tterm2 |= doubleZSig0;\n\t\t\tadd192( rem1, rem2, rem3, 0, term2, term3, &rem1, &rem2, &rem3 );\n\t\t}\n\t\tzSig1 |= ( ( rem1 | rem2 | rem3 ) != 0 );\n\t}\n\tshift128ExtraRightJamming( zSig0, zSig1, 0, 14, &zSig0, &zSig1, &zSig2 );\n\treturn roundAndPackFloat128( 0, zExp, zSig0, zSig1, zSig2 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the quadruple-precision floating-point value `a' is equal to\n| the corresponding value `b', and 0 otherwise.  The comparison is performed\n| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nflag float128_eq( float128 a, float128 b )\n{\n\tif (    (    ( extractFloat128Exp( a ) == 0x7FFF )\n\t\t\t\t&& ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) )\n\t\t\t|| (    ( extractFloat128Exp( b ) == 0x7FFF )\n\t\t\t\t&& ( extractFloat128Frac0( b ) | extractFloat128Frac1( b ) ) )\n\t\t) {\n\t\tif (    float128_is_signaling_nan( a )\n\t\t\t\t|| float128_is_signaling_nan( b ) ) {\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t}\n\t\treturn 0;\n\t}\n\treturn\n\t\t\t( a.low == b.low )\n\t\t&& (    ( a.high == b.high )\n\t\t\t\t|| (    ( a.low == 0 )\n\t\t\t\t\t&& ( (bits64) ( ( a.high | b.high )<<1 ) == 0 ) )\n\t\t\t);\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the quadruple-precision floating-point value `a' is less than\n| or equal to the corresponding value `b', and 0 otherwise.  The comparison\n| is performed according to the IEC/IEEE Standard for Binary Floating-Point\n| Arithmetic.\n*----------------------------------------------------------------------------*/\n\nflag float128_le( float128 a, float128 b )\n{\n\tflag aSign, bSign;\n\n\tif (    (    ( extractFloat128Exp( a ) == 0x7FFF )\n\t\t\t\t&& ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) )\n\t\t\t|| (    ( extractFloat128Exp( b ) == 0x7FFF )\n\t\t\t\t&& ( extractFloat128Frac0( b ) | extractFloat128Frac1( b ) ) )\n\t\t) {\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn 0;\n\t}\n\taSign = extractFloat128Sign( a );\n\tbSign = extractFloat128Sign( b );\n\tif ( aSign != bSign ) {\n\t\treturn\n\t\t\t\taSign\n\t\t\t|| (    ( ( (bits64) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )\n\t\t\t\t\t== 0 );\n\t}\n\treturn\n\t\t\taSign ? le128( b.high, b.low, a.high, a.low )\n\t\t: le128( a.high, a.low, b.high, b.low );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the quadruple-precision floating-point value `a' is less than\n| the corresponding value `b', and 0 otherwise.  The comparison is performed\n| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nflag float128_lt( float128 a, float128 b )\n{\n\tflag aSign, bSign;\n\n\tif (    (    ( extractFloat128Exp( a ) == 0x7FFF )\n\t\t\t\t&& ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) )\n\t\t\t|| (    ( extractFloat128Exp( b ) == 0x7FFF )\n\t\t\t\t&& ( extractFloat128Frac0( b ) | extractFloat128Frac1( b ) ) )\n\t\t) {\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn 0;\n\t}\n\taSign = extractFloat128Sign( a );\n\tbSign = extractFloat128Sign( b );\n\tif ( aSign != bSign ) {\n\t\treturn\n\t\t\t\taSign\n\t\t\t&& (    ( ( (bits64) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )\n\t\t\t\t\t!= 0 );\n\t}\n\treturn\n\t\t\taSign ? lt128( b.high, b.low, a.high, a.low )\n\t\t: lt128( a.high, a.low, b.high, b.low );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the quadruple-precision floating-point value `a' is equal to\n| the corresponding value `b', and 0 otherwise.  The invalid exception is\n| raised if either operand is a NaN.  Otherwise, the comparison is performed\n| according to the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nflag float128_eq_signaling( float128 a, float128 b )\n{\n\tif (    (    ( extractFloat128Exp( a ) == 0x7FFF )\n\t\t\t\t&& ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) )\n\t\t\t|| (    ( extractFloat128Exp( b ) == 0x7FFF )\n\t\t\t\t&& ( extractFloat128Frac0( b ) | extractFloat128Frac1( b ) ) )\n\t\t) {\n\t\tfloat_raise( float_flag_invalid );\n\t\treturn 0;\n\t}\n\treturn\n\t\t\t( a.low == b.low )\n\t\t&& (    ( a.high == b.high )\n\t\t\t\t|| (    ( a.low == 0 )\n\t\t\t\t\t&& ( (bits64) ( ( a.high | b.high )<<1 ) == 0 ) )\n\t\t\t);\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the quadruple-precision floating-point value `a' is less than\n| or equal to the corresponding value `b', and 0 otherwise.  Quiet NaNs do not\n| cause an exception.  Otherwise, the comparison is performed according to the\n| IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nflag float128_le_quiet( float128 a, float128 b )\n{\n\tflag aSign, bSign;\n\n\tif (    (    ( extractFloat128Exp( a ) == 0x7FFF )\n\t\t\t\t&& ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) )\n\t\t\t|| (    ( extractFloat128Exp( b ) == 0x7FFF )\n\t\t\t\t&& ( extractFloat128Frac0( b ) | extractFloat128Frac1( b ) ) )\n\t\t) {\n\t\tif (    float128_is_signaling_nan( a )\n\t\t\t\t|| float128_is_signaling_nan( b ) ) {\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t}\n\t\treturn 0;\n\t}\n\taSign = extractFloat128Sign( a );\n\tbSign = extractFloat128Sign( b );\n\tif ( aSign != bSign ) {\n\t\treturn\n\t\t\t\taSign\n\t\t\t|| (    ( ( (bits64) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )\n\t\t\t\t\t== 0 );\n\t}\n\treturn\n\t\t\taSign ? le128( b.high, b.low, a.high, a.low )\n\t\t: le128( a.high, a.low, b.high, b.low );\n\n}\n\n/*----------------------------------------------------------------------------\n| Returns 1 if the quadruple-precision floating-point value `a' is less than\n| the corresponding value `b', and 0 otherwise.  Quiet NaNs do not cause an\n| exception.  Otherwise, the comparison is performed according to the IEC/IEEE\n| Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nflag float128_lt_quiet( float128 a, float128 b )\n{\n\tflag aSign, bSign;\n\n\tif (    (    ( extractFloat128Exp( a ) == 0x7FFF )\n\t\t\t\t&& ( extractFloat128Frac0( a ) | extractFloat128Frac1( a ) ) )\n\t\t\t|| (    ( extractFloat128Exp( b ) == 0x7FFF )\n\t\t\t\t&& ( extractFloat128Frac0( b ) | extractFloat128Frac1( b ) ) )\n\t\t) {\n\t\tif (    float128_is_signaling_nan( a )\n\t\t\t\t|| float128_is_signaling_nan( b ) ) {\n\t\t\tfloat_raise( float_flag_invalid );\n\t\t}\n\t\treturn 0;\n\t}\n\taSign = extractFloat128Sign( a );\n\tbSign = extractFloat128Sign( b );\n\tif ( aSign != bSign ) {\n\t\treturn\n\t\t\t\taSign\n\t\t\t&& (    ( ( (bits64) ( ( a.high | b.high )<<1 ) ) | a.low | b.low )\n\t\t\t\t\t!= 0 );\n\t}\n\treturn\n\t\t\taSign ? lt128( b.high, b.low, a.high, a.low )\n\t\t: lt128( a.high, a.low, b.high, b.low );\n\n}\n\n#endif\n"
  },
  {
    "path": "vm86/mame/lib/softfloat/softfloat.h",
    "content": "#pragma once\n\n/*============================================================================\n\nThis C header file is part of the SoftFloat IEC/IEEE Floating-point Arithmetic\nPackage, Release 2b.\n\nWritten by John R. Hauser.  This work was made possible in part by the\nInternational Computer Science Institute, located at Suite 600, 1947 Center\nStreet, Berkeley, California 94704.  Funding was partially provided by the\nNational Science Foundation under grant MIP-9311980.  The original version\nof this code was written as part of a project to build a fixed-point vector\nprocessor in collaboration with the University of California at Berkeley,\noverseen by Profs. Nelson Morgan and John Wawrzynek.  More information\nis available through the Web page `http://www.cs.berkeley.edu/~jhauser/\narithmetic/SoftFloat.html'.\n\nTHIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort has\nbeen made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMES\nRESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONS\nAND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,\nCOSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMORE\nEFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCE\nINSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OR\nOTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.\n\nDerivative works are acceptable, even for commercial purposes, so long as\n(1) the source code for the derivative work includes prominent notice that\nthe work is derivative, and (2) the source code includes prominent notice with\nthese four paragraphs for those parts of this code that are retained.\n\n=============================================================================*/\n\n/*----------------------------------------------------------------------------\n| The macro `FLOATX80' must be defined to enable the extended double-precision\n| floating-point format `floatx80'.  If this macro is not defined, the\n| `floatx80' type will not be defined, and none of the functions that either\n| input or output the `floatx80' type will be defined.  The same applies to\n| the `FLOAT128' macro and the quadruple-precision format `float128'.\n*----------------------------------------------------------------------------*/\n#define FLOATX80\n#define FLOAT128\n\n/*----------------------------------------------------------------------------\n| Software IEC/IEEE floating-point types.\n*----------------------------------------------------------------------------*/\ntypedef bits32 float32;\ntypedef bits64 float64;\n#ifdef FLOATX80\ntypedef struct {\n\tbits16 high;\n\tbits64 low;\n} floatx80;\n#endif\n#ifdef FLOAT128\ntypedef struct {\n\tbits64 high, low;\n} float128;\n#endif\n\n/*----------------------------------------------------------------------------\n| Primitive arithmetic functions, including multi-word arithmetic, and\n| division and square root approximations.  (Can be specialized to target if\n| desired.)\n*----------------------------------------------------------------------------*/\n#include \"softfloat-macros\"\n\n/*----------------------------------------------------------------------------\n| Software IEC/IEEE floating-point underflow tininess-detection mode.\n*----------------------------------------------------------------------------*/\nextern int8 float_detect_tininess;\nenum {\n\tfloat_tininess_after_rounding  = 0,\n\tfloat_tininess_before_rounding = 1\n};\n\n/*----------------------------------------------------------------------------\n| Software IEC/IEEE floating-point rounding mode.\n*----------------------------------------------------------------------------*/\nextern int8 float_rounding_mode;\nenum {\n\tfloat_round_nearest_even = 0,\n\tfloat_round_to_zero      = 1,\n\tfloat_round_down         = 2,\n\tfloat_round_up           = 3\n};\n\n/*----------------------------------------------------------------------------\n| Software IEC/IEEE floating-point exception flags.\n*----------------------------------------------------------------------------*/\nextern int8 float_exception_flags;\nenum {\n\tfloat_flag_invalid = 0x01, float_flag_denormal = 0x02, float_flag_divbyzero = 0x04, float_flag_overflow = 0x08,\n\tfloat_flag_underflow = 0x10, float_flag_inexact = 0x20\n};\n\n/*----------------------------------------------------------------------------\n| Routine to raise any or all of the software IEC/IEEE floating-point\n| exception flags.\n*----------------------------------------------------------------------------*/\nvoid float_raise( int8 );\n\n/*----------------------------------------------------------------------------\n| Software IEC/IEEE integer-to-floating-point conversion routines.\n*----------------------------------------------------------------------------*/\nfloat32 int32_to_float32( int32 );\nfloat64 int32_to_float64( int32 );\n#ifdef FLOATX80\nfloatx80 int32_to_floatx80( int32 );\n#endif\n#ifdef FLOAT128\nfloat128 int32_to_float128( int32 );\n#endif\nfloat32 int64_to_float32( int64 );\nfloat64 int64_to_float64( int64 );\n#ifdef FLOATX80\nfloatx80 int64_to_floatx80( int64 );\n#endif\n#ifdef FLOAT128\nfloat128 int64_to_float128( int64 );\n#endif\n\n/*----------------------------------------------------------------------------\n| Software IEC/IEEE single-precision conversion routines.\n*----------------------------------------------------------------------------*/\nint32 float32_to_int32( float32 );\nint32 float32_to_int32_round_to_zero( float32 );\nint64 float32_to_int64( float32 );\nint64 float32_to_int64_round_to_zero( float32 );\nfloat64 float32_to_float64( float32 );\n#ifdef FLOATX80\nfloatx80 float32_to_floatx80( float32 );\n#endif\n#ifdef FLOAT128\nfloat128 float32_to_float128( float32 );\n#endif\n\n/*----------------------------------------------------------------------------\n| Software IEC/IEEE single-precision operations.\n*----------------------------------------------------------------------------*/\nfloat32 float32_round_to_int( float32 );\nfloat32 float32_add( float32, float32 );\nfloat32 float32_sub( float32, float32 );\nfloat32 float32_mul( float32, float32 );\nfloat32 float32_div( float32, float32 );\nfloat32 float32_rem( float32, float32 );\nfloat32 float32_sqrt( float32 );\nflag float32_eq( float32, float32 );\nflag float32_le( float32, float32 );\nflag float32_lt( float32, float32 );\nflag float32_eq_signaling( float32, float32 );\nflag float32_le_quiet( float32, float32 );\nflag float32_lt_quiet( float32, float32 );\nflag float32_is_signaling_nan( float32 );\n\n/*----------------------------------------------------------------------------\n| Software IEC/IEEE double-precision conversion routines.\n*----------------------------------------------------------------------------*/\nint32 float64_to_int32( float64 );\nint32 float64_to_int32_round_to_zero( float64 );\nint64 float64_to_int64( float64 );\nint64 float64_to_int64_round_to_zero( float64 );\nfloat32 float64_to_float32( float64 );\n#ifdef FLOATX80\nfloatx80 float64_to_floatx80( float64 );\n#endif\n#ifdef FLOAT128\nfloat128 float64_to_float128( float64 );\n#endif\n\n/*----------------------------------------------------------------------------\n| Software IEC/IEEE double-precision operations.\n*----------------------------------------------------------------------------*/\nfloat64 float64_round_to_int( float64 );\nfloat64 float64_add( float64, float64 );\nfloat64 float64_sub( float64, float64 );\nfloat64 float64_mul( float64, float64 );\nfloat64 float64_div( float64, float64 );\nfloat64 float64_rem( float64, float64 );\nfloat64 float64_sqrt( float64 );\nflag float64_eq( float64, float64 );\nflag float64_le( float64, float64 );\nflag float64_lt( float64, float64 );\nflag float64_eq_signaling( float64, float64 );\nflag float64_le_quiet( float64, float64 );\nflag float64_lt_quiet( float64, float64 );\nflag float64_is_signaling_nan( float64 );\n\n#ifdef FLOATX80\n\n/*----------------------------------------------------------------------------\n| Software IEC/IEEE extended double-precision conversion routines.\n*----------------------------------------------------------------------------*/\nint32 floatx80_to_int32( floatx80 );\nint32 floatx80_to_int32_round_to_zero( floatx80 );\nint64 floatx80_to_int64( floatx80 );\nint64 floatx80_to_int64_round_to_zero( floatx80 );\nfloat32 floatx80_to_float32( floatx80 );\nfloat64 floatx80_to_float64( floatx80 );\n#ifdef FLOAT128\nfloat128 floatx80_to_float128( floatx80 );\n#endif\nfloatx80 floatx80_scale(floatx80 a, floatx80 b);\n\n/*----------------------------------------------------------------------------\n| Packs the sign `zSign', exponent `zExp', and significand `zSig' into an\n| extended double-precision floating-point value, returning the result.\n*----------------------------------------------------------------------------*/\n\nINLINE floatx80 packFloatx80( flag zSign, int32 zExp, bits64 zSig )\n{\n\tfloatx80 z;\n\n\tz.low = zSig;\n\tz.high = ( ( (bits16) zSign )<<15 ) + zExp;\n\treturn z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Software IEC/IEEE extended double-precision rounding precision.  Valid\n| values are 32, 64, and 80.\n*----------------------------------------------------------------------------*/\nextern int8 floatx80_rounding_precision;\n\n/*----------------------------------------------------------------------------\n| Software IEC/IEEE extended double-precision operations.\n*----------------------------------------------------------------------------*/\nfloatx80 floatx80_round_to_int( floatx80 );\nfloatx80 floatx80_add( floatx80, floatx80 );\nfloatx80 floatx80_sub( floatx80, floatx80 );\nfloatx80 floatx80_mul( floatx80, floatx80 );\nfloatx80 floatx80_div( floatx80, floatx80 );\nfloatx80 floatx80_rem( floatx80, floatx80 );\nfloatx80 floatx80_sqrt( floatx80 );\nflag floatx80_eq( floatx80, floatx80 );\nflag floatx80_le( floatx80, floatx80 );\nflag floatx80_lt( floatx80, floatx80 );\nflag floatx80_eq_signaling( floatx80, floatx80 );\nflag floatx80_le_quiet( floatx80, floatx80 );\nflag floatx80_lt_quiet( floatx80, floatx80 );\nflag floatx80_is_signaling_nan( floatx80 );\n\nint floatx80_fsin(floatx80 &a);\nint floatx80_fcos(floatx80 &a);\nint floatx80_ftan(floatx80 &a);\n\nfloatx80 floatx80_flognp1(floatx80 a);\nfloatx80 floatx80_flogn(floatx80 a);\nfloatx80 floatx80_flog2(floatx80 a);\nfloatx80 floatx80_flog10(floatx80 a);\n\n// roundAndPackFloatx80 used to be in softfloat-round-pack, is now in softfloat.c\nfloatx80 roundAndPackFloatx80(int8 roundingPrecision, flag zSign, int32 zExp, bits64 zSig0, bits64 zSig1);\n\n#endif\n\n#ifdef FLOAT128\n\n/*----------------------------------------------------------------------------\n| Software IEC/IEEE quadruple-precision conversion routines.\n*----------------------------------------------------------------------------*/\nint32 float128_to_int32( float128 );\nint32 float128_to_int32_round_to_zero( float128 );\nint64 float128_to_int64( float128 );\nint64 float128_to_int64_round_to_zero( float128 );\nfloat32 float128_to_float32( float128 );\nfloat64 float128_to_float64( float128 );\n#ifdef FLOATX80\nfloatx80 float128_to_floatx80( float128 );\n#endif\n\n/*----------------------------------------------------------------------------\n| Software IEC/IEEE quadruple-precision operations.\n*----------------------------------------------------------------------------*/\nfloat128 float128_round_to_int( float128 );\nfloat128 float128_add( float128, float128 );\nfloat128 float128_sub( float128, float128 );\nfloat128 float128_mul( float128, float128 );\nfloat128 float128_div( float128, float128 );\nfloat128 float128_rem( float128, float128 );\nfloat128 float128_sqrt( float128 );\nflag float128_eq( float128, float128 );\nflag float128_le( float128, float128 );\nflag float128_lt( float128, float128 );\nflag float128_eq_signaling( float128, float128 );\nflag float128_le_quiet( float128, float128 );\nflag float128_lt_quiet( float128, float128 );\nflag float128_is_signaling_nan( float128 );\n\n/*----------------------------------------------------------------------------\n| Packs the sign `zSign', the exponent `zExp', and the significand formed\n| by the concatenation of `zSig0' and `zSig1' into a quadruple-precision\n| floating-point value, returning the result.  After being shifted into the\n| proper positions, the three fields `zSign', `zExp', and `zSig0' are simply\n| added together to form the most significant 32 bits of the result.  This\n| means that any integer portion of `zSig0' will be added into the exponent.\n| Since a properly normalized significand will have an integer portion equal\n| to 1, the `zExp' input should be 1 less than the desired result exponent\n| whenever `zSig0' and `zSig1' concatenated form a complete, normalized\n| significand.\n*----------------------------------------------------------------------------*/\n\nINLINE float128\n\tpackFloat128( flag zSign, int32 zExp, bits64 zSig0, bits64 zSig1 )\n{\n\tfloat128 z;\n\n\tz.low = zSig1;\n\tz.high = ( ( (bits64) zSign )<<63 ) + ( ( (bits64) zExp )<<48 ) + zSig0;\n\treturn z;\n\n}\n\n/*----------------------------------------------------------------------------\n| Takes an abstract floating-point value having sign `zSign', exponent `zExp',\n| and extended significand formed by the concatenation of `zSig0', `zSig1',\n| and `zSig2', and returns the proper quadruple-precision floating-point value\n| corresponding to the abstract input.  Ordinarily, the abstract value is\n| simply rounded and packed into the quadruple-precision format, with the\n| inexact exception raised if the abstract input cannot be represented\n| exactly.  However, if the abstract value is too large, the overflow and\n| inexact exceptions are raised and an infinity or maximal finite value is\n| returned.  If the abstract value is too small, the input value is rounded to\n| a subnormal number, and the underflow and inexact exceptions are raised if\n| the abstract input cannot be represented exactly as a subnormal quadruple-\n| precision floating-point number.\n|     The input significand must be normalized or smaller.  If the input\n| significand is not normalized, `zExp' must be 0; in that case, the result\n| returned is a subnormal number, and it must not require rounding.  In the\n| usual case that the input significand is normalized, `zExp' must be 1 less\n| than the ``true'' floating-point exponent.  The handling of underflow and\n| overflow follows the IEC/IEEE Standard for Binary Floating-Point Arithmetic.\n*----------------------------------------------------------------------------*/\n\nINLINE float128\n\troundAndPackFloat128(\n\t\tflag zSign, int32 zExp, bits64 zSig0, bits64 zSig1, bits64 zSig2 )\n{\n\tint8 roundingMode;\n\tflag roundNearestEven, increment, isTiny;\n\n\troundingMode = float_rounding_mode;\n\troundNearestEven = ( roundingMode == float_round_nearest_even );\n\tincrement = ( (sbits64) zSig2 < 0 );\n\tif ( ! roundNearestEven ) {\n\t\tif ( roundingMode == float_round_to_zero ) {\n\t\t\tincrement = 0;\n\t\t}\n\t\telse {\n\t\t\tif ( zSign ) {\n\t\t\t\tincrement = ( roundingMode == float_round_down ) && zSig2;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tincrement = ( roundingMode == float_round_up ) && zSig2;\n\t\t\t}\n\t\t}\n\t}\n\tif ( 0x7FFD <= (bits32) zExp ) {\n\t\tif (    ( 0x7FFD < zExp )\n\t\t\t\t|| (    ( zExp == 0x7FFD )\n\t\t\t\t\t&& eq128(\n\t\t\t\t\t\t\tLIT64( 0x0001FFFFFFFFFFFF ),\n\t\t\t\t\t\t\tLIT64( 0xFFFFFFFFFFFFFFFF ),\n\t\t\t\t\t\t\tzSig0,\n\t\t\t\t\t\t\tzSig1\n\t\t\t\t\t\t)\n\t\t\t\t\t&& increment\n\t\t\t\t)\n\t\t\t) {\n\t\t\tfloat_raise( float_flag_overflow | float_flag_inexact );\n\t\t\tif (    ( roundingMode == float_round_to_zero )\n\t\t\t\t\t|| ( zSign && ( roundingMode == float_round_up ) )\n\t\t\t\t\t|| ( ! zSign && ( roundingMode == float_round_down ) )\n\t\t\t\t) {\n\t\t\t\treturn\n\t\t\t\t\tpackFloat128(\n\t\t\t\t\t\tzSign,\n\t\t\t\t\t\t0x7FFE,\n\t\t\t\t\t\tLIT64( 0x0000FFFFFFFFFFFF ),\n\t\t\t\t\t\tLIT64( 0xFFFFFFFFFFFFFFFF )\n\t\t\t\t\t);\n\t\t\t}\n\t\t\treturn packFloat128( zSign, 0x7FFF, 0, 0 );\n\t\t}\n\t\tif ( zExp < 0 ) {\n\t\t\tisTiny =\n\t\t\t\t\t( float_detect_tininess == float_tininess_before_rounding )\n\t\t\t\t|| ( zExp < -1 )\n\t\t\t\t|| ! increment\n\t\t\t\t|| lt128(\n\t\t\t\t\t\tzSig0,\n\t\t\t\t\t\tzSig1,\n\t\t\t\t\t\tLIT64( 0x0001FFFFFFFFFFFF ),\n\t\t\t\t\t\tLIT64( 0xFFFFFFFFFFFFFFFF )\n\t\t\t\t\t);\n\t\t\tshift128ExtraRightJamming(\n\t\t\t\tzSig0, zSig1, zSig2, - zExp, &zSig0, &zSig1, &zSig2 );\n\t\t\tzExp = 0;\n\t\t\tif ( isTiny && zSig2 ) float_raise( float_flag_underflow );\n\t\t\tif ( roundNearestEven ) {\n\t\t\t\tincrement = ( (sbits64) zSig2 < 0 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif ( zSign ) {\n\t\t\t\t\tincrement = ( roundingMode == float_round_down ) && zSig2;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tincrement = ( roundingMode == float_round_up ) && zSig2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tif ( zSig2 ) float_exception_flags |= float_flag_inexact;\n\tif ( increment ) {\n\t\tadd128( zSig0, zSig1, 0, 1, &zSig0, &zSig1 );\n\t\tzSig1 &= ~ ( ( zSig2 + zSig2 == 0 ) & roundNearestEven );\n\t}\n\telse {\n\t\tif ( ( zSig0 | zSig1 ) == 0 ) zExp = 0;\n\t}\n\treturn packFloat128( zSign, zExp, zSig0, zSig1 );\n\n}\n\n/*----------------------------------------------------------------------------\n| Takes an abstract floating-point value having sign `zSign', exponent `zExp',\n| and significand formed by the concatenation of `zSig0' and `zSig1', and\n| returns the proper quadruple-precision floating-point value corresponding\n| to the abstract input.  This routine is just like `roundAndPackFloat128'\n| except that the input significand has fewer bits and does not have to be\n| normalized.  In all cases, `zExp' must be 1 less than the ``true'' floating-\n| point exponent.\n*----------------------------------------------------------------------------*/\n\nINLINE float128\n\tnormalizeRoundAndPackFloat128(\n\t\tflag zSign, int32 zExp, bits64 zSig0, bits64 zSig1 )\n{\n\tint8 shiftCount;\n\tbits64 zSig2;\n\n\tif ( zSig0 == 0 ) {\n\t\tzSig0 = zSig1;\n\t\tzSig1 = 0;\n\t\tzExp -= 64;\n\t}\n\tshiftCount = countLeadingZeros64( zSig0 ) - 15;\n\tif ( 0 <= shiftCount ) {\n\t\tzSig2 = 0;\n\t\tshortShift128Left( zSig0, zSig1, shiftCount, &zSig0, &zSig1 );\n\t}\n\telse {\n\t\tshift128ExtraRightJamming(\n\t\t\tzSig0, zSig1, 0, - shiftCount, &zSig0, &zSig1, &zSig2 );\n\t}\n\tzExp -= shiftCount;\n\treturn roundAndPackFloat128( zSign, zExp, zSig0, zSig1, zSig2 );\n\n}\n#endif\n"
  },
  {
    "path": "vm86/msdos.cpp",
    "content": "/*\n\tMS-DOS Player for Win32 console\n\n\tAuthor : Takeda.Toshiya\n\tDate   : 2009.11.09-\n*/\nint ignore_illegal_insn;\n#include \"msdos.h\"\n\n#define my_strchr(str, chr) (char *)_mbschr((unsigned char *)(str), (unsigned int)(chr))\n#define my_strtok(tok, del) (char *)_mbstok((unsigned char *)(tok), (const unsigned char *)(del))\n#define my_strupr(str) (char *)_mbsupr((unsigned char *)(str))\n\n#define fatalerror(...) { \\\n\tfprintf(stderr, __VA_ARGS__); \\\n\texit(1); \\\n}\n#define error(...) fprintf(stderr, \"error: \" __VA_ARGS__)\n\n#if defined(__MINGW32__)\nextern \"C\" int _CRT_glob = 0;\n#endif\n\n/*\n\tkludge for \"more-standardized\" C++\n*/\n#if !defined(_MSC_VER)\ninline int kludge_min(int a, int b) { return (a<b ? a:b); }\ninline int kludge_max(int a, int b) { return (a>b ? a:b); }\n#define min(a,b) kludge_min(a,b)\n#define max(a,b) kludge_max(a,b)\n#endif\n\nvoid change_console_size_to_80x25();\n\n/* ----------------------------------------------------------------------------\n\tMAME i86/i386\n---------------------------------------------------------------------------- */\n\n#define SUPPORT_DISASSEMBLER\n\n#if defined(HAS_I86)\n\t#define CPU_MODEL i8086\n#elif defined(HAS_I186)\n\t#define CPU_MODEL i80186\n#elif defined(HAS_I286)\n\t#define CPU_MODEL i80286\n#elif defined(HAS_I386)\n\t#define CPU_MODEL i386\n#else\n\t#if defined(HAS_I386SX)\n\t\t#define CPU_MODEL i386SX\n\t#else\n\t\t#if defined(HAS_I486)\n\t\t\t#define CPU_MODEL i486\n\t\t#else\n\t\t\t#if defined(HAS_PENTIUM)\n\t\t\t\t#define CPU_MODEL pentium\n\t\t\t#elif defined(HAS_MEDIAGX)\n\t\t\t\t#define CPU_MODEL mediagx\n\t\t\t#elif defined(HAS_PENTIUM_PRO)\n\t\t\t\t#define CPU_MODEL pentium_pro\n\t\t\t#elif defined(HAS_PENTIUM_MMX)\n\t\t\t\t#define CPU_MODEL pentium_mmx\n\t\t\t#elif defined(HAS_PENTIUM2)\n\t\t\t\t#define CPU_MODEL pentium2\n\t\t\t#elif defined(HAS_PENTIUM3)\n\t\t\t\t#define CPU_MODEL pentium3\n\t\t\t#elif defined(HAS_PENTIUM4)\n\t\t\t\t#define CPU_MODEL pentium4\n\t\t\t#endif\n\t\t\t#define SUPPORT_RDTSC\n\t\t#endif\n\t\t#define SUPPORT_FPU\n\t#endif\n\t#define HAS_I386\n#endif\n\n#ifndef __BIG_ENDIAN__\n#define LSB_FIRST\n#endif\n\n#ifndef INLINE\n#define INLINE inline\n#endif\n#define U64(v) UINT64(v)\n\n//#ifdef _DEBUG\nvoid logerror(const char *format, ...)\n{\n\tva_list arg;\n\n\tva_start(arg, format);\n\tvfprintf(stderr, format, arg);\n\tva_end(arg);\n}\n//#else\n//#define logerror(...)\n//#endif\n//#define logerror(...) fprintf(stderr, __VA_ARGS__)\n//#define logerror(...)\n//#define popmessage(...) fprintf(stderr, __VA_ARGS__)\n#define popmessage(...)\n\n/*****************************************************************************/\n/* src/emu/devcpu.h */\n\n// CPU interface functions\n#define CPU_INIT_NAME(name)\t\t\tcpu_init_##name\n#define CPU_INIT(name)\t\t\t\tvoid CPU_INIT_NAME(name)()\n#define CPU_INIT_CALL(name)\t\t\tCPU_INIT_NAME(name)()\n\n#define CPU_RESET_NAME(name)\t\t\tcpu_reset_##name\n#define CPU_RESET(name)\t\t\t\tvoid CPU_RESET_NAME(name)()\n#define CPU_RESET_CALL(name)\t\t\tCPU_RESET_NAME(name)()\n\n#define CPU_EXECUTE_NAME(name)\t\t\tcpu_execute_##name\n#define CPU_EXECUTE(name)\t\t\tvoid CPU_EXECUTE_NAME(name)()\n#define CPU_EXECUTE_CALL(name)\t\t\tCPU_EXECUTE_NAME(name)()\n\n#define CPU_TRANSLATE_NAME(name)\t\tcpu_translate_##name\n#define CPU_TRANSLATE(name)\t\t\tint CPU_TRANSLATE_NAME(name)(address_spacenum space, int intention, offs_t *address)\n#define CPU_TRANSLATE_CALL(name)\t\tCPU_TRANSLATE_NAME(name)(space, intention, address)\n\n#define CPU_DISASSEMBLE_NAME(name)\t\tcpu_disassemble_##name\n#define CPU_DISASSEMBLE(name)\t\t\tint CPU_DISASSEMBLE_NAME(name)(char *buffer, offs_t eip, const UINT8 *oprom)\n#define CPU_DISASSEMBLE_CALL(name)\t\tCPU_DISASSEMBLE_NAME(name)(buffer, eip, oprom)\n\n/*****************************************************************************/\n/* src/emu/didisasm.h */\n\n// Disassembler constants\nconst UINT32 DASMFLAG_SUPPORTED     = 0x80000000;   // are disassembly flags supported?\nconst UINT32 DASMFLAG_STEP_OUT      = 0x40000000;   // this instruction should be the end of a step out sequence\nconst UINT32 DASMFLAG_STEP_OVER     = 0x20000000;   // this instruction should be stepped over by setting a breakpoint afterwards\nconst UINT32 DASMFLAG_OVERINSTMASK  = 0x18000000;   // number of extra instructions to skip when stepping over\nconst UINT32 DASMFLAG_OVERINSTSHIFT = 27;           // bits to shift after masking to get the value\nconst UINT32 DASMFLAG_LENGTHMASK    = 0x0000ffff;   // the low 16-bits contain the actual length\n\n/*****************************************************************************/\n/* src/emu/diexec.h */\n\n// I/O line states\nenum line_state\n{\n\tCLEAR_LINE = 0,\t\t\t\t// clear (a fired or held) line\n\tASSERT_LINE,\t\t\t\t// assert an interrupt immediately\n\tHOLD_LINE,\t\t\t\t// hold interrupt line until acknowledged\n\tPULSE_LINE\t\t\t\t// pulse interrupt line instantaneously (only for NMI, RESET)\n};\n\n// I/O line definitions\nenum\n{\n\tINPUT_LINE_IRQ = 0,\n\tINPUT_LINE_NMI\n};\n\n/*****************************************************************************/\n/* src/emu/dimemory.h */\n\n// Translation intentions\nconst int TRANSLATE_TYPE_MASK       = 0x03;     // read write or fetch\nconst int TRANSLATE_USER_MASK       = 0x04;     // user mode or fully privileged\nconst int TRANSLATE_DEBUG_MASK      = 0x08;     // debug mode (no side effects)\n\nconst int TRANSLATE_READ            = 0;        // translate for read\nconst int TRANSLATE_WRITE           = 1;        // translate for write\nconst int TRANSLATE_FETCH           = 2;        // translate for instruction fetch\nconst int TRANSLATE_READ_USER       = (TRANSLATE_READ | TRANSLATE_USER_MASK);\nconst int TRANSLATE_WRITE_USER      = (TRANSLATE_WRITE | TRANSLATE_USER_MASK);\nconst int TRANSLATE_FETCH_USER      = (TRANSLATE_FETCH | TRANSLATE_USER_MASK);\nconst int TRANSLATE_READ_DEBUG      = (TRANSLATE_READ | TRANSLATE_DEBUG_MASK);\nconst int TRANSLATE_WRITE_DEBUG     = (TRANSLATE_WRITE | TRANSLATE_DEBUG_MASK);\nconst int TRANSLATE_FETCH_DEBUG     = (TRANSLATE_FETCH | TRANSLATE_DEBUG_MASK);\n\n/*****************************************************************************/\n/* src/emu/emucore.h */\n\n// constants for expression endianness\nenum endianness_t\n{\n\tENDIANNESS_LITTLE,\n\tENDIANNESS_BIG\n};\n\n// declare native endianness to be one or the other\n#ifdef LSB_FIRST\nconst endianness_t ENDIANNESS_NATIVE = ENDIANNESS_LITTLE;\n#else\nconst endianness_t ENDIANNESS_NATIVE = ENDIANNESS_BIG;\n#endif\n\n// endian-based value: first value is if 'endian' is little-endian, second is if 'endian' is big-endian\n#define ENDIAN_VALUE_LE_BE(endian,leval,beval)\t(((endian) == ENDIANNESS_LITTLE) ? (leval) : (beval))\n\n// endian-based value: first value is if native endianness is little-endian, second is if native is big-endian\n#define NATIVE_ENDIAN_VALUE_LE_BE(leval,beval)\tENDIAN_VALUE_LE_BE(ENDIANNESS_NATIVE, leval, beval)\n\n// endian-based value: first value is if 'endian' matches native, second is if 'endian' doesn't match native\n#define ENDIAN_VALUE_NE_NNE(endian,leval,beval)\t(((endian) == ENDIANNESS_NATIVE) ? (neval) : (nneval))\n\n/*****************************************************************************/\n/* src/emu/memory.h */\n\n// address spaces\nenum address_spacenum\n{\n\tAS_0,                           // first address space\n\tAS_1,                           // second address space\n\tAS_2,                           // third address space\n\tAS_3,                           // fourth address space\n\tADDRESS_SPACES,                 // maximum number of address spaces\n\n\t// alternate address space names for common use\n\tAS_PROGRAM = AS_0,              // program address space\n\tAS_DATA = AS_1,                 // data address space\n\tAS_IO = AS_2                    // I/O address space\n};\n\n// offsets and addresses are 32-bit (for now...)\ntypedef UINT32\toffs_t;\nextern \"C\" void *wine_ldt_get_ptr(unsigned short sel, unsigned long offset);\nvoid *read_ptr(offs_t byteaddress)\n{\n\treturn nullptr;\n}\n// read accessors\nUINT8 read_byte(offs_t byteaddress)\n{\n#if 0// defined(HAS_I386)\n\tif(byteaddress < MAX_MEM) {\n\t\treturn mem[byteaddress];\n//\t} else if((byteaddress & 0xfffffff0) == 0xfffffff0) {\n//\t\treturn read_byte(byteaddress & 0xfffff);\n\t}\n\treturn 0;\n#else\n\treturn mem[byteaddress];\n#endif\n}\n\nUINT16 read_word(offs_t byteaddress)\n{\n#if 0// defined(HAS_I386)\n\tif(byteaddress < MAX_MEM - 1) {\n\t\treturn *(UINT16 *)(mem + byteaddress);\n//\t} else if((byteaddress & 0xfffffff0) == 0xfffffff0) {\n//\t\treturn read_word(byteaddress & 0xfffff);\n\t}\n\treturn 0;\n#else\n\treturn *(UINT16 *)(mem + byteaddress);\n#endif\n}\n\nUINT32 read_dword(offs_t byteaddress)\n{\n#if 0// defined(HAS_I386)\n\tif(byteaddress < MAX_MEM - 3) {\n\t\treturn *(UINT32 *)(mem + byteaddress);\n//\t} else if((byteaddress & 0xfffffff0) == 0xfffffff0) {\n//\t\treturn read_dword(byteaddress & 0xfffff);\n\t}\n\treturn 0;\n#else\n\treturn *(UINT32 *)(mem + byteaddress);\n#endif\n}\n\nvoid write_byte(offs_t byteaddress, UINT8 data)\n{\n\t/*\n\tif(byteaddress < MEMORY_END) {\n\t\tmem[byteaddress] = data;\n\t} else if(byteaddress >= text_vram_top_address && byteaddress < text_vram_end_address) {\n\t\tif(!restore_console_on_exit && (scr_width != 80 || scr_height != 25)) {\n\t\t\tchange_console_size_to_80x25();\n\t\t\trestore_console_on_exit = true;\n\t\t}\n\t\twrite_text_vram_byte(byteaddress - text_vram_top_address, data);\n\t\tmem[byteaddress] = data;\n\t} else if(byteaddress >= shadow_buffer_top_address && byteaddress < shadow_buffer_end_address) {\n\t\tif(int_10h_feh_called && !int_10h_ffh_called) {\n\t\t\twrite_text_vram_byte(byteaddress - shadow_buffer_top_address, data);\n\t\t}\n\t\tmem[byteaddress] = data;\n#if defined(HAS_I386)\n\t} else if(byteaddress < MAX_MEM) {\n#else\n\t} else {\n#endif\n\t\tmem[byteaddress] = data;\n\t}\n\t*/\n\tmem[byteaddress] = data;\n}\n\nvoid write_word(offs_t byteaddress, UINT16 data)\n{\n\t*(UINT16 *)(mem + byteaddress) = data;\n\t/*\n\tif(byteaddress < MEMORY_END) {\n\t\t*(UINT16 *)(mem + byteaddress) = data;\n\t} else if(byteaddress >= text_vram_top_address && byteaddress < text_vram_end_address) {\n\t\tif(!restore_console_on_exit && (scr_width != 80 || scr_height != 25)) {\n\t\t\tchange_console_size_to_80x25();\n\t\t\trestore_console_on_exit = true;\n\t\t}\n\t\twrite_text_vram_word(byteaddress - text_vram_top_address, data);\n\t\t*(UINT16 *)(mem + byteaddress) = data;\n\t} else if(byteaddress >= shadow_buffer_top_address && byteaddress < shadow_buffer_end_address) {\n\t\tif(int_10h_feh_called && !int_10h_ffh_called) {\n\t\t\twrite_text_vram_word(byteaddress - shadow_buffer_top_address, data);\n\t\t}\n\t\t*(UINT16 *)(mem + byteaddress) = data;\n#if defined(HAS_I386)\n\t} else if(byteaddress < MAX_MEM - 1) {\n#else\n\t} else {\n#endif\n\t\t*(UINT16 *)(mem + byteaddress) = data;\n\t}*/\n}\n\nvoid write_dword(offs_t byteaddress, UINT32 data)\n{\n\t*(UINT32 *)(mem + byteaddress) = data;\n\t/*\n\tif(byteaddress < MEMORY_END) {\n\t\t*(UINT32 *)(mem + byteaddress) = data;\n\t} else if(byteaddress >= text_vram_top_address && byteaddress < text_vram_end_address) {\n\t\tif(!restore_console_on_exit && (scr_width != 80 || scr_height != 25)) {\n\t\t\tchange_console_size_to_80x25();\n\t\t\trestore_console_on_exit = true;\n\t\t}\n\t\twrite_text_vram_dword(byteaddress - text_vram_top_address, data);\n\t\t*(UINT32 *)(mem + byteaddress) = data;\n\t} else if(byteaddress >= shadow_buffer_top_address && byteaddress < shadow_buffer_end_address) {\n\t\tif(int_10h_feh_called && !int_10h_ffh_called) {\n\t\t\twrite_text_vram_dword(byteaddress - shadow_buffer_top_address, data);\n\t\t}\n\t\t*(UINT32 *)(mem + byteaddress) = data;\n#if defined(HAS_I386)\n\t} else if(byteaddress < MAX_MEM - 3) {\n#else\n\t} else {\n#endif\n\t\t*(UINT32 *)(mem + byteaddress) = data;\n\t}\n\t*/\n}\n\n#define read_decrypted_byte read_byte\n#define read_decrypted_word read_word\n#define read_decrypted_dword read_dword\n\n#define read_raw_byte read_byte\n#define write_raw_byte write_byte\n\n#define read_word_unaligned read_word\n#define write_word_unaligned write_word\n\n#define read_io_word_unaligned read_io_word\n#define write_io_word_unaligned write_io_word\n\nUINT8 read_io_byte(offs_t byteaddress);\nUINT16 read_io_word(offs_t byteaddress);\nUINT32 read_io_dword(offs_t byteaddress);\n\nvoid write_io_byte(offs_t byteaddress, UINT8 data);\nvoid write_io_word(offs_t byteaddress, UINT16 data);\nvoid write_io_dword(offs_t byteaddress, UINT32 data);\n\n/*****************************************************************************/\n/* src/osd/osdcomm.h */\n\n/* Highly useful macro for compile-time knowledge of an array size */\n#define ARRAY_LENGTH(x)     (sizeof(x) / sizeof(x[0]))\n\n#if defined(HAS_I386)\n\tstatic CPU_TRANSLATE(i386);\n\t#include \"mame/lib/softfloat/softfloat.c\"\n\t#include \"mame/lib/softfloat/fsincos.c\"\n\t#include \"mame/lib/softfloat/f2xm1.c\"\n\t#include \"mame/lib/softfloat/fpatan.c\"\n\t#include \"mame/lib/softfloat/fyl2x.c\"\n\t#include \"mame/emu/cpu/i386/i386.c\"\n\t#include \"mame/emu/cpu/vtlb.c\"\n#elif defined(HAS_I286)\n\t#include \"mame/emu/cpu/i86/i286.c\"\n#else\n\t#include \"mame/emu/cpu/i86/i86.c\"\n#endif\n#ifdef SUPPORT_DISASSEMBLER\n\t#include \"mame/emu/cpu/i386/i386dasm.c\"\n\tbool dasm = false;\n#endif\n\n#if defined(HAS_I386)\n\t#define SREG(x)\t\t\t\tm_sreg[x].selector\n\t#define SREG_BASE(x)\t\t\tm_sreg[x].base\n\n\tint cpu_type, cpu_step;\n#else\n\t#define REG8(x)\t\t\t\tm_regs.b[x]\n\t#define REG16(x)\t\t\tm_regs.w[x]\n\t#define SREG(x)\t\t\t\tm_sregs[x]\n\t#define SREG_BASE(x)\t\t\tm_base[x]\n\t#define m_CF\t\t\t\tm_CarryVal\n\t#define m_a20_mask\t\t\tAMASK\n\t//#define i386_load_segment_descriptor(x)\tm_base[x] = SegBase(x)\n\tvoid load_segment_descriptor_wine(int sreg);\n#define i386_load_segment_descriptor(x) load_segment_descriptor_wine(x)\n\t#if defined(HAS_I286)\n\t\t#define i386_set_a20_line(x)\ti80286_set_a20_line(x)\n\t#else\n\t\t#define i386_set_a20_line(x)\n\t#endif\n\t#define i386_set_irq_line(x, y)\t\tset_irq_line(x, y)\n#endif\n\nvoid i386_jmp_far(UINT16 selector, UINT32 address)\n{\n#if defined(HAS_I386)\n\tif(PROTECTED_MODE && !V8086_MODE) {\n\t\ti386_protected_mode_jump(selector, address, 1, m_operand_size);\n\t} else {\n\t\tSREG(CS) = selector;\n\t\tm_performed_intersegment_jump = 1;\n\t\ti386_load_segment_descriptor(CS);\n\t\tm_eip = address;\n\t\tCHANGE_PC(m_eip);\n\t}\n#elif defined(HAS_I286)\n\ti80286_code_descriptor(selector, address, 1);\n#else\n\tSREG(CS) = selector;\n\ti386_load_segment_descriptor(CS);\n\tm_pc = (SREG_BASE(CS) + address) & m_a20_mask;\n#endif\n}\n\n/* ----------------------------------------------------------------------------\nMS-DOS virtual machine\n---------------------------------------------------------------------------- */\nvoid msdos_syscall(unsigned int a)\n{\n}\n\n/* ----------------------------------------------------------------------------\n\tPC/AT hardware emulation\n---------------------------------------------------------------------------- */\n\nvoid hardware_init()\n{\n\tCPU_INIT_CALL(CPU_MODEL);\n\tCPU_RESET_CALL(CPU_MODEL);\n#if defined(HAS_I386)\n\tcpu_type = (REG32(EDX) >> 8) & 0x0f;\n\tcpu_step = (REG32(EDX) >> 0) & 0x0f;\n#endif\n\ti386_set_a20_line(0);\n}\n\nvoid hardware_finish()\n{\n#if defined(HAS_I386)\n\tvtlb_free(m_vtlb);\n#endif\n}\n\n\nint pic_ack()\n{\n\treturn 0;\n}\n\ntypedef DWORD (*DOSVM_inport_t)(int port, int size, CONTEXT *ctx);\ntypedef void (*DOSVM_outport_t)(int port, int size, DWORD value, CONTEXT *ctx);\nDOSVM_inport_t DOSVM_inport;\nDOSVM_outport_t DOSVM_outport;\nextern \"C\" void save_context(CONTEXT *context);\nextern \"C\" void load_context(CONTEXT *context);\n\n// i/o bus\nUINT8 read_io_byte(offs_t addr)\n{\n    CONTEXT ctx;\n    save_context(&ctx);\n    UINT8 ret = (UINT8)DOSVM_inport(addr, 1, &ctx);\n    load_context(&ctx);\n    return ret;\n}\n\nUINT16 read_io_word(offs_t addr)\n{\n    CONTEXT ctx;\n    save_context(&ctx);\n    UINT16 ret = (UINT16)DOSVM_inport(addr, 2, &ctx);\n    load_context(&ctx);\n    return ret;\n}\n\nUINT32 read_io_dword(offs_t addr)\n{\n    CONTEXT ctx;\n    save_context(&ctx);\n    UINT32 ret = DOSVM_inport(addr, 4, &ctx);\n    load_context(&ctx);\n    return ret;\n}\n\nvoid write_io_byte(offs_t addr, UINT8 val)\n{\n    CONTEXT ctx;\n    save_context(&ctx);\n    DOSVM_outport(addr, 1, val, &ctx);\n    load_context(&ctx);\n}\n\nvoid write_io_word(offs_t addr, UINT16 val)\n{\n    CONTEXT ctx;\n    save_context(&ctx);\n    DOSVM_outport(addr, 2, val, &ctx);\n    load_context(&ctx);\n}\n\nvoid write_io_dword(offs_t addr, UINT32 val)\n{\n    CONTEXT ctx;\n    save_context(&ctx);\n    DOSVM_outport(addr, 4, val, &ctx);\n    load_context(&ctx);\n}\n#undef min\n#undef max\n\nstatic HMODULE krnl386 = 0;\n\nextern \"C\"\n{\n#define EXCEPTION_PROTECTED_MODE       0x80020100\n    //kenel16_private.h\n#include \"wine/exception.h\"\n#include \"../krnl386/kernel16_private.h\"\n#include <wownt32.h>\n#define KRNL386 \"krnl386.exe16\"\n\tPVOID dynamic_setWOW32Reserved(PVOID w)\n\t{\n\t\tstatic PVOID(*setWOW32Reserved)(PVOID);\n\t\tif (!setWOW32Reserved)\n\t\t{\n\t\t\tif (!krnl386)\n\t\t\t\tkrnl386 = LoadLibraryA(KRNL386);\n\t\t\tsetWOW32Reserved = (PVOID(*)(PVOID))GetProcAddress(krnl386, \"setWOW32Reserved\");\n\t\t}\n\t\treturn setWOW32Reserved(w);\n\t}\n\tPVOID dynamic_getWOW32Reserved()\n\t{\n\t\tstatic PVOID(*getWOW32Reserved)();\n\t\tif (!getWOW32Reserved)\n\t\t{\n\t\t\tif (!krnl386)\n\t\t\t\tkrnl386 = LoadLibraryA(KRNL386);\n\t\t\tgetWOW32Reserved = (PVOID(*)())GetProcAddress(krnl386, \"getWOW32Reserved\");\n\t\t}\n\t\treturn getWOW32Reserved();\n\t}\n    WINE_VM86_TEB_INFO *dynamic_getGdiTebBatch()\n    {\n        static WINE_VM86_TEB_INFO*(*getGdiTebBatch)();\n        if (!getGdiTebBatch)\n        {\n            if (!krnl386)\n                krnl386 = LoadLibraryA(KRNL386);\n            getGdiTebBatch = (WINE_VM86_TEB_INFO*(*)())GetProcAddress(krnl386, \"getGdiTebBatch\");\n        }\n        return getGdiTebBatch();\n    }\n\tvoid dynamic__wine_call_int_handler(CONTEXT *context, BYTE intnum)\n\t{\n\t\tstatic void(*__wine_call_int_handler)(CONTEXT *context, BYTE intnum);\n\t\tif (!__wine_call_int_handler)\n\t\t{\n\t\t\tif (!krnl386)\n\t\t\t\tkrnl386 = LoadLibraryA(KRNL386);\n\t\t\t__wine_call_int_handler = (void(*)(CONTEXT *context, BYTE intnum))GetProcAddress(krnl386, \"__wine_call_int_handler\");\n\t\t}\n\t\t__wine_call_int_handler(context, intnum);\n\t}\n    __declspec(dllimport) LDT_ENTRY wine_ldt[8192];\n\t/***********************************************************************\n\t*           SELECTOR_SetEntries\n\t*\n\t* Set the LDT entries for an array of selectors.\n\t*/\n\tstatic BOOL SELECTOR_SetEntries(WORD sel, const void *base, DWORD size, unsigned char flags)\n\t{\n\t\tLDT_ENTRY entry;\n\t\tWORD i, count;\n\n\t\twine_ldt_set_base(&entry, base);\n\t\twine_ldt_set_limit(&entry, size - 1);\n\t\twine_ldt_set_flags(&entry, flags);\n\t\tcount = (size + 0xffff) / 0x10000;\n\t\tfor (i = 0; i < count; i++)\n\t\t{\n\t\t\tif (wine_ldt_set_entry(sel + (i << 3), &entry) < 0) return FALSE;\n\t\t\twine_ldt_set_base(&entry, (char*)wine_ldt_get_base(&entry) + 0x10000);\n\t\t\t/* yep, Windows sets limit like that, not 64K sel units */\n\t\t\twine_ldt_set_limit(&entry, wine_ldt_get_limit(&entry) - 0x10000);\n\t\t}\n\t\treturn TRUE;\n\t}\n\tvoid wine_ldt_free_entries(unsigned short sel, int count);\n\t/***********************************************************************\n\t*           SELECTOR_AllocBlock\n\t*\n\t* Allocate selectors for a block of linear memory.\n\t*/\n\tWORD SELECTOR_AllocBlock(const void *base, DWORD size, unsigned char flags)\n\t{\n\t\tWORD sel, count;\n\n\t\tif (!size) return 0;\n\t\tcount = (size + 0xffff) / 0x10000;\n\t\tif ((sel = wine_ldt_alloc_entries(count)))\n\t\t{\n\t\t\tif (SELECTOR_SetEntries(sel, base, size, flags)) return sel;\n\t\t\twine_ldt_free_entries(sel, count);\n\t\t\tsel = 0;\n\t\t}\n\t\treturn sel;\n\t}\n    WORD reg_fs = 0;\n    WORD reg_gs = 0;\n    WORD reg_cs = 0;\n    WORD reg_ss = 0;\n    WORD reg_ds = 0;\n    WORD reg_es = 0;\n\tvoid save_context(CONTEXT *context)\n\t{\n\t\tcontext->Eax = REG32(EAX);\n\t\tcontext->Ecx = REG32(ECX);\n\t\tcontext->Edx = REG32(EDX);\n\t\tcontext->Ebx = REG32(EBX);\n\t\tcontext->Esp = REG32(ESP);\n\t\tcontext->Ebp = REG32(EBP);\n\t\tcontext->Esi = REG32(ESI);\n\t\tcontext->Edi = REG32(EDI);\n\t\tcontext->Ebp = REG32(EBP);\n\t\tcontext->Eip = m_eip;\n\t\tcontext->SegEs = SREG(ES);\n\t\tcontext->SegCs = SREG(CS);\n\t\tcontext->SegSs = SREG(SS);\n\t\tcontext->SegDs = SREG(DS);\n\t\tcontext->SegFs = SREG(FS);\n\t\tcontext->SegGs = SREG(GS);\n        context->EFlags = get_flags();\n        if (!V8086_MODE)\n            dynamic_setWOW32Reserved((PVOID)(SREG(SS) << 16 | REG16(SP)));\n\t}\n\tvoid load_context(CONTEXT *context)\n\t{\n\t\tREG32(EAX) = (DWORD)context->Eax;\n\t\tREG32(ECX) = (DWORD)context->Ecx;\n\t\tREG32(EDX) = (DWORD)context->Edx;\n\t\tREG32(EBX) = (DWORD)context->Ebx;\n\t\tREG32(ESP) = (DWORD)context->Esp;\n\t\tREG32(EBP) = (DWORD)context->Ebp;\n\t\tREG32(ESI) = (DWORD)context->Esi;\n\t\tREG32(EDI) = (DWORD)context->Edi;\n\t\tREG32(EBP) = (DWORD)context->Ebp;\n\t\tSREG(ES) = (WORD)context->SegEs;\n\t\tSREG(CS) = (WORD)context->SegCs;\n\t\tSREG(SS) = (WORD)context->SegSs;\n\t\tSREG(DS) = (WORD)context->SegDs;//ES, CS, SS, DS\n\t\t//ES, CS, SS, DS, FS, GS\n        /* Some programs expect that gs is not a valid selector! */\n        /* Some programs expect that fs is not a valid selector! */\n\t\tSREG(FS) = (WORD)context->SegFs == reg_fs ? 0 : context->SegFs;\n\t\tSREG(GS) = (WORD)context->SegGs == reg_gs ? 0 : context->SegGs;\n\t\ti386_load_segment_descriptor(ES);\n\t\ti386_load_segment_descriptor(SS);\n\t\ti386_load_segment_descriptor(DS);\n\t\ti386_load_segment_descriptor(FS);\n\t\ti386_load_segment_descriptor(GS);\n\t\ti386_jmp_far(SREG(CS), context->Eip);\n        m_eip = context->Eip;\n\t\tset_flags(context->EFlags);\n\t}\n\tunsigned char table[256 * 4 + 2 + 0x8 * 256] = { 0xcf };\n\tunsigned char iret[256] = { 0xcf };\n\tWORD SELECTOR_AllocBlock(const void *base, DWORD size, unsigned char flags);\n#include <imagehlp.h>\n\n#pragma comment(lib, \"imagehlp.lib\")\n\tconst size_t stack_frame_size = 100;\n\tthread_local void* current_stack_frame[100];\n\tthread_local size_t current_stack_frame_size;\n\tvoid capture_stack_trace()\n\t{\n\t\tauto process = GetCurrentProcess();\n\t\tcurrent_stack_frame_size = CaptureStackBackTrace(0, stack_frame_size, current_stack_frame, NULL);\n\t}\n    static DWORD wow_calllback_retaddr;\n    static void print_16bit_stack(DWORD ret_addr, DWORD old_ebp)\n    {\n        auto ret_cs = SELECTOROF(ret_addr);\n        auto ret_ip = OFFSETOF(ret_addr);\n        typedef void(*vm_debug_get_entry_point_t)(char *module, char *func, WORD *ordinal, STACK16FRAME *frame);\n        static vm_debug_get_entry_point_t vm_debug_get_entry_point;\n        if (!vm_debug_get_entry_point)\n        {\n            vm_debug_get_entry_point = (vm_debug_get_entry_point_t)GetProcAddress(LoadLibraryA(KRNL386), \"vm_debug_get_entry_point\");\n        }\n        if (ret_addr == wow_calllback_retaddr)\n        {\n            fprintf(stderr, \"(callback)cs:ip=%04x:%04x bp=%04x\\n\", ret_cs, ret_ip, old_ebp);\n        }\n        else\n        {\n            auto call_instr = read_byte((DWORD)wine_ldt_copy.base[ret_cs >> 3] + ret_ip - 5);\n            auto call_addr = read_dword((DWORD)wine_ldt_copy.base[ret_cs >> 3] + ret_ip - 4);\n            fprintf(stderr, \"cs:ip=%04x:%04x bp=%04x\", ret_cs, ret_ip, old_ebp);\n            if (call_instr == 0x9a) /* call far imm */\n            {\n                fprintf(stderr, \"(call %04x:%04x)\", SELECTOROF(call_addr), OFFSETOF(call_addr));\n                if (wine_ldt[SELECTOROF(call_addr) >> __AHSHIFT].HighWord.Bits.Default_Big)\n                {\n                    char module[100], func[100];\n                    WORD ordinal = 0;\n                    STACK16FRAME frame = { 0 };\n\n                    frame.module_cs = SELECTOROF(call_addr);\n                    frame.entry_ip = OFFSETOF(call_addr) + 7;\n                    vm_debug_get_entry_point(module, func, &ordinal, &frame);\n                    fprintf(stderr, \"\\n%s.%d: %s\", module, ordinal, func);\n                }\n            }\n            else\n            {\n                fprintf(stderr, \"                \");\n            }\n            fprintf(stderr, \" args(\");\n            BOOL farframe = old_ebp & 1;\n            old_ebp &= ~1;\n            for (int i = 0; i < 10; i++)\n            {\n                fprintf(stderr, i ? \",%04x\" : \"%04x\", read_word(SREG_BASE(SS) + old_ebp + (farframe ? 6 : 4) + i * 2));\n            }\n            fprintf(stderr, \")\\n\");\n        }\n    }\n    void walk_16bit_stack(void)\n    {\n        if (V8086_MODE)\n            return;\n        __TRY\n        {\n            auto ebp = REG32(EBP);\n            auto last_cs = SREG(CS);\n            print_16bit_stack(MAKESEGPTR(last_cs, m_eip), ebp);\n            for (int i = 0; i < 60; i++)\n            {\n                auto old_ebp = read_word(SREG_BASE(SS) + ebp);\n                DWORD ret_addr = read_dword(SREG_BASE(SS) + ebp + 2);\n                if ((old_ebp & 1) || ((wine_ldt_copy.flags[SELECTOROF(ret_addr) >> 3] & WINE_LDT_FLAGS_TYPE_MASK) == WINE_LDT_FLAGS_CODE))\n                {\n                    old_ebp |= 1;\n                    last_cs = SELECTOROF(ret_addr);\n                }\n                else\n                    ret_addr = MAKESEGPTR(last_cs, OFFSETOF(ret_addr));\n                print_16bit_stack(ret_addr, old_ebp);\n                if (old_ebp == ebp)\n                {\n                    break;\n                }\n                ebp = old_ebp & ~1;\n            }\n        }\n        __EXCEPT_PAGE_FAULT\n        {\n        }\n        __ENDTRY\n    }\n\tvoid dump_stack_trace(void)\n\t{\n\t\tunsigned int   i;\n\t\tSYMBOL_INFO  * symbol;\n\t\tHANDLE         process;\n\n\t\tprocess = GetCurrentProcess();\n\n\t\tsymbol = (SYMBOL_INFO *)calloc(sizeof(SYMBOL_INFO) + 256 * sizeof(char), 1);\n\t\tsymbol->MaxNameLen = 255;\n\t\tsymbol->SizeOfStruct = sizeof(SYMBOL_INFO);\n\t\tfor (i = 0; i < current_stack_frame_size; i++)\n\t\t{\n\t\t\tIMAGEHLP_LINE line = {};\n\t\t\tline.SizeOfStruct = sizeof(IMAGEHLP_LINE);\n\t\t\tDWORD d = 0;\n\t\t\tauto success = SymGetLineFromAddr(process, (DWORD64)current_stack_frame[i], &d, &line);\n\t\t\tSymFromAddr(process, (DWORD64)(current_stack_frame[i]), 0, symbol);\n            IMAGEHLP_MODULE mod_info = { 0 };\n            mod_info.SizeOfStruct = sizeof(mod_info);\n            const char *imgname = \"\";\n            if (SymGetModuleInfo(process, (ULONG_PTR)current_stack_frame[i], &mod_info))\n            {\n                imgname = strrchr(mod_info.ImageName, '\\\\');\n                if (!imgname)\n                    imgname = mod_info.ImageName;\n                else\n                    imgname = imgname + 1;\n            }\n            fprintf(stderr, \"%i: %s!%s+0x%llx - 0x%llx 0x%lx %s:%d\\n\", current_stack_frame_size - i - 1, imgname, symbol->Name, (ULONG64)current_stack_frame[i] - symbol->Address, symbol->Address, current_stack_frame[i], line.FileName, line.LineNumber);\n\t\t\tif (!strcmp(symbol->Name, \"KiUserExceptionDispatcher\"))\n\t\t\t{\n\t\t\t\tfprintf(stderr, \"\\n\");\n\t\t\t}\n\t\t}\n\n\t\tfree(symbol);\n\t\tcurrent_stack_frame_size = 0;\n\t}\n    void dump_all_modules(void)\n    {\n        DWORD cb;\n        HMODULE *hModules = nullptr;\n        HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, false, GetCurrentProcessId());\n        if (!EnumProcessModules(hProcess, nullptr, 0, &cb))\n            goto exit;\n        hModules = new HMODULE[cb / sizeof(HMODULE)];\n        if (!EnumProcessModules(hProcess, hModules, cb, &cb))\n            goto exit;\n        for (int i = 0; i < cb / sizeof(HMODULE); i++)\n        {\n            WCHAR name[MAX_PATH];\n            MODULEINFO module_info;\n            if (GetModuleFileNameExW(hProcess, hModules[i], name, ARRAY_SIZE(name)) && GetModuleInformation(hProcess, hModules[i], &module_info, sizeof(module_info)))\n            {\n                LPWSTR n = wcsrchr(name, L'\\\\');\n                fwprintf(stderr, L\"%p-%p %ls\\n\", hModules[i], (ULONG_PTR)hModules[i] + module_info.SizeOfImage, n ? n + 1 : name);\n            }\n        }\n    exit:\n        CloseHandle(hProcess);\n        delete[] hModules;\n    }\n    BOOL WINAPI dump(DWORD CtrlType)\n    {\n        static BOOL dump;\n        DWORD pid = GetCurrentProcessId();\n        DWORD tid = GetCurrentThreadId();\n        HANDLE hThreadSnap = INVALID_HANDLE_VALUE;\n        THREADENTRY32 te32;\n        if (dump)\n        {\n            ExitProcess(0);\n        }\n        dump = TRUE;\n        hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);\n        if (hThreadSnap == INVALID_HANDLE_VALUE)\n            return false;\n        FILE *out = fdopen(dup(fileno(stdout)), \"w\");\n        fprintf(out, \"dump\\n\");\n        te32.dwSize = sizeof(THREADENTRY32);\n        if (!Thread32First(hThreadSnap, &te32))\n        {\n            CloseHandle(hThreadSnap);\n            return false;\n        }\n        do\n        {\n            if (te32.th32OwnerProcessID == pid)\n            {\n                if (tid != te32.th32ThreadID)\n                {\n                    HANDLE threads = OpenThread(THREAD_SUSPEND_RESUME, FALSE, te32.th32ThreadID);\n                    SuspendThread(threads);\n                    CloseHandle(threads);\n                }\n            }\n        } while (Thread32Next(hThreadSnap, &te32));\n        CloseHandle(hThreadSnap);\n        /* prevent deadlock */\n        FILE *err = fdopen(dup(fileno(stderr)), \"w\");\n\n        __TRY\n        {\n            char buffer[256];\n#if defined(HAS_I386)\n            UINT64 eip = m_eip;\n#else\n            UINT64 eip = m_pc - SREG_BASE(CS);\n#endif\n            UINT8 *oprom = mem + SREG_BASE(CS) + eip;\n\n            int result;\n            for (int i = 0; i < 8192; i++)\n            {\n                LDT_ENTRY entry = wine_ldt[i];\n                DWORD base = entry.BaseLow | (entry.HighWord.Bytes.BaseMid << 16);\n                DWORD limit = wine_ldt_get_limit(&entry);\n                if (!base)\n                    continue;\n                if ((entry.HighWord.Bytes.Flags1 & 0x0018) == 0x0018)\n                {\n\n                }\n                else if ((entry.HighWord.Bytes.Flags1 & 0x0010) != 0)\n                    continue;\n                fprintf(err, \"%04X %p-%p\\n\", i << 3 | 7, (void*)base, (void*)limit);\n                __TRY\n                {\n                    for (int j = 0; j < limit; )\n                    {\n                        m_eip = j;\n                        m_sreg[CS].selector = i << 3 | 7;\n                        i386_load_segment_descriptor(CS);\n                        m_operand_size = m_sreg[CS].d;\n                        m_xmm_operand_size = 0;\n                        m_address_size = m_sreg[CS].d;\n                        m_operand_prefix = 0;\n                        m_address_prefix = 0;\n                        m_operand_size = m_address_size = 0;\n                        i386_jmp_far(i << 3 | 7, j); eip = m_eip; oprom = mem + SREG_BASE(CS) + eip;\n                        /* call */\n                        if (*oprom == 0x9A &&!m_sreg[CS].d)\n                        {\n                            WORD addr = *(LPWORD)(oprom + 1);\n                            WORD seg = *(LPWORD)(oprom + 3);\n                            LPLDT_ENTRY entry = wine_ldt + (seg >> 3);\n                            LPBYTE base = (LPBYTE)wine_ldt_get_base(entry);\n                            LPBYTE relay = base + addr;\n                            relay += 2; /* push bp */\n                            relay += 1; /* push func */\n                            LPVOID func = (LPVOID)relay;\n                            relay += 4;\n                            STACK16FRAME frame = { 0 };\n                            frame.module_cs = seg;\n                            frame.entry_ip = addr + 7;\n                            STACK16FRAME *framep = (STACK16FRAME*)(SREG_BASE(SS) + REG32(ESP));\n                            *framep = frame;\n                            dynamic_setWOW32Reserved((LPVOID)(SREG(SS) << 16 | REG16(SP)));\n                            {\n                                typedef void(*vm_debug_get_entry_point_t)(char *module, char *func, WORD *ordinal, STACK16FRAME *frame);\n                                static vm_debug_get_entry_point_t vm_debug_get_entry_point;\n                                if (!vm_debug_get_entry_point)\n                                {\n                                    vm_debug_get_entry_point = (vm_debug_get_entry_point_t)GetProcAddress(LoadLibraryA(KRNL386), \"vm_debug_get_entry_point\");\n                                }\n                                char module[100], func[100];\n                                WORD ordinal = 0;\n                                vm_debug_get_entry_point(module, func, &ordinal, NULL);\n                                fprintf(err, \"call built-in func %p %s.%d: %s\\n\", entry, module, ordinal, func);\n                            }\n                        }\n                        result = i386_dasm_one_ex(buffer, eip, oprom, 16);// CPU_DISASSEMBLE_CALL(x86_32);//i386_dasm_one_ex(buffer, 0, (UINT8*)(base + j), 16);\n                        fprintf(err, \"%04X:%04X %s\\n\", i << 3 | 7, j, buffer);\n                        j += result & 0xFF;\n                    }\n                }\n                __EXCEPT_ALL\n                {\n\n                }\n                __ENDTRY\n            }\n        }\n        __EXCEPT_ALL\n        {\n\n        }\n        __ENDTRY\n        return FALSE;\n\n    }\n    static BOOL is_error(PEXCEPTION_RECORD rec)\n    {\n        return rec->ExceptionCode == EXCEPTION_PROTECTED_MODE || rec->ExceptionCode == EXCEPTION_ACCESS_VIOLATION;\n    }\n    LONG NTAPI vm86_vectored_exception_handler(struct _EXCEPTION_POINTERS *ExceptionInfo)\n    {\n        if (is_error(ExceptionInfo->ExceptionRecord))\n            capture_stack_trace();\n        return EXCEPTION_CONTINUE_SEARCH;\n    }\n    LPCWSTR(WINAPI*MB_GetString)(int);\n    HANDLE inject_event;\n    CRITICAL_SECTION inject_crit_section;\n    typedef VOID (WINAPI *GetpWin16Lock_t)(SYSLEVEL **lock);\n    GetpWin16Lock_t pGetpWin16Lock;\n    SYSLEVEL *win16_syslevel;\n    HANDLE *vm_idle_event;\n    typedef BOOL(WINAPI *WOWCallback16Ex_t)(DWORD vpfn16, DWORD dwFlags,\n        DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode);\n    WOWCallback16Ex_t pWOWCallback16Ex;\n    static WORD tss[0x68 + 65536 / 8] = { 0 };\n    typedef BOOL (WINAPI *vm_inject_t)(DWORD vpfn16, DWORD dwFlags,\n        DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode);\n    BOOL WINAPI vm_inject(DWORD vpfn16, DWORD dwFlags,\n        DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode);\n\t__declspec(dllexport) BOOL init_vm86(BOOL is_vm86)\n\t{\n        SymInitialize(GetCurrentProcess(), NULL, TRUE);\n        HMODULE user32 = GetModuleHandleW(L\"user32.dll\");\n        MB_GetString = (LPCWSTR(WINAPI*)(int))GetProcAddress(user32, \"MB_GetString\");\n        if (!krnl386)\n            krnl386 = LoadLibraryA(KRNL386);\n        DOSVM_inport = (DOSVM_inport_t)GetProcAddress(krnl386, \"DOSVM_inport\");\n        DOSVM_outport = (DOSVM_outport_t)GetProcAddress(krnl386, \"DOSVM_outport\");\n        void(WINAPI *set_vm_inject_cb)(vm_inject_t) = (void(WINAPI *)(vm_inject_t))GetProcAddress(krnl386, \"set_vm_inject_cb\");\n        set_vm_inject_cb(vm_inject);\n        inject_event = CreateEventW(NULL, TRUE, FALSE, NULL);\n        InitializeCriticalSection(&inject_crit_section);\n        pGetpWin16Lock = (GetpWin16Lock_t)GetProcAddress(krnl386, \"GetpWin16Lock\");\n        pGetpWin16Lock(&win16_syslevel);\n        pWOWCallback16Ex = (WOWCallback16Ex_t)GetProcAddress(krnl386, \"K32WOWCallback16Ex\");\n        HANDLE *(WINAPI *get_idle_event)() = (HANDLE *(WINAPI *)())GetProcAddress(krnl386, \"get_idle_event\");\n        vm_idle_event = get_idle_event();\n        //SetConsoleCtrlHandler(dump, TRUE);\n\t\tAddVectoredExceptionHandler(TRUE, vm86_vectored_exception_handler);\n\t\tWORD sel = SELECTOR_AllocBlock(iret, 256, WINE_LDT_FLAGS_CODE);\n\t\tCPU_INIT_CALL(CPU_MODEL);\n\t\tCPU_RESET_CALL(CPU_MODEL);\n\t\tm_cr[0] |= 0x20;  //we don't support irq13 for fpe\n        UINT8 *base = 0;//mem;\n\t\tm_idtr.base = (UINT32)(table - base);\n        m_ldtr.limit = 65535;\n        m_ldtr.base = (UINT32)((UINT8*)&wine_ldt - base);\n        m_gdtr.limit = 65535;\n        m_gdtr.base = (UINT32)((UINT8*)&wine_ldt - base);\n        m_CPL = 3;\n        wine_ldt[4].HighWord.Bits.Type = 0x18;\n        wine_ldt[4].HighWord.Bits.Pres = 1;\n        wine_ldt[4].HighWord.Bits.Sys = 1;\n        wine_ldt[4].LimitLow = 0xFFFF;\n        wine_ldt[4].HighWord.Bits.LimitHi = 0xF;\n        wine_ldt[4].HighWord.Bits.Default_Big = 1;\n        wine_ldt[4].HighWord.Bits.Granularity = 1;\n        wine_ldt[4].HighWord.Bits.Dpl = m_CPL;\n\t\tmemset(iret, 0xcf, 256);\n\t\tfor (int i = 0; i < 256; i++)\n\t\t{\n\t\t\t*(WORD*)&table[i * 4 + 2] = sel;\n\t\t\t*(WORD*)&table[i * 4] = i;\n\t\t\t*(WORD*)&table[i * 4 + 2] = sel;\n\t\t\t*(WORD*)&table[i * 4] = i;\n\t\t}\n        //PROTECTED MODE\n        for (int i = 0; i < 256; i++)\n        {\n            *(WORD*)&table[i * 8] = i;\n            *(WORD*)&table[i * 8 + 2] = sel;\n            *(BYTE*)&table[i * 8 + 4] = 0x00;\n            *(BYTE*)&table[i * 8 + 5] = 0x66 | 0x80;\n            *(WORD*)&table[i * 8 + 6] = 0;\n        }\n        reg_fs = wine_get_fs();\n        reg_gs = wine_get_gs();\n        reg_cs = wine_get_cs();\n        reg_ss = wine_get_ss();\n        reg_ds = wine_get_ds();\n        reg_es = wine_get_es();\n\n        wine_ldt[reg_gs >> 3].HighWord.Bits.Type = 0x18;\n        wine_ldt[reg_gs >> 3].HighWord.Bits.Pres = 1;\n        wine_ldt[reg_gs >> 3].HighWord.Bits.Sys = 1;\n        wine_ldt[reg_gs >> 3].LimitLow = 0xFFFF;\n        wine_ldt[reg_gs >> 3].HighWord.Bits.LimitHi = 0xF;\n        wine_ldt[reg_gs >> 3].HighWord.Bits.Default_Big = 1;\n        wine_ldt[reg_gs >> 3].HighWord.Bits.Granularity = 1;\n        wine_ldt[reg_gs >> 3].HighWord.Bits.Dpl = m_CPL;\n\n        wine_ldt[reg_fs >> 3].HighWord.Bits.Type = 0x18;\n        wine_ldt[reg_fs >> 3].HighWord.Bits.Pres = 1;\n        wine_ldt[reg_fs >> 3].HighWord.Bits.Sys = 1;\n        wine_ldt[reg_fs >> 3].LimitLow = 0xFFFF;\n        wine_ldt[reg_fs >> 3].HighWord.Bits.LimitHi = 0xF;\n        wine_ldt[reg_fs >> 3].HighWord.Bits.Default_Big = 1;\n        wine_ldt[reg_fs >> 3].HighWord.Bits.Granularity = 1;\n        wine_ldt[reg_fs >> 3].HighWord.Bits.Dpl = m_CPL;\n\n\n        wine_ldt[reg_cs >> 3].HighWord.Bits.Type = 0x18;\n        wine_ldt[reg_cs >> 3].HighWord.Bits.Pres = 1;\n        wine_ldt[reg_cs >> 3].HighWord.Bits.Sys = 1;\n        wine_ldt[reg_cs >> 3].LimitLow = 0xFFFF;\n        wine_ldt[reg_cs >> 3].HighWord.Bits.LimitHi = 0xFFFF;\n        wine_ldt[reg_cs >> 3].HighWord.Bits.Default_Big = 1;\n        wine_ldt[reg_cs >> 3].HighWord.Bits.Granularity = 1;\n        wine_ldt[reg_cs >> 3].HighWord.Bits.Dpl = m_CPL;\n\n\n        wine_ldt[reg_ds >> 3].HighWord.Bits.Type = 0x18;\n        wine_ldt[reg_ds >> 3].HighWord.Bits.Pres = 1;\n        wine_ldt[reg_ds >> 3].HighWord.Bits.Sys = 1;\n        wine_ldt[reg_ds >> 3].LimitLow = 0xFFFF;\n        wine_ldt[reg_ds >> 3].HighWord.Bits.LimitHi = 0xFFFF;\n        wine_ldt[reg_ds >> 3].HighWord.Bits.Default_Big = 1;\n        wine_ldt[reg_ds >> 3].HighWord.Bits.Granularity = 1;\n        wine_ldt[reg_ds >> 3].HighWord.Bits.Dpl = m_CPL;\n#if defined(HAS_I386)\n\t\tcpu_type = (REG32(EDX) >> 8) & 0x0f;\n\t\tcpu_step = (REG32(EDX) >> 0) & 0x0f;\n#endif\n\t\t//m_amask = -1;\n\t\tm_a20_mask = -1;\n        if (is_vm86)\n        {\n            m_cr[0] |= 1;//PROTECTED MODE\n            set_flags(0x20000);//V8086_MODE\n           //assert(V8086_MODE);\n        }\n        else\n        {\n            m_cr[0] |= 1;//PROTECTED MODE\n        }\n        /* task state segment */\n        m_task.flags = 9;\n        m_task.base = (UINT32)tss;\n        m_task.limit = sizeof(tss);\n        *(WORD*)((char*)tss + 0x66) = sizeof(tss) - 65536 / 8;\n        memset((char*)tss + sizeof(tss) - 65536 / 8, 0x00, 65536 / 8);\n        return TRUE;\n\t}\n    DWORD mergeReg(DWORD a1, DWORD a2)\n    {\n        return a1 == a2 ? a1 : a2;\n    }\n\tBOOL initflag;\n\tvoid vm86main(CONTEXT *context, DWORD cbArgs, PEXCEPTION_HANDLER handler,\n\t\tvoid(*from16_reg)(void),\n\t\tLONG(*__wine_call_from_16)(void),\n\t\tint(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context),\n\t\tvoid(*__wine_call_to_16_ret)(void),\n        int dasm,\n        UINT8 *memory_base,\n        pm_interrupt_handler pih\n\t\t);\n\t//__declspec(dllexport) void wine_call_to_16_regs_vm86(CONTEXT *context, DWORD cbArgs, PEXCEPTION_RECORD handler);void wine_call_to_16_regs_vm86(CONTEXT *context, DWORD cbArgs, PEXCEPTION_RECORD handler,\n\tvoid wine_call_to_16_regs_vm86(CONTEXT *context, DWORD cbArgs, PEXCEPTION_HANDLER handler,\n\t\tvoid(*from16_reg)(void),\n\t\tLONG(*__wine_call_from_16)(void),\n\t\tint(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context),\n\t\tvoid(*__wine_call_to_16_ret)(void),\n        int dasm,\n        bool vm86,\n        void *memory_base, \n        pm_interrupt_handler pih\n\t\t)\n\t{\n        mem = vm86 ? (UINT8*)memory_base : NULL;\n\t\tif (!initflag)\n\t\t\tinitflag = init_vm86(vm86);\n\t\tvm86main(context, cbArgs, handler, from16_reg, __wine_call_from_16, relay_call_from_16, __wine_call_to_16_ret, dasm, mem, pih);\n\t}\t\n\tDWORD wine_call_to_16_vm86(DWORD target, DWORD cbArgs, PEXCEPTION_HANDLER handler,\n\t\tvoid(*from16_reg)(void),\n\t\tLONG(*__wine_call_from_16)(void),\n\t\tint(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context),\n\t\tvoid(*__wine_call_to_16_ret)(void),\n        int dasm,\n        bool vm86,\n        void *memory_base,\n        pm_interrupt_handler pih\n\t\t)\n\t{\n        mem = vm86 ? (UINT8*)memory_base : NULL;\n\t\tif (!initflag)\n\t\t\tinitflag = init_vm86(vm86);\n\t\tCONTEXT context;\n        PVOID oldstack = dynamic_getWOW32Reserved();\n\t\tsave_context(&context);\n\t\t//why??\n\t\tdynamic_setWOW32Reserved(oldstack);\n\t\tcontext.SegSs = ((size_t)dynamic_getWOW32Reserved() >> 16) & 0xFFFF;\n\t\tcontext.Esp = ((size_t)dynamic_getWOW32Reserved()) & 0xFFFF;\n\t\tcontext.SegCs = target >> 16;\n\t\tcontext.Eip = target & 0xFFFF;//i386_jmp_far(target >> 16, target & 0xFFFF);\n\t\tvm86main(&context, cbArgs, handler, from16_reg, __wine_call_from_16, relay_call_from_16, __wine_call_to_16_ret, dasm, mem, pih);\n\t\treturn (context.Eax & 0xffff) | context.Edx << 16;\n\t}\n\tUINT old_eip = 0;\n    BOOL has_x86_exception_err(WORD num)\n    {\n        switch (num)\n        {\n        case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:\n            return FALSE;\n        case 8:\n            return TRUE;\n        case 9:\n            return FALSE;\n        case 10:case 11:case 12:case 13:case 14:\n            return TRUE;\n        case 15:case 16:\n            return FALSE;\n        case 17:\n            return TRUE;\n        case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:\n            return FALSE;\n        case 30:\n            return TRUE;\n        case 31:\n            return FALSE;\n        }\n        return FALSE;\n    }\n\n    static int disassemble(char *buffer)\n    {\n        int ret;\n        __TRY\n        {\n#if defined(HAS_I386)\n            UINT64 eip = m_eip;\n#else\n            UINT64 eip = m_pc - SREG_BASE(CS);\n#endif\n            UINT8 *oprom = mem + SREG_BASE(CS) + eip;\n\n            m_operand_size = m_sreg[CS].d;\n#if defined(HAS_I386)\n            if (m_sreg[CS].d)\n            {\n                ret = CPU_DISASSEMBLE_CALL(x86_32) & 0xff;\n            }\n            else\n#endif\n            {\n                ret = i386_dasm_one_ex(buffer, m_eip, oprom, 16) & 0xff;//CPU_DISASSEMBLE_CALL(x86_16);\n            }\n        }\n        __EXCEPT_PAGE_FAULT\n        {\n            *buffer = 0;\n            ret = 0;\n        }\n        __ENDTRY\n        return ret;\n    }\n\n\n    __declspec(dllexport) int disassemble_debug(char *buffer, UINT8 *oprom, BOOL op_size, UINT64 eip)\n    {\n        int old_m_operand_size = m_operand_size;\n        int old_m_eip = m_eip;\n        int r = 0;\n        __TRY\n        {\n            m_operand_size = op_size;\n            m_eip = eip;\n#if defined(HAS_I386)\n            if (op_size)\n            {\n                r = CPU_DISASSEMBLE_CALL(x86_32) & 0xff;\n            }\n            else\n#endif\n            {\n                r = i386_dasm_one_ex(buffer, m_eip, oprom, 16) & 0xff;//CPU_DISASSEMBLE_CALL(x86_16);\n            }\n        }\n        __EXCEPT_PAGE_FAULT\n        {\n            *buffer = 0;\n            r = 0;\n        }\n        __ENDTRY\n        m_eip = old_m_eip;\n        m_operand_size = old_m_operand_size;\n        return r;\n    }\n\n    void protected_mode_exception_handler(WORD num, const char *name, pm_interrupt_handler pih)\n    {\n        WORD err = has_x86_exception_err(num) ? POP16() : num;\n        WORD ip = POP16();\n        WORD cs = POP16();\n        WORD flags = POP16();\n        m_eip = ip;\n        m_sreg[CS].selector = cs;\n        i386_load_segment_descriptor(CS);\n        if (num == FAULT_GP)\n        {\n            char buffer[256];\n            int len = disassemble(buffer);\n            if(err == 0x40)\n            {\n                // many startups access the BDA directly\n                static WORD dosmem_0040H = 0;\n                if (!dosmem_0040H)\n                {\n                    DWORD(WINAPI *GetProcAddress16)(HMODULE16, LPCSTR);\n                    HMODULE16(WINAPI *GetModuleHandle16)(LPCSTR);\n                    if (!krnl386)\n                        krnl386 = LoadLibraryA(KRNL386);\n                    GetProcAddress16 = (DWORD(WINAPI *)(HMODULE16, LPCSTR))GetProcAddress(krnl386, \"GetProcAddress16\");\n                    GetModuleHandle16 = (HMODULE16(WINAPI *)(LPCSTR))GetProcAddress(krnl386, \"GetModuleHandle16\");\n                    dosmem_0040H = (WORD)GetProcAddress16(GetModuleHandle16(\"KERNEL\"), (LPCSTR)193);\n                    (void(*)(void))GetProcAddress(krnl386, \"DOSVM_start_bios_timer\")();\n                }\n                /* allocate segment 40h */\n                LPLDT_ENTRY entry = wine_ldt + (dosmem_0040H >> __AHSHIFT);\n                wine_ldt[0x40 >> __AHSHIFT] = *entry;\n                wine_ldt_copy.base[0x40 >> __AHSHIFT] = wine_ldt_get_base(entry);\n                wine_ldt_copy.limit[0x40 >> __AHSHIFT] = wine_ldt_get_limit(entry);\n                wine_ldt_copy.flags[0x40 >> __AHSHIFT] = (entry->HighWord.Bits.Type |\n                    (entry->HighWord.Bits.Default_Big ? WINE_LDT_FLAGS_32BIT : 0) |\n                    (wine_ldt_copy.flags[0x40 >> __AHSHIFT] & WINE_LDT_FLAGS_ALLOCATED));\n                i386_jmp_far(cs, ip);\n                return;\n            }\n            HMODULE toolhelp = GetModuleHandleA(\"toolhelp.dll16\");\n            if (toolhelp)\n            {\n                SEGPTR stack = MAKESEGPTR(SREG(SS), REG16(SP));\n                FARPROC16 intcb = ((FARPROC16(WINAPI *)(SEGPTR *, SEGPTR, WORD, WORD, WORD))GetProcAddress(toolhelp, \"get_intcb\"))(&stack, MAKESEGPTR(cs, ip), flags, num, REG16(AX));\n                if (intcb)\n                {\n                    SREG(SS) = SELECTOROF(stack);\n                    REG16(SP) = OFFSETOF(stack);\n                    i386_jmp_far(SELECTOROF(intcb), OFFSETOF(intcb));\n                    return;\n                }\n            }\n        }\n        DWORD ret = pih(num, MAKESEGPTR(cs, ip));\n        if (ret)\n        {\n            //TODO:arguments?\n            i386_jmp_far((ret >> 16) & 0xFFFF, ret & 0xFFFF);\n            return;\n        }\n        PSTR dasm = (PSTR)calloc(10000, 1);\n        ULONG_PTR arguments[7] = { (ULONG_PTR)num, (ULONG_PTR)name, (ULONG_PTR)err, (ULONG_PTR)ip, (ULONG_PTR)cs, (ULONG_PTR)flags, (ULONG_PTR)dasm };\n\n        //jump to next instr\n        char buffer[256];\n        int opsize = disassemble(buffer);\n        memcpy(dasm, buffer, sizeof(buffer));\n        if ((int)ip + opsize <= 0xFFFF)\n        {\n            ip += opsize;\n            m_eip = ip;\n            m_sreg[CS].selector = cs;\n            i386_load_segment_descriptor(CS);\n        }\n        set_flags(flags);\n        RaiseException(EXCEPTION_PROTECTED_MODE, 0, sizeof(arguments) / sizeof(ULONG_PTR), arguments);\n    }\n    volatile struct\n    {\n        BOOL inject;\n        DWORD vpfn16;\n        DWORD dwFlags;\n        DWORD cbArgs;\n        LPVOID pArgs;\n        volatile LONG *freed;\n        LPDWORD pdwRetCode;\n    } vm_inject_state;\n    BOOL WINAPI vm_inject(DWORD vpfn16, DWORD dwFlags,\n        DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode)\n    {\n        assert(dwFlags == WCB16_PASCAL);\n        LPVOID args = HeapAlloc(GetProcessHeap(), 0, cbArgs);\n        memcpy(args, pArgs, cbArgs);\n        EnterCriticalSection(&inject_crit_section);\ntry_again:\n        if (TryEnterCriticalSection(&win16_syslevel->crst))\n        {\n            /* There are no threads running VM. (e.g. call GetMessage) */\n            /* 16-bit stack is allocated by thread_attach(krnl386/kernel.c) */\n            BOOL result = pWOWCallback16Ex(vpfn16, dwFlags, cbArgs, args, pdwRetCode);\n            LeaveCriticalSection(&inject_crit_section);\n            LeaveCriticalSection(&win16_syslevel->crst);\n            HeapFree(GetProcessHeap(), 0, args);\n            return result;\n        }\n        volatile LONG freed = 0;\n        {\n            if (vm_inject_state.inject)\n            {\n                /* FIXME: multiple interrupts */\n                LeaveCriticalSection(&inject_crit_section);\n                return FALSE;\n            }\n            vm_inject_state.vpfn16 = vpfn16;\n            vm_inject_state.dwFlags = dwFlags;\n            vm_inject_state.cbArgs = cbArgs;\n            vm_inject_state.pArgs = args;\n            vm_inject_state.pdwRetCode = pdwRetCode;\n            vm_inject_state.inject = TRUE;\n            vm_inject_state.freed = &freed;\n            ResetEvent(inject_event);\n        }\n        LeaveCriticalSection(&inject_crit_section);\n        HANDLE objs[2] = { inject_event, vm_idle_event };\n        DWORD ret = WaitForMultipleObjects(2, objs, FALSE, INFINITE);\n        EnterCriticalSection(&inject_crit_section);\n        if (ret == (WAIT_OBJECT_0 + 1) && !freed)\n        {\n            vm_inject_state.inject = FALSE;\n            SetEvent(inject_event);\n            goto try_again;\n        }\n        LeaveCriticalSection(&inject_crit_section);\n        return TRUE;\n    }\n    void vm_inject_call(SEGPTR ret_addr, PEXCEPTION_HANDLER handler,\n        void(*from16_reg)(void),\n        LONG(*__wine_call_from_16)(void),\n        int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context),\n        void(*__wine_call_to_16_ret)(void),\n        int dasm,\n        pm_interrupt_handler pih)\n    {\n        CONTEXT context;\n        DWORD ret;\n        static char intstack[4096];\n        static WORD intstksel = 0;\n        if (!intstksel)\n            intstksel = SELECTOR_AllocBlock(intstack, 4096, WINE_LDT_FLAGS_DATA);\n                    \n        save_context(&context);\n        EnterCriticalSection(&inject_crit_section);\n        WORD sp = context.Esp;\n        DWORD ss_base = m_sreg[SS].base;\n        if (m_sreg[SS].d) // don't call int handler on a large stack\n        {\n            ss_base = (DWORD)intstack;\n            sp = 4096;\n            dynamic_setWOW32Reserved((PVOID)MAKESEGPTR(intstksel, 4096));\n        }\n        {\n            char *stack = (char *)ss_base + sp - vm_inject_state.cbArgs;\n            vm_inject_state.inject = FALSE;\n            memcpy(stack, vm_inject_state.pArgs, vm_inject_state.cbArgs);\n            /* push return address */\n            stack -= sizeof(SEGPTR);\n            *((SEGPTR *)stack) = ret_addr;\n            vm_inject_state.cbArgs += sizeof(SEGPTR);\n        }\n        HeapFree(GetProcessHeap(), 0, vm_inject_state.pArgs);\n        InterlockedIncrement(vm_inject_state.freed);\n        LeaveCriticalSection(&inject_crit_section);\n        ret = wine_call_to_16_vm86(vm_inject_state.vpfn16, vm_inject_state.cbArgs, handler, from16_reg, __wine_call_from_16, relay_call_from_16, __wine_call_to_16_ret, dasm, FALSE, NULL, pih);\n        if (vm_inject_state.pdwRetCode)\n            *vm_inject_state.pdwRetCode = ret;\n        load_context(&context);\n        SetEvent(inject_event);\n    }\n\tLONG catch_exception(_EXCEPTION_POINTERS *ep, PEXCEPTION_ROUTINE er);\n#if defined(TEMP_DASM)\n    BOOL dd;\n    __declspec(dllexport) void temp_dasm(BOOL a)\n    {\n        printf(\"temp_dasm\\n\");\n        dd = a;\n    }\n#endif\n    void raise_vm86_int(int vec)\n    {\n        /* raise EXCEPTION_VM86_INTx */\n        CONTEXT vcontext = {};\n        save_context(&vcontext);\n        //dosvm.c exception_handler\n        CONTEXT *ppcontext = &vcontext;\n        ULONG exception_args[1 + sizeof(CONTEXT*) / sizeof(ULONG)] = { (ULONG)vec };\n        *(CONTEXT**)(&exception_args[1]) = ppcontext;\n        RaiseException(0x80000110 /* EXCEPTION_VM86_INTx */, 0, sizeof(exception_args) / sizeof(ULONG), (ULONG_PTR*)exception_args);\n        load_context(&vcontext);\n    }\n\tvoid vm86main(CONTEXT *context, DWORD cbArgs, PEXCEPTION_HANDLER handler,\n\t\tvoid(*from16_reg)(void),\n\t\tLONG(*__wine_call_from_16)(void),\n\t\tint(*relay_call_from_16)(void *entry_point,\tunsigned char *args16, CONTEXT *context),\n\t\tvoid(*__wine_call_to_16_ret)(void),\n\t\tint dasm, \n        UINT8 *memory_base,\n        pm_interrupt_handler pih\n\t\t)\n\t{\n        DWORD old_frame16 = PtrToUlong(dynamic_getWOW32Reserved());\n\t\t__TRY\n        {\n            m_task.base = (UINT32)tss - (UINT32)memory_base;\n\t\t\tif (!initflag)\n\t\t\t\tinitflag = init_vm86(false);\n\t\t\tREG32(EAX) = (DWORD)context->Eax;\n\t\t\tREG32(ECX) = (DWORD)context->Ecx;\n\t\t\tREG32(EDX) = (DWORD)context->Edx;\n\t\t\tREG32(EBX) = (DWORD)context->Ebx;\n\t\t\tREG32(ESP) = (DWORD)context->Esp - cbArgs;\n\t\t\tREG32(EBP) = (DWORD)context->Ebp;\n\t\t\tREG32(ESI) = (DWORD)context->Esi;\n\t\t\tREG32(EDI) = (DWORD)context->Edi;\n\t\t\tSREG(ES) = (WORD)context->SegEs;\n\t\t\tSREG(CS) = (WORD)context->SegCs;\n\t\t\tSREG(SS) = (WORD)context->SegSs;\n\t\t\tSREG(DS) = (context->EFlags & 0x20000) || (wine_ldt_copy.flags[(WORD)context->SegDs >> 3] & WINE_LDT_FLAGS_ALLOCATED) ? (WORD)context->SegDs : 0;\n            /* Some programs expect that gs is not a valid selector! */\n            /* Some programs expect that fs is not a valid selector! */\n            SREG(FS) = (WORD)context->SegFs == reg_fs ? 0 : context->SegFs;\n            SREG(GS) = (WORD)context->SegGs == reg_gs ? 0 : context->SegGs;\n            set_flags(context->EFlags | 0x200/* IF */);\n\t\t\ti386_load_segment_descriptor(ES);\n\t\t\ti386_jmp_far(context->SegCs, context->Eip);\n\t\t\ti386_load_segment_descriptor(SS);\n\t\t\ti386_load_segment_descriptor(DS);\n\t\t\ti386_load_segment_descriptor(FS);\n\t\t\ti386_load_segment_descriptor(GS);\n\t\t\tm_IOP1 = 1;\n\t\t\tm_IOP2 = 1;\n\t\t\tm_eflags |= 0x3000;\n            DWORD ret_addr = 0;\n            if (cbArgs >= 2)\n            {\n                unsigned char *stack = (unsigned char*)i386_translate(SS, REG16(SP), 0);\n                ret_addr = *(DWORD*)stack;\n                if (!wow_calllback_retaddr)\n                    wow_calllback_retaddr = ret_addr;\n            }\n            bool isVM86mode = false;\n            while (!m_halted) {\n                if (vm_inject_state.inject && m_IF)\n                {\n                    vm_inject_call(ret_addr, handler, from16_reg, __wine_call_from_16, relay_call_from_16, __wine_call_to_16_ret, dasm, pih);\n                }\n                if ((m_eip & 0xFFFF) == (ret_addr & 0xFFFF) && SREG(CS) == ret_addr >> 16)\n                {\n                    break;//return VM\n                }\n\t\t\t\tbool reg = false;\n\t\t\t\tif (m_pc >= (UINT)iret && m_pc <= (UINT)iret + 255)\n\t\t\t\t{\n\t\t\t\t\tCONTEXT context;\n                    {\n                        UINT32 num = m_pc - (UINT32)iret;\n                        const char *name = NULL;\n                        //win16 handles int 2/4/6/7\n                        switch (num)\n                        {\n                        case 0:name = \"#DE\"; break;\n                        case 2:name = \"int 2h\"; break;\n                        case 4:name = \"#OF\"; break;\n                        case FAULT_NM:name = \"#NM\"; break;\n                        case FAULT_DF:name = \"#DF\"; break;\n                        case FAULT_TS:name = \"#TS\"; break;\n                        case FAULT_NP:name = \"#NP\"; break;\n                        case FAULT_SS:name = \"#SS\"; break;\n                        case FAULT_GP:name = \"#GP\"; break;\n                        case FAULT_PF:name = \"#PF\"; break;\n                        case FAULT_MF:name = \"#MF\"; break;\n                        }\n                        if (name && num != FAULT_MF)\n                        {\n                            protected_mode_exception_handler(num, name, pih);\n                            continue;\n                        }\n                        WORD return_ip = POP16();\n                        WORD return_cs = POP16();\n                        WORD flags = POP16();\n                        save_context(&context);\n                        context.Eip = return_ip;\n                        context.SegCs = return_cs;\n                        context.EFlags = flags;\n                        if ((num == FAULT_MF) && (m_x87_sw & 0x80))\n                            num = 2;  // redirect fpu error to nmi\n                        dynamic__wine_call_int_handler(&context, num);\n                        if (num == FAULT_UD)\n                        {\n                            if (context.Eip == return_ip && context.SegCs == return_cs)\n                            {\n                                name = \"#UD\";\n                                protected_mode_exception_handler(num, name, pih);\n                                continue;\n                            }\n                        }\n                        mem = memory_base;\n                        load_context(&context);\n                        continue;\n                    }\n\t\t\t\t}\n\t\t\t\tif ((void(*)(void))m_eip == from16_reg)\n\t\t\t\t{\n\t\t\t\t\treg = true;\n\t\t\t\t}\n\t\t\t\tif ((LONG(*)(void))m_eip == __wine_call_from_16 || reg)\n\t\t\t\t{\n\t\t\t\t\tunsigned char *stack1 = (unsigned char*)i386_translate(SS, REG16(SP), 0);\n\t\t\t\t\tunsigned char *stack = stack1;\n\t\t\t\t\t/*\n\t\t\t\t\t* (sp+24) word   first 16-bit arg\n\t\t\t\t\t* (sp+22) word   cs\n\t\t\t\t\t* (sp+20) word   ip\n\t\t\t\t\t* (sp+18) word   bp\n\t\t\t\t\t* (sp+14) long   32-bit entry point (reused for Win16 mutex recursion count)\n\t\t\t\t\t* (sp+12) word   ip of actual entry point (necessary for relay debugging)\n\t\t\t\t\t* (sp+8)  long   relay (argument conversion) function entry point\n\t\t\t\t\t* (sp+4)  long   cs of 16-bit entry point\n\t\t\t\t\t* (sp)    long   ip of 16-bit entry point\n\t\t\t\t\t*/\n\t\t\t\t\tDWORD ip = *(DWORD*)stack;\n\t\t\t\t\tstack += sizeof(DWORD);\n\t\t\t\t\tDWORD cs = *(DWORD*)stack;\n\t\t\t\t\tstack += sizeof(DWORD);\n\t\t\t\t\tDWORD relay = *(DWORD*)stack;\n\t\t\t\t\tstack += sizeof(DWORD);\n\t\t\t\t\tWORD ip2 = *(WORD*)stack;\n\t\t\t\t\tstack += sizeof(WORD);\n\t\t\t\t\tDWORD entry = *(DWORD*)stack;\n\t\t\t\t\t//for debug\n\t\t\t\t\tvoid *entryf = (void*)entry;\n\t\t\t\t\tstack += sizeof(DWORD);\n\t\t\t\t\tWORD bp = *(WORD*)stack;\n\t\t\t\t\tstack += sizeof(WORD);\n\t\t\t\t\tWORD ip19 = *(WORD*)stack;\n\t\t\t\t\tstack += sizeof(WORD);\n\t\t\t\t\tWORD cs16 = *(WORD*)stack;\n\t\t\t\t\tstack += sizeof(WORD);\n\t\t\t\t\tWORD *args = (WORD*)stack;\n\t\t\t\t\tm_eip = ip;\n\t\t\t\t\tm_sreg[CS].selector = cs;\n\t\t\t\t\ti386_load_segment_descriptor(CS);\n\t\t\t\t\tCHANGE_PC(m_eip);\n\t\t\t\t\tif (relay == (UINT)relay_call_from_16 || 1)\n\t\t\t\t\t{\n\t\t\t\t\t\tCONTEXT context;\n                        STACK32FRAME dummy_stack32 = { 0 };\n                        dummy_stack32.retaddr = ret_addr;\n                        dummy_stack32.nb_args = cbArgs;\n                        dummy_stack32.frame.Handler = handler;\n\t\t\t\t\t\tDWORD osp = REG32(ESP);\n\t\t\t\t\t\tPUSH16(SREG(GS));\n\t\t\t\t\t\tPUSH16(SREG(FS));\n\t\t\t\t\t\tPUSH16(SREG(ES));\n\t\t\t\t\t\tPUSH16(SREG(DS));\n\t\t\t\t\t\tPUSH32(REG32(EBP));\n\t\t\t\t\t\tPUSH32(REG32(ECX));\n\t\t\t\t\t\tPUSH32(REG32(EDX));\n\t\t\t\t\t\tPUSH32((DWORD)&dummy_stack32);\n\t\t\t\t\t\tsave_context(&context);\n                        STACK16FRAME *oa = (STACK16FRAME*)wine_ldt_get_ptr(context.SegSs, context.Esp);\n\t\t\t\t\t\tDWORD ooo = (WORD)context.Esp;\n                        int off = 0;\n                        if (reg)\n                        {\n                            context.Esp = osp + (SIZE_T)stack - (SIZE_T)stack1 - 4;\n                            off = ooo - context.Esp;\n                            context.Ebp = (context.Ebp & ~0xffff) | bp;\n                            context.Eip = ip19;\n                            context.SegCs = cs16;\n                        }\n                        int fret;\n                        LPVOID old;\n                        PCONTEXT pctx = NULL;\n#ifdef _MSC_VER\n                        __asm\n                        {\n                            mov old, esp\n                            push cbArgs\n                            push old /* target(esp) */\n                            push retaddr /* retaddr */\n                            push ebp\n                            push ebx\n                            push esi\n                            push edi\n                            push old_frame16 /* frame16 */\n                            /* set up exception handler */\n                            push handler\n                            mov  eax, fs:[0]\n                            push eax\n                            mov dummy_stack32.frame.Next, eax\n                            mov  fs:[0], esp\n                            push cs\n                            push 0\n                            mov eax, [oa]\n                            mov[eax], esp\n                            lea eax, [context]\n                            push eax\n                            push args\n                            push entry\n                            call relay_call_from_16\n                            add esp, 12 + 8\n                            mov fret, eax\n                            pop dword ptr fs:[0]\n                            pop eax\n                            jmp skip\n                            retaddr:\n                            mov pctx, ecx\n                            skip:\n                            mov esp, old\n                        }\n#else\n\t\t\t\t\t    fret = relay_call_from_16((void*)entry, (unsigned char*)args, &context);\n#endif\n                        mem = memory_base;\n\n                        if (pctx)\n                        {\n                            /* Throw16 */\n                            context = *pctx;\n                            reg = TRUE;\n                        }\n\t\t\t\t\t\tif (!reg)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tREG32(EAX) = fret;\n                            context.SegSs = ((size_t)dynamic_getWOW32Reserved() >> 16) & 0xFFFF;\n                            context.Esp = ((size_t)dynamic_getWOW32Reserved()) & 0xFFFF;\n                            oa = (STACK16FRAME*)wine_ldt_get_ptr(context.SegSs, context.Esp);\n\t\t\t\t\t\t}\n                        else\n                        {\n                            oa = (STACK16FRAME*)wine_ldt_get_ptr(context.SegSs, context.Esp + off);\n                        }\n\t\t\t\t\t\tif (reg) REG32(EAX) = (DWORD)context.Eax;\n\t\t\t\t\t\tREG32(ECX) = reg ? (DWORD)context.Ecx : (DWORD)oa->ecx;\n\t\t\t\t\t\tif (reg) REG32(EDX) = (DWORD)context.Edx;\n                        else\n                            REG32(EDX) = (DWORD)oa->edx;\n\t\t\t\t\t\tREG32(EBX) = (DWORD)context.Ebx;\n\t\t\t\t\t\tREG32(ESP) = (DWORD)context.Esp;\n\t\t\t\t\t\tREG32(EBP) = (DWORD)context.Ebp;\n\t\t\t\t\t\tREG32(ESI) = (DWORD)context.Esi;\n\t\t\t\t\t\tREG32(EDI) = (DWORD)context.Edi;\n                        SREG(ES) = reg ? (WORD)context.SegEs : (WORD)oa->es;\n\t\t\t\t\t\tSREG(SS) = (WORD)context.SegSs;\n\t\t\t\t\t\tSREG(DS) = reg ? (WORD)context.SegDs : (WORD)oa->ds;//ES, CS, SS, DS\n\t\t\t\t\t\t//ES, CS, SS, DS, FS, GS\n                        /* Some programs expect that gs is not a valid selector! */\n                        /* Some programs expect that fs is not a valid selector! */\n                        /* win16 sets 0? */\n                        SREG(FS) = reg ? (WORD)context.SegFs : (WORD)oa->fs;\n                        SREG(GS) = reg ? (WORD)context.SegGs : (WORD)oa->gs;\n                        if (reg)\n                        {\n                            if (!(ip19 != context.Eip || cs16 != context.SegCs))\n                            {\n                                context.Eip = oa->callfrom_ip;\n                                context.SegCs = oa->module_cs;\n                            }\n                            else\n                            {\n                                /* CS:IP changed! */\n                                context.Eip = context.Eip;\n                            }\n                            REG32(ESP) = context.Esp;\n                            REG32(EBP) = context.Ebp;\n                        }\n                        else\n                        {\n                            REG16(SP) = osp + 18 + 2;\n                            REG16(SP) -= (ooo - context.Esp);\n                            WORD bpp = REG16(SP);\n                            REG16(SP) = context.Esp + 0x2c;\n                            REG16(BP) = bp;\n                        }\n                        SREG(CS) = (WORD)context.SegCs;\n                        set_flags(context.EFlags);\n\t\t\t\t\t\ti386_load_segment_descriptor(ES);\n\t\t\t\t\t\ti386_load_segment_descriptor(SS);\n\t\t\t\t\t\ti386_load_segment_descriptor(DS);\n\t\t\t\t\t\ti386_load_segment_descriptor(FS);\n\t\t\t\t\t\ti386_load_segment_descriptor(GS);\n\t\t\t\t\t\tm_eip = context.Eip;\n\t\t\t\t\t\ti386_jmp_far(SREG(CS), context.Eip);\n\t\t\t\t\t}\n\t\t\t\t}\n                //merge_vm86_pending_flags\n                if (V8086_MODE)\n                {\n                    if (dynamic_getGdiTebBatch()->vm86_pending & 0x100000)//VIP flag\n                    {\n                        //dlls/ntdll/signal_i386.c merge_vm86_pending_flags\n                        BOOL check_pending = TRUE;\n                        /*\n                        * In order to prevent a race when SIGUSR2 occurs while\n                        * we are returning from exception handler, pending events\n                        * will be rechecked after each raised exception.\n                        */\n                        while (check_pending && dynamic_getGdiTebBatch()->vm86_pending)\n                        {\n                            check_pending = FALSE;\n\n                            //x86_thread_data()->vm86_ptr = NULL;\n\n                            /*\n                            * If VIF is set, throw exception.\n                            * Note that SIGUSR2 may turn VIF flag off so\n                            * VIF check must occur only when TEB.vm86_ptr is NULL.\n                            */\n                            if (1 || m_VIF)\n                            {\n                                CONTEXT vcontext = {};\n                                save_context(&vcontext);\n\n                                EXCEPTION_RECORD reca, *rec = &reca;\n                                rec->ExceptionCode = 0x80000111;\n                                rec->ExceptionFlags = 0;\n                                rec->ExceptionRecord = NULL;\n                                rec->NumberParameters = 0;\n                                rec->ExceptionAddress = (LPVOID)vcontext.Eip;\n\n                                vcontext.EFlags &= ~0x100000;\n                                dynamic_getGdiTebBatch()->vm86_pending = 0;\n                                //dosvm.c exception_handler\n                                CONTEXT *ppcontext = &vcontext;\n                                ULONG exception_args[1 + sizeof(CONTEXT*) / sizeof(ULONG)] = {};\n                                *(CONTEXT**)(&exception_args[1]) = ppcontext;\n                                RaiseException(0x80000111, 0, sizeof(exception_args) / sizeof(ULONG), (ULONG_PTR*)exception_args);\n                                //NTSTATUS a = NtRaiseException(rec, &vcontext, TRUE);\n\n                                load_context(&vcontext);\n                                check_pending = TRUE;\n                            }\n\n                            //x86_thread_data()->vm86_ptr = vm86;\n                        }\n\n                        /*\n                        * Merge VIP flags in a signal safe way. This requires\n                        * that the following operation compiles into atomic\n                        * instruction.\n                        */\n                        set_flags(get_flags() | dynamic_getGdiTebBatch()->vm86_pending);\n                    }\n                    UINT8 *op = mem + SREG_BASE(CS) + m_eip;\n                    if (*op == 0xCD)//INT imm8\n                    {\n                        UINT8 vec = *(op + 1);\n                        m_eip += 2;\n                        raise_vm86_int(vec);\n                        continue;\n                    }\n                    else if (*op == 0xCC)\n                    {\n                        m_eip += 1;\n                        raise_vm86_int(3);\n                        continue;\n                    }\n                    else if (*op == 0xF1)\n                    {\n                        m_eip += 1;\n                        raise_vm86_int(1);\n                        continue;\n                    }\n                }\n#if defined(ADDR_TRACE)\n                static DWORD oldk = -1;\n                static DWORD old_cs;\n                static DWORD old_eip;\n\n                WORD k = 0xdead;\n                __try\n                {\n                    k = !wine_ldt_copy.base[SELECTOROF(ADDR_TRACE) >> 3] ? 0xdead : *(LPWORD)((LPBYTE)wine_ldt_copy.base[SELECTOROF(ADDR_TRACE) >> 3] + OFFSETOF(ADDR_TRACE));\n                }\n                __except (EXCEPTION_EXECUTE_HANDLER)\n                {\n                }\n#endif\n#ifdef SUPPORT_DISASSEMBLER\n                if (dasm\n#if defined(TEMP_DASM)\n                    || dd\n#endif\n#if defined(ADDR_TRACE)\n                    || oldk != k\n#endif\n                    ) {\n                    char *dbuf = NULL;\n#if defined(ADDR_TRACE)\n                    if (oldk != k)\n                    {\n                        fprintf(stderr, \"CHANGED=========\\n%04x:%04x %04x\\n\", SREG(CS), m_eip, k);\n                    }\n#endif\n                    char buffer[256];\n#if defined(HAS_I386)\n                    UINT64 eip = m_eip;\n#else\n                    UINT64 eip = m_pc - SREG_BASE(CS);\n#endif\n                    UINT8 *oprom = mem + SREG_BASE(CS) + eip;\n#if defined(ADDR_TRACE)\n                    if (oldk != k)\n                    {\n                        if ((SIZE_T)wine_ldt_copy.base[old_cs >> 3])\n                        {\n                            eip = old_eip;\n                            oprom = mem + (SIZE_T)wine_ldt_copy.base[old_cs >> 3] + eip;\n                        }\n                    }\n                    oldk = k;\n#endif\n                    fprintf(stderr, \"%04x:%04x\", SREG(CS), (unsigned)eip);\n                    int result;\n#if defined(HAS_I386)\n                    if (m_sreg[CS].d)\n                    {\n                        result = CPU_DISASSEMBLE_CALL(x86_32);\n                    }\n                    else\n#endif\n                    {\n                        result = i386_dasm_one_ex(buffer, eip, oprom, 16);//CPU_DISASSEMBLE_CALL(x86_16);\n                    }\n                    int opsize = result & 0xFF;\n#ifdef DUMP_INSTRMEM\n                    fprintf(stderr, \"\\t\");\n                    for (int i = 0; i < opsize; i++)\n                    {\n                        fprintf(stderr, \"%02x\", oprom[i]);\n                    }\n#endif\n                    fprintf(stderr, \"\\t%s\\n\", buffer);\n#if !defined(TRACE_REGS)\n                        DWORD stkptr = m_sreg[SS].base + (m_sreg[SS].d ? REG32(ESP) : REG16(SP));\n                        if (SREG(FS) || SREG(GS))\n                        {\n                            fprintf(stderr,\n                                \"\\\nEAX:%04X,ECX:%04X,EDX:%04X,EBX:%04X,\\\nESP:%04X,EBP:%04X,ESI:%04X,EDI:%04X,\\\nES:%04X,CS:%04X,SS:%04X,DS:%04X,FS:%04x,GS:%04x,\\\nIP:%04X,stack:%08X,\\\nEFLAGS:%08X\\\n\\n\",\nREG32(EAX), REG32(ECX), REG32(EDX), REG32(EBX), REG32(ESP), REG32(EBP), REG32(ESI), REG32(EDI),\nSREG(ES), SREG(CS), SREG(SS), SREG(DS), SREG(FS), SREG(GS), m_eip, read_dword(stkptr), m_eflags);\n                        }\n                        else\n                        {\n                            fprintf(stderr,\n                                \"\\\nEAX:%04X,ECX:%04X,EDX:%04X,EBX:%04X,\\\nESP:%04X,EBP:%04X,ESI:%04X,EDI:%04X,\\\nES:%04X,CS:%04X,SS:%04X,DS:%04X,\\\nIP:%04X,stack:%08X,\\\nEFLAGS:%08X\\\n\\n\",\nREG32(EAX), REG32(ECX), REG32(EDX), REG32(EBX), REG32(ESP), REG32(EBP), REG32(ESI), REG32(EDI),\nSREG(ES), SREG(CS), SREG(SS), SREG(DS), m_eip, read_dword(stkptr), m_eflags);\n                        }\n#endif\n                }\n\t\t\t\t\n#endif\n#if defined(ADDR_TRACE)\n                old_cs = SREG(CS);\n                old_eip = m_eip;\n#endif\n#if defined(HAS_I386)\n\t\t\t\tm_cycles = 1;\n\t\t\t\tCPU_EXECUTE_CALL(i386);\n#else\n\t\t\t\tCPU_EXECUTE_CALL(CPU_MODEL);\n#endif\n\t\t\t}\n\t\t\tsave_context(context);\n\t\t}\n\t\t__EXCEPT_CTX (catch_exception, (PEXCEPTION_ROUTINE)handler)\n\t\t{\n\t\t}\n\t\t__ENDTRY\n\t}\n\n#include <imagehlp.h>\n\n#pragma comment(lib, \"imagehlp.lib\")\n\n    void print_stack(void)\n    {\n        unsigned int   i;\n        void         * stack[100];\n        unsigned short frames;\n        SYMBOL_INFO  * symbol;\n        HANDLE         process;\n\n        process = GetCurrentProcess();\n\n        SymInitialize(process, NULL, TRUE);\n\n        frames = CaptureStackBackTrace(0, 100, stack, NULL);\n        symbol = (SYMBOL_INFO *)calloc(sizeof(SYMBOL_INFO) + 256 * sizeof(char), 1);\n        symbol->MaxNameLen = 255;\n        symbol->SizeOfStruct = sizeof(SYMBOL_INFO);\n\n        for (i = 0; i < frames; i++)\n        {\n            SymFromAddr(process, (DWORD64)(stack[i]), 0, symbol);\n\n            fprintf(stderr, \"%i: %s+0x%llx - 0x%p\\n\", frames - i - 1, symbol->Name, (ULONG64)stack[i] - symbol->Address, (LPVOID)symbol->Address);\n        }\n\n        free(symbol);\n    }\n    static DWORD thread_messagebox(HWND hWnd, LPCSTR text, LPCSTR caption, DWORD flags)\n    {\n        DWORD threadId;\n        //same thread:\n        //MessageBox->WndProc->exception->MessageBox->WndProc->...\n        const char *a[4];\n        a[0] = (const char*)hWnd;\n        a[1] = text;\n        a[2] = caption;\n        a[3] = (const char*)flags;\n        auto lam = [](void *lpThreadParameter)\n        {\n            DWORD result = 0;\n            __TRY\n            {\n                result = (DWORD)MessageBoxA((HWND)((const char**)lpThreadParameter)[0], ((const char**)lpThreadParameter)[1], ((const char**)lpThreadParameter)[2], (DWORD)((const char**)lpThreadParameter)[3]);\n            }\n            __EXCEPT_ALL\n            {\n            }\n            __ENDTRY\n            return result;\n        };\n        LPTHREAD_START_ROUTINE routine = lam;\n        HANDLE hThread = CreateThread(NULL, 0, routine, a, 0, &threadId);\n        WaitForSingleObject(hThread, INFINITE);\n        DWORD exitcode;\n        BOOL success = GetExitCodeThread(hThread, &exitcode);\n        CloseHandle(hThread);\n        return exitcode;\n    }\n    LONG catch_exception(_EXCEPTION_POINTERS *ep, PEXCEPTION_ROUTINE winehandler)\n    {\n        PEXCEPTION_RECORD rec = ep->ExceptionRecord;\n        if (rec->ExceptionCode == 0x80000100/*EXCEPTION_WINE_STUB*/)\n        {\n            char buffer[1024];\n            fprintf(stderr, \"stub function %s %s\\n\", (const char*)rec->ExceptionInformation[0], (const char*)rec->ExceptionInformation[1]);\n            LPCWSTR retry = MB_GetString(3);\n            LPCWSTR cancel = MB_GetString(1);\n            wsprintfA(buffer, \"stub function %s %s\\nPress %S to continue execution.\\nPress %S to terminate this task.\", rec->ExceptionInformation[0], rec->ExceptionInformation[1], retry, cancel);\n            DWORD result = thread_messagebox(NULL, buffer, \"fatal error\", MB_ICONERROR | MB_RETRYCANCEL);\n            if (result == IDCANCEL)\n            {\n                ExitThread(rec->ExceptionCode);\n            }\n            return EXCEPTION_EXECUTE_HANDLER;\n        }\n        if (!is_error(rec))\n            return EXCEPTION_CONTINUE_SEARCH;\n        static void(*NE_DumpAllModules)();\n        if (!NE_DumpAllModules)\n        {\n            NE_DumpAllModules = ((void(*)())GetProcAddress(LoadLibraryA(KRNL386), \"NE_DumpAllModules\"));\n        }\n        if (NE_DumpAllModules)\n        {\n            __TRY\n            {\n                fprintf(stderr, \"=====dump all modules=====\\n\");\n                NE_DumpAllModules();\n                fprintf(stderr, \"=====dump all modules=====\\n\");\n            }\n            __EXCEPT_ALL\n            {\n\n            }\n            __ENDTRY\n        }\n        CONTEXT context;\n        save_context(&context);\n        char buf_pre[2048];\n        buf_pre[0] = '\\0';\n\n        if (rec->ExceptionCode == EXCEPTION_PROTECTED_MODE)\n        {\n            //ULONG_PTR arguments[6] = { (ULONG_PTR)num, (ULONG_PTR)name, (ULONG_PTR)err, (ULONG_PTR)ip, (ULONG_PTR)cs, (ULONG_PTR)flags };\n            WORD num = (WORD)rec->ExceptionInformation[0];\n            const char *name = (const char*)rec->ExceptionInformation[1];\n            WORD err = (WORD)rec->ExceptionInformation[2];\n            WORD ip = (WORD)rec->ExceptionInformation[3];\n            WORD cs = (WORD)rec->ExceptionInformation[4];\n            WORD flags = (WORD)rec->ExceptionInformation[5];\n            LPSTR dasm = (LPSTR)rec->ExceptionInformation[6];\n            sprintf(buf_pre, \"Interrupt %02X %s (%04X:%04X) flags %04X err %04X\\n%s\\n\", num, name, cs, ip, flags, err, dasm);\n            free(dasm);\n        }\n        else\n        {\n            snprintf(buf_pre, sizeof(buf_pre), \"SEGV\");\n        }\n        char buf[2048];\n        sprintf(buf,\n\"address=%p\\naccess address=%p\\n\\\nVM context\\n\\\nEAX:%04X,ECX:%04X,EDX:%04X,EBX:%04X\\n\\\nESP:%04X,EBP:%04X,ESI:%04X,EDI:%04X\\n\\\nES:%04X,CS:%04X,SS:%04X,DS:%04X,FS:%04X,GS:%04X\\n\\\nIP:%04X, address:%08X\\n\\\nEFLAGS:%08X\\\n\\n\\n%s\\n\", rec->ExceptionAddress, (void*)rec->ExceptionInformation[1],\nREG32(EAX), REG32(ECX), REG32(EDX), REG32(EBX), REG32(ESP), REG32(EBP), REG32(ESI), REG32(EDI),\nSREG(ES), SREG(CS), SREG(SS), SREG(DS), SREG(FS), SREG(GS), m_eip, m_pc, m_eflags, buf_pre);\n        dump_all_modules();\n        dump_stack_trace();\n        walk_16bit_stack();\n        fprintf(stderr, \"\\n\");\n#if 0\n        print_stack();\n#endif\n        fprintf(stderr, \"%s\", buf);\n        fflush(stderr);\n#if defined(STACK_DUMP)\n        __try\n        {\n            int i = 0;\n            for (int y = 0; y < 16; y++)\n            {\n                fprintf(stderr, \"+%02x\", i);\n                for (int x = 0; x < 16; x++)\n                {\n                    fprintf(stderr, \" %02x\", *(LPBYTE)(SREG_BASE(SS) + REG32(ESP) + i));\n                    i++;\n                }\n                fprintf(stderr, \"\\n\");\n            }\n            i = 0;\n            for (int y = 0; y < 16; y++)\n            {\n                fprintf(stderr, \"-%02x\", i);\n                for (int x = 0; x < 16; x++)\n                {\n                    fprintf(stderr, \" %02x\", *(LPBYTE)(SREG_BASE(SS) + REG32(ESP) - i));\n                    i++;\n                }\n                fprintf(stderr, \"\\n\");\n            }\n            fflush(stderr);\n        }\n        __EXCEPT_ALL\n        {\n\n        }\n#endif\n        DWORD exitcode = thread_messagebox(NULL, buf, buf_pre, MB_CANCELTRYCONTINUE | MB_ICONERROR);\n        if (exitcode == IDCANCEL)\n        {\n            ExitThread(rec->ExceptionCode);\n        }\n        if (exitcode == IDRETRY)\n        {\n            return EXCEPTION_CONTINUE_EXECUTION;\n        }\n        if (exitcode == IDCONTINUE)\n        {\n            return EXCEPTION_EXECUTE_HANDLER;\n        }\n\n        return EXCEPTION_EXECUTE_HANDLER;\n    }\n}\n"
  },
  {
    "path": "vm86/msdos.h",
    "content": "/*\n\tMS-DOS Player for Win32 console\n\n\tAuthor : Takeda.Toshiya\n\tDate   : 2009.11.09-\n*/\n\n#ifndef _MSDOS_H_\n#define _MSDOS_H_\n\n#ifdef _DEBUG\n#define __DEBUG\n#undef _DEBUG\n#define NDEBUG\n#endif\n#include <windows.h>\n#ifdef __DEBUG\n#undef __DEBUG\n#define _DEBUG\n#undef NDEBUG\n#endif\n#include <winioctl.h>\n#include <tchar.h>\n#include <stdlib.h>\n#include <stdio.h>\n#include <assert.h>\n#include <conio.h>\n#include <math.h>\n#include <dos.h>\n#include <fcntl.h>\n#include <sys/types.h>\n#include <sys/stat.h>\n#include <io.h>\n#include <sys/locking.h>\n#include <mbctype.h>\n#include <direct.h>\n#include <errno.h>\n#include <tlhelp32.h>\n#include <psapi.h>\n\n// variable scope of 'for' loop for Microsoft Visual C++ 6.0\n#if defined(_MSC_VER) && (_MSC_VER == 1200)\n#define for if(0);else for\n#endif\n\n// disable warnings for Microsoft Visual C++ 2005 or later\n#if defined(_MSC_VER) && (_MSC_VER >= 1400)\n#pragma warning( disable : 4819 )\n#pragma warning( disable : 4995 )\n#pragma warning( disable : 4996 )\n// for MAME i86/i386\n#pragma warning( disable : 4018 )\n#pragma warning( disable : 4065 )\n#pragma warning( disable : 4146 )\n#pragma warning( disable : 4244 )\n#pragma warning( disable : 4267 )\n#endif\n\n// endian\n#if !defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)\n\t#if defined(__BYTE_ORDER) && (defined(__LITTLE_ENDIAN) || defined(__BIG_ENDIAN))\n\t\t#if __BYTE_ORDER == __LITTLE_ENDIAN\n\t\t\t#define __LITTLE_ENDIAN__\n\t\t#elif __BYTE_ORDER == __BIG_ENDIAN\n\t\t\t#define __BIG_ENDIAN__\n\t\t#endif\n\t#elif defined(WORDS_LITTLEENDIAN)\n\t\t#define __LITTLE_ENDIAN__\n\t#elif defined(WORDS_BIGENDIAN)\n\t\t#define __BIG_ENDIAN__\n\t#endif\n#endif\n#if !defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)\n\t// Microsoft Visual C++\n\t#define __LITTLE_ENDIAN__\n#endif\n\n// compat for mingw32 headers\n#ifndef COMMON_LVB_UNDERSCORE\n#define COMMON_LVB_UNDERSCORE 0x8000\n#endif\n\n// type definition\n#ifndef UINT8\ntypedef unsigned char UINT8;\n#endif\n#ifndef UINT16\ntypedef unsigned short UINT16;\n#endif\n#ifndef UINT32\ntypedef unsigned int UINT32;\n#endif\n#ifndef INT8\ntypedef signed char INT8;\n#endif\n#ifndef INT16\ntypedef signed short INT16;\n#endif\n#ifndef INT32\ntypedef signed int INT32;\n#endif\n\n#pragma pack(1)\ntypedef union {\n\tUINT32 dw;\n\tstruct {\n#ifdef __BIG_ENDIAN__\n\t\tUINT16 h, l;\n#else\n\t\tUINT16 l, h;\n#endif\n\t} w;\n} PAIR32;\n#pragma pack()\n\n/* ----------------------------------------------------------------------------\n\tFIFO buffer\n---------------------------------------------------------------------------- */\n\n#define MAX_FIFO\t256\n\nclass FIFO\n{\nprivate:\n\tint buf[MAX_FIFO];\n\tint cnt, rpt, wpt, stored[3];\npublic:\n\tFIFO() {\n\t\tcnt = rpt = wpt = 0;\n\t}\n\tvoid write(int val) {\n\t\tif(cnt < MAX_FIFO) {\n\t\t\tbuf[wpt++] = val;\n\t\t\tif(wpt >= MAX_FIFO) {\n\t\t\t\twpt = 0;\n\t\t\t}\n\t\t\tcnt++;\n\t\t}\n\t}\n\tint read() {\n\t\tint val = 0;\n\t\tif(cnt) {\n\t\t\tval = buf[rpt++];\n\t\t\tif(rpt >= MAX_FIFO) {\n\t\t\t\trpt = 0;\n\t\t\t}\n\t\t\tcnt--;\n\t\t}\n\t\treturn val;\n\t}\n\tint count() {\n\t\treturn cnt;\n\t}\n\tvoid store_buffer() {\n\t\tstored[0] = cnt;\n\t\tstored[1] = rpt;\n\t\tstored[2] = wpt;\n\t}\n\tvoid restore_buffer() {\n\t\tcnt = stored[0];\n\t\trpt = stored[1];\n\t\twpt = stored[2];\n\t}\n};\n\n/* ----------------------------------------------------------------------------\n\tMS-DOS virtual machine\n---------------------------------------------------------------------------- */\n\n#define VECTOR_TOP\t0\n#define VECTOR_SIZE\t0x400\n#define BIOS_TOP\t(VECTOR_TOP + VECTOR_SIZE)\n#define BIOS_SIZE\t0x100\n#define WORK_TOP\t(BIOS_TOP + BIOS_SIZE)\n#define WORK_SIZE\t0x300\n#define IRET_TOP\t(WORK_TOP + WORK_SIZE)\n#define IRET_SIZE\t0x100\n#define DOS_INFO_TOP\t(IRET_TOP + IRET_SIZE)\n#define DOS_INFO_BASE\t(DOS_INFO_TOP + 24)\n#define DOS_INFO_SIZE\t0x100\n#define DPB_TOP\t\t(DOS_INFO_TOP + DOS_INFO_SIZE)\n#define DPB_SIZE\t0x400\n#define FILE_TABLE_TOP\t(DPB_TOP + DPB_SIZE)\n#define FILE_TABLE_SIZE\t0x10\n#define CDS_TOP\t\t(FILE_TABLE_TOP + FILE_TABLE_SIZE)\n#define CDS_SIZE\t0x80\n#define FCB_TABLE_TOP\t(CDS_TOP + CDS_SIZE)\n#define FCB_TABLE_SIZE\t0x10\n#define DBCS_TOP\t(FCB_TABLE_TOP + FCB_TABLE_SIZE)\n#define DBCS_TABLE\t(DBCS_TOP + 2)\n#define DBCS_SIZE\t0x10\n#define MEMORY_TOP\t(DBCS_TOP + DBCS_SIZE)\n#define MEMORY_END\t0xb8000\n#define TEXT_VRAM_TOP\t0xb8000\n#define UMB_TOP\t\t0xc0000\n#define UMB_END\t\t0xf8000\n#define SHADOW_BUF_TOP\t0xf8000\n\n//#define ENV_SIZE\t0x800\n#define ENV_SIZE\t0x2000\n#define PSP_SIZE\t0x100\n\n#define MAX_FILES\t128\n#define MAX_PROCESS\t16\n#define MAX_DTAINFO\t32\n#define LFN_DTA_LADDR\t0x10FFF0\n\n#define DUP_STDIN\t29\n#define DUP_STDOUT\t30\n#define DUP_STDERR\t31\n\n//#define SUPPORT_AUX_PRN\n\n#pragma pack(1)\ntypedef struct {\n\tUINT8 mz;\n\tUINT16 psp;\n\tUINT16 paragraphs;\n\tUINT8 reserved[3];\n\tchar prog_name[8];\n} mcb_t;\n#pragma pack()\n\n#pragma pack(1)\ntypedef struct {\n\tUINT16 env_seg;\n\tPAIR32 cmd_line;\n\tPAIR32 fcb1;\n\tPAIR32 fcb2;\n\tUINT16 sp;\n\tUINT16 ss;\n\tUINT16 ip;\n\tUINT16 cs;\n} param_block_t;\n#pragma pack()\n\n#pragma pack(1)\ntypedef struct {\n\tUINT8 len;\n\tchar cmd[127];\n} cmd_line_t;\n#pragma pack()\n\n#pragma pack(1)\ntypedef struct {\n\tUINT8 exit[2];\n\tUINT16 first_mcb;\n\tUINT8 reserved_1;\n\tUINT8 far_call;\n\tPAIR32 cpm_entry;\n\tPAIR32 int_22h;\n\tPAIR32 int_23h;\n\tPAIR32 int_24h;\n\tUINT16 parent_psp;\n\tUINT8 file_table[20];\n\tUINT16 env_seg;\n\tPAIR32 stack;\n\tUINT8 reserved_2[30];\n\tUINT8 service[3];\n\tUINT8 reserved_3[2];\n\tUINT8 ex_fcb[7];\n\tUINT8 fcb1[16];\n\tUINT8 fcb2[20];\n\tUINT8 buffer[128];\n} psp_t;\n#pragma pack()\n\n#pragma pack(1)\ntypedef struct {\n\tUINT16 mz;\n\tUINT16 extra_bytes;\n\tUINT16 pages;\n\tUINT16 relocations;\n\tUINT16 header_size;\n\tUINT16 min_alloc;\n\tUINT16 max_alloc;\n\tUINT16 init_ss;\n\tUINT16 init_sp;\n\tUINT16 check_sum;\n\tUINT16 init_ip;\n\tUINT16 init_cs;\n\tUINT16 relocation_table;\n\tUINT16 overlay;\n} exe_header_t;\n#pragma pack()\n\n#pragma pack(1)\ntypedef struct {\n\tUINT8 flag;\n\tUINT8 reserved[5];\n\tUINT8 attribute;\n} ext_fcb_t;\n#pragma pack()\n\n#pragma pack(1)\ntypedef struct {\n\tUINT8 drive;\n\tUINT8 file_name[8 + 3];\n\tUINT16 current_block;\n\tUINT16 record_size;\n\tUINT32 file_size;\n\tUINT16 date;\n\tUINT16 time;\n\tUINT8 reserved[8];\n\tUINT8 cur_record;\n\tUINT32 rand_record;\n} fcb_t;\n#pragma pack()\n\n#pragma pack(1)\ntypedef struct {\n\tUINT8 drive;\n\tUINT8 file_name[8 + 3];\n\tUINT8 attribute;\n\tUINT8 nt_res;\n\tUINT8 create_time_ms;\n\tUINT16 creation_time;\n\tUINT16 creation_date;\n\tUINT16 last_access_date;\n\tUINT16 cluster_hi;\n\tUINT16 last_write_time;\n\tUINT16 last_write_date;\n\tUINT16 cluster_lo;\n\tUINT32 file_size;\n} find_fcb_t;\n#pragma pack()\n\n#pragma pack(1)\ntypedef struct {\n\tUINT8 reserved[21];\n\tUINT8 attrib;\n\tUINT16 time;\n\tUINT16 date;\n\tUINT32 size;\n\tchar name[13];\n} find_t;\n#pragma pack()\n\n#pragma pack(1)\ntypedef struct {\n\tUINT32 attrib;\n\tPAIR32 ctime_lo;\n\tPAIR32 ctime_hi;\n\tPAIR32 atime_lo;\n\tPAIR32 atime_hi;\n\tPAIR32 mtime_lo;\n\tPAIR32 mtime_hi;\n\tUINT32 size_hi;\n\tUINT32 size_lo;\n\tUINT8 reserved[8];\n\tchar full_name[260];\n\tchar short_name[14];\n} find_lfn_t;\n#pragma pack()\n\n#pragma pack(1)\ntypedef struct {\n\tUINT16 info_level;\n\tUINT32 serial_number;\n\tchar volume_label[11];\n\tchar file_system[8];\n} drive_info_t;\n#pragma pack()\n\n#pragma pack(1)\ntypedef struct {\n\tUINT16 size_of_structure;\n\tUINT16 structure_version;\n\tUINT32 sectors_per_cluster;\n\tUINT32 bytes_per_sector;\n\tUINT32 available_clusters_on_drive;\n\tUINT32 total_clusters_on_drive;\n\tUINT32 available_sectors_on_drive;\n\tUINT32 total_sectors_on_drive;\n\tUINT32 available_allocation_units;\n\tUINT32 total_allocation_units;\n\tUINT8 reserved[8];\n} ext_space_info_t;\n#pragma pack()\n\n#pragma pack(1)\ntypedef struct {\n\tUINT8 drive_num;\n\tUINT8 unit_num;\n\tUINT16 bytes_per_sector;\n\tUINT8 highest_sector_num;\n\tUINT8 shift_count;\n\tUINT16 reserved_sectors;\n\tUINT8 fat_num;\n\tUINT16 root_entries;\n\tUINT16 first_data_sector;\n\tUINT16 highest_cluster_num;\n\tUINT16 sectors_per_fat;\n\tUINT16 first_dir_sector;\n\tUINT32 device_driver_header;\n\tUINT8 media_type;\n\tUINT8 drive_accessed;\n\tUINT16 next_dpb_ofs;\n\tUINT16 next_dpb_seg;\n\tUINT16 first_free_cluster;\n\tUINT16 free_clusters;\n} dpb_t;\n#pragma pack()\n\n#pragma pack(1)\ntypedef struct {\n\tchar path_name[67];\n\tUINT16 drive_attrib;\n\tUINT8 physical_drive_number;\n} cds_t;\n#pragma pack()\n\n#pragma pack(1)\ntypedef struct {\n\tUINT8 reserved_1[22];\t// -24\n\tUINT16 first_mcb;\t// -2\n\tPAIR32 first_dpb;\t// +0\n\tPAIR32 first_sft;\t// +0\n\tUINT8 reserved_2[14];\n\tPAIR32 cds;\t\t// +22\n\tPAIR32 fcb_table;\t// +26\n\tUINT8 reserved_3[3];\n\tUINT8 last_drive;\t// +33\n\tUINT8 reserved_4[29];\n\tUINT16 buffers_x;\t// +63\n\tUINT16 buffers_y;\t// +65\n\tUINT8 boot_drive;\t// +67\n\tUINT8 i386_or_later;\t// +68\n\tUINT16 ext_mem_size;\t// +69\n\tUINT8 reserved_5[25];\n\tUINT8 dos_flag;\t\t// +96\n} dos_info_t;\n#pragma pack()\n\ntypedef struct {\n\tchar path[MAX_PATH];\n\tint valid;\n\tint id;\n\tint atty;\n\tint mode;\n\tUINT16 info;\n\tUINT16 psp;\n} file_handler_t;\n\nstatic const struct {\n\tint mode;\n\tint in;\n\tint out;\n} file_mode[] = {\n\t{ _O_RDONLY | _O_BINARY, 1, 0 },\n\t{ _O_WRONLY | _O_BINARY, 0, 1 },\n\t{ _O_RDWR   | _O_BINARY, 1, 1 },\n};\n\ntypedef struct {\n\tUINT16 psp;\n\tchar module_dir[MAX_PATH];\n\tPAIR32 dta;\n\tUINT8 switchar;\n\tUINT8 verify;\n\tint max_files;\n\tUINT8 allowable_mask;\n\tUINT8 required_mask;\n\tchar volume_label[MAX_PATH];\n\tbool parent_int_10h_feh_called;\n\tbool parent_int_10h_ffh_called;\n} process_t;\n\ntypedef struct {\n\tUINT16 psp;\n\tUINT32 dta;\n\tHANDLE find_handle;\n} dtainfo_t;\n\nUINT8 major_version = 7;\nUINT8 minor_version = 10;\n\nUINT16 first_mcb;\nUINT16 current_psp;\n\nint retval = 0;\nUINT16 error_code = 0;\n\nfile_handler_t file_handler[MAX_FILES];\nUINT8 file_buffer[0x100000];\n\nprocess_t process[MAX_PROCESS];\ndtainfo_t dtalist[MAX_DTAINFO];\n\nUINT16 malloc_strategy = 0;\nUINT8 umb_linked = 0;\n\nvoid msdos_syscall(unsigned num);\nint msdos_init(int argc, char *argv[], char *envp[], int standard_env);\nvoid msdos_finish();\n\n// console\n\n#define SCR_BUF_SIZE\t1200\n\n#define SET_RECT(rect, l, t, r, b) { \\\n\trect.Left = l; \\\n\trect.Top = t; \\\n\trect.Right = r; \\\n\trect.Bottom = b; \\\n}\n\nHANDLE hStdin;\nHANDLE hStdout;\nCHAR_INFO scr_buf[SCR_BUF_SIZE][80];\nchar scr_char[80 * 25];\nWORD scr_attr[80 * 25];\nCOORD scr_buf_size;\nCOORD scr_buf_pos;\nint scr_width, scr_height;\nbool restore_console_on_exit = false;\nbool cursor_moved;\n\nFIFO *key_buf_char;\nFIFO *key_buf_scan;\nint key_input = 0;\nUINT32 key_code = 0;\n\nint active_code_page;\nint system_code_page;\n\nUINT32 text_vram_top_address = TEXT_VRAM_TOP;\nUINT32 text_vram_end_address = TEXT_VRAM_TOP + 4000;\nUINT32 shadow_buffer_top_address = SHADOW_BUF_TOP;\nUINT32 shadow_buffer_end_address = SHADOW_BUF_TOP + 4000;\nbool int_10h_feh_called = false;\nbool int_10h_ffh_called = false;\n\n/* ----------------------------------------------------------------------------\n\tPC/AT hardware emulation\n---------------------------------------------------------------------------- */\n\nvoid hardware_init();\nvoid hardware_finish();\nvoid hardware_run();\nvoid hardware_update();\n\n// memory\n\n#define MAX_MEM INT_MAX//0x1000000\n//UINT8 mem[MAX_MEM + 3];\nUINT8 *mem = 0;\n\n// pic\n\ntypedef struct {\n\tUINT8 imr, isr, irr, prio;\n\tUINT8 icw1, icw2, icw3, icw4;\n\tUINT8 ocw3;\n\tUINT8 icw2_r, icw3_r, icw4_r;\n} pic_t;\n\npic_t pic[2];\nint pic_req_chip, pic_req_level;\nUINT8 pic_req_bit;\n\nvoid pic_init();\nvoid pic_write(int c, UINT32 addr, UINT8 data);\nUINT8 pic_read(int c, UINT32 addr);\nvoid pic_req(int c, int level, int signal);\nint pic_ack();\nvoid pic_update();\n\n// pit\n\n#define PIT_ALWAYS_RUNNING\n\ntypedef struct {\n\tINT32 count;\n\tUINT16 latch;\n\tUINT16 count_reg;\n\tUINT8 ctrl_reg;\n\tint count_latched;\n\tint low_read, high_read;\n\tint low_write, high_write;\n\tint mode;\n\tint status_latched;\n\tUINT8 status;\n\t// constant clock\n\tUINT32 expired_time;\n\tUINT32 prev_time;\n} pit_t;\n\npit_t pit[3];\n#ifndef PIT_ALWAYS_RUNNING\nint pit_active;\n#endif\n\nvoid pit_init();\nvoid pit_write(int ch, UINT8 val);\nUINT8 pit_read(int ch);\nint pit_run(int ch, UINT32 cur_time);\nvoid pit_latch_count(int ch);\nint pit_get_expired_time(int ch);\n\nUINT8 system_port = 0;\n\n// cmos\n\nUINT8 cmos[128];\nUINT8 cmos_addr;\n\nvoid cmos_init();\nvoid cmos_write(int addr, UINT8 val);\nUINT8 cmos_read(int addr);\n\n// kbd (a20)\n\nUINT8 kbd_data;\nUINT8 kbd_status;\nUINT8 kbd_command;\n\nvoid kbd_init();\nUINT8 kbd_read_data();\nvoid kbd_write_data(UINT8 val);\nUINT8 kbd_read_status();\nvoid kbd_write_command(UINT8 val);\n\n#endif\n"
  },
  {
    "path": "vm86/vm86.def",
    "content": "LIBRARY vm86.dll\nEXPORTS\n\twine_call_to_16_regs_vm86\n\twine_call_to_16_vm86\n"
  },
  {
    "path": "vm86/vm86.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{0A37BC0E-8433-453D-9DEA-7AAD7C0E6E5C}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>vm86</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>USE_COMPILER_EXCEPTIONS;__i386__;WIN32;_DEBUG;_WINDOWS;_USRDLL;VM86_EXPORTS;_CONSOLE;HAS_I486;SUPPORT_FPU;NtCurrentTeb=NtCurrentTeb__;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>odbc32.lib;odbccp32.lib;winmm.lib;psapi.lib;$(OutDir)libwine.lib;user32.lib</AdditionalDependencies>\n      <ModuleDefinitionFile>vm86.def</ModuleDefinitionFile>\n      <DelayLoadDLLs>\n      </DelayLoadDLLs>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>USE_COMPILER_EXCEPTIONS;__i386__;WIN32;NDEBUG;_WINDOWS;_USRDLL;VM86_EXPORTS;HAS_I486;SUPPORT_FPU;NtCurrentTeb=NtCurrentTeb__;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ModuleDefinitionFile>vm86.def</ModuleDefinitionFile>\n      <AdditionalDependencies>odbc32.lib;odbccp32.lib;winmm.lib;psapi.lib;$(OutDir)libwine.lib;user32.lib</AdditionalDependencies>\n      <DelayLoadDLLs>\n      </DelayLoadDLLs>\n      <ForceFileOutput>\n      </ForceFileOutput>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClInclude Include=\"msdos.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"msdos.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"vm86.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>\n"
  },
  {
    "path": "vm86/vm86.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"ソース ファイル\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"ヘッダー ファイル\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"リソース ファイル\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"msdos.h\">\n      <Filter>ソース ファイル</Filter>\n    </ClInclude>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"msdos.cpp\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"vm86.def\">\n      <Filter>ソース ファイル</Filter>\n    </None>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "whpxvm/CMakeLists.txt",
    "content": "add_library(whpxvm SHARED whpxvm.c)\ninclude_directories(../wine)\nadd_definitions(-D__i386__ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN=)\ntarget_link_libraries(whpxvm libwine)\nset_target_properties(whpxvm PROPERTIES PREFIX \"\")\n"
  },
  {
    "path": "whpxvm/whpxvm.c",
    "content": "#include \"whpxvm.h\"\n\n#include \"../krnl386/kernel16_private.h\"\n#include \"wownt32.h\"\n\nBOOL initflag;\nUINT8 *mem;\n#define KRNL386 \"krnl386.exe16\"\nBOOL is_single_step = FALSE;\n\nHRESULT(WINAPI *pWHvCreatePartition)(WHV_PARTITION_HANDLE *Partition);\nHRESULT(WINAPI *pWHvSetupPartition)(WHV_PARTITION_HANDLE Partition);\nHRESULT(WINAPI *pWHvMapGpaRange)(\n    _In_ WHV_PARTITION_HANDLE Partition,\n    _In_ VOID* SourceAddress,\n    _In_ WHV_GUEST_PHYSICAL_ADDRESS GuestAddress,\n    _In_ UINT64 SizeInBytes,\n    _In_ WHV_MAP_GPA_RANGE_FLAGS Flags\n);\nHRESULT(WINAPI *pWHvUnmapGpaRange)(\n    _In_ WHV_PARTITION_HANDLE Partition,\n    _In_ WHV_GUEST_PHYSICAL_ADDRESS GuestAddress,\n    _In_ UINT64 SizeInBytes\n    );\nHRESULT(WINAPI *pWHvCreateVirtualProcessor)(\n    _In_ WHV_PARTITION_HANDLE Partition,\n    _In_ UINT32 VpIndex,\n    _In_ UINT32 Flags\n    );\nHRESULT(WINAPI *pWHvGetVirtualProcessorRegisters)(\n    _In_ WHV_PARTITION_HANDLE Partition,\n    _In_ UINT32 VpIndex,\n    _In_reads_(RegisterCount) const WHV_REGISTER_NAME* RegisterNames,\n    _In_ UINT32 RegisterCount,\n    _Out_writes_(RegisterCount) WHV_REGISTER_VALUE* RegisterValues\n    );\nHRESULT(WINAPI *pWHvSetVirtualProcessorRegisters)(\n    _In_ WHV_PARTITION_HANDLE Partition,\n    _In_ UINT32 VpIndex,\n    _In_reads_(RegisterCount) const WHV_REGISTER_NAME* RegisterNames,\n    _In_ UINT32 RegisterCount,\n    _In_reads_(RegisterCount) const WHV_REGISTER_VALUE* RegisterValues\n    );\nHRESULT(WINAPI *pWHvSetPartitionProperty)(\n    _In_ WHV_PARTITION_HANDLE Partition,\n    _In_ WHV_PARTITION_PROPERTY_CODE PropertyCode,\n    _In_reads_bytes_(PropertyBufferSizeInBytes) const VOID* PropertyBuffer,\n    _In_ UINT32 PropertyBufferSizeInBytes\n    );\nHRESULT(WINAPI *pWHvRunVirtualProcessor)(\n    _In_ WHV_PARTITION_HANDLE Partition,\n    _In_ UINT32 VpIndex,\n    _Out_writes_bytes_(ExitContextSizeInBytes) VOID* ExitContext,\n    _In_ UINT32 ExitContextSizeInBytes\n    );\nHRESULT(WINAPI *pWHvCancelRunVirtualProcessor)(\n    _In_ WHV_PARTITION_HANDLE Partition,\n    _In_ UINT32 VpIndex,\n    _In_ UINT32 Flags\n    );\n\n\nDWORD WINAPI panic_msgbox(LPVOID data)\n{\n    MessageBoxA(NULL, (LPCSTR)data, \"Hypervisor error\", MB_OK | MB_ICONERROR);\n    HeapFree(GetProcessHeap(), 0, data);\n    return 0;\n}\n#define PANIC_HRESULT(msg, hresult) panic_hresult(msg, hresult, __FUNCTION__, __LINE__)\n#ifdef _MSC_VER\n#define PANIC(msg, ...) panic(\"%s:%d\\n\" msg, __FUNCTION__, __LINE__, __VA_ARGS__)\n#else\n#define PANIC(msg, ...) panic(\"%s:%d\\n\" msg, __FUNCTION__, __LINE__ __VA_OPT__(,) __VA_ARGS__)\n#endif\n\n/* _Noreturn */\nvoid panic(const char *msg, ...)\n{\n    LPSTR buffer = HeapAlloc(GetProcessHeap(), 0, 512);\n    DWORD threadId;\n    va_list arg;\n\n    va_start(arg, msg);\n    vsnprintf(buffer, 512, msg, arg);\n    va_end(arg);\n    HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)panic_msgbox, buffer, 0, &threadId);\n    WaitForSingleObject(hThread, INFINITE);\n    ExitThread(1);\n    return;\n}\n\n/* _Noreturn */\nvoid panic_hresult(const char *msg, HRESULT result, const char *func, int line)\n{\n    LPSTR buffer = HeapAlloc(GetProcessHeap(), 0, 512);\n    DWORD threadId;\n    snprintf(buffer, 512, \"%s:%d\\n%s HRESULT=%08x\", func, line, msg, result);\n    HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)panic_msgbox, buffer, 0, &threadId);\n    WaitForSingleObject(hThread, INFINITE);\n    ExitThread(1);\n    return;\n}\n\nstatic HMODULE krnl386 = 0;\n\n\nPVOID dynamic_setWOW32Reserved(PVOID w)\n{\n    static PVOID(*setWOW32Reserved)(PVOID);\n    if (!setWOW32Reserved)\n    {\n        if (!krnl386)\n            krnl386 = LoadLibraryA(KRNL386);\n        setWOW32Reserved = (PVOID(*)(PVOID))GetProcAddress(krnl386, \"setWOW32Reserved\");\n    }\n    return setWOW32Reserved(w);\n}\nPVOID dynamic_getWOW32Reserved()\n{\n    static PVOID(*getWOW32Reserved)();\n    if (!getWOW32Reserved)\n    {\n        if (!krnl386)\n            krnl386 = LoadLibraryA(KRNL386);\n        getWOW32Reserved = (PVOID(*)())GetProcAddress(krnl386, \"getWOW32Reserved\");\n    }\n    return getWOW32Reserved();\n}\nWINE_VM86_TEB_INFO *dynamic_getGdiTebBatch()\n{\n    static WINE_VM86_TEB_INFO*(*getGdiTebBatch)();\n    if (!getGdiTebBatch)\n    {\n        if (!krnl386)\n            krnl386 = LoadLibraryA(KRNL386);\n        getGdiTebBatch = (WINE_VM86_TEB_INFO*(*)())GetProcAddress(krnl386, \"getGdiTebBatch\");\n    }\n    return getGdiTebBatch();\n}\nvoid dynamic__wine_call_int_handler(CONTEXT *context, BYTE intnum)\n{\n    static void(*__wine_call_int_handler)(CONTEXT *context, BYTE intnum);\n    if (!__wine_call_int_handler)\n    {\n        if (!krnl386)\n            krnl386 = LoadLibraryA(KRNL386);\n        __wine_call_int_handler = (void(*)(CONTEXT *context, BYTE intnum))GetProcAddress(krnl386, \"__wine_call_int_handler\");\n    }\n    __wine_call_int_handler(context, intnum);\n}\n\n/***********************************************************************\n*           SELECTOR_SetEntries\n*\n* Set the LDT entries for an array of selectors.\n*/\nstatic BOOL SELECTOR_SetEntries(WORD sel, const void *base, DWORD size, unsigned char flags)\n{\n    LDT_ENTRY entry;\n    WORD i, count;\n\n    wine_ldt_set_base(&entry, base);\n    wine_ldt_set_limit(&entry, size - 1);\n    wine_ldt_set_flags(&entry, flags);\n    count = (size + 0xffff) / 0x10000;\n    for (i = 0; i < count; i++)\n    {\n        if (wine_ldt_set_entry(sel + (i << 3), &entry) < 0) return FALSE;\n        wine_ldt_set_base(&entry, (char*)wine_ldt_get_base(&entry) + 0x10000);\n        /* yep, Windows sets limit like that, not 64K sel units */\n        wine_ldt_set_limit(&entry, wine_ldt_get_limit(&entry) - 0x10000);\n    }\n    return TRUE;\n}\nvoid wine_ldt_free_entries(unsigned short sel, int count);\n/***********************************************************************\n*           SELECTOR_AllocBlock\n*\n* Allocate selectors for a block of linear memory.\n*/\nWORD SELECTOR_AllocBlock(const void *base, DWORD size, unsigned char flags)\n{\n    WORD sel, count;\n\n    if (!size) return 0;\n    count = (size + 0xffff) / 0x10000;\n    if ((sel = wine_ldt_alloc_entries(count)))\n    {\n        if (SELECTOR_SetEntries(sel, base, size, flags)) return sel;\n        wine_ldt_free_entries(sel, count);\n        sel = 0;\n    }\n    return sel;\n}\n__declspec(dllimport) LDT_ENTRY wine_ldt[8192];\n\nLDT_ENTRY gdt[];\nvoid load_seg(WHV_X64_SEGMENT_REGISTER *segment, WORD sel)\n{\n    const LDT_ENTRY *entry = (sel & 0x4 || (sel >> 3) >= 512) ? wine_ldt : gdt;\n    segment->Selector = sel;\n    segment->Base = (UINT64)wine_ldt_get_base(entry + (sel >> 3));\n    segment->Limit =  (UINT64)wine_ldt_get_limit(entry + (sel >> 3));\n    segment->Attributes = 0;\n    segment->SegmentType = entry[sel >> 3].HighWord.Bits.Type;\n    segment->Present = entry[sel >> 3].HighWord.Bits.Pres;\n    segment->Default = entry[sel >> 3].HighWord.Bits.Default_Big;\n    segment->DescriptorPrivilegeLevel = entry[sel >> 3].HighWord.Bits.Dpl;\n    segment->Granularity = entry[sel >> 3].HighWord.Bits.Granularity;\n    segment->NonSystemSegment = entry[sel >> 3].HighWord.Bits.Type >> 4;\n    if (!sel || !segment->SegmentType || !segment->Present)\n        segment->Attributes = 0;\n}\n\nvoid set_eflags(struct whpx_vcpu_state *state, DWORD eflags)\n{\n    state->rflags.Reg32 = eflags | 2 | 0x3000 | (is_single_step ? 0x100 : 0) | 0x200;\n}\n\nvoid load_context_to_state(CONTEXT *context, struct whpx_vcpu_state *state)\n{\n    DWORD bytes;\n    load_seg(get_gs(state), (WORD)context->SegGs);\n    load_seg(get_fs(state), (WORD)context->SegFs);\n    load_seg(get_es(state), (WORD)context->SegEs);\n    load_seg(get_ds(state), (WORD)context->SegDs);\n    load_seg(get_cs(state), (WORD)context->SegCs);\n    load_seg(get_ss(state), (WORD)context->SegSs);\n\n    set_edi(state, context->Edi);\n    set_esi(state, context->Esi);\n    set_ebx(state, context->Ebx);\n    set_edx(state, context->Edx);\n    set_ecx(state, context->Ecx);\n    set_eax(state, context->Eax);\n\n    set_ebp(state, context->Ebp);\n    set_eip(state, context->Eip);\n    set_eflags(state, context->EFlags);\n    set_esp(state, context->Esp);\n}\n\nvoid save_context_from_state(CONTEXT *context, struct whpx_vcpu_state *state)\n{\n    context->SegGs = get_seg_selector(get_gs(state));\n    context->SegFs = get_seg_selector(get_fs(state));\n    context->SegEs = get_seg_selector(get_es(state));\n    context->SegDs = get_seg_selector(get_ds(state));\n    context->SegCs = get_seg_selector(get_cs(state));\n    context->SegSs = get_seg_selector(get_ss(state));\n\n    context->Edi = get_edi(state);\n    context->Esi = get_esi(state);\n    context->Ebx = get_ebx(state);\n    context->Edx = get_edx(state);\n    context->Ecx = get_ecx(state);\n    context->Eax = get_eax(state);\n\n    context->Ebp = get_ebp(state);\n    context->Eip = get_eip(state);\n    context->EFlags = get_eflags(state) & ~2;\n    context->Esp = get_esp(state);\n    dynamic_setWOW32Reserved((PVOID)(get_seg_selector(get_ss(state)) << 16 | get_sp(state)));\n}\n\n#include <pshpack1.h>\ntypedef enum\n{\n    INT_GATE_TASK = 5,\n    INT_GATE_INT16 = 6,\n    INT_GATE_TRAP16 = 7,\n    INT_GATE_INT32 = 0xE,\n    INT_GATE_TRAP32 = 0xF,\n} interrupt_gate_type;\ntypedef struct\n{\n    WORD offset_low;\n    WORD selector;\n    BYTE reserved;\n    union\n    {\n        struct\n        {\n            BYTE type : 4 /* INT_GATE_TASK */, S : 1, DPL : 2, P : 1;\n        };\n        BYTE data;\n    };\n    WORD offset_high;\n} interrupt_gate;\n_STATIC_ASSERT(sizeof(interrupt_gate) == 8);\n#include <poppack.h>\n\n\nLPVOID trap_int;\n\n#ifdef _MSC_VER\n__declspec(align(4096))\n#endif\ninterrupt_gate idt[256];\n#ifdef __GNUC__\n__attribute__ ((aligned(4096)))\n#endif\n;\n#ifdef _MSC_VER\n__declspec(align(4096))\n#endif\nLDT_ENTRY gdt[512] = { 0 };\n#ifdef __GNUC__\n__attribute__ ((aligned(4096)))\n#endif\n;\nWORD seg_cs;\nWORD seg_ds;\n\ntypedef DWORD (*DOSVM_inport_t)(int port, int size, CONTEXT *ctx);\ntypedef void (*DOSVM_outport_t)(int port, int size, DWORD value, CONTEXT *ctx);\nDOSVM_inport_t DOSVM_inport;\nDOSVM_outport_t DOSVM_outport;\n\nHANDLE inject_event;\nCRITICAL_SECTION inject_crit_section;\ntypedef VOID (WINAPI *GetpWin16Lock_t)(SYSLEVEL **lock);\nGetpWin16Lock_t pGetpWin16Lock;\nSYSLEVEL *win16_syslevel;\ntypedef BOOL(WINAPI *WOWCallback16Ex_t)(DWORD vpfn16, DWORD dwFlags,\n    DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode);\nWOWCallback16Ex_t pWOWCallback16Ex;\ntypedef BOOL (WINAPI *vm_inject_t)(DWORD vpfn16, DWORD dwFlags,\n    DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode);\nBOOL WINAPI vm_inject(DWORD vpfn16, DWORD dwFlags,\n    DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode);\n__declspec(dllexport) DWORD wine_call_to_16_vm86(DWORD target, DWORD cbArgs, PEXCEPTION_HANDLER handler,\n    void(*from16_reg)(void),\n    LONG(*__wine_call_from_16)(void),\n    int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context),\n    void(*__wine_call_to_16_ret)(void),\n    int dasm,\n    BOOL vm86,\n    void *memory_base,\n    pm_interrupt_handler pih);\n\nstatic CRITICAL_SECTION running_critical_section;\n\nstatic WHV_PARTITION_HANDLE partition;\nstatic BOOL load_func(HMODULE hmod, LPCSTR fname, LPVOID *dest)\n{\n    *dest = GetProcAddress(hmod, fname);\n    return *dest != NULL;\n}\nstatic BOOL load_funcs(void)\n{\n    HMODULE hmod = LoadLibraryW(L\"WinHvPlatform.dll\");\n    BOOL result = TRUE;\n    result = result && load_func(hmod, \"WHvCreatePartition\", (LPVOID*)&pWHvCreatePartition);\n    result = result && load_func(hmod, \"WHvSetupPartition\", (LPVOID*)&pWHvSetupPartition);\n    result = result && load_func(hmod, \"WHvMapGpaRange\", (LPVOID*)&pWHvMapGpaRange);\n    result = result && load_func(hmod, \"WHvUnmapGpaRange\", (LPVOID*)&pWHvUnmapGpaRange);\n    result = result && load_func(hmod, \"WHvCreateVirtualProcessor\", (LPVOID*)&pWHvCreateVirtualProcessor);\n    result = result && load_func(hmod, \"WHvGetVirtualProcessorRegisters\", (LPVOID*)&pWHvGetVirtualProcessorRegisters);\n    result = result && load_func(hmod, \"WHvSetVirtualProcessorRegisters\", (LPVOID*)&pWHvSetVirtualProcessorRegisters);\n    result = result && load_func(hmod, \"WHvSetPartitionProperty\", (LPVOID*)&pWHvSetPartitionProperty);\n    result = result && load_func(hmod, \"WHvRunVirtualProcessor\", (LPVOID*)&pWHvRunVirtualProcessor);\n    result = result && load_func(hmod, \"WHvCancelRunVirtualProcessor\", (LPVOID*)&pWHvCancelRunVirtualProcessor);\n    return result;\n}\nBOOL init_vm86(BOOL vm86)\n{\n    if (!load_funcs())\n    {\n        PANIC(\"Failed to load WinHvPlatform.dll\");\n        return FALSE;\n    }\n    HRESULT result;\n    WHV_PARTITION_PROPERTY prop;\n    InitializeCriticalSection(&running_critical_section);\n#ifdef _MSC_VER\n    __asm\n    {\n        mov seg_cs, cs\n        mov seg_ds, ds\n    }\n#else\n    seg_cs = wine_get_cs();\n    seg_ds = wine_get_ds();\n#endif\n    if (FAILED(result = pWHvCreatePartition(&partition)))\n    {\n        PANIC_HRESULT(\"WHvCreatePartition\", result);\n        return FALSE;\n    }\n    prop.ProcessorCount = 1;\n    if (FAILED(result = pWHvSetPartitionProperty(partition, WHvPartitionPropertyCodeProcessorCount, &prop, sizeof(prop))))\n    {\n        PANIC_HRESULT(\"WHvSetPartitionProperty\", result);\n        return FALSE;\n    }\n    if (FAILED(result = pWHvSetupPartition(partition)))\n    {\n        PANIC_HRESULT(\"WHvSetupPartition\", result);\n        return FALSE;\n    }\n    if (FAILED(result = pWHvCreateVirtualProcessor(partition, 0, 0)))\n    {\n        PANIC_HRESULT(\"WHvCreateVirtualProcessor\", result);\n        return FALSE;\n    }\n    struct whpx_vcpu_state state;\n    if (FAILED(result = pWHvGetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state.values)))\n    {\n        PANIC_HRESULT(\"WHvGetVirtualProcessorRegisters\", result);\n        return FALSE;\n    }\n    /* setup initial states */\n    state.gdtr.Table.Base = (UINT64)gdt;\n    state.gdtr.Table.Limit = 0x7ff;\n    trap_int = VirtualAlloc(NULL, 0x10000, MEM_COMMIT, PAGE_READWRITE);\n    DWORD trap_addr = (DWORD)trap_int;\n    gdt[1].BaseLow = trap_addr & 0xffff;\n    gdt[1].HighWord.Bytes.BaseMid = (trap_addr >> 16) & 0xff;\n    gdt[1].HighWord.Bytes.BaseHi = (trap_addr >> 24) & 0xff;\n    gdt[1].LimitLow = 0xffff;\n    gdt[1].HighWord.Bytes.Flags1 = 0x9b;\n    gdt[1].HighWord.Bytes.Flags2 = 0x40;\n    gdt[2].BaseLow = trap_addr & 0xffff;\n    gdt[2].HighWord.Bytes.BaseMid = (trap_addr >> 16) & 0xff;\n    gdt[2].HighWord.Bytes.BaseHi = (trap_addr >> 24) & 0xff;\n    gdt[2].LimitLow = 0xffff;\n    gdt[2].HighWord.Bytes.Flags1 = 0x93;\n    gdt[2].HighWord.Bytes.Flags2 = 0x40;\n    GetThreadSelectorEntry(GetCurrentThread(), seg_cs, gdt + (seg_cs >> 3));\n    GetThreadSelectorEntry(GetCurrentThread(), seg_ds, gdt + (seg_ds >> 3));\n\n    state.ldtr.Segment.Selector = 0x18;\n    state.ldtr.Segment.Base = (UINT64)&wine_ldt[0];\n    state.ldtr.Segment.Limit = 65535;\n\n    UINT32 *tss = (UINT32 *)gdt + 0x200;\n    state.tr.Segment.Selector = 0x18;\n    state.tr.Segment.Base = (UINT64)tss;\n    state.tr.Segment.Limit = 0x64;\n    state.tr.Segment.Attributes = 0x8b;\n    tss[1] = 0x10000; // SP0\n    tss[2] = 0x10; // SS0\n\n    state.idtr.Table.Limit = 0x8 * 256 - 1;\n    state.idtr.Table.Base = (SIZE_T)&idt[0];\n    state.cr0.Reg32 |= 1;\n    state.rflags.Reg32 |= 0x200;\n    for (int i = 0; i < 256; i++)\n    {\n        idt[i].DPL = 3;\n        idt[i].type = INT_GATE_INT32;\n        idt[i].selector = 0x0b;\n        idt[i].P = 1;\n        idt[i].offset_low = i;\n        idt[i].offset_high = 0;\n    }\n    memset(trap_int, 0xF4, 256); /* hlt */\n    ((char *)trap_int)[256] = 0xcf; /* iret */\n    if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state.values)))\n    {\n        PANIC_HRESULT(\"WHvSetVirtualProcessorRegisters\", result);\n        return FALSE;\n    }\n\n    if (!krnl386)\n        krnl386 = LoadLibraryA(KRNL386);\n    pWOWCallback16Ex = (WOWCallback16Ex_t)GetProcAddress(krnl386, \"K32WOWCallback16Ex\");\n    void(WINAPI *set_vm_inject_cb)(vm_inject_t) = (void(WINAPI *)(vm_inject_t))GetProcAddress(krnl386, \"set_vm_inject_cb\");\n    set_vm_inject_cb(vm_inject);\n    inject_event = CreateEventW(NULL, TRUE, FALSE, NULL);\n    InitializeCriticalSection(&inject_crit_section);\n    pGetpWin16Lock = (GetpWin16Lock_t)GetProcAddress(krnl386, \"GetpWin16Lock\");\n    pGetpWin16Lock(&win16_syslevel);\n    DOSVM_inport = (DOSVM_inport_t)GetProcAddress(krnl386, \"DOSVM_inport\");\n    DOSVM_outport = (DOSVM_outport_t)GetProcAddress(krnl386, \"DOSVM_outport\");\n    return TRUE;\n}\n\nvoid PUSH16(struct whpx_vcpu_state *state, WORD val)\n{\n    if (state->ss.Segment.Default)\n    {\n        state->rsp.Reg32 -= 2;\n        unsigned char *stack = (unsigned char*)(state->ss.Segment.Base + state->rsp.Reg32);\n        *(LPWORD)stack = val;\n    }\n    else\n    {\n        state->rsp.Reg16 -= 2;\n        unsigned char *stack = (unsigned char*)(state->ss.Segment.Base + state->rsp.Reg16);\n        *(LPWORD)stack = val;\n    }\n}\nvoid PUSH32(struct whpx_vcpu_state *state, DWORD val)\n{\n    if (state->ss.Segment.Default)\n    {\n        state->rsp.Reg32 -= 4;\n        unsigned char *stack = (unsigned char*)(state->ss.Segment.Base + state->rsp.Reg32);\n        *(LPDWORD)stack = val;\n    }\n    else\n    {\n        state->rsp.Reg16 -= 4;\n        unsigned char *stack = (unsigned char*)(state->ss.Segment.Base + state->rsp.Reg16);\n        *(LPDWORD)stack = val;\n    }\n}\nWORD POP16(struct whpx_vcpu_state *state)\n{\n    if (state->ss.Segment.Default)\n    {\n        LPWORD stack = (LPWORD)(state->ss.Segment.Base + state->rsp.Reg32);\n        state->rsp.Reg32 += 2;\n        return *stack;\n    }\n    else\n    {\n        LPWORD stack = (LPWORD)(state->ss.Segment.Base + state->rsp.Reg16);\n        state->rsp.Reg16 += 2;\n        return *stack;\n    }\n}\nDWORD POP32(struct whpx_vcpu_state *state)\n{\n    if (state->ss.Segment.Default)\n    {\n        LPDWORD stack = (LPDWORD)(state->ss.Segment.Base + state->rsp.Reg32);\n        state->rsp.Reg32 += 4;\n        return *stack;\n    }\n    else\n    {\n        LPDWORD stack = (LPDWORD)(state->ss.Segment.Base + state->rsp.Reg16);\n        state->rsp.Reg16 += 4;\n        return *stack;\n    }\n}\nWORD PEEK16(struct whpx_vcpu_state *state, int i)\n{\n    if (state->ss.Segment.Default)\n    {\n        LPWORD stack = (LPWORD)(state->ss.Segment.Base + state->rsp.Reg32);\n        return stack[i];\n    }\n    else\n    {\n        LPWORD stack = (LPWORD)(state->ss.Segment.Base + state->rsp.Reg16);\n        return stack[i];\n    }\n}\nDWORD PEEK32(struct whpx_vcpu_state *state, int i)\n{\n    if (state->ss.Segment.Default)\n    {\n        LPDWORD stack = (LPDWORD)(state->ss.Segment.Base + state->rsp.Reg32);\n        return stack[i];\n    }\n    else\n    {\n        LPDWORD stack = (LPDWORD)(state->ss.Segment.Base + state->rsp.Reg16);\n        return stack[i];\n    }\n}\n\nvoid relay(LPVOID relay_func, BOOL reg, struct whpx_vcpu_state *state, DWORD ret_addr, DWORD cbArgs, PEXCEPTION_HANDLER handler, DWORD old_frame16)\n{\n    unsigned char *stack1 = (unsigned char*)(get_seg_base(get_ss(state))+ get_sp(state));\n    unsigned char *stack = stack1;\n    /*\n    * (sp+24) word   first 16-bit arg\n    * (sp+22) word   cs\n    * (sp+20) word   ip\n    * (sp+18) word   bp\n    * (sp+14) long   32-bit entry point (reused for Win16 mutex recursion count)\n    * (sp+12) word   ip of actual entry point (necessary for relay debugging)\n    * (sp+8)  long   relay (argument conversion) function entry point\n    * (sp+4)  long   cs of 16-bit entry point\n    * (sp)    long   ip of 16-bit entry point\n    */\n    DWORD ip = *(DWORD*)stack;\n    stack += sizeof(DWORD);\n    DWORD cs = *(DWORD*)stack;\n    stack += sizeof(DWORD);\n    DWORD relay = *(DWORD*)stack;\n    stack += sizeof(DWORD);\n    WORD ip2 = *(WORD*)stack;\n    stack += sizeof(WORD);\n    DWORD entry = *(DWORD*)stack;\n    //for debug\n    void *entryf = (void*)entry;\n    stack += sizeof(DWORD);\n    WORD bp = *(WORD*)stack;\n    stack += sizeof(WORD);\n    WORD ip19 = *(WORD*)stack;\n    stack += sizeof(WORD);\n    WORD cs16 = *(WORD*)stack;\n    stack += sizeof(WORD);\n    WORD *args = (WORD*)stack;\n    set_eip(state, ip);\n    load_seg(get_cs(state), (WORD)cs);\n#include <pshpack1.h>\n    /* 16-bit stack layout after __wine_call_from_16() */\n    typedef struct _STACK16FRAME\n    {\n        struct STACK32FRAME *frame32;        /* 00 32-bit frame from last CallTo16() */\n        DWORD         edx;            /* 04 saved registers */\n        DWORD         ecx;            /* 08 */\n        DWORD         ebp;            /* 0c */\n        WORD          ds;             /* 10 */\n        WORD          es;             /* 12 */\n        WORD          fs;             /* 14 */\n        WORD          gs;             /* 16 */\n        DWORD         callfrom_ip;    /* 18 callfrom tail IP */\n        DWORD         module_cs;      /* 1c module code segment */\n        DWORD         relay;          /* 20 relay function address */\n        WORD          entry_ip;       /* 22 entry point IP */\n        DWORD         entry_point;    /* 26 API entry point to call, reused as mutex count */\n        WORD          bp;             /* 2a 16-bit stack frame chain */\n        WORD          ip;             /* 2c return address */\n        WORD          cs;             /* 2e */\n    } STACK16FRAME;\n#include <poppack.h>\n    CONTEXT context;\n    STACK32FRAME dummy_stack32 = { 0 };\n    dummy_stack32.retaddr = ret_addr;\n    dummy_stack32.nb_args = cbArgs;\n    dummy_stack32.frame.Handler = handler;\n    DWORD osp = get_esp(state);\n    PUSH16(state, get_seg_selector(get_gs(state)));\n    PUSH16(state, get_seg_selector(get_fs(state)));\n    PUSH16(state, get_seg_selector(get_es(state)));\n    PUSH16(state, get_seg_selector(get_ds(state)));\n    PUSH32(state, get_ebp(state));\n    PUSH32(state, get_ecx(state));\n    PUSH32(state, get_edx(state));\n    PUSH32(state, osp);\n    save_context_from_state(&context, state);\n    STACK16FRAME *oa = (STACK16FRAME*)wine_ldt_get_ptr((WORD)context.SegSs, context.Esp);\n    DWORD ooo = (WORD)context.Esp;\n    int off = 0;\n    if (reg)\n    {\n        context.Esp = osp + (SIZE_T)stack - (SIZE_T)stack1 - 4;\n        off = ooo - context.Esp;\n        context.Ebp = (context.Ebp & ~0xffff) | bp;\n        context.Eip = ip19;\n        context.SegCs = cs16;\n    }\n    int fret;\n    LPVOID old;\n    PCONTEXT pctx = NULL;\n#if _MSC_VER\n    __asm\n    {\n        mov old, esp\n        push cbArgs\n        push old /* target(esp) */\n        push retaddr /* retaddr */\n        push ebp\n        push ebx\n        push esi\n        push edi\n        push old_frame16 /* frame16 */\n        /* set up exception handler */\n        push handler\n        mov  eax, fs:[0]\n        push eax\n        mov dummy_stack32.frame.Next, eax\n        mov  fs : [0], esp\n        push cs\n        push 0\n        mov eax, [oa]\n        mov[eax], esp\n        lea eax, [context]\n        push eax\n        push args\n        push entry\n        call relay_func\n        add esp, 12 + 8\n        mov fret, eax\n        pop dword ptr fs : [0]\n        pop eax\n        jmp skip\n        retaddr :\n        mov pctx, ecx\n        skip:\n        mov esp, old\n    }\n#else\n    fret = ((int(*)(void *entry_point, unsigned char *args16, CONTEXT *context))relay_func)((void*)entry, (unsigned char*)args, &context);\n#endif\n    if (!reg)\n    {\n        set_eax(state, fret);\n    }\n    if (pctx)\n    {\n        /* Throw16 */\n        context = *pctx;\n        reg = TRUE;\n    }\n    if (!reg)\n    {\n        set_eax(state, fret);\n        context.SegSs = ((size_t)dynamic_getWOW32Reserved() >> 16) & 0xFFFF;\n        context.Esp = ((size_t)dynamic_getWOW32Reserved()) & 0xFFFF;\n        oa = (STACK16FRAME*)wine_ldt_get_ptr(context.SegSs, context.Esp);\n    }\n    else\n    {\n        oa = (STACK16FRAME*)wine_ldt_get_ptr(context.SegSs, context.Esp + off);\n    }\n    if (reg)\n        set_eax(state, (DWORD)context.Eax);\n    set_ecx(state, reg ? (DWORD)context.Ecx : (DWORD)oa->ecx);\n    if (reg)\n        set_edx(state, (DWORD)context.Edx);\n    else\n        set_edx(state, (DWORD)oa->edx);\n    set_ebx(state, (DWORD)context.Ebx);\n    set_esp(state, (DWORD)context.Esp);\n    set_ebp(state, (DWORD)context.Ebp);\n    set_esi(state, (DWORD)context.Esi);\n    set_edi(state, (DWORD)context.Edi);\n    load_seg(get_es(state), reg ? (WORD)context.SegEs : (WORD)oa->es);\n    load_seg(get_ss(state), (WORD)context.SegSs);\n    load_seg(get_ds(state), reg ? (WORD)context.SegDs : (WORD)oa->ds);\n    //ES, CS, SS, DS, FS, GS\n    /* Some programs expect that gs is not a valid selector! */\n    /* Some programs expect that fs is not a valid selector! */\n    /* win16 sets 0? */\n    load_seg(get_fs(state), 0);\n    load_seg(get_gs(state), 0);\n    if (reg)\n    {\n        if (!(ip19 != context.Eip || cs16 != context.SegCs))\n        {\n            context.Eip = oa->callfrom_ip;\n            context.SegCs = oa->module_cs;\n        }\n        else\n        {\n            /* CS:IP changed! */\n            context.Eip = context.Eip;\n        }\n        set_esp(state, context.Esp);\n        set_ebp(state, context.Ebp);\n    }\n    else\n    {\n        set_sp(state, context.Esp + 0x2c);\n        set_bp(state, bp);\n    }\n    set_eflags(state, context.EFlags);\n    set_eip(state, context.Eip);\n    load_seg(get_cs(state), (WORD)context.SegCs);\n}\n\nLPBYTE get_base_addr(WORD sel)\n{\n    return wine_ldt_get_base(wine_ldt + (sel >> 3));\n}\nstatic uint64 dr7;\nvoid set_break_point(struct whpx_vcpu_state *state, WORD sel, DWORD addr, int breakpoint)\n{\n    LPBYTE base = get_base_addr(sel);\n    if (!base)\n        return;\n    if (wine_ldt_get_limit(wine_ldt + (sel >> 3)) < addr)\n        return;\n    uint64 linear = (uint64)base + addr;\n    switch (breakpoint)\n    {\n    case 0:\n        state->dr0.Reg32 = linear;\n        break;\n    case 1:\n        state->dr1.Reg32 = linear;\n        break;\n    case 2:\n        state->dr2.Reg32 = linear;\n        break;\n    case 3:\n        state->dr3.Reg32 = linear;\n        break;\n    default:\n        return;\n    }\n    state->dr7.Reg32 |= (1 << (2 * breakpoint + 1)) | (0 << (18 + 4 * breakpoint));\n    state->dr6.Reg32 = 0;\n}\ntypedef int disassemble_debug_t(char *buffer, UINT8 *oprom, BOOL op_size, UINT64 eip);\nstatic disassemble_debug_t *disassemble_debug;\nstatic void trace(struct whpx_vcpu_state *state, uint16 cs, uint32 eip, uint16 ss, uint32 esp, uint32 eflags)\n{\n    char buf[512];\n    UINT8 *d = get_base_addr(cs) + eip;\n\n    if (!disassemble_debug)\n    {\n        disassemble_debug = (disassemble_debug_t*)GetProcAddress(LoadLibraryA(\"vm86.dll\"), \"disassemble_debug\");\n    }\n    int len = disassemble_debug(buf, d, (wine_ldt_get_flags(wine_ldt + (cs >> 3)) & WINE_LDT_FLAGS_32BIT) == WINE_LDT_FLAGS_32BIT, eip);\n    int i;\n    fprintf(stderr, \"%04x:%04x\\t\", cs, eip);\n    for (i = 0; i < len; i++)\n    {\n        fprintf(stderr, \"%02x\", d[i]);\n    }\n    fprintf(stderr, \"\\t%s\\n\", buf);\n    eflags &= ~2;\n    eflags &= ~0x100;\n    if (state->fs.Segment.Selector || state->gs.Segment.Selector)\n    {\n        fprintf(stderr,\n            \"EAX:%04X,ECX:%04X,EDX:%04X,EBX:%04X,\"\n            \"ESP:%04X,EBP:%04X,ESI:%04X,EDI:%04X,\"\n            \"ES:%04X,CS:%04X,SS:%04X,DS:%04X,FS:%04x,GS:%04x,\"\n            \"IP:%04X,stack:%08X,\"\n            \"EFLAGS:%08X\"\n            \"\\n\",\n            get_eax(state), get_ecx(state), get_edx(state), get_ebx(state),\n            esp, get_ebp(state), get_esi(state), get_edi(state),\n            get_seg_selector(get_es(state)), cs, ss, get_seg_selector(get_ds(state)), get_seg_selector(get_fs(state)), get_seg_selector(get_gs(state)),\n            eip, *(LPDWORD)(get_base_addr(ss) + esp),\n            eflags\n        );\n    }\n    else\n    {\n        fprintf(stderr,\n            \"EAX:%04X,ECX:%04X,EDX:%04X,EBX:%04X,\"\n            \"ESP:%04X,EBP:%04X,ESI:%04X,EDI:%04X,\"\n            \"ES:%04X,CS:%04X,SS:%04X,DS:%04X,\"\n            \"IP:%04X,stack:%08X,\"\n            \"EFLAGS:%08X\"\n            \"\\n\",\n            get_eax(state), get_ecx(state), get_edx(state), get_ebx(state),\n            esp, get_ebp(state), get_esi(state), get_edi(state),\n            get_seg_selector(get_es(state)), cs, ss, get_seg_selector(get_ds(state)),\n            eip, *(LPDWORD)(get_base_addr(ss) + esp),\n            eflags\n        );\n    }\n}\nBOOL has_x86_exception_err(WORD num, DWORD code)\n{\n    switch (num)\n    {\n    case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:\n        return FALSE;\n    case 8:\n        return TRUE;\n    case 9:\n        return FALSE;\n    case 10:case 11:case 12:case 13:case 14:\n        return TRUE;\n    case 15:case 16:\n        return FALSE;\n    case 17:\n        return code ? FALSE : TRUE; // ac exception has a null error code otherwise is equipment list\n    case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:\n        return FALSE;\n    case 30:\n        return TRUE;\n    case 31:\n        return FALSE;\n    }\n    return FALSE;\n}\n\nstatic void set_int()\n{\n    const WHV_REGISTER_NAME notreg = WHvX64RegisterDeliverabilityNotifications;\n    WHV_REGISTER_VALUE delnot = {0};\n    delnot.DeliverabilityNotifications.InterruptNotification = 1;\n    pWHvSetVirtualProcessorRegisters(partition, 0, &notreg, 1, &delnot);\n}\n\nvolatile struct\n{\n    BOOL inject;\n    DWORD vpfn16;\n    DWORD dwFlags;\n    DWORD cbArgs;\n    LPVOID pArgs;\n    LPDWORD pdwRetCode;\n} vm_inject_state;\nBOOL WINAPI vm_inject(DWORD vpfn16, DWORD dwFlags,\n    DWORD cbArgs, LPVOID pArgs, LPDWORD pdwRetCode)\n{\n    if(dwFlags != WCB16_PASCAL)\n        PANIC(\"vm_inject call not pascal\");\n    if (TryEnterCriticalSection(&win16_syslevel->crst))\n    {\n        /* There are no threads running VM. (e.g. call GetMessage) */\n        EnterCriticalSection(&inject_crit_section);\n        /* 16-bit stack is allocated by thread_attach(krnl386/kernel.c) */\n        BOOL result = pWOWCallback16Ex(vpfn16, dwFlags, cbArgs, pArgs, pdwRetCode);\n        LeaveCriticalSection(&inject_crit_section);\n        LeaveCriticalSection(&win16_syslevel->crst);\n        return result;\n    }\n    EnterCriticalSection(&inject_crit_section);\n    {\n        if (vm_inject_state.inject)\n        {\n            /* FIXME: multiple interrupts */\n            LeaveCriticalSection(&inject_crit_section);\n            return FALSE;\n        }\n        vm_inject_state.vpfn16 = vpfn16;\n        vm_inject_state.dwFlags = dwFlags;\n        vm_inject_state.cbArgs = cbArgs;\n        vm_inject_state.pArgs = pArgs;\n        vm_inject_state.pdwRetCode = pdwRetCode;\n        vm_inject_state.inject = TRUE;\n        ResetEvent(inject_event);\n    }\n    LeaveCriticalSection(&inject_crit_section);\n    if (pWHvCancelRunVirtualProcessor(partition, 0, 0) != ERROR_SUCCESS)\n        set_int();\n    WaitForSingleObject(inject_event, INFINITE);\n    return TRUE;\n}\n    \nvoid vm_inject_call(SEGPTR ret_addr, PEXCEPTION_HANDLER handler,\n    void(*from16_reg)(void),\n    LONG(*__wine_call_from_16)(void),\n    int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context),\n    void(*__wine_call_to_16_ret)(void),\n    int dasm,\n    pm_interrupt_handler pih, CONTEXT *context)\n{\n    DWORD ret;\n    EnterCriticalSection(&inject_crit_section);\n    static char intstack[4096];\n    static WORD intstksel = 0;\n    if (!intstksel)\n        intstksel = SELECTOR_AllocBlock(intstack, 4096, WINE_LDT_FLAGS_DATA);\n                    \n    WORD sp = context->Esp;\n    DWORD ss_base = get_base_addr(context->SegSs);\n    if (wine_ldt_get_flags(wine_ldt + (context->SegSs >> 3)) & WINE_LDT_FLAGS_32BIT) // don't call int handler on a large stack\n    {\n        ss_base = (DWORD)intstack;\n        sp = 4096;\n        dynamic_setWOW32Reserved((PVOID)MAKESEGPTR(intstksel, 4096));\n    }\n    {\n        char *stack = ss_base + sp - vm_inject_state.cbArgs;\n        vm_inject_state.inject = FALSE;\n        memcpy(stack, vm_inject_state.pArgs, vm_inject_state.cbArgs);\n        /* push return address */\n        stack -= sizeof(SEGPTR);\n        *((SEGPTR *)stack) = ret_addr;\n        vm_inject_state.cbArgs += sizeof(SEGPTR);\n    }\n    LeaveCriticalSection(&inject_crit_section);\n    ret = wine_call_to_16_vm86(vm_inject_state.vpfn16, vm_inject_state.cbArgs, handler, from16_reg, __wine_call_from_16, relay_call_from_16, __wine_call_to_16_ret, dasm, FALSE, NULL, pih);\n    if (vm_inject_state.pdwRetCode)\n        *vm_inject_state.pdwRetCode = ret;\n    SetEvent(inject_event);\n}\n\nBOOL syscall_init = FALSE;\nvoid fstsw(WORD* a);\nstatic int compare(const void *a1, const void *a2)\n{\n    SIZE_T lhs = *(const SIZE_T*)a1;\n    SIZE_T rhs = *(const SIZE_T*)a2;\n    if (lhs == rhs)\n        return 0;\n    if (lhs < rhs)\n        return -1;\n    return 1;\n}\nvoid vm86main(CONTEXT *context, DWORD csip, DWORD sssp, DWORD cbArgs, PEXCEPTION_HANDLER handler,\n    void(*from16_reg)(void),\n    LONG(*__wine_call_from_16)(void),\n    int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context),\n    void(*__wine_call_to_16_ret)(void),\n    int dasm,\n    pm_interrupt_handler pih\n)\n{\n    DWORD old_frame16 = PtrToUlong(dynamic_getWOW32Reserved());\n    HRESULT result;\n    EnterCriticalSection(&running_critical_section);\n    if (!syscall_init)\n    {\n        SIZE_T pages[4] = { (SIZE_T)from16_reg & ~0xfff, (SIZE_T)__wine_call_from_16 & ~0xfff, (SIZE_T)__wine_call_to_16_ret & ~0xfff, 0x80000000 };\n        int i;\n        SIZE_T map_addr = 0x1000;\n        qsort((void*)pages, sizeof(pages) / sizeof(pages[0]), sizeof(pages[0]), compare);\n        for (i = 0; i < sizeof(pages) / sizeof(pages[0]); i++)\n        {\n            SIZE_T len = pages[i] - map_addr;\n            if (pages[i] > map_addr)\n            {\n                if (FAILED(result = pWHvMapGpaRange(partition, (LPVOID)map_addr, map_addr, len, WHvMapGpaRangeFlagRead | WHvMapGpaRangeFlagWrite | WHvMapGpaRangeFlagExecute)))\n                {\n                    PANIC_HRESULT(\"WHvMapGpaRange\", result);\n                    return;\n                }\n            }\n            map_addr = pages[i] + 4096;\n        }\n        syscall_init = TRUE;\n    }\n    is_single_step = dasm;\n    DWORD ret_addr;\n    struct whpx_vcpu_state state;\n    {\n        if (FAILED(result = pWHvGetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state.values)))\n        {\n            PANIC_HRESULT(\"WHvGetVirtualProcessorRegisters\", result);\n        }\n        load_seg(&state.gs, (WORD)0);\n        load_seg(&state.fs, (WORD)0);\n        if (!csip)\n        {\n            load_seg(&state.es, (WORD)context->SegEs);\n            load_seg(&state.ds, (WORD)context->SegDs);\n            load_seg(&state.cs, (WORD)context->SegCs);\n            load_seg(&state.ss, (WORD)context->SegSs);\n\n            state.rdi.Reg32 = context->Edi;\n            state.rsi.Reg32 = context->Esi;\n            state.rbx.Reg32 = context->Ebx;\n            state.rdx.Reg32 = context->Edx;\n            state.rcx.Reg32 = context->Ecx;\n            state.rax.Reg32 = context->Eax;\n\n            state.rbp.Reg32 = context->Ebp;\n            state.rip.Reg32 = context->Eip;\n            set_eflags(&state, context->EFlags);\n            state.rsp.Reg32 = context->Esp - cbArgs;\n        }\n        else\n        {\n            load_seg(&state.cs, (WORD)SELECTOROF(csip));\n            load_seg(&state.ss, (WORD)SELECTOROF(sssp));\n            state.rip.Reg32 = OFFSETOF(csip);\n            state.rsp.Reg32 = OFFSETOF(sssp) - cbArgs;\n            if (!(wine_ldt_copy.flags[state.ds.Segment.Selector >> 3] & WINE_LDT_FLAGS_ALLOCATED))\n                load_seg(&state.ds, (WORD)0);\n        }\n        if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state.values)))\n        {\n            PANIC_HRESULT(\"WHvSetVirtualProcessorRegisters\", result);\n        }\n        unsigned char *stack = (unsigned char*)state.ss.Segment.Base + state.rsp.Reg32;\n        ret_addr = (*(LPDWORD)stack);\n    }\n    struct whpx_vcpu_state state2 = state;\n    if (is_single_step)\n    {\n        trace(&state2, get_seg_selector(get_cs(&state2)), get_eip(&state2), get_seg_selector(get_ss(&state2)), get_esp(&state2), get_eflags(&state2));\n    }\n    while (TRUE)\n    {\n        WHV_RUN_VP_EXIT_CONTEXT exit;\n        if (state2.cs.Segment.Selector == (ret_addr >> 16) && state2.rip.Reg32 == (ret_addr & 0xFFFF))\n        {\n            if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state2.values)))\n            {\n                PANIC_HRESULT(\"WHvSetVirtualProcessorRegisters\", result);\n            }\n            break;\n        }\n        if (FAILED(result = pWHvRunVirtualProcessor(partition, 0, &exit, sizeof(exit))))\n        {\n            LeaveCriticalSection(&running_critical_section);\n            PANIC_HRESULT(\"WHvRunVirtualProcessor\", result);\n            return;\n        }\n        if (FAILED(result = pWHvGetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state2.values)))\n        {\n            PANIC_HRESULT(\"WHvGetVirtualProcessorRegisters\", result);\n        }\n        UINT32 ptr = (UINT32)exit.VpContext.Cs.Base + (UINT32)exit.VpContext.Rip;\n        switch (exit.ExitReason)\n        {\n        case WHvRunVpExitReasonMemoryAccess:\n            if (exit.MemoryAccess.AccessInfo.GpaUnmapped)\n            {\n                if (exit.VpContext.Cs.Selector == seg_cs)\n                {\n                    BOOL is_reg = ptr == from16_reg;\n                    if (is_reg || ptr == __wine_call_from_16)\n                    {\n                        LeaveCriticalSection(&running_critical_section);\n                        relay(relay_call_from_16, is_reg, &state2, ret_addr, cbArgs, handler, old_frame16);\n                        EnterCriticalSection(&running_critical_section);\n                    }\n                }\n                if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state2.values)))\n                {\n                    PANIC_HRESULT(\"WHvSetVirtualProcessorRegisters\", result);\n                }\n            }\n            break;\n        case WHvRunVpExitReasonX64Halt:\n            if (((DWORD)ptr >= (DWORD)trap_int) && ((DWORD)ptr <= ((DWORD)trap_int + 256)))\n            {\n                int intvec = ((DWORD)ptr & 0xff) - 1;\n                BOOL has_err = has_x86_exception_err(intvec, PEEK32(&state2, 0));\n                DWORD err = has_err ? PEEK32(&state2, 0) : 0;\n                DWORD eip = PEEK32(&state2, (has_err ? 1 : 0) + 0);\n                DWORD cs = PEEK32(&state2, (has_err ? 1 : 0) + 1);\n                DWORD flags = PEEK32(&state2, (has_err ? 1 : 0) + 2);\n                DWORD old_esp = PEEK32(&state2, (has_err ? 1 : 0) + 3);\n                DWORD old_ss = PEEK32(&state2, (has_err ? 1 : 0) + 4);\n                const char *name = NULL;\n                switch (intvec)\n                {\n                case 0: name = \"#DE\"; break;\n                case 2: name = \"int 2h\"; break;\n                case 4: name = \"#OF\"; break;\n                case 6: name = \"#UD\"; break;\n                case 7: name = \"#NM\"; break;\n                case 8: name = \"#DF\"; break;\n                case 10: name = \"#TS\"; break;\n                case 11: name = \"#NP\"; break;\n                case 12: name = \"#SS\"; break;\n                case 13: name = \"#GP\"; break;\n                case 14: name = \"#PF\"; break;\n                }\n                set_eip(&state2, 256);\n                if (intvec == 1 && (state2.dr6.Reg32 & 15 || is_single_step))\n                {\n                    if (state2.dr6.Reg32 & 15)\n                    {\n                        if (state2.dr6.Reg32 & 1)\n                        {\n                            fprintf(stderr, \"breakpoint 0\\n\");\n                        }\n                        if (state2.dr6.Reg32 & 2)\n                        {\n                            fprintf(stderr, \"breakpoint 1\\n\");\n                        }\n                        if (state2.dr6.Reg32 & 4)\n                        {\n                            fprintf(stderr, \"breakpoint 2\\n\");\n                        }\n                        if (state2.dr6.Reg32 & 8)\n                        {\n                            fprintf(stderr, \"breakpoint 3\\n\");\n                        }\n                        state2.dr6.Reg32 = 0;\n                        flags |= 0x100;\n                        dr7 = state2.dr7.Reg32;\n                        state2.dr7.Reg32 = 0;\n                        /* breakpoint -> disable -> step -> enable */\n                    }\n                    else if (!is_single_step)\n                    {\n                        flags &= ~0x100;\n                        state2.dr7.Reg32 = dr7;\n                    }\n                    trace(&state2, cs, eip, old_ss, old_esp, flags);\n                    if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state2.values)))\n                    {\n\n                    }\n                    break;\n                }\n                else if (name)\n                {\n                    if (intvec == 13)\n                    {\n                        if (err == 0x40)\n                        {\n                            /* many startups access the BDA directly */\n                            static WORD dosmem_0040H = 0;\n                            if (!dosmem_0040H)\n                            {\n                                DWORD(WINAPI *GetProcAddress16)(HMODULE16, LPCSTR);\n                                HMODULE16(WINAPI *GetModuleHandle16)(LPCSTR);\n                                static HMODULE krnl386;\n                                if (!krnl386)\n                                    krnl386 = LoadLibraryA(KRNL386);\n                                GetProcAddress16 = (DWORD(WINAPI *)(HMODULE16, LPCSTR))GetProcAddress(krnl386, \"GetProcAddress16\");\n                                GetModuleHandle16 = (HMODULE16(WINAPI *)(LPCSTR))GetProcAddress(krnl386, \"GetModuleHandle16\");\n                                dosmem_0040H = (WORD)GetProcAddress16(GetModuleHandle16(\"KERNEL\"), (LPCSTR)193);\n                                (void(*)(void))GetProcAddress(krnl386, \"DOSVM_start_bios_timer\")();\n                            }\n                            /* allocate segment 40h */\n                            LPLDT_ENTRY entry = wine_ldt + (dosmem_0040H >> __AHSHIFT);\n                            gdt[0x40 >> __AHSHIFT] = *entry;\n                            load_seg(get_cs(&state2), cs);\n                            set_eip(&state2, eip);\n                            set_eflags(&state2, flags & ~0x10000);\n                            load_seg(get_ss(&state2), old_ss);\n                            set_esp(&state2, old_esp);\n                            if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state2.values)))\n                            {\n\n                            }\n                            break;\n                        }\n                        HMODULE toolhelp = GetModuleHandleA(\"toolhelp.dll16\");\n                        if (toolhelp)\n                        {\n                            SEGPTR stack = MAKESEGPTR(old_ss, (WORD)old_esp);\n                            FARPROC16 intcb = ((FARPROC16(WINAPI *)(SEGPTR *, SEGPTR, WORD, WORD, WORD))GetProcAddress(toolhelp, \"get_intcb\"))(&stack, MAKESEGPTR(cs, (WORD)eip), flags, intvec, (WORD)get_eax(&state2));\n                            if (intcb)\n                            {\n                                load_seg(get_ss(&state2), SELECTOROF(stack));\n                                set_esp(&state2, OFFSETOF(stack));\n                                load_seg(get_cs(&state2), SELECTOROF(intcb));\n                                set_eip(&state2, OFFSETOF(intcb));\n                                if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state2.values)))\n                                {\n\n                                }\n                                break;\n                            }\n                        }\n                    }\n                    DWORD handler = pih(intvec, MAKESEGPTR(cs, eip));\n                    if (!handler)\n                    {\n                        DWORD cpusig[4];\n#ifdef _MSC_VER\n                        __cpuid(cpusig, 0);\n#else\n                        __cpuid(0, cpusig[0], cpusig[1], cpusig[2], cpusig[3]);\n#endif\n                        fprintf(stderr, \"cpu type %x %x %x %x\\n\", cpusig[0], cpusig[1], cpusig[2], cpusig[3]);\n                        trace(&state2, cs, eip, old_ss, old_esp, flags);\n                        PANIC(\"exception %s\", name);\n                    }\n                    set_eip(&state2, OFFSETOF(handler));\n                    set_eflags(&state2, flags);\n                    load_seg(get_cs(&state2), SELECTOROF(handler));\n                    load_seg(get_ss(&state2), old_ss);\n                    set_esp(&state2, old_esp);\n                    if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state2.values)))\n                    {\n\n                    }\n                    break;\n                }\n                else\n                {\n                    load_seg(get_cs(&state2), (WORD)cs);\n                    set_eip(&state2, eip);\n                    load_seg(get_ss(&state2), (WORD)old_ss);\n                    set_esp(&state2, old_esp);\n                    set_eflags(&state2, flags);\n                    CONTEXT ctx;\n                    save_context_from_state(&ctx, &state2);\n                    if (intvec == 0x10) // redirect fpu errors to nmi \n                    {\n                        WORD sw;\n                        fstsw(&sw);\n                        if (sw & 0x80)\n                            intvec = 2;\n                    }\n                    if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state2.values)))\n                    {\n\n                    }\n                    LeaveCriticalSection(&running_critical_section);\n                    dynamic__wine_call_int_handler(&ctx, intvec);\n                    EnterCriticalSection(&running_critical_section);\n                    load_context_to_state(&ctx, &state2);\n                    if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state2.values)))\n                    {\n\n                    }\n                }\n            }\n            else\n            {\n                PANIC(\"HALT\");\n            }\n            break;\n        case WHvRunVpExitReasonCanceled:\n        {\n            if (!vm_inject_state.inject)\n                PANIC(\"unexpected vm cancellation\");\n            const WHV_REGISTER_NAME reg = WHvX64RegisterRflags;\n            WHV_REGISTER_VALUE flags = {0};\n            pWHvGetVirtualProcessorRegisters(partition, 0, &reg, 1, &flags);\n            if (!(flags.Reg32 & 0x200))\n            {\n                set_int();\n                break;\n            }\n        }\n        case WHvRunVpExitReasonX64InterruptWindow:\n        {\n            if (!vm_inject_state.inject)\n                PANIC(\"unexpected vm interrupt\");\n            CONTEXT ictx;\n            save_context_from_state(&ictx, &state2);\n            vm_inject_call(ret_addr, handler, from16_reg, __wine_call_from_16, relay_call_from_16, __wine_call_to_16_ret, dasm, pih, &ictx);\n            load_context_to_state(&ictx, &state2);\n            if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state2.values)))\n            {\n\n            }\n            break;\n        }\n        case WHvRunVpExitReasonX64IoPortAccess:\n        {\n            WHV_X64_IO_PORT_ACCESS_CONTEXT *io = &exit.IoPortAccess;\n            CONTEXT ctx;\n            save_context_from_state(&ctx, &state2);\n            ctx.Eip = exit.VpContext.Rip + exit.VpContext.InstructionLength;\n            ctx.Eax = io->Rax;\n            if(!(io->AccessInfo.StringOp))\n            {\n                switch(io->AccessInfo.AccessSize)\n                {\n                    case 1:\n                        if(!io->AccessInfo.IsWrite)\n                            ctx.Eax = (io->Rax & ~0xff) | (UINT8)DOSVM_inport(io->PortNumber, 1, &ctx);\n                        else\n                            DOSVM_outport(io->PortNumber, io->Rax, 1, &ctx);\n                        break;\n                    case 2:\n                        if(!io->AccessInfo.IsWrite)\n                        {\n                            ctx.Eax = (io->Rax & ~0xffff);\n                            ctx.Eax |= (UINT16)DOSVM_inport(io->PortNumber, 2, &ctx);\n                        }\n                        else\n                        {\n                            DOSVM_outport(io->PortNumber, io->Rax, 2, &ctx);\n                        }\n                        break;\n                    case 4:\n                        if(!io->AccessInfo.IsWrite)\n                        {\n                            ctx.Eax = DOSVM_inport(io->PortNumber, 4, &ctx);\n                        }\n                        else\n                        {\n                            DOSVM_outport(io->PortNumber, io->Rax, 4, &ctx);\n                        }\n                        break;\n                }\n            }\n            else\n            {\n                UINT32 count = io->AccessInfo.RepPrefix ? io->Rcx : 1;\n                UINT8 *addr;\n                if(!io->AccessInfo.IsWrite)\n                    addr = mem + io->Ds.Base + io->Rsi;\n                else\n                    addr = mem + io->Es.Base + io->Rdi;\n                for(int i = 0; i < count; i++)\n                {\n                    addr = ctx.EFlags & 0x400 ? addr - io->AccessInfo.AccessSize : addr + io->AccessInfo.AccessSize;\n                    switch(io->AccessInfo.AccessSize)\n                    {\n                        case 1:\n                            if(!io->AccessInfo.IsWrite)\n                                DOSVM_outport(io->PortNumber, *addr, 1, &ctx);\n                            else\n                                *addr = DOSVM_inport(io->PortNumber, 1, &ctx);\n                            break;\n                        case 2:\n                            if(!io->AccessInfo.IsWrite)\n                            {\n                                DOSVM_outport(io->PortNumber, *addr, 2, &ctx);\n                            }\n                            else\n                            {\n                                UINT16 val = DOSVM_inport(io->PortNumber, 2, &ctx);\n                                *addr = val;\n                                *(addr + 1) = val >> 8;\n                            }\n                            break;\n                        case 4:\n                            if(!io->AccessInfo.IsWrite)\n                            {\n                                DOSVM_outport(io->PortNumber, *addr, 4, &ctx);\n                            }\n                            else\n                            {\n                                UINT16 val = DOSVM_inport(io->PortNumber, 4, &ctx);\n                                *addr = val;\n                                *(addr + 1) = val >> 8;\n                                *(addr + 2) = val >> 16;\n                                *(addr + 3) = val >> 24;\n                            }\n                            break;\n                    }\n                }\n            }\n            load_context_to_state(&ctx, &state2);\n            if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state2.values)))\n            {\n\n            }\n            break;\n        }\n        default:\n            PANIC(\"unexpected exit reason %d\", exit.ExitReason);\n            break;\n        }\n    }\n    save_context_from_state(context, &state2);\n    LeaveCriticalSection(&running_critical_section);\n}\n\n__declspec(dllexport) DWORD wine_call_to_16_vm86(DWORD target, DWORD cbArgs, PEXCEPTION_HANDLER handler,\n    void(*from16_reg)(void),\n    LONG(*__wine_call_from_16)(void),\n    int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context),\n    void(*__wine_call_to_16_ret)(void),\n    int dasm,\n    BOOL vm86,\n    void *memory_base,\n    pm_interrupt_handler pih)\n{\n\n    mem = vm86 ? (UINT8*)memory_base : NULL;\n    if (!initflag)\n        initflag = init_vm86(vm86);\n    CONTEXT context = { 0 };\n    vm86main(&context, target, (DWORD)dynamic_getWOW32Reserved(), cbArgs, handler, from16_reg, __wine_call_from_16, relay_call_from_16, __wine_call_to_16_ret, dasm, pih);\n    return (context.Eax & 0xffff) | context.Edx << 16;\n}\n__declspec(dllexport) void wine_call_to_16_regs_vm86(CONTEXT *context, DWORD cbArgs, PEXCEPTION_HANDLER handler,\n    void(*from16_reg)(void),\n    LONG(*__wine_call_from_16)(void),\n    int(*relay_call_from_16)(void *entry_point, unsigned char *args16, CONTEXT *context),\n    void(*__wine_call_to_16_ret)(void),\n    int dasm,\n    BOOL vm86,\n    void *memory_base,\n    pm_interrupt_handler pih\n)\n{\n    mem = vm86 ? (UINT8*)memory_base : NULL;\n    if (!initflag)\n        initflag = init_vm86(vm86);\n    vm86main(context, 0, 0, cbArgs, handler, from16_reg, __wine_call_from_16, relay_call_from_16, __wine_call_to_16_ret, dasm, pih);\n\n\n}\n\nvoid callx87(const char *addr, LPCVOID eax)\n{\n    HRESULT result;\n    struct whpx_vcpu_state state;\n    if (FAILED(result = pWHvGetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state.values)))\n    {\n        PANIC_HRESULT(\"WHvGetVirtualProcessorRegisters\", result);\n        return;\n    }\n    set_eip(&state, (UINT32)addr);\n    set_eax(&state, (UINT32)eax);\n    load_seg(get_cs(&state), seg_cs);\n    load_seg(get_ds(&state), seg_ds);\n    while (TRUE)\n    {\n        WHV_RUN_VP_EXIT_CONTEXT exit;\n        EnterCriticalSection(&running_critical_section);\n        if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state.values)))\n        {\n            PANIC_HRESULT(\"WHvSetVirtualProcessorRegisters\", result);\n            return;\n        }\n        if (FAILED(result = pWHvRunVirtualProcessor(partition, 0, &exit, sizeof(exit))))\n        {\n            LeaveCriticalSection(&running_critical_section);\n            PANIC_HRESULT(\"WHvRunVirtualProcessor\", result);\n            return;\n        }\n        if (FAILED(result = pWHvGetVirtualProcessorRegisters(partition, 0, whpx_vcpu_reg_names, ARRAYSIZE(whpx_vcpu_reg_names), state.values)))\n        {\n            PANIC_HRESULT(\"WHvGetVirtualProcessorRegisters\", result);\n        }\n        LeaveCriticalSection(&running_critical_section);\n        if (exit.ExitReason == WHvRunVpExitReasonX64IoPortAccess)\n        {\n            break;\n        }\n        PANIC(\"unexpected exit reason %d\", exit.ExitReason);\n    }\n}\n\nvoid fldcw(WORD a)\n{\n    HRESULT result;\n    WHV_REGISTER_NAME reg = WHvX64RegisterFpControlStatus;\n    WHV_REGISTER_VALUE s;\n    if (FAILED(result = pWHvGetVirtualProcessorRegisters(partition, 0, &reg, 1, &s)))\n    {\n        PANIC_HRESULT(\"WHvGetVirtualProcessorRegisters\", result);\n    }\n    s.FpControlStatus.FpControl = a;\n    if (FAILED(result = pWHvSetVirtualProcessorRegisters(partition, 0, &reg, 1, &s)))\n    {\n        PANIC_HRESULT(\"WHvSetVirtualProcessorRegisters\", result);\n    }\n}\n\nvoid wait()\n{\n    char instr[] = { 0x9b, 0xee }; /* wait */\n    callx87(instr, NULL);\n}\n\nvoid fninit()\n{\n    char instr[] = { 0xdb, 0xe3, 0xee }; /* fninit */\n    callx87(instr, NULL);\n}\n\nvoid fstcw(WORD* a)\n{\n    HRESULT result;\n    WHV_REGISTER_NAME reg = WHvX64RegisterFpControlStatus;\n    WHV_REGISTER_VALUE s;\n    if (FAILED(result = pWHvGetVirtualProcessorRegisters(partition, 0, &reg, 1, &s)))\n    {\n        PANIC_HRESULT(\"WHvGetVirtualProcessorRegisters\", result);\n    }\n    *a = s.FpControlStatus.FpControl;\n}\nvoid fstsw(WORD* a)\n{\n    HRESULT result;\n    WHV_REGISTER_NAME reg = WHvX64RegisterFpControlStatus;\n    WHV_REGISTER_VALUE s;\n    if (FAILED(result = pWHvGetVirtualProcessorRegisters(partition, 0, &reg, 1, &s)))\n    {\n        PANIC_HRESULT(\"WHvGetVirtualProcessorRegisters\", result);\n    }\n    *a = s.FpControlStatus.FpStatus;\n}\n\nvoid frndint()\n{\n    char instr[] = { 0xd9, 0xfc, 0xee }; /* frndint */\n    callx87(instr, NULL);\n}\n\nvoid fclex()\n{\n    char instr[] = { 0xdb, 0xe2, 0xee }; /* fnclex */\n    callx87(instr, NULL);\n}\n\nvoid fsave(char* a)\n{\n    char instr[] = { 0xdd, 0x30, 0xee }; /* fnsave [eax] */\n    callx87(instr, a);\n}\n\nvoid frstor(const char* a)\n{\n    char instr[] = { 0xdd, 0x20, 0xee }; /* frstor [eax] */\n    callx87(instr, a);\n}\n\nvoid fstenv32(char* a)\n{\n    const char instr[] = { 0xd9, 0x30, 0xee }; /* fnstenv dword ptr [eax] */\n    callx87(instr, a);\n    return;\n}\n\nDWORD fistp(WORD rnd)\n{\n    const char instr[] = { 0xdb, 0x18, 0xee }; /* fistp dword ptr [eax] */\n    WORD oldcw, newcw;\n    DWORD a;\n    fstcw(&oldcw);\n    newcw = (oldcw & ~0xc00) | ((rnd & 3) << 10);\n    fldcw(newcw);\n    callx87(instr, &a);\n    fldcw(oldcw);\n    return a;\n}\n\ntypedef void(*fldcw_t)(WORD);\ntypedef void(*wait_t)();\ntypedef void(*fninit_t)();\ntypedef void(*fstcw_t)(WORD*);\ntypedef void(*fstsw_t)(WORD*);\ntypedef void(*frndint_t)();\ntypedef void(*fclex_t)();\ntypedef void(*fsave_t)(char*);\ntypedef void(*fstenv32_t)(char*);\ntypedef void(*frstor_t)(const char*);\ntypedef DWORD(*fistp_t)(WORD);\n\ntypedef struct\n{\n    fldcw_t fldcw;\n    wait_t wait;\n    fninit_t fninit;\n    fstcw_t fstcw;\n    fstsw_t fstsw;\n    frndint_t frndint;\n    fclex_t fclex;\n    fsave_t fsave;\n    frstor_t frstor;\n    fstenv32_t fstenv32;\n    fistp_t fistp;\n} x87function;\n\n__declspec(dllexport) void load_x87function(x87function *func)\n{\n    func->fclex = fclex;\n    func->fldcw = fldcw;\n    func->fninit = fninit;\n    func->frndint = frndint;\n    func->frstor = frstor;\n    func->fsave = fsave;\n    func->fstcw = fstcw;\n    func->fstsw = fstsw;\n    func->wait = wait;\n    func->fstenv32 = fstenv32;\n    func->fistp = fistp;\n}\n"
  },
  {
    "path": "whpxvm/whpxvm.def",
    "content": ""
  },
  {
    "path": "whpxvm/whpxvm.h",
    "content": "#pragma once\n#include <stdio.h>\n#include <windows.h>\n#define WHV_PARTITION_HANDLE WHV_PARTITION_HANDLE32 /* hack! */\n#include <WinHvPlatformDefs.h>\n#undef WHV_PARTITION_HANDLE\ntypedef UINT64 WHV_PARTITION_HANDLE;\n#include <WinHvPlatform.h>\nstruct whpx_vcpu_state\n{\n    union\n    {\n        struct\n        {\n            WHV_REGISTER_VALUE rax;\n            WHV_REGISTER_VALUE rcx;\n            WHV_REGISTER_VALUE rdx;\n            WHV_REGISTER_VALUE rbx;\n            WHV_REGISTER_VALUE rsp;\n            WHV_REGISTER_VALUE rbp;\n            WHV_REGISTER_VALUE rsi;\n            WHV_REGISTER_VALUE rdi;\n            WHV_REGISTER_VALUE rip;\n            WHV_REGISTER_VALUE rflags;\n            WHV_REGISTER_VALUE es;\n            WHV_REGISTER_VALUE cs;\n            WHV_REGISTER_VALUE ss;\n            WHV_REGISTER_VALUE ds;\n            WHV_REGISTER_VALUE fs;\n            WHV_REGISTER_VALUE gs;\n            WHV_REGISTER_VALUE ldtr;\n            WHV_REGISTER_VALUE tr;\n            WHV_REGISTER_VALUE idtr;\n            WHV_REGISTER_VALUE gdtr;\n            WHV_REGISTER_VALUE cr0;\n            WHV_REGISTER_VALUE cr3;\n            WHV_REGISTER_VALUE dr0;\n            WHV_REGISTER_VALUE dr1;\n            WHV_REGISTER_VALUE dr2;\n            WHV_REGISTER_VALUE dr3;\n            WHV_REGISTER_VALUE dr6;\n            WHV_REGISTER_VALUE dr7;\n        };\n        WHV_REGISTER_VALUE values[28];\n    };\n};\n\ntypedef UINT16 uint16;\ntypedef UINT32 uint32;\ntypedef UINT64 uint64;\nstatic WHV_REGISTER_NAME whpx_vcpu_reg_names[] =\n{\n        WHvX64RegisterRax,\n        WHvX64RegisterRcx,\n        WHvX64RegisterRdx,\n        WHvX64RegisterRbx,\n        WHvX64RegisterRsp,\n        WHvX64RegisterRbp,\n        WHvX64RegisterRsi,\n        WHvX64RegisterRdi,\n        WHvX64RegisterRip,\n        WHvX64RegisterRflags,\n        WHvX64RegisterEs,\n        WHvX64RegisterCs,\n        WHvX64RegisterSs,\n        WHvX64RegisterDs,\n        WHvX64RegisterFs,\n        WHvX64RegisterGs,\n        WHvX64RegisterLdtr,\n        WHvX64RegisterTr,\n        WHvX64RegisterIdtr,\n        WHvX64RegisterGdtr,\n        WHvX64RegisterCr0,\n        WHvX64RegisterCr3,\n        WHvX64RegisterDr0,\n        WHvX64RegisterDr1,\n        WHvX64RegisterDr2,\n        WHvX64RegisterDr3,\n        WHvX64RegisterDr6,\n        WHvX64RegisterDr7,\n};\n\n/* register utils */\ntypedef struct whpx_vcpu_state vcpu_state;\ntypedef WHV_X64_SEGMENT_REGISTER segment;\n/* 16-bit regs */\nstatic inline uint16 get_ax(vcpu_state *state)\n{\n    return state->rax.Reg16;\n}\n\nstatic inline uint16 get_cx(vcpu_state *state)\n{\n    return state->rcx.Reg16;\n}\n\nstatic inline uint16 get_dx(vcpu_state *state)\n{\n    return state->rdx.Reg16;\n}\n\nstatic inline uint16 get_bx(vcpu_state *state)\n{\n    return state->rbx.Reg16;\n}\n\nstatic inline uint16 get_sp(vcpu_state *state)\n{\n    return state->rsp.Reg16;\n}\n\nstatic inline uint16 get_bp(vcpu_state *state)\n{\n    return state->rbp.Reg16;\n}\n\nstatic inline uint16 get_si(vcpu_state *state)\n{\n    return state->rsi.Reg16;\n}\n\nstatic inline uint16 get_di(vcpu_state *state)\n{\n    return state->rdi.Reg16;\n}\n\nstatic inline uint16 get_ip(vcpu_state *state)\n{\n    return state->rip.Reg16;\n}\n\nstatic inline uint16 get_flags(vcpu_state *state)\n{\n    return state->rflags.Reg16;\n}\n\nstatic inline uint16 set_ax(vcpu_state *state, uint16 val)\n{\n    return state->rax.Reg16 = val;\n}\n\nstatic inline uint16 set_cx(vcpu_state *state, uint16 val)\n{\n    return state->rcx.Reg16 = val;\n}\n\nstatic inline uint16 set_dx(vcpu_state *state, uint16 val)\n{\n    return state->rdx.Reg16 = val;\n}\n\nstatic inline uint16 set_bx(vcpu_state *state, uint16 val)\n{\n    return state->rbx.Reg16 = val;\n}\n\nstatic inline uint16 set_sp(vcpu_state *state, uint16 val)\n{\n    return state->rsp.Reg16 = val;\n}\n\nstatic inline uint16 set_bp(vcpu_state *state, uint16 val)\n{\n    return state->rbp.Reg16 = val;\n}\n\nstatic inline uint16 set_si(vcpu_state *state, uint16 val)\n{\n    return state->rsi.Reg16 = val;\n}\n\nstatic inline uint16 set_di(vcpu_state *state, uint16 val)\n{\n    return state->rdi.Reg16 = val;\n}\n\nstatic inline uint16 set_ip(vcpu_state *state, uint16 val)\n{\n    return state->rip.Reg16 = val;\n}\n\nstatic inline segment *get_es(vcpu_state *state)\n{\n    return &state->es;\n}\n\nstatic inline segment *get_cs(vcpu_state *state)\n{\n    return &state->cs;\n}\n\nstatic inline segment *get_ss(vcpu_state *state)\n{\n    return &state->ss;\n}\n\nstatic inline segment *get_ds(vcpu_state *state)\n{\n    return &state->ds;\n}\n\nstatic inline segment *get_fs(vcpu_state *state)\n{\n    return &state->fs;\n}\n\nstatic inline segment *get_gs(vcpu_state *state)\n{\n    return &state->gs;\n}\n\nstatic inline uint16 get_seg_selector(segment *seg)\n{\n    return seg->Selector;\n}\n\nstatic inline uint32 get_seg_base(segment *seg)\n{\n    return (uint32)seg->Base;\n}\n\nstatic inline uint32 get_seg_limit(segment *seg)\n{\n    return seg->Limit;\n}\n\n/* 32-bit regs */\n\nstatic inline uint32 get_eax(vcpu_state *state)\n{\n    return state->rax.Reg32;\n}\n\nstatic inline uint32 get_ecx(vcpu_state *state)\n{\n    return state->rcx.Reg32;\n}\n\nstatic inline uint32 get_edx(vcpu_state *state)\n{\n    return state->rdx.Reg32;\n}\n\nstatic inline uint32 get_ebx(vcpu_state *state)\n{\n    return state->rbx.Reg32;\n}\n\nstatic inline uint32 get_esp(vcpu_state *state)\n{\n    return state->rsp.Reg32;\n}\n\nstatic inline uint32 get_ebp(vcpu_state *state)\n{\n    return state->rbp.Reg32;\n}\n\nstatic inline uint32 get_esi(vcpu_state *state)\n{\n    return state->rsi.Reg32;\n}\n\nstatic inline uint32 get_edi(vcpu_state *state)\n{\n    return state->rdi.Reg32;\n}\n\nstatic inline uint32 get_eip(vcpu_state *state)\n{\n    return state->rip.Reg32;\n}\n\nstatic inline uint32 get_eflags(vcpu_state *state)\n{\n    return state->rflags.Reg32;\n}\n\nstatic inline uint32 set_eax(vcpu_state *state, uint32 val)\n{\n    return state->rax.Reg32 = val;\n}\n\nstatic inline uint32 set_ecx(vcpu_state *state, uint32 val)\n{\n    return state->rcx.Reg32 = val;\n}\n\nstatic inline uint32 set_edx(vcpu_state *state, uint32 val)\n{\n    return state->rdx.Reg32 = val;\n}\n\nstatic inline uint32 set_ebx(vcpu_state *state, uint32 val)\n{\n    return state->rbx.Reg32 = val;\n}\n\nstatic inline uint32 set_esp(vcpu_state *state, uint32 val)\n{\n    return state->rsp.Reg32 = val;\n}\n\nstatic inline uint32 set_ebp(vcpu_state *state, uint32 val)\n{\n    return state->rbp.Reg32 = val;\n}\n\nstatic inline uint32 set_esi(vcpu_state *state, uint32 val)\n{\n    return state->rsi.Reg32 = val;\n}\n\nstatic inline uint32 set_edi(vcpu_state *state, uint32 val)\n{\n    return state->rdi.Reg32 = val;\n}\n\nstatic inline uint32 set_eip(vcpu_state *state, uint32 val)\n{\n    return state->rip.Reg32 = val;\n}\n"
  },
  {
    "path": "whpxvm/whpxvm.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <VCProjectVersion>15.0</VCProjectVersion>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>whpxvm</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n    <ProjectGuid>{2DF233FE-CBB8-4102-A68D-7D30C38961C1}</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"Shared\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <LinkIncremental>true</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <LinkIncremental>false</LinkIncremental>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>__i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;WIN32;__i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;NDEBUG;_CONSOLE;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <PrecompiledHeaderFile />\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)libwine.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <ModuleDefinitionFile>whpxvm.def</ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>__i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;WIN32;__i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;_DEBUG;_CONSOLE;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <PrecompiledHeaderFile />\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)libwine.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <ModuleDefinitionFile>whpxvm.def</ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <ClCompile>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>__i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;_DEBUG;_CONSOLE;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <PrecompiledHeaderFile />\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)libwine.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <ModuleDefinitionFile>whpxvm.def</ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <ClCompile>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>__i386__;_WINDOWS;HAS_I386;NtCurrentTeb=NtCurrentTeb__;NDEBUG;_CONSOLE;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <PrecompiledHeaderFile />\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)libwine.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <ModuleDefinitionFile>whpxvm.def</ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"whpxvm.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"whpxvm.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"whpxvm.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "widl/CMakeLists.txt",
    "content": "file(GLOB SOURCE client.c expr.c getopt.c hash.c header.c proxy.c register.c relay16.c server.c typegen.c typelib.c typetree.c utils.c widl.c write_msft.c)\ninclude_directories(../wine .)\nbison_target(widl_parser parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.tab.c COMPILE_FLAGS \"-p parser_\")\nflex_target(widl_scanner parser.l ${CMAKE_CURRENT_BINARY_DIR}/parser.l.c COMPILE_FLAGS)\nadd_flex_bison_dependency(widl_scanner widl_parser)\nadd_executable(widl ${SOURCE} ${BISON_widl_parser_OUTPUTS} ${FLEX_widl_scanner_OUTPUTS})\nadd_definitions(-D_X86_ -D__i386__ -Dpopen=_popen -Dpclose=_pclose -Dstrncasecmp=_strnicmp -Dstrcasecmp=_stricmp)\nif (NOT(MSVC))\n    add_definitions(-DHAVE_GETOPT_H)\nendif()\ntarget_link_libraries(widl wpp libwine)\n"
  },
  {
    "path": "widl/client.c",
    "content": "/*\n * IDL Compiler\n *\n * Copyright 2005-2006 Eric Kohl\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n \n#include <stdio.h>\n#include <stdlib.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#include <string.h>\n#include <ctype.h>\n\n#include \"widl.h\"\n#include \"utils.h\"\n#include \"parser.h\"\n#include \"header.h\"\n\n#include \"widltypes.h\"\n#include \"typegen.h\"\n#include \"expr.h\"\n\nstatic FILE* client;\nstatic int indent = 0;\n\nstatic void print_client( const char *format, ... ) __attribute__((format (printf, 1, 2)));\nstatic void print_client( const char *format, ... )\n{\n    va_list va;\n    va_start(va, format);\n    print(client, indent, format, va);\n    va_end(va);\n}\n\nstatic void write_client_func_decl( const type_t *iface, const var_t *func )\n{\n    const char *callconv = get_attrp(func->type->attrs, ATTR_CALLCONV);\n    const var_list_t *args = type_get_function_args(func->type);\n    type_t *rettype = type_function_get_rettype(func->type);\n\n    if (!callconv) callconv = \"__cdecl\";\n    write_type_decl_left(client, rettype);\n    fprintf(client, \" %s \", callconv);\n    fprintf(client, \"%s%s(\\n\", prefix_client, get_name(func));\n    indent++;\n    if (args)\n        write_args(client, args, iface->name, 0, TRUE);\n    else\n        print_client(\"void\");\n    fprintf(client, \")\\n\");\n    indent--;\n}\n\nstatic void write_function_stub( const type_t *iface, const var_t *func,\n                                 int method_count, unsigned int proc_offset )\n{\n    unsigned char explicit_fc, implicit_fc;\n    int has_full_pointer = is_full_pointer_function(func);\n    var_t *retval = type_function_get_retval(func->type);\n    const var_t *handle_var = get_func_handle_var( iface, func, &explicit_fc, &implicit_fc );\n    int has_ret = !is_void(retval->type);\n\n    if (is_interpreted_func( iface, func ))\n    {\n        write_client_func_decl( iface, func );\n        write_client_call_routine( client, iface, func, iface->name, proc_offset );\n        return;\n    }\n\n    print_client( \"struct __frame_%s%s\\n{\\n\", prefix_client, get_name(func) );\n    indent++;\n    print_client( \"__DECL_EXCEPTION_FRAME\\n\" );\n    print_client(\"MIDL_STUB_MESSAGE _StubMsg;\\n\");\n    if (handle_var)\n    {\n        if (explicit_fc == FC_BIND_GENERIC)\n            print_client(\"%s %s;\\n\",\n                         get_explicit_generic_handle_type(handle_var)->name, handle_var->name );\n        print_client(\"RPC_BINDING_HANDLE _Handle;\\n\");\n    }\n\n    if (has_ret && decl_indirect(retval->type))\n    {\n        print_client(\"void *_p_%s;\\n\", retval->name);\n    }\n    indent--;\n    print_client( \"};\\n\\n\" );\n\n    print_client( \"static void __finally_%s%s(\", prefix_client, get_name(func) );\n    print_client( \" struct __frame_%s%s *__frame )\\n{\\n\", prefix_client, get_name(func) );\n    indent++;\n\n    if (has_full_pointer)\n        write_full_pointer_free(client, indent, func);\n\n    print_client(\"NdrFreeBuffer(&__frame->_StubMsg);\\n\");\n\n    if (explicit_fc == FC_BIND_GENERIC)\n    {\n        fprintf(client, \"\\n\");\n        print_client(\"if (__frame->_Handle)\\n\");\n        indent++;\n        print_client(\"%s_unbind(__frame->%s, __frame->_Handle);\\n\",\n                     get_explicit_generic_handle_type(handle_var)->name, handle_var->name);\n        indent--;\n    }\n    indent--;\n    print_client( \"}\\n\\n\" );\n\n    write_client_func_decl( iface, func );\n\n    /* write the functions body */\n    fprintf(client, \"{\\n\");\n    indent++;\n    print_client( \"struct __frame_%s%s __f, * const __frame = &__f;\\n\", prefix_client, get_name(func) );\n\n    /* declare return value */\n    if (has_ret)\n    {\n        print_client(\"%s\", \"\");\n        write_type_decl(client, retval->type, retval->name);\n        fprintf(client, \";\\n\");\n    }\n    print_client(\"RPC_MESSAGE _RpcMessage;\\n\");\n\n    if (handle_var)\n    {\n        print_client( \"__frame->_Handle = 0;\\n\" );\n        if (explicit_fc == FC_BIND_GENERIC)\n            print_client(\"__frame->%s = %s;\\n\", handle_var->name, handle_var->name );\n    }\n    if (has_ret && decl_indirect(retval->type))\n    {\n        print_client(\"__frame->_p_%s = &%s;\\n\", retval->name, retval->name);\n    }\n    fprintf(client, \"\\n\");\n\n    print_client( \"RpcExceptionInit( 0, __finally_%s%s );\\n\", prefix_client, get_name(func) );\n\n    if (has_full_pointer)\n        write_full_pointer_init(client, indent, func, FALSE);\n\n    /* check pointers */\n    write_pointer_checks( client, indent, func );\n\n    print_client(\"RpcTryFinally\\n\");\n    print_client(\"{\\n\");\n    indent++;\n\n    print_client(\"NdrClientInitializeNew(&_RpcMessage, &__frame->_StubMsg, &%s_StubDesc, %d);\\n\",\n                 iface->name, method_count);\n\n    if (is_attr(func->attrs, ATTR_IDEMPOTENT) || is_attr(func->attrs, ATTR_BROADCAST))\n    {\n        print_client(\"_RpcMessage.RpcFlags = ( RPC_NCA_FLAGS_DEFAULT \");\n        if (is_attr(func->attrs, ATTR_IDEMPOTENT))\n            fprintf(client, \"| RPC_NCA_FLAGS_IDEMPOTENT \");\n        if (is_attr(func->attrs, ATTR_BROADCAST))\n            fprintf(client, \"| RPC_NCA_FLAGS_BROADCAST \");\n        fprintf(client, \");\\n\\n\");\n    }\n\n    switch (explicit_fc)\n    {\n    case FC_BIND_PRIMITIVE:\n        print_client(\"__frame->_Handle = %s;\\n\", handle_var->name);\n        fprintf(client, \"\\n\");\n        break;\n    case FC_BIND_GENERIC:\n        print_client(\"__frame->_Handle = %s_bind(%s);\\n\",\n                     get_explicit_generic_handle_type(handle_var)->name, handle_var->name);\n        fprintf(client, \"\\n\");\n        break;\n    case FC_BIND_CONTEXT:\n    {\n        /* if the context_handle attribute appears in the chain of types\n         * without pointers being followed, then the context handle must\n         * be direct, otherwise it is a pointer */\n        int is_ch_ptr = !is_aliaschain_attr(handle_var->type, ATTR_CONTEXTHANDLE);\n        print_client(\"if (%s%s != 0)\\n\", is_ch_ptr ? \"*\" : \"\", handle_var->name);\n        indent++;\n        print_client(\"__frame->_Handle = NDRCContextBinding(%s%s);\\n\",\n                     is_ch_ptr ? \"*\" : \"\", handle_var->name);\n        indent--;\n        if (is_attr(handle_var->attrs, ATTR_IN) && !is_attr(handle_var->attrs, ATTR_OUT))\n        {\n            print_client(\"else\\n\");\n            indent++;\n            print_client(\"RpcRaiseException(RPC_X_SS_IN_NULL_CONTEXT);\\n\");\n            indent--;\n        }\n        fprintf(client, \"\\n\");\n        break;\n    }\n    case 0:  /* implicit handle */\n        if (handle_var)\n        {\n            print_client(\"__frame->_Handle = %s;\\n\", handle_var->name);\n            fprintf(client, \"\\n\");\n        }\n        break;\n    }\n\n    write_remoting_arguments(client, indent, func, \"\", PASS_IN, PHASE_BUFFERSIZE);\n\n    print_client(\"NdrGetBuffer(&__frame->_StubMsg, __frame->_StubMsg.BufferLength, \");\n    if (handle_var)\n        fprintf(client, \"__frame->_Handle);\\n\\n\");\n    else\n        fprintf(client,\"%s__MIDL_AutoBindHandle);\\n\\n\", iface->name);\n\n    /* marshal arguments */\n    write_remoting_arguments(client, indent, func, \"\", PASS_IN, PHASE_MARSHAL);\n\n    /* send/receive message */\n    /* print_client(\"NdrNsSendReceive(\\n\"); */\n    /* print_client(\"(unsigned char *)__frame->_StubMsg.Buffer,\\n\"); */\n    /* print_client(\"(RPC_BINDING_HANDLE *) &%s__MIDL_AutoBindHandle);\\n\", iface->name); */\n    print_client(\"NdrSendReceive(&__frame->_StubMsg, __frame->_StubMsg.Buffer);\\n\\n\");\n\n    print_client(\"__frame->_StubMsg.BufferStart = _RpcMessage.Buffer;\\n\");\n    print_client(\"__frame->_StubMsg.BufferEnd = __frame->_StubMsg.BufferStart + _RpcMessage.BufferLength;\\n\");\n\n    if (has_out_arg_or_return(func))\n    {\n        fprintf(client, \"\\n\");\n\n        print_client(\"if ((_RpcMessage.DataRepresentation & 0x0000FFFFUL) != NDR_LOCAL_DATA_REPRESENTATION)\\n\");\n        indent++;\n        print_client(\"NdrConvert(&__frame->_StubMsg, (PFORMAT_STRING)&__MIDL_ProcFormatString.Format[%u]);\\n\",\n                     proc_offset);\n        indent--;\n    }\n\n    /* unmarshall arguments */\n    fprintf(client, \"\\n\");\n    write_remoting_arguments(client, indent, func, \"\", PASS_OUT, PHASE_UNMARSHAL);\n\n    /* unmarshal return value */\n    if (has_ret)\n    {\n        if (decl_indirect(retval->type))\n            print_client(\"MIDL_memset(&%s, 0, sizeof(%s));\\n\", retval->name, retval->name);\n        else if (is_ptr(retval->type) || is_array(retval->type))\n            print_client(\"%s = 0;\\n\", retval->name);\n        write_remoting_arguments(client, indent, func, \"\", PASS_RETURN, PHASE_UNMARSHAL);\n    }\n\n    indent--;\n    print_client(\"}\\n\");\n    print_client(\"RpcFinally\\n\");\n    print_client(\"{\\n\");\n    indent++;\n    print_client( \"__finally_%s%s( __frame );\\n\", prefix_client, get_name(func) );\n    indent--;\n    print_client(\"}\\n\");\n    print_client(\"RpcEndFinally\\n\");\n\n\n    /* emit return code */\n    if (has_ret)\n    {\n        fprintf(client, \"\\n\");\n        print_client(\"return %s;\\n\", retval->name);\n    }\n\n    indent--;\n    fprintf(client, \"}\\n\");\n    fprintf(client, \"\\n\");\n}\n\nstatic void write_function_stubs(type_t *iface, unsigned int *proc_offset)\n{\n    const statement_t *stmt;\n    const var_t *implicit_handle = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE);\n    int method_count = 0;\n\n    if (!implicit_handle)\n        print_client(\"static RPC_BINDING_HANDLE %s__MIDL_AutoBindHandle;\\n\\n\", iface->name);\n\n    STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) )\n    {\n        const var_t *func = stmt->u.var;\n        write_function_stub( iface, func, method_count++, *proc_offset );\n        *proc_offset += get_size_procformatstring_func( iface, func );\n    }\n}\n\n\nstatic void write_stubdescdecl(type_t *iface)\n{\n    print_client(\"static const MIDL_STUB_DESC %s_StubDesc;\\n\", iface->name);\n    fprintf(client, \"\\n\");\n}\n\n\nstatic void write_stubdescriptor(type_t *iface, int expr_eval_routines)\n{\n    const var_t *implicit_handle = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE);\n\n    print_client(\"static const MIDL_STUB_DESC %s_StubDesc =\\n\", iface->name);\n    print_client(\"{\\n\");\n    indent++;\n    print_client(\"(void *)& %s___RpcClientInterface,\\n\", iface->name);\n    print_client(\"MIDL_user_allocate,\\n\");\n    print_client(\"MIDL_user_free,\\n\");\n    print_client(\"{\\n\");\n    indent++;\n    if (implicit_handle)\n        print_client(\"&%s,\\n\", implicit_handle->name);\n    else\n        print_client(\"&%s__MIDL_AutoBindHandle,\\n\", iface->name);\n    indent--;\n    print_client(\"},\\n\");\n    print_client(\"0,\\n\");\n    if (!list_empty( &generic_handle_list ))\n        print_client(\"BindingRoutines,\\n\");\n    else\n        print_client(\"0,\\n\");\n    if (expr_eval_routines)\n        print_client(\"ExprEvalRoutines,\\n\");\n    else\n        print_client(\"0,\\n\");\n    print_client(\"0,\\n\");\n    print_client(\"__MIDL_TypeFormatString.Format,\\n\");\n    print_client(\"1, /* -error bounds_check flag */\\n\");\n    print_client(\"0x%x, /* Ndr library version */\\n\", get_stub_mode() == MODE_Oif ? 0x50002 : 0x10001);\n    print_client(\"0,\\n\");\n    print_client(\"0x50100a4, /* MIDL Version 5.1.164 */\\n\");\n    print_client(\"0,\\n\");\n    print_client(\"%s,\\n\", list_empty(&user_type_list) ? \"0\" : \"UserMarshalRoutines\");\n    print_client(\"0,  /* notify & notify_flag routine table */\\n\");\n    print_client(\"1,  /* Flags */\\n\");\n    print_client(\"0,  /* Reserved3 */\\n\");\n    print_client(\"0,  /* Reserved4 */\\n\");\n    print_client(\"0   /* Reserved5 */\\n\");\n    indent--;\n    print_client(\"};\\n\");\n    fprintf(client, \"\\n\");\n}\n\n\nstatic void write_clientinterfacedecl(type_t *iface)\n{\n    unsigned int ver = get_attrv(iface->attrs, ATTR_VERSION);\n    const UUID *uuid = get_attrp(iface->attrs, ATTR_UUID);\n    const str_list_t *endpoints = get_attrp(iface->attrs, ATTR_ENDPOINT);\n\n    if (endpoints) write_endpoints( client, iface->name, endpoints );\n\n    print_client(\"static const RPC_CLIENT_INTERFACE %s___RpcClientInterface =\\n\", iface->name );\n    print_client(\"{\\n\");\n    indent++;\n    print_client(\"sizeof(RPC_CLIENT_INTERFACE),\\n\");\n    print_client(\"{{0x%08x,0x%04x,0x%04x,{0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x}},{%d,%d}},\\n\",\n                 uuid->Data1, uuid->Data2, uuid->Data3, uuid->Data4[0], uuid->Data4[1],\n                 uuid->Data4[2], uuid->Data4[3], uuid->Data4[4], uuid->Data4[5], uuid->Data4[6],\n                 uuid->Data4[7], MAJORVERSION(ver), MINORVERSION(ver));\n    print_client(\"{{0x8a885d04,0x1ceb,0x11c9,{0x9f,0xe8,0x08,0x00,0x2b,0x10,0x48,0x60}},{2,0}},\\n\"); /* FIXME */\n    print_client(\"0,\\n\");\n    if (endpoints)\n    {\n        print_client(\"%u,\\n\", list_count(endpoints));\n        print_client(\"(PRPC_PROTSEQ_ENDPOINT)%s__RpcProtseqEndpoint,\\n\", iface->name);\n    }\n    else\n    {\n        print_client(\"0,\\n\");\n        print_client(\"0,\\n\");\n    }\n    print_client(\"0,\\n\");\n    print_client(\"0,\\n\");\n    print_client(\"0,\\n\");\n    indent--;\n    print_client(\"};\\n\");\n    if (old_names)\n        print_client(\"RPC_IF_HANDLE %s_ClientIfHandle DECLSPEC_HIDDEN = (RPC_IF_HANDLE)& %s___RpcClientInterface;\\n\",\n                     iface->name, iface->name);\n    else\n        print_client(\"RPC_IF_HANDLE %s%s_v%d_%d_c_ifspec DECLSPEC_HIDDEN = (RPC_IF_HANDLE)& %s___RpcClientInterface;\\n\",\n                     prefix_client, iface->name, MAJORVERSION(ver), MINORVERSION(ver), iface->name);\n    fprintf(client, \"\\n\");\n}\n\n\nstatic void write_implicithandledecl(type_t *iface)\n{\n    const var_t *implicit_handle = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE);\n\n    if (implicit_handle)\n    {\n        write_type_decl( client, implicit_handle->type, implicit_handle->name );\n        fprintf(client, \";\\n\\n\");\n    }\n}\n\n\nstatic void init_client(void)\n{\n    if (client) return;\n    if (!(client = fopen(client_name, \"w\")))\n        error(\"Could not open %s for output\\n\", client_name);\n\n    print_client(\"/*** Autogenerated by WIDL %s from %s - Do not edit ***/\\n\", PACKAGE_VERSION, input_name);\n    print_client(\"#include <string.h>\\n\");\n    print_client( \"\\n\");\n    print_client(\"#include \\\"%s\\\"\\n\", header_name);\n    print_client( \"\\n\");\n    print_client( \"#ifndef DECLSPEC_HIDDEN\\n\");\n    print_client( \"#define DECLSPEC_HIDDEN\\n\");\n    print_client( \"#endif\\n\");\n    print_client( \"\\n\");\n}\n\n\nstatic void write_client_ifaces(const statement_list_t *stmts, int expr_eval_routines, unsigned int *proc_offset)\n{\n    const statement_t *stmt;\n    if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry )\n    {\n        if (stmt->type == STMT_TYPE && type_get_type(stmt->u.type) == TYPE_INTERFACE)\n        {\n            int has_func = 0;\n            const statement_t *stmt2;\n            type_t *iface = stmt->u.type;\n            if (!need_stub(iface))\n                return;\n\n            fprintf(client, \"/*****************************************************************************\\n\");\n            fprintf(client, \" * %s interface\\n\", iface->name);\n            fprintf(client, \" */\\n\");\n            fprintf(client, \"\\n\");\n\n            STATEMENTS_FOR_EACH_FUNC(stmt2, type_iface_get_stmts(iface))\n            {\n                has_func = 1;\n                break;\n            }\n\n            if (has_func)\n            {\n                write_implicithandledecl(iface);\n\n                write_clientinterfacedecl(iface);\n                write_stubdescdecl(iface);\n                write_function_stubs(iface, proc_offset);\n\n                print_client(\"#if !defined(__RPC_WIN%u__)\\n\", pointer_size == 8 ? 64 : 32);\n                print_client(\"#error  Invalid build platform for this stub.\\n\");\n                print_client(\"#endif\\n\");\n\n                fprintf(client, \"\\n\");\n                write_stubdescriptor(iface, expr_eval_routines);\n            }\n        }\n    }\n}\n\nstatic void write_generic_handle_routine_list(void)\n{\n    generic_handle_t *gh;\n\n    if (list_empty( &generic_handle_list )) return;\n    print_client( \"static const GENERIC_BINDING_ROUTINE_PAIR BindingRoutines[] =\\n\" );\n    print_client( \"{\\n\" );\n    indent++;\n    LIST_FOR_EACH_ENTRY( gh, &generic_handle_list, generic_handle_t, entry )\n    {\n        print_client( \"{ (GENERIC_BINDING_ROUTINE)%s_bind, (GENERIC_UNBIND_ROUTINE)%s_unbind },\\n\",\n                      gh->name, gh->name );\n    }\n    indent--;\n    print_client( \"};\\n\\n\" );\n}\n\nstatic void write_client_routines(const statement_list_t *stmts)\n{\n    unsigned int proc_offset = 0;\n    int expr_eval_routines;\n\n    if (need_inline_stubs_file( stmts ))\n    {\n        write_exceptions( client );\n        print_client( \"\\n\");\n    }\n\n    write_formatstringsdecl(client, indent, stmts, need_stub);\n    expr_eval_routines = write_expr_eval_routines(client, client_token);\n    if (expr_eval_routines)\n        write_expr_eval_routine_list(client, client_token);\n    write_generic_handle_routine_list();\n    write_user_quad_list(client);\n\n    write_client_ifaces(stmts, expr_eval_routines, &proc_offset);\n\n    fprintf(client, \"\\n\");\n\n    write_procformatstring(client, stmts, need_stub);\n    write_typeformatstring(client, stmts, need_stub);\n}\n\nvoid write_client(const statement_list_t *stmts)\n{\n    if (!do_client)\n        return;\n    if (do_everything && !need_stub_files(stmts))\n        return;\n\n    init_client();\n    if (!client)\n        return;\n\n    if (do_win32 && do_win64)\n    {\n        fprintf(client, \"#ifndef _WIN64\\n\\n\");\n        pointer_size = 4;\n        write_client_routines( stmts );\n        fprintf(client, \"\\n#else /* _WIN64 */\\n\\n\");\n        pointer_size = 8;\n        write_client_routines( stmts );\n        fprintf(client, \"\\n#endif /* _WIN64 */\\n\");\n    }\n    else if (do_win32)\n    {\n        pointer_size = 4;\n        write_client_routines( stmts );\n    }\n    else if (do_win64)\n    {\n        pointer_size = 8;\n        write_client_routines( stmts );\n    }\n\n    fclose(client);\n}\n"
  },
  {
    "path": "widl/expr.c",
    "content": "/*\n * Expression Abstract Syntax Tree Functions\n *\n * Copyright 2002 Ove Kaaven\n * Copyright 2006-2008 Robert Shearman\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <stdarg.h>\n#include <assert.h>\n#include <ctype.h>\n#include <string.h>\n\n#include \"widl.h\"\n#include \"utils.h\"\n#include \"expr.h\"\n#include \"header.h\"\n#include \"typetree.h\"\n#include \"typegen.h\"\n\nstatic int is_integer_type(const type_t *type)\n{\n    switch (type_get_type(type))\n    {\n    case TYPE_ENUM:\n        return TRUE;\n    case TYPE_BASIC:\n        switch (type_basic_get_type(type))\n        {\n        case TYPE_BASIC_INT8:\n        case TYPE_BASIC_INT16:\n        case TYPE_BASIC_INT32:\n        case TYPE_BASIC_INT64:\n        case TYPE_BASIC_INT:\n        case TYPE_BASIC_INT3264:\n        case TYPE_BASIC_CHAR:\n        case TYPE_BASIC_HYPER:\n        case TYPE_BASIC_BYTE:\n        case TYPE_BASIC_WCHAR:\n        case TYPE_BASIC_ERROR_STATUS_T:\n            return TRUE;\n        case TYPE_BASIC_FLOAT:\n        case TYPE_BASIC_DOUBLE:\n        case TYPE_BASIC_HANDLE:\n            return FALSE;\n        }\n        return FALSE;\n    default:\n        return FALSE;\n    }\n}\n\nstatic int is_signed_integer_type(const type_t *type)\n{\n    switch (type_get_type(type))\n    {\n    case TYPE_ENUM:\n        return FALSE;\n    case TYPE_BASIC:\n        switch (type_basic_get_type(type))\n        {\n        case TYPE_BASIC_INT8:\n        case TYPE_BASIC_INT16:\n        case TYPE_BASIC_INT32:\n        case TYPE_BASIC_INT64:\n        case TYPE_BASIC_INT:\n        case TYPE_BASIC_INT3264:\n            return type_basic_get_sign(type) < 0;\n        case TYPE_BASIC_CHAR:\n            return TRUE;\n        case TYPE_BASIC_HYPER:\n        case TYPE_BASIC_BYTE:\n        case TYPE_BASIC_WCHAR:\n        case TYPE_BASIC_ERROR_STATUS_T:\n        case TYPE_BASIC_FLOAT:\n        case TYPE_BASIC_DOUBLE:\n        case TYPE_BASIC_HANDLE:\n            return FALSE;\n        }\n        /* FALLTHROUGH */\n    default:\n        return FALSE;\n    }\n}\n\nstatic int is_float_type(const type_t *type)\n{\n    return (type_get_type(type) == TYPE_BASIC &&\n        (type_basic_get_type(type) == TYPE_BASIC_FLOAT ||\n         type_basic_get_type(type) == TYPE_BASIC_DOUBLE));\n}\n\nexpr_t *make_expr(enum expr_type type)\n{\n    expr_t *e = xmalloc(sizeof(expr_t));\n    e->type = type;\n    e->ref = NULL;\n    e->u.lval = 0;\n    e->is_const = FALSE;\n    e->cval = 0;\n    return e;\n}\n\nexpr_t *make_exprl(enum expr_type type, int val)\n{\n    expr_t *e = xmalloc(sizeof(expr_t));\n    e->type = type;\n    e->ref = NULL;\n    e->u.lval = val;\n    e->is_const = FALSE;\n    /* check for numeric constant */\n    if (type == EXPR_NUM || type == EXPR_HEXNUM || type == EXPR_TRUEFALSE)\n    {\n        /* make sure true/false value is valid */\n        assert(type != EXPR_TRUEFALSE || val == 0 || val == 1);\n        e->is_const = TRUE;\n        e->cval = val;\n    }\n    return e;\n}\n\nexpr_t *make_exprd(enum expr_type type, double val)\n{\n    expr_t *e = xmalloc(sizeof(expr_t));\n    e->type = type;\n    e->ref = NULL;\n    e->u.dval = val;\n    e->is_const = TRUE;\n    e->cval = val;\n    return e;\n}\n\nexpr_t *make_exprs(enum expr_type type, char *val)\n{\n    expr_t *e;\n    e = xmalloc(sizeof(expr_t));\n    e->type = type;\n    e->ref = NULL;\n    e->u.sval = val;\n    e->is_const = FALSE;\n    /* check for predefined constants */\n    switch (type)\n    {\n    case EXPR_IDENTIFIER:\n    {\n        var_t *c = find_const(val, 0);\n        if (c)\n        {\n            e->u.sval = c->name;\n            free(val);\n            e->is_const = TRUE;\n            e->cval = c->eval->cval;\n        }\n        break;\n    }\n    case EXPR_CHARCONST:\n        if (!val[0])\n            error_loc(\"empty character constant\\n\");\n        else if (val[1])\n            error_loc(\"multi-character constants are endian dependent\\n\");\n        else\n        {\n            e->is_const = TRUE;\n            e->cval = *val;\n        }\n        break;\n    default:\n        break;\n    }\n    return e;\n}\n\nexpr_t *make_exprt(enum expr_type type, var_t *var, expr_t *expr)\n{\n    expr_t *e;\n    type_t *tref;\n\n    if (var->stgclass != STG_NONE && var->stgclass != STG_REGISTER)\n        error_loc(\"invalid storage class for type expression\\n\");\n\n    tref = var->type;\n\n    e = xmalloc(sizeof(expr_t));\n    e->type = type;\n    e->ref = expr;\n    e->u.tref = tref;\n    e->is_const = FALSE;\n    if (type == EXPR_SIZEOF)\n    {\n        /* only do this for types that should be the same on all platforms */\n        if (is_integer_type(tref) || is_float_type(tref))\n        {\n            e->is_const = TRUE;\n            e->cval = type_memsize(tref);\n        }\n    }\n    /* check for cast of constant expression */\n    if (type == EXPR_CAST && expr->is_const)\n    {\n        if (is_integer_type(tref))\n        {\n            unsigned int cast_type_bits = type_memsize(tref) * 8;\n            unsigned int cast_mask;\n\n            e->is_const = TRUE;\n            if (is_signed_integer_type(tref))\n            {\n                cast_mask = (1u << (cast_type_bits - 1)) - 1;\n                if (expr->cval & (1u << (cast_type_bits - 1)))\n                    e->cval = -((-expr->cval) & cast_mask);\n                else\n                    e->cval = expr->cval & cast_mask;\n            }\n            else\n            {\n                /* calculate ((1 << cast_type_bits) - 1) avoiding overflow */\n                cast_mask = ((1u << (cast_type_bits - 1)) - 1) |\n                            1u << (cast_type_bits - 1);\n                e->cval = expr->cval & cast_mask;\n            }\n        }\n        else\n        {\n            e->is_const = TRUE;\n            e->cval = expr->cval;\n        }\n    }\n    free(var);\n    return e;\n}\n\nexpr_t *make_expr1(enum expr_type type, expr_t *expr)\n{\n    expr_t *e;\n    e = xmalloc(sizeof(expr_t));\n    e->type = type;\n    e->ref = expr;\n    e->u.lval = 0;\n    e->is_const = FALSE;\n    /* check for compile-time optimization */\n    if (expr->is_const)\n    {\n        e->is_const = TRUE;\n        switch (type)\n        {\n        case EXPR_LOGNOT:\n            e->cval = !expr->cval;\n            break;\n        case EXPR_POS:\n            e->cval = +expr->cval;\n            break;\n        case EXPR_NEG:\n            e->cval = -expr->cval;\n            break;\n        case EXPR_NOT:\n            e->cval = ~expr->cval;\n            break;\n        default:\n            e->is_const = FALSE;\n            break;\n        }\n    }\n    return e;\n}\n\nexpr_t *make_expr2(enum expr_type type, expr_t *expr1, expr_t *expr2)\n{\n    expr_t *e;\n    e = xmalloc(sizeof(expr_t));\n    e->type = type;\n    e->ref = expr1;\n    e->u.ext = expr2;\n    e->is_const = FALSE;\n    /* check for compile-time optimization */\n    if (expr1->is_const && expr2->is_const)\n    {\n        e->is_const = TRUE;\n        switch (type)\n        {\n        case EXPR_ADD:\n            e->cval = expr1->cval + expr2->cval;\n            break;\n        case EXPR_SUB:\n            e->cval = expr1->cval - expr2->cval;\n            break;\n        case EXPR_MOD:\n            if (expr2->cval == 0)\n            {\n                error_loc(\"divide by zero in expression\\n\");\n                e->cval = 0;\n            }\n            else\n                e->cval = expr1->cval % expr2->cval;\n            break;\n        case EXPR_MUL:\n            e->cval = expr1->cval * expr2->cval;\n            break;\n        case EXPR_DIV:\n            if (expr2->cval == 0)\n            {\n                error_loc(\"divide by zero in expression\\n\");\n                e->cval = 0;\n            }\n            else\n                e->cval = expr1->cval / expr2->cval;\n            break;\n        case EXPR_OR:\n            e->cval = expr1->cval | expr2->cval;\n            break;\n        case EXPR_AND:\n            e->cval = expr1->cval & expr2->cval;\n            break;\n        case EXPR_SHL:\n            e->cval = expr1->cval << expr2->cval;\n            break;\n        case EXPR_SHR:\n            e->cval = expr1->cval >> expr2->cval;\n            break;\n        case EXPR_LOGOR:\n            e->cval = expr1->cval || expr2->cval;\n            break;\n        case EXPR_LOGAND:\n            e->cval = expr1->cval && expr2->cval;\n            break;\n        case EXPR_XOR:\n            e->cval = expr1->cval ^ expr2->cval;\n            break;\n        case EXPR_EQUALITY:\n            e->cval = expr1->cval == expr2->cval;\n            break;\n        case EXPR_INEQUALITY:\n            e->cval = expr1->cval != expr2->cval;\n            break;\n        case EXPR_GTR:\n            e->cval = expr1->cval > expr2->cval;\n            break;\n        case EXPR_LESS:\n            e->cval = expr1->cval < expr2->cval;\n            break;\n        case EXPR_GTREQL:\n            e->cval = expr1->cval >= expr2->cval;\n            break;\n        case EXPR_LESSEQL:\n            e->cval = expr1->cval <= expr2->cval;\n            break;\n        default:\n            e->is_const = FALSE;\n            break;\n        }\n    }\n    return e;\n}\n\nexpr_t *make_expr3(enum expr_type type, expr_t *expr1, expr_t *expr2, expr_t *expr3)\n{\n    expr_t *e;\n    e = xmalloc(sizeof(expr_t));\n    e->type = type;\n    e->ref = expr1;\n    e->u.ext = expr2;\n    e->ext2 = expr3;\n    e->is_const = FALSE;\n    /* check for compile-time optimization */\n    if (expr1->is_const && expr2->is_const && expr3->is_const)\n    {\n        e->is_const = TRUE;\n        switch (type)\n        {\n        case EXPR_COND:\n            e->cval = expr1->cval ? expr2->cval : expr3->cval;\n            break;\n        default:\n            e->is_const = FALSE;\n            break;\n        }\n    }\n    return e;\n}\n\nstruct expression_type\n{\n    int is_variable; /* is the expression resolved to a variable? */\n    int is_temporary; /* should the type be freed? */\n    type_t *type;\n};\n\nstatic void check_scalar_type(const struct expr_loc *expr_loc,\n                              const type_t *cont_type, const type_t *type)\n{\n    if (!cont_type || (!is_integer_type(type) && !is_ptr(type) &&\n                       !is_float_type(type)))\n        error_loc_info(&expr_loc->v->loc_info, \"scalar type required in expression%s%s\\n\",\n                       expr_loc->attr ? \" for attribute \" : \"\",\n                       expr_loc->attr ? expr_loc->attr : \"\");\n}\n\nstatic void check_arithmetic_type(const struct expr_loc *expr_loc,\n                                  const type_t *cont_type, const type_t *type)\n{\n    if (!cont_type || (!is_integer_type(type) && !is_float_type(type)))\n        error_loc_info(&expr_loc->v->loc_info, \"arithmetic type required in expression%s%s\\n\",\n                       expr_loc->attr ? \" for attribute \" : \"\",\n                       expr_loc->attr ? expr_loc->attr : \"\");\n}\n\nstatic void check_integer_type(const struct expr_loc *expr_loc,\n                               const type_t *cont_type, const type_t *type)\n{\n    if (!cont_type || !is_integer_type(type))\n        error_loc_info(&expr_loc->v->loc_info, \"integer type required in expression%s%s\\n\",\n                       expr_loc->attr ? \" for attribute \" : \"\",\n                       expr_loc->attr ? expr_loc->attr : \"\");\n}\n\nstatic type_t *find_identifier(const char *identifier, const type_t *cont_type, int *found_in_cont_type)\n{\n    type_t *type = NULL;\n    const var_t *field;\n    const var_list_t *fields = NULL;\n\n    *found_in_cont_type = 0;\n\n    if (cont_type)\n    {\n        switch (type_get_type(cont_type))\n        {\n        case TYPE_FUNCTION:\n            fields = type_function_get_args(cont_type);\n            break;\n        case TYPE_STRUCT:\n            fields = type_struct_get_fields(cont_type);\n            break;\n        case TYPE_UNION:\n        case TYPE_ENCAPSULATED_UNION:\n            fields = type_union_get_cases(cont_type);\n            break;\n        case TYPE_VOID:\n        case TYPE_BASIC:\n        case TYPE_ENUM:\n        case TYPE_MODULE:\n        case TYPE_COCLASS:\n        case TYPE_INTERFACE:\n        case TYPE_POINTER:\n        case TYPE_ARRAY:\n        case TYPE_BITFIELD:\n            /* nothing to do */\n            break;\n        case TYPE_ALIAS:\n            /* shouldn't get here because of using type_get_type above */\n            assert(0);\n            break;\n        }\n    }\n\n    if (fields) LIST_FOR_EACH_ENTRY( field, fields, const var_t, entry )\n        if (field->name && !strcmp(identifier, field->name))\n        {\n            type = field->type;\n            *found_in_cont_type = 1;\n            break;\n        }\n\n    if (!type)\n    {\n        var_t *const_var = find_const(identifier, 0);\n        if (const_var) type = const_var->type;\n    }\n\n    return type;\n}\n\nstatic int is_valid_member_operand(const type_t *type)\n{\n    switch (type_get_type(type))\n    {\n    case TYPE_STRUCT:\n    case TYPE_UNION:\n    case TYPE_ENUM:\n        return TRUE;\n    default:\n        return FALSE;\n    }\n}\n\nstatic struct expression_type resolve_expression(const struct expr_loc *expr_loc,\n                                                 const type_t *cont_type,\n                                                 const expr_t *e)\n{\n    struct expression_type result;\n    result.is_variable = FALSE;\n    result.is_temporary = FALSE;\n    result.type = NULL;\n    switch (e->type)\n    {\n    case EXPR_VOID:\n        break;\n    case EXPR_HEXNUM:\n    case EXPR_NUM:\n    case EXPR_TRUEFALSE:\n        result.is_temporary = FALSE;\n        result.type = type_new_int(TYPE_BASIC_INT, 0);\n        break;\n    case EXPR_STRLIT:\n        result.is_temporary = TRUE;\n        result.type = type_new_pointer(FC_UP, type_new_int(TYPE_BASIC_CHAR, 0), NULL);\n        break;\n    case EXPR_WSTRLIT:\n        result.is_temporary = TRUE;\n        result.type = type_new_pointer(FC_UP, type_new_int(TYPE_BASIC_WCHAR, 0), NULL);\n        break;\n    case EXPR_CHARCONST:\n        result.is_temporary = TRUE;\n        result.type = type_new_int(TYPE_BASIC_CHAR, 0);\n        break;\n    case EXPR_DOUBLE:\n        result.is_temporary = TRUE;\n        result.type = type_new_basic(TYPE_BASIC_DOUBLE);\n        break;\n    case EXPR_IDENTIFIER:\n    {\n        int found_in_cont_type;\n        result.is_variable = TRUE;\n        result.is_temporary = FALSE;\n        result.type = find_identifier(e->u.sval, cont_type, &found_in_cont_type);\n        if (!result.type)\n        {\n            error_loc_info(&expr_loc->v->loc_info, \"identifier %s cannot be resolved in expression%s%s\\n\",\n                           e->u.sval, expr_loc->attr ? \" for attribute \" : \"\",\n                           expr_loc->attr ? expr_loc->attr : \"\");\n        }\n        break;\n    }\n    case EXPR_LOGNOT:\n        result = resolve_expression(expr_loc, cont_type, e->ref);\n        check_scalar_type(expr_loc, cont_type, result.type);\n        result.is_variable = FALSE;\n        result.is_temporary = FALSE;\n        result.type = type_new_int(TYPE_BASIC_INT, 0);\n        break;\n    case EXPR_NOT:\n        result = resolve_expression(expr_loc, cont_type, e->ref);\n        check_integer_type(expr_loc, cont_type, result.type);\n        result.is_variable = FALSE;\n        break;\n    case EXPR_POS:\n    case EXPR_NEG:\n        result = resolve_expression(expr_loc, cont_type, e->ref);\n        check_arithmetic_type(expr_loc, cont_type, result.type);\n        result.is_variable = FALSE;\n        break;\n    case EXPR_ADDRESSOF:\n        result = resolve_expression(expr_loc, cont_type, e->ref);\n        if (!result.is_variable)\n            error_loc_info(&expr_loc->v->loc_info, \"address-of operator applied to non-variable type in expression%s%s\\n\",\n                           expr_loc->attr ? \" for attribute \" : \"\",\n                           expr_loc->attr ? expr_loc->attr : \"\");\n        result.is_variable = FALSE;\n        result.is_temporary = TRUE;\n        result.type = type_new_pointer(FC_UP, result.type, NULL);\n        break;\n    case EXPR_PPTR:\n        result = resolve_expression(expr_loc, cont_type, e->ref);\n        if (result.type && is_ptr(result.type))\n            result.type = type_pointer_get_ref(result.type);\n        else if(result.type && is_array(result.type)\n                            && type_array_is_decl_as_ptr(result.type))\n            result.type = type_array_get_element(result.type);\n        else\n            error_loc_info(&expr_loc->v->loc_info, \"dereference operator applied to non-pointer type in expression%s%s\\n\",\n                           expr_loc->attr ? \" for attribute \" : \"\",\n                           expr_loc->attr ? expr_loc->attr : \"\");\n        break;\n    case EXPR_CAST:\n        result = resolve_expression(expr_loc, cont_type, e->ref);\n        result.type = e->u.tref;\n        break;\n    case EXPR_SIZEOF:\n        result.is_temporary = FALSE;\n        result.type = type_new_int(TYPE_BASIC_INT, 0);\n        break;\n    case EXPR_SHL:\n    case EXPR_SHR:\n    case EXPR_MOD:\n    case EXPR_MUL:\n    case EXPR_DIV:\n    case EXPR_ADD:\n    case EXPR_SUB:\n    case EXPR_AND:\n    case EXPR_OR:\n    case EXPR_XOR:\n    {\n        struct expression_type result_right;\n        result = resolve_expression(expr_loc, cont_type, e->ref);\n        result.is_variable = FALSE;\n        result_right = resolve_expression(expr_loc, cont_type, e->u.ext);\n        /* FIXME: these checks aren't strict enough for some of the operators */\n        check_scalar_type(expr_loc, cont_type, result.type);\n        check_scalar_type(expr_loc, cont_type, result_right.type);\n        break;\n    }\n    case EXPR_LOGOR:\n    case EXPR_LOGAND:\n    case EXPR_EQUALITY:\n    case EXPR_INEQUALITY:\n    case EXPR_GTR:\n    case EXPR_LESS:\n    case EXPR_GTREQL:\n    case EXPR_LESSEQL:\n    {\n        struct expression_type result_left, result_right;\n        result_left = resolve_expression(expr_loc, cont_type, e->ref);\n        result_right = resolve_expression(expr_loc, cont_type, e->u.ext);\n        check_scalar_type(expr_loc, cont_type, result_left.type);\n        check_scalar_type(expr_loc, cont_type, result_right.type);\n        result.is_temporary = FALSE;\n        result.type = type_new_int(TYPE_BASIC_INT, 0);\n        break;\n    }\n    case EXPR_MEMBER:\n        result = resolve_expression(expr_loc, cont_type, e->ref);\n        if (result.type && is_valid_member_operand(result.type))\n            result = resolve_expression(expr_loc, result.type, e->u.ext);\n        else\n            error_loc_info(&expr_loc->v->loc_info, \"'.' or '->' operator applied to a type that isn't a structure, union or enumeration in expression%s%s\\n\",\n                           expr_loc->attr ? \" for attribute \" : \"\",\n                           expr_loc->attr ? expr_loc->attr : \"\");\n        break;\n    case EXPR_COND:\n    {\n        struct expression_type result_first, result_second, result_third;\n        result_first = resolve_expression(expr_loc, cont_type, e->ref);\n        check_scalar_type(expr_loc, cont_type, result_first.type);\n        result_second = resolve_expression(expr_loc, cont_type, e->u.ext);\n        result_third = resolve_expression(expr_loc, cont_type, e->ext2);\n        check_scalar_type(expr_loc, cont_type, result_second.type);\n        check_scalar_type(expr_loc, cont_type, result_third.type);\n        if (!is_ptr(result_second.type) ^ !is_ptr(result_third.type))\n            error_loc_info(&expr_loc->v->loc_info, \"type mismatch in ?: expression\\n\" );\n        /* FIXME: determine the correct return type */\n        result = result_second;\n        result.is_variable = FALSE;\n        break;\n    }\n    case EXPR_ARRAY:\n        result = resolve_expression(expr_loc, cont_type, e->ref);\n        if (result.type && is_array(result.type))\n        {\n            struct expression_type index_result;\n            result.type = type_array_get_element(result.type);\n            index_result = resolve_expression(expr_loc, cont_type /* FIXME */, e->u.ext);\n            if (!index_result.type || !is_integer_type(index_result.type))\n                error_loc_info(&expr_loc->v->loc_info, \"array subscript not of integral type in expression%s%s\\n\",\n                               expr_loc->attr ? \" for attribute \" : \"\",\n                               expr_loc->attr ? expr_loc->attr : \"\");\n        }\n        else\n            error_loc_info(&expr_loc->v->loc_info, \"array subscript operator applied to non-array type in expression%s%s\\n\",\n                           expr_loc->attr ? \" for attribute \" : \"\",\n                           expr_loc->attr ? expr_loc->attr : \"\");\n        break;\n    }\n    return result;\n}\n\nconst type_t *expr_resolve_type(const struct expr_loc *expr_loc, const type_t *cont_type, const expr_t *expr)\n{\n    struct expression_type expr_type;\n    expr_type = resolve_expression(expr_loc, cont_type, expr);\n    return expr_type.type;\n}\n\nvoid write_expr(FILE *h, const expr_t *e, int brackets,\n                int toplevel, const char *toplevel_prefix,\n                const type_t *cont_type, const char *local_var_prefix)\n{\n    switch (e->type)\n    {\n    case EXPR_VOID:\n        break;\n    case EXPR_NUM:\n        fprintf(h, \"%u\", e->u.lval);\n        break;\n    case EXPR_HEXNUM:\n        fprintf(h, \"0x%x\", e->u.lval);\n        break;\n    case EXPR_DOUBLE:\n        fprintf(h, \"%#.15g\", e->u.dval);\n        break;\n    case EXPR_TRUEFALSE:\n        if (e->u.lval == 0)\n            fprintf(h, \"FALSE\");\n        else\n            fprintf(h, \"TRUE\");\n        break;\n    case EXPR_IDENTIFIER:\n        if (toplevel && toplevel_prefix && cont_type)\n        {\n            int found_in_cont_type;\n            find_identifier(e->u.sval, cont_type, &found_in_cont_type);\n            if (found_in_cont_type)\n            {\n                fprintf(h, \"%s%s\", toplevel_prefix, e->u.sval);\n                break;\n            }\n        }\n        fprintf(h, \"%s%s\", local_var_prefix, e->u.sval);\n        break;\n    case EXPR_STRLIT:\n        fprintf(h, \"\\\"%s\\\"\", e->u.sval);\n        break;\n    case EXPR_WSTRLIT:\n        fprintf(h, \"L\\\"%s\\\"\", e->u.sval);\n        break;\n    case EXPR_CHARCONST:\n        fprintf(h, \"'%s'\", e->u.sval);\n        break;\n    case EXPR_LOGNOT:\n        fprintf(h, \"!\");\n        write_expr(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix);\n        break;\n    case EXPR_NOT:\n        fprintf(h, \"~\");\n        write_expr(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix);\n        break;\n    case EXPR_POS:\n        fprintf(h, \"+\");\n        write_expr(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix);\n        break;\n    case EXPR_NEG:\n        fprintf(h, \"-\");\n        write_expr(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix);\n        break;\n    case EXPR_ADDRESSOF:\n        fprintf(h, \"&\");\n        write_expr(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix);\n        break;\n    case EXPR_PPTR:\n        fprintf(h, \"*\");\n        write_expr(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix);\n        break;\n    case EXPR_CAST:\n        fprintf(h, \"(\");\n        write_type_decl(h, e->u.tref, NULL);\n        fprintf(h, \")\");\n        write_expr(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix);\n        break;\n    case EXPR_SIZEOF:\n        fprintf(h, \"sizeof(\");\n        write_type_decl(h, e->u.tref, NULL);\n        fprintf(h, \")\");\n        break;\n    case EXPR_SHL:\n    case EXPR_SHR:\n    case EXPR_MOD:\n    case EXPR_MUL:\n    case EXPR_DIV:\n    case EXPR_ADD:\n    case EXPR_SUB:\n    case EXPR_AND:\n    case EXPR_OR:\n    case EXPR_LOGOR:\n    case EXPR_LOGAND:\n    case EXPR_XOR:\n    case EXPR_EQUALITY:\n    case EXPR_INEQUALITY:\n    case EXPR_GTR:\n    case EXPR_LESS:\n    case EXPR_GTREQL:\n    case EXPR_LESSEQL:\n        if (brackets) fprintf(h, \"(\");\n        write_expr(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix);\n        switch (e->type)\n        {\n        case EXPR_SHL:          fprintf(h, \" << \"); break;\n        case EXPR_SHR:          fprintf(h, \" >> \"); break;\n        case EXPR_MOD:          fprintf(h, \" %% \"); break;\n        case EXPR_MUL:          fprintf(h, \" * \"); break;\n        case EXPR_DIV:          fprintf(h, \" / \"); break;\n        case EXPR_ADD:          fprintf(h, \" + \"); break;\n        case EXPR_SUB:          fprintf(h, \" - \"); break;\n        case EXPR_AND:          fprintf(h, \" & \"); break;\n        case EXPR_OR:           fprintf(h, \" | \"); break;\n        case EXPR_LOGOR:        fprintf(h, \" || \"); break;\n        case EXPR_LOGAND:       fprintf(h, \" && \"); break;\n        case EXPR_XOR:          fprintf(h, \" ^ \"); break;\n        case EXPR_EQUALITY:     fprintf(h, \" == \"); break;\n        case EXPR_INEQUALITY:   fprintf(h, \" != \"); break;\n        case EXPR_GTR:          fprintf(h, \" > \"); break;\n        case EXPR_LESS:         fprintf(h, \" < \"); break;\n        case EXPR_GTREQL:       fprintf(h, \" >= \"); break;\n        case EXPR_LESSEQL:      fprintf(h, \" <= \"); break;\n        default: break;\n        }\n        write_expr(h, e->u.ext, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix);\n        if (brackets) fprintf(h, \")\");\n        break;\n    case EXPR_MEMBER:\n        if (brackets) fprintf(h, \"(\");\n        if (e->ref->type == EXPR_PPTR)\n        {\n            write_expr(h, e->ref->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix);\n            fprintf(h, \"->\");\n        }\n        else\n        {\n            write_expr(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix);\n            fprintf(h, \".\");\n        }\n        write_expr(h, e->u.ext, 1, 0, toplevel_prefix, cont_type, \"\");\n        if (brackets) fprintf(h, \")\");\n        break;\n    case EXPR_COND:\n        if (brackets) fprintf(h, \"(\");\n        write_expr(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix);\n        fprintf(h, \" ? \");\n        write_expr(h, e->u.ext, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix);\n        fprintf(h, \" : \");\n        write_expr(h, e->ext2, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix);\n        if (brackets) fprintf(h, \")\");\n        break;\n    case EXPR_ARRAY:\n        if (brackets) fprintf(h, \"(\");\n        write_expr(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix);\n        fprintf(h, \"[\");\n        write_expr(h, e->u.ext, 1, 1, toplevel_prefix, cont_type, local_var_prefix);\n        fprintf(h, \"]\");\n        if (brackets) fprintf(h, \")\");\n        break;\n    }\n}\n\n/* This is actually fairly involved to implement precisely, due to the\n   effects attributes may have and things like that.  Right now this is\n   only used for optimization, so just check for a very small set of\n   criteria that guarantee the types are equivalent; assume every thing\n   else is different.   */\nstatic int compare_type(const type_t *a, const type_t *b)\n{\n    if (a == b\n        || (a->name\n            && b->name\n            && strcmp(a->name, b->name) == 0))\n        return 0;\n    /* Ordering doesn't need to be implemented yet.  */\n    return 1;\n}\n\nint compare_expr(const expr_t *a, const expr_t *b)\n{\n    int ret;\n\n    if (a->type != b->type)\n        return a->type - b->type;\n\n    switch (a->type)\n    {\n        case EXPR_NUM:\n        case EXPR_HEXNUM:\n        case EXPR_TRUEFALSE:\n            return a->u.lval - b->u.lval;\n        case EXPR_DOUBLE:\n            return a->u.dval - b->u.dval;\n        case EXPR_IDENTIFIER:\n        case EXPR_STRLIT:\n        case EXPR_WSTRLIT:\n        case EXPR_CHARCONST:\n            return strcmp(a->u.sval, b->u.sval);\n        case EXPR_COND:\n            ret = compare_expr(a->ref, b->ref);\n            if (ret != 0)\n                return ret;\n            ret = compare_expr(a->u.ext, b->u.ext);\n            if (ret != 0)\n                return ret;\n            return compare_expr(a->ext2, b->ext2);\n        case EXPR_OR:\n        case EXPR_AND:\n        case EXPR_ADD:\n        case EXPR_SUB:\n        case EXPR_MOD:\n        case EXPR_MUL:\n        case EXPR_DIV:\n        case EXPR_SHL:\n        case EXPR_SHR:\n        case EXPR_MEMBER:\n        case EXPR_ARRAY:\n        case EXPR_LOGOR:\n        case EXPR_LOGAND:\n        case EXPR_XOR:\n        case EXPR_EQUALITY:\n        case EXPR_INEQUALITY:\n        case EXPR_GTR:\n        case EXPR_LESS:\n        case EXPR_GTREQL:\n        case EXPR_LESSEQL:\n            ret = compare_expr(a->ref, b->ref);\n            if (ret != 0)\n                return ret;\n            return compare_expr(a->u.ext, b->u.ext);\n        case EXPR_CAST:\n            ret = compare_type(a->u.tref, b->u.tref);\n            if (ret != 0)\n                return ret;\n            /* Fall through.  */\n        case EXPR_NOT:\n        case EXPR_NEG:\n        case EXPR_PPTR:\n        case EXPR_ADDRESSOF:\n        case EXPR_LOGNOT:\n        case EXPR_POS:\n            return compare_expr(a->ref, b->ref);\n        case EXPR_SIZEOF:\n            return compare_type(a->u.tref, b->u.tref);\n        case EXPR_VOID:\n            return 0;\n    }\n    return -1;\n}\n"
  },
  {
    "path": "widl/expr.h",
    "content": "/*\n * Expression Abstract Syntax Tree Functions\n *\n * Copyright 2002 Ove Kaaven\n * Copyright 2006-2008 Robert Shearman\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nstruct expr_loc\n{\n    const var_t *v;\n    const char *attr;\n};\n\nextern expr_t *make_expr(enum expr_type type);\nextern expr_t *make_exprl(enum expr_type type, int val);\nextern expr_t *make_exprd(enum expr_type type, double val);\nextern expr_t *make_exprs(enum expr_type type, char *val);\nextern expr_t *make_exprt(enum expr_type type, var_t *var, expr_t *expr);\nextern expr_t *make_expr1(enum expr_type type, expr_t *expr);\nextern expr_t *make_expr2(enum expr_type type, expr_t *exp1, expr_t *exp2);\nextern expr_t *make_expr3(enum expr_type type, expr_t *expr1, expr_t *expr2, expr_t *expr3);\n\nextern const type_t *expr_resolve_type(const struct expr_loc *expr_loc, const type_t *cont_type, const expr_t *expr);\nextern int compare_expr(const expr_t *a, const expr_t *b);\n\nextern void write_expr(FILE *h, const expr_t *e, int brackets, int toplevel, const char *toplevel_prefix,\n                       const type_t *cont_type, const char *local_var_prefix);\n"
  },
  {
    "path": "widl/getopt.c",
    "content": "#ifdef _MSC_VER\n/* Getopt for Microsoft C\nThis code is a modification of the Free Software Foundation, Inc.\nGetopt library for parsing command line argument the purpose was\nto provide a Microsoft Visual C friendly derivative. This code\nprovides functionality for both Unicode and Multibyte builds.\n\nDate: 02/03/2011 - Ludvik Jerabek - Initial Release\nVersion: 1.0\nComment: Supports getopt, getopt_long, and getopt_long_only\nand POSIXLY_CORRECT environment flag\nLicense: LGPL\n\nRevisions:\n\n02/03/2011 - Ludvik Jerabek - Initial Release\n02/20/2011 - Ludvik Jerabek - Fixed compiler warnings at Level 4\n07/05/2011 - Ludvik Jerabek - Added no_argument, required_argument, optional_argument defs\n08/03/2011 - Ludvik Jerabek - Fixed non-argument runtime bug which caused runtime exception\n08/09/2011 - Ludvik Jerabek - Added code to export functions for DLL and LIB\n02/15/2012 - Ludvik Jerabek - Fixed _GETOPT_THROW definition missing in implementation file\n08/01/2012 - Ludvik Jerabek - Created separate functions for char and wchar_t characters so single dll can do both unicode and ansi\n10/15/2012 - Ludvik Jerabek - Modified to match latest GNU features\n06/19/2015 - Ludvik Jerabek - Fixed maximum option limitation caused by option_a (255) and option_w (65535) structure val variable\n\n**DISCLAIMER**\nTHIS MATERIAL IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY KIND,\nEITHER EXPRESS OR IMPLIED, INCLUDING, BUT Not LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\nPURPOSE, OR NON-INFRINGEMENT. SOME JURISDICTIONS DO NOT ALLOW THE\nEXCLUSION OF IMPLIED WARRANTIES, SO THE ABOVE EXCLUSION MAY NOT\nAPPLY TO YOU. IN NO EVENT WILL I BE LIABLE TO ANY PARTY FOR ANY\nDIRECT, INDIRECT, SPECIAL OR OTHER CONSEQUENTIAL DAMAGES FOR ANY\nUSE OF THIS MATERIAL INCLUDING, WITHOUT LIMITATION, ANY LOST\nPROFITS, BUSINESS INTERRUPTION, LOSS OF PROGRAMS OR OTHER DATA ON\nYOUR INFORMATION HANDLING SYSTEM OR OTHERWISE, EVEN If WE ARE\nEXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\n*/\n#define _CRT_SECURE_NO_WARNINGS\n#include <stdlib.h>\n#include <stdio.h>\n#include <malloc.h>\n#include \"getopt_msvc.h\"\n\n#ifdef __cplusplus\n\t#define _GETOPT_THROW throw()\n#else\n\t#define _GETOPT_THROW\n#endif\n\nint optind = 1;\nint opterr = 1;\nint optopt = '?';\nenum ENUM_ORDERING { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER };\n\n//\n//\n//\t\tAnsi structures and functions follow\n// \n//\n\nstatic struct _getopt_data_a\n{\n\tint optind;\n\tint opterr;\n\tint optopt;\n\tchar *optarg;\n\tint __initialized;\n\tchar *__nextchar;\n\tenum ENUM_ORDERING __ordering;\n\tint __posixly_correct;\n\tint __first_nonopt;\n\tint __last_nonopt;\n} getopt_data_a;\nchar *optarg_a;\n\nstatic void exchange_a(char **argv, struct _getopt_data_a *d)\n{\n\tint bottom = d->__first_nonopt;\n\tint middle = d->__last_nonopt;\n\tint top = d->optind;\n\tchar *tem;\n\twhile (top > middle && middle > bottom)\n\t{\n\t\tif (top - middle > middle - bottom)\n\t\t{\n\t\t\tint len = middle - bottom;\n\t\t\tregister int i;\n\t\t\tfor (i = 0; i < len; i++)\n\t\t\t{\n\t\t\t\ttem = argv[bottom + i];\n\t\t\t\targv[bottom + i] = argv[top - (middle - bottom) + i];\n\t\t\t\targv[top - (middle - bottom) + i] = tem;\n\t\t\t}\n\t\t\ttop -= len;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tint len = top - middle;\n\t\t\tregister int i;\n\t\t\tfor (i = 0; i < len; i++)\n\t\t\t{\n\t\t\t\ttem = argv[bottom + i];\n\t\t\t\targv[bottom + i] = argv[middle + i];\n\t\t\t\targv[middle + i] = tem;\n\t\t\t}\n\t\t\tbottom += len;\n\t\t}\n\t}\n\td->__first_nonopt += (d->optind - d->__last_nonopt);\n\td->__last_nonopt = d->optind;\n}\nstatic const char *_getopt_initialize_a (const char *optstring, struct _getopt_data_a *d, int posixly_correct)\n{\n\td->__first_nonopt = d->__last_nonopt = d->optind;\n\td->__nextchar = NULL;\n\td->__posixly_correct = posixly_correct | !!getenv(\"POSIXLY_CORRECT\");\n\tif (optstring[0] == '-')\n\t{\n\t\td->__ordering = RETURN_IN_ORDER;\n\t\t++optstring;\n\t}\n\telse if (optstring[0] == '+')\n\t{\n\t\td->__ordering = REQUIRE_ORDER;\n\t\t++optstring;\n\t}\n\telse if (d->__posixly_correct)\n\t\td->__ordering = REQUIRE_ORDER;\n\telse\n\t\td->__ordering = PERMUTE;\n\treturn optstring;\n}\nint _getopt_internal_r_a (int argc, char *const *argv, const char *optstring, const struct option_a *longopts, int *longind, int long_only, struct _getopt_data_a *d, int posixly_correct)\n{\n\tint print_errors = d->opterr;\n\tif (argc < 1)\n\t\treturn -1;\n\td->optarg = NULL;\n\tif (d->optind == 0 || !d->__initialized)\n\t{\n\t\tif (d->optind == 0)\n\t\t\td->optind = 1;\n\t\toptstring = _getopt_initialize_a (optstring, d, posixly_correct);\n\t\td->__initialized = 1;\n\t}\n\telse if (optstring[0] == '-' || optstring[0] == '+')\n\t\toptstring++;\n\tif (optstring[0] == ':')\n\t\tprint_errors = 0;\n\tif (d->__nextchar == NULL || *d->__nextchar == '\\0')\n\t{\n\t\tif (d->__last_nonopt > d->optind)\n\t\t\td->__last_nonopt = d->optind;\n\t\tif (d->__first_nonopt > d->optind)\n\t\t\td->__first_nonopt = d->optind;\n\t\tif (d->__ordering == PERMUTE)\n\t\t{\n\t\t\tif (d->__first_nonopt != d->__last_nonopt && d->__last_nonopt != d->optind)\n\t\t\t\texchange_a ((char **) argv, d);\n\t\t\telse if (d->__last_nonopt != d->optind)\n\t\t\t\td->__first_nonopt = d->optind;\n\t\t\twhile (d->optind < argc && (argv[d->optind][0] != '-' || argv[d->optind][1] == '\\0'))\n\t\t\t\td->optind++;\n\t\t\td->__last_nonopt = d->optind;\n\t\t}\n\t\tif (d->optind != argc && !strcmp(argv[d->optind], \"--\"))\n\t\t{\n\t\t\td->optind++;\n\t\t\tif (d->__first_nonopt != d->__last_nonopt && d->__last_nonopt != d->optind)\n\t\t\t\texchange_a((char **) argv, d);\n\t\t\telse if (d->__first_nonopt == d->__last_nonopt)\n\t\t\t\td->__first_nonopt = d->optind;\n\t\t\td->__last_nonopt = argc;\n\t\t\td->optind = argc;\n\t\t}\n\t\tif (d->optind == argc)\n\t\t{\n\t\t\tif (d->__first_nonopt != d->__last_nonopt)\n\t\t\t\td->optind = d->__first_nonopt;\n\t\t\treturn -1;\n\t\t}\n\t\tif ((argv[d->optind][0] != '-' || argv[d->optind][1] == '\\0'))\n\t\t{\n\t\t\tif (d->__ordering == REQUIRE_ORDER)\n\t\t\t\treturn -1;\n\t\t\td->optarg = argv[d->optind++];\n\t\t\treturn 1;\n\t\t}\n\t\td->__nextchar = (argv[d->optind] + 1 + (longopts != NULL && argv[d->optind][1] == '-'));\n\t}\n\tif (longopts != NULL && (argv[d->optind][1] == '-' || (long_only && (argv[d->optind][2] || !strchr(optstring, argv[d->optind][1])))))\n\t{\n\t\tchar *nameend;\n\t\tunsigned int namelen;\n\t\tconst struct option_a *p;\n\t\tconst struct option_a *pfound = NULL;\n\t\tstruct option_list\n\t\t{\n\t\t\tconst struct option_a *p;\n\t\t\tstruct option_list *next;\n\t\t} *ambig_list = NULL;\n\t\tint exact = 0;\n\t\tint indfound = -1;\n\t\tint option_index;\n\t\tfor (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++);\n\t\tnamelen = (unsigned int)(nameend - d->__nextchar);\n\t\tfor (p = longopts, option_index = 0; p->name; p++, option_index++)\n\t\t\tif (!strncmp(p->name, d->__nextchar, namelen))\n\t\t\t{\n\t\t\t\tif (namelen == (unsigned int)strlen(p->name))\n\t\t\t\t{\n\t\t\t\t\tpfound = p;\n\t\t\t\t\tindfound = option_index;\n\t\t\t\t\texact = 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse if (pfound == NULL)\n\t\t\t\t{\n\t\t\t\t\tpfound = p;\n\t\t\t\t\tindfound = option_index;\n\t\t\t\t}\n\t\t\t\telse if (long_only || pfound->has_arg != p->has_arg || pfound->flag != p->flag || pfound->val != p->val)\n\t\t\t\t{\n\t\t\t\t\tstruct option_list *newp = (struct option_list*)alloca(sizeof(*newp));\n\t\t\t\t\tnewp->p = p;\n\t\t\t\t\tnewp->next = ambig_list;\n\t\t\t\t\tambig_list = newp;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (ambig_list != NULL && !exact)\n\t\t\t{\n\t\t\t\tif (print_errors)\n\t\t\t\t{\n\t\t\t\t\tstruct option_list first;\n\t\t\t\t\tfirst.p = pfound;\n\t\t\t\t\tfirst.next = ambig_list;\n\t\t\t\t\tambig_list = &first;\n\t\t\t\t\tfprintf (stderr, \"%s: option '%s' is ambiguous; possibilities:\", argv[0], argv[d->optind]);\n\t\t\t\t\tdo\n\t\t\t\t\t{\n\t\t\t\t\t\tfprintf (stderr, \" '--%s'\", ambig_list->p->name);\n\t\t\t\t\t\tambig_list = ambig_list->next;\n\t\t\t\t\t}\n\t\t\t\t\twhile (ambig_list != NULL);\n\t\t\t\t\tfputc ('\\n', stderr);\n\t\t\t\t}\n\t\t\t\td->__nextchar += strlen(d->__nextchar);\n\t\t\t\td->optind++;\n\t\t\t\td->optopt = 0;\n\t\t\t\treturn '?';\n\t\t\t}\n\t\t\tif (pfound != NULL)\n\t\t\t{\n\t\t\t\toption_index = indfound;\n\t\t\t\td->optind++;\n\t\t\t\tif (*nameend)\n\t\t\t\t{\n\t\t\t\t\tif (pfound->has_arg)\n\t\t\t\t\t\td->optarg = nameend + 1;\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tif (print_errors)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (argv[d->optind - 1][1] == '-')\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfprintf(stderr, \"%s: option '--%s' doesn't allow an argument\\n\",argv[0], pfound->name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfprintf(stderr, \"%s: option '%c%s' doesn't allow an argument\\n\",argv[0], argv[d->optind - 1][0],pfound->name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\td->__nextchar += strlen(d->__nextchar);\n\t\t\t\t\t\td->optopt = pfound->val;\n\t\t\t\t\t\treturn '?';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (pfound->has_arg == 1)\n\t\t\t\t{\n\t\t\t\t\tif (d->optind < argc)\n\t\t\t\t\t\td->optarg = argv[d->optind++];\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tif (print_errors)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfprintf(stderr,\"%s: option '--%s' requires an argument\\n\",argv[0], pfound->name);\n\t\t\t\t\t\t}\n\t\t\t\t\t\td->__nextchar += strlen(d->__nextchar);\n\t\t\t\t\t\td->optopt = pfound->val;\n\t\t\t\t\t\treturn optstring[0] == ':' ? ':' : '?';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\td->__nextchar += strlen(d->__nextchar);\n\t\t\t\tif (longind != NULL)\n\t\t\t\t\t*longind = option_index;\n\t\t\t\tif (pfound->flag)\n\t\t\t\t{\n\t\t\t\t\t*(pfound->flag) = pfound->val;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\treturn pfound->val;\n\t\t\t}\n\t\t\tif (!long_only || argv[d->optind][1] == '-' || strchr(optstring, *d->__nextchar) == NULL)\n\t\t\t{\n\t\t\t\tif (print_errors)\n\t\t\t\t{\n\t\t\t\t\tif (argv[d->optind][1] == '-')\n\t\t\t\t\t{\n\t\t\t\t\t\tfprintf(stderr, \"%s: unrecognized option '--%s'\\n\",argv[0], d->__nextchar);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tfprintf(stderr, \"%s: unrecognized option '%c%s'\\n\",argv[0], argv[d->optind][0], d->__nextchar);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\td->__nextchar = (char *)\"\";\n\t\t\t\td->optind++;\n\t\t\t\td->optopt = 0;\n\t\t\t\treturn '?';\n\t\t\t}\n\t}\n\t{\n\t\tchar c = *d->__nextchar++;\n\t\tchar *temp = (char*)strchr(optstring, c);\n\t\tif (*d->__nextchar == '\\0')\n\t\t\t++d->optind;\n\t\tif (temp == NULL || c == ':' || c == ';')\n\t\t{\n\t\t\tif (print_errors)\n\t\t\t{\n\t\t\t\tfprintf(stderr, \"%s: invalid option -- '%c'\\n\", argv[0], c);\n\t\t\t}\n\t\t\td->optopt = c;\n\t\t\treturn '?';\n\t\t}\n\t\tif (temp[0] == 'W' && temp[1] == ';')\n\t\t{\n\t\t\tchar *nameend;\n\t\t\tconst struct option_a *p;\n\t\t\tconst struct option_a *pfound = NULL;\n\t\t\tint exact = 0;\n\t\t\tint ambig = 0;\n\t\t\tint indfound = 0;\n\t\t\tint option_index;\n\t\t\tif (longopts == NULL)\n\t\t\t\tgoto no_longs;\n\t\t\tif (*d->__nextchar != '\\0')\n\t\t\t{\n\t\t\t\td->optarg = d->__nextchar;\n\t\t\t\td->optind++;\n\t\t\t}\n\t\t\telse if (d->optind == argc)\n\t\t\t{\n\t\t\t\tif (print_errors)\n\t\t\t\t{\n\t\t\t\t\tfprintf(stderr,\"%s: option requires an argument -- '%c'\\n\",argv[0], c);\n\t\t\t\t}\n\t\t\t\td->optopt = c;\n\t\t\t\tif (optstring[0] == ':')\n\t\t\t\t\tc = ':';\n\t\t\t\telse\n\t\t\t\t\tc = '?';\n\t\t\t\treturn c;\n\t\t\t}\n\t\t\telse\n\t\t\t\td->optarg = argv[d->optind++];\n\t\t\tfor (d->__nextchar = nameend = d->optarg; *nameend && *nameend != '='; nameend++);\n\t\t\tfor (p = longopts, option_index = 0; p->name; p++, option_index++)\n\t\t\t\tif (!strncmp(p->name, d->__nextchar, nameend - d->__nextchar))\n\t\t\t\t{\n\t\t\t\t\tif ((unsigned int) (nameend - d->__nextchar) == strlen(p->name))\n\t\t\t\t\t{\n\t\t\t\t\t\tpfound = p;\n\t\t\t\t\t\tindfound = option_index;\n\t\t\t\t\t\texact = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (pfound == NULL)\n\t\t\t\t\t{\n\t\t\t\t\t\tpfound = p;\n\t\t\t\t\t\tindfound = option_index;\n\t\t\t\t\t}\n\t\t\t\t\telse if (long_only || pfound->has_arg != p->has_arg || pfound->flag != p->flag || pfound->val != p->val)\n\t\t\t\t\t\tambig = 1;\n\t\t\t\t}\n\t\t\t\tif (ambig && !exact)\n\t\t\t\t{\n\t\t\t\t\tif (print_errors)\n\t\t\t\t\t{\n\t\t\t\t\t\tfprintf(stderr, \"%s: option '-W %s' is ambiguous\\n\",argv[0], d->optarg);\n\t\t\t\t\t}\n\t\t\t\t\td->__nextchar += strlen(d->__nextchar);\n\t\t\t\t\td->optind++;\n\t\t\t\t\treturn '?';\n\t\t\t\t}\n\t\t\t\tif (pfound != NULL)\n\t\t\t\t{\n\t\t\t\t\toption_index = indfound;\n\t\t\t\t\tif (*nameend)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (pfound->has_arg)\n\t\t\t\t\t\t\td->optarg = nameend + 1;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (print_errors)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfprintf(stderr, \"%s: option '-W %s' doesn't allow an argument\\n\",argv[0], pfound->name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\td->__nextchar += strlen(d->__nextchar);\n\t\t\t\t\t\t\treturn '?';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (pfound->has_arg == 1)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (d->optind < argc)\n\t\t\t\t\t\t\td->optarg = argv[d->optind++];\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (print_errors)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfprintf(stderr, \"%s: option '-W %s' requires an argument\\n\",argv[0], pfound->name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\td->__nextchar += strlen(d->__nextchar);\n\t\t\t\t\t\t\treturn optstring[0] == ':' ? ':' : '?';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\td->optarg = NULL;\n\t\t\t\t\td->__nextchar += strlen(d->__nextchar);\n\t\t\t\t\tif (longind != NULL)\n\t\t\t\t\t\t*longind = option_index;\n\t\t\t\t\tif (pfound->flag)\n\t\t\t\t\t{\n\t\t\t\t\t\t*(pfound->flag) = pfound->val;\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\treturn pfound->val;\n\t\t\t\t}\nno_longs:\n\t\t\t\td->__nextchar = NULL;\n\t\t\t\treturn 'W';\n\t\t}\n\t\tif (temp[1] == ':')\n\t\t{\n\t\t\tif (temp[2] == ':')\n\t\t\t{\n\t\t\t\tif (*d->__nextchar != '\\0')\n\t\t\t\t{\n\t\t\t\t\td->optarg = d->__nextchar;\n\t\t\t\t\td->optind++;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\td->optarg = NULL;\n\t\t\t\td->__nextchar = NULL;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (*d->__nextchar != '\\0')\n\t\t\t\t{\n\t\t\t\t\td->optarg = d->__nextchar;\n\t\t\t\t\td->optind++;\n\t\t\t\t}\n\t\t\t\telse if (d->optind == argc)\n\t\t\t\t{\n\t\t\t\t\tif (print_errors)\n\t\t\t\t\t{\n\t\t\t\t\t\tfprintf(stderr,\"%s: option requires an argument -- '%c'\\n\",argv[0], c);\n\t\t\t\t\t}\n\t\t\t\t\td->optopt = c;\n\t\t\t\t\tif (optstring[0] == ':')\n\t\t\t\t\t\tc = ':';\n\t\t\t\t\telse\n\t\t\t\t\t\tc = '?';\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\td->optarg = argv[d->optind++];\n\t\t\t\td->__nextchar = NULL;\n\t\t\t}\n\t\t}\n\t\treturn c;\n\t}\n}\nint _getopt_internal_a (int argc, char *const *argv, const char *optstring, const struct option_a *longopts, int *longind, int long_only, int posixly_correct)\n{\n\tint result;\n\tgetopt_data_a.optind = optind;\n\tgetopt_data_a.opterr = opterr;\n\tresult = _getopt_internal_r_a (argc, argv, optstring, longopts,longind, long_only, &getopt_data_a,posixly_correct);\n\toptind = getopt_data_a.optind;\n\toptarg_a = getopt_data_a.optarg;\n\toptopt = getopt_data_a.optopt;\n\treturn result;\n}\nint getopt_a (int argc, char *const *argv, const char *optstring) _GETOPT_THROW\n{\n\treturn _getopt_internal_a (argc, argv, optstring, (const struct option_a *) 0, (int *) 0, 0, 0);\n}\nint getopt_long_a (int argc, char *const *argv, const char *options, const struct option_a *long_options, int *opt_index) _GETOPT_THROW\n{\n\treturn _getopt_internal_a (argc, argv, options, long_options, opt_index, 0, 0);\n}\nint getopt_long_only_a (int argc, char *const *argv, const char *options, const struct option_a *long_options, int *opt_index) _GETOPT_THROW\n{\n\treturn _getopt_internal_a (argc, argv, options, long_options, opt_index, 1, 0);\n}\nint _getopt_long_r_a (int argc, char *const *argv, const char *options, const struct option_a *long_options, int *opt_index, struct _getopt_data_a *d)\n{\n\treturn _getopt_internal_r_a (argc, argv, options, long_options, opt_index,0, d, 0);\n}\nint _getopt_long_only_r_a (int argc, char *const *argv, const char *options, const struct option_a *long_options, int *opt_index, struct _getopt_data_a *d)\n{\n\treturn _getopt_internal_r_a (argc, argv, options, long_options, opt_index, 1, d, 0);\n}\n\n//\n//\n//\tUnicode Structures and Functions\n// \n//\n\nstatic struct _getopt_data_w\n{\n\tint optind;\n\tint opterr;\n\tint optopt;\n\twchar_t *optarg;\n\tint __initialized;\n\twchar_t *__nextchar;\n\tenum ENUM_ORDERING __ordering;\n\tint __posixly_correct;\n\tint __first_nonopt;\n\tint __last_nonopt;\n} getopt_data_w;\nwchar_t *optarg_w;\n\nstatic void exchange_w(wchar_t **argv, struct _getopt_data_w *d)\n{\n\tint bottom = d->__first_nonopt;\n\tint middle = d->__last_nonopt;\n\tint top = d->optind;\n\twchar_t *tem;\n\twhile (top > middle && middle > bottom)\n\t{\n\t\tif (top - middle > middle - bottom)\n\t\t{\n\t\t\tint len = middle - bottom;\n\t\t\tregister int i;\n\t\t\tfor (i = 0; i < len; i++)\n\t\t\t{\n\t\t\t\ttem = argv[bottom + i];\n\t\t\t\targv[bottom + i] = argv[top - (middle - bottom) + i];\n\t\t\t\targv[top - (middle - bottom) + i] = tem;\n\t\t\t}\n\t\t\ttop -= len;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tint len = top - middle;\n\t\t\tregister int i;\n\t\t\tfor (i = 0; i < len; i++)\n\t\t\t{\n\t\t\t\ttem = argv[bottom + i];\n\t\t\t\targv[bottom + i] = argv[middle + i];\n\t\t\t\targv[middle + i] = tem;\n\t\t\t}\n\t\t\tbottom += len;\n\t\t}\n\t}\n\td->__first_nonopt += (d->optind - d->__last_nonopt);\n\td->__last_nonopt = d->optind;\n}\nstatic const wchar_t *_getopt_initialize_w (const wchar_t *optstring, struct _getopt_data_w *d, int posixly_correct)\n{\n\td->__first_nonopt = d->__last_nonopt = d->optind;\n\td->__nextchar = NULL;\n\td->__posixly_correct = posixly_correct | !!_wgetenv(L\"POSIXLY_CORRECT\");\n\tif (optstring[0] == L'-')\n\t{\n\t\td->__ordering = RETURN_IN_ORDER;\n\t\t++optstring;\n\t}\n\telse if (optstring[0] == L'+')\n\t{\n\t\td->__ordering = REQUIRE_ORDER;\n\t\t++optstring;\n\t}\n\telse if (d->__posixly_correct)\n\t\td->__ordering = REQUIRE_ORDER;\n\telse\n\t\td->__ordering = PERMUTE;\n\treturn optstring;\n}\nint _getopt_internal_r_w (int argc, wchar_t *const *argv, const wchar_t *optstring, const struct option_w *longopts, int *longind, int long_only, struct _getopt_data_w *d, int posixly_correct)\n{\n\tint print_errors = d->opterr;\n\tif (argc < 1)\n\t\treturn -1;\n\td->optarg = NULL;\n\tif (d->optind == 0 || !d->__initialized)\n\t{\n\t\tif (d->optind == 0)\n\t\t\td->optind = 1;\n\t\toptstring = _getopt_initialize_w (optstring, d, posixly_correct);\n\t\td->__initialized = 1;\n\t}\n\telse if (optstring[0] == L'-' || optstring[0] == L'+')\n\t\toptstring++;\n\tif (optstring[0] == L':')\n\t\tprint_errors = 0;\n\tif (d->__nextchar == NULL || *d->__nextchar == L'\\0')\n\t{\n\t\tif (d->__last_nonopt > d->optind)\n\t\t\td->__last_nonopt = d->optind;\n\t\tif (d->__first_nonopt > d->optind)\n\t\t\td->__first_nonopt = d->optind;\n\t\tif (d->__ordering == PERMUTE)\n\t\t{\n\t\t\tif (d->__first_nonopt != d->__last_nonopt && d->__last_nonopt != d->optind)\n\t\t\t\texchange_w((wchar_t **) argv, d);\n\t\t\telse if (d->__last_nonopt != d->optind)\n\t\t\t\td->__first_nonopt = d->optind;\n\t\t\twhile (d->optind < argc && (argv[d->optind][0] != L'-' || argv[d->optind][1] == L'\\0'))\n\t\t\t\td->optind++;\n\t\t\td->__last_nonopt = d->optind;\n\t\t}\n\t\tif (d->optind != argc && !wcscmp(argv[d->optind], L\"--\"))\n\t\t{\n\t\t\td->optind++;\n\t\t\tif (d->__first_nonopt != d->__last_nonopt && d->__last_nonopt != d->optind)\n\t\t\t\texchange_w((wchar_t **) argv, d);\n\t\t\telse if (d->__first_nonopt == d->__last_nonopt)\n\t\t\t\td->__first_nonopt = d->optind;\n\t\t\td->__last_nonopt = argc;\n\t\t\td->optind = argc;\n\t\t}\n\t\tif (d->optind == argc)\n\t\t{\n\t\t\tif (d->__first_nonopt != d->__last_nonopt)\n\t\t\t\td->optind = d->__first_nonopt;\n\t\t\treturn -1;\n\t\t}\n\t\tif ((argv[d->optind][0] != L'-' || argv[d->optind][1] == L'\\0'))\n\t\t{\n\t\t\tif (d->__ordering == REQUIRE_ORDER)\n\t\t\t\treturn -1;\n\t\t\td->optarg = argv[d->optind++];\n\t\t\treturn 1;\n\t\t}\n\t\td->__nextchar = (argv[d->optind] + 1 + (longopts != NULL && argv[d->optind][1] == L'-'));\n\t}\n\tif (longopts != NULL && (argv[d->optind][1] == L'-' || (long_only && (argv[d->optind][2] || !wcschr(optstring, argv[d->optind][1])))))\n\t{\n\t\twchar_t *nameend;\n\t\tunsigned int namelen;\n\t\tconst struct option_w *p;\n\t\tconst struct option_w *pfound = NULL;\n\t\tstruct option_list\n\t\t{\n\t\t\tconst struct option_w *p;\n\t\t\tstruct option_list *next;\n\t\t} *ambig_list = NULL;\n\t\tint exact = 0;\n\t\tint indfound = -1;\n\t\tint option_index;\n\t\tfor (nameend = d->__nextchar; *nameend && *nameend != L'='; nameend++);\n\t\tnamelen = (unsigned int)(nameend - d->__nextchar);\n\t\tfor (p = longopts, option_index = 0; p->name; p++, option_index++)\n\t\t\tif (!wcsncmp(p->name, d->__nextchar, namelen))\n\t\t\t{\n\t\t\t\tif (namelen == (unsigned int)wcslen(p->name))\n\t\t\t\t{\n\t\t\t\t\tpfound = p;\n\t\t\t\t\tindfound = option_index;\n\t\t\t\t\texact = 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse if (pfound == NULL)\n\t\t\t\t{\n\t\t\t\t\tpfound = p;\n\t\t\t\t\tindfound = option_index;\n\t\t\t\t}\n\t\t\t\telse if (long_only || pfound->has_arg != p->has_arg || pfound->flag != p->flag || pfound->val != p->val)\n\t\t\t\t{\n\t\t\t\t\tstruct option_list *newp = (struct option_list*)alloca(sizeof(*newp));\n\t\t\t\t\tnewp->p = p;\n\t\t\t\t\tnewp->next = ambig_list;\n\t\t\t\t\tambig_list = newp;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (ambig_list != NULL && !exact)\n\t\t\t{\n\t\t\t\tif (print_errors)\n\t\t\t\t{\t\t\t\t\t\t\n\t\t\t\t\tstruct option_list first;\n\t\t\t\t\tfirst.p = pfound;\n\t\t\t\t\tfirst.next = ambig_list;\n\t\t\t\t\tambig_list = &first;\n\t\t\t\t\tfwprintf(stderr, L\"%s: option '%s' is ambiguous; possibilities:\", argv[0], argv[d->optind]);\n\t\t\t\t\tdo\n\t\t\t\t\t{\n\t\t\t\t\t\tfwprintf (stderr, L\" '--%s'\", ambig_list->p->name);\n\t\t\t\t\t\tambig_list = ambig_list->next;\n\t\t\t\t\t}\n\t\t\t\t\twhile (ambig_list != NULL);\n\t\t\t\t\tfputwc (L'\\n', stderr);\n\t\t\t\t}\n\t\t\t\td->__nextchar += wcslen(d->__nextchar);\n\t\t\t\td->optind++;\n\t\t\t\td->optopt = 0;\n\t\t\t\treturn L'?';\n\t\t\t}\n\t\t\tif (pfound != NULL)\n\t\t\t{\n\t\t\t\toption_index = indfound;\n\t\t\t\td->optind++;\n\t\t\t\tif (*nameend)\n\t\t\t\t{\n\t\t\t\t\tif (pfound->has_arg)\n\t\t\t\t\t\td->optarg = nameend + 1;\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tif (print_errors)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (argv[d->optind - 1][1] == L'-')\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfwprintf(stderr, L\"%s: option '--%s' doesn't allow an argument\\n\",argv[0], pfound->name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfwprintf(stderr, L\"%s: option '%c%s' doesn't allow an argument\\n\",argv[0], argv[d->optind - 1][0],pfound->name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\td->__nextchar += wcslen(d->__nextchar);\n\t\t\t\t\t\td->optopt = pfound->val;\n\t\t\t\t\t\treturn L'?';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (pfound->has_arg == 1)\n\t\t\t\t{\n\t\t\t\t\tif (d->optind < argc)\n\t\t\t\t\t\td->optarg = argv[d->optind++];\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tif (print_errors)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfwprintf(stderr,L\"%s: option '--%s' requires an argument\\n\",argv[0], pfound->name);\n\t\t\t\t\t\t}\n\t\t\t\t\t\td->__nextchar += wcslen(d->__nextchar);\n\t\t\t\t\t\td->optopt = pfound->val;\n\t\t\t\t\t\treturn optstring[0] == L':' ? L':' : L'?';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\td->__nextchar += wcslen(d->__nextchar);\n\t\t\t\tif (longind != NULL)\n\t\t\t\t\t*longind = option_index;\n\t\t\t\tif (pfound->flag)\n\t\t\t\t{\n\t\t\t\t\t*(pfound->flag) = pfound->val;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\treturn pfound->val;\n\t\t\t}\n\t\t\tif (!long_only || argv[d->optind][1] == L'-' || wcschr(optstring, *d->__nextchar) == NULL)\n\t\t\t{\n\t\t\t\tif (print_errors)\n\t\t\t\t{\n\t\t\t\t\tif (argv[d->optind][1] == L'-')\n\t\t\t\t\t{\n\t\t\t\t\t\tfwprintf(stderr, L\"%s: unrecognized option '--%s'\\n\",argv[0], d->__nextchar);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tfwprintf(stderr, L\"%s: unrecognized option '%c%s'\\n\",argv[0], argv[d->optind][0], d->__nextchar);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\td->__nextchar = (wchar_t *)L\"\";\n\t\t\t\td->optind++;\n\t\t\t\td->optopt = 0;\n\t\t\t\treturn L'?';\n\t\t\t}\n\t}\n\t{\n\t\twchar_t c = *d->__nextchar++;\n\t\twchar_t *temp = (wchar_t*)wcschr(optstring, c);\n\t\tif (*d->__nextchar == L'\\0')\n\t\t\t++d->optind;\n\t\tif (temp == NULL || c == L':' || c == L';')\n\t\t{\n\t\t\tif (print_errors)\n\t\t\t{\n\t\t\t\tfwprintf(stderr, L\"%s: invalid option -- '%c'\\n\", argv[0], c);\n\t\t\t}\n\t\t\td->optopt = c;\n\t\t\treturn L'?';\n\t\t}\n\t\tif (temp[0] == L'W' && temp[1] == L';')\n\t\t{\n\t\t\twchar_t *nameend;\n\t\t\tconst struct option_w *p;\n\t\t\tconst struct option_w *pfound = NULL;\n\t\t\tint exact = 0;\n\t\t\tint ambig = 0;\n\t\t\tint indfound = 0;\n\t\t\tint option_index;\n\t\t\tif (longopts == NULL)\n\t\t\t\tgoto no_longs;\n\t\t\tif (*d->__nextchar != L'\\0')\n\t\t\t{\n\t\t\t\td->optarg = d->__nextchar;\n\t\t\t\td->optind++;\n\t\t\t}\n\t\t\telse if (d->optind == argc)\n\t\t\t{\n\t\t\t\tif (print_errors)\n\t\t\t\t{\n\t\t\t\t\tfwprintf(stderr,L\"%s: option requires an argument -- '%c'\\n\",argv[0], c);\n\t\t\t\t}\n\t\t\t\td->optopt = c;\n\t\t\t\tif (optstring[0] == L':')\n\t\t\t\t\tc = L':';\n\t\t\t\telse\n\t\t\t\t\tc = L'?';\n\t\t\t\treturn c;\n\t\t\t}\n\t\t\telse\n\t\t\t\td->optarg = argv[d->optind++];\n\t\t\tfor (d->__nextchar = nameend = d->optarg; *nameend && *nameend != L'='; nameend++);\n\t\t\tfor (p = longopts, option_index = 0; p->name; p++, option_index++)\n\t\t\t\tif (!wcsncmp(p->name, d->__nextchar, nameend - d->__nextchar))\n\t\t\t\t{\n\t\t\t\t\tif ((unsigned int) (nameend - d->__nextchar) == wcslen(p->name))\n\t\t\t\t\t{\n\t\t\t\t\t\tpfound = p;\n\t\t\t\t\t\tindfound = option_index;\n\t\t\t\t\t\texact = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (pfound == NULL)\n\t\t\t\t\t{\n\t\t\t\t\t\tpfound = p;\n\t\t\t\t\t\tindfound = option_index;\n\t\t\t\t\t}\n\t\t\t\t\telse if (long_only || pfound->has_arg != p->has_arg || pfound->flag != p->flag || pfound->val != p->val)\n\t\t\t\t\t\tambig = 1;\n\t\t\t\t}\n\t\t\t\tif (ambig && !exact)\n\t\t\t\t{\n\t\t\t\t\tif (print_errors)\n\t\t\t\t\t{\n\t\t\t\t\t\tfwprintf(stderr, L\"%s: option '-W %s' is ambiguous\\n\",argv[0], d->optarg);\n\t\t\t\t\t}\n\t\t\t\t\td->__nextchar += wcslen(d->__nextchar);\n\t\t\t\t\td->optind++;\n\t\t\t\t\treturn L'?';\n\t\t\t\t}\n\t\t\t\tif (pfound != NULL)\n\t\t\t\t{\n\t\t\t\t\toption_index = indfound;\n\t\t\t\t\tif (*nameend)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (pfound->has_arg)\n\t\t\t\t\t\t\td->optarg = nameend + 1;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (print_errors)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfwprintf(stderr, L\"%s: option '-W %s' doesn't allow an argument\\n\",argv[0], pfound->name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\td->__nextchar += wcslen(d->__nextchar);\n\t\t\t\t\t\t\treturn L'?';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (pfound->has_arg == 1)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (d->optind < argc)\n\t\t\t\t\t\t\td->optarg = argv[d->optind++];\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (print_errors)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfwprintf(stderr, L\"%s: option '-W %s' requires an argument\\n\",argv[0], pfound->name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\td->__nextchar += wcslen(d->__nextchar);\n\t\t\t\t\t\t\treturn optstring[0] == L':' ? L':' : L'?';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\td->optarg = NULL;\n\t\t\t\t\td->__nextchar += wcslen(d->__nextchar);\n\t\t\t\t\tif (longind != NULL)\n\t\t\t\t\t\t*longind = option_index;\n\t\t\t\t\tif (pfound->flag)\n\t\t\t\t\t{\n\t\t\t\t\t\t*(pfound->flag) = pfound->val;\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\treturn pfound->val;\n\t\t\t\t}\nno_longs:\n\t\t\t\td->__nextchar = NULL;\n\t\t\t\treturn L'W';\n\t\t}\n\t\tif (temp[1] == L':')\n\t\t{\n\t\t\tif (temp[2] == L':')\n\t\t\t{\n\t\t\t\tif (*d->__nextchar != L'\\0')\n\t\t\t\t{\n\t\t\t\t\td->optarg = d->__nextchar;\n\t\t\t\t\td->optind++;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\td->optarg = NULL;\n\t\t\t\td->__nextchar = NULL;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (*d->__nextchar != L'\\0')\n\t\t\t\t{\n\t\t\t\t\td->optarg = d->__nextchar;\n\t\t\t\t\td->optind++;\n\t\t\t\t}\n\t\t\t\telse if (d->optind == argc)\n\t\t\t\t{\n\t\t\t\t\tif (print_errors)\n\t\t\t\t\t{\n\t\t\t\t\t\tfwprintf(stderr,L\"%s: option requires an argument -- '%c'\\n\",argv[0], c);\n\t\t\t\t\t}\n\t\t\t\t\td->optopt = c;\n\t\t\t\t\tif (optstring[0] == L':')\n\t\t\t\t\t\tc = L':';\n\t\t\t\t\telse\n\t\t\t\t\t\tc = L'?';\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\td->optarg = argv[d->optind++];\n\t\t\t\td->__nextchar = NULL;\n\t\t\t}\n\t\t}\n\t\treturn c;\n\t}\n}\nint _getopt_internal_w (int argc, wchar_t *const *argv, const wchar_t *optstring, const struct option_w *longopts, int *longind, int long_only, int posixly_correct)\n{\n\tint result;\n\tgetopt_data_w.optind = optind;\n\tgetopt_data_w.opterr = opterr;\n\tresult = _getopt_internal_r_w (argc, argv, optstring, longopts,longind, long_only, &getopt_data_w,posixly_correct);\n\toptind = getopt_data_w.optind;\n\toptarg_w = getopt_data_w.optarg;\n\toptopt = getopt_data_w.optopt;\n\treturn result;\n}\nint getopt_w (int argc, wchar_t *const *argv, const wchar_t *optstring) _GETOPT_THROW\n{\n\treturn _getopt_internal_w (argc, argv, optstring, (const struct option_w *) 0, (int *) 0, 0, 0);\n}\nint getopt_long_w (int argc, wchar_t *const *argv, const wchar_t *options, const struct option_w *long_options, int *opt_index) _GETOPT_THROW\n{\n\treturn _getopt_internal_w (argc, argv, options, long_options, opt_index, 0, 0);\n}\nint getopt_long_only_w (int argc, wchar_t *const *argv, const wchar_t *options, const struct option_w *long_options, int *opt_index) _GETOPT_THROW\n{\n\treturn _getopt_internal_w (argc, argv, options, long_options, opt_index, 1, 0);\n}\nint _getopt_long_r_w (int argc, wchar_t *const *argv, const wchar_t *options, const struct option_w *long_options, int *opt_index, struct _getopt_data_w *d)\n{\n\treturn _getopt_internal_r_w (argc, argv, options, long_options, opt_index,0, d, 0);\n}\nint _getopt_long_only_r_w (int argc, wchar_t *const *argv, const wchar_t *options, const struct option_w *long_options, int *opt_index, struct _getopt_data_w *d)\n{\n\treturn _getopt_internal_r_w (argc, argv, options, long_options, opt_index, 1, d, 0);\n}\n#endif\n"
  },
  {
    "path": "widl/getopt_msvc.h",
    "content": "#ifdef _MSC_VER\n/* Getopt for Microsoft C\nThis code is a modification of the Free Software Foundation, Inc.\nGetopt library for parsing command line argument the purpose was\nto provide a Microsoft Visual C friendly derivative. This code\nprovides functionality for both Unicode and Multibyte builds.\n\nDate: 02/03/2011 - Ludvik Jerabek - Initial Release\nVersion: 1.0\nComment: Supports getopt, getopt_long, and getopt_long_only\nand POSIXLY_CORRECT environment flag\nLicense: LGPL\n\nRevisions:\n\n02/03/2011 - Ludvik Jerabek - Initial Release\n02/20/2011 - Ludvik Jerabek - Fixed compiler warnings at Level 4\n07/05/2011 - Ludvik Jerabek - Added no_argument, required_argument, optional_argument defs\n08/03/2011 - Ludvik Jerabek - Fixed non-argument runtime bug which caused runtime exception\n08/09/2011 - Ludvik Jerabek - Added code to export functions for DLL and LIB\n02/15/2012 - Ludvik Jerabek - Fixed _GETOPT_THROW definition missing in implementation file\n08/01/2012 - Ludvik Jerabek - Created separate functions for char and wchar_t characters so single dll can do both unicode and ansi\n10/15/2012 - Ludvik Jerabek - Modified to match latest GNU features\n06/19/2015 - Ludvik Jerabek - Fixed maximum option limitation caused by option_a (255) and option_w (65535) structure val variable\n\n**DISCLAIMER**\nTHIS MATERIAL IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY KIND,\nEITHER EXPRESS OR IMPLIED, INCLUDING, BUT Not LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\nPURPOSE, OR NON-INFRINGEMENT. SOME JURISDICTIONS DO NOT ALLOW THE\nEXCLUSION OF IMPLIED WARRANTIES, SO THE ABOVE EXCLUSION MAY NOT\nAPPLY TO YOU. IN NO EVENT WILL I BE LIABLE TO ANY PARTY FOR ANY\nDIRECT, INDIRECT, SPECIAL OR OTHER CONSEQUENTIAL DAMAGES FOR ANY\nUSE OF THIS MATERIAL INCLUDING, WITHOUT LIMITATION, ANY LOST\nPROFITS, BUSINESS INTERRUPTION, LOSS OF PROGRAMS OR OTHER DATA ON\nYOUR INFORMATION HANDLING SYSTEM OR OTHERWISE, EVEN If WE ARE\nEXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\n*/\n#ifndef __GETOPT_H_\n\t#define __GETOPT_H_\n\n\t#ifdef _GETOPT_API\n\t\t#undef _GETOPT_API\n\t#endif\n\n\t#if defined(EXPORTS_GETOPT) && defined(STATIC_GETOPT)\n\t\t#error \"The preprocessor definitions of EXPORTS_GETOPT and STATIC_GETOPT can only be used individually\"\n\t#elif defined(STATIC_GETOPT)\n\t\t#pragma message(\"Warning static builds of getopt violate the Lesser GNU Public License\")\n\t\t#define _GETOPT_API\n\t#elif defined(EXPORTS_GETOPT)\n\t\t#pragma message(\"Exporting getopt library\")\n\t\t#define _GETOPT_API __declspec(dllexport)\n\t#else\n\t\t#pragma message(\"Importing getopt library\")\n\t\t#define _GETOPT_API __declspec(dllimport)\n\t#endif\n\n\t// Change behavior for C\\C++\n\t#ifdef __cplusplus\n\t\t#define _BEGIN_EXTERN_C extern \"C\" {\n\t\t#define _END_EXTERN_C }\n\t\t#define _GETOPT_THROW throw()\n\t#else\n\t\t#define _BEGIN_EXTERN_C\n\t\t#define _END_EXTERN_C\n\t\t#define _GETOPT_THROW\n\t#endif\n\n\t// Standard GNU options\n\t#define\tnull_argument\t\t0\t/*Argument Null*/\n\t#define\tno_argument\t\t\t0\t/*Argument Switch Only*/\n\t#define required_argument\t1\t/*Argument Required*/\n\t#define optional_argument\t2\t/*Argument Optional*/\t\n\n\t// Shorter Options\n\t#define ARG_NULL\t0\t/*Argument Null*/\n\t#define ARG_NONE\t0\t/*Argument Switch Only*/\n\t#define ARG_REQ\t\t1\t/*Argument Required*/\n\t#define ARG_OPT\t\t2\t/*Argument Optional*/\n\n\t#include <string.h>\n\t#include <wchar.h>\n\n_BEGIN_EXTERN_C\n\n\textern _GETOPT_API int optind;\n\textern _GETOPT_API int opterr;\n\textern _GETOPT_API int optopt;\n\n\t// Ansi\n\tstruct option_a\n\t{\n\t\tconst char* name;\n\t\tint has_arg;\n\t\tint *flag;\n\t\tint val;\n\t};\n\textern _GETOPT_API char *optarg_a;\n\textern _GETOPT_API int getopt_a(int argc, char *const *argv, const char *optstring) _GETOPT_THROW;\n\textern _GETOPT_API int getopt_long_a(int argc, char *const *argv, const char *options, const struct option_a *long_options, int *opt_index) _GETOPT_THROW;\n\textern _GETOPT_API int getopt_long_only_a(int argc, char *const *argv, const char *options, const struct option_a *long_options, int *opt_index) _GETOPT_THROW;\n\n\t// Unicode\n\tstruct option_w\n\t{\n\t\tconst wchar_t* name;\n\t\tint has_arg;\n\t\tint *flag;\n\t\tint val;\n\t};\n\textern _GETOPT_API wchar_t *optarg_w;\n\textern _GETOPT_API int getopt_w(int argc, wchar_t *const *argv, const wchar_t *optstring) _GETOPT_THROW;\n\textern _GETOPT_API int getopt_long_w(int argc, wchar_t *const *argv, const wchar_t *options, const struct option_w *long_options, int *opt_index) _GETOPT_THROW;\n\textern _GETOPT_API int getopt_long_only_w(int argc, wchar_t *const *argv, const wchar_t *options, const struct option_w *long_options, int *opt_index) _GETOPT_THROW;\t\n\t\n_END_EXTERN_C\n\n\t#undef _BEGIN_EXTERN_C\n\t#undef _END_EXTERN_C\n\t#undef _GETOPT_THROW\n\t#undef _GETOPT_API\n\n\t#ifdef _UNICODE\n\t\t#define getopt getopt_w\n\t\t#define getopt_long getopt_long_w\n\t\t#define getopt_long_only getopt_long_only_w\n\t\t#define option option_w\n\t\t#define optarg optarg_w\n\t#else\n\t\t#define getopt getopt_a\n\t\t#define getopt_long getopt_long_a\n\t\t#define getopt_long_only getopt_long_only_a\n\t\t#define option option_a\n\t\t#define optarg optarg_a\n\t#endif\n#endif  // __GETOPT_H_\n#endif\n"
  },
  {
    "path": "widl/hash.c",
    "content": "/*\n * Oleaut32 hash functions\n *\n * Copyright 1999 Corel Corporation\n * Copyright 2001-2003 Jon Griffiths\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#include <stdio.h>\n#include <stdarg.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winnls.h\"\n\n#include \"widltypes.h\"\n#include \"hash.h\"\n\nstatic const unsigned char Lookup_16[128 * 3] = {\n /* Common */\n 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,\n 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,\n 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,\n 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x00, 0x30, 0x31, 0x32, 0x33,\n 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40,\n 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D,\n 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x56, 0x58, 0x55, 0x5A,\n 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,\n 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54,\n 0x55, 0x56, 0x56, 0x58, 0x55, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,\n\n /* Windows */\n 0x7F, 0x7F, 0x82, 0x46, 0x84, 0x85, 0x86, 0x87, 0x7F, 0x89, 0x53, 0x8B, 0x8C,\n 0x7F, 0x7F, 0x7F, 0x7F, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x96, 0x98, 0x99,\n 0x53, 0x9B, 0x8C, 0x7F, 0x7F, 0x55, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,\n 0xA7, 0xA8, 0xA9, 0x41, 0xAB, 0xAC, 0x96, 0xAE, 0xAF, 0xB0, 0xB1, 0x32, 0x33,\n 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0x31, 0x4F, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0x41,\n 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49,\n 0x49, 0x49, 0x44, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0xD7, 0x4F, 0x55, 0x55,\n 0x55, 0x55, 0x55, 0xDE, 0xDF, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43,\n 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0x44, 0x4E, 0x4F, 0x4F, 0x4F,\n 0x4F, 0x4F, 0xF7, 0x4F, 0x55, 0x55, 0x55, 0x55, 0x55, 0xDE, 0x55,\n\n /* Mac */\n 0x41, 0x41, 0x43, 0x45, 0x4E, 0x4F, 0x55, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,\n 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0x4E, 0x4F, 0x4F, 0x4F,\n 0x4F, 0x4F, 0x55, 0x55, 0x55, 0x55, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,\n 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0x41, 0x4F, 0xB0, 0xB1, 0xB2, 0xB3,\n 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0x41, 0x4F, 0xBD, 0x41, 0x4F, 0xC0,\n 0xC1, 0xC2, 0xC3, 0x46, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0x41, 0x41, 0x4F,\n 0xCE, 0xCE, 0xD0, 0xD0, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0x55, 0x55, 0xDA,\n 0xDB, 0xDC, 0xDD, 0x3F, 0x3F, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0x41, 0x45, 0x41,\n 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0x4F, 0x4F, 0x3F, 0x4F, 0x55, 0x55, 0x55,\n 0x49, 0x7F, 0xF7, 0x7F, 0xF9, 0xFA, 0xFB, 0x3F, 0xFD, 0xFE, 0x7F\n};\n\nstatic const unsigned char Lookup_32[128 * 3] = {\n /* Common */\n 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,\n 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,\n 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,\n 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x00, 0x30, 0x31, 0x32, 0x33,\n 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40,\n 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D,\n 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A,\n 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,\n 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54,\n 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,\n\n /* Windows */\n 0x7F, 0x7F, 0x82, 0x7F, 0x84, 0x85, 0x86, 0x87, 0x7F, 0x89, 0x53, 0x8B, 0x53,\n 0x54, 0x5A, 0x5A, 0x7F, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x96, 0x7F, 0x99,\n 0x53, 0x9B, 0x53, 0x54, 0x5A, 0x5A, 0xA0, 0x7F, 0xA2, 0x4C, 0xA4, 0x41, 0xA6,\n 0xA7, 0xA8, 0xA9, 0x53, 0xAB, 0xAC, 0x96, 0xAE, 0x5A, 0xB0, 0xB1, 0xB2, 0x4C,\n 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0x41, 0x53, 0xBB, 0x4C, 0xBD, 0x4C, 0x5A, 0x52,\n 0x41, 0x41, 0x41, 0x41, 0x4C, 0x43, 0x43, 0x43, 0x45, 0x45, 0x45, 0x45, 0x49,\n 0x49, 0x44, 0xD0, 0x4E, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0xD7, 0x52, 0x55, 0x55,\n 0x55, 0x55, 0x59, 0x54, 0xDF, 0x52, 0x41, 0x41, 0x41, 0x41, 0x4C, 0x43, 0x43,\n 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x44, 0xD0, 0x4E, 0x4E, 0x4F, 0x4F,\n 0x4F, 0x4F, 0xF7, 0x52, 0x55, 0x55, 0x55, 0x55, 0x59, 0x54, 0xFF,\n\n /* Mac */\n 0x41, 0x41, 0x41, 0x45, 0x41, 0x4F, 0x55, 0x41, 0x41, 0x43, 0x41, 0x43, 0x43,\n 0x43, 0x45, 0x5A, 0x5A, 0x44, 0x49, 0x44, 0x45, 0x45, 0x45, 0x4F, 0x45, 0x4F,\n 0x4F, 0x4F, 0x55, 0x45, 0x45, 0x55, 0xA0, 0xA1, 0x45, 0xA3, 0xA4, 0xA5, 0xA6,\n 0xA7, 0xA8, 0xA9, 0xAA, 0x45, 0xAC, 0xAD, 0x47, 0x49, 0x49, 0x49, 0xB2, 0xB3,\n 0x49, 0x4B, 0xB6, 0xB7, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4E, 0x4E,\n 0x4E, 0xC2, 0xC3, 0x4E, 0x4E, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0x4E, 0x4F, 0x4F,\n 0x4F, 0x4F, 0xD0, 0xD0, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0x4F, 0x52, 0x52,\n 0x52, 0xDC, 0xDD, 0x52, 0x52, 0x52, 0x53, 0xE2, 0xE3, 0x53, 0x53, 0x53, 0x41,\n 0x54, 0x54, 0x49, 0x5A, 0x5A, 0x55, 0x4F, 0x4F, 0x55, 0x55, 0x55, 0x55, 0x55,\n 0x55, 0x55, 0x55, 0x59, 0x59, 0x4B, 0x5A, 0x4C, 0x4C, 0x47, 0xFF\n};\n\nstatic const unsigned char Lookup_48[128 * 3] = {\n /* Common */\n 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,\n 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,\n 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,\n 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x00, 0x30, 0x31, 0x32, 0x33,\n 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40,\n 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D,\n 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A,\n 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,\n 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54,\n 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,\n\n /* Windows */\n 0x7F, 0x7F, 0x82, 0x46, 0x84, 0x85, 0x86, 0x87, 0x7F, 0x89, 0x53, 0x8B, 0x8C,\n 0x7F, 0x7F, 0x7F, 0x7F, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x96, 0x98, 0x99,\n 0x53, 0x9B, 0x8C, 0x7F, 0x7F, 0x59, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,\n 0xA7, 0xA8, 0xA9, 0x41, 0xAB, 0xAC, 0x96, 0xAE, 0xAF, 0xB0, 0xB1, 0x32, 0x33,\n 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0x31, 0x4F, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0x41,\n 0x41, 0x41, 0x41, 0x41, 0x41, 0xC6, 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49,\n 0x49, 0x49, 0xD0, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0xD7, 0x4F, 0x55, 0x55,\n 0x55, 0x55, 0x59, 0xDE, 0xDF, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0xC6, 0x43,\n 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0xD0, 0x4E, 0x4F, 0x4F, 0x4F,\n 0x4F, 0x4F, 0xF7, 0x4F, 0x55, 0x55, 0x55, 0x55, 0x59, 0xDE, 0x59,\n\n /* Mac */\n 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C,\n 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,\n 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,\n 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAB, 0xAD, 0xAE, 0xAE, 0xB0, 0xB1, 0xB2, 0xB3,\n 0xA7, 0xB5, 0xB6, 0xB7, 0xB8, 0xB8, 0xBA, 0xBA, 0xBC, 0xBC, 0xBE, 0xBE, 0xB7,\n 0xC1, 0xC2, 0xC3, 0x46, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCB, 0xCD,\n 0xCD, 0xC1, 0xD0, 0xD0, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD8, 0xDA,\n 0xDA, 0xDC, 0xDD, 0xDD, 0x9F, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,\n 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94,\n 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F\n};\n\nstatic const unsigned char Lookup_64[128 * 3] = {\n /* Common */\n 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,\n 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,\n 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x00, 0x30, 0x31, 0x32, 0x33,\n 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40,\n 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D,\n 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x56, 0x58, 0x55, 0x5A,\n 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,\n 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54,\n 0x55, 0x56, 0x56, 0x58, 0x55, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,\n\n/* Windows */\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,\n 0xA7, 0xA8, 0xA9, 0x41, 0xAB, 0xAC, 0x96, 0xAE, 0xAF, 0xB0, 0xB1, 0x32, 0x33,\n 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0x31, 0x4F, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0x41,\n 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49,\n 0x49, 0x49, 0x44, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0xD7, 0x4F, 0x55, 0x55,\n 0x55, 0x55, 0x55, 0xDE, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\n /* Mac */\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,\n 0xA7, 0xA8, 0xA9, 0x41, 0xAB, 0xAC, 0x96, 0xAE, 0xAF, 0xB0, 0xB1, 0x32, 0x33,\n 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0x31, 0x4F, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0x41,\n 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49,\n 0x49, 0x49, 0x44, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0xD7, 0x4F, 0x55, 0x55,\n 0x55, 0x55, 0x55, 0xDE, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n};\n\nstatic const unsigned char Lookup_80[128 * 3] = {\n /* Common */\n 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,\n 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,\n 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,\n 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x00, 0x30, 0x31, 0x32, 0x33,\n 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40,\n 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D,\n 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x56, 0x58, 0x55, 0x5A,\n 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,\n 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54,\n 0x55, 0x56, 0x56, 0x58, 0x55, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,\n\n/* Windows */\n 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55,\n\n /* Mac */\n 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55,\n};\n\nstatic const unsigned char Lookup_112[128 * 3] = {\n /* Common */\n 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,\n 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,\n 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,\n 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x00, 0x30, 0x31, 0x32, 0x33,\n 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40,\n 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D,\n 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x56, 0x58, 0x55, 0x5A,\n 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,\n 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54,\n 0x55, 0x56, 0x56, 0x58, 0x55, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,\n\n/* Windows */\n 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55,\n\n /* Mac */\n 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55,\n};\n\nstatic const unsigned char Lookup_128[128 * 3] = {\n /* Common */\n 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,\n 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,\n 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,\n 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33,\n 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40,\n 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D,\n 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A,\n 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,\n 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54,\n 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x00,\n\n/* Windows */\n 0x00, 0x00, 0x82, 0x46, 0x84, 0x85, 0x86, 0x87, 0x00, 0x89, 0x00, 0x8B, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x91, 0x92, 0x93, 0x94, 0x95, 0x2D, 0x2D, 0x00, 0x99,\n 0x00, 0x9B, 0x00, 0x00, 0x00, 0x00, 0x09, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,\n 0xA7, 0xA8, 0xA9, 0x00, 0xAB, 0xAC, 0x2D, 0xAE, 0x2D, 0xB0, 0xB1, 0x32, 0x33,\n 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xBA,\n 0xA2, 0xC2, 0xC3, 0xC4, 0xB8, 0xC6, 0xB9, 0xC8, 0xBA, 0xCA, 0xCB, 0xCC, 0xCD,\n 0xCE, 0xBC, 0xD0, 0xD1, 0x00, 0xD3, 0xD4, 0xBE, 0xD6, 0xD7, 0xD8, 0xBF, 0xBA,\n 0xBE, 0xA2, 0xB8, 0xB9, 0xBA, 0xBE, 0xA2, 0xC2, 0xC3, 0xC4, 0xB8, 0xC6, 0xB9,\n 0xC8, 0xBA, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xBC, 0xD0, 0xD1, 0xD3, 0xD3, 0xD4,\n 0xBE, 0xD6, 0xD7, 0xD8, 0xBF, 0xBA, 0xBE, 0xBC, 0xBE, 0xBF, 0x00,\n\n /* Mac */\n 0x41, 0x31, 0x32, 0x45, 0x33, 0x4F, 0x55, 0x87, 0x41, 0x41, 0x41, 0x00, 0x8C,\n 0x43, 0x45, 0x45, 0x45, 0x45, 0x92, 0x93, 0x49, 0x49, 0x96, 0x97, 0x98, 0x4F,\n 0x4F, 0x9B, 0x3F, 0x55, 0x55, 0x55, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,\n 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3,\n 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xAB, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xB0,\n 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0x09, 0xBD, 0xCC, 0xB0,\n 0xB6, 0xCF, 0x2D, 0x2D, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xB8, 0xAB, 0xC3, 0xBD,\n 0xB6, 0xB8, 0xAB, 0xC3, 0xBF, 0xBD, 0xB0, 0xB5, 0xBE, 0xA2, 0xB6, 0xBC, 0xA1,\n 0xB8, 0xAB, 0xA5, 0xBA, 0xA4, 0xBB, 0xC1, 0xC3, 0xA6, 0xBF, 0xC4, 0xAA, 0xC6,\n 0xA3, 0xBF, 0xAA, 0xCC, 0xBD, 0xB7, 0xAB, 0xBD, 0xAB, 0xBD, 0x3F,\n};\n\nstatic const unsigned char Lookup_144[128 * 3] = {\n /* Common */\n 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,\n 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,\n 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,\n 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33,\n 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40,\n 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D,\n 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A,\n 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,\n 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54,\n 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x00,\n\n/* Windows */\n 0x00, 0x00, 0x82, 0x46, 0x84, 0x85, 0x86, 0x87, 0x00, 0x89, 0x53, 0x8B, 0x8C,\n 0x00, 0x00, 0x00, 0x00, 0x91, 0x92, 0x93, 0x94, 0x95, 0x2D, 0x2D, 0x98, 0x99,\n 0x53, 0x9B, 0x8C, 0x00, 0x00, 0x59, 0x09, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,\n 0xA7, 0xA8, 0xA9, 0x41, 0xAB, 0xAC, 0x2D, 0xAE, 0xAF, 0xB0, 0xB1, 0x32, 0x33,\n 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0x31, 0x4F, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0x41,\n 0xC1, 0x41, 0x41, 0x41, 0x41, 0xC6, 0x43, 0x45, 0xC9, 0x45, 0x45, 0x49, 0xCD,\n 0x49, 0x49, 0xD0, 0x4E, 0x4F, 0xD3, 0x4F, 0x4F, 0xD6, 0xD7, 0xD6, 0x55, 0xDA,\n 0x55, 0x55, 0xDD, 0xDE, 0xDF, 0x41, 0xC1, 0x41, 0x41, 0x41, 0x41, 0xC6, 0x43,\n 0x45, 0xC9, 0x45, 0x45, 0x49, 0xCD, 0x49, 0x49, 0xD0, 0x4E, 0x4F, 0xD3, 0x4F,\n 0x4F, 0xD6, 0xF7, 0xD6, 0x55, 0xDA, 0x55, 0x55, 0xDD, 0xDE, 0x59,\n\n /* Mac */\n 0x00, 0x00, 0x82, 0x46, 0x84, 0x85, 0x86, 0x87, 0x00, 0x89, 0x53, 0x8B, 0x8C,\n 0x00, 0x00, 0x00, 0x00, 0x91, 0x92, 0x93, 0x94, 0x95, 0x2D, 0x2D, 0x98, 0x99,\n 0x53, 0x9B, 0x8C, 0x00, 0x00, 0x59, 0x09, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,\n 0xA7, 0xA8, 0xA9, 0x41, 0xAB, 0xAC, 0x2D, 0xAE, 0xAF, 0xB0, 0xB1, 0x32, 0x33,\n 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0x31, 0x4F, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0x41,\n 0xC1, 0x41, 0x41, 0x41, 0x41, 0xC6, 0x43, 0x45, 0xC9, 0x45, 0x45, 0x49, 0xCD,\n 0x49, 0x49, 0xD0, 0x4E, 0x4F, 0xD3, 0x4F, 0x4F, 0xD6, 0xD7, 0xD6, 0x55, 0xDA,\n 0x55, 0x55, 0xDD, 0xDE, 0xDF, 0x41, 0xC1, 0x41, 0x41, 0x41, 0x41, 0xC6, 0x43,\n 0x45, 0xC9, 0x45, 0x45, 0x49, 0xCD, 0x49, 0x49, 0xD0, 0x4E, 0x4F, 0xD3, 0x4F,\n 0x4F, 0xD6, 0xF7, 0xD6, 0x55, 0xDA, 0x55, 0x55, 0xDD, 0xDE, 0x59,\n};\n\nstatic const unsigned char Lookup_160[128 * 3] = {\n /* Common */\n 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,\n 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,\n 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,\n 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33,\n 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40,\n 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D,\n 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A,\n 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,\n 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54,\n 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x00,\n\n/* Windows */\n 0x00, 0x00, 0x82, 0x46, 0x84, 0x85, 0x86, 0x87, 0x00, 0x89, 0x53, 0x8B, 0x8C,\n 0x00, 0x00, 0x00, 0x00, 0x91, 0x92, 0x93, 0x94, 0x95, 0x2D, 0x2D, 0x98, 0x99,\n 0x53, 0x9B, 0x8C, 0x00, 0x00, 0x59, 0x09, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,\n 0xA7, 0xA8, 0xA9, 0x41, 0xAB, 0xAC, 0x2D, 0xAE, 0xAF, 0xB0, 0xB1, 0x32, 0x33,\n 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0x31, 0x4F, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0x41,\n 0x41, 0x41, 0x41, 0x41, 0x41, 0xC6, 0xC7, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49,\n 0x49, 0x49, 0xD0, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0xD6, 0xD7, 0x4F, 0x55, 0x55,\n 0x55, 0xDC, 0xDD, 0xDE, 0xDF, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0xC6, 0xC7,\n 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0xD0, 0x4E, 0x4F, 0x4F, 0x4F,\n 0x4F, 0xD6, 0xF7, 0x4F, 0x55, 0x55, 0x55, 0xDC, 0xDD, 0xDE, 0x59,\n\n /* Mac */\n 0x00, 0x00, 0x82, 0x46, 0x84, 0x85, 0x86, 0x87, 0x00, 0x89, 0x53, 0x8B, 0x8C,\n 0x00, 0x00, 0x00, 0x00, 0x91, 0x92, 0x93, 0x94, 0x95, 0x2D, 0x2D, 0x98, 0x99,\n 0x53, 0x9B, 0x8C, 0x00, 0x00, 0x59, 0x09, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,\n 0xA7, 0xA8, 0xA9, 0x41, 0xAB, 0xAC, 0x2D, 0xAE, 0xAF, 0xB0, 0xB1, 0x32, 0x33,\n 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0x31, 0x4F, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0x41,\n 0x41, 0x41, 0x41, 0x41, 0x41, 0xC6, 0xC7, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49,\n 0x49, 0x49, 0xD0, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0xD6, 0xD7, 0x4F, 0x55, 0x55,\n 0x55, 0xDC, 0xDD, 0xDE, 0xDF, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0xC6, 0xC7,\n 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0xD0, 0x4E, 0x4F, 0x4F, 0x4F,\n 0x4F, 0xD6, 0xF7, 0x4F, 0x55, 0x55, 0x55, 0xDC, 0xDD, 0xDE, 0x59,\n};\n\nstatic const unsigned char Lookup_176[128 * 3] = {\n /* Common */\n 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,\n 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,\n 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,\n 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33,\n 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40,\n 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D,\n 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A,\n 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,\n 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54,\n 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x00,\n\n /* Windows */\n 0x00, 0x00, 0x82, 0x46, 0x84, 0x85, 0x86, 0x87, 0x00, 0x89, 0x53, 0x8B, 0x8C,\n 0x00, 0x00, 0x00, 0x00, 0x91, 0x92, 0x93, 0x94, 0x95, 0x2D, 0x2D, 0x98, 0x99,\n 0x53, 0x9B, 0x8C, 0x00, 0x00, 0x59, 0x09, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,\n 0xA7, 0xA8, 0xA9, 0x41, 0xAB, 0xAC, 0x2D, 0xAE, 0xAF, 0xB0, 0xB1, 0x32, 0x33,\n 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0x31, 0x4F, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0x41,\n 0x41, 0x41, 0x41, 0xC4, 0xC5, 0xC4, 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49,\n 0x49, 0x49, 0x44, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0xD6, 0xD7, 0xD6, 0x55, 0x55,\n 0x55, 0x59, 0x59, 0xDE, 0xDF, 0x41, 0x41, 0x41, 0x41, 0xC4, 0xC5, 0xC4, 0x43,\n 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0x44, 0x4E, 0x4F, 0x4F, 0x4F,\n 0x4F, 0xD6, 0xF7, 0xD6, 0x55, 0x55, 0x55, 0x59, 0x59, 0xDE, 0x59,\n\n /* Mac */\n 0x80, 0x81, 0x43, 0x45, 0x4E, 0x85, 0x59, 0x41, 0x41, 0x41, 0x80, 0x41, 0x81,\n 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0x4E, 0x4F, 0x4F, 0x4F,\n 0x85, 0x4F, 0x55, 0x55, 0x55, 0x59, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,\n 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0x80, 0x85, 0xB0, 0xB1, 0xB2, 0xB3,\n 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0x41, 0x4F, 0xBD, 0x80, 0x85, 0xC0,\n 0xC1, 0xC2, 0xC3, 0x46, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0x09, 0x41, 0x41, 0x4F,\n 0xCE, 0xCE, 0x2D, 0x2D, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0x59, 0x59, 0xDA,\n 0xDB, 0xDC, 0xDD, 0x3F, 0x3F, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0x41, 0x45, 0x41,\n 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0x4F, 0x4F, 0x3F, 0x4F, 0x55, 0x55, 0x55,\n 0x49, 0x00, 0xF7, 0x00, 0xF9, 0xFA, 0xFB, 0x3F, 0xFD, 0xFE, 0x00\n};\n\nstatic const unsigned char Lookup_208[128 * 3] = {\n /* Common */\n 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,\n 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,\n 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,\n 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33,\n 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40,\n 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D,\n 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A,\n 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,\n 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54,\n 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,\n\n/* Windows */\n 0x80, 0x81, 0x82, 0x46, 0x84, 0x85, 0x86, 0x87, 0x5E, 0x89, 0x8A, 0x8B, 0x8C,\n 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,\n 0x9A, 0x9B, 0x8C, 0x9D, 0x00, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,\n 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0x32, 0x33,\n 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0x31, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0,\n 0xC1, 0xC2, 0xC1, 0xC1, 0xC1, 0xC1, 0xC7, 0xC8, 0xC9, 0xC9, 0xCB, 0xCC, 0xCD,\n 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA,\n 0xDB, 0x00, 0xDD, 0xDE, 0xDF, 0x41, 0xE1, 0x41, 0xE3, 0xE4, 0xE5, 0xE6, 0x43,\n 0x45, 0x45, 0x45, 0x45, 0xEC, 0xEC, 0x49, 0x49, 0xF0, 0xF1, 0xF2, 0xF3, 0x4F,\n 0xF5, 0xF6, 0xF7, 0xF8, 0x55, 0xFA, 0x55, 0x55, 0x00, 0x00, 0xFF,\n\n /* Mac */\n 0x41, 0x81, 0x43, 0x45, 0x4E, 0x4F, 0x55, 0x41, 0x41, 0x41, 0x41, 0x8B, 0x8C,\n 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x93, 0x49, 0x49, 0x4E, 0x4F, 0x98, 0x4F,\n 0x4F, 0x9B, 0x55, 0x55, 0x55, 0x55, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,\n 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3,\n 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0,\n 0xC1, 0xC2, 0xC1, 0xC1, 0xC1, 0xC1, 0xC7, 0xC8, 0xC9, 0xC9, 0xCB, 0xCC, 0xCD,\n 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA,\n 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0x00, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,\n 0xE8, 0xE9, 0xE9, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4,\n 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF,\n};\n\nstatic const unsigned char Lookup_224[128 * 3] = {\n /* Common */\n 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,\n 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,\n 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,\n 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33,\n 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40,\n 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D,\n 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A,\n 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,\n 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54,\n 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,\n\n/* Windows */\n 0x80, 0x81, 0x82, 0x46, 0x84, 0x85, 0x86, 0x87, 0x5E, 0x89, 0x8A, 0x8B, 0x8C,\n 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,\n 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,\n 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0x32, 0x33,\n 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0x31, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0,\n 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD,\n 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA,\n 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,\n 0xE8, 0xE9, 0xEA, 0xEA, 0xEC, 0xED, 0xED, 0xEF, 0xEF, 0xF1, 0xF2, 0xF3, 0xF3,\n 0xF5, 0xF5, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0x00, 0x00, 0xFF,\n\n /* Mac */\n 0x41, 0x41, 0x43, 0x45, 0x4E, 0x4F, 0x55, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,\n 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0x4E, 0x4F, 0x4F, 0x4F,\n 0x4F, 0x4F, 0x55, 0x55, 0x55, 0x55, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,\n 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3,\n 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0,\n 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD,\n 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA,\n 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,\n 0xE8, 0xE9, 0xEA, 0xEA, 0xEC, 0xED, 0xED, 0xEF, 0xEF, 0xF1, 0xF2, 0xF3, 0xF3,\n 0xF5, 0xF5, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF,\n};\n\n/***********************************************************************\n *\t\tlhash_val_of_name_sys\n *\n * Copy of oleaut32.LHashValOfNameSysA\n * Produce a string hash value.\n *\n * PARAMS\n *  skind [I] Type of the system.\n *  lcid  [I] Locale id for the hash.\n *  lpStr [I] String to hash.\n *\n * RETURNS\n *  Success: The hash value of the string.\n *  Failure: 0, if lpStr is NULL.\n *\n * NOTES\n *  This function produces a two part hash: The high word is based on\n *  skind and lcid, while the low word is based on a repeated string\n *  hash of skind/str.\n */\nunsigned int lhash_val_of_name_sys( syskind_t skind, LCID lcid, LPCSTR lpStr)\n{\n  ULONG nOffset, nMask = skind == SYS_MAC ? 1 : 0;\n  ULONG nHiWord, nLoWord = 0x0deadbee;\n  const unsigned char *str = (const unsigned char *)lpStr, *pnLookup = NULL;\n\n  if (!str)\n    return 0;\n\n  switch (PRIMARYLANGID(LANGIDFROMLCID(lcid)))\n  {\n  default:\n    fprintf(stderr, \"Unknown lcid %x, treating as latin-based, please report\\n\", lcid);\n    /* .. Fall Through .. */\n  case LANG_AFRIKAANS:  case LANG_ALBANIAN:   case LANG_ARMENIAN:\n  case LANG_ASSAMESE:   case LANG_AZERI:      case LANG_BASQUE:\n  case LANG_BELARUSIAN: case LANG_BENGALI:    case LANG_BULGARIAN:\n  case LANG_CATALAN:    case LANG_DANISH:     case LANG_DIVEHI:\n  case LANG_DUTCH:      case LANG_ENGLISH:    case LANG_ESTONIAN:\n  case LANG_FAEROESE:   case LANG_FINNISH:    case LANG_FRENCH:\n  case LANG_GALICIAN:   case LANG_GEORGIAN:   case LANG_GERMAN:\n  case LANG_GUJARATI:   case LANG_HINDI:      case LANG_INDONESIAN:\n  case LANG_ITALIAN:    case LANG_KANNADA:    case LANG_KASHMIRI:\n  case LANG_KAZAK:      case LANG_KONKANI:    case LANG_KYRGYZ:\n  case LANG_LATVIAN:    case LANG_LITHUANIAN: case LANG_MACEDONIAN:\n  case LANG_MALAY:      case LANG_MALAYALAM:  case LANG_MANIPURI:\n  case LANG_MARATHI:    case LANG_MONGOLIAN:  case LANG_NEPALI:\n  case LANG_ORIYA:      case LANG_PORTUGUESE: case LANG_PUNJABI:\n  case LANG_ROMANIAN:   case LANG_SANSKRIT:   case LANG_SERBIAN:\n  case LANG_SINDHI:     case LANG_SLOVENIAN:  case LANG_SWAHILI:\n  case LANG_SWEDISH:    case LANG_SYRIAC:     case LANG_TAMIL:\n  case LANG_TATAR:      case LANG_TELUGU:     case LANG_THAI:\n  case LANG_UKRAINIAN:  case LANG_URDU:       case LANG_UZBEK:\n  case LANG_VIETNAMESE: case LANG_MALTESE:    case LANG_IRISH:\n  case LANG_SAMI:       case LANG_UPPER_SORBIAN: case LANG_TSWANA:\n  case LANG_XHOSA:      case LANG_ZULU:       case LANG_WELSH:\n  case LANG_BRETON:     case LANG_SCOTTISH_GAELIC: case LANG_NEUTRAL:\n/* some languages not in all windows versions or ReactOS */\n#ifdef LANG_MANX_GAELIC\n  case LANG_MANX_GAELIC:\n#endif\n#ifdef LANG_TAJIK\n  case LANG_TAJIK:\n#endif\n#ifdef LANG_ROMANSH\n  case LANG_ROMANSH:\n#endif\n#ifdef LANG_SUTU\n  case LANG_SUTU:\n#endif\n#ifdef LANG_TSONGA\n  case LANG_TSONGA:\n#endif\n#ifdef LANG_VENDA\n  case LANG_VENDA:\n#endif\n#ifdef LANG_ESPERANTO\n  case LANG_ESPERANTO:\n#endif\n#ifdef LANG_WALON\n  case LANG_WALON:\n#endif\n#ifdef LANG_CORNISH\n  case LANG_CORNISH:\n#endif\n    nOffset = 16;\n    pnLookup = Lookup_16;\n    break;\n  case LANG_CZECH:  case LANG_HUNGARIAN:  case LANG_POLISH:\n  case LANG_SLOVAK: case LANG_SPANISH:\n    nOffset = 32;\n    pnLookup = Lookup_32;\n    break;\n  case LANG_HEBREW:\n    nOffset = 48;\n    pnLookup = Lookup_48;\n    break;\n  case LANG_JAPANESE:\n    nOffset = 64;\n    pnLookup = Lookup_64;\n    break;\n  case LANG_KOREAN:\n    nOffset = 80;\n    pnLookup = Lookup_80;\n    break;\n  case LANG_CHINESE:\n    nOffset = 112;\n    pnLookup = Lookup_112;\n    break;\n  case LANG_GREEK:\n    nOffset = 128;\n    pnLookup = Lookup_128;\n    break;\n  case LANG_ICELANDIC:\n    nOffset = 144;\n    pnLookup = Lookup_144;\n    break;\n  case LANG_TURKISH:\n    nOffset = 160;\n    pnLookup = Lookup_160;\n    break;\n  case LANG_NORWEGIAN:\n    if (SUBLANGID(LANGIDFROMLCID(lcid)) == SUBLANG_NORWEGIAN_NYNORSK)\n    {\n      nOffset = 176;\n      pnLookup = Lookup_176;\n    }\n    else\n    {\n      nOffset = 16;\n      pnLookup = Lookup_16;\n    }\n    break;\n  case LANG_ARABIC:\n  case LANG_FARSI:\n    nOffset = 208;\n    pnLookup = Lookup_208;\n    break;\n  case LANG_RUSSIAN:\n    nOffset = 224;\n    pnLookup = Lookup_224;\n    break;\n  }\n\n  nHiWord = (nOffset | nMask) << 16;\n\n  while (*str)\n  {\n    nLoWord = 37 * nLoWord + pnLookup[*str > 0x7f && nMask ? *str + 0x80 : *str];\n    str++;\n  }\n  /* Constrain to a prime modulo and sizeof(WORD) */\n  nLoWord = (nLoWord % 65599) & 0xffff;\n\n  return nHiWord | nLoWord;\n}\n"
  },
  {
    "path": "widl/hash.h",
    "content": "/*\n * Hash definitions\n *\n * Copyright 2005 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n */\n\n#ifndef __WIDL_HASH_H\n#define __WIDL_HASH_H\n\nextern unsigned int lhash_val_of_name_sys( syskind_t skind, LCID lcid, LPCSTR lpStr);\n\n#endif\n"
  },
  {
    "path": "widl/header.c",
    "content": "/*\n * IDL Compiler\n *\n * Copyright 2002 Ove Kaaven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <stdarg.h>\n#include <stdio.h>\n#include <stdlib.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#include <string.h>\n#include <ctype.h>\n\n#include \"widl.h\"\n#include \"utils.h\"\n#include \"parser.h\"\n#include \"header.h\"\n#include \"expr.h\"\n#include \"typetree.h\"\n#include \"typelib.h\"\n\nstatic int indentation = 0;\nstatic int is_object_interface = 0;\nuser_type_list_t user_type_list = LIST_INIT(user_type_list);\ncontext_handle_list_t context_handle_list = LIST_INIT(context_handle_list);\ngeneric_handle_list_t generic_handle_list = LIST_INIT(generic_handle_list);\n\nstatic void write_type_def_or_decl(FILE *f, type_t *t, int field, const char *name);\n\nstatic void indent(FILE *h, int delta)\n{\n  int c;\n  if (delta < 0) indentation += delta;\n  for (c=0; c<indentation; c++) fprintf(h, \"    \");\n  if (delta > 0) indentation += delta;\n}\n\nstatic void write_line(FILE *f, int delta, const char *fmt, ...)\n{\n    va_list ap;\n    indent(f, delta);\n    va_start(ap, fmt);\n    vfprintf(f, fmt, ap);\n    va_end(ap);\n    fprintf(f, \"\\n\");\n}\n\nint is_ptrchain_attr(const var_t *var, enum attr_type t)\n{\n    if (is_attr(var->attrs, t))\n        return 1;\n    else\n    {\n        type_t *type = var->type;\n        for (;;)\n        {\n            if (is_attr(type->attrs, t))\n                return 1;\n            else if (type_is_alias(type))\n                type = type_alias_get_aliasee(type);\n            else if (is_ptr(type))\n                type = type_pointer_get_ref(type);\n            else return 0;\n        }\n    }\n}\n\nint is_aliaschain_attr(const type_t *type, enum attr_type attr)\n{\n    const type_t *t = type;\n    for (;;)\n    {\n        if (is_attr(t->attrs, attr))\n            return 1;\n        else if (type_is_alias(t))\n            t = type_alias_get_aliasee(t);\n        else return 0;\n    }\n}\n\nint is_attr(const attr_list_t *list, enum attr_type t)\n{\n    const attr_t *attr;\n    if (list) LIST_FOR_EACH_ENTRY( attr, list, const attr_t, entry )\n        if (attr->type == t) return 1;\n    return 0;\n}\n\nvoid *get_attrp(const attr_list_t *list, enum attr_type t)\n{\n    const attr_t *attr;\n    if (list) LIST_FOR_EACH_ENTRY( attr, list, const attr_t, entry )\n        if (attr->type == t) return attr->u.pval;\n    return NULL;\n}\n\nunsigned int get_attrv(const attr_list_t *list, enum attr_type t)\n{\n    const attr_t *attr;\n    if (list) LIST_FOR_EACH_ENTRY( attr, list, const attr_t, entry )\n        if (attr->type == t) return attr->u.ival;\n    return 0;\n}\n\nstatic void write_guid(FILE *f, const char *guid_prefix, const char *name, const UUID *uuid)\n{\n  if (!uuid) return;\n  fprintf(f, \"DEFINE_GUID(%s_%s, 0x%08x, 0x%04x, 0x%04x, 0x%02x,0x%02x, 0x%02x,\"\n        \"0x%02x,0x%02x,0x%02x,0x%02x,0x%02x);\\n\",\n        guid_prefix, name, uuid->Data1, uuid->Data2, uuid->Data3, uuid->Data4[0],\n        uuid->Data4[1], uuid->Data4[2], uuid->Data4[3], uuid->Data4[4], uuid->Data4[5],\n        uuid->Data4[6], uuid->Data4[7]);\n}\n\nstatic void write_uuid_decl(FILE *f, type_t *type, const UUID *uuid)\n{\n  char *name = format_namespace(type->namespace, \"\", \"::\", type->name);\n  fprintf(f, \"#ifdef __CRT_UUID_DECL\\n\");\n  fprintf(f, \"__CRT_UUID_DECL(%s, 0x%08x, 0x%04x, 0x%04x, 0x%02x,0x%02x, 0x%02x,\"\n        \"0x%02x,0x%02x,0x%02x,0x%02x,0x%02x)\\n\",\n        name, uuid->Data1, uuid->Data2, uuid->Data3, uuid->Data4[0], uuid->Data4[1],\n        uuid->Data4[2], uuid->Data4[3], uuid->Data4[4], uuid->Data4[5], uuid->Data4[6],\n        uuid->Data4[7]);\n  fprintf(f, \"#endif\\n\");\n  free(name);\n}\n\nstatic const char *uuid_string(const UUID *uuid)\n{\n  static char buf[37];\n\n  sprintf(buf, \"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x\",\n        uuid->Data1, uuid->Data2, uuid->Data3, uuid->Data4[0], uuid->Data4[1], uuid->Data4[2],\n        uuid->Data4[3], uuid->Data4[4], uuid->Data4[5], uuid->Data4[6], uuid->Data4[7]);\n\n  return buf;\n}\n\nstatic void write_namespace_start(FILE *header, struct namespace *namespace)\n{\n    if(is_global_namespace(namespace)) {\n        if(use_abi_namespace)\n            write_line(header, 1, \"namespace ABI {\");\n        return;\n    }\n\n    write_namespace_start(header, namespace->parent);\n    write_line(header, 1, \"namespace %s {\", namespace->name);\n}\n\nstatic void write_namespace_end(FILE *header, struct namespace *namespace)\n{\n    if(is_global_namespace(namespace)) {\n        if(use_abi_namespace)\n            write_line(header, -1, \"}\", namespace->name);\n        return;\n    }\n\n    write_line(header, -1, \"}\", namespace->name);\n    write_namespace_end(header, namespace->parent);\n}\n\nconst char *get_name(const var_t *v)\n{\n    static char buffer[256];\n\n    if (is_attr( v->attrs, ATTR_PROPGET ))\n        strcpy( buffer, \"get_\" );\n    else if (is_attr( v->attrs, ATTR_PROPPUT ))\n        strcpy( buffer, \"put_\" );\n    else if (is_attr( v->attrs, ATTR_PROPPUTREF ))\n        strcpy( buffer, \"putref_\" );\n    else\n        buffer[0] = 0;\n    strcat( buffer, v->name );\n    return buffer;\n}\n\nstatic void write_fields(FILE *h, var_list_t *fields)\n{\n    unsigned nameless_struct_cnt = 0, nameless_struct_i = 0, nameless_union_cnt = 0, nameless_union_i = 0;\n    const char *name;\n    char buf[32];\n    var_t *v;\n\n    if (!fields) return;\n\n    LIST_FOR_EACH_ENTRY( v, fields, var_t, entry ) {\n        if (!v || !v->type) continue;\n\n        switch(type_get_type_detect_alias(v->type)) {\n        case TYPE_STRUCT:\n        case TYPE_ENCAPSULATED_UNION:\n            nameless_struct_cnt++;\n            break;\n        case TYPE_UNION:\n            nameless_union_cnt++;\n            break;\n        default:\n            ;\n        }\n    }\n\n    LIST_FOR_EACH_ENTRY( v, fields, var_t, entry ) {\n        if (!v || !v->type) continue;\n\n        indent(h, 0);\n        name = v->name;\n\n        switch(type_get_type_detect_alias(v->type)) {\n        case TYPE_STRUCT:\n        case TYPE_ENCAPSULATED_UNION:\n            if(!v->name) {\n                fprintf(h, \"__C89_NAMELESS \");\n                if(nameless_struct_cnt == 1) {\n                    name = \"__C89_NAMELESSSTRUCTNAME\";\n                }else if(nameless_struct_i < 5 /* # of supporting macros */) {\n                    sprintf(buf, \"__C89_NAMELESSSTRUCTNAME%d\", ++nameless_struct_i);\n                    name = buf;\n                }\n            }\n            break;\n        case TYPE_UNION:\n            if(!v->name) {\n                fprintf(h, \"__C89_NAMELESS \");\n                if(nameless_union_cnt == 1) {\n                    name = \"__C89_NAMELESSUNIONNAME\";\n                }else if(nameless_union_i < 8 /* # of supporting macros */ ) {\n                    sprintf(buf, \"__C89_NAMELESSUNIONNAME%d\", ++nameless_union_i);\n                    name = buf;\n                }\n            }\n            break;\n        default:\n            ;\n        }\n        write_type_def_or_decl(h, v->type, TRUE, name);\n        fprintf(h, \";\\n\");\n    }\n}\n\nstatic void write_enums(FILE *h, var_list_t *enums, const char *enum_name)\n{\n  var_t *v;\n  if (!enums) return;\n  LIST_FOR_EACH_ENTRY( v, enums, var_t, entry )\n  {\n    if (v->name) {\n      indent(h, 0);\n      if(!enum_name)\n          fprintf(h, \"%s\", get_name(v));\n      else\n          fprintf(h, \"%s_%s\", enum_name, get_name(v));\n      if (v->eval) {\n        fprintf(h, \" = \");\n        write_expr(h, v->eval, 0, 1, NULL, NULL, \"\");\n      }\n    }\n    if (list_next( enums, &v->entry )) fprintf(h, \",\\n\");\n  }\n  fprintf(h, \"\\n\");\n}\n\nint needs_space_after(type_t *t)\n{\n  return (type_is_alias(t) ||\n          (!is_ptr(t) && (!is_array(t) || !type_array_is_decl_as_ptr(t) || t->name)));\n}\n\nvoid write_type_left(FILE *h, type_t *t, enum name_type name_type, int declonly)\n{\n  const char *name;\n\n  if (!h) return;\n\n  name = type_get_name(t, name_type);\n\n  if (is_attr(t->attrs, ATTR_CONST) &&\n      (type_is_alias(t) || !is_ptr(t)))\n    fprintf(h, \"const \");\n\n  if (type_is_alias(t)) fprintf(h, \"%s\", t->name);\n  else {\n    switch (type_get_type_detect_alias(t)) {\n      case TYPE_ENUM:\n        if (!declonly && t->defined && !t->written) {\n          if (name) fprintf(h, \"enum %s {\\n\", name);\n          else fprintf(h, \"enum {\\n\");\n          t->written = TRUE;\n          indentation++;\n          write_enums(h, type_enum_get_values(t), is_global_namespace(t->namespace) ? NULL : t->name);\n          indent(h, -1);\n          fprintf(h, \"}\");\n        }\n        else fprintf(h, \"enum %s\", name ? name : \"\");\n        break;\n      case TYPE_STRUCT:\n      case TYPE_ENCAPSULATED_UNION:\n        if (!declonly && t->defined && !t->written) {\n          if (name) fprintf(h, \"struct %s {\\n\", name);\n          else fprintf(h, \"struct {\\n\");\n          t->written = TRUE;\n          indentation++;\n          if (type_get_type(t) != TYPE_STRUCT)\n            write_fields(h, type_encapsulated_union_get_fields(t));\n          else\n            write_fields(h, type_struct_get_fields(t));\n          indent(h, -1);\n          fprintf(h, \"}\");\n        }\n        else fprintf(h, \"struct %s\", name ? name : \"\");\n        break;\n      case TYPE_UNION:\n        if (!declonly && t->defined && !t->written) {\n          if (t->name) fprintf(h, \"union %s {\\n\", t->name);\n          else fprintf(h, \"union {\\n\");\n          t->written = TRUE;\n          indentation++;\n          write_fields(h, type_union_get_cases(t));\n          indent(h, -1);\n          fprintf(h, \"}\");\n        }\n        else fprintf(h, \"union %s\", t->name ? t->name : \"\");\n        break;\n      case TYPE_POINTER:\n        write_type_left(h, type_pointer_get_ref(t), name_type, declonly);\n        fprintf(h, \"%s*\", needs_space_after(type_pointer_get_ref(t)) ? \" \" : \"\");\n        if (is_attr(t->attrs, ATTR_CONST)) fprintf(h, \"const \");\n        break;\n      case TYPE_ARRAY:\n        if (t->name && type_array_is_decl_as_ptr(t))\n          fprintf(h, \"%s\", t->name);\n        else\n        {\n          write_type_left(h, type_array_get_element(t), name_type, declonly);\n          if (type_array_is_decl_as_ptr(t))\n            fprintf(h, \"%s*\", needs_space_after(type_array_get_element(t)) ? \" \" : \"\");\n        }\n        break;\n      case TYPE_BASIC:\n        if (type_basic_get_type(t) != TYPE_BASIC_INT32 &&\n            type_basic_get_type(t) != TYPE_BASIC_INT64 &&\n            type_basic_get_type(t) != TYPE_BASIC_HYPER)\n        {\n          if (type_basic_get_sign(t) < 0) fprintf(h, \"signed \");\n          else if (type_basic_get_sign(t) > 0) fprintf(h, \"unsigned \");\n        }\n        switch (type_basic_get_type(t))\n        {\n        case TYPE_BASIC_INT8: fprintf(h, \"small\"); break;\n        case TYPE_BASIC_INT16: fprintf(h, \"short\"); break;\n        case TYPE_BASIC_INT: fprintf(h, \"int\"); break;\n        case TYPE_BASIC_INT3264: fprintf(h, \"__int3264\"); break;\n        case TYPE_BASIC_BYTE: fprintf(h, \"byte\"); break;\n        case TYPE_BASIC_CHAR: fprintf(h, \"char\"); break;\n        case TYPE_BASIC_WCHAR: fprintf(h, \"wchar_t\"); break;\n        case TYPE_BASIC_FLOAT: fprintf(h, \"float\"); break;\n        case TYPE_BASIC_DOUBLE: fprintf(h, \"double\"); break;\n        case TYPE_BASIC_ERROR_STATUS_T: fprintf(h, \"error_status_t\"); break;\n        case TYPE_BASIC_HANDLE: fprintf(h, \"handle_t\"); break;\n        case TYPE_BASIC_INT32:\n          if (type_basic_get_sign(t) > 0)\n            fprintf(h, \"ULONG\");\n          else\n            fprintf(h, \"LONG\");\n          break;\n        case TYPE_BASIC_INT64:\n          if (type_basic_get_sign(t) > 0)\n            fprintf(h, \"UINT64\");\n          else\n            fprintf(h, \"INT64\");\n          break;\n        case TYPE_BASIC_HYPER:\n          if (type_basic_get_sign(t) > 0)\n            fprintf(h, \"MIDL_uhyper\");\n          else\n            fprintf(h, \"hyper\");\n          break;\n        }\n        break;\n      case TYPE_INTERFACE:\n      case TYPE_MODULE:\n      case TYPE_COCLASS:\n        fprintf(h, \"%s\", t->name);\n        break;\n      case TYPE_VOID:\n        fprintf(h, \"void\");\n        break;\n      case TYPE_BITFIELD:\n        write_type_left(h, type_bitfield_get_field(t), name_type, declonly);\n        break;\n      case TYPE_ALIAS:\n      case TYPE_FUNCTION:\n        /* handled elsewhere */\n        assert(0);\n        break;\n    }\n  }\n}\n\nvoid write_type_right(FILE *h, type_t *t, int is_field)\n{\n  if (!h) return;\n\n  switch (type_get_type(t))\n  {\n  case TYPE_ARRAY:\n    if (!type_array_is_decl_as_ptr(t))\n    {\n      if (is_conformant_array(t))\n      {\n        fprintf(h, \"[%s]\", is_field ? \"1\" : \"\");\n        t = type_array_get_element(t);\n      }\n      for ( ;\n           type_get_type(t) == TYPE_ARRAY && !type_array_is_decl_as_ptr(t);\n           t = type_array_get_element(t))\n        fprintf(h, \"[%u]\", type_array_get_dim(t));\n    }\n    break;\n  case TYPE_BITFIELD:\n    fprintf(h, \" : %u\", type_bitfield_get_bits(t)->cval);\n    break;\n  case TYPE_VOID:\n  case TYPE_BASIC:\n  case TYPE_ENUM:\n  case TYPE_STRUCT:\n  case TYPE_ENCAPSULATED_UNION:\n  case TYPE_UNION:\n  case TYPE_ALIAS:\n  case TYPE_MODULE:\n  case TYPE_COCLASS:\n  case TYPE_FUNCTION:\n  case TYPE_INTERFACE:\n  case TYPE_POINTER:\n    break;\n  }\n}\n\nstatic void write_type_v(FILE *h, type_t *t, int is_field, int declonly, const char *name)\n{\n  type_t *pt = NULL;\n  int ptr_level = 0;\n\n  if (!h) return;\n\n  if (t) {\n    for (pt = t; is_ptr(pt); pt = type_pointer_get_ref(pt), ptr_level++)\n      ;\n\n    if (type_get_type_detect_alias(pt) == TYPE_FUNCTION) {\n      int i;\n      const char *callconv = get_attrp(pt->attrs, ATTR_CALLCONV);\n      if (!callconv && is_object_interface) callconv = \"STDMETHODCALLTYPE\";\n      if (is_attr(pt->attrs, ATTR_INLINE)) fprintf(h, \"inline \");\n      write_type_left(h, type_function_get_rettype(pt), NAME_DEFAULT, declonly);\n      fputc(' ', h);\n      if (ptr_level) fputc('(', h);\n      if (callconv) fprintf(h, \"%s \", callconv);\n      for (i = 0; i < ptr_level; i++)\n        fputc('*', h);\n    } else\n      write_type_left(h, t, NAME_DEFAULT, declonly);\n  }\n\n  if (name) fprintf(h, \"%s%s\", !t || needs_space_after(t) ? \" \" : \"\", name );\n\n  if (t) {\n    if (type_get_type_detect_alias(pt) == TYPE_FUNCTION) {\n      const var_list_t *args = type_function_get_args(pt);\n\n      if (ptr_level) fputc(')', h);\n      fputc('(', h);\n      if (args)\n          write_args(h, args, NULL, 0, FALSE);\n      else\n          fprintf(h, \"void\");\n      fputc(')', h);\n    } else\n      write_type_right(h, t, is_field);\n  }\n}\n\nstatic void write_type_def_or_decl(FILE *f, type_t *t, int field, const char *name)\n{\n  write_type_v(f, t, field, FALSE, name);\n}\n\nstatic void write_type_definition(FILE *f, type_t *t)\n{\n    int in_namespace = t->namespace && !is_global_namespace(t->namespace);\n    int save_written = t->written;\n\n    if(in_namespace) {\n        fprintf(f, \"#ifdef __cplusplus\\n\");\n        fprintf(f, \"} /* extern \\\"C\\\" */\\n\");\n        write_namespace_start(f, t->namespace);\n    }\n    indent(f, 0);\n    write_type_left(f, t, NAME_DEFAULT, FALSE);\n    fprintf(f, \";\\n\");\n    if(in_namespace) {\n        t->written = save_written;\n        write_namespace_end(f, t->namespace);\n        fprintf(f, \"extern \\\"C\\\" {\\n\");\n        fprintf(f, \"#else\\n\");\n        write_type_left(f, t, NAME_C, FALSE);\n        fprintf(f, \";\\n\");\n        fprintf(f, \"#endif\\n\\n\");\n    }\n}\n\nvoid write_type_decl(FILE *f, type_t *t, const char *name)\n{\n  write_type_v(f, t, FALSE, TRUE, name);\n}\n\nvoid write_type_decl_left(FILE *f, type_t *t)\n{\n  write_type_left(f, t, NAME_DEFAULT, TRUE);\n}\n\nstatic int user_type_registered(const char *name)\n{\n  user_type_t *ut;\n  LIST_FOR_EACH_ENTRY(ut, &user_type_list, user_type_t, entry)\n    if (!strcmp(name, ut->name))\n      return 1;\n  return 0;\n}\n\nstatic int context_handle_registered(const char *name)\n{\n  context_handle_t *ch;\n  LIST_FOR_EACH_ENTRY(ch, &context_handle_list, context_handle_t, entry)\n    if (!strcmp(name, ch->name))\n      return 1;\n  return 0;\n}\n\nstatic int generic_handle_registered(const char *name)\n{\n  generic_handle_t *gh;\n  LIST_FOR_EACH_ENTRY(gh, &generic_handle_list, generic_handle_t, entry)\n    if (!strcmp(name, gh->name))\n      return 1;\n  return 0;\n}\n\nunsigned int get_context_handle_offset( const type_t *type )\n{\n    context_handle_t *ch;\n    unsigned int index = 0;\n\n    while (!is_attr( type->attrs, ATTR_CONTEXTHANDLE ))\n    {\n        if (type_is_alias( type )) type = type_alias_get_aliasee( type );\n        else if (is_ptr( type )) type = type_pointer_get_ref( type );\n        else error( \"internal error: %s is not a context handle\\n\", type->name );\n    }\n    LIST_FOR_EACH_ENTRY( ch, &context_handle_list, context_handle_t, entry )\n    {\n        if (!strcmp( type->name, ch->name )) return index;\n        index++;\n    }\n    error( \"internal error: %s is not registered as a context handle\\n\", type->name );\n    return index;\n}\n\nunsigned int get_generic_handle_offset( const type_t *type )\n{\n    generic_handle_t *gh;\n    unsigned int index = 0;\n\n    while (!is_attr( type->attrs, ATTR_HANDLE ))\n    {\n        if (type_is_alias( type )) type = type_alias_get_aliasee( type );\n        else if (is_ptr( type )) type = type_pointer_get_ref( type );\n        else error( \"internal error: %s is not a generic handle\\n\", type->name );\n    }\n    LIST_FOR_EACH_ENTRY( gh, &generic_handle_list, generic_handle_t, entry )\n    {\n        if (!strcmp( type->name, gh->name )) return index;\n        index++;\n    }\n    error( \"internal error: %s is not registered as a generic handle\\n\", type->name );\n    return index;\n}\n\n/* check for types which require additional prototypes to be generated in the\n * header */\nvoid check_for_additional_prototype_types(const var_list_t *list)\n{\n  const var_t *v;\n\n  if (!list) return;\n  LIST_FOR_EACH_ENTRY( v, list, const var_t, entry )\n  {\n    type_t *type = v->type;\n    if (!type) continue;\n    for (;;) {\n      const char *name = type->name;\n      if (type->user_types_registered) break;\n      type->user_types_registered = 1;\n      if (is_attr(type->attrs, ATTR_CONTEXTHANDLE)) {\n        if (!context_handle_registered(name))\n        {\n          context_handle_t *ch = xmalloc(sizeof(*ch));\n          ch->name = xstrdup(name);\n          list_add_tail(&context_handle_list, &ch->entry);\n        }\n        /* don't carry on parsing fields within this type */\n        break;\n      }\n      if ((type_get_type(type) != TYPE_BASIC ||\n           type_basic_get_type(type) != TYPE_BASIC_HANDLE) &&\n          is_attr(type->attrs, ATTR_HANDLE)) {\n        if (!generic_handle_registered(name))\n        {\n          generic_handle_t *gh = xmalloc(sizeof(*gh));\n          gh->name = xstrdup(name);\n          list_add_tail(&generic_handle_list, &gh->entry);\n        }\n        /* don't carry on parsing fields within this type */\n        break;\n      }\n      if (is_attr(type->attrs, ATTR_WIREMARSHAL)) {\n        if (!user_type_registered(name))\n        {\n          user_type_t *ut = xmalloc(sizeof *ut);\n          ut->name = xstrdup(name);\n          list_add_tail(&user_type_list, &ut->entry);\n        }\n        /* don't carry on parsing fields within this type as we are already\n         * using a wire marshaled type */\n        break;\n      }\n      else if (type_is_complete(type))\n      {\n        var_list_t *vars;\n        switch (type_get_type_detect_alias(type))\n        {\n        case TYPE_ENUM:\n          vars = type_enum_get_values(type);\n          break;\n        case TYPE_STRUCT:\n          vars = type_struct_get_fields(type);\n          break;\n        case TYPE_UNION:\n          vars = type_union_get_cases(type);\n          break;\n        default:\n          vars = NULL;\n          break;\n        }\n        check_for_additional_prototype_types(vars);\n      }\n\n      if (type_is_alias(type))\n        type = type_alias_get_aliasee(type);\n      else if (is_ptr(type))\n        type = type_pointer_get_ref(type);\n      else if (is_array(type))\n        type = type_array_get_element(type);\n      else\n        break;\n    }\n  }\n}\n\nstatic void write_user_types(FILE *header)\n{\n  user_type_t *ut;\n  LIST_FOR_EACH_ENTRY(ut, &user_type_list, user_type_t, entry)\n  {\n    const char *name = ut->name;\n    fprintf(header, \"ULONG           __RPC_USER %s_UserSize     (ULONG *, ULONG, %s *);\\n\", name, name);\n    fprintf(header, \"unsigned char * __RPC_USER %s_UserMarshal  (ULONG *, unsigned char *, %s *);\\n\", name, name);\n    fprintf(header, \"unsigned char * __RPC_USER %s_UserUnmarshal(ULONG *, unsigned char *, %s *);\\n\", name, name);\n    fprintf(header, \"void            __RPC_USER %s_UserFree     (ULONG *, %s *);\\n\", name, name);\n  }\n}\n\nstatic void write_context_handle_rundowns(FILE *header)\n{\n  context_handle_t *ch;\n  LIST_FOR_EACH_ENTRY(ch, &context_handle_list, context_handle_t, entry)\n  {\n    const char *name = ch->name;\n    fprintf(header, \"void __RPC_USER %s_rundown(%s);\\n\", name, name);\n  }\n}\n\nstatic void write_generic_handle_routines(FILE *header)\n{\n  generic_handle_t *gh;\n  LIST_FOR_EACH_ENTRY(gh, &generic_handle_list, generic_handle_t, entry)\n  {\n    const char *name = gh->name;\n    fprintf(header, \"handle_t __RPC_USER %s_bind(%s);\\n\", name, name);\n    fprintf(header, \"void __RPC_USER %s_unbind(%s, handle_t);\\n\", name, name);\n  }\n}\n\nstatic void write_typedef(FILE *header, type_t *type)\n{\n  fprintf(header, \"typedef \");\n  write_type_def_or_decl(header, type_alias_get_aliasee(type), FALSE, type->name);\n  fprintf(header, \";\\n\");\n}\n\nint is_const_decl(const var_t *var)\n{\n  const type_t *t;\n  /* strangely, MIDL accepts a const attribute on any pointer in the\n  * declaration to mean that data isn't being instantiated. this appears\n  * to be a bug, but there is no benefit to being incompatible with MIDL,\n  * so we'll do the same thing */\n  for (t = var->type; ; )\n  {\n    if (is_attr(t->attrs, ATTR_CONST))\n      return TRUE;\n    else if (is_ptr(t))\n      t = type_pointer_get_ref(t);\n    else break;\n  }\n  return FALSE;\n}\n\nstatic void write_declaration(FILE *header, const var_t *v)\n{\n  if (is_const_decl(v) && v->eval)\n  {\n    fprintf(header, \"#define %s (\", v->name);\n    write_expr(header, v->eval, 0, 1, NULL, NULL, \"\");\n    fprintf(header, \")\\n\\n\");\n  }\n  else\n  {\n    switch (v->stgclass)\n    {\n      case STG_NONE:\n      case STG_REGISTER: /* ignored */\n        break;\n      case STG_STATIC:\n        fprintf(header, \"static \");\n        break;\n      case STG_EXTERN:\n        fprintf(header, \"extern \");\n        break;\n    }\n    write_type_def_or_decl(header, v->type, FALSE, v->name);\n    fprintf(header, \";\\n\\n\");\n  }\n}\n\nstatic void write_library(FILE *header, const typelib_t *typelib)\n{\n  const UUID *uuid = get_attrp(typelib->attrs, ATTR_UUID);\n  fprintf(header, \"\\n\");\n  write_guid(header, \"LIBID\", typelib->name, uuid);\n  fprintf(header, \"\\n\");\n}\n\n\nconst type_t* get_explicit_generic_handle_type(const var_t* var)\n{\n    const type_t *t;\n    for (t = var->type;\n         is_ptr(t) || type_is_alias(t);\n         t = type_is_alias(t) ? type_alias_get_aliasee(t) : type_pointer_get_ref(t))\n        if ((type_get_type_detect_alias(t) != TYPE_BASIC || type_basic_get_type(t) != TYPE_BASIC_HANDLE) &&\n            is_attr(t->attrs, ATTR_HANDLE))\n            return t;\n    return NULL;\n}\n\nconst var_t *get_func_handle_var( const type_t *iface, const var_t *func,\n                                  unsigned char *explicit_fc, unsigned char *implicit_fc )\n{\n    const var_t *var;\n    const var_list_t *args = type_get_function_args( func->type );\n\n    *explicit_fc = *implicit_fc = 0;\n    if (args) LIST_FOR_EACH_ENTRY( var, args, const var_t, entry )\n    {\n        if (!is_attr( var->attrs, ATTR_IN ) && is_attr( var->attrs, ATTR_OUT )) continue;\n        if (type_get_type( var->type ) == TYPE_BASIC && type_basic_get_type( var->type ) == TYPE_BASIC_HANDLE)\n        {\n            *explicit_fc = FC_BIND_PRIMITIVE;\n            return var;\n        }\n        if (get_explicit_generic_handle_type( var ))\n        {\n            *explicit_fc = FC_BIND_GENERIC;\n            return var;\n        }\n        if (is_context_handle( var->type ))\n        {\n            *explicit_fc = FC_BIND_CONTEXT;\n            return var;\n        }\n    }\n\n    if ((var = get_attrp( iface->attrs, ATTR_IMPLICIT_HANDLE )))\n    {\n        if (type_get_type( var->type ) == TYPE_BASIC &&\n            type_basic_get_type( var->type ) == TYPE_BASIC_HANDLE)\n            *implicit_fc = FC_BIND_PRIMITIVE;\n        else\n            *implicit_fc = FC_BIND_GENERIC;\n        return var;\n    }\n\n    *implicit_fc = FC_AUTO_HANDLE;\n    return NULL;\n}\n\nint has_out_arg_or_return(const var_t *func)\n{\n    const var_t *var;\n\n    if (!is_void(type_function_get_rettype(func->type)))\n        return 1;\n\n    if (!type_get_function_args(func->type))\n        return 0;\n\n    LIST_FOR_EACH_ENTRY( var, type_get_function_args(func->type), const var_t, entry )\n        if (is_attr(var->attrs, ATTR_OUT))\n            return 1;\n\n    return 0;\n}\n\n\n/********** INTERFACES **********/\n\nint is_object(const type_t *iface)\n{\n    const attr_t *attr;\n    if (type_is_defined(iface) && type_iface_get_inherit(iface))\n        return 1;\n    if (iface->attrs) LIST_FOR_EACH_ENTRY( attr, iface->attrs, const attr_t, entry )\n        if (attr->type == ATTR_OBJECT || attr->type == ATTR_ODL) return 1;\n    return 0;\n}\n\nint is_local(const attr_list_t *a)\n{\n  return is_attr(a, ATTR_LOCAL);\n}\n\nconst var_t *is_callas(const attr_list_t *a)\n{\n  return get_attrp(a, ATTR_CALLAS);\n}\n\nstatic int is_inherited_method(const type_t *iface, const var_t *func)\n{\n  while ((iface = type_iface_get_inherit(iface)))\n  {\n    const statement_t *stmt;\n    STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface))\n    {\n      const var_t *funccmp = stmt->u.var;\n\n      if (!is_callas(func->attrs))\n      {\n         char inherit_name[256];\n         /* compare full name including property prefix */\n         strcpy(inherit_name, get_name(funccmp));\n         if (!strcmp(inherit_name, get_name(func))) return 1;\n      }\n    }\n  }\n\n  return 0;\n}\n\nstatic int is_override_method(const type_t *iface, const type_t *child, const var_t *func)\n{\n  if (iface == child)\n    return 0;\n\n  do\n  {\n    const statement_t *stmt;\n    STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(child))\n    {\n      const var_t *funccmp = stmt->u.var;\n\n      if (!is_callas(func->attrs))\n      {\n         char inherit_name[256];\n         /* compare full name including property prefix */\n         strcpy(inherit_name, get_name(funccmp));\n         if (!strcmp(inherit_name, get_name(func))) return 1;\n      }\n    }\n  }\n  while ((child = type_iface_get_inherit(child)) && child != iface);\n\n  return 0;\n}\n\nstatic int is_aggregate_return(const var_t *func)\n{\n  enum type_type type = type_get_type(type_function_get_rettype(func->type));\n  return type == TYPE_STRUCT || type == TYPE_UNION ||\n         type == TYPE_COCLASS || type == TYPE_INTERFACE;\n}\n\nstatic char *get_vtbl_entry_name(const type_t *iface, const var_t *func)\n{\n  static char buff[255];\n  if (is_inherited_method(iface, func))\n    sprintf(buff, \"%s_%s\", iface->name, get_name(func));\n  else\n    sprintf(buff, \"%s\", get_name(func));\n  return buff;\n}\n\nstatic void write_method_macro(FILE *header, const type_t *iface, const type_t *child, const char *name)\n{\n  const statement_t *stmt;\n  int first_iface = 1;\n\n  if (type_iface_get_inherit(iface))\n    write_method_macro(header, type_iface_get_inherit(iface), child, name);\n\n  STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface))\n  {\n    const var_t *func = stmt->u.var;\n\n    if (first_iface)\n    {\n      fprintf(header, \"/*** %s methods ***/\\n\", iface->name);\n      first_iface = 0;\n    }\n\n    if (is_override_method(iface, child, func))\n      continue;\n\n    if (!is_callas(func->attrs)) {\n      const var_t *arg;\n\n      fprintf(header, \"#define %s_%s(This\", name, get_name(func));\n      if (type_get_function_args(func->type))\n          LIST_FOR_EACH_ENTRY( arg, type_get_function_args(func->type), const var_t, entry )\n              fprintf(header, \",%s\", arg->name);\n      fprintf(header, \") \");\n\n      if (is_aggregate_return(func))\n      {\n        fprintf(header, \"%s_%s_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support\\n\", name, get_name(func));\n        continue;\n      }\n\n      fprintf(header, \"(This)->lpVtbl->%s(This\", get_vtbl_entry_name(iface, func));\n      if (type_get_function_args(func->type))\n          LIST_FOR_EACH_ENTRY( arg, type_get_function_args(func->type), const var_t, entry )\n              fprintf(header, \",%s\", arg->name);\n      fprintf(header, \")\\n\");\n    }\n  }\n}\n\nvoid write_args(FILE *h, const var_list_t *args, const char *name, int method, int do_indent)\n{\n  const var_t *arg;\n  int count = 0;\n\n  if (do_indent)\n  {\n      indentation++;\n      indent(h, 0);\n  }\n  if (method == 1) {\n    fprintf(h, \"%s* This\", name);\n    count++;\n  }\n  if (args) LIST_FOR_EACH_ENTRY( arg, args, const var_t, entry ) {\n    if (count) {\n        if (do_indent)\n        {\n            fprintf(h, \",\\n\");\n            indent(h, 0);\n        }\n        else fprintf(h, \",\");\n    }\n    write_type_decl(h, arg->type, arg->name);\n    if (method == 2) {\n        const expr_t *expr = get_attrp(arg->attrs, ATTR_DEFAULTVALUE);\n        if (expr) {\n            const var_t *tail_arg;\n\n            /* Output default value only if all following arguments also have default value. */\n            LIST_FOR_EACH_ENTRY_REV( tail_arg, args, const var_t, entry ) {\n                if(tail_arg == arg) {\n                    expr_t bstr;\n\n                    /* Fixup the expression type for a BSTR like midl does. */\n                    if (get_type_vt(arg->type) == VT_BSTR && expr->type == EXPR_STRLIT)\n                    {\n                        bstr = *expr;\n                        bstr.type = EXPR_WSTRLIT;\n                        expr = &bstr;\n                    }\n\n                    fprintf(h, \" = \");\n                    write_expr( h, expr, 0, 1, NULL, NULL, \"\" );\n                    break;\n                }\n                if(!get_attrp(tail_arg->attrs, ATTR_DEFAULTVALUE))\n                    break;\n            }\n        }\n    }\n    count++;\n  }\n  if (do_indent) indentation--;\n}\n\nstatic void write_cpp_method_def(FILE *header, const type_t *iface)\n{\n  const statement_t *stmt;\n\n  STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface))\n  {\n    const var_t *func = stmt->u.var;\n    if (!is_callas(func->attrs)) {\n      const char *callconv = get_attrp(func->type->attrs, ATTR_CALLCONV);\n      const var_list_t *args = type_get_function_args(func->type);\n      const var_t *arg;\n\n      if (!callconv) callconv = \"STDMETHODCALLTYPE\";\n\n      if (is_aggregate_return(func)) {\n        fprintf(header, \"#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS\\n\");\n\n        indent(header, 0);\n        fprintf(header, \"virtual \");\n        write_type_decl_left(header, type_function_get_rettype(func->type));\n        fprintf(header, \"* %s %s(\\n\", callconv, get_name(func));\n        ++indentation;\n        indent(header, 0);\n        write_type_decl_left(header, type_function_get_rettype(func->type));\n        fprintf(header, \" *__ret\");\n        --indentation;\n        if (args) {\n          fprintf(header, \",\\n\");\n          write_args(header, args, iface->name, 2, TRUE);\n        }\n        fprintf(header, \") = 0;\\n\");\n\n        indent(header, 0);\n        write_type_decl_left(header, type_function_get_rettype(func->type));\n        fprintf(header, \" %s %s(\\n\", callconv, get_name(func));\n        write_args(header, args, iface->name, 2, TRUE);\n        fprintf(header, \")\\n\");\n        indent(header, 0);\n        fprintf(header, \"{\\n\");\n        ++indentation;\n        indent(header, 0);\n        write_type_decl_left(header, type_function_get_rettype(func->type));\n        fprintf(header, \" __ret;\\n\");\n        indent(header, 0);\n        fprintf(header, \"return *%s(&__ret\", get_name(func));\n        if (args)\n            LIST_FOR_EACH_ENTRY(arg, args, const var_t, entry)\n                fprintf(header, \", %s\", arg->name);\n        fprintf(header, \");\\n\");\n        --indentation;\n        indent(header, 0);\n        fprintf(header, \"}\\n\");\n\n        fprintf(header, \"#else\\n\");\n      }\n\n      indent(header, 0);\n      fprintf(header, \"virtual \");\n      write_type_decl_left(header, type_function_get_rettype(func->type));\n      fprintf(header, \" %s %s(\\n\", callconv, get_name(func));\n      write_args(header, args, iface->name, 2, TRUE);\n      fprintf(header, \") = 0;\\n\");\n\n      if (is_aggregate_return(func))\n        fprintf(header, \"#endif\\n\");\n      fprintf(header, \"\\n\");\n    }\n  }\n}\n\nstatic void write_inline_wrappers(FILE *header, const type_t *iface, const type_t *child, const char *name)\n{\n  const statement_t *stmt;\n  int first_iface = 1;\n\n  if (type_iface_get_inherit(iface))\n    write_inline_wrappers(header, type_iface_get_inherit(iface), child, name);\n\n  STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface))\n  {\n    const var_t *func = stmt->u.var;\n\n    if (first_iface)\n    {\n      fprintf(header, \"/*** %s methods ***/\\n\", iface->name);\n      first_iface = 0;\n    }\n\n    if (is_override_method(iface, child, func))\n      continue;\n\n    if (!is_callas(func->attrs)) {\n      const var_t *arg;\n\n      fprintf(header, \"static FORCEINLINE \");\n      write_type_decl_left(header, type_function_get_rettype(func->type));\n      fprintf(header, \" %s_%s(\", name, get_name(func));\n      write_args(header, type_get_function_args(func->type), name, 1, FALSE);\n      fprintf(header, \") {\\n\");\n      ++indentation;\n      if (!is_aggregate_return(func)) {\n        indent(header, 0);\n        fprintf(header, \"%sThis->lpVtbl->%s(This\",\n                is_void(type_function_get_rettype(func->type)) ? \"\" : \"return \",\n                get_vtbl_entry_name(iface, func));\n      } else {\n        indent(header, 0);\n        write_type_decl_left(header, type_function_get_rettype(func->type));\n        fprintf(header, \" __ret;\\n\");\n        indent(header, 0);\n        fprintf(header, \"return *This->lpVtbl->%s(This,&__ret\", get_vtbl_entry_name(iface, func));\n      }\n      if (type_get_function_args(func->type))\n          LIST_FOR_EACH_ENTRY( arg, type_get_function_args(func->type), const var_t, entry )\n              fprintf(header, \",%s\", arg->name);\n      fprintf(header, \");\\n\");\n      --indentation;\n      fprintf(header, \"}\\n\");\n    }\n  }\n}\n\nstatic void do_write_c_method_def(FILE *header, const type_t *iface, const char *name)\n{\n  const statement_t *stmt;\n  int first_iface = 1;\n\n  if (type_iface_get_inherit(iface))\n    do_write_c_method_def(header, type_iface_get_inherit(iface), name);\n\n  STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface))\n  {\n    const var_t *func = stmt->u.var;\n    if (first_iface) {\n      indent(header, 0);\n      fprintf(header, \"/*** %s methods ***/\\n\", iface->name);\n      first_iface = 0;\n    }\n    if (!is_callas(func->attrs)) {\n      const char *callconv = get_attrp(func->type->attrs, ATTR_CALLCONV);\n      if (!callconv) callconv = \"STDMETHODCALLTYPE\";\n      indent(header, 0);\n      write_type_decl_left(header, type_function_get_rettype(func->type));\n      if (is_aggregate_return(func))\n        fprintf(header, \" *\");\n      if (is_inherited_method(iface, func))\n        fprintf(header, \" (%s *%s_%s)(\\n\", callconv, iface->name, func->name);\n      else\n        fprintf(header, \" (%s *%s)(\\n\", callconv, get_name(func));\n      ++indentation;\n      indent(header, 0);\n      fprintf(header, \"%s *This\", name);\n      if (is_aggregate_return(func)) {\n        fprintf(header, \",\\n\");\n        indent(header, 0);\n        write_type_decl_left(header, type_function_get_rettype(func->type));\n        fprintf(header, \" *__ret\");\n      }\n      --indentation;\n      if (type_get_function_args(func->type)) {\n        fprintf(header, \",\\n\");\n        write_args(header, type_get_function_args(func->type), name, 0, TRUE);\n      }\n      fprintf(header, \");\\n\");\n      fprintf(header, \"\\n\");\n    }\n  }\n}\n\nstatic void write_c_method_def(FILE *header, const type_t *iface)\n{\n  do_write_c_method_def(header, iface, iface->c_name);\n}\n\nstatic void write_c_disp_method_def(FILE *header, const type_t *iface)\n{\n  do_write_c_method_def(header, type_iface_get_inherit(iface), iface->c_name);\n}\n\nstatic void write_method_proto(FILE *header, const type_t *iface)\n{\n  const statement_t *stmt;\n\n  STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface))\n  {\n    const var_t *func = stmt->u.var;\n\n    if (is_callas(func->attrs)) {\n      const char *callconv = get_attrp(func->type->attrs, ATTR_CALLCONV);\n      if (!callconv) callconv = \"STDMETHODCALLTYPE\";\n      /* proxy prototype */\n      write_type_decl_left(header, type_function_get_rettype(func->type));\n      fprintf(header, \" %s %s_%s_Proxy(\\n\", callconv, iface->name, get_name(func));\n      write_args(header, type_get_function_args(func->type), iface->name, 1, TRUE);\n      fprintf(header, \");\\n\");\n      /* stub prototype */\n      fprintf(header, \"void __RPC_STUB %s_%s_Stub(\\n\", iface->name, get_name(func));\n      fprintf(header, \"    IRpcStubBuffer* This,\\n\");\n      fprintf(header, \"    IRpcChannelBuffer* pRpcChannelBuffer,\\n\");\n      fprintf(header, \"    PRPC_MESSAGE pRpcMessage,\\n\");\n      fprintf(header, \"    DWORD* pdwStubPhase);\\n\");\n    }\n  }\n}\n\nstatic void write_locals(FILE *fp, const type_t *iface, int body)\n{\n  static const char comment[]\n    = \"/* WIDL-generated stub.  You must provide an implementation for this.  */\";\n  const statement_t *stmt;\n\n  if (!is_object(iface))\n    return;\n\n  STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface)) {\n    const var_t *func = stmt->u.var;\n    const var_t *cas = is_callas(func->attrs);\n\n    if (cas) {\n      const statement_t *stmt2 = NULL;\n      STATEMENTS_FOR_EACH_FUNC(stmt2, type_iface_get_stmts(iface))\n        if (!strcmp(stmt2->u.var->name, cas->name))\n          break;\n      if (&stmt2->entry != type_iface_get_stmts(iface)) {\n        const var_t *m = stmt2->u.var;\n        /* proxy prototype - use local prototype */\n        write_type_decl_left(fp, type_function_get_rettype(m->type));\n        fprintf(fp, \" CALLBACK %s_%s_Proxy(\\n\", iface->name, get_name(m));\n        write_args(fp, type_get_function_args(m->type), iface->name, 1, TRUE);\n        fprintf(fp, \")\");\n        if (body) {\n          type_t *rt = type_function_get_rettype(m->type);\n          fprintf(fp, \"\\n{\\n\");\n          fprintf(fp, \"    %s\\n\", comment);\n          if (rt->name && strcmp(rt->name, \"HRESULT\") == 0)\n            fprintf(fp, \"    return E_NOTIMPL;\\n\");\n          else if (type_get_type(rt) != TYPE_VOID) {\n            fprintf(fp, \"    \");\n            write_type_decl(fp, rt, \"rv\");\n            fprintf(fp, \";\\n\");\n            fprintf(fp, \"    memset(&rv, 0, sizeof rv);\\n\");\n            fprintf(fp, \"    return rv;\\n\");\n          }\n          fprintf(fp, \"}\\n\\n\");\n        }\n        else\n          fprintf(fp, \";\\n\");\n        /* stub prototype - use remotable prototype */\n        write_type_decl_left(fp, type_function_get_rettype(func->type));\n        fprintf(fp, \" __RPC_STUB %s_%s_Stub(\\n\", iface->name, get_name(m));\n        write_args(fp, type_get_function_args(func->type), iface->name, 1, TRUE);\n        fprintf(fp, \")\");\n        if (body)\n          /* Remotable methods must all return HRESULTs.  */\n          fprintf(fp, \"\\n{\\n    %s\\n    return E_NOTIMPL;\\n}\\n\\n\", comment);\n        else\n          fprintf(fp, \";\\n\");\n      }\n      else\n        error_loc(\"invalid call_as attribute (%s -> %s)\\n\", func->name, cas->name);\n    }\n  }\n}\n\nstatic void write_local_stubs_stmts(FILE *local_stubs, const statement_list_t *stmts)\n{\n  const statement_t *stmt;\n  if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry )\n  {\n    if (stmt->type == STMT_TYPE && type_get_type(stmt->u.type) == TYPE_INTERFACE)\n      write_locals(local_stubs, stmt->u.type, TRUE);\n  }\n}\n\nvoid write_local_stubs(const statement_list_t *stmts)\n{\n  FILE *local_stubs;\n\n  if (!local_stubs_name) return;\n\n  local_stubs = fopen(local_stubs_name, \"w\");\n  if (!local_stubs) {\n    error(\"Could not open %s for output\\n\", local_stubs_name);\n    return;\n  }\n  fprintf(local_stubs, \"/* call_as/local stubs for %s */\\n\\n\", input_name);\n  fprintf(local_stubs, \"#include <objbase.h>\\n\");\n  fprintf(local_stubs, \"#include \\\"%s\\\"\\n\\n\", header_name);\n\n  write_local_stubs_stmts(local_stubs, stmts);\n\n  fclose(local_stubs);\n}\n\nstatic void write_function_proto(FILE *header, const type_t *iface, const var_t *fun, const char *prefix)\n{\n  const char *callconv = get_attrp(fun->type->attrs, ATTR_CALLCONV);\n\n  if (!callconv) callconv = \"__cdecl\";\n  /* FIXME: do we need to handle call_as? */\n  write_type_decl_left(header, type_function_get_rettype(fun->type));\n  fprintf(header, \" %s \", callconv);\n  fprintf(header, \"%s%s(\\n\", prefix, get_name(fun));\n  if (type_get_function_args(fun->type))\n    write_args(header, type_get_function_args(fun->type), iface->name, 0, TRUE);\n  else\n    fprintf(header, \"    void\");\n  fprintf(header, \");\\n\\n\");\n}\n\nstatic void write_forward(FILE *header, type_t *iface)\n{\n  fprintf(header, \"#ifndef __%s_FWD_DEFINED__\\n\", iface->c_name);\n  fprintf(header, \"#define __%s_FWD_DEFINED__\\n\", iface->c_name);\n  fprintf(header, \"typedef interface %s %s;\\n\", iface->c_name, iface->c_name);\n  fprintf(header, \"#ifdef __cplusplus\\n\");\n  write_namespace_start(header, iface->namespace);\n  write_line(header, 0, \"interface %s;\", iface->name);\n  write_namespace_end(header, iface->namespace);\n  fprintf(header, \"#endif /* __cplusplus */\\n\");\n  fprintf(header, \"#endif\\n\\n\" );\n}\n\nstatic void write_com_interface_start(FILE *header, const type_t *iface)\n{\n  int dispinterface = is_attr(iface->attrs, ATTR_DISPINTERFACE);\n  fprintf(header, \"/*****************************************************************************\\n\");\n  fprintf(header, \" * %s %sinterface\\n\", iface->name, dispinterface ? \"disp\" : \"\");\n  fprintf(header, \" */\\n\");\n  fprintf(header,\"#ifndef __%s_%sINTERFACE_DEFINED__\\n\", iface->c_name, dispinterface ? \"DISP\" : \"\");\n  fprintf(header,\"#define __%s_%sINTERFACE_DEFINED__\\n\\n\", iface->c_name, dispinterface ? \"DISP\" : \"\");\n}\n\nstatic void write_com_interface_end(FILE *header, type_t *iface)\n{\n  int dispinterface = is_attr(iface->attrs, ATTR_DISPINTERFACE);\n  const UUID *uuid = get_attrp(iface->attrs, ATTR_UUID);\n  type_t *type;\n\n  if (uuid)\n      write_guid(header, dispinterface ? \"DIID\" : \"IID\", iface->c_name, uuid);\n\n  /* C++ interface */\n  fprintf(header, \"#if defined(__cplusplus) && !defined(CINTERFACE)\\n\");\n  if (!is_global_namespace(iface->namespace)) {\n      write_line(header, 0, \"} /* extern \\\"C\\\" */\");\n      write_namespace_start(header, iface->namespace);\n  }\n  if (uuid) {\n      write_line(header, 0, \"MIDL_INTERFACE(\\\"%s\\\")\", uuid_string(uuid));\n      indent(header, 0);\n  }else {\n      indent(header, 0);\n      fprintf(header, \"interface \");\n  }\n  if (type_iface_get_inherit(iface))\n  {\n    fprintf(header, \"%s : public %s\\n\", iface->name,\n            type_iface_get_inherit(iface)->name);\n    write_line(header, 1, \"{\");\n  }\n  else\n  {\n    fprintf(header, \"%s\\n\", iface->name);\n    write_line(header, 1, \"{\\n\");\n    write_line(header, 0, \"BEGIN_INTERFACE\\n\");\n  }\n  /* dispinterfaces don't have real functions, so don't write C++ functions for\n   * them */\n  if (!dispinterface)\n    write_cpp_method_def(header, iface);\n  if (!type_iface_get_inherit(iface))\n    write_line(header, 0, \"END_INTERFACE\\n\");\n  write_line(header, -1, \"};\");\n  if (!is_global_namespace(iface->namespace)) {\n      write_namespace_end(header, iface->namespace);\n      write_line(header, 0, \"extern \\\"C\\\" {\");\n  }\n  if (uuid)\n      write_uuid_decl(header, iface, uuid);\n  fprintf(header, \"#else\\n\");\n  /* C interface */\n  write_line(header, 1, \"typedef struct %sVtbl {\", iface->c_name);\n  write_line(header, 0, \"BEGIN_INTERFACE\\n\");\n  if (dispinterface)\n    write_c_disp_method_def(header, iface);\n  else\n    write_c_method_def(header, iface);\n  write_line(header, 0, \"END_INTERFACE\");\n  write_line(header, -1, \"} %sVtbl;\\n\", iface->c_name);\n  fprintf(header, \"interface %s {\\n\", iface->c_name);\n  fprintf(header, \"    CONST_VTBL %sVtbl* lpVtbl;\\n\", iface->c_name);\n  fprintf(header, \"};\\n\\n\");\n  fprintf(header, \"#ifdef COBJMACROS\\n\");\n  /* dispinterfaces don't have real functions, so don't write macros for them,\n   * only for the interface this interface inherits from, i.e. IDispatch */\n  fprintf(header, \"#ifndef WIDL_C_INLINE_WRAPPERS\\n\");\n  type = dispinterface ? type_iface_get_inherit(iface) : iface;\n  write_method_macro(header, type, type, iface->c_name);\n  fprintf(header, \"#else\\n\");\n  write_inline_wrappers(header, type, type, iface->c_name);\n  fprintf(header, \"#endif\\n\");\n  fprintf(header, \"#endif\\n\");\n  fprintf(header, \"\\n\");\n  fprintf(header, \"#endif\\n\");\n  fprintf(header, \"\\n\");\n  /* dispinterfaces don't have real functions, so don't write prototypes for\n   * them */\n  if (!dispinterface && !winrt_mode)\n  {\n    write_method_proto(header, iface);\n    write_locals(header, iface, FALSE);\n    fprintf(header, \"\\n\");\n  }\n  fprintf(header,\"#endif  /* __%s_%sINTERFACE_DEFINED__ */\\n\\n\", iface->c_name, dispinterface ? \"DISP\" : \"\");\n}\n\nstatic void write_rpc_interface_start(FILE *header, const type_t *iface)\n{\n  unsigned int ver = get_attrv(iface->attrs, ATTR_VERSION);\n  const var_t *var = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE);\n\n  fprintf(header, \"/*****************************************************************************\\n\");\n  fprintf(header, \" * %s interface (v%d.%d)\\n\", iface->name, MAJORVERSION(ver), MINORVERSION(ver));\n  fprintf(header, \" */\\n\");\n  fprintf(header,\"#ifndef __%s_INTERFACE_DEFINED__\\n\", iface->name);\n  fprintf(header,\"#define __%s_INTERFACE_DEFINED__\\n\\n\", iface->name);\n  if (var)\n  {\n      fprintf(header, \"extern \");\n      write_type_decl( header, var->type, var->name );\n      fprintf(header, \";\\n\");\n  }\n  if (old_names)\n  {\n      fprintf(header, \"extern RPC_IF_HANDLE %s%s_ClientIfHandle;\\n\", prefix_client, iface->name);\n      fprintf(header, \"extern RPC_IF_HANDLE %s%s_ServerIfHandle;\\n\", prefix_server, iface->name);\n  }\n  else\n  {\n      fprintf(header, \"extern RPC_IF_HANDLE %s%s_v%d_%d_c_ifspec;\\n\",\n              prefix_client, iface->name, MAJORVERSION(ver), MINORVERSION(ver));\n      fprintf(header, \"extern RPC_IF_HANDLE %s%s_v%d_%d_s_ifspec;\\n\",\n              prefix_server, iface->name, MAJORVERSION(ver), MINORVERSION(ver));\n  }\n}\n\nstatic void write_rpc_interface_end(FILE *header, const type_t *iface)\n{\n  fprintf(header,\"\\n#endif  /* __%s_INTERFACE_DEFINED__ */\\n\\n\", iface->name);\n}\n\nstatic void write_coclass(FILE *header, type_t *cocl)\n{\n  const UUID *uuid = get_attrp(cocl->attrs, ATTR_UUID);\n\n  fprintf(header, \"/*****************************************************************************\\n\");\n  fprintf(header, \" * %s coclass\\n\", cocl->name);\n  fprintf(header, \" */\\n\\n\");\n  if (uuid)\n      write_guid(header, \"CLSID\", cocl->name, uuid);\n  fprintf(header, \"\\n#ifdef __cplusplus\\n\");\n  if (uuid)\n  {\n      fprintf(header, \"class DECLSPEC_UUID(\\\"%s\\\") %s;\\n\", uuid_string(uuid), cocl->name);\n      write_uuid_decl(header, cocl, uuid);\n  }\n  else\n  {\n      fprintf(header, \"class %s;\\n\", cocl->name);\n  }\n  fprintf(header, \"#endif\\n\");\n  fprintf(header, \"\\n\");\n}\n\nstatic void write_coclass_forward(FILE *header, type_t *cocl)\n{\n  fprintf(header, \"#ifndef __%s_FWD_DEFINED__\\n\", cocl->name);\n  fprintf(header, \"#define __%s_FWD_DEFINED__\\n\", cocl->name);\n  fprintf(header, \"#ifdef __cplusplus\\n\");\n  fprintf(header, \"typedef class %s %s;\\n\", cocl->name, cocl->name);\n  fprintf(header, \"#else\\n\");\n  fprintf(header, \"typedef struct %s %s;\\n\", cocl->name, cocl->name);\n  fprintf(header, \"#endif /* defined __cplusplus */\\n\");\n  fprintf(header, \"#endif /* defined __%s_FWD_DEFINED__ */\\n\\n\", cocl->name );\n}\n\nstatic void write_import(FILE *header, const char *fname)\n{\n  char *hname, *p;\n\n  hname = dup_basename(fname, \".idl\");\n  p = hname + strlen(hname) - 2;\n  if (p <= hname || strcmp( p, \".h\" )) strcat(hname, \".h\");\n\n  fprintf(header, \"#include <%s>\\n\", hname);\n  free(hname);\n}\n\nstatic void write_imports(FILE *header, const statement_list_t *stmts)\n{\n  const statement_t *stmt;\n  if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry )\n  {\n    switch (stmt->type)\n    {\n      case STMT_TYPE:\n        if (type_get_type(stmt->u.type) == TYPE_INTERFACE)\n          write_imports(header, type_iface_get_stmts(stmt->u.type));\n        break;\n      case STMT_TYPEREF:\n      case STMT_IMPORTLIB:\n        /* not included in header */\n        break;\n      case STMT_IMPORT:\n        write_import(header, stmt->u.str);\n        break;\n      case STMT_TYPEDEF:\n      case STMT_MODULE:\n      case STMT_CPPQUOTE:\n      case STMT_PRAGMA:\n      case STMT_DECLARATION:\n        /* not processed here */\n        break;\n      case STMT_LIBRARY:\n        write_imports(header, stmt->u.lib->stmts);\n        break;\n    }\n  }\n}\n\nstatic void write_forward_decls(FILE *header, const statement_list_t *stmts)\n{\n  const statement_t *stmt;\n  if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry )\n  {\n    switch (stmt->type)\n    {\n      case STMT_TYPE:\n        if (type_get_type(stmt->u.type) == TYPE_INTERFACE)\n        {\n          if (is_object(stmt->u.type) || is_attr(stmt->u.type->attrs, ATTR_DISPINTERFACE))\n            write_forward(header, stmt->u.type);\n        }\n        else if (type_get_type(stmt->u.type) == TYPE_COCLASS)\n          write_coclass_forward(header, stmt->u.type);\n        break;\n      case STMT_TYPEREF:\n      case STMT_IMPORTLIB:\n        /* not included in header */\n        break;\n      case STMT_IMPORT:\n      case STMT_TYPEDEF:\n      case STMT_MODULE:\n      case STMT_CPPQUOTE:\n      case STMT_PRAGMA:\n      case STMT_DECLARATION:\n        /* not processed here */\n        break;\n      case STMT_LIBRARY:\n        write_forward_decls(header, stmt->u.lib->stmts);\n        break;\n    }\n  }\n}\n\nstatic void write_header_stmts(FILE *header, const statement_list_t *stmts, const type_t *iface, int ignore_funcs)\n{\n  const statement_t *stmt;\n  if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry )\n  {\n    switch (stmt->type)\n    {\n      case STMT_TYPE:\n        if (type_get_type(stmt->u.type) == TYPE_INTERFACE)\n        {\n          type_t *iface = stmt->u.type;\n          if (is_object(iface)) is_object_interface++;\n          if (is_attr(stmt->u.type->attrs, ATTR_DISPINTERFACE) || is_object(stmt->u.type))\n          {\n            write_com_interface_start(header, iface);\n            write_header_stmts(header, type_iface_get_stmts(iface), stmt->u.type, TRUE);\n            write_com_interface_end(header, iface);\n          }\n          else\n          {\n            write_rpc_interface_start(header, iface);\n            write_header_stmts(header, type_iface_get_stmts(iface), iface, FALSE);\n            write_rpc_interface_end(header, iface);\n          }\n          if (is_object(iface)) is_object_interface--;\n        }\n        else if (type_get_type(stmt->u.type) == TYPE_COCLASS)\n          write_coclass(header, stmt->u.type);\n        else\n        {\n          write_type_definition(header, stmt->u.type);\n        }\n        break;\n      case STMT_TYPEREF:\n        /* FIXME: shouldn't write out forward declarations for undefined\n        * interfaces but a number of our IDL files depend on this */\n        if (type_get_type(stmt->u.type) == TYPE_INTERFACE && !stmt->u.type->written)\n          write_forward(header, stmt->u.type);\n        break;\n      case STMT_IMPORTLIB:\n      case STMT_MODULE:\n      case STMT_PRAGMA:\n        /* not included in header */\n        break;\n      case STMT_IMPORT:\n        /* not processed here */\n        break;\n      case STMT_TYPEDEF:\n      {\n        const type_list_t *type_entry = stmt->u.type_list;\n        for (; type_entry; type_entry = type_entry->next)\n\t  write_typedef(header, type_entry->type);\n        break;\n      }\n      case STMT_LIBRARY:\n        write_library(header, stmt->u.lib);\n        write_header_stmts(header, stmt->u.lib->stmts, NULL, FALSE);\n        break;\n      case STMT_CPPQUOTE:\n        fprintf(header, \"%s\\n\", stmt->u.str);\n        break;\n      case STMT_DECLARATION:\n        if (iface && type_get_type(stmt->u.var->type) == TYPE_FUNCTION)\n        {\n          if (!ignore_funcs)\n          {\n            int prefixes_differ = strcmp(prefix_client, prefix_server);\n\n            if (prefixes_differ)\n            {\n              fprintf(header, \"/* client prototype */\\n\");\n              write_function_proto(header, iface, stmt->u.var, prefix_client);\n              fprintf(header, \"/* server prototype */\\n\");\n            }\n            write_function_proto(header, iface, stmt->u.var, prefix_server);\n          }\n        }\n        else\n          write_declaration(header, stmt->u.var);\n        break;\n    }\n  }\n}\n\nvoid write_header(const statement_list_t *stmts)\n{\n  FILE *header;\n\n  if (!do_header) return;\n\n  if(!(header = fopen(header_name, \"w\"))) {\n    error(\"Could not open %s for output\\n\", header_name);\n    return;\n  }\n  fprintf(header, \"/*** Autogenerated by WIDL %s from %s - Do not edit ***/\\n\\n\", PACKAGE_VERSION, input_name);\n\n  fprintf(header, \"#ifndef __REQUIRED_RPCNDR_H_VERSION__\\n\");\n  fprintf(header, \"#define __REQUIRED_RPCNDR_H_VERSION__ 475\\n\");\n  fprintf(header, \"#endif\\n\\n\");\n\n  fprintf(header, \"#include <rpc.h>\\n\" );\n  fprintf(header, \"#include <rpcndr.h>\\n\\n\" );\n\n  fprintf(header, \"#ifndef COM_NO_WINDOWS_H\\n\");\n  fprintf(header, \"#include <windows.h>\\n\");\n  fprintf(header, \"#include <ole2.h>\\n\");\n  fprintf(header, \"#endif\\n\\n\");\n\n  fprintf(header, \"#ifndef __%s__\\n\", header_token);\n  fprintf(header, \"#define __%s__\\n\\n\", header_token);\n\n  fprintf(header, \"/* Forward declarations */\\n\\n\");\n  write_forward_decls(header, stmts);\n\n  fprintf(header, \"/* Headers for imported files */\\n\\n\");\n  write_imports(header, stmts);\n  fprintf(header, \"\\n\");\n  start_cplusplus_guard(header);\n\n  write_header_stmts(header, stmts, NULL, FALSE);\n\n  fprintf(header, \"/* Begin additional prototypes for all interfaces */\\n\");\n  fprintf(header, \"\\n\");\n  write_user_types(header);\n  write_generic_handle_routines(header);\n  write_context_handle_rundowns(header);\n  fprintf(header, \"\\n\");\n  fprintf(header, \"/* End additional prototypes */\\n\");\n  fprintf(header, \"\\n\");\n\n  end_cplusplus_guard(header);\n  fprintf(header, \"#endif /* __%s__ */\\n\", header_token);\n\n  fclose(header);\n}\n"
  },
  {
    "path": "widl/header.h",
    "content": "/*\n * IDL Compiler\n *\n * Copyright 2002 Ove Kaaven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WIDL_HEADER_H\n#define __WIDL_HEADER_H\n\n#include \"typetree.h\"\n\nextern int is_ptrchain_attr(const var_t *var, enum attr_type t);\nextern int is_aliaschain_attr(const type_t *var, enum attr_type t);\nextern int is_attr(const attr_list_t *list, enum attr_type t);\nextern void *get_attrp(const attr_list_t *list, enum attr_type t);\nextern unsigned int get_attrv(const attr_list_t *list, enum attr_type t);\nextern const char* get_name(const var_t *v);\nextern void write_type_left(FILE *h, type_t *t, enum name_type name_type, int declonly);\nextern void write_type_right(FILE *h, type_t *t, int is_field);\nextern void write_type_decl(FILE *f, type_t *t, const char *name);\nextern void write_type_decl_left(FILE *f, type_t *t);\nextern unsigned int get_context_handle_offset( const type_t *type );\nextern unsigned int get_generic_handle_offset( const type_t *type );\nextern int needs_space_after(type_t *t);\nextern int is_object(const type_t *iface);\nextern int is_local(const attr_list_t *list);\nextern int count_methods(const type_t *iface);\nextern int need_stub(const type_t *iface);\nextern int need_proxy(const type_t *iface);\nextern int need_inline_stubs(const type_t *iface);\nextern int need_stub_files(const statement_list_t *stmts);\nextern int need_proxy_file(const statement_list_t *stmts);\nextern int need_proxy_delegation(const statement_list_t *stmts);\nextern int need_inline_stubs_file(const statement_list_t *stmts);\nextern const var_t *is_callas(const attr_list_t *list);\nextern void write_args(FILE *h, const var_list_t *arg, const char *name, int obj, int do_indent);\nextern void write_array(FILE *h, array_dims_t *v, int field);\nextern const type_t* get_explicit_generic_handle_type(const var_t* var);\nextern const var_t *get_func_handle_var( const type_t *iface, const var_t *func,\n                                         unsigned char *explicit_fc, unsigned char *implicit_fc );\nextern int has_out_arg_or_return(const var_t *func);\nextern int is_const_decl(const var_t *var);\n\nstatic inline int is_ptr(const type_t *t)\n{\n    return type_get_type(t) == TYPE_POINTER;\n}\n\nstatic inline int is_array(const type_t *t)\n{\n    return type_get_type(t) == TYPE_ARRAY;\n}\n\nstatic inline int is_void(const type_t *t)\n{\n    return type_get_type(t) == TYPE_VOID;\n}\n\nstatic inline int is_declptr(const type_t *t)\n{\n    return is_ptr(t) || (type_get_type(t) == TYPE_ARRAY && type_array_is_decl_as_ptr(t));\n}\n\nstatic inline int is_conformant_array(const type_t *t)\n{\n    return is_array(t) && type_array_has_conformance(t);\n}\n\nstatic inline int last_ptr(const type_t *type)\n{\n    return is_ptr(type) && !is_declptr(type_pointer_get_ref(type));\n}\n\nstatic inline int last_array(const type_t *type)\n{\n    return is_array(type) && !is_array(type_array_get_element(type));\n}\n\nstatic inline int is_string_type(const attr_list_t *attrs, const type_t *type)\n{\n    return ((is_attr(attrs, ATTR_STRING) || is_aliaschain_attr(type, ATTR_STRING))\n            && (last_ptr(type) || last_array(type)));\n}\n\nstatic inline int is_context_handle(const type_t *type)\n{\n    const type_t *t;\n    for (t = type;\n         is_ptr(t) || type_is_alias(t);\n         t = type_is_alias(t) ? type_alias_get_aliasee(t) : type_pointer_get_ref(t))\n        if (is_attr(t->attrs, ATTR_CONTEXTHANDLE))\n            return 1;\n    return 0;\n}\n\n#endif\n"
  },
  {
    "path": "widl/parser.h",
    "content": "/*\n * IDL Compiler\n *\n * Copyright 2002 Ove Kaaven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WIDL_PARSER_H\n#define __WIDL_PARSER_H\n\ntypedef struct\n{\n  type_t *interface;\n  unsigned char old_pointer_default;\n} interface_info_t;\n\nint parser_parse(void);\n\nextern FILE *parser_in;\nextern char *parser_text;\nextern int parser_debug;\nextern int yy_flex_debug;\n\nint parser_lex(void);\n\nextern int import_stack_ptr;\nint do_import(char *fname);\nvoid abort_import(void);\nvoid pop_import(void);\n\n#define parse_only import_stack_ptr\n\nint is_type(const char *name);\n\nint do_warning(char *toggle, warning_list_t *wnum);\nint is_warning_enabled(int warning);\n\nextern char *temp_name;\n\n#endif\n"
  },
  {
    "path": "widl/parser.l",
    "content": "/* -*-C-*-\n * IDL Compiler\n *\n * Copyright 2002 Ove Kaaven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n%option stack\n%option noinput nounput noyy_top_state\n%option 8bit never-interactive prefix=\"parser_\"\n\nnl\t\\r?\\n\nws\t[ \\f\\t\\r]\ncident\t[a-zA-Z_][0-9a-zA-Z_]*\nu_suffix\t(u|U)\nl_suffix\t(l|L)\nint\t[0-9]+({l_suffix}?{u_suffix}?|{u_suffix}?{l_suffix}?)?\nhexd\t[0-9a-fA-F]\nhex\t0(x|X){hexd}+({l_suffix}?{u_suffix}?|{u_suffix}?{l_suffix}?)?\nuuid\t{hexd}{8}-{hexd}{4}-{hexd}{4}-{hexd}{4}-{hexd}{12}\ndouble\t[0-9]+\\.[0-9]+([eE][+-]?[0-9]+)*\n\n%x QUOTE\n%x WSTRQUOTE\n%x ATTR\n%x PP_LINE\n%x PP_PRAGMA\n%x SQUOTE\n\n%{\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <ctype.h>\n#include <assert.h>\n#include <errno.h>\n#include <limits.h>\n\n#ifdef HAVE_UNISTD_H\n#include <unistd.h>\n#else\n#define YY_NO_UNISTD_H\n#endif\n\n#include \"widl.h\"\n#include \"utils.h\"\n#include \"parser.h\"\n#include \"wine/wpp.h\"\n\n#include \"parser.tab.h\"\n\nstatic void addcchar(char c);\nstatic char *get_buffered_cstring(void);\n\nstatic char *cbuffer;\nstatic int cbufidx;\nstatic int cbufalloc = 0;\n\nstatic int kw_token(const char *kw);\nstatic int attr_token(const char *kw);\n\nstatic warning_list_t *disabled_warnings = NULL;\n\n#define MAX_IMPORT_DEPTH 20\nstruct {\n  YY_BUFFER_STATE state;\n  char *input_name;\n  int   line_number;\n  char *temp_name;\n} import_stack[MAX_IMPORT_DEPTH];\nint import_stack_ptr = 0;\n\n/* converts an integer in string form to an unsigned long and prints an error\n * on overflow */\nstatic unsigned int xstrtoul(const char *nptr, char **endptr, int base)\n{\n    unsigned long val;\n\n    errno = 0;\n    val = strtoul(nptr, endptr, base);\n    if ((val == ULONG_MAX && errno == ERANGE) || ((unsigned int)val != val))\n        error_loc(\"integer constant %s is too large\\n\", nptr);\n    return val;\n}\n\nUUID *parse_uuid(const char *u)\n{\n  UUID* uuid = xmalloc(sizeof(UUID));\n  char b[3];\n  /* it would be nice to use UuidFromStringA */\n  uuid->Data1 = strtoul(u, NULL, 16);\n  uuid->Data2 = strtoul(u+9, NULL, 16);\n  uuid->Data3 = strtoul(u+14, NULL, 16);\n  b[2] = 0;\n  memcpy(b, u+19, 2); uuid->Data4[0] = strtoul(b, NULL, 16);\n  memcpy(b, u+21, 2); uuid->Data4[1] = strtoul(b, NULL, 16);\n  memcpy(b, u+24, 2); uuid->Data4[2] = strtoul(b, NULL, 16);\n  memcpy(b, u+26, 2); uuid->Data4[3] = strtoul(b, NULL, 16);\n  memcpy(b, u+28, 2); uuid->Data4[4] = strtoul(b, NULL, 16);\n  memcpy(b, u+30, 2); uuid->Data4[5] = strtoul(b, NULL, 16);\n  memcpy(b, u+32, 2); uuid->Data4[6] = strtoul(b, NULL, 16);\n  memcpy(b, u+34, 2); uuid->Data4[7] = strtoul(b, NULL, 16);\n  return uuid;\n}\n\n%}\n\n/*\n **************************************************************************\n * The flexer starts here\n **************************************************************************\n */\n%%\n<INITIAL>^{ws}*\\#{ws}*pragma{ws}+ yy_push_state(PP_PRAGMA);\n<INITIAL,ATTR>^{ws}*\\#{ws}*\tyy_push_state(PP_LINE);\n<PP_LINE>[^\\n]*         {\n                            int lineno;\n                            char *cptr, *fname;\n                            yy_pop_state();\n                            lineno = (int)strtol(yytext, &cptr, 10);\n                            if(!lineno)\n                                error_loc(\"Malformed '#...' line-directive; invalid linenumber\\n\");\n                            fname = strchr(cptr, '\"');\n                            if(!fname)\n                                error_loc(\"Malformed '#...' line-directive; missing filename\\n\");\n                            fname++;\n                            cptr = strchr(fname, '\"');\n                            if(!cptr)\n                                error_loc(\"Malformed '#...' line-directive; missing terminating \\\"\\n\");\n                            *cptr = '\\0';\n                            line_number = lineno - 1;  /* We didn't read the newline */\n                            input_name = xstrdup(fname);\n                        }\n<PP_PRAGMA>midl_echo[^\\n]*  yyless(9); yy_pop_state(); return tCPPQUOTE;\n<PP_PRAGMA>winrt[^\\n]*  {\n                            if(import_stack_ptr) {\n                                if(!winrt_mode)\n                                    error_loc(\"winrt IDL file imported in non-winrt mode\\n\");\n                            }else {\n                                const char *ptr = yytext+5;\n\n                                winrt_mode = TRUE;\n\n                                while(isspace(*ptr))\n                                    ptr++;\n                                if(!strncmp(ptr, \"ns_prefix\", 9) && (!*(ptr += 9) || isspace(*ptr)))\n                                    use_abi_namespace = TRUE;\n                            }\n                            yy_pop_state();\n                        }\n<PP_PRAGMA>[^\\n]*       parser_lval.str = xstrdup(yytext); yy_pop_state(); return aPRAGMA;\n<INITIAL>^{ws}*midl_pragma{ws}+warning return tPRAGMA_WARNING;\n<INITIAL,ATTR>\\\"\tyy_push_state(QUOTE); cbufidx = 0;\n<QUOTE>\\\"\t\t{\n\t\t\t\tyy_pop_state();\n\t\t\t\tparser_lval.str = get_buffered_cstring();\n\t\t\t\treturn aSTRING;\n\t\t\t}\n<INITIAL,ATTR>L\\\"\tyy_push_state(WSTRQUOTE); cbufidx = 0;\n<WSTRQUOTE>\\\"\t\t{\n\t\t\t\tyy_pop_state();\n\t\t\t\tparser_lval.str = get_buffered_cstring();\n\t\t\t\treturn aWSTRING;\n\t\t\t}\n<INITIAL,ATTR>\\'\tyy_push_state(SQUOTE); cbufidx = 0;\n<SQUOTE>\\'\t\t{\n\t\t\t\tyy_pop_state();\n\t\t\t\tparser_lval.str = get_buffered_cstring();\n\t\t\t\treturn aSQSTRING;\n\t\t\t}\n<QUOTE,WSTRQUOTE,SQUOTE>\\\\\\\\\t|\n<QUOTE,WSTRQUOTE>\\\\\\\"\taddcchar(yytext[1]);\n<SQUOTE>\\\\\\'\taddcchar(yytext[1]);\n<QUOTE,WSTRQUOTE,SQUOTE>\\\\.\taddcchar('\\\\'); addcchar(yytext[1]);\n<QUOTE,WSTRQUOTE,SQUOTE>.\taddcchar(yytext[0]);\n<INITIAL,ATTR>\\[\tyy_push_state(ATTR); return '[';\n<ATTR>\\]\t\tyy_pop_state(); return ']';\n<ATTR>{cident}\t\treturn attr_token(yytext);\n<ATTR>{uuid}\t\t\t{\n\t\t\t\tparser_lval.uuid = parse_uuid(yytext);\n\t\t\t\treturn aUUID;\n\t\t\t}\n<INITIAL,ATTR>{hex}\t{\n\t\t\t\tparser_lval.num = xstrtoul(yytext, NULL, 0);\n\t\t\t\treturn aHEXNUM;\n\t\t\t}\n<INITIAL,ATTR>{int}\t{\n\t\t\t\tparser_lval.num = xstrtoul(yytext, NULL, 0);\n\t\t\t\treturn aNUM;\n\t\t\t}\n<INITIAL>{double}\t{\n\t\t\t\tparser_lval.dbl = strtod(yytext, NULL);\n\t\t\t\treturn aDOUBLE;\n\t\t\t}\nSAFEARRAY{ws}*/\\(\treturn tSAFEARRAY;\n{cident}\t\treturn kw_token(yytext);\n<INITIAL,ATTR>\\n\tline_number++;\n<INITIAL,ATTR>{ws}\n<INITIAL,ATTR>\\<\\<\treturn SHL;\n<INITIAL,ATTR>\\>\\>\treturn SHR;\n<INITIAL,ATTR>\\-\\>\treturn MEMBERPTR;\n<INITIAL,ATTR>==\treturn EQUALITY;\n<INITIAL,ATTR>!=\treturn INEQUALITY;\n<INITIAL,ATTR>\\>=\treturn GREATEREQUAL;\n<INITIAL,ATTR>\\<=\treturn LESSEQUAL;\n<INITIAL,ATTR>\\|\\|\treturn LOGICALOR;\n<INITIAL,ATTR>&&\treturn LOGICALAND;\n<INITIAL,ATTR>\\.\\.\\.\treturn ELLIPSIS;\n<INITIAL,ATTR>.\t\treturn yytext[0];\n<<EOF>>\t\t\t{\n\t\t\t\tif (import_stack_ptr)\n\t\t\t\t\treturn aEOF;\n\t\t\t\telse yyterminate();\n\t\t\t}\n%%\n\n#ifndef parser_wrap\nint parser_wrap(void)\n{\n\treturn 1;\n}\n#endif\n\nstruct keyword {\n\tconst char *kw;\n\tint token;\n};\n\n/* This table MUST be alphabetically sorted on the kw field */\nstatic const struct keyword keywords[] = {\n\t{\"FALSE\",\t\t\ttFALSE},\n\t{\"NULL\",\t\t\ttNULL},\n\t{\"TRUE\",\t\t\ttTRUE},\n\t{\"__cdecl\",\t\t\ttCDECL},\n\t{\"__fastcall\",\t\t\ttFASTCALL},\n\t{\"__int3264\",\t\t\ttINT3264},\n\t{\"__int64\",\t\t\ttINT64},\n\t{\"__pascal\",\t\t\ttPASCAL},\n\t{\"__stdcall\",\t\t\ttSTDCALL},\n\t{\"_cdecl\",\t\t\ttCDECL},\n\t{\"_fastcall\",\t\t\ttFASTCALL},\n\t{\"_pascal\",\t\t\ttPASCAL},\n\t{\"_stdcall\",\t\t\ttSTDCALL},\n\t{\"boolean\",\t\t\ttBOOLEAN},\n\t{\"byte\",\t\t\ttBYTE},\n\t{\"case\",\t\t\ttCASE},\n\t{\"cdecl\",\t\t\ttCDECL},\n\t{\"char\",\t\t\ttCHAR},\n\t{\"coclass\",\t\t\ttCOCLASS},\n\t{\"const\",\t\t\ttCONST},\n\t{\"cpp_quote\",\t\t\ttCPPQUOTE},\n\t{\"default\",\t\t\ttDEFAULT},\n\t{\"dispinterface\",\t\ttDISPINTERFACE},\n\t{\"double\",\t\t\ttDOUBLE},\n\t{\"enum\",\t\t\ttENUM},\n\t{\"error_status_t\",\t\ttERRORSTATUST},\n\t{\"extern\",\t\t\ttEXTERN},\n\t{\"float\",\t\t\ttFLOAT},\n\t{\"handle_t\",\t\t\ttHANDLET},\n\t{\"hyper\",\t\t\ttHYPER},\n\t{\"import\",\t\t\ttIMPORT},\n\t{\"importlib\",\t\t\ttIMPORTLIB},\n\t{\"inline\",\t\t\ttINLINE},\n\t{\"int\",\t\t\t\ttINT},\n\t{\"interface\",\t\t\ttINTERFACE},\n\t{\"library\",\t\t\ttLIBRARY},\n\t{\"long\",\t\t\ttLONG},\n\t{\"methods\",\t\t\ttMETHODS},\n\t{\"module\",\t\t\ttMODULE},\n\t{\"namespace\",\t\t\ttNAMESPACE},\n\t{\"pascal\",\t\t\ttPASCAL},\n\t{\"properties\",\t\t\ttPROPERTIES},\n\t{\"register\",\t\t\ttREGISTER},\n\t{\"short\",\t\t\ttSHORT},\n\t{\"signed\",\t\t\ttSIGNED},\n\t{\"sizeof\",\t\t\ttSIZEOF},\n        {\"small\",\t\t\ttSMALL},\n\t{\"static\",\t\t\ttSTATIC},\n\t{\"stdcall\",\t\t\ttSTDCALL},\n\t{\"struct\",\t\t\ttSTRUCT},\n\t{\"switch\",\t\t\ttSWITCH},\n\t{\"typedef\",\t\t\ttTYPEDEF},\n\t{\"union\",\t\t\ttUNION},\n\t{\"unsigned\",\t\t\ttUNSIGNED},\n\t{\"void\",\t\t\ttVOID},\n\t{\"wchar_t\",\t\t\ttWCHAR},\n};\n#define NKEYWORDS (sizeof(keywords)/sizeof(keywords[0]))\n\n/* keywords only recognized in attribute lists\n * This table MUST be alphabetically sorted on the kw field\n */\nstatic const struct keyword attr_keywords[] =\n{\n        {\"aggregatable\",                tAGGREGATABLE},\n        {\"allocate\",                    tALLOCATE},\n        {\"annotation\",                  tANNOTATION},\n        {\"apartment\",                   tAPARTMENT},\n        {\"appobject\",                   tAPPOBJECT},\n        {\"async\",                       tASYNC},\n        {\"async_uuid\",                  tASYNCUUID},\n        {\"auto_handle\",                 tAUTOHANDLE},\n        {\"bindable\",                    tBINDABLE},\n        {\"both\",                        tBOTH},\n        {\"broadcast\",                   tBROADCAST},\n        {\"byte_count\",                  tBYTECOUNT},\n        {\"call_as\",                     tCALLAS},\n        {\"callback\",                    tCALLBACK},\n        {\"code\",                        tCODE},\n        {\"comm_status\",                 tCOMMSTATUS},\n        {\"context_handle\",              tCONTEXTHANDLE},\n        {\"context_handle_noserialize\",  tCONTEXTHANDLENOSERIALIZE},\n        {\"context_handle_serialize\",    tCONTEXTHANDLENOSERIALIZE},\n        {\"control\",                     tCONTROL},\n        {\"decode\",                      tDECODE},\n        {\"defaultbind\",                 tDEFAULTBIND},\n        {\"defaultcollelem\",             tDEFAULTCOLLELEM},\n        {\"defaultvalue\",                tDEFAULTVALUE},\n        {\"defaultvtable\",               tDEFAULTVTABLE},\n        {\"disable_consistency_check\",   tDISABLECONSISTENCYCHECK},\n        {\"displaybind\",                 tDISPLAYBIND},\n        {\"dllname\",                     tDLLNAME},\n        {\"dual\",                        tDUAL},\n        {\"enable_allocate\",             tENABLEALLOCATE},\n        {\"encode\",                      tENCODE},\n        {\"endpoint\",                    tENDPOINT},\n        {\"entry\",                       tENTRY},\n        {\"explicit_handle\",             tEXPLICITHANDLE},\n        {\"fault_status\",                tFAULTSTATUS},\n        {\"force_allocate\",              tFORCEALLOCATE},\n        {\"free\",                        tFREE},\n        {\"handle\",                      tHANDLE},\n        {\"helpcontext\",                 tHELPCONTEXT},\n        {\"helpfile\",                    tHELPFILE},\n        {\"helpstring\",                  tHELPSTRING},\n        {\"helpstringcontext\",           tHELPSTRINGCONTEXT},\n        {\"helpstringdll\",               tHELPSTRINGDLL},\n        {\"hidden\",                      tHIDDEN},\n        {\"id\",                          tID},\n        {\"idempotent\",                  tIDEMPOTENT},\n        {\"ignore\",                      tIGNORE},\n        {\"iid_is\",                      tIIDIS},\n        {\"immediatebind\",               tIMMEDIATEBIND},\n        {\"implicit_handle\",             tIMPLICITHANDLE},\n        {\"in\",                          tIN},\n        {\"in_line\",                     tIN_LINE},\n        {\"input_sync\",                  tINPUTSYNC},\n        {\"lcid\",                        tLCID},\n        {\"length_is\",                   tLENGTHIS},\n        {\"licensed\",                    tLICENSED},\n        {\"local\",                       tLOCAL},\n        {\"maybe\",                       tMAYBE},\n        {\"message\",                     tMESSAGE},\n        {\"neutral\",                     tNEUTRAL},\n        {\"nocode\",                      tNOCODE},\n        {\"nonbrowsable\",                tNONBROWSABLE},\n        {\"noncreatable\",                tNONCREATABLE},\n        {\"nonextensible\",               tNONEXTENSIBLE},\n        {\"notify\",                      tNOTIFY},\n        {\"notify_flag\",                 tNOTIFYFLAG},\n        {\"object\",                      tOBJECT},\n        {\"odl\",                         tODL},\n        {\"oleautomation\",               tOLEAUTOMATION},\n        {\"optimize\",                    tOPTIMIZE},\n        {\"optional\",                    tOPTIONAL},\n        {\"out\",                         tOUT},\n        {\"partial_ignore\",              tPARTIALIGNORE},\n        {\"pointer_default\",             tPOINTERDEFAULT},\n        {\"progid\",                      tPROGID},\n        {\"propget\",                     tPROPGET},\n        {\"propput\",                     tPROPPUT},\n        {\"propputref\",                  tPROPPUTREF},\n        {\"proxy\",                       tPROXY},\n        {\"ptr\",                         tPTR},\n        {\"public\",                      tPUBLIC},\n        {\"range\",                       tRANGE},\n        {\"readonly\",                    tREADONLY},\n        {\"ref\",                         tREF},\n        {\"represent_as\",                tREPRESENTAS},\n        {\"requestedit\",                 tREQUESTEDIT},\n        {\"restricted\",                  tRESTRICTED},\n        {\"retval\",                      tRETVAL},\n        {\"single\",                      tSINGLE},\n        {\"size_is\",                     tSIZEIS},\n        {\"source\",                      tSOURCE},\n        {\"strict_context_handle\",       tSTRICTCONTEXTHANDLE},\n        {\"string\",                      tSTRING},\n        {\"switch_is\",                   tSWITCHIS},\n        {\"switch_type\",                 tSWITCHTYPE},\n        {\"threading\",                   tTHREADING},\n        {\"transmit_as\",                 tTRANSMITAS},\n        {\"uidefault\",                   tUIDEFAULT},\n        {\"unique\",                      tUNIQUE},\n        {\"user_marshal\",                tUSERMARSHAL},\n        {\"usesgetlasterror\",            tUSESGETLASTERROR},\n        {\"uuid\",                        tUUID},\n        {\"v1_enum\",                     tV1ENUM},\n        {\"vararg\",                      tVARARG},\n        {\"version\",                     tVERSION},\n        {\"vi_progid\",                   tVIPROGID},\n        {\"wire_marshal\",                tWIREMARSHAL},\n};\n\n/* attributes TODO:\n    custom\n    first_is\n    last_is\n    max_is\n    min_is\n*/\n\n#define KWP(p) ((const struct keyword *)(p))\n\nstatic int kw_cmp_func(const void *s1, const void *s2)\n{\n\treturn strcmp(KWP(s1)->kw, KWP(s2)->kw);\n}\n\nstatic int kw_token(const char *kw)\n{\n\tstruct keyword key, *kwp;\n\tkey.kw = kw;\n\tkwp = bsearch(&key, keywords, NKEYWORDS, sizeof(keywords[0]), kw_cmp_func);\n\tif (kwp && (winrt_mode || kwp->token != tNAMESPACE)) {\n\t\tparser_lval.str = xstrdup(kwp->kw);\n\t\treturn kwp->token;\n\t}\n\tparser_lval.str = xstrdup(kw);\n\treturn is_type(kw) ? aKNOWNTYPE : aIDENTIFIER;\n}\n\nstatic int attr_token(const char *kw)\n{\n        struct keyword key, *kwp;\n        key.kw = kw;\n        kwp = bsearch(&key, attr_keywords, sizeof(attr_keywords)/sizeof(attr_keywords[0]),\n                      sizeof(attr_keywords[0]), kw_cmp_func);\n        if (kwp) {\n            parser_lval.str = xstrdup(kwp->kw);\n            return kwp->token;\n        }\n        return kw_token(kw);\n}\n\nstatic void addcchar(char c)\n{\n\tif(cbufidx >= cbufalloc)\n\t{\n\t\tcbufalloc += 1024;\n\t\tcbuffer = xrealloc(cbuffer, cbufalloc * sizeof(cbuffer[0]));\n\t\tif(cbufalloc > 65536)\n\t\t\tparser_warning(\"Reallocating string buffer larger than 64kB\\n\");\n\t}\n\tcbuffer[cbufidx++] = c;\n}\n\nstatic char *get_buffered_cstring(void)\n{\n\taddcchar(0);\n\treturn xstrdup(cbuffer);\n}\n\nvoid pop_import(void)\n{\n\tint ptr = import_stack_ptr-1;\n\n\tfclose(yyin);\n\tyy_delete_buffer( YY_CURRENT_BUFFER );\n\tyy_switch_to_buffer( import_stack[ptr].state );\n\tif (temp_name) {\n\t\tunlink(temp_name);\n\t\tfree(temp_name);\n\t}\n\ttemp_name = import_stack[ptr].temp_name;\n\tinput_name = import_stack[ptr].input_name;\n\tline_number = import_stack[ptr].line_number;\n\timport_stack_ptr--;\n}\n\nstruct imports {\n    char *name;\n    struct imports *next;\n} *first_import;\n\nint do_import(char *fname)\n{\n    FILE *f;\n    char *path, *name;\n    struct imports *import;\n    int ptr = import_stack_ptr;\n    int ret, fd;\n\n    import = first_import;\n    while (import && strcmp(import->name, fname))\n        import = import->next;\n    if (import) return 0; /* already imported */\n\n    import = xmalloc(sizeof(struct imports));\n    import->name = xstrdup(fname);\n    import->next = first_import;\n    first_import = import;\n\n    /* don't search for a file name with a path in the include directories,\n     * for compatibility with MIDL */\n    if (strchr( fname, '/' ) || strchr( fname, '\\\\' ))\n        path = xstrdup( fname );\n    else if (!(path = wpp_find_include( fname, input_name )))\n        error_loc(\"Unable to open include file %s\\n\", fname);\n\n    if (import_stack_ptr == MAX_IMPORT_DEPTH)\n        error_loc(\"Exceeded max import depth\\n\");\n\n    import_stack[ptr].temp_name = temp_name;\n    import_stack[ptr].input_name = input_name;\n    import_stack[ptr].line_number = line_number;\n    import_stack_ptr++;\n    input_name = path;\n    line_number = 1;\n\n    name = xstrdup( \"widl.XXXXXX\" );\n    if((fd = mkstemps( name, 0 )) == -1)\n        error(\"Could not generate a temp name from %s\\n\", name);\n\n    temp_name = name;\n    if (!(f = fdopen(fd, \"wt\")))\n        error(\"Could not open fd %s for writing\\n\", name);\n\n    ret = wpp_parse( path, f );\n    fclose( f );\n    if (ret) exit(1);\n\n    if((f = fopen(temp_name, \"r\")) == NULL)\n        error_loc(\"Unable to open %s\\n\", temp_name);\n\n    import_stack[ptr].state = YY_CURRENT_BUFFER;\n    yy_switch_to_buffer(yy_create_buffer(f, YY_BUF_SIZE));\n    return 1;\n}\n\nvoid abort_import(void)\n{\n\tint ptr;\n\n\tfor (ptr=0; ptr<import_stack_ptr; ptr++)\n\t\tunlink(import_stack[ptr].temp_name);\n}\n\nstatic void warning_disable(int warning)\n{\n    warning_t *warning_entry;\n    LIST_FOR_EACH_ENTRY(warning_entry, disabled_warnings, warning_t, entry)\n        if(warning_entry->num == warning)\n            return;\n    warning_entry = xmalloc( sizeof(*warning_entry) );\n    warning_entry->num = warning;\n    list_add_tail(disabled_warnings, &warning_entry->entry);\n}\n\nstatic void warning_enable(int warning)\n{\n    warning_t *warning_entry;\n    LIST_FOR_EACH_ENTRY(warning_entry, disabled_warnings, warning_t, entry)\n        if(warning_entry->num == warning)\n        {\n            list_remove(&warning_entry->entry);\n            free(warning_entry);\n            break;\n        }\n}\n\nint do_warning(char *toggle, warning_list_t *wnum)\n{\n    warning_t *warning, *next;\n    int ret = 1;\n    if(!disabled_warnings)\n    {\n        disabled_warnings = xmalloc( sizeof(*disabled_warnings) );\n        list_init( disabled_warnings );\n    }\n\n    if(!strcmp(toggle, \"disable\"))\n        LIST_FOR_EACH_ENTRY(warning, wnum, warning_t, entry)\n            warning_disable(warning->num);\n    else if(!strcmp(toggle, \"enable\"))\n        LIST_FOR_EACH_ENTRY(warning, wnum, warning_t, entry)\n            warning_enable(warning->num);\n    else\n        ret = 0;\n\n    LIST_FOR_EACH_ENTRY_SAFE(warning, next, wnum, warning_t, entry)\n        free(warning);\n    return ret;\n}\n\nint is_warning_enabled(int warning)\n{\n    warning_t *warning_entry;\n    if(!disabled_warnings)\n        return 1;\n    LIST_FOR_EACH_ENTRY(warning_entry, disabled_warnings, warning_t, entry)\n        if(warning_entry->num == warning)\n            return 0;\n    return 1;\n}\n"
  },
  {
    "path": "widl/parser.y",
    "content": "%{\n/*\n * IDL Compiler\n *\n * Copyright 2002 Ove Kaaven\n * Copyright 2006-2008 Robert Shearman\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <stdarg.h>\n#include <assert.h>\n#include <ctype.h>\n#include <string.h>\n\n#include \"widl.h\"\n#include \"utils.h\"\n#include \"parser.h\"\n#include \"header.h\"\n#include \"typelib.h\"\n#include \"typegen.h\"\n#include \"expr.h\"\n#include \"typetree.h\"\n\nstatic unsigned char pointer_default = FC_UP;\n\ntypedef struct list typelist_t;\nstruct typenode {\n  type_t *type;\n  struct list entry;\n};\n\nstruct _import_t\n{\n  char *name;\n  int import_performed;\n};\n\ntypedef struct _decl_spec_t\n{\n  type_t *type;\n  attr_list_t *attrs;\n  enum storage_class stgclass;\n} decl_spec_t;\n\ntypelist_t incomplete_types = LIST_INIT(incomplete_types);\n\nstatic void fix_incomplete(void);\nstatic void fix_incomplete_types(type_t *complete_type);\n\nstatic str_list_t *append_str(str_list_t *list, char *str);\nstatic attr_list_t *append_attr(attr_list_t *list, attr_t *attr);\nstatic attr_list_t *append_attr_list(attr_list_t *new_list, attr_list_t *old_list);\nstatic decl_spec_t *make_decl_spec(type_t *type, decl_spec_t *left, decl_spec_t *right, attr_t *attr, enum storage_class stgclass);\nstatic attr_t *make_attr(enum attr_type type);\nstatic attr_t *make_attrv(enum attr_type type, unsigned int val);\nstatic attr_t *make_attrp(enum attr_type type, void *val);\nstatic expr_list_t *append_expr(expr_list_t *list, expr_t *expr);\nstatic array_dims_t *append_array(array_dims_t *list, expr_t *expr);\nstatic var_t *declare_var(attr_list_t *attrs, decl_spec_t *decl_spec, const declarator_t *decl, int top);\nstatic var_list_t *set_var_types(attr_list_t *attrs, decl_spec_t *decl_spec, declarator_list_t *decls);\nstatic ifref_list_t *append_ifref(ifref_list_t *list, ifref_t *iface);\nstatic ifref_t *make_ifref(type_t *iface);\nstatic var_list_t *append_var_list(var_list_t *list, var_list_t *vars);\nstatic declarator_list_t *append_declarator(declarator_list_t *list, declarator_t *p);\nstatic declarator_t *make_declarator(var_t *var);\nstatic type_t *make_safearray(type_t *type);\nstatic typelib_t *make_library(const char *name, const attr_list_t *attrs);\nstatic type_t *append_ptrchain_type(type_t *ptrchain, type_t *type);\nstatic warning_list_t *append_warning(warning_list_t *, int);\n\nstatic type_t *reg_typedefs(decl_spec_t *decl_spec, var_list_t *names, attr_list_t *attrs);\nstatic type_t *find_type_or_error(const char *name, int t);\nstatic type_t *find_type_or_error2(char *name, int t);\n\nstatic var_t *reg_const(var_t *var);\n\nstatic void push_namespace(const char *name);\nstatic void pop_namespace(const char *name);\n\nstatic char *gen_name(void);\nstatic void check_arg_attrs(const var_t *arg);\nstatic void check_statements(const statement_list_t *stmts, int is_inside_library);\nstatic void check_all_user_types(const statement_list_t *stmts);\nstatic attr_list_t *check_iface_attrs(const char *name, attr_list_t *attrs);\nstatic attr_list_t *check_function_attrs(const char *name, attr_list_t *attrs);\nstatic attr_list_t *check_typedef_attrs(attr_list_t *attrs);\nstatic attr_list_t *check_enum_attrs(attr_list_t *attrs);\nstatic attr_list_t *check_struct_attrs(attr_list_t *attrs);\nstatic attr_list_t *check_union_attrs(attr_list_t *attrs);\nstatic attr_list_t *check_field_attrs(const char *name, attr_list_t *attrs);\nstatic attr_list_t *check_library_attrs(const char *name, attr_list_t *attrs);\nstatic attr_list_t *check_dispiface_attrs(const char *name, attr_list_t *attrs);\nstatic attr_list_t *check_module_attrs(const char *name, attr_list_t *attrs);\nstatic attr_list_t *check_coclass_attrs(const char *name, attr_list_t *attrs);\nconst char *get_attr_display_name(enum attr_type type);\nstatic void add_explicit_handle_if_necessary(const type_t *iface, var_t *func);\nstatic void check_def(const type_t *t);\n\nstatic statement_t *make_statement(enum statement_type type);\nstatic statement_t *make_statement_type_decl(type_t *type);\nstatic statement_t *make_statement_reference(type_t *type);\nstatic statement_t *make_statement_declaration(var_t *var);\nstatic statement_t *make_statement_library(typelib_t *typelib);\nstatic statement_t *make_statement_pragma(const char *str);\nstatic statement_t *make_statement_cppquote(const char *str);\nstatic statement_t *make_statement_importlib(const char *str);\nstatic statement_t *make_statement_module(type_t *type);\nstatic statement_t *make_statement_typedef(var_list_t *names);\nstatic statement_t *make_statement_import(const char *str);\nstatic statement_list_t *append_statement(statement_list_t *list, statement_t *stmt);\nstatic statement_list_t *append_statements(statement_list_t *, statement_list_t *);\nstatic attr_list_t *append_attribs(attr_list_t *, attr_list_t *);\n\nstatic struct namespace global_namespace = {\n    NULL, NULL, LIST_INIT(global_namespace.entry), LIST_INIT(global_namespace.children)\n};\n\nstatic struct namespace *current_namespace = &global_namespace;\n\n%}\n%union {\n\tattr_t *attr;\n\tattr_list_t *attr_list;\n\tstr_list_t *str_list;\n\texpr_t *expr;\n\texpr_list_t *expr_list;\n\tarray_dims_t *array_dims;\n\ttype_t *type;\n\tvar_t *var;\n\tvar_list_t *var_list;\n\tdeclarator_t *declarator;\n\tdeclarator_list_t *declarator_list;\n\tstatement_t *statement;\n\tstatement_list_t *stmt_list;\n\twarning_t *warning;\n\twarning_list_t *warning_list;\n\tifref_t *ifref;\n\tifref_list_t *ifref_list;\n\tchar *str;\n\tUUID *uuid;\n\tunsigned int num;\n\tdouble dbl;\n\tinterface_info_t ifinfo;\n\ttypelib_t *typelib;\n\tstruct _import_t *import;\n\tstruct _decl_spec_t *declspec;\n\tenum storage_class stgclass;\n}\n\n%token <str> aIDENTIFIER aPRAGMA\n%token <str> aKNOWNTYPE\n%token <num> aNUM aHEXNUM\n%token <dbl> aDOUBLE\n%token <str> aSTRING aWSTRING aSQSTRING\n%token <uuid> aUUID\n%token aEOF\n%token SHL SHR\n%token MEMBERPTR\n%token EQUALITY INEQUALITY\n%token GREATEREQUAL LESSEQUAL\n%token LOGICALOR LOGICALAND\n%token ELLIPSIS\n%token tAGGREGATABLE tALLOCATE tANNOTATION tAPPOBJECT tASYNC tASYNCUUID\n%token tAUTOHANDLE tBINDABLE tBOOLEAN tBROADCAST tBYTE tBYTECOUNT\n%token tCALLAS tCALLBACK tCASE tCDECL tCHAR tCOCLASS tCODE tCOMMSTATUS\n%token tCONST tCONTEXTHANDLE tCONTEXTHANDLENOSERIALIZE\n%token tCONTEXTHANDLESERIALIZE tCONTROL tCPPQUOTE\n%token tDECODE tDEFAULT tDEFAULTBIND\n%token tDEFAULTCOLLELEM\n%token tDEFAULTVALUE\n%token tDEFAULTVTABLE\n%token tDISABLECONSISTENCYCHECK tDISPLAYBIND\n%token tDISPINTERFACE\n%token tDLLNAME tDOUBLE tDUAL\n%token tENABLEALLOCATE tENCODE tENDPOINT\n%token tENTRY tENUM tERRORSTATUST\n%token tEXPLICITHANDLE tEXTERN\n%token tFALSE\n%token tFASTCALL tFAULTSTATUS\n%token tFLOAT tFORCEALLOCATE\n%token tHANDLE\n%token tHANDLET\n%token tHELPCONTEXT tHELPFILE\n%token tHELPSTRING tHELPSTRINGCONTEXT tHELPSTRINGDLL\n%token tHIDDEN\n%token tHYPER tID tIDEMPOTENT\n%token tIGNORE tIIDIS\n%token tIMMEDIATEBIND\n%token tIMPLICITHANDLE\n%token tIMPORT tIMPORTLIB\n%token tIN tIN_LINE tINLINE\n%token tINPUTSYNC\n%token tINT tINT3264 tINT64\n%token tINTERFACE\n%token tLCID\n%token tLENGTHIS tLIBRARY\n%token tLICENSED tLOCAL\n%token tLONG\n%token tMAYBE tMESSAGE\n%token tMETHODS\n%token tMODULE\n%token tNAMESPACE\n%token tNOCODE tNONBROWSABLE\n%token tNONCREATABLE\n%token tNONEXTENSIBLE\n%token tNOTIFY tNOTIFYFLAG\n%token tNULL\n%token tOBJECT tODL tOLEAUTOMATION\n%token tOPTIMIZE tOPTIONAL\n%token tOUT\n%token tPARTIALIGNORE tPASCAL\n%token tPOINTERDEFAULT\n%token tPRAGMA_WARNING\n%token tPROGID tPROPERTIES\n%token tPROPGET tPROPPUT tPROPPUTREF\n%token tPROXY tPTR\n%token tPUBLIC\n%token tRANGE\n%token tREADONLY tREF\n%token tREGISTER tREPRESENTAS\n%token tREQUESTEDIT\n%token tRESTRICTED\n%token tRETVAL\n%token tSAFEARRAY\n%token tSHORT\n%token tSIGNED\n%token tSIZEIS tSIZEOF\n%token tSMALL\n%token tSOURCE\n%token tSTATIC\n%token tSTDCALL\n%token tSTRICTCONTEXTHANDLE\n%token tSTRING tSTRUCT\n%token tSWITCH tSWITCHIS tSWITCHTYPE\n%token tTHREADING tTRANSMITAS\n%token tTRUE\n%token tTYPEDEF\n%token tUIDEFAULT tUNION\n%token tUNIQUE\n%token tUNSIGNED\n%token tUSESGETLASTERROR tUSERMARSHAL tUUID\n%token tV1ENUM\n%token tVARARG\n%token tVERSION tVIPROGID\n%token tVOID\n%token tWCHAR tWIREMARSHAL\n%token tAPARTMENT tNEUTRAL tSINGLE tFREE tBOTH\n\n%type <attr> attribute type_qualifier function_specifier\n%type <attr_list> m_attributes attributes attrib_list m_type_qual_list\n%type <str_list> str_list\n%type <expr> m_expr expr expr_const expr_int_const array m_bitfield\n%type <expr_list> m_exprs /* exprs expr_list */ expr_list_int_const\n%type <ifinfo> interfacehdr\n%type <stgclass> storage_cls_spec\n%type <declspec> decl_spec decl_spec_no_type m_decl_spec_no_type\n%type <type> inherit interface interfacedef interfacedec\n%type <type> dispinterface dispinterfacehdr dispinterfacedef\n%type <type> module modulehdr moduledef\n%type <str> namespacedef\n%type <type> base_type int_std\n%type <type> enumdef structdef uniondef typedecl\n%type <type> type\n%type <ifref> coclass_int\n%type <ifref_list> coclass_ints\n%type <var> arg ne_union_field union_field s_field case enum declaration\n%type <var> funcdef\n%type <var_list> m_args arg_list args dispint_meths\n%type <var_list> fields ne_union_fields cases enums enum_list dispint_props field\n%type <var> m_ident ident\n%type <declarator> declarator direct_declarator init_declarator struct_declarator\n%type <declarator> m_any_declarator any_declarator any_declarator_no_direct any_direct_declarator\n%type <declarator> m_abstract_declarator abstract_declarator abstract_declarator_no_direct abstract_direct_declarator\n%type <declarator_list> declarator_list struct_declarator_list\n%type <type> coclass coclasshdr coclassdef\n%type <num> pointer_type threading_type version\n%type <str> libraryhdr callconv cppquote importlib import t_ident\n%type <uuid> uuid_string\n%type <import> import_start\n%type <typelib> library_start librarydef\n%type <statement> statement typedef pragma_warning\n%type <stmt_list> gbl_statements imp_statements int_statements\n%type <warning_list> warnings\n\n%left ','\n%right '?' ':'\n%left LOGICALOR\n%left LOGICALAND\n%left '|'\n%left '^'\n%left '&'\n%left EQUALITY INEQUALITY\n%left '<' '>' LESSEQUAL GREATEREQUAL\n%left SHL SHR\n%left '-' '+'\n%left '*' '/' '%'\n%right '!' '~' CAST PPTR POS NEG ADDRESSOF tSIZEOF\n%left '.' MEMBERPTR '[' ']'\n\n%define parse.error verbose\n\n%%\n\ninput:   gbl_statements\t\t\t\t{ fix_incomplete();\n\t\t\t\t\t\t  check_statements($1, FALSE);\n\t\t\t\t\t\t  check_all_user_types($1);\n\t\t\t\t\t\t  write_header($1);\n\t\t\t\t\t\t  write_id_data($1);\n\t\t\t\t\t\t  write_proxies($1);\n\t\t\t\t\t\t  write_client($1);\n\t\t\t\t\t\t  write_server($1);\n\t\t\t\t\t\t  write_regscript($1);\n\t\t\t\t\t\t  write_dlldata($1);\n\t\t\t\t\t\t  write_local_stubs($1);\n\t\t\t\t\t\t  write_relay16($1);\n\t\t\t\t\t\t}\n\t;\n\ngbl_statements:\t\t\t\t\t{ $$ = NULL; }\n\t| gbl_statements namespacedef '{' { push_namespace($2); } gbl_statements '}'\n\t\t\t\t\t\t{ pop_namespace($2); $$ = append_statements($1, $5); }\n\t| gbl_statements interfacedec\t\t{ $$ = append_statement($1, make_statement_reference($2)); }\n\t| gbl_statements interfacedef\t\t{ $$ = append_statement($1, make_statement_type_decl($2)); }\n\t| gbl_statements coclass ';'\t\t{ $$ = $1;\n\t\t\t\t\t\t  reg_type($2, $2->name, current_namespace, 0);\n\t\t\t\t\t\t}\n\t| gbl_statements coclassdef\t\t{ $$ = append_statement($1, make_statement_type_decl($2));\n\t\t\t\t\t\t  reg_type($2, $2->name, current_namespace, 0);\n\t\t\t\t\t\t}\n\t| gbl_statements moduledef\t\t{ $$ = append_statement($1, make_statement_module($2)); }\n\t| gbl_statements librarydef\t\t{ $$ = append_statement($1, make_statement_library($2)); }\n\t| gbl_statements statement\t\t{ $$ = append_statement($1, $2); }\n\t;\n\nimp_statements:\t\t\t\t\t{ $$ = NULL; }\n\t| imp_statements interfacedec\t\t{ $$ = append_statement($1, make_statement_reference($2)); }\n\t| imp_statements namespacedef '{' { push_namespace($2); } imp_statements '}'\n\t\t\t\t\t\t{ pop_namespace($2); $$ = append_statements($1, $5); }\n\t| imp_statements interfacedef\t\t{ $$ = append_statement($1, make_statement_type_decl($2)); }\n\t| imp_statements coclass ';'\t\t{ $$ = $1; reg_type($2, $2->name, current_namespace, 0); }\n\t| imp_statements coclassdef\t\t{ $$ = append_statement($1, make_statement_type_decl($2));\n\t\t\t\t\t\t  reg_type($2, $2->name, current_namespace, 0);\n\t\t\t\t\t\t}\n\t| imp_statements moduledef\t\t{ $$ = append_statement($1, make_statement_module($2)); }\n\t| imp_statements statement\t\t{ $$ = append_statement($1, $2); }\n\t| imp_statements importlib\t\t{ $$ = append_statement($1, make_statement_importlib($2)); }\n\t| imp_statements librarydef\t\t{ $$ = append_statement($1, make_statement_library($2)); }\n\t;\n\nint_statements:\t\t\t\t\t{ $$ = NULL; }\n\t| int_statements statement\t\t{ $$ = append_statement($1, $2); }\n\t;\n\nsemicolon_opt:\n\t| ';'\n\t;\n\nstatement:\n\t  cppquote\t\t\t\t{ $$ = make_statement_cppquote($1); }\n\t| typedecl ';'\t\t\t\t{ $$ = make_statement_type_decl($1); }\n\t| declaration ';'\t\t\t{ $$ = make_statement_declaration($1); }\n\t| import\t\t\t\t{ $$ = make_statement_import($1); }\n\t| typedef ';'\t\t\t\t{ $$ = $1; }\n\t| aPRAGMA\t\t\t\t{ $$ = make_statement_pragma($1); }\n\t| pragma_warning { $$ = NULL; }\n\t;\n\npragma_warning: tPRAGMA_WARNING '(' aIDENTIFIER ':' warnings ')'\n                  {\n                      int result;\n                      $$ = NULL;\n                      result = do_warning($3, $5);\n                      if(!result)\n                          error_loc(\"expected \\\"disable\\\" or \\\"enable\\\"\\n\");\n                  }\n\t;\n\nwarnings:\n\t  aNUM { $$ = append_warning(NULL, $1); }\n\t| warnings aNUM { $$ = append_warning($1, $2); }\n\t;\n\ntypedecl:\n\t  enumdef\n\t| tENUM aIDENTIFIER                     { $$ = type_new_enum($2, current_namespace, FALSE, NULL); }\n\t| structdef\n\t| tSTRUCT aIDENTIFIER                   { $$ = type_new_struct($2, current_namespace, FALSE, NULL); }\n\t| uniondef\n\t| tUNION aIDENTIFIER                    { $$ = type_new_nonencapsulated_union($2, FALSE, NULL); }\n\t| attributes enumdef                    { $$ = $2; $$->attrs = check_enum_attrs($1); }\n\t| attributes structdef                  { $$ = $2; $$->attrs = check_struct_attrs($1); }\n\t| attributes uniondef                   { $$ = $2; $$->attrs = check_union_attrs($1); }\n\t;\n\ncppquote: tCPPQUOTE '(' aSTRING ')'\t\t{ $$ = $3; }\n\t;\nimport_start: tIMPORT aSTRING ';'\t\t{ assert(yychar == YYEMPTY);\n\t\t\t\t\t\t  $$ = xmalloc(sizeof(struct _import_t));\n\t\t\t\t\t\t  $$->name = $2;\n\t\t\t\t\t\t  $$->import_performed = do_import($2);\n\t\t\t\t\t\t  if (!$$->import_performed) yychar = aEOF;\n\t\t\t\t\t\t}\n\t;\n\nimport: import_start imp_statements aEOF\t{ $$ = $1->name;\n\t\t\t\t\t\t  if ($1->import_performed) pop_import();\n\t\t\t\t\t\t  free($1);\n\t\t\t\t\t\t}\n\t;\n\nimportlib: tIMPORTLIB '(' aSTRING ')'\n\t   semicolon_opt\t\t\t{ $$ = $3; if(!parse_only) add_importlib($3); }\n\t;\n\nlibraryhdr: tLIBRARY aIDENTIFIER\t\t{ $$ = $2; }\n\t|   tLIBRARY aKNOWNTYPE\t\t\t{ $$ = $2; }\n\t;\nlibrary_start: attributes libraryhdr '{'\t{ $$ = make_library($2, check_library_attrs($2, $1));\n\t\t\t\t\t\t  if (!parse_only) start_typelib($$);\n\t\t\t\t\t\t}\n\t;\nlibrarydef: library_start imp_statements '}'\n\t    semicolon_opt\t\t\t{ $$ = $1;\n\t\t\t\t\t\t  $$->stmts = $2;\n\t\t\t\t\t\t  if (!parse_only) end_typelib();\n\t\t\t\t\t\t}\n\t;\n\nm_args:\t\t\t\t\t\t{ $$ = NULL; }\n\t| args\n\t;\n\narg_list: arg\t\t\t\t\t{ check_arg_attrs($1); $$ = append_var( NULL, $1 ); }\n\t| arg_list ',' arg\t\t\t{ check_arg_attrs($3); $$ = append_var( $1, $3 ); }\n\t;\n\nargs:\t  arg_list\n\t| arg_list ',' ELLIPSIS\t\t\t{ $$ = append_var( $1, make_var(strdup(\"...\")) ); }\n\t;\n\n/* split into two rules to get bison to resolve a tVOID conflict */\narg:\t  attributes decl_spec m_any_declarator\t{ if ($2->stgclass != STG_NONE && $2->stgclass != STG_REGISTER)\n\t\t\t\t\t\t    error_loc(\"invalid storage class for function parameter\\n\");\n\t\t\t\t\t\t  $$ = declare_var($1, $2, $3, TRUE);\n\t\t\t\t\t\t  free($2); free($3);\n\t\t\t\t\t\t}\n\t| decl_spec m_any_declarator\t\t{ if ($1->stgclass != STG_NONE && $1->stgclass != STG_REGISTER)\n\t\t\t\t\t\t    error_loc(\"invalid storage class for function parameter\\n\");\n\t\t\t\t\t\t  $$ = declare_var(NULL, $1, $2, TRUE);\n\t\t\t\t\t\t  free($1); free($2);\n\t\t\t\t\t\t}\n\t;\n\narray:\t  '[' expr ']'\t\t\t\t{ $$ = $2;\n\t\t\t\t\t\t  if (!$$->is_const)\n\t\t\t\t\t\t      error_loc(\"array dimension is not an integer constant\\n\");\n\t\t\t\t\t\t}\n\t| '[' '*' ']'\t\t\t\t{ $$ = make_expr(EXPR_VOID); }\n\t| '[' ']'\t\t\t\t{ $$ = make_expr(EXPR_VOID); }\n\t;\n\nm_attributes:\t\t\t\t\t{ $$ = NULL; }\n\t| attributes\n\t;\n\nattributes:\n\t  '[' attrib_list ']'\t\t\t{ $$ = $2; }\n\t;\n\nattrib_list: attribute                          { $$ = append_attr( NULL, $1 ); }\n\t| attrib_list ',' attribute             { $$ = append_attr( $1, $3 ); }\n\t| attrib_list ']' '[' attribute         { $$ = append_attr( $1, $4 ); }\n\t;\n\nstr_list: aSTRING                               { $$ = append_str( NULL, $1 ); }\n\t| str_list ',' aSTRING                  { $$ = append_str( $1, $3 ); }\n\t;\n\nattribute:\t\t\t\t\t{ $$ = NULL; }\n\t| tAGGREGATABLE\t\t\t\t{ $$ = make_attr(ATTR_AGGREGATABLE); }\n\t| tANNOTATION '(' aSTRING ')'\t\t{ $$ = make_attrp(ATTR_ANNOTATION, $3); }\n\t| tAPPOBJECT\t\t\t\t{ $$ = make_attr(ATTR_APPOBJECT); }\n\t| tASYNC\t\t\t\t{ $$ = make_attr(ATTR_ASYNC); }\n\t| tAUTOHANDLE\t\t\t\t{ $$ = make_attr(ATTR_AUTO_HANDLE); }\n\t| tBINDABLE\t\t\t\t{ $$ = make_attr(ATTR_BINDABLE); }\n\t| tBROADCAST\t\t\t\t{ $$ = make_attr(ATTR_BROADCAST); }\n\t| tCALLAS '(' ident ')'\t\t\t{ $$ = make_attrp(ATTR_CALLAS, $3); }\n\t| tCASE '(' expr_list_int_const ')'\t{ $$ = make_attrp(ATTR_CASE, $3); }\n\t| tCODE\t\t\t\t\t{ $$ = make_attr(ATTR_CODE); }\n\t| tCOMMSTATUS\t\t\t\t{ $$ = make_attr(ATTR_COMMSTATUS); }\n\t| tCONTEXTHANDLE\t\t\t{ $$ = make_attrv(ATTR_CONTEXTHANDLE, 0); }\n\t| tCONTEXTHANDLENOSERIALIZE\t\t{ $$ = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ }\n\t| tCONTEXTHANDLESERIALIZE\t\t{ $$ = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_SERIALIZE */ }\n\t| tCONTROL\t\t\t\t{ $$ = make_attr(ATTR_CONTROL); }\n\t| tDECODE\t\t\t\t{ $$ = make_attr(ATTR_DECODE); }\n\t| tDEFAULT\t\t\t\t{ $$ = make_attr(ATTR_DEFAULT); }\n\t| tDEFAULTBIND\t\t\t\t{ $$ = make_attr(ATTR_DEFAULTBIND); }\n\t| tDEFAULTCOLLELEM\t\t\t{ $$ = make_attr(ATTR_DEFAULTCOLLELEM); }\n\t| tDEFAULTVALUE '(' expr_const ')'\t{ $$ = make_attrp(ATTR_DEFAULTVALUE, $3); }\n\t| tDEFAULTVTABLE\t\t\t{ $$ = make_attr(ATTR_DEFAULTVTABLE); }\n\t| tDISABLECONSISTENCYCHECK\t\t{ $$ = make_attr(ATTR_DISABLECONSISTENCYCHECK); }\n\t| tDISPLAYBIND\t\t\t\t{ $$ = make_attr(ATTR_DISPLAYBIND); }\n\t| tDLLNAME '(' aSTRING ')'\t\t{ $$ = make_attrp(ATTR_DLLNAME, $3); }\n\t| tDUAL\t\t\t\t\t{ $$ = make_attr(ATTR_DUAL); }\n\t| tENABLEALLOCATE\t\t\t{ $$ = make_attr(ATTR_ENABLEALLOCATE); }\n\t| tENCODE\t\t\t\t{ $$ = make_attr(ATTR_ENCODE); }\n\t| tENDPOINT '(' str_list ')'\t\t{ $$ = make_attrp(ATTR_ENDPOINT, $3); }\n\t| tENTRY '(' expr_const ')'\t\t{ $$ = make_attrp(ATTR_ENTRY, $3); }\n\t| tEXPLICITHANDLE\t\t\t{ $$ = make_attr(ATTR_EXPLICIT_HANDLE); }\n\t| tFAULTSTATUS\t\t\t\t{ $$ = make_attr(ATTR_FAULTSTATUS); }\n\t| tFORCEALLOCATE\t\t\t{ $$ = make_attr(ATTR_FORCEALLOCATE); }\n\t| tHANDLE\t\t\t\t{ $$ = make_attr(ATTR_HANDLE); }\n\t| tHELPCONTEXT '(' expr_int_const ')'\t{ $$ = make_attrp(ATTR_HELPCONTEXT, $3); }\n\t| tHELPFILE '(' aSTRING ')'\t\t{ $$ = make_attrp(ATTR_HELPFILE, $3); }\n\t| tHELPSTRING '(' aSTRING ')'\t\t{ $$ = make_attrp(ATTR_HELPSTRING, $3); }\n\t| tHELPSTRINGCONTEXT '(' expr_int_const ')'\t{ $$ = make_attrp(ATTR_HELPSTRINGCONTEXT, $3); }\n\t| tHELPSTRINGDLL '(' aSTRING ')'\t{ $$ = make_attrp(ATTR_HELPSTRINGDLL, $3); }\n\t| tHIDDEN\t\t\t\t{ $$ = make_attr(ATTR_HIDDEN); }\n\t| tID '(' expr_int_const ')'\t\t{ $$ = make_attrp(ATTR_ID, $3); }\n\t| tIDEMPOTENT\t\t\t\t{ $$ = make_attr(ATTR_IDEMPOTENT); }\n\t| tIGNORE\t\t\t\t{ $$ = make_attr(ATTR_IGNORE); }\n\t| tIIDIS '(' expr ')'\t\t\t{ $$ = make_attrp(ATTR_IIDIS, $3); }\n\t| tIMMEDIATEBIND\t\t\t{ $$ = make_attr(ATTR_IMMEDIATEBIND); }\n\t| tIMPLICITHANDLE '(' arg ')'\t\t{ $$ = make_attrp(ATTR_IMPLICIT_HANDLE, $3); }\n\t| tIN\t\t\t\t\t{ $$ = make_attr(ATTR_IN); }\n\t| tINPUTSYNC\t\t\t\t{ $$ = make_attr(ATTR_INPUTSYNC); }\n\t| tLENGTHIS '(' m_exprs ')'\t\t{ $$ = make_attrp(ATTR_LENGTHIS, $3); }\n\t| tLCID\t'(' expr_int_const ')'\t\t{ $$ = make_attrp(ATTR_LIBLCID, $3); }\n\t| tLCID\t\t\t\t\t{ $$ = make_attr(ATTR_PARAMLCID); }\n\t| tLICENSED\t\t\t\t{ $$ = make_attr(ATTR_LICENSED); }\n\t| tLOCAL\t\t\t\t{ $$ = make_attr(ATTR_LOCAL); }\n\t| tMAYBE\t\t\t\t{ $$ = make_attr(ATTR_MAYBE); }\n\t| tMESSAGE\t\t\t\t{ $$ = make_attr(ATTR_MESSAGE); }\n\t| tNOCODE\t\t\t\t{ $$ = make_attr(ATTR_NOCODE); }\n\t| tNONBROWSABLE\t\t\t\t{ $$ = make_attr(ATTR_NONBROWSABLE); }\n\t| tNONCREATABLE\t\t\t\t{ $$ = make_attr(ATTR_NONCREATABLE); }\n\t| tNONEXTENSIBLE\t\t\t{ $$ = make_attr(ATTR_NONEXTENSIBLE); }\n\t| tNOTIFY\t\t\t\t{ $$ = make_attr(ATTR_NOTIFY); }\n\t| tNOTIFYFLAG\t\t\t\t{ $$ = make_attr(ATTR_NOTIFYFLAG); }\n\t| tOBJECT\t\t\t\t{ $$ = make_attr(ATTR_OBJECT); }\n\t| tODL\t\t\t\t\t{ $$ = make_attr(ATTR_ODL); }\n\t| tOLEAUTOMATION\t\t\t{ $$ = make_attr(ATTR_OLEAUTOMATION); }\n\t| tOPTIMIZE '(' aSTRING ')'\t\t{ $$ = make_attrp(ATTR_OPTIMIZE, $3); }\n\t| tOPTIONAL                             { $$ = make_attr(ATTR_OPTIONAL); }\n\t| tOUT\t\t\t\t\t{ $$ = make_attr(ATTR_OUT); }\n\t| tPARTIALIGNORE\t\t\t{ $$ = make_attr(ATTR_PARTIALIGNORE); }\n\t| tPOINTERDEFAULT '(' pointer_type ')'\t{ $$ = make_attrv(ATTR_POINTERDEFAULT, $3); }\n\t| tPROGID '(' aSTRING ')'\t\t{ $$ = make_attrp(ATTR_PROGID, $3); }\n\t| tPROPGET\t\t\t\t{ $$ = make_attr(ATTR_PROPGET); }\n\t| tPROPPUT\t\t\t\t{ $$ = make_attr(ATTR_PROPPUT); }\n\t| tPROPPUTREF\t\t\t\t{ $$ = make_attr(ATTR_PROPPUTREF); }\n\t| tPROXY\t\t\t\t{ $$ = make_attr(ATTR_PROXY); }\n\t| tPUBLIC\t\t\t\t{ $$ = make_attr(ATTR_PUBLIC); }\n\t| tRANGE '(' expr_int_const ',' expr_int_const ')'\n\t\t\t\t\t\t{ expr_list_t *list = append_expr( NULL, $3 );\n\t\t\t\t\t\t  list = append_expr( list, $5 );\n\t\t\t\t\t\t  $$ = make_attrp(ATTR_RANGE, list); }\n\t| tREADONLY\t\t\t\t{ $$ = make_attr(ATTR_READONLY); }\n\t| tREPRESENTAS '(' type ')'\t\t{ $$ = make_attrp(ATTR_REPRESENTAS, $3); }\n\t| tREQUESTEDIT\t\t\t\t{ $$ = make_attr(ATTR_REQUESTEDIT); }\n\t| tRESTRICTED\t\t\t\t{ $$ = make_attr(ATTR_RESTRICTED); }\n\t| tRETVAL\t\t\t\t{ $$ = make_attr(ATTR_RETVAL); }\n\t| tSIZEIS '(' m_exprs ')'\t\t{ $$ = make_attrp(ATTR_SIZEIS, $3); }\n\t| tSOURCE\t\t\t\t{ $$ = make_attr(ATTR_SOURCE); }\n\t| tSTRICTCONTEXTHANDLE                  { $$ = make_attr(ATTR_STRICTCONTEXTHANDLE); }\n\t| tSTRING\t\t\t\t{ $$ = make_attr(ATTR_STRING); }\n\t| tSWITCHIS '(' expr ')'\t\t{ $$ = make_attrp(ATTR_SWITCHIS, $3); }\n\t| tSWITCHTYPE '(' type ')'\t\t{ $$ = make_attrp(ATTR_SWITCHTYPE, $3); }\n\t| tTRANSMITAS '(' type ')'\t\t{ $$ = make_attrp(ATTR_TRANSMITAS, $3); }\n\t| tTHREADING '(' threading_type ')'\t{ $$ = make_attrv(ATTR_THREADING, $3); }\n\t| tUIDEFAULT\t\t\t\t{ $$ = make_attr(ATTR_UIDEFAULT); }\n\t| tUSESGETLASTERROR\t\t\t{ $$ = make_attr(ATTR_USESGETLASTERROR); }\n\t| tUSERMARSHAL '(' type ')'\t\t{ $$ = make_attrp(ATTR_USERMARSHAL, $3); }\n\t| tUUID '(' uuid_string ')'\t\t{ $$ = make_attrp(ATTR_UUID, $3); }\n\t| tASYNCUUID '(' uuid_string ')'\t{ $$ = make_attrp(ATTR_ASYNCUUID, $3); }\n\t| tV1ENUM\t\t\t\t{ $$ = make_attr(ATTR_V1ENUM); }\n\t| tVARARG\t\t\t\t{ $$ = make_attr(ATTR_VARARG); }\n\t| tVERSION '(' version ')'\t\t{ $$ = make_attrv(ATTR_VERSION, $3); }\n\t| tVIPROGID '(' aSTRING ')'\t\t{ $$ = make_attrp(ATTR_VIPROGID, $3); }\n\t| tWIREMARSHAL '(' type ')'\t\t{ $$ = make_attrp(ATTR_WIREMARSHAL, $3); }\n\t| pointer_type\t\t\t\t{ $$ = make_attrv(ATTR_POINTERTYPE, $1); }\n\t;\n\nuuid_string:\n\t  aUUID\n\t| aSTRING\t\t\t\t{ if (!is_valid_uuid($1))\n\t\t\t\t\t\t    error_loc(\"invalid UUID: %s\\n\", $1);\n\t\t\t\t\t\t  $$ = parse_uuid($1); }\n        ;\n\ncallconv: tCDECL\t\t\t\t{ $$ = xstrdup(\"__cdecl\"); }\n\t| tFASTCALL\t\t\t\t{ $$ = xstrdup(\"__fastcall\"); }\n\t| tPASCAL\t\t\t\t{ $$ = xstrdup(\"__pascal\"); }\n\t| tSTDCALL\t\t\t\t{ $$ = xstrdup(\"__stdcall\"); }\n\t;\n\ncases:\t\t\t\t\t\t{ $$ = NULL; }\n\t| cases case\t\t\t\t{ $$ = append_var( $1, $2 ); }\n\t;\n\ncase:\t  tCASE expr_int_const ':' union_field\t{ attr_t *a = make_attrp(ATTR_CASE, append_expr( NULL, $2 ));\n\t\t\t\t\t\t  $$ = $4; if (!$$) $$ = make_var(NULL);\n\t\t\t\t\t\t  $$->attrs = append_attr( $$->attrs, a );\n\t\t\t\t\t\t}\n\t| tDEFAULT ':' union_field\t\t{ attr_t *a = make_attr(ATTR_DEFAULT);\n\t\t\t\t\t\t  $$ = $3; if (!$$) $$ = make_var(NULL);\n\t\t\t\t\t\t  $$->attrs = append_attr( $$->attrs, a );\n\t\t\t\t\t\t}\n\t;\n\nenums:\t\t\t\t\t\t{ $$ = NULL; }\n\t| enum_list ','\t\t\t\t{ $$ = $1; }\n\t| enum_list\n\t;\n\nenum_list: enum\t\t\t\t\t{ if (!$1->eval)\n\t\t\t\t\t\t    $1->eval = make_exprl(EXPR_NUM, 0 /* default for first enum entry */);\n                                                  $$ = append_var( NULL, $1 );\n\t\t\t\t\t\t}\n\t| enum_list ',' enum\t\t\t{ if (!$3->eval)\n                                                  {\n                                                    var_t *last = LIST_ENTRY( list_tail($$), var_t, entry );\n                                                    enum expr_type type = EXPR_NUM;\n                                                    if (last->eval->type == EXPR_HEXNUM) type = EXPR_HEXNUM;\n                                                    if (last->eval->cval + 1 < 0) type = EXPR_HEXNUM;\n                                                    $3->eval = make_exprl(type, last->eval->cval + 1);\n                                                  }\n                                                  $$ = append_var( $1, $3 );\n\t\t\t\t\t\t}\n\t;\n\nenum:\t  ident '=' expr_int_const\t\t{ $$ = reg_const($1);\n\t\t\t\t\t\t  $$->eval = $3;\n                                                  $$->type = type_new_int(TYPE_BASIC_INT, 0);\n\t\t\t\t\t\t}\n\t| ident\t\t\t\t\t{ $$ = reg_const($1);\n                                                  $$->type = type_new_int(TYPE_BASIC_INT, 0);\n\t\t\t\t\t\t}\n\t;\n\nenumdef: tENUM t_ident '{' enums '}'\t\t{ $$ = type_new_enum($2, current_namespace, TRUE, $4); }\n\t;\n\nm_exprs:  m_expr                                { $$ = append_expr( NULL, $1 ); }\n\t| m_exprs ',' m_expr                    { $$ = append_expr( $1, $3 ); }\n\t;\n\nm_expr:\t\t\t\t\t\t{ $$ = make_expr(EXPR_VOID); }\n\t| expr\n\t;\n\nexpr:\t  aNUM\t\t\t\t\t{ $$ = make_exprl(EXPR_NUM, $1); }\n\t| aHEXNUM\t\t\t\t{ $$ = make_exprl(EXPR_HEXNUM, $1); }\n\t| aDOUBLE\t\t\t\t{ $$ = make_exprd(EXPR_DOUBLE, $1); }\n\t| tFALSE\t\t\t\t{ $$ = make_exprl(EXPR_TRUEFALSE, 0); }\n\t| tNULL\t\t\t\t\t{ $$ = make_exprl(EXPR_NUM, 0); }\n\t| tTRUE\t\t\t\t\t{ $$ = make_exprl(EXPR_TRUEFALSE, 1); }\n\t| aSTRING\t\t\t\t{ $$ = make_exprs(EXPR_STRLIT, $1); }\n\t| aWSTRING\t\t\t\t{ $$ = make_exprs(EXPR_WSTRLIT, $1); }\n\t| aSQSTRING\t\t\t\t{ $$ = make_exprs(EXPR_CHARCONST, $1); }\n\t| aIDENTIFIER\t\t\t\t{ $$ = make_exprs(EXPR_IDENTIFIER, $1); }\n\t| expr '?' expr ':' expr\t\t{ $$ = make_expr3(EXPR_COND, $1, $3, $5); }\n\t| expr LOGICALOR expr\t\t\t{ $$ = make_expr2(EXPR_LOGOR, $1, $3); }\n\t| expr LOGICALAND expr\t\t\t{ $$ = make_expr2(EXPR_LOGAND, $1, $3); }\n\t| expr '|' expr\t\t\t\t{ $$ = make_expr2(EXPR_OR , $1, $3); }\n\t| expr '^' expr\t\t\t\t{ $$ = make_expr2(EXPR_XOR, $1, $3); }\n\t| expr '&' expr\t\t\t\t{ $$ = make_expr2(EXPR_AND, $1, $3); }\n\t| expr EQUALITY expr\t\t\t{ $$ = make_expr2(EXPR_EQUALITY, $1, $3); }\n\t| expr INEQUALITY expr\t\t\t{ $$ = make_expr2(EXPR_INEQUALITY, $1, $3); }\n\t| expr '>' expr\t\t\t\t{ $$ = make_expr2(EXPR_GTR, $1, $3); }\n\t| expr '<' expr\t\t\t\t{ $$ = make_expr2(EXPR_LESS, $1, $3); }\n\t| expr GREATEREQUAL expr\t\t{ $$ = make_expr2(EXPR_GTREQL, $1, $3); }\n\t| expr LESSEQUAL expr\t\t\t{ $$ = make_expr2(EXPR_LESSEQL, $1, $3); }\n\t| expr SHL expr\t\t\t\t{ $$ = make_expr2(EXPR_SHL, $1, $3); }\n\t| expr SHR expr\t\t\t\t{ $$ = make_expr2(EXPR_SHR, $1, $3); }\n\t| expr '+' expr\t\t\t\t{ $$ = make_expr2(EXPR_ADD, $1, $3); }\n\t| expr '-' expr\t\t\t\t{ $$ = make_expr2(EXPR_SUB, $1, $3); }\n\t| expr '%' expr\t\t\t\t{ $$ = make_expr2(EXPR_MOD, $1, $3); }\n\t| expr '*' expr\t\t\t\t{ $$ = make_expr2(EXPR_MUL, $1, $3); }\n\t| expr '/' expr\t\t\t\t{ $$ = make_expr2(EXPR_DIV, $1, $3); }\n\t| '!' expr\t\t\t\t{ $$ = make_expr1(EXPR_LOGNOT, $2); }\n\t| '~' expr\t\t\t\t{ $$ = make_expr1(EXPR_NOT, $2); }\n\t| '+' expr %prec POS\t\t\t{ $$ = make_expr1(EXPR_POS, $2); }\n\t| '-' expr %prec NEG\t\t\t{ $$ = make_expr1(EXPR_NEG, $2); }\n\t| '&' expr %prec ADDRESSOF\t\t{ $$ = make_expr1(EXPR_ADDRESSOF, $2); }\n\t| '*' expr %prec PPTR\t\t\t{ $$ = make_expr1(EXPR_PPTR, $2); }\n\t| expr MEMBERPTR aIDENTIFIER\t\t{ $$ = make_expr2(EXPR_MEMBER, make_expr1(EXPR_PPTR, $1), make_exprs(EXPR_IDENTIFIER, $3)); }\n\t| expr '.' aIDENTIFIER\t\t\t{ $$ = make_expr2(EXPR_MEMBER, $1, make_exprs(EXPR_IDENTIFIER, $3)); }\n\t| '(' decl_spec m_abstract_declarator ')' expr %prec CAST\n\t\t\t\t\t\t{ $$ = make_exprt(EXPR_CAST, declare_var(NULL, $2, $3, 0), $5); free($2); free($3); }\n\t| tSIZEOF '(' decl_spec m_abstract_declarator ')'\n\t\t\t\t\t\t{ $$ = make_exprt(EXPR_SIZEOF, declare_var(NULL, $3, $4, 0), NULL); free($3); free($4); }\n\t| expr '[' expr ']'\t\t\t{ $$ = make_expr2(EXPR_ARRAY, $1, $3); }\n\t| '(' expr ')'\t\t\t\t{ $$ = $2; }\n\t;\n\nexpr_list_int_const: expr_int_const\t\t{ $$ = append_expr( NULL, $1 ); }\n\t| expr_list_int_const ',' expr_int_const\t{ $$ = append_expr( $1, $3 ); }\n\t;\n\nexpr_int_const: expr\t\t\t\t{ $$ = $1;\n\t\t\t\t\t\t  if (!$$->is_const)\n\t\t\t\t\t\t      error_loc(\"expression is not an integer constant\\n\");\n\t\t\t\t\t\t}\n\t;\n\nexpr_const: expr\t\t\t\t{ $$ = $1;\n\t\t\t\t\t\t  if (!$$->is_const && $$->type != EXPR_STRLIT && $$->type != EXPR_WSTRLIT)\n\t\t\t\t\t\t      error_loc(\"expression is not constant\\n\");\n\t\t\t\t\t\t}\n\t;\n\nfields:\t\t\t\t\t\t{ $$ = NULL; }\n\t| fields field\t\t\t\t{ $$ = append_var_list($1, $2); }\n\t;\n\nfield:\t  m_attributes decl_spec struct_declarator_list ';'\n\t\t\t\t\t\t{ const char *first = LIST_ENTRY(list_head($3), declarator_t, entry)->var->name;\n\t\t\t\t\t\t  check_field_attrs(first, $1);\n\t\t\t\t\t\t  $$ = set_var_types($1, $2, $3);\n\t\t\t\t\t\t}\n\t| m_attributes uniondef ';'\t\t{ var_t *v = make_var(NULL);\n\t\t\t\t\t\t  v->type = $2; v->attrs = $1;\n\t\t\t\t\t\t  $$ = append_var(NULL, v);\n\t\t\t\t\t\t}\n\t;\n\nne_union_field:\n\t  s_field ';'\t\t\t\t{ $$ = $1; }\n\t| attributes ';'\t\t\t{ $$ = make_var(NULL); $$->attrs = $1; }\n        ;\n\nne_union_fields:\t\t\t\t{ $$ = NULL; }\n\t| ne_union_fields ne_union_field\t{ $$ = append_var( $1, $2 ); }\n\t;\n\nunion_field:\n\t  s_field ';'\t\t\t\t{ $$ = $1; }\n\t| ';'\t\t\t\t\t{ $$ = NULL; }\n        ;\n\ns_field:  m_attributes decl_spec declarator\t{ $$ = declare_var(check_field_attrs($3->var->name, $1),\n\t\t\t\t\t\t                $2, $3, FALSE);\n\t\t\t\t\t\t  free($3);\n\t\t\t\t\t\t}\n\t| m_attributes structdef\t\t{ var_t *v = make_var(NULL);\n\t\t\t\t\t\t  v->type = $2; v->attrs = $1;\n\t\t\t\t\t\t  $$ = v;\n\t\t\t\t\t\t}\n\t;\n\nfuncdef: declaration\t\t\t\t{ $$ = $1;\n\t\t\t\t\t\t  if (type_get_type($$->type) != TYPE_FUNCTION)\n\t\t\t\t\t\t    error_loc(\"only methods may be declared inside the methods section of a dispinterface\\n\");\n\t\t\t\t\t\t  check_function_attrs($$->name, $$->attrs);\n\t\t\t\t\t\t}\n\t;\n\ndeclaration:\n\t  attributes decl_spec init_declarator\n\t\t\t\t\t\t{ $$ = declare_var($1, $2, $3, FALSE);\n\t\t\t\t\t\t  free($3);\n\t\t\t\t\t\t}\n\t| decl_spec init_declarator\t\t{ $$ = declare_var(NULL, $1, $2, FALSE);\n\t\t\t\t\t\t  free($2);\n\t\t\t\t\t\t}\n\t;\n\nm_ident:\t\t\t\t\t{ $$ = NULL; }\n\t| ident\n\t;\n\nt_ident:\t\t\t\t\t{ $$ = NULL; }\n\t| aIDENTIFIER\t\t\t\t{ $$ = $1; }\n\t| aKNOWNTYPE\t\t\t\t{ $$ = $1; }\n\t;\n\nident:\t  aIDENTIFIER\t\t\t\t{ $$ = make_var($1); }\n/* some \"reserved words\" used in attributes are also used as field names in some MS IDL files */\n\t| aKNOWNTYPE\t\t\t\t{ $$ = make_var($<str>1); }\n\t;\n\nbase_type: tBYTE\t\t\t\t{ $$ = find_type_or_error($<str>1, 0); }\n\t| tWCHAR\t\t\t\t{ $$ = find_type_or_error($<str>1, 0); }\n\t| int_std\n\t| tSIGNED int_std\t\t\t{ $$ = type_new_int(type_basic_get_type($2), -1); }\n\t| tUNSIGNED int_std\t\t\t{ $$ = type_new_int(type_basic_get_type($2), 1); }\n\t| tUNSIGNED\t\t\t\t{ $$ = type_new_int(TYPE_BASIC_INT, 1); }\n\t| tFLOAT\t\t\t\t{ $$ = find_type_or_error($<str>1, 0); }\n\t| tDOUBLE\t\t\t\t{ $$ = find_type_or_error($<str>1, 0); }\n\t| tBOOLEAN\t\t\t\t{ $$ = find_type_or_error($<str>1, 0); }\n\t| tERRORSTATUST\t\t\t\t{ $$ = find_type_or_error($<str>1, 0); }\n\t| tHANDLET\t\t\t\t{ $$ = find_type_or_error($<str>1, 0); }\n\t;\n\nm_int:\n\t| tINT\n\t;\n\nint_std:  tINT\t\t\t\t\t{ $$ = type_new_int(TYPE_BASIC_INT, 0); }\n\t| tSHORT m_int\t\t\t\t{ $$ = type_new_int(TYPE_BASIC_INT16, 0); }\n\t| tSMALL\t\t\t\t{ $$ = type_new_int(TYPE_BASIC_INT8, 0); }\n\t| tLONG m_int\t\t\t\t{ $$ = type_new_int(TYPE_BASIC_INT32, 0); }\n\t| tHYPER m_int\t\t\t\t{ $$ = type_new_int(TYPE_BASIC_HYPER, 0); }\n\t| tINT64\t\t\t\t{ $$ = type_new_int(TYPE_BASIC_INT64, 0); }\n\t| tCHAR\t\t\t\t\t{ $$ = type_new_int(TYPE_BASIC_CHAR, 0); }\n\t| tINT3264\t\t\t\t{ $$ = type_new_int(TYPE_BASIC_INT3264, 0); }\n\t;\n\ncoclass:  tCOCLASS aIDENTIFIER\t\t\t{ $$ = type_new_coclass($2); }\n\t| tCOCLASS aKNOWNTYPE\t\t\t{ $$ = find_type($2, NULL, 0);\n\t\t\t\t\t\t  if (type_get_type_detect_alias($$) != TYPE_COCLASS)\n\t\t\t\t\t\t    error_loc(\"%s was not declared a coclass at %s:%d\\n\",\n\t\t\t\t\t\t\t      $2, $$->loc_info.input_name,\n\t\t\t\t\t\t\t      $$->loc_info.line_number);\n\t\t\t\t\t\t}\n\t;\n\ncoclasshdr: attributes coclass\t\t\t{ $$ = $2;\n\t\t\t\t\t\t  check_def($$);\n\t\t\t\t\t\t  $$->attrs = check_coclass_attrs($2->name, $1);\n\t\t\t\t\t\t}\n\t;\n\ncoclassdef: coclasshdr '{' coclass_ints '}' semicolon_opt\n\t\t\t\t\t\t{ $$ = type_coclass_define($1, $3); }\n\t;\n\nnamespacedef: tNAMESPACE aIDENTIFIER\t\t{ $$ = $2; }\n\t;\n\ncoclass_ints:\t\t\t\t\t{ $$ = NULL; }\n\t| coclass_ints coclass_int\t\t{ $$ = append_ifref( $1, $2 ); }\n\t;\n\ncoclass_int:\n\t  m_attributes interfacedec\t\t{ $$ = make_ifref($2); $$->attrs = $1; }\n\t;\n\ndispinterface: tDISPINTERFACE aIDENTIFIER\t{ $$ = get_type(TYPE_INTERFACE, $2, current_namespace, 0); }\n\t|      tDISPINTERFACE aKNOWNTYPE\t{ $$ = get_type(TYPE_INTERFACE, $2, current_namespace, 0); }\n\t;\n\ndispinterfacehdr: attributes dispinterface\t{ attr_t *attrs;\n\t\t\t\t\t\t  $$ = $2;\n\t\t\t\t\t\t  check_def($$);\n\t\t\t\t\t\t  attrs = make_attr(ATTR_DISPINTERFACE);\n\t\t\t\t\t\t  $$->attrs = append_attr( check_dispiface_attrs($2->name, $1), attrs );\n\t\t\t\t\t\t  $$->defined = TRUE;\n\t\t\t\t\t\t}\n\t;\n\ndispint_props: tPROPERTIES ':'\t\t\t{ $$ = NULL; }\n\t| dispint_props s_field ';'\t\t{ $$ = append_var( $1, $2 ); }\n\t;\n\ndispint_meths: tMETHODS ':'\t\t\t{ $$ = NULL; }\n\t| dispint_meths funcdef ';'\t\t{ $$ = append_var( $1, $2 ); }\n\t;\n\ndispinterfacedef: dispinterfacehdr '{'\n\t  dispint_props\n\t  dispint_meths\n\t  '}'\t\t\t\t\t{ $$ = $1;\n\t\t\t\t\t\t  type_dispinterface_define($$, $3, $4);\n\t\t\t\t\t\t}\n\t| dispinterfacehdr\n\t '{' interface ';' '}' \t\t\t{ $$ = $1;\n\t\t\t\t\t\t  type_dispinterface_define_from_iface($$, $3);\n\t\t\t\t\t\t}\n\t;\n\ninherit:\t\t\t\t\t{ $$ = NULL; }\n\t| ':' aKNOWNTYPE\t\t\t{ $$ = find_type_or_error2($2, 0); }\n\t;\n\ninterface: tINTERFACE aIDENTIFIER\t\t{ $$ = get_type(TYPE_INTERFACE, $2, current_namespace, 0); }\n\t|  tINTERFACE aKNOWNTYPE\t\t{ $$ = get_type(TYPE_INTERFACE, $2, current_namespace, 0); }\n\t;\n\ninterfacehdr: attributes interface\t\t{ $$.interface = $2;\n\t\t\t\t\t\t  $$.old_pointer_default = pointer_default;\n\t\t\t\t\t\t  if (is_attr($1, ATTR_POINTERDEFAULT))\n\t\t\t\t\t\t    pointer_default = get_attrv($1, ATTR_POINTERDEFAULT);\n\t\t\t\t\t\t  check_def($2);\n\t\t\t\t\t\t  $2->attrs = check_iface_attrs($2->name, $1);\n\t\t\t\t\t\t  $2->defined = TRUE;\n\t\t\t\t\t\t}\n\t;\n\ninterfacedef: interfacehdr inherit\n\t  '{' int_statements '}' semicolon_opt\t{ $$ = $1.interface;\n\t\t\t\t\t\t  if($$ == $2)\n\t\t\t\t\t\t    error_loc(\"Interface can't inherit from itself\\n\");\n\t\t\t\t\t\t  type_interface_define($$, $2, $4);\n\t\t\t\t\t\t  pointer_default = $1.old_pointer_default;\n\t\t\t\t\t\t}\n/* MIDL is able to import the definition of a base class from inside the\n * definition of a derived class, I'll try to support it with this rule */\n\t| interfacehdr ':' aIDENTIFIER\n\t  '{' import int_statements '}'\n\t   semicolon_opt\t\t\t{ $$ = $1.interface;\n\t\t\t\t\t\t  type_interface_define($$, find_type_or_error2($3, 0), $6);\n\t\t\t\t\t\t  pointer_default = $1.old_pointer_default;\n\t\t\t\t\t\t}\n\t| dispinterfacedef semicolon_opt\t{ $$ = $1; }\n\t;\n\ninterfacedec:\n\t  interface ';'\t\t\t\t{ $$ = $1; }\n\t| dispinterface ';'\t\t\t{ $$ = $1; }\n\t;\n\nmodule:   tMODULE aIDENTIFIER\t\t\t{ $$ = type_new_module($2); }\n\t| tMODULE aKNOWNTYPE\t\t\t{ $$ = type_new_module($2); }\n\t;\n\nmodulehdr: attributes module\t\t\t{ $$ = $2;\n\t\t\t\t\t\t  $$->attrs = check_module_attrs($2->name, $1);\n\t\t\t\t\t\t}\n\t;\n\nmoduledef: modulehdr '{' int_statements '}'\n\t   semicolon_opt\t\t\t{ $$ = $1;\n                                                  type_module_define($$, $3);\n\t\t\t\t\t\t}\n\t;\n\nstorage_cls_spec:\n\t  tEXTERN\t\t\t\t{ $$ = STG_EXTERN; }\n\t| tSTATIC\t\t\t\t{ $$ = STG_STATIC; }\n\t| tREGISTER\t\t\t\t{ $$ = STG_REGISTER; }\n\t;\n\nfunction_specifier:\n\t  tINLINE\t\t\t\t{ $$ = make_attr(ATTR_INLINE); }\n\t;\n\ntype_qualifier:\n\t  tCONST\t\t\t\t{ $$ = make_attr(ATTR_CONST); }\n\t;\n\nm_type_qual_list:\t\t\t\t{ $$ = NULL; }\n\t| m_type_qual_list type_qualifier\t{ $$ = append_attr($1, $2); }\n\t;\n\ndecl_spec: type m_decl_spec_no_type\t\t{ $$ = make_decl_spec($1, $2, NULL, NULL, STG_NONE); }\n\t| decl_spec_no_type type m_decl_spec_no_type\n\t\t\t\t\t\t{ $$ = make_decl_spec($2, $1, $3, NULL, STG_NONE); }\n\t;\n\nm_decl_spec_no_type:\t\t\t\t{ $$ = NULL; }\n\t| decl_spec_no_type\n\t;\n\ndecl_spec_no_type:\n\t  type_qualifier m_decl_spec_no_type\t{ $$ = make_decl_spec(NULL, $2, NULL, $1, STG_NONE); }\n\t| function_specifier m_decl_spec_no_type  { $$ = make_decl_spec(NULL, $2, NULL, $1, STG_NONE); }\n\t| storage_cls_spec m_decl_spec_no_type  { $$ = make_decl_spec(NULL, $2, NULL, NULL, $1); }\n\t;\n\ndeclarator:\n\t  '*' m_type_qual_list declarator %prec PPTR\n\t\t\t\t\t\t{ $$ = $3; $$->type = append_ptrchain_type($$->type, type_new_pointer(pointer_default, NULL, $2)); }\n\t| callconv declarator\t\t\t{ $$ = $2; if ($$->func_type) $$->func_type->attrs = append_attr($$->func_type->attrs, make_attrp(ATTR_CALLCONV, $1));\n\t\t\t\t\t\t           else if ($$->type) $$->type->attrs = append_attr($$->type->attrs, make_attrp(ATTR_CALLCONV, $1)); }\n\t| direct_declarator\n\t;\n\ndirect_declarator:\n\t  ident\t\t\t\t\t{ $$ = make_declarator($1); }\n\t| '(' declarator ')'\t\t\t{ $$ = $2; }\n\t| direct_declarator array\t\t{ $$ = $1; $$->array = append_array($$->array, $2); }\n\t| direct_declarator '(' m_args ')'\t{ $$ = $1;\n\t\t\t\t\t\t  $$->func_type = append_ptrchain_type($$->type, type_new_function($3));\n\t\t\t\t\t\t  $$->type = NULL;\n\t\t\t\t\t\t}\n\t;\n\n/* abstract declarator */\nabstract_declarator:\n\t  '*' m_type_qual_list m_abstract_declarator %prec PPTR\n\t\t\t\t\t\t{ $$ = $3; $$->type = append_ptrchain_type($$->type, type_new_pointer(pointer_default, NULL, $2)); }\n\t| callconv m_abstract_declarator\t{ $$ = $2; if ($$->func_type) $$->func_type->attrs = append_attr($$->func_type->attrs, make_attrp(ATTR_CALLCONV, $1));\n\t\t\t\t\t\t           else if ($$->type) $$->type->attrs = append_attr($$->type->attrs, make_attrp(ATTR_CALLCONV, $1)); }\n\t| abstract_direct_declarator\n\t;\n\n/* abstract declarator without accepting direct declarator */\nabstract_declarator_no_direct:\n\t  '*' m_type_qual_list m_any_declarator %prec PPTR\n\t\t\t\t\t\t{ $$ = $3; $$->type = append_ptrchain_type($$->type, type_new_pointer(pointer_default, NULL, $2)); }\n\t| callconv m_any_declarator\t\t{ $$ = $2; if ($$->func_type) $$->func_type->attrs = append_attr($$->func_type->attrs, make_attrp(ATTR_CALLCONV, $1));\n\t\t\t\t\t\t           else if ($$->type) $$->type->attrs = append_attr($$->type->attrs, make_attrp(ATTR_CALLCONV, $1)); }\n\t;\n\n/* abstract declarator or empty */\nm_abstract_declarator: \t\t\t\t{ $$ = make_declarator(NULL); }\n\t| abstract_declarator\n\t;\n\n/* abstract direct declarator */\nabstract_direct_declarator:\n\t  '(' abstract_declarator_no_direct ')'\t{ $$ = $2; }\n\t| abstract_direct_declarator array\t{ $$ = $1; $$->array = append_array($$->array, $2); }\n\t| array\t\t\t\t\t{ $$ = make_declarator(NULL); $$->array = append_array($$->array, $1); }\n\t| '(' m_args ')'\n\t\t\t\t\t\t{ $$ = make_declarator(NULL);\n\t\t\t\t\t\t  $$->func_type = append_ptrchain_type($$->type, type_new_function($2));\n\t\t\t\t\t\t  $$->type = NULL;\n\t\t\t\t\t\t}\n\t| abstract_direct_declarator '(' m_args ')'\n\t\t\t\t\t\t{ $$ = $1;\n\t\t\t\t\t\t  $$->func_type = append_ptrchain_type($$->type, type_new_function($3));\n\t\t\t\t\t\t  $$->type = NULL;\n\t\t\t\t\t\t}\n\t;\n\n/* abstract or non-abstract declarator */\nany_declarator:\n\t  '*' m_type_qual_list m_any_declarator %prec PPTR\n\t\t\t\t\t\t{ $$ = $3; $$->type = append_ptrchain_type($$->type, type_new_pointer(pointer_default, NULL, $2)); }\n\t| callconv m_any_declarator\t\t{ $$ = $2; $$->type->attrs = append_attr($$->type->attrs, make_attrp(ATTR_CALLCONV, $1)); }\n\t| any_direct_declarator\n\t;\n\n/* abstract or non-abstract declarator without accepting direct declarator */\nany_declarator_no_direct:\n\t  '*' m_type_qual_list m_any_declarator %prec PPTR\n\t\t\t\t\t\t{ $$ = $3; $$->type = append_ptrchain_type($$->type, type_new_pointer(pointer_default, NULL, $2)); }\n\t| callconv m_any_declarator\t\t{ $$ = $2; $$->type->attrs = append_attr($$->type->attrs, make_attrp(ATTR_CALLCONV, $1)); }\n\t;\n\n/* abstract or non-abstract declarator or empty */\nm_any_declarator: \t\t\t\t{ $$ = make_declarator(NULL); }\n\t| any_declarator\n\t;\n\n/* abstract or non-abstract direct declarator. note: direct declarators\n * aren't accepted inside brackets to avoid ambiguity with the rule for\n * function arguments */\nany_direct_declarator:\n\t  ident\t\t\t\t\t{ $$ = make_declarator($1); }\n\t| '(' any_declarator_no_direct ')'\t{ $$ = $2; }\n\t| any_direct_declarator array\t\t{ $$ = $1; $$->array = append_array($$->array, $2); }\n\t| array\t\t\t\t\t{ $$ = make_declarator(NULL); $$->array = append_array($$->array, $1); }\n\t| '(' m_args ')'\n\t\t\t\t\t\t{ $$ = make_declarator(NULL);\n\t\t\t\t\t\t  $$->func_type = append_ptrchain_type($$->type, type_new_function($2));\n\t\t\t\t\t\t  $$->type = NULL;\n\t\t\t\t\t\t}\n\t| any_direct_declarator '(' m_args ')'\n\t\t\t\t\t\t{ $$ = $1;\n\t\t\t\t\t\t  $$->func_type = append_ptrchain_type($$->type, type_new_function($3));\n\t\t\t\t\t\t  $$->type = NULL;\n\t\t\t\t\t\t}\n\t;\n\ndeclarator_list:\n\t  declarator\t\t\t\t{ $$ = append_declarator( NULL, $1 ); }\n\t| declarator_list ',' declarator\t{ $$ = append_declarator( $1, $3 ); }\n\t;\n\nm_bitfield:\t\t\t\t\t{ $$ = NULL; }\n\t| ':' expr_const\t\t\t{ $$ = $2; }\n\t;\n\nstruct_declarator: any_declarator m_bitfield\t{ $$ = $1; $$->bits = $2;\n\t\t\t\t\t\t  if (!$$->bits && !$$->var->name)\n\t\t\t\t\t\t    error_loc(\"unnamed fields are not allowed\\n\");\n\t\t\t\t\t\t}\n\t;\n\nstruct_declarator_list:\n\t  struct_declarator\t\t\t{ $$ = append_declarator( NULL, $1 ); }\n\t| struct_declarator_list ',' struct_declarator\n\t\t\t\t\t\t{ $$ = append_declarator( $1, $3 ); }\n\t;\n\ninit_declarator:\n\t  declarator\t\t\t\t{ $$ = $1; }\n\t| declarator '=' expr_const\t\t{ $$ = $1; $1->var->eval = $3; }\n\t;\n\nthreading_type:\n\t  tAPARTMENT\t\t\t\t{ $$ = THREADING_APARTMENT; }\n\t| tNEUTRAL\t\t\t\t{ $$ = THREADING_NEUTRAL; }\n\t| tSINGLE\t\t\t\t{ $$ = THREADING_SINGLE; }\n\t| tFREE\t\t\t\t\t{ $$ = THREADING_FREE; }\n\t| tBOTH\t\t\t\t\t{ $$ = THREADING_BOTH; }\n\t;\n\npointer_type:\n\t  tREF\t\t\t\t\t{ $$ = FC_RP; }\n\t| tUNIQUE\t\t\t\t{ $$ = FC_UP; }\n\t| tPTR\t\t\t\t\t{ $$ = FC_FP; }\n\t;\n\nstructdef: tSTRUCT t_ident '{' fields '}'\t{ $$ = type_new_struct($2, current_namespace, TRUE, $4); }\n\t;\n\ntype:\t  tVOID\t\t\t\t\t{ $$ = type_new_void(); }\n\t| aKNOWNTYPE\t\t\t\t{ $$ = find_type_or_error($1, 0); }\n\t| base_type\t\t\t\t{ $$ = $1; }\n\t| enumdef\t\t\t\t{ $$ = $1; }\n\t| tENUM aIDENTIFIER\t\t\t{ $$ = type_new_enum($2, current_namespace, FALSE, NULL); }\n\t| structdef\t\t\t\t{ $$ = $1; }\n\t| tSTRUCT aIDENTIFIER\t\t\t{ $$ = type_new_struct($2, current_namespace, FALSE, NULL); }\n\t| uniondef\t\t\t\t{ $$ = $1; }\n\t| tUNION aIDENTIFIER\t\t\t{ $$ = type_new_nonencapsulated_union($2, FALSE, NULL); }\n\t| tSAFEARRAY '(' type ')'\t\t{ $$ = make_safearray($3); }\n\t;\n\ntypedef: m_attributes tTYPEDEF m_attributes decl_spec declarator_list\n\t\t\t\t\t\t{ $1 = append_attribs($1, $3);\n\t\t\t\t\t\t  reg_typedefs($4, $5, check_typedef_attrs($1));\n\t\t\t\t\t\t  $$ = make_statement_typedef($5);\n\t\t\t\t\t\t}\n\t;\n\nuniondef: tUNION t_ident '{' ne_union_fields '}'\n\t\t\t\t\t\t{ $$ = type_new_nonencapsulated_union($2, TRUE, $4); }\n\t| tUNION t_ident\n\t  tSWITCH '(' s_field ')'\n\t  m_ident '{' cases '}'\t\t\t{ $$ = type_new_encapsulated_union($2, $5, $7, $9); }\n\t;\n\nversion:\n\t  aNUM\t\t\t\t\t{ $$ = MAKEVERSION($1, 0); }\n\t| aNUM '.' aNUM\t\t\t\t{ $$ = MAKEVERSION($1, $3); }\n\t| aHEXNUM\t\t\t\t{ $$ = $1; }\n\t;\n\n%%\n\nstatic void decl_builtin_basic(const char *name, enum type_basic_type type)\n{\n  type_t *t = type_new_basic(type);\n  reg_type(t, name, NULL, 0);\n}\n\nstatic void decl_builtin_alias(const char *name, type_t *t)\n{\n  reg_type(type_new_alias(t, name), name, NULL, 0);\n}\n\nvoid init_types(void)\n{\n  decl_builtin_basic(\"byte\", TYPE_BASIC_BYTE);\n  decl_builtin_basic(\"wchar_t\", TYPE_BASIC_WCHAR);\n  decl_builtin_basic(\"float\", TYPE_BASIC_FLOAT);\n  decl_builtin_basic(\"double\", TYPE_BASIC_DOUBLE);\n  decl_builtin_basic(\"error_status_t\", TYPE_BASIC_ERROR_STATUS_T);\n  decl_builtin_basic(\"handle_t\", TYPE_BASIC_HANDLE);\n  decl_builtin_alias(\"boolean\", type_new_basic(TYPE_BASIC_BYTE));\n}\n\nstatic str_list_t *append_str(str_list_t *list, char *str)\n{\n    struct str_list_entry_t *entry;\n\n    if (!str) return list;\n    if (!list)\n    {\n        list = xmalloc( sizeof(*list) );\n        list_init( list );\n    }\n    entry = xmalloc( sizeof(*entry) );\n    entry->str = str;\n    list_add_tail( list, &entry->entry );\n    return list;\n}\n\nstatic attr_list_t *append_attr(attr_list_t *list, attr_t *attr)\n{\n    attr_t *attr_existing;\n    if (!attr) return list;\n    if (!list)\n    {\n        list = xmalloc( sizeof(*list) );\n        list_init( list );\n    }\n    LIST_FOR_EACH_ENTRY(attr_existing, list, attr_t, entry)\n        if (attr_existing->type == attr->type)\n        {\n            parser_warning(\"duplicate attribute %s\\n\", get_attr_display_name(attr->type));\n            /* use the last attribute, like MIDL does */\n            list_remove(&attr_existing->entry);\n            break;\n        }\n    list_add_tail( list, &attr->entry );\n    return list;\n}\n\nstatic attr_list_t *move_attr(attr_list_t *dst, attr_list_t *src, enum attr_type type)\n{\n  attr_t *attr;\n  if (!src) return dst;\n  LIST_FOR_EACH_ENTRY(attr, src, attr_t, entry)\n    if (attr->type == type)\n    {\n      list_remove(&attr->entry);\n      return append_attr(dst, attr);\n    }\n  return dst;\n}\n\nstatic attr_list_t *append_attr_list(attr_list_t *new_list, attr_list_t *old_list)\n{\n  struct list *entry;\n\n  if (!old_list) return new_list;\n\n  while ((entry = list_head(old_list)))\n  {\n    attr_t *attr = LIST_ENTRY(entry, attr_t, entry);\n    list_remove(entry);\n    new_list = append_attr(new_list, attr);\n  }\n  return new_list;\n}\n\nstatic attr_list_t *dupattrs(const attr_list_t *list)\n{\n  attr_list_t *new_list;\n  const attr_t *attr;\n\n  if (!list) return NULL;\n\n  new_list = xmalloc( sizeof(*list) );\n  list_init( new_list );\n  LIST_FOR_EACH_ENTRY(attr, list, const attr_t, entry)\n  {\n    attr_t *new_attr = xmalloc(sizeof(*new_attr));\n    *new_attr = *attr;\n    list_add_tail(new_list, &new_attr->entry);\n  }\n  return new_list;\n}\n\nstatic decl_spec_t *make_decl_spec(type_t *type, decl_spec_t *left, decl_spec_t *right, attr_t *attr, enum storage_class stgclass)\n{\n  decl_spec_t *declspec = left ? left : right;\n  if (!declspec)\n  {\n    declspec = xmalloc(sizeof(*declspec));\n    declspec->type = NULL;\n    declspec->attrs = NULL;\n    declspec->stgclass = STG_NONE;\n  }\n  declspec->type = type;\n  if (left && declspec != left)\n  {\n    declspec->attrs = append_attr_list(declspec->attrs, left->attrs);\n    if (declspec->stgclass == STG_NONE)\n      declspec->stgclass = left->stgclass;\n    else if (left->stgclass != STG_NONE)\n      error_loc(\"only one storage class can be specified\\n\");\n    assert(!left->type);\n    free(left);\n  }\n  if (right && declspec != right)\n  {\n    declspec->attrs = append_attr_list(declspec->attrs, right->attrs);\n    if (declspec->stgclass == STG_NONE)\n      declspec->stgclass = right->stgclass;\n    else if (right->stgclass != STG_NONE)\n      error_loc(\"only one storage class can be specified\\n\");\n    assert(!right->type);\n    free(right);\n  }\n\n  declspec->attrs = append_attr(declspec->attrs, attr);\n  if (declspec->stgclass == STG_NONE)\n    declspec->stgclass = stgclass;\n  else if (stgclass != STG_NONE)\n    error_loc(\"only one storage class can be specified\\n\");\n\n  /* apply attributes to type */\n  if (type && declspec->attrs)\n  {\n    attr_list_t *attrs;\n    declspec->type = duptype(type, 1);\n    attrs = dupattrs(type->attrs);\n    declspec->type->attrs = append_attr_list(attrs, declspec->attrs);\n    declspec->attrs = NULL;\n  }\n\n  return declspec;\n}\n\nstatic attr_t *make_attr(enum attr_type type)\n{\n  attr_t *a = xmalloc(sizeof(attr_t));\n  a->type = type;\n  a->u.ival = 0;\n  return a;\n}\n\nstatic attr_t *make_attrv(enum attr_type type, unsigned int val)\n{\n  attr_t *a = xmalloc(sizeof(attr_t));\n  a->type = type;\n  a->u.ival = val;\n  return a;\n}\n\nstatic attr_t *make_attrp(enum attr_type type, void *val)\n{\n  attr_t *a = xmalloc(sizeof(attr_t));\n  a->type = type;\n  a->u.pval = val;\n  return a;\n}\n\nstatic expr_list_t *append_expr(expr_list_t *list, expr_t *expr)\n{\n    if (!expr) return list;\n    if (!list)\n    {\n        list = xmalloc( sizeof(*list) );\n        list_init( list );\n    }\n    list_add_tail( list, &expr->entry );\n    return list;\n}\n\nstatic array_dims_t *append_array(array_dims_t *list, expr_t *expr)\n{\n    if (!expr) return list;\n    if (!list)\n    {\n        list = xmalloc( sizeof(*list) );\n        list_init( list );\n    }\n    list_add_tail( list, &expr->entry );\n    return list;\n}\n\nstatic struct list type_pool = LIST_INIT(type_pool);\ntypedef struct\n{\n  type_t data;\n  struct list link;\n} type_pool_node_t;\n\ntype_t *alloc_type(void)\n{\n  type_pool_node_t *node = xmalloc(sizeof *node);\n  list_add_tail(&type_pool, &node->link);\n  return &node->data;\n}\n\nvoid set_all_tfswrite(int val)\n{\n  type_pool_node_t *node;\n  LIST_FOR_EACH_ENTRY(node, &type_pool, type_pool_node_t, link)\n    node->data.tfswrite = val;\n}\n\nvoid clear_all_offsets(void)\n{\n  type_pool_node_t *node;\n  LIST_FOR_EACH_ENTRY(node, &type_pool, type_pool_node_t, link)\n    node->data.typestring_offset = node->data.ptrdesc = 0;\n}\n\nstatic void type_function_add_head_arg(type_t *type, var_t *arg)\n{\n    if (!type->details.function->args)\n    {\n        type->details.function->args = xmalloc( sizeof(*type->details.function->args) );\n        list_init( type->details.function->args );\n    }\n    list_add_head( type->details.function->args, &arg->entry );\n}\n\nstatic int is_allowed_range_type(const type_t *type)\n{\n    switch (type_get_type(type))\n    {\n    case TYPE_ENUM:\n        return TRUE;\n    case TYPE_BASIC:\n        switch (type_basic_get_type(type))\n        {\n        case TYPE_BASIC_INT8:\n        case TYPE_BASIC_INT16:\n        case TYPE_BASIC_INT32:\n        case TYPE_BASIC_INT64:\n        case TYPE_BASIC_INT:\n        case TYPE_BASIC_INT3264:\n        case TYPE_BASIC_BYTE:\n        case TYPE_BASIC_CHAR:\n        case TYPE_BASIC_WCHAR:\n        case TYPE_BASIC_HYPER:\n            return TRUE;\n        case TYPE_BASIC_FLOAT:\n        case TYPE_BASIC_DOUBLE:\n        case TYPE_BASIC_ERROR_STATUS_T:\n        case TYPE_BASIC_HANDLE:\n            return FALSE;\n        }\n        return FALSE;\n    default:\n        return FALSE;\n    }\n}\n\nstatic type_t *append_ptrchain_type(type_t *ptrchain, type_t *type)\n{\n  type_t *ptrchain_type;\n  if (!ptrchain)\n    return type;\n  for (ptrchain_type = ptrchain; type_pointer_get_ref(ptrchain_type); ptrchain_type = type_pointer_get_ref(ptrchain_type))\n    ;\n  assert(ptrchain_type->type_type == TYPE_POINTER);\n  ptrchain_type->details.pointer.ref = type;\n  return ptrchain;\n}\n\nstatic warning_list_t *append_warning(warning_list_t *list, int num)\n{\n    warning_t *entry;\n\n    if(!list)\n    {\n        list = xmalloc( sizeof(*list) );\n        list_init( list );\n    }\n    entry = xmalloc( sizeof(*entry) );\n    entry->num = num;\n    list_add_tail( list, &entry->entry );\n    return list;\n}\n\nstatic var_t *declare_var(attr_list_t *attrs, decl_spec_t *decl_spec, const declarator_t *decl,\n                       int top)\n{\n  var_t *v = decl->var;\n  expr_list_t *sizes = get_attrp(attrs, ATTR_SIZEIS);\n  expr_list_t *lengs = get_attrp(attrs, ATTR_LENGTHIS);\n  int sizeless;\n  expr_t *dim;\n  type_t **ptype;\n  array_dims_t *arr = decl ? decl->array : NULL;\n  type_t *func_type = decl ? decl->func_type : NULL;\n  type_t *type = decl_spec->type;\n\n  if (is_attr(type->attrs, ATTR_INLINE))\n  {\n    if (!func_type)\n      error_loc(\"inline attribute applied to non-function type\\n\");\n    else\n    {\n      type_t *t;\n      /* move inline attribute from return type node to function node */\n      for (t = func_type; is_ptr(t); t = type_pointer_get_ref(t))\n        ;\n      t->attrs = move_attr(t->attrs, type->attrs, ATTR_INLINE);\n    }\n  }\n\n  /* add type onto the end of the pointers in pident->type */\n  v->type = append_ptrchain_type(decl ? decl->type : NULL, type);\n  v->stgclass = decl_spec->stgclass;\n  v->attrs = attrs;\n\n  /* check for pointer attribute being applied to non-pointer, non-array\n   * type */\n  if (!arr)\n  {\n    int ptr_attr = get_attrv(v->attrs, ATTR_POINTERTYPE);\n    const type_t *ptr = NULL;\n    /* pointer attributes on the left side of the type belong to the function\n     * pointer, if one is being declared */\n    type_t **pt = func_type ? &func_type : &v->type;\n    for (ptr = *pt; ptr && !ptr_attr; )\n    {\n      ptr_attr = get_attrv(ptr->attrs, ATTR_POINTERTYPE);\n      if (!ptr_attr && type_is_alias(ptr))\n        ptr = type_alias_get_aliasee(ptr);\n      else\n        break;\n    }\n    if (is_ptr(ptr))\n    {\n      if (ptr_attr && ptr_attr != FC_UP &&\n          type_get_type(type_pointer_get_ref(ptr)) == TYPE_INTERFACE)\n          warning_loc_info(&v->loc_info,\n                           \"%s: pointer attribute applied to interface \"\n                           \"pointer type has no effect\\n\", v->name);\n      if (!ptr_attr && top && (*pt)->details.pointer.def_fc != FC_RP)\n      {\n        /* FIXME: this is a horrible hack to cope with the issue that we\n         * store an offset to the typeformat string in the type object, but\n         * two typeformat strings may be written depending on whether the\n         * pointer is a toplevel parameter or not */\n        *pt = duptype(*pt, 1);\n      }\n    }\n    else if (ptr_attr)\n       error_loc(\"%s: pointer attribute applied to non-pointer type\\n\", v->name);\n  }\n\n  if (is_attr(v->attrs, ATTR_STRING))\n  {\n    type_t *t = type;\n\n    if (!is_ptr(v->type) && !arr)\n      error_loc(\"'%s': [string] attribute applied to non-pointer, non-array type\\n\",\n                v->name);\n\n    while (is_ptr(t))\n      t = type_pointer_get_ref(t);\n\n    if (type_get_type(t) != TYPE_BASIC &&\n        (get_basic_fc(t) != FC_CHAR &&\n         get_basic_fc(t) != FC_BYTE &&\n         get_basic_fc(t) != FC_WCHAR))\n    {\n      error_loc(\"'%s': [string] attribute is only valid on 'char', 'byte', or 'wchar_t' pointers and arrays\\n\",\n                v->name);\n    }\n  }\n\n  if (is_attr(v->attrs, ATTR_V1ENUM))\n  {\n    if (type_get_type_detect_alias(v->type) != TYPE_ENUM)\n      error_loc(\"'%s': [v1_enum] attribute applied to non-enum type\\n\", v->name);\n  }\n\n  if (is_attr(v->attrs, ATTR_RANGE) && !is_allowed_range_type(v->type))\n    error_loc(\"'%s': [range] attribute applied to non-integer type\\n\",\n              v->name);\n\n  ptype = &v->type;\n  sizeless = FALSE;\n  if (arr) LIST_FOR_EACH_ENTRY_REV(dim, arr, expr_t, entry)\n  {\n    if (sizeless)\n      error_loc(\"%s: only the first array dimension can be unspecified\\n\", v->name);\n\n    if (dim->is_const)\n    {\n      if (dim->cval <= 0)\n        error_loc(\"%s: array dimension must be positive\\n\", v->name);\n\n      /* FIXME: should use a type_memsize that allows us to pass in a pointer size */\n      if (0)\n      {\n        unsigned int size = type_memsize(v->type);\n\n        if (0xffffffffu / size < dim->cval)\n          error_loc(\"%s: total array size is too large\\n\", v->name);\n      }\n    }\n    else\n      sizeless = TRUE;\n\n    *ptype = type_new_array(NULL, *ptype, FALSE,\n                            dim->is_const ? dim->cval : 0,\n                            dim->is_const ? NULL : dim, NULL,\n                            pointer_default);\n  }\n\n  ptype = &v->type;\n  if (sizes) LIST_FOR_EACH_ENTRY(dim, sizes, expr_t, entry)\n  {\n    if (dim->type != EXPR_VOID)\n    {\n      if (is_array(*ptype))\n      {\n        if (!type_array_get_conformance(*ptype) ||\n            type_array_get_conformance(*ptype)->type != EXPR_VOID)\n          error_loc(\"%s: cannot specify size_is for an already sized array\\n\", v->name);\n        else\n          *ptype = type_new_array((*ptype)->name,\n                                  type_array_get_element(*ptype), FALSE,\n                                  0, dim, NULL, 0);\n      }\n      else if (is_ptr(*ptype))\n        *ptype = type_new_array((*ptype)->name, type_pointer_get_ref(*ptype), TRUE,\n                                0, dim, NULL, pointer_default);\n      else\n        error_loc(\"%s: size_is attribute applied to illegal type\\n\", v->name);\n    }\n\n    if (is_ptr(*ptype))\n      ptype = &(*ptype)->details.pointer.ref;\n    else if (is_array(*ptype))\n      ptype = &(*ptype)->details.array.elem;\n    else\n      error_loc(\"%s: too many expressions in size_is attribute\\n\", v->name);\n  }\n\n  ptype = &v->type;\n  if (lengs) LIST_FOR_EACH_ENTRY(dim, lengs, expr_t, entry)\n  {\n    if (dim->type != EXPR_VOID)\n    {\n      if (is_array(*ptype))\n      {\n        *ptype = type_new_array((*ptype)->name,\n                                type_array_get_element(*ptype),\n                                type_array_is_decl_as_ptr(*ptype),\n                                type_array_get_dim(*ptype),\n                                type_array_get_conformance(*ptype),\n                                dim, type_array_get_ptr_default_fc(*ptype));\n      }\n      else\n        error_loc(\"%s: length_is attribute applied to illegal type\\n\", v->name);\n    }\n\n    if (is_ptr(*ptype))\n      ptype = &(*ptype)->details.pointer.ref;\n    else if (is_array(*ptype))\n      ptype = &(*ptype)->details.array.elem;\n    else\n      error_loc(\"%s: too many expressions in length_is attribute\\n\", v->name);\n  }\n\n  /* v->type is currently pointing to the type on the left-side of the\n   * declaration, so we need to fix this up so that it is the return type of the\n   * function and make v->type point to the function side of the declaration */\n  if (func_type)\n  {\n    type_t *ft, *t;\n    type_t *return_type = v->type;\n    v->type = func_type;\n    for (ft = v->type; is_ptr(ft); ft = type_pointer_get_ref(ft))\n      ;\n    assert(type_get_type_detect_alias(ft) == TYPE_FUNCTION);\n    ft->details.function->retval = make_var(xstrdup(\"_RetVal\"));\n    ft->details.function->retval->type = return_type;\n    /* move calling convention attribute, if present, from pointer nodes to\n     * function node */\n    for (t = v->type; is_ptr(t); t = type_pointer_get_ref(t))\n      ft->attrs = move_attr(ft->attrs, t->attrs, ATTR_CALLCONV);\n  }\n  else\n  {\n    type_t *t;\n    for (t = v->type; is_ptr(t); t = type_pointer_get_ref(t))\n      if (is_attr(t->attrs, ATTR_CALLCONV))\n        error_loc(\"calling convention applied to non-function-pointer type\\n\");\n  }\n\n  if (decl->bits)\n    v->type = type_new_bitfield(v->type, decl->bits);\n\n  return v;\n}\n\nstatic var_list_t *set_var_types(attr_list_t *attrs, decl_spec_t *decl_spec, declarator_list_t *decls)\n{\n  declarator_t *decl, *next;\n  var_list_t *var_list = NULL;\n\n  LIST_FOR_EACH_ENTRY_SAFE( decl, next, decls, declarator_t, entry )\n  {\n    var_t *var = declare_var(attrs, decl_spec, decl, 0);\n    var_list = append_var(var_list, var);\n    free(decl);\n  }\n  free(decl_spec);\n  return var_list;\n}\n\nstatic ifref_list_t *append_ifref(ifref_list_t *list, ifref_t *iface)\n{\n    if (!iface) return list;\n    if (!list)\n    {\n        list = xmalloc( sizeof(*list) );\n        list_init( list );\n    }\n    list_add_tail( list, &iface->entry );\n    return list;\n}\n\nstatic ifref_t *make_ifref(type_t *iface)\n{\n  ifref_t *l = xmalloc(sizeof(ifref_t));\n  l->iface = iface;\n  l->attrs = NULL;\n  return l;\n}\n\nvar_list_t *append_var(var_list_t *list, var_t *var)\n{\n    if (!var) return list;\n    if (!list)\n    {\n        list = xmalloc( sizeof(*list) );\n        list_init( list );\n    }\n    list_add_tail( list, &var->entry );\n    return list;\n}\n\nstatic var_list_t *append_var_list(var_list_t *list, var_list_t *vars)\n{\n    if (!vars) return list;\n    if (!list)\n    {\n        list = xmalloc( sizeof(*list) );\n        list_init( list );\n    }\n    list_move_tail( list, vars );\n    return list;\n}\n\nvar_t *make_var(char *name)\n{\n  var_t *v = xmalloc(sizeof(var_t));\n  v->name = name;\n  v->type = NULL;\n  v->attrs = NULL;\n  v->eval = NULL;\n  v->stgclass = STG_NONE;\n  init_loc_info(&v->loc_info);\n  return v;\n}\n\nstatic declarator_list_t *append_declarator(declarator_list_t *list, declarator_t *d)\n{\n  if (!d) return list;\n  if (!list) {\n    list = xmalloc(sizeof(*list));\n    list_init(list);\n  }\n  list_add_tail(list, &d->entry);\n  return list;\n}\n\nstatic declarator_t *make_declarator(var_t *var)\n{\n  declarator_t *d = xmalloc(sizeof(*d));\n  d->var = var ? var : make_var(NULL);\n  d->type = NULL;\n  d->func_type = NULL;\n  d->array = NULL;\n  d->bits = NULL;\n  return d;\n}\n\nstatic type_t *make_safearray(type_t *type)\n{\n  return type_new_array(NULL, type_new_alias(type, \"SAFEARRAY\"), TRUE, 0,\n                        NULL, NULL, FC_RP);\n}\n\nstatic typelib_t *make_library(const char *name, const attr_list_t *attrs)\n{\n    typelib_t *typelib = xmalloc(sizeof(*typelib));\n    typelib->name = xstrdup(name);\n    typelib->attrs = attrs;\n    list_init( &typelib->importlibs );\n    return typelib;\n}\n\nstatic int hash_ident(const char *name)\n{\n  const char *p = name;\n  int sum = 0;\n  /* a simple sum hash is probably good enough */\n  while (*p) {\n    sum += *p;\n    p++;\n  }\n  return sum & (HASHMAX-1);\n}\n\n/***** type repository *****/\n\nstatic struct namespace *find_sub_namespace(struct namespace *namespace, const char *name)\n{\n  struct namespace *cur;\n\n  LIST_FOR_EACH_ENTRY(cur, &namespace->children, struct namespace, entry) {\n    if(!strcmp(cur->name, name))\n      return cur;\n  }\n\n  return NULL;\n}\n\nstatic void push_namespace(const char *name)\n{\n  struct namespace *namespace;\n\n  namespace = find_sub_namespace(current_namespace, name);\n  if(!namespace) {\n    namespace = xmalloc(sizeof(*namespace));\n    namespace->name = xstrdup(name);\n    namespace->parent = current_namespace;\n    list_add_tail(&current_namespace->children, &namespace->entry);\n    list_init(&namespace->children);\n    memset(namespace->type_hash, 0, sizeof(namespace->type_hash));\n  }\n\n  current_namespace = namespace;\n}\n\nstatic void pop_namespace(const char *name)\n{\n  assert(!strcmp(current_namespace->name, name) && current_namespace->parent);\n  current_namespace = current_namespace->parent;\n}\n\nstruct rtype {\n  const char *name;\n  type_t *type;\n  int t;\n  struct rtype *next;\n};\n\ntype_t *reg_type(type_t *type, const char *name, struct namespace *namespace, int t)\n{\n  struct rtype *nt;\n  int hash;\n  if (!name) {\n    error_loc(\"registering named type without name\\n\");\n    return type;\n  }\n  if (!namespace)\n    namespace = &global_namespace;\n  hash = hash_ident(name);\n  nt = xmalloc(sizeof(struct rtype));\n  nt->name = name;\n  if (is_global_namespace(namespace))\n    type->c_name = name;\n  else\n    type->c_name = format_namespace(namespace, \"__x_\", \"_C\", name);\n  nt->type = type;\n  nt->t = t;\n  nt->next = namespace->type_hash[hash];\n  namespace->type_hash[hash] = nt;\n  if ((t == tsSTRUCT || t == tsUNION))\n    fix_incomplete_types(type);\n  return type;\n}\n\nstatic int is_incomplete(const type_t *t)\n{\n  return !t->defined &&\n    (type_get_type_detect_alias(t) == TYPE_STRUCT ||\n     type_get_type_detect_alias(t) == TYPE_UNION ||\n     type_get_type_detect_alias(t) == TYPE_ENCAPSULATED_UNION);\n}\n\nvoid add_incomplete(type_t *t)\n{\n  struct typenode *tn = xmalloc(sizeof *tn);\n  tn->type = t;\n  list_add_tail(&incomplete_types, &tn->entry);\n}\n\nstatic void fix_type(type_t *t)\n{\n  if (type_is_alias(t) && is_incomplete(t)) {\n    type_t *ot = type_alias_get_aliasee(t);\n    fix_type(ot);\n    if (type_get_type_detect_alias(ot) == TYPE_STRUCT ||\n        type_get_type_detect_alias(ot) == TYPE_UNION ||\n        type_get_type_detect_alias(ot) == TYPE_ENCAPSULATED_UNION)\n      t->details.structure = ot->details.structure;\n    t->defined = ot->defined;\n  }\n}\n\nstatic void fix_incomplete(void)\n{\n  struct typenode *tn, *next;\n\n  LIST_FOR_EACH_ENTRY_SAFE(tn, next, &incomplete_types, struct typenode, entry) {\n    fix_type(tn->type);\n    list_remove(&tn->entry);\n    free(tn);\n  }\n}\n\nstatic void fix_incomplete_types(type_t *complete_type)\n{\n  struct typenode *tn, *next;\n\n  LIST_FOR_EACH_ENTRY_SAFE(tn, next, &incomplete_types, struct typenode, entry)\n  {\n    if (type_is_equal(complete_type, tn->type))\n    {\n      tn->type->details.structure = complete_type->details.structure;\n      list_remove(&tn->entry);\n      free(tn);\n    }\n  }\n}\n\nstatic type_t *reg_typedefs(decl_spec_t *decl_spec, declarator_list_t *decls, attr_list_t *attrs)\n{\n  const declarator_t *decl;\n  type_t *type = decl_spec->type;\n\n  if (is_attr(attrs, ATTR_UUID) && !is_attr(attrs, ATTR_PUBLIC))\n    attrs = append_attr( attrs, make_attr(ATTR_PUBLIC) );\n\n  /* We must generate names for tagless enum, struct or union.\n     Typedef-ing a tagless enum, struct or union means we want the typedef\n     to be included in a library hence the public attribute.  */\n  if (type_get_type_detect_alias(type) == TYPE_ENUM ||\n      type_get_type_detect_alias(type) == TYPE_STRUCT ||\n      type_get_type_detect_alias(type) == TYPE_UNION ||\n      type_get_type_detect_alias(type) == TYPE_ENCAPSULATED_UNION)\n  {\n    if (!type->name)\n      type->name = gen_name();\n\n    /* replace existing attributes when generating a typelib */\n    if (do_typelib)\n        type->attrs = attrs;\n  }\n\n  LIST_FOR_EACH_ENTRY( decl, decls, const declarator_t, entry )\n  {\n\n    if (decl->var->name) {\n      type_t *cur;\n      var_t *name;\n\n      cur = find_type(decl->var->name, current_namespace, 0);\n\n      /*\n       * MIDL allows shadowing types that are declared in imported files.\n       * We don't throw an error in this case and instead add a new type\n       * (which is earlier on the list in hash table, so it will be used\n       * instead of shadowed type).\n       *\n       * FIXME: We may consider string separated type tables for each input\n       *        for cleaner solution.\n       */\n      if (cur && input_name == cur->loc_info.input_name)\n          error_loc(\"%s: redefinition error; original definition was at %s:%d\\n\",\n                    cur->name, cur->loc_info.input_name,\n                    cur->loc_info.line_number);\n\n      name = declare_var(attrs, decl_spec, decl, 0);\n      cur = type_new_alias(name->type, name->name);\n      cur->attrs = attrs;\n\n      if (is_incomplete(cur))\n        add_incomplete(cur);\n      reg_type(cur, cur->name, current_namespace, 0);\n    }\n  }\n  return type;\n}\n\ntype_t *find_type(const char *name, struct namespace *namespace, int t)\n{\n  struct rtype *cur;\n\n  if(namespace && namespace != &global_namespace) {\n    for(cur = namespace->type_hash[hash_ident(name)]; cur; cur = cur->next) {\n      if(cur->t == t && !strcmp(cur->name, name))\n        return cur->type;\n    }\n  }\n  for(cur = global_namespace.type_hash[hash_ident(name)]; cur; cur = cur->next) {\n    if(cur->t == t && !strcmp(cur->name, name))\n      return cur->type;\n  }\n  return NULL;\n}\n\nstatic type_t *find_type_or_error(const char *name, int t)\n{\n  type_t *type = find_type(name, NULL, t);\n  if (!type) {\n    error_loc(\"type '%s' not found\\n\", name);\n    return NULL;\n  }\n  return type;\n}\n\nstatic type_t *find_type_or_error2(char *name, int t)\n{\n  type_t *tp = find_type_or_error(name, t);\n  free(name);\n  return tp;\n}\n\nint is_type(const char *name)\n{\n  return find_type(name, current_namespace, 0) != NULL;\n}\n\ntype_t *get_type(enum type_type type, char *name, struct namespace *namespace, int t)\n{\n  type_t *tp;\n  if (!namespace)\n    namespace = &global_namespace;\n  if (name) {\n    tp = find_type(name, namespace, t);\n    if (tp) {\n      free(name);\n      return tp;\n    }\n  }\n  tp = make_type(type);\n  tp->name = name;\n  tp->namespace = namespace;\n  if (!name) return tp;\n  return reg_type(tp, name, namespace, t);\n}\n\n/***** constant repository *****/\n\nstruct rconst {\n  char *name;\n  var_t *var;\n  struct rconst *next;\n};\n\nstruct rconst *const_hash[HASHMAX];\n\nstatic var_t *reg_const(var_t *var)\n{\n  struct rconst *nc;\n  int hash;\n  if (!var->name) {\n    error_loc(\"registering constant without name\\n\");\n    return var;\n  }\n  hash = hash_ident(var->name);\n  nc = xmalloc(sizeof(struct rconst));\n  nc->name = var->name;\n  nc->var = var;\n  nc->next = const_hash[hash];\n  const_hash[hash] = nc;\n  return var;\n}\n\nvar_t *find_const(const char *name, int f)\n{\n  struct rconst *cur = const_hash[hash_ident(name)];\n  while (cur && strcmp(cur->name, name))\n    cur = cur->next;\n  if (!cur) {\n    if (f) error_loc(\"constant '%s' not found\\n\", name);\n    return NULL;\n  }\n  return cur->var;\n}\n\nstatic char *gen_name(void)\n{\n  static const char format[] = \"__WIDL_%s_generated_name_%08lX\";\n  static unsigned long n = 0;\n  static const char *file_id;\n  static size_t size;\n  char *name;\n\n  if (! file_id)\n  {\n    char *dst = dup_basename(input_idl_name, \".idl\");\n    file_id = dst;\n\n    for (; *dst; ++dst)\n      if (! isalnum((unsigned char) *dst))\n        *dst = '_';\n\n    size = sizeof format - 7 + strlen(file_id) + 8;\n  }\n\n  name = xmalloc(size);\n  sprintf(name, format, file_id, n++);\n  return name;\n}\n\nstruct allowed_attr\n{\n    unsigned int dce_compatible : 1;\n    unsigned int acf : 1;\n    unsigned int on_interface : 1;\n    unsigned int on_function : 1;\n    unsigned int on_arg : 1;\n    unsigned int on_type : 1;\n    unsigned int on_enum : 1;\n    unsigned int on_struct : 2;\n    unsigned int on_union : 1;\n    unsigned int on_field : 1;\n    unsigned int on_library : 1;\n    unsigned int on_dispinterface : 1;\n    unsigned int on_module : 1;\n    unsigned int on_coclass : 1;\n    const char *display_name;\n};\n\nstruct allowed_attr allowed_attr[] =\n{\n    /* attr                        { D ACF I Fn ARG T En St Un Fi  L  DI M  C  <display name> } */\n    /* ATTR_AGGREGATABLE */        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \"aggregatable\" },\n    /* ATTR_ANNOTATION */          { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"annotation\" },\n    /* ATTR_APPOBJECT */           { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \"appobject\" },\n    /* ATTR_ASYNC */               { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"async\" },\n    /* ATTR_ASYNCUUID */           { 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, \"async_uuid\" },\n    /* ATTR_AUTO_HANDLE */         { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"auto_handle\" },\n    /* ATTR_BINDABLE */            { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"bindable\" },\n    /* ATTR_BROADCAST */           { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"broadcast\" },\n    /* ATTR_CALLAS */              { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"call_as\" },\n    /* ATTR_CALLCONV */            { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL },\n    /* ATTR_CASE */                { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \"case\" },\n    /* ATTR_CODE */                { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"code\" },\n    /* ATTR_COMMSTATUS */          { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"comm_status\" },\n    /* ATTR_CONST */               { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"const\" },\n    /* ATTR_CONTEXTHANDLE */       { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \"context_handle\" },\n    /* ATTR_CONTROL */             { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, \"control\" },\n    /* ATTR_DECODE */              { 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \"decode\" },\n    /* ATTR_DEFAULT */             { 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, \"default\" },\n    /* ATTR_DEFAULTBIND */         { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"defaultbind\" },\n    /* ATTR_DEFAULTCOLLELEM */     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"defaultcollelem\" },\n    /* ATTR_DEFAULTVALUE */        { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"defaultvalue\" },\n    /* ATTR_DEFAULTVTABLE */       { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \"defaultvtable\" },\n /* ATTR_DISABLECONSISTENCYCHECK */{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"disable_consistency_check\" },\n    /* ATTR_DISPINTERFACE */       { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL },\n    /* ATTR_DISPLAYBIND */         { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"displaybind\" },\n    /* ATTR_DLLNAME */             { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, \"dllname\" },\n    /* ATTR_DUAL */                { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"dual\" },\n    /* ATTR_ENABLEALLOCATE */      { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"enable_allocate\" },\n    /* ATTR_ENCODE */              { 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \"encode\" },\n    /* ATTR_ENDPOINT */            { 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"endpoint\" },\n    /* ATTR_ENTRY */               { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"entry\" },\n    /* ATTR_EXPLICIT_HANDLE */     { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"explicit_handle\" },\n    /* ATTR_FAULTSTATUS */         { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"fault_status\" },\n    /* ATTR_FORCEALLOCATE */       { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"force_allocate\" },\n    /* ATTR_HANDLE */              { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \"handle\" },\n    /* ATTR_HELPCONTEXT */         { 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, \"helpcontext\" },\n    /* ATTR_HELPFILE */            { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, \"helpfile\" },\n    /* ATTR_HELPSTRING */          { 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, \"helpstring\" },\n    /* ATTR_HELPSTRINGCONTEXT */   { 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, \"helpstringcontext\" },\n    /* ATTR_HELPSTRINGDLL */       { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, \"helpstringdll\" },\n    /* ATTR_HIDDEN */              { 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, \"hidden\" },\n    /* ATTR_ID */                  { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, \"id\" },\n    /* ATTR_IDEMPOTENT */          { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"idempotent\" },\n    /* ATTR_IGNORE */              { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, \"ignore\" },\n    /* ATTR_IIDIS */               { 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, \"iid_is\" },\n    /* ATTR_IMMEDIATEBIND */       { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"immediatebind\" },\n    /* ATTR_IMPLICIT_HANDLE */     { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"implicit_handle\" },\n    /* ATTR_IN */                  { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"in\" },\n    /* ATTR_INLINE */              { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"inline\" },\n    /* ATTR_INPUTSYNC */           { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"inputsync\" },\n    /* ATTR_LENGTHIS */            { 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, \"length_is\" },\n    /* ATTR_LIBLCID */             { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, \"lcid\" },\n    /* ATTR_LICENSED */            { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \"licensed\" },\n    /* ATTR_LOCAL */               { 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"local\" },\n    /* ATTR_MAYBE */               { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"maybe\" },\n    /* ATTR_MESSAGE */             { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"message\" },\n    /* ATTR_NOCODE */              { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"nocode\" },\n    /* ATTR_NONBROWSABLE */        { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"nonbrowsable\" },\n    /* ATTR_NONCREATABLE */        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \"noncreatable\" },\n    /* ATTR_NONEXTENSIBLE */       { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"nonextensible\" },\n    /* ATTR_NOTIFY */              { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"notify\" },\n    /* ATTR_NOTIFYFLAG */          { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"notify_flag\" },\n    /* ATTR_OBJECT */              { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"object\" },\n    /* ATTR_ODL */                 { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \"odl\" },\n    /* ATTR_OLEAUTOMATION */       { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"oleautomation\" },\n    /* ATTR_OPTIMIZE */            { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"optimize\" },\n    /* ATTR_OPTIONAL */            { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"optional\" },\n    /* ATTR_OUT */                 { 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"out\" },\n    /* ATTR_PARAMLCID */           { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"lcid\" },\n    /* ATTR_PARTIALIGNORE */       { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"partial_ignore\" },\n    /* ATTR_POINTERDEFAULT */      { 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"pointer_default\" },\n    /* ATTR_POINTERTYPE */         { 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, \"ref, unique or ptr\" },\n    /* ATTR_PROGID */              { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \"progid\" },\n    /* ATTR_PROPGET */             { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"propget\" },\n    /* ATTR_PROPPUT */             { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"propput\" },\n    /* ATTR_PROPPUTREF */          { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"propputref\" },\n    /* ATTR_PROXY */               { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"proxy\" },\n    /* ATTR_PUBLIC */              { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \"public\" },\n    /* ATTR_RANGE */               { 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, \"range\" },\n    /* ATTR_READONLY */            { 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, \"readonly\" },\n    /* ATTR_REPRESENTAS */         { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \"represent_as\" },\n    /* ATTR_REQUESTEDIT */         { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"requestedit\" },\n    /* ATTR_RESTRICTED */          { 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, \"restricted\" },\n    /* ATTR_RETVAL */              { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"retval\" },\n    /* ATTR_SIZEIS */              { 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, \"size_is\" },\n    /* ATTR_SOURCE */              { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, \"source\" },\n    /* ATTR_STRICTCONTEXTHANDLE */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"strict_context_handle\" },\n    /* ATTR_STRING */              { 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, \"string\" },\n    /* ATTR_SWITCHIS */            { 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, \"switch_is\" },\n    /* ATTR_SWITCHTYPE */          { 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, \"switch_type\" },\n    /* ATTR_THREADING */           { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \"threading\" },\n    /* ATTR_TRANSMITAS */          { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \"transmit_as\" },\n    /* ATTR_UIDEFAULT */           { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"uidefault\" },\n    /* ATTR_USESGETLASTERROR */    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"usesgetlasterror\" },\n    /* ATTR_USERMARSHAL */         { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \"user_marshal\" },\n    /* ATTR_UUID */                { 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, \"uuid\" },\n    /* ATTR_V1ENUM */              { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, \"v1_enum\" },\n    /* ATTR_VARARG */              { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \"vararg\" },\n    /* ATTR_VERSION */             { 1, 0, 1, 0, 0, 1, 1, 2, 0, 0, 1, 0, 0, 1, \"version\" },\n    /* ATTR_VIPROGID */            { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, \"vi_progid\" },\n    /* ATTR_WIREMARSHAL */         { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, \"wire_marshal\" },\n};\n\nconst char *get_attr_display_name(enum attr_type type)\n{\n    return allowed_attr[type].display_name;\n}\n\nstatic attr_list_t *check_iface_attrs(const char *name, attr_list_t *attrs)\n{\n  const attr_t *attr;\n  if (!attrs) return attrs;\n  LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)\n  {\n    if (!allowed_attr[attr->type].on_interface)\n      error_loc(\"inapplicable attribute %s for interface %s\\n\",\n                allowed_attr[attr->type].display_name, name);\n    if (attr->type == ATTR_IMPLICIT_HANDLE)\n    {\n        const var_t *var = attr->u.pval;\n        if (type_get_type( var->type) == TYPE_BASIC &&\n            type_basic_get_type( var->type ) == TYPE_BASIC_HANDLE)\n            continue;\n        if (is_aliaschain_attr( var->type, ATTR_HANDLE ))\n            continue;\n      error_loc(\"attribute %s requires a handle type in interface %s\\n\",\n                allowed_attr[attr->type].display_name, name);\n    }\n  }\n  return attrs;\n}\n\nstatic attr_list_t *check_function_attrs(const char *name, attr_list_t *attrs)\n{\n  const attr_t *attr;\n  if (!attrs) return attrs;\n  LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)\n  {\n    if (!allowed_attr[attr->type].on_function)\n      error_loc(\"inapplicable attribute %s for function %s\\n\",\n                allowed_attr[attr->type].display_name, name);\n  }\n  return attrs;\n}\n\nstatic void check_arg_attrs(const var_t *arg)\n{\n  const attr_t *attr;\n\n  if (arg->attrs)\n  {\n    LIST_FOR_EACH_ENTRY(attr, arg->attrs, const attr_t, entry)\n    {\n      if (!allowed_attr[attr->type].on_arg)\n        error_loc(\"inapplicable attribute %s for argument %s\\n\",\n                  allowed_attr[attr->type].display_name, arg->name);\n    }\n  }\n}\n\nstatic attr_list_t *check_typedef_attrs(attr_list_t *attrs)\n{\n  const attr_t *attr;\n  if (!attrs) return attrs;\n  LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)\n  {\n    if (!allowed_attr[attr->type].on_type)\n      error_loc(\"inapplicable attribute %s for typedef\\n\",\n                allowed_attr[attr->type].display_name);\n  }\n  return attrs;\n}\n\nstatic attr_list_t *check_enum_attrs(attr_list_t *attrs)\n{\n  const attr_t *attr;\n  if (!attrs) return attrs;\n  LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)\n  {\n    if (!allowed_attr[attr->type].on_enum)\n      error_loc(\"inapplicable attribute %s for enum\\n\",\n                allowed_attr[attr->type].display_name);\n  }\n  return attrs;\n}\n\nstatic attr_list_t *check_struct_attrs(attr_list_t *attrs)\n{\n  int mask = winrt_mode ? 3 : 1;\n  const attr_t *attr;\n  if (!attrs) return attrs;\n  LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)\n  {\n    if (!(allowed_attr[attr->type].on_struct & mask))\n      error_loc(\"inapplicable attribute %s for struct\\n\",\n                allowed_attr[attr->type].display_name);\n  }\n  return attrs;\n}\n\nstatic attr_list_t *check_union_attrs(attr_list_t *attrs)\n{\n  const attr_t *attr;\n  if (!attrs) return attrs;\n  LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)\n  {\n    if (!allowed_attr[attr->type].on_union)\n      error_loc(\"inapplicable attribute %s for union\\n\",\n                allowed_attr[attr->type].display_name);\n  }\n  return attrs;\n}\n\nstatic attr_list_t *check_field_attrs(const char *name, attr_list_t *attrs)\n{\n  const attr_t *attr;\n  if (!attrs) return attrs;\n  LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)\n  {\n    if (!allowed_attr[attr->type].on_field)\n      error_loc(\"inapplicable attribute %s for field %s\\n\",\n                allowed_attr[attr->type].display_name, name);\n  }\n  return attrs;\n}\n\nstatic attr_list_t *check_library_attrs(const char *name, attr_list_t *attrs)\n{\n  const attr_t *attr;\n  if (!attrs) return attrs;\n  LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)\n  {\n    if (!allowed_attr[attr->type].on_library)\n      error_loc(\"inapplicable attribute %s for library %s\\n\",\n                allowed_attr[attr->type].display_name, name);\n  }\n  return attrs;\n}\n\nstatic attr_list_t *check_dispiface_attrs(const char *name, attr_list_t *attrs)\n{\n  const attr_t *attr;\n  if (!attrs) return attrs;\n  LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)\n  {\n    if (!allowed_attr[attr->type].on_dispinterface)\n      error_loc(\"inapplicable attribute %s for dispinterface %s\\n\",\n                allowed_attr[attr->type].display_name, name);\n  }\n  return attrs;\n}\n\nstatic attr_list_t *check_module_attrs(const char *name, attr_list_t *attrs)\n{\n  const attr_t *attr;\n  if (!attrs) return attrs;\n  LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)\n  {\n    if (!allowed_attr[attr->type].on_module)\n      error_loc(\"inapplicable attribute %s for module %s\\n\",\n                allowed_attr[attr->type].display_name, name);\n  }\n  return attrs;\n}\n\nstatic attr_list_t *check_coclass_attrs(const char *name, attr_list_t *attrs)\n{\n  const attr_t *attr;\n  if (!attrs) return attrs;\n  LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)\n  {\n    if (!allowed_attr[attr->type].on_coclass)\n      error_loc(\"inapplicable attribute %s for coclass %s\\n\",\n                allowed_attr[attr->type].display_name, name);\n  }\n  return attrs;\n}\n\nstatic int is_allowed_conf_type(const type_t *type)\n{\n    switch (type_get_type(type))\n    {\n    case TYPE_ENUM:\n        return TRUE;\n    case TYPE_BASIC:\n        switch (type_basic_get_type(type))\n        {\n        case TYPE_BASIC_INT8:\n        case TYPE_BASIC_INT16:\n        case TYPE_BASIC_INT32:\n        case TYPE_BASIC_INT64:\n        case TYPE_BASIC_INT:\n        case TYPE_BASIC_CHAR:\n        case TYPE_BASIC_HYPER:\n        case TYPE_BASIC_BYTE:\n        case TYPE_BASIC_WCHAR:\n            return TRUE;\n        default:\n            return FALSE;\n        }\n    case TYPE_ALIAS:\n        /* shouldn't get here because of type_get_type call above */\n        assert(0);\n        /* fall through */\n    case TYPE_STRUCT:\n    case TYPE_UNION:\n    case TYPE_ENCAPSULATED_UNION:\n    case TYPE_ARRAY:\n    case TYPE_POINTER:\n    case TYPE_VOID:\n    case TYPE_MODULE:\n    case TYPE_COCLASS:\n    case TYPE_FUNCTION:\n    case TYPE_INTERFACE:\n    case TYPE_BITFIELD:\n        return FALSE;\n    }\n    return FALSE;\n}\n\nstatic int is_ptr_guid_type(const type_t *type)\n{\n    /* first, make sure it is a pointer to something */\n    if (!is_ptr(type)) return FALSE;\n\n    /* second, make sure it is a pointer to something of size sizeof(GUID),\n     * i.e. 16 bytes */\n    return (type_memsize(type_pointer_get_ref(type)) == 16);\n}\n\nstatic void check_conformance_expr_list(const char *attr_name, const var_t *arg, const type_t *container_type, expr_list_t *expr_list)\n{\n    expr_t *dim;\n    struct expr_loc expr_loc;\n    expr_loc.v = arg;\n    expr_loc.attr = attr_name;\n    if (expr_list) LIST_FOR_EACH_ENTRY(dim, expr_list, expr_t, entry)\n    {\n        if (dim->type != EXPR_VOID)\n        {\n            const type_t *expr_type = expr_resolve_type(&expr_loc, container_type, dim);\n            if (!is_allowed_conf_type(expr_type))\n                error_loc_info(&arg->loc_info, \"expression must resolve to integral type <= 32bits for attribute %s\\n\",\n                               attr_name);\n        }\n    }\n}\n\nstatic void check_remoting_fields(const var_t *var, type_t *type);\n\n/* checks that properties common to fields and arguments are consistent */\nstatic void check_field_common(const type_t *container_type,\n                               const char *container_name, const var_t *arg)\n{\n    type_t *type = arg->type;\n    int more_to_do;\n    const char *container_type_name;\n    const char *var_type;\n\n    switch (type_get_type(container_type))\n    {\n    case TYPE_STRUCT:\n        container_type_name = \"struct\";\n        var_type = \"field\";\n        break;\n    case TYPE_UNION:\n        container_type_name = \"union\";\n        var_type = \"arm\";\n        break;\n    case TYPE_ENCAPSULATED_UNION:\n        container_type_name = \"encapsulated union\";\n        var_type = \"arm\";\n        break;\n    case TYPE_FUNCTION:\n        container_type_name = \"function\";\n        var_type = \"parameter\";\n        break;\n    default:\n        /* should be no other container types */\n        assert(0);\n        return;\n    }\n\n    if (is_attr(arg->attrs, ATTR_LENGTHIS) &&\n        (is_attr(arg->attrs, ATTR_STRING) || is_aliaschain_attr(arg->type, ATTR_STRING)))\n        error_loc_info(&arg->loc_info,\n                       \"string and length_is specified for argument %s are mutually exclusive attributes\\n\",\n                       arg->name);\n\n    if (is_attr(arg->attrs, ATTR_SIZEIS))\n    {\n        expr_list_t *size_is_exprs = get_attrp(arg->attrs, ATTR_SIZEIS);\n        check_conformance_expr_list(\"size_is\", arg, container_type, size_is_exprs);\n    }\n    if (is_attr(arg->attrs, ATTR_LENGTHIS))\n    {\n        expr_list_t *length_is_exprs = get_attrp(arg->attrs, ATTR_LENGTHIS);\n        check_conformance_expr_list(\"length_is\", arg, container_type, length_is_exprs);\n    }\n    if (is_attr(arg->attrs, ATTR_IIDIS))\n    {\n        struct expr_loc expr_loc;\n        expr_t *expr = get_attrp(arg->attrs, ATTR_IIDIS);\n        if (expr->type != EXPR_VOID)\n        {\n            const type_t *expr_type;\n            expr_loc.v = arg;\n            expr_loc.attr = \"iid_is\";\n            expr_type = expr_resolve_type(&expr_loc, container_type, expr);\n            if (!expr_type || !is_ptr_guid_type(expr_type))\n                error_loc_info(&arg->loc_info, \"expression must resolve to pointer to GUID type for attribute iid_is\\n\");\n        }\n    }\n    if (is_attr(arg->attrs, ATTR_SWITCHIS))\n    {\n        struct expr_loc expr_loc;\n        expr_t *expr = get_attrp(arg->attrs, ATTR_SWITCHIS);\n        if (expr->type != EXPR_VOID)\n        {\n            const type_t *expr_type;\n            expr_loc.v = arg;\n            expr_loc.attr = \"switch_is\";\n            expr_type = expr_resolve_type(&expr_loc, container_type, expr);\n            if (!expr_type || !is_allowed_conf_type(expr_type))\n                error_loc_info(&arg->loc_info, \"expression must resolve to integral type <= 32bits for attribute %s\\n\",\n                               expr_loc.attr);\n        }\n    }\n\n    do\n    {\n        more_to_do = FALSE;\n\n        switch (typegen_detect_type(type, arg->attrs, TDT_IGNORE_STRINGS))\n        {\n        case TGT_STRUCT:\n        case TGT_UNION:\n            check_remoting_fields(arg, type);\n            break;\n        case TGT_INVALID:\n        {\n            const char *reason = \"is invalid\";\n            switch (type_get_type(type))\n            {\n            case TYPE_VOID:\n                reason = \"cannot derive from void *\";\n                break;\n            case TYPE_FUNCTION:\n                reason = \"cannot be a function pointer\";\n                break;\n            case TYPE_BITFIELD:\n                reason = \"cannot be a bit-field\";\n                break;\n            case TYPE_COCLASS:\n                reason = \"cannot be a class\";\n                break;\n            case TYPE_INTERFACE:\n                reason = \"cannot be a non-pointer to an interface\";\n                break;\n            case TYPE_MODULE:\n                reason = \"cannot be a module\";\n                break;\n            default:\n                break;\n            }\n            error_loc_info(&arg->loc_info, \"%s \\'%s\\' of %s \\'%s\\' %s\\n\",\n                           var_type, arg->name, container_type_name, container_name, reason);\n            break;\n        }\n        case TGT_CTXT_HANDLE:\n        case TGT_CTXT_HANDLE_POINTER:\n            if (type_get_type(container_type) != TYPE_FUNCTION)\n                error_loc_info(&arg->loc_info,\n                               \"%s \\'%s\\' of %s \\'%s\\' cannot be a context handle\\n\",\n                               var_type, arg->name, container_type_name,\n                               container_name);\n            break;\n        case TGT_STRING:\n        {\n            const type_t *t = type;\n            while (is_ptr(t))\n                t = type_pointer_get_ref(t);\n            if (is_aliaschain_attr(t, ATTR_RANGE))\n                warning_loc_info(&arg->loc_info, \"%s: range not verified for a string of ranged types\\n\", arg->name);\n            break;\n        }\n        case TGT_POINTER:\n            type = type_pointer_get_ref(type);\n            more_to_do = TRUE;\n            break;\n        case TGT_ARRAY:\n            type = type_array_get_element(type);\n            more_to_do = TRUE;\n            break;\n        case TGT_USER_TYPE:\n        case TGT_IFACE_POINTER:\n        case TGT_BASIC:\n        case TGT_ENUM:\n        case TGT_RANGE:\n            /* nothing to do */\n            break;\n        }\n    } while (more_to_do);\n}\n\nstatic void check_remoting_fields(const var_t *var, type_t *type)\n{\n    const var_t *field;\n    const var_list_t *fields = NULL;\n\n    type = type_get_real_type(type);\n\n    if (type->checked)\n        return;\n\n    type->checked = TRUE;\n\n    if (type_get_type(type) == TYPE_STRUCT)\n    {\n        if (type_is_complete(type))\n            fields = type_struct_get_fields(type);\n        else\n            error_loc_info(&var->loc_info, \"undefined type declaration %s\\n\", type->name);\n    }\n    else if (type_get_type(type) == TYPE_UNION || type_get_type(type) == TYPE_ENCAPSULATED_UNION)\n        fields = type_union_get_cases(type);\n\n    if (fields) LIST_FOR_EACH_ENTRY( field, fields, const var_t, entry )\n        if (field->type) check_field_common(type, type->name, field);\n}\n\n/* checks that arguments for a function make sense for marshalling and unmarshalling */\nstatic void check_remoting_args(const var_t *func)\n{\n    const char *funcname = func->name;\n    const var_t *arg;\n\n    if (func->type->details.function->args) LIST_FOR_EACH_ENTRY( arg, func->type->details.function->args, const var_t, entry )\n    {\n        const type_t *type = arg->type;\n\n        /* check that [out] parameters have enough pointer levels */\n        if (is_attr(arg->attrs, ATTR_OUT))\n        {\n            switch (typegen_detect_type(type, arg->attrs, TDT_ALL_TYPES))\n            {\n            case TGT_BASIC:\n            case TGT_ENUM:\n            case TGT_RANGE:\n            case TGT_STRUCT:\n            case TGT_UNION:\n            case TGT_CTXT_HANDLE:\n            case TGT_USER_TYPE:\n                error_loc_info(&arg->loc_info, \"out parameter \\'%s\\' of function \\'%s\\' is not a pointer\\n\", arg->name, funcname);\n                break;\n            case TGT_IFACE_POINTER:\n                error_loc_info(&arg->loc_info, \"out interface pointer \\'%s\\' of function \\'%s\\' is not a double pointer\\n\", arg->name, funcname);\n                break;\n            case TGT_STRING:\n                if (is_array(type))\n                {\n                    /* needs conformance or fixed dimension */\n                    if (type_array_has_conformance(type) &&\n                        type_array_get_conformance(type)->type != EXPR_VOID) break;\n                    if (!type_array_has_conformance(type) && type_array_get_dim(type)) break;\n                }\n                if (is_attr( arg->attrs, ATTR_IN )) break;\n                error_loc_info(&arg->loc_info, \"out parameter \\'%s\\' of function \\'%s\\' cannot be an unsized string\\n\", arg->name, funcname);\n                break;\n            case TGT_INVALID:\n                /* already error'd before we get here */\n            case TGT_CTXT_HANDLE_POINTER:\n            case TGT_POINTER:\n            case TGT_ARRAY:\n                /* OK */\n                break;\n            }\n        }\n\n        check_field_common(func->type, funcname, arg);\n    }\n\n    if (type_get_type(type_function_get_rettype(func->type)) != TYPE_VOID)\n    {\n        var_t var;\n        var = *func;\n        var.type = type_function_get_rettype(func->type);\n        var.name = xstrdup(\"return value\");\n        check_field_common(func->type, funcname, &var);\n        free(var.name);\n    }\n}\n\nstatic void add_explicit_handle_if_necessary(const type_t *iface, var_t *func)\n{\n    unsigned char explicit_fc, implicit_fc;\n\n    /* check for a defined binding handle */\n    if (!get_func_handle_var( iface, func, &explicit_fc, &implicit_fc ) || !explicit_fc)\n    {\n        /* no explicit handle specified so add\n         * \"[in] handle_t IDL_handle\" as the first parameter to the\n         * function */\n        var_t *idl_handle = make_var(xstrdup(\"IDL_handle\"));\n        idl_handle->attrs = append_attr(NULL, make_attr(ATTR_IN));\n        idl_handle->type = find_type_or_error(\"handle_t\", 0);\n        type_function_add_head_arg(func->type, idl_handle);\n    }\n}\n\nstatic void check_functions(const type_t *iface, int is_inside_library)\n{\n    const statement_t *stmt;\n    if (is_attr(iface->attrs, ATTR_EXPLICIT_HANDLE))\n    {\n        STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) )\n        {\n            var_t *func = stmt->u.var;\n            add_explicit_handle_if_necessary(iface, func);\n        }\n    }\n    if (!is_inside_library && !is_attr(iface->attrs, ATTR_LOCAL))\n    {\n        STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) )\n        {\n            const var_t *func = stmt->u.var;\n            if (!is_attr(func->attrs, ATTR_LOCAL))\n                check_remoting_args(func);\n        }\n    }\n}\n\nstatic void check_statements(const statement_list_t *stmts, int is_inside_library)\n{\n    const statement_t *stmt;\n\n    if (stmts) LIST_FOR_EACH_ENTRY(stmt, stmts, const statement_t, entry)\n    {\n        switch(stmt->type) {\n        case STMT_LIBRARY:\n            check_statements(stmt->u.lib->stmts, TRUE);\n            break;\n        case STMT_TYPE:\n            switch(type_get_type(stmt->u.type)) {\n            case TYPE_INTERFACE:\n                check_functions(stmt->u.type, is_inside_library);\n                break;\n            case TYPE_COCLASS:\n                if(winrt_mode)\n                    error_loc(\"coclass is not allowed in Windows Runtime mode\\n\");\n                break;\n            default:\n                break;\n            }\n            break;\n        default:\n            break;\n        }\n    }\n}\n\nstatic void check_all_user_types(const statement_list_t *stmts)\n{\n  const statement_t *stmt;\n\n  if (stmts) LIST_FOR_EACH_ENTRY(stmt, stmts, const statement_t, entry)\n  {\n    if (stmt->type == STMT_LIBRARY)\n      check_all_user_types(stmt->u.lib->stmts);\n    else if (stmt->type == STMT_TYPE && type_get_type(stmt->u.type) == TYPE_INTERFACE &&\n             !is_local(stmt->u.type->attrs))\n    {\n      const statement_t *stmt_func;\n      STATEMENTS_FOR_EACH_FUNC(stmt_func, type_iface_get_stmts(stmt->u.type)) {\n        const var_t *func = stmt_func->u.var;\n        check_for_additional_prototype_types(func->type->details.function->args);\n      }\n    }\n  }\n}\n\nint is_valid_uuid(const char *s)\n{\n  int i;\n\n  for (i = 0; i < 36; ++i)\n    if (i == 8 || i == 13 || i == 18 || i == 23)\n    {\n      if (s[i] != '-')\n        return FALSE;\n    }\n    else\n      if (!isxdigit(s[i]))\n        return FALSE;\n\n  return s[i] == '\\0';\n}\n\nstatic statement_t *make_statement(enum statement_type type)\n{\n    statement_t *stmt = xmalloc(sizeof(*stmt));\n    stmt->type = type;\n    return stmt;\n}\n\nstatic statement_t *make_statement_type_decl(type_t *type)\n{\n    statement_t *stmt = make_statement(STMT_TYPE);\n    stmt->u.type = type;\n    return stmt;\n}\n\nstatic statement_t *make_statement_reference(type_t *type)\n{\n    statement_t *stmt = make_statement(STMT_TYPEREF);\n    stmt->u.type = type;\n    return stmt;\n}\n\nstatic statement_t *make_statement_declaration(var_t *var)\n{\n    statement_t *stmt = make_statement(STMT_DECLARATION);\n    stmt->u.var = var;\n    if (var->stgclass == STG_EXTERN && var->eval)\n        warning(\"'%s' initialised and declared extern\\n\", var->name);\n    if (is_const_decl(var))\n    {\n        if (var->eval)\n            reg_const(var);\n    }\n    else if (type_get_type(var->type) == TYPE_FUNCTION)\n        check_function_attrs(var->name, var->attrs);\n    else if (var->stgclass == STG_NONE || var->stgclass == STG_REGISTER)\n        error_loc(\"instantiation of data is illegal\\n\");\n    return stmt;\n}\n\nstatic statement_t *make_statement_library(typelib_t *typelib)\n{\n    statement_t *stmt = make_statement(STMT_LIBRARY);\n    stmt->u.lib = typelib;\n    return stmt;\n}\n\nstatic statement_t *make_statement_pragma(const char *str)\n{\n    statement_t *stmt = make_statement(STMT_PRAGMA);\n    stmt->u.str = str;\n    return stmt;\n}\n\nstatic statement_t *make_statement_cppquote(const char *str)\n{\n    statement_t *stmt = make_statement(STMT_CPPQUOTE);\n    stmt->u.str = str;\n    return stmt;\n}\n\nstatic statement_t *make_statement_importlib(const char *str)\n{\n    statement_t *stmt = make_statement(STMT_IMPORTLIB);\n    stmt->u.str = str;\n    return stmt;\n}\n\nstatic statement_t *make_statement_import(const char *str)\n{\n    statement_t *stmt = make_statement(STMT_IMPORT);\n    stmt->u.str = str;\n    return stmt;\n}\n\nstatic statement_t *make_statement_module(type_t *type)\n{\n    statement_t *stmt = make_statement(STMT_MODULE);\n    stmt->u.type = type;\n    return stmt;\n}\n\nstatic statement_t *make_statement_typedef(declarator_list_t *decls)\n{\n    declarator_t *decl, *next;\n    statement_t *stmt;\n    type_list_t **type_list;\n\n    if (!decls) return NULL;\n\n    stmt = make_statement(STMT_TYPEDEF);\n    stmt->u.type_list = NULL;\n    type_list = &stmt->u.type_list;\n\n    LIST_FOR_EACH_ENTRY_SAFE( decl, next, decls, declarator_t, entry )\n    {\n        var_t *var = decl->var;\n        type_t *type = find_type_or_error(var->name, 0);\n        *type_list = xmalloc(sizeof(type_list_t));\n        (*type_list)->type = type;\n        (*type_list)->next = NULL;\n\n        type_list = &(*type_list)->next;\n        free(decl);\n        free(var);\n    }\n\n    return stmt;\n}\n\nstatic statement_list_t *append_statements(statement_list_t *l1, statement_list_t *l2)\n{\n    if (!l2) return l1;\n    if (!l1 || l1 == l2) return l2;\n    list_move_tail (l1, l2);\n    return l1;\n}\n\nstatic attr_list_t *append_attribs(attr_list_t *l1, attr_list_t *l2)\n{\n    if (!l2) return l1;\n    if (!l1 || l1 == l2) return l2;\n    list_move_tail (l1, l2);\n    return l1;\n}\n\nstatic statement_list_t *append_statement(statement_list_t *list, statement_t *stmt)\n{\n    if (!stmt) return list;\n    if (!list)\n    {\n        list = xmalloc( sizeof(*list) );\n        list_init( list );\n    }\n    list_add_tail( list, &stmt->entry );\n    return list;\n}\n\nvoid init_loc_info(loc_info_t *i)\n{\n    i->input_name = input_name ? input_name : \"stdin\";\n    i->line_number = line_number;\n    i->near_text = parser_text;\n}\n\nstatic void check_def(const type_t *t)\n{\n    if (t->defined)\n        error_loc(\"%s: redefinition error; original definition was at %s:%d\\n\",\n                  t->name, t->loc_info.input_name, t->loc_info.line_number);\n}\n"
  },
  {
    "path": "widl/proxy.c",
    "content": "/*\n * IDL Compiler\n *\n * Copyright 2002 Ove Kaaven\n * Copyright 2004 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdio.h>\n#include <stdlib.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#include <string.h>\n#include <ctype.h>\n\n#include \"widl.h\"\n#include \"utils.h\"\n#include \"parser.h\"\n#include \"header.h\"\n#include \"typegen.h\"\n#include \"expr.h\"\n\nstatic FILE* proxy;\nstatic int indent = 0;\n\nstatic void print_proxy( const char *format, ... ) __attribute__((format (printf, 1, 2)));\nstatic void print_proxy( const char *format, ... )\n{\n  va_list va;\n  va_start( va, format );\n  print( proxy, indent, format, va );\n  va_end( va );\n}\n\nstatic void write_stubdescproto(void)\n{\n  print_proxy( \"static const MIDL_STUB_DESC Object_StubDesc;\\n\");\n  print_proxy( \"\\n\");\n}\n\nstatic void write_stubdesc(int expr_eval_routines)\n{\n  print_proxy( \"static const MIDL_STUB_DESC Object_StubDesc =\\n{\\n\");\n  indent++;\n  print_proxy( \"0,\\n\");\n  print_proxy( \"NdrOleAllocate,\\n\");\n  print_proxy( \"NdrOleFree,\\n\");\n  print_proxy( \"{0}, 0, 0, %s, 0,\\n\", expr_eval_routines ? \"ExprEvalRoutines\" : \"0\");\n  print_proxy( \"__MIDL_TypeFormatString.Format,\\n\");\n  print_proxy( \"1, /* -error bounds_check flag */\\n\");\n  print_proxy( \"0x%x, /* Ndr library version */\\n\", get_stub_mode() == MODE_Oif ? 0x50002 : 0x10001);\n  print_proxy( \"0,\\n\");\n  print_proxy( \"0x50100a4, /* MIDL Version 5.1.164 */\\n\");\n  print_proxy( \"0,\\n\");\n  print_proxy(\"%s,\\n\", list_empty(&user_type_list) ? \"0\" : \"UserMarshalRoutines\");\n  print_proxy( \"0,  /* notify & notify_flag routine table */\\n\");\n  print_proxy( \"1,  /* Flags */\\n\");\n  print_proxy( \"0,  /* Reserved3 */\\n\");\n  print_proxy( \"0,  /* Reserved4 */\\n\");\n  print_proxy( \"0   /* Reserved5 */\\n\");\n  indent--;\n  print_proxy( \"};\\n\");\n  print_proxy( \"\\n\");\n}\n\nstatic void init_proxy(const statement_list_t *stmts)\n{\n  if (proxy) return;\n  if(!(proxy = fopen(proxy_name, \"w\")))\n    error(\"Could not open %s for output\\n\", proxy_name);\n  print_proxy( \"/*** Autogenerated by WIDL %s from %s - Do not edit ***/\\n\", PACKAGE_VERSION, input_name);\n  print_proxy( \"\\n\");\n  print_proxy( \"#define __midl_proxy\\n\");\n  print_proxy( \"#include \\\"objbase.h\\\"\\n\");\n  print_proxy( \"\\n\");\n  print_proxy( \"#ifndef DECLSPEC_HIDDEN\\n\");\n  print_proxy( \"#define DECLSPEC_HIDDEN\\n\");\n  print_proxy( \"#endif\\n\");\n  print_proxy( \"\\n\");\n}\n\nstatic void clear_output_vars( const var_list_t *args )\n{\n  const var_t *arg;\n\n  if (!args) return;\n  LIST_FOR_EACH_ENTRY( arg, args, const var_t, entry )\n  {\n      if (is_attr(arg->attrs, ATTR_IN)) continue;\n      if (!is_attr(arg->attrs, ATTR_OUT)) continue;\n      if (is_ptr(arg->type))\n      {\n          if (type_get_type(type_pointer_get_ref(arg->type)) == TYPE_BASIC) continue;\n          if (type_get_type(type_pointer_get_ref(arg->type)) == TYPE_ENUM) continue;\n      }\n      print_proxy( \"if (%s) MIDL_memset( %s, 0, sizeof( *%s ));\\n\", arg->name, arg->name, arg->name );\n  }\n}\n\nstatic int need_delegation(const type_t *iface)\n{\n    const type_t *parent = type_iface_get_inherit( iface );\n    return parent && type_iface_get_inherit(parent) && (parent->ignore || is_local( parent->attrs ));\n}\n\nstatic int get_delegation_indirect(const type_t *iface, const type_t ** delegate_to)\n{\n  const type_t * cur_iface;\n  for (cur_iface = iface; cur_iface != NULL; cur_iface = type_iface_get_inherit(cur_iface))\n    if (need_delegation(cur_iface))\n    {\n      if(delegate_to)\n        *delegate_to = type_iface_get_inherit(cur_iface);\n      return 1;\n    }\n  return 0;\n}\n\nstatic int need_delegation_indirect(const type_t *iface)\n{\n  return get_delegation_indirect(iface, NULL);\n}\n\nstatic void free_variable( const var_t *arg, const char *local_var_prefix )\n{\n  unsigned int type_offset = arg->typestring_offset;\n  type_t *type = arg->type;\n\n  write_parameter_conf_or_var_exprs(proxy, indent, local_var_prefix, PHASE_FREE, arg, FALSE);\n\n  switch (typegen_detect_type(type, arg->attrs, TDT_IGNORE_STRINGS))\n  {\n  case TGT_ENUM:\n  case TGT_BASIC:\n    break;\n\n  case TGT_STRUCT:\n    if (get_struct_fc(type) != FC_STRUCT)\n      print_proxy(\"/* FIXME: %s code for %s struct type 0x%x missing */\\n\", __FUNCTION__, arg->name, get_struct_fc(type) );\n    break;\n\n  case TGT_IFACE_POINTER:\n  case TGT_POINTER:\n  case TGT_ARRAY:\n    print_proxy( \"NdrClearOutParameters( &__frame->_StubMsg, \");\n    fprintf(proxy, \"&__MIDL_TypeFormatString.Format[%u], \", type_offset );\n    fprintf(proxy, \"(void *)%s );\\n\", arg->name );\n    break;\n\n  default:\n    print_proxy(\"/* FIXME: %s code for %s type %d missing */\\n\", __FUNCTION__, arg->name, type_get_type(type) );\n  }\n}\n\nstatic void proxy_free_variables( var_list_t *args, const char *local_var_prefix )\n{\n  const var_t *arg;\n\n  if (!args) return;\n  LIST_FOR_EACH_ENTRY( arg, args, const var_t, entry )\n    if (is_attr(arg->attrs, ATTR_OUT))\n    {\n      free_variable( arg, local_var_prefix );\n      fprintf(proxy, \"\\n\");\n    }\n}\n\nstatic void gen_proxy(type_t *iface, const var_t *func, int idx,\n                      unsigned int proc_offset)\n{\n  var_t *retval = type_function_get_retval(func->type);\n  int has_ret = !is_void(retval->type);\n  int has_full_pointer = is_full_pointer_function(func);\n  const char *callconv = get_attrp(func->type->attrs, ATTR_CALLCONV);\n  const var_list_t *args = type_get_function_args(func->type);\n  if (!callconv) callconv = \"STDMETHODCALLTYPE\";\n\n  indent = 0;\n  if (is_interpreted_func( iface, func ))\n  {\n      if (get_stub_mode() == MODE_Oif && !is_callas( func->attrs )) return;\n      write_type_decl_left(proxy, retval->type);\n      print_proxy( \" %s %s_%s_Proxy(\\n\", callconv, iface->name, get_name(func));\n      write_args(proxy, args, iface->name, 1, TRUE);\n      print_proxy( \")\\n\");\n      write_client_call_routine( proxy, iface, func, \"Object\", proc_offset );\n      return;\n  }\n  print_proxy( \"static void __finally_%s_%s_Proxy( struct __proxy_frame *__frame )\\n\",\n               iface->name, get_name(func) );\n  print_proxy( \"{\\n\");\n  indent++;\n  if (has_full_pointer) write_full_pointer_free(proxy, indent, func);\n  print_proxy( \"NdrProxyFreeBuffer( __frame->This, &__frame->_StubMsg );\\n\" );\n  indent--;\n  print_proxy( \"}\\n\");\n  print_proxy( \"\\n\");\n\n  write_type_decl_left(proxy, retval->type);\n  print_proxy( \" %s %s_%s_Proxy(\\n\", callconv, iface->name, get_name(func));\n  write_args(proxy, args, iface->name, 1, TRUE);\n  print_proxy( \")\\n\");\n  print_proxy( \"{\\n\");\n  indent ++;\n  print_proxy( \"struct __proxy_frame __f, * const __frame = &__f;\\n\" );\n  /* local variables */\n  if (has_ret) {\n    print_proxy( \"%s\", \"\" );\n    write_type_decl(proxy, retval->type, retval->name);\n    fprintf( proxy, \";\\n\" );\n  }\n  print_proxy( \"RPC_MESSAGE _RpcMessage;\\n\" );\n  if (has_ret) {\n    if (decl_indirect(retval->type))\n        print_proxy(\"void *_p_%s = &%s;\\n\", retval->name, retval->name);\n  }\n  print_proxy( \"\\n\");\n\n  print_proxy( \"RpcExceptionInit( __proxy_filter, __finally_%s_%s_Proxy );\\n\", iface->name, get_name(func) );\n  print_proxy( \"__frame->This = This;\\n\" );\n\n  if (has_full_pointer)\n    write_full_pointer_init(proxy, indent, func, FALSE);\n\n  /* FIXME: trace */\n  clear_output_vars( type_get_function_args(func->type) );\n\n  print_proxy( \"RpcTryExcept\\n\" );\n  print_proxy( \"{\\n\" );\n  indent++;\n  print_proxy( \"NdrProxyInitialize(This, &_RpcMessage, &__frame->_StubMsg, &Object_StubDesc, %d);\\n\", idx);\n  write_pointer_checks( proxy, indent, func );\n\n  print_proxy( \"RpcTryFinally\\n\" );\n  print_proxy( \"{\\n\" );\n  indent++;\n\n  write_remoting_arguments(proxy, indent, func, \"\", PASS_IN, PHASE_BUFFERSIZE);\n\n  print_proxy( \"NdrProxyGetBuffer(This, &__frame->_StubMsg);\\n\" );\n\n  write_remoting_arguments(proxy, indent, func, \"\", PASS_IN, PHASE_MARSHAL);\n\n  print_proxy( \"NdrProxySendReceive(This, &__frame->_StubMsg);\\n\" );\n  fprintf(proxy, \"\\n\");\n  print_proxy( \"__frame->_StubMsg.BufferStart = _RpcMessage.Buffer;\\n\" );\n  print_proxy( \"__frame->_StubMsg.BufferEnd   = __frame->_StubMsg.BufferStart + _RpcMessage.BufferLength;\\n\\n\" );\n\n  print_proxy(\"if ((_RpcMessage.DataRepresentation & 0xffff) != NDR_LOCAL_DATA_REPRESENTATION)\\n\");\n  indent++;\n  print_proxy(\"NdrConvert( &__frame->_StubMsg, &__MIDL_ProcFormatString.Format[%u]);\\n\", proc_offset );\n  indent--;\n  fprintf(proxy, \"\\n\");\n\n  write_remoting_arguments(proxy, indent, func, \"\", PASS_OUT, PHASE_UNMARSHAL);\n\n  if (has_ret)\n  {\n      if (decl_indirect(retval->type))\n          print_proxy(\"MIDL_memset(&%s, 0, sizeof(%s));\\n\", retval->name, retval->name);\n      else if (is_ptr(retval->type) || is_array(retval->type))\n          print_proxy(\"%s = 0;\\n\", retval->name);\n      write_remoting_arguments(proxy, indent, func, \"\", PASS_RETURN, PHASE_UNMARSHAL);\n  }\n\n  indent--;\n  print_proxy( \"}\\n\");\n  print_proxy( \"RpcFinally\\n\" );\n  print_proxy( \"{\\n\" );\n  indent++;\n  print_proxy( \"__finally_%s_%s_Proxy( __frame );\\n\", iface->name, get_name(func) );\n  indent--;\n  print_proxy( \"}\\n\");\n  print_proxy( \"RpcEndFinally\\n\" );\n  indent--;\n  print_proxy( \"}\\n\" );\n  print_proxy( \"RpcExcept(__frame->_StubMsg.dwStubPhase != PROXY_SENDRECEIVE)\\n\" );\n  print_proxy( \"{\\n\" );\n  if (has_ret) {\n    indent++;\n    proxy_free_variables( type_get_function_args(func->type), \"\" );\n    print_proxy( \"_RetVal = NdrProxyErrorHandler(RpcExceptionCode());\\n\" );\n    indent--;\n  }\n  print_proxy( \"}\\n\" );\n  print_proxy( \"RpcEndExcept\\n\" );\n\n  if (has_ret) {\n    print_proxy( \"return _RetVal;\\n\" );\n  }\n  indent--;\n  print_proxy( \"}\\n\");\n  print_proxy( \"\\n\");\n}\n\nstatic void gen_stub(type_t *iface, const var_t *func, const char *cas,\n                     unsigned int proc_offset)\n{\n  const var_t *arg;\n  int has_ret = !is_void(type_function_get_rettype(func->type));\n  int has_full_pointer = is_full_pointer_function(func);\n\n  if (is_interpreted_func( iface, func )) return;\n\n  indent = 0;\n  print_proxy( \"struct __frame_%s_%s_Stub\\n{\\n\", iface->name, get_name(func));\n  indent++;\n  print_proxy( \"__DECL_EXCEPTION_FRAME\\n\" );\n  print_proxy( \"MIDL_STUB_MESSAGE _StubMsg;\\n\");\n  print_proxy( \"%s * _This;\\n\", iface->name );\n  declare_stub_args( proxy, indent, func );\n  indent--;\n  print_proxy( \"};\\n\\n\" );\n\n  print_proxy( \"static void __finally_%s_%s_Stub(\", iface->name, get_name(func) );\n  print_proxy( \" struct __frame_%s_%s_Stub *__frame )\\n{\\n\", iface->name, get_name(func) );\n  indent++;\n  write_remoting_arguments(proxy, indent, func, \"__frame->\", PASS_OUT, PHASE_FREE);\n  if (has_full_pointer)\n    write_full_pointer_free(proxy, indent, func);\n  indent--;\n  print_proxy( \"}\\n\\n\" );\n\n  print_proxy( \"void __RPC_STUB %s_%s_Stub(\\n\", iface->name, get_name(func));\n  indent++;\n  print_proxy( \"IRpcStubBuffer* This,\\n\");\n  print_proxy( \"IRpcChannelBuffer *_pRpcChannelBuffer,\\n\");\n  print_proxy( \"PRPC_MESSAGE _pRpcMessage,\\n\");\n  print_proxy( \"DWORD* _pdwStubPhase)\\n\");\n  indent--;\n  print_proxy( \"{\\n\");\n  indent++;\n  print_proxy( \"struct __frame_%s_%s_Stub __f, * const __frame = &__f;\\n\\n\",\n               iface->name, get_name(func) );\n\n  print_proxy(\"__frame->_This = (%s*)((CStdStubBuffer*)This)->pvServerObject;\\n\\n\", iface->name);\n\n  /* FIXME: trace */\n\n  print_proxy(\"NdrStubInitialize(_pRpcMessage, &__frame->_StubMsg, &Object_StubDesc, _pRpcChannelBuffer);\\n\");\n  fprintf(proxy, \"\\n\");\n  print_proxy( \"RpcExceptionInit( 0, __finally_%s_%s_Stub );\\n\", iface->name, get_name(func) );\n\n  write_parameters_init(proxy, indent, func, \"__frame->\");\n\n  print_proxy(\"RpcTryFinally\\n\");\n  print_proxy(\"{\\n\");\n  indent++;\n  if (has_full_pointer)\n    write_full_pointer_init(proxy, indent, func, TRUE);\n  print_proxy(\"if ((_pRpcMessage->DataRepresentation & 0xffff) != NDR_LOCAL_DATA_REPRESENTATION)\\n\");\n  indent++;\n  print_proxy(\"NdrConvert( &__frame->_StubMsg, &__MIDL_ProcFormatString.Format[%u]);\\n\", proc_offset );\n  indent--;\n  fprintf(proxy, \"\\n\");\n\n  write_remoting_arguments(proxy, indent, func, \"__frame->\", PASS_IN, PHASE_UNMARSHAL);\n  fprintf(proxy, \"\\n\");\n\n  assign_stub_out_args( proxy, indent, func, \"__frame->\" );\n\n  print_proxy(\"*_pdwStubPhase = STUB_CALL_SERVER;\\n\");\n  fprintf(proxy, \"\\n\");\n  print_proxy( \"%s\", has_ret ? \"__frame->_RetVal = \" : \"\" );\n  if (cas) fprintf(proxy, \"%s_%s_Stub\", iface->name, cas);\n  else fprintf(proxy, \"__frame->_This->lpVtbl->%s\", get_name(func));\n  fprintf(proxy, \"(__frame->_This\");\n\n  if (type_get_function_args(func->type))\n  {\n      LIST_FOR_EACH_ENTRY( arg, type_get_function_args(func->type), const var_t, entry )\n          fprintf(proxy, \", %s__frame->%s\", is_array(arg->type) && !type_array_is_decl_as_ptr(arg->type) ? \"*\" :\"\" , arg->name);\n  }\n  fprintf(proxy, \");\\n\");\n  fprintf(proxy, \"\\n\");\n  print_proxy(\"*_pdwStubPhase = STUB_MARSHAL;\\n\");\n  fprintf(proxy, \"\\n\");\n\n  write_remoting_arguments(proxy, indent, func, \"__frame->\", PASS_OUT, PHASE_BUFFERSIZE);\n\n  if (!is_void(type_function_get_rettype(func->type)))\n    write_remoting_arguments(proxy, indent, func, \"__frame->\", PASS_RETURN, PHASE_BUFFERSIZE);\n\n  print_proxy(\"NdrStubGetBuffer(This, _pRpcChannelBuffer, &__frame->_StubMsg);\\n\");\n\n  write_remoting_arguments(proxy, indent, func, \"__frame->\", PASS_OUT, PHASE_MARSHAL);\n  fprintf(proxy, \"\\n\");\n\n  /* marshall the return value */\n  if (!is_void(type_function_get_rettype(func->type)))\n    write_remoting_arguments(proxy, indent, func, \"__frame->\", PASS_RETURN, PHASE_MARSHAL);\n\n  indent--;\n  print_proxy(\"}\\n\");\n  print_proxy(\"RpcFinally\\n\");\n  print_proxy(\"{\\n\");\n  indent++;\n  print_proxy( \"__finally_%s_%s_Stub( __frame );\\n\", iface->name, get_name(func) );\n  indent--;\n  print_proxy(\"}\\n\");\n  print_proxy(\"RpcEndFinally\\n\");\n\n  print_proxy(\"_pRpcMessage->BufferLength = __frame->_StubMsg.Buffer - (unsigned char *)_pRpcMessage->Buffer;\\n\");\n  indent--;\n\n  print_proxy(\"}\\n\");\n  print_proxy(\"\\n\");\n}\n\nstatic void gen_stub_thunk( type_t *iface, const var_t *func, unsigned int proc_offset )\n{\n    int has_ret = !is_void( type_function_get_rettype( func->type ));\n    const var_t *arg, *callas = is_callas( func->attrs );\n    const var_list_t *args = type_get_function_args( func->type );\n\n    indent = 0;\n    print_proxy( \"void __RPC_API %s_%s_Thunk( PMIDL_STUB_MESSAGE pStubMsg )\\n\",\n                 iface->name, get_name(func) );\n    print_proxy( \"{\\n\");\n    indent++;\n    write_func_param_struct( proxy, iface, func->type,\n                             \"*pParamStruct = (struct _PARAM_STRUCT *)pStubMsg->StackTop\", has_ret );\n    print_proxy( \"%s%s_%s_Stub( pParamStruct->This\",\n                 has_ret ? \"pParamStruct->_RetVal = \" : \"\", iface->name, callas->name );\n    indent++;\n    if (args) LIST_FOR_EACH_ENTRY( arg, args, const var_t, entry )\n    {\n        fprintf( proxy, \",\\n%*spParamStruct->%s\", 4 * indent, \"\", arg->name );\n    }\n    fprintf( proxy, \" );\\n\" );\n    indent--;\n    indent--;\n    print_proxy( \"}\\n\\n\");\n}\n\nint count_methods(const type_t *iface)\n{\n    const statement_t *stmt;\n    int count = 0;\n\n    if (type_iface_get_inherit(iface))\n        count = count_methods(type_iface_get_inherit(iface));\n\n    STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface)) {\n        const var_t *func = stmt->u.var;\n        if (!is_callas(func->attrs)) count++;\n    }\n    return count;\n}\n\nstatic const statement_t * get_callas_source(const type_t * iface, const var_t * def)\n{\n  const statement_t * source;\n  STATEMENTS_FOR_EACH_FUNC( source, type_iface_get_stmts(iface)) {\n    const var_t * cas = is_callas(source->u.var->attrs );\n    if (cas && !strcmp(def->name, cas->name))\n      return source;\n  }\n  return NULL;\n}\n\nstatic void write_proxy_procformatstring_offsets( const type_t *iface, int skip )\n{\n    const statement_t *stmt;\n\n    if (type_iface_get_inherit(iface))\n        write_proxy_procformatstring_offsets( type_iface_get_inherit(iface), need_delegation(iface));\n    else\n        return;\n\n    STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) )\n    {\n        const var_t *func = stmt->u.var;\n        int missing = 0;\n\n        if (is_callas(func->attrs)) continue;\n        if (is_local(func->attrs))\n        {\n            const statement_t * callas_source = get_callas_source(iface, func);\n            if (!callas_source)\n                missing = 1;\n            else\n                func = callas_source->u.var;\n        }\n        if (skip || missing)\n            print_proxy( \"(unsigned short)-1,  /* %s::%s */\\n\", iface->name, get_name(func));\n        else\n            print_proxy( \"%u,  /* %s::%s */\\n\", func->procstring_offset, iface->name, get_name(func));\n    }\n}\n\nstatic int write_proxy_methods(type_t *iface, int skip)\n{\n  const statement_t *stmt;\n  int i = 0;\n\n  if (type_iface_get_inherit(iface))\n    i = write_proxy_methods(type_iface_get_inherit(iface),\n                            need_delegation(iface));\n  STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface)) {\n    const var_t *func = stmt->u.var;\n    if (!is_callas(func->attrs)) {\n      if (skip || (is_local(func->attrs) && !get_callas_source(iface, func)))\n          print_proxy( \"0,  /* %s::%s */\\n\", iface->name, get_name(func));\n      else if (is_interpreted_func( iface, func ) &&\n               !is_local( func->attrs ) &&\n               type_iface_get_inherit(iface))\n          print_proxy( \"(void *)-1,  /* %s::%s */\\n\", iface->name, get_name(func));\n      else\n          print_proxy( \"%s_%s_Proxy,\\n\", iface->name, get_name(func));\n      i++;\n    }\n  }\n  return i;\n}\n\nstatic int write_stub_methods(type_t *iface, int skip)\n{\n  const statement_t *stmt;\n  int i = 0;\n\n  if (type_iface_get_inherit(iface))\n    i = write_stub_methods(type_iface_get_inherit(iface), need_delegation(iface));\n  else\n    return i; /* skip IUnknown */\n\n  STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface)) {\n    const var_t *func = stmt->u.var;\n    if (!is_callas(func->attrs)) {\n      int missing = 0;\n      const char * fname = get_name(func);\n      if(is_local(func->attrs)) {\n        const statement_t * callas_source = get_callas_source(iface, func);\n        if(!callas_source)\n          missing = 1;\n        else\n          fname = get_name(callas_source->u.var);\n      }\n      if (i) fprintf(proxy,\",\\n\");\n      if (skip || missing) print_proxy(\"STUB_FORWARDING_FUNCTION\");\n      else if (is_interpreted_func( iface, func ))\n          print_proxy( \"(PRPC_STUB_FUNCTION)%s\", get_stub_mode() == MODE_Oif ? \"NdrStubCall2\" : \"NdrStubCall\" );\n      else print_proxy( \"%s_%s_Stub\", iface->name, fname);\n      i++;\n    }\n  }\n  return i;\n}\n\nstatic void write_thunk_methods( type_t *iface, int skip )\n{\n    const statement_t *stmt;\n\n    if (type_iface_get_inherit( iface ))\n        write_thunk_methods( type_iface_get_inherit(iface), need_delegation(iface) );\n    else\n        return; /* skip IUnknown */\n\n    STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) )\n    {\n        var_t *func = stmt->u.var;\n        const statement_t * callas_source = NULL;\n\n        if (is_callas(func->attrs)) continue;\n        if (is_local(func->attrs)) callas_source = get_callas_source(iface, func);\n\n        if (!skip && callas_source && is_interpreted_func( iface, func ))\n            print_proxy( \"%s_%s_Thunk,\\n\", iface->name, get_name(callas_source->u.var) );\n        else\n            print_proxy( \"0, /* %s::%s */\\n\", iface->name, get_name(func) );\n    }\n}\n\nstatic void write_proxy(type_t *iface, unsigned int *proc_offset)\n{\n  int count;\n  const statement_t *stmt;\n  int first_func = 1;\n  int needs_stub_thunks = 0;\n  int needs_inline_stubs = need_inline_stubs( iface ) || need_delegation( iface );\n\n  STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface)) {\n    var_t *func = stmt->u.var;\n    if (first_func) {\n      fprintf(proxy, \"/*****************************************************************************\\n\");\n      fprintf(proxy, \" * %s interface\\n\", iface->name);\n      fprintf(proxy, \" */\\n\");\n      first_func = 0;\n    }\n    if (!is_local(func->attrs)) {\n      const var_t *cas = is_callas(func->attrs);\n      const char *cname = cas ? cas->name : NULL;\n      int idx = func->type->details.function->idx;\n      if (cname) {\n          const statement_t *stmt2;\n          STATEMENTS_FOR_EACH_FUNC(stmt2, type_iface_get_stmts(iface)) {\n              const var_t *m = stmt2->u.var;\n              if (!strcmp(m->name, cname))\n              {\n                  idx = m->type->details.function->idx;\n                  break;\n              }\n          }\n      }\n      func->procstring_offset = *proc_offset;\n      gen_proxy(iface, func, idx, *proc_offset);\n      gen_stub(iface, func, cname, *proc_offset);\n      if (cas && is_interpreted_func( iface, func ))\n      {\n          needs_stub_thunks = 1;\n          gen_stub_thunk(iface, func, *proc_offset);\n      }\n      *proc_offset += get_size_procformatstring_func( iface, func );\n    }\n  }\n\n  count = count_methods(iface);\n\n  print_proxy( \"static const unsigned short %s_FormatStringOffsetTable[] =\\n\", iface->name );\n  print_proxy( \"{\\n\" );\n  indent++;\n  write_proxy_procformatstring_offsets( iface, 0 );\n  indent--;\n  print_proxy( \"};\\n\\n\" );\n\n  /* proxy info */\n  if (get_stub_mode() == MODE_Oif)\n  {\n      print_proxy( \"static const MIDL_STUBLESS_PROXY_INFO %s_ProxyInfo =\\n\", iface->name );\n      print_proxy( \"{\\n\" );\n      indent++;\n      print_proxy( \"&Object_StubDesc,\\n\" );\n      print_proxy( \"__MIDL_ProcFormatString.Format,\\n\" );\n      print_proxy( \"&%s_FormatStringOffsetTable[-3],\\n\", iface->name );\n      print_proxy( \"0,\\n\" );\n      print_proxy( \"0,\\n\" );\n      print_proxy( \"0\\n\" );\n      indent--;\n      print_proxy( \"};\\n\\n\" );\n  }\n\n  /* proxy vtable */\n  print_proxy( \"static %sCINTERFACE_PROXY_VTABLE(%d) _%sProxyVtbl =\\n\",\n               need_delegation_indirect(iface) ? \"\" : \"const \", count, iface->name);\n  print_proxy( \"{\\n\");\n  indent++;\n  print_proxy( \"{\\n\");\n  indent++;\n  if (get_stub_mode() == MODE_Oif) print_proxy( \"&%s_ProxyInfo,\\n\", iface->name );\n  print_proxy( \"&IID_%s,\\n\", iface->name);\n  indent--;\n  print_proxy( \"},\\n\");\n  print_proxy( \"{\\n\");\n  indent++;\n  write_proxy_methods(iface, FALSE);\n  indent--;\n  print_proxy( \"}\\n\");\n  indent--;\n  print_proxy( \"};\\n\\n\");\n\n  /* stub thunk table */\n  if (needs_stub_thunks)\n  {\n      print_proxy( \"static const STUB_THUNK %s_StubThunkTable[] =\\n\", iface->name);\n      print_proxy( \"{\\n\");\n      indent++;\n      write_thunk_methods( iface, 0 );\n      indent--;\n      print_proxy( \"};\\n\\n\");\n  }\n\n  /* server info */\n  print_proxy( \"static const MIDL_SERVER_INFO %s_ServerInfo =\\n\", iface->name );\n  print_proxy( \"{\\n\" );\n  indent++;\n  print_proxy( \"&Object_StubDesc,\\n\" );\n  print_proxy( \"0,\\n\" );\n  print_proxy( \"__MIDL_ProcFormatString.Format,\\n\" );\n  print_proxy( \"&%s_FormatStringOffsetTable[-3],\\n\", iface->name );\n  if (needs_stub_thunks)\n      print_proxy( \"&%s_StubThunkTable[-3],\\n\", iface->name );\n  else\n      print_proxy( \"0,\\n\" );\n  print_proxy( \"0,\\n\" );\n  print_proxy( \"0,\\n\" );\n  print_proxy( \"0\\n\" );\n  indent--;\n  print_proxy( \"};\\n\\n\" );\n\n  /* stub vtable */\n  if (needs_inline_stubs)\n  {\n      print_proxy( \"static const PRPC_STUB_FUNCTION %s_table[] =\\n\", iface->name);\n      print_proxy( \"{\\n\");\n      indent++;\n      write_stub_methods(iface, FALSE);\n      fprintf(proxy, \"\\n\");\n      indent--;\n      fprintf(proxy, \"};\\n\\n\");\n  }\n  print_proxy( \"static %sCInterfaceStubVtbl _%sStubVtbl =\\n\",\n               need_delegation_indirect(iface) ? \"\" : \"const \", iface->name);\n  print_proxy( \"{\\n\");\n  indent++;\n  print_proxy( \"{\\n\");\n  indent++;\n  print_proxy( \"&IID_%s,\\n\", iface->name);\n  print_proxy( \"&%s_ServerInfo,\\n\", iface->name );\n  print_proxy( \"%d,\\n\", count);\n  if (needs_inline_stubs) print_proxy( \"&%s_table[-3]\\n\", iface->name );\n  else print_proxy( \"0\\n\" );\n  indent--;\n  print_proxy( \"},\\n\");\n  print_proxy( \"{\\n\");\n  indent++;\n  print_proxy( \"CStdStubBuffer_%s\\n\", need_delegation_indirect(iface) ? \"DELEGATING_METHODS\" : \"METHODS\");\n  indent--;\n  print_proxy( \"}\\n\");\n  indent--;\n  print_proxy( \"};\\n\");\n  print_proxy( \"\\n\");\n}\n\nstatic int does_any_iface(const statement_list_t *stmts, type_pred_t pred)\n{\n  const statement_t *stmt;\n\n  if (stmts)\n    LIST_FOR_EACH_ENTRY(stmt, stmts, const statement_t, entry)\n    {\n      if (stmt->type == STMT_TYPE && type_get_type(stmt->u.type) == TYPE_INTERFACE)\n      {\n        if (pred(stmt->u.type))\n          return TRUE;\n      }\n    }\n\n  return FALSE;\n}\n\nint need_proxy(const type_t *iface)\n{\n    if (!is_object( iface )) return 0;\n    if (is_local( iface->attrs )) return 0;\n    if (is_attr( iface->attrs, ATTR_DISPINTERFACE )) return 0;\n    return 1;\n}\n\nint need_stub(const type_t *iface)\n{\n  return !is_object(iface) && !is_local(iface->attrs);\n}\n\nint need_proxy_file(const statement_list_t *stmts)\n{\n    return does_any_iface(stmts, need_proxy);\n}\n\nint need_proxy_delegation(const statement_list_t *stmts)\n{\n    return does_any_iface(stmts, need_delegation);\n}\n\nint need_inline_stubs(const type_t *iface)\n{\n    const statement_t *stmt;\n\n    if (get_stub_mode() == MODE_Os) return 1;\n\n    STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) )\n    {\n        const var_t *func = stmt->u.var;\n        if (is_local( func->attrs )) continue;\n        if (!is_interpreted_func( iface, func )) return 1;\n    }\n    return 0;\n}\n\nstatic int need_proxy_and_inline_stubs(const type_t *iface)\n{\n    const statement_t *stmt;\n\n    if (!need_proxy( iface )) return 0;\n    if (get_stub_mode() == MODE_Os) return 1;\n\n    STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) )\n    {\n        const var_t *func = stmt->u.var;\n        if (is_local( func->attrs )) continue;\n        if (!is_interpreted_func( iface, func )) return 1;\n    }\n    return 0;\n}\n\nint need_stub_files(const statement_list_t *stmts)\n{\n  return does_any_iface(stmts, need_stub);\n}\n\nint need_inline_stubs_file(const statement_list_t *stmts)\n{\n  return does_any_iface(stmts, need_inline_stubs);\n}\n\nstatic void write_proxy_stmts(const statement_list_t *stmts, unsigned int *proc_offset)\n{\n  const statement_t *stmt;\n  if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry )\n  {\n    if (stmt->type == STMT_TYPE && type_get_type(stmt->u.type) == TYPE_INTERFACE)\n    {\n      if (need_proxy(stmt->u.type))\n        write_proxy(stmt->u.type, proc_offset);\n    }\n  }\n}\n\nstatic int cmp_iid( const void *ptr1, const void *ptr2 )\n{\n    const type_t * const *iface1 = ptr1;\n    const type_t * const *iface2 = ptr2;\n    const UUID *uuid1 = get_attrp( (*iface1)->attrs, ATTR_UUID );\n    const UUID *uuid2 = get_attrp( (*iface2)->attrs, ATTR_UUID );\n    return memcmp( uuid1, uuid2, sizeof(UUID) );\n}\n\nstatic void build_iface_list( const statement_list_t *stmts, type_t **ifaces[], int *count )\n{\n    const statement_t *stmt;\n\n    if (!stmts) return;\n    LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry )\n    {\n        if (stmt->type == STMT_TYPE && type_get_type(stmt->u.type) == TYPE_INTERFACE)\n        {\n            type_t *iface = stmt->u.type;\n            if (type_iface_get_inherit(iface) && need_proxy(iface))\n            {\n                *ifaces = xrealloc( *ifaces, (*count + 1) * sizeof(**ifaces) );\n                (*ifaces)[(*count)++] = iface;\n            }\n        }\n    }\n}\n\nstatic type_t **sort_interfaces( const statement_list_t *stmts, int *count )\n{\n    type_t **ifaces = NULL;\n\n    *count = 0;\n    build_iface_list( stmts, &ifaces, count );\n    qsort( ifaces, *count, sizeof(*ifaces), cmp_iid );\n    return ifaces;\n}\n\nstatic void write_proxy_routines(const statement_list_t *stmts)\n{\n  int expr_eval_routines;\n  unsigned int proc_offset = 0;\n  char *file_id = proxy_token;\n  int i, count, have_baseiid = 0;\n  type_t **interfaces;\n  const type_t * delegate_to;\n\n  print_proxy( \"#ifndef __REDQ_RPCPROXY_H_VERSION__\\n\");\n  print_proxy( \"#define __REQUIRED_RPCPROXY_H_VERSION__ %u\\n\", get_stub_mode() == MODE_Oif ? 475 : 440);\n  print_proxy( \"#endif\\n\");\n  print_proxy( \"\\n\");\n  if (get_stub_mode() == MODE_Oif) print_proxy( \"#define USE_STUBLESS_PROXY\\n\");\n  print_proxy( \"#include \\\"rpcproxy.h\\\"\\n\");\n  print_proxy( \"#ifndef __RPCPROXY_H_VERSION__\\n\");\n  print_proxy( \"#error This code needs a newer version of rpcproxy.h\\n\");\n  print_proxy( \"#endif /* __RPCPROXY_H_VERSION__ */\\n\");\n  print_proxy( \"\\n\");\n  print_proxy( \"#include \\\"%s\\\"\\n\", header_name);\n  print_proxy( \"\\n\");\n\n  if (does_any_iface(stmts, need_proxy_and_inline_stubs))\n  {\n      write_exceptions( proxy );\n      print_proxy( \"\\n\");\n      print_proxy( \"struct __proxy_frame\\n\");\n      print_proxy( \"{\\n\");\n      print_proxy( \"    __DECL_EXCEPTION_FRAME\\n\");\n      print_proxy( \"    MIDL_STUB_MESSAGE _StubMsg;\\n\");\n      print_proxy( \"    void             *This;\\n\");\n      print_proxy( \"};\\n\");\n      print_proxy( \"\\n\");\n      print_proxy(\"static int __proxy_filter( struct __proxy_frame *__frame )\\n\");\n      print_proxy( \"{\\n\");\n      print_proxy( \"    return (__frame->_StubMsg.dwStubPhase != PROXY_SENDRECEIVE);\\n\");\n      print_proxy( \"}\\n\");\n      print_proxy( \"\\n\");\n  }\n\n  write_formatstringsdecl(proxy, indent, stmts, need_proxy);\n  write_stubdescproto();\n  write_proxy_stmts(stmts, &proc_offset);\n\n  expr_eval_routines = write_expr_eval_routines(proxy, proxy_token);\n  if (expr_eval_routines)\n      write_expr_eval_routine_list(proxy, proxy_token);\n  write_user_quad_list(proxy);\n  write_stubdesc(expr_eval_routines);\n\n  print_proxy( \"#if !defined(__RPC_WIN%u__)\\n\", pointer_size == 8 ? 64 : 32);\n  print_proxy( \"#error Currently only Wine and WIN32 are supported.\\n\");\n  print_proxy( \"#endif\\n\");\n  print_proxy( \"\\n\");\n  write_procformatstring(proxy, stmts, need_proxy);\n  write_typeformatstring(proxy, stmts, need_proxy);\n\n  interfaces = sort_interfaces(stmts, &count);\n  fprintf(proxy, \"static const CInterfaceProxyVtbl* const _%s_ProxyVtblList[] =\\n\", file_id);\n  fprintf(proxy, \"{\\n\");\n  for (i = 0; i < count; i++)\n      fprintf(proxy, \"    (const CInterfaceProxyVtbl*)&_%sProxyVtbl,\\n\", interfaces[i]->name);\n  fprintf(proxy, \"    0\\n\");\n  fprintf(proxy, \"};\\n\");\n  fprintf(proxy, \"\\n\");\n\n  fprintf(proxy, \"static const CInterfaceStubVtbl* const _%s_StubVtblList[] =\\n\", file_id);\n  fprintf(proxy, \"{\\n\");\n  for (i = 0; i < count; i++)\n      fprintf(proxy, \"    &_%sStubVtbl,\\n\", interfaces[i]->name);\n  fprintf(proxy, \"    0\\n\");\n  fprintf(proxy, \"};\\n\");\n  fprintf(proxy, \"\\n\");\n\n  fprintf(proxy, \"static PCInterfaceName const _%s_InterfaceNamesList[] =\\n\", file_id);\n  fprintf(proxy, \"{\\n\");\n  for (i = 0; i < count; i++)\n      fprintf(proxy, \"    \\\"%s\\\",\\n\", interfaces[i]->name);\n  fprintf(proxy, \"    0\\n\");\n  fprintf(proxy, \"};\\n\");\n  fprintf(proxy, \"\\n\");\n\n  for (i = 0; i < count; i++)\n      if ((have_baseiid = get_delegation_indirect( interfaces[i], NULL ))) break;\n\n  if (have_baseiid)\n  {\n      fprintf(proxy, \"static const IID * _%s_BaseIIDList[] =\\n\", file_id);\n      fprintf(proxy, \"{\\n\");\n      for (i = 0; i < count; i++)\n      {\n          if (get_delegation_indirect(interfaces[i], &delegate_to))\n              fprintf( proxy, \"    &IID_%s,  /* %s */\\n\", delegate_to->name, interfaces[i]->name );\n          else\n              fprintf( proxy, \"    0,\\n\" );\n      }\n      fprintf(proxy, \"    0\\n\");\n      fprintf(proxy, \"};\\n\");\n      fprintf(proxy, \"\\n\");\n  }\n\n  fprintf(proxy, \"static int __stdcall _%s_IID_Lookup(const IID* pIID, int* pIndex)\\n\", file_id);\n  fprintf(proxy, \"{\\n\");\n  fprintf(proxy, \"    int low = 0, high = %d;\\n\", count - 1);\n  fprintf(proxy, \"\\n\");\n  fprintf(proxy, \"    while (low <= high)\\n\");\n  fprintf(proxy, \"    {\\n\");\n  fprintf(proxy, \"        int pos = (low + high) / 2;\\n\");\n  fprintf(proxy, \"        int res = IID_GENERIC_CHECK_IID(_%s, pIID, pos);\\n\", file_id);\n  fprintf(proxy, \"        if (!res) { *pIndex = pos; return 1; }\\n\");\n  fprintf(proxy, \"        if (res > 0) low = pos + 1;\\n\");\n  fprintf(proxy, \"        else high = pos - 1;\\n\");\n  fprintf(proxy, \"    }\\n\");\n  fprintf(proxy, \"    return 0;\\n\");\n  fprintf(proxy, \"}\\n\");\n  fprintf(proxy, \"\\n\");\n\n  fprintf(proxy, \"const ExtendedProxyFileInfo %s_ProxyFileInfo DECLSPEC_HIDDEN =\\n\", file_id);\n  fprintf(proxy, \"{\\n\");\n  fprintf(proxy, \"    (const PCInterfaceProxyVtblList*)_%s_ProxyVtblList,\\n\", file_id);\n  fprintf(proxy, \"    (const PCInterfaceStubVtblList*)_%s_StubVtblList,\\n\", file_id);\n  fprintf(proxy, \"    _%s_InterfaceNamesList,\\n\", file_id);\n  if (have_baseiid) fprintf(proxy, \"    _%s_BaseIIDList,\\n\", file_id);\n  else fprintf(proxy, \"    0,\\n\");\n  fprintf(proxy, \"    _%s_IID_Lookup,\\n\", file_id);\n  fprintf(proxy, \"    %d,\\n\", count);\n  fprintf(proxy, \"    %d,\\n\", get_stub_mode() == MODE_Oif ? 2 : 1);\n  fprintf(proxy, \"    0,\\n\");\n  fprintf(proxy, \"    0,\\n\");\n  fprintf(proxy, \"    0,\\n\");\n  fprintf(proxy, \"    0\\n\");\n  fprintf(proxy, \"};\\n\");\n}\n\nvoid write_proxies(const statement_list_t *stmts)\n{\n  if (!do_proxies) return;\n  if (do_everything && !need_proxy_file(stmts)) return;\n\n  init_proxy(stmts);\n  if(!proxy) return;\n\n  if (do_win32 && do_win64)\n  {\n      fprintf(proxy, \"\\n#ifndef _WIN64\\n\\n\");\n      pointer_size = 4;\n      write_proxy_routines( stmts );\n      fprintf(proxy, \"\\n#else /* _WIN64 */\\n\\n\");\n      pointer_size = 8;\n      write_proxy_routines( stmts );\n      fprintf(proxy, \"\\n#endif /* _WIN64 */\\n\");\n  }\n  else if (do_win32)\n  {\n      pointer_size = 4;\n      write_proxy_routines( stmts );\n  }\n  else if (do_win64)\n  {\n      pointer_size = 8;\n      write_proxy_routines( stmts );\n  }\n\n  fclose(proxy);\n}\n"
  },
  {
    "path": "widl/register.c",
    "content": "/*\n * Generation of dll registration scripts\n *\n * Copyright 2010 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdio.h>\n#include <stdlib.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#include <string.h>\n#include <ctype.h>\n\n#include \"widl.h\"\n#include \"utils.h\"\n#include \"parser.h\"\n#include \"header.h\"\n#include \"typegen.h\"\n\nstatic int indent;\n\nstatic const char *format_uuid( const UUID *uuid )\n{\n    static char buffer[40];\n    sprintf( buffer, \"{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}\",\n             uuid->Data1, uuid->Data2, uuid->Data3,\n             uuid->Data4[0], uuid->Data4[1], uuid->Data4[2], uuid->Data4[3],\n             uuid->Data4[4], uuid->Data4[5], uuid->Data4[6], uuid->Data4[7] );\n    return buffer;\n}\n\nstatic const char *get_coclass_threading( const type_t *class )\n{\n    static const char * const models[] =\n    {\n        NULL,\n        \"Apartment\", /* THREADING_APARTMENT */\n        \"Neutral\",   /* THREADING_NEUTRAL */\n        \"Single\",    /* THREADING_SINGLE */\n        \"Free\",      /* THREADING_FREE */\n        \"Both\",      /* THREADING_BOTH */\n    };\n    return models[get_attrv( class->attrs, ATTR_THREADING )];\n}\n\nstatic const type_t *find_ps_factory( const statement_list_t *stmts )\n{\n    const statement_t *stmt;\n\n    if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry )\n    {\n        if (stmt->type == STMT_TYPE)\n        {\n            const type_t *type = stmt->u.type;\n            if (type_get_type(type) == TYPE_COCLASS && !strcmp( type->name, \"PSFactoryBuffer\" ))\n                return type;\n        }\n    }\n    return NULL;\n}\n\nstatic void write_interface( const type_t *iface, const type_t *ps_factory )\n{\n    const UUID *uuid = get_attrp( iface->attrs, ATTR_UUID );\n    const UUID *ps_uuid = get_attrp( ps_factory->attrs, ATTR_UUID );\n\n    if (!uuid) return;\n    if (!is_object( iface )) return;\n    if (!type_iface_get_inherit(iface)) /* special case for IUnknown */\n    {\n        put_str( indent, \"'%s' = s '%s'\\n\", format_uuid( uuid ), iface->name );\n        return;\n    }\n    if (is_local( iface->attrs )) return;\n    put_str( indent, \"'%s' = s '%s'\\n\", format_uuid( uuid ), iface->name );\n    put_str( indent, \"{\\n\" );\n    indent++;\n    put_str( indent, \"NumMethods = s %u\\n\", count_methods( iface ));\n    put_str( indent, \"ProxyStubClsid32 = s '%s'\\n\", format_uuid( ps_uuid ));\n    indent--;\n    put_str( indent, \"}\\n\" );\n}\n\nstatic void write_interfaces( const statement_list_t *stmts, const type_t *ps_factory )\n{\n    const statement_t *stmt;\n\n    if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry )\n    {\n        if (stmt->type == STMT_TYPE && type_get_type( stmt->u.type ) == TYPE_INTERFACE)\n            write_interface( stmt->u.type, ps_factory );\n    }\n}\n\nstatic void write_typelib_interface( const type_t *iface, const typelib_t *typelib )\n{\n    const UUID *typelib_uuid = get_attrp( typelib->attrs, ATTR_UUID );\n    const UUID *uuid = get_attrp( iface->attrs, ATTR_UUID );\n    unsigned int version = get_attrv( typelib->attrs, ATTR_VERSION );\n\n    if (!uuid) return;\n    if (!is_object( iface )) return;\n    if (!is_attr( iface->attrs, ATTR_OLEAUTOMATION ) && !is_attr( iface->attrs, ATTR_DISPINTERFACE ))\n        return;\n    put_str( indent, \"'%s' = s '%s'\\n\", format_uuid( uuid ), iface->name );\n    put_str( indent, \"{\\n\" );\n    indent++;\n    put_str( indent, \"ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'\\n\" );\n    put_str( indent, \"ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'\\n\" );\n    if (version)\n        put_str( indent, \"TypeLib = s '%s' { val Version = s '%u.%u' }\\n\",\n                 format_uuid( typelib_uuid ), MAJORVERSION(version), MINORVERSION(version) );\n    else\n        put_str( indent, \"TypeLib = s '%s'\", format_uuid( typelib_uuid ));\n    indent--;\n    put_str( indent, \"}\\n\" );\n}\n\nstatic void write_typelib_interfaces( const typelib_t *typelib )\n{\n    const statement_t *stmt;\n\n    if (typelib->stmts) LIST_FOR_EACH_ENTRY( stmt, typelib->stmts, const statement_t, entry )\n    {\n        if (stmt->type == STMT_TYPE && type_get_type( stmt->u.type ) == TYPE_INTERFACE)\n            write_typelib_interface( stmt->u.type, typelib );\n    }\n}\n\nstatic int write_coclass( const type_t *class, const typelib_t *typelib )\n{\n    const UUID *uuid = get_attrp( class->attrs, ATTR_UUID );\n    const char *descr = get_attrp( class->attrs, ATTR_HELPSTRING );\n    const char *progid = get_attrp( class->attrs, ATTR_PROGID );\n    const char *vi_progid = get_attrp( class->attrs, ATTR_VIPROGID );\n    const char *threading = get_coclass_threading( class );\n    unsigned int version = get_attrv( class->attrs, ATTR_VERSION );\n\n    if (!uuid) return 0;\n    if (typelib && !threading && !progid) return 0;\n    if (!descr) descr = class->name;\n\n    put_str( indent, \"'%s' = s '%s'\\n\", format_uuid( uuid ), descr );\n    put_str( indent++, \"{\\n\" );\n    if (threading) put_str( indent, \"InprocServer32 = s '%%MODULE%%' { val ThreadingModel = s '%s' }\\n\",\n                            threading );\n    if (progid) put_str( indent, \"ProgId = s '%s'\\n\", progid );\n    if (typelib)\n    {\n        const UUID *typelib_uuid = get_attrp( typelib->attrs, ATTR_UUID );\n        put_str( indent, \"TypeLib = s '%s'\\n\", format_uuid( typelib_uuid ));\n        if (!version) version = get_attrv( typelib->attrs, ATTR_VERSION );\n    }\n    if (version) put_str( indent, \"Version = s '%u.%u'\\n\", MAJORVERSION(version), MINORVERSION(version) );\n    if (vi_progid) put_str( indent, \"VersionIndependentProgId = s '%s'\\n\", vi_progid );\n    put_str( --indent, \"}\\n\" );\n    return 1;\n}\n\nstatic void write_coclasses( const statement_list_t *stmts, const typelib_t *typelib )\n{\n    const statement_t *stmt;\n\n    if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry )\n    {\n        if (stmt->type == STMT_TYPE)\n        {\n            const type_t *type = stmt->u.type;\n            if (type_get_type(type) == TYPE_COCLASS) write_coclass( type, typelib );\n        }\n    }\n}\n\nstatic int write_progid( const type_t *class )\n{\n    const UUID *uuid = get_attrp( class->attrs, ATTR_UUID );\n    const char *descr = get_attrp( class->attrs, ATTR_HELPSTRING );\n    const char *progid = get_attrp( class->attrs, ATTR_PROGID );\n    const char *vi_progid = get_attrp( class->attrs, ATTR_VIPROGID );\n\n    if (!uuid) return 0;\n    if (!descr) descr = class->name;\n\n    if (progid)\n    {\n        put_str( indent, \"'%s' = s '%s'\\n\", progid, descr );\n        put_str( indent++, \"{\\n\" );\n        put_str( indent, \"CLSID = s '%s'\\n\", format_uuid( uuid ) );\n        put_str( --indent, \"}\\n\" );\n    }\n    if (vi_progid)\n    {\n        put_str( indent, \"'%s' = s '%s'\\n\", vi_progid, descr );\n        put_str( indent++, \"{\\n\" );\n        put_str( indent, \"CLSID = s '%s'\\n\", format_uuid( uuid ) );\n        if (progid && strcmp( progid, vi_progid )) put_str( indent, \"CurVer = s '%s'\\n\", progid );\n        put_str( --indent, \"}\\n\" );\n    }\n    return 1;\n}\n\nstatic void write_progids( const statement_list_t *stmts )\n{\n    const statement_t *stmt;\n\n    if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry )\n    {\n        if (stmt->type == STMT_TYPE)\n        {\n            const type_t *type = stmt->u.type;\n            if (type_get_type(type) == TYPE_COCLASS) write_progid( type );\n        }\n    }\n}\n\nvoid write_regscript( const statement_list_t *stmts )\n{\n    const type_t *ps_factory;\n\n    if (!do_regscript) return;\n    if (do_everything && !need_proxy_file( stmts )) return;\n\n    init_output_buffer();\n\n    put_str( indent, \"HKCR\\n\" );\n    put_str( indent++, \"{\\n\" );\n\n    put_str( indent, \"NoRemove Interface\\n\" );\n    put_str( indent++, \"{\\n\" );\n    ps_factory = find_ps_factory( stmts );\n    if (ps_factory) write_interfaces( stmts, ps_factory );\n    put_str( --indent, \"}\\n\" );\n\n    put_str( indent, \"NoRemove CLSID\\n\" );\n    put_str( indent++, \"{\\n\" );\n    write_coclasses( stmts, NULL );\n    put_str( --indent, \"}\\n\" );\n\n    write_progids( stmts );\n    put_str( --indent, \"}\\n\" );\n\n    if (strendswith( regscript_name, \".res\" ))  /* create a binary resource file */\n    {\n        add_output_to_resources( \"WINE_REGISTRY\", regscript_token );\n        flush_output_resources( regscript_name );\n    }\n    else\n    {\n        FILE *f = fopen( regscript_name, \"w\" );\n        if (!f) error( \"Could not open %s for output\\n\", regscript_name );\n        if (fwrite( output_buffer, 1, output_buffer_pos, f ) != output_buffer_pos)\n            error( \"Failed to write to %s\\n\", regscript_name );\n        if (fclose( f ))\n            error( \"Failed to write to %s\\n\", regscript_name );\n    }\n}\n\nvoid output_typelib_regscript( const typelib_t *typelib )\n{\n    const UUID *typelib_uuid = get_attrp( typelib->attrs, ATTR_UUID );\n    const char *descr = get_attrp( typelib->attrs, ATTR_HELPSTRING );\n    const expr_t *lcid_expr = get_attrp( typelib->attrs, ATTR_LIBLCID );\n    unsigned int version = get_attrv( typelib->attrs, ATTR_VERSION );\n    unsigned int flags = 0;\n    char id_part[12] = \"\";\n    expr_t *expr;\n\n    if (is_attr( typelib->attrs, ATTR_RESTRICTED )) flags |= 1; /* LIBFLAG_FRESTRICTED */\n    if (is_attr( typelib->attrs, ATTR_CONTROL )) flags |= 2; /* LIBFLAG_FCONTROL */\n    if (is_attr( typelib->attrs, ATTR_HIDDEN )) flags |= 4; /* LIBFLAG_FHIDDEN */\n\n    put_str( indent, \"HKCR\\n\" );\n    put_str( indent++, \"{\\n\" );\n\n    put_str( indent, \"NoRemove Typelib\\n\" );\n    put_str( indent++, \"{\\n\" );\n    put_str( indent, \"NoRemove '%s'\\n\", format_uuid( typelib_uuid ));\n    put_str( indent++, \"{\\n\" );\n    put_str( indent, \"'%u.%u' = s '%s'\\n\",\n             MAJORVERSION(version), MINORVERSION(version), descr ? descr : typelib->name );\n    put_str( indent++, \"{\\n\" );\n    expr = get_attrp( typelib->attrs, ATTR_ID );\n    if (expr)\n        sprintf(id_part, \"\\\\%d\", expr->cval);\n    put_str( indent, \"'%x' { %s = s '%%MODULE%%%s' }\\n\",\n             lcid_expr ? lcid_expr->cval : 0, typelib_kind == SYS_WIN64 ? \"win64\" : \"win32\", id_part );\n    put_str( indent, \"FLAGS = s '%u'\\n\", flags );\n    put_str( --indent, \"}\\n\" );\n    put_str( --indent, \"}\\n\" );\n    put_str( --indent, \"}\\n\" );\n\n    put_str( indent, \"NoRemove Interface\\n\" );\n    put_str( indent++, \"{\\n\" );\n    write_typelib_interfaces( typelib );\n    put_str( --indent, \"}\\n\" );\n\n    put_str( indent, \"NoRemove CLSID\\n\" );\n    put_str( indent++, \"{\\n\" );\n    write_coclasses( typelib->stmts, typelib );\n    put_str( --indent, \"}\\n\" );\n\n    write_progids( typelib->stmts );\n    put_str( --indent, \"}\\n\" );\n\n    add_output_to_resources( \"WINE_REGISTRY\", typelib_name );\n}\n"
  },
  {
    "path": "widl/relay16.c",
    "content": "#include \"config.h\"\n\n#include <stdarg.h>\n#include <stdio.h>\n#include <stdlib.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#include <string.h>\n#include <ctype.h>\n\n#include \"widl.h\"\n#include \"utils.h\"\n#include \"parser.h\"\n#include \"expr.h\"\n#include \"typetree.h\"\n#include \"typelib.h\"\n#include \"header.h\"\n\nstatic void write_type_v(FILE *h, type_t *t, int is_field, int declonly, const char *name);\n\nstatic void get_type_size16(const type_t *type, int *size, int *is_ptr);\nstatic void write_args1632(FILE *h, const var_list_t *args, const char *name, int method)\n{\n    const var_t *arg;\n    int count = 0;\n\n    if (method == 1) {\n        fprintf(h, \"%s* This\", name);\n        count++;\n    }\n    if (args) LIST_FOR_EACH_ENTRY(arg, args, const var_t, entry) {\n        int size, is_ptr;\n        if (count) {\n            fprintf(h, \", \");\n        }\n        get_type_size16(arg->type, &size, &is_ptr);\n        if (size == 4)\n        {\n            if (is_ptr)\n            {\n                fprintf(h, \"SEGPTR args16_%s\", arg->name);\n            }\n            else\n            {\n                /* hard-coded */\n                if (!strcmp(arg->type->c_name, \"POINT\"))\n                {\n                    fprintf(h, \"POINT16 args16_%s\", arg->name);\n                }\n                else if (!strcmp(arg->type->c_name, \"SIZE\"))\n                {\n                    fprintf(h, \"SIZE16 args16_%s\", arg->name);\n                }\n                else\n                {\n                    fprintf(h, \"DWORD args16_%s\", arg->name);\n                }\n            }\n        }\n        else if (size == 2)\n        {\n            assert(!is_ptr);\n            fprintf(h, \"WORD args16_%s\", arg->name);\n        }\n        else if (size == 8)\n        {\n            assert(!is_ptr);\n            /* hard-coded */\n            if (!strcmp(arg->type->c_name, \"LARGE_INTEGER\"))\n            {\n                fprintf(h, \"LARGE_INTEGER args16_%s\", arg->name);\n            }\n            else if (!strcmp(arg->type->c_name, \"ULARGE_INTEGER\"))\n            {\n                fprintf(h, \"ULARGE_INTEGER args16_%s\", arg->name);\n            }\n            else if (!strcmp(arg->type->c_name, \"POINTL\"))\n            {\n                fprintf(h, \"POINTL args16_%s\", arg->name);\n            }\n            else if (!strcmp(arg->type->c_name, \"CY\"))\n            {\n                fprintf(h, \"CY args16_%s\", arg->name);\n            }\n            else\n            {\n                assert(0);\n            }\n        }\n        else\n        {\n            assert(0);\n        }\n        count++;\n    }\n}\n\nstatic void write_type_conv_macro(FILE *h, type_t *t)\n{\n    enum type_type type = type_get_type(t);\n    if (type_is_alias(t))\n    {\n        fprintf(h, \"%s\", t->name);\n        return;\n    }\n    switch (type)\n    {\n    case TYPE_VOID:\n    {\n        fprintf(h, \"VOID\");\n        return;\n    }\n    case TYPE_BASIC:\n        switch (type_basic_get_type(t))\n        {\n        case TYPE_BASIC_INT8:\n            fprintf(h, \"INT8\");\n            return;\n        case TYPE_BASIC_INT16:\n            fprintf(h, \"INT16\");\n            return;\n        case TYPE_BASIC_INT32:\n            fprintf(h, \"INT32\");\n            return;\n        case TYPE_BASIC_INT64:\n            fprintf(h, \"INT64\");\n            return;\n        case TYPE_BASIC_INT:\n            fprintf(h, \"INT\");\n            return;\n        case TYPE_BASIC_INT3264:\n            fprintf(h, \"INT3264\");\n            return;\n        case TYPE_BASIC_CHAR:\n            fprintf(h, \"CHAR\");\n            return;\n        case TYPE_BASIC_HYPER:\n            fprintf(h, \"HYPER\");\n            return;\n        case TYPE_BASIC_BYTE:\n            fprintf(h, \"BYTE\");\n            return;\n        case TYPE_BASIC_WCHAR:\n            fprintf(h, \"WCHAR\");\n            return;\n        case TYPE_BASIC_ERROR_STATUS_T:\n        case TYPE_BASIC_FLOAT:\n            assert((TYPE_BASIC_FLOAT, 0));\n        case TYPE_BASIC_DOUBLE:\n            assert((TYPE_BASIC_DOUBLE, 0));\n        case TYPE_BASIC_HANDLE:\n            assert((TYPE_BASIC_HANDLE, 0));\n        }\n        break;\n    case TYPE_ENUM:\n        break;\n    case TYPE_STRUCT:\n        assert(type_get_name(t, NAME_DEFAULT));\n        fprintf(h, \"STRUCT_%s\", type_get_name(t, NAME_DEFAULT));\n        return;\n    case TYPE_ENCAPSULATED_UNION:\n        break;\n    case TYPE_UNION:\n        break;\n    case TYPE_ALIAS:\n        break;\n    case TYPE_MODULE:\n        break;\n    case TYPE_COCLASS:\n        break;\n    case TYPE_FUNCTION:\n        break;\n    case TYPE_INTERFACE:\n    {\n        fprintf(h, \"IFACE_%s\", t->name);\n        return;\n    }\n    case TYPE_POINTER:\n    {\n        fprintf(h, \"PTR_\");\n        write_type_conv_macro(h, type_pointer_get_ref(t));\n        return;\n    }\n    case TYPE_ARRAY:\n        if (t->name && type_array_is_decl_as_ptr(t))\n            fprintf(h, \"%s\", t->name);\n        else\n        {\n            write_type_conv_macro(h, type_array_get_element(t));\n            if (type_array_is_decl_as_ptr(t))\n                fprintf(h, \"_PTR\");\n        }\n        return;\n    case TYPE_BITFIELD:\n        break;\n    default:\n        break;\n    }\n    assert(0);\n}\n\nenum type_conv_map\n{\n    TYPE_CONV_MAP,\n    TYPE_CONV_UNMAP,\n    TYPE_CONV_INMAP,\n    TYPE_CONV_OUTMAP,\n    TYPE_CONV_MAP_MAPSL, /* (*(typ16*)MapSL(%s%s)) */\n    TYPE_CONV_MAP_ARRAY, /* (((typ16*)dst__)[i__]) */\n    TYPE_CONV_OUTMAP_MAPSL, /* (*(typ16*)MapSL(%s%s)) */\n};\nstatic void write_type_decl_left3216(FILE *f, type_t *t);\nstatic void write_type_conv3216(FILE *h, type_t *t, const char *expr_prefix, const char *expr, const char *to, const char *to2, int unmap)\n{\n    enum type_type typtyp1 = type_get_type(t);\n    enum type_conv_map type_conv_map = (enum type_conv_map)unmap;\n    int is_out = type_conv_map == TYPE_CONV_OUTMAP || type_conv_map == TYPE_CONV_OUTMAP_MAPSL;\n    if (!is_out && typtyp1 == TYPE_BASIC && !t->is_alias)\n    {\n        switch (type_basic_get_type(t))\n        {\n        case TYPE_BASIC_INT8:\n        case TYPE_BASIC_INT16:\n        case TYPE_BASIC_INT32:\n        case TYPE_BASIC_INT64:\n            if (type_conv_map == TYPE_CONV_UNMAP)\n                return;\n            if (type_conv_map == TYPE_CONV_MAP_MAPSL)\n            {\n                fprintf(h, \"    *(\");\n                write_type_decl_left3216(h, t);\n                fprintf(h, \"*)MapSL(%s%s) = %s%s;\\n\", to, to2, expr_prefix, expr);\n            }\n            else if (type_conv_map == TYPE_CONV_MAP_ARRAY)\n            {\n                fprintf(h, \"    ((\");\n                write_type_decl_left3216(h, t);\n                fprintf(h, \"*)(%s%s))[i__] = %s%s;\\n\", to, to2, expr_prefix, expr);\n            }\n            else\n            {\n                fprintf(h, \"    %s%s = %s%s;\\n\", to, to2, expr_prefix, expr);\n            }\n            return;\n        }\n    }\n    type_t *typ2 = typtyp1 == TYPE_POINTER ? type_pointer_get_ref(t) : NULL;\n    enum type_type typtyp2 = typ2 ? type_get_type(typ2) : -1;\n    if (!is_out && typtyp2 == TYPE_INTERFACE)\n    {\n        if (type_conv_map == TYPE_CONV_UNMAP)\n            return;\n        if (type_conv_map == TYPE_CONV_MAP_MAPSL)\n        {\n            fprintf(h, \"    *(SEGPTR*)MapSL(%s%s) = iface32_16(&IID_%s, %s%s);\\n\", to, to2, typ2->name, expr_prefix, expr);\n        }\n        else if (type_conv_map == TYPE_CONV_MAP_ARRAY)\n        {\n            fprintf(h, \"    ((SEGPTR*)(%s%s))[i__] = iface32_16(&IID_%s, %s%s);\\n\", to, to2, typ2->name, expr_prefix, expr);\n        }\n        else\n        {\n            fprintf(h, \"    %s%s = iface32_16(&IID_%s, %s%s);\\n\", to, to2, typ2->name, expr_prefix, expr);\n        }\n        return;\n    }\n    if (type_conv_map == TYPE_CONV_UNMAP)\n        fprintf(h, \"    UNMAP_\");\n    else if (type_conv_map == TYPE_CONV_INMAP)\n        fprintf(h, \"    INMAP_\");\n    else if (type_conv_map == TYPE_CONV_OUTMAP)\n        fprintf(h, \"    OUTMAP_\");\n    else if (type_conv_map == TYPE_CONV_OUTMAP_MAPSL)\n        fprintf(h, \"    OUTMAP_\");\n    else\n        fprintf(h, \"    MAP_\");\n    write_type_conv_macro(h, t);\n    if (type_conv_map == TYPE_CONV_MAP_MAPSL || type_conv_map == TYPE_CONV_OUTMAP_MAPSL)\n    {\n        fprintf(h, \"32_16((*(\");\n        write_type_decl_left3216(h, t);\n        fprintf(h, \"*)MapSL(%s%s)), %s%s)\", to, to2, expr_prefix, expr);\n    }\n    else if (type_conv_map == TYPE_CONV_MAP_ARRAY)\n    {\n        fprintf(h, \"32_16((((\");\n        write_type_decl_left3216(h, t);\n        fprintf(h, \"*)(%s%s))[i__]), %s%s)\", to, to2, expr_prefix, expr);\n    }\n    else\n    {\n        fprintf(h, \"32_16(%s%s, %s%s)\", to, to2, expr_prefix, expr);\n    }\n    fprintf(h, \";\\n\");\n}\nstatic void write_type_conv1632(FILE *h, type_t *t, const char *expr_prefix, const char *expr, const char *to, const char *to2, int unmap)\n{\n    enum type_type typtyp1 = type_get_type(t);\n    type_t *typ2 = typtyp1 == TYPE_POINTER ? type_pointer_get_ref(t) : NULL;\n    enum type_type typtyp2 = typ2 ? type_get_type(typ2) : -1;\n    enum type_conv_map type_conv_map = (enum type_conv_map)unmap;\n    if (typtyp1 == TYPE_BASIC && !t->is_alias)\n    {\n        switch (type_basic_get_type(t))\n        {\n        case TYPE_BASIC_INT8:\n        case TYPE_BASIC_INT16:\n        case TYPE_BASIC_INT32:\n        case TYPE_BASIC_INT64:\n            if (type_conv_map == TYPE_CONV_UNMAP)\n                return;\n            if (type_conv_map == TYPE_CONV_MAP_ARRAY)\n            {\n                fprintf(h, \"    %s%s = ((\", to, to2);\n                write_type_decl_left(h, t);\n                fprintf(h, \"*)(%s%s))[i__];\\n\", expr_prefix, expr);\n            }\n            else\n            {\n                fprintf(h, \"    %s%s = %s%s;\\n\", to, to2, expr_prefix, expr);\n            }\n            return;\n        }\n    }\n    if (typtyp2 == TYPE_INTERFACE)\n    {\n        if (type_conv_map == TYPE_CONV_UNMAP)\n            return;\n        if (type_conv_map == TYPE_CONV_MAP_ARRAY)\n        {\n            fprintf(h, \"    %s%s = iface16_32(&IID_%s, ((void**)%s%s)[i__]);\\n\", to, to2, typ2->name, expr_prefix, expr);\n        }\n        else\n        {\n            fprintf(h, \"    %s%s = iface16_32(&IID_%s, %s%s);\\n\", to, to2, typ2->name, expr_prefix, expr);\n        }\n        return;\n    }\n    if (type_conv_map == TYPE_CONV_UNMAP)\n        fprintf(h,\"    UNMAP_\");\n    else if (type_conv_map == TYPE_CONV_INMAP)\n        fprintf(h, \"    INMAP_\");\n    else if (type_conv_map == TYPE_CONV_OUTMAP)\n        fprintf(h, \"    OUTMAP_\");\n    else\n        fprintf(h, \"    MAP_\");\n    write_type_conv_macro(h, t);\n    if (type_conv_map == TYPE_CONV_MAP_ARRAY)\n    {\n        fprintf(h, \"16_32(%s%s, \", to, to2);\n        fprintf(h, \"(((\");\n        write_type_decl_left(h, t);\n        fprintf(h, \"*)%s%s)[i__]))\", expr_prefix, expr);\n    }\n    else\n    {\n        fprintf(h, \"16_32(%s%s, %s%s)\", to, to2, expr_prefix, expr);\n    }\n    fprintf(h, \";\\n\");\n}\n\nstatic const var_t *find_args(const var_list_t *args, const char *name)\n{\n    const var_t *arg;\n\n    if (args) LIST_FOR_EACH_ENTRY(arg, args, const var_t, entry) {\n        if (!strcmp(arg->name, name))\n            return arg;\n    }\n    return NULL;\n}\n/* hard-coded */\nstatic const char *handle16_table[] =\n{\n    \"HTASK\",\n    \"HWND\",\n    \"HMENU\",\n    \"HICON\",\n    \"HBITMAP\",\n    \"HOLEMENU\",\n    \"HDC\",\n    \"HGLOBAL\",\n    \"HFONT\",\n    \"HRGN\",\n};\nstatic void get_type_size16(const type_t *type, int *size, int *is_ptr)\n{\n    enum type_type typtyp1 = type_get_type(type);\n    *size = 0;\n    *is_ptr = 0;\n    if (type_is_alias(type))\n    {\n        if (*type->name == 'H')\n        {\n            int i;\n            for (i = 0; i < sizeof(handle16_table) / sizeof(*handle16_table); i++)\n            {\n                if (!strcmp(type->name, handle16_table[i]))\n                {\n                    *size = 2;\n                    return;\n                }\n            }\n            /* hard-coded */\n            if (strcmp(type->name, \"HREFTYPE\") && strcmp(type->name, \"HRESULT\"))\n            {\n                *size = 0;\n            }\n        }\n        if (!strcmp(type->name, \"BOOL\"))\n        {\n            *size = 2;\n            return;\n        }\n    }\n    switch (typtyp1)\n    {\n    case TYPE_ENUM:\n        /* fixme:ATTR_V1ENUM */\n        if (is_attr(type->attrs, ATTR_V1ENUM))\n            *size = 2;\n        else\n            *size = 2;\n        break;\n    case TYPE_INTERFACE:\n    case TYPE_POINTER:\n        *size = 4;\n        *is_ptr = 1;\n        break;\n    case TYPE_BASIC:\n        switch (type_basic_get_type(type))\n        {\n        case TYPE_BASIC_INT8:\n            *size = 1;\n            break;\n        case TYPE_BASIC_INT16:\n            *size = 2;\n            break;\n        case TYPE_BASIC_INT32:\n            *size = 4;\n            break;\n        case TYPE_BASIC_INT64:\n            *size = 8;\n            break;\n        case TYPE_BASIC_INT:\n            *size = 2;\n            break;\n        case TYPE_BASIC_INT3264:\n            *size = 4;\n            break;\n        case TYPE_BASIC_CHAR:\n            *size = 1;\n            break;\n        case TYPE_BASIC_HYPER:\n            assert((TYPE_BASIC_HYPER, 0));\n        case TYPE_BASIC_BYTE:\n            *size = 1;\n            break;\n        case TYPE_BASIC_WCHAR:\n            *size = 2;\n            break;\n        case TYPE_BASIC_ERROR_STATUS_T:\n        case TYPE_BASIC_FLOAT:\n            assert((TYPE_BASIC_FLOAT, 0));\n        case TYPE_BASIC_DOUBLE:\n            assert((TYPE_BASIC_DOUBLE, 0));\n        case TYPE_BASIC_HANDLE:\n            assert((TYPE_BASIC_HANDLE, 0));\n        }\n        break;\n    case TYPE_ARRAY:\n        *size = 4;\n        *is_ptr = 1;\n        break;\n    case TYPE_STRUCT:\n        /* hard-coded */\n        if (!strcmp(\"LARGE_INTEGER\", type_get_name(type, NAME_DEFAULT)))\n        {\n            *size = 8;\n            break;\n        }\n        if (!strcmp(\"ULARGE_INTEGER\", type_get_name(type, NAME_DEFAULT)))\n        {\n            *size = 8;\n            break;\n        }\n        if (!strcmp(\"SIZE\", type_get_name(type, NAME_DEFAULT)))\n        {\n            *size = 4;\n            break;\n        }\n        if (!strcmp(\"POINT\", type_get_name(type, NAME_DEFAULT)))\n        {\n            *size = 4;\n            break;\n        }\n        if (!strcmp(\"POINTL\", type_get_name(type, NAME_DEFAULT)))\n        {\n            *size = 8;\n            break;\n        }\n        if (!strcmp(\"CY\", type_get_name(type, NAME_DEFAULT)))\n        {\n            *size = 8;\n            break;\n        }\n        /* FIXME */\n        if (!strcmp(\"IViewObjectCallback\", type_get_name(type, NAME_DEFAULT)))\n        {\n            *size = 4;\n            break;\n        }\n        assert(0);\n    case TYPE_VOID:\n    case TYPE_ENCAPSULATED_UNION:\n    case TYPE_UNION:\n    case TYPE_ALIAS:\n    case TYPE_MODULE:\n    case TYPE_COCLASS:\n    case TYPE_FUNCTION:\n    case TYPE_BITFIELD:\n    default:\n        assert(0);\n    }\n    return;\n}\nstatic type_t *find_identifier(const char *identifier, const type_t *cont_type, int *found_in_cont_type)\n{\n    type_t *type = NULL;\n    const var_t *field;\n    const var_list_t *fields = NULL;\n\n    *found_in_cont_type = 0;\n\n    if (cont_type)\n    {\n        switch (type_get_type(cont_type))\n        {\n        case TYPE_FUNCTION:\n            fields = type_function_get_args(cont_type);\n            break;\n        case TYPE_STRUCT:\n            fields = type_struct_get_fields(cont_type);\n            break;\n        case TYPE_UNION:\n        case TYPE_ENCAPSULATED_UNION:\n            fields = type_union_get_cases(cont_type);\n            break;\n        case TYPE_VOID:\n        case TYPE_BASIC:\n        case TYPE_ENUM:\n        case TYPE_MODULE:\n        case TYPE_COCLASS:\n        case TYPE_INTERFACE:\n        case TYPE_POINTER:\n        case TYPE_ARRAY:\n        case TYPE_BITFIELD:\n            /* nothing to do */\n            break;\n        case TYPE_ALIAS:\n            /* shouldn't get here because of using type_get_type above */\n            assert(0);\n            break;\n        }\n    }\n\n    if (fields) LIST_FOR_EACH_ENTRY( field, fields, const var_t, entry )\n        if (field->name && !strcmp(identifier, field->name))\n        {\n            type = field->type;\n            *found_in_cont_type = 1;\n            break;\n        }\n\n    if (!type)\n    {\n        var_t *const_var = find_const(identifier, 0);\n        if (const_var) type = const_var->type;\n    }\n\n    return type;\n}\n\ntypedef void(*write_expr_callback_t)(FILE *h, void *udata, const char *iden, const char *local_var_prefix);\nvoid write_expr16(FILE *h, const expr_t *e, int brackets,\n                int toplevel, const char *toplevel_prefix,\n                const type_t *cont_type, const char *local_var_prefix, void *udata, write_expr_callback_t callback)\n{\n    switch (e->type)\n    {\n    case EXPR_VOID:\n        break;\n    case EXPR_NUM:\n        fprintf(h, \"%u\", e->u.lval);\n        break;\n    case EXPR_HEXNUM:\n        fprintf(h, \"0x%x\", e->u.lval);\n        break;\n    case EXPR_DOUBLE:\n        fprintf(h, \"%#.15g\", e->u.dval);\n        break;\n    case EXPR_TRUEFALSE:\n        if (e->u.lval == 0)\n            fprintf(h, \"FALSE\");\n        else\n            fprintf(h, \"TRUE\");\n        break;\n    case EXPR_IDENTIFIER:\n        if (toplevel && toplevel_prefix && cont_type)\n        {\n            int found_in_cont_type;\n            find_identifier(e->u.sval, cont_type, &found_in_cont_type);\n            if (found_in_cont_type)\n            {\n                fprintf(h, \"%s%s\", toplevel_prefix, e->u.sval);\n                break;\n            }\n        }\n        if (callback)\n        {\n            callback(h, udata, e->u.sval, local_var_prefix);\n        }\n        else\n        {\n            fprintf(h, \"%s%s\", local_var_prefix, e->u.sval);\n        }\n        break;\n    case EXPR_STRLIT:\n        fprintf(h, \"\\\"%s\\\"\", e->u.sval);\n        break;\n    case EXPR_WSTRLIT:\n        fprintf(h, \"L\\\"%s\\\"\", e->u.sval);\n        break;\n    case EXPR_CHARCONST:\n        fprintf(h, \"'%s'\", e->u.sval);\n        break;\n    case EXPR_LOGNOT:\n        fprintf(h, \"!\");\n        write_expr16(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback);\n        break;\n    case EXPR_NOT:\n        fprintf(h, \"~\");\n        write_expr16(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback);\n        break;\n    case EXPR_POS:\n        fprintf(h, \"+\");\n        write_expr16(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback);\n        break;\n    case EXPR_NEG:\n        fprintf(h, \"-\");\n        write_expr16(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback);\n        break;\n    case EXPR_ADDRESSOF:\n        fprintf(h, \"&\");\n        write_expr16(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback);\n        break;\n    case EXPR_PPTR:\n        fprintf(h, \"*\");\n        write_expr16(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback);\n        break;\n    case EXPR_CAST:\n        fprintf(h, \"(\");\n        write_type_decl(h, e->u.tref, NULL);\n        fprintf(h, \")\");\n        write_expr16(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback);\n        break;\n    case EXPR_SIZEOF:\n        fprintf(h, \"sizeof(\");\n        write_type_decl(h, e->u.tref, NULL);\n        fprintf(h, \")\");\n        break;\n    case EXPR_SHL:\n    case EXPR_SHR:\n    case EXPR_MOD:\n    case EXPR_MUL:\n    case EXPR_DIV:\n    case EXPR_ADD:\n    case EXPR_SUB:\n    case EXPR_AND:\n    case EXPR_OR:\n    case EXPR_LOGOR:\n    case EXPR_LOGAND:\n    case EXPR_XOR:\n    case EXPR_EQUALITY:\n    case EXPR_INEQUALITY:\n    case EXPR_GTR:\n    case EXPR_LESS:\n    case EXPR_GTREQL:\n    case EXPR_LESSEQL:\n        if (brackets) fprintf(h, \"(\");\n        write_expr16(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback);\n        switch (e->type)\n        {\n        case EXPR_SHL:          fprintf(h, \" << \"); break;\n        case EXPR_SHR:          fprintf(h, \" >> \"); break;\n        case EXPR_MOD:          fprintf(h, \" %% \"); break;\n        case EXPR_MUL:          fprintf(h, \" * \"); break;\n        case EXPR_DIV:          fprintf(h, \" / \"); break;\n        case EXPR_ADD:          fprintf(h, \" + \"); break;\n        case EXPR_SUB:          fprintf(h, \" - \"); break;\n        case EXPR_AND:          fprintf(h, \" & \"); break;\n        case EXPR_OR:           fprintf(h, \" | \"); break;\n        case EXPR_LOGOR:        fprintf(h, \" || \"); break;\n        case EXPR_LOGAND:       fprintf(h, \" && \"); break;\n        case EXPR_XOR:          fprintf(h, \" ^ \"); break;\n        case EXPR_EQUALITY:     fprintf(h, \" == \"); break;\n        case EXPR_INEQUALITY:   fprintf(h, \" != \"); break;\n        case EXPR_GTR:          fprintf(h, \" > \"); break;\n        case EXPR_LESS:         fprintf(h, \" < \"); break;\n        case EXPR_GTREQL:       fprintf(h, \" >= \"); break;\n        case EXPR_LESSEQL:      fprintf(h, \" <= \"); break;\n        default: break;\n        }\n        write_expr16(h, e->u.ext, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback);\n        if (brackets) fprintf(h, \")\");\n        break;\n    case EXPR_MEMBER:\n        if (brackets) fprintf(h, \"(\");\n        if (e->ref->type == EXPR_PPTR)\n        {\n            write_expr16(h, e->ref->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback);\n            fprintf(h, \"->\");\n        }\n        else\n        {\n            write_expr16(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback);\n            fprintf(h, \".\");\n        }\n        write_expr16(h, e->u.ext, 1, 0, toplevel_prefix, cont_type, \"\", udata, callback);\n        if (brackets) fprintf(h, \")\");\n        break;\n    case EXPR_COND:\n        if (brackets) fprintf(h, \"(\");\n        write_expr16(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback);\n        fprintf(h, \" ? \");\n        write_expr16(h, e->u.ext, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback);\n        fprintf(h, \" : \");\n        write_expr16(h, e->ext2, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback);\n        if (brackets) fprintf(h, \")\");\n        break;\n    case EXPR_ARRAY:\n        if (brackets) fprintf(h, \"(\");\n        write_expr16(h, e->ref, 1, toplevel, toplevel_prefix, cont_type, local_var_prefix, udata, callback);\n        fprintf(h, \"[\");\n        write_expr16(h, e->u.ext, 1, 1, toplevel_prefix, cont_type, local_var_prefix, udata, callback);\n        fprintf(h, \"]\");\n        if (brackets) fprintf(h, \")\");\n        break;\n    }\n}\n\nstruct args_conv_callback_udata\n{\n    const var_list_t *args;\n};\nvoid args_conv_callback(FILE *h, void *udata, const char *iden, const char *local_prefix)\n{\n    const var_t *arg;\n    struct args_conv_callback_udata *ud = (struct args_conv_callback_udata*)udata;\n    LIST_FOR_EACH_ENTRY(arg, ud->args, const var_t, entry) {\n        expr_t *iid = get_attrp(arg->attrs, ATTR_IIDIS);\n        int is_out = is_attr(arg->attrs, ATTR_OUT);\n        int is_in = is_attr(arg->attrs, ATTR_IN);\n        int is_array = 0;\n        int is_byte_out = 0;\n        enum type_type typtyp1 = type_get_type(arg->type);\n        type_t *typ2 = typtyp1 == TYPE_POINTER ? type_pointer_get_ref(arg->type) : NULL;\n        enum type_type typtyp2 = typ2 ? type_get_type(typ2) : -1;\n        if (typtyp1 == TYPE_ARRAY)\n        {\n            type_t *array_elem_type = type_array_get_element(arg->type);\n            enum type_type array_elem_type_type = type_get_type(array_elem_type);\n            if (array_elem_type_type != TYPE_VOID)\n            {\n                typ2 = array_elem_type;\n                typtyp1 = array_elem_type_type;\n                is_array = TRUE;\n            }\n            else\n            {\n                is_byte_out = TRUE;\n                typ2 = array_elem_type;\n                typtyp1 = array_elem_type_type;\n                is_array = TRUE;\n            }\n        }\n        if (is_out && !strcmp(arg->name, iden))\n        {\n            fprintf(h, \"(&%s%s)\", local_prefix, iden);\n            return;\n        }\n    }\n    fprintf(h, \"%s%s\", local_prefix, iden);\n    return;\n}\nenum args_conv\n{\n    ARGS_CONV_DECL,\n    ARGS_CONV_AFTER_CONV,\n    ARGS_CONV_CALL,\n    ARGS_CONV_MAP,\n    ARGS_CONV_MAP_OUTARRAY,\n    ARGS_CONV_UNMAP,\n    ARGS_CONV_TRACE,\n    ARGS_CONV_TRACE_ARGS,\n};\nstatic void write_args_conv(FILE *h, const var_list_t *args, const char *name, enum args_conv args_conv, int is_1632)\n{\n    const var_t *arg;\n    int count = 0;\n    int ivar_defined = FALSE;\n    if (args_conv == ARGS_CONV_TRACE)\n    {\n        if (is_1632)\n            fprintf(h, \"%s\", \"%04x:%04x(%p)\");\n        else\n            fprintf(h, \"%s\", \"%p(%04x:%04x)\");\n    }\n    if (args_conv == ARGS_CONV_TRACE_ARGS)\n    {\n        if (is_1632)\n            fprintf(h, \", SELECTOROF(This), OFFSETOF(This), iface32\");\n        else\n            fprintf(h, \", This, SELECTOROF(iface16), OFFSETOF(iface16)\");\n    }\n    if (args) LIST_FOR_EACH_ENTRY(arg, args, const var_t, entry) {\n        /* ATTR_IIDIS ATTR_OUT ATTR_IN */\n        expr_t *iid = get_attrp(arg->attrs, ATTR_IIDIS);\n        int is_out = is_attr(arg->attrs, ATTR_OUT);\n        int is_in = is_attr(arg->attrs, ATTR_IN);\n        int is_array = 0;\n        int is_byte_out = 0;\n        enum type_type typtyp1 = type_get_type(arg->type);\n        type_t *typ2 = typtyp1 == TYPE_POINTER ? type_pointer_get_ref(arg->type) : NULL;\n        enum type_type typtyp2 = typ2 ? type_get_type(typ2) : -1;\n        type_t *typ3 = typ2 && typtyp2 == TYPE_POINTER ? type_pointer_get_ref(typ2) : NULL;\n        enum type_type typtyp3 = typ3 ? type_get_type(typ3) : -1;\n        if (typtyp1 == TYPE_ARRAY)\n        {\n            type_t *array_elem_type = type_array_get_element(arg->type);\n            enum type_type array_elem_type_type = type_get_type(array_elem_type);\n            if (array_elem_type_type != TYPE_VOID)\n            {\n                typ2 = array_elem_type;\n                typtyp1 = array_elem_type_type;\n                is_array = TRUE;\n            }\n            else\n            {\n                is_byte_out = TRUE;\n                typ2 = array_elem_type;\n                typtyp1 = array_elem_type_type;\n                is_array = TRUE;\n            }\n        }\n        if (args_conv == ARGS_CONV_CALL)\n        {\n            if (is_out)\n            {\n                if (is_1632)\n                {\n                    if (is_array)\n                    {\n                        fprintf(h, \", args32_%s\", arg->name);\n                    }\n                    else\n                    {\n                        fprintf(h, \", &args32_%s\", arg->name);\n                    }\n                }\n                else\n                {\n                    if (is_array)\n                    {\n                        fprintf(h, \", MapLS(args16_%s)\", arg->name);\n                    }\n                    else\n                    {\n                        fprintf(h, \", MapLS(&args16_%s)\", arg->name);\n                    }\n                }\n            }\n            else\n            {\n                if (is_in && is_array && !is_1632)\n                {\n                    fprintf(h, \", MapLS(args16_%s)\", arg->name);\n                }\n                else\n                {\n                    fprintf(h, \", args%d_%s\", is_1632 ? 32 : 16, arg->name);\n                }\n            }\n        }\n        else if (args_conv == ARGS_CONV_MAP || args_conv == ARGS_CONV_UNMAP)\n        {\n            type_t *map_type;\n            const char *prefix_src;\n            const char *prefix_dst;\n            map_type = arg->type;\n            if (is_1632)\n                prefix_dst = \"args32_\";\n            else\n                prefix_dst = \"args16_\";\n            if (is_1632)\n                prefix_src = \"args16_\";\n            else\n                prefix_src = \"\";\n\n            if (is_in && (!is_array))\n            {\n                enum type_conv_map map = TYPE_CONV_MAP;\n                if (is_out)\n                    map = TYPE_CONV_INMAP;\n                if (args_conv == ARGS_CONV_UNMAP)\n                    map = TYPE_CONV_UNMAP;\n                if (args_conv != ARGS_CONV_UNMAP || !is_out)\n                {\n                    if (is_1632)\n                    {\n                        write_type_conv1632(h, map_type, prefix_src, arg->name, prefix_dst, arg->name, map);\n                    }\n                    else\n                    {\n                        write_type_conv3216(h, map_type, prefix_src, arg->name, prefix_dst, arg->name, map);\n                    }\n                }\n            }\n        }\n        else if (args_conv == ARGS_CONV_DECL)\n        {\n            if (is_out || (is_in && is_array))\n            {\n                assert(typ2);\n                if (is_array && !ivar_defined)\n                {\n                    fprintf(h, \"    int i__;\\n\");\n                    if (is_1632 || (is_in && is_array))\n                        fprintf(h, \"    void *dst__;\\n\");\n                    ivar_defined = 1;\n                }\n                /* indent */\n                fprintf(h, \"    \");\n                if (is_1632)\n                    write_type_decl_left(h, typ2);\n                else\n                    write_type_decl_left3216(h, typ2);\n                /* [out] interface conversion */\n                if (is_array && !is_byte_out)\n                {\n                    fprintf(h, \" *args%d_%s;\\n\", is_1632 ? 32 : 16, arg->name);\n                }\n                else if (is_byte_out)\n                {\n                    assert(is_array);\n                    fprintf(h, \" *args%d_%s = \", is_1632 ? 32 : 16, arg->name);\n                    if (is_1632)\n                    {\n                        fprintf(h, \"MapSL(args16_%s);\\n\", arg->name);\n                    }\n                    else\n                    {\n                        fprintf(h, \"%s;\\n\", arg->name);\n                    }\n                }\n                else\n                {\n                    fprintf(h, \" args%d_%s = {0};\\n\", is_1632 ? 32 : 16, arg->name);\n                }\n            }\n            else\n            {\n                fprintf(h, \"    \");\n                if (is_1632)\n                    write_type_decl_left(h, arg->type);\n                else\n                    write_type_decl_left3216(h, arg->type);\n                fprintf(h, \" args%d_%s;\\n\", is_1632 ? 32 : 16, arg->name);\n            }\n        }\n        else if (args_conv == ARGS_CONV_MAP_OUTARRAY)\n        {\n            if (is_out || (is_in && is_array))\n            {\n                assert(typ2);\n                /* [out] interface conversion */\n                if (is_array && !is_byte_out)\n                {\n                    struct args_conv_callback_udata udata = { args };\n                    int count = 0;\n                    expr_t *e;\n                    expr_list_t *size_is = get_attrp(arg->attrs, ATTR_SIZEIS);\n                    assert(size_is);\n                    fprintf(h, \"    args%d_%s = \", is_1632 ? 32 : 16, arg->name);\n                    fprintf(h, \" IFACE_ALLOC_ARRAY(\");\n                    if (is_1632)\n                        write_type_decl_left(h, typ2);\n                    else\n                        write_type_decl_left3216(h, typ2);\n                    fprintf(h, \" ,\");\n                    LIST_FOR_EACH_ENTRY(e, size_is, expr_t, entry)\n                    {\n                        write_expr16(h, e, 1, 1, NULL, NULL, is_1632 ? \"args32_\" : \"\", &udata, is_1632 ? args_conv_callback : NULL);\n                        assert(count++ == 0);\n                    }\n                    fprintf(h, \" );\\n\");\n                    if (is_in && is_array)\n                    {\n                        char buf2[256];\n                        struct args_conv_callback_udata udata = { args };\n                        int count = 0;\n                        expr_t *e;\n                        expr_list_t *len_is = get_attrp(arg->attrs, ATTR_LENGTHIS);\n                        if (!len_is)\n                            len_is = get_attrp(arg->attrs, ATTR_SIZEIS);\n                        assert(len_is);\n                        if (is_1632)\n                        {\n                            fprintf(h, \"    dst__ = MapSL(args16_%s);\\n\", arg->name);\n                        }\n                        fprintf(h, \"    for (i__ = 0; i__ < (\");\n                        LIST_FOR_EACH_ENTRY(e, len_is, expr_t, entry)\n                        {\n                            write_expr16(h, e, 1, 1, NULL, NULL, is_1632 ? \"args32_\" : \"args16_\", &udata, args_conv_callback);\n                            assert(count++ == 0);\n                        }\n                        fprintf(h, \") ; i__++)\\n\");\n                        fprintf(h, \"    {\\n\");\n                        fprintf(h, \"    \");\n                        if (!is_1632)\n                        {\n                            snprintf(buf2, 256, \"args16_%s[i__]\", arg->name); /* FIXME */\n                            write_type_conv3216(h, typ2, arg->name, \"[i__]\", buf2, \"\", FALSE);\n                        }\n                        else\n                        {\n                            snprintf(buf2, 256, \"args32_%s[i__]\", arg->name); /* FIXME */\n                            write_type_conv1632(h, typ2, \"dst__\", \"\", buf2, \"\", TYPE_CONV_MAP_ARRAY);\n                        }\n                        fprintf(h, \"    }\\n\");\n                        /* FIXME: UNMAP */\n                    }\n                }\n            }\n        }\n        else if (args_conv == ARGS_CONV_AFTER_CONV)\n        {\n            /* [out] conversion */\n            if (iid && is_out)\n            {\n                /* indent */\n                assert(iid->type == EXPR_IDENTIFIER);\n                const char *iid_arg_name = iid->u.sval;\n                const var_t *iid_arg = find_args(args, iid_arg_name);\n                assert(iid_arg);\n                fprintf(h, \"    \");\n                /* args32_riid? args16_riid? */\n                if (is_1632)\n                    fprintf(h, \"*(SEGPTR*)MapSL(args16_%s) = iface32_16(args32_%s, args32_%s);\\n\", arg->name, iid_arg_name, arg->name);\n                else\n                    fprintf(h, \"*%s = iface16_32(%s, args16_%s);\\n\", arg->name, iid_arg_name, arg->name);\n            }\n            else if (typ2 && is_out)\n            {\n                char buf[256];\n                char buf2[256];\n                if (is_array && !is_byte_out)\n                {\n                    struct args_conv_callback_udata udata = { args };\n                    int count = 0;\n                    expr_t *e;\n                    expr_list_t *len_is = get_attrp(arg->attrs, ATTR_LENGTHIS);\n                    if (!len_is)\n                        len_is = get_attrp(arg->attrs, ATTR_SIZEIS);\n                    assert(len_is);\n                    if (is_1632)\n                    {\n                        fprintf(h, \"    dst__ = MapSL(args16_%s);\\n\", arg->name);\n                    }\n                    fprintf(h, \"    for (i__ = 0; i__ < (\");\n                    LIST_FOR_EACH_ENTRY(e, len_is, expr_t, entry)\n                    {\n                        write_expr16(h, e, 1, 1, NULL, NULL, is_1632 ? \"args32_\" : \"args16_\", &udata, args_conv_callback);\n                        assert(count++ == 0);\n                    }\n                    fprintf(h, \") ; i__++)\\n\");\n                    fprintf(h, \"    {\\n\");\n                    fprintf(h, \"    \");\n                    if (is_1632)\n                    {\n                        snprintf(buf2, 256, \"args32_%s[i__]\", arg->name); /* FIXME */\n                        write_type_conv3216(h, typ2, buf2, \"\", \"dst__\", \"\", TYPE_CONV_MAP_ARRAY);\n                    }\n                    else\n                    {\n                        snprintf(buf2, 256, \"args16_%s[i__]\", arg->name); /* FIXME */\n                        write_type_conv1632(h, typ2, buf2, \"\", arg->name, \"[i__]\", FALSE);\n                    }\n                    fprintf(h, \"    }\\n\");\n                    if (is_1632)\n                        fprintf(h, \"    IFACE_FREE_ARRAY(args32_%s);\\n\", arg->name);\n                    else\n                        fprintf(h, \"    IFACE_FREE_ARRAY(args16_%s);\\n\", arg->name);\n                }\n                else if (is_byte_out)\n                {\n\n                }\n                else\n                {\n                    if (is_1632)\n                    {\n                        fprintf(h, \"    if (args16_%s)\\n    {\\n    \", arg->name);\n                        write_type_conv3216(h, typ2, \"args32_\", arg->name, \"args16_\", arg->name, is_in ? TYPE_CONV_OUTMAP_MAPSL : TYPE_CONV_MAP_MAPSL);\n                        fprintf(h, \"    }\\n\", arg->name);\n                    }\n                    else\n                    {\n                        fprintf(h, \"    if (%s)\\n    {\\n    \", arg->name);\n                        write_type_conv1632(h, typ2, \"args16_\", arg->name, \"*\", arg->name, is_in ? TYPE_CONV_OUTMAP : TYPE_CONV_MAP);\n                        fprintf(h, \"    }\\n\", arg->name);\n                    }\n                }\n            }\n        }\n        else if (args_conv == ARGS_CONV_TRACE || args_conv == ARGS_CONV_TRACE_ARGS)\n        {\n            int size, is_ptr;\n            int is_iid = typ2 && type_get_name(typ2, NAME_DEFAULT) && !strcmp(type_get_name(typ2, NAME_DEFAULT), \"IID\");\n            get_type_size16(arg->type, &size, &is_ptr);\n            if (args_conv == ARGS_CONV_TRACE_ARGS)\n            {\n                if (!is_out && is_iid)\n                {\n                    fprintf(h, \", debugstr_guid(%s%s)\", is_1632 ? \"args32_\" : \"\", arg->name);\n                }\n                else\n                {\n                    fprintf(h, \", %s%s\", is_1632 ? \"args16_\" : \"\", arg->name);\n\n                }\n            }\n            else\n            {\n                if (!is_out && is_iid)\n                {\n                    fprintf(h, \",%s\", \"%s\");\n                }\n                else if (is_1632 && (is_ptr || is_out))\n                {\n                    fprintf(h, \",%s\", \"%08x\");\n                }\n                else\n                {\n                    if (is_ptr || is_out)\n                    {\n                        fprintf(h, \",%s\", \"%p\");\n                    }\n                    else if (size == 8)\n                    {\n                        fprintf(h, \",%s\", \"%016llx\");\n                    }\n                    else\n                    {\n                        fprintf(h, \",%s\", \"%08x\");\n                    }\n                }\n            }\n        }\n        else\n        {\n            assert(0);\n        }\n        count++;\n    }\n}\n\nstatic int indentation;\nstatic void write_type_left3216(FILE *h, type_t *t, enum name_type name_type, int declonly, const char *typ_prefix)\n{\n  const char *name;\n\n  if (!h) return;\n\n  name = type_get_name(t, name_type);\n\n  if (is_attr(t->attrs, ATTR_CONST) &&\n      (type_is_alias(t) || !is_ptr(t)))\n    fprintf(h, \"const \");\n\n  if (type_is_alias(t)) fprintf(h, \"%s%s\", typ_prefix, t->name);\n  else {\n    switch (type_get_type_detect_alias(t)) {\n      case TYPE_ENUM:\n        if (!declonly && t->defined && !t->written) {\n          assert(0);\n        }\n        else fprintf(h, \"enum %s%s\", t->name ? typ_prefix : \"\", name ? name : \"\");\n        break;\n      case TYPE_STRUCT:\n      case TYPE_ENCAPSULATED_UNION:\n        if (!declonly && t->defined && !t->written) {\n          assert(0);\n        }\n        else fprintf(h, \"struct %s%s\", t->name ? typ_prefix : \"\", name ? name : \"\");\n        break;\n      case TYPE_UNION:\n        if (!declonly && t->defined && !t->written) {\n          assert(0);\n        }\n        else fprintf(h, \"union %s%s\", t->name ? typ_prefix : \"\", t->name ? t->name : \"\");\n        break;\n      case TYPE_POINTER:\n        fprintf(h, \"SEGPTR\");\n\n        //write_type_left3216(h, type_pointer_get_ref(t), name_type, declonly, typ_prefix);\n        ////fprintf(h, \"%s*\", needs_space_after(type_pointer_get_ref(t)) ? \" \" : \"\");\n        //if (is_attr(t->attrs, ATTR_CONST)) fprintf(h, \"const \");\n        break;\n      case TYPE_ARRAY:\n        fprintf(h, \"SEGPTR\");\n        //if (t->name && type_array_is_decl_as_ptr(t))\n        //  fprintf(h, \"%s%s\", typ_prefix, t->name);\n        //else\n        //{\n        //  write_type_left3216(h, type_array_get_element(t), name_type, declonly, typ_prefix);\n        //  if (type_array_is_decl_as_ptr(t))\n        //    fprintf(h, \"%s\", needs_space_after(type_array_get_element(t)) ? \" \" : \"\");\n        //}\n        break;\n      case TYPE_BASIC:\n        if (type_basic_get_type(t) != TYPE_BASIC_INT32 &&\n            type_basic_get_type(t) != TYPE_BASIC_INT64 &&\n            type_basic_get_type(t) != TYPE_BASIC_HYPER)\n        {\n          if (type_basic_get_sign(t) < 0) fprintf(h, \"signed \");\n          else if (type_basic_get_sign(t) > 0) fprintf(h, \"unsigned \");\n        }\n        switch (type_basic_get_type(t))\n        {\n        case TYPE_BASIC_INT8: fprintf(h, \"small\"); break;\n        case TYPE_BASIC_INT16: fprintf(h, \"short\"); break;\n        case TYPE_BASIC_INT: fprintf(h, \"int\"); break;\n        case TYPE_BASIC_INT3264: fprintf(h, \"__int3264\"); break;\n        case TYPE_BASIC_BYTE: fprintf(h, \"byte\"); break;\n        case TYPE_BASIC_CHAR: fprintf(h, \"char\"); break;\n        case TYPE_BASIC_WCHAR: fprintf(h, \"wchar_t\"); break;\n        case TYPE_BASIC_FLOAT: fprintf(h, \"float\"); break;\n        case TYPE_BASIC_DOUBLE: fprintf(h, \"double\"); break;\n        case TYPE_BASIC_ERROR_STATUS_T: fprintf(h, \"error_status_t\"); break;\n        case TYPE_BASIC_HANDLE: fprintf(h, \"handle_t\"); break;\n        case TYPE_BASIC_INT32:\n          if (type_basic_get_sign(t) > 0)\n            fprintf(h, \"ULONG\");\n          else\n            fprintf(h, \"LONG\");\n          break;\n        case TYPE_BASIC_INT64:\n          if (type_basic_get_sign(t) > 0)\n            fprintf(h, \"UINT64\");\n          else\n            fprintf(h, \"INT64\");\n          break;\n        case TYPE_BASIC_HYPER:\n          if (type_basic_get_sign(t) > 0)\n            fprintf(h, \"MIDL_uhyper\");\n          else\n            fprintf(h, \"hyper\");\n          break;\n        }\n        break;\n      case TYPE_INTERFACE:\n      case TYPE_MODULE:\n      case TYPE_COCLASS:\n        fprintf(h, \"%s%s\", typ_prefix, t->name);\n        break;\n      case TYPE_VOID:\n        fprintf(h, \"void\");\n        break;\n      case TYPE_BITFIELD:\n        write_type_left3216(h, type_bitfield_get_field(t), name_type, declonly, typ_prefix);\n        break;\n      case TYPE_ALIAS:\n      case TYPE_FUNCTION:\n        /* handled elsewhere */\n        assert(0);\n        break;\n    }\n  }\n}\n\nstatic int is_pascal(const char *cconv)\n{\n    if (!cconv)\n        return FALSE;\n    return !strcmp(cconv, \"__stdcall\");\n}\n\nstatic void write_type_decl_left3216(FILE *f, type_t *t)\n{\n  write_type_left3216(f, t, NAME_DEFAULT, TRUE, \"TYP16_\");\n}\n\nstatic void write_32_16_func(FILE *header, const statement_t *stmt, const type_t *iface, const char *name)\n{\n    const var_t *func = stmt->u.var;\n    if (!is_callas(func->attrs)) {\n        const char *callconv = get_attrp(func->type->attrs, ATTR_CALLCONV);\n        type_t *ret_type = type_function_get_rettype(func->type);\n        fprintf(header, \"#ifndef IFS3216_OVERWRITE_%s_%s\\n\", name, get_name(func));\n        if (!callconv) callconv = \"STDMETHODCALLTYPE\";\n        write_type_decl_left(header, type_function_get_rettype(func->type));\n        fprintf(header, \" %s %s_32_16_%s(%s *This\", callconv, name, get_name(func), name);\n        if (type_get_function_args(func->type)) {\n            fprintf(header, \", \");\n            write_args(header, type_get_function_args(func->type), name, 0, 0);\n        }\n        fprintf(header, \")\\n\");\n        fprintf(header, \"{\\n\");\n        fprintf(header, \"    SEGPTR iface16 = get_interface16(This);\\n\");\n        if (type_get_type(ret_type) != TYPE_VOID)\n        {\n            fprintf(header, \"    \");\n            write_type_decl_left3216(header, type_function_get_rettype(func->type));\n            fprintf(header, \" result__ = {0};\\n\");\n            fprintf(header, \"    \");\n            write_type_decl_left(header, type_function_get_rettype(func->type));\n            fprintf(header, \" result32__ = {0};\\n\");\n        }\n        write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_DECL, FALSE);\n        write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_MAP, FALSE);\n        write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_MAP_OUTARRAY, FALSE);\n        fprintf(header, \"    TRACE(\\\"(\");\n        write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_TRACE, FALSE);\n        fprintf(header, \")\\\\n\\\"\");\n        write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_TRACE_ARGS, FALSE);\n        fprintf(header, \");\\n\");\n        fprintf(header, \"    \");\n        ret_type = type_function_get_rettype(func->type);\n        if (type_get_type(ret_type) != TYPE_VOID)\n        {\n            fprintf(header, \"result__ = (\");\n            write_type_decl_left3216(header, ret_type);\n            fprintf(header, \")\");\n        }\n        fprintf(header, \"%s16_%s(iface16\", name, get_name(func));\n        write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_CALL, FALSE);\n        fprintf(header, \");\\n\");\n        if (type_get_type(ret_type) != TYPE_VOID)\n        {\n            write_type_conv1632(header, ret_type, \"\", \"result__\", \"\", \"result32__\", TYPE_CONV_MAP);\n        }\n        write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_UNMAP, FALSE);\n        write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_AFTER_CONV, FALSE);\n        if (type_get_type(ret_type) != TYPE_VOID)\n        {\n            fprintf(header, \"    return result32__;\\n\");\n        }\n        fprintf(header, \"}\\n\");\n        fprintf(header, \"#endif\\n\");\n    }\n}\nstatic void write_16_32_func(FILE *header, const statement_t *stmt, const type_t *iface, const char *name)\n{\n    const var_t *func = stmt->u.var;\n    const char *callconv = get_attrp(func->type->attrs, ATTR_CALLCONV);\n    type_t *ret_type = type_function_get_rettype(func->type);\n    fprintf(header, \"#ifndef IFS1632_OVERWRITE_%s_%s\\n\", name, get_name(func));\n    if (!callconv) callconv = \"STDMETHODCALLTYPE\";\n    write_type_decl_left(header, type_function_get_rettype(func->type));\n    if (!is_pascal(callconv))\n    {\n        callconv = \"CDECL\";\n    }\n    fprintf(header, \" %s %s_16_32_%s(SEGPTR This\", callconv, name, get_name(func));\n    if (type_get_function_args(func->type)) {\n        fprintf(header, \", \");\n        write_args1632(header, type_get_function_args(func->type), name, 0);\n    }\n    fprintf(header, \")\\n\");\n    fprintf(header, \"{\\n\");\n    fprintf(header, \"    %s *iface32 = (%s*)get_interface32(This);\\n\", name, name);\n    if (type_get_type(ret_type) != TYPE_VOID)\n    {\n        fprintf(header, \"    \");\n        write_type_decl_left(header, type_function_get_rettype(func->type));\n        fprintf(header, \" result__ = {0};\\n\");\n        fprintf(header, \"    \");\n        write_type_decl_left3216(header, type_function_get_rettype(func->type));\n        fprintf(header, \" result16__ = {0};\\n\");\n    }\n    write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_DECL, TRUE);\n    write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_MAP, TRUE);\n    write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_MAP_OUTARRAY, TRUE);\n    fprintf(header, \"    TRACE(\\\"(\");\n    write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_TRACE, TRUE);\n    fprintf(header, \")\\\\n\\\"\");\n    write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_TRACE_ARGS, TRUE);\n    fprintf(header, \");\\n\");\n    fprintf(header, \"    \");\n    if (type_get_type(ret_type) != TYPE_VOID)\n    {\n        fprintf(header, \"result__ = (\");\n        write_type_decl_left(header, type_function_get_rettype(func->type));\n        fprintf(header, \")\");\n    }\n    fprintf(header, \"iface32->lpVtbl->%s(iface32\", get_name(func));\n    write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_CALL, TRUE);\n    fprintf(header, \");\\n\");\n    if (type_get_type(ret_type) != TYPE_VOID)\n    {\n        write_type_conv3216(header, ret_type, \"\", \"result__\", \"\", \"result16__\", TYPE_CONV_MAP);\n    }\n    write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_UNMAP, TRUE);\n    write_args_conv(header, type_get_function_args(func->type), name, ARGS_CONV_AFTER_CONV, TRUE);\n    if (type_get_type(ret_type) != TYPE_VOID)\n    {\n        fprintf(header, \"    return result16__;\\n\");\n    }\n    fprintf(header, \"}\\n\");\n    fprintf(header, \"#endif\\n\");\n}\nstatic void do_write_c_method_def(FILE *header, const type_t *iface, const char *name)\n{\n    const statement_t *stmt;\n    int first_iface = 1;\n\n    if (type_iface_get_inherit(iface))\n        do_write_c_method_def(header, type_iface_get_inherit(iface), name);\n\n    STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface))\n    {\n        const var_t *func = stmt->u.var;\n        if (first_iface) {\n            fprintf(header, \"/*** %s methods ***/\\n\", iface->name);\n            first_iface = 0;\n        }\n        if (!is_callas(func->attrs)) {\n            write_16_32_func(header, stmt, iface, name);\n            write_32_16_func(header, stmt, iface, name);\n        }\n    }\n}\n\nstatic int filter_iface(const char *name)\n{\n    return 1;\n}\nstatic void write_thunk_1632_3216(FILE *file, type_t *iface)\n{\n    if (filter_iface(iface->c_name))\n    {\n        /* fprintf(file, \"typedef interface %s %s;\\n\", iface->c_name, iface->c_name); */\n        do_write_c_method_def(file, iface, iface->c_name);\n    }\n}\nstatic void write_guid(FILE *f, const UUID *uuid)\n{\n    if (!uuid) return;\n    fprintf(f, \"{0x%08x, 0x%04x, 0x%04x, {0x%02x,0x%02x, 0x%02x,\"\n        \"0x%02x,0x%02x,0x%02x,0x%02x,0x%02x}}\",\n        uuid->Data1, uuid->Data2, uuid->Data3, uuid->Data4[0],\n        uuid->Data4[1], uuid->Data4[2], uuid->Data4[3], uuid->Data4[4], uuid->Data4[5],\n        uuid->Data4[6], uuid->Data4[7]);\n}\n\nstatic void do_write_vtable32(FILE *header, const type_t *iface, const char *name)\n{\n    const statement_t *stmt;\n    int first_iface = 1;\n\n    if (type_iface_get_inherit(iface))\n        do_write_vtable32(header, type_iface_get_inherit(iface), name);\n\n    STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface))\n    {\n        const var_t *func = stmt->u.var;\n        if (first_iface) {\n            fprintf(header, \"    /*** %s methods ***/\\n\", iface->name);\n            first_iface = 0;\n        }\n        if (!is_callas(func->attrs)) {\n            fprintf(header, \"    %s_32_16_%s,\\n\", name, get_name(func));\n        }\n    }\n}\n\nstatic void write_args16_str(FILE *header, const var_list_t *args)\n{\n    const var_t *arg;\n\n    fprintf(header, \"s\");\n    if (args) LIST_FOR_EACH_ENTRY(arg, args, const var_t, entry) {\n        int size, is_ptr;\n        get_type_size16(arg->type, &size, &is_ptr);\n        if (size == 2)\n        {\n            fprintf(header, \"w\");\n        }\n        if (size == 4)\n        {\n            if (is_ptr)\n                fprintf(header, \"s\");\n            else\n                fprintf(header, \"l\");\n        }\n        if (size == 8)\n        {\n            fprintf(header, \"ll\");\n        }\n    }\n    return NULL;\n}\nstatic void do_write_vtable16(FILE *header, const type_t *iface, const char *name)\n{\n    const statement_t *stmt;\n    int first_iface = 1;\n\n    if (type_iface_get_inherit(iface))\n        do_write_vtable16(header, type_iface_get_inherit(iface), name);\n\n    STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface))\n    {\n        const var_t *func = stmt->u.var;\n        if (first_iface) {\n            fprintf(header, \"    /*** %s methods ***/\\n\", iface->name);\n            first_iface = 0;\n        }\n        if (!is_callas(func->attrs)) {\n            const char *callconv = get_attrp(func->type->attrs, ATTR_CALLCONV);\n            fprintf(header, \"    {\");\n            fprintf(header, \"%s_16_32_%s,\\\"%s::%s\\\",\\\"\", name, get_name(func), name, get_name(func));\n            write_args16_str(header, type_get_function_args(func->type));\n            fprintf(header, \"\\\"\");\n            if (is_pascal(callconv))\n                fprintf(header, \",1\");\n            fprintf(header, \"},\\n\");\n        }\n    }\n}\n\nstatic type_t **sort_interfaces(const statement_list_t *stmts, int *count);\nstatic void write_vtable(FILE *file, const statement_list_t *stmts)\n{\n    const statement_t *stmt;\n    if (stmts) LIST_FOR_EACH_ENTRY(stmt, stmts, const statement_t, entry)\n    {\n        switch (stmt->type)\n        {\n        case STMT_TYPE:\n            if (type_get_type(stmt->u.type) == TYPE_INTERFACE)\n            {\n                if (is_object(stmt->u.type) || is_attr(stmt->u.type->attrs, ATTR_DISPINTERFACE))\n                {\n                    if (is_object(stmt->u.type) || is_attr(stmt->u.type->attrs, ATTR_DISPINTERFACE))\n                    {\n                        const type_t *type = stmt->u.type;\n                        if (!filter_iface(type->c_name))\n                            continue;\n                        fprintf(file, \"%sVtbl %s_vtbl =\\n{\\n\", type->c_name, type->c_name);\n                        do_write_vtable32(file, type, type->c_name);\n                        fprintf(file, \"};\\n\");\n                        fprintf(file, \"%s16Vtbl %s_vtbl16;\\n\", type->c_name, type->c_name);\n                        fprintf(file, \"vtbl_entry %s_vtbl16_entries[] =\\n{\\n\", type->c_name);\n                        do_write_vtable16(file, type, type->c_name);\n                        fprintf(file, \"    {0}\\n};\\n\");\n                    }\n                }\n            }\n            break;\n        }\n    }\n}\n\nstatic int cmp_iid( const void *ptr1, const void *ptr2 )\n{\n    const type_t * const *iface1 = ptr1;\n    const type_t * const *iface2 = ptr2;\n    const UUID *uuid1 = get_attrp( (*iface1)->attrs, ATTR_UUID );\n    const UUID *uuid2 = get_attrp( (*iface2)->attrs, ATTR_UUID );\n    return memcmp( uuid1, uuid2, sizeof(UUID) );\n}\n\nstatic void build_iface_list( const statement_list_t *stmts, type_t **ifaces[], int *count )\n{\n    const statement_t *stmt;\n\n    if (!stmts) return;\n    LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry )\n    {\n        if (stmt->type == STMT_TYPE && type_get_type(stmt->u.type) == TYPE_INTERFACE)\n        {\n            type_t *iface = stmt->u.type;\n            if (!get_attrp(iface->attrs, ATTR_UUID))\n                continue;\n            *ifaces = xrealloc( *ifaces, (*count + 1) * sizeof(**ifaces) );\n            (*ifaces)[(*count)++] = iface;\n        }\n    }\n}\n\nstatic type_t **sort_interfaces( const statement_list_t *stmts, int *count )\n{\n    type_t **ifaces = NULL;\n\n    *count = 0;\n    build_iface_list( stmts, &ifaces, count );\n    qsort( ifaces, *count, sizeof(*ifaces), cmp_iid );\n    return ifaces;\n}\n\nstatic void write_vtable2(FILE *file, const statement_list_t *stmts)\n{\n    const statement_t *stmt;\n    int count;\n    type_t **types;\n    types = sort_interfaces(stmts, &count);\n    fprintf(file, \"interface_entry interfaces[] =\\n{\\n\");\n    for (int i = 0; i < count; i++)\n    {\n        if (type_get_type(types[i]) == TYPE_INTERFACE)\n        {\n            if (is_object(types[i]) || is_attr(types[i]->attrs, ATTR_DISPINTERFACE))\n            {\n                if (is_object(types[i]) || is_attr(types[i]->attrs, ATTR_DISPINTERFACE))\n                {\n                    const type_t *type = types[i];\n                    if (!filter_iface(type->c_name))\n                        continue;\n                    const UUID *uuid = get_attrp(type->attrs, ATTR_UUID);\n                    fprintf(file, \"    {\\n        \");\n                    write_guid(file, uuid);\n                    fprintf(file, \",\\n        &%s_vtbl,\\n\", type->c_name);\n                    fprintf(file, \"        %s_vtbl16_entries,\\n\", type->c_name);\n                    fprintf(file, \"        &%s_vtbl16\\n\", type->c_name);\n                    fprintf(file, \"    },\\n\");\n                }\n            }\n        }\n    }\n    fprintf(file, \"};\\n\");\n    fprintf(file, \"size_t interfaces_count = %d;\\n\", count);\n}\nstatic void write_thunks_1632_3216(FILE *file, const statement_list_t *stmts)\n{\n    const statement_t *stmt;\n    fprintf(file, \"#include \\\"ifs_thunk.h\\\"\\n\");\n    if (stmts) LIST_FOR_EACH_ENTRY(stmt, stmts, const statement_t, entry)\n    {\n        switch (stmt->type)\n        {\n        case STMT_TYPE:\n            if (type_get_type(stmt->u.type) == TYPE_INTERFACE)\n            {\n                if (is_object(stmt->u.type) || is_attr(stmt->u.type->attrs, ATTR_DISPINTERFACE))\n                    write_thunk_1632_3216(file, stmt->u.type);\n            }\n            break;\n        }\n    }\n}\nstatic void do_write_header_def(FILE *header, const type_t *iface, const char *name)\n{\n    const statement_t *stmt;\n    int first_iface = 1;\n\n    if (type_iface_get_inherit(iface))\n        do_write_header_def(header, type_iface_get_inherit(iface), name);\n\n    STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface))\n    {\n        const var_t *func = stmt->u.var;\n        if (first_iface) {\n            fprintf(header, \"/*** %s methods ***/\\n\", iface->name);\n            first_iface = 0;\n        }\n        if (!is_callas(func->attrs)) {\n            fprintf(header, \"    SEGPTR %s;\\n\", get_name(func));\n        }\n    }\n}\n\nstatic int is_inherited_method(const type_t *iface, const var_t *func)\n{\n  while ((iface = type_iface_get_inherit(iface)))\n  {\n    const statement_t *stmt;\n    STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface))\n    {\n      const var_t *funccmp = stmt->u.var;\n\n      if (!is_callas(func->attrs))\n      {\n         char inherit_name[256];\n         /* compare full name including property prefix */\n         strcpy(inherit_name, get_name(funccmp));\n         if (!strcmp(inherit_name, get_name(func))) return 1;\n      }\n    }\n  }\n\n  return 0;\n}\nstatic int is_override_method(const type_t *iface, const type_t *child, const var_t *func)\n{\n  if (iface == child)\n    return 0;\n\n  do\n  {\n    const statement_t *stmt;\n    STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(child))\n    {\n      const var_t *funccmp = stmt->u.var;\n\n      if (!is_callas(func->attrs))\n      {\n         char inherit_name[256];\n         /* compare full name including property prefix */\n         strcpy(inherit_name, get_name(funccmp));\n         if (!strcmp(inherit_name, get_name(func))) return 1;\n      }\n    }\n  }\n  while ((child = type_iface_get_inherit(child)) && child != iface);\n\n  return 0;\n}\n\nstatic int is_aggregate_return(const var_t *func)\n{\n  enum type_type type = type_get_type(type_function_get_rettype(func->type));\n  return type == TYPE_STRUCT || type == TYPE_UNION ||\n         type == TYPE_COCLASS || type == TYPE_INTERFACE;\n}\n\nstatic char *get_vtbl_entry_name(const type_t *iface, const var_t *func)\n{\n  static char buff[255];\n  if (is_inherited_method(iface, func))\n    sprintf(buff, \"%s_%s\", iface->name, get_name(func));\n  else\n    sprintf(buff, \"%s\", get_name(func));\n  return buff;\n}\n\nstatic void write_forward16(FILE *header, type_t *iface)\n{\n  fprintf(header, \"#ifndef __%s16_FWD_DEFINED__\\n\", iface->c_name);\n  fprintf(header, \"#define __%s16_FWD_DEFINED__\\n\", iface->c_name);\n  fprintf(header, \"typedef interface %s16 %s16;\\n\", iface->c_name, iface->c_name);\n  fprintf(header, \"#endif\\n\\n\" );\n}\nstatic void write_forward_decls16(FILE *header, const statement_list_t *stmts)\n{\n  const statement_t *stmt;\n  if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry )\n  {\n    switch (stmt->type)\n    {\n      case STMT_TYPE:\n        if (type_get_type(stmt->u.type) == TYPE_INTERFACE)\n        {\n          if (is_object(stmt->u.type) || is_attr(stmt->u.type->attrs, ATTR_DISPINTERFACE))\n            write_forward16(header, stmt->u.type);\n        }\n        else if (type_get_type(stmt->u.type) == TYPE_COCLASS)\n          /*write_coclass_forward(header, stmt->u.type);*/;\n        break;\n      case STMT_TYPEREF:\n      case STMT_IMPORTLIB:\n        /* not included in header */\n        break;\n      case STMT_IMPORT:\n      case STMT_TYPEDEF:\n      case STMT_MODULE:\n      case STMT_CPPQUOTE:\n      case STMT_PRAGMA:\n      case STMT_DECLARATION:\n        /* not processed here */\n        break;\n      case STMT_LIBRARY:\n        /*write_forward_decls(header, stmt->u.lib->stmts);*/\n        break;\n    }\n  }\n}\n\nstatic void write_type_def_or_decl(FILE *f, type_t *t, int field, const char *name)\n{\n  write_type_v(f, t, field, FALSE, name);\n}\nstatic void write_fields16(FILE *h, var_list_t *fields)\n{\n    unsigned nameless_struct_cnt = 0, nameless_struct_i = 0, nameless_union_cnt = 0, nameless_union_i = 0;\n    const char *name;\n    char buf[32];\n    var_t *v;\n\n    if (!fields) return;\n\n    LIST_FOR_EACH_ENTRY( v, fields, var_t, entry ) {\n        if (!v || !v->type) continue;\n\n        switch(type_get_type_detect_alias(v->type)) {\n        case TYPE_STRUCT:\n        case TYPE_ENCAPSULATED_UNION:\n            nameless_struct_cnt++;\n            break;\n        case TYPE_UNION:\n            nameless_union_cnt++;\n            break;\n        default:\n            ;\n        }\n    }\n\n    LIST_FOR_EACH_ENTRY( v, fields, var_t, entry ) {\n        if (!v || !v->type) continue;\n\n        /* indent(h, 0); */\n        name = v->name;\n\n        switch(type_get_type_detect_alias(v->type)) {\n        case TYPE_STRUCT:\n        case TYPE_ENCAPSULATED_UNION:\n            if(!v->name) {\n                fprintf(h, \"__C89_NAMELESS \");\n                if(nameless_struct_cnt == 1) {\n                    name = \"__C89_NAMELESSSTRUCTNAME\";\n                }else if(nameless_struct_i < 5 /* # of supporting macros */) {\n                    sprintf(buf, \"__C89_NAMELESSSTRUCTNAME%d\", ++nameless_struct_i);\n                    name = buf;\n                }\n            }\n            break;\n        case TYPE_UNION:\n            if(!v->name) {\n                fprintf(h, \"__C89_NAMELESS \");\n                if(nameless_union_cnt == 1) {\n                    name = \"__C89_NAMELESSUNIONNAME\";\n                }else if(nameless_union_i < 8 /* # of supporting macros */ ) {\n                    sprintf(buf, \"__C89_NAMELESSUNIONNAME%d\", ++nameless_union_i);\n                    name = buf;\n                }\n            }\n            break;\n        default:\n            ;\n        }\n        write_type_def_or_decl(h, v->type, TRUE, name);\n        fprintf(h, \";\\n\");\n    }\n}\n\nstatic void write_enums16(FILE *h, var_list_t *enums, const char *enum_name)\n{\n  var_t *v;\n  if (!enums) return;\n  LIST_FOR_EACH_ENTRY( v, enums, var_t, entry )\n  {\n    if (v->name) {\n      if(!enum_name)\n          fprintf(h, \"%s16\", get_name(v));\n      else\n          fprintf(h, \"%s16_%s16\", enum_name, get_name(v));\n      if (v->eval) {\n        fprintf(h, \" = \");\n        write_expr(h, v->eval, 0, 1, NULL, NULL, \"\");\n      }\n    }\n    if (list_next( enums, &v->entry )) fprintf(h, \",\\n\");\n  }\n  fprintf(h, \"\\n\");\n}\nstatic void write_type_left16(FILE *h, type_t *t, enum name_type name_type, int declonly)\n{\n    const char *name;\n\n    if (!h) return;\n\n    name = type_get_name(t, name_type);\n    switch (type_get_type_detect_alias(t)) {\n    case TYPE_ENUM:\n        if (is_attr(t->attrs, ATTR_CONST) &&\n            (type_is_alias(t) || !is_ptr(t)))\n            fprintf(h, \"const \");\n        if (!declonly && t->defined && !t->written) {\n            if (name) fprintf(h, \"enum %s16 {\\n\", name);\n            else fprintf(h, \"enum {\\n\");\n            t->written = TRUE;\n            write_enums16(h, type_enum_get_values(t), is_global_namespace(t->namespace) ? NULL : t->name);\n            fprintf(h, \"}\");\n        }\n        else fprintf(h, \"enum %s16\", name ? name : \"\");\n        return;\n    case TYPE_POINTER:\n        if (is_attr(t->attrs, ATTR_CONST) &&\n            (type_is_alias(t) || !is_ptr(t)))\n            fprintf(h, \"const \");\n        write_type_left16(h, type_pointer_get_ref(t), name_type, declonly);\n        fprintf(h, \"%s*\", needs_space_after(type_pointer_get_ref(t)) ? \" \" : \"\");\n        if (is_attr(t->attrs, ATTR_CONST)) fprintf(h, \"const \");\n        return;\n    case TYPE_INTERFACE:\n    case TYPE_MODULE:\n    case TYPE_COCLASS:\n        if (is_attr(t->attrs, ATTR_CONST) &&\n            (type_is_alias(t) || !is_ptr(t)))\n            fprintf(h, \"const \");\n        fprintf(h, \"%s16\", t->name);\n        return;\n    case TYPE_STRUCT:\n        if (is_attr(t->attrs, ATTR_CONST) &&\n            (type_is_alias(t) || !is_ptr(t)))\n            fprintf(h, \"const \");\n        if (!declonly && t->defined && !t->written) {\n            if (name) fprintf(h, \"struct %s16 {\\n\", name);\n            else fprintf(h, \"struct {\\n\");\n            t->written = TRUE;\n            if (type_get_type(t) != TYPE_STRUCT)\n                write_fields16(h, type_encapsulated_union_get_fields(t));\n            else\n                write_fields16(h, type_struct_get_fields(t));\n            //indent(h, -1);\n            fprintf(h, \"}\");\n        }\n        else\n        {\n            if (name)\n                fprintf(h, \"struct %s16\", name);\n            else\n                fprintf(h, \"struct \");\n        }\n        return;\n\n    }\n    write_type_left(h, t, name_type, declonly);\n}\nstatic int is_object_interface = 0;\nstatic void write_type_v(FILE *h, type_t *t, int is_field, int declonly, const char *name)\n{\n  type_t *pt = NULL;\n  int ptr_level = 0;\n\n  if (!h) return;\n\n  if (t) {\n    for (pt = t; is_ptr(pt); pt = type_pointer_get_ref(pt), ptr_level++)\n      ;\n\n    if (type_get_type_detect_alias(pt) == TYPE_FUNCTION) {\n      int i;\n      const char *callconv = get_attrp(pt->attrs, ATTR_CALLCONV);\n      if (!callconv && is_object_interface) callconv = \"STDMETHODCALLTYPE\";\n      if (is_attr(pt->attrs, ATTR_INLINE)) fprintf(h, \"inline \");\n      write_type_left16(h, type_function_get_rettype(pt), NAME_DEFAULT, declonly);\n      fputc(' ', h);\n      if (ptr_level) fputc('(', h);\n      if (callconv) fprintf(h, \"%s \", callconv);\n      for (i = 0; i < ptr_level; i++)\n        fputc('*', h);\n    }\n    else\n      write_type_left16(h, t, NAME_DEFAULT, declonly);\n  }\n\n  if (name) fprintf(h, \"%s%s16\", !t || needs_space_after(t) ? \" \" : \"\", name );\n\n  if (t) {\n    if (type_get_type_detect_alias(pt) == TYPE_FUNCTION) {\n      const var_list_t *args = type_function_get_args(pt);\n\n      if (ptr_level) fputc(')', h);\n      fputc('(', h);\n      if (args)\n          write_args(h, args, NULL, 0, FALSE);\n      else\n          fprintf(h, \"void\");\n      fputc(')', h);\n    } else\n      write_type_right(h, t, is_field);\n  }\n}\nstatic void write_type_def_or_decl16(FILE *f, type_t *t, int field, const char *name)\n{\n  write_type_v(f, t, field, FALSE, name);\n}\nstatic void write_typedef16(FILE *header, type_t *type)\n{\n\n    if (type_get_type_detect_alias(type_alias_get_aliasee(type)) == TYPE_UNION || type_get_type_detect_alias(type_alias_get_aliasee(type)) == TYPE_ENCAPSULATED_UNION || type_get_type_detect_alias(type_alias_get_aliasee(type)) == TYPE_STRUCT || type_get_type_detect_alias(type_alias_get_aliasee(type)) == TYPE_ENUM)\n        return;\n    fprintf(header, \"typedef \");\n    write_type_def_or_decl16(header, type_alias_get_aliasee(type), FALSE, type->name);\n    fprintf(header, \";\\n\");\n}\nstatic void write_method_macro16(FILE *header, const type_t *iface, const type_t *child, const char *name)\n{\n    const statement_t *stmt;\n    int first_iface = 1;\n\n    if (type_iface_get_inherit(iface))\n        write_method_macro16(header, type_iface_get_inherit(iface), child, name);\n\n    STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface))\n    {\n        const var_t *func = stmt->u.var;\n\n        if (first_iface)\n        {\n            fprintf(header, \"/*** %s methods ***/\\n\", iface->name);\n            first_iface = 0;\n        }\n\n        if (is_override_method(iface, child, func))\n            continue;\n\n        if (!is_callas(func->attrs)) {\n            const var_t *arg;\n            int args_size = 2;\n            const char *callconv = get_attrp(func->type->attrs, ATTR_CALLCONV);\n            int reverse = is_pascal(callconv);\n\n            fprintf(header, \"static \");\n            write_type_decl_left(header, type_function_get_rettype(func->type));\n            fprintf(header, \" %s16_%s(SEGPTR This\", name, get_name(func));\n            if (type_get_function_args(func->type))\n            {\n                LIST_FOR_EACH_ENTRY(arg, type_get_function_args(func->type), const var_t, entry)\n                {\n                    int size, is_ptr;\n                    get_type_size16(arg->type, &size, &is_ptr);\n                    if (size == 4)\n                    {\n                        const char *n = type_get_name(arg->type, NAME_DEFAULT);\n                        /* hard-coded */\n                        if (n && !strcmp(n, \"SIZE\"))\n                        {\n                            fprintf(header, \",SIZE16 %s\", arg->name);\n                        }\n                        else if (n && !strcmp(n, \"POINT\"))\n                        {\n                            fprintf(header, \",POINT16 %s\", arg->name);\n                        }\n                        else\n                        {\n                            fprintf(header, \",DWORD %s\", arg->name);\n                        }\n                        args_size += 2;\n                    }\n                    else if (size == 8)\n                    {\n                        const char *n = type_get_name(arg->type, NAME_DEFAULT);\n                        /* hard-coded */\n                        if (n && !strcmp(n, \"POINTL\"))\n                        {\n                            fprintf(header, \",POINTL %s\", arg->name);\n                        }\n                        else if (n && !strcmp(n, \"CY\"))\n                        {\n                            fprintf(header, \",CY %s\", arg->name);\n                        }\n                        else\n                        {\n                            fprintf(header, \",ULARGE_INTEGER %s\", arg->name);\n                        }\n                        args_size += 4;\n                    }\n                    else\n                    {\n                        fprintf(header, \",WORD %s\", arg->name);\n                        args_size++;\n                    }\n                }\n            }\n            fprintf(header, \")\\n{\\n\");\n            fprintf(header, \"    WORD args[] = \");\n\n            if (is_aggregate_return(func))\n            {\n                fprintf(header, \"%s_%s_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support\\n\", name, get_name(func));\n                continue;\n            }\n            if (reverse)\n            {\n                fprintf(header, \"{\");\n            }\n            else\n            {\n                fprintf(header, \"{LOWORD(%s)\", \"This\");\n                fprintf(header, \", HIWORD(%s)\", \"This\");\n            }\n            if (type_get_function_args(func->type))\n            {\n#define LIST_FOR_EACH_ENTRY_REV2(reverse, elem, list, type, field) \\\n    for ((elem) = (reverse) ? LIST_ENTRY((list)->prev, type, field) : LIST_ENTRY((list)->next, type, field); \\\n         &(elem)->field != (list); \\\n         (elem) = (reverse) ? LIST_ENTRY((elem)->field.prev, type, field) : LIST_ENTRY((elem)->field.next, type, field))\n                LIST_FOR_EACH_ENTRY_REV2(reverse, arg, type_get_function_args(func->type), const var_t, entry)\n                {\n                    int size, is_ptr;\n                    get_type_size16(arg->type, &size, &is_ptr);\n                    if (!reverse)\n                    {\n                        fprintf(header, \", \");\n                    }\n                    if (size == 4)\n                    {\n                        const char *n = type_get_name(arg->type, NAME_DEFAULT);\n                        /* hard-coded */\n                        if (n && !strcmp(n, \"SIZE\"))\n                        {\n                            fprintf(header, \"%s.cx\", arg->name);\n                            fprintf(header, \", %s.cy\", arg->name);\n                        }\n                        else if (n && !strcmp(n, \"POINT\"))\n                        {\n                            fprintf(header, \"%s.x\", arg->name);\n                            fprintf(header, \", %s.y\", arg->name);\n                        }\n                        else\n                        {\n                            fprintf(header, \"LOWORD(%s)\", arg->name);\n                            fprintf(header, \", HIWORD(%s)\", arg->name);\n                        }\n                    }\n                    else if (size == 8)\n                    {\n                        const char *n = type_get_name(arg->type, NAME_DEFAULT);\n                        /* hard-coded */\n                        if (n && !strcmp(n, \"POINTL\"))\n                        {\n                            fprintf(header, \"LOWORD(%s.x)\", arg->name);\n                            fprintf(header, \", HIWORD(%s.x)\", arg->name);\n                            fprintf(header, \", LOWORD(%s.y)\", arg->name);\n                            fprintf(header, \", HIWORD(%s.y)\", arg->name);\n                        }\n                        else if (n && !strcmp(n, \"CY\"))\n                        {\n                            fprintf(header, \"\\n#if defined(NONAMELESSUNION) || defined(NONAMELESSSTRUCT)\\n\", arg->name);\n                            fprintf(header, \"LOWORD(%s.DUMMYSTRUCTNAME.Lo)\", arg->name);\n                            fprintf(header, \", HIWORD(%s.DUMMYSTRUCTNAME.Lo)\", arg->name);\n                            fprintf(header, \", LOWORD(%s.DUMMYSTRUCTNAME.Hi)\", arg->name);\n                            fprintf(header, \", HIWORD(%s.DUMMYSTRUCTNAME.Hi)\", arg->name);\n                            fprintf(header, \"\\n#else\\n\", arg->name);\n                            fprintf(header, \"LOWORD(%s.Lo)\", arg->name);\n                            fprintf(header, \", HIWORD(%s.Lo)\", arg->name);\n                            fprintf(header, \", LOWORD(%s.Hi)\", arg->name);\n                            fprintf(header, \", HIWORD(%s.Hi)\", arg->name);\n                            fprintf(header, \"\\n#endif\\n\", arg->name);\n                        }\n                        else\n                        {\n                            fprintf(header, \"LOWORD(%s.u.LowPart)\", arg->name);\n                            fprintf(header, \", HIWORD(%s.u.LowPart)\", arg->name);\n                            fprintf(header, \", LOWORD(%s.u.HighPart)\", arg->name);\n                            fprintf(header, \", HIWORD(%s.u.HighPart)\", arg->name);\n                        }\n                    }\n                    else\n                    {\n                        fprintf(header, \"%s\", arg->name);\n                    }\n                    if (reverse)\n                    {\n                        fprintf(header, \", \");\n                    }\n                }\n            }\n            if (reverse)\n            {\n                fprintf(header, \"LOWORD(%s)\", \"This\");\n                fprintf(header, \", HIWORD(%s)\", \"This\");\n            }\n            fprintf(header, \"};\\n\");\n\n            fprintf(header, \"    DWORD res;\\n\");\n            fprintf(header, \"    WOWCallback16Ex(GET_SEGPTR_METHOD_ADDR(%s16, This, %s), WCB16_PASCAL, %d, args, &res);\\n\", name, get_vtbl_entry_name(iface, func), args_size * 2);\n            if (type_get_type(type_function_get_rettype(func->type)) != TYPE_VOID)\n            {\n                fprintf(header, \"    return res;\\n\");\n            }\n            fprintf(header, \"}\\n\\n\");\n        }\n    }\n}\nstatic void write_header16_decl(FILE *file, type_t *iface)\n{\n    int dispinterface = is_attr(iface->attrs, ATTR_DISPINTERFACE);\n    const UUID *uuid = get_attrp(iface->attrs, ATTR_UUID);\n    type_t *type;\n\n    const statement_t *stmt;\n    const statement_list_t *stmts = type_iface_get_stmts(iface);\n    if (!filter_iface(iface->c_name))\n        return;\n    if (stmts) LIST_FOR_EACH_ENTRY(stmt, stmts, const statement_t, entry)\n    {\n        switch (stmt->type)\n        {\n        case STMT_TYPEDEF:\n        {\n            const type_list_t *type_entry = stmt->u.type_list;\n            for (; type_entry; type_entry = type_entry->next)\n                write_typedef16(file, type_entry->type);\n            break;\n        }\n        }\n    }\n    fprintf(file, \"typedef struct %s16Vtbl\\n{\\n\", iface->c_name);\n    do_write_header_def(file, iface, iface->c_name);\n    fprintf(file, \"} %s16Vtbl;\\n\", iface->c_name);\n    fprintf(file, \"typedef struct %s16\\n{\\n    /* %s16Vtbl* */SEGPTR lpVtbl;\\n\", iface->c_name, iface->c_name);\n    fprintf(file, \"} %s16;\\n\", iface->c_name);\n    type = dispinterface ? type_iface_get_inherit(iface) : iface;\n    write_method_macro16(file, type, type, iface->c_name);\n}\nstatic void write_header16_decls(FILE *file, const statement_list_t *stmts)\n{\n    const statement_t *stmt;\n    if (stmts) LIST_FOR_EACH_ENTRY(stmt, stmts, const statement_t, entry)\n    {\n        switch (stmt->type)\n        {\n        case STMT_TYPE:\n            if (type_get_type(stmt->u.type) == TYPE_INTERFACE)\n            {\n                if (is_object(stmt->u.type) || is_attr(stmt->u.type->attrs, ATTR_DISPINTERFACE))\n                {\n                    if (is_object(stmt->u.type) || is_attr(stmt->u.type->attrs, ATTR_DISPINTERFACE))\n                        write_header16_decl(file, stmt->u.type);\n                }\n            }\n            break;\n        }\n    }\n}\n\nvoid write_relay16(const statement_list_t *stmts)\n{\n    FILE *file;\n    if (!do_relay16) return;\n    if (!(file = fopen(relay16_name, \"w\"))) {\n        error(\"Could not open %s for output\\n\", relay16_name);\n        return;\n    }\n    fprintf(file, \"/*** Autogenerated by WIDL %s from %s - Do not edit ***/\\n\\n\", PACKAGE_VERSION, input_name);\n    if (strendswith(relay16_name, \".h\"))\n    {\n        fprintf(file, \"#ifndef __%s__\\n\", header_token);\n        fprintf(file, \"#define __%s__\\n\\n\", header_token);\n        write_forward_decls16(file, stmts);\n        write_header16_decls(file, stmts);\n        fprintf(file, \"#endif /* __%s__ */\\n\", header_token);\n    }\n    else\n    {\n        write_thunks_1632_3216(file, stmts);\n        write_vtable(file, stmts);\n        write_vtable2(file, stmts);\n    }\n    \n}\n"
  },
  {
    "path": "widl/server.c",
    "content": "/*\n * IDL Compiler\n *\n * Copyright 2005-2006 Eric Kohl\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdio.h>\n#include <stdlib.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#include <string.h>\n#include <ctype.h>\n\n#include \"widl.h\"\n#include \"utils.h\"\n#include \"parser.h\"\n#include \"header.h\"\n\n#include \"typegen.h\"\n\nstatic FILE* server;\nstatic int indent = 0;\n\n\nstatic void print_server(const char *format, ...) __attribute__((format (printf, 1, 2)));\nstatic void print_server(const char *format, ...)\n{\n    va_list va;\n    va_start(va, format);\n    print(server, indent, format, va);\n    va_end(va);\n}\n\nstatic void write_function_stub(const type_t *iface, const var_t *func, unsigned int proc_offset)\n{\n    const var_t *var;\n    unsigned char explicit_fc, implicit_fc;\n    int has_full_pointer = is_full_pointer_function(func);\n    const var_t *handle_var = get_func_handle_var( iface, func, &explicit_fc, &implicit_fc );\n\n    if (is_interpreted_func( iface, func )) return;\n\n    print_server(\"struct __frame_%s_%s\\n{\\n\", iface->name, get_name(func));\n    indent++;\n    print_server(\"__DECL_EXCEPTION_FRAME\\n\");\n    print_server(\"MIDL_STUB_MESSAGE _StubMsg;\\n\");\n\n    /* Declare arguments */\n    declare_stub_args(server, indent, func);\n\n    indent--;\n    print_server(\"};\\n\\n\");\n\n    print_server(\"static void __finally_%s_%s(\", iface->name, get_name(func));\n    fprintf(server,\" struct __frame_%s_%s *__frame )\\n{\\n\", iface->name, get_name(func));\n\n    indent++;\n    write_remoting_arguments(server, indent, func, \"__frame->\", PASS_OUT, PHASE_FREE);\n\n    if (!is_void(type_function_get_rettype(func->type)))\n        write_remoting_arguments(server, indent, func, \"__frame->\", PASS_RETURN, PHASE_FREE);\n\n    if (has_full_pointer)\n        write_full_pointer_free(server, indent, func);\n\n    indent--;\n    print_server(\"}\\n\\n\");\n\n    print_server(\"void __RPC_STUB %s_%s( PRPC_MESSAGE _pRpcMessage )\\n\", iface->name, get_name(func));\n\n    /* write the functions body */\n    fprintf(server, \"{\\n\");\n    indent++;\n    print_server(\"struct __frame_%s_%s __f, * const __frame = &__f;\\n\", iface->name, get_name(func));\n    if (has_out_arg_or_return(func)) print_server(\"RPC_STATUS _Status;\\n\");\n    fprintf(server, \"\\n\");\n\n    print_server(\"NdrServerInitializeNew(\\n\");\n    indent++;\n    print_server(\"_pRpcMessage,\\n\");\n    print_server(\"&__frame->_StubMsg,\\n\");\n    print_server(\"&%s_StubDesc);\\n\", iface->name);\n    indent--;\n    fprintf(server, \"\\n\");\n    print_server( \"RpcExceptionInit( __server_filter, __finally_%s_%s );\\n\", iface->name, get_name(func));\n\n    write_parameters_init(server, indent, func, \"__frame->\");\n\n    if (explicit_fc == FC_BIND_PRIMITIVE)\n    {\n        print_server(\"__frame->%s = _pRpcMessage->Handle;\\n\", handle_var->name);\n        fprintf(server, \"\\n\");\n    }\n\n    print_server(\"RpcTryFinally\\n\");\n    print_server(\"{\\n\");\n    indent++;\n    print_server(\"RpcTryExcept\\n\");\n    print_server(\"{\\n\");\n    indent++;\n\n    if (has_full_pointer)\n        write_full_pointer_init(server, indent, func, TRUE);\n\n    if (type_get_function_args(func->type))\n    {\n        print_server(\"if ((_pRpcMessage->DataRepresentation & 0x0000FFFFUL) != NDR_LOCAL_DATA_REPRESENTATION)\\n\");\n        indent++;\n        print_server(\"NdrConvert(&__frame->_StubMsg, (PFORMAT_STRING)&__MIDL_ProcFormatString.Format[%u]);\\n\",\n                     proc_offset);\n        indent--;\n        fprintf(server, \"\\n\");\n\n        /* unmarshall arguments */\n        write_remoting_arguments(server, indent, func, \"__frame->\", PASS_IN, PHASE_UNMARSHAL);\n    }\n\n    print_server(\"if (__frame->_StubMsg.Buffer > __frame->_StubMsg.BufferEnd)\\n\");\n    print_server(\"{\\n\");\n    indent++;\n    print_server(\"RpcRaiseException(RPC_X_BAD_STUB_DATA);\\n\");\n    indent--;\n    print_server(\"}\\n\");\n    indent--;\n    print_server(\"}\\n\");\n    print_server(\"RpcExcept(RPC_BAD_STUB_DATA_EXCEPTION_FILTER)\\n\");\n    print_server(\"{\\n\");\n    indent++;\n    print_server(\"RpcRaiseException(RPC_X_BAD_STUB_DATA);\\n\");\n    indent--;\n    print_server(\"}\\n\");\n    print_server(\"RpcEndExcept\\n\");\n    fprintf(server, \"\\n\");\n\n    /* Assign 'out' arguments */\n    assign_stub_out_args(server, indent, func, \"__frame->\");\n\n    /* Call the real server function */\n    print_server(\"%s%s%s\",\n                 is_void(type_function_get_rettype(func->type)) ? \"\" : \"__frame->_RetVal = \",\n                 prefix_server, get_name(func));\n\n    if (type_get_function_args(func->type))\n    {\n        int first_arg = 1;\n\n        fprintf(server, \"(\\n\");\n        indent++;\n        LIST_FOR_EACH_ENTRY( var, type_get_function_args(func->type), const var_t, entry )\n        {\n            if (first_arg)\n                first_arg = 0;\n            else\n                fprintf(server, \",\\n\");\n            if (is_context_handle(var->type))\n            {\n                /* if the context_handle attribute appears in the chain of types\n                 * without pointers being followed, then the context handle must\n                 * be direct, otherwise it is a pointer */\n                const char *ch_ptr = is_aliaschain_attr(var->type, ATTR_CONTEXTHANDLE) ? \"*\" : \"\";\n                print_server(\"(\");\n                write_type_decl_left(server, var->type);\n                fprintf(server, \")%sNDRSContextValue(__frame->%s)\", ch_ptr, var->name);\n            }\n            else\n            {\n                print_server(\"%s__frame->%s\", is_array(var->type) && !type_array_is_decl_as_ptr(var->type) ? \"*\" : \"\", var->name);\n            }\n        }\n        fprintf(server, \");\\n\");\n        indent--;\n    }\n    else\n    {\n        fprintf(server, \"();\\n\");\n    }\n\n    if (has_out_arg_or_return(func))\n    {\n        write_remoting_arguments(server, indent, func, \"__frame->\", PASS_OUT, PHASE_BUFFERSIZE);\n\n        if (!is_void(type_function_get_rettype(func->type)))\n            write_remoting_arguments(server, indent, func, \"__frame->\", PASS_RETURN, PHASE_BUFFERSIZE);\n\n        print_server(\"_pRpcMessage->BufferLength = __frame->_StubMsg.BufferLength;\\n\");\n        fprintf(server, \"\\n\");\n        print_server(\"_Status = I_RpcGetBuffer(_pRpcMessage);\\n\");\n        print_server(\"if (_Status)\\n\");\n        indent++;\n        print_server(\"RpcRaiseException(_Status);\\n\");\n        indent--;\n        fprintf(server, \"\\n\");\n        print_server(\"__frame->_StubMsg.Buffer = _pRpcMessage->Buffer;\\n\");\n        fprintf(server, \"\\n\");\n    }\n\n    /* marshall arguments */\n    write_remoting_arguments(server, indent, func, \"__frame->\", PASS_OUT, PHASE_MARSHAL);\n\n    /* marshall the return value */\n    if (!is_void(type_function_get_rettype(func->type)))\n        write_remoting_arguments(server, indent, func, \"__frame->\", PASS_RETURN, PHASE_MARSHAL);\n\n    indent--;\n    print_server(\"}\\n\");\n    print_server(\"RpcFinally\\n\");\n    print_server(\"{\\n\");\n    indent++;\n    print_server(\"__finally_%s_%s( __frame );\\n\", iface->name, get_name(func));\n    indent--;\n    print_server(\"}\\n\");\n    print_server(\"RpcEndFinally\\n\");\n\n    /* calculate buffer length */\n    fprintf(server, \"\\n\");\n    print_server(\"_pRpcMessage->BufferLength = __frame->_StubMsg.Buffer - (unsigned char *)_pRpcMessage->Buffer;\\n\");\n    indent--;\n    fprintf(server, \"}\\n\");\n    fprintf(server, \"\\n\");\n}\n\n\nstatic void write_function_stubs(type_t *iface, unsigned int *proc_offset)\n{\n    const statement_t *stmt;\n\n    STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) )\n    {\n        var_t *func = stmt->u.var;\n\n        write_function_stub( iface, func, *proc_offset );\n\n        /* update proc_offset */\n        func->procstring_offset = *proc_offset;\n        *proc_offset += get_size_procformatstring_func( iface, func );\n    }\n}\n\n\nstatic void write_dispatchtable(type_t *iface)\n{\n    unsigned int ver = get_attrv(iface->attrs, ATTR_VERSION);\n    unsigned int method_count = 0;\n    const statement_t *stmt;\n\n    print_server(\"static RPC_DISPATCH_FUNCTION %s_table[] =\\n\", iface->name);\n    print_server(\"{\\n\");\n    indent++;\n\n    STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) )\n    {\n        var_t *func = stmt->u.var;\n        if (is_interpreted_func( iface, func ))\n            print_server(\"%s,\\n\", get_stub_mode() == MODE_Oif ? \"NdrServerCall2\" : \"NdrServerCall\");\n        else\n            print_server(\"%s_%s,\\n\", iface->name, get_name(func));\n        method_count++;\n    }\n    print_server(\"0\\n\");\n    indent--;\n    print_server(\"};\\n\");\n    print_server(\"static RPC_DISPATCH_TABLE %s_v%d_%d_DispatchTable =\\n\", iface->name, MAJORVERSION(ver), MINORVERSION(ver));\n    print_server(\"{\\n\");\n    indent++;\n    print_server(\"%u,\\n\", method_count);\n    print_server(\"%s_table\\n\", iface->name);\n    indent--;\n    print_server(\"};\\n\");\n    fprintf(server, \"\\n\");\n}\n\n\nstatic void write_routinetable(type_t *iface)\n{\n    const statement_t *stmt;\n\n    print_server( \"static const SERVER_ROUTINE %s_ServerRoutineTable[] =\\n\", iface->name );\n    print_server( \"{\\n\" );\n    indent++;\n    STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) )\n    {\n        var_t *func = stmt->u.var;\n        if (is_local( func->attrs )) continue;\n        print_server( \"(SERVER_ROUTINE)%s%s,\\n\", prefix_server, get_name(func));\n    }\n    indent--;\n    print_server( \"};\\n\\n\" );\n}\n\n\nstatic void write_rundown_routines(void)\n{\n    context_handle_t *ch;\n    int count = list_count( &context_handle_list );\n\n    if (!count) return;\n    print_server( \"static const NDR_RUNDOWN RundownRoutines[] =\\n\" );\n    print_server( \"{\\n\" );\n    indent++;\n    LIST_FOR_EACH_ENTRY( ch, &context_handle_list, context_handle_t, entry )\n    {\n        print_server( \"%s_rundown\", ch->name );\n        if (--count) fputc( ',', server );\n        fputc( '\\n', server );\n    }\n    indent--;\n    print_server( \"};\\n\\n\" );\n}\n\n\nstatic void write_serverinfo(type_t *iface)\n{\n    print_server( \"static const MIDL_SERVER_INFO %s_ServerInfo =\\n\", iface->name );\n    print_server( \"{\\n\" );\n    indent++;\n    print_server( \"&%s_StubDesc,\\n\", iface->name );\n    print_server( \"%s_ServerRoutineTable,\\n\", iface->name );\n    print_server( \"__MIDL_ProcFormatString.Format,\\n\" );\n    print_server( \"%s_FormatStringOffsetTable,\\n\", iface->name );\n    print_server( \"0,\\n\" );\n    print_server( \"0,\\n\" );\n    print_server( \"0,\\n\" );\n    print_server( \"0\\n\" );\n    indent--;\n    print_server( \"};\\n\\n\" );\n}\n\n\nstatic void write_stubdescdecl(type_t *iface)\n{\n    print_server(\"static const MIDL_STUB_DESC %s_StubDesc;\\n\", iface->name);\n    fprintf(server, \"\\n\");\n}\n\n\nstatic void write_stubdescriptor(type_t *iface, int expr_eval_routines)\n{\n    print_server(\"static const MIDL_STUB_DESC %s_StubDesc =\\n\", iface->name);\n    print_server(\"{\\n\");\n    indent++;\n    print_server(\"(void *)& %s___RpcServerInterface,\\n\", iface->name);\n    print_server(\"MIDL_user_allocate,\\n\");\n    print_server(\"MIDL_user_free,\\n\");\n    print_server(\"{\\n\");\n    indent++;\n    print_server(\"0,\\n\");\n    indent--;\n    print_server(\"},\\n\");\n    if (!list_empty( &context_handle_list ))\n        print_server(\"RundownRoutines,\\n\");\n    else\n        print_server(\"0,\\n\");\n    print_server(\"0,\\n\");\n    if (expr_eval_routines)\n        print_server(\"ExprEvalRoutines,\\n\");\n    else\n        print_server(\"0,\\n\");\n    print_server(\"0,\\n\");\n    print_server(\"__MIDL_TypeFormatString.Format,\\n\");\n    print_server(\"1, /* -error bounds_check flag */\\n\");\n    print_server(\"0x%x, /* Ndr library version */\\n\", get_stub_mode() == MODE_Oif ? 0x50002 : 0x10001);\n    print_server(\"0,\\n\");\n    print_server(\"0x50100a4, /* MIDL Version 5.1.164 */\\n\");\n    print_server(\"0,\\n\");\n    print_server(\"%s,\\n\", list_empty(&user_type_list) ? \"0\" : \"UserMarshalRoutines\");\n    print_server(\"0,  /* notify & notify_flag routine table */\\n\");\n    print_server(\"1,  /* Flags */\\n\");\n    print_server(\"0,  /* Reserved3 */\\n\");\n    print_server(\"0,  /* Reserved4 */\\n\");\n    print_server(\"0   /* Reserved5 */\\n\");\n    indent--;\n    print_server(\"};\\n\");\n    fprintf(server, \"\\n\");\n}\n\n\nstatic void write_serverinterfacedecl(type_t *iface)\n{\n    unsigned int ver = get_attrv(iface->attrs, ATTR_VERSION);\n    UUID *uuid = get_attrp(iface->attrs, ATTR_UUID);\n    const str_list_t *endpoints = get_attrp(iface->attrs, ATTR_ENDPOINT);\n\n    if (endpoints) write_endpoints( server, iface->name, endpoints );\n\n    print_server(\"static RPC_DISPATCH_TABLE %s_v%d_%d_DispatchTable;\\n\", iface->name, MAJORVERSION(ver), MINORVERSION(ver));\n    print_server( \"static const MIDL_SERVER_INFO %s_ServerInfo;\\n\", iface->name );\n    fprintf(server, \"\\n\");\n    print_server(\"static const RPC_SERVER_INTERFACE %s___RpcServerInterface =\\n\", iface->name );\n    print_server(\"{\\n\");\n    indent++;\n    print_server(\"sizeof(RPC_SERVER_INTERFACE),\\n\");\n    print_server(\"{{0x%08x,0x%04x,0x%04x,{0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x}},{%d,%d}},\\n\",\n                 uuid->Data1, uuid->Data2, uuid->Data3, uuid->Data4[0], uuid->Data4[1],\n                 uuid->Data4[2], uuid->Data4[3], uuid->Data4[4], uuid->Data4[5], uuid->Data4[6],\n                 uuid->Data4[7], MAJORVERSION(ver), MINORVERSION(ver));\n    print_server(\"{{0x8a885d04,0x1ceb,0x11c9,{0x9f,0xe8,0x08,0x00,0x2b,0x10,0x48,0x60}},{2,0}},\\n\"); /* FIXME */\n    print_server(\"&%s_v%d_%d_DispatchTable,\\n\", iface->name, MAJORVERSION(ver), MINORVERSION(ver));\n    if (endpoints)\n    {\n        print_server(\"%u,\\n\", list_count(endpoints));\n        print_server(\"(PRPC_PROTSEQ_ENDPOINT)%s__RpcProtseqEndpoint,\\n\", iface->name);\n    }\n    else\n    {\n        print_server(\"0,\\n\");\n        print_server(\"0,\\n\");\n    }\n    print_server(\"0,\\n\");\n    print_server(\"&%s_ServerInfo,\\n\", iface->name);\n    print_server(\"0,\\n\");\n    indent--;\n    print_server(\"};\\n\");\n    if (old_names)\n        print_server(\"RPC_IF_HANDLE %s_ServerIfHandle DECLSPEC_HIDDEN = (RPC_IF_HANDLE)& %s___RpcServerInterface;\\n\",\n                     iface->name, iface->name);\n    else\n        print_server(\"RPC_IF_HANDLE %s%s_v%d_%d_s_ifspec DECLSPEC_HIDDEN = (RPC_IF_HANDLE)& %s___RpcServerInterface;\\n\",\n                     prefix_server, iface->name, MAJORVERSION(ver), MINORVERSION(ver), iface->name);\n    fprintf(server, \"\\n\");\n}\n\n\nstatic void init_server(void)\n{\n    if (server)\n        return;\n    if (!(server = fopen(server_name, \"w\")))\n        error(\"Could not open %s for output\\n\", server_name);\n\n    print_server(\"/*** Autogenerated by WIDL %s from %s - Do not edit ***/\\n\", PACKAGE_VERSION, input_name);\n    print_server(\"#include <string.h>\\n\");\n    fprintf(server, \"\\n\");\n    print_server(\"#include \\\"%s\\\"\\n\", header_name);\n    print_server(\"\\n\");\n    print_server( \"#ifndef DECLSPEC_HIDDEN\\n\");\n    print_server( \"#define DECLSPEC_HIDDEN\\n\");\n    print_server( \"#endif\\n\");\n    print_server( \"\\n\");\n}\n\n\nstatic void write_server_stmts(const statement_list_t *stmts, int expr_eval_routines, unsigned int *proc_offset)\n{\n    const statement_t *stmt;\n    if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry )\n    {\n        if (stmt->type == STMT_TYPE && type_get_type(stmt->u.type) == TYPE_INTERFACE)\n        {\n            type_t *iface = stmt->u.type;\n            if (!need_stub(iface))\n                continue;\n\n            fprintf(server, \"/*****************************************************************************\\n\");\n            fprintf(server, \" * %s interface\\n\", iface->name);\n            fprintf(server, \" */\\n\");\n            fprintf(server, \"\\n\");\n\n            if (statements_has_func(type_iface_get_stmts(iface)))\n            {\n                write_serverinterfacedecl(iface);\n                write_stubdescdecl(iface);\n\n                write_function_stubs(iface, proc_offset);\n\n                print_server(\"#if !defined(__RPC_WIN%u__)\\n\", pointer_size == 8 ? 64 : 32);\n                print_server(\"#error  Invalid build platform for this stub.\\n\");\n                print_server(\"#endif\\n\");\n\n                fprintf(server, \"\\n\");\n                write_procformatstring_offsets( server, iface );\n                write_stubdescriptor(iface, expr_eval_routines);\n                write_dispatchtable(iface);\n                write_routinetable(iface);\n                write_serverinfo(iface);\n            }\n        }\n    }\n}\n\nstatic void write_server_routines(const statement_list_t *stmts)\n{\n    unsigned int proc_offset = 0;\n    int expr_eval_routines;\n\n    if (need_inline_stubs_file( stmts ))\n    {\n        write_exceptions( server );\n        print_server(\"\\n\");\n        print_server(\"struct __server_frame\\n\");\n        print_server(\"{\\n\");\n        print_server(\"    __DECL_EXCEPTION_FRAME\\n\");\n        print_server(\"    MIDL_STUB_MESSAGE _StubMsg;\\n\");\n        print_server(\"};\\n\");\n        print_server(\"\\n\");\n        print_server(\"static int __server_filter( struct __server_frame *__frame )\\n\");\n        print_server( \"{\\n\");\n        print_server( \"    return (__frame->code == STATUS_ACCESS_VIOLATION) ||\\n\");\n        print_server( \"           (__frame->code == STATUS_DATATYPE_MISALIGNMENT) ||\\n\");\n        print_server( \"           (__frame->code == RPC_X_BAD_STUB_DATA) ||\\n\");\n        print_server( \"           (__frame->code == RPC_S_INVALID_BOUND);\\n\");\n        print_server( \"}\\n\");\n        print_server( \"\\n\");\n    }\n\n    write_formatstringsdecl(server, indent, stmts, need_stub);\n    expr_eval_routines = write_expr_eval_routines(server, server_token);\n    if (expr_eval_routines)\n        write_expr_eval_routine_list(server, server_token);\n    write_user_quad_list(server);\n    write_rundown_routines();\n\n    write_server_stmts(stmts, expr_eval_routines, &proc_offset);\n\n    write_procformatstring(server, stmts, need_stub);\n    write_typeformatstring(server, stmts, need_stub);\n}\n\nvoid write_server(const statement_list_t *stmts)\n{\n    if (!do_server)\n        return;\n    if (do_everything && !need_stub_files(stmts))\n        return;\n\n    init_server();\n    if (!server)\n        return;\n\n    if (do_win32 && do_win64)\n    {\n        fprintf(server, \"#ifndef _WIN64\\n\\n\");\n        pointer_size = 4;\n        write_server_routines( stmts );\n        fprintf(server, \"\\n#else /* _WIN64 */\\n\\n\");\n        pointer_size = 8;\n        write_server_routines( stmts );\n        fprintf(server, \"\\n#endif /* _WIN64 */\\n\");\n    }\n    else if (do_win32)\n    {\n        pointer_size = 4;\n        write_server_routines( stmts );\n    }\n    else if (do_win64)\n    {\n        pointer_size = 8;\n        write_server_routines( stmts );\n    }\n\n    fclose(server);\n}\n"
  },
  {
    "path": "widl/typegen.c",
    "content": "/*\n * Format String Generator for IDL Compiler\n *\n * Copyright 2005-2006 Eric Kohl\n * Copyright 2005-2006 Robert Shearman\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdio.h>\n#include <stdlib.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#include <string.h>\n#include <assert.h>\n#include <ctype.h>\n#include <limits.h>\n\n#include \"widl.h\"\n#include \"utils.h\"\n#include \"parser.h\"\n#include \"header.h\"\n#include \"typetree.h\"\n\n#include \"typegen.h\"\n#include \"expr.h\"\n\n/* round size up to multiple of alignment */\n#define ROUND_SIZE(size, alignment) (((size) + ((alignment) - 1)) & ~((alignment) - 1))\n/* value to add on to round size up to a multiple of alignment */\n#define ROUNDING(size, alignment) (((alignment) - 1) - (((size) + ((alignment) - 1)) & ((alignment) - 1)))\n\nstatic const type_t *current_structure;\nstatic const var_t *current_func;\nstatic const type_t *current_iface;\n\nstatic struct list expr_eval_routines = LIST_INIT(expr_eval_routines);\nstruct expr_eval_routine\n{\n    struct list   entry;\n    const type_t *iface;\n    const type_t *cont_type;\n    char         *name;\n    unsigned int  baseoff;\n    const expr_t *expr;\n};\n\nenum type_context\n{\n    TYPE_CONTEXT_TOPLEVELPARAM,\n    TYPE_CONTEXT_PARAM,\n    TYPE_CONTEXT_CONTAINER,\n    TYPE_CONTEXT_CONTAINER_NO_POINTERS,\n};\n\n/* parameter flags in Oif mode */\nstatic const unsigned short MustSize = 0x0001;\nstatic const unsigned short MustFree = 0x0002;\nstatic const unsigned short IsPipe = 0x0004;\nstatic const unsigned short IsIn = 0x0008;\nstatic const unsigned short IsOut = 0x0010;\nstatic const unsigned short IsReturn = 0x0020;\nstatic const unsigned short IsBasetype = 0x0040;\nstatic const unsigned short IsByValue = 0x0080;\nstatic const unsigned short IsSimpleRef = 0x0100;\n/* static const unsigned short IsDontCallFreeInst = 0x0200; */\n/* static const unsigned short SaveForAsyncFinish = 0x0400; */\n\nstatic unsigned int field_memsize(const type_t *type, unsigned int *offset);\nstatic unsigned int fields_memsize(const var_list_t *fields, unsigned int *align);\nstatic unsigned int write_array_tfs(FILE *file, const attr_list_t *attrs, type_t *type,\n                                    const char *name, unsigned int *typestring_offset);\nstatic unsigned int write_struct_tfs(FILE *file, type_t *type, const char *name, unsigned int *tfsoff);\nstatic int write_embedded_types(FILE *file, const attr_list_t *attrs, type_t *type,\n                                const char *name, int write_ptr, unsigned int *tfsoff);\nstatic const var_t *find_array_or_string_in_struct(const type_t *type);\nstatic unsigned int write_string_tfs(FILE *file, const attr_list_t *attrs,\n                                     type_t *type, enum type_context context,\n                                     const char *name, unsigned int *typestring_offset);\nstatic unsigned int get_required_buffer_size_type( const type_t *type, const char *name,\n                                                   const attr_list_t *attrs, int toplevel_param,\n                                                   unsigned int *alignment );\nstatic unsigned int get_function_buffer_size( const var_t *func, enum pass pass );\n\nstatic const char *string_of_type(unsigned char type)\n{\n    switch (type)\n    {\n    case FC_BYTE: return \"FC_BYTE\";\n    case FC_CHAR: return \"FC_CHAR\";\n    case FC_SMALL: return \"FC_SMALL\";\n    case FC_USMALL: return \"FC_USMALL\";\n    case FC_WCHAR: return \"FC_WCHAR\";\n    case FC_SHORT: return \"FC_SHORT\";\n    case FC_USHORT: return \"FC_USHORT\";\n    case FC_LONG: return \"FC_LONG\";\n    case FC_ULONG: return \"FC_ULONG\";\n    case FC_FLOAT: return \"FC_FLOAT\";\n    case FC_HYPER: return \"FC_HYPER\";\n    case FC_DOUBLE: return \"FC_DOUBLE\";\n    case FC_ENUM16: return \"FC_ENUM16\";\n    case FC_ENUM32: return \"FC_ENUM32\";\n    case FC_IGNORE: return \"FC_IGNORE\";\n    case FC_ERROR_STATUS_T: return \"FC_ERROR_STATUS_T\";\n    case FC_RP: return \"FC_RP\";\n    case FC_UP: return \"FC_UP\";\n    case FC_OP: return \"FC_OP\";\n    case FC_FP: return \"FC_FP\";\n    case FC_ENCAPSULATED_UNION: return \"FC_ENCAPSULATED_UNION\";\n    case FC_NON_ENCAPSULATED_UNION: return \"FC_NON_ENCAPSULATED_UNION\";\n    case FC_STRUCT: return \"FC_STRUCT\";\n    case FC_PSTRUCT: return \"FC_PSTRUCT\";\n    case FC_CSTRUCT: return \"FC_CSTRUCT\";\n    case FC_CPSTRUCT: return \"FC_CPSTRUCT\";\n    case FC_CVSTRUCT: return \"FC_CVSTRUCT\";\n    case FC_BOGUS_STRUCT: return \"FC_BOGUS_STRUCT\";\n    case FC_SMFARRAY: return \"FC_SMFARRAY\";\n    case FC_LGFARRAY: return \"FC_LGFARRAY\";\n    case FC_SMVARRAY: return \"FC_SMVARRAY\";\n    case FC_LGVARRAY: return \"FC_LGVARRAY\";\n    case FC_CARRAY: return \"FC_CARRAY\";\n    case FC_CVARRAY: return \"FC_CVARRAY\";\n    case FC_BOGUS_ARRAY: return \"FC_BOGUS_ARRAY\";\n    case FC_ALIGNM2: return \"FC_ALIGNM2\";\n    case FC_ALIGNM4: return \"FC_ALIGNM4\";\n    case FC_ALIGNM8: return \"FC_ALIGNM8\";\n    case FC_POINTER: return \"FC_POINTER\";\n    case FC_C_CSTRING: return \"FC_C_CSTRING\";\n    case FC_C_WSTRING: return \"FC_C_WSTRING\";\n    case FC_CSTRING: return \"FC_CSTRING\";\n    case FC_WSTRING: return \"FC_WSTRING\";\n    case FC_BYTE_COUNT_POINTER: return \"FC_BYTE_COUNT_POINTER\";\n    case FC_TRANSMIT_AS: return \"FC_TRANSMIT_AS\";\n    case FC_REPRESENT_AS: return \"FC_REPRESENT_AS\";\n    case FC_IP: return \"FC_IP\";\n    case FC_BIND_CONTEXT: return \"FC_BIND_CONTEXT\";\n    case FC_BIND_GENERIC: return \"FC_BIND_GENERIC\";\n    case FC_BIND_PRIMITIVE: return \"FC_BIND_PRIMITIVE\";\n    case FC_AUTO_HANDLE: return \"FC_AUTO_HANDLE\";\n    case FC_CALLBACK_HANDLE: return \"FC_CALLBACK_HANDLE\";\n    case FC_STRUCTPAD1: return \"FC_STRUCTPAD1\";\n    case FC_STRUCTPAD2: return \"FC_STRUCTPAD2\";\n    case FC_STRUCTPAD3: return \"FC_STRUCTPAD3\";\n    case FC_STRUCTPAD4: return \"FC_STRUCTPAD4\";\n    case FC_STRUCTPAD5: return \"FC_STRUCTPAD5\";\n    case FC_STRUCTPAD6: return \"FC_STRUCTPAD6\";\n    case FC_STRUCTPAD7: return \"FC_STRUCTPAD7\";\n    case FC_STRING_SIZED: return \"FC_STRING_SIZED\";\n    case FC_NO_REPEAT: return \"FC_NO_REPEAT\";\n    case FC_FIXED_REPEAT: return \"FC_FIXED_REPEAT\";\n    case FC_VARIABLE_REPEAT: return \"FC_VARIABLE_REPEAT\";\n    case FC_FIXED_OFFSET: return \"FC_FIXED_OFFSET\";\n    case FC_VARIABLE_OFFSET: return \"FC_VARIABLE_OFFSET\";\n    case FC_PP: return \"FC_PP\";\n    case FC_EMBEDDED_COMPLEX: return \"FC_EMBEDDED_COMPLEX\";\n    case FC_DEREFERENCE: return \"FC_DEREFERENCE\";\n    case FC_DIV_2: return \"FC_DIV_2\";\n    case FC_MULT_2: return \"FC_MULT_2\";\n    case FC_ADD_1: return \"FC_ADD_1\";\n    case FC_SUB_1: return \"FC_SUB_1\";\n    case FC_CALLBACK: return \"FC_CALLBACK\";\n    case FC_CONSTANT_IID: return \"FC_CONSTANT_IID\";\n    case FC_END: return \"FC_END\";\n    case FC_PAD: return \"FC_PAD\";\n    case FC_USER_MARSHAL: return \"FC_USER_MARSHAL\";\n    case FC_RANGE: return \"FC_RANGE\";\n    case FC_INT3264: return \"FC_INT3264\";\n    case FC_UINT3264: return \"FC_UINT3264\";\n    default:\n        error(\"string_of_type: unknown type 0x%02x\\n\", type);\n        return NULL;\n    }\n}\n\nstatic void *get_aliaschain_attrp(const type_t *type, enum attr_type attr)\n{\n    const type_t *t = type;\n    for (;;)\n    {\n        if (is_attr(t->attrs, attr))\n            return get_attrp(t->attrs, attr);\n        else if (type_is_alias(t))\n            t = type_alias_get_aliasee(t);\n        else return NULL;\n    }\n}\n\nunsigned char get_basic_fc(const type_t *type)\n{\n    int sign = type_basic_get_sign(type);\n    switch (type_basic_get_type(type))\n    {\n    case TYPE_BASIC_INT8: return (sign <= 0 ? FC_SMALL : FC_USMALL);\n    case TYPE_BASIC_INT16: return (sign <= 0 ? FC_SHORT : FC_USHORT);\n    case TYPE_BASIC_INT32: return (sign <= 0 ? FC_LONG : FC_ULONG);\n    case TYPE_BASIC_INT64: return FC_HYPER;\n    case TYPE_BASIC_INT: return (sign <= 0 ? FC_LONG : FC_ULONG);\n    case TYPE_BASIC_INT3264: return (sign <= 0 ? FC_INT3264 : FC_UINT3264);\n    case TYPE_BASIC_BYTE: return FC_BYTE;\n    case TYPE_BASIC_CHAR: return FC_CHAR;\n    case TYPE_BASIC_WCHAR: return FC_WCHAR;\n    case TYPE_BASIC_HYPER: return FC_HYPER;\n    case TYPE_BASIC_FLOAT: return FC_FLOAT;\n    case TYPE_BASIC_DOUBLE: return FC_DOUBLE;\n    case TYPE_BASIC_ERROR_STATUS_T: return FC_ERROR_STATUS_T;\n    case TYPE_BASIC_HANDLE: return FC_BIND_PRIMITIVE;\n    }\n    return 0;\n}\n\nstatic unsigned char get_basic_fc_signed(const type_t *type)\n{\n    switch (type_basic_get_type(type))\n    {\n    case TYPE_BASIC_INT8: return FC_SMALL;\n    case TYPE_BASIC_INT16: return FC_SHORT;\n    case TYPE_BASIC_INT32: return FC_LONG;\n    case TYPE_BASIC_INT64: return FC_HYPER;\n    case TYPE_BASIC_INT: return FC_LONG;\n    case TYPE_BASIC_INT3264: return FC_INT3264;\n    case TYPE_BASIC_BYTE: return FC_BYTE;\n    case TYPE_BASIC_CHAR: return FC_CHAR;\n    case TYPE_BASIC_WCHAR: return FC_WCHAR;\n    case TYPE_BASIC_HYPER: return FC_HYPER;\n    case TYPE_BASIC_FLOAT: return FC_FLOAT;\n    case TYPE_BASIC_DOUBLE: return FC_DOUBLE;\n    case TYPE_BASIC_ERROR_STATUS_T: return FC_ERROR_STATUS_T;\n    case TYPE_BASIC_HANDLE: return FC_BIND_PRIMITIVE;\n    }\n    return 0;\n}\n\nstatic inline unsigned int clamp_align(unsigned int align)\n{\n    unsigned int packing = (pointer_size == 4) ? win32_packing : win64_packing;\n    if(align > packing) align = packing;\n    return align;\n}\n\nunsigned char get_pointer_fc(const type_t *type, const attr_list_t *attrs, int toplevel_param)\n{\n    const type_t *t;\n    int pointer_type;\n\n    assert(is_ptr(type) || is_array(type));\n\n    pointer_type = get_attrv(attrs, ATTR_POINTERTYPE);\n    if (pointer_type)\n        return pointer_type;\n\n    for (t = type; type_is_alias(t); t = type_alias_get_aliasee(t))\n    {\n        pointer_type = get_attrv(t->attrs, ATTR_POINTERTYPE);\n        if (pointer_type)\n            return pointer_type;\n    }\n\n    if (toplevel_param)\n        return FC_RP;\n    else if (is_ptr(type))\n        return type_pointer_get_default_fc(type);\n    else\n        return type_array_get_ptr_default_fc(type);\n}\n\nstatic unsigned char get_pointer_fc_context( const type_t *type, const attr_list_t *attrs,\n                                             enum type_context context )\n{\n    int pointer_fc = get_pointer_fc(type, attrs, context == TYPE_CONTEXT_TOPLEVELPARAM);\n\n    if (pointer_fc == FC_UP && is_attr( attrs, ATTR_OUT ) &&\n        context == TYPE_CONTEXT_PARAM && is_object( current_iface ))\n        pointer_fc = FC_OP;\n\n    return pointer_fc;\n}\n\nstatic unsigned char get_enum_fc(const type_t *type)\n{\n    assert(type_get_type(type) == TYPE_ENUM);\n    if (is_aliaschain_attr(type, ATTR_V1ENUM))\n        return FC_ENUM32;\n    else\n        return FC_ENUM16;\n}\n\nstatic type_t *get_user_type(const type_t *t, const char **pname)\n{\n    for (;;)\n    {\n        type_t *ut = get_attrp(t->attrs, ATTR_WIREMARSHAL);\n        if (ut)\n        {\n            if (pname)\n                *pname = t->name;\n            return ut;\n        }\n\n        if (type_is_alias(t))\n            t = type_alias_get_aliasee(t);\n        else\n            return NULL;\n    }\n}\n\nstatic int is_user_type(const type_t *t)\n{\n    return get_user_type(t, NULL) != NULL;\n}\n\nenum typegen_type typegen_detect_type(const type_t *type, const attr_list_t *attrs, unsigned int flags)\n{\n    if (is_user_type(type))\n        return TGT_USER_TYPE;\n\n    if (is_aliaschain_attr(type, ATTR_CONTEXTHANDLE))\n        return TGT_CTXT_HANDLE;\n\n    if (!(flags & TDT_IGNORE_STRINGS) && is_string_type(attrs, type))\n        return TGT_STRING;\n\n    switch (type_get_type(type))\n    {\n    case TYPE_BASIC:\n        if (!(flags & TDT_IGNORE_RANGES) &&\n            (is_attr(attrs, ATTR_RANGE) || is_aliaschain_attr(type, ATTR_RANGE)))\n            return TGT_RANGE;\n        return TGT_BASIC;\n    case TYPE_ENUM:\n        if (!(flags & TDT_IGNORE_RANGES) &&\n            (is_attr(attrs, ATTR_RANGE) || is_aliaschain_attr(type, ATTR_RANGE)))\n            return TGT_RANGE;\n        return TGT_ENUM;\n    case TYPE_POINTER:\n        if (type_get_type(type_pointer_get_ref(type)) == TYPE_INTERFACE ||\n            (type_get_type(type_pointer_get_ref(type)) == TYPE_VOID && is_attr(attrs, ATTR_IIDIS)))\n            return TGT_IFACE_POINTER;\n        else if (is_aliaschain_attr(type_pointer_get_ref(type), ATTR_CONTEXTHANDLE))\n            return TGT_CTXT_HANDLE_POINTER;\n        else\n            return TGT_POINTER;\n    case TYPE_STRUCT:\n        return TGT_STRUCT;\n    case TYPE_ENCAPSULATED_UNION:\n    case TYPE_UNION:\n        return TGT_UNION;\n    case TYPE_ARRAY:\n        return TGT_ARRAY;\n    case TYPE_FUNCTION:\n    case TYPE_COCLASS:\n    case TYPE_INTERFACE:\n    case TYPE_MODULE:\n    case TYPE_VOID:\n    case TYPE_ALIAS:\n    case TYPE_BITFIELD:\n        break;\n    }\n    return TGT_INVALID;\n}\n\nstatic int cant_be_null(const var_t *v)\n{\n    switch (typegen_detect_type(v->type, v->attrs, TDT_IGNORE_STRINGS))\n    {\n    case TGT_ARRAY:\n        if (!type_array_is_decl_as_ptr( v->type )) return 0;\n        /* fall through */\n    case TGT_POINTER:\n        return (get_pointer_fc(v->type, v->attrs, TRUE) == FC_RP);\n    case TGT_CTXT_HANDLE_POINTER:\n        return TRUE;\n    default:\n        return 0;\n    }\n\n}\n\nstatic int get_padding(const var_list_t *fields)\n{\n    unsigned short offset = 0;\n    unsigned int salign = 1;\n    const var_t *f;\n\n    if (!fields)\n        return 0;\n\n    LIST_FOR_EACH_ENTRY(f, fields, const var_t, entry)\n    {\n        type_t *ft = f->type;\n        unsigned int align = 0;\n        unsigned int size = type_memsize_and_alignment(ft, &align);\n        align = clamp_align(align);\n        if (align > salign) salign = align;\n        offset = ROUND_SIZE(offset, align);\n        offset += size;\n    }\n\n    return ROUNDING(offset, salign);\n}\n\nstatic unsigned int get_stack_size( const var_t *var, int *by_value )\n{\n    unsigned int stack_size;\n    int by_val;\n\n    switch (typegen_detect_type( var->type, var->attrs, TDT_ALL_TYPES ))\n    {\n    case TGT_BASIC:\n    case TGT_ENUM:\n    case TGT_RANGE:\n    case TGT_STRUCT:\n    case TGT_UNION:\n    case TGT_USER_TYPE:\n        stack_size = type_memsize( var->type );\n        by_val = (pointer_size < 8 || stack_size <= pointer_size); /* FIXME: should be platform-specific */\n        break;\n    default:\n        by_val = 0;\n        break;\n    }\n    if (!by_val) stack_size = pointer_size;\n    if (by_value) *by_value = by_val;\n    return ROUND_SIZE( stack_size, pointer_size );\n}\n\nstatic unsigned char get_contexthandle_flags( const type_t *iface, const attr_list_t *attrs,\n                                              const type_t *type )\n{\n    unsigned char flags = 0;\n\n    if (is_attr(iface->attrs, ATTR_STRICTCONTEXTHANDLE)) flags |= NDR_STRICT_CONTEXT_HANDLE;\n\n    if (is_ptr(type) &&\n        !is_attr( type->attrs, ATTR_CONTEXTHANDLE ) &&\n        !is_attr( attrs, ATTR_CONTEXTHANDLE ))\n        flags |= 0x80;\n\n    if (is_attr(attrs, ATTR_IN))\n    {\n        flags |= 0x40;\n        if (!is_attr(attrs, ATTR_OUT)) flags |= NDR_CONTEXT_HANDLE_CANNOT_BE_NULL;\n    }\n    if (is_attr(attrs, ATTR_OUT)) flags |= 0x20;\n\n    return flags;\n}\n\nstatic unsigned int get_rpc_flags( const attr_list_t *attrs )\n{\n    unsigned int flags = 0;\n\n    if (is_attr( attrs, ATTR_IDEMPOTENT )) flags |= 0x0001;\n    if (is_attr( attrs, ATTR_BROADCAST )) flags |= 0x0002;\n    if (is_attr( attrs, ATTR_MAYBE )) flags |= 0x0004;\n    if (is_attr( attrs, ATTR_MESSAGE )) flags |= 0x0100;\n    if (is_attr( attrs, ATTR_ASYNC )) flags |= 0x4000;\n    return flags;\n}\n\nunsigned char get_struct_fc(const type_t *type)\n{\n  int has_pointer = 0;\n  int has_conformance = 0;\n  int has_variance = 0;\n  var_t *field;\n  var_list_t *fields;\n\n  fields = type_struct_get_fields(type);\n\n  if (get_padding(fields))\n    return FC_BOGUS_STRUCT;\n\n  if (fields) LIST_FOR_EACH_ENTRY( field, fields, var_t, entry )\n  {\n    type_t *t = field->type;\n    enum typegen_type typegen_type;\n\n    typegen_type = typegen_detect_type(t, field->attrs, TDT_IGNORE_STRINGS);\n\n    if (typegen_type == TGT_ARRAY && !type_array_is_decl_as_ptr(t))\n    {\n        if (is_string_type(field->attrs, field->type))\n        {\n            if (is_conformant_array(t))\n                has_conformance = 1;\n            has_variance = 1;\n            continue;\n        }\n\n        if (is_array(type_array_get_element(field->type)))\n            return FC_BOGUS_STRUCT;\n\n        if (type_array_has_conformance(field->type))\n        {\n            has_conformance = 1;\n            if (list_next(fields, &field->entry))\n                error_loc(\"field '%s' deriving from a conformant array must be the last field in the structure\\n\",\n                        field->name);\n        }\n        if (type_array_has_variance(t))\n            has_variance = 1;\n\n        t = type_array_get_element(t);\n        typegen_type = typegen_detect_type(t, field->attrs, TDT_IGNORE_STRINGS);\n    }\n\n    switch (typegen_type)\n    {\n    case TGT_USER_TYPE:\n    case TGT_IFACE_POINTER:\n        return FC_BOGUS_STRUCT;\n    case TGT_BASIC:\n        if (type_basic_get_type(t) == TYPE_BASIC_INT3264 && pointer_size != 4)\n            return FC_BOGUS_STRUCT;\n        break;\n    case TGT_ENUM:\n        if (get_enum_fc(t) == FC_ENUM16)\n            return FC_BOGUS_STRUCT;\n        break;\n    case TGT_POINTER:\n    case TGT_ARRAY:\n        if (get_pointer_fc(t, field->attrs, FALSE) == FC_RP || pointer_size != 4)\n            return FC_BOGUS_STRUCT;\n        has_pointer = 1;\n        break;\n    case TGT_UNION:\n        return FC_BOGUS_STRUCT;\n    case TGT_STRUCT:\n    {\n        unsigned char fc = get_struct_fc(t);\n        switch (fc)\n        {\n        case FC_STRUCT:\n            break;\n        case FC_CVSTRUCT:\n            has_conformance = 1;\n            has_variance = 1;\n            has_pointer = 1;\n            break;\n\n        case FC_CPSTRUCT:\n            has_conformance = 1;\n            if (list_next( fields, &field->entry ))\n                error_loc(\"field '%s' deriving from a conformant array must be the last field in the structure\\n\",\n                        field->name);\n            has_pointer = 1;\n            break;\n\n        case FC_CSTRUCT:\n            has_conformance = 1;\n            if (list_next( fields, &field->entry ))\n                error_loc(\"field '%s' deriving from a conformant array must be the last field in the structure\\n\",\n                      field->name);\n            break;\n\n        case FC_PSTRUCT:\n            has_pointer = 1;\n            break;\n\n        default:\n            error_loc(\"Unknown struct member %s with type (0x%02x)\\n\", field->name, fc);\n            /* fallthru - treat it as complex */\n\n        /* as soon as we see one of these these members, it's bogus... */\n        case FC_BOGUS_STRUCT:\n            return FC_BOGUS_STRUCT;\n        }\n        break;\n    }\n    case TGT_RANGE:\n        return FC_BOGUS_STRUCT;\n    case TGT_STRING:\n        /* shouldn't get here because of TDT_IGNORE_STRINGS above. fall through */\n    case TGT_INVALID:\n    case TGT_CTXT_HANDLE:\n    case TGT_CTXT_HANDLE_POINTER:\n        /* checking after parsing should mean that we don't get here. if we do,\n         * it's a checker bug */\n        assert(0);\n    }\n  }\n\n  if( has_variance )\n  {\n    if ( has_conformance )\n      return FC_CVSTRUCT;\n    else\n      return FC_BOGUS_STRUCT;\n  }\n  if( has_conformance && has_pointer )\n    return FC_CPSTRUCT;\n  if( has_conformance )\n    return FC_CSTRUCT;\n  if( has_pointer )\n    return FC_PSTRUCT;\n  return FC_STRUCT;\n}\n\nstatic unsigned char get_array_fc(const type_t *type)\n{\n    unsigned char fc;\n    const expr_t *size_is;\n    const type_t *elem_type;\n\n    elem_type = type_array_get_element(type);\n    size_is = type_array_get_conformance(type);\n\n    if (!size_is)\n    {\n        unsigned int size = type_memsize(elem_type);\n        if (size * type_array_get_dim(type) > 0xffffuL)\n            fc = FC_LGFARRAY;\n        else\n            fc = FC_SMFARRAY;\n    }\n    else\n        fc = FC_CARRAY;\n\n    if (type_array_has_variance(type))\n    {\n        if (fc == FC_SMFARRAY)\n            fc = FC_SMVARRAY;\n        else if (fc == FC_LGFARRAY)\n            fc = FC_LGVARRAY;\n        else if (fc == FC_CARRAY)\n            fc = FC_CVARRAY;\n    }\n\n    switch (typegen_detect_type(elem_type, NULL, TDT_IGNORE_STRINGS))\n    {\n    case TGT_USER_TYPE:\n        fc = FC_BOGUS_ARRAY;\n        break;\n    case TGT_BASIC:\n        if (type_basic_get_type(elem_type) == TYPE_BASIC_INT3264 &&\n            pointer_size != 4)\n            fc = FC_BOGUS_ARRAY;\n        break;\n    case TGT_STRUCT:\n        switch (get_struct_fc(elem_type))\n        {\n        case FC_BOGUS_STRUCT:\n            fc = FC_BOGUS_ARRAY;\n            break;\n        }\n        break;\n    case TGT_ENUM:\n        /* is 16-bit enum - if so, wire size differs from mem size and so\n         * the array cannot be block copied, which means the array is complex */\n        if (get_enum_fc(elem_type) == FC_ENUM16)\n            fc = FC_BOGUS_ARRAY;\n        break;\n    case TGT_UNION:\n    case TGT_IFACE_POINTER:\n        fc = FC_BOGUS_ARRAY;\n        break;\n    case TGT_POINTER:\n        /* ref pointers cannot just be block copied. unique pointers to\n         * interfaces need special treatment. either case means the array is\n         * complex */\n        if (get_pointer_fc(elem_type, NULL, FALSE) == FC_RP || pointer_size != 4)\n            fc = FC_BOGUS_ARRAY;\n        break;\n    case TGT_RANGE:\n        fc = FC_BOGUS_ARRAY;\n        break;\n    case TGT_CTXT_HANDLE:\n    case TGT_CTXT_HANDLE_POINTER:\n    case TGT_STRING:\n    case TGT_INVALID:\n    case TGT_ARRAY:\n        /* nothing to do for everything else */\n        break;\n    }\n\n    return fc;\n}\n\nstatic int is_non_complex_struct(const type_t *type)\n{\n    return (type_get_type(type) == TYPE_STRUCT &&\n            get_struct_fc(type) != FC_BOGUS_STRUCT);\n}\n\nstatic int type_has_pointers(const type_t *type)\n{\n    switch (typegen_detect_type(type, NULL, TDT_IGNORE_STRINGS))\n    {\n    case TGT_USER_TYPE:\n        return FALSE;\n    case TGT_POINTER:\n        return TRUE;\n    case TGT_ARRAY:\n        return type_array_is_decl_as_ptr(type) || type_has_pointers(type_array_get_element(type));\n    case TGT_STRUCT:\n    {\n        var_list_t *fields = type_struct_get_fields(type);\n        const var_t *field;\n        if (fields) LIST_FOR_EACH_ENTRY( field, fields, const var_t, entry )\n        {\n            if (type_has_pointers(field->type))\n                return TRUE;\n        }\n        break;\n    }\n    case TGT_UNION:\n    {\n        var_list_t *fields;\n        const var_t *field;\n        fields = type_union_get_cases(type);\n        if (fields) LIST_FOR_EACH_ENTRY( field, fields, const var_t, entry )\n        {\n            if (field->type && type_has_pointers(field->type))\n                return TRUE;\n        }\n        break;\n    }\n    case TGT_CTXT_HANDLE:\n    case TGT_CTXT_HANDLE_POINTER:\n    case TGT_STRING:\n    case TGT_IFACE_POINTER:\n    case TGT_BASIC:\n    case TGT_ENUM:\n    case TGT_RANGE:\n    case TGT_INVALID:\n        break;\n    }\n\n    return FALSE;\n}\n\nstatic int type_has_full_pointer(const type_t *type, const attr_list_t *attrs,\n                                 int toplevel_param)\n{\n    switch (typegen_detect_type(type, NULL, TDT_IGNORE_STRINGS))\n    {\n    case TGT_USER_TYPE:\n        return FALSE;\n    case TGT_POINTER:\n        if (get_pointer_fc(type, attrs, toplevel_param) == FC_FP)\n            return TRUE;\n        else\n            return FALSE;\n    case TGT_ARRAY:\n        if (get_pointer_fc(type, attrs, toplevel_param) == FC_FP)\n            return TRUE;\n        else\n            return type_has_full_pointer(type_array_get_element(type), NULL, FALSE);\n    case TGT_STRUCT:\n    {\n        var_list_t *fields = type_struct_get_fields(type);\n        const var_t *field;\n        if (fields) LIST_FOR_EACH_ENTRY( field, fields, const var_t, entry )\n        {\n            if (type_has_full_pointer(field->type, field->attrs, FALSE))\n                return TRUE;\n        }\n        break;\n    }\n    case TGT_UNION:\n    {\n        var_list_t *fields;\n        const var_t *field;\n        fields = type_union_get_cases(type);\n        if (fields) LIST_FOR_EACH_ENTRY( field, fields, const var_t, entry )\n        {\n            if (field->type && type_has_full_pointer(field->type, field->attrs, FALSE))\n                return TRUE;\n        }\n        break;\n    }\n    case TGT_CTXT_HANDLE:\n    case TGT_CTXT_HANDLE_POINTER:\n    case TGT_STRING:\n    case TGT_IFACE_POINTER:\n    case TGT_BASIC:\n    case TGT_ENUM:\n    case TGT_RANGE:\n    case TGT_INVALID:\n        break;\n    }\n\n    return FALSE;\n}\n\nstatic unsigned short user_type_offset(const char *name)\n{\n    user_type_t *ut;\n    unsigned short off = 0;\n    LIST_FOR_EACH_ENTRY(ut, &user_type_list, user_type_t, entry)\n    {\n        if (strcmp(name, ut->name) == 0)\n            return off;\n        ++off;\n    }\n    error(\"user_type_offset: couldn't find type (%s)\\n\", name);\n    return 0;\n}\n\nstatic void update_tfsoff(type_t *type, unsigned int offset, FILE *file)\n{\n    type->typestring_offset = offset;\n    if (file) type->tfswrite = FALSE;\n}\n\nstatic void guard_rec(type_t *type)\n{\n    /* types that contain references to themselves (like a linked list),\n       need to be shielded from infinite recursion when writing embedded\n       types  */\n    if (type->typestring_offset)\n        type->tfswrite = FALSE;\n    else\n        type->typestring_offset = 1;\n}\n\nstatic int is_embedded_complex(const type_t *type)\n{\n    switch (typegen_detect_type(type, NULL, TDT_ALL_TYPES))\n    {\n    case TGT_USER_TYPE:\n    case TGT_STRUCT:\n    case TGT_UNION:\n    case TGT_ARRAY:\n    case TGT_IFACE_POINTER:\n        return TRUE;\n    default:\n        return FALSE;\n    }\n}\n\nstatic const char *get_context_handle_type_name(const type_t *type)\n{\n    const type_t *t;\n    for (t = type;\n         is_ptr(t) || type_is_alias(t);\n         t = type_is_alias(t) ? type_alias_get_aliasee(t) : type_pointer_get_ref(t))\n        if (is_attr(t->attrs, ATTR_CONTEXTHANDLE))\n            return t->name;\n    assert(0);\n    return NULL;\n}\n\n#define WRITE_FCTYPE(file, fctype, typestring_offset) \\\n    do { \\\n        if (file) \\\n            fprintf(file, \"/* %2u */\\n\", typestring_offset); \\\n        print_file((file), 2, \"0x%02x,\\t/* \" #fctype \" */\\n\", fctype); \\\n    } \\\n    while (0)\n\nstatic void print_file(FILE *file, int indent, const char *format, ...) __attribute__((format (printf, 3, 4)));\nstatic void print_file(FILE *file, int indent, const char *format, ...)\n{\n    va_list va;\n    va_start(va, format);\n    print(file, indent, format, va);\n    va_end(va);\n}\n\nvoid print(FILE *file, int indent, const char *format, va_list va)\n{\n    if (file)\n    {\n        if (format[0] != '\\n')\n            while (0 < indent--)\n                fprintf(file, \"    \");\n        vfprintf(file, format, va);\n    }\n}\n\n\nstatic void write_var_init(FILE *file, int indent, const type_t *t, const char *n, const char *local_var_prefix)\n{\n    if (decl_indirect(t))\n    {\n        print_file(file, indent, \"MIDL_memset(&%s%s, 0, sizeof(%s%s));\\n\",\n                   local_var_prefix, n, local_var_prefix, n);\n        print_file(file, indent, \"%s_p_%s = &%s%s;\\n\", local_var_prefix, n, local_var_prefix, n);\n    }\n    else if (is_ptr(t) || is_array(t))\n        print_file(file, indent, \"%s%s = 0;\\n\", local_var_prefix, n);\n}\n\nvoid write_parameters_init(FILE *file, int indent, const var_t *func, const char *local_var_prefix)\n{\n    const var_t *var = type_function_get_retval(func->type);\n\n    if (!is_void(var->type))\n        write_var_init(file, indent, var->type, var->name, local_var_prefix);\n\n    if (!type_get_function_args(func->type))\n        return;\n\n    LIST_FOR_EACH_ENTRY( var, type_get_function_args(func->type), const var_t, entry )\n        write_var_init(file, indent, var->type, var->name, local_var_prefix);\n\n    fprintf(file, \"\\n\");\n}\n\nstatic void write_formatdesc(FILE *f, int indent, const char *str)\n{\n    print_file(f, indent, \"typedef struct _MIDL_%s_FORMAT_STRING\\n\", str);\n    print_file(f, indent, \"{\\n\");\n    print_file(f, indent + 1, \"short Pad;\\n\");\n    print_file(f, indent + 1, \"unsigned char Format[%s_FORMAT_STRING_SIZE];\\n\", str);\n    print_file(f, indent, \"} MIDL_%s_FORMAT_STRING;\\n\", str);\n    print_file(f, indent, \"\\n\");\n}\n\nvoid write_formatstringsdecl(FILE *f, int indent, const statement_list_t *stmts, type_pred_t pred)\n{\n    clear_all_offsets();\n\n    print_file(f, indent, \"#define TYPE_FORMAT_STRING_SIZE %d\\n\",\n               get_size_typeformatstring(stmts, pred));\n\n    print_file(f, indent, \"#define PROC_FORMAT_STRING_SIZE %d\\n\",\n               get_size_procformatstring(stmts, pred));\n\n    fprintf(f, \"\\n\");\n    write_formatdesc(f, indent, \"TYPE\");\n    write_formatdesc(f, indent, \"PROC\");\n    fprintf(f, \"\\n\");\n    print_file(f, indent, \"static const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString;\\n\");\n    print_file(f, indent, \"static const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString;\\n\");\n    print_file(f, indent, \"\\n\");\n}\n\nint decl_indirect(const type_t *t)\n{\n    if (is_user_type(t))\n        return TRUE;\n    return (type_get_type(t) != TYPE_BASIC &&\n            type_get_type(t) != TYPE_ENUM &&\n            type_get_type(t) != TYPE_POINTER &&\n            type_get_type(t) != TYPE_ARRAY);\n}\n\nstatic unsigned char get_parameter_fc( const var_t *var, int is_return, unsigned short *flags,\n                                       unsigned int *stack_size, unsigned int *typestring_offset )\n{\n    unsigned int alignment, server_size = 0, buffer_size = 0;\n    unsigned char fc = 0;\n    int is_byval;\n    int is_in = is_attr(var->attrs, ATTR_IN);\n    int is_out = is_attr(var->attrs, ATTR_OUT);\n\n    if (is_return) is_out = TRUE;\n    else if (!is_in && !is_out) is_in = TRUE;\n\n    *flags = 0;\n    *stack_size = get_stack_size( var, &is_byval );\n    *typestring_offset = var->typestring_offset;\n\n    if (is_in)     *flags |= IsIn;\n    if (is_out)    *flags |= IsOut;\n    if (is_return) *flags |= IsReturn;\n\n    if (!is_string_type( var->attrs, var->type ))\n        buffer_size = get_required_buffer_size_type( var->type, NULL, var->attrs, TRUE, &alignment );\n\n    switch (typegen_detect_type( var->type, var->attrs, TDT_ALL_TYPES ))\n    {\n    case TGT_BASIC:\n        *flags |= IsBasetype;\n        fc = get_basic_fc_signed( var->type );\n        if (fc == FC_BIND_PRIMITIVE)\n        {\n            buffer_size = 4;  /* actually 0 but avoids setting MustSize */\n            fc = FC_LONG;\n        }\n        break;\n    case TGT_ENUM:\n        *flags |= IsBasetype;\n        fc = get_enum_fc( var->type );\n        break;\n    case TGT_RANGE:\n        *flags |= IsByValue;\n        break;\n    case TGT_STRUCT:\n    case TGT_UNION:\n    case TGT_USER_TYPE:\n        *flags |= MustFree | (is_byval ? IsByValue : IsSimpleRef);\n        break;\n    case TGT_IFACE_POINTER:\n        *flags |= MustFree;\n        break;\n    case TGT_ARRAY:\n        *flags |= MustFree;\n        if (type_array_is_decl_as_ptr(var->type) && var->type->details.array.ptr_tfsoff &&\n            get_pointer_fc( var->type, var->attrs, !is_return ) == FC_RP)\n        {\n            *typestring_offset = var->type->typestring_offset;\n            *flags |= IsSimpleRef;\n        }\n        break;\n    case TGT_STRING:\n        *flags |= MustFree;\n        if (is_declptr( var->type ) && get_pointer_fc( var->type, var->attrs, !is_return ) == FC_RP)\n        {\n            /* skip over pointer description straight to string description */\n            if (is_conformant_array( var->type )) *typestring_offset += 4;\n            else *typestring_offset += 2;\n            *flags |= IsSimpleRef;\n        }\n        break;\n    case TGT_CTXT_HANDLE_POINTER:\n        *flags |= IsSimpleRef;\n        *typestring_offset += 4;\n        /* fall through */\n    case TGT_CTXT_HANDLE:\n        buffer_size = 20;\n        break;\n    case TGT_POINTER:\n        if (get_pointer_fc( var->type, var->attrs, !is_return ) == FC_RP)\n        {\n            const type_t *ref = type_pointer_get_ref( var->type );\n\n            if (!is_string_type( var->attrs, ref ))\n                buffer_size = get_required_buffer_size_type( ref, NULL, NULL, TRUE, &alignment );\n\n            switch (typegen_detect_type( ref, NULL, TDT_ALL_TYPES ))\n            {\n            case TGT_BASIC:\n                *flags |= IsSimpleRef | IsBasetype;\n                fc = get_basic_fc( ref );\n                if (!is_in && is_out) server_size = pointer_size;\n                break;\n            case TGT_ENUM:\n                if ((fc = get_enum_fc( ref )) == FC_ENUM32)\n                {\n                    *flags |= IsSimpleRef | IsBasetype;\n                    if (!is_in && is_out) server_size = pointer_size;\n                }\n                else\n                {\n                    server_size = pointer_size;\n                }\n                break;\n            case TGT_UNION:\n            case TGT_USER_TYPE:\n            case TGT_RANGE:\n                *flags |= IsSimpleRef | MustFree;\n                *typestring_offset = ref->typestring_offset;\n                if (!is_in && is_out) server_size = type_memsize( ref );\n                break;\n            case TGT_STRING:\n            case TGT_POINTER:\n            case TGT_ARRAY:\n            case TGT_CTXT_HANDLE:\n            case TGT_CTXT_HANDLE_POINTER:\n                *flags |= MustFree;\n                server_size = pointer_size;\n                break;\n            case TGT_IFACE_POINTER:\n                *flags |= MustFree;\n                if (is_in && is_out) server_size = pointer_size;\n                break;\n            case TGT_STRUCT:\n                *flags |= IsSimpleRef | MustFree;\n                *typestring_offset = ref->typestring_offset;\n                switch (get_struct_fc(ref))\n                {\n                case FC_STRUCT:\n                case FC_PSTRUCT:\n                case FC_BOGUS_STRUCT:\n                    if (!is_in && is_out) server_size = type_memsize( ref );\n                    break;\n                default:\n                    break;\n                }\n                break;\n            case TGT_INVALID:\n                assert(0);\n            }\n        }\n        else  /* not ref pointer */\n        {\n            *flags |= MustFree;\n        }\n        break;\n    case TGT_INVALID:\n        assert(0);\n    }\n\n    if (!buffer_size) *flags |= MustSize;\n\n    if (server_size)\n    {\n        server_size = (server_size + 7) / 8;\n        if (server_size < 8) *flags |= server_size << 13;\n    }\n    return fc;\n}\n\nstatic unsigned char get_func_oi2_flags( const var_t *func )\n{\n    const var_t *var;\n    var_list_t *args = type_get_function_args( func->type );\n    var_t *retval = type_function_get_retval( func->type );\n    unsigned char oi2_flags = 0x40;  /* HasExtensions */\n    unsigned short flags;\n    unsigned int stack_size, typestring_offset;\n\n    if (args) LIST_FOR_EACH_ENTRY( var, args, const var_t, entry )\n    {\n        get_parameter_fc( var, 0, &flags, &stack_size, &typestring_offset );\n        if (flags & MustSize)\n        {\n            if (flags & IsIn) oi2_flags |= 0x02; /* ClientMustSize */\n            if (flags & IsOut) oi2_flags |= 0x01;  /* ServerMustSize */\n        }\n    }\n\n    if (!is_void( retval->type ))\n    {\n        oi2_flags |= 0x04;  /* HasRet */\n        get_parameter_fc( retval, 1, &flags, &stack_size, &typestring_offset );\n        if (flags & MustSize) oi2_flags |= 0x01;  /* ServerMustSize */\n    }\n    return oi2_flags;\n}\n\nstatic unsigned int write_new_procformatstring_type(FILE *file, int indent, const var_t *var,\n                                                    int is_return, unsigned int *stack_offset)\n{\n    char buffer[128];\n    unsigned int stack_size, typestring_offset;\n    unsigned short flags;\n    unsigned char fc = get_parameter_fc( var, is_return, &flags, &stack_size, &typestring_offset );\n\n    strcpy( buffer, \"/* flags:\" );\n    if (flags & MustSize) strcat( buffer, \" must size,\" );\n    if (flags & MustFree) strcat( buffer, \" must free,\" );\n    if (flags & IsPipe) strcat( buffer, \" pipe,\" );\n    if (flags & IsIn) strcat( buffer, \" in,\" );\n    if (flags & IsOut) strcat( buffer, \" out,\" );\n    if (flags & IsReturn) strcat( buffer, \" return,\" );\n    if (flags & IsBasetype) strcat( buffer, \" base type,\" );\n    if (flags & IsByValue) strcat( buffer, \" by value,\" );\n    if (flags & IsSimpleRef) strcat( buffer, \" simple ref,\" );\n    if (flags >> 13) sprintf( buffer + strlen(buffer), \" srv size=%u,\", (flags >> 13) * 8 );\n    strcpy( buffer + strlen( buffer ) - 1, \" */\" );\n    print_file( file, indent, \"NdrFcShort(0x%hx),\\t%s\\n\", flags, buffer );\n    print_file( file, indent, \"NdrFcShort(0x%x),\t/* stack offset = %u */\\n\",\n                *stack_offset, *stack_offset );\n    if (flags & IsBasetype)\n    {\n        print_file( file, indent, \"0x%02x,\t/* %s */\\n\", fc, string_of_type(fc) );\n        print_file( file, indent, \"0x0,\\n\" );\n    }\n    else\n        print_file( file, indent, \"NdrFcShort(0x%x),\t/* type offset = %u */\\n\",\n                    typestring_offset, typestring_offset );\n    *stack_offset += max( stack_size, pointer_size );\n    return 6;\n}\n\nstatic unsigned int write_old_procformatstring_type(FILE *file, int indent, const var_t *var,\n                                                    int is_return, int is_interpreted)\n{\n    unsigned int size;\n\n    int is_in = is_attr(var->attrs, ATTR_IN);\n    int is_out = is_attr(var->attrs, ATTR_OUT);\n\n    if (!is_in && !is_out) is_in = TRUE;\n\n    if (type_get_type(var->type) == TYPE_BASIC ||\n        type_get_type(var->type) == TYPE_ENUM)\n    {\n        unsigned char fc;\n\n        if (is_return)\n            print_file(file, indent, \"0x53,    /* FC_RETURN_PARAM_BASETYPE */\\n\");\n        else\n            print_file(file, indent, \"0x4e,    /* FC_IN_PARAM_BASETYPE */\\n\");\n\n        if (type_get_type(var->type) == TYPE_ENUM)\n        {\n            fc = get_enum_fc(var->type);\n        }\n        else\n        {\n            fc = get_basic_fc_signed(var->type);\n\n            if (fc == FC_BIND_PRIMITIVE)\n                fc = FC_IGNORE;\n        }\n\n        print_file(file, indent, \"0x%02x,    /* %s */\\n\",\n                   fc, string_of_type(fc));\n        size = 2; /* includes param type prefix */\n    }\n    else\n    {\n        unsigned short offset = var->typestring_offset;\n\n        if (!is_interpreted && is_array(var->type) &&\n            type_array_is_decl_as_ptr(var->type) &&\n            var->type->details.array.ptr_tfsoff)\n            offset = var->type->typestring_offset;\n\n        if (is_return)\n            print_file(file, indent, \"0x52,    /* FC_RETURN_PARAM */\\n\");\n        else if (is_in && is_out)\n            print_file(file, indent, \"0x50,    /* FC_IN_OUT_PARAM */\\n\");\n        else if (is_out)\n            print_file(file, indent, \"0x51,    /* FC_OUT_PARAM */\\n\");\n        else\n            print_file(file, indent, \"0x4d,    /* FC_IN_PARAM */\\n\");\n\n        size = get_stack_size( var, NULL );\n        print_file(file, indent, \"0x%02x,\\n\", size / pointer_size );\n        print_file(file, indent, \"NdrFcShort(0x%x),\t/* type offset = %u */\\n\", offset, offset);\n        size = 4; /* includes param type prefix */\n    }\n    return size;\n}\n\nint is_interpreted_func( const type_t *iface, const var_t *func )\n{\n    const char *str;\n    const var_t *var;\n    const var_list_t *args = type_get_function_args( func->type );\n    const type_t *ret_type = type_function_get_rettype( func->type );\n\n    if (type_get_type( ret_type ) == TYPE_BASIC)\n    {\n        switch (type_basic_get_type( ret_type ))\n        {\n        case TYPE_BASIC_INT64:\n        case TYPE_BASIC_HYPER:\n            /* return value must fit in a long_ptr */\n            if (pointer_size < 8) return 0;\n            break;\n        case TYPE_BASIC_FLOAT:\n        case TYPE_BASIC_DOUBLE:\n            /* floating point values can't be returned */\n            return 0;\n        default:\n            break;\n        }\n    }\n    if (get_stub_mode() != MODE_Oif && args)\n    {\n        LIST_FOR_EACH_ENTRY( var, args, const var_t, entry )\n            switch (type_get_type( var->type ))\n            {\n            case TYPE_BASIC:\n                switch (type_basic_get_type( var->type ))\n                {\n                /* floating point arguments are not supported in Oi mode */\n                case TYPE_BASIC_FLOAT:  return 0;\n                case TYPE_BASIC_DOUBLE: return 0;\n                default: break;\n                }\n                break;\n            /* unions passed by value are not supported in Oi mode */\n            case TYPE_UNION: return 0;\n            case TYPE_ENCAPSULATED_UNION: return 0;\n            default: break;\n            }\n    }\n\n    if ((str = get_attrp( func->attrs, ATTR_OPTIMIZE ))) return !strcmp( str, \"i\" );\n    if ((str = get_attrp( iface->attrs, ATTR_OPTIMIZE ))) return !strcmp( str, \"i\" );\n    return (get_stub_mode() != MODE_Os);\n}\n\nstatic void write_proc_func_header( FILE *file, int indent, const type_t *iface,\n                                    const var_t *func, unsigned int *offset,\n                                    unsigned short num_proc )\n{\n    var_t *var;\n    var_list_t *args = type_get_function_args( func->type );\n    unsigned char explicit_fc, implicit_fc;\n    unsigned char handle_flags;\n    const var_t *handle_var = get_func_handle_var( iface, func, &explicit_fc, &implicit_fc );\n    unsigned char oi_flags = Oi_HAS_RPCFLAGS | Oi_USE_NEW_INIT_ROUTINES;\n    unsigned int rpc_flags = get_rpc_flags( func->attrs );\n    unsigned int nb_args = 0;\n    unsigned int stack_size = 0;\n    unsigned short param_num = 0;\n    unsigned short handle_stack_offset = 0;\n    unsigned short handle_param_num = 0;\n\n    if (is_full_pointer_function( func )) oi_flags |= Oi_FULL_PTR_USED;\n    if (is_object( iface ))\n    {\n        oi_flags |= Oi_OBJECT_PROC;\n        if (get_stub_mode() == MODE_Oif) oi_flags |= Oi_OBJ_USE_V2_INTERPRETER;\n        stack_size += pointer_size;\n    }\n\n    if (args) LIST_FOR_EACH_ENTRY( var, args, var_t, entry )\n    {\n        if (var == handle_var)\n        {\n            handle_stack_offset = stack_size;\n            handle_param_num = param_num;\n        }\n        stack_size += get_stack_size( var, NULL );\n        param_num++;\n        nb_args++;\n    }\n    if (!is_void( type_function_get_rettype( func->type )))\n    {\n        stack_size += pointer_size;\n        nb_args++;\n    }\n\n    print_file( file, 0, \"/* %u (procedure %s::%s) */\\n\", *offset, iface->name, func->name );\n    print_file( file, indent, \"0x%02x,\\t/* %s */\\n\", implicit_fc,\n                implicit_fc ? string_of_type(implicit_fc) : \"explicit handle\" );\n    print_file( file, indent, \"0x%02x,\\n\", oi_flags );\n    print_file( file, indent, \"NdrFcLong(0x%x),\\n\", rpc_flags );\n    print_file( file, indent, \"NdrFcShort(0x%hx),\\t/* method %hu */\\n\", num_proc, num_proc );\n    print_file( file, indent, \"NdrFcShort(0x%x),\\t/* stack size = %u */\\n\", stack_size, stack_size );\n    *offset += 10;\n\n    if (!implicit_fc)\n    {\n        switch (explicit_fc)\n        {\n        case FC_BIND_PRIMITIVE:\n            handle_flags = 0;\n            print_file( file, indent, \"0x%02x,\\t/* %s */\\n\", explicit_fc, string_of_type(explicit_fc) );\n            print_file( file, indent, \"0x%02x,\\n\", handle_flags );\n            print_file( file, indent, \"NdrFcShort(0x%hx),\\t/* stack offset = %hu */\\n\",\n                        handle_stack_offset, handle_stack_offset );\n            *offset += 4;\n            break;\n        case FC_BIND_GENERIC:\n            handle_flags = type_memsize( handle_var->type );\n            print_file( file, indent, \"0x%02x,\\t/* %s */\\n\", explicit_fc, string_of_type(explicit_fc) );\n            print_file( file, indent, \"0x%02x,\\n\", handle_flags );\n            print_file( file, indent, \"NdrFcShort(0x%hx),\\t/* stack offset = %hu */\\n\",\n                        handle_stack_offset, handle_stack_offset );\n            print_file( file, indent, \"0x%02x,\\n\", get_generic_handle_offset( handle_var->type ) );\n            print_file( file, indent, \"0x%x,\\t/* FC_PAD */\\n\", FC_PAD);\n            *offset += 6;\n            break;\n        case FC_BIND_CONTEXT:\n            handle_flags = get_contexthandle_flags( iface, handle_var->attrs, handle_var->type );\n            print_file( file, indent, \"0x%02x,\\t/* %s */\\n\", explicit_fc, string_of_type(explicit_fc) );\n            print_file( file, indent, \"0x%02x,\\n\", handle_flags );\n            print_file( file, indent, \"NdrFcShort(0x%hx),\\t/* stack offset = %hu */\\n\",\n                        handle_stack_offset, handle_stack_offset );\n            print_file( file, indent, \"0x%02x,\\n\", get_context_handle_offset( handle_var->type ) );\n            print_file( file, indent, \"0x%02x,\\t/* param %hu */\\n\", handle_param_num, handle_param_num );\n            *offset += 6;\n            break;\n        }\n    }\n\n    if (get_stub_mode() == MODE_Oif)\n    {\n        unsigned char oi2_flags = get_func_oi2_flags( func );\n        unsigned char ext_flags = 0;\n        unsigned int size;\n\n        if (is_attr( func->attrs, ATTR_NOTIFY )) ext_flags |= 0x08;  /* HasNotify */\n        if (is_attr( func->attrs, ATTR_NOTIFYFLAG )) ext_flags |= 0x10;  /* HasNotify2 */\n\n        size = get_function_buffer_size( func, PASS_IN );\n        print_file( file, indent, \"NdrFcShort(0x%x),\\t/* client buffer = %u */\\n\", size, size );\n        size = get_function_buffer_size( func, PASS_OUT );\n        print_file( file, indent, \"NdrFcShort(0x%x),\\t/* server buffer = %u */\\n\", size, size );\n        print_file( file, indent, \"0x%02x,\\n\", oi2_flags );\n        print_file( file, indent, \"0x%02x,\\t/* %u params */\\n\", nb_args, nb_args );\n        print_file( file, indent, \"0x%02x,\\n\", pointer_size == 8 ? 10 : 8 );\n        print_file( file, indent, \"0x%02x,\\n\", ext_flags );\n        print_file( file, indent, \"NdrFcShort(0x0),\\n\" );  /* server corr hint */\n        print_file( file, indent, \"NdrFcShort(0x0),\\n\" );  /* client corr hint */\n        print_file( file, indent, \"NdrFcShort(0x0),\\n\" );  /* FIXME: notify index */\n        *offset += 14;\n        if (pointer_size == 8)\n        {\n            unsigned short pos = 0, fpu_mask = 0;\n\n            if (is_object( iface )) pos += 2;\n            if (args) LIST_FOR_EACH_ENTRY( var, args, var_t, entry )\n            {\n                if (type_get_type( var->type ) == TYPE_BASIC)\n                {\n                    switch (type_basic_get_type( var->type ))\n                    {\n                    case TYPE_BASIC_FLOAT:  fpu_mask |= 1 << pos; break;\n                    case TYPE_BASIC_DOUBLE: fpu_mask |= 2 << pos; break;\n                    default: break;\n                    }\n                }\n                pos += 2;\n                if (pos >= 16) break;\n            }\n            print_file( file, indent, \"NdrFcShort(0x%x),\\n\", fpu_mask );  /* floating point mask */\n            *offset += 2;\n        }\n    }\n}\n\nstatic void write_procformatstring_func( FILE *file, int indent, const type_t *iface,\n                                         const var_t *func, unsigned int *offset,\n                                         unsigned short num_proc )\n{\n    unsigned int stack_offset = is_object( iface ) ? pointer_size : 0;\n    int is_interpreted = is_interpreted_func( iface, func );\n    int is_new_style = is_interpreted && (get_stub_mode() == MODE_Oif);\n    var_t *retval = type_function_get_retval( func->type );\n\n    if (is_interpreted) write_proc_func_header( file, indent, iface, func, offset, num_proc );\n\n    /* emit argument data */\n    if (type_get_function_args(func->type))\n    {\n        const var_t *var;\n        LIST_FOR_EACH_ENTRY( var, type_get_function_args(func->type), const var_t, entry )\n        {\n            print_file( file, 0, \"/* %u (parameter %s) */\\n\", *offset, var->name );\n            if (is_new_style)\n                *offset += write_new_procformatstring_type(file, indent, var, FALSE, &stack_offset);\n            else\n                *offset += write_old_procformatstring_type(file, indent, var, FALSE, is_interpreted);\n        }\n    }\n\n    /* emit return value data */\n    if (is_void(retval->type))\n    {\n        if (!is_new_style)\n        {\n            print_file(file, 0, \"/* %u (void) */\\n\", *offset);\n            print_file(file, indent, \"0x5b,\\t/* FC_END */\\n\");\n            print_file(file, indent, \"0x5c,\\t/* FC_PAD */\\n\");\n            *offset += 2;\n        }\n    }\n    else\n    {\n        print_file( file, 0, \"/* %u (return value) */\\n\", *offset );\n        if (is_new_style)\n            *offset += write_new_procformatstring_type(file, indent, retval, TRUE, &stack_offset);\n        else\n            *offset += write_old_procformatstring_type(file, indent, retval, TRUE, is_interpreted);\n    }\n}\n\nstatic void write_procformatstring_stmts(FILE *file, int indent, const statement_list_t *stmts,\n                                         type_pred_t pred, unsigned int *offset)\n{\n    const statement_t *stmt;\n    if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry )\n    {\n        if (stmt->type == STMT_TYPE && type_get_type(stmt->u.type) == TYPE_INTERFACE)\n        {\n            const statement_t *stmt_func;\n            const type_t *iface = stmt->u.type;\n            const type_t *parent = type_iface_get_inherit( iface );\n            int count = parent ? count_methods( parent ) : 0;\n\n            if (!pred(iface)) continue;\n            STATEMENTS_FOR_EACH_FUNC(stmt_func, type_iface_get_stmts(iface))\n            {\n                var_t *func = stmt_func->u.var;\n                if (is_local(func->attrs)) continue;\n                write_procformatstring_func( file, indent, iface, func, offset, count++ );\n            }\n        }\n    }\n}\n\nvoid write_procformatstring(FILE *file, const statement_list_t *stmts, type_pred_t pred)\n{\n    int indent = 0;\n    unsigned int offset = 0;\n\n    print_file(file, indent, \"static const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString =\\n\");\n    print_file(file, indent, \"{\\n\");\n    indent++;\n    print_file(file, indent, \"0,\\n\");\n    print_file(file, indent, \"{\\n\");\n    indent++;\n\n    write_procformatstring_stmts(file, indent, stmts, pred, &offset);\n\n    print_file(file, indent, \"0x0\\n\");\n    indent--;\n    print_file(file, indent, \"}\\n\");\n    indent--;\n    print_file(file, indent, \"};\\n\");\n    print_file(file, indent, \"\\n\");\n}\n\nvoid write_procformatstring_offsets( FILE *file, const type_t *iface )\n{\n    const statement_t *stmt;\n    int indent = 0;\n\n    print_file( file, indent,  \"static const unsigned short %s_FormatStringOffsetTable[] =\\n\",\n                iface->name );\n    print_file( file, indent,  \"{\\n\" );\n    indent++;\n    STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) )\n    {\n        var_t *func = stmt->u.var;\n        if (is_local( func->attrs )) continue;\n        print_file( file, indent,  \"%u,  /* %s */\\n\", func->procstring_offset, func->name );\n    }\n    indent--;\n    print_file( file, indent,  \"};\\n\\n\" );\n}\n\nstatic int write_base_type(FILE *file, const type_t *type, unsigned int *typestring_offset)\n{\n    unsigned char fc;\n\n    if (type_get_type(type) == TYPE_BASIC)\n        fc = get_basic_fc_signed(type);\n    else if (type_get_type(type) == TYPE_ENUM)\n        fc = get_enum_fc(type);\n    else\n        return 0;\n\n    print_file(file, 2, \"0x%02x,\\t/* %s */\\n\", fc, string_of_type(fc));\n    *typestring_offset += 1;\n    return 1;\n}\n\n/* write conformance / variance descriptor */\nstatic unsigned int write_conf_or_var_desc(FILE *file, const type_t *cont_type,\n                                           unsigned int baseoff, const type_t *type,\n                                           const expr_t *expr)\n{\n    unsigned char operator_type = 0;\n    unsigned char conftype = FC_NORMAL_CONFORMANCE;\n    const char *conftype_string = \"field\";\n    const expr_t *subexpr;\n    const type_t *iface = NULL;\n    const char *name;\n\n    if (!expr)\n    {\n        print_file(file, 2, \"NdrFcLong(0xffffffff),\\t/* -1 */\\n\");\n        return 4;\n    }\n\n    if (expr->is_const)\n    {\n        if (expr->cval > UCHAR_MAX * (USHRT_MAX + 1) + USHRT_MAX)\n            error(\"write_conf_or_var_desc: constant value %d is greater than \"\n                  \"the maximum constant size of %d\\n\", expr->cval,\n                  UCHAR_MAX * (USHRT_MAX + 1) + USHRT_MAX);\n\n        print_file(file, 2, \"0x%x, /* Corr desc: constant, val = %d */\\n\",\n                   FC_CONSTANT_CONFORMANCE, expr->cval);\n        print_file(file, 2, \"0x%x,\\n\", expr->cval >> 16);\n        print_file(file, 2, \"NdrFcShort(0x%hx),\\n\", (unsigned short)expr->cval);\n\n        return 4;\n    }\n\n    if (!cont_type)  /* top-level conformance */\n    {\n        conftype = FC_TOP_LEVEL_CONFORMANCE;\n        conftype_string = \"parameter\";\n        cont_type = current_func->type;\n        name = current_func->name;\n        iface = current_iface;\n    }\n    else\n    {\n        name = cont_type->name;\n        if (is_ptr(type) || (is_array(type) && type_array_is_decl_as_ptr(type)))\n        {\n            conftype = FC_POINTER_CONFORMANCE;\n            conftype_string = \"field pointer\";\n        }\n    }\n\n    subexpr = expr;\n    switch (subexpr->type)\n    {\n    case EXPR_PPTR:\n        subexpr = subexpr->ref;\n        operator_type = FC_DEREFERENCE;\n        break;\n    case EXPR_DIV:\n        if (subexpr->u.ext->is_const && (subexpr->u.ext->cval == 2))\n        {\n            subexpr = subexpr->ref;\n            operator_type = FC_DIV_2;\n        }\n        break;\n    case EXPR_MUL:\n        if (subexpr->u.ext->is_const && (subexpr->u.ext->cval == 2))\n        {\n            subexpr = subexpr->ref;\n            operator_type = FC_MULT_2;\n        }\n        break;\n    case EXPR_SUB:\n        if (subexpr->u.ext->is_const && (subexpr->u.ext->cval == 1))\n        {\n            subexpr = subexpr->ref;\n            operator_type = FC_SUB_1;\n        }\n        break;\n    case EXPR_ADD:\n        if (subexpr->u.ext->is_const && (subexpr->u.ext->cval == 1))\n        {\n            subexpr = subexpr->ref;\n            operator_type = FC_ADD_1;\n        }\n        break;\n    default:\n        break;\n    }\n\n    if (subexpr->type == EXPR_IDENTIFIER)\n    {\n        const type_t *correlation_variable = NULL;\n        unsigned char param_type = 0;\n        unsigned int offset = 0;\n        const var_t *var;\n        struct expr_loc expr_loc;\n\n        if (type_get_type(cont_type) == TYPE_FUNCTION)\n        {\n            var_list_t *args = type_get_function_args( cont_type );\n\n            if (is_object( iface )) offset += pointer_size;\n            if (args) LIST_FOR_EACH_ENTRY( var, args, const var_t, entry )\n            {\n                if (var->name && !strcmp(var->name, subexpr->u.sval))\n                {\n                    expr_loc.v = var;\n                    correlation_variable = var->type;\n                    break;\n                }\n                offset += get_stack_size( var, NULL );\n            }\n        }\n        else\n        {\n            var_list_t *fields = type_struct_get_fields( cont_type );\n\n            if (fields) LIST_FOR_EACH_ENTRY( var, fields, const var_t, entry )\n            {\n                unsigned int size = field_memsize( var->type, &offset );\n                if (var->name && !strcmp(var->name, subexpr->u.sval))\n                {\n                    expr_loc.v = var;\n                    correlation_variable = var->type;\n                    break;\n                }\n                offset += size;\n            }\n        }\n\n        if (!correlation_variable)\n            error(\"write_conf_or_var_desc: couldn't find variable %s in %s\\n\", subexpr->u.sval, name);\n        expr_loc.attr = NULL;\n        correlation_variable = expr_resolve_type(&expr_loc, cont_type, expr);\n\n        offset -= baseoff;\n\n        if (type_get_type(correlation_variable) == TYPE_BASIC)\n        {\n            switch (get_basic_fc(correlation_variable))\n            {\n            case FC_CHAR:\n            case FC_SMALL:\n                param_type = FC_SMALL;\n                break;\n            case FC_BYTE:\n            case FC_USMALL:\n                param_type = FC_USMALL;\n                break;\n            case FC_WCHAR:\n            case FC_SHORT:\n                param_type = FC_SHORT;\n                break;\n            case FC_USHORT:\n                param_type = FC_USHORT;\n                break;\n            case FC_LONG:\n                param_type = FC_LONG;\n                break;\n            case FC_ULONG:\n                param_type = FC_ULONG;\n                break;\n            default:\n                error(\"write_conf_or_var_desc: conformance variable type not supported 0x%x\\n\",\n                      get_basic_fc(correlation_variable));\n            }\n        }\n        else if (type_get_type(correlation_variable) == TYPE_ENUM)\n        {\n            if (get_enum_fc(correlation_variable) == FC_ENUM32)\n                param_type = FC_LONG;\n            else\n                param_type = FC_SHORT;\n        }\n        else if (type_get_type(correlation_variable) == TYPE_POINTER)\n        {\n            if (pointer_size == 8)\n                param_type = FC_HYPER;\n            else\n                param_type = FC_LONG;\n        }\n        else\n        {\n            error(\"write_conf_or_var_desc: non-arithmetic type used as correlation variable %s\\n\",\n                  subexpr->u.sval);\n            return 0;\n        }\n\n        print_file(file, 2, \"0x%x,\\t/* Corr desc: %s %s, %s */\\n\",\n                   conftype | param_type, conftype_string, subexpr->u.sval, string_of_type(param_type));\n        print_file(file, 2, \"0x%x,\\t/* %s */\\n\", operator_type,\n                   operator_type ? string_of_type(operator_type) : \"no operators\");\n        print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* offset = %d */\\n\",\n                   (unsigned short)offset, offset);\n    }\n    else if (!iface || is_interpreted_func( iface, current_func ))\n    {\n        unsigned int callback_offset = 0;\n        struct expr_eval_routine *eval;\n        int found = 0;\n\n        LIST_FOR_EACH_ENTRY(eval, &expr_eval_routines, struct expr_eval_routine, entry)\n        {\n            if (eval->cont_type == cont_type ||\n                (type_get_type( eval->cont_type ) == type_get_type( cont_type ) &&\n                 eval->iface == iface &&\n                 eval->name && name && !strcmp(eval->name, name) &&\n                 !compare_expr(eval->expr, expr)))\n            {\n                found = 1;\n                break;\n            }\n            callback_offset++;\n        }\n\n        if (!found)\n        {\n            eval = xmalloc (sizeof(*eval));\n            eval->iface = iface;\n            eval->cont_type = cont_type;\n            eval->name = xstrdup( name );\n            eval->baseoff = baseoff;\n            eval->expr = expr;\n            list_add_tail (&expr_eval_routines, &eval->entry);\n        }\n\n        if (callback_offset > USHRT_MAX)\n            error(\"Maximum number of callback routines reached\\n\");\n\n        print_file(file, 2, \"0x%x,\\t/* Corr desc: %s in %s */\\n\", conftype, conftype_string, name);\n        print_file(file, 2, \"0x%x,\\t/* %s */\\n\", FC_CALLBACK, \"FC_CALLBACK\");\n        print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* %u */\\n\", (unsigned short)callback_offset, callback_offset);\n    }\n    else  /* output a dummy corr desc that isn't used */\n    {\n        print_file(file, 2, \"0x%x,\\t/* Corr desc: unused for %s */\\n\", conftype, name);\n        print_file(file, 2, \"0x0,\\n\" );\n        print_file(file, 2, \"NdrFcShort(0x0),\\n\" );\n    }\n    return 4;\n}\n\n/* return size and start offset of a data field based on current offset */\nstatic unsigned int field_memsize(const type_t *type, unsigned int *offset)\n{\n    unsigned int align = 0;\n    unsigned int size = type_memsize_and_alignment( type, &align );\n\n    *offset = ROUND_SIZE( *offset, align );\n    return size;\n}\n\nstatic unsigned int fields_memsize(const var_list_t *fields, unsigned int *align)\n{\n    unsigned int size = 0;\n    unsigned int max_align;\n    const var_t *v;\n\n    if (!fields) return 0;\n    LIST_FOR_EACH_ENTRY( v, fields, const var_t, entry )\n    {\n        unsigned int falign = 0;\n        unsigned int fsize = type_memsize_and_alignment(v->type, &falign);\n        if (*align < falign) *align = falign;\n        falign = clamp_align(falign);\n        size = ROUND_SIZE(size, falign);\n        size += fsize;\n    }\n\n    max_align = clamp_align(*align);\n    size = ROUND_SIZE(size, max_align);\n\n    return size;\n}\n\nstatic unsigned int union_memsize(const var_list_t *fields, unsigned int *pmaxa)\n{\n    unsigned int size, maxs = 0;\n    unsigned int align = *pmaxa;\n    const var_t *v;\n\n    if (fields) LIST_FOR_EACH_ENTRY( v, fields, const var_t, entry )\n    {\n        /* we could have an empty default field with NULL type */\n        if (v->type)\n        {\n            size = type_memsize_and_alignment(v->type, &align);\n            if (maxs < size) maxs = size;\n            if (*pmaxa < align) *pmaxa = align;\n        }\n    }\n\n    return maxs;\n}\n\nunsigned int type_memsize_and_alignment(const type_t *t, unsigned int *align)\n{\n    unsigned int size = 0;\n\n    switch (type_get_type(t))\n    {\n    case TYPE_BASIC:\n        switch (get_basic_fc(t))\n        {\n        case FC_BYTE:\n        case FC_CHAR:\n        case FC_USMALL:\n        case FC_SMALL:\n            size = 1;\n            if (size > *align) *align = size;\n            break;\n        case FC_WCHAR:\n        case FC_USHORT:\n        case FC_SHORT:\n            size = 2;\n            if (size > *align) *align = size;\n            break;\n        case FC_ULONG:\n        case FC_LONG:\n        case FC_ERROR_STATUS_T:\n        case FC_FLOAT:\n            size = 4;\n            if (size > *align) *align = size;\n            break;\n        case FC_HYPER:\n        case FC_DOUBLE:\n            size = 8;\n            if (size > *align) *align = size;\n            break;\n        case FC_INT3264:\n        case FC_UINT3264:\n        case FC_BIND_PRIMITIVE:\n            assert( pointer_size );\n            size = pointer_size;\n            if (size > *align) *align = size;\n            break;\n        default:\n            error(\"type_memsize: Unknown type 0x%x\\n\", get_basic_fc(t));\n            size = 0;\n        }\n        break;\n    case TYPE_ENUM:\n        switch (get_enum_fc(t))\n        {\n        case FC_ENUM16:\n        case FC_ENUM32:\n            size = 4;\n            if (size > *align) *align = size;\n            break;\n        default:\n            error(\"type_memsize: Unknown enum type\\n\");\n            size = 0;\n        }\n        break;\n    case TYPE_STRUCT:\n        size = fields_memsize(type_struct_get_fields(t), align);\n        break;\n    case TYPE_ENCAPSULATED_UNION:\n        size = fields_memsize(type_encapsulated_union_get_fields(t), align);\n        break;\n    case TYPE_UNION:\n        size = union_memsize(type_union_get_cases(t), align);\n        break;\n    case TYPE_POINTER:\n    case TYPE_INTERFACE:\n        assert( pointer_size );\n        size = pointer_size;\n        if (size > *align) *align = size;\n        break;\n    case TYPE_ARRAY:\n        if (!type_array_is_decl_as_ptr(t))\n        {\n            if (is_conformant_array(t))\n            {\n                type_memsize_and_alignment(type_array_get_element(t), align);\n                size = 0;\n            }\n            else\n                size = type_array_get_dim(t) *\n                    type_memsize_and_alignment(type_array_get_element(t), align);\n        }\n        else /* declared as a pointer */\n        {\n            assert( pointer_size );\n            size = pointer_size;\n            if (size > *align) *align = size;\n        }\n        break;\n    case TYPE_ALIAS:\n    case TYPE_VOID:\n    case TYPE_COCLASS:\n    case TYPE_MODULE:\n    case TYPE_FUNCTION:\n    case TYPE_BITFIELD:\n        /* these types should not be encountered here due to language\n         * restrictions (interface, void, coclass, module), logical\n         * restrictions (alias - due to type_get_type call above) or\n         * checking restrictions (function, bitfield). */\n        assert(0);\n    }\n\n    return size;\n}\n\nunsigned int type_memsize(const type_t *t)\n{\n    unsigned int align = 0;\n    return type_memsize_and_alignment( t, &align );\n}\n\nstatic unsigned int type_buffer_alignment(const type_t *t)\n{\n    const var_list_t *fields;\n    const var_t *var;\n    unsigned int max = 0, align;\n\n    switch (type_get_type(t))\n    {\n    case TYPE_BASIC:\n        switch (get_basic_fc(t))\n        {\n        case FC_BYTE:\n        case FC_CHAR:\n        case FC_USMALL:\n        case FC_SMALL:\n            return 1;\n        case FC_WCHAR:\n        case FC_USHORT:\n        case FC_SHORT:\n            return 2;\n        case FC_ULONG:\n        case FC_LONG:\n        case FC_ERROR_STATUS_T:\n        case FC_FLOAT:\n        case FC_INT3264:\n        case FC_UINT3264:\n            return 4;\n        case FC_HYPER:\n        case FC_DOUBLE:\n            return 8;\n        default:\n            error(\"type_buffer_alignment: Unknown type 0x%x\\n\", get_basic_fc(t));\n        }\n        break;\n    case TYPE_ENUM:\n        switch (get_enum_fc(t))\n        {\n        case FC_ENUM16:\n            return 2;\n        case FC_ENUM32:\n            return 4;\n        default:\n            error(\"type_buffer_alignment: Unknown enum type\\n\");\n        }\n        break;\n    case TYPE_STRUCT:\n        if (!(fields = type_struct_get_fields(t))) break;\n        LIST_FOR_EACH_ENTRY( var, fields, const var_t, entry )\n        {\n            if (!var->type) continue;\n            align = type_buffer_alignment( var->type );\n            if (max < align) max = align;\n        }\n        break;\n    case TYPE_ENCAPSULATED_UNION:\n        if (!(fields = type_encapsulated_union_get_fields(t))) break;\n        LIST_FOR_EACH_ENTRY( var, fields, const var_t, entry )\n        {\n            if (!var->type) continue;\n            align = type_buffer_alignment( var->type );\n            if (max < align) max = align;\n        }\n        break;\n    case TYPE_UNION:\n        if (!(fields = type_union_get_cases(t))) break;\n        LIST_FOR_EACH_ENTRY( var, fields, const var_t, entry )\n        {\n            if (!var->type) continue;\n            align = type_buffer_alignment( var->type );\n            if (max < align) max = align;\n        }\n        break;\n    case TYPE_ARRAY:\n        if (!type_array_is_decl_as_ptr(t))\n            return type_buffer_alignment( type_array_get_element(t) );\n        /* else fall through */\n    case TYPE_POINTER:\n        return 4;\n    case TYPE_INTERFACE:\n    case TYPE_ALIAS:\n    case TYPE_VOID:\n    case TYPE_COCLASS:\n    case TYPE_MODULE:\n    case TYPE_FUNCTION:\n    case TYPE_BITFIELD:\n        /* these types should not be encountered here due to language\n         * restrictions (interface, void, coclass, module), logical\n         * restrictions (alias - due to type_get_type call above) or\n         * checking restrictions (function, bitfield). */\n        assert(0);\n    }\n    return max;\n}\n\nint is_full_pointer_function(const var_t *func)\n{\n    const var_t *var;\n    if (type_has_full_pointer(type_function_get_rettype(func->type), func->attrs, TRUE))\n        return TRUE;\n    if (!type_get_function_args(func->type))\n        return FALSE;\n    LIST_FOR_EACH_ENTRY( var, type_get_function_args(func->type), const var_t, entry )\n        if (type_has_full_pointer( var->type, var->attrs, TRUE ))\n            return TRUE;\n    return FALSE;\n}\n\nvoid write_full_pointer_init(FILE *file, int indent, const var_t *func, int is_server)\n{\n    print_file(file, indent, \"__frame->_StubMsg.FullPtrXlatTables = NdrFullPointerXlatInit(0,%s);\\n\",\n                   is_server ? \"XLAT_SERVER\" : \"XLAT_CLIENT\");\n    fprintf(file, \"\\n\");\n}\n\nvoid write_full_pointer_free(FILE *file, int indent, const var_t *func)\n{\n    print_file(file, indent, \"NdrFullPointerXlatFree(__frame->_StubMsg.FullPtrXlatTables);\\n\");\n    fprintf(file, \"\\n\");\n}\n\nstatic unsigned int write_nonsimple_pointer(FILE *file, const attr_list_t *attrs,\n                                            const type_t *type,\n                                            enum type_context context,\n                                            unsigned int offset,\n                                            unsigned int *typeformat_offset)\n{\n    unsigned int start_offset = *typeformat_offset;\n    short reloff = offset - (*typeformat_offset + 2);\n    int in_attr, out_attr;\n    int pointer_type;\n    unsigned char flags = 0;\n\n    pointer_type = get_pointer_fc_context(type, attrs, context);\n\n    in_attr = is_attr(attrs, ATTR_IN);\n    out_attr = is_attr(attrs, ATTR_OUT);\n    if (!in_attr && !out_attr) in_attr = 1;\n\n    if (out_attr && !in_attr && pointer_type == FC_RP)\n        flags |= FC_ALLOCED_ON_STACK;\n\n    if (is_ptr(type))\n    {\n        type_t *ref = type_pointer_get_ref(type);\n        if(is_declptr(ref) && !is_user_type(ref))\n            flags |= FC_POINTER_DEREF;\n    }\n\n    print_file(file, 2, \"0x%x, 0x%x,\\t\\t/* %s\",\n               pointer_type,\n               flags,\n               string_of_type(pointer_type));\n    if (file)\n    {\n        if (flags & FC_ALLOCED_ON_STACK)\n            fprintf(file, \" [allocated_on_stack]\");\n        if (flags & FC_POINTER_DEREF)\n            fprintf(file, \" [pointer_deref]\");\n        fprintf(file, \" */\\n\");\n    }\n\n    print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* Offset= %hd (%u) */\\n\", reloff, reloff, offset);\n    *typeformat_offset += 4;\n\n    return start_offset;\n}\n\nstatic unsigned int write_simple_pointer(FILE *file, const attr_list_t *attrs,\n                                         const type_t *type, enum type_context context)\n{\n    unsigned char fc;\n    unsigned char pointer_fc;\n    const type_t *ref;\n    int in_attr = is_attr(attrs, ATTR_IN);\n    int out_attr = is_attr(attrs, ATTR_OUT);\n    unsigned char flags = FC_SIMPLE_POINTER;\n\n    /* for historical reasons, write_simple_pointer also handled string types,\n     * but no longer does. catch bad uses of the function with this check */\n    if (is_string_type(attrs, type))\n        error(\"write_simple_pointer: can't handle type %s which is a string type\\n\", type->name);\n\n    pointer_fc = get_pointer_fc_context(type, attrs, context);\n\n    ref = type_pointer_get_ref(type);\n    if (type_get_type(ref) == TYPE_ENUM)\n        fc = get_enum_fc(ref);\n    else\n        fc = get_basic_fc(ref);\n\n    if (out_attr && !in_attr)\n        flags |= FC_ALLOCED_ON_STACK;\n\n    print_file(file, 2, \"0x%02x, 0x%x,\\t/* %s %s[simple_pointer] */\\n\",\n               pointer_fc, flags, string_of_type(pointer_fc),\n               flags & FC_ALLOCED_ON_STACK ? \"[allocated_on_stack] \" : \"\");\n    print_file(file, 2, \"0x%02x,\\t/* %s */\\n\", fc, string_of_type(fc));\n    print_file(file, 2, \"0x5c,\\t/* FC_PAD */\\n\");\n    return 4;\n}\n\nstatic void print_start_tfs_comment(FILE *file, type_t *t, unsigned int tfsoff)\n{\n    print_file(file, 0, \"/* %u (\", tfsoff);\n    write_type_decl(file, t, NULL);\n    print_file(file, 0, \") */\\n\");\n}\n\nstatic unsigned int write_pointer_tfs(FILE *file, const attr_list_t *attrs,\n                                      type_t *type, unsigned int ref_offset,\n                                      enum type_context context,\n                                      unsigned int *typestring_offset)\n{\n    unsigned int offset = *typestring_offset;\n    type_t *ref = type_pointer_get_ref(type);\n\n    print_start_tfs_comment(file, type, offset);\n    update_tfsoff(type, offset, file);\n\n    switch (typegen_detect_type(ref, attrs, TDT_ALL_TYPES))\n    {\n    case TGT_BASIC:\n    case TGT_ENUM:\n        *typestring_offset += write_simple_pointer(file, attrs, type, context);\n        break;\n    default:\n        if (ref_offset)\n            write_nonsimple_pointer(file, attrs, type, context, ref_offset, typestring_offset);\n        break;\n    }\n\n    return offset;\n}\n\nstatic int processed(const type_t *type)\n{\n    return type->typestring_offset && !type->tfswrite;\n}\n\nstatic int user_type_has_variable_size(const type_t *t)\n{\n    if (is_ptr(t))\n        return TRUE;\n    else if (type_get_type(t) == TYPE_STRUCT)\n    {\n        switch (get_struct_fc(t))\n        {\n        case FC_PSTRUCT:\n        case FC_CSTRUCT:\n        case FC_CPSTRUCT:\n        case FC_CVSTRUCT:\n            return TRUE;\n        }\n    }\n    /* Note: Since this only applies to user types, we can't have a conformant\n       array here, and strings should get filed under pointer in this case.  */\n    return FALSE;\n}\n\nstatic unsigned int write_user_tfs(FILE *file, type_t *type, unsigned int *tfsoff)\n{\n    unsigned int start, absoff, flags;\n    const char *name = NULL;\n    type_t *utype = get_user_type(type, &name);\n    unsigned int usize = type_memsize(utype);\n    unsigned int ualign = type_buffer_alignment(utype);\n    unsigned int size = type_memsize(type);\n    unsigned short funoff = user_type_offset(name);\n    short reloff;\n\n    if (processed(type)) return type->typestring_offset;\n\n    guard_rec(type);\n\n    if(user_type_has_variable_size(utype)) usize = 0;\n\n    if (type_get_type(utype) == TYPE_BASIC ||\n        type_get_type(utype) == TYPE_ENUM)\n    {\n        unsigned char fc;\n\n        if (type_get_type(utype) == TYPE_ENUM)\n            fc = get_enum_fc(utype);\n        else\n            fc = get_basic_fc(utype);\n\n        absoff = *tfsoff;\n        print_start_tfs_comment(file, utype, absoff);\n        print_file(file, 2, \"0x%x,\\t/* %s */\\n\", fc, string_of_type(fc));\n        print_file(file, 2, \"0x5c,\\t/* FC_PAD */\\n\");\n        *tfsoff += 2;\n    }\n    else\n    {\n        if (!processed(utype))\n            write_embedded_types(file, NULL, utype, utype->name, TRUE, tfsoff);\n        absoff = utype->typestring_offset;\n    }\n\n    if (type_get_type(utype) == TYPE_POINTER && get_pointer_fc(utype, NULL, FALSE) == FC_RP)\n        flags = 0x40;\n    else if (type_get_type(utype) == TYPE_POINTER && get_pointer_fc(utype, NULL, FALSE) == FC_UP)\n        flags = 0x80;\n    else\n        flags = 0;\n\n    start = *tfsoff;\n    update_tfsoff(type, start, file);\n    print_start_tfs_comment(file, type, start);\n    print_file(file, 2, \"0x%x,\\t/* FC_USER_MARSHAL */\\n\", FC_USER_MARSHAL);\n    print_file(file, 2, \"0x%x,\\t/* Alignment= %d, Flags= %02x */\\n\",\n               flags | (ualign - 1), ualign - 1, flags);\n    print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* Function offset= %hu */\\n\", funoff, funoff);\n    print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* %u */\\n\", (unsigned short)size, size);\n    print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* %u */\\n\", (unsigned short)usize, usize);\n    *tfsoff += 8;\n    reloff = absoff - *tfsoff;\n    print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* Offset= %hd (%u) */\\n\", reloff, reloff, absoff);\n    *tfsoff += 2;\n    return start;\n}\n\nstatic void write_member_type(FILE *file, const type_t *cont,\n                              int cont_is_complex, const attr_list_t *attrs,\n                              const type_t *type, unsigned int *corroff,\n                              unsigned int *tfsoff)\n{\n    if (is_embedded_complex(type) && !is_conformant_array(type))\n    {\n        unsigned int absoff;\n        short reloff;\n\n        if (type_get_type(type) == TYPE_UNION && is_attr(attrs, ATTR_SWITCHIS))\n        {\n            absoff = *corroff;\n            *corroff += 8;\n        }\n        else\n        {\n            absoff = type->typestring_offset;\n        }\n        reloff = absoff - (*tfsoff + 2);\n\n        print_file(file, 2, \"0x4c,\\t/* FC_EMBEDDED_COMPLEX */\\n\");\n        /* padding is represented using FC_STRUCTPAD* types, so presumably\n         * this is left over in the format for historical purposes in MIDL\n         * or rpcrt4. */\n        print_file(file, 2, \"0x0,\\n\");\n        print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* Offset= %hd (%u) */\\n\",\n                   reloff, reloff, absoff);\n        *tfsoff += 4;\n    }\n    else if (is_ptr(type) || is_conformant_array(type))\n    {\n        unsigned char fc = cont_is_complex ? FC_POINTER : FC_LONG;\n        print_file(file, 2, \"0x%x,\\t/* %s */\\n\", fc, string_of_type(fc));\n        *tfsoff += 1;\n    }\n    else if (!write_base_type(file, type, tfsoff))\n        error(\"Unsupported member type %d\\n\", type_get_type(type));\n}\n\nstatic void write_array_element_type(FILE *file, const attr_list_t *attrs, const type_t *type,\n                                     int cont_is_complex, unsigned int *tfsoff)\n{\n    type_t *elem = type_array_get_element(type);\n\n    if (!is_embedded_complex(elem) && is_ptr(elem))\n    {\n        type_t *ref = type_pointer_get_ref(elem);\n\n        if (processed(ref))\n        {\n            write_nonsimple_pointer(file, NULL, elem, TYPE_CONTEXT_CONTAINER,\n                                    ref->typestring_offset, tfsoff);\n            return;\n        }\n        if (cont_is_complex && is_string_type(attrs, elem))\n        {\n            write_string_tfs(file, NULL, elem, TYPE_CONTEXT_CONTAINER, NULL, tfsoff);\n            return;\n        }\n        if (!is_string_type(NULL, elem) &&\n            (type_get_type(ref) == TYPE_BASIC || type_get_type(ref) == TYPE_ENUM))\n        {\n            *tfsoff += write_simple_pointer(file, NULL, elem, TYPE_CONTEXT_CONTAINER);\n            return;\n        }\n    }\n    write_member_type(file, type, cont_is_complex, NULL, elem, NULL, tfsoff);\n}\n\nstatic void write_end(FILE *file, unsigned int *tfsoff)\n{\n    if (*tfsoff % 2 == 0)\n    {\n        print_file(file, 2, \"0x%x,\\t/* FC_PAD */\\n\", FC_PAD);\n        *tfsoff += 1;\n    }\n    print_file(file, 2, \"0x%x,\\t/* FC_END */\\n\", FC_END);\n    *tfsoff += 1;\n}\n\nstatic void write_descriptors(FILE *file, type_t *type, unsigned int *tfsoff)\n{\n    unsigned int offset = 0;\n    var_list_t *fs = type_struct_get_fields(type);\n    var_t *f;\n\n    if (fs) LIST_FOR_EACH_ENTRY(f, fs, var_t, entry)\n    {\n        type_t *ft = f->type;\n        unsigned int size = field_memsize( ft, &offset );\n        if (type_get_type(ft) == TYPE_UNION && is_attr(f->attrs, ATTR_SWITCHIS))\n        {\n            short reloff;\n            unsigned int absoff = ft->typestring_offset;\n            if (is_attr(ft->attrs, ATTR_SWITCHTYPE))\n                absoff += 8; /* we already have a corr descr, skip it */\n            reloff = absoff - (*tfsoff + 6);\n            print_file(file, 0, \"/* %d */\\n\", *tfsoff);\n            print_file(file, 2, \"0x%x,\\t/* FC_NON_ENCAPSULATED_UNION */\\n\", FC_NON_ENCAPSULATED_UNION);\n            print_file(file, 2, \"0x%x,\\t/* FIXME: always FC_LONG */\\n\", FC_LONG);\n            write_conf_or_var_desc(file, current_structure, offset, ft,\n                                   get_attrp(f->attrs, ATTR_SWITCHIS));\n            print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* Offset= %hd (%u) */\\n\",\n                       (unsigned short)reloff, reloff, absoff);\n            *tfsoff += 8;\n        }\n        offset += size;\n    }\n}\n\nstatic int write_pointer_description_offsets(\n    FILE *file, const attr_list_t *attrs, type_t *type,\n    unsigned int *offset_in_memory, unsigned int *offset_in_buffer,\n    unsigned int *typestring_offset)\n{\n    int written = 0;\n\n    if ((is_ptr(type) && type_get_type(type_pointer_get_ref(type)) != TYPE_INTERFACE) ||\n        (is_array(type) && type_array_is_decl_as_ptr(type)))\n    {\n        if (offset_in_memory && offset_in_buffer)\n        {\n            unsigned int memsize;\n\n            /* pointer instance\n             *\n             * note that MSDN states that for pointer layouts in structures,\n             * this is a negative offset from the end of the structure, but\n             * this statement is incorrect. all offsets are positive */\n            print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* Memory offset = %d */\\n\", (unsigned short)*offset_in_memory, *offset_in_memory);\n            print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* Buffer offset = %d */\\n\", (unsigned short)*offset_in_buffer, *offset_in_buffer);\n\n            memsize = type_memsize(type);\n            *offset_in_memory += memsize;\n            /* increment these separately as in the case of conformant (varying)\n             * structures these start at different values */\n            *offset_in_buffer += memsize;\n        }\n        *typestring_offset += 4;\n\n        if (is_ptr(type))\n        {\n            type_t *ref = type_pointer_get_ref(type);\n\n            if (is_string_type(attrs, type))\n                write_string_tfs(file, attrs, type, TYPE_CONTEXT_CONTAINER, NULL, typestring_offset);\n            else if (processed(ref))\n                write_nonsimple_pointer(file, attrs, type, TYPE_CONTEXT_CONTAINER,\n                                        ref->typestring_offset, typestring_offset);\n            else if (type_get_type(ref) == TYPE_BASIC || type_get_type(ref) == TYPE_ENUM)\n                *typestring_offset += write_simple_pointer(file, attrs, type, TYPE_CONTEXT_CONTAINER);\n            else\n                error(\"write_pointer_description_offsets: type format string unknown\\n\");\n        }\n        else\n        {\n            unsigned int offset = type->typestring_offset;\n            /* skip over the pointer that is written for strings, since a\n             * pointer has to be written in-place here */\n            if (is_string_type(attrs, type))\n                offset += 4;\n            write_nonsimple_pointer(file, attrs, type, TYPE_CONTEXT_CONTAINER, offset, typestring_offset);\n        }\n\n        return 1;\n    }\n\n    if (is_array(type))\n    {\n        return write_pointer_description_offsets(\n            file, attrs, type_array_get_element(type), offset_in_memory,\n            offset_in_buffer, typestring_offset);\n    }\n    else if (is_non_complex_struct(type))\n    {\n        /* otherwise search for interesting fields to parse */\n        const var_t *v;\n        LIST_FOR_EACH_ENTRY( v, type_struct_get_fields(type), const var_t, entry )\n        {\n            if (offset_in_memory && offset_in_buffer)\n            {\n                unsigned int padding;\n                unsigned int align = 0;\n                type_memsize_and_alignment(v->type, &align);\n                padding = ROUNDING(*offset_in_memory, align);\n                *offset_in_memory += padding;\n                *offset_in_buffer += padding;\n            }\n            written += write_pointer_description_offsets(\n                file, v->attrs, v->type, offset_in_memory, offset_in_buffer,\n                typestring_offset);\n        }\n    }\n    else\n    {\n        if (offset_in_memory && offset_in_buffer)\n        {\n            unsigned int memsize = type_memsize(type);\n            *offset_in_memory += memsize;\n            /* increment these separately as in the case of conformant (varying)\n             * structures these start at different values */\n            *offset_in_buffer += memsize;\n        }\n    }\n\n    return written;\n}\n\nstatic int write_no_repeat_pointer_descriptions(\n    FILE *file, const attr_list_t *attrs, type_t *type,\n    unsigned int *offset_in_memory, unsigned int *offset_in_buffer,\n    unsigned int *typestring_offset)\n{\n    int written = 0;\n\n    if (is_ptr(type) ||\n        (is_conformant_array(type) && type_array_is_decl_as_ptr(type)))\n    {\n        print_file(file, 2, \"0x%02x, /* FC_NO_REPEAT */\\n\", FC_NO_REPEAT);\n        print_file(file, 2, \"0x%02x, /* FC_PAD */\\n\", FC_PAD);\n        *typestring_offset += 2;\n\n        return write_pointer_description_offsets(file, attrs, type,\n                       offset_in_memory, offset_in_buffer, typestring_offset);\n    }\n\n    if (is_non_complex_struct(type))\n    {\n        const var_t *v;\n        LIST_FOR_EACH_ENTRY( v, type_struct_get_fields(type), const var_t, entry )\n        {\n            if (offset_in_memory && offset_in_buffer)\n            {\n                unsigned int padding;\n                unsigned int align = 0;\n                type_memsize_and_alignment(v->type, &align);\n                padding = ROUNDING(*offset_in_memory, align);\n                *offset_in_memory += padding;\n                *offset_in_buffer += padding;\n            }\n            written += write_no_repeat_pointer_descriptions(\n                file, v->attrs, v->type,\n                offset_in_memory, offset_in_buffer, typestring_offset);\n        }\n    }\n    else\n    {\n        unsigned int memsize = type_memsize(type);\n        *offset_in_memory += memsize;\n        /* increment these separately as in the case of conformant (varying)\n         * structures these start at different values */\n        *offset_in_buffer += memsize;\n    }\n\n    return written;\n}\n\n/* Note: if file is NULL return value is number of pointers to write, else\n * it is the number of type format characters written */\nstatic int write_fixed_array_pointer_descriptions(\n    FILE *file, const attr_list_t *attrs, type_t *type,\n    unsigned int *offset_in_memory, unsigned int *offset_in_buffer,\n    unsigned int *typestring_offset)\n{\n    int pointer_count = 0;\n\n    if (type_get_type(type) == TYPE_ARRAY &&\n        !type_array_has_conformance(type) && !type_array_has_variance(type))\n    {\n        unsigned int temp = 0;\n        /* unfortunately, this needs to be done in two passes to avoid\n         * writing out redundant FC_FIXED_REPEAT descriptions */\n        pointer_count = write_pointer_description_offsets(\n            NULL, attrs, type_array_get_element(type), NULL, NULL, &temp);\n        if (pointer_count > 0)\n        {\n            unsigned int increment_size;\n            unsigned int offset_of_array_pointer_mem = 0;\n            unsigned int offset_of_array_pointer_buf = 0;\n\n            increment_size = type_memsize(type_array_get_element(type));\n\n            print_file(file, 2, \"0x%02x, /* FC_FIXED_REPEAT */\\n\", FC_FIXED_REPEAT);\n            print_file(file, 2, \"0x%02x, /* FC_PAD */\\n\", FC_PAD);\n            print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* Iterations = %d */\\n\", (unsigned short)type_array_get_dim(type), type_array_get_dim(type));\n            print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* Increment = %d */\\n\", (unsigned short)increment_size, increment_size);\n            print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* Offset to array = %d */\\n\", (unsigned short)*offset_in_memory, *offset_in_memory);\n            print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* Number of pointers = %d */\\n\", (unsigned short)pointer_count, pointer_count);\n            *typestring_offset += 10;\n\n            pointer_count = write_pointer_description_offsets(\n                file, attrs, type, &offset_of_array_pointer_mem,\n                &offset_of_array_pointer_buf, typestring_offset);\n        }\n    }\n    else if (type_get_type(type) == TYPE_STRUCT)\n    {\n        const var_t *v;\n        LIST_FOR_EACH_ENTRY( v, type_struct_get_fields(type), const var_t, entry )\n        {\n            if (offset_in_memory && offset_in_buffer)\n            {\n                unsigned int padding;\n                unsigned int align = 0;\n                type_memsize_and_alignment(v->type, &align);\n                padding = ROUNDING(*offset_in_memory, align);\n                *offset_in_memory += padding;\n                *offset_in_buffer += padding;\n            }\n            pointer_count += write_fixed_array_pointer_descriptions(\n                file, v->attrs, v->type, offset_in_memory, offset_in_buffer,\n                typestring_offset);\n        }\n    }\n    else\n    {\n        if (offset_in_memory && offset_in_buffer)\n        {\n            unsigned int memsize;\n            memsize = type_memsize(type);\n            *offset_in_memory += memsize;\n            /* increment these separately as in the case of conformant (varying)\n             * structures these start at different values */\n            *offset_in_buffer += memsize;\n        }\n    }\n\n    return pointer_count;\n}\n\n/* Note: if file is NULL return value is number of pointers to write, else\n * it is the number of type format characters written */\nstatic int write_conformant_array_pointer_descriptions(\n    FILE *file, const attr_list_t *attrs, type_t *type,\n    unsigned int offset_in_memory, unsigned int *typestring_offset)\n{\n    int pointer_count = 0;\n\n    if (is_conformant_array(type) && !type_array_has_variance(type))\n    {\n        unsigned int temp = 0;\n        /* unfortunately, this needs to be done in two passes to avoid\n         * writing out redundant FC_VARIABLE_REPEAT descriptions */\n        pointer_count = write_pointer_description_offsets(\n            NULL, attrs, type_array_get_element(type), NULL, NULL, &temp);\n        if (pointer_count > 0)\n        {\n            unsigned int increment_size;\n            unsigned int offset_of_array_pointer_mem = offset_in_memory;\n            unsigned int offset_of_array_pointer_buf = offset_in_memory;\n\n            increment_size = type_memsize(type_array_get_element(type));\n\n            if (increment_size > USHRT_MAX)\n                error(\"array size of %u bytes is too large\\n\", increment_size);\n\n            print_file(file, 2, \"0x%02x, /* FC_VARIABLE_REPEAT */\\n\", FC_VARIABLE_REPEAT);\n            print_file(file, 2, \"0x%02x, /* FC_FIXED_OFFSET */\\n\", FC_FIXED_OFFSET);\n            print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* Increment = %d */\\n\", (unsigned short)increment_size, increment_size);\n            print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* Offset to array = %d */\\n\", (unsigned short)offset_in_memory, offset_in_memory);\n            print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* Number of pointers = %d */\\n\", (unsigned short)pointer_count, pointer_count);\n            *typestring_offset += 8;\n\n            pointer_count = write_pointer_description_offsets(\n                file, attrs, type_array_get_element(type),\n                &offset_of_array_pointer_mem, &offset_of_array_pointer_buf,\n                typestring_offset);\n        }\n    }\n\n    return pointer_count;\n}\n\n/* Note: if file is NULL return value is number of pointers to write, else\n * it is the number of type format characters written */\nstatic int write_varying_array_pointer_descriptions(\n    FILE *file, const attr_list_t *attrs, type_t *type,\n    unsigned int *offset_in_memory, unsigned int *offset_in_buffer,\n    unsigned int *typestring_offset)\n{\n    int pointer_count = 0;\n\n    if (is_array(type) && type_array_has_variance(type))\n    {\n        unsigned int temp = 0;\n        /* unfortunately, this needs to be done in two passes to avoid\n         * writing out redundant FC_VARIABLE_REPEAT descriptions */\n        pointer_count = write_pointer_description_offsets(\n            NULL, attrs, type_array_get_element(type), NULL, NULL, &temp);\n        if (pointer_count > 0)\n        {\n            unsigned int increment_size;\n\n            increment_size = type_memsize(type_array_get_element(type));\n\n            if (increment_size > USHRT_MAX)\n                error(\"array size of %u bytes is too large\\n\", increment_size);\n\n            print_file(file, 2, \"0x%02x, /* FC_VARIABLE_REPEAT */\\n\", FC_VARIABLE_REPEAT);\n            print_file(file, 2, \"0x%02x, /* FC_VARIABLE_OFFSET */\\n\", FC_VARIABLE_OFFSET);\n            print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* Increment = %d */\\n\", (unsigned short)increment_size, increment_size);\n            print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* Offset to array = %d */\\n\", (unsigned short)*offset_in_memory, *offset_in_memory);\n            print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* Number of pointers = %d */\\n\", (unsigned short)pointer_count, pointer_count);\n            *typestring_offset += 8;\n\n            pointer_count = write_pointer_description_offsets(\n                file, attrs, type_array_get_element(type), offset_in_memory,\n                offset_in_buffer, typestring_offset);\n        }\n    }\n    else if (type_get_type(type) == TYPE_STRUCT)\n    {\n        const var_t *v;\n        LIST_FOR_EACH_ENTRY( v, type_struct_get_fields(type), const var_t, entry )\n        {\n            if (offset_in_memory && offset_in_buffer)\n            {\n                unsigned int align = 0, padding;\n\n                if (is_array(v->type) && type_array_has_variance(v->type))\n                {\n                    *offset_in_buffer = ROUND_SIZE(*offset_in_buffer, 4);\n                    /* skip over variance and offset in buffer */\n                    *offset_in_buffer += 8;\n                }\n\n                type_memsize_and_alignment(v->type, &align);\n                padding = ROUNDING(*offset_in_memory, align);\n                *offset_in_memory += padding;\n                *offset_in_buffer += padding;\n            }\n            pointer_count += write_varying_array_pointer_descriptions(\n                file, v->attrs, v->type, offset_in_memory, offset_in_buffer,\n                typestring_offset);\n        }\n    }\n    else\n    {\n        if (offset_in_memory && offset_in_buffer)\n        {\n            unsigned int memsize = type_memsize(type);\n            *offset_in_memory += memsize;\n            /* increment these separately as in the case of conformant (varying)\n             * structures these start at different values */\n            *offset_in_buffer += memsize;\n        }\n    }\n\n    return pointer_count;\n}\n\nstatic void write_pointer_description(FILE *file, const attr_list_t *attrs, type_t *type,\n                                      unsigned int *typestring_offset)\n{\n    unsigned int offset_in_buffer;\n    unsigned int offset_in_memory;\n\n    /* pass 1: search for single instance of a pointer (i.e. don't descend\n     * into arrays) */\n    if (!is_array(type))\n    {\n        offset_in_memory = 0;\n        offset_in_buffer = 0;\n        write_no_repeat_pointer_descriptions(\n            file, NULL, type,\n            &offset_in_memory, &offset_in_buffer, typestring_offset);\n    }\n\n    /* pass 2: search for pointers in fixed arrays */\n    offset_in_memory = 0;\n    offset_in_buffer = 0;\n    write_fixed_array_pointer_descriptions(\n        file, NULL, type,\n        &offset_in_memory, &offset_in_buffer, typestring_offset);\n\n    /* pass 3: search for pointers in conformant only arrays (but don't descend\n     * into conformant varying or varying arrays) */\n    if (is_conformant_array(type) &&\n        (type_array_is_decl_as_ptr(type) || !current_structure))\n        write_conformant_array_pointer_descriptions(\n            file, attrs, type, 0, typestring_offset);\n    else if (type_get_type(type) == TYPE_STRUCT &&\n             get_struct_fc(type) == FC_CPSTRUCT)\n    {\n        type_t *carray = find_array_or_string_in_struct(type)->type;\n        write_conformant_array_pointer_descriptions( file, NULL, carray,\n                                                     type_memsize(type), typestring_offset);\n    }\n\n    /* pass 4: search for pointers in varying arrays */\n    offset_in_memory = 0;\n    offset_in_buffer = 0;\n    write_varying_array_pointer_descriptions(\n            file, NULL, type,\n            &offset_in_memory, &offset_in_buffer, typestring_offset);\n}\n\nstatic unsigned int write_string_tfs(FILE *file, const attr_list_t *attrs,\n                                     type_t *type, enum type_context context,\n                                     const char *name, unsigned int *typestring_offset)\n{\n    unsigned int start_offset;\n    unsigned char rtype;\n    type_t *elem_type;\n    int is_processed = processed(type);\n\n    start_offset = *typestring_offset;\n\n    if (is_declptr(type))\n    {\n        unsigned char flag = is_conformant_array(type) ? 0 : FC_SIMPLE_POINTER;\n        int pointer_type = get_pointer_fc_context(type, attrs, context);\n        if (!pointer_type)\n            pointer_type = FC_RP;\n        print_start_tfs_comment(file, type, *typestring_offset);\n        print_file(file, 2,\"0x%x, 0x%x,\\t/* %s%s */\\n\",\n                   pointer_type, flag, string_of_type(pointer_type),\n                   flag ? \" [simple_pointer]\" : \"\");\n        *typestring_offset += 2;\n        if (!flag)\n        {\n            print_file(file, 2, \"NdrFcShort(0x2),\\n\");\n            *typestring_offset += 2;\n        }\n        is_processed = FALSE;\n    }\n\n    if (is_array(type))\n        elem_type = type_array_get_element(type);\n    else\n        elem_type = type_pointer_get_ref(type);\n\n    if (type_get_type(elem_type) == TYPE_POINTER && is_array(type))\n        return write_array_tfs(file, attrs, type, name, typestring_offset);\n\n    if (type_get_type(elem_type) != TYPE_BASIC)\n    {\n        error(\"write_string_tfs: Unimplemented for non-basic type %s\\n\", name);\n        return start_offset;\n    }\n\n    rtype = get_basic_fc(elem_type);\n    if ((rtype != FC_BYTE) && (rtype != FC_CHAR) && (rtype != FC_WCHAR))\n    {\n        error(\"write_string_tfs: Unimplemented for type 0x%x of name: %s\\n\", rtype, name);\n        return start_offset;\n    }\n\n    if (type_get_type(type) == TYPE_ARRAY && !type_array_has_conformance(type))\n    {\n        unsigned int dim = type_array_get_dim(type);\n\n        if (is_processed) return start_offset;\n\n        /* FIXME: multi-dimensional array */\n        if (0xffffu < dim)\n            error(\"array size for parameter %s exceeds %u bytes by %u bytes\\n\",\n                  name, 0xffffu, dim - 0xffffu);\n\n        if (rtype == FC_WCHAR)\n            WRITE_FCTYPE(file, FC_WSTRING, *typestring_offset);\n        else\n            WRITE_FCTYPE(file, FC_CSTRING, *typestring_offset);\n        print_file(file, 2, \"0x%x,\\t/* FC_PAD */\\n\", FC_PAD);\n        *typestring_offset += 2;\n\n        print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* %d */\\n\", (unsigned short)dim, dim);\n        *typestring_offset += 2;\n\n        update_tfsoff(type, start_offset, file);\n        return start_offset;\n    }\n    else if (is_conformant_array(type))\n    {\n        if (rtype == FC_WCHAR)\n            WRITE_FCTYPE(file, FC_C_WSTRING, *typestring_offset);\n        else\n            WRITE_FCTYPE(file, FC_C_CSTRING, *typestring_offset);\n        print_file(file, 2, \"0x%x,\\t/* FC_STRING_SIZED */\\n\", FC_STRING_SIZED);\n        *typestring_offset += 2;\n\n        *typestring_offset += write_conf_or_var_desc(\n            file, current_structure,\n            (!type_array_is_decl_as_ptr(type) && current_structure\n             ? type_memsize(current_structure)\n             : 0),\n            type, type_array_get_conformance(type));\n\n        update_tfsoff(type, start_offset, file);\n        return start_offset;\n    }\n    else\n    {\n        if (is_processed) return start_offset;\n\n        if (rtype == FC_WCHAR)\n            WRITE_FCTYPE(file, FC_C_WSTRING, *typestring_offset);\n        else\n            WRITE_FCTYPE(file, FC_C_CSTRING, *typestring_offset);\n        print_file(file, 2, \"0x%x,\\t/* FC_PAD */\\n\", FC_PAD);\n        *typestring_offset += 2;\n\n        update_tfsoff(type, start_offset, file);\n        return start_offset;\n    }\n}\n\nstatic unsigned int write_array_tfs(FILE *file, const attr_list_t *attrs, type_t *type,\n                                    const char *name, unsigned int *typestring_offset)\n{\n    const expr_t *length_is = type_array_get_variance(type);\n    const expr_t *size_is = type_array_get_conformance(type);\n    unsigned int align;\n    unsigned int size;\n    unsigned int start_offset;\n    unsigned char fc;\n    int pointer_type = get_attrv(attrs, ATTR_POINTERTYPE);\n    unsigned int baseoff\n        = !type_array_is_decl_as_ptr(type) && current_structure\n        ? type_memsize(current_structure)\n        : 0;\n\n    if (!pointer_type)\n        pointer_type = FC_RP;\n\n    if (!is_string_type(attrs, type_array_get_element(type)))\n        write_embedded_types(file, attrs, type_array_get_element(type), name, FALSE, typestring_offset);\n\n    size = type_memsize(is_conformant_array(type) ? type_array_get_element(type) : type);\n    align = type_buffer_alignment(is_conformant_array(type) ? type_array_get_element(type) : type);\n    fc = get_array_fc(type);\n\n    start_offset = *typestring_offset;\n    update_tfsoff(type, start_offset, file);\n    print_start_tfs_comment(file, type, start_offset);\n    print_file(file, 2, \"0x%02x,\\t/* %s */\\n\", fc, string_of_type(fc));\n    print_file(file, 2, \"0x%x,\\t/* %d */\\n\", align - 1, align - 1);\n    *typestring_offset += 2;\n\n    align = 0;\n    if (fc != FC_BOGUS_ARRAY)\n    {\n        if (fc == FC_LGFARRAY || fc == FC_LGVARRAY)\n        {\n            print_file(file, 2, \"NdrFcLong(0x%x),\\t/* %u */\\n\", size, size);\n            *typestring_offset += 4;\n        }\n        else\n        {\n            print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* %u */\\n\", (unsigned short)size, size);\n            *typestring_offset += 2;\n        }\n\n        if (is_conformant_array(type))\n            *typestring_offset\n                += write_conf_or_var_desc(file, current_structure, baseoff,\n                                          type, size_is);\n\n        if (fc == FC_SMVARRAY || fc == FC_LGVARRAY)\n        {\n            unsigned int elsize = type_memsize(type_array_get_element(type));\n            unsigned int dim = type_array_get_dim(type);\n\n            if (fc == FC_LGVARRAY)\n            {\n                print_file(file, 2, \"NdrFcLong(0x%x),\\t/* %u */\\n\", dim, dim);\n                *typestring_offset += 4;\n            }\n            else\n            {\n                print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* %u */\\n\", (unsigned short)dim, dim);\n                *typestring_offset += 2;\n            }\n\n            print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* %u */\\n\", (unsigned short)elsize, elsize);\n            *typestring_offset += 2;\n        }\n\n        if (length_is)\n            *typestring_offset\n                += write_conf_or_var_desc(file, current_structure, baseoff,\n                                          type, length_is);\n\n        if (type_has_pointers(type_array_get_element(type)) &&\n            (type_array_is_decl_as_ptr(type) || !current_structure))\n        {\n            print_file(file, 2, \"0x%x,\\t/* FC_PP */\\n\", FC_PP);\n            print_file(file, 2, \"0x%x,\\t/* FC_PAD */\\n\", FC_PAD);\n            *typestring_offset += 2;\n            write_pointer_description(file, is_string_type(attrs, type) ? attrs : NULL, type, typestring_offset);\n            print_file(file, 2, \"0x%x,\\t/* FC_END */\\n\", FC_END);\n            *typestring_offset += 1;\n        }\n\n        write_array_element_type(file, is_string_type(attrs, type) ? attrs : NULL, type, FALSE, typestring_offset);\n        write_end(file, typestring_offset);\n    }\n    else\n    {\n        unsigned int dim = size_is ? 0 : type_array_get_dim(type);\n        print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* %u */\\n\", (unsigned short)dim, dim);\n        *typestring_offset += 2;\n        *typestring_offset\n            += write_conf_or_var_desc(file, current_structure, baseoff,\n                                      type, size_is);\n        *typestring_offset\n            += write_conf_or_var_desc(file, current_structure, baseoff,\n                                      type, length_is);\n\n        write_array_element_type(file, is_string_type(attrs, type) ? attrs : NULL, type, TRUE, typestring_offset);\n        write_end(file, typestring_offset);\n    }\n\n    return start_offset;\n}\n\nstatic const var_t *find_array_or_string_in_struct(const type_t *type)\n{\n    const var_list_t *fields = type_struct_get_fields(type);\n    const var_t *last_field;\n    const type_t *ft;\n\n    if (!fields || list_empty(fields))\n        return NULL;\n\n    last_field = LIST_ENTRY( list_tail(fields), const var_t, entry );\n    ft = last_field->type;\n\n    if (is_conformant_array(ft) && !type_array_is_decl_as_ptr(ft))\n        return last_field;\n\n    if (type_get_type(ft) == TYPE_STRUCT)\n        return find_array_or_string_in_struct(ft);\n    else\n        return NULL;\n}\n\nstatic void write_struct_members(FILE *file, const type_t *type,\n                                 int is_complex, unsigned int *corroff,\n                                 unsigned int *typestring_offset)\n{\n    const var_t *field;\n    unsigned short offset = 0;\n    unsigned int salign = 1;\n    int padding;\n    var_list_t *fields = type_struct_get_fields(type);\n\n    if (fields) LIST_FOR_EACH_ENTRY( field, fields, const var_t, entry )\n    {\n        type_t *ft = field->type;\n        unsigned int align = 0;\n        unsigned int size = type_memsize_and_alignment(ft, &align);\n        align = clamp_align(align);\n        if (salign < align) salign = align;\n\n        if (!is_conformant_array(ft) || type_array_is_decl_as_ptr(ft))\n        {\n            if ((align - 1) & offset)\n            {\n                unsigned char fc = 0;\n                switch (align)\n                {\n                case 2:\n                    fc = FC_ALIGNM2;\n                    break;\n                case 4:\n                    fc = FC_ALIGNM4;\n                    break;\n                case 8:\n                    fc = FC_ALIGNM8;\n                    break;\n                default:\n                    error(\"write_struct_members: cannot align type %d\\n\", type_get_type(ft));\n                }\n                print_file(file, 2, \"0x%x,\\t/* %s */\\n\", fc, string_of_type(fc));\n                offset = ROUND_SIZE(offset, align);\n                *typestring_offset += 1;\n            }\n            write_member_type(file, type, is_complex, field->attrs, field->type, corroff,\n                              typestring_offset);\n            offset += size;\n        }\n    }\n\n    padding = ROUNDING(offset, salign);\n    if (padding)\n    {\n        print_file(file, 2, \"0x%x,\\t/* FC_STRUCTPAD%d */\\n\",\n                   FC_STRUCTPAD1 + padding - 1,\n                   padding);\n        *typestring_offset += 1;\n    }\n\n    write_end(file, typestring_offset);\n}\n\nstatic unsigned int write_struct_tfs(FILE *file, type_t *type,\n                                     const char *name, unsigned int *tfsoff)\n{\n    const type_t *save_current_structure = current_structure;\n    unsigned int total_size;\n    const var_t *array;\n    unsigned int start_offset;\n    unsigned int align;\n    unsigned int corroff;\n    var_t *f;\n    unsigned char fc = get_struct_fc(type);\n    var_list_t *fields = type_struct_get_fields(type);\n\n    if (processed(type)) return type->typestring_offset;\n\n    guard_rec(type);\n    current_structure = type;\n\n    total_size = type_memsize(type);\n    align = type_buffer_alignment(type);\n    if (total_size > USHRT_MAX)\n        error(\"structure size for %s exceeds %d bytes by %d bytes\\n\",\n              name, USHRT_MAX, total_size - USHRT_MAX);\n\n    if (fields) LIST_FOR_EACH_ENTRY(f, fields, var_t, entry)\n        write_embedded_types(file, f->attrs, f->type, f->name, FALSE, tfsoff);\n\n    array = find_array_or_string_in_struct(type);\n    if (array && !processed(array->type))\n    {\n        if(is_string_type(array->attrs, array->type))\n            write_string_tfs(file, array->attrs, array->type, TYPE_CONTEXT_CONTAINER, array->name, tfsoff);\n        else\n            write_array_tfs(file, array->attrs, array->type, array->name, tfsoff);\n    }\n\n    corroff = *tfsoff;\n    write_descriptors(file, type, tfsoff);\n\n    start_offset = *tfsoff;\n    update_tfsoff(type, start_offset, file);\n    print_start_tfs_comment(file, type, start_offset);\n    print_file(file, 2, \"0x%x,\\t/* %s */\\n\", fc, string_of_type(fc));\n    print_file(file, 2, \"0x%x,\\t/* %d */\\n\", align - 1, align - 1);\n    print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* %d */\\n\", (unsigned short)total_size, total_size);\n    *tfsoff += 4;\n\n    if (array)\n    {\n        unsigned int absoff = array->type->typestring_offset;\n        short reloff = absoff - *tfsoff;\n        print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* Offset= %hd (%u) */\\n\",\n                   reloff, reloff, absoff);\n        *tfsoff += 2;\n    }\n    else if (fc == FC_BOGUS_STRUCT)\n    {\n        print_file(file, 2, \"NdrFcShort(0x0),\\n\");\n        *tfsoff += 2;\n    }\n\n    if (fc == FC_BOGUS_STRUCT)\n    {\n        /* On the sizing pass, type->ptrdesc may be zero, but it's ok as\n           nothing is written to file yet.  On the actual writing pass,\n           this will have been updated.  */\n        unsigned int absoff = type->ptrdesc ? type->ptrdesc : *tfsoff;\n        int reloff = absoff - *tfsoff;\n        assert( reloff >= 0 );\n        print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* Offset= %d (%u) */\\n\",\n                   (unsigned short)reloff, reloff, absoff);\n        *tfsoff += 2;\n    }\n    else if ((fc == FC_PSTRUCT) ||\n             (fc == FC_CPSTRUCT) ||\n             (fc == FC_CVSTRUCT && type_has_pointers(type)))\n    {\n        print_file(file, 2, \"0x%x,\\t/* FC_PP */\\n\", FC_PP);\n        print_file(file, 2, \"0x%x,\\t/* FC_PAD */\\n\", FC_PAD);\n        *tfsoff += 2;\n        write_pointer_description(file, NULL, type, tfsoff);\n        print_file(file, 2, \"0x%x,\\t/* FC_END */\\n\", FC_END);\n        *tfsoff += 1;\n    }\n\n    write_struct_members(file, type, fc == FC_BOGUS_STRUCT, &corroff,\n                         tfsoff);\n\n    if (fc == FC_BOGUS_STRUCT)\n    {\n        const var_t *f;\n\n        type->ptrdesc = *tfsoff;\n        if (fields) LIST_FOR_EACH_ENTRY(f, fields, const var_t, entry)\n        {\n            type_t *ft = f->type;\n            switch (typegen_detect_type(ft, f->attrs, TDT_IGNORE_STRINGS))\n            {\n            case TGT_POINTER:\n                if (is_string_type(f->attrs, ft))\n                    write_string_tfs(file, f->attrs, ft, TYPE_CONTEXT_CONTAINER, f->name, tfsoff);\n                else\n                    write_pointer_tfs(file, f->attrs, ft,\n                                      type_pointer_get_ref(ft)->typestring_offset,\n                                      TYPE_CONTEXT_CONTAINER, tfsoff);\n                break;\n            case TGT_ARRAY:\n                if (type_array_is_decl_as_ptr(ft))\n                {\n                    unsigned int offset;\n\n                    print_file(file, 0, \"/* %d */\\n\", *tfsoff);\n\n                    offset = ft->typestring_offset;\n                    /* skip over the pointer that is written for strings, since a\n                     * pointer has to be written in-place here */\n                    if (is_string_type(f->attrs, ft))\n                        offset += 4;\n                    write_nonsimple_pointer(file, f->attrs, ft, TYPE_CONTEXT_CONTAINER, offset, tfsoff);\n                }\n                break;\n            default:\n                break;\n            }\n        }\n        if (type->ptrdesc == *tfsoff)\n            type->ptrdesc = 0;\n    }\n\n    current_structure = save_current_structure;\n    return start_offset;\n}\n\nstatic void write_branch_type(FILE *file, const type_t *t, unsigned int *tfsoff)\n{\n    if (t == NULL)\n    {\n        print_file(file, 2, \"NdrFcShort(0x0),\\t/* No type */\\n\");\n    }\n    else\n    {\n        if (type_get_type(t) == TYPE_BASIC || type_get_type(t) == TYPE_ENUM)\n        {\n            unsigned char fc;\n            if (type_get_type(t) == TYPE_BASIC)\n                fc = get_basic_fc(t);\n            else\n                fc = get_enum_fc(t);\n            print_file(file, 2, \"NdrFcShort(0x80%02x),\\t/* Simple arm type: %s */\\n\",\n                       fc, string_of_type(fc));\n        }\n        else if (t->typestring_offset)\n        {\n            short reloff = t->typestring_offset - *tfsoff;\n            print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* Offset= %d (%d) */\\n\",\n                       reloff, reloff, t->typestring_offset);\n        }\n        else\n            error(\"write_branch_type: type unimplemented %d\\n\", type_get_type(t));\n    }\n\n    *tfsoff += 2;\n}\n\nstatic unsigned int write_union_tfs(FILE *file, const attr_list_t *attrs,\n                                    type_t *type, unsigned int *tfsoff)\n{\n    unsigned int start_offset;\n    unsigned int size;\n    var_list_t *fields;\n    unsigned int nbranch = 0;\n    type_t *deftype = NULL;\n    short nodeftype = 0xffff;\n    unsigned int dummy;\n    var_t *f;\n\n    if (processed(type) &&\n        (type_get_type(type) == TYPE_ENCAPSULATED_UNION || !is_attr(type->attrs, ATTR_SWITCHTYPE)))\n        return type->typestring_offset;\n\n    guard_rec(type);\n\n    fields = type_union_get_cases(type);\n\n    size = union_memsize(fields, &dummy);\n\n    if (fields) LIST_FOR_EACH_ENTRY(f, fields, var_t, entry)\n    {\n        expr_list_t *cases = get_attrp(f->attrs, ATTR_CASE);\n        if (cases)\n            nbranch += list_count(cases);\n        if (f->type)\n            write_embedded_types(file, f->attrs, f->type, f->name, TRUE, tfsoff);\n    }\n\n    start_offset = *tfsoff;\n    update_tfsoff(type, start_offset, file);\n    print_start_tfs_comment(file, type, start_offset);\n    if (type_get_type(type) == TYPE_ENCAPSULATED_UNION)\n    {\n        const var_t *sv = type_union_get_switch_value(type);\n        const type_t *st = sv->type;\n        unsigned int align = 0;\n        unsigned char fc;\n\n        if (type_get_type(st) == TYPE_BASIC)\n        {\n            fc = get_basic_fc(st);\n            switch (fc)\n            {\n            case FC_CHAR:\n            case FC_SMALL:\n            case FC_BYTE:\n            case FC_USMALL:\n            case FC_WCHAR:\n            case FC_SHORT:\n            case FC_USHORT:\n            case FC_LONG:\n            case FC_ULONG:\n                break;\n            default:\n                fc = 0;\n                error(\"union switch type must be an integer, char, or enum\\n\");\n            }\n        }\n        else if (type_get_type(st) == TYPE_ENUM)\n            fc = get_enum_fc(st);\n        else\n            error(\"union switch type must be an integer, char, or enum\\n\");\n\n        type_memsize_and_alignment(st, &align);\n        if (fields) LIST_FOR_EACH_ENTRY(f, fields, var_t, entry)\n        {\n            if (f->type)\n                type_memsize_and_alignment(f->type, &align);\n        }\n\n        print_file(file, 2, \"0x%x,\\t/* FC_ENCAPSULATED_UNION */\\n\", FC_ENCAPSULATED_UNION);\n        print_file(file, 2, \"0x%x,\\t/* Switch type= %s */\\n\",\n                   (align << 4) | fc, string_of_type(fc));\n        *tfsoff += 2;\n    }\n    else if (is_attr(type->attrs, ATTR_SWITCHTYPE))\n    {\n        const expr_t *switch_is = get_attrp(attrs, ATTR_SWITCHIS);\n        const type_t *st = get_attrp(type->attrs, ATTR_SWITCHTYPE);\n        unsigned char fc;\n\n        if (type_get_type(st) == TYPE_BASIC)\n        {\n            fc = get_basic_fc(st);\n            switch (fc)\n            {\n            case FC_CHAR:\n            case FC_SMALL:\n            case FC_USMALL:\n            case FC_SHORT:\n            case FC_USHORT:\n            case FC_LONG:\n            case FC_ULONG:\n            case FC_ENUM16:\n            case FC_ENUM32:\n                break;\n            default:\n                fc = 0;\n                error(\"union switch type must be an integer, char, or enum\\n\");\n            }\n        }\n        else if (type_get_type(st) == TYPE_ENUM)\n            fc = get_enum_fc(st);\n        else\n            error(\"union switch type must be an integer, char, or enum\\n\");\n\n        print_file(file, 2, \"0x%x,\\t/* FC_NON_ENCAPSULATED_UNION */\\n\", FC_NON_ENCAPSULATED_UNION);\n        print_file(file, 2, \"0x%x,\\t/* Switch type= %s */\\n\",\n                   fc, string_of_type(fc));\n        *tfsoff += 2;\n        *tfsoff += write_conf_or_var_desc(file, current_structure, 0, st, switch_is );\n        print_file(file, 2, \"NdrFcShort(0x2),\\t/* Offset= 2 (%u) */\\n\", *tfsoff + 2);\n        *tfsoff += 2;\n        print_file(file, 0, \"/* %u */\\n\", *tfsoff);\n    }\n\n    print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* %d */\\n\", (unsigned short)size, size);\n    print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* %d */\\n\", (unsigned short)nbranch, nbranch);\n    *tfsoff += 4;\n\n    if (fields) LIST_FOR_EACH_ENTRY(f, fields, var_t, entry)\n    {\n        type_t *ft = f->type;\n        expr_list_t *cases = get_attrp(f->attrs, ATTR_CASE);\n        int deflt = is_attr(f->attrs, ATTR_DEFAULT);\n        expr_t *c;\n\n        if (cases == NULL && !deflt)\n            error(\"union field %s with neither case nor default attribute\\n\", f->name);\n\n        if (cases) LIST_FOR_EACH_ENTRY(c, cases, expr_t, entry)\n        {\n            /* MIDL doesn't check for duplicate cases, even though that seems\n               like a reasonable thing to do, it just dumps them to the TFS\n               like we're going to do here.  */\n            print_file(file, 2, \"NdrFcLong(0x%x),\\t/* %d */\\n\", c->cval, c->cval);\n            *tfsoff += 4;\n            write_branch_type(file, ft, tfsoff);\n        }\n\n        /* MIDL allows multiple default branches, even though that seems\n           illogical, it just chooses the last one, which is what we will\n           do.  */\n        if (deflt)\n        {\n            deftype = ft;\n            nodeftype = 0;\n        }\n    }\n\n    if (deftype)\n    {\n        write_branch_type(file, deftype, tfsoff);\n    }\n    else\n    {\n        print_file(file, 2, \"NdrFcShort(0x%hx),\\n\", nodeftype);\n        *tfsoff += 2;\n    }\n\n    return start_offset;\n}\n\nstatic unsigned int write_ip_tfs(FILE *file, const attr_list_t *attrs, type_t *type,\n                                 unsigned int *typeformat_offset)\n{\n    unsigned int i;\n    unsigned int start_offset = *typeformat_offset;\n    expr_t *iid = get_attrp(attrs, ATTR_IIDIS);\n\n    if (!iid && processed(type)) return type->typestring_offset;\n\n    print_start_tfs_comment(file, type, start_offset);\n    update_tfsoff(type, start_offset, file);\n\n    if (iid)\n    {\n        print_file(file, 2, \"0x2f,  /* FC_IP */\\n\");\n        print_file(file, 2, \"0x5c,  /* FC_PAD */\\n\");\n        *typeformat_offset\n            += write_conf_or_var_desc(file, current_structure, 0, type, iid) + 2;\n    }\n    else\n    {\n        const type_t *base = is_ptr(type) ? type_pointer_get_ref(type) : type;\n        const UUID *uuid = get_attrp(base->attrs, ATTR_UUID);\n\n        if (! uuid)\n            error(\"%s: interface %s missing UUID\\n\", __FUNCTION__, base->name);\n\n        print_file(file, 2, \"0x2f,\\t/* FC_IP */\\n\");\n        print_file(file, 2, \"0x5a,\\t/* FC_CONSTANT_IID */\\n\");\n        print_file(file, 2, \"NdrFcLong(0x%08x),\\n\", uuid->Data1);\n        print_file(file, 2, \"NdrFcShort(0x%04x),\\n\", uuid->Data2);\n        print_file(file, 2, \"NdrFcShort(0x%04x),\\n\", uuid->Data3);\n        for (i = 0; i < 8; ++i)\n            print_file(file, 2, \"0x%02x,\\n\", uuid->Data4[i]);\n\n        if (file)\n            fprintf(file, \"\\n\");\n\n        *typeformat_offset += 18;\n    }\n    return start_offset;\n}\n\nstatic unsigned int write_contexthandle_tfs(FILE *file,\n                                            const attr_list_t *attrs,\n                                            type_t *type,\n                                            int toplevel_param,\n                                            unsigned int *typeformat_offset)\n{\n    unsigned int start_offset = *typeformat_offset;\n    unsigned char flags = get_contexthandle_flags( current_iface, attrs, type );\n\n    print_start_tfs_comment(file, type, start_offset);\n\n    if (flags & 0x80)  /* via ptr */\n    {\n        int pointer_type = get_pointer_fc( type, attrs, toplevel_param );\n        if (!pointer_type) pointer_type = FC_RP;\n        *typeformat_offset += 4;\n        print_file(file, 2,\"0x%x, 0x0,\\t/* %s */\\n\", pointer_type, string_of_type(pointer_type) );\n        print_file(file, 2, \"NdrFcShort(0x2),\\t /* Offset= 2 (%u) */\\n\", *typeformat_offset);\n        print_file(file, 0, \"/* %2u */\\n\", *typeformat_offset);\n    }\n\n    print_file(file, 2, \"0x%02x,\\t/* FC_BIND_CONTEXT */\\n\", FC_BIND_CONTEXT);\n    print_file(file, 2, \"0x%x,\\t/* Context flags: \", flags);\n    /* return and can't be null values overlap */\n    if (((flags & 0x21) != 0x21) && (flags & NDR_CONTEXT_HANDLE_CANNOT_BE_NULL))\n        print_file(file, 0, \"can't be null, \");\n    if (flags & NDR_CONTEXT_HANDLE_SERIALIZE)\n        print_file(file, 0, \"serialize, \");\n    if (flags & NDR_CONTEXT_HANDLE_NOSERIALIZE)\n        print_file(file, 0, \"no serialize, \");\n    if (flags & NDR_STRICT_CONTEXT_HANDLE)\n        print_file(file, 0, \"strict, \");\n    if ((flags & 0x21) == 0x20)\n        print_file(file, 0, \"out, \");\n    if ((flags & 0x21) == 0x21)\n        print_file(file, 0, \"return, \");\n    if (flags & 0x40)\n        print_file(file, 0, \"in, \");\n    if (flags & 0x80)\n        print_file(file, 0, \"via ptr, \");\n    print_file(file, 0, \"*/\\n\");\n    print_file(file, 2, \"0x%x,\\t/* rundown routine */\\n\", get_context_handle_offset( type ));\n    print_file(file, 2, \"0, /* FIXME: param num */\\n\");\n    *typeformat_offset += 4;\n\n    update_tfsoff( type, start_offset, file );\n    return start_offset;\n}\n\nstatic unsigned int write_range_tfs(FILE *file, const attr_list_t *attrs,\n                                    type_t *type, expr_list_t *range_list,\n                                    unsigned int *typeformat_offset)\n{\n    unsigned char fc;\n    unsigned int start_offset = *typeformat_offset;\n    const expr_t *range_min = LIST_ENTRY(list_head(range_list), const expr_t, entry);\n    const expr_t *range_max = LIST_ENTRY(list_next(range_list, list_head(range_list)), const expr_t, entry);\n\n    if (type_get_type(type) == TYPE_BASIC)\n        fc = get_basic_fc(type);\n    else\n        fc = get_enum_fc(type);\n\n    /* fc must fit in lower 4-bits of 8-bit field below */\n    assert(fc <= 0xf);\n\n    print_file(file, 0, \"/* %u */\\n\", *typeformat_offset);\n    print_file(file, 2, \"0x%x,\\t/* FC_RANGE */\\n\", FC_RANGE);\n    print_file(file, 2, \"0x%x,\\t/* %s */\\n\", fc, string_of_type(fc));\n    print_file(file, 2, \"NdrFcLong(0x%x),\\t/* %u */\\n\", range_min->cval, range_min->cval);\n    print_file(file, 2, \"NdrFcLong(0x%x),\\t/* %u */\\n\", range_max->cval, range_max->cval);\n    update_tfsoff( type, start_offset, file );\n    *typeformat_offset += 10;\n\n    return start_offset;\n}\n\nstatic unsigned int write_type_tfs(FILE *file, int indent,\n                                   const attr_list_t *attrs, type_t *type,\n                                   const char *name,\n                                   enum type_context context,\n                                   unsigned int *typeformat_offset)\n{\n    unsigned int offset;\n\n    switch (typegen_detect_type(type, attrs, TDT_ALL_TYPES))\n    {\n    case TGT_CTXT_HANDLE:\n    case TGT_CTXT_HANDLE_POINTER:\n        return write_contexthandle_tfs(file, attrs, type,\n                                       context == TYPE_CONTEXT_TOPLEVELPARAM, typeformat_offset);\n    case TGT_USER_TYPE:\n        return write_user_tfs(file, type, typeformat_offset);\n    case TGT_STRING:\n        return write_string_tfs(file, attrs, type, context, name, typeformat_offset);\n    case TGT_ARRAY:\n    {\n        unsigned int off;\n        /* conformant and pointer arrays are handled specially */\n        if ((context != TYPE_CONTEXT_CONTAINER &&\n             context != TYPE_CONTEXT_CONTAINER_NO_POINTERS) ||\n            !is_conformant_array(type) || type_array_is_decl_as_ptr(type))\n            off = write_array_tfs(file, attrs, type, name, typeformat_offset);\n        else\n            off = 0;\n        if (context != TYPE_CONTEXT_CONTAINER &&\n            context != TYPE_CONTEXT_CONTAINER_NO_POINTERS)\n        {\n            int ptr_type;\n            ptr_type = get_pointer_fc(type, attrs,\n                                      context == TYPE_CONTEXT_TOPLEVELPARAM);\n            if (ptr_type != FC_RP || type_array_is_decl_as_ptr(type))\n            {\n                unsigned int absoff = type->typestring_offset;\n                short reloff = absoff - (*typeformat_offset + 2);\n                off = *typeformat_offset;\n                print_file(file, 0, \"/* %d */\\n\", off);\n                print_file(file, 2, \"0x%x, 0x0,\\t/* %s */\\n\", ptr_type,\n                           string_of_type(ptr_type));\n                print_file(file, 2, \"NdrFcShort(0x%hx),\\t/* Offset= %hd (%u) */\\n\",\n                           reloff, reloff, absoff);\n                if (ptr_type != FC_RP) update_tfsoff( type, off, file );\n                *typeformat_offset += 4;\n            }\n            type->details.array.ptr_tfsoff = off;\n        }\n        return off;\n    }\n    case TGT_STRUCT:\n        return write_struct_tfs(file, type, name, typeformat_offset);\n    case TGT_UNION:\n        return write_union_tfs(file, attrs, type, typeformat_offset);\n    case TGT_ENUM:\n    case TGT_BASIC:\n        /* nothing to do */\n        return 0;\n    case TGT_RANGE:\n    {\n        expr_list_t *range_list = get_attrp(attrs, ATTR_RANGE);\n        if (!range_list)\n            range_list = get_aliaschain_attrp(type, ATTR_RANGE);\n        return write_range_tfs(file, attrs, type, range_list, typeformat_offset);\n    }\n    case TGT_IFACE_POINTER:\n        return write_ip_tfs(file, attrs, type, typeformat_offset);\n    case TGT_POINTER:\n    {\n        enum type_context ref_context;\n        type_t *ref = type_pointer_get_ref(type);\n\n        if (context == TYPE_CONTEXT_TOPLEVELPARAM)\n            ref_context = TYPE_CONTEXT_PARAM;\n        else if (context == TYPE_CONTEXT_CONTAINER_NO_POINTERS)\n            ref_context = TYPE_CONTEXT_CONTAINER;\n        else\n            ref_context = context;\n\n        if (is_string_type(attrs, ref))\n        {\n            if (context != TYPE_CONTEXT_CONTAINER_NO_POINTERS)\n                write_pointer_tfs(file, attrs, type, *typeformat_offset + 4, context, typeformat_offset);\n\n            offset = write_type_tfs(file, indent, attrs, ref, name, ref_context, typeformat_offset);\n            if (context == TYPE_CONTEXT_CONTAINER_NO_POINTERS)\n                return 0;\n            return offset;\n        }\n\n        offset = write_type_tfs( file, indent, attrs, type_pointer_get_ref(type), name,\n                                 ref_context, typeformat_offset);\n        if (context == TYPE_CONTEXT_CONTAINER_NO_POINTERS)\n            return 0;\n        return write_pointer_tfs(file, attrs, type, offset, context, typeformat_offset);\n    }\n    case TGT_INVALID:\n        break;\n    }\n    error(\"invalid type %s for var %s\\n\", type->name, name);\n    return 0;\n}\n\nstatic int write_embedded_types(FILE *file, const attr_list_t *attrs, type_t *type,\n                                const char *name, int write_ptr, unsigned int *tfsoff)\n{\n    return write_type_tfs(file, 2, attrs, type, name, write_ptr ? TYPE_CONTEXT_CONTAINER : TYPE_CONTEXT_CONTAINER_NO_POINTERS, tfsoff);\n}\n\nstatic unsigned int process_tfs_stmts(FILE *file, const statement_list_t *stmts,\n                                      type_pred_t pred, unsigned int *typeformat_offset)\n{\n    var_t *var;\n    const statement_t *stmt;\n\n    if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry )\n    {\n        const type_t *iface;\n        const statement_t *stmt_func;\n\n        if (stmt->type != STMT_TYPE || type_get_type(stmt->u.type) != TYPE_INTERFACE)\n            continue;\n\n        iface = stmt->u.type;\n        if (!pred(iface))\n            continue;\n\n        current_iface = iface;\n        STATEMENTS_FOR_EACH_FUNC( stmt_func, type_iface_get_stmts(iface) )\n        {\n            const var_t *func = stmt_func->u.var;\n            current_func = func;\n            if (is_local(func->attrs)) continue;\n\n            var = type_function_get_retval(func->type);\n            if (!is_void(var->type))\n                var->typestring_offset = write_type_tfs( file, 2, func->attrs, var->type, func->name,\n                                                         TYPE_CONTEXT_PARAM, typeformat_offset);\n\n            if (type_get_function_args(func->type))\n                LIST_FOR_EACH_ENTRY( var, type_get_function_args(func->type), var_t, entry )\n                    var->typestring_offset = write_type_tfs( file, 2, var->attrs, var->type, var->name,\n                                                             TYPE_CONTEXT_TOPLEVELPARAM,\n                                                             typeformat_offset );\n        }\n    }\n\n    return *typeformat_offset + 1;\n}\n\nstatic unsigned int process_tfs(FILE *file, const statement_list_t *stmts, type_pred_t pred)\n{\n    unsigned int typeformat_offset = 2;\n\n    return process_tfs_stmts(file, stmts, pred, &typeformat_offset);\n}\n\n\nvoid write_typeformatstring(FILE *file, const statement_list_t *stmts, type_pred_t pred)\n{\n    int indent = 0;\n\n    print_file(file, indent, \"static const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString =\\n\");\n    print_file(file, indent, \"{\\n\");\n    indent++;\n    print_file(file, indent, \"0,\\n\");\n    print_file(file, indent, \"{\\n\");\n    indent++;\n    print_file(file, indent, \"NdrFcShort(0x0),\\n\");\n\n    set_all_tfswrite(TRUE);\n    process_tfs(file, stmts, pred);\n\n    print_file(file, indent, \"0x0\\n\");\n    indent--;\n    print_file(file, indent, \"}\\n\");\n    indent--;\n    print_file(file, indent, \"};\\n\");\n    print_file(file, indent, \"\\n\");\n}\n\nstatic unsigned int get_required_buffer_size_type(\n    const type_t *type, const char *name, const attr_list_t *attrs, int toplevel_param, unsigned int *alignment)\n{\n    *alignment = 0;\n    switch (typegen_detect_type(type, NULL, TDT_IGNORE_RANGES))\n    {\n    case TGT_USER_TYPE:\n    {\n        const char *uname = NULL;\n        const type_t *utype = get_user_type(type, &uname);\n        return get_required_buffer_size_type(utype, uname, NULL, FALSE, alignment);\n    }\n    case TGT_BASIC:\n        switch (get_basic_fc(type))\n        {\n        case FC_BYTE:\n        case FC_CHAR:\n        case FC_USMALL:\n        case FC_SMALL:\n            *alignment = 4;\n            return 1;\n\n        case FC_WCHAR:\n        case FC_USHORT:\n        case FC_SHORT:\n            *alignment = 4;\n            return 2;\n\n        case FC_ULONG:\n        case FC_LONG:\n        case FC_FLOAT:\n        case FC_ERROR_STATUS_T:\n            *alignment = 4;\n            return 4;\n\n        case FC_HYPER:\n        case FC_DOUBLE:\n            *alignment = 8;\n            return 8;\n\n        case FC_INT3264:\n        case FC_UINT3264:\n            assert( pointer_size );\n            *alignment = pointer_size;\n            return pointer_size;\n\n        case FC_IGNORE:\n        case FC_BIND_PRIMITIVE:\n            return 0;\n\n        default:\n            error(\"get_required_buffer_size: unknown basic type 0x%02x\\n\",\n                  get_basic_fc(type));\n            return 0;\n        }\n        break;\n\n    case TGT_ENUM:\n        switch (get_enum_fc(type))\n        {\n        case FC_ENUM32:\n            *alignment = 4;\n            return 4;\n        case FC_ENUM16:\n            *alignment = 4;\n            return 2;\n        }\n        break;\n\n    case TGT_STRUCT:\n        if (get_struct_fc(type) == FC_STRUCT)\n        {\n            if (!type_struct_get_fields(type)) return 0;\n            return fields_memsize(type_struct_get_fields(type), alignment);\n        }\n        break;\n\n    case TGT_POINTER:\n        {\n            unsigned int size, align;\n            const type_t *ref = type_pointer_get_ref(type);\n            if (is_string_type( attrs, ref )) break;\n            if (!(size = get_required_buffer_size_type( ref, name, NULL, FALSE, &align ))) break;\n            if (get_pointer_fc(type, attrs, toplevel_param) != FC_RP)\n            {\n                size += 4 + align;\n                align = 4;\n            }\n            *alignment = align;\n            return size;\n        }\n\n    case TGT_ARRAY:\n        if (get_pointer_fc(type, attrs, toplevel_param) == FC_RP)\n        {\n            switch (get_array_fc(type))\n            {\n            case FC_SMFARRAY:\n            case FC_LGFARRAY:\n                return type_array_get_dim(type) *\n                    get_required_buffer_size_type(type_array_get_element(type), name,\n                                                  NULL, FALSE, alignment);\n            }\n        }\n        break;\n\n    default:\n        break;\n    }\n    return 0;\n}\n\nstatic unsigned int get_required_buffer_size(const var_t *var, unsigned int *alignment, enum pass pass)\n{\n    int in_attr = is_attr(var->attrs, ATTR_IN);\n    int out_attr = is_attr(var->attrs, ATTR_OUT);\n\n    if (!in_attr && !out_attr)\n        in_attr = 1;\n\n    *alignment = 0;\n\n    if ((pass == PASS_IN && in_attr) || (pass == PASS_OUT && out_attr) ||\n        pass == PASS_RETURN)\n    {\n        if (is_ptrchain_attr(var, ATTR_CONTEXTHANDLE))\n        {\n            *alignment = 4;\n            return 20;\n        }\n\n        if (!is_string_type(var->attrs, var->type))\n            return get_required_buffer_size_type(var->type, var->name,\n                                                 var->attrs, TRUE, alignment);\n    }\n    return 0;\n}\n\nstatic unsigned int get_function_buffer_size( const var_t *func, enum pass pass )\n{\n    const var_t *var;\n    unsigned int total_size = 0, alignment;\n\n    if (type_get_function_args(func->type))\n    {\n        LIST_FOR_EACH_ENTRY( var, type_get_function_args(func->type), const var_t, entry )\n        {\n            total_size += get_required_buffer_size(var, &alignment, pass);\n            total_size += alignment;\n        }\n    }\n\n    if (pass == PASS_OUT && !is_void(type_function_get_rettype(func->type)))\n    {\n        var_t v = *func;\n        v.type = type_function_get_rettype(func->type);\n        total_size += get_required_buffer_size(&v, &alignment, PASS_RETURN);\n        total_size += alignment;\n    }\n    return total_size;\n}\n\nstatic void print_phase_function(FILE *file, int indent, const char *type,\n                                 const char *local_var_prefix, enum remoting_phase phase,\n                                 const var_t *var, unsigned int type_offset)\n{\n    const char *function;\n    switch (phase)\n    {\n    case PHASE_BUFFERSIZE:\n        function = \"BufferSize\";\n        break;\n    case PHASE_MARSHAL:\n        function = \"Marshall\";\n        break;\n    case PHASE_UNMARSHAL:\n        function = \"Unmarshall\";\n        break;\n    case PHASE_FREE:\n        function = \"Free\";\n        break;\n    default:\n        assert(0);\n        return;\n    }\n\n    print_file(file, indent, \"Ndr%s%s(\\n\", type, function);\n    indent++;\n    print_file(file, indent, \"&__frame->_StubMsg,\\n\");\n    print_file(file, indent, \"%s%s%s%s%s,\\n\",\n               (phase == PHASE_UNMARSHAL) ? \"(unsigned char **)\" : \"(unsigned char *)\",\n               (phase == PHASE_UNMARSHAL || decl_indirect(var->type)) ? \"&\" : \"\",\n               local_var_prefix,\n               (phase == PHASE_UNMARSHAL && decl_indirect(var->type)) ? \"_p_\" : \"\",\n               var->name);\n    print_file(file, indent, \"(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%d]%s\\n\",\n               type_offset, (phase == PHASE_UNMARSHAL) ? \",\" : \");\");\n    if (phase == PHASE_UNMARSHAL)\n        print_file(file, indent, \"0);\\n\");\n    indent--;\n}\n\nvoid print_phase_basetype(FILE *file, int indent, const char *local_var_prefix,\n                          enum remoting_phase phase, enum pass pass, const var_t *var,\n                          const char *varname)\n{\n    type_t *type = var->type;\n    unsigned int alignment = 0;\n\n    /* no work to do for other phases, buffer sizing is done elsewhere */\n    if (phase != PHASE_MARSHAL && phase != PHASE_UNMARSHAL)\n        return;\n\n    if (type_get_type(type) == TYPE_ENUM ||\n        (type_get_type(type) == TYPE_BASIC &&\n         type_basic_get_type(type) == TYPE_BASIC_INT3264 &&\n         pointer_size != 4))\n    {\n        unsigned char fc;\n\n        if (type_get_type(type) == TYPE_ENUM)\n            fc = get_enum_fc(type);\n        else\n            fc = get_basic_fc(type);\n\n        if (phase == PHASE_MARSHAL)\n            print_file(file, indent, \"NdrSimpleTypeMarshall(\\n\");\n        else\n            print_file(file, indent, \"NdrSimpleTypeUnmarshall(\\n\");\n        print_file(file, indent+1, \"&__frame->_StubMsg,\\n\");\n        print_file(file, indent+1, \"(unsigned char *)&%s%s,\\n\",\n                   local_var_prefix,\n                   var->name);\n        print_file(file, indent+1, \"0x%02x /* %s */);\\n\", fc, string_of_type(fc));\n    }\n    else\n    {\n        const type_t *ref = is_ptr(type) ? type_pointer_get_ref(type) : type;\n        switch (get_basic_fc(ref))\n        {\n        case FC_BYTE:\n        case FC_CHAR:\n        case FC_SMALL:\n        case FC_USMALL:\n            alignment = 1;\n            break;\n\n        case FC_WCHAR:\n        case FC_USHORT:\n        case FC_SHORT:\n            alignment = 2;\n            break;\n\n        case FC_ULONG:\n        case FC_LONG:\n        case FC_FLOAT:\n        case FC_ERROR_STATUS_T:\n        /* pointer_size must be 4 if we got here in these two cases */\n        case FC_INT3264:\n        case FC_UINT3264:\n            alignment = 4;\n            break;\n\n        case FC_HYPER:\n        case FC_DOUBLE:\n            alignment = 8;\n            break;\n\n        case FC_IGNORE:\n        case FC_BIND_PRIMITIVE:\n            /* no marshalling needed */\n            return;\n\n        default:\n            error(\"print_phase_basetype: Unsupported type: %s (0x%02x, ptr_level: 0)\\n\",\n                  var->name, get_basic_fc(ref));\n        }\n\n        if (phase == PHASE_MARSHAL && alignment > 1)\n            print_file(file, indent, \"MIDL_memset(__frame->_StubMsg.Buffer, 0, (0x%x - (ULONG_PTR)__frame->_StubMsg.Buffer) & 0x%x);\\n\", alignment, alignment - 1);\n        print_file(file, indent, \"__frame->_StubMsg.Buffer = (unsigned char *)(((ULONG_PTR)__frame->_StubMsg.Buffer + %u) & ~0x%x);\\n\",\n                    alignment - 1, alignment - 1);\n\n        if (phase == PHASE_MARSHAL)\n        {\n            print_file(file, indent, \"*(\");\n            write_type_decl(file, is_ptr(type) ? type_pointer_get_ref(type) : type, NULL);\n            if (is_ptr(type))\n                fprintf(file, \" *)__frame->_StubMsg.Buffer = *\");\n            else\n                fprintf(file, \" *)__frame->_StubMsg.Buffer = \");\n            fprintf(file, \"%s%s\", local_var_prefix, varname);\n            fprintf(file, \";\\n\");\n        }\n        else if (phase == PHASE_UNMARSHAL)\n        {\n            print_file(file, indent, \"if (__frame->_StubMsg.Buffer + sizeof(\");\n            write_type_decl(file, is_ptr(type) ? type_pointer_get_ref(type) : type, NULL);\n            fprintf(file, \") > __frame->_StubMsg.BufferEnd)\\n\");\n            print_file(file, indent, \"{\\n\");\n            print_file(file, indent + 1, \"RpcRaiseException(RPC_X_BAD_STUB_DATA);\\n\");\n            print_file(file, indent, \"}\\n\");\n            print_file(file, indent, \"%s%s%s\",\n                       (pass == PASS_IN || pass == PASS_RETURN) ? \"\" : \"*\",\n                       local_var_prefix, varname);\n            if (pass == PASS_IN && is_ptr(type))\n                fprintf(file, \" = (\");\n            else\n                fprintf(file, \" = *(\");\n            write_type_decl(file, is_ptr(type) ? type_pointer_get_ref(type) : type, NULL);\n            fprintf(file, \" *)__frame->_StubMsg.Buffer;\\n\");\n        }\n\n        print_file(file, indent, \"__frame->_StubMsg.Buffer += sizeof(\");\n        write_type_decl(file, is_ptr(type) ? type_pointer_get_ref(type) : type, NULL);\n        fprintf(file, \");\\n\");\n    }\n}\n\n/* returns whether the MaxCount, Offset or ActualCount members need to be\n * filled in for the specified phase */\nstatic inline int is_conformance_needed_for_phase(enum remoting_phase phase)\n{\n    return (phase != PHASE_UNMARSHAL);\n}\n\nexpr_t *get_size_is_expr(const type_t *t, const char *name)\n{\n    expr_t *x = NULL;\n\n    for ( ; is_array(t); t = type_array_get_element(t))\n        if (type_array_has_conformance(t) &&\n            type_array_get_conformance(t)->type != EXPR_VOID)\n        {\n            if (!x)\n                x = type_array_get_conformance(t);\n            else\n                error(\"%s: multidimensional conformant\"\n                      \" arrays not supported at the top level\\n\",\n                      name);\n        }\n\n    return x;\n}\n\nvoid write_parameter_conf_or_var_exprs(FILE *file, int indent, const char *local_var_prefix,\n                                       enum remoting_phase phase, const var_t *var, int valid_variance)\n{\n    const type_t *type = var->type;\n    /* get fundamental type for the argument */\n    for (;;)\n    {\n        switch (typegen_detect_type(type, var->attrs, TDT_IGNORE_STRINGS|TDT_IGNORE_RANGES))\n        {\n        case TGT_ARRAY:\n            if (is_conformance_needed_for_phase(phase))\n            {\n                if (type_array_has_conformance(type) &&\n                    type_array_get_conformance(type)->type != EXPR_VOID)\n                {\n                    print_file(file, indent, \"__frame->_StubMsg.MaxCount = (ULONG_PTR)\");\n                    write_expr(file, type_array_get_conformance(type), 1, 1, NULL, NULL, local_var_prefix);\n                    fprintf(file, \";\\n\\n\");\n                }\n                if (type_array_has_variance(type))\n                {\n                    print_file(file, indent, \"__frame->_StubMsg.Offset = 0;\\n\"); /* FIXME */\n                    if (valid_variance)\n                    {\n                        print_file(file, indent, \"__frame->_StubMsg.ActualCount = (ULONG_PTR)\");\n                        write_expr(file, type_array_get_variance(type), 1, 1, NULL, NULL, local_var_prefix);\n                        fprintf(file, \";\\n\\n\");\n                    }\n                    else\n                        print_file(file, indent, \"__frame->_StubMsg.ActualCount = __frame->_StubMsg.MaxCount;\\n\\n\");\n                }\n            }\n            break;\n        case TGT_UNION:\n            if (type_get_type(type) == TYPE_UNION &&\n                is_conformance_needed_for_phase(phase))\n            {\n                print_file(file, indent, \"__frame->_StubMsg.MaxCount = (ULONG_PTR)\");\n                write_expr(file, get_attrp(var->attrs, ATTR_SWITCHIS), 1, 1, NULL, NULL, local_var_prefix);\n                fprintf(file, \";\\n\\n\");\n            }\n            break;\n        case TGT_IFACE_POINTER:\n        {\n            expr_t *iid;\n\n            if (is_conformance_needed_for_phase(phase) && (iid = get_attrp( var->attrs, ATTR_IIDIS )))\n            {\n                print_file( file, indent, \"__frame->_StubMsg.MaxCount = (ULONG_PTR) \" );\n                write_expr( file, iid, 1, 1, NULL, NULL, local_var_prefix );\n                fprintf( file, \";\\n\\n\" );\n            }\n            break;\n        }\n        case TGT_POINTER:\n            type = type_pointer_get_ref(type);\n            continue;\n        case TGT_INVALID:\n        case TGT_USER_TYPE:\n        case TGT_CTXT_HANDLE:\n        case TGT_CTXT_HANDLE_POINTER:\n        case TGT_STRING:\n        case TGT_BASIC:\n        case TGT_ENUM:\n        case TGT_STRUCT:\n        case TGT_RANGE:\n            break;\n        }\n        break;\n    }\n}\n\nstatic void write_remoting_arg(FILE *file, int indent, const var_t *func, const char *local_var_prefix,\n                               enum pass pass, enum remoting_phase phase, const var_t *var)\n{\n    int in_attr, out_attr, pointer_type;\n    const char *type_str = NULL;\n    const type_t *type = var->type;\n    unsigned int alignment, start_offset = type->typestring_offset;\n\n    if (is_ptr(type) || is_array(type))\n        pointer_type = get_pointer_fc(type, var->attrs, pass != PASS_RETURN);\n    else\n        pointer_type = 0;\n\n    in_attr = is_attr(var->attrs, ATTR_IN);\n    out_attr = is_attr(var->attrs, ATTR_OUT);\n    if (!in_attr && !out_attr)\n        in_attr = 1;\n\n    if (phase != PHASE_FREE)\n        switch (pass)\n        {\n        case PASS_IN:\n            if (!in_attr) return;\n            break;\n        case PASS_OUT:\n            if (!out_attr) return;\n            break;\n        case PASS_RETURN:\n            break;\n        }\n\n    if (phase == PHASE_BUFFERSIZE && get_required_buffer_size( var, &alignment, pass )) return;\n\n    write_parameter_conf_or_var_exprs(file, indent, local_var_prefix, phase, var, TRUE);\n\n    switch (typegen_detect_type(type, var->attrs, TDT_ALL_TYPES))\n    {\n    case TGT_CTXT_HANDLE:\n    case TGT_CTXT_HANDLE_POINTER:\n        if (phase == PHASE_MARSHAL)\n        {\n            if (pass == PASS_IN)\n            {\n                /* if the context_handle attribute appears in the chain of types\n                 * without pointers being followed, then the context handle must\n                 * be direct, otherwise it is a pointer */\n                const char *ch_ptr = is_aliaschain_attr(type, ATTR_CONTEXTHANDLE) ? \"\" : \"*\";\n                print_file(file, indent, \"NdrClientContextMarshall(\\n\");\n                print_file(file, indent + 1, \"&__frame->_StubMsg,\\n\");\n                print_file(file, indent + 1, \"(NDR_CCONTEXT)%s%s%s,\\n\", ch_ptr, local_var_prefix,\n                           var->name);\n                print_file(file, indent + 1, \"%s);\\n\", in_attr && out_attr ? \"1\" : \"0\");\n            }\n            else\n            {\n                print_file(file, indent, \"NdrServerContextNewMarshall(\\n\");\n                print_file(file, indent + 1, \"&__frame->_StubMsg,\\n\");\n                print_file(file, indent + 1, \"(NDR_SCONTEXT)%s%s,\\n\", local_var_prefix, var->name);\n                print_file(file, indent + 1, \"(NDR_RUNDOWN)%s_rundown,\\n\", get_context_handle_type_name(var->type));\n                print_file(file, indent + 1, \"(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%d]);\\n\", start_offset);\n            }\n        }\n        else if (phase == PHASE_UNMARSHAL)\n        {\n            if (pass == PASS_OUT)\n            {\n                if (!in_attr)\n                    print_file(file, indent, \"*%s%s = 0;\\n\", local_var_prefix, var->name);\n                print_file(file, indent, \"NdrClientContextUnmarshall(\\n\");\n                print_file(file, indent + 1, \"&__frame->_StubMsg,\\n\");\n                print_file(file, indent + 1, \"(NDR_CCONTEXT *)%s%s,\\n\", local_var_prefix, var->name);\n                print_file(file, indent + 1, \"__frame->_Handle);\\n\");\n            }\n            else\n            {\n                print_file(file, indent, \"%s%s = NdrServerContextNewUnmarshall(\\n\", local_var_prefix, var->name);\n                print_file(file, indent + 1, \"&__frame->_StubMsg,\\n\");\n                print_file(file, indent + 1, \"(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%d]);\\n\", start_offset);\n            }\n        }\n        break;\n    case TGT_USER_TYPE:\n        print_phase_function(file, indent, \"UserMarshal\", local_var_prefix, phase, var, start_offset);\n        break;\n    case TGT_STRING:\n        if (phase == PHASE_FREE || pass == PASS_RETURN ||\n            pointer_type != FC_RP)\n        {\n            /* strings returned are assumed to be global and hence don't\n             * need freeing */\n            if (is_declptr(type) && !(phase == PHASE_FREE && pass == PASS_RETURN))\n                print_phase_function(file, indent, \"Pointer\", local_var_prefix,\n                                     phase, var, start_offset);\n            else if (pointer_type == FC_RP && phase == PHASE_FREE &&\n                !in_attr && is_conformant_array(type))\n            {\n                print_file(file, indent, \"if (%s%s)\\n\", local_var_prefix, var->name);\n                indent++;\n                print_file(file, indent, \"__frame->_StubMsg.pfnFree(%s%s);\\n\", local_var_prefix, var->name);\n            }\n        }\n        else\n        {\n            unsigned int real_start_offset = start_offset;\n            /* skip over pointer description straight to string description */\n            if (is_declptr(type))\n            {\n                if (is_conformant_array(type))\n                    real_start_offset += 4;\n                else\n                    real_start_offset += 2;\n            }\n            if (is_array(type) && !is_conformant_array(type))\n                print_phase_function(file, indent, \"NonConformantString\",\n                                     local_var_prefix, phase, var,\n                                     real_start_offset);\n            else\n                print_phase_function(file, indent, \"ConformantString\", local_var_prefix,\n                                     phase, var, real_start_offset);\n        }\n        break;\n    case TGT_ARRAY:\n    {\n        unsigned char tc = get_array_fc(type);\n        const char *array_type = NULL;\n\n        /* We already have the size_is expression since it's at the\n           top level, but do checks for multidimensional conformant\n           arrays.  When we handle them, we'll need to extend this\n           function to return a list, and then we'll actually use\n           the return value.  */\n        get_size_is_expr(type, var->name);\n\n        switch (tc)\n        {\n        case FC_SMFARRAY:\n        case FC_LGFARRAY:\n            array_type = \"FixedArray\";\n            break;\n        case FC_SMVARRAY:\n        case FC_LGVARRAY:\n            array_type = \"VaryingArray\";\n            break;\n        case FC_CARRAY:\n            array_type = \"ConformantArray\";\n            break;\n        case FC_CVARRAY:\n            array_type = \"ConformantVaryingArray\";\n            break;\n        case FC_BOGUS_ARRAY:\n            array_type = \"ComplexArray\";\n            break;\n        }\n\n        if (pointer_type != FC_RP) array_type = \"Pointer\";\n\n        if (phase == PHASE_FREE && pointer_type == FC_RP)\n        {\n            /* these are all unmarshalled by allocating memory */\n            if (tc == FC_BOGUS_ARRAY ||\n                tc == FC_CVARRAY ||\n                ((tc == FC_SMVARRAY || tc == FC_LGVARRAY) && in_attr) ||\n                (tc == FC_CARRAY && !in_attr))\n            {\n                if (type_array_is_decl_as_ptr(type) && type->details.array.ptr_tfsoff)\n                {\n                    print_phase_function(file, indent, \"Pointer\", local_var_prefix, phase, var,\n                                         type->details.array.ptr_tfsoff);\n                    break;\n                }\n                print_phase_function(file, indent, array_type, local_var_prefix, phase, var, start_offset);\n                print_file(file, indent, \"if (%s%s)\\n\", local_var_prefix, var->name);\n                indent++;\n                print_file(file, indent, \"__frame->_StubMsg.pfnFree(%s%s);\\n\", local_var_prefix, var->name);\n                break;\n            }\n        }\n        print_phase_function(file, indent, array_type, local_var_prefix, phase, var, start_offset);\n        break;\n    }\n    case TGT_BASIC:\n        print_phase_basetype(file, indent, local_var_prefix, phase, pass, var, var->name);\n        break;\n    case TGT_ENUM:\n        print_phase_basetype(file, indent, local_var_prefix, phase, pass, var, var->name);\n        break;\n    case TGT_RANGE:\n        print_phase_basetype(file, indent, local_var_prefix, phase, pass, var, var->name);\n        /* Note: this goes beyond what MIDL does - it only supports arguments\n         * with the [range] attribute in Oicf mode */\n        if (phase == PHASE_UNMARSHAL)\n        {\n            const expr_t *range_min;\n            const expr_t *range_max;\n            expr_list_t *range_list = get_attrp(var->attrs, ATTR_RANGE);\n            if (!range_list)\n                range_list = get_aliaschain_attrp(type, ATTR_RANGE);\n            range_min = LIST_ENTRY(list_head(range_list), const expr_t, entry);\n            range_max = LIST_ENTRY(list_next(range_list, list_head(range_list)), const expr_t, entry);\n\n            print_file(file, indent, \"if ((%s%s < (\", local_var_prefix, var->name);\n            write_type_decl(file, var->type, NULL);\n            fprintf(file, \")0x%x) || (%s%s > (\", range_min->cval, local_var_prefix, var->name);\n            write_type_decl(file, var->type, NULL);\n            fprintf(file, \")0x%x))\\n\", range_max->cval);\n            print_file(file, indent, \"{\\n\");\n            print_file(file, indent+1, \"RpcRaiseException(RPC_S_INVALID_BOUND);\\n\");\n            print_file(file, indent, \"}\\n\");\n        }\n        break;\n    case TGT_STRUCT:\n        switch (get_struct_fc(type))\n        {\n        case FC_STRUCT:\n            if (phase == PHASE_MARSHAL || phase == PHASE_UNMARSHAL)\n                print_phase_function(file, indent, \"SimpleStruct\", local_var_prefix, phase, var, start_offset);\n            break;\n        case FC_PSTRUCT:\n            print_phase_function(file, indent, \"SimpleStruct\", local_var_prefix, phase, var, start_offset);\n            break;\n        case FC_CSTRUCT:\n        case FC_CPSTRUCT:\n            print_phase_function(file, indent, \"ConformantStruct\", local_var_prefix, phase, var, start_offset);\n            break;\n        case FC_CVSTRUCT:\n            print_phase_function(file, indent, \"ConformantVaryingStruct\", local_var_prefix, phase, var, start_offset);\n            break;\n        case FC_BOGUS_STRUCT:\n            print_phase_function(file, indent, \"ComplexStruct\", local_var_prefix, phase, var, start_offset);\n            break;\n        default:\n            error(\"write_remoting_arguments: Unsupported type: %s (0x%02x)\\n\", var->name, get_struct_fc(type));\n        }\n        break;\n    case TGT_UNION:\n    {\n        const char *union_type = NULL;\n\n        if (type_get_type(type) == TYPE_UNION)\n            union_type = \"NonEncapsulatedUnion\";\n        else if (type_get_type(type) == TYPE_ENCAPSULATED_UNION)\n            union_type = \"EncapsulatedUnion\";\n\n        print_phase_function(file, indent, union_type, local_var_prefix,\n                             phase, var, start_offset);\n        break;\n    }\n    case TGT_POINTER:\n    {\n        const type_t *ref = type_pointer_get_ref(type);\n        if (pointer_type == FC_RP) switch (typegen_detect_type(ref, NULL, TDT_ALL_TYPES))\n        {\n        case TGT_BASIC:\n            print_phase_basetype(file, indent, local_var_prefix, phase, pass, var, var->name);\n            break;\n        case TGT_ENUM:\n            /* base types have known sizes, so don't need a sizing pass\n             * and don't have any memory to free and so don't need a\n             * freeing pass */\n            if (phase == PHASE_MARSHAL || phase == PHASE_UNMARSHAL)\n                print_phase_function(file, indent, \"Pointer\", local_var_prefix, phase, var, start_offset);\n            break;\n        case TGT_STRUCT:\n            switch (get_struct_fc(ref))\n            {\n            case FC_STRUCT:\n                /* simple structs have known sizes, so don't need a sizing\n                 * pass and don't have any memory to free and so don't\n                 * need a freeing pass */\n                if (phase == PHASE_MARSHAL || phase == PHASE_UNMARSHAL)\n                    type_str = \"SimpleStruct\";\n                else if (phase == PHASE_FREE && pass == PASS_RETURN)\n                {\n                    print_file(file, indent, \"if (%s%s)\\n\", local_var_prefix, var->name);\n                    indent++;\n                    print_file(file, indent, \"__frame->_StubMsg.pfnFree(%s%s);\\n\", local_var_prefix, var->name);\n                    indent--;\n                }\n                break;\n            case FC_PSTRUCT:\n                type_str = \"SimpleStruct\";\n                break;\n            case FC_CSTRUCT:\n            case FC_CPSTRUCT:\n                type_str = \"ConformantStruct\";\n                break;\n            case FC_CVSTRUCT:\n                type_str = \"ConformantVaryingStruct\";\n                break;\n            case FC_BOGUS_STRUCT:\n                type_str = \"ComplexStruct\";\n                break;\n            default:\n                error(\"write_remoting_arguments: Unsupported type: %s (0x%02x)\\n\", var->name, get_struct_fc(ref));\n            }\n\n            if (type_str)\n            {\n                if (phase == PHASE_FREE)\n                    type_str = \"Pointer\";\n                else\n                    start_offset = ref->typestring_offset;\n                print_phase_function(file, indent, type_str, local_var_prefix, phase, var, start_offset);\n            }\n            break;\n        case TGT_UNION:\n            if (phase == PHASE_FREE)\n                type_str = \"Pointer\";\n            else\n            {\n                if (type_get_type(ref) == TYPE_UNION)\n                    type_str = \"NonEncapsulatedUnion\";\n                else if (type_get_type(ref) == TYPE_ENCAPSULATED_UNION)\n                    type_str = \"EncapsulatedUnion\";\n\n                start_offset = ref->typestring_offset;\n            }\n\n            print_phase_function(file, indent, type_str, local_var_prefix,\n                                 phase, var, start_offset);\n            break;\n        case TGT_USER_TYPE:\n            if (phase != PHASE_FREE)\n            {\n                type_str = \"UserMarshal\";\n                start_offset = ref->typestring_offset;\n            }\n            else type_str = \"Pointer\";\n\n            print_phase_function(file, indent, type_str, local_var_prefix, phase, var, start_offset);\n            break;\n        case TGT_STRING:\n        case TGT_POINTER:\n        case TGT_ARRAY:\n        case TGT_RANGE:\n        case TGT_IFACE_POINTER:\n        case TGT_CTXT_HANDLE:\n        case TGT_CTXT_HANDLE_POINTER:\n            print_phase_function(file, indent, \"Pointer\", local_var_prefix, phase, var, start_offset);\n            break;\n        case TGT_INVALID:\n            assert(0);\n            break;\n        }\n        else\n            print_phase_function(file, indent, \"Pointer\", local_var_prefix, phase, var, start_offset);\n        break;\n    }\n    case TGT_IFACE_POINTER:\n        print_phase_function(file, indent, \"InterfacePointer\", local_var_prefix, phase, var, start_offset);\n        break;\n    case TGT_INVALID:\n        assert(0);\n        break;\n    }\n    fprintf(file, \"\\n\");\n}\n\nvoid write_remoting_arguments(FILE *file, int indent, const var_t *func, const char *local_var_prefix,\n                              enum pass pass, enum remoting_phase phase)\n{\n    if (phase == PHASE_BUFFERSIZE && pass != PASS_RETURN)\n    {\n        unsigned int size = get_function_buffer_size( func, pass );\n        print_file(file, indent, \"__frame->_StubMsg.BufferLength = %u;\\n\", size);\n    }\n\n    if (pass == PASS_RETURN)\n    {\n        write_remoting_arg( file, indent, func, local_var_prefix, pass, phase,\n                            type_function_get_retval(func->type) );\n    }\n    else\n    {\n        const var_t *var;\n        if (!type_get_function_args(func->type))\n            return;\n        LIST_FOR_EACH_ENTRY( var, type_get_function_args(func->type), const var_t, entry )\n            write_remoting_arg( file, indent, func, local_var_prefix, pass, phase, var );\n    }\n}\n\n\nunsigned int get_size_procformatstring_func(const type_t *iface, const var_t *func)\n{\n    unsigned int offset = 0;\n    write_procformatstring_func( NULL, 0, iface, func, &offset, 0 );\n    return offset;\n}\n\nunsigned int get_size_procformatstring(const statement_list_t *stmts, type_pred_t pred)\n{\n    const statement_t *stmt;\n    unsigned int size = 1;\n\n    if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry )\n    {\n        const type_t *iface;\n        const statement_t *stmt_func;\n\n        if (stmt->type != STMT_TYPE || type_get_type(stmt->u.type) != TYPE_INTERFACE)\n            continue;\n\n        iface = stmt->u.type;\n        if (!pred(iface))\n            continue;\n\n        STATEMENTS_FOR_EACH_FUNC( stmt_func, type_iface_get_stmts(iface) )\n        {\n            const var_t *func = stmt_func->u.var;\n            if (!is_local(func->attrs))\n                size += get_size_procformatstring_func( iface, func );\n        }\n    }\n    return size;\n}\n\nunsigned int get_size_typeformatstring(const statement_list_t *stmts, type_pred_t pred)\n{\n    set_all_tfswrite(FALSE);\n    return process_tfs(NULL, stmts, pred);\n}\n\nvoid declare_stub_args( FILE *file, int indent, const var_t *func )\n{\n    int in_attr, out_attr;\n    int i = 0;\n    const var_t *var = type_function_get_retval(func->type);\n\n    /* declare return value */\n    if (!is_void(var->type))\n    {\n        print_file(file, indent, \"%s\", \"\");\n        write_type_decl(file, var->type, var->name);\n        fprintf(file, \";\\n\");\n    }\n\n    if (!type_get_function_args(func->type))\n        return;\n\n    LIST_FOR_EACH_ENTRY( var, type_get_function_args(func->type), const var_t, entry )\n    {\n        in_attr = is_attr(var->attrs, ATTR_IN);\n        out_attr = is_attr(var->attrs, ATTR_OUT);\n        if (!out_attr && !in_attr)\n            in_attr = 1;\n\n        if (is_context_handle(var->type))\n            print_file(file, indent, \"NDR_SCONTEXT %s;\\n\", var->name);\n        else\n        {\n            if (!in_attr && !is_conformant_array(var->type))\n            {\n                type_t *type_to_print;\n                char name[16];\n                print_file(file, indent, \"%s\", \"\");\n                if (type_get_type(var->type) == TYPE_ARRAY &&\n                    !type_array_is_decl_as_ptr(var->type))\n                    type_to_print = var->type;\n                else\n                    type_to_print = type_pointer_get_ref(var->type);\n                sprintf(name, \"_W%u\", i++);\n                write_type_decl(file, type_to_print, name);\n                fprintf(file, \";\\n\");\n            }\n\n            print_file(file, indent, \"%s\", \"\");\n            write_type_decl_left(file, var->type);\n            fprintf(file, \" \");\n            if (type_get_type(var->type) == TYPE_ARRAY &&\n                !type_array_is_decl_as_ptr(var->type)) {\n                fprintf(file, \"(*%s)\", var->name);\n            } else\n                fprintf(file, \"%s\", var->name);\n            write_type_right(file, var->type, FALSE);\n            fprintf(file, \";\\n\");\n\n            if (decl_indirect(var->type))\n                print_file(file, indent, \"void *_p_%s;\\n\", var->name);\n        }\n    }\n}\n\n\nvoid assign_stub_out_args( FILE *file, int indent, const var_t *func, const char *local_var_prefix )\n{\n    int in_attr, out_attr;\n    int i = 0, sep = 0;\n    const var_t *var;\n    type_t *ref;\n\n    if (!type_get_function_args(func->type))\n        return;\n\n    LIST_FOR_EACH_ENTRY( var, type_get_function_args(func->type), const var_t, entry )\n    {\n        in_attr = is_attr(var->attrs, ATTR_IN);\n        out_attr = is_attr(var->attrs, ATTR_OUT);\n        if (!out_attr && !in_attr)\n            in_attr = 1;\n\n        if (!in_attr)\n        {\n            print_file(file, indent, \"%s%s\", local_var_prefix, var->name);\n\n            switch (typegen_detect_type(var->type, var->attrs, TDT_IGNORE_STRINGS))\n            {\n            case TGT_CTXT_HANDLE_POINTER:\n                fprintf(file, \" = NdrContextHandleInitialize(\\n\");\n                print_file(file, indent + 1, \"&__frame->_StubMsg,\\n\");\n                print_file(file, indent + 1, \"(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%d]);\\n\",\n                           var->typestring_offset);\n                break;\n            case TGT_ARRAY:\n                if (type_array_has_conformance(var->type))\n                {\n                    unsigned int size;\n                    type_t *type;\n\n                    fprintf(file, \" = NdrAllocate(&__frame->_StubMsg, \");\n                    for (type = var->type;\n                         is_array(type) && type_array_has_conformance(type);\n                         type = type_array_get_element(type))\n                    {\n                        write_expr(file, type_array_get_conformance(type), TRUE,\n                                   TRUE, NULL, NULL, local_var_prefix);\n                        fprintf(file, \" * \");\n                    }\n                    size = type_memsize(type);\n                    fprintf(file, \"%u);\\n\", size);\n\n                    print_file(file, indent, \"memset(%s%s, 0, \", local_var_prefix, var->name);\n                    for (type = var->type;\n                         is_array(type) && type_array_has_conformance(type);\n                         type = type_array_get_element(type))\n                    {\n                        write_expr(file, type_array_get_conformance(type), TRUE,\n                                   TRUE, NULL, NULL, local_var_prefix);\n                        fprintf(file, \" * \");\n                    }\n                    size = type_memsize(type);\n                    fprintf(file, \"%u);\\n\", size);\n                }\n                else\n                    fprintf(file, \" = &%s_W%u;\\n\", local_var_prefix, i++);\n                break;\n            case TGT_POINTER:\n                fprintf(file, \" = &%s_W%u;\\n\", local_var_prefix, i);\n                ref = type_pointer_get_ref(var->type);\n                switch (typegen_detect_type(ref, var->attrs, TDT_IGNORE_STRINGS))\n                {\n                case TGT_BASIC:\n                case TGT_ENUM:\n                case TGT_POINTER:\n                case TGT_RANGE:\n                case TGT_IFACE_POINTER:\n                    print_file(file, indent, \"%s_W%u = 0;\\n\", local_var_prefix, i);\n                    break;\n                case TGT_USER_TYPE:\n                    print_file(file, indent, \"memset(&%s_W%u, 0, sizeof(%s_W%u));\\n\",\n                               local_var_prefix, i, local_var_prefix, i);\n                    break;\n                case TGT_ARRAY:\n                    if (type_array_is_decl_as_ptr(ref))\n                    {\n                        print_file(file, indent, \"%s_W%u = 0;\\n\", local_var_prefix, i);\n                        break;\n                    }\n                    ref = type_array_get_element(ref);\n                    /* fall through */\n                case TGT_STRUCT:\n                case TGT_UNION:\n                    if (type_has_pointers(ref))\n                        print_file(file, indent, \"memset(&%s_W%u, 0, sizeof(%s_W%u));\\n\",\n                                   local_var_prefix, i, local_var_prefix, i);\n                    break;\n                case TGT_CTXT_HANDLE:\n                case TGT_CTXT_HANDLE_POINTER:\n                case TGT_INVALID:\n                case TGT_STRING:\n                    /* not initialised */\n                    break;\n                }\n                i++;\n                break;\n            default:\n                break;\n            }\n\n            sep = 1;\n        }\n    }\n    if (sep)\n        fprintf(file, \"\\n\");\n}\n\n\nvoid write_func_param_struct( FILE *file, const type_t *iface, const type_t *func,\n                              const char *var_decl, int add_retval )\n{\n    var_t *retval = type_function_get_retval( func );\n    const var_list_t *args = type_get_function_args( func );\n    const var_t *arg;\n    int needs_packing;\n    unsigned int align = 0;\n\n    if (args)\n        LIST_FOR_EACH_ENTRY( arg, args, const var_t, entry )\n            if (!is_array( arg->type )) type_memsize_and_alignment( arg->type, &align );\n\n    needs_packing = (align > pointer_size);\n\n    if (needs_packing) print_file( file, 0, \"#include <pshpack%u.h>\\n\", pointer_size );\n    print_file(file, 1, \"struct _PARAM_STRUCT\\n\" );\n    print_file(file, 1, \"{\\n\" );\n    if (is_object( iface )) print_file(file, 2, \"%s *This;\\n\", iface->name );\n\n    if (args) LIST_FOR_EACH_ENTRY( arg, args, const var_t, entry )\n    {\n        print_file(file, 2, \"%s\", \"\");\n        write_type_left( file, (type_t *)arg->type, NAME_DEFAULT, TRUE );\n        if (needs_space_after( arg->type )) fputc( ' ', file );\n        if (is_array( arg->type ) && !type_array_is_decl_as_ptr( arg->type )) fputc( '*', file );\n\n        /* FIXME: should check for large args being passed by pointer */\n        align = 0;\n        if (is_array( arg->type ) || is_ptr( arg->type )) align = pointer_size;\n        else type_memsize_and_alignment( arg->type, &align );\n\n        if (align >= pointer_size)\n            fprintf( file, \"%s;\\n\", arg->name );\n        else\n            fprintf( file, \"%s DECLSPEC_ALIGN(%u);\\n\", arg->name, pointer_size );\n    }\n    if (add_retval && !is_void( retval->type ))\n    {\n        print_file(file, 2, \"%s\", \"\");\n        write_type_decl( file, retval->type, retval->name );\n        if (is_array( retval->type ) || is_ptr( retval->type ) ||\n            type_memsize( retval->type ) == pointer_size)\n            fprintf( file, \";\\n\" );\n        else\n            fprintf( file, \" DECLSPEC_ALIGN(%u);\\n\", pointer_size );\n    }\n    print_file(file, 1, \"} %s;\\n\", var_decl );\n    if (needs_packing) print_file( file, 0, \"#include <poppack.h>\\n\" );\n    print_file( file, 0, \"\\n\" );\n}\n\nvoid write_pointer_checks( FILE *file, int indent, const var_t *func )\n{\n    const var_list_t *args = type_get_function_args( func->type );\n    const var_t *var;\n\n    if (!args) return;\n\n    LIST_FOR_EACH_ENTRY( var, args, const var_t, entry )\n        if (cant_be_null( var ))\n            print_file( file, indent, \"if (!%s) RpcRaiseException(RPC_X_NULL_REF_POINTER);\\n\", var->name );\n}\n\nint write_expr_eval_routines(FILE *file, const char *iface)\n{\n    static const char *var_name = \"pS\";\n    static const char *var_name_expr = \"pS->\";\n    int result = 0;\n    struct expr_eval_routine *eval;\n    unsigned short callback_offset = 0;\n\n    LIST_FOR_EACH_ENTRY(eval, &expr_eval_routines, struct expr_eval_routine, entry)\n    {\n        const char *name = eval->name;\n        result = 1;\n\n        print_file(file, 0, \"static void __RPC_USER %s_%sExprEval_%04u(PMIDL_STUB_MESSAGE pStubMsg)\\n\",\n                   eval->iface ? eval->iface->name : iface, name, callback_offset);\n        print_file(file, 0, \"{\\n\");\n        if (type_get_type( eval->cont_type ) == TYPE_FUNCTION)\n        {\n            write_func_param_struct( file, eval->iface, eval->cont_type,\n                                     \"*pS = (struct _PARAM_STRUCT *)pStubMsg->StackTop\", FALSE );\n        }\n        else\n        {\n            print_file(file, 1, \"%s\", \"\");\n            write_type_left(file, (type_t *)eval->cont_type, NAME_DEFAULT, TRUE);\n            fprintf(file, \" *%s = (\", var_name);\n            write_type_left(file, (type_t *)eval->cont_type, NAME_DEFAULT, TRUE);\n            fprintf(file, \" *)(pStubMsg->StackTop - %u);\\n\", eval->baseoff);\n        }\n        print_file(file, 1, \"pStubMsg->Offset = 0;\\n\"); /* FIXME */\n        print_file(file, 1, \"pStubMsg->MaxCount = (ULONG_PTR)\");\n        write_expr(file, eval->expr, 1, 1, var_name_expr, eval->cont_type, \"\");\n        fprintf(file, \";\\n\");\n        print_file(file, 0, \"}\\n\\n\");\n        callback_offset++;\n    }\n    return result;\n}\n\nvoid write_expr_eval_routine_list(FILE *file, const char *iface)\n{\n    struct expr_eval_routine *eval;\n    struct expr_eval_routine *cursor;\n    unsigned short callback_offset = 0;\n\n    fprintf(file, \"static const EXPR_EVAL ExprEvalRoutines[] =\\n\");\n    fprintf(file, \"{\\n\");\n\n    LIST_FOR_EACH_ENTRY_SAFE(eval, cursor, &expr_eval_routines, struct expr_eval_routine, entry)\n    {\n        print_file(file, 1, \"%s_%sExprEval_%04u,\\n\",\n                   eval->iface ? eval->iface->name : iface, eval->name, callback_offset);\n        callback_offset++;\n        list_remove(&eval->entry);\n        free(eval->name);\n        free(eval);\n    }\n\n    fprintf(file, \"};\\n\\n\");\n}\n\nvoid write_user_quad_list(FILE *file)\n{\n    user_type_t *ut;\n\n    if (list_empty(&user_type_list))\n        return;\n\n    fprintf(file, \"static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[] =\\n\");\n    fprintf(file, \"{\\n\");\n    LIST_FOR_EACH_ENTRY(ut, &user_type_list, user_type_t, entry)\n    {\n        const char *sep = &ut->entry == list_tail(&user_type_list) ? \"\" : \",\";\n        print_file(file, 1, \"{\\n\");\n        print_file(file, 2, \"(USER_MARSHAL_SIZING_ROUTINE)%s_UserSize,\\n\", ut->name);\n        print_file(file, 2, \"(USER_MARSHAL_MARSHALLING_ROUTINE)%s_UserMarshal,\\n\", ut->name);\n        print_file(file, 2, \"(USER_MARSHAL_UNMARSHALLING_ROUTINE)%s_UserUnmarshal,\\n\", ut->name);\n        print_file(file, 2, \"(USER_MARSHAL_FREEING_ROUTINE)%s_UserFree\\n\", ut->name);\n        print_file(file, 1, \"}%s\\n\", sep);\n    }\n    fprintf(file, \"};\\n\\n\");\n}\n\nvoid write_endpoints( FILE *f, const char *prefix, const str_list_t *list )\n{\n    const struct str_list_entry_t *endpoint;\n    const char *p;\n\n    /* this should be an array of RPC_PROTSEQ_ENDPOINT but we want const strings */\n    print_file( f, 0, \"static const unsigned char * const %s__RpcProtseqEndpoint[][2] =\\n{\\n\", prefix );\n    LIST_FOR_EACH_ENTRY( endpoint, list, const struct str_list_entry_t, entry )\n    {\n        print_file( f, 1, \"{ (const unsigned char *)\\\"\" );\n        for (p = endpoint->str; *p && *p != ':'; p++)\n        {\n            if (*p == '\"' || *p == '\\\\') fputc( '\\\\', f );\n            fputc( *p, f );\n        }\n        if (!*p) goto error;\n        if (p[1] != '[') goto error;\n\n        fprintf( f, \"\\\", (const unsigned char *)\\\"\" );\n        for (p += 2; *p && *p != ']'; p++)\n        {\n            if (*p == '\"' || *p == '\\\\') fputc( '\\\\', f );\n            fputc( *p, f );\n        }\n        if (*p != ']') goto error;\n        fprintf( f, \"\\\" },\\n\" );\n    }\n    print_file( f, 0, \"};\\n\\n\" );\n    return;\n\nerror:\n    error(\"Invalid endpoint syntax '%s'\\n\", endpoint->str);\n}\n\nvoid write_client_call_routine( FILE *file, const type_t *iface, const var_t *func,\n                                const char *prefix, unsigned int proc_offset )\n{\n    type_t *rettype = type_function_get_rettype( func->type );\n    int has_ret = !is_void( rettype );\n    const var_list_t *args = type_get_function_args( func->type );\n    const var_t *arg;\n    int len, needs_params = 0;\n\n    /* we need a param structure if we have more than one arg */\n    if (pointer_size == 4 && args) needs_params = is_object( iface ) || list_count( args ) > 1;\n\n    print_file( file, 0, \"{\\n\");\n    if (needs_params)\n    {\n        if (has_ret) print_file( file, 1, \"%s\", \"CLIENT_CALL_RETURN _RetVal;\\n\" );\n        write_func_param_struct( file, iface, func->type, \"__params\", FALSE );\n        if (is_object( iface )) print_file( file, 1, \"__params.This = This;\\n\" );\n        if (args)\n            LIST_FOR_EACH_ENTRY( arg, args, const var_t, entry )\n                print_file( file, 1, \"__params.%s = %s;\\n\", arg->name, arg->name );\n    }\n    else if (has_ret) print_file( file, 1, \"%s\", \"CLIENT_CALL_RETURN _RetVal;\\n\\n\" );\n\n    len = fprintf( file, \"    %s%s( \",\n                   has_ret ? \"_RetVal = \" : \"\",\n                   get_stub_mode() == MODE_Oif ? \"NdrClientCall2\" : \"NdrClientCall\" );\n    fprintf( file, \"&%s_StubDesc,\", prefix );\n    fprintf( file, \"\\n%*s&__MIDL_ProcFormatString.Format[%u]\", len, \"\", proc_offset );\n    if (needs_params)\n    {\n        fprintf( file, \",\\n%*s&__params\", len, \"\" );\n    }\n    else if (pointer_size == 8)\n    {\n        if (is_object( iface )) fprintf( file, \",\\n%*sThis\", len, \"\" );\n        if (args)\n            LIST_FOR_EACH_ENTRY( arg, args, const var_t, entry )\n                fprintf( file, \",\\n%*s%s\", len, \"\", arg->name );\n    }\n    else\n    {\n        if (is_object( iface )) fprintf( file, \",\\n%*s&This\", len, \"\" );\n        else if (args)\n        {\n            arg = LIST_ENTRY( list_head(args), const var_t, entry );\n            fprintf( file, \",\\n%*s&%s\", len, \"\", arg->name );\n        }\n    }\n    fprintf( file, \" );\\n\" );\n    if (has_ret)\n    {\n        print_file( file, 1, \"return (\" );\n        write_type_decl_left(file, rettype);\n        fprintf( file, \")%s;\\n\", pointer_size == 8 ? \"_RetVal.Simple\" : \"*(LONG_PTR *)&_RetVal\" );\n    }\n    print_file( file, 0, \"}\\n\\n\");\n}\n\nvoid write_exceptions( FILE *file )\n{\n    fprintf( file, \"#ifndef USE_COMPILER_EXCEPTIONS\\n\");\n    fprintf( file, \"\\n\");\n    fprintf( file, \"#include \\\"wine/exception.h\\\"\\n\");\n    fprintf( file, \"#undef RpcTryExcept\\n\");\n    fprintf( file, \"#undef RpcExcept\\n\");\n    fprintf( file, \"#undef RpcEndExcept\\n\");\n    fprintf( file, \"#undef RpcTryFinally\\n\");\n    fprintf( file, \"#undef RpcFinally\\n\");\n    fprintf( file, \"#undef RpcEndFinally\\n\");\n    fprintf( file, \"#undef RpcExceptionCode\\n\");\n    fprintf( file, \"#undef RpcAbnormalTermination\\n\");\n    fprintf( file, \"\\n\");\n    fprintf( file, \"struct __exception_frame;\\n\");\n    fprintf( file, \"typedef int (*__filter_func)(struct __exception_frame *);\\n\");\n    fprintf( file, \"typedef void (*__finally_func)(struct __exception_frame *);\\n\");\n    fprintf( file, \"\\n\");\n    fprintf( file, \"#define __DECL_EXCEPTION_FRAME \\\\\\n\");\n    fprintf( file, \"    EXCEPTION_REGISTRATION_RECORD frame; \\\\\\n\");\n    fprintf( file, \"    __filter_func                 filter; \\\\\\n\");\n    fprintf( file, \"    __finally_func                finally; \\\\\\n\");\n    fprintf( file, \"    sigjmp_buf                    jmp; \\\\\\n\");\n    fprintf( file, \"    DWORD                         code; \\\\\\n\");\n    fprintf( file, \"    unsigned char                 abnormal_termination; \\\\\\n\");\n    fprintf( file, \"    unsigned char                 filter_level; \\\\\\n\");\n    fprintf( file, \"    unsigned char                 finally_level;\\n\");\n    fprintf( file, \"\\n\");\n    fprintf( file, \"struct __exception_frame\\n{\\n\");\n    fprintf( file, \"    __DECL_EXCEPTION_FRAME\\n\");\n    fprintf( file, \"};\\n\");\n    fprintf( file, \"\\n\");\n    fprintf( file, \"static inline void __widl_unwind_target(void)\\n\" );\n    fprintf( file, \"{\\n\");\n    fprintf( file, \"    struct __exception_frame *exc_frame = (struct __exception_frame *)__wine_get_frame();\\n\" );\n    fprintf( file, \"    if (exc_frame->finally_level > exc_frame->filter_level)\\n\" );\n    fprintf( file, \"    {\\n\");\n    fprintf( file, \"        exc_frame->abnormal_termination = 1;\\n\");\n    fprintf( file, \"        exc_frame->finally( exc_frame );\\n\");\n    fprintf( file, \"        __wine_pop_frame( &exc_frame->frame );\\n\");\n    fprintf( file, \"    }\\n\");\n    fprintf( file, \"    exc_frame->filter_level = 0;\\n\");\n    fprintf( file, \"    siglongjmp( exc_frame->jmp, 1 );\\n\");\n    fprintf( file, \"}\\n\");\n    fprintf( file, \"\\n\");\n    fprintf( file, \"static DWORD __widl_exception_handler( EXCEPTION_RECORD *record,\\n\");\n    fprintf( file, \"                                       EXCEPTION_REGISTRATION_RECORD *frame,\\n\");\n    fprintf( file, \"                                       CONTEXT *context,\\n\");\n    fprintf( file, \"                                       EXCEPTION_REGISTRATION_RECORD **pdispatcher )\\n\");\n    fprintf( file, \"{\\n\");\n    fprintf( file, \"    struct __exception_frame *exc_frame = (struct __exception_frame *)frame;\\n\");\n    fprintf( file, \"\\n\");\n    fprintf( file, \"    if (record->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND | EH_NESTED_CALL))\\n\");\n    fprintf( file, \"    {\\n\" );\n    fprintf( file, \"        if (exc_frame->finally_level && (record->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND)))\\n\");\n    fprintf( file, \"        {\\n\" );\n    fprintf( file, \"            exc_frame->abnormal_termination = 1;\\n\");\n    fprintf( file, \"            exc_frame->finally( exc_frame );\\n\");\n    fprintf( file, \"        }\\n\" );\n    fprintf( file, \"        return ExceptionContinueSearch;\\n\");\n    fprintf( file, \"    }\\n\" );\n    fprintf( file, \"    exc_frame->code = record->ExceptionCode;\\n\");\n    fprintf( file, \"    if (exc_frame->filter_level && exc_frame->filter( exc_frame ) == EXCEPTION_EXECUTE_HANDLER)\\n\" );\n    fprintf( file, \"        __wine_rtl_unwind( frame, record, __widl_unwind_target );\\n\");\n    fprintf( file, \"    return ExceptionContinueSearch;\\n\");\n    fprintf( file, \"}\\n\");\n    fprintf( file, \"\\n\");\n    fprintf( file, \"#define RpcTryExcept \\\\\\n\");\n    fprintf( file, \"    if (!sigsetjmp( __frame->jmp, 0 )) \\\\\\n\");\n    fprintf( file, \"    { \\\\\\n\");\n    fprintf( file, \"        if (!__frame->finally_level) \\\\\\n\" );\n    fprintf( file, \"            __wine_push_frame( &__frame->frame ); \\\\\\n\");\n    fprintf( file, \"        __frame->filter_level = __frame->finally_level + 1;\\n\" );\n    fprintf( file, \"\\n\");\n    fprintf( file, \"#define RpcExcept(expr) \\\\\\n\");\n    fprintf( file, \"        if (!__frame->finally_level) \\\\\\n\" );\n    fprintf( file, \"            __wine_pop_frame( &__frame->frame ); \\\\\\n\");\n    fprintf( file, \"        __frame->filter_level = 0; \\\\\\n\" );\n    fprintf( file, \"    } \\\\\\n\");\n    fprintf( file, \"    else \\\\\\n\");\n    fprintf( file, \"\\n\");\n    fprintf( file, \"#define RpcEndExcept\\n\");\n    fprintf( file, \"\\n\");\n    fprintf( file, \"#define RpcExceptionCode() (__frame->code)\\n\");\n    fprintf( file, \"\\n\");\n    fprintf( file, \"#define RpcTryFinally \\\\\\n\");\n    fprintf( file, \"    if (!__frame->filter_level) \\\\\\n\");\n    fprintf( file, \"        __wine_push_frame( &__frame->frame ); \\\\\\n\");\n    fprintf( file, \"    __frame->finally_level = __frame->filter_level + 1;\\n\");\n    fprintf( file, \"\\n\");\n    fprintf( file, \"#define RpcFinally \\\\\\n\");\n    fprintf( file, \"    if (!__frame->filter_level) \\\\\\n\");\n    fprintf( file, \"        __wine_pop_frame( &__frame->frame ); \\\\\\n\");\n    fprintf( file, \"    __frame->finally_level = 0;\\n\");\n    fprintf( file, \"\\n\");\n    fprintf( file, \"#define RpcEndFinally\\n\");\n    fprintf( file, \"\\n\");\n    fprintf( file, \"#define RpcAbnormalTermination() (__frame->abnormal_termination)\\n\");\n    fprintf( file, \"\\n\");\n    fprintf( file, \"#define RpcExceptionInit(filter_func,finally_func) \\\\\\n\");\n    fprintf( file, \"    do { \\\\\\n\");\n    fprintf( file, \"        __frame->frame.Handler = __widl_exception_handler; \\\\\\n\");\n    fprintf( file, \"        __frame->filter = (__filter_func)(filter_func); \\\\\\n\" );\n    fprintf( file, \"        __frame->finally = (__finally_func)(finally_func); \\\\\\n\");\n    fprintf( file, \"        __frame->abnormal_termination = 0; \\\\\\n\");\n    fprintf( file, \"        __frame->filter_level = 0; \\\\\\n\");\n    fprintf( file, \"        __frame->finally_level = 0; \\\\\\n\");\n    fprintf( file, \"    } while (0)\\n\");\n    fprintf( file, \"\\n\");\n    fprintf( file, \"#else /* USE_COMPILER_EXCEPTIONS */\\n\");\n    fprintf( file, \"\\n\");\n    fprintf( file, \"#define RpcExceptionInit(filter_func,finally_func) \\\\\\n\");\n    fprintf( file, \"    do { (void)(filter_func); } while(0)\\n\");\n    fprintf( file, \"\\n\");\n    fprintf( file, \"#define __DECL_EXCEPTION_FRAME \\\\\\n\");\n    fprintf( file, \"    DWORD code;\\n\");\n    fprintf( file, \"\\n\");\n    fprintf( file, \"#endif /* USE_COMPILER_EXCEPTIONS */\\n\");\n}\n"
  },
  {
    "path": "widl/typegen.h",
    "content": "/*\n * Format String Generator for IDL Compiler\n *\n * Copyright 2005-2006 Eric Kohl\n * Copyright 2005 Robert Shearman\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n\nenum pass\n{\n    PASS_IN,\n    PASS_OUT,\n    PASS_RETURN\n};\n\nenum remoting_phase\n{\n    PHASE_BUFFERSIZE,\n    PHASE_MARSHAL,\n    PHASE_UNMARSHAL,\n    PHASE_FREE\n};\n\nenum typegen_detect_flags\n{\n    TDT_ALL_TYPES =      1 << 0,\n    TDT_IGNORE_STRINGS = 1 << 1,\n    TDT_IGNORE_RANGES =  1 << 2,\n};\n\nenum typegen_type\n{\n    TGT_INVALID,\n    TGT_USER_TYPE,\n    TGT_CTXT_HANDLE,\n    TGT_CTXT_HANDLE_POINTER,\n    TGT_STRING,\n    TGT_POINTER,\n    TGT_ARRAY,\n    TGT_IFACE_POINTER,\n    TGT_BASIC,\n    TGT_ENUM,\n    TGT_STRUCT,\n    TGT_UNION,\n    TGT_RANGE,\n};\n\ntypedef int (*type_pred_t)(const type_t *);\n\nvoid write_formatstringsdecl(FILE *f, int indent, const statement_list_t *stmts, type_pred_t pred);\nvoid write_procformatstring(FILE *file, const statement_list_t *stmts, type_pred_t pred);\nvoid write_typeformatstring(FILE *file, const statement_list_t *stmts, type_pred_t pred);\nvoid write_procformatstring_offsets( FILE *file, const type_t *iface );\nvoid print_phase_basetype(FILE *file, int indent, const char *local_var_prefix, enum remoting_phase phase,\n                          enum pass pass, const var_t *var, const char *varname);\nvoid write_parameter_conf_or_var_exprs(FILE *file, int indent, const char *local_var_prefix,\n                                       enum remoting_phase phase, const var_t *var, int valid_variance);\nvoid write_remoting_arguments(FILE *file, int indent, const var_t *func, const char *local_var_prefix,\n                              enum pass pass, enum remoting_phase phase);\nunsigned int get_size_procformatstring_func(const type_t *iface, const var_t *func);\nunsigned int get_size_procformatstring(const statement_list_t *stmts, type_pred_t pred);\nunsigned int get_size_typeformatstring(const statement_list_t *stmts, type_pred_t pred);\nvoid assign_stub_out_args( FILE *file, int indent, const var_t *func, const char *local_var_prefix );\nvoid declare_stub_args( FILE *file, int indent, const var_t *func );\nvoid write_func_param_struct( FILE *file, const type_t *iface, const type_t *func,\n                              const char *var_decl, int add_retval );\nvoid write_pointer_checks( FILE *file, int indent, const var_t *func );\nint write_expr_eval_routines(FILE *file, const char *iface);\nvoid write_expr_eval_routine_list(FILE *file, const char *iface);\nvoid write_user_quad_list(FILE *file);\nvoid write_endpoints( FILE *f, const char *prefix, const str_list_t *list );\nvoid write_client_call_routine( FILE *file, const type_t *iface, const var_t *func,\n                                const char *prefix, unsigned int proc_offset );\nvoid write_exceptions( FILE *file );\nunsigned int type_memsize(const type_t *t);\nint decl_indirect(const type_t *t);\nint is_interpreted_func(const type_t *iface, const var_t *func);\nvoid write_parameters_init(FILE *file, int indent, const var_t *func, const char *local_var_prefix);\nvoid print(FILE *file, int indent, const char *format, va_list ap);\nexpr_t *get_size_is_expr(const type_t *t, const char *name);\nint is_full_pointer_function(const var_t *func);\nvoid write_full_pointer_init(FILE *file, int indent, const var_t *func, int is_server);\nvoid write_full_pointer_free(FILE *file, int indent, const var_t *func);\nunsigned char get_basic_fc(const type_t *type);\nunsigned char get_pointer_fc(const type_t *type, const attr_list_t *attrs, int toplevel_param);\nunsigned char get_struct_fc(const type_t *type);\nenum typegen_type typegen_detect_type(const type_t *type, const attr_list_t *attrs, unsigned int flags);\nunsigned int type_memsize_and_alignment(const type_t *t, unsigned int *align);\n"
  },
  {
    "path": "widl/typelib.c",
    "content": "/*\n * IDL Compiler\n *\n * Copyright 2004 Ove Kaaven\n * Copyright 2006 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n#include \"wine/wpp.h\"\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <stdarg.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#include <string.h>\n#include <ctype.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n\n#include \"widl.h\"\n#include \"utils.h\"\n#include \"parser.h\"\n#include \"header.h\"\n#include \"typelib.h\"\n#include \"widltypes.h\"\n#include \"typelib_struct.h\"\n#include \"typetree.h\"\n\nstatic typelib_t *typelib;\n\n/* List of oleauto types that should be recognized by name.\n * (most of) these seem to be intrinsic types in mktyplib.\n * This table MUST be alphabetically sorted on the kw field.\n */\nstatic const struct oatype {\n  const char *kw;\n  unsigned short vt;\n} oatypes[] = {\n  {\"BSTR\",          VT_BSTR},\n  {\"CURRENCY\",      VT_CY},\n  {\"DATE\",          VT_DATE},\n  {\"DECIMAL\",       VT_DECIMAL},\n  {\"HRESULT\",       VT_HRESULT},\n  {\"LPSTR\",         VT_LPSTR},\n  {\"LPWSTR\",        VT_LPWSTR},\n  {\"SCODE\",         VT_ERROR},\n  {\"VARIANT\",       VT_VARIANT},\n  {\"VARIANT_BOOL\",  VT_BOOL}\n};\n#define NTYPES (sizeof(oatypes)/sizeof(oatypes[0]))\n#define KWP(p) ((const struct oatype *)(p))\n\nstatic int kw_cmp_func(const void *s1, const void *s2)\n{\n        return strcmp(KWP(s1)->kw, KWP(s2)->kw);\n}\n\nstatic unsigned short builtin_vt(const type_t *t)\n{\n  const char *kw = t->name;\n  struct oatype key;\n  const struct oatype *kwp;\n  key.kw = kw;\n#ifdef KW_BSEARCH\n  kwp = bsearch(&key, oatypes, NTYPES, sizeof(oatypes[0]), kw_cmp_func);\n#else\n  {\n    unsigned int i;\n    for (kwp=NULL, i=0; i < NTYPES; i++)\n      if (!kw_cmp_func(&key, &oatypes[i])) {\n        kwp = &oatypes[i];\n        break;\n      }\n  }\n#endif\n  if (kwp) {\n    return kwp->vt;\n  }\n  if (is_string_type (t->attrs, t))\n  {\n    const type_t *elem_type;\n    if (is_array(t))\n      elem_type = type_array_get_element(t);\n    else\n      elem_type = type_pointer_get_ref(t);\n    if (type_get_type(elem_type) == TYPE_BASIC)\n    {\n      switch (type_basic_get_type(elem_type))\n      {\n      case TYPE_BASIC_CHAR: return VT_LPSTR;\n      case TYPE_BASIC_WCHAR: return VT_LPWSTR;\n      default: break;\n      }\n    }\n  }\n  return 0;\n}\n\nstatic int match(const char*n, const char*m)\n{\n  if (!n) return 0;\n  return !strcmp(n, m);\n}\n\nunsigned short get_type_vt(type_t *t)\n{\n  unsigned short vt;\n\n  chat(\"get_type_vt: %p type->name %s\\n\", t, t->name);\n  if (t->name) {\n    vt = builtin_vt(t);\n    if (vt) return vt;\n  }\n\n  if (type_is_alias(t) && is_attr(t->attrs, ATTR_PUBLIC))\n    return VT_USERDEFINED;\n\n  switch (type_get_type(t)) {\n  case TYPE_BASIC:\n    switch (type_basic_get_type(t)) {\n    case TYPE_BASIC_BYTE:\n      return VT_UI1;\n    case TYPE_BASIC_CHAR:\n    case TYPE_BASIC_INT8:\n      if (type_basic_get_sign(t) > 0)\n        return VT_UI1;\n      else\n        return VT_I1;\n    case TYPE_BASIC_WCHAR:\n      return VT_I2; /* mktyplib seems to parse wchar_t as short */\n    case TYPE_BASIC_INT16:\n      if (type_basic_get_sign(t) > 0)\n        return VT_UI2;\n      else\n        return VT_I2;\n    case TYPE_BASIC_INT:\n      if (type_basic_get_sign(t) > 0)\n        return VT_UINT;\n      else\n        return VT_INT;\n    case TYPE_BASIC_INT32:\n    case TYPE_BASIC_ERROR_STATUS_T:\n      if (type_basic_get_sign(t) > 0)\n        return VT_UI4;\n      else\n        return VT_I4;\n    case TYPE_BASIC_INT64:\n    case TYPE_BASIC_HYPER:\n      if (type_basic_get_sign(t) > 0)\n        return VT_UI8;\n      else\n        return VT_I8;\n    case TYPE_BASIC_INT3264:\n      if (typelib_kind == SYS_WIN64)\n      {\n        if (type_basic_get_sign(t) > 0)\n          return VT_UI8;\n        else\n          return VT_I8;\n      }\n      else\n      {\n        if (type_basic_get_sign(t) > 0)\n          return VT_UI4;\n        else\n          return VT_I4;\n      }\n    case TYPE_BASIC_FLOAT:\n      return VT_R4;\n    case TYPE_BASIC_DOUBLE:\n      return VT_R8;\n    case TYPE_BASIC_HANDLE:\n      error(\"handles can't be used in typelibs\\n\");\n    }\n    break;\n\n  case TYPE_POINTER:\n    return VT_PTR;\n\n  case TYPE_ARRAY:\n    if (type_array_is_decl_as_ptr(t))\n    {\n      if (match(type_array_get_element(t)->name, \"SAFEARRAY\"))\n        return VT_SAFEARRAY;\n    }\n    else\n      error(\"get_type_vt: array types not supported\\n\");\n    return VT_PTR;\n\n  case TYPE_INTERFACE:\n    if(match(t->name, \"IUnknown\"))\n      return VT_UNKNOWN;\n    if(match(t->name, \"IDispatch\"))\n      return VT_DISPATCH;\n    return VT_USERDEFINED;\n\n  case TYPE_ENUM:\n  case TYPE_STRUCT:\n  case TYPE_COCLASS:\n  case TYPE_MODULE:\n  case TYPE_UNION:\n  case TYPE_ENCAPSULATED_UNION:\n    return VT_USERDEFINED;\n\n  case TYPE_VOID:\n    return VT_VOID;\n\n  case TYPE_ALIAS:\n    /* aliases should be filtered out by the type_get_type call above */\n    assert(0);\n    break;\n\n  case TYPE_FUNCTION:\n    error(\"get_type_vt: functions not supported\\n\");\n    break;\n\n  case TYPE_BITFIELD:\n    error(\"get_type_vt: bitfields not supported\\n\");\n    break;\n  }\n  return 0;\n}\n\nvoid start_typelib(typelib_t *typelib_type)\n{\n    if (!do_typelib) return;\n    typelib = typelib_type;\n}\n\nvoid end_typelib(void)\n{\n    if (!typelib) return;\n\n    create_msft_typelib(typelib);\n}\n\nstatic void tlb_read(int fd, void *buf, int count)\n{\n    if(read(fd, buf, count) < count)\n        error(\"error while reading importlib.\\n\");\n}\n\nstatic void tlb_lseek(int fd, off_t offset)\n{\n    if(lseek(fd, offset, SEEK_SET) == -1)\n        error(\"lseek failed\\n\");\n}\n\nstatic void msft_read_guid(int fd, MSFT_SegDir *segdir, int offset, GUID *guid)\n{\n    tlb_lseek(fd, segdir->pGuidTab.offset+offset);\n    tlb_read(fd, guid, sizeof(GUID));\n}\n\nstatic void read_msft_importlib(importlib_t *importlib, int fd)\n{\n    MSFT_Header header;\n    MSFT_SegDir segdir;\n    int *typeinfo_offs;\n    int i;\n\n    importlib->allocated = 0;\n\n    tlb_lseek(fd, 0);\n    tlb_read(fd, &header, sizeof(header));\n\n    importlib->version = header.version;\n\n    typeinfo_offs = xmalloc(header.nrtypeinfos*sizeof(INT));\n    tlb_read(fd, typeinfo_offs, header.nrtypeinfos*sizeof(INT));\n    tlb_read(fd, &segdir, sizeof(segdir));\n\n    msft_read_guid(fd, &segdir, header.posguid, &importlib->guid);\n\n    importlib->ntypeinfos = header.nrtypeinfos;\n    importlib->importinfos = xmalloc(importlib->ntypeinfos*sizeof(importinfo_t));\n\n    for(i=0; i < importlib->ntypeinfos; i++) {\n        MSFT_TypeInfoBase base;\n        MSFT_NameIntro nameintro;\n        int len;\n\n        tlb_lseek(fd, sizeof(MSFT_Header) + header.nrtypeinfos*sizeof(INT) + sizeof(MSFT_SegDir)\n                 + typeinfo_offs[i]);\n        tlb_read(fd, &base, sizeof(base));\n\n        importlib->importinfos[i].importlib = importlib;\n        importlib->importinfos[i].flags = (base.typekind&0xf)<<24;\n        importlib->importinfos[i].offset = -1;\n        importlib->importinfos[i].id = i;\n\n        if(base.posguid != -1) {\n            importlib->importinfos[i].flags |= MSFT_IMPINFO_OFFSET_IS_GUID;\n            msft_read_guid(fd, &segdir, base.posguid, &importlib->importinfos[i].guid);\n        }\n        else memset( &importlib->importinfos[i].guid, 0, sizeof(importlib->importinfos[i].guid));\n\n        tlb_lseek(fd, segdir.pNametab.offset + base.NameOffset);\n        tlb_read(fd, &nameintro, sizeof(nameintro));\n\n        len = nameintro.namelen & 0xff;\n\n        importlib->importinfos[i].name = xmalloc(len+1);\n        tlb_read(fd, importlib->importinfos[i].name, len);\n        importlib->importinfos[i].name[len] = 0;\n    }\n\n    free(typeinfo_offs);\n}\n\nstatic int open_typelib(const char *name)\n{\n    char *file_name;\n    int fd;\n\n    file_name = wpp_find_include(name, NULL);\n    if(!file_name)\n        return open(name, O_RDONLY | O_BINARY );\n\n    fd = open(file_name, O_RDONLY | O_BINARY );\n    free(file_name);\n    return fd;\n}\n\nstatic void read_importlib(importlib_t *importlib)\n{\n    int fd;\n    INT magic;\n\n    fd = open_typelib(importlib->name);\n\n    /* widl extension: if importlib name has no .tlb extension, try using .tlb */\n    if(fd < 0) {\n        const char *p = strrchr(importlib->name, '.');\n        size_t len = p ? p - importlib->name : strlen(importlib->name);\n        if(strcmp(importlib->name + len, \".tlb\")) {\n            char *tlb_name = xmalloc(len + 5);\n            memcpy(tlb_name, importlib->name, len);\n            strcpy(tlb_name + len, \".tlb\");\n            fd = open_typelib(tlb_name);\n            free(tlb_name);\n        }\n    }\n\n    if(fd < 0)\n        error(\"Could not find importlib %s.\\n\", importlib->name);\n\n    tlb_read(fd, &magic, sizeof(magic));\n\n    switch(magic) {\n    case MSFT_MAGIC:\n        read_msft_importlib(importlib, fd);\n        break;\n    default:\n        error(\"Wrong or unsupported typelib magic %x\\n\", magic);\n    };\n\n    close(fd);\n}\n\nvoid add_importlib(const char *name)\n{\n    importlib_t *importlib;\n\n    if(!typelib) return;\n\n    LIST_FOR_EACH_ENTRY( importlib, &typelib->importlibs, importlib_t, entry )\n        if(!strcmp(name, importlib->name))\n            return;\n\n    chat(\"add_importlib: %s\\n\", name);\n\n    importlib = xmalloc(sizeof(*importlib));\n    memset( importlib, 0, sizeof(*importlib) );\n    importlib->name = xstrdup(name);\n\n    read_importlib(importlib);\n    list_add_head( &typelib->importlibs, &importlib->entry );\n}\n"
  },
  {
    "path": "widl/typelib.h",
    "content": "/*\n * IDL Compiler\n *\n * Copyright 2004 Ove Kaaven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WIDL_TYPELIB_H\n#define __WIDL_TYPELIB_H\n\nextern void start_typelib(typelib_t *typelib_type);\nextern void end_typelib(void);\nextern void add_importlib(const char *name);\n\n/* Copied from wtypes.h. Not included directly because that would create a\n * circular dependency (after all, wtypes.h is generated by widl...) */\n\nenum VARENUM {\n    VT_EMPTY = 0,\n    VT_NULL = 1,\n    VT_I2 = 2,\n    VT_I4 = 3,\n    VT_R4 = 4,\n    VT_R8 = 5,\n    VT_CY = 6,\n    VT_DATE = 7,\n    VT_BSTR = 8,\n    VT_DISPATCH = 9,\n    VT_ERROR = 10,\n    VT_BOOL = 11,\n    VT_VARIANT = 12,\n    VT_UNKNOWN = 13,\n    VT_DECIMAL = 14,\n    VT_I1 = 16,\n    VT_UI1 = 17,\n    VT_UI2 = 18,\n    VT_UI4 = 19,\n    VT_I8 = 20,\n    VT_UI8 = 21,\n    VT_INT = 22,\n    VT_UINT = 23,\n    VT_VOID = 24,\n    VT_HRESULT = 25,\n    VT_PTR = 26,\n    VT_SAFEARRAY = 27,\n    VT_CARRAY = 28,\n    VT_USERDEFINED = 29,\n    VT_LPSTR = 30,\n    VT_LPWSTR = 31,\n    VT_RECORD = 36,\n    VT_INT_PTR = 37,\n    VT_UINT_PTR = 38,\n    VT_FILETIME = 64,\n    VT_BLOB = 65,\n    VT_STREAM = 66,\n    VT_STORAGE = 67,\n    VT_STREAMED_OBJECT = 68,\n    VT_STORED_OBJECT = 69,\n    VT_BLOB_OBJECT = 70,\n    VT_CF = 71,\n    VT_CLSID = 72,\n    VT_VERSIONED_STREAM = 73,\n    VT_BSTR_BLOB = 0xfff,\n    VT_VECTOR = 0x1000,\n    VT_ARRAY = 0x2000,\n    VT_BYREF = 0x4000,\n    VT_RESERVED = 0x8000,\n    VT_ILLEGAL = 0xffff,\n    VT_ILLEGALMASKED = 0xfff,\n    VT_TYPEMASK = 0xfff\n};\nextern unsigned short get_type_vt(type_t *t);\n\nextern int create_msft_typelib(typelib_t *typelib);\n#endif\n"
  },
  {
    "path": "widl/typelib_struct.h",
    "content": "/*\n * typelib_struct.h  internal wine data structures\n * used to decode typelib's\n *\n * Copyright 1999 Rein KLazes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef _WIDL_TYPELIB_STRUCT_H\n#define _WIDL_TYPELIB_STRUCT_H\n\n#define HELPDLLFLAG (0x0100)\n#define DO_NOT_SEEK (-1)\n\n#define MSFT_HREFTYPE_INTHISFILE(href) (!((href) & 3))\n#define MSFT_HREFTYPE_INDEX(href) ((href) /sizeof(MSFT_TypeInfoBase))\n\n/*-------------------------FILE STRUCTURES-----------------------------------*/\n\n/* There are two known file formats, those created with ICreateTypeLib\n * have the signature \"SLTG\" as their first four bytes, while those created\n * with ICreateTypeLib2 have \"MSFT\".\n */\n\n#define MSFT_MAGIC 0x5446534d\n\n/*****************************************************\n *                MSFT typelibs\n *\n * These are TypeLibs created with ICreateTypeLib2\n *\n */\n\n/*\n * structure of the typelib type2 header\n * it is at the beginning of a type lib file\n *\n */\ntypedef struct tagMSFT_Header {\n/*0x00*/INT   magic1;       /* 0x5446534D \"MSFT\" */\n        INT   magic2;       /* 0x00010002 version nr? */\n        INT   posguid;      /* position of libid in guid table  */\n                            /* (should be,  else -1) */\n        INT   lcid;         /* locale id */\n/*0x10*/INT   lcid2;\n        INT   varflags;     /* (largely) unknown flags */\n                            /* the lower nibble is syskind */\n                            /* 0x40 always seems to be set */\n                            /* 0x10 set with a helpfile defined */\n                            /* 0x100 set with a helpstringdll defined - in this\n                                  case the offset to the name in the stringtable\n                                  appears right after this struct, before the\n                                  typeinfo offsets */\n        INT   version;      /* set with SetVersion() */\n        INT   flags;        /* set with SetFlags() */\n/*0x20*/INT   nrtypeinfos;  /* number of typeinfo's (till so far) */\n        INT   helpstring;   /* position of help string in stringtable */\n        INT   helpstringcontext;\n        INT   helpcontext;\n/*0x30*/INT   nametablecount;   /* number of names in name table */\n        INT   nametablechars;   /* nr of characters in name table */\n        INT   NameOffset;       /* offset of name in name table */\n        INT   helpfile;         /* position of helpfile in stringtable */\n/*0x40*/INT   CustomDataOffset; /* if -1 no custom data, else it is offset */\n                                /* in customer data/guid offset table */\n        INT   res44;            /* unknown always: 0x20 (guid hash size?) */\n        INT   res48;            /* unknown always: 0x80 (name hash size?) */\n        INT   dispatchpos;      /* HREFTYPE to IDispatch, or -1 if no IDispatch */\n/*0x50*/INT   nimpinfos;        /* number of impinfos */\n} MSFT_Header;\n\n/* segments in the type lib file have a structure like this: */\ntypedef struct tagMSFT_pSeg {\n        INT   offset;       /* absolute offset in file */\n        INT   length;       /* length of segment */\n        INT   res08;        /* unknown always -1 */\n        INT   res0c;        /* unknown always 0x0f in the header */\n                            /* 0x03 in the typeinfo_data */\n} MSFT_pSeg;\n\n/* layout of the main segment directory */\ntypedef struct tagMSFT_SegDir {\n/*1*/MSFT_pSeg pTypeInfoTab; /* each typeinfo gets an entry of 0x64 bytes */\n                             /* (25 ints) */\n/*2*/MSFT_pSeg pImpInfo;     /* table with info for imported types */\n/*3*/MSFT_pSeg pImpFiles;    /* import libraries */\n/*4*/MSFT_pSeg pRefTab;      /* References table */\n/*5*/MSFT_pSeg pGuidHashTab; /* always exists, always same size (0x80) */\n                             /* hash table with offsets to guid */\n/*6*/MSFT_pSeg pGuidTab;     /* all guids are stored here together with  */\n                             /* offset in some table???? */\n/*7*/MSFT_pSeg pNameHashTab; /* always created, always same size (0x200) */\n                             /* hash table with offsets to names */\n/*8*/MSFT_pSeg pNametab;     /* name tables */\n/*9*/MSFT_pSeg pStringtab;   /* string table */\n/*A*/MSFT_pSeg pTypdescTab;  /* table with type descriptors */\n/*B*/MSFT_pSeg pArrayDescriptions;\n/*C*/MSFT_pSeg pCustData;    /* data table, used for custom data and default */\n                             /* parameter values */\n/*D*/MSFT_pSeg pCDGuids;     /* table with offsets for the guids and into */\n                             /* the customer data table */\n/*E*/MSFT_pSeg res0e;        /* unknown */\n/*F*/MSFT_pSeg res0f;        /* unknown  */\n} MSFT_SegDir;\n\n\n/* base type info data */\ntypedef struct tagMSFT_TypeInfoBase {\n/*000*/ INT   typekind;             /*  it is the TKIND_xxx */\n                                    /* some byte alignment stuff */\n        INT     memoffset;          /* points past the file, if no elements */\n        INT     res2;               /* zero if no element, N*0x40 */\n        INT     res3;               /* -1 if no element, (N-1)*0x38 */\n/*010*/ INT     res4;               /* always? 3 */\n        INT     res5;               /* always? zero */\n        INT     cElement;           /* counts elements, HI=cVars, LO=cFuncs */\n        INT     res7;               /* always? zero */\n/*020*/ INT     res8;               /* always? zero */\n        INT     res9;               /* always? zero */\n        INT     resA;               /* always? zero */\n        INT     posguid;            /* position in guid table */\n/*030*/ INT     flags;              /* Typeflags */\n        INT     NameOffset;         /* offset in name table */\n        INT     version;            /* element version */\n        INT     docstringoffs;      /* offset of docstring in string tab */\n/*040*/ INT     helpstringcontext;  /*  */\n        INT     helpcontext;    /* */\n        INT     oCustData;          /* offset in customer data table */\n#ifdef WORDS_BIGENDIAN\n        INT16   cbSizeVft;      /* virtual table size, including inherits */\n        INT16   cImplTypes;     /* nr of implemented interfaces */\n#else\n        INT16   cImplTypes;     /* nr of implemented interfaces */\n        INT16   cbSizeVft;      /* virtual table size, including inherits */\n#endif\n/*050*/ INT     size;           /* size in bytes, at least for structures */\n        /* FIXME: name of this field */\n        INT     datatype1;      /* position in type description table */\n                                /* or in base interfaces */\n                                /* if coclass: offset in reftable */\n                                /* if interface: reference to inherited if */\n        INT     datatype2;      /* for interfaces: hiword is num of inherited funcs */\n                                /*                 loword is num of inherited interfaces */\n        INT     res18;          /* always? 0 */\n/*060*/ INT     res19;          /* always? -1 */\n} MSFT_TypeInfoBase;\n\n/* layout of an entry with information on imported types */\ntypedef struct tagMSFT_ImpInfo {\n    INT     flags;          /* bits 0 - 15:  count */\n                            /* bit  16:      if set oGuid is an offset to Guid */\n                            /*               if clear oGuid is a typeinfo index in the specified typelib */\n                            /* bits 24 - 31: TKIND of reference */\n    INT     oImpFile;       /* offset in the Import File table */\n    INT     oGuid;          /* offset in Guid table or typeinfo index (see bit 16 of flags) */\n} MSFT_ImpInfo;\n\n#define MSFT_IMPINFO_OFFSET_IS_GUID 0x00010000\n\n/* function description data */\ntypedef struct {\n/*  INT   recsize;       record size including some extra stuff */\n    INT   DataType;     /* data type of the member, eg return of function */\n    INT   Flags;        /* something to do with attribute flags (LOWORD) */\n#ifdef WORDS_BIGENDIAN\n    INT16 funcdescsize; /* size of reconstituted FUNCDESC and related structs */\n    INT16 VtableOffset; /* offset in vtable */\n#else\n    INT16 VtableOffset; /* offset in vtable */\n    INT16 funcdescsize; /* size of reconstituted FUNCDESC and related structs */\n#endif\n    INT   FKCCIC;       /* bit string with the following  */\n                        /* meaning (bit 0 is the lsb): */\n                        /* bits 0 - 2: FUNCKIND */\n                        /* bits 3 - 6: INVOKEKIND */\n                        /* bit  7: custom data present */\n                        /* bits 8 - 11: CALLCONV */\n                        /* bit  12: parameters have default values */\n                        /* bit  13: oEntry is numeric */\n                        /* bit  14: has retval param */\n                        /* bits 16 - 31: index of next function with same id */\n#ifdef WORDS_BIGENDIAN\n    INT16 nroargs;      /* nr of optional arguments */\n    INT16 nrargs;       /* number of arguments (including optional ????) */\n#else\n    INT16 nrargs;       /* number of arguments (including optional ????) */\n    INT16 nroargs;      /* nr of optional arguments */\n#endif\n    /* optional attribute fields, the number of them is variable */\n    INT   OptAttr[1];\n/*\n0*  INT   helpcontext;\n1*  INT   oHelpString;\n2*  INT   oEntry;       // either offset in string table or numeric as it is (see bit 13 of FKCCIC) //\n3*  INT   res9;         // unknown (-1) //\n4*  INT   resA;         // unknown (-1) //\n5*  INT   HelpStringContext;\n    // these are controlled by a bit set in the FKCCIC field  //\n6*  INT   oCustData;        // custom data for function //\n7*  INT   oArgCustData[1];  // custom data per argument //\n*/\n} MSFT_FuncRecord;\n\n/* after this may follow an array with default value pointers if the\n * appropriate bit in the FKCCIC field has been set:\n * INT   oDefaultValue[nrargs];\n */\n\n    /* Parameter info one per argument*/\ntypedef struct {\n        INT   DataType;\n        INT   oName;\n        INT   Flags;\n    } MSFT_ParameterInfo;\n\n/* Variable description data */\ntypedef struct {\n/*  INT   recsize;      // record size including some extra stuff */\n    INT   DataType;     /* data type of the variable */\n    INT   Flags;        /* VarFlags (LOWORD) */\n#ifdef WORDS_BIGENDIAN\n    INT16 vardescsize;  /* size of reconstituted VARDESC and related structs */\n    INT16 VarKind;      /* VarKind */\n#else\n    INT16 VarKind;      /* VarKind */\n    INT16 vardescsize;  /* size of reconstituted VARDESC and related structs */\n#endif\n    INT   OffsValue;    /* value of the variable or the offset  */\n                        /* in the data structure */\n    /* optional attribute fields, the number of them is variable */\n    /* controlled by record length */\n    INT   HelpContext;\n    INT   oHelpString;\n    INT   res9;         /* unknown (-1) */\n    INT   oCustData;        /* custom data for variable */\n    INT   HelpStringContext;\n\n} MSFT_VarRecord;\n\n/* Structure of the reference data  */\ntypedef struct {\n    INT   reftype;  /* either offset in type info table, then it's */\n                    /* a multiple of 64 */\n                    /* or offset in the external reference table */\n                    /* with an offset of 1 */\n    INT   flags;\n    INT   oCustData;    /* custom data */\n    INT   onext;    /* next offset, -1 if last */\n} MSFT_RefRecord;\n\n/* this is how a guid is stored */\ntypedef struct {\n    GUID guid;\n    INT   hreftype;     /* -2 for the typelib guid, typeinfo offset\n\t\t\t   for typeinfo guid, low two bits are 01 if\n\t\t\t   this is an imported typeinfo, low two bits\n\t\t\t   are 10 if this is an imported typelib (used\n\t\t\t   by imported typeinfos) */\n    INT   next_hash;    /* offset to next guid in the hash bucket */\n} MSFT_GuidEntry;\n/* some data preceding entries in the name table */\ntypedef struct {\n    INT   hreftype;     /* is -1 if name is for neither a typeinfo,\n\t\t\t   a variable, or a function (that is, name\n\t\t\t   is for a typelib or a function parameter).\n\t\t\t   otherwise is the offset of the first\n\t\t\t   typeinfo that this name refers to (either\n\t\t\t   to the typeinfo itself or to a member of\n\t\t\t   the typeinfo */\n    INT   next_hash;    /* offset to next name in the hash bucket */\n    INT   namelen;      /* only lower 8 bits are valid */\n                        /* 0x1000 if name is only used once as a variable name */\n                        /* 0x2000 if name is a variable in an enumeration */\n                        /* 0x3800 if name is typeinfo name */\n\t\t\t/* upper 16 bits are hash code */\n} MSFT_NameIntro;\n/* the custom data table directory has entries like this */\ntypedef struct {\n    INT   GuidOffset;\n    INT   DataOffset;\n    INT   next;     /* next offset in the table, -1 if it's the last */\n} MSFT_CDGuid;\n\n\n/***********************************************************\n *\n *                SLTG typelibs.\n *\n * These are created with ICreateTypeLib\n *\n */\n\n#include \"pshpack1.h\"\n\ntypedef struct {\n/*00*/\tDWORD SLTG_magic;\t/* 0x47544c53  == \"SLTG\" */\n/*04*/\tWORD nrOfFileBlks;\t/* no of SLTG_BlkEntry's + 1 */\n/*06*/  WORD res06;\t\t/* ?? always 9 */\n/*08*/  WORD res08;             /* some kind of len/offset ?? */\n/*0a*/\tWORD first_blk;\t\t/* 1 based index into blk entries that\n\t\t\t\t   corresponds to first block in file */\n/*0c*/\tDWORD res0c;\t\t/* always 0x000204ff */\n/*10*/  DWORD res10;\t\t/* always 0x00000000 */\n/*14*/\tDWORD res14;\t\t/* always 0x000000c0 */\n/*18*/\tDWORD res18;\t\t/* always 0x46000000 */\n/*1c*/\tDWORD res1c;\t\t/* always 0x00000044 */\n/*20*/\tDWORD res20;\t\t/* always 0xffff0000 */\n} SLTG_Header;\n\n/* This gets followed by a list of block entries */\ntypedef struct {\n/*00*/  DWORD len;\n/*04*/\tWORD index_string; /* offs from start of SLTG_Magic to index string */\n/*06*/  WORD next;\n} SLTG_BlkEntry;\n\n/* The order of the blocks in the file is given by starting at Block\n   entry firt_blk and stepping through using the next pointer */\n\n/* These then get followed by this magic */\ntypedef struct {\n/*00*/ BYTE res00;\t\t/* always 0x01 */\n/*01*/ CHAR CompObj_magic[8];\t/* always \"CompObj\" */\n/*09*/ CHAR dir_magic[4];\t/* always \"dir\" */\n} SLTG_Magic;\n\n#define SLTG_COMPOBJ_MAGIC \"CompObj\"\n#define SLTG_DIR_MAGIC \"dir\"\n\n/* Next we have SLTG_Header.nrOfFileBlks - 2 of Index strings.  These\nare presumably unique to within the file and look something like\n\"AAAAAAAAAA\" with the first character incremented from 'A' to ensure\nuniqueness.  I guess successive chars increment when we need to wrap\nthe first one. */\n\ntypedef struct {\n/*00*/ CHAR string[11];\n} SLTG_Index;\n\n\n/* This is followed by SLTG_pad9 */\ntypedef struct {\n/*00*/ CHAR pad[9];\t/* 9 '\\0's */\n} SLTG_Pad9;\n\n\n/* Now we have the noOfFileBlks - 1 worth of blocks. The length of\neach block is given by its entry in SLTG_BlkEntry. */\n\n/* type SLTG_NAME in rather like a BSTR except that the length in\nbytes is given by the first WORD and the string contains 8bit chars */\n\ntypedef WORD SLTG_Name;\n\n/* The main library block looks like this.  This one seems to come last */\n\ntypedef struct {\n/*00*/\tWORD magic;\t\t/* 0x51cc */\n/*02*/  WORD res02;\t\t/* 0x0003, 0x0004 */\n/*04*/  WORD name;              /* offset to name in name table */\n/*06*/  SLTG_Name res06;\t/* maybe this is just WORD == 0xffff */\n\tSLTG_Name helpstring;\n\tSLTG_Name helpfile;\n\tDWORD helpcontext;\n\tWORD syskind;\t\t/* == 1 for win32, 0 for win16 */\n\tWORD lcid;\t\t/* == 0x409, 0x809 etc */\n\tDWORD res12;\t\t/* == 0 */\n \tWORD libflags;\t\t/* LIBFLAG_* */\n\tWORD maj_vers;\n\tWORD min_vers;\n\tGUID uuid;\n} SLTG_LibBlk;\n\n#define SLTG_LIBBLK_MAGIC 0x51cc\n\n/* we then get 0x40 bytes worth of 0xffff or small numbers followed by\n   nrOfFileBlks - 2 of these */\ntypedef struct {\n\tWORD small_no;\n\tSLTG_Name index_name; /* This refers to a name in the directory */\n\tSLTG_Name other_name; /* Another one of these weird names */\n\tWORD res1a;\t      /* 0xffff */\n\tWORD name_offs;\t      /* offset to name in name table */\n\tWORD more_bytes;      /* if this is non-zero we get this many\n\t\t\t\t bytes before the next element, which seem\n\t\t\t\t to reference the docstring of the type ? */\n\tWORD res20;\t      /* 0xffff */\n\tDWORD helpcontext;\n\tWORD res26;\t      /* 0xffff */\n        GUID uuid;\n} SLTG_OtherTypeInfo;\n\n/* Next we get WORD 0x0003 followed by a DWORD which if we add to\n0x216 gives the offset to the name table from the start of the LibBlk\nstruct */\n\ntypedef struct {\n/*00*/\tWORD magic;\t\t/* 0x0501 */\n/*02*/\tDWORD href_table;\t/* if not 0xffffffff, then byte offset from\n\t\t\t\t   beginning of struct to href table */\n/*06*/\tDWORD res06;\t\t/* 0xffffffff */\n/*0a*/\tDWORD elem_table;\t/* offset to members */\n/*0e*/\tDWORD res0e;\t\t/* 0xffffffff */\n/*12*/\tWORD major_version;\t/* major version number */\n/*14*/  WORD minor_version;\t/* minor version number */\n/*16*/\tDWORD res16;\t/* 0xfffe0000 */\n/*1a*/\tBYTE typeflags1;/* 0x02 | top 5 bits hold l5sbs of TYPEFLAGS */\n/*1b*/\tBYTE typeflags2;/* TYPEFLAGS >> 5 */\n/*1c*/\tBYTE typeflags3;/* 0x02*/\n/*1d*/\tBYTE typekind;\t/* 0x03 == TKIND_INTERFACE etc. */\n/*1e*/  DWORD res1e;\t/* 0x00000000 or 0xffffffff */\n} SLTG_TypeInfoHeader;\n\n#define SLTG_TIHEADER_MAGIC 0x0501\n\ntypedef struct {\n/*00*/  WORD cFuncs;\n/*02*/  WORD cVars;\n/*04*/  WORD cImplTypes;\n/*06*/  WORD res06;\n/*08*/  WORD res08;\n/*0a*/  WORD res0a;\n/*0c*/  WORD res0c;\n/*0e*/  WORD res0e;\n/*10*/  WORD res10;\n/*12*/  WORD res12;\n/*14*/  WORD tdescalias_vt; /* for TKIND_ALIAS */\n/*16*/  WORD res16;\n/*18*/  WORD res18;\n/*1a*/  WORD res1a;\n/*1c*/  WORD res1c;\n/*1e*/  WORD res1e;\n/*20*/  WORD cbSizeInstance;\n/*22*/  WORD cbAlignment;\n/*24*/  WORD res24;\n/*26*/  WORD res26;\n/*28*/  WORD cbSizeVft;\n/*2a*/  WORD res2a;\n/*2c*/  WORD res2c;\n/*2e*/  WORD res2e;\n/*30*/  WORD res30;\n/*32*/  WORD res32;\n/*34*/  WORD res34;\n} SLTG_TypeInfoTail;\n\ntypedef struct {\n/*00*/ WORD res00; /* 0x0001 sometimes 0x0003 ?? */\n/*02*/ WORD res02; /* 0xffff */\n/*04*/ BYTE res04; /* 0x01 */\n/*05*/ DWORD cbExtra; /* No of bytes that follow */\n} SLTG_MemberHeader;\n\ntypedef struct {\n/*00*/\tWORD magic;\t/* 0x120a */\n/*02*/\tWORD next;\t/* offset in bytes to next block from start of block\n                           group, 0xffff if last item */\n/*04*/\tWORD name;\t/* offset to name within name table */\n/*06*/\tWORD value;\t/* offset to value from start of block group */\n/*08*/\tWORD res08;\t/* 0x56 */\n/*0a*/\tDWORD memid;\t/* memid */\n/*0e*/  WORD helpcontext;/* 0xfffe == no context, 0x0001 == stored in EnumInfo struct, else offset\n\t\t\t    to value from start of block group */\n/*10*/\tWORD helpstring;/* offset from start of block group to string offset */\n} SLTG_EnumItem;\n\n#define SLTG_ENUMITEM_MAGIC 0x120a\n\ntypedef struct {\n/*00*/\tWORD vt;\t/* vartype, 0xffff marks end. */\n/*02*/\tWORD res02;\t/* ?, 0xffff marks end */\n} SLTG_AliasItem;\n\n#define SLTG_ALIASITEM_MAGIC 0x001d\n\n\ntypedef struct {\n\tBYTE magic;\t/* 0x4c or 0x6c */\n\tBYTE inv;\t/* high nibble is INVOKE_KIND, low nibble = 2 */\n\tWORD next;\t/* byte offset from beginning of group to next fn */\n\tWORD name;\t/* Offset within name table to name */\n\tDWORD dispid;\t/* dispid */\n\tWORD helpcontext; /* helpcontext (again 1 is special) */\n\tWORD helpstring;/* helpstring offset to offset */\n\tWORD arg_off;\t/* offset to args from start of block */\n\tBYTE nacc;\t/* lowest 3bits are CALLCONV, rest are no of args */\n        BYTE retnextopt;/* if 0x80 bit set ret type follows else next WORD\n\t\t\t   is offset to ret type. No of optional args is\n\t\t\t   middle 6 bits */\n\tWORD rettype;\t/* return type VT_?? or offset to ret type */\n\tWORD vtblpos;\t/* position in vtbl? */\n\tWORD funcflags; /* present if magic == 0x6c */\n/* Param list starts, repeat next two as required */\n#if 0\n\tWORD  name;\t/* offset to 2nd letter of name */\n\tWORD+ type;\t/* VT_ of param */\n#endif\n} SLTG_Function;\n\n#define SLTG_FUNCTION_MAGIC 0x4c\n#define SLTG_FUNCTION_WITH_FLAGS_MAGIC 0x6c\n\ntypedef struct {\n/*00*/\tBYTE magic;\t\t/* 0xdf */\n/*01*/  BYTE res01;\t\t/* 0x00 */\n/*02*/\tDWORD res02;\t\t/* 0xffffffff */\n/*06*/\tDWORD res06;\t\t/* 0xffffffff */\n/*0a*/\tDWORD res0a;\t\t/* 0xffffffff */\n/*0e*/\tDWORD res0e;\t\t/* 0xffffffff */\n/*12*/\tDWORD res12;\t\t/* 0xffffffff */\n/*16*/\tDWORD res16;\t\t/* 0xffffffff */\n/*1a*/\tDWORD res1a;\t\t/* 0xffffffff */\n/*1e*/\tDWORD res1e;\t\t/* 0xffffffff */\n/*22*/\tDWORD res22;\t\t/* 0xffffffff */\n/*26*/\tDWORD res26;\t\t/* 0xffffffff */\n/*2a*/\tDWORD res2a;\t\t/* 0xffffffff */\n/*2e*/\tDWORD res2e;\t\t/* 0xffffffff */\n/*32*/\tDWORD res32;\t\t/* 0xffffffff */\n/*36*/\tDWORD res36;\t\t/* 0xffffffff */\n/*3a*/\tDWORD res3a;\t\t/* 0xffffffff */\n/*3e*/\tDWORD res3e;\t\t/* 0xffffffff */\n/*42*/\tWORD  res42;\t\t/* 0xffff */\n/*44*/\tDWORD number;\t\t/* this is 8 times the number of refs */\n/*48*/\t/* Now we have number bytes (8 for each ref) of SLTG_UnknownRefInfo */\n\n/*50*/\tWORD res50;\t\t/* 0xffff */\n/*52*/\tBYTE res52;\t\t/* 0x01 */\n/*53*/\tDWORD res53;\t\t/* 0x00000000 */\n/*57*/  SLTG_Name names[1];\n  /*    Now we have number/8 SLTG_Names (first WORD is no of bytes in the ascii\n   *    string).  Strings look like \"*\\Rxxxx*#n\".  If xxxx == ffff then the\n   *    ref refers to the nth type listed in this library (0 based).  Else\n   *    the xxxx (which maybe fewer than 4 digits) is the offset into the name\n   *    table to a string \"*\\G{<guid>}#1.0#0#C:\\WINNT\\System32\\stdole32.tlb#\"\n   *    The guid is the typelib guid; the ref again refers to the nth type of\n   *    the imported typelib.\n   */\n\n/*xx*/ BYTE resxx;\t\t/* 0xdf */\n\n} SLTG_RefInfo;\n\n#define SLTG_REF_MAGIC 0xdf\n\ntypedef struct {\n\tWORD res00;\t/* 0x0001 */\n\tBYTE res02;\t/* 0x02 */\n\tBYTE res03;\t/* 0x40 if internal ref, 0x00 if external ? */\n\tWORD res04;\t/* 0xffff */\n\tWORD res06;\t/* 0x0000, 0x0013 or 0xffff ?? */\n} SLTG_UnknownRefInfo;\n\ntypedef struct {\n  WORD res00; /* 0x004a */\n  WORD next;  /* byte offs to next interface */\n  WORD res04; /* 0xffff */\n  BYTE impltypeflags; /* IMPLTYPEFLAG_* */\n  BYTE res07; /* 0x80 */\n  WORD res08; /* 0x0012, 0x0028 ?? */\n  WORD ref;   /* number in ref table ? */\n  WORD res0c; /* 0x4000 */\n  WORD res0e; /* 0xfffe */\n  WORD res10; /* 0xffff */\n  WORD res12; /* 0x001d */\n  WORD pos_in_table; /* 0x0, 0x4, ? */\n} SLTG_ImplInfo;\n\n#define SLTG_IMPL_MAGIC 0x004a\n\ntypedef struct {\n  BYTE magic; /* 0x0a */\n  BYTE typepos;\n  WORD next;\n  WORD name;\n  WORD byte_offs; /* pos in struct */\n  WORD type; /* if typepos == 0x02 this is the type, else offset to type */\n  DWORD memid;\n  WORD helpcontext; /* ?? */\n  WORD helpstring; /* ?? */\n} SLTG_RecordItem;\n\n#define SLTG_RECORD_MAGIC 0x0a\n\n\n/* CARRAYs look like this\nWORD type == VT_CARRAY\nWORD offset from start of block to SAFEARRAY\nWORD typeofarray\n*/\n\n#include \"poppack.h\"\n\n/*---------------------------END--------------------------------------------*/\n#endif\n"
  },
  {
    "path": "widl/typetree.c",
    "content": "/*\n * IDL Type Tree\n *\n * Copyright 2008 Robert Shearman\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include \"widl.h\"\n#include \"utils.h\"\n#include \"parser.h\"\n#include \"typetree.h\"\n#include \"header.h\"\n\ntype_t *duptype(type_t *t, int dupname)\n{\n  type_t *d = alloc_type();\n\n  *d = *t;\n  if (dupname && t->name)\n    d->name = xstrdup(t->name);\n\n  return d;\n}\n\ntype_t *make_type(enum type_type type)\n{\n    type_t *t = alloc_type();\n    t->name = NULL;\n    t->namespace = NULL;\n    t->type_type = type;\n    t->attrs = NULL;\n    t->c_name = NULL;\n    t->orig = NULL;\n    memset(&t->details, 0, sizeof(t->details));\n    t->typestring_offset = 0;\n    t->ptrdesc = 0;\n    t->ignore = (parse_only != 0);\n    t->defined = FALSE;\n    t->written = FALSE;\n    t->user_types_registered = FALSE;\n    t->tfswrite = FALSE;\n    t->checked = FALSE;\n    t->is_alias = FALSE;\n    t->typelib_idx = -1;\n    init_loc_info(&t->loc_info);\n    return t;\n}\n\nstatic const var_t *find_arg(const var_list_t *args, const char *name)\n{\n    const var_t *arg;\n\n    if (args) LIST_FOR_EACH_ENTRY(arg, args, const var_t, entry)\n    {\n        if (arg->name && !strcmp(name, arg->name))\n            return arg;\n    }\n\n    return NULL;\n}\n\nconst char *type_get_name(const type_t *type, enum name_type name_type)\n{\n    switch(name_type) {\n    case NAME_DEFAULT:\n        return type->name;\n    case NAME_C:\n        return type->c_name;\n    }\n\n    assert(0);\n    return NULL;\n}\n\nstatic char *append_namespace(char *ptr, struct namespace *namespace, const char *separator)\n{\n    if(is_global_namespace(namespace)) {\n        if(!use_abi_namespace)\n            return ptr;\n        strcpy(ptr, \"ABI\");\n        strcat(ptr, separator);\n        return ptr + strlen(ptr);\n    }\n\n    ptr = append_namespace(ptr, namespace->parent, separator);\n    strcpy(ptr, namespace->name);\n    strcat(ptr, separator);\n    return ptr + strlen(ptr);\n}\n\nchar *format_namespace(struct namespace *namespace, const char *prefix, const char *separator, const char *suffix)\n{\n    unsigned len = strlen(prefix) + strlen(suffix);\n    unsigned sep_len = strlen(separator);\n    struct namespace *iter;\n    char *ret, *ptr;\n\n    if(use_abi_namespace && !is_global_namespace(namespace))\n        len += 3 /* strlen(\"ABI\") */ + sep_len;\n\n    for(iter = namespace; !is_global_namespace(iter); iter = iter->parent)\n        len += strlen(iter->name) + sep_len;\n\n    ret = xmalloc(len+1);\n    strcpy(ret, prefix);\n    ptr = append_namespace(ret + strlen(ret), namespace, separator);\n    strcpy(ptr, suffix);\n\n    return ret;\n}\n\ntype_t *type_new_function(var_list_t *args)\n{\n    var_t *arg;\n    type_t *t;\n    unsigned int i = 0;\n\n    if (args)\n    {\n        arg = LIST_ENTRY(list_head(args), var_t, entry);\n        if (list_count(args) == 1 && !arg->name && arg->type && type_get_type(arg->type) == TYPE_VOID)\n        {\n            list_remove(&arg->entry);\n            free(arg);\n            free(args);\n            args = NULL;\n        }\n    }\n    if (args) LIST_FOR_EACH_ENTRY(arg, args, var_t, entry)\n    {\n        if (arg->type && type_get_type(arg->type) == TYPE_VOID)\n            error_loc(\"argument '%s' has void type\\n\", arg->name);\n        if (!arg->name)\n        {\n            if (i > 26 * 26)\n                error_loc(\"too many unnamed arguments\\n\");\n            else\n            {\n                int unique;\n                do\n                {\n                    char name[3];\n                    name[0] = i > 26 ? 'a' + i / 26 : 'a' + i;\n                    name[1] = i > 26 ? 'a' + i % 26 : 0;\n                    name[2] = 0;\n                    unique = !find_arg(args, name);\n                    if (unique)\n                        arg->name = xstrdup(name);\n                    i++;\n                } while (!unique);\n            }\n        }\n    }\n\n    t = make_type(TYPE_FUNCTION);\n    t->details.function = xmalloc(sizeof(*t->details.function));\n    t->details.function->args = args;\n    t->details.function->idx = -1;\n    return t;\n}\n\ntype_t *type_new_pointer(unsigned char pointer_default, type_t *ref, attr_list_t *attrs)\n{\n    type_t *t = make_type(TYPE_POINTER);\n    t->details.pointer.def_fc = pointer_default;\n    t->details.pointer.ref = ref;\n    t->attrs = attrs;\n    return t;\n}\n\ntype_t *type_new_alias(type_t *t, const char *name)\n{\n    type_t *a = duptype(t, 0);\n\n    a->name = xstrdup(name);\n    a->attrs = NULL;\n    a->orig = t;\n    a->is_alias = TRUE;\n    /* for pointer types */\n    a->details = t->details;\n    init_loc_info(&a->loc_info);\n\n    return a;\n}\n\ntype_t *type_new_module(char *name)\n{\n    type_t *type = get_type(TYPE_MODULE, name, NULL, 0);\n    if (type->type_type != TYPE_MODULE || type->defined)\n        error_loc(\"%s: redefinition error; original definition was at %s:%d\\n\",\n                  type->name, type->loc_info.input_name, type->loc_info.line_number);\n    type->name = name;\n    return type;\n}\n\ntype_t *type_new_coclass(char *name)\n{\n    type_t *type = get_type(TYPE_COCLASS, name, NULL, 0);\n    if (type->type_type != TYPE_COCLASS || type->defined)\n        error_loc(\"%s: redefinition error; original definition was at %s:%d\\n\",\n                  type->name, type->loc_info.input_name, type->loc_info.line_number);\n    type->name = name;\n    return type;\n}\n\n\ntype_t *type_new_array(const char *name, type_t *element, int declptr,\n                       unsigned int dim, expr_t *size_is, expr_t *length_is,\n                       unsigned char ptr_default_fc)\n{\n    type_t *t = make_type(TYPE_ARRAY);\n    if (name) t->name = xstrdup(name);\n    t->details.array.declptr = declptr;\n    t->details.array.length_is = length_is;\n    if (size_is)\n        t->details.array.size_is = size_is;\n    else\n        t->details.array.dim = dim;\n    t->details.array.elem = element;\n    t->details.array.ptr_def_fc = ptr_default_fc;\n    return t;\n}\n\ntype_t *type_new_basic(enum type_basic_type basic_type)\n{\n    type_t *t = make_type(TYPE_BASIC);\n    t->details.basic.type = basic_type;\n    t->details.basic.sign = 0;\n    return t;\n}\n\ntype_t *type_new_int(enum type_basic_type basic_type, int sign)\n{\n    static type_t *int_types[TYPE_BASIC_INT_MAX+1][3];\n\n    assert(basic_type <= TYPE_BASIC_INT_MAX);\n\n    /* map sign { -1, 0, 1 } -> { 0, 1, 2 } */\n    if (!int_types[basic_type][sign + 1])\n    {\n        int_types[basic_type][sign + 1] = type_new_basic(basic_type);\n        int_types[basic_type][sign + 1]->details.basic.sign = sign;\n    }\n    return int_types[basic_type][sign + 1];\n}\n\ntype_t *type_new_void(void)\n{\n    static type_t *void_type = NULL;\n    if (!void_type)\n        void_type = make_type(TYPE_VOID);\n    return void_type;\n}\n\ntype_t *type_new_enum(const char *name, struct namespace *namespace, int defined, var_list_t *enums)\n{\n    type_t *tag_type = name ? find_type(name, namespace, tsENUM) : NULL;\n    type_t *t = make_type(TYPE_ENUM);\n    t->name = name;\n    t->namespace = namespace;\n\n    if (tag_type && tag_type->details.enumeration)\n        t->details.enumeration = tag_type->details.enumeration;\n    else if (defined)\n    {\n        t->details.enumeration = xmalloc(sizeof(*t->details.enumeration));\n        t->details.enumeration->enums = enums;\n        t->defined = TRUE;\n    }\n\n    if (name)\n    {\n        if (defined)\n            reg_type(t, name, namespace, tsENUM);\n        else\n            add_incomplete(t);\n    }\n    return t;\n}\n\ntype_t *type_new_struct(char *name, struct namespace *namespace, int defined, var_list_t *fields)\n{\n    type_t *tag_type = name ? find_type(name, namespace, tsSTRUCT) : NULL;\n    type_t *t;\n\n    /* avoid creating duplicate typelib type entries */\n    if (tag_type && do_typelib) return tag_type;\n\n    t = make_type(TYPE_STRUCT);\n    t->name = name;\n    t->namespace = namespace;\n\n    if (tag_type && tag_type->details.structure)\n        t->details.structure = tag_type->details.structure;\n    else if (defined)\n    {\n        t->details.structure = xmalloc(sizeof(*t->details.structure));\n        t->details.structure->fields = fields;\n        t->defined = TRUE;\n    }\n    if (name)\n    {\n        if (defined)\n            reg_type(t, name, namespace, tsSTRUCT);\n        else\n            add_incomplete(t);\n    }\n    return t;\n}\n\ntype_t *type_new_nonencapsulated_union(const char *name, int defined, var_list_t *fields)\n{\n    type_t *tag_type = name ? find_type(name, NULL, tsUNION) : NULL;\n    type_t *t = make_type(TYPE_UNION);\n    t->name = name;\n    if (tag_type && tag_type->details.structure)\n        t->details.structure = tag_type->details.structure;\n    else if (defined)\n    {\n        t->details.structure = xmalloc(sizeof(*t->details.structure));\n        t->details.structure->fields = fields;\n        t->defined = TRUE;\n    }\n    if (name)\n    {\n        if (defined)\n            reg_type(t, name, NULL, tsUNION);\n        else\n            add_incomplete(t);\n    }\n    return t;\n}\n\ntype_t *type_new_encapsulated_union(char *name, var_t *switch_field, var_t *union_field, var_list_t *cases)\n{\n    type_t *t = get_type(TYPE_ENCAPSULATED_UNION, name, NULL, tsUNION);\n    if (!union_field) union_field = make_var( xstrdup(\"tagged_union\") );\n    union_field->type = type_new_nonencapsulated_union(NULL, TRUE, cases);\n    t->details.structure = xmalloc(sizeof(*t->details.structure));\n    t->details.structure->fields = append_var( NULL, switch_field );\n    t->details.structure->fields = append_var( t->details.structure->fields, union_field );\n    t->defined = TRUE;\n    return t;\n}\n\nstatic int is_valid_bitfield_type(const type_t *type)\n{\n    switch (type_get_type(type))\n    {\n    case TYPE_ENUM:\n        return TRUE;\n    case TYPE_BASIC:\n        switch (type_basic_get_type(type))\n        {\n        case TYPE_BASIC_INT8:\n        case TYPE_BASIC_INT16:\n        case TYPE_BASIC_INT32:\n        case TYPE_BASIC_INT64:\n        case TYPE_BASIC_INT:\n        case TYPE_BASIC_INT3264:\n        case TYPE_BASIC_CHAR:\n        case TYPE_BASIC_HYPER:\n        case TYPE_BASIC_BYTE:\n        case TYPE_BASIC_WCHAR:\n        case TYPE_BASIC_ERROR_STATUS_T:\n            return TRUE;\n        case TYPE_BASIC_FLOAT:\n        case TYPE_BASIC_DOUBLE:\n        case TYPE_BASIC_HANDLE:\n            return FALSE;\n        }\n        return FALSE;\n    default:\n        return FALSE;\n    }\n}\n\ntype_t *type_new_bitfield(type_t *field, const expr_t *bits)\n{\n    type_t *t;\n\n    if (!is_valid_bitfield_type(field))\n        error_loc(\"bit-field has invalid type\\n\");\n\n    if (bits->cval < 0)\n        error_loc(\"negative width for bit-field\\n\");\n\n    /* FIXME: validate bits->cval <= memsize(field) * 8 */\n\n    t = make_type(TYPE_BITFIELD);\n    t->details.bitfield.field = field;\n    t->details.bitfield.bits = bits;\n    return t;\n}\n\nstatic int compute_method_indexes(type_t *iface)\n{\n    int idx;\n    statement_t *stmt;\n\n    if (!iface->details.iface)\n        return 0;\n\n    if (type_iface_get_inherit(iface))\n        idx = compute_method_indexes(type_iface_get_inherit(iface));\n    else\n        idx = 0;\n\n    STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) )\n    {\n        var_t *func = stmt->u.var;\n        if (!is_callas(func->attrs))\n            func->type->details.function->idx = idx++;\n    }\n\n    return idx;\n}\n\nvoid type_interface_define(type_t *iface, type_t *inherit, statement_list_t *stmts)\n{\n    iface->details.iface = xmalloc(sizeof(*iface->details.iface));\n    iface->details.iface->disp_props = NULL;\n    iface->details.iface->disp_methods = NULL;\n    iface->details.iface->stmts = stmts;\n    iface->details.iface->inherit = inherit;\n    iface->details.iface->disp_inherit = NULL;\n    iface->defined = TRUE;\n    compute_method_indexes(iface);\n}\n\nvoid type_dispinterface_define(type_t *iface, var_list_t *props, var_list_t *methods)\n{\n    iface->details.iface = xmalloc(sizeof(*iface->details.iface));\n    iface->details.iface->disp_props = props;\n    iface->details.iface->disp_methods = methods;\n    iface->details.iface->stmts = NULL;\n    iface->details.iface->inherit = find_type(\"IDispatch\", NULL, 0);\n    if (!iface->details.iface->inherit) error_loc(\"IDispatch is undefined\\n\");\n    iface->details.iface->disp_inherit = NULL;\n    iface->defined = TRUE;\n    compute_method_indexes(iface);\n}\n\nvoid type_dispinterface_define_from_iface(type_t *dispiface, type_t *iface)\n{\n    dispiface->details.iface = xmalloc(sizeof(*dispiface->details.iface));\n    dispiface->details.iface->disp_props = NULL;\n    dispiface->details.iface->disp_methods = NULL;\n    dispiface->details.iface->stmts = NULL;\n    dispiface->details.iface->inherit = find_type(\"IDispatch\", NULL, 0);\n    if (!dispiface->details.iface->inherit) error_loc(\"IDispatch is undefined\\n\");\n    dispiface->details.iface->disp_inherit = iface;\n    dispiface->defined = TRUE;\n    compute_method_indexes(dispiface);\n}\n\nvoid type_module_define(type_t *module, statement_list_t *stmts)\n{\n    if (module->details.module) error_loc(\"multiple definition error\\n\");\n    module->details.module = xmalloc(sizeof(*module->details.module));\n    module->details.module->stmts = stmts;\n    module->defined = TRUE;\n}\n\ntype_t *type_coclass_define(type_t *coclass, ifref_list_t *ifaces)\n{\n    coclass->details.coclass.ifaces = ifaces;\n    coclass->defined = TRUE;\n    return coclass;\n}\n\nint type_is_equal(const type_t *type1, const type_t *type2)\n{\n    if (type_get_type_detect_alias(type1) != type_get_type_detect_alias(type2))\n        return FALSE;\n\n    if (type1->name && type2->name)\n        return !strcmp(type1->name, type2->name);\n    else if ((!type1->name && type2->name) || (type1->name && !type2->name))\n        return FALSE;\n\n    /* FIXME: do deep inspection of types to determine if they are equal */\n\n    return FALSE;\n}\n"
  },
  {
    "path": "widl/typetree.h",
    "content": "/*\n * IDL Type Tree\n *\n * Copyright 2008 Robert Shearman\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"widltypes.h\"\n#include <assert.h>\n\n#ifndef WIDL_TYPE_TREE_H\n#define WIDL_TYPE_TREE_H\n\nenum name_type {\n    NAME_DEFAULT,\n    NAME_C\n};\n\ntype_t *type_new_function(var_list_t *args);\ntype_t *type_new_pointer(unsigned char pointer_default, type_t *ref, attr_list_t *attrs);\ntype_t *type_new_alias(type_t *t, const char *name);\ntype_t *type_new_module(char *name);\ntype_t *type_new_array(const char *name, type_t *element, int declptr,\n                       unsigned int dim, expr_t *size_is, expr_t *length_is,\n                       unsigned char ptr_default_fc);\ntype_t *type_new_basic(enum type_basic_type basic_type);\ntype_t *type_new_int(enum type_basic_type basic_type, int sign);\ntype_t *type_new_void(void);\ntype_t *type_new_coclass(char *name);\ntype_t *type_new_enum(const char *name, struct namespace *namespace, int defined, var_list_t *enums);\ntype_t *type_new_struct(char *name, struct namespace *namespace, int defined, var_list_t *fields);\ntype_t *type_new_nonencapsulated_union(const char *name, int defined, var_list_t *fields);\ntype_t *type_new_encapsulated_union(char *name, var_t *switch_field, var_t *union_field, var_list_t *cases);\ntype_t *type_new_bitfield(type_t *field_type, const expr_t *bits);\nvoid type_interface_define(type_t *iface, type_t *inherit, statement_list_t *stmts);\nvoid type_dispinterface_define(type_t *iface, var_list_t *props, var_list_t *methods);\nvoid type_dispinterface_define_from_iface(type_t *dispiface, type_t *iface);\nvoid type_module_define(type_t *module, statement_list_t *stmts);\ntype_t *type_coclass_define(type_t *coclass, ifref_list_t *ifaces);\nint type_is_equal(const type_t *type1, const type_t *type2);\nconst char *type_get_name(const type_t *type, enum name_type name_type);\n\n/* FIXME: shouldn't need to export this */\ntype_t *duptype(type_t *t, int dupname);\n\n/* un-alias the type until finding the non-alias type */\nstatic inline type_t *type_get_real_type(const type_t *type)\n{\n    if (type->is_alias)\n        return type_get_real_type(type->orig);\n    else\n        return (type_t *)type;\n}\n\nstatic inline enum type_type type_get_type(const type_t *type)\n{\n    return type_get_type_detect_alias(type_get_real_type(type));\n}\n\nstatic inline enum type_basic_type type_basic_get_type(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_BASIC);\n    return type->details.basic.type;\n}\n\nstatic inline int type_basic_get_sign(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_BASIC);\n    return type->details.basic.sign;\n}\n\nstatic inline var_list_t *type_struct_get_fields(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_STRUCT);\n    return type->details.structure->fields;\n}\n\nstatic inline var_list_t *type_function_get_args(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_FUNCTION);\n    return type->details.function->args;\n}\n\nstatic inline var_t *type_function_get_retval(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_FUNCTION);\n    return type->details.function->retval;\n}\n\nstatic inline type_t *type_function_get_rettype(const type_t *type)\n{\n    return type_function_get_retval(type)->type;\n}\n\nstatic inline var_list_t *type_enum_get_values(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_ENUM);\n    return type->details.enumeration->enums;\n}\n\nstatic inline var_t *type_union_get_switch_value(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_ENCAPSULATED_UNION);\n    return LIST_ENTRY(list_head(type->details.structure->fields), var_t, entry);\n}\n\nstatic inline var_list_t *type_encapsulated_union_get_fields(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_ENCAPSULATED_UNION);\n    return type->details.structure->fields;\n}\n\nstatic inline var_list_t *type_union_get_cases(const type_t *type)\n{\n    enum type_type type_type;\n\n    type = type_get_real_type(type);\n    type_type = type_get_type(type);\n\n    assert(type_type == TYPE_UNION || type_type == TYPE_ENCAPSULATED_UNION);\n    if (type_type == TYPE_ENCAPSULATED_UNION)\n    {\n        const var_t *uv = LIST_ENTRY(list_tail(type->details.structure->fields), const var_t, entry);\n        return uv->type->details.structure->fields;\n    }\n    else\n        return type->details.structure->fields;\n}\n\nstatic inline statement_list_t *type_iface_get_stmts(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_INTERFACE);\n    return type->details.iface->stmts;\n}\n\nstatic inline type_t *type_iface_get_inherit(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_INTERFACE);\n    return type->details.iface->inherit;\n}\n\nstatic inline var_list_t *type_dispiface_get_props(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_INTERFACE);\n    return type->details.iface->disp_props;\n}\n\nstatic inline var_list_t *type_dispiface_get_methods(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_INTERFACE);\n    return type->details.iface->disp_methods;\n}\n\nstatic inline type_t *type_dispiface_get_inherit(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_INTERFACE);\n    return type->details.iface->disp_inherit;\n}\n\nstatic inline int type_is_defined(const type_t *type)\n{\n    return type->defined;\n}\n\nstatic inline int type_is_complete(const type_t *type)\n{\n    switch (type_get_type_detect_alias(type))\n    {\n    case TYPE_FUNCTION:\n        return (type->details.function != NULL);\n    case TYPE_INTERFACE:\n        return (type->details.iface != NULL);\n    case TYPE_ENUM:\n        return (type->details.enumeration != NULL);\n    case TYPE_UNION:\n    case TYPE_ENCAPSULATED_UNION:\n    case TYPE_STRUCT:\n        return (type->details.structure != NULL);\n    case TYPE_VOID:\n    case TYPE_BASIC:\n    case TYPE_ALIAS:\n    case TYPE_MODULE:\n    case TYPE_COCLASS:\n    case TYPE_POINTER:\n    case TYPE_ARRAY:\n    case TYPE_BITFIELD:\n        return TRUE;\n    }\n    return FALSE;\n}\n\nstatic inline int type_array_has_conformance(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_ARRAY);\n    return (type->details.array.size_is != NULL);\n}\n\nstatic inline int type_array_has_variance(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_ARRAY);\n    return (type->details.array.length_is != NULL);\n}\n\nstatic inline unsigned int type_array_get_dim(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_ARRAY);\n    return type->details.array.dim;\n}\n\nstatic inline expr_t *type_array_get_conformance(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_ARRAY);\n    return type->details.array.size_is;\n}\n\nstatic inline expr_t *type_array_get_variance(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_ARRAY);\n    return type->details.array.length_is;\n}\n\nstatic inline type_t *type_array_get_element(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_ARRAY);\n    return type->details.array.elem;\n}\n\nstatic inline int type_array_is_decl_as_ptr(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_ARRAY);\n    return type->details.array.declptr;\n}\n\nstatic inline unsigned char type_array_get_ptr_default_fc(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_ARRAY);\n    return type->details.array.ptr_def_fc;\n}\n\nstatic inline int type_is_alias(const type_t *type)\n{\n    return type->is_alias;\n}\n\nstatic inline type_t *type_alias_get_aliasee(const type_t *type)\n{\n    assert(type_is_alias(type));\n    return type->orig;\n}\n\nstatic inline ifref_list_t *type_coclass_get_ifaces(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_COCLASS);\n    return type->details.coclass.ifaces;\n}\n\nstatic inline type_t *type_pointer_get_ref(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_POINTER);\n    return type->details.pointer.ref;\n}\n\nstatic inline unsigned char type_pointer_get_default_fc(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_POINTER);\n    return type->details.pointer.def_fc;\n}\n\nstatic inline type_t *type_bitfield_get_field(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_BITFIELD);\n    return type->details.bitfield.field;\n}\n\nstatic inline const expr_t *type_bitfield_get_bits(const type_t *type)\n{\n    type = type_get_real_type(type);\n    assert(type_get_type(type) == TYPE_BITFIELD);\n    return type->details.bitfield.bits;\n}\n\n#endif /* WIDL_TYPE_TREE_H */\n"
  },
  {
    "path": "widl/utils.c",
    "content": "/*\n * Utility routines\n *\n * Copyright 1998 Bertho A. Stultiens\n * Copyright 2002 Ove Kaaven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <assert.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <stdarg.h>\n#include <string.h>\n#include <ctype.h>\n\n#include \"widl.h\"\n#include \"utils.h\"\n#include \"parser.h\"\n\n#define CURRENT_LOCATION { input_name ? input_name : \"stdin\", line_number, parser_text }\n\nstatic const int want_near_indication = 0;\n\nstatic void make_print(char *str)\n{\n\twhile(*str)\n\t{\n\t\tif(!isprint(*str))\n\t\t\t*str = ' ';\n\t\tstr++;\n\t}\n}\n\nstatic void generic_msg(const loc_info_t *loc_info, const char *s, const char *t, va_list ap)\n{\n\tfprintf(stderr, \"%s:%d: %s: \", loc_info->input_name, loc_info->line_number, t);\n\tvfprintf(stderr, s, ap);\n\n\tif (want_near_indication)\n\t{\n\t\tchar *cpy;\n\t\tif(loc_info->near_text)\n\t\t{\n\t\t\tcpy = xstrdup(loc_info->near_text);\n\t\t\tmake_print(cpy);\n\t\t\tfprintf(stderr, \" near '%s'\", cpy);\n\t\t\tfree(cpy);\n\t\t}\n\t}\n}\n\n\nvoid error_loc(const char *s, ...)\n{\n\tloc_info_t cur_loc = CURRENT_LOCATION;\n\tva_list ap;\n\tva_start(ap, s);\n\tgeneric_msg(&cur_loc, s, \"error\", ap);\n\tva_end(ap);\n\texit(1);\n}\n\n/* yyerror:  yacc assumes this is not newline terminated.  */\nvoid parser_error(const char *s)\n{\n\terror_loc(\"%s\\n\", s);\n}\n\nvoid error_loc_info(const loc_info_t *loc_info, const char *s, ...)\n{\n\tva_list ap;\n\tva_start(ap, s);\n\tgeneric_msg(loc_info, s, \"error\", ap);\n\tva_end(ap);\n\texit(1);\n}\n\nint parser_warning(const char *s, ...)\n{\n\tloc_info_t cur_loc = CURRENT_LOCATION;\n\tva_list ap;\n\tva_start(ap, s);\n\tgeneric_msg(&cur_loc, s, \"warning\", ap);\n\tva_end(ap);\n\treturn 0;\n}\n\nvoid error(const char *s, ...)\n{\n\tva_list ap;\n\tva_start(ap, s);\n\tfprintf(stderr, \"error: \");\n\tvfprintf(stderr, s, ap);\n\tva_end(ap);\n\texit(2);\n}\n\nvoid warning(const char *s, ...)\n{\n\tva_list ap;\n\tva_start(ap, s);\n\tfprintf(stderr, \"warning: \");\n\tvfprintf(stderr, s, ap);\n\tva_end(ap);\n}\n\nvoid warning_loc_info(const loc_info_t *loc_info, const char *s, ...)\n{\n\tva_list ap;\n\tva_start(ap, s);\n\tgeneric_msg(loc_info, s, \"warning\", ap);\n\tva_end(ap);\n}\n\nvoid chat(const char *s, ...)\n{\n\tif(debuglevel & DEBUGLEVEL_CHAT)\n\t{\n\t\tva_list ap;\n\t\tva_start(ap, s);\n\t\tfprintf(stderr, \"chat: \");\n\t\tvfprintf(stderr, s, ap);\n\t\tva_end(ap);\n\t}\n}\n\nchar *dup_basename(const char *name, const char *ext)\n{\n\tint namelen;\n\tint extlen = strlen(ext);\n\tchar *base;\n\tchar *slash;\n\n\tif(!name)\n\t\tname = \"widl.tab\";\n\n\tslash = strrchr(name, '/');\n\tif (!slash)\n\t\tslash = strrchr(name, '\\\\');\n\n\tif (slash)\n\t\tname = slash + 1;\n\n\tnamelen = strlen(name);\n\n\t/* +6 for later extension (strlen(\"_r.rgs\")) and +1 for '\\0' */\n\tbase = xmalloc(namelen +6 +1);\n\tstrcpy(base, name);\n\tif(!strcasecmp(name + namelen-extlen, ext))\n\t{\n\t\tbase[namelen - extlen] = '\\0';\n\t}\n\treturn base;\n}\n\nsize_t widl_getline(char **linep, size_t *lenp, FILE *fp)\n{\n    char *line = *linep;\n    size_t len = *lenp;\n    size_t n = 0;\n\n    if (!line)\n    {\n        len = 64;\n        line = xmalloc(len);\n    }\n\n    while (fgets(&line[n], len - n, fp))\n    {\n        n += strlen(&line[n]);\n        if (line[n - 1] == '\\n')\n            break;\n        else if (n == len - 1)\n        {\n            len *= 2;\n            line = xrealloc(line, len);\n        }\n    }\n\n    *linep = line;\n    *lenp = len;\n    return n;\n}\n\nvoid *xmalloc(size_t size)\n{\n    void *res;\n\n    assert(size > 0);\n    res = malloc(size);\n    if(res == NULL)\n    {\n\terror(\"Virtual memory exhausted.\\n\");\n    }\n    memset(res, 0x55, size);\n    return res;\n}\n\n\nvoid *xrealloc(void *p, size_t size)\n{\n    void *res;\n\n    assert(size > 0);\n    res = realloc(p, size);\n    if(res == NULL)\n    {\n\terror(\"Virtual memory exhausted.\\n\");\n    }\n    return res;\n}\n\nchar *xstrdup(const char *str)\n{\n\tchar *s;\n\n\tassert(str != NULL);\n\ts = xmalloc(strlen(str)+1);\n\treturn strcpy(s, str);\n}\n\nint strendswith(const char* str, const char* end)\n{\n    int l = strlen(str);\n    int m = strlen(end);\n    return l >= m && strcmp(str + l - m, end) == 0;\n}\n\n/*******************************************************************\n *         buffer management\n *\n * Function for writing to a memory buffer.\n */\n\nint byte_swapped = 0;\nunsigned char *output_buffer;\nsize_t output_buffer_pos;\nsize_t output_buffer_size;\n\nstatic struct resource\n{\n    unsigned char *data;\n    size_t         size;\n} resources[16];\nstatic unsigned int nb_resources;\n\nstatic void check_output_buffer_space( size_t size )\n{\n    if (output_buffer_pos + size >= output_buffer_size)\n    {\n        output_buffer_size = max( output_buffer_size * 2, output_buffer_pos + size );\n        output_buffer = xrealloc( output_buffer, output_buffer_size );\n    }\n}\n\nvoid init_output_buffer(void)\n{\n    output_buffer_size = 1024;\n    output_buffer_pos = 0;\n    output_buffer = xmalloc( output_buffer_size );\n}\n\nvoid flush_output_buffer( const char *name )\n{\n    int fd = open( name, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0666 );\n    if (fd == -1) error( \"Error creating %s\\n\", name );\n    if (write( fd, output_buffer, output_buffer_pos ) != output_buffer_pos)\n        error( \"Error writing to %s\\n\", name );\n    close( fd );\n    free( output_buffer );\n}\n\nstatic inline void put_resource_id( const char *str )\n{\n    if (str[0] != '#')\n    {\n        while (*str)\n        {\n            unsigned char ch = *str++;\n            put_word( toupper(ch) );\n        }\n        put_word( 0 );\n    }\n    else\n    {\n        put_word( 0xffff );\n        put_word( atoi( str + 1 ));\n    }\n}\n\nvoid add_output_to_resources( const char *type, const char *name )\n{\n    size_t data_size = output_buffer_pos;\n    size_t header_size = 5 * sizeof(unsigned int) + 2 * sizeof(unsigned short);\n\n    assert( nb_resources < sizeof(resources)/sizeof(resources[0]) );\n\n    if (type[0] != '#') header_size += (strlen( type ) + 1) * sizeof(unsigned short);\n    else header_size += 2 * sizeof(unsigned short);\n    if (name[0] != '#') header_size += (strlen( name ) + 1) * sizeof(unsigned short);\n    else header_size += 2 * sizeof(unsigned short);\n\n    header_size = (header_size + 3) & ~3;\n    align_output( 4 );\n    check_output_buffer_space( header_size );\n    resources[nb_resources].size = header_size + output_buffer_pos;\n    memmove( output_buffer + header_size, output_buffer, output_buffer_pos );\n\n    output_buffer_pos = 0;\n    put_dword( data_size );    /* ResSize */\n    put_dword( header_size );  /* HeaderSize */\n    put_resource_id( type );   /* ResType */\n    put_resource_id( name );   /* ResName */\n    align_output( 4 );\n    put_dword( 0 );            /* DataVersion */\n    put_word( 0 );             /* Memory options */\n    put_word( 0 );             /* Language */\n    put_dword( 0 );            /* Version */\n    put_dword( 0 );            /* Characteristics */\n\n    resources[nb_resources++].data = output_buffer;\n    init_output_buffer();\n}\n\nvoid flush_output_resources( const char *name )\n{\n    int fd;\n    unsigned int i;\n\n    /* all output must have been saved with add_output_to_resources() first */\n    assert( !output_buffer_pos );\n\n    put_dword( 0 );      /* ResSize */\n    put_dword( 32 );     /* HeaderSize */\n    put_word( 0xffff );  /* ResType */\n    put_word( 0x0000 );\n    put_word( 0xffff );  /* ResName */\n    put_word( 0x0000 );\n    put_dword( 0 );      /* DataVersion */\n    put_word( 0 );       /* Memory options */\n    put_word( 0 );       /* Language */\n    put_dword( 0 );      /* Version */\n    put_dword( 0 );      /* Characteristics */\n\n    fd = open( name, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0666 );\n    if (fd == -1) error( \"Error creating %s\\n\", name );\n    if (write( fd, output_buffer, output_buffer_pos ) != output_buffer_pos)\n        error( \"Error writing to %s\\n\", name );\n    for (i = 0; i < nb_resources; i++)\n    {\n        if (write( fd, resources[i].data, resources[i].size ) != resources[i].size)\n            error( \"Error writing to %s\\n\", name );\n        free( resources[i].data );\n    }\n    close( fd );\n    nb_resources = 0;\n    free( output_buffer );\n}\n\nvoid put_data( const void *data, size_t size )\n{\n    check_output_buffer_space( size );\n    memcpy( output_buffer + output_buffer_pos, data, size );\n    output_buffer_pos += size;\n}\n\nvoid put_byte( unsigned char val )\n{\n    check_output_buffer_space( 1 );\n    output_buffer[output_buffer_pos++] = val;\n}\n\nvoid put_word( unsigned short val )\n{\n    if (byte_swapped) val = (val << 8) | (val >> 8);\n    put_data( &val, sizeof(val) );\n}\n\nvoid put_dword( unsigned int val )\n{\n    if (byte_swapped)\n        val = ((val << 24) | ((val << 8) & 0x00ff0000) | ((val >> 8) & 0x0000ff00) | (val >> 24));\n    put_data( &val, sizeof(val) );\n}\n\nvoid put_qword( unsigned int val )\n{\n    if (byte_swapped)\n    {\n        put_dword( 0 );\n        put_dword( val );\n    }\n    else\n    {\n        put_dword( val );\n        put_dword( 0 );\n    }\n}\n\n/* pointer-sized word */\nvoid put_pword( unsigned int val )\n{\n    if (pointer_size == 8) put_qword( val );\n    else put_dword( val );\n}\n\nvoid put_str( int indent, const char *format, ... )\n{\n    int n;\n    va_list args;\n\n    check_output_buffer_space( 4 * indent );\n    memset( output_buffer + output_buffer_pos, ' ', 4 * indent );\n    output_buffer_pos += 4 * indent;\n\n    for (;;)\n    {\n        size_t size = output_buffer_size - output_buffer_pos;\n        va_start( args, format );\n\tn = vsnprintf( (char *)output_buffer + output_buffer_pos, size, format, args );\n\tva_end( args );\n        if (n == -1) size *= 2;\n        else if ((size_t)n >= size) size = n + 1;\n        else\n        {\n            output_buffer_pos += n;\n            return;\n        }\n        check_output_buffer_space( size );\n    }\n}\n\nvoid align_output( unsigned int align )\n{\n    size_t size = align - (output_buffer_pos % align);\n\n    if (size == align) return;\n    check_output_buffer_space( size );\n    memset( output_buffer + output_buffer_pos, 0, size );\n    output_buffer_pos += size;\n}\n"
  },
  {
    "path": "widl/utils.h",
    "content": "/*\n * Utility routines' prototypes etc.\n *\n * Copyright 1998 Bertho A. Stultiens (BS)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WIDL_UTILS_H\n#define __WIDL_UTILS_H\n\n#include \"widltypes.h\"\n\n#include <stddef.h>\t/* size_t */\n\nvoid *xmalloc(size_t);\nvoid *xrealloc(void *, size_t);\nchar *xstrdup(const char *str);\nint strendswith(const char* str, const char* end);\n\n#ifndef __GNUC__\n#define __attribute__(X)\n#endif\n\nvoid parser_error(const char *s) __attribute__((noreturn));\nint parser_warning(const char *s, ...) __attribute__((format (printf, 1, 2)));\nvoid error_loc(const char *s, ...) __attribute__((format (printf, 1, 2))) __attribute__((noreturn));\nvoid error(const char *s, ...) __attribute__((format (printf, 1, 2))) __attribute__((noreturn));\nvoid error_loc_info(const loc_info_t *, const char *s, ...) __attribute__((format (printf, 2, 3))) __attribute__((noreturn));\nvoid warning(const char *s, ...) __attribute__((format (printf, 1, 2)));\nvoid warning_loc_info(const loc_info_t *, const char *s, ...) __attribute__((format (printf, 2, 3)));\nvoid chat(const char *s, ...) __attribute__((format (printf, 1, 2)));\n\nchar *dup_basename(const char *name, const char *ext);\nsize_t widl_getline(char **linep, size_t *lenp, FILE *fp);\n\nUUID *parse_uuid(const char *u);\nint is_valid_uuid(const char *s);\n\n/* buffer management */\n\nextern int byte_swapped;\nextern unsigned char *output_buffer;\nextern size_t output_buffer_pos;\nextern size_t output_buffer_size;\n\nextern void init_output_buffer(void);\nextern void flush_output_buffer( const char *name );\nextern void add_output_to_resources( const char *type, const char *name );\nextern void flush_output_resources( const char *name );\nextern void put_data( const void *data, size_t size );\nextern void put_byte( unsigned char val );\nextern void put_word( unsigned short val );\nextern void put_dword( unsigned int val );\nextern void put_qword( unsigned int val );\nextern void put_pword( unsigned int val );\nextern void put_str( int indent, const char *format, ... ) __attribute__((format (printf, 2, 3)));\nextern void align_output( unsigned int align );\n\n/* typelibs expect the minor version to be stored in the higher bits and\n * major to be stored in the lower bits */\n#define MAKEVERSION(major, minor) ((((minor) & 0xffff) << 16) | ((major) & 0xffff))\n#define MAJORVERSION(version) ((version) & 0xffff)\n#define MINORVERSION(version) (((version) >> 16) & 0xffff)\n\n#ifndef max\n#define max(a,b)   (((a) > (b)) ? (a) : (b))\n#endif\n#ifndef min\n#define min(a,b)   (((a) < (b)) ? (a) : (b))\n#endif\n\n#endif\n"
  },
  {
    "path": "widl/widl.c",
    "content": "/*\n * IDL Compiler\n *\n * Copyright 2002 Ove Kaaven\n * based on WRC code by Bertho Stultiens\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <errno.h>\n#include <limits.h>\n#include <stdio.h>\n#include <stdlib.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#include <string.h>\n#include <assert.h>\n#include <ctype.h>\n#include <signal.h>\n#ifdef HAVE_GETOPT_H\n# include <getopt.h>\n#else\n#include \"getopt_msvc.h\"\n#endif\n\n#include \"widl.h\"\n#include \"utils.h\"\n#include \"parser.h\"\n#include \"wine/wpp.h\"\n#include \"header.h\"\n\n#if defined(_MSC_VER) || defined(__MINGW32__)\nint mkstemps(char *template, int suffixlen)\n{\n    errno_t result =_mktemp_s(template, strlen(template) + 1);\n    if (result != 0)\n        return 0;\n    return open(template, O_RDWR | O_CREAT/* | O_TEMPORARY*/ | O_EXCL | O_BINARY);\n}\n#endif\n\n/* future options to reserve characters for: */\n/* A = ACF input filename */\n/* J = do not search standard include path */\n/* w = select win16/win32 output (?) */\n\nstatic const char usage[] =\n\"Usage: widl [options...] infile.idl\\n\"\n\"   or: widl [options...] --dlldata-only name1 [name2...]\\n\"\n\"   -app_config        Ignored, present for midl compatibility\\n\"\n\"   -b arch            Set the target architecture\\n\"\n\"   -c                 Generate client stub\\n\"\n\"   -d n               Set debug level to 'n'\\n\"\n\"   -D id[=val]        Define preprocessor identifier id=val\\n\"\n\"   -E                 Preprocess only\\n\"\n\"   --help             Display this help and exit\\n\"\n\"   -h                 Generate headers\\n\"\n\"   -H file            Name of header file (default is infile.h)\\n\"\n\"   -I path            Set include search dir to path (multiple -I allowed)\\n\"\n\"   --local-stubs=file Write empty stubs for call_as/local methods to file\\n\"\n\"   -m32, -m64         Set the kind of typelib to build (Win32 or Win64)\\n\"\n\"   -N                 Do not preprocess input\\n\"\n\"   --oldnames         Use old naming conventions\\n\"\n\"   -o, --output=NAME  Set the output file name\\n\"\n\"   -Otype             Type of stubs to generate (-Os, -Oi, -Oif)\\n\"\n\"   -p                 Generate proxy\\n\"\n\"   --prefix-all=p     Prefix names of client stubs / server functions with 'p'\\n\"\n\"   --prefix-client=p  Prefix names of client stubs with 'p'\\n\"\n\"   --prefix-server=p  Prefix names of server functions with 'p'\\n\"\n\"   -r                 Generate registration script\\n\"\n\"   --winrt            Enable Windows Runtime mode\\n\"\n\"   --ns_prefix        Prefix namespaces with ABI namespace\\n\"\n\"   -s                 Generate server stub\\n\"\n\"   -t                 Generate typelib\\n\"\n\"   -u                 Generate interface identifiers file\\n\"\n\"   -V                 Print version and exit\\n\"\n\"   -W                 Enable pedantic warnings\\n\"\n\"   --win32            Only generate 32-bit code\\n\"\n\"   --win64            Only generate 64-bit code\\n\"\n\"   --win32-align n    Set win32 structure alignment to 'n'\\n\"\n\"   --win64-align n    Set win64 structure alignment to 'n'\\n\"\n\"Debug level 'n' is a bitmask with following meaning:\\n\"\n\"    * 0x01 Tell which resource is parsed (verbose mode)\\n\"\n\"    * 0x02 Dump internal structures\\n\"\n\"    * 0x04 Create a parser trace (yydebug=1)\\n\"\n\"    * 0x08 Preprocessor messages\\n\"\n\"    * 0x10 Preprocessor lex messages\\n\"\n\"    * 0x20 Preprocessor yacc trace\\n\"\n;\n\nstatic const char version_string[] = \"Wine IDL Compiler version \" PACKAGE_VERSION \"\\n\"\n\t\t\t\"Copyright 2002 Ove Kaaven\\n\";\n\nint debuglevel = DEBUGLEVEL_NONE;\nint parser_debug, yy_flex_debug;\n\nint pedantic = 0;\nint do_everything = 1;\nstatic int preprocess_only = 0;\nint do_relay16 = 0;\nint do_header = 0;\nint do_typelib = 0;\nint do_proxies = 0;\nint do_client = 0;\nint do_server = 0;\nint do_regscript = 0;\nint do_idfile = 0;\nint do_dlldata = 0;\nstatic int no_preprocess = 0;\nint old_names = 0;\nint do_win32 = 1;\nint do_win64 = 1;\nint win32_packing = 8;\nint win64_packing = 8;\nint winrt_mode = 0;\nint use_abi_namespace = 0;\nstatic enum stub_mode stub_mode = MODE_Os;\n\nchar *input_name;\nchar *input_idl_name;\nchar *relay16_name;\nchar *header_name;\nchar *local_stubs_name;\nchar *header_token;\nchar *typelib_name;\nchar *dlldata_name;\nchar *proxy_name;\nchar *proxy_token;\nchar *client_name;\nchar *client_token;\nchar *server_name;\nchar *server_token;\nchar *regscript_name;\nchar *regscript_token;\nstatic char *idfile_name;\nchar *temp_name;\nconst char *prefix_client = \"\";\nconst char *prefix_server = \"\";\n\nint line_number = 1;\n\nstatic FILE *idfile;\n\nunsigned int pointer_size = 0;\nsyskind_t typelib_kind = sizeof(void*) == 8 ? SYS_WIN64 : SYS_WIN32;\n\ntime_t now;\n\nenum {\n    OLDNAMES_OPTION = CHAR_MAX + 1,\n    DLLDATA_OPTION,\n    DLLDATA_ONLY_OPTION,\n    LOCAL_STUBS_OPTION,\n    PREFIX_ALL_OPTION,\n    PREFIX_CLIENT_OPTION,\n    PREFIX_SERVER_OPTION,\n    PRINT_HELP,\n    RT_NS_PREFIX,\n    RT_OPTION,\n    WIN32_OPTION,\n    WIN64_OPTION,\n    WIN32_ALIGN_OPTION,\n    WIN64_ALIGN_OPTION,\n    APP_CONFIG_OPTION\n};\n\nstatic const char short_options[] =\n    \"b:cC:d:D:EhH:I:m:No:O:pP:rsS:tT:uU:VW\";\nstatic const struct option long_options[] = {\n    { \"dlldata\", 1, NULL, DLLDATA_OPTION },\n    { \"dlldata-only\", 0, NULL, DLLDATA_ONLY_OPTION },\n    { \"help\", 0, NULL, PRINT_HELP },\n    { \"local-stubs\", 1, NULL, LOCAL_STUBS_OPTION },\n    { \"ns_prefix\", 0, NULL, RT_NS_PREFIX },\n    { \"oldnames\", 0, NULL, OLDNAMES_OPTION },\n    { \"output\", 0, NULL, 'o' },\n    { \"prefix-all\", 1, NULL, PREFIX_ALL_OPTION },\n    { \"prefix-client\", 1, NULL, PREFIX_CLIENT_OPTION },\n    { \"prefix-server\", 1, NULL, PREFIX_SERVER_OPTION },\n    { \"winrt\", 0, NULL, RT_OPTION },\n    { \"win32\", 0, NULL, WIN32_OPTION },\n    { \"win64\", 0, NULL, WIN64_OPTION },\n    { \"win32-align\", 1, NULL, WIN32_ALIGN_OPTION },\n    { \"win64-align\", 1, NULL, WIN64_ALIGN_OPTION },\n    { \"app_config\", 0, NULL, APP_CONFIG_OPTION },\n    { NULL, 0, NULL, 0 }\n};\n\nstatic void rm_tempfile(void);\nenum stub_mode get_stub_mode(void)\n{\n    /* old-style interpreted stubs are not supported on 64-bit */\n    if (stub_mode == MODE_Oi && pointer_size == 8) return MODE_Oif;\n    return stub_mode;\n}\n\nstatic char *make_token(const char *name)\n{\n  char *token;\n  char *slash;\n  int i;\n\n  slash = strrchr(name, '/');\n  if(!slash)\n    slash = strrchr(name, '\\\\');\n\n  if (slash) name = slash + 1;\n\n  token = xstrdup(name);\n  for (i=0; token[i]; i++) {\n    if (!isalnum(token[i])) token[i] = '_';\n    else token[i] = tolower(token[i]);\n  }\n  return token;\n}\n\n/* duplicate a basename into a valid C token */\nstatic char *dup_basename_token(const char *name, const char *ext)\n{\n    char *p, *ret = dup_basename( name, ext );\n    /* map invalid characters to '_' */\n    for (p = ret; *p; p++) if (!isalnum(*p)) *p = '_';\n    return ret;\n}\n\nstatic void add_widl_version_define(void)\n{\n    unsigned int version;\n    const char *p = PACKAGE_VERSION;\n\n    /* major */\n    version = atoi(p) * 0x10000;\n    p = strchr(p, '.');\n\n    /* minor */\n    if (p)\n    {\n        version += atoi(p + 1) * 0x100;\n        p = strchr(p + 1, '.');\n    }\n\n    /* build */\n    if (p)\n        version += atoi(p + 1);\n\n    if (version != 0)\n    {\n        char version_str[11];\n        snprintf(version_str, sizeof(version_str), \"0x%x\", version);\n        wpp_add_define(\"__WIDL__\", version_str);\n    }\n    else\n        wpp_add_define(\"__WIDL__\", NULL);\n}\n\n/* set the target platform */\nstatic void set_target( const char *target )\n{\n    static const struct\n    {\n        const char *name;\n        syskind_t   kind;\n    } cpu_names[] =\n    {\n        { \"i386\",    SYS_WIN32 },\n        { \"i486\",    SYS_WIN32 },\n        { \"i586\",    SYS_WIN32 },\n        { \"i686\",    SYS_WIN32 },\n        { \"i786\",    SYS_WIN32 },\n        { \"amd64\",   SYS_WIN64 },\n        { \"x86_64\",  SYS_WIN64 },\n        { \"powerpc\", SYS_WIN32 },\n        { \"arm\",     SYS_WIN32 },\n        { \"aarch64\", SYS_WIN64 }\n    };\n\n    unsigned int i;\n    char *p, *spec = xstrdup( target );\n\n    /* target specification is in the form CPU-MANUFACTURER-OS or CPU-MANUFACTURER-KERNEL-OS */\n\n    if (!(p = strchr( spec, '-' ))) error( \"Invalid target specification '%s'\\n\", target );\n    *p++ = 0;\n    for (i = 0; i < sizeof(cpu_names)/sizeof(cpu_names[0]); i++)\n    {\n        if (!strcmp( cpu_names[i].name, spec ))\n        {\n            typelib_kind = cpu_names[i].kind;\n            free( spec );\n            return;\n        }\n    }\n    error( \"Unrecognized CPU '%s'\\n\", spec );\n}\n\n/* clean things up when aborting on a signal */\nstatic void exit_on_signal( int sig )\n{\n    exit(1);  /* this will call the atexit functions */\n}\n\nstatic void set_everything(int x)\n{\n  do_header = x;\n  do_typelib = x;\n  do_proxies = x;\n  do_client = x;\n  do_server = x;\n  do_regscript = x;\n  do_idfile = x;\n  do_dlldata = x;\n}\n\nvoid start_cplusplus_guard(FILE *fp)\n{\n  fprintf(fp, \"#ifdef __cplusplus\\n\");\n  fprintf(fp, \"extern \\\"C\\\" {\\n\");\n  fprintf(fp, \"#endif\\n\\n\");\n}\n\nvoid end_cplusplus_guard(FILE *fp)\n{\n  fprintf(fp, \"#ifdef __cplusplus\\n\");\n  fprintf(fp, \"}\\n\");\n  fprintf(fp, \"#endif\\n\\n\");\n}\n\ntypedef struct\n{\n  char *filename;\n  struct list link;\n} filename_node_t;\n\nstatic void add_filename_node(struct list *list, const char *name)\n{\n  filename_node_t *node = xmalloc(sizeof *node);\n  node->filename = dup_basename( name, \".idl\" );\n  list_add_tail(list, &node->link);\n}\n\nstatic void free_filename_nodes(struct list *list)\n{\n  filename_node_t *node, *next;\n  LIST_FOR_EACH_ENTRY_SAFE(node, next, list, filename_node_t, link) {\n    list_remove(&node->link);\n    free(node->filename);\n    free(node);\n  }\n}\n\nstatic void write_dlldata_list(struct list *filenames, int define_proxy_delegation)\n{\n  FILE *dlldata;\n  filename_node_t *node;\n\n  dlldata = fopen(dlldata_name, \"w\");\n  if (!dlldata)\n    error(\"couldn't open %s: %s\\n\", dlldata_name, strerror(errno));\n\n  fprintf(dlldata, \"/*** Autogenerated by WIDL %s \", PACKAGE_VERSION);\n  fprintf(dlldata, \"- Do not edit ***/\\n\\n\");\n  if (define_proxy_delegation)\n      fprintf(dlldata, \"#define PROXY_DELEGATION\\n\");\n  fprintf(dlldata, \"#include <objbase.h>\\n\");\n  fprintf(dlldata, \"#include <rpcproxy.h>\\n\\n\");\n  start_cplusplus_guard(dlldata);\n\n  LIST_FOR_EACH_ENTRY(node, filenames, filename_node_t, link)\n    fprintf(dlldata, \"EXTERN_PROXY_FILE(%s)\\n\", node->filename);\n\n  fprintf(dlldata, \"\\nPROXYFILE_LIST_START\\n\");\n  fprintf(dlldata, \"/* Start of list */\\n\");\n  LIST_FOR_EACH_ENTRY(node, filenames, filename_node_t, link)\n    fprintf(dlldata, \"  REFERENCE_PROXY_FILE(%s),\\n\", node->filename);\n  fprintf(dlldata, \"/* End of list */\\n\");\n  fprintf(dlldata, \"PROXYFILE_LIST_END\\n\\n\");\n\n  fprintf(dlldata, \"DLLDATA_ROUTINES(aProxyFileList, GET_DLL_CLSID)\\n\\n\");\n  end_cplusplus_guard(dlldata);\n  fclose(dlldata);\n}\n\nstatic char *eat_space(char *s)\n{\n  while (isspace((unsigned char) *s))\n    ++s;\n  return s;\n}\n\nvoid write_dlldata(const statement_list_t *stmts)\n{\n  struct list filenames = LIST_INIT(filenames);\n  int define_proxy_delegation = 0;\n  filename_node_t *node;\n  FILE *dlldata;\n\n  if (!do_dlldata || !need_proxy_file(stmts))\n    return;\n\n  define_proxy_delegation = need_proxy_delegation(stmts);\n\n  dlldata = fopen(dlldata_name, \"r\");\n  if (dlldata) {\n    static const char marker[] = \"REFERENCE_PROXY_FILE\";\n    static const char delegation_define[] = \"#define PROXY_DELEGATION\";\n    char *line = NULL;\n    size_t len = 0;\n\n    while (widl_getline(&line, &len, dlldata)) {\n      char *start, *end;\n      start = eat_space(line);\n      if (strncmp(start, marker, sizeof marker - 1) == 0) {\n        start = eat_space(start + sizeof marker - 1);\n        if (*start != '(')\n          continue;\n        end = start = eat_space(start + 1);\n        while (*end && *end != ')')\n          ++end;\n        if (*end != ')')\n          continue;\n        while (isspace((unsigned char) end[-1]))\n          --end;\n        *end = '\\0';\n        if (start < end)\n          add_filename_node(&filenames, start);\n      }else if (!define_proxy_delegation && strncmp(start, delegation_define, sizeof(delegation_define)-1)) {\n          define_proxy_delegation = 1;\n      }\n    }\n\n    if (ferror(dlldata))\n      error(\"couldn't read from %s: %s\\n\", dlldata_name, strerror(errno));\n\n    free(line);\n    fclose(dlldata);\n  }\n\n  LIST_FOR_EACH_ENTRY(node, &filenames, filename_node_t, link)\n    if (strcmp(proxy_token, node->filename) == 0) {\n      /* We're already in the list, no need to regenerate this file.  */\n      free_filename_nodes(&filenames);\n      return;\n    }\n\n  add_filename_node(&filenames, proxy_token);\n  write_dlldata_list(&filenames, define_proxy_delegation);\n  free_filename_nodes(&filenames);\n}\n\nstatic void write_id_guid(FILE *f, const char *type, const char *guid_prefix, const char *name, const UUID *uuid)\n{\n  if (!uuid) return;\n  fprintf(f, \"MIDL_DEFINE_GUID(%s, %s_%s, 0x%08x, 0x%04x, 0x%04x, 0x%02x,0x%02x, 0x%02x,\"\n        \"0x%02x,0x%02x,0x%02x,0x%02x,0x%02x);\\n\",\n        type, guid_prefix, name, uuid->Data1, uuid->Data2, uuid->Data3, uuid->Data4[0],\n        uuid->Data4[1], uuid->Data4[2], uuid->Data4[3], uuid->Data4[4], uuid->Data4[5],\n        uuid->Data4[6], uuid->Data4[7]);\n}\n\nstatic void write_id_data_stmts(const statement_list_t *stmts)\n{\n  const statement_t *stmt;\n  if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, const statement_t, entry )\n  {\n    if (stmt->type == STMT_TYPE)\n    {\n      const type_t *type = stmt->u.type;\n      if (type_get_type(type) == TYPE_INTERFACE)\n      {\n        const UUID *uuid;\n        if (!is_object(type) && !is_attr(type->attrs, ATTR_DISPINTERFACE))\n          continue;\n        uuid = get_attrp(type->attrs, ATTR_UUID);\n        write_id_guid(idfile, \"IID\", is_attr(type->attrs, ATTR_DISPINTERFACE) ? \"DIID\" : \"IID\",\n                   type->name, uuid);\n      }\n      else if (type_get_type(type) == TYPE_COCLASS)\n      {\n        const UUID *uuid = get_attrp(type->attrs, ATTR_UUID);\n        write_id_guid(idfile, \"CLSID\", \"CLSID\", type->name, uuid);\n      }\n    }\n    else if (stmt->type == STMT_LIBRARY)\n    {\n      const UUID *uuid = get_attrp(stmt->u.lib->attrs, ATTR_UUID);\n      write_id_guid(idfile, \"IID\", \"LIBID\", stmt->u.lib->name, uuid);\n      write_id_data_stmts(stmt->u.lib->stmts);\n    }\n  }\n}\n\nvoid write_id_data(const statement_list_t *stmts)\n{\n  if (!do_idfile) return;\n\n  idfile = fopen(idfile_name, \"w\");\n  if (! idfile) {\n    error(\"Could not open %s for output\\n\", idfile_name);\n    return;\n  }\n\n  fprintf(idfile, \"/*** Autogenerated by WIDL %s \", PACKAGE_VERSION);\n  fprintf(idfile, \"from %s - Do not edit ***/\\n\\n\", input_idl_name);\n  fprintf(idfile, \"#include <rpc.h>\\n\");\n  fprintf(idfile, \"#include <rpcndr.h>\\n\\n\");\n\n  fprintf(idfile, \"#ifdef _MIDL_USE_GUIDDEF_\\n\\n\");\n\n  fprintf(idfile, \"#ifndef INITGUID\\n\");\n  fprintf(idfile, \"#define INITGUID\\n\");\n  fprintf(idfile, \"#include <guiddef.h>\\n\");\n  fprintf(idfile, \"#undef INITGUID\\n\");\n  fprintf(idfile, \"#else\\n\");\n  fprintf(idfile, \"#include <guiddef.h>\\n\");\n  fprintf(idfile, \"#endif\\n\\n\");\n\n  fprintf(idfile, \"#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \\\\\\n\");\n  fprintf(idfile, \"    DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)\\n\\n\");\n\n  fprintf(idfile, \"#else\\n\\n\");\n\n  fprintf(idfile, \"#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \\\\\\n\");\n  fprintf(idfile, \"    const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}\\n\\n\");\n\n  fprintf(idfile, \"#endif\\n\\n\");\n  start_cplusplus_guard(idfile);\n\n  write_id_data_stmts(stmts);\n\n  fprintf(idfile, \"\\n\");\n  end_cplusplus_guard(idfile);\n  fprintf(idfile, \"#undef MIDL_DEFINE_GUID\\n\" );\n\n  fclose(idfile);\n}\n\nint main(int argc,char *argv[])\n{\n  int optc;\n  int ret = 0;\n  int opti = 0;\n  char *output_name = NULL;\n\n  signal( SIGTERM, exit_on_signal );\n  signal( SIGINT, exit_on_signal );\n#ifdef SIGHUP\n  signal( SIGHUP, exit_on_signal );\n#endif\n\n  now = time(NULL);\n\n  while((optc = getopt_long_only(argc, argv, short_options, long_options, &opti)) != EOF) {\n    switch(optc) {\n    case DLLDATA_OPTION:\n      dlldata_name = xstrdup(optarg);\n      break;\n    case DLLDATA_ONLY_OPTION:\n      do_everything = 0;\n      do_dlldata = 1;\n      break;\n    case LOCAL_STUBS_OPTION:\n      do_everything = 0;\n      local_stubs_name = xstrdup(optarg);\n      break;\n    case OLDNAMES_OPTION:\n      old_names = 1;\n      break;\n    case PREFIX_ALL_OPTION:\n      prefix_client = xstrdup(optarg);\n      prefix_server = xstrdup(optarg);\n      break;\n    case PREFIX_CLIENT_OPTION:\n      prefix_client = xstrdup(optarg);\n      break;\n    case PREFIX_SERVER_OPTION:\n      prefix_server = xstrdup(optarg);\n      break;\n    case PRINT_HELP:\n      fprintf(stderr, \"%s\", usage);\n      return 0;\n    case RT_OPTION:\n      winrt_mode = 1;\n      break;\n    case RT_NS_PREFIX:\n      use_abi_namespace = 1;\n      break;\n    case WIN32_OPTION:\n      do_win32 = 1;\n      do_win64 = 0;\n      break;\n    case WIN64_OPTION:\n      do_win32 = 0;\n      do_win64 = 1;\n      break;\n    case WIN32_ALIGN_OPTION:\n      win32_packing = strtol(optarg, NULL, 0);\n      if(win32_packing != 2 && win32_packing != 4 && win32_packing != 8)\n          error(\"Packing must be one of 2, 4 or 8\\n\");\n      break;\n    case WIN64_ALIGN_OPTION:\n      win64_packing = strtol(optarg, NULL, 0);\n      if(win64_packing != 2 && win64_packing != 4 && win64_packing != 8)\n          error(\"Packing must be one of 2, 4 or 8\\n\");\n      break;\n    case APP_CONFIG_OPTION:\n      /* widl does not distinguish between app_mode and default mode,\n         but we ignore this option for midl compatibility */\n        break;\n    case 'b':\n      set_target( optarg );\n      break;\n    case 'c':\n      do_everything = 0;\n      do_client = 1;\n      break;\n    case 'C':\n      client_name = xstrdup(optarg);\n      break;\n    case 'd':\n      debuglevel = strtol(optarg, NULL, 0);\n      break;\n    case 'D':\n      wpp_add_cmdline_define(optarg);\n      break;\n    case 'E':\n      do_everything = 0;\n      preprocess_only = 1;\n      break;\n    case 'h':\n      do_everything = 0;\n      do_header = 1;\n      break;\n    case 'H':\n      header_name = xstrdup(optarg);\n      break;\n    case 'I':\n      wpp_add_include_path(optarg);\n      break;\n    case 'm':\n      if (!strcmp( optarg, \"32\" )) typelib_kind = SYS_WIN32;\n      else if (!strcmp( optarg, \"64\" )) typelib_kind = SYS_WIN64;\n      break;\n    case 'N':\n      no_preprocess = 1;\n      break;\n    case 'o':\n      output_name = xstrdup(optarg);\n      break;\n    case 'O':\n      if (!strcmp( optarg, \"s\" )) stub_mode = MODE_Os;\n      else if (!strcmp( optarg, \"i\" )) stub_mode = MODE_Oi;\n      else if (!strcmp( optarg, \"ic\" )) stub_mode = MODE_Oif;\n      else if (!strcmp( optarg, \"if\" )) stub_mode = MODE_Oif;\n      else if (!strcmp( optarg, \"icf\" )) stub_mode = MODE_Oif;\n      else error( \"Invalid argument '-O%s'\\n\", optarg );\n      break;\n    case 'p':\n      do_everything = 0;\n      do_proxies = 1;\n      break;\n    case 'P':\n      proxy_name = xstrdup(optarg);\n      break;\n    case 'r':\n      do_everything = 0;\n      do_regscript = 1;\n      break;\n    case 's':\n      do_everything = 0;\n      do_server = 1;\n      break;\n    case 'S':\n      server_name = xstrdup(optarg);\n      break;\n    case 't':\n      do_everything = 0;\n      do_typelib = 1;\n      break;\n    case 'T':\n      typelib_name = xstrdup(optarg);\n      break;\n    case 'u':\n      do_everything = 0;\n      do_idfile = 1;\n      break;\n    case 'U':\n      idfile_name = xstrdup(optarg);\n      break;\n    case 'V':\n      printf(\"%s\", version_string);\n      return 0;\n    case 'W':\n      pedantic = 1;\n      break;\n    default:\n      fprintf(stderr, \"%s\", usage);\n      return 1;\n    }\n  }\n\n#ifdef DEFAULT_INCLUDE_DIR\n  wpp_add_include_path(DEFAULT_INCLUDE_DIR);\n#endif\n\n  /* if nothing specified, try to guess output type from the output file name */\n  if (output_name && do_everything && !do_header && !do_typelib && !do_proxies &&\n      !do_client && !do_server && !do_regscript && !do_idfile && !do_dlldata)\n  {\n      do_everything = 0;\n      if (strendswith(output_name, \"_16.h\")) do_relay16 = 1;\n      else if (strendswith(output_name, \"_16.c\")) do_relay16 = 1;\n      else if (strendswith( output_name, \".h\" )) do_header = 1;\n      else if (strendswith( output_name, \".tlb\" )) do_typelib = 1;\n      else if (strendswith( output_name, \"_p.c\" )) do_proxies = 1;\n      else if (strendswith( output_name, \"_c.c\" )) do_client = 1;\n      else if (strendswith( output_name, \"_s.c\" )) do_server = 1;\n      else if (strendswith( output_name, \"_i.c\" )) do_idfile = 1;\n      else if (strendswith( output_name, \"_r.res\" )) do_regscript = 1;\n      else if (strendswith( output_name, \"_t.res\" )) do_typelib = 1;\n      else if (strendswith( output_name, \"dlldata.c\" )) do_dlldata = 1;\n      else do_everything = 1;\n  }\n\n  if(do_everything) {\n    set_everything(TRUE);\n  }\n\n  if (!output_name) output_name = dup_basename(input_name, \".idl\");\n\n  if (do_header + do_typelib + do_proxies + do_client +\n      do_server + do_regscript + do_idfile + do_dlldata + do_relay16 == 1)\n  {\n      if (do_header) header_name = output_name;\n      else if (do_typelib) typelib_name = output_name;\n      else if (do_proxies) proxy_name = output_name;\n      else if (do_client) client_name = output_name;\n      else if (do_server) server_name = output_name;\n      else if (do_regscript) regscript_name = output_name;\n      else if (do_idfile) idfile_name = output_name;\n      else if (do_dlldata) dlldata_name = output_name;\n      else if (do_relay16) relay16_name = output_name;\n  }\n\n  if (!dlldata_name && do_dlldata)\n    dlldata_name = xstrdup(\"dlldata.c\");\n\n  if(optind < argc) {\n    if (do_dlldata && !do_everything) {\n      struct list filenames = LIST_INIT(filenames);\n      for ( ; optind < argc; ++optind)\n        add_filename_node(&filenames, argv[optind]);\n\n      write_dlldata_list(&filenames, 0 /* FIXME */ );\n      free_filename_nodes(&filenames);\n      return 0;\n    }\n    else if (optind != argc - 1) {\n      fprintf(stderr, \"%s\", usage);\n      return 1;\n    }\n    else\n      input_idl_name = input_name = xstrdup(argv[optind]);\n  }\n  else {\n    fprintf(stderr, \"%s\", usage);\n    return 1;\n  }\n\n  if(debuglevel)\n  {\n    setbuf(stdout, NULL);\n    setbuf(stderr, NULL);\n  }\n\n  parser_debug = debuglevel & DEBUGLEVEL_TRACE ? 1 : 0;\n  yy_flex_debug = debuglevel & DEBUGLEVEL_TRACE ? 1 : 0;\n\n  wpp_set_debug( (debuglevel & DEBUGLEVEL_PPLEX) != 0,\n                 (debuglevel & DEBUGLEVEL_PPTRACE) != 0,\n                 (debuglevel & DEBUGLEVEL_PPMSG) != 0 );\n\n  if (!header_name) {\n    header_name = dup_basename(input_name, \".idl\");\n    strcat(header_name, \".h\");\n  }\n\n  if (!typelib_name && do_typelib) {\n    typelib_name = dup_basename(input_name, \".idl\");\n    strcat(typelib_name, \".tlb\");\n  }\n\n  if (!proxy_name && do_proxies) {\n    proxy_name = dup_basename(input_name, \".idl\");\n    strcat(proxy_name, \"_p.c\");\n  }\n\n  if (!client_name && do_client) {\n    client_name = dup_basename(input_name, \".idl\");\n    strcat(client_name, \"_c.c\");\n  }\n\n  if (!server_name && do_server) {\n    server_name = dup_basename(input_name, \".idl\");\n    strcat(server_name, \"_s.c\");\n  }\n\n  if (!regscript_name && do_regscript) {\n    regscript_name = dup_basename(input_name, \".idl\");\n    strcat(regscript_name, \"_r.rgs\");\n  }\n\n  if (!idfile_name && do_idfile) {\n    idfile_name = dup_basename(input_name, \".idl\");\n    strcat(idfile_name, \"_i.c\");\n  }\n\n  if (do_proxies) proxy_token = dup_basename_token(proxy_name,\"_p.c\");\n  if (do_client) client_token = dup_basename_token(client_name,\"_c.c\");\n  if (do_server) server_token = dup_basename_token(server_name,\"_s.c\");\n  if (do_regscript) regscript_token = dup_basename_token(regscript_name,\"_r.rgs\");\n\n  add_widl_version_define();\n  wpp_add_define(\"_WIN32\", NULL);\n\n  atexit(rm_tempfile);\n  if (!no_preprocess)\n  {\n    chat(\"Starting preprocess\\n\");\n\n    if (!preprocess_only)\n    {\n        FILE *output;\n        int fd;\n        char *name = xmalloc( strlen(header_name) + 8 );\n\n        strcpy( name, header_name );\n        strcat( name, \".XXXXXX\" );\n\n        if ((fd = mkstemps( name, 0 )) == -1)\n            error(\"Could not generate a temp name from %s\\n\", name);\n\n        temp_name = name;\n        if (!(output = fdopen(fd, \"wt\")))\n            error(\"Could not open fd %s for writing\\n\", name);\n\n        ret = wpp_parse( input_name, output );\n        fclose( output );\n    }\n    else\n    {\n        ret = wpp_parse( input_name, stdout );\n    }\n\n    if(ret) exit(1);\n    if(preprocess_only) exit(0);\n    if(!(parser_in = fopen(temp_name, \"r\"))) {\n      fprintf(stderr, \"Could not open %s for input\\n\", temp_name);\n      return 1;\n    }\n  }\n  else {\n    if(!(parser_in = fopen(input_name, \"r\"))) {\n      fprintf(stderr, \"Could not open %s for input\\n\", input_name);\n      return 1;\n    }\n  }\n\n  header_token = make_token(header_name);\n\n  init_types();\n  ret = parser_parse();\n\n  fclose(parser_in);\n\n  if(ret) {\n    exit(1);\n  }\n\n  /* Everything has been done successfully, don't delete any files.  */\n  set_everything(FALSE);\n  local_stubs_name = NULL;\n\n  return 0;\n}\n\nstatic void rm_tempfile(void)\n{\n  abort_import();\n  if(temp_name)\n    unlink(temp_name);\n  if (do_header)\n    unlink(header_name);\n  if (local_stubs_name)\n    unlink(local_stubs_name);\n  if (do_client)\n    unlink(client_name);\n  if (do_server)\n    unlink(server_name);\n  if (do_regscript)\n    unlink(regscript_name);\n  if (do_idfile)\n    unlink(idfile_name);\n  if (do_proxies)\n    unlink(proxy_name);\n  if (do_typelib)\n    unlink(typelib_name);\n}\n"
  },
  {
    "path": "widl/widl.h",
    "content": "/*\n * IDL Compiler\n *\n * Copyright 2002 Ove Kaaven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WIDL_WIDL_H\n#define __WIDL_WIDL_H\n\n#include \"widltypes.h\"\n\n#include <time.h>\n\nextern int debuglevel;\n#define DEBUGLEVEL_NONE\t\t0x0000\n#define DEBUGLEVEL_CHAT\t\t0x0001\n#define DEBUGLEVEL_DUMP\t\t0x0002\n#define DEBUGLEVEL_TRACE\t0x0004\n#define DEBUGLEVEL_PPMSG\t0x0008\n#define DEBUGLEVEL_PPLEX\t0x0010\n#define DEBUGLEVEL_PPTRACE\t0x0020\n\nextern int pedantic;\nextern int do_everything;\nextern int do_header;\nextern int do_typelib;\nextern int do_proxies;\nextern int do_client;\nextern int do_server;\nextern int do_regscript;\nextern int do_idfile;\nextern int do_dlldata;\nextern int old_names;\nextern int do_win32;\nextern int do_win64;\nextern int do_relay16;\nextern int win32_packing;\nextern int win64_packing;\nextern int winrt_mode;\nextern int use_abi_namespace;\n\nextern char *input_name;\nextern char *input_idl_name;\nextern char *header_name;\nextern char *header_token;\nextern char *local_stubs_name;\nextern char *typelib_name;\nextern char *dlldata_name;\nextern char *proxy_name;\nextern char *proxy_token;\nextern char *client_name;\nextern char *client_token;\nextern char *server_name;\nextern char *server_token;\nextern char *regscript_name;\nextern char *regscript_token;\nextern char *relay16_name;\nextern const char *prefix_client;\nextern const char *prefix_server;\nextern unsigned int pointer_size;\nextern time_t now;\n\nextern int line_number;\nextern int char_number;\n\nenum stub_mode\n{\n    MODE_Os,  /* inline stubs */\n    MODE_Oi,  /* old-style interpreted stubs */\n    MODE_Oif  /* new-style fully interpreted stubs */\n};\nextern enum stub_mode get_stub_mode(void);\n\nextern void write_header(const statement_list_t *stmts);\nextern void write_id_data(const statement_list_t *stmts);\nextern void write_proxies(const statement_list_t *stmts);\nextern void write_client(const statement_list_t *stmts);\nextern void write_server(const statement_list_t *stmts);\nextern void write_regscript(const statement_list_t *stmts);\nextern void output_typelib_regscript( const typelib_t *typelib );\nextern void write_local_stubs(const statement_list_t *stmts);\nextern void write_dlldata(const statement_list_t *stmts);\nextern void write_relay16(const statement_list_t *stmts);\n\nextern void start_cplusplus_guard(FILE *fp);\nextern void end_cplusplus_guard(FILE *fp);\n\n#endif\n"
  },
  {
    "path": "widl/widl.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{8A7A52D0-4772-475F-AB85-9C074CFEFDE8}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>widl</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n    <ProjectName>widl</ProjectName>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>MultiByte</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n    <Import Project=\"..\\BuildToolProperty.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n    <Import Project=\"..\\BuildToolProperty.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>_X86_;WIN32;_DEBUG;_CONSOLE;_LIB;__i386__;popen=_popen;pclose=_pclose\n;strncasecmp=_strnicmp;strcasecmp=_stricmp;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)libwine.lib;$(OutDir)wpp.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>_X86_;WIN32;NDEBUG;_CONSOLE;_LIB;__i386__;popen=_popen;pclose=_pclose\n;strncasecmp=_strnicmp;strcasecmp=_stricmp;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <AdditionalDependencies>$(OutDir)libwine.lib;$(OutDir)wpp.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"client.c\" />\n    <ClCompile Include=\"expr.c\" />\n    <ClCompile Include=\"getopt.c\" />\n    <ClCompile Include=\"hash.c\" />\n    <ClCompile Include=\"header.c\" />\n    <ClCompile Include=\"proxy.c\" />\n    <ClCompile Include=\"register.c\" />\n    <ClCompile Include=\"relay16.c\" />\n    <ClCompile Include=\"server.c\" />\n    <ClCompile Include=\"typegen.c\" />\n    <ClCompile Include=\"typelib.c\" />\n    <ClCompile Include=\"typetree.c\" />\n    <ClCompile Include=\"utils.c\" />\n    <ClCompile Include=\"widl.c\" />\n    <ClCompile Include=\"write_msft.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"expr.h\" />\n    <ClInclude Include=\"getopt_msvc.h\" />\n    <ClInclude Include=\"hash.h\" />\n    <ClInclude Include=\"header.h\" />\n    <ClInclude Include=\"parser.h\" />\n    <ClInclude Include=\"typegen.h\" />\n    <ClInclude Include=\"typelib.h\" />\n    <ClInclude Include=\"typelib_struct.h\" />\n    <ClInclude Include=\"typetree.h\" />\n    <ClInclude Include=\"utils.h\" />\n    <ClInclude Include=\"widl.h\" />\n    <ClInclude Include=\"widltypes.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"parser.l\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(FlexPath)flex\" \"%(FileName)%(Extension)\" </Command>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(FlexPath)flex\" \"%(FileName)%(Extension)\" </Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">lex.parser_.c</Outputs>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">lex.parser_.c</Outputs>\n      <OutputItemType Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">ClCompile</OutputItemType>\n      <OutputItemType Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">ClCompile</OutputItemType>\n    </CustomBuild>\n    <CustomBuild Include=\"parser.y\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(BisonPath)bison\" -p parser_ -d \"%(FileName)%(Extension)\" </Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">parser.tab.c</Outputs>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(BisonPath)bison\" -p parser_ -d \"%(FileName)%(Extension)\" </Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">parser.tab.c</Outputs>\n      <OutputItemType Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">ClCompile</OutputItemType>\n      <OutputItemType Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">ClCompile</OutputItemType>\n    </CustomBuild>\n    <None Include=\"widl.man.in\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "widl/widltypes.h",
    "content": "/*\n * IDL Compiler\n *\n * Copyright 2002 Ove Kaaven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WIDL_WIDLTYPES_H\n#define __WIDL_WIDLTYPES_H\n\n#include <stdarg.h>\n#include <assert.h>\n#include \"guiddef.h\"\n#include \"windows/ndrtypes.h\"\n#include \"wine/list.h\"\n\n#ifndef UUID_DEFINED\n#define UUID_DEFINED\ntypedef GUID UUID;\n#endif\n\n#define TRUE 1\n#define FALSE 0\n\ntypedef struct _loc_info_t loc_info_t;\ntypedef struct _attr_t attr_t;\ntypedef struct _expr_t expr_t;\ntypedef struct _type_t type_t;\ntypedef struct _var_t var_t;\ntypedef struct _declarator_t declarator_t;\ntypedef struct _ifref_t ifref_t;\ntypedef struct _typelib_entry_t typelib_entry_t;\ntypedef struct _importlib_t importlib_t;\ntypedef struct _importinfo_t importinfo_t;\ntypedef struct _typelib_t typelib_t;\ntypedef struct _user_type_t user_type_t;\ntypedef struct _user_type_t context_handle_t;\ntypedef struct _user_type_t generic_handle_t;\ntypedef struct _type_list_t type_list_t;\ntypedef struct _statement_t statement_t;\ntypedef struct _warning_t warning_t;\n\ntypedef struct list attr_list_t;\ntypedef struct list str_list_t;\ntypedef struct list expr_list_t;\ntypedef struct list var_list_t;\ntypedef struct list declarator_list_t;\ntypedef struct list ifref_list_t;\ntypedef struct list array_dims_t;\ntypedef struct list user_type_list_t;\ntypedef struct list context_handle_list_t;\ntypedef struct list generic_handle_list_t;\ntypedef struct list statement_list_t;\ntypedef struct list warning_list_t;\n\nenum attr_type\n{\n    ATTR_AGGREGATABLE,\n    ATTR_ANNOTATION,\n    ATTR_APPOBJECT,\n    ATTR_ASYNC,\n    ATTR_ASYNCUUID,\n    ATTR_AUTO_HANDLE,\n    ATTR_BINDABLE,\n    ATTR_BROADCAST,\n    ATTR_CALLAS,\n    ATTR_CALLCONV, /* calling convention pseudo-attribute */\n    ATTR_CASE,\n    ATTR_CODE,\n    ATTR_COMMSTATUS,\n    ATTR_CONST, /* const pseudo-attribute */\n    ATTR_CONTEXTHANDLE,\n    ATTR_CONTROL,\n    ATTR_DECODE,\n    ATTR_DEFAULT,\n    ATTR_DEFAULTBIND,\n    ATTR_DEFAULTCOLLELEM,\n    ATTR_DEFAULTVALUE,\n    ATTR_DEFAULTVTABLE,\n    ATTR_DISABLECONSISTENCYCHECK,\n    ATTR_DISPINTERFACE,\n    ATTR_DISPLAYBIND,\n    ATTR_DLLNAME,\n    ATTR_DUAL,\n    ATTR_ENABLEALLOCATE,\n    ATTR_ENCODE,\n    ATTR_ENDPOINT,\n    ATTR_ENTRY,\n    ATTR_EXPLICIT_HANDLE,\n    ATTR_FAULTSTATUS,\n    ATTR_FORCEALLOCATE,\n    ATTR_HANDLE,\n    ATTR_HELPCONTEXT,\n    ATTR_HELPFILE,\n    ATTR_HELPSTRING,\n    ATTR_HELPSTRINGCONTEXT,\n    ATTR_HELPSTRINGDLL,\n    ATTR_HIDDEN,\n    ATTR_ID,\n    ATTR_IDEMPOTENT,\n    ATTR_IGNORE,\n    ATTR_IIDIS,\n    ATTR_IMMEDIATEBIND,\n    ATTR_IMPLICIT_HANDLE,\n    ATTR_IN,\n    ATTR_INLINE,\n    ATTR_INPUTSYNC,\n    ATTR_LENGTHIS,\n    ATTR_LIBLCID,\n    ATTR_LICENSED,\n    ATTR_LOCAL,\n    ATTR_MAYBE,\n    ATTR_MESSAGE,\n    ATTR_NOCODE,\n    ATTR_NONBROWSABLE,\n    ATTR_NONCREATABLE,\n    ATTR_NONEXTENSIBLE,\n    ATTR_NOTIFY,\n    ATTR_NOTIFYFLAG,\n    ATTR_OBJECT,\n    ATTR_ODL,\n    ATTR_OLEAUTOMATION,\n    ATTR_OPTIMIZE,\n    ATTR_OPTIONAL,\n    ATTR_OUT,\n    ATTR_PARAMLCID,\n    ATTR_PARTIALIGNORE,\n    ATTR_POINTERDEFAULT,\n    ATTR_POINTERTYPE,\n    ATTR_PROGID,\n    ATTR_PROPGET,\n    ATTR_PROPPUT,\n    ATTR_PROPPUTREF,\n    ATTR_PROXY,\n    ATTR_PUBLIC,\n    ATTR_RANGE,\n    ATTR_READONLY,\n    ATTR_REPRESENTAS,\n    ATTR_REQUESTEDIT,\n    ATTR_RESTRICTED,\n    ATTR_RETVAL,\n    ATTR_SIZEIS,\n    ATTR_SOURCE,\n    ATTR_STRICTCONTEXTHANDLE,\n    ATTR_STRING,\n    ATTR_SWITCHIS,\n    ATTR_SWITCHTYPE,\n    ATTR_THREADING,\n    ATTR_TRANSMITAS,\n    ATTR_UIDEFAULT,\n    ATTR_USERMARSHAL,\n    ATTR_USESGETLASTERROR,\n    ATTR_UUID,\n    ATTR_V1ENUM,\n    ATTR_VARARG,\n    ATTR_VERSION,\n    ATTR_VIPROGID,\n    ATTR_WIREMARSHAL\n};\n\nenum expr_type\n{\n    EXPR_VOID,\n    EXPR_NUM,\n    EXPR_HEXNUM,\n    EXPR_DOUBLE,\n    EXPR_IDENTIFIER,\n    EXPR_NEG,\n    EXPR_NOT,\n    EXPR_PPTR,\n    EXPR_CAST,\n    EXPR_SIZEOF,\n    EXPR_SHL,\n    EXPR_SHR,\n    EXPR_MUL,\n    EXPR_DIV,\n    EXPR_ADD,\n    EXPR_SUB,\n    EXPR_AND,\n    EXPR_OR,\n    EXPR_COND,\n    EXPR_TRUEFALSE,\n    EXPR_ADDRESSOF,\n    EXPR_MEMBER,\n    EXPR_ARRAY,\n    EXPR_MOD,\n    EXPR_LOGOR,\n    EXPR_LOGAND,\n    EXPR_XOR,\n    EXPR_EQUALITY,\n    EXPR_INEQUALITY,\n    EXPR_GTR,\n    EXPR_LESS,\n    EXPR_GTREQL,\n    EXPR_LESSEQL,\n    EXPR_LOGNOT,\n    EXPR_POS,\n    EXPR_STRLIT,\n    EXPR_WSTRLIT,\n    EXPR_CHARCONST,\n};\n\nenum type_kind\n{\n    TKIND_PRIMITIVE = -1,\n    TKIND_ENUM,\n    TKIND_RECORD,\n    TKIND_MODULE,\n    TKIND_INTERFACE,\n    TKIND_DISPATCH,\n    TKIND_COCLASS,\n    TKIND_ALIAS,\n    TKIND_UNION,\n    TKIND_MAX\n};\n\nenum storage_class\n{\n    STG_NONE,\n    STG_STATIC,\n    STG_EXTERN,\n    STG_REGISTER,\n};\n\nenum statement_type\n{\n    STMT_LIBRARY,\n    STMT_DECLARATION,\n    STMT_TYPE,\n    STMT_TYPEREF,\n    STMT_MODULE,\n    STMT_TYPEDEF,\n    STMT_IMPORT,\n    STMT_IMPORTLIB,\n    STMT_PRAGMA,\n    STMT_CPPQUOTE\n};\n\nenum threading_type\n{\n    THREADING_APARTMENT = 1,\n    THREADING_NEUTRAL,\n    THREADING_SINGLE,\n    THREADING_FREE,\n    THREADING_BOTH\n};\n\nenum type_basic_type\n{\n    TYPE_BASIC_INT8 = 1,\n    TYPE_BASIC_INT16,\n    TYPE_BASIC_INT32,\n    TYPE_BASIC_INT64,\n    TYPE_BASIC_INT,\n    TYPE_BASIC_INT3264,\n    TYPE_BASIC_CHAR,\n    TYPE_BASIC_HYPER,\n    TYPE_BASIC_BYTE,\n    TYPE_BASIC_WCHAR,\n    TYPE_BASIC_FLOAT,\n    TYPE_BASIC_DOUBLE,\n    TYPE_BASIC_ERROR_STATUS_T,\n    TYPE_BASIC_HANDLE,\n};\n\n#define TYPE_BASIC_MAX TYPE_BASIC_HANDLE\n#define TYPE_BASIC_INT_MIN TYPE_BASIC_INT8\n#define TYPE_BASIC_INT_MAX TYPE_BASIC_HYPER\n\nstruct _loc_info_t\n{\n    const char *input_name;\n    int line_number;\n    const char *near_text;\n};\n\nstruct str_list_entry_t\n{\n    char *str;\n    struct list entry;\n};\n\nstruct _attr_t {\n  enum attr_type type;\n  union {\n    unsigned int ival;\n    void *pval;\n  } u;\n  /* parser-internal */\n  struct list entry;\n};\n\nstruct _expr_t {\n  enum expr_type type;\n  const expr_t *ref;\n  union {\n    int lval;\n    double dval;\n    const char *sval;\n    const expr_t *ext;\n    type_t *tref;\n  } u;\n  const expr_t *ext2;\n  int is_const;\n  int cval;\n  /* parser-internal */\n  struct list entry;\n};\n\nstruct struct_details\n{\n  var_list_t *fields;\n};\n\nstruct enumeration_details\n{\n  var_list_t *enums;\n};\n\nstruct func_details\n{\n  var_list_t *args;\n  struct _var_t *retval;\n  int idx;\n};\n\nstruct iface_details\n{\n  statement_list_t *stmts;\n  var_list_t *disp_methods;\n  var_list_t *disp_props;\n  struct _type_t *inherit;\n  struct _type_t *disp_inherit;\n};\n\nstruct module_details\n{\n  statement_list_t *stmts;\n};\n\nstruct array_details\n{\n  expr_t *size_is;\n  expr_t *length_is;\n  struct _type_t *elem;\n  unsigned int dim;\n  unsigned char ptr_def_fc;\n  unsigned char declptr; /* if declared as a pointer */\n  unsigned short ptr_tfsoff;  /* offset of pointer definition for declptr */\n};\n\nstruct coclass_details\n{\n  ifref_list_t *ifaces;\n};\n\nstruct basic_details\n{\n  enum type_basic_type type;\n  int sign;\n};\n\nstruct pointer_details\n{\n  struct _type_t *ref;\n  unsigned char def_fc;\n};\n\nstruct bitfield_details\n{\n  struct _type_t *field;\n  const expr_t *bits;\n};\n\n#define HASHMAX 64\n\nstruct namespace {\n    const char *name;\n    struct namespace *parent;\n    struct list entry;\n    struct list children;\n    struct rtype *type_hash[HASHMAX];\n};\n\nenum type_type\n{\n    TYPE_VOID,\n    TYPE_BASIC, /* ints, floats and handles */\n    TYPE_ENUM,\n    TYPE_STRUCT,\n    TYPE_ENCAPSULATED_UNION,\n    TYPE_UNION,\n    TYPE_ALIAS,\n    TYPE_MODULE,\n    TYPE_COCLASS,\n    TYPE_FUNCTION,\n    TYPE_INTERFACE,\n    TYPE_POINTER,\n    TYPE_ARRAY,\n    TYPE_BITFIELD,\n};\n\nstruct _type_t {\n  const char *name;\n  struct namespace *namespace;\n  enum type_type type_type;\n  attr_list_t *attrs;\n  union\n  {\n    struct struct_details *structure;\n    struct enumeration_details *enumeration;\n    struct func_details *function;\n    struct iface_details *iface;\n    struct module_details *module;\n    struct array_details array;\n    struct coclass_details coclass;\n    struct basic_details basic;\n    struct pointer_details pointer;\n    struct bitfield_details bitfield;\n  } details;\n  const char *c_name;\n  type_t *orig;                   /* dup'd types */\n  unsigned int typestring_offset;\n  unsigned int ptrdesc;           /* used for complex structs */\n  int typelib_idx;\n  loc_info_t loc_info;\n  unsigned int ignore : 1;\n  unsigned int defined : 1;\n  unsigned int written : 1;\n  unsigned int user_types_registered : 1;\n  unsigned int tfswrite : 1;   /* if the type needs to be written to the TFS */\n  unsigned int checked : 1;\n  unsigned int is_alias : 1; /* is the type an alias? */\n};\n\nstruct _var_t {\n  char *name;\n  type_t *type;\n  attr_list_t *attrs;\n  expr_t *eval;\n  enum storage_class stgclass;\n  unsigned int procstring_offset;\n  unsigned int typestring_offset;\n\n  struct _loc_info_t loc_info;\n\n  /* parser-internal */\n  struct list entry;\n};\n\nstruct _declarator_t {\n  var_t *var;\n  type_t *type;\n  type_t *func_type;\n  array_dims_t *array;\n  expr_t *bits;\n\n  /* parser-internal */\n  struct list entry;\n};\n\nstruct _ifref_t {\n  type_t *iface;\n  attr_list_t *attrs;\n\n  /* parser-internal */\n  struct list entry;\n};\n\nstruct _typelib_entry_t {\n    type_t *type;\n    struct list entry;\n};\n\nstruct _importinfo_t {\n    int offset;\n    GUID guid;\n    int flags;\n    int id;\n\n    char *name;\n\n    importlib_t *importlib;\n};\n\nstruct _importlib_t {\n    char *name;\n\n    int version;\n    GUID guid;\n\n    importinfo_t *importinfos;\n    int ntypeinfos;\n\n    int allocated;\n\n    struct list entry;\n};\n\nstruct _typelib_t {\n    char *name;\n    const attr_list_t *attrs;\n    struct list importlibs;\n    statement_list_t *stmts;\n};\n\nstruct _user_type_t {\n    struct list entry;\n    const char *name;\n};\n\nstruct _type_list_t {\n    type_t *type;\n    struct _type_list_t *next;\n};\n\nstruct _statement_t {\n    struct list entry;\n    enum statement_type type;\n    union\n    {\n        ifref_t iface;\n        type_t *type;\n        const char *str;\n        var_t *var;\n        typelib_t *lib;\n        type_list_t *type_list;\n    } u;\n};\n\nstruct _warning_t {\n    int num;\n    struct list entry;\n};\n\ntypedef enum {\n    SYS_WIN16,\n    SYS_WIN32,\n    SYS_MAC,\n    SYS_WIN64\n} syskind_t;\n\nextern syskind_t typelib_kind;\nextern user_type_list_t user_type_list;\nextern context_handle_list_t context_handle_list;\nextern generic_handle_list_t generic_handle_list;\nvoid check_for_additional_prototype_types(const var_list_t *list);\n\nvoid init_types(void);\ntype_t *alloc_type(void);\nvoid set_all_tfswrite(int val);\nvoid clear_all_offsets(void);\n\n#define tsENUM   1\n#define tsSTRUCT 2\n#define tsUNION  3\n\nvar_t *find_const(const char *name, int f);\ntype_t *find_type(const char *name, struct namespace *namespace, int t);\ntype_t *make_type(enum type_type type);\ntype_t *get_type(enum type_type type, char *name, struct namespace *namespace, int t);\ntype_t *reg_type(type_t *type, const char *name, struct namespace *namespace, int t);\nvoid add_incomplete(type_t *t);\n\nvar_t *make_var(char *name);\nvar_list_t *append_var(var_list_t *list, var_t *var);\n\nvoid init_loc_info(loc_info_t *);\n\nchar *format_namespace(struct namespace *namespace, const char *prefix, const char *separator, const char *suffix);\n\nstatic inline var_list_t *type_get_function_args(const type_t *func_type)\n{\n  return func_type->details.function->args;\n}\n\nstatic inline enum type_type type_get_type_detect_alias(const type_t *type)\n{\n    if (type->is_alias)\n        return TYPE_ALIAS;\n    return type->type_type;\n}\n\n#define STATEMENTS_FOR_EACH_FUNC(stmt, stmts) \\\n  if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, statement_t, entry ) \\\n    if (stmt->type == STMT_DECLARATION && stmt->u.var->stgclass == STG_NONE && \\\n        type_get_type_detect_alias(stmt->u.var->type) == TYPE_FUNCTION)\n\nstatic inline int statements_has_func(const statement_list_t *stmts)\n{\n  const statement_t *stmt;\n  int has_func = 0;\n  STATEMENTS_FOR_EACH_FUNC(stmt, stmts)\n  {\n    has_func = 1;\n    break;\n  }\n  return has_func;\n}\n\nstatic inline int is_global_namespace(const struct namespace *namespace)\n{\n    return !namespace->name;\n}\n\n#endif\n"
  },
  {
    "path": "widl/write_msft.c",
    "content": "/*\n *      Typelib v2 (MSFT) generation\n *\n *\tCopyright 2004  Alastair Bridgewater\n *                2004, 2005 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n * --------------------------------------------------------------------------------------\n *  Known problems:\n *\n *    Badly incomplete.\n *\n *    Only works on little-endian systems.\n *\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdlib.h>\n#include <string.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <ctype.h>\n#include <time.h>\n\n#define NONAMELESSUNION\n\n#include \"winerror.h\"\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winnls.h\"\n\n#include \"widl.h\"\n#include \"typelib.h\"\n#include \"typelib_struct.h\"\n#include \"utils.h\"\n#include \"header.h\"\n#include \"hash.h\"\n#include \"typetree.h\"\n#include \"parser.h\"\n#include \"typegen.h\"\n\nenum MSFT_segment_index {\n    MSFT_SEG_TYPEINFO = 0,  /* type information */\n    MSFT_SEG_IMPORTINFO,    /* import information */\n    MSFT_SEG_IMPORTFILES,   /* import filenames */\n    MSFT_SEG_REFERENCES,    /* references (?) */\n    MSFT_SEG_GUIDHASH,      /* hash table for guids? */\n    MSFT_SEG_GUID,          /* guid storage */\n    MSFT_SEG_NAMEHASH,      /* hash table for names */\n    MSFT_SEG_NAME,          /* name storage */\n    MSFT_SEG_STRING,        /* string storage */\n    MSFT_SEG_TYPEDESC,      /* type descriptions */\n    MSFT_SEG_ARRAYDESC,     /* array descriptions */\n    MSFT_SEG_CUSTDATA,      /* custom data */\n    MSFT_SEG_CUSTDATAGUID,  /* custom data guids */\n    MSFT_SEG_UNKNOWN,       /* ??? */\n    MSFT_SEG_UNKNOWN2,      /* ??? */\n    MSFT_SEG_MAX            /* total number of segments */\n};\n\ntypedef struct tagMSFT_ImpFile {\n    int guid;\n    LCID lcid;\n    int version;\n    char filename[0]; /* preceded by two bytes of encoded (length << 2) + flags in the low two bits. */\n} MSFT_ImpFile;\n\ntypedef struct _msft_typelib_t\n{\n    typelib_t *typelib;\n    MSFT_Header typelib_header;\n    MSFT_pSeg typelib_segdir[MSFT_SEG_MAX];\n    unsigned char *typelib_segment_data[MSFT_SEG_MAX];\n    int typelib_segment_block_length[MSFT_SEG_MAX];\n\n    INT typelib_typeinfo_offsets[0x200]; /* Hope that's enough. */\n\n    INT *typelib_namehash_segment;\n    INT *typelib_guidhash_segment;\n\n    INT help_string_dll_offset;\n\n    struct _msft_typeinfo_t *typeinfos;\n    struct _msft_typeinfo_t *last_typeinfo;\n} msft_typelib_t;\n\ntypedef struct _msft_typeinfo_t\n{\n    msft_typelib_t *typelib;\n    MSFT_TypeInfoBase *typeinfo;\n\n    int typekind;\n\n    unsigned int var_data_allocated;\n    int *var_data;\n\n    unsigned int func_data_allocated;\n    int *func_data;\n\n    int vars_allocated;\n    int *var_indices;\n    int *var_names;\n    int *var_offsets;\n\n    int funcs_allocated;\n    int *func_indices;\n    int *func_names;\n    int *func_offsets;\n\n    int datawidth;\n\n    struct _msft_typeinfo_t *next_typeinfo;\n} msft_typeinfo_t;\n\n\n\n/*================== Internal functions ===================================*/\n\n/****************************************************************************\n *\tctl2_init_header\n *\n *  Initializes the type library header of a new typelib.\n */\nstatic void ctl2_init_header(\n\tmsft_typelib_t *typelib) /* [I] The typelib to initialize. */\n{\n    typelib->typelib_header.magic1 = 0x5446534d;\n    typelib->typelib_header.magic2 = 0x00010002;\n    typelib->typelib_header.posguid = -1;\n    typelib->typelib_header.lcid = 0x0409;\n    typelib->typelib_header.lcid2 = 0x0;\n    typelib->typelib_header.varflags = 0x40;\n    typelib->typelib_header.version = 0;\n    typelib->typelib_header.flags = 0;\n    typelib->typelib_header.nrtypeinfos = 0;\n    typelib->typelib_header.helpstring = -1;\n    typelib->typelib_header.helpstringcontext = 0;\n    typelib->typelib_header.helpcontext = 0;\n    typelib->typelib_header.nametablecount = 0;\n    typelib->typelib_header.nametablechars = 0;\n    typelib->typelib_header.NameOffset = -1;\n    typelib->typelib_header.helpfile = -1;\n    typelib->typelib_header.CustomDataOffset = -1;\n    typelib->typelib_header.res44 = 0x20;\n    typelib->typelib_header.res48 = 0x80;\n    typelib->typelib_header.dispatchpos = -1;\n    typelib->typelib_header.nimpinfos = 0;\n}\n\n/****************************************************************************\n *\tctl2_init_segdir\n *\n *  Initializes the segment directory of a new typelib.\n */\nstatic void ctl2_init_segdir(\n\tmsft_typelib_t *typelib) /* [I] The typelib to initialize. */\n{\n    int i;\n    MSFT_pSeg *segdir;\n\n    segdir = &typelib->typelib_segdir[MSFT_SEG_TYPEINFO];\n\n    for (i = 0; i < MSFT_SEG_MAX; i++) {\n\tsegdir[i].offset = -1;\n\tsegdir[i].length = 0;\n\tsegdir[i].res08 = -1;\n\tsegdir[i].res0c = 0x0f;\n    }\n}\n\n/****************************************************************************\n *\tctl2_hash_guid\n *\n *  Generates a hash key from a GUID.\n *\n * RETURNS\n *\n *  The hash key for the GUID.\n */\nstatic int ctl2_hash_guid(\n\tREFGUID guid)                /* [I] The guid to hash. */\n{\n    int hash;\n    int i;\n\n    hash = 0;\n    for (i = 0; i < 8; i ++) {\n\thash ^= ((const short *)guid)[i];\n    }\n\n    return hash & 0x1f;\n}\n\n/****************************************************************************\n *\tctl2_find_guid\n *\n *  Locates a guid in a type library.\n *\n * RETURNS\n *\n *  The offset into the GUID segment of the guid, or -1 if not found.\n */\nstatic int ctl2_find_guid(\n\tmsft_typelib_t *typelib,   /* [I] The typelib to operate against. */\n\tint hash_key,              /* [I] The hash key for the guid. */\n\tREFGUID guid)              /* [I] The guid to find. */\n{\n    int offset;\n    MSFT_GuidEntry *guidentry;\n\n    offset = typelib->typelib_guidhash_segment[hash_key];\n    while (offset != -1) {\n\tguidentry = (MSFT_GuidEntry *)&typelib->typelib_segment_data[MSFT_SEG_GUID][offset];\n\n\tif (!memcmp(guidentry, guid, sizeof(GUID))) return offset;\n\n\toffset = guidentry->next_hash;\n    }\n\n    return offset;\n}\n\n/****************************************************************************\n *\tctl2_find_name\n *\n *  Locates a name in a type library.\n *\n * RETURNS\n *\n *  The offset into the NAME segment of the name, or -1 if not found.\n *\n * NOTES\n *\n *  The name must be encoded as with ctl2_encode_name().\n */\nstatic int ctl2_find_name(\n\tmsft_typelib_t *typelib,   /* [I] The typelib to operate against. */\n\tchar *name)                /* [I] The encoded name to find. */\n{\n    int offset;\n    int *namestruct;\n\n    offset = typelib->typelib_namehash_segment[name[2] & 0x7f];\n    while (offset != -1) {\n\tnamestruct = (int *)&typelib->typelib_segment_data[MSFT_SEG_NAME][offset];\n\n\tif (!((namestruct[2] ^ *((int *)name)) & 0xffff00ff)) {\n\t    /* hash codes and lengths match, final test */\n\t    if (!strncasecmp(name+4, (void *)(namestruct+3), name[0])) break;\n\t}\n\n\t/* move to next item in hash bucket */\n\toffset = namestruct[1];\n    }\n\n    return offset;\n}\n\n/****************************************************************************\n *\tctl2_encode_name\n *\n *  Encodes a name string to a form suitable for storing into a type library\n *  or comparing to a name stored in a type library.\n *\n * RETURNS\n *\n *  The length of the encoded name, including padding and length+hash fields.\n *\n * NOTES\n *\n *  Will throw an exception if name or result are NULL. Is not multithread\n *  safe in the slightest.\n */\nstatic int ctl2_encode_name(\n\tmsft_typelib_t *typelib,   /* [I] The typelib to operate against (used for LCID only). */\n\tconst char *name,          /* [I] The name string to encode. */\n\tchar **result)             /* [O] A pointer to a pointer to receive the encoded name. */\n{\n    int length;\n    static char converted_name[0x104];\n    int offset;\n    int value;\n\n    length = strlen(name);\n    memcpy(converted_name + 4, name, length);\n\n    converted_name[length + 4] = 0;\n\n\n    value = lhash_val_of_name_sys(typelib->typelib_header.varflags & 0x0f, typelib->typelib_header.lcid, converted_name + 4);\n\n#ifdef WORDS_BIGENDIAN\n    converted_name[3] = length & 0xff;\n    converted_name[2] = 0x00;\n    converted_name[1] = value;\n    converted_name[0] = value >> 8;\n#else\n    converted_name[0] = length & 0xff;\n    converted_name[1] = 0x00;\n    converted_name[2] = value;\n    converted_name[3] = value >> 8;\n#endif\n\n    for (offset = (4 - length) & 3; offset; offset--) converted_name[length + offset + 3] = 0x57;\n\n    *result = converted_name;\n\n    return (length + 7) & ~3;\n}\n\n/****************************************************************************\n *\tctl2_encode_string\n *\n *  Encodes a string to a form suitable for storing into a type library or\n *  comparing to a string stored in a type library.\n *\n * RETURNS\n *\n *  The length of the encoded string, including padding and length fields.\n *\n * NOTES\n *\n *  Will throw an exception if string or result are NULL. Is not multithread\n *  safe in the slightest.\n */\nstatic int ctl2_encode_string(\n\tconst char *string,        /* [I] The string to encode. */\n\tchar **result)             /* [O] A pointer to a pointer to receive the encoded string. */\n{\n    int length;\n    static char converted_string[0x104];\n    int offset;\n\n    length = strlen(string);\n    memcpy(converted_string + 2, string, length);\n\n#ifdef WORDS_BIGENDIAN\n    converted_string[1] = length & 0xff;\n    converted_string[0] = (length >> 8) & 0xff;\n#else\n    converted_string[0] = length & 0xff;\n    converted_string[1] = (length >> 8) & 0xff;\n#endif\n\n    if(length < 3) { /* strings of this length are padded with up to 8 bytes incl the 2 byte length */\n        for(offset = 0; offset < 4; offset++)\n            converted_string[length + offset + 2] = 0x57;\n        length += 4;\n    }\n    for (offset = (4 - (length + 2)) & 3; offset; offset--) converted_string[length + offset + 1] = 0x57;\n\n    *result = converted_string;\n\n    return (length + 5) & ~3;\n}\n\n/****************************************************************************\n *\tctl2_alloc_segment\n *\n *  Allocates memory from a segment in a type library.\n *\n * RETURNS\n *\n *  Success: The offset within the segment of the new data area.\n *\n * BUGS\n *\n *  Does not (yet) handle the case where the allocated segment memory needs to grow.\n */\nstatic int ctl2_alloc_segment(\n\tmsft_typelib_t *typelib,         /* [I] The type library in which to allocate. */\n\tenum MSFT_segment_index segment, /* [I] The segment in which to allocate. */\n\tint size,                        /* [I] The amount to allocate. */\n\tint block_size)                  /* [I] Initial allocation block size, or 0 for default. */\n{\n    int offset;\n\n    if(!typelib->typelib_segment_data[segment]) {\n\tif (!block_size) block_size = 0x2000;\n\n\ttypelib->typelib_segment_block_length[segment] = block_size;\n\ttypelib->typelib_segment_data[segment] = xmalloc(block_size);\n\tif (!typelib->typelib_segment_data[segment]) return -1;\n\tmemset(typelib->typelib_segment_data[segment], 0x57, block_size);\n    }\n\n    while ((typelib->typelib_segdir[segment].length + size) > typelib->typelib_segment_block_length[segment]) {\n\tunsigned char *block;\n\n\tblock_size = typelib->typelib_segment_block_length[segment];\n\tblock = xrealloc(typelib->typelib_segment_data[segment], block_size << 1);\n\n\tif (segment == MSFT_SEG_TYPEINFO) {\n\t    /* TypeInfos have a direct pointer to their memory space, so we have to fix them up. */\n\t    msft_typeinfo_t *typeinfo;\n\n\t    for (typeinfo = typelib->typeinfos; typeinfo; typeinfo = typeinfo->next_typeinfo) {\n\t\ttypeinfo->typeinfo = (void *)&block[((unsigned char *)typeinfo->typeinfo) - typelib->typelib_segment_data[segment]];\n\t    }\n\t}\n\n\tmemset(block + block_size, 0x57, block_size);\n\ttypelib->typelib_segment_block_length[segment] = block_size << 1;\n\ttypelib->typelib_segment_data[segment] = block;\n    }\n\n    offset = typelib->typelib_segdir[segment].length;\n    typelib->typelib_segdir[segment].length += size;\n\n    return offset;\n}\n\n/****************************************************************************\n *\tctl2_alloc_typeinfo\n *\n *  Allocates and initializes a typeinfo structure in a type library.\n *\n * RETURNS\n *\n *  Success: The offset of the new typeinfo.\n *  Failure: -1 (this is invariably an out of memory condition).\n */\nstatic int ctl2_alloc_typeinfo(\n\tmsft_typelib_t *typelib,   /* [I] The type library to allocate in. */\n\tint nameoffset)            /* [I] The offset of the name for this typeinfo. */\n{\n    int offset;\n    MSFT_TypeInfoBase *typeinfo;\n\n    offset = ctl2_alloc_segment(typelib, MSFT_SEG_TYPEINFO, sizeof(MSFT_TypeInfoBase), 0);\n\n    typelib->typelib_typeinfo_offsets[typelib->typelib_header.nrtypeinfos++] = offset;\n\n    typeinfo = (void *)(typelib->typelib_segment_data[MSFT_SEG_TYPEINFO] + offset);\n\n    typeinfo->typekind = (typelib->typelib_header.nrtypeinfos - 1) << 16;\n    typeinfo->memoffset = -1; /* should be EOF if no elements */\n    typeinfo->res2 = 0;\n    typeinfo->res3 = -1;\n    typeinfo->res4 = 3;\n    typeinfo->res5 = 0;\n    typeinfo->cElement = 0;\n    typeinfo->res7 = 0;\n    typeinfo->res8 = 0;\n    typeinfo->res9 = 0;\n    typeinfo->resA = 0;\n    typeinfo->posguid = -1;\n    typeinfo->flags = 0;\n    typeinfo->NameOffset = nameoffset;\n    typeinfo->version = 0;\n    typeinfo->docstringoffs = -1;\n    typeinfo->helpstringcontext = 0;\n    typeinfo->helpcontext = 0;\n    typeinfo->oCustData = -1;\n    typeinfo->cbSizeVft = 0;\n    typeinfo->cImplTypes = 0;\n    typeinfo->size = 0;\n    typeinfo->datatype1 = -1;\n    typeinfo->datatype2 = 0;\n    typeinfo->res18 = 0;\n    typeinfo->res19 = -1;\n\n    return offset;\n}\n\n/****************************************************************************\n *\tctl2_alloc_guid\n *\n *  Allocates and initializes a GUID structure in a type library. Also updates\n *  the GUID hash table as needed.\n *\n * RETURNS\n *\n *  Success: The offset of the new GUID.\n */\nstatic int ctl2_alloc_guid(\n\tmsft_typelib_t *typelib,   /* [I] The type library to allocate in. */\n\tMSFT_GuidEntry *guid)      /* [I] The GUID to store. */\n{\n    int offset;\n    MSFT_GuidEntry *guid_space;\n    int hash_key;\n\n    chat(\"adding uuid {%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\\n\",\n         guid->guid.Data1, guid->guid.Data2, guid->guid.Data3,\n         guid->guid.Data4[0], guid->guid.Data4[1], guid->guid.Data4[2], guid->guid.Data4[3],\n         guid->guid.Data4[4], guid->guid.Data4[5], guid->guid.Data4[6], guid->guid.Data4[7]);\n\n    hash_key = ctl2_hash_guid(&guid->guid);\n\n    offset = ctl2_find_guid(typelib, hash_key, &guid->guid);\n    if (offset != -1)\n    {\n        if (is_warning_enabled(2368))\n            warning(\"duplicate uuid {%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\\n\",\n                    guid->guid.Data1, guid->guid.Data2, guid->guid.Data3,\n                    guid->guid.Data4[0], guid->guid.Data4[1], guid->guid.Data4[2], guid->guid.Data4[3],\n                    guid->guid.Data4[4], guid->guid.Data4[5], guid->guid.Data4[6], guid->guid.Data4[7]);\n        return -1;\n    }\n\n    offset = ctl2_alloc_segment(typelib, MSFT_SEG_GUID, sizeof(MSFT_GuidEntry), 0);\n\n    guid_space = (void *)(typelib->typelib_segment_data[MSFT_SEG_GUID] + offset);\n    *guid_space = *guid;\n\n    guid_space->next_hash = typelib->typelib_guidhash_segment[hash_key];\n    typelib->typelib_guidhash_segment[hash_key] = offset;\n\n    return offset;\n}\n\n/****************************************************************************\n *\tctl2_alloc_name\n *\n *  Allocates and initializes a name within a type library. Also updates the\n *  name hash table as needed.\n *\n * RETURNS\n *\n *  Success: The offset within the segment of the new name.\n *  Failure: -1 (this is invariably an out of memory condition).\n */\nstatic int ctl2_alloc_name(\n\tmsft_typelib_t *typelib,  /* [I] The type library to allocate in. */\n\tconst char *name)         /* [I] The name to store. */\n{\n    int length;\n    int offset;\n    MSFT_NameIntro *name_space;\n    char *encoded_name;\n\n    length = ctl2_encode_name(typelib, name, &encoded_name);\n\n    offset = ctl2_find_name(typelib, encoded_name);\n    if (offset != -1) return offset;\n\n    offset = ctl2_alloc_segment(typelib, MSFT_SEG_NAME, length + 8, 0);\n\n    name_space = (void *)(typelib->typelib_segment_data[MSFT_SEG_NAME] + offset);\n    name_space->hreftype = -1;\n    name_space->next_hash = -1;\n    memcpy(&name_space->namelen, encoded_name, length);\n\n    if (typelib->typelib_namehash_segment[encoded_name[2] & 0x7f] != -1)\n\tname_space->next_hash = typelib->typelib_namehash_segment[encoded_name[2] & 0x7f];\n\n    typelib->typelib_namehash_segment[encoded_name[2] & 0x7f] = offset;\n\n    typelib->typelib_header.nametablecount += 1;\n    typelib->typelib_header.nametablechars += *encoded_name;\n\n    return offset;\n}\n\n/****************************************************************************\n *\tctl2_alloc_string\n *\n *  Allocates and initializes a string in a type library.\n *\n * RETURNS\n *\n *  Success: The offset within the segment of the new string.\n *  Failure: -1 (this is invariably an out of memory condition).\n */\nstatic int ctl2_alloc_string(\n\tmsft_typelib_t *typelib,  /* [I] The type library to allocate in. */\n\tconst char *string)       /* [I] The string to store. */\n{\n    int length;\n    int offset;\n    unsigned char *string_space;\n    char *encoded_string;\n\n    length = ctl2_encode_string(string, &encoded_string);\n\n    for (offset = 0; offset < typelib->typelib_segdir[MSFT_SEG_STRING].length;\n\t offset += (((typelib->typelib_segment_data[MSFT_SEG_STRING][offset + 1] << 8) |\n\t      typelib->typelib_segment_data[MSFT_SEG_STRING][offset + 0]) + 5) & ~3) {\n\tif (!memcmp(encoded_string, typelib->typelib_segment_data[MSFT_SEG_STRING] + offset, length)) return offset;\n    }\n\n    offset = ctl2_alloc_segment(typelib, MSFT_SEG_STRING, length, 0);\n\n    string_space = typelib->typelib_segment_data[MSFT_SEG_STRING] + offset;\n    memcpy(string_space, encoded_string, length);\n\n    return offset;\n}\n\n/****************************************************************************\n *\talloc_msft_importinfo\n *\n *  Allocates and initializes an import information structure in a type library.\n *\n * RETURNS\n *\n *  Success: The offset of the new importinfo.\n *  Failure: -1 (this is invariably an out of memory condition).\n */\nstatic int alloc_msft_importinfo(\n        msft_typelib_t *typelib,   /* [I] The type library to allocate in. */\n        MSFT_ImpInfo *impinfo)     /* [I] The import information to store. */\n{\n    int offset;\n    MSFT_ImpInfo *impinfo_space;\n\n    for (offset = 0;\n\t offset < typelib->typelib_segdir[MSFT_SEG_IMPORTINFO].length;\n\t offset += sizeof(MSFT_ImpInfo)) {\n\tif (!memcmp(&(typelib->typelib_segment_data[MSFT_SEG_IMPORTINFO][offset]),\n\t\t    impinfo, sizeof(MSFT_ImpInfo))) {\n\t    return offset;\n\t}\n    }\n\n    impinfo->flags |= typelib->typelib_header.nimpinfos++;\n\n    offset = ctl2_alloc_segment(typelib, MSFT_SEG_IMPORTINFO, sizeof(MSFT_ImpInfo), 0);\n\n    impinfo_space = (void *)(typelib->typelib_segment_data[MSFT_SEG_IMPORTINFO] + offset);\n    *impinfo_space = *impinfo;\n\n    return offset;\n}\n\n/****************************************************************************\n *\talloc_importfile\n *\n *  Allocates and initializes an import file definition in a type library.\n *\n * RETURNS\n *\n *  Success: The offset of the new importinfo.\n *  Failure: -1 (this is invariably an out of memory condition).\n */\nstatic int alloc_importfile(\n        msft_typelib_t *typelib,   /* [I] The type library to allocate in. */\n        int guidoffset,            /* [I] The offset to the GUID for the imported library. */\n        int major_version,         /* [I] The major version number of the imported library. */\n        int minor_version,         /* [I] The minor version number of the imported library. */\n        const char *filename)      /* [I] The filename of the imported library. */\n{\n    int length;\n    int offset;\n    MSFT_ImpFile *importfile;\n    char *encoded_string;\n\n    length = ctl2_encode_string(filename, &encoded_string);\n\n    encoded_string[0] <<= 2;\n    encoded_string[0] |= 1;\n\n    for (offset = 0; offset < typelib->typelib_segdir[MSFT_SEG_IMPORTFILES].length;\n\t offset += (((typelib->typelib_segment_data[MSFT_SEG_IMPORTFILES][offset + 0xd] << 8) |\n\t              typelib->typelib_segment_data[MSFT_SEG_IMPORTFILES][offset + 0xc]) >> 2) + 0xc) {\n\tif (!memcmp(encoded_string, typelib->typelib_segment_data[MSFT_SEG_IMPORTFILES] + offset + 0xc, length)) return offset;\n    }\n\n    offset = ctl2_alloc_segment(typelib, MSFT_SEG_IMPORTFILES, length + 0xc, 0);\n\n    importfile = (MSFT_ImpFile *)&typelib->typelib_segment_data[MSFT_SEG_IMPORTFILES][offset];\n    importfile->guid = guidoffset;\n    importfile->lcid = typelib->typelib_header.lcid2;\n    importfile->version = major_version | (minor_version << 16);\n    memcpy(&importfile->filename, encoded_string, length);\n\n    return offset;\n}\n\nstatic void alloc_importinfo(msft_typelib_t *typelib, importinfo_t *importinfo)\n{\n    importlib_t *importlib = importinfo->importlib;\n\n    chat(\"alloc_importinfo: %s\\n\", importinfo->name);\n\n    if(!importlib->allocated) {\n        MSFT_GuidEntry guid;\n        int guid_idx;\n\n        chat(\"allocating importlib %s\\n\", importlib->name);\n\n        importlib->allocated = -1;\n\n        memcpy(&guid.guid, &importlib->guid, sizeof(GUID));\n        guid.hreftype = 2;\n\n        guid_idx = ctl2_alloc_guid(typelib, &guid);\n\n        alloc_importfile(typelib, guid_idx, importlib->version&0xffff,\n                         importlib->version>>16, importlib->name);\n    }\n\n    if(importinfo->offset == -1 || !(importinfo->flags & MSFT_IMPINFO_OFFSET_IS_GUID)) {\n        MSFT_ImpInfo impinfo;\n\n        impinfo.flags = importinfo->flags;\n        impinfo.oImpFile = 0;\n\n        if(importinfo->flags & MSFT_IMPINFO_OFFSET_IS_GUID) {\n            MSFT_GuidEntry guid;\n\n            guid.hreftype = 0;\n            memcpy(&guid.guid, &importinfo->guid, sizeof(GUID));\n\n            impinfo.oGuid = ctl2_alloc_guid(typelib, &guid);\n\n            importinfo->offset = alloc_msft_importinfo(typelib, &impinfo);\n\n            typelib->typelib_segment_data[MSFT_SEG_GUID][impinfo.oGuid+sizeof(GUID)]\n                = importinfo->offset+1;\n\n            if(!strcmp(importinfo->name, \"IDispatch\"))\n                typelib->typelib_header.dispatchpos = importinfo->offset+1;\n        }else {\n            impinfo.oGuid = importinfo->id;\n            importinfo->offset = alloc_msft_importinfo(typelib, &impinfo);\n        }\n    }\n}\n\nstatic importinfo_t *find_importinfo(msft_typelib_t *typelib, const char *name)\n{\n    importlib_t *importlib;\n    int i;\n\n    chat(\"search importlib %s\\n\", name);\n\n    if(!name)\n        return NULL;\n\n    LIST_FOR_EACH_ENTRY( importlib, &typelib->typelib->importlibs, importlib_t, entry )\n    {\n        for(i=0; i < importlib->ntypeinfos; i++) {\n            if(!strcmp(name, importlib->importinfos[i].name)) {\n                chat(\"Found %s in importlib.\\n\", name);\n                return importlib->importinfos+i;\n            }\n        }\n    }\n\n    return NULL;\n}\n\nstatic void add_structure_typeinfo(msft_typelib_t *typelib, type_t *structure);\nstatic void add_interface_typeinfo(msft_typelib_t *typelib, type_t *interface);\nstatic void add_enum_typeinfo(msft_typelib_t *typelib, type_t *enumeration);\nstatic void add_union_typeinfo(msft_typelib_t *typelib, type_t *tunion);\nstatic void add_coclass_typeinfo(msft_typelib_t *typelib, type_t *cls);\nstatic void add_dispinterface_typeinfo(msft_typelib_t *typelib, type_t *dispinterface);\n\n\n/****************************************************************************\n *\tencode_type\n *\n *  Encodes a type, storing information in the TYPEDESC and ARRAYDESC\n *  segments as needed.\n *\n * RETURNS\n *\n *  Success: 0.\n *  Failure: -1.\n */\nstatic int encode_type(\n\tmsft_typelib_t *typelib,   /* [I] The type library in which to encode the TYPEDESC. */\n        int vt,                    /* [I] vt to encode */\n\ttype_t *type,              /* [I] type */\n\tint *encoded_type,         /* [O] The encoded type description. */\n\tint *decoded_size)         /* [O] The total size of the unencoded TYPEDESCs, including nested descs. */\n{\n    int default_type;\n    int scratch;\n    int typeoffset;\n    int *typedata;\n    int target_type;\n    int child_size = 0;\n\n    chat(\"encode_type vt %d type %p\\n\", vt, type);\n\n    default_type = 0x80000000 | (vt << 16) | vt;\n    if (!decoded_size) decoded_size = &scratch;\n\n    *decoded_size = 0;\n\n    switch (vt) {\n    case VT_I1:\n    case VT_UI1:\n\t*encoded_type = default_type;\n\tbreak;\n\n    case VT_INT:\n\t*encoded_type = 0x80000000 | (VT_I4 << 16) | VT_INT;\n\tbreak;\n\n    case VT_UINT:\n\t*encoded_type = 0x80000000 | (VT_UI4 << 16) | VT_UINT;\n\tbreak;\n\n    case VT_UI2:\n    case VT_I2:\n    case VT_BOOL:\n\t*encoded_type = default_type;\n\tbreak;\n\n    case VT_I4:\n    case VT_UI4:\n    case VT_R4:\n    case VT_ERROR:\n    case VT_HRESULT:\n\t*encoded_type = default_type;\n\tbreak;\n\n    case VT_R8:\n    case VT_I8:\n    case VT_UI8:\n\t*encoded_type = default_type;\n\tbreak;\n\n    case VT_CY:\n    case VT_DATE:\n\t*encoded_type = default_type;\n\tbreak;\n\n    case VT_DECIMAL:\n        *encoded_type = default_type;\n        break;\n\n    case VT_VOID:\n\t*encoded_type = 0x80000000 | (VT_EMPTY << 16) | vt;\n\tbreak;\n\n    case VT_UNKNOWN:\n    case VT_DISPATCH:\n    case VT_BSTR:\n        *encoded_type = default_type;\n        break;\n\n    case VT_VARIANT:\n        *encoded_type = default_type;\n        break;\n\n    case VT_LPSTR:\n    case VT_LPWSTR:\n        *encoded_type = 0xfffe0000 | vt;\n        break;\n\n    case VT_PTR:\n      {\n        int next_vt;\n        for(next_vt = 0; is_ptr(type); type = type_pointer_get_ref(type)) {\n            next_vt = get_type_vt(type_pointer_get_ref(type));\n            if (next_vt != 0)\n                break;\n        }\n        /* if no type found then it must be void */\n        if (next_vt == 0)\n            next_vt = VT_VOID;\n\n        encode_type(typelib, next_vt, type_pointer_get_ref(type),\n                    &target_type, &child_size);\n        /* these types already have an implicit pointer, so we don't need to\n         * add another */\n        if(next_vt == VT_DISPATCH || next_vt == VT_UNKNOWN) {\n            chat(\"encode_type: skipping ptr\\n\");\n            *encoded_type = target_type;\n            *decoded_size = child_size;\n            break;\n        }\n\n\tfor (typeoffset = 0; typeoffset < typelib->typelib_segdir[MSFT_SEG_TYPEDESC].length; typeoffset += 8) {\n\t    typedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset];\n\t    if (((typedata[0] & 0xffff) == VT_PTR) && (typedata[1] == target_type)) break;\n\t}\n\n\tif (typeoffset == typelib->typelib_segdir[MSFT_SEG_TYPEDESC].length) {\n\t    int mix_field;\n\t    \n\t    if (target_type & 0x80000000) {\n\t\tmix_field = ((target_type >> 16) & 0x3fff) | VT_BYREF;\n\t    } else {\n\t\ttypedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][target_type];\n\t\tmix_field = ((typedata[0] >> 16) == 0x7fff)? 0x7fff: 0x7ffe;\n\t    }\n\n\t    typeoffset = ctl2_alloc_segment(typelib, MSFT_SEG_TYPEDESC, 8, 0);\n\t    typedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset];\n\n\t    typedata[0] = (mix_field << 16) | VT_PTR;\n\t    typedata[1] = target_type;\n\t}\n\n\t*encoded_type = typeoffset;\n\n\t*decoded_size = 8 /*sizeof(TYPEDESC)*/ + child_size;\n        break;\n    }\n\n    case VT_SAFEARRAY:\n\t{\n\ttype_t *element_type = type_alias_get_aliasee(type_array_get_element(type));\n\tint next_vt = get_type_vt(element_type);\n\n\tencode_type(typelib, next_vt, type_alias_get_aliasee(type_array_get_element(type)),\n        &target_type, &child_size);\n\n\tfor (typeoffset = 0; typeoffset < typelib->typelib_segdir[MSFT_SEG_TYPEDESC].length; typeoffset += 8) {\n\t    typedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset];\n\t    if (((typedata[0] & 0xffff) == VT_SAFEARRAY) && (typedata[1] == target_type)) break;\n\t}\n\n\tif (typeoffset == typelib->typelib_segdir[MSFT_SEG_TYPEDESC].length) {\n\t    int mix_field;\n\t    \n\t    if (target_type & 0x80000000) {\n\t\tmix_field = ((target_type >> 16) & VT_TYPEMASK) | VT_ARRAY;\n\t    } else {\n\t\ttypedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][target_type];\n\t\tmix_field = ((typedata[0] >> 16) == 0x7fff)? 0x7fff: 0x7ffe;\n\t    }\n\n\t    typeoffset = ctl2_alloc_segment(typelib, MSFT_SEG_TYPEDESC, 8, 0);\n\t    typedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset];\n\n\t    typedata[0] = (mix_field << 16) | VT_SAFEARRAY;\n\t    typedata[1] = target_type;\n\t}\n\n\t*encoded_type = typeoffset;\n\n\t*decoded_size = 8 /*sizeof(TYPEDESC)*/ + child_size;\n\tbreak;\n\t}\n\n    case VT_USERDEFINED:\n      {\n        importinfo_t *importinfo;\n        int typeinfo_offset;\n\n        if (type->typelib_idx > -1)\n        {\n            chat(\"encode_type: VT_USERDEFINED - found already defined type %s at %d\\n\",\n                type->name, type->typelib_idx);\n            typeinfo_offset = typelib->typelib_typeinfo_offsets[type->typelib_idx];\n        }\n        else if ((importinfo = find_importinfo(typelib, type->name)))\n        {\n            chat(\"encode_type: VT_USERDEFINED - found imported type %s in %s\\n\",\n                type->name, importinfo->importlib->name);\n            alloc_importinfo(typelib, importinfo);\n            typeinfo_offset = importinfo->offset | 0x1;\n        }\n        else\n        {\n            /* typedef'd types without public attribute aren't included in the typelib */\n            while (type_is_alias(type) && !is_attr(type->attrs, ATTR_PUBLIC))\n                type = type_alias_get_aliasee(type);\n\n            chat(\"encode_type: VT_USERDEFINED - adding new type %s, real type %d\\n\",\n                 type->name, type_get_type(type));\n\n            switch (type_get_type(type))\n            {\n            case TYPE_STRUCT:\n                add_structure_typeinfo(typelib, type);\n                break;\n            case TYPE_INTERFACE:\n                add_interface_typeinfo(typelib, type);\n                break;\n            case TYPE_ENUM:\n                add_enum_typeinfo(typelib, type);\n                break;\n            case TYPE_UNION:\n                add_union_typeinfo(typelib, type);\n                break;\n            case TYPE_COCLASS:\n                add_coclass_typeinfo(typelib, type);\n                break;\n            default:\n                error(\"encode_type: VT_USERDEFINED - unhandled type %d\\n\",\n                      type_get_type(type));\n            }\n\n            typeinfo_offset = typelib->typelib_typeinfo_offsets[type->typelib_idx];\n        }\n\tfor (typeoffset = 0; typeoffset < typelib->typelib_segdir[MSFT_SEG_TYPEDESC].length; typeoffset += 8) {\n\t    typedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset];\n\t    if ((typedata[0] == ((0x7fff << 16) | VT_USERDEFINED)) && (typedata[1] == typeinfo_offset)) break;\n\t}\n\n\tif (typeoffset == typelib->typelib_segdir[MSFT_SEG_TYPEDESC].length) {\n\t    typeoffset = ctl2_alloc_segment(typelib, MSFT_SEG_TYPEDESC, 8, 0);\n\t    typedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset];\n\n\t    typedata[0] = (0x7fff << 16) | VT_USERDEFINED;\n\t    typedata[1] = typeinfo_offset;\n\t}\n\n\t*encoded_type = typeoffset;\n        break;\n      }\n\n    default:\n\terror(\"encode_type: unrecognized type %d.\\n\", vt);\n\t*encoded_type = default_type;\n\tbreak;\n    }\n\n    return 0;\n}\n\nstatic void dump_type(type_t *t)\n{\n    chat(\"dump_type: %p name %s type %d attrs %p\\n\", t, t->name, type_get_type(t), t->attrs);\n}\n\nstatic int encode_var(\n\tmsft_typelib_t *typelib,   /* [I] The type library in which to encode the TYPEDESC. */\n\ttype_t *type,              /* [I] The type description to encode. */\n\tvar_t *var,                /* [I] The var to encode. */\n\tint *encoded_type,         /* [O] The encoded type description. */\n\tint *decoded_size)         /* [O] The total size of the unencoded TYPEDESCs, including nested descs. */\n{\n    int typeoffset;\n    int *typedata;\n    int target_type;\n    int child_size;\n    int vt;\n    int scratch;\n\n    if (!decoded_size) decoded_size = &scratch;\n    *decoded_size = 0;\n\n    chat(\"encode_var: var %p type %p type->name %s\\n\",\n         var, type, type->name ? type->name : \"NULL\");\n\n    if (is_array(type) && !type_array_is_decl_as_ptr(type)) {\n        int num_dims, elements = 1, arrayoffset;\n        type_t *atype;\n        int *arraydata;\n\n        num_dims = 0;\n        for (atype = type;\n             is_array(atype) && !type_array_is_decl_as_ptr(atype);\n             atype = type_array_get_element(atype))\n            ++num_dims;\n\n        chat(\"array with %d dimensions\\n\", num_dims);\n        encode_var(typelib, atype, var, &target_type, NULL);\n        arrayoffset = ctl2_alloc_segment(typelib, MSFT_SEG_ARRAYDESC, (2 + 2 * num_dims) * sizeof(int), 0);\n        arraydata = (void *)&typelib->typelib_segment_data[MSFT_SEG_ARRAYDESC][arrayoffset];\n\n        arraydata[0] = target_type;\n        arraydata[1] = num_dims;\n        arraydata[1] |= ((num_dims * 2 * sizeof(int)) << 16);\n\n        arraydata += 2;\n        for (atype = type;\n             is_array(atype) && !type_array_is_decl_as_ptr(atype);\n             atype = type_array_get_element(atype))\n        {\n            arraydata[0] = type_array_get_dim(atype);\n            arraydata[1] = 0;\n            arraydata += 2;\n            elements *= type_array_get_dim(atype);\n        }\n\n        typeoffset = ctl2_alloc_segment(typelib, MSFT_SEG_TYPEDESC, 8, 0);\n        typedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset];\n\n        typedata[0] = (0x7ffe << 16) | VT_CARRAY;\n        typedata[1] = arrayoffset;\n\n        *encoded_type = typeoffset;\n        *decoded_size = 20 /*sizeof(ARRAYDESC)*/ + (num_dims - 1) * 8 /*sizeof(SAFEARRAYBOUND)*/;\n        return 0;\n    }\n\n    vt = get_type_vt(type);\n    if (vt == VT_PTR) {\n        type_t *ref = is_ptr(type) ?\n            type_pointer_get_ref(type) : type_array_get_element(type);\n        int skip_ptr = encode_var(typelib, ref, var, &target_type, &child_size);\n\n        if(skip_ptr == 2) {\n            chat(\"encode_var: skipping ptr\\n\");\n            *encoded_type = target_type;\n            *decoded_size = child_size;\n            return 0;\n        }\n\n\tfor (typeoffset = 0; typeoffset < typelib->typelib_segdir[MSFT_SEG_TYPEDESC].length; typeoffset += 8) {\n\t    typedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset];\n\t    if (((typedata[0] & 0xffff) == VT_PTR) && (typedata[1] == target_type)) break;\n\t}\n\n\tif (typeoffset == typelib->typelib_segdir[MSFT_SEG_TYPEDESC].length) {\n\t    int mix_field;\n\n\t    if (target_type & 0x80000000) {\n\t\tmix_field = ((target_type >> 16) & 0x3fff) | VT_BYREF;\n\t    } else if (is_array(ref)) {\n\t\ttype_t *element_type = type_alias_get_aliasee(type_array_get_element(ref));\n\t\tmix_field = get_type_vt(element_type) | VT_ARRAY | VT_BYREF;\n\t    } else {\n\t\ttypedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][target_type];\n\t\tmix_field = ((typedata[0] >> 16) == 0x7fff)? 0x7fff: 0x7ffe;\n\t    }\n\n\t    typeoffset = ctl2_alloc_segment(typelib, MSFT_SEG_TYPEDESC, 8, 0);\n\t    typedata = (void *)&typelib->typelib_segment_data[MSFT_SEG_TYPEDESC][typeoffset];\n\n\t    typedata[0] = (mix_field << 16) | VT_PTR;\n\t    typedata[1] = target_type;\n\t}\n\n\t*encoded_type = typeoffset;\n\n\t*decoded_size = 8 /*sizeof(TYPEDESC)*/ + child_size;\n        return 0;\n    }\n\n    dump_type(type);\n\n    encode_type(typelib, vt, type, encoded_type, decoded_size);\n    /* these types already have an implicit pointer, so we don't need to\n     * add another */\n    if(vt == VT_DISPATCH || vt == VT_UNKNOWN) return 2;\n    return 0;\n}\n\nstatic unsigned int get_ulong_val(unsigned int val, int vt)\n{\n    switch(vt) {\n    case VT_I2:\n    case VT_BOOL:\n    case VT_UI2:\n        return val & 0xffff;\n    case VT_I1:\n    case VT_UI1:\n        return val & 0xff;\n    }\n\n    return val;\n}\n\nstatic void write_int_value(msft_typelib_t *typelib, int *out, int vt, int value)\n{\n    const unsigned int lv = get_ulong_val(value, vt);\n    if ((lv & 0x3ffffff) == lv) {\n        *out = 0x80000000;\n        *out |= vt << 26;\n        *out |= lv;\n    } else {\n        int offset = ctl2_alloc_segment(typelib, MSFT_SEG_CUSTDATA, 8, 0);\n        *((unsigned short *)&typelib->typelib_segment_data[MSFT_SEG_CUSTDATA][offset]) = vt;\n        memcpy(&typelib->typelib_segment_data[MSFT_SEG_CUSTDATA][offset+2], &value, 4);\n        *((unsigned short *)&typelib->typelib_segment_data[MSFT_SEG_CUSTDATA][offset+6]) = 0x5757;\n        *out = offset;\n    }\n}\n\nstatic void write_string_value(msft_typelib_t *typelib, int *out, const char *value)\n{\n    int len = strlen(value), seg_len = (len + 6 + 3) & ~0x3;\n    int offset = ctl2_alloc_segment(typelib, MSFT_SEG_CUSTDATA, seg_len, 0);\n    *((unsigned short *)&typelib->typelib_segment_data[MSFT_SEG_CUSTDATA][offset]) = VT_BSTR;\n    memcpy(&typelib->typelib_segment_data[MSFT_SEG_CUSTDATA][offset+2], &len, sizeof(len));\n    memcpy(&typelib->typelib_segment_data[MSFT_SEG_CUSTDATA][offset+6], value, len);\n    len += 6;\n    while(len < seg_len) {\n        *((char *)&typelib->typelib_segment_data[MSFT_SEG_CUSTDATA][offset+len]) = 0x57;\n        len++;\n    }\n    *out = offset;\n}\n\nstatic void write_default_value(msft_typelib_t *typelib, type_t *type, expr_t *expr, int *out)\n{\n    int vt;\n\n    if (expr->type == EXPR_STRLIT || expr->type == EXPR_WSTRLIT) {\n        if (get_type_vt(type) != VT_BSTR)\n            error(\"string default value applied to non-string type\\n\");\n        chat(\"default value '%s'\\n\", expr->u.sval);\n        write_string_value(typelib, out, expr->u.sval);\n        return;\n    }\n\n    if (type_get_type(type) == TYPE_ENUM) {\n        vt = VT_I4;\n    } else if (is_ptr(type)) {\n        vt = get_type_vt(type_pointer_get_ref(type));\n        if (vt == VT_USERDEFINED)\n            vt = VT_I4;\n        if (expr->cval)\n            warning(\"non-null pointer default value\\n\");\n    } else {\n        vt = get_type_vt(type);\n        switch(vt) {\n        case VT_I2:\n        case VT_I4:\n        case VT_R4:\n        case VT_BOOL:\n        case VT_I1:\n        case VT_UI1:\n        case VT_UI2:\n        case VT_UI4:\n        case VT_INT:\n        case VT_UINT:\n        case VT_HRESULT:\n            break;\n        default:\n            warning(\"can't write value of type %d yet\\n\", vt);\n            return;\n        }\n    }\n\n    write_int_value(typelib, out, vt, expr->cval);\n}\n\nstatic HRESULT set_custdata(msft_typelib_t *typelib, REFGUID guid,\n                            int vt, const void *value, int *offset)\n{\n    MSFT_GuidEntry guidentry;\n    int guidoffset;\n    int custoffset;\n    int *custdata;\n    int data_out;\n\n    guidentry.guid = *guid;\n\n    guidentry.hreftype = -1;\n    guidentry.next_hash = -1;\n\n    guidoffset = ctl2_alloc_guid(typelib, &guidentry);\n    if(vt == VT_BSTR)\n        write_string_value(typelib, &data_out, value);\n    else\n        write_int_value(typelib, &data_out, vt, *(int*)value);\n\n    custoffset = ctl2_alloc_segment(typelib, MSFT_SEG_CUSTDATAGUID, 12, 0);\n\n    custdata = (int *)&typelib->typelib_segment_data[MSFT_SEG_CUSTDATAGUID][custoffset];\n    custdata[0] = guidoffset;\n    custdata[1] = data_out;\n    custdata[2] = *offset;\n    *offset = custoffset;\n\n    return S_OK;\n}\n\nstatic HRESULT add_func_desc(msft_typeinfo_t* typeinfo, var_t *func, int index)\n{\n    int offset, name_offset;\n    int *typedata, typedata_size;\n    int i, id, next_idx;\n    int decoded_size, extra_attr = 0;\n    int num_params = 0, num_optional = 0, num_defaults = 0;\n    var_t *arg;\n    unsigned char *namedata;\n    const attr_t *attr;\n    unsigned int funcflags = 0, callconv = 4 /* CC_STDCALL */;\n    unsigned int funckind, invokekind = 1 /* INVOKE_FUNC */;\n    int help_context = 0, help_string_context = 0, help_string_offset = -1;\n    int entry = -1, entry_is_ord = 0;\n    int lcid_retval_count = 0;\n\n    chat(\"add_func_desc(%p,%d)\\n\", typeinfo, index);\n\n    id = ((0x6000 | (typeinfo->typeinfo->datatype2 & 0xffff)) << 16) | index;\n\n    switch(typeinfo->typekind) {\n    case TKIND_DISPATCH:\n        funckind = 0x4; /* FUNC_DISPATCH */\n        break;\n    case TKIND_MODULE:\n        funckind = 0x3; /* FUNC_STATIC */\n        break;\n    default:\n        funckind = 0x1; /* FUNC_PUREVIRTUAL */\n        break;\n    }\n\n    if (is_local( func->attrs )) {\n        chat(\"add_func_desc: skipping local function\\n\");\n        return S_FALSE;\n    }\n\n    if (type_get_function_args(func->type))\n      LIST_FOR_EACH_ENTRY( arg, type_get_function_args(func->type), var_t, entry )\n      {\n        num_params++;\n        if (arg->attrs) LIST_FOR_EACH_ENTRY( attr, arg->attrs, const attr_t, entry ) {\n            if(attr->type == ATTR_DEFAULTVALUE)\n                num_defaults++;\n            else if(attr->type == ATTR_OPTIONAL)\n                num_optional++;\n        }\n      }\n\n    chat(\"add_func_desc: num of params %d\\n\", num_params);\n\n    name_offset = ctl2_alloc_name(typeinfo->typelib, func->name);\n\n    if (func->attrs) LIST_FOR_EACH_ENTRY( attr, func->attrs, const attr_t, entry ) {\n        expr_t *expr = attr->u.pval;\n        switch(attr->type) {\n        case ATTR_BINDABLE:\n            funcflags |= 0x4; /* FUNCFLAG_FBINDABLE */\n            break;\n        case ATTR_DEFAULTBIND:\n            funcflags |= 0x20; /* FUNCFLAG_FDEFAULTBIND */\n            break;\n        case ATTR_DEFAULTCOLLELEM:\n            funcflags |= 0x100; /* FUNCFLAG_FDEFAULTCOLLELEM */\n            break;\n        case ATTR_DISPLAYBIND:\n            funcflags |= 0x10; /* FUNCFLAG_FDISPLAYBIND */\n            break;\n        case ATTR_ENTRY:\n            extra_attr = max(extra_attr, 3);\n            if (expr->type == EXPR_STRLIT || expr->type == EXPR_WSTRLIT)\n              entry = ctl2_alloc_string(typeinfo->typelib, attr->u.pval);\n            else {\n              entry = expr->cval;\n              entry_is_ord = 1;\n            }\n            break;\n        case ATTR_HELPCONTEXT:\n            extra_attr = max(extra_attr, 1);\n            help_context = expr->u.lval;\n            break;\n        case ATTR_HELPSTRING:\n            extra_attr = max(extra_attr, 2);\n            help_string_offset = ctl2_alloc_string(typeinfo->typelib, attr->u.pval);\n            break;\n        case ATTR_HELPSTRINGCONTEXT:\n            extra_attr = max(extra_attr, 6);\n            help_string_context = expr->u.lval;\n            break;\n        case ATTR_HIDDEN:\n            funcflags |= 0x40; /* FUNCFLAG_FHIDDEN */\n            break;\n        case ATTR_ID:\n            id = expr->cval;\n            break;\n        case ATTR_IMMEDIATEBIND:\n            funcflags |= 0x1000; /* FUNCFLAG_FIMMEDIATEBIND */\n            break;\n        case ATTR_NONBROWSABLE:\n            funcflags |= 0x400; /* FUNCFLAG_FNONBROWSABLE */\n            break;\n        case ATTR_OUT:\n            break;\n        case ATTR_PROPGET:\n            invokekind = 0x2; /* INVOKE_PROPERTYGET */\n            break;\n        case ATTR_PROPPUT:\n            invokekind = 0x4; /* INVOKE_PROPERTYPUT */\n            break;\n        case ATTR_PROPPUTREF:\n            invokekind = 0x8; /* INVOKE_PROPERTYPUTREF */\n            break;\n        /* FIXME: FUNCFLAG_FREPLACEABLE */\n        case ATTR_REQUESTEDIT:\n            funcflags |= 0x8; /* FUNCFLAG_FREQUESTEDIT */\n            break;\n        case ATTR_RESTRICTED:\n            funcflags |= 0x1; /* FUNCFLAG_FRESTRICTED */\n            break;\n        case ATTR_SOURCE:\n            funcflags |= 0x2; /* FUNCFLAG_FSOURCE */\n            break;\n        case ATTR_UIDEFAULT:\n            funcflags |= 0x200; /* FUNCFLAG_FUIDEFAULT */\n            break;\n        case ATTR_USESGETLASTERROR:\n            funcflags |= 0x80; /* FUNCFLAG_FUSESGETLASTERROR */\n            break;\n        case ATTR_VARARG:\n            if (num_optional || num_defaults)\n                warning(\"add_func_desc: ignoring vararg in function with optional or defaultvalue params\\n\");\n            else\n                num_optional = -1;\n            break;\n        default:\n            break;\n        }\n    }\n\n    /* allocate type data space for us */\n    typedata_size = 0x18 + extra_attr * sizeof(int) + (num_params * (num_defaults ? 16 : 12));\n\n    if (!typeinfo->func_data) {\n        typeinfo->func_data = xmalloc(0x100);\n        typeinfo->func_data_allocated = 0x100;\n        typeinfo->func_data[0] = 0;\n    }\n\n    if(typeinfo->func_data[0] + typedata_size + sizeof(int) > typeinfo->func_data_allocated) {\n        typeinfo->func_data_allocated = max(typeinfo->func_data_allocated * 2,\n                                            typeinfo->func_data[0] + typedata_size + sizeof(int));\n        typeinfo->func_data = xrealloc(typeinfo->func_data, typeinfo->func_data_allocated);\n    }\n\n    offset = typeinfo->func_data[0];\n    typeinfo->func_data[0] += typedata_size;\n    typedata = typeinfo->func_data + (offset >> 2) + 1;\n\n\n    /* find func with the same name - if it exists use its id */\n    for(i = 0; i < (typeinfo->typeinfo->cElement & 0xffff); i++) {\n        if(name_offset == typeinfo->func_names[i]) {\n            id = typeinfo->func_indices[i];\n            break;\n        }\n    }\n\n    /* find the first func with the same id and link via the hiword of typedata[4] */\n    next_idx = index;\n    for(i = 0; i < (typeinfo->typeinfo->cElement & 0xffff); i++) {\n        if(id == typeinfo->func_indices[i]) {\n            next_idx = typeinfo->func_data[(typeinfo->func_offsets[i] >> 2) + 1 + 4] >> 16;\n            typeinfo->func_data[(typeinfo->func_offsets[i] >> 2) + 1 + 4] &= 0xffff;\n            typeinfo->func_data[(typeinfo->func_offsets[i] >> 2) + 1 + 4] |= (index << 16);\n            break;\n        }\n    }\n\n    /* fill out the basic type information */\n    typedata[0] = typedata_size | (index << 16);\n    encode_var(typeinfo->typelib, type_function_get_rettype(func->type), func,\n        &typedata[1], &decoded_size);\n    typedata[2] = funcflags;\n    typedata[3] = ((52 /*sizeof(FUNCDESC)*/ + decoded_size) << 16) | typeinfo->typeinfo->cbSizeVft;\n    typedata[4] = (next_idx << 16) | (callconv << 8) | (invokekind << 3) | funckind;\n    if(num_defaults) typedata[4] |= 0x1000;\n    if(entry_is_ord) typedata[4] |= 0x2000;\n    typedata[5] = (num_optional << 16) | num_params;\n\n    /* NOTE: High word of typedata[3] is total size of FUNCDESC + size of all ELEMDESCs for params + TYPEDESCs for pointer params and return types. */\n    /* That is, total memory allocation required to reconstitute the FUNCDESC in its entirety. */\n    typedata[3] += (16 /*sizeof(ELEMDESC)*/ * num_params) << 16;\n    typedata[3] += (24 /*sizeof(PARAMDESCEX)*/ * num_defaults) << 16;\n\n    switch(extra_attr) {\n    case 6: typedata[11] = help_string_context;\n    case 5: typedata[10] = -1;\n    case 4: typedata[9] = -1;\n    case 3: typedata[8] = entry;\n    case 2: typedata[7] = help_string_offset;\n    case 1: typedata[6] = help_context;\n    case 0:\n        break;\n    default:\n        warning(\"unknown number of optional attrs\\n\");\n    }\n\n    if (type_get_function_args(func->type))\n    {\n      i = 0;\n      LIST_FOR_EACH_ENTRY( arg, type_get_function_args(func->type), var_t, entry )\n      {\n        int paramflags = 0;\n        int *paramdata = typedata + 6 + extra_attr + (num_defaults ? num_params : 0) + i * 3;\n        int *defaultdata = num_defaults ? typedata + 6 + extra_attr + i : NULL;\n\n        if(defaultdata) *defaultdata = -1;\n\n\tencode_var(typeinfo->typelib, arg->type, arg, paramdata, &decoded_size);\n        if (arg->attrs) LIST_FOR_EACH_ENTRY( attr, arg->attrs, const attr_t, entry ) {\n            switch(attr->type) {\n            case ATTR_DEFAULTVALUE:\n              {\n                paramflags |= 0x30; /* PARAMFLAG_FHASDEFAULT | PARAMFLAG_FOPT */\n                write_default_value(typeinfo->typelib, arg->type, (expr_t *)attr->u.pval, defaultdata);\n                break;\n              }\n            case ATTR_IN:\n                paramflags |= 0x01; /* PARAMFLAG_FIN */\n                break;\n            case ATTR_OPTIONAL:\n                paramflags |= 0x10; /* PARAMFLAG_FOPT */\n                break;\n            case ATTR_OUT:\n                paramflags |= 0x02; /* PARAMFLAG_FOUT */\n                break;\n            case ATTR_PARAMLCID:\n                paramflags |= 0x04; /* PARAMFLAG_LCID */\n                lcid_retval_count++;\n                break;\n            case ATTR_RETVAL:\n                paramflags |= 0x08; /* PARAMFLAG_FRETVAL */\n                lcid_retval_count++;\n                break;\n            default:\n                chat(\"unhandled param attr %d\\n\", attr->type);\n                break;\n            }\n        }\n\tparamdata[1] = -1;\n\tparamdata[2] = paramflags;\n\ttypedata[3] += decoded_size << 16;\n\n        i++;\n      }\n    }\n\n    if(lcid_retval_count == 1)\n        typedata[4] |= 0x4000;\n    else if(lcid_retval_count == 2)\n        typedata[4] |= 0x8000;\n\n    if(typeinfo->funcs_allocated == 0) {\n        typeinfo->funcs_allocated = 10;\n        typeinfo->func_indices = xmalloc(typeinfo->funcs_allocated * sizeof(int));\n        typeinfo->func_names   = xmalloc(typeinfo->funcs_allocated * sizeof(int));\n        typeinfo->func_offsets = xmalloc(typeinfo->funcs_allocated * sizeof(int));\n    }\n    if(typeinfo->funcs_allocated == (typeinfo->typeinfo->cElement & 0xffff)) {\n        typeinfo->funcs_allocated *= 2;\n        typeinfo->func_indices = xrealloc(typeinfo->func_indices, typeinfo->funcs_allocated * sizeof(int));\n        typeinfo->func_names   = xrealloc(typeinfo->func_names,   typeinfo->funcs_allocated * sizeof(int));\n        typeinfo->func_offsets = xrealloc(typeinfo->func_offsets, typeinfo->funcs_allocated * sizeof(int));\n    }\n\n    /* update the index data */\n    typeinfo->func_indices[typeinfo->typeinfo->cElement & 0xffff] = id; \n    typeinfo->func_offsets[typeinfo->typeinfo->cElement & 0xffff] = offset;\n    typeinfo->func_names[typeinfo->typeinfo->cElement & 0xffff] = name_offset;\n\n    /* ??? */\n    if (!typeinfo->typeinfo->res2) typeinfo->typeinfo->res2 = 0x20;\n    typeinfo->typeinfo->res2 <<= 1;\n    /* ??? */\n    if (index < 2) typeinfo->typeinfo->res2 += num_params << 4;\n\n    if (typeinfo->typeinfo->res3 == -1) typeinfo->typeinfo->res3 = 0;\n    typeinfo->typeinfo->res3 += 0x38 + num_params * 0x10;\n    if(num_defaults) typeinfo->typeinfo->res3 += num_params * 0x4;\n\n    /* adjust size of VTBL */\n    if(funckind != 0x3 /* FUNC_STATIC */)\n        typeinfo->typeinfo->cbSizeVft += pointer_size;\n\n    /* Increment the number of function elements */\n    typeinfo->typeinfo->cElement += 1;\n\n    namedata = typeinfo->typelib->typelib_segment_data[MSFT_SEG_NAME] + name_offset;\n    if (*((INT *)namedata) == -1) {\n\t*((INT *)namedata) = typeinfo->typelib->typelib_typeinfo_offsets[typeinfo->typeinfo->typekind >> 16];\n        if(typeinfo->typekind == TKIND_MODULE)\n            namedata[9] |= 0x10;\n    } else\n        namedata[9] &= ~0x10;\n\n    if(typeinfo->typekind == TKIND_MODULE)\n        namedata[9] |= 0x20;\n\n    if (type_get_function_args(func->type))\n    {\n        i = 0;\n        LIST_FOR_EACH_ENTRY( arg, type_get_function_args(func->type), var_t, entry )\n        {\n            /* don't give the last arg of a [propput*] func a name */\n            if(i != num_params - 1 || (invokekind != 0x4 /* INVOKE_PROPERTYPUT */ && invokekind != 0x8 /* INVOKE_PROPERTYPUTREF */))\n            {\n                int *paramdata = typedata + 6 + extra_attr + (num_defaults ? num_params : 0) + i * 3;\n                offset = ctl2_alloc_name(typeinfo->typelib, arg->name);\n                paramdata[1] = offset;\n            }\n            i++;\n        }\n    }\n    return S_OK;\n}\n\nstatic HRESULT add_var_desc(msft_typeinfo_t *typeinfo, UINT index, var_t* var)\n{\n    int offset, id;\n    unsigned int typedata_size;\n    INT *typedata;\n    unsigned int var_datawidth, var_alignment = 0;\n    int var_type_size, var_kind = 0 /* VAR_PERINSTANCE */; \n    int alignment;\n    int varflags = 0;\n    const attr_t *attr;\n    unsigned char *namedata;\n    int var_num = (typeinfo->typeinfo->cElement >> 16) & 0xffff;\n\n    chat(\"add_var_desc(%d, %s)\\n\", index, var->name);\n\n    id = 0x40000000 + index;\n\n    if (var->attrs) LIST_FOR_EACH_ENTRY( attr, var->attrs, const attr_t, entry ) {\n        expr_t *expr = attr->u.pval;\n        switch(attr->type) {\n        case ATTR_BINDABLE:\n            varflags |= 0x04; /* VARFLAG_FBINDABLE */\n            break;\n        case ATTR_DEFAULTBIND:\n            varflags |= 0x20; /* VARFLAG_FDEFAULTBIND */\n            break;\n        case ATTR_DEFAULTCOLLELEM:\n            varflags |= 0x100; /* VARFLAG_FDEFAULTCOLLELEM */\n            break;\n        case ATTR_DISPLAYBIND:\n            varflags |= 0x10; /* VARFLAG_FDISPLAYBIND */\n            break;\n        case ATTR_HIDDEN:\n            varflags |= 0x40; /* VARFLAG_FHIDDEN */\n            break;\n        case ATTR_ID:\n            id = expr->cval;\n            break;\n        case ATTR_IMMEDIATEBIND:\n            varflags |= 0x1000; /* VARFLAG_FIMMEDIATEBIND */\n            break;\n        case ATTR_NONBROWSABLE:\n            varflags |= 0x400; /* VARFLAG_FNONBROWSABLE */\n            break;\n        case ATTR_READONLY:\n            varflags |= 0x01; /* VARFLAG_FREADONLY */\n            break;\n        /* FIXME: VARFLAG_FREPLACEABLE */\n        case ATTR_REQUESTEDIT:\n            varflags |= 0x08; /* VARFLAG_FREQUESTEDIT */\n            break;\n        case ATTR_RESTRICTED:\n            varflags |= 0x80; /* VARFLAG_FRESTRICTED */\n            break;\n        case ATTR_SOURCE:\n            varflags |= 0x02; /* VARFLAG_FSOURCE */\n            break;\n        case ATTR_UIDEFAULT:\n            varflags |= 0x0200; /* VARFLAG_FUIDEFAULT */\n            break;\n        default:\n            break;\n        }\n    }\n\n    /* allocate type data space for us */\n    typedata_size = 0x14;\n\n    if (!typeinfo->var_data) {\n        typeinfo->var_data = xmalloc(0x100);\n        typeinfo->var_data_allocated = 0x100;\n        typeinfo->var_data[0] = 0;\n    }\n\n    if(typeinfo->var_data[0] + typedata_size + sizeof(int) > typeinfo->var_data_allocated) {\n        typeinfo->var_data_allocated = max(typeinfo->var_data_allocated * 2,\n                                            typeinfo->var_data[0] + typedata_size + sizeof(int));\n        typeinfo->var_data = xrealloc(typeinfo->var_data, typeinfo->var_data_allocated);\n    }\n\n    offset = typeinfo->var_data[0];\n    typeinfo->var_data[0] += typedata_size;\n    typedata = typeinfo->var_data + (offset >> 2) + 1;\n\n    /* fill out the basic type information */\n    typedata[0] = typedata_size | (index << 16);\n    typedata[2] = varflags;\n    typedata[3] = (36 /*sizeof(VARDESC)*/ << 16) | 0;\n\n    if(typeinfo->vars_allocated == 0) {\n        typeinfo->vars_allocated = 10;\n        typeinfo->var_indices = xmalloc(typeinfo->vars_allocated * sizeof(int));\n        typeinfo->var_names   = xmalloc(typeinfo->vars_allocated * sizeof(int));\n        typeinfo->var_offsets = xmalloc(typeinfo->vars_allocated * sizeof(int));\n    }\n    if(typeinfo->vars_allocated == var_num) {\n        typeinfo->vars_allocated *= 2;\n        typeinfo->var_indices = xrealloc(typeinfo->var_indices, typeinfo->vars_allocated * sizeof(int));\n        typeinfo->var_names   = xrealloc(typeinfo->var_names,   typeinfo->vars_allocated * sizeof(int));\n        typeinfo->var_offsets = xrealloc(typeinfo->var_offsets, typeinfo->vars_allocated * sizeof(int));\n    }\n    /* update the index data */\n    typeinfo->var_indices[var_num] = id;\n    typeinfo->var_names[var_num] = -1;\n    typeinfo->var_offsets[var_num] = offset;\n\n    /* figure out type widths and whatnot */\n    var_datawidth = type_memsize_and_alignment(var->type, &var_alignment);\n    encode_var(typeinfo->typelib, var->type, var, &typedata[1], &var_type_size);\n\n    /* pad out starting position to data width */\n    typeinfo->datawidth += var_alignment - 1;\n    typeinfo->datawidth &= ~(var_alignment - 1);\n\n    switch(typeinfo->typekind) {\n    case TKIND_ENUM:\n        write_int_value(typeinfo->typelib, &typedata[4], VT_I4, var->eval->cval);\n        var_kind = 2; /* VAR_CONST */\n        var_type_size += 16; /* sizeof(VARIANT) */\n        typeinfo->datawidth = var_datawidth;\n        break;\n    case TKIND_RECORD:\n        typedata[4] = typeinfo->datawidth;\n        typeinfo->datawidth += var_datawidth;\n        break;\n    case TKIND_UNION:\n        typedata[4] = typeinfo->datawidth;\n        typeinfo->datawidth = max(typeinfo->datawidth, var_datawidth);\n        break;\n    case TKIND_DISPATCH:\n        var_kind = 3; /* VAR_DISPATCH */\n        typeinfo->datawidth = pointer_size;\n        break;\n    default:\n        error(\"add_var_desc: unhandled type kind %d\\n\", typeinfo->typekind);\n        break;\n    }\n\n    /* add type description size to total required allocation */\n    typedata[3] += var_type_size << 16 | var_kind;\n\n    /* fix type alignment */\n    alignment = (typeinfo->typeinfo->typekind >> 11) & 0x1f;\n    if (alignment < var_alignment) {\n\talignment = var_alignment;\n\ttypeinfo->typeinfo->typekind &= ~0xffc0;\n\ttypeinfo->typeinfo->typekind |= alignment << 11 | alignment << 6;\n    }\n\n    /* ??? */\n    if (!typeinfo->typeinfo->res2) typeinfo->typeinfo->res2 = 0x1a;\n    if ((index == 0) || (index == 1) || (index == 2) || (index == 4) || (index == 9)) {\n\ttypeinfo->typeinfo->res2 <<= 1;\n    }\n\n    /* ??? */\n    if (typeinfo->typeinfo->res3 == -1) typeinfo->typeinfo->res3 = 0;\n    typeinfo->typeinfo->res3 += 0x2c;\n\n    /* increment the number of variable elements */\n    typeinfo->typeinfo->cElement += 0x10000;\n\n    /* pad data width to alignment */\n    typeinfo->typeinfo->size = (typeinfo->datawidth + (alignment - 1)) & ~(alignment - 1);\n\n    offset = ctl2_alloc_name(typeinfo->typelib, var->name);\n    if (offset == -1) return E_OUTOFMEMORY;\n\n    namedata = typeinfo->typelib->typelib_segment_data[MSFT_SEG_NAME] + offset;\n    if (*((INT *)namedata) == -1) {\n\t*((INT *)namedata) = typeinfo->typelib->typelib_typeinfo_offsets[typeinfo->typeinfo->typekind >> 16];\n        if(typeinfo->typekind != TKIND_DISPATCH)\n            namedata[9] |= 0x10;\n    } else\n        namedata[9] &= ~0x10;\n\n    if (typeinfo->typekind == TKIND_ENUM) {\n\tnamedata[9] |= 0x20;\n    }\n    typeinfo->var_names[var_num] = offset;\n\n    return S_OK;\n}\n\nstatic HRESULT add_impl_type(msft_typeinfo_t *typeinfo, type_t *ref, importinfo_t *importinfo)\n{\n    if(importinfo) {\n        alloc_importinfo(typeinfo->typelib, importinfo);\n        typeinfo->typeinfo->datatype1 = importinfo->offset+1;\n    }else {\n        if(ref->typelib_idx == -1)\n            add_interface_typeinfo(typeinfo->typelib, ref);\n        if(ref->typelib_idx == -1)\n            error(\"add_impl_type: unable to add inherited interface\\n\");\n\n        typeinfo->typeinfo->datatype1 = typeinfo->typelib->typelib_typeinfo_offsets[ref->typelib_idx];\n    }\n\n    typeinfo->typeinfo->cImplTypes++;\n    return S_OK;\n}\n\nstatic msft_typeinfo_t *create_msft_typeinfo(msft_typelib_t *typelib, enum type_kind kind,\n                                             const char *name, const attr_list_t *attrs)\n{\n    const attr_t *attr;\n    msft_typeinfo_t *msft_typeinfo;\n    int nameoffset;\n    int typeinfo_offset;\n    MSFT_TypeInfoBase *typeinfo;\n    MSFT_GuidEntry guidentry;\n\n    chat(\"create_msft_typeinfo: name %s kind %d index %d\\n\", name, kind, typelib->typelib_header.nrtypeinfos);\n\n    msft_typeinfo = xmalloc(sizeof(*msft_typeinfo));\n    memset( msft_typeinfo, 0, sizeof(*msft_typeinfo) );\n\n    msft_typeinfo->typelib = typelib;\n\n    nameoffset = ctl2_alloc_name(typelib, name);\n    typeinfo_offset = ctl2_alloc_typeinfo(typelib, nameoffset);\n    typeinfo = (MSFT_TypeInfoBase *)&typelib->typelib_segment_data[MSFT_SEG_TYPEINFO][typeinfo_offset];\n\n    typelib->typelib_segment_data[MSFT_SEG_NAME][nameoffset + 9] = 0x38;\n    *((int *)&typelib->typelib_segment_data[MSFT_SEG_NAME][nameoffset]) = typeinfo_offset;\n\n    msft_typeinfo->typekind = kind;\n    msft_typeinfo->typeinfo = typeinfo;\n\n    typeinfo->typekind |= kind | 0x20;\n\n    if(kind == TKIND_COCLASS)\n        typeinfo->flags |= 0x2; /* TYPEFLAG_FCANCREATE */\n\n    if (attrs) LIST_FOR_EACH_ENTRY( attr, attrs, const attr_t, entry ) {\n        switch(attr->type) {\n        case ATTR_AGGREGATABLE:\n            if (kind == TKIND_COCLASS)\n                typeinfo->flags |= 0x400; /* TYPEFLAG_FAGGREGATABLE */\n            break;\n\n        case ATTR_APPOBJECT:\n            if (kind == TKIND_COCLASS)\n                typeinfo->flags |= 0x1; /* TYPEFLAG_FAPPOBJECT */\n            break;\n\n        case ATTR_CONTROL:\n            if (kind == TKIND_COCLASS)\n                typeinfo->flags |= 0x20; /* TYPEFLAG_FCONTROL */\n            break;\n\n        case ATTR_DLLNAME:\n          {\n            int offset = ctl2_alloc_string(typelib, attr->u.pval);\n            typeinfo->datatype1 = offset;\n            break;\n          }\n\n        case ATTR_DUAL:\n            /* FIXME: check interface is compatible */\n            typeinfo->typekind = (typeinfo->typekind & ~0xff) | 0x34;\n            typeinfo->flags |= 0x140; /* TYPEFLAG_FDUAL | TYPEFLAG_FOLEAUTOMATION */\n            break;\n\n        case ATTR_HELPCONTEXT:\n          {\n            expr_t *expr = (expr_t*)attr->u.pval;\n            typeinfo->helpcontext = expr->cval;\n            break;\n          }\n        case ATTR_HELPSTRING:\n          {\n            int offset = ctl2_alloc_string(typelib, attr->u.pval);\n            if (offset == -1) break;\n            typeinfo->docstringoffs = offset;\n            break;\n          }\n        case ATTR_HELPSTRINGCONTEXT:\n          {\n            expr_t *expr = (expr_t*)attr->u.pval;\n            typeinfo->helpstringcontext = expr->cval;\n            break;\n          }\n        case ATTR_HIDDEN:\n            typeinfo->flags |= 0x10; /* TYPEFLAG_FHIDDEN */\n            break;\n\n        case ATTR_LICENSED:\n            typeinfo->flags |= 0x04; /* TYPEFLAG_FLICENSED */\n            break;\n\n        case ATTR_NONCREATABLE:\n            typeinfo->flags &= ~0x2; /* TYPEFLAG_FCANCREATE */\n            break;\n\n        case ATTR_NONEXTENSIBLE:\n            typeinfo->flags |= 0x80; /* TYPEFLAG_FNONEXTENSIBLE */\n            break;\n\n        case ATTR_OLEAUTOMATION:\n            typeinfo->flags |= 0x100; /* TYPEFLAG_FOLEAUTOMATION */\n            break;\n\n        /* FIXME: TYPEFLAG_FPREDCLID */\n\n        case ATTR_PROXY:\n            typeinfo->flags |= 0x4000; /* TYPEFLAG_FPROXY */\n            break;\n\n        /* FIXME: TYPEFLAG_FREPLACEABLE */\n\n        case ATTR_RESTRICTED:\n            typeinfo->flags |= 0x200; /* TYPEFLAG_FRESTRICTED */\n            break;\n\n        case ATTR_UUID:\n            guidentry.guid = *(GUID*)attr->u.pval;\n            guidentry.hreftype = typelib->typelib_typeinfo_offsets[typeinfo->typekind >> 16];\n            guidentry.next_hash = -1;\n            typeinfo->posguid = ctl2_alloc_guid(typelib, &guidentry);\n#if 0\n            if (IsEqualIID(guid, &IID_IDispatch)) {\n                typelib->typelib_header.dispatchpos = typelib->typelib_typeinfo_offsets[typeinfo->typekind >> 16];\n            }\n#endif\n            break;\n\n        case ATTR_VERSION:\n            typeinfo->version = attr->u.ival;\n            break;\n\n        default:\n            break;\n        }\n    }\n\n    if (typelib->last_typeinfo) typelib->last_typeinfo->next_typeinfo = msft_typeinfo;\n    typelib->last_typeinfo = msft_typeinfo;\n    if (!typelib->typeinfos) typelib->typeinfos = msft_typeinfo;\n\n\n    return msft_typeinfo;\n}\n\nstatic void add_dispatch(msft_typelib_t *typelib)\n{\n    int guid_offset, impfile_offset, hash_key;\n    MSFT_GuidEntry guidentry;\n    MSFT_ImpInfo impinfo;\n    GUID stdole =        {0x00020430,0x0000,0x0000,{0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}};\n    GUID iid_idispatch = {0x00020400,0x0000,0x0000,{0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}};\n\n    if(typelib->typelib_header.dispatchpos != -1) return;\n\n    guidentry.guid = stdole;\n    guidentry.hreftype = 2;\n    guidentry.next_hash = -1;\n    hash_key = ctl2_hash_guid(&guidentry.guid);\n    guid_offset = ctl2_find_guid(typelib, hash_key, &guidentry.guid);\n    if (guid_offset == -1)\n        guid_offset = ctl2_alloc_guid(typelib, &guidentry);\n    impfile_offset = alloc_importfile(typelib, guid_offset, 2, 0, \"stdole2.tlb\");\n\n    guidentry.guid = iid_idispatch;\n    guidentry.hreftype = 1;\n    guidentry.next_hash = -1;\n    impinfo.flags = TKIND_INTERFACE << 24 | MSFT_IMPINFO_OFFSET_IS_GUID;\n    impinfo.oImpFile = impfile_offset;\n    hash_key = ctl2_hash_guid(&guidentry.guid);\n    guid_offset = ctl2_find_guid(typelib, hash_key, &guidentry.guid);\n    if (guid_offset == -1)\n        guid_offset = ctl2_alloc_guid(typelib, &guidentry);\n    impinfo.oGuid = guid_offset;\n    typelib->typelib_header.dispatchpos = alloc_msft_importinfo(typelib, &impinfo) | 0x01;\n}\n\nstatic void add_dispinterface_typeinfo(msft_typelib_t *typelib, type_t *dispinterface)\n{\n    int num_parents = 0, num_funcs = 0;\n    importinfo_t *importinfo = NULL;\n    const statement_t *stmt_func;\n    type_t *inherit, *ref;\n    int idx = 0;\n    var_t *func;\n    var_t *var;\n    msft_typeinfo_t *msft_typeinfo;\n\n    if (-1 < dispinterface->typelib_idx)\n        return;\n\n    inherit = type_dispiface_get_inherit(dispinterface);\n\n    if (inherit)\n    {\n        importinfo = find_importinfo(typelib, inherit->name);\n\n        if (!importinfo && type_iface_get_inherit(inherit) && inherit->typelib_idx == -1)\n            add_interface_typeinfo(typelib, inherit);\n    }\n\n    /* check typelib_idx again, it could have been added while resolving the parent interface */\n    if (-1 < dispinterface->typelib_idx)\n        return;\n\n    dispinterface->typelib_idx = typelib->typelib_header.nrtypeinfos;\n    msft_typeinfo = create_msft_typeinfo(typelib, TKIND_DISPATCH, dispinterface->name,\n                                         dispinterface->attrs);\n\n    msft_typeinfo->typeinfo->size = pointer_size;\n    msft_typeinfo->typeinfo->typekind |= pointer_size << 11 | pointer_size << 6;\n\n    msft_typeinfo->typeinfo->flags |= 0x1000; /* TYPEFLAG_FDISPATCHABLE */\n    add_dispatch(typelib);\n\n    if (inherit)\n    {\n        add_impl_type(msft_typeinfo, inherit, importinfo);\n        msft_typeinfo->typeinfo->typekind |= 0x10;\n    }\n\n    /* count the number of inherited interfaces and non-local functions */\n    for (ref = inherit; ref; ref = type_iface_get_inherit(ref))\n    {\n        num_parents++;\n        STATEMENTS_FOR_EACH_FUNC( stmt_func, type_iface_get_stmts(ref) )\n        {\n            var_t *func = stmt_func->u.var;\n            if (!is_local(func->attrs)) num_funcs++;\n        }\n    }\n    msft_typeinfo->typeinfo->datatype2 = num_funcs << 16 | num_parents;\n    msft_typeinfo->typeinfo->cbSizeVft = num_funcs * pointer_size;\n\n    msft_typeinfo->typeinfo->cImplTypes = 1;    /* IDispatch */\n\n    /* count the no of methods, as the variable indices come after the funcs */\n    if (dispinterface->details.iface->disp_methods)\n        LIST_FOR_EACH_ENTRY( func, dispinterface->details.iface->disp_methods, var_t, entry )\n            idx++;\n\n    if (type_dispiface_get_props(dispinterface))\n        LIST_FOR_EACH_ENTRY( var, type_dispiface_get_props(dispinterface), var_t, entry )\n            add_var_desc(msft_typeinfo, idx++, var);\n\n    if (type_dispiface_get_methods(dispinterface))\n    {\n        idx = 0;\n        LIST_FOR_EACH_ENTRY( func, type_dispiface_get_methods(dispinterface), var_t, entry )\n            if(add_func_desc(msft_typeinfo, func, idx) == S_OK)\n                idx++;\n    }\n}\n\nstatic void add_interface_typeinfo(msft_typelib_t *typelib, type_t *interface)\n{\n    int idx = 0;\n    const statement_t *stmt_func;\n    type_t *ref;\n    msft_typeinfo_t *msft_typeinfo;\n    importinfo_t *ref_importinfo = NULL;\n    int num_parents = 0, num_funcs = 0;\n    type_t *inherit;\n    const type_t *derived;\n\n    if (-1 < interface->typelib_idx)\n        return;\n\n    if (!interface->details.iface)\n    {\n        error( \"interface %s is referenced but not defined\\n\", interface->name );\n        return;\n    }\n\n    if (is_attr(interface->attrs, ATTR_DISPINTERFACE)) {\n        add_dispinterface_typeinfo(typelib, interface);\n        return;\n    }\n\n    /* midl adds the parent interface first, unless the parent itself\n       has no parent (i.e. it stops before IUnknown). */\n\n    inherit = type_iface_get_inherit(interface);\n\n    if(inherit) {\n        ref_importinfo = find_importinfo(typelib, inherit->name);\n\n        if(!ref_importinfo && type_iface_get_inherit(inherit) &&\n           inherit->typelib_idx == -1)\n            add_interface_typeinfo(typelib, inherit);\n    }\n\n    /* check typelib_idx again, it could have been added while resolving the parent interface */\n    if (-1 < interface->typelib_idx)\n        return;\n\n    interface->typelib_idx = typelib->typelib_header.nrtypeinfos;\n    msft_typeinfo = create_msft_typeinfo(typelib, TKIND_INTERFACE, interface->name, interface->attrs);\n    msft_typeinfo->typeinfo->size = pointer_size;\n    msft_typeinfo->typeinfo->typekind |= 0x0200;\n    msft_typeinfo->typeinfo->typekind |= pointer_size << 11;\n\n    for (derived = inherit; derived; derived = type_iface_get_inherit(derived))\n        if (derived->name && !strcmp(derived->name, \"IDispatch\"))\n            msft_typeinfo->typeinfo->flags |= 0x1000; /* TYPEFLAG_FDISPATCHABLE */\n\n    if(type_iface_get_inherit(interface))\n        add_impl_type(msft_typeinfo, type_iface_get_inherit(interface),\n                      ref_importinfo);\n\n    /* count the number of inherited interfaces and non-local functions */\n    for(ref = inherit; ref; ref = type_iface_get_inherit(ref)) {\n        num_parents++;\n        STATEMENTS_FOR_EACH_FUNC( stmt_func, type_iface_get_stmts(ref) ) {\n            var_t *func = stmt_func->u.var;\n            if (!is_local(func->attrs)) num_funcs++;\n        }\n    }\n    msft_typeinfo->typeinfo->datatype2 = num_funcs << 16 | num_parents;\n    msft_typeinfo->typeinfo->cbSizeVft = num_funcs * pointer_size;\n\n    STATEMENTS_FOR_EACH_FUNC( stmt_func, type_iface_get_stmts(interface) ) {\n        var_t *func = stmt_func->u.var;\n        if(add_func_desc(msft_typeinfo, func, idx) == S_OK)\n            idx++;\n    }\n}\n\nstatic void add_structure_typeinfo(msft_typelib_t *typelib, type_t *structure)\n{\n    int idx = 0;\n    var_t *cur;\n    msft_typeinfo_t *msft_typeinfo;\n\n    if (-1 < structure->typelib_idx)\n        return;\n\n    structure->typelib_idx = typelib->typelib_header.nrtypeinfos;\n    msft_typeinfo = create_msft_typeinfo(typelib, TKIND_RECORD, structure->name, structure->attrs);\n    msft_typeinfo->typeinfo->size = 0;\n\n    if (type_struct_get_fields(structure))\n        LIST_FOR_EACH_ENTRY( cur, type_struct_get_fields(structure), var_t, entry )\n            add_var_desc(msft_typeinfo, idx++, cur);\n}\n\nstatic void add_enum_typeinfo(msft_typelib_t *typelib, type_t *enumeration)\n{\n    int idx = 0;\n    var_t *cur;\n    msft_typeinfo_t *msft_typeinfo;\n\n    if (-1 < enumeration->typelib_idx)\n        return;\n\n    enumeration->typelib_idx = typelib->typelib_header.nrtypeinfos;\n    msft_typeinfo = create_msft_typeinfo(typelib, TKIND_ENUM, enumeration->name, enumeration->attrs);\n    msft_typeinfo->typeinfo->size = 0;\n\n    if (type_enum_get_values(enumeration))\n        LIST_FOR_EACH_ENTRY( cur, type_enum_get_values(enumeration), var_t, entry )\n            add_var_desc(msft_typeinfo, idx++, cur);\n}\n\nstatic void add_union_typeinfo(msft_typelib_t *typelib, type_t *tunion)\n{\n    int idx = 0;\n    var_t *cur;\n    msft_typeinfo_t *msft_typeinfo;\n\n    if (-1 < tunion->typelib_idx)\n        return;\n\n    tunion->typelib_idx = typelib->typelib_header.nrtypeinfos;\n    msft_typeinfo = create_msft_typeinfo(typelib, TKIND_UNION, tunion->name, tunion->attrs);\n    msft_typeinfo->typeinfo->size = 0;\n\n    if (type_union_get_cases(tunion))\n        LIST_FOR_EACH_ENTRY(cur, type_union_get_cases(tunion), var_t, entry)\n            add_var_desc(msft_typeinfo, idx++, cur);\n}\n\nstatic void add_typedef_typeinfo(msft_typelib_t *typelib, type_t *tdef)\n{\n    msft_typeinfo_t *msft_typeinfo = NULL;\n    int datatype1, datatype2, duplicate = 0;\n    unsigned int size, alignment = 0;\n    type_t *type;\n\n    if (-1 < tdef->typelib_idx)\n        return;\n\n    type = type_alias_get_aliasee(tdef);\n\n    if (!type->name || strcmp(tdef->name, type->name) != 0)\n    {\n        tdef->typelib_idx = typelib->typelib_header.nrtypeinfos;\n        msft_typeinfo = create_msft_typeinfo(typelib, TKIND_ALIAS, tdef->name, tdef->attrs);\n    }\n    else\n        duplicate = 1;\n\n    encode_type(typelib, get_type_vt(type), type, &datatype1, &datatype2);\n    size = type_memsize_and_alignment(type, &alignment);\n\n    if (msft_typeinfo)\n    {\n        msft_typeinfo->typeinfo->datatype1 = datatype1;\n        msft_typeinfo->typeinfo->size = size;\n        msft_typeinfo->typeinfo->datatype2 = datatype2;\n        msft_typeinfo->typeinfo->typekind |= (alignment << 11 | alignment << 6);\n    }\n\n    /* avoid adding duplicate type definitions */\n    if (duplicate)\n        tdef->typelib_idx = type->typelib_idx;\n}\n\nstatic void add_coclass_typeinfo(msft_typelib_t *typelib, type_t *cls)\n{\n    msft_typeinfo_t *msft_typeinfo;\n    ifref_t *iref;\n    int num_ifaces = 0, offset, i;\n    MSFT_RefRecord *ref, *first = NULL, *first_source = NULL;\n    int have_default = 0, have_default_source = 0;\n    const attr_t *attr;\n    ifref_list_t *ifaces;\n\n    if (-1 < cls->typelib_idx)\n        return;\n\n    cls->typelib_idx = typelib->typelib_header.nrtypeinfos;\n    msft_typeinfo = create_msft_typeinfo(typelib, TKIND_COCLASS, cls->name, cls->attrs);\n\n    ifaces = type_coclass_get_ifaces(cls);\n    if (ifaces) LIST_FOR_EACH_ENTRY( iref, ifaces, ifref_t, entry ) num_ifaces++;\n\n    offset = msft_typeinfo->typeinfo->datatype1 = ctl2_alloc_segment(typelib, MSFT_SEG_REFERENCES,\n                                                                     num_ifaces * sizeof(*ref), 0);\n\n    i = 0;\n    if (ifaces) LIST_FOR_EACH_ENTRY( iref, ifaces, ifref_t, entry ) {\n        if(iref->iface->typelib_idx == -1)\n            add_interface_typeinfo(typelib, iref->iface);\n        ref = (MSFT_RefRecord*) (typelib->typelib_segment_data[MSFT_SEG_REFERENCES] + offset + i * sizeof(*ref));\n        ref->reftype = typelib->typelib_typeinfo_offsets[iref->iface->typelib_idx];\n        ref->flags = 0;\n        ref->oCustData = -1;\n        ref->onext = -1;\n        if(i < num_ifaces - 1)\n            ref->onext = offset + (i + 1) * sizeof(*ref);\n\n        if (iref->attrs) LIST_FOR_EACH_ENTRY( attr, iref->attrs, const attr_t, entry ) {\n            switch(attr->type) {\n            case ATTR_DEFAULT:\n                ref->flags |= 0x1; /* IMPLTYPEFLAG_FDEFAULT */\n                break;\n            case ATTR_DEFAULTVTABLE:\n                ref->flags |= 0x8; /* IMPLTYPEFLAG_FDEFAULTVTABLE */\n                break;\n            case ATTR_RESTRICTED:\n                ref->flags |= 0x4; /* IMPLTYPEFLAG_FRESTRICTED */\n                break;\n            case ATTR_SOURCE:\n                ref->flags |= 0x2; /* IMPLTYPEFLAG_FSOURCE */\n                break;\n            default:\n                warning(\"add_coclass_typeinfo: unhandled attr %d\\n\", attr->type);\n            }\n        }\n        if(ref->flags & 0x1) { /* IMPLTYPEFLAG_FDEFAULT */\n            if(ref->flags & 0x2) /* IMPLTYPEFLAG_SOURCE */\n                have_default_source = 1;\n            else\n                have_default = 1;\n        }\n\n        /* If the interface is non-restricted and we haven't already had one then\n           remember it so that we can use it as a default later */\n        if((ref->flags & 0x4) == 0) { /* IMPLTYPEFLAG_FRESTRICTED */\n            if(ref->flags & 0x2) { /* IMPLTYPEFLAG_FSOURCE */\n                if(!first_source)\n                    first_source = ref;\n            }\n            else if(!first)\n                first = ref;\n        }\n        i++;\n    }\n\n    /* If we haven't had a default interface, then set the default flags on the\n       first ones */\n    if(!have_default && first)\n        first->flags |= 0x1;\n    if(!have_default_source && first_source)\n        first_source->flags |= 0x1;\n\n    msft_typeinfo->typeinfo->cImplTypes = num_ifaces;\n    msft_typeinfo->typeinfo->size = pointer_size;\n    msft_typeinfo->typeinfo->typekind |= 0x2200;\n}\n\nstatic void add_module_typeinfo(msft_typelib_t *typelib, type_t *module)\n{\n    int idx = 0;\n    const statement_t *stmt;\n    msft_typeinfo_t *msft_typeinfo;\n\n    if (-1 < module->typelib_idx)\n        return;\n\n    module->typelib_idx = typelib->typelib_header.nrtypeinfos;\n    msft_typeinfo = create_msft_typeinfo(typelib, TKIND_MODULE, module->name, module->attrs);\n    msft_typeinfo->typeinfo->typekind |= 0x0a00;\n\n    STATEMENTS_FOR_EACH_FUNC( stmt, module->details.module->stmts ) {\n        var_t *func = stmt->u.var;\n        if(add_func_desc(msft_typeinfo, func, idx) == S_OK)\n            idx++;\n    }\n\n    msft_typeinfo->typeinfo->size = idx;\n}\n\nstatic void add_type_typeinfo(msft_typelib_t *typelib, type_t *type)\n{\n    switch (type_get_type(type)) {\n    case TYPE_INTERFACE:\n        add_interface_typeinfo(typelib, type);\n        break;\n    case TYPE_STRUCT:\n        add_structure_typeinfo(typelib, type);\n        break;\n    case TYPE_ENUM:\n        add_enum_typeinfo(typelib, type);\n        break;\n    case TYPE_UNION:\n        add_union_typeinfo(typelib, type);\n        break;\n    case TYPE_COCLASS:\n        add_coclass_typeinfo(typelib, type);\n        break;\n    case TYPE_BASIC:\n    case TYPE_POINTER:\n        break;\n    default:\n        error(\"add_entry: unhandled type 0x%x for %s\\n\",\n              type_get_type(type), type->name);\n        break;\n    }\n}\n\nstatic void add_entry(msft_typelib_t *typelib, const statement_t *stmt)\n{\n    switch(stmt->type) {\n    case STMT_LIBRARY:\n    case STMT_IMPORT:\n    case STMT_PRAGMA:\n    case STMT_CPPQUOTE:\n    case STMT_DECLARATION:\n        /* not included in typelib */\n        break;\n    case STMT_IMPORTLIB:\n        /* not processed here */\n        break;\n    case STMT_TYPEDEF:\n    {\n        const type_list_t *type_entry = stmt->u.type_list;\n        for (; type_entry; type_entry = type_entry->next) {\n            /* if the type is public then add the typedef, otherwise attempt\n             * to add the aliased type */\n            if (is_attr(type_entry->type->attrs, ATTR_PUBLIC))\n                add_typedef_typeinfo(typelib, type_entry->type);\n            else\n                add_type_typeinfo(typelib, type_alias_get_aliasee(type_entry->type));\n        }\n        break;\n    }\n    case STMT_MODULE:\n        add_module_typeinfo(typelib, stmt->u.type);\n        break;\n    case STMT_TYPE:\n    case STMT_TYPEREF:\n    {\n        type_t *type = stmt->u.type;\n        add_type_typeinfo(typelib, type);\n        break;\n    }\n    }\n}\n\nstatic void set_name(msft_typelib_t *typelib)\n{\n    int offset;\n\n    offset = ctl2_alloc_name(typelib, typelib->typelib->name);\n    if (offset == -1) return;\n    typelib->typelib_header.NameOffset = offset;\n    return;\n}\n\nstatic void set_version(msft_typelib_t *typelib)\n{\n    typelib->typelib_header.version = get_attrv( typelib->typelib->attrs, ATTR_VERSION );\n}\n\nstatic void set_guid(msft_typelib_t *typelib)\n{\n    MSFT_GuidEntry guidentry;\n    int offset;\n    void *ptr;\n    GUID guid = {0,0,0,{0,0,0,0,0,0}};\n\n    guidentry.guid = guid;\n    guidentry.hreftype = -2;\n    guidentry.next_hash = -1;\n\n    ptr = get_attrp( typelib->typelib->attrs, ATTR_UUID );\n    if (ptr) guidentry.guid = *(GUID *)ptr;\n\n    offset = ctl2_alloc_guid(typelib, &guidentry);\n    typelib->typelib_header.posguid = offset;\n\n    return;\n}\n\nstatic void set_doc_string(msft_typelib_t *typelib)\n{\n    char *str = get_attrp( typelib->typelib->attrs, ATTR_HELPSTRING );\n\n    if (str)\n    {\n        int offset = ctl2_alloc_string(typelib, str);\n        if (offset != -1) typelib->typelib_header.helpstring = offset;\n    }\n}\n\nstatic void set_help_file_name(msft_typelib_t *typelib)\n{\n    char *str = get_attrp( typelib->typelib->attrs, ATTR_HELPFILE );\n\n    if (str)\n    {\n        int offset = ctl2_alloc_string(typelib, str);\n        if (offset != -1)\n        {\n            typelib->typelib_header.helpfile = offset;\n            typelib->typelib_header.varflags |= 0x10;\n        }\n    }\n}\n\nstatic void set_help_context(msft_typelib_t *typelib)\n{\n    const expr_t *expr = get_attrp( typelib->typelib->attrs, ATTR_HELPCONTEXT );\n    if (expr) typelib->typelib_header.helpcontext = expr->cval;\n}\n\nstatic void set_help_string_dll(msft_typelib_t *typelib)\n{\n    char *str = get_attrp( typelib->typelib->attrs, ATTR_HELPSTRINGDLL );\n\n    if (str)\n    {\n        int offset = ctl2_alloc_string(typelib, str);\n        if (offset != -1)\n        {\n            typelib->help_string_dll_offset = offset;\n            typelib->typelib_header.varflags |= 0x100;\n        }\n    }\n}\n\nstatic void set_help_string_context(msft_typelib_t *typelib)\n{\n    const expr_t *expr = get_attrp( typelib->typelib->attrs, ATTR_HELPSTRINGCONTEXT );\n    if (expr) typelib->typelib_header.helpstringcontext = expr->cval;\n}\n\nstatic void set_lcid(msft_typelib_t *typelib)\n{\n    const expr_t *lcid_expr = get_attrp( typelib->typelib->attrs, ATTR_LIBLCID );\n    if(lcid_expr)\n    {\n        typelib->typelib_header.lcid  = lcid_expr->cval;\n        typelib->typelib_header.lcid2 = lcid_expr->cval;\n    }\n}\n\nstatic void set_lib_flags(msft_typelib_t *typelib)\n{\n    const attr_t *attr;\n\n    typelib->typelib_header.flags = 0;\n    if (!typelib->typelib->attrs) return;\n    LIST_FOR_EACH_ENTRY( attr, typelib->typelib->attrs, const attr_t, entry )\n    {\n        switch(attr->type) {\n        case ATTR_CONTROL:\n            typelib->typelib_header.flags |= 0x02; /* LIBFLAG_FCONTROL */\n            break;\n        case ATTR_HIDDEN:\n            typelib->typelib_header.flags |= 0x04; /* LIBFLAG_FHIDDEN */\n            break;\n        case ATTR_RESTRICTED:\n            typelib->typelib_header.flags |= 0x01; /* LIBFLAG_FRESTRICTED */\n            break;\n        default:\n            break;\n        }\n    }\n    return;\n}\n\nstatic void ctl2_write_segment(msft_typelib_t *typelib, int segment)\n{\n    put_data(typelib->typelib_segment_data[segment], typelib->typelib_segdir[segment].length);\n}\n\nstatic void ctl2_finalize_typeinfos(msft_typelib_t *typelib, int filesize)\n{\n    msft_typeinfo_t *typeinfo;\n\n    for (typeinfo = typelib->typeinfos; typeinfo; typeinfo = typeinfo->next_typeinfo) {\n\ttypeinfo->typeinfo->memoffset = filesize;\n\tif (typeinfo->func_data)\n\t    filesize += typeinfo->func_data[0] + ((typeinfo->typeinfo->cElement & 0xffff) * 12);\n\tif (typeinfo->var_data)\n\t    filesize += typeinfo->var_data[0] + (((typeinfo->typeinfo->cElement >> 16) & 0xffff) * 12);\n        if (typeinfo->func_data || typeinfo->var_data)\n            filesize += 4;\n    }\n}\n\nstatic int ctl2_finalize_segment(msft_typelib_t *typelib, int filepos, int segment)\n{\n    if (typelib->typelib_segdir[segment].length) {\n\ttypelib->typelib_segdir[segment].offset = filepos;\n    } else {\n\ttypelib->typelib_segdir[segment].offset = -1;\n    }\n\n    return typelib->typelib_segdir[segment].length;\n}\n\n\nstatic void ctl2_write_typeinfos(msft_typelib_t *typelib)\n{\n    msft_typeinfo_t *typeinfo;\n    int typedata_size;\n\n    for (typeinfo = typelib->typeinfos; typeinfo; typeinfo = typeinfo->next_typeinfo) {\n        if (!typeinfo->func_data && !typeinfo->var_data) continue;\n        typedata_size = 0;\n\tif (typeinfo->func_data)\n            typedata_size = typeinfo->func_data[0];\n\tif (typeinfo->var_data)\n            typedata_size += typeinfo->var_data[0];\n\tput_data(&typedata_size, sizeof(int));\n        if (typeinfo->func_data)\n            put_data(typeinfo->func_data + 1, typeinfo->func_data[0]);\n        if (typeinfo->var_data)\n            put_data(typeinfo->var_data + 1, typeinfo->var_data[0]);\n        if (typeinfo->func_indices)\n            put_data(typeinfo->func_indices, (typeinfo->typeinfo->cElement & 0xffff) * 4);\n        if (typeinfo->var_indices)\n            put_data(typeinfo->var_indices, (typeinfo->typeinfo->cElement >> 16) * 4);\n        if (typeinfo->func_names)\n            put_data(typeinfo->func_names,   (typeinfo->typeinfo->cElement & 0xffff) * 4);\n        if (typeinfo->var_names)\n            put_data(typeinfo->var_names,   (typeinfo->typeinfo->cElement >> 16) * 4);\n        if (typeinfo->func_offsets)\n            put_data(typeinfo->func_offsets, (typeinfo->typeinfo->cElement & 0xffff) * 4);\n        if (typeinfo->var_offsets) {\n            int add = 0, i, offset;\n            if(typeinfo->func_data)\n                add = typeinfo->func_data[0];\n            for(i = 0; i < (typeinfo->typeinfo->cElement >> 16); i++) {\n                offset = typeinfo->var_offsets[i];\n                offset += add;\n                put_data(&offset, 4);\n            }\n        }\n    }\n}\n\nstatic void save_all_changes(msft_typelib_t *typelib)\n{\n    int filepos;\n\n    chat(\"save_all_changes(%p)\\n\", typelib);\n\n    filepos = sizeof(MSFT_Header) + sizeof(MSFT_SegDir);\n    if(typelib->typelib_header.varflags & 0x100) filepos += 4; /* helpstringdll */\n    filepos += typelib->typelib_header.nrtypeinfos * 4;\n\n    filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_TYPEINFO);\n    filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_GUIDHASH);\n    filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_GUID);\n    filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_REFERENCES);\n    filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_IMPORTINFO);\n    filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_IMPORTFILES);\n    filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_NAMEHASH);\n    filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_NAME);\n    filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_STRING);\n    filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_TYPEDESC);\n    filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_ARRAYDESC);\n    filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_CUSTDATA);\n    filepos += ctl2_finalize_segment(typelib, filepos, MSFT_SEG_CUSTDATAGUID);\n\n    ctl2_finalize_typeinfos(typelib, filepos);\n\n    byte_swapped = 0;\n    init_output_buffer();\n\n    put_data(&typelib->typelib_header, sizeof(typelib->typelib_header));\n    if(typelib->typelib_header.varflags & 0x100)\n        put_data(&typelib->help_string_dll_offset, sizeof(typelib->help_string_dll_offset));\n\n    put_data(typelib->typelib_typeinfo_offsets, typelib->typelib_header.nrtypeinfos * 4);\n    put_data(&typelib->typelib_segdir, sizeof(typelib->typelib_segdir));\n    ctl2_write_segment( typelib, MSFT_SEG_TYPEINFO );\n    ctl2_write_segment( typelib, MSFT_SEG_GUIDHASH );\n    ctl2_write_segment( typelib, MSFT_SEG_GUID );\n    ctl2_write_segment( typelib, MSFT_SEG_REFERENCES );\n    ctl2_write_segment( typelib, MSFT_SEG_IMPORTINFO );\n    ctl2_write_segment( typelib, MSFT_SEG_IMPORTFILES );\n    ctl2_write_segment( typelib, MSFT_SEG_NAMEHASH );\n    ctl2_write_segment( typelib, MSFT_SEG_NAME );\n    ctl2_write_segment( typelib, MSFT_SEG_STRING );\n    ctl2_write_segment( typelib, MSFT_SEG_TYPEDESC );\n    ctl2_write_segment( typelib, MSFT_SEG_ARRAYDESC );\n    ctl2_write_segment( typelib, MSFT_SEG_CUSTDATA );\n    ctl2_write_segment( typelib, MSFT_SEG_CUSTDATAGUID );\n\n    ctl2_write_typeinfos(typelib);\n\n    if (strendswith( typelib_name, \".res\" ))  /* create a binary resource file */\n    {\n        char typelib_id[13] = \"#1\";\n\n        expr_t *expr = get_attrp( typelib->typelib->attrs, ATTR_ID );\n        if (expr)\n            sprintf( typelib_id, \"#%d\", expr->cval );\n        add_output_to_resources( \"TYPELIB\", typelib_id );\n        output_typelib_regscript( typelib->typelib );\n        flush_output_resources( typelib_name );\n    }\n    else flush_output_buffer( typelib_name );\n}\n\nint create_msft_typelib(typelib_t *typelib)\n{\n    msft_typelib_t *msft;\n    int failed = 0;\n    const statement_t *stmt;\n    time_t cur_time;\n    char *time_override;\n    unsigned int version = 7 << 24 | 555; /* 7.00.0555 */\n    GUID midl_time_guid    = {0xde77ba63,0x517c,0x11d1,{0xa2,0xda,0x00,0x00,0xf8,0x77,0x3c,0xe9}};\n    GUID midl_version_guid = {0xde77ba64,0x517c,0x11d1,{0xa2,0xda,0x00,0x00,0xf8,0x77,0x3c,0xe9}};\n    GUID midl_info_guid = {0xde77ba65,0x517c,0x11d1,{0xa2,0xda,0x00,0x00,0xf8,0x77,0x3c,0xe9}};\n    char info_string[128];\n\n    pointer_size = (typelib_kind == SYS_WIN64) ? 8 : 4;\n\n    msft = xmalloc(sizeof(*msft));\n    memset(msft, 0, sizeof(*msft));\n    msft->typelib = typelib;\n\n    ctl2_init_header(msft);\n    ctl2_init_segdir(msft);\n\n    msft->typelib_header.varflags |= typelib_kind;\n\n    /*\n     * The following two calls return an offset or -1 if out of memory. We\n     * specifically need an offset of 0, however, so...\n     */\n    if (ctl2_alloc_segment(msft, MSFT_SEG_GUIDHASH, 0x80, 0x80)) { failed = 1; }\n    if (ctl2_alloc_segment(msft, MSFT_SEG_NAMEHASH, 0x200, 0x200)) { failed = 1; }\n\n    if(failed)\n    {\n        free(msft);\n        return 0;\n    }\n\n    msft->typelib_guidhash_segment = (int *)msft->typelib_segment_data[MSFT_SEG_GUIDHASH];\n    msft->typelib_namehash_segment = (int *)msft->typelib_segment_data[MSFT_SEG_NAMEHASH];\n\n    memset(msft->typelib_guidhash_segment, 0xff, 0x80);\n    memset(msft->typelib_namehash_segment, 0xff, 0x200);\n\n    set_lib_flags(msft);\n    set_lcid(msft);\n    set_help_file_name(msft);\n    set_doc_string(msft);\n    set_guid(msft);\n    set_version(msft);\n    set_name(msft);\n    set_help_context(msft);\n    set_help_string_dll(msft);\n    set_help_string_context(msft);\n    \n    /* midl adds two sets of custom data to the library: the current unix time\n       and midl's version number */\n    time_override = getenv( \"WIDL_TIME_OVERRIDE\");\n    cur_time = time_override ? atol( time_override) : time(NULL);\n    sprintf(info_string, \"Created by WIDL version %s at %s\\n\", PACKAGE_VERSION, ctime(&cur_time));\n    set_custdata(msft, &midl_info_guid, VT_BSTR, info_string, &msft->typelib_header.CustomDataOffset);\n    set_custdata(msft, &midl_time_guid, VT_UI4, &cur_time, &msft->typelib_header.CustomDataOffset);\n    set_custdata(msft, &midl_version_guid, VT_UI4, &version, &msft->typelib_header.CustomDataOffset);\n\n    if (typelib->stmts)\n        LIST_FOR_EACH_ENTRY( stmt, typelib->stmts, const statement_t, entry )\n            add_entry(msft, stmt);\n\n    save_all_changes(msft);\n    free(msft);\n    return 1;\n}\n"
  },
  {
    "path": "wifeman/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(wifeman SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/wifeman.def wifeman.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(wifeman.dll16 wifeman)\ntarget_link_libraries(wifeman libwine winecrt0 krnl386)\nset_target_properties(wifeman PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "wifeman/Makefile.in",
    "content": "MODULE    = wifeman.dll16\n\nEXTRADLLFLAGS = -m16\n\n"
  },
  {
    "path": "wifeman/wifeman.c",
    "content": "\n#include \"wine/debug.h\"\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wownt32.h\"\n#include \"wine/winuser16.h\"\nWINE_DEFAULT_DEBUG_CHANNEL(wifeman);\n/*\n End-User-Defined and Private Use Area Characters(O)\n This API seems to work only in Japanese Windows.\n\n Japanese, Simplified Chinese, Korean, Traditional Chinese, (Unicode)\n*/\nWORD WINAPI MiscGetEUDCLeadByteRange16(WORD charaset /* 128: SHIFTJIS_CHARSET? */)\n{\n    /* HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\NLS\\CodePage\\EUDCCodeRange */\n    if (charaset != SHIFTJIS_CHARSET)\n        FIXME(\"MiscGetEUDCLeadByteRange(%d)\\n\", charaset);\n    /*\n       LOBYTE: begin\n       HIBYTE: end\n    */\n    return MAKEWORD(0xF0, 0xF9);\n}\n\nBOOL WINAPI MiscIsDBCSLeadByte16(CHAR c)\n{\n    return IsDBCSLeadByte(c);\n}\n"
  },
  {
    "path": "wifeman/wifeman.def",
    "content": "; File generated automatically from ..\\wifeman\\wifeman.dll16.spec; do not edit!\n\nLIBRARY wifeman.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA \n"
  },
  {
    "path": "wifeman/wifeman.dll16.spec",
    "content": "1 stub FDILOADFONTFILE\n2 stub FDIUNLOADFONTFILE\n3 stub FDIQUERYFACES\n4 stub FDIOPENFONTCONTEXT\n5 stub FDISETFONTCONTEXT\n6 stub FDICLOSEFONTCONTEXT\n7 stub FDIQUERYFACEATTR\n8 stub FDIQUERYCHARATTR\n9 stub FDICONTROL\n10 stub FDICLAIMFONTFILE\n11 stub FDICONVERTFONTFILE\n14 stub MIMADDFONTDRIVER\n15 stub MIMADDFONTPACK\n16 stub MIMREMOVEFONTDRIVER\n17 stub MIMREMOVEFONTPACK\n18 stub MIMENUMFONTDRIVERS\n19 stub MIMENUMFONTPACKS\n20 stub MIMOPENFONTCONTEXT\n21 stub MIMCLOSEFONTCONTEXT\n22 stub MIMGETINFORMATIONS\n23 pascal -ret16 MiscIsDBCSLeadByte(word) MiscIsDBCSLeadByte16\n24 stub MISCSETERROINFO\n25 stub MISCGETERROINFO\n26 stub UBSTRLEN\n27 stub UBSTRCPY\n28 stub UBSTRNCPY\n29 stub UBSTRCAT\n30 stub UBSTRCMP\n31 stub ASCIZTOUZ\n32 stub UZTOASCIZ\n33 stub MISCWARNINGMESSAGE\n34 stub MISCWARNINGMESSAGEWITHARGUMENT\n35 stub FCMCREATECACHEBUFFER\n36 stub FCMDELETECACHEBUFFER\n37 stub FCMREQUESTIMAGES\n38 stub FCMRELEASEIMAGES\n39 stub FCMREQUESTDEFAULTFB\n40 stub FCMRELEASEDEFAULTFB\n41 stub FCMCALCULATETEXTEXTENT\n42 stub FCMCALCULATEOUTPUTPOSITIONS\n43 stub FCMCLEANUP\n44 stub FCMENUMFONTBUFFERS\n45 stub MISCGETVERSION\n46 stub MISCCONVERTFONTFAMILY\n47 stub MISCCONVERTCHARSET\n48 stub MISCIFIMETRICSTOLOGFONT\n49 stub MISCIFIMETRICSTOTEXTMETRICS\n50 stub MISCMAKETEXTXFORM\n51 stub FCMCALCBYTEWIDTH\n52 stub FCMFORCECACHEIN\n53 stub FCMVALIDATEFC\n54 stub FCMUNVALIDATEFC\n55 stub FCMQUERYFACEATTR\n56 stub FCMPROCESSDEVICECONTROL\n57 stub MISCTRANCATESTRING\n58 stub MISCADDHUGEPTR\n59 stub MISCGETSEGMENTINCREMENT\n60 stub MISCISWIFECONTROL\n61 stub MISCISGAIJICONTROL\n62 stub FCMGETEUDCLEADBYTERANGE\n63 stub FCMGETEUDCFB\n64 stub FCMGETCHARWIDTH\n65 stub MISCSTRETCHMONOFONTIMAGE\n66 pascal -ret16 MISCGETEUDCLEADBYTERANGE(word) MiscGetEUDCLeadByteRange16\n67 stub MISCVALIDATEQUICKSEARCHTABLE\n68 stub MISCUNVALIDATEQUICKSEARCHTABLE\n69 stub MISCREGISTERNOTIFYFUNCTION\n70 stub MISCUNREGISTERNOTIFYFUNCTION\n71 stub FCMREQUESTDEFAULTFBEX\n72 stub MISCREALIZEWIFEFONT\n73 stub MISCDELETEWIFEFONT\n74 stub MAPWIFEFONT\n75 stub SETCLOSEOLDESTFCFUNC\n76 stub CACHEDOPENFONTCONTEXT\n77 stub FILLFONTINFO\n78 stub FILLCONTEXTINFO\n79 stub GETEUDCFD\n80 stub GETDEFAULTFONTINFO\n128 stub DIAGLOCALLOCKANYTHING\n129 stub DIAGLOCALUNLOCKANYTHING\n130 stub DIAGGETCONFIRMSTRING\n131 stub DIAGSELFCHECK\n132 stub DIAGSELFCHECKANDWARNING\n150 stub DEBUGASSERTION\n151 stub DELAYEDINIT\n152 stub FirstInit\n"
  },
  {
    "path": "wifeman/wifeman.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>wifeman</RootNamespace>\n    <ProjectGuid>{B76406F9-E89B-4791-ACDE-CD23813F764B}</ProjectGuid>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n%(AdditionalDependencies)</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\nwifeman.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\nwifeman.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"wifeman.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"wifeman.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"wifeman.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" WIFEMAN &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" WIFEMAN &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "win87em/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp)\nadd_library(win87em SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/win87em.def win87em.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(win87em.dll16 WIN87EM)\ntarget_link_libraries(win87em libwine winecrt0 krnl386)\nset_target_properties(win87em PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "win87em/win87em.c",
    "content": "/*\n * Copyright 1993 Bob Amstadt\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdlib.h>\n#include \"windef.h\"\n#include \"wine/windef16.h\"\n#include \"wine/winbase16.h\"\n#include \"wine/debug.h\"\n#include \"wownt32.h\"\n#include \"../krnl386/dosexe.h\"\n/*\n#define __asm__(xxx)\n#define __asm__\n#define __volatile__(xxx)\n*/\nWINE_DEFAULT_DEBUG_CHANNEL(int);\n\n//VM86.DLL\ntypedef void(*fldcw_t)(WORD);\ntypedef void(*fldsw_t)(WORD);\ntypedef void(*wait_t)();\ntypedef void(*fninit_t)();\ntypedef void(*fstcw_t)(WORD*);\ntypedef void(*fstsw_t)(WORD*);\ntypedef void(*frndint_t)();\ntypedef void(*fclex_t)();\ntypedef void(*fsave_t)(char*);\ntypedef void(*frstor_t)(const char*);\ntypedef void(*fstenv32_t)(char*);\ntypedef DWORD(*fistp_t)(WORD);\n\nvoid fldcw_stub(WORD a)\n{\n    FIXME(\"stub\\n\");\n}\nvoid wait_stub()\n{\n    FIXME(\"stub\\n\");\n}\nvoid fninit_stub()\n{\n    FIXME(\"stub\\n\");\n}\nvoid fstcw_stub(WORD* a)\n{\n    FIXME(\"stub\\n\");\n}\nvoid fstsw_stub(WORD* a)\n{\n    FIXME(\"stub\\n\");\n}\nvoid frndint_stub()\n{\n    FIXME(\"stub\\n\");\n}\nvoid fclex_stub()\n{\n    FIXME(\"stub\\n\");\n}\nvoid fsave_stub(char* a)\n{\n    FIXME(\"stub\\n\");\n}\nvoid fstenv32_stub(char* a)\n{\n    FIXME(\"stub\\n\");\n}\nvoid frstor_stub(const char* a)\n{\n    FIXME(\"stub\\n\");\n}\nDWORD fistp_stub(WORD round)\n{\n    FIXME(\"stub\\n\");\n    return 0;\n}\ntypedef struct\n{\n    fldcw_t fldcw;\n    wait_t wait;\n    fninit_t fninit;\n    fstcw_t fstcw;\n    fstsw_t fstsw;\n    frndint_t frndint;\n    fclex_t fclex;\n    fsave_t fsave;\n    frstor_t frstor;\n    fstenv32_t fstenv32;\n    fistp_t fistp;\n} x87function;\nx87function x87;\nstatic INTPROC oldproc = 0;\n\ntypedef void (*load_x87function_t)(x87function *func);\nstatic void WINAPI fpu_exception(CONTEXT *context);\nBOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)\n{\n    if (fdwReason == DLL_PROCESS_DETACH)\n        DOSVM_SetBuiltinVector(2, oldproc);\n    if (fdwReason != DLL_PROCESS_ATTACH)\n        return TRUE;\n    char dllname[MAX_PATH];\n    load_x87function_t load_x87function;\n    krnl386_get_config_string(\"otvdm\", \"vm\", \"vm86.dll\", dllname, sizeof(dllname));\n    HMODULE vm = LoadLibraryA(dllname);\n    load_x87function = (load_x87function_t)GetProcAddress(vm, \"load_x87function\");\n    if (load_x87function)\n        load_x87function(&x87);\n\n    if (!x87.fldcw)\n        x87.fldcw = fldcw_stub;\n    if (!x87.wait)\n        x87.wait = wait_stub;\n    if (!x87.fninit)\n        x87.fninit = fninit_stub;\n    if (!x87.fstcw)\n        x87.fstcw = fstcw_stub;\n    if (!x87.fstsw)\n        x87.fstsw = fstsw_stub;\n    if (!x87.frndint)\n        x87.frndint = frndint_stub;\n    if (!x87.fclex)\n        x87.fclex = fclex_stub;\n    if (!x87.fsave)\n        x87.fsave = fsave_stub;\n    if (!x87.frstor)\n        x87.frstor = frstor_stub;\n    if (!x87.fistp)\n        x87.fistp = fistp_stub;\n    if (!x87.fstenv32)\n        x87.fstenv32 = fstenv32_stub;\n    oldproc = DOSVM_SetBuiltinVector(2, fpu_exception);\n    return TRUE;\n}\n#define USE_VM86_DLL 1\n#include <pshpack1.h>\nstruct Win87EmInfoStruct\n{\n    unsigned short Version;\n    unsigned short SizeSaveArea;\n    unsigned short WinDataSeg;\n    unsigned short WinCodeSeg;\n    unsigned short Have80x87;\n    unsigned short Unused;\n};\n#include <poppack.h>\n\n/* Implementing this is easy cause Linux and *BSD* ALWAYS have a numerical\n * coprocessor. (either real or emulated on kernellevel)\n */\n/* win87em.dll also sets interrupt vectors: 2 (NMI), 0x34 - 0x3f (emulator\n * calls of standard libraries, see Ralph Browns interrupt list), 0x75\n * (int13 error reporting of coprocessor)\n */\n\n/* have a look at /usr/src/linux/arch/i386/math-emu/ *.[ch] for more info\n * especially control_w.h and status_w.h\n */\n/* FIXME: Still rather skeletal implementation only */\n\nstatic WORD RefCount = 0;\nstatic WORD CtrlWord = 0;\nstatic WORD StatusWord_1 = 0x000b;\nstatic WORD StatusWord_2 = 0;\nstatic WORD StackTop = 175;\nstatic WORD StackBottom = 0;\nstatic WORD Inthandler02hVar = 1;\n\n// the fpe handler is documented as not needing to return\n// if a program longjmps out we don't want an extra stale context in the call stack \n// so clean everything up and use a trampoline for the return\nvoid WINAPI fpe_return(CONTEXT *context)\n{\n    WORD *stkptr = (WORD *)MapSL(MAKESEGPTR(context->SegSs, LOWORD(context->Esp)));\n    context->SegDs = stkptr[0];\n    context->Eax = stkptr[3];\n    context->Ebp = stkptr[4] - 1;\n    context->Eip = stkptr[5];\n    context->SegCs = stkptr[6];\n    context->EFlags = stkptr[7];\n    context->Esp += 16;\n}\n\nstatic void WINAPI fpu_exception(CONTEXT *context)\n{\n    UINT32 fpenv[7];\n\n    // check if program sets own nmi handler, maybe irq13 also\n    //FARPROC16 handler2 = DOSVM_GetPMHandler16(2);\n\n    // we need to use the 32bit fstenv because the pmode fpenv\n    // doesn't contain the fp code or data segments in later intel cpus\n    // so fstenv32 is the only way to get the exception opcode \n    // and also makes it hard/impossible to fix errors with memory operands\n    x87.fstenv32((char *)&fpenv);\n    x87.fclex();\n    StatusWord_2 |= fpenv[1];\n    FARPROC16 handler3e = DOSVM_GetPMHandler16(0x3e);\n    if (!handler3e)\n    {\n        x87.fldcw(fpenv[0]);\n        return;\n    }\n    WORD opcode = fpenv[4] >> 16;\n    WORD unmasked = ~fpenv[0] & fpenv[1] & 0x3f;\n    int errcode = 0;\n    // we don't attempt to fix errors that the real win87em would\n    // currently, just check the error type for the first exception\n    if (unmasked & 1) // EM_INVALID\n    {\n        errcode = 0x81; // FPE_INVALID\n        if (fpenv[1] & 0x40)\n        {\n            ERR(\"Stack fault at %04x:%08x\\n\", context->SegCs, context->Eip);\n            if (fpenv[1] & 0x200)\n                errcode = 0x8a; // FPE_STACKOVERFLOW\n            else\n                errcode = 0x8b; // FPE_STACKUNDERFLOW\n        }\n        else if (opcode == 0x1fa)\n            errcode = 0x88; // FPE_SQRTNEG\n    }\n    else if (unmasked & 2) // EM_DENORMAL\n        errcode = 0x82;\n    else if (unmasked & 4) // EM_ZERODIVIDE\n        errcode = 0x83;\n    else if (unmasked & 8) // EM_OVERFLOW\n        errcode = 0x84;\n    else if (unmasked & 0x10) // EM_UNDERFLOW\n        errcode = 0x85;\n    else if (unmasked & 0x20) // EM_INEXACT\n        errcode = 0x86;\n    // Watcom expects ds to be on the stack above the ret addr\n    // VB3 expects bp to point to a previous bp which points to the fault context ax and bp\n    context->Esp -= 20;\n    DWORD new_sp = MAKESEGPTR(context->SegSs, LOWORD(context->Esp));\n    WORD *stack = (WORD *)MapSL(new_sp);\n    static FARPROC16 trampoline16 = 0;\n    if (!trampoline16)\n\ttrampoline16 = GetProcAddress16(GetModuleHandle16(\"WIN87EM\"), \"fpe_return\");\n    stack[9] = context->EFlags;\n    stack[8] = context->SegCs;\n    stack[7] = context->Eip;\n    stack[6] = context->Ebp + 1;\n    stack[5] = context->Eax;\n    stack[4] = context->SegDs;\n    stack[3] = OFFSETOF(new_sp) + 12 + 1;\n    stack[2] = context->SegDs;\n    stack[1] = SELECTOROF(trampoline16);\n    stack[0] = OFFSETOF(trampoline16);\n    context->EFlags |= 0x200; // orig win87em unconditionally sets IF\n    context->SegCs = HIWORD(handler3e);\n    context->Eip = LOWORD(handler3e);\n    context->Eax = errcode;\n    context->Ebp = OFFSETOF(new_sp) + 6;\n    x87.fldcw(fpenv[0]);\n} \n\nstatic void WIN87_ClearStatus( CONTEXT *context )\n{\n    context->Eax &= ~0xffff;  /* set AX to 0 */\n#if USE_VM86_DLL\n    x87.fclex();\n#else/*USE_VM86_DLL*/\n#ifdef __i386__\n#ifndef _MSC_VER\n    __asm__(\"fclex\");\n#else\n    __asm\n    {\n            fclex\n    }\n#endif\n#endif\n#endif/*USE_VM86_DLL*/\n    StatusWord_2 = 0;\n}\n\nstatic void WIN87_SetCtrlWord( CONTEXT *context )\n{\n    CtrlWord = LOWORD(context->Eax);\n#if USE_VM86_DLL\n    x87.fldcw(CtrlWord);\n#else/*USE_VM86_DLL*/\n#ifdef __i386__\n#ifndef _MSC_VER\n    __asm__(\"wait;fldcw %0\" : : \"m\" (CtrlWord));\n#else\n    __asm\n    {\n            wait;\n            fldcw CtrlWord\n    }\n#endif\n#endif/*USE_VM86_DLL*/\n#endif\n}\n\nstatic void WIN87_Init( CONTEXT *context )\n{\n#if USE_VM86_DLL\n        x87.fninit();\n        x87.fninit();\n#else/*USE_VM86_DLL*/\n#ifdef __i386__\n#ifndef _MSC_VER\n        __asm__(\"fninit\");\n        __asm__(\"fninit\");\n#else\n        __asm\n        {\n                fninit\n                        fninit\n        }\n#endif\n#endif\n#endif/*USE_VM86_DLL*/\n    StackBottom = StackTop;\n    context->Eax = (context->Eax & ~0xffff) | 0x1332;\n    WIN87_SetCtrlWord(context);\n    WIN87_ClearStatus(context);\n}\n\n/***********************************************************************\n *\t\t_fpMath (WIN87EM.1)\n */\nvoid WINAPI _fpMath( CONTEXT *context )\n{\n    TRACE(\"(cs:eip=%04x:%04x es=%04x bx=%04x ax=%04x dx=%04x)\\n\",\n          context->SegCs, context->Eip, context->SegEs, context->Ebx,\n          context->Eax, context->Edx );\n\n    switch(LOWORD(context->Ebx))\n    {\n    case 0: /* install (increase instanceref) emulator, install NMI vector */\n        RefCount++;\n#if 0\n        InstallIntVecs02hAnd75h();\n#endif\n        WIN87_Init(context);\n        context->Eax &= ~0xffff;  /* set AX to 0 */\n        break;\n\n    case 1: /* Init Emulator */\n        WIN87_Init(context);\n        break;\n\n    case 2: /* deinstall emulator (decrease instanceref), deinstall NMI vector\n             * if zero. Every '0' call should have a matching '2' call.\n             */\n        WIN87_Init(context);\n\tRefCount--;\n#if 0\n        if (!RefCount)\n            RestoreInt02h();\n#endif\n\n        break;\n\n    case 3: /* The fpe handler is stored in int 3eh but the handler returns\n             * with a retf so it can't be called with an int instruction\n             * the old handler is saved and restored by the program\n             * the tdb contains a per-task int 3eh handler\n             */\n        DOSVM_SetPMHandler16(0x3e, (FARPROC16)MAKESEGPTR(context->Edx, context->Eax));\n        break;\n\n    case 4:\n        /* OUT: newset control word in AX */\n        WIN87_SetCtrlWord(context);\n        break;\n\n    case 5: /* return internal control word in AX */\n        context->Eax = (context->Eax & ~0xffff) | CtrlWord;\n        break;\n\n    case 6: /* round top of stack to integer using method AX & 0x0C00 */\n        /* returns current controlword */\n        {\n            WORD save,mask;\n            /* I don't know much about asm() programming. This could be\n             * wrong.\n             */\n#if USE_VM86_DLL\n\t\t\tx87.fstcw(&save);\n\t\t\tmask = (save & ~0xc00) | (context->Eax & 0xc00);\n\t\t\tx87.fldcw(mask);\n\t\t\tx87.frndint();\n\t\t\tx87.fldcw(save);\n#else/*USE_VM86_DLL*/\n#ifdef __i386__\n#ifndef _MSC_VER\n\t\t\t__asm__ __volatile__(\"fstcw %0;wait\" : \"=m\" (save) : : \"memory\");\n\t\t\t__asm__ __volatile__(\"fstcw %0;wait\" : \"=m\" (mask) : : \"memory\");\n\t\t\t__asm__ __volatile__(\"orw $0xC00,%0\" : \"=m\" (mask) : : \"memory\");\n\t\t\t__asm__ __volatile__(\"fldcw %0;wait\" : : \"m\" (mask));\n\t\t\t__asm__ __volatile__(\"frndint\");\n#else\n\t\t\t__asm\n\t\t\t{\n\t\t\t\tfstcw save\n\t\t\t\twait\n\t\t\t\tfstcw mask\n\t\t\t\twait\n\t\t\t\tor mask, 0C00h\n\t\t\t\tfldcw mask\n\t\t\t\twait\n\t\t\t\tfrndint\n\t\t\t}\n#endif\n#endif\n#endif/*USE_VM86_DLL*/\n        }\n        break;\n\n    case 7: /* POP top of stack as integer into DX:AX */\n        /* IN: AX&0x0C00 rounding protocol */\n        /* OUT: DX:AX variable popped */\n        {\n            DWORD dw=x87.fistp((context->Eax >> 10) & 3);\n            /* I don't know much about asm() programming. This could be\n             * wrong.\n             */\n/* FIXME: could someone who really understands asm() fix this please? --AJ */\n/*            __asm__(\"fistp %0;wait\" : \"=m\" (dw) : : \"memory\"); */\n            TRACE(\"On top of stack was %d\\n\",dw);\n            context->Eax = (context->Eax & ~0xffff) | LOWORD(dw);\n            context->Edx = (context->Edx & ~0xffff) | HIWORD(dw);\n        }\n        break;\n\n    case 8: /* restore internal status words from emulator status word */\n        context->Eax &= ~0xffff;  /* set AX to 0 */\n#if USE_VM86_DLL\n      x87.fstsw(&StatusWord_1);\n#else/*USE_VM86_DLL*/\n#ifdef __i386__\n#ifndef _MSC_VER\n        __asm__(\"fstsw %0;wait\" : \"=m\" (StatusWord_1));\n#else\n        __asm\n        {\n                fstsw StatusWord_1\n                wait\n        }\n#endif\n#endif\n#endif/*USE_VM86_DLL*/\n        context->Eax |= StatusWord_1 & 0x3f;\n        context->Eax = (context->Eax | StatusWord_2) & ~0xe000;\n        StatusWord_2 = LOWORD(context->Eax);\n        break;\n\n    case 9: /* clear fpu exceptions and some other things */\n        WIN87_ClearStatus(context);\n        break;\n\n    case 10: /* dunno. but looks like returning nr. of things on stack in AX */\n    {\n        UINT32 fpustate[7];\n        WORD count = 0;\n        x87.fstenv32(&fpustate);\n        WORD tagword = fpustate[2];\n        for (int i = 0; i < 8; i++)\n            count += (((tagword >> (i * 2)) & 3) != 3);\n        context->Eax = (context->Eax & ~0xffff) | count;\n        break;\n    }\n    case 11: /* just returns the installed flag in DX:AX */\n        context->Edx &= ~0xffff;  /* set DX to 0 */\n        context->Eax = (context->Eax & ~0xffff) | 1; // fpu is always available\n        break;\n\n    case 12: /* save AX in some internal state var */\n        Inthandler02hVar = LOWORD(context->Eax);\n        break;\n\n    default: /* error. Say that loud and clear */\n        FIXME(\"unhandled switch %d\\n\",LOWORD(context->Ebx));\n        context->Eax |= 0xffff;\n        context->Edx |= 0xffff;\n        break;\n    }\n}\n\nSEGPTR WINAPI K32WOWGlobalLock16(HGLOBAL16 handle);\nstatic HGLOBAL16 hGlobalD;\nstatic HGLOBAL16 hGlobalC;\nstatic WORD D;\nstatic WORD C;\n/***********************************************************************\n *\t\t__WinEm87Info (WIN87EM.3)\n */\nvoid WINAPI __WinEm87Info(struct Win87EmInfoStruct *pWIS, int cbWin87EmInfoStruct)\n{\n    if (!hGlobalD)\n    {\n        hGlobalD = GlobalAlloc16(0, 65535);\n        hGlobalC = GlobalAlloc16(0, 65535);\n        D = K32WOWGlobalLock16(hGlobalD) >> 16;\n        C = K32WOWGlobalLock16(hGlobalC) >> 16;\n    }\n    if (cbWin87EmInfoStruct != sizeof(*pWIS))\n    {\n        ERR(\"(%p,%d) %d != sizeof(struct Win87EmInfoStruct)!\\n\", pWIS, cbWin87EmInfoStruct, cbWin87EmInfoStruct);\n    }\n    FIXME(\"(%p,%d), stub !\\n\",pWIS,cbWin87EmInfoStruct);\n    //WOW32\n    pWIS->Version = 0x0600;\n    pWIS->SizeSaveArea= 0x1D5;\n    pWIS->Have80x87 = TRUE;\n    pWIS->Unused = 0;\n    //unknown\n    pWIS->WinCodeSeg = C;\n    pWIS->WinDataSeg = D;\n    return 0;\n}\n\n/***********************************************************************\n *\t\t__WinEm87Restore (WIN87EM.4)\n */\nvoid WINAPI __WinEm87Restore(void *pWin87EmSaveArea, int cbWin87EmSaveArea)\n{\n  FIXME(\"(%p,%d), stub !\\n\",\n\tpWin87EmSaveArea,cbWin87EmSaveArea);\n}\n\n/***********************************************************************\n *\t\t__WinEm87Save (WIN87EM.5)\n */\nvoid WINAPI __WinEm87Save(void *pWin87EmSaveArea, int cbWin87EmSaveArea)\n{\n  FIXME(\"(%p,%d), stub !\\n\",\n\tpWin87EmSaveArea,cbWin87EmSaveArea);\n}\n"
  },
  {
    "path": "win87em/win87em.def",
    "content": "; File generated automatically from win87em.dll16.spec; do not edit!\n\nLIBRARY win87em.dll16\n\nEXPORTS\n  _wine_spec_dos_header;=.L__wine_spec_dos_header @1 DATA PRIVATE\n"
  },
  {
    "path": "win87em/win87em.dll16.spec",
    "content": "1 pascal -register __fpMath() _fpMath\n#3 pascal -ret16 __WinEm87Info(ptr word) __WinEm87Info\n#4 pascal -ret16 __WinEm87Restore(ptr word) __WinEm87Restore\n#5 pascal -ret16 __WinEm87Save(ptr word) __WinEm87Save\n3 pascal -ret16 __Win87EmInfo(ptr word) __WinEm87Info\n4 pascal -ret16 __Win87EmRestore(ptr word) __WinEm87Restore\n5 pascal -ret16 __Win87EmSave(ptr word) __WinEm87Save\n\n100 pascal -register fpe_return() fpe_return\n"
  },
  {
    "path": "win87em/win87em.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"win87em.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"win87em.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"win87em.def\" />\n    <CustomBuild Include=\"win87em.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" WIN87EM &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" WIN87EM &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{08AEBC9F-464E-41DD-B4CB-F2921F69B591}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>win87em</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;WIN87EM_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n      <PrecompiledHeaderFile />\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)krnl386.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib</AdditionalDependencies>\n      <ModuleDefinitionFile>win87em.def</ModuleDefinitionFile>\n      <IgnoreAllDefaultLibraries>\n      </IgnoreAllDefaultLibraries>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;WIN87EM_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ModuleDefinitionFile>win87em.def</ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)krnl386.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib</AdditionalDependencies>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <IgnoreAllDefaultLibraries>\n      </IgnoreAllDefaultLibraries>\n    </Link>\n  </ItemDefinitionGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "win87em/win87em.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"ソース ファイル\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"ヘッダー ファイル\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"リソース ファイル\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"win87em.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"win87em.dll16.obj\">\n      <Filter>ソース ファイル</Filter>\n    </Object>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"win87em.def\">\n      <Filter>ソース ファイル</Filter>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"win87em.dll16.spec\">\n      <Filter>ソース ファイル</Filter>\n    </CustomBuild>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "wine/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c)\nif (NOT(MSVC))\n    add_library(libwine SHARED ${SOURCE})\n    string(APPEND CMAKE_CXX_FLAGS \" -export-all-symbols\")\nelse()\n    add_library(libwine SHARED ${SOURCE} wine.def)\nendif()\n\nadd_definitions(-D_X86_ -D__i386__ -D__WINESRC__)\ntarget_link_libraries(libwine shlwapi.lib)\nset_target_properties(libwine PROPERTIES PREFIX \"\")\n"
  },
  {
    "path": "wine/casemap.c",
    "content": "/* Unicode case mappings */\n/* generated from http://www.unicode.org/Public/11.0.0/ucd/UnicodeData.txt */\n/* DO NOT EDIT!! */\n\n#include \"wine/unicode.h\"\n\nconst WCHAR wine_casemap_lower[4259] =\n{\n    /* index */\n    0x01bf, 0x02bf, 0x03bf, 0x044f, 0x054f, 0x064f, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x06af, 0x0100, 0x0100, 0x077d, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0873, 0x0100, 0x0973, 0x0a72,\n    0x0100, 0x0b6f, 0x0100, 0x0100, 0x0bf3, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0cf3, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0de6, 0x0ec4,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0fa3,\n    /* defaults */\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    /* 0x0041 .. 0x00ff */\n    0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,\n    0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,\n    0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,\n    0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020,\n    0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,\n    0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,\n    0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0020,\n    0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    /* 0x0100 .. 0x01ff */\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0xff39, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001,\n    0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001,\n    0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0xff87, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000,\n    0x0000, 0x00d2, 0x0001, 0x0000, 0x0001, 0x0000, 0x00ce, 0x0001,\n    0x0000, 0x00cd, 0x00cd, 0x0001, 0x0000, 0x0000, 0x004f, 0x00ca,\n    0x00cb, 0x0001, 0x0000, 0x00cd, 0x00cf, 0x0000, 0x00d3, 0x00d1,\n    0x0001, 0x0000, 0x0000, 0x0000, 0x00d3, 0x00d5, 0x0000, 0x00d6,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x00da, 0x0001,\n    0x0000, 0x00da, 0x0000, 0x0000, 0x0001, 0x0000, 0x00da, 0x0001,\n    0x0000, 0x00d9, 0x00d9, 0x0001, 0x0000, 0x0001, 0x0000, 0x00db,\n    0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0002, 0x0001, 0x0000, 0x0002,\n    0x0001, 0x0000, 0x0002, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001,\n    0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001,\n    0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0000, 0x0002, 0x0001, 0x0000, 0x0001, 0x0000, 0xff9f, 0xffc8,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    /* 0x0200 .. 0x02ff */\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0xff7e, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x2a2b, 0x0001, 0x0000, 0xff5d, 0x2a28, 0x0000,\n    0x0000, 0x0001, 0x0000, 0xff3d, 0x0045, 0x0047, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    /* 0x0370 .. 0x03ff */\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0074,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0026, 0x0000,\n    0x0025, 0x0025, 0x0025, 0x0000, 0x0040, 0x0000, 0x003f, 0x003f,\n    0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,\n    0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,\n    0x0020, 0x0020, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,\n    0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0xffc4, 0x0000, 0x0000, 0x0001,\n    0x0000, 0xfff9, 0x0001, 0x0000, 0x0000, 0xff7e, 0xff7e, 0xff7e,\n    /* 0x0400 .. 0x04ff */\n    0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050,\n    0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050, 0x0050,\n    0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,\n    0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,\n    0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,\n    0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x000f, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001,\n    0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    /* 0x0500 .. 0x05ff */\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0000, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,\n    0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,\n    0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,\n    0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,\n    0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    /* 0x10a0 .. 0x10ff */\n    0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60,\n    0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60,\n    0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60,\n    0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60,\n    0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x0000, 0x1c60,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1c60, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    /* 0x1332 .. 0x13ff */\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x97d0, 0x97d0,\n    0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0,\n    0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0,\n    0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0,\n    0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0,\n    0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0,\n    0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0,\n    0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0,\n    0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0,\n    0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0,\n    0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x97d0, 0x0008, 0x0008,\n    0x0008, 0x0008, 0x0008, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    /* 0x1c0a .. 0x1cff */\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf440, 0xf440,\n    0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440,\n    0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440,\n    0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440,\n    0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440,\n    0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440, 0xf440,\n    0xf440, 0x0000, 0x0000, 0xf440, 0xf440, 0xf440, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    /* 0x1e00 .. 0x1eff */\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xe241, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    /* 0x1f01 .. 0x1fff */\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8,\n    0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8,\n    0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8,\n    0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8,\n    0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8,\n    0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xfff8, 0x0000, 0xfff8, 0x0000, 0xfff8, 0x0000, 0xfff8, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8,\n    0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8,\n    0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8,\n    0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8,\n    0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8,\n    0xfff8, 0xffb6, 0xffb6, 0xfff7, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffaa,\n    0xffaa, 0xffaa, 0xffaa, 0xfff7, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8,\n    0xfff8, 0xff9c, 0xff9c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfff8,\n    0xfff8, 0xff90, 0xff90, 0xfff9, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xff80,\n    0xff80, 0xff82, 0xff82, 0xfff7, 0x0000, 0x0000, 0x0000,\n    /* 0x2103 .. 0x21ff */\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0xe2a3, 0x0000, 0x0000, 0x0000, 0xdf41,\n    0xdfba, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x001c,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0010, 0x0010,\n    0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,\n    0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    /* 0x247c .. 0x24ff */\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a,\n    0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a,\n    0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a, 0x001a,\n    0x001a, 0x001a, 0x001a, 0x001a, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000,\n    /* 0x2c00 .. 0x2cff */\n    0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,\n    0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,\n    0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,\n    0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,\n    0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,\n    0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0001, 0x0000, 0xd609, 0xf11a, 0xd619, 0x0000, 0x0000, 0x0001,\n    0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0xd5e4, 0xd603, 0xd5e1,\n    0xd5e2, 0x0000, 0x0001, 0x0000, 0x0000, 0x0001, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd5c1, 0xd5c1,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    /* 0xa60d .. 0xa6ff */\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001,\n    0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001,\n    0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001,\n    0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001,\n    0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001,\n    0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001,\n    0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001,\n    0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001,\n    0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000,\n    /* 0xa722 .. 0xa7ff */\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001,\n    0x0000, 0x0001, 0x0000, 0x75fc, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0001, 0x0000, 0x5ad8, 0x0000, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x5abc, 0x5ab1, 0x5ab5, 0x5abf, 0x5abc, 0x0000, 0x5aee, 0x5ad6,\n    0x5aeb, 0x03a0, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    /* 0xff21 .. 0xffff */\n    0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,\n    0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,\n    0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,\n    0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000\n};\n\nconst WCHAR wine_casemap_upper[4828] =\n{\n    /* index */\n    0x019f, 0x029f, 0x039f, 0x045a, 0x0556, 0x0656, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x06dd, 0x0100, 0x0100, 0x07dd, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x08db, 0x0964, 0x0a63, 0x0b63,\n    0x0100, 0x0c57, 0x0100, 0x0100, 0x0cdc, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0dc6, 0x0ec6, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0f85, 0x1062,\n    0x0100, 0x0100, 0x0100, 0x111c, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,\n    0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x11dc,\n    /* defaults */\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    /* 0x0061 .. 0x00ff */\n    0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0,\n    0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0,\n    0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0,\n    0xffe0, 0xffe0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x02e7, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffe0,\n    0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0,\n    0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0,\n    0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x0000, 0xffe0,\n    0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x0079,\n    /* 0x0100 .. 0x01ff */\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xff18, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0xfed4,\n    0x00c3, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000,\n    0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0061, 0x0000, 0x0000,\n    0x0000, 0xffff, 0x00a3, 0x0000, 0x0000, 0x0000, 0x0082, 0x0000,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000,\n    0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000,\n    0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0038,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xfffe, 0x0000,\n    0xffff, 0xfffe, 0x0000, 0xffff, 0xfffe, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0xffb1, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0x0000, 0xffff, 0xfffe, 0x0000, 0xffff, 0x0000, 0x0000,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    /* 0x0200 .. 0x02ff */\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x2a3f,\n    0x2a3f, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x2a1f, 0x2a1c, 0x2a1e, 0xff2e, 0xff32, 0x0000, 0xff33, 0xff33,\n    0x0000, 0xff36, 0x0000, 0xff35, 0xa54f, 0x0000, 0x0000, 0x0000,\n    0xff33, 0xa54b, 0x0000, 0xff31, 0x0000, 0xa528, 0xa544, 0x0000,\n    0xff2f, 0xff2d, 0xa544, 0x29f7, 0xa541, 0x0000, 0x0000, 0xff2d,\n    0x0000, 0x29fd, 0xff2b, 0x0000, 0x0000, 0xff2a, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x29e7, 0x0000, 0x0000,\n    0xff26, 0x0000, 0x0000, 0xff26, 0x0000, 0x0000, 0x0000, 0xa52a,\n    0xff26, 0xffbb, 0xff27, 0xff27, 0xffb9, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0xff25, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa515, 0xa512, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    /* 0x0345 .. 0x03ff */\n    0x0054, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0082, 0x0082,\n    0x0082, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffda,\n    0xffdb, 0xffdb, 0xffdb, 0x0000, 0xffe0, 0xffe0, 0xffe0, 0xffe0,\n    0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0,\n    0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe1, 0xffe0, 0xffe0,\n    0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffc0,\n    0xffc1, 0xffc1, 0x0000, 0xffc2, 0xffc7, 0x0000, 0x0000, 0x0000,\n    0xffd1, 0xffca, 0xfff8, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0xffaa, 0xffb0, 0x0007, 0xff8c, 0x0000,\n    0xffa0, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0xffff, 0x0000,\n    0x0000, 0x0000, 0x0000,\n    /* 0x0404 .. 0x04ff */\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0xffe0, 0xffe0, 0xffe0, 0xffe0,\n    0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0,\n    0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0,\n    0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0,\n    0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffb0, 0xffb0, 0xffb0, 0xffb0,\n    0xffb0, 0xffb0, 0xffb0, 0xffb0, 0xffb0, 0xffb0, 0xffb0, 0xffb0,\n    0xffb0, 0xffb0, 0xffb0, 0xffb0, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0xfff1, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff,\n    /* 0x0500 .. 0x05ff */\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,\n    0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,\n    0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,\n    0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,\n    0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    /* 0x1079 .. 0x10ff */\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0bc0,\n    0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0,\n    0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0,\n    0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0,\n    0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0,\n    0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0,\n    0x0bc0, 0x0bc0, 0x0000, 0x0000, 0x0bc0, 0x0bc0, 0x0bc0,\n    /* 0x1300 .. 0x13ff */\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0xfff8, 0x0000, 0x0000,\n    /* 0x1c02 .. 0x1cff */\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xe792, 0xe793,\n    0xe79c, 0xe79e, 0xe79e, 0xe79d, 0xe7a4, 0xe7db, 0x89c2, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    /* 0x1d77 .. 0x1dff */\n    0x0000, 0x0000, 0x8a04, 0x0000, 0x0000, 0x0000, 0x0ee6, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000,\n    /* 0x1e01 .. 0x1eff */\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0xffc5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    /* 0x1f00 .. 0x1fff */\n    0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0008, 0x0000, 0x0008, 0x0000, 0x0008, 0x0000, 0x0008,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x004a, 0x004a, 0x0056, 0x0056, 0x0056, 0x0056, 0x0064, 0x0064,\n    0x0080, 0x0080, 0x0070, 0x0070, 0x007e, 0x007e, 0x0000, 0x0000,\n    0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0008, 0x0008, 0x0000, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xe3db, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0008, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0008, 0x0008, 0x0000, 0x0000, 0x0000, 0x0007, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0009, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    /* 0x210c .. 0x21ff */\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0xffe4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0xfff0, 0xfff0, 0xfff0, 0xfff0,\n    0xfff0, 0xfff0, 0xfff0, 0xfff0, 0xfff0, 0xfff0, 0xfff0, 0xfff0,\n    0xfff0, 0xfff0, 0xfff0, 0xfff0, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000,\n    /* 0x247b .. 0x24ff */\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffe6, 0xffe6, 0xffe6,\n    0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6,\n    0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6,\n    0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0xffe6, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    /* 0x2c16 .. 0x2cff */\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,\n    0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,\n    0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,\n    0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,\n    0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,\n    0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0, 0xffd0,\n    0xffd0, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0xd5d5,\n    0xd5d8, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000,\n    0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000,\n    /* 0x2d00 .. 0x2dff */\n    0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0,\n    0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0,\n    0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0,\n    0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0,\n    0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0xe3a0, 0x0000, 0xe3a0,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xe3a0, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    /* 0xa641 .. 0xa6ff */\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    /* 0xa723 .. 0xa7ff */\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff,\n    0x0000, 0xffff, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000,\n    0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    /* 0xab46 .. 0xabff */\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfc60, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830,\n    0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830,\n    0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830,\n    0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830,\n    0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830,\n    0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830,\n    0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830,\n    0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830,\n    0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830,\n    0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830, 0x6830,\n    0x6830, 0x6830, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000,\n    /* 0xff40 .. 0xffff */\n    0x0000, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0,\n    0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0,\n    0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0,\n    0xffe0, 0xffe0, 0xffe0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000\n};\n"
  },
  {
    "path": "wine/config.c",
    "content": "/*\n * Configuration parameters shared between Wine server and clients\n *\n * Copyright 2002 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdio.h>\n#include <stdarg.h>\n#include <stdlib.h>\n#include <string.h>\n#include <errno.h>\n#include <sys/stat.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#ifdef HAVE_PWD_H\n#include <pwd.h>\n#endif\n#include \"wine/library.h\"\n\nstatic const char server_config_dir[] = \"/.wine\";        /* config dir relative to $HOME */\nstatic const char server_root_prefix[] = \"/tmp/.wine\";   /* prefix for server root dir */\nstatic const char server_dir_prefix[] = \"/server-\";      /* prefix for server dir */\n\nstatic char *bindir;\nstatic char *dlldir;\nstatic char *datadir;\nstatic char *config_dir;\nstatic char *server_dir;\nstatic char *build_dir;\nstatic char *user_name;\nstatic char *argv0_name;\n\n#ifdef __GNUC__\nstatic void fatal_error( const char *err, ... )  __attribute__((noreturn,format(printf,1,2)));\nstatic void fatal_perror( const char *err, ... )  __attribute__((noreturn,format(printf,1,2)));\n#endif\n\n#if defined(__linux__) || defined(__FreeBSD_kernel__ )\n#define EXE_LINK \"/proc/self/exe\"\n#elif defined (__FreeBSD__) || defined(__DragonFly__)\n#define EXE_LINK \"/proc/curproc/file\"\n#endif\n\n/* die on a fatal error */\nstatic void fatal_error( const char *err, ... )\n{\n    va_list args;\n\n    va_start( args, err );\n    fprintf( stderr, \"wine: \" );\n    vfprintf( stderr, err, args );\n    va_end( args );\n    exit(1);\n}\n\n/* die on a fatal error */\nstatic void fatal_perror( const char *err, ... )\n{\n    va_list args;\n\n    va_start( args, err );\n    fprintf( stderr, \"wine: \" );\n    vfprintf( stderr, err, args );\n    perror( \" \" );\n    va_end( args );\n    exit(1);\n}\n\n/* malloc wrapper */\nstatic void *xmalloc( size_t size )\n{\n    void *res;\n\n    if (!size) size = 1;\n    if (!(res = malloc( size ))) fatal_error( \"virtual memory exhausted\\n\");\n    return res;\n}\n\n/* strdup wrapper */\nstatic char *xstrdup( const char *str )\n{\n    size_t len = strlen(str) + 1;\n    char *res = xmalloc( len );\n    memcpy( res, str, len );\n    return res;\n}\n\n/* check if a string ends in a given substring */\nstatic inline int strendswith( const char* str, const char* end )\n{\n    size_t len = strlen( str );\n    size_t tail = strlen( end );\n    return len >= tail && !strcmp( str + len - tail, end );\n}\n\n/* remove all trailing slashes from a path name */\nstatic inline void remove_trailing_slashes( char *path )\n{\n    int len = strlen( path );\n    while (len > 1 && path[len-1] == '/') path[--len] = 0;\n}\n#if 0\n/* build a path from the specified dir and name */\nstatic char *build_path( const char *dir, const char *name )\n{\n    size_t len = strlen(dir);\n    char *ret = xmalloc( len + strlen(name) + 2 );\n\n    memcpy( ret, dir, len );\n    if (len && ret[len-1] != '/') ret[len++] = '/';\n    strcpy( ret + len, name );\n    return ret;\n}\n\n/* return the directory that contains the library at run-time */\nstatic char *get_runtime_libdir(void)\n{\n#ifdef HAVE_DLADDR\n    Dl_info info;\n    char *libdir;\n\n    if (dladdr( get_runtime_libdir, &info ) && info.dli_fname[0] == '/')\n    {\n        const char *p = strrchr( info.dli_fname, '/' );\n        unsigned int len = p - info.dli_fname;\n        if (!len) len++;  /* include initial slash */\n        libdir = xmalloc( len + 1 );\n        memcpy( libdir, info.dli_fname, len );\n        libdir[len] = 0;\n        return libdir;\n    }\n#endif /* HAVE_DLADDR */\n    return NULL;\n}\n\n/* return the directory that contains the main exe at run-time */\nstatic char *get_runtime_exedir(void)\n{\n#ifdef EXE_LINK\n    char *p, *bindir;\n    int size;\n\n    for (size = 256; ; size *= 2)\n    {\n        int ret;\n        if (!(bindir = malloc( size ))) return NULL;\n        if ((ret = readlink( EXE_LINK, bindir, size )) == -1) break;\n        if (ret != size)\n        {\n            bindir[ret] = 0;\n            if (!(p = strrchr( bindir, '/' ))) break;\n            if (p == bindir) p++;\n            *p = 0;\n            return bindir;\n        }\n        free( bindir );\n    }\n    free( bindir );\n#endif\n    return NULL;\n}\n\n/* return the base directory from argv0 */\nstatic char *get_runtime_argvdir( const char *argv0 )\n{\n    char *p, *bindir, *cwd;\n    int len, size;\n\n    if (!(p = strrchr( argv0, '/' ))) return NULL;\n\n    len = p - argv0;\n    if (!len) len++;  /* include leading slash */\n\n    if (argv0[0] == '/')  /* absolute path */\n    {\n        bindir = xmalloc( len + 1 );\n        memcpy( bindir, argv0, len );\n        bindir[len] = 0;\n    }\n    else\n    {\n        /* relative path, make it absolute */\n        for (size = 256 + len; ; size *= 2)\n        {\n            if (!(cwd = malloc( size ))) return NULL;\n            if (getcwd( cwd, size - len ))\n            {\n                bindir = cwd;\n                cwd += strlen(cwd);\n                *cwd++ = '/';\n                memcpy( cwd, argv0, len );\n                cwd[len] = 0;\n                break;\n            }\n            free( cwd );\n            if (errno != ERANGE) return NULL;\n        }\n    }\n    return bindir;\n}\n#endif\n/* initialize the server directory value */\nstatic void init_server_dir( dev_t dev, ino_t ino )\n{\n    char *p, *root;\n\n#ifdef __ANDROID__  /* there's no /tmp dir on Android */\n    root = build_path( config_dir, \".wineserver\" );\n#elif defined(HAVE_GETUID)\n    root = xmalloc( sizeof(server_root_prefix) + 12 );\n    sprintf( root, \"%s-%u\", server_root_prefix, getuid() );\n#else\n    root = xstrdup( server_root_prefix );\n#endif\n\n    server_dir = xmalloc( strlen(root) + sizeof(server_dir_prefix) + 2*sizeof(dev) + 2*sizeof(ino) + 2 );\n    strcpy( server_dir, root );\n    strcat( server_dir, server_dir_prefix );\n    p = server_dir + strlen(server_dir);\n\n    if (dev != (unsigned long)dev)\n        p += sprintf( p, \"%lx%08lx-\", (unsigned long)((unsigned long long)dev >> 32), (unsigned long)dev );\n    else\n        p += sprintf( p, \"%lx-\", (unsigned long)dev );\n\n    if (ino != (unsigned long)ino)\n        sprintf( p, \"%lx%08lx\", (unsigned long)((unsigned long long)ino >> 32), (unsigned long)ino );\n    else\n        sprintf( p, \"%lx\", (unsigned long)ino );\n    free( root );\n}\n#if 0\n/* retrieve the default dll dir */\nconst char *get_dlldir( const char **default_dlldir )\n{\n    *default_dlldir = DLLDIR;\n    return dlldir;\n\n#endif\n/* initialize all the paths values */\nstatic void init_paths(void)\n{\n    struct stat st;\n\n    const char *home = getenv( \"HOME\" );\n    const char *user = NULL;\n    const char *prefix = getenv( \"WINEPREFIX\" );\n\n#ifdef HAVE_GETPWUID\n    char uid_str[32];\n    struct passwd *pwd = getpwuid( getuid() );\n\n    if (pwd)\n    {\n        user = pwd->pw_name;\n        if (!home) home = pwd->pw_dir;\n    }\n    if (!user)\n    {\n        sprintf( uid_str, \"%lu\", (unsigned long)getuid() );\n        user = uid_str;\n    }\n#else  /* HAVE_GETPWUID */\n    if (!(user = getenv( \"USER\" )))\n        fatal_error( \"cannot determine your user name, set the USER environment variable\\n\" );\n#endif  /* HAVE_GETPWUID */\n    user_name = xstrdup( user );\n\n    /* build config_dir */\n\n    if (prefix)\n    {\n        config_dir = xstrdup( prefix );\n        remove_trailing_slashes( config_dir );\n        if (config_dir[0] != '/')\n            fatal_error( \"invalid directory %s in WINEPREFIX: not an absolute path\\n\", prefix );\n        if (stat( config_dir, &st ) == -1)\n        {\n            if (errno == ENOENT) return;  /* will be created later on */\n            fatal_perror( \"cannot open %s as specified in WINEPREFIX\", config_dir );\n        }\n    }\n    else\n    {\n        if (!home) fatal_error( \"could not determine your home directory\\n\" );\n        if (home[0] != '/') fatal_error( \"your home directory %s is not an absolute path\\n\", home );\n        config_dir = xmalloc( strlen(home) + sizeof(server_config_dir) );\n        strcpy( config_dir, home );\n        remove_trailing_slashes( config_dir );\n        strcat( config_dir, server_config_dir );\n        if (stat( config_dir, &st ) == -1)\n        {\n            if (errno == ENOENT) return;  /* will be created later on */\n            fatal_perror( \"cannot open %s\", config_dir );\n        }\n    }\n    if (!S_ISDIR(st.st_mode)) fatal_error( \"%s is not a directory\\n\", config_dir );\n#ifdef HAVE_GETUID\n    if (st.st_uid != getuid()) fatal_error( \"%s is not owned by you\\n\", config_dir );\n#endif\n\n    init_server_dir( st.st_dev, st.st_ino );\n}\n#if 0\n/* check if bindir is valid by checking for wineserver */\nstatic int is_valid_bindir( const char *bindir )\n{\n    struct stat st;\n    char *path = build_path( bindir, \"wineserver\" );\n    int ret = (stat( path, &st ) != -1);\n    free( path );\n    return ret;\n}\n\n/* check if dlldir is valid by checking for ntdll */\nstatic int is_valid_dlldir( const char *dlldir )\n{\n    struct stat st;\n    char *path = build_path( dlldir, \"ntdll.dll.so\" );\n    int ret = (stat( path, &st ) != -1);\n    free( path );\n    return ret;\n}\n\n/* check if basedir is a valid build dir by checking for wineserver and ntdll */\n/* helper for running_from_build_dir */\nstatic inline int is_valid_build_dir( char *basedir, int baselen )\n{\n    struct stat st;\n\n    strcpy( basedir + baselen, \"/server/wineserver\" );\n    if (stat( basedir, &st ) == -1) return 0;  /* no wineserver found */\n    /* check for ntdll too to make sure */\n    strcpy( basedir + baselen, \"/dlls/ntdll/ntdll.dll.so\" );\n    if (stat( basedir, &st ) == -1) return 0;  /* no ntdll found */\n\n    basedir[baselen] = 0;\n    return 1;\n}\n\n/* check if we are running from the build directory */\nstatic char *running_from_build_dir( const char *basedir )\n{\n    const char *p;\n    char *path;\n\n    /* remove last component from basedir */\n    p = basedir + strlen(basedir) - 1;\n    while (p > basedir && *p == '/') p--;\n    while (p > basedir && *p != '/') p--;\n    if (p == basedir) return NULL;\n    path = xmalloc( p - basedir + sizeof(\"/dlls/ntdll/ntdll.dll.so\") );\n    memcpy( path, basedir, p - basedir );\n\n    if (!is_valid_build_dir( path, p - basedir ))\n    {\n        /* remove another component */\n        while (p > basedir && *p == '/') p--;\n        while (p > basedir && *p != '/') p--;\n        if (p == basedir || !is_valid_build_dir( path, p - basedir ))\n        {\n            free( path );\n            return NULL;\n        }\n    }\n    return path;\n}\n\n/* try to set the specified directory as bindir, or set build_dir if it's inside the build directory */\nstatic int set_bindir( char *dir )\n{\n    if (!dir) return 0;\n    if (is_valid_bindir( dir ))\n    {\n        bindir = dir;\n        dlldir = build_path( bindir, BIN_TO_DLLDIR );\n    }\n    else\n    {\n        build_dir = running_from_build_dir( dir );\n        free( dir );\n    }\n    return bindir || build_dir;\n}\n\n/* try to set the specified directory as dlldir, or set build_dir if it's inside the build directory */\nstatic int set_dlldir( char *libdir )\n{\n    char *path;\n\n    if (!libdir) return 0;\n\n    path = build_path( libdir, LIB_TO_DLLDIR );\n    if (is_valid_dlldir( path ))\n    {\n        dlldir = path;\n        bindir = build_path( libdir, LIB_TO_BINDIR );\n    }\n    else\n    {\n        build_dir = running_from_build_dir( libdir );\n        free( path );\n    }\n    free( libdir );\n    return dlldir || build_dir;\n}\n\n/* initialize the argv0 path */\nvoid wine_init_argv0_path( const char *argv0 )\n{\n    const char *basename, *wineloader;\n\n    if (!(basename = strrchr( argv0, '/' ))) basename = argv0;\n    else basename++;\n\n    if (set_bindir( get_runtime_exedir() )) goto done;\n    if (set_dlldir( get_runtime_libdir() )) goto done;\n    if (set_bindir( get_runtime_argvdir( argv0 ))) goto done;\n    if ((wineloader = getenv( \"WINELOADER\" ))) set_bindir( get_runtime_argvdir( wineloader ));\n\ndone:\n    if (build_dir)\n    {\n        argv0_name = build_path( \"loader/\", basename );\n    }\n    else\n    {\n        if (bindir) datadir = build_path( bindir, BIN_TO_DATADIR );\n        argv0_name = xstrdup( basename );\n    }\n}\n\n/* return the configuration directory ($WINEPREFIX or $HOME/.wine) */\nconst char *wine_get_config_dir(void)\n{\n    if (!config_dir) init_paths();\n    return config_dir;\n}\n\n/* retrieve the wine data dir */\nconst char *wine_get_data_dir(void)\n{\n    return datadir;\n}\n\n/* retrieve the wine build dir (if we are running from there) */\nconst char *wine_get_build_dir(void)\n{\n    return build_dir;\n}\n#endif\n\n/* return the full name of the server directory (the one containing the socket) */\nconst char *wine_get_server_dir(void)\n{\n    if (!server_dir)\n    {\n        if (!config_dir) init_paths();\n        else\n        {\n            struct stat st;\n\n            if (stat( config_dir, &st ) == -1)\n            {\n                if (errno != ENOENT) fatal_error( \"cannot stat %s\\n\", config_dir );\n                return NULL;  /* will have to try again once config_dir has been created */\n            }\n            init_server_dir( st.st_dev, st.st_ino );\n        }\n    }\n    return server_dir;\n}\n\n#if 0\n/* return the current user name */\nconst char *wine_get_user_name(void)\n{\n    if (!user_name) init_paths();\n    return user_name;\n}\n\n/* return the standard version string */\nconst char *wine_get_version(void)\n{\n    return PACKAGE_VERSION;\n}\n\n/* return the build id string */\nconst char *wine_get_build_id(void)\n{\n    extern const char wine_build[];\n    return wine_build;\n}\n\n/* exec a binary using the preloader if requested; helper for wine_exec_wine_binary */\nstatic void preloader_exec( char **argv, int use_preloader )\n{\n    if (use_preloader)\n    {\n        static const char preloader[] = \"wine-preloader\";\n        static const char preloader64[] = \"wine64-preloader\";\n        char *p, *full_name;\n        char **last_arg = argv, **new_argv;\n\n        if (!(p = strrchr( argv[0], '/' ))) p = argv[0];\n        else p++;\n\n        full_name = xmalloc( p - argv[0] + sizeof(preloader64) );\n        memcpy( full_name, argv[0], p - argv[0] );\n        if (strendswith( p, \"64\" ))\n            memcpy( full_name + (p - argv[0]), preloader64, sizeof(preloader64) );\n        else\n            memcpy( full_name + (p - argv[0]), preloader, sizeof(preloader) );\n\n        /* make a copy of argv */\n        while (*last_arg) last_arg++;\n        new_argv = xmalloc( (last_arg - argv + 2) * sizeof(*argv) );\n        memcpy( new_argv + 1, argv, (last_arg - argv + 1) * sizeof(*argv) );\n        new_argv[0] = full_name;\n        execv( full_name, new_argv );\n        free( new_argv );\n        free( full_name );\n    }\n    execv( argv[0], argv );\n}\n/* exec a wine internal binary (either the wine loader or the wine server) */\nvoid wine_exec_wine_binary( const char *name, char **argv, const char *env_var )\n{\n    const char *path, *pos, *ptr;\n    int use_preloader;\n\n    if (!name) name = argv0_name;  /* no name means default loader */\n\n#ifdef linux\n    use_preloader = !strendswith( name, \"wineserver\" );\n#else\n    use_preloader = 0;\n#endif\n\n    if ((ptr = strrchr( name, '/' )))\n    {\n        /* if we are in build dir and name contains a path, try that */\n        if (build_dir)\n        {\n            argv[0] = build_path( build_dir, name );\n            preloader_exec( argv, use_preloader );\n            free( argv[0] );\n        }\n        name = ptr + 1;  /* get rid of path */\n    }\n\n    /* first, bin directory from the current libdir or argv0 */\n    if (bindir)\n    {\n        argv[0] = build_path( bindir, name );\n        preloader_exec( argv, use_preloader );\n        free( argv[0] );\n    }\n\n    /* then specified environment variable */\n    if (env_var)\n    {\n        argv[0] = (char *)env_var;\n        preloader_exec( argv, use_preloader );\n    }\n\n    /* now search in the Unix path */\n    if ((path = getenv( \"PATH\" )))\n    {\n        argv[0] = xmalloc( strlen(path) + strlen(name) + 2 );\n        pos = path;\n        for (;;)\n        {\n            while (*pos == ':') pos++;\n            if (!*pos) break;\n            if (!(ptr = strchr( pos, ':' ))) ptr = pos + strlen(pos);\n            memcpy( argv[0], pos, ptr - pos );\n            strcpy( argv[0] + (ptr - pos), \"/\" );\n            strcat( argv[0] + (ptr - pos), name );\n            preloader_exec( argv, use_preloader );\n            pos = ptr;\n        }\n        free( argv[0] );\n    }\n\n    /* and finally try BINDIR */\n    argv[0] = build_path( BINDIR, name );\n    preloader_exec( argv, use_preloader );\n    free( argv[0] );\n}\n#endif\n"
  },
  {
    "path": "wine/config.h",
    "content": "/* include/config.h.  Generated from config.h.in by configure.  */\n/* include/config.h.in.  Generated from configure.ac by autoheader.  */\n\n#ifndef __WINE_CONFIG_H\n#define __WINE_CONFIG_H\n#ifndef WINE_CROSSTEST\n/* Define to a function attribute for Microsoft hotpatch assembly prefix. */\n#define DECLSPEC_HOTPATCH /* */\n\n/* Define to the file extension for executables. */\n#define EXEEXT \".exe\"\n\n/* Define to 1 if you have the `acosh' function. */\n/* #undef HAVE_ACOSH */\n\n/* Define to 1 if you have the `acoshf' function. */\n/* #undef HAVE_ACOSHF */\n\n/* Define to 1 if you have the <alias.h> header file. */\n/* #undef HAVE_ALIAS_H */\n\n/* Define to 1 if you have the <alsa/asoundlib.h> header file. */\n/* #undef HAVE_ALSA_ASOUNDLIB_H */\n\n/* Define to 1 if you have the <AL/al.h> header file. */\n/* #undef HAVE_AL_AL_H */\n\n/* Define to 1 if you have the <ApplicationServices/ApplicationServices.h>\n   header file. */\n/* #undef HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H */\n\n/* Define to 1 if you have the <arpa/inet.h> header file. */\n#define HAVE_ARPA_INET_H 1\n\n/* Define to 1 if you have the <arpa/nameser.h> header file. */\n#define HAVE_ARPA_NAMESER_H 1\n\n/* Define to 1 if you have the `asctime_r' function. */\n#define HAVE_ASCTIME_R 1\n\n/* Define to 1 if you have the `asinh' function. */\n/* #undef HAVE_ASINH */\n\n/* Define to 1 if you have the `asinhf' function. */\n/* #undef HAVE_ASINHF */\n\n/* Define to 1 if you have the <asm/types.h> header file. */\n#define HAVE_ASM_TYPES_H 1\n\n/* Define to 1 if you have the <asm/user.h> header file. */\n/* #undef HAVE_ASM_USER_H */\n\n/* Define to 1 if you have the `atanh' function. */\n/* #undef HAVE_ATANH */\n\n/* Define to 1 if you have the `atanhf' function. */\n/* #undef HAVE_ATANHF */\n\n/* Define to 1 if you have the <AudioToolbox/AudioConverter.h> header file. */\n/* #undef HAVE_AUDIOTOOLBOX_AUDIOCONVERTER_H */\n\n/* Define to 1 if you have the <AudioUnit/AudioComponent.h> header file. */\n/* #undef HAVE_AUDIOUNIT_AUDIOCOMPONENT_H */\n\n/* Define to 1 if you have the <AudioUnit/AudioUnit.h> header file. */\n/* #undef HAVE_AUDIOUNIT_AUDIOUNIT_H */\n\n/* Define to 1 if you have the `AUGraphAddNode' function. */\n/* #undef HAVE_AUGRAPHADDNODE */\n\n/* Define to 1 if you have the <capi20.h> header file. */\n/* #undef HAVE_CAPI20_H */\n\n/* Define to 1 if you have the <Carbon/Carbon.h> header file. */\n/* #undef HAVE_CARBON_CARBON_H */\n\n/* Define to 1 if you have the `cbrt' function. */\n#define HAVE_CBRT 1\n\n/* Define to 1 if you have the `cbrtf' function. */\n#define HAVE_CBRTF 1\n\n/* Define to 1 if you have the `chsize' function. */\n/* #undef HAVE_CHSIZE */\n\n/* Define to 1 if you have the `clock_gettime' function. */\n#define HAVE_CLOCK_GETTIME 1\n\n/* Define to 1 if you have the <CL/cl.h> header file. */\n/* #undef HAVE_CL_CL_H */\n\n/* Define to 1 if you have the <CommonCrypto/CommonCryptor.h> header file. */\n/* #undef HAVE_COMMONCRYPTO_COMMONCRYPTOR_H */\n\n/* Define to 1 if you have the <CoreAudio/CoreAudio.h> header file. */\n/* #undef HAVE_COREAUDIO_COREAUDIO_H */\n\n/* Define to 1 if you have the <CoreServices/CoreServices.h> header file. */\n/* #undef HAVE_CORESERVICES_CORESERVICES_H */\n\n/* Define to 1 if you have the <cups/cups.h> header file. */\n/* #undef HAVE_CUPS_CUPS_H */\n\n/* Define to 1 if you have the <cups/ppd.h> header file. */\n/* #undef HAVE_CUPS_PPD_H */\n\n/* Define to 1 if you have the <curses.h> header file. */\n#define HAVE_CURSES_H 1\n\n/* Define if you have the daylight variable */\n#define HAVE_DAYLIGHT 1\n\n/* Define to 1 if you have the <direct.h> header file. */\n/* #undef HAVE_DIRECT_H */\n\n/* Define to 1 if you have the <dirent.h> header file. */\n#define HAVE_DIRENT_H 1\n\n/* Define to 1 if you have the <DiskArbitration/DiskArbitration.h> header\n   file. */\n/* #undef HAVE_DISKARBITRATION_DISKARBITRATION_H */\n\n/* Define to 1 if you have the `dladdr' function. */\n/* #undef HAVE_DLADDR */\n\n/* Define to 1 if you have the <dlfcn.h> header file. */\n//#define HAVE_DLFCN_H 1\n\n/* Define to 1 if you have the `dlopen' function. */\n//#define HAVE_DLOPEN 1\n\n/* Define to 1 if you have the <EGL/egl.h> header file. */\n/* #undef HAVE_EGL_EGL_H */\n\n/* Define to 1 if you have the <elf.h> header file. */\n//#define HAVE_ELF_H 1\n\n/* Define to 1 if you have the `epoll_create' function. */\n/* #undef HAVE_EPOLL_CREATE */\n\n/* Define to 1 if you have the `erf' function. */\n/* #undef HAVE_ERF */\n\n/* Define to 1 if you have the `erfc' function. */\n/* #undef HAVE_ERFC */\n\n/* Define to 1 if you have the `erfcf' function. */\n/* #undef HAVE_ERFCF */\n\n/* Define to 1 if you have the `erff' function. */\n/* #undef HAVE_ERFF */\n\n/* Define to 1 if you have the `exp2' function. */\n#define HAVE_EXP2 1\n\n/* Define to 1 if you have the `exp2f' function. */\n#define HAVE_EXP2F 1\n\n/* Define to 1 if you have the `expm1' function. */\n/* #undef HAVE_EXPM1 */\n\n/* Define to 1 if you have the `expm1f' function. */\n/* #undef HAVE_EXPM1F */\n\n/* Define to 1 if you have the `fallocate' function. */\n/* #undef HAVE_FALLOCATE */\n\n/* Define to 1 if you have the `ffs' function. */\n#define HAVE_FFS 1\n\n/* Define to 1 if you have the `finitef' function. */\n#define HAVE_FINITEF 1\n\n/* Define to 1 if you have the <float.h> header file. */\n#define HAVE_FLOAT_H 1\n\n/* Define to 1 if you have the `fnmatch' function. */\n#define HAVE_FNMATCH 1\n\n/* Define to 1 if you have the <fnmatch.h> header file. */\n#define HAVE_FNMATCH_H 1\n\n/* Define to 1 if you have the <fontconfig/fontconfig.h> header file. */\n#define HAVE_FONTCONFIG_FONTCONFIG_H 1\n\n/* Define to 1 if you have the `fork' function. */\n#define HAVE_FORK 1\n\n/* Define to 1 if you have the `fpclass' function. */\n/* #undef HAVE_FPCLASS */\n\n/* Define if FreeType 2 is installed */\n/* #undef HAVE_FREETYPE */\n\n/* Define to 1 if the system has the type `fsblkcnt_t'. */\n#define HAVE_FSBLKCNT_T 1\n\n/* Define to 1 if the system has the type `fsfilcnt_t'. */\n#define HAVE_FSFILCNT_T 1\n\n/* Define to 1 if you have the `fstatfs' function. */\n#define HAVE_FSTATFS 1\n\n/* Define to 1 if you have the `fstatvfs' function. */\n#define HAVE_FSTATVFS 1\n\n/* Define to 1 if you have the <ft2build.h> header file. */\n/* #undef HAVE_FT2BUILD_H */\n\n/* Define to 1 if you have the `ftruncate' function. */\n#define HAVE_FTRUNCATE 1\n\n/* Define to 1 if the system has the type `FT_TrueTypeEngineType'. */\n/* #undef HAVE_FT_TRUETYPEENGINETYPE */\n\n/* Define to 1 if you have the `futimens' function. */\n#define HAVE_FUTIMENS 1\n\n/* Define to 1 if you have the `futimes' function. */\n#define HAVE_FUTIMES 1\n\n/* Define to 1 if you have the `futimesat' function. */\n#define HAVE_FUTIMESAT 1\n\n/* Define to 1 if you have the `getaddrinfo' function. */\n#define HAVE_GETADDRINFO 1\n\n/* Define to 1 if you have the `getattrlist' function. */\n/* #undef HAVE_GETATTRLIST */\n\n/* Define to 1 if you have the `getauxval' function. */\n/* #undef HAVE_GETAUXVAL */\n\n/* Define to 1 if you have the `getifaddrs' function. */\n/* #undef HAVE_GETIFADDRS */\n\n/* Define to 1 if you have the `getnameinfo' function. */\n#define HAVE_GETNAMEINFO 1\n\n/* Define to 1 if you have the `getnetbyname' function. */\n/* #undef HAVE_GETNETBYNAME */\n\n/* Define to 1 if you have the <getopt.h> header file. */\n//#define HAVE_GETOPT_H 1\n\n/* Define to 1 if you have the `getopt_long_only' function. */\n#define HAVE_GETOPT_LONG_ONLY 1\n\n/* Define to 1 if you have the `getprotobyname' function. */\n#define HAVE_GETPROTOBYNAME 1\n\n/* Define to 1 if you have the `getprotobynumber' function. */\n#define HAVE_GETPROTOBYNUMBER 1\n\n/* Define to 1 if you have the `getpwuid' function. */\n//#define HAVE_GETPWUID 1\n\n/* Define to 1 if you have the `getservbyport' function. */\n#define HAVE_GETSERVBYPORT 1\n\n/* Define to 1 if you have the <gettext-po.h> header file. */\n#define HAVE_GETTEXT_PO_H 1\n\n/* Define to 1 if you have the `gettimeofday' function. */\n#define HAVE_GETTIMEOFDAY 1\n\n/* Define to 1 if you have the `getuid' function. */\n//#define HAVE_GETUID 1\n\n/* Define to 1 if you have the `gnutls_cipher_init' function. */\n/* #undef HAVE_GNUTLS_CIPHER_INIT */\n\n/* Define if we have the libgphoto2 development environment */\n/* #undef HAVE_GPHOTO2 */\n\n/* Define if we have the libgphoto2_port development environment */\n/* #undef HAVE_GPHOTO2_PORT */\n\n/* Define to 1 if you have the <grp.h> header file. */\n#define HAVE_GRP_H 1\n\n/* Define to 1 if you have the <gsm/gsm.h> header file. */\n#define HAVE_GSM_GSM_H 1\n\n/* Define to 1 if you have the <gsm.h> header file. */\n/* #undef HAVE_GSM_H */\n\n/* Define to 1 if you have the <gssapi/gssapi_ext.h> header file. */\n/* #undef HAVE_GSSAPI_GSSAPI_EXT_H */\n\n/* Define to 1 if you have the <gssapi/gssapi.h> header file. */\n/* #undef HAVE_GSSAPI_GSSAPI_H */\n\n/* Define to 1 if you have the <ieeefp.h> header file. */\n#define HAVE_IEEEFP_H 1\n\n/* Define to 1 if you have the <ifaddrs.h> header file. */\n#define HAVE_IFADDRS_H 1\n\n/* Define to 1 if you have the `if_nameindex' function. */\n#define HAVE_IF_NAMEINDEX 1\n\n/* Define to 1 if you have the `inet_addr' function. */\n#define HAVE_INET_ADDR 1\n\n/* Define to 1 if you have the <inet/mib2.h> header file. */\n/* #undef HAVE_INET_MIB2_H */\n\n/* Define to 1 if you have the `inet_network' function. */\n#define HAVE_INET_NETWORK 1\n\n/* Define to 1 if you have the `inet_ntop' function. */\n#define HAVE_INET_NTOP 1\n\n/* Define to 1 if you have the `inet_pton' function. */\n#define HAVE_INET_PTON 1\n\n/* Define to 1 if you have the <inttypes.h> header file. */\n#define HAVE_INTTYPES_H 1\n\n/* Define to 1 if you have the `IOHIDManagerCreate' function. */\n/* #undef HAVE_IOHIDMANAGERCREATE */\n\n/* Define to 1 if you have the <IOKit/hid/IOHIDLib.h> header file. */\n/* #undef HAVE_IOKIT_HID_IOHIDLIB_H */\n\n/* Define to 1 if you have the <IOKit/IOKitLib.h> header file. */\n/* #undef HAVE_IOKIT_IOKITLIB_H */\n\n/* Define to 1 if you have the <io.h> header file. */\n#define HAVE_IO_H 1\n\n/* Define to 1 if you have the `isfinite' function. */\n#define HAVE_ISFINITE 1\n\n/* Define to 1 if you have the `isinf' function. */\n#define HAVE_ISINF 1\n\n/* Define to 1 if you have the `isnan' function. */\n#define HAVE_ISNAN 1\n\n/* Define to 1 if you have the `isnanf' function. */\n#define HAVE_ISNANF 1\n\n/* Define to 1 if you have the `j0' function. */\n/* #undef HAVE_J0 */\n\n/* Define to 1 if you have the `j1' function. */\n/* #undef HAVE_J1 */\n\n/* Define to 1 if you have the `jn' function. */\n/* #undef HAVE_JN */\n\n/* Define to 1 if you have the <jpeglib.h> header file. */\n#define HAVE_JPEGLIB_H 1\n\n/* Define to 1 if you have the `kqueue' function. */\n/* #undef HAVE_KQUEUE */\n\n/* Define to 1 if you have the <krb5/krb5.h> header file. */\n/* #undef HAVE_KRB5_KRB5_H */\n\n/* Define to 1 if you have the <kstat.h> header file. */\n/* #undef HAVE_KSTAT_H */\n\n/* Define to 1 if you have the <lber.h> header file. */\n#define HAVE_LBER_H 1\n\n/* Define if you have the LittleCMS development environment */\n#define HAVE_LCMS2 1\n\n/* Define to 1 if you have the <lcms2.h> header file. */\n#define HAVE_LCMS2_H 1\n\n/* Define if you have the OpenLDAP development environment */\n#define HAVE_LDAP 1\n\n/* Define to 1 if you have the `ldap_count_references' function. */\n#define HAVE_LDAP_COUNT_REFERENCES 1\n\n/* Define to 1 if you have the `ldap_first_reference' function. */\n#define HAVE_LDAP_FIRST_REFERENCE 1\n\n/* Define to 1 if you have the <ldap.h> header file. */\n#define HAVE_LDAP_H 1\n\n/* Define to 1 if you have the `ldap_next_reference' function. */\n#define HAVE_LDAP_NEXT_REFERENCE 1\n\n/* Define to 1 if you have the `ldap_parse_reference' function. */\n#define HAVE_LDAP_PARSE_REFERENCE 1\n\n/* Define to 1 if you have the `ldap_parse_sortresponse_control' function. */\n#define HAVE_LDAP_PARSE_SORTRESPONSE_CONTROL 1\n\n/* Define to 1 if you have the `ldap_parse_sort_control' function. */\n/* #undef HAVE_LDAP_PARSE_SORT_CONTROL */\n\n/* Define to 1 if you have the `ldap_parse_vlvresponse_control' function. */\n#define HAVE_LDAP_PARSE_VLVRESPONSE_CONTROL 1\n\n/* Define to 1 if you have the `ldap_parse_vlv_control' function. */\n/* #undef HAVE_LDAP_PARSE_VLV_CONTROL */\n\n/* Define to 1 if you have the `lgamma' function. */\n/* #undef HAVE_LGAMMA */\n\n/* Define to 1 if you have the `lgammaf' function. */\n/* #undef HAVE_LGAMMAF */\n\n/* Define to 1 if you have the `gettextpo' library (-lgettextpo). */\n#define HAVE_LIBGETTEXTPO 1\n\n/* Define to 1 if you have the `i386' library (-li386). */\n/* #undef HAVE_LIBI386 */\n\n/* Define to 1 if you have the `kstat' library (-lkstat). */\n/* #undef HAVE_LIBKSTAT */\n\n/* Define to 1 if you have the `ossaudio' library (-lossaudio). */\n/* #undef HAVE_LIBOSSAUDIO */\n\n/* Define to 1 if you have the `procstat' library (-lprocstat). */\n/* #undef HAVE_LIBPROCSTAT */\n\n/* Define to 1 if you have the <libprocstat.h> header file. */\n/* #undef HAVE_LIBPROCSTAT_H */\n\n/* Define to 1 if you have the <libproc.h> header file. */\n/* #undef HAVE_LIBPROC_H */\n\n/* Define to 1 if you have the <libudev.h> header file. */\n/* #undef HAVE_LIBUDEV_H */\n\n/* Define to 1 if you have the <libunwind.h> header file. */\n/* #undef HAVE_LIBUNWIND_H */\n\n/* Define to 1 if you have the <libv4l1.h> header file. */\n/* #undef HAVE_LIBV4L1_H */\n\n/* Define if you have the libxml2 library */\n#define HAVE_LIBXML2 1\n\n/* Define to 1 if you have the <libxml/parser.h> header file. */\n#define HAVE_LIBXML_PARSER_H 1\n\n/* Define to 1 if you have the <libxml/SAX2.h> header file. */\n#define HAVE_LIBXML_SAX2_H 1\n\n/* Define to 1 if you have the <libxml/xmlsave.h> header file. */\n#define HAVE_LIBXML_XMLSAVE_H 1\n\n/* Define if you have the X Shape extension */\n/* #undef HAVE_LIBXSHAPE */\n\n/* Define to 1 if you have the <libxslt/pattern.h> header file. */\n#define HAVE_LIBXSLT_PATTERN_H 1\n\n/* Define to 1 if you have the <libxslt/transform.h> header file. */\n#define HAVE_LIBXSLT_TRANSFORM_H 1\n\n/* Define if you have the X Shm extension */\n/* #undef HAVE_LIBXXSHM */\n\n/* Define to 1 if you have the <link.h> header file. */\n/* #undef HAVE_LINK_H */\n\n/* Define if <linux/joystick.h> defines the Linux 2.2 joystick API */\n/* #undef HAVE_LINUX_22_JOYSTICK_API */\n\n/* Define to 1 if you have the <linux/capi.h> header file. */\n/* #undef HAVE_LINUX_CAPI_H */\n\n/* Define to 1 if you have the <linux/cdrom.h> header file. */\n/* #undef HAVE_LINUX_CDROM_H */\n\n/* Define to 1 if you have the <linux/compiler.h> header file. */\n/* #undef HAVE_LINUX_COMPILER_H */\n\n/* Define to 1 if you have the <linux/filter.h> header file. */\n/* #undef HAVE_LINUX_FILTER_H */\n\n/* Define if Linux-style gethostbyname_r and gethostbyaddr_r are available */\n/* #undef HAVE_LINUX_GETHOSTBYNAME_R_6 */\n\n/* Define to 1 if you have the <linux/hdreg.h> header file. */\n/* #undef HAVE_LINUX_HDREG_H */\n\n/* Define to 1 if you have the <linux/hidraw.h> header file. */\n/* #undef HAVE_LINUX_HIDRAW_H */\n\n/* Define to 1 if you have the <linux/input.h> header file. */\n/* #undef HAVE_LINUX_INPUT_H */\n\n/* Define to 1 if you have the <linux/ioctl.h> header file. */\n/* #undef HAVE_LINUX_IOCTL_H */\n\n/* Define to 1 if you have the <linux/ipx.h> header file. */\n/* #undef HAVE_LINUX_IPX_H */\n\n/* Define to 1 if you have the <linux/irda.h> header file. */\n/* #undef HAVE_LINUX_IRDA_H */\n\n/* Define to 1 if you have the <linux/joystick.h> header file. */\n/* #undef HAVE_LINUX_JOYSTICK_H */\n\n/* Define to 1 if you have the <linux/major.h> header file. */\n/* #undef HAVE_LINUX_MAJOR_H */\n\n/* Define to 1 if you have the <linux/param.h> header file. */\n/* #undef HAVE_LINUX_PARAM_H */\n\n/* Define to 1 if you have the <linux/rtnetlink.h> header file. */\n/* #undef HAVE_LINUX_RTNETLINK_H */\n\n/* Define to 1 if you have the <linux/serial.h> header file. */\n/* #undef HAVE_LINUX_SERIAL_H */\n\n/* Define to 1 if you have the <linux/types.h> header file. */\n/* #undef HAVE_LINUX_TYPES_H */\n\n/* Define to 1 if you have the <linux/ucdrom.h> header file. */\n/* #undef HAVE_LINUX_UCDROM_H */\n\n/* Define to 1 if you have the <linux/videodev2.h> header file. */\n/* #undef HAVE_LINUX_VIDEODEV2_H */\n\n/* Define to 1 if you have the <linux/videodev.h> header file. */\n/* #undef HAVE_LINUX_VIDEODEV_H */\n\n/* Define to 1 if you have the `llrint' function. */\n#define HAVE_LLRINT 1\n\n/* Define to 1 if you have the `llrintf' function. */\n#define HAVE_LLRINTF 1\n\n/* Define to 1 if you have the `llround' function. */\n#define HAVE_LLROUND 1\n\n/* Define to 1 if you have the `llroundf' function. */\n#define HAVE_LLROUNDF 1\n\n/* Define to 1 if you have the `log1p' function. */\n/* #undef HAVE_LOG1P */\n\n/* Define to 1 if you have the `log1pf' function. */\n/* #undef HAVE_LOG1PF */\n\n/* Define to 1 if you have the `log2' function. */\n#define HAVE_LOG2 1\n\n/* Define to 1 if you have the `log2f' function. */\n#define HAVE_LOG2F 1\n\n/* Define to 1 if the system has the type `long long'. */\n#define HAVE_LONG_LONG 1\n\n/* Define to 1 if you have the `lrint' function. */\n#define HAVE_LRINT 1\n\n/* Define to 1 if you have the `lrintf' function. */\n#define HAVE_LRINTF 1\n\n/* Define to 1 if you have the `lround' function. */\n#define HAVE_LROUND 1\n\n/* Define to 1 if you have the `lroundf' function. */\n#define HAVE_LROUNDF 1\n\n/* Define to 1 if you have the `lstat' function. */\n#define HAVE_LSTAT 1\n\n/* Define to 1 if you have the <lwp.h> header file. */\n/* #undef HAVE_LWP_H */\n\n/* Define to 1 if you have the <machine/cpu.h> header file. */\n/* #undef HAVE_MACHINE_CPU_H */\n\n/* Define to 1 if you have the <machine/limits.h> header file. */\n/* #undef HAVE_MACHINE_LIMITS_H */\n\n/* Define to 1 if you have the <machine/sysarch.h> header file. */\n/* #undef HAVE_MACHINE_SYSARCH_H */\n\n/* Define to 1 if you have the <mach/machine.h> header file. */\n/* #undef HAVE_MACH_MACHINE_H */\n\n/* Define to 1 if you have the <mach/mach.h> header file. */\n/* #undef HAVE_MACH_MACH_H */\n\n/* Define to 1 if you have the <mach-o/dyld_images.h> header file. */\n/* #undef HAVE_MACH_O_DYLD_IMAGES_H */\n\n/* Define to 1 if you have the <mach-o/loader.h> header file. */\n/* #undef HAVE_MACH_O_LOADER_H */\n\n/* Define to 1 if you have the <mach-o/nlist.h> header file. */\n/* #undef HAVE_MACH_O_NLIST_H */\n\n/* Define to 1 if you have the `memmove' function. */\n#define HAVE_MEMMOVE 1\n\n/* Define to 1 if you have the <memory.h> header file. */\n#define HAVE_MEMORY_H 1\n\n/* Define to 1 if you have the <Metal/Metal.h> header file. */\n/* #undef HAVE_METAL_METAL_H */\n\n/* Define to 1 if you have the `mmap' function. */\n//#define HAVE_MMAP 1\n\n/* Define to 1 if you have the <mntent.h> header file. */\n#define HAVE_MNTENT_H 1\n\n/* Define to 1 if the system has the type `mode_t'. */\n#define HAVE_MODE_T 1\n\n/* Define to 1 if you have the `mousemask' function. */\n#define HAVE_MOUSEMASK 1\n\n/* Define to 1 if you have the <mpg123.h> header file. */\n/* #undef HAVE_MPG123_H */\n\n/* Define to 1 if you have the <ncurses.h> header file. */\n#define HAVE_NCURSES_H 1\n\n/* Define to 1 if you have the `nearbyint' function. */\n/* #undef HAVE_NEARBYINT */\n\n/* Define to 1 if you have the `nearbyintf' function. */\n/* #undef HAVE_NEARBYINTF */\n\n/* Define to 1 if you have the <netdb.h> header file. */\n#define HAVE_NETDB_H 1\n\n/* Define to 1 if you have the <netinet/icmp_var.h> header file. */\n/* #undef HAVE_NETINET_ICMP_VAR_H */\n\n/* Define to 1 if you have the <netinet/if_ether.h> header file. */\n/* #undef HAVE_NETINET_IF_ETHER_H */\n\n/* Define to 1 if you have the <netinet/if_inarp.h> header file. */\n/* #undef HAVE_NETINET_IF_INARP_H */\n\n/* Define to 1 if you have the <netinet/in.h> header file. */\n#define HAVE_NETINET_IN_H 1\n\n/* Define to 1 if you have the <netinet/in_pcb.h> header file. */\n/* #undef HAVE_NETINET_IN_PCB_H */\n\n/* Define to 1 if you have the <netinet/in_systm.h> header file. */\n#define HAVE_NETINET_IN_SYSTM_H 1\n\n/* Define to 1 if you have the <netinet/ip.h> header file. */\n#define HAVE_NETINET_IP_H 1\n\n/* Define to 1 if you have the <netinet/ip_icmp.h> header file. */\n#define HAVE_NETINET_IP_ICMP_H 1\n\n/* Define to 1 if you have the <netinet/ip_var.h> header file. */\n/* #undef HAVE_NETINET_IP_VAR_H */\n\n/* Define to 1 if you have the <netinet/tcp_fsm.h> header file. */\n/* #undef HAVE_NETINET_TCP_FSM_H */\n\n/* Define to 1 if you have the <netinet/tcp.h> header file. */\n#define HAVE_NETINET_TCP_H 1\n\n/* Define to 1 if you have the <netinet/tcp_timer.h> header file. */\n/* #undef HAVE_NETINET_TCP_TIMER_H */\n\n/* Define to 1 if you have the <netinet/tcp_var.h> header file. */\n/* #undef HAVE_NETINET_TCP_VAR_H */\n\n/* Define to 1 if you have the <netinet/udp.h> header file. */\n#define HAVE_NETINET_UDP_H 1\n\n/* Define to 1 if you have the <netinet/udp_var.h> header file. */\n/* #undef HAVE_NETINET_UDP_VAR_H */\n\n/* Define to 1 if you have the <netipx/ipx.h> header file. */\n/* #undef HAVE_NETIPX_IPX_H */\n\n/* Define to 1 if you have the <net/if_arp.h> header file. */\n/* #undef HAVE_NET_IF_ARP_H */\n\n/* Define to 1 if you have the <net/if_dl.h> header file. */\n/* #undef HAVE_NET_IF_DL_H */\n\n/* Define to 1 if you have the <net/if.h> header file. */\n#define HAVE_NET_IF_H 1\n\n/* Define to 1 if you have the <net/if_types.h> header file. */\n/* #undef HAVE_NET_IF_TYPES_H */\n\n/* Define to 1 if you have the <net/route.h> header file. */\n/* #undef HAVE_NET_ROUTE_H */\n\n/* Define to 1 if `_msg_ptr' is a member of `ns_msg'. */\n#define HAVE_NS_MSG__MSG_PTR 1\n\n/* Define to 1 if the system has the type `off_t'. */\n#define HAVE_OFF_T 1\n\n/* Define if mkdir takes only one argument */\n/* #undef HAVE_ONE_ARG_MKDIR */\n\n/* Define to 1 if OpenAL is available */\n/* #undef HAVE_OPENAL */\n\n/* Define to 1 if you have the <OpenAL/al.h> header file. */\n/* #undef HAVE_OPENAL_AL_H */\n\n/* Define to 1 if you have the <OpenCL/opencl.h> header file. */\n/* #undef HAVE_OPENCL_OPENCL_H */\n\n/* Define to 1 if `numaudioengines' is a member of `oss_sysinfo'. */\n/* #undef HAVE_OSS_SYSINFO_NUMAUDIOENGINES */\n\n/* Define to 1 if you have the <pcap/pcap.h> header file. */\n/* #undef HAVE_PCAP_PCAP_H */\n\n/* Define to 1 if you have the `pclose' function. */\n#define HAVE_PCLOSE 1\n\n/* Define to 1 if the system has the type `pid_t'. */\n#define HAVE_PID_T 1\n\n/* Define to 1 if you have the `pipe2' function. */\n#define HAVE_PIPE2 1\n\n/* Define to 1 if you have the <png.h> header file. */\n#define HAVE_PNG_H 1\n\n/* Define to 1 if you have the `poll' function. */\n#define HAVE_POLL 1\n\n/* Define to 1 if you have the <poll.h> header file. */\n#define HAVE_POLL_H 1\n\n/* Define to 1 if you have the `popen' function. */\n#define HAVE_POPEN 1\n\n/* Define to 1 if you have the `port_create' function. */\n/* #undef HAVE_PORT_CREATE */\n\n/* Define to 1 if you have the <port.h> header file. */\n/* #undef HAVE_PORT_H */\n\n/* Define to 1 if you have the `powl' function. */\n/* #undef HAVE_POWL */\n\n/* Define if we can use ppdev.h for parallel port access */\n/* #undef HAVE_PPDEV */\n\n/* Define to 1 if you have the `prctl' function. */\n/* #undef HAVE_PRCTL */\n\n/* Define to 1 if you have the `pread' function. */\n#define HAVE_PREAD 1\n\n/* Define to 1 if you have the <process.h> header file. */\n#define HAVE_PROCESS_H 1\n\n/* Define to 1 if you have the `proc_pidinfo' function. */\n/* #undef HAVE_PROC_PIDINFO */\n\n/* Define to 1 if you have the `pthread_attr_get_np' function. */\n/* #undef HAVE_PTHREAD_ATTR_GET_NP */\n\n/* Define to 1 if you have the `pthread_getattr_np' function. */\n#define HAVE_PTHREAD_GETATTR_NP 1\n\n/* Define to 1 if you have the `pthread_getthreadid_np' function. */\n/* #undef HAVE_PTHREAD_GETTHREADID_NP */\n\n/* Define to 1 if you have the `pthread_get_stackaddr_np' function. */\n/* #undef HAVE_PTHREAD_GET_STACKADDR_NP */\n\n/* Define to 1 if you have the `pthread_get_stacksize_np' function. */\n/* #undef HAVE_PTHREAD_GET_STACKSIZE_NP */\n\n/* Define to 1 if you have the <pthread.h> header file. */\n#define HAVE_PTHREAD_H 1\n\n/* Define to 1 if you have the <pthread_np.h> header file. */\n/* #undef HAVE_PTHREAD_NP_H */\n\n/* Define to 1 if you have the <pulse/pulseaudio.h> header file. */\n/* #undef HAVE_PULSE_PULSEAUDIO_H */\n\n/* Define to 1 if you have the <pwd.h> header file. */\n//#define HAVE_PWD_H 1\n\n/* Define to 1 if you have the `pwrite' function. */\n#define HAVE_PWRITE 1\n\n/* Define to 1 if you have the <QuickTime/ImageCompression.h> header file. */\n/* #undef HAVE_QUICKTIME_IMAGECOMPRESSION_H */\n\n/* Define to 1 if you have the `readdir' function. */\n#define HAVE_READDIR 1\n\n/* Define to 1 if you have the `readlink' function. */\n#define HAVE_READLINK 1\n\n/* Define to 1 if you have the `remainder' function. */\n/* #undef HAVE_REMAINDER */\n\n/* Define to 1 if you have the `remainderf' function. */\n/* #undef HAVE_REMAINDERF */\n\n/* Define to 1 if the system has the type `request_sense'. */\n/* #undef HAVE_REQUEST_SENSE */\n\n/* Define if you have the resolver library and header */\n#define HAVE_RESOLV 1\n\n/* Define to 1 if you have the <resolv.h> header file. */\n#define HAVE_RESOLV_H 1\n\n/* Define to 1 if you have the `rint' function. */\n#define HAVE_RINT 1\n\n/* Define to 1 if you have the `rintf' function. */\n#define HAVE_RINTF 1\n\n/* Define to 1 if you have the `round' function. */\n#define HAVE_ROUND 1\n\n/* Define to 1 if you have the `roundf' function. */\n#define HAVE_ROUNDF 1\n\n/* Define to 1 if you have the <sched.h> header file. */\n#define HAVE_SCHED_H 1\n\n/* Define to 1 if you have the `sched_setaffinity' function. */\n/* #undef HAVE_SCHED_SETAFFINITY */\n\n/* Define to 1 if you have the `sched_yield' function. */\n#define HAVE_SCHED_YIELD 1\n\n/* Define to 1 if `cmd' is a member of `scsireq_t'. */\n/* #undef HAVE_SCSIREQ_T_CMD */\n\n/* Define to 1 if you have the <scsi/scsi.h> header file. */\n/* #undef HAVE_SCSI_SCSI_H */\n\n/* Define to 1 if you have the <scsi/scsi_ioctl.h> header file. */\n/* #undef HAVE_SCSI_SCSI_IOCTL_H */\n\n/* Define to 1 if you have the <scsi/sg.h> header file. */\n/* #undef HAVE_SCSI_SG_H */\n\n/* Define to 1 if you have the <SDL2/SDL.h> header file. */\n/* #undef HAVE_SDL2_SDL_H */\n\n/* Define to 1 if you have the <Security/Security.h> header file. */\n/* #undef HAVE_SECURITY_SECURITY_H */\n\n/* Define to 1 if you have the `select' function. */\n#define HAVE_SELECT 1\n\n/* Define to 1 if you have the `sendmsg' function. */\n#define HAVE_SENDMSG 1\n\n/* Define to 1 if you have the `setproctitle' function. */\n/* #undef HAVE_SETPROCTITLE */\n\n/* Define to 1 if you have the `setprogname' function. */\n/* #undef HAVE_SETPROGNAME */\n\n/* Define to 1 if you have the `setrlimit' function. */\n#define HAVE_SETRLIMIT 1\n\n/* Define to 1 if you have the `settimeofday' function. */\n#define HAVE_SETTIMEOFDAY 1\n\n/* Define to 1 if `interface_id' is a member of `sg_io_hdr_t'. */\n/* #undef HAVE_SG_IO_HDR_T_INTERFACE_ID */\n\n/* Define if sigaddset is supported */\n#define HAVE_SIGADDSET 1\n\n/* Define to 1 if you have the `sigaltstack' function. */\n/* #undef HAVE_SIGALTSTACK */\n\n/* Define to 1 if `si_fd' is a member of `siginfo_t'. */\n/* #undef HAVE_SIGINFO_T_SI_FD */\n\n/* Define to 1 if you have the `sigprocmask' function. */\n#define HAVE_SIGPROCMASK 1\n\n/* Define to 1 if the system has the type `sigset_t'. */\n#define HAVE_SIGSET_T 1\n\n/* Define to 1 if the system has the type `size_t'. */\n#define HAVE_SIZE_T 1\n\n/* Define to 1 if you have the `snprintf' function. */\n#define HAVE_SNPRINTF 1\n\n/* Define to 1 if you have the `socketpair' function. */\n#define HAVE_SOCKETPAIR 1\n\n/* Define to 1 if the system has the type `ssize_t'. */\n#define HAVE_SSIZE_T 1\n\n/* Define to 1 if you have the `SSLCopyPeerCertificates' function. */\n/* #undef HAVE_SSLCOPYPEERCERTIFICATES */\n\n/* Define to 1 if you have the `statfs' function. */\n#define HAVE_STATFS 1\n\n/* Define to 1 if you have the `statvfs' function. */\n#define HAVE_STATVFS 1\n\n/* Define to 1 if you have the <stdbool.h> header file. */\n#define HAVE_STDBOOL_H 1\n\n/* Define to 1 if you have the <stdint.h> header file. */\n#define HAVE_STDINT_H 1\n\n/* Define to 1 if you have the <stdlib.h> header file. */\n#define HAVE_STDLIB_H 1\n\n/* Define to 1 if you have the `strcasecmp' function. */\n#define HAVE_STRCASECMP 1\n\n/* Define to 1 if you have the `strdup' function. */\n#define HAVE_STRDUP 1\n\n/* Define to 1 if you have the `strerror' function. */\n#define HAVE_STRERROR 1\n\n/* Define to 1 if you have the <strings.h> header file. */\n#define HAVE_STRINGS_H 1\n\n/* Define to 1 if you have the <string.h> header file. */\n#define HAVE_STRING_H 1\n\n/* Define to 1 if you have the `strncasecmp' function. */\n/* #define HAVE_STRNCASECMP 1 */\n\n/* Define to 1 if you have the `strnlen' function. */\n/* #undef HAVE_STRNLEN */\n\n/* Define to 1 if you have the <stropts.h> header file. */\n/* #undef HAVE_STROPTS_H */\n\n/* Define to 1 if you have the `strtold' function. */\n#define HAVE_STRTOLD 1\n\n/* Define to 1 if you have the `strtoll' function. */\n#define HAVE_STRTOLL 1\n\n/* Define to 1 if you have the `strtoull' function. */\n#define HAVE_STRTOULL 1\n\n/* Define to 1 if `d_reclen' is a member of `struct dirent'. */\n/* #undef HAVE_STRUCT_DIRENT_D_RECLEN */\n\n/* Define to 1 if `direction' is a member of `struct ff_effect'. */\n/* #undef HAVE_STRUCT_FF_EFFECT_DIRECTION */\n\n/* Define to 1 if `icps_inhist' is a member of `struct icmpstat'. */\n/* #undef HAVE_STRUCT_ICMPSTAT_ICPS_INHIST */\n\n/* Define to 1 if `icps_outhist' is a member of `struct icmpstat'. */\n/* #undef HAVE_STRUCT_ICMPSTAT_ICPS_OUTHIST */\n\n/* Define to 1 if `ifr_hwaddr' is a member of `struct ifreq'. */\n#define HAVE_STRUCT_IFREQ_IFR_HWADDR 1\n\n/* Define to 1 if `ips_total' is a member of `struct ipstat'. */\n/* #undef HAVE_STRUCT_IPSTAT_IPS_TOTAL */\n\n/* Define to 1 if `ips_total' is a member of `struct ip_stats'. */\n/* #undef HAVE_STRUCT_IP_STATS_IPS_TOTAL */\n\n/* Define to 1 if the system has the type `struct link_map'. */\n/* #undef HAVE_STRUCT_LINK_MAP */\n\n/* Define to 1 if `msg_accrights' is a member of `struct msghdr'. */\n/* #undef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS */\n\n/* Define to 1 if `mt_blkno' is a member of `struct mtget'. */\n#define HAVE_STRUCT_MTGET_MT_BLKNO 1\n\n/* Define to 1 if `mt_blksiz' is a member of `struct mtget'. */\n/* #undef HAVE_STRUCT_MTGET_MT_BLKSIZ */\n\n/* Define to 1 if `mt_gstat' is a member of `struct mtget'. */\n#define HAVE_STRUCT_MTGET_MT_GSTAT 1\n\n/* Define to 1 if `name' is a member of `struct option'. */\n#define HAVE_STRUCT_OPTION_NAME 1\n\n/* Define to 1 if the system has the type `struct r_debug'. */\n/* #undef HAVE_STRUCT_R_DEBUG */\n\n/* Define to 1 if `sin6_scope_id' is a member of `struct sockaddr_in6'. */\n#define HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID 1\n\n/* Define to 1 if `sa_len' is a member of `struct sockaddr'. */\n/* #undef HAVE_STRUCT_SOCKADDR_SA_LEN */\n\n/* Define to 1 if `sun_len' is a member of `struct sockaddr_un'. */\n/* #undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN */\n\n/* Define to 1 if `f_bavail' is a member of `struct statfs'. */\n#define HAVE_STRUCT_STATFS_F_BAVAIL 1\n\n/* Define to 1 if `f_bfree' is a member of `struct statfs'. */\n#define HAVE_STRUCT_STATFS_F_BFREE 1\n\n/* Define to 1 if `f_favail' is a member of `struct statfs'. */\n/* #undef HAVE_STRUCT_STATFS_F_FAVAIL */\n\n/* Define to 1 if `f_ffree' is a member of `struct statfs'. */\n#define HAVE_STRUCT_STATFS_F_FFREE 1\n\n/* Define to 1 if `f_frsize' is a member of `struct statfs'. */\n/* #undef HAVE_STRUCT_STATFS_F_FRSIZE */\n\n/* Define to 1 if `f_namelen' is a member of `struct statfs'. */\n#define HAVE_STRUCT_STATFS_F_NAMELEN 1\n\n/* Define to 1 if `f_blocks' is a member of `struct statvfs'. */\n#define HAVE_STRUCT_STATVFS_F_BLOCKS 1\n\n/* Define to 1 if `st_atim' is a member of `struct stat'. */\n#define HAVE_STRUCT_STAT_ST_ATIM 1\n\n/* Define to 1 if `st_atimespec' is a member of `struct stat'. */\n/* #undef HAVE_STRUCT_STAT_ST_ATIMESPEC */\n\n/* Define to 1 if `st_birthtim' is a member of `struct stat'. */\n#define HAVE_STRUCT_STAT_ST_BIRTHTIM 1\n\n/* Define to 1 if `st_birthtime' is a member of `struct stat'. */\n#define HAVE_STRUCT_STAT_ST_BIRTHTIME 1\n\n/* Define to 1 if `st_birthtimespec' is a member of `struct stat'. */\n/* #undef HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC */\n\n/* Define to 1 if `st_blocks' is a member of `struct stat'. */\n#define HAVE_STRUCT_STAT_ST_BLOCKS 1\n\n/* Define to 1 if `st_ctim' is a member of `struct stat'. */\n#define HAVE_STRUCT_STAT_ST_CTIM 1\n\n/* Define to 1 if `st_ctimespec' is a member of `struct stat'. */\n/* #undef HAVE_STRUCT_STAT_ST_CTIMESPEC */\n\n/* Define to 1 if `st_mtim' is a member of `struct stat'. */\n#define HAVE_STRUCT_STAT_ST_MTIM 1\n\n/* Define to 1 if `st_mtimespec' is a member of `struct stat'. */\n/* #undef HAVE_STRUCT_STAT_ST_MTIMESPEC */\n\n/* Define to 1 if `__st_birthtim' is a member of `struct stat'. */\n/* #undef HAVE_STRUCT_STAT___ST_BIRTHTIM */\n\n/* Define to 1 if `__st_birthtime' is a member of `struct stat'. */\n/* #undef HAVE_STRUCT_STAT___ST_BIRTHTIME */\n\n/* Define to 1 if `tcps_connattempt' is a member of `struct tcpstat'. */\n/* #undef HAVE_STRUCT_TCPSTAT_TCPS_CONNATTEMPT */\n\n/* Define to 1 if `tcps_connattempt' is a member of `struct tcp_stats'. */\n/* #undef HAVE_STRUCT_TCP_STATS_TCPS_CONNATTEMPT */\n\n/* Define to 1 if `udps_ipackets' is a member of `struct udpstat'. */\n/* #undef HAVE_STRUCT_UDPSTAT_UDPS_IPACKETS */\n\n/* Define to 1 if the system has the type `struct xinpgen'. */\n/* #undef HAVE_STRUCT_XINPGEN */\n\n/* Define to 1 if the system has the type `struct __res_state'. */\n#define HAVE_STRUCT___RES_STATE 1\n\n/* Define to 1 if `_u._ext.nscount6' is a member of `struct __res_state'. */\n/* #undef HAVE_STRUCT___RES_STATE__U__EXT_NSCOUNT6 */\n\n/* Define to 1 if you have the `symlink' function. */\n#define HAVE_SYMLINK 1\n\n/* Define to 1 if you have the <syscall.h> header file. */\n/* #undef HAVE_SYSCALL_H */\n\n/* Define to 1 if you have the `sysinfo' function. */\n/* #undef HAVE_SYSINFO */\n\n/* Define to 1 if you have the <sys/asoundlib.h> header file. */\n/* #undef HAVE_SYS_ASOUNDLIB_H */\n\n/* Define to 1 if you have the <sys/attr.h> header file. */\n/* #undef HAVE_SYS_ATTR_H */\n\n/* Define to 1 if you have the <sys/auxv.h> header file. */\n/* #undef HAVE_SYS_AUXV_H */\n\n/* Define to 1 if you have the <sys/cdio.h> header file. */\n/* #undef HAVE_SYS_CDIO_H */\n\n/* Define to 1 if you have the <sys/elf32.h> header file. */\n#define HAVE_SYS_ELF32_H 1\n\n/* Define to 1 if you have the <sys/epoll.h> header file. */\n/* #undef HAVE_SYS_EPOLL_H */\n\n/* Define to 1 if you have the <sys/event.h> header file. */\n/* #undef HAVE_SYS_EVENT_H */\n\n/* Define to 1 if you have the <sys/exec_elf.h> header file. */\n/* #undef HAVE_SYS_EXEC_ELF_H */\n\n/* Define to 1 if you have the <sys/filio.h> header file. */\n/* #undef HAVE_SYS_FILIO_H */\n\n/* Define to 1 if you have the <sys/inotify.h> header file. */\n/* #undef HAVE_SYS_INOTIFY_H */\n\n/* Define to 1 if you have the <sys/ioctl.h> header file. */\n//#define HAVE_SYS_IOCTL_H 1\n\n/* Define to 1 if you have the <sys/ipc.h> header file. */\n#define HAVE_SYS_IPC_H 1\n\n/* Define to 1 if you have the <sys/limits.h> header file. */\n/* #undef HAVE_SYS_LIMITS_H */\n\n/* Define to 1 if you have the <sys/link.h> header file. */\n/* #undef HAVE_SYS_LINK_H */\n\n/* Define to 1 if you have the <sys/mman.h> header file. */\n//#define HAVE_SYS_MMAN_H 1\n\n/* Define to 1 if you have the <sys/modem.h> header file. */\n/* #undef HAVE_SYS_MODEM_H */\n\n/* Define to 1 if you have the <sys/mount.h> header file. */\n#define HAVE_SYS_MOUNT_H 1\n\n/* Define to 1 if you have the <sys/msg.h> header file. */\n#define HAVE_SYS_MSG_H 1\n\n/* Define to 1 if you have the <sys/mtio.h> header file. */\n#define HAVE_SYS_MTIO_H 1\n\n/* Define to 1 if you have the <sys/param.h> header file. */\n//#define HAVE_SYS_PARAM_H 1\n\n/* Define to 1 if you have the <sys/poll.h> header file. */\n#define HAVE_SYS_POLL_H 1\n\n/* Define to 1 if you have the <sys/prctl.h> header file. */\n/* #undef HAVE_SYS_PRCTL_H */\n\n/* Define to 1 if you have the <sys/protosw.h> header file. */\n/* #undef HAVE_SYS_PROTOSW_H */\n\n/* Define to 1 if you have the <sys/ptrace.h> header file. */\n/* #undef HAVE_SYS_PTRACE_H */\n\n/* Define to 1 if you have the <sys/queue.h> header file. */\n#define HAVE_SYS_QUEUE_H 1\n\n/* Define to 1 if you have the <sys/resource.h> header file. */\n#define HAVE_SYS_RESOURCE_H 1\n\n/* Define to 1 if you have the <sys/scsiio.h> header file. */\n/* #undef HAVE_SYS_SCSIIO_H */\n\n/* Define to 1 if you have the <sys/shm.h> header file. */\n#define HAVE_SYS_SHM_H 1\n\n/* Define to 1 if you have the <sys/signal.h> header file. */\n#define HAVE_SYS_SIGNAL_H 1\n\n/* Define to 1 if you have the <sys/socketvar.h> header file. */\n/* #undef HAVE_SYS_SOCKETVAR_H */\n\n/* Define to 1 if you have the <sys/socket.h> header file. */\n#define HAVE_SYS_SOCKET_H 1\n\n/* Define to 1 if you have the <sys/sockio.h> header file. */\n/* #undef HAVE_SYS_SOCKIO_H */\n\n/* Define to 1 if you have the <sys/statfs.h> header file. */\n#define HAVE_SYS_STATFS_H 1\n\n/* Define to 1 if you have the <sys/statvfs.h> header file. */\n#define HAVE_SYS_STATVFS_H 1\n\n/* Define to 1 if you have the <sys/stat.h> header file. */\n#define HAVE_SYS_STAT_H 1\n\n/* Define to 1 if you have the <sys/strtio.h> header file. */\n/* #undef HAVE_SYS_STRTIO_H */\n\n/* Define to 1 if you have the <sys/syscall.h> header file. */\n/* #undef HAVE_SYS_SYSCALL_H */\n\n/* Define to 1 if you have the <sys/sysctl.h> header file. */\n/* #undef HAVE_SYS_SYSCTL_H */\n\n/* Define to 1 if you have the <sys/sysinfo.h> header file. */\n/* #undef HAVE_SYS_SYSINFO_H */\n\n/* Define to 1 if you have the <sys/thr.h> header file. */\n/* #undef HAVE_SYS_THR_H */\n\n/* Define to 1 if you have the <sys/tihdr.h> header file. */\n/* #undef HAVE_SYS_TIHDR_H */\n\n/* Define to 1 if you have the <sys/timeout.h> header file. */\n/* #undef HAVE_SYS_TIMEOUT_H */\n\n/* Define to 1 if you have the <sys/times.h> header file. */\n#define HAVE_SYS_TIMES_H 1\n\n/* Define to 1 if you have the <sys/time.h> header file. */\n//#define HAVE_SYS_TIME_H 1\n\n/* Define to 1 if you have the <sys/types.h> header file. */\n#define HAVE_SYS_TYPES_H 1\n\n/* Define to 1 if you have the <sys/ucontext.h> header file. */\n/* #undef HAVE_SYS_UCONTEXT_H */\n\n/* Define to 1 if you have the <sys/uio.h> header file. */\n#define HAVE_SYS_UIO_H 1\n\n/* Define to 1 if you have the <sys/un.h> header file. */\n#define HAVE_SYS_UN_H 1\n\n/* Define to 1 if you have the <sys/user.h> header file. */\n/* #undef HAVE_SYS_USER_H */\n\n/* Define to 1 if you have the <sys/utsname.h> header file. */\n#define HAVE_SYS_UTSNAME_H 1\n\n/* Define to 1 if you have the <sys/vfs.h> header file. */\n#define HAVE_SYS_VFS_H 1\n\n/* Define to 1 if you have the <sys/vm86.h> header file. */\n/* #undef HAVE_SYS_VM86_H */\n\n/* Define to 1 if you have the <sys/vnode.h> header file. */\n/* #undef HAVE_SYS_VNODE_H */\n\n/* Define to 1 if you have the <sys/wait.h> header file. */\n/* #define HAVE_SYS_WAIT_H 1 */\n\n/* Define to 1 if you have the `tcdrain' function. */\n#define HAVE_TCDRAIN 1\n\n/* Define to 1 if you have the <termios.h> header file. */\n#define HAVE_TERMIOS_H 1\n\n/* Define to 1 if you have the `thr_kill2' function. */\n/* #undef HAVE_THR_KILL2 */\n\n/* Define to 1 if you have the <tiffio.h> header file. */\n#define HAVE_TIFFIO_H 1\n\n/* Define to 1 if you have the `timegm' function. */\n#define HAVE_TIMEGM 1\n\n/* Define if you have the timezone variable */\n#define HAVE_TIMEZONE 1\n\n/* Define to 1 if you have the `trunc' function. */\n#define HAVE_TRUNC 1\n\n/* Define to 1 if you have the `truncf' function. */\n#define HAVE_TRUNCF 1\n\n/* Define to 1 if you have the `udev' library (-ludev). */\n/* #undef HAVE_UDEV */\n\n/* Define to 1 if you have the <unistd.h> header file. */\n//#define HAVE_UNISTD_H 1\n\n/* Define to 1 if you have the `usleep' function. */\n//#define HAVE_USLEEP 1\n\n/* Define to 1 if you have the <utime.h> header file. */\n//#define HAVE_UTIME_H 1\n\n/* Define to 1 if you have the <valgrind/memcheck.h> header file. */\n/* #undef HAVE_VALGRIND_MEMCHECK_H */\n\n/* Define to 1 if you have the <valgrind/valgrind.h> header file. */\n/* #undef HAVE_VALGRIND_VALGRIND_H */\n\n/* Define to 1 if you have the `vsnprintf' function. */\n#define HAVE_VSNPRINTF 1\n\n/* Define to 1 if you have the <X11/extensions/shape.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_SHAPE_H */\n\n/* Define to 1 if you have the <X11/extensions/Xcomposite.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XCOMPOSITE_H */\n\n/* Define to 1 if you have the <X11/extensions/xf86vmode.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XF86VMODE_H */\n\n/* Define to 1 if you have the <X11/extensions/xf86vmproto.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XF86VMPROTO_H */\n\n/* Define to 1 if you have the <X11/extensions/Xfixes.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XFIXES_H */\n\n/* Define to 1 if you have the <X11/extensions/Xinerama.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XINERAMA_H */\n\n/* Define to 1 if you have the <X11/extensions/XInput2.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XINPUT2_H */\n\n/* Define to 1 if you have the <X11/extensions/XInput.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XINPUT_H */\n\n/* Define to 1 if you have the <X11/extensions/Xrandr.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XRANDR_H */\n\n/* Define to 1 if you have the <X11/extensions/Xrender.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XRENDER_H */\n\n/* Define to 1 if you have the <X11/extensions/XShm.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XSHM_H */\n\n/* Define to 1 if you have the <X11/Xcursor/Xcursor.h> header file. */\n/* #undef HAVE_X11_XCURSOR_XCURSOR_H */\n\n/* Define to 1 if you have the <X11/XKBlib.h> header file. */\n/* #undef HAVE_X11_XKBLIB_H */\n\n/* Define to 1 if you have the <X11/Xlib.h> header file. */\n/* #undef HAVE_X11_XLIB_H */\n\n/* Define to 1 if you have the <X11/Xutil.h> header file. */\n/* #undef HAVE_X11_XUTIL_H */\n\n/* Define to 1 if `xcookie' is a member of `XEvent'. */\n/* #undef HAVE_XEVENT_XCOOKIE */\n\n/* Define to 1 if `callback' is a member of `XICCallback'. */\n/* #undef HAVE_XICCALLBACK_CALLBACK */\n\n/* Define if you have the XKB extension */\n/* #undef HAVE_XKB */\n\n/* Define if libxml2 has the xmlDocProperties enum */\n#define HAVE_XMLDOC_PROPERTIES 1\n\n/* Define if libxml2 has the xmlFirstElementChild function */\n#define HAVE_XMLFIRSTELEMENTCHILD 1\n\n/* Define if libxml2 has the xmlNewDocPI function */\n#define HAVE_XMLNEWDOCPI 1\n\n/* Define if libxml2 has the xmlReadMemory function */\n#define HAVE_XMLREADMEMORY 1\n\n/* Define if libxml2 has the xmlSchemaSetParserStructuredErrors function */\n#define HAVE_XMLSCHEMASSETPARSERSTRUCTUREDERRORS 1\n\n/* Define if libxml2 has the xmlSchemaSetValidStructuredErrors function */\n#define HAVE_XMLSCHEMASSETVALIDSTRUCTUREDERRORS 1\n\n/* Define if Xrender has the XRenderCreateLinearGradient function */\n/* #undef HAVE_XRENDERCREATELINEARGRADIENT */\n\n/* Define if Xrender has the XRenderSetPictureTransform function */\n/* #undef HAVE_XRENDERSETPICTURETRANSFORM */\n\n/* Define if Xrandr has the XRRGetScreenResources function */\n/* #undef HAVE_XRRGETSCREENRESOURCES */\n\n/* Define to 1 if you have the `y0' function. */\n/* #undef HAVE_Y0 */\n\n/* Define to 1 if you have the `y1' function. */\n/* #undef HAVE_Y1 */\n\n/* Define to 1 if you have the `yn' function. */\n/* #undef HAVE_YN */\n\n/* Define to 1 if you have the `z' library (-lz). */\n#define HAVE_ZLIB 1\n\n/* Define to 1 if you have the <zlib.h> header file. */\n#define HAVE_ZLIB_H 1\n\n/* Define to 1 if you have the `_finite' function. */\n/* #undef HAVE__FINITE */\n\n/* Define to 1 if you have the `_isnan' function. */\n/* #undef HAVE__ISNAN */\n\n/* Define to 1 if you have the `_pclose' function. */\n/* #undef HAVE__PCLOSE */\n\n/* Define to 1 if you have the `_popen' function. */\n/* #undef HAVE__POPEN */\n\n/* Define to 1 if you have the `_snprintf' function. */\n/* #undef HAVE__SNPRINTF */\n\n/* Define to 1 if you have the `_spawnvp' function. */\n/* #undef HAVE__SPAWNVP */\n\n/* Define to 1 if you have the `_strdup' function. */\n/* #undef HAVE__STRDUP */\n\n/* Define to 1 if you have the `_stricmp' function. */\n/* #undef HAVE__STRICMP */\n\n/* Define to 1 if you have the `_strnicmp' function. */\n#define HAVE__STRNICMP 1\n\n/* Define to 1 if you have the `_strtoi64' function. */\n/* #undef HAVE__STRTOI64 */\n\n/* Define to 1 if you have the `_strtoui64' function. */\n/* #undef HAVE__STRTOUI64 */\n\n/* Define to 1 if you have the `_vsnprintf' function. */\n/* #undef HAVE__VSNPRINTF */\n\n/* Define to 1 if you have the `__builtin_clz' built-in function. */\n#define HAVE___BUILTIN_CLZ 1\n\n/* Define to 1 if you have the `__builtin_popcount' built-in function. */\n/* #undef HAVE___BUILTIN_POPCOUNT */\n\n/* Define to 1 if you have the `__clear_cache' (potentially built-in)\n   function. */\n/* #undef HAVE___CLEAR_CACHE */\n\n/* Define to 1 if you have the `__res_getservers' function. */\n/* #undef HAVE___RES_GETSERVERS */\n\n/* Define to 1 if you have the `__res_get_state' function. */\n/* #undef HAVE___RES_GET_STATE */\n\n/* Define to 1 if `major', `minor', and `makedev' are declared in <mkdev.h>.\n   */\n/* #undef MAJOR_IN_MKDEV */\n\n/* Define to 1 if `major', `minor', and `makedev' are declared in\n   <sysmacros.h>. */\n/* #undef MAJOR_IN_SYSMACROS */\n\n/* Define to the address where bug reports for this package should be sent. */\n#define PACKAGE_BUGREPORT \"wine-devel@winehq.org\"\n\n/* Define to the full name of this package. */\n#define PACKAGE_NAME \"Wine\"\n\n/* Define to the full name and version of this package. */\n#define PACKAGE_STRING \"Wine 1.7.35\"\n\n/* Define to the one symbol short name of this package. */\n#define PACKAGE_TARNAME \"wine\"\n\n/* Define to the home page for this package. */\n#define PACKAGE_URL \"http://www.winehq.org\"\n\n/* Define to the version of this package. */\n#define PACKAGE_VERSION \"1.7.35\"\n\n/* Define to the soname of the libcapi20 library. */\n/* #undef SONAME_LIBCAPI20 */\n\n/* Define to the soname of the libcups library. */\n/* #undef SONAME_LIBCUPS */\n\n/* Define to the soname of the libcurses library. */\n/* #undef SONAME_LIBCURSES */\n\n/* Define to the soname of the libdbus-1 library. */\n#define SONAME_LIBDBUS_1 \"\tcygdbus-1-3.dll\"\n\n/* Define to the soname of the libEGL library. */\n/* #undef SONAME_LIBEGL */\n\n/* Define to the soname of the libfontconfig library. */\n#define SONAME_LIBFONTCONFIG \"\tcygfontconfig-1.dll\"\n\n/* Define to the soname of the libfreetype library. */\n/* #undef SONAME_LIBFREETYPE */\n\n/* Define to the soname of the libGL library. */\n/* #undef SONAME_LIBGL */\n\n/* Define to the soname of the libGLESv2 library. */\n/* #undef SONAME_LIBGLESV2 */\n\n/* Define to the soname of the libGLU library. */\n/* #undef SONAME_LIBGLU */\n\n/* Define to the soname of the libgnutls library. */\n#define SONAME_LIBGNUTLS \"\tcyggnutls-28.dll\"\n\n/* Define to the soname of the libgsm library. */\n#define SONAME_LIBGSM \"\tcyggsm-1.dll\"\n\n/* Define to the soname of the libgssapi_krb5 library. */\n/* #undef SONAME_LIBGSSAPI_KRB5 */\n\n/* Define to the soname of the libhal library. */\n/* #undef SONAME_LIBHAL */\n\n/* Define to the soname of the libjpeg library. */\n#define SONAME_LIBJPEG \"\tcygjpeg-8.dll\"\n\n/* Define to the soname of the libkrb5 library. */\n/* #undef SONAME_LIBKRB5 */\n\n/* Define to the soname of the libMoltenVK library. */\n/* #undef SONAME_LIBMOLTENVK */\n\n/* Define to the soname of the libncurses library. */\n#define SONAME_LIBNCURSES \"\tcygncursesw-10.dll\"\n\n/* Define to the soname of the libnetapi library. */\n#define SONAME_LIBNETAPI \"libnetapi.dll\"\n\n/* Define to the soname of the libodbc library. */\n#define SONAME_LIBODBC \"\tcygiodbc-2.dll\"\n\n/* Define to the soname of the libopenal library. */\n/* #undef SONAME_LIBOPENAL */\n\n/* Define to the soname of the libOSMesa library. */\n/* #undef SONAME_LIBOSMESA */\n\n/* Define to the soname of the libpng library. */\n#define SONAME_LIBPNG \"\tcygpng15-15.dll\"\n\n/* Define to the soname of the libsane library. */\n/* #undef SONAME_LIBSANE */\n\n/* Define to the soname of the libSDL2 library. */\n/* #undef SONAME_LIBSDL2 */\n\n/* Define to the soname of the libtiff library. */\n#define SONAME_LIBTIFF \"\tcygtiff-5.dll\"\n\n/* Define to the soname of the libv4l1 library. */\n/* #undef SONAME_LIBV4L1 */\n\n/* Define to the soname of the libvkd3d library. */\n/* #undef SONAME_LIBVKD3D */\n\n/* Define to the soname of the libvulkan library. */\n/* #undef SONAME_LIBVULKAN */\n\n/* Define to the soname of the libX11 library. */\n/* #undef SONAME_LIBX11 */\n\n/* Define to the soname of the libXcomposite library. */\n/* #undef SONAME_LIBXCOMPOSITE */\n\n/* Define to the soname of the libXcursor library. */\n/* #undef SONAME_LIBXCURSOR */\n\n/* Define to the soname of the libXext library. */\n/* #undef SONAME_LIBXEXT */\n\n/* Define to the soname of the libXfixes library. */\n/* #undef SONAME_LIBXFIXES */\n\n/* Define to the soname of the libXi library. */\n/* #undef SONAME_LIBXI */\n\n/* Define to the soname of the libXinerama library. */\n/* #undef SONAME_LIBXINERAMA */\n\n/* Define to the soname of the libXrandr library. */\n/* #undef SONAME_LIBXRANDR */\n\n/* Define to the soname of the libXrender library. */\n/* #undef SONAME_LIBXRENDER */\n\n/* Define to the soname of the libxslt library. */\n#define SONAME_LIBXSLT \"\tcygxslt-1.dll\"\n\n/* Define to the soname of the libXxf86vm library. */\n/* #undef SONAME_LIBXXF86VM */\n\n/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */\n/* #undef STAT_MACROS_BROKEN */\n\n/* Define to 1 if you have the ANSI C header files. */\n#define STDC_HEADERS 1\n\n/* Define to 1 if the X Window System is missing or not being used. */\n#define X_DISPLAY_MISSING 1\n\n/* Enable large inode numbers on Mac OS X 10.5.  */\n#ifndef _DARWIN_USE_64_BIT_INODE\n# define _DARWIN_USE_64_BIT_INODE 1\n#endif\n\n/* Number of bits in a file offset, on hosts where this is settable. */\n/* #undef _FILE_OFFSET_BITS */\n\n/* Define for large files, on AIX-style hosts. */\n/* #undef _LARGE_FILES */\n\n/* Define to a macro to output a .cfi assembly pseudo-op */\n#define __ASM_CFI(str) str\n\n/* Define to a macro to define an assembly function */\n#define __ASM_DEFINE_FUNC(name,suffix,code) asm(\".text\\n\\t.align 4\\n\\t.globl \" #name suffix \"\\n\\t.def \" #name suffix \"; .scl 2; .type 32; .endef\\n\" #name suffix \":\\n\\t.cfi_startproc\\n\\t\" code \"\\n\\t.cfi_endproc\");\n\n/* Define to a macro to generate an assembly function directive */\n#define __ASM_FUNC(name) \".def \" __ASM_NAME(name) \"; .scl 2; .type 32; .endef\"\n\n/* Define to a macro to generate an assembly function with C calling\n   convention */\n#define __ASM_GLOBAL_FUNC(name,code) __ASM_DEFINE_FUNC(name,\"\",code)\n#ifdef _MSC_VER\n#undef __ASM_GLOBAL_FUNC\n#define __ASM_GLOBAL_FUNC(name,code)\n#endif\n\n/* Define to a macro to generate an assembly name from a C symbol */\n#define __ASM_NAME(name) name\n\n/* Define to a macro to generate an stdcall suffix */\n#define __ASM_STDCALL(args) \"\"\n\n/* Define to a macro to generate an assembly function with stdcall calling\n   convention */\n#define __ASM_STDCALL_FUNC(name,args,code) __ASM_DEFINE_FUNC(name,__ASM_STDCALL(args),code)\n#undef __ASM_STDCALL_FUNC\n//#define __ASM_STDCALL_FUNC(name, args, code) void __stdcall name(){ERR(\"__ASM_STDCALL_FUNC(\" #name \")\\n\");}\n\n#define __ASM_STDCALL_FUNC_ARG(name, ...) void __stdcall name(__VA_ARGS__){ERR(\"notimpl:__ASM_STDCALL_FUNC(\" #name \")\\n\");}\n#define __ASM_STDCALL_FUNC_0(name) __ASM_STDCALL_FUNC_ARG(name)\n#define __ASM_STDCALL_FUNC_1(name) __ASM_STDCALL_FUNC_ARG(name, int a1)\n#define __ASM_STDCALL_FUNC_2(name) __ASM_STDCALL_FUNC_ARG(name, int a1)\n#define __ASM_STDCALL_FUNC_3(name) __ASM_STDCALL_FUNC_ARG(name, int a1)\n#define __ASM_STDCALL_FUNC_4(name) __ASM_STDCALL_FUNC_ARG(name, int a1)\n#define __ASM_STDCALL_FUNC_5(name) __ASM_STDCALL_FUNC_ARG(name, int a1, int a2)\n#define __ASM_STDCALL_FUNC_6(name) __ASM_STDCALL_FUNC_ARG(name, int a1, int a2)\n#define __ASM_STDCALL_FUNC_7(name) __ASM_STDCALL_FUNC_ARG(name, int a1, int a2)\n#define __ASM_STDCALL_FUNC_8(name) __ASM_STDCALL_FUNC_ARG(name, int a1, int a2)\n#define __ASM_STDCALL_FUNC_9(name) __ASM_STDCALL_FUNC_ARG(name, int a1, int a2, int a3)\n#define __ASM_STDCALL_FUNC_JOIN(base, count) base ## count\n#define __ASM_STDCALL_FUNC(name, args, code) __ASM_STDCALL_FUNC_JOIN(__ASM_STDCALL_FUNC_, args) (name)\n/* Define to `__inline__' or `__inline' if that's what the C compiler\n   calls it, or to nothing if 'inline' is not supported under any name.  */\n#ifndef __cplusplus\n/* #undef inline */\n#endif\n\n#endif /* WINE_CROSSTEST */\n#endif /* __WINE_CONFIG_H */\n"
  },
  {
    "path": "wine/debug.c",
    "content": "/*\n * Management of the debugging channels\n *\n * Copyright 2000 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <stdarg.h>\n#include <string.h>\n#include <ctype.h>\n#ifdef HAVE_SYS_STAT_H\n# include <sys/stat.h>\n#endif\n\n#include \"wine/debug.h\"\n#include \"wine/library.h\"\n\n#if defined(__MINGW32__) || defined(_MSC_VER)\nWINE_DECLARE_DEBUG_CHANNEL(pid);\n#endif\n\nstatic const char * const debug_classes[] = { \"fixme\", \"err\", \"warn\", \"trace\" };\n\n#define MAX_DEBUG_OPTIONS 256\n\nstatic unsigned char default_flags = (1 << __WINE_DBCL_ERR) | (1 << __WINE_DBCL_FIXME);\nstatic int nb_debug_options = -1;\nstatic struct __wine_debug_channel debug_options[MAX_DEBUG_OPTIONS];\n\nstatic struct __wine_debug_functions funcs;\n\nstatic void debug_init(void);\n\nstatic int cmp_name( const void *p1, const void *p2 )\n{\n    const char *name = p1;\n    const struct __wine_debug_channel *chan = p2;\n    return strcmp( name, chan->name );\n}\n\n/* get the flags to use for a given channel, possibly setting them too in case of lazy init */\nunsigned char __wine_dbg_get_channel_flags( struct __wine_debug_channel *channel )\n{\n    if (nb_debug_options == -1) debug_init();\n\n    if (nb_debug_options)\n    {\n        struct __wine_debug_channel *opt = bsearch( channel->name, debug_options, nb_debug_options,\n                                                    sizeof(debug_options[0]), cmp_name );\n        if (opt) return opt->flags;\n    }\n    /* no option for this channel */\n    if (channel->flags & (1 << __WINE_DBCL_INIT)) channel->flags = default_flags;\n    return default_flags;\n}\n\n/* set the flags to use for a given channel; return 0 if the channel is not available to set */\nint __wine_dbg_set_channel_flags( struct __wine_debug_channel *channel,\n                                  unsigned char set, unsigned char clear )\n{\n    if (nb_debug_options == -1) debug_init();\n\n    if (nb_debug_options)\n    {\n        struct __wine_debug_channel *opt = bsearch( channel->name, debug_options, nb_debug_options,\n                                                    sizeof(debug_options[0]), cmp_name );\n        if (opt)\n        {\n            opt->flags = (opt->flags & ~clear) | set;\n            return 1;\n        }\n    }\n    return 0;\n}\n\n/* add a new debug option at the end of the option list */\nstatic void add_option( const char *name, unsigned char set, unsigned char clear )\n{\n    int min = 0, max = nb_debug_options - 1, pos, res;\n\n    if (!name[0])  /* \"all\" option */\n    {\n        default_flags = (default_flags & ~clear) | set;\n        return;\n    }\n    if (strlen(name) >= sizeof(debug_options[0].name)) return;\n\n    while (min <= max)\n    {\n        pos = (min + max) / 2;\n        res = strcmp( name, debug_options[pos].name );\n        if (!res)\n        {\n            debug_options[pos].flags = (debug_options[pos].flags & ~clear) | set;\n            return;\n        }\n        if (res < 0) max = pos - 1;\n        else min = pos + 1;\n    }\n    if (nb_debug_options >= MAX_DEBUG_OPTIONS) return;\n\n    pos = min;\n    if (pos < nb_debug_options) memmove( &debug_options[pos + 1], &debug_options[pos],\n                                         (nb_debug_options - pos) * sizeof(debug_options[0]) );\n    strcpy( debug_options[pos].name, name );\n    debug_options[pos].flags = (default_flags & ~clear) | set;\n    nb_debug_options++;\n}\n\n/* parse a set of debugging option specifications and add them to the option list */\nstatic void parse_options( const char *str )\n{\n    char *opt, *next, *options;\n    unsigned int i;\n\n    if (!(options = strdup(str))) return;\n    for (opt = options; opt; opt = next)\n    {\n        const char *p;\n        unsigned char set = 0, clear = 0;\n\n        if ((next = strchr( opt, ',' ))) *next++ = 0;\n\n        p = opt + strcspn( opt, \"+-\" );\n        if (!p[0]) p = opt;  /* assume it's a debug channel name */\n\n        if (p > opt)\n        {\n            for (i = 0; i < sizeof(debug_classes)/sizeof(debug_classes[0]); i++)\n            {\n                int len = strlen(debug_classes[i]);\n                if (len != (p - opt)) continue;\n                if (!memcmp( opt, debug_classes[i], len ))  /* found it */\n                {\n                    if (*p == '+') set |= 1 << i;\n                    else clear |= 1 << i;\n                    break;\n                }\n            }\n            if (i == sizeof(debug_classes)/sizeof(debug_classes[0])) /* bad class name, skip it */\n                continue;\n        }\n        else\n        {\n            if (*p == '-') clear = ~0;\n            else set = ~0;\n        }\n        if (*p == '+' || *p == '-') p++;\n        if (!p[0]) continue;\n\n        if (!strcmp( p, \"all\" ))\n            default_flags = (default_flags & ~clear) | set;\n        else\n            add_option( p, set, clear );\n    }\n    free( options );\n}\n\n\n/* print the usage message */\nstatic void debug_usage(void)\n{\n    static const char usage[] =\n        \"Syntax of the WINEDEBUG variable:\\n\"\n        \"  WINEDEBUG=[class]+xxx,[class]-yyy,...\\n\\n\"\n        \"Example: WINEDEBUG=+all,warn-heap\\n\"\n        \"    turns on all messages except warning heap messages\\n\"\n        \"Available message classes: err, warn, fixme, trace\\n\";\n    write( 2, usage, sizeof(usage) - 1 );\n    exit(1);\n}\n\n\n/* initialize all options at startup */\nstatic void debug_init(void)\n{\n    char *wine_debug;\n    struct stat st1, st2;\n\n    if (nb_debug_options != -1) return;  /* already initialized */\n    nb_debug_options = 0;\n\n    /* check for stderr pointing to /dev/null */\n    if (!fstat( 2, &st1 ) && S_ISCHR(st1.st_mode) &&\n        !stat( \"/dev/null\", &st2 ) && S_ISCHR(st2.st_mode) &&\n        st1.st_rdev == st2.st_rdev)\n    {\n        default_flags = 0;\n        return;\n    }\n    if ((wine_debug = getenv(\"WINEDEBUG\")))\n    {\n        if (!strcmp( wine_debug, \"help\" )) debug_usage();\n        parse_options( wine_debug );\n    }\n}\n\n/* varargs wrapper for funcs.dbg_vprintf */\nint wine_dbg_printf( const char *format, ... )\n{\n    int ret;\n    va_list valist;\n\n    va_start(valist, format);\n    ret = funcs.dbg_vprintf( format, valist );\n    va_end(valist);\n    return ret;\n}\n\n/* printf with temp buffer allocation */\nconst char *wine_dbg_sprintf( const char *format, ... )\n{\n    static const int max_size = 200;\n    char *ret;\n    int len;\n    va_list valist;\n\n    va_start(valist, format);\n    ret = funcs.get_temp_buffer( max_size );\n    len = vsnprintf( ret, max_size, format, valist );\n    if (len == -1 || len >= max_size) ret[max_size-1] = 0;\n    else funcs.release_temp_buffer( ret, len + 1 );\n    va_end(valist);\n    return ret;\n}\n\n\n/* varargs wrapper for funcs.dbg_vlog */\nint wine_dbg_log( enum __wine_debug_class cls, struct __wine_debug_channel *channel,\n                  const char *func, const char *format, ... )\n{\n    int ret;\n    va_list valist;\n\n    if (!(__wine_dbg_get_channel_flags( channel ) & (1 << cls))) return -1;\n\n    va_start(valist, format);\n    ret = funcs.dbg_vlog( cls, channel, func, format, valist );\n    va_end(valist);\n    return ret;\n}\n\n\n#ifdef _MSC_VER\n__declspec(naked) int interlocked_xchg_add(int *dest, int incr)\n{\n\t__asm mov eax, 8[esp];\n\t__asm mov edx, 4[esp];\n\t__asm lock xadd[edx], eax;\n\t__asm ret;\n}\n#endif\n/* allocate some tmp string space */\n/* FIXME: this is not 100% thread-safe */\nstatic char *get_temp_buffer( size_t size )\n{\n    static char *list[32];\n    static int pos;\n    char *ret;\n    int idx;\n\n    idx = interlocked_xchg_add( &pos, 1 ) % (sizeof(list)/sizeof(list[0]));\n    if ((ret = realloc( list[idx], size ))) list[idx] = ret;\n    return ret;\n}\n\n\n/* release unused part of the buffer */\nstatic void release_temp_buffer( char *buffer, size_t size )\n{\n    /* don't bother doing anything */\n}\n\n\n/* default implementation of wine_dbgstr_an */\nstatic const char *default_dbgstr_an( const char *str, int n )\n{\n    static const char hex[16] = \"0123456789abcdef\";\n    char *dst, *res;\n    size_t size;\n\n    if (!((ULONG_PTR)str >> 16))\n    {\n        if (!str) return \"(null)\";\n        res = funcs.get_temp_buffer( 6 );\n        sprintf( res, \"#%04x\", LOWORD(str) );\n        return res;\n    }\n    if (n == -1) n = strlen(str);\n    if (n < 0) n = 0;\n    size = 10 + min( 300, n * 4 );\n    dst = res = funcs.get_temp_buffer( size );\n    *dst++ = '\"';\n    while (n-- > 0 && dst <= res + size - 9)\n    {\n        unsigned char c = *str++;\n        switch (c)\n        {\n        case '\\n': *dst++ = '\\\\'; *dst++ = 'n'; break;\n        case '\\r': *dst++ = '\\\\'; *dst++ = 'r'; break;\n        case '\\t': *dst++ = '\\\\'; *dst++ = 't'; break;\n        case '\"':  *dst++ = '\\\\'; *dst++ = '\"'; break;\n        case '\\\\': *dst++ = '\\\\'; *dst++ = '\\\\'; break;\n\t\tdefault:\n\t\t\t*dst++ = c;\n\t\t\tbreak;//for multibyte char\n\t\t\t/*\n            if (c >= ' ' && c <= 126)\n                *dst++ = c;\n            else\n            {\n                *dst++ = '\\\\';\n                *dst++ = 'x';\n                *dst++ = hex[(c >> 4) & 0x0f];\n                *dst++ = hex[c & 0x0f];\n            }*/\n        }\n    }\n    *dst++ = '\"';\n    if (n > 0)\n    {\n        *dst++ = '.';\n        *dst++ = '.';\n        *dst++ = '.';\n    }\n    *dst++ = 0;\n    funcs.release_temp_buffer( res, dst - res );\n    return res;\n}\n\n\n/* default implementation of wine_dbgstr_wn */\nstatic const char *default_dbgstr_wn( const WCHAR *str, int n )\n{\n    char *dst, *res;\n    size_t size;\n\n    if (!((ULONG_PTR)str >> 16))\n    {\n        if (!str) return \"(null)\";\n        res = funcs.get_temp_buffer( 6 );\n        sprintf( res, \"#%04x\", LOWORD(str) );\n        return res;\n    }\n    if (n == -1)\n    {\n        const WCHAR *end = str;\n        while (*end) end++;\n        n = end - str;\n    }\n    if (n < 0) n = 0;\n    size = 12 + min( 300, n * 5 );\n    dst = res = funcs.get_temp_buffer( size );\n    *dst++ = 'L';\n    *dst++ = '\"';\n    while (n-- > 0 && dst <= res + size - 10)\n    {\n        WCHAR c = *str++;\n        switch (c)\n        {\n        case '\\n': *dst++ = '\\\\'; *dst++ = 'n'; break;\n        case '\\r': *dst++ = '\\\\'; *dst++ = 'r'; break;\n        case '\\t': *dst++ = '\\\\'; *dst++ = 't'; break;\n        case '\"':  *dst++ = '\\\\'; *dst++ = '\"'; break;\n        case '\\\\': *dst++ = '\\\\'; *dst++ = '\\\\'; break;\n        default:\n            if (c >= ' ' && c <= 126)\n                *dst++ = c;\n            else\n            {\n                *dst++ = '\\\\';\n                sprintf(dst,\"%04x\",c);\n                dst+=4;\n            }\n        }\n    }\n    *dst++ = '\"';\n    if (n > 0)\n    {\n        *dst++ = '.';\n        *dst++ = '.';\n        *dst++ = '.';\n    }\n    *dst++ = 0;\n    funcs.release_temp_buffer( res, dst - res );\n    return res;\n}\n\n\n/* default implementation of wine_dbg_vprintf */\nstatic int default_dbg_vprintf( const char *format, va_list args )\n{\n    return vfprintf( stderr, format, args );\n}\n\n\n/* default implementation of wine_dbg_vlog */\nstatic int default_dbg_vlog( enum __wine_debug_class cls, struct __wine_debug_channel *channel,\n                             const char *func, const char *format, va_list args )\n{\n    int ret = 0;\n\n#if defined(__MINGW32__) || defined(_MSC_VER)\n    if (TRACE_ON(pid))\n        ret += wine_dbg_printf( \"%04x:\", GetCurrentProcessId() );\n    ret += wine_dbg_printf( \"%04x:\", GetCurrentThreadId() );\n#endif\n    if (cls < sizeof(debug_classes)/sizeof(debug_classes[0]))\n        ret += wine_dbg_printf( \"%s:%s:%s \", debug_classes[cls], channel->name, func );\n    if (format)\n        ret += funcs.dbg_vprintf( format, args );\n    return ret;\n}\n\n/* wrappers to use the function pointers */\n\nconst char *wine_dbgstr_an( const char * s, int n )\n{\n    return funcs.dbgstr_an(s, n);\n}\n\nconst char *wine_dbgstr_wn( const WCHAR *s, int n )\n{\n    return funcs.dbgstr_wn(s, n);\n}\n\nvoid __wine_dbg_set_functions( const struct __wine_debug_functions *new_funcs,\n                               struct __wine_debug_functions *old_funcs, size_t size )\n{\n    if (old_funcs) memcpy( old_funcs, &funcs, min(sizeof(funcs),size) );\n    if (new_funcs) memcpy( &funcs, new_funcs, min(sizeof(funcs),size) );\n}\n\nstatic struct __wine_debug_functions funcs =\n{\n    get_temp_buffer,\n    release_temp_buffer,\n    default_dbgstr_an,\n    default_dbgstr_wn,\n    default_dbg_vprintf,\n    default_dbg_vlog\n};\n"
  },
  {
    "path": "wine/ldt.c",
    "content": "/*\n * LDT manipulation functions\n *\n * Copyright 1993 Robert J. Amstadt\n * Copyright 1995 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <assert.h>\n#include <stdlib.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <string.h>\n#include <errno.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/library.h\"\n\n#if defined(__i386__) && !defined(__MINGW32__) && !defined(_MSC_VER)\n\n#ifdef __linux__\n\n#ifdef HAVE_SYS_SYSCALL_H\n# include <sys/syscall.h>\n#endif\n\nstruct modify_ldt_s\n{\n    unsigned int  entry_number;\n    unsigned long base_addr;\n    unsigned int  limit;\n    unsigned int  seg_32bit : 1;\n    unsigned int  contents : 2;\n    unsigned int  read_exec_only : 1;\n    unsigned int  limit_in_pages : 1;\n    unsigned int  seg_not_present : 1;\n    unsigned int  usable : 1;\n    unsigned int  garbage : 25;\n};\n\nstatic inline void fill_modify_ldt_struct( struct modify_ldt_s *ptr, const LDT_ENTRY *entry )\n{\n    ptr->base_addr       = (unsigned long)wine_ldt_get_base(entry);\n    ptr->limit           = entry->LimitLow | (entry->HighWord.Bits.LimitHi << 16);\n    ptr->seg_32bit       = entry->HighWord.Bits.Default_Big;\n    ptr->contents        = (entry->HighWord.Bits.Type >> 2) & 3;\n    ptr->read_exec_only  = !(entry->HighWord.Bits.Type & 2);\n    ptr->limit_in_pages  = entry->HighWord.Bits.Granularity;\n    ptr->seg_not_present = !entry->HighWord.Bits.Pres;\n    ptr->usable          = entry->HighWord.Bits.Sys;\n    ptr->garbage         = 0;\n}\n\nstatic inline int modify_ldt( int func, struct modify_ldt_s *ptr, unsigned long count )\n{\n    return syscall( 123 /* SYS_modify_ldt */, func, ptr, count );\n}\n\nstatic inline int set_thread_area( struct modify_ldt_s *ptr )\n{\n    return syscall( 243 /* SYS_set_thread_area */, ptr );\n}\n\n#endif  /* linux */\n\n#if defined(__svr4__) || defined(_SCO_DS)\n#include <sys/sysi86.h>\n#ifndef __sun__\n#include <sys/seg.h>\n#endif\n#endif\n\n#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) || defined(__DragonFly__)\n#include <machine/segments.h>\n#include <machine/sysarch.h>\n#endif  /* __NetBSD__ || __FreeBSD__ || __OpenBSD__ */\n\n#ifdef __GNU__\n#include <mach/i386/mach_i386.h>\n#include <mach/mach_traps.h>\n#endif\n\n#ifdef __APPLE__\n#include <i386/user_ldt.h>\n#endif\n\n/* local copy of the LDT */\n#ifdef __APPLE__\nstruct __wine_ldt_copy wine_ldt_copy = { { 0, 0, 0 } };\n#else\nstruct __wine_ldt_copy wine_ldt_copy;\n#endif\n\nstatic const LDT_ENTRY null_entry;  /* all-zeros, used to clear LDT entries */\n\n#define LDT_FIRST_ENTRY 512\n#define LDT_SIZE 8192\n\n/* empty function for default locks */\nstatic void nop(void) { }\n\nstatic void (*lock_ldt)(void) = nop;\nstatic void (*unlock_ldt)(void) = nop;\n\n\nstatic inline int is_gdt_sel( unsigned short sel ) { return !(sel & 4); }\n\n/***********************************************************************\n *           wine_ldt_init_locking\n *\n * Set the LDT locking/unlocking functions.\n */\nvoid wine_ldt_init_locking( void (*lock_func)(void), void (*unlock_func)(void) )\n{\n    lock_ldt = lock_func;\n    unlock_ldt = unlock_func;\n}\n\n\n/***********************************************************************\n *           wine_ldt_get_entry\n *\n * Retrieve an LDT entry. Return a null entry if selector is not allocated.\n */\nvoid wine_ldt_get_entry( unsigned short sel, LDT_ENTRY *entry )\n{\n    int index = sel >> 3;\n\n    if (is_gdt_sel(sel))\n    {\n        *entry = null_entry;\n        return;\n    }\n    lock_ldt();\n    if (wine_ldt_copy.flags[index] & WINE_LDT_FLAGS_ALLOCATED)\n    {\n        wine_ldt_set_base(  entry, wine_ldt_copy.base[index] );\n        wine_ldt_set_limit( entry, wine_ldt_copy.limit[index] );\n        wine_ldt_set_flags( entry, wine_ldt_copy.flags[index] );\n    }\n    else *entry = null_entry;\n    unlock_ldt();\n}\n\n\n/***********************************************************************\n *           internal_set_entry\n *\n * Set an LDT entry, without locking. For internal use only.\n */\nstatic int internal_set_entry( unsigned short sel, const LDT_ENTRY *entry )\n{\n    int ret = 0, index = sel >> 3;\n\n    if (index < LDT_FIRST_ENTRY) return 0;  /* cannot modify reserved entries */\n\n#ifdef linux\n    {\n        struct modify_ldt_s ldt_info;\n\n        ldt_info.entry_number = index;\n        fill_modify_ldt_struct( &ldt_info, entry );\n        if ((ret = modify_ldt(0x11, &ldt_info, sizeof(ldt_info))) < 0)\n            perror( \"modify_ldt\" );\n    }\n#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) || defined(__DragonFly__)\n    {\n\tLDT_ENTRY entry_copy = *entry;\n\t/* The kernel will only let us set LDTs with user priority level */\n\tif (entry_copy.HighWord.Bits.Pres\n\t    && entry_copy.HighWord.Bits.Dpl != 3)\n\t\tentry_copy.HighWord.Bits.Dpl = 3;\n        ret = i386_set_ldt(index, (union descriptor *)&entry_copy, 1);\n        if (ret < 0)\n        {\n            perror(\"i386_set_ldt\");\n            fprintf( stderr, \"Did you reconfigure the kernel with \\\"options USER_LDT\\\"?\\n\" );\n            exit(1);\n        }\n    }\n#elif defined(__svr4__) || defined(_SCO_DS)\n    {\n        struct ssd ldt_mod;\n        ldt_mod.sel  = sel;\n        ldt_mod.bo   = (unsigned long)wine_ldt_get_base(entry);\n        ldt_mod.ls   = entry->LimitLow | (entry->HighWord.Bits.LimitHi << 16);\n        ldt_mod.acc1 = entry->HighWord.Bytes.Flags1;\n        ldt_mod.acc2 = entry->HighWord.Bytes.Flags2 >> 4;\n        if ((ret = sysi86(SI86DSCR, &ldt_mod)) == -1) perror(\"sysi86\");\n    }\n#elif defined(__APPLE__)\n    if ((ret = i386_set_ldt(index, (union ldt_entry *)entry, 1)) < 0)\n        perror(\"i386_set_ldt\");\n#elif defined(__GNU__)\n    if ((ret = i386_set_ldt(mach_thread_self(), sel, (descriptor_list_t)entry, 1)) != KERN_SUCCESS)\n        perror(\"i386_set_ldt\");\n#else\n    fprintf( stderr, \"No LDT support on this platform\\n\" );\n    exit(1);\n#endif\n\n    if (ret >= 0)\n    {\n        wine_ldt_copy.base[index]  = wine_ldt_get_base(entry);\n        wine_ldt_copy.limit[index] = wine_ldt_get_limit(entry);\n        wine_ldt_copy.flags[index] = (entry->HighWord.Bits.Type |\n                                 (entry->HighWord.Bits.Default_Big ? WINE_LDT_FLAGS_32BIT : 0) |\n                                 (wine_ldt_copy.flags[index] & WINE_LDT_FLAGS_ALLOCATED));\n    }\n    return ret;\n}\n\n\n/***********************************************************************\n *           wine_ldt_set_entry\n *\n * Set an LDT entry.\n */\nint wine_ldt_set_entry( unsigned short sel, const LDT_ENTRY *entry )\n{\n    int ret;\n\n    lock_ldt();\n    ret = internal_set_entry( sel, entry );\n    unlock_ldt();\n    return ret;\n}\n\n\n/***********************************************************************\n *           wine_ldt_is_system\n *\n * Check if the selector is a system selector (i.e. not managed by Wine).\n */\nint wine_ldt_is_system( unsigned short sel )\n{\n    return is_gdt_sel(sel) || ((sel >> 3) < LDT_FIRST_ENTRY);\n}\n\n\n/***********************************************************************\n *           wine_ldt_get_ptr\n *\n * Convert a segment:offset pair to a linear pointer.\n * Note: we don't lock the LDT since this has to be fast.\n */\nvoid *wine_ldt_get_ptr( unsigned short sel, unsigned long offset )\n{\n    int index;\n\n    if (is_gdt_sel(sel))  /* GDT selector */\n        return (void *)offset;\n    if ((index = (sel >> 3)) < LDT_FIRST_ENTRY)  /* system selector */\n        return (void *)offset;\n    if (!(wine_ldt_copy.flags[index] & WINE_LDT_FLAGS_32BIT)) offset &= 0xffff;\n    return (char *)wine_ldt_copy.base[index] + offset;\n}\n\n\n/***********************************************************************\n *           wine_ldt_alloc_entries\n *\n * Allocate a number of consecutive ldt entries, without setting the LDT contents.\n * Return a selector for the first entry.\n */\nunsigned short wine_ldt_alloc_entries( int count )\n{\n    int i, index, size = 0;\n\n    if (count <= 0) return 0;\n    lock_ldt();\n    for (i = LDT_FIRST_ENTRY; i < LDT_SIZE; i++)\n    {\n        if (wine_ldt_copy.flags[i] & WINE_LDT_FLAGS_ALLOCATED) size = 0;\n        else if (++size >= count)  /* found a large enough block */\n        {\n            index = i - size + 1;\n\n            /* mark selectors as allocated */\n            for (i = 0; i < count; i++) wine_ldt_copy.flags[index + i] |= WINE_LDT_FLAGS_ALLOCATED;\n            unlock_ldt();\n            return (index << 3) | 7;\n        }\n    }\n    unlock_ldt();\n    return 0;\n}\n\n\n/***********************************************************************\n *           wine_ldt_realloc_entries\n *\n * Reallocate a number of consecutive ldt entries, without changing the LDT contents.\n * Return a selector for the first entry.\n */\nunsigned short wine_ldt_realloc_entries( unsigned short sel, int oldcount, int newcount )\n{\n    int i;\n\n    if (oldcount < newcount)  /* we need to add selectors */\n    {\n        int index = sel >> 3;\n\n        lock_ldt();\n        /* check if the next selectors are free */\n        if (index + newcount > LDT_SIZE) i = oldcount;\n        else\n            for (i = oldcount; i < newcount; i++)\n                if (wine_ldt_copy.flags[index+i] & WINE_LDT_FLAGS_ALLOCATED) break;\n\n        if (i < newcount)  /* they are not free */\n        {\n            wine_ldt_free_entries( sel, oldcount );\n            sel = wine_ldt_alloc_entries( newcount );\n        }\n        else  /* mark the selectors as allocated */\n        {\n            for (i = oldcount; i < newcount; i++)\n                wine_ldt_copy.flags[index+i] |= WINE_LDT_FLAGS_ALLOCATED;\n        }\n        unlock_ldt();\n    }\n    else if (oldcount > newcount) /* we need to remove selectors */\n    {\n        wine_ldt_free_entries( sel + (newcount << 3), newcount - oldcount );\n    }\n    return sel;\n}\n\n\n/***********************************************************************\n *           wine_ldt_free_entries\n *\n * Free a number of consecutive ldt entries and clear their contents.\n */\nvoid wine_ldt_free_entries( unsigned short sel, int count )\n{\n    int index;\n\n    lock_ldt();\n    for (index = sel >> 3; count > 0; count--, index++)\n    {\n        internal_set_entry( sel, &null_entry );\n        wine_ldt_copy.flags[index] = 0;\n    }\n    unlock_ldt();\n}\n\n\nstatic int global_fs_sel = -1;  /* global selector for %fs shared among all threads */\n\n/***********************************************************************\n *           wine_ldt_alloc_fs\n *\n * Allocate an LDT entry for a %fs selector, reusing a global\n * GDT selector if possible. Return the selector value.\n */\nunsigned short wine_ldt_alloc_fs(void)\n{\n    if (global_fs_sel == -1)\n    {\n#ifdef __linux__\n        struct modify_ldt_s ldt_info;\n        int ret;\n\n        /* the preloader may have allocated it already */\n        global_fs_sel = wine_get_fs();\n        if (global_fs_sel && is_gdt_sel(global_fs_sel)) return global_fs_sel;\n\n        memset( &ldt_info, 0, sizeof(ldt_info) );\n        ldt_info.entry_number = -1;\n        ldt_info.seg_32bit = 1;\n        ldt_info.usable = 1;\n        if ((ret = set_thread_area( &ldt_info ) < 0))\n        {\n            global_fs_sel = 0;  /* don't try it again */\n            if (errno != ENOSYS) perror( \"set_thread_area\" );\n        }\n        else global_fs_sel = (ldt_info.entry_number << 3) | 3;\n#elif defined(__FreeBSD__) || defined (__FreeBSD_kernel__)\n        global_fs_sel = GSEL( GUFS_SEL, SEL_UPL );\n#endif\n    }\n    if (global_fs_sel > 0) return global_fs_sel;\n    return wine_ldt_alloc_entries( 1 );\n}\n\n\n/***********************************************************************\n *           wine_ldt_init_fs\n *\n * Initialize the entry for the %fs selector of the current thread, and\n * set the thread %fs register.\n *\n * Note: this runs in the context of the new thread, so cannot acquire locks.\n */\nvoid wine_ldt_init_fs( unsigned short sel, const LDT_ENTRY *entry )\n{\n    if ((sel & ~3) == (global_fs_sel & ~3))\n    {\n#ifdef __linux__\n        struct modify_ldt_s ldt_info;\n        int ret;\n\n        ldt_info.entry_number = sel >> 3;\n        fill_modify_ldt_struct( &ldt_info, entry );\n        if ((ret = set_thread_area( &ldt_info ) < 0)) perror( \"set_thread_area\" );\n#elif defined(__FreeBSD__) || defined (__FreeBSD_kernel__) || defined(__DragonFly__)\n        i386_set_fsbase( wine_ldt_get_base( entry ));\n#endif\n    }\n    else  /* LDT selector */\n    {\n        internal_set_entry( sel, entry );\n    }\n    wine_set_fs( sel );\n}\n\n\n/***********************************************************************\n *           wine_ldt_free_fs\n *\n * Free a %fs selector returned by wine_ldt_alloc_fs.\n */\nvoid wine_ldt_free_fs( unsigned short sel )\n{\n    if (is_gdt_sel(sel)) return;  /* nothing to do */\n    if (!((wine_get_fs() ^ sel) & ~3))\n    {\n        /* FIXME: if freeing current %fs we cannot acquire locks */\n        wine_set_fs( 0 );\n        internal_set_entry( sel, &null_entry );\n        wine_ldt_copy.flags[sel >> 3] = 0;\n    }\n    else wine_ldt_free_entries( sel, 1 );\n}\n\n\n/***********************************************************************\n *           selector access functions\n */\n__ASM_GLOBAL_FUNC( wine_get_cs, \"movw %cs,%ax\\n\\tret\" )\n__ASM_GLOBAL_FUNC( wine_get_ds, \"movw %ds,%ax\\n\\tret\" )\n__ASM_GLOBAL_FUNC( wine_get_es, \"movw %es,%ax\\n\\tret\" )\n__ASM_GLOBAL_FUNC( wine_get_fs, \"movw %fs,%ax\\n\\tret\" )\n__ASM_GLOBAL_FUNC( wine_get_gs, \"movw %gs,%ax\\n\\tret\" )\n__ASM_GLOBAL_FUNC( wine_get_ss, \"movw %ss,%ax\\n\\tret\" )\n__ASM_GLOBAL_FUNC( wine_set_fs, \"movl 4(%esp),%eax\\n\\tmovw %ax,%fs\\n\\tret\" )\n__ASM_GLOBAL_FUNC( wine_set_gs, \"movl 4(%esp),%eax\\n\\tmovw %ax,%gs\\n\\tret\" )\n\n#endif /* __i386__ */\n"
  },
  {
    "path": "wine/ldt2.c",
    "content": "\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <assert.h>\n#include <stdlib.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <string.h>\n#include <errno.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/library.h\"\n#include \"wine/debug.h\"\nWINE_DEFAULT_DEBUG_CHANNEL(ldt);\nstatic inline int is_gdt_sel(unsigned short sel) { return !(sel & 4); }\nstatic const LDT_ENTRY null_entry;  /* all-zeros, used to clear LDT entries */\nstruct __wine_ldt_copy wine_ldt_copy;\nLDT_ENTRY wine_ldt[8192];\n// windows allocates selectors from a linked list of avaliable so\n// if a sel is freed, the next alloced will be the last freed, simulate for one\nstatic WORD last_freed = 0;\n/* empty function for default locks */\nstatic void nop(void) { }\n\nstatic void(*lock_ldt)(void) = nop;\nstatic void(*unlock_ldt)(void) = nop;\n#define LDT_FIRST_ENTRY 512\n#define LDT_SIZE 8192\n\n/***********************************************************************\n *           wine_ldt_get_ptr\n *\n * Convert a segment:offset pair to a linear pointer.\n * Note: we don't lock the LDT since this has to be fast.\n */\nvoid *wine_ldt_get_ptr(unsigned short sel, unsigned long offset)\n{\n\tint index;\n\n\tif (is_gdt_sel(sel))  /* GDT selector */\n\t\treturn (void *)offset;\n\tif ((index = (sel >> 3)) < LDT_FIRST_ENTRY)  /* system selector */\n\t\treturn (void *)offset;\n\tif (!(wine_ldt_copy.flags[index] & WINE_LDT_FLAGS_32BIT)) offset &= 0xffff;\n\treturn (char *)wine_ldt_copy.base[index] + offset;\n}\nstatic BOOL intel_vt_x_workaround = FALSE;\nstatic void (*intel_vt_x_workaround_update_entry)(int seg, const LDT_ENTRY *entry);\nvoid set_intel_vt_x_workaround(void(*func)(int seg, const LDT_ENTRY *entry))\n{\n    intel_vt_x_workaround = TRUE;\n    intel_vt_x_workaround_update_entry = func;\n    for (int index = LDT_FIRST_ENTRY; index < LDT_SIZE; index++)\n    {\n        if (intel_vt_x_workaround_update_entry)\n            intel_vt_x_workaround_update_entry(index << 3, wine_ldt + index);\n    }\n}\n/***********************************************************************\n*           wine_ldt_set_entry\n*\n* Set an LDT entry.\n*/\nint wine_ldt_set_entry(unsigned short sel, const LDT_ENTRY *entry)\n{\n\tint ret = 0, index = sel >> 3;\n\tret = TRUE;\n\tif (ret >= 0)\n\t{\n        wine_ldt[index] = *entry;\n\t\tif (intel_vt_x_workaround)\n\t\t{\n\t\t\tintel_vt_x_workaround_update_entry(sel, entry);\n\t\t}\n\t\twine_ldt_copy.base[index] = wine_ldt_get_base(entry);\n\t\twine_ldt_copy.limit[index] = wine_ldt_get_limit(entry);\n\t\twine_ldt_copy.flags[index] = (entry->HighWord.Bits.Type |\n\t\t\t(entry->HighWord.Bits.Default_Big ? WINE_LDT_FLAGS_32BIT : 0) |\n\t\t\t(wine_ldt_copy.flags[index] & WINE_LDT_FLAGS_ALLOCATED));\n\t}\n\n\tTRACE(\"wine_ldt_set_entry(0x%04X, %p)\\n\", sel, entry);\n\treturn 0;\n}\n/***********************************************************************\n*           wine_ldt_get_entry\n*\n* Retrieve an LDT entry. Return a null entry if selector is not allocated.\n*/\nvoid wine_ldt_get_entry(unsigned short sel, LDT_ENTRY *entry)\n{\n\tint index = sel >> 3;\n\n\tif (is_gdt_sel(sel))\n\t{\n\t\t*entry = null_entry;\n\t\treturn;\n\t}\n\tlock_ldt();\n\tif (wine_ldt_copy.flags[index] & WINE_LDT_FLAGS_ALLOCATED)\n\t{\n\t\twine_ldt_set_base(entry, wine_ldt_copy.base[index]);\n\t\twine_ldt_set_limit(entry, wine_ldt_copy.limit[index]);\n\t\twine_ldt_set_flags(entry, wine_ldt_copy.flags[index]);\n\t}\n\telse *entry = null_entry;\n\tunlock_ldt();\n\tTRACE(\"wine_ldt_get_entry(0x%04X, %p)\\n\", sel, entry);\n\treturn;\n}\n/***********************************************************************\n*           wine_ldt_alloc_entries\n*\n* Allocate a number of consecutive ldt entries, without setting the LDT contents.\n* Return a selector for the first entry.\n*/\nunsigned short sel = 0x1000;\nunsigned short wine_ldt_alloc_entries(int count)\n{\n\n\tint i, index, size = 0;\n\n\tif (count <= 0)\n\t{\n\t\tTRACE(\"wine_ldt_alloc_entries(%d) = %d\\n\", count, 0);\n\t\treturn 0;\n\t}\n\tlock_ldt();\n\tif ((count == 1) && last_freed)\n\t{\n\t\tWORD e = last_freed >> 3;\n\t\tlast_freed = 0;\n\t \tif (!(wine_ldt_copy.flags[e] & WINE_LDT_FLAGS_ALLOCATED))\n\t\t{\n\t\t\twine_ldt_copy.flags[e] |= WINE_LDT_FLAGS_ALLOCATED;\n\t\t\tunlock_ldt();\n\t\t\treturn (e << 3) | 7;\n\t\t}\n\t}\n\n\tfor (i = LDT_FIRST_ENTRY; i < LDT_SIZE; i++)\n\t{\n\t\tif (wine_ldt_copy.flags[i] & WINE_LDT_FLAGS_ALLOCATED) size = 0;\n\t\telse if (++size >= count)  /* found a large enough block */\n\t\t{\n\t\t\tindex = i - size + 1;\n\n\t\t\t/* mark selectors as allocated */\n\t\t\tfor (i = 0; i < count; i++) wine_ldt_copy.flags[index + i] |= WINE_LDT_FLAGS_ALLOCATED;\n\t\t\tunlock_ldt();\n\t\t\t//DPRINTF(\"NOTIMPL:wine_ldt_alloc_entries(%d) = %d\\n\", count, (index << 3) | 7);\n\t\t\treturn (index << 3) | 7;\n\t\t}\n\t}\n\tunlock_ldt();\n\tTRACE(\"wine_ldt_alloc_entries(%d) = %d\\n\", count, 0);\n\treturn 0;\n\tTRACE(\"wine_ldt_alloc_entries(%d) = %d\\n\", count, sel);\n\tcount *= 0x10000;\n\tunsigned short e = sel;\n\tsel += (count + 16) / 16;\n\treturn e;\n}\n/***********************************************************************\n*           wine_ldt_realloc_entries\n*\n* Reallocate a number of consecutive ldt entries, without changing the LDT contents.\n* Return a selector for the first entry.\n*/\n#include <wownt32.h>\nunsigned short wine_ldt_realloc_entries(unsigned short sel, int oldcount, int newcount)\n{\n\tint i;\n\n\tif (oldcount < newcount)  /* we need to add selectors */\n\t{\n\t\tint index = sel >> 3;\n\n\t\tlock_ldt();\n\t\t/* check if the next selectors are free */\n\t\tif (index + newcount > LDT_SIZE) i = oldcount;\n\t\telse\n\t\t\tfor (i = oldcount; i < newcount; i++)\n\t\t\t\tif (wine_ldt_copy.flags[index + i] & WINE_LDT_FLAGS_ALLOCATED) break;\n\n\t\tif (i < newcount)  /* they are not free */\n\t\t{\n\t\t\twine_ldt_free_entries(sel, oldcount);\n\t\t\tsel = wine_ldt_alloc_entries(newcount);\n\t\t}\n\t\telse  /* mark the selectors as allocated */\n\t\t{\n\t\t\tfor (i = oldcount; i < newcount; i++)\n\t\t\t\twine_ldt_copy.flags[index + i] |= WINE_LDT_FLAGS_ALLOCATED;\n\t\t}\n\t\tunlock_ldt();\n\t}\n\telse if (oldcount > newcount) /* we need to remove selectors */\n\t{\n\t\twine_ldt_free_entries(sel + (newcount << 3), newcount - oldcount);\n\t}\n\treturn sel;\n\tTRACE(\"wine_ldt_realloc_entries(0x%04X,%d,%d)\\n\", sel, oldcount, newcount);\n\treturn 0;\n}\n/***********************************************************************\n*           internal_set_entry\n*\n* Set an LDT entry, without locking. For internal use only.\n*/\nstatic int internal_set_entry(unsigned short sel, const LDT_ENTRY *entry)\n{\n\tint ret = 0, index = sel >> 3;\n\n\tif (ret >= 0)\n\t{\n\t\twine_ldt[index] = *entry;\n\t\twine_ldt_copy.base[index] = wine_ldt_get_base(entry);\n\t\twine_ldt_copy.limit[index] = wine_ldt_get_limit(entry);\n\t\twine_ldt_copy.flags[index] = (entry->HighWord.Bits.Type |\n\t\t\t(entry->HighWord.Bits.Default_Big ? WINE_LDT_FLAGS_32BIT : 0) |\n\t\t\t(wine_ldt_copy.flags[index] & WINE_LDT_FLAGS_ALLOCATED));\n\t}\n\treturn ret;\n}\n/***********************************************************************\n*           wine_ldt_free_entries\n*\n* Free a number of consecutive ldt entries and clear their contents.\n*/\nvoid wine_ldt_free_entries(unsigned short sel, int count)\n{\n\tint index;\n\n\tlock_ldt();\n\tfor (index = sel >> 3; count > 0; count--, index++)\n\t{\n\t\tinternal_set_entry(sel, &null_entry);\n\t\twine_ldt_copy.flags[index] = 0;\n\t}\n\tlast_freed = sel;\n\tunlock_ldt();\n\tTRACE(\"wine_ldt_free_entries(0x%04X,%d)\\n\", sel, count);\n}\n/***********************************************************************\n*           wine_ldt_is_system\n*\n* Check if the selector is a system selector (i.e. not managed by Wine).\n*/\nint wine_ldt_is_system(unsigned short sel)\n{\n\treturn is_gdt_sel(sel) || ((sel >> 3) < LDT_FIRST_ENTRY);\n\tTRACE(\"wine_ldt_is_system(%04X)\\n\", sel);\n\treturn 0;\n}\n\n\n#if USE_SREG_WORKAROUND\n/***********************************************************************\n *           selector access functions\n */\n# if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))\n#  define __DEFINE_GET_SEG(seg) \\\n    unsigned short wine_get_##seg(void) \\\n    { unsigned short res; __asm__ __volatile__(\"movw %%\" #seg \",%w0\" : \"=r\"(res)); return res; }\n#  define __DEFINE_SET_SEG(seg) \\\n    void wine_set_##seg(unsigned int val) \\\n    { __asm__(\"movw %w0,%%\" #seg : : \"r\" (val)); }\n# elif defined(_MSC_VER)\n/* This cache is a workaround for ARM64 mac.  */\n#  define __DEFINE_GET_SEG(seg) \\\n    unsigned short wine_get_##seg(void) \\\n    {\\\n        static int cache;\\\n        static unsigned short res;\\\n        if (!cache)\\\n        {\\\n            cache = 1;\\\n            __asm { mov res, seg }\\\n        }\\\n        return res;\\\n    }\n#  define __DEFINE_SET_SEG(seg) \\\n    void wine_set_##seg(unsigned int val) { __asm { mov seg, word ptr [val] } }\n# else  /* __GNUC__ || _MSC_VER */\n\n# endif /* __GNUC__ || _MSC_VER */\n\n__DEFINE_GET_SEG(cs)\n__DEFINE_GET_SEG(ds)\n__DEFINE_GET_SEG(es)\n__DEFINE_GET_SEG(fs)\n__DEFINE_GET_SEG(gs)\n__DEFINE_GET_SEG(ss)\n__DEFINE_SET_SEG(fs)\n__DEFINE_SET_SEG(gs)\n#undef __DEFINE_GET_SEG\n#undef __DEFINE_SET_SEG\n#endif\n"
  },
  {
    "path": "wine/port.h",
    "content": "/*\n * Wine porting definitions\n *\n * Copyright 1996 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINE_PORT_H\n#define __WINE_WINE_PORT_H\n\n#ifndef __WINE_CONFIG_H\n# error You must include config.h to use this header\n#endif\n\n#ifdef __WINE_BASETSD_H\n# error You must include port.h before all other headers\n#endif\n\n#ifndef _GNU_SOURCE\n# define _GNU_SOURCE  /* for pread/pwrite, isfinite */\n#endif\n#include <fcntl.h>\n#include <math.h>\n#include <sys/types.h>\n#include <sys/stat.h>\n#ifdef HAVE_DIRECT_H\n# include <direct.h>\n#endif\n#ifdef HAVE_IO_H\n# include <io.h>\n#endif\n#ifdef HAVE_PROCESS_H\n# include <process.h>\n#endif\n#include <string.h>\n#include <stdlib.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n\n\n/****************************************************************\n * Type definitions\n */\n\n#if !defined(_MSC_VER) && !defined(__int64)\n#  if defined(__x86_64__) || defined(__aarch64__) || defined(_WIN64)\n#    define __int64 long\n#  else\n#    define __int64 long long\n#  endif\n#endif\n\n#ifndef HAVE_MODE_T\ntypedef int mode_t;\n#endif\n#ifndef HAVE_OFF_T\ntypedef long off_t;\n#endif\n#ifndef HAVE_PID_T\ntypedef int pid_t;\n#endif\n#ifndef HAVE_SIZE_T\ntypedef unsigned int size_t;\n#endif\n#ifndef HAVE_SSIZE_T\ntypedef int ssize_t;\n#endif\n#ifndef HAVE_FSBLKCNT_T\ntypedef unsigned long fsblkcnt_t;\n#endif\n#ifndef HAVE_FSFILCNT_T\ntypedef unsigned long fsfilcnt_t;\n#endif\n\n#ifndef HAVE_STRUCT_STATVFS_F_BLOCKS\nstruct statvfs\n{\n    unsigned long f_bsize;\n    unsigned long f_frsize;\n    fsblkcnt_t    f_blocks;\n    fsblkcnt_t    f_bfree;\n    fsblkcnt_t    f_bavail;\n    fsfilcnt_t    f_files;\n    fsfilcnt_t    f_ffree;\n    fsfilcnt_t    f_favail;\n    unsigned long f_fsid;\n    unsigned long f_flag;\n    unsigned long f_namemax;\n};\n#endif /* HAVE_STRUCT_STATVFS_F_BLOCKS */\n\n\n/****************************************************************\n * Macro definitions\n */\n\n#ifdef HAVE_DLFCN_H\n#include <dlfcn.h>\n#else\n#define RTLD_LAZY    0x001\n#define RTLD_NOW     0x002\n#define RTLD_GLOBAL  0x100\n#endif\n\n#ifdef HAVE_ONE_ARG_MKDIR\n#define mkdir(path,mode) mkdir(path)\n#endif\n\n#if !defined(HAVE_FTRUNCATE) && defined(HAVE_CHSIZE)\n#define ftruncate chsize\n#endif\n\n#if !defined(HAVE_POPEN) && defined(HAVE__POPEN)\n#define popen _popen\n#endif\n\n#if !defined(HAVE_PCLOSE) && defined(HAVE__PCLOSE)\n#define pclose _pclose\n#endif\n\n#if !defined(HAVE_STRDUP) && defined(HAVE__STRDUP)\n#define strdup _strdup\n#endif\n\n#if !defined(HAVE_SNPRINTF) && defined(HAVE__SNPRINTF)\n#define snprintf _snprintf\n#endif\n\n#if !defined(HAVE_VSNPRINTF) && defined(HAVE__VSNPRINTF)\n#define vsnprintf _vsnprintf\n#endif\n\n#if !defined(HAVE_STRTOLL) && defined(HAVE__STRTOI64)\n#define strtoll _strtoi64\n#endif\n\n#if !defined(HAVE_STRTOULL) && defined(HAVE__STRTOUI64)\n#define strtoull _strtoui64\n#endif\n\n#ifndef S_ISLNK\n# define S_ISLNK(mod) (0)\n#endif\n\n#ifndef S_ISSOCK\n# define S_ISSOCK(mod) (0)\n#endif\n\n#ifndef S_ISDIR\n# define S_ISDIR(mod) (((mod) & _S_IFMT) == _S_IFDIR)\n#endif\n\n#ifndef S_ISCHR\n# define S_ISCHR(mod) (((mod) & _S_IFMT) == _S_IFCHR)\n#endif\n\n#ifndef S_ISFIFO\n# define S_ISFIFO(mod) (((mod) & _S_IFMT) == _S_IFIFO)\n#endif\n\n#ifndef S_ISREG\n# define S_ISREG(mod) (((mod) & _S_IFMT) == _S_IFREG)\n#endif\n\n/* So we open files in 64 bit access mode on Linux */\n#ifndef O_LARGEFILE\n# define O_LARGEFILE 0\n#endif\n\n#ifndef O_NONBLOCK\n# define O_NONBLOCK 0\n#endif\n\n#ifndef O_BINARY\n# define O_BINARY 0\n#endif\n\n\n/****************************************************************\n * Constants\n */\n\n#ifndef M_PI\n#define M_PI 3.14159265358979323846\n#endif\n\n#ifndef M_PI_2\n#define M_PI_2 1.570796326794896619\n#endif\n\n#ifndef INFINITY\nstatic inline float __port_infinity(void)\n{\n    static const unsigned __inf_bytes = 0x7f800000;\n    return *(const float *)&__inf_bytes;\n}\n#define INFINITY __port_infinity()\n#endif\n\n#ifndef NAN\nstatic inline float __port_nan(void)\n{\n    static const unsigned __nan_bytes = 0x7fc00000;\n    return *(const float *)&__nan_bytes;\n}\n#define NAN __port_nan()\n#endif\n\n\n/****************************************************************\n * Function definitions (only when using libwine_port)\n */\n\n#ifndef NO_LIBWINE_PORT\n\n#ifndef HAVE_FSTATVFS\nint fstatvfs( int fd, struct statvfs *buf );\n#endif\n\n#ifndef HAVE_GETOPT_LONG_ONLY\nextern char *optarg;\nextern int optind;\nextern int opterr;\nextern int optopt;\nstruct option;\n\n#ifndef HAVE_STRUCT_OPTION_NAME\nstruct option\n{\n    const char *name;\n    int has_arg;\n    int *flag;\n    int val;\n};\n#endif\n\nextern int getopt_long (int ___argc, char *const *___argv,\n                        const char *__shortopts,\n                        const struct option *__longopts, int *__longind);\nextern int getopt_long_only (int ___argc, char *const *___argv,\n                             const char *__shortopts,\n                             const struct option *__longopts, int *__longind);\n#endif  /* HAVE_GETOPT_LONG_ONLY */\n\n#ifndef HAVE_FFS\nint ffs( int x );\n#endif\n\n#ifndef HAVE_ISFINITE\nint isfinite(double x);\n#endif\n\n#ifndef HAVE_ISINF\nint isinf(double x);\n#endif\n\n#ifndef HAVE_ISNAN\nint isnan(double x);\n#endif\n\n#ifndef HAVE_LLRINT\n__int64 llrint(double x);\n#endif\n\n#ifndef HAVE_LLRINTF\n__int64 llrintf(float x);\n#endif\n\n#ifndef HAVE_LRINT\nlong lrint(double x);\n#endif\n\n#ifndef HAVE_LRINTF\nlong lrintf(float x);\n#endif\n\n#ifndef HAVE_LSTAT\nint lstat(const char *file_name, struct stat *buf);\n#endif /* HAVE_LSTAT */\n\n#ifndef HAVE_MEMMOVE\nvoid *memmove(void *dest, const void *src, size_t len);\n#endif /* !defined(HAVE_MEMMOVE) */\n\n#ifndef HAVE_POLL\nstruct pollfd\n{\n    int fd;\n    short events;\n    short revents;\n};\n#define POLLIN   0x01\n#define POLLPRI  0x02\n#define POLLOUT  0x04\n#define POLLERR  0x08\n#define POLLHUP  0x10\n#define POLLNVAL 0x20\nint poll( struct pollfd *fds, unsigned int count, int timeout );\n#endif /* HAVE_POLL */\n\n#ifndef HAVE_PREAD\nssize_t pread( int fd, void *buf, size_t count, off_t offset );\n#endif /* HAVE_PREAD */\n\n#ifndef HAVE_PWRITE\nssize_t pwrite( int fd, const void *buf, size_t count, off_t offset );\n#endif /* HAVE_PWRITE */\n\n#ifndef HAVE_READLINK\nint readlink( const char *path, char *buf, size_t size );\n#endif /* HAVE_READLINK */\n\n#ifndef HAVE_RINT\ndouble rint(double x);\n#endif\n\n#ifndef HAVE_RINTF\nfloat rintf(float x);\n#endif\n\n#ifndef HAVE_STATVFS\nint statvfs( const char *path, struct statvfs *buf );\n#endif\n\n#ifndef HAVE_STRNCASECMP\n# ifndef HAVE__STRNICMP\nint strncasecmp(const char *str1, const char *str2, size_t n);\n# else\n# define strncasecmp _strnicmp\n# endif\n#endif /* !defined(HAVE_STRNCASECMP) */\n\n#ifndef HAVE_STRNLEN\nsize_t strnlen( const char *str, size_t maxlen );\n#endif /* !defined(HAVE_STRNLEN) */\n\n#ifndef HAVE_STRERROR\nconst char *strerror(int err);\n#endif /* !defined(HAVE_STRERROR) */\n\n#ifndef HAVE_STRCASECMP\n# ifndef HAVE__STRICMP\nint strcasecmp(const char *str1, const char *str2);\n# else\n# define strcasecmp _stricmp\n# endif\n#endif /* !defined(HAVE_STRCASECMP) */\n\n#ifndef HAVE_SYMLINK\nint symlink(const char *from, const char *to);\n#endif\n\n#ifndef HAVE_USLEEP\nint usleep (unsigned int useconds);\n#endif /* !defined(HAVE_USLEEP) */\n\n#ifdef __i386__\nstatic inline void *memcpy_unaligned( void *dst, const void *src, size_t size )\n{\n    return memcpy( dst, src, size );\n}\n#else\nextern void *memcpy_unaligned( void *dst, const void *src, size_t size );\n#endif /* __i386__ */\n\nextern int mkstemps(char *template, int suffix_len);\n\n/* Process creation flags */\n#ifndef _P_WAIT\n# define _P_WAIT    0\n# define _P_NOWAIT  1\n# define _P_OVERLAY 2\n# define _P_NOWAITO 3\n# define _P_DETACH  4\n#endif\n#ifndef HAVE__SPAWNVP\nextern int _spawnvp(int mode, const char *cmdname, const char * const argv[]);\n#endif\n\n/* Interlocked functions */\n\n#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))\n\nstatic inline int interlocked_cmpxchg( int *dest, int xchg, int compare )\n{\n    int ret;\n    __asm__ __volatile__( \"lock; cmpxchgl %2,(%1)\"\n                          : \"=a\" (ret) : \"r\" (dest), \"r\" (xchg), \"0\" (compare) : \"memory\" );\n    return ret;\n}\n\nstatic inline void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare )\n{\n    void *ret;\n#ifdef __x86_64__\n    __asm__ __volatile__( \"lock; cmpxchgq %2,(%1)\"\n                          : \"=a\" (ret) : \"r\" (dest), \"r\" (xchg), \"0\" (compare) : \"memory\" );\n#else\n    __asm__ __volatile__( \"lock; cmpxchgl %2,(%1)\"\n                          : \"=a\" (ret) : \"r\" (dest), \"r\" (xchg), \"0\" (compare) : \"memory\" );\n#endif\n    return ret;\n}\n\nstatic inline int interlocked_xchg( int *dest, int val )\n{\n    int ret;\n    __asm__ __volatile__( \"lock; xchgl %0,(%1)\"\n                          : \"=r\" (ret) : \"r\" (dest), \"0\" (val) : \"memory\" );\n    return ret;\n}\n\nstatic inline void *interlocked_xchg_ptr( void **dest, void *val )\n{\n    void *ret;\n#ifdef __x86_64__\n    __asm__ __volatile__( \"lock; xchgq %0,(%1)\"\n                          : \"=r\" (ret) :\"r\" (dest), \"0\" (val) : \"memory\" );\n#else\n    __asm__ __volatile__( \"lock; xchgl %0,(%1)\"\n                          : \"=r\" (ret) : \"r\" (dest), \"0\" (val) : \"memory\" );\n#endif\n    return ret;\n}\n\nstatic inline int interlocked_xchg_add( int *dest, int incr )\n{\n    int ret;\n    __asm__ __volatile__( \"lock; xaddl %0,(%1)\"\n                          : \"=r\" (ret) : \"r\" (dest), \"0\" (incr) : \"memory\" );\n    return ret;\n}\n\n#ifdef __x86_64__\nstatic inline unsigned char interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high,\n                                                    __int64 xchg_low, __int64 *compare )\n{\n    unsigned char ret;\n    __asm__ __volatile__( \"lock cmpxchg16b %0; setz %b2\"\n                          : \"=m\" (dest[0]), \"=m\" (dest[1]), \"=r\" (ret),\n                            \"=a\" (compare[0]), \"=d\" (compare[1])\n                          : \"m\" (dest[0]), \"m\" (dest[1]), \"3\" (compare[0]), \"4\" (compare[1]),\n                            \"c\" (xchg_high), \"b\" (xchg_low) );\n    return ret;\n}\n#endif\n\n#else  /* __GNUC__ */\n\n#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4\nstatic inline int interlocked_cmpxchg( int *dest, int xchg, int compare )\n{\n    return __sync_val_compare_and_swap( dest, compare, xchg );\n}\n\nstatic inline int interlocked_xchg_add( int *dest, int incr )\n{\n    return __sync_fetch_and_add( dest, incr );\n}\n\nstatic inline int interlocked_xchg( int *dest, int val )\n{\n    int ret;\n    do ret = *dest; while (!__sync_bool_compare_and_swap( dest, ret, val ));\n    return ret;\n}\n#else\nextern int interlocked_cmpxchg( int *dest, int xchg, int compare );\nextern int interlocked_xchg_add( int *dest, int incr );\nextern int interlocked_xchg( int *dest, int val );\n#endif\n\n#if (defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) && __SIZEOF_POINTER__ == 4) \\\n || (defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) && __SIZEOF_POINTER__ == 8)\nstatic inline void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare )\n{\n    return __sync_val_compare_and_swap( dest, compare, xchg );\n}\n\nstatic inline void *interlocked_xchg_ptr( void **dest, void *val )\n{\n    void *ret;\n    do ret = *dest; while (!__sync_bool_compare_and_swap( dest, ret, val ));\n    return ret;\n}\n#else\nextern void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare );\nextern void *interlocked_xchg_ptr( void **dest, void *val );\n#endif\n\n#if defined(__x86_64__) || defined(__aarch64__) || defined(_WIN64)\nextern unsigned char interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high,\n                                             __int64 xchg_low, __int64 *compare );\n#endif\n\n#endif  /* __GNUC__ */\n\n#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8\nstatic inline __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare )\n{\n    return __sync_val_compare_and_swap( dest, compare, xchg );\n}\n#else\nextern __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare );\n#endif\n\n#else /* NO_LIBWINE_PORT */\n\n#define __WINE_NOT_PORTABLE(func) func##_is_not_portable func##_is_not_portable\n\n#define ffs                     __WINE_NOT_PORTABLE(ffs)\n#define fstatvfs                __WINE_NOT_PORTABLE(fstatvfs)\n#define getopt_long             __WINE_NOT_PORTABLE(getopt_long)\n#define getopt_long_only        __WINE_NOT_PORTABLE(getopt_long_only)\n#define interlocked_cmpxchg     __WINE_NOT_PORTABLE(interlocked_cmpxchg)\n#define interlocked_cmpxchg_ptr __WINE_NOT_PORTABLE(interlocked_cmpxchg_ptr)\n#define interlocked_xchg        __WINE_NOT_PORTABLE(interlocked_xchg)\n#define interlocked_xchg_ptr    __WINE_NOT_PORTABLE(interlocked_xchg_ptr)\n#define interlocked_xchg_add    __WINE_NOT_PORTABLE(interlocked_xchg_add)\n#define lstat                   __WINE_NOT_PORTABLE(lstat)\n#define memcpy_unaligned        __WINE_NOT_PORTABLE(memcpy_unaligned)\n#undef memmove\n#define memmove                 __WINE_NOT_PORTABLE(memmove)\n#define pread                   __WINE_NOT_PORTABLE(pread)\n#define pwrite                  __WINE_NOT_PORTABLE(pwrite)\n#define spawnvp                 __WINE_NOT_PORTABLE(spawnvp)\n#define statvfs                 __WINE_NOT_PORTABLE(statvfs)\n#define strcasecmp              __WINE_NOT_PORTABLE(strcasecmp)\n#define strerror                __WINE_NOT_PORTABLE(strerror)\n#define strncasecmp             __WINE_NOT_PORTABLE(strncasecmp)\n#define strnlen                 __WINE_NOT_PORTABLE(strnlen)\n#define usleep                  __WINE_NOT_PORTABLE(usleep)\n\n#endif /* NO_LIBWINE_PORT */\n\n#endif /* !defined(__WINE_WINE_PORT_H) */\n"
  },
  {
    "path": "wine/string.c",
    "content": "/*\n * Unicode string manipulation functions\n *\n * Copyright 2000 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <assert.h>\n#include <errno.h>\n#include <limits.h>\n#include <stdio.h>\n\n#define WINE_UNICODE_INLINE  /* nothing */\n#include \"wine/unicode.h\"\n\nint strcmpiW( const WCHAR *str1, const WCHAR *str2 )\n{\n    for (;;)\n    {\n        int ret = tolowerW(*str1) - tolowerW(*str2);\n        if (ret || !*str1) return ret;\n        str1++;\n        str2++;\n    }\n}\n\nint strncmpiW( const WCHAR *str1, const WCHAR *str2, int n )\n{\n    int ret = 0;\n    for ( ; n > 0; n--, str1++, str2++)\n        if ((ret = tolowerW(*str1) - tolowerW(*str2)) || !*str1) break;\n    return ret;\n}\n\nint memicmpW( const WCHAR *str1, const WCHAR *str2, int n )\n{\n    int ret = 0;\n    for ( ; n > 0; n--, str1++, str2++)\n        if ((ret = tolowerW(*str1) - tolowerW(*str2))) break;\n    return ret;\n}\n\nWCHAR *strstrW( const WCHAR *str, const WCHAR *sub )\n{\n    while (*str)\n    {\n        const WCHAR *p1 = str, *p2 = sub;\n        while (*p1 && *p2 && *p1 == *p2) { p1++; p2++; }\n        if (!*p2) return (WCHAR *)str;\n        str++;\n    }\n    return NULL;\n}\n\n/* strtolW and strtoulW implementation based on the GNU C library code */\n/* Copyright (C) 1991,92,94,95,96,97,98,99,2000,2001 Free Software Foundation, Inc. */\n\nlong int strtolW( const WCHAR *nptr, WCHAR **endptr, int base )\n{\n  int negative;\n  register unsigned long int cutoff;\n  register unsigned int cutlim;\n  register unsigned long int i;\n  register const WCHAR *s;\n  register WCHAR c;\n  const WCHAR *save, *end;\n  int overflow;\n\n  if (base < 0 || base == 1 || base > 36) return 0;\n\n  save = s = nptr;\n\n  /* Skip white space.  */\n  while (isspaceW (*s))\n    ++s;\n  if (!*s) goto noconv;\n\n  /* Check for a sign.  */\n  negative = 0;\n  if (*s == '-')\n    {\n      negative = 1;\n      ++s;\n    }\n  else if (*s == '+')\n    ++s;\n\n  /* Recognize number prefix and if BASE is zero, figure it out ourselves.  */\n  if (*s == '0')\n    {\n      if ((base == 0 || base == 16) && toupperW(s[1]) == 'X')\n\t{\n\t  s += 2;\n\t  base = 16;\n\t}\n      else if (base == 0)\n\tbase = 8;\n    }\n  else if (base == 0)\n    base = 10;\n\n  /* Save the pointer so we can check later if anything happened.  */\n  save = s;\n  end = NULL;\n\n  cutoff = ULONG_MAX / (unsigned long int) base;\n  cutlim = ULONG_MAX % (unsigned long int) base;\n\n  overflow = 0;\n  i = 0;\n  c = *s;\n  for (;c != '\\0'; c = *++s)\n  {\n      if (s == end)\n          break;\n      if (c >= '0' && c <= '9')\n          c -= '0';\n      else if (isalphaW (c))\n          c = toupperW (c) - 'A' + 10;\n      else\n          break;\n      if ((int) c >= base)\n          break;\n      /* Check for overflow.  */\n      if (i > cutoff || (i == cutoff && c > cutlim))\n          overflow = 1;\n      else\n      {\n          i *= (unsigned long int) base;\n          i += c;\n      }\n  }\n\n  /* Check if anything actually happened.  */\n  if (s == save)\n    goto noconv;\n\n  /* Store in ENDPTR the address of one character\n     past the last character we converted.  */\n  if (endptr != NULL)\n    *endptr = (WCHAR *)s;\n\n  /* Check for a value that is within the range of\n     `unsigned LONG int', but outside the range of `LONG int'.  */\n  if (overflow == 0\n      && i > (negative\n\t      ? -((unsigned long int) (LONG_MIN + 1)) + 1\n\t      : (unsigned long int) LONG_MAX))\n    overflow = 1;\n\n  if (overflow)\n    {\n      errno = ERANGE;\n      return negative ? LONG_MIN : LONG_MAX;\n    }\n\n  /* Return the result of the appropriate sign.  */\n  return negative ? -i : i;\n\nnoconv:\n  /* We must handle a special case here: the base is 0 or 16 and the\n     first two characters are '0' and 'x', but the rest are not\n     hexadecimal digits.  This is no error case.  We return 0 and\n     ENDPTR points to the `x`.  */\n  if (endptr != NULL)\n    {\n      if (save - nptr >= 2 && toupperW (save[-1]) == 'X'\n\t  && save[-2] == '0')\n\t*endptr = (WCHAR *)&save[-1];\n      else\n\t/*  There was no number to convert.  */\n\t*endptr = (WCHAR *)nptr;\n    }\n\n  return 0L;\n}\n\n\nunsigned long int strtoulW( const WCHAR *nptr, WCHAR **endptr, int base )\n{\n  int negative;\n  register unsigned long int cutoff;\n  register unsigned int cutlim;\n  register unsigned long int i;\n  register const WCHAR *s;\n  register WCHAR c;\n  const WCHAR *save, *end;\n  int overflow;\n\n  if (base < 0 || base == 1 || base > 36) return 0;\n\n  save = s = nptr;\n\n  /* Skip white space.  */\n  while (isspaceW (*s))\n    ++s;\n  if (!*s) goto noconv;\n\n  /* Check for a sign.  */\n  negative = 0;\n  if (*s == '-')\n    {\n      negative = 1;\n      ++s;\n    }\n  else if (*s == '+')\n    ++s;\n\n  /* Recognize number prefix and if BASE is zero, figure it out ourselves.  */\n  if (*s == '0')\n    {\n      if ((base == 0 || base == 16) && toupperW(s[1]) == 'X')\n\t{\n\t  s += 2;\n\t  base = 16;\n\t}\n      else if (base == 0)\n\tbase = 8;\n    }\n  else if (base == 0)\n    base = 10;\n\n  /* Save the pointer so we can check later if anything happened.  */\n  save = s;\n  end = NULL;\n\n  cutoff = ULONG_MAX / (unsigned long int) base;\n  cutlim = ULONG_MAX % (unsigned long int) base;\n\n  overflow = 0;\n  i = 0;\n  c = *s;\n  for (;c != '\\0'; c = *++s)\n  {\n      if (s == end)\n          break;\n      if (c >= '0' && c <= '9')\n          c -= '0';\n      else if (isalphaW (c))\n          c = toupperW (c) - 'A' + 10;\n      else\n          break;\n      if ((int) c >= base)\n          break;\n      /* Check for overflow.  */\n      if (i > cutoff || (i == cutoff && c > cutlim))\n          overflow = 1;\n      else\n      {\n          i *= (unsigned long int) base;\n          i += c;\n      }\n  }\n\n  /* Check if anything actually happened.  */\n  if (s == save)\n    goto noconv;\n\n  /* Store in ENDPTR the address of one character\n     past the last character we converted.  */\n  if (endptr != NULL)\n    *endptr = (WCHAR *)s;\n\n  if (overflow)\n    {\n      errno = ERANGE;\n      return ULONG_MAX;\n    }\n\n  /* Return the result of the appropriate sign.  */\n  return negative ? -i : i;\n\nnoconv:\n  /* We must handle a special case here: the base is 0 or 16 and the\n     first two characters are '0' and 'x', but the rest are not\n     hexadecimal digits.  This is no error case.  We return 0 and\n     ENDPTR points to the `x`.  */\n  if (endptr != NULL)\n    {\n      if (save - nptr >= 2 && toupperW (save[-1]) == 'X'\n\t  && save[-2] == '0')\n\t*endptr = (WCHAR *)&save[-1];\n      else\n\t/*  There was no number to convert.  */\n\t*endptr = (WCHAR *)nptr;\n    }\n\n  return 0L;\n}\n\n\n/* format a WCHAR string according to a printf format; helper for vsnprintfW */\nstatic size_t format_string( WCHAR *buffer, size_t len, const char *format, const WCHAR *str, int str_len )\n{\n    size_t count = 0;\n    int i, left_align = 0, width = 0, max = 0;\n\n    assert( *format == '%' );\n    format++; /* skip '%' */\n\n    while (*format == '0' || *format == '+' || *format == '-' || *format == ' ' || *format == '#')\n    {\n        if (*format == '-') left_align = 1;\n        format++;\n    }\n\n    while (isdigit(*format)) width = width * 10 + *format++ - '0';\n\n    if (str_len == -1) str_len = strlenW( str );\n    if (*format == '.')\n    {\n        format++;\n        while (isdigit(*format)) max = max * 10 + *format++ - '0';\n        if (max > str_len) max = str_len;\n    }\n    else max = str_len;\n\n    if (*format == 'h' || *format == 'l') format++;\n\n    assert( *format == 's' );\n\n    if (!left_align && width > max)\n    {\n        for (i = 0; i < width - max; i++)\n        {\n            if (count++ < len)\n                *buffer++ = ' ';\n        }\n    }\n\n    if (count < len)\n        memcpy( buffer, str, min( max, len - count ) * sizeof(WCHAR) );\n    count += max;\n    buffer += max;\n\n    if (left_align && width > max)\n    {\n        for (i = 0; i < width - max; i++)\n        {\n            if (count++ < len)\n                *buffer++ = ' ';\n        }\n    }\n    return count;\n}\n\nint vsnprintfW(WCHAR *str, size_t len, const WCHAR *format, va_list valist)\n{\n    unsigned int written = 0;\n    const WCHAR *iter = format;\n    char bufa[512], fmtbufa[64], *fmta;\n\n    while (*iter)\n    {\n        while (*iter && *iter != '%')\n        {\n            if (written++ < len)\n                *str++ = *iter;\n            iter++;\n        }\n        if (*iter == '%')\n        {\n            if (iter[1] == '%')\n            {\n                if (written++ < len)\n                    *str++ = '%'; /* \"%%\"->'%' */\n                iter += 2;\n                continue;\n            }\n\n            fmta = fmtbufa;\n            *fmta++ = *iter++;\n            while (*iter == '0' ||\n                   *iter == '+' ||\n                   *iter == '-' ||\n                   *iter == ' ' ||\n                   *iter == '*' ||\n                   *iter == '#')\n            {\n                if (*iter == '*')\n                {\n                    char *buffiter = bufa;\n                    int fieldlen = va_arg(valist, int);\n                    sprintf(buffiter, \"%d\", fieldlen);\n                    while (*buffiter)\n                        *fmta++ = *buffiter++;\n                }\n                else\n                    *fmta++ = *iter;\n                iter++;\n            }\n\n            while (isdigit(*iter))\n                *fmta++ = *iter++;\n\n            if (*iter == '.')\n            {\n                *fmta++ = *iter++;\n                if (*iter == '*')\n                {\n                    char *buffiter = bufa;\n                    int fieldlen = va_arg(valist, int);\n                    sprintf(buffiter, \"%d\", fieldlen);\n                    while (*buffiter)\n                        *fmta++ = *buffiter++;\n                    iter++;\n                }\n                else\n                    while (isdigit(*iter))\n                        *fmta++ = *iter++;\n            }\n            if (*iter == 'h' || *iter == 'l')\n                *fmta++ = *iter++;\n\n            switch (*iter)\n            {\n            case 's':\n            {\n                static const WCHAR none[] = { '(','n','u','l','l',')',0 };\n                const WCHAR *wstr = va_arg(valist, const WCHAR *);\n                size_t remaining = written < len ? len - written : 0;\n                size_t count;\n\n                *fmta++ = 's';\n                *fmta = 0;\n                count = format_string( str, remaining, fmtbufa, wstr ? wstr : none, -1 );\n                str += min( count, remaining );\n                written += count;\n                iter++;\n                break;\n            }\n\n            case 'c':\n            {\n                WCHAR wstr;\n                size_t remaining = written < len ? len - written : 0;\n                size_t count;\n\n                wstr = va_arg(valist, int);\n                *fmta++ = 's';\n                *fmta = 0;\n                count = format_string( str, remaining, fmtbufa, &wstr, 1 );\n                str += min( count, remaining );\n                written += count;\n                iter++;\n                break;\n            }\n\n            default:\n            {\n                /* For non wc types, use system sprintf and append to wide char output */\n                /* FIXME: for unrecognised types, should ignore % when printing */\n                char *bufaiter = bufa;\n                if (*iter == 'p')\n                    sprintf(bufaiter, \"%0*lX\", 2 * (int)sizeof(void*),\n                            (unsigned long)va_arg(valist, void *));\n                else\n                {\n                    *fmta++ = *iter;\n                    *fmta = '\\0';\n                    if (*iter == 'a' || *iter == 'A' ||\n                        *iter == 'e' || *iter == 'E' ||\n                        *iter == 'f' || *iter == 'F' || \n                        *iter == 'g' || *iter == 'G')\n                        sprintf(bufaiter, fmtbufa, va_arg(valist, double));\n                    else\n                    {\n                        /* FIXME: On 32 bit systems this doesn't handle int 64's. */\n                        sprintf(bufaiter, fmtbufa, va_arg(valist, void *));\n                    }\n                }\n                while (*bufaiter)\n                {\n                    if (written++ < len)\n                        *str++ = *bufaiter;\n                    bufaiter++;\n                }\n                iter++;\n                break;\n            }\n            }\n        }\n    }\n    if (len)\n    {\n        if (written >= len)\n            str--;\n        *str++ = 0;\n    }\n\n    /* FIXME: POSIX [v]snprintf() returns the equivalent of written, not -1, on short buffer. */\n    return written < len ? (int)written : -1;\n}\n\nint vsprintfW( WCHAR *str, const WCHAR *format, va_list valist )\n{\n    return vsnprintfW( str, INT_MAX, format, valist );\n}\n\nint snprintfW( WCHAR *str, size_t len, const WCHAR *format, ...)\n{\n    int retval;\n    va_list valist;\n    va_start(valist, format);\n    retval = vsnprintfW(str, len, format, valist);\n    va_end(valist);\n    return retval;\n}\n\nint sprintfW( WCHAR *str, const WCHAR *format, ...)\n{\n    int retval;\n    va_list valist;\n    va_start(valist, format);\n    retval = vsnprintfW(str, INT_MAX, format, valist);\n    va_end(valist);\n    return retval;\n}\n"
  },
  {
    "path": "wine/wctype.c",
    "content": "/* Unicode ctype tables */\n/* Automatically generated; DO NOT EDIT!! */\n\n//#include \"wine/unicode.h\"\n\nconst unsigned short wine_wctype_table[17152] =\n{\n    /* offsets */\n    0x0100, 0x0200, 0x0300, 0x0400, 0x0500, 0x0600, 0x0700, 0x0800,\n    0x0900, 0x0a00, 0x0b00, 0x0c00, 0x0d00, 0x0e00, 0x0f00, 0x1000,\n    0x1100, 0x1200, 0x1300, 0x1400, 0x1500, 0x1200, 0x1600, 0x1700,\n    0x1800, 0x1900, 0x1a00, 0x1b00, 0x1c00, 0x1d00, 0x1e00, 0x1f00,\n    0x2000, 0x2100, 0x2200, 0x2300, 0x2400, 0x2500, 0x2600, 0x2700,\n    0x2800, 0x2900, 0x2500, 0x2a00, 0x2b00, 0x2c00, 0x2d00, 0x2e00,\n    0x2f00, 0x3000, 0x3100, 0x3200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x3300, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x3400,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x3500, 0x1200, 0x3600, 0x3700,\n    0x3800, 0x3900, 0x3a00, 0x3b00, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x3c00,\n    0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800,\n    0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800,\n    0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800,\n    0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800, 0x2800,\n    0x2800, 0x1200, 0x3d00, 0x3e00, 0x3f00, 0x4000, 0x4100, 0x4200,\n    /* values */\n    0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220,\n    0xe220, 0x9268, 0x8228, 0x9228, 0xa228, 0x8228, 0xe220, 0xe220,\n    0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220,\n    0xe220, 0xe220, 0xe220, 0xe220, 0x8220, 0x8220, 0x8220, 0x9220,\n    0xa248, 0xb210, 0xb210, 0x5210, 0x5210, 0x5210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0x4210, 0x7210, 0x4210, 0x7210, 0x7210,\n    0x3284, 0x3284, 0x3284, 0x3284, 0x3284, 0x3284, 0x3284, 0x3284,\n    0x3284, 0x3284, 0x7210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0x1381, 0x1381, 0x1381, 0x1381, 0x1381, 0x1381, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0x1382, 0x1382, 0x1382, 0x1382, 0x1382, 0x1382, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0xb210, 0xb210, 0xb210, 0xb210, 0xe220,\n    0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0x8228, 0xe220, 0xe220,\n    0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220,\n    0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220,\n    0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220,\n    0x7248, 0xb210, 0x5210, 0x5210, 0x5210, 0x5210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0x1310, 0xb210, 0xb210, 0xe230, 0xb210, 0xb210,\n    0x5210, 0x5210, 0x3214, 0x3214, 0xb210, 0x1312, 0xb210, 0xb210,\n    0xb210, 0x3214, 0x1310, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0xb210,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0xb210,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301,\n    0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301,\n    0x1302, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1302,\n    0x1302, 0x1301, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1301,\n    0x1302, 0x1301, 0x1301, 0x1301, 0x1302, 0x1302, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1302, 0x1301, 0x1301, 0x1302, 0x1301, 0x1301,\n    0x1301, 0x1302, 0x1302, 0x1302, 0x1301, 0x1301, 0x1302, 0x1301,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1301,\n    0x1302, 0x1301, 0x1302, 0x1302, 0x1301, 0x1302, 0x1301, 0x1301,\n    0x1302, 0x1301, 0x1301, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301,\n    0x1301, 0x1302, 0x1302, 0x1300, 0x1301, 0x1302, 0x1302, 0x1302,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1301, 0x1303, 0x1302, 0x1301,\n    0x1303, 0x1302, 0x1301, 0x1303, 0x1302, 0x1301, 0x1302, 0x1301,\n    0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301,\n    0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1302, 0x1301, 0x1303, 0x1302, 0x1301, 0x1302, 0x1301, 0x1301,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1301, 0x1301, 0x1302, 0x1301, 0x1301, 0x1302,\n    0x1302, 0x1301, 0x1302, 0x1301, 0x1301, 0x1301, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1300, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0xb300, 0xb300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0xb200, 0xb200, 0xb200, 0xb200, 0xb300, 0xb300,\n    0xb300, 0xb300, 0xb300, 0xb300, 0xb300, 0xb300, 0xb300, 0xb300,\n    0x1300, 0x1300, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb300, 0xb200, 0x1300, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0x1301, 0x1302, 0x1301, 0x1302, 0xb300, 0xb200, 0x1301, 0x1302,\n    0x0000, 0x0000, 0x1300, 0x1302, 0x1302, 0x1302, 0xb210, 0x1301,\n    0x0000, 0x0000, 0x0000, 0x0000, 0xb200, 0xb200, 0x1301, 0xb210,\n    0x1301, 0x1301, 0x1301, 0x0000, 0x1301, 0x0000, 0x1301, 0x1301,\n    0x1302, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x0000, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1301,\n    0x1302, 0x1302, 0x1301, 0x1301, 0x1301, 0x1302, 0x1302, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1301, 0x1302, 0xb200, 0x1301,\n    0x1302, 0x1301, 0x1301, 0x1302, 0x1302, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301,\n    0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x0000, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x0000,\n    0x0000, 0x1300, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1210, 0xb210, 0x0000, 0x0000, 0xb200, 0xb200, 0x5200,\n    0x0000, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x2210, 0xd200,\n    0x2210, 0xd200, 0xd200, 0x2210, 0xd200, 0xd200, 0x2210, 0xd200,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300,\n    0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300,\n    0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300,\n    0x2300, 0x2300, 0x2300, 0x0000, 0x0000, 0x0000, 0x0000, 0x2300,\n    0x2300, 0x2300, 0x2300, 0x2210, 0x2210, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x6220, 0x6220, 0x6220, 0x6220, 0x6220, 0x6220, 0xb200, 0xb200,\n    0xc200, 0x5210, 0x5210, 0xc200, 0x7210, 0xc210, 0xb200, 0xb200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xc210, 0xc220, 0x0000, 0xc210, 0xc210,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0x6204, 0x6204, 0x6204, 0x6204, 0x6204, 0x6204, 0x6204, 0x6204,\n    0x6204, 0x6204, 0x5210, 0x6210, 0x6210, 0xc210, 0xc300, 0xc300,\n    0xd200, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc210, 0xc300, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x6220, 0xb200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xc300, 0xc300, 0xd200,\n    0xd200, 0xb200, 0xd200, 0xd200, 0xd200, 0xd200, 0xc300, 0xc300,\n    0x3204, 0x3204, 0x3204, 0x3204, 0x3204, 0x3204, 0x3204, 0x3204,\n    0x3204, 0x3204, 0xc300, 0xc300, 0xc300, 0xc200, 0xc200, 0xc300,\n    0xc210, 0xc210, 0xc210, 0xc210, 0xc210, 0xc210, 0xc210, 0xc210,\n    0xc210, 0xc210, 0xc210, 0xc210, 0xc210, 0xc210, 0x0000, 0xc220,\n    0xc300, 0xd200, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0x0000, 0x0000, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xc300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x2204, 0x2204, 0x2204, 0x2204, 0x2204, 0x2204, 0x2204, 0x2204,\n    0x2204, 0x2204, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300,\n    0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300,\n    0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300,\n    0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300,\n    0x2300, 0x2300, 0x2300, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0x2300, 0x2300, 0xb200, 0xb210,\n    0xb210, 0xb210, 0x2300, 0x0000, 0x0000, 0xd200, 0x2200, 0x2200,\n    0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300,\n    0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300,\n    0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0xd200, 0xd200,\n    0xd200, 0xd200, 0x2300, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0x2300, 0xd200, 0xd200, 0xd200,\n    0x2300, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0x0000,\n    0x2210, 0x2210, 0x2210, 0x2210, 0x2210, 0x2210, 0x2210, 0x2210,\n    0x2210, 0x2210, 0x2210, 0x2210, 0x2210, 0x2210, 0x2210, 0x0000,\n    0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300,\n    0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300,\n    0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300,\n    0x2300, 0xd200, 0xd200, 0xd200, 0x0000, 0x0000, 0x2210, 0x0000,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0x0000, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0x6220, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0x1200, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0xd200, 0x1200, 0xd200, 0x1300, 0x1200, 0x1200,\n    0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0x1200, 0x1200, 0x1200, 0x1200, 0xd200, 0x1200, 0x1200,\n    0x1300, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0xd200, 0xd200, 0x1210, 0x1210, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1210, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0xd200, 0x1200, 0x1200, 0x0000, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x1300,\n    0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x0000, 0x1300, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x0000, 0x0000, 0xd200, 0x1300, 0x1200, 0x1200,\n    0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0x0000, 0x1200,\n    0x1200, 0x0000, 0x0000, 0x1200, 0x1200, 0xd200, 0x1300, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1200,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x0000, 0x1300,\n    0x1300, 0x1300, 0xd200, 0xd200, 0x0000, 0x0000, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1300, 0x1300, 0x5200, 0x5200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x5200, 0x1300, 0x1210, 0xd200, 0x0000,\n    0x0000, 0xd200, 0xd200, 0x1200, 0x0000, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300,\n    0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x0000, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x0000,\n    0x1300, 0x1300, 0x0000, 0x0000, 0xd200, 0x0000, 0x1200, 0x1200,\n    0x1200, 0xd200, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000, 0xd200,\n    0xd200, 0x0000, 0x0000, 0xd200, 0xd200, 0xd200, 0x0000, 0x0000,\n    0x0000, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0xd200, 0xd200, 0x1300, 0x1300, 0x1300, 0xd200, 0x1210, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0xd200, 0xd200, 0x1200, 0x0000, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300,\n    0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x0000, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x0000, 0x0000, 0xd200, 0x1300, 0x1200, 0x1200,\n    0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0xd200,\n    0xd200, 0x1200, 0x0000, 0x1200, 0x1200, 0xd200, 0x0000, 0x0000,\n    0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0xd200, 0xd200, 0x0000, 0x0000, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1210, 0x5200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x1300, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0x0000, 0xd200, 0x1200, 0x1200, 0x0000, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x1300,\n    0x1300, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x0000, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x0000, 0x0000, 0xd200, 0x1300, 0x1200, 0xd200,\n    0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0x0000, 0x1200,\n    0x1200, 0x0000, 0x0000, 0x1200, 0x1200, 0xd200, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd200, 0x1200,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x0000, 0x1300,\n    0x1300, 0x1300, 0xd200, 0xd200, 0x0000, 0x0000, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1200, 0x1300, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0xd200, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300,\n    0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000,\n    0x0000, 0x1300, 0x1300, 0x0000, 0x1300, 0x0000, 0x1300, 0x1300,\n    0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x1200, 0x1200,\n    0xd200, 0x1200, 0x1200, 0x0000, 0x0000, 0x0000, 0x1200, 0x1200,\n    0x1200, 0x0000, 0x1200, 0x1200, 0x1200, 0xd200, 0x0000, 0x0000,\n    0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1200,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1200, 0x1200, 0x1200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0x5200, 0xb200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xd200, 0x1200, 0x1200, 0x1200, 0xd200, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300,\n    0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x1300, 0xd200, 0xd200,\n    0xd200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0000, 0xd200, 0xd200,\n    0xd200, 0x0000, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd200, 0xd200, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0xd200, 0xd200, 0x0000, 0x0000, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x1200,\n    0x1300, 0xd200, 0x1200, 0x1200, 0x1210, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300,\n    0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x0000, 0x0000, 0xd200, 0x1300, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0000, 0x1200, 0x1200,\n    0x1200, 0x0000, 0x1200, 0x1200, 0xd200, 0xd200, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1200, 0x1200, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x0000,\n    0x1300, 0x1300, 0xd200, 0xd200, 0x0000, 0x0000, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x0000, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xd200, 0xd200, 0x1200, 0x1200, 0x0000, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300,\n    0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0x1300, 0x1200, 0x1200,\n    0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0x1200, 0x1200,\n    0x1200, 0x0000, 0x1200, 0x1200, 0x1200, 0xd200, 0x1300, 0x1200,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1300,\n    0x1300, 0x1300, 0xd200, 0xd200, 0x0000, 0x0000, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x0000, 0x0000, 0x1200, 0x1200, 0x0000, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0x0000, 0x0000, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000, 0x1200,\n    0x1200, 0x1200, 0xd200, 0xd200, 0xd200, 0x0000, 0xd200, 0x0000,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x0000, 0x0000, 0x1200, 0x1200, 0x1210, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0xd200, 0x1300, 0x1300, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000, 0x5200,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1210,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x1210, 0x1210, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x1300, 0x1300, 0x0000, 0x1300, 0x0000, 0x0000, 0x1300,\n    0x1300, 0x0000, 0x1300, 0x0000, 0x0000, 0x1300, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x0000, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x0000, 0x1300,\n    0x0000, 0x0000, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300, 0x1300,\n    0x1300, 0xd200, 0x1300, 0x1300, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0x0000, 0xd200, 0xd200, 0x1300, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x0000,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0x0000,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1200, 0x1200, 0x1200, 0x1210, 0x1210, 0x1210, 0x1210,\n    0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210,\n    0x1210, 0x1210, 0x1210, 0x1200, 0x1210, 0x1200, 0x1200, 0x1200,\n    0xd200, 0xd200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xd200, 0x1200, 0xd200,\n    0x1200, 0xd200, 0xb210, 0xb210, 0xb210, 0xb210, 0x1200, 0x1200,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000,\n    0x0000, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1210, 0xd200, 0xd200,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0x0000, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xd200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0000, 0x1200, 0x1200,\n    0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1210, 0x1210, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1200, 0x1200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0x1200, 0xd200, 0xd200, 0x1200, 0x1200, 0xd200, 0xd200, 0x1300,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1200, 0x1200,\n    0xd200, 0xd200, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200,\n    0xd200, 0x1300, 0x1200, 0x1200, 0x1200, 0x1300, 0x1300, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1300, 0x1300,\n    0x1300, 0xd200, 0xd200, 0xd200, 0xd200, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0xd200, 0x1200, 0x1200, 0xd200, 0xd200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xd200, 0x1300, 0x1200,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x1200, 0x1200, 0x1200, 0xd200, 0x1200, 0x1200,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x0000, 0x1301,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1301, 0x0000, 0x0000,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1210, 0x1300, 0x1302, 0x1302, 0x1302,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0xd200, 0xd200, 0xd200,\n    0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210,\n    0x1210, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x0000, 0x0000,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x0000, 0x0000,\n    0xb210, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1210, 0x1210, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0xa208, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0xb210, 0xb210, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1210, 0x1210, 0x1210, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300,\n    0x1300, 0x1300, 0xd200, 0xd200, 0xd200, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0xd200, 0xd200, 0xd200, 0x1210, 0x1210, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0xd200, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x1300, 0x1300,\n    0x1300, 0x0000, 0xd200, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0x1200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xd200, 0x1200,\n    0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0x1210, 0x1210, 0x1210, 0x1300,\n    0x1210, 0x1210, 0x1210, 0x5200, 0x1300, 0xd200, 0x0000, 0x0000,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xd200, 0xd200, 0xd200, 0xe220, 0x0000,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0xd200, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0xd200, 0xd200, 0xd200, 0x1200, 0x1200, 0x1200, 0x1200, 0xd200,\n    0xd200, 0x1200, 0x1200, 0x1200, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1200, 0x1200, 0xd200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0xd200, 0xd200, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xb200, 0x0000, 0x0000, 0x0000, 0xb210, 0xb210, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x1200, 0x0000, 0x0000, 0x0000, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200,\n    0xd200, 0x1200, 0x1200, 0xd200, 0x0000, 0x0000, 0x1210, 0x1210,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1200, 0xd200, 0x1200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000,\n    0xd200, 0x1200, 0xd200, 0x1200, 0x1200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000, 0x0000, 0xd200,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1300,\n    0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x0000, 0x0000,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xd200, 0xd200, 0xd200, 0xd200, 0x1200, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0x1200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0x1200, 0xd200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0xd200, 0x1200, 0x1200, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210,\n    0x1210, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0000, 0x0000, 0x0000,\n    0xd200, 0xd200, 0x1200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1200, 0x1200,\n    0xd200, 0xd200, 0x1200, 0xd200, 0xd200, 0xd200, 0x1300, 0x1300,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0x1200,\n    0xd200, 0xd200, 0x1200, 0x1200, 0x1200, 0xd200, 0x1200, 0xd200,\n    0xd200, 0xd200, 0x1200, 0x1200, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x1210, 0x1210, 0x1210, 0x1210,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0x1200, 0x1200, 0xd200, 0xd200,\n    0x0000, 0x0000, 0x0000, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1210, 0x1210,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x0000, 0x0000, 0x1301, 0x1301, 0x1301,\n    0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xd200, 0xd200, 0xd200, 0x1210, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0x1200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1200, 0x1200, 0xd200, 0x1300, 0x1300, 0x1200,\n    0xd200, 0xd200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1300, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0x0000, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x0000, 0x0000,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x0000, 0x0000,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x0000, 0x0000,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x0000, 0x0000,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x0000, 0x1301, 0x0000, 0x1301, 0x0000, 0x1301, 0x0000, 0x1301,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x0000, 0x0000,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1303, 0x1303, 0x1303, 0x1303, 0x1303, 0x1303, 0x1303, 0x1303,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1303, 0x1303, 0x1303, 0x1303, 0x1303, 0x1303, 0x1303, 0x1303,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1303, 0x1303, 0x1303, 0x1303, 0x1303, 0x1303, 0x1303, 0x1303,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x0000, 0x1302, 0x1302,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1303, 0xb200, 0x1302, 0xb200,\n    0xb200, 0xb200, 0x1302, 0x1302, 0x1302, 0x0000, 0x1302, 0x1302,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1303, 0xb200, 0xb200, 0xb200,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x0000, 0x0000, 0x1302, 0x1302,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x0000, 0xb200, 0xb200, 0xb200,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0xb200, 0xb200, 0xb200,\n    0x0000, 0x0000, 0x1302, 0x1302, 0x1302, 0x0000, 0x1302, 0x1302,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1303, 0xb200, 0xb200, 0x0000,\n    0xa208, 0xa208, 0xa208, 0xa208, 0xa208, 0xa208, 0xa208, 0xa208,\n    0xa208, 0xa208, 0xa208, 0xe220, 0xe220, 0xe220, 0x1220, 0x2220,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xa208, 0x8208, 0xf220, 0xf220, 0xf220, 0xf220, 0xf220, 0x7208,\n    0x5210, 0x5210, 0x5210, 0x5210, 0x5210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xb210, 0x7200, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb200, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xa208,\n    0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0x0000, 0xf220, 0xf220,\n    0xf220, 0xf220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220, 0xe220,\n    0x3200, 0x1302, 0x0000, 0x0000, 0x3200, 0x3200, 0x3200, 0x3200,\n    0x3200, 0x3200, 0x4200, 0x4200, 0xb200, 0xb210, 0xb210, 0x1302,\n    0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200,\n    0x3200, 0x3200, 0x4200, 0x4200, 0xb200, 0xb210, 0xb210, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000,\n    0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200,\n    0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200,\n    0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200,\n    0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xb200, 0xb200, 0x1301, 0xb200, 0xb200, 0xb200, 0xb200, 0x1301,\n    0xb200, 0xb200, 0x1302, 0x1301, 0x1301, 0x1301, 0x1302, 0x1302,\n    0x1301, 0x1301, 0x1301, 0x1302, 0xb200, 0x1301, 0xb200, 0xb200,\n    0xb200, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0x1301, 0xb200, 0x1301, 0xb200,\n    0x1301, 0xb200, 0x1301, 0x1301, 0x1301, 0x1301, 0x5200, 0x1302,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1302, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1302, 0xb200, 0xb200, 0x1302, 0x1302, 0x1301, 0x1301,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x1301, 0x1302, 0x1302,\n    0x1302, 0x1302, 0xb200, 0xb200, 0xb200, 0xb200, 0x1302, 0x1200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1301, 0x1302, 0x1300, 0x1300, 0x1300,\n    0x1300, 0xb200, 0xb200, 0xb200, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0x4200, 0x5200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb210, 0xb210, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x1200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200,\n    0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200, 0x3200,\n    0x3200, 0x3200, 0x3200, 0x3200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0x1200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb210, 0xb210, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb210, 0xb210, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0x0000, 0x0000, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x0000, 0x0000,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0x0000, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x0000,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x0000,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x0000,\n    0x1301, 0x1302, 0x1301, 0x1301, 0x1301, 0x1302, 0x1302, 0x1301,\n    0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1302, 0x1301, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1300, 0x1300, 0x1301, 0x1301,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1302, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0x1301, 0x1302, 0x1301, 0x1302, 0xd200,\n    0xd200, 0xd200, 0x1301, 0x1302, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0xb210, 0xb210, 0xb210, 0xb210, 0xb200, 0xb210, 0xb210,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x0000, 0x1302,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1302, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300,\n    0x1210, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd200,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb300,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0x0000, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xa248, 0xb210, 0xb210, 0xb210, 0xb200, 0x1300, 0x1300, 0x1300,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb200, 0xb200, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0xd200, 0xd200, 0xd200, 0xd200, 0x1200, 0x1200,\n    0xb210, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xb200, 0xb200,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xb210, 0xb200, 0xb200,\n    0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0x0000, 0xd200, 0xd200, 0xb200, 0xb200, 0x1300, 0x1300, 0x1300,\n    0xb210, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0xb210, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xb200, 0xb200, 0x0000,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0xb200, 0xb200, 0xb200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x0000,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xb200, 0xb200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0xb200,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1210, 0x1210,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xb210, 0xb210, 0xb210,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1300, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xb210, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xb210, 0xb300,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1300, 0x1300, 0xd200, 0xd200,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0xd200, 0xd200, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb300,\n    0xb300, 0xb300, 0xb300, 0xb300, 0xb300, 0xb300, 0xb300, 0xb300,\n    0xb200, 0xb200, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1302, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1300, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0xb300, 0x1200, 0x1200, 0x1301, 0x1302, 0x1301, 0x1302, 0x1300,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1302, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1302,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1302, 0x1301, 0x1302,\n    0x1301, 0x1302, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1300,\n    0x1300, 0x1300, 0x1302, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0xd200, 0x1300, 0x1300, 0x1300, 0xd200, 0x1300,\n    0x1300, 0x1300, 0x1300, 0xd200, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1200, 0x1200, 0xd200, 0xd200, 0x1200,\n    0xb200, 0xb200, 0xb200, 0xb200, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x5200, 0x5200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0xb210, 0xb210, 0xb210, 0xb210,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1200, 0x1200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1200, 0x1200, 0x1200, 0xd200, 0xd200, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1210, 0x1210,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1210, 0x1210, 0x1210, 0x1300, 0x1210, 0x1300, 0x1300, 0xd200,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1210, 0x1210,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0x1200, 0x1200, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1210,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000,\n    0xd200, 0xd200, 0xd200, 0x1200, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0xd200, 0x1200, 0x1200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0x1200, 0x1200, 0xd200, 0x1200, 0x1200, 0x1200,\n    0x1200, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210,\n    0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x1210, 0x0000, 0x1300,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x0000, 0x0000, 0x0000, 0x0000, 0x1210, 0x1210,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0x1200,\n    0x1200, 0xd200, 0xd200, 0x1200, 0x1200, 0xd200, 0xd200, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0xd200, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0x1200, 0x0000, 0x0000,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x0000, 0x0000, 0x1210, 0x1210, 0x1210, 0x1210,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1200,\n    0x1200, 0x1200, 0x1300, 0x1200, 0xd200, 0x1200, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0xd200, 0x1300, 0xd200, 0xd200, 0xd200, 0x1300, 0x1300, 0xd200,\n    0xd200, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0xd200, 0xd200,\n    0x1300, 0xd200, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1210, 0x1210,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1200, 0xd200, 0xd200, 0x1200, 0x1200,\n    0x1210, 0x1210, 0x1300, 0x1300, 0x1300, 0x1200, 0xd200, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1200, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1200, 0x1200, 0xd200, 0x1200, 0x1200,\n    0xd200, 0x1200, 0x1200, 0x1210, 0x1200, 0xd200, 0x0000, 0x0000,\n    0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204, 0x1204,\n    0x1204, 0x1204, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2300, 0xd200, 0x2300,\n    0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300,\n    0x2300, 0x4200, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300,\n    0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x0000,\n    0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x0000, 0x2300, 0x0000,\n    0x2300, 0x2300, 0x0000, 0x2300, 0x2300, 0x0000, 0x2300, 0x2300,\n    0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300, 0x2300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc200, 0xc200, 0xc200, 0xc200, 0xc200, 0xc200,\n    0xc200, 0xc200, 0xc200, 0xc200, 0xc200, 0xc200, 0xc200, 0xc200,\n    0xc200, 0xc200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xb210, 0xb210,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0x0000, 0x0000, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc200, 0xb200, 0x0000, 0x0000,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210,\n    0x7210, 0xb210, 0x7210, 0x0000, 0xb210, 0x7210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0x5210,\n    0xb210, 0xb210, 0x4200, 0x4210, 0xb200, 0xb200, 0xb200, 0x0000,\n    0xb210, 0x5200, 0x5210, 0xb210, 0x0000, 0x0000, 0x0000, 0x0000,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0x0000, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0xc300,\n    0xc300, 0xc300, 0xc300, 0xc300, 0xc300, 0x0000, 0x0000, 0xe260,\n    0x0000, 0xb210, 0xb210, 0x5210, 0x5200, 0x5210, 0xb210, 0xb210,\n    0xb210, 0xb210, 0xb210, 0x4200, 0x7210, 0x4210, 0x7210, 0x7210,\n    0x3284, 0x3284, 0x3284, 0x3284, 0x3284, 0x3284, 0x3284, 0x3284,\n    0x3284, 0x3284, 0x7210, 0xb210, 0xb200, 0xb200, 0xb200, 0xb210,\n    0xb210, 0x1381, 0x1381, 0x1381, 0x1381, 0x1381, 0x1381, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301, 0x1301,\n    0x1301, 0x1301, 0x1301, 0xb210, 0xb210, 0xb210, 0xb200, 0xb210,\n    0xb200, 0x1382, 0x1382, 0x1382, 0x1382, 0x1382, 0x1382, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302, 0x1302,\n    0x1302, 0x1302, 0x1302, 0xb210, 0xb200, 0xb210, 0xb200, 0xb210,\n    0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0xb210, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x0000,\n    0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300, 0x1300,\n    0x0000, 0x0000, 0x1300, 0x1300, 0x1300, 0x0000, 0x0000, 0x0000,\n    0x5200, 0x5200, 0xb200, 0xb200, 0xb200, 0x5200, 0x5200, 0x0000,\n    0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0xb200, 0x0000,\n    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,\n    0x0000, 0xb220, 0xb220, 0xb220, 0xb200, 0xb200, 0x0000, 0x0000\n};\n"
  },
  {
    "path": "wine/windows/Makefile.in",
    "content": "SOURCES = \\\n\taccctrl.h \\\n\taccess.idl \\\n\taclapi.h \\\n\taclui.h \\\n\tactivation.idl \\\n\tactivaut.idl \\\n\tactivdbg.idl \\\n\tactivscp.idl \\\n\tadshlp.h \\\n\tadvpub.h \\\n\taf_irda.h \\\n\tamaudio.h \\\n\tamstream.idl \\\n\tamvideo.idl \\\n\tappcompatapi.h \\\n\tappmgmt.h \\\n\tappmodel.h \\\n\tasptlb.idl \\\n\tasynot.idl \\\n\tasysta.idl \\\n\tatlbase.h \\\n\tatlcom.h \\\n\tatliface.idl \\\n\tatlwin.h \\\n\taudevcod.h \\\n\taudioclient.idl \\\n\taudiopolicy.idl \\\n\taudiosessiontypes.h \\\n\taustream.idl \\\n\tauthz.h \\\n\taviriff.h \\\n\tavrt.h \\\n\taxcore.idl \\\n\taxextend.idl \\\n\tbasetsd.h \\\n\tbasetyps.h \\\n\tbcrypt.h \\\n\tbdaiface.idl \\\n\tbdaiface_enums.h \\\n\tbdatypes.h \\\n\tbinres.idl \\\n\tbits.idl \\\n\tbits1_5.idl \\\n\tbits2_0.idl \\\n\tbits2_5.idl \\\n\tbits3_0.idl \\\n\tbitsmsg.h \\\n\tbluetoothapis.h \\\n\tbthsdpdef.h \\\n\tcderr.h \\\n\tcfgmgr32.h \\\n\tcguid.h \\\n\tchprst.idl \\\n\tcierror.h \\\n\tclusapi.h \\\n\tcmdbas.idl \\\n\tcmdtxt.idl \\\n\tcmnquery.idl \\\n\tcolinf.idl \\\n\tcomcat.idl \\\n\tcommctrl.h \\\n\tcommctrl.rh \\\n\tcommdlg.h \\\n\tcommoncontrols.idl \\\n\tcompobj.h \\\n\tcomsvcs.idl \\\n\tcontrol.idl \\\n\tcor.idl \\\n\tcordebug.idl \\\n\tcorerror.h \\\n\tcorhdr.h \\\n\tcpl.h \\\n\tcrtrow.idl \\\n\tcryptdlg.h \\\n\tcryptuiapi.h \\\n\tctfutb.idl \\\n\tctxtcall.idl \\\n\tcustcntl.h \\\n\tcvconst.h \\\n\td2d1.idl \\\n\td2d1_1.idl \\\n\td2dbasetypes.h \\\n\td2derr.h \\\n\td3d.h \\\n\td3d10.idl \\\n\td3d10_1.idl \\\n\td3d10_1shader.h \\\n\td3d10effect.h \\\n\td3d10misc.h \\\n\td3d10sdklayers.idl \\\n\td3d10shader.h \\\n\td3d11.idl \\\n\td3d11_1.idl \\\n\td3d11_2.idl \\\n\td3d11_3.idl \\\n\td3d11_4.idl \\\n\td3d11on12.idl \\\n\td3d11sdklayers.idl \\\n\td3d11shader.h \\\n\td3d12.idl \\\n\td3d8.h \\\n\td3d8caps.h \\\n\td3d8types.h \\\n\td3d9.h \\\n\td3d9caps.h \\\n\td3d9types.h \\\n\td3dcaps.h \\\n\td3dcommon.idl \\\n\td3dcompiler.h \\\n\td3dhal.h \\\n\td3drm.h \\\n\td3drmdef.h \\\n\td3drmobj.h \\\n\td3drmwin.h \\\n\td3dtypes.h \\\n\td3dukmdt.h \\\n\td3dvec.inl \\\n\td3dx10.h \\\n\td3dx10async.h \\\n\td3dx10core.idl \\\n\td3dx10math.h \\\n\td3dx10tex.h \\\n\td3dx11.h \\\n\td3dx11async.h \\\n\td3dx11core.idl \\\n\td3dx11tex.h \\\n\td3dx9.h \\\n\td3dx9anim.h \\\n\td3dx9core.h \\\n\td3dx9effect.h \\\n\td3dx9math.h \\\n\td3dx9math.inl \\\n\td3dx9mesh.h \\\n\td3dx9shader.h \\\n\td3dx9shape.h \\\n\td3dx9tex.h \\\n\td3dx9xof.h \\\n\tdavclnt.h \\\n\tdbccmd.idl \\\n\tdbcses.idl \\\n\tdbdsad.idl \\\n\tdbghelp.h \\\n\tdbinit.idl \\\n\tdbprop.idl \\\n\tdbs.idl \\\n\tdbt.h \\\n\tdciddi.h \\\n\tdciman.h \\\n\tdcommon.idl \\\n\tdde.h \\\n\tdde.rh \\\n\tddeml.h \\\n\tddk/compstui.h \\\n\tddk/csq.h \\\n\tddk/d3dkmthk.h \\\n\tddk/fltkernel.h \\\n\tddk/hidclass.h \\\n\tddk/hidpi.h \\\n\tddk/hidport.h \\\n\tddk/hidsdi.h \\\n\tddk/hidtypes.h \\\n\tddk/imm.h \\\n\tddk/mountmgr.h \\\n\tddk/ndis.h \\\n\tddk/ntddcdvd.h \\\n\tddk/ntddk.h \\\n\tddk/ntddser.h \\\n\tddk/ntddtape.h \\\n\tddk/ntifs.h \\\n\tddk/usb.h \\\n\tddk/usb100.h \\\n\tddk/usb200.h \\\n\tddk/usbdlib.h \\\n\tddk/usbioctl.h \\\n\tddk/usbiodef.h \\\n\tddk/wdm.h \\\n\tddk/winddiui.h \\\n\tddk/winsplp.h \\\n\tddraw.h \\\n\tddrawgdi.h \\\n\tddrawi.h \\\n\tddstream.idl \\\n\tdelayloadhandler.h \\\n\tdevenum.idl \\\n\tdevguid.h \\\n\tdevicetopology.idl \\\n\tdevpkey.h \\\n\tdevpropdef.h \\\n\tdhcpcsdk.h \\\n\tdhtmldid.h \\\n\tdhtmled.idl \\\n\tdifxapi.h \\\n\tdigitalv.h \\\n\tdimm.idl \\\n\tdinput.h \\\n\tdinputd.h \\\n\tdispdib.h \\\n\tdispex.idl \\\n\tdlgs.h \\\n\tdls1.h \\\n\tdls2.h \\\n\tdmdls.h \\\n\tdmerror.h \\\n\tdmksctrl.h \\\n\tdmo.h \\\n\tdmoreg.h \\\n\tdmort.h \\\n\tdmplugin.h \\\n\tdmusbuff.h \\\n\tdmusicc.h \\\n\tdmusicf.h \\\n\tdmusici.h \\\n\tdmusics.h \\\n\tdocobj.idl \\\n\tdocobjectservice.idl \\\n\tdownloadmgr.idl \\\n\tdpaddr.h \\\n\tdplay.h \\\n\tdplay8.h \\\n\tdplobby.h \\\n\tdplobby8.h \\\n\tdpnathlp.h \\\n\tdrmexternals.idl \\\n\tdsconf.h \\\n\tdsgetdc.h \\\n\tdshow.h \\\n\tdsound.h \\\n\tdsrole.h \\\n\tdvdmedia.h \\\n\tdvoice.h \\\n\tdwmapi.h \\\n\tdwrite.idl \\\n\tdwrite_1.idl \\\n\tdwrite_2.idl \\\n\tdwrite_3.idl \\\n\tdxdiag.h \\\n\tdxerr8.h \\\n\tdxerr9.h \\\n\tdxfile.h \\\n\tdxgi.idl \\\n\tdxgi1_2.idl \\\n\tdxgi1_3.idl \\\n\tdxgi1_4.idl \\\n\tdxgi1_5.idl \\\n\tdxgi1_6.idl \\\n\tdxgicommon.idl \\\n\tdxgiformat.idl \\\n\tdxgitype.idl \\\n\tdxva2api.idl \\\n\tdyngraph.idl \\\n\tendpointvolume.idl \\\n\terrorrep.h \\\n\terrors.h \\\n\terrrec.idl \\\n\tevcode.h \\\n\tevntprov.h \\\n\tevntrace.h \\\n\tevr.idl \\\n\texcpt.h \\\n\texdisp.idl \\\n\texdispid.h \\\n\tfci.h \\\n\tfdi.h \\\n\tfileapi.h \\\n\tfltdefs.h \\\n\tfontsub.h \\\n\tfusion.idl \\\n\tgameux.idl \\\n\tgdiplus.h \\\n\tgdipluscolor.h \\\n\tgdipluscolormatrix.h \\\n\tgdipluseffects.h \\\n\tgdiplusenums.h \\\n\tgdiplusflat.h \\\n\tgdiplusgpstubs.h \\\n\tgdiplusimaging.h \\\n\tgdiplusinit.h \\\n\tgdiplusmem.h \\\n\tgdiplusmetaheader.h \\\n\tgdipluspixelformats.h \\\n\tgdiplustypes.h \\\n\tguiddef.h \\\n\thidusage.h \\\n\thighlevelmonitorconfigurationapi.h \\\n\thlguids.h \\\n\thlink.idl \\\n\thstring.idl \\\n\thtiface.idl \\\n\thtiframe.idl \\\n\thtmlhelp.h \\\n\thttp.h \\\n\thttprequest.idl \\\n\thttprequestid.h \\\n\ti_cryptasn1tls.h \\\n\tiads.idl \\\n\ticftypes.idl \\\n\ticm.h \\\n\ticmpapi.h \\\n\tidispids.h \\\n\tieautomation.idl \\\n\tiextag.idl \\\n\tifdef.h \\\n\tifmib.h \\\n\tiimgctx.idl \\\n\timagehlp.h \\\n\time.h \\\n\timm.h \\\n\timnact.idl \\\n\timnxport.idl \\\n\tin6addr.h \\\n\tinaddr.h \\\n\tindexsrv.idl \\\n\tinitguid.h \\\n\tinputscope.idl \\\n\tinseng.idl \\\n\tinspectable.idl \\\n\tinteractioncontext.h \\\n\tintshcut.h \\\n\tipexport.h \\\n\tiphlpapi.h \\\n\tipifcons.h \\\n\tipmib.h \\\n\tiprtrmib.h \\\n\tiptypes.h \\\n\tisguids.h \\\n\tknownfolders.h \\\n\tks.h \\\n\tksguid.h \\\n\tksmedia.h \\\n\tksuuids.h \\\n\tlibloaderapi.h \\\n\tlm.h \\\n\tlmaccess.h \\\n\tlmapibuf.h \\\n\tlmat.h \\\n\tlmbrowsr.h \\\n\tlmcons.h \\\n\tlmerr.h \\\n\tlmjoin.h \\\n\tlmmsg.h \\\n\tlmserver.h \\\n\tlmshare.h \\\n\tlmstats.h \\\n\tlmuse.h \\\n\tlmuseflg.h \\\n\tlmwksta.h \\\n\tloadperf.h \\\n\tlowlevelmonitorconfigurationapi.h \\\n\tlzexpand.h \\\n\tmapi.h \\\n\tmapicode.h \\\n\tmapidefs.h \\\n\tmapiform.h \\\n\tmapiguid.h \\\n\tmapitags.h \\\n\tmapiutil.h \\\n\tmapival.h \\\n\tmapix.h \\\n\tmciavi.h \\\n\tmcx.h \\\n\tmediaerr.h \\\n\tmediaobj.idl \\\n\tmetahost.idl \\\n\tmfapi.h \\\n\tmferror.h \\\n\tmfidl.idl \\\n\tmfobjects.idl \\\n\tmfreadwrite.idl \\\n\tmftransform.idl \\\n\tmidles.h \\\n\tmimeinfo.idl \\\n\tmimeole.idl \\\n\tminmax.h \\\n\tmlang.idl \\\n\tmmc.idl \\\n\tmmddk.h \\\n\tmmdeviceapi.idl \\\n\tmmreg.h \\\n\tmmstream.idl \\\n\tmmsystem.h \\\n\tmprapi.h \\\n\tmprerror.h \\\n\tmsacm.h \\\n\tmsacmdlg.h \\\n\tmsacmdrv.h \\\n\tmsasn1.h \\\n\tmscat.h \\\n\tmscoree.idl \\\n\tmsctf.idl \\\n\tmsdadc.idl \\\n\tmsdaguid.h \\\n\tmsdasc.idl \\\n\tmshtmcid.h \\\n\tmshtmdid.h \\\n\tmshtmhst.idl \\\n\tmshtml.idl \\\n\tmsi.h \\\n\tmsidefs.h \\\n\tmsident.idl \\\n\tmsinkaut.idl \\\n\tmsiquery.h \\\n\tmsopc.idl \\\n\tmssip.h \\\n\tmsstkppg.h \\\n\tmstask.idl \\\n\tmstcpip.h \\\n\tmsvcrt/assert.h \\\n\tmsvcrt/conio.h \\\n\tmsvcrt/crtdbg.h \\\n\tmsvcrt/crtdefs.h \\\n\tmsvcrt/ctype.h \\\n\tmsvcrt/direct.h \\\n\tmsvcrt/dirent.h \\\n\tmsvcrt/dos.h \\\n\tmsvcrt/eh.h \\\n\tmsvcrt/errno.h \\\n\tmsvcrt/fcntl.h \\\n\tmsvcrt/float.h \\\n\tmsvcrt/fpieee.h \\\n\tmsvcrt/io.h \\\n\tmsvcrt/limits.h \\\n\tmsvcrt/locale.h \\\n\tmsvcrt/malloc.h \\\n\tmsvcrt/math.h \\\n\tmsvcrt/mbctype.h \\\n\tmsvcrt/mbstring.h \\\n\tmsvcrt/memory.h \\\n\tmsvcrt/process.h \\\n\tmsvcrt/search.h \\\n\tmsvcrt/setjmp.h \\\n\tmsvcrt/share.h \\\n\tmsvcrt/signal.h \\\n\tmsvcrt/stddef.h \\\n\tmsvcrt/stdio.h \\\n\tmsvcrt/stdlib.h \\\n\tmsvcrt/string.h \\\n\tmsvcrt/sys/locking.h \\\n\tmsvcrt/sys/stat.h \\\n\tmsvcrt/sys/timeb.h \\\n\tmsvcrt/sys/types.h \\\n\tmsvcrt/sys/unistd.h \\\n\tmsvcrt/sys/utime.h \\\n\tmsvcrt/time.h \\\n\tmsvcrt/unistd.h \\\n\tmsvcrt/wchar.h \\\n\tmsvcrt/wctype.h \\\n\tmswsock.h \\\n\tmsxml.idl \\\n\tmsxml2.idl \\\n\tmsxml2did.h \\\n\tmsxml6.idl \\\n\tmsxml6did.h \\\n\tmsxmldid.h \\\n\tmtxdm.h \\\n\tmultimon.h \\\n\tnb30.h \\\n\tncrypt.h \\\n\tndrtypes.h \\\n\tnetcfgx.idl \\\n\tnetcon.idl \\\n\tnetfw.idl \\\n\tnetioapi.h \\\n\tnetlistmgr.idl \\\n\tnldef.h \\\n\tnpapi.h \\\n\tnserror.h \\\n\tnspapi.h \\\n\tntddcdrm.h \\\n\tntddndis.h \\\n\tntddscsi.h \\\n\tntddstor.h \\\n\tntdef.h \\\n\tntdsapi.h \\\n\tntlsa.h \\\n\tntquery.h \\\n\tntsecapi.h \\\n\tntsecpkg.h \\\n\tntstatus.h \\\n\toaidl.idl \\\n\tobjbase.h \\\n\tobjectarray.idl \\\n\tobjidl.idl \\\n\tobjsafe.idl \\\n\tobjsel.h \\\n\tocidl.idl \\\n\tocmm.idl \\\n\todbcinst.h \\\n\tole2.h \\\n\tole2ver.h \\\n\toleacc.idl \\\n\toleauto.h \\\n\tolectl.h \\\n\toledb.idl \\\n\toledberr.h \\\n\toledlg.h \\\n\toleidl.idl \\\n\topcbase.idl \\\n\topcobjectmodel.idl \\\n\topcparturi.idl \\\n\topnrst.idl \\\n\toptary.idl \\\n\tpatchapi.h \\\n\tpathcch.h \\\n\tpdh.h \\\n\tpdhmsg.h \\\n\tperflib.h \\\n\tperhist.idl \\\n\tphysicalmonitorenumerationapi.h \\\n\tpktdef.h \\\n\tpoppack.h \\\n\tpowrprof.h \\\n\tprntvpt.h \\\n\tprofinfo.h \\\n\tpropidl.idl \\\n\tpropkey.h \\\n\tpropkeydef.h \\\n\tpropsys.idl \\\n\tpropvarutil.h \\\n\tprsht.h \\\n\tpsapi.h \\\n\tpshpack1.h \\\n\tpshpack2.h \\\n\tpshpack4.h \\\n\tpshpack8.h \\\n\tpstore.idl \\\n\tqedit.idl \\\n\tras.h \\\n\trasdlg.h \\\n\traserror.h \\\n\treason.h \\\n\tregstr.h \\\n\trestartmanager.h \\\n\trichedit.h \\\n\trichole.idl \\\n\trmxfguid.h \\\n\trmxftmpl.x \\\n\troapi.h \\\n\troparameterizediid.idl \\\n\trow.idl \\\n\trowchg.idl \\\n\trowpos.idl \\\n\trowpsc.idl \\\n\trpc.h \\\n\trpcasync.h \\\n\trpcdce.h \\\n\trpcdcep.h \\\n\trpcndr.h \\\n\trpcnterr.h \\\n\trpcproxy.h \\\n\trpcsal.h \\\n\trstbas.idl \\\n\trstinf.idl \\\n\trstloc.idl \\\n\trstnot.idl \\\n\trtutils.h \\\n\tsal.h \\\n\tsapi.idl \\\n\tsapiddk.idl \\\n\tscarderr.h \\\n\tschannel.h \\\n\tschemadef.h \\\n\tschnlsp.h \\\n\tsddl.h \\\n\tsecext.h \\\n\tsecurity.h \\\n\tsensapi.h \\\n\tsensevts.idl \\\n\tservprov.idl \\\n\tsesprp.idl \\\n\tsetupapi.h \\\n\tsfc.h \\\n\tshdeprecated.idl \\\n\tshdispid.h \\\n\tshellapi.h \\\n\tshellscalingapi.h \\\n\tshimgdata.idl \\\n\tshldisp.idl \\\n\tshlguid.h \\\n\tshlobj.h \\\n\tshlwapi.h \\\n\tshobjidl.idl \\\n\tshtypes.idl \\\n\tsipbase.h \\\n\tslerror.h \\\n\tslpublic.h \\\n\tsnmp.h \\\n\tsoftpub.h \\\n\tsperror.h \\\n\tsql.h \\\n\tsqlext.h \\\n\tsqltypes.h \\\n\tsqlucode.h \\\n\tsrcrst.idl \\\n\tsrrestoreptapi.h \\\n\tsspi.h \\\n\tstdole2.idl \\\n\tstgprop.h \\\n\tsti.h \\\n\tstorage.h \\\n\tstrmif.idl \\\n\tstrsafe.h \\\n\tstructuredquerycondition.idl \\\n\tsvrapi.h \\\n\tt2embapi.h \\\n\ttapi.h \\\n\ttaskschd.idl \\\n\ttchar.h \\\n\ttcpestats.h \\\n\ttcpmib.h \\\n\ttextserv.h \\\n\ttextstor.idl \\\n\ttlhelp32.h \\\n\ttlogstg.idl \\\n\ttmschema.h \\\n\ttom.idl \\\n\ttraffic.h \\\n\ttransact.idl \\\n\ttwain.h \\\n\ttxcoord.idl \\\n\ttxdtc.idl \\\n\tudpmib.h \\\n\tuianimation.idl \\\n\tuiautomation.h \\\n\tuiautomationclient.idl \\\n\tuiautomationcore.idl \\\n\tuiautomationcoreapi.h \\\n\tuiribbon.idl \\\n\tunknwn.idl \\\n\turlhist.idl \\\n\turlmon.idl \\\n\tuserenv.h \\\n\tusp10.h \\\n\tuuids.h \\\n\tuxtheme.h \\\n\tvdmdbg.h \\\n\tver.h \\\n\tverrsrc.h \\\n\tvfw.h \\\n\tvfwmsgs.h \\\n\tvirtdisk.h \\\n\tvmr9.idl \\\n\tvmrender.idl \\\n\tvss.idl \\\n\tvsstyle.h \\\n\tvssym32.h \\\n\tvswriter.h \\\n\twbemcli.idl \\\n\twbemdisp.idl \\\n\twbemprov.idl \\\n\twct.h \\\n\twebservices.h \\\n\twerapi.h \\\n\twfext.h \\\n\twia.h \\\n\twia_lh.idl \\\n\twia_xp.idl \\\n\twiadef.h \\\n\twimgapi.h \\\n\twinbase.h \\\n\twincodec.idl \\\n\twincodecsdk.idl \\\n\twincon.h \\\n\twincred.h \\\n\twincrypt.h \\\n\twindef.h \\\n\twindns.h \\\n\twindows.foundation.idl \\\n\twindows.h \\\n\twindowsx.h \\\n\twine/debug.h \\\n\twine/exception.h \\\n\twine/fil_data.idl \\\n\twine/itss.idl \\\n\twine/library.h \\\n\twine/svcctl.idl \\\n\twine/unicode.h \\\n\twine/winedxgi.idl \\\n\twinerror.h \\\n\twinevt.h \\\n\twingdi.h \\\n\twinhttp.h \\\n\twininet.h \\\n\twinineti.h \\\n\twinioctl.h \\\n\twinldap.h \\\n\twinnetwk.h \\\n\twinnls.h \\\n\twinnls32.h \\\n\twinnt.h \\\n\twinnt.rh \\\n\twinperf.h \\\n\twinreg.h \\\n\twinresrc.h \\\n\twinsafer.h \\\n\twinscard.h \\\n\twinsmcrd.h \\\n\twinsnmp.h \\\n\twinsock.h \\\n\twinsock2.h \\\n\twinspool.h \\\n\twinstring.h \\\n\twinsvc.h \\\n\twinsxs.idl \\\n\twintab.h \\\n\twintabx.h \\\n\twinternl.h \\\n\twintrust.h \\\n\twinuser.h \\\n\twinuser.rh \\\n\twinver.h \\\n\twlanapi.h \\\n\twmcodecdsp.idl \\\n\twmdrmsdk.idl \\\n\twmistr.h \\\n\twmium.h \\\n\twmiutils.idl \\\n\twmp.idl \\\n\twmpids.h \\\n\twmsbuffer.idl \\\n\twmsdk.h \\\n\twmsdkidl.idl \\\n\twnaspi32.h \\\n\twownt32.h \\\n\twpcapi.idl \\\n\tws2def.h \\\n\tws2ipdef.h \\\n\tws2spi.h \\\n\tws2tcpip.h \\\n\twsdapi.h \\\n\twsdbase.idl \\\n\twsddisco.idl \\\n\twsdtypes.h \\\n\twsdutil.h \\\n\twsdxml.idl \\\n\twsdxmldom.h \\\n\twshisotp.h \\\n\twsipx.h \\\n\twsnwlink.h \\\n\twtsapi32.h \\\n\twtypes.idl \\\n\twuapi.idl \\\n\tx3daudio.h \\\n\txapo.idl \\\n\txapofx.h \\\n\txaudio2.idl \\\n\txaudio2fx.idl \\\n\txcmc.h \\\n\txinput.h \\\n\txmldom.h \\\n\txmldom.idl \\\n\txmldomdid.h \\\n\txmldso.idl \\\n\txmldsodid.h \\\n\txmllite.idl \\\n\tzmouse.h\n"
  },
  {
    "path": "wine/windows/accctrl.h",
    "content": "/*\n * Copyright (C) 2002 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_ACCCTRL_H\n#define __WINE_ACCCTRL_H\n\n#include <wtypes.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef enum _SE_OBJECT_TYPE\n{\n    SE_UNKNOWN_OBJECT_TYPE = 0,\n    SE_FILE_OBJECT,\n    SE_SERVICE,\n    SE_PRINTER,\n    SE_REGISTRY_KEY,\n    SE_LMSHARE,\n    SE_KERNEL_OBJECT,\n    SE_WINDOW_OBJECT,\n    SE_DS_OBJECT,\n    SE_DS_OBJECT_ALL,\n    SE_PROVIDER_DEFINED_OBJECT,\n    SE_WMIGUID_OBJECT,\n    SE_REGISTRY_WOW64_32KEY\n} SE_OBJECT_TYPE;\n\ntypedef enum _TRUSTEE_TYPE\n{\n    TRUSTEE_IS_UNKNOWN,\n    TRUSTEE_IS_USER,\n    TRUSTEE_IS_GROUP,\n    TRUSTEE_IS_DOMAIN,\n    TRUSTEE_IS_ALIAS,\n    TRUSTEE_IS_WELL_KNOWN_GROUP,\n    TRUSTEE_IS_DELETED,\n    TRUSTEE_IS_INVALID,\n    TRUSTEE_IS_COMPUTER\n} TRUSTEE_TYPE;\n\ntypedef enum _TRUSTEE_FORM\n{\n    TRUSTEE_IS_SID,\n    TRUSTEE_IS_NAME,\n    TRUSTEE_BAD_FORM,\n    TRUSTEE_IS_OBJECTS_AND_SID,\n    TRUSTEE_IS_OBJECTS_AND_NAME\n} TRUSTEE_FORM;\n\ntypedef enum _MULTIPLE_TRUSTEE_OPERATION\n{\n    NO_MULTIPLE_TRUSTEE,\n    TRUSTEE_IS_IMPERSONATE,\n} MULTIPLE_TRUSTEE_OPERATION;\n\ntypedef struct  _OBJECTS_AND_SID\n{\n    DWORD   ObjectsPresent;\n    GUID    ObjectTypeGuid;\n    GUID    InheritedObjectTypeGuid;\n    SID    *pSid;\n} OBJECTS_AND_SID, *POBJECTS_AND_SID;\n\ntypedef struct  _OBJECTS_AND_NAME_A\n{\n    DWORD          ObjectsPresent;\n    SE_OBJECT_TYPE ObjectType;\n    LPSTR          ObjectTypeName;\n    LPSTR          InheritedObjectTypeName;\n    LPSTR          ptstrName;\n} OBJECTS_AND_NAME_A, *POBJECTS_AND_NAME_A;\n\ntypedef struct  _OBJECTS_AND_NAME_W\n{\n    DWORD          ObjectsPresent;\n    SE_OBJECT_TYPE ObjectType;\n    LPWSTR         ObjectTypeName;\n    LPWSTR         InheritedObjectTypeName;\n    LPWSTR         ptstrName;\n} OBJECTS_AND_NAME_W, *POBJECTS_AND_NAME_W;\n\nDECL_WINELIB_TYPE_AW(OBJECTS_AND_NAME_)\nDECL_WINELIB_TYPE_AW(POBJECTS_AND_NAME_)\n\ntypedef struct _TRUSTEE_A\n{\n    struct _TRUSTEE_A          *pMultipleTrustee;\n    MULTIPLE_TRUSTEE_OPERATION  MultipleTrusteeOperation;\n    TRUSTEE_FORM                TrusteeForm;\n    TRUSTEE_TYPE                TrusteeType;\n    LPSTR                       ptstrName;\n} TRUSTEE_A, *PTRUSTEE_A, TRUSTEEA, *PTRUSTEEA;\n\ntypedef struct _TRUSTEE_W\n{\n    struct _TRUSTEE_W          *pMultipleTrustee;\n    MULTIPLE_TRUSTEE_OPERATION  MultipleTrusteeOperation;\n    TRUSTEE_FORM                TrusteeForm;\n    TRUSTEE_TYPE                TrusteeType;\n    LPWSTR                      ptstrName;\n} TRUSTEE_W, *PTRUSTEE_W, TRUSTEEW, *PTRUSTEEW;\n\nDECL_WINELIB_TYPE_AW(TRUSTEE_)\nDECL_WINELIB_TYPE_AW(PTRUSTEE_)\nDECL_WINELIB_TYPE_AW(TRUSTEE)\nDECL_WINELIB_TYPE_AW(PTRUSTEE)\n\ntypedef enum _ACCESS_MODE\n{\n    NOT_USED_ACCESS = 0,\n    GRANT_ACCESS,\n    SET_ACCESS,\n    DENY_ACCESS,\n    REVOKE_ACCESS,\n    SET_AUDIT_SUCCESS,\n    SET_AUDIT_FAILURE\n} ACCESS_MODE;\n\n#define NO_INHERITANCE                      0x0\n#define SUB_OBJECTS_ONLY_INHERIT            0x1\n#define SUB_CONTAINERS_ONLY_INHERIT         0x2\n#define SUB_CONTAINERS_AND_OBJECTS_INHERIT  0x3\n#define INHERIT_NO_PROPAGATE                0x4\n#define INHERIT_ONLY                        0x8\n#define INHERITED_ACCESS_ENTRY              0x10\n#define INHERITED_PARENT                    0x10000000\n#define INHERITED_GRANDPARENT               0x20000000\n\ntypedef struct _EXPLICIT_ACCESS_A\n{\n    DWORD        grfAccessPermissions;\n    ACCESS_MODE  grfAccessMode;\n    DWORD        grfInheritance;\n    TRUSTEE_A    Trustee;\n} EXPLICIT_ACCESS_A, *PEXPLICIT_ACCESS_A, EXPLICIT_ACCESSA, *PEXPLICIT_ACCESSA;\n\ntypedef struct _EXPLICIT_ACCESS_W\n{\n    DWORD        grfAccessPermissions;\n    ACCESS_MODE  grfAccessMode;\n    DWORD        grfInheritance;\n    TRUSTEE_W    Trustee;\n} EXPLICIT_ACCESS_W, *PEXPLICIT_ACCESS_W, EXPLICIT_ACCESSW, *PEXPLICIT_ACCESSW;\n\nDECL_WINELIB_TYPE_AW(EXPLICIT_ACCESS_)\nDECL_WINELIB_TYPE_AW(PEXPLICIT_ACCESS_)\nDECL_WINELIB_TYPE_AW(EXPLICIT_ACCESS)\nDECL_WINELIB_TYPE_AW(PEXPLICIT_ACCESS)\n\ntypedef ULONG ACCESS_RIGHTS, *PACCESS_RIGHTS;\ntypedef ULONG INHERIT_FLAGS, *PINHERIT_FLAGS;\n\ntypedef struct _ACTRL_ACCESS_ENTRYA\n{\n    TRUSTEE_A     Trustee;\n    ULONG         fAccessFlags;\n    ACCESS_RIGHTS Access;\n    ACCESS_RIGHTS ProvSpecificAccess;\n    INHERIT_FLAGS Inheritance;\n    LPSTR         lpInheritProperty;\n} ACTRL_ACCESS_ENTRYA, *PACTRL_ACCESS_ENTRYA;\n\ntypedef struct _ACTRL_ACCESS_ENTRYW\n{\n    TRUSTEE_W     Trustee;\n    ULONG         fAccessFlags;\n    ACCESS_RIGHTS Access;\n    ACCESS_RIGHTS ProvSpecificAccess;\n    INHERIT_FLAGS Inheritance;\n    LPWSTR        lpInheritProperty;\n} ACTRL_ACCESS_ENTRYW, *PACTRL_ACCESS_ENTRYW;\n\nDECL_WINELIB_TYPE_AW(ACTRL_ACCESS_ENTRY)\nDECL_WINELIB_TYPE_AW(PACTRL_ACCESS_ENTRY)\n\n\ntypedef struct _ACTRL_ACCESS_ENTRY_LISTA\n{\n    ULONG                cEntries;\n    ACTRL_ACCESS_ENTRYA *pAccessList;\n} ACTRL_ACCESS_ENTRY_LISTA, *PACTRL_ACCESS_ENTRY_LISTA;\n\ntypedef struct _ACTRL_ACCESS_ENTRY_LISTW\n{\n    ULONG                cEntries;\n    ACTRL_ACCESS_ENTRYW *pAccessList;\n} ACTRL_ACCESS_ENTRY_LISTW, *PACTRL_ACCESS_ENTRY_LISTW;\n\nDECL_WINELIB_TYPE_AW(ACTRL_ACCESS_ENTRY_LIST)\nDECL_WINELIB_TYPE_AW(PACTRL_ACCESS_ENTRY_LIST)\n\ntypedef struct _ACTRL_PROPERTY_ENTRYA\n{\n    LPSTR                     lpProperty;\n    PACTRL_ACCESS_ENTRY_LISTA pAccessEntryList;\n    ULONG                     fListFlags;\n} ACTRL_PROPERTY_ENTRYA, *PACTRL_PROPERTY_ENTRYA;\n\ntypedef struct _ACTRL_PROPERTY_ENTRYW\n{\n    LPWSTR                    lpProperty;\n    PACTRL_ACCESS_ENTRY_LISTW pAccessEntryList;\n    ULONG                     fListFlags;\n} ACTRL_PROPERTY_ENTRYW, *PACTRL_PROPERTY_ENTRYW;\n\nDECL_WINELIB_TYPE_AW(ACTRL_PROPERTY_ENTRY)\nDECL_WINELIB_TYPE_AW(PACTRL_PROPERTY_ENTRY)\n\ntypedef struct _ACTRL_ALISTA\n{\n    ULONG                  cEntries;\n    PACTRL_PROPERTY_ENTRYA pPropertyAccessList;\n} ACTRL_ACCESSA, *PACTRL_ACCESSA, ACTRL_AUDITA, *PACTRL_AUDITA;\n\ntypedef struct _ACTRL_ALISTW\n{\n    ULONG                  cEntries;\n    PACTRL_PROPERTY_ENTRYW pPropertyAccessList;\n} ACTRL_ACCESSW, *PACTRL_ACCESSW, ACTRL_AUDITW, *PACTRL_AUDITW;\n\nDECL_WINELIB_TYPE_AW(ACTRL_ACCESS)\nDECL_WINELIB_TYPE_AW(PACTRL_ACCESS)\nDECL_WINELIB_TYPE_AW(ACTRL_AUDIT)\nDECL_WINELIB_TYPE_AW(PACTRL_AUDIT)\n\n#define TRUSTEE_ACCESS_ALLOWED      0x00000001\n#define TRUSTEE_ACCESS_READ         0x00000002\n#define TRUSTEE_ACCESS_WRITE        0x00000004\n\n#define TRUSTEE_ACCESS_EXPLICIT     0x00000001\n#define TRUSTEE_ACCESS_READ_WRITE   (TRUSTEE_ACCESS_READ|TRUSTEE_ACCESS_WRITE)\n#define TRUSTEE_ACCESS_ALL          0xFFFFFFFF\n\ntypedef struct _TRUSTEE_ACCESSA\n{\n    LPSTR         lpProperty;\n    ACCESS_RIGHTS Access;\n    ULONG         fAccessFlags;\n    ULONG         fReturnedAccess;\n} TRUSTEE_ACCESSA, *PTRUSTEE_ACCESSA;\n\ntypedef struct _TRUSTEE_ACCESSW\n{\n    LPWSTR        lpProperty;\n    ACCESS_RIGHTS Access;\n    ULONG         fAccessFlags;\n    ULONG         fReturnedAccess;\n} TRUSTEE_ACCESSW, *PTRUSTEE_ACCESSW;\n\nDECL_WINELIB_TYPE_AW(TRUSTEE_ACCESS)\nDECL_WINELIB_TYPE_AW(PTRUSTEE_ACCESS)\n\n#define ACTRL_RESERVED              0x00000000\n#define ACTRL_PERM_1                0x00000001\n#define ACTRL_PERM_2                0x00000002\n#define ACTRL_PERM_3                0x00000004\n#define ACTRL_PERM_4                0x00000008\n#define ACTRL_PERM_5                0x00000010\n#define ACTRL_PERM_6                0x00000020\n#define ACTRL_PERM_7                0x00000040\n#define ACTRL_PERM_8                0x00000080\n#define ACTRL_PERM_9                0x00000100\n#define ACTRL_PERM_10               0x00000200\n#define ACTRL_PERM_11               0x00000400\n#define ACTRL_PERM_12               0x00000800\n#define ACTRL_PERM_13               0x00001000\n#define ACTRL_PERM_14               0x00002000\n#define ACTRL_PERM_15               0x00004000\n#define ACTRL_PERM_16               0x00008000\n#define ACTRL_PERM_17               0x00010000\n#define ACTRL_PERM_18               0x00020000\n#define ACTRL_PERM_19               0x00040000\n#define ACTRL_PERM_20               0x00080000\n\n#define ACTRL_ACCESS_ALLOWED        0x00000001\n#define ACTRL_ACCESS_DENIED         0x00000002\n#define ACTRL_AUDIT_SUCCESS         0x00000004\n#define ACTRL_AUDIT_FAILURE         0x00000008\n\n#define ACTRL_ACCESS_PROTECTED      0x00000001\n\n#define ACTRL_SYSTEM_ACCESS         0x04000000\n#define ACTRL_DELETE                0x08000000\n#define ACTRL_READ_CONTROL          0x10000000\n#define ACTRL_CHANGE_ACCESS         0x20000000\n#define ACTRL_CHANGE_OWNER          0x40000000\n#define ACTRL_SYNCHRONIZE           0x80000000\n#define ACTRL_STD_RIGHTS_ALL        0xf8000000\n#define ACTRL_STD_RIGHT_REQUIRED    (ACTRL_STD_RIGHTS_ALL & ~ACTRL_SYNCHRONIZE)\n\n#define ACTRL_DS_OPEN               ACTRL_RESERVED\n#define ACTRL_DS_CREATE_CHILD       ACTRL_PERM_1\n#define ACTRL_DS_DELETE_CHILD       ACTRL_PERM_2\n#define ACTRL_DS_LIST               ACTRL_PERM_3\n#define ACTRL_DS_SELF               ACTRL_PERM_4\n#define ACTRL_DS_READ_PROP          ACTRL_PERM_5\n#define ACTRL_DS_WRITE_PROP         ACTRL_PERM_6\n#define ACTRL_DS_DELETE_TREE        ACTRL_PERM_7\n#define ACTRL_DS_LIST_OBJECT        ACTRL_PERM_8\n#define ACTRL_DS_CONTROL_ACCESS     ACTRL_PERM_9\n\n#define ACTRL_FILE_READ             ACTRL_PERM_1\n#define ACTRL_FILE_WRITE            ACTRL_PERM_2\n#define ACTRL_FILE_APPEND           ACTRL_PERM_3\n#define ACTRL_FILE_READ_PROP        ACTRL_PERM_4\n#define ACTRL_FILE_WRITE_PROP       ACTRL_PERM_5\n#define ACTRL_FILE_EXECUTE          ACTRL_PERM_6\n#define ACTRL_FILE_READ_ATTRIB      ACTRL_PERM_8\n#define ACTRL_FILE_WRITE_ATTRIB     ACTRL_PERM_9\n#define ACTRL_FILE_CREATE_PIPE      ACTRL_PERM_10\n#define ACTRL_DIR_LIST              ACTRL_PERM_1\n#define ACTRL_DIR_CREATE_OBJECT     ACTRL_PERM_2\n#define ACTRL_DIR_CREATE_CHILD      ACTRL_PERM_3\n#define ACTRL_DIR_DELETE_CHILD      ACTRL_PERM_7\n#define ACTRL_DIR_TRAVERSE          ACTRL_PERM_6\n#define ACTRL_KERNEL_TERMINATE      ACTRL_PERM_1\n#define ACTRL_KERNEL_THREAD         ACTRL_PERM_2\n#define ACTRL_KERNEL_VM             ACTRL_PERM_3\n#define ACTRL_KERNEL_VM_READ        ACTRL_PERM_4\n#define ACTRL_KERNEL_VM_WRITE       ACTRL_PERM_5\n#define ACTRL_KERNEL_DUP_HANDLE     ACTRL_PERM_6\n#define ACTRL_KERNEL_PROCESS        ACTRL_PERM_7\n#define ACTRL_KERNEL_SET_INFO       ACTRL_PERM_8\n#define ACTRL_KERNEL_GET_INFO       ACTRL_PERM_9\n#define ACTRL_KERNEL_CONTROL        ACTRL_PERM_10\n#define ACTRL_KERNEL_ALERT          ACTRL_PERM_11\n#define ACTRL_KERNEL_GET_CONTEXT    ACTRL_PERM_12\n#define ACTRL_KERNEL_SET_CONTEXT    ACTRL_PERM_13\n#define ACTRL_KERNEL_TOKEN          ACTRL_PERM_14\n#define ACTRL_KERNEL_IMPERSONATE    ACTRL_PERM_15\n#define ACTRL_KERNEL_DIMPERSONATE   ACTRL_PERM_16\n#define ACTRL_PRINT_SADMIN          ACTRL_PERM_1\n#define ACTRL_PRINT_SLIST           ACTRL_PERM_2\n#define ACTRL_PRINT_PADMIN          ACTRL_PERM_3\n#define ACTRL_PRINT_PUSE            ACTRL_PERM_4\n#define ACTRL_PRINT_JADMIN          ACTRL_PERM_5\n#define ACTRL_SVC_GET_INFO          ACTRL_PERM_1\n#define ACTRL_SVC_SET_INFO          ACTRL_PERM_2\n#define ACTRL_SVC_STATUS            ACTRL_PERM_3\n#define ACTRL_SVC_LIST              ACTRL_PERM_4\n#define ACTRL_SVC_START             ACTRL_PERM_5\n#define ACTRL_SVC_STOP              ACTRL_PERM_6\n#define ACTRL_SVC_PAUSE             ACTRL_PERM_7\n#define ACTRL_SVC_INTERROGATE       ACTRL_PERM_8\n#define ACTRL_SVC_UCONTROL          ACTRL_PERM_9\n#define ACTRL_REG_QUERY             ACTRL_PERM_1\n#define ACTRL_REG_SET               ACTRL_PERM_2\n#define ACTRL_REG_CREATE_CHILD      ACTRL_PERM_3\n#define ACTRL_REG_LIST              ACTRL_PERM_4\n#define ACTRL_REG_NOTIFY            ACTRL_PERM_5\n#define ACTRL_REG_LINK              ACTRL_PERM_6\n#define ACTRL_WIN_CLIPBRD           ACTRL_PERM_1\n#define ACTRL_WIN_GLOBAL_ATOMS      ACTRL_PERM_2\n#define ACTRL_WIN_CREATE            ACTRL_PERM_3\n#define ACTRL_WIN_LIST_DESK         ACTRL_PERM_4\n#define ACTRL_WIN_LIST              ACTRL_PERM_5\n#define ACTRL_WIN_READ_ATTRIBS      ACTRL_PERM_6\n#define ACTRL_WIN_WRITE_ATTRIBS     ACTRL_PERM_7\n#define ACTRL_WIN_SCREEN            ACTRL_PERM_8\n#define ACTRL_WIN_EXIT              ACTRL_PERM_9\n\n#define ACTRL_ACCESS_NO_OPTIONS                 0x00000000\n#define ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES    0x00000001\n\ntypedef struct _ACTRL_OVERLAPPED\n{\n    union {\n        PVOID Provider;\n        ULONG Reserved1;\n    } DUMMYUNIONNAME;\n    ULONG  Reserved2;\n    HANDLE hEvent;\n} ACTRL_OVERLAPPED, *PACTRL_OVERLAPPED;\n\ntypedef struct _ACTRL_ACCESS_INFOA\n{\n    ULONG  fAccessPermission;\n    LPSTR  lpAccessPermissionName;\n} ACTRL_ACCESS_INFOA, *PACTRL_ACCESS_INFOA;\n\ntypedef struct _ACTRL_ACCESS_INFOW\n{\n    ULONG  fAccessPermission;\n    LPWSTR lpAccessPermissionName;\n} ACTRL_ACCESS_INFOW, *PACTRL_ACCESS_INFOW;\n\nDECL_WINELIB_TYPE_AW(ACTRL_ACCESS_INFO)\nDECL_WINELIB_TYPE_AW(PACTRL_ACCESS_INFO)\n\ntypedef struct _ACTRL_CONTROL_INFOA\n{\n    LPSTR  lpControlId;\n    LPSTR  lpControlName;\n} ACTRL_CONTROL_INFOA, *PACTRL_CONTROL_INFOA;\n\ntypedef struct _ACTRL_CONTROL_INFOW\n{\n    LPWSTR lpControlId;\n    LPWSTR lpControlName;\n} ACTRL_CONTROL_INFOW, *PACTRL_CONTROL_INFOW;\n\nDECL_WINELIB_TYPE_AW(ACTRL_CONTROL_INFO)\nDECL_WINELIB_TYPE_AW(PACTRL_CONTROL_INFO)\n\ntypedef enum _PROGRESS_INVOKE_SETTING {\n    ProgressInvokeNever = 1,\n    ProgressInvokeEveryObject,\n    ProgressInvokeOnError,\n    ProgressCancelOperation,\n    ProgressRetryOperation\n} PROG_INVOKE_SETTING, *PPROG_INVOKE_SETTING;\n\ntypedef struct _INHERITED_FROMA\n{\n    LONG   GenerationGap;\n    LPSTR  AncestorName;\n} INHERITED_FROMA, *PINHERITED_FROMA;\n\ntypedef struct _INHERITED_FROMW\n{\n    LONG   GenerationGap;\n    LPWSTR AncestorName;\n} INHERITED_FROMW, *PINHERITED_FROMW;\n\nDECL_WINELIB_TYPE_AW(INHERITED_FROM)\nDECL_WINELIB_TYPE_AW(PINHERITED_FROM)\n\n#define AccFree LocalFree\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_ACCCTRL_H */\n"
  },
  {
    "path": "wine/windows/access.idl",
    "content": "/*\n * Copyright (C) 2009 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    object,\n    uuid(0c733a8c-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface IAccessor : IUnknown\n{\n\n    typedef DWORD DBACCESSORFLAGS;\n\n    typedef DWORD DBBINDSTATUS;\n\n    [local]\n    HRESULT AddRefAccessor([in] HACCESSOR hAccessor,\n                           [in, out, unique, annotation(\"__out_opt\")] DBREFCOUNT *pcRefCount);\n\n    [call_as(AddRefAccessor)]\n    HRESULT RemoteAddRefAccessor([in] HACCESSOR hAccessor,\n                                 [in, out, unique] DBREFCOUNT *pcRefCount,\n                                 [out] IErrorInfo **ppErrorInfoRem);\n\n    [local]\n    HRESULT CreateAccessor([in] DBACCESSORFLAGS dwAccessorFlags,\n                           [in] DBCOUNTITEM cBindings,\n                           [in, size_is(cBindings), annotation(\"__in_ecount(cBindings)\")] const DBBINDING rgBindings[],\n                           [in] DBLENGTH cbRowSize,\n                           [out, annotation(\"__out\")] HACCESSOR *phAccessor,\n                           [out, size_is(cBindings), annotation(\"__out_ecount_opt(cBindings)\")] DBBINDSTATUS rgStatus[]);\n\n    [call_as(CreateAccessor)]\n    HRESULT RemoteCreateAccessor([in] DBACCESSORFLAGS dwAccessorFlags,\n                                 [in] DBCOUNTITEM cBindings,\n                                 [in, unique, size_is((ULONG)cBindings)] DBBINDING *rgBindings,\n                                 [in] DBLENGTH cbRowSize,\n                                 [out] HACCESSOR *phAccessor,\n                                 [in, out, unique, size_is((ULONG)cBindings)] DBBINDSTATUS *rgStatus,\n                                 [out] IErrorInfo **ppErrorInfoRem);\n\n    [local]\n    HRESULT GetBindings([in] HACCESSOR hAccessor,\n                        [out, annotation(\"__out\")] DBACCESSORFLAGS *pdwAccessorFlags,\n                        [in, out, annotation(\"__out_opt\")] DBCOUNTITEM *pcBindings,\n                        [out, size_is(,*pcBindings), annotation(\"__deref_out_ecount_opt(*pcBindings)\")] DBBINDING **prgBindings);\n\n    [call_as(GetBindings)]\n    HRESULT RemoteGetBindings([in] HACCESSOR hAccessor,\n                              [out] DBACCESSORFLAGS *pdwAccessorFlags,\n                              [in, out] DBCOUNTITEM *pcBindings,\n                              [out, size_is(,(ULONG)*pcBindings)] DBBINDING **prgBindings,\n                              [out] IErrorInfo **ppErrorInfoRem);\n\n    [local]\n    HRESULT ReleaseAccessor([in] HACCESSOR hAccessor,\n                            [in, out, unique, annotation(\"__out_opt\")] DBREFCOUNT *pcRefCount);\n\n    [call_as(ReleaseAccessor)]\n    HRESULT RemoteReleaseAccessor([in] HACCESSOR hAccessor,\n                                  [in, out, unique] DBREFCOUNT *pcRefCount,\n                                  [out] IErrorInfo **ppErrorInfoRem);\n\n}\n"
  },
  {
    "path": "wine/windows/aclapi.h",
    "content": "/*\n * Copyright (C) 2004 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_ACLAPI_H\n#define __WINE_ACLAPI_H\n\n#include <windows.h>\n#include <accctrl.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef void (*FN_PROGRESS)(LPWSTR,DWORD,PPROG_INVOKE_SETTING,PVOID,BOOL);\n\nWINADVAPI DWORD  WINAPI GetExplicitEntriesFromAclA( PACL, PULONG, PEXPLICIT_ACCESS_A* );\nWINADVAPI DWORD  WINAPI GetExplicitEntriesFromAclW( PACL, PULONG, PEXPLICIT_ACCESS_W* );\n#define                 GetExplicitEntriesFromAcl WINELIB_NAME_AW(GetExplicitEntriesFromAcl)\nWINADVAPI DWORD  WINAPI GetSecurityInfo( HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*);\nWINADVAPI DWORD  WINAPI GetSecurityInfoExA(HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, LPCSTR, LPCSTR, PACTRL_ACCESSA*, PACTRL_AUDITA*, LPSTR*, LPSTR*);\nWINADVAPI DWORD  WINAPI GetSecurityInfoExW(HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, LPCWSTR, LPCWSTR, PACTRL_ACCESSW*, PACTRL_AUDITW*, LPWSTR*, LPWSTR*);\n#define                 GetSecurityInfoEx WINELIB_NAME_AW(GetSecurityInfoEx)\nWINADVAPI DWORD  WINAPI GetNamedSecurityInfoA(LPSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*);\nWINADVAPI DWORD  WINAPI GetNamedSecurityInfoW(LPWSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*);\n#define                 GetNamedSecurityInfo WINELIB_NAME_AW(GetNamedSecurityInfo)\nWINADVAPI DWORD  WINAPI SetNamedSecurityInfoA(LPSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID, PSID, PACL, PACL);\nWINADVAPI DWORD  WINAPI SetNamedSecurityInfoW(LPWSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID, PSID, PACL, PACL);\n#define                 SetNamedSecurityInfo WINELIB_NAME_AW(SetNamedSecurityInfo)\nWINADVAPI DWORD  WINAPI SetEntriesInAclA( ULONG, PEXPLICIT_ACCESSA, PACL, PACL*);\nWINADVAPI DWORD  WINAPI SetEntriesInAclW( ULONG, PEXPLICIT_ACCESSW, PACL, PACL*);\n#define                 SetEntriesInAcl WINELIB_NAME_AW(SetEntriesInAcl)\nWINADVAPI DWORD  WINAPI SetSecurityInfo(HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID, PSID, PACL, PACL);\nWINADVAPI TRUSTEE_FORM WINAPI GetTrusteeFormA( PTRUSTEEA );\nWINADVAPI TRUSTEE_FORM WINAPI GetTrusteeFormW( PTRUSTEEW );\n#define                 GetTrusteeForm WINELIB_NAME_AW(GetTrusteeForm)\nWINADVAPI LPSTR  WINAPI GetTrusteeNameA( PTRUSTEEA );\nWINADVAPI LPWSTR WINAPI GetTrusteeNameW( PTRUSTEEW );\n#define                 GetTrusteeName WINELIB_NAME_AW(GetTrusteeName)\nWINADVAPI TRUSTEE_TYPE WINAPI GetTrusteeTypeA( PTRUSTEEA );\nWINADVAPI TRUSTEE_TYPE WINAPI GetTrusteeTypeW( PTRUSTEEW );\n#define                 GetTrusteeType WINELIB_NAME_AW(GetTrusteeType)\nWINADVAPI DWORD  WINAPI BuildSecurityDescriptorA( PTRUSTEEA, PTRUSTEEA, ULONG, PEXPLICIT_ACCESS_A, ULONG, PEXPLICIT_ACCESS_A, PSECURITY_DESCRIPTOR, PULONG, PSECURITY_DESCRIPTOR* );\nWINADVAPI DWORD  WINAPI BuildSecurityDescriptorW( PTRUSTEEW, PTRUSTEEW, ULONG, PEXPLICIT_ACCESS_W, ULONG, PEXPLICIT_ACCESS_W, PSECURITY_DESCRIPTOR, PULONG, PSECURITY_DESCRIPTOR* );\n#define                 BuildSecurityDescriptor WINELIB_NAME_AW(BuildSecurityDescriptor)\nWINADVAPI void   WINAPI BuildTrusteeWithNameA( PTRUSTEEA, LPSTR );\nWINADVAPI void   WINAPI BuildTrusteeWithNameW( PTRUSTEEW, LPWSTR );\n#define                 BuildTrusteeWithName WINELIB_NAME_AW(BuildTrusteeWithName)\nWINADVAPI void   WINAPI BuildTrusteeWithObjectsAndNameA(PTRUSTEEA, POBJECTS_AND_NAME_A, SE_OBJECT_TYPE, LPSTR, LPSTR, LPSTR);\nWINADVAPI void   WINAPI BuildTrusteeWithObjectsAndNameW(PTRUSTEEW, POBJECTS_AND_NAME_W, SE_OBJECT_TYPE, LPWSTR, LPWSTR, LPWSTR);\n#define                 BuildTrusteeWithObjectsAndName WINELIB_NAME_AW(BuildTrusteeWithObjectsAndName)\nWINADVAPI void   WINAPI BuildTrusteeWithObjectsAndSidA(PTRUSTEEA, POBJECTS_AND_SID, GUID*, GUID*, PSID);\nWINADVAPI void   WINAPI BuildTrusteeWithObjectsAndSidW(PTRUSTEEW, POBJECTS_AND_SID, GUID*, GUID*, PSID);\n#define                 BuildTrusteeWithObjectsAndSid WINELIB_NAME_AW(BuildTrusteeWithObjectsAndSid)\nWINADVAPI void   WINAPI BuildExplicitAccessWithNameA(PEXPLICIT_ACCESSA, LPSTR, DWORD, ACCESS_MODE, DWORD);\nWINADVAPI void   WINAPI BuildExplicitAccessWithNameW(PEXPLICIT_ACCESSW, LPWSTR, DWORD, ACCESS_MODE, DWORD);\n#define                 BuildExplicitAccessWithName WINELIB_NAME_AW(BuildExplicitAccessWithName)\nWINADVAPI void   WINAPI BuildTrusteeWithSidA(PTRUSTEEA pTrustee, PSID pSid);\nWINADVAPI void   WINAPI BuildTrusteeWithSidW(PTRUSTEEW pTrustee, PSID pSid);\n#define                 BuildTrusteeWithSid WINELIB_NAME_AW(BuildTrusteeWithSid)\nWINADVAPI DWORD  WINAPI GetEffectiveRightsFromAclA(PACL,PTRUSTEE_A,PACCESS_MASK);\nWINADVAPI DWORD  WINAPI GetEffectiveRightsFromAclW(PACL,PTRUSTEE_W,PACCESS_MASK);\n#define                 GetEffectiveRightsFromAcl WINELIB_NAME_AW(GetEffectiveRightsFromAcl)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_ACLAPI_H */\n"
  },
  {
    "path": "wine/windows/aclui.h",
    "content": "/*\n * Copyright (C) 2009 Nikolay Sivov\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_ACLUI_H\n#define __WINE_ACLUI_H\n\n#include <objbase.h>\n#include <commctrl.h>\n#include <accctrl.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif  /* __cplusplus */\n\ntypedef struct _SI_OBJECT_INFO\n{\n    DWORD       dwFlags;\n    HINSTANCE   hInstance;\n    LPWSTR      pszServerName;\n    LPWSTR      pszObjectName;\n    LPWSTR      pszPageTitle;\n    GUID        guidObjectType;\n} SI_OBJECT_INFO, *PSI_OBJECT_INFO;\n\n#define SI_EDIT_PERMS                0x00000000\n#define SI_EDIT_OWNER                0x00000001\n#define SI_EDIT_AUDITS               0x00000002\n#define SI_CONTAINER                 0x00000004\n#define SI_READONLY                  0x00000008\n#define SI_ADVANCED                  0x00000010\n#define SI_RESET                     0x00000020\n#define SI_OWNER_READONLY            0x00000040\n#define SI_EDIT_PROPERTIES           0x00000080\n#define SI_OWNER_RECURSE             0x00000100\n#define SI_NO_ACL_PROTECT            0x00000200\n#define SI_NO_TREE_APPLY             0x00000400\n#define SI_PAGE_TITLE                0x00000800\n#define SI_SERVER_IS_DC              0x00001000\n#define SI_RESET_DACL_TREE           0x00004000\n#define SI_RESET_SACL_TREE           0x00008000\n#define SI_OBJECT_GUID               0x00010000\n#define SI_EDIT_EFFECTIVE            0x00020000\n#define SI_RESET_DACL                0x00040000\n#define SI_RESET_SACL                0x00080000\n#define SI_RESET_OWNER               0x00100000\n#define SI_NO_ADDITIONAL_PERMISSION  0x00200000\n#define SI_VIEW_ONLY                 0x00400000\n#define SI_PERMS_ELEVATION_REQUIRED  0x01000000\n#define SI_AUDITS_ELEVATION_REQUIRED 0x02000000\n#define SI_OWNER_ELEVATION_REQUIRED  0x04000000\n#define SI_MAY_WRITE                 0x10000000\n\n#define SI_EDIT_ALL     (SI_EDIT_PERMS | SI_EDIT_OWNER | SI_EDIT_AUDITS)\n\ntypedef struct _SI_ACCESS\n{\n    const GUID *pguid;\n    ACCESS_MASK mask;\n    LPCWSTR     pszName;\n    DWORD       dwFlags;\n} SI_ACCESS, *PSI_ACCESS;\n\n#define SI_ACCESS_SPECIFIC  0x00010000\n#define SI_ACCESS_GENERAL   0x00020000\n#define SI_ACCESS_CONTAINER 0x00040000\n#define SI_ACCESS_PROPERTY  0x00080000\n\ntypedef struct _SI_INHERIT_TYPE\n{\n    const GUID *pguid;\n    ULONG       dwFlags;\n    LPCWSTR     pszName;\n} SI_INHERIT_TYPE, *PSI_INHERIT_TYPE;\n\ntypedef enum _SI_PAGE_TYPE\n{\n    SI_PAGE_PERM,\n    SI_PAGE_ADVPERM,\n    SI_PAGE_AUDIT,\n    SI_PAGE_OWNER,\n    SI_PAGE_EFFECTIVE,\n    SI_PAGE_TAKEOWNERSHIP\n} SI_PAGE_TYPE;\n\n#define PSPCB_SI_INITDIALOG (WM_USER + 1)\n\n#undef INTERFACE\n#define INTERFACE ISecurityInformation\nDECLARE_INTERFACE_IID_(ISecurityInformation, IUnknown, \"965fc360-16ff-11d0-91cb-00aa00bbb723\")\n{\n    /* IUnknown methods */\n    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n\n    /* ISecurityInformation methods */\n    STDMETHOD(GetObjectInformation) (THIS_ PSI_OBJECT_INFO pObjectInfo ) PURE;\n    STDMETHOD(GetSecurity) (THIS_ SECURITY_INFORMATION RequestedInformation,\n                            PSECURITY_DESCRIPTOR *ppSecurityDescriptor,\n                            BOOL fDefault ) PURE;\n    STDMETHOD(SetSecurity) (THIS_ SECURITY_INFORMATION SecurityInformation,\n                            PSECURITY_DESCRIPTOR pSecurityDescriptor ) PURE;\n    STDMETHOD(GetAccessRights) (THIS_ const GUID* pguidObjectType,\n                                DWORD dwFlags,\n                                PSI_ACCESS *ppAccess,\n                                ULONG *pcAccesses,\n                                ULONG *piDefaultAccess ) PURE;\n    STDMETHOD(MapGeneric) (THIS_ const GUID *pguidObjectType,\n                           UCHAR *pAceFlags,\n                           ACCESS_MASK *pMask) PURE;\n    STDMETHOD(GetInheritTypes) (THIS_ PSI_INHERIT_TYPE *ppInheritTypes,\n                                ULONG *pcInheritTypes ) PURE;\n    STDMETHOD(PropertySheetPageCallback)(THIS_ HWND hwnd, UINT uMsg, SI_PAGE_TYPE uPage ) PURE;\n};\n#undef INTERFACE\ntypedef ISecurityInformation *LPSECURITYINFO;\n\n#define INTERFACE ISecurityInformation2\nDECLARE_INTERFACE_IID_(ISecurityInformation2, IUnknown, \"c3ccfdb4-6f88-11d2-a3ce-00c04fb1782a\")\n{\n    /* IUnknown methods */\n    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n\n    /* ISecurityInformation2 methods */\n    STDMETHOD_(BOOL,IsDaclCanonical) (THIS_ PACL pDacl) PURE;\n    STDMETHOD(LookupSids) (THIS_ ULONG cSids, PSID *rgpSids, LPDATAOBJECT *ppdo) PURE;\n};\n#undef INTERFACE\ntypedef ISecurityInformation2 *LPSECURITYINFO2;\n\n#define CFSTR_ACLUI_SID_INFO_LIST   TEXT(\"CFSTR_ACLUI_SID_INFO_LIST\")\n\ntypedef struct _SID_INFO\n{\n    PSID    pSid;\n    PWSTR   pwzCommonName;\n    PWSTR   pwzClass;\n    PWSTR   pwzUPN;\n} SID_INFO, *PSID_INFO;\n\ntypedef struct _SID_INFO_LIST\n{\n    ULONG       cItems;\n    SID_INFO    aSidInfo[ANYSIZE_ARRAY];\n} SID_INFO_LIST, *PSID_INFO_LIST;\n\n\n#define INTERFACE IEffectivePermission\nDECLARE_INTERFACE_IID_(IEffectivePermission, IUnknown, \"3853dc76-9f35-407c-88a1-d19344365fbc\")\n{\n    /* IUnknown methods */\n    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n\n    /* ISecurityInformation methods */\n    STDMETHOD(GetEffectivePermission) (THIS_\n                                       const GUID* pguidObjectType,\n                                       PSID pUserSid,\n                                       LPCWSTR pszServerName,\n                                       PSECURITY_DESCRIPTOR pSD,\n                                       POBJECT_TYPE_LIST *ppObjectTypeList,\n                                       ULONG *pcObjectTypeListLength,\n                                       PACCESS_MASK *ppGrantedAccessList,\n                                       ULONG *pcGrantedAccessListLength) PURE;\n};\n#undef INTERFACE\ntypedef IEffectivePermission *LPEFFECTIVEPERMISSION;\n\n#define INTERFACE ISecurityObjectTypeInfo\nDECLARE_INTERFACE_IID_(ISecurityObjectTypeInfo, IUnknown, \"fc3066eb-79ef-444b-9111-d18a75ebf2fa\")\n{\n    /* IUnknown methods */\n    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n\n    /* ISecurityInformation methods */\n    STDMETHOD(GetInheritSource)(THIS_ SECURITY_INFORMATION si,\n                                PACL pACL,\n#ifndef WINE_NO_UNICODE_MACROS\n                                PINHERITED_FROM *ppInheritArray\n#else\n                                PINHERITED_FROMW *ppInheritArray\n#endif\n                                ) PURE;\n};\n#undef INTERFACE\ntypedef ISecurityObjectTypeInfo *LPSecurityObjectTypeInfo;\n\n\n#define INTERFACE ISecurityInformation3\nDECLARE_INTERFACE_IID_(ISecurityInformation3, IUnknown, \"e2cdc9cc-31bd-4f8f-8c8b-b641af516a1a\")\n{\n    /* IUnknown methods */\n    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n\n    /* ISecurityInformation3 methods */\n    STDMETHOD(GetFullResourceName) (THIS_ LPWSTR *ppszResourceName) PURE;\n    STDMETHOD(OpenElevatedEditor) (THIS_ HWND hWnd, SI_PAGE_TYPE uPage) PURE;\n};\n#undef INTERFACE\ntypedef ISecurityInformation3 *LPSECURITYINFO3;\n\nDEFINE_GUID(IID_ISecurityInformation, 0x965fc360, 0x16ff, 0x11d0, 0x91, 0xcb, 0x0, 0xaa, 0x0, 0xbb, 0xb7, 0x23);\nDEFINE_GUID(IID_ISecurityInformation2, 0xc3ccfdb4, 0x6f88, 0x11d2, 0xa3, 0xce, 0x0, 0xc0, 0x4f, 0xb1, 0x78, 0x2a);\nDEFINE_GUID(IID_IEffectivePermission, 0x3853dc76, 0x9f35, 0x407c, 0x88, 0xa1, 0xd1, 0x93, 0x44, 0x36, 0x5f, 0xbc);\nDEFINE_GUID(IID_ISecurityObjectTypeInfo, 0xfc3066eb, 0x79ef, 0x444b, 0x91, 0x11, 0xd1, 0x8a, 0x75, 0xeb, 0xf2, 0xfa);\nDEFINE_GUID(IID_ISecurityInformation3, 0xe2cdc9cc, 0x31bd, 0x4f8f, 0x8c, 0x8b, 0xb6, 0x41, 0xaf, 0x51, 0x6a, 0x1a);\n\nHPROPSHEETPAGE WINAPI CreateSecurityPage(LPSECURITYINFO psi);\nBOOL WINAPI EditSecurity(HWND owner, LPSECURITYINFO psi);\nHRESULT WINAPI EditSecurityAdvanced(HWND owner, LPSECURITYINFO psi, SI_PAGE_TYPE uSIPage);\n\n#ifdef __cplusplus\n}\n#endif  /* __cplusplus */\n\n#endif /* __WINE_ACLUI_H */\n"
  },
  {
    "path": "wine/windows/activation.idl",
    "content": "/*\n * Copyright 2016 Michael Müller\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"inspectable.idl\";\n#endif\n\n[\n    object,\n    uuid(00000035-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IActivationFactory : IInspectable\n{\n    HRESULT ActivateInstance([out] IInspectable **instance);\n}\n"
  },
  {
    "path": "wine/windows/activaut.idl",
    "content": "/*\n * Copyright 2008 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"ocidl.idl\";\nimport \"oleidl.idl\";\nimport \"oaidl.idl\";\n#endif\n\ncpp_quote(\"#ifndef _NO_AUTHOR_GUIDS\")\n\ncpp_quote(\"DEFINE_GUID(CATID_ActiveScriptAuthor, 0xaee2a92,0xbcbb,0x11d0,0x8c,0x72,0x0,0xc0,0x4f,0xc2,0xb0,0x85);\")\n\ncpp_quote(\"#endif\")\n"
  },
  {
    "path": "wine/windows/activdbg.idl",
    "content": "/*\n * Copyright 2008 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"ocidl.idl\";\nimport \"activscp.idl\";\n/* import \"dbgprop.idl\"; */\n\ninterface IDebugDocumentContext;\ninterface IRemoteDebugApplication;\ninterface IEnumDebugCodeContexts;\n\n/* FIXME: */\ninterface IEnumDebugStackFrames;\ninterface IDebugStackFrame;\ninterface IApplicationDebugger;\ninterface IEnumRemoteDebugApplicationThreads;\ninterface IDebugApplicationNode;\ninterface IEnumDebugExpressionContexts;\ninterface IDebugApplicationThread;\ninterface IDebugSyncOperation;\ninterface IDebugAsyncOperation;\ninterface IDebugStackFrameSniffer;\ninterface IDebugThreadCall32;\ninterface IActiveScriptErrorDebug;\ninterface IProvideExpressionContexts;\n\ntypedef enum tagBREAKPOINT_STATE {\n    BREAKPOINT_DELETED,\n    BREAKPOINT_DISABLED,\n    BREAKPOINT_ENABLED\n} BREAKPOINT_STATE;\n\ntypedef DWORD APPBREAKFLAGS;\n\ntypedef enum tagBREAKREASON {\n    BREAKREASON_STEP,\n    BREAKREASON_BREAKPOINT,\n    BREAKREASON_DEBUGGER_BLOCK,\n    BREAKREASON_HOST_INITIATED,\n    BREAKREASON_LANGUAGE_INITIATED,\n    BREAKREASON_DEBUGGER_HALT,\n    BREAKREASON_ERROR,\n    BREAKREASON_JIT\n} BREAKREASON;\n\ntypedef enum tagBREAKRESUME_ACTION {\n    BREAKRESUMEACTION_ABORT,\n    BREAKRESUMEACTION_CONTINUE,\n    BREAKRESUMEACTION_STEP_INTO,\n    BREAKRESUMEACTION_STEP_OVER,\n    BREAKRESUMEACTION_STEP_OUT,\n    BREAKRESUMEACTION_IGNORE\n} BREAKRESUMEACTION;\n\ntypedef enum tagDOCUMENTNAMETYPE {\n    DOCUMENTNAMETYPE_APPNODE,\n    DOCUMENTNAMETYPE_TITLE,\n    DOCUMENTNAMETYPE_FILE_TAIL,\n    DOCUMENTNAMETYPE_URL\n} DOCUMENTNAMETYPE;\n\ntypedef enum tagERRORRESUMEACTION {\n    ERRORRESUMEACTION_ReexecuteErrorStatement,\n    ERRORRESUMEACTION_AbortCallAndReturnErrorToCaller,\n    ERRORRESUMEACTION_SkipErrorStatement,\n} ERRORRESUMEACTION;\n\ntypedef WORD SOURCE_TEXT_ATTR;\n\n#ifdef INTEROPLIB\nenum enum_SOURCE_TEXT_ATTR\n{\n    SOURCETEXT_ATTR_KEYWORD        = 0x01,\n    SOURCETEXT_ATTR_COMMENT        = 0x02,\n    SOURCETEXT_ATTR_NONSOURCE      = 0x04,\n    SOURCETEXT_ATTR_OPERATOR       = 0x08,\n    SOURCETEXT_ATTR_NUMBER         = 0x10,\n    SOURCETEXT_ATTR_STRING         = 0x20,\n    SOURCETEXT_ATTR_FUNCTION_START = 0x40\n};\n#endif\n\nconst SOURCE_TEXT_ATTR SOURCETEXT_ATTR_KEYWORD         = 0x01;\nconst SOURCE_TEXT_ATTR SOURCETEXT_ATTR_COMMENT         = 0x02;\nconst SOURCE_TEXT_ATTR SOURCETEXT_ATTR_NONSOURCE       = 0x04;\nconst SOURCE_TEXT_ATTR SOURCETEXT_ATTR_OPERATOR        = 0x08;\nconst SOURCE_TEXT_ATTR SOURCETEXT_ATTR_NUMBER          = 0x10;\nconst SOURCE_TEXT_ATTR SOURCETEXT_ATTR_STRING          = 0x20;\nconst SOURCE_TEXT_ATTR SOURCETEXT_ATTR_FUNCTION_START  = 0x40;\n\n/************************************************************\n *      interface IActiveScriptDebug32\n */\n[\n    object,\n    uuid(51973c10-cb0c-11d0-b5c9-00a0244a0e7a),\n    pointer_default(unique)\n]\ninterface IActiveScriptDebug32 : IUnknown\n{\n    HRESULT GetScriptTextAttributes(\n            [in, size_is(uNumCodeChars)] LPCOLESTR pstrCode,\n            [in] ULONG uNumCodeChars,\n            [in] LPCOLESTR pstrDelimiter,\n            [in] DWORD dwFlags,\n            [in, out, size_is(uNumCodeChars)] SOURCE_TEXT_ATTR *pattr);\n\n    HRESULT GetScriptletTextAttributes(\n            [in, size_is(uNumCodeChars)] LPCOLESTR pstrCode,\n            [in] ULONG uNumCodeChars,\n            [in] LPCOLESTR pstrDelimiter,\n            [in] DWORD dwFlags,\n            [in, out, size_is(uNumCodeChars)] SOURCE_TEXT_ATTR *pattr);\n\n    HRESULT EnumCodeContextsOfPosition(\n            [in] DWORD dwSourceContext,\n            [in] ULONG uCharacterOffset,\n            [in] ULONG uNumChars,\n            [out] IEnumDebugCodeContexts **ppescc);\n}\n\n[\n    object,\n    uuid(bc437e23-f5b8-47f4-bb79-7d1ce5483b86),\n    pointer_default(unique)\n]\ninterface IActiveScriptDebug64 : IUnknown\n{\n    HRESULT GetScriptTextAttributes(\n            [in, size_is(uNumCodeChars)] LPCOLESTR pstrCode,\n            [in] ULONG uNumCodeChars,\n            [in] LPCOLESTR pstrDelimiter,\n            [in] DWORD dwFlags,\n            [in, out, size_is(uNumCodeChars)] SOURCE_TEXT_ATTR *pattr);\n\n    HRESULT GetScriptletTextAttributes(\n            [in, size_is(uNumCodeChars)] LPCOLESTR pstrCode,\n            [in] ULONG uNumCodeChars,\n            [in] LPCOLESTR pstrDelimiter,\n            [in] DWORD dwFlags,\n            [in, out, size_is(uNumCodeChars)] SOURCE_TEXT_ATTR *pattr);\n\n    HRESULT EnumCodeContextsOfPosition(\n           [in] DWORDLONG dwSourceContext,\n           [in] ULONG uCharacterOffset,\n           [in] ULONG uNumChars,\n           [out] IEnumDebugCodeContexts **ppescc);\n}\n\n/************************************************************\n *      interface IDebugDocumentInfo\n */\n[\n    object,\n    uuid(51973c1f-cb0c-11d0-b5c9-00a0244a0e7a),\n    pointer_default(unique)\n]\ninterface IDebugDocumentInfo : IUnknown\n{\n    HRESULT GetName(\n            [in]  DOCUMENTNAMETYPE dnt,\n            [out] BSTR *pbstrName);\n\n    HRESULT GetDocumentClassId(\n            [out] CLSID *pclsidDocument);\n}\n\n/************************************************************\n *      interface IDebugDocument\n */\n[\n    object,\n    uuid(51973c21-cb0c-11d0-b5c9-00a0244a0e7a),\n    pointer_default(unique)\n]\ninterface IDebugDocument : IDebugDocumentInfo\n{\n}\n\n/************************************************************\n *      interface IDebugCodeContext\n */\n[\n    object,\n    uuid(51973c13-cb0c-11d0-b5c9-00a0244a0e7a),\n    pointer_default(unique)\n]\ninterface IDebugCodeContext : IUnknown\n{\n    HRESULT GetDocumentContext(\n            [out] IDebugDocumentContext **ppsc);\n\n    HRESULT SetBreakPoint(\n            [in]  BREAKPOINT_STATE bps);\n}\n\n/************************************************************\n *      interface IEnumDebugCodeContexts\n */\n[\n    object,\n    uuid(51973c1d-cb0c-11d0-b5c9-00a0244a0e7a),\n    pointer_default(unique)\n]\ninterface IEnumDebugCodeContexts : IUnknown\n{\n    HRESULT Next(\n            [in]  ULONG celt,\n            [out] IDebugCodeContext **pscc,\n            [out] ULONG *pceltFetched);\n\n    HRESULT Skip(\n            [in]  ULONG celt);\n\n    HRESULT Reset();\n\n    HRESULT Clone(\n            [out] IEnumDebugCodeContexts **ppescc);\n}\n\n/************************************************************\n *      interface IDebugDocumentContext\n */\n[\n    object,\n    uuid(51973c28-cb0c-11d0-b5c9-00a0244a0e7a),\n    pointer_default(unique)\n]\ninterface IDebugDocumentContext : IUnknown\n{\n    HRESULT GetDocument(\n            [out] IDebugDocument **ppsd);\n\n    HRESULT EnumCodeContexts(\n            [out] IEnumDebugCodeContexts **ppescc);\n}\n\n/************************************************************\n *      interface IRemoteDebugApplicationThread\n */\n[\n    object,\n    uuid(51973c37-cb0c-11d0-b5c9-00a0244a0e7a),\n    pointer_default(unique)\n]\ninterface IRemoteDebugApplicationThread : IUnknown\n{\n    HRESULT GetSystemThreadId(\n            [out] DWORD *dwThreadId);\n\n    HRESULT GetApplication(\n            [out] IRemoteDebugApplication **pprda);\n\n    HRESULT EnumStackFrames(\n            [out] IEnumDebugStackFrames **ppedsf);\n\n    HRESULT GetDescription(\n            [out] BSTR *pbstrDescription,\n            [out] BSTR *pbstrState);\n\n    HRESULT SetNextStatement(\n            [in]  IDebugStackFrame *pStackFrame,\n            [in]  IDebugCodeContext *pCodeContext);\n\n    HRESULT GetState(\n            [out] DWORD *pState);\n\n    HRESULT Suspend(\n            [out] DWORD *pdwCount);\n\n    HRESULT Resume(\n            [out] DWORD *pdwCount);\n\n    HRESULT GetSuspendCount(\n            [out] DWORD *pdwCount);\n}\n\n/************************************************************\n *      interface IRemoteDebugApplication\n */\n[\n    object,\n    uuid(51973c30-cb0c-11d0-b5c9-00a0244Aae7a),\n    pointer_default(unique)\n]\ninterface IRemoteDebugApplication : IUnknown\n{\n    HRESULT ResumeFromBreakPoint(\n            [in]  IRemoteDebugApplicationThread *prptFocus,\n            [in]  BREAKRESUMEACTION bra,\n            [in]  ERRORRESUMEACTION era);\n\n    HRESULT CauseBreak();\n\n    HRESULT ConnectDebugger(\n            [in]  IApplicationDebugger *pad);\n\n    HRESULT DisconnectDebugger();\n\n    HRESULT GetDebugger(\n            [out] IApplicationDebugger **pad);\n\n    HRESULT CreateInstanceAtApplication(\n            [in]  REFCLSID rclsid,\n            [in]  IUnknown *pUnkOuter,\n            [in]  DWORD dwClsContext,\n            [in]  REFIID riid,\n            [out, iid_is(riid)] IUnknown **ppvObject);\n\n    HRESULT QueryAlive();\n\n    HRESULT EnumThreads(\n            [out] IEnumRemoteDebugApplicationThreads **pperdat);\n\n    HRESULT GetName(\n            [out] BSTR *pbstrName);\n\n    HRESULT GetRootNode(\n            [out] IDebugApplicationNode **ppdanRoot);\n\n    HRESULT EnumGlobalExpressionContexts(\n            [out] IEnumDebugExpressionContexts **ppedec);\n}\n\n/************************************************************\n *      interface IDebugApplication32\n */\n[\n    object,\n    uuid(51973c32-cb0c-11d0-b5c9-00a0244a0e7a),\n    pointer_default(unique),\n    local\n]\ninterface IDebugApplication32 : IRemoteDebugApplication\n{\n    HRESULT SetName(\n            [in] LPCOLESTR pstrName);\n\n    HRESULT StepOutComplete();\n\n    HRESULT DebugOutput(\n            [in] LPCOLESTR pstr);\n\n    HRESULT StartDebugSession();\n\n    HRESULT HandleBreakPoint(\n            [in]  BREAKREASON br,\n            [out] BREAKRESUMEACTION *pbra);\n\n    HRESULT Close();\n\n    HRESULT GetBreakFlags(\n            [out] APPBREAKFLAGS *pabf,\n            [out] IRemoteDebugApplicationThread **pprdatSteppingThread);\n\n    cpp_quote(\"#undef GetCurrentThread\")\n    HRESULT GetCurrentThread(\n            [out] IDebugApplicationThread **pat);\n\n    HRESULT CreateAsyncDebugOperation(\n            [in]  IDebugSyncOperation *psdo,\n            [out] IDebugAsyncOperation **ppado);\n\n    HRESULT AddStackFrameSniffer(\n            [in]  IDebugStackFrameSniffer *pdsfs,\n            [out] DWORD *pdwCookie);\n\n    HRESULT RemoveStackFrameSniffer(\n            [in]  DWORD dwCookie);\n\n    HRESULT QueryCurrentThreadIsDebuggerThread();\n\n    HRESULT SynchronousCallInDebuggerThread(\n            [in]  IDebugThreadCall32 *pptc,\n            [in]  DWORD dwParam1,\n            [in]  DWORD dwParam2,\n            [in]  DWORD dwParam3);\n\n    HRESULT CreateApplicationNode(\n            [out] IDebugApplicationNode **ppdanNew);\n\n    HRESULT FireDebuggerEvent(\n            [in]  REFGUID riid,\n            [in]  IUnknown *punk);\n\n    HRESULT HandleRuntimeError(\n            [in]  IActiveScriptErrorDebug *pErrorDebug,\n            [in]  IActiveScriptSite *pScriptSite,\n            [out] BREAKRESUMEACTION *pbra,\n            [out] ERRORRESUMEACTION *perra,\n            [out] BOOL *pfCallOnScriptError);\n\n    BOOL FCanJitDebug();\n\n    BOOL FIsAutoJitDebugEnabled();\n\n    HRESULT AddGlobalExpressionContextProvider(\n            [in]  IProvideExpressionContexts *pdsfs,\n            [out] DWORD *pdwCookie);\n\n    HRESULT RemoveGlobalExpressionContextProvider(\n            [in]  DWORD dwCookie);\n}\n\n/************************************************************\n *      interface IDebugApplication64\n */\n[\n    object,\n    uuid(4dedc754-04c7-4f10-9e60-16a390fe6e62),\n    pointer_default(unique),\n    local\n]\ninterface IDebugApplication64 : IRemoteDebugApplication\n{\n    HRESULT SetName(\n            [in] LPCOLESTR pstrName);\n\n    HRESULT StepOutComplete();\n\n    HRESULT DebugOutput(\n            [in] LPCOLESTR pstr);\n\n    HRESULT StartDebugSession();\n\n    HRESULT HandleBreakPoint(\n            [in]  BREAKREASON br,\n            [out] BREAKRESUMEACTION *pbra);\n\n    HRESULT Close();\n\n    HRESULT GetBreakFlags(\n            [out] APPBREAKFLAGS *pabf,\n            [out] IRemoteDebugApplicationThread **pprdatSteppingThread);\n\n    HRESULT GetCurrentThread(\n            [out] IDebugApplicationThread **pat);\n\n    HRESULT CreateAsyncDebugOperation(\n            [in]  IDebugSyncOperation *psdo,\n            [out] IDebugAsyncOperation **ppado);\n\n    HRESULT AddStackFrameSniffer(\n            [in]  IDebugStackFrameSniffer *pdsfs,\n            [out] DWORD *pdwCookie);\n\n    HRESULT RemoveStackFrameSniffer(\n            [in]  DWORD dwCookie);\n\n    HRESULT QueryCurrentThreadIsDebuggerThread();\n\n    HRESULT SynchronousCallInDebuggerThread(\n            [in]  IDebugThreadCall32 *pptc,\n            [in]  DWORDLONG dwParam1,\n            [in]  DWORDLONG dwParam2,\n            [in]  DWORDLONG dwParam3);\n\n    HRESULT CreateApplicationNode(\n            [out] IDebugApplicationNode **ppdanNew);\n\n    HRESULT FireDebuggerEvent(\n            [in]  REFGUID riid,\n            [in]  IUnknown *punk);\n\n    HRESULT HandleRuntimeError(\n            [in]  IActiveScriptErrorDebug *pErrorDebug,\n            [in]  IActiveScriptSite *pScriptSite,\n            [out] BREAKRESUMEACTION *pbra,\n            [out] ERRORRESUMEACTION *perra,\n            [out] BOOL *pfCallOnScriptError);\n\n    BOOL FCanJitDebug();\n\n    BOOL FIsAutoJitDebugEnabled();\n\n    HRESULT AddGlobalExpressionContextProvider(\n            [in]  IProvideExpressionContexts *pdsfs,\n            [out] DWORDLONG *pdwCookie);\n\n    HRESULT RemoveGlobalExpressionContextProvider(\n            [in]  DWORDLONG dwCookie);\n}\n\n/************************************************************\n *      interface IActiveScriptSiteDebug32\n */\n[\n    object,\n    uuid(51973c11-cb0c-11d0-b5c9-00a0244a0e7a),\n    pointer_default(unique),\n    local\n]\ninterface IActiveScriptSiteDebug32 : IUnknown\n{\n    HRESULT GetDocumentContextFromPosition(\n            [in]  DWORD dwSourceContext,\n            [in]  ULONG uCharacterOffset,\n            [in]  ULONG uNumChars,\n            [out] IDebugDocumentContext **ppsc);\n\n    HRESULT GetApplication(\n            [out] IDebugApplication32 **ppda);\n\n    HRESULT GetRootApplicationNode(\n            [out] IDebugApplicationNode **ppdanRoot);\n\n    HRESULT OnScriptErrorDebug(\n            [in]  IActiveScriptErrorDebug *pErrorDebug,\n            [out] BOOL *pfEnterDebugger,\n            [out] BOOL *pfCallOnScriptErrorWhenContinuing);\n}\n\n/************************************************************\n *      interface IActiveScriptSiteDebug64\n */\n[\n    object,\n    uuid(d6b96b0a-7463-402c-92ac-89984226942f),\n    pointer_default(unique),\n    local\n]\ninterface IActiveScriptSiteDebug64 : IUnknown\n{\n    HRESULT GetDocumentContextFromPosition(\n            [in]  DWORDLONG dwSourceContext,\n            [in]  ULONG uCharacterOffset,\n            [in]  ULONG uNumChars,\n            [out] IDebugDocumentContext **ppsc);\n\n    HRESULT GetApplication(\n            [out] IDebugApplication64 **ppda);\n\n    HRESULT GetRootApplicationNode(\n            [out] IDebugApplicationNode **ppdanRoot);\n\n    HRESULT OnScriptErrorDebug(\n            [in]  IActiveScriptErrorDebug *pErrorDebug,\n            [out] BOOL *pfEnterDebugger,\n            [out] BOOL *pfCallOnScriptErrorWhenContinuing);\n}\n\ncpp_quote(\"#ifndef DISABLE_ACTIVDBG_INTERFACE_WRAPPERS\")\ncpp_quote(\"#ifdef _WIN64\")\n\ncpp_quote(\"#define IActiveScriptDebug IActiveScriptDebug64\")\ncpp_quote(\"#define IID_IActiveScriptDebug IID_IActiveScriptDebug64\")\n\ncpp_quote(\"#define IActiveScriptSiteDebug IActiveScriptSiteDebug64\")\ncpp_quote(\"#define IID_IActiveScriptSiteDebug IID_IActiveScriptSiteDebug64\")\n\ncpp_quote(\"#define IDebugApplication IDebugApplication64\")\ncpp_quote(\"#define IID_IDebugApplication IID_IDebugApplication64\")\n\ncpp_quote(\"#else\")\n\ncpp_quote(\"#define IActiveScriptDebug IActiveScriptDebug32\")\ncpp_quote(\"#define IID_IActiveScriptDebug IID_IActiveScriptDebug32\")\n\ncpp_quote(\"#define IActiveScriptSiteDebug IActiveScriptSiteDebug32\")\ncpp_quote(\"#define IID_IActiveScriptSiteDebug IID_IActiveScriptSiteDebug32\")\n\ncpp_quote(\"#define IDebugApplication IDebugApplication32\")\ncpp_quote(\"#define IID_IDebugApplication IID_IDebugApplication32\")\n\ncpp_quote(\"#endif\")\ncpp_quote(\"#endif\")\n"
  },
  {
    "path": "wine/windows/activscp.idl",
    "content": "/*\n * Copyright 2004 Kevin Koltzau\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"ocidl.idl\";\nimport \"oleidl.idl\";\nimport \"oaidl.idl\";\n#endif\n\ncpp_quote(\"#ifndef _NO_SCRIPT_GUIDS\")\n\ncpp_quote(\"DEFINE_GUID(CATID_ActiveScript,       0xf0b7a1a1,0x9847,0x11cf,0x8f,0x20,0x00,0x80,0x5f,0x2c,0xd0,0x64);\")\ncpp_quote(\"DEFINE_GUID(CATID_ActiveScriptParse,  0xf0b7a1a2,0x9847,0x11cf,0x8f,0x20,0x00,0x80,0x5f,0x2c,0xd0,0x64);\")\ncpp_quote(\"DEFINE_GUID(CATID_ActiveScriptEncode, 0xf0b7a1a3,0x9847,0x11cf,0x8f,0x20,0x00,0x80,0x5f,0x2c,0xd0,0x64);\")\n\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#define SCRIPTPROP_NAME                   0x00000000\")\ncpp_quote(\"#define SCRIPTPROP_MAJORVERSION           0x00000001\")\ncpp_quote(\"#define SCRIPTPROP_MINORVERSION           0x00000002\")\ncpp_quote(\"#define SCRIPTPROP_BUILDNUMBER            0x00000003\")\ncpp_quote(\"#define SCRIPTPROP_DELAYEDEVENTSINKING    0x00001000\")\ncpp_quote(\"#define SCRIPTPROP_CATCHEXCEPTION         0x00001001\")\ncpp_quote(\"#define SCRIPTPROP_CONVERSIONLCID         0x00001002\")\ncpp_quote(\"#define SCRIPTPROP_HOSTSTACKREQUIRED      0x00001003\")\ncpp_quote(\"#define SCRIPTPROP_DEBUGGER               0x00001100\")\ncpp_quote(\"#define SCRIPTPROP_JITDEBUG               0x00001101\")\ncpp_quote(\"#define SCRIPTPROP_INVOKEVERSIONING       0x00004000\")\n\ncpp_quote(\"#define SCRIPTPROP_HACK_FIBERSUPPORT                0x70000000\")\ncpp_quote(\"#define SCRIPTPROP_HACK_TRIDENTEVENTSINK            0x70000001\")\ncpp_quote(\"#define SCRIPTPROP_ABBREVIATE_GLOBALNAME_RESOLUTION 0x70000002\")\n\ntypedef enum tagSCRIPTLANGUAGEVERSION {\n    SCRIPTLANGUAGEVERSION_DEFAULT = 0,\n    SCRIPTLANGUAGEVERSION_5_7     = 1,\n    SCRIPTLANGUAGEVERSION_5_8     = 2,\n    SCRIPTLANGUAGEVERSION_MAX     = 255\n} SCRIPTLANGUAGEVERSION;\n\ntypedef enum tagSCRIPTSTATE {\n    SCRIPTSTATE_UNINITIALIZED = 0,\n    SCRIPTSTATE_STARTED       = 1,\n    SCRIPTSTATE_CONNECTED     = 2,\n    SCRIPTSTATE_DISCONNECTED  = 3,\n    SCRIPTSTATE_CLOSED        = 4,\n    SCRIPTSTATE_INITIALIZED   = 5\n} SCRIPTSTATE;\n\ntypedef enum tagSCRIPTTHREADSTATE {\n    SCRIPTTHREADSTATE_NOTINSCRIPT = 0,\n    SCRIPTTHREADSTATE_RUNNING     = 1\n} SCRIPTTHREADSTATE;\n\ntypedef enum tagSCRIPTUICITEM {\n    SCRIPTUICITEM_INPUTBOX = 1,\n    SCRIPTUICITEM_MSGBOX   = 2\n} SCRIPTUICITEM;\n\ntypedef enum tagSCRIPTUICHANDLING {\n    SCRIPTUICHANDLING_ALLOW       = 0,\n    SCRIPTUICHANDLING_NOUIERROR   = 1,\n    SCRIPTUICHANDLING_NOUIDEFAULT = 2\n} SCRIPTUICHANDLING;\n\ntypedef enum tagSCRIPTGCTYPE {\n    SCRIPTGCTYPE_NORMAL     = 0,\n    SCRIPTGCTYPE_EXHAUSTIVE = 1\n} SCRIPTGCTYPE;\n\ntypedef DWORD SCRIPTTHREADID;\ncpp_quote(\"#define SCRIPTTHREADID_CURRENT ((SCRIPTTHREADID)-1)\")\ncpp_quote(\"#define SCRIPTTHREADID_BASE ((SCRIPTTHREADID)-2)\")\ncpp_quote(\"#define SCRIPTTHREADID_ALL ((SCRIPTTHREADID)-3)\")\n\ncpp_quote(\"#define SCRIPTITEM_ISVISIBLE           0x00000002\")\ncpp_quote(\"#define SCRIPTITEM_ISSOURCE            0x00000004\")\ncpp_quote(\"#define SCRIPTITEM_GLOBALMEMBERS       0x00000008\")\ncpp_quote(\"#define SCRIPTITEM_ISPERSISTENT        0x00000040\")\ncpp_quote(\"#define SCRIPTITEM_CODEONLY            0x00000200\")\ncpp_quote(\"#define SCRIPTITEM_NOCODE              0x00000400\")\ncpp_quote(\"#define SCRIPTITEM_ALL_FLAGS           (SCRIPTITEM_ISSOURCE | \\\\\")\ncpp_quote(\"                                        SCRIPTITEM_ISVISIBLE | \\\\\")\ncpp_quote(\"                                        SCRIPTITEM_ISPERSISTENT | \\\\\")\ncpp_quote(\"                                        SCRIPTITEM_GLOBALMEMBERS | \\\\\")\ncpp_quote(\"                                        SCRIPTITEM_NOCODE | \\\\\")\ncpp_quote(\"                                        SCRIPTITEM_CODEONLY)\")\ncpp_quote(\"#define SCRIPTTYPELIB_ISCONTROL        0x00000010\")\ncpp_quote(\"#define SCRIPTTYPELIB_ISPERSISTENT     0x00000040\")\ncpp_quote(\"#define SCRIPTTYPELIB_ALL_FLAGS        (SCRIPTTEXT_ISCONTROL | SCRIPTTYPELIB_ISPERSISTENT)\")\ncpp_quote(\"#define SCRIPTTEXT_DELAYEXECUTION      0x00000001\")\ncpp_quote(\"#define SCRIPTTEXT_ISVISIBLE           0x00000002\")\ncpp_quote(\"#define SCRIPTTEXT_ISEXPRESSION        0x00000020\")\ncpp_quote(\"#define SCRIPTTEXT_ISPERSISTENT        0x00000040\")\ncpp_quote(\"#define SCRIPTTEXT_HOSTMANAGESSOURCE   0x00000080\")\ncpp_quote(\"#define SCRIPTTEXT_ALL_FLAGS           (SCRIPTTEXT_DELAYEXECUTION | \\\\\")\ncpp_quote(\"                                        SCRIPTTEXT_ISVISIBLE | \\\\\")\ncpp_quote(\"                                        SCRIPTTEXT_ISEXPRESSION | \\\\\")\ncpp_quote(\"                                        SCRIPTTEXT_ISPERSISTENT | \\\\\")\ncpp_quote(\"                                        SCRIPTTEXT_HOSTMANAGESSOURCE)\")\ncpp_quote(\"#define SCRIPTPROC_HOSTMANAGESSOURCE   0x00000080\")\ncpp_quote(\"#define SCRIPTPROC_IMPLICIT_THIS       0x00000100\")\ncpp_quote(\"#define SCRIPTPROC_IMPLICIT_PARENTS    0x00000200\")\ncpp_quote(\"#define SCRIPTPROC_ALL_FLAGS           (SCRIPTPROC_HOSTMANAGESSOURCE | \\\\\")\ncpp_quote(\"                                        SCRIPTPROC_IMPLICIT_THIS | \\\\\")\ncpp_quote(\"                                        SCRIPTPROC_IMPLICIT_PARENTS)\")\ncpp_quote(\"#define SCRIPTINFO_IUNKNOWN            0x00000001\")\ncpp_quote(\"#define SCRIPTINFO_ITYPEINFO           0x00000002\")\ncpp_quote(\"#define SCRIPTINFO_ALL_FLAGS           (SCRIPTINFO_IUNKNOWN | SCRIPTINFO_ITYPEINFO)\")\ncpp_quote(\"#define SCRIPTINTERRUPT_DEBUG          0x00000001\")\ncpp_quote(\"#define SCRIPTINTERRUPT_RAISEEXCEPTION 0x00000002\")\ncpp_quote(\"#define SCRIPTINTERRUPT_ALL_FLAGS      (SCRIPTINTERRUPT_DEBUG | SCRIPTINTERRUPT_RAISEEXCEPTION)\")\ncpp_quote(\"#define SCRIPTSTAT_STATEMENT_COUNT      1\")\ncpp_quote(\"#define SCRIPTSTAT_INSTRUCTION_COUNT    2\")\ncpp_quote(\"#define SCRIPTSTAT_INTSTRUCTION_TIME    3\")\ncpp_quote(\"#define SCRIPTSTAT_TOTAL_TIME           4\")\n\ncpp_quote(\"#define SCRIPT_E_RECORDED  0x86664004\")\ncpp_quote(\"#define SCRIPT_E_REPORTED  0x80020101\")\ncpp_quote(\"#define SCRIPT_E_PROPAGATE 0x80020102\")\n\n[\nobject,\nuuid(EAE1BA61-A4ED-11cf-8F20-00805F2CD064),\npointer_default(unique)\n]\ninterface IActiveScriptError : IUnknown\n{\n    HRESULT GetExceptionInfo(\n            [out] EXCEPINFO *pexcepinfo\n    );\n    \n    HRESULT GetSourcePosition(\n            [out] DWORD *pdwSourceContext,\n            [out] ULONG *pulLineNumber,\n            [out] LONG *plCharacterPosition\n    );\n    \n    HRESULT GetSourceLineText(\n            [out] BSTR *pbstrSourceLine\n    );\n}\n\n[\nobject,\nuuid(DB01A1E3-A42B-11cf-8F20-00805F2CD064),\npointer_default(unique)\n]\ninterface IActiveScriptSite : IUnknown\n{\n    HRESULT GetLCID(\n            [out] LCID *plcid);\n    \n    HRESULT GetItemInfo(\n            [in] LPCOLESTR pstrName,\n            [in] DWORD dwReturnMask,\n            [out] IUnknown **ppiunkItem,\n            [out] ITypeInfo **ppti\n    );\n    \n    HRESULT GetDocVersionString(\n            [out] BSTR *pbstrVersion\n    );\n    \n    HRESULT OnScriptTerminate(\n            [in] const VARIANT *pvarResult,\n            [in] const EXCEPINFO *pexcepinfo\n    );\n    \n    HRESULT OnStateChange(\n            [in] SCRIPTSTATE ssScriptState\n    );\n    \n    HRESULT OnScriptError(\n            [in] IActiveScriptError *pscripterror\n    );\n    \n    HRESULT OnEnterScript(void);\n    \n    HRESULT OnLeaveScript(void);\n}\n\ncpp_quote(\"typedef IActiveScriptSite *PIActiveScriptSite;\")\n\n[\nobject,\nuuid(D10F6761-83E9-11cf-8F20-00805F2CD064),\npointer_default(unique)\n]\ninterface IActiveScriptSiteWindow : IUnknown\n{\n    HRESULT GetWindow(\n            [out] HWND *phwnd\n    );\n\n    HRESULT EnableModeless(\n            [in] BOOL fEnable\n    );\n}\n\n[\n    object,\n    uuid(aedae97e-d7ee-4796-b960-7f092ae844ab),\n    pointer_default(unique)\n]\ninterface IActiveScriptSiteUIControl : IUnknown\n{\n    HRESULT GetUIBehavior(\n            [in]  SCRIPTUICITEM UicItem,\n            [out] SCRIPTUICHANDLING *pUicHandling);\n}\n\n[\nobject,\nuuid(539698A0-CDCA-11CF-A5EB-00AA0047A063),\npointer_default(unique)\n]\ninterface IActiveScriptSiteInterruptPoll : IUnknown\n{\n    HRESULT QueryContinue();\n}\n\n[\nobject,\nuuid(BB1A2AE1-A4F9-11cf-8F20-00805F2CD064),\npointer_default(unique)\n]\ninterface IActiveScript : IUnknown\n{\n    HRESULT SetScriptSite(\n            [in] IActiveScriptSite *pass\n    );\n\n    HRESULT GetScriptSite(\n            [in] REFIID riid,\n            [out, iid_is(riid)] void **ppvObject\n    );\n\n    HRESULT SetScriptState(\n            [in] SCRIPTSTATE ss\n    );\n\n    HRESULT GetScriptState(\n            [out] SCRIPTSTATE *pssState\n    );\n\n    HRESULT Close(void);\n\n    HRESULT AddNamedItem(\n            [in] LPCOLESTR pstrName,\n            [in] DWORD dwFlags\n    );\n\n    HRESULT AddTypeLib(\n            [in] REFGUID rguidTypeLib,\n            [in] DWORD dwMajor,\n            [in] DWORD dwMinor,\n            [in] DWORD dwFlags\n    );\n\n    HRESULT GetScriptDispatch(\n            [in] LPCOLESTR pstrItemName,\n            [out] IDispatch **ppdisp\n    );\n\n    HRESULT GetCurrentScriptThreadID(\n            [out] SCRIPTTHREADID *pstidThread\n    );\n\n    HRESULT GetScriptThreadID(\n            [in] DWORD dwWin32ThreadId,\n            [out] SCRIPTTHREADID *pstidThread\n    );\n\n    HRESULT GetScriptThreadState(\n            [in] SCRIPTTHREADID stidThread,\n            [out] SCRIPTTHREADSTATE *pstsState\n    );\n\n    HRESULT InterruptScriptThread(\n            [in] SCRIPTTHREADID stidThread,\n            [in] const EXCEPINFO *pexcepinfo,\n            [in] DWORD dwFlags\n    );\n\n    HRESULT Clone(\n            [out] IActiveScript **ppscript\n    );\n}\n\ncpp_quote(\"typedef IActiveScript *PIActiveScript;\")\n\n[\nobject,\nuuid(BB1A2AE2-A4F9-11cf-8F20-00805F2CD064),\npointer_default(unique)\n]\ninterface IActiveScriptParse32 : IUnknown\n{\n    HRESULT InitNew(void);\n\n    HRESULT AddScriptlet(\n            [in] LPCOLESTR pstrDefaultName,\n            [in] LPCOLESTR pstrCode,\n            [in] LPCOLESTR pstrItemName,\n            [in] LPCOLESTR pstrSubItemName,\n            [in] LPCOLESTR pstrEventName,\n            [in] LPCOLESTR pstrDelimiter,\n            [in] DWORD dwSourceContextCookie,\n            [in] ULONG ulStartingLineNumber,\n            [in] DWORD dwFlags,\n            [out] BSTR *pbstrName,\n            [out] EXCEPINFO *pexcepinfo\n    );\n\n    HRESULT ParseScriptText(\n            [in] LPCOLESTR pstrCode,\n            [in] LPCOLESTR pstrItemName,\n            [in] IUnknown *punkContext,\n            [in] LPCOLESTR pstrDelimiter,\n            [in] DWORD dwSourceContextCookie,\n            [in] ULONG ulStartingLineNumber,\n            [in] DWORD dwFlags,\n            [out] VARIANT *pvarResult,\n            [out] EXCEPINFO *pexcepinfo\n    );\n}\n\n[\n   object,\n   uuid(c7ef7658-e1ee-480e-97ea-d52cb4d76d17),\n   pointer_default(unique)\n]\ninterface IActiveScriptParse64 : IUnknown\n{\n    HRESULT InitNew(void);\n\n    HRESULT AddScriptlet(\n            [in] LPCOLESTR pstrDefaultName,\n            [in] LPCOLESTR pstrCode,\n            [in] LPCOLESTR pstrItemName,\n            [in] LPCOLESTR pstrSubItemName,\n            [in] LPCOLESTR pstrEventName,\n            [in] LPCOLESTR pstrDelimiter,\n            [in] DWORDLONG dwSourceContextCookie,\n            [in] ULONG ulStartingLineNumber,\n            [in] DWORD dwFlags,\n            [out] BSTR *pbstrName,\n            [out] EXCEPINFO *pexcepinfo\n    );\n\n    HRESULT ParseScriptText(\n            [in] LPCOLESTR pstrCode,\n            [in] LPCOLESTR pstrItemName,\n            [in] IUnknown *punkContext,\n            [in] LPCOLESTR pstrDelimiter,\n            [in] DWORDLONG dwSourceContextCookie,\n            [in] ULONG ulStartingLineNumber,\n            [in] DWORD dwFlags,\n            [out] VARIANT *pvarResult,\n            [out] EXCEPINFO *pexcepinfo\n    );\n}\n\ncpp_quote(\"#ifdef _WIN64\")\ncpp_quote(\"#define IActiveScriptParse IActiveScriptParse64\")\ncpp_quote(\"#define IID_IActiveScriptParse IID_IActiveScriptParse64\")\ncpp_quote(\"#else\")\ncpp_quote(\"#define IActiveScriptParse IActiveScriptParse32\")\ncpp_quote(\"#define IID_IActiveScriptParse IID_IActiveScriptParse32\")\ncpp_quote(\"#endif\")\n\ncpp_quote(\"typedef IActiveScriptParse *PIActiveScriptParse;\")\n\n[\nobject,\nuuid(1CFF0050-6FDD-11d0-9328-00A0C90DCAA9),\npointer_default(unique)\n]\ninterface IActiveScriptParseProcedureOld32 : IUnknown\n{\n    HRESULT ParseProcedureText(\n            [in] LPCOLESTR pstrCode,\n            [in] LPCOLESTR pstrFormalParams,\n            [in] LPCOLESTR pstrItemName,\n            [in] IUnknown *punkContext,\n            [in] LPCOLESTR pstrDelimiter,\n            [in] DWORD dwSourceContextCookie,\n            [in] ULONG ulStartingLineNumber,\n            [in] DWORD dwFlags,\n            [out] IDispatch **ppdisp\n    );\n}\n\n[\n    object,\n    uuid(21f57128-08c9-4638-ba12-22d15d88dc5c),\n    pointer_default(unique)\n]\ninterface IActiveScriptParseProcedureOld64 : IUnknown\n{\n    HRESULT ParseProcedureText(\n            [in] LPCOLESTR pstrCode,\n            [in] LPCOLESTR pstrFormalParams,\n            [in] LPCOLESTR pstrItemName,\n            [in] IUnknown *punkContext,\n            [in] LPCOLESTR pstrDelimiter,\n            [in] DWORDLONG dwSourceContextCookie,\n            [in] ULONG ulStartingLineNumber,\n            [in] DWORD dwFlags,\n            [out] IDispatch **ppdisp\n    );\n}\n\ncpp_quote(\"#ifdef _WIN64\")\ncpp_quote(\"#define IActiveScriptParseProcedureOld IActiveScriptParseProcedureOld64\")\ncpp_quote(\"#define IID_IActiveScriptParseProcedureOld IID_IActiveScriptParseProcedureOld64\")\ncpp_quote(\"#else\")\ncpp_quote(\"#define IActiveScriptParseProcedureOld IActiveScriptParseProcedureOld32\")\ncpp_quote(\"#define IID_IActiveScriptParseProcedureOld IID_IActiveScriptParseProcedureOld32\")\ncpp_quote(\"#endif\")\n\n[\nobject,\nuuid(AA5B6A80-B834-11d0-932F-00A0C90DCAA9),\npointer_default(unique)\n]\ninterface IActiveScriptParseProcedure32 : IUnknown\n{\n    HRESULT ParseProcedureText(\n            [in] LPCOLESTR pstrCode,\n            [in] LPCOLESTR pstrFormalParams,\n            [in] LPCOLESTR pstrProcedureName,\n            [in] LPCOLESTR pstrItemName,\n            [in] IUnknown *punkContext,\n            [in] LPCOLESTR pstrDelimiter,\n            [in] DWORD dwSourceContextCookie,\n            [in] ULONG ulStartingLineNumber,\n            [in] DWORD dwFlags,\n            [out] IDispatch **ppdisp\n    );\n}\n\n[\n    object,\n    uuid(c64713b6-e029-4cc5-9200-438b72890b6a),\n    pointer_default(unique)\n]\ninterface IActiveScriptParseProcedure64 : IUnknown\n{\n    HRESULT ParseProcedureText(\n            [in] LPCOLESTR pstrCode,\n            [in] LPCOLESTR pstrFormalParams,\n            [in] LPCOLESTR pstrProcedureName,\n            [in] LPCOLESTR pstrItemName,\n            [in] IUnknown *punkContext,\n            [in] LPCOLESTR pstrDelimiter,\n            [in] DWORDLONG dwSourceContextCookie,\n            [in] ULONG ulStartingLineNumber,\n            [in] DWORD dwFlags,\n            [out] IDispatch **ppdisp\n    );\n}\n\ncpp_quote(\"#ifdef _WIN64\")\ncpp_quote(\"#define IActiveScriptParseProcedure IActiveScriptParseProcedure64\")\ncpp_quote(\"#define IID_IActiveScriptParseProcedure IID_IActiveScriptParseProcedure64\")\ncpp_quote(\"#else\")\ncpp_quote(\"#define IActiveScriptParseProcedure IActiveScriptParseProcedure32\")\ncpp_quote(\"#define IID_IActiveScriptParseProcedure IID_IActiveScriptParseProcedure32\")\ncpp_quote(\"#endif\")\n\n[\n    object,\n    uuid(71ee5b20-fb04-11d1-b3a8-00a0c911e8b2),\n    pointer_default(unique)\n]\ninterface IActiveScriptParseProcedure2_32 : IActiveScriptParseProcedure32\n{\n}\n\n[\n    object,\n    uuid(fe7c4271-210c-448d-9f54-76dab7047b28),\n    pointer_default(unique)\n]\ninterface IActiveScriptParseProcedure2_64 : IActiveScriptParseProcedure64\n{\n}\n\ncpp_quote(\"#ifdef _WIN64\")\ncpp_quote(\"#define IActiveScriptParseProcedure2 IActiveScriptParseProcedure2_64\")\ncpp_quote(\"#define IID_IActiveScriptParseProcedure2 IID_IActiveScriptParseProcedure2_64\")\ncpp_quote(\"#else\")\ncpp_quote(\"#define IActiveScriptParseProcedure2 IActiveScriptParseProcedure2_32\")\ncpp_quote(\"#define IID_IActiveScriptParseProcedure2 IID_IActiveScriptParseProcedure2_32\")\ncpp_quote(\"#endif\")\n\n[\nobject,\nuuid(63CDBCB0-C1B1-11d0-9336-00A0C90DCAA9),\npointer_default(unique)\n]\ninterface IBindEventHandler : IUnknown\n{\n    HRESULT BindHandler(\n            [in] LPCOLESTR pstrEvent,\n            [in] IDispatch *pdisp\n    );\n}\n\n[\nobject,\nuuid(B8DA6310-E19B-11d0-933C-00A0C90DCAA9),\npointer_default(unique)\n]\ninterface IActiveScriptStats : IUnknown\n{\n    HRESULT GetStat(\n            [in] DWORD stid,\n            [out] ULONG *pluHi,\n            [out] ULONG *pluLo\n    );\n\n    HRESULT GetStatEx(\n            [in] REFGUID guid,\n            [out] ULONG *pluHi,\n            [out] ULONG *pluLo\n    );\n\n    HRESULT ResetStats(void);\n}\n\n[\n    object,\n    uuid(4954e0d0-fbc7-11d1-8410-006008c3fbfc),\n    pointer_default(unique)\n]\ninterface IActiveScriptProperty : IUnknown\n{\n    HRESULT GetProperty(\n            [in] DWORD dwProperty,\n            [in] VARIANT *pvarIndex,\n            [out] VARIANT *pvarValue);\n\n    HRESULT SetProperty(\n            [in] DWORD dwProperty,\n            [in] VARIANT *pvarIndex,\n            [in] VARIANT *pvarValue);\n}\n\n[\n    object,\n    uuid(6aa2c4a0-2b53-11d4-a2a0-00104bd35090),\n    pointer_default(unique)\n]\ninterface IActiveScriptGarbageCollector : IUnknown\n{\n    HRESULT CollectGarbage(\n            [in] SCRIPTGCTYPE gctype);\n}\n"
  },
  {
    "path": "wine/windows/adshlp.h",
    "content": "/*\n * Copyright (C) 2005 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_ADSHLP_H\n#define __WINE_ADSHLP_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nHRESULT WINAPI ADsBuildEnumerator(IADsContainer*,IEnumVARIANT**);\nHRESULT WINAPI ADsEnumerateNext(IEnumVARIANT*,ULONG,VARIANT*,ULONG*);\nHRESULT WINAPI ADsGetObject(LPCWSTR,REFIID,VOID**);\nHRESULT WINAPI ADsOpenObject(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,REFIID,VOID**);\nBOOL    WINAPI FreeADsMem(LPVOID);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/advpub.h",
    "content": "/*\n * Copyright 2004 Huw D M Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __WINE_ADVPUB_H\n#define __WINE_ADVPUB_H\n\n#include <setupapi.h>\n#include <cfgmgr32.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef S_ASYNCHRONOUS\n#define S_ASYNCHRONOUS  _HRESULT_TYPEDEF_(0x401E8)\n#endif\n\ntypedef struct _CabInfoA\n{\n    LPSTR  pszCab;\n    LPSTR  pszInf;\n    LPSTR  pszSection;\n    CHAR   szSrcPath[MAX_PATH];\n    DWORD  dwFlags;\n} CABINFOA, *PCABINFOA;\n\ntypedef struct _CabInfoW\n{\n    LPWSTR pszCab;\n    LPWSTR pszInf;\n    LPWSTR pszSection;\n    WCHAR  szSrcPath[MAX_PATH];\n    DWORD  dwFlags;\n} CABINFOW, *PCABINFOW;\n\nDECL_WINELIB_TYPE_AW(CABINFO)\nDECL_WINELIB_TYPE_AW(PCABINFO)\n\ntypedef struct _PERUSERSECTIONA\n{\n    CHAR  szGUID[39 /*MAX_GUID_STRING_LEN*/ + 20];\n    CHAR  szDispName[128];\n    CHAR  szLocale[10];\n    CHAR  szStub[MAX_PATH * 4];\n    CHAR  szVersion[32];\n    CHAR  szCompID[128];\n    DWORD dwIsInstalled;\n    BOOL  bRollback;\n} PERUSERSECTIONA, *PPERUSERSECTIONA;\n\ntypedef struct _PERUSERSECTIONW\n{\n    WCHAR szGUID[39 /*MAX_GUID_STRING_LEN*/ + 20];\n    WCHAR szDispName[128];\n    WCHAR szLocale[10];\n    WCHAR szStub[MAX_PATH * 4];\n    WCHAR szVersion[32];\n    WCHAR szCompID[128];\n    DWORD dwIsInstalled;\n    BOOL  bRollback;\n} PERUSERSECTIONW, *PPERUSERSECTIONW;\n\nDECL_WINELIB_TYPE_AW(PERUSERSECTION)\nDECL_WINELIB_TYPE_AW(PPERUSERSECTION)\n\ntypedef struct _StrEntryA\n{\n    LPSTR pszName;\n    LPSTR pszValue;\n} STRENTRYA, *LPSTRENTRYA;\n\ntypedef struct _StrEntryW\n{\n    LPWSTR pszName;\n    LPWSTR pszValue;\n} STRENTRYW, *LPSTRENTRYW;\n\nDECL_WINELIB_TYPE_AW(STRENTRY)\nDECL_WINELIB_TYPE_AW(LPSTRENTRY)\n\ntypedef struct _StrTableA\n{\n    DWORD cEntries;\n    STRENTRYA* pse;\n} STRTABLEA, *LPSTRTABLEA;\ntypedef const STRTABLEA CSTRTABLEA, *LPCSTRTABLEA;\n\ntypedef struct _StrTableW\n{\n    DWORD cEntries;\n    STRENTRYW* pse;\n} STRTABLEW, *LPSTRTABLEW;\ntypedef const STRTABLEW CSTRTABLEW, *LPCSTRTABLEW;\n\nDECL_WINELIB_TYPE_AW(STRTABLE)\nDECL_WINELIB_TYPE_AW(CSTRTABLE)\nDECL_WINELIB_TYPE_AW(LPSTRTABLE)\nDECL_WINELIB_TYPE_AW(LPCSTRTABLE)\n\n/* Flags for AddDelBackupEntry */\n#define AADBE_ADD_ENTRY             0x01\n#define AADBE_DEL_ENTRY             0x02\n\n/* Flags for AdvInstallFile */\n#define AIF_WARNIFSKIP              0x00000001\n#define AIF_NOSKIP                  0x00000002\n#define AIF_NOVERSIONCHECK          0x00000004\n#define AIF_FORCE_FILE_IN_USE       0x00000008\n#define AIF_NOOVERWRITE             0x00000010\n#define AIF_NO_VERSION_DIALOG       0x00000020\n#define AIF_REPLACEONLY             0x00000400\n#define AIF_NOLANGUAGECHECK         0x10000000\n#define AIF_QUIET                   0x20000000\n\n/* Flags for RunSetupCommand */\n#define RSC_FLAG_INF                0x00000001\n#define RSC_FLAG_SKIPDISKSPACECHECK 0x00000002\n#define RSC_FLAG_QUIET              0x00000004\n#define RSC_FLAG_NGCONV             0x00000008\n#define RSC_FLAG_UPDHLPDLLS         0x00000010\n#define RSC_FLAG_DELAYREGISTEROCX   0x00000200\n#define RSC_FLAG_SETUPAPI           0x00000400\n\n/* Flags for LaunchINFSection */\n#define LIS_QUIET                   0x00000001\n#define LIS_NOGRPCONV               0x00000002\n\n/* Flags for DelNode */\n#define ADN_DEL_IF_EMPTY            0x00000001\n#define ADN_DONT_DEL_SUBDIRS        0x00000002\n#define ADN_DONT_DEL_DIR            0x00000004\n#define ADN_DEL_UNC_PATHS           0x00000008\n\n/* Flags for RegRestoreAll, RegSaveRestore, RegSaveRestoreOnINF */\n#define  IE4_RESTORE                0x00000001\n#define  IE4_BACKNEW                0x00000002\n#define  IE4_NODELETENEW            0x00000004\n#define  IE4_NOMESSAGES             0x00000008\n#define  IE4_NOPROGRESS             0x00000010\n#define  IE4_NOENUMKEY              0x00000020\n#define  IE4_NO_CRC_MAPPING         0x00000040\n#define  IE4_REGSECTION             0x00000080\n#define  IE4_FRDOALL                0x00000100\n#define  IE4_UPDREFCNT              0x00000200\n#define  IE4_USEREFCNT              0x00000400\n#define  IE4_EXTRAINCREFCNT         0x00000800\n\n/* Flags for file save and restore functions */\n#define  AFSR_RESTORE               IE4_RESTORE\n#define  AFSR_BACKNEW               IE4_BACKNEW\n#define  AFSR_NODELETENEW           IE4_NODELETENEW\n#define  AFSR_NOMESSAGES            IE4_NOMESSAGES\n#define  AFSR_NOPROGRESS            IE4_NOPROGRESS\n#define  AFSR_UPDREFCNT             IE4_UPDREFCNT\n#define  AFSR_USEREFCNT             IE4_USEREFCNT\n#define  AFSR_EXTRAINCREFCNT        IE4_EXTRAINCREFCNT\n\nHRESULT WINAPI AddDelBackupEntryA(LPCSTR lpcszFileList, LPCSTR lpcszBackupDir,\n     LPCSTR lpcszBaseName, DWORD dwFlags);\nHRESULT WINAPI AddDelBackupEntryW(LPCWSTR lpcszFileList, LPCWSTR lpcszBackupDir,\n     LPCWSTR lpcszBaseName, DWORD dwFlags);\n#define AddDelBackupEntry WINELIB_NAME_AW(AddDelBackupEntry)\nHRESULT WINAPI AdvInstallFileA(HWND hwnd, LPCSTR lpszSourceDir,\n     LPCSTR lpszSourceFile, LPCSTR lpszDestDir, LPCSTR lpszDestFile,\n     DWORD dwFlags, DWORD dwReserved);\nHRESULT WINAPI AdvInstallFileW(HWND hwnd, LPCWSTR lpszSourceDir,\n     LPCWSTR lpszSourceFile, LPCWSTR lpszDestDir, LPCWSTR lpszDestFile,\n     DWORD dwFlags, DWORD dwReserved);\n#define AdvInstallFile WINELIB_NAME_AW(AdvInstallFile)\nHRESULT WINAPI CloseINFEngine(HINF hInf);\nHRESULT WINAPI DelNodeA(LPCSTR pszFileOrDirName, DWORD dwFlags);\nHRESULT WINAPI DelNodeW(LPCWSTR pszFileOrDirName, DWORD dwFlags);\n#define DelNode WINELIB_NAME_AW(DelNode)\nHRESULT WINAPI DelNodeRunDLL32A(HWND,HINSTANCE,LPSTR,INT);\nHRESULT WINAPI DelNodeRunDLL32W(HWND,HINSTANCE,LPWSTR,INT);\n#define DelNodeRunDLL32 WINELIB_NAME_AW(DelNodeRunDLL32)\nHRESULT WINAPI ExecuteCabA( HWND hwnd, CABINFOA* pCab, LPVOID pReserved );\nHRESULT WINAPI ExecuteCabW( HWND hwnd, CABINFOW* pCab, LPVOID pReserved );\n#define ExecuteCab WINELIB_NAME_AW(ExecuteCab)\nHRESULT WINAPI ExtractFilesA(LPCSTR,LPCSTR,DWORD,LPCSTR,LPVOID,DWORD);\nHRESULT WINAPI ExtractFilesW(LPCWSTR,LPCWSTR,DWORD,LPCWSTR,LPVOID,DWORD);\n#define ExtractFiles WINELIB_NAME_AW(ExtractFiles)\nHRESULT WINAPI FileSaveMarkNotExistA(LPSTR pszFileList, LPSTR pszDir, LPSTR pszBaseName);\nHRESULT WINAPI FileSaveMarkNotExistW(LPWSTR pszFileList, LPWSTR pszDir, LPWSTR pszBaseName);\n#define FileSaveMarkNotExist WINELIB_NAME_AW(FileSaveMarkNotExist)\nHRESULT WINAPI FileSaveRestoreA(HWND hDlg, LPSTR pszFileList, LPSTR pszDir,\n     LPSTR pszBaseName, DWORD dwFlags);\nHRESULT WINAPI FileSaveRestoreW(HWND hDlg, LPWSTR pszFileList, LPWSTR pszDir,\n     LPWSTR pszBaseName, DWORD dwFlags);\n#define FileSaveRestore WINELIB_NAME_AW(FileSaveRestore)\nHRESULT WINAPI FileSaveRestoreOnINFA(HWND hWnd, LPCSTR pszTitle, LPCSTR pszINF,\n     LPCSTR pszSection, LPCSTR pszBackupDir, LPCSTR pszBaseBackupFile, DWORD dwFlags);\nHRESULT WINAPI FileSaveRestoreOnINFW(HWND hWnd, LPCWSTR pszTitle, LPCWSTR pszINF,\n     LPCWSTR pszSection, LPCWSTR pszBackupDir, LPCWSTR pszBaseBackupFile, DWORD dwFlags);\n#define FileSaveRestoreOnINF WINELIB_NAME_AW(FileSaveRestoreOnINF)\nHRESULT WINAPI GetVersionFromFileA(LPCSTR lpszFilename, LPDWORD pdwMSVer, LPDWORD pdwLSVer, BOOL bVersion);\nHRESULT WINAPI GetVersionFromFileW(LPCWSTR lpszFilename, LPDWORD pdwMSVer, LPDWORD pdwLSVer, BOOL bVersion);\n#define GetVersionFromFile WINELIB_NAME_AW(GetVersionFromFile)\nHRESULT WINAPI GetVersionFromFileExA(LPCSTR lpszFilename, LPDWORD pdwMSVer, LPDWORD pdwLSVer, BOOL bVersion);\nHRESULT WINAPI GetVersionFromFileExW(LPCWSTR lpszFilename, LPDWORD pdwMSVer, LPDWORD pdwLSVer, BOOL bVersion);\n#define GetVersionFromFileEx WINELIB_NAME_AW(GetVersionFromFileEx)\nBOOL WINAPI IsNTAdmin(DWORD,LPDWORD);\nINT WINAPI LaunchINFSectionA(HWND,HINSTANCE,LPSTR,INT);\nINT WINAPI LaunchINFSectionW(HWND,HINSTANCE,LPWSTR,INT);\n#define LaunchINFSection WINELIB_NAME_AW(LaunchINFSection)\nHRESULT WINAPI LaunchINFSectionExA(HWND,HINSTANCE,LPSTR,INT);\nHRESULT WINAPI LaunchINFSectionExW(HWND,HINSTANCE,LPWSTR,INT);\n#define LaunchINFSectionEx WINELIB_NAME_AW(LaunchINFSectionEx)\nDWORD WINAPI NeedRebootInit(VOID);\nBOOL WINAPI NeedReboot(DWORD dwRebootCheck);\nHRESULT WINAPI OpenINFEngineA(LPCSTR pszInfFilename, LPCSTR pszInstallSection,\n     DWORD dwFlags, HINF *phInf, PVOID pvReserved);\nHRESULT WINAPI OpenINFEngineW(LPCWSTR pszInfFilename, LPCWSTR pszInstallSection,\n     DWORD dwFlags, HINF *phInf, PVOID pvReserved);\n#define OpenINFEngine WINELIB_NAME_AW(OpenINFEngine)\nHRESULT WINAPI RebootCheckOnInstallA(HWND hWnd, LPCSTR pszINF, LPCSTR pszSec, DWORD dwReserved);\nHRESULT WINAPI RebootCheckOnInstallW(HWND hWnd, LPCWSTR pszINF, LPCWSTR pszSec, DWORD dwReserved);\n#define RebootCheckOnInstall WINELIB_NAME_AW(RebootCheckOnInstall)\nHRESULT WINAPI RegInstallA(HMODULE hm, LPCSTR pszSection, const STRTABLEA* pstTable);\nHRESULT WINAPI RegInstallW(HMODULE hm, LPCWSTR pszSection, const STRTABLEW* pstTable);\n#define RegInstall WINELIB_NAME_AW(RegInstall)\nHRESULT WINAPI RegRestoreAllA(HWND hWnd, LPSTR pszTitleString, HKEY hkBackupKey);\nHRESULT WINAPI RegRestoreAllW(HWND hWnd, LPWSTR pszTitleString, HKEY hkBackupKey);\n#define RegRestoreAll WINELIB_NAME_AW(RegRestoreAll)\nHRESULT WINAPI RegSaveRestoreA(HWND hWnd, LPCSTR pszTitleString, HKEY hkBackupKey,\n     LPCSTR pcszRootKey, LPCSTR pcszSubKey, LPCSTR pcszValueName, DWORD dwFlags);\nHRESULT WINAPI RegSaveRestoreW(HWND hWnd, LPCWSTR pszTitleString, HKEY hkBackupKey,\n     LPCWSTR pcszRootKey, LPCWSTR pcszSubKey, LPCWSTR pcszValueName, DWORD dwFlags);\n#define RegSaveRestore WINELIB_NAME_AW(RegSaveRestore)\nHRESULT WINAPI RegSaveRestoreOnINFA(HWND hWnd, LPCSTR pszTitle, LPCSTR pszINF,\n     LPCSTR pszSection, HKEY hHKLMBackKey, HKEY hHKCUBackKey, DWORD dwFlags);\nHRESULT WINAPI RegSaveRestoreOnINFW(HWND hWnd, LPCWSTR pszTitle, LPCWSTR pszINF,\n     LPCWSTR pszSection, HKEY hHKLMBackKey, HKEY hHKCUBackKey, DWORD dwFlags);\n#define RegSaveRestoreOnINF WINELIB_NAME_AW(RegSaveRestoreOnINF)\nHRESULT WINAPI RunSetupCommandA(HWND hWnd,\n     LPCSTR szCmdName, LPCSTR szInfSection, LPCSTR szDir, LPCSTR lpszTitle,\n     HANDLE *phEXE, DWORD dwFlags, LPVOID pvReserved);\nHRESULT WINAPI RunSetupCommandW(HWND hWnd,\n     LPCWSTR szCmdName, LPCWSTR szInfSection, LPCWSTR szDir, LPCWSTR lpszTitle,\n     HANDLE *phEXE, DWORD dwFlags, LPVOID pvReserved);\n#define RunSetupCommand WINELIB_NAME_AW(RunSetupCommand)\nHRESULT WINAPI SetPerUserSecValuesA(PERUSERSECTIONA* pPerUser);\nHRESULT WINAPI SetPerUserSecValuesW(PERUSERSECTIONW* pPerUser);\n#define SetPerUserSecValues WINELIB_NAME_AW(SetPerUserSecValues)\nHRESULT WINAPI TranslateInfStringA(LPCSTR pszInfFilename, LPCSTR pszInstallSection,\n     LPCSTR pszTranslateSection, LPCSTR pszTranslateKey, LPSTR pszBuffer,\n     DWORD dwBufferSize, PDWORD pdwRequiredSize, PVOID pvReserved);\nHRESULT WINAPI TranslateInfStringW(LPCWSTR pszInfFilename, LPCWSTR pszInstallSection,\n     LPCWSTR pszTranslateSection, LPCWSTR pszTranslateKey, LPWSTR pszBuffer,\n     DWORD dwBufferSize, PDWORD pdwRequiredSize, PVOID pvReserved);\n#define TranslateInfString WINELIB_NAME_AW(TranslateInfString)\nHRESULT WINAPI TranslateInfStringExA(HINF hInf, LPCSTR pszInfFilename,\n    LPCSTR pszTranslateSection, LPCSTR pszTranslateKey, LPSTR pszBuffer,\n    DWORD dwBufferSize, PDWORD pdwRequiredSize, PVOID pvReserved);\nHRESULT WINAPI TranslateInfStringExW(HINF hInf, LPCWSTR pszInfFilename,\n    LPCWSTR pszTranslateSection, LPCWSTR pszTranslateKey, LPWSTR pszBuffer,\n    DWORD dwBufferSize, PDWORD pdwRequiredSize, PVOID pvReserved);\n#define TranslateInfStringEx WINELIB_NAME_AW(TranslateInfStringEx)\nHRESULT WINAPI UserInstStubWrapperA(HWND hWnd, HINSTANCE hInstance, LPSTR pszParms, INT nShow);\nHRESULT WINAPI UserInstStubWrapperW(HWND hWnd, HINSTANCE hInstance, LPWSTR pszParms, INT nShow);\n#define UserInstStubWrapper WINELIB_NAME_AW(UserInstStubWrapper)\nHRESULT WINAPI UserUnInstStubWrapperA(HWND hWnd, HINSTANCE hInstance, LPSTR pszParms, INT nShow);\nHRESULT WINAPI UserUnInstStubWrapperW(HWND hWnd, HINSTANCE hInstance, LPWSTR pszParms, INT nShow);\n#define UserUnInstStubWrapper WINELIB_NAME_AW(UserUnInstStubWrapper)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_ADVPUB_H */\n"
  },
  {
    "path": "wine/windows/af_irda.h",
    "content": "/*\n * Copyright 2009 Juan Lang\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef AF_IRDA_H\n#define AF_IRDA_H\n\ntypedef struct _IRDA_DEVICE_INFO\n{\n    UCHAR irdaDeviceID[4];\n    char  irdaDeviceName[22];\n    UCHAR irdaDeviceHints1;\n    UCHAR irdaDeviceHints2;\n    UCHAR irdaCharSet;\n} IRDA_DEVICE_INFO, *PIRDA_DEVICE_INFO;\n\ntypedef struct _DEVICELIST\n{\n    ULONG            numDevice;\n    IRDA_DEVICE_INFO Device[1];\n} DEVICELIST, *PDEVICELIST;\n\ntypedef struct _SOCKADDR_IRDA\n{\n    USHORT irdaAddressFamily;\n    UCHAR  irdaDeviceID[4];\n    char   irdaServiceName[25];\n} SOCKADDR_IRDA, *PSOCKADDR_IRDA, *LPSOCKADDR_IRDA;\n\n#ifdef USE_WS_PREFIX\n\n/* Socket levels and options */\n#define WS_SOL_IRLMP 0xff\n\n#define WS_IRLMP_ENUMDEVICES    ((ULONG)0x10)\n#define WS_IRLMP_IAS_SET        ((ULONG)0x11)\n#define WS_IRLMP_IAS_QUERY      ((ULONG)0x12)\n#define WS_IRLMP_SEND_PDU_LEN   ((ULONG)0x13)\n#define WS_IRLMP_EXCLUSIVE_MODE ((ULONG)0x14)\n#define WS_IRLMP_IRLPT_MODE     ((ULONG)0x15)\n#define WS_IRLMP_9WIRE_MODE     ((ULONG)0x16)\n#define WS_IRLMP_TINYTP_MODE    ((ULONG)0x17)\n#define WS_IRLMP_PARAMETERS     ((ULONG)0x18)\n#define WS_IRLMP_DISCOVER_MODE  ((ULONG)0x19)\n#define WS_IRLMP_SHARP_MODE     ((ULONG)0x20)\n\n#define WS_IAS_MAX_CLASSNAME    64\n#define WS_IAS_MAX_ATTRIBNAME   256\n\n#else\n\n/* Socket levels and options */\n#define SOL_IRLMP 0xff\n\n#define IRLMP_ENUMDEVICES    ((ULONG)0x10)\n#define IRLMP_IAS_SET        ((ULONG)0x11)\n#define IRLMP_IAS_QUERY      ((ULONG)0x12)\n#define IRLMP_SEND_PDU_LEN   ((ULONG)0x13)\n#define IRLMP_EXCLUSIVE_MODE ((ULONG)0x14)\n#define IRLMP_IRLPT_MODE     ((ULONG)0x15)\n#define IRLMP_9WIRE_MODE     ((ULONG)0x16)\n#define IRLMP_TINYTP_MODE    ((ULONG)0x17)\n#define IRLMP_PARAMETERS     ((ULONG)0x18)\n#define IRLMP_DISCOVER_MODE  ((ULONG)0x19)\n#define IRLMP_SHARP_MODE     ((ULONG)0x20)\n\n#define IAS_MAX_CLASSNAME    64\n#define IAS_MAX_ATTRIBNAME   256\n\n#endif\n\n#define IAS_MAX_OCTET_STRING 1024\n#define IAS_MAX_USER_STRING  256\n\n#define LmCharSetASCII      0x00\n#define LmCharSetISO_8859_1 0x01\n#define LmCharSetISO_8859_2 0x02\n#define LmCharSetISO_8859_3 0x03\n#define LmCharSetISO_8859_4 0x04\n#define LmCharSetISO_8859_5 0x05\n#define LmCharSetISO_8859_6 0x06\n#define LmCharSetISO_8859_7 0x07\n#define LmCharSetISO_8859_8 0x08\n#define LmCharSetISO_8859_9 0x09\n#define LmCharSetUNICODE    0xff\n\n#endif /* AF_IRDA_H */\n"
  },
  {
    "path": "wine/windows/amaudio.h",
    "content": "/*\n * Copyright (C) 2010 Maarten Lankhorst for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __AMAUDIO__\n#define __AMAUDIO__\n\n#include <mmsystem.h>\n#include <dsound.h>\n\n#undef INTERFACE\n#define INTERFACE IAMDirectSound\n\nDECLARE_INTERFACE_(IAMDirectSound,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IAMDirectSound methods ***/\n    STDMETHOD(GetDirectSoundInterface)(THIS_ IDirectSound **ds) PURE;\n    STDMETHOD(GetPrimaryBufferInterface)(THIS_ IDirectSoundBuffer **buf) PURE;\n    STDMETHOD(GetSecondaryBufferInterface)(THIS_ IDirectSoundBuffer **buf) PURE;\n    STDMETHOD(ReleaseDirectSoundInterface)(THIS_ IDirectSound *ds) PURE;\n    STDMETHOD(ReleasePrimaryBufferInterface)(THIS_ IDirectSoundBuffer *buf) PURE;\n    STDMETHOD(ReleaseSecondaryBufferInterface)(THIS_ IDirectSoundBuffer *buf) PURE;\n    STDMETHOD(SetFocusWindow)(THIS_ HWND hwnd, BOOL bgaudible) PURE;\n    STDMETHOD(GetFocusWindow)(THIS_ HWND *hwnd, BOOL *bgaudible) PURE;\n};\n#undef INTERFACE\n\n#endif\n"
  },
  {
    "path": "wine/windows/amstream.idl",
    "content": "/*\n * Copyright 2004 Christian Costa\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\nimport \"mmstream.idl\";\nimport \"strmif.idl\";\n\ncpp_quote(\"#include <ddraw.h>\")\ncpp_quote(\"#include <mmsystem.h>\")\ncpp_quote(\"#include <mmstream.h>\")\ncpp_quote(\"#include <ddstream.h>\")\ncpp_quote(\"#include <austream.h>\")\n\ncpp_quote(\"#if 0\")\ninterface IDirectDraw;\ninterface IDirectDrawSurface;\ncpp_quote(\"#endif\")\n\ninterface IAMMultiMediaStream;\ninterface IAMMediaStream;\ninterface IMediaStreamFilter;\ninterface IAMMediaTypeStream;\ninterface IAMMediaTypeSample;\n\nenum {\n\tAMMSF_NOGRAPHTHREAD      = 0x00000001\n};\n\nenum {\n\tAMMSF_ADDDEFAULTRENDERER = 0x00000001,\n\tAMMSF_CREATEPEER         = 0x00000002,\n\tAMMSF_STOPIFNOSAMPLES\t = 0x00000004,\n\tAMMSF_NOSTALL\t\t = 0x00000008\n};\n\nenum {\n\tAMMSF_RENDERTYPEMASK     = 0x00000003,\n\tAMMSF_RENDERTOEXISTING   = 0x00000000,\n\tAMMSF_RENDERALLSTREAMS   = 0x00000001,\n\tAMMSF_NORENDER           = 0x00000002,\n\tAMMSF_NOCLOCK            = 0x00000004,\n\tAMMSF_RUN                = 0x00000008\n};\n\n\ntypedef [v1_enum] enum {\n\tDisabled = 0,\n\tReadData = 1,\n\tRenderData = 2\n} OUTPUT_STATE;\n\n[\nobject,\nuuid(7DB01C96-C0C3-11d0-8FF1-00C04FD9189D),\ndual,\nhelpstring(\"IDirectShowStream Interface\"),\npointer_default(unique)\n]\ninterface IDirectShowStream : IDispatch\n{\n\t[propget, id(1), helpstring(\"property FileName\")] HRESULT FileName([out, retval] BSTR *pVal);\n\t[propput, id(1), helpstring(\"property FileName\")] HRESULT FileName([in] BSTR newVal);\n\t[propget, id(2), helpstring(\"property Video\")] HRESULT Video([out, retval] OUTPUT_STATE *pVal);\n\t[propput, id(2), helpstring(\"property Video\")] HRESULT Video([in] OUTPUT_STATE newVal);\n\t[propget, id(3), helpstring(\"property Audio\")] HRESULT Audio([out, retval] OUTPUT_STATE *pVal);\n\t[propput, id(3), helpstring(\"property Audio\")] HRESULT Audio([in] OUTPUT_STATE newVal);\n}\n\n[\nobject,\nuuid(BEBE595C-9A6F-11d0-8FDE-00C04FD9189D),\npointer_default(unique)\n]\ninterface IAMMultiMediaStream : IMultiMediaStream\n{\n\tHRESULT Initialize(\n\t\t[in] STREAM_TYPE StreamType,\n\t\t[in] DWORD dwFlags,\n\t\t[in] IGraphBuilder *pFilterGraph);\n\n\tHRESULT GetFilterGraph(\n\t\t[out] IGraphBuilder **ppGraphBuilder);\n\n\tHRESULT GetFilter(\n\t\t[out] IMediaStreamFilter **ppFilter);\n\n\tHRESULT AddMediaStream(\n\t\t[in] IUnknown *pStreamObject,\n\t\t[in] const MSPID *PurposeId,\n\t\t[in] DWORD dwFlags,\n\t\t[out] IMediaStream **ppNewStream);\n\n\tHRESULT OpenFile(\n\t\t[in] LPCWSTR pszFileName,\n\t\t[in] DWORD dwFlags);\n\n\tHRESULT OpenMoniker(\n\t\t[in] IBindCtx *pCtx,\n\t\t[in] IMoniker *pMoniker,\n\t\t[in] DWORD dwFlags);\n\n\tHRESULT Render(\n\t\t[in] DWORD dwFlags);\n}\n\n\n[\nobject,\nuuid(BEBE595D-9A6F-11d0-8FDE-00C04FD9189D),\npointer_default(unique)\n]\ninterface IAMMediaStream : IMediaStream\n{\n\tHRESULT Initialize(\n\t\t[in] IUnknown *pSourceObject,\n\t\t[in] DWORD dwFlags,\n\t\t[in] REFMSPID PurposeId,\n\t\t[in] const STREAM_TYPE StreamType);\n\n\tHRESULT SetState(\n\t\t[in] FILTER_STATE State);\n\n\tHRESULT JoinAMMultiMediaStream(\n\t\t[in] IAMMultiMediaStream *pAMMultiMediaStream);\n\n\tHRESULT JoinFilter(\n\t\t[in] IMediaStreamFilter *pMediaStreamFilter);\n\n\tHRESULT JoinFilterGraph(\n\t\t[in] IFilterGraph *pFilterGraph);\n}\n\n\n[\nobject,\nlocal,\nuuid(BEBE595E-9A6F-11d0-8FDE-00C04FD9189D),\npointer_default(unique)\n]\ninterface IMediaStreamFilter : IBaseFilter\n{\n\tHRESULT AddMediaStream(\n\t\t[in] IAMMediaStream *pAMMediaStream);\n\n\tHRESULT GetMediaStream(\n\t\t[in] REFMSPID idPurpose,\n\t\t[out] IMediaStream **ppMediaStream);\n\n\tHRESULT EnumMediaStreams(\n\t\t[in] long Index,\n\t\t[out] IMediaStream **ppMediaStream);\n\n\tHRESULT SupportSeeking(\n\t\t[in] BOOL bRenderer);\n\n\tHRESULT ReferenceTimeToStreamTime(\n\t\t[in] [out] REFERENCE_TIME *pTime);\n\n\tHRESULT GetCurrentStreamTime(\n\t\t[out] REFERENCE_TIME *pCurrentStreamTime);\n\n\tHRESULT WaitUntil(\n\t\t[in]  REFERENCE_TIME WaitStreamTime);\n\n\tHRESULT Flush(\n\t\t[in] BOOL bCancelEOS);\n\n\tHRESULT EndOfStream();\n}\n\n\n[\nobject,\nlocal,\nuuid(AB6B4AFC-F6E4-11d0-900D-00C04FD9189D),\npointer_default(unique)\n]\ninterface IDirectDrawMediaSampleAllocator : IUnknown\n{\n\tHRESULT GetDirectDraw(IDirectDraw **ppDirectDraw);\n}\n\n\n[\nobject,\nlocal,\nuuid(AB6B4AFE-F6E4-11d0-900D-00C04FD9189D),\npointer_default(unique)\n]\ninterface IDirectDrawMediaSample : IUnknown\n{\n\tHRESULT GetSurfaceAndReleaseLock(\n\t\t[out] IDirectDrawSurface **ppDirectDrawSurface,\n\t\t[out] RECT * pRect);\n\n\tHRESULT LockMediaSamplePointer(void);\n}\n\n\n[\nobject,\nlocal,\nuuid(AB6B4AFA-F6E4-11d0-900D-00C04FD9189D),\npointer_default(unique)\n]\n\ninterface IAMMediaTypeStream : IMediaStream\n{\n\tHRESULT GetFormat(\n\t\t[out] AM_MEDIA_TYPE * pMediaType,\n\t\t[in] DWORD dwFlags);\n\n\tHRESULT SetFormat(\n\t\t[in] AM_MEDIA_TYPE * pMediaType,\n\t\t[in] DWORD dwFlags);\n\n\tHRESULT CreateSample(\n\t\t[in] long lSampleSize,\n\t\t[in] BYTE * pbBuffer,\n\t\t[in] DWORD dwFlags,\n\t\t[in] IUnknown *pUnkOuter,\n\t\t[out] IAMMediaTypeSample ** ppAMMediaTypeSample);\n\n\tHRESULT GetStreamAllocatorRequirements(\n\t\t[out] ALLOCATOR_PROPERTIES *pProps);\n\n\tHRESULT SetStreamAllocatorRequirements(\n\t\t[in] ALLOCATOR_PROPERTIES *pProps);\n}\n\n\n[\nobject,\nlocal,\nuuid(AB6B4AFB-F6E4-11d0-900D-00C04FD9189D),\npointer_default(unique)\n]\ninterface IAMMediaTypeSample : IStreamSample\n{\n\tHRESULT SetPointer(\n\t\t[in] BYTE *pBuffer,\n\t\t[in] long lSize);\n\n\tHRESULT GetPointer(\n\t\t[out] BYTE ** ppBuffer);\n\n\tlong GetSize(void);\n\n\tHRESULT GetTime(\n\t\t[out] REFERENCE_TIME * pTimeStart,\n\t\t[out] REFERENCE_TIME * pTimeEnd);\n\n\tHRESULT SetTime(\n\t\t[in] REFERENCE_TIME * pTimeStart,\n\t\t[in] REFERENCE_TIME * pTimeEnd);\n\n\tHRESULT IsSyncPoint(void);\n\n\tHRESULT SetSyncPoint(\n\t\tBOOL bIsSyncPoint);\n\n\tHRESULT IsPreroll(void);\n\n\tHRESULT SetPreroll(\n\t\tBOOL bIsPreroll);\n\n\tlong GetActualDataLength(void);\n\n\tHRESULT SetActualDataLength(long Len);\n\n\tHRESULT GetMediaType(\n\t\tAM_MEDIA_TYPE **ppMediaType);\n\n\tHRESULT SetMediaType(\n\t\tAM_MEDIA_TYPE *pMediaType);\n\n\tHRESULT IsDiscontinuity(void);\n\n\tHRESULT SetDiscontinuity(\n\t\tBOOL bDiscontinuity);\n\n\tHRESULT GetMediaTime(\n\t\t[out] LONGLONG * pTimeStart,\n\t\t[out] LONGLONG * pTimeEnd);\n\n\tHRESULT SetMediaTime(\n\t\t[in] LONGLONG * pTimeStart,\n\t\t[in] LONGLONG * pTimeEnd);\n}\n\n[\n    uuid(49C47CE5-9BA4-11d0-8212-00C04FC32C45)\n]\ncoclass AMMultiMediaStream\n{\n    [default] dispinterface IDirectShowStream;\n}\n\ncpp_quote(\"DEFINE_GUID(CLSID_AMDirectDrawStream,  0x49c47ce4, 0x9ba4, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);\")\ncpp_quote(\"DEFINE_GUID(CLSID_AMAudioStream,       0x8496e040, 0xaf4c, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);\")\ncpp_quote(\"DEFINE_GUID(CLSID_AMAudioData,         0xf2468580, 0xaf8a, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);\")\ncpp_quote(\"DEFINE_GUID(CLSID_AMMediaTypeStream,   0xcf0f2f7c, 0xf7bf, 0x11d0, 0x90, 0x0d, 0x00, 0xc0, 0x4f, 0xd9, 0x18, 0x9d);\")\ncpp_quote(\"DEFINE_GUID(CLSID_MediaStreamFilter,   0x49c47ce0, 0x9ba4, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);\")\n"
  },
  {
    "path": "wine/windows/amvideo.idl",
    "content": "/*\n * Copyright (C) 2003 Robert Shearman\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"objidl.idl\";\n\n/* trick widl into thinking that it knows the DirectDraw types \n * as there is no IDL file for them (yet) */\ncpp_quote(\"#if 0\")\ninterface IDirectDraw;\ntypedef void DDSURFACEDESC,DDCAPS;\ntypedef DWORD RGBQUAD;\ntypedef LONGLONG REFERENCE_TIME;\ntypedef struct\n{\n    DWORD \tbiSize;\n    LONG  \tbiWidth;\n    LONG  \tbiHeight;\n    WORD \tbiPlanes;\n    WORD \tbiBitCount;\n    DWORD \tbiCompression;\n    DWORD \tbiSizeImage;\n    LONG  \tbiXPelsPerMeter;\n    LONG  \tbiYPelsPerMeter;\n    DWORD \tbiClrUsed;\n    DWORD \tbiClrImportant;\n} BITMAPINFOHEADER, *PBITMAPINFOHEADER, *LPBITMAPINFOHEADER;\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#include <ddraw.h>\")\n\ncpp_quote(\"#define AMDDS_NONE 0x00\")\ncpp_quote(\"#define AMDDS_DCIPS 0x01\")\ncpp_quote(\"#define AMDDS_PS 0x02\")\ncpp_quote(\"#define AMDDS_RGBOVR 0x04\")\ncpp_quote(\"#define AMDDS_YUVOVR 0x08\")\ncpp_quote(\"#define AMDDS_RGBOFF 0x10\")\ncpp_quote(\"#define AMDDS_YUVOFF 0x20\")\ncpp_quote(\"#define AMDDS_RGBFLP 0x40\")\ncpp_quote(\"#define AMDDS_YUVFLP 0x80\")\ncpp_quote(\"#define AMDDS_ALL 0xFF\")\ncpp_quote(\"#define AMDDS_DEFAULT AMDDS_ALL\")\n\ncpp_quote(\"#define AMDDS_YUV (AMDDS_YUVOFF | AMDDS_YUVOVR | AMDDS_YUVFLP)\")\ncpp_quote(\"#define AMDDS_RGB (AMDDS_RGBOFF | AMDDS_RGBOVR | AMDDS_RGBFLP)\")\ncpp_quote(\"#define AMDSS_PRIMARY (AMDDS_DCIPS | AMDDS_PS)\")\n\n[\n    object,\n    /* uuid(36d39eb0-dd75-11ce-bf0e-00aa0055595a)  conflicts with uuids.h */\n    pointer_default(unique),\n    local\n]\ninterface IDirectDrawVideo : IUnknown\n{\n    HRESULT GetSwitches([out] DWORD * pSwitches);\n    HRESULT SetSwitches([in] DWORD Switches);\n    HRESULT GetCaps([out] DDCAPS * pCaps);\n    HRESULT GetEmulatedCaps([out] DDCAPS *pCaps);\n    HRESULT GetSurfaceDesc([out] DDSURFACEDESC * pSurfaceDesc);\n    HRESULT GetFourCCCodes([out] DWORD * pCount, [out] DWORD * pCodes);\n    HRESULT SetDirectDraw([in] IDirectDraw *ddraw);\n    HRESULT GetDirectDraw([out] IDirectDraw **ddraw);\n    HRESULT GetSurfaceType([out] DWORD * pSurfaceType);\n    HRESULT SetDefault();\n    HRESULT UseScanLine([in] long UseScanLine);\n    HRESULT CanUseScanLine([out] long * UseScanLine);\n    HRESULT UseOverlayStretch([in] long UseOverlayStretch);\n    HRESULT CanUseOverlayStretch([out] long * UseOverlayStretch);\n    HRESULT UseWhenFullScreen([in] long UseWhenFullScreen);\n    HRESULT WillUseFullScreen([out] long * UseWhenFullScreen);\n}\n\n[\n    object,\n    /* uuid(1bd0ecb0-f8e2-11ce-aac6-0020af0b99a3)  conflicts with uuids.h */\n    pointer_default(unique),\n    local\n]\ninterface IQualProp : IUnknown\n{\n    [propget] HRESULT FramesDroppedInRenderer([out] int * pcFrames);\n    [propget] HRESULT FramesDrawn([out] int * pcFramesDrawn);\n    [propget] HRESULT AvgFrameRate([out] int * piAvgFrameRate);\n    [propget] HRESULT Jitter([out] int * iJitter);\n    [propget] HRESULT AvgSyncOffset([out] int * piAvg);\n    [propget] HRESULT DevSyncOffset([out] int * piDev);\n}\n\n[\n    object,\n    /* uuid(dd1d7110-7836-11cf-bf47-00aa0055595a)  conflicts with uuids.h */\n    pointer_default(unique)\n]\ninterface IFullScreenVideo : IUnknown\n{\n    HRESULT CountModes([out] long * pModes);\n    HRESULT GetModeInfo([in] long Mode, [out] long * pWidth, [out] long * pHeight, [out] long * pDepth);\n    HRESULT GetCurrentMode([out] long * pMode);\n    HRESULT IsModeAvailable([in] long Mode);\n    HRESULT IsModeEnabled([in] long Mode);\n    HRESULT SetEnabled([in] long Mode, [in] long bEnabled);\n    HRESULT GetClipFactor([out] long * pClipFactor);\n    HRESULT SetClipFactor([in] long ClipFactor);\n    HRESULT SetMessageDrain([in] HWND hwnd);\n    HRESULT GetMessageDrain([out] HWND * hwnd);\n    HRESULT SetMonitor([in] long Monitor);\n    HRESULT GetMonitor([out] long * Monitor);\n    HRESULT HideOnDeactivate([in] long Hide);\n    HRESULT IsHideOnDeactivate();\n    HRESULT SetCaption([in] BSTR strCaption);\n    HRESULT GetCaption([out] BSTR * pstrCaption);\n    HRESULT SetDefault();\n}\n\n[\n    object,\n    /* uuid(53479470-f1dd-11cf-bc42-00aa00ac74f6)  conflicts with uuids.h */\n    pointer_default(unique),\n    local\n]\ninterface IFullScreenVideoEx : IFullScreenVideo\n{\n    HRESULT SetAcceleratorTable([in] HWND hwnd, [in] HACCEL hAccel);\n    HRESULT GetAcceleratorTable([out] HWND * phwnd, [out] HACCEL * phAccel);\n    HRESULT KeepPixelAspectRatio([in] long KeepAspect);\n    /* FIXME: not sure is this next method is an [out] */\n    HRESULT IsKeepPixelAspectRatio([out] long * pKeepAspect);\n}\n\n[\n    object,\n    /* uuid(61ded640-e912-11ce-a099-00aa00479a58)  conflicts with uuids.h */\n    pointer_default(unique),\n    local\n]\ninterface IBaseVideoMixer : IUnknown\n{\n    HRESULT SetLeadPin([in] int iPin);\n    HRESULT GetLeadPin([out] int * piPin);\n    HRESULT GetInputPinCount([out] int * piPinCount);\n    HRESULT IsUsingClock([out] int * pbValue);\n    HRESULT SetUsingClock([in] int bValue);\n    HRESULT GetClockPeriod([out] int * pbValue);\n    HRESULT SetClockPeriod([in] int bValue);\n}\n\n#define iPALETTE_COLORS 256\n#define iMASK_COLORS 3\n\ncpp_quote(\"#define iPALETTE_COLORS 256\")\ncpp_quote(\"#define iEGA_COLORS 16\")\ncpp_quote(\"#define iMASK_COLORS 3\")\ncpp_quote(\"#define iTRUECOLOR 16\")\ncpp_quote(\"#define iRED 0\")\ncpp_quote(\"#define iGREEN 1\")\ncpp_quote(\"#define iBLUE 2\")\ncpp_quote(\"#define iPALETTE 8\")\ncpp_quote(\"#define iMAXBITS 8\")\n\ntypedef struct tag_TRUECOLORINFO\n{\n    DWORD dwBitMasks[iMASK_COLORS];\n    RGBQUAD bmiColors[iPALETTE_COLORS];\n} TRUECOLORINFO;\n\ntypedef struct tagVIDEOINFOHEADER\n{\n    RECT rcSource;\n    RECT rcTarget;\n    DWORD dwBitRate;\n    DWORD dwBitErrorRate;\n    REFERENCE_TIME AvgTimePerFrame;\n\n    BITMAPINFOHEADER bmiHeader;\n} VIDEOINFOHEADER;\n\ntypedef struct tagVIDEOINFO\n{\n    RECT rcSource;\n    RECT rcTarget;\n    DWORD dwBitRate;\n    DWORD dwBitErrorRate;\n    REFERENCE_TIME AvgTimePerFrame;\n\n    BITMAPINFOHEADER bmiHeader;\n\n    union\n    {\n        RGBQUAD bmiColors[iPALETTE_COLORS];\n        DWORD dwBitMasks[iMASK_COLORS];\n        TRUECOLORINFO TrueColorInfo;\n    };\n} VIDEOINFO;\n\ntypedef struct tagMPEG1VIDEOINFO\n{\n    VIDEOINFOHEADER hdr;\n    DWORD dwStartTimeCode;\n    DWORD cbSequenceHeader;\n    BYTE bSequenceHeader[1];\n} MPEG1VIDEOINFO;\n\ncpp_quote(\"#define MAX_SIZE_MPEG1_SEQUENCE_INFO 140\")\ncpp_quote(\"#define MPEG1_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->bSequenceHeader)\")\n\ntypedef struct tagAnalogVideoInfo\n{\n    RECT rcSource;\n    RECT rcTarget;\n    DWORD dwActiveWidth;\n    DWORD dwActiveHeight;\n    REFERENCE_TIME AvgTimePerFrame;\n} ANALOGVIDEOINFO;\n\ntypedef enum\n{\n    AM_PROPERTY_FRAMESTEP_STEP = 0x01,\n    AM_PROPERTY_FRAMESTEP_CANCEL = 0x02,\n    AM_PROPERTY_FRAMESTEP_CANSTEP = 0x03,\n    AM_PROPERTY_FRAMESTEP_CANSTEPMULTIPLE = 0x04\n} AM_PROPERTY_FRAMESTEP;\n\ntypedef struct _AM_FRAMESTEP_STEP\n{\n    DWORD dwFramesToStep;\n} AM_FRAMESTEP_STEP;\n"
  },
  {
    "path": "wine/windows/appcompatapi.h",
    "content": "/*\n * Copyright 2012 Detlef Riekenberg\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __APPCOMPAT_H\n#define __APPCOMPAT_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nBOOL WINAPI ApphelpCheckShellObject(REFCLSID, BOOL, ULONGLONG *);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __APPCOMPAT_H */\n"
  },
  {
    "path": "wine/windows/appmgmt.h",
    "content": "/*\n * Copyright (C) 2005 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _APPMGMT_H\n#define _APPMGMT_H\n\ntypedef struct _MANAGEDAPPLICATION\n{\n    LPWSTR pszPackageName;\n    LPWSTR pszPublisher;\n    DWORD dwVersionHi;\n    DWORD dwVersionLo;\n    DWORD dwRevision;\n    GUID GpoId;\n    LPWSTR pszPolicyName;\n    GUID ProductId;\n    LANGID Language;\n    LPWSTR pszOwner;\n    LPWSTR pszCompany;\n    LPWSTR pszComments;\n    LPWSTR pszContact;\n    LPWSTR pszSupportUrl;\n    DWORD dwPathType;\n    BOOL bInstalled;\n} MANAGEDAPPLICATION, *PMANAGEDAPPLICATION;\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nDWORD WINAPI CommandLineFromMsiDescriptor(WCHAR*,WCHAR*,DWORD*);\nDWORD WINAPI GetManagedApplications(GUID*,DWORD,DWORD,LPDWORD,PMANAGEDAPPLICATION*);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _APPMGMT_H */\n"
  },
  {
    "path": "wine/windows/appmodel.h",
    "content": "/*\n * Copyright (C) 2017 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef _APPMODEL_H_\n#define _APPMODEL_H_\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\ntypedef enum AppPolicyProcessTerminationMethod\n{\n    AppPolicyProcessTerminationMethod_ExitProcess      = 0,\n    AppPolicyProcessTerminationMethod_TerminateProcess = 1,\n} AppPolicyProcessTerminationMethod;\n\ntypedef enum AppPolicyThreadInitializationType\n{\n    AppPolicyThreadInitializationType_None            = 0,\n    AppPolicyThreadInitializationType_InitializeWinRT = 1,\n} AppPolicyThreadInitializationType;\n\ntypedef enum AppPolicyShowDeveloperDiagnostic\n{\n    AppPolicyShowDeveloperDiagnostic_None   = 0,\n    AppPolicyShowDeveloperDiagnostic_ShowUI = 1,\n} AppPolicyShowDeveloperDiagnostic;\n\ntypedef enum AppPolicyWindowingModel\n{\n    AppPolicyWindowingModel_None           = 0,\n    AppPolicyWindowingModel_Universal      = 1,\n    AppPolicyWindowingModel_ClassicDesktop = 2,\n    AppPolicyWindowingModel_ClassicPhone   = 3\n} AppPolicyWindowingModel;\n\nLONG WINAPI AppPolicyGetProcessTerminationMethod(HANDLE token, AppPolicyProcessTerminationMethod *policy);\nLONG WINAPI AppPolicyGetShowDeveloperDiagnostic(HANDLE token, AppPolicyShowDeveloperDiagnostic *policy);\nLONG WINAPI AppPolicyGetThreadInitializationType(HANDLE token, AppPolicyThreadInitializationType *policy);\nLONG WINAPI AppPolicyGetWindowingModel(HANDLE processToken, AppPolicyWindowingModel *policy);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#endif /* _APPMODEL_H_ */\n"
  },
  {
    "path": "wine/windows/asptlb.idl",
    "content": "/*\n * Copyright (C) 2010 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\nimport \"objidl.idl\";\nimport \"oaidl.idl\";\n\n[\n    object,\n    dual,\n    uuid(D97A6DA0-A864-11cf-83BE-00A0C90C2BD8)\n]\ninterface IRequestDictionary : IDispatch\n{\n    [propget]\n    HRESULT Item([in, optional] VARIANT Var, [retval, out] VARIANT *pVariantReturn);\n\n    [restricted, propget]\n    HRESULT _NewEnum([retval, out] IUnknown **ppEnumReturn);\n\n    [propget]\n    HRESULT Count([retval, out] int *count);\n\n    [propget]\n    HRESULT Key([in] VARIANT key, [retval, out] VARIANT *value);\n}\n\n[\n    object,\n    dual,\n    uuid(D97A6DA0-A864-11cf-83BE-00A0C90C2BD8)\n]\ninterface IResponse : IDispatch\n{\n    [propget]\n    HRESULT Buffer([retval, out] VARIANT_BOOL *is_buffering);\n\n    [propput]\n    HRESULT Buffer([in] VARIANT_BOOL is_buffering);\n\n    [propget]\n    HRESULT ContentType([retval, out] BSTR *content_type);\n\n    [propput]\n    HRESULT ContentType([in] BSTR content_type);\n\n    [propget]\n    HRESULT Expires([retval, out] VARIANT *minutes);\n\n    [propput]\n    HRESULT Expires([in] LONG minutes);\n\n    [propget]\n    HRESULT ExpiresAbsolute([retval, out] VARIANT *expires);\n\n    [propput]\n    HRESULT ExpiresAbsolute([in] DATE expires);\n\n    [propget]\n    HRESULT Cookies([retval, out] IRequestDictionary **cookies);\n\n    [propget]\n    HRESULT Status([retval, out] BSTR *status);\n\n    [propput]\n    HRESULT Status([in] BSTR status);\n\n    [hidden]\n    HRESULT Add([in] BSTR value, [in] BSTR name);\n\n    HRESULT AddHeader([in] BSTR name, [in] BSTR value);\n\n    HRESULT AppendToLog([in] BSTR log_entry);\n\n    HRESULT BinaryWrite([in] VARIANT input);\n\n    HRESULT Clear();\n\n    HRESULT End();\n\n    HRESULT Flush();\n\n    HRESULT Redirect(BSTR url);\n\n    HRESULT Write([in] VARIANT text);\n\n    [hidden]\n    HRESULT WriteBlock([in] short block_number);\n\n    HRESULT IsClientConnected([retval, out] VARIANT_BOOL *is_connected);\n\n    [propget]\n    HRESULT CharSet([retval, out] BSTR *charset);\n\n    [propput]\n    HRESULT CharSet([in] BSTR charset);\n\n    HRESULT Pics([in] BSTR value);\n\n    [propget]\n    HRESULT CacheControl([retval, out] BSTR *cache_control);\n\n    [propput]\n    HRESULT CacheControl([in] BSTR cache_control);\n\n    [propget]\n    HRESULT CodePage([retval, out] LONG *codepage);\n\n    [propput]\n    HRESULT CodePage([in] LONG codepage);\n\n    [propget]\n    HRESULT LCID([retval, out] LONG *lcid);\n\n    [propput]\n    HRESULT LCID([in] LONG lcid);\n}\n"
  },
  {
    "path": "wine/windows/asynot.idl",
    "content": "/*\n * Copyright (C) 2009 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    object,\n    uuid(0c733a96-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface IDBAsynchNotify : IUnknown\n{\n    [local]\n    HRESULT OnLowResource([in] DB_DWRESERVE dwReserved);\n\n    [call_as(OnLowResource)]\n    HRESULT RemoteOnLowResource([in] DB_DWRESERVE dwReserved);\n\n    [local]\n    HRESULT OnProgress([in] HCHAPTER hChapter,\n                       [in] DBASYNCHOP eOperation,\n                       [in] DBCOUNTITEM ulProgress,\n                       [in] DBCOUNTITEM ulProgressMax,\n                       [in] DBASYNCHPHASE eAsynchPhase,\n                       [in, annotation(\"__in_opt\")] LPOLESTR pwszStatusText);\n\n    [call_as(OnProgress)]\n    HRESULT RemoteOnProgress([in] HCHAPTER hChapter,\n                             [in] DBASYNCHOP eOperation,\n                             [in] DBCOUNTITEM ulProgress,\n                             [in] DBCOUNTITEM ulProgressMax,\n                             [in] DBASYNCHPHASE eAsynchPhase,\n                             [in, unique, string] LPOLESTR pwszStatusText);\n\n    [local]\n    HRESULT OnStop([in] HCHAPTER hChapter,\n                   [in] DBASYNCHOP eOperation,\n                   [in] HRESULT hrStatus,\n                   [in, annotation(\"__in_opt\")] LPOLESTR pwszStatusText);\n\n    [call_as(OnStop)]\n    HRESULT RemoteOnStop([in] HCHAPTER hChapter,\n                         [in] DBASYNCHOP eOperation,\n                         [in] HRESULT hrStatus,\n                         [in, unique, string] LPOLESTR pwszStatusText);\n}\n"
  },
  {
    "path": "wine/windows/asysta.idl",
    "content": "/*\n * Copyright (C) 2009 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    object,\n    uuid(0c733a95-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface IDBAsynchStatus : IUnknown\n{\n    [local]\n    HRESULT Abort([in] HCHAPTER hChapter,\n                  [in] DBASYNCHOP eOperation);\n\n    [call_as(Abort)]\n    HRESULT RemoteAbort([in] HCHAPTER hChapter,\n                        [in] DBASYNCHOP eOperation,\n                        [out] IErrorInfo **ppErrorInfoRem);\n\n    [local]\n    HRESULT GetStatus([in] HCHAPTER hChapter,\n                      [in] DBASYNCHOP eOperation,\n                      [out, annotation(\"__out_opt\")] DBCOUNTITEM *pulProgress,\n                      [out, annotation(\"__out_opt\")] DBCOUNTITEM *pulProgressMax,\n                      [out, annotation(\"__out\")] DBASYNCHPHASE *peAsynchPhase,\n                      [out, annotation(\"__deref_opt_inout_opt\")] LPOLESTR *ppwszStatusText);\n\n    [call_as(GetStatus)]\n    HRESULT RemoteGetStatus([in] HCHAPTER hChapter,\n                            [in] DBASYNCHOP eOperation,\n                            [in, out, unique] DBCOUNTITEM *pulProgress,\n                            [in, out, unique] DBCOUNTITEM *pulProgressMax,\n                            [in, out, unique] DBASYNCHPHASE *peAsynchPhase,\n                            [in, out, unique] LPOLESTR *ppwszStatusText,\n                            [out] IErrorInfo **ppErrorInfoRem);\n}\n"
  },
  {
    "path": "wine/windows/atlbase.h",
    "content": "/*\n * Implementation of the Active Template Library (atl.dll)\n *\n * Copyright 2004 Aric Stewart for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_ATLBASE_H__\n#define __WINE_ATLBASE_H__\n\n#include <atliface.h>\n#include <comcat.h>\n\n/* Wine extension: we (ab)use _ATL_VER to handle struct layout differences between ATL versions. */\n#define _ATL_VER_30  0x0300\n#define _ATL_VER_70  0x0700\n#define _ATL_VER_80  0x0800\n#define _ATL_VER_90  0x0900\n#define _ATL_VER_100 0x0a00\n#define _ATL_VER_110 0x0b00\n\n#ifndef _ATL_VER\n#define _ATL_VER _ATL_VER_100\n#endif\n\ntypedef HRESULT (WINAPI _ATL_CREATORFUNC)(void* pv, REFIID riid, LPVOID* ppv);\ntypedef HRESULT (WINAPI _ATL_CREATORARGFUNC)(void* pv, REFIID riid, LPVOID* ppv, DWORD dw);\ntypedef HRESULT (WINAPI _ATL_MODULEFUNC)(DWORD dw);\ntypedef LPCSTR (WINAPI _ATL_DESCRIPTIONFUNCA)(void);\ntypedef LPCWSTR (WINAPI _ATL_DESCRIPTIONFUNCW)(void);\ntypedef const struct _ATL_CATMAP_ENTRY* (_ATL_CATMAPFUNC)(void);\ntypedef void (WINAPI _ATL_TERMFUNC)(DWORD dw);\n\ntypedef CRITICAL_SECTION CComCriticalSection;\n\ntypedef struct _ATL_OBJMAP_ENTRYA_V1_TAG\n{\n    const CLSID* pclsid;\n    HRESULT (WINAPI *pfnUpdateRegistry)(BOOL bRegister);\n    _ATL_CREATORFUNC* pfnGetClassObject;\n    _ATL_CREATORFUNC* pfnCreateInstance;\n    IUnknown* pCF;\n    DWORD dwRegister;\n    _ATL_DESCRIPTIONFUNCA* pfnGetObjectDescription;\n}_ATL_OBJMAP_ENTRYA_V1;\n\ntypedef struct _ATL_OBJMAP_ENTRYW_V1_TAG\n{\n    const CLSID* pclsid;\n    HRESULT (WINAPI *pfnUpdateRegistry)(BOOL bRegister);\n    _ATL_CREATORFUNC* pfnGetClassObject;\n    _ATL_CREATORFUNC* pfnCreateInstance;\n    IUnknown* pCF;\n    DWORD dwRegister;\n    _ATL_DESCRIPTIONFUNCW* pfnGetObjectDescription;\n} _ATL_OBJMAP_ENTRYW_V1;\n\ntypedef struct _ATL_OBJMAP_ENTRYA_TAG\n{\n    const CLSID* pclsid;\n    HRESULT (WINAPI *pfnUpdateRegistry)(BOOL bRegister);\n    _ATL_CREATORFUNC* pfnGetClassObject;\n    _ATL_CREATORFUNC* pfnCreateInstance;\n    IUnknown* pCF;\n    DWORD dwRegister;\n    _ATL_DESCRIPTIONFUNCA* pfnGetObjectDescription;\n    _ATL_CATMAPFUNC* pfnGetCategoryMap;\n    void (WINAPI *pfnObjectMain)(BOOL bStarting);\n}_ATL_OBJMAP_ENTRYA;\n\ntypedef struct _ATL_OBJMAP_ENTRYW_TAG\n{\n    const CLSID* pclsid;\n    HRESULT (WINAPI *pfnUpdateRegistry)(BOOL bRegister);\n    _ATL_CREATORFUNC* pfnGetClassObject;\n    _ATL_CREATORFUNC* pfnCreateInstance;\n    IUnknown* pCF;\n    DWORD dwRegister;\n    _ATL_DESCRIPTIONFUNCW* pfnGetObjectDescription;\n    _ATL_CATMAPFUNC* pfnGetCategoryMap;\n    void (WINAPI *pfnObjectMain)(BOOL bStarting);\n} _ATL_OBJMAP_ENTRYW, _ATL_OBJMAP_ENTRY30, _ATL_OBJMAP_ENTRY;\n\ntypedef struct _ATL_OBJMAP_CACHE\n{\n    IUnknown *pCF;\n    DWORD dwRegister;\n} _ATL_OBJMAP_CACHE;\n\ntypedef struct _ATL_OBJMAP_ENTRY110\n{\n        const CLSID* pclsid;\n        HRESULT (WINAPI *pfnUpdateRegistry)(BOOL bRegister);\n        _ATL_CREATORFUNC* pfnGetClassObject;\n        _ATL_CREATORFUNC* pfnCreateInstance;\n        _ATL_OBJMAP_CACHE* pCache;\n        _ATL_DESCRIPTIONFUNCW* pfnGetObjectDescription;\n        _ATL_CATMAPFUNC* pfnGetCategoryMap;\n        void (WINAPI *pfnObjectMain)(BOOL bStarting);\n} _ATL_OBJMAP_ENTRY110, _ATL_OBJMAP_ENTRY_EX;\n\ntypedef struct _ATL_TERMFUNC_ELEM_TAG\n{\n    _ATL_TERMFUNC* pFunc;\n    DWORD_PTR dw;\n    struct _ATL_TERMFUNC_ELEM_TAG* pNext;\n} _ATL_TERMFUNC_ELEM;\n\ntypedef struct _AtlCreateWndData_TAG\n{\n    void* m_pThis;\n    DWORD m_dwThreadID;\n    struct _AtlCreateWndData_TAG* m_pNext;\n} _AtlCreateWndData;\n\ntypedef struct _ATL_MODULEA_TAG\n{\n    UINT cbSize;\n    HINSTANCE m_hInst;\n    HINSTANCE m_hInstResource;\n    HINSTANCE m_hInstTypeLib;\n    _ATL_OBJMAP_ENTRYA* m_pObjMap;\n    LONG m_nLockCnt;\n    HANDLE m_hHeap;\n    union\n    {\n        CRITICAL_SECTION m_csTypeInfoHolder;\n        CRITICAL_SECTION m_csStaticDataInit;\n    } u;\n    CRITICAL_SECTION m_csWindowCreate;\n    CRITICAL_SECTION m_csObjMap;\n\n    DWORD dwAtlBuildVer;\n    _AtlCreateWndData* m_pCreateWndList;\n    BOOL m_bDestroyHeap;\n    GUID* pguidVer;\n    DWORD m_dwHeaps;\n    HANDLE* m_phHeaps;\n    int m_nHeap;\n    _ATL_TERMFUNC_ELEM* m_pTermFuncs;\n} _ATL_MODULEA;\n\ntypedef struct _ATL_MODULEW_TAG\n{\n    UINT cbSize;\n    HINSTANCE m_hInst;\n    HINSTANCE m_hInstResource;\n    HINSTANCE m_hInstTypeLib;\n    _ATL_OBJMAP_ENTRYW* m_pObjMap;\n    LONG m_nLockCnt;\n    HANDLE m_hHeap;\n    union\n    {\n        CRITICAL_SECTION m_csTypeInfoHolder;\n        CRITICAL_SECTION m_csStaticDataInit;\n    } u;\n    CRITICAL_SECTION m_csWindowCreate;\n    CRITICAL_SECTION m_csObjMap;\n\n    DWORD dwAtlBuildVer;\n    _AtlCreateWndData* m_pCreateWndList;\n    BOOL m_bDestroyHeap;\n    GUID* pguidVer;\n    DWORD m_dwHeaps;\n    HANDLE* m_phHeaps;\n    int m_nHeap;\n    _ATL_TERMFUNC_ELEM* m_pTermFuncs;\n} _ATL_MODULEW;\n\ntypedef struct\n{\n    void *m_aT;\n    int m_nSize;\n    int m_nAllocSize;\n} CSimpleArray;\n\ntypedef struct _ATL_MODULE70\n{\n    UINT cbSize;\n    LONG m_nLockCnt;\n    _ATL_TERMFUNC_ELEM *m_pTermFuncs;\n    CComCriticalSection m_csStaticDataInitAndTypeInfo;\n} _ATL_MODULE70;\n\ntypedef struct _ATL_WIN_MODULE70\n{\n    UINT cbSize;\n    CComCriticalSection m_csWindowCreate;\n    _AtlCreateWndData *m_pCreateWndList;\n    CSimpleArray /* <ATOM> */ m_rgWindowClassAtoms;\n} _ATL_WIN_MODULE70;\n\n#if _ATL_VER >= _ATL_VER_110\ntypedef struct _ATL_COM_MODULE70\n{\n    UINT cbSize;\n    HINSTANCE m_hInstTypeLib;\n    _ATL_OBJMAP_ENTRY_EX **m_ppAutoObjMapFirst;\n    _ATL_OBJMAP_ENTRY_EX **m_ppAutoObjMapLast;\n    CComCriticalSection m_csObjMap;\n} _ATL_COM_MODULE70, _ATL_COM_MODULE;\n#else\ntypedef struct _ATL_COM_MODULE70\n{\n    UINT cbSize;\n    HINSTANCE m_hInstTypeLib;\n    _ATL_OBJMAP_ENTRY **m_ppAutoObjMapFirst;\n    _ATL_OBJMAP_ENTRY **m_ppAutoObjMapLast;\n    CComCriticalSection m_csObjMap;\n} _ATL_COM_MODULE70, _ATL_COM_MODULE;\n#endif\n\n#if _ATL_VER >= _ATL_VER_70\ntypedef _ATL_MODULE70 _ATL_MODULE;\ntypedef _ATL_WIN_MODULE70 _ATL_WIN_MODULE;\n#else\ntypedef _ATL_MODULEW _ATL_MODULE;\ntypedef _ATL_MODULEW _ATL_WIN_MODULE;\n#endif\n\ntypedef struct _ATL_INTMAP_ENTRY_TAG\n{\n    const IID* piid;\n    DWORD dw;\n    _ATL_CREATORARGFUNC* pFunc;\n} _ATL_INTMAP_ENTRY;\n\nstruct _ATL_REGMAP_ENTRY\n{\n    LPCOLESTR szKey;\n    LPCOLESTR szData;\n};\n\nstruct _ATL_CATMAP_ENTRY\n{\n    int iType;\n    const CATID *pcatid;\n};\n\n#define _ATL_CATMAP_ENTRY_END 0\n#define _ATL_CATMAP_ENTRY_IMPLEMENTED 1\n#define _ATL_CATMAP_ENTRY_REQUIRED 2\n\nHRESULT WINAPI AtlAdvise(IUnknown *pUnkCP, IUnknown *pUnk, const IID * iid, LPDWORD dpw);\nHRESULT WINAPI AtlAxAttachControl(IUnknown*,HWND,IUnknown**);\nHRESULT WINAPI AtlAxCreateControl(LPCOLESTR,HWND,IStream*,IUnknown**);\nHRESULT WINAPI AtlAxCreateControlEx(LPCOLESTR,HWND,IStream*,IUnknown**,IUnknown**,REFIID,IUnknown*);\nHRESULT WINAPI AtlFreeMarshalStream(IStream *pStream);\nHRESULT WINAPI AtlInternalQueryInterface(void* pThis, const _ATL_INTMAP_ENTRY* pEntries, REFIID iid, void** ppvObject);\nHRESULT WINAPI AtlMarshalPtrInProc(IUnknown *pUnk, const IID *iid, IStream **ppStream);\nvoid    WINAPI AtlModuleAddCreateWndData(_ATL_MODULEW *pM, _AtlCreateWndData *pData, void* pvObject);\nHRESULT WINAPI AtlWinModuleInit(_ATL_WIN_MODULE*);\nvoid    WINAPI AtlWinModuleAddCreateWndData(_ATL_WIN_MODULE*,_AtlCreateWndData*,void*);\nvoid*   WINAPI AtlWinModuleExtractCreateWndData(_ATL_WIN_MODULE*);\nHRESULT WINAPI AtlModuleAddTermFunc(_ATL_MODULE *pM, _ATL_TERMFUNC *pFunc, DWORD_PTR dw);\nvoid WINAPI AtlCallTermFunc(_ATL_MODULE*);\nvoid*  WINAPI AtlModuleExtractCreateWndData(_ATL_MODULEW *pM);\nHRESULT WINAPI AtlModuleInit(_ATL_MODULEW* pM, _ATL_OBJMAP_ENTRYW* p, HINSTANCE h);\nHRESULT WINAPI AtlModuleLoadTypeLib(_ATL_MODULEW *pM, LPCOLESTR lpszIndex, BSTR *pbstrPath, ITypeLib **ppTypeLib);\nHRESULT WINAPI AtlModuleRegisterClassObjects(_ATL_MODULEW* pM, DWORD dwClsContext, DWORD dwFlags);\nHRESULT WINAPI AtlModuleRegisterServer(_ATL_MODULEW* pM, BOOL bRegTypeLib, const CLSID* pCLSID);\nHRESULT WINAPI AtlModuleRegisterTypeLib(_ATL_MODULEW *pM, LPCOLESTR lpszIndex);\nHRESULT WINAPI AtlModuleUnregisterServer(_ATL_MODULEW* pM, const CLSID* pCLSID);\nHRESULT WINAPI AtlModuleUpdateRegistryFromResourceD(_ATL_MODULEW *pM, LPCOLESTR lpszRes, BOOL bRegister, struct _ATL_REGMAP_ENTRY *pMapEntries, IRegistrar *pReg );\nHRESULT WINAPI AtlModuleUnregisterServerEx(_ATL_MODULEW* pM, BOOL bUnRegTypeLib, const CLSID* pCLSID);\nHRESULT WINAPI AtlModuleTerm(_ATL_MODULEW* pM);\nHRESULT WINAPI AtlUnadvise(IUnknown *pUnkCP, const IID * iid, DWORD dw);\nHRESULT WINAPI AtlUnmarshalPtr(IStream *pStream, const IID *iid, IUnknown **ppUnk);\nHRESULT WINAPI AtlCreateRegistrar(IRegistrar**);\nHRESULT WINAPI AtlUpdateRegistryFromResourceD(HINSTANCE,LPCOLESTR,BOOL,struct _ATL_REGMAP_ENTRY*,IRegistrar*);\nHRESULT WINAPI AtlLoadTypeLib(HINSTANCE,LPCOLESTR,BSTR*,ITypeLib**);\nHRESULT WINAPI AtlRegisterTypeLib(HINSTANCE,LPCOLESTR);\nHRESULT WINAPI AtlRegisterClassCategoriesHelper(REFCLSID,const struct _ATL_CATMAP_ENTRY*,BOOL);\nHRESULT WINAPI AtlComModuleGetClassObject(_ATL_COM_MODULE*,REFCLSID,REFIID,void**);\nHRESULT WINAPI AtlComModuleRegisterClassObjects(_ATL_COM_MODULE*,DWORD,DWORD);\nHRESULT WINAPI AtlComModuleUnregisterServer(_ATL_COM_MODULE*,BOOL,const CLSID*);\nBOOL WINAPI AtlWaitWithMessageLoop(HANDLE);\nHRESULT WINAPI AtlGetObjectSourceInterface(IUnknown*,GUID*,IID*,unsigned short*,unsigned short*);\nHRESULT WINAPI AtlSetPerUserRegistration(unsigned char /*bool*/);\nHRESULT WINAPI AtlGetPerUserRegistration(unsigned char /*bool*/ *);\n\n#endif /* __WINE_ATLBASE_H__ */\n"
  },
  {
    "path": "wine/windows/atlcom.h",
    "content": "/*\n * Copyright 2014 Qian Hong for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_ATLCOM_H__\n#define __WINE_ATLCOM_H__\n\n#ifndef __WINE_ATLBASE_H__\n# error You must include atlbase.h to use this header\n#endif\n\ntypedef struct ATL_PROPMAP_ENTRY\n{\n    LPCOLESTR szDesc;\n#if _ATL_VER < _ATL_VER_100\n    DISPID dispid;\n    const CLSID *pclsidPropPage;\n    const IID *piidDispatch;\n#else\n    const CLSID *pclsidPropPage;\n    const IID *piidDispatch;\n    void *rgclsidAllowed;\n    DWORD cclsidAllowed;\n    DISPID dispid;\n#endif\n    DWORD dwOffsetData;\n    DWORD dwSizeData;\n    VARTYPE vt;\n} ATL_PROPMAP_ENTRY;\n\nHRESULT WINAPI AtlIPersistStreamInit_Load(IStream*, ATL_PROPMAP_ENTRY*, void*, IUnknown*);\nHRESULT WINAPI AtlIPersistStreamInit_Save(IStream*, BOOL, ATL_PROPMAP_ENTRY*, void*, IUnknown*);\nHRESULT WINAPI AtlIPersistPropertyBag_Load(IPropertyBag*, IErrorLog*, ATL_PROPMAP_ENTRY*, void*, IUnknown*);\nHRESULT WINAPI AtlIPersistPropertyBag_Save(IPropertyBag*, BOOL, BOOL, ATL_PROPMAP_ENTRY*, void*, IUnknown*);\n\n#endif /* __WINE_ATLCOM_H__ */\n"
  },
  {
    "path": "wine/windows/atliface.idl",
    "content": "/*\n * Copyright 2005 Jacek Caban\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"ocidl.idl\";\n\ncpp_quote(\"#ifdef ATL_INITGUID\")\ncpp_quote(\"#include <initguid.h>\")\ncpp_quote(\"#endif\")\n\n[\n    object,\n    uuid(e21f8a85-b05d-4243-8183-c7cb405588f7),\n    pointer_default(unique)\n]\ninterface IRegistrarBase : IUnknown\n{\n    HRESULT AddReplacement(\n        [in] LPCOLESTR Key,\n        [in] LPCOLESTR item);\n\n    HRESULT ClearReplacements();\n}\n\n[\n    object,\n    uuid(44EC053B-400F-11D0-9DCD-00A0C90391D3),\n    pointer_default(unique)\n]\ninterface IRegistrar : IRegistrarBase\n{\n    HRESULT ResourceRegisterSz(\n        [in] LPCOLESTR resFileName,\n        [in] LPCOLESTR szID,\n        [in] LPCOLESTR szType);\n\n    HRESULT ResourceUnregisterSz(\n        [in] LPCOLESTR resFileName,\n        [in] LPCOLESTR szID,\n        [in] LPCOLESTR szType);\n\n    HRESULT FileRegister(\n        [in] LPCOLESTR fileName);\n\n    HRESULT FileUnregister(\n        [in] LPCOLESTR fileName);\n\n    HRESULT StringRegister(\n        [in] LPCOLESTR data);\n\n    HRESULT StringUnregister(\n        [in] LPCOLESTR data);\n\n    HRESULT ResourceRegister(\n        [in] LPCOLESTR resFileName,\n        [in] UINT nID,\n        [in] LPCOLESTR szType);\n\n    HRESULT ResourceUnregister(\n        [in] LPCOLESTR resFileName,\n        [in] UINT nID,\n        [in] LPCOLESTR szType);\n}\n\n[\n    object,\n    uuid(425b5af0-65f1-11d1-9611-0000f81e0d0d)\n]\ninterface IDocHostUIHandlerDispatch : IDispatch\n{\n    HRESULT ShowContextMenu([in] DWORD id,\n                            [in] LONG x,\n                            [in] LONG y,\n                            [in] IUnknown *unkreserved,\n                            [in] IDispatch *dispreserved,\n                            [out, retval] HRESULT *retval);\n    HRESULT GetHostInfo([in, out] DWORD *flags,\n                        [in, out] DWORD *doubleclick);\n    HRESULT ShowUI([in] DWORD id,\n                   [in] IUnknown *activeobject,\n                   [in] IUnknown *cmdtarget,\n                   [in] IUnknown *frame,\n                   [in] IUnknown *doc,\n                   [out, retval] HRESULT *retval);\n    HRESULT HideUI();\n    HRESULT UpdateUI();\n    HRESULT EnableModeless([in] VARIANT_BOOL enable);\n    HRESULT OnDocWindowActivate([in] VARIANT_BOOL activate);\n    HRESULT OnFrameWindowActivate([in] VARIANT_BOOL activate);\n    HRESULT ResizeBorder([in] LONG left,\n                         [in] LONG top,\n                         [in] LONG right,\n                         [in] LONG bottom,\n                         [in] IUnknown *window,\n                         [in] VARIANT_BOOL framewindow);\n    HRESULT TranslateAccelerator([in] HWND hwnd,\n                                 [in] UINT msg,\n                                 [in] WPARAM wparam,\n                                 [in] LPARAM lparam,\n                                 [in] BSTR guid_cmd_group,\n                                 [out, retval] HRESULT *retval);\n    HRESULT GetOptionKeyPath([out] BSTR *key,\n                             [in] DWORD reserved);\n    HRESULT GetDropTarget([in] IUnknown *droptarget,\n                          [out] IUnknown **ret_droptarget);\n    HRESULT GetExternal([out] IDispatch **disp);\n    HRESULT TranslateUrl([in] DWORD reserved,\n                         [in] BSTR url,\n                         [out] BSTR *translated_url);\n    HRESULT FilterDataObject([in] IUnknown *dataobject,\n                             [out] IUnknown **dataobject_ret);\n}\n\n[\n    dual,\n    object,\n    oleautomation,\n    uuid(b6ea2051-048a-11d1-82b9-00c04fb9942e)\n]\ninterface IAxWinAmbientDispatch : IDispatch\n{\n    [propput]\n    HRESULT AllowWindowlessActivation([in] VARIANT_BOOL allow);\n    [propget]\n    HRESULT AllowWindowlessActivation([out, retval] VARIANT_BOOL *allowed);\n    [propput, id(-701)]\n    HRESULT BackColor([in] OLE_COLOR color);\n    [propget, id(-701)]\n    HRESULT BackColor([out, retval] OLE_COLOR *color);\n    [propput, id(-704)]\n    HRESULT ForeColor([in] OLE_COLOR color);\n    [propget, id(-704)]\n    HRESULT ForeColor([out, retval] OLE_COLOR *color);\n    [propput, id(-705)]\n    HRESULT LocaleID([in] LCID lcid);\n    [propget, id(-705)]\n    HRESULT LocaleID([out, retval] LCID *lcid);\n    [propput, id(-709)]\n    HRESULT UserMode([in] VARIANT_BOOL mode);\n    [propget, id(-709)]\n    HRESULT UserMode([out, retval] VARIANT_BOOL *mode);\n    [propput, id(-713)]\n    HRESULT DisplayAsDefault([in] VARIANT_BOOL display);\n    [propget, id(-713)]\n    HRESULT DisplayAsDefault([out, retval] VARIANT_BOOL *display);\n    [propput, id(-703)]\n    HRESULT Font([in] IFontDisp *font);\n    [propget, id(-703)]\n    HRESULT Font([out, retval] IFontDisp **font);\n    [propput, id(-706)]\n    HRESULT MessageReflect([in] VARIANT_BOOL reflect);\n    [propget, id(-706)]\n    HRESULT MessageReflect([out, retval] VARIANT_BOOL *reflect);\n    [propget, id(-711)]\n    HRESULT ShowGrabHandles([out, retval] VARIANT_BOOL *show);\n    [propget, id(-712)]\n    HRESULT ShowHatching([out, retval] VARIANT_BOOL *show);\n    [propput]\n    HRESULT DocHostFlags([in] DWORD flags);\n    [propget]\n    HRESULT DocHostFlags([out, retval] DWORD *flags);\n    [propput]\n    HRESULT DocHostDoubleClickFlags([in] DWORD flags);\n    [propget]\n    HRESULT DocHostDoubleClickFlags([out, retval] DWORD *flags);\n    [propput]\n    HRESULT AllowContextMenu([in] VARIANT_BOOL allow);\n    [propget]\n    HRESULT AllowContextMenu([out, retval] VARIANT_BOOL *allow);\n    [propput]\n    HRESULT AllowShowUI([in] VARIANT_BOOL allow);\n    [propget]\n    HRESULT AllowShowUI([out, retval] VARIANT_BOOL *allow);\n    [propput]\n    HRESULT OptionKeyPath([in] BSTR path);\n    [propget]\n    HRESULT OptionKeyPath([out, retval] BSTR *path);\n}\n\n[\n    dual,\n    object,\n    oleautomation,\n    uuid(b2d0778b-ac99-4c58-a5c8-e7724e5316b5)\n]\ninterface IAxWinAmbientDispatchEx : IAxWinAmbientDispatch\n{\n    [id(100)]\n    HRESULT SetAmbientDispatch([in] IDispatch *disp);\n}\n\ncpp_quote(\"DEFINE_GUID(CLSID_Registrar,0x44ec053a,0x400f,0x11d0,0x9d,0xcd,0x00,0xa0,0xc9,0x03,0x91,0xd3);\")\n\ncpp_quote(\"HRESULT WINAPI AtlAxCreateControl(LPCOLESTR,HWND,IStream*,IUnknown**);\")\ncpp_quote(\"HRESULT WINAPI AtlAxCreateControlEx(LPCOLESTR,HWND,IStream*,IUnknown**,IUnknown**,REFIID,IUnknown*);\")\ncpp_quote(\"HRESULT WINAPI AtlAxCreateControlLic(LPCOLESTR,HWND,IStream*,IUnknown**,BSTR);\")\ncpp_quote(\"HRESULT WINAPI AtlAxCreateControlLicEx(LPCOLESTR,HWND,IStream*,IUnknown**,IUnknown**,REFIID,IUnknown*,BSTR);\")\ncpp_quote(\"BOOL WINAPI AtlAxWinInit(void);\")\ncpp_quote(\"HRESULT WINAPI AtlAxGetControl(HWND,IUnknown**);\")\ncpp_quote(\"HRESULT WINAPI AtlAxGetHost(HWND,IUnknown**);\")\n\ncpp_quote(\"HWND WINAPI AtlAxCreateDialogW(HINSTANCE,LPCWSTR,HWND,DLGPROC,LPARAM);\")\ncpp_quote(\"HWND WINAPI AtlAxCreateDialogA(HINSTANCE,LPCSTR,HWND,DLGPROC,LPARAM);\")\ncpp_quote(\"#define     AtlAxCreateDialog WINELIB_NAME_AW(AtlAxCreateDialog)\")\ncpp_quote(\"INT_PTR WINAPI AtlAxDialogBoxW(HINSTANCE,LPCWSTR,HWND,DLGPROC,LPARAM);\")\ncpp_quote(\"INT_PTR WINAPI AtlAxDialogBoxA(HINSTANCE,LPCSTR,HWND,DLGPROC,LPARAM);\")\ncpp_quote(\"#define        AtlAxDialogBox WINELIB_NAME_AW(AtlAxDialogBox)\")\n"
  },
  {
    "path": "wine/windows/atlwin.h",
    "content": "/*\n * Active Template Library Window Functions\n *\n * Copyright 2006 Robert Shearman for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_ATLWIN_H__\n#define __WINE_ATLWIN_H__\n\ntypedef struct _ATL_WNDCLASSINFOA_TAG\n{\n    WNDCLASSEXA m_wc;\n    LPCSTR m_lpszOrigName;\n    WNDPROC pWndProc;\n    LPCSTR m_lpszCursorID;\n    BOOL m_bSystemCursor;\n    ATOM m_atom;\n    CHAR m_szAutoName[14];\n} _ATL_WNDCLASSINFOA;\n\ntypedef struct _ATL_WNDCLASSINFOW_TAG\n{\n    WNDCLASSEXW m_wc;\n    LPCWSTR m_lpszOrigName;\n    WNDPROC pWndProc;\n    LPCWSTR m_lpszCursorID;\n    BOOL m_bSystemCursor;\n    ATOM m_atom;\n    WCHAR m_szAutoName[14];\n} _ATL_WNDCLASSINFOW;\n\nATOM WINAPI AtlModuleRegisterWndClassInfoA(_ATL_MODULEA *pm, _ATL_WNDCLASSINFOA *wci, WNDPROC *pProc);\nATOM WINAPI AtlModuleRegisterWndClassInfoW(_ATL_MODULEW *pm, _ATL_WNDCLASSINFOW *wci, WNDPROC *pProc);\n\nHDC WINAPI AtlCreateTargetDC(HDC hdc, DVTARGETDEVICE *ptd);\nvoid WINAPI AtlHiMetricToPixel(const SIZEL *lpSizeInHiMetric, LPSIZEL lpSizeInPix);\nvoid WINAPI AtlPixelToHiMetric(const SIZEL *lpSizeInPix, LPSIZEL lpSizeInHiMetric);\n\n#endif /* __WINE_ATLWIN_H__ */\n"
  },
  {
    "path": "wine/windows/audevcod.h",
    "content": "/*\n * Copyright (C) 2002 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __AUDEVCOD__\n#define __AUDEVCOD__\n\ntypedef enum _tagSND_DEVICE_ERROR\n{\n    SNDDEV_ERROR_Open=1,\n    SNDDEV_ERROR_Close=2,\n    SNDDEV_ERROR_GetCaps=3,\n    SNDDEV_ERROR_PrepareHeader=4,\n    SNDDEV_ERROR_UnprepareHeader=5,\n    SNDDEV_ERROR_Reset=6,\n    SNDDEV_ERROR_Restart=7,\n    SNDDEV_ERROR_GetPosition=8,\n    SNDDEV_ERROR_Write=9,\n    SNDDEV_ERROR_Pause=10,\n    SNDDEV_ERROR_Stop=11,\n    SNDDEV_ERROR_Start=12,\n    SNDDEV_ERROR_AddBuffer=13,\n    SNDDEV_ERROR_Query=14\n} SNDDEV_ERR;\n\n#define EC_SND_DEVICE_ERROR_BASE 0x0200\n#define EC_SNDDEV_IN_ERROR       (EC_SND_DEVICE_ERROR_BASE+0x00)\n#define EC_SNDDEV_OUT_ERROR      (EC_SND_DEVICE_ERROR_BASE+0x01)\n\n#endif  /* __AUDEVCOD__ */\n"
  },
  {
    "path": "wine/windows/audioclient.idl",
    "content": "/*\n * Core Audio audioclient definitions\n *\n * Copyright 2009 Maarten Lankhorst\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n */\n\nimport \"wtypes.idl\";\nimport \"unknwn.idl\";\nimport \"audiosessiontypes.h\";\n\n/* Forward declarations */\ninterface IAudioClient;\ninterface IAudioRenderClient;\ninterface IAudioCaptureClient;\ninterface IAudioClock;\ninterface IAudioClock2;\ninterface IAudioClockAdjustment;\ninterface ISimpleAudioVolume;\ninterface IAudioStreamVolume;\ninterface IChannelAudioVolume;\n\ncpp_quote(\"#if 0\")\ntypedef struct WAVEFORMATEX /*[hidden,restricted]*/\n{\n    WORD wFormatTag;\n    WORD nChannels;\n    DWORD nSamplesPerSec;\n    DWORD nAvgBytesPerSec;\n    WORD nBlockAlign;\n    WORD wBitsPerSample;\n    WORD cbSize;\n} WAVEFORMATEX;\ncpp_quote(\"#else\")\ncpp_quote(\"#include <mmreg.h>\")\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#if 0\")\ntypedef LONGLONG /*[hidden,restricted]*/ REFERENCE_TIME;\ncpp_quote(\"#else\")\ncpp_quote(\"#define _IKsControl_\")\ncpp_quote(\"#include <ks.h>\")\ncpp_quote(\"#include <ksmedia.h>\")\ncpp_quote(\"#endif\")\n\nenum _AUDCLNT_BUFFERFLAGS\n{\n    AUDCLNT_BUFFERFLAGS_DATA_DISCONTINUITY = 0x1,\n    AUDCLNT_BUFFERFLAGS_SILENT = 0x2,\n    AUDCLNT_BUFFERFLAGS_TIMESTAMP_ERROR = 0x4\n};\n\n[\n    local,\n    pointer_default(unique),\n    uuid(1cb9ad4c-dbfa-4c32-b178-c2f568a703b2),\n    object,\n]\ninterface IAudioClient : IUnknown\n{\n    HRESULT Initialize(\n        [in] AUDCLNT_SHAREMODE ShareMode,\n        [in] DWORD StreamFlags,\n        [in] REFERENCE_TIME hnsBufferDuration,\n        [in] REFERENCE_TIME hnsPeriodicity,\n        [in] const WAVEFORMATEX *pFormat,\n        [in] LPCGUID AudioSessionGuid\n    );\n    HRESULT GetBufferSize(\n        [out] UINT32 *pNumBufferFrames\n    );\n    HRESULT GetStreamLatency(\n        [out] REFERENCE_TIME *phnsLatency\n    );\n    HRESULT GetCurrentPadding(\n        [out] UINT32 *pNumPaddingFrames\n    );\n    HRESULT IsFormatSupported(\n        [in] AUDCLNT_SHAREMODE ShareMode,\n        [in] const WAVEFORMATEX *pFormat,\n        [out,unique] WAVEFORMATEX **ppClosestMatch\n    );\n    HRESULT GetMixFormat(\n        [out] WAVEFORMATEX **ppDeviceFormat\n    );\n    HRESULT GetDevicePeriod(\n        [out] REFERENCE_TIME *phnsDefaultDevicePeriod,\n        [out] REFERENCE_TIME *phnsMinimumDevicePeriod\n    );\n    HRESULT Start(void);\n    HRESULT Stop(void);\n    HRESULT Reset(void);\n    HRESULT SetEventHandle([in] HANDLE eventHandle);\n    HRESULT GetService(\n        [in] REFIID riid,\n        [iid_is(riid),out] void **ppv\n    );\n}\n\n[\n    local,\n    pointer_default(unique),\n    uuid(f294acfc-3146-4483-a7bf-addca7c260e2),\n    object,\n]\ninterface IAudioRenderClient : IUnknown\n{\n    HRESULT GetBuffer(\n        [in] UINT32 NumFramesRequested,\n        [out] BYTE **ppData\n    );\n    HRESULT ReleaseBuffer(\n        [in] UINT32 NumFramesWritten,\n        [in] DWORD dwFlags\n    );\n}\n\n[\n    local,\n    pointer_default(unique),\n    uuid(c8adbd64-e71e-48a0-a4de-185c395cd317),\n    object,\n]\ninterface IAudioCaptureClient : IUnknown\n{\n    HRESULT GetBuffer(\n        [out] BYTE **ppData,\n        [out] UINT32 *pNumFramesToRead,\n        [out] DWORD *pdwFlags,\n        [unique,out] UINT64 *pu64DevicePosition,\n        [unique,out] UINT64 *pu64QPCPosition\n    );\n    HRESULT ReleaseBuffer(\n        [in] UINT32 NumFramesRead\n    );\n    HRESULT GetNextPacketSize(\n        [out] UINT32 *pNumFramesInNextPacket\n    );\n}\n\ncpp_quote(\"#define AUDIOCLOCK_CHARACTERISTIC_FIXED_FREQ 0x00000001\")\n\n[\n    local,\n    pointer_default(unique),\n    uuid(\"cd63314f-3fba-4a1b-812c-ef96358728e7\"),\n    object,\n]\ninterface IAudioClock : IUnknown\n{\n    HRESULT GetFrequency(\n        [out] UINT64 *pu64Frequency\n    );\n    HRESULT GetPosition(\n        [out] UINT64 *pu64Position,\n        [out,unique] UINT64 *pu64QPCPosition\n    );\n    HRESULT GetCharacteristics(\n        [out] DWORD *pdwCharacteristics\n    );\n}\n\n[\n    local,\n    pointer_default(unique),\n    uuid(\"6f49ff73-6727-49ac-a008-d98cf5e70048\"),\n    object,\n]\ninterface IAudioClock2 : IUnknown\n{\n    HRESULT GetPosition(\n        [out] UINT64 *DevicePosition,\n        [out,unique] UINT64 *QPCPosition\n    );\n}\n\n[\n    local,\n    pointer_default(unique),\n    uuid(\"f6e4c0a0-46d9-4fb9-be21-57a3ef2b626c\"),\n    object,\n]\ninterface IAudioClockAdjustment : IUnknown\n{\n    HRESULT SetSampleRate(\n        [in] float flSampleRate\n    );\n}\n\n[\n    local,\n    pointer_default(unique),\n    uuid(\"87ce5498-68d6-44e5-9215-6da47ef883d8\"),\n    object,\n]\ninterface ISimpleAudioVolume : IUnknown\n{\n    HRESULT SetMasterVolume(\n        [in] float fLevel,\n        [unique,in] LPCGUID EventContext\n    );\n    HRESULT GetMasterVolume(\n        [out] float *pfLevel\n    );\n    HRESULT SetMute(\n        [in] const BOOL bMute,\n        [unique,in] LPCGUID EventContext\n    );\n    HRESULT GetMute(\n        [out] BOOL *pbMute\n    );\n}\n\n[\n    local,\n    pointer_default(unique),\n    uuid(\"93014887-242d-4068-8a15-cf5e93b90fe3\"),\n    object,\n]\ninterface IAudioStreamVolume : IUnknown\n{\n    HRESULT GetChannelCount(\n        [out] UINT32 *pdwCount\n    );\n    HRESULT SetChannelVolume(\n        [in] UINT32 dwIndex,\n        [in] const float fLevel\n    );\n    HRESULT GetChannelVolume(\n        [in] UINT32 dwIndex,\n        [out] float *pfLevel\n    );\n    HRESULT SetAllVolumes(\n        [in] UINT32 dwCount,\n        [size_is(dwCount),in] const float *pfVolumes\n    );\n    HRESULT GetAllVolumes(\n        [in] UINT32 dwCount,\n        [size_is(dwCount),out] float *pfVolumes\n    );\n}\n\n[\n    local,\n    pointer_default(unique),\n    uuid(\"1c158861-b533-4b30-b1cf-e853e51c59b8\"),\n    object,\n]\ninterface IChannelAudioVolume : IUnknown\n{\n    HRESULT GetChannelCount(\n        [out] UINT32 *pdwCount\n    );\n    HRESULT SetChannelVolume(\n        [in] UINT32 dwIndex,\n        [in] const float fLevel,\n        [unique,in] LPCGUID EventContext\n    );\n    HRESULT GetChannelVolume(\n        [in] UINT32 dwIndex,\n        [out] float *pfLevel\n    );\n    HRESULT SetAllVolumes(\n        [in] UINT32 dwCount,\n        [size_is(dwCount),in] const float *pfVolumes,\n        [unique,in] LPCGUID EventContext\n    );\n    HRESULT GetAllVolumes(\n        [in] UINT32 dwCount,\n        [size_is(dwCount),out] float *pfVolumes\n    );\n}\n\ncpp_quote(\"#define AUDCLNT_ERR(n) MAKE_HRESULT(SEVERITY_ERROR, FACILITY_AUDCLNT, n)\")\ncpp_quote(\"#define AUDCLNT_SUCCESS(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_AUDCLNT, n)\")\ncpp_quote(\"#define AUDCLNT_E_NOT_INITIALIZED AUDCLNT_ERR(1)\")\ncpp_quote(\"#define AUDCLNT_E_ALREADY_INITIALIZED AUDCLNT_ERR(2)\")\ncpp_quote(\"#define AUDCLNT_E_WRONG_ENDPOINT_TYPE AUDCLNT_ERR(3)\")\ncpp_quote(\"#define AUDCLNT_E_DEVICE_INVALIDATED AUDCLNT_ERR(4)\")\ncpp_quote(\"#define AUDCLNT_E_NOT_STOPPED AUDCLNT_ERR(5)\")\ncpp_quote(\"#define AUDCLNT_E_BUFFER_TOO_LARGE AUDCLNT_ERR(6)\")\ncpp_quote(\"#define AUDCLNT_E_OUT_OF_ORDER AUDCLNT_ERR(7)\")\ncpp_quote(\"#define AUDCLNT_E_UNSUPPORTED_FORMAT AUDCLNT_ERR(8)\")\ncpp_quote(\"#define AUDCLNT_E_INVALID_SIZE AUDCLNT_ERR(9)\")\ncpp_quote(\"#define AUDCLNT_E_DEVICE_IN_USE AUDCLNT_ERR(0x0a)\")\ncpp_quote(\"#define AUDCLNT_E_BUFFER_OPERATION_PENDING AUDCLNT_ERR(0x0b)\")\ncpp_quote(\"#define AUDCLNT_E_THREAD_NOT_REGISTERED AUDCLNT_ERR(0x0c)\")\n/* Not defined? cpp_quote(\"#define AUDCLNT_E_UNKNOWN_XXX1 AUDCLNT_ERR(0x0d)\") */\ncpp_quote(\"#define AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED AUDCLNT_ERR(0x0e)\")\ncpp_quote(\"#define AUDCLNT_E_ENDPOINT_CREATE_FAILED AUDCLNT_ERR(0x0f)\")\ncpp_quote(\"#define AUDCLNT_E_SERVICE_NOT_RUNNING AUDCLNT_ERR(0x10)\")\ncpp_quote(\"#define AUDCLNT_E_EVENTHANDLE_NOT_EXPECTED AUDCLNT_ERR(0x11)\")\ncpp_quote(\"#define AUDCLNT_E_EXCLUSIVE_MODE_ONLY AUDCLNT_ERR(0x12)\")\ncpp_quote(\"#define AUDCLNT_E_BUFDURATION_PERIOD_NOT_EQUAL AUDCLNT_ERR(0x13)\")\ncpp_quote(\"#define AUDCLNT_E_EVENTHANDLE_NOT_SET AUDCLNT_ERR(0x14)\")\ncpp_quote(\"#define AUDCLNT_E_INCORRECT_BUFFER_SIZE AUDCLNT_ERR(0x15)\")\ncpp_quote(\"#define AUDCLNT_E_BUFFER_SIZE_ERROR AUDCLNT_ERR(0x16)\")\ncpp_quote(\"#define AUDCLNT_E_CPUUSAGE_EXCEEDED AUDCLNT_ERR(0x17)\")\ncpp_quote(\"#define AUDCLNT_E_BUFFER_ERROR AUDCLNT_ERR(0x18)\")\ncpp_quote(\"#define AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED AUDCLNT_ERR(0x19)\")\n/* Hex fail */\ncpp_quote(\"#define AUDCLNT_E_INVALID_DEVICE_PERIOD AUDCLNT_ERR(0x20)\")\ncpp_quote(\"#define AUDCLNT_E_INVALID_STREAM_FLAG AUDCLNT_ERR(0x021)\")\ncpp_quote(\"#define AUDCLNT_E_ENDPOINT_OFFLOAD_NOT_CAPABLE AUDCLNT_ERR(0x022)\")\ncpp_quote(\"#define AUDCLNT_E_OUT_OF_OFFLOAD_RESOURCES AUDCLNT_ERR(0x023)\")\ncpp_quote(\"#define AUDCLNT_E_OFFLOAD_MODE_ONLY AUDCLNT_ERR(0x024)\")\ncpp_quote(\"#define AUDCLNT_E_NONOFFLOAD_MODE_ONLY AUDCLNT_ERR(0x025)\")\ncpp_quote(\"#define AUDCLNT_E_RESOURCES_INVALIDATED AUDCLNT_ERR(0x026)\")\n\ncpp_quote(\"#define AUDCLNT_S_BUFFER_EMPTY AUDCLNT_SUCCESS(0x1)\")\ncpp_quote(\"#define AUDCLNT_S_THREAD_ALREADY_REGISTERED AUDCLNT_SUCCESS(0x2)\")\ncpp_quote(\"#define AUDCLNT_S_POSITION_STALLED AUDCLNT_SUCCESS(0x3)\")\n"
  },
  {
    "path": "wine/windows/audiopolicy.idl",
    "content": "/*\n * Core Audio audio policy definitions\n *\n * Copyright 2009 Maarten Lankhorst\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"propidl.idl\";\nimport \"audiosessiontypes.h\";\nimport \"audioclient.idl\";\n\ninterface IAudioSessionEvents;\ninterface IAudioSessionControl;\ninterface IAudioSessionControl2;\ninterface IAudioSessionManager;\ninterface IAudioVolumeDuckNotification;\ninterface IAudioSessionNotification;\ninterface IAudioSessionEnumerator;\ninterface IAudioSessionManager2;\n\ntypedef enum AudioSessionDisconnectReason /*[local]*/\n{\n    DisconnectReasonDeviceRemoval = 0,\n    DisconnectReasonServerShutdown,\n    DisconnectReasonFormatChanged,\n    DisconnectReasonSessionLogoff,\n    DisconnectReasonSessionDisconnected,\n    DisconnectReasonExclusiveModeOverride,\n} AudioSessionDisconnectReason;\n\n[\n    local,\n    uuid(24918acc-64b3-37c1-8ca9-74a66e9957a8),\n    pointer_default(unique),\n    object\n]\ninterface IAudioSessionEvents : IUnknown\n{\n    HRESULT OnDisplayNameChanged(\n        [string,in] LPCWSTR NewDisplayName,\n        [in] LPCGUID EventContext\n    );\n    HRESULT OnIconPathChanged(\n        [string,in] LPCWSTR NewIconPath,\n        [in] LPCGUID EventContext\n    );\n    HRESULT OnSimpleVolumeChanged(\n        [in] float NewVolume,\n        [in] BOOL NewMute,\n        [in] LPCGUID EventContext\n    );\n    HRESULT OnChannelVolumeChanged(\n        [in] DWORD ChannelCount,\n        [size_is(ChannelCount),in] float *NewChannelVolumeArray,\n        [in] DWORD ChangedChannel,\n        [in] LPCGUID EventContext\n    );\n    HRESULT OnGroupingParamChanged(\n        [in] LPCGUID NewGroupingParam,\n        [in] LPCGUID EventContext\n    );\n    HRESULT OnStateChanged(\n        [in] AudioSessionState NewState\n    );\n    HRESULT OnSessionDisconnected(\n        [in] AudioSessionDisconnectReason DisconnectReason\n    );\n}\n\n[\n    local,\n    uuid(f4b1a599-7266-4319-a8ca-e70acb11e8cd),\n    pointer_default(unique),\n    object\n]\ninterface IAudioSessionControl : IUnknown\n{\n    HRESULT GetState(\n        [out] AudioSessionState *pRetVal\n    );\n    HRESULT GetDisplayName(\n        [string,out] LPWSTR *pRetVal\n    );\n    HRESULT SetDisplayName(\n        [string,in] LPCWSTR DisplayName,\n        [unique,in] LPCGUID EventContext\n    );\n    HRESULT GetIconPath(\n        [string,out] LPWSTR *pRetVal\n    );\n    HRESULT SetIconPath(\n        [string,in] LPCWSTR Value,\n        [unique,in] LPCGUID EventContext\n    );\n    HRESULT GetGroupingParam(\n        [out] GUID *pRetVal\n    );\n    HRESULT SetGroupingParam(\n        [in] LPCGUID Override,\n        [unique,in] LPCGUID EventContext\n    );\n    HRESULT RegisterAudioSessionNotification(\n        [in] IAudioSessionEvents *NewNotifications\n    );\n    HRESULT UnregisterAudioSessionNotification(\n        [in] IAudioSessionEvents *NewNotifications\n    );\n}\n\n[\n    local,\n    uuid(bfb7ff88-7239-4fc9-8fa2-07c950be9c6d),\n    pointer_default(unique),\n    object\n]\ninterface IAudioSessionControl2 : IAudioSessionControl\n{\n    HRESULT GetSessionIdentifier(\n        [string,out] LPWSTR *pRetVal\n    );\n    HRESULT GetSessionInstanceIdentifier(\n        [string,out] LPWSTR *pRetVal\n    );\n    HRESULT GetProcessId(\n        [out] DWORD *pRetVal\n    );\n    HRESULT IsSystemSoundsSession(void);\n    HRESULT SetDuckingPreferences(\n        [in] BOOL optOut\n    );\n}\n\n[\n    local,\n    uuid(bfa971f1-4d5e-40bb-935e-967039bfbee4),\n    pointer_default(unique),\n    object\n]\ninterface IAudioSessionManager : IUnknown\n{\n    HRESULT GetAudioSessionControl(\n        [in] LPCGUID AudioSessionGuid,\n        [in] DWORD StreamFlags,\n        [out] IAudioSessionControl **SessionControl\n    );\n    HRESULT GetSimpleAudioVolume(\n        [in] LPCGUID AudioSessionGuid,\n        [in] DWORD StreamFlags,\n        [out] ISimpleAudioVolume **AudioVolume\n    );\n}\n\n[\n    local,\n    uuid(c3b284d4-6d39-4359-b3cf-b56ddb3bb39c),\n    pointer_default(unique),\n    object\n]\ninterface IAudioVolumeDuckNotification : IUnknown\n{\n    HRESULT OnVolumeDuckNotification(\n        [in] LPCWSTR sessionID,\n        [in] UINT32 countCommunicationSessions\n    );\n    HRESULT OnVolumeUnduckNotification(\n        [in] LPCWSTR sessionID\n    );\n}\n\n[\n    local,\n    uuid(641dd20b-4d41-49cc-aba3-174b9477bb08),\n    pointer_default(unique),\n    object\n]\ninterface IAudioSessionNotification : IUnknown\n{\n    HRESULT OnSessionCreated(\n        [in] IAudioSessionControl *NewSession\n    );\n}\n\n[\n    local,\n    uuid(e2f5bb11-0570-40ca-acdd-3aa01277dee8),\n    pointer_default(unique),\n    object\n]\ninterface IAudioSessionEnumerator : IUnknown\n{\n    HRESULT GetCount(\n        [out] INT *SessionCount\n    );\n    HRESULT GetSession(\n        [in] INT SessionCount,\n        [out] IAudioSessionControl **Session\n    );\n}\n\n[\n    local,\n    uuid(77aa99a0-1bd6-484f-8bc7-2c654c9a9b6f),\n    pointer_default(unique),\n    object\n]\ninterface IAudioSessionManager2 : IAudioSessionManager\n{\n    HRESULT GetSessionEnumerator(\n        [retval,out] IAudioSessionEnumerator **SessionEnum\n    );\n    HRESULT RegisterSessionNotification(\n        [in] IAudioSessionNotification *SessionNotification\n    );\n    HRESULT UnregisterSessionNotification(\n        [in] IAudioSessionNotification *SessionNotification\n    );\n    HRESULT RegisterDuckNotification(\n        [string,in] LPCWSTR sessionID,\n        [in] IAudioVolumeDuckNotification *duckNotification\n    );\n    HRESULT UnregisterDuckNotification(\n        [in] IAudioVolumeDuckNotification *duckNotification\n    );\n}\n"
  },
  {
    "path": "wine/windows/audiosessiontypes.h",
    "content": "\n/*\n * Core Audio audio session types definitions\n *\n * Copyright 2009 Maarten Lankhorst\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n */\n\n#ifndef __AUDIOSESSIONTYPES__\n#define __AUDIOSESSIONTYPES__\n\ntypedef enum _AUDCLNT_SHAREMODE\n{\n    AUDCLNT_SHAREMODE_SHARED,\n    AUDCLNT_SHAREMODE_EXCLUSIVE,\n} AUDCLNT_SHAREMODE;\n\n#define AUDCLNT_STREAMFLAGS_CROSSPROCESS 0x00010000\n#define AUDCLNT_STREAMFLAGS_LOOPBACK 0x00020000\n#define AUDCLNT_STREAMFLAGS_EVENTCALLBACK 0x00040000\n#define AUDCLNT_STREAMFLAGS_NOPERSIST 0x00080000\n#define AUDCLNT_STREAMFLAGS_RATEADJUST 0x00100000\n#define AUDCLNT_SESSIONFLAGS_EXPIREWHENUNOWNED 0x10000000\n#define AUDCLNT_SESSIONFLAGS_DISPLAY_HIDE 0x20000000\n#define AUDCLNT_SESSIONFLAGS_DISPLAY_HIDEWHENEXPIRED 0x40000000\n\ntypedef enum _AudioSessionState\n{\n    AudioSessionStateInactive = 0,\n    AudioSessionStateActive,\n    AudioSessionStateExpired,\n} AudioSessionState;\n\ntypedef enum _AUDIO_STREAM_CATEGORY\n{\n    AudioCategory_Other = 0,\n    AudioCategory_ForegroundOnlyMedia,\n    AudioCategory_BackgroundCapableMedia,\n    AudioCategory_Communications,\n    AudioCategory_Alerts,\n    AudioCategory_SoundEffects,\n    AudioCategory_GameEffects,\n    AudioCategory_GameMedia\n} AUDIO_STREAM_CATEGORY;\n\n#endif\n"
  },
  {
    "path": "wine/windows/austream.idl",
    "content": "/*\n * Copyright 2004 Christian Costa\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\nimport \"mmstream.idl\";\n\ncpp_quote(\"#if 0\")\ntypedef struct tWAVEFORMATEX WAVEFORMATEX;\ncpp_quote (\"#endif\")\n\ninterface IAudioMediaStream;\ninterface IAudioStreamSample;\ninterface IMemoryData;\ninterface IAudioData;\n\n[\nobject,\nlocal,\nuuid(f7537560-a3be-11d0-8212-00c04fc32c45),\npointer_default(unique)\n]\ninterface IAudioMediaStream : IMediaStream\n{\n\tHRESULT GetFormat(\n\t\t[out] /*[optional]*/ WAVEFORMATEX *pWaveFormatCurrent\n\t);\n\n\tHRESULT SetFormat(\n\t\t[in] const WAVEFORMATEX *lpWaveFormat);\n\n\tHRESULT CreateSample(\n\t\t[in] IAudioData *pAudioData,\n\t\t[in] DWORD dwFlags,\n\t\t[out] IAudioStreamSample **ppSample\n\t);\n}\n\n\n[\nobject,\nlocal,\nuuid(345fee00-aba5-11d0-8212-00c04fc32c45),\npointer_default(unique)\n]\ninterface IAudioStreamSample : IStreamSample\n{\n\tHRESULT GetAudioData(\n\t\t[out] IAudioData **ppAudio\n\t);\n}\n\n\n[\nobject,\nlocal,\nuuid(327fc560-af60-11d0-8212-00c04fc32c45),\npointer_default(unique)\n]\ninterface IMemoryData : IUnknown\n{\n\tHRESULT SetBuffer(\n\t\t[in] DWORD cbSize,\n\t\t[in] BYTE *pbData,\n\t\t[in] DWORD dwFlags\n\t);\n\n\tHRESULT GetInfo(\n\t\t[out] DWORD *pdwLength,\n\t\t[out] BYTE **ppbData,\n\t\t[out] DWORD *pcbActualData\n\t);\n\tHRESULT SetActual(\n\t\t[in] DWORD cbDataValid\n\t);\n}\n\n\n[\nobject,\nlocal,\nuuid(54c719c0-af60-11d0-8212-00c04fc32c45),\npointer_default(unique)\n]\ninterface IAudioData : IMemoryData\n{\n\tHRESULT GetFormat(\n\t\t[out] /*[optional]*/ WAVEFORMATEX *pWaveFormatCurrent\n\t);\n\n\tHRESULT SetFormat(\n\t\t[in] const WAVEFORMATEX *lpWaveFormat\n\t);\n}\n"
  },
  {
    "path": "wine/windows/authz.h",
    "content": "/*\n * Copyright (C) 2016 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __AUTHZ_H__\n#define __AUTHZ_H__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nDECLARE_HANDLE(AUTHZ_ACCESS_CHECK_RESULTS_HANDLE);\nDECLARE_HANDLE(AUTHZ_CLIENT_CONTEXT_HANDLE);\nDECLARE_HANDLE(AUTHZ_RESOURCE_MANAGER_HANDLE);\nDECLARE_HANDLE(AUTHZ_AUDIT_EVENT_HANDLE);\n\ntypedef AUTHZ_ACCESS_CHECK_RESULTS_HANDLE *PAUTHZ_ACCESS_CHECK_RESULTS_HANDLE;\ntypedef AUTHZ_CLIENT_CONTEXT_HANDLE *PAUTHZ_CLIENT_CONTEXT_HANDLE;\n\ntypedef BOOL (CALLBACK *PFN_AUTHZ_COMPUTE_DYNAMIC_GROUPS) (\n        AUTHZ_CLIENT_CONTEXT_HANDLE handle, void *args,\n        PSID_AND_ATTRIBUTES *sid_attr_array, DWORD *sid_cnt,\n        PSID_AND_ATTRIBUTES *restricted_sid_attr_array,\n        DWORD *restricted_sid_cnt);\n\ntypedef BOOL (CALLBACK *PFN_AUTHZ_DYNAMIC_ACCESS_CHECK) (\n        AUTHZ_CLIENT_CONTEXT_HANDLE handle, PACE_HEADER ace,\n        void *args, BOOL *ace_applicable);\n\ntypedef VOID (CALLBACK *PFN_AUTHZ_FREE_DYNAMIC_GROUPS) (\n        PSID_AND_ATTRIBUTES sid_attr_array);\n\ntypedef struct _AUTHZ_REGISTRATION_OBJECT_TYPE_NAME_OFFSET\n{\n    WCHAR *szObjectTypeName;\n    DWORD dwOffset;\n} AUTHZ_REGISTRATION_OBJECT_TYPE_NAME_OFFSET, *PAUTHZ_REGISTRATION_OBJECT_TYPE_NAME_OFFSET;\n\ntypedef struct _AUTHZ_ACCESS_REQUEST\n{\n    ACCESS_MASK       DesiredAccess;\n    PSID              PrincipalSelfSid;\n    POBJECT_TYPE_LIST ObjectTypeList;\n    DWORD             ObjectTypeListLength;\n    void              *OptionalArguments;\n} AUTHZ_ACCESS_REQUEST, *PAUTHZ_ACCESS_REQUEST;\n\n\n#define AUTHZ_GENERATE_SUCCESS_AUDIT 0x1\n#define AUTHZ_GENERATE_FAILURE_AUDIT 0x2\n\ntypedef struct _AUTHZ_ACCESS_REPLY\n{\n    DWORD       ResultListLength;\n    ACCESS_MASK *GrantedAccessMask;\n    DWORD       *SaclEvaluationResults;\n    DWORD       *Error;\n} AUTHZ_ACCESS_REPLY, *PAUTHZ_ACCESS_REPLY;\n\ntypedef struct _AUTHZ_SOURCE_SCHEMA_REGISTRATION\n{\n    DWORD dwFlags;\n    WCHAR *szEventSourceName;\n    WCHAR *szEventMessageFile;\n    WCHAR *szEventSourceXmlSchemaFile;\n    WCHAR *szEventAccessStringsFile;\n    WCHAR *szExecutableImagePath;\n\n    union\n    {\n        void *pReserved;\n        GUID *pProviderGuid;\n    } DUMMYUNIONNAME;\n\n    DWORD dwObjectTypeNameCount;\n    AUTHZ_REGISTRATION_OBJECT_TYPE_NAME_OFFSET ObjectTypeNames[ANYSIZE_ARRAY];\n} AUTHZ_SOURCE_SCHEMA_REGISTRATION, *PAUTHZ_SOURCE_SCHEMA_REGISTRATION;\n\nBOOL WINAPI AuthzInitializeResourceManager(DWORD flags, PFN_AUTHZ_DYNAMIC_ACCESS_CHECK access_checker,\n        PFN_AUTHZ_COMPUTE_DYNAMIC_GROUPS compute_dyn_groups, PFN_AUTHZ_FREE_DYNAMIC_GROUPS free_dyn_groups,\n        const WCHAR *managername, AUTHZ_RESOURCE_MANAGER_HANDLE *handle );\n\nBOOL WINAPI AuthzInstallSecurityEventSource(DWORD flags, AUTHZ_SOURCE_SCHEMA_REGISTRATION *registration);\n\nBOOL WINAPI AuthzAccessCheck(DWORD flags, AUTHZ_CLIENT_CONTEXT_HANDLE client_context,\n        AUTHZ_ACCESS_REQUEST *request, AUTHZ_AUDIT_EVENT_HANDLE audit_event,\n        PSECURITY_DESCRIPTOR security, PSECURITY_DESCRIPTOR *optional_security,\n        DWORD optional_security_count, AUTHZ_ACCESS_REPLY *reply,\n        AUTHZ_ACCESS_CHECK_RESULTS_HANDLE *access_check_result);\n\nBOOL WINAPI AuthzFreeContext(AUTHZ_CLIENT_CONTEXT_HANDLE client_context);\n\nBOOL WINAPI AuthzInitializeContextFromSid(DWORD flags, PSID sid,\n        AUTHZ_RESOURCE_MANAGER_HANDLE resource_manager, LARGE_INTEGER *expire_time,\n        LUID id, void *dynamic_group, AUTHZ_CLIENT_CONTEXT_HANDLE *client_context);\n\nBOOL WINAPI AuthzInitializeContextFromToken(DWORD flags, HANDLE token_handle,\n        AUTHZ_RESOURCE_MANAGER_HANDLE resource_manager, LARGE_INTEGER *expire_time,\n        LUID id, void *dynamic_group, AUTHZ_CLIENT_CONTEXT_HANDLE *client_context);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/aviriff.h",
    "content": "/*\n * Copyright (C) 2003 Robert Shearman\n * Copyright (C) 2008 Maarten Lankhorst\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef AVIRIFF_H\n#define AVIRIFF_H\n\n/* All definitions here are packed structures of on-disk formats */\n#include <pshpack2.h>\n\ntypedef struct _riffchunk\n{\n    FOURCC fcc;\n    DWORD cb;\n} RIFFCHUNK, * LPRIFFCHUNK;\n\ntypedef struct _rifflist\n{\n    FOURCC fcc;\n    DWORD cb;\n    FOURCC fccListType;\n} RIFFLIST, * LPRIFFLIST;\n\n#define FCC( ch0, ch1, ch2, ch3 ) \\\n    ( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) <<  8 ) | \\\n    ( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) )\n\n#define RIFFROUND(cb) ((cb) + ((cb)&1))\n#define RIFFNEXT(pChunk) (LPRIFFCHUNK)((LPBYTE)(pChunk)+sizeof(RIFFCHUNK)+RIFFROUND(((LPRIFFCHUNK)pChunk)->cb))\n\n/* flags for dwFlags member of AVIMAINHEADER */\n#define AVIF_HASINDEX       0x00000010\n#define AVIF_MUSTUSEINDEX   0x00000020\n#define AVIF_ISINTERLEAVED  0x00000100\n#define AVIF_TRUSTCKTYPE    0x00000800\n#define AVIF_WASCAPTUREFILE 0x00010000\n#define AVIF_COPYRIGHTED    0x00020000\n\n#define ckidMAINAVIHEADER FCC('a','v','i','h')\ntypedef struct _avimainheader\n{\n    FOURCC fcc;\n    DWORD cb;\n    DWORD dwMicroSecPerFrame;\n    DWORD dwMaxBytesPerSec;\n    DWORD dwPaddingGranularity;\n    DWORD dwFlags;\n    DWORD dwTotalFrames;\n    DWORD dwInitialFrames;\n    DWORD dwStreams;\n    DWORD dwSuggestedBufferSize;\n    DWORD dwWidth;\n    DWORD dwHeight;\n    DWORD dwReserved[4];\n} AVIMAINHEADER;\n\n#define ckidODML FCC('o','d','m','l')\n#define ckidAVIEXTHEADER  FCC('d','m','l','h')\ntypedef struct _aviextheader\n{\n    FOURCC fcc;\n    DWORD cb;\n    DWORD dwGrandFrames;\n    DWORD dwFuture[61];\n} AVIEXTHEADER;\n\n#define ckidSTREAMLIST FCC('s','t','r','l')\n\n/* flags for dwFlags member of AVISTREAMHEADER */\n#define AVISF_DISABLED         0x00000001\n#define AVISF_VIDEO_PALCHANGES 0x00010000\n\n#ifndef ckidSTREAMHEADER\n#define ckidSTREAMHEADER FCC('s','t','r','h')\n#endif\n\n#ifndef streamtypeVIDEO\n#define streamtypeVIDEO FCC('v','i','d','s')\n#define streamtypeAUDIO FCC('a','u','d','s')\n#define streamtypeMIDI FCC('m','i','d','s')\n#define streamtypeTEXT FCC('t','x','t','s')\n#endif\n\ntypedef struct _avistreamheader\n{\n    FOURCC fcc;\n    DWORD cb;\n    FOURCC fccType;\n    FOURCC fccHandler;\n    DWORD dwFlags;\n    WORD wPriority;\n    WORD wLanguage;\n    DWORD dwInitialFrames;\n    DWORD dwScale;\n    DWORD dwRate;\n    DWORD dwStart;\n    DWORD dwLength;\n    DWORD dwSuggestedBufferSize;\n    DWORD dwQuality;\n    DWORD dwSampleSize;\n    struct\n    {\n        short int left;\n        short int top;\n        short int right;\n        short int bottom;\n    } rcFrame;\n} AVISTREAMHEADER;\n\n#ifndef ckidSTREAMFORMAT\n#define ckidSTREAMFORMAT FCC('s','t','r','f')\n#endif\n#define ckidAVIOLDINDEX FCC('i','d','x','1')\n\n/* flags for dwFlags member of _avioldindex_entry */\n#define AVIIF_LIST       0x00000001\n#define AVIIF_KEYFRAME   0x00000010\n#define AVIIF_NO_TIME    0x00000100\n#define AVIIF_COMPRESSOR 0x0FFF0000\n\ntypedef struct _avioldindex\n{\n    FOURCC fcc;\n    DWORD cb;\n    struct _avioldindex_entry\n    {\n        DWORD dwChunkId;\n        DWORD dwFlags;\n        DWORD dwOffset;\n        DWORD dwSize;\n    } aIndex[ANYSIZE_ARRAY];\n} AVIOLDINDEX;\n\ntypedef union _timecode\n{\n    struct\n    {\n        WORD wFrameRate;\n        WORD wFrameFract;\n        LONG cFrames;\n    } DUMMYSTRUCTNAME;\n    DWORDLONG qw;\n} TIMECODE;\n\n#define TIMECODE_RATE_30DROP 0\n\n/* flags for dwSMPTEflags member of TIMECODEDATA */\n#define TIMECODE_SMPTE_BINARY_GROUP 0x07\n#define TIMECODE_SMPTE_COLOR_FRAME  0x08\n\ntypedef struct _timecodedata\n{\n    TIMECODE time;\n    DWORD dwSMPTEflags;\n    DWORD dwUser;\n} TIMECODEDATA;\n\n#define AVI_INDEX_OF_INDEXES      0x00\n#define AVI_INDEX_OF_CHUNKS       0x01\n#define AVI_INDEX_OF_TIMED_CHUNKS 0x02\n#define AVI_INDEX_OF_SUB_2FIELD   0x03\n#define AVI_INDEX_IS_DATA         0x80\n\n#define AVI_INDEX_SUB_DEFAULT     0x00\n#define AVI_INDEX_SUB_2FIELD      0x01\n\ntypedef struct _avimetaindex\n{\n    FOURCC fcc;\n    UINT cb;\n    WORD wLongsPerEntry;\n    BYTE bIndexSubType;\n    BYTE bIndexType;\n    DWORD nEntriesInUse;\n    DWORD dwChunkId;\n    DWORD dwReserved[3];\n    DWORD adwIndex[ANYSIZE_ARRAY];\n} AVIMETAINDEX;\n\n#define ckidAVISUPERINDEX FCC('i','n','d','x')\ntypedef struct _avisuperindex {\n    FOURCC fcc;\n    UINT cb;\n    WORD wLongsPerEntry;\n    BYTE bIndexSubType;\n    BYTE bIndexType;\n    DWORD nEntriesInUse;\n    DWORD dwChunkId;\n    DWORD dwReserved[3];\n    struct _avisuperindex_entry {\n        DWORDLONG qwOffset;\n        DWORD dwSize;\n        DWORD dwDuration;\n    } aIndex[ANYSIZE_ARRAY];\n} AVISUPERINDEX;\n\n#define AVISTDINDEX_DELTAFRAME (0x80000000)\n#define AVISTDINDEX_SIZEMASK (~0x80000000)\n\ntypedef struct _avistdindex_entry {\n    DWORD dwOffset;\n    DWORD dwSize;\n} AVISTDINDEX_ENTRY;\n\ntypedef struct _avistdindex {\n    FOURCC fcc;\n    UINT cb;\n    WORD wLongsPerEntry;\n    BYTE bIndexSubType;\n    BYTE bIndexType;\n    DWORD    nEntriesInUse;\n    DWORD    dwChunkId;\n    DWORDLONG qwBaseOffset;\n    DWORD    dwReserved_3;\n    AVISTDINDEX_ENTRY aIndex[ANYSIZE_ARRAY];\n} AVISTDINDEX;\n\ntypedef struct _avitimedindex_entry {\n    DWORD dwOffset;\n    DWORD dwSize;\n    DWORD dwDuration;\n} AVITIMEDINDEX_ENTRY;\n\ntypedef struct _avitimedindex {\n    FOURCC fcc;\n    UINT cb;\n    WORD wLongsPerEntry;\n    BYTE bIndexSubType;\n    BYTE bIndexType;\n    DWORD nEntriesInUse;\n    DWORD dwChunkId;\n    DWORDLONG qwBaseOffset;\n    DWORD dwReserved_3;\n    AVITIMEDINDEX_ENTRY aIndex[ANYSIZE_ARRAY];\n    /* DWORD adwTrailingFill[ANYSIZE_ARRAY]; */\n} AVITIMEDINDEX;\n\ntypedef struct _avitimecodeindex {\n    FOURCC fcc;\n    UINT cb;\n    WORD wLongsPerEntry;\n    BYTE bIndexSubType;\n    BYTE bIndexType;\n    DWORD nEntriesInUse;\n    DWORD dwChunkId;\n    DWORD dwReserved[3];\n    TIMECODEDATA aIndex[ANYSIZE_ARRAY];\n} AVITIMECODEINDEX;\n\ntypedef struct _avitcdlindex_entryA {\n    DWORD dwTick;\n    TIMECODE time;\n    DWORD dwSMPTEflags;\n    DWORD dwUser;\n    CHAR szReelId[12];\n} AVITCDLINDEX_ENTRYA;\n\ntypedef struct _avitcdlindex_entryW {\n    DWORD dwTick;\n    TIMECODE time;\n    DWORD dwSMPTEflags;\n    DWORD dwUser;\n    WCHAR szReelId[12];\n} AVITCDLINDEX_ENTRYW;\n\ntypedef struct _avitcdlindexA {\n    FOURCC fcc;\n    UINT cb;\n    WORD wLongsPerEntry;\n    BYTE bIndexSubType;\n    BYTE bIndexType;\n    DWORD nEntriesInUse;\n    DWORD dwChunkId;\n    DWORD dwReserved[3];\n    AVITCDLINDEX_ENTRYA aIndex[ANYSIZE_ARRAY];\n    /* DWORD adwTrailingFill[ANYSIZE_ARRAY]; */\n} AVITCDLINDEXA;\n\ntypedef struct _avitcdlindexW {\n    FOURCC fcc;\n    UINT cb;\n    WORD wLongsPerEntry;\n    BYTE bIndexSubType;\n    BYTE bIndexType;\n    DWORD nEntriesInUse;\n    DWORD dwChunkId;\n    DWORD dwReserved[3];\n    AVITCDLINDEX_ENTRYW aIndex[ANYSIZE_ARRAY];\n    /* DWORD adwTrailingFill[ANYSIZE_ARRAY]; */\n} AVITCDLINDEXW;\n\n#define AVITCDLINDEX_ENTRY WINELIB_NAME_AW(AVITCDLINDEX_ENTRY)\n#define AVITCDLINDEX WINELIB_NAME_AW(AVITCDLINDEX)\n\ntypedef struct _avifieldindex_chunk {\n    FOURCC fcc;\n    DWORD cb;\n    WORD wLongsPerEntry;\n    BYTE bIndexSubType;\n    BYTE bIndexType;\n    DWORD nEntriesInUse;\n    DWORD dwChunkId;\n    DWORDLONG qwBaseOffset;\n    DWORD dwReserved3;\n    struct _avifieldindex_entry {\n        DWORD dwOffset;\n        DWORD dwSize;\n        DWORD dwOffsetField2;\n    } aIndex[ANYSIZE_ARRAY];\n} AVIFIELDINDEX, * PAVIFIELDINDEX;\n\n#include <poppack.h>\n\n#endif  /* AVIRIFF_H */\n"
  },
  {
    "path": "wine/windows/avrt.h",
    "content": "/*\n * avrt definitions\n *\n * Copyright 2009 Maarten Lankhorst\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n */\n\n#ifndef _AVRT_\n#define _AVRT_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef enum _AVRT_PRIORITY\n{\n    AVRT_PRIORITY_LOW = -1,\n    AVRT_PRIORITY_NORMAL,\n    AVRT_PRIORITY_HIGH,\n    AVRT_PRIORITY_CRITICAL\n} AVRT_PRIORITY, *PAVRT_PRIORITY;\n\n/* Windows compiler is more lax */\n#define THREAD_ORDER_GROUP_INFINITE_TIMEOUT ((void*)((LONG_PTR)-1))\n\nHANDLE WINAPI AvSetMmThreadCharacteristicsA(LPCSTR TaskName, LPDWORD TaskIndex);\nHANDLE WINAPI AvSetMmThreadCharacteristicsW(LPCWSTR TaskName, LPDWORD TaskIndex);\n#define AvSetMmThreadCharacteristics WINELIB_NAME_AW(AvSetMmThreadCharacteristics)\n\nHANDLE WINAPI AvSetMmMaxThreadCharacteristicsA(LPCSTR FirstTask, LPCSTR SecondTask, LPDWORD TaskIndex);\nHANDLE WINAPI AvSetMmMaxThreadCharacteristicsW(LPCSTR FirstTask, LPCSTR SecondTask, LPDWORD TaskIndex);\n#define AvSetMmMaxThreadCharacteristics WINELIB_NAME_AW(AvSetMmMaxThreadCharacteristics)\n\nBOOL WINAPI AvRevertMmThreadCharacteristics(HANDLE AvrtHandle);\nBOOL WINAPI AvSetMmThreadPriority(HANDLE AvrtHandle, AVRT_PRIORITY Priority);\nBOOL WINAPI AvRtCreateThreadOrderingGroup(\n    PHANDLE Context, PLARGE_INTEGER Period,\n    GUID *ThreadOrderingGuid, PLARGE_INTEGER Timeout);\n\nBOOL WINAPI AvRtCreateThreadOrderingGroupExA(\n    PHANDLE Context, PLARGE_INTEGER Period,\n    GUID *ThreadOrderingGuid, PLARGE_INTEGER Timeout,\n    LPCSTR TaskName);\nBOOL WINAPI AvRtCreateThreadOrderingGroupExW(\n    PHANDLE Context, PLARGE_INTEGER Period,\n    GUID *ThreadOrderingGuid, PLARGE_INTEGER Timeout,\n    LPCSTR TaskName);\n#define AvRtCreateThreadOrderingGroupEx WINELIB_NAME_AW(AvRtCreateThreadOrderingGroupEx)\n\nBOOL WINAPI AvRtJoinThreadOrderingGroup(PHANDLE Context, GUID *ThreadOrderingGuid, BOOL Before);\nBOOL WINAPI AvRtWaitOnThreadOrderingGroup(HANDLE Context);\nBOOL WINAPI AvRtLeaveThreadOrderingGroup(HANDLE Context);\nBOOL WINAPI AvRtDeleteThreadOrderingGroup(HANDLE Context);\nBOOL WINAPI AvQuerySystemResponsiveness(HANDLE AvrtHandle, PULONG SystemResponsivenessValue);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /*_AVRT_*/\n"
  },
  {
    "path": "wine/windows/axcore.idl",
    "content": "/*\n * Copyright (C) 2002 Robert Shearman\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n#define CHARS_IN_GUID 39\ncpp_quote(\"#define CHARS_IN_GUID 39\")\n\n/* GetTimeFormat is defined in winnls.h as\n * either the W or A suffixed version */\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef GetTimeFormat\")\ncpp_quote(\"#endif\")\n\ntypedef struct _AMMediaType\n{\n    GUID       majortype;\n    GUID       subtype;\n    BOOL       bFixedSizeSamples;\n    BOOL       bTemporalCompression;\n    ULONG      lSampleSize;\n    GUID       formattype;\n    IUnknown * pUnk;\n    ULONG      cbFormat;\n    [size_is(cbFormat)] BYTE * pbFormat;\n} AM_MEDIA_TYPE;\n\ntypedef enum _PinDirection\n{\n    PINDIR_INPUT,\n    PINDIR_OUTPUT\n} PIN_DIRECTION;\n\n#define MAX_PIN_NAME    128\n#define MAX_FILTER_NAME 128\ncpp_quote(\"#define MAX_PIN_NAME    128\")\ncpp_quote(\"#define MAX_FILTER_NAME 128\")\n\ncpp_quote(\"#ifndef REFERENCE_TIME_DEFINED\")\ncpp_quote(\"#define REFERENCE_TIME_DEFINED\")\ntypedef LONGLONG REFERENCE_TIME;\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#ifndef REFTIME_DEFINED\")\ncpp_quote(\"#define REFTIME_DEFINED\")\ntypedef DOUBLE REFTIME;\ncpp_quote(\"#endif\")\n\ntypedef DWORD_PTR HSEMAPHORE;\ntypedef DWORD_PTR HEVENT;\n\ntypedef struct _AllocatorProperties\n{\n    long cBuffers;\n    long cbBuffer;\n    long cbAlign;\n    long cbPrefix;\n} ALLOCATOR_PROPERTIES;\n\ninterface IAMovieSetup;\ninterface IEnumFilters;\ninterface IEnumMediaTypes;\ninterface IEnumPins;\ninterface IBaseFilter;\ninterface IFilterGraph;\ninterface IMediaFilter;\ninterface IMediaSample;\ninterface IMemAllocator;\ninterface IMemAllocatorCallbackTemp;\ninterface IMemAllocatorNotifyCallbackTemp;\ninterface IMemInputPin;\ninterface IPin;\ninterface IReferenceClock;\n\n[\nobject,\nuuid(56a86891-0ad4-11ce-b03a-0020af0ba770),\npointer_default(unique)\n]\ninterface IPin : IUnknown\n{\n    typedef struct _PinInfo\n    {\n        IBaseFilter *pFilter;\n        PIN_DIRECTION dir;\n        WCHAR achName[MAX_PIN_NAME];\n    } PIN_INFO;\n\n    HRESULT Connect(\n        [in] IPin * pReceivePin,\n        [in] const AM_MEDIA_TYPE * pmt);\n\n    HRESULT ReceiveConnection(\n        [in] IPin * pConnector,\n        [in] const AM_MEDIA_TYPE *pmt);\n\n    HRESULT Disconnect(void);\n\n    HRESULT ConnectedTo(\n        [out] IPin **pPin);\n\n    HRESULT ConnectionMediaType(\n        [out] AM_MEDIA_TYPE *pmt);\n\n    HRESULT QueryPinInfo(\n        [out] PIN_INFO * pInfo);\n\n    HRESULT QueryDirection(\n        [out] PIN_DIRECTION *pPinDir);\n\n    HRESULT QueryId(\n        [out] LPWSTR * Id);\n\n    HRESULT QueryAccept(\n        [in] const AM_MEDIA_TYPE *pmt);\n\n    HRESULT EnumMediaTypes(\n        [out] IEnumMediaTypes **ppEnum);\n\n    HRESULT QueryInternalConnections(\n        [out] IPin* *apPin,\n        [in, out] ULONG *nPin);\n\n    HRESULT EndOfStream(void);\n\n    HRESULT BeginFlush(void);\n\n    HRESULT EndFlush(void);\n    HRESULT NewSegment(\n        [in] REFERENCE_TIME tStart,\n        [in] REFERENCE_TIME tStop,\n        [in] double dRate);\n}\n\ntypedef IPin *PPIN;\n\n[\nobject,\nuuid(56a86892-0ad4-11ce-b03a-0020af0ba770),\npointer_default(unique)\n]\ninterface IEnumPins : IUnknown\n{\n\n    HRESULT Next(\n        [in] ULONG cPins,\n        [out, size_is(cPins)] IPin ** ppPins,\n        [out] ULONG * pcFetched);\n\n    HRESULT Skip(\n        [in] ULONG cPins);\n\n    HRESULT Reset(void);\n\n    HRESULT Clone(\n        [out] IEnumPins **ppEnum);\n}\n\ntypedef IEnumPins *PENUMPINS;\n\n[\nobject,\nuuid(89c31040-846b-11ce-97d3-00aa0055595a),\npointer_default(unique)\n]\ninterface IEnumMediaTypes : IUnknown\n{\n    HRESULT Next(\n        [in] ULONG cMediaTypes,\n        [out, size_is(cMediaTypes)]\n             AM_MEDIA_TYPE ** ppMediaTypes,\n        [out] ULONG * pcFetched\n    );\n\n    HRESULT Skip(\n        [in] ULONG cMediaTypes);\n\n    HRESULT Reset(void);\n\n    HRESULT Clone(\n        [out] IEnumMediaTypes **ppEnum\n    );\n}\n\ntypedef IEnumMediaTypes *PENUMMEDIATYPES;\n\n[\nobject,\nuuid(56a8689f-0ad4-11ce-b03a-0020af0ba770),\npointer_default(unique)\n]\ninterface IFilterGraph : IUnknown\n{\n    HRESULT AddFilter(\n        [in] IBaseFilter * pFilter,\n        [in, string] LPCWSTR pName);\n\n    HRESULT RemoveFilter(\n        [in] IBaseFilter * pFilter);\n\n    HRESULT EnumFilters(\n        [out] IEnumFilters **ppEnum);\n\n    HRESULT FindFilterByName(\n        [in, string] LPCWSTR pName,\n        [out] IBaseFilter ** ppFilter);\n\n    HRESULT ConnectDirect(\n        [in] IPin * ppinOut,\n        [in] IPin * ppinIn,\n        [in, unique] const AM_MEDIA_TYPE* pmt);\n\n    HRESULT Reconnect(\n        [in] IPin * ppin);\n\n    HRESULT Disconnect(\n        [in] IPin * ppin);\n\n    HRESULT SetDefaultSyncSource(void);\n}\n\ntypedef IFilterGraph *PFILTERGRAPH;\n\n[\nobject,\nuuid(56a86893-0ad4-11ce-b03a-0020af0ba770),\npointer_default(unique)\n]\ninterface IEnumFilters : IUnknown\n{\n    HRESULT Next(\n        [in]  ULONG cFilters,\n        [out] IBaseFilter ** ppFilter,\n        [out] ULONG * pcFetched);\n\n\n    HRESULT Skip(\n        [in] ULONG cFilters);\n\n\n    HRESULT Reset(void);\n\n\n    HRESULT Clone(\n        [out] IEnumFilters **ppEnum);\n}\n\ntypedef IEnumFilters *PENUMFILTERS;\n\n[\nobject,\nuuid(56a86899-0ad4-11ce-b03a-0020af0ba770),\npointer_default(unique)\n]\ninterface IMediaFilter : IPersist\n{\n    typedef enum _FilterState\n    {\n        State_Stopped,\n        State_Paused,\n        State_Running\n    } FILTER_STATE;\n\n    HRESULT Stop(void);\n    HRESULT Pause(void);\n\n    HRESULT Run(REFERENCE_TIME tStart);\n\n    HRESULT GetState(\n        [in] DWORD dwMilliSecsTimeout,\n        [out] FILTER_STATE *State);\n\n    HRESULT SetSyncSource(\n        [in] IReferenceClock * pClock);\n\n    HRESULT GetSyncSource(\n        [out] IReferenceClock ** pClock);\n}\n\ntypedef IMediaFilter *PMEDIAFILTER;\n\n[\nobject,\nuuid(56a86895-0ad4-11ce-b03a-0020af0ba770),\npointer_default(unique)\n]\ninterface IBaseFilter : IMediaFilter\n{\n    typedef struct _FilterInfo\n    {\n        WCHAR achName[MAX_FILTER_NAME];\n        IFilterGraph * pGraph;\n    } FILTER_INFO;\n\n    HRESULT EnumPins(\n        [out] IEnumPins ** ppEnum);\n\n    HRESULT FindPin(\n        [in, string] LPCWSTR Id,\n        [out] IPin ** ppPin);\n\n    HRESULT QueryFilterInfo(\n        [out] FILTER_INFO * pInfo);\n\n    HRESULT JoinFilterGraph(\n        [in] IFilterGraph * pGraph,\n        [in, string] LPCWSTR pName);\n\n    HRESULT QueryVendorInfo(\n        [out, string] LPWSTR* pVendorInfo);\n}\n\ntypedef IBaseFilter *PFILTER;\n\n[\nobject,\nuuid(56a86897-0ad4-11ce-b03a-0020af0ba770),\npointer_default(unique)\n]\ninterface IReferenceClock : IUnknown\n{\n    HRESULT GetTime(\n        [out] REFERENCE_TIME *pTime);\n\n    HRESULT AdviseTime(\n        [in] REFERENCE_TIME baseTime,\n        [in] REFERENCE_TIME streamTime,\n        [in] HEVENT hEvent,\n        [out] DWORD_PTR * pdwAdviseCookie);\n\n    HRESULT AdvisePeriodic(\n        [in] REFERENCE_TIME startTime,\n        [in] REFERENCE_TIME periodTime,\n        [in] HSEMAPHORE hSemaphore,\n        [out] DWORD_PTR * pdwAdviseCookie);\n\n    HRESULT Unadvise(\n        [in] DWORD_PTR dwAdviseCookie);\n}\n\ntypedef IReferenceClock *PREFERENCECLOCK;\n\n/*\n[\nobject,\nuuid(36b73885-c2c8-11cf-8b46-00805f6cef60),\npointer_default(unique)\n]\ninterface IReferenceClock2 : IReferenceClock\n{\n}\n\ntypedef IReferenceClock2 *PREFERENCECLOCK2;\n\n*/\n\n[\nlocal,\nobject,\nuuid(56a8689a-0ad4-11ce-b03a-0020af0ba770),\npointer_default(unique)\n]\ninterface IMediaSample : IUnknown\n{\n    HRESULT GetPointer([out] BYTE ** ppBuffer);\n\n    long GetSize(void);\n\n    HRESULT GetTime(\n        [out] REFERENCE_TIME * pTimeStart,\n        [out] REFERENCE_TIME * pTimeEnd);\n\n    HRESULT SetTime(\n        [in] REFERENCE_TIME * pTimeStart,\n        [in] REFERENCE_TIME * pTimeEnd);\n\n    HRESULT IsSyncPoint(void);\n\n    HRESULT SetSyncPoint(BOOL bIsSyncPoint);\n\n    HRESULT IsPreroll(void);\n\n    HRESULT SetPreroll(BOOL bIsPreroll);\n\n    LONG GetActualDataLength(void);\n\n    HRESULT SetActualDataLength(LONG length);\n\n    HRESULT GetMediaType(AM_MEDIA_TYPE **ppMediaType);\n\n    HRESULT SetMediaType(AM_MEDIA_TYPE *pMediaType);\n\n    HRESULT IsDiscontinuity(void);\n\n    HRESULT SetDiscontinuity(BOOL bDiscontinuity);\n\n    HRESULT GetMediaTime(\n        [out] LONGLONG * pTimeStart,\n        [out] LONGLONG * pTimeEnd);\n\n    HRESULT SetMediaTime(\n        [in] LONGLONG * pTimeStart,\n        [in] LONGLONG * pTimeEnd);\n}\n\ntypedef IMediaSample *PMEDIASAMPLE;\n\nenum tagAM_SAMPLE_PROPERTY_FLAGS\n{\n       AM_SAMPLE_SPLICEPOINT        = 0x01,\n       AM_SAMPLE_PREROLL            = 0x02,\n       AM_SAMPLE_DATADISCONTINUITY  = 0x04,\n       AM_SAMPLE_TYPECHANGED        = 0x08,\n       AM_SAMPLE_TIMEVALID          = 0x10,\n       AM_SAMPLE_TIMEDISCONTINUITY  = 0x40,\n       AM_SAMPLE_FLUSH_ON_PAUSE     = 0x80,\n       AM_SAMPLE_STOPVALID          = 0x100,\n       AM_SAMPLE_ENDOFSTREAM        = 0x200,\n       AM_STREAM_MEDIA              = 0,\n       AM_STREAM_CONTROL            = 1\n};\n\ntypedef struct tagAM_SAMPLE2_PROPERTIES\n{\n    DWORD    cbData;\n    DWORD    dwTypeSpecificFlags;\n    DWORD    dwSampleFlags;\n    LONG     lActual;\n    REFERENCE_TIME tStart;\n    REFERENCE_TIME tStop;\n    DWORD    dwStreamId;\n    AM_MEDIA_TYPE *pMediaType;\n    BYTE    *pbBuffer;\n    LONG     cbBuffer;\n} AM_SAMPLE2_PROPERTIES;\n\n[\n        local,\n        object,\n        uuid(36b73884-c2c8-11cf-8b46-00805f6cef60),\n        pointer_default(unique)\n]\ninterface IMediaSample2 : IMediaSample\n{\n    HRESULT GetProperties(\n        [in] DWORD cbProperties,\n        [out, size_is(cbProperties)] BYTE * pbProperties\n    );\n\n    HRESULT SetProperties(\n        [in] DWORD cbProperties,\n        [in, size_is(cbProperties)] const BYTE * pbProperties\n    );\n}\n\ntypedef IMediaSample2 *PMEDIASAMPLE2;\n\n#define AM_GBF_PREVFRAMESKIPPED 1\n#define AM_GBF_NOTASYNCPOINT    2\ncpp_quote(\"#define AM_GBF_PREVFRAMESKIPPED 1\")\ncpp_quote(\"#define AM_GBF_NOTASYNCPOINT 2\")\n\ncpp_quote(\"#define AM_GBF_NOWAIT 4\")\ncpp_quote(\"#define AM_GBF_NODDSURFACELOCK 8\")\n\n[\nobject,\nuuid(56a8689c-0ad4-11ce-b03a-0020af0ba770),\npointer_default(unique)\n]\ninterface IMemAllocator : IUnknown\n{\n    HRESULT SetProperties(\n        [in] ALLOCATOR_PROPERTIES* pRequest,\n        [out] ALLOCATOR_PROPERTIES* pActual);\n\n    HRESULT GetProperties(\n        [out] ALLOCATOR_PROPERTIES* pProps);\n\n    HRESULT Commit(void);\n\n    HRESULT Decommit(void);\n\n    HRESULT GetBuffer(\n        [out] IMediaSample **ppBuffer,\n        [in] REFERENCE_TIME * pStartTime,\n        [in] REFERENCE_TIME * pEndTime,\n        [in] DWORD dwFlags);\n\n    HRESULT ReleaseBuffer(\n        [in] IMediaSample *pBuffer);\n}\n\ntypedef IMemAllocator *PMEMALLOCATOR;\n\n[\nobject,\nuuid(379a0cf0-c1de-11d2-abf5-00a0c905f375),\npointer_default(unique)\n]\ninterface IMemAllocatorCallbackTemp : IMemAllocator\n{\n    HRESULT SetNotify(\n        [in] IMemAllocatorNotifyCallbackTemp *pNotify);\n\n    HRESULT GetFreeCount(\n        [out] LONG *plBuffersFree);\n}\n\n[\nobject,\nuuid(92980b30-c1de-11d2-abf5-00a0c905f375),\npointer_default(unique)\n]\ninterface IMemAllocatorNotifyCallbackTemp : IUnknown\n{\n    HRESULT NotifyRelease();\n}\n\n[\nobject,\nuuid(56a8689d-0ad4-11ce-b03a-0020af0ba770),\npointer_default(unique)\n]\ninterface IMemInputPin : IUnknown\n{\n    HRESULT GetAllocator(\n        [out] IMemAllocator ** ppAllocator);\n\n    HRESULT NotifyAllocator(\n        [in] IMemAllocator * pAllocator,\n        [in] BOOL bReadOnly);\n\n    HRESULT GetAllocatorRequirements( [out] ALLOCATOR_PROPERTIES*pProps );\n\n    HRESULT Receive(\n        [in] IMediaSample * pSample);\n\n    HRESULT ReceiveMultiple(\n        [in, size_is(nSamples)] IMediaSample **pSamples,\n        [in] long nSamples,\n        [out] long *nSamplesProcessed);\n\n    HRESULT ReceiveCanBlock();\n}\n\ntypedef IMemInputPin *PMEMINPUTPIN;\n\n[\nobject,\nuuid(a3d8cec0-7e5a-11cf-bbc5-00805f6cef20),\npointer_default(unique)\n]\ninterface IAMovieSetup : IUnknown\n{\n    HRESULT Register( );\n    HRESULT Unregister( );\n}\n\ntypedef IAMovieSetup *PAMOVIESETUP;\n\ntypedef enum AM_SEEKING_SeekingFlags\n{\n    AM_SEEKING_NoPositioning            = 0x00,\n    AM_SEEKING_AbsolutePositioning      = 0x01,\n    AM_SEEKING_RelativePositioning      = 0x02,\n    AM_SEEKING_IncrementalPositioning   = 0x03,\n    AM_SEEKING_PositioningBitsMask      = 0x03,\n    AM_SEEKING_SeekToKeyFrame           = 0x04,\n    AM_SEEKING_ReturnTime               = 0x08,\n    AM_SEEKING_Segment                  = 0x10,\n    AM_SEEKING_NoFlush                  = 0x20\n} AM_SEEKING_SEEKING_FLAGS;\n\ntypedef enum AM_SEEKING_SeekingCapabilities\n{\n    AM_SEEKING_CanSeekAbsolute     = 0x001,\n    AM_SEEKING_CanSeekForwards     = 0x002,\n    AM_SEEKING_CanSeekBackwards    = 0x004,\n    AM_SEEKING_CanGetCurrentPos    = 0x008,\n    AM_SEEKING_CanGetStopPos       = 0x010,\n    AM_SEEKING_CanGetDuration      = 0x020,\n    AM_SEEKING_CanPlayBackwards    = 0x040,\n    AM_SEEKING_CanDoSegments       = 0x080,\n    AM_SEEKING_Source              = 0x100\n} AM_SEEKING_SEEKING_CAPABILITIES;\n\n[\nobject,\nuuid(36b73880-c2c8-11cf-8b46-00805f6cef60),\npointer_default(unique)\n]\ninterface IMediaSeeking : IUnknown\n{\n    HRESULT GetCapabilities( [out] DWORD * pCapabilities );\n\n    HRESULT CheckCapabilities( [in,out] DWORD * pCapabilities );\n\n    HRESULT IsFormatSupported([in] const GUID * pFormat);\n\n    HRESULT QueryPreferredFormat([out] GUID * pFormat);\n\n    HRESULT GetTimeFormat([out] GUID *pFormat);\n\n    HRESULT IsUsingTimeFormat([in] const GUID * pFormat);\n\n    HRESULT SetTimeFormat([in] const GUID * pFormat);\n\n    HRESULT GetDuration([out] LONGLONG *pDuration);\n\n    HRESULT GetStopPosition([out] LONGLONG *pStop);\n\n    HRESULT GetCurrentPosition([out] LONGLONG *pCurrent);\n\n    HRESULT ConvertTimeFormat([out] LONGLONG * pTarget, [in] const GUID * pTargetFormat,\n                              [in]  LONGLONG    Source, [in] const GUID * pSourceFormat );\n\n    HRESULT SetPositions(\n        [in,out] LONGLONG * pCurrent,\n        [in] DWORD dwCurrentFlags,\n        [in,out] LONGLONG * pStop,\n        [in] DWORD dwStopFlags);\n\n    HRESULT GetPositions(\n        [out] LONGLONG * pCurrent,\n        [out] LONGLONG * pStop);\n\n    HRESULT GetAvailable(\n        [out] LONGLONG * pEarliest,\n        [out] LONGLONG * pLatest);\n\n    HRESULT SetRate([in]  double dRate);\n\n    HRESULT GetRate([out] double * pdRate);\n\n    HRESULT GetPreroll([out] LONGLONG * pllPreroll);\n}\n\ntypedef IMediaSeeking *PMEDIASEEKING;\n\nenum tagAM_MEDIAEVENT_FLAGS\n{\n    AM_MEDIAEVENT_NONOTIFY = 0x01\n};\n\nenum _AMSTREAMSELECTINFOFLAGS\n{\n    AMSTREAMSELECTINFO_ENABLED      = 0x1,\n    AMSTREAMSELECTINFO_EXCLUSIVE    = 0x2\n};\n\nenum _AMSTREAMSELECTENABLEFLAGS\n{\n    AMSTREAMSELECTENABLE_ENABLE     = 0x1,\n    AMSTREAMSELECTENABLE_ENABLEALL  = 0x2\n};\n\n[\nobject,\nuuid(c1960960-17f5-11d1-abe1-00a0c905f375),\npointer_default(unique)\n]\ninterface IAMStreamSelect : IUnknown\n{\n    HRESULT Count(\n        [out] DWORD *streams);\n\n    HRESULT Info(\n        [in] long index,\n        [out] AM_MEDIA_TYPE **media_type,\n        [out] DWORD *flags,\n        [out] LCID *lcid,\n        [out] DWORD *group,\n        [out] WCHAR **name,\n        [out] IUnknown **object,\n        [out] IUnknown **unknown);\n\n    HRESULT Enable(\n        [in] long index,\n        [in] DWORD flags);\n}\n\ntypedef IAMStreamSelect *PAMSTREAMSELECT;\n"
  },
  {
    "path": "wine/windows/axextend.idl",
    "content": "/*\n * Copyright (C) 2002 Robert Shearman\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\ninterface IAMAnalogVideoDecoder;\ninterface IAMAnalogVideoEncoder;\ninterface IAMAudioInputMixer;\ninterface IAMAudioRendererStats;\ninterface IAMBufferNegotiation;\ninterface IAMCameraControl;\ninterface IAMCertifiedOutputProtection;\ninterface IAMClockSlave;\ninterface IAMCopyCaptureFileProgress;\ninterface IAMCrossbar;\ninterface IAMDevMemoryAllocator;\ninterface IAMDevMemoryControl;\ninterface IAMDroppedFrames;\ninterface IAMExtDevice;\ninterface IAMExtTransport;\ninterface IAMGraphStreams;\ninterface IAMLatency;\ninterface IAMOpenProgress;\ninterface IAMOverlayFX;\ninterface IAMPhysicalPinInfo;\ninterface IAMPushSource;\ninterface IAMStreamConfig;\ninterface IAMTimecodeDisplay;\ninterface IAMTimecodeGenerator;\ninterface IAMTimecodeReader;\ninterface IAMTVTuner;\ninterface IAMVfwCaptureDialogs;\ninterface IAMVfwCompressDialogs;\ninterface IAMVideoCompression;\ninterface IAMVideoDecimationProperties;\ninterface IAMVideoProcAmp;\ninterface IAMGraphBuilderCallback;\ninterface ICaptureGraphBuilder;\ninterface ICaptureGraphBuilder2;\ninterface IConfigAviMux;\ninterface IConfigInterleaving;\ninterface IDecimateVideoImage;\ninterface IDrawVideoImage;\ninterface IEnumRegFilters;\ninterface IEnumStreamIdMap;\ninterface IFileSourceFilter;\ninterface IFileSinkFilter;\ninterface IFileSinkFilter2;\ninterface IFilterMapper;\ninterface IFilterMapper2;\ninterface IGraphBuilder;\ninterface IKsPropertySet;\ninterface IMediaEventSink;\ninterface IMpeg2Demultiplexer;\ninterface IMPEG2StreamIdMap;\ninterface IOverlay;\ninterface IOverlayNotify;\ninterface IOverlayNotify2;\ninterface IQualityControl;\ninterface ISeekingPassThru;\n\ntypedef struct\n{\n    CLSID Clsid;\n    LPWSTR Name;\n} REGFILTER;\n\n[\nobject,\nuuid(56a868a4-0ad4-11ce-b03a-0020af0ba770),\npointer_default(unique)\n]\ninterface IEnumRegFilters : IUnknown\n{\n    HRESULT Next\n        ( [in]  ULONG cFilters,\n          [out] REGFILTER ** apRegFilter,\n          [out] ULONG * pcFetched\n        );\n\n    HRESULT Skip(\n        [in] ULONG cFilters\n    );\n\n    HRESULT Reset(void);\n\n    HRESULT Clone(\n        [out] IEnumRegFilters **ppEnum\n    );\n}\n\n\ntypedef IEnumRegFilters *PENUMREGFILTERS;\n\n[\nobject,\nuuid(56a868a3-0ad4-11ce-b03a-0020af0ba770),\npointer_default(unique)\n]\ninterface IFilterMapper : IUnknown\n{\n    enum { MERIT_PREFERRED     = 0x800000,\n           MERIT_NORMAL        = 0x600000,\n           MERIT_UNLIKELY      = 0x400000,\n           MERIT_DO_NOT_USE    = 0x200000,\n           MERIT_SW_COMPRESSOR = 0x100000,\n           MERIT_HW_COMPRESSOR = 0x100050\n         };\n\n    HRESULT RegisterFilter\n        ( [in] CLSID   clsid,\n          [in] LPCWSTR Name,\n          [in] DWORD   dwMerit\n        );\n\n    HRESULT RegisterFilterInstance\n        ( [in]  CLSID  clsid,\n          [in]  LPCWSTR Name,\n          [out] CLSID *MRId\n        );\n\n\n    HRESULT RegisterPin\n        ( [in] CLSID   Filter,\n          [in] LPCWSTR Name,\n          [in] BOOL    bRendered,\n          [in] BOOL    bOutput,\n          [in] BOOL    bZero,\n          [in] BOOL    bMany,\n          [in] CLSID   ConnectsToFilter,\n          [in] LPCWSTR ConnectsToPin\n        );\n\n    HRESULT RegisterPinType\n        ( [in] CLSID   clsFilter,\n          [in] LPCWSTR strName,\n          [in] CLSID   clsMajorType,\n          [in] CLSID   clsSubType\n        );\n\n\n    HRESULT UnregisterFilter\n        ( [in] CLSID  Filter\n        );\n\n\n    HRESULT UnregisterFilterInstance\n        ( [in] CLSID  MRId\n        );\n\n\n    HRESULT UnregisterPin\n        ( [in] CLSID   Filter,\n          [in] LPCWSTR Name\n        );\n\n    HRESULT EnumMatchingFilters\n       ( [out] IEnumRegFilters **ppEnum,\n         [in]  DWORD dwMerit,\n         [in]  BOOL  bInputNeeded,\n         [in]  CLSID clsInMaj,\n         [in]  CLSID clsInSub,\n         [in]  BOOL  bRender,\n         [in]  BOOL  bOutputNeeded,\n         [in]  CLSID clsOutMaj,\n         [in]  CLSID clsOutSub\n       );\n\n}\n\ntypedef struct\n{\n    const CLSID * clsMajorType;\n    const CLSID * clsMinorType;\n} REGPINTYPES;\n\ntypedef struct\n{\n    LPWSTR           strName;\n    BOOL             bRendered;\n    BOOL             bOutput;\n    BOOL             bZero;\n    BOOL             bMany;\n    const CLSID *    clsConnectsToFilter;\n    const WCHAR *    strConnectsToPin;\n    UINT             nMediaTypes;\n    const REGPINTYPES * lpMediaType;\n} REGFILTERPINS;\n\ntypedef struct\n{\n    CLSID clsMedium;\n    DWORD dw1;\n    DWORD dw2;\n} REGPINMEDIUM;\n\nenum\n{\n    REG_PINFLAG_B_ZERO = 0x1,\n    REG_PINFLAG_B_RENDERER = 0x2,\n    REG_PINFLAG_B_MANY = 0x4,\n    REG_PINFLAG_B_OUTPUT = 0x8\n};\n\n\ntypedef struct\n{\n    DWORD dwFlags;\n    UINT             cInstances;\n    UINT             nMediaTypes;\n    [size_is(nMediaTypes)] const REGPINTYPES * lpMediaType;\n    UINT             nMediums;\n    [size_is(nMediums)] const REGPINMEDIUM *lpMedium;\n    const CLSID      *clsPinCategory;\n} REGFILTERPINS2;\n\ntypedef struct\n{\n    DWORD dwVersion;\n    DWORD dwMerit;\n    [switch_is(dwVersion)] [switch_type(DWORD)] union\n    {\n        [case(1)]\n            struct\n            {\n                ULONG cPins;\n                [size_is(cPins)] const REGFILTERPINS *rgPins;\n            };\n\n        [case(2)]\n            struct\n            {\n                ULONG cPins2;\n                [size_is(cPins2)] const REGFILTERPINS2 *rgPins2;\n            };\n\n        [default]\n            ;\n    };\n\n} REGFILTER2;\n\n\n[\nobject,\nuuid(b79bb0b0-33c1-11d1-abe1-00a0c905f375),\npointer_default(unique)\n]\ninterface IFilterMapper2 : IUnknown\n{\n    HRESULT CreateCategory\n        ( [in] REFCLSID clsidCategory,\n          [in] DWORD dwCategoryMerit,\n          [in] LPCWSTR Description\n          );\n\n    HRESULT UnregisterFilter\n        ( [in] const CLSID *pclsidCategory,\n          [in] LPCOLESTR szInstance,\n          [in] REFCLSID Filter\n        );\n\n    HRESULT RegisterFilter\n        ( [in] REFCLSID clsidFilter,\n          [in] LPCWSTR Name,\n          [in, out] IMoniker **ppMoniker,\n          [in] const CLSID *pclsidCategory,\n          [in] LPCOLESTR szInstance,\n          [in] const REGFILTER2 *prf2\n        );\n\n    HRESULT EnumMatchingFilters\n       ( [out] IEnumMoniker **ppEnum,\n         [in]  DWORD dwFlags,\n         [in]  BOOL bExactMatch,\n         [in]  DWORD dwMerit,\n         [in]  BOOL  bInputNeeded,\n         [in]  DWORD cInputTypes,\n         [size_is(cInputTypes*2)]  const GUID *pInputTypes,\n         [in]  const REGPINMEDIUM *pMedIn,\n         [in]  const CLSID *pPinCategoryIn,\n         [in]  BOOL  bRender,\n         [in]  BOOL  bOutputNeeded,\n         [in]  DWORD cOutputTypes,\n         [size_is(cOutputTypes*2)]  const GUID *pOutputTypes,\n         [in]  const REGPINMEDIUM *pMedOut,\n         [in]  const CLSID *pPinCategoryOut\n       );\n}\n\n[\nobject,\nuuid(b79bb0b1-33c1-11d1-abe1-00a0c905f375),\npointer_default(unique)\n]\ninterface IFilterMapper3 : IFilterMapper2\n{\n    HRESULT GetICreateDevEnum( [out] ICreateDevEnum **ppEnum );\n}\n\ntypedef enum tagQualityMessageType\n{\n    Famine,\n    Flood\n} QualityMessageType;\n\ntypedef struct tagQuality\n{\n    QualityMessageType Type;\n    LONG               Proportion;\n    REFERENCE_TIME       Late;\n    REFERENCE_TIME       TimeStamp;\n} Quality;\n\ntypedef IQualityControl *PQUALITYCONTROL;\n\n[\nobject,\nuuid(56a868a5-0ad4-11ce-b03a-0020af0ba770),\npointer_default(unique)\n]\ninterface IQualityControl : IUnknown\n{\n    HRESULT Notify\n        ( [in] IBaseFilter * pSelf,\n          [in] Quality q\n        );\n\n    HRESULT SetSink\n        ( [in] IQualityControl * piqc\n        );\n}\n\nenum\n{\n    CK_NOCOLORKEY  = 0x0,\n    CK_INDEX       = 0x1,\n    CK_RGB         = 0x2\n};\n\ntypedef struct tagCOLORKEY\n{\n    DWORD    KeyType;\n    DWORD    PaletteIndex;\n    COLORREF LowColorValue;\n    COLORREF HighColorValue;\n} COLORKEY;\n\nenum\n{\n    ADVISE_NONE = 0x0,\n    ADVISE_CLIPPING = 0x1,\n    ADVISE_PALETTE = 0x2,\n    ADVISE_COLORKEY = 0x4,\n    ADVISE_POSITION = 0x8,\n    ADVISE_DISPLAY_CHANGE = 0x10\n};\n\nconst DWORD ADVISE_ALL = ADVISE_CLIPPING |\n                         ADVISE_PALETTE  |\n                         ADVISE_COLORKEY |\n                         ADVISE_POSITION;\n\nconst DWORD ADVISE_ALL2 = ADVISE_ALL |\n                          ADVISE_DISPLAY_CHANGE;\n\ncpp_quote(\"#ifndef _WINGDI_\")\n\n/* already defined in wingdi.h, but needed for WIDL */\n\ntypedef struct _RGNDATAHEADER\n{\n    DWORD dwSize;\n    DWORD iType;\n    DWORD nCount;\n    DWORD nRgnSize;\n    RECT  rcBound;\n} RGNDATAHEADER;\n\ntypedef struct _RGNDATA\n{\n    RGNDATAHEADER rdh;\n    char Buffer[1];\n} RGNDATA;\n\ncpp_quote(\"#endif /* _WINGDI_ */\")\n\n[\nobject,\nlocal,\nuuid(56a868a0-0ad4-11ce-b03a-0020af0ba770),\npointer_default(unique)\n]\ninterface IOverlayNotify : IUnknown\n{\n    HRESULT OnPaletteChange(\n        [in] DWORD dwColors,\n        [in] const PALETTEENTRY *pPalette);\n\n    HRESULT OnClipChange(\n        [in] const RECT *pSourceRect,\n        [in] const RECT *pDestinationRect,\n        [in] const RGNDATA *pRgnData);\n\n    HRESULT OnColorKeyChange([in] const COLORKEY *pColorKey);\n\n    HRESULT OnPositionChange([in] const RECT *pSourceRect,\n                             [in] const RECT *pDestinationRect);\n}\n\ntypedef IOverlayNotify *POVERLAYNOTIFY;\n\ncpp_quote(\"#if 0\")\ntypedef HANDLE HMONITOR;\ncpp_quote(\"#endif /* 0 */\")\n\n[\nobject,\nlocal,\nuuid(680EFA10-D535-11D1-87C8-00A0C9223196),\npointer_default(unique)\n]\ninterface IOverlayNotify2 : IOverlayNotify\n{\n    HRESULT OnDisplayChange(\n        HMONITOR hMonitor);\n}\n\ntypedef IOverlayNotify2 *POVERLAYNOTIFY2;\n\n[\nobject,\nlocal,\nuuid(56a868a1-0ad4-11ce-b03a-0020af0ba770),\npointer_default(unique)\n]\ninterface IOverlay : IUnknown\n{\n    HRESULT GetPalette(\n        [out] DWORD *pdwColors,\n        [out] PALETTEENTRY **ppPalette);\n\n    HRESULT SetPalette(\n        [in] DWORD dwColors,\n        [in] PALETTEENTRY *pPalette);\n\n    HRESULT GetDefaultColorKey([out] COLORKEY *pColorKey);\n\n    HRESULT GetColorKey([out] COLORKEY *pColorKey);\n\n    HRESULT SetColorKey([in,out] COLORKEY *pColorKey);\n\n    HRESULT GetWindowHandle([out] HWND *pHwnd);\n\n    HRESULT GetClipList([out] RECT *pSourceRect,\n                        [out] RECT *pDestinationRect,\n                        [out] RGNDATA **ppRgnData);\n\n    HRESULT GetVideoPosition([out] RECT *pSourceRect,\n                             [out] RECT *pDestinationRect);\n\n    HRESULT Advise(\n        [in] IOverlayNotify *pOverlayNotify,\n        [in] DWORD dwInterests);\n\n    HRESULT Unadvise();\n}\n\ntypedef IOverlay *POVERLAY;\n\n[\nobject,\nuuid(56a868a2-0ad4-11ce-b03a-0020af0ba770),\npointer_default(unique)\n]\ninterface IMediaEventSink : IUnknown\n{\n    HRESULT Notify(\n        [in] LONG EventCode,\n        [in] LONG_PTR EventParam1,\n        [in] LONG_PTR EventParam2\n    );\n}\n\ntypedef IMediaEventSink *PMEDIAEVENTSINK;\n\n[\nobject,\nuuid(56a868a6-0ad4-11ce-b03a-0020af0ba770),\npointer_default(unique)\n]\ninterface IFileSourceFilter : IUnknown\n{\n    HRESULT Load(\n        [in] LPCOLESTR pszFileName,\n        [in, unique] const AM_MEDIA_TYPE *pmt\n    );\n\n    HRESULT GetCurFile(\n        [out] LPOLESTR *ppszFileName,\n        [out] AM_MEDIA_TYPE *pmt\n    );\n}\n\ntypedef IFileSourceFilter *PFILTERFILESOURCE;\n\n[\nobject,\nuuid(a2104830-7c70-11cf-8bce-00aa00a3f1a6),\npointer_default(unique)\n]\ninterface IFileSinkFilter : IUnknown\n{\n    HRESULT SetFileName(\n        [in] LPCOLESTR pszFileName,\n        [in, unique] const AM_MEDIA_TYPE *pmt\n    );\n\n    HRESULT GetCurFile(\n        [out] LPOLESTR *ppszFileName,\n        [out] AM_MEDIA_TYPE *pmt\n    );\n}\n\ntypedef IFileSinkFilter *PFILTERFILESINK;\n\n[\n        object,\n        uuid(00855B90-CE1B-11d0-BD4F-00A0C911CE86),\n        pointer_default(unique)\n]\ninterface IFileSinkFilter2 : IFileSinkFilter\n{\n    HRESULT SetMode(\n        [in] DWORD dwFlags\n    );\n\n    HRESULT GetMode(\n        [out] DWORD *pdwFlags\n    );\n}\n\ntypedef IFileSinkFilter2 *PFILESINKFILTER2;\n\ntypedef enum\n{\n    AM_FILE_OVERWRITE = 0x00000001,\n} AM_FILESINK_FLAGS;\n\n[\nobject,\nuuid(56a868a9-0ad4-11ce-b03a-0020af0ba770),\npointer_default(unique)\n]\ninterface IGraphBuilder : IFilterGraph\n{\n    HRESULT Connect\n        ( [in] IPin * ppinOut,\n          [in] IPin * ppinIn\n        );\n\n    HRESULT Render\n        ( [in] IPin * ppinOut\n        );\n\n    HRESULT RenderFile\n        ( [in] LPCWSTR lpcwstrFile,\n          [in, unique] LPCWSTR lpcwstrPlayList\n        );\n\n    HRESULT AddSourceFilter\n        ( [in]      LPCWSTR lpcwstrFileName,\n          [in, unique]      LPCWSTR lpcwstrFilterName,\n          [out]     IBaseFilter* *ppFilter\n        );\n\n    HRESULT SetLogFile\n        ( [in]      DWORD_PTR hFile\n        );\n\n    HRESULT Abort();\n\n    HRESULT ShouldOperationContinue();\n}\n\n\n[\n    object,\n    uuid(bf87b6e0-8c27-11d0-b3f0-00aa003761c5),\n    pointer_default(unique)\n]\ninterface ICaptureGraphBuilder : IUnknown {\n\n    HRESULT SetFiltergraph(\n        [in] IGraphBuilder *pfg);\n\n    HRESULT GetFiltergraph(\n        [out] IGraphBuilder **ppfg);\n\n    HRESULT SetOutputFileName(\n        [in] const GUID *pType,\n        [in] LPCOLESTR lpstrFile,\n        [out] IBaseFilter **ppf,\n        [out] IFileSinkFilter **ppSink);\n\n    [local] HRESULT FindInterface(\n        [in, unique] const GUID *pCategory,\n        [in] IBaseFilter *pf,\n        [in] REFIID riid,\n        [out] void **ppint);\n\n    [call_as(FindInterface)] HRESULT RemoteFindInterface(\n        [in, unique] const GUID *pCategory,\n        [in] IBaseFilter *pf,\n        [in] REFIID riid,\n        [out] IUnknown **ppint);\n\n    HRESULT RenderStream(\n        [in] const GUID *pCategory,\n        [in] IUnknown *pSource,\n        [in] IBaseFilter *pfCompressor,\n        [in] IBaseFilter *pfRenderer);\n\n    HRESULT ControlStream(\n        [in] const GUID *pCategory,\n        [in] IBaseFilter *pFilter,\n        [in] REFERENCE_TIME *pstart,\n        [in] REFERENCE_TIME *pstop,\n        [in] WORD wStartCookie,\n        [in] WORD wStopCookie);\n\n    HRESULT AllocCapFile(\n        [in] LPCOLESTR lpstr,\n        [in] DWORDLONG dwlSize);\n\n    HRESULT CopyCaptureFile(\n        [in] LPOLESTR lpwstrOld,\n        [in] LPOLESTR lpwstrNew,\n        [in] int fAllowEscAbort,\n        [in] IAMCopyCaptureFileProgress *pCallback);\n}\n\n[\nobject,\nuuid(670d1d20-a068-11d0-b3f0-00aa003761c5),\npointer_default(unique)\n]\ninterface IAMCopyCaptureFileProgress : IUnknown\n{\n    HRESULT Progress(\n        [in] int iProgress);\n}\n\n[\n    object,\n    uuid(93E5A4E0-2D50-11d2-ABFA-00A0C9C6E38D),\n    pointer_default(unique)\n]\ninterface ICaptureGraphBuilder2 : IUnknown\n{\n    HRESULT SetFiltergraph(\n        [in] IGraphBuilder *pfg);\n\n    HRESULT GetFiltergraph(\n        [out] IGraphBuilder **ppfg);\n\n    HRESULT SetOutputFileName(\n        [in] const GUID *pType,\n        [in] LPCOLESTR lpstrFile,\n        [out] IBaseFilter **ppf,\n        [out] IFileSinkFilter **ppSink);\n\n    [local] HRESULT FindInterface(\n        [in] const GUID *pCategory,\n        [in] const GUID *pType,\n        [in] IBaseFilter *pf,\n        [in] REFIID riid,\n        [out] void **ppint);\n\n    [call_as(FindInterface)] HRESULT RemoteFindInterface(\n        [in] const GUID *pCategory,\n        [in] const GUID *pType,\n        [in] IBaseFilter *pf,\n        [in] REFIID riid,\n        [out] IUnknown **ppint);\n\n    HRESULT RenderStream(\n        [in] const GUID *pCategory,\n        [in] const GUID *pType,\n        [in] IUnknown *pSource,\n        [in] IBaseFilter *pfCompressor,\n        [in] IBaseFilter *pfRenderer);\n\n    HRESULT ControlStream(\n        [in] const GUID *pCategory,\n        [in] const GUID *pType,\n        [in] IBaseFilter *pFilter,\n        [in] REFERENCE_TIME *pstart,\n        [in] REFERENCE_TIME *pstop,\n        [in] WORD wStartCookie,\n        [in] WORD wStopCookie);\n\n    HRESULT AllocCapFile(\n        [in] LPCOLESTR lpstr,\n        [in] DWORDLONG dwlSize);\n\n    HRESULT CopyCaptureFile(\n        [in] LPOLESTR lpwstrOld,\n        [in] LPOLESTR lpwstrNew,\n        [in] int fAllowEscAbort,\n        [in] IAMCopyCaptureFileProgress *pCallback);\n\n    HRESULT FindPin(\n        [in] IUnknown *pSource,\n        [in] PIN_DIRECTION pindir,\n        [in] const GUID *pCategory,\n        [in] const GUID *pType,\n        [in] BOOL fUnconnected,\n        [in] int num,\n        [out] IPin **ppPin);\n}\n\n[\n    local,\n    object,\n    uuid(5acd6aa0-f482-11ce-8b67-00aa00a3f1a6),\n    pointer_default(unique)\n]\ninterface IConfigAviMux : IUnknown\n{\n    HRESULT SetMasterStream(\n        [in] LONG iStream);\n\n    HRESULT GetMasterStream(\n        [out] LONG *pStream);\n\n    HRESULT SetOutputCompatibilityIndex(\n        [in] BOOL fOldIndex);\n\n    HRESULT GetOutputCompatibilityIndex(\n        [out] BOOL *pfOldIndex);\n}\n\n[\n    local,\n    object,\n    uuid(bee3d220-157b-11d0-bd23-00a0c911ce86),\n    pointer_default(unique)\n]\ninterface IConfigInterleaving : IUnknown\n{\n    typedef enum InterleavingMode {\n        INTERLEAVE_NONE,\n        INTERLEAVE_CAPTURE,\n        INTERLEAVE_FULL,\n        INTERLEAVE_NONE_BUFFERED\n    } InterleavingMode;\n\n    HRESULT put_Mode(\n        [in] InterleavingMode mode);\n\n    HRESULT get_Mode(\n        [out] InterleavingMode *pMode);\n\n    HRESULT put_Interleaving(\n        [in] const REFERENCE_TIME *prtInterleave,\n        [in] const REFERENCE_TIME *prtPreroll);\n\n    HRESULT get_Interleaving(\n        [out] REFERENCE_TIME *prtInterleave,\n        [out] REFERENCE_TIME *prtPreroll);\n}\n\n[\n    local,\n    object,\n    uuid(9fd52741-176d-4b36-8f51-ca8f933223be),\n    pointer_default(unique)\n]\ninterface IAMClockSlave : IUnknown\n{\n    HRESULT SetErrorTolerance(\n        [in] DWORD dwTolerance);\n\n    HRESULT GetErrorTolerance(\n        [out] DWORD *pdwTolerance);\n}\n\ntypedef struct _AMCOPPSignature {\n    BYTE Signature[256];\n} AMCOPPSignature;\n\ntypedef struct _AMCOPPCommand {\n    GUID macKDI;\n    GUID guidCommandID;\n    DWORD dwSequence;\n    DWORD bSizeData;\n    BYTE CommandData[4056];\n} AMCOPPCommand, *LPAMCOPPCommand;\n\ntypedef struct _AMCOPPStatusInput {\n    GUID rApp;\n    GUID guidStatusRequestID;\n    DWORD dwSequence;\n    DWORD cbSizeData;\n    BYTE StatusData[4056];\n} AMCOPPStatusInput, *LPAMCOPPStatusInput;\n\ntypedef struct _AMCOPPStatusOutput {\n    GUID macKDI;\n    DWORD cbSizeData;\n    BYTE COPPStatus[4076];\n} AMCOPPStatusOutput, *LPAMCOPPStatusOutput;\n\n[\n    local,\n    object,\n    uuid(6feded3e-0ff1-4901-a2f1-43f7012c8515),\n    pointer_default(unique)\n]\ninterface IAMCertifiedOutputProtection : IUnknown\n{\n    HRESULT KeyExchange (\n        [out] GUID* pRandom,\n        [out] BYTE** VarLenCertGH,\n        [out] DWORD* pdwLengthCertGH);\n\n    HRESULT SessionSequenceStart(\n        [in] AMCOPPSignature* pSig);\n\n    HRESULT ProtectionCommand(\n        [in] const AMCOPPCommand* cmd);\n\n    HRESULT ProtectionStatus(\n        [in] const AMCOPPStatusInput* pStatusInput,\n        [out] AMCOPPStatusOutput* pStatusOutput);\n}\n\nenum _AM_RENSDEREXFLAGS\n{\n    AM_RENDEREX_RENDERTOEXISTINGRENDERERS = 0x01\n};\n\n[\n    object,\n    uuid(36b73882-c2c8-11cf-8b46-00805f6cef60),\n    pointer_default(unique)\n]\ninterface IFilterGraph2: IGraphBuilder\n{\n    HRESULT AddSourceFilterForMoniker(\n          [in] IMoniker *pMoniker,\n          [in] IBindCtx *pCtx,\n          [in, unique] LPCWSTR lpcwstrFilterName,\n          [out] IBaseFilter **ppFilter\n    );\n\n    HRESULT ReconnectEx\n        ( [in] IPin * ppin,\n          [in, unique] const AM_MEDIA_TYPE *pmt\n        );\n\n    HRESULT RenderEx( [in] IPin *pPinOut,\n                      [in] DWORD dwFlags,\n                      [in, out] DWORD *pvContext\n                    );\n}\n\n[\n    object,\n    local,\n    uuid(56a868bf-0ad4-11ce-b03a-0020af0ba770),\n    pointer_default(unique)\n]\ninterface IStreamBuilder : IUnknown\n{\n    HRESULT Render\n        ( [in] IPin * ppinOut,\n          [in] IGraphBuilder * pGraph\n        );\n\n    HRESULT Backout\n        ( [in] IPin * ppinOut,\n          [in] IGraphBuilder * pGraph\n        );\n}\n\n\n/*****************************************************************************\n * IAMStreamConfig interface\n */\n[\n    object,\n    uuid(c6e13340-30ac-11d0-a18c-00a0c9118956),\n    pointer_default(unique)\n]\ninterface IAMStreamConfig : IUnknown\n{\n    typedef struct _VIDEO_STREAM_CONFIG_CAPS {\n        GUID  guid;\n        ULONG VideoStandard;\n        SIZE  InputSize;\n        SIZE  MinCroppingSize;\n        SIZE  MaxCroppingSize;\n        int   CropGranularityX;\n        int   CropGranularityY;\n        int   CropAlignX;\n        int   CropAlignY;\n        SIZE  MinOutputSize;\n        SIZE  MaxOutputSize;\n        int   OutputGranularityX;\n        int   OutputGranularityY;\n        int   StretchTapsX;\n        int   StretchTapsY;\n        int   ShrinkTapsX;\n        int   ShrinkTapsY;\n        LONGLONG MinFrameInterval;\n        LONGLONG MaxFrameInterval;\n        LONG  MinBitsPerSecond;\n        LONG  MaxBitsPerSecond;\n    } VIDEO_STREAM_CONFIG_CAPS;\n\n    typedef struct _AUDIO_STREAM_CONFIG_CAPS {\n        GUID guid;\n        ULONG MinimumChannels;\n        ULONG MaximumChannels;\n        ULONG ChannelsGranularity;\n        ULONG MinimumBitsPerSample;\n        ULONG MaximumBitsPerSample;\n        ULONG BitsPerSampleGranularity;\n        ULONG MinimumSampleFrequency;\n        ULONG MaximumSampleFrequency;\n        ULONG SampleFrequencyGranularity;\n    } AUDIO_STREAM_CONFIG_CAPS;\n\n    HRESULT SetFormat( [in] AM_MEDIA_TYPE *pmt);\n    HRESULT GetFormat( [in] AM_MEDIA_TYPE **pmt);\n    HRESULT GetNumberOfCapabilities( [out] int *piCount, [out] int *piSize);\n    HRESULT GetStreamCaps( [in] int iIndex, [out] AM_MEDIA_TYPE **pmt,\n                          [out] BYTE *pSCC);\n}\n\n\ntypedef enum tagVideoProcAmpProperty\n{\n    VideoProcAmp_Brightness,\n    VideoProcAmp_Contrast,\n    VideoProcAmp_Hue,\n    VideoProcAmp_Saturation,\n    VideoProcAmp_Sharpness,\n    VideoProcAmp_Gamma,\n    VideoProcAmp_ColorEnable,\n    VideoProcAmp_WhiteBalance,\n    VideoProcAmp_BacklightCompensation,\n    VideoProcAmp_Gain\n} VideoProcAmpProperty;\n\ntypedef enum tagVideoProcAmpFlags\n{\n    VideoProcAmp_Flags_Auto   = 0x0001,\n    VideoProcAmp_Flags_Manual = 0x0002,\n} VideoProcAmpFlags;\n\n/*****************************************************************************\n * IAMVideoProcAmp interface\n */\n[\n    object,\n    uuid(c6e13360-30ac-11d0-a18c-00a0c9118956),\n    pointer_default(unique)\n]\ninterface IAMVideoProcAmp : IUnknown\n{\n    HRESULT GetRange( [in] LONG Property, [out] LONG *pMin, [out] LONG *pMax,\n                     [out] LONG *pSteppingDelta, [out] LONG *pDefault,\n                     [out] LONG *pCapsFlags);\n    HRESULT Set( [in] LONG Property, [in] LONG lValue, [in] LONG Flags);\n    HRESULT Get( [in] LONG Property, [out] LONG *lValue, [out] LONG *Flags);\n}\n\n\n[\n        object,\n        uuid(56a868aa-0ad4-11ce-b03a-0020af0ba770),\n        pointer_default(unique)\n]\ninterface IAsyncReader : IUnknown\n{\n    HRESULT RequestAllocator(\n                [in]  IMemAllocator* pPreferred,\n                [in]  ALLOCATOR_PROPERTIES* pProps,\n                [out] IMemAllocator ** ppActual);\n\n    HRESULT Request(\n                [in] IMediaSample* pSample,\n                [in] DWORD_PTR dwUser);\n\n    HRESULT WaitForNext(\n                [in]  DWORD dwTimeout,\n                [out] IMediaSample** ppSample,\n                [out] DWORD_PTR * pdwUser);\n\n    HRESULT SyncReadAligned(\n                [in] IMediaSample* pSample);\n\n    HRESULT SyncRead(\n                [in]  LONGLONG llPosition,\n                [in]  LONG lLength,\n                [out, size_is(lLength)]\n                      BYTE* pBuffer);\n\n    HRESULT Length(\n                [out] LONGLONG* pTotal,\n                [out] LONGLONG* pAvailable);\n\n    HRESULT BeginFlush(void);\n\n    HRESULT EndFlush(void);\n}\n\n\n[\n    object,\n    uuid(56a868ab-0ad4-11ce-b03a-0020af0ba770),\n    pointer_default(unique)\n]\ninterface IGraphVersion : IUnknown\n{\n    HRESULT QueryVersion(LONG* pVersion);\n}\n\n[\n    object,\n    uuid(56a868ad-0ad4-11ce-b03a-0020af0ba770),\n    pointer_default(unique)\n]\ninterface IResourceConsumer : IUnknown\n{\n    HRESULT AcquireResource(\n        [in] LONG idResource);\n\n    HRESULT ReleaseResource(\n        [in] LONG idResource);\n}\n\n\n[\n    object,\n    uuid(56a868ac-0ad4-11ce-b03a-0020af0ba770),\n    pointer_default(unique)\n]\ninterface IResourceManager : IUnknown\n{\n    HRESULT Register(\n        [in] LPCWSTR pName,\n        [in] LONG   cResource,\n        [out] LONG* plToken\n        );\n\n    HRESULT RegisterGroup(\n        [in] LPCWSTR pName,\n        [in] LONG cResource,\n        [in, size_is(cResource)]\n             LONG* palTokens,\n        [out] LONG* plToken\n        );\n\n    HRESULT RequestResource(\n        [in] LONG idResource,\n        [in] IUnknown* pFocusObject,\n        [in] IResourceConsumer* pConsumer\n        );\n\n    HRESULT NotifyAcquire(\n        [in] LONG idResource,\n        [in] IResourceConsumer* pConsumer,\n        [in] HRESULT hr);\n\n    HRESULT NotifyRelease(\n        [in] LONG idResource,\n        [in] IResourceConsumer* pConsumer,\n        [in] BOOL bStillWant);\n\n    HRESULT CancelRequest(\n        [in] LONG idResource,\n        [in] IResourceConsumer* pConsumer);\n\n    HRESULT SetFocus(\n        [in] IUnknown* pFocusObject);\n\n    HRESULT ReleaseFocus(\n        [in] IUnknown* pFocusObject);\n\n}\n\ntypedef enum AM_STREAM_INFO_FLAGS\n{\n    AM_STREAM_INFO_START_DEFINED   = 0x01,\n    AM_STREAM_INFO_STOP_DEFINED    = 0x02,\n    AM_STREAM_INFO_DISCARDING      = 0x04,\n    AM_STREAM_INFO_STOP_SEND_EXTRA = 0x10\n} AM_STREAM_INFO_FLAGS;\n\ntypedef struct AM_STREAM_INFO\n{\n    REFERENCE_TIME tStart;\n    REFERENCE_TIME tStop;\n    DWORD dwStartCookie;\n    DWORD dwStopCookie;\n    DWORD dwFlags;\n} AM_STREAM_INFO;\n\n[\n    local,\n    object,\n    uuid(36b73881-c2c8-11cf-8b46-00805f6cef60),\n    pointer_default(unique)\n]\ninterface IAMStreamControl : IUnknown\n{\n    HRESULT StartAt(\n        [in] const REFERENCE_TIME *ptStart,\n        [in] DWORD dwCookie);\n\n    HRESULT StopAt(\n        [in] const REFERENCE_TIME *ptStop,\n        [in] BOOL bSendExtra,\n        [in] DWORD dwCookie);\n\n    HRESULT GetInfo(\n        [out] AM_STREAM_INFO *pInfo);\n}\n\ncpp_quote(\"#ifndef _IKsPropertySet_\")\ncpp_quote(\"#define _IKsPropertySet_\")\ncpp_quote(\"#define KSPROPERTY_SUPPORT_GET  1\")\ncpp_quote(\"#define KSPROPERTY_SUPPORT_SET  2\")\n\n[\n    object,\n    uuid(31efac30-515c-11d0-a9aa-00aa0061be93),\n    pointer_default(unique),\n    local\n]\ninterface IKsPropertySet : IUnknown\n{\n    HRESULT Set( [in] REFGUID guidPropSet,\n                 [in] DWORD dwPropID,\n                 [in, size_is(cbInstanceData)] LPVOID pInstanceData,\n                 [in] DWORD cbInstanceData,\n                 [in, size_is(cbPropData)] LPVOID pPropData,\n                 [in] DWORD cbPropData );\n\n    HRESULT Get( [in] REFGUID guidPropSet,\n                 [in] DWORD dwPropID,\n                 [in, size_is(cbInstanceData)] LPVOID pInstanceData,\n                 [in] DWORD cbInstanceData,\n                 [out, size_is(cbPropData)] LPVOID pPropData,\n                 [in] DWORD cbPropData,\n                 [out] DWORD *pcbReturned );\n\n    HRESULT QuerySupported( [in] REFGUID guidPropSet,\n                            [in] DWORD dwPropID,\n                            [out] DWORD *pTypeSupport);\n}\ncpp_quote(\"#endif /* _IKsPropertySet_ */\")\n\n[\n    local,\n    object,\n    uuid(6025a880-c0d5-11d0-bd4e-00a0c911ce86),\n    pointer_default(unique)\n]\ninterface IMediaPropertyBag : IPropertyBag\n{\n    typedef IMediaPropertyBag *LPMEDIAPROPERTYBAG;\n\n    HRESULT EnumProperty(\n            [in]  ULONG iProperty,\n            [in, out] VARIANT *pvarPropertyName,\n            [in, out] VARIANT *pvarPropertyValue);\n}\n\n\n[\n    local,\n    object,\n    uuid(5738e040-b67f-11d0-bd4d-00a0c911ce86),\n    pointer_default(unique)\n]\ninterface IPersistMediaPropertyBag : IPersist\n{\n    HRESULT InitNew(void);\n\n    HRESULT Load(\n            [in] IMediaPropertyBag *pPropBag,\n            [in] IErrorLog *pErrorLog);\n\n    HRESULT Save(\n            [in] IMediaPropertyBag *pPropBag,\n            [in] BOOL fClearDirty,\n            [in] BOOL fSaveAllProperties);\n\n    typedef IPersistMediaPropertyBag *LPPERSISTMEDIAPROPERTYBAG;\n}\n\n[\n    object,\n    uuid(36b73883-c2c8-11cf-8b46-00805f6cef60),\n    pointer_default(unique)\n]\ninterface ISeekingPassThru : IUnknown\n{\n    HRESULT Init( [in] BOOL bSupportRendering, [in] IPin *pPin);\n}\n\nenum _AM_FILTER_MISC_FLAGS\n{\n    AM_FILTER_MISC_FLAGS_IS_RENDERER = 0x1,\n    AM_FILTER_MISC_FLAGS_IS_SOURCE = 0x2\n};\n\n[\n    local,\n    object,\n    uuid(2dd74950-a890-11d1-abe8-00a0c905f375),\n    pointer_default(unique)\n]\ninterface IAMFilterMiscFlags : IUnknown\n{\n    ULONG GetMiscFlags();\n}\n\n[\n    local,\n    object,\n    uuid(4995f511-9ddb-4f12-bd3b-f04611807b79),\n    pointer_default(unique)\n]\ninterface IAMGraphBuilderCallback : IUnknown\n{\n    HRESULT SelectedFilter(\n        [in] IMoniker *pMon);\n\n    HRESULT CreatedFilter(\n        [in] IBaseFilter *pFil);\n}\n\n[\n    local,\n    object,\n    uuid(d8d715a0-6e5e-11d0-b3f0-00aa003761c5),\n    pointer_default(unique)\n]\ninterface IAMVfwCaptureDialogs : IUnknown\n{\n    HRESULT HasDialog(\n            [in] int dialog);\n    HRESULT ShowDialog(\n            [in] int dialog,\n            [in] HWND hwnd);\n    HRESULT SendDriverMessage(\n            [in] int dialog,\n            [in] int msg,\n            [in] long data1,\n            [in] long data2);\n}\n"
  },
  {
    "path": "wine/windows/basetsd.h",
    "content": "/*\n * Compilers that uses ILP32, LP64 or P64 type models\n * for both Win32 and Win64 are supported by this file.\n *\n * Copyright (C) 1999 Patrik Stridvall\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_BASETSD_H\n#define __WINE_BASETSD_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n/*\n * Win32 was easy to implement under Unix since most 32-bit Unices use the same\n * type model (ILP32) as Win32, where int, long and pointer are 32-bit.\n *\n * Win64, however, can cause some problems. Most 64-bit Unices use the LP64 type\n * model where int is 32-bit and long and pointer are 64-bit. Win64 on the other\n * hand uses the LLP64 type model where int and long are 32 bit and pointer is\n * 64-bit.\n */\n\n#if (defined(__x86_64__) || defined(__powerpc64__) || defined(__aarch64__)) && !defined(_WIN64)\n#define _WIN64\n#endif\n\n/* Type model independent typedefs */\n/* The __intXX types are native types defined by the MS C compiler.\n * Apps that make use of them before they get defined here, can\n * simply add to the command line:\n *    -D__int8=char -D__int16=short -D__int32=int \"-D__int64=long long\"\n */\n#if !defined(_MSC_VER) && !defined(__WIDL__)\n#  ifndef __int8\n#    define __int8  char\n#  endif\n#  ifndef __int16\n#    define __int16 short\n#  endif\n#  ifndef __int32\n#    define __int32 int\n#  endif\n#  ifndef __int64\n#    if defined(_WIN64) && !defined(__MINGW64__)\n#      define __int64 long\n#    else\n#      define __int64 long long\n#    endif\n#  endif\n#endif /* !defined(_MSC_VER) */\n\n/* FIXME: DECLSPEC_ALIGN should be declared only in winnt.h, but we need it here too */\n#ifndef DECLSPEC_ALIGN\n# if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)\n#  define DECLSPEC_ALIGN(x) __declspec(align(x))\n# elif defined(__GNUC__)\n#  define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))\n# else\n#  define DECLSPEC_ALIGN(x)\n# endif\n#endif\n\ntypedef signed char      INT8, *PINT8;\ntypedef signed short     INT16, *PINT16;\ntypedef signed int       INT32, *PINT32;\ntypedef unsigned char    UINT8, *PUINT8;\ntypedef unsigned short   UINT16, *PUINT16;\ntypedef unsigned int     UINT32, *PUINT32;\ntypedef signed int       LONG32, *PLONG32;\ntypedef unsigned int     ULONG32, *PULONG32;\ntypedef unsigned int     DWORD32, *PDWORD32;\n\n#ifdef _MSC_VER\ntypedef signed __int64   INT64, *PINT64;\ntypedef unsigned __int64 UINT64, *PUINT64;\ntypedef signed __int64   LONG64, *PLONG64;\ntypedef unsigned __int64 ULONG64, *PULONG64;\ntypedef unsigned __int64 DWORD64, *PDWORD64;\n#else\ntypedef signed __int64   DECLSPEC_ALIGN(8) INT64, *PINT64;\ntypedef unsigned __int64 DECLSPEC_ALIGN(8) UINT64, *PUINT64;\ntypedef signed __int64   DECLSPEC_ALIGN(8) LONG64, *PLONG64;\ntypedef unsigned __int64 DECLSPEC_ALIGN(8) ULONG64, *PULONG64;\ntypedef unsigned __int64 DECLSPEC_ALIGN(8) DWORD64, *PDWORD64;\n#endif\n\n/* Basic pointer-sized integer types */\n\n#if defined(__midl) || defined(__WIDL__)\n\ntypedef /* [public] */ signed __int3264   INT_PTR, *PINT_PTR;\ntypedef /* [public] */ signed __int3264   LONG_PTR, *PLONG_PTR;\ntypedef /* [public] */ unsigned __int3264 UINT_PTR, *PUINT_PTR;\ntypedef /* [public] */ unsigned __int3264 ULONG_PTR, *PULONG_PTR;\ntypedef ULONG_PTR                   DWORD_PTR, *PDWORD_PTR;\n\n#elif defined(_WIN64)\n\n#define __int3264 __int64\n\ntypedef signed __int64   INT_PTR, *PINT_PTR;\ntypedef signed __int64   LONG_PTR, *PLONG_PTR;\ntypedef unsigned __int64 UINT_PTR, *PUINT_PTR;\ntypedef unsigned __int64 ULONG_PTR, *PULONG_PTR;\ntypedef ULONG_PTR        DWORD_PTR, *PDWORD_PTR;\n\n#else\n\n#define __int3264 __int32\n\ntypedef long          INT_PTR, *PINT_PTR;\ntypedef unsigned long UINT_PTR, *PUINT_PTR;\ntypedef long          LONG_PTR, *PLONG_PTR;\ntypedef unsigned long ULONG_PTR, *PULONG_PTR;\ntypedef ULONG_PTR     DWORD_PTR, *PDWORD_PTR;\n\n#endif\n\n/* Win32 or Win64 dependent typedef/defines. */\n\n#ifdef _WIN64\n\n#define MAXINT_PTR 0x7fffffffffffffff\n#define MININT_PTR 0x8000000000000000\n#define MAXUINT_PTR 0xffffffffffffffff\n\ntypedef __int64 SHANDLE_PTR;\ntypedef unsigned __int64 HANDLE_PTR;\ntypedef int HALF_PTR, *PHALF_PTR;\ntypedef unsigned int UHALF_PTR, *PUHALF_PTR;\n\n#define MAXHALF_PTR 0x7fffffff\n#define MINHALF_PTR 0x80000000\n#define MAXUHALF_PTR 0xffffffff\n\n#if !defined(__midl) && !defined(__WIDL__)\n\nstatic inline ULONG32 HandleToULong(const void *h)\n{\n    return (ULONG32)(ULONG_PTR)h;\n}\n\nstatic inline LONG32 HandleToLong(const void *h)\n{\n    return (LONG32)(LONG_PTR)h;\n}\n\nstatic inline void *ULongToHandle(ULONG32 ul)\n{\n    return (void *)(ULONG_PTR)ul;\n}\n\nstatic inline void *LongToHandle(LONG32 l)\n{\n    return (void *)(LONG_PTR)l;\n}\n\nstatic inline ULONG32 PtrToUlong(const void *p)\n{\n    return (ULONG32)(ULONG_PTR)p;\n}\n\nstatic inline LONG32 PtrToLong(const void *p)\n{\n    return (LONG32)(LONG_PTR)p;\n}\n\nstatic inline UINT32 PtrToUint(const void *p)\n{\n    return (UINT32)(UINT_PTR)p;\n}\n\nstatic inline INT32 PtrToInt(const void *p)\n{\n    return (INT32)(INT_PTR)p;\n}\n\nstatic inline UINT16 PtrToUshort(const void *p)\n{\n    return (UINT16)(ULONG_PTR)p;\n}\n\nstatic inline INT16 PtrToShort(const void *p)\n{\n    return (INT16)(LONG_PTR)p;\n}\n\nstatic inline void *IntToPtr(INT32 i)\n{\n    return (void *)(INT_PTR)i;\n}\n\nstatic inline void *UIntToPtr(UINT32 ui)\n{\n    return (void *)(UINT_PTR)ui;\n}\n\nstatic inline void *LongToPtr(LONG32 l)\n{\n    return (void *)(LONG_PTR)l;\n}\n\nstatic inline void *ULongToPtr(ULONG32 ul)\n{\n    return (void *)(ULONG_PTR)ul;\n}\n\n#endif  /* !__midl && !__WIDL__ */\n\n#else /* FIXME: defined(_WIN32) */\n\n#define MAXINT_PTR 0x7fffffff\n#define MININT_PTR 0x80000000\n#define MAXUINT_PTR 0xffffffff\n\ntypedef long SHANDLE_PTR;\ntypedef unsigned long HANDLE_PTR;\ntypedef signed short HALF_PTR, *PHALF_PTR;\ntypedef unsigned short UHALF_PTR, *PUHALF_PTR;\n\n#define MAXUHALF_PTR 0xffff\n#define MAXHALF_PTR 0x7fff\n#define MINHALF_PTR 0x8000\n\n#define HandleToULong(h)        ((ULONG)(ULONG_PTR)(h))\n#define HandleToLong(h)         ((LONG)(LONG_PTR)(h))\n#define ULongToHandle(ul)       ((HANDLE)(ULONG_PTR)(ul))\n#define LongToHandle(l)         ((HANDLE)(LONG_PTR)(l))\n#define PtrToUlong(p)           ((ULONG)(ULONG_PTR)(p))\n#define PtrToLong(p)            ((LONG)(LONG_PTR)(p))\n#define PtrToUint(p)            ((UINT)(UINT_PTR)(p))\n#define PtrToInt(p)             ((INT)(INT_PTR)(p))\n#define PtrToUshort(p)          ((USHORT)(ULONG_PTR)(p))\n#define PtrToShort(p)           ((SHORT)(LONG_PTR)(p))\n#define IntToPtr(i)             ((void *)(INT_PTR)((INT)i))\n#define UIntToPtr(ui)           ((void *)(UINT_PTR)((UINT)ui))\n#define LongToPtr(l)            ((void *)(LONG_PTR)((LONG)l))\n#define ULongToPtr(ul)          ((void *)(ULONG_PTR)((ULONG)ul))\n\n#endif /* defined(_WIN64) || defined(_WIN32) */\n\n#define HandleToUlong(h)        HandleToULong(h)\n#define UlongToHandle(ul)       ULongToHandle(ul)\n#define UintToPtr(ui)           UIntToPtr(ui)\n#define UlongToPtr(ul)          ULongToPtr(ul)\n\ntypedef LONG_PTR SSIZE_T, *PSSIZE_T;\ntypedef ULONG_PTR SIZE_T, *PSIZE_T;\n\ntypedef ULONG_PTR KAFFINITY, *PKAFFINITY;\n\n/* Some Wine-specific definitions */\n\n/* Architecture dependent settings. */\n/* These are hardcoded to avoid dependencies on config.h in Winelib apps. */\n#if defined(__i386__)\n# undef  WORDS_BIGENDIAN\n# undef  BITFIELDS_BIGENDIAN\n# define ALLOW_UNALIGNED_ACCESS\n#elif defined(__x86_64__)\n# undef  WORDS_BIGENDIAN\n# undef  BITFIELDS_BIGENDIAN\n# define ALLOW_UNALIGNED_ACCESS\n#elif defined(__powerpc__)\n# define WORDS_BIGENDIAN\n# define BITFIELDS_BIGENDIAN\n# undef  ALLOW_UNALIGNED_ACCESS\n#elif defined(__ALPHA__)\n# undef  WORDS_BIGENDIAN\n# undef  BITFIELDS_BIGENDIAN\n# undef  ALLOW_UNALIGNED_ACCESS\n#elif defined(__ARMEB__)\n# define WORDS_BIGENDIAN\n# define BITFIELDS_BIGENDIAN\n# undef  ALLOW_UNALIGNED_ACCESS\n#elif defined(__ARMEL__) || defined(__arm__)\n# undef  WORDS_BIGENDIAN\n# undef  BITFIELDS_BIGENDIAN\n# undef  ALLOW_UNALIGNED_ACCESS\n#elif defined(__AARCH64EB__)\n# define WORDS_BIGENDIAN\n# define BITFIELDS_BIGENDIAN\n# undef  ALLOW_UNALIGNED_ACCESS\n#elif defined(__AARCH64EL__) || defined(__aarch64__)\n# undef  WORDS_BIGENDIAN\n# undef  BITFIELDS_BIGENDIAN\n# undef  ALLOW_UNALIGNED_ACCESS\n#elif defined(__MIPSEB__)\n# define WORDS_BIGENDIAN\n# define BITFIELDS_BIGENDIAN\n# undef  ALLOW_UNALIGNED_ACCESS\n#elif defined(__MIPSEL__)\n# undef  WORDS_BIGENDIAN\n# undef  BITFIELDS_BIGENDIAN\n# undef  ALLOW_UNALIGNED_ACCESS\n#elif !defined(RC_INVOKED) && !defined(__WIDL__) && !defined(__midl)\n# error Unknown CPU architecture!\n#endif\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif /* !defined(__WINE_BASETSD_H) */\n"
  },
  {
    "path": "wine/windows/basetyps.h",
    "content": "/*\n * Copyright (C) 1998 Anders Norlander\n * Copyright (C) 2005 Steven Edwards\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _BASETYPS_H_\n#define _BASETYPS_H_\n\n#ifdef __cplusplus\n# define EXTERN_C extern \"C\"\n#else\n# define EXTERN_C extern\n#endif\n\n#define STDMETHODCALLTYPE  __stdcall\n#define STDMETHODVCALLTYPE __cdecl\n#define STDAPICALLTYPE     __stdcall\n#define STDAPIVCALLTYPE    __cdecl\n#define STDAPI             EXTERN_C HRESULT STDAPICALLTYPE\n#define STDAPI_(t)         EXTERN_C t STDAPICALLTYPE\n#define STDMETHODIMP       HRESULT STDMETHODCALLTYPE\n#define STDMETHODIMP_(t)   t STDMETHODCALLTYPE\n#define STDAPIV            EXTERN_C HRESULT STDAPIVCALLTYPE\n#define STDAPIV_(t)        EXTERN_C t STDAPIVCALLTYPE\n#define STDMETHODIMPV      HRESULT STDMETHODVCALLTYPE\n#define STDMETHODIMPV_(t)  t STDMETHODVCALLTYPE\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n# define interface struct\n# define STDMETHOD(m) virtual HRESULT STDMETHODCALLTYPE m\n# define STDMETHOD_(t,m) virtual t STDMETHODCALLTYPE m\n# define PURE =0\n# define THIS_\n# define THIS void\n# define DECLARE_INTERFACE(i)    interface i\n# define DECLARE_INTERFACE_(i,b) interface i : public b\n#else\n# define STDMETHOD(m) HRESULT (STDMETHODCALLTYPE *m)\n# define STDMETHOD_(t,m) t (STDMETHODCALLTYPE *m)\n# define PURE\n# define THIS_ INTERFACE *,\n# define THIS INTERFACE *\n# ifdef CONST_VTABLE\n#  define DECLARE_INTERFACE(i) \\\n     typedef interface i { const struct i##Vtbl *lpVtbl; } i; \\\n     typedef struct i##Vtbl i##Vtbl; \\\n     struct i##Vtbl\n# else\n#  define DECLARE_INTERFACE(i) \\\n     typedef interface i { struct i##Vtbl *lpVtbl; } i; \\\n     typedef struct i##Vtbl i##Vtbl; \\\n     struct i##Vtbl\n# endif\n# define DECLARE_INTERFACE_(i,b) DECLARE_INTERFACE(i)\n#endif\n\n#include <guiddef.h>\n\n#ifndef _ERROR_STATUS_T_DEFINED\ntypedef unsigned long error_status_t;\n#define _ERROR_STATUS_T_DEFINED\n#endif\n\n#ifndef _WCHAR_T_DEFINED\ntypedef unsigned short wchar_t;\n#define _WCHAR_T_DEFINED\n#endif\n\n#endif /* _BASETYPS_H_ */\n"
  },
  {
    "path": "wine/windows/bcrypt.h",
    "content": "/*\n * Copyright (C) 2007 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_BCRYPT_H\n#define __WINE_BCRYPT_H\n\n#ifndef WINAPI\n#define WINAPI __stdcall\n#endif\n\n#ifndef IN\n#define IN\n#endif\n\n#ifndef OUT\n#define OUT\n#endif\n\n#ifndef OPTIONAL\n#define OPTIONAL\n#endif\n\n#ifndef WINE_NTSTATUS_DECLARED\n#define WINE_NTSTATUS_DECLARED\ntypedef LONG NTSTATUS;\n#endif\n\n#define BCRYPT_ALGORITHM_NAME (const WCHAR []){'A','l','g','o','r','i','t','h','m','N','a','m','e',0}\n#define BCRYPT_AUTH_TAG_LENGTH (const WCHAR []){'A','u','t','h','T','a','g','L','e','n','g','t','h',0}\n#define BCRYPT_BLOCK_LENGTH (const WCHAR []){'B','l','o','c','k','L','e','n','g','t','h',0}\n#define BCRYPT_BLOCK_SIZE_LIST (const WCHAR []){'B','l','o','c','k','S','i','z','e','L','i','s','t',0}\n#define BCRYPT_CHAINING_MODE (const WCHAR []){'C','h','a','i','n','i','n','g','M','o','d','e',0}\n#define BCRYPT_EFFECTIVE_KEY_LENGTH (const WCHAR []){'E','f','f','e','c','t','i','v','e','K','e','y','L','e','n','g','t','h',0}\n#define BCRYPT_HASH_BLOCK_LENGTH (const WCHAR []){'H','a','s','h','B','l','o','c','k','L','e','n','g','t','h',0}\n#define BCRYPT_HASH_LENGTH (const WCHAR []){'H','a','s','h','D','i','g','e','s','t','L','e','n','g','t','h',0}\n#define BCRYPT_HASH_OID_LIST (const WCHAR []){'H','a','s','h','O','I','D','L','i','s','t',0}\n#define BCRYPT_KEY_LENGTH (const WCHAR []){'K','e','y','L','e','n','g','t','h',0}\n#define BCRYPT_KEY_LENGTHS (const WCHAR []){'K','e','y','L','e','n','g','t','h','s',0}\n#define BCRYPT_KEY_OBJECT_LENGTH (const WCHAR []){'K','e','y','O','b','j','e','c','t','L','e','n','g','t','h',0}\n#define BCRYPT_KEY_STRENGTH (const WCHAR []){'K','e','y','S','t','r','e','n','g','t','h',0}\n#define BCRYPT_OBJECT_LENGTH (const WCHAR []){'O','b','j','e','c','t','L','e','n','g','t','h',0}\n#define BCRYPT_PADDING_SCHEMES (const WCHAR []){'P','a','d','d','i','n','g','S','c','h','e','m','e','s',0}\n#define BCRYPT_PROVIDER_HANDLE (const WCHAR []){'P','r','o','v','i','d','e','r','H','a','n','d','l','e',0}\n#define BCRYPT_SIGNATURE_LENGTH (const WCHAR []){'S','i','g','n','a','t','u','r','e','L','e','n','g','t','h',0}\n\n#define BCRYPT_OPAQUE_KEY_BLOB   (const WCHAR []){'O','p','a','q','u','e','K','e','y','B','l','o','b',0}\n#define BCRYPT_KEY_DATA_BLOB     (const WCHAR []){'K','e','y','D','a','t','a','B','l','o','b',0}\n#define BCRYPT_AES_WRAP_KEY_BLOB (const WCHAR []){'R','f','c','3','5','6','5','K','e','y','W','r','a','p','B','l','o','b',0}\n#define BCRYPT_ECCPUBLIC_BLOB    (const WCHAR []){'E','C','C','P','U','B','L','I','C','B','L','O','B',0}\n#define BCRYPT_ECCPRIVATE_BLOB   (const WCHAR []){'E','C','C','P','R','I','V','A','T','E','B','L','O','B',0}\n#define BCRYPT_RSAPUBLIC_BLOB    (const WCHAR []){'R','S','A','P','U','B','L','I','C','B','L','O','B',0}\n#define BCRYPT_RSAPRIVATE_BLOB   (const WCHAR []){'R','S','A','P','R','I','V','A','T','E','B','L','O','B',0}\n\n#define MS_PRIMITIVE_PROVIDER (const WCHAR [])\\\n    {'M','i','c','r','o','s','o','f','t',' ','P','r','i','m','i','t','i','v','e',' ','P','r','o','v','i','d','e','r',0}\n#define MS_PLATFORM_CRYPTO_PROVIDER (const WCHAR [])\\\n    {'M','i','c','r','o','s','o','f','t',' ','P','l','a','t','f','o','r','m',' ','C','r','y','p','t','o',' ','P','r','o','v','i','d','e','r',0}\n\n#define BCRYPT_AES_ALGORITHM        (const WCHAR []){'A','E','S',0}\n#define BCRYPT_MD2_ALGORITHM        (const WCHAR []){'M','D','2',0}\n#define BCRYPT_MD4_ALGORITHM        (const WCHAR []){'M','D','4',0}\n#define BCRYPT_MD5_ALGORITHM        (const WCHAR []){'M','D','5',0}\n#define BCRYPT_RNG_ALGORITHM        (const WCHAR []){'R','N','G',0}\n#define BCRYPT_RSA_ALGORITHM        (const WCHAR []){'R','S','A',0}\n#define BCRYPT_SHA1_ALGORITHM       (const WCHAR []){'S','H','A','1',0}\n#define BCRYPT_SHA256_ALGORITHM     (const WCHAR []){'S','H','A','2','5','6',0}\n#define BCRYPT_SHA384_ALGORITHM     (const WCHAR []){'S','H','A','3','8','4',0}\n#define BCRYPT_SHA512_ALGORITHM     (const WCHAR []){'S','H','A','5','1','2',0}\n#define BCRYPT_ECDSA_P256_ALGORITHM (const WCHAR []){'E','C','D','S','A','_','P','2','5','6',0}\n#define BCRYPT_ECDSA_P384_ALGORITHM (const WCHAR []){'E','C','D','S','A','_','P','3','8','4',0}\n#define BCRYPT_ECDSA_P521_ALGORITHM (const WCHAR []){'E','C','D','S','A','_','P','5','2','1',0}\n\n#define BCRYPT_CHAIN_MODE_NA        (const WCHAR []){'C','h','a','i','n','i','n','g','M','o','d','e','N','/','A',0}\n#define BCRYPT_CHAIN_MODE_CBC       (const WCHAR []){'C','h','a','i','n','i','n','g','M','o','d','e','C','B','C',0}\n#define BCRYPT_CHAIN_MODE_ECB       (const WCHAR []){'C','h','a','i','n','i','n','g','M','o','d','e','E','C','B',0}\n#define BCRYPT_CHAIN_MODE_CFB       (const WCHAR []){'C','h','a','i','n','i','n','g','M','o','d','e','C','F','B',0}\n#define BCRYPT_CHAIN_MODE_CCM       (const WCHAR []){'C','h','a','i','n','i','n','g','M','o','d','e','C','C','M',0}\n#define BCRYPT_CHAIN_MODE_GCM       (const WCHAR []){'C','h','a','i','n','i','n','g','M','o','d','e','G','C','M',0}\n\n#define BCRYPT_ECDSA_PUBLIC_P256_MAGIC  0x31534345\n#define BCRYPT_ECDSA_PRIVATE_P256_MAGIC 0x32534345\n#define BCRYPT_ECDSA_PUBLIC_P384_MAGIC  0x33534345\n#define BCRYPT_ECDSA_PRIVATE_P384_MAGIC 0x34534345\n#define BCRYPT_ECDSA_PUBLIC_P521_MAGIC  0x35534345\n#define BCRYPT_ECDSA_PRIVATE_P521_MAGIC 0x36534345\n\ntypedef struct _BCRYPT_ALGORITHM_IDENTIFIER\n{\n    LPWSTR pszName;\n    ULONG  dwClass;\n    ULONG  dwFlags;\n} BCRYPT_ALGORITHM_IDENTIFIER;\n\ntypedef struct __BCRYPT_KEY_LENGTHS_STRUCT\n{\n    ULONG dwMinLength;\n    ULONG dwMaxLength;\n    ULONG dwIncrement;\n} BCRYPT_KEY_LENGTHS_STRUCT, BCRYPT_AUTH_TAG_LENGTHS_STRUCT;\n\ntypedef struct _BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO\n{\n    ULONG cbSize;\n    ULONG dwInfoVersion;\n    UCHAR *pbNonce;\n    ULONG cbNonce;\n    UCHAR *pbAuthData;\n    ULONG cbAuthData;\n    UCHAR *pbTag;\n    ULONG cbTag;\n    UCHAR *pbMacContext;\n    ULONG cbMacContext;\n    ULONG cbAAD;\n    ULONGLONG cbData;\n    ULONG dwFlags;\n} BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO, *PBCRYPT_AUTHENTICATED_CIPHER_MODE_INFO;\n\ntypedef struct _BCRYPT_ECCKEY_BLOB\n{\n    ULONG dwMagic;\n    ULONG cbKey;\n} BCRYPT_ECCKEY_BLOB, *PBCRYPT_ECCKEY_BLOB;\n\n#define BCRYPT_RSAPUBLIC_MAGIC      0x31415352\n#define BCRYPT_RSAPRIVATE_MAGIC     0x32415352\n#define BCRYPT_RSAFULLPRIVATE_MAGIC 0x33415352\n\ntypedef struct _BCRYPT_RSAKEY_BLOB\n{\n    ULONG Magic;\n    ULONG BitLength;\n    ULONG cbPublicExp;\n    ULONG cbModulus;\n    ULONG cbPrime1;\n    ULONG cbPrime2;\n} BCRYPT_RSAKEY_BLOB;\n\ntypedef struct _BCRYPT_PKCS1_PADDING_INFO\n{\n    LPCWSTR pszAlgId;\n} BCRYPT_PKCS1_PADDING_INFO;\n\n#define BCRYPT_PAD_NONE                     0x00000001\n#define BCRYPT_PAD_PKCS1                    0x00000002\n#define BCRYPT_PAD_OAEP                     0x00000004\n#define BCRYPT_PAD_PSS                      0x00000008\n#define BCRYPT_PAD_PKCS1_OPTIONAL_HASH_OID  0x00000010\n\n#define BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO_VERSION 1\n\n#define BCRYPT_AUTH_MODE_CHAIN_CALLS_FLAG 0x00000001\n#define BCRYPT_AUTH_MODE_IN_PROGRESS_FLAG 0x00000002\n\ntypedef struct _CRYPT_INTERFACE_REG\n{\n    ULONG dwInterface;\n    ULONG dwFlags;\n    ULONG cFunctions;\n    PWSTR *rgpszFunctions;\n} CRYPT_INTERFACE_REG, *PCRYPT_INTERFACE_REG;\n\ntypedef struct _CRYPT_IMAGE_REG\n{\n    PWSTR pszImage;\n    ULONG cInterfaces;\n    PCRYPT_INTERFACE_REG *rgpInterfaces;\n} CRYPT_IMAGE_REG, *PCRYPT_IMAGE_REG;\n\ntypedef struct _CRYPT_PROVIDER_REG\n{\n    ULONG cAliases;\n    PWSTR *rgpszAliases;\n    PCRYPT_IMAGE_REG pUM;\n    PCRYPT_IMAGE_REG pKM;\n} CRYPT_PROVIDER_REG, *PCRYPT_PROVIDER_REG;\n\ntypedef struct _BCRYPT_KEY_DATA_BLOB_HEADER\n{\n    ULONG dwMagic;\n    ULONG dwVersion;\n    ULONG cbKeyData;\n} BCRYPT_KEY_DATA_BLOB_HEADER, *PBCRYPT_KEY_DATA_BLOB_HEADER;\n\n#define BCRYPT_KEY_DATA_BLOB_MAGIC    0x4d42444b\n#define BCRYPT_KEY_DATA_BLOB_VERSION1 1\n\ntypedef PVOID BCRYPT_ALG_HANDLE;\ntypedef PVOID BCRYPT_KEY_HANDLE;\ntypedef PVOID BCRYPT_HANDLE;\ntypedef PVOID BCRYPT_HASH_HANDLE;\n\n/* Flags for BCryptGenRandom */\n#define BCRYPT_RNG_USE_ENTROPY_IN_BUFFER 0x00000001\n#define BCRYPT_USE_SYSTEM_PREFERRED_RNG  0x00000002\n\n/* Flags for BCryptOpenAlgorithmProvider */\n#define BCRYPT_ALG_HANDLE_HMAC_FLAG 0x00000008\n\n/* Flags for BCryptEncrypt/BCryptDecrypt */\n#define BCRYPT_BLOCK_PADDING        0x00000001\n\nNTSTATUS WINAPI BCryptCloseAlgorithmProvider(BCRYPT_ALG_HANDLE, ULONG);\nNTSTATUS WINAPI BCryptCreateHash(BCRYPT_ALG_HANDLE, BCRYPT_HASH_HANDLE *, PUCHAR, ULONG, PUCHAR, ULONG, ULONG);\nNTSTATUS WINAPI BCryptDecrypt(BCRYPT_KEY_HANDLE, PUCHAR, ULONG, VOID *, PUCHAR, ULONG, PUCHAR, ULONG, ULONG *, ULONG);\nNTSTATUS WINAPI BCryptDestroyHash(BCRYPT_HASH_HANDLE);\nNTSTATUS WINAPI BCryptDestroyKey(BCRYPT_KEY_HANDLE);\nNTSTATUS WINAPI BCryptEncrypt(BCRYPT_KEY_HANDLE, PUCHAR, ULONG, VOID *, PUCHAR, ULONG, PUCHAR, ULONG, ULONG *, ULONG);\nNTSTATUS WINAPI BCryptEnumAlgorithms(ULONG, ULONG *, BCRYPT_ALGORITHM_IDENTIFIER **, ULONG);\nNTSTATUS WINAPI BCryptFinishHash(BCRYPT_HASH_HANDLE, PUCHAR, ULONG, ULONG);\nNTSTATUS WINAPI BCryptGenerateSymmetricKey(BCRYPT_ALG_HANDLE, BCRYPT_KEY_HANDLE *, PUCHAR, ULONG, PUCHAR, ULONG, ULONG);\nNTSTATUS WINAPI BCryptGenRandom(BCRYPT_ALG_HANDLE, PUCHAR, ULONG, ULONG);\nNTSTATUS WINAPI BCryptGetFipsAlgorithmMode(BOOLEAN *);\nNTSTATUS WINAPI BCryptGetProperty(BCRYPT_HANDLE, LPCWSTR, PUCHAR, ULONG, ULONG *, ULONG);\nNTSTATUS WINAPI BCryptHash(BCRYPT_ALG_HANDLE, PUCHAR, ULONG, PUCHAR, ULONG, PUCHAR, ULONG);\nNTSTATUS WINAPI BCryptHashData(BCRYPT_HASH_HANDLE, PUCHAR, ULONG, ULONG);\nNTSTATUS WINAPI BCryptImportKeyPair(BCRYPT_ALG_HANDLE, BCRYPT_KEY_HANDLE, LPCWSTR, BCRYPT_KEY_HANDLE *, UCHAR *, ULONG, ULONG);\nNTSTATUS WINAPI BCryptOpenAlgorithmProvider(BCRYPT_ALG_HANDLE *, LPCWSTR, LPCWSTR, ULONG);\nNTSTATUS WINAPI BCryptSetProperty(BCRYPT_HANDLE, LPCWSTR, PUCHAR, ULONG, ULONG);\nNTSTATUS WINAPI BCryptDuplicateHash(BCRYPT_HASH_HANDLE, BCRYPT_HASH_HANDLE *, UCHAR *, ULONG, ULONG);\nNTSTATUS WINAPI BCryptVerifySignature(BCRYPT_KEY_HANDLE, void *, UCHAR *, ULONG, UCHAR *, ULONG, ULONG);\n\n#endif  /* __WINE_BCRYPT_H */\n"
  },
  {
    "path": "wine/windows/bdaiface.idl",
    "content": "/*\n * Copyright 2013 André Hentschel\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"unknwn.idl\";\nimport \"strmif.idl\";\nimport \"bdatypes.h\";\n#endif\n\n#include \"bdaiface_enums.h\"\n\n\n[\n    object,\n    uuid(fd501041-8ebe-11ce-8183-00aa00577da2),\n    pointer_default(unique)\n]\ninterface IBDA_NetworkProvider : IUnknown\n{\n    HRESULT PutSignalSource([in] ULONG ulSignalSource);\n    HRESULT GetSignalSource([in, out] ULONG *pulSignalSource);\n    HRESULT GetNetworkType([in, out] GUID *pguidNetworkType);\n    HRESULT PutTuningSpace([in] REFGUID guidTuningSpace);\n    HRESULT GetTuningSpace([in, out] GUID *pguidTuingSpace);\n    HRESULT RegisterDeviceFilter([in] IUnknown *pUnkFilterControl, [in, out] ULONG *ppvRegisitrationContext);\n    HRESULT UnRegisterDeviceFilter([in] ULONG pvRegistrationContext);\n}\n\n[\n    object,\n    uuid(71985F43-1CA1-11d3-9CC8-00C04F7971E0),\n    pointer_default(unique)\n]\ninterface IBDA_EthernetFilter : IUnknown\n{\n    HRESULT GetMulticastListSize([in, out] ULONG *pulcbAddresses);\n    HRESULT PutMulticastList([in] ULONG ulcbAddresses, [in, size_is(ulcbAddresses)] BYTE pAddressList []);\n    HRESULT GetMulticastList([in, out] ULONG *pulcbAddresses, [in, out, size_is(*pulcbAddresses)] BYTE pAddressList[]);\n    HRESULT PutMulticastMode([in] ULONG ulModeMask);\n    HRESULT GetMulticastMode([out] ULONG *pulModeMask);\n}\n\n[\n    object,\n    uuid(71985F44-1CA1-11d3-9CC8-00C04F7971E0),\n    pointer_default(unique)\n]\ninterface IBDA_IPV4Filter : IUnknown\n{\n    HRESULT GetMulticastListSize([in, out] ULONG *pulcbAddresses);\n    HRESULT PutMulticastList([in] ULONG ulcbAddresses, [in, size_is(ulcbAddresses)] BYTE pAddressList[]);\n    HRESULT GetMulticastList([in, out] ULONG *pulcbAddresses,[out, size_is(*pulcbAddresses)] BYTE pAddressList[]);\n    HRESULT PutMulticastMode([in] ULONG ulModeMask);\n    HRESULT GetMulticastMode([out] ULONG* pulModeMask);\n}\n\n[\n    object,\n    uuid(E1785A74-2A23-4fb3-9245-A8F88017EF33),\n    pointer_default(unique)\n]\ninterface IBDA_IPV6Filter : IUnknown\n{\n    HRESULT GetMulticastListSize([in, out] ULONG *pulcbAddresses);\n    HRESULT PutMulticastList([in] ULONG ulcbAddresses, [in, size_is(ulcbAddresses)] BYTE pAddressList[]);\n    HRESULT GetMulticastList([in, out] ULONG *pulcbAddresses,[out, size_is(*pulcbAddresses)] BYTE pAddressList[]);\n    HRESULT PutMulticastMode([in] ULONG ulModeMask);\n    HRESULT GetMulticastMode([out] ULONG* pulModeMask);\n}\n\n[\n    object,\n    uuid(FD0A5AF3-B41D-11d2-9C95-00C04F7971E0),\n    pointer_default(unique)\n]\ninterface IBDA_DeviceControl : IUnknown\n{\n    HRESULT StartChanges(void);\n    HRESULT CheckChanges(void);\n    HRESULT CommitChanges(void);\n    HRESULT GetChangeState([in, out] ULONG *pState);\n}\n\n[\n    object,\n    uuid(0DED49D5-A8B7-4d5d-97A1-12B0C195874D),\n    pointer_default(unique)\n]\ninterface IBDA_PinControl : IUnknown\n{\n    HRESULT GetPinID([in, out] ULONG *pulPinID);\n    HRESULT GetPinType([in, out] ULONG *pulPinType);\n    HRESULT RegistrationContext([in, out] ULONG *pulRegistrationCtx);\n}\n\n[\n    object,\n    uuid(D2F1644B-B409-11d2-BC69-00A0C9EE9E16),\n    pointer_default(unique)\n]\ninterface IBDA_SignalProperties : IUnknown\n{\n    HRESULT PutNetworkType([in] REFGUID guidNetworkType);\n    HRESULT GetNetworkType([in, out] GUID *pguidNetworkType);\n    HRESULT PutSignalSource([in] ULONG ulSignalSource);\n    HRESULT GetSignalSource([in, out] ULONG *pulSignalSource);\n    HRESULT PutTuningSpace([in] REFGUID guidTuningSpace);\n    HRESULT GetTuningSpace([in, out] GUID *pguidTuingSpace);\n}\n\n[\n    object,\n    uuid(1347D106-CF3A-428a-A5CB-AC0D9A2A4338),\n    pointer_default(unique)\n]\ninterface IBDA_SignalStatistics : IUnknown\n{\n    HRESULT put_SignalStrength ([in] LONG lDbStrength);\n    HRESULT get_SignalStrength ([in, out] LONG *plDbStrength);\n    HRESULT put_SignalQuality ([in] LONG lPercentQuality);\n    HRESULT get_SignalQuality ([in, out] LONG *plPercentQuality);\n    HRESULT put_SignalPresent ([in] BOOLEAN fPresent);\n    HRESULT get_SignalPresent ([in, out] BOOLEAN *pfPresent);\n    HRESULT put_SignalLocked ([in] BOOLEAN fLocked);\n    HRESULT get_SignalLocked ([in, out] BOOLEAN *pfLocked);\n    HRESULT put_SampleTime ([in] LONG lmsSampleTime);\n    HRESULT get_SampleTime ([in, out] LONG *plmsSampleTime);\n}\n\n[\n    object,\n    uuid(79B56888-7FEA-4690-B45D-38FD3C7849BE),\n    pointer_default(unique)\n]\ninterface IBDA_Topology : IUnknown\n{\n    HRESULT GetNodeTypes([in, out] ULONG *pulcNodeTypes,\n                         [in] ULONG ulcNodeTypesMax,\n                         [in, out, size_is (ulcNodeTypesMax)] ULONG rgulNodeTypes[]);\n    HRESULT GetNodeDescriptors([in, out] ULONG *ulcNodeDescriptors,\n                               [in] ULONG ulcNodeDescriptorsMax,\n                               [in, out, size_is(ulcNodeDescriptorsMax)] BDANODE_DESCRIPTOR rgNodeDescriptors[]);\n    HRESULT GetNodeInterfaces([in] ULONG ulNodeType,\n                              [in, out] ULONG *pulcInterfaces,\n                              [in] ULONG ulcInterfacesMax,\n                              [in, out, size_is (ulcInterfacesMax)] GUID rgguidInterfaces[]);\n    HRESULT GetPinTypes([in, out] ULONG *pulcPinTypes,\n                        [in] ULONG ulcPinTypesMax,\n                        [in, out, size_is (ulcPinTypesMax)] ULONG rgulPinTypes[]);\n    HRESULT GetTemplateConnections([in, out] ULONG *pulcConnections,\n                                   [in] ULONG ulcConnectionsMax,\n                                   [in, out, size_is (ulcConnectionsMax)] BDA_TEMPLATE_CONNECTION rgConnections[]);\n    HRESULT CreatePin([in] ULONG ulPinType, [in, out] ULONG *pulPinId);\n    HRESULT DeletePin([in] ULONG ulPinId);\n    HRESULT SetMediaType([in] ULONG ulPinId, [in] AM_MEDIA_TYPE *pMediaType);\n    HRESULT SetMedium([in] ULONG ulPinId, [in] REGPINMEDIUM *pMedium);\n    HRESULT CreateTopology([in] ULONG ulInputPinId, [in] ULONG ulOutputPinId);\n    HRESULT GetControlNode([in] ULONG ulInputPinId,\n                           [in] ULONG ulOutputPinId,\n                           [in] ULONG ulNodeType,\n                           [in, out] IUnknown **ppControlNode);\n}\n\n[\n    object,\n    uuid(71985F46-1CA1-11d3-9CC8-00C04F7971E0),\n    pointer_default(unique)\n]\ninterface IBDA_VoidTransform : IUnknown\n{\n    HRESULT Start(void);\n    HRESULT Stop(void);\n}\n\n[\n    object,\n    uuid(DDF15B0D-BD25-11d2-9CA0-00C04F7971E0),\n    pointer_default(unique)\n]\ninterface IBDA_NullTransform : IUnknown\n{\n    HRESULT Start(void);\n    HRESULT Stop(void);\n}\n\n[\n    object,\n    uuid(71985F47-1CA1-11d3-9CC8-00C04F7971E0),\n    pointer_default(unique)\n]\ninterface IBDA_FrequencyFilter : IUnknown\n{\n    HRESULT put_Autotune([in] ULONG ulTransponder);\n    HRESULT get_Autotune([in, out] ULONG *pulTransponder);\n    HRESULT put_Frequency([in] ULONG ulFrequency);\n    HRESULT get_Frequency([in, out] ULONG *pulFrequency);\n    HRESULT put_Polarity([in] Polarisation Polarity);\n    HRESULT get_Polarity([in, out] Polarisation *pPolarity);\n    HRESULT put_Range([in] ULONG ulRange);\n    HRESULT get_Range([in, out] ULONG *pulRange);\n    HRESULT put_Bandwidth([in] ULONG ulBandwidth);\n    HRESULT get_Bandwidth([in, out] ULONG *pulBandwidth);\n    HRESULT put_FrequencyMultiplier([in] ULONG ulMultiplier);\n    HRESULT get_FrequencyMultiplier([in, out] ULONG *pulMultiplier);\n}\n\n[\n    object,\n    uuid(992CF102-49F9-4719-A664-C4F23E2408F4),\n    pointer_default(unique)\n]\ninterface IBDA_LNBInfo : IUnknown\n{\n    HRESULT put_LocalOscilatorFrequencyLowBand([in] ULONG ulLOFLow);\n    HRESULT get_LocalOscilatorFrequencyLowBand([in, out] ULONG *pulLOFLow);\n    HRESULT put_LocalOscilatorFrequencyHighBand([in] ULONG ulLOFHigh);\n    HRESULT get_LocalOscilatorFrequencyHighBand([in, out] ULONG *pulLOFHigh);\n    HRESULT put_HighLowSwitchFrequency([in] ULONG ulSwitchFrequency);\n    HRESULT get_HighLowSwitchFrequency([in, out] ULONG *pulSwitchFrequency);\n}\n\n[\n    object,\n    uuid(F84E2AB0-3C6B-45e3-A0FC-8669D4B81F11),\n    pointer_default(unique)\n]\ninterface IBDA_DiseqCommand : IUnknown\n{\n    HRESULT put_EnableDiseqCommands([in] BOOLEAN bEnable);\n    HRESULT put_DiseqLNBSource([in] ULONG ulLNBSource);\n    HRESULT put_DiseqUseToneBurst([in] BOOLEAN bUseToneBurst);\n    HRESULT put_DiseqRepeats([in] ULONG ulRepeats);\n    HRESULT put_DiseqSendCommand([in] ULONG ulRequestId,\n                                 [in] ULONG ulcbCommandLen,\n                                 [in, size_is(ulcbCommandLen)] BYTE *pbCommand);\n    HRESULT get_DiseqResponse([in] ULONG ulRequestId,\n                              [in, out] ULONG *pulcbResponseLen,\n                              [in, out, size_is(*pulcbResponseLen)] BYTE pbResponse[]);\n}\n\n[\n    object,\n    uuid(DDF15B12-BD25-11d2-9CA0-00C04F7971E0),\n    pointer_default(unique)\n]\ninterface IBDA_AutoDemodulate : IUnknown\n{\n    HRESULT put_AutoDemodulate(void);\n}\n\n[\n    object,\n    uuid(34518D13-1182-48e6-B28F-B24987787326),\n    pointer_default(unique)\n]\ninterface IBDA_AutoDemodulateEx : IBDA_AutoDemodulate\n{\n    HRESULT get_SupportedDeviceNodeTypes([in] ULONG ulcDeviceNodeTypesMax,\n                                         [out] ULONG *pulcDeviceNodeTypes,\n                                         [in, out] GUID *pguidDeviceNodeTypes);\n    HRESULT get_SupportedVideoFormats([out] ULONG *pulAMTunerModeType,\n                                      [out] ULONG *pulAnalogVideoStandard);\n    HRESULT get_AuxInputCount([in, out] ULONG *pulCompositeCount,\n                              [in, out] ULONG *pulSvideoCount);\n}\n\n[\n    object,\n    uuid(EF30F379-985B-4d10-B640-A79D5E04E1E0),\n    pointer_default(unique)\n]\ninterface IBDA_DigitalDemodulator : IUnknown\n{\n    HRESULT put_ModulationType([in] ModulationType *pModulationType);\n    HRESULT get_ModulationType([in, out] ModulationType *pModulationType);\n    HRESULT put_InnerFECMethod([in] FECMethod *pFECMethod);\n    HRESULT get_InnerFECMethod([in, out] FECMethod *pFECMethod);\n    HRESULT put_InnerFECRate([in] BinaryConvolutionCodeRate *pFECRate);\n    HRESULT get_InnerFECRate([in, out] BinaryConvolutionCodeRate *pFECRate);\n    HRESULT put_OuterFECMethod([in] FECMethod *pFECMethod);\n    HRESULT get_OuterFECMethod([in, out] FECMethod *pFECMethod);\n    HRESULT put_OuterFECRate([in] BinaryConvolutionCodeRate *pFECRate);\n    HRESULT get_OuterFECRate([in, out] BinaryConvolutionCodeRate *pFECRate);\n    HRESULT put_SymbolRate([in] ULONG *pSymbolRate);\n    HRESULT get_SymbolRate([in, out] ULONG *pSymbolRate);\n    HRESULT put_SpectralInversion([in] SpectralInversion *pSpectralInversion);\n    HRESULT get_SpectralInversion([in, out] SpectralInversion *pSpectralInversion);\n}\n\n[\n    object,\n    uuid(525ED3EE-5CF3-4e1e-9A06-5368A84F9A6E),\n    pointer_default(unique)\n]\ninterface IBDA_DigitalDemodulator2 : IBDA_DigitalDemodulator\n{\n    HRESULT put_GuardInterval([in] GuardInterval *pGuardInterval);\n    HRESULT get_GuardInterval([in, out] GuardInterval *pGuardInterval);\n    HRESULT put_TransmissionMode([in] TransmissionMode *pTransmissionMode);\n    HRESULT get_TransmissionMode([in, out] TransmissionMode *pTransmissionMode);\n    HRESULT put_RollOff([in] RollOff *pRollOff);\n    HRESULT get_RollOff([in, out] RollOff *pRollOff);\n    HRESULT put_Pilot([in] Pilot *pPilot);\n    HRESULT get_Pilot([in, out] Pilot *pPilot);\n}\n\n[\n    object,\n    uuid(13F19604-7D32-4359-93A2-A05205D90AC9),\n    pointer_default(unique)\n]\ninterface IBDA_DigitalDemodulator3 : IBDA_DigitalDemodulator2\n{\n    HRESULT put_SignalTimeouts([in] BDA_SIGNAL_TIMEOUTS *pSignalTimeouts);\n    HRESULT get_SignalTimeouts([in, out] BDA_SIGNAL_TIMEOUTS *pSignalTimeouts);\n    HRESULT put_PLPNumber([in] ULONG *pPLPNumber);\n    HRESULT get_PLPNumber([in, out] ULONG *pPLPNumber);\n}\n\n[\n    object,\n    uuid(4B2BD7EA-8347-467b-8DBF-62F784929CC3),\n    helpstring(\"ICCSubStreamFiltering Interface\"),\n    pointer_default(unique)\n]\ninterface ICCSubStreamFiltering : IUnknown\n{\n    [propget, helpstring(\"property SubstreamTypes\")] HRESULT SubstreamTypes([out, retval] long *pTypes);\n    [propput, helpstring(\"property SubstreamTypes\")] HRESULT SubstreamTypes([in] long Types);\n}\n\n[\n    object,\n    uuid(3F4DC8E2-4050-11d3-8F4B-00C04F7971E2),\n    pointer_default(unique),\n    helpstring(\"Not supported - Use IBDA_IPSinkInfo instead\")\n]\ninterface IBDA_IPSinkControl : IUnknown\n{\n    HRESULT GetMulticastList([in, out] unsigned long *pulcbSize, [in, out] BYTE **pbBuffer);\n    HRESULT GetAdapterIPAddress ([in,out] unsigned long *pulcbSize, [in,out] BYTE **pbBuffer);\n}\n\n[\n    object,\n    uuid(A750108F-492E-4d51-95F7-649B23FF7AD7),\n    pointer_default(unique)\n]\ninterface IBDA_IPSinkInfo : IUnknown\n{\n    HRESULT get_MulticastList([in, out] ULONG *pulcbAddresses,\n                              [out, size_is(*pulcbAddresses)] BYTE **ppbAddressList);\n    HRESULT get_AdapterIPAddress([out] BSTR *pbstrBuffer);\n    HRESULT get_AdapterDescription([out] BSTR *pbstrBuffer);\n}\n\n[\n    object,\n    uuid (afb6c2a2-2c41-11d3-8a60-0000f81e0e4a),\n    pointer_default(unique)\n]\ninterface IEnumPIDMap : IUnknown\n{\n    HRESULT Next([in] ULONG cRequest,\n                 [in, out, size_is (cRequest)] PID_MAP *pPIDMap,\n                 [out] ULONG *pcReceived);\n    HRESULT Skip([in] ULONG cRecords);\n    HRESULT Reset(void);\n    HRESULT Clone([out] IEnumPIDMap **ppIEnumPIDMap);\n}\n\n[\n    object,\n    uuid (afb6c2a1-2c41-11d3-8a60-0000f81e0e4a),\n    pointer_default(unique)\n]\ninterface IMPEG2PIDMap : IUnknown\n{\n    HRESULT MapPID([in] ULONG culPID,\n                   [in] ULONG *pulPID,\n                   [in] MEDIA_SAMPLE_CONTENT MediaSampleContent);\n    HRESULT UnmapPID([in] ULONG culPID, [in] ULONG *pulPID);\n    HRESULT EnumPIDMap([out] IEnumPIDMap **pIEnumPIDMap);\n}\n\n[\n    object,\n    uuid(06FB45C1-693C-4ea7-B79F-7A6A54D8DEF2),\n    helpstring(\"IFrequencyMap Interface\"),\n    pointer_default(unique),\n    hidden, restricted\n]\ninterface IFrequencyMap : IUnknown\n{\n    HRESULT get_FrequencyMapping([out] ULONG *ulCount, [out, size_is(1, *ulCount)] ULONG **ppulList);\n    HRESULT put_FrequencyMapping([in] ULONG ulCount, [in, size_is(ulCount)] ULONG pList[]);\n    HRESULT get_CountryCode([out] ULONG *pulCountryCode);\n    HRESULT put_CountryCode([in] ULONG ulCountryCode);\n    HRESULT get_DefaultFrequencyMapping([in] ULONG ulCountryCode,\n                                        [out] ULONG *pulCount,\n                                        [out, size_is(1, *pulCount)] ULONG **ppulList);\n    HRESULT get_CountryCodeList([out] ULONG* pulCount, [out, size_is(1, *pulCount)] ULONG **ppulList);\n}\n\n[\n    object,\n    uuid(D806973D-3EBE-46de-8FBB-6358FE784208),\n    helpstring(\"IBDA_EasMessage Interface\"),\n    pointer_default(unique),\n    hidden, restricted\n]\ninterface IBDA_EasMessage : IUnknown\n{\n    HRESULT get_EasMessage([in] ULONG ulEventID, [in, out] IUnknown **ppEASObject);\n}\n\n[\n    object,\n    uuid(8E882535-5F86-47AB-86CF-C281A72A0549),\n    helpstring(\"IBDA_TransportStreamInfo Interface\"),\n    pointer_default(unique),\n    hidden, restricted\n]\ninterface IBDA_TransportStreamInfo : IUnknown\n{\n    HRESULT get_PatTableTickCount([out] ULONG *pPatTickCount);\n}\n\n[\n    object,\n    uuid(CD51F1E0-7BE9-4123-8482-A2A796C0A6B0),\n    helpstring(\"IBDA_ConditionalAccess Interface\"),\n    pointer_default(unique)\n]\n\ninterface IBDA_ConditionalAccess : IUnknown\n{\n    HRESULT get_SmartCardStatus([out] SmartCardStatusType *pCardStatus,\n                                [out] SmartCardAssociationType *pCardAssociation,\n                                [out] BSTR *pbstrCardError,\n                                [out] VARIANT_BOOL *pfOOBLocked);\n    HRESULT get_SmartCardInfo([out] BSTR *pbstrCardName,\n                              [out] BSTR *pbstrCardManufacturer,\n                              [out] VARIANT_BOOL *pfDaylightSavings,\n                              [out] BYTE *pbyRatingRegion,\n                              [out] LONG *plTimeZoneOffsetMinutes,\n                              [out] BSTR *pbstrLanguage,\n                              [out] EALocationCodeType  *pEALocationCode);\n    HRESULT get_SmartCardApplications([in, out] ULONG *pulcApplications,\n                                      [in] ULONG ulcApplicationsMax,\n                                      [in, out, size_is(ulcApplicationsMax)] SmartCardApplication rgApplications[]);\n    HRESULT get_Entitlement([in] USHORT usVirtualChannel, [out] EntitlementType *pEntitlement);\n    HRESULT TuneByChannel([in] USHORT usVirtualChannel);\n    HRESULT SetProgram([in] USHORT usProgramNumber);\n    HRESULT AddProgram([in] USHORT usProgramNumber);\n    HRESULT RemoveProgram([in] USHORT usProgramNumber);\n    HRESULT GetModuleUI([in] BYTE byDialogNumber, [out] BSTR *pbstrURL);\n    HRESULT InformUIClosed([in] BYTE byDialogNumber, [in] UICloseReasonType CloseReason);\n}\n\n[\n    object,\n    uuid(20e80cb5-c543-4c1b-8eb3-49e719eee7d4),\n    helpstring(\"IBDA_DiagnosticProperties Interface\"),\n    pointer_default(unique),\n]\ninterface IBDA_DiagnosticProperties : IPropertyBag\n{\n}\n\n[\n    object,\n    uuid(F98D88B0-1992-4cd6-A6D9-B9AFAB99330D),\n    helpstring(\"IBDA_DRM Interface\"),\n    pointer_default(unique),\n]\ninterface IBDA_DRM : IUnknown\n{\n    HRESULT GetDRMPairingStatus([out] DWORD *pdwStatus, [out] HRESULT *phError);\n    HRESULT PerformDRMPairing(BOOL fSync);\n}\n\n[\n    object,\n    uuid(7F0B3150-7B81-4ad4-98E3-7E9097094301),\n    helpstring(\"IBDA_NameValueService Interface\"),\n    pointer_default(unique)\n]\ninterface IBDA_NameValueService : IUnknown\n{\n    HRESULT GetValueNameByIndex([in] ULONG ulIndex, [out] BSTR *pbstrName);\n    HRESULT GetValue([in]  BSTR bstrName, [in]  BSTR bstrLanguage, [out] BSTR *pbstrValue);\n    HRESULT SetValue([in] ULONG ulDialogRequest, [in] BSTR bstrLanguage,\n                     [in] BSTR bstrName, [in] BSTR bstrValue, [in] ULONG ulReserved);\n}\n\n[\n    object,\n    uuid(497C3418-23CB-44ba-BB62-769F506FCEA7),\n    helpstring(\"IBDA_ConditionalAccessEx Interface\"),\n    pointer_default(unique)\n]\ninterface IBDA_ConditionalAccessEx : IUnknown\n{\n    HRESULT CheckEntitlementToken([in] ULONG ulDialogRequest, [in] BSTR bstrLanguage,\n                                  [in] BDA_CONDITIONALACCESS_REQUESTTYPE RequestType,\n                                  [in] ULONG ulcbEntitlementTokenLen,\n                                  [in, size_is(ulcbEntitlementTokenLen)] BYTE *pbEntitlementToken,\n                                  [out] ULONG *pulDescrambleStatus);\n    HRESULT SetCaptureToken([in] ULONG ulcbCaptureTokenLen,\n                            [in, size_is(ulcbCaptureTokenLen)] BYTE *pbCaptureToken);\n    HRESULT OpenBroadcastMmi([in] ULONG ulDialogRequest, [in] BSTR bstrLanguage, [in] ULONG EventId);\n    HRESULT CloseMmiDialog([in] ULONG ulDialogRequest, [in] BSTR bstrLanguage,\n                           [in] ULONG ulDialogNumber, [in] BDA_CONDITIONALACCESS_MMICLOSEREASON ReasonCode,\n                           [out] ULONG *pulSessionResult);\n    HRESULT CreateDialogRequestNumber([out] ULONG *pulDialogRequestNumber);\n}\n\n[\n    object,\n    uuid(5E68C627-16C2-4e6c-B1E2-D00170CDAA0F),\n    helpstring(\"IBDA_ISDBConditionalAccess Interface\"),\n    pointer_default(unique)\n]\ninterface IBDA_ISDBConditionalAccess : IUnknown\n{\n    HRESULT SetIsdbCasRequest([in] ULONG ulRequestId, [in] ULONG ulcbRequestBufferLen,\n                              [in, size_is(ulcbRequestBufferLen)] BYTE *pbRequestBuffer);\n}\n\n[\n    object,\n    uuid(207C413F-00DC-4c61-BAD6-6FEE1FF07064),\n    helpstring(\"IBDA_EventingService Interface\"),\n    pointer_default(unique)\n]\ninterface IBDA_EventingService : IUnknown\n{\n    HRESULT CompleteEvent([in] ULONG ulEventID, [in] ULONG ulEventResult);\n}\n\n[\n    object,\n    uuid(7DEf4C09-6E66-4567-A819-F0E17F4A81AB),\n    helpstring(\"IBDA_AUX Interface\"),\n    pointer_default(unique)\n]\ninterface IBDA_AUX : IUnknown\n{\n    HRESULT QueryCapabilities([out] DWORD *pdwNumAuxInputsBSTR);\n    HRESULT EnumCapability([in] DWORD dwIndex, [out] DWORD *dwInputID, [out] GUID *pConnectorType,\n                           [out] DWORD *ConnTypeNum, [out] DWORD *NumVideoStds,\n                           [out] ULONGLONG *AnalogStds);\n}\n\n[\n    object,\n    uuid(3a8bad59-59fe-4559-a0ba-396cfaa98ae3),\n    helpstring(\"IBDA_ Encoder Interface\"),\n    pointer_default(unique)\n]\ninterface IBDA_Encoder : IUnknown\n{\n    HRESULT QueryCapabilities([out] DWORD *NumAudioFmts, [out] DWORD *NumVideoFmts);\n    HRESULT EnumAudioCapability([in] DWORD FmtIndex, [out] DWORD *MethodID,\n                                [out] DWORD *AlgorithmType, [out] DWORD *SamplingRate,\n                                [out] DWORD *BitDepth, [out] DWORD *NumChannels);\n    HRESULT EnumVideoCapability([in] DWORD FmtIndex, [out] DWORD *MethodID,\n                                [out] DWORD *AlgorithmType, [out] DWORD *VerticalSize,\n                                [out] DWORD *HorizontalSize, [out] DWORD *AspectRatio,\n                                [out] DWORD *FrameRateCode, [out] DWORD *ProgressiveSequence);\n    HRESULT SetParameters([in] DWORD AudioBitrateMode, [in] DWORD AudioBitrate,\n                          [in] DWORD AudioMethodID, [in] DWORD AudioProgram,\n                          [in] DWORD VideoBitrateMode, [in] DWORD VideoBitrate,\n                          [in] DWORD VideoMethodID);\n    HRESULT GetState([out] DWORD *AudioBitrateMax, [out] DWORD *AudioBitrateMin,\n                     [out] DWORD *AudioBitrateMode, [out] DWORD *AudioBitrateStepping,\n                     [out] DWORD *AudioBitrate, [out] DWORD *AudioMethodID,\n                     [out] DWORD *AvailableAudioPrograms, [out] DWORD *AudioProgram,\n                     [out] DWORD *VideoBitrateMax, [out] DWORD *VideoBitrateMin,\n                     [out] DWORD *VideoBitrateMode, [out] DWORD *VideoBitrate,\n                     [out] DWORD *VideoBitrateStepping, [out] DWORD *VideoMethodID,\n                     [out] DWORD *SignalSourceID, [out] ULONGLONG *SignalFormat,\n                     [out] BOOL *SignalLock, [out] LONG *SignalLevel,\n                     [out] DWORD *SignalToNoiseRatio);\n}\n\n[\n    object,\n    uuid(138adc7e-58ae-437f-b0b4-c9fe19d5b4ac),\n    helpstring(\"IBDA_ FDC Interface\"),\n    pointer_default(unique)\n]\ninterface IBDA_FDC : IUnknown\n{\n    HRESULT GetStatus([out] DWORD *CurrentBitrate, [out] BOOL *CarrierLock,\n                      [out] DWORD *CurrentFrequency, [out] BOOL *CurrentSpectrumInversion,\n                      [out] BSTR *CurrentPIDList, [out] BSTR *CurrentTIDList, [out] BOOL *Overflow);\n    HRESULT RequestTables([in] BSTR TableIDs);\n    HRESULT AddPid([in] BSTR PidsToAdd, [out] DWORD *RemainingFilterEntries);\n    HRESULT RemovePid([in] BSTR PidsToRemove);\n    HRESULT AddTid([in] BSTR TidsToAdd, [out] BSTR *CurrentTidList);\n    HRESULT RemoveTid([in] BSTR TidsToRemove);\n    HRESULT GetTableSection([out] DWORD *Pid, [in] DWORD MaxBufferSize,\n                            [out] DWORD *ActualSize, [out] BYTE *SecBuffer);\n}\n\n[\n    object,\n    uuid(C0AFCB73-23E7-4bc6-BAFA-FDC167B4719F),\n    helpstring(\"IBDA_ GuideDataDeliveryService Interface\"),\n    pointer_default(unique)\n]\ninterface IBDA_GuideDataDeliveryService: IUnknown\n{\n    HRESULT GetGuideDataType([out] GUID *pguidDataType);\n    HRESULT GetGuideData([in, out]  ULONG *pulcbBufferLen, [out] BYTE *pbBuffer,\n                         [out] ULONG *pulGuideDataPercentageProgress);\n    HRESULT RequestGuideDataUpdate(void);\n    HRESULT GetTuneXmlFromServiceIdx([in]  ULONG64 ul64ServiceIdx, [out] BSTR *pbstrTuneXml);\n    HRESULT GetServices([in, out]  ULONG *pulcbBufferLen, [out] BYTE *pbBuffer);\n    HRESULT GetServiceInfoFromTuneXml([in]  BSTR bstrTuneXml, [out] BSTR *pbstrServiceDescription);\n}\n\n[\n    object,\n    uuid(BFF6B5BB-B0AE-484c-9DCA-73528FB0B46E),\n    helpstring(\"IBDA_DRMService Interface\"),\n    pointer_default(unique)\n]\ninterface IBDA_DRMService: IUnknown\n{\n    HRESULT SetDRM([in] GUID *puuidNewDrm);\n    HRESULT GetDRMStatus([out] BSTR *pbstrDrmUuidList, [out] GUID *DrmUuid);\n}\n\n[\n    object,\n    uuid(4BE6FA3D-07CD-4139-8B80-8C18BA3AEC88),\n    helpstring(\"IBDA_WMDRMSession Interface\"),\n    pointer_default(unique)\n]\ninterface IBDA_WMDRMSession: IUnknown\n{\n    HRESULT GetStatus([out] ULONG *MaxCaptureToken, [out] ULONG *MaxStreamingPid,\n                      [out] ULONG *MaxLicense, [out] ULONG *MinSecurityLevel,\n                      [out] ULONG *RevInfoSequenceNumber, [out] ULONGLONG *RevInfoIssuedTime,\n                      [out] ULONG *RevInfoTTL, [out] ULONG *RevListVersion, [out] ULONG *ulState);\n    HRESULT SetRevInfo([in] ULONG ulRevInfoLen, [in, size_is(ulRevInfoLen)] BYTE* pbRevInfo);\n    HRESULT SetCrl([in] ULONG ulCrlLen, [in, size_is(ulCrlLen)] BYTE *pbCrlLen);\n    HRESULT TransactMessage([in] ULONG ulcbRequest, [in, size_is(ulcbRequest)] BYTE *pbRequest,\n                            [in, out] ULONG *pulcbResponse, [in, out] BYTE *pbResponse);\n    HRESULT GetLicense([in] GUID *uuidKey, [in, out] ULONG *pulPackageLen, [in, out] BYTE *pbPackage);\n    HRESULT ReissueLicense([in] GUID *uuidKey);\n    HRESULT RenewLicense([in] ULONG ulInXmrLicenseLen,\n                         [in, size_is(ulInXmrLicenseLen)] BYTE *pbInXmrLicense,\n                         [in] ULONG ulEntitlementTokenLen,\n                         [in, size_is(ulEntitlementTokenLen)] BYTE *pbEntitlementToken,\n                         [out] ULONG *pulDescrambleStatus, [in, out] ULONG *pulOutXmrLicenseLen,\n                         [in, out] BYTE *pbOutXmrLicense);\n    HRESULT GetKeyInfo([in, out] ULONG *pulKeyInfoLen, [in, out] BYTE *pbKeyInfo);\n}\n\n[\n    object,\n    uuid(86D979CF-A8A7-4f94-B5FB-14C0ACA68FE6),\n    helpstring(\"IBDA_WMDRMTuner Interface\"),\n    pointer_default(unique)\n]\ninterface IBDA_WMDRMTuner: IUnknown\n{\n    HRESULT PurchaseEntitlement([in] ULONG ulDialogRequest, [in] BSTR bstrLanguage,\n                                [in] ULONG ulPurchaseTokenLen,\n                                [in, size_is(ulPurchaseTokenLen)] BYTE *pbPurchaseToken,\n                                [out] ULONG *pulDescrambleStatus,\n                                [in, out] ULONG *pulCaptureTokenLen,\n                                [in, out] BYTE *pbCaptureToken);\n    HRESULT CancelCaptureToken([in] ULONG ulCaptureTokenLen,\n                               [in, size_is(ulCaptureTokenLen)] BYTE *pbCaptureToken);\n    HRESULT SetPidProtection([in] ULONG ulPid, [in] GUID *uuidKey);\n    HRESULT GetPidProtection([in] ULONG pulPid, [out] GUID *uuidKey);\n    HRESULT SetSyncValue([in] ULONG ulSyncValue);\n    HRESULT GetStartCodeProfile([in, out] ULONG *pulStartCodeProfileLen,\n                                [in, out] BYTE *pbStartCodeProfile);\n}\n\n[\n    object,\n    uuid(1F9BC2A5-44A3-4c52-AAB1-0BBCE5A1381D),\n    helpstring(\"IBDA_DRIDRMService Interface\"),\n    pointer_default(unique)\n]\ninterface IBDA_DRIDRMService: IUnknown\n{\n    HRESULT SetDRM([in] BSTR bstrNewDrm);\n    HRESULT GetDRMStatus([out] BSTR *pbstrDrmUuidList, [out] GUID *DrmUuid);\n    HRESULT GetPairingStatus([in, out] BDA_DrmPairingError *penumPairingStatus);\n}\n\n[\n    object,\n    uuid(05C690F8-56DB-4bb2-B053-79C12098BB26),\n    helpstring(\"IBDA_DRIWMDRMSession Interface\"),\n    pointer_default(unique)\n]\ninterface IBDA_DRIWMDRMSession: IUnknown\n{\n    HRESULT AcknowledgeLicense([in] HRESULT hrLicenseAck);\n    HRESULT ProcessLicenseChallenge([in] DWORD dwcbLicenseMessage,\n                                    [in, size_is(dwcbLicenseMessage)] BYTE *pbLicenseMessage,\n                                    [in, out] DWORD *pdwcbLicenseResponse,\n                                    [in, out, size_is(* pdwcbLicenseResponse)] BYTE **ppbLicenseResponse);\n    HRESULT ProcessRegistrationChallenge([in] DWORD dwcbRegistrationMessage,\n                                         [in, size_is(dwcbRegistrationMessage)] BYTE *pbRegistrationMessage,\n                                         [in, out] DWORD *pdwcbRegistrationResponse,\n                                         [in, out] BYTE **ppbRegistrationResponse);\n    HRESULT SetRevInfo([in] DWORD dwRevInfoLen, [in, size_is(dwRevInfoLen)] BYTE *pbRevInfo,\n                       [in, out] DWORD *pdwResponse);\n    HRESULT SetCrl([in] DWORD dwCrlLen, [in, size_is(dwCrlLen)] BYTE *pbCrlLen,\n                   [in, out] DWORD *pdwResponse);\n    HRESULT GetHMSAssociationData(void);\n    HRESULT GetLastCardeaError([in, out] DWORD *pdwError);\n}\n\n[\n    object,\n    uuid(942AAFEC-4C05-4c74-B8EB-8706C2A4943F),\n    helpstring(\"IBDA_MUX Interface\"),\n    pointer_default(unique)\n]\ninterface IBDA_MUX: IUnknown\n{\n    HRESULT SetPidList([in] ULONG ulPidListCount,\n                       [in, size_is(ulPidListCount)] BDA_MUX_PIDLISTITEM *pbPidListBuffer);\n    HRESULT GetPidList([in, out] ULONG *pulPidListCount,\n                       [in, out] BDA_MUX_PIDLISTITEM *pbPidListBuffer);\n}\n\n[\n    object,\n    uuid(1DCFAFE9-B45E-41b3-BB2A-561EB129AE98),\n    helpstring(\"IBDA_TransportStreamSelector Interface\"),\n    pointer_default(unique)\n]\ninterface IBDA_TransportStreamSelector : IUnknown\n{\n    HRESULT SetTSID([in] USHORT usTSID);\n    HRESULT GetTSInformation([in, out] ULONG *pulTSInformationBufferLen,\n                             [out, size_is(*pulTSInformationBufferLen)] BYTE *pbTSInformationBuffer);\n}\n\n[\n    object,\n    uuid(53B14189-E478-4b7a-A1FF-506DB4B99DFE),\n    helpstring(\"IBDA_UserActivityService Interface\"),\n    pointer_default(unique)\n]\ninterface IBDA_UserActivityService: IUnknown\n{\n    HRESULT SetCurrentTunerUseReason([in] DWORD dwUseReason);\n    HRESULT GetUserActivityInterval([out] DWORD *pdwActivityInterval);\n    HRESULT UserActivityDetected(void);\n}\n"
  },
  {
    "path": "wine/windows/bdaiface_enums.h",
    "content": "/*\n * Copyright 2013 André Hentschel\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef BDAIFACE_ENUMS_H\n#define BDAIFACE_ENUMS_H\n\ntypedef enum EntitlementType\n{\n    Entitled,\n    NotEntitled,\n    TechnicalFailure\n} EntitlementType;\n\ntypedef enum BDA_DrmPairingError\n{\n    BDA_DrmPairing_Succeeded,\n    BDA_DrmPairing_HardwareFailure,\n    BDA_DrmPairing_NeedRevocationData,\n    BDA_DrmPairing_NeedIndiv,\n    BDA_DrmPairing_Other,\n    BDA_DrmPairing_DrmInitFailed,\n    BDA_DrmPairing_DrmNotPaired,\n    BDA_DrmPairing_DrmRePairSoon,\n    BDA_DrmPairing_Aborted,\n    BDA_DrmPairing_NeedSDKUpdate\n} BDA_DrmPairingError;\n\ntypedef enum UICloseReasonType\n{\n    NotReady,\n    UserClosed,\n    SystemClosed,\n    DeviceClosed,\n    ErrorClosed\n} UICloseReasonType;\n\ntypedef enum LocationCodeSchemeType\n{\n    SCTE_18\n} LocationCodeSchemeType;\n\ntypedef struct SmartCardApplication\n{\n    ApplicationTypeType ApplicationType;\n    USHORT ApplicationVersion;\n    BSTR pbstrApplicationName;\n    BSTR pbstrApplicationURL;\n} SmartCardApplication;\n\ntypedef struct EALocationCodeType\n{\n    LocationCodeSchemeType LocationCodeScheme;\n    BYTE state_code;\n    BYTE county_subdivision;\n    WORD county_code;\n} EALocationCodeType;\n\ntypedef enum SmartCardStatusType\n{\n    CardInserted,\n    CardRemoved,\n    CardError,\n    CardDataChanged,\n    CardFirmwareUpgrade\n} SmartCardStatusType;\n\ntypedef enum SmartCardAssociationType\n{\n    NotAssociated,\n    Associated,\n    AssociationUnknown\n} SmartCardAssociationType;\n\n#endif /* BDAIFACE_ENUMS_H */\n"
  },
  {
    "path": "wine/windows/bdatypes.h",
    "content": "/*\n * Copyright 2013 André Hentschel\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _BDATYPES_\n#define _BDATYPES_\n\ntypedef struct _BDANODE_DESCRIPTOR\n{\n    ULONG ulBdaNodeType;\n    GUID guidFunction;\n    GUID guidName;\n} BDANODE_DESCRIPTOR, *PBDANODE_DESCRIPTOR;\n\ntypedef struct _BDA_SIGNAL_TIMEOUTS\n{\n    ULONG      ulCarrierTimeoutMs;\n    ULONG      ulScanningTimeoutMs;\n    ULONG      ulTuningTimeoutMs;\n} BDA_SIGNAL_TIMEOUTS, *PBDA_SIGNAL_TIMEOUTS;\n\ntypedef struct _BDA_TEMPLATE_CONNECTION\n{\n    ULONG FromNodeType;\n    ULONG FromNodePinType;\n    ULONG ToNodeType;\n    ULONG ToNodePinType;\n} BDA_TEMPLATE_CONNECTION, *PBDA_TEMPLATE_CONNECTION;\n\ntypedef enum MEDIA_SAMPLE_CONTENT\n{\n    MEDIA_TRANSPORT_PACKET,\n    MEDIA_ELEMENTARY_STREAM,\n    MEDIA_MPEG2_PSI,\n    MEDIA_TRANSPORT_PAYLOAD\n} MEDIA_SAMPLE_CONTENT;\n\ntypedef struct\n{\n    ULONG ulPID;\n    MEDIA_SAMPLE_CONTENT MediaSampleContent;\n} PID_MAP;\n\ntypedef enum MUX_PID_TYPE\n{\n    PID_OTHER = -1,\n    PID_ELEMENTARY_STREAM,\n    PID_MPEG2_SECTION_PSI_SI,\n} MUX_PID_TYPE;\n\n#include <pshpack2.h>\ntypedef struct _BDA_MUX_PIDLISTITEM\n{\n    USHORT usPIDNumber;\n    USHORT usProgramNumber;\n    MUX_PID_TYPE ePIDType;\n} BDA_MUX_PIDLISTITEM, *PBDA_MUX_PIDLISTITEM;\n#include <poppack.h>\n\ntypedef enum BDA_CONDITIONALACCESS_REQUESTTYPE\n{\n    CONDITIONALACCESS_ACCESS_UNSPECIFIED,\n    CONDITIONALACCESS_ACCESS_NOT_POSSIBLE,\n    CONDITIONALACCESS_ACCESS_POSSIBLE,\n    CONDITIONALACCESS_ACCESS_POSSIBLE_NO_STREAMING_DISRUPTION\n} BDA_CONDITIONALACCESS_REQUESTTYPE;\n\ntypedef enum BDA_CONDITIONALACCESS_MMICLOSEREASON\n{\n    CONDITIONALACCESS_UNSPECIFIED,\n    CONDITIONALACCESS_CLOSED_ITSELF,\n    CONDITIONALACCESS_TUNER_REQUESTED_CLOSE,\n    CONDITIONALACCESS_DIALOG_TIMEOUT,\n    CONDITIONALACCESS_DIALOG_FOCUS_CHANGE,\n    CONDITIONALACCESS_DIALOG_USER_DISMISSED,\n    CONDITIONALACCESS_DIALOG_USER_NOT_AVAILABLE\n} BDA_CONDITIONALACCESS_MMICLOSEREASON;\n\ntypedef enum BDA_CONDITIONALACCESS_SESSION_RESULT\n{\n    CONDITIONALACCESS_SUCCESSFULL,\n    CONDITIONALACCESS_ENDED_NOCHANGE,\n    CONDITIONALACCESS_ABORTED\n} BDA_CONDITIONALACCESS_SESSION_RESULT;\n\ntypedef enum BDA_DISCOVERY_STATE\n{\n    BDA_DISCOVERY_UNSPECIFIED,\n    BDA_DISCOVERY_REQUIRED,\n    BDA_DISCOVERY_COMPLETE\n} BDA_DISCOVERY_STATE;\n\ntypedef enum ApplicationTypeType\n{\n    SCTE28_ConditionalAccess,\n    SCTE28_POD_Host_Binding_Information,\n    SCTE28_IPService,\n    SCTE28_NetworkInterface_SCTE55_2,\n    SCTE28_NetworkInterface_SCTE55_1,\n    SCTE28_CopyProtection,\n    SCTE28_Diagnostic,\n    SCTE28_Undesignated,\n    SCTE28_Reserved,\n} ApplicationTypeType;\n\ntypedef enum GuardInterval\n{\n    BDA_GUARD_NOT_SET = -1,\n    BDA_GUARD_NOT_DEFINED,\n    BDA_GUARD_1_32,\n    BDA_GUARD_1_16,\n    BDA_GUARD_1_8,\n    BDA_GUARD_1_4,\n    BDA_GUARD_1_128,\n    BDA_GUARD_19_128,\n    BDA_GUARD_19_256,\n    BDA_GUARD_MAX,\n} GuardInterval;\n\ntypedef enum TransmissionMode\n{\n    BDA_XMIT_MODE_NOT_SET = -1,\n    BDA_XMIT_MODE_NOT_DEFINED,\n    BDA_XMIT_MODE_2K,\n    BDA_XMIT_MODE_8K,\n    BDA_XMIT_MODE_4K,\n    BDA_XMIT_MODE_2K_INTERLEAVED,\n    BDA_XMIT_MODE_4K_INTERLEAVED,\n    BDA_XMIT_MODE_1K,\n    BDA_XMIT_MODE_16K,\n    BDA_XMIT_MODE_32K,\n    BDA_XMIT_MODE_MAX,\n} TransmissionMode;\n\ntypedef enum SpectralInversion\n{\n    BDA_SPECTRAL_INVERSION_NOT_SET = -1,\n    BDA_SPECTRAL_INVERSION_NOT_DEFINED,\n    BDA_SPECTRAL_INVERSION_AUTOMATIC,\n    BDA_SPECTRAL_INVERSION_NORMAL,\n    BDA_SPECTRAL_INVERSION_INVERTED,\n    BDA_SPECTRAL_INVERSION_MAX\n} SpectralInversion;\n\ntypedef enum BinaryConvolutionCodeRate\n{\n    BDA_BCC_RATE_NOT_SET = -1,\n    BDA_BCC_RATE_NOT_DEFINED,\n    BDA_BCC_RATE_1_2,\n    BDA_BCC_RATE_2_3,\n    BDA_BCC_RATE_3_4,\n    BDA_BCC_RATE_3_5,\n    BDA_BCC_RATE_4_5,\n    BDA_BCC_RATE_5_6,\n    BDA_BCC_RATE_5_11,\n    BDA_BCC_RATE_7_8,\n    BDA_BCC_RATE_1_4,\n    BDA_BCC_RATE_1_3,\n    BDA_BCC_RATE_2_5,\n    BDA_BCC_RATE_6_7,\n    BDA_BCC_RATE_8_9,\n    BDA_BCC_RATE_9_10,\n    BDA_BCC_RATE_MAX,\n} BinaryConvolutionCodeRate;\n\ntypedef enum Polarisation\n{\n    BDA_POLARISATION_NOT_SET = -1,\n    BDA_POLARISATION_NOT_DEFINED,\n    BDA_POLARISATION_LINEAR_H,\n    BDA_POLARISATION_LINEAR_V,\n    BDA_POLARISATION_CIRCULAR_L,\n    BDA_POLARISATION_CIRCULAR_R,\n    BDA_POLARISATION_MAX,\n} Polarisation;\n\ntypedef enum FECMethod\n{\n    BDA_FEC_METHOD_NOT_SET = -1,\n    BDA_FEC_METHOD_NOT_DEFINED,\n    BDA_FEC_VITERBI,\n    BDA_FEC_RS_204_188,\n    BDA_FEC_LDPC,\n    BDA_FEC_BCH,\n    BDA_FEC_RS_147_130,\n    BDA_FEC_MAX,\n} FECMethod;\n\ntypedef enum ModulationType\n{\n    BDA_MOD_NOT_SET = -1,\n    BDA_MOD_NOT_DEFINED,\n    BDA_MOD_16QAM,\n    BDA_MOD_32QAM,\n    BDA_MOD_64QAM,\n    BDA_MOD_80QAM,\n    BDA_MOD_96QAM,\n    BDA_MOD_112QAM,\n    BDA_MOD_128QAM,\n    BDA_MOD_160QAM,\n    BDA_MOD_192QAM,\n    BDA_MOD_224QAM,\n    BDA_MOD_256QAM,\n    BDA_MOD_320QAM,\n    BDA_MOD_384QAM,\n    BDA_MOD_448QAM,\n    BDA_MOD_512QAM,\n    BDA_MOD_640QAM,\n    BDA_MOD_768QAM,\n    BDA_MOD_896QAM,\n    BDA_MOD_1024QAM,\n    BDA_MOD_QPSK,\n    BDA_MOD_BPSK,\n    BDA_MOD_OQPSK,\n    BDA_MOD_8VSB,\n    BDA_MOD_16VSB,\n    BDA_MOD_ANALOG_AMPLITUDE,\n    BDA_MOD_ANALOG_FREQUENCY,\n    BDA_MOD_8PSK,\n    BDA_MOD_RF,\n    BDA_MOD_16APSK,\n    BDA_MOD_32APSK,\n    BDA_MOD_NBC_QPSK,\n    BDA_MOD_NBC_8PSK,\n    BDA_MOD_DIRECTV,\n    BDA_MOD_ISDB_T_TMCC,\n    BDA_MOD_ISDB_S_TMCC,\n    BDA_MOD_MAX,\n} ModulationType;\n\ntypedef enum RollOff\n{\n    BDA_ROLL_OFF_NOT_SET = -1,\n    BDA_ROLL_OFF_NOT_DEFINED,\n    BDA_ROLL_OFF_20,\n    BDA_ROLL_OFF_25,\n    BDA_ROLL_OFF_35,\n    BDA_ROLL_OFF_MAX,\n} RollOff;\n\ntypedef enum Pilot\n{\n    BDA_PILOT_NOT_SET = -1,\n    BDA_PILOT_NOT_DEFINED,\n    BDA_PILOT_OFF,\n    BDA_PILOT_ON,\n    BDA_PILOT_MAX,\n} Pilot;\n\n#endif /* _BDATYPES_ */\n"
  },
  {
    "path": "wine/windows/binres.idl",
    "content": "/*\n * Copyright (C) 2009 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    object,\n    uuid(0c733ab1-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface IBindResource : IUnknown\n{\n    [local]\n    HRESULT Bind([in] IUnknown *pUnkOuter,\n                 [in] LPCOLESTR pwszURL,\n                 [in] DBBINDURLFLAG dwBindURLFlags,\n                 [in] REFGUID rguid,\n                 [in] REFIID riid,\n                 [in] IAuthenticate *pAuthenticate,\n                 [in, out, unique] DBIMPLICITSESSION *pImplSession,\n                 [in, out, unique] DBBINDURLSTATUS *pdwBindStatus,\n                 [out, iid_is(riid)] IUnknown **ppUnk);\n\n    [call_as(Bind)]\n    HRESULT RemoteBind([in] IUnknown *pUnkOuter,\n                       [in] LPCOLESTR pwszURL,\n                       [in] DBBINDURLFLAG dwBindURLFlags,\n                       [in] REFGUID rguid,\n                       [in] REFIID riid,\n                       [in] IAuthenticate *pAuthenticate,\n                       [in] IUnknown *pSessionUnkOuter,\n                       [in, unique] IID *piid,\n                       [in, out, unique, iid_is(piid)] IUnknown **ppSession,\n                       [in, out, unique] DBBINDURLSTATUS *pdwBindStatus,\n                       [out, iid_is(riid)] IUnknown **ppUnk);\n}\n"
  },
  {
    "path": "wine/windows/bits.idl",
    "content": "/*\n * Background Intelligent Transfer Service (BITS) interface\n *\n * Copyright 2007 Google (Roy Shea)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"unknwn.idl\";\n#endif\n\ncpp_quote(\"#include \\\"bitsmsg.h\\\"\")\ncpp_quote(\"#define BG_SIZE_UNKNOWN (UINT64)(-1)\")\ncpp_quote(\"#define BG_NOTIFY_JOB_TRANSFERRED 0x0001\")\ncpp_quote(\"#define BG_NOTIFY_JOB_ERROR 0x0002\")\ncpp_quote(\"#define BG_NOTIFY_DISABLE 0x0004\")\ncpp_quote(\"#define BG_NOTIFY_JOB_MODIFICATION 0x0008\")\ncpp_quote(\"#define BG_NOTIFY_FILE_TRANSFERRED 0x0010\")\n\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef EnumJobs\")\ncpp_quote(\"#undef GetJob\")\ncpp_quote(\"#endif\")\n\n#define BG_ENUM_SIZEIS(maxcount) maxcount\n#define BG_ENUM_LENGTHIS(maxcount,lengthptr) lengthptr ? *lengthptr : maxcount\n\n[\n    uuid(01b7bd23-fb88-4a77-8490-5891d3e4653a),\n    odl\n]\ninterface IBackgroundCopyFile : IUnknown\n{\n    typedef struct _BG_FILE_PROGRESS {\n        UINT64 BytesTotal;\n        UINT64 BytesTransferred;\n        BOOL Completed;\n    } BG_FILE_PROGRESS;\n\n    HRESULT GetRemoteName(\n            [out] LPWSTR *pVal\n    );\n\n    HRESULT GetLocalName(\n            [out] LPWSTR *pVal\n    );\n\n    HRESULT GetProgress(\n            [out] BG_FILE_PROGRESS *pVal\n    );\n}\n\n\n[\n    uuid(ca51e165-c365-424c-8d41-24aaa4ff3c40),\n    odl\n]\ninterface IEnumBackgroundCopyFiles: IUnknown\n{\n    HRESULT Next(\n            [in] ULONG celt,\n            [out,size_is(BG_ENUM_SIZEIS(celt)),length_is(BG_ENUM_LENGTHIS(celt,pceltFetched))] IBackgroundCopyFile **rgelt,\n            [in,out,unique] ULONG *pceltFetched\n    );\n\n    HRESULT Skip(\n            [in] ULONG celt\n    );\n\n    HRESULT Reset();\n\n    HRESULT Clone(\n            [out] IEnumBackgroundCopyFiles **ppenum\n    );\n\n    HRESULT GetCount(\n            [out] ULONG *puCount\n    );\n}\n\n\n[\n    uuid(19c613a0-fcb8-4f28-81ae-897c3d078f81),\n    odl\n]\ninterface IBackgroundCopyError : IUnknown\n{\n    typedef enum {\n        BG_ERROR_CONTEXT_NONE = 0,\n        BG_ERROR_CONTEXT_UNKNOWN = 1,\n        BG_ERROR_CONTEXT_GENERAL_QUEUE_MANAGER = 2,\n        BG_ERROR_CONTEXT_QUEUE_MANAGER_NOTIFICATION =3,\n        BG_ERROR_CONTEXT_LOCAL_FILE = 4,\n        BG_ERROR_CONTEXT_REMOTE_FILE = 5,\n        BG_ERROR_CONTEXT_GENERAL_TRANSPORT = 6,\n        BG_ERROR_CONTEXT_REMOTE_APPLICATION =7,\n    } BG_ERROR_CONTEXT;\n\n    HRESULT GetError(\n            [out,ref] BG_ERROR_CONTEXT *pContext,\n            [out,ref] HRESULT *pCode\n    );\n\n    HRESULT GetFile(\n            [out] IBackgroundCopyFile **pVal\n    );\n\n    HRESULT GetErrorDescription(\n            [in] DWORD LanguageId,\n            [out,ref] LPWSTR *pErrorDescription\n    );\n\n    HRESULT GetErrorContextDescription(\n            [in] DWORD LanguageId,\n            [out,ref] LPWSTR *pContextDescription\n    );\n\n    HRESULT GetProtocol(\n            [out,ref] LPWSTR *pProtocol\n    );\n}\n\n\n\n[\n    uuid(37668d37-507e-4160-9316-26306d150b12),\n    odl\n]\ninterface IBackgroundCopyJob : IUnknown\n{\n    typedef struct _BG_FILE_INFO {\n        LPWSTR RemoteName;\n        LPWSTR LocalName;\n    } BG_FILE_INFO;\n\n    typedef struct _BG_JOB_PROGRESS {\n        UINT64 BytesTotal;\n        UINT64 BytesTransferred;\n        ULONG FilesTotal;\n        ULONG FilesTransferred;\n    } BG_JOB_PROGRESS;\n\n    typedef struct _BG_JOB_TIMES {\n        FILETIME CreationTime;\n        FILETIME ModificationTime;\n        FILETIME TransferCompletionTime;\n    } BG_JOB_TIMES;\n\n    typedef enum {\n        BG_JOB_PRIORITY_FOREGROUND = 0,\n        BG_JOB_PRIORITY_HIGH = 1,\n        BG_JOB_PRIORITY_NORMAL = 2,\n        BG_JOB_PRIORITY_LOW = 3\n    } BG_JOB_PRIORITY;\n\n    typedef enum {\n        BG_JOB_STATE_QUEUED = 0,\n        BG_JOB_STATE_CONNECTING = 1,\n        BG_JOB_STATE_TRANSFERRING = 2,\n        BG_JOB_STATE_SUSPENDED = 3,\n        BG_JOB_STATE_ERROR = 4,\n        BG_JOB_STATE_TRANSIENT_ERROR = 5,\n        BG_JOB_STATE_TRANSFERRED = 6,\n        BG_JOB_STATE_ACKNOWLEDGED = 7,\n        BG_JOB_STATE_CANCELLED = 8\n    } BG_JOB_STATE;\n\n    typedef enum {\n       BG_JOB_TYPE_DOWNLOAD = 0,\n       BG_JOB_TYPE_UPLOAD = 1,\n       BG_JOB_TYPE_UPLOAD_REPLY = 2\n    } BG_JOB_TYPE;\n\n    typedef enum {\n        BG_JOB_PROXY_USAGE_PRECONFIG,\n        BG_JOB_PROXY_USAGE_NO_PROXY,\n        BG_JOB_PROXY_USAGE_OVERRIDE,\n        BG_JOB_PROXY_USAGE_AUTODETECT\n    } BG_JOB_PROXY_USAGE;\n\n\n    HRESULT AddFileSet(\n            [in] ULONG cFileCount,\n            [in,size_is(cFileCount)] BG_FILE_INFO *pFileSet\n    );\n\n    HRESULT AddFile(\n            [in] LPCWSTR RemoteUrl,\n            [in] LPCWSTR LocalName\n    );\n\n    HRESULT EnumFiles(\n            [out] IEnumBackgroundCopyFiles **pEnum\n    );\n\n    HRESULT Suspend();\n\n    HRESULT Resume();\n\n    HRESULT Cancel();\n\n    HRESULT Complete();\n\n    HRESULT GetId(\n            [out] GUID *pVal\n    );\n\n    HRESULT GetType(\n            [out] BG_JOB_TYPE *pVal\n    );\n\n    HRESULT GetProgress(\n            [out] BG_JOB_PROGRESS *pVal\n    );\n\n    HRESULT GetTimes(\n            [out] BG_JOB_TIMES *pVal\n    );\n\n    HRESULT GetState(\n            [out] BG_JOB_STATE *pVal\n    );\n\n    HRESULT GetError(\n            [out] IBackgroundCopyError **ppError\n    );\n\n    HRESULT GetOwner(\n            [out] LPWSTR *pVal\n    );\n\n    HRESULT SetDisplayName(\n            [in] LPCWSTR Val\n    );\n\n    HRESULT GetDisplayName(\n            [out] LPWSTR *pVal\n    );\n\n    HRESULT SetDescription(\n            [in] LPCWSTR Val\n    );\n\n    HRESULT GetDescription(\n            [out] LPWSTR *pVal\n    );\n\n    HRESULT SetPriority(\n            [in] BG_JOB_PRIORITY Val\n    );\n\n    HRESULT GetPriority(\n            [out] BG_JOB_PRIORITY *pVal\n    );\n\n    HRESULT SetNotifyFlags(\n            [in] ULONG Val\n    );\n\n    HRESULT GetNotifyFlags(\n            [out] ULONG *pVal\n    );\n\n    HRESULT SetNotifyInterface(\n            [in] IUnknown *Val\n    );\n\n    HRESULT GetNotifyInterface(\n            [out] IUnknown ** pVal\n    );\n\n    HRESULT SetMinimumRetryDelay(\n            [in] ULONG Seconds\n    );\n\n    HRESULT GetMinimumRetryDelay(\n            [out] ULONG *Seconds\n    );\n\n    HRESULT SetNoProgressTimeout(\n            [in] ULONG Seconds\n    );\n\n    HRESULT GetNoProgressTimeout(\n            [out] ULONG *Seconds\n    );\n\n    HRESULT GetErrorCount(\n            [out] ULONG *Errors\n    );\n\n    HRESULT SetProxySettings(\n            [in] BG_JOB_PROXY_USAGE ProxyUsage,\n            [in,string,unique] const WCHAR *ProxyList,\n            [in,string,unique] const WCHAR *ProxyBypassList\n    );\n\n    HRESULT GetProxySettings(\n            [out] BG_JOB_PROXY_USAGE *pProxyUsage,\n            [out] LPWSTR *pProxyList,\n            [out] LPWSTR *pProxyBypassList\n    );\n\n    HRESULT TakeOwnership();\n}\n\n[\n    uuid(1af4f612-3b71-466f-8f58-7b6f73ac57ad),\n    odl\n]\ninterface IEnumBackgroundCopyJobs : IUnknown\n{\n    HRESULT Next(\n            [in] ULONG celt,\n            [out,size_is(BG_ENUM_SIZEIS(celt)),length_is(BG_ENUM_LENGTHIS(celt,pceltFetched))] IBackgroundCopyJob **rgelt,\n            [in,out,unique] ULONG *pceltFetched\n    );\n\n    HRESULT Skip(\n            [in] ULONG celt\n    );\n\n    HRESULT Reset();\n\n    HRESULT Clone(\n            [out] IEnumBackgroundCopyJobs **ppenum\n    );\n\n    HRESULT GetCount(\n            [out] ULONG *puCount\n    );\n}\n\n\n[\n    uuid(97ea99c7-0186-4ad4-8df9-c5b4e0ed6b22),\n    odl\n]\ninterface IBackgroundCopyCallback : IUnknown\n{\n    HRESULT JobTransferred(\n            [in] IBackgroundCopyJob *pJob\n    );\n\n    HRESULT JobError(\n            [in] IBackgroundCopyJob *pJob,\n            [in] IBackgroundCopyError *pError\n    );\n\n    HRESULT JobModification(\n            [in] IBackgroundCopyJob *pJob,\n            [in] DWORD dwReserved\n    );\n}\n\n[\n    uuid(5ce34c0d-0dc9-4c1f-897c-daa1b78cee7c),\n    odl\n]\ninterface IBackgroundCopyManager : IUnknown\n{\n    cpp_quote(\"#define BG_JOB_ENUM_ALL_USERS 0x0001\")\n\n    HRESULT CreateJob(\n            [in] LPCWSTR DisplayName,\n            [in] BG_JOB_TYPE Type,\n            [out] GUID *pJobId,\n            [out] IBackgroundCopyJob **ppJob\n    );\n\n    HRESULT GetJob(\n            [in] REFGUID jobID,\n            [out] IBackgroundCopyJob **ppJob\n    );\n\n    HRESULT EnumJobs(\n            [in] DWORD dwFlags,\n            [out] IEnumBackgroundCopyJobs **ppEnum\n    );\n    HRESULT GetErrorDescription(\n            [in] HRESULT hResult,\n            [in] DWORD LanguageId,\n            [out] LPWSTR *pErrorDescription);\n}\n\n\n[\n    uuid(1deeb74f-7915-4560-b558-918c83f176a6),\n    version(1.0)\n]\nlibrary BackgroundCopyManager\n{\n    [\n        uuid(4991d34b-80a1-4291-83b6-3328366b9097),\n    ]\n    coclass BackgroundCopyManager\n    {\n        [default] interface IBackgroundCopyManager;\n    };\n\n    interface IBackgroundCopyCallback;\n}\n\ncpp_quote(\"#include \\\"bits1_5.h\\\"\")\n"
  },
  {
    "path": "wine/windows/bits1_5.idl",
    "content": "/*\n * Background Intelligent Transfer Service (BITS) 1.5 interface\n *\n * Copyright 2008 Google (Dan Hipschman)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"bits.idl\";\n#endif\n\n[\n    uuid(54b50739-686f-45eb-9dff-d6a9a0faa9af),\n    odl\n]\ninterface IBackgroundCopyJob2 : IBackgroundCopyJob\n{\n    HRESULT SetNotifyCmdLine([unique] LPCWSTR prog, [unique] LPCWSTR params);\n    HRESULT GetNotifyCmdLine([out] LPWSTR *prog, [out] LPWSTR *params);\n\n    typedef struct _BG_JOB_REPLY_PROGRESS\n    {\n        UINT64 BytesTotal;\n        UINT64 BytesTransferred;\n    } BG_JOB_REPLY_PROGRESS;\n\n    HRESULT GetReplyProgress([in, out] BG_JOB_REPLY_PROGRESS *progress);\n    HRESULT GetReplyData([out, size_is( , (unsigned long) *pLength)] byte **pBuffer,\n                         [in, out, unique] UINT64 *pLength);\n    HRESULT SetReplyFileName([unique] LPCWSTR filename);\n    HRESULT GetReplyFileName([out] LPWSTR *pFilename);\n\n    typedef enum\n    {\n        BG_AUTH_TARGET_SERVER = 1,\n        BG_AUTH_TARGET_PROXY\n    } BG_AUTH_TARGET;\n\n    typedef enum\n    {\n        BG_AUTH_SCHEME_BASIC = 1,\n        BG_AUTH_SCHEME_DIGEST,\n        BG_AUTH_SCHEME_NTLM,\n        BG_AUTH_SCHEME_NEGOTIATE,\n        BG_AUTH_SCHEME_PASSPORT\n    } BG_AUTH_SCHEME;\n\n    typedef struct\n    {\n        LPWSTR UserName;\n        LPWSTR Password;\n    } BG_BASIC_CREDENTIALS;\n    typedef BG_BASIC_CREDENTIALS *PBG_BASIC_CREDENTIALS;\n\n    typedef [switch_type(BG_AUTH_SCHEME)] union\n    {\n        [case(BG_AUTH_SCHEME_BASIC, BG_AUTH_SCHEME_DIGEST, BG_AUTH_SCHEME_NTLM,\n              BG_AUTH_SCHEME_NEGOTIATE, BG_AUTH_SCHEME_PASSPORT)]\n        BG_BASIC_CREDENTIALS Basic;\n        [default]\n        ;\n    } BG_AUTH_CREDENTIALS_UNION;\n\n    typedef struct\n    {\n        BG_AUTH_TARGET Target;\n        BG_AUTH_SCHEME Scheme;\n        [switch_is(Scheme)] BG_AUTH_CREDENTIALS_UNION Credentials;\n    } BG_AUTH_CREDENTIALS;\n    typedef BG_AUTH_CREDENTIALS *PBG_AUTH_CREDENTIALS;\n\n    HRESULT SetCredentials(BG_AUTH_CREDENTIALS *cred);\n    HRESULT RemoveCredentials(BG_AUTH_TARGET target, BG_AUTH_SCHEME scheme);\n}\n\ncpp_quote(\"#include \\\"bits2_0.h\\\"\")\n"
  },
  {
    "path": "wine/windows/bits2_0.idl",
    "content": "/*\n * Background Intelligent Transfer Service (BITS) 2.0 interface\n *\n * Copyright 2015 Hans Leidekker for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"bits.idl\";\nimport \"bits1_5.idl\";\n#endif\n\ncpp_quote(\"#define BG_COPY_FILE_OWNER 1\")\ncpp_quote(\"#define BG_COPY_FILE_GROUP 2\")\ncpp_quote(\"#define BG_COPY_FILE_DACL  4\")\ncpp_quote(\"#define BG_COPY_FILE_SACL  8\")\ncpp_quote(\"#define BG_COPY_FILE_ALL   15\")\n\ncpp_quote(\"#define BG_LENGTH_TO_EOF (UINT64)(-1)\")\n\ncpp_quote(\"#ifndef _BG_FILE_RANGE_DEFINED\")\ncpp_quote(\"#define _BG_FILE_RANGE_DEFINED\")\ntypedef struct _BG_FILE_RANGE\n{\n    UINT64 InitialOffset;\n    UINT64 Length;\n} BG_FILE_RANGE;\ncpp_quote(\"#endif\")\n\n[\n    uuid(443c8934-90ff-48ed-bcde-26f5c7450042),\n    odl\n]\ninterface IBackgroundCopyJob3 : IBackgroundCopyJob2\n{\n    HRESULT ReplaceRemotePrefix(\n        [in] LPCWSTR OldPrefix,\n        [in] LPCWSTR NewPrefix);\n\n    HRESULT AddFileWithRanges(\n        [in] LPCWSTR RemoteUrl,\n        [in] LPCWSTR LocalName,\n        [in] DWORD RangeCount,\n        [in, size_is(RangeCount)] BG_FILE_RANGE Ranges[]);\n\n    HRESULT SetFileACLFlags(\n        [in] DWORD Flags);\n\n    HRESULT GetFileACLFlags(\n        [out, ref] DWORD *Flags);\n}\n\n[\n    uuid(83e81b93-0873-474d-8a8c-f2018b1a939c),\n    odl\n]\ninterface IBackgroundCopyFile2 : IBackgroundCopyFile\n{\n    HRESULT GetFileRanges(\n        [in, out, unique] DWORD *RangeCount,\n        [out, size_is(, *RangeCount)] BG_FILE_RANGE **Ranges);\n\n    HRESULT SetRemoteName(\n        LPCWSTR Val);\n}\n\n[\n    uuid(2289a9af-dc96-486e-b268-89c9e3397c3d),\n    version(1.0)\n]\nlibrary BackgroundCopyManager2_0\n{\n    [\n        uuid(6d18ad12-bde3-4393-b311-099c346e6df9)\n    ]\n    coclass BackgroundCopyManager2_0\n    {\n        [default] interface IBackgroundCopyManager;\n    };\n\n    interface IBackgroundCopyCallback;\n    interface IBackgroundCopyJob3;\n    interface IBackgroundCopyFile2;\n}\n\ncpp_quote(\"#include \\\"bits2_5.h\\\"\")\n"
  },
  {
    "path": "wine/windows/bits2_5.idl",
    "content": "/*\n * Background Intelligent Transfer Service (BITS) 2.5 interface\n *\n * Copyright 2015 Hans Leidekker for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"bits.idl\";\nimport \"bits1_5.idl\";\nimport \"bits2_0.idl\";\n#endif\n\n[\n    uuid(f1bd1079-9f01-4bdc-8036-f09b70095066),\n    odl\n]\ninterface IBackgroundCopyJobHttpOptions : IUnknown\n{\n    typedef enum\n    {\n        BG_CERT_STORE_LOCATION_CURRENT_USER,\n        BG_CERT_STORE_LOCATION_LOCAL_MACHINE,\n        BG_CERT_STORE_LOCATION_CURRENT_SERVICE,\n        BG_CERT_STORE_LOCATION_SERVICES,\n        BG_CERT_STORE_LOCATION_USERS,\n        BG_CERT_STORE_LOCATION_CURRENT_USER_GROUP_POLICY,\n        BG_CERT_STORE_LOCATION_LOCAL_MACHINE_GROUP_POLICY,\n        BG_CERT_STORE_LOCATION_LOCAL_MACHINE_ENTERPRISE\n    } BG_CERT_STORE_LOCATION;\n\n    HRESULT SetClientCertificateByID(\n        [in] BG_CERT_STORE_LOCATION StoreLocation,\n        [in] LPCWSTR StoreName,\n        [in, size_is(20), ref] BYTE *pCertHashBlob\n    );\n\n    HRESULT SetClientCertificateByName(\n        [in] BG_CERT_STORE_LOCATION StoreLocation,\n        [in] LPCWSTR StoreName,\n        [in] LPCWSTR SubjectName\n    );\n\n    HRESULT RemoveClientCertificate();\n\n    HRESULT GetClientCertificate(\n        [out, ref] BG_CERT_STORE_LOCATION *pStoreLocation,\n        [out, ref] LPWSTR *pStoreName,\n        [out, size_is(, 20), ref] BYTE **ppCertHashBlob,\n        [out, ref] LPWSTR *pSubjectName\n    );\n\n    HRESULT SetCustomHeaders(\n        [in, unique] LPCWSTR RequestHeaders\n    );\n\n    HRESULT GetCustomHeaders(\n        [out] LPWSTR *pRequestHeaders\n    );\n\n    HRESULT SetSecurityFlags(\n        [in] ULONG Flags\n    );\n\n    HRESULT GetSecurityFlags(\n        [out, ref] ULONG *pFlags\n    );\n}\n\n[\n    uuid(4974177c-3bb6-4c37-9ff0-6b7426f0aba9),\n    version(1.0)\n]\nlibrary BackgroundCopyManager2_5\n{\n    [\n        uuid(03ca98d6-ff5d-49b8-abc6-03dd84127020)\n    ]\n    coclass BackgroundCopyManager2_5\n    {\n        [default] interface IBackgroundCopyManager;\n    };\n\n    interface IBackgroundCopyCallback;\n    interface IBackgroundCopyJobHttpOptions;\n}\n\ncpp_quote(\"#include \\\"bits3_0.h\\\"\")\n"
  },
  {
    "path": "wine/windows/bits3_0.idl",
    "content": "/*\n * Background Intelligent Transfer Service (BITS) 3.0 interface\n *\n * Copyright 2013 Nikolay Sivov for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"bits.idl\";\nimport \"bits2_0.idl\";\n#endif\n\n[\n    uuid(659cdeac-489e-11d9-a9cd-000d56965251),\n    odl\n]\ninterface IBackgroundCopyCallback2 : IBackgroundCopyCallback\n{\n    HRESULT FileTransferred([in] IBackgroundCopyJob *job,\n                            [in] IBackgroundCopyFile *file);\n}\n\n[\n    uuid(659cdeae-489e-11d9-a9cd-000d56965251),\n    odl\n]\ninterface IBackgroundCopyJob4 : IBackgroundCopyJob3\n{\ncpp_quote(\"#define BG_JOB_ENABLE_PEERCACHING_CLIENT 0x0001\")\ncpp_quote(\"#define BG_JOB_ENABLE_PEERCACHING_SERVER 0x0002\")\ncpp_quote(\"#define BG_JOB_DISABLE_BRANCH_CACHE      0x0004\")\n\n    HRESULT SetPeerCachingFlags(DWORD flags);\n    HRESULT GetPeerCachingFlags([out, ref] DWORD *flags);\n    HRESULT GetOwnerIntegrityLevel([out, ref] ULONG *level);\n    HRESULT GetOwnerElevationState([out, ref] BOOL *elevated);\n    HRESULT SetMaximumDownloadTime(ULONG timeout);\n    HRESULT GetMaximumDownloadTime([out,ref] ULONG *timeout);\n}\n\n[\n    uuid(659cdea6-489e-11d9-a9cd-000d56965251),\n    lcid(0x0000),\n    version(1.0)\n]\nlibrary BackgroundCopyManager3_0\n{\n    [\n        uuid(659cdea7-489e-11d9-a9cd-000d56965251)\n    ]\n    coclass BackgroundCopyManager3_0\n    {\n        [default] interface IBackgroundCopyManager;\n    };\n\n    interface IBackgroundCopyJob4;\n}\n"
  },
  {
    "path": "wine/windows/bitsmsg.h",
    "content": "/*\n * Standard return values that may be generated by BITS\n *\n * Copyright 2007 Google (Roy Shea)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_BITMSG_H__\n#define __WINE_BITMSG_H__\n\n#define BG_S_PARTIAL_COMPLETE                   0x00200017\n#define BG_S_UNABLE_TO_DELETE_FILES             0x0020001A\n#define BG_S_OVERRIDDEN_BY_POLICY               0x00200055\n\n#define BG_E_HTTP_ERROR_400                     0x80190190\n#define BG_E_HTTP_ERROR_401                     0x80190191\n#define BG_E_HTTP_ERROR_404                     0x80190194\n#define BG_E_HTTP_ERROR_407                     0x80190197\n#define BG_E_HTTP_ERROR_414                     0x8019019E\n#define BG_E_HTTP_ERROR_501                     0x801901F5\n#define BG_E_HTTP_ERROR_503                     0x801901F7\n#define BG_E_HTTP_ERROR_504                     0x801901F8\n#define BG_E_HTTP_ERROR_505                     0x801901F9\n\n#define BG_E_NOT_FOUND                          0x80200001\n#define BG_E_INVALID_STATE                      0x80200002\n#define BG_E_EMPTY                              0x80200003\n#define BG_E_FILE_NOT_AVAILABLE                 0x80200004\n#define BG_E_PROTOCOL_NOT_AVAILABLE             0x80200005\n#define BG_E_DESTINATION_LOCKED                 0x8020000D\n#define BG_E_VOLUME_CHANGED                     0x8020000E\n#define BG_E_ERROR_INFORMATION_UNAVAILABLE      0x8020000F\n#define BG_E_NETWORK_DISCONNECTED               0x80200010\n#define BG_E_MISSING_FILE_SIZE                  0x80200011\n#define BG_E_INSUFFICIENT_HTTP_SUPPORT          0x80200012\n#define BG_E_INSUFFICIENT_RANGE_SUPPORT         0x80200013\n#define BG_E_REMOTE_NOT_SUPPORTED               0x80200014\n#define BG_E_NEW_OWNER_DIFF_MAPPING             0x80200015\n#define BG_E_NEW_OWNER_NO_FILE_ACCESS           0x80200016\n#define BG_E_PROXY_LIST_TOO_LARGE               0x80200018\n#define BG_E_PROXY_BYPASS_LIST_TOO_LARGE        0x80200019\n#define BG_E_TOO_MANY_FILES                     0x8020001C\n#define BG_E_LOCAL_FILE_CHANGED                 0x8020001D\n#define BG_E_TOO_LARGE                          0x80200020\n#define BG_E_STRING_TOO_LONG                    0x80200021\n#define BG_E_CLIENT_SERVER_PROTOCOL_MISMATCH    0x80200022\n#define BG_E_SERVER_EXECUTE_ENABLED             0x80200023\n#define BG_E_USERNAME_TOO_LARGE                 0x80200025\n#define BG_E_PASSWORD_TOO_LARGE                 0x80200026\n#define BG_E_INVALID_AUTH_TARGET                0x80200027\n#define BG_E_INVALID_AUTH_SCHEME                0x80200028\n#define BG_E_INVALID_RANGE                      0x8020002B\n#define BG_E_OVERLAPPING_RANGES                 0x8020002C\n#define BG_E_BLOCKED_BY_POLICY                  0x8020003E\n#define BG_E_INVALID_PROXY_INFO                 0x8020003F\n#define BG_E_INVALID_CREDENTIALS                0x80200040\n#define BG_E_RECORD_DELETED                     0x80200042\n#define BG_E_UPNP_ERROR                         0x80200045\n#define BG_E_PEERCACHING_DISABLED               0x80200047\n#define BG_E_BUSYCACHERECORD                    0x80200048\n#define BG_E_TOO_MANY_JOBS_PER_USER             0x80200049\n#define BG_E_TOO_MANY_JOBS_PER_MACHINE          0x80200050\n#define BG_E_TOO_MANY_FILES_IN_JOB              0x80200051\n#define BG_E_TOO_MANY_RANGES_IN_FILE            0x80200052\n#define BG_E_VALIDATION_FAILED                  0x80200053\n#define BG_E_MAXDOWNLOAD_TIMEOUT                0x80200054\n\n#endif /* #ifndef __WINE_BITMSG_H__ */\n"
  },
  {
    "path": "wine/windows/bluetoothapis.h",
    "content": "/*\n * Copyright (C) 2016 Austin English\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __BLUETOOTHAPIS_H\n#define __BLUETOOTHAPIS_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef ULONGLONG BTH_ADDR;\n\ntypedef struct _BLUETOOTH_ADDRESS {\n    union {\n        BTH_ADDR ullLong;\n        BYTE rgBytes[6];\n    } DUMMYUNIONNAME;\n} BLUETOOTH_ADDRESS_STRUCT;\n\n#define BLUETOOTH_ADDRESS BLUETOOTH_ADDRESS_STRUCT\n#define BLUETOOTH_NULL_ADDRESS ((ULONGLONG) 0x0)\n\n#define BLUETOOTH_MAX_NAME_SIZE           (248)\n#define BLUETOOTH_MAX_PASSKEY_SIZE        (16)\n#define BLUETOOTH_MAX_PASSKEY_BUFFER_SIZE (BLUETOOTH_MAX_PASSKEY_SIZE + 1)\n\n#define BLUETOOTH_SERVICE_DISABLE 0x00\n#define BLUETOOTH_SERVICE_ENABLE  0x01\n#define BLUETOOTH_SERVICE_MASK    (BLUETOOTH_ENABLE_SERVICE | BLUETOOTH_DISABLE_SERVICE)\n\ntypedef struct _BLUETOOTH_FIND_RADIO_PARAMS {\n    DWORD dwSize;\n} BLUETOOTH_FIND_RADIO_PARAMS;\n\ntypedef struct _BLUETOOTH_RADIO_INFO {\n    DWORD dwSize;\n    BLUETOOTH_ADDRESS address;\n    WCHAR szName[BLUETOOTH_MAX_NAME_SIZE];\n    ULONG ulClassofDevice;\n    USHORT lmpSubversion;\n    USHORT manufacturer;\n} BLUETOOTH_RADIO_INFO, *PBLUETOOTH_RADIO_INFO;\n\ntypedef struct _BLUETOOTH_DEVICE_INFO {\n    DWORD dwSize;\n    BLUETOOTH_ADDRESS Address;\n    ULONG ulClassofDevice;\n    BOOL fConnected;\n    BOOL fRemembered;\n    BOOL fAuthenticated;\n    SYSTEMTIME stLastSeen;\n    SYSTEMTIME stLastUsed;\n    WCHAR szName[BLUETOOTH_MAX_NAME_SIZE];\n} BLUETOOTH_DEVICE_INFO, BLUETOOTH_DEVICE_INFO_STRUCT, *PBLUETOOTH_DEVICE_INFO;\n\ntypedef struct _BLUETOOTH_DEVICE_SEARCH_PARAMS {\n    DWORD dwSize;\n    BOOL fReturnAuthenticated;\n    BOOL fReturnRemembered;\n    BOOL fReturnUnknown;\n    BOOL fReturnConnected;\n    BOOL fIssueInquiry;\n    UCHAR cTimeoutMultiplier;\n    HANDLE hRadio;\n} BLUETOOTH_DEVICE_SEARCH_PARAMS;\n\ntypedef HANDLE HBLUETOOTH_AUTHENTICATION_REGISTRATION;\ntypedef HANDLE HBLUETOOTH_CONTAINER_ELEMENT;\ntypedef HANDLE HBLUETOOTH_DEVICE_FIND;\ntypedef HANDLE HBLUETOOTH_RADIO_FIND;\n\ntypedef struct _BLUETOOTH_COD_PAIRS {\n    ULONG ulCODMask;\n    const WCHAR *pcszDescription;\n} BLUETOOTH_COD_PAIRS;\n\ntypedef BOOL (WINAPI *PFN_DEVICE_CALLBACK)(void *pvParam, const BLUETOOTH_DEVICE_INFO *pDevice);\n\ntypedef struct _BLUETOOTH_SELECT_DEVICE_PARAMS {\n    DWORD dwSize;\n    ULONG cNumOfClasses;\n    BLUETOOTH_COD_PAIRS *prgClassOfDevices;\n    WCHAR *pszInfo;\n    HWND hwndParent;\n    BOOL fForceAuthentication;\n    BOOL fShowAuthenticated;\n    BOOL fShowRemembered;\n    BOOL fShowUnknown;\n    BOOL fAddNewDeviceWizard;\n    BOOL fSkipServicesPage;\n    PFN_DEVICE_CALLBACK pfnDeviceCallback;\n    void *pvParam;\n    DWORD cNumDevices;\n    PBLUETOOTH_DEVICE_INFO pDevices;\n} BLUETOOTH_SELECT_DEVICE_PARAMS;\n\ntypedef BOOL (WINAPI *PFN_AUTHENTICATION_CALLBACK)(void *, PBLUETOOTH_DEVICE_INFO);\n\ntypedef struct _SDP_ELEMENT_DATA {\n    SDP_TYPE type;\n    SDP_SPECIFICTYPE specificType;\n    union {\n        SDP_LARGE_INTEGER_16 int128;\n        LONGLONG int64;\n        LONG int32;\n        SHORT int16;\n        CHAR int8;\n\n        SDP_ULARGE_INTEGER_16 uint128;\n        ULONGLONG uint64;\n        ULONG uint32;\n        USHORT uint16;\n        UCHAR uint8;\n\n        UCHAR booleanVal;\n\n        GUID uuid128;\n        ULONG uuid32;\n        USHORT uuid16;\n\n        struct {\n            BYTE *value;\n            ULONG length;\n        } string;\n\n        struct {\n            BYTE *value;\n            ULONG length;\n        } url;\n\n        struct {\n            BYTE *value;\n            ULONG length;\n        } sequence;\n\n        struct {\n            BYTE *value;\n            ULONG length;\n        } alternative;\n    } data;\n} SDP_ELEMENT_DATA, *PSDP_ELEMENT_DATA;\n\ntypedef struct _SDP_STRING_TYPE_DATA {\n    USHORT encoding;\n    USHORT mibeNum;\n    USHORT attributeId;\n} SDP_STRING_TYPE_DATA, *PSDP_STRING_TYPE_DATA;\n\ntypedef BOOL (CALLBACK *PFN_BLUETOOTH_ENUM_ATTRIBUTES_CALLBACK)(\n    ULONG uAttribId,\n    BYTE  *pValueStream,\n    ULONG cbStreamSize,\n    void  *pvParam);\n\nDWORD WINAPI BluetoothAuthenticateDevice(HWND, HANDLE, BLUETOOTH_DEVICE_INFO *, WCHAR *, ULONG);\nDWORD WINAPI BluetoothAuthenticateMultipleDevices(HWND, HANDLE, DWORD, BLUETOOTH_DEVICE_INFO *);\nBOOL  WINAPI BluetoothDisplayDeviceProperties(HWND, BLUETOOTH_DEVICE_INFO *);\nBOOL  WINAPI BluetoothEnableDiscovery(HANDLE, BOOL);\nBOOL  WINAPI BluetoothEnableIncomingConnections(HANDLE, BOOL);\nDWORD WINAPI BluetoothEnumerateInstalledServices(HANDLE, BLUETOOTH_DEVICE_INFO *, DWORD *, GUID *);\nBOOL  WINAPI BluetoothFindDeviceClose(HBLUETOOTH_DEVICE_FIND);\nHBLUETOOTH_DEVICE_FIND WINAPI BluetoothFindFirstDevice(BLUETOOTH_DEVICE_SEARCH_PARAMS *, BLUETOOTH_DEVICE_INFO *);\nHBLUETOOTH_RADIO_FIND  WINAPI BluetoothFindFirstRadio(BLUETOOTH_FIND_RADIO_PARAMS *, HANDLE *);\nBOOL  WINAPI BluetoothFindNextDevice(HBLUETOOTH_DEVICE_FIND, BLUETOOTH_DEVICE_INFO *);\nBOOL  WINAPI BluetoothFindNextRadio(HBLUETOOTH_RADIO_FIND, HANDLE *);\nBOOL  WINAPI BluetoothFindRadioClose(HBLUETOOTH_RADIO_FIND);\nDWORD WINAPI BluetoothGetDeviceInfo(HANDLE, BLUETOOTH_DEVICE_INFO *);\nDWORD WINAPI BluetoothGetRadioInfo(HANDLE, PBLUETOOTH_RADIO_INFO);\nBOOL  WINAPI BluetoothIsConnectable(HANDLE);\nBOOL  WINAPI BluetoothIsDiscoverable(HANDLE);\nDWORD WINAPI BluetoothRegisterForAuthentication(BLUETOOTH_DEVICE_INFO *, HBLUETOOTH_AUTHENTICATION_REGISTRATION *, PFN_AUTHENTICATION_CALLBACK, void  *);\nDWORD WINAPI BluetoothRemoveDevice(BLUETOOTH_ADDRESS *);\n#define BluetoothEnumAttributes BluetoothSdpEnumAttributes\nBOOL  WINAPI BluetoothSdpEnumAttributes(BYTE  *, ULONG, PFN_BLUETOOTH_ENUM_ATTRIBUTES_CALLBACK, void  *);\nDWORD WINAPI BluetoothSdpGetAttributeValue(BYTE *, ULONG, USHORT, PSDP_ELEMENT_DATA);\nDWORD WINAPI BluetoothSdpGetContainerElementData(BYTE *, ULONG, HBLUETOOTH_CONTAINER_ELEMENT *, PSDP_ELEMENT_DATA);\nDWORD WINAPI BluetoothSdpGetElementData(BYTE *, ULONG, PSDP_ELEMENT_DATA);\nDWORD WINAPI BluetoothSdpGetString(BYTE *, ULONG, PSDP_STRING_TYPE_DATA, USHORT, WCHAR *, ULONG *);\nBOOL  WINAPI BluetoothSelectDevices(BLUETOOTH_SELECT_DEVICE_PARAMS *);\nBOOL  WINAPI BluetoothSelectDevicesFree(BLUETOOTH_SELECT_DEVICE_PARAMS *);\nDWORD WINAPI BluetoothSendAuthenticationResponse(HANDLE, BLUETOOTH_DEVICE_INFO *, WCHAR *);\nDWORD WINAPI BluetoothSetServiceState(HANDLE, BLUETOOTH_DEVICE_INFO *, GUID *, DWORD);\nBOOL  WINAPI BluetoothUnregisterAuthentication(HBLUETOOTH_AUTHENTICATION_REGISTRATION);\nDWORD WINAPI BluetoothUpdateDeviceRecord(BLUETOOTH_DEVICE_INFO *);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __BLUETOOTHAPIS_H */\n"
  },
  {
    "path": "wine/windows/bthsdpdef.h",
    "content": "/*\n * Copyright (C) 2016 Austin English\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __BTHSDPDEF_H__\n#define __BTHSDPDEF_H__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct SDP_LARGE_INTEGER_16 {\n    ULONGLONG LowPart;\n    LONGLONG HighPart;\n} SDP_LARGE_INTEGER_16, *PSDP_LARGE_INTEGER_16, *LPSDP_LARGE_INTEGER_16;\n\ntypedef struct SDP_ULARGE_INTEGER_16 {\n    ULONGLONG LowPart;\n    ULONGLONG HighPart;\n} SDP_ULARGE_INTEGER_16, *PSDP_ULARGE_INTEGER_16, *LPSDP_ULARGE_INTEGER_16;\n\ntypedef enum NodeContainerType {\n    NodeContainerTypeSequence,\n    NodeContainerTypeAlternative\n} NodeContainerType;\n\ntypedef USHORT SDP_ERROR, *PSDP_ERROR;\n\ntypedef enum SDP_TYPE {\n    SDP_TYPE_NIL =  0x00,\n    SDP_TYPE_UINT = 0x01,\n    SDP_TYPE_INT = 0x02,\n    SDP_TYPE_UUID = 0x03,\n    SDP_TYPE_STRING = 0x04,\n    SDP_TYPE_BOOLEAN = 0x05,\n    SDP_TYPE_SEQUENCE = 0x06,\n    SDP_TYPE_ALTERNATIVE = 0x07,\n    SDP_TYPE_URL = 0x08,\n    SDP_TYPE_CONTAINER = 0x20\n} SDP_TYPE;\n\ntypedef enum SDP_SPECIFICTYPE {\n    SDP_ST_NONE = 0x0000,\n    SDP_ST_UINT8 = 0x0010,\n    SDP_ST_UINT16 = 0x0110,\n    SDP_ST_UINT32 = 0x0210,\n    SDP_ST_UINT64 = 0x0310,\n    SDP_ST_UINT128 = 0x0410,\n    SDP_ST_INT8 = 0x0020,\n    SDP_ST_INT16 = 0x0120,\n    SDP_ST_INT32 = 0x0220,\n    SDP_ST_INT64 = 0x0320,\n    SDP_ST_INT128 = 0x0420,\n    SDP_ST_UUID16 = 0x0130,\n    SDP_ST_UUID32 = 0x0220,\n    SDP_ST_UUID128 = 0x0430\n} SDP_SPECIFICTYPE;\n\ntypedef struct _SdpAttributeRange {\n    USHORT minAttribute;\n    USHORT maxAttribute;\n} SdpAttributeRange;\n\ntypedef union SdpQueryUuidUnion {\n    GUID uuid128;\n    ULONG uuid32;\n    USHORT uuid16;\n} SdpQueryUuidUnion;\n\ntypedef struct _SdpQueryUuid {\n    SdpQueryUuidUnion u;\n    USHORT uuidType;\n} SdpQueryUuid;\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __BTHSDPDEF_H__ */\n"
  },
  {
    "path": "wine/windows/cderr.h",
    "content": "/*\n * Copyright (C) 1999 Bertho Stultiens\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_CDERR_H\n#define __WINE_CDERR_H\n\n/* General error codes */\n#define CDERR_DIALOGFAILURE\t0xFFFF\n#define CDERR_GENERALCODES\t0x0000\n#define CDERR_STRUCTSIZE\t0x0001\n#define CDERR_INITIALIZATION\t0x0002\n#define CDERR_NOTEMPLATE\t0x0003\n#define CDERR_NOHINSTANCE\t0x0004\n#define CDERR_LOADSTRFAILURE\t0x0005\n#define CDERR_FINDRESFAILURE\t0x0006\n#define CDERR_LOADRESFAILURE\t0x0007\n#define CDERR_LOCKRESFAILURE\t0x0008\n#define CDERR_MEMALLOCFAILURE\t0x0009\n#define CDERR_MEMLOCKFAILURE\t0x000A\n#define CDERR_NOHOOK\t\t0x000B\n#define CDERR_REGISTERMSGFAIL\t0x000C\n\n/* Printer dialog error codes */\n#define PDERR_PRINTERCODES\t0x1000\n#define PDERR_SETUPFAILURE\t0x1001\n#define PDERR_PARSEFAILURE\t0x1002\n#define PDERR_RETDEFFAILURE\t0x1003\n#define PDERR_LOADDRVFAILURE\t0x1004\n#define PDERR_GETDEVMODEFAIL\t0x1005\n#define PDERR_INITFAILURE\t0x1006\n#define PDERR_NODEVICES\t\t0x1007\n#define PDERR_NODEFAULTPRN\t0x1008\n#define PDERR_DNDMMISMATCH\t0x1009\n#define PDERR_CREATEICFAILURE\t0x100A\n#define PDERR_PRINTERNOTFOUND\t0x100B\n#define PDERR_DEFAULTDIFFERENT\t0x100C\n\n/* Chose font error codes */\n#define CFERR_CHOOSEFONTCODES\t0x2000\n#define CFERR_NOFONTS\t\t0x2001\n#define CFERR_MAXLESSTHANMIN\t0x2002\n\n/* File{Open,Save} error codes */\n#define FNERR_FILENAMECODES\t0x3000\n#define FNERR_SUBCLASSFAILURE\t0x3001\n#define FNERR_INVALIDFILENAME\t0x3002\n#define FNERR_BUFFERTOOSMALL\t0x3003\n\n/* Find/Replace error codes */\n#define FRERR_FINDREPLACECODES\t0x4000\n#define FRERR_BUFFERLENGTHZERO\t0x4001\n\n/* Choose color error codes */\n#define CCERR_CHOOSECOLORCODES\t0x5000\n\n#endif\n"
  },
  {
    "path": "wine/windows/cfgmgr32.h",
    "content": "/*\n * Copyright (C) 2005 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _CFGMGR32_H_\n#define _CFGMGR32_H_\n\n/* FIXME: #include <cfg.h> */\n\n#ifndef GUID_DEFINED\n# include <guiddef.h>\n#endif\n\n#include <winreg.h>\n\n/* cfgmgr32 doesn't use the normal convention, it adds an underscore before A/W */\n#ifdef WINE_NO_UNICODE_MACROS\n# define DECL_WINELIB_CFGMGR32_TYPE_AW(type)  /* nothing */\n#else\n# define DECL_WINELIB_CFGMGR32_TYPE_AW(type)  typedef WINELIB_NAME_AW(type##_) type;\n#endif\n\n#define CMAPI\ntypedef DWORD CONFIGRET;\n\n#define CR_SUCCESS                      0x00\n#define CR_DEFAULT                      0x01\n#define CR_OUT_OF_MEMORY                0x02\n#define CR_INVALID_POINTER              0x03\n#define CR_INVALID_FLAG                 0x04\n#define CR_INVALID_DEVNODE              0x05\n#define CR_INVALID_DEVINST              CR_INVALID_DEVNODE\n#define CR_INVALID_RES_DES              0x06\n#define CR_INVALID_LOG_CONF             0x07\n#define CR_INVALID_ARBITRATOR           0x08\n#define CR_INVALID_NODELIST             0x09\n#define CR_DEVNODE_HAS_REQS             0x0a\n#define CR_DEVINST_HAS_REQS             CR_DEVNODE_HAS_REQS\n#define CR_INVALID_RESOURCEID           0x0b\n#define CR_DLVXD_NOT_FOUND              0x0c\n#define CR_NO_SUCH_DEVNODE              0x0d\n#define CR_NO_SUCH_DEVINST              CR_NO_SUCH_DEVNODE\n#define CR_NO_MORE_LOG_CONF             0x0e\n#define CR_NO_MORE_RES_DES              0x0f\n#define CR_ALREADY_SUCH_DEVNODE         0x10\n#define CR_ALREADY_SUCH_DEVINST         CR_ALREADY_SUCH_DEVNODE\n#define CR_INVALID_RANGE_LIST           0x11\n#define CR_INVALID_RANGE                0x12\n#define CR_FAILURE                      0x13\n#define CR_NO_SUCH_LOGICAL_DEV          0x14\n#define CR_CREATE_BLOCKED               0x15\n#define CR_NOT_SYSTEM_VM                0x16\n#define CR_REMOVE_VETOED                0x17\n#define CR_APM_VETOED                   0x18\n#define CR_INVALID_LOAD_TYPE            0x19\n#define CR_BUFFER_SMALL                 0x1a\n#define CR_NO_ARBITRATOR                0x1b\n#define CR_NO_REGISTRY_HANDLE           0x1c\n#define CR_REGISTRY_ERROR               0x1d\n#define CR_INVALID_DEVICE_ID            0x1e\n#define CR_INVALID_DATA                 0x1f\n#define CR_INVALID_API                  0x20\n#define CR_DEVLOADER_NOT_READY          0x21\n#define CR_NEED_RESTART                 0x22\n#define CR_NO_MORE_HW_PROFILES          0x23\n#define CR_DEVICE_NOT_THERE             0x24\n#define CR_NO_SUCH_VALUE                0x25\n#define CR_WRONG_TYPE                   0x26\n#define CR_INVALID_PRIORITY             0x27\n#define CR_NOT_DISABLEABLE              0x28\n#define CR_FREE_RESOURCES               0x29\n#define CR_QUERY_VETOED                 0x2a\n#define CR_CANT_SHARE_IRQ               0x2b\n#define CR_NO_DEPENDENT                 0x2c\n#define CR_SAME_RESOURCES               0x2d\n#define CR_NO_SUCH_REGISTRY_KEY         0x2e\n#define CR_INVALID_MACHINENAME          0x2f\n#define CR_REMOTE_COMM_FAILURE          0x30\n#define CR_MACHINE_UNAVAILABLE          0x31\n#define CR_NO_CM_SERVICES               0x32\n#define CR_ACCESS_DENIED                0x33\n#define CR_CALL_NOT_IMPLEMENTED         0x34\n#define CR_INVALID_PROPERTY             0x35\n#define CR_DEVICE_INTERFACE_ACTIVE      0x36\n#define CR_NO_SUCH_DEVICE_INTERFACE     0x37\n#define CR_INVALID_REFERENCE_STRING     0x38\n#define CR_INVALID_CONFLICT_LIST        0x39\n#define CR_INVALID_INDEX                0x3a\n#define CR_INVALID_STRUCTURE_SIZE       0x3b\n#define NUM_CR_RESULTS                  0x3c\n\n#define MAX_DEVICE_ID_LEN               200\n#define MAX_DEVNODE_ID_LEN              MAX_DEVICE_ID_LEN\n\n#define MAX_CLASS_NAME_LEN              32\n#define MAX_GUID_STRING_LEN             39\n#define MAX_PROFILE_LEN                 80\n\n#define CM_DRP_DEVICEDESC               0x01\n#define CM_DRP_HARDWAREID               0x02\n#define CM_DRP_COMPATIBLEIDS            0x03\n#define CM_DRP_UNUSED0                  0x04\n#define CM_DRP_SERVICE                  0x05\n#define CM_DRP_UNUSED1                  0x06\n#define CM_DRP_UNUSED2                  0x07\n#define CM_DRP_CLASS                    0x08\n#define CM_DRP_CLASSGUID                0x09\n#define CM_DRP_DRIVER                   0x0A\n#define CM_DRP_CONFIGFLAGS              0x0B\n#define CM_DRP_MFG                      0x0C\n#define CM_DRP_FRIENDLYNAME             0x0D\n#define CM_DRP_LOCATION_INFORMATION     0x0E\n#define CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME 0x0F\n#define CM_DRP_CAPABILITIES             0x10\n#define CM_DRP_UI_NUMBER                0x11\n#define CM_DRP_UPPERFILTERS             0x12\n#define CM_DRP_LOWERFILTERS             0x13\n#define CM_DRP_BUSTYPEGUID              0x14\n#define CM_DRP_LEGACYBUSTYPE            0x15\n#define CM_DRP_BUSNUMBER                0x16\n#define CM_DRP_ENUMERATOR_NAME          0x17\n#define CM_DRP_SECURITY                 0x18\n#define CM_DRP_SECURITY_SDS             0x19\n#define CM_DRP_DEVTYPE                  0x1A\n#define CM_DRP_EXCLUSIVE                0x1B\n#define CM_DRP_CHARACTERISTICS          0x1C\n#define CM_DRP_ADDRESS                  0x1D\n#define CM_DRP_UI_NUMBER_DESC_FORMAT    0x1E\n#define CM_DRP_DEVICE_POWER_DATA        0x1F\n#define CM_DRP_REMOVAL_POLICY           0x20\n#define CM_DRP_REMOVAL_POLICY_HW_DEFAULT 0x21\n#define CM_DRP_REMOVAL_POLICY_OVERRIDE  0x22\n#define CM_DRP_INSTALL_STATE            0x23\n#define CM_DRP_LOCATION_PATHS           0x24\n#define CM_DRP_BASE_CONTAINERID         0x25\n#define CM_DRP_MIN                      0x01\n#define CM_DRP_MAX                      0x25\n\n#define CM_CRP_UPPERFILTERS             CM_DRP_UPPERFILTERS\n#define CM_CRP_LOWERFILTERS             CM_DRP_LOWERFILTERS\n#define CM_CRP_SECURITY                 CM_DRP_SECURITY\n#define CM_CRP_SECURITY_SDS             CM_DRP_SECURITY_SDS\n#define CM_CRP_DEVTYPE                  CM_DRP_DEVTYPE\n#define CM_CRP_EXCLUSIVE                CM_DRP_EXCLUSIVE\n#define CM_CRP_CHARACTERISTICS          CM_DRP_CHARACTERISTICS\n#define CM_CRP_MIN                      CM_DRP_MIN\n#define CM_CRP_MAX                      CM_DRP_MAX\n\n#define RegDisposition_OpenAlways       0x00\n#define RegDisposition_OpenExisting     0x01\n\n#define CM_REGISTRY_HARDWARE            0x0000\n#define CM_REGISTRY_SOFTWARE            0x0001\n#define CM_REGISTRY_USER                0x0100\n#define CM_REGISTRY_CONFIG              0x0200\n\ntypedef DWORD DEVINST, *PDEVINST;\ntypedef DWORD DEVNODE, *PDEVNODE;\ntypedef HANDLE HMACHINE, *PHMACHINE;\ntypedef CHAR *DEVNODEID_A, *DEVINSTID_A;\ntypedef WCHAR *DEVNODEID_W, *DEVINSTID_W;\ntypedef ULONG REGDISPOSITION;\n\nDECL_WINELIB_CFGMGR32_TYPE_AW(DEVNODEID)\nDECL_WINELIB_CFGMGR32_TYPE_AW(DEVINSTID)\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nCMAPI CONFIGRET WINAPI CM_Connect_MachineA(PCSTR,PHMACHINE);\nCMAPI CONFIGRET WINAPI CM_Connect_MachineW(PCWSTR,PHMACHINE);\n#define     CM_Connect_Machine WINELIB_NAME_AW(CM_Connect_Machine)\nCMAPI CONFIGRET WINAPI CM_Create_DevNodeA(PDEVINST,DEVINSTID_A,DEVINST,ULONG);\nCMAPI CONFIGRET WINAPI CM_Create_DevNodeW(PDEVINST,DEVINSTID_W,DEVINST,ULONG);\n#define     CM_Create_DevNode WINELIB_NAME_AW(CM_Create_DevNode)\nCMAPI CONFIGRET WINAPI CM_Disconnect_Machine(HMACHINE);\nCMAPI CONFIGRET WINAPI CM_Get_Child(PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags);\nCMAPI CONFIGRET WINAPI CM_Get_Child_Ex(PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine);\nCMAPI CONFIGRET WINAPI CM_Get_Device_IDA(DEVINST,PSTR,ULONG,ULONG);\nCMAPI CONFIGRET WINAPI CM_Get_Device_IDW(DEVINST,PWSTR,ULONG,ULONG);\n#define     CM_Get_Device_ID WINELIB_NAME_AW(CM_Get_Device_ID)\nCMAPI CONFIGRET WINAPI CM_Get_Device_ID_ExA(DEVINST,PSTR,ULONG,ULONG,HMACHINE);\nCMAPI CONFIGRET WINAPI CM_Get_Device_ID_ExW(DEVINST,PWSTR,ULONG,ULONG,HMACHINE);\n#define     CM_Get_Device_ID_Ex WINELIB_NAME_AW(CM_Get_Device_ID_Ex)\nCMAPI CONFIGRET WINAPI CM_Get_Device_ID_ListA(PCSTR,PCHAR,ULONG,ULONG);\nCMAPI CONFIGRET WINAPI CM_Get_Device_ID_ListW(PCWSTR,PWCHAR,ULONG,ULONG);\n#define     CM_Get_Device_ID_List WINELIB_NAME_AW(CM_Get_Device_ID_List)\nCMAPI CONFIGRET WINAPI CM_Get_Device_ID_List_ExA(PCSTR,PCHAR,ULONG,ULONG,HMACHINE);\nCMAPI CONFIGRET WINAPI CM_Get_Device_ID_List_ExW(PCWSTR,PWCHAR,ULONG,ULONG,HMACHINE);\n#define     CM_Get_Device_ID_List_Ex WINELIB_NAME_AW(CM_Get_Device_ID_List_Ex)\nCMAPI CONFIGRET WINAPI CM_Get_Device_ID_Size(PULONG,DEVINST,ULONG);\nCMAPI CONFIGRET WINAPI CM_Get_Device_ID_Size_Ex(PULONG,DEVINST,ULONG,HMACHINE);\nCMAPI CONFIGRET WINAPI CM_Get_Sibling_Ex(PDEVINST pdnDevInst, DEVINST DevInst, ULONG ulFlags, HMACHINE hMachine);\nCMAPI WORD      WINAPI CM_Get_Version(void);\nCMAPI CONFIGRET WINAPI CM_Locate_DevNodeA(PDEVINST,DEVINSTID_A,ULONG);\nCMAPI CONFIGRET WINAPI CM_Locate_DevNodeW(PDEVINST,DEVINSTID_W,ULONG);\n#define     CM_Locate_DevNode WINELIB_NAME_AW(CM_Locate_DevNode)\nCMAPI CONFIGRET WINAPI CM_Open_DevNode_Key(DEVINST dnDevInst, REGSAM access, ULONG ulHardwareProfile,\n                                           REGDISPOSITION disposition, PHKEY phkDevice, ULONG ulFlags);\n\n#ifdef __cplusplus\n}\n#endif\n\n#undef DECL_WINELIB_CFGMGR32_TYPE_AW\n\n#endif /* _CFGMGR32_H_ */\n"
  },
  {
    "path": "wine/windows/cguid.h",
    "content": "/*\n * Copyright (C) 2000 Peter Hunnisett\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __CGUID_H__\n#define __CGUID_H__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nextern const IID GUID_NULL;\nextern const IID IID_IRpcChannel;\nextern const IID IID_IRpcStub;\nextern const IID IID_IStubManager;\nextern const IID IID_IRpcProxy;\nextern const IID IID_IProxyManager;\nextern const IID IID_IPSFactory;\nextern const IID IID_IInternalMoniker;\nextern const IID IID_IDfReserved1;\nextern const IID IID_IDfReserved2;\nextern const IID IID_IDfReserved3;\nextern const CLSID CLSID_StdMarshal;\nextern const CLSID CLSID_AggStdMarshal;\nextern const CLSID CLSID_StdAsyncActManager;\nextern const IID IID_IStub;\nextern const IID IID_IProxy;\nextern const IID IID_IEnumGeneric;\nextern const IID IID_IEnumHolder;\nextern const IID IID_IEnumCallback;\nextern const IID IID_IOleManager;\nextern const IID IID_IOlePresObj;\nextern const IID IID_IDebug;\nextern const IID IID_IDebugStream;\nextern const CLSID CLSID_PSGenObject;\nextern const CLSID CLSID_PSClientSite;\nextern const CLSID CLSID_PSClassObject;\nextern const CLSID CLSID_PSInPlaceActive;\nextern const CLSID CLSID_PSInPlaceFrame;\nextern const CLSID CLSID_PSDragDrop;\nextern const CLSID CLSID_PSBindCtx;\nextern const CLSID CLSID_PSEnumerators;\nextern const CLSID CLSID_StaticMetafile;\nextern const CLSID CLSID_StaticDib;\nextern const CLSID CID_CDfsVolume;\nextern const CLSID CLSID_DCOMAccessControl;\nextern const CLSID CLSID_StdGlobalInterfaceTable;\nextern const CLSID CLSID_ComBinding;\nextern const CLSID CLSID_StdEvent;\nextern const CLSID CLSID_ManualResetEvent;\nextern const CLSID CLSID_SynchronizeContainer;\nextern const CLSID CLSID_CCDFormKrnl;\nextern const CLSID CLSID_CCDPropertyPage;\nextern const CLSID CLSID_CCDFormDialog;\nextern const CLSID CLSID_CCDCommandButton;\nextern const CLSID CLSID_CCDComboBox;\nextern const CLSID CLSID_CCDTextBox;\nextern const CLSID CLSID_CCDCheckBox;\nextern const CLSID CLSID_CCDLabel;\nextern const CLSID CLSID_CCDOptionButton;\nextern const CLSID CLSID_CCDListBox;\nextern const CLSID CLSID_CCDScrollBar;\nextern const CLSID CLSID_CCDGroupBox;\nextern const CLSID CLSID_CCDGeneralPropertyPage;\nextern const CLSID CLSID_CCDGenericPropertyPage;\nextern const CLSID CLSID_CCDFontPropertyPage;\nextern const CLSID CLSID_CCDColorPropertyPage;\nextern const CLSID CLSID_CCDLabelPropertyPage;\nextern const CLSID CLSID_CCDCheckBoxPropertyPage;\nextern const CLSID CLSID_CCDTextBoxPropertyPage;\nextern const CLSID CLSID_CCDOptionButtonPropertyPage;\nextern const CLSID CLSID_CCDListBoxPropertyPage;\nextern const CLSID CLSID_CCDCommandButtonPropertyPage;\nextern const CLSID CLSID_CCDComboBoxPropertyPage;\nextern const CLSID CLSID_CCDScrollBarPropertyPage;\nextern const CLSID CLSID_CCDGroupBoxPropertyPage;\nextern const CLSID CLSID_CCDXObjectPropertyPage;\nextern const CLSID CLSID_CStdPropertyFrame;\nextern const CLSID CLSID_CFormPropertyPage;\nextern const CLSID CLSID_CGridPropertyPage;\nextern const CLSID CLSID_CWSJArticlePage;\nextern const CLSID CLSID_CSystemPage;\nextern const CLSID CLSID_IdentityUnmarshal;\nextern const CLSID CLSID_InProcFreeMarshaler;\nextern const CLSID CLSID_Picture_Metafile;\nextern const CLSID CLSID_Picture_EnhMetafile;\nextern const CLSID CLSID_Picture_Dib;\nextern const CLSID CLSID_GlobalOptions;\nextern const GUID GUID_TRISTATE;\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __CGUID_H__ */\n"
  },
  {
    "path": "wine/windows/chprst.idl",
    "content": "/*\n * Copyright (C) 2013 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    object,\n    uuid(0c733a93-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface IChapteredRowset : IUnknown\n{\n    [local]\n    HRESULT AddRefChapter([in] HCHAPTER chapter,\n                          [out] DBREFCOUNT *refcount);\n\n    [call_as(AddRefChapter)]\n    HRESULT RemoteAddRefChapter([in] HCHAPTER chapter,\n                                [out] DBREFCOUNT *refcount,\n                                [out] IErrorInfo **errorinfo);\n\n    [local]\n    HRESULT ReleaseChapter([in] HCHAPTER chapter,\n                           [out] DBREFCOUNT *refcount);\n\n    [call_as(ReleaseChapter)]\n    HRESULT RemoteReleaseChapter([in] HCHAPTER chapter,\n                                 [out] DBREFCOUNT *refcount,\n                                 [out] IErrorInfo **errorinfo);\n}\n"
  },
  {
    "path": "wine/windows/cierror.h",
    "content": "/*\n * Copyright 2006 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_CIERROR_H__\n#define __WINE_CIERROR_H__\n\n#define CI_E_ALREADY_INITIALIZED       0x8004180a\n#define CI_E_NOT_INITIALIZED           0x8004180b\n#define CI_E_BUFFERTOOSMALL            0x8004180c\n#define CI_E_PROPERTY_NOT_CACHED       0x8004180d\n#define CI_E_INVALID_STATE             0x8004180f\n#define CI_E_FILTERING_DISABLED        0x80041810\n#define CI_E_DISK_FULL                 0x80041811\n#define CI_E_SHUTDOWN                  0x80041812\n#define CI_E_WORKID_NOTVALID           0x80041813\n#define CI_E_NOT_FOUND                 0x80041815\n#define CI_E_USE_DEFAULT_PID           0x80041816\n#define CI_E_DUPLICATE_NOTIFICATION    0x80041817\n#define CI_E_UPDATES_DISABLED          0x80041818\n#define CI_E_INVALID_FLAGS_COMBINATION 0x80041819\n#define CI_E_OUTOFSEQ_INCREMENT_DATA   0x8004181a\n#define CI_E_SHARING_VIOLATION         0x8004181b\n#define CI_E_LOGON_FAILURE             0x8004181c\n#define CI_E_NO_CATALOG                0x8004181d\n#define CI_E_STRANGE_PAGEORSECTOR_SIZE 0x8004181e\n#define CI_E_TIMEOUT                   0x8004181f\n#define CI_E_NOT_RUNNING               0x80041820\n\n#endif\n"
  },
  {
    "path": "wine/windows/clusapi.h",
    "content": "/*\n * Copyright 2006 James Hawkins\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_CLUSAPI_H\n#define __WINE_CLUSAPI_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct _HCLUSTER *HCLUSTER;\ntypedef struct _HCLUSENUM *HCLUSENUM;\n\n\ntypedef struct _CLUSTERVERSIONINFO\n{\n    DWORD   dwVersionInfoSize;\n    WORD    MajorVersion;\n    WORD    MinorVersion;\n    WORD    BuildNumber;\n    WCHAR   szVendorId[64];\n    WCHAR   szCSDVersion[64];\n    DWORD   dwClusterHighestVersion;\n    DWORD   dwClusterLowestVersion;\n    DWORD   dwFlags;\n    DWORD   dwReserved;\n} CLUSTERVERSIONINFO, *LPCLUSTERVERSIONINFO;\n\nBOOL WINAPI CloseCluster(HCLUSTER hCluster);\nDWORD WINAPI GetClusterInformation(HCLUSTER hCluster, LPWSTR lpszClusterName,\n                                   LPDWORD lpcchClusterName, LPCLUSTERVERSIONINFO lpClusterInfo);\nDWORD WINAPI GetNodeClusterState(LPCWSTR lpszNodeName, LPDWORD pdwClusterState);\nHCLUSTER WINAPI OpenCluster(LPCWSTR lpszClusterName);\nHCLUSENUM WINAPI ClusterOpenEnum(HCLUSTER hCluster, DWORD dwType);\nDWORD WINAPI ClusterEnum(HCLUSENUM hEnum, DWORD dwIndex, LPDWORD lpdwType, LPWSTR lpszName, LPDWORD lpcchName);\nDWORD WINAPI ClusterCloseEnum(HCLUSENUM hEnum);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_CLUSAPI_H */\n"
  },
  {
    "path": "wine/windows/cmdbas.idl",
    "content": "/*\n * Copyright (C) 2009 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    object,\n    uuid(0c733a63-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface ICommand : IUnknown\n{\n    [local]\n    HRESULT Cancel();\n\n    [call_as(Cancel)]\n    HRESULT RemoteCancel([out] IErrorInfo **ppErrorInfoRem);\n\n    [local]\n    HRESULT Execute([in, annotation(\"__in_opt\")] IUnknown *pUnkOuter,\n                    [in] REFIID riid,\n                    [in, out, annotation(\"__inout_opt\")] DBPARAMS *pParams,\n                    [out, annotation(\"__out_opt\")] DBROWCOUNT *pcRowsAffected,\n                    [out, iid_is(riid), annotation(\"__deref_opt_out\")] IUnknown **ppRowset);\n\n    [call_as(Execute)]\n    HRESULT RemoteExecute([in] IUnknown *pUnkOuter,\n                          [in] REFIID riid,\n                          [in] HACCESSOR hAccessor,\n                          [in] DB_UPARAMS cParamSets,\n                          [in, unique] GUID *pGuid,\n                          [in] ULONG ulGuidOffset,\n                          [in, unique] RMTPACK *pInputParams,\n                          [in, out, unique] RMTPACK *pOutputParams,\n                          [in] DBCOUNTITEM cBindings,\n                          [in, unique, size_is((ULONG)cBindings)] DBBINDING *rgBindings,\n                          [in, out, unique, size_is((ULONG)cBindings)] DBSTATUS *rgStatus,\n                          [in, out, unique] DBROWCOUNT *pcRowsAffected,\n                          [in, out, unique, iid_is(riid)] IUnknown **ppRowset);\n\n    [local]\n    HRESULT GetDBSession([in] REFIID riid,\n                         [out, iid_is(riid), annotation(\"__deref_out_opt\")] IUnknown **ppSession);\n\n    [call_as(GetDBSession)]\n    HRESULT RemoteGetDBSession([in] REFIID riid,\n                               [out, iid_is(riid)] IUnknown **ppSession,\n                               [out] IErrorInfo **ppErrorInfoRem);\n}\n"
  },
  {
    "path": "wine/windows/cmdtxt.idl",
    "content": "/*\n * Copyright (C) 2009 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    object,\n    uuid(0c733a27-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface ICommandText : ICommand\n{\n    [local]\n    HRESULT GetCommandText([in, out /*, annotation(\"__inout_opt\")*/] GUID *pguidDialect,\n                           [out /*, annotation(\"__deref_out\")*/] LPOLESTR *ppwszCommand);\n\n    [call_as(GetCommandText)]\n    HRESULT RemoteGetCommandText([in, out, unique] GUID *pguidDialect,\n                                 [out] LPOLESTR *ppwszCommand,\n                                 [out] IErrorInfo **ppErrorInfoRem);\n\n    [local]\n    HRESULT SetCommandText([in] REFGUID rguidDialect,\n                           [in, unique /*, annotation(\"__in_z_opt\")*/] LPCOLESTR pwszCommand);\n\n    [call_as(SetCommandText)]\n    HRESULT RemoteSetCommandText([in] REFGUID rguidDialect,\n                                 [in, unique] LPCOLESTR pwszCommand,\n                                 [out] IErrorInfo **ppErrorInfoRem);\n\n}\n"
  },
  {
    "path": "wine/windows/cmnquery.idl",
    "content": "/*\n * Copyright 2017 Zebediah Figura for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\n\n#ifndef __WIDL__\n#define threading(model)\n#define progid(str)\n#define vi_progid(str)\n#endif\n\n[\n    object,\n    uuid(1a3114b8-a62e-11d0-a6c5-00a0c906af45),\n    local\n]\ninterface IPersistQuery : IPersist\n{\n    HRESULT WriteString([in] LPCWSTR section, [in] LPCWSTR name, [in] LPCWSTR value);\n\n    HRESULT ReadString([in] LPCWSTR section, [in] LPCWSTR name, [out, size_is(buflen)] LPWSTR buffer, [in] INT buflen);\n\n    HRESULT WriteInt([in] LPCWSTR section, [in] LPCWSTR name, [in] INT value);\n\n    HRESULT ReadInt([in] LPCWSTR section, [in] LPCWSTR name, [out] INT *value);\n\n    HRESULT WriteStruct([in] LPCWSTR section, [in] LPCWSTR name, [in] LPVOID value, [in] DWORD size);\n\n    HRESULT ReadStruct([in] LPCWSTR section, [in] LPCWSTR name, [out, size_is(buflen)] LPVOID buffer, [in] DWORD buflen);\n\n    HRESULT Clear();\n}\n\ncpp_quote(\"#define OQWF_OKCANCEL            0x00000001\")\ncpp_quote(\"#define OQWF_DEFAULTFORM         0x00000002\")\ncpp_quote(\"#define OQWF_SINGLESELECT        0x00000004\")\ncpp_quote(\"#define OQWF_LOADQUERY           0x00000008\")\ncpp_quote(\"#define OQWF_REMOVESCOPES        0x00000010\")\ncpp_quote(\"#define OQWF_REMOVEFORMS         0x00000020\")\ncpp_quote(\"#define OQWF_ISSUEONOPEN         0x00000040\")\ncpp_quote(\"#define OQWF_SHOWOPTIONAL        0x00000080\")\ncpp_quote(\"#define OQWF_SAVEQUERYONOK       0x00000200\")\ncpp_quote(\"#define OQWF_HIDEMENUS           0x00000400\")\ncpp_quote(\"#define OQWF_HIDESEARCHUI        0x00000800\")\ncpp_quote(\"#define OQWF_PARAMISPROPERTYBAG  0x80000000\")\n\ntypedef struct {\n  DWORD         cbStruct;\n  DWORD         dwFlags;\n  CLSID         clsidHandler;\n  LPVOID        pHandlerParameters;\n  CLSID         clsidDefaultForm;\n  IPersistQuery *pPersistQuery;\n  union {\n    void         *pFormParameters;\n    IPropertyBag *ppbFormParameters;\n  };\n} OPENQUERYWINDOW, *LPOPENQUERYWINDOW;\n\n[\n    object,\n    uuid(ab50dec0-6f1d-11d0-a1c4-00aa00c16e65),\n    local\n]\ninterface ICommonQuery : IUnknown\n{\n    HRESULT OpenQueryWindow([in] HWND parent, [in] LPOPENQUERYWINDOW query_window, [out] IDataObject **data_object);\n}\n\n[\n    threading(apartment),\n    uuid(83bc5ec0-6f2a-11d0-a1c4-00aa00c16e65)\n]\ncoclass CommonQuery { interface ICommonQuery; }\n"
  },
  {
    "path": "wine/windows/colinf.idl",
    "content": "/*\n * Copyright (C) 2016 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    object,\n    uuid(0c733a11-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface IColumnsInfo : IUnknown\n{\n    [local]\n    HRESULT GetColumnInfo(\n        [in, out] DBORDINAL *columns,\n        [out, size_is(,(ULONG)*columns)] DBCOLUMNINFO **colinfo,\n        [out] OLECHAR **stringsbuffer);\n\n    [call_as(GetColumnInfo)]\n    HRESULT RemoteGetColumnInfo([in, out] DBORDINAL *columns,\n        [out, size_is(,(ULONG)*columns)] DBCOLUMNINFO **colinfo,\n        [out, size_is(,(ULONG)*columns)] DBBYTEOFFSET **name_offsets,\n        [out, size_is(,(ULONG)*columns)] DBBYTEOFFSET **columnid_offsets,\n        [in, out] DBLENGTH *string_len,\n        [in, out, unique, size_is(,(ULONG)*string_len)] OLECHAR **stringsbuffer,\n        [out] IErrorInfo **errorinfo);\n\n    [local]\n    HRESULT MapColumnIDs(\n        [in] DBORDINAL column_ids,\n        [in, size_is((ULONG)column_ids)] const DBID *dbids,\n        [out, size_is((ULONG)column_ids)] DBORDINAL *columns);\n\n    [call_as(MapColumnIDs)]\n    HRESULT RemoteMapColumnIDs(\n        [in] DBORDINAL column_ids,\n        [in, size_is((ULONG)column_ids)] const DBID *dbids,\n        [out, size_is((ULONG)column_ids)] DBORDINAL *columns,\n        [out] IErrorInfo **errorinfo);\n}\n"
  },
  {
    "path": "wine/windows/comcat.idl",
    "content": "/*\n * Copyright 2002 John K. Hohm\n * Copyright 2003 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"unknwn.idl\";\n#endif\n\n/*****************************************************************************\n * Types\n */\ntypedef GUID CATID;\ntypedef REFGUID REFCATID;\ncpp_quote(\"#define CATID_NULL GUID_NULL\")\ncpp_quote(\"#define IsEqualCATID(rcatid1, rcatid2) IsEqualGUID(rcatid1, rcatid2)\")\n\n/*****************************************************************************\n * Aliases for EnumGUID\n */\n#define IEnumCATID IEnumGUID\ncpp_quote(\"#define IEnumCATID IEnumGUID\")\ncpp_quote(\"#define IID_IEnumCATID IID_IEnumGUID\")\ncpp_quote(\"#define LPENUMCATID LPENUMGUID\")\n#define IEnumCLSID IEnumGUID\ncpp_quote(\"#define IEnumCLSID IEnumGUID\")\ncpp_quote(\"#define IID_IEnumCLSID IID_IEnumGUID\")\ncpp_quote(\"#define LPENUMCLSID LPENUMGUID\")\n\n\n/*****************************************************************************\n * IEnumGUID\n */\n[\n    object,\n    uuid(0002e000-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IEnumGUID : IUnknown\n{\n    typedef [unique] IEnumGUID *LPENUMGUID;\n\n    HRESULT Next(\n        [in] ULONG celt,\n        [out, size_is(celt), length_is(*pceltFetched)] GUID *rgelt,\n        [out] ULONG *pceltFetched);\n\n    HRESULT Skip(\n        [in] ULONG celt);\n\n    HRESULT Reset();\n\n    HRESULT Clone(\n        [out] IEnumGUID **ppenum);\n}\n\n\n/*****************************************************************************\n * IEnumCATEGORYINFO\n */\n[\n    object,\n    uuid(0002e011-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IEnumCATEGORYINFO : IUnknown\n{\n    typedef [unique] IEnumCATEGORYINFO *LPENUMCATEGORYINFO;\n\n    typedef struct tagCATEGORYINFO\n    {\n        CATID   catid;              /* category identifier for component */\n        LCID    lcid;               /* locale identifier */\n        OLECHAR szDescription[128]; /* description of the category */\n    } CATEGORYINFO, *LPCATEGORYINFO;\n\n    HRESULT Next(\n        [in] ULONG celt,\n        [out, size_is(celt), length_is(*pceltFetched)] CATEGORYINFO* rgelt,\n        [out] ULONG* pceltFetched);\n\n    HRESULT Skip(\n        [in] ULONG celt);\n\n    HRESULT Reset();\n\n    HRESULT Clone(\n        [out] IEnumCATEGORYINFO** ppenum);\n}\n\n\n/*****************************************************************************\n * ICatInformation\n */\n[\n    object,\n    uuid(0002e013-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface ICatInformation : IUnknown\n{\n    typedef [unique] ICatInformation* LPCATINFORMATION;\n\n    HRESULT EnumCategories(\n        [in] LCID lcid,\n        [out] IEnumCATEGORYINFO** ppenumCategoryInfo);\n\n    HRESULT GetCategoryDesc(\n        [in] REFCATID rcatid,\n        [in] LCID lcid,\n        [out] LPWSTR* pszDesc);\n\n    [local]\n    HRESULT EnumClassesOfCategories(\n        [in] ULONG cImplemented,\n        [in,size_is(cImplemented)] CATID rgcatidImpl[],\n        [in] ULONG cRequired,\n        [in,size_is(cRequired)] CATID rgcatidReq[],\n        [out] IEnumCLSID** ppenumClsid);\n\n    [call_as(EnumClassesOfCategories)]\n    HRESULT RemoteEnumClassesOfCategories(\n        [in] ULONG cImplemented,\n        [in,unique,size_is(cImplemented)] CATID rgcatidImpl[],\n        [in] ULONG cRequired,\n        [in,unique,size_is(cRequired)] CATID rgcatidReq[],\n        [out] IEnumCLSID** ppenumClsid);\n\n    [local]\n    HRESULT IsClassOfCategories(\n        [in] REFCLSID rclsid,\n        [in] ULONG cImplemented,\n        [in,size_is(cImplemented)] CATID rgcatidImpl[],\n        [in] ULONG cRequired,\n        [in,size_is(cRequired)] CATID rgcatidReq[]);\n\n    [call_as(IsClassOfCategories)]\n    HRESULT RemoteIsClassOfCategories(\n        [in] REFCLSID rclsid,\n        [in] ULONG cImplemented,\n        [in,unique,size_is(cImplemented)] CATID rgcatidImpl[],\n        [in] ULONG cRequired,\n        [in,unique,size_is(cRequired)] CATID rgcatidReq[] );\n\n    HRESULT EnumImplCategoriesOfClass(\n        [in] REFCLSID rclsid,\n        [out] IEnumCATID** ppenumCatid);\n\n    HRESULT EnumReqCategoriesOfClass(\n        [in] REFCLSID rclsid,\n        [out] IEnumCATID** ppenumCatid);\n}\n\n\n/*****************************************************************************\n * ICatRegister\n */\n[\n    object,\n    uuid(0002e012-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface ICatRegister : IUnknown\n{\n    typedef [unique] ICatRegister* LPCATREGISTER;\n\n    HRESULT RegisterCategories(\n        [in] ULONG cCategories,\n        [in, size_is(cCategories)] CATEGORYINFO rgCategoryInfo[]);\n\n    HRESULT UnRegisterCategories(\n        [in] ULONG cCategories,\n        [in, size_is(cCategories)] CATID rgcatid[]);\n\n    HRESULT RegisterClassImplCategories(\n        [in] REFCLSID rclsid,\n        [in] ULONG cCategories,\n        [in, size_is(cCategories)] CATID rgcatid[]);\n\n    HRESULT UnRegisterClassImplCategories(\n        [in] REFCLSID rclsid,\n        [in] ULONG cCategories,\n        [in, size_is(cCategories)] CATID rgcatid[]);\n\n    HRESULT RegisterClassReqCategories(\n        [in] REFCLSID rclsid,\n        [in] ULONG cCategories,\n        [in, size_is(cCategories)] CATID rgcatid[]);\n\n    HRESULT UnRegisterClassReqCategories(\n        [in] REFCLSID rclsid,\n        [in] ULONG cCategories,\n        [in, size_is(cCategories)] CATID rgcatid[]);\n}\n\n\n/*****************************************************************************\n * Category IDs\n */\ncpp_quote(\"DEFINE_GUID( CATID_Insertable, 0x40fc6ed3, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);\")\ncpp_quote(\"DEFINE_GUID( CATID_Control, 0x40fc6ed4, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);\")\ncpp_quote(\"DEFINE_GUID( CATID_Programmable, 0x40fc6ed5, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);\")\ncpp_quote(\"DEFINE_GUID( CATID_IsShortcut, 0x40fc6ed6, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);\")\ncpp_quote(\"DEFINE_GUID( CATID_NeverShowExt, 0x40fc6ed7, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);\")\ncpp_quote(\"DEFINE_GUID( CATID_DocObject, 0x40fc6ed8, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);\")\ncpp_quote(\"DEFINE_GUID( CATID_Printable, 0x40fc6ed9, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);\")\ncpp_quote(\"DEFINE_GUID( CATID_RequiresDataPathHost, 0x0de86a50, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);\")\ncpp_quote(\"DEFINE_GUID( CATID_PersistsToMoniker, 0x0de86a51, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);\")\ncpp_quote(\"DEFINE_GUID( CATID_PersistsToStorage, 0x0de86a52, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);\")\ncpp_quote(\"DEFINE_GUID( CATID_PersistsToStreamInit, 0x0de86a53, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);\")\ncpp_quote(\"DEFINE_GUID( CATID_PersistsToStream, 0x0de86a54, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);\")\ncpp_quote(\"DEFINE_GUID( CATID_PersistsToMemory, 0x0de86a55, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);\")\ncpp_quote(\"DEFINE_GUID( CATID_PersistsToFile, 0x0de86a56, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);\")\ncpp_quote(\"DEFINE_GUID( CATID_PersistsToPropertyBag, 0x0de86a57, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);\")\ncpp_quote(\"DEFINE_GUID( CATID_InternetAware, 0x0de86a58, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);\")\ncpp_quote(\"DEFINE_GUID( CATID_DesignTimeUIActivatableControl, 0xf2bb56d1, 0xdb07, 0x11d1, 0xaa, 0x6b, 0x00, 0x60, 0x97, 0xdb, 0x95, 0x39);\")\n/* The Component Category Manager */\ncpp_quote(\"DEFINE_GUID(CLSID_StdComponentCategoriesMgr, 0x0002e005, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);\")\n"
  },
  {
    "path": "wine/windows/commctrl.h",
    "content": "/*\n * Common controls definitions\n *\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_COMMCTRL_H\n#define __WINE_COMMCTRL_H\n\n#include <prsht.h>\n#include <commctrl.rh>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nBOOL WINAPI ShowHideMenuCtl (HWND, UINT_PTR, LPINT);\nVOID WINAPI GetEffectiveClientRect (HWND, LPRECT, const INT*);\nVOID WINAPI InitCommonControls (VOID);\n\ntypedef struct tagINITCOMMONCONTROLSEX {\n    DWORD dwSize;\n    DWORD dwICC;\n} INITCOMMONCONTROLSEX, *LPINITCOMMONCONTROLSEX;\n\nBOOL WINAPI InitCommonControlsEx (const INITCOMMONCONTROLSEX*);\n\nLANGID WINAPI GetMUILanguage (VOID);\nVOID WINAPI InitMUILanguage (LANGID uiLang);\n\nenum _LI_METRIC\n{\n    LIM_SMALL,\n    LIM_LARGE\n};\n\nHRESULT WINAPI LoadIconWithScaleDown(HINSTANCE, const WCHAR *, int, int, HICON *);\nHRESULT WINAPI LoadIconMetric(HINSTANCE, const WCHAR *, int, HICON *);\n\n#define COMCTL32_VERSION                5  /* dll version */\n\n#ifndef _WIN32_IE\n#define _WIN32_IE 0x0400\n#endif\n\n#define ICC_LISTVIEW_CLASSES   0x00000001  /* listview, header */\n#define ICC_TREEVIEW_CLASSES   0x00000002  /* treeview, tooltips */\n#define ICC_BAR_CLASSES        0x00000004  /* toolbar, statusbar, trackbar, tooltips */\n#define ICC_TAB_CLASSES        0x00000008  /* tab, tooltips */\n#define ICC_UPDOWN_CLASS       0x00000010  /* updown */\n#define ICC_PROGRESS_CLASS     0x00000020  /* progress */\n#define ICC_HOTKEY_CLASS       0x00000040  /* hotkey */\n#define ICC_ANIMATE_CLASS      0x00000080  /* animate */\n#define ICC_WIN95_CLASSES      0x000000FF\n#define ICC_DATE_CLASSES       0x00000100  /* month picker, date picker, time picker, updown */\n#define ICC_USEREX_CLASSES     0x00000200  /* comboex */\n#define ICC_COOL_CLASSES       0x00000400  /* rebar (coolbar) */\n#define ICC_INTERNET_CLASSES   0x00000800  /* IP address, ... */\n#define ICC_PAGESCROLLER_CLASS 0x00001000  /* page scroller */\n#define ICC_NATIVEFNTCTL_CLASS 0x00002000  /* native font control ???*/\n#define ICC_STANDARD_CLASSES   0x00004000\n#define ICC_LINK_CLASS         0x00008000\n\n\n/* common control shared messages */\n#define CCM_FIRST            0x2000\n\n#define CCM_SETBKCOLOR       (CCM_FIRST+0x1)     /* lParam = bkColor */\n#define CCM_SETCOLORSCHEME   (CCM_FIRST+0x2)     /* lParam = COLORSCHEME struct ptr */\n#define CCM_GETCOLORSCHEME   (CCM_FIRST+0x3)     /* lParam = COLORSCHEME struct ptr */\n#define CCM_GETDROPTARGET    (CCM_FIRST+0x4)\n#define CCM_SETUNICODEFORMAT (CCM_FIRST+0x5)\n#define CCM_GETUNICODEFORMAT (CCM_FIRST+0x6)\n#define CCM_SETVERSION       (CCM_FIRST+0x7)\n#define CCM_GETVERSION       (CCM_FIRST+0x8)\n#define CCM_SETNOTIFYWINDOW  (CCM_FIRST+0x9)     /* wParam = hwndParent */\n#define CCM_SETWINDOWTHEME   (CCM_FIRST+0xb)\n#define CCM_DPISCALE         (CCM_FIRST+0xc)\n\n\n/* common notification codes (WM_NOTIFY)*/\n#define NM_FIRST                (0U-  0U)\n#define NM_LAST                 (0U- 99U)\n#define NM_OUTOFMEMORY          (NM_FIRST-1)\n#define NM_CLICK                (NM_FIRST-2)\n#define NM_DBLCLK               (NM_FIRST-3)\n#define NM_RETURN               (NM_FIRST-4)\n#define NM_RCLICK               (NM_FIRST-5)\n#define NM_RDBLCLK              (NM_FIRST-6)\n#define NM_SETFOCUS             (NM_FIRST-7)\n#define NM_KILLFOCUS            (NM_FIRST-8)\n#define NM_CUSTOMDRAW           (NM_FIRST-12)\n#define NM_HOVER                (NM_FIRST-13)\n#define NM_NCHITTEST            (NM_FIRST-14)\n#define NM_KEYDOWN              (NM_FIRST-15)\n#define NM_RELEASEDCAPTURE      (NM_FIRST-16)\n#define NM_SETCURSOR            (NM_FIRST-17)\n#define NM_CHAR                 (NM_FIRST-18)\n#define NM_TOOLTIPSCREATED      (NM_FIRST-19)\n#define NM_LDOWN                (NM_FIRST-20)\n#define NM_RDOWN                (NM_FIRST-21)\n#define NM_THEMECHANGED         (NM_FIRST-22)\n#define NM_FONTCHANGED          (NM_FIRST-23)\n#define NM_CUSTOMTEXT           (NM_FIRST-24)\n#define NM_TVSTATEIMAGECHANGING (NM_FIRST-24)\n\n#define HANDLE_WM_NOTIFY(hwnd, wParam, lParam, fn) \\\n    (fn)((hwnd), (int)(wParam), (NMHDR*)(lParam))\n#define FORWARD_WM_NOTIFY(hwnd, idFrom, pnmhdr, fn) \\\n    (LRESULT)(fn)((hwnd), WM_NOTIFY, (WPARAM)(int)(idFrom), (LPARAM)(NMHDR*)(pnmhdr))\n\n\n/* callback constants */\n#define LPSTR_TEXTCALLBACKA    ((LPSTR)-1)\n#define LPSTR_TEXTCALLBACKW    ((LPWSTR)-1)\n#define LPSTR_TEXTCALLBACK WINELIB_NAME_AW(LPSTR_TEXTCALLBACK)\n\n#define I_IMAGECALLBACK          (-1)\n#define I_IMAGENONE              (-2)\n#define I_INDENTCALLBACK         (-1)\n#define I_CHILDRENCALLBACK       (-1)\n#define I_GROUPIDCALLBACK        (-1)\n#define I_GROUPIDNONE            (-2)\n#define I_COLUMNSCALLBACK        ((UINT)-1)\n\n/* owner drawn types */\n#define ODT_HEADER      100\n#define ODT_TAB         101\n#define ODT_LISTVIEW    102\n\n/* common notification structures */\ntypedef struct tagNMTOOLTIPSCREATED\n{\n    NMHDR  hdr;\n    HWND hwndToolTips;\n} NMTOOLTIPSCREATED, *LPNMTOOLTIPSCREATED;\n\ntypedef struct tagNMMOUSE\n{\n    NMHDR   hdr;\n    DWORD_PTR   dwItemSpec;\n    DWORD_PTR   dwItemData;\n    POINT   pt;\n    DWORD   dwHitInfo;   /* info where on item or control the mouse is */\n} NMMOUSE, *LPNMMOUSE;\n\ntypedef struct tagNMOBJECTNOTIFY\n{\n    NMHDR   hdr;\n    int     iItem;\n#ifdef __IID_DEFINED__\n    const IID *piid;\n#else\n    const void *piid;\n#endif\n    void    *pObject;\n    HRESULT hResult;\n    DWORD   dwFlags;\n} NMOBJECTNOTIFY, *LPNMOBJECTNOTIFY;\n\ntypedef struct tagNMKEY\n{\n    NMHDR   hdr;\n    UINT    nVKey;\n    UINT    uFlags;\n} NMKEY, *LPNMKEY;\n\ntypedef struct tagNMCHAR\n{\n    NMHDR   hdr;\n    UINT    ch;\n    DWORD   dwItemPrev;           /* Item previously selected */\n    DWORD   dwItemNext;           /* Item to be selected */\n} NMCHAR, *LPNMCHAR;\n\n#ifndef CCSIZEOF_STRUCT\n#define CCSIZEOF_STRUCT(name, member) \\\n    (((INT)((LPBYTE)(&((name*)0)->member)-((LPBYTE)((name*)0))))+ \\\n    sizeof(((name*)0)->member))\n#endif\n\n\n#ifndef SNDMSG\n#ifdef __cplusplus\n#define SNDMSG ::SendMessage\n#else   /* __cplusplus */\n#define SNDMSG SendMessage\n#endif  /* __cplusplus */\n#endif  /* SNDMSG */\n\n\n#ifdef __cplusplus\n#define SNDMSGA ::SendMessageA\n#define SNDMSGW ::SendMessageW\n#else\n#define SNDMSGA SendMessageA\n#define SNDMSGW SendMessageW\n#endif\n\n/* Custom Draw messages */\n\n#define CDRF_DODEFAULT          0x0\n#define CDRF_NEWFONT            0x00000002\n#define CDRF_SKIPDEFAULT        0x00000004\n#define CDRF_NOTIFYPOSTPAINT    0x00000010\n#define CDRF_NOTIFYITEMDRAW     0x00000020\n#define CDRF_NOTIFYSUBITEMDRAW  0x00000020\n#define CDRF_NOTIFYPOSTERASE    0x00000040\n#define CDRF_NOTIFYITEMERASE    0x00000080      /*  obsolete ??? */\n\n\n/* drawstage flags */\n\n#define CDDS_PREPAINT           1\n#define CDDS_POSTPAINT          2\n#define CDDS_PREERASE           3\n#define CDDS_POSTERASE          4\n\n#define CDDS_ITEM\t\t0x00010000\n#define CDDS_ITEMPREPAINT\t(CDDS_ITEM | CDDS_PREPAINT)\n#define CDDS_ITEMPOSTPAINT\t(CDDS_ITEM | CDDS_POSTPAINT)\n#define CDDS_ITEMPREERASE\t(CDDS_ITEM | CDDS_PREERASE)\n#define CDDS_ITEMPOSTERASE\t(CDDS_ITEM | CDDS_POSTERASE)\n#define CDDS_SUBITEM            0x00020000\n\n/* itemState flags */\n\n#define CDIS_SELECTED           0x0001\n#define CDIS_GRAYED             0x0002\n#define CDIS_DISABLED           0x0004\n#define CDIS_CHECKED            0x0008\n#define CDIS_FOCUS              0x0010\n#define CDIS_DEFAULT            0x0020\n#define CDIS_HOT                0x0040\n#define CDIS_MARKED             0x0080\n#define CDIS_INDETERMINATE      0x0100\n#define CDIS_SHOWKEYBOARDCUES   0x0200\n#define CDIS_NEARHOT            0x0400\n#define CDIS_OTHERSIDEHOT       0x0800\n#define CDIS_DROPHILITED        0x1000\n\n\ntypedef struct tagNMCUSTOMDRAWINFO\n{\n\tNMHDR\thdr;\n\tDWORD\tdwDrawStage;\n\tHDC\thdc;\n\tRECT\trc;\n\tDWORD_PTR dwItemSpec;\n\tUINT\tuItemState;\n\tLPARAM\tlItemlParam;\n} NMCUSTOMDRAW, *LPNMCUSTOMDRAW;\n\ntypedef struct tagNMTTCUSTOMDRAW\n{\n    NMCUSTOMDRAW nmcd;\n    UINT       uDrawFlags;\n} NMTTCUSTOMDRAW, *LPNMTTCUSTOMDRAW;\n\n\n\n\n/* StatusWindow */\n\n#define STATUSCLASSNAMEA\t\"msctls_statusbar32\"\n#if defined(__GNUC__)\n# define STATUSCLASSNAMEW (const WCHAR []){ 'm','s','c','t','l','s','_', \\\n  's','t','a','t','u','s','b','a','r','3','2',0 }\n#elif defined(_MSC_VER)\n# define STATUSCLASSNAMEW       L\"msctls_statusbar32\"\n#else\nstatic const WCHAR STATUSCLASSNAMEW[] = { 'm','s','c','t','l','s','_',\n  's','t','a','t','u','s','b','a','r','3','2',0 };\n#endif\n#define STATUSCLASSNAME\t\tWINELIB_NAME_AW(STATUSCLASSNAME)\n\n#define SBT_NOBORDERS\t\t0x0100\n#define SBT_POPOUT\t\t0x0200\n#define SBT_RTLREADING\t\t0x0400  /* not supported */\n#define SBT_OWNERDRAW\t\t0x1000\n\n#define SB_SIMPLEID\t\t0x00ff\n\n#define SB_SETTEXTA\t\t(WM_USER+1)\n#define SB_SETTEXTW\t\t(WM_USER+11)\n#define SB_SETTEXT\t\tWINELIB_NAME_AW(SB_SETTEXT)\n#define SB_GETTEXTA\t\t(WM_USER+2)\n#define SB_GETTEXTW\t\t(WM_USER+13)\n#define SB_GETTEXT\t\tWINELIB_NAME_AW(SB_GETTEXT)\n#define SB_GETTEXTLENGTHA\t(WM_USER+3)\n#define SB_GETTEXTLENGTHW\t(WM_USER+12)\n#define SB_GETTEXTLENGTH\tWINELIB_NAME_AW(SB_GETTEXTLENGTH)\n#define SB_SETPARTS\t\t(WM_USER+4)\n#define SB_SETBORDERS\t\t(WM_USER+5)\n#define SB_GETPARTS\t\t(WM_USER+6)\n#define SB_GETBORDERS\t\t(WM_USER+7)\n#define SB_SETMINHEIGHT\t\t(WM_USER+8)\n#define SB_SIMPLE\t\t(WM_USER+9)\n#define SB_GETRECT\t\t(WM_USER+10)\n#define SB_ISSIMPLE\t\t(WM_USER+14)\n#define SB_SETICON\t\t(WM_USER+15)\n#define SB_SETTIPTEXTA\t\t(WM_USER+16)\n#define SB_SETTIPTEXTW\t\t(WM_USER+17)\n#define SB_SETTIPTEXT\t\tWINELIB_NAME_AW(SB_SETTIPTEXT)\n#define SB_GETTIPTEXTA\t\t(WM_USER+18)\n#define SB_GETTIPTEXTW\t\t(WM_USER+19)\n#define SB_GETTIPTEXT\t\tWINELIB_NAME_AW(SB_GETTIPTEXT)\n#define SB_GETICON\t\t(WM_USER+20)\n#define SB_SETBKCOLOR\t\tCCM_SETBKCOLOR   /* lParam = bkColor */\n#define SB_GETUNICODEFORMAT\tCCM_GETUNICODEFORMAT\n#define SB_SETUNICODEFORMAT\tCCM_SETUNICODEFORMAT\n\n#define SBN_FIRST\t\t(0U-880U)\n#define SBN_LAST\t\t(0U-899U)\n#define SBN_SIMPLEMODECHANGE\t(SBN_FIRST-0)\n\nHWND WINAPI CreateStatusWindowA (LONG, LPCSTR, HWND, UINT);\nHWND WINAPI CreateStatusWindowW (LONG, LPCWSTR, HWND, UINT);\n#define CreateStatusWindow WINELIB_NAME_AW(CreateStatusWindow)\nVOID WINAPI DrawStatusTextA (HDC, LPCRECT, LPCSTR, UINT);\nVOID WINAPI DrawStatusTextW (HDC, LPCRECT, LPCWSTR, UINT);\n#define DrawStatusText WINELIB_NAME_AW(DrawStatusText)\nVOID WINAPI MenuHelp (UINT, WPARAM, LPARAM, HMENU,\n                      HINSTANCE, HWND, UINT*);\n\ntypedef struct tagCOLORSCHEME\n{\n   DWORD            dwSize;\n   COLORREF         clrBtnHighlight;       /* highlight color */\n   COLORREF         clrBtnShadow;          /* shadow color */\n} COLORSCHEME, *LPCOLORSCHEME;\n\n/**************************************************************************\n *  Drag List control\n */\n\ntypedef struct tagDRAGLISTINFO\n{\n    UINT  uNotification;\n    HWND  hWnd;\n    POINT ptCursor;\n} DRAGLISTINFO, *LPDRAGLISTINFO;\n\n#define DL_BEGINDRAG            (WM_USER+133)\n#define DL_DRAGGING             (WM_USER+134)\n#define DL_DROPPED              (WM_USER+135)\n#define DL_CANCELDRAG           (WM_USER+136)\n\n#define DL_CURSORSET            0\n#define DL_STOPCURSOR           1\n#define DL_COPYCURSOR           2\n#define DL_MOVECURSOR           3\n\n#define DRAGLISTMSGSTRINGA      \"commctrl_DragListMsg\"\n#if defined(__GNUC__)\n# define DRAGLISTMSGSTRINGW (const WCHAR []){ 'c','o','m','m','c','t','r','l', \\\n  '_','D','r','a','g','L','i','s','t','M','s','g',0 }\n#elif defined(_MSC_VER)\n# define DRAGLISTMSGSTRINGW     L\"commctrl_DragListMsg\"\n#else\nstatic const WCHAR DRAGLISTMSGSTRINGW[] = { 'c','o','m','m','c','t','r','l',\n  '_','D','r','a','g','L','i','s','t','M','s','g',0 };\n#endif\n#define DRAGLISTMSGSTRING       WINELIB_NAME_AW(DRAGLISTMSGSTRING)\n\nBOOL WINAPI MakeDragList (HWND);\nVOID   WINAPI DrawInsert (HWND, HWND, INT);\nINT  WINAPI LBItemFromPt (HWND, POINT, BOOL);\n\n\n/* UpDown */\n\n#define UPDOWN_CLASSA           \"msctls_updown32\"\n#if defined(__GNUC__)\n# define UPDOWN_CLASSW (const WCHAR []){ 'm','s','c','t','l','s','_', \\\n  'u','p','d','o','w','n','3','2',0 }\n#elif defined(_MSC_VER)\n# define UPDOWN_CLASSW          L\"msctls_updown32\"\n#else\nstatic const WCHAR UPDOWN_CLASSW[] = { 'm','s','c','t','l','s','_',\n  'u','p','d','o','w','n','3','2',0 };\n#endif\n#define UPDOWN_CLASS            WINELIB_NAME_AW(UPDOWN_CLASS)\n\ntypedef struct _UDACCEL\n{\n    UINT nSec;\n    UINT nInc;\n} UDACCEL, *LPUDACCEL;\n\n#define UD_MAXVAL          0x7fff\n#define UD_MINVAL          0x8001\n\n\n#define UDN_FIRST          (0U-721)\n#define UDN_LAST           (0U-740)\n#define UDN_DELTAPOS       (UDN_FIRST-1)\n\n#define UDM_SETRANGE       (WM_USER+101)\n#define UDM_GETRANGE       (WM_USER+102)\n#define UDM_SETPOS         (WM_USER+103)\n#define UDM_GETPOS         (WM_USER+104)\n#define UDM_SETBUDDY       (WM_USER+105)\n#define UDM_GETBUDDY       (WM_USER+106)\n#define UDM_SETACCEL       (WM_USER+107)\n#define UDM_GETACCEL       (WM_USER+108)\n#define UDM_SETBASE        (WM_USER+109)\n#define UDM_GETBASE        (WM_USER+110)\n#define UDM_SETRANGE32     (WM_USER+111)\n#define UDM_GETRANGE32     (WM_USER+112)\n#define UDM_SETUNICODEFORMAT    CCM_SETUNICODEFORMAT\n#define UDM_GETUNICODEFORMAT    CCM_GETUNICODEFORMAT\n#define UDM_SETPOS32       (WM_USER+113)\n#define UDM_GETPOS32       (WM_USER+114)\n\n\n#define NMUPDOWN    NM_UPDOWN\n#define LPNMUPDOWN  LPNM_UPDOWN\n\ntypedef struct tagNM_UPDOWN\n{\n  NMHDR hdr;\n  int iPos;\n  int iDelta;\n} NM_UPDOWN, *LPNM_UPDOWN;\n\nHWND WINAPI CreateUpDownControl (DWORD, INT, INT, INT, INT,\n                                   HWND, INT, HINSTANCE, HWND,\n                                   INT, INT, INT);\n\n/* Progress Bar */\n\n#define PROGRESS_CLASSA   \"msctls_progress32\"\n#if defined(__GNUC__)\n# define PROGRESS_CLASSW (const WCHAR []){ 'm','s','c','t','l','s','_', \\\n  'p','r','o','g','r','e','s','s','3','2',0 }\n#elif defined(_MSC_VER)\n# define PROGRESS_CLASSW  L\"msctls_progress32\"\n#else\nstatic const WCHAR PROGRESS_CLASSW[] = { 'm','s','c','t','l','s','_',\n  'p','r','o','g','r','e','s','s','3','2',0 };\n#endif\n#define PROGRESS_CLASS      WINELIB_NAME_AW(PROGRESS_CLASS)\n\n#define PBM_SETRANGE        (WM_USER+1)\n#define PBM_SETPOS          (WM_USER+2)\n#define PBM_DELTAPOS        (WM_USER+3)\n#define PBM_SETSTEP         (WM_USER+4)\n#define PBM_STEPIT          (WM_USER+5)\n#define PBM_SETRANGE32      (WM_USER+6)\n#define PBM_GETRANGE        (WM_USER+7)\n#define PBM_GETPOS          (WM_USER+8)\n#define PBM_SETBARCOLOR     (WM_USER+9)\n#define PBM_SETMARQUEE      (WM_USER+10)\n#define PBM_GETSTEP         (WM_USER+13)\n#define PBM_GETBKCOLOR      (WM_USER+14)\n#define PBM_GETBARCOLOR     (WM_USER+15)\n#define PBM_SETSTATE        (WM_USER+16)\n#define PBM_GETSTATE        (WM_USER+17)\n#define PBM_SETBKCOLOR      CCM_SETBKCOLOR\n\n\n#define PBST_NORMAL         1\n#define PBST_ERROR          2\n#define PBST_PAUSED         3\n\ntypedef struct\n{\n    INT iLow;\n    INT iHigh;\n} PBRANGE, *PPBRANGE;\n\n\n/* ImageList */\n\nstruct _IMAGELIST;\ntypedef struct _IMAGELIST *HIMAGELIST;\n\n#define CLR_NONE         0xFFFFFFFF\n#define CLR_DEFAULT      0xFF000000\n#define CLR_HILIGHT      CLR_DEFAULT\n\n#define ILC_MASK             0x00000001\n#define ILC_COLOR            0x00000000\n#define ILC_COLORDDB         0x000000fe\n#define ILC_COLOR4           0x00000004\n#define ILC_COLOR8           0x00000008\n#define ILC_COLOR16          0x00000010\n#define ILC_COLOR24          0x00000018\n#define ILC_COLOR32          0x00000020\n#define ILC_PALETTE          0x00000800  /* no longer supported by M$ */\n#define ILC_MIRROR           0x00002000\n#define ILC_PERITEMMIRROR    0x00008000\n#define ILC_ORIGINALSIZE     0x00010000\n#define ILC_HIGHQUALITYSCALE 0x00020000\n\n#define ILD_NORMAL        0x0000\n#define ILD_TRANSPARENT   0x0001\n#define ILD_BLEND25       0x0002\n#define ILD_BLEND50       0x0004\n#define ILD_MASK          0x0010\n#define ILD_IMAGE         0x0020\n#define ILD_ROP           0x0040\n#define ILD_OVERLAYMASK   0x0F00\n#define ILD_PRESERVEALPHA 0x1000\n#define ILD_SCALE         0x2000\n#define ILD_DPISCALE      0x4000\n#define ILD_ASYNC         0x8000\n\n#define ILD_SELECTED     ILD_BLEND50\n#define ILD_FOCUS        ILD_BLEND25\n#define ILD_BLEND        ILD_BLEND50\n\n#define INDEXTOOVERLAYMASK(i)  ((i)<<8)\n#define INDEXTOSTATEIMAGEMASK(i) ((i)<<12)\n\n#define ILCF_MOVE        (0x00000000)\n#define ILCF_SWAP        (0x00000001)\n\n#define ILGT_NORMAL     0x0000\n#define ILGT_ASYNC      0x0001\n\n#define ILS_NORMAL\t0x0000\n#define ILS_GLOW\t0x0001\n#define ILS_SHADOW\t0x0002\n#define ILS_SATURATE\t0x0004\n#define ILS_ALPHA\t0x0008\n\ntypedef struct _IMAGEINFO\n{\n    HBITMAP hbmImage;\n    HBITMAP hbmMask;\n    INT     Unused1;\n    INT     Unused2;\n    RECT    rcImage;\n} IMAGEINFO, *LPIMAGEINFO;\n\n\ntypedef struct _IMAGELISTDRAWPARAMS\n{\n    DWORD       cbSize;\n    HIMAGELIST  himl;\n    INT         i;\n    HDC         hdcDst;\n    INT         x;\n    INT         y;\n    INT         cx;\n    INT         cy;\n    INT         xBitmap;  /* x offset from the upperleft of bitmap */\n    INT         yBitmap;  /* y offset from the upperleft of bitmap */\n    COLORREF    rgbBk;\n    COLORREF    rgbFg;\n    UINT        fStyle;\n    DWORD       dwRop;\n    DWORD       fState;\n    DWORD       Frame;\n    COLORREF    crEffect;\n} IMAGELISTDRAWPARAMS, *LPIMAGELISTDRAWPARAMS;\n\n#define IMAGELISTDRAWPARAMS_V3_SIZE CCSIZEOF_STRUCT(IMAGELISTDRAWPARAMS, dwRop)\n\nHRESULT  WINAPI HIMAGELIST_QueryInterface(HIMAGELIST,REFIID,void **);\nINT      WINAPI ImageList_Add(HIMAGELIST,HBITMAP,HBITMAP);\nINT      WINAPI ImageList_AddMasked(HIMAGELIST,HBITMAP,COLORREF);\nBOOL     WINAPI ImageList_BeginDrag(HIMAGELIST,INT,INT,INT);\nBOOL     WINAPI ImageList_Copy(HIMAGELIST,INT,HIMAGELIST,INT,UINT);\nHIMAGELIST WINAPI ImageList_Create(INT,INT,UINT,INT,INT);\nBOOL     WINAPI ImageList_Destroy(HIMAGELIST);\nBOOL     WINAPI ImageList_DragEnter(HWND,INT,INT);\nBOOL     WINAPI ImageList_DragLeave(HWND);\nBOOL     WINAPI ImageList_DragMove(INT,INT);\nBOOL     WINAPI ImageList_DragShowNolock (BOOL);\nBOOL     WINAPI ImageList_Draw(HIMAGELIST,INT,HDC,INT,INT,UINT);\nBOOL     WINAPI ImageList_DrawEx(HIMAGELIST,INT,HDC,INT,INT,INT,\n                                   INT,COLORREF,COLORREF,UINT);\nBOOL     WINAPI ImageList_DrawIndirect(IMAGELISTDRAWPARAMS*);\nHIMAGELIST WINAPI ImageList_Duplicate(HIMAGELIST);\nVOID     WINAPI ImageList_EndDrag(VOID);\nCOLORREF   WINAPI ImageList_GetBkColor(HIMAGELIST);\nHIMAGELIST WINAPI ImageList_GetDragImage(POINT*,POINT*);\nHICON    WINAPI ImageList_GetIcon(HIMAGELIST,INT,UINT);\nBOOL     WINAPI ImageList_GetIconSize(HIMAGELIST,INT*,INT*);\nINT      WINAPI ImageList_GetImageCount(HIMAGELIST);\nBOOL     WINAPI ImageList_GetImageInfo(HIMAGELIST,INT,IMAGEINFO*);\nBOOL     WINAPI ImageList_GetImageRect(HIMAGELIST,INT,LPRECT);\nHIMAGELIST WINAPI ImageList_LoadImageA(HINSTANCE,LPCSTR,INT,INT,\n                                         COLORREF,UINT,UINT);\nHIMAGELIST WINAPI ImageList_LoadImageW(HINSTANCE,LPCWSTR,INT,INT,\n                                         COLORREF,UINT,UINT);\n#define    ImageList_LoadImage WINELIB_NAME_AW(ImageList_LoadImage)\nHIMAGELIST WINAPI ImageList_Merge(HIMAGELIST,INT,HIMAGELIST,INT,INT,INT);\nBOOL     WINAPI ImageList_Remove(HIMAGELIST,INT);\nBOOL     WINAPI ImageList_Replace(HIMAGELIST,INT,HBITMAP,HBITMAP);\nINT      WINAPI ImageList_ReplaceIcon(HIMAGELIST,INT,HICON);\nCOLORREF   WINAPI ImageList_SetBkColor(HIMAGELIST,COLORREF);\nBOOL     WINAPI ImageList_SetDragCursorImage(HIMAGELIST,INT,INT,INT);\n\nBOOL     WINAPI ImageList_SetIconSize(HIMAGELIST,INT,INT);\nBOOL     WINAPI ImageList_SetImageCount(HIMAGELIST,UINT);\nBOOL     WINAPI ImageList_SetOverlayImage(HIMAGELIST,INT,INT);\n\n#ifdef __IStream_INTERFACE_DEFINED__\nHIMAGELIST WINAPI ImageList_Read(LPSTREAM);\nBOOL     WINAPI ImageList_Write(HIMAGELIST, LPSTREAM);\n#endif\n\n#define ImageList_AddIcon(himl,hicon) ImageList_ReplaceIcon(himl,-1,hicon)\n#define ImageList_ExtractIcon(hi,himl,i) ImageList_GetIcon(himl,i,0)\n#define ImageList_LoadBitmap(hi,lpbmp,cx,cGrow,crMask) \\\n  ImageList_LoadImage(hi,lpbmp,cx,cGrow,crMask,IMAGE_BITMAP,0)\n#define ImageList_RemoveAll(himl) ImageList_Remove(himl,-1)\n\n\n#ifndef WM_MOUSEHOVER\n#define WM_MOUSEHOVER                   0x02A1\n#define WM_MOUSELEAVE                   0x02A3\n#endif\n\n#ifndef TME_HOVER\n\n#define TME_HOVER       0x00000001\n#define TME_LEAVE       0x00000002\n#define TME_NONCLIENT   0x00000010\n#define TME_QUERY       0x40000000\n#define TME_CANCEL      0x80000000\n\n\n#define HOVER_DEFAULT   0xFFFFFFFF\n\ntypedef struct tagTRACKMOUSEEVENT {\n    DWORD cbSize;\n    DWORD dwFlags;\n    HWND  hwndTrack;\n    DWORD dwHoverTime;\n} TRACKMOUSEEVENT, *LPTRACKMOUSEEVENT;\n\n#endif\n\nBOOL WINAPI _TrackMouseEvent(LPTRACKMOUSEEVENT lpEventTrack);\n\n/* Flat Scrollbar control */\n\n#define FLATSB_CLASSA         \"flatsb_class32\"\n#if defined(__GNUC__)\n# define FLATSB_CLASSW (const WCHAR []){ 'f','l','a','t','s','b','_', \\\n  'c','l','a','s','s','3','2',0 }\n#elif defined(_MSC_VER)\n# define FLATSB_CLASSW        L\"flatsb_class32\"\n#else\nstatic const WCHAR FLATSB_CLASSW[] = { 'f','l','a','t','s','b','_',\n  'c','l','a','s','s','3','2',0 };\n#endif\n#define FLATSB_CLASS          WINELIB_NAME_AW(FLATSB_CLASS)\n\n#define WSB_PROP_CYVSCROLL     __MSABI_LONG(0x00000001)\n#define WSB_PROP_CXHSCROLL     __MSABI_LONG(0x00000002)\n#define WSB_PROP_CYHSCROLL     __MSABI_LONG(0x00000004)\n#define WSB_PROP_CXVSCROLL     __MSABI_LONG(0x00000008)\n#define WSB_PROP_CXHTHUMB      __MSABI_LONG(0x00000010)\n#define WSB_PROP_CYVTHUMB      __MSABI_LONG(0x00000020)\n#define WSB_PROP_VBKGCOLOR     __MSABI_LONG(0x00000040)\n#define WSB_PROP_HBKGCOLOR     __MSABI_LONG(0x00000080)\n#define WSB_PROP_VSTYLE        __MSABI_LONG(0x00000100)\n#define WSB_PROP_HSTYLE        __MSABI_LONG(0x00000200)\n#define WSB_PROP_WINSTYLE      __MSABI_LONG(0x00000400)\n#define WSB_PROP_PALETTE       __MSABI_LONG(0x00000800)\n#define WSB_PROP_MASK          __MSABI_LONG(0x00000FFF)\n\n#define FSB_REGULAR_MODE       0\n#define FSB_ENCARTA_MODE       1\n#define FSB_FLAT_MODE          2\n\n\nBOOL  WINAPI FlatSB_EnableScrollBar(HWND, INT, UINT);\nBOOL  WINAPI FlatSB_ShowScrollBar(HWND, INT, BOOL);\nBOOL  WINAPI FlatSB_GetScrollRange(HWND, INT, LPINT, LPINT);\nBOOL  WINAPI FlatSB_GetScrollInfo(HWND, INT, LPSCROLLINFO);\nINT   WINAPI FlatSB_GetScrollPos(HWND, INT);\nBOOL  WINAPI FlatSB_GetScrollProp(HWND, INT, LPINT);\nINT   WINAPI FlatSB_SetScrollPos(HWND, INT, INT, BOOL);\nINT   WINAPI FlatSB_SetScrollInfo(HWND, INT, LPSCROLLINFO, BOOL);\nINT   WINAPI FlatSB_SetScrollRange(HWND, INT, INT, INT, BOOL);\nBOOL  WINAPI FlatSB_SetScrollProp(HWND, UINT, INT, BOOL);\nBOOL  WINAPI InitializeFlatSB(HWND);\nHRESULT WINAPI UninitializeFlatSB(HWND);\n\n/* Subclassing stuff */\ntypedef LRESULT (CALLBACK *SUBCLASSPROC)(HWND, UINT, WPARAM, LPARAM, UINT_PTR, DWORD_PTR);\nBOOL WINAPI SetWindowSubclass(HWND, SUBCLASSPROC, UINT_PTR, DWORD_PTR);\nBOOL WINAPI GetWindowSubclass(HWND, SUBCLASSPROC, UINT_PTR, DWORD_PTR*);\nBOOL WINAPI RemoveWindowSubclass(HWND, SUBCLASSPROC, UINT_PTR);\nLRESULT WINAPI DefSubclassProc(HWND, UINT, WPARAM, LPARAM);\n\nint WINAPI DrawShadowText(HDC, LPCWSTR, UINT, RECT*, DWORD, COLORREF, COLORREF, int, int);\n\n/* Header control */\n\n#define WC_HEADERA\t\t\"SysHeader32\"\n#if defined(__GNUC__)\n# define WC_HEADERW (const WCHAR []){ 'S','y','s','H','e','a','d','e','r','3','2',0 }\n#elif defined(_MSC_VER)\n# define WC_HEADERW             L\"SysHeader32\"\n#else\nstatic const WCHAR WC_HEADERW[] = { 'S','y','s','H','e','a','d','e','r','3','2',0 };\n#endif\n#define WC_HEADER\t\tWINELIB_NAME_AW(WC_HEADER)\n\n\n#define HDI_WIDTH               0x0001\n#define HDI_HEIGHT              HDI_WIDTH\n#define HDI_TEXT                0x0002\n#define HDI_FORMAT              0x0004\n#define HDI_LPARAM              0x0008\n#define HDI_BITMAP              0x0010\n#define HDI_IMAGE               0x0020\n#define HDI_DI_SETITEM          0x0040\n#define HDI_ORDER               0x0080\n#define HDI_FILTER              0x0100\n#define HDI_STATE               0x0200\n\n#define HDIS_FOCUSED        0x00000001\n\n#define HDF_LEFT                0x0000\n#define HDF_RIGHT               0x0001\n#define HDF_CENTER              0x0002\n#define HDF_JUSTIFYMASK         0x0003\n#define HDF_RTLREADING          0x0004\n#define HDF_CHECKBOX            0x0040\n#define HDF_CHECKED             0x0080\n#define HDF_FIXEDWIDTH          0x0100\n#define HDF_SORTDOWN            0x0200\n#define HDF_SORTUP              0x0400\n#define HDF_IMAGE               0x0800\n#define HDF_BITMAP_ON_RIGHT     0x1000\n#define HDF_BITMAP              0x2000\n#define HDF_STRING              0x4000\n#define HDF_OWNERDRAW           0x8000\n#define HDF_SPLITBUTTON      0x1000000\n\n#define HHT_NOWHERE             0x0001\n#define HHT_ONHEADER            0x0002\n#define HHT_ONDIVIDER           0x0004\n#define HHT_ONDIVOPEN           0x0008\n#define HHT_ONFILTER            0x0010\n#define HHT_ONFILTERBUTTON      0x0020\n#define HHT_ABOVE               0x0100\n#define HHT_BELOW               0x0200\n#define HHT_TORIGHT             0x0400\n#define HHT_TOLEFT              0x0800\n#define HHT_ONITEMSTATEICON     0x1000\n#define HHT_ONDROPDOWN          0x2000\n#define HHT_ONOVERFLOW          0x4000\n\n#define HDM_FIRST               0x1200\n#define HDM_GETITEMCOUNT        (HDM_FIRST+0)\n#define HDM_INSERTITEMA         (HDM_FIRST+1)\n#define HDM_INSERTITEMW         (HDM_FIRST+10)\n#define HDM_INSERTITEM\t\tWINELIB_NAME_AW(HDM_INSERTITEM)\n#define HDM_DELETEITEM          (HDM_FIRST+2)\n#define HDM_GETITEMA            (HDM_FIRST+3)\n#define HDM_GETITEMW            (HDM_FIRST+11)\n#define HDM_GETITEM\t\tWINELIB_NAME_AW(HDM_GETITEM)\n#define HDM_SETITEMA            (HDM_FIRST+4)\n#define HDM_SETITEMW            (HDM_FIRST+12)\n#define HDM_SETITEM\t\tWINELIB_NAME_AW(HDM_SETITEM)\n#define HDM_LAYOUT              (HDM_FIRST+5)\n#define HDM_HITTEST             (HDM_FIRST+6)\n#define HDM_GETITEMRECT         (HDM_FIRST+7)\n#define HDM_SETIMAGELIST        (HDM_FIRST+8)\n#define HDM_GETIMAGELIST        (HDM_FIRST+9)\n\n#define HDM_ORDERTOINDEX        (HDM_FIRST+15)\n#define HDM_CREATEDRAGIMAGE     (HDM_FIRST+16)\n#define HDM_GETORDERARRAY       (HDM_FIRST+17)\n#define HDM_SETORDERARRAY       (HDM_FIRST+18)\n#define HDM_SETHOTDIVIDER       (HDM_FIRST+19)\n#define HDM_SETBITMAPMARGIN     (HDM_FIRST+20)\n#define HDM_GETBITMAPMARGIN     (HDM_FIRST+21)\n#define HDM_SETFILTERCHANGETIMEOUT (HDM_FIRST+22)\n#define HDM_EDITFILTER          (HDM_FIRST+23)\n#define HDM_CLEARFILTER         (HDM_FIRST+24)\n#define HDM_GETITEMDROPDOWNRECT (HDM_FIRST+25)\n#define HDM_GETOVERFLOWRECT     (HDM_FIRST+26)\n#define HDM_GETFOCUSEDITEM      (HDM_FIRST+27)\n#define HDM_SETFOCUSEDITEM      (HDM_FIRST+28)\n#define HDM_GETUNICODEFORMAT    CCM_GETUNICODEFORMAT\n#define HDM_SETUNICODEFORMAT    CCM_SETUNICODEFORMAT\n\n#define HDN_FIRST               (0U-300U)\n#define HDN_LAST                (0U-399U)\n#define HDN_ITEMCHANGINGA       (HDN_FIRST-0)\n#define HDN_ITEMCHANGINGW       (HDN_FIRST-20)\n#define HDN_ITEMCHANGING        WINELIB_NAME_AW(HDN_ITEMCHANGING)\n#define HDN_ITEMCHANGEDA        (HDN_FIRST-1)\n#define HDN_ITEMCHANGEDW        (HDN_FIRST-21)\n#define HDN_ITEMCHANGED         WINELIB_NAME_AW(HDN_ITEMCHANGED)\n#define HDN_ITEMCLICKA          (HDN_FIRST-2)\n#define HDN_ITEMCLICKW          (HDN_FIRST-22)\n#define HDN_ITEMCLICK           WINELIB_NAME_AW(HDN_ITEMCLICK)\n#define HDN_ITEMDBLCLICKA       (HDN_FIRST-3)\n#define HDN_ITEMDBLCLICKW       (HDN_FIRST-23)\n#define HDN_ITEMDBLCLICK        WINELIB_NAME_AW(HDN_ITEMDBLCLICK)\n#define HDN_DIVIDERDBLCLICKA    (HDN_FIRST-5)\n#define HDN_DIVIDERDBLCLICKW    (HDN_FIRST-25)\n#define HDN_DIVIDERDBLCLICK     WINELIB_NAME_AW(HDN_DIVIDERDBLCLICK)\n#define HDN_BEGINTRACKA         (HDN_FIRST-6)\n#define HDN_BEGINTRACKW         (HDN_FIRST-26)\n#define HDN_BEGINTRACK          WINELIB_NAME_AW(HDN_BEGINTRACK)\n#define HDN_ENDTRACKA           (HDN_FIRST-7)\n#define HDN_ENDTRACKW           (HDN_FIRST-27)\n#define HDN_ENDTRACK            WINELIB_NAME_AW(HDN_ENDTRACK)\n#define HDN_TRACKA              (HDN_FIRST-8)\n#define HDN_TRACKW              (HDN_FIRST-28)\n#define HDN_TRACK               WINELIB_NAME_AW(HDN_TRACK)\n#define HDN_GETDISPINFOA        (HDN_FIRST-9)\n#define HDN_GETDISPINFOW        (HDN_FIRST-29)\n#define HDN_GETDISPINFO         WINELIB_NAME_AW(HDN_GETDISPINFO)\n#define HDN_BEGINDRAG           (HDN_FIRST-10)\n#define HDN_ENDDRAG             (HDN_FIRST-11)\n#define HDN_FILTERCHANGE        (HDN_FIRST-12)\n#define HDN_FILTERBTNCLICK      (HDN_FIRST-13)\n#define HDN_BEGINFILTEREDIT     (HDN_FIRST-14)\n#define HDN_ENDFILTEREDIT       (HDN_FIRST-15)\n#define HDN_ITEMSTATEICONCLICK  (HDN_FIRST-16)\n#define HDN_ITEMKEYDOWN         (HDN_FIRST-17)\n#define HDN_DROPDOWN            (HDN_FIRST-18)\n#define HDN_OVERFLOWCLICK       (HDN_FIRST-19)\n\ntypedef struct _HD_LAYOUT\n{\n    RECT      *prc;\n    WINDOWPOS *pwpos;\n} HDLAYOUT, *LPHDLAYOUT;\n\n#define HD_LAYOUT   HDLAYOUT\n\ntypedef struct _HD_ITEMA\n{\n    UINT    mask;\n    INT     cxy;\n    LPSTR     pszText;\n    HBITMAP hbm;\n    INT     cchTextMax;\n    INT     fmt;\n    LPARAM    lParam;\n    /* (_WIN32_IE >= 0x0300) */\n    INT     iImage;\n    INT     iOrder;\n    /* (_WIN32_IE >= 0x0500) */\n    UINT    type;\n    LPVOID  pvFilter;\n    /* (_WIN32_WINNT >= 0x0600) */\n    UINT    state;\n} HDITEMA, *LPHDITEMA;\n\ntypedef struct _HD_ITEMW\n{\n    UINT    mask;\n    INT     cxy;\n    LPWSTR    pszText;\n    HBITMAP hbm;\n    INT     cchTextMax;\n    INT     fmt;\n    LPARAM    lParam;\n    /* (_WIN32_IE >= 0x0300) */\n    INT     iImage;\n    INT     iOrder;\n    /* (_WIN32_IE >= 0x0500) */\n    UINT    type;\n    LPVOID  pvFilter;\n    /* (_WIN32_WINNT >= 0x0600) */\n    UINT    state;\n} HDITEMW, *LPHDITEMW;\n\n#define HDITEM   WINELIB_NAME_AW(HDITEM)\n#define LPHDITEM WINELIB_NAME_AW(LPHDITEM)\n#define HD_ITEM  HDITEM\n\n#define HDITEM_V1_SIZEA CCSIZEOF_STRUCT(HDITEMA, lParam)\n#define HDITEM_V1_SIZEW CCSIZEOF_STRUCT(HDITEMW, lParam)\n#define HDITEM_V1_SIZE WINELIB_NAME_AW(HDITEM_V1_SIZE)\n\n#define HDFT_ISSTRING      0x0000\n#define HDFT_ISNUMBER      0x0001\n#define HDFT_HASNOVALUE    0x8000\n\ntypedef struct _HD_TEXTFILTERA\n{\n    LPSTR pszText;\n    INT cchTextMax;\n} HD_TEXTFILTERA, *LPHD_TEXTFILTERA;\n\ntypedef struct _HD_TEXTFILTERW\n{\n    LPWSTR pszText;\n    INT cchTextMax;\n} HD_TEXTFILTERW, *LPHD_TEXTFILTERW;\n\n#define HD_TEXTFILTER WINELIB_NAME_AW(HD_TEXTFILTER)\n#define HDTEXTFILTER WINELIB_NAME_AW(HD_TEXTFILTER)\n#define LPHD_TEXTFILTER WINELIB_NAME_AW(LPHD_TEXTFILTER)\n#define LPHDTEXTFILTER WINELIB_NAME_AW(LPHD_TEXTFILTER)\n\ntypedef struct _HD_HITTESTINFO\n{\n    POINT pt;\n    UINT  flags;\n    INT   iItem;\n} HDHITTESTINFO, *LPHDHITTESTINFO;\n\n#define HD_HITTESTINFO   HDHITTESTINFO\n\ntypedef struct tagNMHEADERA\n{\n    NMHDR     hdr;\n    INT     iItem;\n    INT     iButton;\n    HDITEMA *pitem;\n} NMHEADERA, *LPNMHEADERA;\n\ntypedef struct tagNMHEADERW\n{\n    NMHDR     hdr;\n    INT     iItem;\n    INT     iButton;\n    HDITEMW *pitem;\n} NMHEADERW, *LPNMHEADERW;\n\n#define NMHEADER\t\tWINELIB_NAME_AW(NMHEADER)\n#define LPNMHEADER\t\tWINELIB_NAME_AW(LPNMHEADER)\n#define HD_NOTIFY               NMHEADER\n\ntypedef struct tagNMHDDISPINFOA\n{\n    NMHDR     hdr;\n    INT     iItem;\n    UINT    mask;\n    LPSTR     pszText;\n    INT     cchTextMax;\n    INT     iImage;\n    LPARAM    lParam;\n} NMHDDISPINFOA, *LPNMHDDISPINFOA;\n\ntypedef struct tagNMHDDISPINFOW\n{\n    NMHDR     hdr;\n    INT     iItem;\n    UINT    mask;\n    LPWSTR    pszText;\n    INT     cchTextMax;\n    INT     iImage;\n    LPARAM    lParam;\n} NMHDDISPINFOW, *LPNMHDDISPINFOW;\n\n#define NMHDDISPINFO\t\tWINELIB_NAME_AW(NMHDDISPINFO)\n#define LPNMHDDISPINFO\t\tWINELIB_NAME_AW(LPNMHDDISPINFO)\n\ntypedef struct tagNMHDFILTERBTNCLICK\n{\n    NMHDR hdr;\n    INT iItem;\n    RECT rc;\n} NMHDFILTERBTNCLICK, *LPNMHDFILTERBTNCLICK;\n\n#define Header_GetItemCount(hwndHD) \\\n  (INT)SNDMSG((hwndHD), HDM_GETITEMCOUNT, 0, 0)\n#define Header_InsertItemA(hwndHD,i,phdi) \\\n  (INT)SNDMSGA((hwndHD),HDM_INSERTITEMA,(WPARAM)(INT)(i),(LPARAM)(const HDITEMA*)(phdi))\n#define Header_InsertItemW(hwndHD,i,phdi) \\\n  (INT)SNDMSGW((hwndHD),HDM_INSERTITEMW,(WPARAM)(INT)(i),(LPARAM)(const HDITEMW*)(phdi))\n#define Header_InsertItem WINELIB_NAME_AW(Header_InsertItem)\n#define Header_DeleteItem(hwndHD,i) \\\n  (BOOL)SNDMSG((hwndHD), HDM_DELETEITEM, (WPARAM)(INT)(i), 0)\n#define Header_GetItemA(hwndHD,i,phdi) \\\n  (BOOL)SNDMSGA((hwndHD),HDM_GETITEMA,(WPARAM)(INT)(i),(LPARAM)(HDITEMA*)(phdi))\n#define Header_GetItemW(hwndHD,i,phdi) \\\n  (BOOL)SNDMSGW((hwndHD),HDM_GETITEMW,(WPARAM)(INT)(i),(LPARAM)(HDITEMW*)(phdi))\n#define Header_GetItem WINELIB_NAME_AW(Header_GetItem)\n#define Header_SetItemA(hwndHD,i,phdi) \\\n  (BOOL)SNDMSGA((hwndHD),HDM_SETITEMA,(WPARAM)(INT)(i),(LPARAM)(const HDITEMA*)(phdi))\n#define Header_SetItemW(hwndHD,i,phdi) \\\n  (BOOL)SNDMSGW((hwndHD),HDM_SETITEMW,(WPARAM)(INT)(i),(LPARAM)(const HDITEMW*)(phdi))\n#define Header_SetItem WINELIB_NAME_AW(Header_SetItem)\n#define Header_Layout(hwndHD,playout) \\\n  (BOOL)SNDMSG((hwndHD),HDM_LAYOUT,0,(LPARAM)(LPHDLAYOUT)(playout))\n#define Header_GetItemRect(hwnd,iItem,lprc) \\\n  (BOOL)SNDMSG((hwnd),HDM_GETITEMRECT,(WPARAM)iItem,(LPARAM)lprc)\n#define Header_SetImageList(hwnd,himl) \\\n  (HIMAGELIST)SNDMSG((hwnd),HDM_SETIMAGELIST,0,(LPARAM)himl)\n#define Header_GetImageList(hwnd) \\\n  (HIMAGELIST)SNDMSG((hwnd),HDM_GETIMAGELIST,0,0)\n#define Header_OrderToIndex(hwnd,i) \\\n  (INT)SNDMSG((hwnd),HDM_ORDERTOINDEX,(WPARAM)i,0)\n#define Header_CreateDragImage(hwnd,i) \\\n  (HIMAGELIST)SNDMSG((hwnd),HDM_CREATEDRAGIMAGE,(WPARAM)i,0)\n#define Header_GetOrderArray(hwnd,iCount,lpi) \\\n  (BOOL)SNDMSG((hwnd),HDM_GETORDERARRAY,(WPARAM)iCount,(LPARAM)lpi)\n#define Header_SetOrderArray(hwnd,iCount,lpi) \\\n  (BOOL)SNDMSG((hwnd),HDM_SETORDERARRAY,(WPARAM)iCount,(LPARAM)lpi)\n#define Header_SetHotDivider(hwnd,fPos,dw) \\\n  (INT)SNDMSG((hwnd),HDM_SETHOTDIVIDER,(WPARAM)fPos,(LPARAM)dw)\n#define Header_SetUnicodeFormat(hwnd,fUnicode) \\\n  (BOOL)SNDMSG((hwnd),HDM_SETUNICODEFORMAT,(WPARAM)(fUnicode),0)\n#define Header_GetUnicodeFormat(hwnd) \\\n  (BOOL)SNDMSG((hwnd),HDM_GETUNICODEFORMAT,0,0)\n\n/* Win32 5.1 Button Theme */\n#define WC_BUTTONA       \"Button\"\n#if defined(__GNUC__)\n# define WC_BUTTONW (const WCHAR []){ 'B','u','t','t','o','n',0 }\n#elif defined(_MSC_VER)\n# define WC_BUTTONW      L\"Button\"\n#else\nstatic const WCHAR WC_BUTTONW[] = { 'B','u','t','t','o','n',0 };\n#endif\n#define WC_BUTTON WINELIB_NAME_AW(WC_BUTTON)\n\n#define BCN_FIRST               (0U-1250U)\n#define BCN_LAST                (0U-1350U)\n\n#define BCN_HOTITEMCHANGE       (BCN_FIRST + 1)\n#define BCN_DROPDOWN            (BCN_FIRST + 2)\n#define NM_GETCUSTOMSPLITRECT   (BCN_FIRST + 3)\n\n#define BCM_FIRST               0x1600\n#define BCM_GETIDEALSIZE        (BCM_FIRST + 1)\n#define BCM_SETIMAGELIST        (BCM_FIRST + 2)\n#define BCM_GETIMAGELIST        (BCM_FIRST + 3)\n#define BCM_SETTEXTMARGIN       (BCM_FIRST + 4)\n#define BCM_GETTEXTMARGIN       (BCM_FIRST + 5)\n#define BCM_SETDROPDOWNSTATE    (BCM_FIRST + 6)\n#define BCM_SETSPLITINFO        (BCM_FIRST + 7)\n#define BCM_GETSPLITINFO        (BCM_FIRST + 8)\n#define BCM_SETNOTE             (BCM_FIRST + 9)\n#define BCM_GETNOTE             (BCM_FIRST + 10)\n#define BCM_GETNOTELENGTH       (BCM_FIRST + 11)\n#define BCM_SETSHIELD           (BCM_FIRST + 12)\n\n#define BUTTON_IMAGELIST_ALIGN_LEFT      0\n#define BUTTON_IMAGELIST_ALIGN_RIGHT     1\n#define BUTTON_IMAGELIST_ALIGN_TOP       2\n#define BUTTON_IMAGELIST_ALIGN_BOTTOM    3\n#define BUTTON_IMAGELIST_ALIGN_CENTER    4\n\n#define BCCL_NOGLYPH    (HIMAGELIST)(-1)\n\ntypedef struct\n{\n    HIMAGELIST himl;\n    RECT margin;\n    UINT uAlign;\n} BUTTON_IMAGELIST, *PBUTTON_IMAGELIST;\n\ntypedef struct tagBUTTON_SPLITINFO\n{\n    UINT mask;\n    HIMAGELIST himlGlyph;\n    UINT uSplitStyle;\n    SIZE size;\n} BUTTON_SPLITINFO, *PBUTTON_SPLITINFO;\n\ntypedef struct tagNMBCDROPDOWN\n{\n    NMHDR hdr;\n    RECT rcButton;\n} NMBCDROPDOWN;\n\ntypedef struct tagNMBCHOTITEM\n{\n  NMHDR hdr;\n  DWORD dwFlags;\n} NMBCHOTITEM, *LPNMBCHOTITEM;\n\n#define BST_HOT                 0x0200\n#define BST_DROPDOWNPUSHED      0x0400\n\n/* Button control styles for _WIN32_WINNT >= 0x600 */\n#define BS_SPLITBUTTON          0x0000000C\n#define BS_DEFSPLITBUTTON       0x0000000D\n#define BS_COMMANDLINK          0x0000000E\n#define BS_DEFCOMMANDLINK       0x0000000F\n\n/* Button macros */\n#define Button_SetNote(button, note)  \\\n  (BOOL)SNDMSG(button, BCM_SETNOTE, 0, (LPARAM)(note))\n#define Button_GetNote(button, buffer, size)  \\\n  (BOOL)SNDMSG(button, BCM_GETNOTE, (WPARAM)(size), (LPARAM)(buffer))\n#define Button_GetNoteLength(button)  \\\n  (LRESULT)SNDMSG(button, BCM_GETNOTELENGTH, 0, 0)\n#define Button_GetImageList(button, image_list)  \\\n  (BOOL)SNDMSG(button, BCM_GETIMAGELIST, 0, (LPARAM)(image_list))\n#define Button_SetImageList(button, image_list)  \\\n  (BOOL)SNDMSG(button, BCM_SETIMAGELIST, 0, (LPARAM)(image_list))\n#define Button_GetTextMargin(button, margin)  \\\n  (BOOL)SNDMSG(button, BCM_GETTEXTMARGIN, 0, (LPARAM)(margin))\n#define Button_SetTextMargin(button, margin)  \\\n  (BOOL)SNDMSG(button, BCM_SETTEXTMARGIN, 0, (LPARAM)(margin))\n#define Button_GetIdealSize(button, size)  \\\n  (BOOL)SNDMSG(button, BCM_GETIDEALSIZE, 0, (LPARAM)(size))\n\n/* Toolbar */\n\n#define TOOLBARCLASSNAMEA       \"ToolbarWindow32\"\n#if defined(__GNUC__)\n# define TOOLBARCLASSNAMEW (const WCHAR []){ 'T','o','o','l','b','a','r', \\\n  'W','i','n','d','o','w','3','2',0 }\n#elif defined(_MSC_VER)\n# define TOOLBARCLASSNAMEW      L\"ToolbarWindow32\"\n#else\nstatic const WCHAR TOOLBARCLASSNAMEW[] = { 'T','o','o','l','b','a','r',\n  'W','i','n','d','o','w','3','2',0 };\n#endif\n#define TOOLBARCLASSNAME WINELIB_NAME_AW(TOOLBARCLASSNAME)\n\n#define CMB_MASKED              0x02\n\n#define TBSTATE_CHECKED         0x01\n#define TBSTATE_PRESSED         0x02\n#define TBSTATE_ENABLED         0x04\n#define TBSTATE_HIDDEN          0x08\n#define TBSTATE_INDETERMINATE   0x10\n#define TBSTATE_WRAP            0x20\n#define TBSTATE_ELLIPSES        0x40\n#define TBSTATE_MARKED          0x80\n\n\n/* as of _WIN32_IE >= 0x0500 the following symbols are obsolete,\n * \"everyone\" should use the BTNS_... stuff below\n */\n#define TBSTYLE_BUTTON          0x00\n#define TBSTYLE_SEP             0x01\n#define TBSTYLE_CHECK           0x02\n#define TBSTYLE_GROUP           0x04\n#define TBSTYLE_CHECKGROUP      (TBSTYLE_GROUP | TBSTYLE_CHECK)\n#define TBSTYLE_DROPDOWN        0x08\n#define TBSTYLE_AUTOSIZE        0x10\n#define TBSTYLE_NOPREFIX        0x20\n#define BTNS_BUTTON             TBSTYLE_BUTTON\n#define BTNS_SEP                TBSTYLE_SEP\n#define BTNS_CHECK              TBSTYLE_CHECK\n#define BTNS_GROUP              TBSTYLE_GROUP\n#define BTNS_CHECKGROUP         TBSTYLE_CHECKGROUP\n#define BTNS_DROPDOWN           TBSTYLE_DROPDOWN\n#define BTNS_AUTOSIZE           TBSTYLE_AUTOSIZE\n#define BTNS_NOPREFIX           TBSTYLE_NOPREFIX\n#define BTNS_SHOWTEXT           0x40  /* ignored unless TBSTYLE_EX_MIXEDB set */\n#define BTNS_WHOLEDROPDOWN      0x80  /* draw dropdown arrow, but without split arrow section */\n\n#define TBSTYLE_TOOLTIPS        0x0100\n#define TBSTYLE_WRAPABLE        0x0200\n#define TBSTYLE_ALTDRAG         0x0400\n#define TBSTYLE_FLAT            0x0800\n#define TBSTYLE_LIST            0x1000\n#define TBSTYLE_CUSTOMERASE     0x2000\n#define TBSTYLE_REGISTERDROP    0x4000\n#define TBSTYLE_TRANSPARENT     0x8000\n#define TBSTYLE_EX_DRAWDDARROWS         0x00000001\n#define TBSTYLE_EX_MULTICOLUMN          0x00000002\n#define TBSTYLE_EX_VERTICAL             0x00000004\n#define TBSTYLE_EX_MIXEDBUTTONS         0x00000008\n#define TBSTYLE_EX_HIDECLIPPEDBUTTONS   0x00000010 /* don't show partially obscured buttons */\n#define TBSTYLE_EX_DOUBLEBUFFER         0x00000080 /* Double Buffer the toolbar */\n\n#define TBIF_IMAGE              0x00000001\n#define TBIF_TEXT               0x00000002\n#define TBIF_STATE              0x00000004\n#define TBIF_STYLE              0x00000008\n#define TBIF_LPARAM             0x00000010\n#define TBIF_COMMAND            0x00000020\n#define TBIF_SIZE               0x00000040\n#define TBIF_BYINDEX            0x80000000\n\n#define TBBF_LARGE\t\t0x0001\n\n#define TB_ENABLEBUTTON          (WM_USER+1)\n#define TB_CHECKBUTTON           (WM_USER+2)\n#define TB_PRESSBUTTON           (WM_USER+3)\n#define TB_HIDEBUTTON            (WM_USER+4)\n#define TB_INDETERMINATE         (WM_USER+5)\n#define TB_MARKBUTTON\t\t (WM_USER+6)\n#define TB_ISBUTTONENABLED       (WM_USER+9)\n#define TB_ISBUTTONCHECKED       (WM_USER+10)\n#define TB_ISBUTTONPRESSED       (WM_USER+11)\n#define TB_ISBUTTONHIDDEN        (WM_USER+12)\n#define TB_ISBUTTONINDETERMINATE (WM_USER+13)\n#define TB_ISBUTTONHIGHLIGHTED   (WM_USER+14)\n#define TB_SETSTATE              (WM_USER+17)\n#define TB_GETSTATE              (WM_USER+18)\n#define TB_ADDBITMAP             (WM_USER+19)\n#define TB_ADDBUTTONSA           (WM_USER+20)\n#define TB_ADDBUTTONSW           (WM_USER+68)\n#define TB_ADDBUTTONS            WINELIB_NAME_AW(TB_ADDBUTTONS)\n#define TB_HITTEST               (WM_USER+69)\n#define TB_INSERTBUTTONA         (WM_USER+21)\n#define TB_INSERTBUTTONW         (WM_USER+67)\n#define TB_INSERTBUTTON          WINELIB_NAME_AW(TB_INSERTBUTTON)\n#define TB_DELETEBUTTON          (WM_USER+22)\n#define TB_GETBUTTON             (WM_USER+23)\n#define TB_BUTTONCOUNT           (WM_USER+24)\n#define TB_COMMANDTOINDEX        (WM_USER+25)\n#define TB_SAVERESTOREA          (WM_USER+26)\n#define TB_SAVERESTOREW          (WM_USER+76)\n#define TB_SAVERESTORE           WINELIB_NAME_AW(TB_SAVERESTORE)\n#define TB_CUSTOMIZE             (WM_USER+27)\n#define TB_ADDSTRINGA            (WM_USER+28)\n#define TB_ADDSTRINGW            (WM_USER+77)\n#define TB_ADDSTRING             WINELIB_NAME_AW(TB_ADDSTRING)\n#define TB_GETITEMRECT           (WM_USER+29)\n#define TB_BUTTONSTRUCTSIZE      (WM_USER+30)\n#define TB_SETBUTTONSIZE         (WM_USER+31)\n#define TB_SETBITMAPSIZE         (WM_USER+32)\n#define TB_AUTOSIZE              (WM_USER+33)\n#define TB_GETTOOLTIPS           (WM_USER+35)\n#define TB_SETTOOLTIPS           (WM_USER+36)\n#define TB_SETPARENT             (WM_USER+37)\n#define TB_SETROWS               (WM_USER+39)\n#define TB_GETROWS               (WM_USER+40)\n#define TB_GETBITMAPFLAGS        (WM_USER+41)\n#define TB_SETCMDID              (WM_USER+42)\n#define TB_CHANGEBITMAP          (WM_USER+43)\n#define TB_GETBITMAP             (WM_USER+44)\n#define TB_GETBUTTONTEXTA        (WM_USER+45)\n#define TB_GETBUTTONTEXTW        (WM_USER+75)\n#define TB_GETBUTTONTEXT         WINELIB_NAME_AW(TB_GETBUTTONTEXT)\n#define TB_REPLACEBITMAP         (WM_USER+46)\n#define TB_SETINDENT             (WM_USER+47)\n#define TB_SETIMAGELIST          (WM_USER+48)\n#define TB_GETIMAGELIST          (WM_USER+49)\n#define TB_LOADIMAGES            (WM_USER+50)\n#define TB_GETRECT               (WM_USER+51) /* wParam is the Cmd instead of index */\n#define TB_SETHOTIMAGELIST       (WM_USER+52)\n#define TB_GETHOTIMAGELIST       (WM_USER+53)\n#define TB_SETDISABLEDIMAGELIST  (WM_USER+54)\n#define TB_GETDISABLEDIMAGELIST  (WM_USER+55)\n#define TB_SETSTYLE              (WM_USER+56)\n#define TB_GETSTYLE              (WM_USER+57)\n#define TB_GETBUTTONSIZE         (WM_USER+58)\n#define TB_SETBUTTONWIDTH        (WM_USER+59)\n#define TB_SETMAXTEXTROWS        (WM_USER+60)\n#define TB_GETTEXTROWS           (WM_USER+61)\n#define TB_GETOBJECT             (WM_USER+62)\n#define TB_GETBUTTONINFOW        (WM_USER+63)\n#define TB_GETBUTTONINFOA        (WM_USER+65)\n#define TB_GETBUTTONINFO         WINELIB_NAME_AW(TB_GETBUTTONINFO)\n#define TB_SETBUTTONINFOW        (WM_USER+64)\n#define TB_SETBUTTONINFOA        (WM_USER+66)\n#define TB_SETBUTTONINFO         WINELIB_NAME_AW(TB_SETBUTTONINFO)\n#define TB_SETDRAWTEXTFLAGS      (WM_USER+70)\n#define TB_GETHOTITEM            (WM_USER+71)\n#define TB_SETHOTITEM            (WM_USER+72)\n#define TB_SETANCHORHIGHLIGHT    (WM_USER+73)\n#define TB_GETANCHORHIGHLIGHT    (WM_USER+74)\n#define TB_MAPACCELERATORA       (WM_USER+78)\n#define TB_MAPACCELERATORW       (WM_USER+90)\n#define TB_MAPACCELERATOR        WINELIB_NAME_AW(TB_MAPACCELERATOR)\n#define TB_GETINSERTMARK         (WM_USER+79)\n#define TB_SETINSERTMARK         (WM_USER+80)\n#define TB_INSERTMARKHITTEST     (WM_USER+81)\n#define TB_MOVEBUTTON            (WM_USER+82)\n#define TB_GETMAXSIZE            (WM_USER+83)\n#define TB_SETEXTENDEDSTYLE      (WM_USER+84)\n#define TB_GETEXTENDEDSTYLE      (WM_USER+85)\n#define TB_GETPADDING            (WM_USER+86)\n#define TB_SETPADDING            (WM_USER+87)\n#define TB_SETINSERTMARKCOLOR    (WM_USER+88)\n#define TB_GETINSERTMARKCOLOR    (WM_USER+89)\n#define TB_SETCOLORSCHEME        CCM_SETCOLORSCHEME\n#define TB_GETCOLORSCHEME        CCM_GETCOLORSCHEME\n#define TB_SETUNICODEFORMAT      CCM_SETUNICODEFORMAT\n#define TB_GETUNICODEFORMAT      CCM_GETUNICODEFORMAT\n#define TB_GETSTRINGW            (WM_USER+91)\n#define TB_GETSTRINGA            (WM_USER+92)\n#define TB_GETSTRING             WINELIB_NAME_AW(TB_GETSTRING)\n#define TB_SETBOUNDINGSIZE       (WM_USER+93)\n#define TB_SETHOTITEM2           (WM_USER+94)\n#define TB_HASACCELERATOR        (WM_USER+95)\n#define TB_SETLISTGAP            (WM_USER+96)\n#define TB_GETIMAGELISTCOUNT     (WM_USER+98)\n#define TB_GETIDEALSIZE          (WM_USER+99)\n\n/* undocumented messages in Toolbar */\n#ifdef __WINESRC__\n#define TB_UNKWN464              (WM_USER+100)\n#endif\n\n#define TB_GETMETRICS            (WM_USER+101)\n#define TB_SETMETRICS            (WM_USER+102)\n#define TB_GETITEMDROPDOWNRECT   (WM_USER+103)\n#define TB_SETPRESSEDIMAGELIST   (WM_USER+104)\n#define TB_GETPRESSEDIMAGELIST   (WM_USER+105)\n#define TB_SETWINDOWTHEME        CCM_SETWINDOWTHEME\n\n#define TBN_FIRST               (0U-700U)\n#define TBN_LAST                (0U-720U)\n#define TBN_GETBUTTONINFOA      (TBN_FIRST-0)\n#define TBN_GETBUTTONINFOW      (TBN_FIRST-20)\n#define TBN_GETBUTTONINFO       WINELIB_NAME_AW(TBN_GETBUTTONINFO)\n#define TBN_BEGINDRAG\t\t(TBN_FIRST-1)\n#define TBN_ENDDRAG\t\t(TBN_FIRST-2)\n#define TBN_BEGINADJUST\t\t(TBN_FIRST-3)\n#define TBN_ENDADJUST\t\t(TBN_FIRST-4)\n#define TBN_RESET\t\t(TBN_FIRST-5)\n#define TBN_QUERYINSERT\t\t(TBN_FIRST-6)\n#define TBN_QUERYDELETE\t\t(TBN_FIRST-7)\n#define TBN_TOOLBARCHANGE\t(TBN_FIRST-8)\n#define TBN_CUSTHELP\t\t(TBN_FIRST-9)\n#define TBN_DROPDOWN\t\t(TBN_FIRST-10)\n#define TBN_GETOBJECT\t\t(TBN_FIRST-12)\n#define TBN_HOTITEMCHANGE\t(TBN_FIRST-13)\n#define TBN_DRAGOUT\t\t(TBN_FIRST-14)\n#define TBN_DELETINGBUTTON\t(TBN_FIRST-15)\n#define TBN_GETDISPINFOA\t(TBN_FIRST-16)\n#define TBN_GETDISPINFOW\t(TBN_FIRST-17)\n#define TBN_GETDISPINFO\t\tWINELIB_NAME_AW(TBN_GETDISPINFO)\n#define TBN_GETINFOTIPA         (TBN_FIRST-18)\n#define TBN_GETINFOTIPW         (TBN_FIRST-19)\n#define TBN_GETINFOTIP          WINELIB_NAME_AW(TBN_GETINFOTIP)\n#define TBN_RESTORE\t        (TBN_FIRST-21)\n#define TBN_SAVE\t        (TBN_FIRST-22)\n#define TBN_INITCUSTOMIZE\t(TBN_FIRST-23)\n#define TBN_WRAPHOTITEM         (TBN_FIRST-24)\n#define TBN_DUPACCELERATOR      (TBN_FIRST-25)\n#define TBN_WRAPACCELERATOR     (TBN_FIRST-26)\n#define TBN_DRAGOVER            (TBN_FIRST-27)\n#define TBN_MAPACCELERATOR      (TBN_FIRST-28)\n#define TBNRF_HIDEHELP\t\t0x00000001\n\n\n/* Return values from TBN_DROPDOWN */\n#define TBDDRET_DEFAULT  0\n#define TBDDRET_NODEFAULT  1\n#define TBDDRET_TREATPRESSED  2\n\ntypedef struct _NMTBCUSTOMDRAW\n{\n    NMCUSTOMDRAW nmcd;\n    HBRUSH hbrMonoDither;\n    HBRUSH hbrLines;\n    HPEN hpenLines;\n    COLORREF clrText;\n    COLORREF clrMark;\n    COLORREF clrTextHighlight;\n    COLORREF clrBtnFace;\n    COLORREF clrBtnHighlight;\n    COLORREF clrHighlightHotTrack;\n    RECT rcText;\n    int nStringBkMode;\n    int nHLStringBkMode;\n    int iListGap;\n} NMTBCUSTOMDRAW, *LPNMTBCUSTOMDRAW;\n\n/* return flags for Toolbar NM_CUSTOMDRAW notifications */\n#define TBCDRF_NOEDGES        0x00010000  /* Don't draw button edges       */\n#define TBCDRF_HILITEHOTTRACK 0x00020000  /* Use color of the button bkgnd */\n                                          /* when hottracked               */\n#define TBCDRF_NOOFFSET       0x00040000  /* No offset button if pressed   */\n#define TBCDRF_NOMARK         0x00080000  /* Don't draw default highlight  */\n                                          /* for TBSTATE_MARKED            */\n#define TBCDRF_NOETCHEDEFFECT 0x00100000  /* No etched effect for          */\n                                          /* disabled items                */\n#define TBCDRF_BLENDICON      0x00200000  /* ILD_BLEND50 on the icon image */\n#define TBCDRF_NOBACKGROUND   0x00400000  /* ILD_BLEND50 on the icon image */\n#define TBCDRF_USECDCOLORS    0x00800000\n\n\n/* This is just for old CreateToolbar. */\n/* Don't use it in new programs. */\ntypedef struct _OLDTBBUTTON {\n    INT iBitmap;\n    INT idCommand;\n    BYTE  fsState;\n    BYTE  fsStyle;\n    BYTE  bReserved[2];\n    DWORD dwData;\n} OLDTBBUTTON, *POLDTBBUTTON, *LPOLDTBBUTTON;\ntypedef const OLDTBBUTTON *LPCOLDTBBUTTON;\n\n\ntypedef struct _TBBUTTON {\n    INT iBitmap;\n    INT idCommand;\n    BYTE  fsState;\n    BYTE  fsStyle;\n#ifdef _WIN64\n    BYTE  bReserved[6];\n#else\n    BYTE  bReserved[2];\n#endif\n    DWORD_PTR dwData;\n    INT_PTR iString;\n} TBBUTTON, *PTBBUTTON, *LPTBBUTTON;\ntypedef const TBBUTTON *LPCTBBUTTON;\n\n\ntypedef struct _COLORMAP {\n    COLORREF from;\n    COLORREF to;\n} COLORMAP, *LPCOLORMAP;\n\n\ntypedef struct tagTBADDBITMAP {\n    HINSTANCE hInst;\n    UINT_PTR  nID;\n} TBADDBITMAP, *LPTBADDBITMAP;\n\n#define HINST_COMMCTRL         ((HINSTANCE)-1)\n#define IDB_STD_SMALL_COLOR     0\n#define IDB_STD_LARGE_COLOR     1\n#define IDB_VIEW_SMALL_COLOR    4\n#define IDB_VIEW_LARGE_COLOR    5\n#define IDB_HIST_SMALL_COLOR    8\n#define IDB_HIST_LARGE_COLOR    9\n#define IDB_HIST_NORMAL        12\n#define IDB_HIST_HOT           13\n#define IDB_HIST_DISABLED      14\n#define IDB_HIST_PRESSED       15\n\n#define STD_CUT                 0\n#define STD_COPY                1\n#define STD_PASTE               2\n#define STD_UNDO                3\n#define STD_REDOW               4\n#define STD_DELETE              5\n#define STD_FILENEW             6\n#define STD_FILEOPEN            7\n#define STD_FILESAVE            8\n#define STD_PRINTPRE            9\n#define STD_PROPERTIES          10\n#define STD_HELP                11\n#define STD_FIND                12\n#define STD_REPLACE             13\n#define STD_PRINT               14\n\n#define VIEW_LARGEICONS         0\n#define VIEW_SMALLICONS         1\n#define VIEW_LIST               2\n#define VIEW_DETAILS            3\n#define VIEW_SORTNAME           4\n#define VIEW_SORTSIZE           5\n#define VIEW_SORTDATE           6\n#define VIEW_SORTTYPE           7\n#define VIEW_PARENTFOLDER       8\n#define VIEW_NETCONNECT         9\n#define VIEW_NETDISCONNECT      10\n#define VIEW_NEWFOLDER          11\n#define VIEW_VIEWMENU           12\n\n#define HIST_BACK               0\n#define HIST_FORWARD            1\n#define HIST_FAVORITES          2\n#define HIST_ADDTOFAVORITES     3\n#define HIST_VIEWTREE           4\n\ntypedef struct tagTBSAVEPARAMSA {\n    HKEY   hkr;\n    LPCSTR pszSubKey;\n    LPCSTR pszValueName;\n} TBSAVEPARAMSA, *LPTBSAVEPARAMSA;\n\ntypedef struct tagTBSAVEPARAMSW {\n    HKEY   hkr;\n    LPCWSTR pszSubKey;\n    LPCWSTR pszValueName;\n} TBSAVEPARAMSW, *LPTBSAVEPARAMSW;\n\n#define TBSAVEPARAMS   WINELIB_NAME_AW(TBSAVEPARAMS)\n#define LPTBSAVEPARAMS WINELIB_NAME_AW(LPTBSAVEPARAMS)\n\ntypedef struct\n{\n    UINT cbSize;\n    DWORD  dwMask;\n    INT  idCommand;\n    INT  iImage;\n    BYTE   fsState;\n    BYTE   fsStyle;\n    WORD   cx;\n    DWORD_PTR lParam;\n    LPSTR  pszText;\n    INT  cchText;\n} TBBUTTONINFOA, *LPTBBUTTONINFOA;\n\ntypedef struct\n{\n    UINT cbSize;\n    DWORD  dwMask;\n    INT  idCommand;\n    INT  iImage;\n    BYTE   fsState;\n    BYTE   fsStyle;\n    WORD   cx;\n    DWORD_PTR lParam;\n    LPWSTR pszText;\n    INT  cchText;\n} TBBUTTONINFOW, *LPTBBUTTONINFOW;\n\n#define TBBUTTONINFO   WINELIB_NAME_AW(TBBUTTONINFO)\n#define LPTBBUTTONINFO WINELIB_NAME_AW(LPTBBUTTONINFO)\n\ntypedef struct tagNMTBHOTITEM\n{\n    NMHDR hdr;\n    int idOld;\n    int idNew;\n    DWORD dwFlags;\n} NMTBHOTITEM, *LPNMTBHOTITEM;\n\ntypedef struct tagNMTBGETINFOTIPA\n{\n    NMHDR  hdr;\n    LPSTR  pszText;\n    INT  cchTextMax;\n    INT  iItem;\n    LPARAM lParam;\n} NMTBGETINFOTIPA, *LPNMTBGETINFOTIPA;\n\ntypedef struct tagNMTBGETINFOTIPW\n{\n    NMHDR  hdr;\n    LPWSTR pszText;\n    INT  cchTextMax;\n    INT  iItem;\n    LPARAM lParam;\n} NMTBGETINFOTIPW, *LPNMTBGETINFOTIPW;\n\n#define NMTBGETINFOTIP   WINELIB_NAME_AW(NMTBGETINFOTIP)\n#define LPNMTBGETINFOTIP WINELIB_NAME_AW(LPNMTBGETINFOTIP)\n\ntypedef struct\n{\n    NMHDR hdr;\n    DWORD dwMask;\n    int idCommand;\n    DWORD_PTR lParam;\n    int iImage;\n    LPSTR pszText;\n    int cchText;\n} NMTBDISPINFOA, *LPNMTBDISPINFOA;\n\ntypedef struct\n{\n    NMHDR hdr;\n    DWORD dwMask;\n    int idCommand;\n    DWORD_PTR lParam;\n    int iImage;\n    LPWSTR pszText;\n    int cchText;\n} NMTBDISPINFOW, *LPNMTBDISPINFOW;\n\n#define NMTBDISPINFO WINELIB_NAME_AW(NMTBDISPINFO)\n#define LPNMTBDISPINFO WINELIB_NAME_AW(LPNMTBDISPINFO)\n\n/* contents of dwMask in the NMTBDISPINFO structure */\n#define TBNF_IMAGE     0x00000001\n#define TBNF_TEXT      0x00000002\n#define TBNF_DI_SETITEM  0x10000000\n\n\ntypedef struct tagNMTOOLBARA\n{\n    NMHDR    hdr;\n    INT      iItem;\n    TBBUTTON tbButton;\n    INT      cchText;\n    LPSTR    pszText;\n    RECT     rcButton; /* Version 5.80 */\n} NMTOOLBARA, *LPNMTOOLBARA, TBNOTIFYA, *LPTBNOTIFYA;\n\ntypedef struct tagNMTOOLBARW\n{\n    NMHDR    hdr;\n    INT      iItem;\n    TBBUTTON tbButton;\n    INT      cchText;\n    LPWSTR   pszText;\n    RECT     rcButton; /* Version 5.80 */\n} NMTOOLBARW, *LPNMTOOLBARW, TBNOTIFYW, *LPTBNOTIFYW;\n\n#define NMTOOLBAR   WINELIB_NAME_AW(NMTOOLBAR)\n#define LPNMTOOLBAR WINELIB_NAME_AW(LPNMTOOLBAR)\n#define TBNOTIFY    WINELIB_NAME_AW(TBNOTIFY)\n#define LPTBNOTIFY  WINELIB_NAME_AW(LPTBNOTIFY)\n\ntypedef struct\n{\n\tHINSTANCE hInstOld;\n\tUINT_PTR  nIDOld;\n\tHINSTANCE hInstNew;\n\tUINT_PTR  nIDNew;\n\tINT       nButtons;\n} TBREPLACEBITMAP, *LPTBREPLACEBITMAP;\n\n#define HICF_OTHER          0x00000000\n#define HICF_MOUSE          0x00000001   /* Triggered by mouse             */\n#define HICF_ARROWKEYS      0x00000002   /* Triggered by arrow keys        */\n#define HICF_ACCELERATOR    0x00000004   /* Triggered by accelerator       */\n#define HICF_DUPACCEL       0x00000008   /* This accelerator is not unique */\n#define HICF_ENTERING       0x00000010   /* idOld is invalid               */\n#define HICF_LEAVING        0x00000020   /* idNew is invalid               */\n#define HICF_RESELECT       0x00000040   /* hot item reselected            */\n#define HICF_LMOUSE         0x00000080   /* left mouse button selected     */\n#define HICF_TOGGLEDROPDOWN 0x00000100   /* Toggle button's dropdown state */\n\ntypedef struct\n{\n    int   iButton;\n    DWORD dwFlags;\n} TBINSERTMARK, *LPTBINSERTMARK;\n#define TBIMHT_AFTER      0x00000001 /* TRUE = insert After iButton, otherwise before */\n#define TBIMHT_BACKGROUND 0x00000002 /* TRUE if and only if missed buttons completely */\n\ntypedef struct tagNMTBSAVE\n{\n    NMHDR hdr;\n    DWORD* pData;\n    DWORD* pCurrent;\n    UINT cbData;\n    int iItem;\n    int cButtons;\n    TBBUTTON tbButton;\n} NMTBSAVE, *LPNMTBSAVE;\n\ntypedef struct tagNMTBRESTORE\n{\n    NMHDR hdr;\n    DWORD* pData;\n    DWORD* pCurrent;\n    UINT cbData;\n    int iItem;\n    int cButtons;\n    int cbBytesPerRecord;\n    TBBUTTON tbButton;\n} NMTBRESTORE, *LPNMTBRESTORE;\n\n#define TBMF_PAD           0x00000001\n#define TBMF_BARPAD        0x00000002\n#define TBMF_BUTTONSPACING 0x00000004\n\ntypedef struct\n{\n    UINT cbSize;\n    DWORD dwMask;\n    INT cxPad;\n    INT cyPad;\n    INT cxBarPad;\n    INT cyBarPad;\n    INT cxButtonSpacing;\n    INT cyButtonSpacing;\n} TBMETRICS, *LPTBMETRICS;\n\n/* these are undocumented and the names are guesses */\ntypedef struct\n{\n    NMHDR hdr;\n    HWND hwndDialog;\n} NMTBINITCUSTOMIZE;\n\ntypedef struct\n{\n    NMHDR hdr;\n    INT idNew;\n    INT iDirection; /* left is -1, right is 1 */\n    DWORD dwReason; /* HICF_* */\n} NMTBWRAPHOTITEM;\n\n\nHWND WINAPI\nCreateToolbar(HWND, DWORD, UINT, INT, HINSTANCE,\n              UINT, LPCTBBUTTON, INT);\n\nHWND WINAPI\nCreateToolbarEx(HWND, DWORD, UINT, INT,\n                HINSTANCE, UINT_PTR, LPCTBBUTTON,\n                INT, INT, INT, INT, INT, UINT);\n\nHBITMAP WINAPI\nCreateMappedBitmap (HINSTANCE, INT_PTR, UINT, LPCOLORMAP, INT);\n\n\n/* Tool tips */\n\n#define TOOLTIPS_CLASSA         \"tooltips_class32\"\n#if defined(__GNUC__)\n# define TOOLTIPS_CLASSW (const WCHAR []){ 't','o','o','l','t','i','p','s','_', \\\n  'c','l','a','s','s','3','2',0 }\n#elif defined(_MSC_VER)\n# define TOOLTIPS_CLASSW        L\"tooltips_class32\"\n#else\nstatic const WCHAR TOOLTIPS_CLASSW[] = { 't','o','o','l','t','i','p','s','_',\n  'c','l','a','s','s','3','2',0 };\n#endif\n#define TOOLTIPS_CLASS          WINELIB_NAME_AW(TOOLTIPS_CLASS)\n\n#define INFOTIPSIZE             1024\n\n\n#define TTF_IDISHWND            0x0001\n#define TTF_CENTERTIP           0x0002\n#define TTF_RTLREADING          0x0004\n#define TTF_SUBCLASS            0x0010\n#define TTF_TRACK               0x0020\n#define TTF_ABSOLUTE            0x0080\n#define TTF_TRANSPARENT         0x0100\n#define TTF_DI_SETITEM          0x8000  /* valid only on the TTN_NEEDTEXT callback */\n\n\n#define TTDT_AUTOMATIC          0\n#define TTDT_RESHOW             1\n#define TTDT_AUTOPOP            2\n#define TTDT_INITIAL            3\n\n\n#define TTI_NONE                0\n#define TTI_INFO                1\n#define TTI_WARNING             2\n#define TTI_ERROR               3\n#define TTI_INFO_LARGE          4\n#define TTI_WARNING_LARGE       5\n#define TTI_ERROR_LARGE         6\n\n\n#define TTM_ACTIVATE            (WM_USER+1)\n#define TTM_SETDELAYTIME        (WM_USER+3)\n#define TTM_ADDTOOLA            (WM_USER+4)\n#define TTM_ADDTOOLW            (WM_USER+50)\n#define TTM_ADDTOOL             WINELIB_NAME_AW(TTM_ADDTOOL)\n#define TTM_DELTOOLA            (WM_USER+5)\n#define TTM_DELTOOLW            (WM_USER+51)\n#define TTM_DELTOOL             WINELIB_NAME_AW(TTM_DELTOOL)\n#define TTM_NEWTOOLRECTA        (WM_USER+6)\n#define TTM_NEWTOOLRECTW        (WM_USER+52)\n#define TTM_NEWTOOLRECT         WINELIB_NAME_AW(TTM_NEWTOOLRECT)\n#define TTM_RELAYEVENT          (WM_USER+7)\n#define TTM_GETTOOLINFOA        (WM_USER+8)\n#define TTM_GETTOOLINFOW        (WM_USER+53)\n#define TTM_GETTOOLINFO         WINELIB_NAME_AW(TTM_GETTOOLINFO)\n#define TTM_SETTOOLINFOA        (WM_USER+9)\n#define TTM_SETTOOLINFOW        (WM_USER+54)\n#define TTM_SETTOOLINFO         WINELIB_NAME_AW(TTM_SETTOOLINFO)\n#define TTM_HITTESTA            (WM_USER+10)\n#define TTM_HITTESTW            (WM_USER+55)\n#define TTM_HITTEST             WINELIB_NAME_AW(TTM_HITTEST)\n#define TTM_GETTEXTA            (WM_USER+11)\n#define TTM_GETTEXTW            (WM_USER+56)\n#define TTM_GETTEXT             WINELIB_NAME_AW(TTM_GETTEXT)\n#define TTM_UPDATETIPTEXTA      (WM_USER+12)\n#define TTM_UPDATETIPTEXTW      (WM_USER+57)\n#define TTM_UPDATETIPTEXT       WINELIB_NAME_AW(TTM_UPDATETIPTEXT)\n#define TTM_GETTOOLCOUNT        (WM_USER+13)\n#define TTM_ENUMTOOLSA          (WM_USER+14)\n#define TTM_ENUMTOOLSW          (WM_USER+58)\n#define TTM_ENUMTOOLS           WINELIB_NAME_AW(TTM_ENUMTOOLS)\n#define TTM_GETCURRENTTOOLA     (WM_USER+15)\n#define TTM_GETCURRENTTOOLW     (WM_USER+59)\n#define TTM_GETCURRENTTOOL      WINELIB_NAME_AW(TTM_GETCURRENTTOOL)\n#define TTM_WINDOWFROMPOINT     (WM_USER+16)\n#define TTM_TRACKACTIVATE       (WM_USER+17)\n#define TTM_TRACKPOSITION       (WM_USER+18)\n#define TTM_SETTIPBKCOLOR       (WM_USER+19)\n#define TTM_SETTIPTEXTCOLOR     (WM_USER+20)\n#define TTM_GETDELAYTIME        (WM_USER+21)\n#define TTM_GETTIPBKCOLOR       (WM_USER+22)\n#define TTM_GETTIPTEXTCOLOR     (WM_USER+23)\n#define TTM_SETMAXTIPWIDTH      (WM_USER+24)\n#define TTM_GETMAXTIPWIDTH      (WM_USER+25)\n#define TTM_SETMARGIN           (WM_USER+26)\n#define TTM_GETMARGIN           (WM_USER+27)\n#define TTM_POP                 (WM_USER+28)\n#define TTM_UPDATE              (WM_USER+29)\n#define TTM_GETBUBBLESIZE       (WM_USER+30)\n#define TTM_ADJUSTRECT          (WM_USER+31)\n#define TTM_SETTITLEA           (WM_USER+32)\n#define TTM_SETTITLEW           (WM_USER+33)\n#define TTM_SETTITLE            WINELIB_NAME_AW(TTM_SETTITLE)\n#define TTM_POPUP               (WM_USER+34)\n#define TTM_GETTITLE            (WM_USER+35)\n#define TTM_SETWINDOWTHEME      CCM_SETWINDOWTHEME\n\n\n#define TTN_FIRST               (0U-520U)\n#define TTN_LAST                (0U-549U)\n#define TTN_GETDISPINFOA        (TTN_FIRST-0)\n#define TTN_GETDISPINFOW        (TTN_FIRST-10)\n#define TTN_GETDISPINFO         WINELIB_NAME_AW(TTN_GETDISPINFO)\n#define TTN_SHOW                (TTN_FIRST-1)\n#define TTN_POP                 (TTN_FIRST-2)\n#define TTN_LINKCLICK           (TTN_FIRST-3)\n\n#define TTN_NEEDTEXT\t\tTTN_GETDISPINFO\n#define TTN_NEEDTEXTA \t\tTTN_GETDISPINFOA\n#define TTN_NEEDTEXTW \t\tTTN_GETDISPINFOW\n\ntypedef struct tagTOOLINFOA {\n    UINT cbSize;\n    UINT uFlags;\n    HWND hwnd;\n    UINT_PTR uId;\n    RECT rect;\n    HINSTANCE hinst;\n    LPSTR lpszText;\n    LPARAM lParam;\n    void *lpReserved;\n} TTTOOLINFOA, *LPTOOLINFOA, *PTOOLINFOA, *LPTTTOOLINFOA;\n\ntypedef struct tagTOOLINFOW {\n    UINT cbSize;\n    UINT uFlags;\n    HWND hwnd;\n    UINT_PTR uId;\n    RECT rect;\n    HINSTANCE hinst;\n    LPWSTR lpszText;\n    LPARAM lParam;\n    void *lpReserved;\n} TTTOOLINFOW, *LPTOOLINFOW, *PTOOLINFOW, *LPTTTOOLINFOW;\n\n#define TTTOOLINFO WINELIB_NAME_AW(TTTOOLINFO)\n#define TOOLINFO WINELIB_NAME_AW(TTTOOLINFO)\n#define PTOOLINFO WINELIB_NAME_AW(PTOOLINFO)\n#define LPTTTOOLINFO WINELIB_NAME_AW(LPTTTOOLINFO)\n#define LPTOOLINFO WINELIB_NAME_AW(LPTOOLINFO)\n\n#define TTTOOLINFOA_V1_SIZE CCSIZEOF_STRUCT(TTTOOLINFOA, lpszText)\n#define TTTOOLINFOW_V1_SIZE CCSIZEOF_STRUCT(TTTOOLINFOW, lpszText)\n#define TTTOOLINFO_V1_SIZE  CCSIZEOF_STRUCT(WINELIB_NAME_AW(TTTOOLINFO), lpszText)\n#define TTTOOLINFOA_V2_SIZE CCSIZEOF_STRUCT(TTTOOLINFOA, lParam)\n#define TTTOOLINFOW_V2_SIZE CCSIZEOF_STRUCT(TTTOOLINFOW, lParam)\n#define TTTOOLINFOA_V3_SIZE CCSIZEOF_STRUCT(TTTOOLINFOA, lpReserved)\n#define TTTOOLINFOW_V3_SIZE CCSIZEOF_STRUCT(TTTOOLINFOW, lpReserved)\n\ntypedef struct _TT_HITTESTINFOA\n{\n    HWND        hwnd;\n    POINT       pt;\n    TTTOOLINFOA ti;\n} TTHITTESTINFOA, *LPTTHITTESTINFOA;\n#define LPHITTESTINFOA LPTTHITTESTINFOA\n\ntypedef struct _TT_HITTESTINFOW\n{\n    HWND        hwnd;\n    POINT       pt;\n    TTTOOLINFOW ti;\n} TTHITTESTINFOW, *LPTTHITTESTINFOW;\n#define LPHITTESTINFOW LPTTHITTESTINFOW\n\n#define TTHITTESTINFO WINELIB_NAME_AW(TTHITTESTINFO)\n#define LPTTHITTESTINFO WINELIB_NAME_AW(LPTTHITTESTINFO)\n#define LPHITTESTINFO WINELIB_NAME_AW(LPHITTESTINFO)\n\ntypedef struct tagNMTTDISPINFOA\n{\n    NMHDR hdr;\n    LPSTR lpszText;\n    CHAR  szText[80];\n    HINSTANCE hinst;\n    UINT      uFlags;\n    LPARAM      lParam;\n} NMTTDISPINFOA, *LPNMTTDISPINFOA;\n\ntypedef struct tagNMTTDISPINFOW\n{\n    NMHDR       hdr;\n    LPWSTR      lpszText;\n    WCHAR       szText[80];\n    HINSTANCE hinst;\n    UINT      uFlags;\n    LPARAM      lParam;\n} NMTTDISPINFOW, *LPNMTTDISPINFOW;\n\n#define NMTTDISPINFO WINELIB_NAME_AW(NMTTDISPINFO)\n#define LPNMTTDISPINFO WINELIB_NAME_AW(LPNMTTDISPINFO)\n\n#define NMTTDISPINFO_V1_SIZEA CCSIZEOF_STRUCT(NMTTDISPINFOA, uFlags)\n#define NMTTDISPINFO_V1_SIZEW CCSIZEOF_STRUCT(NMTTDISPINFOW, uFlags)\n#define NMTTDISPINFO_V1_SIZE WINELIB_NAME_AW(NMTTDISPINFO_V1_SIZE)\n\ntypedef struct _TTGETTITLE\n{\n    DWORD dwSize;\n    UINT uTitleBitmap;\n    UINT cch;\n    WCHAR* pszTitle;\n} TTGETTITLE, *PTTGETTITLE;\n\n#define TOOLTIPTEXTW    NMTTDISPINFOW\n#define TOOLTIPTEXTA    NMTTDISPINFOA\n#define TOOLTIPTEXT     NMTTDISPINFO\n#define LPTOOLTIPTEXTW  LPNMTTDISPINFOW\n#define LPTOOLTIPTEXTA  LPNMTTDISPINFOA\n#define LPTOOLTIPTEXT   LPNMTTDISPINFO\n\n\n/* Rebar control */\n\n#define REBARCLASSNAMEA         \"ReBarWindow32\"\n#if defined(__GNUC__)\n# define REBARCLASSNAMEW (const WCHAR []){ 'R','e','B','a','r', \\\n  'W','i','n','d','o','w','3','2',0 }\n#elif defined(_MSC_VER)\n# define REBARCLASSNAMEW        L\"ReBarWindow32\"\n#else\nstatic const WCHAR REBARCLASSNAMEW[] = { 'R','e','B','a','r',\n  'W','i','n','d','o','w','3','2',0 };\n#endif\n#define REBARCLASSNAME          WINELIB_NAME_AW(REBARCLASSNAME)\n\n\n#define RBIM_IMAGELIST          0x00000001\n\n#define RBBIM_STYLE             0x00000001\n#define RBBIM_COLORS            0x00000002\n#define RBBIM_TEXT              0x00000004\n#define RBBIM_IMAGE             0x00000008\n#define RBBIM_CHILD             0x00000010\n#define RBBIM_CHILDSIZE         0x00000020\n#define RBBIM_SIZE              0x00000040\n#define RBBIM_BACKGROUND        0x00000080\n#define RBBIM_ID                0x00000100\n#define RBBIM_IDEALSIZE         0x00000200\n#define RBBIM_LPARAM            0x00000400\n#define RBBIM_HEADERSIZE        0x00000800\n#define RBBIM_CHEVRONLOCATION   0x00001000\n#define RBBIM_CHEVRONSTATE      0x00002000\n\n#define RBBS_BREAK              0x00000001\n#define RBBS_FIXEDSIZE          0x00000002\n#define RBBS_CHILDEDGE          0x00000004\n#define RBBS_HIDDEN             0x00000008\n#define RBBS_NOVERT             0x00000010\n#define RBBS_FIXEDBMP           0x00000020\n#define RBBS_VARIABLEHEIGHT     0x00000040\n#define RBBS_GRIPPERALWAYS      0x00000080\n#define RBBS_NOGRIPPER          0x00000100\n#define RBBS_USECHEVRON         0x00000200\n#define RBBS_HIDETITLE          0x00000400\n#define RBBS_TOPALIGN           0x00000800\n\n#define RBNM_ID                 0x00000001\n#define RBNM_STYLE              0x00000002\n#define RBNM_LPARAM             0x00000004\n\n#define RBHT_NOWHERE            0x0001\n#define RBHT_CAPTION            0x0002\n#define RBHT_CLIENT             0x0003\n#define RBHT_GRABBER            0x0004\n#define RBHT_CHEVRON            0x0008\n#define RBHT_SPLITTER           0x0010\n\n#define RB_INSERTBANDA          (WM_USER+1)\n#define RB_INSERTBANDW          (WM_USER+10)\n#define RB_INSERTBAND           WINELIB_NAME_AW(RB_INSERTBAND)\n#define RB_DELETEBAND           (WM_USER+2)\n#define RB_GETBARINFO           (WM_USER+3)\n#define RB_SETBARINFO           (WM_USER+4)\n#define RB_SETBANDINFOA         (WM_USER+6)\n#define RB_SETBANDINFOW         (WM_USER+11)\n#define RB_SETBANDINFO          WINELIB_NAME_AW(RB_SETBANDINFO)\n#define RB_SETPARENT            (WM_USER+7)\n#define RB_HITTEST              (WM_USER+8)\n#define RB_GETRECT              (WM_USER+9)\n#define RB_GETBANDCOUNT         (WM_USER+12)\n#define RB_GETROWCOUNT          (WM_USER+13)\n#define RB_GETROWHEIGHT         (WM_USER+14)\n#define RB_IDTOINDEX            (WM_USER+16)\n#define RB_GETTOOLTIPS          (WM_USER+17)\n#define RB_SETTOOLTIPS          (WM_USER+18)\n#define RB_SETBKCOLOR           (WM_USER+19)\n#define RB_GETBKCOLOR           (WM_USER+20)\n#define RB_SETTEXTCOLOR         (WM_USER+21)\n#define RB_GETTEXTCOLOR         (WM_USER+22)\n#define RB_SIZETORECT           (WM_USER+23)\n#define RB_BEGINDRAG            (WM_USER+24)\n#define RB_ENDDRAG              (WM_USER+25)\n#define RB_DRAGMOVE             (WM_USER+26)\n#define RB_GETBARHEIGHT         (WM_USER+27)\n#define RB_GETBANDINFOW         (WM_USER+28)\n#define RB_GETBANDINFOA         (WM_USER+29)\n#define RB_GETBANDINFO          WINELIB_NAME_AW(RB_GETBANDINFO)\n#define RB_MINIMIZEBAND         (WM_USER+30)\n#define RB_MAXIMIZEBAND         (WM_USER+31)\n#define RB_GETBANDBORDERS       (WM_USER+34)\n#define RB_SHOWBAND             (WM_USER+35)\n#define RB_SETPALETTE           (WM_USER+37)\n#define RB_GETPALETTE           (WM_USER+38)\n#define RB_MOVEBAND             (WM_USER+39)\n#define RB_GETBANDMARGINS       (WM_USER+40)\n#define RB_SETEXTENDEDSTYLE     (WM_USER+41)\n#define RB_GETEXTENDEDSTYLE     (WM_USER+42)\n#define RB_PUSHCHEVRON          (WM_USER+43)\n#define RB_SETBANDWIDTH         (WM_USER+44)\n\n#define RB_GETDROPTARGET        CCM_GETDROPTARGET\n#define RB_SETCOLORSCHEME       CCM_SETCOLORSCHEME\n#define RB_GETCOLORSCHEME       CCM_GETCOLORSCHEME\n#define RB_SETUNICODEFORMAT     CCM_SETUNICODEFORMAT\n#define RB_GETUNICODEFORMAT     CCM_GETUNICODEFORMAT\n#define RB_SETWINDOWTHEME       CCM_SETWINDOWTHEME\n\n#define RBN_FIRST               (0U-831U)\n#define RBN_LAST                (0U-859U)\n#define RBN_HEIGHTCHANGE        (RBN_FIRST-0)\n#define RBN_GETOBJECT           (RBN_FIRST-1)\n#define RBN_LAYOUTCHANGED       (RBN_FIRST-2)\n#define RBN_AUTOSIZE            (RBN_FIRST-3)\n#define RBN_BEGINDRAG           (RBN_FIRST-4)\n#define RBN_ENDDRAG             (RBN_FIRST-5)\n#define RBN_DELETINGBAND        (RBN_FIRST-6)\n#define RBN_DELETEDBAND         (RBN_FIRST-7)\n#define RBN_CHILDSIZE           (RBN_FIRST-8)\n#define RBN_CHEVRONPUSHED       (RBN_FIRST-10)\n#define RBN_SPLITTERDRAG        (RBN_FIRST-11)\n#define RBN_MINMAX              (RBN_FIRST-21)\n#define RBN_AUTOBREAK           (RBN_FIRST-22)\n\ntypedef struct tagREBARINFO\n{\n    UINT     cbSize;\n    UINT     fMask;\n    HIMAGELIST himl;\n} REBARINFO, *LPREBARINFO;\n\ntypedef struct tagREBARBANDINFOA\n{\n    UINT    cbSize;\n    UINT    fMask;\n    UINT    fStyle;\n    COLORREF  clrFore;\n    COLORREF  clrBack;\n    LPSTR     lpText;\n    UINT    cch;\n    INT     iImage;\n    HWND    hwndChild;\n    UINT    cxMinChild;\n    UINT    cyMinChild;\n    UINT    cx;\n    HBITMAP hbmBack;\n    UINT    wID;\n    UINT    cyChild;\n    UINT    cyMaxChild;\n    UINT    cyIntegral;\n    UINT    cxIdeal;\n    LPARAM    lParam;\n    UINT    cxHeader;\n    /* _WIN32_WINNT >= 0x0600 */\n    RECT    rcChevronLocation;\n    UINT    uChevronState;\n} REBARBANDINFOA, *LPREBARBANDINFOA;\n\ntypedef REBARBANDINFOA const *LPCREBARBANDINFOA;\n\ntypedef struct tagREBARBANDINFOW\n{\n    UINT    cbSize;\n    UINT    fMask;\n    UINT    fStyle;\n    COLORREF  clrFore;\n    COLORREF  clrBack;\n    LPWSTR    lpText;\n    UINT    cch;\n    INT     iImage;\n    HWND    hwndChild;\n    UINT    cxMinChild;\n    UINT    cyMinChild;\n    UINT    cx;\n    HBITMAP hbmBack;\n    UINT    wID;\n    UINT    cyChild;\n    UINT    cyMaxChild;\n    UINT    cyIntegral;\n    UINT    cxIdeal;\n    LPARAM    lParam;\n    UINT    cxHeader;\n    /* _WIN32_WINNT >= 0x0600 */\n    RECT    rcChevronLocation;\n    UINT    uChevronState;\n} REBARBANDINFOW, *LPREBARBANDINFOW;\n\ntypedef REBARBANDINFOW const *LPCREBARBANDINFOW;\n\n#define REBARBANDINFO    WINELIB_NAME_AW(REBARBANDINFO)\n#define LPREBARBANDINFO  WINELIB_NAME_AW(LPREBARBANDINFO)\n#define LPCREBARBANDINFO WINELIB_NAME_AW(LPCREBARBANDINFO)\n\n#define REBARBANDINFOA_V3_SIZE CCSIZEOF_STRUCT(REBARBANDINFOA, wID)\n#define REBARBANDINFOW_V3_SIZE CCSIZEOF_STRUCT(REBARBANDINFOW, wID)\n#define REBARBANDINFO_V3_SIZE  CCSIZEOF_STRUCT(WINELIB_NAME_AW(REBARBANDINFO), wID)\n#define REBARBANDINFOA_V6_SIZE CCSIZEOF_STRUCT(REBARBANDINFOA, cxHeader)\n#define REBARBANDINFOW_V6_SIZE CCSIZEOF_STRUCT(REBARBANDINFOW, cxHeader)\n#define REBARBANDINFO_V6_SIZE  CCSIZEOF_STRUCT(WINELIB_NAME_AW(REBARBANDINFO), cxHeader)\n\ntypedef struct tagNMREBARCHILDSIZE\n{\n    NMHDR  hdr;\n    UINT uBand;\n    UINT wID;\n    RECT rcChild;\n    RECT rcBand;\n} NMREBARCHILDSIZE, *LPNMREBARCHILDSIZE;\n\ntypedef struct tagNMREBAR\n{\n    NMHDR  hdr;\n    DWORD  dwMask;\n    UINT uBand;\n    UINT fStyle;\n    UINT wID;\n    LPARAM lParam;\n} NMREBAR, *LPNMREBAR;\n\ntypedef struct tagNMRBAUTOSIZE\n{\n    NMHDR hdr;\n    BOOL fChanged;\n    RECT rcTarget;\n    RECT rcActual;\n} NMRBAUTOSIZE, *LPNMRBAUTOSIZE;\n\ntypedef struct tagNMREBARCHEVRON\n{\n    NMHDR hdr;\n    UINT uBand;\n    UINT wID;\n    LPARAM lParam;\n    RECT rc;\n    LPARAM lParamNM;\n} NMREBARCHEVRON, *LPNMREBARCHEVRON;\n\ntypedef struct _RB_HITTESTINFO\n{\n    POINT pt;\n    UINT  flags;\n    INT   iBand;\n} RBHITTESTINFO, *LPRBHITTESTINFO;\n\n#define RBAB_AUTOSIZE   0x0001\n#define RBAB_ADDBAND    0x0002\n\ntypedef struct tagNMREBARAUTOBREAK\n{\n    NMHDR hdr;\n    UINT uBand;\n    UINT wID;\n    LPARAM lParam;\n    UINT uMsg;\n    UINT fStyleCurrent;\n    BOOL fAutoBreak;\n} NMREBARAUTOBREAK, *LPNMREBARAUTOBREAK;\n\n\n/* Trackbar control */\n\n#define TRACKBAR_CLASSA         \"msctls_trackbar32\"\n#if defined(__GNUC__)\n# define TRACKBAR_CLASSW (const WCHAR []){ 'm','s','c','t','l','s','_', \\\n  't','r','a','c','k','b','a','r','3','2',0 }\n#elif defined(_MSC_VER)\n# define TRACKBAR_CLASSW        L\"msctls_trackbar32\"\n#else\nstatic const WCHAR TRACKBAR_CLASSW[] = { 'm','s','c','t','l','s','_',\n  't','r','a','c','k','b','a','r','3','2',0 };\n#endif\n#define TRACKBAR_CLASS  WINELIB_NAME_AW(TRACKBAR_CLASS)\n\n\n#define TBTS_TOP                0\n#define TBTS_LEFT               1\n#define TBTS_BOTTOM             2\n#define TBTS_RIGHT              3\n\n#define TB_LINEUP               0\n#define TB_LINEDOWN             1\n#define TB_PAGEUP               2\n#define TB_PAGEDOWN             3\n#define TB_THUMBPOSITION        4\n#define TB_THUMBTRACK           5\n#define TB_TOP                  6\n#define TB_BOTTOM               7\n#define TB_ENDTRACK             8\n\n#define TBCD_TICS               0x0001\n#define TBCD_THUMB              0x0002\n#define TBCD_CHANNEL            0x0003\n\n#define TBM_GETPOS              (WM_USER)\n#define TBM_GETRANGEMIN         (WM_USER+1)\n#define TBM_GETRANGEMAX         (WM_USER+2)\n#define TBM_GETTIC              (WM_USER+3)\n#define TBM_SETTIC              (WM_USER+4)\n#define TBM_SETPOS              (WM_USER+5)\n#define TBM_SETRANGE            (WM_USER+6)\n#define TBM_SETRANGEMIN         (WM_USER+7)\n#define TBM_SETRANGEMAX         (WM_USER+8)\n#define TBM_CLEARTICS           (WM_USER+9)\n#define TBM_SETSEL              (WM_USER+10)\n#define TBM_SETSELSTART         (WM_USER+11)\n#define TBM_SETSELEND           (WM_USER+12)\n#define TBM_GETPTICS            (WM_USER+14)\n#define TBM_GETTICPOS           (WM_USER+15)\n#define TBM_GETNUMTICS          (WM_USER+16)\n#define TBM_GETSELSTART         (WM_USER+17)\n#define TBM_GETSELEND           (WM_USER+18)\n#define TBM_CLEARSEL            (WM_USER+19)\n#define TBM_SETTICFREQ          (WM_USER+20)\n#define TBM_SETPAGESIZE         (WM_USER+21)\n#define TBM_GETPAGESIZE         (WM_USER+22)\n#define TBM_SETLINESIZE         (WM_USER+23)\n#define TBM_GETLINESIZE         (WM_USER+24)\n#define TBM_GETTHUMBRECT        (WM_USER+25)\n#define TBM_GETCHANNELRECT      (WM_USER+26)\n#define TBM_SETTHUMBLENGTH      (WM_USER+27)\n#define TBM_GETTHUMBLENGTH      (WM_USER+28)\n#define TBM_SETTOOLTIPS         (WM_USER+29)\n#define TBM_GETTOOLTIPS         (WM_USER+30)\n#define TBM_SETTIPSIDE          (WM_USER+31)\n#define TBM_SETBUDDY            (WM_USER+32)\n#define TBM_GETBUDDY            (WM_USER+33)\n#define TBM_SETPOSNOTIFY        (WM_USER+34)\n#define TBM_SETUNICODEFORMAT    CCM_SETUNICODEFORMAT\n#define TBM_GETUNICODEFORMAT    CCM_GETUNICODEFORMAT\n\n#define TRBN_FIRST              (0u-1501u)\n#define TRBN_LAST               (0u-1519u)\n#define TRBN_THUMBPOSCHANGING   (TRBN_FIRST-1)\n\n/* Pager control */\n\n#define WC_PAGESCROLLERA      \"SysPager\"\n#if defined(__GNUC__)\n# define WC_PAGESCROLLERW (const WCHAR []){ 'S','y','s','P','a','g','e','r',0 }\n#elif defined(_MSC_VER)\n# define WC_PAGESCROLLERW     L\"SysPager\"\n#else\nstatic const WCHAR WC_PAGESCROLLERW[] = { 'S','y','s','P','a','g','e','r',0 };\n#endif\n#define WC_PAGESCROLLER  WINELIB_NAME_AW(WC_PAGESCROLLER)\n\n\n#define PGF_INVISIBLE           0\n#define PGF_NORMAL              1\n#define PGF_GRAYED              2\n#define PGF_DEPRESSED           4\n#define PGF_HOT                 8\n\n#define PGB_TOPORLEFT           0\n#define PGB_BOTTOMORRIGHT       1\n\n/* only used with PGN_SCROLL */\n#define PGF_SCROLLUP            1\n#define PGF_SCROLLDOWN          2\n#define PGF_SCROLLLEFT          4\n#define PGF_SCROLLRIGHT         8\n\n#define PGK_SHIFT               1\n#define PGK_CONTROL             2\n#define PGK_MENU                4\n\n/* only used with PGN_CALCSIZE */\n#define PGF_CALCWIDTH           1\n#define PGF_CALCHEIGHT          2\n\n#define PGM_FIRST               0x1400\n#define PGM_SETCHILD            (PGM_FIRST+1)\n#define PGM_RECALCSIZE          (PGM_FIRST+2)\n#define PGM_FORWARDMOUSE        (PGM_FIRST+3)\n#define PGM_SETBKCOLOR          (PGM_FIRST+4)\n#define PGM_GETBKCOLOR          (PGM_FIRST+5)\n#define PGM_SETBORDER           (PGM_FIRST+6)\n#define PGM_GETBORDER           (PGM_FIRST+7)\n#define PGM_SETPOS              (PGM_FIRST+8)\n#define PGM_GETPOS              (PGM_FIRST+9)\n#define PGM_SETBUTTONSIZE       (PGM_FIRST+10)\n#define PGM_GETBUTTONSIZE       (PGM_FIRST+11)\n#define PGM_GETBUTTONSTATE      (PGM_FIRST+12)\n#define PGM_GETDROPTARGET       CCM_GETDROPTARGET\n\n#define PGN_FIRST               (0U-900U)\n#define PGN_LAST                (0U-950U)\n#define PGN_SCROLL              (PGN_FIRST-1)\n#define PGN_CALCSIZE            (PGN_FIRST-2)\n#define PGN_HOTITEMCHANGE       (PGN_FIRST-3)\n\n#include <pshpack1.h>\n\ntypedef struct\n{\n    NMHDR hdr;\n    WORD  fwKeys;\n    RECT rcParent;\n    INT  iDir;\n    INT  iXpos;\n    INT  iYpos;\n    INT  iScroll;\n} NMPGSCROLL, *LPNMPGSCROLL;\n\n#include <poppack.h>\n\ntypedef struct\n{\n    NMHDR hdr;\n    DWORD dwFlag;\n    INT iWidth;\n    INT iHeight;\n} NMPGCALCSIZE, *LPNMPGCALCSIZE;\n\n\n/* Treeview control */\n\n#define WC_TREEVIEWA          \"SysTreeView32\"\n#if defined(__GNUC__)\n# define WC_TREEVIEWW (const WCHAR []){ 'S','y','s', \\\n  'T','r','e','e','V','i','e','w','3','2',0 }\n#elif defined(_MSC_VER)\n# define WC_TREEVIEWW         L\"SysTreeView32\"\n#else\nstatic const WCHAR WC_TREEVIEWW[] = { 'S','y','s',\n  'T','r','e','e','V','i','e','w','3','2',0 };\n#endif\n#define WC_TREEVIEW             WINELIB_NAME_AW(WC_TREEVIEW)\n\n#define TVSIL_NORMAL            0\n#define TVSIL_STATE             2\n\n#define TVSBF_XBORDER           1\n#define TVSBF_YBORDER           2\n\n#define TV_FIRST                0x1100\n#define TVM_INSERTITEMA         (TV_FIRST+0)\n#define TVM_INSERTITEMW         (TV_FIRST+50)\n#define TVM_INSERTITEM          WINELIB_NAME_AW(TVM_INSERTITEM)\n#define TVM_DELETEITEM          (TV_FIRST+1)\n#define TVM_EXPAND              (TV_FIRST+2)\n#define TVM_GETITEMRECT         (TV_FIRST+4)\n#define TVM_GETCOUNT            (TV_FIRST+5)\n#define TVM_GETINDENT           (TV_FIRST+6)\n#define TVM_SETINDENT           (TV_FIRST+7)\n#define TVM_GETIMAGELIST        (TV_FIRST+8)\n#define TVM_SETIMAGELIST        (TV_FIRST+9)\n#define TVM_GETNEXTITEM         (TV_FIRST+10)\n#define TVM_SELECTITEM          (TV_FIRST+11)\n#define TVM_GETITEMA            (TV_FIRST+12)\n#define TVM_GETITEMW            (TV_FIRST+62)\n#define TVM_GETITEM             WINELIB_NAME_AW(TVM_GETITEM)\n#define TVM_SETITEMA            (TV_FIRST+13)\n#define TVM_SETITEMW            (TV_FIRST+63)\n#define TVM_SETITEM             WINELIB_NAME_AW(TVM_SETITEM)\n#define TVM_EDITLABELA          (TV_FIRST+14)\n#define TVM_EDITLABELW          (TV_FIRST+65)\n#define TVM_EDITLABEL           WINELIB_NAME_AW(TVM_EDITLABEL)\n#define TVM_GETEDITCONTROL      (TV_FIRST+15)\n#define TVM_GETVISIBLECOUNT     (TV_FIRST+16)\n#define TVM_HITTEST             (TV_FIRST+17)\n#define TVM_CREATEDRAGIMAGE     (TV_FIRST+18)\n#define TVM_SORTCHILDREN        (TV_FIRST+19)\n#define TVM_ENSUREVISIBLE       (TV_FIRST+20)\n#define TVM_SORTCHILDRENCB      (TV_FIRST+21)\n#define TVM_ENDEDITLABELNOW     (TV_FIRST+22)\n#define TVM_GETISEARCHSTRINGA   (TV_FIRST+23)\n#define TVM_GETISEARCHSTRINGW   (TV_FIRST+64)\n#define TVM_GETISEARCHSTRING    WINELIB_NAME_AW(TVM_GETISEARCHSTRING)\n#define TVM_SETTOOLTIPS         (TV_FIRST+24)\n#define TVM_GETTOOLTIPS         (TV_FIRST+25)\n#define TVM_SETINSERTMARK       (TV_FIRST+26)\n#define TVM_SETITEMHEIGHT       (TV_FIRST+27)\n#define TVM_GETITEMHEIGHT       (TV_FIRST+28)\n#define TVM_SETBKCOLOR          (TV_FIRST+29)\n#define TVM_SETTEXTCOLOR        (TV_FIRST+30)\n#define TVM_GETBKCOLOR          (TV_FIRST+31)\n#define TVM_GETTEXTCOLOR        (TV_FIRST+32)\n#define TVM_SETSCROLLTIME       (TV_FIRST+33)\n#define TVM_GETSCROLLTIME       (TV_FIRST+34)\n#define TVM_SETBORDER           (TV_FIRST+35)\n#define TVM_UNKNOWN36           (TV_FIRST+36)\n#define TVM_SETINSERTMARKCOLOR  (TV_FIRST+37)\n#define TVM_GETINSERTMARKCOLOR  (TV_FIRST+38)\n#define TVM_GETITEMSTATE        (TV_FIRST+39)\n#define TVM_SETLINECOLOR        (TV_FIRST+40)\n#define TVM_GETLINECOLOR        (TV_FIRST+41)\n#define TVM_SETUNICODEFORMAT    CCM_SETUNICODEFORMAT\n#define TVM_GETUNICODEFORMAT    CCM_GETUNICODEFORMAT\n#define TVM_MAPACCIDTOHTREEITEM (TV_FIRST + 42)\n#define TVM_MAPHTREEITEMTOACCID (TV_FIRST + 43)\n#define TVM_SETEXTENDEDSTYLE    (TV_FIRST + 44)\n#define TVM_GETEXTENDEDSTYLE    (TV_FIRST + 45)\n#define TVM_SETAUTOSCROLLINFO   (TV_FIRST + 59)\n#define TVM_GETSELECTEDCOUNT    (TV_FIRST + 70)\n#define TVM_SHOWINFOTIP         (TV_FIRST + 71)\n#define TVM_GETITEMPARTRECT     (TV_FIRST + 72)\n\n\n#define TVN_FIRST               (0U-400U)\n#define TVN_LAST                (0U-499U)\n\n#define TVN_SELCHANGINGA        (TVN_FIRST-1)\n#define TVN_SELCHANGINGW        (TVN_FIRST-50)\n#define TVN_SELCHANGING         WINELIB_NAME_AW(TVN_SELCHANGING)\n\n#define TVN_SELCHANGEDA         (TVN_FIRST-2)\n#define TVN_SELCHANGEDW         (TVN_FIRST-51)\n#define TVN_SELCHANGED          WINELIB_NAME_AW(TVN_SELCHANGED)\n\n#define TVN_GETDISPINFOA        (TVN_FIRST-3)\n#define TVN_GETDISPINFOW        (TVN_FIRST-52)\n#define TVN_GETDISPINFO         WINELIB_NAME_AW(TVN_GETDISPINFO)\n\n#define TVN_SETDISPINFOA        (TVN_FIRST-4)\n#define TVN_SETDISPINFOW        (TVN_FIRST-53)\n#define TVN_SETDISPINFO         WINELIB_NAME_AW(TVN_SETDISPINFO)\n\n#define TVN_ITEMEXPANDINGA      (TVN_FIRST-5)\n#define TVN_ITEMEXPANDINGW      (TVN_FIRST-54)\n#define TVN_ITEMEXPANDING       WINELIB_NAME_AW(TVN_ITEMEXPANDING)\n\n#define TVN_ITEMEXPANDEDA       (TVN_FIRST-6)\n#define TVN_ITEMEXPANDEDW       (TVN_FIRST-55)\n#define TVN_ITEMEXPANDED        WINELIB_NAME_AW(TVN_ITEMEXPANDED)\n\n#define TVN_BEGINDRAGA          (TVN_FIRST-7)\n#define TVN_BEGINDRAGW          (TVN_FIRST-56)\n#define TVN_BEGINDRAG           WINELIB_NAME_AW(TVN_BEGINDRAG)\n\n#define TVN_BEGINRDRAGA         (TVN_FIRST-8)\n#define TVN_BEGINRDRAGW         (TVN_FIRST-57)\n#define TVN_BEGINRDRAG          WINELIB_NAME_AW(TVN_BEGINRDRAG)\n\n#define TVN_DELETEITEMA         (TVN_FIRST-9)\n#define TVN_DELETEITEMW         (TVN_FIRST-58)\n#define TVN_DELETEITEM          WINELIB_NAME_AW(TVN_DELETEITEM)\n\n#define TVN_BEGINLABELEDITA     (TVN_FIRST-10)\n#define TVN_BEGINLABELEDITW     (TVN_FIRST-59)\n#define TVN_BEGINLABELEDIT      WINELIB_NAME_AW(TVN_BEGINLABELEDIT)\n\n#define TVN_ENDLABELEDITA       (TVN_FIRST-11)\n#define TVN_ENDLABELEDITW       (TVN_FIRST-60)\n#define TVN_ENDLABELEDIT        WINELIB_NAME_AW(TVN_ENDLABELEDIT)\n\n#define TVN_KEYDOWN             (TVN_FIRST-12)\n\n#define TVN_GETINFOTIPA         (TVN_FIRST-13)\n#define TVN_GETINFOTIPW         (TVN_FIRST-14)\n#define TVN_GETINFOTIP          WINELIB_NAME_AW(TVN_GETINFOTIP)\n\n#define TVN_SINGLEEXPAND        (TVN_FIRST-15)\n\n#define TVN_ITEMCHANGINGA       (TVN_FIRST-16)\n#define TVN_ITEMCHANGINGW       (TVN_FIRST-17)\n#define TVN_ITEMCHANGEDA        (TVN_FIRST-18)\n#define TVN_ITEMCHANGEDW        (TVN_FIRST-19)\n#define TVN_ASYNCDRAW           (TVN_FIRST-20)\n\n#define TVIF_TEXT             0x0001\n#define TVIF_IMAGE            0x0002\n#define TVIF_PARAM            0x0004\n#define TVIF_STATE            0x0008\n#define TVIF_HANDLE           0x0010\n#define TVIF_SELECTEDIMAGE    0x0020\n#define TVIF_CHILDREN         0x0040\n#define TVIF_INTEGRAL         0x0080\n#define TVIF_STATEEX          0x0100\n#define TVIF_EXPANDEDIMAGE    0x0200\n#define TVIF_DI_SETITEM\t      0x1000\n\n#define TVI_ROOT              ((HTREEITEM)-65536)\n#define TVI_FIRST             ((HTREEITEM)-65535)\n#define TVI_LAST              ((HTREEITEM)-65534)\n#define TVI_SORT              ((HTREEITEM)-65533)\n\n#define TVIS_FOCUSED          0x0001\n#define TVIS_SELECTED         0x0002\n#define TVIS_CUT              0x0004\n#define TVIS_DROPHILITED      0x0008\n#define TVIS_BOLD             0x0010\n#define TVIS_EXPANDED         0x0020\n#define TVIS_EXPANDEDONCE     0x0040\n#define TVIS_EXPANDPARTIAL    0x0080\n#define TVIS_OVERLAYMASK      0x0f00\n#define TVIS_STATEIMAGEMASK   0xf000\n#define TVIS_USERMASK         0xf000\n\n#define TVIS_EX_FLAT          0x0001\n#define TVIS_EX_DISABLED      0x0002\n/* TVIS_EX_HWND is listed on MSDN but apparently not in any header. */\n#define TVIS_EX_ALL           0x0002\n\n#define TVHT_NOWHERE          0x0001\n#define TVHT_ONITEMICON       0x0002\n#define TVHT_ONITEMLABEL      0x0004\n#define TVHT_ONITEMINDENT     0x0008\n#define TVHT_ONITEMBUTTON     0x0010\n#define TVHT_ONITEMRIGHT      0x0020\n#define TVHT_ONITEMSTATEICON  0x0040\n#define TVHT_ONITEM           (TVHT_ONITEMICON | TVHT_ONITEMLABEL | TVHT_ONITEMSTATEICON)\n#define TVHT_ABOVE            0x0100\n#define TVHT_BELOW            0x0200\n#define TVHT_TORIGHT          0x0400\n#define TVHT_TOLEFT           0x0800\n\n#define TVS_SHAREDIMAGELISTS  0x0000\n#define TVS_PRIVATEIMAGELISTS 0x0400\n\n#define TVS_EX_NOSINGLECOLLAPSE    0x0001\n#define TVS_EX_MULTISELECT         0x0002\n#define TVS_EX_DOUBLEBUFFER        0x0004\n#define TVS_EX_NOINDENTSTATE       0x0008\n#define TVS_EX_RICHTOOLTIP         0x0010\n#define TVS_EX_AUTOHSCROLL         0x0020\n#define TVS_EX_FADEINOUTEXPANDOS   0x0040\n#define TVS_EX_PARTIALCHECKBOXES   0x0080\n#define TVS_EX_EXCLUSIONCHECKBOXES 0x0100\n#define TVS_EX_DIMMEDCHECKBOXES    0x0200\n#define TVS_EX_DRAWIMAGEASYNC      0x0400\n\n#define TVE_COLLAPSE          0x0001\n#define TVE_EXPAND            0x0002\n#define TVE_TOGGLE            0x0003\n#define TVE_EXPANDPARTIAL     0x4000\n#define TVE_COLLAPSERESET     0x8000\n\n#define TVGN_ROOT             0\n#define TVGN_NEXT             1\n#define TVGN_PREVIOUS         2\n#define TVGN_PARENT           3\n#define TVGN_CHILD            4\n#define TVGN_FIRSTVISIBLE     5\n#define TVGN_NEXTVISIBLE      6\n#define TVGN_PREVIOUSVISIBLE  7\n#define TVGN_DROPHILITE       8\n#define TVGN_CARET            9\n#define TVGN_LASTVISIBLE      10\n#define TVGN_NEXTSELECTED     11\n#define TVSI_NOSINGLEEXPAND   0x8000\n\n#define TVC_UNKNOWN           0x00\n#define TVC_BYMOUSE           0x01\n#define TVC_BYKEYBOARD        0x02\n\n\ntypedef struct _TREEITEM *HTREEITEM;\n\ntypedef struct {\n      UINT mask;\n      HTREEITEM hItem;\n      UINT state;\n      UINT stateMask;\n      LPSTR  pszText;\n      INT  cchTextMax;\n      INT  iImage;\n      INT  iSelectedImage;\n      INT  cChildren;\n      LPARAM lParam;\n} TVITEMA, *LPTVITEMA;\n\ntypedef struct {\n      UINT mask;\n      HTREEITEM hItem;\n      UINT state;\n      UINT stateMask;\n      LPWSTR pszText;\n      INT cchTextMax;\n      INT iImage;\n      INT iSelectedImage;\n      INT cChildren;\n      LPARAM lParam;\n} TVITEMW, *LPTVITEMW;\n\n#define TV_ITEMA    TVITEMA\n#define TV_ITEMW    TVITEMW\n#define LPTV_ITEMA  LPTVITEMA\n#define LPTV_ITEMW  LPTVITEMW\n\n#define TVITEM      WINELIB_NAME_AW(TVITEM)\n#define LPTVITEM    WINELIB_NAME_AW(LPTVITEM)\n#define TV_ITEM     WINELIB_NAME_AW(TV_ITEM)\n#define LPTV_ITEM   WINELIB_NAME_AW(LPTV_ITEM)\n\ntypedef struct {\n      UINT mask;\n      HTREEITEM hItem;\n      UINT state;\n      UINT stateMask;\n      LPSTR  pszText;\n      INT  cchTextMax;\n      INT  iImage;\n      INT  iSelectedImage;\n      INT  cChildren;\n      LPARAM lParam;\n      INT iIntegral;\n      UINT uStateEx;        /* _WIN32_IE >= 0x600 */\n      HWND hwnd;            /* _WIN32_IE >= 0x600 */\n      INT iExpandedImage;   /* _WIN32_IE >= 0x600 */\n      INT iReserved;\n} TVITEMEXA, *LPTVITEMEXA;\n\ntypedef struct {\n      UINT mask;\n      HTREEITEM hItem;\n      UINT state;\n      UINT stateMask;\n      LPWSTR pszText;\n      INT cchTextMax;\n      INT iImage;\n      INT iSelectedImage;\n      INT cChildren;\n      LPARAM lParam;\n      INT iIntegral;\n      UINT uStateEx;        /* _WIN32_IE >= 0x600 */\n      HWND hwnd;            /* _WIN32_IE >= 0x600 */\n      INT iExpandedImage;   /* _WIN32_IE >= 0x600 */\n      INT iReserved;\n} TVITEMEXW, *LPTVITEMEXW;\n\n#define TVITEMEX   WINELIB_NAME_AW(TVITEMEX)\n#define LPTVITEMEX WINELIB_NAME_AW(LPTVITEMEX)\n\ntypedef struct tagTVINSERTSTRUCTA {\n        HTREEITEM hParent;\n        HTREEITEM hInsertAfter;\n        union {\n           TVITEMEXA itemex;\n           TVITEMA   item;\n        } DUMMYUNIONNAME;\n} TVINSERTSTRUCTA, *LPTVINSERTSTRUCTA;\n\ntypedef struct tagTVINSERTSTRUCTW {\n        HTREEITEM hParent;\n        HTREEITEM hInsertAfter;\n        union {\n           TVITEMEXW itemex;\n           TVITEMW   item;\n        } DUMMYUNIONNAME;\n} TVINSERTSTRUCTW, *LPTVINSERTSTRUCTW;\n\n#define TVINSERTSTRUCT    WINELIB_NAME_AW(TVINSERTSTRUCT)\n#define LPTVINSERTSTRUCT  WINELIB_NAME_AW(LPTVINSERTSTRUCT)\n\n#define TVINSERTSTRUCT_V1_SIZEA CCSIZEOF_STRUCT(TVINSERTSTRUCTA, item)\n#define TVINSERTSTRUCT_V1_SIZEW CCSIZEOF_STRUCT(TVINSERTSTRUCTW, item)\n#define TVINSERTSTRUCT_V1_SIZE    WINELIB_NAME_AW(TVINSERTSTRUCT_V1_SIZE)\n\n#define TV_INSERTSTRUCT    TVINSERTSTRUCT\n#define TV_INSERTSTRUCTA   TVINSERTSTRUCTA\n#define TV_INSERTSTRUCTW   TVINSERTSTRUCTW\n#define LPTV_INSERTSTRUCT  LPTVINSERTSTRUCT\n#define LPTV_INSERTSTRUCTA LPTVINSERTSTRUCTA\n#define LPTV_INSERTSTRUCTW LPTVINSERTSTRUCTW\n\n\n\ntypedef struct tagNMTREEVIEWA {\n\tNMHDR\thdr;\n\tUINT\taction;\n\tTVITEMA\titemOld;\n\tTVITEMA\titemNew;\n\tPOINT\tptDrag;\n} NMTREEVIEWA, *LPNMTREEVIEWA;\n\ntypedef struct tagNMTREEVIEWW {\n\tNMHDR\thdr;\n\tUINT\taction;\n\tTVITEMW\titemOld;\n\tTVITEMW\titemNew;\n\tPOINT\tptDrag;\n} NMTREEVIEWW, *LPNMTREEVIEWW;\n\n#define NMTREEVIEW     WINELIB_NAME_AW(NMTREEVIEW)\n#define NM_TREEVIEW    WINELIB_NAME_AW(NMTREEVIEW)\n#define NM_TREEVIEWA   NMTREEVIEWA\n#define NM_TREEVIEWW   NMTREEVIEWW\n#define LPNMTREEVIEW   WINELIB_NAME_AW(LPNMTREEVIEW)\n\n#define LPNM_TREEVIEW  LPNMTREEVIEW\n#define LPNM_TREEVIEWA LPNMTREEVIEWA\n#define LPNM_TREEVIEWW LPNMTREEVIEWW\n\ntypedef struct tagTVDISPINFOA {\n\tNMHDR\thdr;\n\tTVITEMA\titem;\n} NMTVDISPINFOA, *LPNMTVDISPINFOA;\n\ntypedef struct tagTVDISPINFOW {\n\tNMHDR\thdr;\n\tTVITEMW\titem;\n} NMTVDISPINFOW, *LPNMTVDISPINFOW;\n\ntypedef struct tagTVDISPINFOEXA {\n\tNMHDR\thdr;\n\tTVITEMEXA\titem;\n} NMTVDISPINFOEXA, *LPNMTVDISPINFOEXA;\n\ntypedef struct tagTVDISPINFOEXW {\n\tNMHDR\thdr;\n\tTVITEMEXW\titem;\n} NMTVDISPINFOEXW, *LPNMTVDISPINFOEXW;\n\n#define NMTVDISPINFO            WINELIB_NAME_AW(NMTVDISPINFO)\n#define LPNMTVDISPINFO          WINELIB_NAME_AW(LPNMTVDISPINFO)\n#define NMTVDISPINFOEX          WINELIB_NAME_AW(NMTVDISPINFOEX)\n#define LPNMTVDISPINFOEX        WINELIB_NAME_AW(LPNMTVDISPINFOEX)\n#define TV_DISPINFOA            NMTVDISPINFOA\n#define TV_DISPINFOW            NMTVDISPINFOW\n#define TV_DISPINFO             NMTVDISPINFO\n\ntypedef INT (CALLBACK *PFNTVCOMPARE)(LPARAM, LPARAM, LPARAM);\n\ntypedef struct tagTVSORTCB\n{\n\tHTREEITEM hParent;\n\tPFNTVCOMPARE lpfnCompare;\n\tLPARAM lParam;\n} TVSORTCB, *LPTVSORTCB;\n\n#define TV_SORTCB TVSORTCB\n#define LPTV_SORTCB LPTVSORTCB\n\ntypedef struct tagTVHITTESTINFO {\n        POINT pt;\n        UINT flags;\n        HTREEITEM hItem;\n} TVHITTESTINFO, *LPTVHITTESTINFO;\n\n#define TV_HITTESTINFO TVHITTESTINFO\n\n\n/* Custom Draw Treeview */\n\n#define NMTVCUSTOMDRAW_V3_SIZE CCSIZEOF_STRUCT(NMTVCUSTOMDRAW, clrTextBk)\n\n#define TVCDRF_NOIMAGES     0x00010000\n\ntypedef struct tagNMTVCUSTOMDRAW\n{\n    NMCUSTOMDRAW nmcd;\n    COLORREF     clrText;\n    COLORREF     clrTextBk;\n    INT iLevel;                 /* IE>0x0400 */\n} NMTVCUSTOMDRAW, *LPNMTVCUSTOMDRAW;\n\n/* Treeview tooltips */\n\ntypedef struct tagNMTVGETINFOTIPA\n{\n    NMHDR hdr;\n    LPSTR pszText;\n    INT cchTextMax;\n    HTREEITEM hItem;\n    LPARAM lParam;\n} NMTVGETINFOTIPA, *LPNMTVGETINFOTIPA;\n\ntypedef struct tagNMTVGETINFOTIPW\n{\n    NMHDR hdr;\n    LPWSTR pszText;\n    INT cchTextMax;\n    HTREEITEM hItem;\n    LPARAM lParam;\n} NMTVGETINFOTIPW, *LPNMTVGETINFOTIPW;\n\n#define NMTVGETINFOTIP WINELIB_NAME_AW(NMTVGETINFOTIP)\n#define LPNMTVGETINFOTIP WINELIB_NAME_AW(LPNMTVGETINFOTIP)\n\ntypedef enum _TVITEMPART\n{\n    TVGIPR_BUTTON = 1\n} TVITEMPART;\n\ntypedef struct tagTVGETITEMPARTRECTINFO\n{\n    HTREEITEM hti;\n    RECT *prc;\n    TVITEMPART partID;\n} TVGETITEMPARTRECTINFO;\n\ntypedef struct tagTVITEMCHANGE\n{\n    NMHDR hdr;\n    UINT uChanged;\n    HTREEITEM hItem;\n    UINT uStateNew;\n    UINT uStateOld;\n    LPARAM lParam;\n} NMTVITEMCHANGE;\n\ntypedef struct tagNMTVASYNCDRAW\n{\n    NMHDR hdr;\n    IMAGELISTDRAWPARAMS *pimldp;\n    HRESULT hr;\n    HTREEITEM hItem;\n    LPARAM lParam;\n    DWORD dwRetFlags;\n    int iRetImageIndex;\n} NMTVASYNCDRAW;\n\n#include <pshpack1.h>\ntypedef struct tagTVKEYDOWN\n{\n    NMHDR hdr;\n    WORD wVKey;\n    UINT flags;\n} NMTVKEYDOWN, *LPNMTVKEYDOWN;\n#include <poppack.h>\n\n#define TV_KEYDOWN      NMTVKEYDOWN\n\n#define TreeView_InsertItemA(hwnd, phdi) \\\n  (HTREEITEM)SNDMSGA((hwnd), TVM_INSERTITEMA, 0, \\\n                            (LPARAM)(LPTVINSERTSTRUCTA)(phdi))\n#define TreeView_InsertItemW(hwnd,phdi) \\\n  (HTREEITEM)SNDMSGW((hwnd), TVM_INSERTITEMW, 0, \\\n                            (LPARAM)(LPTVINSERTSTRUCTW)(phdi))\n#define TreeView_InsertItem WINELIB_NAME_AW(TreeView_InsertItem)\n\n#define TreeView_DeleteItem(hwnd, hItem) \\\n  (BOOL)SNDMSG((hwnd), TVM_DELETEITEM, 0, (LPARAM)(HTREEITEM)(hItem))\n#define TreeView_DeleteAllItems(hwnd) \\\n  (BOOL)SNDMSG((hwnd), TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT)\n#define TreeView_Expand(hwnd, hitem, code) \\\n (BOOL)SNDMSG((hwnd), TVM_EXPAND, (WPARAM)code, \\\n\t(LPARAM)(HTREEITEM)(hitem))\n\n#define TreeView_GetItemRect(hwnd, hitem, prc, code) \\\n (*(HTREEITEM *)prc = (hitem), (BOOL)SNDMSG((hwnd), \\\n\t\t\tTVM_GETITEMRECT, (WPARAM)(code), (LPARAM)(RECT *)(prc)))\n\n#define TreeView_GetCount(hwnd) \\\n    (UINT)SNDMSG((hwnd), TVM_GETCOUNT, 0, 0)\n#define TreeView_GetIndent(hwnd) \\\n    (UINT)SNDMSG((hwnd), TVM_GETINDENT, 0, 0)\n#define TreeView_SetIndent(hwnd, indent) \\\n    (BOOL)SNDMSG((hwnd), TVM_SETINDENT, (WPARAM)indent, 0)\n\n#define TreeView_GetImageList(hwnd, iImage) \\\n    (HIMAGELIST)SNDMSG((hwnd), TVM_GETIMAGELIST, iImage, 0)\n\n#define TreeView_SetImageList(hwnd, himl, iImage) \\\n    (HIMAGELIST)SNDMSG((hwnd), TVM_SETIMAGELIST, iImage, \\\n (LPARAM)(HIMAGELIST)(himl))\n\n#define TreeView_GetNextItem(hwnd, hitem, code) \\\n    (HTREEITEM)SNDMSG((hwnd), TVM_GETNEXTITEM, (WPARAM)code,\\\n(LPARAM)(HTREEITEM) (hitem))\n\n#define TreeView_GetChild(hwnd, hitem) \\\n\t \tTreeView_GetNextItem(hwnd, hitem , TVGN_CHILD)\n#define TreeView_GetNextSibling(hwnd, hitem) \\\n\t\tTreeView_GetNextItem(hwnd, hitem , TVGN_NEXT)\n#define TreeView_GetPrevSibling(hwnd, hitem) \\\n\t\tTreeView_GetNextItem(hwnd, hitem , TVGN_PREVIOUS)\n#define TreeView_GetParent(hwnd, hitem) \\\n\t\tTreeView_GetNextItem(hwnd, hitem , TVGN_PARENT)\n#define TreeView_GetFirstVisible(hwnd)  \\\n\t\tTreeView_GetNextItem(hwnd, NULL, TVGN_FIRSTVISIBLE)\n#define TreeView_GetLastVisible(hwnd)   \\\n\t\tTreeView_GetNextItem(hwnd, NULL, TVGN_LASTVISIBLE)\n#define TreeView_GetNextVisible(hwnd, hitem) \\\n\t\tTreeView_GetNextItem(hwnd, hitem , TVGN_NEXTVISIBLE)\n#define TreeView_GetPrevVisible(hwnd, hitem) \\\n\t\tTreeView_GetNextItem(hwnd, hitem , TVGN_PREVIOUSVISIBLE)\n#define TreeView_GetSelection(hwnd) \\\n\t\tTreeView_GetNextItem(hwnd, NULL, TVGN_CARET)\n#define TreeView_GetDropHilight(hwnd) \\\n\t\tTreeView_GetNextItem(hwnd, NULL, TVGN_DROPHILITE)\n#define TreeView_GetRoot(hwnd) \\\n\t\tTreeView_GetNextItem(hwnd, NULL, TVGN_ROOT)\n#define TreeView_GetLastVisible(hwnd) \\\n\t\tTreeView_GetNextItem(hwnd, NULL, TVGN_LASTVISIBLE)\n#define TreeView_GetNextSelected(hwnd) \\\n\t\tTreeView_GetNextItem(hwnd, NULL, TVGN_NEXTSELECTED)\n\n\n#define TreeView_Select(hwnd, hitem, code) \\\n (BOOL)SNDMSG((hwnd), TVM_SELECTITEM, (WPARAM)(code), \\\n(LPARAM)(HTREEITEM)(hitem))\n\n\n#define TreeView_SelectItem(hwnd, hitem) \\\n\t\tTreeView_Select(hwnd, hitem, TVGN_CARET)\n#define TreeView_SelectDropTarget(hwnd, hitem) \\\n       \tTreeView_Select(hwnd, hitem, TVGN_DROPHILITE)\n#define TreeView_SelectSetFirstVisible(hwnd, hitem) \\\n       \tTreeView_Select(hwnd, hitem, TVGN_FIRSTVISIBLE)\n\n\n#define TreeView_GetItemA(hwnd, pitem) \\\n (BOOL)SNDMSGA((hwnd), TVM_GETITEMA, 0, (LPARAM) (TVITEMA *)(pitem))\n#define TreeView_GetItemW(hwnd, pitem) \\\n (BOOL)SNDMSGW((hwnd), TVM_GETITEMW, 0, (LPARAM) (TVITEMW *)(pitem))\n#define TreeView_GetItem WINELIB_NAME_AW(TreeView_GetItem)\n\n#define TreeView_SetItemA(hwnd, pitem) \\\n (BOOL)SNDMSGA((hwnd), TVM_SETITEMA, 0, (LPARAM)(const TVITEMA *)(pitem))\n#define TreeView_SetItemW(hwnd, pitem) \\\n (BOOL)SNDMSGW((hwnd), TVM_SETITEMW, 0, (LPARAM)(const TVITEMW *)(pitem))\n#define TreeView_SetItem WINELIB_NAME_AW(TreeView_SetItem)\n\n#define TreeView_EditLabel(hwnd, hitem) \\\n    (HWND)SNDMSG((hwnd), TVM_EDITLABEL, 0, (LPARAM)(HTREEITEM)(hitem))\n\n#define TreeView_GetEditControl(hwnd) \\\n    (HWND)SNDMSG((hwnd), TVM_GETEDITCONTROL, 0, 0)\n\n#define TreeView_GetVisibleCount(hwnd) \\\n    (UINT)SNDMSG((hwnd), TVM_GETVISIBLECOUNT, 0, 0)\n\n#define TreeView_HitTest(hwnd, lpht) \\\n    (HTREEITEM)SNDMSG((hwnd), TVM_HITTEST, 0,\\\n(LPARAM)(LPTVHITTESTINFO)(lpht))\n\n#define TreeView_CreateDragImage(hwnd, hitem) \\\n    (HIMAGELIST)SNDMSG((hwnd), TVM_CREATEDRAGIMAGE, 0,\\\n(LPARAM)(HTREEITEM)(hitem))\n\n#define TreeView_SortChildren(hwnd, hitem, recurse) \\\n    (BOOL)SNDMSG((hwnd), TVM_SORTCHILDREN, (WPARAM)recurse,\\\n(LPARAM)(HTREEITEM)(hitem))\n\n#define TreeView_EnsureVisible(hwnd, hitem) \\\n    (BOOL)SNDMSG((hwnd), TVM_ENSUREVISIBLE, 0, (LPARAM)(UINT)(hitem))\n\n#define TreeView_SortChildrenCB(hwnd, psort, recurse) \\\n    (BOOL)SNDMSG((hwnd), TVM_SORTCHILDRENCB, (WPARAM)recurse, \\\n    (LPARAM)(LPTV_SORTCB)(psort))\n\n#define TreeView_EndEditLabelNow(hwnd, fCancel) \\\n    (BOOL)SNDMSG((hwnd), TVM_ENDEDITLABELNOW, (WPARAM)fCancel, 0)\n\n#define TreeView_GetISearchString(hwnd, lpsz) \\\n    (BOOL)SNDMSG((hwnd), TVM_GETISEARCHSTRING, 0, \\\n\t\t\t\t\t\t\t(LPARAM)(LPTSTR)lpsz)\n\n#define TreeView_SetToolTips(hwnd,  hwndTT) \\\n    (HWND)SNDMSG((hwnd), TVM_SETTOOLTIPS, (WPARAM)(hwndTT), 0)\n\n#define TreeView_GetToolTips(hwnd) \\\n    (HWND)SNDMSG((hwnd), TVM_GETTOOLTIPS, 0, 0)\n\n#define TreeView_SetItemHeight(hwnd,  iHeight) \\\n    (INT)SNDMSG((hwnd), TVM_SETITEMHEIGHT, (WPARAM)iHeight, 0)\n\n#define TreeView_GetItemHeight(hwnd) \\\n    (INT)SNDMSG((hwnd), TVM_GETITEMHEIGHT, 0, 0)\n\n#define TreeView_SetBkColor(hwnd, clr) \\\n    (COLORREF)SNDMSG((hwnd), TVM_SETBKCOLOR, 0, (LPARAM)clr)\n\n#define TreeView_SetTextColor(hwnd, clr) \\\n    (COLORREF)SNDMSG((hwnd), TVM_SETTEXTCOLOR, 0, (LPARAM)clr)\n\n#define TreeView_GetBkColor(hwnd) \\\n    (COLORREF)SNDMSG((hwnd), TVM_GETBKCOLOR, 0, 0)\n\n#define TreeView_GetTextColor(hwnd) \\\n    (COLORREF)SNDMSG((hwnd), TVM_GETTEXTCOLOR, 0, 0)\n\n#define TreeView_SetScrollTime(hwnd, uTime) \\\n    (UINT)SNDMSG((hwnd), TVM_SETSCROLLTIME, uTime, 0)\n\n#define TreeView_GetScrollTime(hwnd) \\\n    (UINT)SNDMSG((hwnd), TVM_GETSCROLLTIME, 0, 0)\n\n#define TreeView_SetInsertMark(hwnd, hItem, fAfter) \\\n    (BOOL)SNDMSG((hwnd), TVM_SETINSERTMARK, (WPARAM)(fAfter), \\\n                       (LPARAM) (hItem))\n\n#define TreeView_SetInsertMarkColor(hwnd, clr) \\\n    (COLORREF)SNDMSG((hwnd), TVM_SETINSERTMARKCOLOR, 0, (LPARAM)clr)\n\n#define TreeView_GetInsertMarkColor(hwnd) \\\n    (COLORREF)SNDMSG((hwnd), TVM_GETINSERTMARKCOLOR, 0, 0)\n\n#define TreeView_SetItemState(hwndTV, hti, data, _mask) \\\n{ TVITEM _TVi; \\\n  _TVi.mask = TVIF_STATE; \\\n  _TVi.hItem = hti; \\\n  _TVi.stateMask = _mask; \\\n  _TVi.state = data; \\\n  SNDMSG((hwndTV), TVM_SETITEM, 0, (LPARAM)&_TVi); \\\n}\n\n#define TreeView_GetItemState(hwndTV, hti, mask) \\\n   (UINT)SNDMSG((hwndTV), TVM_GETITEMSTATE, (WPARAM)(hti), (LPARAM)(mask))\n#define TreeView_GetCheckState(hwndTV, hti) \\\n   ((((UINT)(SNDMSG((hwndTV), TVM_GETITEMSTATE, (WPARAM)(hti),  \\\n                     TVIS_STATEIMAGEMASK))) >> 12) -1)\n\n#define TreeView_SetLineColor(hwnd, clr) \\\n    (COLORREF)SNDMSG((hwnd), TVM_SETLINECOLOR, 0, (LPARAM)(clr))\n\n#define TreeView_GetLineColor(hwnd) \\\n    (COLORREF)SNDMSG((hwnd), TVM_GETLINECOLOR, 0, 0)\n\n#define TreeView_MapAccIDToHTREEITEM(hwnd, id) \\\n    (HTREEITEM)SNDMSG((hwnd), TVM_MAPACCIDTOHTREEITEM, id, 0)\n\n#define TreeView_MapHTREEITEMToAccID(hwnd, htreeitem) \\\n    (UINT)SNDMSG((hwnd), TVM_MAPHTREEITEMTOACCID, (WPARAM)htreeitem, 0)\n\n#define TreeView_SetUnicodeFormat(hwnd, fUnicode) \\\n    (BOOL)SNDMSG((hwnd), TVM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0)\n#define TreeView_GetUnicodeFormat(hwnd) \\\n    (BOOL)SNDMSG((hwnd), TVM_GETUNICODEFORMAT, 0, 0)\n\n/* Listview control */\n\n#define WC_LISTVIEWA          \"SysListView32\"\n#if defined(__GNUC__)\n# define WC_LISTVIEWW (const WCHAR []){ 'S','y','s', \\\n  'L','i','s','t','V','i','e','w','3','2',0 }\n#elif defined(_MSC_VER)\n# define WC_LISTVIEWW         L\"SysListView32\"\n#else\nstatic const WCHAR WC_LISTVIEWW[] = { 'S','y','s',\n  'L','i','s','t','V','i','e','w','3','2',0 };\n#endif\n#define WC_LISTVIEW  WINELIB_NAME_AW(WC_LISTVIEW)\n\n#define LVSCW_AUTOSIZE -1\n#define LVSCW_AUTOSIZE_USEHEADER -2\n\n\n#define LVS_EX_GRIDLINES        0x0001\n#define LVS_EX_SUBITEMIMAGES    0x0002\n#define LVS_EX_CHECKBOXES       0x0004\n#define LVS_EX_TRACKSELECT      0x0008\n#define LVS_EX_HEADERDRAGDROP   0x0010\n#define LVS_EX_FULLROWSELECT    0x0020\n#define LVS_EX_ONECLICKACTIVATE 0x0040\n#define LVS_EX_TWOCLICKACTIVATE 0x0080\n#define LVS_EX_FLATSB           0x0100\n#define LVS_EX_REGIONAL         0x0200\n#define LVS_EX_INFOTIP          0x0400\n#define LVS_EX_UNDERLINEHOT     0x0800\n#define LVS_EX_UNDERLINECOLD    0x1000\n#define LVS_EX_MULTIWORKAREAS   0x2000\n#define LVS_EX_LABELTIP         0x4000\n#define LVS_EX_BORDERSELECT     0x8000\n#define LVS_EX_DOUBLEBUFFER     0x00010000\n#define LVS_EX_HIDELABELS       0x00020000\n#define LVS_EX_SINGLEROW        0x00040000\n#define LVS_EX_SNAPTOGRID       0x00080000\n#define LVS_EX_SIMPLESELECT     0x00100000\n#define LVS_EX_JUSTIFYCOLUMNS   0x00200000\n#define LVS_EX_TRANSPARENTBKGND 0x00400000\n#define LVS_EX_TRANSPARENTSHADOWTEXT 0x00800000\n#define LVS_EX_AUTOAUTOARRANGE  0x01000000\n#define LVS_EX_HEADERINALLVIEWS 0x02000000\n#define LVS_EX_AUTOCHECKSELECT  0x08000000\n#define LVS_EX_AUTOSIZECOLUMNS  0x10000000\n#define LVS_EX_COLUMNSNAPPOINTS 0x40000000\n#define LVS_EX_COLUMNOVERFLOW   0x80000000\n\n#define LVCF_FMT                0x0001\n#define LVCF_WIDTH              0x0002\n#define LVCF_TEXT               0x0004\n#define LVCF_SUBITEM            0x0008\n#define LVCF_IMAGE              0x0010\n#define LVCF_ORDER              0x0020\n#define LVCF_MINWIDTH           0x0040\n#define LVCF_DEFAULTWIDTH       0x0080\n#define LVCF_IDEALWIDTH         0x0100\n\n#define LVCFMT_LEFT             0x0000\n#define LVCFMT_RIGHT            0x0001\n#define LVCFMT_CENTER           0x0002\n#define LVCFMT_JUSTIFYMASK      0x0003\n#define LVCFMT_FIXED_WIDTH      0x0100\n#define LVCFMT_IMAGE            0x0800\n#define LVCFMT_BITMAP_ON_RIGHT  0x1000\n#define LVCFMT_COL_HAS_IMAGES   0x8000\n#define LVCFMT_NO_DPI_SCALE     0x00040000\n#define LVCFMT_FIXED_RATIO      0x00080000\n#define LVCFMT_LINE_BREAK       0x00100000\n#define LVCFMT_FILL             0x00200000\n#define LVCFMT_WRAP             0x00400000\n#define LVCFMT_NO_TITLE         0x00800000\n#define LVCFMT_SPLIT_BUTTON     0x01000000\n#define LVCFMT_TILE_PLACEMENTMASK (LVCFMT_LINE_BREAK | LVCFMT_FILL)\n\n#define LVSIL_NORMAL            0\n#define LVSIL_SMALL             1\n#define LVSIL_STATE             2\n#define LVSIL_GROUPHEADER       3\n\n/* following 2 flags only for LVS_OWNERDATA listviews */\n/* and only in report or list mode */\n#define LVSICF_NOINVALIDATEALL  0x0001\n#define LVSICF_NOSCROLL         0x0002\n\n\n#define LVFI_PARAM              0x0001\n#define LVFI_STRING             0x0002\n#define LVFI_SUBSTRING          0x0004\n#define LVFI_PARTIAL            0x0008\n#define LVFI_WRAP               0x0020\n#define LVFI_NEARESTXY          0x0040\n\n#define LVIF_TEXT               0x0001\n#define LVIF_IMAGE              0x0002\n#define LVIF_PARAM              0x0004\n#define LVIF_STATE              0x0008\n#define LVIF_INDENT             0x0010\n#define LVIF_GROUPID            0x0100\n#define LVIF_COLUMNS            0x0200\n#define LVIF_NORECOMPUTE        0x0800\n#define LVIF_DI_SETITEM         0x1000\n#define LVIF_COLFMT             0x00010000\n\n#define LVIR_BOUNDS             0x0000\n#define LVIR_ICON               0x0001\n#define LVIR_LABEL              0x0002\n#define LVIR_SELECTBOUNDS       0x0003\n\n#define LVIS_FOCUSED            0x0001\n#define LVIS_SELECTED           0x0002\n#define LVIS_CUT                0x0004\n#define LVIS_DROPHILITED        0x0008\n#define LVIS_ACTIVATING         0x0020\n\n#define LVIS_OVERLAYMASK        0x0F00\n#define LVIS_STATEIMAGEMASK     0xF000\n\n#define LVNI_ALL\t\t0x0000\n#define LVNI_FOCUSED\t\t0x0001\n#define LVNI_SELECTED\t\t0x0002\n#define LVNI_CUT\t\t0x0004\n#define LVNI_DROPHILITED\t0x0008\n\n#define LVNI_ABOVE\t\t0x0100\n#define LVNI_BELOW\t\t0x0200\n#define LVNI_TOLEFT\t\t0x0400\n#define LVNI_TORIGHT\t\t0x0800\n\n#define LVHT_NOWHERE\t\t0x0001\n#define LVHT_ONITEMICON\t\t0x0002\n#define LVHT_ONITEMLABEL\t0x0004\n#define LVHT_ONITEMSTATEICON\t0x0008\n#define LVHT_ONITEM\t\t(LVHT_ONITEMICON|LVHT_ONITEMLABEL|LVHT_ONITEMSTATEICON)\n\n#define LVHT_ABOVE\t\t0x0008\n#define LVHT_BELOW\t\t0x0010\n#define LVHT_TORIGHT\t\t0x0020\n#define LVHT_TOLEFT\t\t0x0040\n\n#define LV_VIEW_ICON            0x0000\n#define LV_VIEW_DETAILS         0x0001\n#define LV_VIEW_SMALLICON       0x0002\n#define LV_VIEW_LIST            0x0003\n#define LV_VIEW_TILE            0x0004\n#define LV_VIEW_MAX             0x0004\n\n#define LVGF_NONE               0x00000000\n#define LVGF_HEADER             0x00000001\n#define LVGF_FOOTER             0x00000002\n#define LVGF_STATE              0x00000004\n#define LVGF_ALIGN              0x00000008\n#define LVGF_GROUPID            0x00000010\n#define LVGF_SUBTITLE           0x00000100\n#define LVGF_TASK               0x00000200\n#define LVGF_DESCRIPTIONTOP     0x00000400\n#define LVGF_DESCRIPTIONBOTTOM  0x00000800\n#define LVGF_TITLEIMAGE         0x00001000\n#define LVGF_EXTENDEDIMAGE      0x00002000\n#define LVGF_ITEMS              0x00004000\n#define LVGF_SUBSET             0x00008000\n#define LVGF_SUBSETITEMS        0x00010000\n\n#define LVGS_NORMAL             0x00000000\n#define LVGS_COLLAPSED          0x00000001\n#define LVGS_HIDDEN             0x00000002\n\n#define LVGA_HEADER_LEFT        0x00000001\n#define LVGA_HEADER_CENTER      0x00000002\n#define LVGA_HEADER_RIGHT       0x00000004\n#define LVGA_FOOTER_LEFT        0x00000008\n#define LVGA_FOOTER_CENTER      0x00000010\n#define LVGA_FOOTER_RIGHT       0x00000020\n\n#define LVGMF_NONE              0x00000000\n#define LVGMF_BORDERSIZE        0x00000001\n#define LVGMF_BORDERCOLOR       0x00000002\n#define LVGMF_TEXTCOLOR         0x00000004\n\n#define LVTVIF_AUTOSIZE         0x00000000\n#define LVTVIF_FIXEDWIDTH       0x00000001\n#define LVTVIF_FIXEDHEIGHT      0x00000002\n#define LVTVIF_FIXEDSIZE        0x00000003\n#define LVTVIF_EXTENDED         0x00000004\n\n#define LVTVIM_TILESIZE         0x00000001\n#define LVTVIM_COLUMNS          0x00000002\n#define LVTVIM_LABELMARGIN      0x00000004\n\n#define LVIM_AFTER              0x00000001\n\n#define LVM_FIRST               0x1000\n#define LVM_GETBKCOLOR          (LVM_FIRST+0)\n#define LVM_SETBKCOLOR          (LVM_FIRST+1)\n#define LVM_GETIMAGELIST        (LVM_FIRST+2)\n#define LVM_SETIMAGELIST        (LVM_FIRST+3)\n#define LVM_GETITEMCOUNT        (LVM_FIRST+4)\n#define LVM_GETITEMA            (LVM_FIRST+5)\n#define LVM_GETITEMW            (LVM_FIRST+75)\n#define LVM_GETITEM             WINELIB_NAME_AW(LVM_GETITEM)\n#define LVM_SETITEMA            (LVM_FIRST+6)\n#define LVM_SETITEMW            (LVM_FIRST+76)\n#define LVM_SETITEM             WINELIB_NAME_AW(LVM_SETITEM)\n#define LVM_INSERTITEMA         (LVM_FIRST+7)\n#define LVM_INSERTITEMW         (LVM_FIRST+77)\n#define LVM_INSERTITEM          WINELIB_NAME_AW(LVM_INSERTITEM)\n#define LVM_DELETEITEM          (LVM_FIRST+8)\n#define LVM_DELETEALLITEMS      (LVM_FIRST+9)\n#define LVM_GETCALLBACKMASK     (LVM_FIRST+10)\n#define LVM_SETCALLBACKMASK     (LVM_FIRST+11)\n#define LVM_GETNEXTITEM         (LVM_FIRST+12)\n#define LVM_FINDITEMA           (LVM_FIRST+13)\n#define LVM_FINDITEMW           (LVM_FIRST+83)\n#define LVM_FINDITEM            WINELIB_NAME_AW(LVM_FINDITEM)\n#define LVM_GETITEMRECT         (LVM_FIRST+14)\n#define LVM_SETITEMPOSITION     (LVM_FIRST+15)\n#define LVM_GETITEMPOSITION     (LVM_FIRST+16)\n#define LVM_GETSTRINGWIDTHA     (LVM_FIRST+17)\n#define LVM_GETSTRINGWIDTHW     (LVM_FIRST+87)\n#define LVM_GETSTRINGWIDTH      WINELIB_NAME_AW(LVM_GETSTRINGWIDTH)\n#define LVM_HITTEST             (LVM_FIRST+18)\n#define LVM_ENSUREVISIBLE       (LVM_FIRST+19)\n#define LVM_SCROLL              (LVM_FIRST+20)\n#define LVM_REDRAWITEMS         (LVM_FIRST+21)\n#define LVM_ARRANGE             (LVM_FIRST+22)\n#define LVM_EDITLABELA          (LVM_FIRST+23)\n#define LVM_EDITLABELW          (LVM_FIRST+118)\n#define LVM_EDITLABEL           WINELIB_NAME_AW(LVM_EDITLABEL)\n#define LVM_GETEDITCONTROL      (LVM_FIRST+24)\n#define LVM_GETCOLUMNA          (LVM_FIRST+25)\n#define LVM_GETCOLUMNW          (LVM_FIRST+95)\n#define LVM_GETCOLUMN           WINELIB_NAME_AW(LVM_GETCOLUMN)\n#define LVM_SETCOLUMNA          (LVM_FIRST+26)\n#define LVM_SETCOLUMNW          (LVM_FIRST+96)\n#define LVM_SETCOLUMN           WINELIB_NAME_AW(LVM_SETCOLUMN)\n#define LVM_INSERTCOLUMNA       (LVM_FIRST+27)\n#define LVM_INSERTCOLUMNW       (LVM_FIRST+97)\n#define LVM_INSERTCOLUMN        WINELIB_NAME_AW(LVM_INSERTCOLUMN)\n#define LVM_DELETECOLUMN        (LVM_FIRST+28)\n#define LVM_GETCOLUMNWIDTH      (LVM_FIRST+29)\n#define LVM_SETCOLUMNWIDTH      (LVM_FIRST+30)\n#define LVM_GETHEADER           (LVM_FIRST+31)\n\n#define LVM_CREATEDRAGIMAGE     (LVM_FIRST+33)\n#define LVM_GETVIEWRECT         (LVM_FIRST+34)\n#define LVM_GETTEXTCOLOR        (LVM_FIRST+35)\n#define LVM_SETTEXTCOLOR        (LVM_FIRST+36)\n#define LVM_GETTEXTBKCOLOR      (LVM_FIRST+37)\n#define LVM_SETTEXTBKCOLOR      (LVM_FIRST+38)\n#define LVM_GETTOPINDEX         (LVM_FIRST+39)\n#define LVM_GETCOUNTPERPAGE     (LVM_FIRST+40)\n#define LVM_GETORIGIN           (LVM_FIRST+41)\n#define LVM_UPDATE              (LVM_FIRST+42)\n#define LVM_SETITEMSTATE        (LVM_FIRST+43)\n#define LVM_GETITEMSTATE        (LVM_FIRST+44)\n#define LVM_GETITEMTEXTA        (LVM_FIRST+45)\n#define LVM_GETITEMTEXTW        (LVM_FIRST+115)\n#define LVM_GETITEMTEXT         WINELIB_NAME_AW(LVM_GETITEMTEXT)\n#define LVM_SETITEMTEXTA        (LVM_FIRST+46)\n#define LVM_SETITEMTEXTW        (LVM_FIRST+116)\n#define LVM_SETITEMTEXT         WINELIB_NAME_AW(LVM_SETITEMTEXT)\n#define LVM_SETITEMCOUNT        (LVM_FIRST+47)\n#define LVM_SORTITEMS           (LVM_FIRST+48)\n#define LVM_SORTITEMSEX         (LVM_FIRST+81)\n#define LVM_SETITEMPOSITION32   (LVM_FIRST+49)\n#define LVM_GETSELECTEDCOUNT    (LVM_FIRST+50)\n#define LVM_GETITEMSPACING      (LVM_FIRST+51)\n#define LVM_GETISEARCHSTRINGA   (LVM_FIRST+52)\n#define LVM_GETISEARCHSTRINGW   (LVM_FIRST+117)\n#define LVM_GETISEARCHSTRING    WINELIB_NAME_AW(LVM_GETISEARCHSTRING)\n#define LVM_SETICONSPACING      (LVM_FIRST+53)\n#define LVM_SETEXTENDEDLISTVIEWSTYLE (LVM_FIRST+54)\n#define LVM_GETEXTENDEDLISTVIEWSTYLE (LVM_FIRST+55)\n#define LVM_GETSUBITEMRECT      (LVM_FIRST+56)\n#define LVM_SUBITEMHITTEST      (LVM_FIRST+57)\n#define LVM_SETCOLUMNORDERARRAY (LVM_FIRST+58)\n#define LVM_GETCOLUMNORDERARRAY (LVM_FIRST+59)\n#define LVM_SETHOTITEM          (LVM_FIRST+60)\n#define LVM_GETHOTITEM          (LVM_FIRST+61)\n#define LVM_SETHOTCURSOR        (LVM_FIRST+62)\n#define LVM_GETHOTCURSOR        (LVM_FIRST+63)\n#define LVM_APPROXIMATEVIEWRECT (LVM_FIRST+64)\n#define LVM_SETWORKAREAS        (LVM_FIRST+65)\n#define LVM_GETSELECTIONMARK    (LVM_FIRST+66)\n#define LVM_SETSELECTIONMARK    (LVM_FIRST+67)\n#define LVM_SETBKIMAGEA         (LVM_FIRST+68)\n#define LVM_SETBKIMAGEW         (LVM_FIRST+138)\n#define LVM_SETBKIMAGE          WINELIB_NAME_AW(LVM_SETBKIMAGE)\n#define LVM_GETBKIMAGEA         (LVM_FIRST+69)\n#define LVM_GETBKIMAGEW         (LVM_FIRST+139)\n#define LVM_GETBKIMAGE          WINELIB_NAME_AW(LVM_GETBKIMAGE)\n#define LVM_GETWORKAREAS        (LVM_FIRST+70)\n#define LVM_SETHOVERTIME        (LVM_FIRST+71)\n#define LVM_GETHOVERTIME        (LVM_FIRST+72)\n#define LVM_GETNUMBEROFWORKAREAS (LVM_FIRST+73)\n#define LVM_SETTOOLTIPS         (LVM_FIRST+74)\n#define LVM_GETTOOLTIPS         (LVM_FIRST+78)\n#define LVM_GETUNICODEFORMAT    (CCM_GETUNICODEFORMAT)\n#define LVM_SETUNICODEFORMAT    (CCM_SETUNICODEFORMAT)\n#define LVM_SETSELECTEDCOLUMN   (LVM_FIRST + 140)\n#define LVM_SETTILEWIDTH        (LVM_FIRST + 141)\n#define LVM_SETVIEW             (LVM_FIRST + 142)\n#define LVM_GETVIEW             (LVM_FIRST + 143)\n#define LVM_INSERTGROUP         (LVM_FIRST + 145)\n#define LVM_SETGROUPINFO        (LVM_FIRST + 147)\n#define LVM_GETGROUPINFO        (LVM_FIRST + 149)\n#define LVM_REMOVEGROUP         (LVM_FIRST + 150)\n#define LVM_MOVEGROUP           (LVM_FIRST + 151)\n#define LVM_MOVEITEMTOGROUP     (LVM_FIRST + 154)\n#define LVM_SETGROUPMETRICS     (LVM_FIRST + 155)\n#define LVM_GETGROUPMETRICS     (LVM_FIRST + 156)\n#define LVM_ENABLEGROUPVIEW     (LVM_FIRST + 157)\n#define LVM_SORTGROUPS          (LVM_FIRST + 158)\n#define LVM_INSERTGROUPSORTED   (LVM_FIRST + 159)\n#define LVM_REMOVEALLGROUPS     (LVM_FIRST + 160)\n#define LVM_HASGROUP            (LVM_FIRST + 161)\n#define LVM_SETTILEVIEWINFO     (LVM_FIRST + 162)\n#define LVM_GETTILEVIEWINFO     (LVM_FIRST + 163)\n#define LVM_SETTILEINFO         (LVM_FIRST + 164)\n#define LVM_GETTILEINFO         (LVM_FIRST + 165)\n#define LVM_SETINSERTMARK       (LVM_FIRST + 166)\n#define LVM_GETINSERTMARK       (LVM_FIRST + 167)\n#define LVM_INSERTMARKHITTEST   (LVM_FIRST + 168)\n#define LVM_GETINSERTMARKRECT   (LVM_FIRST + 169)\n#define LVM_SETINSERTMARKCOLOR  (LVM_FIRST + 170)\n#define LVM_GETINSERTMARKCOLOR  (LVM_FIRST + 171)\n#define LVM_SETINFOTIP          (LVM_FIRST + 173)\n#define LVM_GETSELECTEDCOLUMN   (LVM_FIRST + 174)\n#define LVM_ISGROUPVIEWENABLED  (LVM_FIRST + 175)\n#define LVM_GETOUTLINECOLOR     (LVM_FIRST + 176)\n#define LVM_SETOUTLINECOLOR     (LVM_FIRST + 177)\n#define LVM_CANCELEDITLABEL     (LVM_FIRST + 179)\n#define LVM_MAPINDEXTOID        (LVM_FIRST + 180)\n#define LVM_MAPIDTOINDEX        (LVM_FIRST + 181)\n#define LVM_ISITEMVISIBLE       (LVM_FIRST + 182)\n#define LVM_GETEMPTYTEXT        (LVM_FIRST + 204)\n#define LVM_GETFOOTERRECT       (LVM_FIRST + 205)\n#define LVM_GETFOOTERINFO       (LVM_FIRST + 206)\n#define LVM_GETFOOTERITEMRECT   (LVM_FIRST + 207)\n#define LVM_GETFOOTERITEM       (LVM_FIRST + 208)\n#define LVM_GETITEMINDEXRECT    (LVM_FIRST + 209)\n#define LVM_SETITEMINDEXSTATE   (LVM_FIRST + 210)\n#define LVM_GETNEXTITEMINDEX    (LVM_FIRST + 211)\n\n#define LVN_FIRST               (0U-100U)\n#define LVN_LAST                (0U-199U)\n#define LVN_ITEMCHANGING        (LVN_FIRST-0)\n#define LVN_ITEMCHANGED         (LVN_FIRST-1)\n#define LVN_INSERTITEM          (LVN_FIRST-2)\n#define LVN_DELETEITEM          (LVN_FIRST-3)\n#define LVN_DELETEALLITEMS      (LVN_FIRST-4)\n#define LVN_BEGINLABELEDITA     (LVN_FIRST-5)\n#define LVN_BEGINLABELEDITW     (LVN_FIRST-75)\n#define LVN_BEGINLABELEDIT      WINELIB_NAME_AW(LVN_BEGINLABELEDIT)\n#define LVN_ENDLABELEDITA       (LVN_FIRST-6)\n#define LVN_ENDLABELEDITW       (LVN_FIRST-76)\n#define LVN_ENDLABELEDIT        WINELIB_NAME_AW(LVN_ENDLABELEDIT)\n#define LVN_COLUMNCLICK         (LVN_FIRST-8)\n#define LVN_BEGINDRAG           (LVN_FIRST-9)\n#define LVN_BEGINRDRAG          (LVN_FIRST-11)\n#define LVN_ODCACHEHINT         (LVN_FIRST-13)\n#define LVN_ITEMACTIVATE        (LVN_FIRST-14)\n#define LVN_ODSTATECHANGED      (LVN_FIRST-15)\n#define LVN_HOTTRACK            (LVN_FIRST-21)\n#define LVN_ODFINDITEMA         (LVN_FIRST-52)\n#define LVN_ODFINDITEMW         (LVN_FIRST-79)\n#define LVN_ODFINDITEM          WINELIB_NAME_AW(LVN_ODFINDITEM)\n#define LVN_GETDISPINFOA        (LVN_FIRST-50)\n#define LVN_GETDISPINFOW        (LVN_FIRST-77)\n#define LVN_GETDISPINFO         WINELIB_NAME_AW(LVN_GETDISPINFO)\n#define LVN_SETDISPINFOA        (LVN_FIRST-51)\n#define LVN_SETDISPINFOW        (LVN_FIRST-78)\n#define LVN_SETDISPINFO         WINELIB_NAME_AW(LVN_SETDISPINFO)\n#define LVN_KEYDOWN             (LVN_FIRST-55)\n#define LVN_MARQUEEBEGIN        (LVN_FIRST-56)\n#define LVN_GETINFOTIPA         (LVN_FIRST-57)\n#define LVN_GETINFOTIPW         (LVN_FIRST-58)\n#define LVN_GETINFOTIP          WINELIB_NAME_AW(LVN_GETINFOTIP)\n#define LVN_INCREMENTALSEARCHA  (LVN_FIRST-62)\n#define LVN_INCREMENTALSEARCHW  (LVN_FIRST-63)\n#define LVN_COLUMNDROPDOWN      (LVN_FIRST-64)\n#define LVN_COLUMNOVERFLOWCLICK (LVN_FIRST-66)\n#define LVN_INCREMENTALSEARCH   WINELIB_NAME_AW(LVN_INCREMENTALSEARCH)\n#define LVN_BEGINSCROLL         (LVN_FIRST-80)\n#define LVN_ENDSCROLL           (LVN_FIRST-81)\n#define LVN_LINKCLICK           (LVN_FIRST-84)\n#define LVN_ASYNCDRAWN          (LVN_FIRST-86)\n#define LVN_GETEMPTYMARKUP      (LVN_FIRST-87)\n\n/* LVN_INCREMENTALSEARCH return codes */\n#define LVNSCH_DEFAULT          -1\n#define LVNSCH_ERROR            -2\n#define LVNSCH_IGNORE           -3\n\n#define LVA_DEFAULT             0x0000\n#define LVA_ALIGNLEFT           0x0001\n#define LVA_ALIGNTOP            0x0002\n#define LVA_SNAPTOGRID          0x0005\n\ntypedef struct tagLVITEMA\n{\n    UINT mask;\n    INT  iItem;\n    INT  iSubItem;\n    UINT state;\n    UINT stateMask;\n    LPSTR  pszText;\n    INT  cchTextMax;\n    INT  iImage;\n    LPARAM lParam;\n    /* (_WIN32_IE >= 0x0300) */\n    INT  iIndent;\n    /* (_WIN32_IE >= 0x0560) */\n    INT iGroupId;\n    UINT cColumns;\n    PUINT puColumns;\n    /* (_WIN32_WINNT >= 0x0600) */\n    PINT piColFmt;\n    INT iGroup;\n} LVITEMA, *LPLVITEMA;\n\ntypedef struct tagLVITEMW\n{\n    UINT mask;\n    INT  iItem;\n    INT  iSubItem;\n    UINT state;\n    UINT stateMask;\n    LPWSTR pszText;\n    INT  cchTextMax;\n    INT  iImage;\n    LPARAM lParam;\n    /* (_WIN32_IE >= 0x0300) */\n    INT  iIndent;\n    /* (_WIN32_IE >= 0x0560) */\n    INT iGroupId;\n    UINT cColumns;\n    PUINT puColumns;\n    /* (_WIN32_WINNT >= 0x0600) */\n    PINT piColFmt;\n    INT iGroup;\n} LVITEMW, *LPLVITEMW;\n\n#define LVITEM   WINELIB_NAME_AW(LVITEM)\n#define LPLVITEM WINELIB_NAME_AW(LPLVITEM)\n\n#define LVITEM_V1_SIZEA CCSIZEOF_STRUCT(LVITEMA, lParam)\n#define LVITEM_V1_SIZEW CCSIZEOF_STRUCT(LVITEMW, lParam)\n#define LVITEM_V1_SIZE WINELIB_NAME_AW(LVITEM_V1_SIZE)\n\n#define LVITEMA_V5_SIZE CCSIZEOF_STRUCT(LVITEMA, puColumns)\n#define LVITEMW_V5_SIZE CCSIZEOF_STRUCT(LVITEMW, puColumns)\n#define LVITEM_V5_SIZE WINELIB_NAME_AW(LVITEM_V5_SIZE)\n\n#define LV_ITEM  LVITEM\n#define LV_ITEMA LVITEMA\n#define LV_ITEMW LVITEMW\n\ntypedef struct LVSETINFOTIP\n{\n    UINT cbSize;\n    DWORD dwFlags;\n    LPWSTR pszText;\n    int iItem;\n    int iSubItem;\n} LVSETINFOTIP, *PLVSETINFOTIP;\n\n/* ListView background image structs and constants\n   For _WIN32_IE version 0x400 and later. */\n\ntypedef struct tagLVBKIMAGEA\n{\n    ULONG ulFlags;\n    HBITMAP hbm;\n    LPSTR pszImage;\n    UINT cchImageMax;\n    int xOffsetPercent;\n    int yOffsetPercent;\n} LVBKIMAGEA, *LPLVBKIMAGEA;\n\ntypedef struct tagLVBKIMAGEW\n{\n    ULONG ulFlags;\n    HBITMAP hbm;\n    LPWSTR pszImage;\n    UINT cchImageMax;\n    int xOffsetPercent;\n    int yOffsetPercent;\n} LVBKIMAGEW, *LPLVBKIMAGEW;\n\n#define LVBKIMAGE WINELIB_NAME_AW(LVBKIMAGE)\n#define LPLVBKIMAGE WINELIB_NAME_AW(LPLVBKIMAGE)\n\n#define LVBKIF_SOURCE_NONE      0x00000000\n#define LVBKIF_SOURCE_HBITMAP   0x00000001\n#define LVBKIF_SOURCE_URL       0x00000002\n#define LVBKIF_SOURCE_MASK      0x00000003\n#define LVBKIF_STYLE_NORMAL     0x00000000\n#define LVBKIF_STYLE_TILE       0x00000010\n#define LVBKIF_STYLE_MASK       0x00000010\n#define LVBKIF_FLAG_TILEOFFSET  0x00000100\n#define LVBKIF_TYPE_WATERMARK   0x10000000\n#define LVBKIF_FLAG_ALPHABLEND  0x20000000\n\n#define ListView_SetBkImage(hwnd, plvbki) \\\n    (BOOL)SNDMSG((hwnd), LVM_SETBKIMAGE, 0, (LPARAM)plvbki)\n\n#define ListView_GetBkImage(hwnd, plvbki) \\\n    (BOOL)SNDMSG((hwnd), LVM_GETBKIMAGE, 0, (LPARAM)plvbki)\n\ntypedef struct tagLVCOLUMNA\n{\n    UINT mask;\n    INT  fmt;\n    INT  cx;\n    LPSTR  pszText;\n    INT  cchTextMax;\n    INT  iSubItem;\n    /* (_WIN32_IE >= 0x0300) */\n    INT  iImage;\n    INT  iOrder;\n    /* (_WIN32_WINNT >= 0x0600) */\n    INT  cxMin;\n    INT  cxDefault;\n    INT  cxIdeal;\n} LVCOLUMNA, *LPLVCOLUMNA;\n\ntypedef struct tagLVCOLUMNW\n{\n    UINT mask;\n    INT  fmt;\n    INT  cx;\n    LPWSTR pszText;\n    INT  cchTextMax;\n    INT  iSubItem;\n    /* (_WIN32_IE >= 0x0300) */\n    INT  iImage;\n    INT  iOrder;\n    /* (_WIN32_WINNT >= 0x0600) */\n    INT  cxMin;\n    INT  cxDefault;\n    INT  cxIdeal;\n} LVCOLUMNW, *LPLVCOLUMNW;\n\n#define LVCOLUMN   WINELIB_NAME_AW(LVCOLUMN)\n#define LPLVCOLUMN WINELIB_NAME_AW(LPLVCOLUMN)\n\n#define LVCOLUMN_V1_SIZEA CCSIZEOF_STRUCT(LVCOLUMNA, iSubItem)\n#define LVCOLUMN_V1_SIZEW CCSIZEOF_STRUCT(LVCOLUMNW, iSubItem)\n#define LVCOLUMN_V1_SIZE WINELIB_NAME_AW(LVCOLUMN_V1_SIZE)\n\n#define LV_COLUMN       LVCOLUMN\n\n\ntypedef struct tagNMLISTVIEW\n{\n    NMHDR hdr;\n    INT iItem;\n    INT iSubItem;\n    UINT uNewState;\n    UINT uOldState;\n    UINT uChanged;\n    POINT ptAction;\n    LPARAM  lParam;\n} NMLISTVIEW, *LPNMLISTVIEW;\n\n#define NM_LISTVIEW     NMLISTVIEW\n#define LPNM_LISTVIEW   LPNMLISTVIEW\n\ntypedef struct tagNMITEMACTIVATE\n{\n    NMHDR hdr;\n    int iItem;\n    int iSubItem;\n    UINT uNewState;\n    UINT uOldState;\n    UINT uChanged;\n    POINT ptAction;\n    LPARAM lParam;\n    UINT uKeyFlags;\n} NMITEMACTIVATE, *LPNMITEMACTIVATE;\n\n#define LVKF_ALT     0x0001\n#define LVKF_CONTROL 0x0002\n#define LVKF_SHIFT   0x0004\n\ntypedef struct tagLVDISPINFO\n{\n    NMHDR hdr;\n    LVITEMA item;\n} NMLVDISPINFOA, *LPNMLVDISPINFOA;\n\ntypedef struct tagLVDISPINFOW\n{\n    NMHDR hdr;\n    LVITEMW item;\n} NMLVDISPINFOW, *LPNMLVDISPINFOW;\n\n#define NMLVDISPINFO   WINELIB_NAME_AW(NMLVDISPINFO)\n#define LPNMLVDISPINFO WINELIB_NAME_AW(LPNMLVDISPINFO)\n\n#define LV_DISPINFO\tNMLVDISPINFO\n#define LV_DISPINFOA\tNMLVDISPINFOA\n#define LV_DISPINFOW\tNMLVDISPINFOW\n\n#include <pshpack1.h>\ntypedef struct tagLVKEYDOWN\n{\n  NMHDR hdr;\n  WORD  wVKey;\n  UINT flags;\n} NMLVKEYDOWN, *LPNMLVKEYDOWN;\n#include <poppack.h>\n\n#define LV_KEYDOWN     NMLVKEYDOWN\n\ntypedef struct tagNMLVGETINFOTIPA\n{\n    NMHDR hdr;\n    DWORD dwFlags;\n    LPSTR pszText;\n    int cchTextMax;\n    int iItem;\n    int iSubItem;\n    LPARAM lParam;\n} NMLVGETINFOTIPA, *LPNMLVGETINFOTIPA;\n\ntypedef struct tagNMLVGETINFOTIPW\n{\n    NMHDR hdr;\n    DWORD dwFlags;\n    LPWSTR pszText;\n    int cchTextMax;\n    int iItem;\n    int iSubItem;\n    LPARAM lParam;\n} NMLVGETINFOTIPW, *LPNMLVGETINFOTIPW;\n\n#define NMLVGETINFOTIP WINELIB_NAME_AW(NMLVGETINFOTIP)\n#define LPNMLVGETINFOTIP WINELIB_NAME_AW(LPNMLVGETINFOTIP)\n\ntypedef struct tagLVHITTESTINFO\n{\n    POINT pt;\n    UINT  flags;\n    INT   iItem;\n    INT   iSubItem;\n    /* (_WIN32_WINNT >= 0x0600) */\n    INT   iGroup;\n} LVHITTESTINFO, *LPLVHITTESTINFO;\n\n#define LV_HITTESTINFO LVHITTESTINFO\n#define _LV_HITTESTINFO tagLVHITTESTINFO\n#define LVHITTESTINFO_V1_SIZE CCSIZEOF_STRUCT(LVHITTESTINFO,iItem)\n\ntypedef struct tagLVFINDINFOA\n{\n\tUINT flags;\n\tLPCSTR psz;\n\tLPARAM lParam;\n\tPOINT pt;\n\tUINT vkDirection;\n} LVFINDINFOA, *LPLVFINDINFOA;\n\ntypedef struct tagLVFINDINFOW\n{\n\tUINT flags;\n\tLPCWSTR psz;\n\tLPARAM lParam;\n\tPOINT pt;\n\tUINT vkDirection;\n} LVFINDINFOW, *LPLVFINDINFOW;\n\n#define LVFINDINFO WINELIB_NAME_AW(LVFINDINFO)\n#define LPLVFINDINFO WINELIB_NAME_AW(LPLVFINDINFO)\n\n#define LV_FINDINFO\tLVFINDINFO\n#define LV_FINDINFOA\tLVFINDINFOA\n#define LV_FINDINFOW\tLVFINDINFOW\n\n/* Groups relates structures */\n\ntypedef struct LVGROUP\n{\n\tUINT cbSize;\n\tUINT mask;\n\tLPWSTR pszHeader;\n\tINT cchHeader;\n\tLPWSTR pszFooter;\n\tINT cchFooter;\n\tINT iGroupId;\n\tUINT stateMask;\n\tUINT state;\n\tUINT uAlign;\n        /* (_WIN32_WINNT >= 0x0600) */\n\tLPWSTR  pszSubtitle;\n\tUINT    cchSubtitle;\n\tLPWSTR  pszTask;\n\tUINT    cchTask;\n\tLPWSTR  pszDescriptionTop;\n\tUINT    cchDescriptionTop;\n\tLPWSTR  pszDescriptionBottom;\n\tUINT    cchDescriptionBottom;\n\tINT     iTitleImage;\n\tINT     iExtendedImage;\n\tINT     iFirstItem;\n\tUINT    cItems;\n\tLPWSTR  pszSubsetTitle;\n\tUINT    cchSubsetTitle;\n} LVGROUP, *PLVGROUP;\n\n#define LVGROUP_V5_SIZE CCSIZEOF_STRUCT(LVGROUP, uAlign)\n\ntypedef struct LVGROUPMETRICS\n{\n\tUINT cbSize;\n\tUINT mask;\n\tUINT Left;\n\tUINT Top;\n\tUINT Right;\n\tUINT Bottom;\n\tCOLORREF crLeft;\n\tCOLORREF crTop;\n\tCOLORREF crRight;\n\tCOLORREF crBottom;\n\tCOLORREF crRightHeader;\n\tCOLORREF crFooter;\n} LVGROUPMETRICS, *PLVGROUPMETRICS;\n\ntypedef INT (*PFNLVGROUPCOMPARE)(INT, INT, VOID*);\n\ntypedef struct LVINSERTGROUPSORTED\n{\n\tPFNLVGROUPCOMPARE pfnGroupCompare;\n\tLPVOID *pvData;\n\tLVGROUP lvGroup;\n} LVINSERTGROUPSORTED, *PLVINSERTGROUPSORTED;\n\n/* Tile related structures */\n\ntypedef struct LVTILEINFO\n{\n\tUINT cbSize;\n\tint iItem;\n\tUINT cColumns;\n\tPUINT puColumns;\n        /* (_WIN32_WINNT >= 0x0600) */\n\tint* piColFmt;\n} LVTILEINFO, *PLVTILEINFO;\n\ntypedef struct LVTILEVIEWINFO\n{\n\tUINT cbSize;\n\tDWORD dwMask;\n\tDWORD dwFlags;\n\tSIZE sizeTile;\n\tint cLines;\n\tRECT rcLabelMargin;\n} LVTILEVIEWINFO, *PLVTILEVIEWINFO;\n\ntypedef struct LVINSERTMARK\n{\n\tUINT cbSize;\n\tDWORD dwFlags;\n\tint iItem;\n\tDWORD dwReserved;\n} LVINSERTMARK, *PLVINSERTMARK;\n\ntypedef struct tagTCHITTESTINFO\n{\n\tPOINT pt;\n\tUINT flags;\n} TCHITTESTINFO, *LPTCHITTESTINFO;\n\n#define TC_HITTESTINFO TCHITTESTINFO\n\ntypedef INT (CALLBACK *PFNLVCOMPARE)(LPARAM, LPARAM, LPARAM);\n\n#define NMLVCUSTOMDRAW_V3_SIZE CCSIZEOF_STRUCT(NMLCUSTOMDRW, clrTextBk)\n\ntypedef struct tagNMLVCUSTOMDRAW\n{\n    NMCUSTOMDRAW nmcd;\n    COLORREF clrText;\n    COLORREF clrTextBk;\n    int iSubItem;\t/* (_WIN32_IE >= 0x0400) */\n    DWORD dwItemType;\t/* (_WIN32_IE >= 0x560) */\n    COLORREF clrFace;   /* (_WIN32_IE >= 0x560) */\n    int iIconEffect;\t/* (_WIN32_IE >= 0x560) */\n    int iIconPhase;\t/* (_WIN32_IE >= 0x560) */\n    int iPartId;\t/* (_WIN32_IE >= 0x560) */\n    int iStateId;\t/* (_WIN32_IE >= 0x560) */\n    RECT rcText;\t/* (_WIN32_IE >= 0x560) */\n    UINT uAlign;\t/* (_WIN32_IE >= 0x560) */\n} NMLVCUSTOMDRAW, *LPNMLVCUSTOMDRAW;\n\ntypedef struct tagNMLVCACHEHINT\n{\n\tNMHDR\thdr;\n\tINT\tiFrom;\n\tINT\tiTo;\n} NMLVCACHEHINT, *LPNMLVCACHEHINT;\n\n#define LPNM_CACHEHINT LPNMLVCACHEHINT\n#define PNM_CACHEHINT  LPNMLVCACHEHINT\n#define NM_CACHEHINT   NMLVCACHEHINT\n\ntypedef struct tagNMLVFINDITEMA\n{\n    NMHDR hdr;\n    int iStart;\n    LVFINDINFOA lvfi;\n} NMLVFINDITEMA, *LPNMLVFINDITEMA;\n\ntypedef struct tagNMLVFINDITEMW\n{\n    NMHDR hdr;\n    int iStart;\n    LVFINDINFOW lvfi;\n} NMLVFINDITEMW, *LPNMLVFINDITEMW;\n\n#define NMLVFINDITEM   WINELIB_NAME_AW(NMLVFINDITEM)\n#define LPNMLVFINDITEM WINELIB_NAME_AW(LPNMLVFINDITEM)\n#define NM_FINDITEM    NMLVFINDITEM\n#define LPNM_FINDITEM  LPNMLVFINDITEM\n#define PNM_FINDITEM   LPNMLVFINDITEM\n\ntypedef struct tagNMLVODSTATECHANGE\n{\n    NMHDR hdr;\n    int iFrom;\n    int iTo;\n    UINT uNewState;\n    UINT uOldState;\n} NMLVODSTATECHANGE, *LPNMLVODSTATECHANGE;\n\n#define PNM_ODSTATECHANGE LPNMLVODSTATECHANGE\n#define LPNM_ODSTATECHANGE LPNMLVODSTATECHANGE\n#define NM_ODSTATECHANGE NMLVODSTATECHANGE\n\ntypedef struct NMLVSCROLL\n{\n    NMHDR hdr;\n    int dx;\n    int dy;\n} NMLVSCROLL, *LPNMLVSCROLL;\n\n#define ListView_SetItemCount(hwnd,count) \\\n    (BOOL)SNDMSG((hwnd),LVM_SETITEMCOUNT,(WPARAM)(INT)(count),0)\n#define ListView_SetTextBkColor(hwnd,clrBk) \\\n    (BOOL)SNDMSG((hwnd),LVM_SETTEXTBKCOLOR,0,(LPARAM)(COLORREF)(clrBk))\n#define ListView_SetTextColor(hwnd,clrBk) \\\n    (BOOL)SNDMSG((hwnd),LVM_SETTEXTCOLOR,0,(LPARAM)(COLORREF)(clrBk))\n#define ListView_DeleteColumn(hwnd,col)\\\n    (LRESULT)SNDMSG((hwnd),LVM_DELETECOLUMN,0,(LPARAM)(INT)(col))\n#define ListView_GetColumnA(hwnd,x,col)\\\n    (LRESULT)SNDMSGA((hwnd),LVM_GETCOLUMNA,(WPARAM)(INT)(x),(LPARAM)(LPLVCOLUMNA)(col))\n#define ListView_GetColumnW(hwnd,x,col)\\\n    (LRESULT)SNDMSGW((hwnd),LVM_GETCOLUMNW,(WPARAM)(INT)(x),(LPARAM)(LPLVCOLUMNW)(col))\n#define ListView_GetColumn WINELIB_NAME_AW(ListView_GetColumn)\n#define ListView_SetColumnA(hwnd,x,col)\\\n    (LRESULT)SNDMSGA((hwnd),LVM_SETCOLUMNA,(WPARAM)(INT)(x),(LPARAM)(LPLVCOLUMNA)(col))\n#define ListView_SetColumnW(hwnd,x,col)\\\n    (LRESULT)SNDMSGW((hwnd),LVM_SETCOLUMNW,(WPARAM)(INT)(x),(LPARAM)(LPLVCOLUMNW)(col))\n#define ListView_SetColumn WINELIB_NAME_AW(ListView_SetColumn)\n#define ListView_GetColumnWidth(hwnd,x)\\\n    (INT)SNDMSG((hwnd), LVM_GETCOLUMNWIDTH, (WPARAM)(INT)(x), 0)\n#define ListView_SetColumnWidth(hwnd,x,width)\\\n    (BOOL)SNDMSG((hwnd),LVM_SETCOLUMNWIDTH,(WPARAM)(INT)(x),(LPARAM)(MAKELPARAM(width,0)))\n\n\n#define ListView_GetNextItem(hwnd,nItem,flags) \\\n    (INT)SNDMSG((hwnd),LVM_GETNEXTITEM,(WPARAM)(INT)(nItem),(LPARAM)(MAKELPARAM(flags,0)))\n#define ListView_FindItemA(hwnd,nItem,plvfi) \\\n    (INT)SNDMSGA((hwnd),LVM_FINDITEMA,(WPARAM)(INT)(nItem),(LPARAM)(LVFINDINFOA*)(plvfi))\n#define ListView_FindItemW(hwnd,nItem,plvfi) \\\n    (INT)SNDMSGW((hwnd),LVM_FINDITEMW,(WPARAM)(INT)(nItem),(LPARAM)(LVFINDINFOW*)(plvfi))\n#define ListView_FindItem WINELIB_NAME_AW(ListView_FindItem)\n\n#define ListView_Arrange(hwnd,code) \\\n    (INT)SNDMSG((hwnd), LVM_ARRANGE, (WPARAM)(INT)(code), 0)\n#define ListView_GetItemPosition(hwnd,i,ppt) \\\n    (INT)SNDMSG((hwnd),LVM_GETITEMPOSITION,(WPARAM)(INT)(i),(LPARAM)(LPPOINT)(ppt))\n#define ListView_GetItemRect(hwnd,i,prc,code) \\\n\t(BOOL)SNDMSG((hwnd), LVM_GETITEMRECT, (WPARAM)(int)(i), \\\n\t((prc) ? (((RECT*)(prc))->left = (code),(LPARAM)(RECT \\\n\t*)(prc)) : (LPARAM)(RECT*)NULL))\n#define ListView_SetItemA(hwnd,pitem) \\\n    (INT)SNDMSGA((hwnd),LVM_SETITEMA,0,(LPARAM)(const LVITEMA *)(pitem))\n#define ListView_SetItemW(hwnd,pitem) \\\n    (INT)SNDMSGW((hwnd),LVM_SETITEMW,0,(LPARAM)(const LVITEMW *)(pitem))\n#define ListView_SetItem WINELIB_NAME_AW(ListView_SetItem)\n#define ListView_SetItemState(hwnd,i,data,dataMask) \\\n{ LVITEM _LVi; _LVi.state = data; _LVi.stateMask = dataMask;\\\n  SNDMSG(hwnd, LVM_SETITEMSTATE, (WPARAM)(UINT)i, (LPARAM) (LPLVITEM)&_LVi);}\n#define ListView_GetItemState(hwnd,i,mask) \\\n    (UINT)SNDMSG((hwnd),LVM_GETITEMSTATE,(WPARAM)(UINT)(i),(LPARAM)(UINT)(mask))\n#define ListView_SetCheckState(hwndLV, i, bCheck) \\\n    { LVITEM _LVi; _LVi.state = INDEXTOSTATEIMAGEMASK((bCheck)?2:1); _LVi.stateMask = LVIS_STATEIMAGEMASK; \\\n    SNDMSG(hwndLV, LVM_SETITEMSTATE, (WPARAM)(UINT)(i), (LPARAM)(LPLVITEM)&_LVi);}\n#define ListView_GetCheckState(hwndLV, i) \\\n    (((UINT)SNDMSG((hwndLV), LVM_GETITEMSTATE, (i), LVIS_STATEIMAGEMASK) >> 12) - 1)\n#define ListView_GetCountPerPage(hwnd) \\\n    (BOOL)SNDMSG((hwnd), LVM_GETCOUNTPERPAGE, 0, 0)\n#define ListView_GetImageList(hwnd,iImageList) \\\n    (HIMAGELIST)SNDMSG((hwnd), LVM_GETIMAGELIST, (WPARAM)(INT)(iImageList), 0)\n#define ListView_GetStringWidthA(hwnd,pstr) \\\n    (INT)SNDMSGA((hwnd),LVM_GETSTRINGWIDTHA,0,(LPARAM)(LPCSTR)(pstr))\n#define ListView_GetStringWidthW(hwnd,pstr) \\\n    (INT)SNDMSGW((hwnd),LVM_GETSTRINGWIDTHW,0,(LPARAM)(LPCWSTR)(pstr))\n#define ListView_GetStringWidth WINELIB_NAME_AW(ListView_GetStringWidth)\n#define ListView_GetTopIndex(hwnd) \\\n    (BOOL)SNDMSG((hwnd), LVM_GETTOPINDEX, 0, 0)\n#define ListView_Scroll(hwnd,dx,dy) \\\n    (BOOL)SNDMSG((hwnd),LVM_SCROLL,(WPARAM)(INT)(dx),(LPARAM)(INT)(dy))\n#define ListView_EnsureVisible(hwnd,i,fPartialOk) \\\n    (BOOL)SNDMSG((hwnd),LVM_ENSUREVISIBLE,(WPARAM)(INT)i,(LPARAM)(BOOL)fPartialOk)\n#define ListView_SetBkColor(hwnd,clrBk) \\\n    (BOOL)SNDMSG((hwnd),LVM_SETBKCOLOR,0,(LPARAM)(COLORREF)(clrBk))\n#define ListView_SetImageList(hwnd,himl,iImageList) \\\n    (HIMAGELIST)SNDMSG((hwnd),LVM_SETIMAGELIST,(WPARAM)(iImageList),(LPARAM)(HIMAGELIST)(himl))\n#define ListView_GetItemCount(hwnd) \\\n    (INT)SNDMSG((hwnd), LVM_GETITEMCOUNT, 0, 0)\n#define ListView_RedrawItems(hwnd,first,last) \\\n    (BOOL)SNDMSG((hwnd),LVM_REDRAWITEMS,(WPARAM)(INT)(first),(LPARAM)(INT)(last))\n#define ListView_GetEditControl(hwnd) \\\n    (HWND)SNDMSG((hwnd), LVM_GETEDITCONTROL, 0, 0)\n#define ListView_GetTextColor(hwnd)  \\\n    (COLORREF)SNDMSG((hwnd), LVM_GETTEXTCOLOR, 0, 0)\n#define ListView_GetTextBkColor(hwnd) \\\n    (COLORREF)SNDMSG((hwnd), LVM_GETTEXTBKCOLOR, 0, 0)\n#define ListView_GetBkColor(hwnd)  \\\n    (COLORREF)SNDMSG((hwnd), LVM_GETBKCOLOR, 0, 0)\n#define ListView_GetItemA(hwnd,pitem) \\\n    (BOOL)SNDMSGA((hwnd),LVM_GETITEMA,0,(LPARAM)(LVITEMA *)(pitem))\n#define ListView_GetItemW(hwnd,pitem) \\\n    (BOOL)SNDMSGW((hwnd),LVM_GETITEMW,0,(LPARAM)(LVITEMW *)(pitem))\n#define ListView_GetItem WINELIB_NAME_AW(ListView_GetItem)\n#define ListView_GetOrigin(hwnd,ppt) \\\n    (BOOL)SNDMSG((hwnd),LVM_GETORIGIN,0,(LPARAM)(POINT *)(ppt))\n\n#define ListView_HitTest(hwnd,pinfo) \\\n    (INT)SNDMSG((hwnd),LVM_HITTEST,0,(LPARAM)(LPLVHITTESTINFO)(pinfo))\n\n#define ListView_InsertItemA(hwnd,pitem) \\\n    (INT)SNDMSGA((hwnd),LVM_INSERTITEMA,0,(LPARAM)(const LVITEMA *)(pitem))\n#define ListView_InsertItemW(hwnd,pitem) \\\n    (INT)SNDMSGW((hwnd),LVM_INSERTITEMW,0,(LPARAM)(const LVITEMW *)(pitem))\n#define ListView_InsertItem WINELIB_NAME_AW(ListView_InsertItem)\n\n#define ListView_DeleteAllItems(hwnd) \\\n    (BOOL)SNDMSG((hwnd), LVM_DELETEALLITEMS, 0, 0)\n\n#define ListView_InsertColumnA(hwnd,iCol,pcol) \\\n    (INT)SNDMSGA((hwnd),LVM_INSERTCOLUMNA,(WPARAM)(INT)(iCol),(LPARAM)(const LVCOLUMNA *)(pcol))\n#define ListView_InsertColumnW(hwnd,iCol,pcol) \\\n    (INT)SNDMSGW((hwnd),LVM_INSERTCOLUMNW,(WPARAM)(INT)(iCol),(LPARAM)(const LVCOLUMNW *)(pcol))\n#define ListView_InsertColumn WINELIB_NAME_AW(ListView_InsertColumn)\n\n#define ListView_SortItems(hwndLV,_pfnCompare,_lPrm) \\\n    (BOOL)SNDMSG((hwndLV),LVM_SORTITEMS,(WPARAM)(LPARAM)_lPrm,(LPARAM)(PFNLVCOMPARE)_pfnCompare)\n#define ListView_SortItemsEx(hwndLV, _pfnCompare, _lPrm) \\\n  (BOOL)SNDMSG((hwndLV), LVM_SORTITEMSEX, (WPARAM)(LPARAM)(_lPrm), (LPARAM)(PFNLVCOMPARE)(_pfnCompare))\n\n#define ListView_SetItemPosition(hwndLV, i, x, y) \\\n    (BOOL)SNDMSG((hwndLV),LVM_SETITEMPOSITION,(WPARAM)(INT)(i),MAKELPARAM((x),(y)))\n#define ListView_GetSelectedCount(hwndLV) \\\n    (UINT)SNDMSG((hwndLV), LVM_GETSELECTEDCOUNT, 0, 0)\n\n#define ListView_EditLabelA(hwndLV, i) \\\n    (HWND)SNDMSG((hwndLV), LVM_EDITLABELA, (WPARAM)(int)(i), 0)\n#define ListView_EditLabelW(hwndLV, i) \\\n    (HWND)SNDMSG((hwndLV), LVM_EDITLABELW, (WPARAM)(int)(i), 0)\n#define ListView_EditLabel WINELIB_NAME_AW(ListView_EditLabel)\n\n#define ListView_GetItemTextA(hwndLV, i, _iSubItem, _pszText, _cchTextMax) \\\n{ \\\n    LVITEMA _LVi;\\\n    _LVi.iSubItem = _iSubItem;\\\n    _LVi.cchTextMax = _cchTextMax;\\\n    _LVi.pszText = _pszText;\\\n    SNDMSGA(hwndLV, LVM_GETITEMTEXTA, (WPARAM)(i), (LPARAM)&_LVi);\\\n}\n#define ListView_GetItemTextW(hwndLV, i, _iSubItem, _pszText, _cchTextMax) \\\n{ \\\n    LVITEMW _LVi;\\\n    _LVi.iSubItem = _iSubItem;\\\n    _LVi.cchTextMax = _cchTextMax;\\\n    _LVi.pszText = _pszText;\\\n    SNDMSGW(hwndLV, LVM_GETITEMTEXTW, (WPARAM)(i), (LPARAM)&_LVi);\\\n}\n#define ListView_GetItemText WINELIB_NAME_AW(ListView_GetItemText)\n#define ListView_SetItemPosition32(hwnd,n,x1,y1) \\\n{ POINT ptNewPos; ptNewPos.x = (x1); ptNewPos.y = (y1); SNDMSG((hwnd), LVM_SETITEMPOSITION32, (WPARAM)(int)(n), (LPARAM)&ptNewPos); }\n#define ListView_SetItemTextA(hwndLV, i, _iSubItem, _pszText) \\\n{ LVITEMA _LVi; _LVi.iSubItem = _iSubItem; _LVi.pszText = _pszText;\\\n  SNDMSGA(hwndLV, LVM_SETITEMTEXTA, (WPARAM)i, (LPARAM) (LVITEMA*)&_LVi);}\n#define ListView_SetItemTextW(hwndLV, i, _iSubItem, _pszText) \\\n{ LVITEMW _LVi; _LVi.iSubItem = _iSubItem; _LVi.pszText = _pszText;\\\n  SNDMSGW(hwndLV, LVM_SETITEMTEXTW, (WPARAM)i, (LPARAM) (LVITEMW*)& _LVi);}\n#define ListView_SetItemText WINELIB_NAME_AW(ListView_SetItemText)\n\n#define ListView_DeleteItem(hwndLV, i) \\\n    (BOOL)SNDMSG(hwndLV, LVM_DELETEITEM, (WPARAM)(int)(i), 0)\n#define ListView_Update(hwndLV, i) \\\n    (BOOL)SNDMSG((hwndLV), LVM_UPDATE, (WPARAM)(i), 0)\n#define ListView_GetColumnOrderArray(hwndLV, iCount, pi) \\\n    (BOOL)SNDMSG((hwndLV), LVM_GETCOLUMNORDERARRAY, (WPARAM)iCount, (LPARAM)(LPINT)pi)\n#define ListView_GetExtendedListViewStyle(hwndLV) \\\n    (DWORD)SNDMSG((hwndLV), LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0)\n#define ListView_GetHotCursor(hwndLV) \\\n    (HCURSOR)SNDMSG((hwndLV), LVM_GETHOTCURSOR, 0, 0)\n#define ListView_GetHotItem(hwndLV) \\\n    (int)SNDMSG((hwndLV), LVM_GETHOTITEM, 0, 0)\n#define ListView_GetItemSpacing(hwndLV, fSmall) \\\n    (DWORD)SNDMSG((hwndLV), LVM_GETITEMSPACING, (WPARAM)fSmall, 0)\n#define ListView_GetSubItemRect(hwndLV, iItem, iSubItem, code, prc) \\\n    (BOOL)SNDMSG((hwndLV), LVM_GETSUBITEMRECT, (WPARAM)(int)(iItem), \\\n                       ((prc) ? ((((LPRECT)(prc))->top = iSubItem), (((LPRECT)(prc))->left = code), (LPARAM)(prc)) : 0))\n#define ListView_GetToolTips(hwndLV) \\\n    (HWND)SNDMSG((hwndLV), LVM_GETTOOLTIPS, 0, 0)\n#define ListView_SetColumnOrderArray(hwndLV, iCount, pi) \\\n    (BOOL)SNDMSG((hwndLV), LVM_SETCOLUMNORDERARRAY, (WPARAM)iCount, (LPARAM)(LPINT)pi)\n#define ListView_SetExtendedListViewStyle(hwndLV, dw) \\\n    (DWORD)SNDMSG((hwndLV), LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)dw)\n#define ListView_SetExtendedListViewStyleEx(hwndLV, dwMask, dw) \\\n    (DWORD)SNDMSG((hwndLV), LVM_SETEXTENDEDLISTVIEWSTYLE, (WPARAM)dwMask, (LPARAM)dw)\n#define ListView_SetHotCursor(hwndLV, hcur) \\\n    (HCURSOR)SNDMSG((hwndLV), LVM_SETHOTCURSOR, 0, (LPARAM)hcur)\n#define ListView_SetHotItem(hwndLV, i) \\\n    (int)SNDMSG((hwndLV), LVM_SETHOTITEM, (WPARAM)i, 0)\n#define ListView_SetIconSpacing(hwndLV, cx, cy) \\\n    (DWORD)SNDMSG((hwndLV), LVM_SETICONSPACING, 0, MAKELONG(cx,cy))\n#define ListView_SetToolTips(hwndLV, hwndNewHwnd) \\\n    (HWND)SNDMSG((hwndLV), LVM_SETTOOLTIPS, (WPARAM)hwndNewHwnd, 0)\n#define ListView_SubItemHitTest(hwndLV, plvhti) \\\n    (int)SNDMSG((hwndLV), LVM_SUBITEMHITTEST, 0, (LPARAM)(LPLVHITTESTINFO)(plvhti))\n#define ListView_GetSelectionMark(hwndLV) \\\n    (int)SNDMSG((hwndLV), LVM_GETSELECTIONMARK, 0, 0)\n#define ListView_SetSelectionMark(hwndLV, iItem) \\\n    (int)SNDMSG((hwndLV), LVM_SETSELECTIONMARK, 0, (LPARAM)(iItem))\n#define ListView_GetViewRect(hwndLV, prc) \\\n    (BOOL)SNDMSG((hwndLV),LVM_GETVIEWRECT,0,(LPARAM)(LPRECT)(prc))\n#define ListView_GetHeader(hwndLV) \\\n    (HWND)SNDMSG((hwndLV), LVM_GETHEADER, 0, 0)\n#define ListView_SetSelectedColumn(hwnd, iCol) \\\n    SNDMSG((hwnd), LVM_SETSELECTEDCOLUMN, (WPARAM)iCol, 0)\n#define ListView_SetTileWidth(hwnd, cpWidth) \\\n    SNDMSG((hwnd), LVM_SETTILEWIDTH, (WPARAM)cpWidth, 0)\n#define ListView_SetView(hwnd, iView) \\\n    (DWORD)SNDMSG((hwnd), LVM_SETVIEW, (WPARAM)(DWORD)iView, 0)\n#define ListView_GetView(hwnd) \\\n    (DWORD)SNDMSG((hwnd), LVM_GETVIEW, 0, 0)\n#define ListView_InsertGroup(hwnd, index, pgrp) \\\n    SNDMSG((hwnd), LVM_INSERTGROUP, (WPARAM)index, (LPARAM)pgrp)\n#define ListView_SetGroupHeaderImageList(hwnd, himl) \\\n    SNDMSG((hwnd), LVM_SETIMAGELIST, (WPARAM)LVSIL_GROUPHEADER, (LPARAM)himl)\n#define ListView_GetGroupHeaderImageList(hwnd) \\\n    SNDMSG((hwnd), LVM_GETIMAGELIST, (WPARAM)LVSIL_GROUPHEADER, 0)\n#define ListView_SetGroupInfo(hwnd, iGroupId, pgrp) \\\n    SNDMSG((hwnd), LVM_SETGROUPINFO, (WPARAM)iGroupId, (LPARAM)pgrp)\n#define ListView_GetGroupInfo(hwnd, iGroupId, pgrp) \\\n    SNDMSG((hwnd), LVM_GETGROUPINFO, (WPARAM)iGroupId, (LPARAM)pgrp)\n#define ListView_RemoveGroup(hwnd, iGroupId) \\\n    SNDMSG((hwnd), LVM_REMOVEGROUP, (WPARAM)iGroupId, 0)\n#define ListView_MoveGroup(hwnd, iGroupId, toIndex) \\\n    SNDMSG((hwnd), LVM_MOVEGROUP, (WPARAM)iGroupId, (LPARAM)toIndex)\n#define ListView_MoveItemToGroup(hwnd, idItemFrom, idGroupTo) \\\n    SNDMSG((hwnd), LVM_MOVEITEMTOGROUP, (WPARAM)idItemFrom, (LPARAM)idGroupTo)\n#define ListView_SetGroupMetrics(hwnd, pGroupMetrics) \\\n    SNDMSG((hwnd), LVM_SETGROUPMETRICS, 0, (LPARAM)pGroupMetrics)\n#define ListView_GetGroupMetrics(hwnd, pGroupMetrics) \\\n    SNDMSG((hwnd), LVM_GETGROUPMETRICS, 0, (LPARAM)pGroupMetrics)\n#define ListView_EnableGroupView(hwnd, fEnable) \\\n    SNDMSG((hwnd), LVM_ENABLEGROUPVIEW, (WPARAM)fEnable, 0)\n#define ListView_SortGroups(hwnd, _pfnGroupCompate, _plv) \\\n    SNDMSG((hwnd), LVM_SORTGROUPS, (WPARAM)_pfnGroupCompate, (LPARAM)_plv)\n#define ListView_InsertGroupSorted(hwnd, structInsert) \\\n    SNDMSG((hwnd), LVM_INSERTGROUPSORTED, (WPARAM)structInsert, 0)\n#define ListView_RemoveAllGroups(hwnd) \\\n    SNDMSG((hwnd), LVM_REMOVEALLGROUPS, 0, 0)\n#define ListView_HasGroup(hwnd, dwGroupId) \\\n    SNDMSG((hwnd), LVM_HASGROUP, dwGroupId, 0)\n#define ListView_SetTileViewInfo(hwnd, ptvi) \\\n    SNDMSG((hwnd), LVM_SETTILEVIEWINFO, 0, (LPARAM)ptvi)\n#define ListView_GetTileViewInfo(hwnd, ptvi) \\\n    SNDMSG((hwnd), LVM_GETTILEVIEWINFO, 0, (LPARAM)ptvi)\n#define ListView_SetTileInfo(hwnd, pti) \\\n    SNDMSG((hwnd), LVM_SETTILEINFO, 0, (LPARAM)pti)\n#define ListView_GetTileInfo(hwnd, pti) \\\n    SNDMSG((hwnd), LVM_GETTILEINFO, 0, (LPARAM)pti)\n#define ListView_SetInsertMark(hwnd, lvim) \\\n    (BOOL)SNDMSG((hwnd), LVM_SETINSERTMARK, (WPARAM) 0, (LPARAM) (lvim))\n#define ListView_GetInsertMark(hwnd, lvim) \\\n    (BOOL)SNDMSG((hwnd), LVM_GETINSERTMARK, (WPARAM) 0, (LPARAM) (lvim))\n#define ListView_InsertMarkHitTest(hwnd, point, lvim) \\\n    (int)SNDMSG((hwnd), LVM_INSERTMARKHITTEST, (WPARAM)(LPPOINT)(point), (LPARAM)(LPLVINSERTMARK)(lvim))\n#define ListView_GetInsertMarkRect(hwnd, rc) \\\n    (int)SNDMSG((hwnd), LVM_GETINSERTMARKRECT, (WPARAM)0, (LPARAM)(LPRECT)(rc))\n#define ListView_SetInsertMarkColor(hwnd, color) \\\n    (COLORREF)SNDMSG((hwnd), LVM_SETINSERTMARKCOLOR, (WPARAM)0, (LPARAM)(COLORREF)(color))\n#define ListView_GetInsertMarkColor(hwnd) \\\n    (COLORREF)SNDMSG((hwnd), LVM_GETINSERTMARKCOLOR, (WPARAM)0, (LPARAM)0)\n#define ListView_SetInfoTip(hwndLV, plvInfoTip)\\\n    (BOOL)SNDMSG((hwndLV), LVM_SETINFOTIP, (WPARAM)0, (LPARAM)plvInfoTip)\n#define ListView_GetSelectedColumn(hwnd) \\\n    (UINT)SNDMSG((hwnd), LVM_GETSELECTEDCOLUMN, 0, 0)\n#define ListView_IsGroupViewEnabled(hwnd) \\\n    (BOOL)SNDMSG((hwnd), LVM_ISGROUPVIEWENABLED, 0, 0)\n#define ListView_GetOutlineColor(hwnd) \\\n    (COLORREF)SNDMSG((hwnd), LVM_GETOUTLINECOLOR, 0, 0)\n#define ListView_SetOutlineColor(hwnd, color) \\\n    (COLORREF)SNDMSG((hwnd), LVM_SETOUTLINECOLOR, (WPARAM)0, (LPARAM)(COLORREF)(color))\n#define ListView_CancelEditLabel(hwnd) \\\n    (VOID)SNDMSG((hwnd), LVM_CANCELEDITLABEL, (WPARAM)0, (LPARAM)0)\n#define ListView_MapIndexToID(hwnd, index) \\\n    (UINT)SNDMSG((hwnd), LVM_MAPINDEXTOID, (WPARAM)index, (LPARAM)0)\n#define ListView_MapIDToIndex(hwnd, id) \\\n    (UINT)SNDMSG((hwnd), LVM_MAPIDTOINDEX, (WPARAM)id, (LPARAM)0)\n#define ListView_SetUnicodeFormat(hwnd, fUnicode) \\\n    (BOOL)SNDMSG((hwnd), LVM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0)\n#define ListView_GetUnicodeFormat(hwnd) \\\n    (BOOL)SNDMSG((hwnd), LVM_GETUNICODEFORMAT, 0, 0)\n\n/* Tab Control */\n\n#define WC_TABCONTROLA\t\t\"SysTabControl32\"\n#if defined(__GNUC__)\n# define WC_TABCONTROLW (const WCHAR []){ 'S','y','s', \\\n  'T','a','b','C','o','n','t','r','o','l','3','2',0 }\n#elif defined(_MSC_VER)\n# define WC_TABCONTROLW         L\"SysTabControl32\"\n#else\nstatic const WCHAR WC_TABCONTROLW[] = { 'S','y','s',\n  'T','a','b','C','o','n','t','r','o','l','3','2',0 };\n#endif\n#define WC_TABCONTROL\t\tWINELIB_NAME_AW(WC_TABCONTROL)\n\n/* tab control styles */\n#define TCS_EX_FLATSEPARATORS   0x00000001  /* to be used with */\n#define TCS_EX_REGISTERDROP     0x00000002  /* TCM_SETEXTENDEDSTYLE */\n\n\n#define TCM_FIRST\t\t0x1300\n\n#define TCM_GETIMAGELIST        (TCM_FIRST + 2)\n#define TCM_SETIMAGELIST        (TCM_FIRST + 3)\n#define TCM_GETITEMCOUNT\t(TCM_FIRST + 4)\n#define TCM_GETITEM\t\tWINELIB_NAME_AW(TCM_GETITEM)\n#define TCM_GETITEMA\t\t(TCM_FIRST + 5)\n#define TCM_GETITEMW\t\t(TCM_FIRST + 60)\n#define TCM_SETITEMA\t\t(TCM_FIRST + 6)\n#define TCM_SETITEMW\t\t(TCM_FIRST + 61)\n#define TCM_SETITEM\t\tWINELIB_NAME_AW(TCM_SETITEM)\n#define TCM_INSERTITEMA\t\t(TCM_FIRST + 7)\n#define TCM_INSERTITEMW\t\t(TCM_FIRST + 62)\n#define TCM_INSERTITEM\t\tWINELIB_NAME_AW(TCM_INSERTITEM)\n#define TCM_DELETEITEM          (TCM_FIRST + 8)\n#define TCM_DELETEALLITEMS      (TCM_FIRST + 9)\n#define TCM_GETITEMRECT         (TCM_FIRST + 10)\n#define TCM_GETCURSEL\t\t(TCM_FIRST + 11)\n#define TCM_SETCURSEL           (TCM_FIRST + 12)\n#define TCM_HITTEST             (TCM_FIRST + 13)\n#define TCM_SETITEMEXTRA\t(TCM_FIRST + 14)\n#define TCM_ADJUSTRECT          (TCM_FIRST + 40)\n#define TCM_SETITEMSIZE         (TCM_FIRST + 41)\n#define TCM_REMOVEIMAGE         (TCM_FIRST + 42)\n#define TCM_SETPADDING          (TCM_FIRST + 43)\n#define TCM_GETROWCOUNT         (TCM_FIRST + 44)\n#define TCM_GETTOOLTIPS         (TCM_FIRST + 45)\n#define TCM_SETTOOLTIPS         (TCM_FIRST + 46)\n#define TCM_GETCURFOCUS         (TCM_FIRST + 47)\n#define TCM_SETCURFOCUS         (TCM_FIRST + 48)\n#define TCM_SETMINTABWIDTH     (TCM_FIRST + 49)\n#define TCM_DESELECTALL         (TCM_FIRST + 50)\n#define TCM_HIGHLIGHTITEM\t\t(TCM_FIRST + 51)\n#define TCM_SETEXTENDEDSTYLE\t(TCM_FIRST + 52)\n#define TCM_GETEXTENDEDSTYLE\t(TCM_FIRST + 53)\n#define TCM_SETUNICODEFORMAT\tCCM_SETUNICODEFORMAT\n#define TCM_GETUNICODEFORMAT\tCCM_GETUNICODEFORMAT\n\n\n#define TCIF_TEXT\t\t0x0001\n#define TCIF_IMAGE\t\t0x0002\n#define TCIF_RTLREADING\t\t0x0004\n#define TCIF_PARAM\t\t0x0008\n#define TCIF_STATE\t\t0x0010\n\n#define TCIS_BUTTONPRESSED      0x0001\n#define TCIS_HIGHLIGHTED        0x0002\n\n/* TabCtrl Macros */\n#define TabCtrl_GetImageList(hwnd) \\\n    (HIMAGELIST)SNDMSG((hwnd), TCM_GETIMAGELIST, 0, 0)\n#define TabCtrl_SetImageList(hwnd, himl) \\\n    (HIMAGELIST)SNDMSG((hwnd), TCM_SETIMAGELIST, 0, (LPARAM)(UINT)(HIMAGELIST)(himl))\n#define TabCtrl_GetItemCount(hwnd) \\\n    (int)SNDMSG((hwnd), TCM_GETITEMCOUNT, 0, 0)\n#define TabCtrl_GetItemA(hwnd, iItem, pitem) \\\n    (BOOL)SNDMSGA((hwnd), TCM_GETITEMA, (WPARAM)(int)iItem, (LPARAM)(TCITEMA *)(pitem))\n#define TabCtrl_GetItemW(hwnd, iItem, pitem) \\\n    (BOOL)SNDMSGW((hwnd), TCM_GETITEMW, (WPARAM)(int)iItem, (LPARAM)(TCITEMW *)(pitem))\n#define TabCtrl_GetItem WINELIB_NAME_AW(TabCtrl_GetItem)\n#define TabCtrl_SetItemA(hwnd, iItem, pitem) \\\n    (BOOL)SNDMSGA((hwnd), TCM_SETITEMA, (WPARAM)(int)iItem, (LPARAM)(TCITEMA *)(pitem))\n#define TabCtrl_SetItemW(hwnd, iItem, pitem) \\\n    (BOOL)SNDMSGW((hwnd), TCM_SETITEMW, (WPARAM)(int)iItem, (LPARAM)(TCITEMW *)(pitem))\n#define TabCtrl_SetItem WINELIB_NAME_AW(TabCtrl_SetItem)\n#define TabCtrl_InsertItemA(hwnd, iItem, pitem)   \\\n    (int)SNDMSGA((hwnd), TCM_INSERTITEMA, (WPARAM)(int)iItem, (LPARAM)(const TCITEMA *)(pitem))\n#define TabCtrl_InsertItemW(hwnd, iItem, pitem)   \\\n    (int)SNDMSGW((hwnd), TCM_INSERTITEMW, (WPARAM)(int)iItem, (LPARAM)(const TCITEMW *)(pitem))\n#define TabCtrl_InsertItem WINELIB_NAME_AW(TabCtrl_InsertItem)\n#define TabCtrl_DeleteItem(hwnd, i) \\\n    (BOOL)SNDMSG((hwnd), TCM_DELETEITEM, (WPARAM)(int)(i), 0)\n#define TabCtrl_DeleteAllItems(hwnd) \\\n    (BOOL)SNDMSG((hwnd), TCM_DELETEALLITEMS, 0, 0)\n#define TabCtrl_GetItemRect(hwnd, i, prc) \\\n    (BOOL)SNDMSG((hwnd), TCM_GETITEMRECT, (WPARAM)(int)(i), (LPARAM)(RECT *)(prc))\n#define TabCtrl_GetCurSel(hwnd) \\\n    (int)SNDMSG((hwnd), TCM_GETCURSEL, 0, 0)\n#define TabCtrl_SetCurSel(hwnd, i) \\\n    (int)SNDMSG((hwnd), TCM_SETCURSEL, (WPARAM)i, 0)\n#define TabCtrl_HitTest(hwndTC, pinfo) \\\n    (int)SNDMSG((hwndTC), TCM_HITTEST, 0, (LPARAM)(TC_HITTESTINFO *)(pinfo))\n#define TabCtrl_SetItemExtra(hwndTC, cb) \\\n    (BOOL)SNDMSG((hwndTC), TCM_SETITEMEXTRA, (WPARAM)(cb), 0)\n#define TabCtrl_AdjustRect(hwnd, bLarger, prc) \\\n    (int)SNDMSG(hwnd, TCM_ADJUSTRECT, (WPARAM)(BOOL)bLarger, (LPARAM)(RECT *)prc)\n#define TabCtrl_SetItemSize(hwnd, x, y) \\\n    (DWORD)SNDMSG((hwnd), TCM_SETITEMSIZE, 0, MAKELPARAM(x,y))\n#define TabCtrl_RemoveImage(hwnd, i) \\\n    (void)SNDMSG((hwnd), TCM_REMOVEIMAGE, i, 0)\n#define TabCtrl_SetPadding(hwnd,  cx, cy) \\\n    (void)SNDMSG((hwnd), TCM_SETPADDING, 0, MAKELPARAM(cx, cy))\n#define TabCtrl_GetRowCount(hwnd) \\\n    (int)SNDMSG((hwnd), TCM_GETROWCOUNT, 0, 0)\n#define TabCtrl_GetToolTips(hwnd) \\\n    (HWND)SNDMSG((hwnd), TCM_GETTOOLTIPS, 0, 0)\n#define TabCtrl_SetToolTips(hwnd, hwndTT) \\\n    (void)SNDMSG((hwnd), TCM_SETTOOLTIPS, (WPARAM)hwndTT, 0)\n#define TabCtrl_GetCurFocus(hwnd) \\\n    (int)SNDMSG((hwnd), TCM_GETCURFOCUS, 0, 0)\n#define TabCtrl_SetCurFocus(hwnd, i) \\\n    SNDMSG((hwnd),TCM_SETCURFOCUS, i, 0)\n#define TabCtrl_SetMinTabWidth(hwnd, x) \\\n    (int)SNDMSG((hwnd), TCM_SETMINTABWIDTH, 0, x)\n#define TabCtrl_DeselectAll(hwnd, fExcludeFocus)\\\n    (void)SNDMSG((hwnd), TCM_DESELECTALL, fExcludeFocus, 0)\n#define TabCtrl_GetUnicodeFormat(hwnd) \\\n    (BOOL)SNDMSG((hwnd), TCM_GETUNICODEFORMAT, 0, 0)\n#define TabCtrl_SetUnicodeFormat(hwnd, fUnicode) \\\n    (BOOL)SNDMSG((hwnd), TCM_SETUNICODEFORMAT, (WPARAM)fUnicode, 0)\n#define TabCtrl_GetExtendedStyle(hwnd) \\\n    (BOOL)SNDMSG((hwnd), TCM_GETEXTENDEDSTYLE, 0, 0)\n#define TabCtrl_SetExtendedStyle(hwnd, dwExStyle) \\\n    (BOOL)SNDMSG((hwnd), TCM_GETEXTENDEDSTYLE, 0, (LPARAM)dwExStyle)\n#define TabCtrl_HighlightItem(hwnd, i, fHighlight) \\\n    (BOOL)SNDMSG((hwnd), TCM_HIGHLIGHTITEM, (WPARAM)i, (LPARAM)MAKELONG(fHighlight, 0))\n\n/* constants for TCHITTESTINFO */\n\n#define TCHT_NOWHERE      0x01\n#define TCHT_ONITEMICON   0x02\n#define TCHT_ONITEMLABEL  0x04\n#define TCHT_ONITEM       (TCHT_ONITEMICON | TCHT_ONITEMLABEL)\n\ntypedef struct tagTCITEMHEADERA\n{\n    UINT  mask;\n    UINT  lpReserved1;\n    UINT  lpReserved2;\n    LPSTR pszText;\n    int   cchTextMax;\n    int   iImage;\n} TCITEMHEADERA, *LPTCITEMHEADERA;\n\ntypedef struct tagTCITEMHEADERW\n{\n    UINT   mask;\n    UINT   lpReserved1;\n    UINT   lpReserved2;\n    LPWSTR pszText;\n    int    cchTextMax;\n    int    iImage;\n} TCITEMHEADERW, *LPTCITEMHEADERW;\n\n#define TCITEMHEADER    WINELIB_NAME_AW(TCITEMHEADER)\n#define LPTCITEMHEADER  WINELIB_NAME_AW(LPTCITEMHEADER)\n#define TC_ITEMHEADER   WINELIB_NAME_AW(TCITEMHEADER)\n#define LPTC_ITEMHEADER WINELIB_NAME_AW(LPTCITEMHEADER)\n\ntypedef struct tagTCITEMA\n{\n    UINT mask;\n    UINT dwState;\n    UINT dwStateMask;\n    LPSTR  pszText;\n    INT  cchTextMax;\n    INT  iImage;\n    LPARAM lParam;\n} TCITEMA, *LPTCITEMA;\n\ntypedef struct tagTCITEMW\n{\n    UINT mask;\n    DWORD  dwState;\n    DWORD  dwStateMask;\n    LPWSTR pszText;\n    INT  cchTextMax;\n    INT  iImage;\n    LPARAM lParam;\n} TCITEMW, *LPTCITEMW;\n\n#define TCITEM    WINELIB_NAME_AW(TCITEM)\n#define LPTCITEM  WINELIB_NAME_AW(LPTCITEM)\n#define TC_ITEM   WINELIB_NAME_AW(TCITEM)\n#define LPTC_ITEM WINELIB_NAME_AW(LPTCITEM)\n\n#define TCN_FIRST               (0U-550U)\n#define TCN_LAST                (0U-580U)\n#define TCN_KEYDOWN             (TCN_FIRST - 0)\n#define TCN_SELCHANGE           (TCN_FIRST - 1)\n#define TCN_SELCHANGING         (TCN_FIRST - 2)\n#define TCN_GETOBJECT           (TCN_FIRST - 3)\n#define TCN_FOCUSCHANGE         (TCN_FIRST - 4)\n\n#include <pshpack1.h>\ntypedef struct tagTCKEYDOWN\n{\n    NMHDR hdr;\n    WORD wVKey;\n    UINT flags;\n} NMTCKEYDOWN;\n#include <poppack.h>\n\n#define TC_KEYDOWN              NMTCKEYDOWN\n\n/* ComboBoxEx control */\n\n#define WC_COMBOBOXEXA        \"ComboBoxEx32\"\n#if defined(__GNUC__)\n# define WC_COMBOBOXEXW (const WCHAR []){ 'C','o','m','b','o', \\\n  'B','o','x','E','x','3','2',0 }\n#elif defined(_MSC_VER)\n# define WC_COMBOBOXEXW       L\"ComboBoxEx32\"\n#else\nstatic const WCHAR WC_COMBOBOXEXW[] = { 'C','o','m','b','o',\n  'B','o','x','E','x','3','2',0 };\n#endif\n#define WC_COMBOBOXEX           WINELIB_NAME_AW(WC_COMBOBOXEX)\n\n#define CBEIF_TEXT              0x00000001\n#define CBEIF_IMAGE             0x00000002\n#define CBEIF_SELECTEDIMAGE     0x00000004\n#define CBEIF_OVERLAY           0x00000008\n#define CBEIF_INDENT            0x00000010\n#define CBEIF_LPARAM            0x00000020\n#define CBEIF_DI_SETITEM        0x10000000\n\n#define CBEM_INSERTITEMA        (WM_USER+1)\n#define CBEM_INSERTITEMW        (WM_USER+11)\n#define CBEM_INSERTITEM         WINELIB_NAME_AW(CBEM_INSERTITEM)\n#define CBEM_SETIMAGELIST       (WM_USER+2)\n#define CBEM_GETIMAGELIST       (WM_USER+3)\n#define CBEM_GETITEMA           (WM_USER+4)\n#define CBEM_GETITEMW           (WM_USER+13)\n#define CBEM_GETITEM            WINELIB_NAME_AW(CBEM_GETITEM)\n#define CBEM_SETITEMA           (WM_USER+5)\n#define CBEM_SETITEMW           (WM_USER+12)\n#define CBEM_SETITEM            WINELIB_NAME_AW(CBEM_SETITEM)\n#define CBEM_DELETEITEM         CB_DELETESTRING\n#define CBEM_GETCOMBOCONTROL    (WM_USER+6)\n#define CBEM_GETEDITCONTROL     (WM_USER+7)\n#define CBEM_SETEXSTYLE         (WM_USER+8)\n#define CBEM_GETEXSTYLE         (WM_USER+9)\n#define CBEM_GETEXTENDEDSTYLE   (WM_USER+9)\n#define CBEM_SETEXTENDEDSTYLE   (WM_USER+14)\n#define CBEM_SETUNICODEFORMAT   CCM_SETUNICODEFORMAT\n#define CBEM_GETUNICODEFORMAT   CCM_GETUNICODEFORMAT\n#define CBEM_HASEDITCHANGED     (WM_USER+10)\n#define CBEM_SETWINDOWTHEME     CCM_SETWINDOWTHEME\n\n#define CBEIF_TEXT              0x00000001\n#define CBEIF_IMAGE             0x00000002\n#define CBEIF_SELECTEDIMAGE     0x00000004\n#define CBEIF_OVERLAY           0x00000008\n#define CBEIF_INDENT            0x00000010\n#define CBEIF_LPARAM            0x00000020\n#define CBEIF_DI_SETITEM        0x10000000\n\n#define CBEN_FIRST              (0U-800U)\n#define CBEN_LAST               (0U-830U)\n\n#define CBEN_GETDISPINFOA       (CBEN_FIRST - 0)\n#define CBEN_GETDISPINFOW       (CBEN_FIRST - 7)\n#define CBEN_GETDISPINFO WINELIB_NAME_AW(CBEN_GETDISPINFO)\n#define CBEN_INSERTITEM         (CBEN_FIRST - 1)\n#define CBEN_DELETEITEM         (CBEN_FIRST - 2)\n#define CBEN_BEGINEDIT          (CBEN_FIRST - 4)\n#define CBEN_ENDEDITA           (CBEN_FIRST - 5)\n#define CBEN_ENDEDITW           (CBEN_FIRST - 6)\n#define CBEN_ENDEDIT WINELIB_NAME_AW(CBEN_ENDEDIT)\n#define CBEN_DRAGBEGINA         (CBEN_FIRST - 8)\n#define CBEN_DRAGBEGINW         (CBEN_FIRST - 9)\n#define CBEN_DRAGBEGIN WINELIB_NAME_AW(CBEN_DRAGBEGIN)\n\n#define CBES_EX_NOEDITIMAGE          0x00000001\n#define CBES_EX_NOEDITIMAGEINDENT    0x00000002\n#define CBES_EX_PATHWORDBREAKPROC    0x00000004\n#define CBES_EX_NOSIZELIMIT          0x00000008\n#define CBES_EX_CASESENSITIVE        0x00000010\n\n\ntypedef struct tagCOMBOBOXEXITEMA\n{\n    UINT mask;\n    INT_PTR iItem;\n    LPSTR pszText;\n    int cchTextMax;\n    int iImage;\n    int iSelectedImage;\n    int iOverlay;\n    int iIndent;\n    LPARAM lParam;\n} COMBOBOXEXITEMA, *PCOMBOBOXEXITEMA;\ntypedef COMBOBOXEXITEMA const *PCCOMBOEXITEMA; /* Yes, there's a BOX missing */\n\ntypedef struct tagCOMBOBOXEXITEMW\n{\n    UINT mask;\n    INT_PTR iItem;\n    LPWSTR pszText;\n    int cchTextMax;\n    int iImage;\n    int iSelectedImage;\n    int iOverlay;\n    int iIndent;\n    LPARAM lParam;\n} COMBOBOXEXITEMW, *PCOMBOBOXEXITEMW;\ntypedef COMBOBOXEXITEMW const *PCCOMBOEXITEMW; /* Yes, there's a BOX missing */\n\n#define COMBOBOXEXITEM WINELIB_NAME_AW(COMBOBOXEXITEM)\n#define PCOMBOBOXEXITEM WINELIB_NAME_AW(PCOMBOBOXEXITEM)\n#define PCCOMBOBOXEXITEM WINELIB_NAME_AW(PCCOMBOEXITEM) /* Yes, there's a BOX missing */\n\n#define CBENF_KILLFOCUS               1\n#define CBENF_RETURN                  2\n#define CBENF_ESCAPE                  3\n#define CBENF_DROPDOWN                4\n\n#define CBEMAXSTRLEN 260\n\ntypedef struct tagNMCBEENDEDITW\n{\n    NMHDR hdr;\n    BOOL fChanged;\n    int iNewSelection;\n    WCHAR szText[CBEMAXSTRLEN];\n    int iWhy;\n} NMCBEENDEDITW, *LPNMCBEENDEDITW, *PNMCBEENDEDITW;\n\ntypedef struct tagNMCBEENDEDITA\n{\n    NMHDR hdr;\n    BOOL fChanged;\n    int iNewSelection;\n    char szText[CBEMAXSTRLEN];\n    int iWhy;\n} NMCBEENDEDITA, *LPNMCBEENDEDITA, *PNMCBEENDEDITA;\n\n#define NMCBEENDEDIT WINELIB_NAME_AW(NMCBEENDEDIT)\n#define LPNMCBEENDEDIT WINELIB_NAME_AW(LPNMCBEENDEDIT)\n#define PNMCBEENDEDIT WINELIB_NAME_AW(PNMCBEENDEDIT)\n\ntypedef struct\n{\n    NMHDR hdr;\n    COMBOBOXEXITEMA ceItem;\n} NMCOMBOBOXEXA, *PNMCOMBOBOXEXA;\n\ntypedef struct\n{\n    NMHDR hdr;\n    COMBOBOXEXITEMW ceItem;\n} NMCOMBOBOXEXW, *PNMCOMBOBOXEXW;\n\n#define NMCOMBOBOXEX WINELIB_NAME_AW(NMCOMBOBOXEX)\n#define PNMCOMBOBOXEX WINELIB_NAME_AW(PNMCOMBOBOXEX)\n\ntypedef struct\n{\n    NMHDR hdr;\n    int iItemid;\n    char szText[CBEMAXSTRLEN];\n} NMCBEDRAGBEGINA, *PNMCBEDRAGBEGINA, *LPNMCBEDRAGBEGINA;\n\ntypedef struct\n{\n    NMHDR hdr;\n    int iItemid;\n    WCHAR szText[CBEMAXSTRLEN];\n} NMCBEDRAGBEGINW, *PNMCBEDRAGBEGINW, *LPNMCBEDRAGBEGINW;\n\n#define NMCBEDRAGBEGIN WINELIB_NAME_AW(NMCBEDRAGBEGIN)\n#define PNMCBEDRAGBEGIN WINELIB_NAME_AW(PNMCBEDRAGBEGIN)\n#define LPNMCBEDRAGBEGIN WINELIB_NAME_AW(LPNMCBEDRAGBEGIN)\n\n\n/* Hotkey control */\n\n#define HOTKEY_CLASSA           \"msctls_hotkey32\"\n#if defined(__GNUC__)\n# define HOTKEY_CLASSW (const WCHAR []){ 'm','s','c','t','l','s','_', \\\n  'h','o','t','k','e','y','3','2',0 }\n#elif defined(_MSC_VER)\n# define HOTKEY_CLASSW          L\"msctls_hotkey32\"\n#else\nstatic const WCHAR HOTKEY_CLASSW[] = { 'm','s','c','t','l','s','_',\n  'h','o','t','k','e','y','3','2',0 };\n#endif\n#define HOTKEY_CLASS            WINELIB_NAME_AW(HOTKEY_CLASS)\n\n#define HOTKEYF_SHIFT           0x01\n#define HOTKEYF_CONTROL         0x02\n#define HOTKEYF_ALT             0x04\n#define HOTKEYF_EXT             0x08\n\n#define HKCOMB_NONE             0x0001\n#define HKCOMB_S                0x0002\n#define HKCOMB_C                0x0004\n#define HKCOMB_A                0x0008\n#define HKCOMB_SC               0x0010\n#define HKCOMB_SA               0x0020\n#define HKCOMB_CA               0x0040\n#define HKCOMB_SCA              0x0080\n\n#define HKM_SETHOTKEY           (WM_USER+1)\n#define HKM_GETHOTKEY           (WM_USER+2)\n#define HKM_SETRULES            (WM_USER+3)\n\n\n/* animate control */\n\n#define ANIMATE_CLASSA        \"SysAnimate32\"\n#if defined(__GNUC__)\n# define ANIMATE_CLASSW (const WCHAR []){ 'S','y','s', \\\n  'A','n','i','m','a','t','e','3','2',0 }\n#elif defined(_MSC_VER)\n# define ANIMATE_CLASSW       L\"SysAnimate32\"\n#else\nstatic const WCHAR ANIMATE_CLASSW[] = { 'S','y','s',\n  'A','n','i','m','a','t','e','3','2',0 };\n#endif\n#define ANIMATE_CLASS           WINELIB_NAME_AW(ANIMATE_CLASS)\n\n\n#define ACM_OPENA               (WM_USER+100)\n#define ACM_OPENW               (WM_USER+103)\n#define ACM_OPEN                WINELIB_NAME_AW(ACM_OPEN)\n#define ACM_PLAY                (WM_USER+101)\n#define ACM_STOP                (WM_USER+102)\n\n#define ACN_START               1\n#define ACN_STOP                2\n\n#define Animate_CreateA(hwndP,id,dwStyle,hInstance) \\\n    CreateWindowA(ANIMATE_CLASSA,NULL,dwStyle,0,0,0,0,hwndP,(HMENU)(id),hInstance,NULL)\n#define Animate_CreateW(hwndP,id,dwStyle,hInstance) \\\n    CreateWindowW(ANIMATE_CLASSW,NULL,dwStyle,0,0,0,0,hwndP,(HMENU)(id),hInstance,NULL)\n#define Animate_Create WINELIB_NAME_AW(Animate_Create)\n#define Animate_OpenA(hwnd,szName) \\\n    (BOOL)SNDMSGA(hwnd,ACM_OPENA,0,(LPARAM)(LPSTR)(szName))\n#define Animate_OpenW(hwnd,szName) \\\n    (BOOL)SNDMSGW(hwnd,ACM_OPENW,0,(LPARAM)(LPWSTR)(szName))\n#define Animate_Open WINELIB_NAME_AW(Animate_Open)\n#define Animate_OpenExA(hwnd,hInst,szName) \\\n    (BOOL)SNDMSGA(hwnd,ACM_OPENA,(WPARAM)hInst,(LPARAM)(LPSTR)(szName))\n#define Animate_OpenExW(hwnd,hInst,szName) \\\n    (BOOL)SNDMSGW(hwnd,ACM_OPENW,(WPARAM)hInst,(LPARAM)(LPWSTR)(szName))\n#define Animate_OpenEx WINELIB_NAME_AW(Animate_OpenEx)\n#define Animate_Play(hwnd,from,to,rep) \\\n    (BOOL)SNDMSG(hwnd,ACM_PLAY,(WPARAM)(UINT)(rep),(LPARAM)MAKELONG(from,to))\n#define Animate_Stop(hwnd) \\\n    (BOOL)SNDMSG(hwnd,ACM_STOP,0,0)\n#define Animate_Close(hwnd) \\\n    (BOOL)SNDMSG(hwnd,ACM_OPENA,0,0)\n#define Animate_Seek(hwnd,frame) \\\n    (BOOL)SNDMSG(hwnd,ACM_PLAY,1,(LPARAM)MAKELONG(frame,frame))\n\n\n/**************************************************************************\n * IP Address control\n */\n\n#define WC_IPADDRESSA\t\t\"SysIPAddress32\"\n#if defined(__GNUC__)\n# define WC_IPADDRESSW (const WCHAR []){ 'S','y','s', \\\n  'I','P','A','d','d','r','e','s','s','3','2',0 }\n#elif defined(_MSC_VER)\n# define WC_IPADDRESSW          L\"SysIPAddress32\"\n#else\nstatic const WCHAR WC_IPADDRESSW[] = { 'S','y','s',\n  'I','P','A','d','d','r','e','s','s','3','2',0 };\n#endif\n#define WC_IPADDRESS\t\tWINELIB_NAME_AW(WC_IPADDRESS)\n\n#define IPM_CLEARADDRESS\t(WM_USER+100)\n#define IPM_SETADDRESS\t\t(WM_USER+101)\n#define IPM_GETADDRESS\t\t(WM_USER+102)\n#define IPM_SETRANGE\t\t(WM_USER+103)\n#define IPM_SETFOCUS\t\t(WM_USER+104)\n#define IPM_ISBLANK\t\t(WM_USER+105)\n\n#define IPN_FIRST               (0U-860U)\n#define IPN_LAST                (0U-879U)\n#define IPN_FIELDCHANGED        (IPN_FIRST-0)\n\ntypedef struct tagNMIPADDRESS\n{\n    NMHDR hdr;\n    INT iField;\n    INT iValue;\n} NMIPADDRESS, *LPNMIPADDRESS;\n\n#define MAKEIPRANGE(low,high) \\\n    ((LPARAM)(WORD)(((BYTE)(high)<<8)+(BYTE)(low)))\n#define MAKEIPADDRESS(b1,b2,b3,b4) \\\n    ((LPARAM)(((DWORD)(b1)<<24)+((DWORD)(b2)<<16)+((DWORD)(b3)<<8)+((DWORD)(b4))))\n\n#define FIRST_IPADDRESS(x)\t(((x)>>24)&0xff)\n#define SECOND_IPADDRESS(x)\t(((x)>>16)&0xff)\n#define THIRD_IPADDRESS(x)\t(((x)>>8)&0xff)\n#define FOURTH_IPADDRESS(x)\t((x)&0xff)\n\n\n/**************************************************************************\n * Native Font control\n */\n\n#define WC_NATIVEFONTCTLA\t\"NativeFontCtl\"\n#if defined(__GNUC__)\n# define WC_NATIVEFONTCTLW (const WCHAR []){ 'N','a','t','i','v','e', \\\n  'F','o','n','t','C','t','l',0 }\n#elif defined(_MSC_VER)\n# define WC_NATIVEFONTCTLW      L\"NativeFontCtl\"\n#else\nstatic const WCHAR WC_NATIVEFONTCTLW[] = { 'N','a','t','i','v','e',\n  'F','o','n','t','C','t','l',0 };\n#endif\n#define WC_NATIVEFONTCTL\tWINELIB_NAME_AW(WC_NATIVEFONTCTL)\n\n\n/**************************************************************************\n * Month calendar control\n *\n */\n\n#define MONTHCAL_CLASSA\t\"SysMonthCal32\"\n#if defined(__GNUC__)\n# define MONTHCAL_CLASSW (const WCHAR []){ 'S','y','s', \\\n  'M','o','n','t','h','C','a','l','3','2',0 }\n#elif defined(_MSC_VER)\n# define MONTHCAL_CLASSW L\"SysMonthCal32\"\n#else\nstatic const WCHAR MONTHCAL_CLASSW[] = { 'S','y','s',\n  'M','o','n','t','h','C','a','l','3','2',0 };\n#endif\n#define MONTHCAL_CLASS\t\tWINELIB_NAME_AW(MONTHCAL_CLASS)\n\n#define MCM_FIRST             0x1000\n#define MCN_FIRST             (0U-750U)\n#define MCN_LAST              (0U-759U)\n\n\n#define MCM_GETCURSEL         (MCM_FIRST + 1)\n#define MCM_SETCURSEL         (MCM_FIRST + 2)\n#define MCM_GETMAXSELCOUNT    (MCM_FIRST + 3)\n#define MCM_SETMAXSELCOUNT    (MCM_FIRST + 4)\n#define MCM_GETSELRANGE       (MCM_FIRST + 5)\n#define MCM_SETSELRANGE       (MCM_FIRST + 6)\n#define MCM_GETMONTHRANGE     (MCM_FIRST + 7)\n#define MCM_SETDAYSTATE       (MCM_FIRST + 8)\n#define MCM_GETMINREQRECT     (MCM_FIRST + 9)\n#define MCM_SETCOLOR          (MCM_FIRST + 10)\n#define MCM_GETCOLOR          (MCM_FIRST + 11)\n#define MCM_SETTODAY          (MCM_FIRST + 12)\n#define MCM_GETTODAY          (MCM_FIRST + 13)\n#define MCM_HITTEST           (MCM_FIRST + 14)\n#define MCM_SETFIRSTDAYOFWEEK (MCM_FIRST + 15)\n#define MCM_GETFIRSTDAYOFWEEK (MCM_FIRST + 16)\n#define MCM_GETRANGE          (MCM_FIRST + 17)\n#define MCM_SETRANGE          (MCM_FIRST + 18)\n#define MCM_GETMONTHDELTA     (MCM_FIRST + 19)\n#define MCM_SETMONTHDELTA     (MCM_FIRST + 20)\n#define MCM_GETMAXTODAYWIDTH  (MCM_FIRST + 21)\n#define MCM_GETCURRENTVIEW    (MCM_FIRST + 22)\n#define MCM_GETCALENDARCOUNT  (MCM_FIRST + 23)\n#define MCM_GETCALENDARGRIDINFO (MCM_FIRST + 24)\n#define MCM_GETCALID          (MCM_FIRST + 27)\n#define MCM_SETCALID          (MCM_FIRST + 28)\n#define MCM_SIZERECTTOMIN     (MCM_FIRST + 29)\n#define MCM_SETCALENDARBORDER (MCM_FIRST + 30)\n#define MCM_GETCALENDARBORDER (MCM_FIRST + 31)\n#define MCM_SETCURRENTVIEW    (MCM_FIRST + 32)\n#define MCM_GETUNICODEFORMAT  CCM_GETUNICODEFORMAT\n#define MCM_SETUNICODEFORMAT  CCM_SETUNICODEFORMAT\n\n\n/* Notifications */\n\n#define MCN_VIEWCHANGE        MCN_FIRST\n#define MCN_SELCHANGE         (MCN_FIRST + 1)\n#define MCN_GETDAYSTATE       (MCN_FIRST + 3)\n#define MCN_SELECT            (MCN_FIRST + 4)\n\n#define MCSC_BACKGROUND   0\n#define MCSC_TEXT         1\n#define MCSC_TITLEBK      2\n#define MCSC_TITLETEXT    3\n#define MCSC_MONTHBK      4\n#define MCSC_TRAILINGTEXT 5\n\n\n#define MCHT_TITLE             0x00010000\n#define MCHT_CALENDAR          0x00020000\n#define MCHT_TODAYLINK         0x00030000\n#define MCHT_CALENDARCONTROL   0x00100000\n\n#define MCHT_NEXT              0x01000000\n#define MCHT_PREV              0x02000000\n#define MCHT_NOWHERE           0x00000000\n#define MCHT_TITLEBK           (MCHT_TITLE)\n#define MCHT_TITLEMONTH        (MCHT_TITLE | 0x0001)\n#define MCHT_TITLEYEAR         (MCHT_TITLE | 0x0002)\n#define MCHT_TITLEBTNNEXT      (MCHT_TITLE | MCHT_NEXT | 0x0003)\n#define MCHT_TITLEBTNPREV      (MCHT_TITLE | MCHT_PREV | 0x0003)\n\n#define MCHT_CALENDARBK        (MCHT_CALENDAR)\n#define MCHT_CALENDARDATE      (MCHT_CALENDAR | 0x0001)\n#define MCHT_CALENDARDATENEXT  (MCHT_CALENDARDATE | MCHT_NEXT)\n#define MCHT_CALENDARDATEPREV  (MCHT_CALENDARDATE | MCHT_PREV)\n#define MCHT_CALENDARDAY       (MCHT_CALENDAR | 0x0002)\n#define MCHT_CALENDARWEEKNUM   (MCHT_CALENDAR | 0x0003)\n#define MCHT_CALENDARDATEMIN   (MCHT_CALENDAR | 0x0004)\n#define MCHT_CALENDARDATEMAX   (MCHT_CALENDAR | 0x0005)\n\n\n#define GMR_VISIBLE     0\n#define GMR_DAYSTATE    1\n\n\n/*  Month calendar's structures */\n\n\ntypedef struct {\n        UINT cbSize;\n        POINT pt;\n        UINT uHit;\n        SYSTEMTIME st;\n        /* Vista */\n        RECT rc;\n        INT iOffset;\n        INT iRow;\n        INT iCol;\n} MCHITTESTINFO, *PMCHITTESTINFO;\n\n#define MCHITTESTINFO_V1_SIZE CCSIZEOF_STRUCT(MCHITTESTINFO, st)\n\ntypedef struct tagNMSELCHANGE\n{\n    NMHDR           nmhdr;\n    SYSTEMTIME      stSelStart;\n    SYSTEMTIME      stSelEnd;\n} NMSELCHANGE, *LPNMSELCHANGE;\n\ntypedef NMSELCHANGE NMSELECT, *LPNMSELECT;\ntypedef DWORD MONTHDAYSTATE, *LPMONTHDAYSTATE;\n\ntypedef struct tagNMDAYSTATE\n{\n    NMHDR           nmhdr;\n    SYSTEMTIME      stStart;\n    int             cDayState;\n    LPMONTHDAYSTATE prgDayState;\n} NMDAYSTATE, *LPNMDAYSTATE;\n\n\n/* macros */\n\n#define MonthCal_GetCurSel(hmc, pst) \\\n\t\t(BOOL)SNDMSG(hmc, MCM_GETCURSEL, 0, (LPARAM)(pst))\n#define MonthCal_SetCurSel(hmc, pst)  \\\n\t\t(BOOL)SNDMSG(hmc, MCM_SETCURSEL, 0, (LPARAM)(pst))\n#define MonthCal_GetMaxSelCount(hmc) \\\n                (DWORD)SNDMSG(hmc, MCM_GETMAXSELCOUNT, 0, 0)\n#define MonthCal_SetMaxSelCount(hmc, n) \\\n                (BOOL)SNDMSG(hmc, MCM_SETMAXSELCOUNT, (WPARAM)(n), 0)\n#define MonthCal_GetSelRange(hmc, rgst) \\\n\t\tSNDMSG(hmc, MCM_GETSELRANGE, 0, (LPARAM) (rgst))\n#define MonthCal_SetSelRange(hmc, rgst) \\\n\t\tSNDMSG(hmc, MCM_SETSELRANGE, 0, (LPARAM) (rgst))\n#define MonthCal_GetMonthRange(hmc, gmr, rgst) \\\n\t\t(DWORD)SNDMSG(hmc, MCM_GETMONTHRANGE, (WPARAM)(gmr), (LPARAM)(rgst))\n#define MonthCal_SetDayState(hmc, cbds, rgds) \\\n\t\tSNDMSG(hmc, MCM_SETDAYSTATE, (WPARAM)(cbds), (LPARAM)(rgds))\n#define MonthCal_GetMinReqRect(hmc, prc) \\\n\t\tSNDMSG(hmc, MCM_GETMINREQRECT, 0, (LPARAM)(prc))\n#define MonthCal_SetColor(hmc, iColor, clr)\\\n        SNDMSG(hmc, MCM_SETCOLOR, iColor, clr)\n#define MonthCal_GetColor(hmc, iColor) \\\n\t\tSNDMSG(hmc, MCM_SETCOLOR, iColor, 0)\n#define MonthCal_GetToday(hmc, pst)\\\n\t\t(BOOL)SNDMSG(hmc, MCM_GETTODAY, 0, (LPARAM)pst)\n#define MonthCal_SetToday(hmc, pst)\\\n\t\tSNDMSG(hmc, MCM_SETTODAY, 0, (LPARAM)pst)\n#define MonthCal_HitTest(hmc, pinfo) \\\n        SNDMSG(hmc, MCM_HITTEST, 0, (LPARAM)(PMCHITTESTINFO)pinfo)\n#define MonthCal_SetFirstDayOfWeek(hmc, iDay) \\\n        SNDMSG(hmc, MCM_SETFIRSTDAYOFWEEK, 0, iDay)\n#define MonthCal_GetFirstDayOfWeek(hmc) \\\n        (DWORD)SNDMSG(hmc, MCM_GETFIRSTDAYOFWEEK, 0, 0)\n#define MonthCal_GetRange(hmc, rgst) \\\n        (DWORD)SNDMSG(hmc, MCM_GETRANGE, 0, (LPARAM)(rgst))\n#define MonthCal_SetRange(hmc, gd, rgst) \\\n        (BOOL)SNDMSG(hmc, MCM_SETRANGE, (WPARAM)(gd), (LPARAM)(rgst))\n#define MonthCal_GetMonthDelta(hmc) \\\n        (int)SNDMSG(hmc, MCM_GETMONTHDELTA, 0, 0)\n#define MonthCal_SetMonthDelta(hmc, n) \\\n        (int)SNDMSG(hmc, MCM_SETMONTHDELTA, n, 0)\n#define MonthCal_GetMaxTodayWidth(hmc) \\\n        (DWORD)SNDMSG(hmc, MCM_GETMAXTODAYWIDTH, 0, 0)\n#define MonthCal_SetUnicodeFormat(hwnd, fUnicode)  \\\n        (BOOL)SNDMSG((hwnd), MCM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0)\n#define MonthCal_GetUnicodeFormat(hwnd)  \\\n        (BOOL)SNDMSG((hwnd), MCM_GETUNICODEFORMAT, 0, 0)\n\n\n/**************************************************************************\n * Date and time picker control\n */\n\n#define DATETIMEPICK_CLASSA\t\"SysDateTimePick32\"\n#if defined(__GNUC__)\n# define DATETIMEPICK_CLASSW (const WCHAR []){ 'S','y','s', \\\n  'D','a','t','e','T','i','m','e','P','i','c','k','3','2',0 }\n#elif defined(_MSC_VER)\n# define DATETIMEPICK_CLASSW    L\"SysDateTimePick32\"\n#else\nstatic const WCHAR DATETIMEPICK_CLASSW[] = { 'S','y','s',\n  'D','a','t','e','T','i','m','e','P','i','c','k','3','2',0 };\n#endif\n#define DATETIMEPICK_CLASS\tWINELIB_NAME_AW(DATETIMEPICK_CLASS)\n\n#define DTM_FIRST        0x1000\n#define DTN_FIRST       (0U-760U)\n#define DTN_LAST        (0U-799U)\n\n\n#define DTM_GETSYSTEMTIME\t(DTM_FIRST+1)\n#define DTM_SETSYSTEMTIME\t(DTM_FIRST+2)\n#define DTM_GETRANGE\t\t(DTM_FIRST+3)\n#define DTM_SETRANGE\t\t(DTM_FIRST+4)\n#define DTM_SETFORMATA\t        (DTM_FIRST+5)\n#define DTM_SETFORMATW\t        (DTM_FIRST + 50)\n#define DTM_SETFORMAT\t\tWINELIB_NAME_AW(DTM_SETFORMAT)\n#define DTM_SETMCCOLOR\t\t(DTM_FIRST+6)\n#define DTM_GETMCCOLOR\t\t(DTM_FIRST+7)\n#define DTM_GETMONTHCAL\t\t(DTM_FIRST+8)\n#define DTM_SETMCFONT\t\t(DTM_FIRST+9)\n#define DTM_GETMCFONT\t\t(DTM_FIRST+10)\n#define DTM_SETMCSTYLE\t\t(DTM_FIRST+11)\n#define DTM_GETMCSTYLE\t\t(DTM_FIRST+12)\n#define DTM_CLOSEMONTHCAL\t(DTM_FIRST+13)\n#define DTM_GETDATETIMEPICKERINFO (DTM_FIRST+14)\n#define DTM_GETIDEALSIZE\t(DTM_FIRST+15)\n\n/* Datetime Notifications */\n\n#define DTN_DATETIMECHANGE  (DTN_FIRST + 1)\n#define DTN_USERSTRINGA     (DTN_FIRST + 2)\n#define DTN_WMKEYDOWNA      (DTN_FIRST + 3)\n#define DTN_FORMATA         (DTN_FIRST + 4)\n#define DTN_FORMATQUERYA    (DTN_FIRST + 5)\n#define DTN_DROPDOWN        (DTN_FIRST + 6)\n#define DTN_CLOSEUP         (DTN_FIRST + 7)\n#define DTN_USERSTRINGW     (DTN_FIRST + 15)\n#define DTN_WMKEYDOWNW      (DTN_FIRST + 16)\n#define DTN_FORMATW         (DTN_FIRST + 17)\n#define DTN_FORMATQUERYW    (DTN_FIRST + 18)\n\n#define DTN_USERSTRING      WINELIB_NAME_AW(DTN_USERSTRING)\n#define DTN_WMKEYDOWN       WINELIB_NAME_AW(DTN_WMKEYDOWN)\n#define DTN_FORMAT          WINELIB_NAME_AW(DTN_FORMAT)\n#define DTN_FORMATQUERY     WINELIB_NAME_AW(DTN_FORMATQUERY)\n\n\ntypedef struct tagNMDATETIMECHANGE\n{\n    NMHDR       nmhdr;\n    DWORD       dwFlags;\n    SYSTEMTIME  st;\n} NMDATETIMECHANGE, *LPNMDATETIMECHANGE;\n\ntypedef struct tagNMDATETIMESTRINGA\n{\n    NMHDR      nmhdr;\n    LPCSTR     pszUserString;\n    SYSTEMTIME st;\n    DWORD      dwFlags;\n} NMDATETIMESTRINGA, *LPNMDATETIMESTRINGA;\n\ntypedef struct tagNMDATETIMESTRINGW\n{\n    NMHDR      nmhdr;\n    LPCWSTR    pszUserString;\n    SYSTEMTIME st;\n    DWORD      dwFlags;\n} NMDATETIMESTRINGW, *LPNMDATETIMESTRINGW;\n\nDECL_WINELIB_TYPE_AW(NMDATETIMESTRING)\nDECL_WINELIB_TYPE_AW(LPNMDATETIMESTRING)\n\ntypedef struct tagNMDATETIMEWMKEYDOWNA\n{\n    NMHDR      nmhdr;\n    int        nVirtKey;\n    LPCSTR     pszFormat;\n    SYSTEMTIME st;\n} NMDATETIMEWMKEYDOWNA, *LPNMDATETIMEWMKEYDOWNA;\n\ntypedef struct tagNMDATETIMEWMKEYDOWNW\n{\n    NMHDR      nmhdr;\n    int        nVirtKey;\n    LPCWSTR    pszFormat;\n    SYSTEMTIME st;\n} NMDATETIMEWMKEYDOWNW, *LPNMDATETIMEWMKEYDOWNW;\n\nDECL_WINELIB_TYPE_AW(NMDATETIMEWMKEYDOWN)\nDECL_WINELIB_TYPE_AW(LPNMDATETIMEWMKEYDOWN)\n\ntypedef struct tagNMDATETIMEFORMATA\n{\n    NMHDR nmhdr;\n    LPCSTR  pszFormat;\n    SYSTEMTIME st;\n    LPCSTR pszDisplay;\n    CHAR szDisplay[64];\n} NMDATETIMEFORMATA, *LPNMDATETIMEFORMATA;\n\n\ntypedef struct tagNMDATETIMEFORMATW\n{\n    NMHDR nmhdr;\n    LPCWSTR pszFormat;\n    SYSTEMTIME st;\n    LPCWSTR pszDisplay;\n    WCHAR szDisplay[64];\n} NMDATETIMEFORMATW, *LPNMDATETIMEFORMATW;\n\nDECL_WINELIB_TYPE_AW(NMDATETIMEFORMAT)\nDECL_WINELIB_TYPE_AW(LPNMDATETIMEFORMAT)\n\ntypedef struct tagNMDATETIMEFORMATQUERYA\n{\n    NMHDR nmhdr;\n    LPCSTR pszFormat;\n    SIZE szMax;\n} NMDATETIMEFORMATQUERYA, *LPNMDATETIMEFORMATQUERYA;\n\ntypedef struct tagNMDATETIMEFORMATQUERYW\n{\n    NMHDR nmhdr;\n    LPCWSTR pszFormat;\n    SIZE szMax;\n} NMDATETIMEFORMATQUERYW, *LPNMDATETIMEFORMATQUERYW;\n\nDECL_WINELIB_TYPE_AW(NMDATETIMEFORMATQUERY)\nDECL_WINELIB_TYPE_AW(LPNMDATETIMEFORMATQUERY)\n\n\n\n#define GDT_ERROR    -1\n#define GDT_VALID    0\n#define GDT_NONE     1\n\n#define GDTR_MIN     0x0001\n#define GDTR_MAX     0x0002\n\n\n#define DateTime_GetSystemtime(hdp, pst)   \\\n  (DWORD)SNDMSG (hdp, DTM_GETSYSTEMTIME , 0, (LPARAM)(pst))\n#define DateTime_SetSystemtime(hdp, gd, pst)   \\\n  (BOOL)SNDMSG (hdp, DTM_SETSYSTEMTIME, (LPARAM)(gd), (LPARAM)(pst))\n#define DateTime_GetRange(hdp, rgst)  \\\n  (DWORD)SNDMSG (hdp, DTM_GETRANGE, 0, (LPARAM)(rgst))\n#define DateTime_SetRange(hdp, gd, rgst) \\\n   (BOOL)SNDMSG (hdp, DTM_SETRANGE, (WPARAM)(gd), (LPARAM)(rgst))\n#define DateTime_SetFormatA(hdp, sz)  \\\n  (BOOL)SNDMSGA (hdp, DTM_SETFORMATA, 0, (LPARAM)(sz))\n#define DateTime_SetFormatW(hdp, sz)  \\\n  (BOOL)SNDMSGW (hdp, DTM_SETFORMATW, 0, (LPARAM)(sz))\n#define DateTime_SetFormat WINELIB_NAME_AW(DateTime_SetFormat)\n#define DateTime_GetMonthCalColor(hdp, iColor) \\\n  SNDMSG (hdp, DTM_GETMCCOLOR, iColor, 0)\n#define DateTime_SetMonthCalColor(hdp, iColor, clr) \\\n  SNDMSG (hdp, DTM_SETMCCOLOR, iColor, clr)\n#define DateTime_GetMonthCal(hdp)  \\\n  (HWND) SNDMSG (hdp, DTM_GETMONTHCAL, 0, 0)\n#define DateTime_SetMonthCalFont(hdp, hfont, fRedraw) \\\n  SNDMSG (hdp, DTM_SETMCFONT, (WPARAM)hfont, (LPARAM)fRedraw)\n#define DateTime_GetMonthCalFont(hdp) \\\n  SNDMSG (hdp, DTM_GETMCFONT, 0, 0)\n#define DateTime_GetIdealSize(hdp, sz) \\\n  (BOOL) SNDMSG (hdp, DTM_GETIDEALSIZE, 0, (LPARAM)sz)\n\n#define DA_LAST         (0x7fffffff)\n#define DPA_APPEND      (0x7fffffff)\n#define DPA_ERR         (-1)\n\n#define DSA_APPEND      (0x7fffffff)\n#define DSA_ERR         (-1)\n\nstruct _DSA;\ntypedef struct _DSA *HDSA;\n\ntypedef INT (CALLBACK *PFNDSAENUMCALLBACK)(LPVOID, LPVOID);\n\nHDSA   WINAPI DSA_Create(INT, INT);\nBOOL   WINAPI DSA_Destroy(HDSA);\nvoid   WINAPI DSA_DestroyCallback(HDSA, PFNDSAENUMCALLBACK, LPVOID);\nLPVOID WINAPI DSA_GetItemPtr(HDSA, INT);\nINT    WINAPI DSA_InsertItem(HDSA, INT, LPVOID);\n\n#define DPAS_SORTED             0x0001\n#define DPAS_INSERTBEFORE       0x0002\n#define DPAS_INSERTAFTER        0x0004\n\n\nstruct _DPA;\ntypedef struct _DPA *HDPA;\n\n#define DPA_GetPtrCount(hdpa)  (*(INT*)(hdpa))\n\ntypedef INT (CALLBACK *PFNDPAENUMCALLBACK)(LPVOID, LPVOID);\ntypedef INT (CALLBACK *PFNDPACOMPARE)(LPVOID, LPVOID, LPARAM);\ntypedef PVOID (CALLBACK *PFNDPAMERGE)(UINT,PVOID,PVOID,LPARAM);\n\n/* merge callback codes */\n#define DPAMM_MERGE     1\n#define DPAMM_DELETE    2\n#define DPAMM_INSERT    3\n\n/* merge options */\n#define DPAM_SORTED     0x00000001\n#define DPAM_NORMAL     0x00000002\n#define DPAM_UNION      0x00000004\n#define DPAM_INTERSECT  0x00000008\n\nHDPA   WINAPI DPA_Create(INT);\nBOOL   WINAPI DPA_Destroy(HDPA);\nLPVOID WINAPI DPA_DeletePtr(HDPA, INT);\nBOOL   WINAPI DPA_DeleteAllPtrs(HDPA);\nBOOL   WINAPI DPA_SetPtr(HDPA, INT, LPVOID);\nLPVOID WINAPI DPA_GetPtr(HDPA, INT);\nINT    WINAPI DPA_GetPtrIndex(HDPA, LPCVOID);\nULONGLONG WINAPI DPA_GetSize(HDPA);\nBOOL   WINAPI DPA_Grow(HDPA, INT);\nINT    WINAPI DPA_InsertPtr(HDPA, INT, LPVOID);\nBOOL   WINAPI DPA_Sort(HDPA, PFNDPACOMPARE, LPARAM);\nvoid   WINAPI DPA_EnumCallback(HDPA, PFNDPAENUMCALLBACK, LPVOID);\nvoid   WINAPI DPA_DestroyCallback(HDPA, PFNDPAENUMCALLBACK, LPVOID);\nINT    WINAPI DPA_Search(HDPA, LPVOID, INT, PFNDPACOMPARE, LPARAM, UINT);\nBOOL   WINAPI DPA_Merge(HDPA, HDPA, DWORD, PFNDPACOMPARE, PFNDPAMERGE, LPARAM);\n\n/* save/load from stream */\ntypedef struct _DPASTREAMINFO\n{\n    INT    iPos;   /* item index */\n    LPVOID pvItem;\n} DPASTREAMINFO;\n\nstruct IStream;\ntypedef HRESULT (CALLBACK *PFNDPASTREAM)(DPASTREAMINFO*, struct IStream*, LPVOID);\n\nHRESULT WINAPI DPA_LoadStream(HDPA*, PFNDPASTREAM, struct IStream*, LPVOID);\nHRESULT WINAPI DPA_SaveStream(HDPA, PFNDPASTREAM, struct IStream*, LPVOID);\n\nBOOL WINAPI Str_SetPtrW (LPWSTR *, LPCWSTR);\n\n/**************************************************************************\n * SysLink control\n */\n\n#if defined(__GNUC__)\n# define WC_LINK (const WCHAR []){ 'S','y','s','L','i','n','k',0 }\n#elif defined(_MSC_VER)\n# define WC_LINK             L\"SysLink\"\n#else\nstatic const WCHAR WC_LINK[] = { 'S','y','s','L','i','n','k',0 };\n#endif\n\n/* SysLink styles */\n#define LWS_TRANSPARENT      0x0001\n#define LWS_IGNORERETURN     0x0002\n#define LWS_NOPREFIX         0x0004\n#define LWS_USEVISUALSTYLE   0x0008\n#define LWS_USECUSTOMTEXT    0x0010\n#define LWS_RIGHT            0x0020\n\n/* SysLink messages */\n#define LM_HITTEST           (WM_USER + 768)\n#define LM_GETIDEALHEIGHT    (WM_USER + 769)\n#define LM_GETIDEALSIZE      (LM_GETIDEALHEIGHT)\n#define LM_SETITEM           (WM_USER + 770)\n#define LM_GETITEM           (WM_USER + 771)\n\n/* SysLink links flags */\n\n#define LIF_ITEMINDEX   1\n#define LIF_STATE       2\n#define LIF_ITEMID      4\n#define LIF_URL         8\n\n/* SysLink links states */\n\n#define LIS_FOCUSED          0x0001\n#define LIS_ENABLED          0x0002\n#define LIS_VISITED          0x0004\n#define LIS_HOTTRACK         0x0008\n#define LIS_DEFAULTCOLORS    0x0010\n\n/* SysLink misc. */\n\n#define INVALID_LINK_INDEX  (-1)\n#define MAX_LINKID_TEXT     48\n#define L_MAX_URL_LENGTH    2084\n\n/* SysLink structures */\n\ntypedef struct tagLITEM\n{\n  UINT mask;\n  int iLink;\n  UINT state;\n  UINT stateMask;\n  WCHAR szID[MAX_LINKID_TEXT];\n  WCHAR szUrl[L_MAX_URL_LENGTH];\n} LITEM, *PLITEM;\n\ntypedef struct tagLHITTESTINFO\n{\n  POINT pt;\n  LITEM item;\n} LHITTESTINFO, *PLHITTESTINFO;\n\ntypedef struct tagNMLINK\n{\n  NMHDR hdr;\n  LITEM item;\n} NMLINK, *PNMLINK;\n\ntypedef struct tagNMLVLINK\n{\n    NMHDR hdr;\n    LITEM link;\n    int iItem;\n    int iSubItem;\n} NMLVLINK, *PNMLVLINK;\n\n/**************************************************************************\n * Static control\n */\n\n#define WC_STATICA\t\t\"Static\"\n#if defined(__GNUC__)\n# define WC_STATICW \t\t(const WCHAR []){ 'S','t','a','t','i','c',0 }\n#elif defined(_MSC_VER)\n# define WC_STATICW \t\tL\"Static\"\n#else\nstatic const WCHAR WC_STATICW[] = { 'S','t','a','t','i','c',0 };\n#endif\n#define WC_STATIC\t\tWINELIB_NAME_AW(WC_STATIC)\n\n/**************************************************************************\n * Combobox control\n */\n\n#define WC_COMBOBOXA              \"ComboBox\"\n#if defined(__GNUC__)\n# define WC_COMBOBOXW             (const WCHAR []){ 'C','o','m','b','o','B','o','x',0 }\n#elif defined(_MSC_VER)\n# define WC_COMBOBOXW             L\"ComboBox\"\n#else\nstatic const WCHAR WC_COMBOBOXW[] = { 'C','o','m','b','o','B','o','x',0 };\n#endif\n#define WC_COMBOBOX               WINELIB_NAME_AW(WC_COMBOBOX)\n\n#define CBM_FIRST                 0x1700\n#define CB_SETMINVISIBLE          (CBM_FIRST + 1)\n#define CB_GETMINVISIBLE          (CBM_FIRST + 2)\n#define CB_SETCUEBANNER           (CBM_FIRST + 3)\n#define CB_GETCUEBANNER           (CBM_FIRST + 4)\n\n#define ComboBox_GetMinVisible(hwnd) \\\n        ((int)SendMessage((hwnd), CB_GETMINVISIBLE, 0, 0))\n#define ComboBox_SetMinVisible(hwnd, count) \\\n        ((BOOL)SendMessage((hwnd), CB_SETMINVISIBLE, (WPARAM)(count), 0))\n\n/**************************************************************************\n * Edit control\n */\n\n#define WC_EDITA                  \"Edit\"\n#if defined(__GNUC__)\n# define WC_EDITW                 (const WCHAR []){ 'E','d','i','t',0 }\n#elif defined(_MSC_VER)\n# define WC_EDITW                 L\"Edit\"\n#else\nstatic const WCHAR WC_EDITW[] = { 'E','d','i','t',0 };\n#endif\n#define WC_EDIT                   WINELIB_NAME_AW(WC_EDIT)\n\ntypedef struct _tagEDITBALLOONTIP\n{\n    DWORD cbStruct;\n    LPCWSTR pszTitle;\n    LPCWSTR pszText;\n    INT ttiIcon;\n} EDITBALLOONTIP, *PEDITBALLOONTIP;\n\n#define ECM_FIRST                 0x1500\n#define EM_SETCUEBANNER           (ECM_FIRST + 1)\n#define EM_GETCUEBANNER           (ECM_FIRST + 2)\n#define EM_SHOWBALLOONTIP         (ECM_FIRST + 3)\n#define EM_HIDEBALLOONTIP         (ECM_FIRST + 4)\n#define EM_SETHILITE              (ECM_FIRST + 5)\n#define EM_GETHILITE              (ECM_FIRST + 6)\n#define EM_NOSETFOCUS             (ECM_FIRST + 7)\n#define EM_TAKEFOCUS              (ECM_FIRST + 8)\n\n/**************************************************************************\n * Listbox control\n */\n\n#define WC_LISTBOXA               \"ListBox\"\n#if defined(__GNUC__)\n# define WC_LISTBOXW              (const WCHAR []){ 'L','i','s','t','B','o','x',0 }\n#elif defined(_MSC_VER)\n# define WC_LISTBOXW              L\"ListBox\"\n#else\nstatic const WCHAR WC_LISTBOXW[] = { 'L','i','s','t','B','o','x',0 };\n#endif\n#define WC_LISTBOX                WINELIB_NAME_AW(WC_LISTBOX)\n\n/**************************************************************************\n * Scrollbar control\n */\n\n#define WC_SCROLLBARA             \"ScrollBar\"\n#if defined(__GNUC__)\n# define WC_SCROLLBARW            (const WCHAR []){ 'S','c','r','o','l','l','B','a','r',0 }\n#elif defined(_MSC_VER)\n# define WC_SCROLLBARW            L\"ScrollBar\"\n#else\nstatic const WCHAR WC_SCROLLBARW[] = { 'S','c','r','o','l','l','B','a','r',0 };\n#endif\n#define WC_SCROLLBAR              WINELIB_NAME_AW(WC_SCROLLBAR)\n\n/**************************************************************************\n * Task dialog\n */\n\n#ifndef NOTASKDIALOG\n\n#include <pshpack1.h>\n\nenum _TASKDIALOG_FLAGS\n{\n    TDF_ENABLE_HYPERLINKS           = 0x0001,\n    TDF_USE_HICON_MAIN              = 0x0002,\n    TDF_USE_HICON_FOOTER            = 0x0004,\n    TDF_ALLOW_DIALOG_CANCELLATION   = 0x0008,\n    TDF_USE_COMMAND_LINKS           = 0x0010,\n    TDF_USE_COMMAND_LINKS_NO_ICON   = 0x0020,\n    TDF_EXPAND_FOOTER_AREA          = 0x0040,\n    TDF_EXPANDED_BY_DEFAULT         = 0x0080,\n    TDF_VERIFICATION_FLAG_CHECKED   = 0x0100,\n    TDF_SHOW_PROGRESS_BAR           = 0x0200,\n    TDF_SHOW_MARQUEE_PROGRESS_BAR   = 0x0400,\n    TDF_CALLBACK_TIMER              = 0x0800,\n    TDF_POSITION_RELATIVE_TO_WINDOW = 0x1000,\n    TDF_RTL_LAYOUT                  = 0x2000,\n    TDF_NO_DEFAULT_RADIO_BUTTON     = 0x4000,\n    TDF_CAN_BE_MINIMIZED            = 0x8000,\n    TDF_NO_SET_FOREGROUND           = 0x10000,\n    TDF_SIZE_TO_CONTENT             = 0x01000000\n};\ntypedef int TASKDIALOG_FLAGS;\n\ntypedef enum _TASKDIALOG_MESSAGES\n{\n    TDM_NAVIGATE_PAGE                       = WM_USER + 101,\n    TDM_CLICK_BUTTON                        = WM_USER + 102,\n    TDM_SET_MARQUEE_PROGRESS_BAR            = WM_USER + 103,\n    TDM_SET_PROGRESS_BAR_STATE              = WM_USER + 104,\n    TDM_SET_PROGRESS_BAR_RANGE              = WM_USER + 105,\n    TDM_SET_PROGRESS_BAR_POS                = WM_USER + 106,\n    TDM_SET_PROGRESS_BAR_MARQUEE            = WM_USER + 107,\n    TDM_SET_ELEMENT_TEXT                    = WM_USER + 108,\n    TDM_CLICK_RADIO_BUTTON                  = WM_USER + 110,\n    TDM_ENABLE_BUTTON                       = WM_USER + 111,\n    TDM_ENABLE_RADIO_BUTTON                 = WM_USER + 112,\n    TDM_CLICK_VERIFICATION                  = WM_USER + 113,\n    TDM_UPDATE_ELEMENT_TEXT                 = WM_USER + 114,\n    TDM_SET_BUTTON_ELEVATION_REQUIRED_STATE = WM_USER + 115,\n    TDM_UPDATE_ICON                         = WM_USER + 116,\n} TASKDIALOG_MESSAGES;\n\ntypedef enum _TASKDIALOG_NOTIFICATIONS\n{\n    TDN_CREATED,\n    TDN_NAVIGATED,\n    TDN_BUTTON_CLICKED,\n    TDN_HYPERLINK_CLICKED,\n    TDN_TIMER,\n    TDN_DESTROYED,\n    TDN_RADIO_BUTTON_CLICKED,\n    TDN_DIALOG_CONSTRUCTED,\n    TDN_VERIFICATION_CLICKED,\n    TDN_HELP,\n    TDN_EXPANDO_BUTTON_CLICKED,\n} TASKDIALOG_NOTIFICATIONS;\n\ntypedef enum _TASKDIALOG_ELEMENTS\n{\n    TDE_CONTENT,\n    TDE_EXPANDED_INFORMATION,\n    TDE_FOOTER,\n    TDE_MAIN_INSTRUCTION,\n} TASKDIALOG_ELEMENTS;\n\ntypedef enum _TASKDIALOG_ICON_ELEMENTS\n{\n    TDIE_ICON_MAIN,\n    TDIE_ICON_FOOTER,\n} TASKDIALOG_ICON_ELEMENTS;\n\n#define TD_WARNING_ICON        MAKEINTRESOURCEW(-1)\n#define TD_ERROR_ICON          MAKEINTRESOURCEW(-2)\n#define TD_INFORMATION_ICON    MAKEINTRESOURCEW(-3)\n#define TD_SHIELD_ICON         MAKEINTRESOURCEW(-4)\n\nenum _TASKDIALOG_COMMON_BUTTON_FLAGS\n{\n    TDCBF_OK_BUTTON     = 0x0001,\n    TDCBF_YES_BUTTON    = 0x0002,\n    TDCBF_NO_BUTTON     = 0x0004,\n    TDCBF_CANCEL_BUTTON = 0x0008,\n    TDCBF_RETRY_BUTTON  = 0x0010,\n    TDCBF_CLOSE_BUTTON  = 0x0020\n};\ntypedef int TASKDIALOG_COMMON_BUTTON_FLAGS;\n\ntypedef struct _TASKDIALOG_BUTTON\n{\n    int     nButtonID;\n    PCWSTR  pszButtonText;\n} TASKDIALOG_BUTTON;\n\ntypedef HRESULT (CALLBACK *PFTASKDIALOGCALLBACK)(HWND, UINT, WPARAM, LPARAM, LONG_PTR);\n\ntypedef struct _TASKDIALOGCONFIG\n{\n    UINT        cbSize;\n    HWND        hwndParent;\n    HINSTANCE   hInstance;\n    TASKDIALOG_FLAGS    dwFlags;\n    TASKDIALOG_COMMON_BUTTON_FLAGS  dwCommonButtons;\n    PCWSTR      pszWindowTitle;\n    union\n    {\n        HICON   hMainIcon;\n        PCWSTR  pszMainIcon;\n    } DUMMYUNIONNAME;\n    PCWSTR      pszMainInstruction;\n    PCWSTR      pszContent;\n    UINT        cButtons;\n    const TASKDIALOG_BUTTON *pButtons;\n    int         nDefaultButton;\n    UINT        cRadioButtons;\n    const TASKDIALOG_BUTTON *pRadioButtons;\n    int         nDefaultRadioButton;\n    PCWSTR      pszVerificationText;\n    PCWSTR      pszExpandedInformation;\n    PCWSTR      pszExpandedControlText;\n    PCWSTR      pszCollapsedControlText;\n    union\n    {\n        HICON   hFooterIcon;\n        PCWSTR  pszFooterIcon;\n    } DUMMYUNIONNAME2;\n    PCWSTR      pszFooter;\n    PFTASKDIALOGCALLBACK pfCallback;\n    LONG_PTR    lpCallbackData;\n    UINT        cxWidth;\n} TASKDIALOGCONFIG;\n\nHRESULT WINAPI TaskDialog(HWND owner, HINSTANCE hinst, const WCHAR *title, const WCHAR *main_instruction,\n        const WCHAR *content, TASKDIALOG_COMMON_BUTTON_FLAGS common_buttons, const WCHAR *icon, int *button);\nHRESULT WINAPI TaskDialogIndirect(const TASKDIALOGCONFIG *, int *, int *, BOOL *);\n\n#include <poppack.h>\n\n#endif /* NOTASKDIALOG */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* __WINE_COMMCTRL_H */\n"
  },
  {
    "path": "wine/windows/commctrl.rh",
    "content": "/*\n * Copyright (C) 2008 Vijay Kiran Kamuju\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n/* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */\n#ifndef __MSABI_LONG\n# if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)\n#  define __MSABI_LONG(x)         x ## l\n# else\n#  define __MSABI_LONG(x)         x\n# endif\n#endif\n\n/* Header Control */\n#define HDS_HORZ            0x0000\n#define HDS_BUTTONS         0x0002\n#define HDS_HOTTRACK        0x0004\n#define HDS_HIDDEN          0x0008\n#define HDS_DRAGDROP        0x0040\n#define HDS_FULLDRAG        0x0080\n#define HDS_FILTERBAR       0x0100\n#define HDS_FLAT            0x0200\n#define HDS_CHECKBOXES      0x0400\n#define HDS_NOSIZING        0x0800\n#define HDS_OVERFLOW        0x1000\n\n/* Rebar Control */\n#define RBS_TOOLTIPS        0x0100\n#define RBS_VARHEIGHT       0x0200\n#define RBS_BANDBORDERS     0x0400\n#define RBS_FIXEDORDER      0x0800\n#define RBS_REGISTERDROP    0x1000\n#define RBS_AUTOSIZE        0x2000\n#define RBS_VERTICALGRIPPER 0x4000\n#define RBS_DBLCLKTOGGLE    0x8000\n\n/* Tool tips */\n#define TTS_ALWAYSTIP       0x01\n#define TTS_NOPREFIX        0x02\n#define TTS_NOANIMATE       0x10\n#define TTS_NOFADE          0x20\n#define TTS_BALLOON         0x40\n#define TTS_CLOSE           0x80\n#define TTS_USEVISUALSTYLE  0x100\n\n/* Statusbar Control */\n#define SBARS_SIZEGRIP      0x0100\n#define SBARS_TOOLTIPS      0x0800\n#define SBT_TOOLTIPS        0x0800\n\n/* Toolbar Control */\n#define TBS_AUTOTICKS       0x0001\n#define TBS_VERT            0x0002\n#define TBS_HORZ            0x0000\n#define TBS_TOP             0x0004\n#define TBS_BOTTOM          0x0000\n#define TBS_LEFT            0x0004\n#define TBS_RIGHT           0x0000\n#define TBS_BOTH            0x0008\n#define TBS_NOTICKS         0x0010\n#define TBS_ENABLESELRANGE  0x0020\n#define TBS_FIXEDLENGTH     0x0040\n#define TBS_NOTHUMB         0x0080\n#define TBS_TOOLTIPS        0x0100\n#define TBS_REVERSED        0x0200\n#define TBS_DOWNISLEFT      0x0400\n#define TBS_NOTIFYBEFOREREMOVE 0x0800\n#define TBS_TRANSPARENTBKGND 0x1000\n\n/* UpDown Control */\n#define UDS_WRAP            0x0001\n#define UDS_SETBUDDYINT     0x0002\n#define UDS_ALIGNRIGHT      0x0004\n#define UDS_ALIGNLEFT       0x0008\n#define UDS_AUTOBUDDY       0x0010\n#define UDS_ARROWKEYS       0x0020\n#define UDS_HORZ            0x0040\n#define UDS_NOTHOUSANDS     0x0080\n#define UDS_HOTTRACK        0x0100\n\n/* Progressbar Control */\n#define PBS_SMOOTH          0x01\n#define PBS_VERTICAL        0x04\n#define PBS_MARQUEE         0x08\n#define PBS_SMOOTHREVERSE   0x10\n\n/* Common Control Styles */\n#define CCS_TOP             __MSABI_LONG(0x00000001)\n#define CCS_NOMOVEY         __MSABI_LONG(0x00000002)\n#define CCS_BOTTOM          __MSABI_LONG(0x00000003)\n#define CCS_NORESIZE        __MSABI_LONG(0x00000004)\n#define CCS_NOPARENTALIGN   __MSABI_LONG(0x00000008)\n#define CCS_ADJUSTABLE      __MSABI_LONG(0x00000020)\n#define CCS_NODIVIDER       __MSABI_LONG(0x00000040)\n#define CCS_VERT            __MSABI_LONG(0x00000080)\n#define CCS_LEFT            (CCS_VERT | CCS_TOP)\n#define CCS_RIGHT           (CCS_VERT | CCS_BOTTOM)\n#define CCS_NOMOVEX         (CCS_VERT | CCS_NOMOVEY)\n\n/* Listview Control */\n#define LVS_ICON            0x0000\n#define LVS_REPORT          0x0001\n#define LVS_SMALLICON       0x0002\n#define LVS_LIST            0x0003\n#define LVS_TYPEMASK        0x0003\n#define LVS_SINGLESEL       0x0004\n#define LVS_SHOWSELALWAYS   0x0008\n#define LVS_SORTASCENDING   0x0010\n#define LVS_SORTDESCENDING  0x0020\n#define LVS_SHAREIMAGELISTS 0x0040\n#define LVS_NOLABELWRAP     0x0080\n#define LVS_AUTOARRANGE     0x0100\n#define LVS_EDITLABELS      0x0200\n#define LVS_OWNERDATA       0x1000\n#define LVS_NOSCROLL        0x2000\n#define LVS_TYPESTYLEMASK   0xfc00\n#define LVS_ALIGNTOP        0x0000\n#define LVS_ALIGNLEFT       0x0800\n#define LVS_ALIGNMASK       0x0c00\n#define LVS_OWNERDRAWFIXED  0x0400\n#define LVS_NOCOLUMNHEADER  0x4000\n#define LVS_NOSORTHEADER    0x8000\n\n/* Treeview Control */\n#define TVS_HASBUTTONS      0x0001\n#define TVS_HASLINES        0x0002\n#define TVS_LINESATROOT     0x0004\n#define TVS_EDITLABELS      0x0008\n#define TVS_DISABLEDRAGDROP 0x0010\n#define TVS_SHOWSELALWAYS   0x0020\n#define TVS_RTLREADING      0x0040\n#define TVS_NOTOOLTIPS      0x0080\n#define TVS_CHECKBOXES      0x0100\n#define TVS_TRACKSELECT     0x0200\n#define TVS_SINGLEEXPAND    0x0400\n#define TVS_INFOTIP         0x0800\n#define TVS_FULLROWSELECT   0x1000\n#define TVS_NOSCROLL        0x2000\n#define TVS_NONEVENHEIGHT   0x4000\n#define TVS_NOHSCROLL       0x8000\n\n/* Tab Control */\n#define TCS_SCROLLOPPOSITE  0x0001   /* assumes multiline tab */\n#define TCS_BOTTOM          0x0002\n#define TCS_RIGHT           0x0002\n#define TCS_MULTISELECT     0x0004  /* allow multi-select in button mode */\n#define TCS_FLATBUTTONS     0x0008\n#define TCS_FORCEICONLEFT   0x0010\n#define TCS_FORCELABELLEFT  0x0020\n#define TCS_HOTTRACK        0x0040\n#define TCS_VERTICAL        0x0080\n#define TCS_TABS            0x0000\n#define TCS_BUTTONS         0x0100\n#define TCS_SINGLELINE      0x0000\n#define TCS_MULTILINE       0x0200\n#define TCS_RIGHTJUSTIFY    0x0000\n#define TCS_FIXEDWIDTH      0x0400\n#define TCS_RAGGEDRIGHT     0x0800\n#define TCS_FOCUSONBUTTONDOWN 0x1000\n#define TCS_OWNERDRAWFIXED  0x2000\n#define TCS_TOOLTIPS        0x4000\n#define TCS_FOCUSNEVER      0x8000\n\n/* Animate Control */\n#define ACS_CENTER          0x0001\n#define ACS_TRANSPARENT     0x0002\n#define ACS_AUTOPLAY        0x0004\n#define ACS_TIMER           0x0008  /* no threads, just timers */\n\n/* Month Calendar Control */\n#define MCS_DAYSTATE        0x0001\n#define MCS_MULTISELECT     0x0002\n#define MCS_WEEKNUMBERS     0x0004\n#define MCS_NOTODAY         0x0010\n#define MCS_NOTODAYCIRCLE   0x0008\n#define MCS_NOTRAILINGDATES 0x0040\n#define MCS_SHORTDAYSOFWEEK 0x0080\n#define MCS_NOSELCHANGEONNAV 0x0100\n\n/* Datetime Control */\n#define DTS_SHORTDATEFORMAT 0x0000\n#define DTS_UPDOWN          0x0001\n#define DTS_SHOWNONE        0x0002\n#define DTS_LONGDATEFORMAT  0x0004\n#define DTS_TIMEFORMAT      0x0009\n#define DTS_SHORTDATECENTURYFORMAT 0x000c\n#define DTS_APPCANPARSE     0x0010\n#define DTS_RIGHTALIGN      0x0020\n\n/* Pager Control */\n#define PGS_VERT            0x00000000\n#define PGS_HORZ            0x00000001\n#define PGS_AUTOSCROLL      0x00000002\n#define PGS_DRAGNDROP       0x00000004\n\n/* Native Font Control */\n#define NFS_EDIT            0x0001\n#define NFS_STATIC          0x0002\n#define NFS_LISTCOMBO       0x0004\n#define NFS_BUTTON          0x0008\n#define NFS_ALL             0x0010\n#define NFS_USEFONTASSOC    0x0020\n"
  },
  {
    "path": "wine/windows/commdlg.h",
    "content": "/*\n * COMMDLG - Common Wine Dialog ... :-)\n *\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_COMMDLG_H\n#define __WINE_COMMDLG_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include <prsht.h>\n#ifndef _WIN64\n#include <pshpack1.h>\n#endif\n\n#ifndef SNDMSG\n#ifdef __cplusplus\n#define SNDMSG ::SendMessage\n#else   /* __cplusplus */\n#define SNDMSG SendMessage\n#endif  /* __cplusplus */\n#endif  /* SNDMSG */\n\n#define OFN_READONLY                 0x00000001\n#define OFN_OVERWRITEPROMPT          0x00000002\n#define OFN_HIDEREADONLY             0x00000004\n#define OFN_NOCHANGEDIR              0x00000008\n#define OFN_SHOWHELP                 0x00000010\n#define OFN_ENABLEHOOK               0x00000020\n#define OFN_ENABLETEMPLATE           0x00000040\n#define OFN_ENABLETEMPLATEHANDLE     0x00000080\n#define OFN_NOVALIDATE               0x00000100\n#define OFN_ALLOWMULTISELECT         0x00000200\n#define OFN_EXTENSIONDIFFERENT       0x00000400\n#define OFN_PATHMUSTEXIST            0x00000800\n#define OFN_FILEMUSTEXIST            0x00001000\n#define OFN_CREATEPROMPT             0x00002000\n#define OFN_SHAREAWARE               0x00004000\n#define OFN_NOREADONLYRETURN         0x00008000\n#define OFN_NOTESTFILECREATE         0x00010000\n#define OFN_NONETWORKBUTTON          0x00020000\n#define OFN_NOLONGNAMES              0x00040000\n#define OFN_EXPLORER                 0x00080000\n#define OFN_NODEREFERENCELINKS       0x00100000\n#define OFN_LONGNAMES                0x00200000\n#define OFN_ENABLEINCLUDENOTIFY      0x00400000\n#define OFN_ENABLESIZING             0x00800000\n#define OFN_DONTADDTORECENT          0x02000000\n#define OFN_FORCESHOWHIDDEN          0x10000000\n\n#define OFN_EX_NOPLACESBAR           0x00000001\n\n#define OFN_SHAREFALLTHROUGH     2\n#define OFN_SHARENOWARN          1\n#define OFN_SHAREWARN            0\n\n#define SAVE_DIALOG  1\n#define OPEN_DIALOG  2\n\ntypedef UINT_PTR (CALLBACK *LPOFNHOOKPROC)(HWND,UINT,WPARAM,LPARAM);\n\ntypedef struct tagOFNA {\n\tDWORD\t\tlStructSize;\n\tHWND\t\thwndOwner;\n\tHINSTANCE\thInstance;\n\tLPCSTR\t\tlpstrFilter;\n\tLPSTR\t\tlpstrCustomFilter;\n\tDWORD\t\tnMaxCustFilter;\n\tDWORD\t\tnFilterIndex;\n\tLPSTR\t\tlpstrFile;\n\tDWORD\t\tnMaxFile;\n\tLPSTR\t\tlpstrFileTitle;\n\tDWORD\t\tnMaxFileTitle;\n\tLPCSTR\t\tlpstrInitialDir;\n\tLPCSTR\t\tlpstrTitle;\n\tDWORD\t\tFlags;\n\tWORD\t\tnFileOffset;\n\tWORD\t\tnFileExtension;\n\tLPCSTR\t\tlpstrDefExt;\n\tLPARAM\t\tlCustData;\n\tLPOFNHOOKPROC\tlpfnHook;\n\tLPCSTR\t\tlpTemplateName;\n        void           *pvReserved;\n        DWORD           dwReserved;\n        DWORD           FlagsEx;\n} OPENFILENAMEA,*LPOPENFILENAMEA;\n\ntypedef struct tagOFNW {\n\tDWORD\t\tlStructSize;\n\tHWND\t\thwndOwner;\n\tHINSTANCE\thInstance;\n\tLPCWSTR\t\tlpstrFilter;\n\tLPWSTR\t\tlpstrCustomFilter;\n\tDWORD\t\tnMaxCustFilter;\n\tDWORD\t\tnFilterIndex;\n\tLPWSTR\t\tlpstrFile;\n\tDWORD\t\tnMaxFile;\n\tLPWSTR\t\tlpstrFileTitle;\n\tDWORD\t\tnMaxFileTitle;\n\tLPCWSTR\t\tlpstrInitialDir;\n\tLPCWSTR\t\tlpstrTitle;\n\tDWORD\t\tFlags;\n\tWORD\t\tnFileOffset;\n\tWORD\t\tnFileExtension;\n\tLPCWSTR\t\tlpstrDefExt;\n\tLPARAM\t\tlCustData;\n\tLPOFNHOOKPROC\tlpfnHook;\n\tLPCWSTR\t\tlpTemplateName;\n        void           *pvReserved;\n        DWORD           dwReserved;\n        DWORD           FlagsEx;\n} OPENFILENAMEW,*LPOPENFILENAMEW;\n\nDECL_WINELIB_TYPE_AW(OPENFILENAME)\nDECL_WINELIB_TYPE_AW(LPOPENFILENAME)\n\n#ifndef CDSIZEOF_STRUCT\n#define CDSIZEOF_STRUCT(type,field) ((INT_PTR)&(((type *)0)->field) + sizeof(((type*)0)->field))\n#endif\n\n#define OPENFILENAME_SIZE_VERSION_400A CDSIZEOF_STRUCT(OPENFILENAMEA,lpTemplateName)\n#define OPENFILENAME_SIZE_VERSION_400W CDSIZEOF_STRUCT(OPENFILENAMEW,lpTemplateName)\n#define OPENFILENAME_SIZE_VERSION_400 WINELIB_NAME_AW(OPENFILENAME_SIZE_VERSION_400)\n\n\ntypedef struct\n{\n\tNMHDR           hdr;\n\tLPOPENFILENAMEA lpOFN;\n\tLPSTR           pszFile;\n} OFNOTIFYA, *LPOFNOTIFYA;\n\ntypedef struct\n{\n\tNMHDR           hdr;\n\tLPOPENFILENAMEW lpOFN;\n\tLPWSTR          pszFile;\n} OFNOTIFYW, *LPOFNOTIFYW;\n\nDECL_WINELIB_TYPE_AW(OFNOTIFY)\nDECL_WINELIB_TYPE_AW(LPOFNOTIFY)\n\ntypedef struct _OFNOTIFYEXA\n{\n        NMHDR           hdr;\n        LPOPENFILENAMEA lpOFN;\n        LPVOID          psf;\n        LPVOID          pidl;\n} OFNOTIFYEXA, *LPOFNOTIFYEXA;\n\ntypedef struct _OFNOTIFYEXW\n{\n        NMHDR           hdr;\n        LPOPENFILENAMEW lpOFN;\n        LPVOID          psf;\n        LPVOID          pidl;\n} OFNOTIFYEXW, *LPOFNOTIFYEXW;\n\nDECL_WINELIB_TYPE_AW(OFNOTIFYEX)\nDECL_WINELIB_TYPE_AW(LPOFNOTIFYEX)\n\ntypedef UINT_PTR (CALLBACK *LPCCHOOKPROC) (HWND, UINT, WPARAM, LPARAM);\n\ntypedef struct {\n\tDWORD\t\tlStructSize;\n\tHWND\t\thwndOwner;\n\tHWND\t\thInstance; /* Should be an HINSTANCE but MS made a typo */\n\tCOLORREF        rgbResult;\n\tCOLORREF       *lpCustColors;\n\tDWORD \t\tFlags;\n\tLPARAM\t\tlCustData;\n        LPCCHOOKPROC    lpfnHook;\n\tLPCSTR \t\tlpTemplateName;\n} CHOOSECOLORA;\ntypedef CHOOSECOLORA *LPCHOOSECOLORA;\n\ntypedef struct {\n\tDWORD\t\tlStructSize;\n\tHWND\t\thwndOwner;\n\tHWND\t\thInstance; /* Should be an HINSTANCE but MS made a typo */\n\tCOLORREF        rgbResult;\n\tCOLORREF       *lpCustColors;\n\tDWORD \t\tFlags;\n\tLPARAM\t\tlCustData;\n        LPCCHOOKPROC    lpfnHook;\n\tLPCWSTR \tlpTemplateName;\n} CHOOSECOLORW;\ntypedef CHOOSECOLORW *LPCHOOSECOLORW;\n\nDECL_WINELIB_TYPE_AW(CHOOSECOLOR)\nDECL_WINELIB_TYPE_AW(LPCHOOSECOLOR)\n\n\n#define CC_RGBINIT               0x00000001\n#define CC_FULLOPEN              0x00000002\n#define CC_PREVENTFULLOPEN       0x00000004\n#define CC_SHOWHELP              0x00000008\n#define CC_ENABLEHOOK            0x00000010\n#define CC_ENABLETEMPLATE        0x00000020\n#define CC_ENABLETEMPLATEHANDLE  0x00000040\n#define CC_SOLIDCOLOR            0x00000080\n#define CC_ANYCOLOR              0x00000100\n\ntypedef UINT_PTR (CALLBACK *LPFRHOOKPROC)(HWND,UINT,WPARAM,LPARAM);\n\ntypedef struct {\n\tDWORD\t\tlStructSize;\n\tHWND\t\thwndOwner;\n\tHINSTANCE\thInstance;\n\tDWORD\t\tFlags;\n\tLPSTR\t\tlpstrFindWhat;\n\tLPSTR\t\tlpstrReplaceWith;\n\tWORD\t\twFindWhatLen;\n\tWORD \t\twReplaceWithLen;\n\tLPARAM \t\tlCustData;\n        LPFRHOOKPROC    lpfnHook;\n\tLPCSTR \t\tlpTemplateName;\n} FINDREPLACEA, *LPFINDREPLACEA;\n\ntypedef struct {\n\tDWORD\t\tlStructSize;\n\tHWND\t\thwndOwner;\n\tHINSTANCE\thInstance;\n\tDWORD\t\tFlags;\n\tLPWSTR\t\tlpstrFindWhat;\n\tLPWSTR\t\tlpstrReplaceWith;\n\tWORD\t\twFindWhatLen;\n\tWORD \t\twReplaceWithLen;\n\tLPARAM \t\tlCustData;\n        LPFRHOOKPROC    lpfnHook;\n\tLPCWSTR\t\tlpTemplateName;\n} FINDREPLACEW, *LPFINDREPLACEW;\n\nDECL_WINELIB_TYPE_AW(FINDREPLACE)\nDECL_WINELIB_TYPE_AW(LPFINDREPLACE)\n\n#define FR_DOWN                         0x00000001\n#define FR_WHOLEWORD                    0x00000002\n#define FR_MATCHCASE                    0x00000004\n#define FR_FINDNEXT                     0x00000008\n#define FR_REPLACE                      0x00000010\n#define FR_REPLACEALL                   0x00000020\n#define FR_DIALOGTERM                   0x00000040\n#define FR_SHOWHELP                     0x00000080\n#define FR_ENABLEHOOK                   0x00000100\n#define FR_ENABLETEMPLATE               0x00000200\n#define FR_NOUPDOWN                     0x00000400\n#define FR_NOMATCHCASE                  0x00000800\n#define FR_NOWHOLEWORD                  0x00001000\n#define FR_ENABLETEMPLATEHANDLE         0x00002000\n#define FR_HIDEUPDOWN                   0x00004000\n#define FR_HIDEMATCHCASE                0x00008000\n#define FR_HIDEWHOLEWORD                0x00010000\n#define FR_MATCHDIAC                    0x20000000\n#define FR_MATCHKASHIDA                 0x40000000\n#define FR_MATCHALEFHAMZA               0x80000000\n\ntypedef UINT_PTR (CALLBACK *LPCFHOOKPROC)(HWND,UINT,WPARAM,LPARAM);\n\ntypedef struct tagCHOOSEFONTA\n{\n\tUINT  \tlStructSize;\n\tHWND \t\thwndOwner;\n\tHDC  \t\thDC;\n\tLPLOGFONTA    lpLogFont;\n\tINT\t\tiPointSize;\n\tDWORD\t\tFlags;\n\tCOLORREF\trgbColors;\n\tLPARAM\t\tlCustData;\n\tLPCFHOOKPROC \tlpfnHook;\n\tLPCSTR\t\tlpTemplateName;\n\tHINSTANCE\thInstance;\n\tLPSTR\t\tlpszStyle;\n\tWORD\t\tnFontType;\n\tWORD\t___MISSING_ALIGNMENT__;\n\tINT   \tnSizeMin;\n\tINT\t\tnSizeMax;\n} CHOOSEFONTA, *LPCHOOSEFONTA;\n\ntypedef struct tagCHOOSEFONTW\n{\n\tUINT  \tlStructSize;\n\tHWND \t\thwndOwner;\n\tHDC  \t\thDC;\n\tLPLOGFONTW    lpLogFont;\n\tINT\t\tiPointSize;\n\tDWORD\t\tFlags;\n\tCOLORREF\trgbColors;\n\tLPARAM\t\tlCustData;\n\tLPCFHOOKPROC \tlpfnHook;\n\tLPCWSTR\t\tlpTemplateName;\n\tHINSTANCE\thInstance;\n\tLPWSTR\t\tlpszStyle;\n\tWORD\t\tnFontType;\n\tWORD\t___MISSING_ALIGNMENT__;\n\tINT   \tnSizeMin;\n\tINT\t\tnSizeMax;\n} CHOOSEFONTW, *LPCHOOSEFONTW;\n\nDECL_WINELIB_TYPE_AW(CHOOSEFONT)\nDECL_WINELIB_TYPE_AW(LPCHOOSEFONT)\n\n#define CF_SCREENFONTS               0x00000001\n#define CF_PRINTERFONTS              0x00000002\n#define CF_BOTH                      (CF_SCREENFONTS | CF_PRINTERFONTS)\n#define CF_SHOWHELP                  __MSABI_LONG(0x00000004)\n#define CF_ENABLEHOOK                __MSABI_LONG(0x00000008)\n#define CF_ENABLETEMPLATE            __MSABI_LONG(0x00000010)\n#define CF_ENABLETEMPLATEHANDLE      __MSABI_LONG(0x00000020)\n#define CF_INITTOLOGFONTSTRUCT       __MSABI_LONG(0x00000040)\n#define CF_USESTYLE                  __MSABI_LONG(0x00000080)\n#define CF_EFFECTS                   __MSABI_LONG(0x00000100)\n#define CF_APPLY                     __MSABI_LONG(0x00000200)\n#define CF_ANSIONLY                  __MSABI_LONG(0x00000400)\n#define CF_SCRIPTSONLY               CF_ANSIONLY\n#define CF_NOVECTORFONTS             __MSABI_LONG(0x00000800)\n#define CF_NOOEMFONTS                CF_NOVECTORFONTS\n#define CF_NOSIMULATIONS             __MSABI_LONG(0x00001000)\n#define CF_LIMITSIZE                 __MSABI_LONG(0x00002000)\n#define CF_FIXEDPITCHONLY            __MSABI_LONG(0x00004000)\n#define CF_WYSIWYG                   __MSABI_LONG(0x00008000) /* use with CF_SCREENFONTS & CF_PRINTERFONTS */\n#define CF_FORCEFONTEXIST            __MSABI_LONG(0x00010000)\n#define CF_SCALABLEONLY              __MSABI_LONG(0x00020000)\n#define CF_TTONLY                    __MSABI_LONG(0x00040000)\n#define CF_NOFACESEL                 __MSABI_LONG(0x00080000)\n#define CF_NOSTYLESEL                __MSABI_LONG(0x00100000)\n#define CF_NOSIZESEL                 __MSABI_LONG(0x00200000)\n#define CF_SELECTSCRIPT              __MSABI_LONG(0x00400000)\n#define CF_NOSCRIPTSEL               __MSABI_LONG(0x00800000)\n#define CF_NOVERTFONTS               __MSABI_LONG(0x01000000)\n\n#define SIMULATED_FONTTYPE      0x8000\n#define PRINTER_FONTTYPE        0x4000\n#define SCREEN_FONTTYPE         0x2000\n#define BOLD_FONTTYPE           0x0100\n#define ITALIC_FONTTYPE         0x0200\n#define REGULAR_FONTTYPE        0x0400\n\n#define WM_CHOOSEFONT_GETLOGFONT        (WM_USER + 1)\n#define WM_CHOOSEFONT_SETLOGFONT\t(WM_USER + 101)\n#define WM_CHOOSEFONT_SETFLAGS\t\t(WM_USER + 102)\n\n#define LBSELCHSTRINGA  \"commdlg_LBSelChangedNotify\"\n#if defined(__GNUC__)\n# define LBSELCHSTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \\\n  'L','B','S','e','l','C','h','a','n','g','e','d','N','o','t','i','f','y',0 }\n#elif defined(_MSC_VER)\n# define LBSELCHSTRINGW L\"commdlg_LBSelChangedNotify\"\n#else\nstatic const WCHAR LBSELCHSTRINGW[] = { 'c','o','m','m','d','l','g','_',\n  'L','B','S','e','l','C','h','a','n','g','e','d','N','o','t','i','f','y',0 };\n#endif\n#define LBSELCHSTRING   WINELIB_NAME_AW(LBSELCHSTRING)\n\n#define SHAREVISTRINGA  \"commdlg_ShareViolation\"\n#if defined(__GNUC__)\n# define SHAREVISTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \\\n  'S','h','a','r','e','V','i','o','l','a','t','i','o','n',0 }\n#elif defined(_MSC_VER)\n# define SHAREVISTRINGW L\"commdlg_ShareViolation\"\n#else\nstatic const WCHAR SHAREVISTRINGW[] = { 'c','o','m','m','d','l','g','_',\n  'S','h','a','r','e','V','i','o','l','a','t','i','o','n',0 };\n#endif\n#define SHAREVISTRING   WINELIB_NAME_AW(SHAREVISTRING)\n\n#define FILEOKSTRINGA   \"commdlg_FileNameOK\"\n#if defined(__GNUC__)\n# define FILEOKSTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \\\n  'F','i','l','e','N','a','m','e','O','K',0 }\n#elif defined(_MSC_VER)\n# define FILEOKSTRINGW  L\"commdlg_FileNameOK\"\n#else\nstatic const WCHAR FILEOKSTRINGW[] = { 'c','o','m','m','d','l','g','_',\n  'F','i','l','e','N','a','m','e','O','K',0 };\n#endif\n#define FILEOKSTRING    WINELIB_NAME_AW(FILEOKSTRING)\n\n#define COLOROKSTRINGA  \"commdlg_ColorOK\"\n#if defined(__GNUC__)\n# define COLOROKSTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \\\n  'C','o','l','o','r','O','K',0 }\n#elif defined(_MSC_VER)\n# define COLOROKSTRINGW L\"commdlg_ColorOK\"\n#else\nstatic const WCHAR COLOROKSTRINGW[] = { 'c','o','m','m','d','l','g','_',\n  'C','o','l','o','r','O','K',0 };\n#endif\n#define COLOROKSTRING   WINELIB_NAME_AW(COLOROKSTRING)\n\n#define SETRGBSTRINGA   \"commdlg_SetRGBColor\"\n#if defined(__GNUC__)\n# define SETRGBSTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \\\n  'S','e','t','R','G','B','C','o','l','o','r',0 }\n#elif defined(_MSC_VER)\n# define SETRGBSTRINGW  L\"commdlg_SetRGBColor\"\n#else\nstatic const WCHAR SETRGBSTRINGW[] = { 'c','o','m','m','d','l','g','_',\n  'S','e','t','R','G','B','C','o','l','o','r',0 };\n#endif\n#define SETRGBSTRING    WINELIB_NAME_AW(SETRGBSTRING)\n\n#define FINDMSGSTRINGA  \"commdlg_FindReplace\"\n#if defined(__GNUC__)\n# define FINDMSGSTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \\\n  'F','i','n','d','R','e','p','l','a','c','e',0 }\n#elif defined(_MSC_VER)\n# define FINDMSGSTRINGW L\"commdlg_FindReplace\"\n#else\nstatic const WCHAR FINDMSGSTRINGW[] = { 'c','o','m','m','d','l','g','_',\n  'F','i','n','d','R','e','p','l','a','c','e',0 };\n#endif\n#define FINDMSGSTRING   WINELIB_NAME_AW(FINDMSGSTRING)\n\n#define HELPMSGSTRINGA  \"commdlg_help\"\n#if defined(__GNUC__)\n# define HELPMSGSTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \\\n  'H','e','l','p',0 }\n#elif defined(_MSC_VER)\n# define HELPMSGSTRINGW L\"commdlg_help\"\n#else\nstatic const WCHAR HELPMSGSTRINGW[] = { 'c','o','m','m','d','l','g','_',\n  'H','e','l','p',0 };\n#endif\n#define HELPMSGSTRING   WINELIB_NAME_AW(HELPMSGSTRING)\n\n#define CD_LBSELNOITEMS -1\n#define CD_LBSELCHANGE   0\n#define CD_LBSELSUB      1\n#define CD_LBSELADD      2\n\n#define CDN_FIRST   (0U-601U)\n#define CDN_LAST    (0U-699U)\n\n#define CDN_INITDONE            (CDN_FIRST - 0x0000)\n#define CDN_SELCHANGE           (CDN_FIRST - 0x0001)\n#define CDN_FOLDERCHANGE        (CDN_FIRST - 0x0002)\n#define CDN_SHAREVIOLATION      (CDN_FIRST - 0x0003)\n#define CDN_HELP                (CDN_FIRST - 0x0004)\n#define CDN_FILEOK              (CDN_FIRST - 0x0005)\n#define CDN_TYPECHANGE          (CDN_FIRST - 0x0006)\n#define CDN_INCLUDEITEM         (CDN_FIRST - 0x0007)\n\n#define CDM_FIRST               (WM_USER + 100)\n#define CDM_LAST                (WM_USER + 200)\n\n#define CDM_GETSPEC             (CDM_FIRST + 0x0000)\n#define CDM_GETFILEPATH         (CDM_FIRST + 0x0001)\n#define CDM_GETFOLDERPATH       (CDM_FIRST + 0x0002)\n#define CDM_GETFOLDERIDLIST     (CDM_FIRST + 0x0003)\n#define CDM_SETCONTROLTEXT      (CDM_FIRST + 0x0004)\n#define CDM_HIDECONTROL         (CDM_FIRST + 0x0005)\n#define CDM_SETDEFEXT           (CDM_FIRST + 0x0006)\n\n\n/* Messages to query information from the open or save dialogs */\n\n#define CommDlg_OpenSave_GetSpecA(_hdlg, _psz, _cbmax) \\\n        (int)SNDMSG(_hdlg, CDM_GETSPEC, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz)\n#define CommDlg_OpenSave_GetSpecW(_hdlg, _psz, _cbmax) \\\n        (int)SNDMSG(_hdlg, CDM_GETSPEC, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz)\n#define CommDlg_OpenSave_GetSpec  WINELIB_NAME_AW(CommDlg_OpenSave_GetSpec)\n\n#define CommDlg_OpenSave_GetFilePathA(_hdlg, _psz, _cbmax) \\\n        (int)SNDMSG(_hdlg, CDM_GETFILEPATH, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz)\n#define CommDlg_OpenSave_GetFilePathW(_hdlg, _psz, _cbmax) \\\n        (int)SNDMSG(_hdlg, CDM_GETFILEPATH, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz)\n#define CommDlg_OpenSave_GetFilePath  WINELIB_NAME_AW(CommDlg_OpenSave_GetFilePath)\n\n#define CommDlg_OpenSave_GetFolderPathA(_hdlg, _psz, _cbmax) \\\n        (int)SNDMSG(_hdlg, CDM_GETFOLDERPATH, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz)\n#define CommDlg_OpenSave_GetFolderPathW(_hdlg, _psz, _cbmax) \\\n        (int)SNDMSG(_hdlg, CDM_GETFOLDERPATH, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz)\n#define CommDlg_OpenSave_GetFolderPath  WINELIB_NAME_AW(CommDlg_OpenSave_GetFolderPath)\n\n#define CommDlg_OpenSave_GetFolderIDList(_hdlg, _pidl, _cbmax) \\\n        (int)SNDMSG(_hdlg, CDM_GETFOLDERIDLIST, (WPARAM)_cbmax, (LPARAM)(LPVOID)_pidl)\n\n#define CommDlg_OpenSave_SetControlText(_hdlg, _id, _text) \\\n        (void)SNDMSG(_hdlg, CDM_SETCONTROLTEXT, (WPARAM)_id, (LPARAM)(LPSTR)_text)\n\n#define CommDlg_OpenSave_HideControl(_hdlg, _id) \\\n        (void)SNDMSG(_hdlg, CDM_HIDECONTROL, (WPARAM)_id, 0)\n\n#define CommDlg_OpenSave_SetDefExt(_hdlg, _pszext) \\\n        (void)SNDMSG(_hdlg, CDM_SETDEFEXT, 0, (LPARAM)(LPSTR)_pszext)\n\n#define CommDlg_OpenSave_GetSpecA(_hdlg, _psz, _cbmax) \\\n        (int)SNDMSG(_hdlg, CDM_GETSPEC, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz)\n#define CommDlg_OpenSave_GetSpecW(_hdlg, _psz, _cbmax) \\\n        (int)SNDMSG(_hdlg, CDM_GETSPEC, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz)\n#define CommDlg_OpenSave_GetSpec WINELIB_NAME_AW(CommDlg_OpenSave_GetSpec)\n\n#define CommDlg_OpenSave_GetFilePathA(_hdlg, _psz, _cbmax) \\\n        (int)SNDMSG(_hdlg, CDM_GETFILEPATH, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz)\n#define CommDlg_OpenSave_GetFilePathW(_hdlg, _psz, _cbmax) \\\n        (int)SNDMSG(_hdlg, CDM_GETFILEPATH, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz)\n#define CommDlg_OpenSave_GetFilePath WINELIB_NAME_AW(CommDlg_OpenSave_GetFilePath)\n\n#define CommDlg_OpenSave_GetFolderPathA(_hdlg, _psz, _cbmax) \\\n        (int)SNDMSG(_hdlg, CDM_GETFOLDERPATH, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz)\n#define CommDlg_OpenSave_GetFolderPathW(_hdlg, _psz, _cbmax) \\\n        (int)SNDMSG(_hdlg, CDM_GETFOLDERPATH, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz)\n#define CommDlg_OpenSave_GetFolderPath WINELIB_NAME_AW(CommDlg_OpenSave_GetFolderPath)\n\n#define CommDlg_OpenSave_GetFolderIDList(_hdlg, _pidl, _cbmax) \\\n        (int)SNDMSG(_hdlg, CDM_GETFOLDERIDLIST, (WPARAM)_cbmax, (LPARAM)(LPVOID)_pidl)\n\n#define CommDlg_OpenSave_SetControlText(_hdlg, _id, _text) \\\n        (void)SNDMSG(_hdlg, CDM_SETCONTROLTEXT, (WPARAM)_id, (LPARAM)(LPSTR)_text)\n\n#define CommDlg_OpenSave_HideControl(_hdlg, _id) \\\n        (void)SNDMSG(_hdlg, CDM_HIDECONTROL, (WPARAM)_id, 0)\n\n#define CommDlg_OpenSave_SetDefExt(_hdlg, _pszext) \\\n        (void)SNDMSG(_hdlg, CDM_SETDEFEXT, 0, (LPARAM)(LPSTR)_pszext)\n\n\ntypedef UINT_PTR (CALLBACK *LPPRINTHOOKPROC) (HWND, UINT, WPARAM, LPARAM);\ntypedef UINT_PTR (CALLBACK *LPSETUPHOOKPROC) (HWND, UINT, WPARAM, LPARAM);\n\ntypedef struct tagPDA\n{\n    DWORD            lStructSize;\n    HWND           hwndOwner;\n    HGLOBAL        hDevMode;\n    HGLOBAL        hDevNames;\n    HDC            hDC;\n    DWORD            Flags;\n    WORD             nFromPage;\n    WORD             nToPage;\n    WORD             nMinPage;\n    WORD             nMaxPage;\n    WORD             nCopies;\n    HINSTANCE      hInstance;\n    LPARAM           lCustData;\n    LPPRINTHOOKPROC  lpfnPrintHook;\n    LPSETUPHOOKPROC  lpfnSetupHook;\n    LPCSTR           lpPrintTemplateName;\n    LPCSTR           lpSetupTemplateName;\n    HGLOBAL        hPrintTemplate;\n    HGLOBAL        hSetupTemplate;\n} PRINTDLGA, *LPPRINTDLGA;\n\ntypedef struct tagPDW\n{\n    DWORD            lStructSize;\n    HWND           hwndOwner;\n    HGLOBAL        hDevMode;\n    HGLOBAL        hDevNames;\n    HDC            hDC;\n    DWORD            Flags;\n    WORD             nFromPage;\n    WORD             nToPage;\n    WORD             nMinPage;\n    WORD             nMaxPage;\n    WORD             nCopies;\n    HINSTANCE      hInstance;\n    LPARAM           lCustData;\n    LPPRINTHOOKPROC  lpfnPrintHook;\n    LPSETUPHOOKPROC  lpfnSetupHook;\n    LPCWSTR          lpPrintTemplateName;\n    LPCWSTR          lpSetupTemplateName;\n    HGLOBAL        hPrintTemplate;\n    HGLOBAL        hSetupTemplate;\n} PRINTDLGW, *LPPRINTDLGW;\n\nDECL_WINELIB_TYPE_AW(PRINTDLG)\nDECL_WINELIB_TYPE_AW(LPPRINTDLG)\n\n#define PD_ALLPAGES                   0x00000000\n#define PD_SELECTION                  0x00000001\n#define PD_PAGENUMS                   0x00000002\n#define PD_NOSELECTION                0x00000004\n#define PD_NOPAGENUMS                 0x00000008\n#define PD_COLLATE                    0x00000010\n#define PD_PRINTTOFILE                0x00000020\n#define PD_PRINTSETUP                 0x00000040\n#define PD_NOWARNING                  0x00000080\n#define PD_RETURNDC                   0x00000100\n#define PD_RETURNIC                   0x00000200\n#define PD_RETURNDEFAULT              0x00000400\n#define PD_SHOWHELP                   0x00000800\n#define PD_ENABLEPRINTHOOK            0x00001000\n#define PD_ENABLESETUPHOOK            0x00002000\n#define PD_ENABLEPRINTTEMPLATE        0x00004000\n#define PD_ENABLESETUPTEMPLATE        0x00008000\n#define PD_ENABLEPRINTTEMPLATEHANDLE  0x00010000\n#define PD_ENABLESETUPTEMPLATEHANDLE  0x00020000\n#define PD_USEDEVMODECOPIES           0x00040000\n#define PD_USEDEVMODECOPIESANDCOLLATE 0x00040000\n#define PD_DISABLEPRINTTOFILE         0x00080000\n#define PD_HIDEPRINTTOFILE            0x00100000\n#define PD_NONETWORKBUTTON            0x00200000\n#define PD_CURRENTPAGE                0x00400000\n#define PD_NOCURRENTPAGE              0x00800000\n#define PD_EXCLUSIONFLAGS             0x01000000\n#define PD_USELARGETEMPLATE           0x10000000\n\n\n#define PD_EXCL_COPIESANDCOLLATE      (DM_COPIES | DM_COLLATE)\n\n#define START_PAGE_GENERAL 0xffffffff\n\n#define PD_RESULT_CANCEL 0\n#define PD_RESULT_PRINT  1\n#define PD_RESULT_APPLY  2\n\ntypedef struct\n{\n    WORD  wDriverOffset;\n    WORD  wDeviceOffset;\n    WORD  wOutputOffset;\n    WORD  wDefault;\n} DEVNAMES;\ntypedef DEVNAMES * LPDEVNAMES;\n\n#define DN_DEFAULTPRN      0x0001\n\n/* PageSetupDlg stuff ... */\n#define WM_PSD_PAGESETUPDLG\t(WM_USER  )\n#define WM_PSD_FULLPAGERECT\t(WM_USER+1)\n#define WM_PSD_MINMARGINRECT\t(WM_USER+2)\n#define WM_PSD_MARGINRECT\t(WM_USER+3)\n#define WM_PSD_GREEKTEXTRECT\t(WM_USER+4)\n#define WM_PSD_ENVSTAMPRECT\t(WM_USER+5)\n#define WM_PSD_YAFULLPAGERECT\t(WM_USER+6)\n\ntypedef UINT (CALLBACK *LPPAGEPAINTHOOK)( HWND, UINT, WPARAM, LPARAM );\ntypedef UINT (CALLBACK *LPPAGESETUPHOOK)( HWND, UINT, WPARAM, LPARAM );\n\ntypedef struct tagPSDA\n{\n\tDWORD\t\tlStructSize;\n\tHWND\t\thwndOwner;\n\tHGLOBAL\thDevMode;\n\tHGLOBAL\thDevNames;\n\tDWORD\t\tFlags;\n\tPOINT\t\tptPaperSize;\n\tRECT\t\trtMinMargin;\n\tRECT\t\trtMargin;\n\tHINSTANCE\thInstance;\n\tLPARAM\t\tlCustData;\n\tLPPAGESETUPHOOK\tlpfnPageSetupHook;\n\tLPPAGEPAINTHOOK\tlpfnPagePaintHook;\n\tLPCSTR\t\tlpPageSetupTemplateName;\n\tHGLOBAL\thPageSetupTemplate;\n} PAGESETUPDLGA,*LPPAGESETUPDLGA;\n\ntypedef struct tagPSDW\n{\n\tDWORD\t\tlStructSize;\n\tHWND\t\thwndOwner;\n\tHGLOBAL\thDevMode;\n\tHGLOBAL\thDevNames;\n\tDWORD\t\tFlags;\n\tPOINT\t\tptPaperSize;\n\tRECT\t\trtMinMargin;\n\tRECT\t\trtMargin;\n\tHINSTANCE\thInstance;\n\tLPARAM\t\tlCustData;\n\tLPPAGESETUPHOOK\tlpfnPageSetupHook;\n\tLPPAGEPAINTHOOK\tlpfnPagePaintHook;\n\tLPCWSTR\t\tlpPageSetupTemplateName;\n\tHGLOBAL\thPageSetupTemplate;\n} PAGESETUPDLGW,*LPPAGESETUPDLGW;\nDECL_WINELIB_TYPE_AW(PAGESETUPDLG)\nDECL_WINELIB_TYPE_AW(LPPAGESETUPDLG)\n\n#define PSD_DEFAULTMINMARGINS             0x00000000\n#define PSD_INWININIINTLMEASURE           0x00000000\n\n#define PSD_MINMARGINS                    0x00000001\n#define PSD_MARGINS                       0x00000002\n#define PSD_INTHOUSANDTHSOFINCHES         0x00000004\n#define PSD_INHUNDREDTHSOFMILLIMETERS     0x00000008\n#define PSD_DISABLEMARGINS                0x00000010\n#define PSD_DISABLEPRINTER                0x00000020\n#define PSD_NOWARNING                     0x00000080\n#define PSD_DISABLEORIENTATION            0x00000100\n#define PSD_RETURNDEFAULT                 0x00000400\n#define PSD_DISABLEPAPER                  0x00000200\n#define PSD_SHOWHELP                      0x00000800\n#define PSD_ENABLEPAGESETUPHOOK           0x00002000\n#define PSD_ENABLEPAGESETUPTEMPLATE       0x00008000\n#define PSD_ENABLEPAGESETUPTEMPLATEHANDLE 0x00020000\n#define PSD_ENABLEPAGEPAINTHOOK           0x00040000\n#define PSD_DISABLEPAGEPAINTING           0x00080000\n#define PSD_NONETWORKBUTTON               0x00200000\n\ntypedef struct tagPRINTPAGERANGE\n{\n    DWORD       nFromPage;\n    DWORD       nToPage;\n} PRINTPAGERANGE, *LPPRINTPAGERANGE;\n\ntypedef struct tagPDEXA\n{\n    DWORD               lStructSize;\n    HWND                hwndOwner;\n    HGLOBAL             hDevMode;\n    HGLOBAL             hDevNames;\n    HDC                 hDC;\n    DWORD               Flags;\n    DWORD               Flags2;\n    DWORD               ExclusionFlags;\n    DWORD               nPageRanges;\n    DWORD               nMaxPageRanges;\n    LPPRINTPAGERANGE    lpPageRanges;\n    DWORD               nMinPage;\n    DWORD               nMaxPage;\n    DWORD               nCopies;\n    HINSTANCE           hInstance;\n    LPCSTR              lpPrintTemplateName;\n    void* /*LPUNKNOWN*/ lpCallback;\n    DWORD               nPropertyPages;\n    HPROPSHEETPAGE*     lphPropertyPages;\n    DWORD               nStartPage;\n    DWORD               dwResultAction;\n} PRINTDLGEXA, *LPPRINTDLGEXA;\n\ntypedef struct tagPDEXW\n{\n    DWORD               lStructSize;\n    HWND                hwndOwner;\n    HGLOBAL             hDevMode;\n    HGLOBAL             hDevNames;\n    HDC                 hDC;\n    DWORD               Flags;\n    DWORD               Flags2;\n    DWORD               ExclusionFlags;\n    DWORD               nPageRanges;\n    DWORD               nMaxPageRanges;\n    LPPRINTPAGERANGE    lpPageRanges;\n    DWORD               nMinPage;\n    DWORD               nMaxPage;\n    DWORD               nCopies;\n    HINSTANCE           hInstance;\n    LPCWSTR             lpPrintTemplateName;\n    void* /*LPUNKNOWN*/ lpCallback;\n    DWORD               nPropertyPages;\n    HPROPSHEETPAGE*     lphPropertyPages;\n    DWORD               nStartPage;\n    DWORD               dwResultAction;\n} PRINTDLGEXW, *LPPRINTDLGEXW;\n\nDECL_WINELIB_TYPE_AW(PRINTDLGEX)\nDECL_WINELIB_TYPE_AW(LPPRINTDLGEX)\n\n#ifdef STDMETHOD\n\nDEFINE_GUID(IID_IPrintDialogCallback, 0x5852a2c3,0x6530,0x11d1,0xb6,0xa3,0x00,0x00,0xf8,0x75,0x7b,0xf9);\n#define INTERFACE IPrintDialogCallback\nDECLARE_INTERFACE_(IPrintDialogCallback,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID,void **) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IPrintDialogCallback methods ***/\n    STDMETHOD(InitDone)(THIS) PURE;\n    STDMETHOD(SelectionChange)(THIS) PURE;\n    STDMETHOD(HandleMessage)(THIS_ HWND,UINT,WPARAM,LPARAM,LRESULT *) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_IPrintDialogServices, 0x509aaeda,0x5639,0x11d1,0xb6,0xa1,0x00,0x00,0xf8,0x75,0x7b,0xf9);\n#define INTERFACE IPrintDialogServices\nDECLARE_INTERFACE_(IPrintDialogServices,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID,void **) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IPrintDialogServices methods ***/\n    STDMETHOD(GetCurrentDevMode)(THIS_ LPDEVMODEW,UINT *) PURE;\n    STDMETHOD(GetCurrentPrinterName)(THIS_ LPWSTR,UINT *) PURE;\n    STDMETHOD(GetCurrentPortName)(THIS_ LPWSTR,UINT *) PURE;\n};\n#undef INTERFACE\n\n#endif /* STDMETHOD */\n\nBOOL  WINAPI ChooseColorA(LPCHOOSECOLORA lpChCol);\nBOOL  WINAPI ChooseColorW(LPCHOOSECOLORW lpChCol);\n#define ChooseColor WINELIB_NAME_AW(ChooseColor)\nDWORD   WINAPI CommDlgExtendedError(void);\nHWND  WINAPI FindTextA(LPFINDREPLACEA lpFind);\nHWND  WINAPI FindTextW(LPFINDREPLACEW lpFind);\n#define FindText WINELIB_NAME_AW(FindText)\nshort   WINAPI GetFileTitleA(LPCSTR lpFile, LPSTR lpTitle, WORD cbBuf);\nshort   WINAPI GetFileTitleW(LPCWSTR lpFile, LPWSTR lpTitle, WORD cbBuf);\n#define GetFileTitle WINELIB_NAME_AW(GetFileTitle)\nBOOL  WINAPI GetOpenFileNameA(LPOPENFILENAMEA ofn);\nBOOL  WINAPI GetOpenFileNameW(LPOPENFILENAMEW ofn);\n#define GetOpenFileName WINELIB_NAME_AW(GetOpenFileName)\nBOOL  WINAPI GetSaveFileNameA(LPOPENFILENAMEA ofn);\nBOOL  WINAPI GetSaveFileNameW(LPOPENFILENAMEW ofn);\n#define GetSaveFileName WINELIB_NAME_AW(GetSaveFileName)\nBOOL WINAPI PageSetupDlgA( LPPAGESETUPDLGA );\nBOOL WINAPI PageSetupDlgW( LPPAGESETUPDLGW );\n#define PageSetupDlg WINELIB_NAME_AW(PageSetupDlg)\nBOOL  WINAPI PrintDlgA( LPPRINTDLGA printdlg);\nBOOL  WINAPI PrintDlgW( LPPRINTDLGW printdlg);\n#define PrintDlg WINELIB_NAME_AW(PrintDlg)\nHRESULT WINAPI PrintDlgExA(LPPRINTDLGEXA);\nHRESULT WINAPI PrintDlgExW(LPPRINTDLGEXW);\n#define PrintDlgEx WINELIB_NAME_AW(PrintDlgEx)\nHWND  WINAPI ReplaceTextA( LPFINDREPLACEA lpFind);\nHWND  WINAPI ReplaceTextW( LPFINDREPLACEW lpFind);\n#define ReplaceText WINELIB_NAME_AW(ReplaceText)\nBOOL  WINAPI ChooseFontA(LPCHOOSEFONTA);\nBOOL  WINAPI ChooseFontW(LPCHOOSEFONTW);\n#define ChooseFont WINELIB_NAME_AW(ChooseFont)\n\nvoid COMDLG32_SetCommDlgExtendedError(DWORD err);\n\n\n#ifndef _WIN64\n#include <poppack.h>\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* __WINE_COMMDLG_H */\n"
  },
  {
    "path": "wine/windows/commoncontrols.idl",
    "content": "/*\n * Common controls v6 interface definitions\n *\n * Copyright 2009 Owen Rudge for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\n\n/* Definitions required for widl, but already defined in commctrl.h for C */\ncpp_quote(\"#if 0\")\ntypedef DWORD RGBQUAD;\ntypedef IUnknown* HIMAGELIST;\n\ntypedef struct\n{\n    HBITMAP hbmImage;\n    HBITMAP hbmMask;\n    int     Unused1;\n    int     Unused2;\n    RECT    rcImage;\n} IMAGEINFO;\n\ntypedef IMAGEINFO* LPIMAGEINFO;\n\ntypedef struct\n{\n    DWORD      cbSize;\n    HIMAGELIST himl;\n    int        i;\n    HDC        hdcDst;\n    int        x;\n    int        y;\n    int        cx;\n    int        cy;\n    int        xBitmap;\n    int        yBitmap;\n    COLORREF   rgbBk;\n    COLORREF   rgbFg;\n    UINT       fStyle;\n    DWORD      dwRop;\n    DWORD      fState;\n    DWORD      Frame;\n    COLORREF   crEffect;\n} IMAGELISTDRAWPARAMS;\n\ntypedef IMAGELISTDRAWPARAMS* LPIMAGELISTDRAWPARAMS;\ncpp_quote(\"#endif\")\n\ncpp_quote(\"HRESULT WINAPI ImageList_CoCreateInstance(REFCLSID,const IUnknown *, REFIID,void **);\")\n\nconst UINT ILIF_ALPHA = 1;\n\n[\n    uuid(46eb5926-582e-4017-9fdf-e8998daa0950),\n    local\n]\ninterface IImageList : IUnknown\n{\n    HRESULT Add(\n        [in] HBITMAP hbmImage,\n        [in] HBITMAP hbmMask,\n        [out] int* pi);\n\n    HRESULT ReplaceIcon(\n        [in] int i,\n        [in] HICON hicon,\n        [out] int* pi);\n\n    HRESULT SetOverlayImage(\n        [in] int iImage,\n        [in] int iOverlay);\n\n    HRESULT Replace(\n        [in] int i,\n        [in] HBITMAP hbmImage,\n        [in] HBITMAP hbmMask);\n\n    HRESULT AddMasked(\n        [in] HBITMAP hbmImage,\n        [in] COLORREF crMask,\n        [out] int* pi);\n\n    HRESULT Draw(\n        [in] IMAGELISTDRAWPARAMS* pimldp);\n\n    HRESULT Remove(\n        [in] int i);\n\n    HRESULT GetIcon(\n        [in] int i,\n        [in] UINT flags,\n        [out] HICON* picon);\n\n    HRESULT GetImageInfo(\n        [in] int i,\n        [out] IMAGEINFO* pImageInfo);\n\n    HRESULT Copy(\n        [in] int iDst,\n        [in] IUnknown* punkSrc,\n        [in] int iSrc,\n        [in] UINT uFlags);\n\n    HRESULT Merge(\n        [in] int i1,\n        [in] IUnknown* punk2,\n        [in] int i2,\n        [in] int dx,\n        [in] int dy,\n        [out] REFIID riid,\n        [out] PVOID* ppv);\n\n    HRESULT Clone(\n        [in] REFIID riid,\n        [out] PVOID* ppv);\n\n    HRESULT GetImageRect(\n        [in] int i,\n        [out] RECT* prc);\n\n    HRESULT GetIconSize(\n        [out] int* cx,\n        [out] int* cy);\n\n    HRESULT SetIconSize(\n        [in] int cx,\n        [in] int cy);\n\n    HRESULT GetImageCount(\n        [out] int* pi);\n\n    HRESULT SetImageCount(\n        [in] UINT uNewCount);\n\n    HRESULT SetBkColor(\n        [in] COLORREF clrBk,\n        [out] COLORREF* pclr);\n\n    HRESULT GetBkColor(\n        [out] COLORREF* pclr);\n\n    HRESULT BeginDrag(\n        [in] int iTrack,\n        [in] int dxHotspot,\n        [in] int dyHotspot);\n\n    HRESULT EndDrag();\n\n    HRESULT DragEnter(\n        [in] HWND hwndLock,\n        [in] int x,\n        [in] int y);\n\n    HRESULT DragLeave(\n        [in] HWND hwndLock);\n\n    HRESULT DragMove(\n        [in] int x,\n        [in] int y);\n\n    HRESULT SetDragCursorImage(\n        [in] IUnknown* punk,\n        [in] int iDrag,\n        [in] int dxHotspot,\n        [in] int dyHotspot);\n\n    HRESULT DragShowNolock(\n        [in] BOOL fShow);\n\n    HRESULT GetDragImage(\n        [out] POINT * ppt,\n        [out] POINT * pptHotspot,\n        [out] REFIID riid,\n        [out] PVOID* ppv);\n\n    HRESULT GetItemFlags(\n        [in] int i,\n        [out] DWORD *dwFlags);\n\n    HRESULT GetOverlayImage(\n        [in] int iOverlay,\n        [out] int* piIndex);\n}\n\n[\n    uuid(192b9d83-50fc-457b-90a0-2b82a8b5dae1),\n    local\n]\ninterface IImageList2 : IImageList\n{\n    typedef struct tagIMAGELISTSTATS\n    {\n        DWORD cbSize;\n        INT   cAlloc;\n        INT   cUsed;\n        INT   cStandby;\n    } IMAGELISTSTATS;\n\n    HRESULT Resize(INT x_size, INT y_size);\n    HRESULT GetOriginalSize([in] INT image, [in] DWORD flags, [out] INT *cx, [out] INT *cy);\n    HRESULT SetOriginalSize([in] INT image, [in] INT cx, [in] INT cy);\n    HRESULT SetCallback([in, unique] IUnknown *callback);\n    HRESULT GetCallback([in] REFIID riid, [out, iid_is(riid)] void** ppv);\n    HRESULT ForceImagePresent([in] INT image, DWORD flags);\n    HRESULT DiscardImages([in] INT first_image, [in] INT last_image, [in] DWORD flags);\n    HRESULT PreloadImages([in] IMAGELISTDRAWPARAMS *params);\n    HRESULT GetStatistics([in, out] IMAGELISTSTATS *stats);\n    HRESULT Initialize([in] INT cx, [in] INT cy, [in] UINT flags, [in] INT initial, [in] INT grow);\n    HRESULT Replace2([in] INT i, [in] HBITMAP image, [in, unique] HBITMAP mask, [in, unique] IUnknown *unk, [in] DWORD flags);\n    HRESULT ReplaceFromImageList([in] INT i, [in] IImageList *imagelist, [in] INT src, [in, unique] IUnknown *unk, [in] DWORD flags);\n}\n\n[\n    uuid(bcada15B-b428-420c-8d28-023590924c9f)\n]\nlibrary CommonControlObjects\n{\n    [\n        uuid(7c476ba2-02b1-48f4-8048-b24619ddc058)\n    ]\n    coclass ImageList\n    {\n        interface IImageList;\n        interface IImageList2;\n    }\n}\n"
  },
  {
    "path": "wine/windows/compobj.h",
    "content": "/*\n * Copyright (C) 2000 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_COMPOBJ_H\n#define __WINE_COMPOBJ_H\n\n/* compobj.h is just a synonym for objbase.h */\n#include <objbase.h>\n\n#endif /* __WINE_COMPOBJ_H */\n"
  },
  {
    "path": "wine/windows/comsvcs.idl",
    "content": "/*\n * Copyright (C) 2017 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\nimport \"unknwn.idl\";\nimport \"objidl.idl\";\nimport \"oaidl.idl\";\n\n#ifndef __WIDL__\n#define threading(model)\n#endif\n\ntypedef DWORD_PTR INSTID;\ntypedef DWORD_PTR RESID;\ntypedef DWORD     RESOURCERATING;\ntypedef DWORD_PTR RESTYPID;\ntypedef LPOLESTR  SRESID;\ntypedef long      TIMEINSECS;\ntypedef DWORD_PTR TRANSID;\n\n[\n    uuid(2a005c00-a5de-11cf-9e66-00aa00a3f464),\n    version(1.0)\n]\nlibrary COMSVCSLib\n{\n    [\n        object,\n        hidden,\n        local,\n        uuid(bf6a1850-2b45-11cf-be10-00aa00a2fa25),\n        pointer_default(unique)\n    ]\n    interface IHolder : IUnknown\n    {\n        HRESULT AllocResource([in] const RESTYPID typeid, [out] RESID *resid);\n        HRESULT FreeResource([in] const RESID _resid);\n        HRESULT TrackResource([in] const RESID resid);\n        HRESULT TrackResourceS([in] const SRESID resid);\n        HRESULT UntrackResource([in] const RESID resid, [in] const BOOL value);\n        HRESULT UntrackResourceS([in] const SRESID resid, [in] const BOOL value);\n        HRESULT Close(void);\n        HRESULT RequestDestroyResource([in] const RESID resid);\n    };\n\n    [\n        object,\n        hidden,\n        local,\n        uuid(208b3651-2b48-11cf-be10-00aa00a2fa25),\n        pointer_default(unique)\n    ]\n    interface IDispenserDriver : IUnknown\n    {\n        HRESULT CreateResource([in] const RESTYPID restypid, [out] RESID *resid, [out] TIMEINSECS *destroy);\n        HRESULT RateResource([in] const RESTYPID restypid, [in] const RESID resid,\n                [in] const BOOL requires, [out] RESOURCERATING *rating);\n        HRESULT EnlistResource([in] const RESID resid, [in] const TRANSID transid);\n        HRESULT ResetResource([in] const RESID resid);\n        HRESULT DestroyResource([in] const RESID resid);\n        HRESULT DestroyResourceS([in] const SRESID resid);\n    };\n\n    [\n        object,\n        hidden,\n        local,\n        uuid(5cb31e10-2b5f-11cf-be10-00aa00a2fa25),\n        pointer_default(unique)\n    ]\n    interface IDispenserManager : IUnknown\n    {\n         HRESULT RegisterDispenser([in] IDispenserDriver *driver, [in] LPCOLESTR name, [out] IHolder **dispenser);\n         HRESULT GetContext([out] INSTID *id, [out] TRANSID *transid);\n    };\n\n    [\n        uuid(ecabb0c0-7f19-11d2-978e-0000f8757e2a),\n        hidden,\n        threading(both)\n    ]\n    coclass DispenserManager\n    {\n        [default] interface IDispenserManager;\n    };\n}\n"
  },
  {
    "path": "wine/windows/config.h",
    "content": "/* include/config.h.  Generated from config.h.in by configure.  */\n/* include/config.h.in.  Generated from configure.ac by autoheader.  */\n\n#ifndef __WINE_CONFIG_H\n#define __WINE_CONFIG_H\n#ifndef WINE_CROSSTEST\n\n/* Define to a function attribute for Microsoft hotpatch assembly prefix. */\n#define DECLSPEC_HOTPATCH __attribute__((__ms_hook_prologue__))\n\n/* Define to the file extension for executables. */\n#define EXEEXT \".exe\"\n\n/* Define to 1 if you have the `acosh' function. */\n/* #undef HAVE_ACOSH */\n\n/* Define to 1 if you have the `acoshf' function. */\n/* #undef HAVE_ACOSHF */\n\n/* Define to 1 if you have the <alias.h> header file. */\n/* #undef HAVE_ALIAS_H */\n\n/* Define to 1 if you have the <alsa/asoundlib.h> header file. */\n/* #undef HAVE_ALSA_ASOUNDLIB_H */\n\n/* Define to 1 if you have the <AL/al.h> header file. */\n/* #undef HAVE_AL_AL_H */\n\n/* Define to 1 if you have the <ApplicationServices/ApplicationServices.h>\n   header file. */\n/* #undef HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H */\n\n/* Define to 1 if you have the <arpa/inet.h> header file. */\n#define HAVE_ARPA_INET_H 1\n\n/* Define to 1 if you have the <arpa/nameser.h> header file. */\n#define HAVE_ARPA_NAMESER_H 1\n\n/* Define to 1 if you have the `asctime_r' function. */\n#define HAVE_ASCTIME_R 1\n\n/* Define to 1 if you have the `asinh' function. */\n/* #undef HAVE_ASINH */\n\n/* Define to 1 if you have the `asinhf' function. */\n/* #undef HAVE_ASINHF */\n\n/* Define to 1 if you have the <asm/types.h> header file. */\n#define HAVE_ASM_TYPES_H 1\n\n/* Define to 1 if you have the <asm/user.h> header file. */\n/* #undef HAVE_ASM_USER_H */\n\n/* Define to 1 if you have the `atanh' function. */\n/* #undef HAVE_ATANH */\n\n/* Define to 1 if you have the `atanhf' function. */\n/* #undef HAVE_ATANHF */\n\n/* Define to 1 if you have the <AudioToolbox/AudioConverter.h> header file. */\n/* #undef HAVE_AUDIOTOOLBOX_AUDIOCONVERTER_H */\n\n/* Define to 1 if you have the <AudioUnit/AudioComponent.h> header file. */\n/* #undef HAVE_AUDIOUNIT_AUDIOCOMPONENT_H */\n\n/* Define to 1 if you have the <AudioUnit/AudioUnit.h> header file. */\n/* #undef HAVE_AUDIOUNIT_AUDIOUNIT_H */\n\n/* Define to 1 if you have the `AUGraphAddNode' function. */\n/* #undef HAVE_AUGRAPHADDNODE */\n\n/* Define to 1 if you have the <capi20.h> header file. */\n/* #undef HAVE_CAPI20_H */\n\n/* Define to 1 if you have the <Carbon/Carbon.h> header file. */\n/* #undef HAVE_CARBON_CARBON_H */\n\n/* Define to 1 if you have the `cbrt' function. */\n#define HAVE_CBRT 1\n\n/* Define to 1 if you have the `cbrtf' function. */\n#define HAVE_CBRTF 1\n\n/* Define to 1 if you have the `chsize' function. */\n/* #undef HAVE_CHSIZE */\n\n/* Define to 1 if you have the `clock_gettime' function. */\n#define HAVE_CLOCK_GETTIME 1\n\n/* Define to 1 if you have the <CL/cl.h> header file. */\n/* #undef HAVE_CL_CL_H */\n\n/* Define to 1 if you have the <CommonCrypto/CommonCryptor.h> header file. */\n/* #undef HAVE_COMMONCRYPTO_COMMONCRYPTOR_H */\n\n/* Define to 1 if you have the <CoreAudio/CoreAudio.h> header file. */\n/* #undef HAVE_COREAUDIO_COREAUDIO_H */\n\n/* Define to 1 if you have the <CoreServices/CoreServices.h> header file. */\n/* #undef HAVE_CORESERVICES_CORESERVICES_H */\n\n/* Define to 1 if you have the <cups/cups.h> header file. */\n/* #undef HAVE_CUPS_CUPS_H */\n\n/* Define to 1 if you have the <cups/ppd.h> header file. */\n/* #undef HAVE_CUPS_PPD_H */\n\n/* Define to 1 if you have the <curses.h> header file. */\n#define HAVE_CURSES_H 1\n\n/* Define if you have the daylight variable */\n#define HAVE_DAYLIGHT 1\n\n/* Define to 1 if you have the <direct.h> header file. */\n/* #undef HAVE_DIRECT_H */\n\n/* Define to 1 if you have the <dirent.h> header file. */\n#define HAVE_DIRENT_H 1\n\n/* Define to 1 if you have the <DiskArbitration/DiskArbitration.h> header\n   file. */\n/* #undef HAVE_DISKARBITRATION_DISKARBITRATION_H */\n\n/* Define to 1 if you have the `dladdr' function. */\n/* #undef HAVE_DLADDR */\n\n/* Define to 1 if you have the <dlfcn.h> header file. */\n#define HAVE_DLFCN_H 1\n\n/* Define to 1 if you have the `dlopen' function. */\n#define HAVE_DLOPEN 1\n\n/* Define to 1 if you have the <EGL/egl.h> header file. */\n/* #undef HAVE_EGL_EGL_H */\n\n/* Define to 1 if you have the <elf.h> header file. */\n#define HAVE_ELF_H 1\n\n/* Define to 1 if you have the `epoll_create' function. */\n/* #undef HAVE_EPOLL_CREATE */\n\n/* Define to 1 if you have the `erf' function. */\n/* #undef HAVE_ERF */\n\n/* Define to 1 if you have the `erfc' function. */\n/* #undef HAVE_ERFC */\n\n/* Define to 1 if you have the `erfcf' function. */\n/* #undef HAVE_ERFCF */\n\n/* Define to 1 if you have the `erff' function. */\n/* #undef HAVE_ERFF */\n\n/* Define to 1 if you have the `exp2' function. */\n#define HAVE_EXP2 1\n\n/* Define to 1 if you have the `exp2f' function. */\n#define HAVE_EXP2F 1\n\n/* Define to 1 if you have the `expm1' function. */\n/* #undef HAVE_EXPM1 */\n\n/* Define to 1 if you have the `expm1f' function. */\n/* #undef HAVE_EXPM1F */\n\n/* Define to 1 if you have the `fallocate' function. */\n/* #undef HAVE_FALLOCATE */\n\n/* Define to 1 if you have the `ffs' function. */\n#define HAVE_FFS 1\n\n/* Define to 1 if you have the `finitef' function. */\n#define HAVE_FINITEF 1\n\n/* Define to 1 if you have the <float.h> header file. */\n#define HAVE_FLOAT_H 1\n\n/* Define to 1 if you have the `fnmatch' function. */\n#define HAVE_FNMATCH 1\n\n/* Define to 1 if you have the <fnmatch.h> header file. */\n#define HAVE_FNMATCH_H 1\n\n/* Define to 1 if you have the <fontconfig/fontconfig.h> header file. */\n#define HAVE_FONTCONFIG_FONTCONFIG_H 1\n\n/* Define to 1 if you have the `fork' function. */\n#define HAVE_FORK 1\n\n/* Define to 1 if you have the `fpclass' function. */\n/* #undef HAVE_FPCLASS */\n\n/* Define if FreeType 2 is installed */\n/* #undef HAVE_FREETYPE */\n\n/* Define to 1 if the system has the type `fsblkcnt_t'. */\n#define HAVE_FSBLKCNT_T 1\n\n/* Define to 1 if the system has the type `fsfilcnt_t'. */\n#define HAVE_FSFILCNT_T 1\n\n/* Define to 1 if you have the `fstatfs' function. */\n#define HAVE_FSTATFS 1\n\n/* Define to 1 if you have the `fstatvfs' function. */\n#define HAVE_FSTATVFS 1\n\n/* Define to 1 if you have the <ft2build.h> header file. */\n/* #undef HAVE_FT2BUILD_H */\n\n/* Define to 1 if you have the `ftruncate' function. */\n#define HAVE_FTRUNCATE 1\n\n/* Define to 1 if the system has the type `FT_TrueTypeEngineType'. */\n/* #undef HAVE_FT_TRUETYPEENGINETYPE */\n\n/* Define to 1 if you have the `futimens' function. */\n#define HAVE_FUTIMENS 1\n\n/* Define to 1 if you have the `futimes' function. */\n#define HAVE_FUTIMES 1\n\n/* Define to 1 if you have the `futimesat' function. */\n#define HAVE_FUTIMESAT 1\n\n/* Define to 1 if you have the `getaddrinfo' function. */\n#define HAVE_GETADDRINFO 1\n\n/* Define to 1 if you have the `getattrlist' function. */\n/* #undef HAVE_GETATTRLIST */\n\n/* Define to 1 if you have the `getauxval' function. */\n/* #undef HAVE_GETAUXVAL */\n\n/* Define to 1 if you have the `getifaddrs' function. */\n/* #undef HAVE_GETIFADDRS */\n\n/* Define to 1 if you have the `getnameinfo' function. */\n#define HAVE_GETNAMEINFO 1\n\n/* Define to 1 if you have the `getnetbyname' function. */\n/* #undef HAVE_GETNETBYNAME */\n\n/* Define to 1 if you have the <getopt.h> header file. */\n#define HAVE_GETOPT_H 1\n\n/* Define to 1 if you have the `getopt_long_only' function. */\n#define HAVE_GETOPT_LONG_ONLY 1\n\n/* Define to 1 if you have the `getprotobyname' function. */\n#define HAVE_GETPROTOBYNAME 1\n\n/* Define to 1 if you have the `getprotobynumber' function. */\n#define HAVE_GETPROTOBYNUMBER 1\n\n/* Define to 1 if you have the `getpwuid' function. */\n#define HAVE_GETPWUID 1\n\n/* Define to 1 if you have the `getservbyport' function. */\n#define HAVE_GETSERVBYPORT 1\n\n/* Define to 1 if you have the <gettext-po.h> header file. */\n#define HAVE_GETTEXT_PO_H 1\n\n/* Define to 1 if you have the `gettimeofday' function. */\n#define HAVE_GETTIMEOFDAY 1\n\n/* Define to 1 if you have the `getuid' function. */\n#define HAVE_GETUID 1\n\n/* Define to 1 if you have the `gnutls_cipher_init' function. */\n/* #undef HAVE_GNUTLS_CIPHER_INIT */\n\n/* Define if we have the libgphoto2 development environment */\n/* #undef HAVE_GPHOTO2 */\n\n/* Define if we have the libgphoto2_port development environment */\n/* #undef HAVE_GPHOTO2_PORT */\n\n/* Define to 1 if you have the <grp.h> header file. */\n#define HAVE_GRP_H 1\n\n/* Define to 1 if you have the <gsm/gsm.h> header file. */\n#define HAVE_GSM_GSM_H 1\n\n/* Define to 1 if you have the <gsm.h> header file. */\n/* #undef HAVE_GSM_H */\n\n/* Define to 1 if you have the <gssapi/gssapi_ext.h> header file. */\n/* #undef HAVE_GSSAPI_GSSAPI_EXT_H */\n\n/* Define to 1 if you have the <gssapi/gssapi.h> header file. */\n/* #undef HAVE_GSSAPI_GSSAPI_H */\n\n/* Define to 1 if you have the <ieeefp.h> header file. */\n#define HAVE_IEEEFP_H 1\n\n/* Define to 1 if you have the <ifaddrs.h> header file. */\n#define HAVE_IFADDRS_H 1\n\n/* Define to 1 if you have the `if_nameindex' function. */\n#define HAVE_IF_NAMEINDEX 1\n\n/* Define to 1 if you have the `inet_addr' function. */\n#define HAVE_INET_ADDR 1\n\n/* Define to 1 if you have the <inet/mib2.h> header file. */\n/* #undef HAVE_INET_MIB2_H */\n\n/* Define to 1 if you have the `inet_network' function. */\n#define HAVE_INET_NETWORK 1\n\n/* Define to 1 if you have the `inet_ntop' function. */\n#define HAVE_INET_NTOP 1\n\n/* Define to 1 if you have the `inet_pton' function. */\n#define HAVE_INET_PTON 1\n\n/* Define to 1 if you have the <inttypes.h> header file. */\n#define HAVE_INTTYPES_H 1\n\n/* Define to 1 if you have the `IOHIDManagerCreate' function. */\n/* #undef HAVE_IOHIDMANAGERCREATE */\n\n/* Define to 1 if you have the <IOKit/hid/IOHIDLib.h> header file. */\n/* #undef HAVE_IOKIT_HID_IOHIDLIB_H */\n\n/* Define to 1 if you have the <IOKit/IOKitLib.h> header file. */\n/* #undef HAVE_IOKIT_IOKITLIB_H */\n\n/* Define to 1 if you have the <io.h> header file. */\n#define HAVE_IO_H 1\n\n/* Define to 1 if you have the `isfinite' function. */\n#define HAVE_ISFINITE 1\n\n/* Define to 1 if you have the `isinf' function. */\n#define HAVE_ISINF 1\n\n/* Define to 1 if you have the `isnan' function. */\n#define HAVE_ISNAN 1\n\n/* Define to 1 if you have the `isnanf' function. */\n#define HAVE_ISNANF 1\n\n/* Define to 1 if you have the `j0' function. */\n/* #undef HAVE_J0 */\n\n/* Define to 1 if you have the `j1' function. */\n/* #undef HAVE_J1 */\n\n/* Define to 1 if you have the `jn' function. */\n/* #undef HAVE_JN */\n\n/* Define to 1 if you have the <jpeglib.h> header file. */\n#define HAVE_JPEGLIB_H 1\n\n/* Define to 1 if you have the `kqueue' function. */\n/* #undef HAVE_KQUEUE */\n\n/* Define to 1 if you have the <krb5/krb5.h> header file. */\n/* #undef HAVE_KRB5_KRB5_H */\n\n/* Define to 1 if you have the <kstat.h> header file. */\n/* #undef HAVE_KSTAT_H */\n\n/* Define to 1 if you have the <lber.h> header file. */\n#define HAVE_LBER_H 1\n\n/* Define if you have the LittleCMS development environment */\n#define HAVE_LCMS2 1\n\n/* Define to 1 if you have the <lcms2.h> header file. */\n#define HAVE_LCMS2_H 1\n\n/* Define if you have the OpenLDAP development environment */\n#define HAVE_LDAP 1\n\n/* Define to 1 if you have the `ldap_count_references' function. */\n#define HAVE_LDAP_COUNT_REFERENCES 1\n\n/* Define to 1 if you have the `ldap_first_reference' function. */\n#define HAVE_LDAP_FIRST_REFERENCE 1\n\n/* Define to 1 if you have the <ldap.h> header file. */\n#define HAVE_LDAP_H 1\n\n/* Define to 1 if you have the `ldap_next_reference' function. */\n#define HAVE_LDAP_NEXT_REFERENCE 1\n\n/* Define to 1 if you have the `ldap_parse_reference' function. */\n#define HAVE_LDAP_PARSE_REFERENCE 1\n\n/* Define to 1 if you have the `ldap_parse_sortresponse_control' function. */\n#define HAVE_LDAP_PARSE_SORTRESPONSE_CONTROL 1\n\n/* Define to 1 if you have the `ldap_parse_sort_control' function. */\n/* #undef HAVE_LDAP_PARSE_SORT_CONTROL */\n\n/* Define to 1 if you have the `ldap_parse_vlvresponse_control' function. */\n#define HAVE_LDAP_PARSE_VLVRESPONSE_CONTROL 1\n\n/* Define to 1 if you have the `ldap_parse_vlv_control' function. */\n/* #undef HAVE_LDAP_PARSE_VLV_CONTROL */\n\n/* Define to 1 if you have the `lgamma' function. */\n/* #undef HAVE_LGAMMA */\n\n/* Define to 1 if you have the `lgammaf' function. */\n/* #undef HAVE_LGAMMAF */\n\n/* Define to 1 if you have the `gettextpo' library (-lgettextpo). */\n#define HAVE_LIBGETTEXTPO 1\n\n/* Define to 1 if you have the `i386' library (-li386). */\n/* #undef HAVE_LIBI386 */\n\n/* Define to 1 if you have the `kstat' library (-lkstat). */\n/* #undef HAVE_LIBKSTAT */\n\n/* Define to 1 if you have the `ossaudio' library (-lossaudio). */\n/* #undef HAVE_LIBOSSAUDIO */\n\n/* Define to 1 if you have the `procstat' library (-lprocstat). */\n/* #undef HAVE_LIBPROCSTAT */\n\n/* Define to 1 if you have the <libprocstat.h> header file. */\n/* #undef HAVE_LIBPROCSTAT_H */\n\n/* Define to 1 if you have the <libproc.h> header file. */\n/* #undef HAVE_LIBPROC_H */\n\n/* Define to 1 if you have the <libudev.h> header file. */\n/* #undef HAVE_LIBUDEV_H */\n\n/* Define to 1 if you have the <libunwind.h> header file. */\n/* #undef HAVE_LIBUNWIND_H */\n\n/* Define to 1 if you have the <libv4l1.h> header file. */\n/* #undef HAVE_LIBV4L1_H */\n\n/* Define if you have the libxml2 library */\n#define HAVE_LIBXML2 1\n\n/* Define to 1 if you have the <libxml/parser.h> header file. */\n#define HAVE_LIBXML_PARSER_H 1\n\n/* Define to 1 if you have the <libxml/SAX2.h> header file. */\n#define HAVE_LIBXML_SAX2_H 1\n\n/* Define to 1 if you have the <libxml/xmlsave.h> header file. */\n#define HAVE_LIBXML_XMLSAVE_H 1\n\n/* Define if you have the X Shape extension */\n/* #undef HAVE_LIBXSHAPE */\n\n/* Define to 1 if you have the <libxslt/pattern.h> header file. */\n#define HAVE_LIBXSLT_PATTERN_H 1\n\n/* Define to 1 if you have the <libxslt/transform.h> header file. */\n#define HAVE_LIBXSLT_TRANSFORM_H 1\n\n/* Define if you have the X Shm extension */\n/* #undef HAVE_LIBXXSHM */\n\n/* Define to 1 if you have the <link.h> header file. */\n/* #undef HAVE_LINK_H */\n\n/* Define if <linux/joystick.h> defines the Linux 2.2 joystick API */\n/* #undef HAVE_LINUX_22_JOYSTICK_API */\n\n/* Define to 1 if you have the <linux/capi.h> header file. */\n/* #undef HAVE_LINUX_CAPI_H */\n\n/* Define to 1 if you have the <linux/cdrom.h> header file. */\n/* #undef HAVE_LINUX_CDROM_H */\n\n/* Define to 1 if you have the <linux/compiler.h> header file. */\n/* #undef HAVE_LINUX_COMPILER_H */\n\n/* Define to 1 if you have the <linux/filter.h> header file. */\n/* #undef HAVE_LINUX_FILTER_H */\n\n/* Define if Linux-style gethostbyname_r and gethostbyaddr_r are available */\n/* #undef HAVE_LINUX_GETHOSTBYNAME_R_6 */\n\n/* Define to 1 if you have the <linux/hdreg.h> header file. */\n/* #undef HAVE_LINUX_HDREG_H */\n\n/* Define to 1 if you have the <linux/hidraw.h> header file. */\n/* #undef HAVE_LINUX_HIDRAW_H */\n\n/* Define to 1 if you have the <linux/input.h> header file. */\n/* #undef HAVE_LINUX_INPUT_H */\n\n/* Define to 1 if you have the <linux/ioctl.h> header file. */\n/* #undef HAVE_LINUX_IOCTL_H */\n\n/* Define to 1 if you have the <linux/ipx.h> header file. */\n/* #undef HAVE_LINUX_IPX_H */\n\n/* Define to 1 if you have the <linux/irda.h> header file. */\n/* #undef HAVE_LINUX_IRDA_H */\n\n/* Define to 1 if you have the <linux/joystick.h> header file. */\n/* #undef HAVE_LINUX_JOYSTICK_H */\n\n/* Define to 1 if you have the <linux/major.h> header file. */\n/* #undef HAVE_LINUX_MAJOR_H */\n\n/* Define to 1 if you have the <linux/param.h> header file. */\n/* #undef HAVE_LINUX_PARAM_H */\n\n/* Define to 1 if you have the <linux/rtnetlink.h> header file. */\n/* #undef HAVE_LINUX_RTNETLINK_H */\n\n/* Define to 1 if you have the <linux/serial.h> header file. */\n/* #undef HAVE_LINUX_SERIAL_H */\n\n/* Define to 1 if you have the <linux/types.h> header file. */\n/* #undef HAVE_LINUX_TYPES_H */\n\n/* Define to 1 if you have the <linux/ucdrom.h> header file. */\n/* #undef HAVE_LINUX_UCDROM_H */\n\n/* Define to 1 if you have the <linux/videodev2.h> header file. */\n/* #undef HAVE_LINUX_VIDEODEV2_H */\n\n/* Define to 1 if you have the <linux/videodev.h> header file. */\n/* #undef HAVE_LINUX_VIDEODEV_H */\n\n/* Define to 1 if you have the `llrint' function. */\n#define HAVE_LLRINT 1\n\n/* Define to 1 if you have the `llrintf' function. */\n#define HAVE_LLRINTF 1\n\n/* Define to 1 if you have the `llround' function. */\n#define HAVE_LLROUND 1\n\n/* Define to 1 if you have the `llroundf' function. */\n#define HAVE_LLROUNDF 1\n\n/* Define to 1 if you have the `log1p' function. */\n/* #undef HAVE_LOG1P */\n\n/* Define to 1 if you have the `log1pf' function. */\n/* #undef HAVE_LOG1PF */\n\n/* Define to 1 if you have the `log2' function. */\n#define HAVE_LOG2 1\n\n/* Define to 1 if you have the `log2f' function. */\n#define HAVE_LOG2F 1\n\n/* Define to 1 if the system has the type `long long'. */\n#define HAVE_LONG_LONG 1\n\n/* Define to 1 if you have the `lrint' function. */\n#define HAVE_LRINT 1\n\n/* Define to 1 if you have the `lrintf' function. */\n#define HAVE_LRINTF 1\n\n/* Define to 1 if you have the `lround' function. */\n#define HAVE_LROUND 1\n\n/* Define to 1 if you have the `lroundf' function. */\n#define HAVE_LROUNDF 1\n\n/* Define to 1 if you have the `lstat' function. */\n#define HAVE_LSTAT 1\n\n/* Define to 1 if you have the <lwp.h> header file. */\n/* #undef HAVE_LWP_H */\n\n/* Define to 1 if you have the <machine/cpu.h> header file. */\n/* #undef HAVE_MACHINE_CPU_H */\n\n/* Define to 1 if you have the <machine/limits.h> header file. */\n/* #undef HAVE_MACHINE_LIMITS_H */\n\n/* Define to 1 if you have the <machine/sysarch.h> header file. */\n/* #undef HAVE_MACHINE_SYSARCH_H */\n\n/* Define to 1 if you have the <mach/machine.h> header file. */\n/* #undef HAVE_MACH_MACHINE_H */\n\n/* Define to 1 if you have the <mach/mach.h> header file. */\n/* #undef HAVE_MACH_MACH_H */\n\n/* Define to 1 if you have the <mach-o/dyld_images.h> header file. */\n/* #undef HAVE_MACH_O_DYLD_IMAGES_H */\n\n/* Define to 1 if you have the <mach-o/loader.h> header file. */\n/* #undef HAVE_MACH_O_LOADER_H */\n\n/* Define to 1 if you have the <mach-o/nlist.h> header file. */\n/* #undef HAVE_MACH_O_NLIST_H */\n\n/* Define to 1 if you have the `memmove' function. */\n#define HAVE_MEMMOVE 1\n\n/* Define to 1 if you have the <memory.h> header file. */\n#define HAVE_MEMORY_H 1\n\n/* Define to 1 if you have the <Metal/Metal.h> header file. */\n/* #undef HAVE_METAL_METAL_H */\n\n/* Define to 1 if you have the `mmap' function. */\n#define HAVE_MMAP 1\n\n/* Define to 1 if you have the <mntent.h> header file. */\n#define HAVE_MNTENT_H 1\n\n/* Define to 1 if the system has the type `mode_t'. */\n#define HAVE_MODE_T 1\n\n/* Define to 1 if you have the `mousemask' function. */\n#define HAVE_MOUSEMASK 1\n\n/* Define to 1 if you have the <mpg123.h> header file. */\n/* #undef HAVE_MPG123_H */\n\n/* Define to 1 if you have the <ncurses.h> header file. */\n#define HAVE_NCURSES_H 1\n\n/* Define to 1 if you have the `nearbyint' function. */\n/* #undef HAVE_NEARBYINT */\n\n/* Define to 1 if you have the `nearbyintf' function. */\n/* #undef HAVE_NEARBYINTF */\n\n/* Define to 1 if you have the <netdb.h> header file. */\n#define HAVE_NETDB_H 1\n\n/* Define to 1 if you have the <netinet/icmp_var.h> header file. */\n/* #undef HAVE_NETINET_ICMP_VAR_H */\n\n/* Define to 1 if you have the <netinet/if_ether.h> header file. */\n/* #undef HAVE_NETINET_IF_ETHER_H */\n\n/* Define to 1 if you have the <netinet/if_inarp.h> header file. */\n/* #undef HAVE_NETINET_IF_INARP_H */\n\n/* Define to 1 if you have the <netinet/in.h> header file. */\n#define HAVE_NETINET_IN_H 1\n\n/* Define to 1 if you have the <netinet/in_pcb.h> header file. */\n/* #undef HAVE_NETINET_IN_PCB_H */\n\n/* Define to 1 if you have the <netinet/in_systm.h> header file. */\n#define HAVE_NETINET_IN_SYSTM_H 1\n\n/* Define to 1 if you have the <netinet/ip.h> header file. */\n#define HAVE_NETINET_IP_H 1\n\n/* Define to 1 if you have the <netinet/ip_icmp.h> header file. */\n#define HAVE_NETINET_IP_ICMP_H 1\n\n/* Define to 1 if you have the <netinet/ip_var.h> header file. */\n/* #undef HAVE_NETINET_IP_VAR_H */\n\n/* Define to 1 if you have the <netinet/tcp_fsm.h> header file. */\n/* #undef HAVE_NETINET_TCP_FSM_H */\n\n/* Define to 1 if you have the <netinet/tcp.h> header file. */\n#define HAVE_NETINET_TCP_H 1\n\n/* Define to 1 if you have the <netinet/tcp_timer.h> header file. */\n/* #undef HAVE_NETINET_TCP_TIMER_H */\n\n/* Define to 1 if you have the <netinet/tcp_var.h> header file. */\n/* #undef HAVE_NETINET_TCP_VAR_H */\n\n/* Define to 1 if you have the <netinet/udp.h> header file. */\n#define HAVE_NETINET_UDP_H 1\n\n/* Define to 1 if you have the <netinet/udp_var.h> header file. */\n/* #undef HAVE_NETINET_UDP_VAR_H */\n\n/* Define to 1 if you have the <netipx/ipx.h> header file. */\n/* #undef HAVE_NETIPX_IPX_H */\n\n/* Define to 1 if you have the <net/if_arp.h> header file. */\n/* #undef HAVE_NET_IF_ARP_H */\n\n/* Define to 1 if you have the <net/if_dl.h> header file. */\n/* #undef HAVE_NET_IF_DL_H */\n\n/* Define to 1 if you have the <net/if.h> header file. */\n#define HAVE_NET_IF_H 1\n\n/* Define to 1 if you have the <net/if_types.h> header file. */\n/* #undef HAVE_NET_IF_TYPES_H */\n\n/* Define to 1 if you have the <net/route.h> header file. */\n/* #undef HAVE_NET_ROUTE_H */\n\n/* Define to 1 if `_msg_ptr' is a member of `ns_msg'. */\n#define HAVE_NS_MSG__MSG_PTR 1\n\n/* Define to 1 if the system has the type `off_t'. */\n#define HAVE_OFF_T 1\n\n/* Define if mkdir takes only one argument */\n/* #undef HAVE_ONE_ARG_MKDIR */\n\n/* Define to 1 if OpenAL is available */\n/* #undef HAVE_OPENAL */\n\n/* Define to 1 if you have the <OpenAL/al.h> header file. */\n/* #undef HAVE_OPENAL_AL_H */\n\n/* Define to 1 if you have the <OpenCL/opencl.h> header file. */\n/* #undef HAVE_OPENCL_OPENCL_H */\n\n/* Define to 1 if `numaudioengines' is a member of `oss_sysinfo'. */\n/* #undef HAVE_OSS_SYSINFO_NUMAUDIOENGINES */\n\n/* Define to 1 if you have the <pcap/pcap.h> header file. */\n/* #undef HAVE_PCAP_PCAP_H */\n\n/* Define to 1 if you have the `pclose' function. */\n#define HAVE_PCLOSE 1\n\n/* Define to 1 if the system has the type `pid_t'. */\n#define HAVE_PID_T 1\n\n/* Define to 1 if you have the `pipe2' function. */\n#define HAVE_PIPE2 1\n\n/* Define to 1 if you have the <png.h> header file. */\n#define HAVE_PNG_H 1\n\n/* Define to 1 if you have the `poll' function. */\n#define HAVE_POLL 1\n\n/* Define to 1 if you have the <poll.h> header file. */\n#define HAVE_POLL_H 1\n\n/* Define to 1 if you have the `popen' function. */\n#define HAVE_POPEN 1\n\n/* Define to 1 if you have the `port_create' function. */\n/* #undef HAVE_PORT_CREATE */\n\n/* Define to 1 if you have the <port.h> header file. */\n/* #undef HAVE_PORT_H */\n\n/* Define to 1 if you have the `powl' function. */\n/* #undef HAVE_POWL */\n\n/* Define if we can use ppdev.h for parallel port access */\n/* #undef HAVE_PPDEV */\n\n/* Define to 1 if you have the `prctl' function. */\n/* #undef HAVE_PRCTL */\n\n/* Define to 1 if you have the `pread' function. */\n#define HAVE_PREAD 1\n\n/* Define to 1 if you have the <process.h> header file. */\n#define HAVE_PROCESS_H 1\n\n/* Define to 1 if you have the `proc_pidinfo' function. */\n/* #undef HAVE_PROC_PIDINFO */\n\n/* Define to 1 if you have the `pthread_attr_get_np' function. */\n/* #undef HAVE_PTHREAD_ATTR_GET_NP */\n\n/* Define to 1 if you have the `pthread_getattr_np' function. */\n#define HAVE_PTHREAD_GETATTR_NP 1\n\n/* Define to 1 if you have the `pthread_getthreadid_np' function. */\n/* #undef HAVE_PTHREAD_GETTHREADID_NP */\n\n/* Define to 1 if you have the `pthread_get_stackaddr_np' function. */\n/* #undef HAVE_PTHREAD_GET_STACKADDR_NP */\n\n/* Define to 1 if you have the `pthread_get_stacksize_np' function. */\n/* #undef HAVE_PTHREAD_GET_STACKSIZE_NP */\n\n/* Define to 1 if you have the <pthread.h> header file. */\n#define HAVE_PTHREAD_H 1\n\n/* Define to 1 if you have the <pthread_np.h> header file. */\n/* #undef HAVE_PTHREAD_NP_H */\n\n/* Define to 1 if you have the <pulse/pulseaudio.h> header file. */\n/* #undef HAVE_PULSE_PULSEAUDIO_H */\n\n/* Define to 1 if you have the <pwd.h> header file. */\n#define HAVE_PWD_H 1\n\n/* Define to 1 if you have the `pwrite' function. */\n#define HAVE_PWRITE 1\n\n/* Define to 1 if you have the <QuickTime/ImageCompression.h> header file. */\n/* #undef HAVE_QUICKTIME_IMAGECOMPRESSION_H */\n\n/* Define to 1 if you have the `readdir' function. */\n#define HAVE_READDIR 1\n\n/* Define to 1 if you have the `readlink' function. */\n#define HAVE_READLINK 1\n\n/* Define to 1 if you have the `remainder' function. */\n/* #undef HAVE_REMAINDER */\n\n/* Define to 1 if you have the `remainderf' function. */\n/* #undef HAVE_REMAINDERF */\n\n/* Define to 1 if the system has the type `request_sense'. */\n/* #undef HAVE_REQUEST_SENSE */\n\n/* Define if you have the resolver library and header */\n#define HAVE_RESOLV 1\n\n/* Define to 1 if you have the <resolv.h> header file. */\n#define HAVE_RESOLV_H 1\n\n/* Define to 1 if you have the `rint' function. */\n#define HAVE_RINT 1\n\n/* Define to 1 if you have the `rintf' function. */\n#define HAVE_RINTF 1\n\n/* Define to 1 if you have the `round' function. */\n#define HAVE_ROUND 1\n\n/* Define to 1 if you have the `roundf' function. */\n#define HAVE_ROUNDF 1\n\n/* Define to 1 if you have the <sched.h> header file. */\n#define HAVE_SCHED_H 1\n\n/* Define to 1 if you have the `sched_setaffinity' function. */\n/* #undef HAVE_SCHED_SETAFFINITY */\n\n/* Define to 1 if you have the `sched_yield' function. */\n#define HAVE_SCHED_YIELD 1\n\n/* Define to 1 if `cmd' is a member of `scsireq_t'. */\n/* #undef HAVE_SCSIREQ_T_CMD */\n\n/* Define to 1 if you have the <scsi/scsi.h> header file. */\n/* #undef HAVE_SCSI_SCSI_H */\n\n/* Define to 1 if you have the <scsi/scsi_ioctl.h> header file. */\n/* #undef HAVE_SCSI_SCSI_IOCTL_H */\n\n/* Define to 1 if you have the <scsi/sg.h> header file. */\n/* #undef HAVE_SCSI_SG_H */\n\n/* Define to 1 if you have the <SDL2/SDL.h> header file. */\n/* #undef HAVE_SDL2_SDL_H */\n\n/* Define to 1 if you have the <Security/Security.h> header file. */\n/* #undef HAVE_SECURITY_SECURITY_H */\n\n/* Define to 1 if you have the `select' function. */\n#define HAVE_SELECT 1\n\n/* Define to 1 if you have the `sendmsg' function. */\n#define HAVE_SENDMSG 1\n\n/* Define to 1 if you have the `setproctitle' function. */\n/* #undef HAVE_SETPROCTITLE */\n\n/* Define to 1 if you have the `setprogname' function. */\n/* #undef HAVE_SETPROGNAME */\n\n/* Define to 1 if you have the `setrlimit' function. */\n#define HAVE_SETRLIMIT 1\n\n/* Define to 1 if you have the `settimeofday' function. */\n#define HAVE_SETTIMEOFDAY 1\n\n/* Define to 1 if `interface_id' is a member of `sg_io_hdr_t'. */\n/* #undef HAVE_SG_IO_HDR_T_INTERFACE_ID */\n\n/* Define if sigaddset is supported */\n#define HAVE_SIGADDSET 1\n\n/* Define to 1 if you have the `sigaltstack' function. */\n/* #undef HAVE_SIGALTSTACK */\n\n/* Define to 1 if `si_fd' is a member of `siginfo_t'. */\n/* #undef HAVE_SIGINFO_T_SI_FD */\n\n/* Define to 1 if you have the `sigprocmask' function. */\n#define HAVE_SIGPROCMASK 1\n\n/* Define to 1 if the system has the type `sigset_t'. */\n#define HAVE_SIGSET_T 1\n\n/* Define to 1 if the system has the type `size_t'. */\n#define HAVE_SIZE_T 1\n\n/* Define to 1 if you have the `snprintf' function. */\n#define HAVE_SNPRINTF 1\n\n/* Define to 1 if you have the `socketpair' function. */\n#define HAVE_SOCKETPAIR 1\n\n/* Define to 1 if the system has the type `ssize_t'. */\n#define HAVE_SSIZE_T 1\n\n/* Define to 1 if you have the `SSLCopyPeerCertificates' function. */\n/* #undef HAVE_SSLCOPYPEERCERTIFICATES */\n\n/* Define to 1 if you have the `statfs' function. */\n#define HAVE_STATFS 1\n\n/* Define to 1 if you have the `statvfs' function. */\n#define HAVE_STATVFS 1\n\n/* Define to 1 if you have the <stdbool.h> header file. */\n#define HAVE_STDBOOL_H 1\n\n/* Define to 1 if you have the <stdint.h> header file. */\n#define HAVE_STDINT_H 1\n\n/* Define to 1 if you have the <stdlib.h> header file. */\n#define HAVE_STDLIB_H 1\n\n/* Define to 1 if you have the `strcasecmp' function. */\n#define HAVE_STRCASECMP 1\n\n/* Define to 1 if you have the `strdup' function. */\n#define HAVE_STRDUP 1\n\n/* Define to 1 if you have the `strerror' function. */\n#define HAVE_STRERROR 1\n\n/* Define to 1 if you have the <strings.h> header file. */\n#define HAVE_STRINGS_H 1\n\n/* Define to 1 if you have the <string.h> header file. */\n#define HAVE_STRING_H 1\n\n/* Define to 1 if you have the `strncasecmp' function. */\n#define HAVE_STRNCASECMP 1\n\n/* Define to 1 if you have the `strnlen' function. */\n/* #undef HAVE_STRNLEN */\n\n/* Define to 1 if you have the <stropts.h> header file. */\n/* #undef HAVE_STROPTS_H */\n\n/* Define to 1 if you have the `strtold' function. */\n#define HAVE_STRTOLD 1\n\n/* Define to 1 if you have the `strtoll' function. */\n#define HAVE_STRTOLL 1\n\n/* Define to 1 if you have the `strtoull' function. */\n#define HAVE_STRTOULL 1\n\n/* Define to 1 if `d_reclen' is a member of `struct dirent'. */\n/* #undef HAVE_STRUCT_DIRENT_D_RECLEN */\n\n/* Define to 1 if `direction' is a member of `struct ff_effect'. */\n/* #undef HAVE_STRUCT_FF_EFFECT_DIRECTION */\n\n/* Define to 1 if `icps_inhist' is a member of `struct icmpstat'. */\n/* #undef HAVE_STRUCT_ICMPSTAT_ICPS_INHIST */\n\n/* Define to 1 if `icps_outhist' is a member of `struct icmpstat'. */\n/* #undef HAVE_STRUCT_ICMPSTAT_ICPS_OUTHIST */\n\n/* Define to 1 if `ifr_hwaddr' is a member of `struct ifreq'. */\n#define HAVE_STRUCT_IFREQ_IFR_HWADDR 1\n\n/* Define to 1 if `ips_total' is a member of `struct ipstat'. */\n/* #undef HAVE_STRUCT_IPSTAT_IPS_TOTAL */\n\n/* Define to 1 if `ips_total' is a member of `struct ip_stats'. */\n/* #undef HAVE_STRUCT_IP_STATS_IPS_TOTAL */\n\n/* Define to 1 if the system has the type `struct link_map'. */\n/* #undef HAVE_STRUCT_LINK_MAP */\n\n/* Define to 1 if `msg_accrights' is a member of `struct msghdr'. */\n/* #undef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS */\n\n/* Define to 1 if `mt_blkno' is a member of `struct mtget'. */\n#define HAVE_STRUCT_MTGET_MT_BLKNO 1\n\n/* Define to 1 if `mt_blksiz' is a member of `struct mtget'. */\n/* #undef HAVE_STRUCT_MTGET_MT_BLKSIZ */\n\n/* Define to 1 if `mt_gstat' is a member of `struct mtget'. */\n#define HAVE_STRUCT_MTGET_MT_GSTAT 1\n\n/* Define to 1 if `name' is a member of `struct option'. */\n#define HAVE_STRUCT_OPTION_NAME 1\n\n/* Define to 1 if the system has the type `struct r_debug'. */\n/* #undef HAVE_STRUCT_R_DEBUG */\n\n/* Define to 1 if `sin6_scope_id' is a member of `struct sockaddr_in6'. */\n#define HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID 1\n\n/* Define to 1 if `sa_len' is a member of `struct sockaddr'. */\n/* #undef HAVE_STRUCT_SOCKADDR_SA_LEN */\n\n/* Define to 1 if `sun_len' is a member of `struct sockaddr_un'. */\n/* #undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN */\n\n/* Define to 1 if `f_bavail' is a member of `struct statfs'. */\n#define HAVE_STRUCT_STATFS_F_BAVAIL 1\n\n/* Define to 1 if `f_bfree' is a member of `struct statfs'. */\n#define HAVE_STRUCT_STATFS_F_BFREE 1\n\n/* Define to 1 if `f_favail' is a member of `struct statfs'. */\n/* #undef HAVE_STRUCT_STATFS_F_FAVAIL */\n\n/* Define to 1 if `f_ffree' is a member of `struct statfs'. */\n#define HAVE_STRUCT_STATFS_F_FFREE 1\n\n/* Define to 1 if `f_frsize' is a member of `struct statfs'. */\n/* #undef HAVE_STRUCT_STATFS_F_FRSIZE */\n\n/* Define to 1 if `f_namelen' is a member of `struct statfs'. */\n#define HAVE_STRUCT_STATFS_F_NAMELEN 1\n\n/* Define to 1 if `f_blocks' is a member of `struct statvfs'. */\n#define HAVE_STRUCT_STATVFS_F_BLOCKS 1\n\n/* Define to 1 if `st_atim' is a member of `struct stat'. */\n#define HAVE_STRUCT_STAT_ST_ATIM 1\n\n/* Define to 1 if `st_atimespec' is a member of `struct stat'. */\n/* #undef HAVE_STRUCT_STAT_ST_ATIMESPEC */\n\n/* Define to 1 if `st_birthtim' is a member of `struct stat'. */\n#define HAVE_STRUCT_STAT_ST_BIRTHTIM 1\n\n/* Define to 1 if `st_birthtime' is a member of `struct stat'. */\n#define HAVE_STRUCT_STAT_ST_BIRTHTIME 1\n\n/* Define to 1 if `st_birthtimespec' is a member of `struct stat'. */\n/* #undef HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC */\n\n/* Define to 1 if `st_blocks' is a member of `struct stat'. */\n#define HAVE_STRUCT_STAT_ST_BLOCKS 1\n\n/* Define to 1 if `st_ctim' is a member of `struct stat'. */\n#define HAVE_STRUCT_STAT_ST_CTIM 1\n\n/* Define to 1 if `st_ctimespec' is a member of `struct stat'. */\n/* #undef HAVE_STRUCT_STAT_ST_CTIMESPEC */\n\n/* Define to 1 if `st_mtim' is a member of `struct stat'. */\n#define HAVE_STRUCT_STAT_ST_MTIM 1\n\n/* Define to 1 if `st_mtimespec' is a member of `struct stat'. */\n/* #undef HAVE_STRUCT_STAT_ST_MTIMESPEC */\n\n/* Define to 1 if `__st_birthtim' is a member of `struct stat'. */\n/* #undef HAVE_STRUCT_STAT___ST_BIRTHTIM */\n\n/* Define to 1 if `__st_birthtime' is a member of `struct stat'. */\n/* #undef HAVE_STRUCT_STAT___ST_BIRTHTIME */\n\n/* Define to 1 if `tcps_connattempt' is a member of `struct tcpstat'. */\n/* #undef HAVE_STRUCT_TCPSTAT_TCPS_CONNATTEMPT */\n\n/* Define to 1 if `tcps_connattempt' is a member of `struct tcp_stats'. */\n/* #undef HAVE_STRUCT_TCP_STATS_TCPS_CONNATTEMPT */\n\n/* Define to 1 if `udps_ipackets' is a member of `struct udpstat'. */\n/* #undef HAVE_STRUCT_UDPSTAT_UDPS_IPACKETS */\n\n/* Define to 1 if the system has the type `struct xinpgen'. */\n/* #undef HAVE_STRUCT_XINPGEN */\n\n/* Define to 1 if the system has the type `struct __res_state'. */\n#define HAVE_STRUCT___RES_STATE 1\n\n/* Define to 1 if `_u._ext.nscount6' is a member of `struct __res_state'. */\n/* #undef HAVE_STRUCT___RES_STATE__U__EXT_NSCOUNT6 */\n\n/* Define to 1 if you have the `symlink' function. */\n#define HAVE_SYMLINK 1\n\n/* Define to 1 if you have the <syscall.h> header file. */\n/* #undef HAVE_SYSCALL_H */\n\n/* Define to 1 if you have the `sysinfo' function. */\n/* #undef HAVE_SYSINFO */\n\n/* Define to 1 if you have the <sys/asoundlib.h> header file. */\n/* #undef HAVE_SYS_ASOUNDLIB_H */\n\n/* Define to 1 if you have the <sys/attr.h> header file. */\n/* #undef HAVE_SYS_ATTR_H */\n\n/* Define to 1 if you have the <sys/auxv.h> header file. */\n/* #undef HAVE_SYS_AUXV_H */\n\n/* Define to 1 if you have the <sys/cdio.h> header file. */\n/* #undef HAVE_SYS_CDIO_H */\n\n/* Define to 1 if you have the <sys/elf32.h> header file. */\n#define HAVE_SYS_ELF32_H 1\n\n/* Define to 1 if you have the <sys/epoll.h> header file. */\n/* #undef HAVE_SYS_EPOLL_H */\n\n/* Define to 1 if you have the <sys/event.h> header file. */\n/* #undef HAVE_SYS_EVENT_H */\n\n/* Define to 1 if you have the <sys/exec_elf.h> header file. */\n/* #undef HAVE_SYS_EXEC_ELF_H */\n\n/* Define to 1 if you have the <sys/filio.h> header file. */\n/* #undef HAVE_SYS_FILIO_H */\n\n/* Define to 1 if you have the <sys/inotify.h> header file. */\n/* #undef HAVE_SYS_INOTIFY_H */\n\n/* Define to 1 if you have the <sys/ioctl.h> header file. */\n#define HAVE_SYS_IOCTL_H 1\n\n/* Define to 1 if you have the <sys/ipc.h> header file. */\n#define HAVE_SYS_IPC_H 1\n\n/* Define to 1 if you have the <sys/limits.h> header file. */\n/* #undef HAVE_SYS_LIMITS_H */\n\n/* Define to 1 if you have the <sys/link.h> header file. */\n/* #undef HAVE_SYS_LINK_H */\n\n/* Define to 1 if you have the <sys/mman.h> header file. */\n#define HAVE_SYS_MMAN_H 1\n\n/* Define to 1 if you have the <sys/modem.h> header file. */\n/* #undef HAVE_SYS_MODEM_H */\n\n/* Define to 1 if you have the <sys/mount.h> header file. */\n#define HAVE_SYS_MOUNT_H 1\n\n/* Define to 1 if you have the <sys/msg.h> header file. */\n#define HAVE_SYS_MSG_H 1\n\n/* Define to 1 if you have the <sys/mtio.h> header file. */\n#define HAVE_SYS_MTIO_H 1\n\n/* Define to 1 if you have the <sys/param.h> header file. */\n#define HAVE_SYS_PARAM_H 1\n\n/* Define to 1 if you have the <sys/poll.h> header file. */\n#define HAVE_SYS_POLL_H 1\n\n/* Define to 1 if you have the <sys/prctl.h> header file. */\n/* #undef HAVE_SYS_PRCTL_H */\n\n/* Define to 1 if you have the <sys/protosw.h> header file. */\n/* #undef HAVE_SYS_PROTOSW_H */\n\n/* Define to 1 if you have the <sys/ptrace.h> header file. */\n/* #undef HAVE_SYS_PTRACE_H */\n\n/* Define to 1 if you have the <sys/queue.h> header file. */\n#define HAVE_SYS_QUEUE_H 1\n\n/* Define to 1 if you have the <sys/resource.h> header file. */\n#define HAVE_SYS_RESOURCE_H 1\n\n/* Define to 1 if you have the <sys/scsiio.h> header file. */\n/* #undef HAVE_SYS_SCSIIO_H */\n\n/* Define to 1 if you have the <sys/shm.h> header file. */\n#define HAVE_SYS_SHM_H 1\n\n/* Define to 1 if you have the <sys/signal.h> header file. */\n#define HAVE_SYS_SIGNAL_H 1\n\n/* Define to 1 if you have the <sys/socketvar.h> header file. */\n/* #undef HAVE_SYS_SOCKETVAR_H */\n\n/* Define to 1 if you have the <sys/socket.h> header file. */\n#define HAVE_SYS_SOCKET_H 1\n\n/* Define to 1 if you have the <sys/sockio.h> header file. */\n/* #undef HAVE_SYS_SOCKIO_H */\n\n/* Define to 1 if you have the <sys/statfs.h> header file. */\n#define HAVE_SYS_STATFS_H 1\n\n/* Define to 1 if you have the <sys/statvfs.h> header file. */\n#define HAVE_SYS_STATVFS_H 1\n\n/* Define to 1 if you have the <sys/stat.h> header file. */\n#define HAVE_SYS_STAT_H 1\n\n/* Define to 1 if you have the <sys/strtio.h> header file. */\n/* #undef HAVE_SYS_STRTIO_H */\n\n/* Define to 1 if you have the <sys/syscall.h> header file. */\n/* #undef HAVE_SYS_SYSCALL_H */\n\n/* Define to 1 if you have the <sys/sysctl.h> header file. */\n/* #undef HAVE_SYS_SYSCTL_H */\n\n/* Define to 1 if you have the <sys/sysinfo.h> header file. */\n/* #undef HAVE_SYS_SYSINFO_H */\n\n/* Define to 1 if you have the <sys/thr.h> header file. */\n/* #undef HAVE_SYS_THR_H */\n\n/* Define to 1 if you have the <sys/tihdr.h> header file. */\n/* #undef HAVE_SYS_TIHDR_H */\n\n/* Define to 1 if you have the <sys/timeout.h> header file. */\n/* #undef HAVE_SYS_TIMEOUT_H */\n\n/* Define to 1 if you have the <sys/times.h> header file. */\n#define HAVE_SYS_TIMES_H 1\n\n/* Define to 1 if you have the <sys/time.h> header file. */\n#define HAVE_SYS_TIME_H 1\n\n/* Define to 1 if you have the <sys/types.h> header file. */\n#define HAVE_SYS_TYPES_H 1\n\n/* Define to 1 if you have the <sys/ucontext.h> header file. */\n/* #undef HAVE_SYS_UCONTEXT_H */\n\n/* Define to 1 if you have the <sys/uio.h> header file. */\n#define HAVE_SYS_UIO_H 1\n\n/* Define to 1 if you have the <sys/un.h> header file. */\n#define HAVE_SYS_UN_H 1\n\n/* Define to 1 if you have the <sys/user.h> header file. */\n/* #undef HAVE_SYS_USER_H */\n\n/* Define to 1 if you have the <sys/utsname.h> header file. */\n#define HAVE_SYS_UTSNAME_H 1\n\n/* Define to 1 if you have the <sys/vfs.h> header file. */\n#define HAVE_SYS_VFS_H 1\n\n/* Define to 1 if you have the <sys/vm86.h> header file. */\n/* #undef HAVE_SYS_VM86_H */\n\n/* Define to 1 if you have the <sys/vnode.h> header file. */\n/* #undef HAVE_SYS_VNODE_H */\n\n/* Define to 1 if you have the <sys/wait.h> header file. */\n#define HAVE_SYS_WAIT_H 1\n\n/* Define to 1 if you have the `tcdrain' function. */\n#define HAVE_TCDRAIN 1\n\n/* Define to 1 if you have the <termios.h> header file. */\n#define HAVE_TERMIOS_H 1\n\n/* Define to 1 if you have the `thr_kill2' function. */\n/* #undef HAVE_THR_KILL2 */\n\n/* Define to 1 if you have the <tiffio.h> header file. */\n#define HAVE_TIFFIO_H 1\n\n/* Define to 1 if you have the `timegm' function. */\n#define HAVE_TIMEGM 1\n\n/* Define if you have the timezone variable */\n#define HAVE_TIMEZONE 1\n\n/* Define to 1 if you have the `trunc' function. */\n#define HAVE_TRUNC 1\n\n/* Define to 1 if you have the `truncf' function. */\n#define HAVE_TRUNCF 1\n\n/* Define to 1 if you have the `udev' library (-ludev). */\n/* #undef HAVE_UDEV */\n\n/* Define to 1 if you have the <unistd.h> header file. */\n#define HAVE_UNISTD_H 1\n\n/* Define to 1 if you have the `usleep' function. */\n#define HAVE_USLEEP 1\n\n/* Define to 1 if you have the <utime.h> header file. */\n#define HAVE_UTIME_H 1\n\n/* Define to 1 if you have the <valgrind/memcheck.h> header file. */\n/* #undef HAVE_VALGRIND_MEMCHECK_H */\n\n/* Define to 1 if you have the <valgrind/valgrind.h> header file. */\n/* #undef HAVE_VALGRIND_VALGRIND_H */\n\n/* Define to 1 if you have the `vsnprintf' function. */\n#define HAVE_VSNPRINTF 1\n\n/* Define to 1 if you have the <X11/extensions/shape.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_SHAPE_H */\n\n/* Define to 1 if you have the <X11/extensions/Xcomposite.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XCOMPOSITE_H */\n\n/* Define to 1 if you have the <X11/extensions/xf86vmode.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XF86VMODE_H */\n\n/* Define to 1 if you have the <X11/extensions/xf86vmproto.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XF86VMPROTO_H */\n\n/* Define to 1 if you have the <X11/extensions/Xfixes.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XFIXES_H */\n\n/* Define to 1 if you have the <X11/extensions/Xinerama.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XINERAMA_H */\n\n/* Define to 1 if you have the <X11/extensions/XInput2.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XINPUT2_H */\n\n/* Define to 1 if you have the <X11/extensions/XInput.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XINPUT_H */\n\n/* Define to 1 if you have the <X11/extensions/Xrandr.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XRANDR_H */\n\n/* Define to 1 if you have the <X11/extensions/Xrender.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XRENDER_H */\n\n/* Define to 1 if you have the <X11/extensions/XShm.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XSHM_H */\n\n/* Define to 1 if you have the <X11/Xcursor/Xcursor.h> header file. */\n/* #undef HAVE_X11_XCURSOR_XCURSOR_H */\n\n/* Define to 1 if you have the <X11/XKBlib.h> header file. */\n/* #undef HAVE_X11_XKBLIB_H */\n\n/* Define to 1 if you have the <X11/Xlib.h> header file. */\n/* #undef HAVE_X11_XLIB_H */\n\n/* Define to 1 if you have the <X11/Xutil.h> header file. */\n/* #undef HAVE_X11_XUTIL_H */\n\n/* Define to 1 if `xcookie' is a member of `XEvent'. */\n/* #undef HAVE_XEVENT_XCOOKIE */\n\n/* Define to 1 if `callback' is a member of `XICCallback'. */\n/* #undef HAVE_XICCALLBACK_CALLBACK */\n\n/* Define if you have the XKB extension */\n/* #undef HAVE_XKB */\n\n/* Define if libxml2 has the xmlDocProperties enum */\n#define HAVE_XMLDOC_PROPERTIES 1\n\n/* Define if libxml2 has the xmlFirstElementChild function */\n#define HAVE_XMLFIRSTELEMENTCHILD 1\n\n/* Define if libxml2 has the xmlNewDocPI function */\n#define HAVE_XMLNEWDOCPI 1\n\n/* Define if libxml2 has the xmlReadMemory function */\n#define HAVE_XMLREADMEMORY 1\n\n/* Define if libxml2 has the xmlSchemaSetParserStructuredErrors function */\n#define HAVE_XMLSCHEMASSETPARSERSTRUCTUREDERRORS 1\n\n/* Define if libxml2 has the xmlSchemaSetValidStructuredErrors function */\n#define HAVE_XMLSCHEMASSETVALIDSTRUCTUREDERRORS 1\n\n/* Define if Xrender has the XRenderCreateLinearGradient function */\n/* #undef HAVE_XRENDERCREATELINEARGRADIENT */\n\n/* Define if Xrender has the XRenderSetPictureTransform function */\n/* #undef HAVE_XRENDERSETPICTURETRANSFORM */\n\n/* Define if Xrandr has the XRRGetScreenResources function */\n/* #undef HAVE_XRRGETSCREENRESOURCES */\n\n/* Define to 1 if you have the `y0' function. */\n/* #undef HAVE_Y0 */\n\n/* Define to 1 if you have the `y1' function. */\n/* #undef HAVE_Y1 */\n\n/* Define to 1 if you have the `yn' function. */\n/* #undef HAVE_YN */\n\n/* Define to 1 if you have the `z' library (-lz). */\n#define HAVE_ZLIB 1\n\n/* Define to 1 if you have the <zlib.h> header file. */\n#define HAVE_ZLIB_H 1\n\n/* Define to 1 if you have the `_finite' function. */\n/* #undef HAVE__FINITE */\n\n/* Define to 1 if you have the `_isnan' function. */\n/* #undef HAVE__ISNAN */\n\n/* Define to 1 if you have the `_pclose' function. */\n/* #undef HAVE__PCLOSE */\n\n/* Define to 1 if you have the `_popen' function. */\n/* #undef HAVE__POPEN */\n\n/* Define to 1 if you have the `_snprintf' function. */\n/* #undef HAVE__SNPRINTF */\n\n/* Define to 1 if you have the `_spawnvp' function. */\n/* #undef HAVE__SPAWNVP */\n\n/* Define to 1 if you have the `_strdup' function. */\n/* #undef HAVE__STRDUP */\n\n/* Define to 1 if you have the `_stricmp' function. */\n/* #undef HAVE__STRICMP */\n\n/* Define to 1 if you have the `_strnicmp' function. */\n/* #undef HAVE__STRNICMP */\n\n/* Define to 1 if you have the `_strtoi64' function. */\n/* #undef HAVE__STRTOI64 */\n\n/* Define to 1 if you have the `_strtoui64' function. */\n/* #undef HAVE__STRTOUI64 */\n\n/* Define to 1 if you have the `_vsnprintf' function. */\n/* #undef HAVE__VSNPRINTF */\n\n/* Define to 1 if you have the `__builtin_clz' built-in function. */\n#define HAVE___BUILTIN_CLZ 1\n\n/* Define to 1 if you have the `__builtin_popcount' built-in function. */\n/* #undef HAVE___BUILTIN_POPCOUNT */\n\n/* Define to 1 if you have the `__clear_cache' (potentially built-in)\n   function. */\n/* #undef HAVE___CLEAR_CACHE */\n\n/* Define to 1 if you have the `__res_getservers' function. */\n/* #undef HAVE___RES_GETSERVERS */\n\n/* Define to 1 if you have the `__res_get_state' function. */\n/* #undef HAVE___RES_GET_STATE */\n\n/* Define to 1 if `major', `minor', and `makedev' are declared in <mkdev.h>.\n   */\n/* #undef MAJOR_IN_MKDEV */\n\n/* Define to 1 if `major', `minor', and `makedev' are declared in\n   <sysmacros.h>. */\n/* #undef MAJOR_IN_SYSMACROS */\n\n/* Define to the address where bug reports for this package should be sent. */\n#define PACKAGE_BUGREPORT \"wine-devel@winehq.org\"\n\n/* Define to the full name of this package. */\n#define PACKAGE_NAME \"Wine\"\n\n/* Define to the full name and version of this package. */\n#define PACKAGE_STRING \"Wine 1.7.35\"\n\n/* Define to the one symbol short name of this package. */\n#define PACKAGE_TARNAME \"wine\"\n\n/* Define to the home page for this package. */\n#define PACKAGE_URL \"http://www.winehq.org\"\n\n/* Define to the version of this package. */\n#define PACKAGE_VERSION \"1.7.35\"\n\n/* Define to the soname of the libcapi20 library. */\n/* #undef SONAME_LIBCAPI20 */\n\n/* Define to the soname of the libcups library. */\n/* #undef SONAME_LIBCUPS */\n\n/* Define to the soname of the libcurses library. */\n/* #undef SONAME_LIBCURSES */\n\n/* Define to the soname of the libdbus-1 library. */\n#define SONAME_LIBDBUS_1 \"\tcygdbus-1-3.dll\"\n\n/* Define to the soname of the libEGL library. */\n/* #undef SONAME_LIBEGL */\n\n/* Define to the soname of the libfontconfig library. */\n#define SONAME_LIBFONTCONFIG \"\tcygfontconfig-1.dll\"\n\n/* Define to the soname of the libfreetype library. */\n/* #undef SONAME_LIBFREETYPE */\n\n/* Define to the soname of the libGL library. */\n/* #undef SONAME_LIBGL */\n\n/* Define to the soname of the libGLESv2 library. */\n/* #undef SONAME_LIBGLESV2 */\n\n/* Define to the soname of the libGLU library. */\n/* #undef SONAME_LIBGLU */\n\n/* Define to the soname of the libgnutls library. */\n#define SONAME_LIBGNUTLS \"\tcyggnutls-28.dll\"\n\n/* Define to the soname of the libgsm library. */\n#define SONAME_LIBGSM \"\tcyggsm-1.dll\"\n\n/* Define to the soname of the libgssapi_krb5 library. */\n/* #undef SONAME_LIBGSSAPI_KRB5 */\n\n/* Define to the soname of the libhal library. */\n/* #undef SONAME_LIBHAL */\n\n/* Define to the soname of the libjpeg library. */\n#define SONAME_LIBJPEG \"\tcygjpeg-8.dll\"\n\n/* Define to the soname of the libkrb5 library. */\n/* #undef SONAME_LIBKRB5 */\n\n/* Define to the soname of the libMoltenVK library. */\n/* #undef SONAME_LIBMOLTENVK */\n\n/* Define to the soname of the libncurses library. */\n#define SONAME_LIBNCURSES \"\tcygncursesw-10.dll\"\n\n/* Define to the soname of the libnetapi library. */\n#define SONAME_LIBNETAPI \"libnetapi.dll\"\n\n/* Define to the soname of the libodbc library. */\n#define SONAME_LIBODBC \"\tcygiodbc-2.dll\"\n\n/* Define to the soname of the libopenal library. */\n/* #undef SONAME_LIBOPENAL */\n\n/* Define to the soname of the libOSMesa library. */\n/* #undef SONAME_LIBOSMESA */\n\n/* Define to the soname of the libpng library. */\n#define SONAME_LIBPNG \"\tcygpng15-15.dll\"\n\n/* Define to the soname of the libsane library. */\n/* #undef SONAME_LIBSANE */\n\n/* Define to the soname of the libSDL2 library. */\n/* #undef SONAME_LIBSDL2 */\n\n/* Define to the soname of the libtiff library. */\n#define SONAME_LIBTIFF \"\tcygtiff-5.dll\"\n\n/* Define to the soname of the libv4l1 library. */\n/* #undef SONAME_LIBV4L1 */\n\n/* Define to the soname of the libvkd3d library. */\n/* #undef SONAME_LIBVKD3D */\n\n/* Define to the soname of the libvulkan library. */\n/* #undef SONAME_LIBVULKAN */\n\n/* Define to the soname of the libX11 library. */\n/* #undef SONAME_LIBX11 */\n\n/* Define to the soname of the libXcomposite library. */\n/* #undef SONAME_LIBXCOMPOSITE */\n\n/* Define to the soname of the libXcursor library. */\n/* #undef SONAME_LIBXCURSOR */\n\n/* Define to the soname of the libXext library. */\n/* #undef SONAME_LIBXEXT */\n\n/* Define to the soname of the libXfixes library. */\n/* #undef SONAME_LIBXFIXES */\n\n/* Define to the soname of the libXi library. */\n/* #undef SONAME_LIBXI */\n\n/* Define to the soname of the libXinerama library. */\n/* #undef SONAME_LIBXINERAMA */\n\n/* Define to the soname of the libXrandr library. */\n/* #undef SONAME_LIBXRANDR */\n\n/* Define to the soname of the libXrender library. */\n/* #undef SONAME_LIBXRENDER */\n\n/* Define to the soname of the libxslt library. */\n#define SONAME_LIBXSLT \"\tcygxslt-1.dll\"\n\n/* Define to the soname of the libXxf86vm library. */\n/* #undef SONAME_LIBXXF86VM */\n\n/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */\n/* #undef STAT_MACROS_BROKEN */\n\n/* Define to 1 if you have the ANSI C header files. */\n#define STDC_HEADERS 1\n\n/* Define to 1 if the X Window System is missing or not being used. */\n#define X_DISPLAY_MISSING 1\n\n/* Enable large inode numbers on Mac OS X 10.5.  */\n#ifndef _DARWIN_USE_64_BIT_INODE\n# define _DARWIN_USE_64_BIT_INODE 1\n#endif\n\n/* Number of bits in a file offset, on hosts where this is settable. */\n/* #undef _FILE_OFFSET_BITS */\n\n/* Define for large files, on AIX-style hosts. */\n/* #undef _LARGE_FILES */\n\n/* Define to a macro to output a .cfi assembly pseudo-op */\n#define __ASM_CFI(str) str\n\n/* Define to a macro to define an assembly function */\n#define __ASM_DEFINE_FUNC(name,suffix,code) asm(\".text\\n\\t.align 4\\n\\t.globl \" #name suffix \"\\n\\t.def \" #name suffix \"; .scl 2; .type 32; .endef\\n\" #name suffix \":\\n\\t.cfi_startproc\\n\\t\" code \"\\n\\t.cfi_endproc\");\n\n/* Define to a macro to generate an assembly function directive */\n#define __ASM_FUNC(name) \".def \" __ASM_NAME(name) \"; .scl 2; .type 32; .endef\"\n\n/* Define to a macro to generate an assembly function with C calling\n   convention */\n#define __ASM_GLOBAL_FUNC(name,code) __ASM_DEFINE_FUNC(name,\"\",code)\n\n/* Define to a macro to generate an assembly name from a C symbol */\n#define __ASM_NAME(name) name\n\n/* Define to a macro to generate an stdcall suffix */\n#define __ASM_STDCALL(args) \"\"\n\n/* Define to a macro to generate an assembly function with stdcall calling\n   convention */\n#define __ASM_STDCALL_FUNC(name,args,code) __ASM_DEFINE_FUNC(name,__ASM_STDCALL(args),code)\n\n/* Define to `__inline__' or `__inline' if that's what the C compiler\n   calls it, or to nothing if 'inline' is not supported under any name.  */\n#ifndef __cplusplus\n/* #undef inline */\n#endif\n\n#endif /* WINE_CROSSTEST */\n#endif /* __WINE_CONFIG_H */\n"
  },
  {
    "path": "wine/windows/config.h.in",
    "content": "/* include/config.h.in.  Generated from configure.ac by autoheader.  */\n\n#ifndef __WINE_CONFIG_H\n#define __WINE_CONFIG_H\n#ifndef WINE_CROSSTEST\n\n/* Define to a function attribute for Microsoft hotpatch assembly prefix. */\n#undef DECLSPEC_HOTPATCH\n\n/* Define to the file extension for executables. */\n#undef EXEEXT\n\n/* Define to 1 if you have the `acosh' function. */\n#undef HAVE_ACOSH\n\n/* Define to 1 if you have the `acoshf' function. */\n#undef HAVE_ACOSHF\n\n/* Define to 1 if you have the <alias.h> header file. */\n#undef HAVE_ALIAS_H\n\n/* Define to 1 if you have the <alsa/asoundlib.h> header file. */\n#undef HAVE_ALSA_ASOUNDLIB_H\n\n/* Define to 1 if you have the <AL/al.h> header file. */\n#undef HAVE_AL_AL_H\n\n/* Define to 1 if you have the <ApplicationServices/ApplicationServices.h>\n   header file. */\n#undef HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H\n\n/* Define to 1 if you have the <arpa/inet.h> header file. */\n#undef HAVE_ARPA_INET_H\n\n/* Define to 1 if you have the <arpa/nameser.h> header file. */\n#undef HAVE_ARPA_NAMESER_H\n\n/* Define to 1 if you have the `asctime_r' function. */\n#undef HAVE_ASCTIME_R\n\n/* Define to 1 if you have the `asinh' function. */\n#undef HAVE_ASINH\n\n/* Define to 1 if you have the `asinhf' function. */\n#undef HAVE_ASINHF\n\n/* Define to 1 if you have the <asm/types.h> header file. */\n#undef HAVE_ASM_TYPES_H\n\n/* Define to 1 if you have the <asm/user.h> header file. */\n#undef HAVE_ASM_USER_H\n\n/* Define to 1 if you have the `atanh' function. */\n#undef HAVE_ATANH\n\n/* Define to 1 if you have the `atanhf' function. */\n#undef HAVE_ATANHF\n\n/* Define to 1 if you have the <AudioToolbox/AudioConverter.h> header file. */\n#undef HAVE_AUDIOTOOLBOX_AUDIOCONVERTER_H\n\n/* Define to 1 if you have the <AudioUnit/AudioComponent.h> header file. */\n#undef HAVE_AUDIOUNIT_AUDIOCOMPONENT_H\n\n/* Define to 1 if you have the <AudioUnit/AudioUnit.h> header file. */\n#undef HAVE_AUDIOUNIT_AUDIOUNIT_H\n\n/* Define to 1 if you have the `AUGraphAddNode' function. */\n#undef HAVE_AUGRAPHADDNODE\n\n/* Define to 1 if you have the <capi20.h> header file. */\n#undef HAVE_CAPI20_H\n\n/* Define to 1 if you have the <Carbon/Carbon.h> header file. */\n#undef HAVE_CARBON_CARBON_H\n\n/* Define to 1 if you have the `cbrt' function. */\n#undef HAVE_CBRT\n\n/* Define to 1 if you have the `cbrtf' function. */\n#undef HAVE_CBRTF\n\n/* Define to 1 if you have the `chsize' function. */\n#undef HAVE_CHSIZE\n\n/* Define to 1 if you have the `clock_gettime' function. */\n#undef HAVE_CLOCK_GETTIME\n\n/* Define to 1 if you have the <CL/cl.h> header file. */\n#undef HAVE_CL_CL_H\n\n/* Define to 1 if you have the <CommonCrypto/CommonCryptor.h> header file. */\n#undef HAVE_COMMONCRYPTO_COMMONCRYPTOR_H\n\n/* Define to 1 if you have the <CoreAudio/CoreAudio.h> header file. */\n#undef HAVE_COREAUDIO_COREAUDIO_H\n\n/* Define to 1 if you have the <CoreServices/CoreServices.h> header file. */\n#undef HAVE_CORESERVICES_CORESERVICES_H\n\n/* Define to 1 if you have the <cups/cups.h> header file. */\n#undef HAVE_CUPS_CUPS_H\n\n/* Define to 1 if you have the <cups/ppd.h> header file. */\n#undef HAVE_CUPS_PPD_H\n\n/* Define to 1 if you have the <curses.h> header file. */\n#undef HAVE_CURSES_H\n\n/* Define if you have the daylight variable */\n#undef HAVE_DAYLIGHT\n\n/* Define to 1 if you have the <direct.h> header file. */\n#undef HAVE_DIRECT_H\n\n/* Define to 1 if you have the <dirent.h> header file. */\n#undef HAVE_DIRENT_H\n\n/* Define to 1 if you have the <DiskArbitration/DiskArbitration.h> header\n   file. */\n#undef HAVE_DISKARBITRATION_DISKARBITRATION_H\n\n/* Define to 1 if you have the `dladdr' function. */\n#undef HAVE_DLADDR\n\n/* Define to 1 if you have the <dlfcn.h> header file. */\n#undef HAVE_DLFCN_H\n\n/* Define to 1 if you have the `dlopen' function. */\n#undef HAVE_DLOPEN\n\n/* Define to 1 if you have the <EGL/egl.h> header file. */\n#undef HAVE_EGL_EGL_H\n\n/* Define to 1 if you have the <elf.h> header file. */\n#undef HAVE_ELF_H\n\n/* Define to 1 if you have the `epoll_create' function. */\n#undef HAVE_EPOLL_CREATE\n\n/* Define to 1 if you have the `erf' function. */\n#undef HAVE_ERF\n\n/* Define to 1 if you have the `erfc' function. */\n#undef HAVE_ERFC\n\n/* Define to 1 if you have the `erfcf' function. */\n#undef HAVE_ERFCF\n\n/* Define to 1 if you have the `erff' function. */\n#undef HAVE_ERFF\n\n/* Define to 1 if you have the `exp2' function. */\n#undef HAVE_EXP2\n\n/* Define to 1 if you have the `exp2f' function. */\n#undef HAVE_EXP2F\n\n/* Define to 1 if you have the `expm1' function. */\n#undef HAVE_EXPM1\n\n/* Define to 1 if you have the `expm1f' function. */\n#undef HAVE_EXPM1F\n\n/* Define to 1 if you have the `fallocate' function. */\n#undef HAVE_FALLOCATE\n\n/* Define to 1 if you have the `ffs' function. */\n#undef HAVE_FFS\n\n/* Define to 1 if you have the `finitef' function. */\n#undef HAVE_FINITEF\n\n/* Define to 1 if you have the <float.h> header file. */\n#undef HAVE_FLOAT_H\n\n/* Define to 1 if you have the `fnmatch' function. */\n#undef HAVE_FNMATCH\n\n/* Define to 1 if you have the <fnmatch.h> header file. */\n#undef HAVE_FNMATCH_H\n\n/* Define to 1 if you have the <fontconfig/fontconfig.h> header file. */\n#undef HAVE_FONTCONFIG_FONTCONFIG_H\n\n/* Define to 1 if you have the `fork' function. */\n#undef HAVE_FORK\n\n/* Define to 1 if you have the `fpclass' function. */\n#undef HAVE_FPCLASS\n\n/* Define if FreeType 2 is installed */\n#undef HAVE_FREETYPE\n\n/* Define to 1 if the system has the type `fsblkcnt_t'. */\n#undef HAVE_FSBLKCNT_T\n\n/* Define to 1 if the system has the type `fsfilcnt_t'. */\n#undef HAVE_FSFILCNT_T\n\n/* Define to 1 if you have the `fstatfs' function. */\n#undef HAVE_FSTATFS\n\n/* Define to 1 if you have the `fstatvfs' function. */\n#undef HAVE_FSTATVFS\n\n/* Define to 1 if you have the <ft2build.h> header file. */\n#undef HAVE_FT2BUILD_H\n\n/* Define to 1 if you have the `ftruncate' function. */\n#undef HAVE_FTRUNCATE\n\n/* Define to 1 if the system has the type `FT_TrueTypeEngineType'. */\n#undef HAVE_FT_TRUETYPEENGINETYPE\n\n/* Define to 1 if you have the `futimens' function. */\n#undef HAVE_FUTIMENS\n\n/* Define to 1 if you have the `futimes' function. */\n#undef HAVE_FUTIMES\n\n/* Define to 1 if you have the `futimesat' function. */\n#undef HAVE_FUTIMESAT\n\n/* Define to 1 if you have the `getaddrinfo' function. */\n#undef HAVE_GETADDRINFO\n\n/* Define to 1 if you have the `getattrlist' function. */\n#undef HAVE_GETATTRLIST\n\n/* Define to 1 if you have the `getauxval' function. */\n#undef HAVE_GETAUXVAL\n\n/* Define to 1 if you have the `getifaddrs' function. */\n#undef HAVE_GETIFADDRS\n\n/* Define to 1 if you have the `getnameinfo' function. */\n#undef HAVE_GETNAMEINFO\n\n/* Define to 1 if you have the `getnetbyname' function. */\n#undef HAVE_GETNETBYNAME\n\n/* Define to 1 if you have the <getopt.h> header file. */\n#undef HAVE_GETOPT_H\n\n/* Define to 1 if you have the `getopt_long_only' function. */\n#undef HAVE_GETOPT_LONG_ONLY\n\n/* Define to 1 if you have the `getprotobyname' function. */\n#undef HAVE_GETPROTOBYNAME\n\n/* Define to 1 if you have the `getprotobynumber' function. */\n#undef HAVE_GETPROTOBYNUMBER\n\n/* Define to 1 if you have the `getpwuid' function. */\n#undef HAVE_GETPWUID\n\n/* Define to 1 if you have the `getservbyport' function. */\n#undef HAVE_GETSERVBYPORT\n\n/* Define to 1 if you have the <gettext-po.h> header file. */\n#undef HAVE_GETTEXT_PO_H\n\n/* Define to 1 if you have the `gettimeofday' function. */\n#undef HAVE_GETTIMEOFDAY\n\n/* Define to 1 if you have the `getuid' function. */\n#undef HAVE_GETUID\n\n/* Define to 1 if you have the `gnutls_cipher_init' function. */\n#undef HAVE_GNUTLS_CIPHER_INIT\n\n/* Define if we have the libgphoto2 development environment */\n#undef HAVE_GPHOTO2\n\n/* Define if we have the libgphoto2_port development environment */\n#undef HAVE_GPHOTO2_PORT\n\n/* Define to 1 if you have the <grp.h> header file. */\n#undef HAVE_GRP_H\n\n/* Define to 1 if you have the <gsm/gsm.h> header file. */\n#undef HAVE_GSM_GSM_H\n\n/* Define to 1 if you have the <gsm.h> header file. */\n#undef HAVE_GSM_H\n\n/* Define to 1 if you have the <gssapi/gssapi_ext.h> header file. */\n#undef HAVE_GSSAPI_GSSAPI_EXT_H\n\n/* Define to 1 if you have the <gssapi/gssapi.h> header file. */\n#undef HAVE_GSSAPI_GSSAPI_H\n\n/* Define to 1 if you have the <ieeefp.h> header file. */\n#undef HAVE_IEEEFP_H\n\n/* Define to 1 if you have the <ifaddrs.h> header file. */\n#undef HAVE_IFADDRS_H\n\n/* Define to 1 if you have the `if_nameindex' function. */\n#undef HAVE_IF_NAMEINDEX\n\n/* Define to 1 if you have the `inet_addr' function. */\n#undef HAVE_INET_ADDR\n\n/* Define to 1 if you have the <inet/mib2.h> header file. */\n#undef HAVE_INET_MIB2_H\n\n/* Define to 1 if you have the `inet_network' function. */\n#undef HAVE_INET_NETWORK\n\n/* Define to 1 if you have the `inet_ntop' function. */\n#undef HAVE_INET_NTOP\n\n/* Define to 1 if you have the `inet_pton' function. */\n#undef HAVE_INET_PTON\n\n/* Define to 1 if you have the <inttypes.h> header file. */\n#undef HAVE_INTTYPES_H\n\n/* Define to 1 if you have the `IOHIDManagerCreate' function. */\n#undef HAVE_IOHIDMANAGERCREATE\n\n/* Define to 1 if you have the <IOKit/hid/IOHIDLib.h> header file. */\n#undef HAVE_IOKIT_HID_IOHIDLIB_H\n\n/* Define to 1 if you have the <IOKit/IOKitLib.h> header file. */\n#undef HAVE_IOKIT_IOKITLIB_H\n\n/* Define to 1 if you have the <io.h> header file. */\n#undef HAVE_IO_H\n\n/* Define to 1 if you have the `isfinite' function. */\n#undef HAVE_ISFINITE\n\n/* Define to 1 if you have the `isinf' function. */\n#undef HAVE_ISINF\n\n/* Define to 1 if you have the `isnan' function. */\n#undef HAVE_ISNAN\n\n/* Define to 1 if you have the `isnanf' function. */\n#undef HAVE_ISNANF\n\n/* Define to 1 if you have the `j0' function. */\n#undef HAVE_J0\n\n/* Define to 1 if you have the `j1' function. */\n#undef HAVE_J1\n\n/* Define to 1 if you have the `jn' function. */\n#undef HAVE_JN\n\n/* Define to 1 if you have the <jpeglib.h> header file. */\n#undef HAVE_JPEGLIB_H\n\n/* Define to 1 if you have the `kqueue' function. */\n#undef HAVE_KQUEUE\n\n/* Define to 1 if you have the <krb5/krb5.h> header file. */\n#undef HAVE_KRB5_KRB5_H\n\n/* Define to 1 if you have the <kstat.h> header file. */\n#undef HAVE_KSTAT_H\n\n/* Define to 1 if you have the <lber.h> header file. */\n#undef HAVE_LBER_H\n\n/* Define if you have the LittleCMS development environment */\n#undef HAVE_LCMS2\n\n/* Define to 1 if you have the <lcms2.h> header file. */\n#undef HAVE_LCMS2_H\n\n/* Define if you have the OpenLDAP development environment */\n#undef HAVE_LDAP\n\n/* Define to 1 if you have the `ldap_count_references' function. */\n#undef HAVE_LDAP_COUNT_REFERENCES\n\n/* Define to 1 if you have the `ldap_first_reference' function. */\n#undef HAVE_LDAP_FIRST_REFERENCE\n\n/* Define to 1 if you have the <ldap.h> header file. */\n#undef HAVE_LDAP_H\n\n/* Define to 1 if you have the `ldap_next_reference' function. */\n#undef HAVE_LDAP_NEXT_REFERENCE\n\n/* Define to 1 if you have the `ldap_parse_reference' function. */\n#undef HAVE_LDAP_PARSE_REFERENCE\n\n/* Define to 1 if you have the `ldap_parse_sortresponse_control' function. */\n#undef HAVE_LDAP_PARSE_SORTRESPONSE_CONTROL\n\n/* Define to 1 if you have the `ldap_parse_sort_control' function. */\n#undef HAVE_LDAP_PARSE_SORT_CONTROL\n\n/* Define to 1 if you have the `ldap_parse_vlvresponse_control' function. */\n#undef HAVE_LDAP_PARSE_VLVRESPONSE_CONTROL\n\n/* Define to 1 if you have the `ldap_parse_vlv_control' function. */\n#undef HAVE_LDAP_PARSE_VLV_CONTROL\n\n/* Define to 1 if you have the `lgamma' function. */\n#undef HAVE_LGAMMA\n\n/* Define to 1 if you have the `lgammaf' function. */\n#undef HAVE_LGAMMAF\n\n/* Define to 1 if you have the `gettextpo' library (-lgettextpo). */\n#undef HAVE_LIBGETTEXTPO\n\n/* Define to 1 if you have the `i386' library (-li386). */\n#undef HAVE_LIBI386\n\n/* Define to 1 if you have the `kstat' library (-lkstat). */\n#undef HAVE_LIBKSTAT\n\n/* Define to 1 if you have the `ossaudio' library (-lossaudio). */\n#undef HAVE_LIBOSSAUDIO\n\n/* Define to 1 if you have the `procstat' library (-lprocstat). */\n#undef HAVE_LIBPROCSTAT\n\n/* Define to 1 if you have the <libprocstat.h> header file. */\n#undef HAVE_LIBPROCSTAT_H\n\n/* Define to 1 if you have the <libproc.h> header file. */\n#undef HAVE_LIBPROC_H\n\n/* Define to 1 if you have the <libudev.h> header file. */\n#undef HAVE_LIBUDEV_H\n\n/* Define to 1 if you have the <libunwind.h> header file. */\n#undef HAVE_LIBUNWIND_H\n\n/* Define to 1 if you have the <libv4l1.h> header file. */\n#undef HAVE_LIBV4L1_H\n\n/* Define if you have the libxml2 library */\n#undef HAVE_LIBXML2\n\n/* Define to 1 if you have the <libxml/parser.h> header file. */\n#undef HAVE_LIBXML_PARSER_H\n\n/* Define to 1 if you have the <libxml/SAX2.h> header file. */\n#undef HAVE_LIBXML_SAX2_H\n\n/* Define to 1 if you have the <libxml/xmlsave.h> header file. */\n#undef HAVE_LIBXML_XMLSAVE_H\n\n/* Define if you have the X Shape extension */\n#undef HAVE_LIBXSHAPE\n\n/* Define to 1 if you have the <libxslt/pattern.h> header file. */\n#undef HAVE_LIBXSLT_PATTERN_H\n\n/* Define to 1 if you have the <libxslt/transform.h> header file. */\n#undef HAVE_LIBXSLT_TRANSFORM_H\n\n/* Define if you have the X Shm extension */\n#undef HAVE_LIBXXSHM\n\n/* Define to 1 if you have the <link.h> header file. */\n#undef HAVE_LINK_H\n\n/* Define if <linux/joystick.h> defines the Linux 2.2 joystick API */\n#undef HAVE_LINUX_22_JOYSTICK_API\n\n/* Define to 1 if you have the <linux/capi.h> header file. */\n#undef HAVE_LINUX_CAPI_H\n\n/* Define to 1 if you have the <linux/cdrom.h> header file. */\n#undef HAVE_LINUX_CDROM_H\n\n/* Define to 1 if you have the <linux/compiler.h> header file. */\n#undef HAVE_LINUX_COMPILER_H\n\n/* Define to 1 if you have the <linux/filter.h> header file. */\n#undef HAVE_LINUX_FILTER_H\n\n/* Define if Linux-style gethostbyname_r and gethostbyaddr_r are available */\n#undef HAVE_LINUX_GETHOSTBYNAME_R_6\n\n/* Define to 1 if you have the <linux/hdreg.h> header file. */\n#undef HAVE_LINUX_HDREG_H\n\n/* Define to 1 if you have the <linux/hidraw.h> header file. */\n#undef HAVE_LINUX_HIDRAW_H\n\n/* Define to 1 if you have the <linux/input.h> header file. */\n#undef HAVE_LINUX_INPUT_H\n\n/* Define to 1 if you have the <linux/ioctl.h> header file. */\n#undef HAVE_LINUX_IOCTL_H\n\n/* Define to 1 if you have the <linux/ipx.h> header file. */\n#undef HAVE_LINUX_IPX_H\n\n/* Define to 1 if you have the <linux/irda.h> header file. */\n#undef HAVE_LINUX_IRDA_H\n\n/* Define to 1 if you have the <linux/joystick.h> header file. */\n#undef HAVE_LINUX_JOYSTICK_H\n\n/* Define to 1 if you have the <linux/major.h> header file. */\n#undef HAVE_LINUX_MAJOR_H\n\n/* Define to 1 if you have the <linux/param.h> header file. */\n#undef HAVE_LINUX_PARAM_H\n\n/* Define to 1 if you have the <linux/rtnetlink.h> header file. */\n#undef HAVE_LINUX_RTNETLINK_H\n\n/* Define to 1 if you have the <linux/serial.h> header file. */\n#undef HAVE_LINUX_SERIAL_H\n\n/* Define to 1 if you have the <linux/types.h> header file. */\n#undef HAVE_LINUX_TYPES_H\n\n/* Define to 1 if you have the <linux/ucdrom.h> header file. */\n#undef HAVE_LINUX_UCDROM_H\n\n/* Define to 1 if you have the <linux/videodev2.h> header file. */\n#undef HAVE_LINUX_VIDEODEV2_H\n\n/* Define to 1 if you have the <linux/videodev.h> header file. */\n#undef HAVE_LINUX_VIDEODEV_H\n\n/* Define to 1 if you have the `llrint' function. */\n#undef HAVE_LLRINT\n\n/* Define to 1 if you have the `llrintf' function. */\n#undef HAVE_LLRINTF\n\n/* Define to 1 if you have the `llround' function. */\n#undef HAVE_LLROUND\n\n/* Define to 1 if you have the `llroundf' function. */\n#undef HAVE_LLROUNDF\n\n/* Define to 1 if you have the `log1p' function. */\n#undef HAVE_LOG1P\n\n/* Define to 1 if you have the `log1pf' function. */\n#undef HAVE_LOG1PF\n\n/* Define to 1 if you have the `log2' function. */\n#undef HAVE_LOG2\n\n/* Define to 1 if you have the `log2f' function. */\n#undef HAVE_LOG2F\n\n/* Define to 1 if the system has the type `long long'. */\n#undef HAVE_LONG_LONG\n\n/* Define to 1 if you have the `lrint' function. */\n#undef HAVE_LRINT\n\n/* Define to 1 if you have the `lrintf' function. */\n#undef HAVE_LRINTF\n\n/* Define to 1 if you have the `lround' function. */\n#undef HAVE_LROUND\n\n/* Define to 1 if you have the `lroundf' function. */\n#undef HAVE_LROUNDF\n\n/* Define to 1 if you have the `lstat' function. */\n#undef HAVE_LSTAT\n\n/* Define to 1 if you have the <lwp.h> header file. */\n#undef HAVE_LWP_H\n\n/* Define to 1 if you have the <machine/cpu.h> header file. */\n#undef HAVE_MACHINE_CPU_H\n\n/* Define to 1 if you have the <machine/limits.h> header file. */\n#undef HAVE_MACHINE_LIMITS_H\n\n/* Define to 1 if you have the <machine/sysarch.h> header file. */\n#undef HAVE_MACHINE_SYSARCH_H\n\n/* Define to 1 if you have the <mach/machine.h> header file. */\n#undef HAVE_MACH_MACHINE_H\n\n/* Define to 1 if you have the <mach/mach.h> header file. */\n#undef HAVE_MACH_MACH_H\n\n/* Define to 1 if you have the <mach-o/dyld_images.h> header file. */\n#undef HAVE_MACH_O_DYLD_IMAGES_H\n\n/* Define to 1 if you have the <mach-o/loader.h> header file. */\n#undef HAVE_MACH_O_LOADER_H\n\n/* Define to 1 if you have the <mach-o/nlist.h> header file. */\n#undef HAVE_MACH_O_NLIST_H\n\n/* Define to 1 if you have the `memmove' function. */\n#undef HAVE_MEMMOVE\n\n/* Define to 1 if you have the <memory.h> header file. */\n#undef HAVE_MEMORY_H\n\n/* Define to 1 if you have the <Metal/Metal.h> header file. */\n#undef HAVE_METAL_METAL_H\n\n/* Define to 1 if you have the `mmap' function. */\n#undef HAVE_MMAP\n\n/* Define to 1 if you have the <mntent.h> header file. */\n#undef HAVE_MNTENT_H\n\n/* Define to 1 if the system has the type `mode_t'. */\n#undef HAVE_MODE_T\n\n/* Define to 1 if you have the `mousemask' function. */\n#undef HAVE_MOUSEMASK\n\n/* Define to 1 if you have the <mpg123.h> header file. */\n#undef HAVE_MPG123_H\n\n/* Define to 1 if you have the <ncurses.h> header file. */\n#undef HAVE_NCURSES_H\n\n/* Define to 1 if you have the `nearbyint' function. */\n#undef HAVE_NEARBYINT\n\n/* Define to 1 if you have the `nearbyintf' function. */\n#undef HAVE_NEARBYINTF\n\n/* Define to 1 if you have the <netdb.h> header file. */\n#undef HAVE_NETDB_H\n\n/* Define to 1 if you have the <netinet/icmp_var.h> header file. */\n#undef HAVE_NETINET_ICMP_VAR_H\n\n/* Define to 1 if you have the <netinet/if_ether.h> header file. */\n#undef HAVE_NETINET_IF_ETHER_H\n\n/* Define to 1 if you have the <netinet/if_inarp.h> header file. */\n#undef HAVE_NETINET_IF_INARP_H\n\n/* Define to 1 if you have the <netinet/in.h> header file. */\n#undef HAVE_NETINET_IN_H\n\n/* Define to 1 if you have the <netinet/in_pcb.h> header file. */\n#undef HAVE_NETINET_IN_PCB_H\n\n/* Define to 1 if you have the <netinet/in_systm.h> header file. */\n#undef HAVE_NETINET_IN_SYSTM_H\n\n/* Define to 1 if you have the <netinet/ip.h> header file. */\n#undef HAVE_NETINET_IP_H\n\n/* Define to 1 if you have the <netinet/ip_icmp.h> header file. */\n#undef HAVE_NETINET_IP_ICMP_H\n\n/* Define to 1 if you have the <netinet/ip_var.h> header file. */\n#undef HAVE_NETINET_IP_VAR_H\n\n/* Define to 1 if you have the <netinet/tcp_fsm.h> header file. */\n#undef HAVE_NETINET_TCP_FSM_H\n\n/* Define to 1 if you have the <netinet/tcp.h> header file. */\n#undef HAVE_NETINET_TCP_H\n\n/* Define to 1 if you have the <netinet/tcp_timer.h> header file. */\n#undef HAVE_NETINET_TCP_TIMER_H\n\n/* Define to 1 if you have the <netinet/tcp_var.h> header file. */\n#undef HAVE_NETINET_TCP_VAR_H\n\n/* Define to 1 if you have the <netinet/udp.h> header file. */\n#undef HAVE_NETINET_UDP_H\n\n/* Define to 1 if you have the <netinet/udp_var.h> header file. */\n#undef HAVE_NETINET_UDP_VAR_H\n\n/* Define to 1 if you have the <netipx/ipx.h> header file. */\n#undef HAVE_NETIPX_IPX_H\n\n/* Define to 1 if you have the <net/if_arp.h> header file. */\n#undef HAVE_NET_IF_ARP_H\n\n/* Define to 1 if you have the <net/if_dl.h> header file. */\n#undef HAVE_NET_IF_DL_H\n\n/* Define to 1 if you have the <net/if.h> header file. */\n#undef HAVE_NET_IF_H\n\n/* Define to 1 if you have the <net/if_types.h> header file. */\n#undef HAVE_NET_IF_TYPES_H\n\n/* Define to 1 if you have the <net/route.h> header file. */\n#undef HAVE_NET_ROUTE_H\n\n/* Define to 1 if `_msg_ptr' is a member of `ns_msg'. */\n#undef HAVE_NS_MSG__MSG_PTR\n\n/* Define to 1 if the system has the type `off_t'. */\n#undef HAVE_OFF_T\n\n/* Define if mkdir takes only one argument */\n#undef HAVE_ONE_ARG_MKDIR\n\n/* Define to 1 if OpenAL is available */\n#undef HAVE_OPENAL\n\n/* Define to 1 if you have the <OpenAL/al.h> header file. */\n#undef HAVE_OPENAL_AL_H\n\n/* Define to 1 if you have the <OpenCL/opencl.h> header file. */\n#undef HAVE_OPENCL_OPENCL_H\n\n/* Define to 1 if `numaudioengines' is a member of `oss_sysinfo'. */\n#undef HAVE_OSS_SYSINFO_NUMAUDIOENGINES\n\n/* Define to 1 if you have the <pcap/pcap.h> header file. */\n#undef HAVE_PCAP_PCAP_H\n\n/* Define to 1 if you have the `pclose' function. */\n#undef HAVE_PCLOSE\n\n/* Define to 1 if the system has the type `pid_t'. */\n#undef HAVE_PID_T\n\n/* Define to 1 if you have the `pipe2' function. */\n#undef HAVE_PIPE2\n\n/* Define to 1 if you have the <png.h> header file. */\n#undef HAVE_PNG_H\n\n/* Define to 1 if you have the `poll' function. */\n#undef HAVE_POLL\n\n/* Define to 1 if you have the <poll.h> header file. */\n#undef HAVE_POLL_H\n\n/* Define to 1 if you have the `popen' function. */\n#undef HAVE_POPEN\n\n/* Define to 1 if you have the `port_create' function. */\n#undef HAVE_PORT_CREATE\n\n/* Define to 1 if you have the <port.h> header file. */\n#undef HAVE_PORT_H\n\n/* Define to 1 if you have the `powl' function. */\n#undef HAVE_POWL\n\n/* Define if we can use ppdev.h for parallel port access */\n#undef HAVE_PPDEV\n\n/* Define to 1 if you have the `prctl' function. */\n#undef HAVE_PRCTL\n\n/* Define to 1 if you have the `pread' function. */\n#undef HAVE_PREAD\n\n/* Define to 1 if you have the <process.h> header file. */\n#undef HAVE_PROCESS_H\n\n/* Define to 1 if you have the `proc_pidinfo' function. */\n#undef HAVE_PROC_PIDINFO\n\n/* Define to 1 if you have the `pthread_attr_get_np' function. */\n#undef HAVE_PTHREAD_ATTR_GET_NP\n\n/* Define to 1 if you have the `pthread_getattr_np' function. */\n#undef HAVE_PTHREAD_GETATTR_NP\n\n/* Define to 1 if you have the `pthread_getthreadid_np' function. */\n#undef HAVE_PTHREAD_GETTHREADID_NP\n\n/* Define to 1 if you have the `pthread_get_stackaddr_np' function. */\n#undef HAVE_PTHREAD_GET_STACKADDR_NP\n\n/* Define to 1 if you have the `pthread_get_stacksize_np' function. */\n#undef HAVE_PTHREAD_GET_STACKSIZE_NP\n\n/* Define to 1 if you have the <pthread.h> header file. */\n#undef HAVE_PTHREAD_H\n\n/* Define to 1 if you have the <pthread_np.h> header file. */\n#undef HAVE_PTHREAD_NP_H\n\n/* Define to 1 if you have the <pulse/pulseaudio.h> header file. */\n#undef HAVE_PULSE_PULSEAUDIO_H\n\n/* Define to 1 if you have the <pwd.h> header file. */\n#undef HAVE_PWD_H\n\n/* Define to 1 if you have the `pwrite' function. */\n#undef HAVE_PWRITE\n\n/* Define to 1 if you have the <QuickTime/ImageCompression.h> header file. */\n#undef HAVE_QUICKTIME_IMAGECOMPRESSION_H\n\n/* Define to 1 if you have the `readdir' function. */\n#undef HAVE_READDIR\n\n/* Define to 1 if you have the `readlink' function. */\n#undef HAVE_READLINK\n\n/* Define to 1 if you have the `remainder' function. */\n#undef HAVE_REMAINDER\n\n/* Define to 1 if you have the `remainderf' function. */\n#undef HAVE_REMAINDERF\n\n/* Define to 1 if the system has the type `request_sense'. */\n#undef HAVE_REQUEST_SENSE\n\n/* Define if you have the resolver library and header */\n#undef HAVE_RESOLV\n\n/* Define to 1 if you have the <resolv.h> header file. */\n#undef HAVE_RESOLV_H\n\n/* Define to 1 if you have the `rint' function. */\n#undef HAVE_RINT\n\n/* Define to 1 if you have the `rintf' function. */\n#undef HAVE_RINTF\n\n/* Define to 1 if you have the `round' function. */\n#undef HAVE_ROUND\n\n/* Define to 1 if you have the `roundf' function. */\n#undef HAVE_ROUNDF\n\n/* Define to 1 if you have the <sched.h> header file. */\n#undef HAVE_SCHED_H\n\n/* Define to 1 if you have the `sched_setaffinity' function. */\n#undef HAVE_SCHED_SETAFFINITY\n\n/* Define to 1 if you have the `sched_yield' function. */\n#undef HAVE_SCHED_YIELD\n\n/* Define to 1 if `cmd' is a member of `scsireq_t'. */\n#undef HAVE_SCSIREQ_T_CMD\n\n/* Define to 1 if you have the <scsi/scsi.h> header file. */\n#undef HAVE_SCSI_SCSI_H\n\n/* Define to 1 if you have the <scsi/scsi_ioctl.h> header file. */\n#undef HAVE_SCSI_SCSI_IOCTL_H\n\n/* Define to 1 if you have the <scsi/sg.h> header file. */\n#undef HAVE_SCSI_SG_H\n\n/* Define to 1 if you have the <SDL2/SDL.h> header file. */\n#undef HAVE_SDL2_SDL_H\n\n/* Define to 1 if you have the <Security/Security.h> header file. */\n#undef HAVE_SECURITY_SECURITY_H\n\n/* Define to 1 if you have the `select' function. */\n#undef HAVE_SELECT\n\n/* Define to 1 if you have the `sendmsg' function. */\n#undef HAVE_SENDMSG\n\n/* Define to 1 if you have the `setproctitle' function. */\n#undef HAVE_SETPROCTITLE\n\n/* Define to 1 if you have the `setprogname' function. */\n#undef HAVE_SETPROGNAME\n\n/* Define to 1 if you have the `setrlimit' function. */\n#undef HAVE_SETRLIMIT\n\n/* Define to 1 if you have the `settimeofday' function. */\n#undef HAVE_SETTIMEOFDAY\n\n/* Define to 1 if `interface_id' is a member of `sg_io_hdr_t'. */\n#undef HAVE_SG_IO_HDR_T_INTERFACE_ID\n\n/* Define if sigaddset is supported */\n#undef HAVE_SIGADDSET\n\n/* Define to 1 if you have the `sigaltstack' function. */\n#undef HAVE_SIGALTSTACK\n\n/* Define to 1 if `si_fd' is a member of `siginfo_t'. */\n#undef HAVE_SIGINFO_T_SI_FD\n\n/* Define to 1 if you have the `sigprocmask' function. */\n#undef HAVE_SIGPROCMASK\n\n/* Define to 1 if the system has the type `sigset_t'. */\n#undef HAVE_SIGSET_T\n\n/* Define to 1 if the system has the type `size_t'. */\n#undef HAVE_SIZE_T\n\n/* Define to 1 if you have the `snprintf' function. */\n#undef HAVE_SNPRINTF\n\n/* Define to 1 if you have the `socketpair' function. */\n#undef HAVE_SOCKETPAIR\n\n/* Define to 1 if the system has the type `ssize_t'. */\n#undef HAVE_SSIZE_T\n\n/* Define to 1 if you have the `SSLCopyPeerCertificates' function. */\n#undef HAVE_SSLCOPYPEERCERTIFICATES\n\n/* Define to 1 if you have the `statfs' function. */\n#undef HAVE_STATFS\n\n/* Define to 1 if you have the `statvfs' function. */\n#undef HAVE_STATVFS\n\n/* Define to 1 if you have the <stdbool.h> header file. */\n#undef HAVE_STDBOOL_H\n\n/* Define to 1 if you have the <stdint.h> header file. */\n#undef HAVE_STDINT_H\n\n/* Define to 1 if you have the <stdlib.h> header file. */\n#undef HAVE_STDLIB_H\n\n/* Define to 1 if you have the `strcasecmp' function. */\n#undef HAVE_STRCASECMP\n\n/* Define to 1 if you have the `strdup' function. */\n#undef HAVE_STRDUP\n\n/* Define to 1 if you have the `strerror' function. */\n#undef HAVE_STRERROR\n\n/* Define to 1 if you have the <strings.h> header file. */\n#undef HAVE_STRINGS_H\n\n/* Define to 1 if you have the <string.h> header file. */\n#undef HAVE_STRING_H\n\n/* Define to 1 if you have the `strncasecmp' function. */\n#undef HAVE_STRNCASECMP\n\n/* Define to 1 if you have the `strnlen' function. */\n#undef HAVE_STRNLEN\n\n/* Define to 1 if you have the <stropts.h> header file. */\n#undef HAVE_STROPTS_H\n\n/* Define to 1 if you have the `strtold' function. */\n#undef HAVE_STRTOLD\n\n/* Define to 1 if you have the `strtoll' function. */\n#undef HAVE_STRTOLL\n\n/* Define to 1 if you have the `strtoull' function. */\n#undef HAVE_STRTOULL\n\n/* Define to 1 if `d_reclen' is a member of `struct dirent'. */\n#undef HAVE_STRUCT_DIRENT_D_RECLEN\n\n/* Define to 1 if `direction' is a member of `struct ff_effect'. */\n#undef HAVE_STRUCT_FF_EFFECT_DIRECTION\n\n/* Define to 1 if `icps_inhist' is a member of `struct icmpstat'. */\n#undef HAVE_STRUCT_ICMPSTAT_ICPS_INHIST\n\n/* Define to 1 if `icps_outhist' is a member of `struct icmpstat'. */\n#undef HAVE_STRUCT_ICMPSTAT_ICPS_OUTHIST\n\n/* Define to 1 if `ifr_hwaddr' is a member of `struct ifreq'. */\n#undef HAVE_STRUCT_IFREQ_IFR_HWADDR\n\n/* Define to 1 if `ips_total' is a member of `struct ipstat'. */\n#undef HAVE_STRUCT_IPSTAT_IPS_TOTAL\n\n/* Define to 1 if `ips_total' is a member of `struct ip_stats'. */\n#undef HAVE_STRUCT_IP_STATS_IPS_TOTAL\n\n/* Define to 1 if the system has the type `struct link_map'. */\n#undef HAVE_STRUCT_LINK_MAP\n\n/* Define to 1 if `msg_accrights' is a member of `struct msghdr'. */\n#undef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS\n\n/* Define to 1 if `mt_blkno' is a member of `struct mtget'. */\n#undef HAVE_STRUCT_MTGET_MT_BLKNO\n\n/* Define to 1 if `mt_blksiz' is a member of `struct mtget'. */\n#undef HAVE_STRUCT_MTGET_MT_BLKSIZ\n\n/* Define to 1 if `mt_gstat' is a member of `struct mtget'. */\n#undef HAVE_STRUCT_MTGET_MT_GSTAT\n\n/* Define to 1 if `name' is a member of `struct option'. */\n#undef HAVE_STRUCT_OPTION_NAME\n\n/* Define to 1 if the system has the type `struct r_debug'. */\n#undef HAVE_STRUCT_R_DEBUG\n\n/* Define to 1 if `sin6_scope_id' is a member of `struct sockaddr_in6'. */\n#undef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID\n\n/* Define to 1 if `sa_len' is a member of `struct sockaddr'. */\n#undef HAVE_STRUCT_SOCKADDR_SA_LEN\n\n/* Define to 1 if `sun_len' is a member of `struct sockaddr_un'. */\n#undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN\n\n/* Define to 1 if `f_bavail' is a member of `struct statfs'. */\n#undef HAVE_STRUCT_STATFS_F_BAVAIL\n\n/* Define to 1 if `f_bfree' is a member of `struct statfs'. */\n#undef HAVE_STRUCT_STATFS_F_BFREE\n\n/* Define to 1 if `f_favail' is a member of `struct statfs'. */\n#undef HAVE_STRUCT_STATFS_F_FAVAIL\n\n/* Define to 1 if `f_ffree' is a member of `struct statfs'. */\n#undef HAVE_STRUCT_STATFS_F_FFREE\n\n/* Define to 1 if `f_frsize' is a member of `struct statfs'. */\n#undef HAVE_STRUCT_STATFS_F_FRSIZE\n\n/* Define to 1 if `f_namelen' is a member of `struct statfs'. */\n#undef HAVE_STRUCT_STATFS_F_NAMELEN\n\n/* Define to 1 if `f_blocks' is a member of `struct statvfs'. */\n#undef HAVE_STRUCT_STATVFS_F_BLOCKS\n\n/* Define to 1 if `st_atim' is a member of `struct stat'. */\n#undef HAVE_STRUCT_STAT_ST_ATIM\n\n/* Define to 1 if `st_atimespec' is a member of `struct stat'. */\n#undef HAVE_STRUCT_STAT_ST_ATIMESPEC\n\n/* Define to 1 if `st_birthtim' is a member of `struct stat'. */\n#undef HAVE_STRUCT_STAT_ST_BIRTHTIM\n\n/* Define to 1 if `st_birthtime' is a member of `struct stat'. */\n#undef HAVE_STRUCT_STAT_ST_BIRTHTIME\n\n/* Define to 1 if `st_birthtimespec' is a member of `struct stat'. */\n#undef HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC\n\n/* Define to 1 if `st_blocks' is a member of `struct stat'. */\n#undef HAVE_STRUCT_STAT_ST_BLOCKS\n\n/* Define to 1 if `st_ctim' is a member of `struct stat'. */\n#undef HAVE_STRUCT_STAT_ST_CTIM\n\n/* Define to 1 if `st_ctimespec' is a member of `struct stat'. */\n#undef HAVE_STRUCT_STAT_ST_CTIMESPEC\n\n/* Define to 1 if `st_mtim' is a member of `struct stat'. */\n#undef HAVE_STRUCT_STAT_ST_MTIM\n\n/* Define to 1 if `st_mtimespec' is a member of `struct stat'. */\n#undef HAVE_STRUCT_STAT_ST_MTIMESPEC\n\n/* Define to 1 if `__st_birthtim' is a member of `struct stat'. */\n#undef HAVE_STRUCT_STAT___ST_BIRTHTIM\n\n/* Define to 1 if `__st_birthtime' is a member of `struct stat'. */\n#undef HAVE_STRUCT_STAT___ST_BIRTHTIME\n\n/* Define to 1 if `tcps_connattempt' is a member of `struct tcpstat'. */\n#undef HAVE_STRUCT_TCPSTAT_TCPS_CONNATTEMPT\n\n/* Define to 1 if `tcps_connattempt' is a member of `struct tcp_stats'. */\n#undef HAVE_STRUCT_TCP_STATS_TCPS_CONNATTEMPT\n\n/* Define to 1 if `udps_ipackets' is a member of `struct udpstat'. */\n#undef HAVE_STRUCT_UDPSTAT_UDPS_IPACKETS\n\n/* Define to 1 if the system has the type `struct xinpgen'. */\n#undef HAVE_STRUCT_XINPGEN\n\n/* Define to 1 if the system has the type `struct __res_state'. */\n#undef HAVE_STRUCT___RES_STATE\n\n/* Define to 1 if `_u._ext.nscount6' is a member of `struct __res_state'. */\n#undef HAVE_STRUCT___RES_STATE__U__EXT_NSCOUNT6\n\n/* Define to 1 if you have the `symlink' function. */\n#undef HAVE_SYMLINK\n\n/* Define to 1 if you have the <syscall.h> header file. */\n#undef HAVE_SYSCALL_H\n\n/* Define to 1 if you have the `sysinfo' function. */\n#undef HAVE_SYSINFO\n\n/* Define to 1 if you have the <sys/asoundlib.h> header file. */\n#undef HAVE_SYS_ASOUNDLIB_H\n\n/* Define to 1 if you have the <sys/attr.h> header file. */\n#undef HAVE_SYS_ATTR_H\n\n/* Define to 1 if you have the <sys/auxv.h> header file. */\n#undef HAVE_SYS_AUXV_H\n\n/* Define to 1 if you have the <sys/cdio.h> header file. */\n#undef HAVE_SYS_CDIO_H\n\n/* Define to 1 if you have the <sys/elf32.h> header file. */\n#undef HAVE_SYS_ELF32_H\n\n/* Define to 1 if you have the <sys/epoll.h> header file. */\n#undef HAVE_SYS_EPOLL_H\n\n/* Define to 1 if you have the <sys/event.h> header file. */\n#undef HAVE_SYS_EVENT_H\n\n/* Define to 1 if you have the <sys/exec_elf.h> header file. */\n#undef HAVE_SYS_EXEC_ELF_H\n\n/* Define to 1 if you have the <sys/filio.h> header file. */\n#undef HAVE_SYS_FILIO_H\n\n/* Define to 1 if you have the <sys/inotify.h> header file. */\n#undef HAVE_SYS_INOTIFY_H\n\n/* Define to 1 if you have the <sys/ioctl.h> header file. */\n#undef HAVE_SYS_IOCTL_H\n\n/* Define to 1 if you have the <sys/ipc.h> header file. */\n#undef HAVE_SYS_IPC_H\n\n/* Define to 1 if you have the <sys/limits.h> header file. */\n#undef HAVE_SYS_LIMITS_H\n\n/* Define to 1 if you have the <sys/link.h> header file. */\n#undef HAVE_SYS_LINK_H\n\n/* Define to 1 if you have the <sys/mman.h> header file. */\n#undef HAVE_SYS_MMAN_H\n\n/* Define to 1 if you have the <sys/modem.h> header file. */\n#undef HAVE_SYS_MODEM_H\n\n/* Define to 1 if you have the <sys/mount.h> header file. */\n#undef HAVE_SYS_MOUNT_H\n\n/* Define to 1 if you have the <sys/msg.h> header file. */\n#undef HAVE_SYS_MSG_H\n\n/* Define to 1 if you have the <sys/mtio.h> header file. */\n#undef HAVE_SYS_MTIO_H\n\n/* Define to 1 if you have the <sys/param.h> header file. */\n#undef HAVE_SYS_PARAM_H\n\n/* Define to 1 if you have the <sys/poll.h> header file. */\n#undef HAVE_SYS_POLL_H\n\n/* Define to 1 if you have the <sys/prctl.h> header file. */\n#undef HAVE_SYS_PRCTL_H\n\n/* Define to 1 if you have the <sys/protosw.h> header file. */\n#undef HAVE_SYS_PROTOSW_H\n\n/* Define to 1 if you have the <sys/ptrace.h> header file. */\n#undef HAVE_SYS_PTRACE_H\n\n/* Define to 1 if you have the <sys/queue.h> header file. */\n#undef HAVE_SYS_QUEUE_H\n\n/* Define to 1 if you have the <sys/resource.h> header file. */\n#undef HAVE_SYS_RESOURCE_H\n\n/* Define to 1 if you have the <sys/scsiio.h> header file. */\n#undef HAVE_SYS_SCSIIO_H\n\n/* Define to 1 if you have the <sys/shm.h> header file. */\n#undef HAVE_SYS_SHM_H\n\n/* Define to 1 if you have the <sys/signal.h> header file. */\n#undef HAVE_SYS_SIGNAL_H\n\n/* Define to 1 if you have the <sys/socketvar.h> header file. */\n#undef HAVE_SYS_SOCKETVAR_H\n\n/* Define to 1 if you have the <sys/socket.h> header file. */\n#undef HAVE_SYS_SOCKET_H\n\n/* Define to 1 if you have the <sys/sockio.h> header file. */\n#undef HAVE_SYS_SOCKIO_H\n\n/* Define to 1 if you have the <sys/statfs.h> header file. */\n#undef HAVE_SYS_STATFS_H\n\n/* Define to 1 if you have the <sys/statvfs.h> header file. */\n#undef HAVE_SYS_STATVFS_H\n\n/* Define to 1 if you have the <sys/stat.h> header file. */\n#undef HAVE_SYS_STAT_H\n\n/* Define to 1 if you have the <sys/strtio.h> header file. */\n#undef HAVE_SYS_STRTIO_H\n\n/* Define to 1 if you have the <sys/syscall.h> header file. */\n#undef HAVE_SYS_SYSCALL_H\n\n/* Define to 1 if you have the <sys/sysctl.h> header file. */\n#undef HAVE_SYS_SYSCTL_H\n\n/* Define to 1 if you have the <sys/sysinfo.h> header file. */\n#undef HAVE_SYS_SYSINFO_H\n\n/* Define to 1 if you have the <sys/thr.h> header file. */\n#undef HAVE_SYS_THR_H\n\n/* Define to 1 if you have the <sys/tihdr.h> header file. */\n#undef HAVE_SYS_TIHDR_H\n\n/* Define to 1 if you have the <sys/timeout.h> header file. */\n#undef HAVE_SYS_TIMEOUT_H\n\n/* Define to 1 if you have the <sys/times.h> header file. */\n#undef HAVE_SYS_TIMES_H\n\n/* Define to 1 if you have the <sys/time.h> header file. */\n#undef HAVE_SYS_TIME_H\n\n/* Define to 1 if you have the <sys/types.h> header file. */\n#undef HAVE_SYS_TYPES_H\n\n/* Define to 1 if you have the <sys/ucontext.h> header file. */\n#undef HAVE_SYS_UCONTEXT_H\n\n/* Define to 1 if you have the <sys/uio.h> header file. */\n#undef HAVE_SYS_UIO_H\n\n/* Define to 1 if you have the <sys/un.h> header file. */\n#undef HAVE_SYS_UN_H\n\n/* Define to 1 if you have the <sys/user.h> header file. */\n#undef HAVE_SYS_USER_H\n\n/* Define to 1 if you have the <sys/utsname.h> header file. */\n#undef HAVE_SYS_UTSNAME_H\n\n/* Define to 1 if you have the <sys/vfs.h> header file. */\n#undef HAVE_SYS_VFS_H\n\n/* Define to 1 if you have the <sys/vm86.h> header file. */\n#undef HAVE_SYS_VM86_H\n\n/* Define to 1 if you have the <sys/vnode.h> header file. */\n#undef HAVE_SYS_VNODE_H\n\n/* Define to 1 if you have the <sys/wait.h> header file. */\n#undef HAVE_SYS_WAIT_H\n\n/* Define to 1 if you have the `tcdrain' function. */\n#undef HAVE_TCDRAIN\n\n/* Define to 1 if you have the <termios.h> header file. */\n#undef HAVE_TERMIOS_H\n\n/* Define to 1 if you have the `thr_kill2' function. */\n#undef HAVE_THR_KILL2\n\n/* Define to 1 if you have the <tiffio.h> header file. */\n#undef HAVE_TIFFIO_H\n\n/* Define to 1 if you have the `timegm' function. */\n#undef HAVE_TIMEGM\n\n/* Define if you have the timezone variable */\n#undef HAVE_TIMEZONE\n\n/* Define to 1 if you have the `trunc' function. */\n#undef HAVE_TRUNC\n\n/* Define to 1 if you have the `truncf' function. */\n#undef HAVE_TRUNCF\n\n/* Define to 1 if you have the `udev' library (-ludev). */\n#undef HAVE_UDEV\n\n/* Define to 1 if you have the <unistd.h> header file. */\n#undef HAVE_UNISTD_H\n\n/* Define to 1 if you have the `usleep' function. */\n#undef HAVE_USLEEP\n\n/* Define to 1 if you have the <utime.h> header file. */\n#undef HAVE_UTIME_H\n\n/* Define to 1 if you have the <valgrind/memcheck.h> header file. */\n#undef HAVE_VALGRIND_MEMCHECK_H\n\n/* Define to 1 if you have the <valgrind/valgrind.h> header file. */\n#undef HAVE_VALGRIND_VALGRIND_H\n\n/* Define to 1 if you have the `vsnprintf' function. */\n#undef HAVE_VSNPRINTF\n\n/* Define to 1 if you have the <X11/extensions/shape.h> header file. */\n#undef HAVE_X11_EXTENSIONS_SHAPE_H\n\n/* Define to 1 if you have the <X11/extensions/Xcomposite.h> header file. */\n#undef HAVE_X11_EXTENSIONS_XCOMPOSITE_H\n\n/* Define to 1 if you have the <X11/extensions/xf86vmode.h> header file. */\n#undef HAVE_X11_EXTENSIONS_XF86VMODE_H\n\n/* Define to 1 if you have the <X11/extensions/xf86vmproto.h> header file. */\n#undef HAVE_X11_EXTENSIONS_XF86VMPROTO_H\n\n/* Define to 1 if you have the <X11/extensions/Xfixes.h> header file. */\n#undef HAVE_X11_EXTENSIONS_XFIXES_H\n\n/* Define to 1 if you have the <X11/extensions/Xinerama.h> header file. */\n#undef HAVE_X11_EXTENSIONS_XINERAMA_H\n\n/* Define to 1 if you have the <X11/extensions/XInput2.h> header file. */\n#undef HAVE_X11_EXTENSIONS_XINPUT2_H\n\n/* Define to 1 if you have the <X11/extensions/XInput.h> header file. */\n#undef HAVE_X11_EXTENSIONS_XINPUT_H\n\n/* Define to 1 if you have the <X11/extensions/Xrandr.h> header file. */\n#undef HAVE_X11_EXTENSIONS_XRANDR_H\n\n/* Define to 1 if you have the <X11/extensions/Xrender.h> header file. */\n#undef HAVE_X11_EXTENSIONS_XRENDER_H\n\n/* Define to 1 if you have the <X11/extensions/XShm.h> header file. */\n#undef HAVE_X11_EXTENSIONS_XSHM_H\n\n/* Define to 1 if you have the <X11/Xcursor/Xcursor.h> header file. */\n#undef HAVE_X11_XCURSOR_XCURSOR_H\n\n/* Define to 1 if you have the <X11/XKBlib.h> header file. */\n#undef HAVE_X11_XKBLIB_H\n\n/* Define to 1 if you have the <X11/Xlib.h> header file. */\n#undef HAVE_X11_XLIB_H\n\n/* Define to 1 if you have the <X11/Xutil.h> header file. */\n#undef HAVE_X11_XUTIL_H\n\n/* Define to 1 if `xcookie' is a member of `XEvent'. */\n#undef HAVE_XEVENT_XCOOKIE\n\n/* Define to 1 if `callback' is a member of `XICCallback'. */\n#undef HAVE_XICCALLBACK_CALLBACK\n\n/* Define if you have the XKB extension */\n#undef HAVE_XKB\n\n/* Define if libxml2 has the xmlDocProperties enum */\n#undef HAVE_XMLDOC_PROPERTIES\n\n/* Define if libxml2 has the xmlFirstElementChild function */\n#undef HAVE_XMLFIRSTELEMENTCHILD\n\n/* Define if libxml2 has the xmlNewDocPI function */\n#undef HAVE_XMLNEWDOCPI\n\n/* Define if libxml2 has the xmlReadMemory function */\n#undef HAVE_XMLREADMEMORY\n\n/* Define if libxml2 has the xmlSchemaSetParserStructuredErrors function */\n#undef HAVE_XMLSCHEMASSETPARSERSTRUCTUREDERRORS\n\n/* Define if libxml2 has the xmlSchemaSetValidStructuredErrors function */\n#undef HAVE_XMLSCHEMASSETVALIDSTRUCTUREDERRORS\n\n/* Define if Xrender has the XRenderCreateLinearGradient function */\n#undef HAVE_XRENDERCREATELINEARGRADIENT\n\n/* Define if Xrender has the XRenderSetPictureTransform function */\n#undef HAVE_XRENDERSETPICTURETRANSFORM\n\n/* Define if Xrandr has the XRRGetScreenResources function */\n#undef HAVE_XRRGETSCREENRESOURCES\n\n/* Define to 1 if you have the `y0' function. */\n#undef HAVE_Y0\n\n/* Define to 1 if you have the `y1' function. */\n#undef HAVE_Y1\n\n/* Define to 1 if you have the `yn' function. */\n#undef HAVE_YN\n\n/* Define to 1 if you have the `z' library (-lz). */\n#undef HAVE_ZLIB\n\n/* Define to 1 if you have the <zlib.h> header file. */\n#undef HAVE_ZLIB_H\n\n/* Define to 1 if you have the `_finite' function. */\n#undef HAVE__FINITE\n\n/* Define to 1 if you have the `_isnan' function. */\n#undef HAVE__ISNAN\n\n/* Define to 1 if you have the `_pclose' function. */\n#undef HAVE__PCLOSE\n\n/* Define to 1 if you have the `_popen' function. */\n#undef HAVE__POPEN\n\n/* Define to 1 if you have the `_snprintf' function. */\n#undef HAVE__SNPRINTF\n\n/* Define to 1 if you have the `_spawnvp' function. */\n#undef HAVE__SPAWNVP\n\n/* Define to 1 if you have the `_strdup' function. */\n#undef HAVE__STRDUP\n\n/* Define to 1 if you have the `_stricmp' function. */\n#undef HAVE__STRICMP\n\n/* Define to 1 if you have the `_strnicmp' function. */\n#undef HAVE__STRNICMP\n\n/* Define to 1 if you have the `_strtoi64' function. */\n#undef HAVE__STRTOI64\n\n/* Define to 1 if you have the `_strtoui64' function. */\n#undef HAVE__STRTOUI64\n\n/* Define to 1 if you have the `_vsnprintf' function. */\n#undef HAVE__VSNPRINTF\n\n/* Define to 1 if you have the `__builtin_clz' built-in function. */\n#undef HAVE___BUILTIN_CLZ\n\n/* Define to 1 if you have the `__builtin_popcount' built-in function. */\n#undef HAVE___BUILTIN_POPCOUNT\n\n/* Define to 1 if you have the `__clear_cache' (potentially built-in)\n   function. */\n#undef HAVE___CLEAR_CACHE\n\n/* Define to 1 if you have the `__res_getservers' function. */\n#undef HAVE___RES_GETSERVERS\n\n/* Define to 1 if you have the `__res_get_state' function. */\n#undef HAVE___RES_GET_STATE\n\n/* Define to 1 if `major', `minor', and `makedev' are declared in <mkdev.h>.\n   */\n#undef MAJOR_IN_MKDEV\n\n/* Define to 1 if `major', `minor', and `makedev' are declared in\n   <sysmacros.h>. */\n#undef MAJOR_IN_SYSMACROS\n\n/* Define to the address where bug reports for this package should be sent. */\n#undef PACKAGE_BUGREPORT\n\n/* Define to the full name of this package. */\n#undef PACKAGE_NAME\n\n/* Define to the full name and version of this package. */\n#undef PACKAGE_STRING\n\n/* Define to the one symbol short name of this package. */\n#undef PACKAGE_TARNAME\n\n/* Define to the home page for this package. */\n#undef PACKAGE_URL\n\n/* Define to the version of this package. */\n#undef PACKAGE_VERSION\n\n/* Define to the soname of the libcapi20 library. */\n#undef SONAME_LIBCAPI20\n\n/* Define to the soname of the libcups library. */\n#undef SONAME_LIBCUPS\n\n/* Define to the soname of the libcurses library. */\n#undef SONAME_LIBCURSES\n\n/* Define to the soname of the libdbus-1 library. */\n#undef SONAME_LIBDBUS_1\n\n/* Define to the soname of the libEGL library. */\n#undef SONAME_LIBEGL\n\n/* Define to the soname of the libfontconfig library. */\n#undef SONAME_LIBFONTCONFIG\n\n/* Define to the soname of the libfreetype library. */\n#undef SONAME_LIBFREETYPE\n\n/* Define to the soname of the libGL library. */\n#undef SONAME_LIBGL\n\n/* Define to the soname of the libGLESv2 library. */\n#undef SONAME_LIBGLESV2\n\n/* Define to the soname of the libGLU library. */\n#undef SONAME_LIBGLU\n\n/* Define to the soname of the libgnutls library. */\n#undef SONAME_LIBGNUTLS\n\n/* Define to the soname of the libgsm library. */\n#undef SONAME_LIBGSM\n\n/* Define to the soname of the libgssapi_krb5 library. */\n#undef SONAME_LIBGSSAPI_KRB5\n\n/* Define to the soname of the libhal library. */\n#undef SONAME_LIBHAL\n\n/* Define to the soname of the libjpeg library. */\n#undef SONAME_LIBJPEG\n\n/* Define to the soname of the libkrb5 library. */\n#undef SONAME_LIBKRB5\n\n/* Define to the soname of the libMoltenVK library. */\n#undef SONAME_LIBMOLTENVK\n\n/* Define to the soname of the libncurses library. */\n#undef SONAME_LIBNCURSES\n\n/* Define to the soname of the libnetapi library. */\n#undef SONAME_LIBNETAPI\n\n/* Define to the soname of the libodbc library. */\n#undef SONAME_LIBODBC\n\n/* Define to the soname of the libopenal library. */\n#undef SONAME_LIBOPENAL\n\n/* Define to the soname of the libOSMesa library. */\n#undef SONAME_LIBOSMESA\n\n/* Define to the soname of the libpng library. */\n#undef SONAME_LIBPNG\n\n/* Define to the soname of the libsane library. */\n#undef SONAME_LIBSANE\n\n/* Define to the soname of the libSDL2 library. */\n#undef SONAME_LIBSDL2\n\n/* Define to the soname of the libtiff library. */\n#undef SONAME_LIBTIFF\n\n/* Define to the soname of the libv4l1 library. */\n#undef SONAME_LIBV4L1\n\n/* Define to the soname of the libvkd3d library. */\n#undef SONAME_LIBVKD3D\n\n/* Define to the soname of the libvulkan library. */\n#undef SONAME_LIBVULKAN\n\n/* Define to the soname of the libX11 library. */\n#undef SONAME_LIBX11\n\n/* Define to the soname of the libXcomposite library. */\n#undef SONAME_LIBXCOMPOSITE\n\n/* Define to the soname of the libXcursor library. */\n#undef SONAME_LIBXCURSOR\n\n/* Define to the soname of the libXext library. */\n#undef SONAME_LIBXEXT\n\n/* Define to the soname of the libXfixes library. */\n#undef SONAME_LIBXFIXES\n\n/* Define to the soname of the libXi library. */\n#undef SONAME_LIBXI\n\n/* Define to the soname of the libXinerama library. */\n#undef SONAME_LIBXINERAMA\n\n/* Define to the soname of the libXrandr library. */\n#undef SONAME_LIBXRANDR\n\n/* Define to the soname of the libXrender library. */\n#undef SONAME_LIBXRENDER\n\n/* Define to the soname of the libxslt library. */\n#undef SONAME_LIBXSLT\n\n/* Define to the soname of the libXxf86vm library. */\n#undef SONAME_LIBXXF86VM\n\n/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */\n#undef STAT_MACROS_BROKEN\n\n/* Define to 1 if you have the ANSI C header files. */\n#undef STDC_HEADERS\n\n/* Define to 1 if the X Window System is missing or not being used. */\n#undef X_DISPLAY_MISSING\n\n/* Enable large inode numbers on Mac OS X 10.5.  */\n#ifndef _DARWIN_USE_64_BIT_INODE\n# define _DARWIN_USE_64_BIT_INODE 1\n#endif\n\n/* Number of bits in a file offset, on hosts where this is settable. */\n#undef _FILE_OFFSET_BITS\n\n/* Define for large files, on AIX-style hosts. */\n#undef _LARGE_FILES\n\n/* Define to a macro to output a .cfi assembly pseudo-op */\n#undef __ASM_CFI\n\n/* Define to a macro to define an assembly function */\n#undef __ASM_DEFINE_FUNC\n\n/* Define to a macro to generate an assembly function directive */\n#undef __ASM_FUNC\n\n/* Define to a macro to generate an assembly function with C calling\n   convention */\n#undef __ASM_GLOBAL_FUNC\n\n/* Define to a macro to generate an assembly name from a C symbol */\n#undef __ASM_NAME\n\n/* Define to a macro to generate an stdcall suffix */\n#undef __ASM_STDCALL\n\n/* Define to a macro to generate an assembly function with stdcall calling\n   convention */\n#undef __ASM_STDCALL_FUNC\n\n/* Define to `__inline__' or `__inline' if that's what the C compiler\n   calls it, or to nothing if 'inline' is not supported under any name.  */\n#ifndef __cplusplus\n#undef inline\n#endif\n\n#endif /* WINE_CROSSTEST */\n#endif /* __WINE_CONFIG_H */\n"
  },
  {
    "path": "wine/windows/control.idl",
    "content": "/*\n * Copyright (C) 2002 Lionel Ulmer\n * Copyright (C) 2004 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\n\n[\n    version(1.0),\n    uuid(56a868b0-0ad4-11ce-b03a-0020af0ba770)\n]\nlibrary QuartzTypeLib\n{\n    importlib(\"stdole2.tlb\");\n\n    typedef LONG OAFilterState;\n    typedef LONG_PTR OAHWND;\n    typedef LONG_PTR OAEVENT;\n\n    cpp_quote(\"#ifndef REFTIME_DEFINED\")\n    cpp_quote(\"#define REFTIME_DEFINED\")\n    typedef DOUBLE REFTIME;\n    cpp_quote(\"#endif\")\n\n    /***************************************************************************\n     * IMediaControl interface\n     */\n    [\n        object,\n        uuid(56a868b1-0ad4-11ce-b03a-0020af0ba770),\n        pointer_default(unique)\n    ]\n    interface IMediaControl : IDispatch\n    {\n        HRESULT Run();\n        HRESULT Pause();\n        HRESULT Stop();\n        HRESULT GetState( [in] LONG msTimeout, [out] OAFilterState *pfs );\n        HRESULT RenderFile( [in] BSTR strFilename );\n        HRESULT AddSourceFilter( [in] BSTR strFilename, [out] IDispatch **ppUnk );\n        [propget] HRESULT FilterCollection( [out] IDispatch **ppUnk );\n        [propget] HRESULT RegFilterCollection( [out] IDispatch **ppUnk );\n        HRESULT StopWhenReady();\n    }\n\n\n    /***************************************************************************\n     * IBasicAudio interface\n     */\n    [\n        object,\n        uuid(56a868b3-0ad4-11ce-b03a-0020af0ba770),\n        pointer_default(unique)\n    ]\n    interface IBasicAudio : IDispatch\n    {\n        [propput] HRESULT Volume( [in] LONG lVolume );\n        [propget] HRESULT Volume( [out, retval] LONG *plVolume );\n        [propput] HRESULT Balance( [in] LONG lBalance );\n        [propget] HRESULT Balance( [out, retval] LONG *plBalance );\n    }\n\n\n    /***************************************************************************\n     * IVideoWindow interface\n     */\n    [\n        object,\n        uuid(56a868b4-0ad4-11ce-b03a-0020af0ba770),\n        pointer_default(unique)\n    ]\n    interface IVideoWindow : IDispatch\n    {\n        [propput] HRESULT Caption( [in] BSTR strCaption );\n        [propget] HRESULT Caption( [out, retval] BSTR *strCaption );\n        [propput] HRESULT WindowStyle( [in] LONG WindowStyle );\n        [propget] HRESULT WindowStyle( [out, retval] LONG *WindowStyle );\n        [propput] HRESULT WindowStyleEx( [in] LONG WindowStyleEx );\n        [propget] HRESULT WindowStyleEx( [out, retval] LONG *WindowStyleEx );\n        [propput] HRESULT AutoShow( [in] LONG AutoShow );\n        [propget] HRESULT AutoShow( [out, retval] LONG *AutoShow );\n        [propput] HRESULT WindowState( [in] LONG WindowState );\n        [propget] HRESULT WindowState( [out, retval] LONG *WindowState );\n        [propput] HRESULT BackgroundPalette( [in] LONG BackgroundPalette );\n        [propget] HRESULT BackgroundPalette( [out, retval] LONG *pBackgroundPalette );\n        [propput] HRESULT Visible( [in] LONG Visible );\n        [propget] HRESULT Visible( [out, retval] LONG *pVisible );\n        [propput] HRESULT Left( [in] LONG Left );\n        [propget] HRESULT Left( [out, retval] LONG *pLeft );\n        [propput] HRESULT Width( [in] LONG Width );\n        [propget] HRESULT Width( [out, retval] LONG *pWidth );\n        [propput] HRESULT Top( [in] LONG Top );\n        [propget] HRESULT Top( [out, retval] LONG *pTop );\n        [propput] HRESULT Height( [in] LONG Height );\n        [propget] HRESULT Height( [out, retval] LONG *pHeight );\n        [propput] HRESULT Owner( [in] OAHWND Owner );\n        [propget] HRESULT Owner( [out, retval] OAHWND *Owner );\n        [propput] HRESULT MessageDrain( [in] OAHWND Drain );\n        [propget] HRESULT MessageDrain( [out, retval] OAHWND *Drain );\n        [propget] HRESULT BorderColor( [out, retval] LONG *Color );\n        [propput] HRESULT BorderColor( [in] LONG Color );\n        [propget] HRESULT FullScreenMode( [out, retval] LONG *FullScreenMode );\n        [propput] HRESULT FullScreenMode( [in] LONG FullScreenMode );\n        HRESULT SetWindowForeground( [in] LONG Focus );\n        HRESULT NotifyOwnerMessage( [in] OAHWND hwnd, [in] LONG uMsg, [in] LONG_PTR wParam, [in] LONG_PTR lParam );\n        HRESULT SetWindowPosition( [in] LONG Left, [in] LONG Top, [in] LONG Width, [in] LONG Height );\n        HRESULT GetWindowPosition( [out] LONG *pLeft, [out] LONG *pTop, [out] LONG *pWidth, [out] LONG *pHeight );\n        HRESULT GetMinIdealImageSize( [out] LONG *pWidth, [out] LONG *pHeight );\n        HRESULT GetMaxIdealImageSize( [out] LONG *pWidth, [out] LONG *pHeight );\n        HRESULT GetRestorePosition( [out] LONG *pLeft, [out] LONG *pTop, [out] LONG *pWidth, [out] LONG *pHeight );\n        HRESULT HideCursor( [in] LONG HideCursor );\n        HRESULT IsCursorHidden( [out] LONG *CursorHidden );\n    }\n\n\n    /***************************************************************************\n     * IBasicVideo interface\n     */\n    [\n        object,\n        uuid(56a868b5-0ad4-11ce-b03a-0020af0ba770),\n        pointer_default(unique)\n    ]\n    interface IBasicVideo : IDispatch\n    {\n        [propget] HRESULT AvgTimePerFrame( [out, retval] REFTIME *pAvgTimePerFrame );\n        [propget] HRESULT BitRate( [out, retval] LONG *pBitRate );\n        [propget] HRESULT BitErrorRate( [out, retval] LONG *pBitErrorRate );\n        [propget] HRESULT VideoWidth( [out, retval] LONG *pVideoWidth );\n        [propget] HRESULT VideoHeight( [out, retval] LONG *pVideoHeight );\n        [propput] HRESULT SourceLeft( [in] LONG SourceLeft );\n        [propget] HRESULT SourceLeft( [out, retval] LONG *pSourceLeft );\n        [propput] HRESULT SourceWidth( [in] LONG SourceWidth );\n        [propget] HRESULT SourceWidth( [out, retval] LONG *pSourceWidth );\n        [propput] HRESULT SourceTop( [in] LONG SourceTop );\n        [propget] HRESULT SourceTop( [out, retval] LONG *pSourceTop );\n        [propput] HRESULT SourceHeight( [in] LONG SourceHeight );\n        [propget] HRESULT SourceHeight( [out, retval] LONG *pSourceHeight );\n        [propput] HRESULT DestinationLeft( [in] LONG DestinationLeft );\n        [propget] HRESULT DestinationLeft( [out, retval] LONG *pDestinationLeft );\n        [propput] HRESULT DestinationWidth( [in] LONG DestinationWidth );\n        [propget] HRESULT DestinationWidth( [out, retval] LONG *pDestinationWidth );\n        [propput] HRESULT DestinationTop( [in] LONG DestinationTop );\n        [propget] HRESULT DestinationTop( [out, retval] LONG *pDestinationTop );\n        [propput] HRESULT DestinationHeight( [in] LONG DestinationHeight );\n        [propget] HRESULT DestinationHeight( [out, retval] LONG *pDestinationHeight );\n        HRESULT SetSourcePosition( [in] LONG Left, [in] LONG Top, [in] LONG Width, [in] LONG Height );\n        HRESULT GetSourcePosition( [out] LONG *pLeft, [out] LONG *pTop, [out] LONG *pWidth, [out] LONG *pHeight );\n        HRESULT SetDefaultSourcePosition();\n        HRESULT SetDestinationPosition( [in] LONG Left, [in] LONG Top, [in] LONG Width, [in] LONG Height );\n        HRESULT GetDestinationPosition( [out] LONG *pLeft, [out] LONG *pTop, [out] LONG *pWidth, [out] LONG *pHeight );\n        HRESULT SetDefaultDestinationPosition();\n        HRESULT GetVideoSize( [out] LONG *pWidth, [out] LONG *pHeight );\n        HRESULT GetVideoPaletteEntries( [in] LONG StartIndex,\n                                        [in] LONG Entries,\n                                        [out] LONG *pRetrieved,\n                                        [out, size_is(Entries), length_is(*pRetrieved)] LONG *pPalette );\n        HRESULT GetCurrentImage( [in, out] LONG *pBufferSize,\n                                 [out, size_is(*pBufferSize), length_is(*pBufferSize)] LONG *pDIBImage );\n        HRESULT IsUsingDefaultSource();\n        HRESULT IsUsingDefaultDestination();\n    }\n\n    [\n        uuid(329bb360-f6ea-11d1-9038-00a0c9697298),\n        helpstring(\"IBasicVideo2\"),\n        odl\n    ]\n\n    interface IBasicVideo2 : IBasicVideo\n    {\n        HRESULT GetPreferredAspectRatio([out] LONG *plAspectX, [out] LONG *plAspectY);\n    }\n\n\n    /***************************************************************************\n     * IMediaEvent interface\n     */\n    [\n        object,\n        uuid(56a868b6-0ad4-11ce-b03a-0020af0ba770),\n        pointer_default(unique)\n    ]\n    interface IMediaEvent : IDispatch\n    {\n        HRESULT GetEventHandle( [out] OAEVENT *hEvent );\n        HRESULT GetEvent( [out] LONG *lEventCode, [out] LONG_PTR *lParam1, [out] LONG_PTR *lParam2, [in] LONG msTimeout );\n        HRESULT WaitForCompletion( [in] LONG msTimeout, [out] LONG *pEvCode );\n        HRESULT CancelDefaultHandling( [in] LONG lEvCode );\n        HRESULT RestoreDefaultHandling( [in] LONG lEvCode );\n        HRESULT FreeEventParams( [in] LONG lEvCode, [in] LONG_PTR lParam1, [in] LONG_PTR lParam2 );\n    }\n\n\n    /***************************************************************************\n     * IMediaEventEx interface\n     */\n    [\n        object,\n        uuid(56a868c0-0ad4-11ce-b03a-0020af0ba770),\n        pointer_default(unique)\n    ]\n    interface IMediaEventEx : IMediaEvent\n    {\n        HRESULT SetNotifyWindow( [in] OAHWND hwnd, [in] LONG lMsg, [in] LONG_PTR lInstanceData );\n        HRESULT SetNotifyFlags( [in] LONG lNoNotifyFlags );\n        HRESULT GetNotifyFlags( [out] LONG *lplNoNotifyFlags );\n    }\n\n\n    /***************************************************************************\n     * IMediaPosition interface\n     */\n    [\n        object,\n        uuid(56a868b2-0ad4-11ce-b03a-0020af0ba770),\n        pointer_default(unique)\n    ]\n    interface IMediaPosition : IDispatch\n    {\n        HRESULT get_Duration( [out] REFTIME *plength );\n        HRESULT put_CurrentPosition( [in] REFTIME llTime );\n        HRESULT get_CurrentPosition( [out] REFTIME *pllTime );\n        HRESULT get_StopTime( [out] REFTIME *pllTime );\n        HRESULT put_StopTime( [in] REFTIME llTime );\n        HRESULT get_PrerollTime( [out] REFTIME *pllTime );\n        HRESULT put_PrerollTime( [in] REFTIME llTime );\n        HRESULT put_Rate( [in] double dRate );\n        HRESULT get_Rate( [out] double *pdRate );\n        HRESULT CanSeekForward( [out] LONG *pCanSeekForward );\n        HRESULT CanSeekBackward( [out] LONG *pCanSeekBackward );\n    }\n\n} /* library QuartzTypeLib */\n"
  },
  {
    "path": "wine/windows/cor.idl",
    "content": "/*\n * Copyright (C) 2007 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"propidl.idl\";\n\ncpp_quote(\"#include <ole2.h>\")\n/* FIXME: #include \"specstrings.h\" */\ncpp_quote(\"#include <corerror.h>\")\ncpp_quote(\"#include <corhdr.h>\")\n\ncpp_quote(\"DEFINE_GUID(CLSID_CorMetaDataDispenser, 0xe5cb7a31,0x7512,0x11d2,0x89,0xce,0x00,0x80,0xc7,0x92,0xe5,0xd8);\")\ncpp_quote(\"DEFINE_GUID(CLSID_CorMetaDataDispenserRuntime, 0x1ec2de53,0x75cc,0x11d2,0x97,0x75,0x00,0xa0,0xc9,0xb4,0xd5,0x0c);\")\n\n[\n    object,\n    local,\n    uuid(809c652e-7396-11d2-9771-00a0c9b4d50c)\n]\ninterface IMetaDataDispenser : IUnknown\n{\n    HRESULT DefineScope(\n        [in] REFCLSID rclsid,\n        [in] DWORD dwCreateFlags,\n        [in] REFIID riid,\n        [out] IUnknown **ppIUnk);\n\n    HRESULT OpenScope(\n        [in] LPCWSTR szScope,\n        [in] DWORD dwOpenFlags,\n        [in] REFIID riid,\n        [out] IUnknown **ppIUnk);\n\n    HRESULT OpenScopeOnMemory(\n        [in] const void *pData,\n        [in] ULONG cbData,\n        [in] DWORD dwOpenFlags,\n        [in] REFIID riid,\n        [out] IUnknown **ppIUnk);\n}\n\n[\n    object,\n    local,\n    uuid(31bcfce2-dafb-11d2-9f81-00c04f79a0a3)\n]\ninterface IMetaDataDispenserEx : IMetaDataDispenser\n{\n    HRESULT SetOption(\n        [in] REFGUID optionid,\n        [in] const VARIANT *value);\n\n    HRESULT GetOption(\n        [in] REFGUID optionid,\n        [out] VARIANT *pvalue);\n\n    HRESULT OpenScopeOnITypeInfo(\n        [in] ITypeInfo *pITI,\n        [in] DWORD dwOpenFlags,\n        [in] REFIID riid,\n        [out] IUnknown **ppIUnk);\n\n    HRESULT GetCORSystemDirectory(\n        [out, size_is(cchBuffer)] LPWSTR szBuffer,\n        [in] DWORD cchBuffer,\n        [out] DWORD *pchBuffer);\n\n    HRESULT FindAssembly(\n        [in] LPCWSTR szAppBase,\n        [in] LPCWSTR szPrivateBin,\n        [in] LPCWSTR szGlobalBin,\n        [in] LPCWSTR szAssemblyName,\n        [out, size_is(cchName)] LPWSTR szName,\n        [in] ULONG cchName,\n        [out] ULONG *pcName);\n\n    HRESULT FindAssemblyModule(\n        [in] LPCWSTR szAppBase,\n        [in] LPCWSTR szPrivateBin,\n        [in] LPCWSTR szGlobalBin,\n        [in] LPCWSTR szAssemblyName,\n        [in] LPCWSTR szModuleName,\n        [out, size_is(cchName)] LPWSTR szName,\n        [in] ULONG cchName,\n        [out] ULONG *pcName);\n}\n\ncpp_quote(\"BOOL        WINAPI _CorDllMain(HINSTANCE,DWORD,LPVOID);\")\ncpp_quote(\"__int32     WINAPI _CorExeMain(void);\")\ncpp_quote(\"__int32     WINAPI _CorExeMain2(PBYTE,DWORD,LPWSTR,LPWSTR,LPWSTR);\")\ncpp_quote(\"VOID        WINAPI _CorImageUnloading(PVOID);\")\ncpp_quote(\"HRESULT     WINAPI _CorValidateImage(PVOID*,LPCWSTR);\")\ncpp_quote(\"HRESULT     WINAPI CoInitializeCor(DWORD);\")\ncpp_quote(\"void        WINAPI CoUninitializeCor(void);\")\n"
  },
  {
    "path": "wine/windows/cordebug.idl",
    "content": "/*\n * Copyright (C) 2011 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\nimport \"objidl.idl\";\n\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef CreateProcess\")\ncpp_quote(\"#endif\")\n\ninterface ICorDebugAppDomain;\ninterface ICorDebugAppDomainEnum;\ninterface ICorDebugAssembly;\ninterface ICorDebugAssemblyEnum;\ninterface ICorDebugBreakpoint;\ninterface ICorDebugBreakpointEnum;\ninterface ICorDebugChain;\ninterface ICorDebugChainEnum;\ninterface ICorDebugClass;\ninterface ICorDebugCode;\ninterface ICorDebugContext;\ninterface ICorDebugEditAndContinueSnapshot;\ninterface ICorDebugEditAndContinueErrorInfo;\ninterface ICorDebugEnum;\ninterface ICorDebugErrorInfoEnum;\ninterface ICorDebugEval;\ninterface ICorDebugFrame;\ninterface ICorDebugFrameEnum;\ninterface ICorDebugFunction;\ninterface ICorDebugFunctionBreakpoint;\ninterface ICorDebugManagedCallback;\ninterface ICorDebugManagedCallback2;\ninterface ICorDebugMDA;\ninterface ICorDebugModule;\ninterface ICorDebugModuleBreakpoint;\ninterface ICorDebugModuleEnum;\ninterface ICorDebugObjectEnum;\ninterface ICorDebugObjectValue;\ninterface ICorDebugProcess;\ninterface ICorDebugProcessEnum;\ninterface ICorDebugRegisterSet;\ninterface ICorDebugStepper;\ninterface ICorDebugStepperEnum;\ninterface ICorDebugThreadEnum;\ninterface ICorDebugUnmanagedCallback;\ninterface ICorDebugValue;\ninterface ICorDebugValueBreakpoint;\n\n\ntypedef [wire_marshal(unsigned long)] void *HPROCESS;\ntypedef [wire_marshal(unsigned long)] void *HTHREAD;\n\n/* These are defined in corhrd.idl but used here. */\ncpp_quote(\"#if 0\")\n\ntypedef UINT32 mdToken;\ntypedef mdToken mdModule;\ntypedef SIZE_T  mdScope;\ntypedef mdToken mdTypeDef;\ntypedef mdToken mdSourceFile;\ntypedef mdToken mdMemberRef;\ntypedef mdToken mdMethodDef;\ntypedef mdToken mdFieldDef;\ntypedef mdToken mdSignature;\ntypedef ULONG CorElementType;\ntypedef SIZE_T PCCOR_SIGNATURE;\n\ntypedef SIZE_T LPDEBUG_EVENT;\n\ntypedef SIZE_T LPSTARTUPINFOW;\ntypedef SIZE_T LPPROCESS_INFORMATION;\n\ncpp_quote(\"#endif\")\n\ntypedef ULONG64 CORDB_ADDRESS;\ntypedef ULONG64 CORDB_REGISTER;\n\ntypedef UINT64 TASKID;\ntypedef DWORD CONNID;\n\n\ncpp_quote(\"#ifndef _COR_IL_MAP\")\ncpp_quote(\"#define _COR_IL_MAP\")\n\ntypedef struct _COR_IL_MAP\n{\n    ULONG32 oldOffset;\n    ULONG32 newOffset;\n    BOOL    fAccurate;\n} COR_IL_MAP;\n\ncpp_quote(\"#endif /* _COR_IL_MAP */\")\n\ncpp_quote(\"#ifndef _COR_DEBUG_IL_TO_NATIVE_MAP_\")\ncpp_quote(\"#define _COR_DEBUG_IL_TO_NATIVE_MAP_\")\n\ntypedef enum CorDebugIlToNativeMappingTypes\n{\n    NO_MAPPING = -1,\n    PROLOG     = -2,\n    EPILOG     = -3\n} CorDebugIlToNativeMappingTypes;\n\ntypedef struct COR_DEBUG_IL_TO_NATIVE_MAP\n{\n    ULONG32 ilOffset;\n    ULONG32 nativeStartOffset;\n    ULONG32 nativeEndOffset;\n} COR_DEBUG_IL_TO_NATIVE_MAP;\n\ncpp_quote(\"#endif /* _COR_DEBUG_IL_TO_NATIVE_MAP_ */\")\n\n\ntypedef enum CorDebugThreadState\n{\n    THREAD_RUN,\n    THREAD_SUSPEND\n} CorDebugThreadState;\n\ntypedef enum CorDebugCreateProcessFlags\n{\n    DEBUG_NO_SPECIAL_OPTIONS        = 0x0000\n} CorDebugCreateProcessFlags;\n\n[\n    object,\n    local,\n    uuid(CC7BCAF7-8A68-11d2-983C-0000F808342D),\n    pointer_default(unique)\n]\ninterface ICorDebugValue : IUnknown\n{\n    HRESULT GetType([out] CorElementType *pType);\n    HRESULT GetSize([out] ULONG32 *pSize);\n    HRESULT GetAddress([out] CORDB_ADDRESS *pAddress);\n    HRESULT CreateBreakpoint([out] ICorDebugValueBreakpoint **ppBreakpoint);\n}\n\n[\n    object,\n    local,\n    uuid(938c6d66-7fb6-4f69-b389-425b8987329b),\n    pointer_default(unique)\n]\ninterface ICorDebugThread : IUnknown\n{\n    HRESULT GetProcess([out] ICorDebugProcess **ppProcess);\n    HRESULT GetID([out] DWORD *pdwThreadId);\n    HRESULT GetHandle([out] HTHREAD *phThreadHandle);\n    HRESULT GetAppDomain([out] ICorDebugAppDomain **ppAppDomain);\n    HRESULT SetDebugState([in] CorDebugThreadState state);\n    HRESULT GetDebugState([out] CorDebugThreadState *pState);\n\n    typedef enum CorDebugUserState\n    {\n        USER_STOP_REQUESTED     = 0x01,\n        USER_SUSPEND_REQUESTED  = 0x02,\n        USER_BACKGROUND         = 0x04,\n        USER_UNSTARTED          = 0x08,\n        USER_STOPPED            = 0x10,\n        USER_WAIT_SLEEP_JOIN    = 0x20,\n        USER_SUSPENDED          = 0x40,\n\n        USER_UNSAFE_POINT       = 0x80,\n    } CorDebugUserState;\n\n    HRESULT GetUserState([out] CorDebugUserState *pState);\n    HRESULT GetCurrentException([out] ICorDebugValue **ppExceptionObject);\n    HRESULT ClearCurrentException();\n    HRESULT CreateStepper([out] ICorDebugStepper **ppStepper);\n    HRESULT EnumerateChains([out] ICorDebugChainEnum **ppChains);\n    HRESULT GetActiveChain([out] ICorDebugChain **ppChain);\n    HRESULT GetActiveFrame([out] ICorDebugFrame **ppFrame);\n    HRESULT GetRegisterSet([out] ICorDebugRegisterSet **ppRegisters);\n    HRESULT CreateEval([out] ICorDebugEval **ppEval);\n    HRESULT GetObject([out] ICorDebugValue **ppObject);\n}\n\n[\n    object,\n    local,\n    uuid(3d6f5f62-7538-11d3-8d5b-00104b35e7ef),\n    pointer_default(unique)\n]\n\ninterface ICorDebugController : IUnknown\n{\n    HRESULT Stop([in] DWORD dwTimeoutIgnored);\n    HRESULT Continue([in] BOOL fIsOutOfBand);\n    HRESULT IsRunning([out] BOOL *pbRunning);\n    HRESULT HasQueuedCallbacks([in] ICorDebugThread *pThread,\n                               [out] BOOL *pbQueued);\n    HRESULT EnumerateThreads([out] ICorDebugThreadEnum **ppThreads);\n    HRESULT SetAllThreadsDebugState([in] CorDebugThreadState state,\n                                    [in] ICorDebugThread *pExceptThisThread);\n    HRESULT Detach();\n    HRESULT Terminate([in] UINT exitCode);\n    HRESULT CanCommitChanges([in] ULONG cSnapshots,\n                             [in] ICorDebugEditAndContinueSnapshot *pSnapshots[],\n                             [out] ICorDebugErrorInfoEnum **pError);\n    HRESULT CommitChanges([in] ULONG cSnapshots,\n                          [in] ICorDebugEditAndContinueSnapshot *pSnapshots[],\n                          [out] ICorDebugErrorInfoEnum **pError);\n}\n\n[\n    object,\n    local,\n    uuid(3d6f5f64-7538-11d3-8d5b-00104b35e7ef),\n    pointer_default(unique)\n]\ninterface ICorDebugProcess : ICorDebugController\n{\n    HRESULT GetID([out] DWORD *pdwProcessId);\n    HRESULT GetHandle([out] HPROCESS *phProcessHandle);\n    HRESULT GetThread([in] DWORD dwThreadId, [out] ICorDebugThread **ppThread);\n    HRESULT EnumerateObjects([out] ICorDebugObjectEnum **ppObjects);\n    HRESULT IsTransitionStub([in] CORDB_ADDRESS address, [out] BOOL *pbTransitionStub);\n    HRESULT IsOSSuspended([in] DWORD threadID, [out] BOOL *pbSuspended);\n    HRESULT GetThreadContext([in] DWORD threadID, [in] ULONG32 contextSize,\n                             [in, out] BYTE context[]);\n    HRESULT SetThreadContext([in] DWORD threadID, [in] ULONG32 contextSize, [in] BYTE context[]);\n    HRESULT ReadMemory([in] CORDB_ADDRESS address, [in] DWORD size, [out] BYTE buffer[], [out] SIZE_T *read);\n    HRESULT WriteMemory([in] CORDB_ADDRESS address, [in] DWORD size, [in] BYTE buffer[], [out] SIZE_T *written);\n    HRESULT ClearCurrentException([in] DWORD threadID);\n    HRESULT EnableLogMessages([in]BOOL fOnOff);\n    HRESULT ModifyLogSwitch([in] WCHAR *pLogSwitchName,\n                            [in]LONG lLevel);\n    HRESULT EnumerateAppDomains([out] ICorDebugAppDomainEnum **ppAppDomains);\n    HRESULT GetObject([out] ICorDebugValue **ppObject);\n    HRESULT ThreadForFiberCookie([in] DWORD fiberCookie, [out] ICorDebugThread **ppThread);\n    HRESULT GetHelperThreadID([out] DWORD *pThreadID);\n}\n\n[\n    object,\n    local,\n    uuid(3d6f5f63-7538-11d3-8d5b-00104b35e7ef),\n    pointer_default(unique)\n]\ninterface ICorDebugAppDomain : ICorDebugController\n{\n    HRESULT GetProcess([out] ICorDebugProcess **ppProcess);\n    HRESULT EnumerateAssemblies([out] ICorDebugAssemblyEnum **ppAssemblies);\n    HRESULT GetModuleFromMetaDataInterface([in] IUnknown *pIMetaData,\n                                           [out] ICorDebugModule **ppModule);\n    HRESULT EnumerateBreakpoints([out] ICorDebugBreakpointEnum **ppBreakpoints);\n    HRESULT EnumerateSteppers([out] ICorDebugStepperEnum **ppSteppers);\n    HRESULT IsAttached([out] BOOL *pbAttached);\n    HRESULT GetName([in] ULONG32 cchName, [out] ULONG32 *pcchName, [out] WCHAR szName[]);\n    HRESULT GetObject([out] ICorDebugValue **ppObject);\n    HRESULT Attach();\n    HRESULT GetID([out] ULONG32 *pId);\n}\n\n[\n    object,\n    local,\n    uuid(3d6f5f60-7538-11d3-8d5b-00104b35e7ef),\n    pointer_default(unique)\n]\ninterface ICorDebugManagedCallback : IUnknown\n{\n    HRESULT Breakpoint([in] ICorDebugAppDomain *pAppDomain,\n                       [in] ICorDebugThread *pThread,\n                       [in] ICorDebugBreakpoint *pBreakpoint);\n\n    typedef enum CorDebugStepReason\n    {\n        STEP_NORMAL,\n        STEP_RETURN,\n        STEP_CALL,\n        STEP_EXCEPTION_FILTER,\n        STEP_EXCEPTION_HANDLER,\n        STEP_INTERCEPT,\n        STEP_EXIT\n    } CorDebugStepReason;\n\n    HRESULT StepComplete([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,\n                         [in] ICorDebugStepper *pStepper, [in] CorDebugStepReason reason);\n    HRESULT Break([in] ICorDebugAppDomain *pAppDomain,\n                  [in] ICorDebugThread *thread);\n    HRESULT Exception([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,\n                      [in] BOOL unhandled);\n    HRESULT EvalComplete([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,\n                         [in] ICorDebugEval *pEval);\n    HRESULT EvalException([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,\n                          [in] ICorDebugEval *pEval);\n    HRESULT CreateProcess([in] ICorDebugProcess *pProcess);\n    HRESULT ExitProcess([in] ICorDebugProcess *pProcess);\n    HRESULT CreateThread([in] ICorDebugAppDomain *pAppDomain,[in] ICorDebugThread *thread);\n    HRESULT ExitThread([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *thread);\n    HRESULT LoadModule([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugModule *pModule);\n    HRESULT UnloadModule([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugModule *pModule);\n    HRESULT LoadClass([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugClass *c);\n    HRESULT UnloadClass([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugClass *c);\n    HRESULT DebuggerError([in] ICorDebugProcess *pProcess, [in] HRESULT errorHR,\n                          [in] DWORD errorCode);\n\n    typedef enum LoggingLevelEnum\n    {\n        LTraceLevel0   = 0,\n        LTraceLevel1,\n        LTraceLevel2,\n        LTraceLevel3,\n        LTraceLevel4,\n        LStatusLevel0  = 20,\n        LStatusLevel1,\n        LStatusLevel2,\n        LStatusLevel3,\n        LStatusLevel4,\n        LWarningLevel  = 40,\n        LErrorLevel    = 50,\n        LPanicLevel    = 100\n    } LoggingLevelEnum;\n\n    typedef enum LogSwitchCallReason\n    {\n        SWITCH_CREATE,\n        SWITCH_MODIFY,\n        SWITCH_DELETE\n    } LogSwitchCallReason;\n\n    HRESULT LogMessage([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,\n                       [in] LONG lLevel, [in] WCHAR *pLogSwitchName, [in] WCHAR *pMessage);\n    HRESULT LogSwitch([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,\n                      [in] LONG lLevel, [in] ULONG ulReason, [in] WCHAR *pLogSwitchName,\n                      [in] WCHAR *pParentName);\n    HRESULT CreateAppDomain([in] ICorDebugProcess *pProcess, [in] ICorDebugAppDomain *pAppDomain);\n    HRESULT ExitAppDomain([in] ICorDebugProcess *pProcess, [in] ICorDebugAppDomain *pAppDomain);\n    HRESULT LoadAssembly([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugAssembly *pAssembly);\n    HRESULT UnloadAssembly([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugAssembly *pAssembly);\n    HRESULT ControlCTrap([in] ICorDebugProcess *pProcess);\n    HRESULT NameChange([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread);\n    HRESULT UpdateModuleSymbols([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugModule *pModule,\n                                [in] IStream *pSymbolStream);\n    HRESULT EditAndContinueRemap([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,\n                                 [in] ICorDebugFunction *pFunction, [in] BOOL fAccurate);\n\n    HRESULT BreakpointSetError([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,\n                               [in] ICorDebugBreakpoint *pBreakpoint, [in] DWORD dwError);\n}\n\n[\n    object,\n    local,\n    uuid(250E5EEA-DB5C-4C76-B6F3-8C46F12E3203),\n    pointer_default(unique)\n]\ninterface ICorDebugManagedCallback2 : IUnknown\n{\n    HRESULT FunctionRemapOpportunity([in] ICorDebugAppDomain *pAppDomain,\n                   [in] ICorDebugThread *pThread, [in] ICorDebugFunction *pOldFunction,\n                   [in] ICorDebugFunction *pNewFunction, [in] ULONG32 oldILOffset);\n\n    HRESULT CreateConnection([in] ICorDebugProcess *pProcess, [in] CONNID dwConnectionId,\n                                [in] WCHAR *pConnName);\n\n    HRESULT ChangeConnection([in] ICorDebugProcess *pProcess, [in] CONNID dwConnectionId );\n\n    HRESULT DestroyConnection([in] ICorDebugProcess *pProcess, [in] CONNID dwConnectionId );\n\n\n    typedef enum CorDebugExceptionCallbackType\n    {\n        DEBUG_EXCEPTION_FIRST_CHANCE = 1,\n        DEBUG_EXCEPTION_USER_FIRST_CHANCE = 2,\n        DEBUG_EXCEPTION_CATCH_HANDLER_FOUND = 3,\n        DEBUG_EXCEPTION_UNHANDLED = 4\n    } CorDebugExceptionCallbackType;\n\n    typedef enum CorDebugExceptionFlags\n    {\n        DEBUG_EXCEPTION_CAN_BE_INTERCEPTED = 0x0001\n    } CorDebugExceptionFlags;\n\n    HRESULT Exception( [in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,\n                       [in] ICorDebugFrame *pFrame, [in] ULONG32 nOffset,\n                       [in] CorDebugExceptionCallbackType dwEventType, [in] DWORD dwFlags );\n\n    typedef enum CorDebugExceptionUnwindCallbackType\n    {\n        DEBUG_EXCEPTION_UNWIND_BEGIN = 1,\n        DEBUG_EXCEPTION_INTERCEPTED = 2\n    } CorDebugExceptionUnwindCallbackType;\n\n    HRESULT ExceptionUnwind( [in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,\n                             [in] CorDebugExceptionUnwindCallbackType dwEventType,\n                             [in] DWORD dwFlags );\n\n    HRESULT FunctionRemapComplete([in] ICorDebugAppDomain *pAppDomain,\n                             [in] ICorDebugThread *pThread, [in] ICorDebugFunction *pFunction);\n\n    HRESULT MDANotification([in] ICorDebugController * pController,\n                            [in] ICorDebugThread *pThread, [in] ICorDebugMDA * pMDA\n    );\n\n}\n[\n    object,\n    local,\n    uuid(3d6f5f61-7538-11d3-8d5b-00104b35e7ef),\n    pointer_default(unique)\n]\ninterface ICorDebug : IUnknown\n{\n    HRESULT Initialize();\n    HRESULT Terminate();\n    HRESULT SetManagedHandler([in] ICorDebugManagedCallback *pCallback);\n    HRESULT SetUnmanagedHandler([in] ICorDebugUnmanagedCallback *pCallback);\n    HRESULT CreateProcess([in] LPCWSTR lpApplicationName, [in] LPWSTR lpCommandLine,\n                          [in] LPSECURITY_ATTRIBUTES lpProcessAttributes,\n                          [in] LPSECURITY_ATTRIBUTES lpThreadAttributes,\n                          [in] BOOL bInheritHandles, [in] DWORD dwCreationFlags,\n                          [in] PVOID lpEnvironment, [in] LPCWSTR lpCurrentDirectory,\n                          [in] LPSTARTUPINFOW lpStartupInfo,\n                          [in] LPPROCESS_INFORMATION lpProcessInformation,\n                          [in] CorDebugCreateProcessFlags debuggingFlags,\n                          [out] ICorDebugProcess **ppProcess);\n\n    HRESULT DebugActiveProcess([in] DWORD id, [in] BOOL win32Attach,\n                               [out] ICorDebugProcess **ppProcess);\n    HRESULT EnumerateProcesses([out] ICorDebugProcessEnum **ppProcess);\n    HRESULT GetProcess([in] DWORD dwProcessId, [out] ICorDebugProcess **ppProcess);\n    HRESULT CanLaunchOrAttach([in] DWORD dwProcessId, [in] BOOL win32DebuggingEnabled);\n}\n\n\n[\n    object,\n    local,\n    uuid(CC7BCAE8-8A68-11d2-983C-0000F808342D),\n    pointer_default(unique)\n]\ninterface ICorDebugBreakpoint : IUnknown\n{\n    HRESULT Activate([in] BOOL bActive);\n    HRESULT IsActive([out] BOOL *pbActive);\n}\n\n[\n    object,\n    local,\n    uuid(CC7BCAE9-8A68-11d2-983C-0000F808342D),\n    pointer_default(unique)\n]\ninterface ICorDebugFunctionBreakpoint : ICorDebugBreakpoint\n{\n    HRESULT GetFunction([out] ICorDebugFunction **ppFunction);\n    HRESULT GetOffset([out] ULONG32 *pnOffset);\n}\n\n[\n    object,\n    local,\n    uuid(CC7BCAEA-8A68-11d2-983C-0000F808342D),\n    pointer_default(unique)\n]\ninterface ICorDebugModuleBreakpoint : ICorDebugBreakpoint\n{\n    HRESULT GetModule([out] ICorDebugModule **ppModule);\n}\n\n[\n    object,\n    local,\n    uuid(CC7BCAEB-8A68-11d2-983C-0000F808342D),\n    pointer_default(unique)\n]\ninterface ICorDebugValueBreakpoint : ICorDebugBreakpoint\n{\n    HRESULT GetValue([out] ICorDebugValue **ppValue);\n}\n\n[\n    object,\n    local,\n    uuid(CC7BCAEC-8A68-11d2-983C-0000F808342D),\n    pointer_default(unique)\n]\ninterface ICorDebugStepper : IUnknown\n{\n    HRESULT IsActive([out] BOOL *pbActive);\n    HRESULT Deactivate();\n\n    typedef enum CorDebugIntercept\n    {\n          INTERCEPT_NONE                = 0x0 ,\n          INTERCEPT_CLASS_INIT          = 0x01,\n          INTERCEPT_EXCEPTION_FILTER    = 0x02,\n          INTERCEPT_SECURITY            = 0x04,\n          INTERCEPT_CONTEXT_POLICY      = 0x08,\n          INTERCEPT_INTERCEPTION        = 0x10,\n          INTERCEPT_ALL                 = 0xffff\n    } CorDebugIntercept;\n\n    HRESULT SetInterceptMask([in] CorDebugIntercept mask);\n\n    typedef enum CorDebugUnmappedStop\n    {\n        STOP_NONE               = 0x0,\n        STOP_PROLOG             = 0x01,\n        STOP_EPILOG             = 0x02,\n        STOP_NO_MAPPING_INFO    = 0x04,\n        STOP_OTHER_UNMAPPED     = 0x08,\n        STOP_UNMANAGED          = 0x10,\n\n        STOP_ALL                = 0xffff,\n\n    } CorDebugUnmappedStop;\n\n    HRESULT SetUnmappedStopMask([in] CorDebugUnmappedStop mask);\n    HRESULT Step([in] BOOL bStepIn);\n\n    typedef struct COR_DEBUG_STEP_RANGE\n    {\n        ULONG32 startOffset, endOffset;\n    } COR_DEBUG_STEP_RANGE;\n\n    HRESULT StepRange([in] BOOL bStepIn, [in] COR_DEBUG_STEP_RANGE ranges[], [in] ULONG32 cRangeCount);\n    HRESULT StepOut();\n    HRESULT SetRangeIL([in] BOOL bIL);\n}\n\n[\n    object,\n    local,\n    uuid(CC7BCB01-8A68-11d2-983C-0000F808342D),\n    pointer_default(unique)\n]\ninterface ICorDebugEnum : IUnknown\n{\n    HRESULT Skip([in] ULONG celt);\n    HRESULT Reset();\n    HRESULT Clone([out] ICorDebugEnum **ppEnum);\n    HRESULT GetCount([out] ULONG *pcelt);\n}\n\n[\n    object,\n    local,\n    uuid(63ca1b24-4359-4883-bd57-13f815f58744),\n    pointer_default(unique)\n]\n\ninterface ICorDebugAppDomainEnum : ICorDebugEnum\n{\n    HRESULT Next([in] ULONG celt, [out] ICorDebugAppDomain *values[], [out] ULONG *pceltFetched);\n\n}\n\n[\n    object,\n    local,\n    uuid(4a2a1ec9-85ec-4bfb-9f15-a89fdfe0fe83),\n    pointer_default(unique)\n]\ninterface ICorDebugAssemblyEnum : ICorDebugEnum\n{\n    HRESULT Next([in] ULONG celt, [out] ICorDebugAssembly *values[], [out] ULONG *pceltFetched);\n\n}\n\n[\n    object,\n    local,\n    uuid(CC7BCB03-8A68-11d2-983C-0000F808342D),\n    pointer_default(unique)\n]\ninterface ICorDebugBreakpointEnum : ICorDebugEnum\n{\n    HRESULT Next([in] ULONG celt, [out] ICorDebugBreakpoint *breakpoints[], [out] ULONG *pceltFetched);\n}\n\n[\n    object,\n    local,\n    uuid(CC7BCB08-8A68-11d2-983C-0000F808342D),\n    pointer_default(unique)\n]\ninterface ICorDebugChainEnum : ICorDebugEnum\n{\n    HRESULT Next([in] ULONG celt, [out] ICorDebugChain *chains[], [out] ULONG *pceltFetched);\n}\n\n[\n    object,\n    local,\n    uuid(F0E18809-72B5-11d2-976F-00A0C9B4D50C),\n    pointer_default(unique)\n]\ninterface ICorDebugErrorInfoEnum : ICorDebugEnum\n{\n    HRESULT Next([in] ULONG celt, [out] ICorDebugEditAndContinueErrorInfo *errors[],\n                 [out] ULONG *pceltFetched);\n}\n\n[\n    object,\n    local,\n    uuid(CC7BCB07-8A68-11d2-983C-0000F808342D),\n    pointer_default(unique)\n]\ninterface ICorDebugFrameEnum : ICorDebugEnum\n{\n    HRESULT Next([in] ULONG celt, [out] ICorDebugFrame *frames[], [out] ULONG *pceltFetched);\n}\n\n[\n    object,\n    local,\n    uuid(CC7BCB09-8A68-11d2-983C-0000F808342D),\n    pointer_default(unique)\n]\ninterface ICorDebugModuleEnum : ICorDebugEnum\n{\n    HRESULT Next([in] ULONG celt, [out] ICorDebugModule *modules[], [out] ULONG *pceltFetched);\n}\n\n[\n    object,\n    local,\n    uuid(CC7BCB02-8A68-11d2-983C-0000F808342D),\n    pointer_default(unique)\n]\ninterface ICorDebugObjectEnum : ICorDebugEnum\n{\n    HRESULT Next([in] ULONG celt, [out] CORDB_ADDRESS objects[], [out] ULONG *pceltFetched);\n}\n\n[\n    object,\n    local,\n    uuid(CC7BCB05-8A68-11d2-983C-0000F808342D),\n    pointer_default(unique)\n]\ninterface ICorDebugProcessEnum : ICorDebugEnum\n{\n    HRESULT Next([in] ULONG celt, [out] ICorDebugProcess *processes[], [out] ULONG *pceltFetched);\n}\n\n[\n    object,\n    local,\n    uuid(CC7BCB04-8A68-11d2-983C-0000F808342D),\n    pointer_default(unique)\n]\ninterface ICorDebugStepperEnum : ICorDebugEnum\n{\n    HRESULT Next([in] ULONG celt, [out] ICorDebugStepper *steppers[], [out] ULONG *pceltFetched);\n}\n\n[\n    object,\n    local,\n    uuid(CC7BCB06-8A68-11d2-983C-0000F808342D),\n    pointer_default(unique)\n]\ninterface ICorDebugThreadEnum : ICorDebugEnum\n{\n    HRESULT Next([in] ULONG celt, [out] ICorDebugThread *threads[], [out] ULONG *pceltFetched);\n}\n\n[\n    object,\n    local,\n    uuid(CC7BCAEE-8A68-11d2-983C-0000F808342D),\n    pointer_default(unique)\n]\ninterface ICorDebugChain : IUnknown\n{\n    HRESULT GetThread([out] ICorDebugThread **ppThread);\n    HRESULT GetStackRange([out] CORDB_ADDRESS *pStart, [out] CORDB_ADDRESS *pEnd);\n    HRESULT GetContext([out] ICorDebugContext **ppContext);\n    HRESULT GetCaller([out] ICorDebugChain **ppChain);\n    HRESULT GetCallee([out] ICorDebugChain **ppChain);\n    HRESULT GetPrevious([out] ICorDebugChain **ppChain);\n    HRESULT GetNext([out] ICorDebugChain **ppChain);\n    HRESULT IsManaged([out] BOOL *pManaged);\n    HRESULT EnumerateFrames([out] ICorDebugFrameEnum **ppFrames);\n    HRESULT GetActiveFrame([out] ICorDebugFrame **ppFrame);\n    HRESULT GetRegisterSet([out] ICorDebugRegisterSet **ppRegisters);\n    typedef enum CorDebugChainReason\n    {\n        CHAIN_NONE              = 0x000,\n        CHAIN_CLASS_INIT        = 0x001,\n        CHAIN_EXCEPTION_FILTER  = 0x002,\n        CHAIN_SECURITY          = 0x004,\n        CHAIN_CONTEXT_POLICY    = 0x008,\n        CHAIN_INTERCEPTION      = 0x010,\n        CHAIN_PROCESS_START     = 0x020,\n        CHAIN_THREAD_START      = 0x040,\n        CHAIN_ENTER_MANAGED     = 0x080,\n        CHAIN_ENTER_UNMANAGED   = 0x100,\n        CHAIN_DEBUGGER_EVAL     = 0x200,\n        CHAIN_CONTEXT_SWITCH    = 0x400,\n        CHAIN_FUNC_EVAL         = 0x800,\n    } CorDebugChainReason;\n\n    HRESULT GetReason([out] CorDebugChainReason *pReason);\n}\n\n[\n    object,\n    local,\n    uuid(CC7BCAEF-8A68-11d2-983C-0000F808342D),\n    pointer_default(unique)\n]\ninterface ICorDebugFrame : IUnknown\n{\n    HRESULT GetChain([out] ICorDebugChain **ppChain);\n    HRESULT GetCode([out] ICorDebugCode **ppCode);\n    HRESULT GetFunction([out] ICorDebugFunction **ppFunction);\n    HRESULT GetFunctionToken([out] mdMethodDef *pToken);\n    HRESULT GetStackRange([out] CORDB_ADDRESS *pStart, [out] CORDB_ADDRESS *pEnd);\n    HRESULT GetCaller([out] ICorDebugFrame **ppFrame);\n    HRESULT GetCallee([out] ICorDebugFrame **ppFrame);\n    HRESULT CreateStepper([out] ICorDebugStepper **ppStepper);\n}\n\n\n[\n    object,\n    local,\n    uuid(CC7BCB0B-8A68-11d2-983C-0000F808342D),\n    pointer_default(unique)\n]\ninterface ICorDebugRegisterSet : IUnknown\n{\n    typedef enum CorDebugRegister\n    {\n        REGISTER_INSTRUCTION_POINTER = 0,\n        REGISTER_STACK_POINTER,\n        REGISTER_FRAME_POINTER,\n\n        REGISTER_X86_EIP = 0,\n        REGISTER_X86_ESP,\n        REGISTER_X86_EBP,\n\n        REGISTER_X86_EAX,\n        REGISTER_X86_ECX,\n        REGISTER_X86_EDX,\n        REGISTER_X86_EBX,\n\n        REGISTER_X86_ESI,\n        REGISTER_X86_EDI,\n\n        REGISTER_X86_FPSTACK_0,\n        REGISTER_X86_FPSTACK_1,\n        REGISTER_X86_FPSTACK_2,\n        REGISTER_X86_FPSTACK_3,\n        REGISTER_X86_FPSTACK_4,\n        REGISTER_X86_FPSTACK_5,\n        REGISTER_X86_FPSTACK_6,\n        REGISTER_X86_FPSTACK_7,\n\n        REGISTER_AMD64_RIP = 0,\n        REGISTER_AMD64_RSP,\n        REGISTER_AMD64_RBP,\n\n        REGISTER_AMD64_RAX,\n        REGISTER_AMD64_RCX,\n        REGISTER_AMD64_RDX,\n        REGISTER_AMD64_RBX,\n\n        REGISTER_AMD64_RSI,\n        REGISTER_AMD64_RDI,\n\n        REGISTER_AMD64_R8,\n        REGISTER_AMD64_R9,\n        REGISTER_AMD64_R10,\n        REGISTER_AMD64_R11,\n        REGISTER_AMD64_R12,\n        REGISTER_AMD64_R13,\n        REGISTER_AMD64_R14,\n        REGISTER_AMD64_R15,\n\n        REGISTER_AMD64_XMM0,\n        REGISTER_AMD64_XMM1,\n        REGISTER_AMD64_XMM2,\n        REGISTER_AMD64_XMM3,\n        REGISTER_AMD64_XMM4,\n        REGISTER_AMD64_XMM5,\n        REGISTER_AMD64_XMM6,\n        REGISTER_AMD64_XMM7,\n        REGISTER_AMD64_XMM8,\n        REGISTER_AMD64_XMM9,\n        REGISTER_AMD64_XMM10,\n        REGISTER_AMD64_XMM11,\n        REGISTER_AMD64_XMM12,\n        REGISTER_AMD64_XMM13,\n        REGISTER_AMD64_XMM14,\n        REGISTER_AMD64_XMM15,\n\n        REGISTER_IA64_BSP = REGISTER_FRAME_POINTER,\n\n        REGISTER_IA64_R0  = REGISTER_IA64_BSP + 1,\n        REGISTER_IA64_F0  = REGISTER_IA64_R0  + 128,\n\n    } CorDebugRegister;\n\n    HRESULT GetRegistersAvailable([out] ULONG64 *pAvailable);\n\n    HRESULT GetRegisters([in] ULONG64 mask, [in] ULONG32 regCount,\n                         [out] CORDB_REGISTER regBuffer[]);\n    HRESULT SetRegisters([in] ULONG64 mask, [in] ULONG32 regCount,\n                         [in] CORDB_REGISTER regBuffer[]);\n    HRESULT GetThreadContext([in] ULONG32 contextSize, [in, out] BYTE context[]);\n    HRESULT SetThreadContext([in] ULONG32 contextSize, [in] BYTE context[]);\n}\n\n[\n    object,\n    local,\n    uuid(CC7BCAF6-8A68-11d2-983C-0000F808342D),\n    pointer_default(unique)\n]\ninterface ICorDebugEval : IUnknown\n{\n    HRESULT CallFunction([in] ICorDebugFunction *pFunction, [in] ULONG32 nArgs,\n                         [in] ICorDebugValue *ppArgs[]);\n    HRESULT NewObject([in] ICorDebugFunction *pConstructor, [in] ULONG32 nArgs,\n                      [in] ICorDebugValue *ppArgs[]);\n    HRESULT NewObjectNoConstructor([in] ICorDebugClass *pClass);\n    HRESULT NewString([in] LPCWSTR string);\n    HRESULT NewArray([in] CorElementType elementType, [in] ICorDebugClass *pElementClass,\n                     [in] ULONG32 rank, [in] ULONG32 dims[], [in] ULONG32 lowBounds[]);\n    HRESULT IsActive([out] BOOL *pbActive);\n    HRESULT Abort();\n    HRESULT GetResult([out] ICorDebugValue **ppResult);\n    HRESULT GetThread([out] ICorDebugThread **ppThread);\n    HRESULT CreateValue([in] CorElementType elementType, [in] ICorDebugClass *pElementClass,\n                        [out] ICorDebugValue **ppValue);\n}\n\n[\n    object,\n    local,\n    uuid(6DC3FA01-D7CB-11d2-8A95-0080C792E5D8),\n    pointer_default(unique)\n]\ninterface ICorDebugEditAndContinueSnapshot : IUnknown\n{\n    HRESULT CopyMetaData([in] IStream *pIStream, [out] GUID *pMvid);\n    HRESULT GetMvid([out] GUID *pMvid);\n    HRESULT GetRoDataRVA([out] ULONG32 *pRoDataRVA);\n    HRESULT GetRwDataRVA([out] ULONG32 *pRwDataRVA);\n    HRESULT SetPEBytes([in] IStream *pIStream);\n    HRESULT SetILMap([in] mdToken mdFunction, [in] ULONG cMapSize, [in] COR_IL_MAP map[]);\n    HRESULT SetPESymbolBytes([in] IStream *pIStream);\n}\n\n[\n    object,\n    local,\n    uuid(dba2d8c1-e5c5-4069-8c13-10a7c6abf43d),\n    pointer_default(unique)\n]\ninterface ICorDebugModule : IUnknown\n{\n    HRESULT GetProcess([out] ICorDebugProcess **ppProcess);\n    HRESULT GetBaseAddress([out] CORDB_ADDRESS *pAddress);\n    HRESULT GetAssembly([out] ICorDebugAssembly **ppAssembly);\n    HRESULT GetName([in] ULONG32 cchName, [out] ULONG32 *pcchName, [out] WCHAR szName[]);\n    HRESULT EnableJITDebugging([in] BOOL bTrackJITInfo, [in] BOOL bAllowJitOpts);\n    HRESULT EnableClassLoadCallbacks([in] BOOL bClassLoadCallbacks);\n    HRESULT GetFunctionFromToken([in] mdMethodDef methodDef, [out] ICorDebugFunction **ppFunction);\n    HRESULT GetFunctionFromRVA([in] CORDB_ADDRESS rva, [out] ICorDebugFunction **ppFunction);\n    HRESULT GetClassFromToken([in] mdTypeDef typeDef, [out] ICorDebugClass **ppClass);\n    HRESULT CreateBreakpoint([out] ICorDebugModuleBreakpoint **ppBreakpoint);\n    HRESULT GetEditAndContinueSnapshot([out] ICorDebugEditAndContinueSnapshot **ppEditAndContinueSnapshot);\n    HRESULT GetMetaDataInterface([in] REFIID riid, [out] IUnknown **ppObj);\n    HRESULT GetToken([out] mdModule *pToken);\n    HRESULT IsDynamic([out] BOOL *pDynamic);\n    HRESULT GetGlobalVariableValue([in] mdFieldDef fieldDef, [out] ICorDebugValue **ppValue);\n    HRESULT GetSize([out] ULONG32 *pcBytes);\n    HRESULT IsInMemory([out] BOOL *pInMemory);\n}\n\n[\n    object,\n    local,\n    uuid(CC7BCAF5-8A68-11d2-983C-0000F808342D),\n    pointer_default(unique)\n]\ninterface ICorDebugClass : IUnknown\n{\n    HRESULT GetModule([out] ICorDebugModule **pModule);\n    HRESULT GetToken([out] mdTypeDef *pTypeDef);\n    HRESULT GetStaticFieldValue([in] mdFieldDef fieldDef, [in] ICorDebugFrame *pFrame,\n                                [out] ICorDebugValue **ppValue);\n}\n\n[\n    object,\n    local,\n    uuid(df59507c-d47a-459e-bce2-6427eac8fd06),\n    pointer_default(unique)\n]\ninterface ICorDebugAssembly : IUnknown\n{\n    HRESULT GetProcess([out] ICorDebugProcess **ppProcess);\n    HRESULT GetAppDomain([out] ICorDebugAppDomain **ppAppDomain);\n    HRESULT EnumerateModules([out] ICorDebugModuleEnum **ppModules);\n    HRESULT GetCodeBase([in] ULONG32 cchName, [out] ULONG32 *pcchName, [out] WCHAR szName[]);\n    HRESULT GetName([in] ULONG32 cchName, [out] ULONG32 *pcchName, [out] WCHAR szName[]);\n}\n\n\n[\n    object,\n    local,\n    uuid(CC7BCAF3-8A68-11d2-983C-0000F808342D),\n    pointer_default(unique)\n]\ninterface ICorDebugFunction : IUnknown\n{\n    HRESULT GetModule([out] ICorDebugModule **ppModule);\n    HRESULT GetClass([out] ICorDebugClass **ppClass);\n    HRESULT GetToken([out] mdMethodDef *pMethodDef);\n    HRESULT GetILCode([out] ICorDebugCode **ppCode);\n    HRESULT GetNativeCode([out] ICorDebugCode **ppCode);\n    HRESULT CreateBreakpoint([out] ICorDebugFunctionBreakpoint **ppBreakpoint);\n    HRESULT GetLocalVarSigToken([out] mdSignature *pmdSig);\n    HRESULT GetCurrentVersionNumber([out] ULONG32 *pnCurrentVersion);\n}\n\n[\n    object,\n    local,\n    uuid(5263E909-8CB5-11d3-BD2F-0000F80849BD),\n    pointer_default(unique)\n]\ninterface ICorDebugUnmanagedCallback : IUnknown\n{\n    HRESULT DebugEvent([in] LPDEBUG_EVENT pDebugEvent, [in] BOOL fOutOfBand);\n}\n\n[\n    object,\n    local,\n    uuid(8D600D41-F4F6-4cb3-B7EC-7BD164944036),\n    pointer_default(unique)\n]\ninterface ICorDebugEditAndContinueErrorInfo : IUnknown\n{\n    HRESULT GetModule([out] ICorDebugModule **ppModule);\n    HRESULT GetToken([out]mdToken *pToken);\n    HRESULT GetErrorCode([out]HRESULT *pHr);\n    HRESULT GetString([in] ULONG32 cchString, [out] ULONG32 *pcchString,\n                      [out] WCHAR szString[]);\n}\n\n[\n    object,\n    local,\n    uuid(18AD3D6E-B7D2-11d2-BD04-0000F80849BD),\n    pointer_default(unique)\n]\ninterface ICorDebugObjectValue : ICorDebugValue\n{\n    HRESULT GetClass([out] ICorDebugClass **ppClass);\n    HRESULT GetFieldValue([in] ICorDebugClass *pClass, [in] mdFieldDef fieldDef,\n                          [out] ICorDebugValue **ppValue);\n    HRESULT GetVirtualMethod([in] mdMemberRef memberRef, [out] ICorDebugFunction **ppFunction);\n    HRESULT GetContext([out] ICorDebugContext **ppContext);\n    HRESULT IsValueClass([out] BOOL *pbIsValueClass);\n    HRESULT GetManagedCopy([out] IUnknown **ppObject);\n    HRESULT SetFromManagedCopy([in] IUnknown *pObject);\n}\n\n[\n    object,\n    local,\n    uuid(CC7BCB00-8A68-11d2-983C-0000F808342D),\n    pointer_default(unique)\n]\ninterface ICorDebugContext : ICorDebugObjectValue\n{\n}\n\n[\n    object,\n    local,\n    uuid(CC7BCAF4-8A68-11d2-983C-0000F808342D),\n    pointer_default(unique)\n]\ninterface ICorDebugCode : IUnknown\n{\n    HRESULT IsIL([out] BOOL *pbIL);\n    HRESULT GetFunction([out] ICorDebugFunction **ppFunction);\n    HRESULT GetAddress([out] CORDB_ADDRESS *pStart);\n    HRESULT GetSize([out] ULONG32 *pcBytes);\n    HRESULT CreateBreakpoint([in] ULONG32 offset, [out] ICorDebugFunctionBreakpoint **ppBreakpoint);\n    HRESULT GetCode([in] ULONG32 startOffset, [in] ULONG32 endOffset,\n                    [in] ULONG32 cBufferAlloc, [out] BYTE buffer[], [out] ULONG32 *pcBufferSize);\n    HRESULT GetVersionNumber([out] ULONG32 *nVersion);\n    HRESULT GetILToNativeMapping([in] ULONG32 cMap, [out] ULONG32 *pcMap,\n                                 [out] COR_DEBUG_IL_TO_NATIVE_MAP map[]);\n    HRESULT GetEnCRemapSequencePoints([in] ULONG32 cMap,[out] ULONG32 *pcMap,\n                                      [out] ULONG32 offsets[]);\n}\n\n[\n    object,\n    local,\n    uuid(CC726F2F-1DB7-459b-B0EC-05F01D841B42),\n    pointer_default(unique)\n]\ninterface ICorDebugMDA : IUnknown\n{\n    HRESULT GetName([in] ULONG32 cchName, [out] ULONG32 * pcchName, [out] WCHAR szName[]);\n\n    HRESULT GetDescription([in] ULONG32 cchName, [out] ULONG32 * pcchName, [out] WCHAR szName[]);\n\n    HRESULT GetXML([in] ULONG32 cchName, [out] ULONG32 * pcchName, [out] WCHAR szName[]);\n\n    typedef enum CorDebugMDAFlags\n    {\n        MDA_FLAG_SLIP = 0x2\n    } CorDebugMDAFlags;\n\n    HRESULT GetFlags([in] CorDebugMDAFlags * pFlags);\n\n    HRESULT GetOSThreadId([out] DWORD * pOsTid);\n}\n"
  },
  {
    "path": "wine/windows/corerror.h",
    "content": "/*\n * Copyright 2008 James Hawkins\n * Copyright 2014 Kai Tietz\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_CORERROR_H\n#define __WINE_CORERROR_H\n\n#include <winerror.h>\n\n#ifndef FACILITY_URT\n#define FACILITY_URT 0x13\n#endif\n\n#ifndef EMAKEHR\n#define SMAKEHR(val) MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_URT, val)\n#define EMAKEHR(val) MAKE_HRESULT(SEVERITY_ERROR, FACILITY_URT, val)\n#endif\n\n#define COR_E_ARGUMENT              E_INVALIDARG\n#define COR_E_INVALIDCAST           E_NOINTERFACE\n#define COR_E_NULLREFERENCE         E_POINTER\n#define COR_E_OUTOFMEMORY           E_OUTOFMEMORY\n#define COR_E_UNAUTHORIZEDACCESS    E_ACCESSDENIED\n\n#define COR_E_ARITHMETIC            HRESULT_FROM_WIN32(ERROR_ARITHMETIC_OVERFLOW)\n#define COR_E_STACKOVERFLOW         HRESULT_FROM_WIN32(ERROR_STACK_OVERFLOW)\n#define COR_E_ENDOFSTREAM           HRESULT_FROM_WIN32(ERROR_HANDLE_EOF)\n#define COR_E_FILENOTFOUND          HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)\n#define COR_E_BAD_PATHNAME          HRESULT_FROM_WIN32(ERROR_BAD_PATHNAME)\n#define COR_E_DIRECTORYNOTFOUND     HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND)\n#define COR_E_PATHTOOLONG           HRESULT_FROM_WIN32(ERROR_FILENAME_EXCED_RANGE)\n\n#define COR_E_AMBIGUOUSMATCH    _HRESULT_TYPEDEF_(0x8000211D)\n#define COR_E_TARGETPARAMCOUNT  _HRESULT_TYPEDEF_(0x8002000E)\n#define COR_E_DIVIDEBYZERO      _HRESULT_TYPEDEF_(0x80020012)\n#define COR_E_BADIMAGEFORMAT    _HRESULT_TYPEDEF_(0x8007000B)\n\n#define COR_E_ASSEMBLYEXPECTED          EMAKEHR(0x1018)\n#define COR_E_TYPEUNLOADED              EMAKEHR(0x1013)\n#define COR_E_APPDOMAINUNLOADED         EMAKEHR(0x1014)\n#define COR_E_CANNOTUNLOADAPPDOMAIN     EMAKEHR(0x1015)\n#define COR_E_FIXUPSINEXE               EMAKEHR(0x1019)\n#define COR_E_NO_LOADLIBRARY_ALLOWED    EMAKEHR(0x101a)\n#define COR_E_NEWER_RUNTIME             EMAKEHR(0x101b)\n#define COR_E_CANNOT_SET_POLICY         EMAKEHR(0x101c)\n#define COR_E_CANNOT_SPECIFY_EVIDENCE   EMAKEHR(0x101d)\n#define COR_E_MULTIMODULEASSEMBLIESDIALLOWED EMAKEHR(0x101e)\n#define COR_E_MODULE_HASH_CHECK_FAILED  EMAKEHR(0x1039)\n#define COR_E_ASSEMBLY_NOT_EXPECTED     EMAKEHR(0x1057)\n#define COR_E_EXCEPTION                 EMAKEHR(0x1500)\n#define COR_E_SYSTEM                    EMAKEHR(0x1501)\n#define COR_E_ARGUMENTOUTOFRANGE        EMAKEHR(0x1502)\n#define COR_E_ARRAYTYPEMISMATCH         EMAKEHR(0x1503)\n#define COR_E_CONTEXTMARSHAL            EMAKEHR(0x1504)\n#define COR_E_TIMEOUT                   EMAKEHR(0x1505)\n#define COR_E_EXECUTIONENGINE           EMAKEHR(0x1506)\n#define COR_E_FIELDACCESS               EMAKEHR(0x1507)\n#define COR_E_INDEXOUTOFRANGE           EMAKEHR(0x1508)\n#define COR_E_INVALIDOPERATION          EMAKEHR(0x1509)\n#define COR_E_SECURITY                  EMAKEHR(0x150A)\n#define COR_E_REMOTING                  EMAKEHR(0x150B)\n#define COR_E_SERIALIZATION             EMAKEHR(0x150C)\n#define COR_E_VERIFICATION              EMAKEHR(0x150D)\n#define COR_E_SERVER                    EMAKEHR(0x150E)\n#define COR_E_SERVICEDCOMPONENT         EMAKEHR(0x150F)\n#define COR_E_METHODACCESS              EMAKEHR(0x1510)\n#define COR_E_MISSINGFIELD              EMAKEHR(0x1511)\n#define COR_E_MISSINGMEMBER             EMAKEHR(0x1512)\n#define COR_E_MISSINGMETHOD             EMAKEHR(0x1513)\n#define COR_E_MULTICASTNOTSUPPORTED     EMAKEHR(0x1514)\n#define COR_E_NOTSUPPORTED              EMAKEHR(0x1515)\n#define COR_E_OVERFLOW                  EMAKEHR(0x1516)\n#define COR_E_RANK                      EMAKEHR(0x1517)\n#define COR_E_SYNCHRONIZATIONLOCK       EMAKEHR(0x1518)\n#define COR_E_THREADINTERRUPTED         EMAKEHR(0x1519)\n#define COR_E_MEMBERACCESS              EMAKEHR(0x151A)\n#define COR_E_THREADSTATE               EMAKEHR(0x1520)\n#define COR_E_THREADSTOP                EMAKEHR(0x1521)\n#define COR_E_TYPELOAD                  EMAKEHR(0x1522)\n#define COR_E_ENTRYPOINTNOTFOUND        EMAKEHR(0x1523)\n#define COR_E_DLLNOTFOUND               EMAKEHR(0x1524)\n#define COR_E_THREADSTART               EMAKEHR(0x1525)\n#define COR_E_INVALIDCOMOBJECT          EMAKEHR(0x1527)\n#define COR_E_NOTFINITENUMBER           EMAKEHR(0x1528)\n#define COR_E_DUPLICATEWAITOBJECT       EMAKEHR(0x1529)\n#define COR_E_SEMAPHOREFULL             EMAKEHR(0x152B)\n#define COR_E_WAITHANDLECANNOTBEOPENED  EMAKEHR(0x152C)\n#define COR_E_ABANDONEDMUTEX            EMAKEHR(0x152D)\n#define COR_E_THREADABORTED             EMAKEHR(0x1530)\n#define COR_E_INVALIDOLEVARIANTTYPE     EMAKEHR(0x1531)\n#define COR_E_MISSINGMANIFESTRESOURCE   EMAKEHR(0x1532)\n#define COR_E_SAFEARRAYTYPEMISMATCH     EMAKEHR(0x1533)\n#define COR_E_TYPEINITIALIZATION        EMAKEHR(0x1534)\n#define COR_E_MARSHALDIRECTIVE          EMAKEHR(0x1535)\n#define COR_E_MISSINGSATELLITEASSEMBLY  EMAKEHR(0x1536)\n#define COR_E_FORMAT                    EMAKEHR(0x1537)\n#define COR_E_SAFEARRAYRANKMISMATCH     EMAKEHR(0x1538)\n#define COR_E_PLATFORMNOTSUPPORTED      EMAKEHR(0x1539)\n#define COR_E_INVALIDPROGRAM            EMAKEHR(0x153A)\n#define COR_E_OPERATIONCANCELED         EMAKEHR(0x153B)\n#define COR_E_INSUFFICIENTMEMORY        EMAKEHR(0x153D)\n#define COR_E_RUNTIMEWRAPPED            EMAKEHR(0x153E)\n#define COR_E_DEVICESNOTSUPPORTED       EMAKEHR(0x1540)\n#define COR_E_DATAMISALIGNED            EMAKEHR(0x1541)\n#define COR_E_CODECONTRACTFAILED        EMAKEHR(0x1542)\n#define COR_E_TYPEACCESS                EMAKEHR(0x1543)\n#define COR_E_ACCESSING_CCW             EMAKEHR(0x1544)\n#define COR_E_LOADING_REFERENCE_ASSEMBLY EMAKEHR(0x1058)\n#define COR_E_KEYNOTFOUND               EMAKEHR(0x1577)\n#define COR_E_INSUFFICIENTEXECUTIONSTACK EMAKEHR(0x1578)\n#define COR_E_APPLICATION               EMAKEHR(0x1600)\n#define COR_E_INVALIDFILTERCRITERIA     EMAKEHR(0x1601)\n#define COR_E_REFLECTIONTYPELOAD        EMAKEHR(0x1602)\n#define COR_E_TARGET                    EMAKEHR(0x1603)\n#define COR_E_TARGETINVOCATION          EMAKEHR(0x1604)\n#define COR_E_CUSTOMATTRIBUTEFORMAT     EMAKEHR(0x1605)\n#define COR_E_IO                        EMAKEHR(0x1620)\n#define COR_E_FILELOAD                  EMAKEHR(0x1621)\n#define COR_E_OBJECTDISPOSED            EMAKEHR(0x1622)\n#define COR_E_FAILFAST                  EMAKEHR(0x1623)\n#define COR_E_HOSTPROTECTION            EMAKEHR(0x1640)\n#define COR_E_ILLEGAL_REENTRANCY        EMAKEHR(0x1641)\n\n#define COR_E_SqlException EMAKEHR(0x1904)\n#define COR_E_Data EMAKEHR(0x1920)\n#define COR_E_DataDeletedRowInaccessible EMAKEHR(0x1921)\n#define COR_E_DataDuplicateName EMAKEHR(0x1922)\n#define COR_E_DataInRowChangingEvent EMAKEHR(0x1923)\n#define COR_E_DataInvalidConstraint EMAKEHR(0x1924)\n#define COR_E_DataMissingPrimaryKey EMAKEHR(0x1925)\n#define COR_E_DataNoNullAllowed EMAKEHR(0x1926)\n#define COR_E_DataReadOnly EMAKEHR(0x1927)\n#define COR_E_DataRowNotInTable EMAKEHR(0x1928)\n#define COR_E_DataVersionNotFound EMAKEHR(0x1929)\n#define COR_E_DataConstraint EMAKEHR(0x192a)\n#define COR_E_StrongTyping EMAKEHR(0x192b)\n#define COR_E_SqlType EMAKEHR(0x1930)\n#define COR_E_SqlNullValue EMAKEHR(0x1931)\n#define COR_E_SqlTruncate EMAKEHR(0x1932)\n#define COR_E_AdapterMapping EMAKEHR(0x1933)\n#define COR_E_DataAdapter EMAKEHR(0x1934)\n#define COR_E_DBConcurrency EMAKEHR(0x1935)\n#define COR_E_OperationAborted EMAKEHR(0x1936)\n#define COR_E_InvalidUdt EMAKEHR(0x1937)\n#define COR_E_OdbcException EMAKEHR(0x1937)\n#define COR_E_OracleException EMAKEHR(0x1938)\n#define COR_E_Xml EMAKEHR(0x1940)\n#define COR_E_XmlSchema EMAKEHR(0x1941)\n#define COR_E_XmlXslt EMAKEHR(0x1942)\n#define COR_E_XmlXPath EMAKEHR(0x1943)\n#define COR_E_XmlQuery EMAKEHR(0x1944)\n\n#define FUSION_E_REF_DEF_MISMATCH EMAKEHR(0x1040)\n#define FUSION_E_INVALID_PRIVATE_ASM_LOCATION EMAKEHR(0x1041)\n#define FUSION_E_ASM_MODULE_MISSING EMAKEHR(0x1042)\n#define FUSION_E_UNEXPECTED_MODULE_FOUND EMAKEHR(0x1043)\n#define FUSION_E_PRIVATE_ASM_DISALLOWED EMAKEHR(0x1044)\n#define FUSION_E_SIGNATURE_CHECK_FAILED EMAKEHR(0x1045)\n#define FUSION_E_DATABASE_ERROR         EMAKEHR(0x1046)\n#define FUSION_E_INVALID_NAME           EMAKEHR(0x1047)\n#define FUSION_E_CODE_DOWNLOAD_DISABLED EMAKEHR(0x1048)\n#define FUSION_E_UNINSTALL_DISALLOWED   EMAKEHR(0x1049)\n#define FUSION_E_HOST_GAC_ASM_MISMATCH  EMAKEHR(0x1050)\n#define FUSION_E_LOADFROM_BLOCKED       EMAKEHR(0x1051)\n#define FUSION_E_CACHEFILE_FAILED       EMAKEHR(0x1052)\n#define FUSION_E_APP_DOMAIN_LOCKED      EMAKEHR(0x1053)\n#define FUSION_E_CONFIGURATION_ERROR    EMAKEHR(0x1054)\n#define FUSION_E_MANIFEST_PARSE_ERROR   EMAKEHR(0x1055)\n#define FUSION_E_INVALID_ASSEMBLY_REFERENCE EMAKEHR(0x1056)\n\n#define CLDB_E_FILE_BADREAD             EMAKEHR(0x1100)\n#define CLDB_E_FILE_BADWRITE            EMAKEHR(0x1101)\n#define CLDB_E_FILE_READONLY            EMAKEHR(0x1103)\n#define CLDB_E_NAME_ERROR               EMAKEHR(0x1105)\n#define CLDB_E_TRUNCATION               EMAKEHR(0x1106)\n#define CLDB_E_FILE_OLDVER              EMAKEHR(0x1107)\n#define CLDB_E_RELOCATED                EMAKEHR(0x1108)\n#define CLDB_E_SMDUPLICATE              EMAKEHR(0x110a)\n#define CLDB_E_NO_DATA                  EMAKEHR(0x110b)\n#define CLDB_E_READONLY                 EMAKEHR(0x110c)\n#define CLDB_E_INCOMPATIBLE             EMAKEHR(0x110d)\n#define CLDB_E_FILE_CORRUPT             EMAKEHR(0x110e)\n#define CLDB_E_SCHEMA_VERNOTFOUND       EMAKEHR(0x110f)\n#define CLDB_E_BADUPDATEMODE            EMAKEHR(0x1110)\n#define CLDB_E_INDEX_NONULLKEYS         EMAKEHR(0x1121)\n#define CLDB_E_INDEX_DUPLICATE          EMAKEHR(0x1122)\n#define CLDB_E_INDEX_BADTYPE            EMAKEHR(0x1123)\n#define CLDB_E_INDEX_NOTFOUND           EMAKEHR(0x1124)\n#define CLDB_E_RECORD_NOTFOUND          EMAKEHR(0x1130)\n#define CLDB_E_RECORD_OVERFLOW          EMAKEHR(0x1131)\n#define CLDB_E_RECORD_DUPLICATE         EMAKEHR(0x1132)\n#define CLDB_E_RECORD_PKREQUIRED        EMAKEHR(0x1133)\n#define CLDB_E_RECORD_DELETED           EMAKEHR(0x1134)\n#define CLDB_E_RECORD_OUTOFORDER        EMAKEHR(0x1135)\n#define CLDB_E_COLUMN_OVERFLOW          EMAKEHR(0x1140)\n#define CLDB_E_COLUMN_READONLY          EMAKEHR(0x1141)\n#define CLDB_E_COLUMN_SPECIALCOL        EMAKEHR(0x1142)\n#define CLDB_E_COLUMN_PKNONULLS         EMAKEHR(0x1143)\n#define CLDB_E_TABLE_CANTDROP           EMAKEHR(0x1150)\n#define CLDB_E_OBJECT_NOTFOUND          EMAKEHR(0x1151)\n#define CLDB_E_OBJECT_COLNOTFOUND       EMAKEHR(0x1152)\n#define CLDB_E_VECTOR_BADINDEX          EMAKEHR(0x1153)\n#define CLDB_E_TOO_BIG                  EMAKEHR(0x1154)\n#define CLDB_E_INTERNALERROR            EMAKEHR(0x1fff)\n\n#define CLDB_S_TRUNCATION               SMAKEHR(0x1106)\n#define CLDB_S_NULL                     SMAKEHR(0x1109)\n#define CLDB_S_INDEX_TABLESCANREQUIRED  SMAKEHR(0x1125)\n\n#define CLR_E_APP_CONFIG_NOT_ALLOWED_IN_APPX_PROCESS EMAKEHR(0x104a)\n#define CLR_E_SHIM_RUNTIME                   EMAKEHR(0x1700)\n#define CLR_E_SHIM_RUNTIMELOAD               EMAKEHR(0x1700)\n#define CLR_E_SHIM_RUNTIMEEXPORT             EMAKEHR(0x1701)\n#define CLR_E_SHIM_INSTALLROOT               EMAKEHR(0x1702)\n#define CLR_E_SHIM_INSTALLCOMP               EMAKEHR(0x1703)\n#define CLR_E_SHIM_LEGACYRUNTIMEALREADYBOUND EMAKEHR(0x1704)\n#define CLR_E_SHIM_SHUTDOWNINPROGRESS        EMAKEHR(0x1705)\n#define CLR_E_BIND_ASSEMBLY_VERSION_TOO_LOW  EMAKEHR(0x2000)\n#define CLR_E_BIND_ASSEMBLY_PUBLIC_KEY_MISMATCH EMAKEHR(0x2001)\n#define CLR_E_BIND_IMAGE_UNAVAILABLE         EMAKEHR(0x2002)\n#define CLR_E_BIND_UNRECOGNIZED_IDENTITY_FORMAT EMAKEHR(0x2003)\n#define CLR_E_BIND_ASSEMBLY_NOT_FOUND        EMAKEHR(0x2004)\n#define CLR_E_BIND_TYPE_NOT_FOUND            EMAKEHR(0x2005)\n\n#define CLR_OPTSVC_E_CONTROLLER_INTERRUPT EMAKEHR(0x1e00)\n\n#define META_S_PARAM_MISMATCH SMAKEHR(0x1189)\n#define META_S_DUPLICATE      SMAKEHR(0x1197)\n\n#define TLBX_E_INVALID_TYPEINFO EMAKEHR(0x1160)\n#define TLBX_E_INVALID_TYPEINFO_UNNAMED EMAKEHR(0x1161)\n#define TLBX_E_CTX_NESTED EMAKEHR(0x1162)\n#define TLBX_E_ERROR_MESSAGE EMAKEHR(0x1163)\n#define TLBX_E_CANT_SAVE EMAKEHR(0x1164)\n#define TLBX_E_CANTLOADLIBRARY EMAKEHR(0x1166)\n#define TLBX_E_BAD_VT_TYPE EMAKEHR(0x1167)\n#define TLBX_E_NO_MSCOREE_TLB EMAKEHR(0x1168)\n#define TLBX_E_BAD_MSCOREE_TLB EMAKEHR(0x1169)\n#define TLBX_E_TLB_EXCEPTION EMAKEHR(0x116a)\n#define TLBX_E_MULTIPLE_LCIDS EMAKEHR(0x116b)\n#define TLBX_E_AMBIGUOUS_RETURN EMAKEHR(0x116d)\n#define TLBX_E_DUPLICATE_TYPE_NAME EMAKEHR(0x116e)\n#define TLBX_E_ASANY EMAKEHR(0x1175)\n#define TLBX_E_INVALIDLCIDPARAM EMAKEHR(0x1176)\n#define TLBX_E_LCIDONDISPONLYITF EMAKEHR(0x1177)\n#define TLBX_E_NONPUBLIC_FIELD EMAKEHR(0x1178)\n#define TLBX_E_BAD_NAMES EMAKEHR(0x117b)\n#define TLBX_E_GENERICINST_SIGNATURE EMAKEHR(0x117d)\n#define TLBX_E_GENERICPAR_SIGNATURE EMAKEHR(0x117e)\n#define TLBX_E_NO_SAFEHANDLE_ARRAYS EMAKEHR(0x1186)\n#define TLBX_E_NO_CRITICALHANDLE_ARRAYS EMAKEHR(0x118c)\n#define TLBX_E_CANT_LOAD_MODULE EMAKEHR(0x11a0)\n#define TLBX_E_CANT_LOAD_CLASS EMAKEHR(0x11a1)\n#define TLBX_E_NULL_MODULE EMAKEHR(0x11a2)\n#define TLBX_E_NO_CLSID_KEY EMAKEHR(0x11a3)\n#define TLBX_E_CIRCULAR_EXPORT EMAKEHR(0x11a4)\n#define TLBX_E_CIRCULAR_IMPORT EMAKEHR(0x11a5)\n#define TLBX_E_BAD_NATIVETYPE EMAKEHR(0x11a6)\n#define TLBX_E_BAD_VTABLE EMAKEHR(0x11a7)\n#define TLBX_E_CRM_NON_STATIC EMAKEHR(0x11a8)\n#define TLBX_E_CRM_INVALID_SIG EMAKEHR(0x11a9)\n#define TLBX_E_CLASS_LOAD_EXCEPTION EMAKEHR(0x11aa)\n#define TLBX_E_UNKNOWN_SIGNATURE EMAKEHR(0x11ab)\n#define TLBX_E_REFERENCED_TYPELIB EMAKEHR(0x11ac)\n#define TLBX_E_INVALID_NAMESPACE EMAKEHR(0x11ad)\n#define TLBX_E_LAYOUT_ERROR EMAKEHR(0x11ae)\n#define TLBX_E_NOTIUNKNOWN EMAKEHR(0x11af)\n#define TLBX_E_NONVISIBLEVALUECLASS EMAKEHR(0x11b0)\n#define TLBX_E_LPTSTR_NOT_ALLOWED EMAKEHR(0x11b1)\n#define TLBX_E_AUTO_CS_NOT_ALLOWED EMAKEHR(0x11b2)\n#define TLBX_E_ENUM_VALUE_INVALID EMAKEHR(0x11b5)\n#define TLBX_E_DUPLICATE_IID EMAKEHR(0x11b6)\n#define TLBX_E_NO_NESTED_ARRAYS EMAKEHR(0x11b7)\n#define TLBX_E_PARAM_ERROR_NAMED EMAKEHR(0x11b8)\n#define TLBX_E_PARAM_ERROR_UNNAMED EMAKEHR(0x11b9)\n#define TLBX_E_AGNOST_SIGNATURE EMAKEHR(0x11ba)\n#define TLBX_E_CONVERT_FAIL EMAKEHR(0x11bb)\n#define TLBX_E_BAD_SIGNATURE EMAKEHR(0x11bd)\n#define TLBX_E_ARRAY_NEEDS_NT_FIXED EMAKEHR(0x11be)\n#define TLBX_E_CLASS_NEEDS_NT_INTF EMAKEHR(0x11bf)\n#define TLBX_E_TYPED_REF EMAKEHR(0x11da)\n#define TLBX_E_BITNESS_MISMATCH EMAKEHR(0x11e1)\n#define TLBX_E_EVENT_WITH_NEWENUM EMAKEHR(0x11e2)\n#define TLBX_E_PROPGET_WITHOUT_RETURN EMAKEHR(0x11e3)\n#define TLBX_E_CIRCULAR_EXPORT2 EMAKEHR(0x1b52)\n\n#define TLBX_I_TYPEINFO_IMPORTED SMAKEHR(0x116c)\n#define TLBX_I_PIA_REGISTERED_FOR_TLB SMAKEHR(0x116d)\n#define TLBX_I_AGNOSTIC_ASSEMBLY SMAKEHR(0x116e)\n#define TLBX_I_USEIUNKNOWN SMAKEHR(0x116f)\n#define TLBX_I_UNCONVERTABLE_ARGS SMAKEHR(0x1170)\n#define TLBX_I_UNCONVERTABLE_FIELD SMAKEHR(0x1171)\n#define TLBX_I_NONSEQUENTIALSTRUCT EMAKEHR(0x1172)\n#define TLBX_I_RESOLVEREFFAILED EMAKEHR(0x1174)\n#define TLBX_I_TYPE_EXPORTED SMAKEHR(0x1179)\n#define TLBX_I_DUPLICATE_DISPID SMAKEHR(0x117a)\n#define TLBX_I_REF_TYPE_AS_STRUCT SMAKEHR(0x117c)\n#define TLBX_I_GENERIC_TYPE SMAKEHR(0x117f)\n#define TLBX_I_GENERIC_BASE_TYPE SMAKEHR(0x11e0)\n\n#define TLBX_S_REFERENCED_TYPELIB SMAKEHR(0x11ac)\n#define TLBX_S_NOSTDINTERFACE     SMAKEHR(0x11b3)\n#define TLBX_S_DUPLICATE_DISPID   SMAKEHR(0x11b4)\n\n#define TLBX_W_LIBNOTREGISTERED EMAKEHR(0x1165)\n#define TLBX_W_WARNING_MESSAGE SMAKEHR(0x1173)\n#define TLBX_W_ASSEMBLY_HAS_EMBEDDED_TLB SMAKEHR(0x1174)\n#define TLBX_W_CROSS_COMPILE_NO_REFS SMAKEHR(0x1175)\n#define TLBX_W_PURE_CROSS_COMPILE SMAKEHR(0x1176)\n#define TLBX_W_NON_INTEGRAL_CA_TYPE SMAKEHR(0x1184)\n#define TLBX_W_IENUM_CA_ON_IUNK SMAKEHR(0x1185)\n#define TLBX_W_DUAL_NOT_DISPATCH EMAKEHR(0x11bc)\n#define TLBX_W_NO_PROPS_IN_EVENTS EMAKEHR(0x11d3)\n#define TLBX_W_ENUM_VALUE_TOOBIG SMAKEHR(0x11d5)\n#define TLBX_W_EXPORTING_AUTO_LAYOUT SMAKEHR(0x11d9)\n#define TLBX_W_DEFAULT_INTF_NOT_VISIBLE SMAKEHR(0x11db)\n#define TLBX_W_BAD_SAFEARRAYFIELD_NO_ELEMENTVT SMAKEHR(0x11de)\n#define TLBX_W_LAYOUTCLASS_AS_INTERFACE SMAKEHR(0x11df)\n\n#define VLDTR_E_RID_OUTOFRANGE EMAKEHR(0x1203)\n#define VLDTR_E_CDTKN_OUTOFRANGE EMAKEHR(0x1204)\n#define VLDTR_E_CDRID_OUTOFRANGE EMAKEHR(0x1205)\n#define VLDTR_E_STRING_INVALID EMAKEHR(0x1206)\n#define VLDTR_E_GUID_INVALID EMAKEHR(0x1207)\n#define VLDTR_E_BLOB_INVALID EMAKEHR(0x1208)\n#define VLDTR_E_MOD_MULTI EMAKEHR(0x1209)\n#define VLDTR_E_MOD_NULLMVID EMAKEHR(0x120a)\n#define VLDTR_E_TR_NAMENULL EMAKEHR(0x120b)\n#define VLDTR_E_TR_DUP EMAKEHR(0x120c)\n#define VLDTR_E_TD_NAMENULL EMAKEHR(0x120d)\n#define VLDTR_E_TD_DUPNAME EMAKEHR(0x120e)\n#define VLDTR_E_TD_DUPGUID EMAKEHR(0x120f)\n#define VLDTR_E_TD_NOTIFACEOBJEXTNULL EMAKEHR(0x1210)\n#define VLDTR_E_TD_OBJEXTENDSNONNULL EMAKEHR(0x1211)\n#define VLDTR_E_TD_EXTENDSSEALED EMAKEHR(0x1212)\n#define VLDTR_E_TD_DLTNORTSPCL EMAKEHR(0x1213)\n#define VLDTR_E_TD_RTSPCLNOTDLT EMAKEHR(0x1214)\n#define VLDTR_E_MI_DECLPRIV EMAKEHR(0x1215)\n#define VLDTR_E_AS_BADNAME EMAKEHR(0x1216)\n#define VLDTR_E_FILE_SYSNAME EMAKEHR(0x1217)\n#define VLDTR_E_MI_BODYSTATIC EMAKEHR(0x1218)\n#define VLDTR_E_TD_IFACENOTABS EMAKEHR(0x1219)\n#define VLDTR_E_TD_IFACEPARNOTNIL EMAKEHR(0x121a)\n#define VLDTR_E_TD_IFACEGUIDNULL EMAKEHR(0x121b)\n#define VLDTR_E_MI_DECLFINAL EMAKEHR(0x121c)\n#define VLDTR_E_TD_VTNOTSEAL EMAKEHR(0x121d)\n#define VLDTR_E_PD_BADFLAGS EMAKEHR(0x121e)\n#define VLDTR_E_IFACE_DUP EMAKEHR(0x121f)\n#define VLDTR_E_MR_NAMENULL EMAKEHR(0x1220)\n#define VLDTR_E_MR_VTBLNAME EMAKEHR(0x1221)\n#define VLDTR_E_MR_DELNAME EMAKEHR(0x1222)\n#define VLDTR_E_MR_PARNIL EMAKEHR(0x1223)\n#define VLDTR_E_MR_BADCALLINGCONV EMAKEHR(0x1224)\n#define VLDTR_E_MR_NOTVARARG EMAKEHR(0x1225)\n#define VLDTR_E_MR_NAMEDIFF EMAKEHR(0x1226)\n#define VLDTR_E_MR_SIGDIFF EMAKEHR(0x1227)\n#define VLDTR_E_MR_DUP EMAKEHR(0x1228)\n#define VLDTR_E_CL_TDAUTO EMAKEHR(0x1229)\n#define VLDTR_E_CL_BADPCKSZ EMAKEHR(0x122a)\n#define VLDTR_E_CL_DUP EMAKEHR(0x122b)\n#define VLDTR_E_FL_BADOFFSET EMAKEHR(0x122c)\n#define VLDTR_E_FL_TDNIL EMAKEHR(0x122d)\n#define VLDTR_E_FL_NOCL EMAKEHR(0x122e)\n#define VLDTR_E_FL_TDNOTEXPLCT EMAKEHR(0x122f)\n#define VLDTR_E_FL_FLDSTATIC EMAKEHR(0x1230)\n#define VLDTR_E_FL_DUP EMAKEHR(0x1231)\n#define VLDTR_E_MODREF_NAMENULL EMAKEHR(0x1232)\n#define VLDTR_E_MODREF_DUP EMAKEHR(0x1233)\n#define VLDTR_E_TR_BADSCOPE EMAKEHR(0x1234)\n#define VLDTR_E_TD_NESTEDNOENCL EMAKEHR(0x1235)\n#define VLDTR_E_TD_EXTTRRES EMAKEHR(0x1236)\n#define VLDTR_E_SIGNULL EMAKEHR(0x1237)\n#define VLDTR_E_SIGNODATA EMAKEHR(0x1238)\n#define VLDTR_E_MD_BADCALLINGCONV EMAKEHR(0x1239)\n#define VLDTR_E_MD_THISSTATIC EMAKEHR(0x123a)\n#define VLDTR_E_MD_NOTTHISNOTSTATIC EMAKEHR(0x123b)\n#define VLDTR_E_MD_NOARGCNT EMAKEHR(0x123c)\n#define VLDTR_E_SIG_MISSELTYPE EMAKEHR(0x123d)\n#define VLDTR_E_SIG_MISSTKN EMAKEHR(0x123e)\n#define VLDTR_E_SIG_TKNBAD EMAKEHR(0x123f)\n#define VLDTR_E_SIG_MISSFPTR EMAKEHR(0x1240)\n#define VLDTR_E_SIG_MISSFPTRARGCNT EMAKEHR(0x1241)\n#define VLDTR_E_SIG_MISSRANK EMAKEHR(0x1242)\n#define VLDTR_E_SIG_MISSNSIZE EMAKEHR(0x1243)\n#define VLDTR_E_SIG_MISSSIZE EMAKEHR(0x1244)\n#define VLDTR_E_SIG_MISSNLBND EMAKEHR(0x1245)\n#define VLDTR_E_SIG_MISSLBND EMAKEHR(0x1246)\n#define VLDTR_E_SIG_BADELTYPE EMAKEHR(0x1247)\n#define VLDTR_E_SIG_MISSVASIZE EMAKEHR(0x1248)\n#define VLDTR_E_FD_BADCALLINGCONV EMAKEHR(0x1249)\n#define VLDTR_E_MD_NAMENULL EMAKEHR(0x124a)\n#define VLDTR_E_MD_PARNIL EMAKEHR(0x124b)\n#define VLDTR_E_MD_DUP EMAKEHR(0x124c)\n#define VLDTR_E_FD_NAMENULL EMAKEHR(0x124d)\n#define VLDTR_E_FD_PARNIL EMAKEHR(0x124e)\n#define VLDTR_E_FD_DUP EMAKEHR(0x124f)\n#define VLDTR_E_AS_MULTI EMAKEHR(0x1250)\n#define VLDTR_E_AS_NAMENULL EMAKEHR(0x1251)\n#define VLDTR_E_SIG_TOKTYPEMISMATCH EMAKEHR(0x1252)\n#define VLDTR_E_CL_TDINTF EMAKEHR(0x1253)\n#define VLDTR_E_ASOS_OSPLTFRMIDINVAL EMAKEHR(0x1254)\n#define VLDTR_E_AR_NAMENULL EMAKEHR(0x1255)\n#define VLDTR_E_TD_ENCLNOTNESTED EMAKEHR(0x1256)\n#define VLDTR_E_AROS_OSPLTFRMIDINVAL EMAKEHR(0x1257)\n#define VLDTR_E_FILE_NAMENULL EMAKEHR(0x1258)\n#define VLDTR_E_CT_NAMENULL EMAKEHR(0x1259)\n#define VLDTR_E_TD_EXTENDSCHILD EMAKEHR(0x125a)\n#define VLDTR_E_MAR_NAMENULL EMAKEHR(0x125b)\n#define VLDTR_E_FILE_DUP EMAKEHR(0x125c)\n#define VLDTR_E_FILE_NAMEFULLQLFD EMAKEHR(0x125d)\n#define VLDTR_E_CT_DUP EMAKEHR(0x125e)\n#define VLDTR_E_MAR_DUP EMAKEHR(0x125f)\n#define VLDTR_E_MAR_NOTPUBPRIV EMAKEHR(0x1260)\n#define VLDTR_E_TD_ENUMNOVALUE EMAKEHR(0x1261)\n#define VLDTR_E_TD_ENUMVALSTATIC EMAKEHR(0x1262)\n#define VLDTR_E_TD_ENUMVALNOTSN EMAKEHR(0x1263)\n#define VLDTR_E_TD_ENUMFLDNOTST EMAKEHR(0x1264)\n#define VLDTR_E_TD_ENUMFLDNOTLIT EMAKEHR(0x1265)\n#define VLDTR_E_TD_ENUMNOLITFLDS EMAKEHR(0x1266)\n#define VLDTR_E_TD_ENUMFLDSIGMISMATCH EMAKEHR(0x1267)\n#define VLDTR_E_TD_ENUMVALNOT1ST EMAKEHR(0x1268)\n#define VLDTR_E_FD_NOTVALUERTSN EMAKEHR(0x1269)\n#define VLDTR_E_FD_VALUEPARNOTENUM EMAKEHR(0x126a)\n#define VLDTR_E_FD_INSTINIFACE EMAKEHR(0x126b)\n#define VLDTR_E_FD_NOTPUBINIFACE EMAKEHR(0x126c)\n#define VLDTR_E_FMD_GLOBALNOTPUBPRIVSC EMAKEHR(0x126d)\n#define VLDTR_E_FMD_GLOBALNOTSTATIC EMAKEHR(0x126e)\n#define VLDTR_E_FD_GLOBALNORVA EMAKEHR(0x126f)\n#define VLDTR_E_MD_CTORZERORVA EMAKEHR(0x1270)\n#define VLDTR_E_FD_MARKEDNOMARSHAL EMAKEHR(0x1271)\n#define VLDTR_E_FD_MARSHALNOTMARKED EMAKEHR(0x1272)\n#define VLDTR_E_FD_MARKEDNODEFLT EMAKEHR(0x1273)\n#define VLDTR_E_FD_DEFLTNOTMARKED EMAKEHR(0x1274)\n#define VLDTR_E_FMD_MARKEDNOSECUR EMAKEHR(0x1275)\n#define VLDTR_E_FMD_SECURNOTMARKED EMAKEHR(0x1276)\n#define VLDTR_E_FMD_PINVOKENOTSTATIC EMAKEHR(0x1277)\n#define VLDTR_E_FMD_MARKEDNOPINVOKE EMAKEHR(0x1278)\n#define VLDTR_E_FMD_PINVOKENOTMARKED EMAKEHR(0x1279)\n#define VLDTR_E_FMD_BADIMPLMAP EMAKEHR(0x127a)\n#define VLDTR_E_IMAP_BADMODREF EMAKEHR(0x127b)\n#define VLDTR_E_IMAP_BADMEMBER EMAKEHR(0x127c)\n#define VLDTR_E_IMAP_BADIMPORTNAME EMAKEHR(0x127d)\n#define VLDTR_E_IMAP_BADCALLCONV EMAKEHR(0x127e)\n#define VLDTR_E_FMD_BADACCESSFLAG EMAKEHR(0x127f)\n#define VLDTR_E_FD_INITONLYANDLITERAL EMAKEHR(0x1280)\n#define VLDTR_E_FD_LITERALNOTSTATIC EMAKEHR(0x1281)\n#define VLDTR_E_FMD_RTSNNOTSN EMAKEHR(0x1282)\n#define VLDTR_E_MD_ABSTPARNOTABST EMAKEHR(0x1283)\n#define VLDTR_E_MD_NOTSTATABSTININTF EMAKEHR(0x1284)\n#define VLDTR_E_MD_NOTPUBININTF EMAKEHR(0x1285)\n#define VLDTR_E_MD_CTORININTF EMAKEHR(0x1286)\n#define VLDTR_E_MD_GLOBALCTORCCTOR EMAKEHR(0x1287)\n#define VLDTR_E_MD_CTORSTATIC EMAKEHR(0x1288)\n#define VLDTR_E_MD_CTORNOTSNRTSN EMAKEHR(0x1289)\n#define VLDTR_E_MD_CTORVIRT EMAKEHR(0x128a)\n#define VLDTR_E_MD_CTORABST EMAKEHR(0x128b)\n#define VLDTR_E_MD_CCTORNOTSTATIC EMAKEHR(0x128c)\n#define VLDTR_E_MD_ZERORVA EMAKEHR(0x128d)\n#define VLDTR_E_MD_FINNOTVIRT EMAKEHR(0x128e)\n#define VLDTR_E_MD_STATANDFINORVIRT EMAKEHR(0x128f)\n#define VLDTR_E_MD_ABSTANDFINAL EMAKEHR(0x1290)\n#define VLDTR_E_MD_ABSTANDIMPL EMAKEHR(0x1291)\n#define VLDTR_E_MD_ABSTANDPINVOKE EMAKEHR(0x1292)\n#define VLDTR_E_MD_ABSTNOTVIRT EMAKEHR(0x1293)\n#define VLDTR_E_MD_NOTABSTNOTIMPL EMAKEHR(0x1294)\n#define VLDTR_E_MD_NOTABSTBADFLAGSRVA EMAKEHR(0x1295)\n#define VLDTR_E_MD_PRIVSCOPENORVA EMAKEHR(0x1296)\n#define VLDTR_E_MD_GLOBALABSTORVIRT EMAKEHR(0x1297)\n#define VLDTR_E_SIG_LONGFORM EMAKEHR(0x1298)\n#define VLDTR_E_MD_MULTIPLESEMANTICS EMAKEHR(0x1299)\n#define VLDTR_E_MD_INVALIDSEMANTICS EMAKEHR(0x129a)\n#define VLDTR_E_MD_SEMANTICSNOTEXIST EMAKEHR(0x129b)\n#define VLDTR_E_MI_DECLNOTVIRT EMAKEHR(0x129c)\n#define VLDTR_E_FMD_GLOBALITEM EMAKEHR(0x129d)\n#define VLDTR_E_MD_MULTSEMANTICFLAGS EMAKEHR(0x129e)\n#define VLDTR_E_MD_NOSEMANTICFLAGS EMAKEHR(0x129f)\n#define VLDTR_E_FD_FLDINIFACE EMAKEHR(0x12a0)\n#define VLDTR_E_AS_HASHALGID EMAKEHR(0x12a1)\n#define VLDTR_E_AS_PROCID EMAKEHR(0x12a2)\n#define VLDTR_E_AR_PROCID EMAKEHR(0x12a3)\n#define VLDTR_E_CN_PARENTRANGE EMAKEHR(0x12a4)\n#define VLDTR_E_AS_BADFLAGS EMAKEHR(0x12a5)\n#define VLDTR_E_TR_HASTYPEDEF EMAKEHR(0x12a6)\n#define VLDTR_E_IFACE_BADIMPL EMAKEHR(0x12a7)\n#define VLDTR_E_IFACE_BADIFACE EMAKEHR(0x12a8)\n#define VLDTR_E_TD_SECURNOTMARKED EMAKEHR(0x12a9)\n#define VLDTR_E_TD_MARKEDNOSECUR EMAKEHR(0x12aa)\n#define VLDTR_E_MD_CCTORHASARGS EMAKEHR(0x12ab)\n#define VLDTR_E_CT_BADIMPL EMAKEHR(0x12ac)\n#define VLDTR_E_MI_ALIENBODY EMAKEHR(0x12ad)\n#define VLDTR_E_MD_CCTORCALLCONV EMAKEHR(0x12ae)\n#define VLDTR_E_MI_BADCLASS EMAKEHR(0x12af)\n#define VLDTR_E_MI_CLASSISINTF EMAKEHR(0x12b0)\n#define VLDTR_E_MI_BADDECL EMAKEHR(0x12b1)\n#define VLDTR_E_MI_BADBODY EMAKEHR(0x12b2)\n#define VLDTR_E_MI_DUP EMAKEHR(0x12b3)\n#define VLDTR_E_FD_BADPARENT EMAKEHR(0x12b4)\n#define VLDTR_E_MD_PARAMOUTOFSEQ EMAKEHR(0x12b5)\n#define VLDTR_E_MD_PARASEQTOOBIG EMAKEHR(0x12b6)\n#define VLDTR_E_MD_PARMMARKEDNOMARSHAL EMAKEHR(0x12b7)\n#define VLDTR_E_MD_PARMMARSHALNOTMARKED EMAKEHR(0x12b8)\n#define VLDTR_E_MD_PARMMARKEDNODEFLT EMAKEHR(0x12ba)\n#define VLDTR_E_MD_PARMDEFLTNOTMARKED EMAKEHR(0x12bb)\n#define VLDTR_E_PR_BADSCOPE EMAKEHR(0x12bc)\n#define VLDTR_E_PR_NONAME EMAKEHR(0x12bd)\n#define VLDTR_E_PR_NOSIG EMAKEHR(0x12be)\n#define VLDTR_E_PR_DUP EMAKEHR(0x12bf)\n#define VLDTR_E_PR_BADCALLINGCONV EMAKEHR(0x12c0)\n#define VLDTR_E_PR_MARKEDNODEFLT EMAKEHR(0x12c1)\n#define VLDTR_E_PR_DEFLTNOTMARKED EMAKEHR(0x12c2)\n#define VLDTR_E_PR_BADSEMANTICS EMAKEHR(0x12c3)\n#define VLDTR_E_PR_BADMETHOD EMAKEHR(0x12c4)\n#define VLDTR_E_PR_ALIENMETHOD EMAKEHR(0x12c5)\n#define VLDTR_E_CN_BLOBNOTNULL EMAKEHR(0x12c6)\n#define VLDTR_E_CN_BLOBNULL EMAKEHR(0x12c7)\n#define VLDTR_E_EV_BADSCOPE EMAKEHR(0x12c8)\n#define VLDTR_E_EV_NONAME EMAKEHR(0x12ca)\n#define VLDTR_E_EV_DUP EMAKEHR(0x12cb)\n#define VLDTR_E_EV_BADEVTYPE EMAKEHR(0x12cc)\n#define VLDTR_E_EV_EVTYPENOTCLASS EMAKEHR(0x12cd)\n#define VLDTR_E_EV_BADSEMANTICS EMAKEHR(0x12ce)\n#define VLDTR_E_EV_BADMETHOD EMAKEHR(0x12cf)\n#define VLDTR_E_EV_ALIENMETHOD EMAKEHR(0x12d0)\n#define VLDTR_E_EV_NOADDON EMAKEHR(0x12d1)\n#define VLDTR_E_EV_NOREMOVEON EMAKEHR(0x12d2)\n#define VLDTR_E_CT_DUPTDNAME EMAKEHR(0x12d3)\n#define VLDTR_E_MAR_BADOFFSET EMAKEHR(0x12d4)\n#define VLDTR_E_DS_BADOWNER EMAKEHR(0x12d5)\n#define VLDTR_E_DS_BADFLAGS EMAKEHR(0x12d6)\n#define VLDTR_E_DS_NOBLOB EMAKEHR(0x12d7)\n#define VLDTR_E_MAR_BADIMPL EMAKEHR(0x12d8)\n#define VLDTR_E_MR_VARARGCALLINGCONV EMAKEHR(0x12da)\n#define VLDTR_E_MD_CTORNOTVOID EMAKEHR(0x12db)\n#define VLDTR_E_EV_FIRENOTVOID EMAKEHR(0x12dc)\n#define VLDTR_E_AS_BADLOCALE EMAKEHR(0x12dd)\n#define VLDTR_E_CN_PARENTTYPE EMAKEHR(0x12de)\n#define VLDTR_E_SIG_SENTINMETHODDEF EMAKEHR(0x12df)\n#define VLDTR_E_SIG_SENTMUSTVARARG EMAKEHR(0x12e0)\n#define VLDTR_E_SIG_MULTSENTINELS EMAKEHR(0x12e1)\n#define VLDTR_E_SIG_LASTSENTINEL EMAKEHR(0x12e2)\n#define VLDTR_E_SIG_MISSARG EMAKEHR(0x12e3)\n#define VLDTR_E_SIG_BYREFINFIELD EMAKEHR(0x12e4)\n#define VLDTR_E_MD_SYNCMETHODINVTYPE EMAKEHR(0x12e5)\n#define VLDTR_E_TD_NAMETOOLONG EMAKEHR(0x12e6)\n#define VLDTR_E_AS_PROCDUP EMAKEHR(0x12e7)\n#define VLDTR_E_ASOS_DUP EMAKEHR(0x12e8)\n#define VLDTR_E_MAR_BADFLAGS EMAKEHR(0x12e9)\n#define VLDTR_E_CT_NOTYPEDEFID EMAKEHR(0x12ea)\n#define VLDTR_E_FILE_BADFLAGS EMAKEHR(0x12eb)\n#define VLDTR_E_FILE_NULLHASH EMAKEHR(0x12ec)\n#define VLDTR_E_MOD_NONAME EMAKEHR(0x12ed)\n#define VLDTR_E_MOD_NAMEFULLQLFD EMAKEHR(0x12ee)\n#define VLDTR_E_TD_RTSPCLNOTSPCL EMAKEHR(0x12ef)\n#define VLDTR_E_TD_EXTENDSIFACE EMAKEHR(0x12f0)\n#define VLDTR_E_MD_CTORPINVOKE EMAKEHR(0x12f1)\n#define VLDTR_E_TD_SYSENUMNOTCLASS EMAKEHR(0x12f2)\n#define VLDTR_E_TD_SYSENUMNOTEXTVTYPE EMAKEHR(0x12f3)\n#define VLDTR_E_MI_SIGMISMATCH EMAKEHR(0x12f4)\n#define VLDTR_E_TD_ENUMHASMETHODS EMAKEHR(0x12f5)\n#define VLDTR_E_TD_ENUMIMPLIFACE EMAKEHR(0x12f6)\n#define VLDTR_E_TD_ENUMHASPROP EMAKEHR(0x12f7)\n#define VLDTR_E_TD_ENUMHASEVENT EMAKEHR(0x12f8)\n#define VLDTR_E_TD_BADMETHODLST EMAKEHR(0x12f9)\n#define VLDTR_E_TD_BADFIELDLST EMAKEHR(0x12fa)\n#define VLDTR_E_CN_BADTYPE EMAKEHR(0x12fb)\n#define VLDTR_E_TD_ENUMNOINSTFLD EMAKEHR(0x12fc)\n#define VLDTR_E_TD_ENUMMULINSTFLD EMAKEHR(0x12fd)\n#define VLDTR_E_INTERRUPTED EMAKEHR(0x12fe)\n#define VLDTR_E_NOTINIT EMAKEHR(0x12ff)\n#define VLDTR_E_IFACE_NOTIFACE EMAKEHR(0x1b00)\n#define VLDTR_E_FD_RVAHASNORVA EMAKEHR(0x1b01)\n#define VLDTR_E_FD_RVAHASZERORVA EMAKEHR(0x1b02)\n#define VLDTR_E_MD_RVAANDIMPLMAP EMAKEHR(0x1b03)\n#define VLDTR_E_TD_EXTRAFLAGS EMAKEHR(0x1b04)\n#define VLDTR_E_TD_EXTENDSITSELF EMAKEHR(0x1b05)\n#define VLDTR_E_TD_SYSVTNOTEXTOBJ EMAKEHR(0x1b06)\n#define VLDTR_E_TD_EXTTYPESPEC EMAKEHR(0x1b07)\n#define VLDTR_E_TD_VTNOSIZE EMAKEHR(0x1b09)\n#define VLDTR_E_TD_IFACESEALED EMAKEHR(0x1b0a)\n#define VLDTR_E_NC_BADNESTED EMAKEHR(0x1b0b)\n#define VLDTR_E_NC_BADENCLOSER EMAKEHR(0x1b0c)\n#define VLDTR_E_NC_DUP EMAKEHR(0x1b0d)\n#define VLDTR_E_NC_DUPENCLOSER EMAKEHR(0x1b0e)\n#define VLDTR_E_FRVA_ZERORVA EMAKEHR(0x1b0f)\n#define VLDTR_E_FRVA_BADFIELD EMAKEHR(0x1b10)\n#define VLDTR_E_FRVA_DUPRVA EMAKEHR(0x1b11)\n#define VLDTR_E_FRVA_DUPFIELD EMAKEHR(0x1b12)\n#define VLDTR_E_EP_BADTOKEN EMAKEHR(0x1b13)\n#define VLDTR_E_EP_INSTANCE EMAKEHR(0x1b14)\n#define VLDTR_E_TD_ENUMFLDBADTYPE EMAKEHR(0x1b15)\n#define VLDTR_E_MD_BADRVA EMAKEHR(0x1b16)\n#define VLDTR_E_FD_LITERALNODEFAULT EMAKEHR(0x1b17)\n#define VLDTR_E_IFACE_METHNOTIMPL EMAKEHR(0x1b18)\n#define VLDTR_E_CA_BADPARENT EMAKEHR(0x1b19)\n#define VLDTR_E_CA_BADTYPE EMAKEHR(0x1b1a)\n#define VLDTR_E_CA_NOTCTOR EMAKEHR(0x1b1b)\n#define VLDTR_E_CA_BADSIG EMAKEHR(0x1b1c)\n#define VLDTR_E_CA_NOSIG EMAKEHR(0x1b1d)\n#define VLDTR_E_CA_BADPROLOG EMAKEHR(0x1b1e)\n#define VLDTR_E_MD_BADLOCALSIGTOK EMAKEHR(0x1b1f)\n#define VLDTR_E_MD_BADHEADER EMAKEHR(0x1b20)\n#define VLDTR_E_EP_TOOMANYARGS EMAKEHR(0x1b21)\n#define VLDTR_E_EP_BADRET EMAKEHR(0x1b22)\n#define VLDTR_E_EP_BADARG EMAKEHR(0x1b23)\n#define VLDTR_E_SIG_BADVOID EMAKEHR(0x1b24)\n#define VLDTR_E_IFACE_METHMULTIMPL EMAKEHR(0x1b25)\n#define VLDTR_E_GP_NAMENULL EMAKEHR(0x1b26)\n#define VLDTR_E_GP_OWNERNIL EMAKEHR(0x1b27)\n#define VLDTR_E_GP_DUPNAME EMAKEHR(0x1b28)\n#define VLDTR_E_GP_DUPNUMBER EMAKEHR(0x1b29)\n#define VLDTR_E_GP_NONSEQ_BY_OWNER EMAKEHR(0x1b2a)\n#define VLDTR_E_GP_NONSEQ_BY_NUMBER EMAKEHR(0x1b2b)\n#define VLDTR_E_GP_UNEXPECTED_OWNER_FOR_VARIANT_VAR EMAKEHR(0x1b2c)\n#define VLDTR_E_GP_ILLEGAL_VARIANT_MVAR EMAKEHR(0x1b2d)\n#define VLDTR_E_GP_ILLEGAL_VARIANCE_FLAGS EMAKEHR(0x1b2e)\n#define VLDTR_E_GP_REFANDVALUETYPE EMAKEHR(0x1b2f)\n#define VLDTR_E_GPC_OWNERNIL EMAKEHR(0x1b30)\n#define VLDTR_E_GPC_DUP EMAKEHR(0x1b31)\n#define VLDTR_E_GPC_NONCONTIGUOUS EMAKEHR(0x1b32)\n#define VLDTR_E_MS_METHODNIL EMAKEHR(0x1b33)\n#define VLDTR_E_MS_DUP EMAKEHR(0x1b34)\n#define VLDTR_E_MS_BADCALLINGCONV EMAKEHR(0x1b35)\n#define VLDTR_E_MS_MISSARITY EMAKEHR(0x1b36)\n#define VLDTR_E_MS_MISSARG EMAKEHR(0x1b37)\n#define VLDTR_E_MS_ARITYMISMATCH EMAKEHR(0x1b38)\n#define VLDTR_E_MS_METHODNOTGENERIC EMAKEHR(0x1b39)\n#define VLDTR_E_SIG_MISSARITY EMAKEHR(0x1b3a)\n#define VLDTR_E_SIG_ARITYMISMATCH EMAKEHR(0x1b3b)\n#define VLDTR_E_MD_GENERIC_CCTOR EMAKEHR(0x1b3c)\n#define VLDTR_E_MD_GENERIC_CTOR EMAKEHR(0x1b3d)\n#define VLDTR_E_MD_GENERIC_IMPORT EMAKEHR(0x1b3e)\n#define VLDTR_E_MD_GENERIC_BADCALLCONV EMAKEHR(0x1b3f)\n#define VLDTR_E_EP_GENERIC_METHOD EMAKEHR(0x1b40)\n#define VLDTR_E_MD_MISSARITY EMAKEHR(0x1b41)\n#define VLDTR_E_MD_ARITYZERO EMAKEHR(0x1b42)\n#define VLDTR_E_SIG_ARITYZERO EMAKEHR(0x1b43)\n#define VLDTR_E_MS_ARITYZERO EMAKEHR(0x1b44)\n#define VLDTR_E_MD_GPMISMATCH EMAKEHR(0x1b45)\n#define VLDTR_E_EP_GENERIC_TYPE EMAKEHR(0x1b46)\n#define VLDTR_E_MI_DECLNOTGENERIC EMAKEHR(0x1b47)\n#define VLDTR_E_MI_IMPLNOTGENERIC EMAKEHR(0x1b48)\n#define VLDTR_E_MI_ARITYMISMATCH EMAKEHR(0x1b49)\n#define VLDTR_E_TD_EXTBADTYPESPEC EMAKEHR(0x1b4a)\n#define VLDTR_E_SIG_BYREFINST EMAKEHR(0x1b4b)\n#define VLDTR_E_MS_BYREFINST EMAKEHR(0x1b4c)\n#define VLDTR_E_TS_EMPTY EMAKEHR(0x1b4d)\n#define VLDTR_E_TS_HASSENTINALS EMAKEHR(0x1b4e)\n#define VLDTR_E_TD_GENERICHASEXPLAYOUT EMAKEHR(0x1b4f)\n#define VLDTR_E_SIG_BADTOKTYPE EMAKEHR(0x1b50)\n#define VLDTR_E_IFACE_METHNOTIMPLTHISMOD EMAKEHR(0x1b51)\n\n#define VLDTR_S_WRN SMAKEHR(0x1200)\n#define VLDTR_S_ERR SMAKEHR(0x1201)\n#define VLDTR_S_WRNERR SMAKEHR(0x1202)\n\n#define CORDBG_E_UNRECOVERABLE_ERROR EMAKEHR(0x1300)\n#define CORDBG_E_PROCESS_TERMINATED EMAKEHR(0x1301)\n#define CORDBG_E_PROCESS_NOT_SYNCHRONIZED EMAKEHR(0x1302)\n#define CORDBG_E_CLASS_NOT_LOADED EMAKEHR(0x1303)\n#define CORDBG_E_IL_VAR_NOT_AVAILABLE EMAKEHR(0x1304)\n#define CORDBG_E_BAD_REFERENCE_VALUE EMAKEHR(0x1305)\n#define CORDBG_E_FIELD_NOT_AVAILABLE EMAKEHR(0x1306)\n#define CORDBG_E_NON_NATIVE_FRAME EMAKEHR(0x1307)\n#define CORDBG_E_NONCONTINUABLE_EXCEPTION EMAKEHR(0x1308)\n#define CORDBG_E_CODE_NOT_AVAILABLE EMAKEHR(0x1309)\n#define CORDBG_E_FUNCTION_NOT_IL EMAKEHR(0x130a)\n#define CORDBG_E_CANT_SET_IP_INTO_FINALLY EMAKEHR(0x130e)\n#define CORDBG_E_CANT_SET_IP_OUT_OF_FINALLY EMAKEHR(0x130f)\n#define CORDBG_E_CANT_SET_IP_INTO_CATCH EMAKEHR(0x1310)\n#define CORDBG_E_SET_IP_NOT_ALLOWED_ON_NONLEAF_FRAME EMAKEHR(0x1311)\n#define CORDBG_E_SET_IP_IMPOSSIBLE EMAKEHR(0x1312)\n#define CORDBG_E_FUNC_EVAL_BAD_START_POINT EMAKEHR(0x1313)\n#define CORDBG_E_INVALID_OBJECT EMAKEHR(0x1314)\n#define CORDBG_E_FUNC_EVAL_NOT_COMPLETE EMAKEHR(0x1315)\n#define CORDBG_E_INPROC_NOT_IMPL EMAKEHR(0x1318)\n#define CORDBG_E_STATIC_VAR_NOT_AVAILABLE EMAKEHR(0x131a)\n#define CORDBG_E_OBJECT_IS_NOT_COPYABLE_VALUE_CLASS EMAKEHR(0x131b)\n#define CORDBG_E_CANT_SETIP_INTO_OR_OUT_OF_FILTER EMAKEHR(0x131c)\n#define CORDBG_E_CANT_CHANGE_JIT_SETTING_FOR_ZAP_MODULE EMAKEHR(0x131d)\n#define CORDBG_E_CANT_SET_IP_OUT_OF_FINALLY_ON_WIN64 EMAKEHR(0x131e)\n#define CORDBG_E_CANT_SET_IP_OUT_OF_CATCH_ON_WIN64 EMAKEHR(0x131f)\n#define CORDBG_E_REMOTE_CONNECTION_CONN_RESET EMAKEHR(0x1320)\n#define CORDBG_E_REMOTE_CONNECTION_KEEP_ALIVE EMAKEHR(0x1321)\n#define CORDBG_E_REMOTE_CONNECTION_FATAL_ERROR EMAKEHR(0x1322)\n#define CORDBG_E_CANT_SET_TO_JMC EMAKEHR(0x1323)\n#define CORDBG_E_NO_CONTEXT_FOR_INTERNAL_FRAME EMAKEHR(0x1325)\n#define CORDBG_E_NOT_CHILD_FRAME EMAKEHR(0x1326)\n#define CORDBG_E_NON_MATCHING_CONTEXT EMAKEHR(0x1327)\n#define CORDBG_E_PAST_END_OF_STACK EMAKEHR(0x1328)\n#define CORDBG_E_FUNC_EVAL_CANNOT_UPDATE_REGISTER_IN_NONLEAF_FRAME EMAKEHR(0x1329)\n#define CORDBG_E_BAD_THREAD_STATE EMAKEHR(0x132d)\n#define CORDBG_E_DEBUGGER_ALREADY_ATTACHED EMAKEHR(0x132e)\n#define CORDBG_E_SUPERFLOUS_CONTINUE EMAKEHR(0x132f)\n#define CORDBG_E_SET_VALUE_NOT_ALLOWED_ON_NONLEAF_FRAME EMAKEHR(0x1330)\n#define CORDBG_E_ENC_EH_MAX_NESTING_LEVEL_CANT_INCREASE EMAKEHR(0x1331)\n#define CORDBG_E_ENC_MODULE_NOT_ENC_ENABLED EMAKEHR(0x1332)\n#define CORDBG_E_SET_IP_NOT_ALLOWED_ON_EXCEPTION EMAKEHR(0x1333)\n#define CORDBG_E_VARIABLE_IS_ACTUALLY_LITERAL EMAKEHR(0x1334)\n#define CORDBG_E_PROCESS_DETACHED EMAKEHR(0x1335)\n#define CORDBG_E_ENC_METHOD_SIG_CHANGED EMAKEHR(0x1336)\n#define CORDBG_E_ENC_METHOD_NO_LOCAL_SIG EMAKEHR(0x1337)\n#define CORDBG_E_ENC_CANT_ADD_FIELD_TO_VALUE_OR_LAYOUT_CLASS EMAKEHR(0x1338)\n#define CORDBG_E_ENC_CANT_CHANGE_FIELD EMAKEHR(0x1339)\n#define CORDBG_E_ENC_CANT_ADD_NON_PRIVATE_MEMBER EMAKEHR(0x133a)\n#define CORDBG_E_FIELD_NOT_STATIC EMAKEHR(0x133b)\n#define CORDBG_E_FIELD_NOT_INSTANCE EMAKEHR(0x133c)\n#define CORDBG_E_ENC_ZAPPED_WITHOUT_ENC EMAKEHR(0x133d)\n#define CORDBG_E_ENC_BAD_METHOD_INFO EMAKEHR(0x133e)\n#define CORDBG_E_ENC_JIT_CANT_UPDATE EMAKEHR(0x133f)\n#define CORDBG_E_ENC_MISSING_CLASS EMAKEHR(0x1340)\n#define CORDBG_E_ENC_INTERNAL_ERROR EMAKEHR(0x1341)\n#define CORDBG_E_ENC_HANGING_FIELD EMAKEHR(0x1342)\n#define CORDBG_E_MODULE_NOT_LOADED EMAKEHR(0x1343)\n#define CORDBG_E_ENC_CANT_CHANGE_SUPERCLASS EMAKEHR(0x1344)\n#define CORDBG_E_UNABLE_TO_SET_BREAKPOINT EMAKEHR(0x1345)\n#define CORDBG_E_DEBUGGING_NOT_POSSIBLE EMAKEHR(0x1346)\n#define CORDBG_E_KERNEL_DEBUGGER_ENABLED EMAKEHR(0x1347)\n#define CORDBG_E_KERNEL_DEBUGGER_PRESENT EMAKEHR(0x1348)\n#define CORDBG_E_HELPER_THREAD_DEAD EMAKEHR(0x1349)\n#define CORDBG_E_INTERFACE_INHERITANCE_CANT_CHANGE EMAKEHR(0x134a)\n#define CORDBG_E_INCOMPATIBLE_PROTOCOL EMAKEHR(0x134b)\n#define CORDBG_E_TOO_MANY_PROCESSES EMAKEHR(0x134c)\n#define CORDBG_E_INTEROP_NOT_SUPPORTED EMAKEHR(0x134d)\n#define CORDBG_E_NO_REMAP_BREAKPIONT EMAKEHR(0x134e)\n#define CORDBG_E_OBJECT_NEUTERED EMAKEHR(0x134f)\n#define CORDBG_E_THREAD_NOT_SCHEDULED EMAKEHR(0x1c00)\n#define CORDBG_E_HANDLE_HAS_BEEN_DISPOSED EMAKEHR(0x1c01)\n#define CORDBG_E_NONINTERCEPTABLE_EXCEPTION EMAKEHR(0x1c02)\n#define CORDBG_E_CANT_UNWIND_ABOVE_CALLBACK EMAKEHR(0x1c03)\n#define CORDBG_E_INTERCEPT_FRAME_ALREADY_SET EMAKEHR(0x1c04)\n#define CORDBG_E_NO_NATIVE_PATCH_AT_ADDR EMAKEHR(0x1c05)\n#define CORDBG_E_MUST_BE_INTEROP_DEBUGGING EMAKEHR(0x1c06)\n#define CORDBG_E_NATIVE_PATCH_ALREADY_AT_ADDR EMAKEHR(0x1c07)\n#define CORDBG_E_TIMEOUT EMAKEHR(0x1c08)\n#define CORDBG_E_CANT_CALL_ON_THIS_THREAD EMAKEHR(0x1c09)\n#define CORDBG_E_ENC_INFOLESS_METHOD EMAKEHR(0x1c0a)\n#define CORDBG_E_ENC_NESTED_HANLDERS EMAKEHR(0x1c0b)\n#define CORDBG_E_ENC_IN_FUNCLET EMAKEHR(0x1c0c)\n#define CORDBG_E_ENC_LOCALLOC EMAKEHR(0x1c0d)\n#define CORDBG_E_ENC_EDIT_NOT_SUPPORTED EMAKEHR(0x1c0e)\n#define CORDBG_E_FEABORT_DELAYED_UNTIL_THREAD_RESUMED EMAKEHR(0x1c0f)\n#define CORDBG_E_NOTREADY EMAKEHR(0x1c10)\n#define CORDBG_E_CANNOT_RESOLVE_ASSEMBLY EMAKEHR(0x1c11)\n#define CORDBG_E_MUST_BE_IN_LOAD_MODULE EMAKEHR(0x1c12)\n#define CORDBG_E_CANNOT_BE_ON_ATTACH EMAKEHR(0x1c13)\n#define CORDBG_E_NGEN_NOT_SUPPORTED EMAKEHR(0x1c14)\n#define CORDBG_E_ILLEGAL_SHUTDOWN_ORDER EMAKEHR(0x1c15)\n#define CORDBG_E_CANNOT_DEBUG_FIBER_PROCESS EMAKEHR(0x1c16)\n#define CORDBG_E_MUST_BE_IN_CREATE_PROCESS EMAKEHR(0x1c17)\n#define CORDBG_E_DETACH_FAILED_OUTSTANDING_EVALS EMAKEHR(0x1c18)\n#define CORDBG_E_DETACH_FAILED_OUTSTANDING_STEPPERS EMAKEHR(0x1c19)\n#define CORDBG_E_CANT_INTEROP_STEP_OUT EMAKEHR(0x1c20)\n#define CORDBG_E_DETACH_FAILED_OUTSTANDING_BREAKPOINTS EMAKEHR(0x1c21)\n#define CORDBG_E_ILLEGAL_IN_STACK_OVERFLOW EMAKEHR(0x1c22)\n#define CORDBG_E_ILLEGAL_AT_GC_UNSAFE_POINT EMAKEHR(0x1c23)\n#define CORDBG_E_ILLEGAL_IN_PROLOG EMAKEHR(0x1c24)\n#define CORDBG_E_ILLEGAL_IN_NATIVE_CODE EMAKEHR(0x1c25)\n#define CORDBG_E_ILLEGAL_IN_OPTIMIZED_CODE EMAKEHR(0x1c26)\n#define CORDBG_E_MINIDUMP_UNSUPPORTED EMAKEHR(0x1c27)\n#define CORDBG_E_APPDOMAIN_MISMATCH EMAKEHR(0x1c28)\n#define CORDBG_E_CONTEXT_UNVAILABLE EMAKEHR(0x1c29)\n#define CORDBG_E_UNCOMPATIBLE_PLATFORMS EMAKEHR(0x1c30)\n#define CORDBG_E_DEBUGGING_DISABLED EMAKEHR(0x1c31)\n#define CORDBG_E_DETACH_FAILED_ON_ENC EMAKEHR(0x1c32)\n#define CORDBG_E_CURRENT_EXCEPTION_IS_OUTSIDE_CURRENT_EXECUTION_SCOPE EMAKEHR(0x1c33)\n#define CORDBG_E_HELPER_MAY_DEADLOCK EMAKEHR(0x1c34)\n#define CORDBG_E_MISSING_METADATA EMAKEHR(0x1c35)\n#define CORDBG_E_TARGET_INCONSISTENT EMAKEHR(0x1c36)\n#define CORDBG_E_DETACH_FAILED_OUTSTANDING_TARGET_RESOURCES EMAKEHR(0x1c37)\n#define CORDBG_E_TARGET_READONLY EMAKEHR(0x1c38)\n#define CORDBG_E_MISMATCHED_CORWKS_AND_DACWKS_DLLS EMAKEHR(0x1c39)\n#define CORDBG_E_MODULE_LOADED_FROM_DISK EMAKEHR(0x1c3a)\n#define CORDBG_E_SYMBOLS_NOT_AVAILABLE EMAKEHR(0x1c3b)\n#define CORDBG_E_DEBUG_COMPONENT_MISSING EMAKEHR(0x1c3c)\n#define CORDBG_E_REMOTE_MISMATCHED_CERTS EMAKEHR(0x1c3d)\n#define CORDBG_E_REMOTE_NETWORK_FAILURE EMAKEHR(0x1c3e)\n#define CORDBG_E_REMOTE_NO_LISTENER EMAKEHR(0x1c3f)\n#define CORDBG_E_REMOTE_UNKNOWN_TARGET EMAKEHR(0x1c40)\n#define CORDBG_E_REMOTE_INVALID_CONFIG EMAKEHR(0x1c41)\n#define CORDBG_E_REMOTE_MISMATCHED_PROTOCOLS EMAKEHR(0x1c42)\n#define CORDBG_E_LIBRARY_PROVIDER_ERROR EMAKEHR(0x1c43)\n#define CORDBG_E_NOT_CLR EMAKEHR(0x1c44)\n#define CORDBG_E_MISSING_DATA_TARGET_INTERFACE EMAKEHR(0x1c45)\n#define CORDBG_E_UNSUPPORTED_DEBUGGING_MODEL EMAKEHR(0x1c46)\n#define CORDBG_E_UNSUPPORTED_FORWARD_COMPAT EMAKEHR(0x1c47)\n#define CORDBG_E_UNSUPPORTED_VERSION_STRUCT EMAKEHR(0x1c48)\n#define CORDBG_E_READVIRTUAL_FAILURE EMAKEHR(0x1c49)\n#define CORDBG_E_VALUE_POINTS_TO_FUNCTION EMAKEHR(0x1c4a)\n#define CORDBG_E_CORRUPT_OBJECT EMAKEHR(0x1c4b)\n#define CORDBG_E_GC_STRUCTURES_INVALID EMAKEHR(0x1c4c)\n\n#define CORDBG_S_BAD_START_SEQUENCE_POINT SMAKEHR(0x130b)\n#define CORDBG_S_BAD_END_SEQUENCE_POINT SMAKEHR(0x130c)\n#define CORDBG_S_INSUFFICIENT_INFO_FOR_SET_IP SMAKEHR(0x130d)\n#define CORDBG_S_FUNC_EVAL_HAS_NO_RESULT SMAKEHR(0x1316)\n#define CORDBG_S_VALUE_POINTS_TO_VOID SMAKEHR(0x1317)\n#define CORDBG_S_FUNC_EVAL_ABORTED SMAKEHR(0x1319)\n#define CORDBG_S_AT_END_OF_STACK SMAKEHR(0x1324)\n#define CORDBG_S_NOT_ALL_BITS_SET SMAKEHR(0x1c13)\n\n#define CORPROF_E_FUNCTION_NOT_COMPILED EMAKEHR(0x1350)\n#define CORPROF_E_DATAINCOMPLETE EMAKEHR(0x1351)\n#define CORPROF_E_NOT_REJITABLE_METHODS EMAKEHR(0x1352)\n#define CORPROF_E_CANNOT_UPDATE_METHOD EMAKEHR(0x1353)\n#define CORPROF_E_FUNCTION_NOT_IL EMAKEHR(0x1354)\n#define CORPROF_E_NOT_MANAGED_THREAD EMAKEHR(0x1355)\n#define CORPROF_E_CALL_ONLY_FROM_INIT EMAKEHR(0x1356)\n#define CORPROF_E_INPROC_NOT_ENABLED EMAKEHR(0x1357)\n#define CORPROF_E_JITMAPS_NOT_ENABLED EMAKEHR(0x1358)\n#define CORPROF_E_INPROC_ALREADY_BEGUN EMAKEHR(0x1359)\n#define CORPROF_E_INPROC_NOT_AVAILABLE EMAKEHR(0x135a)\n#define CORPROF_E_NOT_YET_AVAILABLE EMAKEHR(0x135b)\n#define CORPROF_E_TYPE_IS_PARAMETERIZED EMAKEHR(0x135c)\n#define CORPROF_E_FUNCTION_IS_PARAMETERIZED EMAKEHR(0x135d)\n#define CORPROF_E_STACKSNAPSHOT_INVALID_TGT_THREAD EMAKEHR(0x135e)\n#define CORPROF_E_STACKSNAPSHOT_UNMANAGED_CTX EMAKEHR(0x135f)\n#define CORPROF_E_STACKSNAPSHOT_UNSAFE EMAKEHR(0x1360)\n#define CORPROF_E_STACKSNAPSHOT_ABORTED EMAKEHR(0x1361)\n#define CORPROF_E_LITERALS_HAVE_NO_ADDRESS EMAKEHR(0x1362)\n#define CORPROF_E_UNSUPPORTED_CALL_SEQUENCE EMAKEHR(0x1363)\n#define CORPROF_E_ASYNCHRONOUS_UNSAFE EMAKEHR(0x1364)\n#define CORPROF_E_CLASSID_IS_ARRAY EMAKEHR(0x1365)\n#define CORPROF_E_CLASSID_IS_COMPOSITE EMAKEHR(0x1366)\n#define CORPROF_E_PROFILER_DETACHING EMAKEHR(0x1367)\n#define CORPROF_E_PROFILER_NOT_ATTACHABLE EMAKEHR(0x1368)\n#define CORPROF_E_UNRECOGNIZED_PIPE_MSG_FORMAT EMAKEHR(0x1369)\n#define CORPROF_E_PROFILER_ALREADY_ACTIVE EMAKEHR(0x136a)\n#define CORPROF_E_PROFILEE_INCOMPATIBLE_WITH_TRIGGER EMAKEHR(0x136b)\n#define CORPROF_E_IPC_FAILED EMAKEHR(0x136c)\n#define CORPROF_E_PROFILEE_PROCESS_NOT_FOUND EMAKEHR(0x136d)\n#define CORPROF_E_CALLBACK3_REQUIRED EMAKEHR(0x136e)\n#define CORPROF_E_UNSUPPORTED_FOR_ATTACHING_PROFILER EMAKEHR(0x136f)\n#define CORPROF_E_IRREVERSIBLE_INSTRUMENTATION_PRESENT EMAKEHR(0x1370)\n#define CORPROF_E_RUNTIME_UNINITIALIZED EMAKEHR(0x1371)\n#define CORPROF_E_IMMUTABLE_FLAGS_SET EMAKEHR(0x1372)\n#define CORPROF_E_PROFILER_NOT_YET_INITIALIZED EMAKEHR(0x1373)\n#define CORPROF_E_INCONSISTENT_WITH_FLAGS EMAKEHR(0x1374)\n#define CORPROF_E_PROFILER_CANCEL_ACTIVATION EMAKEHR(0x1375)\n#define CORPROF_E_CONCURRENT_GC_NOT_PROFILABLE EMAKEHR(0x1376)\n#define CORPROF_E_INCONSISTENT_FLAGS_WITH_HOST_PROTECTION_SETTING EMAKEHR(0x1377)\n#define CORPROF_E_DEBUGGING_DISABLED EMAKEHR(0x1378)\n#define CORPROF_E_TIMEOUT_WAITING_FOR_CONCURRENT_GC EMAKEHR(0x1379)\n#define CORPROF_E_MODULE_IS_DYNAMIC EMAKEHR(0x137a)\n#define CORPROF_E_CALLBACK4_REQUIRED EMAKEHR(0x137b)\n#define CORPROF_E_REJIT_NOT_ENABLED EMAKEHR(0x137c)\n#define CORPROF_E_ACTIVE_REJIT_REQUEST_NOT_FOUND EMAKEHR(0x137d)\n#define CORPROF_E_FUNCTION_IS_COLLECTIBLE EMAKEHR(0x137e)\n#define CORPROF_E_REJIT_REQUIRES_DISABLE_NGEN EMAKEHR(0x137f)\n\n#define CORSEC_E_DECODE_SET EMAKEHR(0x1410)\n#define CORSEC_E_ENCODE_SET EMAKEHR(0x1411)\n#define CORSEC_E_UNSUPPORTED_FORMAT EMAKEHR(0x1412)\n#define CORSEC_E_CRYPTOAPI_CALL_FAILED EMAKEHR(0x1413)\n#define CORSEC_E_NO_SUITABLE_CSP EMAKEHR(0x1414)\n#define CORSEC_E_INVALID_ATTR EMAKEHR(0x1415)\n#define CORSEC_E_POLICY_EXCEPTION EMAKEHR(0x1416)\n#define CORSEC_E_MIN_GRANT_FAIL EMAKEHR(0x1417)\n#define CORSEC_E_NO_EXEC_PERM EMAKEHR(0x1418)\n#define CORSEC_E_XMLSYNTAX EMAKEHR(0x1419)\n#define CORSEC_E_INVALID_STRONGNAME EMAKEHR(0x141a)\n#define CORSEC_E_MISSING_STRONGNAME EMAKEHR(0x141b)\n#define CORSEC_E_CONTAINER_NOT_FOUND EMAKEHR(0x141c)\n#define CORSEC_E_INVALID_IMAGE_FORMAT EMAKEHR(0x141d)\n#define CORSEC_E_INVALID_PUBLICKEY EMAKEHR(0x141e)\n#define CORSEC_E_SIGNATURE_MISMATCH EMAKEHR(0x1420)\n#define CORSEC_E_INVALID_SIGNATUREKEY EMAKEHR(0x1422)\n#define CORSEC_E_INVALID_COUNTERSIGNATURE EMAKEHR(0x1423)\n#define CORSEC_E_CRYPTO EMAKEHR(0x1430)\n#define CORSEC_E_CRYPTO_UNEX_OPER EMAKEHR(0x1431)\n\n#define CORSECATTR_E_BAD_ATTRIBUTE EMAKEHR(0x143a)\n#define CORSECATTR_E_MISSING_CONSTRUCTOR EMAKEHR(0x143b)\n#define CORSECATTR_E_FAILED_TO_CREATE_PERM EMAKEHR(0x143c)\n#define CORSECATTR_E_BAD_ACTION_ASM EMAKEHR(0x143d)\n#define CORSECATTR_E_BAD_ACTION_OTHER EMAKEHR(0x143e)\n#define CORSECATTR_E_BAD_PARENT EMAKEHR(0x143f)\n#define CORSECATTR_E_TRUNCATED EMAKEHR(0x1440)\n#define CORSECATTR_E_BAD_VERSION EMAKEHR(0x1441)\n#define CORSECATTR_E_BAD_ACTION EMAKEHR(0x1442)\n#define CORSECATTR_E_NO_SELF_REF EMAKEHR(0x1443)\n#define CORSECATTR_E_BAD_NONCAS EMAKEHR(0x1444)\n#define CORSECATTR_E_ASSEMBLY_LOAD_FAILED EMAKEHR(0x1445)\n#define CORSECATTR_E_ASSEMBLY_LOAD_FAILED_EX EMAKEHR(0x1446)\n#define CORSECATTR_E_TYPE_LOAD_FAILED EMAKEHR(0x1447)\n#define CORSECATTR_E_TYPE_LOAD_FAILED_EX EMAKEHR(0x1448)\n#define CORSECATTR_E_ABSTRACT EMAKEHR(0x1449)\n#define CORSECATTR_E_UNSUPPORTED_TYPE EMAKEHR(0x144a)\n#define CORSECATTR_E_UNSUPPORTED_ENUM_TYPE EMAKEHR(0x144b)\n#define CORSECATTR_E_NO_FIELD EMAKEHR(0x144c)\n#define CORSECATTR_E_NO_PROPERTY EMAKEHR(0x144d)\n#define CORSECATTR_E_EXCEPTION EMAKEHR(0x144e)\n#define CORSECATTR_E_EXCEPTION_HR EMAKEHR(0x144f)\n\n#define CEE_E_ENTRYPOINT EMAKEHR(0x1000)\n#define CEE_E_CVTRES_NOT_FOUND EMAKEHR(0x1001)\n\n#define HOST_E_DEADLOCK EMAKEHR(0x1020)\n#define HOST_E_INTERRUPTED EMAKEHR(0x1021)\n#define HOST_E_INVALIDOPERATION EMAKEHR(0x1022)\n#define HOST_E_CLRNOTAVAILABLE EMAKEHR(0x1023)\n#define HOST_E_TIMEOUT EMAKEHR(0x1024)\n#define HOST_E_NOT_OWNER EMAKEHR(0x1025)\n#define HOST_E_ABANDONED EMAKEHR(0x1026)\n#define HOST_E_EXITPROCESS_THREADABORT EMAKEHR(0x1027)\n#define HOST_E_EXITPROCESS_ADUNLOAD EMAKEHR(0x1028)\n#define HOST_E_EXITPROCESS_TIMEOUT EMAKEHR(0x1029)\n#define HOST_E_EXITPROCESS_OUTOFMEMORY EMAKEHR(0x102a)\n#define HOST_E_EXITPROCESS_STACKOVERFLOW EMAKEHR(0x102b)\n\n#define ISS_E_ISOSTORE_START EMAKEHR(0x1450)\n#define ISS_E_ISOSTORE EMAKEHR(0x1450)\n#define ISS_E_OPEN_STORE_FILE EMAKEHR(0x1460)\n#define ISS_E_OPEN_FILE_MAPPING EMAKEHR(0x1461)\n#define ISS_E_MAP_VIEW_OF_FILE EMAKEHR(0x1462)\n#define ISS_E_GET_FILE_SIZE EMAKEHR(0x1463)\n#define ISS_E_CREATE_MUTEX EMAKEHR(0x1464)\n#define ISS_E_LOCK_FAILED EMAKEHR(0x1465)\n#define ISS_E_FILE_WRITE EMAKEHR(0x1466)\n#define ISS_E_SET_FILE_POINTER EMAKEHR(0x1467)\n#define ISS_E_CREATE_DIR EMAKEHR(0x1468)\n#define ISS_E_STORE_NOT_OPEN EMAKEHR(0x1469)\n#define ISS_E_CORRUPTED_STORE_FILE EMAKEHR(0x1480)\n#define ISS_E_STORE_VERSION EMAKEHR(0x1481)\n#define ISS_E_FILE_NOT_MAPPED EMAKEHR(0x1482)\n#define ISS_E_BLOCK_SIZE_TOO_SMALL EMAKEHR(0x1483)\n#define ISS_E_ALLOC_TOO_LARGE EMAKEHR(0x1484)\n#define ISS_E_USAGE_WILL_EXCEED_QUOTA EMAKEHR(0x1485)\n#define ISS_E_TABLE_ROW_NOT_FOUND EMAKEHR(0x1486)\n#define ISS_E_DEPRECATE EMAKEHR(0x14a0)\n#define ISS_E_CALLER EMAKEHR(0x14a1)\n#define ISS_E_PATH_LENGTH EMAKEHR(0x14a2)\n#define ISS_E_MACHINE EMAKEHR(0x14a3)\n#define ISS_E_MACHINE_DACL EMAKEHR(0x14a4)\n#define ISS_E_ISOSTORE_END EMAKEHR(0x14ff)\n\n#define META_E_DUPLICATE EMAKEHR(0x1180)\n#define META_E_GUID_REQUIRED EMAKEHR(0x1181)\n#define META_E_TYPEDEF_MISMATCH EMAKEHR(0x1182)\n#define META_E_MERGE_COLLISION EMAKEHR(0x1183)\n#define META_E_METHD_NOT_FOUND EMAKEHR(0x1187)\n#define META_E_FIELD_NOT_FOUND EMAKEHR(0x1188)\n#define META_E_PARAM_MISMATCH EMAKEHR(0x1189)\n#define META_E_BADMETADATA EMAKEHR(0x118a)\n#define META_E_INTFCEIMPL_NOT_FOUND EMAKEHR(0x118b)\n#define META_E_CLASS_LAYOUT_INCONSISTENT EMAKEHR(0x118d)\n#define META_E_FIELD_MARSHAL_NOT_FOUND EMAKEHR(0x118e)\n#define META_E_METHODSEM_NOT_FOUND EMAKEHR(0x118f)\n#define META_E_EVENT_NOT_FOUND EMAKEHR(0x1190)\n#define META_E_PROP_NOT_FOUND EMAKEHR(0x1191)\n#define META_E_BAD_SIGNATURE EMAKEHR(0x1192)\n#define META_E_BAD_INPUT_PARAMETER EMAKEHR(0x1193)\n#define META_E_METHDIMPL_INCONSISTENT EMAKEHR(0x1194)\n#define META_E_MD_INCONSISTENCY EMAKEHR(0x1195)\n#define META_E_CANNOTRESOLVETYPEREF EMAKEHR(0x1196)\n#define META_E_STRINGSPACE_FULL EMAKEHR(0x1198)\n#define META_E_UNEXPECTED_REMAP EMAKEHR(0x1199)\n#define META_E_HAS_UNMARKALL EMAKEHR(0x119a)\n#define META_E_MUST_CALL_UNMARKALL EMAKEHR(0x119b)\n#define META_E_GENERICPARAM_INCONSISTENT EMAKEHR(0x119c)\n#define META_E_EVENT_COUNTS EMAKEHR(0x119d)\n#define META_E_PROPERTY_COUNTS EMAKEHR(0x119e)\n#define META_E_TYPEDEF_MISSING EMAKEHR(0x119f)\n#define META_E_INVALID_TOKEN_TYPE EMAKEHR(0x115f)\n#define META_E_CA_INVALID_TARGET EMAKEHR(0x11c0)\n#define META_E_CA_INVALID_VALUE EMAKEHR(0x11c1)\n#define META_E_CA_INVALID_BLOB EMAKEHR(0x11c2)\n#define META_E_CA_REPEATED_ARG EMAKEHR(0x11c3)\n#define META_E_CA_UNKNOWN_ARGUMENT EMAKEHR(0x11c4)\n#define META_E_CA_VARIANT_NYI EMAKEHR(0x11c5)\n#define META_E_CA_ARRAY_NYI EMAKEHR(0x11c6)\n#define META_E_CA_UNEXPECTED_TYPE EMAKEHR(0x11c7)\n#define META_E_CA_INVALID_ARGTYPE EMAKEHR(0x11c8)\n#define META_E_CA_INVALID_ARG_FOR_TYPE EMAKEHR(0x11c9)\n#define META_E_CA_INVALID_UUID EMAKEHR(0x11ca)\n#define META_E_CA_INVALID_MARSHALAS_FIELDS EMAKEHR(0x11cb)\n#define META_E_CA_NT_FIELDONLY EMAKEHR(0x11cc)\n#define META_E_CA_NEGATIVE_PARAMINDEX EMAKEHR(0x11cd)\n#define META_E_CA_NEGATIVE_MULTIPLIER EMAKEHR(0x11ce)\n#define META_E_CA_NEGATIVE_CONSTSIZE EMAKEHR(0x11cf)\n#define META_E_CA_FIXEDSTR_SIZE_REQUIRED EMAKEHR(0x11d0)\n#define META_E_CA_CUSTMARSH_TYPE_REQUIRED EMAKEHR(0x11d1)\n#define META_E_CA_FILENAME_REQUIRED EMAKEHR(0x11d2)\n#define META_E_NOT_IN_ENC_MODE EMAKEHR(0x11d4)\n#define META_E_METHOD_COUNTS EMAKEHR(0x11d6)\n#define META_E_FIELD_COUNTS EMAKEHR(0x11d7)\n#define META_E_PARAM_COUNTS EMAKEHR(0x11d8)\n#define META_E_MISMATCHED_VISIBLITY EMAKEHR(0x11e4)\n#define META_E_CA_BAD_FRIENDS_ARGS EMAKEHR(0x11e5)\n#define META_E_CA_FRIENDS_SN_REQUIRED EMAKEHR(0x11e6)\n\n#define MSEE_E_LOADLIBFAILED EMAKEHR(0x1010)\n#define MSEE_E_GETPROCFAILED EMAKEHR(0x1011)\n#define MSEE_E_MULTCOPIESLOADED EMAKEHR(0x1012)\n#define MSEE_E_ASSEMBLYLOADINPROGRESS EMAKEHR(0x1016)\n#define MSEE_E_CANNOTCREATEAPPDOMAIN EMAKEHR(0x1017)\n\n#define NGEN_FAILED_GET_DEPENDENCIES EMAKEHR(0x1f00)\n#define NGEN_FAILED_NATIVE_IMAGE_DELETE EMAKEHR(0x1f01)\n#define NGEN_E_TOO_MANY_INTERFACES EMAKEHR(0x1f02)\n#define NGEN_E_OLDER_RUNTIME EMAKEHR(0x1f03)\n#define NGEN_E_WORKER_UNEXPECTED_EXIT EMAKEHR(0x1f04)\n#define NGEN_E_WORKER_UNEXPECTED_SYNC EMAKEHR(0x1f05)\n#define NGEN_E_SYS_ASM_NI_MISSING EMAKEHR(0x1f06)\n#define NGEN_E_EXE_MACHINE_TYPE_MISMATCH EMAKEHR(0x1f07)\n#define NGEN_E_ASSEMBLY_EXCLUSION_FILE_PARSE_ERROR EMAKEHR(0x1f08)\n#define NGEN_E_HARDBOUND_DEPENDENCY_MISSING EMAKEHR(0x1f09)\n#define NGEN_E_NOT_RUNNING_IN_EXPECTED_PACKAGE EMAKEHR(0x1f0a)\n\n#define PEFMT_E_NO_CONTENTS      EMAKEHR(0x1d00)\n#define PEFMT_E_NO_NTHEADERS     EMAKEHR(0x1d01)\n#define PEFMT_E_64BIT            EMAKEHR(0x1d02)\n#define PEFMT_E_NO_CORHEADER     EMAKEHR(0x1d03)\n#define PEFMT_E_NOT_ILONLY       EMAKEHR(0x1d04)\n#define PEFMT_E_IMPORT_DLLS      EMAKEHR(0x1d05)\n#define PEFMT_E_EXE_NOENTRYPOINT EMAKEHR(0x1d06)\n#define PEFMT_E_BASE_RELOCS      EMAKEHR(0x1d07)\n#define PEFMT_E_ENTRYPOINT       EMAKEHR(0x1d08)\n#define PEFMT_E_ZERO_SIZEOFCODE  EMAKEHR(0x1d09)\n#define PEFMT_E_BAD_CORHEADER    EMAKEHR(0x1d0a)\n#define PEFMT_E_32BIT            EMAKEHR(0x1d0b)\n\n#define SECURITY_E_XML_TO_ASN_ENCODING   EMAKEHR(0x1400)\n#define SECURITY_E_INCOMPATIBLE_SHARE    EMAKEHR(0x1401)\n#define SECURITY_E_UNVERIFIABLE          EMAKEHR(0x1402)\n#define SECURITY_E_INCOMPATIBLE_EVIDENCE EMAKEHR(0x1403)\n\n#define SN_E_PUBLICKEY_MISMATCH EMAKEHR(0x1421)\n#define SN_CRYPTOAPI_CALL_FAILED EMAKEHR(0x1413)\n#define SN_NO_SUITABLE_CSP EMAKEHR(0x1414)\n\n#define VER_E_HRESULT EMAKEHR(0x1801)\n#define VER_E_OFFSET EMAKEHR(0x1802)\n#define VER_E_OPCODE EMAKEHR(0x1803)\n#define VER_E_OPERAND EMAKEHR(0x1804)\n#define VER_E_TOKEN EMAKEHR(0x1805)\n#define VER_E_EXCEPT EMAKEHR(0x1806)\n#define VER_E_STACK_SLOT EMAKEHR(0x1807)\n#define VER_E_LOC EMAKEHR(0x1808)\n#define VER_E_ARG EMAKEHR(0x1809)\n#define VER_E_FOUND EMAKEHR(0x180a)\n#define VER_E_EXPECTED EMAKEHR(0x180b)\n#define VER_E_LOC_BYNAME EMAKEHR(0x180c)\n#define VER_E_UNKNOWN_OPCODE EMAKEHR(0x1810)\n#define VER_E_SIG_CALLCONV EMAKEHR(0x1811)\n#define VER_E_SIG_ELEMTYPE EMAKEHR(0x1812)\n#define VER_E_RET_SIG EMAKEHR(0x1814)\n#define VER_E_FIELD_SIG EMAKEHR(0x1815)\n#define VER_E_OPEN_DLGT_PROT_ACC EMAKEHR(0x1816)\n#define VER_E_INTERNAL EMAKEHR(0x1818)\n#define VER_E_STACK_TOO_LARGE EMAKEHR(0x1819)\n#define VER_E_ARRAY_NAME_LONG EMAKEHR(0x181a)\n#define VER_E_FALLTHRU EMAKEHR(0x1820)\n#define VER_E_TRY_GTEQ_END EMAKEHR(0x1821)\n#define VER_E_TRYEND_GT_CS EMAKEHR(0x1822)\n#define VER_E_HND_GTEQ_END EMAKEHR(0x1823)\n#define VER_E_HNDEND_GT_CS EMAKEHR(0x1824)\n#define VER_E_FLT_GTEQ_CS EMAKEHR(0x1825)\n#define VER_E_TRY_START EMAKEHR(0x1826)\n#define VER_E_HND_START EMAKEHR(0x1827)\n#define VER_E_FLT_START EMAKEHR(0x1828)\n#define VER_E_TRY_OVERLAP EMAKEHR(0x1829)\n#define VER_E_TRY_EQ_HND_FIL EMAKEHR(0x182a)\n#define VER_E_TRY_SHARE_FIN_FAL EMAKEHR(0x182b)\n#define VER_E_HND_OVERLAP EMAKEHR(0x182c)\n#define VER_E_HND_EQ EMAKEHR(0x182d)\n#define VER_E_FIL_OVERLAP EMAKEHR(0x182e)\n#define VER_E_FIL_EQ EMAKEHR(0x182f)\n#define VER_E_FIL_CONT_TRY EMAKEHR(0x1830)\n#define VER_E_FIL_CONT_HND EMAKEHR(0x1831)\n#define VER_E_FIL_CONT_FIL EMAKEHR(0x1832)\n#define VER_E_FIL_GTEQ_CS EMAKEHR(0x1833)\n#define VER_E_FIL_START EMAKEHR(0x1834)\n#define VER_E_FALLTHRU_EXCEP EMAKEHR(0x1835)\n#define VER_E_FALLTHRU_INTO_HND EMAKEHR(0x1836)\n#define VER_E_FALLTHRU_INTO_FIL EMAKEHR(0x1837)\n#define VER_E_LEAVE EMAKEHR(0x1838)\n#define VER_E_RETHROW EMAKEHR(0x1839)\n#define VER_E_ENDFINALLY EMAKEHR(0x183a)\n#define VER_E_ENDFILTER EMAKEHR(0x183b)\n#define VER_E_ENDFILTER_MISSING EMAKEHR(0x183c)\n#define VER_E_BR_INTO_TRY EMAKEHR(0x183d)\n#define VER_E_BR_INTO_HND EMAKEHR(0x183e)\n#define VER_E_BR_INTO_FIL EMAKEHR(0x183f)\n#define VER_E_BR_OUTOF_TRY EMAKEHR(0x1840)\n#define VER_E_BR_OUTOF_HND EMAKEHR(0x1841)\n#define VER_E_BR_OUTOF_FIL EMAKEHR(0x1842)\n#define VER_E_BR_OUTOF_FIN EMAKEHR(0x1843)\n#define VER_E_RET_FROM_TRY EMAKEHR(0x1844)\n#define VER_E_RET_FROM_HND EMAKEHR(0x1845)\n#define VER_E_RET_FROM_FIL EMAKEHR(0x1846)\n#define VER_E_BAD_JMP_TARGET EMAKEHR(0x1847)\n#define VER_E_PATH_LOC EMAKEHR(0x1848)\n#define VER_E_PATH_THIS EMAKEHR(0x1849)\n#define VER_E_PATH_STACK EMAKEHR(0x184a)\n#define VER_E_PATH_STACK_DEPTH EMAKEHR(0x184b)\n#define VER_E_THIS EMAKEHR(0x184c)\n#define VER_E_THIS_UNINIT_EXCEP EMAKEHR(0x184d)\n#define VER_E_THIS_UNINIT_STORE EMAKEHR(0x184e)\n#define VER_E_THIS_UNINIT_RET EMAKEHR(0x184f)\n#define VER_E_THIS_UNINIT_V_RET EMAKEHR(0x1850)\n#define VER_E_THIS_UNINIT_BR EMAKEHR(0x1851)\n#define VER_E_LDFTN_CTOR EMAKEHR(0x1852)\n#define VER_E_STACK_NOT_EQ EMAKEHR(0x1853)\n#define VER_E_STACK_UNEXPECTED EMAKEHR(0x1854)\n#define VER_E_STACK_EXCEPTION EMAKEHR(0x1855)\n#define VER_E_STACK_OVERFLOW EMAKEHR(0x1856)\n#define VER_E_STACK_UNDERFLOW EMAKEHR(0x1857)\n#define VER_E_STACK_EMPTY EMAKEHR(0x1858)\n#define VER_E_STACK_UNINIT EMAKEHR(0x1859)\n#define VER_E_STACK_I_I4_I8 EMAKEHR(0x185a)\n#define VER_E_STACK_R_R4_R8 EMAKEHR(0x185b)\n#define VER_E_STACK_NO_R_I8 EMAKEHR(0x185c)\n#define VER_E_STACK_NUMERIC EMAKEHR(0x185d)\n#define VER_E_STACK_OBJREF EMAKEHR(0x185e)\n#define VER_E_STACK_P_OBJREF EMAKEHR(0x185f)\n#define VER_E_STACK_BYREF EMAKEHR(0x1860)\n#define VER_E_STACK_METHOD EMAKEHR(0x1861)\n#define VER_E_STACK_ARRAY_SD EMAKEHR(0x1862)\n#define VER_E_STACK_VALCLASS EMAKEHR(0x1863)\n#define VER_E_STACK_P_VALCLASS EMAKEHR(0x1864)\n#define VER_E_STACK_NO_VALCLASS EMAKEHR(0x1865)\n#define VER_E_LOC_DEAD EMAKEHR(0x1866)\n#define VER_E_LOC_NUM EMAKEHR(0x1867)\n#define VER_E_ARG_NUM EMAKEHR(0x1868)\n#define VER_E_TOKEN_RESOLVE EMAKEHR(0x1869)\n#define VER_E_TOKEN_TYPE EMAKEHR(0x186a)\n#define VER_E_TOKEN_TYPE_MEMBER EMAKEHR(0x186b)\n#define VER_E_TOKEN_TYPE_FIELD EMAKEHR(0x186c)\n#define VER_E_TOKEN_TYPE_SIG EMAKEHR(0x186d)\n#define VER_E_UNVERIFIABLE EMAKEHR(0x186e)\n#define VER_E_LDSTR_OPERAND EMAKEHR(0x186f)\n#define VER_E_RET_PTR_TO_STACK EMAKEHR(0x1870)\n#define VER_E_RET_VOID EMAKEHR(0x1871)\n#define VER_E_RET_MISSING EMAKEHR(0x1872)\n#define VER_E_RET_EMPTY EMAKEHR(0x1873)\n#define VER_E_RET_UNINIT EMAKEHR(0x1874)\n#define VER_E_ARRAY_ACCESS EMAKEHR(0x1875)\n#define VER_E_ARRAY_V_STORE EMAKEHR(0x1876)\n#define VER_E_ARRAY_SD EMAKEHR(0x1877)\n#define VER_E_ARRAY_SD_PTR EMAKEHR(0x1878)\n#define VER_E_ARRAY_FIELD EMAKEHR(0x1879)\n#define VER_E_ARGLIST EMAKEHR(0x187a)\n#define VER_E_VALCLASS EMAKEHR(0x187b)\n#define VER_E_METHOD_ACCESS EMAKEHR(0x187c)\n#define VER_E_FIELD_ACCESS EMAKEHR(0x187d)\n#define VER_E_DEAD EMAKEHR(0x187e)\n#define VER_E_FIELD_STATIC EMAKEHR(0x187f)\n#define VER_E_FIELD_NO_STATIC EMAKEHR(0x1880)\n#define VER_E_ADDR EMAKEHR(0x1881)\n#define VER_E_ADDR_BYREF EMAKEHR(0x1882)\n#define VER_E_ADDR_LITERAL EMAKEHR(0x1883)\n#define VER_E_INITONLY EMAKEHR(0x1884)\n#define VER_E_THROW EMAKEHR(0x1885)\n#define VER_E_CALLVIRT_VALCLASS EMAKEHR(0x1886)\n#define VER_E_CALL_SIG EMAKEHR(0x1887)\n#define VER_E_CALL_STATIC EMAKEHR(0x1888)\n#define VER_E_CTOR EMAKEHR(0x1889)\n#define VER_E_CTOR_VIRT EMAKEHR(0x188a)\n#define VER_E_CTOR_OR_SUPER EMAKEHR(0x188b)\n#define VER_E_CTOR_MUL_INIT EMAKEHR(0x188c)\n#define VER_E_SIG EMAKEHR(0x188d)\n#define VER_E_SIG_ARRAY EMAKEHR(0x188e)\n#define VER_E_SIG_ARRAY_PTR EMAKEHR(0x188f)\n#define VER_E_SIG_ARRAY_BYREF EMAKEHR(0x1890)\n#define VER_E_SIG_ELEM_PTR EMAKEHR(0x1891)\n#define VER_E_SIG_VARARG EMAKEHR(0x1892)\n#define VER_E_SIG_VOID EMAKEHR(0x1893)\n#define VER_E_SIG_BYREF_BYREF EMAKEHR(0x1894)\n#define VER_E_CODE_SIZE_ZERO EMAKEHR(0x1896)\n#define VER_E_BAD_VARARG EMAKEHR(0x1897)\n#define VER_E_TAIL_CALL EMAKEHR(0x1898)\n#define VER_E_TAIL_BYREF EMAKEHR(0x1899)\n#define VER_E_TAIL_RET EMAKEHR(0x189a)\n#define VER_E_TAIL_RET_VOID EMAKEHR(0x189b)\n#define VER_E_TAIL_RET_TYPE EMAKEHR(0x189c)\n#define VER_E_TAIL_STACK_EMPTY EMAKEHR(0x189d)\n#define VER_E_METHOD_END EMAKEHR(0x189e)\n#define VER_E_BAD_BRANCH EMAKEHR(0x189f)\n#define VER_E_FIN_OVERLAP EMAKEHR(0x18a0)\n#define VER_E_LEXICAL_NESTING EMAKEHR(0x18a1)\n#define VER_E_VOLATILE EMAKEHR(0x18a2)\n#define VER_E_UNALIGNED EMAKEHR(0x18a3)\n#define VER_E_INNERMOST_FIRST EMAKEHR(0x18a4)\n#define VER_E_CALLI_VIRTUAL EMAKEHR(0x18a5)\n#define VER_E_CALL_ABSTRACT EMAKEHR(0x18a6)\n#define VER_E_STACK_UNEXP_ARRAY EMAKEHR(0x18a7)\n#define VER_E_NOT_IN_GC_HEAP EMAKEHR(0x18a8)\n#define VER_E_TRY_N_EMPTY_STACK EMAKEHR(0x18a9)\n#define VER_E_DLGT_CTOR EMAKEHR(0x18aa)\n#define VER_E_DLGT_BB EMAKEHR(0x18ab)\n#define VER_E_DLGT_PATTERN EMAKEHR(0x18ac)\n#define VER_E_DLGT_LDFTN EMAKEHR(0x18ad)\n#define VER_E_FTN_ABSTRACT EMAKEHR(0x18ae)\n#define VER_E_SIG_C_VC EMAKEHR(0x18af)\n#define VER_E_SIG_VC_C EMAKEHR(0x18b0)\n#define VER_E_BOX_PTR_TO_STACK EMAKEHR(0x18b1)\n#define VER_E_SIG_BYREF_TB_AH EMAKEHR(0x18b2)\n#define VER_E_SIG_ARRAY_TB_AH EMAKEHR(0x18b3)\n#define VER_E_ENDFILTER_STACK EMAKEHR(0x18b4)\n#define VER_E_DLGT_SIG_I EMAKEHR(0x18b5)\n#define VER_E_DLGT_SIG_O EMAKEHR(0x18b6)\n#define VER_E_RA_PTR_TO_STACK EMAKEHR(0x18b7)\n#define VER_E_CATCH_VALUE_TYPE EMAKEHR(0x18b8)\n#define VER_E_CATCH_BYREF EMAKEHR(0x18b9)\n#define VER_E_FIL_PRECEED_HND EMAKEHR(0x18ba)\n#define VER_E_LDVIRTFTN_STATIC EMAKEHR(0x18bb)\n#define VER_E_CALLVIRT_STATIC EMAKEHR(0x18bc)\n#define VER_E_INITLOCALS EMAKEHR(0x18bd)\n#define VER_E_BR_TO_EXCEPTION EMAKEHR(0x18be)\n#define VER_E_CALL_CTOR EMAKEHR(0x18bf)\n#define VER_E_VALCLASS_OBJREF_VAR EMAKEHR(0x18c0)\n#define VER_E_STACK_P_VALCLASS_OBJREF_VAR EMAKEHR(0x18c1)\n#define VER_E_SIG_VAR_PARAM EMAKEHR(0x18c2)\n#define VER_E_SIG_MVAR_PARAM EMAKEHR(0x18c3)\n#define VER_E_SIG_VAR_ARG EMAKEHR(0x18c4)\n#define VER_E_SIG_MVAR_ARG EMAKEHR(0x18c5)\n#define VER_E_SIG_GENERICINST EMAKEHR(0x18c6)\n#define VER_E_SIG_METHOD_INST EMAKEHR(0x18c7)\n#define VER_E_SIG_METHOD_PARENT_INST EMAKEHR(0x18c8)\n#define VER_E_SIG_FIELD_PARENT_INST EMAKEHR(0x18c9)\n#define VER_E_CALLCONV_NOT_GENERICINST EMAKEHR(0x18ca)\n#define VER_E_TOKEN_BAD_METHOD_SPEC EMAKEHR(0x18cb)\n#define VER_E_BAD_READONLY_PREFIX EMAKEHR(0x18cc)\n#define VER_E_BAD_CONSTRAINED_PREFIX EMAKEHR(0x18cd)\n#define VER_E_CIRCULAR_VAR_CONSTRAINTS EMAKEHR(0x18ce)\n#define VER_E_CIRCULAR_MVAR_CONSTRAINTS EMAKEHR(0x18cf)\n#define VER_E_UNSATISFIED_METHOD_INST EMAKEHR(0x18d0)\n#define VER_E_UNSATISFIED_METHOD_PARENT_INST EMAKEHR(0x18d1)\n#define VER_E_UNSATISFIED_FIELD_PARENT_INST EMAKEHR(0x18d2)\n#define VER_E_UNSATISFIED_BOX_OPERAND EMAKEHR(0x18d3)\n#define VER_E_CONSTRAINED_CALL_WITH_NON_BYREF_THIS EMAKEHR(0x18d4)\n#define VER_E_CONSTRAINED_OF_NON_VARIABLE_TYPE EMAKEHR(0x18d5)\n#define VER_E_READONLY_UNEXPECTED_CALLEE EMAKEHR(0x18d6)\n#define VER_E_READONLY_ILLEGAL_WRITE EMAKEHR(0x18d7)\n#define VER_E_READONLY_IN_MKREFANY EMAKEHR(0x18d8)\n#define VER_E_UNALIGNED_ALIGNMENT EMAKEHR(0x18d9)\n#define VER_E_TAILCALL_INSIDE_EH EMAKEHR(0x18da)\n#define VER_E_BACKWARD_BRANCH EMAKEHR(0x18db)\n#define VER_E_CALL_TO_VTYPE_BASE EMAKEHR(0x18dc)\n#define VER_E_NEWOBJ_OF_ABSTRACT_CLASS EMAKEHR(0x18dd)\n#define VER_E_UNMANAGED_POINTER EMAKEHR(0x18de)\n#define VER_E_LDFTN_NON_FINAL_VIRTUAL EMAKEHR(0x18df)\n#define VER_E_FIELD_OVERLAP EMAKEHR(0x18e0)\n#define VER_E_THIS_MISMATCH EMAKEHR(0x18e1)\n#define VER_E_STACK_I_I4 EMAKEHR(0x18e2)\n#define VER_E_BAD_PE EMAKEHR(0x18f0)\n#define VER_E_BAD_MD EMAKEHR(0x18f1)\n#define VER_E_BAD_APPDOMAIN EMAKEHR(0x18f2)\n#define VER_E_TYPELOAD EMAKEHR(0x18f3)\n#define VER_E_PE_LOAD EMAKEHR(0x18f4)\n#define VER_E_WRITE_RVA_STATIC EMAKEHR(0x18f5)\n#define VER_E_INITIALIZE_ARRAY_MISSING_TOKEN EMAKEHR(0x18f6)\n\n#endif    /* __WINE_CORERROR_H */\n"
  },
  {
    "path": "wine/windows/corhdr.h",
    "content": "/*\n * Copyright 2008 James Hawkins\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_CORHDR_H\n#define __WINE_CORHDR_H\n\ntypedef enum CorTokenType\n{\n    mdtModule                   = 0x00000000,\n    mdtTypeRef                  = 0x01000000,\n    mdtTypeDef                  = 0x02000000,\n    mdtFieldDef                 = 0x04000000,\n    mdtMethodDef                = 0x06000000,\n    mdtParamDef                 = 0x08000000,\n    mdtInterfaceImpl            = 0x09000000,\n    mdtMemberRef                = 0x0a000000,\n    mdtCustomAttribute          = 0x0c000000,\n    mdtPermission               = 0x0e000000,\n    mdtSignature                = 0x11000000,\n    mdtEvent                    = 0x14000000,\n    mdtProperty                 = 0x17000000,\n    mdtModuleRef                = 0x1a000000,\n    mdtTypeSpec                 = 0x1b000000,\n    mdtAssembly                 = 0x20000000,\n    mdtAssemblyRef              = 0x23000000,\n    mdtFile                     = 0x26000000,\n    mdtExportedType             = 0x27000000,\n    mdtManifestResource         = 0x28000000,\n    mdtGenericParam             = 0x2a000000,\n    mdtMethodSpec               = 0x2b000000,\n    mdtGenericParamConstraint   = 0x2c000000,\n    mdtString                   = 0x70000000,\n    mdtName                     = 0x71000000,\n    mdtBaseType                 = 0x72000000,\n} CorTokenType;\n\ntypedef enum CorElementType\n{\n    ELEMENT_TYPE_END            = 0x00,\n    ELEMENT_TYPE_VOID           = 0x01,\n    ELEMENT_TYPE_BOOLEAN        = 0x02,\n    ELEMENT_TYPE_CHAR           = 0x03,\n    ELEMENT_TYPE_I1             = 0x04,\n    ELEMENT_TYPE_U1             = 0x05,\n    ELEMENT_TYPE_I2             = 0x06,\n    ELEMENT_TYPE_U2             = 0x07,\n    ELEMENT_TYPE_I4             = 0x08,\n    ELEMENT_TYPE_U4             = 0x09,\n    ELEMENT_TYPE_I8             = 0x0a,\n    ELEMENT_TYPE_U8             = 0x0b,\n    ELEMENT_TYPE_R4             = 0x0c,\n    ELEMENT_TYPE_R8             = 0x0d,\n    ELEMENT_TYPE_STRING         = 0x0e,\n    ELEMENT_TYPE_PTR            = 0x0f,\n    ELEMENT_TYPE_BYREF          = 0x10,\n    ELEMENT_TYPE_VALUETYPE      = 0x11,\n    ELEMENT_TYPE_CLASS          = 0x12,\n    ELEMENT_TYPE_VAR            = 0x13,\n    ELEMENT_TYPE_ARRAY          = 0x14,\n    ELEMENT_TYPE_GENERICINST    = 0x15,\n    ELEMENT_TYPE_TYPEDBYREF     = 0x16,\n    ELEMENT_TYPE_I              = 0x18,\n    ELEMENT_TYPE_U              = 0x19,\n    ELEMENT_TYPE_FNPTR          = 0x1b,\n    ELEMENT_TYPE_OBJECT         = 0x1c,\n    ELEMENT_TYPE_SZARRAY        = 0x1d,\n    ELEMENT_TYPE_MVAR           = 0x1e,\n    ELEMENT_TYPE_CMOD_REQD      = 0x1f,\n    ELEMENT_TYPE_CMOD_OPT       = 0x20,\n    ELEMENT_TYPE_INTERNAL       = 0x21,\n    ELEMENT_TYPE_MAX            = 0x22,\n    ELEMENT_TYPE_MODIFIER       = 0x40,\n    ELEMENT_TYPE_SENTINEL       = 0x01 | ELEMENT_TYPE_MODIFIER,\n    ELEMENT_TYPE_PINNED         = 0x05 | ELEMENT_TYPE_MODIFIER,\n    ELEMENT_TYPE_R4_HFA         = 0x06 | ELEMENT_TYPE_MODIFIER,\n    ELEMENT_TYPE_R8_HFA         = 0x07 | ELEMENT_TYPE_MODIFIER,\n\n} CorElementType;\n\n#define RidToToken(rid,tktype) ((rid) |= (tktype))\n#define TokenFromRid(rid,tktype) ((rid) | (tktype))\n#define RidFromToken(tk) ((RID)((tk) & 0x00ffffff))\n#define TypeFromToken(tk) ((ULONG32)((tk) & 0xff000000))\n#define IsNilToken(tk) ((RidFromToken(tk)) == 0)\n\ntypedef LPVOID  mdScope;\ntypedef ULONG32 mdToken;\n\ntypedef mdToken mdModule;\ntypedef mdToken mdTypeRef;\ntypedef mdToken mdTypeDef;\ntypedef mdToken mdFieldDef;\ntypedef mdToken mdMethodDef;\ntypedef mdToken mdParamDef;\ntypedef mdToken mdInterfaceImpl;\ntypedef mdToken mdMemberRef;\ntypedef mdToken mdCustomAttribute;\ntypedef mdToken mdPermission;\ntypedef mdToken mdSignature;\ntypedef mdToken mdEvent;\ntypedef mdToken mdProperty;\ntypedef mdToken mdModuleRef;\ntypedef mdToken mdAssembly;\ntypedef mdToken mdAssemblyRef;\ntypedef mdToken mdFile;\ntypedef mdToken mdExportedType;\ntypedef mdToken mdManifestResource;\ntypedef mdToken mdTypeSpec;\ntypedef mdToken mdGenericParam;\ntypedef mdToken mdMethodSpec;\ntypedef mdToken mdGenericParamConstraint;\ntypedef mdToken mdString;\ntypedef mdToken mdCPToken;\n\n#endif /* __WINE_CORHDR_H */\n"
  },
  {
    "path": "wine/windows/cpl.h",
    "content": "/*\n * Control panel definitions\n *\n * Copyright (C) 2001 Eric Pouech\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _INC_CPL\n#define _INC_CPL\n\n#include <pshpack1.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define WM_CPL_LAUNCH   (WM_USER+1000)\n#define WM_CPL_LAUNCHED (WM_USER+1001)\n\ntypedef LONG (APIENTRY *APPLET_PROC)(HWND hwndCpl, UINT msg, LPARAM lParam1, LPARAM lParam2);\n\ntypedef struct tagCPLINFO {\n    int     idIcon;\n    int     idName;\n    int     idInfo;\n    LONG_PTR lData;\n} CPLINFO, *LPCPLINFO;\n\ntypedef struct tagNEWCPLINFOA\n{\n    DWORD   dwSize;\n    DWORD   dwFlags;\n    DWORD   dwHelpContext;\n    LONG_PTR lData;\n    HICON   hIcon;\n    CHAR    szName[32];\n    CHAR    szInfo[64];\n    CHAR    szHelpFile[128];\n} NEWCPLINFOA, *LPNEWCPLINFOA;\n\ntypedef struct tagNEWCPLINFOW\n{\n    DWORD   dwSize;\n    DWORD   dwFlags;\n    DWORD   dwHelpContext;\n    LONG_PTR lData;\n    HICON   hIcon;\n    WCHAR   szName[32];\n    WCHAR   szInfo[64];\n    WCHAR   szHelpFile[128];\n} NEWCPLINFOW, *LPNEWCPLINFOW;\n\nDECL_WINELIB_TYPE_AW(NEWCPLINFO)\nDECL_WINELIB_TYPE_AW(LPNEWCPLINFO)\n\n#define CPL_DYNAMIC_RES \t0\n#define CPL_INIT        \t1\n#define CPL_GETCOUNT    \t2\n#define CPL_INQUIRE     \t3\n#define CPL_SELECT      \t4\n#define CPL_DBLCLK      \t5\n#define CPL_STOP        \t6\n#define CPL_EXIT        \t7\n#define CPL_NEWINQUIRE\t\t8\n#define CPL_STARTWPARMSA \t9\n#define CPL_STARTWPARMSW \t10\n#define CPL_STARTWPARMS WINELIB_NAME_AW(CPL_STARTWPARMS)\n#define CPL_SETUP\t\t200\n\n#ifdef __cplusplus\n}\n#endif\n\n#include <poppack.h>\n\n#endif /* _INC_CPL */\n"
  },
  {
    "path": "wine/windows/crtrow.idl",
    "content": "/*\n * Copyright (C) 2009 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    object,\n    uuid(0c733ab2-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface ICreateRow : IUnknown\n{\n    [local]\n    HRESULT CreateRow([in, unique] IUnknown *pUnkOuter,\n                      [in] LPCOLESTR pwszURL,\n                      [in] DBBINDURLFLAG dwBindURLFlags,\n                      [in] REFGUID rguid,\n                      [in] REFIID riid,\n                      [in,  unique] IAuthenticate *pAuthenticate,\n                      [in, out, unique] DBIMPLICITSESSION *pImplSession,\n                      [in, out, unique] DBBINDURLSTATUS *pdwBindStatus,\n                      [out, annotation(\"__deref_opt_out_opt\")] LPOLESTR *ppwszNewURL,\n                      [out, iid_is(riid)] IUnknown **ppUnk);\n\n    [call_as(CreateRow)]\n    HRESULT RemoteCreateRow([in] IUnknown *pUnkOuter,\n                            [in] LPCOLESTR pwszURL,\n                            [in] DBBINDURLFLAG dwBindURLFlags,\n                            [in] REFGUID rguid,\n                            [in] REFIID riid,\n                            [in] IAuthenticate *pAuthenticate,\n                            [in] IUnknown *pSessionUnkOuter,\n                            [in, unique] IID *piid,\n                            [in, out, unique, iid_is(piid)] IUnknown **ppSession,\n                            [in, out, unique] DBBINDURLSTATUS *pdwBindStatus,\n                            [in, out, unique] LPOLESTR *ppwszNewURL,\n                            [out, iid_is(riid)] IUnknown **ppUnk);\n}\n"
  },
  {
    "path": "wine/windows/cryptdlg.h",
    "content": "/*\n * Copyright (C) 2008 Juan Lang\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __CRYPTDLG_H__\n#define __CRYPTDLG_H__\n\n#include <prsht.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define CRYPTDLG_FLAGS_MASK         0xff000000\n#define CRYPTDLG_REVOCATION_DEFAULT 0x00000000\n#define CRYPTDLG_REVOCATION_ONLINE  0x80000000\n#define CRYPTDLG_REVOCATION_CACHE   0x40000000\n#define CRYPTDLG_REVOCATION_NONE    0x20000000\n\n#define CRYPTDLG_POLICY_MASK          0x0000ffff\n#define POLICY_IGNORE_NON_CRITICAL_BC 0x00000001\n\n#define CRYPTDLG_ACTION_MASK             0xffff0000\n#define ACTION_REVOCATION_DEFAULT_ONLINE 0x00010000\n#define ACTION_REVOCATION_DEFAULT_CACHE  0x00020000\n\ntypedef BOOL (WINAPI *PFNCMFILTERPROC)(PCCERT_CONTEXT, DWORD, DWORD, DWORD);\n\n#define CERT_DISPWELL_SELECT                 1\n#define CERT_DISPWELL_TRUST_CA_CERT          2\n#define CERT_DISPWELL_TRUST_LEAF_CERT        3\n#define CERT_DISPWELL_TRUST_ADD_CA_CERT      4\n#define CERT_DISPWELL_TRUST_ADD_LEAF_CERT    5\n#define CERT_DISPWELL_DISTRUST_CA_CERT       6\n#define CERT_DISPWELL_DISTRUST_LEAF_CERT     7\n#define CERT_DISPWELL_DISTRUST_ADD_CA_CERT   8\n#define CERT_DISPWELL_DISTRUST_ADD_LEAF_CERT 9\n\ntypedef UINT (WINAPI *PFNCMHOOKPROC)(HWND, UINT, WPARAM, LPARAM);\n\n#define CSS_SELECTCERT_MASK      0x00ffffff\n#define CSS_HIDE_PROPERTIES      0x00000001\n#define CSS_ENABLEHOOK           0x00000002\n#define CSS_ALLOWMULTISELECT     0x00000004\n#define CSS_SHOW_HELP            0x00000010\n#define CSS_ENABLETEMPLATE       0x00000020\n#define CSS_ENABLETEMPLATEHANDLE 0x00000040\n\n#define SELCERT_OK         IDOK\n#define SELCERT_CANCEL     IDCANCEL\n#define SELCERT_PROPERTIES 100\n#define SELCERT_FINEPRINT  101\n#define SELCERT_CERTLIST   102\n#define SELCERT_HELP       IDHELP\n#define SELCERT_ISSUED_TO  103\n#define SELCERT_VALIDITY   104\n#define SELCERT_ALGORITHM  105\n#define SELCERT_SERIAL_NUM 106\n#define SELCERT_THUMBPRINT 107\n\ntypedef struct tagCSSA\n{\n    DWORD           dwSize;\n    HWND            hwndParent;\n    HINSTANCE       hInstance;\n    LPCSTR          pTemplateName;\n    DWORD           dwFlags;\n    LPCSTR          szTitle;\n    DWORD           cCertStore;\n    HCERTSTORE     *arrayCertStore;\n    LPCSTR          szPurposeOid;\n    DWORD           cCertContext;\n    PCCERT_CONTEXT *arrayCertContext;\n    DWORD           lCustData;\n    PFNCMHOOKPROC   pfnHook;\n    PFNCMFILTERPROC pfnFilter;\n    LPCSTR          szHelpFileName;\n    DWORD           dwHelpId;\n    HCRYPTPROV      hprov;\n} CERT_SELECT_STRUCT_A, *PCERT_SELECT_STRUCT_A;\n\ntypedef struct tagCSSW\n{\n    DWORD           dwSize;\n    HWND            hwndParent;\n    HINSTANCE       hInstance;\n    LPCWSTR         pTemplateName;\n    DWORD           dwFlags;\n    LPCWSTR         szTitle;\n    DWORD           cCertStore;\n    HCERTSTORE     *arrayCertStore;\n    LPCSTR          szPurposeOid;\n    DWORD           cCertContext;\n    PCCERT_CONTEXT *arrayCertContext;\n    DWORD           lCustData;\n    PFNCMHOOKPROC   pfnHook;\n    PFNCMFILTERPROC pfnFilter;\n    LPCWSTR         szHelpFileName;\n    DWORD           dwHelpId;\n    HCRYPTPROV      hprov;\n} CERT_SELECT_STRUCT_W, *PCERT_SELECT_STRUCT_W;\n\n#define CERT_SELECT_STRUCT WINELIB_NAME_AW(CERT_SELECT_STRUCT_)\n\nBOOL WINAPI CertSelectCertificateA(PCERT_SELECT_STRUCT_A pCertSelectInfo);\nBOOL WINAPI CertSelectCertificateW(PCERT_SELECT_STRUCT_W pCertSelectInfo);\n#define CertSelectCertificate WINELIB_NAME_AW(CertSelectCertificate)\n\n#define CM_VIEWFLAGS_MASK       0x00ffffff\n#define CM_ENABLEHOOK           0x00000001\n#define CM_SHOW_HELP            0x00000002\n#define CM_SHOW_HELPICON        0x00000004\n#define CM_ENABLETEMPLATE       0x00000008\n#define CM_HIDE_ADVANCEPAGE     0x00000010\n#define CM_HIDE_TRUSTPAGE       0x00000020\n#define CM_NO_NAMECHANGE        0x00000040\n#define CM_NO_EDITTRUST         0x00000080\n#define CM_HIDE_DETAILPAGE      0x00000100\n#define CM_ADD_CERT_STORES      0x00000200\n#define CERTVIEW_CRYPTUI_LPARAM 0x00800000\n\ntypedef struct tagCERT_VIEWPROPERTIES_STRUCT_A\n{\n    DWORD           dwSize;\n    HWND            hwndParent;\n    HINSTANCE       hInstance;\n    DWORD           dwFlags;\n    LPCSTR          szTitle;\n    PCCERT_CONTEXT  pCertContext;\n    LPSTR          *arrayPurposes;\n    DWORD           cArrayPurposes;\n    DWORD           cRootStores;\n    HCERTSTORE     *rghstoreRoots;\n    DWORD           cStores;\n    HCERTSTORE     *rghstoreCAs;\n    DWORD           cTrustStores;\n    HCERTSTORE     *rghstoreTrust;\n    HCRYPTPROV      hprov;\n    DWORD           lCustData;\n    DWORD           dwPad;\n    LPCSTR          szHelpFileName;\n    DWORD           dwHelpId;\n    DWORD           nStartPage;\n    DWORD           cArrayPropSheetPages;\n    /* FIXME: PSDK declares arrayPropSheetPages as a PROPSHEETPAGE *, which we\n     * don't allow in our own headers.  It's probably wrong, but we're not\n     * compatible.\n     */\n    PROPSHEETPAGEA *arrayPropSheetPages;\n} CERT_VIEWPROPERTIES_STRUCT_A, *PCERT_VIEWPROPERTIES_STRUCT_A;\n\ntypedef struct tagCERT_VIEWPROPERTIES_STRUCT_W\n{\n    DWORD           dwSize;\n    HWND            hwndParent;\n    HINSTANCE       hInstance;\n    DWORD           dwFlags;\n    LPCWSTR         szTitle;\n    PCCERT_CONTEXT  pCertContext;\n    LPSTR          *arrayPurposes;\n    DWORD           cArrayPurposes;\n    DWORD           cRootStores;\n    HCERTSTORE     *rghstoreRoots;\n    DWORD           cStores;\n    HCERTSTORE     *rghstoreCAs;\n    DWORD           cTrustStores;\n    HCERTSTORE     *rghstoreTrust;\n    HCRYPTPROV      hprov;\n    DWORD           lCustData;\n    DWORD           dwPad;\n    LPCWSTR         szHelpFileName;\n    DWORD           dwHelpId;\n    DWORD           nStartPage;\n    DWORD           cArrayPropSheetPages;\n    /* FIXME: PSDK declares arrayPropSheetPages as a PROPSHEETPAGE *, which we\n     * don't allow in our own headers.  It's probably wrong, but we're not\n     * compatible.\n     */\n    PROPSHEETPAGEW *arrayPropSheetPages;\n} CERT_VIEWPROPERTIES_STRUCT_W, *PCERT_VIEWPROPERTIES_STRUCT_W;\n\n#define CERT_VIEWPROPERTIES_STRUCT WINELIB_NAME_AW(CERT_VIEWPROPERTIES_STRUCT_)\n#define PCERT_VIEWPROPERTIES_STRUCT \\\n WINELIB_NAME_AW(PCERT_VIEWPROPERTIES_STRUCT_)\n\nBOOL WINAPI CertViewPropertiesA(PCERT_VIEWPROPERTIES_STRUCT_A pCertViewInfo);\nBOOL WINAPI CertViewPropertiesW(PCERT_VIEWPROPERTIES_STRUCT_W pCertViewInfo);\n#define CertViewProperties WINELIB_NAME_AW(CertViewProperties)\n\n#define CERT_FILTER_OP_EXISTS     1\n#define CERT_FILTER_OP_NOT_EXISTS 2\n#define CERT_FILTER_OP_EQUALITY   3\n\ntypedef struct tagCMOID\n{\n    LPCSTR szExtensionOID;\n    DWORD  dwTestOperation;\n    LPBYTE pbTestData;\n    DWORD  cbTestData;\n} CERT_FILTER_EXTENSION_MATCH;\n\n#define CERT_FILTER_INCLUDE_V1_CERTS  0x0001\n#define CERT_FILTER_VALID_TIME_RANGE  0x0002\n#define CERT_FILTER_VALID_SIGNATURE   0x0004\n#define CERT_FILTER_LEAF_CERTS_ONLY   0x0008\n#define CERT_FILTER_ISSUER_CERTS_ONLY 0x0010\n#define CERT_FILTER_KEY_EXISTS        0x0020\n\ntypedef struct tagCMFLTR\n{\n    DWORD                        dwSize;\n    DWORD                        cExtensionChecks;\n    CERT_FILTER_EXTENSION_MATCH *arrayExtensionChecks;\n    DWORD                        dwCheckingFlags;\n} CERT_FILTER_DATA;\n\nDWORD WINAPI GetFriendlyNameOfCertA(PCCERT_CONTEXT pccert, LPSTR pchBuffer,\n DWORD cchBuffer);\nDWORD WINAPI GetFriendlyNameOfCertW(PCCERT_CONTEXT pccert, LPWSTR pchBuffer,\n DWORD cchBuffer);\n#define GetFriendlyNameOfCert WINELIB_NAME_AW(GetFriendlyNameOfCert)\n\n#define CERT_CERTIFICATE_ACTION_VERIFY \\\n { 0x7801ebd0, 0xcf4b, 0x11d0, { 0x85,0x1f,0x00,0x60,0x97,0x93,0x87,0xea }}\n#define szCERT_CERTIFICATE_ACTION_VERIFY \\\n \"{7801ebd0-cf4b-11d0-851f-0060979387ea}\"\n\ntypedef HRESULT (WINAPI *PFNTRUSTHELPER)(PCCERT_CONTEXT, DWORD, BOOL, LPBYTE);\n\n#define CERT_VALIDITY_MASK_VALIDITY              0x0000ffff\n#define CERT_VALIDITY_BEFORE_START               0x00000001\n#define CERT_VALIDITY_AFTER_END                  0x00000002\n#define CERT_VALIDITY_SIGNATURE_FAILS            0x00000004\n#define CERT_VALIDITY_CERTIFICATE_REVOKED        0x00000008\n#define CERT_VALIDITY_KEY_USAGE_EXT_FAILURE      0x00000010\n#define CERT_VALIDITY_EXTENDED_USAGE_FAILURE     0x00000020\n#define CERT_VALIDITY_NAME_CONSTRAINTS_FAILURE   0x00000040\n#define CERT_VALIDITY_UNKNOWN_CRITICAL_EXTENSION 0x00000080\n#define CERT_VALIDITY_ISSUER_INVALID             0x00000100\n#define CERT_VALIDITY_OTHER_EXTENSION_FAILURE    0x00000200\n#define CERT_VALIDITY_PERIOD_NESTING_FAILURE     0x00000400\n#define CERT_VALIDITY_OTHER_ERROR                0x00000800\n\n#define CERT_VALIDITY_MASK_TRUST                 0xffff0000\n#define CERT_VALIDITY_EXPLICITLY_DISTRUSTED      0x01000000\n#define CERT_VALIDITY_ISSUER_DISTRUST            0x02000000\n#define CERT_VALIDITY_NO_ISSUER_CERT_FOUND       0x10000000\n#define CERT_VALIDITY_NO_CRL_FOUND               0x20000000\n#define CERT_VALIDITY_CRL_OUT_OF_DATE            0x40000000\n#define CERT_VALIDITY_NO_TRUST_DATA              0x80000000\n\n#define CERT_TRUST_MASK                0x00ffffff\n#define CERT_TRUST_DO_FULL_SEARCH      0x00000001\n#define CERT_TRUST_PERMIT_MISSING_CRLS 0x00000002\n#define CERT_TRUST_DO_FULL_TRUST       0x00000005\n#define CERT_TRUST_ADD_CERT_STORES     CM_ADD_CERT_STORES\n\ntypedef struct _CERT_VERIFY_CERTIFICATE_TRUST\n{\n    DWORD            cbSize;\n    PCCERT_CONTEXT   pccert;\n    DWORD            dwFlags;\n    DWORD            dwIgnoreErr;\n    DWORD           *pdwErrors;\n    LPSTR            pszUsageOid;\n    HCRYPTPROV       hprov;\n    DWORD            cRootStores;\n    HCERTSTORE      *rghstoreRoots;\n    DWORD            cStores;\n    HCERTSTORE      *rghstoreCAs;\n    DWORD            cTrustStores;\n    HCERTSTORE      *rghstoreTrust;\n    DWORD            lCustData;\n    PFNTRUSTHELPER   pfnTrustHelper;\n    DWORD           *pcchain;\n    PCCERT_CONTEXT **prgChain;\n    DWORD          **prgdwErrors;\n    DATA_BLOB      **prgpbTrustInfo;\n} CERT_VERIFY_CERTIFICATE_TRUST, *PCERT_VERIFY_CERTIFICATE_TRUST;\n\n#define CTL_MODIFY_REQUEST_ADD_NOT_TRUSTED 1\n#define CTL_MODIFY_REQUEST_REMOVE          2\n#define CTL_MODIFY_REQUEST_ADD_TRUSTED     3\n\ntypedef struct _CTL_MODIFY_REQUEST\n{\n    PCCERT_CONTEXT pccert;\n    DWORD          dwOperation;\n    DWORD          dwError;\n} CTL_MODIFY_REQUEST, *PCTL_MODIFY_REQUEST;\n\nHRESULT WINAPI CertModifyCertificatesToTrust(int cCertStore,\n PCTL_MODIFY_REQUEST rgCerts, LPCSTR szPurpose, HWND hwnd,\n HCERTSTORE hcertstoreTrust);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/cryptuiapi.h",
    "content": "/*\n * Copyright (C) 2008 Juan Lang\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __CRYPTUIAPI_H__\n#define __CRYPTUIAPI_H__\n\n#include <wintrust.h>\n#include <wincrypt.h>\n#include <prsht.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include <pshpack8.h>\n\nBOOL WINAPI CryptUIDlgViewContext(DWORD dwContextType, LPVOID pvContext,\n HWND hwnd, LPCWSTR pwszTitle, DWORD dwFlags, LPVOID pvReserved);\n\n/* Values for dwDontUseColumn */\n#define CRYPTUI_SELECT_ISSUEDTO_COLUMN     0x00000001\n#define CRYPTUI_SELECT_ISSUEDBY_COLUMN     0x00000002\n#define CRYPTUI_SELECT_INTENDEDUSE_COLUMN  0x00000004\n#define CRYPTUI_SELECT_FRIENDLYNAME_COLUMN 0x00000008\n#define CRYPTUI_SELECT_LOCATION_COLUMN     0x00000010\n#define CRYPTUI_SELECT_EXPIRATION_COLUMN   0x00000020\n\nPCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateFromStore(\n HCERTSTORE hCertStore, HWND hwnd, LPCWSTR pwszTitle, LPCWSTR pwszDisplayString,\n DWORD dwDontUseColumn, DWORD dwFlags, LPVOID pvReserved);\n\n/* Values for CRYPTUI_CERT_MGR_STRUCT's dwFlags */\n#define CRYPTUI_CERT_MGR_PUBLISHER_TAB   0x00000004\n#define CRYPTUI_CERT_MGR_TAB_MASK        0x0000000f\n#define CRYPTUI_CERT_MGR_SINGLE_TAB_FLAG 0x00008000\n\ntypedef struct _CRYPTUI_CERT_MGR_STRUCT\n{\n    DWORD   dwSize;\n    HWND    hwndParent;\n    DWORD   dwFlags;\n    LPCWSTR pwszTitle;\n    LPCSTR  pszInitUsageOID;\n} CRYPTUI_CERT_MGR_STRUCT, *PCRYPTUI_CERT_MGR_STRUCT;\ntypedef const struct _CRYPTUI_CERT_MGR_STRUCT *PCCRYPTUI_CERT_MGR_STRUCT;\n\nBOOL WINAPI CryptUIDlgCertMgr(PCCRYPTUI_CERT_MGR_STRUCT pCryptUICertMgr);\n\ntypedef BOOL (WINAPI *PFNCFILTERPROC)(PCCERT_CONTEXT pCertContext,\n BOOL *pfInitialSelectedCert, void *pvCallbackData);\n\ntypedef struct tagCRYPTUI_INITDIALOG_STRUCT\n{\n    LPARAM         lParam;\n    PCCERT_CONTEXT pCertContext;\n} CRYPTUI_INITDIALOG_STRUCT, *PCRYPTUI_INITDIALOG_STRUCT;\n\n/* Values for CRYPTUI_VIEWCERTIFICATE_STRUCT's dwFlags */\n#define CRYPTUI_HIDE_HIERARCHYPAGE               0x00000001\n#define CRYPTUI_HIDE_DETAILPAGE                  0x00000002\n#define CRYPTUI_DISABLE_EDITPROPERTIES           0x00000004\n#define CRYPTUI_ENABLE_EDITPROPERTIES            0x00000008\n#define CRYPTUI_DISABLE_ADDTOSTORE               0x00000010\n#define CRYPTUI_ENABLE_ADDTOSTORE                0x00000020\n#define CRYPTUI_ACCEPT_DECLINE_STYLE             0x00000040\n#define CRYPTUI_IGNORE_UNTRUSTED_ROOT            0x00000080\n#define CRYPTUI_DONT_OPEN_STORES                 0x00000100\n#define CRYPTUI_ONLY_OPEN_ROOT_STORE             0x00000200\n#define CRYPTUI_WARN_UNTRUSTED_ROOT              0x00000400\n#define CRYPTUI_ENABLE_REVOCATION_CHECKING       0x00000800\n#define CRYPTUI_WARN_REMOTE_TRUST                0x00001000\n#define CRYPTUI_DISABLE_EXPORT                   0x00002000\n#define CRYPTUI_ENABLE_REVOCATION_CHECK_END_CERT 0x00004000\n#define CRYPTUI_ENABLE_REVOCATION_CHECK_CHAIN    0x00008000\n#define CRYPTUI_ENABLE_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT CRYPTUI_ENABLE_REVOCATION_CHECKING\n#define CRYPTUI_DISABLE_HTMLLINK                 0x00010000\n#define CRYPTUI_DISABLE_ISSUERSTATEMENT          0x00020000\n\ntypedef struct tagCRYPTUI_VIEWCERTIFICATE_STRUCTA\n{\n    DWORD             dwSize;\n    HWND              hwndParent;\n    DWORD             dwFlags;\n    LPCSTR            szTitle;\n    PCCERT_CONTEXT    pCertContext;\n    LPCSTR           *rgszPurposes;\n    DWORD             cPurposes;\n    union {\n        CRYPT_PROVIDER_DATA const *pCryptProviderData;\n        HANDLE                     hWVTStateData;\n    } DUMMYUNIONNAME;\n    BOOL              fpCryptProviderDataTrustedUsage;\n    DWORD             idxSigner;\n    DWORD             idxCert;\n    BOOL              fCounterSigner;\n    DWORD             idxCounterSigner;\n    DWORD             cStores;\n    HCERTSTORE       *rghStores;\n    DWORD             cPropSheetPages;\n    LPCPROPSHEETPAGEA rgPropSheetPages;\n    DWORD             nStartPage;\n} CRYPTUI_VIEWCERTIFICATE_STRUCTA, *PCRYPTUI_VIEWCERTIFICATE_STRUCTA;\ntypedef const CRYPTUI_VIEWCERTIFICATE_STRUCTA *PCCRYPTUI_VIEWCERTIFICATE_STRUCTA;\n\ntypedef struct tagCRYPTUI_VIEWCERTIFICATE_STRUCTW\n{\n    DWORD             dwSize;\n    HWND              hwndParent;\n    DWORD             dwFlags;\n    LPCWSTR           szTitle;\n    PCCERT_CONTEXT    pCertContext;\n    LPCSTR           *rgszPurposes;\n    DWORD             cPurposes;\n    union {\n        CRYPT_PROVIDER_DATA const *pCryptProviderData;\n        HANDLE                     hWVTStateData;\n    } DUMMYUNIONNAME;\n    BOOL              fpCryptProviderDataTrustedUsage;\n    DWORD             idxSigner;\n    DWORD             idxCert;\n    BOOL              fCounterSigner;\n    DWORD             idxCounterSigner;\n    DWORD             cStores;\n    HCERTSTORE       *rghStores;\n    DWORD             cPropSheetPages;\n    LPCPROPSHEETPAGEW rgPropSheetPages;\n    DWORD             nStartPage;\n} CRYPTUI_VIEWCERTIFICATE_STRUCTW, *PCRYPTUI_VIEWCERTIFICATE_STRUCTW;\ntypedef const CRYPTUI_VIEWCERTIFICATE_STRUCTW *PCCRYPTUI_VIEWCERTIFICATE_STRUCTW;\n\n#define CRYPTUI_VIEWCERTIFICATE_STRUCT   WINELIB_NAME_AW(CRYPTUI_VIEWCERTIFICATE_STRUCT)\n#define PCCRYPTUI_VIEWCERTIFICATE_STRUCT WINELIB_NAME_AW(PCCRYPTUI_VIEWCERTIFICATE_STRUCT)\n\nBOOL WINAPI CryptUIDlgViewCertificateA(\n PCCRYPTUI_VIEWCERTIFICATE_STRUCTA pCertViewInfo, BOOL *pfPropertiesChanged);\nBOOL WINAPI CryptUIDlgViewCertificateW(\n PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo, BOOL *pfPropertiesChanged);\n#define CryptUIDlgViewCertificate WINELIB_NAME_AW(CryptUIDlgViewCertificate)\n\ntypedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO\n{\n    DWORD   dwSize;\n    GUID   *pGuidSubject;\n    DWORD   cbBlob;\n    BYTE   *pbBlob;\n    LPCWSTR pwszDisplayName;\n} CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO, *PCRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO;\ntypedef const CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO *\n PCCRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO;\n\ntypedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO\n{\n    DWORD          dwSize;\n    DWORD          cCertStore;\n    HCERTSTORE    *rghCertStore;\n    PFNCFILTERPROC pFilterCallback;\n    void          *pvCallbackData;\n} CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO, *PCRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO;\ntypedef const CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO *\n PCCRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO;\n\ntypedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO\n{\n    DWORD  dwSize;\n    LPWSTR pwszPvkFileName;\n    LPWSTR pwszProvName;\n    DWORD  dwProvType;\n} CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO,\n *PCRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO;\ntypedef const CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO *\n PCCRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO;\n\ntypedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO\n{\n    DWORD  dwSize;\n    LPWSTR pwszSigningCertFileName;\n    DWORD  dwPvkChoice;\n    union {\n        PCCRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO pPvkFileInfo;\n        PCRYPT_KEY_PROV_INFO                    pPvkProvInfo;\n    } DUMMYUNIONNAME;\n} CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO,\n *PCRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO;\ntypedef const CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO *\n PCCRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO;\n\ntypedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO\n{\n    DWORD             dwSize;\n    DWORD             dwAttrFlags;\n    LPCWSTR           pwszDescription;\n    LPCWSTR           pwszMoreInfoLocation;\n    LPCSTR            pszHashAlg;\n    LPCWSTR           pwszSigningCertDisplayString;\n    HCERTSTORE        hAdditionalCertStore;\n    PCRYPT_ATTRIBUTES psAuthenticated;\n    PCRYPT_ATTRIBUTES psUnauthenticated;\n} CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO,\n *PCRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO;\ntypedef const CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO *\n PCCRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO;\n\ntypedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_INFO\n{\n    DWORD   dwSize;\n    DWORD   dwSubjectChoice;\n    union {\n        LPCWSTR                              pwszFileName;\n        PCCRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO pSignBlobInfo;\n    } DUMMYUNIONNAME1;\n    DWORD   dwSigningCertChoice;\n    union {\n        PCCERT_CONTEXT                           pSigningCertContext;\n        PCCRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO    pSigningCertStore;\n        PCCRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO pSigningCertPvkInfo;\n    } DUMMYUNIONNAME2;\n    LPCWSTR pwszTimestampURL;\n    DWORD   dwAdditionalCertChoice;\n    PCCRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO pSignExtInfo;\n} CRYPTUI_WIZ_DIGITAL_SIGN_INFO, *PCRYPTUI_WIZ_DIGITAL_SIGN_INFO;\ntypedef const CRYPTUI_WIZ_DIGITAL_SIGN_INFO *PCCRYPTUI_WIZ_DIGITAL_SIGN_INFO;\n\ntypedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT\n{\n    DWORD dwSize;\n    DWORD cbBlob;\n    BYTE *pbBlob;\n} CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT, *PCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT;\ntypedef const CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT *PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT;\n\n/* Values for CryptUIWizDigitalSign's dwFlags */\n#define CRYPTUI_WIZ_NO_UI                            0x00000001\n#define CRYPTUI_WIZ_DIGITAL_SIGN_EXCLUDE_PAGE_HASHES 0x00000002\n#define CRYPTUI_WIZ_DIGITAL_SIGN_INCLUDE_PAGE_HASHES 0x00000004\n\nBOOL WINAPI CryptUIWizDigitalSign(DWORD dwFlags, HWND hwndParent,\n LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_DIGITAL_SIGN_INFO pDigitalSignInfo,\n PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT *ppSignContext);\n\nBOOL WINAPI CryptUIWizFreeDigitalSignContext(\n PCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT pSignContext);\n\n/* Values for CRYPTUI_WIZ_EXPORT_INFO's dwSubjectChoice */\n#define CRYPTUI_WIZ_EXPORT_CERT_CONTEXT                 1\n#define CRYPTUI_WIZ_EXPORT_CTL_CONTEXT                  2\n#define CRYPTUI_WIZ_EXPORT_CRL_CONTEXT                  3\n#define CRYPTUI_WIZ_EXPORT_CERT_STORE                   4\n#define CRYPTUI_WIZ_EXPORT_CERT_STORE_CERTIFICATES_ONLY 5\n#define CRYPTUI_WIZ_EXPORT_FORMAT_CRL                   6\n#define CRYPTUI_WIZ_EXPORT_FORMAT_CTL                   7\n\ntypedef struct _CRYPTUI_WIZ_EXPORT_INFO\n{\n    DWORD       dwSize;\n    LPCWSTR     pwszExportFileName;\n    DWORD       dwSubjectChoice;\n    union {\n        PCCERT_CONTEXT pCertContext;\n        PCCTL_CONTEXT  pCTLContext;\n        PCCRL_CONTEXT  pCRLContext;\n        HCERTSTORE     hCertStore;\n    } DUMMYUNIONNAME;\n    DWORD       cStores;\n    HCERTSTORE *rghStores;\n} CRYPTUI_WIZ_EXPORT_INFO, *PCRYPTUI_WIZ_EXPORT_INFO;\ntypedef const CRYPTUI_WIZ_EXPORT_INFO *PCCRYPTUI_WIZ_EXPORT_INFO;\n\n/* Values for CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO's dwExportFormat */\n#define CRYPTUI_WIZ_EXPORT_FORMAT_DER                   1\n#define CRYPTUI_WIZ_EXPORT_FORMAT_PFX                   2\n#define CRYPTUI_WIZ_EXPORT_FORMAT_PKCS7                 3\n#define CRYPTUI_WIZ_EXPORT_FORMAT_BASE64                4\n#define CRYPTUI_WIZ_EXPORT_FORMAT_SERIALIZED_CERT_STORE 5\n\ntypedef struct _CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO\n{\n    DWORD   dwSize;\n    DWORD   dwExportFormat;\n    BOOL    fExportChain;\n    BOOL    fExportPrivateKeys;\n    LPCWSTR pwszPassword;\n    BOOL    fStrongEncryption;\n} CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO, *PCRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO;\ntypedef const CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO *\n PCCRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO;\n\nBOOL WINAPI CryptUIWizExport(DWORD dwFlags, HWND hwndParent,\n LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo, void *pvoid);\n\n/* Values for CRYPTUI_WIZ_IMPORT_SRC_INFO's dwSubjectChoice */\n#define CRYPTUI_WIZ_IMPORT_SUBJECT_FILE         1\n#define CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_CONTEXT 2\n#define CRYPTUI_WIZ_IMPORT_SUBJECT_CTL_CONTEXT  3\n#define CRYPTUI_WIZ_IMPORT_SUBJECT_CRL_CONTEXT  4\n#define CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_STORE   5\n\ntypedef struct _CRYPTUI_WIZ_IMPORT_SUBJECT_INFO\n{\n    DWORD   dwSize;\n    DWORD   dwSubjectChoice;\n    union {\n        LPCWSTR        pwszFileName;\n        PCCERT_CONTEXT pCertContext;\n        PCCTL_CONTEXT  pCTLContext;\n        PCCRL_CONTEXT  pCRLContext;\n        HCERTSTORE     hCertStore;\n    } DUMMYUNIONNAME;\n    DWORD   dwFlags;\n    LPCWSTR pwszPassword;\n} CRYPTUI_WIZ_IMPORT_SRC_INFO, *PCRYPTUI_WIZ_IMPORT_SRC_INFO;\ntypedef const CRYPTUI_WIZ_IMPORT_SRC_INFO *PCCRYPTUI_WIZ_IMPORT_SRC_INFO;\n\n/* Values for CryptUIWizImport's dwFlags */\n#define CRYPTUI_WIZ_IMPORT_NO_CHANGE_DEST_STORE 0x00010000\n#define CRYPTUI_WIZ_IMPORT_ALLOW_CERT           0x00020000\n#define CRYPTUI_WIZ_IMPORT_ALLOW_CRL            0x00040000\n#define CRYPTUI_WIZ_IMPORT_ALLOW_CTL            0x00080000\n#define CRYPTUI_WIZ_IMPORT_TO_LOCALMACHINE      0x00100000\n#define CRYPTUI_WIZ_IMPORT_TO_CURRENTUSER       0x00200000\n#define CRYPTUI_WIZ_IMPORT_REMOTE_DEST_STORE    0x00400000\n\nBOOL WINAPI CryptUIWizImport(DWORD dwFlags, HWND hwndParent,\n LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc,\n HCERTSTORE hDestCertStore);\n\n/* Definitions missing from PSDK's cryptuiapi.h, but documented on MSDN. */\ntypedef BOOL (WINAPI *PFNCCERTDISPLAYPROC)(PCCERT_CONTEXT pCertContext,\n HWND hWndSelCertDlg, void *pvCallbackData);\n\n/* Values for CRYPTUI_SELECTCERTIFICATE_STRUCT's dwFlags */\n#define CRYPTUI_SELECTCERT_MULTISELECT 0x00000001\n\ntypedef struct _CRYPTUI_SELECTCERTIFICATE_STRUCTA\n{\n    DWORD               dwSize;\n    HWND                hwndParent;\n    DWORD               dwFlags;\n    LPCSTR              szTitle;\n    DWORD               dwDontUseColumn;\n    LPCSTR              szDisplayString;\n    PFNCFILTERPROC      pFilterCallback;\n    PFNCCERTDISPLAYPROC pDisplayCallback;\n    void               *pvCallbackData;\n    DWORD               cDisplayStores;\n    HCERTSTORE         *rghDisplayStores;\n    DWORD               cStores;\n    HCERTSTORE         *rghStores;\n    DWORD               cPropSheetPages;\n    LPCPROPSHEETPAGEA   rgPropSheetPages;\n    HCERTSTORE          hSelectedCertStore;\n} CRYPTUI_SELECTCERTIFICATE_STRUCTA, *PCRYPTUI_SELECTCERTIFICATE_STRUCTA;\ntypedef const CRYPTUI_SELECTCERTIFICATE_STRUCTA *\n PCCRYPTUI_SELECTCERTIFICATE_STRUCTA;\n\ntypedef struct _CRYPTUI_SELECTCERTIFICATE_STRUCTW\n{\n    DWORD               dwSize;\n    HWND                hwndParent;\n    DWORD               dwFlags;\n    LPCWSTR             szTitle;\n    DWORD               dwDontUseColumn;\n    LPCWSTR             szDisplayString;\n    PFNCFILTERPROC      pFilterCallback;\n    PFNCCERTDISPLAYPROC pDisplayCallback;\n    void               *pvCallbackData;\n    DWORD               cDisplayStores;\n    HCERTSTORE         *rghDisplayStores;\n    DWORD               cStores;\n    HCERTSTORE         *rghStores;\n    DWORD               cPropSheetPages;\n    LPCPROPSHEETPAGEW   rgPropSheetPages;\n    HCERTSTORE          hSelectedCertStore;\n} CRYPTUI_SELECTCERTIFICATE_STRUCTW, *PCRYPTUI_SELECTCERTIFICATE_STRUCTW;\ntypedef const CRYPTUI_SELECTCERTIFICATE_STRUCTW *\n PCCRYPTUI_SELECTCERTIFICATE_STRUCTW;\n\nPCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateA(\n PCCRYPTUI_SELECTCERTIFICATE_STRUCTA pcsc);\nPCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateW(\n PCCRYPTUI_SELECTCERTIFICATE_STRUCTW pcsc);\n\ntypedef struct tagCRYPTUI_VIEWSIGNERINFO_STRUCTA\n{\n    DWORD             dwSize;\n    HWND              hwndParent;\n    DWORD             dwFlags;\n    LPCSTR            szTitle;\n    CMSG_SIGNER_INFO *pSignerInfo;\n    HCRYPTMSG         hMsg;\n    LPCSTR            pszOID;\n    DWORD_PTR         dwReserved;\n    DWORD             cStores;\n    HCERTSTORE       *rghStores;\n    DWORD             cPropSheetPages;\n    LPCPROPSHEETPAGEA rgPropSheetPages;\n} CRYPTUI_VIEWSIGNERINFO_STRUCTA, *PCRYPTUI_VIEWSIGNERINFO_STRUCTA;\n\ntypedef struct tagCRYPTUI_VIEWSIGNERINFO_STRUCTW\n{\n    DWORD             dwSize;\n    HWND              hwndParent;\n    DWORD             dwFlags;\n    LPCWSTR           szTitle;\n    CMSG_SIGNER_INFO *pSignerInfo;\n    HCRYPTMSG         hMsg;\n    LPCSTR            pszOID;\n    DWORD_PTR         dwReserved;\n    DWORD             cStores;\n    HCERTSTORE       *rghStores;\n    DWORD             cPropSheetPages;\n    LPCPROPSHEETPAGEW rgPropSheetPages;\n} CRYPTUI_VIEWSIGNERINFO_STRUCTW, *PCRYPTUI_VIEWSIGNERINFO_STRUCTW;\n\nBOOL WINAPI CryptUIDlgViewSignerInfoA(CRYPTUI_VIEWSIGNERINFO_STRUCTA *pcvsi);\nBOOL WINAPI CryptUIDlgViewSignerInfoW(CRYPTUI_VIEWSIGNERINFO_STRUCTW *pcvsi);\n\n#include <poppack.h>\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/ctfutb.idl",
    "content": "/*\n * Copyright 2010 Justin Chevrier\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"oaidl.idl\";\n#endif\n\ninterface ITfLangBarEventSink;\ninterface ITfLangBarItemMgr;\ninterface ITfInputProcessorProfiles;\n\nconst ULONG TF_LBI_DESC_MAXLEN = 32;\n\ntypedef [uuid(12a1d29f-a065-440c-9746-eb2002c8bd19)] struct TF_LANGBARITEMINFO\n{\n    CLSID    clsidService;\n    GUID     guidItem;\n    DWORD    dwStyle;\n    ULONG    ulSort;\n    WCHAR    szDescription[TF_LBI_DESC_MAXLEN];\n} TF_LANGBARITEMINFO;\n\n[\n  object,\n  uuid(73540d69-edeb-4ee9-96c9-23aa30b25916),\n  pointer_default(unique),\n]\ninterface ITfLangBarItem : IUnknown\n{\n    HRESULT GetInfo(\n        [out] TF_LANGBARITEMINFO *pInfo);\n\n    HRESULT GetStatus(\n        [out] DWORD *pdwStatus);\n\n    HRESULT Show(\n        [in] BOOL fShow);\n\n    HRESULT GetTooltipString(\n        [out] BSTR *pbstrToolTip);\n}\n\n[\n  object,\n  uuid(583f34d0-de25-11d2-afdd-00105a2799b5),\n  pointer_default(unique),\n]\ninterface IEnumTfLangBarItems : IUnknown\n{\n    HRESULT Clone(\n        [out] IEnumTfLangBarItems **ppEnum);\n\n    HRESULT Next(\n        [in] ULONG ulCount,\n        [out, size_is(ulCount)] ITfLangBarItem **ppItem,\n        [in, out, unique] ULONG *pcFetched);\n\n    HRESULT Reset();\n\n    HRESULT Skip(\n        [in] ULONG ulCount);\n}\n\n[\n  object,\n  uuid(57dbe1a0-de25-11d2-afdd-00105a2799b5),\n  pointer_default(unique),\n]\ninterface ITfLangBarItemSink : IUnknown\n{\n    HRESULT OnUpdate(\n        [in] DWORD dwFlags);\n}\n\n[\n  object,\n  uuid(ba468c55-9956-4fb1-a59d-52a7dd7cc6aa),\n  pointer_default(unique),\n]\ninterface ITfLangBarItemMgr : IUnknown\n{\n    HRESULT EnumItems(\n        [out] IEnumTfLangBarItems **ppEnum);\n\n    HRESULT GetItem(\n        [in] REFGUID rguid,\n        [out] ITfLangBarItem **ppItem);\n\n    HRESULT AddItem(\n        [in] ITfLangBarItem *punk);\n\n    HRESULT RemoveItem(\n        [in] ITfLangBarItem *punk);\n\n    HRESULT AdviseItemSink(\n        [in] ITfLangBarItemSink *punk,\n        [out] DWORD *pdwCookie,\n        [in] REFGUID rguidItem);\n\n    HRESULT UnadviseItemSink(\n        [in] DWORD dwCookie);\n\n    HRESULT GetItemFloatingRect(\n        [in] DWORD dwThreadId,\n        [in] REFGUID rguid,\n        [out] RECT *prc);\n\n    HRESULT GetItemsStatus(\n        [in] ULONG ulCount,\n        [in, size_is(ulCount)] const GUID *prgguid,\n        [out, size_is(ulCount)] DWORD *pdwStatus);\n\n    HRESULT GetItemNum(\n        [out] ULONG *pulCount);\n\n    HRESULT GetItems(\n        [in] ULONG ulCount,\n        [out, size_is(ulCount), length_is(*pcFetched)] ITfLangBarItem **ppItem,\n        [out, size_is(ulCount), length_is(*pcFetched)] TF_LANGBARITEMINFO *pInfo,\n        [out, size_is(ulCount), length_is(*pcFetched)] DWORD *pdwStatus,\n        [in, out, unique] ULONG *pcFetched);\n\n    HRESULT AdviseItemsSink(\n        [in] ULONG ulCount,\n        [in, size_is(ulCount)] ITfLangBarItemSink **ppunk,\n        [in, size_is(ulCount)] const GUID *pguidItem,\n        [out, size_is(ulCount)] DWORD *pdwCookie);\n\n    HRESULT UnadviseItemsSink(\n        [in] ULONG ulCount,\n        [in, size_is(ulCount)] DWORD *pdwCookie);\n}\n\n[\n    object,\n    uuid(87955690-e627-11d2-8ddb-00105a2799b5),\n    pointer_default(unique)\n]\ninterface ITfLangBarMgr: IUnknown\n{\n    HRESULT AdviseEventSink(\n        [in] ITfLangBarEventSink *pSink,\n        [in] HWND hwnd,\n        [in] DWORD dwflags,\n        [in] DWORD *pdwCookie);\n\n    HRESULT UnAdviseEventSink(\n        [in] DWORD dwCookie);\n\n    HRESULT GetThreadMarshalInterface(\n        [in] DWORD dwThreadId,\n        [in] DWORD dwType,\n        [in] REFIID riid,\n        [out] IUnknown **ppunk);\n\n    HRESULT GetThreadLangBarItemMgr(\n        [in] DWORD dwThreadId,\n        [out] ITfLangBarItemMgr **pplbie,\n        [out] DWORD *pdwThreadid);\n\n    HRESULT GetInputProcessorProfiles(\n        [in] DWORD dwThreadId,\n        [out] ITfInputProcessorProfiles **ppaip,\n        [out] DWORD *pdwThreadid);\n\n    HRESULT RestoreLastFocus(\n        [out] DWORD *dwThreadId,\n        [in] BOOL fPrev);\n\n    HRESULT SetModalInput(\n        [in] ITfLangBarEventSink *pSink,\n        [in] DWORD dwThreadId,\n        [in] DWORD dwFlags);\n\n    HRESULT ShowFloating(\n        [in] DWORD dwFlags);\n\n    HRESULT GetShowFloatingStatus(\n        [out] DWORD *pdwFlags);\n}\n\n[\n  object,\n  uuid(18a4e900-e0ae-11d2-afdd-00105a2799b5),\n  pointer_default(unique)\n]\ninterface ITfLangBarEventSink: IUnknown\n{\n    HRESULT OnSetFocus(\n        [in] DWORD dwThreadId);\n\n    HRESULT OnThreadTerminate(\n        [in] DWORD dwThreadId);\n\n    HRESULT OnThreadItemChange(\n        [in] DWORD dwThreadId);\n\n    HRESULT OnModalInput(\n        [in] DWORD dwThreadId,\n        [in] UINT uMsg,\n        [in] WPARAM wParam,\n        [in] LPARAM lParam);\n\n    HRESULT ShowFloating(\n        [in] DWORD dwFlags);\n\n    HRESULT GetItemFloatingRect(\n        [in] DWORD dwThreadId,\n        [in] REFGUID rguid,\n        [out] RECT *prc);\n}\n"
  },
  {
    "path": "wine/windows/ctxtcall.idl",
    "content": "/*\n * Copyright (C) 2008 Louis Lenders\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"wtypes.idl\";\nimport \"objidl.idl\";\nimport \"unknwn.idl\";\n\ntypedef struct tagComCallData\n{\n    DWORD dwDispid;\n    DWORD dwReserved;\n    void  *pUserDefined;\n} ComCallData;\n\n/***************************************************************************\n * IContextCallback\n */\n[\n  local,\n  object,\n  uuid(000001da-0000-0000-c000-000000000046),\n  pointer_default(unique)\n]\ninterface IContextCallback : IUnknown\n{\n    typedef HRESULT (__stdcall *PFNCONTEXTCALL)(ComCallData *pParam);\n\n    HRESULT ContextCallback(\n            [in] PFNCONTEXTCALL pCallback,\n            [in] ComCallData *pParam,\n            [in] REFIID riid,\n            [in] int iMethod,\n            [in] IUnknown *pUnk);\n}\n"
  },
  {
    "path": "wine/windows/custcntl.h",
    "content": "/*\n * Copyright (C) 2002 Gyorgy 'Nog' Jeney  \n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _INC_CUSTCNTL\n#define _INC_CUSTCNTL\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Size defs */\n#define CCHCCCLASS 32\n#define CCHCCDESC 32\n#define CCHCCTEXT 256\n\n/* Custom Control Style Structure */\ntypedef struct tagCCSYLEA {\n  DWORD flStyle;\n  DWORD flExtStyle;\n  char szText[CCHCCTEXT];\n  LANGID lgid;\n  WORD wReserved1;\n} CCSTYLEA, *LPCCSTYLEA;\n\ntypedef struct tagCCSYLEW {\n  DWORD flStyle;\n  DWORD flExtStyle;\n  WCHAR szText[CCHCCTEXT];\n  LANGID lgid;\n  WORD wReserved1;\n} CCSTYLEW, *LPCCSTYLEW;\n\n#define CCSTYLE   WINELIB_NAME_AW(CCSTYLE)\n#define LPCCSTYLE WINELIB_NAME_AW(LPCCSTYLE)\n\ntypedef BOOL (CALLBACK *LPFNCCSTYLEA)(HWND, LPCCSTYLEA);\ntypedef BOOL (CALLBACK *LPFNCCSTYLEW)(HWND, LPCCSTYLEW);\n\n#define LPFNCCSTYLE WINELIB_NAME_AW(LPFNCCSTYLE)\n\ntypedef int (CALLBACK *LPFNCCSIZETOTEXTA)(DWORD, DWORD, HFONT, LPSTR);\ntypedef int (CALLBACK *LPFNCCSIZETOTEXTW)(DWORD, DWORD, HFONT, LPWSTR);\n\n#define LPFNCCSIZETOTEXT WINELIB_NAME_AW(LPFNCCSIZETOTEXT)\n\n/* Custom Control style flags structure */\ntypedef struct tagCCSTYLEFLAGA {\n  DWORD flStyle;\n  DWORD flStyleMask;\n  LPSTR pszStyle;\n} CCSTYLEFLAGA, *LPCCSTYLEFLAGA;\n\ntypedef struct tagCCSTYLEFLAGW {\n  DWORD flStyle;\n  DWORD flStyleMask;\n  LPWSTR pszStyle;\n} CCSTYLEFLAGW, *LPCCSTYLEFLAGW;\n\n#define CCSTYLEFLAG WINELIB_NAME_AW(CCSTYLEFLAG)\n\n/* Custom Control Flags */\n#define CCF_NOTEXT 0x00000001\n\n/* CustomControl info structure */\ntypedef struct tagCCINFOA {\n  char szClass[CCHCCCLASS];\n  DWORD flOptions;\n  char szDesc[CCHCCDESC];\n  UINT cxDefault;\n  UINT cyDefault;\n  DWORD flStyleDefault;\n  DWORD flExtStyleDefault;\n  DWORD flCtrlTypeMask;\n  char szTextDefault[CCHCCTEXT];\n  int cStyleFlags;\n  LPCCSTYLEFLAGA aStyleFlags;\n  LPFNCCSTYLEA lpfnStyle;\n  LPFNCCSIZETOTEXTA lpfnSizeToText;\n  DWORD dwReserved1;\n  DWORD dwReserved2;\n} CCINFOA, *LPCCINFOA;\n\ntypedef struct tagCCINFOW {\n  WCHAR szClass[CCHCCCLASS];\n  DWORD flOptions;\n  WCHAR szDesc[CCHCCDESC];\n  UINT cxDefault;\n  UINT cyDefault;\n  DWORD flStyleDefault;\n  DWORD flExtStyleDefault;\n  DWORD flCtrlTypeMask;\n  int cStyleFlags;\n  LPCCSTYLEFLAGW aStyleFlags;\n  WCHAR szTextDefault[CCHCCTEXT];\n  LPFNCCSTYLEW lpfnStyle;\n  LPFNCCSIZETOTEXTW lpfnSizeToText;\n  DWORD dwReserved1;\n  DWORD dwReserved2;\n} CCINFOW, *LPCCINFOW;\n\nDECL_WINELIB_TYPE_AW(CCINFO)\nDECL_WINELIB_TYPE_AW(LPCCINFO)\n\ntypedef UINT (CALLBACK *LPFNCCINFOA)(LPCCINFOA);\ntypedef UINT (CALLBACK *LPFNCCINFOW)(LPCCINFOW);\n\nDECL_WINELIB_TYPE_AW(LPFNCCINFO)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _INC_CUSTCNTL */\n"
  },
  {
    "path": "wine/windows/cvconst.h",
    "content": "/*\n * File cvconst.h - MS debug information\n *\n * Copyright (C) 2004, Eric Pouech\n * Copyright (C) 2012, André Hentschel\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n/* information in this file is highly derived from MSDN DIA information pages */\n\n/* symbols & types enumeration */\nenum SymTagEnum\n{\n   SymTagNull,\n   SymTagExe,\n   SymTagCompiland,\n   SymTagCompilandDetails,\n   SymTagCompilandEnv,\n   SymTagFunction,\n   SymTagBlock,\n   SymTagData,\n   SymTagAnnotation,\n   SymTagLabel,\n   SymTagPublicSymbol,\n   SymTagUDT,\n   SymTagEnum,\n   SymTagFunctionType,\n   SymTagPointerType,\n   SymTagArrayType,\n   SymTagBaseType,\n   SymTagTypedef, \n   SymTagBaseClass,\n   SymTagFriend,\n   SymTagFunctionArgType, \n   SymTagFuncDebugStart, \n   SymTagFuncDebugEnd,\n   SymTagUsingNamespace, \n   SymTagVTableShape,\n   SymTagVTable,\n   SymTagCustom,\n   SymTagThunk,\n   SymTagCustomType,\n   SymTagManagedType,\n   SymTagDimension,\n   SymTagMax\n};\n\nenum BasicType\n{\n    btNoType = 0,\n    btVoid = 1,\n    btChar = 2,\n    btWChar = 3,\n    btInt = 6,\n    btUInt = 7,\n    btFloat = 8,\n    btBCD = 9,\n    btBool = 10,\n    btLong = 13,\n    btULong = 14,\n    btCurrency = 25,\n    btDate = 26,\n    btVariant = 27,\n    btComplex = 28,\n    btBit = 29,\n    btBSTR = 30,\n    btHresult = 31,\n    btChar16 = 32,\n    btChar32 = 33\n};\n\n/* kind of UDT */\nenum UdtKind\n{\n    UdtStruct,\n    UdtClass,\n    UdtUnion\n};\n\n/* where a SymTagData is */\nenum LocationType\n{\n    LocIsNull,\n    LocIsStatic,\n    LocIsTLS,\n    LocIsRegRel,\n    LocIsThisRel,\n    LocIsEnregistered,\n    LocIsBitField,\n    LocIsSlot,\n    LocIsIlRel,\n    LocInMetaData,\n    LocIsConstant\n};\n\n/* kind of SymTagData */\nenum DataKind\n{\n    DataIsUnknown,\n    DataIsLocal,\n    DataIsStaticLocal,\n    DataIsParam,\n    DataIsObjectPtr,\n    DataIsFileStatic,\n    DataIsGlobal,\n    DataIsMember,\n    DataIsStaticMember,\n    DataIsConstant\n};\n\n/* values for registers (on different CPUs) */\nenum CV_HREG_e\n{\n    /* those values are common to all supported CPUs (and CPU independent) */\n    CV_ALLREG_ERR       = 30000,\n    CV_ALLREG_TEB       = 30001,\n    CV_ALLREG_TIMER     = 30002,\n    CV_ALLREG_EFAD1     = 30003,\n    CV_ALLREG_EFAD2     = 30004,\n    CV_ALLREG_EFAD3     = 30005,\n    CV_ALLREG_VFRAME    = 30006,\n    CV_ALLREG_HANDLE    = 30007,\n    CV_ALLREG_PARAMS    = 30008,\n    CV_ALLREG_LOCALS    = 30009,\n    CV_ALLREG_TID       = 30010,\n    CV_ALLREG_ENV       = 30011,\n    CV_ALLREG_CMDLN     = 30012,\n\n    /* Intel x86 CPU */\n    CV_REG_NONE         = 0,\n    CV_REG_AL           = 1,\n    CV_REG_CL           = 2,\n    CV_REG_DL           = 3,\n    CV_REG_BL           = 4,\n    CV_REG_AH           = 5,\n    CV_REG_CH           = 6,\n    CV_REG_DH           = 7,\n    CV_REG_BH           = 8,\n    CV_REG_AX           = 9,\n    CV_REG_CX           = 10,\n    CV_REG_DX           = 11,\n    CV_REG_BX           = 12,\n    CV_REG_SP           = 13,\n    CV_REG_BP           = 14,\n    CV_REG_SI           = 15,\n    CV_REG_DI           = 16,\n    CV_REG_EAX          = 17,\n    CV_REG_ECX          = 18,\n    CV_REG_EDX          = 19,\n    CV_REG_EBX          = 20,\n    CV_REG_ESP          = 21,\n    CV_REG_EBP          = 22,\n    CV_REG_ESI          = 23,\n    CV_REG_EDI          = 24,\n    CV_REG_ES           = 25,\n    CV_REG_CS           = 26,\n    CV_REG_SS           = 27,\n    CV_REG_DS           = 28,\n    CV_REG_FS           = 29,\n    CV_REG_GS           = 30,\n    CV_REG_IP           = 31,\n    CV_REG_FLAGS        = 32,\n    CV_REG_EIP          = 33,\n    CV_REG_EFLAGS       = 34,\n\n    /* <pcode> */\n    CV_REG_TEMP         = 40,\n    CV_REG_TEMPH        = 41,\n    CV_REG_QUOTE        = 42,\n    CV_REG_PCDR3        = 43,   /* this includes PCDR4 to PCDR7 */\n    CV_REG_CR0          = 80,   /* this includes CR1 to CR4 */\n    CV_REG_DR0          = 90,   /* this includes DR1 to DR7 */\n    /* </pcode> */\n\n    CV_REG_GDTR         = 110,\n    CV_REG_GDTL         = 111,\n    CV_REG_IDTR         = 112,\n    CV_REG_IDTL         = 113,\n    CV_REG_LDTR         = 114,\n    CV_REG_TR           = 115,\n\n    CV_REG_PSEUDO1      = 116, /* this includes Pseudo02 to Pseudo09 */\n    CV_REG_ST0          = 128, /* this includes ST1 to ST7 */\n    CV_REG_CTRL         = 136,\n    CV_REG_STAT         = 137,\n    CV_REG_TAG          = 138,\n    CV_REG_FPIP         = 139,\n    CV_REG_FPCS         = 140,\n    CV_REG_FPDO         = 141,\n    CV_REG_FPDS         = 142,\n    CV_REG_ISEM         = 143,\n    CV_REG_FPEIP        = 144,\n    CV_REG_FPEDO        = 145,\n    CV_REG_MM0          = 146, /* this includes MM1 to MM7 */\n    CV_REG_XMM0         = 154, /* this includes XMM1 to XMM7 */\n    CV_REG_XMM00        = 162,\n    CV_REG_XMM0L        = 194, /* this includes XMM1L to XMM7L */\n    CV_REG_XMM0H        = 202, /* this includes XMM1H to XMM7H */\n    CV_REG_MXCSR        = 211,\n    CV_REG_EDXEAX       = 212,\n    CV_REG_EMM0L        = 220,\n    CV_REG_EMM0H        = 228,\n    CV_REG_MM00         = 236,\n    CV_REG_MM01         = 237,\n    CV_REG_MM10         = 238,\n    CV_REG_MM11         = 239,\n    CV_REG_MM20         = 240,\n    CV_REG_MM21         = 241,\n    CV_REG_MM30         = 242,\n    CV_REG_MM31         = 243,\n    CV_REG_MM40         = 244,\n    CV_REG_MM41         = 245,\n    CV_REG_MM50         = 246,\n    CV_REG_MM51         = 247,\n    CV_REG_MM60         = 248,\n    CV_REG_MM61         = 249,\n    CV_REG_MM70         = 250,\n    CV_REG_MM71         = 251,\n\n    CV_REG_YMM0         = 252, /* this includes YMM1 to YMM7 */\n    CV_REG_YMM0H        = 260, /* this includes YMM1H to YMM7H */\n    CV_REG_YMM0I0       = 268, /* this includes YMM0I1 to YMM0I3 */\n    CV_REG_YMM1I0       = 272, /* this includes YMM1I1 to YMM1I3 */\n    CV_REG_YMM2I0       = 276, /* this includes YMM2I1 to YMM2I3 */\n    CV_REG_YMM3I0       = 280, /* this includes YMM3I1 to YMM3I3 */\n    CV_REG_YMM4I0       = 284, /* this includes YMM4I1 to YMM4I3 */\n    CV_REG_YMM5I0       = 288, /* this includes YMM5I1 to YMM5I3 */\n    CV_REG_YMM6I0       = 292, /* this includes YMM6I1 to YMM6I3 */\n    CV_REG_YMM7I0       = 296, /* this includes YMM7I1 to YMM7I3 */\n    CV_REG_YMM0F0       = 300, /* this includes YMM0F1 to YMM0F7 */\n    CV_REG_YMM1F0       = 308, /* this includes YMM1F1 to YMM1F7 */\n    CV_REG_YMM2F0       = 316, /* this includes YMM2F1 to YMM2F7 */\n    CV_REG_YMM3F0       = 324, /* this includes YMM3F1 to YMM3F7 */\n    CV_REG_YMM4F0       = 332, /* this includes YMM4F1 to YMM4F7 */\n    CV_REG_YMM5F0       = 340, /* this includes YMM5F1 to YMM5F7 */\n    CV_REG_YMM6F0       = 348, /* this includes YMM6F1 to YMM6F7 */\n    CV_REG_YMM7F0       = 356, /* this includes YMM7F1 to YMM7F7 */\n    CV_REG_YMM0D0       = 364, /* this includes YMM0D1 to YMM0D3 */\n    CV_REG_YMM1D0       = 368, /* this includes YMM1D1 to YMM1D3 */\n    CV_REG_YMM2D0       = 372, /* this includes YMM2D1 to YMM2D3 */\n    CV_REG_YMM3D0       = 376, /* this includes YMM3D1 to YMM3D3 */\n    CV_REG_YMM4D0       = 380, /* this includes YMM4D1 to YMM4D3 */\n    CV_REG_YMM5D0       = 384, /* this includes YMM5D1 to YMM5D3 */\n    CV_REG_YMM6D0       = 388, /* this includes YMM6D1 to YMM6D3 */\n    CV_REG_YMM7D0       = 392, /* this includes YMM7D1 to YMM7D3 */\n\n    /* Motorola 68K CPU */\n    CV_R68_D0           = 0, /* this includes D1 to D7 too */\n    CV_R68_A0           = 8, /* this includes A1 to A7 too */\n    CV_R68_CCR          = 16,\n    CV_R68_SR           = 17,\n    CV_R68_USP          = 18,\n    CV_R68_MSP          = 19,\n    CV_R68_SFC          = 20,\n    CV_R68_DFC          = 21,\n    CV_R68_CACR         = 22,\n    CV_R68_VBR          = 23,\n    CV_R68_CAAR         = 24,\n    CV_R68_ISP          = 25,\n    CV_R68_PC           = 26,\n    CV_R68_FPCR         = 28,\n    CV_R68_FPSR         = 29,\n    CV_R68_FPIAR        = 30,\n    CV_R68_FP0          = 32, /* this includes FP1 to FP7 */\n    CV_R68_MMUSR030     = 41,\n    CV_R68_MMUSR        = 42,\n    CV_R68_URP          = 43,\n    CV_R68_DTT0         = 44,\n    CV_R68_DTT1         = 45,\n    CV_R68_ITT0         = 46,\n    CV_R68_ITT1         = 47,\n    CV_R68_PSR          = 51,\n    CV_R68_PCSR         = 52,\n    CV_R68_VAL          = 53,\n    CV_R68_CRP          = 54,\n    CV_R68_SRP          = 55,\n    CV_R68_DRP          = 56,\n    CV_R68_TC           = 57,\n    CV_R68_AC           = 58,\n    CV_R68_SCC          = 59,\n    CV_R68_CAL          = 60,\n    CV_R68_TT0          = 61,\n    CV_R68_TT1          = 62,\n    CV_R68_BAD0         = 64, /* this includes BAD1 to BAD7 */\n    CV_R68_BAC0         = 72, /* this includes BAC1 to BAC7 */\n\n    /* MIPS 4000 CPU */\n    CV_M4_NOREG         = CV_REG_NONE,\n    CV_M4_IntZERO       = 10,\n    CV_M4_IntAT         = 11,\n    CV_M4_IntV0         = 12,\n    CV_M4_IntV1         = 13,\n    CV_M4_IntA0         = 14, /* this includes IntA1 to IntA3 */\n    CV_M4_IntT0         = 18, /* this includes IntT1 to IntT7 */\n    CV_M4_IntS0         = 26, /* this includes IntS1 to IntS7 */\n    CV_M4_IntT8         = 34,\n    CV_M4_IntT9         = 35,\n    CV_M4_IntKT0        = 36,\n    CV_M4_IntKT1        = 37,\n    CV_M4_IntGP         = 38,\n    CV_M4_IntSP         = 39,\n    CV_M4_IntS8         = 40,\n    CV_M4_IntRA         = 41,\n    CV_M4_IntLO         = 42,\n    CV_M4_IntHI         = 43,\n    CV_M4_Fir           = 50,\n    CV_M4_Psr           = 51,\n    CV_M4_FltF0         = 60, /* this includes FltF1 to Flt31 */\n    CV_M4_FltFsr        = 92,\n\n    /* Alpha AXP CPU */\n    CV_ALPHA_NOREG      = CV_REG_NONE,\n    CV_ALPHA_FltF0      = 10, /* this includes FltF1 to FltF31 */\n    CV_ALPHA_IntV0      = 42,\n    CV_ALPHA_IntT0      = 43, /* this includes T1 to T7 */\n    CV_ALPHA_IntS0      = 51, /* this includes S1 to S5 */\n    CV_ALPHA_IntFP      = 57,\n    CV_ALPHA_IntA0      = 58, /* this includes A1 to A5 */\n    CV_ALPHA_IntT8      = 64,\n    CV_ALPHA_IntT9      = 65,\n    CV_ALPHA_IntT10     = 66,\n    CV_ALPHA_IntT11     = 67,\n    CV_ALPHA_IntRA      = 68,\n    CV_ALPHA_IntT12     = 69,\n    CV_ALPHA_IntAT      = 70,\n    CV_ALPHA_IntGP      = 71,\n    CV_ALPHA_IntSP      = 72,\n    CV_ALPHA_IntZERO    = 73,\n    CV_ALPHA_Fpcr       = 74,\n    CV_ALPHA_Fir        = 75,\n    CV_ALPHA_Psr        = 76,\n    CV_ALPHA_FltFsr     = 77,\n    CV_ALPHA_SoftFpcr   = 78,\n\n    /* Motorola & IBM PowerPC CPU */\n    CV_PPC_GPR0         = 1, /* this includes GPR1 to GPR31 */\n    CV_PPC_CR           = 33,\n    CV_PPC_CR0          = 34, /* this includes CR1 to CR7 */\n    CV_PPC_FPR0         = 42, /* this includes FPR1 to FPR31 */\n\n    CV_PPC_FPSCR        = 74,\n    CV_PPC_MSR          = 75,\n    CV_PPC_SR0          = 76, /* this includes SR1 to SR15 */\n    CV_PPC_PC           = 99,\n    CV_PPC_MQ           = 100,\n    CV_PPC_XER          = 101,\n    CV_PPC_RTCU         = 104,\n    CV_PPC_RTCL         = 105,\n    CV_PPC_LR           = 108,\n    CV_PPC_CTR          = 109,\n    CV_PPC_COMPARE      = 110,\n    CV_PPC_COUNT        = 111,\n    CV_PPC_DSISR        = 118,\n    CV_PPC_DAR          = 119,\n    CV_PPC_DEC          = 122,\n    CV_PPC_SDR1         = 125,\n    CV_PPC_SRR0         = 126,\n    CV_PPC_SRR1         = 127,\n    CV_PPC_SPRG0        = 372, /* this includes SPRG1 to SPRG3 */\n    CV_PPC_ASR          = 280,\n    CV_PPC_EAR          = 382,\n    CV_PPC_PVR          = 287,\n    CV_PPC_BAT0U        = 628,\n    CV_PPC_BAT0L        = 629,\n    CV_PPC_BAT1U        = 630,\n    CV_PPC_BAT1L        = 631,\n    CV_PPC_BAT2U        = 632,\n    CV_PPC_BAT2L        = 633,\n    CV_PPC_BAT3U        = 634,\n    CV_PPC_BAT3L        = 635,\n    CV_PPC_DBAT0U       = 636,\n    CV_PPC_DBAT0L       = 637,\n    CV_PPC_DBAT1U       = 638,\n    CV_PPC_DBAT1L       = 639,\n    CV_PPC_DBAT2U       = 640,\n    CV_PPC_DBAT2L       = 641,\n    CV_PPC_DBAT3U       = 642,\n    CV_PPC_DBAT3L       = 643,\n    CV_PPC_PMR0         = 1044, /* this includes PMR1 to PMR15 */\n    CV_PPC_DMISS        = 1076,\n    CV_PPC_DCMP         = 1077,\n    CV_PPC_HASH1        = 1078,\n    CV_PPC_HASH2        = 1079,\n    CV_PPC_IMISS        = 1080,\n    CV_PPC_ICMP         = 1081,\n    CV_PPC_RPA          = 1082,\n    CV_PPC_HID0         = 1108, /* this includes HID1 to HID15 */\n\n    /* Java */\n    CV_JAVA_PC          = 1,\n\n    /* Hitachi SH3 CPU */\n    CV_SH3_NOREG        = CV_REG_NONE,\n    CV_SH3_IntR0        = 10, /* this include R1 to R13 */\n    CV_SH3_IntFp        = 24,\n    CV_SH3_IntSp        = 25,\n    CV_SH3_Gbr          = 38,\n    CV_SH3_Pr           = 39,\n    CV_SH3_Mach         = 40,\n    CV_SH3_Macl         = 41,\n    CV_SH3_Pc           = 50,\n    CV_SH3_Sr           = 51,\n    CV_SH3_BarA         = 60,\n    CV_SH3_BasrA        = 61,\n    CV_SH3_BamrA        = 62,\n    CV_SH3_BbrA         = 63,\n    CV_SH3_BarB         = 64,\n    CV_SH3_BasrB        = 65,\n    CV_SH3_BamrB        = 66,\n    CV_SH3_BbrB         = 67,\n    CV_SH3_BdrB         = 68,\n    CV_SH3_BdmrB        = 69,\n    CV_SH3_Brcr         = 70,\n    CV_SH_Fpscr         = 75,\n    CV_SH_Fpul          = 76,\n    CV_SH_FpR0          = 80, /* this includes FpR1 to FpR15 */\n    CV_SH_XFpR0         = 96, /* this includes XFpR1 to XXFpR15 */\n\n    /* ARM CPU */\n    CV_ARM_NOREG        = CV_REG_NONE,\n    CV_ARM_R0           = 10, /* this includes R1 to R12 */\n    CV_ARM_SP           = 23,\n    CV_ARM_LR           = 24,\n    CV_ARM_PC           = 25,\n    CV_ARM_CPSR         = 26,\n    CV_ARM_ACC0         = 27,\n    CV_ARM_FPSCR        = 40,\n    CV_ARM_FPEXC        = 41,\n    CV_ARM_FS0          = 50, /* this includes FS1 to FS31 */\n    CV_ARM_FPEXTRA0     = 90, /* this includes FPEXTRA1 to FPEXTRA7 */\n    CV_ARM_WR0          = 128, /* this includes WR1 to WR15 */\n    CV_ARM_WCID         = 144,\n    CV_ARM_WCON         = 145,\n    CV_ARM_WCSSF        = 146,\n    CV_ARM_WCASF        = 147,\n    CV_ARM_WC4          = 148,\n    CV_ARM_WC5          = 149,\n    CV_ARM_WC6          = 150,\n    CV_ARM_WC7          = 151,\n    CV_ARM_WCGR0        = 152, /* this includes WCGR1 to WCGR3 */\n    CV_ARM_WC12         = 156,\n    CV_ARM_WC13         = 157,\n    CV_ARM_WC14         = 158,\n    CV_ARM_WC15         = 159,\n    CV_ARM_FS32         = 200, /* this includes FS33 to FS63 */\n    CV_ARM_ND0          = 300, /* this includes ND1 to ND31 */\n    CV_ARM_NQ0          = 400, /* this includes NQ1 to NQ15 */\n\n    /* ARM64 CPU */\n    CV_ARM64_NOREG        = CV_REG_NONE,\n    CV_ARM64_W0           = 10, /* this includes W0 to W30 */\n    CV_ARM64_WZR          = 41,\n    CV_ARM64_PC           = 42, /* Wine extension */\n    CV_ARM64_PSTATE       = 43, /* Wine extension */\n    CV_ARM64_X0           = 50, /* this includes X0 to X28 */\n    CV_ARM64_IP0          = 66, /* Same as X16 */\n    CV_ARM64_IP1          = 67, /* Same as X17 */\n    CV_ARM64_FP           = 79,\n    CV_ARM64_LR           = 80,\n    CV_ARM64_SP           = 81,\n    CV_ARM64_ZR           = 82,\n    CV_ARM64_NZCV         = 90,\n    CV_ARM64_S0           = 100, /* this includes S0 to S31 */\n    CV_ARM64_D0           = 140, /* this includes D0 to D31 */\n    CV_ARM64_Q0           = 180, /* this includes Q0 to Q31 */\n    CV_ARM64_FPSR         = 220,\n\n    /* Intel IA64 CPU */\n    CV_IA64_NOREG       = CV_REG_NONE,\n    CV_IA64_Br0         = 512, /* this includes Br1 to Br7 */\n    CV_IA64_P0          = 704, /* this includes P1 to P63 */\n    CV_IA64_Preds       = 768,\n    CV_IA64_IntH0       = 832, /* this includes H1 to H15 */\n    CV_IA64_Ip          = 1016,\n    CV_IA64_Umask       = 1017,\n    CV_IA64_Cfm         = 1018,\n    CV_IA64_Psr         = 1019,\n    CV_IA64_Nats        = 1020,\n    CV_IA64_Nats2       = 1021,\n    CV_IA64_Nats3       = 1022,\n    CV_IA64_IntR0       = 1024, /* this includes R1 to R127 */\n    CV_IA64_FltF0       = 2048, /* this includes FltF1 to FltF127 */\n    /* some IA64 registers missing */\n\n    /* TriCore CPU */\n    CV_TRI_NOREG        = CV_REG_NONE,\n    CV_TRI_D0           = 10, /* includes D1 to D15 */\n    CV_TRI_A0           = 26, /* includes A1 to A15 */\n    CV_TRI_E0           = 42,\n    CV_TRI_E2           = 43,\n    CV_TRI_E4           = 44,\n    CV_TRI_E6           = 45,\n    CV_TRI_E8           = 46,\n    CV_TRI_E10          = 47,\n    CV_TRI_E12          = 48,\n    CV_TRI_E14          = 49,\n    CV_TRI_EA0          = 50,\n    CV_TRI_EA2          = 51,\n    CV_TRI_EA4          = 52,\n    CV_TRI_EA6          = 53,\n    CV_TRI_EA8          = 54,\n    CV_TRI_EA10         = 55,\n    CV_TRI_EA12         = 56,\n    CV_TRI_EA14         = 57,\n    CV_TRI_PSW          = 58,\n    CV_TRI_PCXI         = 59,\n    CV_TRI_PC           = 60,\n    CV_TRI_FCX          = 61,\n    CV_TRI_LCX          = 62,\n    CV_TRI_ISP          = 63,\n    CV_TRI_ICR          = 64,\n    CV_TRI_BIV          = 65,\n    CV_TRI_BTV          = 66,\n    CV_TRI_SYSCON       = 67,\n    CV_TRI_DPRx_0       = 68, /* includes DPRx_1 to DPRx_3 */\n    CV_TRI_CPRx_0       = 68, /* includes CPRx_1 to CPRx_3 */\n    CV_TRI_DPMx_0       = 68, /* includes DPMx_1 to DPMx_3 */\n    CV_TRI_CPMx_0       = 68, /* includes CPMx_1 to CPMx_3 */\n    CV_TRI_DBGSSR       = 72,\n    CV_TRI_EXEVT        = 73,\n    CV_TRI_SWEVT        = 74,\n    CV_TRI_CREVT        = 75,\n    CV_TRI_TRnEVT       = 76,\n    CV_TRI_MMUCON       = 77,\n    CV_TRI_ASI          = 78,\n    CV_TRI_TVA          = 79,\n    CV_TRI_TPA          = 80,\n    CV_TRI_TPX          = 81,\n    CV_TRI_TFA          = 82,\n\n    /* AM33 (and the likes) CPU */\n    CV_AM33_NOREG       = CV_REG_NONE,\n    CV_AM33_E0          = 10, /* this includes E1 to E7 */\n    CV_AM33_A0          = 20, /* this includes A1 to A3 */\n    CV_AM33_D0          = 30, /* this includes D1 to D3 */\n    CV_AM33_FS0         = 40, /* this includes FS1 to FS31 */\n    CV_AM33_SP          = 80,\n    CV_AM33_PC          = 81,\n    CV_AM33_MDR         = 82,\n    CV_AM33_MDRQ        = 83,\n    CV_AM33_MCRH        = 84,\n    CV_AM33_MCRL        = 85,\n    CV_AM33_MCVF        = 86,\n    CV_AM33_EPSW        = 87,\n    CV_AM33_FPCR        = 88,\n    CV_AM33_LIR         = 89,\n    CV_AM33_LAR         = 90,\n\n    /* Mitsubishi M32R CPU */\n    CV_M32R_NOREG       = CV_REG_NONE,\n    CV_M32R_R0          = 10, /* this includes R1 to R11 */\n    CV_M32R_R12         = 22,\n    CV_M32R_R13         = 23,\n    CV_M32R_R14         = 24,\n    CV_M32R_R15         = 25,\n    CV_M32R_PSW         = 26,\n    CV_M32R_CBR         = 27,\n    CV_M32R_SPI         = 28,\n    CV_M32R_SPU         = 29,\n    CV_M32R_SPO         = 30,\n    CV_M32R_BPC         = 31,\n    CV_M32R_ACHI        = 32,\n    CV_M32R_ACLO        = 33,\n    CV_M32R_PC          = 34,\n\n    /* AMD/Intel x86_64 CPU */\n    CV_AMD64_NONE       = CV_REG_NONE,\n    CV_AMD64_AL         = CV_REG_AL,\n    CV_AMD64_CL         = CV_REG_CL,\n    CV_AMD64_DL         = CV_REG_DL,\n    CV_AMD64_BL         = CV_REG_BL,\n    CV_AMD64_AH         = CV_REG_AH,\n    CV_AMD64_CH         = CV_REG_CH,\n    CV_AMD64_DH         = CV_REG_DH,\n    CV_AMD64_BH         = CV_REG_BH,\n    CV_AMD64_AX         = CV_REG_AX,\n    CV_AMD64_CX         = CV_REG_CX,\n    CV_AMD64_DX         = CV_REG_DX,\n    CV_AMD64_BX         = CV_REG_BX,\n    CV_AMD64_SP         = CV_REG_SP,\n    CV_AMD64_BP         = CV_REG_BP,\n    CV_AMD64_SI         = CV_REG_SI,\n    CV_AMD64_DI         = CV_REG_DI,\n    CV_AMD64_EAX        = CV_REG_EAX,\n    CV_AMD64_ECX        = CV_REG_ECX,\n    CV_AMD64_EDX        = CV_REG_EDX,\n    CV_AMD64_EBX        = CV_REG_EBX,\n    CV_AMD64_ESP        = CV_REG_ESP,\n    CV_AMD64_EBP        = CV_REG_EBP,\n    CV_AMD64_ESI        = CV_REG_ESI,\n    CV_AMD64_EDI        = CV_REG_EDI,\n    CV_AMD64_ES         = CV_REG_ES,\n    CV_AMD64_CS         = CV_REG_CS,\n    CV_AMD64_SS         = CV_REG_SS,\n    CV_AMD64_DS         = CV_REG_DS,\n    CV_AMD64_FS         = CV_REG_FS,\n    CV_AMD64_GS         = CV_REG_GS,\n    CV_AMD64_FLAGS      = CV_REG_FLAGS,\n    CV_AMD64_RIP        = CV_REG_EIP,\n    CV_AMD64_EFLAGS     = CV_REG_EFLAGS,\n\n    /* <pcode> */\n    CV_AMD64_TEMP       = CV_REG_TEMP,\n    CV_AMD64_TEMPH      = CV_REG_TEMPH,\n    CV_AMD64_QUOTE      = CV_REG_QUOTE,\n    CV_AMD64_PCDR3      = CV_REG_PCDR3, /* this includes PCDR4 to PCDR7 */\n    CV_AMD64_CR0        = CV_REG_CR0,   /* this includes CR1 to CR4 */\n    CV_AMD64_DR0        = CV_REG_DR0,   /* this includes DR1 to DR7 */\n    /* </pcode> */\n\n    CV_AMD64_GDTR       = CV_REG_GDTR,\n    CV_AMD64_GDTL       = CV_REG_GDTL,\n    CV_AMD64_IDTR       = CV_REG_IDTR,\n    CV_AMD64_IDTL       = CV_REG_IDTL,\n    CV_AMD64_LDTR       = CV_REG_LDTR,\n    CV_AMD64_TR         = CV_REG_TR,\n\n    CV_AMD64_PSEUDO1    = CV_REG_PSEUDO1, /* this includes Pseudo02 to Pseudo09 */\n    CV_AMD64_ST0        = CV_REG_ST0,     /* this includes ST1 to ST7 */\n    CV_AMD64_CTRL       = CV_REG_CTRL,\n    CV_AMD64_STAT       = CV_REG_STAT,\n    CV_AMD64_TAG        = CV_REG_TAG,\n    CV_AMD64_FPIP       = CV_REG_FPIP,\n    CV_AMD64_FPCS       = CV_REG_FPCS,\n    CV_AMD64_FPDO       = CV_REG_FPDO,\n    CV_AMD64_FPDS       = CV_REG_FPDS,\n    CV_AMD64_ISEM       = CV_REG_ISEM,\n    CV_AMD64_FPEIP      = CV_REG_FPEIP,\n    CV_AMD64_FPEDO      = CV_REG_FPEDO,\n    CV_AMD64_MM0        = CV_REG_MM0,     /* this includes MM1 to MM7 */\n    CV_AMD64_XMM0       = CV_REG_XMM0,    /* this includes XMM1 to XMM7 */\n    CV_AMD64_XMM00      = CV_REG_XMM00,\n    CV_AMD64_XMM0L      = CV_REG_XMM0L,   /* this includes XMM1L to XMM7L */\n    CV_AMD64_XMM0H      = CV_REG_XMM0H,   /* this includes XMM1H to XMM7H */\n    CV_AMD64_MXCSR      = CV_REG_MXCSR,\n    CV_AMD64_EDXEAX     = CV_REG_EDXEAX,\n    CV_AMD64_EMM0L      = CV_REG_EMM0L,\n    CV_AMD64_EMM0H      = CV_REG_EMM0H,\n    CV_AMD64_MM00       = CV_REG_MM00,\n    CV_AMD64_MM01       = CV_REG_MM01,\n    CV_AMD64_MM10       = CV_REG_MM10,\n    CV_AMD64_MM11       = CV_REG_MM11,\n    CV_AMD64_MM20       = CV_REG_MM20,\n    CV_AMD64_MM21       = CV_REG_MM21,\n    CV_AMD64_MM30       = CV_REG_MM30,\n    CV_AMD64_MM31       = CV_REG_MM31,\n    CV_AMD64_MM40       = CV_REG_MM40,\n    CV_AMD64_MM41       = CV_REG_MM41,\n    CV_AMD64_MM50       = CV_REG_MM50,\n    CV_AMD64_MM51       = CV_REG_MM51,\n    CV_AMD64_MM60       = CV_REG_MM60,\n    CV_AMD64_MM61       = CV_REG_MM61,\n    CV_AMD64_MM70       = CV_REG_MM70,\n    CV_AMD64_MM71       = CV_REG_MM71,\n\n    CV_AMD64_XMM8       = 252,           /* this includes XMM9 to XMM15 */\n\n    CV_AMD64_RAX        = 328,\n    CV_AMD64_RBX        = 329,\n    CV_AMD64_RCX        = 330,\n    CV_AMD64_RDX        = 331,\n    CV_AMD64_RSI        = 332,\n    CV_AMD64_RDI        = 333,\n    CV_AMD64_RBP        = 334,\n    CV_AMD64_RSP        = 335,\n\n    CV_AMD64_R8         = 336,\n    CV_AMD64_R9         = 337,\n    CV_AMD64_R10        = 338,\n    CV_AMD64_R11        = 339,\n    CV_AMD64_R12        = 340,\n    CV_AMD64_R13        = 341,\n    CV_AMD64_R14        = 342,\n    CV_AMD64_R15        = 343,\n};\n\ntypedef enum\n{\n   THUNK_ORDINAL_NOTYPE,\n   THUNK_ORDINAL_ADJUSTOR,\n   THUNK_ORDINAL_VCALL,\n   THUNK_ORDINAL_PCODE,\n   THUNK_ORDINAL_LOAD \n} THUNK_ORDINAL;\n\ntypedef enum CV_call_e\n{\n    CV_CALL_NEAR_C,\n    CV_CALL_FAR_C,\n    CV_CALL_NEAR_PASCAL,\n    CV_CALL_FAR_PASCAL,\n    CV_CALL_NEAR_FAST,\n    CV_CALL_FAR_FAST,\n    CV_CALL_SKIPPED,\n    CV_CALL_NEAR_STD,\n    CV_CALL_FAR_STD,\n    CV_CALL_NEAR_SYS,\n    CV_CALL_FAR_SYS,\n    CV_CALL_THISCALL,\n    CV_CALL_MIPSCALL,\n    CV_CALL_GENERIC,\n    CV_CALL_ALPHACALL,\n    CV_CALL_PPCCALL,\n    CV_CALL_SHCALL,\n    CV_CALL_ARMCALL,\n    CV_CALL_AM33CALL,\n    CV_CALL_TRICALL,\n    CV_CALL_SH5CALL,\n    CV_CALL_M32RCALL,\n    CV_CALL_RESERVED,\n} CV_call_e;\n"
  },
  {
    "path": "wine/windows/d2d1.idl",
    "content": "/*\n * Copyright 2013 Nikolay Sivov for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\nimport \"dcommon.idl\";\nimport \"d2dbasetypes.h\";\nimport \"d3d10_1.idl\";\nimport \"d2derr.h\";\n\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef DrawText\")\ncpp_quote(\"#endif\")\n\ninterface ID2D1Factory;\ninterface ID2D1RenderTarget;\ninterface ID2D1BitmapRenderTarget;\ninterface ID2D1Geometry;\ninterface ID2D1Brush;\ninterface IDWriteRenderingParams;\ninterface IDWriteTextFormat;\ninterface IDWriteTextLayout;\ninterface IWICBitmapSource;\ninterface IWICBitmap;\n\ncpp_quote(\"#ifndef __dwrite_h__\")\n/* already defined in dwrite.h but needed for WIDL */\ntypedef struct DWRITE_GLYPH_RUN DWRITE_GLYPH_RUN;\ncpp_quote(\"#endif /* __dwrite_h__ */\")\n\ntypedef D2D_MATRIX_3X2_F D2D1_MATRIX_3X2_F;\ntypedef D2D_RECT_F D2D1_RECT_F;\ntypedef D2D_SIZE_F D2D1_SIZE_F;\ntypedef UINT64 D2D1_TAG;\ntypedef D2D_POINT_2U D2D1_POINT_2U;\ntypedef D2D_RECT_U D2D1_RECT_U;\ntypedef D2D_COLOR_F D2D1_COLOR_F;\n\ncpp_quote(\"#define D2D1_DEFAULT_FLATTENING_TOLERANCE (0.25f)\")\n\nenum\n{\n    D2D1_INTERPOLATION_MODE_DEFINITION_NEAREST_NEIGHBOR = 0,\n    D2D1_INTERPOLATION_MODE_DEFINITION_LINEAR = 1,\n    D2D1_INTERPOLATION_MODE_DEFINITION_CUBIC = 2,\n    D2D1_INTERPOLATION_MODE_DEFINITION_MULTI_SAMPLE_LINEAR = 3,\n    D2D1_INTERPOLATION_MODE_DEFINITION_ANISOTROPIC = 4,\n    D2D1_INTERPOLATION_MODE_DEFINITION_HIGH_QUALITY_CUBIC = 5,\n    D2D1_INTERPOLATION_MODE_DEFINITION_FANT = 6,\n    D2D1_INTERPOLATION_MODE_DEFINITION_MIPMAP_LINEAR = 7,\n};\n\ntypedef enum D2D1_DEBUG_LEVEL\n{\n    D2D1_DEBUG_LEVEL_NONE = 0,\n    D2D1_DEBUG_LEVEL_ERROR = 1,\n    D2D1_DEBUG_LEVEL_WARNING = 2,\n    D2D1_DEBUG_LEVEL_INFORMATION = 3,\n    D2D1_DEBUG_LEVEL_FORCE_DWORD = 0xffffffff,\n} D2D1_DEBUG_LEVEL;\n\ntypedef enum D2D1_FACTORY_TYPE\n{\n    D2D1_FACTORY_TYPE_SINGLE_THREADED = 0,\n    D2D1_FACTORY_TYPE_MULTI_THREADED = 1,\n    D2D1_FACTORY_TYPE_FORCE_DWORD = 0xfffffff,\n} D2D1_FACTORY_TYPE;\n\ntypedef enum D2D1_FILL_MODE\n{\n    D2D1_FILL_MODE_ALTERNATE = 0,\n    D2D1_FILL_MODE_WINDING = 1,\n    D2D1_FILL_MODE_FORCE_DWORD = 0xffffffff\n} D2D1_FILL_MODE;\n\ntypedef enum D2D1_PATH_SEGMENT\n{\n    D2D1_PATH_SEGMENT_NONE = 0,\n    D2D1_PATH_SEGMENT_FORCE_UNSTROKED = 1,\n    D2D1_PATH_SEGMENT_FORCE_ROUND_LINE_JOIN = 2,\n    D2D1_PATH_SEGMENT_FORCE_DWORD = 0xffffffff\n} D2D1_PATH_SEGMENT;\n\ntypedef enum D2D1_FIGURE_BEGIN\n{\n    D2D1_FIGURE_BEGIN_FILLED = 0,\n    D2D1_FIGURE_BEGIN_HOLLOW = 1,\n    D2D1_FIGURE_BEGIN_FORCE_DWORD = 0xffffffff\n} D2D1_FIGURE_BEGIN;\n\ntypedef enum D2D1_FIGURE_END\n{\n    D2D1_FIGURE_END_OPEN = 0,\n    D2D1_FIGURE_END_CLOSED = 1,\n    D2D1_FIGURE_END_FORCE_DWORD = 0xffffffff\n} D2D1_FIGURE_END;\n\ntypedef enum D2D1_CAP_STYLE\n{\n    D2D1_CAP_STYLE_FLAT = 0,\n    D2D1_CAP_STYLE_SQUARE = 1,\n    D2D1_CAP_STYLE_ROUND = 2,\n    D2D1_CAP_STYLE_TRIANGLE = 3,\n    D2D1_CAP_STYLE_FORCE_DWORD = 0xffffffff,\n} D2D1_CAP_STYLE;\n\ntypedef enum D2D1_LINE_JOIN\n{\n    D2D1_LINE_JOIN_MITER = 0,\n    D2D1_LINE_JOIN_BEVEL = 1,\n    D2D1_LINE_JOIN_ROUND = 2,\n    D2D1_LINE_JOIN_MITER_OR_BEVEL = 3,\n    D2D1_LINE_JOIN_FORCE_DWORD = 0xffffffff,\n} D2D1_LINE_JOIN;\n\ntypedef enum D2D1_DASH_STYLE\n{\n    D2D1_DASH_STYLE_SOLID = 0,\n    D2D1_DASH_STYLE_DASH = 1,\n    D2D1_DASH_STYLE_DOT = 2,\n    D2D1_DASH_STYLE_DASH_DOT = 3,\n    D2D1_DASH_STYLE_DASH_DOT_DOT = 4,\n    D2D1_DASH_STYLE_CUSTOM = 5,\n    D2D1_DASH_STYLE_FORCE_DWORD = 0xffffffff,\n} D2D1_DASH_STYLE;\n\ntypedef enum D2D1_GEOMETRY_RELATION\n{\n    D2D1_GEOMETRY_RELATION_UNKNOWN = 0,\n    D2D1_GEOMETRY_RELATION_DISJOINT = 1,\n    D2D1_GEOMETRY_RELATION_IS_CONTAINED = 2,\n    D2D1_GEOMETRY_RELATION_CONTAINS = 3,\n    D2D1_GEOMETRY_RELATION_OVERLAP = 4,\n    D2D1_GEOMETRY_RELATION_FORCE_DWORD = 0xffffffff,\n} D2D1_GEOMETRY_RELATION;\n\ntypedef enum D2D1_GEOMETRY_SIMPLIFICATION_OPTION\n{\n    D2D1_GEOMETRY_SIMPLIFICATION_OPTION_CUBICS_AND_LINES = 0,\n    D2D1_GEOMETRY_SIMPLIFICATION_OPTION_LINES = 1,\n    D2D1_GEOMETRY_SIMPLIFICATION_OPTION_FORCE_DWORD = 0xffffffff,\n} D2D1_GEOMETRY_SIMPLIFICATION_OPTION;\n\ntypedef enum D2D1_COMBINE_MODE\n{\n    D2D1_COMBINE_MODE_UNION = 0,\n    D2D1_COMBINE_MODE_INTERSECT = 1,\n    D2D1_COMBINE_MODE_XOR = 2,\n    D2D1_COMBINE_MODE_EXCLUDE = 3,\n    D2D1_COMBINE_MODE_FORCE_DWORD = 0xffffffff,\n} D2D1_COMBINE_MODE;\n\ntypedef enum D2D1_SWEEP_DIRECTION\n{\n    D2D1_SWEEP_DIRECTION_COUNTER_CLOCKWISE = 0,\n    D2D1_SWEEP_DIRECTION_CLOCKWISE = 1,\n    D2D1_SWEEP_DIRECTION_FORCE_DWORD = 0xffffffff,\n} D2D1_SWEEP_DIRECTION;\n\ntypedef enum D2D1_ARC_SIZE\n{\n    D2D1_ARC_SIZE_SMALL = 0,\n    D2D1_ARC_SIZE_LARGE = 1,\n    D2D1_ARC_SIZE_FORCE_DWORD = 0xffffffff,\n} D2D1_ARC_SIZE;\n\ntypedef enum D2D1_ANTIALIAS_MODE\n{\n    D2D1_ANTIALIAS_MODE_PER_PRIMITIVE = 0,\n    D2D1_ANTIALIAS_MODE_ALIASED = 1,\n    D2D1_ANTIALIAS_MODE_FORCE_DWORD = 0xffffffff,\n} D2D1_ANTIALIAS_MODE;\n\ntypedef enum D2D1_TEXT_ANTIALIAS_MODE\n{\n    D2D1_TEXT_ANTIALIAS_MODE_DEFAULT = 0,\n    D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE = 1,\n    D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE = 2,\n    D2D1_TEXT_ANTIALIAS_MODE_ALIASED = 3,\n    D2D1_TEXT_ANTIALIAS_MODE_FORCE_DWORD = 0xffffffff,\n} D2D1_TEXT_ANTIALIAS_MODE;\n\ntypedef enum D2D1_EXTEND_MODE\n{\n    D2D1_EXTEND_MODE_CLAMP = 0,\n    D2D1_EXTEND_MODE_WRAP = 1,\n    D2D1_EXTEND_MODE_MIRROR = 2,\n    D2D1_EXTEND_MODE_FORCE_DWORD = 0xffffffff,\n} D2D1_EXTEND_MODE;\n\ntypedef enum D2D1_BITMAP_INTERPOLATION_MODE\n{\n    D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR = D2D1_INTERPOLATION_MODE_DEFINITION_NEAREST_NEIGHBOR,\n    D2D1_BITMAP_INTERPOLATION_MODE_LINEAR = D2D1_INTERPOLATION_MODE_DEFINITION_LINEAR,\n    D2D1_BITMAP_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff,\n} D2D1_BITMAP_INTERPOLATION_MODE;\n\ntypedef enum D2D1_GAMMA\n{\n    D2D1_GAMMA_2_2 = 0,\n    D2D1_GAMMA_1_0 = 1,\n    D2D1_GAMMA_FORCE_DWORD = 0xffffffff,\n} D2D1_GAMMA;\n\ntypedef enum D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS\n{\n    D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_NONE = 0x00000000,\n    D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE = 0x00000001,\n    D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_FORCE_DWORD = 0xffffffff,\n} D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS;\n\ntypedef enum D2D1_OPACITY_MASK_CONTENT\n{\n    D2D1_OPACITY_MASK_CONTENT_GRAPHICS = 0,\n    D2D1_OPACITY_MASK_CONTENT_TEXT_NATURAL = 1,\n    D2D1_OPACITY_MASK_CONTENT_TEXT_GDI_COMPATIBLE = 2,\n    D2D1_OPACITY_MASK_CONTENT_FORCE_DWORD = 0xffffffff,\n} D2D1_OPACITY_MASK_CONTENT;\n\ntypedef enum D2D1_DRAW_TEXT_OPTIONS\n{\n    D2D1_DRAW_TEXT_OPTIONS_NO_SNAP = 0x00000001,\n    D2D1_DRAW_TEXT_OPTIONS_CLIP = 0x00000002,\n    D2D1_DRAW_TEXT_OPTIONS_ENABLE_COLOR_FONT = 0x00000004,\n    D2D1_DRAW_TEXT_OPTIONS_DISABLE_COLOR_BITMAP_SNAPPING = 0x00000008,\n    D2D1_DRAW_TEXT_OPTIONS_NONE = 0x00000000,\n    D2D1_DRAW_TEXT_OPTIONS_FORCE_DWORD = 0xffffffff,\n} D2D1_DRAW_TEXT_OPTIONS;\n\ntypedef enum D2D1_LAYER_OPTIONS\n{\n    D2D1_LAYER_OPTIONS_NONE = 0x00000000,\n    D2D1_LAYER_OPTIONS_INITIALIZE_FOR_CLEARTYPE = 0x00000001,\n    D2D1_LAYER_OPTIONS_FORCE_DWORD = 0xffffffff,\n} D2D1_LAYER_OPTIONS;\n\ntypedef enum D2D1_RENDER_TARGET_TYPE\n{\n    D2D1_RENDER_TARGET_TYPE_DEFAULT = 0,\n    D2D1_RENDER_TARGET_TYPE_SOFTWARE = 1,\n    D2D1_RENDER_TARGET_TYPE_HARDWARE = 2,\n    D2D1_RENDER_TARGET_TYPE_FORCE_DWORD = 0xffffffff,\n} D2D1_RENDER_TARGET_TYPE;\n\ntypedef enum D2D1_RENDER_TARGET_USAGE\n{\n    D2D1_RENDER_TARGET_USAGE_NONE = 0x00000000,\n    D2D1_RENDER_TARGET_USAGE_FORCE_BITMAP_REMOTING = 0x00000001,\n    D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE = 0x00000002,\n    D2D1_RENDER_TARGET_USAGE_FORCE_DWORD = 0xffffffff,\n} D2D1_RENDER_TARGET_USAGE;\n\ntypedef enum D2D1_FEATURE_LEVEL\n{\n    D2D1_FEATURE_LEVEL_DEFAULT = 0,\n    D2D1_FEATURE_LEVEL_9 = D3D_FEATURE_LEVEL_9_1,\n    D2D1_FEATURE_LEVEL_10 = D3D_FEATURE_LEVEL_10_0,\n    D2D1_FEATURE_LEVEL_FORCE_DWORD = 0xffffffff,\n} D2D1_FEATURE_LEVEL;\n\ntypedef enum D2D1_WINDOW_STATE\n{\n    D2D1_WINDOW_STATE_NONE = 0x0000000,\n    D2D1_WINDOW_STATE_OCCLUDED = 0x0000001,\n    D2D1_WINDOW_STATE_FORCE_DWORD = 0xffffffff,\n} D2D1_WINDOW_STATE;\n\ntypedef enum D2D1_DC_INITIALIZE_MODE\n{\n    D2D1_DC_INITIALIZE_MODE_COPY = 0,\n    D2D1_DC_INITIALIZE_MODE_CLEAR = 1,\n    D2D1_DC_INITIALIZE_MODE_FORCE_DWORD = 0xffffffff,\n} D2D1_DC_INITIALIZE_MODE;\n\ntypedef enum D2D1_PRESENT_OPTIONS\n{\n    D2D1_PRESENT_OPTIONS_NONE = 0x00000000,\n    D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS = 0x00000001,\n    D2D1_PRESENT_OPTIONS_IMMEDIATELY = 0x00000002,\n    D2D1_PRESENT_OPTIONS_FORCE_DWORD = 0xffffffff,\n} D2D1_PRESENT_OPTIONS;\n\ntypedef struct D2D1_BEZIER_SEGMENT\n{\n    D2D1_POINT_2F point1;\n    D2D1_POINT_2F point2;\n    D2D1_POINT_2F point3;\n} D2D1_BEZIER_SEGMENT;\n\ntypedef struct D2D1_FACTORY_OPTIONS\n{\n    D2D1_DEBUG_LEVEL debugLevel;\n} D2D1_FACTORY_OPTIONS;\n\ntypedef struct D2D1_TRIANGLE\n{\n    D2D1_POINT_2F point1;\n    D2D1_POINT_2F point2;\n    D2D1_POINT_2F point3;\n} D2D1_TRIANGLE;\n\ntypedef struct D2D1_ROUNDED_RECT\n{\n    D2D1_RECT_F rect;\n    float radiusX;\n    float radiusY;\n} D2D1_ROUNDED_RECT;\n\ntypedef struct D2D1_ELLIPSE\n{\n    D2D1_POINT_2F point;\n    float radiusX;\n    float radiusY;\n} D2D1_ELLIPSE;\n\ntypedef struct D2D1_QUADRATIC_BEZIER_SEGMENT\n{\n    D2D1_POINT_2F point1;\n    D2D1_POINT_2F point2;\n} D2D1_QUADRATIC_BEZIER_SEGMENT;\n\ntypedef struct D2D1_ARC_SEGMENT\n{\n    D2D1_POINT_2F point;\n    D2D1_SIZE_F size;\n    float rotationAngle;\n    D2D1_SWEEP_DIRECTION sweepDirection;\n    D2D1_ARC_SIZE arcSize;\n} D2D1_ARC_SEGMENT;\n\ntypedef struct D2D1_DRAWING_STATE_DESCRIPTION\n{\n    D2D1_ANTIALIAS_MODE antialiasMode;\n    D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode;\n    D2D1_TAG tag1;\n    D2D1_TAG tag2;\n    D2D1_MATRIX_3X2_F transform;\n} D2D1_DRAWING_STATE_DESCRIPTION;\n\ntypedef struct D2D1_GRADIENT_STOP\n{\n    float position;\n    D2D1_COLOR_F color;\n} D2D1_GRADIENT_STOP;\n\ntypedef struct D2D1_BITMAP_PROPERTIES\n{\n    D2D1_PIXEL_FORMAT pixelFormat;\n    float dpiX;\n    float dpiY;\n} D2D1_BITMAP_PROPERTIES;\n\ntypedef struct D2D1_BITMAP_BRUSH_PROPERTIES\n{\n    D2D1_EXTEND_MODE extendModeX;\n    D2D1_EXTEND_MODE extendModeY;\n    D2D1_BITMAP_INTERPOLATION_MODE interpolationMode;\n} D2D1_BITMAP_BRUSH_PROPERTIES;\n\ntypedef struct D2D1_BRUSH_PROPERTIES\n{\n    float opacity;\n    D2D1_MATRIX_3X2_F transform;\n} D2D1_BRUSH_PROPERTIES;\n\ntypedef struct D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES\n{\n    D2D1_POINT_2F startPoint;\n    D2D1_POINT_2F endPoint;\n} D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES;\n\ntypedef struct D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES\n{\n    D2D1_POINT_2F center;\n    D2D1_POINT_2F gradientOriginOffset;\n    float radiusX;\n    float radiusY;\n} D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES;\n\ntypedef struct D2D1_LAYER_PARAMETERS\n{\n    D2D1_RECT_F contentBounds;\n    ID2D1Geometry *geometricMask;\n    D2D1_ANTIALIAS_MODE maskAntialiasMode;\n    D2D1_MATRIX_3X2_F maskTransform;\n    float opacity;\n    ID2D1Brush *opacityBrush;\n    D2D1_LAYER_OPTIONS layerOptions;\n} D2D1_LAYER_PARAMETERS;\n\ntypedef struct D2D1_RENDER_TARGET_PROPERTIES\n{\n    D2D1_RENDER_TARGET_TYPE type;\n    D2D1_PIXEL_FORMAT pixelFormat;\n    float dpiX;\n    float dpiY;\n    D2D1_RENDER_TARGET_USAGE usage;\n    D2D1_FEATURE_LEVEL minLevel;\n} D2D1_RENDER_TARGET_PROPERTIES;\n\ntypedef struct D2D1_STROKE_STYLE_PROPERTIES\n{\n    D2D1_CAP_STYLE startCap;\n    D2D1_CAP_STYLE endCap;\n    D2D1_CAP_STYLE dashCap;\n    D2D1_LINE_JOIN lineJoin;\n    float miterLimit;\n    D2D1_DASH_STYLE dashStyle;\n    float dashOffset;\n} D2D1_STROKE_STYLE_PROPERTIES;\n\ntypedef struct D2D1_HWND_RENDER_TARGET_PROPERTIES\n{\n    HWND hwnd;\n    D2D1_SIZE_U pixelSize;\n    D2D1_PRESENT_OPTIONS presentOptions;\n} D2D1_HWND_RENDER_TARGET_PROPERTIES;\n\n[\n    local,\n    object,\n    uuid(2cd90691-12e2-11dc-9fed-001143a055f9)\n]\ninterface ID2D1Resource : IUnknown\n{\n    void GetFactory(\n        [out] ID2D1Factory **factory\n    );\n}\n\n[\n    local,\n    object,\n    uuid(2cd9069d-12e2-11dc-9fed-001143a055f9)\n]\ninterface ID2D1StrokeStyle : ID2D1Resource\n{\n    D2D1_CAP_STYLE GetStartCap();\n    D2D1_CAP_STYLE GetEndCap();\n    D2D1_CAP_STYLE GetDashCap();\n    float GetMiterLimit();\n    D2D1_LINE_JOIN GetLineJoin();\n    float GetDashOffset();\n    D2D1_DASH_STYLE GetDashStyle();\n    UINT32 GetDashesCount();\n    void GetDashes(\n        [out, size_is(count)] float *dashes,\n        [in] UINT32 count\n    );\n}\n\n[\n    local,\n    object,\n    uuid(2cd9069e-12e2-11dc-9fed-001143a055f9)\n]\ninterface ID2D1SimplifiedGeometrySink : IUnknown\n{\n    void SetFillMode(D2D1_FILL_MODE mode);\n    void SetSegmentFlags(D2D1_PATH_SEGMENT vertexFlags);\n    void BeginFigure(D2D1_POINT_2F startPoint, D2D1_FIGURE_BEGIN figureBegin);\n    void AddLines(const D2D1_POINT_2F *points, UINT32 count);\n    void AddBeziers(const D2D1_BEZIER_SEGMENT *beziers, UINT32 count);\n    void EndFigure(D2D1_FIGURE_END figureEnd);\n    HRESULT Close();\n}\n\n[\n    local,\n    object,\n    uuid(2cd906c1-12e2-11dc-9fed-001143a055f9)\n]\ninterface ID2D1TessellationSink : IUnknown\n{\n    void AddTriangles(\n        [in, size_is(count)] const D2D1_TRIANGLE *triangles,\n        [in] UINT32 count\n    );\n    HRESULT Close();\n}\n\n[\n    local,\n    object,\n    uuid(2cd906a1-12e2-11dc-9fed-001143a055f9)\n]\ninterface ID2D1Geometry : ID2D1Resource\n{\n    HRESULT GetBounds(\n        [in] const D2D1_MATRIX_3X2_F *transform,\n        [out] D2D1_RECT_F *bounds\n    );\n    HRESULT GetWidenedBounds(\n        [in] float stroke_width,\n        [in] ID2D1StrokeStyle *stroke_style,\n        [in] const D2D1_MATRIX_3X2_F *transform,\n        [in] float tolerance,\n        [out] D2D1_RECT_F *bounds\n    );\n    HRESULT StrokeContainsPoint(\n        [in] D2D1_POINT_2F point,\n        [in] float stroke_width,\n        [in] ID2D1StrokeStyle *stroke_style,\n        [in] const D2D1_MATRIX_3X2_F *transform,\n        [in] float tolerance,\n        [out] BOOL *contains\n    );\n    HRESULT FillContainsPoint(\n        [in] D2D1_POINT_2F point,\n        [in] const D2D1_MATRIX_3X2_F *transform,\n        [in] float tolerance,\n        [out] BOOL *contains\n    );\n    HRESULT CompareWithGeometry(\n        [in] ID2D1Geometry *geometry,\n        [in] const D2D1_MATRIX_3X2_F *transform,\n        [in] float tolerance,\n        [out] D2D1_GEOMETRY_RELATION *relation\n    );\n    HRESULT Simplify(\n        [in] D2D1_GEOMETRY_SIMPLIFICATION_OPTION option,\n        [in] const D2D1_MATRIX_3X2_F *transform,\n        [in] float tolerance,\n        [in] ID2D1SimplifiedGeometrySink *sink\n    );\n    HRESULT Tessellate(\n        [in] const D2D1_MATRIX_3X2_F *transform,\n        [in] float tolerance,\n        [in] ID2D1TessellationSink *sink\n    );\n    HRESULT CombineWithGeometry(\n        [in] ID2D1Geometry *geometry,\n        [in] D2D1_COMBINE_MODE combine_mode,\n        [in] const D2D1_MATRIX_3X2_F *transform,\n        [in] float tolerance,\n        [in] ID2D1SimplifiedGeometrySink *sink\n    );\n    HRESULT Outline(\n        [in] const D2D1_MATRIX_3X2_F *transform,\n        [in] float tolerance,\n        [in] ID2D1SimplifiedGeometrySink *sink\n    );\n    HRESULT ComputeArea(\n        [in] const D2D1_MATRIX_3X2_F *transform,\n        [in] float tolerance,\n        [out] float *area\n    );\n    HRESULT ComputeLength(\n        [in] const D2D1_MATRIX_3X2_F *transform,\n        [in] float tolerance,\n        [out] float *length\n    );\n    HRESULT ComputePointAtLength(\n        [in] float length,\n        [in] const D2D1_MATRIX_3X2_F *transform,\n        [in] float tolerance,\n        [out] D2D1_POINT_2F *point,\n        [out] D2D1_POINT_2F *tangent\n    );\n    HRESULT Widen(\n        [in] float stroke_width,\n        [in] ID2D1StrokeStyle *stroke_style,\n        [in] const D2D1_MATRIX_3X2_F *transform,\n        [in] float tolerance,\n        [in] ID2D1SimplifiedGeometrySink *sink\n    );\n}\n\n[\n    local,\n    object,\n    uuid(2cd906a2-12e2-11dc-9fed-001143a055f9)\n]\ninterface ID2D1RectangleGeometry : ID2D1Geometry\n{\n    void GetRect(\n        [out] D2D1_RECT_F *rect\n    );\n}\n\n[\n    local,\n    object,\n    uuid(2cd906a3-12e2-11dc-9fed-001143a055f9)\n]\ninterface ID2D1RoundedRectangleGeometry : ID2D1Geometry\n{\n    void GetRoundedRect(\n        [out] D2D1_ROUNDED_RECT *rect\n    );\n}\n\n[\n    local,\n    object,\n    uuid(2cd906a4-12e2-11dc-9fed-001143a055f9)\n]\ninterface ID2D1EllipseGeometry : ID2D1Geometry\n{\n    void GetEllipse(\n        [out] D2D1_ELLIPSE *ellipse\n    );\n}\n\n[\n    local,\n    object,\n    uuid(2cd906a6-12e2-11dc-9fed-001143a055f9)\n]\ninterface ID2D1GeometryGroup : ID2D1Geometry\n{\n    D2D1_FILL_MODE GetFillMode();\n    UINT32 GetSourceGeometryCount();\n    void GetSourceGeometries(\n        [out, size_is(geometry_count)] ID2D1Geometry **geometry,\n        [in] UINT32 geometry_count\n    );\n}\n\n[\n    local,\n    object,\n    uuid(2cd906bb-12e2-11dc-9fed-001143a055f9)\n]\ninterface ID2D1TransformedGeometry : ID2D1Geometry\n{\n    void GetSourceGeometry(\n        [out] ID2D1Geometry **geometry\n    );\n    void GetTransform(\n        [out] D2D1_MATRIX_3X2_F *transform\n    );\n}\n\n[\n    local,\n    object,\n    uuid(2cd9069f-12e2-11dc-9fed-001143a055f9)\n]\ninterface ID2D1GeometrySink : ID2D1SimplifiedGeometrySink\n{\n    void AddLine(\n        [in] D2D1_POINT_2F point\n    );\n    void AddBezier(\n        [in] const D2D1_BEZIER_SEGMENT *bezier\n    );\n    void AddQuadraticBezier(\n        [in] const D2D1_QUADRATIC_BEZIER_SEGMENT *bezier\n    );\n    void AddQuadraticBeziers(\n        [in, size_is(bezier_count)] const D2D1_QUADRATIC_BEZIER_SEGMENT *beziers,\n        [in] UINT32 bezier_count\n    );\n    void AddArc(\n        [in] const D2D1_ARC_SEGMENT *arc\n    );\n}\n\n[\n    local,\n    object,\n    uuid(2cd906a5-12e2-11dc-9fed-001143a055f9)\n]\ninterface ID2D1PathGeometry : ID2D1Geometry\n{\n    HRESULT Open(\n        [out] ID2D1GeometrySink **sink\n    );\n    HRESULT Stream(\n        [in] ID2D1GeometrySink *sink\n    );\n    HRESULT GetSegmentCount(\n        [out] UINT32 *count\n    );\n    HRESULT GetFigureCount(\n        [out] UINT32 *count\n    );\n}\n\n[\n    local,\n    object,\n    uuid(28506e39-ebf6-46a1-bb47-fd85565ab957)\n]\ninterface ID2D1DrawingStateBlock : ID2D1Resource\n{\n    void GetDescription(\n        [out] D2D1_DRAWING_STATE_DESCRIPTION *desc\n    );\n    void SetDescription(\n        [in] const D2D1_DRAWING_STATE_DESCRIPTION *desc\n    );\n    void SetTextRenderingParams(\n        [in] IDWriteRenderingParams *text_rendering_params\n    );\n    void GetTextRenderingParams(\n        [out] IDWriteRenderingParams **text_rendering_params\n    );\n}\n\n[\n    local,\n    object,\n    uuid(65019f75-8da2-497c-b32c-dfa34e48ede6)\n]\ninterface ID2D1Image : ID2D1Resource\n{\n}\n\n[\n    local,\n    object,\n    uuid(a2296057-ea42-4099-983b-539fb6505426)\n]\ninterface ID2D1Bitmap : ID2D1Image\n{\n    D2D1_SIZE_F GetSize();\n    D2D1_SIZE_U GetPixelSize();\n    D2D1_PIXEL_FORMAT GetPixelFormat();\n    void GetDpi(\n        [out] float *dpi_x,\n        [out] float *dpi_y\n    );\n    HRESULT CopyFromBitmap(\n        [in] const D2D1_POINT_2U *dst_point,\n        [in] ID2D1Bitmap *bitmap,\n        [in] const D2D1_RECT_U *src_rect\n    );\n    HRESULT CopyFromRenderTarget(\n        [in] const D2D1_POINT_2U *dst_point,\n        [in] ID2D1RenderTarget *render_target,\n        [in] const D2D1_RECT_U *src_rect\n    );\n    HRESULT CopyFromMemory(\n        [in] const D2D1_RECT_U *dst_rect,\n        [in] const void *src_data,\n        [in] UINT32 pitch\n    );\n}\n\n[\n    local,\n    object,\n    uuid(2cd906a8-12e2-11dc-9fed-001143a055f9)\n]\ninterface ID2D1Brush : ID2D1Resource\n{\n    void SetOpacity(\n        [in] float opacity\n    );\n    void SetTransform(\n        [in] const D2D1_MATRIX_3X2_F *transform\n    );\n    float GetOpacity();\n    void GetTransform(\n        [out] D2D1_MATRIX_3X2_F *transform\n    );\n}\n\n[\n    local,\n    object,\n    uuid(2cd906aa-12e2-11dc-9fed-001143a055f9)\n]\ninterface ID2D1BitmapBrush : ID2D1Brush\n{\n    void SetExtendModeX(\n        [in] D2D1_EXTEND_MODE mode\n    );\n    void SetExtendModeY(\n        [in] D2D1_EXTEND_MODE mode\n    );\n    void SetInterpolationMode(\n        [in] D2D1_BITMAP_INTERPOLATION_MODE mode\n    );\n    void SetBitmap(\n        [in] ID2D1Bitmap *bitmap\n    );\n    D2D1_EXTEND_MODE GetExtendModeX();\n    D2D1_EXTEND_MODE GetExtendModeY();\n    D2D1_BITMAP_INTERPOLATION_MODE GetInterpolationMode();\n    void GetBitmap(\n        [out] ID2D1Bitmap **bitmap\n    );\n}\n\n[\n    local,\n    object,\n    uuid(2cd906a9-12e2-11dc-9fed-001143a055f9)\n]\ninterface ID2D1SolidColorBrush : ID2D1Brush\n{\n    void SetColor(\n        [in] const D2D1_COLOR_F *color\n    );\n    D2D1_COLOR_F GetColor();\n}\n\n[\n    local,\n    object,\n    uuid(2cd906a7-12e2-11dc-9fed-001143a055f9)\n]\ninterface ID2D1GradientStopCollection : ID2D1Resource\n{\n    UINT32 GetGradientStopCount();\n    void GetGradientStops(\n        [out] D2D1_GRADIENT_STOP *stops,\n        [in] UINT32 stop_count\n    );\n    D2D1_GAMMA GetColorInterpolationGamma();\n    D2D1_EXTEND_MODE GetExtendMode();\n}\n\n[\n    local,\n    object,\n    uuid(2cd906ab-12e2-11dc-9fed-001143a055f9)\n]\ninterface ID2D1LinearGradientBrush : ID2D1Brush\n{\n    void SetStartPoint(\n        [in] D2D1_POINT_2F start_point\n    );\n    void SetEndPoint(\n        [in] D2D1_POINT_2F end_point\n    );\n    D2D1_POINT_2F GetStartPoint();\n    D2D1_POINT_2F GetEndPoint();\n    void GetGradientStopCollection(\n        [out] ID2D1GradientStopCollection **gradient\n    );\n}\n\n[\n    local,\n    object,\n    uuid(2cd906ac-12e2-11dc-9fed-001143a055f9)\n]\ninterface ID2D1RadialGradientBrush : ID2D1Brush\n{\n    void SetCenter(\n        [in] D2D1_POINT_2F center\n    );\n    void SetGradientOriginOffset(\n        [in] D2D1_POINT_2F offset\n    );\n    void SetRadiusX(\n        [in] float radius\n    );\n    void SetRadiusY(\n        [in] float radius\n    );\n    D2D1_POINT_2F GetCenter();\n    D2D1_POINT_2F GetGradientOriginOffset();\n    float GetRadiusX();\n    float GetRadiusY();\n    void GetGradientStopCollection(\n        [out] ID2D1GradientStopCollection **gradient\n    );\n}\n\n[\n    local,\n    object,\n    uuid(2cd9069b-12e2-11dc-9fed-001143a055f9)\n]\ninterface ID2D1Layer : ID2D1Resource\n{\n    D2D1_SIZE_F GetSize();\n}\n\n[\n    local,\n    object,\n    uuid(2cd906c2-12e2-11dc-9fed-001143a055f9)\n]\ninterface ID2D1Mesh : ID2D1Resource\n{\n    HRESULT Open(\n        [out] ID2D1TessellationSink **sink\n    );\n}\n\n[\n    local,\n    object,\n    uuid(2cd90694-12e2-11dc-9fed-001143a055f9)\n]\ninterface ID2D1RenderTarget : ID2D1Resource\n{\n    HRESULT CreateBitmap(\n        [in] D2D1_SIZE_U size,\n        [in] const void *src_data,\n        [in] UINT32 pitch,\n        [in] const D2D1_BITMAP_PROPERTIES *desc,\n        [out] ID2D1Bitmap **bitmap\n    );\n    HRESULT CreateBitmapFromWicBitmap(\n        [in] IWICBitmapSource *bitmap_source,\n        [in] const D2D1_BITMAP_PROPERTIES *desc,\n        [out] ID2D1Bitmap **bitmap\n    );\n    HRESULT CreateSharedBitmap(\n        [in] REFIID iid,\n        [in, out] void *data,\n        [in] const D2D1_BITMAP_PROPERTIES *desc,\n        [out] ID2D1Bitmap **bitmap\n    );\n    HRESULT CreateBitmapBrush(\n        [in] ID2D1Bitmap *bitmap,\n        [in] const D2D1_BITMAP_BRUSH_PROPERTIES *bitmap_brush_desc,\n        [in] const D2D1_BRUSH_PROPERTIES *brush_desc,\n        [out] ID2D1BitmapBrush **brush\n    );\n    HRESULT CreateSolidColorBrush(\n        [in] const D2D1_COLOR_F *color,\n        [in] const D2D1_BRUSH_PROPERTIES *desc,\n        [out] ID2D1SolidColorBrush **brush\n    );\n    HRESULT CreateGradientStopCollection(\n        [in, size_is(stop_count)] const D2D1_GRADIENT_STOP *stops,\n        [in] UINT32 stop_count,\n        [in] D2D1_GAMMA gamma,\n        [in] D2D1_EXTEND_MODE extend_mode,\n        [out] ID2D1GradientStopCollection **gradient\n    );\n    HRESULT CreateLinearGradientBrush(\n        [in] const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,\n        [in] const D2D1_BRUSH_PROPERTIES *brush_desc,\n        [in] ID2D1GradientStopCollection *gradient,\n        [out] ID2D1LinearGradientBrush **brush\n    );\n    HRESULT CreateRadialGradientBrush(\n        [in] const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,\n        [in] const D2D1_BRUSH_PROPERTIES *brush_desc,\n        [in] ID2D1GradientStopCollection *gradient,\n        [out] ID2D1RadialGradientBrush **brush\n    );\n    HRESULT CreateCompatibleRenderTarget(\n        [in] const D2D1_SIZE_F *size,\n        [in] const D2D1_SIZE_U *pixel_size,\n        [in] const D2D1_PIXEL_FORMAT *format,\n        [in] D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options,\n        [out] ID2D1BitmapRenderTarget **render_target\n    );\n    HRESULT CreateLayer(\n        [in] const D2D1_SIZE_F *size,\n        [out] ID2D1Layer **layer\n    );\n    HRESULT CreateMesh(\n        [out] ID2D1Mesh **mesh\n    );\n    void DrawLine(\n        [in] D2D1_POINT_2F p0,\n        [in] D2D1_POINT_2F p1,\n        [in] ID2D1Brush *brush,\n        [in] float stroke_width,\n        [in] ID2D1StrokeStyle *stroke_style\n    );\n    void DrawRectangle(\n        [in] const D2D1_RECT_F *rect,\n        [in] ID2D1Brush *brush,\n        [in] float stroke_width,\n        [in] ID2D1StrokeStyle *stroke_style\n    );\n    void FillRectangle(\n        [in] const D2D1_RECT_F *rect,\n        [in] ID2D1Brush *brush\n    );\n    void DrawRoundedRectangle(\n        [in] const D2D1_ROUNDED_RECT *rect,\n        [in] ID2D1Brush *brush,\n        [in] float stroke_width,\n        [in] ID2D1StrokeStyle *stroke_style\n    );\n    void FillRoundedRectangle(\n        [in] const D2D1_ROUNDED_RECT *rect,\n        [in] ID2D1Brush *brush\n    );\n    void DrawEllipse(\n        [in] const D2D1_ELLIPSE *ellipse,\n        [in] ID2D1Brush *brush,\n        [in] float stroke_width,\n        [in] ID2D1StrokeStyle *stroke_style\n    );\n    void FillEllipse(\n        [in] const D2D1_ELLIPSE *ellipse,\n        [in] ID2D1Brush *brush\n    );\n    void DrawGeometry(\n        [in] ID2D1Geometry *geometry,\n        [in] ID2D1Brush *brush,\n        [in] float stroke_width,\n        [in] ID2D1StrokeStyle *stroke_style\n    );\n    void FillGeometry(\n        [in] ID2D1Geometry *geometry,\n        [in] ID2D1Brush *brush,\n        [in] ID2D1Brush *opacity_brush\n    );\n    void FillMesh(\n        [in] ID2D1Mesh *mesh,\n        [in] ID2D1Brush *brush\n    );\n    void FillOpacityMask(\n        [in] ID2D1Bitmap *mask,\n        [in] ID2D1Brush *brush,\n        [in] D2D1_OPACITY_MASK_CONTENT content,\n        [in] const D2D1_RECT_F *dst_rect,\n        [in] const D2D1_RECT_F *src_rect\n    );\n    void DrawBitmap(\n        [in] ID2D1Bitmap *bitmap,\n        [in] const D2D1_RECT_F *dst_rect,\n        [in] float opacity,\n        [in] D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,\n        [in] const D2D1_RECT_F *src_rect\n    );\n    void DrawText(\n        [in, size_is(string_len)] const WCHAR *string,\n        [in] UINT32 string_len,\n        [in] IDWriteTextFormat *text_format,\n        [in] const D2D1_RECT_F *layout_rect,\n        [in] ID2D1Brush *brush,\n        [in] D2D1_DRAW_TEXT_OPTIONS options,\n        [in] DWRITE_MEASURING_MODE measuring_mode\n    );\n    void DrawTextLayout(\n        [in] D2D1_POINT_2F origin,\n        [in] IDWriteTextLayout *layout,\n        [in] ID2D1Brush *brush,\n        [in] D2D1_DRAW_TEXT_OPTIONS options\n    );\n    void DrawGlyphRun(\n        [in] D2D1_POINT_2F baseline_origin,\n        [in] const DWRITE_GLYPH_RUN *glyph_run,\n        [in] ID2D1Brush *brush,\n        [in] DWRITE_MEASURING_MODE measuring_mode\n    );\n    void SetTransform(\n        [in] const D2D1_MATRIX_3X2_F *transform\n    );\n    void GetTransform(\n        [out] D2D1_MATRIX_3X2_F *transform\n    );\n    void SetAntialiasMode(\n        [in] D2D1_ANTIALIAS_MODE antialias_mode\n    );\n    D2D1_ANTIALIAS_MODE GetAntialiasMode();\n    void SetTextAntialiasMode(\n        [in] D2D1_TEXT_ANTIALIAS_MODE antialias_mode\n    );\n    D2D1_TEXT_ANTIALIAS_MODE GetTextAntialiasMode();\n    void SetTextRenderingParams(\n        [in] IDWriteRenderingParams *text_rendering_params\n    );\n    void GetTextRenderingParams(\n        [out] IDWriteRenderingParams **text_rendering_params\n    );\n    void SetTags(\n        [in] D2D1_TAG tag1,\n        [in] D2D1_TAG tag2\n    );\n    void GetTags(\n        [out] D2D1_TAG *tag1,\n        [out] D2D1_TAG *tag2\n    );\n    void PushLayer(\n        [in] const D2D1_LAYER_PARAMETERS *layer_parameters,\n        [in] ID2D1Layer *layer\n    );\n    void PopLayer();\n    HRESULT Flush(\n        [out] D2D1_TAG *tag1,\n        [out] D2D1_TAG *tag2\n    );\n    void SaveDrawingState(\n        [in, out] ID2D1DrawingStateBlock *state_block\n    );\n    void RestoreDrawingState(\n        [in] ID2D1DrawingStateBlock *state_block\n    );\n    void PushAxisAlignedClip(\n        [in] const D2D1_RECT_F *clip_rect,\n        [in] D2D1_ANTIALIAS_MODE antialias_mode\n    );\n    void PopAxisAlignedClip();\n    void Clear(\n        [in] const D2D1_COLOR_F *color\n    );\n    void BeginDraw();\n    HRESULT EndDraw(\n        [out] D2D1_TAG *tag1,\n        [out] D2D1_TAG *tag2\n    );\n    D2D1_PIXEL_FORMAT GetPixelFormat();\n    void SetDpi(\n        [in] float dpi_x,\n        [in] float dpi_y\n    );\n    void GetDpi(\n        [out] float *dpi_x,\n        [out] float *dpi_y\n    );\n    D2D1_SIZE_F GetSize();\n    D2D1_SIZE_U GetPixelSize();\n    UINT32 GetMaximumBitmapSize();\n    BOOL IsSupported(\n        [in] const D2D1_RENDER_TARGET_PROPERTIES *desc\n    );\n}\n\n[\n    local,\n    object,\n    uuid(2cd90695-12e2-11dc-9fed-001143a055f9)\n]\ninterface ID2D1BitmapRenderTarget : ID2D1RenderTarget\n{\n    HRESULT GetBitmap(\n        [out] ID2D1Bitmap **bitmap\n    );\n}\n\n[\n    local,\n    object,\n    uuid(2cd90698-12e2-11dc-9fed-001143a055f9)\n]\ninterface ID2D1HwndRenderTarget : ID2D1RenderTarget\n{\n    D2D1_WINDOW_STATE CheckWindowState();\n    HRESULT Resize(\n        [in] const D2D1_SIZE_U *size\n    );\n    HWND GetHwnd();\n}\n\n[\n    local,\n    object,\n    uuid(1c51bc64-de61-46fd-9899-63a5d8f03950)\n]\ninterface ID2D1DCRenderTarget : ID2D1RenderTarget\n{\n    HRESULT BindDC(\n        [in] const HDC dc,\n        [in] const RECT *rect\n    );\n}\n\n[\n    local,\n    object,\n    uuid(e0db51c3-6f77-4bae-b3d5-e47509b35838)\n]\ninterface ID2D1GdiInteropRenderTarget : IUnknown\n{\n    HRESULT GetDC(\n        [in] D2D1_DC_INITIALIZE_MODE mode,\n        [out] HDC *dc\n    );\n    HRESULT ReleaseDC(\n        [in] const RECT *update\n    );\n}\n\n[\n    local,\n    object,\n    uuid(06152247-6f50-465a-9245-118bfd3b6007)\n]\ninterface ID2D1Factory : IUnknown\n{\n    HRESULT ReloadSystemMetrics();\n    void GetDesktopDpi(\n        [out] float *dpi_x,\n        [out] float *dpi_y\n    );\n    HRESULT CreateRectangleGeometry(\n        [in] const D2D1_RECT_F *rect,\n        [out] ID2D1RectangleGeometry **geometry\n    );\n    HRESULT CreateRoundedRectangleGeometry(\n        [in] const D2D1_ROUNDED_RECT *rect,\n        [out] ID2D1RoundedRectangleGeometry **geometry\n    );\n    HRESULT CreateEllipseGeometry(\n        [in] const D2D1_ELLIPSE *ellipse,\n        [out] ID2D1EllipseGeometry **geometry\n    );\n    HRESULT CreateGeometryGroup(\n        [in] D2D1_FILL_MODE fill_mode,\n        [in, size_is(geometry_count)] ID2D1Geometry **geometries,\n        [in] UINT32 geometry_count,\n        [out] ID2D1GeometryGroup **group\n    );\n    HRESULT CreateTransformedGeometry(\n        [in] ID2D1Geometry *src_geometry,\n        [in] const D2D1_MATRIX_3X2_F *transform,\n        [out] ID2D1TransformedGeometry **transformed_geometry\n    );\n    HRESULT CreatePathGeometry(\n        [out] ID2D1PathGeometry **geometry\n    );\n    HRESULT CreateStrokeStyle(\n        [in] const D2D1_STROKE_STYLE_PROPERTIES *desc,\n        [in, size_is(dash_count)] const float *dashes,\n        [in] UINT32 dash_count,\n        [out] ID2D1StrokeStyle **stroke_style\n    );\n    HRESULT CreateDrawingStateBlock(\n        [in] const D2D1_DRAWING_STATE_DESCRIPTION *desc,\n        [in] IDWriteRenderingParams *text_rendering_params,\n        [out] ID2D1DrawingStateBlock **state_block\n    );\n    HRESULT CreateWicBitmapRenderTarget(\n        [in] IWICBitmap *target,\n        [in] const D2D1_RENDER_TARGET_PROPERTIES *desc,\n        [out] ID2D1RenderTarget **render_target\n    );\n    HRESULT CreateHwndRenderTarget(\n        [in] const D2D1_RENDER_TARGET_PROPERTIES *desc,\n        [in] const D2D1_HWND_RENDER_TARGET_PROPERTIES *hwnd_rt_desc,\n        [out] ID2D1HwndRenderTarget **render_target\n    );\n    HRESULT CreateDxgiSurfaceRenderTarget(\n        [in] IDXGISurface *surface,\n        [in] const D2D1_RENDER_TARGET_PROPERTIES *desc,\n        [out] ID2D1RenderTarget **render_target\n    );\n    HRESULT CreateDCRenderTarget(\n        [in] const D2D1_RENDER_TARGET_PROPERTIES *desc,\n        [out] ID2D1DCRenderTarget **render_target\n    );\n}\n\n[local] HRESULT __stdcall D2D1CreateFactory(D2D1_FACTORY_TYPE factory_type, REFIID iid,\n        const D2D1_FACTORY_OPTIONS *factory_options, void **factory);\n[local] BOOL __stdcall D2D1InvertMatrix(D2D1_MATRIX_3X2_F *matrix);\n[local] BOOL __stdcall D2D1IsMatrixInvertible(const D2D1_MATRIX_3X2_F *matrix);\n[local] void __stdcall D2D1MakeRotateMatrix(float angle, D2D1_POINT_2F center, D2D1_MATRIX_3X2_F *matrix);\n"
  },
  {
    "path": "wine/windows/d2d1_1.idl",
    "content": "/*\n * Copyright 2017 Lucian Poston\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"d2d1.idl\";\n\ninterface ID2D1DeviceContext;\ninterface ID2D1StrokeStyle1;\ninterface ID2D1PathGeometry1;\ninterface ID2D1GdiMetafile;\ninterface ID2D1Properties;\ninterface IPrintDocumentPackageTarget;\ninterface ID2D1PrintControl;\ninterface IWICImagingFactory;\ninterface IWICColorContext;\ninterface ID2D1ColorContext;\ninterface ID2D1Effect;\ninterface ID2D1GradientStopCollection1;\ninterface ID2D1ImageBrush;\ninterface ID2D1BitmapBrush1;\ninterface ID2D1CommandList;\n\ncpp_quote(\"#ifndef __dwrite_h__\")\n/* already defined in dwrite.h but needed for WIDL */\ntypedef struct DWRITE_GLYPH_RUN_DESCRIPTION DWRITE_GLYPH_RUN_DESCRIPTION;\ncpp_quote(\"#endif /* __dwrite_h__ */\")\n\ntypedef enum D2D1_DEVICE_CONTEXT_OPTIONS\n{\n    D2D1_DEVICE_CONTEXT_OPTIONS_NONE = 0x0,\n    D2D1_DEVICE_CONTEXT_OPTIONS_ENABLE_MULTITHREADED_OPTIMIZATIONS = 0x1,\n    D2D1_DEVICE_CONTEXT_OPTIONS_FORCE_DWORD = 0xffffffff,\n} D2D1_DEVICE_CONTEXT_OPTIONS;\n\ntypedef enum D2D1_STROKE_TRANSFORM_TYPE\n{\n    D2D1_STROKE_TRANSFORM_TYPE_NORMAL = 0x0,\n    D2D1_STROKE_TRANSFORM_TYPE_FIXED = 0x1,\n    D2D1_STROKE_TRANSFORM_TYPE_HAIRLINE = 0x2,\n    D2D1_STROKE_TRANSFORM_TYPE_FORCE_DWORD = 0xffffffff,\n} D2D1_STROKE_TRANSFORM_TYPE;\n\ntypedef enum D2D1_PRIMITIVE_BLEND\n{\n    D2D1_PRIMITIVE_BLEND_SOURCE_OVER = 0x0,\n    D2D1_PRIMITIVE_BLEND_COPY = 0x1,\n    D2D1_PRIMITIVE_BLEND_MIN = 0x2,\n    D2D1_PRIMITIVE_BLEND_ADD = 0x3,\n    D2D1_PRIMITIVE_BLEND_MAX = 0x4,\n    D2D1_PRIMITIVE_BLEND_FORCE_DWORD = 0xffffffff,\n} D2D1_PRIMITIVE_BLEND;\n\ntypedef enum D2D1_UNIT_MODE\n{\n    D2D1_UNIT_MODE_DIPS = 0x0,\n    D2D1_UNIT_MODE_PIXELS = 0x1,\n    D2D1_UNIT_MODE_FORCE_DWORD = 0xffffffff,\n} D2D1_UNIT_MODE;\n\ntypedef enum D2D1_PRINT_FONT_SUBSET_MODE\n{\n    D2D1_PRINT_FONT_SUBSET_MODE_DEFAULT = 0x0,\n    D2D1_PRINT_FONT_SUBSET_MODE_EACHPAGE = 0x1,\n    D2D1_PRINT_FONT_SUBSET_MODE_NONE = 0x2,\n    D2D1_PRINT_FONT_SUBSET_MODE_FORCE_DWORD = 0xffffffff,\n} D2D1_PRINT_FONT_SUBSET_MODE;\n\ntypedef enum D2D1_COLOR_SPACE\n{\n    D2D1_COLOR_SPACE_CUSTOM = 0x0,\n    D2D1_COLOR_SPACE_SRGB = 0x1,\n    D2D1_COLOR_SPACE_SCRGB = 0x2,\n    D2D1_COLOR_SPACE_FORCE_DWORD = 0xffffffff,\n} D2D1_COLOR_SPACE;\n\ntypedef enum D2D1_BITMAP_OPTIONS\n{\n    D2D1_BITMAP_OPTIONS_NONE = 0x0,\n    D2D1_BITMAP_OPTIONS_TARGET = 0x1,\n    D2D1_BITMAP_OPTIONS_CANNOT_DRAW = 0x2,\n    D2D1_BITMAP_OPTIONS_CPU_READ = 0x4,\n    D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE = 0x8,\n    D2D1_BITMAP_OPTIONS_FORCE_DWORD = 0xffffffff,\n} D2D1_BITMAP_OPTIONS;\n\ntypedef enum D2D1_MAP_OPTIONS\n{\n    D2D1_MAP_OPTIONS_NONE = 0x0,\n    D2D1_MAP_OPTIONS_READ = 0x1,\n    D2D1_MAP_OPTIONS_WRITE = 0x2,\n    D2D1_MAP_OPTIONS_DISCARD = 0x4,\n    D2D1_MAP_OPTIONS_FORCE_DWORD = 0xffffffff,\n} D2D1_MAP_OPTIONS;\n\ntypedef enum D2D1_BUFFER_PRECISION\n{\n    D2D1_BUFFER_PRECISION_UNKNOWN = 0x0,\n    D2D1_BUFFER_PRECISION_8BPC_UNORM = 0x1,\n    D2D1_BUFFER_PRECISION_8BPC_UNORM_SRGB = 0x2,\n    D2D1_BUFFER_PRECISION_16BPC_UNORM = 0x3,\n    D2D1_BUFFER_PRECISION_16BPC_FLOAT = 0x4,\n    D2D1_BUFFER_PRECISION_32BPC_FLOAT = 0x5,\n    D2D1_BUFFER_PRECISION_FORCE_DWORD = 0xffffffff,\n} D2D1_BUFFER_PRECISION;\n\ntypedef enum D2D1_COLOR_INTERPOLATION_MODE\n{\n    D2D1_COLOR_INTERPOLATION_MODE_STRAIGHT = 0x0,\n    D2D1_COLOR_INTERPOLATION_MODE_PREMULTIPLIED = 0x1,\n    D2D1_COLOR_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff,\n} D2D1_COLOR_INTERPOLATION_MODE;\n\ntypedef enum D2D1_INTERPOLATION_MODE\n{\n    D2D1_INTERPOLATION_MODE_NEAREST_NEIGHBOR = D2D1_INTERPOLATION_MODE_DEFINITION_NEAREST_NEIGHBOR,\n    D2D1_INTERPOLATION_MODE_LINEAR = D2D1_INTERPOLATION_MODE_DEFINITION_LINEAR,\n    D2D1_INTERPOLATION_MODE_CUBIC = D2D1_INTERPOLATION_MODE_DEFINITION_CUBIC,\n    D2D1_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR = D2D1_INTERPOLATION_MODE_DEFINITION_MULTI_SAMPLE_LINEAR,\n    D2D1_INTERPOLATION_MODE_ANISOTROPIC = D2D1_INTERPOLATION_MODE_DEFINITION_ANISOTROPIC,\n    D2D1_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC = D2D1_INTERPOLATION_MODE_DEFINITION_HIGH_QUALITY_CUBIC,\n    D2D1_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff,\n} D2D1_INTERPOLATION_MODE;\n\ntypedef enum D2D1_COMPOSITE_MODE\n{\n    D2D1_COMPOSITE_MODE_SOURCE_OVER = 0x0,\n    D2D1_COMPOSITE_MODE_DESTINATION_OVER = 0x1,\n    D2D1_COMPOSITE_MODE_SOURCE_IN = 0x2,\n    D2D1_COMPOSITE_MODE_DESTINATION_IN = 0x3,\n    D2D1_COMPOSITE_MODE_SOURCE_OUT = 0x4,\n    D2D1_COMPOSITE_MODE_DESTINATION_OUT = 0x5,\n    D2D1_COMPOSITE_MODE_SOURCE_ATOP = 0x6,\n    D2D1_COMPOSITE_MODE_DESTINATION_ATOP = 0x7,\n    D2D1_COMPOSITE_MODE_XOR = 0x8,\n    D2D1_COMPOSITE_MODE_PLUS = 0x9,\n    D2D1_COMPOSITE_MODE_SOURCE_COPY = 0xa,\n    D2D1_COMPOSITE_MODE_BOUNDED_SOURCE_COPY = 0xb,\n    D2D1_COMPOSITE_MODE_MASK_INVERT = 0xc,\n    D2D1_COMPOSITE_MODE_FORCE_DWORD = 0xffffffff,\n} D2D1_COMPOSITE_MODE;\n\ntypedef enum D2D1_LAYER_OPTIONS1\n{\n    D2D1_LAYER_OPTIONS1_NONE = 0x0,\n    D2D1_LAYER_OPTIONS1_INITIALIZE_FROM_BACKGROUND = 0x1,\n    D2D1_LAYER_OPTIONS1_IGNORE_ALPHA = 0x2,\n    D2D1_LAYER_OPTIONS1_FORCE_DWORD = 0xffffffff,\n} D2D1_LAYER_OPTIONS1;\n\ntypedef struct D2D1_PROPERTY_BINDING D2D1_PROPERTY_BINDING;\ntypedef D2D_MATRIX_4X4_F D2D1_MATRIX_4X4_F;\n\ntypedef enum D2D1_PROPERTY_TYPE\n{\n    D2D1_PROPERTY_TYPE_UNKNOWN = 0x0,\n    D2D1_PROPERTY_TYPE_STRING = 0x1,\n    D2D1_PROPERTY_TYPE_BOOL = 0x2,\n    D2D1_PROPERTY_TYPE_UINT32 = 0x3,\n    D2D1_PROPERTY_TYPE_INT32 = 0x4,\n    D2D1_PROPERTY_TYPE_FLOAT = 0x5,\n    D2D1_PROPERTY_TYPE_VECTOR2 = 0x6,\n    D2D1_PROPERTY_TYPE_VECTOR3 = 0x7,\n    D2D1_PROPERTY_TYPE_VECTOR4 = 0x8,\n    D2D1_PROPERTY_TYPE_BLOB = 0x9,\n    D2D1_PROPERTY_TYPE_IUNKNOWN = 0xa,\n    D2D1_PROPERTY_TYPE_ENUM = 0xb,\n    D2D1_PROPERTY_TYPE_ARRAY = 0xc,\n    D2D1_PROPERTY_TYPE_CLSID = 0xd,\n    D2D1_PROPERTY_TYPE_MATRIX_3X2 = 0xe,\n    D2D1_PROPERTY_TYPE_MATRIX_4X3 = 0xf,\n    D2D1_PROPERTY_TYPE_MATRIX_4X4 = 0x10,\n    D2D1_PROPERTY_TYPE_MATRIX_5X4 = 0x11,\n    D2D1_PROPERTY_TYPE_COLOR_CONTEXT = 0x12,\n    D2D1_PROPERTY_TYPE_FORCE_DWORD = 0xffffffff,\n} D2D1_PROPERTY_TYPE;\n\ntypedef struct D2D1_STROKE_STYLE_PROPERTIES1\n{\n    D2D1_CAP_STYLE startCap;\n    D2D1_CAP_STYLE endCap;\n    D2D1_CAP_STYLE dashCap;\n    D2D1_LINE_JOIN lineJoin;\n    float miterLimit;\n    D2D1_DASH_STYLE dashStyle;\n    float dashOffset;\n    D2D1_STROKE_TRANSFORM_TYPE transformType;\n} D2D1_STROKE_STYLE_PROPERTIES1;\n\ntypedef struct D2D1_DRAWING_STATE_DESCRIPTION1\n{\n    D2D1_ANTIALIAS_MODE antialiasMode;\n    D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode;\n    D2D1_TAG tag1;\n    D2D1_TAG tag2;\n    D2D1_MATRIX_3X2_F transform;\n    D2D1_PRIMITIVE_BLEND primitiveBlend;\n    D2D1_UNIT_MODE unitMode;\n} D2D1_DRAWING_STATE_DESCRIPTION1;\n\ntypedef struct D2D1_PRINT_CONTROL_PROPERTIES\n{\n    D2D1_PRINT_FONT_SUBSET_MODE fontSubset;\n    float rasterDPI;\n    D2D1_COLOR_SPACE colorSpace;\n} D2D1_PRINT_CONTROL_PROPERTIES;\n\ntypedef struct D2D1_MAPPED_RECT\n{\n    UINT32 pitch;\n    BYTE *bits;\n} D2D1_MAPPED_RECT;\n\ntypedef struct D2D1_BITMAP_PROPERTIES1\n{\n    D2D1_PIXEL_FORMAT pixelFormat;\n    float dpiX;\n    float dpiY;\n    D2D1_BITMAP_OPTIONS bitmapOptions;\n    ID2D1ColorContext *colorContext;\n} D2D1_BITMAP_PROPERTIES1;\n\ntypedef struct D2D1_IMAGE_BRUSH_PROPERTIES\n{\n    D2D1_RECT_F sourceRectangle;\n    D2D1_EXTEND_MODE extendModeX;\n    D2D1_EXTEND_MODE extendModeY;\n    D2D1_INTERPOLATION_MODE interpolationMode;\n} D2D1_IMAGE_BRUSH_PROPERTIES;\n\ntypedef struct D2D1_BITMAP_BRUSH_PROPERTIES1\n{\n    D2D1_EXTEND_MODE extendModeX;\n    D2D1_EXTEND_MODE extendModeY;\n    D2D1_INTERPOLATION_MODE interpolationMode;\n} D2D1_BITMAP_BRUSH_PROPERTIES1;\n\ntypedef struct D2D1_RENDERING_CONTROLS\n{\n    D2D1_BUFFER_PRECISION bufferPrecision;\n    D2D1_SIZE_U tileSize;\n} D2D1_RENDERING_CONTROLS;\n\ntypedef struct D2D1_LAYER_PARAMETERS1\n{\n    D2D1_RECT_F contentBounds;\n    ID2D1Geometry *geometricMask;\n    D2D1_ANTIALIAS_MODE maskAntialiasMode;\n    D2D1_MATRIX_3X2_F maskTransform;\n    float opacity;\n    ID2D1Brush *opacityBrush;\n    D2D1_LAYER_OPTIONS1 layerOptions;\n} D2D1_LAYER_PARAMETERS1;\n\ntypedef struct D2D1_EFFECT_INPUT_DESCRIPTION\n{\n    ID2D1Effect *effect;\n    UINT32 inputIndex;\n    D2D1_RECT_F inputRectangle;\n} D2D1_EFFECT_INPUT_DESCRIPTION;\n\ntypedef HRESULT (__stdcall *PD2D1_EFFECT_FACTORY)(IUnknown **effect);\n\n[\n    object,\n    uuid(483473d7-cd46-4f9d-9d3a-3112aa80159d),\n    local,\n]\ninterface ID2D1Properties : IUnknown\n{\n    UINT32 GetPropertyCount();\n    HRESULT GetPropertyName(\n        [in] UINT32 index,\n        [out] WCHAR *name,\n        [in] UINT32 name_count\n    );\n    UINT32 GetPropertyNameLength(\n        [in] UINT32 index\n    );\n    D2D1_PROPERTY_TYPE GetType(\n        [in] UINT32 index\n    );\n    UINT32 GetPropertyIndex(\n        [in] const WCHAR *name\n    );\n    HRESULT SetValueByName(\n        [in] const WCHAR *name,\n        [in] D2D1_PROPERTY_TYPE type,\n        [in] const BYTE *value,\n        [in] UINT32 value_size\n    );\n    HRESULT SetValue(\n        [in] UINT32 index,\n        [in] D2D1_PROPERTY_TYPE type,\n        [in] const BYTE *value,\n        [in] UINT32 value_size\n    );\n    HRESULT GetValueByName(\n        [in] const WCHAR *name,\n        [in] D2D1_PROPERTY_TYPE type,\n        [out] BYTE *value,\n        [in] UINT32 value_size\n    );\n    HRESULT GetValue(\n        [in] UINT32 index,\n        [in] D2D1_PROPERTY_TYPE type,\n        [out] BYTE *value,\n        [in] UINT32 value_size\n    );\n    UINT32 GetValueSize(\n        [in] UINT32 index\n    );\n    HRESULT GetSubProperties(\n        [in] UINT32 index,\n        [out] ID2D1Properties **props\n    );\n}\n\n[\n    object,\n    uuid(28211a43-7d89-476f-8181-2d6159b220ad),\n    local,\n]\ninterface ID2D1Effect : ID2D1Properties\n{\n    void SetInput(\n        [in] UINT32 index,\n        [in] ID2D1Image *input,\n        [in] BOOL invalidate\n    );\n    HRESULT SetInputCount(\n        [in] UINT32 count\n    );\n    void GetInput(\n        [in] UINT32 index,\n        [out] ID2D1Image **input\n    );\n    UINT32 GetInputCount();\n    void GetOutput(\n        [out] ID2D1Image **output\n    );\n}\n\n[\n    object,\n    uuid(689f1f85-c72e-4e33-8f19-85754efd5ace),\n    local,\n]\ninterface ID2D1DrawingStateBlock1 : ID2D1DrawingStateBlock\n{\n    void GetDescription(\n        [out] D2D1_DRAWING_STATE_DESCRIPTION1 *desc\n    );\n    void SetDescription(\n        [in] const D2D1_DRAWING_STATE_DESCRIPTION1 *desc\n    );\n}\n\n[\n    object,\n    uuid(a898a84c-3873-4588-b08b-ebbf978df041),\n    local,\n]\ninterface ID2D1Bitmap1 : ID2D1Bitmap\n{\n    void GetColorContext(\n        [out] ID2D1ColorContext **context\n    );\n    D2D1_BITMAP_OPTIONS GetOptions();\n    HRESULT GetSurface(\n        [out] IDXGISurface **surface\n    );\n    HRESULT Map(\n        [in] D2D1_MAP_OPTIONS options,\n        [out] D2D1_MAPPED_RECT *mapped_rect\n    );\n    HRESULT Unmap();\n}\n\n[\n    object,\n    uuid(41343a53-e41a-49a2-91cd-21793bbb62e5),\n    local,\n]\ninterface ID2D1BitmapBrush1 : ID2D1BitmapBrush\n{\n    void SetInterpolationMode1(\n        [in] D2D1_INTERPOLATION_MODE mode\n    );\n    D2D1_INTERPOLATION_MODE GetInterpolationMode1();\n}\n\n[\n    object,\n    uuid(47dd575d-ac05-4cdd-8049-9b02cd16f44c),\n    local,\n]\ninterface ID2D1Device : ID2D1Resource\n{\n    HRESULT CreateDeviceContext(\n        [in] D2D1_DEVICE_CONTEXT_OPTIONS options,\n        [out] ID2D1DeviceContext **context\n    );\n    HRESULT CreatePrintControl(\n        [in] IWICImagingFactory *wic_factory,\n        [in] IPrintDocumentPackageTarget *document_target,\n        [in] const D2D1_PRINT_CONTROL_PROPERTIES *desc,\n        [out] ID2D1PrintControl **print_control\n    );\n    void SetMaximumTextureMemory(\n        [in] UINT64 max_texture_memory\n    );\n    UINT64 GetMaximumTextureMemory();\n    HRESULT ClearResources(\n        [in, defaultvalue(0)] UINT msec_since_use\n    );\n}\n\n[\n    object,\n    uuid(e8f7fe7a-191c-466d-ad95-975678bda998),\n    local,\n]\ninterface ID2D1DeviceContext : ID2D1RenderTarget\n{\n    HRESULT CreateBitmap(\n        [in] D2D1_SIZE_U size,\n        [in] const void *src_data,\n        [in] UINT32 pitch,\n        [in] const D2D1_BITMAP_PROPERTIES1 *desc,\n        [out] ID2D1Bitmap1 **bitmap\n    );\n    HRESULT CreateBitmapFromWicBitmap(\n        [in] IWICBitmapSource *bitmap_source,\n        [in] const D2D1_BITMAP_PROPERTIES1 *desc,\n        [out] ID2D1Bitmap1 **bitmap\n    );\n    HRESULT CreateColorContext(\n        [in] D2D1_COLOR_SPACE space,\n        [in] const BYTE *profile,\n        [in] UINT32 profile_size,\n        [out] ID2D1ColorContext **color_context\n    );\n    HRESULT CreateColorContextFromFilename(\n        [in] const WCHAR *filename,\n        [out] ID2D1ColorContext **color_context\n    );\n    HRESULT CreateColorContextFromWicColorContext(\n        [in] IWICColorContext *wic_color_context,\n        [out] ID2D1ColorContext **color_context\n    );\n    HRESULT CreateBitmapFromDxgiSurface(\n        [in] IDXGISurface *surface,\n        [in] const D2D1_BITMAP_PROPERTIES1 *desc,\n        [out] ID2D1Bitmap1 **bitmap\n    );\n    HRESULT CreateEffect(\n        [in] REFCLSID effect_id,\n        [out] ID2D1Effect **effect\n    );\n    HRESULT CreateGradientStopCollection(\n        [in] const D2D1_GRADIENT_STOP *stops,\n        [in] UINT32 stop_count,\n        [in] D2D1_COLOR_SPACE preinterpolation_space,\n        [in] D2D1_COLOR_SPACE postinterpolation_space,\n        [in] D2D1_BUFFER_PRECISION buffer_precision,\n        [in] D2D1_EXTEND_MODE extend_mode,\n        [in] D2D1_COLOR_INTERPOLATION_MODE color_interpolation_mode,\n        [out] ID2D1GradientStopCollection1 **gradient\n    );\n    HRESULT CreateImageBrush(\n        [in] ID2D1Image *image,\n        [in] const D2D1_IMAGE_BRUSH_PROPERTIES *image_brush_desc,\n        [in] const D2D1_BRUSH_PROPERTIES *brush_desc,\n        [out] ID2D1ImageBrush **brush\n    );\n    HRESULT CreateBitmapBrush(\n        [in] ID2D1Bitmap *bitmap,\n        [in] const D2D1_BITMAP_BRUSH_PROPERTIES1 *bitmap_brush_desc,\n        [in] const D2D1_BRUSH_PROPERTIES *brush_desc,\n        [out] ID2D1BitmapBrush1 **bitmap_brush\n    );\n    HRESULT CreateCommandList(\n        [out] ID2D1CommandList **command_list\n    );\n    BOOL IsDxgiFormatSupported(\n        [in] DXGI_FORMAT format\n    );\n    BOOL IsBufferPrecisionSupported(\n        [in] D2D1_BUFFER_PRECISION buffer_precision\n    );\n    void GetImageLocalBounds(\n        [in] ID2D1Image *image,\n        [out] D2D1_RECT_F *local_bounds\n    );\n    HRESULT GetImageWorldBounds(\n        [in] ID2D1Image *image,\n        [out] D2D1_RECT_F *world_bounds\n    );\n    HRESULT GetGlyphRunWorldBounds(\n        [in] D2D1_POINT_2F baseline_origin,\n        [in] const DWRITE_GLYPH_RUN *glyph_run,\n        [in] DWRITE_MEASURING_MODE measuring_mode,\n        [out] D2D1_RECT_F *bounds\n    );\n    void GetDevice(\n        [out] ID2D1Device **device\n    );\n    void SetTarget(\n        [in] ID2D1Image *target\n    );\n    void GetTarget(\n        [out] ID2D1Image **target\n    );\n    void SetRenderingControls(\n        [in] const D2D1_RENDERING_CONTROLS *rendering_controls\n    );\n    void GetRenderingControls(\n        [out] D2D1_RENDERING_CONTROLS *rendering_controls\n    );\n    void SetPrimitiveBlend(\n        [in] D2D1_PRIMITIVE_BLEND primitive_blend\n    );\n    D2D1_PRIMITIVE_BLEND GetPrimitiveBlend();\n    void SetUnitMode(\n        [in] D2D1_UNIT_MODE unit_mode\n    );\n    D2D1_UNIT_MODE GetUnitMode();\n    void DrawGlyphRun(\n        [in] D2D1_POINT_2F baseline_origin,\n        [in] const DWRITE_GLYPH_RUN *glyph_run,\n        [in] const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,\n        [in] ID2D1Brush *brush,\n        [in] DWRITE_MEASURING_MODE measuring_mode\n    );\n    void DrawImage(\n        [in] ID2D1Image *image,\n        [in] const D2D1_POINT_2F *target_offset,\n        [in] const D2D1_RECT_F *image_rect,\n        [in] D2D1_INTERPOLATION_MODE interpolation_mode,\n        [in] D2D1_COMPOSITE_MODE composite_mode\n    );\n    void DrawGdiMetafile(\n        [in] ID2D1GdiMetafile *metafile,\n        [in] const D2D1_POINT_2F *target_offset\n    );\n    void DrawBitmap(\n        [in] ID2D1Bitmap *bitmap,\n        [in] const D2D1_RECT_F *dst_rect,\n        [in] float opacity,\n        [in] D2D1_INTERPOLATION_MODE interpolation_mode,\n        [in] const D2D1_RECT_F *src_rect,\n        [in] const D2D1_MATRIX_4X4_F *perspective_transform\n    );\n    void PushLayer(\n        [in] const D2D1_LAYER_PARAMETERS1 *layer_parameters,\n        [in] ID2D1Layer *layer\n    );\n    HRESULT InvalidateEffectInputRectangle(\n        [in] ID2D1Effect *effect,\n        [in] UINT32 input,\n        [in] const D2D1_RECT_F *input_rect\n    );\n    HRESULT GetEffectInvalidRectangleCount(\n        [in] ID2D1Effect *effect,\n        [out] UINT32 *rect_count\n    );\n    HRESULT GetEffectInvalidRectangles(\n        [in] ID2D1Effect *effect,\n        [out] D2D1_RECT_F *rectangles,\n        [in] UINT32 rect_count\n    );\n    HRESULT GetEffectRequiredInputRectangles(\n        [in] ID2D1Effect *effect,\n        [in] const D2D1_RECT_F *image_rect,\n        [in] const D2D1_EFFECT_INPUT_DESCRIPTION *desc,\n        [out] D2D1_RECT_F *input_rect,\n        [in] UINT32 input_count\n    );\n    void FillOpacityMask(\n        [in] ID2D1Bitmap *mask,\n        [in] ID2D1Brush *brush,\n        [in] const D2D1_RECT_F *dst_rect,\n        [in] const D2D1_RECT_F *src_rect\n    );\n}\n\n[\n    object,\n    uuid(bb12d362-daee-4b9a-aa1d-14ba401cfa1f),\n    local,\n]\ninterface ID2D1Factory1 : ID2D1Factory\n{\n    HRESULT CreateDevice(\n        [in] IDXGIDevice *dxgi_device,\n        [out] ID2D1Device **device\n    );\n    HRESULT CreateStrokeStyle(\n        [in] const D2D1_STROKE_STYLE_PROPERTIES1 *desc,\n        [in, size_is(dash_count)] const float *dashes,\n        [in] UINT32 dash_count,\n        [out] ID2D1StrokeStyle1 **stroke_style\n    );\n    HRESULT CreatePathGeometry(\n        [out] ID2D1PathGeometry1 **geometry\n    );\n    HRESULT CreateDrawingStateBlock(\n        [in] const D2D1_DRAWING_STATE_DESCRIPTION1 *desc,\n        [in] IDWriteRenderingParams *text_rendering_params,\n        [out] ID2D1DrawingStateBlock1 **state_block\n    );\n    HRESULT CreateGdiMetafile(\n        [in] IStream *stream,\n        [out] ID2D1GdiMetafile **metafile\n    );\n    HRESULT RegisterEffectFromStream(\n        [in] REFCLSID effect_id,\n        [in] IStream *property_xml,\n        [in, size_is(binding_count)] const D2D1_PROPERTY_BINDING *bindings,\n        [in] UINT32 binding_count,\n        [in] PD2D1_EFFECT_FACTORY effect_factory\n    );\n    HRESULT RegisterEffectFromString(\n        [in] REFCLSID effect_id,\n        [in] const WCHAR *property_xml,\n        [in, size_is(binding_count)] const D2D1_PROPERTY_BINDING *bindings,\n        [in] UINT32 binding_count,\n        [in] PD2D1_EFFECT_FACTORY effect_factory\n    );\n    HRESULT UnregisterEffect(\n        [in] REFCLSID effect_id\n    );\n    HRESULT GetRegisteredEffects(\n        [out, size_is(effect_count)] CLSID *effects,\n        [in] UINT32 effect_count,\n        [out] UINT32 *returned,\n        [out] UINT32 *registered\n    );\n    HRESULT GetEffectProperties(\n        [in] REFCLSID effect_id,\n        [out] ID2D1Properties **props\n    );\n}\n"
  },
  {
    "path": "wine/windows/d2dbasetypes.h",
    "content": "/*\n * Copyright 2013 Nikolay Sivov for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef D3DCOLORVALUE_DEFINED\ntypedef struct D3DCOLORVALUE\n{\n    float r;\n    float g;\n    float b;\n    float a;\n} D3DCOLORVALUE;\n#define D3DCOLORVALUE_DEFINED\n#endif\n\ntypedef D3DCOLORVALUE D2D_COLOR_F;\n\ntypedef struct D2D_MATRIX_3X2_F\n{\n    float _11;\n    float _12;\n    float _21;\n    float _22;\n    float _31;\n    float _32;\n} D2D_MATRIX_3X2_F;\n\ntypedef struct D2D_RECT_F\n{\n    float left;\n    float top;\n    float right;\n    float bottom;\n} D2D_RECT_F;\n\ntypedef struct D2D_SIZE_F\n{\n    float width;\n    float height;\n} D2D_SIZE_F;\n\ntypedef struct D2D_POINT_2U\n{\n    UINT32 x;\n    UINT32 y;\n} D2D_POINT_2U;\n\ntypedef struct D2D_RECT_U\n{\n    UINT32 left;\n    UINT32 top;\n    UINT32 right;\n    UINT32 bottom;\n} D2D_RECT_U;\n"
  },
  {
    "path": "wine/windows/d2derr.h",
    "content": "/*\n * Copyright 2014 Henri Verbeet for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_D2DERR_H\n#define __WINE_D2DERR_H\n\n#define D2DERR_FILE_NOT_FOUND           HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)\n#define D2DERR_INSUFFICIENT_BUFFER      HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)\n#define D2DERR_UNSUPPORTED_PIXEL_FORMAT WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT\n\n#endif /* __WINE_D2DERR_H */\n"
  },
  {
    "path": "wine/windows/d3d.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_D3D_H\n#define __WINE_D3D_H\n\n#include <stdlib.h>\n\n#define COM_NO_WINDOWS_H\n#include <objbase.h>\n#include <d3dtypes.h> /* must precede d3dcaps.h */\n#include <d3dcaps.h>\n\n/*****************************************************************************\n * Predeclare the interfaces\n */\nDEFINE_GUID(IID_IDirect3D,              0x3BBA0080,0x2421,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56);\nDEFINE_GUID(IID_IDirect3D2,             0x6aae1ec1,0x662a,0x11d0,0x88,0x9d,0x00,0xaa,0x00,0xbb,0xb7,0x6a);\nDEFINE_GUID(IID_IDirect3D3,             0xbb223240,0xe72b,0x11d0,0xa9,0xb4,0x00,0xaa,0x00,0xc0,0x99,0x3e);\nDEFINE_GUID(IID_IDirect3D7,             0xf5049e77,0x4861,0x11d2,0xa4,0x07,0x00,0xa0,0xc9,0x06,0x29,0xa8);\n\nDEFINE_GUID(IID_IDirect3DRampDevice,\t0xF2086B20,0x259F,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56);\nDEFINE_GUID(IID_IDirect3DRGBDevice,\t0xA4665C60,0x2673,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56);\nDEFINE_GUID(IID_IDirect3DHALDevice,\t0x84E63dE0,0x46AA,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E);\nDEFINE_GUID(IID_IDirect3DMMXDevice,\t0x881949a1,0xd6f3,0x11d0,0x89,0xab,0x00,0xa0,0xc9,0x05,0x41,0x29);\nDEFINE_GUID(IID_IDirect3DRefDevice,     0x50936643,0x13e9,0x11d1,0x89,0xaa,0x00,0xa0,0xc9,0x05,0x41,0x29);\nDEFINE_GUID(IID_IDirect3DTnLHalDevice,  0xf5049e78,0x4861,0x11d2,0xa4,0x07,0x00,0xa0,0xc9,0x06,0x29,0xa8);\nDEFINE_GUID(IID_IDirect3DNullDevice,    0x8767df22,0xbacc,0x11d1,0x89,0x69,0x00,0xa0,0xc9,0x06,0x29,0xa8);\n\nDEFINE_GUID(IID_IDirect3DDevice,\t0x64108800,0x957d,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29);\nDEFINE_GUID(IID_IDirect3DDevice2,\t0x93281501,0x8CF8,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29);\nDEFINE_GUID(IID_IDirect3DDevice3,       0xb0ab3b60,0x33d7,0x11d1,0xa9,0x81,0x00,0xc0,0x4f,0xd7,0xb1,0x74);\nDEFINE_GUID(IID_IDirect3DDevice7,       0xf5049e79,0x4861,0x11d2,0xa4,0x07,0x00,0xa0,0xc9,0x06,0x29,0xa8);\n\nDEFINE_GUID(IID_IDirect3DTexture,\t0x2CDCD9E0,0x25A0,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56);\nDEFINE_GUID(IID_IDirect3DTexture2,\t0x93281502,0x8CF8,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29);\n\nDEFINE_GUID(IID_IDirect3DLight,\t\t0x4417C142,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E);\n\nDEFINE_GUID(IID_IDirect3DMaterial,\t0x4417C144,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E);\nDEFINE_GUID(IID_IDirect3DMaterial2,\t0x93281503,0x8CF8,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29);\nDEFINE_GUID(IID_IDirect3DMaterial3,     0xca9c46f4,0xd3c5,0x11d1,0xb7,0x5a,0x00,0x60,0x08,0x52,0xb3,0x12);\n\nDEFINE_GUID(IID_IDirect3DExecuteBuffer,\t0x4417C145,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E);\n\nDEFINE_GUID(IID_IDirect3DViewport,\t0x4417C146,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E);\nDEFINE_GUID(IID_IDirect3DViewport2,\t0x93281500,0x8CF8,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29);\nDEFINE_GUID(IID_IDirect3DViewport3,     0xb0ab3b61,0x33d7,0x11d1,0xa9,0x81,0x00,0xc0,0x4f,0xd7,0xb1,0x74);\n\nDEFINE_GUID(IID_IDirect3DVertexBuffer,  0x7a503555,0x4a83,0x11d1,0xa5,0xdb,0x00,0xa0,0xc9,0x03,0x67,0xf8);\nDEFINE_GUID(IID_IDirect3DVertexBuffer7, 0xf5049e7d,0x4861,0x11d2,0xa4,0x07,0x00,0xa0,0xc9,0x06,0x29,0xa8);\n\n\ntypedef struct IDirect3D *LPDIRECT3D;\ntypedef struct IDirect3D2 *LPDIRECT3D2;\ntypedef struct IDirect3D3 *LPDIRECT3D3;\ntypedef struct IDirect3D7 *LPDIRECT3D7;\n\ntypedef struct IDirect3DLight *LPDIRECT3DLIGHT;\n\ntypedef struct IDirect3DDevice *LPDIRECT3DDEVICE;\ntypedef struct IDirect3DDevice2 *LPDIRECT3DDEVICE2;\ntypedef struct IDirect3DDevice3 *LPDIRECT3DDEVICE3;\ntypedef struct IDirect3DDevice7 *LPDIRECT3DDEVICE7;\n\ntypedef struct IDirect3DViewport *LPDIRECT3DVIEWPORT;\ntypedef struct IDirect3DViewport2 *LPDIRECT3DVIEWPORT2;\ntypedef struct IDirect3DViewport3 *LPDIRECT3DVIEWPORT3;\n\ntypedef struct IDirect3DMaterial *LPDIRECT3DMATERIAL;\ntypedef struct IDirect3DMaterial2 *LPDIRECT3DMATERIAL2;\ntypedef struct IDirect3DMaterial3 *LPDIRECT3DMATERIAL3;\n\ntypedef struct IDirect3DTexture *LPDIRECT3DTEXTURE;\ntypedef struct IDirect3DTexture2 *LPDIRECT3DTEXTURE2;\n\ntypedef struct IDirect3DExecuteBuffer *LPDIRECT3DEXECUTEBUFFER;\n\ntypedef struct IDirect3DVertexBuffer *LPDIRECT3DVERTEXBUFFER;\ntypedef struct IDirect3DVertexBuffer7 *LPDIRECT3DVERTEXBUFFER7;\n\n/* ********************************************************************\n   Error Codes\n   ******************************************************************** */\n#define D3D_OK                          DD_OK\n#define D3DERR_BADMAJORVERSION          MAKE_DDHRESULT(700)\n#define D3DERR_BADMINORVERSION          MAKE_DDHRESULT(701)\n#define D3DERR_INVALID_DEVICE           MAKE_DDHRESULT(705)\n#define D3DERR_INITFAILED               MAKE_DDHRESULT(706)\n#define D3DERR_DEVICEAGGREGATED         MAKE_DDHRESULT(707)\n#define D3DERR_EXECUTE_CREATE_FAILED    MAKE_DDHRESULT(710)\n#define D3DERR_EXECUTE_DESTROY_FAILED   MAKE_DDHRESULT(711)\n#define D3DERR_EXECUTE_LOCK_FAILED      MAKE_DDHRESULT(712)\n#define D3DERR_EXECUTE_UNLOCK_FAILED    MAKE_DDHRESULT(713)\n#define D3DERR_EXECUTE_LOCKED           MAKE_DDHRESULT(714)\n#define D3DERR_EXECUTE_NOT_LOCKED       MAKE_DDHRESULT(715)\n#define D3DERR_EXECUTE_FAILED           MAKE_DDHRESULT(716)\n#define D3DERR_EXECUTE_CLIPPED_FAILED   MAKE_DDHRESULT(717)\n#define D3DERR_TEXTURE_NO_SUPPORT       MAKE_DDHRESULT(720)\n#define D3DERR_TEXTURE_CREATE_FAILED    MAKE_DDHRESULT(721)\n#define D3DERR_TEXTURE_DESTROY_FAILED   MAKE_DDHRESULT(722)\n#define D3DERR_TEXTURE_LOCK_FAILED      MAKE_DDHRESULT(723)\n#define D3DERR_TEXTURE_UNLOCK_FAILED    MAKE_DDHRESULT(724)\n#define D3DERR_TEXTURE_LOAD_FAILED      MAKE_DDHRESULT(725)\n#define D3DERR_TEXTURE_SWAP_FAILED      MAKE_DDHRESULT(726)\n#define D3DERR_TEXTURE_LOCKED           MAKE_DDHRESULT(727)\n#define D3DERR_TEXTURE_NOT_LOCKED       MAKE_DDHRESULT(728)\n#define D3DERR_TEXTURE_GETSURF_FAILED   MAKE_DDHRESULT(729)\n#define D3DERR_MATRIX_CREATE_FAILED     MAKE_DDHRESULT(730)\n#define D3DERR_MATRIX_DESTROY_FAILED    MAKE_DDHRESULT(731)\n#define D3DERR_MATRIX_SETDATA_FAILED    MAKE_DDHRESULT(732)\n#define D3DERR_MATRIX_GETDATA_FAILED    MAKE_DDHRESULT(733)\n#define D3DERR_SETVIEWPORTDATA_FAILED   MAKE_DDHRESULT(734)\n#define D3DERR_INVALIDCURRENTVIEWPORT   MAKE_DDHRESULT(735)\n#define D3DERR_INVALIDPRIMITIVETYPE     MAKE_DDHRESULT(736)\n#define D3DERR_INVALIDVERTEXTYPE        MAKE_DDHRESULT(737)\n#define D3DERR_TEXTURE_BADSIZE          MAKE_DDHRESULT(738)\n#define D3DERR_INVALIDRAMPTEXTURE       MAKE_DDHRESULT(739)\n#define D3DERR_MATERIAL_CREATE_FAILED   MAKE_DDHRESULT(740)\n#define D3DERR_MATERIAL_DESTROY_FAILED  MAKE_DDHRESULT(741)\n#define D3DERR_MATERIAL_SETDATA_FAILED  MAKE_DDHRESULT(742)\n#define D3DERR_MATERIAL_GETDATA_FAILED  MAKE_DDHRESULT(743)\n#define D3DERR_INVALIDPALETTE           MAKE_DDHRESULT(744)\n#define D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY MAKE_DDHRESULT(745)\n#define D3DERR_ZBUFF_NEEDS_VIDEOMEMORY  MAKE_DDHRESULT(746)\n#define D3DERR_SURFACENOTINVIDMEM       MAKE_DDHRESULT(747)\n#define D3DERR_LIGHT_SET_FAILED         MAKE_DDHRESULT(750)\n#define D3DERR_LIGHTHASVIEWPORT         MAKE_DDHRESULT(751)\n#define D3DERR_LIGHTNOTINTHISVIEWPORT   MAKE_DDHRESULT(752)\n#define D3DERR_SCENE_IN_SCENE           MAKE_DDHRESULT(760)\n#define D3DERR_SCENE_NOT_IN_SCENE       MAKE_DDHRESULT(761)\n#define D3DERR_SCENE_BEGIN_FAILED       MAKE_DDHRESULT(762)\n#define D3DERR_SCENE_END_FAILED         MAKE_DDHRESULT(763)\n#define D3DERR_INBEGIN                  MAKE_DDHRESULT(770)\n#define D3DERR_NOTINBEGIN               MAKE_DDHRESULT(771)\n#define D3DERR_NOVIEWPORTS              MAKE_DDHRESULT(772)\n#define D3DERR_VIEWPORTDATANOTSET       MAKE_DDHRESULT(773)\n#define D3DERR_VIEWPORTHASNODEVICE      MAKE_DDHRESULT(774)\n#define D3DERR_NOCURRENTVIEWPORT        MAKE_DDHRESULT(775)\n#define D3DERR_INVALIDVERTEXFORMAT\tMAKE_DDHRESULT(2048)\n#define D3DERR_COLORKEYATTACHED         MAKE_DDHRESULT(2050)\n#define D3DERR_VERTEXBUFFEROPTIMIZED\tMAKE_DDHRESULT(2060)\n#define D3DERR_VBUF_CREATE_FAILED\tMAKE_DDHRESULT(2061)\n#define D3DERR_VERTEXBUFFERLOCKED\tMAKE_DDHRESULT(2062)\n#define D3DERR_VERTEXBUFFERUNLOCKFAILED\tMAKE_DDHRESULT(2063)\n#define D3DERR_ZBUFFER_NOTPRESENT\tMAKE_DDHRESULT(2070)\n#define D3DERR_STENCILBUFFER_NOTPRESENT\tMAKE_DDHRESULT(2071)\n\n#define D3DERR_WRONGTEXTUREFORMAT\t\tMAKE_DDHRESULT(2072)\n#define D3DERR_UNSUPPORTEDCOLOROPERATION\tMAKE_DDHRESULT(2073)\n#define D3DERR_UNSUPPORTEDCOLORARG\t\tMAKE_DDHRESULT(2074)\n#define D3DERR_UNSUPPORTEDALPHAOPERATION\tMAKE_DDHRESULT(2075)\n#define D3DERR_UNSUPPORTEDALPHAARG\t\tMAKE_DDHRESULT(2076)\n#define D3DERR_TOOMANYOPERATIONS\t\tMAKE_DDHRESULT(2077)\n#define D3DERR_CONFLICTINGTEXTUREFILTER\t\tMAKE_DDHRESULT(2078)\n#define D3DERR_UNSUPPORTEDFACTORVALUE\t\tMAKE_DDHRESULT(2079)\n#define D3DERR_CONFLICTINGRENDERSTATE\t\tMAKE_DDHRESULT(2081)\n#define D3DERR_UNSUPPORTEDTEXTUREFILTER\t\tMAKE_DDHRESULT(2082)\n#define D3DERR_TOOMANYPRIMITIVES\t\tMAKE_DDHRESULT(2083)\n#define D3DERR_INVALIDMATRIX\t\t\tMAKE_DDHRESULT(2084)\n#define D3DERR_TOOMANYVERTICES\t\t\tMAKE_DDHRESULT(2085)\n#define D3DERR_CONFLICTINGTEXTUREPALETTE\tMAKE_DDHRESULT(2086)\n\n#define D3DERR_INVALIDSTATEBLOCK\tMAKE_DDHRESULT(2100)\n#define D3DERR_INBEGINSTATEBLOCK\tMAKE_DDHRESULT(2101)\n#define D3DERR_NOTINBEGINSTATEBLOCK\tMAKE_DDHRESULT(2102)\n\n/* ********************************************************************\n   Enums\n   ******************************************************************** */\n#define D3DNEXT_NEXT __MSABI_LONG(0x01)\n#define D3DNEXT_HEAD __MSABI_LONG(0x02)\n#define D3DNEXT_TAIL __MSABI_LONG(0x04)\n\n#define D3DDP_WAIT               __MSABI_LONG(0x00000001)\n#define D3DDP_OUTOFORDER         __MSABI_LONG(0x00000002)\n#define D3DDP_DONOTCLIP          __MSABI_LONG(0x00000004)\n#define D3DDP_DONOTUPDATEEXTENTS __MSABI_LONG(0x00000008)\n#define D3DDP_DONOTLIGHT         __MSABI_LONG(0x00000010)\n\n/* ********************************************************************\n   Types and structures\n   ******************************************************************** */\ntypedef DWORD D3DVIEWPORTHANDLE, *LPD3DVIEWPORTHANDLE;\n\n\n/*****************************************************************************\n * IDirect3D interface\n */\n#undef INTERFACE\n#define INTERFACE IDirect3D\nDECLARE_INTERFACE_(IDirect3D,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3D methods ***/\n    STDMETHOD(Initialize)(THIS_ REFIID riid) PURE;\n    STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(CreateLight)(THIS_ struct IDirect3DLight **light, IUnknown *outer) PURE;\n    STDMETHOD(CreateMaterial)(THIS_ struct IDirect3DMaterial **material, IUnknown *outer) PURE;\n    STDMETHOD(CreateViewport)(THIS_ struct IDirect3DViewport **viewport, IUnknown *outer) PURE;\n    STDMETHOD(FindDevice)(THIS_ D3DFINDDEVICESEARCH *search, D3DFINDDEVICERESULT *result) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3D_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3D_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirect3D_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirect3D methods ***/\n#define IDirect3D_Initialize(p,a)       (p)->lpVtbl->Initialize(p,a)\n#define IDirect3D_EnumDevices(p,a,b)    (p)->lpVtbl->EnumDevices(p,a,b)\n#define IDirect3D_CreateLight(p,a,b)    (p)->lpVtbl->CreateLight(p,a,b)\n#define IDirect3D_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b)\n#define IDirect3D_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b)\n#define IDirect3D_FindDevice(p,a,b)     (p)->lpVtbl->FindDevice(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3D_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3D_AddRef(p)             (p)->AddRef()\n#define IDirect3D_Release(p)            (p)->Release()\n/*** IDirect3D methods ***/\n#define IDirect3D_Initialize(p,a)       (p)->Initialize(a)\n#define IDirect3D_EnumDevices(p,a,b)    (p)->EnumDevices(a,b)\n#define IDirect3D_CreateLight(p,a,b)    (p)->CreateLight(a,b)\n#define IDirect3D_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b)\n#define IDirect3D_CreateViewport(p,a,b) (p)->CreateViewport(a,b)\n#define IDirect3D_FindDevice(p,a,b)     (p)->FindDevice(a,b)\n#endif\n\n\n/*****************************************************************************\n * IDirect3D2 interface\n */\n#define INTERFACE IDirect3D2\nDECLARE_INTERFACE_(IDirect3D2,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3D2 methods ***/\n    STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(CreateLight)(THIS_ struct IDirect3DLight **light, IUnknown *outer) PURE;\n    STDMETHOD(CreateMaterial)(THIS_ struct IDirect3DMaterial2 **material, IUnknown *outer) PURE;\n    STDMETHOD(CreateViewport)(THIS_ struct IDirect3DViewport2 **viewport, IUnknown *outer) PURE;\n    STDMETHOD(FindDevice)(THIS_ D3DFINDDEVICESEARCH *search, D3DFINDDEVICERESULT *result) PURE;\n    STDMETHOD(CreateDevice)(THIS_ REFCLSID rclsid, IDirectDrawSurface *surface,\n            struct IDirect3DDevice2 **device) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3D2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3D2_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirect3D2_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirect3D2 methods ***/\n#define IDirect3D2_EnumDevices(p,a,b)    (p)->lpVtbl->EnumDevices(p,a,b)\n#define IDirect3D2_CreateLight(p,a,b)    (p)->lpVtbl->CreateLight(p,a,b)\n#define IDirect3D2_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b)\n#define IDirect3D2_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b)\n#define IDirect3D2_FindDevice(p,a,b)     (p)->lpVtbl->FindDevice(p,a,b)\n#define IDirect3D2_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)\n#else\n/*** IUnknown methods ***/\n#define IDirect3D2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3D2_AddRef(p)             (p)->AddRef()\n#define IDirect3D2_Release(p)            (p)->Release()\n/*** IDirect3D2 methods ***/\n#define IDirect3D2_EnumDevices(p,a,b)    (p)->EnumDevices(a,b)\n#define IDirect3D2_CreateLight(p,a,b)    (p)->CreateLight(a,b)\n#define IDirect3D2_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b)\n#define IDirect3D2_CreateViewport(p,a,b) (p)->CreateViewport(a,b)\n#define IDirect3D2_FindDevice(p,a,b)     (p)->FindDevice(a,b)\n#define IDirect3D2_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)\n#endif\n\n\n/*****************************************************************************\n * IDirect3D3 interface\n */\n#define INTERFACE IDirect3D3\nDECLARE_INTERFACE_(IDirect3D3,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3D3 methods ***/\n    STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(CreateLight)(THIS_ struct IDirect3DLight **light, IUnknown *outer) PURE;\n    STDMETHOD(CreateMaterial)(THIS_ struct IDirect3DMaterial3 **material, IUnknown *outer) PURE;\n    STDMETHOD(CreateViewport)(THIS_ struct IDirect3DViewport3 **viewport, IUnknown *outer) PURE;\n    STDMETHOD(FindDevice)(THIS_ D3DFINDDEVICESEARCH *search, D3DFINDDEVICERESULT *result) PURE;\n    STDMETHOD(CreateDevice)(THIS_ REFCLSID rclsid, IDirectDrawSurface4 *surface,\n            struct IDirect3DDevice3 **device, IUnknown *outer) PURE;\n    STDMETHOD(CreateVertexBuffer)(THIS_ D3DVERTEXBUFFERDESC *desc, struct IDirect3DVertexBuffer **buffer,\n            DWORD flags, IUnknown *outer) PURE;\n    STDMETHOD(EnumZBufferFormats)(THIS_ REFCLSID device_iid, LPD3DENUMPIXELFORMATSCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(EvictManagedTextures)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3D3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3D3_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirect3D3_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirect3D3 methods ***/\n#define IDirect3D3_EnumDevices(p,a,b)            (p)->lpVtbl->EnumDevices(p,a,b)\n#define IDirect3D3_CreateLight(p,a,b)            (p)->lpVtbl->CreateLight(p,a,b)\n#define IDirect3D3_CreateMaterial(p,a,b)         (p)->lpVtbl->CreateMaterial(p,a,b)\n#define IDirect3D3_CreateViewport(p,a,b)         (p)->lpVtbl->CreateViewport(p,a,b)\n#define IDirect3D3_FindDevice(p,a,b)             (p)->lpVtbl->FindDevice(p,a,b)\n#define IDirect3D3_CreateDevice(p,a,b,c,d)       (p)->lpVtbl->CreateDevice(p,a,b,c,d)\n#define IDirect3D3_CreateVertexBuffer(p,a,b,c,d) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d)\n#define IDirect3D3_EnumZBufferFormats(p,a,b,c)   (p)->lpVtbl->EnumZBufferFormats(p,a,b,c)\n#define IDirect3D3_EvictManagedTextures(p)       (p)->lpVtbl->EvictManagedTextures(p)\n#else\n/*** IUnknown methods ***/\n#define IDirect3D3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3D3_AddRef(p)             (p)->AddRef()\n#define IDirect3D3_Release(p)            (p)->Release()\n/*** IDirect3D3 methods ***/\n#define IDirect3D3_EnumDevices(p,a,b)            (p)->EnumDevices(a,b)\n#define IDirect3D3_CreateLight(p,a,b)            (p)->CreateLight(a,b)\n#define IDirect3D3_CreateMaterial(p,a,b)         (p)->CreateMaterial(a,b)\n#define IDirect3D3_CreateViewport(p,a,b)         (p)->CreateViewport(a,b)\n#define IDirect3D3_FindDevice(p,a,b)             (p)->FindDevice(a,b)\n#define IDirect3D3_CreateDevice(p,a,b,c,d)       (p)->CreateDevice(a,b,c,d)\n#define IDirect3D3_CreateVertexBuffer(p,a,b,c,d) (p)->CreateVertexBuffer(a,b,c,d)\n#define IDirect3D3_EnumZBufferFormats(p,a,b,c)   (p)->EnumZBufferFormats(a,b,c)\n#define IDirect3D3_EvictManagedTextures(p)       (p)->EvictManagedTextures()\n#endif\n\n/*****************************************************************************\n * IDirect3D7 interface\n */\n#define INTERFACE IDirect3D7\nDECLARE_INTERFACE_(IDirect3D7,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3D7 methods ***/\n    STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK7 cb, void *ctx) PURE;\n    STDMETHOD(CreateDevice)(THIS_ REFCLSID rclsid, IDirectDrawSurface7 *surface,\n            struct IDirect3DDevice7 **device) PURE;\n    STDMETHOD(CreateVertexBuffer)(THIS_ D3DVERTEXBUFFERDESC *desc,\n            struct IDirect3DVertexBuffer7 **buffer, DWORD flags) PURE;\n    STDMETHOD(EnumZBufferFormats)(THIS_ REFCLSID device_iid, LPD3DENUMPIXELFORMATSCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(EvictManagedTextures)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3D7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3D7_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirect3D7_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirect3D3 methods ***/\n#define IDirect3D7_EnumDevices(p,a,b)            (p)->lpVtbl->EnumDevices(p,a,b)\n#define IDirect3D7_CreateDevice(p,a,b,c)         (p)->lpVtbl->CreateDevice(p,a,b,c)\n#define IDirect3D7_CreateVertexBuffer(p,a,b,c)   (p)->lpVtbl->CreateVertexBuffer(p,a,b,c)\n#define IDirect3D7_EnumZBufferFormats(p,a,b,c)   (p)->lpVtbl->EnumZBufferFormats(p,a,b,c)\n#define IDirect3D7_EvictManagedTextures(p)       (p)->lpVtbl->EvictManagedTextures(p)\n#else\n/*** IUnknown methods ***/\n#define IDirect3D7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3D7_AddRef(p)             (p)->AddRef()\n#define IDirect3D7_Release(p)            (p)->Release()\n/*** IDirect3D3 methods ***/\n#define IDirect3D7_EnumDevices(p,a,b)            (p)->EnumDevices(a,b)\n#define IDirect3D7_CreateDevice(p,a,b,c)         (p)->CreateDevice(a,b,c)\n#define IDirect3D7_CreateVertexBuffer(p,a,b,c)   (p)->CreateVertexBuffer(a,b,c)\n#define IDirect3D7_EnumZBufferFormats(p,a,b,c)   (p)->EnumZBufferFormats(a,b,c)\n#define IDirect3D7_EvictManagedTextures(p)       (p)->EvictManagedTextures()\n#endif\n\n\n/*****************************************************************************\n * IDirect3DLight interface\n */\n#define INTERFACE IDirect3DLight\nDECLARE_INTERFACE_(IDirect3DLight,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DLight methods ***/\n    STDMETHOD(Initialize)(THIS_ IDirect3D *d3d) PURE;\n    STDMETHOD(SetLight)(THIS_ D3DLIGHT *data) PURE;\n    STDMETHOD(GetLight)(THIS_ D3DLIGHT *data) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DLight_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DLight_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirect3DLight_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirect3DLight methods ***/\n#define IDirect3DLight_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)\n#define IDirect3DLight_SetLight(p,a)   (p)->lpVtbl->SetLight(p,a)\n#define IDirect3DLight_GetLight(p,a)   (p)->lpVtbl->GetLight(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DLight_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DLight_AddRef(p)             (p)->AddRef()\n#define IDirect3DLight_Release(p)            (p)->Release()\n/*** IDirect3DLight methods ***/\n#define IDirect3DLight_Initialize(p,a) (p)->Initialize(a)\n#define IDirect3DLight_SetLight(p,a)   (p)->SetLight(a)\n#define IDirect3DLight_GetLight(p,a)   (p)->GetLight(a)\n#endif\n\n\n/*****************************************************************************\n * IDirect3DMaterial interface\n */\n#define INTERFACE IDirect3DMaterial\nDECLARE_INTERFACE_(IDirect3DMaterial,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DMaterial methods ***/\n    STDMETHOD(Initialize)(THIS_ IDirect3D *d3d) PURE;\n    STDMETHOD(SetMaterial)(THIS_ D3DMATERIAL *data) PURE;\n    STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL *data) PURE;\n    STDMETHOD(GetHandle)(THIS_ struct IDirect3DDevice *device, D3DMATERIALHANDLE *handle) PURE;\n    STDMETHOD(Reserve)(THIS) PURE;\n    STDMETHOD(Unreserve)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DMaterial_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DMaterial_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirect3DMaterial_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirect3DMaterial methods ***/\n#define IDirect3DMaterial_Initialize(p,a)  (p)->lpVtbl->Initialize(p,a)\n#define IDirect3DMaterial_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)\n#define IDirect3DMaterial_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)\n#define IDirect3DMaterial_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b)\n#define IDirect3DMaterial_Reserve(p)       (p)->lpVtbl->Reserve(p)\n#define IDirect3DMaterial_Unreserve(p)     (p)->lpVtbl->Unreserve(p)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DMaterial_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DMaterial_AddRef(p)             (p)->AddRef()\n#define IDirect3DMaterial_Release(p)            (p)->Release()\n/*** IDirect3DMaterial methods ***/\n#define IDirect3DMaterial_Initialize(p,a)  (p)->Initialize(a)\n#define IDirect3DMaterial_SetMaterial(p,a) (p)->SetMaterial(a)\n#define IDirect3DMaterial_GetMaterial(p,a) (p)->GetMaterial(a)\n#define IDirect3DMaterial_GetHandle(p,a,b) (p)->GetHandle(a,b)\n#define IDirect3DMaterial_Reserve(p)       (p)->Reserve()\n#define IDirect3DMaterial_Unreserve(p)     (p)->Unreserve()\n#endif\n\n\n/*****************************************************************************\n * IDirect3DMaterial2 interface\n */\n#define INTERFACE IDirect3DMaterial2\nDECLARE_INTERFACE_(IDirect3DMaterial2,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DMaterial2 methods ***/\n    STDMETHOD(SetMaterial)(THIS_ D3DMATERIAL *data) PURE;\n    STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL *data) PURE;\n    STDMETHOD(GetHandle)(THIS_ struct IDirect3DDevice2 *device, D3DMATERIALHANDLE *handle) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DMaterial2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DMaterial2_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirect3DMaterial2_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirect3DMaterial2 methods ***/\n#define IDirect3DMaterial2_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)\n#define IDirect3DMaterial2_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)\n#define IDirect3DMaterial2_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DMaterial2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DMaterial2_AddRef(p)             (p)->AddRef()\n#define IDirect3DMaterial2_Release(p)            (p)->Release()\n/*** IDirect3DMaterial2 methods ***/\n#define IDirect3DMaterial2_SetMaterial(p,a) (p)->SetMaterial(a)\n#define IDirect3DMaterial2_GetMaterial(p,a) (p)->GetMaterial(a)\n#define IDirect3DMaterial2_GetHandle(p,a,b) (p)->GetHandle(a,b)\n#endif\n\n\n/*****************************************************************************\n * IDirect3DMaterial3 interface\n */\n#define INTERFACE IDirect3DMaterial3\nDECLARE_INTERFACE_(IDirect3DMaterial3,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DMaterial3 methods ***/\n    STDMETHOD(SetMaterial)(THIS_ D3DMATERIAL *data) PURE;\n    STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL *data) PURE;\n    STDMETHOD(GetHandle)(THIS_ struct IDirect3DDevice3 *device, D3DMATERIALHANDLE *handle) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DMaterial3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DMaterial3_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirect3DMaterial3_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirect3DMaterial3 methods ***/\n#define IDirect3DMaterial3_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)\n#define IDirect3DMaterial3_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)\n#define IDirect3DMaterial3_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DMaterial3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DMaterial3_AddRef(p)             (p)->AddRef()\n#define IDirect3DMaterial3_Release(p)            (p)->Release()\n/*** IDirect3DMaterial3 methods ***/\n#define IDirect3DMaterial3_SetMaterial(p,a) (p)->SetMaterial(a)\n#define IDirect3DMaterial3_GetMaterial(p,a) (p)->GetMaterial(a)\n#define IDirect3DMaterial3_GetHandle(p,a,b) (p)->GetHandle(a,b)\n#endif\n\n\n/*****************************************************************************\n * IDirect3DTexture interface\n */\n#define INTERFACE IDirect3DTexture\nDECLARE_INTERFACE_(IDirect3DTexture,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DTexture methods ***/\n    STDMETHOD(Initialize)(THIS_ struct IDirect3DDevice *device, IDirectDrawSurface *surface) PURE;\n    STDMETHOD(GetHandle)(THIS_ struct IDirect3DDevice *device, D3DTEXTUREHANDLE *handle) PURE;\n    STDMETHOD(PaletteChanged)(THIS_ DWORD dwStart, DWORD dwCount) PURE;\n    STDMETHOD(Load)(THIS_ IDirect3DTexture *texture) PURE;\n    STDMETHOD(Unload)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DTexture_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DTexture_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirect3DTexture_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirect3DTexture methods ***/\n#define IDirect3DTexture_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)\n#define IDirect3DTexture_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b)\n#define IDirect3DTexture_PaletteChanged(p,a,b) (p)->lpVtbl->PaletteChanged(p,a,b)\n#define IDirect3DTexture_Load(p,a) (p)->lpVtbl->Load(p,a)\n#define IDirect3DTexture_Unload(p) (p)->lpVtbl->Unload(p)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DTexture_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DTexture_AddRef(p)             (p)->AddRef()\n#define IDirect3DTexture_Release(p)            (p)->Release()\n/*** IDirect3DTexture methods ***/\n#define IDirect3DTexture_Initialize(p,a,b) (p)->Initialize(a,b)\n#define IDirect3DTexture_GetHandle(p,a,b) (p)->GetHandle(a,b)\n#define IDirect3DTexture_PaletteChanged(p,a,b) (p)->PaletteChanged(a,b)\n#define IDirect3DTexture_Load(p,a) (p)->Load(a)\n#define IDirect3DTexture_Unload(p) (p)->Unload()\n#endif\n\n\n/*****************************************************************************\n * IDirect3DTexture2 interface\n */\n#define INTERFACE IDirect3DTexture2\nDECLARE_INTERFACE_(IDirect3DTexture2,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DTexture2 methods ***/\n    STDMETHOD(GetHandle)(THIS_ struct IDirect3DDevice2 *device, D3DTEXTUREHANDLE *handle) PURE;\n    STDMETHOD(PaletteChanged)(THIS_ DWORD dwStart, DWORD dwCount) PURE;\n    STDMETHOD(Load)(THIS_ IDirect3DTexture2 *texture) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DTexture2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DTexture2_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirect3DTexture2_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirect3DTexture2 methods ***/\n#define IDirect3DTexture2_GetHandle(p,a,b)      (p)->lpVtbl->GetHandle(p,a,b)\n#define IDirect3DTexture2_PaletteChanged(p,a,b) (p)->lpVtbl->PaletteChanged(p,a,b)\n#define IDirect3DTexture2_Load(p,a)             (p)->lpVtbl->Load(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DTexture2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DTexture2_AddRef(p)             (p)->AddRef()\n#define IDirect3DTexture2_Release(p)            (p)->Release()\n/*** IDirect3DTexture2 methods ***/\n#define IDirect3DTexture2_GetHandle(p,a,b)      (p)->GetHandle(a,b)\n#define IDirect3DTexture2_PaletteChanged(p,a,b) (p)->PaletteChanged(a,b)\n#define IDirect3DTexture2_Load(p,a)             (p)->Load(a)\n#endif\n\n\n/*****************************************************************************\n * IDirect3DViewport interface\n */\n#define INTERFACE IDirect3DViewport\nDECLARE_INTERFACE_(IDirect3DViewport,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DViewport methods ***/\n    STDMETHOD(Initialize)(THIS_ IDirect3D *d3d) PURE;\n    STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT *data) PURE;\n    STDMETHOD(SetViewport)(THIS_ D3DVIEWPORT *data) PURE;\n    STDMETHOD(TransformVertices)(THIS_ DWORD vertex_count, D3DTRANSFORMDATA *data, DWORD flags, DWORD *offscreen) PURE;\n    STDMETHOD(LightElements)(THIS_ DWORD element_count, D3DLIGHTDATA *data) PURE;\n    STDMETHOD(SetBackground)(THIS_ D3DMATERIALHANDLE hMat) PURE;\n    STDMETHOD(GetBackground)(THIS_ D3DMATERIALHANDLE *material, BOOL *valid) PURE;\n    STDMETHOD(SetBackgroundDepth)(THIS_ IDirectDrawSurface *surface) PURE;\n    STDMETHOD(GetBackgroundDepth)(THIS_ IDirectDrawSurface **surface, BOOL *valid) PURE;\n    STDMETHOD(Clear)(THIS_ DWORD count, D3DRECT *rects, DWORD flags) PURE;\n    STDMETHOD(AddLight)(THIS_ IDirect3DLight *light) PURE;\n    STDMETHOD(DeleteLight)(THIS_ IDirect3DLight *light) PURE;\n    STDMETHOD(NextLight)(THIS_ IDirect3DLight *ref, IDirect3DLight **light, DWORD flags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DViewport_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DViewport_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirect3DViewport_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirect3DViewport methods ***/\n#define IDirect3DViewport_Initialize(p,a)              (p)->lpVtbl->Initialize(p,a)\n#define IDirect3DViewport_GetViewport(p,a)             (p)->lpVtbl->GetViewport(p,a)\n#define IDirect3DViewport_SetViewport(p,a)             (p)->lpVtbl->SetViewport(p,a)\n#define IDirect3DViewport_TransformVertices(p,a,b,c,d) (p)->lpVtbl->TransformVertices(p,a,b,c,d)\n#define IDirect3DViewport_LightElements(p,a,b)         (p)->lpVtbl->LightElements(p,a,b)\n#define IDirect3DViewport_SetBackground(p,a)           (p)->lpVtbl->SetBackground(p,a)\n#define IDirect3DViewport_GetBackground(p,a,b)         (p)->lpVtbl->GetBackground(p,a,b)\n#define IDirect3DViewport_SetBackgroundDepth(p,a)      (p)->lpVtbl->SetBackgroundDepth(p,a)\n#define IDirect3DViewport_GetBackgroundDepth(p,a,b)    (p)->lpVtbl->GetBackgroundDepth(p,a,b)\n#define IDirect3DViewport_Clear(p,a,b,c)               (p)->lpVtbl->Clear(p,a,b,c)\n#define IDirect3DViewport_AddLight(p,a)                (p)->lpVtbl->AddLight(p,a)\n#define IDirect3DViewport_DeleteLight(p,a)             (p)->lpVtbl->DeleteLight(p,a)\n#define IDirect3DViewport_NextLight(p,a,b,c)           (p)->lpVtbl->NextLight(p,a,b,c)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DViewport_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DViewport_AddRef(p)             (p)->AddRef()\n#define IDirect3DViewport_Release(p)            (p)->Release()\n/*** IDirect3DViewport methods ***/\n#define IDirect3DViewport_Initialize(p,a)              (p)->Initialize(a)\n#define IDirect3DViewport_GetViewport(p,a)             (p)->GetViewport(a)\n#define IDirect3DViewport_SetViewport(p,a)             (p)->SetViewport(a)\n#define IDirect3DViewport_TransformVertices(p,a,b,c,d) (p)->TransformVertices(a,b,c,d)\n#define IDirect3DViewport_LightElements(p,a,b)         (p)->LightElements(a,b)\n#define IDirect3DViewport_SetBackground(p,a)           (p)->SetBackground(a)\n#define IDirect3DViewport_GetBackground(p,a,b)         (p)->GetBackground(a,b)\n#define IDirect3DViewport_SetBackgroundDepth(p,a)      (p)->SetBackgroundDepth(a)\n#define IDirect3DViewport_GetBackgroundDepth(p,a,b)    (p)->GetBackgroundDepth(a,b)\n#define IDirect3DViewport_Clear(p,a,b,c)               (p)->Clear(a,b,c)\n#define IDirect3DViewport_AddLight(p,a)                (p)->AddLight(a)\n#define IDirect3DViewport_DeleteLight(p,a)             (p)->DeleteLight(a)\n#define IDirect3DViewport_NextLight(p,a,b,c)           (p)->NextLight(a,b,c)\n#endif\n\n\n/*****************************************************************************\n * IDirect3DViewport2 interface\n */\n#define INTERFACE IDirect3DViewport2\nDECLARE_INTERFACE_(IDirect3DViewport2,IDirect3DViewport)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DViewport methods ***/\n    STDMETHOD(Initialize)(THIS_ IDirect3D *d3d) PURE;\n    STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT *data) PURE;\n    STDMETHOD(SetViewport)(THIS_ D3DVIEWPORT *data) PURE;\n    STDMETHOD(TransformVertices)(THIS_ DWORD vertex_count, D3DTRANSFORMDATA *data, DWORD flags, DWORD *offscreen) PURE;\n    STDMETHOD(LightElements)(THIS_ DWORD element_count, D3DLIGHTDATA *data) PURE;\n    STDMETHOD(SetBackground)(THIS_ D3DMATERIALHANDLE hMat) PURE;\n    STDMETHOD(GetBackground)(THIS_ D3DMATERIALHANDLE *material, BOOL *valid) PURE;\n    STDMETHOD(SetBackgroundDepth)(THIS_ IDirectDrawSurface *surface) PURE;\n    STDMETHOD(GetBackgroundDepth)(THIS_ IDirectDrawSurface **surface, BOOL *valid) PURE;\n    STDMETHOD(Clear)(THIS_ DWORD count, D3DRECT *rects, DWORD flags) PURE;\n    STDMETHOD(AddLight)(THIS_ IDirect3DLight *light) PURE;\n    STDMETHOD(DeleteLight)(THIS_ IDirect3DLight *light) PURE;\n    STDMETHOD(NextLight)(THIS_ IDirect3DLight *ref, IDirect3DLight **light, DWORD flags) PURE;\n    /*** IDirect3DViewport2 methods ***/\n    STDMETHOD(GetViewport2)(THIS_ D3DVIEWPORT2 *data) PURE;\n    STDMETHOD(SetViewport2)(THIS_ D3DVIEWPORT2 *data) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DViewport2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DViewport2_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirect3DViewport2_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirect3Viewport methods ***/\n#define IDirect3DViewport2_Initialize(p,a)              (p)->lpVtbl->Initialize(p,a)\n#define IDirect3DViewport2_GetViewport(p,a)             (p)->lpVtbl->GetViewport(p,a)\n#define IDirect3DViewport2_SetViewport(p,a)             (p)->lpVtbl->SetViewport(p,a)\n#define IDirect3DViewport2_TransformVertices(p,a,b,c,d) (p)->lpVtbl->TransformVertices(p,a,b,c,d)\n#define IDirect3DViewport2_LightElements(p,a,b)         (p)->lpVtbl->LightElements(p,a,b)\n#define IDirect3DViewport2_SetBackground(p,a)           (p)->lpVtbl->SetBackground(p,a)\n#define IDirect3DViewport2_GetBackground(p,a,b)         (p)->lpVtbl->GetBackground(p,a,b)\n#define IDirect3DViewport2_SetBackgroundDepth(p,a)      (p)->lpVtbl->SetBackgroundDepth(p,a)\n#define IDirect3DViewport2_GetBackgroundDepth(p,a,b)    (p)->lpVtbl->GetBackgroundDepth(p,a,b)\n#define IDirect3DViewport2_Clear(p,a,b,c)               (p)->lpVtbl->Clear(p,a,b,c)\n#define IDirect3DViewport2_AddLight(p,a)                (p)->lpVtbl->AddLight(p,a)\n#define IDirect3DViewport2_DeleteLight(p,a)             (p)->lpVtbl->DeleteLight(p,a)\n#define IDirect3DViewport2_NextLight(p,a,b,c)           (p)->lpVtbl->NextLight(p,a,b,c)\n/*** IDirect3DViewport2 methods ***/\n#define IDirect3DViewport2_GetViewport2(p,a) (p)->lpVtbl->GetViewport2(p,a)\n#define IDirect3DViewport2_SetViewport2(p,a) (p)->lpVtbl->SetViewport2(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DViewport2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DViewport2_AddRef(p)             (p)->AddRef()\n#define IDirect3DViewport2_Release(p)            (p)->Release()\n/*** IDirect3Viewport methods ***/\n#define IDirect3DViewport2_Initialize(p,a)              (p)->Initialize(a)\n#define IDirect3DViewport2_GetViewport(p,a)             (p)->GetViewport(a)\n#define IDirect3DViewport2_SetViewport(p,a)             (p)->SetViewport(a)\n#define IDirect3DViewport2_TransformVertices(p,a,b,c,d) (p)->TransformVertices(a,b,c,d)\n#define IDirect3DViewport2_LightElements(p,a,b)         (p)->LightElements(a,b)\n#define IDirect3DViewport2_SetBackground(p,a)           (p)->SetBackground(a)\n#define IDirect3DViewport2_GetBackground(p,a,b)         (p)->GetBackground(a,b)\n#define IDirect3DViewport2_SetBackgroundDepth(p,a)      (p)->SetBackgroundDepth(a)\n#define IDirect3DViewport2_GetBackgroundDepth(p,a,b)    (p)->GetBackgroundDepth(a,b)\n#define IDirect3DViewport2_Clear(p,a,b,c)               (p)->Clear(a,b,c)\n#define IDirect3DViewport2_AddLight(p,a)                (p)->AddLight(a)\n#define IDirect3DViewport2_DeleteLight(p,a)             (p)->DeleteLight(a)\n#define IDirect3DViewport2_NextLight(p,a,b,c)           (p)->NextLight(a,b,c)\n/*** IDirect3DViewport2 methods ***/\n#define IDirect3DViewport2_GetViewport2(p,a) (p)->GetViewport2(a)\n#define IDirect3DViewport2_SetViewport2(p,a) (p)->SetViewport2(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DViewport3 interface\n */\n#define INTERFACE IDirect3DViewport3\nDECLARE_INTERFACE_(IDirect3DViewport3,IDirect3DViewport2)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DViewport methods ***/\n    STDMETHOD(Initialize)(THIS_ IDirect3D *d3d) PURE;\n    STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT *data) PURE;\n    STDMETHOD(SetViewport)(THIS_ D3DVIEWPORT *data) PURE;\n    STDMETHOD(TransformVertices)(THIS_ DWORD vertex_count, D3DTRANSFORMDATA *data, DWORD flags, DWORD *offscreen) PURE;\n    STDMETHOD(LightElements)(THIS_ DWORD element_count, D3DLIGHTDATA *data) PURE;\n    STDMETHOD(SetBackground)(THIS_ D3DMATERIALHANDLE hMat) PURE;\n    STDMETHOD(GetBackground)(THIS_ D3DMATERIALHANDLE *material, BOOL *valid) PURE;\n    STDMETHOD(SetBackgroundDepth)(THIS_ IDirectDrawSurface *surface) PURE;\n    STDMETHOD(GetBackgroundDepth)(THIS_ IDirectDrawSurface **surface, BOOL *valid) PURE;\n    STDMETHOD(Clear)(THIS_ DWORD count, D3DRECT *rects, DWORD flags) PURE;\n    STDMETHOD(AddLight)(THIS_ IDirect3DLight *light) PURE;\n    STDMETHOD(DeleteLight)(THIS_ IDirect3DLight *light) PURE;\n    STDMETHOD(NextLight)(THIS_ IDirect3DLight *ref, IDirect3DLight **light, DWORD flags) PURE;\n    /*** IDirect3DViewport2 methods ***/\n    STDMETHOD(GetViewport2)(THIS_ D3DVIEWPORT2 *data) PURE;\n    STDMETHOD(SetViewport2)(THIS_ D3DVIEWPORT2 *data) PURE;\n    /*** IDirect3DViewport3 methods ***/\n    STDMETHOD(SetBackgroundDepth2)(THIS_ IDirectDrawSurface4 *surface) PURE;\n    STDMETHOD(GetBackgroundDepth2)(THIS_ IDirectDrawSurface4 **surface, BOOL *valid) PURE;\n    STDMETHOD(Clear2)(THIS_ DWORD count, D3DRECT *rects, DWORD flags, DWORD color, D3DVALUE z, DWORD stencil) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DViewport3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DViewport3_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirect3DViewport3_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirect3Viewport methods ***/\n#define IDirect3DViewport3_Initialize(p,a)              (p)->lpVtbl->Initialize(p,a)\n#define IDirect3DViewport3_GetViewport(p,a)             (p)->lpVtbl->GetViewport(p,a)\n#define IDirect3DViewport3_SetViewport(p,a)             (p)->lpVtbl->SetViewport(p,a)\n#define IDirect3DViewport3_TransformVertices(p,a,b,c,d) (p)->lpVtbl->TransformVertices(p,a,b,c,d)\n#define IDirect3DViewport3_LightElements(p,a,b)         (p)->lpVtbl->LightElements(p,a,b)\n#define IDirect3DViewport3_SetBackground(p,a)           (p)->lpVtbl->SetBackground(p,a)\n#define IDirect3DViewport3_GetBackground(p,a,b)         (p)->lpVtbl->GetBackground(p,a,b)\n#define IDirect3DViewport3_SetBackgroundDepth(p,a)      (p)->lpVtbl->SetBackgroundDepth(p,a)\n#define IDirect3DViewport3_GetBackgroundDepth(p,a,b)    (p)->lpVtbl->GetBackgroundDepth(p,a,b)\n#define IDirect3DViewport3_Clear(p,a,b,c)               (p)->lpVtbl->Clear(p,a,b,c)\n#define IDirect3DViewport3_AddLight(p,a)                (p)->lpVtbl->AddLight(p,a)\n#define IDirect3DViewport3_DeleteLight(p,a)             (p)->lpVtbl->DeleteLight(p,a)\n#define IDirect3DViewport3_NextLight(p,a,b,c)           (p)->lpVtbl->NextLight(p,a,b,c)\n/*** IDirect3DViewport2 methods ***/\n#define IDirect3DViewport3_GetViewport2(p,a) (p)->lpVtbl->GetViewport2(p,a)\n#define IDirect3DViewport3_SetViewport2(p,a) (p)->lpVtbl->SetViewport2(p,a)\n/*** IDirect3DViewport3 methods ***/\n#define IDirect3DViewport3_SetBackgroundDepth2(p,a)   (p)->lpVtbl->SetBackgroundDepth2(p,a)\n#define IDirect3DViewport3_GetBackgroundDepth2(p,a,b) (p)->lpVtbl->GetBackgroundDepth2(p,a,b)\n#define IDirect3DViewport3_Clear2(p,a,b,c,d,e,f)      (p)->lpVtbl->Clear2(p,a,b,c,d,e,f)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DViewport3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DViewport3_AddRef(p)             (p)->AddRef()\n#define IDirect3DViewport3_Release(p)            (p)->Release()\n/*** IDirect3Viewport methods ***/\n#define IDirect3DViewport3_Initialize(p,a)              (p)->Initialize(a)\n#define IDirect3DViewport3_GetViewport(p,a)             (p)->GetViewport(a)\n#define IDirect3DViewport3_SetViewport(p,a)             (p)->SetViewport(a)\n#define IDirect3DViewport3_TransformVertices(p,a,b,c,d) (p)->TransformVertices(a,b,c,d)\n#define IDirect3DViewport3_LightElements(p,a,b)         (p)->LightElements(a,b)\n#define IDirect3DViewport3_SetBackground(p,a)           (p)->SetBackground(a)\n#define IDirect3DViewport3_GetBackground(p,a,b)         (p)->GetBackground(a,b)\n#define IDirect3DViewport3_SetBackgroundDepth(p,a)      (p)->SetBackgroundDepth(a)\n#define IDirect3DViewport3_GetBackgroundDepth(p,a,b)    (p)->GetBackgroundDepth(a,b)\n#define IDirect3DViewport3_Clear(p,a,b,c)               (p)->Clear(a,b,c)\n#define IDirect3DViewport3_AddLight(p,a)                (p)->AddLight(a)\n#define IDirect3DViewport3_DeleteLight(p,a)             (p)->DeleteLight(a)\n#define IDirect3DViewport3_NextLight(p,a,b,c)           (p)->NextLight(a,b,c)\n/*** IDirect3DViewport2 methods ***/\n#define IDirect3DViewport3_GetViewport2(p,a) (p)->GetViewport2(a)\n#define IDirect3DViewport3_SetViewport2(p,a) (p)->SetViewport2(a)\n/*** IDirect3DViewport3 methods ***/\n#define IDirect3DViewport3_SetBackgroundDepth2(p,a)   (p)->SetBackgroundDepth2(a)\n#define IDirect3DViewport3_GetBackgroundDepth2(p,a,b) (p)->GetBackgroundDepth2(a,b)\n#define IDirect3DViewport3_Clear2(p,a,b,c,d,e,f)      (p)->Clear2(a,b,c,d,e,f)\n#endif\n\n\n\n/*****************************************************************************\n * IDirect3DExecuteBuffer interface\n */\n#define INTERFACE IDirect3DExecuteBuffer\nDECLARE_INTERFACE_(IDirect3DExecuteBuffer,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DExecuteBuffer methods ***/\n    STDMETHOD(Initialize)(THIS_ struct IDirect3DDevice *device, D3DEXECUTEBUFFERDESC *desc) PURE;\n    STDMETHOD(Lock)(THIS_ D3DEXECUTEBUFFERDESC *desc) PURE;\n    STDMETHOD(Unlock)(THIS) PURE;\n    STDMETHOD(SetExecuteData)(THIS_ D3DEXECUTEDATA *data) PURE;\n    STDMETHOD(GetExecuteData)(THIS_ D3DEXECUTEDATA *data) PURE;\n    STDMETHOD(Validate)(THIS_ DWORD *offset, LPD3DVALIDATECALLBACK cb, void *ctx, DWORD reserved) PURE;\n    STDMETHOD(Optimize)(THIS_ DWORD dwDummy) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DExecuteBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DExecuteBuffer_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirect3DExecuteBuffer_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirect3DExecuteBuffer methods ***/\n#define IDirect3DExecuteBuffer_Initialize(p,a,b)   (p)->lpVtbl->Initialize(p,a,b)\n#define IDirect3DExecuteBuffer_Lock(p,a)           (p)->lpVtbl->Lock(p,a)\n#define IDirect3DExecuteBuffer_Unlock(p)           (p)->lpVtbl->Unlock(p)\n#define IDirect3DExecuteBuffer_SetExecuteData(p,a) (p)->lpVtbl->SetExecuteData(p,a)\n#define IDirect3DExecuteBuffer_GetExecuteData(p,a) (p)->lpVtbl->GetExecuteData(p,a)\n#define IDirect3DExecuteBuffer_Validate(p,a,b,c,d) (p)->lpVtbl->Validate(p,a,b,c,d)\n#define IDirect3DExecuteBuffer_Optimize(p,a)       (p)->lpVtbl->Optimize(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DExecuteBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DExecuteBuffer_AddRef(p)             (p)->AddRef()\n#define IDirect3DExecuteBuffer_Release(p)            (p)->Release()\n/*** IDirect3DExecuteBuffer methods ***/\n#define IDirect3DExecuteBuffer_Initialize(p,a,b)   (p)->Initialize(a,b)\n#define IDirect3DExecuteBuffer_Lock(p,a)           (p)->Lock(a)\n#define IDirect3DExecuteBuffer_Unlock(p)           (p)->Unlock()\n#define IDirect3DExecuteBuffer_SetExecuteData(p,a) (p)->SetExecuteData(a)\n#define IDirect3DExecuteBuffer_GetExecuteData(p,a) (p)->GetExecuteData(a)\n#define IDirect3DExecuteBuffer_Validate(p,a,b,c,d) (p)->Validate(a,b,c,d)\n#define IDirect3DExecuteBuffer_Optimize(p,a)       (p)->Optimize(a)\n#endif\n\n\n/*****************************************************************************\n * IDirect3DDevice interface\n */\n#define INTERFACE IDirect3DDevice\nDECLARE_INTERFACE_(IDirect3DDevice,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DDevice methods ***/\n    STDMETHOD(Initialize)(THIS_ IDirect3D *d3d, GUID *guid, D3DDEVICEDESC *desc) PURE;\n    STDMETHOD(GetCaps)(THIS_ D3DDEVICEDESC *hal_desc, D3DDEVICEDESC *hel_desc) PURE;\n    STDMETHOD(SwapTextureHandles)(THIS_ IDirect3DTexture *tex1, IDirect3DTexture *tex2) PURE;\n    STDMETHOD(CreateExecuteBuffer)(THIS_ D3DEXECUTEBUFFERDESC *desc,\n            IDirect3DExecuteBuffer **buffer, IUnknown *outer) PURE;\n    STDMETHOD(GetStats)(THIS_ D3DSTATS *stats) PURE;\n    STDMETHOD(Execute)(THIS_ IDirect3DExecuteBuffer *buffer, IDirect3DViewport *viewport,\n            DWORD flags) PURE;\n    STDMETHOD(AddViewport)(THIS_ IDirect3DViewport *viewport) PURE;\n    STDMETHOD(DeleteViewport)(THIS_ IDirect3DViewport *viewport) PURE;\n    STDMETHOD(NextViewport)(THIS_ IDirect3DViewport *ref,\n            IDirect3DViewport **viewport, DWORD flags) PURE;\n    STDMETHOD(Pick)(THIS_ IDirect3DExecuteBuffer *buffer, IDirect3DViewport *viewport,\n            DWORD flags, D3DRECT *rect) PURE;\n    STDMETHOD(GetPickRecords)(THIS_ DWORD *count, D3DPICKRECORD *records) PURE;\n    STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMTEXTUREFORMATSCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(CreateMatrix)(THIS_ D3DMATRIXHANDLE *matrix) PURE;\n    STDMETHOD(SetMatrix)(THIS_ D3DMATRIXHANDLE handle, D3DMATRIX *matrix) PURE;\n    STDMETHOD(GetMatrix)(THIS_ D3DMATRIXHANDLE handle, D3DMATRIX *matrix) PURE;\n    STDMETHOD(DeleteMatrix)(THIS_ D3DMATRIXHANDLE D3DMatHandle) PURE;\n    STDMETHOD(BeginScene)(THIS) PURE;\n    STDMETHOD(EndScene)(THIS) PURE;\n    STDMETHOD(GetDirect3D)(THIS_ IDirect3D **d3d) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DDevice_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DDevice_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirect3DDevice_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirect3DDevice methods ***/\n#define IDirect3DDevice_Initialize(p,a,b,c)          (p)->lpVtbl->Initialize(p,a,b,c)\n#define IDirect3DDevice_GetCaps(p,a,b)               (p)->lpVtbl->GetCaps(p,a,b)\n#define IDirect3DDevice_SwapTextureHandles(p,a,b)    (p)->lpVtbl->SwapTextureHandles(p,a,b)\n#define IDirect3DDevice_CreateExecuteBuffer(p,a,b,c) (p)->lpVtbl->CreateExecuteBuffer(p,a,b,c)\n#define IDirect3DDevice_GetStats(p,a)                (p)->lpVtbl->GetStats(p,a)\n#define IDirect3DDevice_Execute(p,a,b,c)             (p)->lpVtbl->Execute(p,a,b,c)\n#define IDirect3DDevice_AddViewport(p,a)             (p)->lpVtbl->AddViewport(p,a)\n#define IDirect3DDevice_DeleteViewport(p,a)          (p)->lpVtbl->DeleteViewport(p,a)\n#define IDirect3DDevice_NextViewport(p,a,b,c)        (p)->lpVtbl->NextViewport(p,a,b,c)\n#define IDirect3DDevice_Pick(p,a,b,c,d)              (p)->lpVtbl->Pick(p,a,b,c,d)\n#define IDirect3DDevice_GetPickRecords(p,a,b)        (p)->lpVtbl->GetPickRecords(p,a,b)\n#define IDirect3DDevice_EnumTextureFormats(p,a,b)    (p)->lpVtbl->EnumTextureFormats(p,a,b)\n#define IDirect3DDevice_CreateMatrix(p,a)            (p)->lpVtbl->CreateMatrix(p,a)\n#define IDirect3DDevice_SetMatrix(p,a,b)             (p)->lpVtbl->SetMatrix(p,a,b)\n#define IDirect3DDevice_GetMatrix(p,a,b)             (p)->lpVtbl->GetMatrix(p,a,b)\n#define IDirect3DDevice_DeleteMatrix(p,a)            (p)->lpVtbl->DeleteMatrix(p,a)\n#define IDirect3DDevice_BeginScene(p)                (p)->lpVtbl->BeginScene(p)\n#define IDirect3DDevice_EndScene(p)                  (p)->lpVtbl->EndScene(p)\n#define IDirect3DDevice_GetDirect3D(p,a)             (p)->lpVtbl->GetDirect3D(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DDevice_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DDevice_AddRef(p)             (p)->AddRef()\n#define IDirect3DDevice_Release(p)            (p)->Release()\n/*** IDirect3DDevice methods ***/\n#define IDirect3DDevice_Initialize(p,a,b,c)          (p)->Initialize(a,b,c)\n#define IDirect3DDevice_GetCaps(p,a,b)               (p)->GetCaps(a,b)\n#define IDirect3DDevice_SwapTextureHandles(p,a,b)    (p)->SwapTextureHandles(a,b)\n#define IDirect3DDevice_CreateExecuteBuffer(p,a,b,c) (p)->CreateExecuteBuffer(a,b,c)\n#define IDirect3DDevice_GetStats(p,a)                (p)->GetStats(a)\n#define IDirect3DDevice_Execute(p,a,b,c)             (p)->Execute(a,b,c)\n#define IDirect3DDevice_AddViewport(p,a)             (p)->AddViewport(a)\n#define IDirect3DDevice_DeleteViewport(p,a)          (p)->DeleteViewport(a)\n#define IDirect3DDevice_NextViewport(p,a,b,c)        (p)->NextViewport(a,b,c)\n#define IDirect3DDevice_Pick(p,a,b,c,d)              (p)->Pick(a,b,c,d)\n#define IDirect3DDevice_GetPickRecords(p,a,b)        (p)->GetPickRecords(a,b)\n#define IDirect3DDevice_EnumTextureFormats(p,a,b)    (p)->EnumTextureFormats(a,b)\n#define IDirect3DDevice_CreateMatrix(p,a)            (p)->CreateMatrix(a)\n#define IDirect3DDevice_SetMatrix(p,a,b)             (p)->SetMatrix(a,b)\n#define IDirect3DDevice_GetMatrix(p,a,b)             (p)->GetMatrix(a,b)\n#define IDirect3DDevice_DeleteMatrix(p,a)            (p)->DeleteMatrix(a)\n#define IDirect3DDevice_BeginScene(p)                (p)->BeginScene()\n#define IDirect3DDevice_EndScene(p)                  (p)->EndScene()\n#define IDirect3DDevice_GetDirect3D(p,a)             (p)->GetDirect3D(a)\n#endif\n\n\n/*****************************************************************************\n * IDirect3DDevice2 interface\n */\n#define INTERFACE IDirect3DDevice2\nDECLARE_INTERFACE_(IDirect3DDevice2,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DDevice2 methods ***/\n    STDMETHOD(GetCaps)(THIS_ D3DDEVICEDESC *hal_desc, D3DDEVICEDESC *hel_desc) PURE;\n    STDMETHOD(SwapTextureHandles)(THIS_ IDirect3DTexture2 *tex1, IDirect3DTexture2 *tex2) PURE;\n    STDMETHOD(GetStats)(THIS_ D3DSTATS *stats) PURE;\n    STDMETHOD(AddViewport)(THIS_ IDirect3DViewport2 *viewport) PURE;\n    STDMETHOD(DeleteViewport)(THIS_ IDirect3DViewport2 *viewport) PURE;\n    STDMETHOD(NextViewport)(THIS_ IDirect3DViewport2 *ref,\n            IDirect3DViewport2 **viewport, DWORD flags) PURE;\n    STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMTEXTUREFORMATSCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(BeginScene)(THIS) PURE;\n    STDMETHOD(EndScene)(THIS) PURE;\n    STDMETHOD(GetDirect3D)(THIS_ IDirect3D2 **d3d) PURE;\n    /*** DrawPrimitive API ***/\n    STDMETHOD(SetCurrentViewport)(THIS_ IDirect3DViewport2 *viewport) PURE;\n    STDMETHOD(GetCurrentViewport)(THIS_ IDirect3DViewport2 **viewport) PURE;\n    STDMETHOD(SetRenderTarget)(THIS_ IDirectDrawSurface *surface, DWORD flags) PURE;\n    STDMETHOD(GetRenderTarget)(THIS_ IDirectDrawSurface **surface) PURE;\n    STDMETHOD(Begin)(THIS_ D3DPRIMITIVETYPE d3dpt,D3DVERTEXTYPE dwVertexTypeDesc,DWORD dwFlags) PURE;\n    STDMETHOD(BeginIndexed)(THIS_ D3DPRIMITIVETYPE primitive_type, D3DVERTEXTYPE vertex_type,\n            void *vertices, DWORD vertex_count, DWORD flags) PURE;\n    STDMETHOD(Vertex)(THIS_ void *vertex) PURE;\n    STDMETHOD(Index)(THIS_ WORD wVertexIndex) PURE;\n    STDMETHOD(End)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE dwRenderStateType, LPDWORD lpdwRenderState) PURE;\n    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE dwRenderStateType, DWORD dwRenderState) PURE;\n    STDMETHOD(GetLightState)(THIS_ D3DLIGHTSTATETYPE dwLightStateType, LPDWORD lpdwLightState) PURE;\n    STDMETHOD(SetLightState)(THIS_ D3DLIGHTSTATETYPE dwLightStateType, DWORD dwLightState) PURE;\n    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;\n    STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;\n    STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;\n    STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, D3DVERTEXTYPE vertex_type,\n            void *vertices, DWORD vertex_count, DWORD flags) PURE;\n    STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, D3DVERTEXTYPE vertex_type,\n            void *vertices, DWORD vertex_count, WORD *indices, DWORD index_count, DWORD flags) PURE;\n    STDMETHOD(SetClipStatus)(THIS_ D3DCLIPSTATUS *clip_status) PURE;\n    STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS *clip_status) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DDevice2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DDevice2_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirect3DDevice2_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirect3DDevice2 methods ***/\n#define IDirect3DDevice2_GetCaps(p,a,b)                        (p)->lpVtbl->GetCaps(p,a,b)\n#define IDirect3DDevice2_SwapTextureHandles(p,a,b)             (p)->lpVtbl->SwapTextureHandles(p,a,b)\n#define IDirect3DDevice2_GetStats(p,a)                         (p)->lpVtbl->GetStats(p,a)\n#define IDirect3DDevice2_AddViewport(p,a)                      (p)->lpVtbl->AddViewport(p,a)\n#define IDirect3DDevice2_DeleteViewport(p,a)                   (p)->lpVtbl->DeleteViewport(p,a)\n#define IDirect3DDevice2_NextViewport(p,a,b,c)                 (p)->lpVtbl->NextViewport(p,a,b,c)\n#define IDirect3DDevice2_EnumTextureFormats(p,a,b)             (p)->lpVtbl->EnumTextureFormats(p,a,b)\n#define IDirect3DDevice2_BeginScene(p)                         (p)->lpVtbl->BeginScene(p)\n#define IDirect3DDevice2_EndScene(p)                           (p)->lpVtbl->EndScene(p)\n#define IDirect3DDevice2_GetDirect3D(p,a)                      (p)->lpVtbl->GetDirect3D(p,a)\n#define IDirect3DDevice2_SetCurrentViewport(p,a)               (p)->lpVtbl->SetCurrentViewport(p,a)\n#define IDirect3DDevice2_GetCurrentViewport(p,a)               (p)->lpVtbl->GetCurrentViewport(p,a)\n#define IDirect3DDevice2_SetRenderTarget(p,a,b)                (p)->lpVtbl->SetRenderTarget(p,a,b)\n#define IDirect3DDevice2_GetRenderTarget(p,a)                  (p)->lpVtbl->GetRenderTarget(p,a)\n#define IDirect3DDevice2_Begin(p,a,b,c)                        (p)->lpVtbl->Begin(p,a,b,c)\n#define IDirect3DDevice2_BeginIndexed(p,a,b,c,d,e)             (p)->lpVtbl->BeginIndexed(p,a,b,c,d,e)\n#define IDirect3DDevice2_Vertex(p,a)                           (p)->lpVtbl->Vertex(p,a)\n#define IDirect3DDevice2_Index(p,a)                            (p)->lpVtbl->Index(p,a)\n#define IDirect3DDevice2_End(p,a)                              (p)->lpVtbl->End(p,a)\n#define IDirect3DDevice2_GetRenderState(p,a,b)                 (p)->lpVtbl->GetRenderState(p,a,b)\n#define IDirect3DDevice2_SetRenderState(p,a,b)                 (p)->lpVtbl->SetRenderState(p,a,b)\n#define IDirect3DDevice2_GetLightState(p,a,b)                  (p)->lpVtbl->GetLightState(p,a,b)\n#define IDirect3DDevice2_SetLightState(p,a,b)                  (p)->lpVtbl->SetLightState(p,a,b)\n#define IDirect3DDevice2_SetTransform(p,a,b)                   (p)->lpVtbl->SetTransform(p,a,b)\n#define IDirect3DDevice2_GetTransform(p,a,b)                   (p)->lpVtbl->GetTransform(p,a,b)\n#define IDirect3DDevice2_MultiplyTransform(p,a,b)              (p)->lpVtbl->MultiplyTransform(p,a,b)\n#define IDirect3DDevice2_DrawPrimitive(p,a,b,c,d,e)            (p)->lpVtbl->DrawPrimitive(p,a,b,c,d,e)\n#define IDirect3DDevice2_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f,g)\n#define IDirect3DDevice2_SetClipStatus(p,a)                    (p)->lpVtbl->SetClipStatus(p,a)\n#define IDirect3DDevice2_GetClipStatus(p,a)                    (p)->lpVtbl->GetClipStatus(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DDevice2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DDevice2_AddRef(p)             (p)->AddRef()\n#define IDirect3DDevice2_Release(p)            (p)->Release()\n/*** IDirect3DDevice2 methods ***/\n#define IDirect3DDevice2_GetCaps(p,a,b)                        (p)->GetCaps(a,b)\n#define IDirect3DDevice2_SwapTextureHandles(p,a,b)             (p)->SwapTextureHandles(a,b)\n#define IDirect3DDevice2_GetStats(p,a)                         (p)->GetStats(a)\n#define IDirect3DDevice2_AddViewport(p,a)                      (p)->AddViewport(a)\n#define IDirect3DDevice2_DeleteViewport(p,a)                   (p)->DeleteViewport(a)\n#define IDirect3DDevice2_NextViewport(p,a,b,c)                 (p)->NextViewport(a,b,c)\n#define IDirect3DDevice2_EnumTextureFormats(p,a,b)             (p)->EnumTextureFormats(a,b)\n#define IDirect3DDevice2_BeginScene(p)                         (p)->BeginScene()\n#define IDirect3DDevice2_EndScene(p)                           (p)->EndScene()\n#define IDirect3DDevice2_GetDirect3D(p,a)                      (p)->GetDirect3D(a)\n#define IDirect3DDevice2_SetCurrentViewport(p,a)               (p)->SetCurrentViewport(a)\n#define IDirect3DDevice2_GetCurrentViewport(p,a)               (p)->GetCurrentViewport(a)\n#define IDirect3DDevice2_SetRenderTarget(p,a,b)                (p)->SetRenderTarget(a,b)\n#define IDirect3DDevice2_GetRenderTarget(p,a)                  (p)->GetRenderTarget(a)\n#define IDirect3DDevice2_Begin(p,a,b,c)                        (p)->Begin(a,b,c)\n#define IDirect3DDevice2_BeginIndexed(p,a,b,c,d,e)             (p)->BeginIndexed(a,b,c,d,e)\n#define IDirect3DDevice2_Vertex(p,a)                           (p)->Vertex(a)\n#define IDirect3DDevice2_Index(p,a)                            (p)->Index(a)\n#define IDirect3DDevice2_End(p,a)                              (p)->End(a)\n#define IDirect3DDevice2_GetRenderState(p,a,b)                 (p)->GetRenderState(a,b)\n#define IDirect3DDevice2_SetRenderState(p,a,b)                 (p)->SetRenderState(a,b)\n#define IDirect3DDevice2_GetLightState(p,a,b)                  (p)->GetLightState(a,b)\n#define IDirect3DDevice2_SetLightState(p,a,b)                  (p)->SetLightState(a,b)\n#define IDirect3DDevice2_SetTransform(p,a,b)                   (p)->SetTransform(a,b)\n#define IDirect3DDevice2_GetTransform(p,a,b)                   (p)->GetTransform(a,b)\n#define IDirect3DDevice2_MultiplyTransform(p,a,b)              (p)->MultiplyTransform(a,b)\n#define IDirect3DDevice2_DrawPrimitive(p,a,b,c,d,e)            (p)->DrawPrimitive(a,b,c,d,e)\n#define IDirect3DDevice2_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitive(a,b,c,d,e,f,g)\n#define IDirect3DDevice2_SetClipStatus(p,a)                    (p)->SetClipStatus(a)\n#define IDirect3DDevice2_GetClipStatus(p,a)                    (p)->GetClipStatus(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DDevice3 interface\n */\n#define INTERFACE IDirect3DDevice3\nDECLARE_INTERFACE_(IDirect3DDevice3,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DDevice3 methods ***/\n    STDMETHOD(GetCaps)(THIS_ D3DDEVICEDESC *hal_desc, D3DDEVICEDESC *hel_desc) PURE;\n    STDMETHOD(GetStats)(THIS_ D3DSTATS *stats) PURE;\n    STDMETHOD(AddViewport)(THIS_ IDirect3DViewport3 *viewport) PURE;\n    STDMETHOD(DeleteViewport)(THIS_ IDirect3DViewport3 *viewport) PURE;\n    STDMETHOD(NextViewport)(THIS_ IDirect3DViewport3 *ref,\n            IDirect3DViewport3 **viewport, DWORD flags) PURE;\n    STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMPIXELFORMATSCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(BeginScene)(THIS) PURE;\n    STDMETHOD(EndScene)(THIS) PURE;\n    STDMETHOD(GetDirect3D)(THIS_ IDirect3D3 **d3d) PURE;\n    /*** DrawPrimitive API ***/\n    STDMETHOD(SetCurrentViewport)(THIS_ IDirect3DViewport3 *viewport) PURE;\n    STDMETHOD(GetCurrentViewport)(THIS_ IDirect3DViewport3 **viewport) PURE;\n    STDMETHOD(SetRenderTarget)(THIS_ IDirectDrawSurface4 *surface, DWORD flags) PURE;\n    STDMETHOD(GetRenderTarget)(THIS_ IDirectDrawSurface4 **surface) PURE;\n    STDMETHOD(Begin)(THIS_ D3DPRIMITIVETYPE d3dptPrimitiveType,DWORD dwVertexTypeDesc, DWORD dwFlags) PURE;\n    STDMETHOD(BeginIndexed)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf,\n            void *vertices, DWORD vertex_count, DWORD flags) PURE;\n    STDMETHOD(Vertex)(THIS_ void *vertex) PURE;\n    STDMETHOD(Index)(THIS_ WORD wVertexIndex) PURE;\n    STDMETHOD(End)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE dwRenderStateType, LPDWORD lpdwRenderState) PURE;\n    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE dwRenderStateType, DWORD dwRenderState) PURE;\n    STDMETHOD(GetLightState)(THIS_ D3DLIGHTSTATETYPE dwLightStateType, LPDWORD lpdwLightState) PURE;\n    STDMETHOD(SetLightState)(THIS_ D3DLIGHTSTATETYPE dwLightStateType, DWORD dwLightState) PURE;\n    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;\n    STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;\n    STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;\n    STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD vertex_type,\n            void *vertices, DWORD vertex_count, DWORD flags) PURE;\n    STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf,\n            void *vertices, DWORD vertex_count, WORD *indices, DWORD index_count, DWORD flags) PURE;\n    STDMETHOD(SetClipStatus)(THIS_ D3DCLIPSTATUS *clip_status) PURE;\n    STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS *clip_status) PURE;\n    STDMETHOD(DrawPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf,\n            D3DDRAWPRIMITIVESTRIDEDDATA *strided_data, DWORD vertex_count, DWORD flags) PURE;\n    STDMETHOD(DrawIndexedPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf,\n            D3DDRAWPRIMITIVESTRIDEDDATA *strided_data, DWORD vertex_count, WORD *indices, DWORD index_count,\n            DWORD flags) PURE;\n    STDMETHOD(DrawPrimitiveVB)(THIS_ D3DPRIMITIVETYPE primitive_type, struct IDirect3DVertexBuffer *vb,\n            DWORD start_vertex, DWORD vertex_count, DWORD flags) PURE;\n    STDMETHOD(DrawIndexedPrimitiveVB)(THIS_ D3DPRIMITIVETYPE primitive_type, struct IDirect3DVertexBuffer *vb,\n            WORD *indices, DWORD index_count, DWORD flags) PURE;\n    STDMETHOD(ComputeSphereVisibility)(THIS_ D3DVECTOR *centers, D3DVALUE *radii, DWORD sphere_count,\n            DWORD flags, DWORD *ret) PURE;\n    STDMETHOD(GetTexture)(THIS_ DWORD stage, IDirect3DTexture2 **texture) PURE;\n    STDMETHOD(SetTexture)(THIS_ DWORD stage, IDirect3DTexture2 *texture) PURE;\n    STDMETHOD(GetTextureStageState)(THIS_ DWORD dwStage,D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,LPDWORD lpdwState) PURE;\n    STDMETHOD(SetTextureStageState)(THIS_ DWORD dwStage,D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,DWORD dwState) PURE;\n    STDMETHOD(ValidateDevice)(THIS_ LPDWORD lpdwPasses) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DDevice3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DDevice3_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirect3DDevice3_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirect3DDevice3 methods ***/\n#define IDirect3DDevice3_GetCaps(p,a,b)                        (p)->lpVtbl->GetCaps(p,a,b)\n#define IDirect3DDevice3_GetStats(p,a)                         (p)->lpVtbl->GetStats(p,a)\n#define IDirect3DDevice3_AddViewport(p,a)                      (p)->lpVtbl->AddViewport(p,a)\n#define IDirect3DDevice3_DeleteViewport(p,a)                   (p)->lpVtbl->DeleteViewport(p,a)\n#define IDirect3DDevice3_NextViewport(p,a,b,c)                 (p)->lpVtbl->NextViewport(p,a,b,c)\n#define IDirect3DDevice3_EnumTextureFormats(p,a,b)             (p)->lpVtbl->EnumTextureFormats(p,a,b)\n#define IDirect3DDevice3_BeginScene(p)                         (p)->lpVtbl->BeginScene(p)\n#define IDirect3DDevice3_EndScene(p)                           (p)->lpVtbl->EndScene(p)\n#define IDirect3DDevice3_GetDirect3D(p,a)                      (p)->lpVtbl->GetDirect3D(p,a)\n#define IDirect3DDevice3_SetCurrentViewport(p,a)               (p)->lpVtbl->SetCurrentViewport(p,a)\n#define IDirect3DDevice3_GetCurrentViewport(p,a)               (p)->lpVtbl->GetCurrentViewport(p,a)\n#define IDirect3DDevice3_SetRenderTarget(p,a,b)                (p)->lpVtbl->SetRenderTarget(p,a,b)\n#define IDirect3DDevice3_GetRenderTarget(p,a)                  (p)->lpVtbl->GetRenderTarget(p,a)\n#define IDirect3DDevice3_Begin(p,a,b,c)                        (p)->lpVtbl->Begin(p,a,b,c)\n#define IDirect3DDevice3_BeginIndexed(p,a,b,c,d,e)             (p)->lpVtbl->BeginIndexed(p,a,b,c,d,e)\n#define IDirect3DDevice3_Vertex(p,a)                           (p)->lpVtbl->Vertex(p,a)\n#define IDirect3DDevice3_Index(p,a)                            (p)->lpVtbl->Index(p,a)\n#define IDirect3DDevice3_End(p,a)                              (p)->lpVtbl->End(p,a)\n#define IDirect3DDevice3_GetRenderState(p,a,b)                 (p)->lpVtbl->GetRenderState(p,a,b)\n#define IDirect3DDevice3_SetRenderState(p,a,b)                 (p)->lpVtbl->SetRenderState(p,a,b)\n#define IDirect3DDevice3_GetLightState(p,a,b)                  (p)->lpVtbl->GetLightState(p,a,b)\n#define IDirect3DDevice3_SetLightState(p,a,b)                  (p)->lpVtbl->SetLightState(p,a,b)\n#define IDirect3DDevice3_SetTransform(p,a,b)                   (p)->lpVtbl->SetTransform(p,a,b)\n#define IDirect3DDevice3_GetTransform(p,a,b)                   (p)->lpVtbl->GetTransform(p,a,b)\n#define IDirect3DDevice3_MultiplyTransform(p,a,b)              (p)->lpVtbl->MultiplyTransform(p,a,b)\n#define IDirect3DDevice3_DrawPrimitive(p,a,b,c,d,e)            (p)->lpVtbl->DrawPrimitive(p,a,b,c,d,e)\n#define IDirect3DDevice3_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f,g)\n#define IDirect3DDevice3_SetClipStatus(p,a)                    (p)->lpVtbl->SetClipStatus(p,a)\n#define IDirect3DDevice3_GetClipStatus(p,a)                    (p)->lpVtbl->GetClipStatus(p,a)\n#define IDirect3DDevice3_DrawPrimitiveStrided(p,a,b,c,d,e)     (p)->lpVtbl->DrawPrimitiveStrided(p,a,b,c,d,e)\n#define IDirect3DDevice3_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g)\n#define IDirect3DDevice3_DrawPrimitiveVB(p,a,b,c,d,e)          (p)->lpVtbl->DrawPrimitiveVB(p,a,b,c,d,e)\n#define IDirect3DDevice3_DrawIndexedPrimitiveVB(p,a,b,c,d,e)   (p)->lpVtbl->DrawIndexedPrimitiveVB(p,a,b,c,d,e)\n#define IDirect3DDevice3_ComputeSphereVisibility(p,a,b,c,d,e)  (p)->lpVtbl->ComputeSphereVisibility(p,a,b,c,d,e)\n#define IDirect3DDevice3_GetTexture(p,a,b)                     (p)->lpVtbl->GetTexture(p,a,b)\n#define IDirect3DDevice3_SetTexture(p,a,b)                     (p)->lpVtbl->SetTexture(p,a,b)\n#define IDirect3DDevice3_GetTextureStageState(p,a,b,c)         (p)->lpVtbl->GetTextureStageState(p,a,b,c)\n#define IDirect3DDevice3_SetTextureStageState(p,a,b,c)         (p)->lpVtbl->SetTextureStageState(p,a,b,c)\n#define IDirect3DDevice3_ValidateDevice(p,a)                   (p)->lpVtbl->ValidateDevice(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DDevice3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DDevice3_AddRef(p)             (p)->AddRef()\n#define IDirect3DDevice3_Release(p)            (p)->Release()\n/*** IDirect3DDevice3 methods ***/\n#define IDirect3DDevice3_GetCaps(p,a,b)                        (p)->GetCaps(a,b)\n#define IDirect3DDevice3_GetStats(p,a)                         (p)->GetStats(a)\n#define IDirect3DDevice3_AddViewport(p,a)                      (p)->AddViewport(a)\n#define IDirect3DDevice3_DeleteViewport(p,a)                   (p)->DeleteViewport(a)\n#define IDirect3DDevice3_NextViewport(p,a,b,c)                 (p)->NextViewport(a,b,c)\n#define IDirect3DDevice3_EnumTextureFormats(p,a,b)             (p)->EnumTextureFormats(a,b)\n#define IDirect3DDevice3_BeginScene(p)                         (p)->BeginScene()\n#define IDirect3DDevice3_EndScene(p)                           (p)->EndScene()\n#define IDirect3DDevice3_GetDirect3D(p,a)                      (p)->GetDirect3D(a)\n#define IDirect3DDevice3_SetCurrentViewport(p,a)               (p)->SetCurrentViewport(a)\n#define IDirect3DDevice3_GetCurrentViewport(p,a)               (p)->GetCurrentViewport(a)\n#define IDirect3DDevice3_SetRenderTarget(p,a,b)                (p)->SetRenderTarget(a,b)\n#define IDirect3DDevice3_GetRenderTarget(p,a)                  (p)->GetRenderTarget(a)\n#define IDirect3DDevice3_Begin(p,a,b,c)                        (p)->Begin(a,b,c)\n#define IDirect3DDevice3_BeginIndexed(p,a,b,c,d,e)             (p)->BeginIndexed(a,b,c,d,e)\n#define IDirect3DDevice3_Vertex(p,a)                           (p)->Vertex(a)\n#define IDirect3DDevice3_Index(p,a)                            (p)->Index(a)\n#define IDirect3DDevice3_End(p,a)                              (p)->End(a)\n#define IDirect3DDevice3_GetRenderState(p,a,b)                 (p)->GetRenderState(a,b)\n#define IDirect3DDevice3_SetRenderState(p,a,b)                 (p)->SetRenderState(a,b)\n#define IDirect3DDevice3_GetLightState(p,a,b)                  (p)->GetLightState(a,b)\n#define IDirect3DDevice3_SetLightState(p,a,b)                  (p)->SetLightState(a,b)\n#define IDirect3DDevice3_SetTransform(p,a,b)                   (p)->SetTransform(a,b)\n#define IDirect3DDevice3_GetTransform(p,a,b)                   (p)->GetTransform(a,b)\n#define IDirect3DDevice3_MultiplyTransform(p,a,b)              (p)->MultiplyTransform(a,b)\n#define IDirect3DDevice3_DrawPrimitive(p,a,b,c,d,e)            (p)->DrawPrimitive(a,b,c,d,e)\n#define IDirect3DDevice3_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitive(a,b,c,d,e,f,g)\n#define IDirect3DDevice3_SetClipStatus(p,a)                    (p)->SetClipStatus(a)\n#define IDirect3DDevice3_GetClipStatus(p,a)                    (p)->GetClipStatus(a)\n#define IDirect3DDevice3_DrawPrimitiveStrided(p,a,b,c,d,e)     (p)->DrawPrimitiveStrided(a,b,c,d,e)\n#define IDirect3DDevice3_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitiveStrided(a,b,c,d,e,f,g)\n#define IDirect3DDevice3_DrawPrimitiveVB(p,a,b,c,d,e)          (p)->DrawPrimitiveVB(a,b,c,d,e)\n#define IDirect3DDevice3_DrawIndexedPrimitiveVB(p,a,b,c,d,e)   (p)->DrawIndexedPrimitiveVB(a,b,c,d,e)\n#define IDirect3DDevice3_ComputeSphereVisibility(p,a,b,c,d,e)  (p)->ComputeSphereVisibility(a,b,c,d,e)\n#define IDirect3DDevice3_GetTexture(p,a,b)                     (p)->GetTexture(a,b)\n#define IDirect3DDevice3_SetTexture(p,a,b)                     (p)->SetTexture(a,b)\n#define IDirect3DDevice3_GetTextureStageState(p,a,b,c)         (p)->GetTextureStageState(a,b,c)\n#define IDirect3DDevice3_SetTextureStageState(p,a,b,c)         (p)->SetTextureStageState(a,b,c)\n#define IDirect3DDevice3_ValidateDevice(p,a)                   (p)->ValidateDevice(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DDevice7 interface\n */\n#define INTERFACE IDirect3DDevice7\nDECLARE_INTERFACE_(IDirect3DDevice7,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DDevice7 methods ***/\n    STDMETHOD(GetCaps)(THIS_ D3DDEVICEDESC7 *desc) PURE;\n    STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMPIXELFORMATSCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(BeginScene)(THIS) PURE;\n    STDMETHOD(EndScene)(THIS) PURE;\n    STDMETHOD(GetDirect3D)(THIS_ IDirect3D7 **d3d) PURE;\n    STDMETHOD(SetRenderTarget)(THIS_ IDirectDrawSurface7 *surface, DWORD flags) PURE;\n    STDMETHOD(GetRenderTarget)(THIS_ IDirectDrawSurface7 **surface) PURE;\n    STDMETHOD(Clear)(THIS_ DWORD count, D3DRECT *rects, DWORD flags, D3DCOLOR color, D3DVALUE z, DWORD stencil) PURE;\n    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;\n    STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;\n    STDMETHOD(SetViewport)(THIS_ D3DVIEWPORT7 *data) PURE;\n    STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;\n    STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT7 *data) PURE;\n    STDMETHOD(SetMaterial)(THIS_ D3DMATERIAL7 *data) PURE;\n    STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL7 *data) PURE;\n    STDMETHOD(SetLight)(THIS_ DWORD idx, D3DLIGHT7 *data) PURE;\n    STDMETHOD(GetLight)(THIS_ DWORD idx, D3DLIGHT7 *data) PURE;\n    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE dwRenderStateType, DWORD dwRenderState) PURE;\n    STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE dwRenderStateType, LPDWORD lpdwRenderState) PURE;\n    STDMETHOD(BeginStateBlock)(THIS) PURE;\n    STDMETHOD(EndStateBlock)(THIS_ LPDWORD lpdwBlockHandle) PURE;\n    STDMETHOD(PreLoad)(THIS_ IDirectDrawSurface7 *surface) PURE;\n    STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf,\n            void *vertices, DWORD vertex_count, DWORD flags) PURE;\n    STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf,\n            void *vertices, DWORD vertex_count, WORD *indices, DWORD index_count, DWORD flags) PURE;\n    STDMETHOD(SetClipStatus)(THIS_ D3DCLIPSTATUS *clip_status) PURE;\n    STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS *clip_status) PURE;\n    STDMETHOD(DrawPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf,\n            D3DDRAWPRIMITIVESTRIDEDDATA *strided_data, DWORD vertex_count, DWORD flags) PURE;\n    STDMETHOD(DrawIndexedPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf,\n            D3DDRAWPRIMITIVESTRIDEDDATA *strided_data, DWORD vertex_count, WORD *indices, DWORD index_count,\n            DWORD flags) PURE;\n    STDMETHOD(DrawPrimitiveVB)(THIS_ D3DPRIMITIVETYPE primitive_type, struct IDirect3DVertexBuffer7 *vb,\n            DWORD start_vertex, DWORD vertex_count, DWORD flags) PURE;\n    STDMETHOD(DrawIndexedPrimitiveVB)(THIS_ D3DPRIMITIVETYPE primitive_type, struct IDirect3DVertexBuffer7 *vb,\n            DWORD start_vertex, DWORD vertex_count, WORD *indices, DWORD index_count, DWORD flags) PURE;\n    STDMETHOD(ComputeSphereVisibility)(THIS_ D3DVECTOR *centers, D3DVALUE *radii, DWORD sphere_count,\n            DWORD flags, DWORD *ret) PURE;\n    STDMETHOD(GetTexture)(THIS_ DWORD stage, IDirectDrawSurface7 **surface) PURE;\n    STDMETHOD(SetTexture)(THIS_ DWORD stage, IDirectDrawSurface7 *surface) PURE;\n    STDMETHOD(GetTextureStageState)(THIS_ DWORD dwStage,D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,LPDWORD lpdwState) PURE;\n    STDMETHOD(SetTextureStageState)(THIS_ DWORD dwStage,D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,DWORD dwState) PURE;\n    STDMETHOD(ValidateDevice)(THIS_ LPDWORD lpdwPasses) PURE;\n    STDMETHOD(ApplyStateBlock)(THIS_ DWORD dwBlockHandle) PURE;\n    STDMETHOD(CaptureStateBlock)(THIS_ DWORD dwBlockHandle) PURE;\n    STDMETHOD(DeleteStateBlock)(THIS_ DWORD dwBlockHandle) PURE;\n    STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE d3dsbType,LPDWORD lpdwBlockHandle) PURE;\n    STDMETHOD(Load)(THIS_ IDirectDrawSurface7 *dst_surface, POINT *dst_point,\n            IDirectDrawSurface7 *src_surface, RECT *src_rect, DWORD flags) PURE;\n    STDMETHOD(LightEnable)(THIS_ DWORD dwLightIndex,BOOL bEnable) PURE;\n    STDMETHOD(GetLightEnable)(THIS_ DWORD dwLightIndex,BOOL *pbEnable) PURE;\n    STDMETHOD(SetClipPlane)(THIS_ DWORD dwIndex,D3DVALUE *pPlaneEquation) PURE;\n    STDMETHOD(GetClipPlane)(THIS_ DWORD dwIndex,D3DVALUE *pPlaneEquation) PURE;\n    STDMETHOD(GetInfo)(THIS_ DWORD info_id, void *info, DWORD info_size) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DDevice7_QueryInterface(p,a,b)                        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DDevice7_AddRef(p)                                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DDevice7_Release(p)                                   (p)->lpVtbl->Release(p)\n/*** IDirect3DDevice7 methods ***/\n#define IDirect3DDevice7_GetCaps(p,a)                                 (p)->lpVtbl->GetCaps(p,a)\n#define IDirect3DDevice7_EnumTextureFormats(p,a,b)                    (p)->lpVtbl->EnumTextureFormats(p,a,b)\n#define IDirect3DDevice7_BeginScene(p)                                (p)->lpVtbl->BeginScene(p)\n#define IDirect3DDevice7_EndScene(p)                                  (p)->lpVtbl->EndScene(p)\n#define IDirect3DDevice7_GetDirect3D(p,a)                             (p)->lpVtbl->GetDirect3D(p,a)\n#define IDirect3DDevice7_SetRenderTarget(p,a,b)                       (p)->lpVtbl->SetRenderTarget(p,a,b)\n#define IDirect3DDevice7_GetRenderTarget(p,a)                         (p)->lpVtbl->GetRenderTarget(p,a)\n#define IDirect3DDevice7_Clear(p,a,b,c,d,e,f)                         (p)->lpVtbl->Clear(p,a,b,c,d,e,f)\n#define IDirect3DDevice7_SetTransform(p,a,b)                          (p)->lpVtbl->SetTransform(p,a,b)\n#define IDirect3DDevice7_GetTransform(p,a,b)                          (p)->lpVtbl->GetTransform(p,a,b)\n#define IDirect3DDevice7_SetViewport(p,a)                             (p)->lpVtbl->SetViewport(p,a)\n#define IDirect3DDevice7_MultiplyTransform(p,a,b)                     (p)->lpVtbl->MultiplyTransform(p,a,b)\n#define IDirect3DDevice7_GetViewport(p,a)                             (p)->lpVtbl->GetViewport(p,a)\n#define IDirect3DDevice7_SetMaterial(p,a)                             (p)->lpVtbl->SetMaterial(p,a)\n#define IDirect3DDevice7_GetMaterial(p,a)                             (p)->lpVtbl->GetMaterial(p,a)\n#define IDirect3DDevice7_SetLight(p,a,b)                              (p)->lpVtbl->SetLight(p,a,b)\n#define IDirect3DDevice7_GetLight(p,a,b)                              (p)->lpVtbl->GetLight(p,a,b)\n#define IDirect3DDevice7_SetRenderState(p,a,b)                        (p)->lpVtbl->SetRenderState(p,a,b)\n#define IDirect3DDevice7_GetRenderState(p,a,b)                        (p)->lpVtbl->GetRenderState(p,a,b)\n#define IDirect3DDevice7_BeginStateBlock(p)                           (p)->lpVtbl->BeginStateBlock(p)\n#define IDirect3DDevice7_EndStateBlock(p,a)                           (p)->lpVtbl->EndStateBlock(p,a)\n#define IDirect3DDevice7_PreLoad(p,a)                                 (p)->lpVtbl->PreLoad(p,a)\n#define IDirect3DDevice7_DrawPrimitive(p,a,b,c,d,e)                   (p)->lpVtbl->DrawPrimitive(p,a,b,c,d,e)\n#define IDirect3DDevice7_DrawIndexedPrimitive(p,a,b,c,d,e,f,g)        (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f,g)\n#define IDirect3DDevice7_SetClipStatus(p,a)                           (p)->lpVtbl->SetClipStatus(p,a)\n#define IDirect3DDevice7_GetClipStatus(p,a)                           (p)->lpVtbl->GetClipStatus(p,a)\n#define IDirect3DDevice7_DrawPrimitiveStrided(p,a,b,c,d,e)            (p)->lpVtbl->DrawPrimitiveStrided(p,a,b,c,d,e)\n#define IDirect3DDevice7_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g)\n#define IDirect3DDevice7_DrawPrimitiveVB(p,a,b,c,d,e)                 (p)->lpVtbl->DrawPrimitiveVB(p,a,b,c,d,e)\n#define IDirect3DDevice7_DrawIndexedPrimitiveVB(p,a,b,c,d,e,f,g)      (p)->lpVtbl->DrawIndexedPrimitiveVB(p,a,b,c,d,e,f,g)\n#define IDirect3DDevice7_ComputeSphereVisibility(p,a,b,c,d,e)         (p)->lpVtbl->ComputeSphereVisibility(p,a,b,c,d,e)\n#define IDirect3DDevice7_GetTexture(p,a,b)                            (p)->lpVtbl->GetTexture(p,a,b)\n#define IDirect3DDevice7_SetTexture(p,a,b)                            (p)->lpVtbl->SetTexture(p,a,b)\n#define IDirect3DDevice7_GetTextureStageState(p,a,b,c)                (p)->lpVtbl->GetTextureStageState(p,a,b,c)\n#define IDirect3DDevice7_SetTextureStageState(p,a,b,c)                (p)->lpVtbl->SetTextureStageState(p,a,b,c)\n#define IDirect3DDevice7_ValidateDevice(p,a)                          (p)->lpVtbl->ValidateDevice(p,a)\n#define IDirect3DDevice7_ApplyStateBlock(p,a)                         (p)->lpVtbl->ApplyStateBlock(p,a)\n#define IDirect3DDevice7_CaptureStateBlock(p,a)                       (p)->lpVtbl->CaptureStateBlock(p,a)\n#define IDirect3DDevice7_DeleteStateBlock(p,a)                        (p)->lpVtbl->DeleteStateBlock(p,a)\n#define IDirect3DDevice7_CreateStateBlock(p,a,b)                      (p)->lpVtbl->CreateStateBlock(p,a,b)\n#define IDirect3DDevice7_Load(p,a,b,c,d,e)                            (p)->lpVtbl->Load(p,a,b,c,d,e)\n#define IDirect3DDevice7_LightEnable(p,a,b)                           (p)->lpVtbl->LightEnable(p,a,b)\n#define IDirect3DDevice7_GetLightEnable(p,a,b)                        (p)->lpVtbl->GetLightEnable(p,a,b)\n#define IDirect3DDevice7_SetClipPlane(p,a,b)                          (p)->lpVtbl->SetClipPlane(p,a,b)\n#define IDirect3DDevice7_GetClipPlane(p,a,b)                          (p)->lpVtbl->GetClipPlane(p,a,b)\n#define IDirect3DDevice7_GetInfo(p,a,b,c)                             (p)->lpVtbl->GetInfo(p,a,b,c)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DDevice7_QueryInterface(p,a,b)                        (p)->QueryInterface(a,b)\n#define IDirect3DDevice7_AddRef(p)                                    (p)->AddRef()\n#define IDirect3DDevice7_Release(p)                                   (p)->Release()\n/*** IDirect3DDevice7 methods ***/\n#define IDirect3DDevice7_GetCaps(p,a)                                 (p)->GetCaps(a)\n#define IDirect3DDevice7_EnumTextureFormats(p,a,b)                    (p)->EnumTextureFormats(a,b)\n#define IDirect3DDevice7_BeginScene(p)                                (p)->BeginScene()\n#define IDirect3DDevice7_EndScene(p)                                  (p)->EndScene()\n#define IDirect3DDevice7_GetDirect3D(p,a)                             (p)->GetDirect3D(a)\n#define IDirect3DDevice7_SetRenderTarget(p,a,b)                       (p)->SetRenderTarget(a,b)\n#define IDirect3DDevice7_GetRenderTarget(p,a)                         (p)->GetRenderTarget(a)\n#define IDirect3DDevice7_Clear(p,a,b,c,d,e,f)                         (p)->Clear(a,b,c,d,e,f)\n#define IDirect3DDevice7_SetTransform(p,a,b)                          (p)->SetTransform(a,b)\n#define IDirect3DDevice7_GetTransform(p,a,b)                          (p)->GetTransform(a,b)\n#define IDirect3DDevice7_SetViewport(p,a)                             (p)->SetViewport(a)\n#define IDirect3DDevice7_MultiplyTransform(p,a,b)                     (p)->MultiplyTransform(a,b)\n#define IDirect3DDevice7_GetViewport(p,a)                             (p)->GetViewport(a)\n#define IDirect3DDevice7_SetMaterial(p,a)                             (p)->SetMaterial(a)\n#define IDirect3DDevice7_GetMaterial(p,a)                             (p)->GetMaterial(a)\n#define IDirect3DDevice7_SetLight(p,a,b)                              (p)->SetLight(a,b)\n#define IDirect3DDevice7_GetLight(p,a,b)                              (p)->GetLight(a,b)\n#define IDirect3DDevice7_SetRenderState(p,a,b)                        (p)->SetRenderState(a,b)\n#define IDirect3DDevice7_GetRenderState(p,a,b)                        (p)->GetRenderState(a,b)\n#define IDirect3DDevice7_BeginStateBlock(p)                           (p)->BeginStateBlock()\n#define IDirect3DDevice7_EndStateBlock(p,a)                           (p)->EndStateBlock(a)\n#define IDirect3DDevice7_PreLoad(p,a)                                 (p)->PreLoad(a)\n#define IDirect3DDevice7_DrawPrimitive(p,a,b,c,d,e)                   (p)->DrawPrimitive(a,b,c,d,e)\n#define IDirect3DDevice7_DrawIndexedPrimitive(p,a,b,c,d,e,f,g)        (p)->DrawIndexedPrimitive(a,b,c,d,e,f,g)\n#define IDirect3DDevice7_SetClipStatus(p,a)                           (p)->SetClipStatus(a)\n#define IDirect3DDevice7_GetClipStatus(p,a)                           (p)->GetClipStatus(a)\n#define IDirect3DDevice7_DrawPrimitiveStrided(p,a,b,c,d,e)            (p)->DrawPrimitiveStrided(a,b,c,d,e)\n#define IDirect3DDevice7_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitiveStrided(a,b,c,d,e,f,g)\n#define IDirect3DDevice7_DrawPrimitiveVB(p,a,b,c,d,e)                 (p)->DrawPrimitiveVB(a,b,c,d,e)\n#define IDirect3DDevice7_DrawIndexedPrimitiveVB(p,a,b,c,d,e,f,g)      (p)->DrawIndexedPrimitiveVB(a,b,c,d,e,f,g)\n#define IDirect3DDevice7_ComputeSphereVisibility(p,a,b,c,d,e)         (p)->ComputeSphereVisibility(a,b,c,d,e)\n#define IDirect3DDevice7_GetTexture(p,a,b)                            (p)->GetTexture(a,b)\n#define IDirect3DDevice7_SetTexture(p,a,b)                            (p)->SetTexture(a,b)\n#define IDirect3DDevice7_GetTextureStageState(p,a,b,c)                (p)->GetTextureStageState(a,b,c)\n#define IDirect3DDevice7_SetTextureStageState(p,a,b,c)                (p)->SetTextureStageState(a,b,c)\n#define IDirect3DDevice7_ValidateDevice(p,a)                          (p)->ValidateDevice(a)\n#define IDirect3DDevice7_ApplyStateBlock(p,a)                         (p)->ApplyStateBlock(a)\n#define IDirect3DDevice7_CaptureStateBlock(p,a)                       (p)->CaptureStateBlock(a)\n#define IDirect3DDevice7_DeleteStateBlock(p,a)                        (p)->DeleteStateBlock(a)\n#define IDirect3DDevice7_CreateStateBlock(p,a,b)                      (p)->CreateStateBlock(a,b)\n#define IDirect3DDevice7_Load(p,a,b,c,d,e)                            (p)->Load(a,b,c,d,e)\n#define IDirect3DDevice7_LightEnable(p,a,b)                           (p)->LightEnable(a,b)\n#define IDirect3DDevice7_GetLightEnable(p,a,b)                        (p)->GetLightEnable(a,b)\n#define IDirect3DDevice7_SetClipPlane(p,a,b)                          (p)->SetClipPlane(a,b)\n#define IDirect3DDevice7_GetClipPlane(p,a,b)                          (p)->GetClipPlane(a,b)\n#define IDirect3DDevice7_GetInfo(p,a,b,c)                             (p)->GetInfo(a,b,c)\n#endif\n\n\n\n/*****************************************************************************\n * IDirect3DVertexBuffer interface\n */\n#define INTERFACE IDirect3DVertexBuffer\nDECLARE_INTERFACE_(IDirect3DVertexBuffer,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DVertexBuffer methods ***/\n    STDMETHOD(Lock)(THIS_ DWORD flags, void **data, DWORD *data_size) PURE;\n    STDMETHOD(Unlock)(THIS) PURE;\n    STDMETHOD(ProcessVertices)(THIS_ DWORD vertex_op, DWORD dst_idx, DWORD count,\n            IDirect3DVertexBuffer *src_buffer, DWORD src_idx,\n            IDirect3DDevice3 *device, DWORD flags) PURE;\n    STDMETHOD(GetVertexBufferDesc)(THIS_ D3DVERTEXBUFFERDESC *desc) PURE;\n    STDMETHOD(Optimize)(THIS_ IDirect3DDevice3 *device, DWORD flags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DVertexBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DVertexBuffer_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirect3DVertexBuffer_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirect3DVertexBuffer methods ***/\n#define IDirect3DVertexBuffer_Lock(p,a,b,c)                    (p)->lpVtbl->Lock(p,a,b,c)\n#define IDirect3DVertexBuffer_Unlock(p)                        (p)->lpVtbl->Unlock(p)\n#define IDirect3DVertexBuffer_ProcessVertices(p,a,b,c,d,e,f,g) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f,g)\n#define IDirect3DVertexBuffer_GetVertexBufferDesc(p,a)         (p)->lpVtbl->GetVertexBufferDesc(p,a)\n#define IDirect3DVertexBuffer_Optimize(p,a,b)                  (p)->lpVtbl->Optimize(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DVertexBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DVertexBuffer_AddRef(p)             (p)->AddRef()\n#define IDirect3DVertexBuffer_Release(p)            (p)->Release()\n/*** IDirect3DVertexBuffer methods ***/\n#define IDirect3DVertexBuffer_Lock(p,a,b,c)                    (p)->Lock(a,b,c)\n#define IDirect3DVertexBuffer_Unlock(p)                        (p)->Unlock()\n#define IDirect3DVertexBuffer_ProcessVertices(p,a,b,c,d,e,f,g) (p)->ProcessVertices(a,b,c,d,e,f,g)\n#define IDirect3DVertexBuffer_GetVertexBufferDesc(p,a)         (p)->GetVertexBufferDesc(a)\n#define IDirect3DVertexBuffer_Optimize(p,a,b)                  (p)->Optimize(a,b)\n#endif\n\n/*****************************************************************************\n * IDirect3DVertexBuffer7 interface\n */\n#define INTERFACE IDirect3DVertexBuffer7\nDECLARE_INTERFACE_(IDirect3DVertexBuffer7,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DVertexBuffer7 methods ***/\n    STDMETHOD(Lock)(THIS_ DWORD flags, void **data, DWORD *data_size) PURE;\n    STDMETHOD(Unlock)(THIS) PURE;\n    STDMETHOD(ProcessVertices)(THIS_ DWORD vertex_op, DWORD dst_idx, DWORD count,\n            IDirect3DVertexBuffer7 *src_buffer, DWORD src_idx,\n            IDirect3DDevice7 *device, DWORD flags) PURE;\n    STDMETHOD(GetVertexBufferDesc)(THIS_ D3DVERTEXBUFFERDESC *desc) PURE;\n    STDMETHOD(Optimize)(THIS_ IDirect3DDevice7 *device, DWORD flags) PURE;\n    STDMETHOD(ProcessVerticesStrided)(THIS_ DWORD vertex_op, DWORD dst_idx, DWORD count,\n            D3DDRAWPRIMITIVESTRIDEDDATA *data, DWORD fvf, IDirect3DDevice7 *device, DWORD flags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DVertexBuffer7_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DVertexBuffer7_AddRef(p)                               (p)->lpVtbl->AddRef(p)\n#define IDirect3DVertexBuffer7_Release(p)                              (p)->lpVtbl->Release(p)\n/*** IDirect3DVertexBuffer7 methods ***/\n#define IDirect3DVertexBuffer7_Lock(p,a,b,c)                           (p)->lpVtbl->Lock(p,a,b,c)\n#define IDirect3DVertexBuffer7_Unlock(p)                               (p)->lpVtbl->Unlock(p)\n#define IDirect3DVertexBuffer7_ProcessVertices(p,a,b,c,d,e,f,g)        (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f,g)\n#define IDirect3DVertexBuffer7_GetVertexBufferDesc(p,a)                (p)->lpVtbl->GetVertexBufferDesc(p,a)\n#define IDirect3DVertexBuffer7_Optimize(p,a,b)                         (p)->lpVtbl->Optimize(p,a,b)\n#define IDirect3DVertexBuffer7_ProcessVerticesStrided(p,a,b,c,d,e,f,g) (p)->lpVtbl->ProcessVerticesStrided(p,a,b,c,d,e,f,g)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DVertexBuffer7_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)\n#define IDirect3DVertexBuffer7_AddRef(p)                               (p)->AddRef()\n#define IDirect3DVertexBuffer7_Release(p)                              (p)->Release()\n/*** IDirect3DVertexBuffer7 methods ***/\n#define IDirect3DVertexBuffer7_Lock(p,a,b,c)                           (p)->Lock(a,b,c)\n#define IDirect3DVertexBuffer7_Unlock(p)                               (p)->Unlock()\n#define IDirect3DVertexBuffer7_ProcessVertices(p,a,b,c,d,e,f,g)        (p)->ProcessVertices(a,b,c,d,e,f,g)\n#define IDirect3DVertexBuffer7_GetVertexBufferDesc(p,a)                (p)->GetVertexBufferDesc(a)\n#define IDirect3DVertexBuffer7_Optimize(p,a,b)                         (p)->Optimize(a,b)\n#define IDirect3DVertexBuffer7_ProcessVerticesStrided(p,a,b,c,d,e,f,g) (p)->ProcessVerticesStrided(a,b,c,d,e,f,g)\n#endif\n\n#endif /* __WINE_D3D_H */\n"
  },
  {
    "path": "wine/windows/d3d10.idl",
    "content": "/*\n * Copyright 2007 Andras Kovacs\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"dxgi.idl\";\nimport \"d3dcommon.idl\";\n\ncpp_quote(\"#ifndef _D3D10_CONSTANTS\")\ncpp_quote(\"#define _D3D10_CONSTANTS\")\nconst float D3D10_DEFAULT_BLEND_FACTOR_ALPHA                                            = 1.0;\nconst float D3D10_DEFAULT_BLEND_FACTOR_BLUE                                             = 1.0;\nconst float D3D10_DEFAULT_BLEND_FACTOR_GREEN                                            = 1.0;\nconst float D3D10_DEFAULT_BLEND_FACTOR_RED                                              = 1.0;\nconst float D3D10_DEFAULT_BORDER_COLOR_COMPONENT                                        = 0.0;\nconst float D3D10_DEFAULT_SLOPE_SCALED_DEPTH_BIAS                                       = 0.0;\nconst float D3D10_DEFAULT_DEPTH_BIAS_CLAMP                                              = 0.0;\nconst float D3D10_DEFAULT_MAX_ANISOTROPY                                                = 16.0;\nconst float D3D10_DEFAULT_MIP_LOD_BIAS                                                  = 0.0;\nconst float D3D10_DEFAULT_VIEWPORT_MAX_DEPTH                                            = 0.0;\nconst float D3D10_DEFAULT_VIEWPORT_MIN_DEPTH                                            = 0.0;\nconst float D3D10_FLOAT16_FUSED_TOLERANCE_IN_ULP                                        = 0.6;\nconst float D3D10_FLOAT32_MAX                                                           = 3.402823466e+38;\nconst float D3D10_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP                                   = 0.6;\nconst float D3D10_FLOAT_TO_SRGB_EXPONENT_DENOMINATOR                                    = 2.4;\nconst float D3D10_FLOAT_TO_SRGB_EXPONENT_NUMERATOR                                      = 1.0;\nconst float D3D10_FLOAT_TO_SRGB_OFFSET                                                  = 0.055;\nconst float D3D10_FLOAT_TO_SRGB_SCALE_1                                                 = 12.92;\nconst float D3D10_FLOAT_TO_SRGB_SCALE_2                                                 = 1.055;\nconst float D3D10_FLOAT_TO_SRGB_THRESHOLD                                               = 0.0031308;\nconst float D3D10_FTOI_INSTRUCTION_MAX_INPUT                                            = 2147483647.999;\nconst float D3D10_FTOI_INSTRUCTION_MIN_INPUT                                            = -2147483648.999;\nconst float D3D10_FTOU_INSTRUCTION_MAX_INPUT                                            = 4294967295.999;\nconst float D3D10_FTOU_INSTRUCTION_MIN_INPUT                                            = 0.0;\nconst float D3D10_LINEAR_GAMMA                                                          = 1.0;\nconst float D3D10_MAX_BORDER_COLOR_COMPONENT                                            = 1.0;\nconst float D3D10_MAX_DEPTH                                                             = 1.0;\nconst float D3D10_MAX_POSITION_VALUE                                                    = 3.402823466e+34;\nconst float D3D10_MIN_BORDER_COLOR_COMPONENT                                            = 0.0;\nconst float D3D10_MIN_DEPTH                                                             = 0.0;\nconst float D3D10_MIP_LOD_BIAS_MAX                                                      = 15.99;\nconst float D3D10_MIP_LOD_BIAS_MIN                                                      = -16.0;\nconst float D3D10_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT                                  = 0.5;\nconst float D3D10_MULTISAMPLE_ANTIALIAS_LINE_WIDTH                                      = 1.4;\nconst float D3D10_SRGB_GAMMA                                                            = 2.2;\nconst float D3D10_SRGB_TO_FLOAT_DENOMINATOR_1                                           = 12.92;\nconst float D3D10_SRGB_TO_FLOAT_DENOMINATOR_2                                           = 1.055;\nconst float D3D10_SRGB_TO_FLOAT_EXPONENT                                                = 2.4;\nconst float D3D10_SRGB_TO_FLOAT_OFFSET                                                  = 0.055;\nconst float D3D10_SRGB_TO_FLOAT_THRESHOLD                                               = 0.04045;\nconst float D3D10_SRGB_TO_FLOAT_TOLERANCE_IN_ULP                                        = 0.5;\nconst float D3D10_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT                           = 0.0;\nconst float D3D_SPEC_VERSION                                                            = 1.050005;\nconst unsigned int D3D10_16BIT_INDEX_STRIP_CUT_VALUE                                    = 0xffff;\nconst unsigned int D3D10_32BIT_INDEX_STRIP_CUT_VALUE                                    = 0xffffffff;\nconst unsigned int D3D10_8BIT_INDEX_STRIP_CUT_VALUE                                     = 0xff;\nconst unsigned int D3D10_ARRAY_AXIS_ADDRESS_RANGE_BIT_COUNT                             = 9;\nconst unsigned int D3D10_CLIP_OR_CULL_DISTANCE_COUNT                                    = 8;\nconst unsigned int D3D10_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT                            = 2;\nconst unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT                    = 14;\nconst unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS                        = 4;\nconst unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT               = 32;\nconst unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT                     = 15;\nconst unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS               = 4;\nconst unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT                    = 15;\nconst unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST           = 1;\nconst unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS               = 1;\nconst unsigned int D3D10_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT                         = 64;\nconst unsigned int D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS     = 4;\nconst unsigned int D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT          = 1;\nconst unsigned int D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1;\nconst unsigned int D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS     = 1;\nconst unsigned int D3D10_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT               = 32;\nconst unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS                = 1;\nconst unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT                     = 128;\nconst unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST            = 1;\nconst unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS                = 1;\nconst unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT                         = 128;\nconst unsigned int D3D10_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS                       = 1;\nconst unsigned int D3D10_COMMONSHADER_SAMPLER_REGISTER_COUNT                            = 16;\nconst unsigned int D3D10_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST                   = 1;\nconst unsigned int D3D10_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS                       = 1;\nconst unsigned int D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT                                = 16;\nconst unsigned int D3D10_COMMONSHADER_SUBROUTINE_NESTING_LIMIT                          = 32;\nconst unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_COMPONENTS                          = 4;\nconst unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT                 = 32;\nconst unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_COUNT                               = 4096;\nconst unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_READS_PER_INST                      = 3;\nconst unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_READ_PORTS                          = 3;\nconst unsigned int D3D10_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX                      = 10;\nconst int D3D10_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN                               = -10;\nconst int D3D10_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE                                  = -8;\nconst unsigned int D3D10_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE                         = 7;\nconst unsigned int D3D10_DEFAULT_DEPTH_BIAS                                             = 0;\nconst unsigned int D3D10_DEFAULT_RENDER_TARGET_ARRAY_INDEX                              = 0;\nconst unsigned int D3D10_DEFAULT_SAMPLE_MASK                                            = 0xffffffff;\nconst unsigned int D3D10_DEFAULT_SCISSOR_ENDX                                           = 0;\nconst unsigned int D3D10_DEFAULT_SCISSOR_ENDY                                           = 0;\nconst unsigned int D3D10_DEFAULT_SCISSOR_STARTX                                         = 0;\nconst unsigned int D3D10_DEFAULT_SCISSOR_STARTY                                         = 0;\nconst unsigned int D3D10_DEFAULT_STENCIL_READ_MASK                                      = 0xff;\nconst unsigned int D3D10_DEFAULT_STENCIL_REFERENCE                                      = 0;\nconst unsigned int D3D10_DEFAULT_STENCIL_WRITE_MASK                                     = 0xff;\nconst unsigned int D3D10_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX                         = 0;\nconst unsigned int D3D10_DEFAULT_VIEWPORT_HEIGHT                                        = 0;\nconst unsigned int D3D10_DEFAULT_VIEWPORT_TOPLEFTX                                      = 0;\nconst unsigned int D3D10_DEFAULT_VIEWPORT_TOPLEFTY                                      = 0;\nconst unsigned int D3D10_DEFAULT_VIEWPORT_WIDTH                                         = 0;\nconst unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_COMPONENTS                        = 1;\nconst unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_COMPONENT_BIT_COUNT               = 32;\nconst unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_COUNT                             = 1;\nconst unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_READS_PER_INST                    = 2;\nconst unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_READ_PORTS                        = 1;\nconst unsigned int D3D10_GS_INPUT_REGISTER_COMPONENTS                                   = 4;\nconst unsigned int D3D10_GS_INPUT_REGISTER_COMPONENT_BIT_COUNT                          =32;\nconst unsigned int D3D10_GS_INPUT_REGISTER_COUNT                                        = 16;\nconst unsigned int D3D10_GS_INPUT_REGISTER_READS_PER_INST                               = 2;\nconst unsigned int D3D10_GS_INPUT_REGISTER_READ_PORTS                                   = 1;\nconst unsigned int D3D10_GS_INPUT_REGISTER_VERTICES                                     = 6;\nconst unsigned int D3D10_GS_OUTPUT_ELEMENTS                                             = 32;\nconst unsigned int D3D10_GS_OUTPUT_REGISTER_COMPONENTS                                  = 4;\nconst unsigned int D3D10_GS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT                         = 32;\nconst unsigned int D3D10_GS_OUTPUT_REGISTER_COUNT                                       = 32;\nconst unsigned int D3D10_IA_DEFAULT_INDEX_BUFFER_OFFSET_IN_BYTES                        = 0;\nconst unsigned int D3D10_IA_DEFAULT_PRIMITIVE_TOPOLOGY                                  = 0;\nconst unsigned int D3D10_IA_DEFAULT_VERTEX_BUFFER_OFFSET_IN_BYTES                       = 0;\nconst unsigned int D3D10_IA_INDEX_INPUT_RESOURCE_SLOT_COUNT                             = 1;\nconst unsigned int D3D10_IA_INSTANCE_ID_BIT_COUNT                                       = 32;\nconst unsigned int D3D10_IA_INTEGER_ARITHMETIC_BIT_COUNT                                = 32;\nconst unsigned int D3D10_IA_PRIMITIVE_ID_BIT_COUNT                                      = 32;\nconst unsigned int D3D10_IA_VERTEX_ID_BIT_COUNT                                         = 32;\nconst unsigned int D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT                            = 16;\nconst unsigned int D3D10_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS                  = 64;\nconst unsigned int D3D10_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT                        = 16;\nconst unsigned int D3D10_INTEGER_DIVIDE_BY_ZERO_QUOTIENT                                = 0xffffffff;\nconst unsigned int D3D10_INTEGER_DIVIDE_BY_ZERO_REMAINDER                               = 0xffffffff;\nconst unsigned int D3D10_MAX_MAXANISOTROPY                                              = 16;\nconst unsigned int D3D10_MAX_MULTISAMPLE_SAMPLE_COUNT                                   = 32;\nconst unsigned int D3D10_MAX_TEXTURE_DIMENSION_2_TO_EXP                                 = 17;\nconst unsigned int D3D10_MIN_MAXANISOTROPY                                              = 0;\nconst unsigned int D3D10_MIP_LOD_FRACTIONAL_BIT_COUNT                                   = 6;\nconst unsigned int D3D10_MIP_LOD_RANGE_BIT_COUNT                                        = 8;\nconst unsigned int D3D10_NONSAMPLE_FETCH_OUT_OF_RANGE_ACCESS_RESULT                     = 0;\nconst unsigned int D3D10_PIXEL_ADDRESS_RANGE_BIT_COUNT                                  = 13;\nconst unsigned int D3D10_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT                      = 15;\nconst unsigned int D3D10_PS_FRONTFACING_DEFAULT_VALUE                                   = 0xffffffff;\nconst unsigned int D3D10_PS_FRONTFACING_FALSE_VALUE                                     = 0;\nconst unsigned int D3D10_PS_FRONTFACING_TRUE_VALUE                                      = 0xffffffff;\nconst unsigned int D3D10_PS_INPUT_REGISTER_COMPONENTS                                   = 4;\nconst unsigned int D3D10_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT                          = 32;\nconst unsigned int D3D10_PS_INPUT_REGISTER_COUNT                                        = 32;\nconst unsigned int D3D10_PS_INPUT_REGISTER_READS_PER_INST                               = 2;\nconst unsigned int D3D10_PS_INPUT_REGISTER_READ_PORTS                                   = 1;\nconst unsigned int D3D10_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS                            = 1;\nconst unsigned int D3D10_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT                   = 32;\nconst unsigned int D3D10_PS_OUTPUT_DEPTH_REGISTER_COUNT                                 = 1;\nconst unsigned int D3D10_PS_OUTPUT_REGISTER_COMPONENTS                                  = 4;\nconst unsigned int D3D10_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT                         = 32;\nconst unsigned int D3D10_PS_OUTPUT_REGISTER_COUNT                                       = 8;\nconst unsigned int D3D10_REQ_BLEND_OBJECT_COUNT_PER_CONTEXT                             = 4096;\nconst unsigned int D3D10_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP                       = 27;\nconst unsigned int D3D10_REQ_CONSTANT_BUFFER_ELEMENT_COUNT                              = 4096;\nconst unsigned int D3D10_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_CONTEXT                     = 4096;\nconst unsigned int D3D10_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP                           = 32;\nconst unsigned int D3D10_REQ_DRAW_VERTEX_COUNT_2_TO_EXP                                 = 32;\nconst unsigned int D3D10_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION                = 8192;\nconst unsigned int D3D10_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT                 = 1024;\nconst unsigned int D3D10_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT                    = 4096;\nconst unsigned int D3D10_REQ_MAXANISOTROPY                                              = 16;\nconst unsigned int D3D10_REQ_MIP_LEVELS                                                 = 14;\nconst unsigned int D3D10_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES                      = 2048;\nconst unsigned int D3D10_REQ_RASTERIZER_OBJECT_COUNT_PER_CONTEXT                        = 4096;\nconst unsigned int D3D10_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH                              = 8192;\nconst unsigned int D3D10_REQ_RESOURCE_SIZE_IN_MEGABYTES                                 = 128;\nconst unsigned int D3D10_REQ_RESOURCE_VIEW_COUNT_PER_CONTEXT_2_TO_EXP                   = 20;\nconst unsigned int D3D10_REQ_SAMPLER_OBJECT_COUNT_PER_CONTEXT                           = 4096;\nconst unsigned int D3D10_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION                             = 512;\nconst unsigned int D3D10_REQ_TEXTURE1D_U_DIMENSION                                      = 8192;\nconst unsigned int D3D10_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION                             = 512;\nconst unsigned int D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION                                 = 8192;\nconst unsigned int D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION                               = 2048;\nconst unsigned int D3D10_REQ_TEXTURECUBE_DIMENSION                                      = 8192;\nconst unsigned int D3D10_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL                   = 0;\nconst unsigned int D3D10_SHADER_MAJOR_VERSION                                           = 4;\nconst unsigned int D3D10_SHADER_MINOR_VERSION                                           = 0;\nconst unsigned int D3D10_SHIFT_INSTRUCTION_PAD_VALUE                                    = 0;\nconst unsigned int D3D10_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT                        = 5;\nconst unsigned int D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT                               = 8;\nconst unsigned int D3D10_SO_BUFFER_MAX_STRIDE_IN_BYTES                                  = 2048;\nconst unsigned int D3D10_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES                            = 256;\nconst unsigned int D3D10_SO_BUFFER_SLOT_COUNT                                           = 4;\nconst unsigned int D3D10_SO_DDI_REGISTER_INDEX_DENOTING_GAP                             = 0xffffffff;\nconst unsigned int D3D10_SO_MULTIPLE_BUFFER_ELEMENTS_PER_BUFFER                         = 1;\nconst unsigned int D3D10_SO_SINGLE_BUFFER_COMPONENT_LIMIT                               = 64;\nconst unsigned int D3D10_STANDARD_COMPONENT_BIT_COUNT                                   = 32;\nconst unsigned int D3D10_STANDARD_COMPONENT_BIT_COUNT_DOUBLED                           = 64;\nconst unsigned int D3D10_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE               = 4;\nconst unsigned int D3D10_STANDARD_PIXEL_COMPONENT_COUNT                                 = 128;\nconst unsigned int D3D10_STANDARD_PIXEL_ELEMENT_COUNT                                   = 32;\nconst unsigned int D3D10_STANDARD_VECTOR_SIZE                                           = 4;\nconst unsigned int D3D10_STANDARD_VERTEX_ELEMENT_COUNT                                  = 16;\nconst unsigned int D3D10_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT                          = 64;\nconst unsigned int D3D10_SUBPIXEL_FRACTIONAL_BIT_COUNT                                  = 8;\nconst unsigned int D3D10_SUBTEXEL_FRACTIONAL_BIT_COUNT                                  = 6;\nconst unsigned int D3D10_TEXEL_ADDRESS_RANGE_BIT_COUNT                                  = 18;\nconst unsigned int D3D10_UNBOUND_MEMORY_ACCESS_RESULT                                   = 0;\nconst unsigned int D3D10_VIEWPORT_AND_SCISSORRECT_MAX_INDEX                             = 15;\nconst unsigned int D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE             = 16;\nconst unsigned int D3D10_VIEWPORT_BOUNDS_MAX                                            = 16383;\nconst int D3D10_VIEWPORT_BOUNDS_MIN                                                     = -16384;\nconst unsigned int D3D10_VS_INPUT_REGISTER_COMPONENTS                                   = 4;\nconst unsigned int D3D10_VS_INPUT_REGISTER_COMPONENT_BIT_COUNT                          = 32;\nconst unsigned int D3D10_VS_INPUT_REGISTER_COUNT                                        = 16;\nconst unsigned int D3D10_VS_INPUT_REGISTER_READS_PER_INST                               = 2;\nconst unsigned int D3D10_VS_INPUT_REGISTER_READ_PORTS                                   = 1;\nconst unsigned int D3D10_VS_OUTPUT_REGISTER_COMPONENTS                                  = 4;\nconst unsigned int D3D10_VS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT                         = 32;\nconst unsigned int D3D10_VS_OUTPUT_REGISTER_COUNT                                       = 16;\nconst unsigned int D3D10_WHQL_CONTEXT_COUNT_FOR_RESOURCE_LIMIT                          = 10;\nconst unsigned int D3D10_WHQL_DRAWINDEXED_INDEX_COUNT_2_TO_EXP                          = 25;\nconst unsigned int D3D10_WHQL_DRAW_VERTEX_COUNT_2_TO_EXP                                = 25;\nconst unsigned int D3D_MAJOR_VERSION                                                    = 10;\nconst unsigned int D3D_MINOR_VERSION                                                    = 0;\nconst unsigned int D3D_SPEC_DATE_DAY                                                    = 8;\nconst unsigned int D3D_SPEC_DATE_MONTH                                                  = 8;\nconst unsigned int D3D_SPEC_DATE_YEAR                                                   = 2006;\ncpp_quote(\"#endif\")\n\nconst unsigned int D3D10_APPEND_ALIGNED_ELEMENT                                         = 0xffffffff;\nconst unsigned int _FACD3D10                                                            = 0x879;\nconst unsigned int _FACD3D10DEBUG                                                       = _FACD3D10 + 1;\nconst unsigned int D3D10_FILTER_TYPE_MASK                                               = 0x3;\nconst unsigned int D3D10_SDK_VERSION                                                    = 29;\n\ncpp_quote(\"#define MAKE_D3D10_HRESULT(code)                   MAKE_HRESULT( 1, _FACD3D10, code)\")\ncpp_quote(\"#define MAKE_D3D10_STATUS(code)                    MAKE_HRESULT( 0, _FACD3D10, code)\")\ncpp_quote(\"#define D3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS  MAKE_D3D10_HRESULT(1)\")\ncpp_quote(\"#define D3D10_ERROR_FILE_NOT_FOUND                 MAKE_D3D10_HRESULT(2)\")\n\ntypedef enum D3D10_BLEND {\n    D3D10_BLEND_ZERO             = 1,\n    D3D10_BLEND_ONE              = 2,\n    D3D10_BLEND_SRC_COLOR        = 3,\n    D3D10_BLEND_INV_SRC_COLOR    = 4,\n    D3D10_BLEND_SRC_ALPHA        = 5,\n    D3D10_BLEND_INV_SRC_ALPHA    = 6,\n    D3D10_BLEND_DEST_ALPHA       = 7,\n    D3D10_BLEND_INV_DEST_ALPHA   = 8,\n    D3D10_BLEND_DEST_COLOR       = 9,\n    D3D10_BLEND_INV_DEST_COLOR   = 10,\n    D3D10_BLEND_SRC_ALPHA_SAT    = 11,\n    D3D10_BLEND_BLEND_FACTOR     = 14,\n    D3D10_BLEND_INV_BLEND_FACTOR = 15,\n    D3D10_BLEND_SRC1_COLOR       = 16,\n    D3D10_BLEND_INV_SRC1_COLOR   = 17,\n    D3D10_BLEND_SRC1_ALPHA       = 18,\n    D3D10_BLEND_INV_SRC1_ALPHA   = 19\n} D3D10_BLEND;\n\ntypedef enum D3D10_BLEND_OP {\n    D3D10_BLEND_OP_ADD = 1,\n    D3D10_BLEND_OP_SUBTRACT,\n    D3D10_BLEND_OP_REV_SUBTRACT,\n    D3D10_BLEND_OP_MIN,\n    D3D10_BLEND_OP_MAX,\n} D3D10_BLEND_OP;\n\ntypedef struct D3D10_BLEND_DESC {\n    BOOL AlphaToCoverageEnable;\n    BOOL BlendEnable[8];\n    D3D10_BLEND SrcBlend;\n    D3D10_BLEND DestBlend;\n    D3D10_BLEND_OP BlendOp;\n    D3D10_BLEND SrcBlendAlpha;\n    D3D10_BLEND DestBlendAlpha;\n    D3D10_BLEND_OP BlendOpAlpha;\n    UINT8 RenderTargetWriteMask[8];\n} D3D10_BLEND_DESC;\n\ntypedef enum D3D10_DEPTH_WRITE_MASK {\n    D3D10_DEPTH_WRITE_MASK_ZERO,\n    D3D10_DEPTH_WRITE_MASK_ALL,\n} D3D10_DEPTH_WRITE_MASK;\n\ntypedef enum D3D10_COMPARISON_FUNC {\n    D3D10_COMPARISON_NEVER = 1,\n    D3D10_COMPARISON_LESS,\n    D3D10_COMPARISON_EQUAL,\n    D3D10_COMPARISON_LESS_EQUAL,\n    D3D10_COMPARISON_GREATER,\n    D3D10_COMPARISON_NOT_EQUAL,\n    D3D10_COMPARISON_GREATER_EQUAL,\n    D3D10_COMPARISON_ALWAYS,\n} D3D10_COMPARISON_FUNC;\n\ntypedef enum D3D10_STENCIL_OP {\n    D3D10_STENCIL_OP_KEEP = 1,\n    D3D10_STENCIL_OP_ZERO,\n    D3D10_STENCIL_OP_REPLACE,\n    D3D10_STENCIL_OP_INCR_SAT,\n    D3D10_STENCIL_OP_DECR_SAT,\n    D3D10_STENCIL_OP_INVERT,\n    D3D10_STENCIL_OP_INCR,\n    D3D10_STENCIL_OP_DECR,\n} D3D10_STENCIL_OP;\n\ntypedef struct D3D10_DEPTH_STENCILOP_DESC {\n    D3D10_STENCIL_OP StencilFailOp;\n    D3D10_STENCIL_OP StencilDepthFailOp;\n    D3D10_STENCIL_OP StencilPassOp;\n    D3D10_COMPARISON_FUNC StencilFunc;\n} D3D10_DEPTH_STENCILOP_DESC;\n\ntypedef struct D3D10_DEPTH_STENCIL_DESC {\n    BOOL DepthEnable;\n    D3D10_DEPTH_WRITE_MASK DepthWriteMask;\n    D3D10_COMPARISON_FUNC DepthFunc;\n    BOOL StencilEnable;\n    UINT8 StencilReadMask;\n    UINT8 StencilWriteMask;\n    D3D10_DEPTH_STENCILOP_DESC FrontFace;\n    D3D10_DEPTH_STENCILOP_DESC BackFace;\n} D3D10_DEPTH_STENCIL_DESC;\n\ntypedef enum D3D10_FILL_MODE {\n    D3D10_FILL_WIREFRAME = 2,\n    D3D10_FILL_SOLID,\n} D3D10_FILL_MODE;\n\ntypedef enum D3D10_CULL_MODE {\n    D3D10_CULL_NONE = 1,\n    D3D10_CULL_FRONT,\n    D3D10_CULL_BACK,\n} D3D10_CULL_MODE;\n\ntypedef struct D3D10_RASTERIZER_DESC {\n    D3D10_FILL_MODE FillMode;\n    D3D10_CULL_MODE CullMode;\n    BOOL FrontCounterClockwise;\n    INT DepthBias;\n    FLOAT DepthBiasClamp;\n    FLOAT SlopeScaledDepthBias;\n    BOOL DepthClipEnable;\n    BOOL ScissorEnable;\n    BOOL MultisampleEnable;\n    BOOL AntialiasedLineEnable;\n} D3D10_RASTERIZER_DESC;\n\ntypedef enum D3D10_FILTER {\n    D3D10_FILTER_MIN_MAG_MIP_POINT                          = 0,\n    D3D10_FILTER_MIN_MAG_POINT_MIP_LINEAR                   = 0x1,\n    D3D10_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT             = 0x4,\n    D3D10_FILTER_MIN_POINT_MAG_MIP_LINEAR                   = 0x5,\n    D3D10_FILTER_MIN_LINEAR_MAG_MIP_POINT                   = 0x10,\n    D3D10_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR            = 0x11,\n    D3D10_FILTER_MIN_MAG_LINEAR_MIP_POINT                   = 0x14,\n    D3D10_FILTER_MIN_MAG_MIP_LINEAR                         = 0x15,\n    D3D10_FILTER_ANISOTROPIC                                = 0x55,\n    D3D10_FILTER_COMPARISON_MIN_MAG_MIP_POINT               = 0x80,\n    D3D10_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR        = 0x81,\n    D3D10_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT  = 0x84,\n    D3D10_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR        = 0x85,\n    D3D10_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT        = 0x90,\n    D3D10_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91,\n    D3D10_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT        = 0x94,\n    D3D10_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR              = 0x95,\n    D3D10_FILTER_COMPARISON_ANISOTROPIC                     = 0xd5,\n    D3D10_FILTER_TEXT_1BIT                                  = 0x80000000\n} D3D10_FILTER;\n\ntypedef enum D3D10_TEXTURE_ADDRESS_MODE {\n    D3D10_TEXTURE_ADDRESS_WRAP = 1,\n    D3D10_TEXTURE_ADDRESS_MIRROR,\n    D3D10_TEXTURE_ADDRESS_CLAMP,\n    D3D10_TEXTURE_ADDRESS_BORDER,\n    D3D10_TEXTURE_ADDRESS_MIRROR_ONCE,\n} D3D10_TEXTURE_ADDRESS_MODE;\n\ntypedef struct D3D10_SAMPLER_DESC {\n    D3D10_FILTER Filter;\n    D3D10_TEXTURE_ADDRESS_MODE AddressU;\n    D3D10_TEXTURE_ADDRESS_MODE AddressV;\n    D3D10_TEXTURE_ADDRESS_MODE AddressW;\n    FLOAT MipLODBias;\n    UINT MaxAnisotropy;\n    D3D10_COMPARISON_FUNC ComparisonFunc;\n    FLOAT BorderColor[4];\n    FLOAT MinLOD;\n    FLOAT MaxLOD;\n} D3D10_SAMPLER_DESC;\n\ntypedef enum D3D10_COUNTER {\n    D3D10_COUNTER_GPU_IDLE,\n    D3D10_COUNTER_VERTEX_PROCESSING,\n    D3D10_COUNTER_GEOMETRY_PROCESSING,\n    D3D10_COUNTER_PIXEL_PROCESSING,\n    D3D10_COUNTER_OTHER_GPU_PROCESSING,\n    D3D10_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION,\n    D3D10_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION,\n    D3D10_COUNTER_VERTEX_THROUGHPUT_UTILIZATION,\n    D3D10_COUNTER_TRIANGLE_SETUP_THROUGHPUT_UTILIZATION,\n    D3D10_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION,\n    D3D10_COUNTER_VS_MEMORY_LIMITED,\n    D3D10_COUNTER_VS_COMPUTATION_LIMITED,\n    D3D10_COUNTER_GS_MEMORY_LIMITED,\n    D3D10_COUNTER_GS_COMPUTATION_LIMITED,\n    D3D10_COUNTER_PS_MEMORY_LIMITED,\n    D3D10_COUNTER_PS_COMPUTATION_LIMITED,\n    D3D10_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE,\n    D3D10_COUNTER_TEXTURE_CACHE_HIT_RATE,\n    D3D10_COUNTER_DEVICE_DEPENDENT_0 = 0x40000000\n} D3D10_COUNTER;\n\ntypedef struct D3D10_COUNTER_DESC {\n    D3D10_COUNTER Counter;\n    UINT MiscFlags;\n} D3D10_COUNTER_DESC;\n\ntypedef enum D3D10_COUNTER_TYPE {\n    D3D10_COUNTER_TYPE_FLOAT32,\n    D3D10_COUNTER_TYPE_UINT16,\n    D3D10_COUNTER_TYPE_UINT32,\n    D3D10_COUNTER_TYPE_UINT64,\n} D3D10_COUNTER_TYPE;\n\ntypedef struct D3D10_COUNTER_INFO {\n    D3D10_COUNTER LastDeviceDependentCounter;\n    UINT NumSimultaneousCounters;\n    UINT8 NumDetectableParallelUnits;\n} D3D10_COUNTER_INFO;\n\ntypedef enum D3D10_RESOURCE_DIMENSION {\n    D3D10_RESOURCE_DIMENSION_UNKNOWN,\n    D3D10_RESOURCE_DIMENSION_BUFFER,\n    D3D10_RESOURCE_DIMENSION_TEXTURE1D,\n    D3D10_RESOURCE_DIMENSION_TEXTURE2D,\n    D3D10_RESOURCE_DIMENSION_TEXTURE3D,\n} D3D10_RESOURCE_DIMENSION;\n\ntypedef enum D3D10_USAGE {\n    D3D10_USAGE_DEFAULT,\n    D3D10_USAGE_IMMUTABLE,\n    D3D10_USAGE_DYNAMIC,\n    D3D10_USAGE_STAGING,\n} D3D10_USAGE;\n\ntypedef enum D3D10_BIND_FLAG {\n    D3D10_BIND_VERTEX_BUFFER   = 0x1,\n    D3D10_BIND_INDEX_BUFFER    = 0x2,\n    D3D10_BIND_CONSTANT_BUFFER = 0x4,\n    D3D10_BIND_SHADER_RESOURCE = 0x8,\n    D3D10_BIND_STREAM_OUTPUT   = 0x10,\n    D3D10_BIND_RENDER_TARGET   = 0x20,\n    D3D10_BIND_DEPTH_STENCIL   = 0x40\n} D3D10_BIND_FLAG;\n\ntypedef struct D3D10_BUFFER_DESC {\n    UINT ByteWidth;\n    D3D10_USAGE Usage;\n    UINT BindFlags;\n    UINT CPUAccessFlags;\n    UINT MiscFlags;\n} D3D10_BUFFER_DESC;\n\ncpp_quote(\"#if !defined(D3D10_NO_HELPERS) && defined(__cplusplus)\")\ncpp_quote(\"struct CD3D10_BUFFER_DESC : public D3D10_BUFFER_DESC {\")\ncpp_quote(\"    CD3D10_BUFFER_DESC() {}\" )\ncpp_quote(\"    explicit CD3D10_BUFFER_DESC(const D3D10_BUFFER_DESC &o) : D3D10_BUFFER_DESC(o) {}\")\ncpp_quote(\"    explicit CD3D10_BUFFER_DESC(UINT byteWidth, UINT bindFlags, D3D10_USAGE usage = D3D10_USAGE_DEFAULT, UINT cpuaccessFlags = 0, UINT miscFlags = 0 ) {\")\ncpp_quote(\"        ByteWidth = byteWidth;\")\ncpp_quote(\"        Usage = usage;\")\ncpp_quote(\"        BindFlags = bindFlags;\")\ncpp_quote(\"        CPUAccessFlags = cpuaccessFlags;\")\ncpp_quote(\"        MiscFlags = miscFlags;\")\ncpp_quote(\"    }\")\ncpp_quote(\"    ~CD3D10_BUFFER_DESC() {}\")\ncpp_quote(\"    operator const D3D10_BUFFER_DESC&() const {\")\ncpp_quote(\"        return *this;\")\ncpp_quote(\"    }\")\ncpp_quote(\"};\")\ncpp_quote(\"#endif\")\n\ntypedef enum D3D10_MAP {\n    D3D10_MAP_READ = 1,\n    D3D10_MAP_WRITE,\n    D3D10_MAP_READ_WRITE,\n    D3D10_MAP_WRITE_DISCARD,\n    D3D10_MAP_WRITE_NO_OVERWRITE,\n} D3D10_MAP;\n\ntypedef struct D3D10_TEXTURE1D_DESC {\n    UINT Width;\n    UINT MipLevels;\n    UINT ArraySize;\n    DXGI_FORMAT Format;\n    D3D10_USAGE Usage;\n    UINT BindFlags;\n    UINT CPUAccessFlags;\n    UINT MiscFlags;\n} D3D10_TEXTURE1D_DESC;\n\ncpp_quote(\"#if !defined(D3D10_NO_HELPERS) && defined(__cplusplus)\")\ncpp_quote(\"struct CD3D10_TEXTURE1D_DESC : public D3D10_TEXTURE1D_DESC {\")\ncpp_quote(\"    CD3D10_TEXTURE1D_DESC() {}\")\ncpp_quote(\"    explicit CD3D10_TEXTURE1D_DESC(const D3D10_TEXTURE1D_DESC &o) : D3D10_TEXTURE1D_DESC(o) {}\")\ncpp_quote(\"    explicit CD3D10_TEXTURE1D_DESC(DXGI_FORMAT format, UINT width, UINT arraySize = 1, UINT mipLevels = 0,\")\ncpp_quote(\"        UINT bindFlags = D3D10_BIND_SHADER_RESOURCE, D3D10_USAGE usage = D3D10_USAGE_DEFAULT, UINT cpuaccessFlags = 0,\")\ncpp_quote(\"        UINT miscFlags = 0) {\")\ncpp_quote(\"        Width = width;\")\ncpp_quote(\"        MipLevels = mipLevels;\")\ncpp_quote(\"        ArraySize = arraySize;\")\ncpp_quote(\"        Format = format;\")\ncpp_quote(\"        Usage = usage;\")\ncpp_quote(\"        BindFlags = bindFlags;\")\ncpp_quote(\"        CPUAccessFlags = cpuaccessFlags;\")\ncpp_quote(\"        MiscFlags = miscFlags;\")\ncpp_quote(\"    }\")\ncpp_quote(\"    ~CD3D10_TEXTURE1D_DESC() {}\")\ncpp_quote(\"    operator const D3D10_TEXTURE1D_DESC&() const {\")\ncpp_quote(\"        return *this;\")\ncpp_quote(\"    }\")\ncpp_quote(\"};\")\ncpp_quote(\"#endif\")\n\ntypedef struct D3D10_TEXTURE2D_DESC {\n    UINT Width;\n    UINT Height;\n    UINT MipLevels;\n    UINT ArraySize;\n    DXGI_FORMAT Format;\n    DXGI_SAMPLE_DESC SampleDesc;\n    D3D10_USAGE Usage;\n    UINT BindFlags;\n    UINT CPUAccessFlags;\n    UINT MiscFlags;\n} D3D10_TEXTURE2D_DESC;\n\ncpp_quote(\"#if !defined(D3D10_NO_HELPERS) && defined(__cplusplus)\")\ncpp_quote(\"struct CD3D10_TEXTURE2D_DESC : public D3D10_TEXTURE2D_DESC {\")\ncpp_quote(\"    CD3D10_TEXTURE2D_DESC() {}\" )\ncpp_quote(\"    explicit CD3D10_TEXTURE2D_DESC(const D3D10_TEXTURE2D_DESC &o) : D3D10_TEXTURE2D_DESC(o) {}\")\ncpp_quote(\"    explicit CD3D10_TEXTURE2D_DESC(DXGI_FORMAT format, UINT width, UINT height,\")\ncpp_quote(\"            UINT arraySize = 1,\")\ncpp_quote(\"            UINT mipLevels = 0,\")\ncpp_quote(\"            UINT bindFlags = D3D10_BIND_SHADER_RESOURCE,\")\ncpp_quote(\"            D3D10_USAGE usage = D3D10_USAGE_DEFAULT,\")\ncpp_quote(\"            UINT cpuaccessFlags = 0,\")\ncpp_quote(\"            UINT sampleCount = 1,\")\ncpp_quote(\"            UINT sampleQuality = 0,\")\ncpp_quote(\"            UINT miscFlags = 0) {\")\ncpp_quote(\"        Width = width;\" )\ncpp_quote(\"        Height = height;\" )\ncpp_quote(\"        MipLevels = mipLevels;\" )\ncpp_quote(\"        ArraySize = arraySize;\" )\ncpp_quote(\"        Format = format;\" )\ncpp_quote(\"        SampleDesc.Count = sampleCount;\" )\ncpp_quote(\"        SampleDesc.Quality = sampleQuality;\" )\ncpp_quote(\"        Usage = usage;\" )\ncpp_quote(\"        BindFlags = bindFlags;\" )\ncpp_quote(\"        CPUAccessFlags = cpuaccessFlags;\" )\ncpp_quote(\"        MiscFlags = miscFlags;\" )\ncpp_quote(\"    }\")\ncpp_quote(\"    ~CD3D10_TEXTURE2D_DESC() {}\")\ncpp_quote(\"    operator const D3D10_TEXTURE2D_DESC&() const {\")\ncpp_quote(\"        return *this;\")\ncpp_quote(\"    }\")\ncpp_quote(\"};\")\ncpp_quote(\"#endif\")\n\ntypedef struct D3D10_TEXTURE3D_DESC {\n    UINT Width;\n    UINT Height;\n    UINT Depth;\n    UINT MipLevels;\n    DXGI_FORMAT Format;\n    D3D10_USAGE Usage;\n    UINT BindFlags;\n    UINT CPUAccessFlags;\n    UINT MiscFlags;\n} D3D10_TEXTURE3D_DESC;\n\ntypedef enum D3D10_DSV_DIMENSION\n{\n    D3D10_DSV_DIMENSION_UNKNOWN,\n    D3D10_DSV_DIMENSION_TEXTURE1D,\n    D3D10_DSV_DIMENSION_TEXTURE1DARRAY,\n    D3D10_DSV_DIMENSION_TEXTURE2D,\n    D3D10_DSV_DIMENSION_TEXTURE2DARRAY,\n    D3D10_DSV_DIMENSION_TEXTURE2DMS,\n    D3D10_DSV_DIMENSION_TEXTURE2DMSARRAY,\n} D3D10_DSV_DIMENSION;\n\ntypedef struct D3D10_TEX1D_DSV {\n    UINT MipSlice;\n} D3D10_TEX1D_DSV;\n\ntypedef struct D3D10_TEX1D_ARRAY_DSV {\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D10_TEX1D_ARRAY_DSV;\n\ntypedef struct D3D10_TEX2D_DSV {\n    UINT MipSlice;\n} D3D10_TEX2D_DSV;\n\ntypedef struct D3D10_TEX2D_ARRAY_DSV {\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D10_TEX2D_ARRAY_DSV;\n\ntypedef struct D3D10_TEX2DMS_DSV {\n    UINT UnusedField_NothingToDefine;\n} D3D10_TEX2DMS_DSV;\n\ntypedef struct D3D10_TEX2DMS_ARRAY_DSV {\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D10_TEX2DMS_ARRAY_DSV;\n\ntypedef struct D3D10_DEPTH_STENCIL_VIEW_DESC {\n    DXGI_FORMAT Format;\n    D3D10_DSV_DIMENSION ViewDimension;\n    union {\n        D3D10_TEX1D_DSV Texture1D;\n        D3D10_TEX1D_ARRAY_DSV Texture1DArray;\n        D3D10_TEX2D_DSV Texture2D;\n        D3D10_TEX2D_ARRAY_DSV Texture2DArray;\n        D3D10_TEX2DMS_DSV Texture2DMS;\n        D3D10_TEX2DMS_ARRAY_DSV Texture2DMSArray;\n    };\n} D3D10_DEPTH_STENCIL_VIEW_DESC;\n\ntypedef enum D3D10_RTV_DIMENSION {\n    D3D10_RTV_DIMENSION_UNKNOWN,\n    D3D10_RTV_DIMENSION_BUFFER,\n    D3D10_RTV_DIMENSION_TEXTURE1D,\n    D3D10_RTV_DIMENSION_TEXTURE1DARRAY,\n    D3D10_RTV_DIMENSION_TEXTURE2D,\n    D3D10_RTV_DIMENSION_TEXTURE2DARRAY,\n    D3D10_RTV_DIMENSION_TEXTURE2DMS,\n    D3D10_RTV_DIMENSION_TEXTURE2DMSARRAY,\n    D3D10_RTV_DIMENSION_TEXTURE3D,\n} D3D10_RTV_DIMENSION;\n\ntypedef struct D3D10_BUFFER_RTV {\n    UINT ElementOffset;\n    UINT ElementWidth;\n} D3D10_BUFFER_RTV;\n\ntypedef struct D3D10_TEX1D_RTV {\n    UINT MipSlice;\n} D3D10_TEX1D_RTV;\n\ntypedef struct D3D10_TEX1D_ARRAY_RTV {\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D10_TEX1D_ARRAY_RTV;\n\ntypedef struct D3D10_TEX2D_RTV {\n    UINT MipSlice;\n} D3D10_TEX2D_RTV;\n\ntypedef struct D3D10_TEX2D_ARRAY_RTV {\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D10_TEX2D_ARRAY_RTV;\n\ntypedef struct D3D10_TEX2DMS_RTV {\n    UINT UnusedField_NothingToDefine;\n} D3D10_TEX2DMS_RTV;\n\ntypedef struct D3D10_TEX2DMS_ARRAY_RTV {\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D10_TEX2DMS_ARRAY_RTV;\n\ntypedef struct D3D10_TEX3D_RTV {\n    UINT MipSlice;\n    UINT FirstWSlice;\n    UINT WSize;\n} D3D10_TEX3D_RTV;\n\ntypedef struct D3D10_RENDER_TARGET_VIEW_DESC {\n    DXGI_FORMAT Format;\n    D3D10_RTV_DIMENSION ViewDimension;\n    union {\n        D3D10_BUFFER_RTV Buffer;\n        D3D10_TEX1D_RTV Texture1D;\n        D3D10_TEX1D_ARRAY_RTV Texture1DArray;\n        D3D10_TEX2D_RTV Texture2D;\n        D3D10_TEX2D_ARRAY_RTV Texture2DArray;\n        D3D10_TEX2DMS_RTV Texture2DMS;\n        D3D10_TEX2DMS_ARRAY_RTV Texture2DMSArray;\n        D3D10_TEX3D_RTV Texture3D;\n    };\n} D3D10_RENDER_TARGET_VIEW_DESC;\n\ntypedef D3D_SRV_DIMENSION D3D10_SRV_DIMENSION;\n\ntypedef struct D3D10_BUFFER_SRV {\n    UINT ElementOffset;\n    UINT ElementWidth;\n} D3D10_BUFFER_SRV;\n\ntypedef struct D3D10_TEX1D_SRV {\n    UINT MostDetailedMip;\n    UINT MipLevels;\n} D3D10_TEX1D_SRV;\n\ntypedef struct D3D10_TEX1D_ARRAY_SRV {\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D10_TEX1D_ARRAY_SRV;\n\ntypedef struct D3D10_TEX2D_SRV {\n    UINT MostDetailedMip;\n    UINT MipLevels;\n} D3D10_TEX2D_SRV;\n\ntypedef struct D3D10_TEX2D_ARRAY_SRV {\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D10_TEX2D_ARRAY_SRV;\n\ntypedef struct D3D10_TEX2DMS_SRV {\n    UINT UnusedField_NothingToDefine;\n} D3D10_TEX2DMS_SRV;\n\ntypedef struct D3D10_TEX2DMS_ARRAY_SRV {\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D10_TEX2DMS_ARRAY_SRV;\n\ntypedef struct D3D10_TEX3D_SRV {\n    UINT MostDetailedMip;\n    UINT MipLevels;\n} D3D10_TEX3D_SRV;\n\ntypedef struct D3D10_TEXCUBE_SRV {\n    UINT MostDetailedMip;\n    UINT MipLevels;\n} D3D10_TEXCUBE_SRV;\n\ntypedef struct D3D10_SHADER_RESOURCE_VIEW_DESC {\n    DXGI_FORMAT Format;\n    D3D10_SRV_DIMENSION ViewDimension;\n    union {\n        D3D10_BUFFER_SRV Buffer;\n        D3D10_TEX1D_SRV Texture1D;\n        D3D10_TEX1D_ARRAY_SRV Texture1DArray;\n        D3D10_TEX2D_SRV Texture2D;\n        D3D10_TEX2D_ARRAY_SRV Texture2DArray;\n        D3D10_TEX2DMS_SRV Texture2DMS;\n        D3D10_TEX2DMS_ARRAY_SRV Texture2DMSArray;\n        D3D10_TEX3D_SRV Texture3D;\n        D3D10_TEXCUBE_SRV TextureCube;\n    };\n} D3D10_SHADER_RESOURCE_VIEW_DESC;\n\ntypedef struct D3D10_BOX {\n    UINT left;\n    UINT top;\n    UINT front;\n    UINT right;\n    UINT bottom;\n    UINT back;\n} D3D10_BOX;\n\ntypedef struct D3D10_SUBRESOURCE_DATA {\n    const void *pSysMem;\n    UINT SysMemPitch;\n    UINT SysMemSlicePitch;\n} D3D10_SUBRESOURCE_DATA;\n\ntypedef struct D3D10_SO_DECLARATION_ENTRY\n{\n    const char *SemanticName;\n    UINT SemanticIndex;\n    BYTE StartComponent;\n    BYTE ComponentCount;\n    BYTE OutputSlot;\n} D3D10_SO_DECLARATION_ENTRY;\n\ntypedef enum D3D10_INPUT_CLASSIFICATION {\n    D3D10_INPUT_PER_VERTEX_DATA,\n    D3D10_INPUT_PER_INSTANCE_DATA,\n} D3D10_INPUT_CLASSIFICATION;\n\ntypedef struct D3D10_INPUT_ELEMENT_DESC\n{\n    const char *SemanticName;\n    UINT SemanticIndex;\n    DXGI_FORMAT Format;\n    UINT InputSlot;\n    UINT AlignedByteOffset;\n    D3D10_INPUT_CLASSIFICATION InputSlotClass;\n    UINT InstanceDataStepRate;\n} D3D10_INPUT_ELEMENT_DESC;\n\ntypedef enum D3D10_QUERY {\n    D3D10_QUERY_EVENT,\n    D3D10_QUERY_OCCLUSION,\n    D3D10_QUERY_TIMESTAMP,\n    D3D10_QUERY_TIMESTAMP_DISJOINT,\n    D3D10_QUERY_PIPELINE_STATISTICS,\n    D3D10_QUERY_OCCLUSION_PREDICATE,\n    D3D10_QUERY_SO_STATISTICS,\n    D3D10_QUERY_SO_OVERFLOW_PREDICATE,\n} D3D10_QUERY;\n\ntypedef struct D3D10_QUERY_DESC {\n    D3D10_QUERY Query;\n    UINT MiscFlags;\n} D3D10_QUERY_DESC;\n\ntypedef D3D_PRIMITIVE_TOPOLOGY D3D10_PRIMITIVE_TOPOLOGY;\n\ntypedef D3D_PRIMITIVE D3D10_PRIMITIVE;\n\ntypedef RECT D3D10_RECT;\n\ntypedef struct D3D10_VIEWPORT {\n    INT TopLeftX;\n    INT TopLeftY;\n    UINT Width;\n    UINT Height;\n    FLOAT MinDepth;\n    FLOAT MaxDepth;\n} D3D10_VIEWPORT;\n\ntypedef struct D3D10_MAPPED_TEXTURE2D {\n    void *pData;\n    UINT RowPitch;\n} D3D10_MAPPED_TEXTURE2D;\n\ntypedef struct D3D10_MAPPED_TEXTURE3D {\n    void *pData;\n    UINT RowPitch;\n    UINT DepthPitch;\n} D3D10_MAPPED_TEXTURE3D;\n\ntypedef enum D3D10_CPU_ACCESS_FLAG {\n    D3D10_CPU_ACCESS_WRITE = 0x10000,\n    D3D10_CPU_ACCESS_READ  = 0x20000\n} D3D10_CPU_ACCESS_FLAG;\n\ntypedef enum D3D10_RESOURCE_MISC_FLAG {\n    D3D10_RESOURCE_MISC_GENERATE_MIPS      = 0x0001,\n    D3D10_RESOURCE_MISC_SHARED             = 0x0002,\n    D3D10_RESOURCE_MISC_TEXTURECUBE        = 0x0004,\n    D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX  = 0x0010,\n    D3D10_RESOURCE_MISC_GDI_COMPATIBLE     = 0x0020\n} D3D10_RESOURCE_MISC_FLAG;\n\ntypedef enum D3D10_MAP_FLAG {\n    D3D10_MAP_FLAG_DO_NOT_WAIT = 0x100000,\n} D3D10_MAP_FLAG;\n\ntypedef enum D3D10_CLEAR_FLAG {\n    D3D10_CLEAR_DEPTH   = 0x1,\n    D3D10_CLEAR_STENCIL = 0x2\n} D3D10_CLEAR_FLAG;\n\ntypedef enum D3D10_COLOR_WRITE_ENABLE {\n    D3D10_COLOR_WRITE_ENABLE_RED   = 0x1,\n    D3D10_COLOR_WRITE_ENABLE_GREEN = 0x2,\n    D3D10_COLOR_WRITE_ENABLE_BLUE  = 0x4,\n    D3D10_COLOR_WRITE_ENABLE_ALPHA = 0x8,\n    D3D10_COLOR_WRITE_ENABLE_ALL   = (D3D10_COLOR_WRITE_ENABLE_RED  | D3D10_COLOR_WRITE_ENABLE_GREEN |\n                                      D3D10_COLOR_WRITE_ENABLE_BLUE | D3D10_COLOR_WRITE_ENABLE_ALPHA)\n} D3D10_COLOR_WRITE_ENABLE;\n\ntypedef enum D3D10_FORMAT_SUPPORT\n{\n    D3D10_FORMAT_SUPPORT_BUFFER                   = 0x00000001,\n    D3D10_FORMAT_SUPPORT_IA_VERTEX_BUFFER         = 0x00000002,\n    D3D10_FORMAT_SUPPORT_IA_INDEX_BUFFER          = 0x00000004,\n    D3D10_FORMAT_SUPPORT_SO_BUFFER                = 0x00000008,\n    D3D10_FORMAT_SUPPORT_TEXTURE1D                = 0x00000010,\n    D3D10_FORMAT_SUPPORT_TEXTURE2D                = 0x00000020,\n    D3D10_FORMAT_SUPPORT_TEXTURE3D                = 0x00000040,\n    D3D10_FORMAT_SUPPORT_TEXTURECUBE              = 0x00000080,\n    D3D10_FORMAT_SUPPORT_SHADER_LOAD              = 0x00000100,\n    D3D10_FORMAT_SUPPORT_SHADER_SAMPLE            = 0x00000200,\n    D3D10_FORMAT_SUPPORT_SHADER_SAMPLE_COMPARISON = 0x00000400,\n    D3D10_FORMAT_SUPPORT_SHADER_SAMPLE_MONO_TEXT  = 0x00000800,\n    D3D10_FORMAT_SUPPORT_MIP                      = 0x00001000,\n    D3D10_FORMAT_SUPPORT_MIP_AUTOGEN              = 0x00002000,\n    D3D10_FORMAT_SUPPORT_RENDER_TARGET            = 0x00004000,\n    D3D10_FORMAT_SUPPORT_BLENDABLE                = 0x00008000,\n    D3D10_FORMAT_SUPPORT_DEPTH_STENCIL            = 0x00010000,\n    D3D10_FORMAT_SUPPORT_CPU_LOCKABLE             = 0x00020000,\n    D3D10_FORMAT_SUPPORT_MULTISAMPLE_RESOLVE      = 0x00040000,\n    D3D10_FORMAT_SUPPORT_DISPLAY                  = 0x00080000,\n    D3D10_FORMAT_SUPPORT_CAST_WITHIN_BIT_LAYOUT   = 0x00100000,\n    D3D10_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET = 0x00200000,\n    D3D10_FORMAT_SUPPORT_MULTISAMPLE_LOAD         = 0x00400000,\n    D3D10_FORMAT_SUPPORT_SHADER_GATHER            = 0x00800000,\n    D3D10_FORMAT_SUPPORT_BACK_BUFFER_CAST         = 0x01000000,\n} D3D10_FORMAT_SUPPORT;\n\ntypedef enum D3D10_TEXTURECUBE_FACE {\n    D3D10_TEXTURECUBE_FACE_POSITIVE_X,\n    D3D10_TEXTURECUBE_FACE_NEGATIVE_X,\n    D3D10_TEXTURECUBE_FACE_POSITIVE_Y,\n    D3D10_TEXTURECUBE_FACE_NEGATIVE_Y,\n    D3D10_TEXTURECUBE_FACE_POSITIVE_Z,\n    D3D10_TEXTURECUBE_FACE_NEGATIVE_Z,\n} D3D10_TEXTURECUBE_FACE;\n\ntypedef enum D3D10_ASYNC_GETDATA_FLAG {\n    D3D10_ASYNC_GETDATA_DONOTFLUSH = 0x1,\n} D3D10_ASYNC_GETDATA_FLAG;\n\ntypedef enum D3D10_FILTER_TYPE {\n    D3D10_FILTER_TYPE_POINT,\n    D3D10_FILTER_TYPE_LINEAR\n} D3D10_FILTER_TYPE;\n\ntypedef enum D3D10_QUERY_MISC_FLAG {\n    D3D10_QUERY_MISC_PREDICATEHINT = 0x1\n} D3D10_QUERY_MISC_FLAG;\n\ntypedef struct D3D10_QUERY_DATA_TIMESTAMP_DISJOINT {\n    UINT64 Frequency;\n    BOOL Disjoint;\n} D3D10_QUERY_DATA_TIMESTAMP_DISJOINT;\n\ntypedef struct D3D10_QUERY_DATA_PIPELINE_STATISTICS {\n    UINT64 IAVertices;\n    UINT64 IAPrimitives;\n    UINT64 VSInvocations;\n    UINT64 GSInvocations;\n    UINT64 GSPrimitives;\n    UINT64 CInvocations;\n    UINT64 CPrimitives;\n    UINT64 PSInvocations;\n} D3D10_QUERY_DATA_PIPELINE_STATISTICS;\n\ntypedef struct D3D10_QUERY_DATA_SO_STATISTICS {\n    UINT64 NumPrimitivesWritten;\n    UINT64 PrimitivesStorageNeeded;\n} D3D10_QUERY_DATA_SO_STATISTICS;\n\ntypedef enum D3D10_CREATE_DEVICE_FLAG {\n    D3D10_CREATE_DEVICE_SINGLETHREADED                           = 0x1,\n    D3D10_CREATE_DEVICE_DEBUG                                    = 0x2,\n    D3D10_CREATE_DEVICE_SWITCH_TO_REF                            = 0x4,\n    D3D10_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS = 0x8,\n    D3D10_CREATE_DEVICE_ALLOW_NULL_FROM_MAP                      = 0x10,\n    D3D10_CREATE_DEVICE_BGRA_SUPPORT                             = 0x20,\n    D3D10_CREATE_DEVICE_STRICT_VALIDATION                        = 0x0200\n} D3D10_CREATE_DEVICE_FLAG;\n\n/* Core */\n\ninterface ID3D10Device;\n\n[\n    object,\n    local,\n    uuid(9b7e4c00-342c-4106-a19f-4f2704f689f0)\n]\ninterface ID3D10DeviceChild : IUnknown\n{\n        void GetDevice(\n            [out] ID3D10Device **ppDevice);\n        HRESULT GetPrivateData(\n            [in] REFGUID guid,\n            [in, out] UINT *pDataSize,\n            [out] void *pData);\n        HRESULT SetPrivateData(\n            [in] REFGUID guid,\n            [in] UINT DataSize,\n            [in] const void *pData);\n        HRESULT SetPrivateDataInterface(\n            [in] REFGUID guid,\n            [in] const IUnknown *pData);\n}\n\n/* Resource */\n\n[\n    object,\n    local,\n    uuid(9b7e4c01-342c-4106-a19f-4f2704f689f0)\n]\ninterface ID3D10Resource : ID3D10DeviceChild\n{\n        void GetType(\n            [out] D3D10_RESOURCE_DIMENSION *rType);\n        void SetEvictionPriority(\n            [in] UINT EvictionPriority);\n        UINT GetEvictionPriority();\n}\n\n[\n    object,\n    local,\n    uuid(9b7e4c02-342c-4106-a19f-4f2704f689f0)\n]\ninterface ID3D10Buffer : ID3D10Resource\n{\n        HRESULT Map(\n            [in] D3D10_MAP MapType,\n            [in] UINT MapFlags,\n            [out] void **ppData);\n        void Unmap();\n        void GetDesc(\n            [out] D3D10_BUFFER_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(9b7e4c03-342c-4106-a19f-4f2704f689F0)\n]\ninterface ID3D10Texture1D : ID3D10Resource\n{\n        HRESULT Map(\n            [in] UINT Subresource,\n            [in] D3D10_MAP MapType,\n            [in] UINT MapFlags,\n            [out] void **ppData);\n        void Unmap(\n            [in] UINT Subresource);\n        void GetDesc(\n            [out] D3D10_TEXTURE1D_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(9b7e4c04-342c-4106-a19f-4f2704f689F0)\n]\ninterface ID3D10Texture2D : ID3D10Resource\n{\n        HRESULT Map(\n            [in] UINT Subresource,\n            [in] D3D10_MAP MapType,\n            [in] UINT MapFlags,\n            [out] D3D10_MAPPED_TEXTURE2D *pMappedTex2D);\n        void Unmap(\n            [in] UINT Subresource);\n        void GetDesc(\n            [out] D3D10_TEXTURE2D_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(9b7e4c05-342c-4106-a19f-4f2704f689F0)\n]\ninterface ID3D10Texture3D : ID3D10Resource\n{\n        HRESULT Map(\n            [in] UINT Subresource,\n            [in] D3D10_MAP MapType,\n            [in] UINT MapFlags,\n            [out] D3D10_MAPPED_TEXTURE3D *pMappedTex3D);\n        void Unmap(\n            [in] UINT Subresource);\n        void GetDesc(\n            [out] D3D10_TEXTURE3D_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(c902b03f-60a7-49ba-9936-2a3ab37a7e33)\n]\ninterface ID3D10View : ID3D10DeviceChild\n{\n        void GetResource(\n            [out] ID3D10Resource **ppResource);\n}\n\n[\n    object,\n    local,\n    uuid(9b7e4c09-342c-4106-a19f-4f2704f689f0)\n]\ninterface ID3D10DepthStencilView : ID3D10View\n{\n        void GetDesc(\n            [out] D3D10_DEPTH_STENCIL_VIEW_DESC *pDesc);\n}\n\n\n[\n    object,\n    local,\n    uuid(9b7e4c08-342c-4106-a19f-4f2704f689f0)\n]\ninterface ID3D10RenderTargetView : ID3D10View\n{\n        void GetDesc(\n            [out] D3D10_RENDER_TARGET_VIEW_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(9b7e4c07-342c-4106-a19f-4f2704f689f0)\n]\ninterface ID3D10ShaderResourceView  : ID3D10View\n{\n        void GetDesc(\n            [out] D3D10_SHADER_RESOURCE_VIEW_DESC *pDesc);\n}\n\n/* Resource End */\n\n[\n    object,\n    local,\n    uuid(edad8d19-8a35-4d6d-8566-2ea276cde161)\n]\ninterface ID3D10BlendState : ID3D10DeviceChild\n{\n    void GetDesc(\n            [out] D3D10_BLEND_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(2b4b1cc8-a4ad-41f8-8322-ca86fc3ec675)\n]\ninterface ID3D10DepthStencilState : ID3D10DeviceChild\n{\n    void GetDesc(\n            [out] D3D10_DEPTH_STENCIL_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(6316be88-54cd-4040-ab44-20461bc81f68)\n]\ninterface ID3D10GeometryShader  : ID3D10DeviceChild\n{\n}\n\n[\n    object,\n    local,\n    uuid(9b7e4c0b-342c-4106-a19f-4f2704f689f0)\n]\ninterface ID3D10InputLayout  : ID3D10DeviceChild\n{\n}\n\n[\n    object,\n    local,\n    uuid(4968b601-9d00-4cde-8346-8e7f675819b6)\n]\ninterface ID3D10PixelShader  : ID3D10DeviceChild\n{\n}\n\n[\n    object,\n    local,\n    uuid(a2a07292-89af-4345-be2e-c53d9fbb6e9f)\n]\ninterface ID3D10RasterizerState  : ID3D10DeviceChild\n{\n    void GetDesc(\n            [out] D3D10_RASTERIZER_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(9b7e4c0c-342c-4106-a19f-4f2704f689f0)\n]\ninterface ID3D10SamplerState  : ID3D10DeviceChild\n{\n    void GetDesc(\n            [out] D3D10_SAMPLER_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(9b7e4c0a-342c-4106-a19f-4f2704f689f0)\n]\ninterface ID3D10VertexShader  : ID3D10DeviceChild\n{\n}\n\n[\n    object,\n    local,\n    uuid(9b7e4c0d-342c-4106-a19f-4f2704f689f0)\n]\ninterface ID3D10Asynchronous  : ID3D10DeviceChild\n{\n    void Begin();\n    void End();\n    HRESULT GetData(\n            [out] void *pData,\n            [in] UINT DataSize,\n            [in] UINT GetDataFlags);\n    UINT GetDataSize();\n}\n\n[\n    object,\n    local,\n    uuid(9b7e4c11-342c-4106-a19f-4f2704f689f0)\n]\ninterface ID3D10Counter  : ID3D10Asynchronous\n{\n    void GetDesc(\n            [out] D3D10_COUNTER_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(9b7e4C0e-342C-4106-a19f-4f2704f689f0)\n]\ninterface ID3D10Query : ID3D10Asynchronous\n{\n    void GetDesc(\n            [out] D3D10_QUERY_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(9b7e4c10-342c-4106-a19f-4f2704f689f0)\n]\ninterface ID3D10Predicate : ID3D10Query\n{\n}\n\n[\n    object,\n    local,\n    uuid(9b7e4c0f-342c-4106-a19f-4f2704f689f0)\n]\ninterface ID3D10Device : IUnknown\n{\n        void VSSetConstantBuffers(\n            [in] UINT StartSlot,\n            [in] UINT NumBuffers,\n            [in] ID3D10Buffer *const *ppConstantBuffers);\n        void PSSetShaderResources(\n            [in] UINT StartSlot,\n            [in] UINT NumViews,\n            [in] ID3D10ShaderResourceView *const *ppShaderResourceViews);\n        void PSSetShader(\n            [in] ID3D10PixelShader *pPixelShader);\n        void PSSetSamplers(\n            [in] UINT StartSlot,\n            [in] UINT NumSamplers,\n            [in]ID3D10SamplerState *const *ppSamplers);\n        void VSSetShader(\n            [in] ID3D10VertexShader *pVertexShader);\n        void DrawIndexed(\n            [in] UINT IndexCount,\n            [in] UINT StartIndexLocation,\n            [in] INT BaseVertexLocation);\n        void Draw(\n            [in] UINT VertexCount,\n            [in] UINT StartVertexLocation);\n        void PSSetConstantBuffers(\n            [in] UINT StartSlot,\n            [in] UINT NumBuffers,\n            [in] ID3D10Buffer *const *ppConstantBuffers);\n        void IASetInputLayout(\n            [in] ID3D10InputLayout *pInputLayout);\n        void IASetVertexBuffers(\n            [in] UINT StartSlot,\n            [in] UINT NumBuffers,\n            [in] ID3D10Buffer *const *ppVertexBuffers,\n            [in] const UINT *pStrides,\n            [in] const UINT *pOffsets);\n        void IASetIndexBuffer(\n            [in] ID3D10Buffer *pIndexBuffer,\n            [in] DXGI_FORMAT Format,\n            [in] UINT Offset);\n        void DrawIndexedInstanced(\n            [in] UINT IndexCountPerInstance,\n            [in] UINT InstanceCount,\n            [in] UINT StartIndexLocation,\n            [in] INT BaseVertexLocation,\n            [in] UINT StartInstanceLocation);\n        void DrawInstanced(\n            [in] UINT VertexCountPerInstance,\n            [in] UINT InstanceCount,\n            [in] UINT StartVertexLocation,\n            [in] UINT StartInstanceLocation);\n        void GSSetConstantBuffers(\n            [in] UINT StartSlot,\n            [in] UINT NumBuffers,\n            [in] ID3D10Buffer *const *ppConstantBuffers);\n        void GSSetShader(\n            [in] ID3D10GeometryShader *pShader);\n        void IASetPrimitiveTopology(\n            [in] D3D10_PRIMITIVE_TOPOLOGY Topology);\n        void VSSetShaderResources(\n            [in] UINT StartSlot,\n            [in] UINT NumViews,\n            [in] ID3D10ShaderResourceView *const *ppShaderResourceViews);\n        void VSSetSamplers(\n            [in] UINT StartSlot,\n            [in] UINT NumSamplers,\n            [in] ID3D10SamplerState *const *ppSamplers);\n        void SetPredication(\n            [in] ID3D10Predicate *pPredicate,\n            [in] BOOL PredicateValue);\n        void GSSetShaderResources(\n            [in] UINT StartSlot,\n            [in] UINT NumViews,\n            [in] ID3D10ShaderResourceView * const *ppShaderResourceViews);\n        void GSSetSamplers(\n            [in] UINT StartSlot,\n            [in] UINT NumSamplers,\n            [in] ID3D10SamplerState *const *ppSamplers);\n        void OMSetRenderTargets(\n            [in] UINT NumViews,\n            [in] ID3D10RenderTargetView *const *ppRenderTargetViews,\n            [in] ID3D10DepthStencilView *pDepthStencilView);\n        void OMSetBlendState(\n            [in] ID3D10BlendState *pBlendState,\n            [in] const FLOAT BlendFactor[4],\n            [in] UINT SampleMask);\n        void OMSetDepthStencilState(\n            [in] ID3D10DepthStencilState *pDepthStencilState,\n            [in] UINT StencilRef);\n        void SOSetTargets(\n            [in] UINT NumBuffers,\n            [in] ID3D10Buffer *const *ppSOTargets,\n            [in] const UINT *pOffsets);\n        void DrawAuto();\n        void RSSetState(\n            [in] ID3D10RasterizerState *pRasterizerState);\n        void RSSetViewports(\n            [in] UINT NumViewports,\n            [in] const D3D10_VIEWPORT *pViewports);\n        void RSSetScissorRects(\n            [in] UINT NumRects,\n            [in] const D3D10_RECT *pRects);\n        void CopySubresourceRegion(\n            [in] ID3D10Resource *pDstResource,\n            [in] UINT DstSubresource,\n            [in] UINT DstX,\n            [in] UINT DstY,\n            [in] UINT DstZ,\n            [in] ID3D10Resource *pSrcResource,\n            [in] UINT SrcSubresource,\n            [in] const D3D10_BOX *pSrcBox);\n        void CopyResource(\n            [in] ID3D10Resource *pDstResource,\n            [in] ID3D10Resource *pSrcResource);\n        void UpdateSubresource(\n            [in] ID3D10Resource *pDstResource,\n            [in] UINT DstSubresource,\n            [in] const D3D10_BOX *pDstBox,\n            [in] const void *pSrcData,\n            [in] UINT SrcRowPitch,\n            [in] UINT SrcDepthPitch);\n        void ClearRenderTargetView(\n            [in] ID3D10RenderTargetView *pRenderTargetView,\n            [in] const FLOAT ColorRGBA[4]);\n        void ClearDepthStencilView(\n            [in] ID3D10DepthStencilView *pDepthStencilView,\n            [in] UINT ClearFlags,\n            [in] FLOAT Depth,\n            [in] UINT8 Stencil);\n        void GenerateMips(\n            [in] ID3D10ShaderResourceView *pShaderResourceView);\n        void ResolveSubresource(\n            [in] ID3D10Resource *pDstResource,\n            [in] UINT DstSubresource,\n            [in] ID3D10Resource *pSrcResource,\n            [in] UINT SrcSubresource,\n            [in] DXGI_FORMAT Format);\n        void VSGetConstantBuffers(\n            [in] UINT StartSlot,\n            [in] UINT NumBuffers,\n            [out] ID3D10Buffer **ppConstantBuffers);\n        void PSGetShaderResources(\n            [in] UINT StartSlot,\n            [in] UINT NumViews,\n            [out] ID3D10ShaderResourceView **ppShaderResourceViews);\n        void PSGetShader(\n            [out] ID3D10PixelShader **ppPixelShader);\n        void PSGetSamplers(\n            [in] UINT StartSlot,\n            [in] UINT NumSamplers,\n            [out] ID3D10SamplerState **ppSamplers);\n        void VSGetShader(\n            [out] ID3D10VertexShader **ppVertexShader);\n        void PSGetConstantBuffers(\n            [in] UINT StartSlot,\n            [in] UINT NumBuffers,\n            [out] ID3D10Buffer **ppConstantBuffers);\n        void IAGetInputLayout(\n            [out] ID3D10InputLayout **ppInputLayout);\n        void IAGetVertexBuffers(\n            [in] UINT StartSlot,\n            [in] UINT NumBuffers,\n            [out] ID3D10Buffer **ppVertexBuffers,\n            [out] UINT *pStrides,\n            [out] UINT *pOffsets);\n        void IAGetIndexBuffer(\n            [out] ID3D10Buffer **pIndexBuffer,\n            [out] DXGI_FORMAT *Format,\n            [out] UINT *Offset);\n        void GSGetConstantBuffers(\n            [in] UINT StartSlot,\n            [in] UINT NumBuffers,\n            [out] ID3D10Buffer **ppConstantBuffers);\n        void GSGetShader(\n            [out] ID3D10GeometryShader **ppGeometryShader);\n        void IAGetPrimitiveTopology(\n            [out] D3D10_PRIMITIVE_TOPOLOGY *pTopology);\n        void VSGetShaderResources(\n            [in] UINT StartSlot,\n            [in] UINT NumViews,\n            [out] ID3D10ShaderResourceView **ppShaderResourceViews);\n        void VSGetSamplers(\n            [in] UINT StartSlot,\n            [in] UINT NumSamplers,\n            [out] ID3D10SamplerState **ppSamplers);\n        void GetPredication(\n            [out] ID3D10Predicate **ppPredicate,\n            [out] BOOL *pPredicateValue);\n        void GSGetShaderResources(\n            [in] UINT StartSlot,\n            [in] UINT NumViews,\n            [out] ID3D10ShaderResourceView **ppShaderResourceViews);\n        void GSGetSamplers(\n            [in] UINT StartSlot,\n            [in] UINT NumSamplers,\n            [out] ID3D10SamplerState **ppSamplers);\n        void OMGetRenderTargets(\n            [in] UINT NumViews,\n            [out] ID3D10RenderTargetView **ppRenderTargetViews,\n            [out] ID3D10DepthStencilView **ppDepthStencilView);\n        void OMGetBlendState(\n            [out] ID3D10BlendState **ppBlendState,\n            [out] FLOAT BlendFactor[4],\n            [out] UINT *pSampleMask);\n        void OMGetDepthStencilState(\n            [out] ID3D10DepthStencilState **ppDepthStencilState,\n            [out] UINT *pStencilRef);\n        void SOGetTargets(\n            [in] UINT NumBuffers,\n            [out] ID3D10Buffer **ppSOTargets,\n            [out] UINT *pOffsets);\n        void RSGetState(\n            [out] ID3D10RasterizerState **ppRasterizerState);\n        void RSGetViewports(\n            [in, out] UINT *NumViewports,\n            [out] D3D10_VIEWPORT *pViewports);\n        void RSGetScissorRects(\n            [in, out] UINT *NumRects,\n            [out] D3D10_RECT *pRects);\n        HRESULT GetDeviceRemovedReason();\n        HRESULT SetExceptionMode(\n            [in] UINT RaiseFlags);\n        UINT GetExceptionMode();\n        HRESULT GetPrivateData(\n            [in] REFGUID guid,\n            [in, out] UINT *pDataSize,\n            [out] void *pData);\n        HRESULT SetPrivateData(\n            [in] REFGUID guid,\n            [in] UINT DataSize,\n            [in] const void *pData);\n        HRESULT SetPrivateDataInterface(\n            [in] REFGUID guid,\n            [in] const IUnknown *pData);\n        void ClearState();\n        void Flush();\n        HRESULT CreateBuffer(\n            [in] const D3D10_BUFFER_DESC *pDesc,\n            [in] const D3D10_SUBRESOURCE_DATA *pInitialData,\n            [out] ID3D10Buffer **ppBuffer);\n        HRESULT CreateTexture1D(\n            [in] const D3D10_TEXTURE1D_DESC *pDesc,\n            [in] const D3D10_SUBRESOURCE_DATA *pInitialData,\n            [out] ID3D10Texture1D **ppTexture1D);\n        HRESULT CreateTexture2D(\n            [in] const D3D10_TEXTURE2D_DESC *pDesc,\n            [in] const D3D10_SUBRESOURCE_DATA *pInitialData,\n            [out] ID3D10Texture2D **ppTexture2D);\n        HRESULT CreateTexture3D(\n            [in] const D3D10_TEXTURE3D_DESC *pDesc,\n            [in] const D3D10_SUBRESOURCE_DATA *pInitialData,\n            [out] ID3D10Texture3D **ppTexture3D);\n        HRESULT CreateShaderResourceView(\n            [in] ID3D10Resource *pResource,\n            [in] const D3D10_SHADER_RESOURCE_VIEW_DESC *pDesc,\n            [out] ID3D10ShaderResourceView **ppSRView);\n        HRESULT CreateRenderTargetView(\n            [in] ID3D10Resource *pResource,\n            [in] const D3D10_RENDER_TARGET_VIEW_DESC *pDesc,\n            [out] ID3D10RenderTargetView **ppRTView);\n        HRESULT CreateDepthStencilView(\n            [in] ID3D10Resource *pResource,\n            [in] const D3D10_DEPTH_STENCIL_VIEW_DESC *pDesc,\n            [out] ID3D10DepthStencilView **ppDepthStencilView);\n        HRESULT CreateInputLayout(\n            [in] const D3D10_INPUT_ELEMENT_DESC *pInputElementDescs,\n            [in] UINT NumElements,\n            [in] const void *pShaderBytecodeWithInputSignature,\n            [in] SIZE_T BytecodeLength,\n            [out] ID3D10InputLayout **ppInputLayout);\n        HRESULT CreateVertexShader(\n            [in] const void *pShaderBytecode,\n            [in] SIZE_T BytecodeLength,\n            [out] ID3D10VertexShader **ppVertexShader);\n        HRESULT CreateGeometryShader(\n            [in] const void *pShaderBytecode,\n            [in] SIZE_T BytecodeLength,\n            [out] ID3D10GeometryShader **ppGeometryShader);\n        HRESULT CreateGeometryShaderWithStreamOutput(\n            [in] const void *pShaderBytecode,\n            [in] SIZE_T BytecodeLength,\n            [in] const D3D10_SO_DECLARATION_ENTRY *pSODeclaration,\n            [in] UINT NumEntries,\n            [in] UINT OutputStreamStride,\n            [out] ID3D10GeometryShader **ppGeometryShader);\n        HRESULT CreatePixelShader(\n            [in] const void *pShaderBytecode,\n            [in] SIZE_T BytecodeLength,\n            [out] ID3D10PixelShader **ppPixelShader);\n        HRESULT CreateBlendState(\n            [in] const D3D10_BLEND_DESC *pBlendStateDesc,\n            [out] ID3D10BlendState **ppBlendState);\n        HRESULT CreateDepthStencilState(\n            [in] const D3D10_DEPTH_STENCIL_DESC *pDepthStencilDesc,\n            [out] ID3D10DepthStencilState **ppDepthStencilState);\n        HRESULT CreateRasterizerState(\n            [in] const D3D10_RASTERIZER_DESC *pRasterizerDesc,\n            [out] ID3D10RasterizerState **ppRasterizerState);\n        HRESULT CreateSamplerState(\n            [in] const D3D10_SAMPLER_DESC *pSamplerDesc,\n            [out] ID3D10SamplerState **ppSamplerState);\n        HRESULT CreateQuery(\n            [in] const D3D10_QUERY_DESC *pQueryDesc,\n            [out] ID3D10Query **ppQuery);\n        HRESULT CreatePredicate(\n            [in] const D3D10_QUERY_DESC *pPredicateDesc,\n            [out] ID3D10Predicate **ppPredicate);\n        HRESULT CreateCounter(\n            [in] const D3D10_COUNTER_DESC *pCounterDesc,\n            [out] ID3D10Counter **ppCounter);\n        HRESULT CheckFormatSupport(\n            [in] DXGI_FORMAT Format,\n            [out] UINT *pFormatSupport);\n        HRESULT CheckMultisampleQualityLevels(\n            [in] DXGI_FORMAT Format,\n            [in] UINT SampleCount,\n            [out] UINT *pNumQualityLevels);\n        void CheckCounterInfo(\n            [out] D3D10_COUNTER_INFO *pCounterInfo);\n        HRESULT CheckCounter(\n            [in] const D3D10_COUNTER_DESC *pDesc,\n            [out] D3D10_COUNTER_TYPE *pType,\n            [out] UINT *pActiveCounters,\n            [out] char *name,\n            [in, out] UINT *pNameLength,\n            [out] char *units,\n            [in, out] UINT *pUnitsLength,\n            [out] char *description,\n            [in, out] UINT *pDescriptionLength);\n        UINT GetCreationFlags();\n        HRESULT OpenSharedResource(\n            [in] HANDLE hResource,\n            [in] REFIID ReturnedInterface,\n            [out] void **ppResource);\n        void SetTextFilterSize(\n            [in] UINT Width,\n            [in] UINT Height);\n        void GetTextFilterSize(\n            [out] UINT *pWidth,\n            [out] UINT *pHeight);\n}\n\n[\n    object,\n    local,\n    uuid(9b7e4e00-342c-4106-a19f-4f2704f689f0)\n]\ninterface ID3D10Multithread : IUnknown\n{\n        void Enter();\n        void Leave();\n        BOOL SetMultithreadProtected(\n            [in] BOOL bMTProtect);\n        BOOL GetMultithreadProtected();\n}\n\ncpp_quote(\"#ifndef D3D10_IGNORE_SDK_LAYERS\")\ncpp_quote(\"#include \\\"d3d10sdklayers.h\\\"\")\ncpp_quote(\"#endif\")\ncpp_quote(\"#include \\\"d3d10misc.h\\\"\")\ncpp_quote(\"#include \\\"d3d10shader.h\\\"\")\ncpp_quote(\"#include \\\"d3d10effect.h\\\"\")\n"
  },
  {
    "path": "wine/windows/d3d10_1.idl",
    "content": "/*\n * Copyright 2010 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\n\ncpp_quote(\"#ifndef _D3D10_1_CONSTANTS\")\ncpp_quote(\"#define _D3D10_1_CONSTANTS\")\nconst UINT D3D10_1_DEFAULT_SAMPLE_MASK                     = 0xffffffff;\nconst UINT D3D10_1_GS_INPUT_REGISTER_COUNT                 = 32;\nconst UINT D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT     = 32;\nconst UINT D3D10_1_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS = 128;\nconst UINT D3D10_1_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT = 32;\nconst UINT D3D10_1_PS_OUTPUT_MASK_REGISTER_COMPONENTS      = 1;\nconst UINT D3D10_1_PS_OUTPUT_MASK_REGISTER_COMPONENT_BIT_COUNT = 32;\nconst UINT D3D10_1_PS_OUTPUT_MASK_REGISTER_COUNT           = 1;\nconst UINT D3D10_1_SHADER_MAJOR_VERSION                    = 4;\nconst UINT D3D10_1_SHADER_MINOR_VERSION                    = 1;\nconst UINT D3D10_1_SO_BUFFER_MAX_STRIDE_IN_BYTES           = 2048;\nconst UINT D3D10_1_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES     = 256;\nconst UINT D3D10_1_SO_BUFFER_SLOT_COUNT                    = 4;\nconst UINT D3D10_1_SO_MULTIPLE_BUFFER_ELEMENTS_PER_BUFFER  = 1;\nconst UINT D3D10_1_SO_SINGLE_BUFFER_COMPONENT_LIMIT        = 64;\nconst UINT D3D10_1_STANDARD_VERTEX_ELEMENT_COUNT           = 32;\nconst UINT D3D10_1_SUBPIXEL_FRACTIONAL_BIT_COUNT           = 8;\nconst UINT D3D10_1_VS_INPUT_REGISTER_COUNT                 = 32;\nconst UINT D3D10_1_VS_OUTPUT_REGISTER_COUNT                = 32;\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#define D3D10_1_FLOAT16_FUSED_TOLERANCE_IN_ULP      (0.6)\")\ncpp_quote(\"#define D3D10_1_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP (0.6f)\")\n\nimport \"d3d10.idl\";\ncpp_quote(\"#include <d3d10_1shader.h>\")\n\n\ntypedef enum D3D10_FEATURE_LEVEL1\n{\n    D3D10_FEATURE_LEVEL_10_0  = 0xa000,\n    D3D10_FEATURE_LEVEL_10_1  = 0xa100,\n    D3D10_FEATURE_LEVEL_9_1   = 0x9100,\n    D3D10_FEATURE_LEVEL_9_2   = 0x9200,\n    D3D10_FEATURE_LEVEL_9_3   = 0x9300\n} D3D10_FEATURE_LEVEL1;\n\ntypedef struct D3D10_RENDER_TARGET_BLEND_DESC1\n{\n    BOOL BlendEnable;\n    D3D10_BLEND SrcBlend;\n    D3D10_BLEND DestBlend;\n    D3D10_BLEND_OP BlendOp;\n    D3D10_BLEND SrcBlendAlpha;\n    D3D10_BLEND DestBlendAlpha;\n    D3D10_BLEND_OP BlendOpAlpha;\n    UINT8 RenderTargetWriteMask;\n} D3D10_RENDER_TARGET_BLEND_DESC1;\n\ntypedef struct D3D10_BLEND_DESC1\n{\n    BOOL AlphaToCoverageEnable;\n    BOOL IndependentBlendEnable;\n    D3D10_RENDER_TARGET_BLEND_DESC1 RenderTarget[D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT];\n} D3D10_BLEND_DESC1;\n\n[\n    uuid(edad8d99-8a35-4d6d-8566-2ea276cde161),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D10BlendState1 : ID3D10BlendState\n{\n    void GetDesc1([out] D3D10_BLEND_DESC1 *pDesc);\n}\n\ntypedef struct D3D10_TEXCUBE_ARRAY_SRV1\n{\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    UINT First2DArrayFace;\n    UINT NumCubes;\n} D3D10_TEXCUBE_ARRAY_SRV1;\n\ntypedef D3D_SRV_DIMENSION D3D10_SRV_DIMENSION1;\n\ntypedef struct D3D10_SHADER_RESOURCE_VIEW_DESC1\n{\n    DXGI_FORMAT Format;\n    D3D10_SRV_DIMENSION1  ViewDimension;\n    union {\n        D3D10_BUFFER_SRV Buffer;\n        D3D10_TEX1D_SRV Texture1D;\n        D3D10_TEX1D_ARRAY_SRV Texture1DArray;\n        D3D10_TEX2D_SRV Texture2D;\n        D3D10_TEX2D_ARRAY_SRV Texture2DArray;\n        D3D10_TEX2DMS_SRV Texture2DMS;\n        D3D10_TEX2DMS_ARRAY_SRV Texture2DMSArray;\n        D3D10_TEX3D_SRV Texture3D;\n        D3D10_TEXCUBE_SRV TextureCube;\n        D3D10_TEXCUBE_ARRAY_SRV1 TextureCubeArray;\n    };\n} D3D10_SHADER_RESOURCE_VIEW_DESC1;\n\n[\n    uuid(9b7e4c87-342c-4106-a19f-4f2704f689f0),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D10ShaderResourceView1 : ID3D10ShaderResourceView\n{\n    void GetDesc1([out] D3D10_SHADER_RESOURCE_VIEW_DESC1 *pDesc);\n}\n\n[\n    uuid(9b7e4c8f-342c-4106-a19f-4f2704f689f0),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D10Device1 : ID3D10Device\n{\n    HRESULT CreateShaderResourceView1(\n            [in] ID3D10Resource *pResource,\n            [in, out] const D3D10_SHADER_RESOURCE_VIEW_DESC1 *pDesc,\n            [out] ID3D10ShaderResourceView1 **ppSRView);\n\n    HRESULT CreateBlendState1(\n            [in] const D3D10_BLEND_DESC1 *pBlendStateDesc,\n            [out] ID3D10BlendState1 **ppBlendState);\n\n    D3D10_FEATURE_LEVEL1 GetFeatureLevel();\n}\n\nconst UINT D3D10_1_SDK_VERSION = 0x20;\n\ncpp_quote(\"HRESULT WINAPI D3D10CreateDevice1(IDXGIAdapter*,D3D10_DRIVER_TYPE,\")\ncpp_quote(\"    HMODULE,UINT,D3D10_FEATURE_LEVEL1,UINT,ID3D10Device1**);\")\n\n[local] HRESULT __stdcall D3D10CreateDeviceAndSwapChain1(IDXGIAdapter *adapter, enum D3D10_DRIVER_TYPE driver_type,\n        HMODULE swrast, UINT flags, D3D10_FEATURE_LEVEL1 feature_level, UINT sdk_version,\n        DXGI_SWAP_CHAIN_DESC *swapchain_desc, IDXGISwapChain **swapchain, ID3D10Device1 **device);\n"
  },
  {
    "path": "wine/windows/d3d10_1shader.h",
    "content": "/*\n * Copyright 2010 Rico Schüller\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __D3D10_1SHADER_H__\n#define __D3D10_1SHADER_H__\n\n#include \"d3d10shader.h\"\n\nDEFINE_GUID(IID_ID3D10ShaderReflection1, 0xc3457783, 0xa846, 0x47ce, 0x95, 0x20, 0xce, 0xa6, 0xf6, 0x6e, 0x74, 0x47);\n\n#define INTERFACE ID3D10ShaderReflection1\nDECLARE_INTERFACE_(ID3D10ShaderReflection1, IUnknown)\n{\n    /* IUnknown methods */\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /* ID3D10ShaderReflection1 methods */\n    STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D10ShaderReflectionConstantBuffer *, GetConstantBufferByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10ShaderReflectionConstantBuffer *, GetConstantBufferByName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetResourceBindingDesc)(THIS_ UINT index, D3D10_SHADER_INPUT_BIND_DESC *desc) PURE;\n    STDMETHOD(GetInputParameterDesc)(THIS_ UINT index, D3D10_SIGNATURE_PARAMETER_DESC *desc) PURE;\n    STDMETHOD(GetOutputParameterDesc)(THIS_ UINT index, D3D10_SIGNATURE_PARAMETER_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D10ShaderReflectionVariable *, GetVariableByName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetResourceBindingDescByName)(THIS_ const char *name, D3D10_SHADER_INPUT_BIND_DESC *desc) PURE;\n    STDMETHOD(GetMovInstructionCount)(THIS_ UINT *count) PURE;\n    STDMETHOD(GetMovcInstructionCount)(THIS_ UINT *count) PURE;\n    STDMETHOD(GetConversionInstructionCount)(THIS_ UINT *count) PURE;\n    STDMETHOD(GetBitwiseInstructionCount)(THIS_ UINT *count) PURE;\n    STDMETHOD(GetGSInputPrimitive)(THIS_ D3D10_PRIMITIVE *prim) PURE;\n    STDMETHOD(IsLevel9Shader)(THIS_ BOOL *level9shader) PURE;\n    STDMETHOD(IsSampleFrequencyShader)(THIS_ BOOL *samplefrequency) PURE;\n};\n#undef INTERFACE\n\n#endif\n"
  },
  {
    "path": "wine/windows/d3d10effect.h",
    "content": "/*\n * Copyright 2009 Henri Verbeet for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n */\n\n#ifndef __WINE_D3D10EFFECT_H\n#define __WINE_D3D10EFFECT_H\n\n#include \"d3d10.h\"\n\n#define D3D10_EFFECT_VARIABLE_POOLED                0x1\n#define D3D10_EFFECT_VARIABLE_ANNOTATION            0x2\n#define D3D10_EFFECT_VARIABLE_EXPLICIT_BIND_POINT   0x4\n\n#ifndef D3D10_BYTES_FROM_BITS\n#define D3D10_BYTES_FROM_BITS(x) (((x) + 7) >> 3)\n#endif\n\ntypedef enum _D3D10_DEVICE_STATE_TYPES\n{\n    D3D10_DST_SO_BUFFERS = 1,\n    D3D10_DST_OM_RENDER_TARGETS,\n    D3D10_DST_DEPTH_STENCIL_STATE,\n    D3D10_DST_BLEND_STATE,\n    D3D10_DST_VS,\n    D3D10_DST_VS_SAMPLERS,\n    D3D10_DST_VS_SHADER_RESOURCES,\n    D3D10_DST_VS_CONSTANT_BUFFERS,\n    D3D10_DST_GS,\n    D3D10_DST_GS_SAMPLERS,\n    D3D10_DST_GS_SHADER_RESOURCES,\n    D3D10_DST_GS_CONSTANT_BUFFERS,\n    D3D10_DST_PS,\n    D3D10_DST_PS_SAMPLERS,\n    D3D10_DST_PS_SHADER_RESOURCES,\n    D3D10_DST_PS_CONSTANT_BUFFERS,\n    D3D10_DST_IA_VERTEX_BUFFERS,\n    D3D10_DST_IA_INDEX_BUFFER,\n    D3D10_DST_IA_INPUT_LAYOUT,\n    D3D10_DST_IA_PRIMITIVE_TOPOLOGY,\n    D3D10_DST_RS_VIEWPORTS,\n    D3D10_DST_RS_SCISSOR_RECTS,\n    D3D10_DST_RS_RASTERIZER_STATE,\n    D3D10_DST_PREDICATION,\n} D3D10_DEVICE_STATE_TYPES;\n\ntypedef struct _D3D10_EFFECT_TYPE_DESC\n{\n    const char *TypeName;\n    D3D10_SHADER_VARIABLE_CLASS Class;\n    D3D10_SHADER_VARIABLE_TYPE Type;\n    UINT Elements;\n    UINT Members;\n    UINT Rows;\n    UINT Columns;\n    UINT PackedSize;\n    UINT UnpackedSize;\n    UINT Stride;\n} D3D10_EFFECT_TYPE_DESC;\n\ntypedef struct _D3D10_EFFECT_VARIABLE_DESC\n{\n    const char *Name;\n    const char *Semantic;\n    UINT Flags;\n    UINT Annotations;\n    UINT BufferOffset;\n    UINT ExplicitBindPoint;\n} D3D10_EFFECT_VARIABLE_DESC;\n\ntypedef struct _D3D10_TECHNIQUE_DESC\n{\n    const char *Name;\n    UINT Passes;\n    UINT Annotations;\n} D3D10_TECHNIQUE_DESC;\n\ntypedef struct _D3D10_STATE_BLOCK_MASK\n{\n    BYTE VS;\n    BYTE VSSamplers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT)];\n    BYTE VSShaderResources[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)];\n    BYTE VSConstantBuffers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)];\n    BYTE GS;\n    BYTE GSSamplers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT)];\n    BYTE GSShaderResources[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)];\n    BYTE GSConstantBuffers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)];\n    BYTE PS;\n    BYTE PSSamplers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT)];\n    BYTE PSShaderResources[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)];\n    BYTE PSConstantBuffers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)];\n    BYTE IAVertexBuffers[D3D10_BYTES_FROM_BITS(D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT)];\n    BYTE IAIndexBuffer;\n    BYTE IAInputLayout;\n    BYTE IAPrimitiveTopology;\n    BYTE OMRenderTargets;\n    BYTE OMDepthStencilState;\n    BYTE OMBlendState;\n    BYTE RSViewports;\n    BYTE RSScissorRects;\n    BYTE RSRasterizerState;\n    BYTE SOBuffers;\n    BYTE Predication;\n} D3D10_STATE_BLOCK_MASK;\n\ntypedef struct _D3D10_EFFECT_DESC\n{\n    BOOL IsChildEffect;\n    UINT ConstantBuffers;\n    UINT SharedConstantBuffers;\n    UINT GlobalVariables;\n    UINT SharedGlobalVariables;\n    UINT Techniques;\n} D3D10_EFFECT_DESC;\n\ntypedef struct _D3D10_EFFECT_SHADER_DESC\n{\n    const BYTE *pInputSignature;\n    BOOL IsInline;\n    const BYTE *pBytecode;\n    UINT BytecodeLength;\n    const char *SODecl;\n    UINT NumInputSignatureEntries;\n    UINT NumOutputSignatureEntries;\n} D3D10_EFFECT_SHADER_DESC;\n\ntypedef struct _D3D10_PASS_DESC\n{\n    const char *Name;\n    UINT Annotations;\n    BYTE *pIAInputSignature;\n    SIZE_T IAInputSignatureSize;\n    UINT StencilRef;\n    UINT SampleMask;\n    FLOAT BlendFactor[4];\n} D3D10_PASS_DESC;\n\ntypedef struct _D3D10_PASS_SHADER_DESC\n{\n    struct ID3D10EffectShaderVariable *pShaderVariable;\n    UINT ShaderIndex;\n} D3D10_PASS_SHADER_DESC;\n\n#define D3D10_EFFECT_COMPILE_CHILD_EFFECT    0x0001\n#define D3D10_EFFECT_COMPILE_ALLOW_SLOW_OPS  0x0002\n#define D3D10_EFFECT_SINGLE_THREADED         0x0008\n\nDEFINE_GUID(IID_ID3D10EffectType, 0x4e9e1ddc, 0xcd9d, 0x4772, 0xa8, 0x37, 0x00, 0x18, 0x0b, 0x9b, 0x88, 0xfd);\n\n#define INTERFACE ID3D10EffectType\nDECLARE_INTERFACE(ID3D10EffectType)\n{\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_TYPE_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D10EffectType *, GetMemberTypeByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectType *, GetMemberTypeByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectType *, GetMemberTypeBySemantic)(THIS_ const char *semantic) PURE;\n    STDMETHOD_(const char *, GetMemberName)(THIS_ UINT index) PURE;\n    STDMETHOD_(const char *, GetMemberSemantic)(THIS_ UINT index) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D10EffectVariable, 0xae897105, 0x00e6, 0x45bf, 0xbb, 0x8e, 0x28, 0x1d, 0xd6, 0xdb, 0x8e, 0x1b);\n\n#define INTERFACE ID3D10EffectVariable\nDECLARE_INTERFACE(ID3D10EffectVariable)\n{\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;\n    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D10EffectConstantBuffer, 0x56648f4d, 0xcc8b, 0x4444, 0xa5, 0xad, 0xb5, 0xa3, 0xd7, 0x6e, 0x91, 0xb3);\n\n#define INTERFACE ID3D10EffectConstantBuffer\nDECLARE_INTERFACE_(ID3D10EffectConstantBuffer, ID3D10EffectVariable)\n{\n    /* ID3D10EffectVariable methods */\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;\n    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    /* ID3D10EffectConstantBuffer methods */\n    STDMETHOD(SetConstantBuffer)(THIS_ ID3D10Buffer *buffer) PURE;\n    STDMETHOD(GetConstantBuffer)(THIS_ ID3D10Buffer **buffer) PURE;\n    STDMETHOD(SetTextureBuffer)(THIS_ ID3D10ShaderResourceView *view) PURE;\n    STDMETHOD(GetTextureBuffer)(THIS_ ID3D10ShaderResourceView **view) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D10EffectScalarVariable, 0x00e48f7b, 0xd2c8, 0x49e8, 0xa8, 0x6c, 0x02, 0x2d, 0xee, 0x53, 0x43, 0x1f);\n\n#define INTERFACE ID3D10EffectScalarVariable\nDECLARE_INTERFACE_(ID3D10EffectScalarVariable, ID3D10EffectVariable)\n{\n    /* ID3D10EffectVariable methods */\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;\n    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    /* ID3D10EffectScalarVariable methods */\n    STDMETHOD(SetFloat)(THIS_ float value) PURE;\n    STDMETHOD(GetFloat)(THIS_ float *value) PURE;\n    STDMETHOD(SetFloatArray)(THIS_ float *values, UINT offset, UINT count) PURE;\n    STDMETHOD(GetFloatArray)(THIS_ float *values, UINT offset, UINT count) PURE;\n    STDMETHOD(SetInt)(THIS_ int value) PURE;\n    STDMETHOD(GetInt)(THIS_ int *value) PURE;\n    STDMETHOD(SetIntArray)(THIS_ int *values, UINT offset, UINT count) PURE;\n    STDMETHOD(GetIntArray)(THIS_ int *values, UINT offset, UINT count) PURE;\n    STDMETHOD(SetBool)(THIS_ BOOL value) PURE;\n    STDMETHOD(GetBool)(THIS_ BOOL *value) PURE;\n    STDMETHOD(SetBoolArray)(THIS_ BOOL *values, UINT offset, UINT count) PURE;\n    STDMETHOD(GetBoolArray)(THIS_ BOOL *values, UINT offset, UINT count) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D10EffectVectorVariable, 0x62b98c44, 0x1f82, 0x4c67, 0xbc, 0xd0, 0x72, 0xcf, 0x8f, 0x21, 0x7e, 0x81);\n\n#define INTERFACE ID3D10EffectVectorVariable\nDECLARE_INTERFACE_(ID3D10EffectVectorVariable, ID3D10EffectVariable)\n{\n    /* ID3D10EffectVariable methods */\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;\n    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    /* ID3D10EffectVectorVariable methods */\n    STDMETHOD(SetBoolVector)(THIS_ BOOL *value) PURE;\n    STDMETHOD(SetIntVector)(THIS_ int *value) PURE;\n    STDMETHOD(SetFloatVector)(THIS_ float *value) PURE;\n    STDMETHOD(GetBoolVector)(THIS_ BOOL *value) PURE;\n    STDMETHOD(GetIntVector)(THIS_ int *value) PURE;\n    STDMETHOD(GetFloatVector)(THIS_ float *value) PURE;\n    STDMETHOD(SetBoolVectorArray)(THIS_ BOOL *values, UINT offset, UINT count) PURE;\n    STDMETHOD(SetIntVectorArray)(THIS_ int *values, UINT offset, UINT count) PURE;\n    STDMETHOD(SetFloatVectorArray)(THIS_ float *values, UINT offset, UINT count) PURE;\n    STDMETHOD(GetBoolVectorArray)(THIS_ BOOL *values, UINT offset, UINT count) PURE;\n    STDMETHOD(GetIntVectorArray)(THIS_ int *values, UINT offset, UINT count) PURE;\n    STDMETHOD(GetFloatVectorArray)(THIS_ float *values, UINT offset, UINT count) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D10EffectMatrixVariable, 0x50666c24, 0xb82f, 0x4eed, 0xa1, 0x72, 0x5b, 0x6e, 0x7e, 0x85, 0x22, 0xe0);\n\n#define INTERFACE ID3D10EffectMatrixVariable\nDECLARE_INTERFACE_(ID3D10EffectMatrixVariable, ID3D10EffectVariable)\n{\n    /* ID3D10EffectVariable methods */\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;\n    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    /* ID3D10EffectMatrixVariable methods */\n    STDMETHOD(SetMatrix)(THIS_ float *data) PURE;\n    STDMETHOD(GetMatrix)(THIS_ float *data) PURE;\n    STDMETHOD(SetMatrixArray)(THIS_ float *data, UINT offset, UINT count) PURE;\n    STDMETHOD(GetMatrixArray)(THIS_ float *data, UINT offset, UINT count) PURE;\n    STDMETHOD(SetMatrixTranspose)(THIS_ float *data) PURE;\n    STDMETHOD(GetMatrixTranspose)(THIS_ float *data) PURE;\n    STDMETHOD(SetMatrixTransposeArray)(THIS_ float *data, UINT offset, UINT count) PURE;\n    STDMETHOD(GetMatrixTransposeArray)(THIS_ float *data, UINT offset, UINT count) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D10EffectStringVariable, 0x71417501, 0x8df9, 0x4e0a, 0xa7, 0x8a, 0x25, 0x5f, 0x97, 0x56, 0xba, 0xff);\n\n#define INTERFACE ID3D10EffectStringVariable\nDECLARE_INTERFACE_(ID3D10EffectStringVariable, ID3D10EffectVariable)\n{\n    /* ID3D10EffectVariable methods */\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;\n    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    /* ID3D10EffectStringVariable methods */\n    STDMETHOD(GetString)(THIS_ const char **str) PURE;\n    STDMETHOD(GetStringArray)(THIS_ const char **strs, UINT offset, UINT count) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D10EffectShaderResourceVariable,\n        0xc0a7157b, 0xd872, 0x4b1d, 0x80, 0x73, 0xef, 0xc2, 0xac, 0xd4, 0xb1, 0xfc);\n\n#define INTERFACE ID3D10EffectShaderResourceVariable\nDECLARE_INTERFACE_(ID3D10EffectShaderResourceVariable, ID3D10EffectVariable)\n{\n    /* ID3D10EffectVariable methods */\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;\n    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    /* ID3D10EffectShaderResourceVariable methods */\n    STDMETHOD(SetResource)(THIS_ ID3D10ShaderResourceView *resource) PURE;\n    STDMETHOD(GetResource)(THIS_ ID3D10ShaderResourceView **resource) PURE;\n    STDMETHOD(SetResourceArray)(THIS_ ID3D10ShaderResourceView **resources, UINT offset, UINT count) PURE;\n    STDMETHOD(GetResourceArray)(THIS_ ID3D10ShaderResourceView **resources, UINT offset, UINT count) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D10EffectRenderTargetViewVariable,\n        0x28ca0cc3, 0xc2c9, 0x40bb, 0xb5, 0x7f, 0x67, 0xb7, 0x37, 0x12, 0x2b, 0x17);\n\n#define INTERFACE ID3D10EffectRenderTargetViewVariable\nDECLARE_INTERFACE_(ID3D10EffectRenderTargetViewVariable, ID3D10EffectVariable)\n{\n    /* ID3D10EffectVariable methods */\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;\n    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    /* ID3D10EffectRenderTargetViewVariable methods */\n    STDMETHOD(SetRenderTarget)(THIS_ ID3D10RenderTargetView *view) PURE;\n    STDMETHOD(GetRenderTarget)(THIS_ ID3D10RenderTargetView **view) PURE;\n    STDMETHOD(SetRenderTargetArray)(THIS_ ID3D10RenderTargetView **views, UINT offset, UINT count) PURE;\n    STDMETHOD(GetRenderTargetArray)(THIS_ ID3D10RenderTargetView **views, UINT offset, UINT count) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D10EffectDepthStencilViewVariable,\n        0x3e02c918, 0xcc79, 0x4985, 0xb6, 0x22, 0x2d, 0x92, 0xad, 0x70, 0x16, 0x23);\n\n#define INTERFACE ID3D10EffectDepthStencilViewVariable\nDECLARE_INTERFACE_(ID3D10EffectDepthStencilViewVariable, ID3D10EffectVariable)\n{\n    /* ID3D10EffectVariable methods */\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;\n    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    /* ID3D10EffectDepthStencilViewVariable methods */\n    STDMETHOD(SetDepthStencil)(THIS_ ID3D10DepthStencilView *view) PURE;\n    STDMETHOD(GetDepthStencil)(THIS_ ID3D10DepthStencilView **view) PURE;\n    STDMETHOD(SetDepthStencilArray)(THIS_ ID3D10DepthStencilView **views, UINT offset, UINT count) PURE;\n    STDMETHOD(GetDepthStencilArray)(THIS_ ID3D10DepthStencilView **views, UINT offset, UINT count) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D10EffectShaderVariable, 0x80849279, 0xc799, 0x4797, 0x8c, 0x33, 0x04, 0x07, 0xa0, 0x7d, 0x9e, 0x06);\n\n#define INTERFACE ID3D10EffectShaderVariable\nDECLARE_INTERFACE_(ID3D10EffectShaderVariable, ID3D10EffectVariable)\n{\n    /* ID3D10EffectVariable methods */\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;\n    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    /* ID3D10EffectShaderVariable methods */\n    STDMETHOD(GetShaderDesc)(THIS_ UINT index, D3D10_EFFECT_SHADER_DESC *desc) PURE;\n    STDMETHOD(GetVertexShader)(THIS_ UINT index, ID3D10VertexShader **shader) PURE;\n    STDMETHOD(GetGeometryShader)(THIS_ UINT index, ID3D10GeometryShader **shader) PURE;\n    STDMETHOD(GetPixelShader)(THIS_ UINT index, ID3D10PixelShader **shader) PURE;\n    STDMETHOD(GetInputSignatureElementDesc)(THIS_ UINT shader_index, UINT element_index,\n            D3D10_SIGNATURE_PARAMETER_DESC *desc) PURE;\n    STDMETHOD(GetOutputSignatureElementDesc)(THIS_ UINT shader_index, UINT element_index,\n            D3D10_SIGNATURE_PARAMETER_DESC *desc) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D10EffectBlendVariable, 0x1fcd2294, 0xdf6d, 0x4eae, 0x86, 0xb3, 0x0e, 0x91, 0x60, 0xcf, 0xb0, 0x7b);\n\n#define INTERFACE ID3D10EffectBlendVariable\nDECLARE_INTERFACE_(ID3D10EffectBlendVariable, ID3D10EffectVariable)\n{\n    /* ID3D10EffectVariable methods */\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;\n    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    /* ID3D10EffectBlendVariable methods */\n    STDMETHOD(GetBlendState)(THIS_ UINT index, ID3D10BlendState **blend_state) PURE;\n    STDMETHOD(GetBackingStore)(THIS_ UINT index, D3D10_BLEND_DESC *desc) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D10EffectDepthStencilVariable,\n        0xaf482368, 0x330a, 0x46a5, 0x9a, 0x5c, 0x01, 0xc7, 0x1a, 0xf2, 0x4c, 0x8d);\n\n#define INTERFACE ID3D10EffectDepthStencilVariable\nDECLARE_INTERFACE_(ID3D10EffectDepthStencilVariable, ID3D10EffectVariable)\n{\n    /* ID3D10EffectVariable methods */\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;\n    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    /* ID3D10EffectDepthStencilVariable methods */\n    STDMETHOD(GetDepthStencilState)(THIS_ UINT index, ID3D10DepthStencilState **depth_stencil_state) PURE;\n    STDMETHOD(GetBackingStore)(THIS_ UINT index, D3D10_DEPTH_STENCIL_DESC *desc) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D10EffectRasterizerVariable,\n        0x21af9f0e, 0x4d94, 0x4ea9, 0x97, 0x85, 0x2c, 0xb7, 0x6b, 0x8c, 0x0b, 0x34);\n\n#define INTERFACE ID3D10EffectRasterizerVariable\nDECLARE_INTERFACE_(ID3D10EffectRasterizerVariable, ID3D10EffectVariable)\n{\n    /* ID3D10EffectVariable methods */\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;\n    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    /* ID3D10EffectRasterizerVariable methods */\n    STDMETHOD(GetRasterizerState)(THIS_ UINT index, ID3D10RasterizerState **rasterizer_state) PURE;\n    STDMETHOD(GetBackingStore)(THIS_ UINT index, D3D10_RASTERIZER_DESC *desc) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D10EffectSamplerVariable,\n        0x6530d5c7, 0x07e9, 0x4271, 0xa4, 0x18, 0xe7, 0xce, 0x4b, 0xd1, 0xe4, 0x80);\n\n#define INTERFACE ID3D10EffectSamplerVariable\nDECLARE_INTERFACE_(ID3D10EffectSamplerVariable, ID3D10EffectVariable)\n{\n    /* ID3D10EffectVariable methods */\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;\n    STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;\n    /* ID3D10EffectSamplerVariable methods */\n    STDMETHOD(GetSampler)(THIS_ UINT index, ID3D10SamplerState **sampler) PURE;\n    STDMETHOD(GetBackingStore)(THIS_ UINT index, D3D10_SAMPLER_DESC *desc) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D10EffectTechnique, 0xdb122ce8, 0xd1c9, 0x4292, 0xb2, 0x37, 0x24, 0xed, 0x3d, 0xe8, 0xb1, 0x75);\n\n#define INTERFACE ID3D10EffectTechnique\nDECLARE_INTERFACE(ID3D10EffectTechnique)\n{\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_TECHNIQUE_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectPass *, GetPassByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectPass *, GetPassByName)(THIS_ const char *name) PURE;\n    STDMETHOD(ComputeStateBlockMask)(THIS_ D3D10_STATE_BLOCK_MASK *mask) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D10Effect, 0x51b0ca8b, 0xec0b, 0x4519, 0x87, 0x0d, 0x8e, 0xe1, 0xcb, 0x50, 0x17, 0xc7);\n\n#define INTERFACE ID3D10Effect\nDECLARE_INTERFACE_(ID3D10Effect, IUnknown)\n{\n    /* IUnknown methods */\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /* ID3D10Effect methods */\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD_(BOOL, IsPool)(THIS) PURE;\n    STDMETHOD(GetDevice)(THIS_ ID3D10Device **device) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetConstantBufferByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetConstantBufferByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetVariableByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetVariableByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetVariableBySemantic)(THIS_ const char *semantic) PURE;\n    STDMETHOD_(struct ID3D10EffectTechnique *, GetTechniqueByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectTechnique *, GetTechniqueByName)(THIS_ const char *name) PURE;\n    STDMETHOD(Optimize)(THIS) PURE;\n    STDMETHOD_(BOOL, IsOptimized)(THIS) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D10EffectPool, 0x9537ab04, 0x3250, 0x412e, 0x82, 0x13, 0xfc, 0xd2, 0xf8, 0x67, 0x79, 0x33);\n\n#define INTERFACE ID3D10EffectPool\nDECLARE_INTERFACE_(ID3D10EffectPool, IUnknown)\n{\n    /* IUnknown methods */\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /* ID3D10EffectPool methods */\n    STDMETHOD_(struct ID3D10Effect *, AsEffect)(THIS) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D10EffectPass, 0x5cfbeb89, 0x1a06, 0x46e0, 0xb2, 0x82, 0xe3, 0xf9, 0xbf, 0xa3, 0x6a, 0x54);\n\n#define INTERFACE ID3D10EffectPass\nDECLARE_INTERFACE(ID3D10EffectPass)\n{\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_PASS_DESC *desc) PURE;\n    STDMETHOD(GetVertexShaderDesc)(THIS_ D3D10_PASS_SHADER_DESC *desc) PURE;\n    STDMETHOD(GetGeometryShaderDesc)(THIS_ D3D10_PASS_SHADER_DESC *desc) PURE;\n    STDMETHOD(GetPixelShaderDesc)(THIS_ D3D10_PASS_SHADER_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;\n    STDMETHOD(Apply)(THIS_ UINT flags) PURE;\n    STDMETHOD(ComputeStateBlockMask)(THIS_ D3D10_STATE_BLOCK_MASK *mask) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D10StateBlock, 0x0803425a, 0x57f5, 0x4dd6, 0x94, 0x65, 0xa8, 0x75, 0x70, 0x83, 0x4a, 0x08);\n\n#define INTERFACE ID3D10StateBlock\nDECLARE_INTERFACE_(ID3D10StateBlock, IUnknown)\n{\n    /* IUnknown methods */\n    STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **object) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /* ID3D10StateBlock methods */\n    STDMETHOD(Capture)(THIS) PURE;\n    STDMETHOD(Apply)(THIS) PURE;\n    STDMETHOD(ReleaseAllDeviceObjects)(THIS) PURE;\n    STDMETHOD(GetDevice)(THIS_ ID3D10Device **device) PURE;\n};\n#undef INTERFACE\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nHRESULT WINAPI D3D10CompileEffectFromMemory(void *data, SIZE_T data_size, const char *filename,\n        const D3D10_SHADER_MACRO *defines, ID3D10Include *include, UINT hlsl_flags, UINT fx_flags,\n        ID3D10Blob **effect, ID3D10Blob **errors);\nHRESULT WINAPI D3D10CreateEffectFromMemory(void *data, SIZE_T data_size, UINT flags,\n        ID3D10Device *device, ID3D10EffectPool *effect_pool, ID3D10Effect **effect);\nHRESULT WINAPI D3D10CreateEffectPoolFromMemory(void *data, SIZE_T data_size, UINT fx_flags,\n        ID3D10Device *device, ID3D10EffectPool **effect_pool);\nHRESULT WINAPI D3D10CreateStateBlock(ID3D10Device *device,\n        D3D10_STATE_BLOCK_MASK *mask, ID3D10StateBlock **stateblock);\n\nHRESULT WINAPI D3D10StateBlockMaskDifference(D3D10_STATE_BLOCK_MASK *mask_x,\n        D3D10_STATE_BLOCK_MASK *mask_y, D3D10_STATE_BLOCK_MASK *result);\nHRESULT WINAPI D3D10StateBlockMaskDisableAll(D3D10_STATE_BLOCK_MASK *mask);\nHRESULT WINAPI D3D10StateBlockMaskDisableCapture(D3D10_STATE_BLOCK_MASK *mask,\n        D3D10_DEVICE_STATE_TYPES state_type, UINT start_idx, UINT count);\nHRESULT WINAPI D3D10StateBlockMaskEnableAll(D3D10_STATE_BLOCK_MASK *mask);\nHRESULT WINAPI D3D10StateBlockMaskEnableCapture(D3D10_STATE_BLOCK_MASK *mask,\n        D3D10_DEVICE_STATE_TYPES state_type, UINT start_idx, UINT count);\nBOOL WINAPI D3D10StateBlockMaskGetSetting(D3D10_STATE_BLOCK_MASK *mask,\n        D3D10_DEVICE_STATE_TYPES state_type, UINT idx);\nHRESULT WINAPI D3D10StateBlockMaskIntersect(D3D10_STATE_BLOCK_MASK *mask_x,\n        D3D10_STATE_BLOCK_MASK *mask_y, D3D10_STATE_BLOCK_MASK *result);\nHRESULT WINAPI D3D10StateBlockMaskUnion(D3D10_STATE_BLOCK_MASK *mask_x,\n        D3D10_STATE_BLOCK_MASK *mask_y, D3D10_STATE_BLOCK_MASK *result);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_D3D10EFFECT_H */\n"
  },
  {
    "path": "wine/windows/d3d10misc.h",
    "content": "/*\n * Copyright 2008 Henri Verbeet for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __D3D10MISC_H__\n#define __D3D10MISC_H__\n\n#include \"d3d10.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef enum D3D10_DRIVER_TYPE {\n    D3D10_DRIVER_TYPE_HARDWARE  = 0,\n    D3D10_DRIVER_TYPE_REFERENCE = 1,\n    D3D10_DRIVER_TYPE_NULL      = 2,\n    D3D10_DRIVER_TYPE_SOFTWARE  = 3,\n    D3D10_DRIVER_TYPE_WARP      = 5,\n} D3D10_DRIVER_TYPE;\n\nHRESULT WINAPI D3D10CreateDevice(IDXGIAdapter *adapter, D3D10_DRIVER_TYPE driver_type,\n        HMODULE swrast, UINT flags, UINT sdk_version, ID3D10Device **device);\n\nHRESULT WINAPI D3D10CreateDeviceAndSwapChain(IDXGIAdapter *adapter, D3D10_DRIVER_TYPE driver_type,\n        HMODULE swrast, UINT flags, UINT sdk_version, DXGI_SWAP_CHAIN_DESC *swapchain_desc,\n        IDXGISwapChain **swapchain, ID3D10Device **device);\n\nHRESULT WINAPI D3D10CreateBlob(SIZE_T data_size, ID3D10Blob **blob);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __D3D10MISC_H__ */\n"
  },
  {
    "path": "wine/windows/d3d10sdklayers.idl",
    "content": "/*\n * Copyright 2016 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"dxgi.idl\";\n\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef GetMessage\")\ncpp_quote(\"#endif\")\n\ntypedef enum D3D10_MESSAGE_CATEGORY\n{\n    D3D10_MESSAGE_CATEGORY_APPLICATION_DEFINED,\n    D3D10_MESSAGE_CATEGORY_MISCELLANEOUS,\n    D3D10_MESSAGE_CATEGORY_INITIALIZATION,\n    D3D10_MESSAGE_CATEGORY_CLEANUP,\n    D3D10_MESSAGE_CATEGORY_COMPILATION,\n    D3D10_MESSAGE_CATEGORY_STATE_CREATION,\n    D3D10_MESSAGE_CATEGORY_STATE_SETTING,\n    D3D10_MESSAGE_CATEGORY_STATE_GETTING,\n    D3D10_MESSAGE_CATEGORY_RESOURCE_MANIPULATION,\n    D3D10_MESSAGE_CATEGORY_EXECUTION,\n    D3D10_MESSAGE_CATEGORY_SHADER,\n} D3D10_MESSAGE_CATEGORY;\n\ntypedef enum D3D10_MESSAGE_SEVERITY\n{\n    D3D10_MESSAGE_SEVERITY_CORRUPTION,\n    D3D10_MESSAGE_SEVERITY_ERROR,\n    D3D10_MESSAGE_SEVERITY_WARNING,\n    D3D10_MESSAGE_SEVERITY_INFO,\n    D3D10_MESSAGE_SEVERITY_MESSAGE,\n} D3D10_MESSAGE_SEVERITY;\n\ntypedef enum D3D10_MESSAGE_ID\n{\n    D3D10_MESSAGE_ID_UNKNOWN = 0,\n    D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_HAZARD,\n    D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_HAZARD,\n    D3D10_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_HAZARD,\n    D3D10_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_HAZARD,\n    D3D10_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_HAZARD,\n    D3D10_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_HAZARD,\n    D3D10_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_HAZARD,\n    D3D10_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_HAZARD,\n    D3D10_MESSAGE_ID_DEVICE_OMSETRENDERTARGETS_HAZARD,\n    D3D10_MESSAGE_ID_DEVICE_SOSETTARGETS_HAZARD,\n    D3D10_MESSAGE_ID_STRING_FROM_APPLICATION,\n    D3D10_MESSAGE_ID_CORRUPTED_THIS,\n    D3D10_MESSAGE_ID_CORRUPTED_PARAMETER1,\n    D3D10_MESSAGE_ID_CORRUPTED_PARAMETER2,\n    D3D10_MESSAGE_ID_CORRUPTED_PARAMETER3,\n    D3D10_MESSAGE_ID_CORRUPTED_PARAMETER4,\n    D3D10_MESSAGE_ID_CORRUPTED_PARAMETER5,\n    D3D10_MESSAGE_ID_CORRUPTED_PARAMETER6,\n    D3D10_MESSAGE_ID_CORRUPTED_PARAMETER7,\n    D3D10_MESSAGE_ID_CORRUPTED_PARAMETER8,\n    D3D10_MESSAGE_ID_CORRUPTED_PARAMETER9,\n    D3D10_MESSAGE_ID_CORRUPTED_PARAMETER10,\n    D3D10_MESSAGE_ID_CORRUPTED_PARAMETER11,\n    D3D10_MESSAGE_ID_CORRUPTED_PARAMETER12,\n    D3D10_MESSAGE_ID_CORRUPTED_PARAMETER13,\n    D3D10_MESSAGE_ID_CORRUPTED_PARAMETER14,\n    D3D10_MESSAGE_ID_CORRUPTED_PARAMETER15,\n    D3D10_MESSAGE_ID_CORRUPTED_MULTITHREADING,\n    D3D10_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY,\n    D3D10_MESSAGE_ID_IASETINPUTLAYOUT_UNBINDDELETINGOBJECT,\n    D3D10_MESSAGE_ID_IASETVERTEXBUFFERS_UNBINDDELETINGOBJECT,\n    D3D10_MESSAGE_ID_IASETINDEXBUFFER_UNBINDDELETINGOBJECT,\n    D3D10_MESSAGE_ID_VSSETSHADER_UNBINDDELETINGOBJECT,\n    D3D10_MESSAGE_ID_VSSETSHADERRESOURCES_UNBINDDELETINGOBJECT,\n    D3D10_MESSAGE_ID_VSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT,\n    D3D10_MESSAGE_ID_VSSETSAMPLERS_UNBINDDELETINGOBJECT,\n    D3D10_MESSAGE_ID_GSSETSHADER_UNBINDDELETINGOBJECT,\n    D3D10_MESSAGE_ID_GSSETSHADERRESOURCES_UNBINDDELETINGOBJECT,\n    D3D10_MESSAGE_ID_GSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT,\n    D3D10_MESSAGE_ID_GSSETSAMPLERS_UNBINDDELETINGOBJECT,\n    D3D10_MESSAGE_ID_SOSETTARGETS_UNBINDDELETINGOBJECT,\n    D3D10_MESSAGE_ID_PSSETSHADER_UNBINDDELETINGOBJECT,\n    D3D10_MESSAGE_ID_PSSETSHADERRESOURCES_UNBINDDELETINGOBJECT,\n    D3D10_MESSAGE_ID_PSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT,\n    D3D10_MESSAGE_ID_PSSETSAMPLERS_UNBINDDELETINGOBJECT,\n    D3D10_MESSAGE_ID_RSSETSTATE_UNBINDDELETINGOBJECT,\n    D3D10_MESSAGE_ID_OMSETBLENDSTATE_UNBINDDELETINGOBJECT,\n    D3D10_MESSAGE_ID_OMSETDEPTHSTENCILSTATE_UNBINDDELETINGOBJECT,\n    D3D10_MESSAGE_ID_OMSETRENDERTARGETS_UNBINDDELETINGOBJECT,\n    D3D10_MESSAGE_ID_SETPREDICATION_UNBINDDELETINGOBJECT,\n    D3D10_MESSAGE_ID_GETPRIVATEDATA_MOREDATA,\n    D3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA,\n    D3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDIUNKNOWN,\n    D3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDFLAGS,\n    D3D10_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS,\n    D3D10_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY,\n    D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDFORMAT,\n    D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDSAMPLES,\n    D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDUSAGE,\n    D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDBINDFLAGS,\n    D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDCPUACCESSFLAGS,\n    D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDMISCFLAGS,\n    D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDCPUACCESSFLAGS,\n    D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDBINDFLAGS,\n    D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDINITIALDATA,\n    D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDDIMENSIONS,\n    D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDMIPLEVELS,\n    D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDMISCFLAGS,\n    D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDARG_RETURN,\n    D3D10_MESSAGE_ID_CREATEBUFFER_OUTOFMEMORY_RETURN,\n    D3D10_MESSAGE_ID_CREATEBUFFER_NULLDESC,\n    D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDCONSTANTBUFFERBINDINGS,\n    D3D10_MESSAGE_ID_CREATEBUFFER_LARGEALLOCATION,\n    D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDFORMAT,\n    D3D10_MESSAGE_ID_CREATETEXTURE1D_UNSUPPORTEDFORMAT,\n    D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDSAMPLES,\n    D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDUSAGE,\n    D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDBINDFLAGS,\n    D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDCPUACCESSFLAGS,\n    D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDMISCFLAGS,\n    D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDCPUACCESSFLAGS,\n    D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDBINDFLAGS,\n    D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDINITIALDATA,\n    D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDDIMENSIONS,\n    D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDMIPLEVELS,\n    D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDMISCFLAGS,\n    D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDARG_RETURN,\n    D3D10_MESSAGE_ID_CREATETEXTURE1D_OUTOFMEMORY_RETURN,\n    D3D10_MESSAGE_ID_CREATETEXTURE1D_NULLDESC,\n    D3D10_MESSAGE_ID_CREATETEXTURE1D_LARGEALLOCATION,\n    D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDFORMAT,\n    D3D10_MESSAGE_ID_CREATETEXTURE2D_UNSUPPORTEDFORMAT,\n    D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDSAMPLES,\n    D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDUSAGE,\n    D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDBINDFLAGS,\n    D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDCPUACCESSFLAGS,\n    D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDMISCFLAGS,\n    D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDCPUACCESSFLAGS,\n    D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDBINDFLAGS,\n    D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDINITIALDATA,\n    D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDDIMENSIONS,\n    D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDMIPLEVELS,\n    D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDMISCFLAGS,\n    D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDARG_RETURN,\n    D3D10_MESSAGE_ID_CREATETEXTURE2D_OUTOFMEMORY_RETURN,\n    D3D10_MESSAGE_ID_CREATETEXTURE2D_NULLDESC,\n    D3D10_MESSAGE_ID_CREATETEXTURE2D_LARGEALLOCATION,\n    D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDFORMAT,\n    D3D10_MESSAGE_ID_CREATETEXTURE3D_UNSUPPORTEDFORMAT,\n    D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDSAMPLES,\n    D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDUSAGE,\n    D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDBINDFLAGS,\n    D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDCPUACCESSFLAGS,\n    D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDMISCFLAGS,\n    D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDCPUACCESSFLAGS,\n    D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDBINDFLAGS,\n    D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDINITIALDATA,\n    D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDDIMENSIONS,\n    D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDMIPLEVELS,\n    D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDMISCFLAGS,\n    D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDARG_RETURN,\n    D3D10_MESSAGE_ID_CREATETEXTURE3D_OUTOFMEMORY_RETURN,\n    D3D10_MESSAGE_ID_CREATETEXTURE3D_NULLDESC,\n    D3D10_MESSAGE_ID_CREATETEXTURE3D_LARGEALLOCATION,\n    D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT,\n    D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC,\n    D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT,\n    D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS,\n    D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE,\n    D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_TOOMANYOBJECTS,\n    D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN,\n    D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_OUTOFMEMORY_RETURN,\n    D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT,\n    D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT,\n    D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC,\n    D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT,\n    D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS,\n    D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE,\n    D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_TOOMANYOBJECTS,\n    D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDARG_RETURN,\n    D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_OUTOFMEMORY_RETURN,\n    D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT,\n    D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC,\n    D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT,\n    D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS,\n    D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE,\n    D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_TOOMANYOBJECTS,\n    D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDARG_RETURN,\n    D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_OUTOFMEMORY_RETURN,\n    D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY,\n    D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS,\n    D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT,\n    D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT,\n    D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT,\n    D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS,\n    D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH,\n    D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE,\n    D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE,\n    D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT,\n    D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC,\n    D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE,\n    D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC,\n    D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT,\n    D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_NULLDESC,\n    D3D10_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY,\n    D3D10_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE,\n    D3D10_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE,\n    D3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY,\n    D3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE,\n    D3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE,\n    D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY,\n    D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE,\n    D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE,\n    D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES,\n    D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED,\n    D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDDECL,\n    D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_EXPECTEDDECL,\n    D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED,\n    D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT,\n    D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT,\n    D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT,\n    D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT,\n    D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION,\n    D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT,\n    D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE,\n    D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC,\n    D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH,\n    D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS,\n    D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX,\n    D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE,\n    D3D10_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY,\n    D3D10_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE,\n    D3D10_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE,\n    D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE,\n    D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE,\n    D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP,\n    D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS,\n    D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_TOOMANYOBJECTS,\n    D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_NULLDESC,\n    D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK,\n    D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC,\n    D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP,\n    D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP,\n    D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP,\n    D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC,\n    D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP,\n    D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP,\n    D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP,\n    D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC,\n    D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_TOOMANYOBJECTS,\n    D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_NULLDESC,\n    D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND,\n    D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND,\n    D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP,\n    D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA,\n    D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA,\n    D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA,\n    D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK,\n    D3D10_MESSAGE_ID_CREATEBLENDSTATE_TOOMANYOBJECTS,\n    D3D10_MESSAGE_ID_CREATEBLENDSTATE_NULLDESC,\n    D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDFILTER,\n    D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSU,\n    D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSV,\n    D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSW,\n    D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMIPLODBIAS,\n    D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXANISOTROPY,\n    D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDCOMPARISONFUNC,\n    D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMINLOD,\n    D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXLOD,\n    D3D10_MESSAGE_ID_CREATESAMPLERSTATE_TOOMANYOBJECTS,\n    D3D10_MESSAGE_ID_CREATESAMPLERSTATE_NULLDESC,\n    D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDQUERY,\n    D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDMISCFLAGS,\n    D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_UNEXPECTEDMISCFLAG,\n    D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_NULLDESC,\n    D3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNRECOGNIZED,\n    D3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNDEFINED,\n    D3D10_MESSAGE_ID_IASETVERTEXBUFFERS_INVALIDBUFFER,\n    D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_OFFSET_TOO_LARGE,\n    D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_BUFFERS_EMPTY,\n    D3D10_MESSAGE_ID_IASETINDEXBUFFER_INVALIDBUFFER,\n    D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_FORMAT_INVALID,\n    D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_TOO_LARGE,\n    D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_UNALIGNED,\n    D3D10_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_VIEWS_EMPTY,\n    D3D10_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFER,\n    D3D10_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_BUFFERS_EMPTY,\n    D3D10_MESSAGE_ID_DEVICE_VSSETSAMPLERS_SAMPLERS_EMPTY,\n    D3D10_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_VIEWS_EMPTY,\n    D3D10_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFER,\n    D3D10_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_BUFFERS_EMPTY,\n    D3D10_MESSAGE_ID_DEVICE_GSSETSAMPLERS_SAMPLERS_EMPTY,\n    D3D10_MESSAGE_ID_SOSETTARGETS_INVALIDBUFFER,\n    D3D10_MESSAGE_ID_DEVICE_SOSETTARGETS_OFFSET_UNALIGNED,\n    D3D10_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_VIEWS_EMPTY,\n    D3D10_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFER,\n    D3D10_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_BUFFERS_EMPTY,\n    D3D10_MESSAGE_ID_DEVICE_PSSETSAMPLERS_SAMPLERS_EMPTY,\n    D3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_INVALIDVIEWPORT,\n    D3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_INVALIDSCISSOR,\n    D3D10_MESSAGE_ID_CLEARRENDERTARGETVIEW_DENORMFLUSH,\n    D3D10_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DENORMFLUSH,\n    D3D10_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID,\n    D3D10_MESSAGE_ID_DEVICE_IAGETVERTEXBUFFERS_BUFFERS_EMPTY,\n    D3D10_MESSAGE_ID_DEVICE_VSGETSHADERRESOURCES_VIEWS_EMPTY,\n    D3D10_MESSAGE_ID_DEVICE_VSGETCONSTANTBUFFERS_BUFFERS_EMPTY,\n    D3D10_MESSAGE_ID_DEVICE_VSGETSAMPLERS_SAMPLERS_EMPTY,\n    D3D10_MESSAGE_ID_DEVICE_GSGETSHADERRESOURCES_VIEWS_EMPTY,\n    D3D10_MESSAGE_ID_DEVICE_GSGETCONSTANTBUFFERS_BUFFERS_EMPTY,\n    D3D10_MESSAGE_ID_DEVICE_GSGETSAMPLERS_SAMPLERS_EMPTY,\n    D3D10_MESSAGE_ID_DEVICE_SOGETTARGETS_BUFFERS_EMPTY,\n    D3D10_MESSAGE_ID_DEVICE_PSGETSHADERRESOURCES_VIEWS_EMPTY,\n    D3D10_MESSAGE_ID_DEVICE_PSGETCONSTANTBUFFERS_BUFFERS_EMPTY,\n    D3D10_MESSAGE_ID_DEVICE_PSGETSAMPLERS_SAMPLERS_EMPTY,\n    D3D10_MESSAGE_ID_DEVICE_RSGETVIEWPORTS_VIEWPORTS_EMPTY,\n    D3D10_MESSAGE_ID_DEVICE_RSGETSCISSORRECTS_RECTS_EMPTY,\n    D3D10_MESSAGE_ID_DEVICE_GENERATEMIPS_RESOURCE_INVALID,\n    D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSUBRESOURCE,\n    D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESUBRESOURCE,\n    D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCEBOX,\n    D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCE,\n    D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSTATE,\n    D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESTATE,\n    D3D10_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCE,\n    D3D10_MESSAGE_ID_COPYRESOURCE_INVALIDDESTINATIONSTATE,\n    D3D10_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCESTATE,\n    D3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSUBRESOURCE,\n    D3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONBOX,\n    D3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE,\n    D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_INVALID,\n    D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_SUBRESOURCE_INVALID,\n    D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_INVALID,\n    D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_SUBRESOURCE_INVALID,\n    D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_FORMAT_INVALID,\n    D3D10_MESSAGE_ID_BUFFER_MAP_INVALIDMAPTYPE,\n    D3D10_MESSAGE_ID_BUFFER_MAP_INVALIDFLAGS,\n    D3D10_MESSAGE_ID_BUFFER_MAP_ALREADYMAPPED,\n    D3D10_MESSAGE_ID_BUFFER_MAP_DEVICEREMOVED_RETURN,\n    D3D10_MESSAGE_ID_BUFFER_UNMAP_NOTMAPPED,\n    D3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDMAPTYPE,\n    D3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDSUBRESOURCE,\n    D3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDFLAGS,\n    D3D10_MESSAGE_ID_TEXTURE1D_MAP_ALREADYMAPPED,\n    D3D10_MESSAGE_ID_TEXTURE1D_MAP_DEVICEREMOVED_RETURN,\n    D3D10_MESSAGE_ID_TEXTURE1D_UNMAP_INVALIDSUBRESOURCE,\n    D3D10_MESSAGE_ID_TEXTURE1D_UNMAP_NOTMAPPED,\n    D3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDMAPTYPE,\n    D3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDSUBRESOURCE,\n    D3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDFLAGS,\n    D3D10_MESSAGE_ID_TEXTURE2D_MAP_ALREADYMAPPED,\n    D3D10_MESSAGE_ID_TEXTURE2D_MAP_DEVICEREMOVED_RETURN,\n    D3D10_MESSAGE_ID_TEXTURE2D_UNMAP_INVALIDSUBRESOURCE,\n    D3D10_MESSAGE_ID_TEXTURE2D_UNMAP_NOTMAPPED,\n    D3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDMAPTYPE,\n    D3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDSUBRESOURCE,\n    D3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDFLAGS,\n    D3D10_MESSAGE_ID_TEXTURE3D_MAP_ALREADYMAPPED,\n    D3D10_MESSAGE_ID_TEXTURE3D_MAP_DEVICEREMOVED_RETURN,\n    D3D10_MESSAGE_ID_TEXTURE3D_UNMAP_INVALIDSUBRESOURCE,\n    D3D10_MESSAGE_ID_TEXTURE3D_UNMAP_NOTMAPPED,\n    D3D10_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_DEPRECATED,\n    D3D10_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_FORMAT_DEPRECATED,\n    D3D10_MESSAGE_ID_SETEXCEPTIONMODE_UNRECOGNIZEDFLAGS,\n    D3D10_MESSAGE_ID_SETEXCEPTIONMODE_INVALIDARG_RETURN,\n    D3D10_MESSAGE_ID_SETEXCEPTIONMODE_DEVICEREMOVED_RETURN,\n    D3D10_MESSAGE_ID_REF_SIMULATING_INFINITELY_FAST_HARDWARE,\n    D3D10_MESSAGE_ID_REF_THREADING_MODE,\n    D3D10_MESSAGE_ID_REF_UMDRIVER_EXCEPTION,\n    D3D10_MESSAGE_ID_REF_KMDRIVER_EXCEPTION,\n    D3D10_MESSAGE_ID_REF_HARDWARE_EXCEPTION,\n    D3D10_MESSAGE_ID_REF_ACCESSING_INDEXABLE_TEMP_OUT_OF_RANGE,\n    D3D10_MESSAGE_ID_REF_PROBLEM_PARSING_SHADER,\n    D3D10_MESSAGE_ID_REF_OUT_OF_MEMORY,\n    D3D10_MESSAGE_ID_REF_INFO,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEXPOS_OVERFLOW,\n    D3D10_MESSAGE_ID_DEVICE_DRAWINDEXED_INDEXPOS_OVERFLOW,\n    D3D10_MESSAGE_ID_DEVICE_DRAWINSTANCED_VERTEXPOS_OVERFLOW,\n    D3D10_MESSAGE_ID_DEVICE_DRAWINSTANCED_INSTANCEPOS_OVERFLOW,\n    D3D10_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INSTANCEPOS_OVERFLOW,\n    D3D10_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INDEXPOS_OVERFLOW,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_SHADER_NOT_SET,\n    D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND,\n    D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERINDEX,\n    D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_COMPONENTTYPE,\n    D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERMASK,\n    D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SYSTEMVALUE,\n    D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_NOT_SET,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_INPUTLAYOUT_NOT_SET,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_NOT_SET,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_TOO_SMALL,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_SAMPLER_NOT_SET,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_SHADERRESOURCEVIEW_NOT_SET,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_VIEW_DIMENSION_MISMATCH,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_TOO_SMALL,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_NOT_SET,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_FORMAT_INVALID,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_GS_INPUT_PRIMITIVE_MISMATCH,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_RETURN_TYPE_MISMATCH,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_POSITION_NOT_PRESENT,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_NOT_SET,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_BOUND_RESOURCE_MAPPED,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_INVALID_PRIMITIVETOPOLOGY,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_OFFSET_UNALIGNED,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_OFFSET_UNALIGNED,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_OFFSET_UNALIGNED,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_LD_UNSUPPORTED,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_UNSUPPORTED,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_C_UNSUPPORTED,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_MULTISAMPLE_UNSUPPORTED,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_SO_TARGETS_BOUND_WITHOUT_SOURCE,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_SO_STRIDE_LARGER_THAN_BUFFER,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0,\n    D3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT,\n    D3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT,\n    D3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT,\n    D3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_INVALIDARG_RETURN,\n    D3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_OUTOFMEMORY_RETURN,\n    D3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BADINTERFACE_RETURN,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_VIEWPORT_NOT_SET,\n    D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC,\n    D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC,\n    D3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_DENORMFLUSH,\n    D3D10_MESSAGE_ID_OMSETRENDERTARGETS_INVALIDVIEW,\n    D3D10_MESSAGE_ID_DEVICE_SETTEXTFILTERSIZE_INVALIDDIMENSIONS,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_SAMPLER_MISMATCH,\n    D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH,\n    D3D10_MESSAGE_ID_BLENDSTATE_GETDESC_LEGACY,\n    D3D10_MESSAGE_ID_SHADERRESOURCEVIEW_GETDESC_LEGACY,\n    D3D10_MESSAGE_ID_CREATEQUERY_OUTOFMEMORY_RETURN,\n    D3D10_MESSAGE_ID_CREATEPREDICATE_OUTOFMEMORY_RETURN,\n    D3D10_MESSAGE_ID_CREATECOUNTER_OUTOFRANGE_COUNTER,\n    D3D10_MESSAGE_ID_CREATECOUNTER_SIMULTANEOUS_ACTIVE_COUNTERS_EXHAUSTED,\n    D3D10_MESSAGE_ID_CREATECOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER,\n    D3D10_MESSAGE_ID_CREATECOUNTER_OUTOFMEMORY_RETURN,\n    D3D10_MESSAGE_ID_CREATECOUNTER_NONEXCLUSIVE_RETURN,\n    D3D10_MESSAGE_ID_CREATECOUNTER_NULLDESC,\n    D3D10_MESSAGE_ID_CHECKCOUNTER_OUTOFRANGE_COUNTER,\n    D3D10_MESSAGE_ID_CHECKCOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER,\n    D3D10_MESSAGE_ID_SETPREDICATION_INVALID_PREDICATE_STATE,\n    D3D10_MESSAGE_ID_QUERY_BEGIN_UNSUPPORTED,\n    D3D10_MESSAGE_ID_PREDICATE_BEGIN_DURING_PREDICATION,\n    D3D10_MESSAGE_ID_QUERY_BEGIN_DUPLICATE,\n    D3D10_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS,\n    D3D10_MESSAGE_ID_PREDICATE_END_DURING_PREDICATION,\n    D3D10_MESSAGE_ID_QUERY_END_ABANDONING_PREVIOUS_RESULTS,\n    D3D10_MESSAGE_ID_QUERY_END_WITHOUT_BEGIN,\n    D3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_DATASIZE,\n    D3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_FLAGS,\n    D3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_CALL,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_PS_OUTPUT_TYPE_MISMATCH,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_GATHER_UNSUPPORTED,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN,\n    D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_STRIDE_TOO_LARGE,\n    D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_INVALIDRANGE,\n    D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT,\n    D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH,\n    D3D10_MESSAGE_ID_LIVE_OBJECT_SUMMARY,\n    D3D10_MESSAGE_ID_LIVE_BUFFER,\n    D3D10_MESSAGE_ID_LIVE_TEXTURE1D,\n    D3D10_MESSAGE_ID_LIVE_TEXTURE2D,\n    D3D10_MESSAGE_ID_LIVE_TEXTURE3D,\n    D3D10_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW,\n    D3D10_MESSAGE_ID_LIVE_RENDERTARGETVIEW,\n    D3D10_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW,\n    D3D10_MESSAGE_ID_LIVE_VERTEXSHADER,\n    D3D10_MESSAGE_ID_LIVE_GEOMETRYSHADER,\n    D3D10_MESSAGE_ID_LIVE_PIXELSHADER,\n    D3D10_MESSAGE_ID_LIVE_INPUTLAYOUT,\n    D3D10_MESSAGE_ID_LIVE_SAMPLER,\n    D3D10_MESSAGE_ID_LIVE_BLENDSTATE,\n    D3D10_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE,\n    D3D10_MESSAGE_ID_LIVE_RASTERIZERSTATE,\n    D3D10_MESSAGE_ID_LIVE_QUERY,\n    D3D10_MESSAGE_ID_LIVE_PREDICATE,\n    D3D10_MESSAGE_ID_LIVE_COUNTER,\n    D3D10_MESSAGE_ID_LIVE_DEVICE,\n    D3D10_MESSAGE_ID_LIVE_SWAPCHAIN,\n    D3D10_MESSAGE_ID_D3D10_MESSAGES_END,\n\n    D3D10_MESSAGE_ID_D3D10L9_MESSAGES_START = 0x00100000,\n    D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_STENCIL_NO_TWO_SIDED,\n    D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_DepthBiasClamp_NOT_SUPPORTED,\n    D3D10_MESSAGE_ID_CREATESAMPLERSTATE_NO_COMPARISON_SUPPORT,\n    D3D10_MESSAGE_ID_CREATESAMPLERSTATE_EXCESSIVE_ANISOTROPY,\n    D3D10_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_OUT_OF_RANGE,\n    D3D10_MESSAGE_ID_VSSETSAMPLERS_NOT_SUPPORTED,\n    D3D10_MESSAGE_ID_VSSETSAMPLERS_TOO_MANY_SAMPLERS,\n    D3D10_MESSAGE_ID_PSSETSAMPLERS_TOO_MANY_SAMPLERS,\n    D3D10_MESSAGE_ID_CREATERESOURCE_NO_ARRAYS,\n    D3D10_MESSAGE_ID_CREATERESOURCE_NO_VB_AND_IB_BIND,\n    D3D10_MESSAGE_ID_CREATERESOURCE_NO_TEXTURE_1D,\n    D3D10_MESSAGE_ID_CREATERESOURCE_DIMENSION_OUT_OF_RANGE,\n    D3D10_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_SHADER_RESOURCE,\n    D3D10_MESSAGE_ID_OMSETRENDERTARGETS_TOO_MANY_RENDER_TARGETS,\n    D3D10_MESSAGE_ID_OMSETRENDERTARGETS_NO_DIFFERING_BIT_DEPTHS,\n    D3D10_MESSAGE_ID_IASETVERTEXBUFFERS_BAD_BUFFER_INDEX,\n    D3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_TOO_MANY_VIEWPORTS,\n    D3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_ADJACENCY_UNSUPPORTED,\n    D3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_TOO_MANY_SCISSORS,\n    D3D10_MESSAGE_ID_COPYRESOURCE_ONLY_TEXTURE_2D_WITHIN_GPU_MEMORY,\n    D3D10_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_3D_READBACK,\n    D3D10_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_ONLY_READBACK,\n    D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_UNSUPPORTED_FORMAT,\n    D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_ALPHA_TO_COVERAGE,\n    D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_DepthClipEnable_MUST_BE_TRUE,\n    D3D10_MESSAGE_ID_DRAWINDEXED_STARTINDEXLOCATION_MUST_BE_POSITIVE,\n    D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_MUST_USE_LOWEST_LOD,\n    D3D10_MESSAGE_ID_CREATESAMPLERSTATE_MINLOD_MUST_NOT_BE_FRACTIONAL,\n    D3D10_MESSAGE_ID_CREATESAMPLERSTATE_MAXLOD_MUST_BE_FLT_MAX,\n    D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_FIRSTARRAYSLICE_MUST_BE_ZERO,\n    D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_CUBES_MUST_HAVE_6_SIDES,\n    D3D10_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_RENDER_TARGET,\n    D3D10_MESSAGE_ID_CREATERESOURCE_NO_DWORD_INDEX_BUFFER,\n    D3D10_MESSAGE_ID_CREATERESOURCE_MSAA_PRECLUDES_SHADER_RESOURCE,\n    D3D10_MESSAGE_ID_CREATERESOURCE_PRESENTATION_PRECLUDES_SHADER_RESOURCE,\n    D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_BLEND_ENABLE,\n    D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_WRITE_MASKS,\n    D3D10_MESSAGE_ID_CREATERESOURCE_NO_STREAM_OUT,\n    D3D10_MESSAGE_ID_CREATERESOURCE_ONLY_VB_IB_FOR_BUFFERS,\n    D3D10_MESSAGE_ID_CREATERESOURCE_NO_AUTOGEN_FOR_VOLUMES,\n    D3D10_MESSAGE_ID_CREATERESOURCE_DXGI_FORMAT_R8G8B8A8_CANNOT_BE_SHARED,\n    D3D10_MESSAGE_ID_VSSHADERRESOURCES_NOT_SUPPORTED,\n    D3D10_MESSAGE_ID_GEOMETRY_SHADER_NOT_SUPPORTED,\n    D3D10_MESSAGE_ID_STREAM_OUT_NOT_SUPPORTED,\n    D3D10_MESSAGE_ID_TEXT_FILTER_NOT_SUPPORTED,\n    D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_SEPARATE_ALPHA_BLEND,\n    D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_MRT_BLEND,\n    D3D10_MESSAGE_ID_CREATEBLENDSTATE_OPERATION_NOT_SUPPORTED,\n    D3D10_MESSAGE_ID_CREATESAMPLERSTATE_NO_MIRRORONCE,\n    D3D10_MESSAGE_ID_DRAWINSTANCED_NOT_SUPPORTED,\n    D3D10_MESSAGE_ID_DRAWINDEXEDINSTANCED_NOT_SUPPORTED_BELOW_9_3,\n    D3D10_MESSAGE_ID_DRAWINDEXED_POINTLIST_UNSUPPORTED,\n    D3D10_MESSAGE_ID_SETBLENDSTATE_SAMPLE_MASK_CANNOT_BE_ZERO,\n    D3D10_MESSAGE_ID_CREATERESOURCE_DIMENSION_EXCEEDS_FEATURE_LEVEL_DEFINITION,\n    D3D10_MESSAGE_ID_CREATERESOURCE_ONLY_SINGLE_MIP_LEVEL_DEPTH_STENCIL_SUPPORTED,\n    D3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_NEGATIVESCISSOR,\n    D3D10_MESSAGE_ID_SLOT_ZERO_MUST_BE_D3D10_INPUT_PER_VERTEX_DATA,\n    D3D10_MESSAGE_ID_CREATERESOURCE_NON_POW_2_MIPMAP,\n    D3D10_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_NOT_SUPPORTED,\n    D3D10_MESSAGE_ID_OMSETRENDERTARGETS_NO_SRGB_MRT,\n    D3D10_MESSAGE_ID_COPYRESOURCE_NO_3D_MISMATCHED_UPDATES,\n    D3D10_MESSAGE_ID_D3D10L9_MESSAGES_END,\n} D3D10_MESSAGE_ID;\n\ntypedef struct D3D10_MESSAGE\n{\n    D3D10_MESSAGE_CATEGORY Category;\n    D3D10_MESSAGE_SEVERITY Severity;\n    D3D10_MESSAGE_ID ID;\n    const char *pDescription;\n    SIZE_T DescriptionByteLength;\n} D3D10_MESSAGE;\n\ntypedef struct D3D10_INFO_QUEUE_FILTER_DESC\n{\n    UINT NumCategories;\n    D3D10_MESSAGE_CATEGORY *pCategoryList;\n    UINT NumSeverities;\n    D3D10_MESSAGE_SEVERITY *pSeverityList;\n    UINT NumIDs;\n    D3D10_MESSAGE_ID *pIDList;\n} D3D10_INFO_QUEUE_FILTER_DESC;\n\ntypedef struct D3D10_INFO_QUEUE_FILTER\n{\n    D3D10_INFO_QUEUE_FILTER_DESC AllowList;\n    D3D10_INFO_QUEUE_FILTER_DESC DenyList;\n} D3D10_INFO_QUEUE_FILTER;\n\n[\n    local,\n    object,\n    uuid(1b940b17-2642-4d1f-ab1f-b99bad0c395f),\n    pointer_default(unique)\n]\ninterface ID3D10InfoQueue : IUnknown\n{\n    HRESULT SetMessageCountLimit(\n        [in] UINT64 limit\n    );\n    void ClearStoredMessages();\n    HRESULT GetMessage(\n        [in] UINT64 message_idx,\n        [out] D3D10_MESSAGE *message,\n        [in, out] SIZE_T *message_size\n    );\n    UINT64 GetNumMessagesAllowedByStorageFilter();\n    UINT64 GetNumMessagesDeniedByStorageFilter();\n    UINT64 GetNumStoredMessages();\n    UINT64 GetNumStoredMessagesAllowedByRetrievalFilter();\n    UINT64 GetNumMessagesDiscardedByMessageCountLimit();\n    UINT64 GetMessageCountLimit();\n    HRESULT AddStorageFilterEntries(\n        [in] D3D10_INFO_QUEUE_FILTER *filter\n    );\n    HRESULT GetStorageFilter(\n        [out] D3D10_INFO_QUEUE_FILTER *filter,\n        [in, out] SIZE_T *filter_size\n    );\n    void ClearStorageFilter();\n    HRESULT PushEmptyStorageFilter();\n    HRESULT PushCopyOfStorageFilter();\n    HRESULT PushStorageFilter(\n        [in] D3D10_INFO_QUEUE_FILTER *filter\n    );\n    void PopStorageFilter();\n    UINT GetStorageFilterStackSize();\n    HRESULT AddRetrievalFilterEntries(\n        [in] D3D10_INFO_QUEUE_FILTER *filter\n    );\n    HRESULT GetRetrievalFilter(\n        [out] D3D10_INFO_QUEUE_FILTER *filter,\n        [in, out] SIZE_T *filterbytelength\n    );\n    void ClearRetrievalFilter();\n    HRESULT PushEmptyRetrievalFilter();\n    HRESULT PushCopyOfRetrievalFilter();\n    HRESULT PushRetrievalFilter(\n        [in] D3D10_INFO_QUEUE_FILTER *filter\n    );\n    void PopRetrievalFilter();\n    UINT GetRetrievalFilterStackSize();\n    HRESULT AddMessage(\n        [in] D3D10_MESSAGE_CATEGORY category,\n        [in] D3D10_MESSAGE_SEVERITY severity,\n        [in] D3D10_MESSAGE_ID id,\n        [in] const char *description\n    );\n    HRESULT AddApplicationMessage(\n        [in] D3D10_MESSAGE_SEVERITY severity,\n        [in] const char *description\n    );\n    HRESULT SetBreakOnCategory(\n        [in] D3D10_MESSAGE_CATEGORY category,\n        [in] BOOL enable\n    );\n    HRESULT SetBreakOnSeverity(\n        [in] D3D10_MESSAGE_SEVERITY severity,\n        [in] BOOL enable\n    );\n    HRESULT SetBreakOnID(\n        [in] D3D10_MESSAGE_ID id,\n        [in] BOOL enable\n    );\n    BOOL GetBreakOnCategory(\n        [in] D3D10_MESSAGE_CATEGORY category\n    );\n    BOOL GetBreakOnSeverity(\n        [in] D3D10_MESSAGE_SEVERITY severity\n    );\n    BOOL GetBreakOnID(\n        [in] D3D10_MESSAGE_ID id\n    );\n    void SetMuteDebugOutput(\n        [in] BOOL mute\n    );\n    BOOL GetMuteDebugOutput();\n}\n"
  },
  {
    "path": "wine/windows/d3d10shader.h",
    "content": "/*\n * Copyright 2009 Henri Verbeet for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n */\n\n#ifndef __WINE_D3D10SHADER_H\n#define __WINE_D3D10SHADER_H\n\n#include \"d3d10.h\"\n\n#define D3D10_SHADER_DEBUG                          0x0001\n#define D3D10_SHADER_SKIP_VALIDATION                0x0002\n#define D3D10_SHADER_SKIP_OPTIMIZATION              0x0004\n#define D3D10_SHADER_PACK_MATRIX_ROW_MAJOR          0x0008\n#define D3D10_SHADER_PACK_MATRIX_COLUMN_MAJOR       0x0010\n#define D3D10_SHADER_PARTIAL_PRECISION              0x0020\n#define D3D10_SHADER_FORCE_VS_SOFTWARE_NO_OPT       0x0040\n#define D3D10_SHADER_FORCE_PS_SOFTWARE_NO_OPT       0x0080\n#define D3D10_SHADER_NO_PRESHADER                   0x0100\n#define D3D10_SHADER_AVOID_FLOW_CONTROL             0x0200\n#define D3D10_SHADER_PREFER_FLOW_CONTROL            0x0400\n#define D3D10_SHADER_ENABLE_STRICTNESS              0x0800\n#define D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY 0x1000\n#define D3D10_SHADER_IEEE_STRICTNESS                0x2000\n#define D3D10_SHADER_WARNINGS_ARE_ERRORS           0x40000\n\n#define D3D10_SHADER_OPTIMIZATION_LEVEL0            0x4000\n#define D3D10_SHADER_OPTIMIZATION_LEVEL1            0x0000\n#define D3D10_SHADER_OPTIMIZATION_LEVEL2            0xC000\n#define D3D10_SHADER_OPTIMIZATION_LEVEL3            0x8000\n\n/* These are defined as version-neutral in d3dcommon.h */\ntypedef D3D_SHADER_MACRO D3D10_SHADER_MACRO;\ntypedef D3D_SHADER_MACRO *LPD3D10_SHADER_MACRO;\n\ntypedef D3D_SHADER_VARIABLE_CLASS D3D10_SHADER_VARIABLE_CLASS;\ntypedef D3D_SHADER_VARIABLE_CLASS *LPD3D10_SHADER_VARIABLE_CLASS;\n\ntypedef D3D_CBUFFER_TYPE D3D10_CBUFFER_TYPE;\ntypedef D3D_CBUFFER_TYPE *LPD3D10_CBUFFER_TYPE;\n\ntypedef D3D_REGISTER_COMPONENT_TYPE D3D10_REGISTER_COMPONENT_TYPE;\n\ntypedef D3D_RESOURCE_RETURN_TYPE D3D10_RESOURCE_RETURN_TYPE;\n\ntypedef D3D_NAME D3D10_NAME;\n\ntypedef D3D_SHADER_INPUT_TYPE D3D10_SHADER_INPUT_TYPE;\ntypedef D3D_SHADER_INPUT_TYPE *LPD3D10_SHADER_INPUT_TYPE;\n\ntypedef D3D_SHADER_VARIABLE_TYPE D3D10_SHADER_VARIABLE_TYPE;\ntypedef D3D_SHADER_VARIABLE_TYPE *LPD3D10_SHADER_VARIABLE_TYPE;\n\ntypedef D3D_INCLUDE_TYPE D3D10_INCLUDE_TYPE;\ntypedef ID3DInclude ID3D10Include;\ntypedef ID3DInclude *LPD3D10INCLUDE;\n#define IID_ID3D10Include IID_ID3DInclude\n\ntypedef struct _D3D10_SHADER_INPUT_BIND_DESC\n{\n    const char *Name;\n    D3D10_SHADER_INPUT_TYPE Type;\n    UINT BindPoint;\n    UINT BindCount;\n    UINT uFlags;\n    D3D10_RESOURCE_RETURN_TYPE ReturnType;\n    D3D10_SRV_DIMENSION Dimension;\n    UINT NumSamples;\n} D3D10_SHADER_INPUT_BIND_DESC;\n\ntypedef struct _D3D10_SIGNATURE_PARAMETER_DESC\n{\n    const char *SemanticName;\n    UINT SemanticIndex;\n    UINT Register;\n    D3D10_NAME SystemValueType;\n    D3D10_REGISTER_COMPONENT_TYPE ComponentType;\n    BYTE Mask;\n    BYTE ReadWriteMask;\n} D3D10_SIGNATURE_PARAMETER_DESC;\n\ntypedef struct _D3D10_SHADER_DESC\n{\n    UINT Version;\n    const char *Creator;\n    UINT Flags;\n    UINT ConstantBuffers;\n    UINT BoundResources;\n    UINT InputParameters;\n    UINT OutputParameters;\n    UINT InstructionCount;\n    UINT TempRegisterCount;\n    UINT TempArrayCount;\n    UINT DefCount;\n    UINT DclCount;\n    UINT TextureNormalInstructions;\n    UINT TextureLoadInstructions;\n    UINT TextureCompInstructions;\n    UINT TextureBiasInstructions;\n    UINT TextureGradientInstructions;\n    UINT FloatInstructionCount;\n    UINT IntInstructionCount;\n    UINT UintInstructionCount;\n    UINT StaticFlowControlCount;\n    UINT DynamicFlowControlCount;\n    UINT MacroInstructionCount;\n    UINT ArrayInstructionCount;\n    UINT CutInstructionCount;\n    UINT EmitInstructionCount;\n    D3D10_PRIMITIVE_TOPOLOGY GSOutputTopology;\n    UINT GSMaxOutputVertexCount;\n} D3D10_SHADER_DESC;\n\ntypedef struct _D3D10_SHADER_BUFFER_DESC\n{\n    const char *Name;\n    D3D10_CBUFFER_TYPE Type;\n    UINT Variables;\n    UINT Size;\n    UINT uFlags;\n} D3D10_SHADER_BUFFER_DESC;\n\ntypedef struct _D3D10_SHADER_VARIABLE_DESC\n{\n    const char *Name;\n    UINT StartOffset;\n    UINT Size;\n    UINT uFlags;\n    void *DefaultValue;\n} D3D10_SHADER_VARIABLE_DESC;\n\ntypedef struct _D3D10_SHADER_TYPE_DESC\n{\n    D3D10_SHADER_VARIABLE_CLASS Class;\n    D3D10_SHADER_VARIABLE_TYPE Type;\n    UINT Rows;\n    UINT Columns;\n    UINT Elements;\n    UINT Members;\n    UINT Offset;\n} D3D10_SHADER_TYPE_DESC;\n\nDEFINE_GUID(IID_ID3D10ShaderReflectionType, 0xc530ad7d, 0x9b16, 0x4395, 0xa9, 0x79, 0xba, 0x2e, 0xcf, 0xf8, 0x3a, 0xdd);\n\n#define INTERFACE ID3D10ShaderReflectionType\nDECLARE_INTERFACE(ID3D10ShaderReflectionType)\n{\n    STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_TYPE_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D10ShaderReflectionType *, GetMemberTypeByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10ShaderReflectionType *, GetMemberTypeByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(const char *, GetMemberTypeName)(THIS_ UINT index) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D10ShaderReflectionVariable, 0x1bf63c95, 0x2650, 0x405d, 0x99, 0xc1, 0x36, 0x36, 0xbd, 0x1d, 0xa0, 0xa1);\n\n#define INTERFACE ID3D10ShaderReflectionVariable\nDECLARE_INTERFACE(ID3D10ShaderReflectionVariable)\n{\n    STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_VARIABLE_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D10ShaderReflectionType *, GetType)(THIS) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D10ShaderReflectionConstantBuffer, 0x66c66a94, 0xdddd, 0x4b62, 0xa6, 0x6a, 0xf0, 0xda, 0x33, 0xc2, 0xb4, 0xd0);\n\n#define INTERFACE ID3D10ShaderReflectionConstantBuffer\nDECLARE_INTERFACE(ID3D10ShaderReflectionConstantBuffer)\n{\n    STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_BUFFER_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D10ShaderReflectionVariable *, GetVariableByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10ShaderReflectionVariable *, GetVariableByName)(THIS_ const char *name) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D10ShaderReflection, 0xd40e20b6, 0xf8f7, 0x42ad, 0xab, 0x20, 0x4b, 0xaf, 0x8f, 0x15, 0xdf, 0xaa);\n\n#define INTERFACE ID3D10ShaderReflection\nDECLARE_INTERFACE_(ID3D10ShaderReflection, IUnknown)\n{\n    /* IUnknown methods */\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /* ID3D10ShaderReflection methods */\n    STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D10ShaderReflectionConstantBuffer *, GetConstantBufferByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D10ShaderReflectionConstantBuffer *, GetConstantBufferByName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetResourceBindingDesc)(THIS_ UINT index, D3D10_SHADER_INPUT_BIND_DESC *desc) PURE;\n    STDMETHOD(GetInputParameterDesc)(THIS_ UINT index, D3D10_SIGNATURE_PARAMETER_DESC *desc) PURE;\n    STDMETHOD(GetOutputParameterDesc)(THIS_ UINT index, D3D10_SIGNATURE_PARAMETER_DESC *desc) PURE;\n};\n#undef INTERFACE\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nHRESULT WINAPI D3D10CompileShader(const char *data, SIZE_T data_size, const char *filename,\n        const D3D10_SHADER_MACRO *defines, ID3D10Include *include, const char *entrypoint,\n        const char *profile, UINT flags, ID3D10Blob **shader, ID3D10Blob **error_messages);\nHRESULT WINAPI D3D10DisassembleShader(const void *data, SIZE_T data_size,\n        BOOL color_code, const char *comments, ID3D10Blob **disassembly);\nconst char * WINAPI D3D10GetVertexShaderProfile(ID3D10Device *device);\nconst char * WINAPI D3D10GetGeometryShaderProfile(ID3D10Device *device);\nconst char * WINAPI D3D10GetPixelShaderProfile(ID3D10Device *device);\n\nHRESULT WINAPI D3D10ReflectShader(const void *data, SIZE_T data_size, ID3D10ShaderReflection **reflector);\nHRESULT WINAPI D3D10GetInputSignatureBlob(const void *data, SIZE_T data_size, ID3D10Blob **blob);\nHRESULT WINAPI D3D10GetOutputSignatureBlob(const void *data, SIZE_T data_size, ID3D10Blob **blob);\nHRESULT WINAPI D3D10GetInputAndOutputSignatureBlob(const void *data, SIZE_T data_size, ID3D10Blob **blob);\nHRESULT WINAPI D3D10GetShaderDebugInfo(const void *data, SIZE_T data_size, ID3D10Blob **blob);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_D3D10SHADER_H */\n"
  },
  {
    "path": "wine/windows/d3d11.idl",
    "content": "/*\n * Copyright 2010 Rico Schüller\n * Copyright 2013 Austin English\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"dxgi.idl\";\nimport \"d3dcommon.idl\";\n\ntypedef D3D_PRIMITIVE D3D11_PRIMITIVE;\ntypedef D3D_PRIMITIVE_TOPOLOGY D3D11_PRIMITIVE_TOPOLOGY;\ntypedef D3D_SRV_DIMENSION D3D11_SRV_DIMENSION;\ntypedef RECT D3D11_RECT;\n\ninterface ID3D11Device;\ninterface ID3D11ClassLinkage;\ninterface ID3D11Resource;\ninterface ID3D11VideoProcessorInputView;\n\ncpp_quote(\"#ifndef _D3D11_CONSTANTS\")\ncpp_quote(\"#define _D3D11_CONSTANTS\")\n\nconst UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT      = 14;\nconst UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS          = 4;\nconst UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT = 32;\nconst UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT       = 15;\nconst UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_PARTIAL_UPDATE_EXTENTS_BYTE_ALIGNMENT = 16;\nconst UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS = 4;\nconst UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT      = 15;\nconst UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1;\nconst UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS = 1;\nconst UINT D3D11_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT           = 64;\nconst UINT D3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS = 4;\nconst UINT D3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT = 1;\nconst UINT D3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1;\nconst UINT D3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS = 1;\nconst UINT D3D11_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT = 32;\nconst UINT D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS  = 1;\nconst UINT D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT       = 128;\nconst UINT D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST = 1;\nconst UINT D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS  = 1;\nconst UINT D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT           = 128;\nconst UINT D3D11_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS         = 1;\nconst UINT D3D11_COMMONSHADER_SAMPLER_REGISTER_COUNT              = 16;\nconst UINT D3D11_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST     = 1;\nconst UINT D3D11_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS         = 1;\nconst UINT D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT                  = 16;\nconst UINT D3D11_COMMONSHADER_SUBROUTINE_NESTING_LIMIT            = 32;\nconst UINT D3D11_COMMONSHADER_TEMP_REGISTER_COMPONENTS            = 4;\nconst UINT D3D11_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT   = 32;\nconst UINT D3D11_COMMONSHADER_TEMP_REGISTER_COUNT                 = 4096;\nconst UINT D3D11_COMMONSHADER_TEMP_REGISTER_READS_PER_INST        = 3;\nconst UINT D3D11_COMMONSHADER_TEMP_REGISTER_READ_PORTS            = 3;\nconst UINT D3D11_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX        = 10;\nconst INT D3D11_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN         = -10;\nconst INT D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE            = -8;\nconst UINT D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE           = 7;\n\nconst UINT D3D11_CS_4_X_BUCKET00_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 256;\nconst UINT D3D11_CS_4_X_BUCKET00_MAX_NUM_THREADS_PER_GROUP          = 64;\nconst UINT D3D11_CS_4_X_BUCKET01_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 240;\nconst UINT D3D11_CS_4_X_BUCKET01_MAX_NUM_THREADS_PER_GROUP          = 68;\nconst UINT D3D11_CS_4_X_BUCKET02_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 224;\nconst UINT D3D11_CS_4_X_BUCKET02_MAX_NUM_THREADS_PER_GROUP          = 72;\nconst UINT D3D11_CS_4_X_BUCKET03_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 208;\nconst UINT D3D11_CS_4_X_BUCKET03_MAX_NUM_THREADS_PER_GROUP          = 76;\nconst UINT D3D11_CS_4_X_BUCKET04_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 192;\nconst UINT D3D11_CS_4_X_BUCKET04_MAX_NUM_THREADS_PER_GROUP          = 84;\nconst UINT D3D11_CS_4_X_BUCKET05_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 176;\nconst UINT D3D11_CS_4_X_BUCKET05_MAX_NUM_THREADS_PER_GROUP          = 92;\nconst UINT D3D11_CS_4_X_BUCKET06_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 160;\nconst UINT D3D11_CS_4_X_BUCKET06_MAX_NUM_THREADS_PER_GROUP          = 100;\nconst UINT D3D11_CS_4_X_BUCKET07_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 144;\nconst UINT D3D11_CS_4_X_BUCKET07_MAX_NUM_THREADS_PER_GROUP          = 112;\nconst UINT D3D11_CS_4_X_BUCKET08_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 128;\nconst UINT D3D11_CS_4_X_BUCKET08_MAX_NUM_THREADS_PER_GROUP          = 128;\nconst UINT D3D11_CS_4_X_BUCKET09_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 112;\nconst UINT D3D11_CS_4_X_BUCKET09_MAX_NUM_THREADS_PER_GROUP          = 144;\nconst UINT D3D11_CS_4_X_BUCKET10_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 96;\nconst UINT D3D11_CS_4_X_BUCKET10_MAX_NUM_THREADS_PER_GROUP          = 168;\nconst UINT D3D11_CS_4_X_BUCKET11_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 80;\nconst UINT D3D11_CS_4_X_BUCKET11_MAX_NUM_THREADS_PER_GROUP          = 204;\nconst UINT D3D11_CS_4_X_BUCKET12_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 64;\nconst UINT D3D11_CS_4_X_BUCKET12_MAX_NUM_THREADS_PER_GROUP          = 256;\nconst UINT D3D11_CS_4_X_BUCKET13_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 48;\nconst UINT D3D11_CS_4_X_BUCKET13_MAX_NUM_THREADS_PER_GROUP          = 340;\nconst UINT D3D11_CS_4_X_BUCKET14_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 32;\nconst UINT D3D11_CS_4_X_BUCKET14_MAX_NUM_THREADS_PER_GROUP          = 512;\nconst UINT D3D11_CS_4_X_BUCKET15_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 16;\nconst UINT D3D11_CS_4_X_BUCKET15_MAX_NUM_THREADS_PER_GROUP          = 768;\nconst UINT D3D11_CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION   = 1;\nconst UINT D3D11_CS_4_X_RAW_UAV_BYTE_ALIGNMENT                      = 256;\nconst UINT D3D11_CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP          = 768;\nconst UINT D3D11_CS_4_X_THREAD_GROUP_MAX_X                          = 768;\nconst UINT D3D11_CS_4_X_THREAD_GROUP_MAX_Y                          = 768;\nconst UINT D3D11_CS_4_X_UAV_REGISTER_COUNT                          = 1;\nconst UINT D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION        = 65535;\nconst UINT D3D11_CS_TGSM_REGISTER_COUNT                             = 8192;\nconst UINT D3D11_CS_TGSM_REGISTER_READS_PER_INST                    = 1;\nconst UINT D3D11_CS_TGSM_RESOURCE_REGISTER_COMPONENTS               = 1;\nconst UINT D3D11_CS_TGSM_RESOURCE_REGISTER_READ_PORTS               = 1;\nconst UINT D3D11_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP              = 1024;\nconst UINT D3D11_CS_THREAD_GROUP_MAX_X                              = 1024;\nconst UINT D3D11_CS_THREAD_GROUP_MAX_Y                              = 1024;\nconst UINT D3D11_CS_THREAD_GROUP_MAX_Z                              = 64;\nconst UINT D3D11_CS_THREAD_GROUP_MIN_X                              = 1;\nconst UINT D3D11_CS_THREAD_GROUP_MIN_Y                              = 1;\nconst UINT D3D11_CS_THREAD_GROUP_MIN_Z                              = 1;\nconst UINT D3D11_CS_THREAD_LOCAL_TEMP_REGISTER_POOL                 = 16384;\n\nconst UINT D3D11_DEFAULT_DEPTH_BIAS          = 0;\ncpp_quote(\"#define D3D11_DEFAULT_DEPTH_BIAS_CLAMP 0.0f\")\nconst UINT D3D11_DEFAULT_MAX_ANISOTROPY      = 16;\ncpp_quote(\"#define D3D11_DEFAULT_MIP_LOD_BIAS 0.0f\")\nconst UINT D3D11_DEFAULT_RENDER_TARGET_ARRAY_INDEX = 0;\nconst UINT D3D11_DEFAULT_SAMPLE_MASK         = 0xffffffff;\nconst UINT D3D11_DEFAULT_SCISSOR_ENDX        = 0;\nconst UINT D3D11_DEFAULT_SCISSOR_ENDY        = 0;\nconst UINT D3D11_DEFAULT_SCISSOR_STARTX      = 0;\nconst UINT D3D11_DEFAULT_SCISSOR_STARTY      = 0;\ncpp_quote(\"#define D3D11_DEFAULT_SLOPE_SCALED_DEPTH_BIAS 0.0f\")\nconst UINT D3D11_DEFAULT_STENCIL_READ_MASK   = 0xff;\nconst UINT D3D11_DEFAULT_STENCIL_REFERENCE   = 0;\nconst UINT D3D11_DEFAULT_STENCIL_WRITE_MASK  = 0xff;\nconst UINT D3D11_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX = 0;\nconst UINT D3D11_DEFAULT_VIEWPORT_HEIGHT     = 0;\ncpp_quote(\"#define D3D11_DEFAULT_VIEWPORT_MAX_DEPTH 0.0f\")\ncpp_quote(\"#define D3D11_DEFAULT_VIEWPORT_MIN_DEPTH 0.0f\")\nconst UINT D3D11_DEFAULT_VIEWPORT_TOPLEFTX   = 0;\nconst UINT D3D11_DEFAULT_VIEWPORT_TOPLEFTY   = 0;\nconst UINT D3D11_DEFAULT_VIEWPORT_WIDTH      = 0;\n\ncpp_quote(\"#define D3D11_FLOAT32_MAX         (3.402823466e+38f)\")\n\nconst UINT D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT = 32;\n\nconst unsigned int D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT = 8;\n\nconst UINT D3D11_MAX_MAXANISOTROPY           = 16;\nconst UINT D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT = 32;\nconst UINT D3D11_VIEWPORT_BOUNDS_MAX         = 32767;\nconst INT D3D11_VIEWPORT_BOUNDS_MIN          = -32768;\nconst UINT D3D11_VIEWPORT_AND_SCISSORRECT_MAX_INDEX = 15;\nconst UINT D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE = 16;\n\nconst UINT D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL = 0xffffffff;\nconst UINT D3D11_KEEP_UNORDERED_ACCESS_VIEWS           = 0xffffffff;\n\nconst UINT D3D11_SHADER_MAJOR_VERSION        = 5;\nconst UINT D3D11_SHADER_MAX_INSTANCES        = 65535;\nconst UINT D3D11_SHADER_MAX_INTERFACES       = 253;\nconst UINT D3D11_SHADER_MAX_INTERFACE_CALL_SITES = 4096;\nconst UINT D3D11_SHADER_MAX_TYPES            = 65535;\nconst UINT D3D11_SHADER_MINOR_VERSION        = 0;\nconst UINT D3D11_VS_OUTPUT_REGISTER_COUNT    = 32;\n\nconst UINT D3D11_OMAC_SIZE = 16;\n\nconst UINT D3D11_PS_CS_UAV_REGISTER_COMPONENTS         = 1;\nconst UINT D3D11_PS_CS_UAV_REGISTER_COUNT              = 8;\nconst UINT D3D11_PS_CS_UAV_REGISTER_READS_PER_INST     = 1;\nconst UINT D3D11_PS_CS_UAV_REGISTER_READ_PORTS         = 1;\nconst UINT D3D11_PS_FRONTFACING_DEFAULT_VALUE          = 0xffffffff;\nconst UINT D3D11_PS_FRONTFACING_FALSE_VALUE            = 0;\nconst UINT D3D11_PS_FRONTFACING_TRUE_VALUE             = 0xffffffff;\nconst UINT D3D11_PS_INPUT_REGISTER_COMPONENTS          = 4;\nconst UINT D3D11_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32;\nconst UINT D3D11_PS_INPUT_REGISTER_COUNT               = 32;\nconst UINT D3D11_PS_INPUT_REGISTER_READS_PER_INST      = 2;\nconst UINT D3D11_PS_INPUT_REGISTER_READ_PORTS          = 1;\ncpp_quote(\"#define D3D11_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT (0.0f)\")\nconst UINT D3D11_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS   = 1;\nconst UINT D3D11_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT = 32;\nconst UINT D3D11_PS_OUTPUT_DEPTH_REGISTER_COUNT        = 1;\nconst UINT D3D11_PS_OUTPUT_MASK_REGISTER_COMPONENTS    = 1;\nconst UINT D3D11_PS_OUTPUT_MASK_REGISTER_COMPONENT_BIT_COUNT = 32;\nconst UINT D3D11_PS_OUTPUT_MASK_REGISTER_COUNT         = 1;\nconst UINT D3D11_PS_OUTPUT_REGISTER_COMPONENTS         = 4;\nconst UINT D3D11_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32;\nconst UINT D3D11_PS_OUTPUT_REGISTER_COUNT              = 8;\ncpp_quote(\"#define D3D11_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT (0.5f)\")\n\nconst UINT D3D11_RAW_UAV_SRV_BYTE_ALIGNMENT            = 16;\n\nconst UINT D3D11_REQ_BLEND_OBJECT_COUNT_PER_DEVICE     = 4096;\nconst UINT D3D11_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP = 27;\nconst UINT D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT     = 4096;\nconst UINT D3D11_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_DEVICE = 4096;\nconst UINT D3D11_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP  = 32;\nconst UINT D3D11_REQ_DRAW_VERTEX_COUNT_2_TO_EXP        = 32;\nconst UINT D3D11_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION = 16384;\nconst UINT D3D11_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT = 1024;\nconst UINT D3D11_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT = 4096;\nconst UINT D3D11_REQ_MAXANISOTROPY                     = 16;\nconst UINT D3D11_REQ_MIP_LEVELS                        = 15;\nconst UINT D3D11_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES = 2048;\nconst UINT D3D11_REQ_RASTERIZER_OBJECT_COUNT_PER_DEVICE = 4096;\nconst UINT D3D11_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH     = 16384;\nconst UINT D3D11_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_A_TERM = 128;\ncpp_quote(\"#define D3D11_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_B_TERM (0.25f)\")\nconst UINT D3D11_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_C_TERM = 2048;\nconst UINT D3D11_REQ_RESOURCE_VIEW_COUNT_PER_DEVICE_2_TO_EXP = 20;\nconst UINT D3D11_REQ_SAMPLER_OBJECT_COUNT_PER_DEVICE   = 4096;\nconst UINT D3D11_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION    = 2048;\nconst UINT D3D11_REQ_TEXTURE1D_U_DIMENSION             = 16384;\nconst UINT D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION    = 2048;\nconst UINT D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION        = 16384;\nconst UINT D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION      = 2048;\nconst UINT D3D11_REQ_TEXTURECUBE_DIMENSION             = 16384;\n\nconst UINT D3D11_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL = 0;\n\nconst UINT D3D11_SHIFT_INSTRUCTION_PAD_VALUE           = 0;\nconst UINT D3D11_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT = 5;\n\nconst UINT D3D11_SO_BUFFER_MAX_STRIDE_IN_BYTES         = 2048;\nconst UINT D3D11_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES   = 512;\nconst UINT D3D11_SO_BUFFER_SLOT_COUNT                  = 4;\nconst UINT D3D11_SO_DDI_REGISTER_INDEX_DENOTING_GAP    = 0xffffffff;\nconst UINT D3D11_SO_NO_RASTERIZED_STREAM               = 0xffffffff;\nconst UINT D3D11_SO_OUTPUT_COMPONENT_COUNT             = 128;\nconst UINT D3D11_SO_STREAM_COUNT                       = 4;\n\nconst UINT D3D11_SPEC_DATE_DAY   = 16;\nconst UINT D3D11_SPEC_DATE_MONTH = 05;\nconst UINT D3D11_SPEC_DATE_YEAR  = 2011;\n\ncpp_quote(\"#define D3D11_SPEC_VERSION                   (1.07)\")\ncpp_quote(\"#define D3D11_SRGB_GAMMA                     (2.2f)\")\ncpp_quote(\"#define D3D11_SRGB_TO_FLOAT_DENOMINATOR_1    (12.92f)\")\ncpp_quote(\"#define D3D11_SRGB_TO_FLOAT_DENOMINATOR_2    (1.055f)\")\ncpp_quote(\"#define D3D11_SRGB_TO_FLOAT_EXPONENT         (2.4f)\")\ncpp_quote(\"#define D3D11_SRGB_TO_FLOAT_OFFSET           (0.055f)\")\ncpp_quote(\"#define D3D11_SRGB_TO_FLOAT_THRESHOLD        (0.04045f)\")\ncpp_quote(\"#define D3D11_SRGB_TO_FLOAT_TOLERANCE_IN_ULP (0.5f)\")\n\nconst UINT D3D11_STANDARD_COMPONENT_BIT_COUNT                     = 32;\nconst UINT D3D11_STANDARD_COMPONENT_BIT_COUNT_DOUBLED             = 64;\nconst UINT D3D11_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE = 4;\nconst UINT D3D11_STANDARD_PIXEL_COMPONENT_COUNT                   = 128;\nconst UINT D3D11_STANDARD_PIXEL_ELEMENT_COUNT                     = 32;\nconst UINT D3D11_STANDARD_VECTOR_SIZE                             = 4;\nconst UINT D3D11_STANDARD_VERTEX_ELEMENT_COUNT                    = 32;\nconst UINT D3D11_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT            = 64;\n\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#ifndef _D3D11_1_CONSTANTS\")\ncpp_quote(\"#define _D3D11_1_CONSTANTS\")\nconst UINT D3D11_1_UAV_SLOT_COUNT = 64;\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#ifndef _D3D11_2_CONSTANTS\")\ncpp_quote(\"#define _D3D11_2_CONSTANTS\")\nconst UINT D3D11_2_TILED_RESOURCE_TILE_SIZE_IN_BYTES = 0x10000;\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)\")\ncpp_quote(\"struct CD3D11_DEFAULT {};\")\ncpp_quote(\"extern const DECLSPEC_SELECTANY CD3D11_DEFAULT D3D11_DEFAULT;\")\ncpp_quote(\"#endif\")\n\ntypedef enum D3D11_BLEND\n{\n    D3D11_BLEND_ZERO = 1,\n    D3D11_BLEND_ONE = 2,\n    D3D11_BLEND_SRC_COLOR = 3,\n    D3D11_BLEND_INV_SRC_COLOR = 4,\n    D3D11_BLEND_SRC_ALPHA = 5,\n    D3D11_BLEND_INV_SRC_ALPHA = 6,\n    D3D11_BLEND_DEST_ALPHA = 7,\n    D3D11_BLEND_INV_DEST_ALPHA = 8,\n    D3D11_BLEND_DEST_COLOR = 9,\n    D3D11_BLEND_INV_DEST_COLOR = 10,\n    D3D11_BLEND_SRC_ALPHA_SAT = 11,\n    D3D11_BLEND_BLEND_FACTOR = 14,\n    D3D11_BLEND_INV_BLEND_FACTOR = 15,\n    D3D11_BLEND_SRC1_COLOR = 16,\n    D3D11_BLEND_INV_SRC1_COLOR = 17,\n    D3D11_BLEND_SRC1_ALPHA = 18,\n    D3D11_BLEND_INV_SRC1_ALPHA = 19,\n} D3D11_BLEND;\n\ntypedef enum D3D11_BLEND_OP\n{\n    D3D11_BLEND_OP_ADD = 1,\n    D3D11_BLEND_OP_SUBTRACT,\n    D3D11_BLEND_OP_REV_SUBTRACT,\n    D3D11_BLEND_OP_MIN,\n    D3D11_BLEND_OP_MAX\n} D3D11_BLEND_OP;\n\ntypedef enum D3D11_VIDEO_DECODER_BUFFER_TYPE\n{\n    D3D11_VIDEO_DECODER_BUFFER_PICTURE_PARAMETERS = 0,\n    D3D11_VIDEO_DECODER_BUFFER_MACROBLOCK_CONTROL = 1,\n    D3D11_VIDEO_DECODER_BUFFER_RESIDUAL_DIFFERENCE = 2,\n    D3D11_VIDEO_DECODER_BUFFER_DEBLOCKING_CONTROL = 3,\n    D3D11_VIDEO_DECODER_BUFFER_INVERSE_QUANTIZATION_MATRIX = 4,\n    D3D11_VIDEO_DECODER_BUFFER_SLICE_CONTROL = 5,\n    D3D11_VIDEO_DECODER_BUFFER_BITSTREAM = 6,\n    D3D11_VIDEO_DECODER_BUFFER_MOTION_VECTOR = 7,\n    D3D11_VIDEO_DECODER_BUFFER_FILM_GRAIN = 8,\n} D3D11_VIDEO_DECODER_BUFFER_TYPE;\n\ntypedef enum D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE\n{\n    D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_OPAQUE = 0,\n    D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_BACKGROUND = 1,\n    D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_DESTINATION = 2,\n    D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_SOURCE_STREAM = 3,\n} D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE;\n\ntypedef enum D3D11_VIDEO_PROCESSOR_OUTPUT_RATE\n{\n    D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_NORMAL = 0,\n    D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_HALF = 1,\n    D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_CUSTOM = 2,\n} D3D11_VIDEO_PROCESSOR_OUTPUT_RATE;\n\ntypedef enum D3D11_VIDEO_PROCESSOR_STEREO_FORMAT\n{\n    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO = 0,\n    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_HORIZONTAL = 1,\n    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_VERTICAL = 2,\n    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_SEPARATE = 3,\n    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET = 4,\n    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_ROW_INTERLEAVED = 5,\n    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_COLUMN_INTERLEAVED = 6,\n    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_CHECKERBOARD = 7,\n} D3D11_VIDEO_PROCESSOR_STEREO_FORMAT;\n\ntypedef enum D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE\n{\n    D3D11_VIDEO_PROCESSOR_STEREO_FLIP_NONE = 0,\n    D3D11_VIDEO_PROCESSOR_STEREO_FLIP_FRAME0 = 1,\n    D3D11_VIDEO_PROCESSOR_STEREO_FLIP_FRAME1 = 2,\n} D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE;\n\ntypedef enum D3D11_VIDEO_PROCESSOR_ROTATION\n{\n    D3D11_VIDEO_PROCESSOR_ROTATION_IDENTITY = 0,\n    D3D11_VIDEO_PROCESSOR_ROTATION_90 = 1,\n    D3D11_VIDEO_PROCESSOR_ROTATION_180 = 2,\n    D3D11_VIDEO_PROCESSOR_ROTATION_270 = 3,\n} D3D11_VIDEO_PROCESSOR_ROTATION;\n\ntypedef enum D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS\n{\n    D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_BLEND                  = 0x01,\n    D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_BOB                    = 0x02,\n    D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_ADAPTIVE               = 0x04,\n    D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_MOTION_COMPENSATION    = 0x08,\n    D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_INVERSE_TELECINE                   = 0x10,\n    D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_FRAME_RATE_CONVERSION              = 0x20,\n} D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS;\n\ntypedef enum D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS\n{\n    D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_32                                 = 0x00000001,\n    D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_22                                 = 0x00000002,\n    D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_2224                               = 0x00000004,\n    D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_2332                               = 0x00000008,\n    D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_32322                              = 0x00000010,\n    D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_55                                 = 0x00000020,\n    D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_64                                 = 0x00000040,\n    D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_87                                 = 0x00000080,\n    D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_222222222223                       = 0x00000100,\n    D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_OTHER                              = 0x80000000,\n} D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS;\n\ntypedef enum D3D11_CONTENT_PROTECTION_CAPS\n{\n    D3D11_CONTENT_PROTECTION_CAPS_SOFTWARE                                  = 0x00000001,\n    D3D11_CONTENT_PROTECTION_CAPS_HARDWARE                                  = 0x00000002,\n    D3D11_CONTENT_PROTECTION_CAPS_PROTECTION_ALWAYS_ON                      = 0x00000004,\n    D3D11_CONTENT_PROTECTION_CAPS_PARTIAL_DECRYPTION                        = 0x00000008,\n    D3D11_CONTENT_PROTECTION_CAPS_CONTENT_KEY                               = 0x00000010,\n    D3D11_CONTENT_PROTECTION_CAPS_FRESHEN_SESSION_KEY                       = 0x00000020,\n    D3D11_CONTENT_PROTECTION_CAPS_ENCRYPTED_READ_BACK                       = 0x00000040,\n    D3D11_CONTENT_PROTECTION_CAPS_ENCRYPTED_READ_BACK_KEY                   = 0x00000080,\n    D3D11_CONTENT_PROTECTION_CAPS_SEQUENTIAL_CTR_IV                         = 0x00000100,\n    D3D11_CONTENT_PROTECTION_CAPS_ENCRYPT_SLICEDATA_ONLY                    = 0x00000200,\n    D3D11_CONTENT_PROTECTION_CAPS_DECRYPTION_BLT                            = 0x00000400,\n    D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_PROTECT_UNCOMPRESSED             = 0x00000800,\n    D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_PROTECTED_MEMORY_PAGEABLE        = 0x00001000,\n    D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_TEARDOWN                         = 0x00002000,\n    D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_DRM_COMMUNICATION                = 0x00004000,\n} D3D11_CONTENT_PROTECTION_CAPS;\n\ntypedef enum D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE\n{\n    D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE_UNDEFINED                           = 0x00000000,\n    D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE_16_235                              = 0x00000001,\n    D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE_0_255                               = 0x00000002,\n} D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE;\n\ntypedef enum D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE\n{\n    D3D11_PROCESSIDTYPE_UNKNOWN                                             = 0x00000000,\n    D3D11_PROCESSIDTYPE_DWM                                                 = 0x00000001,\n    D3D11_PROCESSIDTYPE_HANDLE                                              = 0x00000002,\n} D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE;\n\ntypedef enum D3D11_BUS_TYPE\n{\n    D3D11_BUS_TYPE_OTHER                                                    = 0x00000000,\n    D3D11_BUS_TYPE_PCI                                                      = 0x00000001,\n    D3D11_BUS_TYPE_PCIX                                                     = 0x00000002,\n    D3D11_BUS_TYPE_PCIEXPRESS                                               = 0x00000003,\n    D3D11_BUS_TYPE_AGP                                                      = 0x00000004,\n    D3D11_BUS_IMPL_MODIFIER_INSIDE_OF_CHIPSET                               = 0x00010000,\n    D3D11_BUS_IMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_CHIP                  = 0x00020000,\n    D3D11_BUS_IMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_SOCKET                = 0x00030000,\n    D3D11_BUS_IMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR                        = 0x00040000,\n    D3D11_BUS_IMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR_INSIDE_OF_NUAE         = 0x00050000,\n    D3D11_BUS_IMPL_MODIFIER_NON_STANDARD                                    = 0x80000000,\n} D3D11_BUS_TYPE;\n\ntypedef struct D3D11_BOX\n{\n    UINT left;\n    UINT top;\n    UINT front;\n    UINT right;\n    UINT bottom;\n    UINT back;\n} D3D11_BOX;\n\ntypedef struct D3D11_BUFFER_RTV\n{\n    union\n    {\n        UINT FirstElement;\n        UINT ElementOffset;\n    };\n    union\n    {\n        UINT NumElements;\n        UINT ElementWidth;\n    };\n} D3D11_BUFFER_RTV;\n\ntypedef struct D3D11_BUFFER_SRV\n{\n    union\n    {\n        UINT FirstElement;\n        UINT ElementOffset;\n    };\n    union\n    {\n        UINT NumElements;\n        UINT ElementWidth;\n    };\n} D3D11_BUFFER_SRV;\n\ntypedef struct D3D11_BUFFER_UAV\n{\n    UINT FirstElement;\n    UINT NumElements;\n    UINT Flags;\n} D3D11_BUFFER_UAV;\n\ntypedef struct D3D11_BUFFEREX_SRV\n{\n    UINT FirstElement;\n    UINT NumElements;\n    UINT Flags;\n} D3D11_BUFFEREX_SRV;\n\ntypedef struct D3D11_CLASS_INSTANCE_DESC\n{\n    UINT InstanceId;\n    UINT InstanceIndex;\n    UINT TypeId;\n    UINT ConstantBuffer;\n    UINT BaseConstantBufferOffset;\n    UINT BaseTexture;\n    UINT BaseSampler;\n    BOOL Created;\n} D3D11_CLASS_INSTANCE_DESC;\n\ntypedef enum D3D11_COMPARISON_FUNC\n{\n    D3D11_COMPARISON_NEVER = 1,\n    D3D11_COMPARISON_LESS,\n    D3D11_COMPARISON_EQUAL,\n    D3D11_COMPARISON_LESS_EQUAL,\n    D3D11_COMPARISON_GREATER,\n    D3D11_COMPARISON_NOT_EQUAL,\n    D3D11_COMPARISON_GREATER_EQUAL,\n    D3D11_COMPARISON_ALWAYS\n} D3D11_COMPARISON_FUNC;\n\ntypedef enum D3D11_COUNTER\n{\n    D3D11_COUNTER_DEVICE_DEPENDENT_0 = 0x40000000,\n} D3D11_COUNTER;\n\ntypedef struct D3D11_COUNTER_DESC\n{\n    D3D11_COUNTER Counter;\n    UINT MiscFlags;\n} D3D11_COUNTER_DESC;\n\ntypedef struct D3D11_COUNTER_INFO\n{\n    D3D11_COUNTER LastDeviceDependentCounter;\n    UINT NumSimultaneousCounters;\n    UINT8 NumDetectableParallelUnits;\n} D3D11_COUNTER_INFO;\n\ntypedef enum D3D11_COUNTER_TYPE\n{\n    D3D11_COUNTER_TYPE_FLOAT32,\n    D3D11_COUNTER_TYPE_UINT16,\n    D3D11_COUNTER_TYPE_UINT32,\n    D3D11_COUNTER_TYPE_UINT64,\n} D3D11_COUNTER_TYPE;\n\ntypedef enum D3D11_CULL_MODE\n{\n    D3D11_CULL_NONE = 1,\n    D3D11_CULL_FRONT,\n    D3D11_CULL_BACK\n} D3D11_CULL_MODE;\n\ntypedef enum D3D11_DEPTH_WRITE_MASK\n{\n    D3D11_DEPTH_WRITE_MASK_ZERO,\n    D3D11_DEPTH_WRITE_MASK_ALL,\n} D3D11_DEPTH_WRITE_MASK;\n\ntypedef enum D3D11_STANDARD_MULTISAMPLE_QUALITY_LEVELS\n{\n    D3D11_STANDARD_MULTISAMPLE_PATTERN = 0xffffffff,\n    D3D11_CENTER_MULTISAMPLE_PATTERN = 0xfffffffe,\n} D3D11_STANDARD_MULTISAMPLE_QUALITY_LEVELS;\n\ntypedef enum D3D11_DEVICE_CONTEXT_TYPE\n{\n    D3D11_DEVICE_CONTEXT_IMMEDIATE,\n    D3D11_DEVICE_CONTEXT_DEFERRED,\n} D3D11_DEVICE_CONTEXT_TYPE;\n\ntypedef enum D3D11_DSV_DIMENSION\n{\n    D3D11_DSV_DIMENSION_UNKNOWN,\n    D3D11_DSV_DIMENSION_TEXTURE1D,\n    D3D11_DSV_DIMENSION_TEXTURE1DARRAY,\n    D3D11_DSV_DIMENSION_TEXTURE2D,\n    D3D11_DSV_DIMENSION_TEXTURE2DARRAY,\n    D3D11_DSV_DIMENSION_TEXTURE2DMS,\n    D3D11_DSV_DIMENSION_TEXTURE2DMSARRAY,\n} D3D11_DSV_DIMENSION;\n\ntypedef enum D3D11_FEATURE\n{\n    D3D11_FEATURE_THREADING,\n    D3D11_FEATURE_DOUBLES,\n    D3D11_FEATURE_FORMAT_SUPPORT,\n    D3D11_FEATURE_FORMAT_SUPPORT2,\n    D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS,\n    D3D11_FEATURE_D3D11_OPTIONS,\n    D3D11_FEATURE_ARCHITECTURE_INFO,\n    D3D11_FEATURE_D3D9_OPTIONS,\n    D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT,\n    D3D11_FEATURE_D3D9_SHADOW_SUPPORT,\n    D3D11_FEATURE_D3D11_OPTIONS1,\n    D3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORT,\n    D3D11_FEATURE_MARKER_SUPPORT,\n    D3D11_FEATURE_D3D9_OPTIONS1,\n    D3D11_FEATURE_D3D11_OPTIONS2,\n    D3D11_FEATURE_D3D11_OPTIONS3,\n    D3D11_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT,\n    D3D11_FEATURE_D3D11_OPTIONS4,\n    D3D11_FEATURE_SHADER_CACHE,\n} D3D11_FEATURE;\n\ntypedef struct D3D11_FEATURE_DATA_THREADING\n{\n    BOOL DriverConcurrentCreates;\n    BOOL DriverCommandLists;\n} D3D11_FEATURE_DATA_THREADING;\n\ntypedef struct D3D11_FEATURE_DATA_DOUBLES\n{\n    BOOL DoublePrecisionFloatShaderOps;\n} D3D11_FEATURE_DATA_DOUBLES;\n\ntypedef struct D3D11_FEATURE_DATA_FORMAT_SUPPORT\n{\n    DXGI_FORMAT InFormat;\n    UINT OutFormatSupport;\n} D3D11_FEATURE_DATA_FORMAT_SUPPORT;\n\ntypedef struct D3D11_FEATURE_DATA_FORMAT_SUPPORT2\n{\n    DXGI_FORMAT InFormat;\n    UINT OutFormatSupport2;\n} D3D11_FEATURE_DATA_FORMAT_SUPPORT2;\n\ntypedef struct D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS\n{\n    BOOL ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x;\n} D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS;\n\ntypedef struct D3D11_FEATURE_DATA_D3D11_OPTIONS\n{\n    BOOL OutputMergerLogicOp;\n    BOOL UAVOnlyRenderingForcedSampleCount;\n    BOOL DiscardAPIsSeenByDriver;\n    BOOL FlagsForUpdateAndCopySeenByDriver;\n    BOOL ClearView;\n    BOOL CopyWithOverlap;\n    BOOL ConstantBufferPartialUpdate;\n    BOOL ConstantBufferOffsetting;\n    BOOL MapNoOverwriteOnDynamicConstantBuffer;\n    BOOL MapNoOverwriteOnDynamicBufferSRV;\n    BOOL MultisampleRTVWithForcedSampleCountOne;\n    BOOL SAD4ShaderInstructions;\n    BOOL ExtendedDoublesShaderInstructions;\n    BOOL ExtendedResourceSharing;\n} D3D11_FEATURE_DATA_D3D11_OPTIONS;\n\ntypedef struct D3D11_FEATURE_DATA_ARCHITECTURE_INFO\n{\n    BOOL TileBasedDeferredRenderer;\n} D3D11_FEATURE_DATA_ARCHITECTURE_INFO;\n\ntypedef struct D3D11_FEATURE_DATA_D3D9_OPTIONS\n{\n    BOOL FullNonPow2TextureSupport;\n} D3D11_FEATURE_DATA_D3D9_OPTIONS;\n\ntypedef struct D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT\n{\n    BOOL SupportsDepthAsTextureWithLessEqualComparisonFilter;\n} D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT;\n\ntypedef enum D3D11_SHADER_MIN_PRECISION_SUPPORT\n{\n    D3D11_SHADER_MIN_PRECISION_10_BIT = 0x1,\n    D3D11_SHADER_MIN_PRECISION_16_BIT = 0x2,\n} D3D11_SHADER_MIN_PRECISION_SUPPORT;\n\ntypedef struct D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT\n{\n    UINT PixelShaderMinPrecision;\n    UINT AllOtherShaderStagesMinPrecision;\n} D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT;\n\ntypedef enum D3D11_TILED_RESOURCES_TIER\n{\n    D3D11_TILED_RESOURCES_NOT_SUPPORTED = 0x0,\n    D3D11_TILED_RESOURCES_TIER_1 = 0x1,\n    D3D11_TILED_RESOURCES_TIER_2 = 0x2,\n    D3D11_TILED_RESOURCES_TIER_3 = 0x3,\n} D3D11_TILED_RESOURCES_TIER;\n\ntypedef struct D3D11_FEATURE_DATA_D3D11_OPTIONS1\n{\n    D3D11_TILED_RESOURCES_TIER TiledResourcesTier;\n    BOOL MinMaxFiltering;\n    BOOL ClearViewAlsoSupportsDepthOnlyFormats;\n    BOOL MapOnDefaultBuffers;\n} D3D11_FEATURE_DATA_D3D11_OPTIONS1;\n\ntypedef struct D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT\n{\n    BOOL SimpleInstancingSupported;\n} D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT;\n\ntypedef struct D3D11_FEATURE_DATA_MARKER_SUPPORT\n{\n    BOOL Profile;\n} D3D11_FEATURE_DATA_MARKER_SUPPORT;\n\ntypedef struct D3D11_FEATURE_DATA_D3D9_OPTIONS1\n{\n    BOOL FullNonPow2TextureSupported;\n    BOOL DepthAsTextureWithLessEqualComparisonFilterSupported;\n    BOOL SimpleInstancingSupported;\n    BOOL TextureCubeFaceRenderTargetWithNonCubeDepthStencilSupported;\n} D3D11_FEATURE_DATA_D3D9_OPTIONS1;\n\ntypedef enum D3D11_CONSERVATIVE_RASTERIZATION_TIER\n{\n    D3D11_CONSERVATIVE_RASTERIZATION_NOT_SUPPORTED = 0x0,\n    D3D11_CONSERVATIVE_RASTERIZATION_TIER_1 = 0x1,\n    D3D11_CONSERVATIVE_RASTERIZATION_TIER_2 = 0x2,\n    D3D11_CONSERVATIVE_RASTERIZATION_TIER_3 = 0x3,\n} D3D11_CONSERVATIVE_RASTERIZATION_TIER;\n\ntypedef struct D3D11_FEATURE_DATA_D3D11_OPTIONS2\n{\n    BOOL PSSpecifiedStencilRefSupported;\n    BOOL TypedUAVLoadAdditionalFormats;\n    BOOL ROVsSupported;\n    D3D11_CONSERVATIVE_RASTERIZATION_TIER ConservativeRasterizationTier;\n    D3D11_TILED_RESOURCES_TIER TiledResourcesTier;\n    BOOL MapOnDefaultTextures;\n    BOOL StandardSwizzle;\n    BOOL UnifiedMemoryArchitecture;\n} D3D11_FEATURE_DATA_D3D11_OPTIONS2;\n\ntypedef struct D3D11_FEATURE_DATA_D3D11_OPTIONS3\n{\n    BOOL VPAndRTArrayIndexFromAnyShaderFeedingRasterizer;\n} D3D11_FEATURE_DATA_D3D11_OPTIONS3;\n\ntypedef struct D3D11_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT\n{\n    UINT MaxGPUVirtualAddressBitsPerResource;\n    UINT MaxGPUVirtualAddressBitsPerProcess;\n} D3D11_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT;\n\ntypedef enum D3D11_SHADER_CACHE_SUPPORT_FLAGS\n{\n    D3D11_SHADER_CACHE_SUPPORT_NONE = 0x0,\n    D3D11_SHADER_CACHE_SUPPORT_AUTOMATIC_INPROC_CACHE = 0x1,\n    D3D11_SHADER_CACHE_SUPPORT_AUTOMATIC_DISK_CACHE = 0x2,\n} D3D11_SHADER_CACHE_SUPPORT_FLAGS;\n\ntypedef struct D3D11_FEATURE_DATA_SHADER_CACHE\n{\n    UINT SupportFlags;\n} D3D11_FEATURE_DATA_SHADER_CACHE;\n\ntypedef enum D3D11_FILL_MODE\n{\n    D3D11_FILL_WIREFRAME = 2,\n    D3D11_FILL_SOLID\n} D3D11_FILL_MODE;\n\ntypedef enum D3D11_FILTER_TYPE\n{\n    D3D11_FILTER_TYPE_POINT  = 0,\n    D3D11_FILTER_TYPE_LINEAR = 1\n} D3D11_FILTER_TYPE;\n\nconst UINT D3D11_MIN_FILTER_SHIFT = 4;\nconst UINT D3D11_MAG_FILTER_SHIFT = 2;\nconst UINT D3D11_MIP_FILTER_SHIFT = 0;\nconst UINT D3D11_FILTER_TYPE_MASK          = 0x00000003;\nconst UINT D3D11_COMPARISON_FILTERING_BIT  = 0x00000080;\nconst UINT D3D11_ANISOTROPIC_FILTERING_BIT = 0x00000040;\n\ncpp_quote(\"#define D3D11_ENCODE_BASIC_FILTER(min, mag, mip, bComparison) \\\\\")\ncpp_quote(\"    ((D3D11_FILTER)(((bComparison) ? D3D11_COMPARISON_FILTERING_BIT : 0 ) | \\\\\")\ncpp_quote(\"                    (((min)&D3D11_FILTER_TYPE_MASK) << D3D11_MIN_FILTER_SHIFT) | \\\\\")\ncpp_quote(\"                    (((mag)&D3D11_FILTER_TYPE_MASK) << D3D11_MAG_FILTER_SHIFT) | \\\\\")\ncpp_quote(\"                    (((mip)&D3D11_FILTER_TYPE_MASK) << D3D11_MIP_FILTER_SHIFT)))\")\n\ncpp_quote(\"#define D3D11_ENCODE_ANISOTROPIC_FILTER(bComparison) \\\\\")\ncpp_quote(\"    ((D3D11_FILTER)(D3D11_ANISOTROPIC_FILTERING_BIT | \\\\\" )\ncpp_quote(\"                    D3D11_ENCODE_BASIC_FILTER(D3D11_FILTER_TYPE_LINEAR,D3D11_FILTER_TYPE_LINEAR, \\\\\" )\ncpp_quote(\"                                              D3D11_FILTER_TYPE_LINEAR,bComparison)))\" )\n\ncpp_quote(\"#define D3D11_DECODE_MIN_FILTER(d3d11Filter) \\\\\")\ncpp_quote(\"    ((D3D11_FILTER_TYPE)(((d3d11Filter) >> D3D11_MIN_FILTER_SHIFT) & D3D11_FILTER_TYPE_MASK))\")\n\ncpp_quote(\"#define D3D11_DECODE_MAG_FILTER(d3d11Filter) \\\\\")\ncpp_quote(\"    ((D3D11_FILTER_TYPE)(((d3d11Filter) >> D3D11_MAG_FILTER_SHIFT) & D3D11_FILTER_TYPE_MASK))\")\n\ncpp_quote(\"#define D3D11_DECODE_MIP_FILTER(d3d11Filter) \\\\\")\ncpp_quote(\"    ((D3D11_FILTER_TYPE)(((d3d11Filter) >> D3D11_MIP_FILTER_SHIFT) & D3D11_FILTER_TYPE_MASK))\")\n\ncpp_quote(\"#define D3D11_DECODE_IS_COMPARISON_FILTER(d3d11Filter) ((d3d11Filter) & D3D11_COMPARISON_FILTERING_BIT)\")\n\ncpp_quote(\"#define D3D11_DECODE_IS_ANISOTROPIC_FILTER(d3d11Filter) \\\\\")\ncpp_quote(\"    (((d3d11Filter) & D3D11_ANISOTROPIC_FILTERING_BIT ) \\\\\" )\ncpp_quote(\"     && (D3D11_FILTER_TYPE_LINEAR == D3D11_DECODE_MIN_FILTER(d3d11Filter)) \\\\\" )\ncpp_quote(\"     && (D3D11_FILTER_TYPE_LINEAR == D3D11_DECODE_MAG_FILTER(d3d11Filter)) \\\\\" )\ncpp_quote(\"     && (D3D11_FILTER_TYPE_LINEAR == D3D11_DECODE_MIP_FILTER(d3d11Filter)))\")\n\ntypedef enum D3D11_FILTER\n{\n    D3D11_FILTER_MIN_MAG_MIP_POINT = 0x00,\n    D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x01,\n    D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x04,\n    D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x05,\n    D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x10,\n    D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x11,\n    D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x14,\n    D3D11_FILTER_MIN_MAG_MIP_LINEAR = 0x15,\n    D3D11_FILTER_ANISOTROPIC = 0x55,\n    D3D11_FILTER_COMPARISON_MIN_MAG_MIP_POINT = 0x80,\n    D3D11_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 0x81,\n    D3D11_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x84,\n    D3D11_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 0x85,\n    D3D11_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 0x90,\n    D3D11_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91,\n    D3D11_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 0x94,\n    D3D11_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR = 0x95,\n    D3D11_FILTER_COMPARISON_ANISOTROPIC = 0xd5\n} D3D11_FILTER;\n\ntypedef enum D3D11_DSV_FLAG\n{\n    D3D11_DSV_READ_ONLY_DEPTH = 0x1,\n    D3D11_DSV_READ_ONLY_STENCIL = 0x2,\n} D3D11_DSV_FLAG;\n\ntypedef enum D3D11_BUFFEREX_SRV_FLAG\n{\n    D3D11_BUFFEREX_SRV_FLAG_RAW = 0x1,\n} D3D11_BUFFEREX_SRV_FLAG;\n\ntypedef enum D3D11_UAV_FLAG\n{\n    D3D11_BUFFER_UAV_FLAG_RAW     = 0x1,\n    D3D11_BUFFER_UAV_FLAG_APPEND  = 0x2,\n    D3D11_BUFFER_UAV_FLAG_COUNTER = 0x4,\n} D3D11_UAV_FLAG;\n\ntypedef enum D3D11_INPUT_CLASSIFICATION\n{\n    D3D11_INPUT_PER_VERTEX_DATA,\n    D3D11_INPUT_PER_INSTANCE_DATA,\n} D3D11_INPUT_CLASSIFICATION;\n\nconst UINT D3D11_APPEND_ALIGNED_ELEMENT = 0xffffffff;\n\ntypedef struct D3D11_INPUT_ELEMENT_DESC\n{\n    LPCSTR SemanticName;\n    UINT SemanticIndex;\n    DXGI_FORMAT Format;\n    UINT InputSlot;\n    UINT AlignedByteOffset;\n    D3D11_INPUT_CLASSIFICATION InputSlotClass;\n    UINT InstanceDataStepRate;\n} D3D11_INPUT_ELEMENT_DESC;\n\ntypedef enum D3D11_MAP\n{\n    D3D11_MAP_READ = 1,\n    D3D11_MAP_WRITE,\n    D3D11_MAP_READ_WRITE,\n    D3D11_MAP_WRITE_DISCARD,\n    D3D11_MAP_WRITE_NO_OVERWRITE\n} D3D11_MAP;\n\ntypedef enum D3D11_MAP_FLAG\n{\n    D3D11_MAP_FLAG_DO_NOT_WAIT = 0x00100000\n} D3D11_MAP_FLAG;\n\ntypedef struct D3D11_QUERY_DATA_SO_STATISTICS\n{\n    UINT64 NumPrimitivesWritten;\n    UINT64 PrimitivesStorageNeeded;\n} D3D11_QUERY_DATA_SO_STATISTICS;\n\ntypedef struct D3D11_MAPPED_SUBRESOURCE\n{\n    void *pData;\n    UINT RowPitch;\n    UINT DepthPitch;\n} D3D11_MAPPED_SUBRESOURCE;\n\ntypedef enum D3D11_QUERY\n{\n    D3D11_QUERY_EVENT,\n    D3D11_QUERY_OCCLUSION,\n    D3D11_QUERY_TIMESTAMP,\n    D3D11_QUERY_TIMESTAMP_DISJOINT,\n    D3D11_QUERY_PIPELINE_STATISTICS,\n    D3D11_QUERY_OCCLUSION_PREDICATE,\n    D3D11_QUERY_SO_STATISTICS,\n    D3D11_QUERY_SO_OVERFLOW_PREDICATE,\n    D3D11_QUERY_SO_STATISTICS_STREAM0,\n    D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM0,\n    D3D11_QUERY_SO_STATISTICS_STREAM1,\n    D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM1,\n    D3D11_QUERY_SO_STATISTICS_STREAM2,\n    D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM2,\n    D3D11_QUERY_SO_STATISTICS_STREAM3,\n    D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM3,\n} D3D11_QUERY;\n\ntypedef enum D3D11_QUERY_MISC_FLAG\n{\n    D3D11_QUERY_MISC_PREDICATEHINT = 0x1,\n} D3D11_QUERY_MISC_FLAG;\n\ntypedef enum D3D11_ASYNC_GETDATA_FLAG\n{\n    D3D11_ASYNC_GETDATA_DONOTFLUSH = 0x0001,\n} D3D11_ASYNC_GETDATA_FLAG;\n\ntypedef enum D3D11_RESOURCE_MISC_FLAG\n{\n    D3D11_RESOURCE_MISC_GENERATE_MIPS                    = 0x00000001L,\n    D3D11_RESOURCE_MISC_SHARED                           = 0x00000002L,\n    D3D11_RESOURCE_MISC_TEXTURECUBE                      = 0x00000004L,\n    D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS                = 0x00000010L,\n    D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS           = 0x00000020L,\n    D3D11_RESOURCE_MISC_BUFFER_STRUCTURED                = 0x00000040L,\n    D3D11_RESOURCE_MISC_RESOURCE_CLAMP                   = 0x00000080L,\n    D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX                = 0x00000100L,\n    D3D11_RESOURCE_MISC_GDI_COMPATIBLE                   = 0x00000200L,\n    D3D11_RESOURCE_MISC_SHARED_NTHANDLE                  = 0x00000800L,\n    D3D11_RESOURCE_MISC_RESTRICTED_CONTENT               = 0x00001000L,\n    D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE         = 0x00002000L,\n    D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE_DRIVER  = 0x00004000L,\n    D3D11_RESOURCE_MISC_GUARDED                          = 0x00008000L\n} D3D11_RESOURCE_MISC_FLAG;\n\ntypedef struct D3D11_QUERY_DESC\n{\n    D3D11_QUERY Query;\n    UINT MiscFlags;\n} D3D11_QUERY_DESC;\n\ncpp_quote(\"#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)\")\ncpp_quote(\"struct CD3D11_QUERY_DESC : public D3D11_QUERY_DESC {\")\ncpp_quote(\"    CD3D11_QUERY_DESC() {}\")\ncpp_quote(\"    ~CD3D11_QUERY_DESC() {}\")\ncpp_quote(\"    explicit CD3D11_QUERY_DESC(const D3D11_QUERY_DESC &other) : D3D11_QUERY_DESC(other) {}\")\ncpp_quote(\"    explicit CD3D11_QUERY_DESC(D3D11_QUERY query, UINT misc_flags = 0) {\")\ncpp_quote(\"        Query = query;\")\ncpp_quote(\"        MiscFlags = misc_flags;\")\ncpp_quote(\"    }\")\ncpp_quote(\"    operator const D3D11_QUERY_DESC&() const {\")\ncpp_quote(\"        return *this;\")\ncpp_quote(\"    }\")\ncpp_quote(\"};\")\ncpp_quote(\"#endif\")\n\ntypedef struct D3D11_RASTERIZER_DESC\n{\n    D3D11_FILL_MODE FillMode;\n    D3D11_CULL_MODE CullMode;\n    BOOL FrontCounterClockwise;\n    INT DepthBias;\n    FLOAT DepthBiasClamp;\n    FLOAT SlopeScaledDepthBias;\n    BOOL DepthClipEnable;\n    BOOL ScissorEnable;\n    BOOL MultisampleEnable;\n    BOOL AntialiasedLineEnable;\n} D3D11_RASTERIZER_DESC;\n\ncpp_quote(\"#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)\")\ncpp_quote(\"struct CD3D11_RASTERIZER_DESC : public D3D11_RASTERIZER_DESC {\")\ncpp_quote(\"    CD3D11_RASTERIZER_DESC() {}\")\ncpp_quote(\"    explicit CD3D11_RASTERIZER_DESC(const D3D11_RASTERIZER_DESC &o) : D3D11_RASTERIZER_DESC(o) {}\")\ncpp_quote(\"    explicit CD3D11_RASTERIZER_DESC(CD3D11_DEFAULT) {\")\ncpp_quote(\"        FillMode = D3D11_FILL_SOLID;\")\ncpp_quote(\"        CullMode = D3D11_CULL_BACK;\")\ncpp_quote(\"        FrontCounterClockwise = FALSE;\")\ncpp_quote(\"        DepthBias = D3D11_DEFAULT_DEPTH_BIAS;\")\ncpp_quote(\"        DepthBiasClamp = D3D11_DEFAULT_DEPTH_BIAS_CLAMP;\")\ncpp_quote(\"        SlopeScaledDepthBias = D3D11_DEFAULT_SLOPE_SCALED_DEPTH_BIAS;\")\ncpp_quote(\"        DepthClipEnable = TRUE;\")\ncpp_quote(\"        ScissorEnable = FALSE;\")\ncpp_quote(\"        MultisampleEnable = FALSE;\")\ncpp_quote(\"        AntialiasedLineEnable = FALSE;\")\ncpp_quote(\"    }\")\ncpp_quote(\"    explicit CD3D11_RASTERIZER_DESC(D3D11_FILL_MODE fillMode, D3D11_CULL_MODE cullMode,\" )\ncpp_quote(\"            BOOL frontCounterClockwise, INT depthBias, FLOAT depthBiasClamp, FLOAT slopeScaledDepthBias,\")\ncpp_quote(\"            BOOL depthClipEnable, BOOL scissorEnable, BOOL multisampleEnable, BOOL antialiasedLineEnable) {\")\ncpp_quote(\"        FillMode = fillMode;\")\ncpp_quote(\"        CullMode = cullMode;\")\ncpp_quote(\"        FrontCounterClockwise = frontCounterClockwise;\")\ncpp_quote(\"        DepthBias = depthBias;\")\ncpp_quote(\"        DepthBiasClamp = depthBiasClamp;\")\ncpp_quote(\"        SlopeScaledDepthBias = slopeScaledDepthBias;\")\ncpp_quote(\"        DepthClipEnable = depthClipEnable;\")\ncpp_quote(\"        ScissorEnable = scissorEnable;\")\ncpp_quote(\"        MultisampleEnable = multisampleEnable;\")\ncpp_quote(\"        AntialiasedLineEnable = antialiasedLineEnable;\")\ncpp_quote(\"    }\")\ncpp_quote(\"    ~CD3D11_RASTERIZER_DESC() {}\")\ncpp_quote(\"    operator const D3D11_RASTERIZER_DESC&() const { return *this; }\")\ncpp_quote(\"};\")\ncpp_quote(\"#endif\")\n\ntypedef enum D3D11_RESOURCE_DIMENSION\n{\n    D3D11_RESOURCE_DIMENSION_UNKNOWN,\n    D3D11_RESOURCE_DIMENSION_BUFFER,\n    D3D11_RESOURCE_DIMENSION_TEXTURE1D,\n    D3D11_RESOURCE_DIMENSION_TEXTURE2D,\n    D3D11_RESOURCE_DIMENSION_TEXTURE3D,\n} D3D11_RESOURCE_DIMENSION;\n\ntypedef enum D3D11_RTV_DIMENSION\n{\n    D3D11_RTV_DIMENSION_UNKNOWN,\n    D3D11_RTV_DIMENSION_BUFFER,\n    D3D11_RTV_DIMENSION_TEXTURE1D,\n    D3D11_RTV_DIMENSION_TEXTURE1DARRAY,\n    D3D11_RTV_DIMENSION_TEXTURE2D,\n    D3D11_RTV_DIMENSION_TEXTURE2DARRAY,\n    D3D11_RTV_DIMENSION_TEXTURE2DMS,\n    D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY,\n    D3D11_RTV_DIMENSION_TEXTURE3D,\n} D3D11_RTV_DIMENSION;\n\ntypedef struct D3D11_SO_DECLARATION_ENTRY\n{\n    UINT Stream;\n    LPCSTR SemanticName;\n    UINT SemanticIndex;\n    BYTE StartComponent;\n    BYTE ComponentCount;\n    BYTE OutputSlot;\n} D3D11_SO_DECLARATION_ENTRY;\n\ntypedef enum D3D11_STENCIL_OP\n{\n    D3D11_STENCIL_OP_KEEP = 1,\n    D3D11_STENCIL_OP_ZERO,\n    D3D11_STENCIL_OP_REPLACE,\n    D3D11_STENCIL_OP_INCR_SAT,\n    D3D11_STENCIL_OP_DECR_SAT,\n    D3D11_STENCIL_OP_INVERT,\n    D3D11_STENCIL_OP_INCR,\n    D3D11_STENCIL_OP_DECR\n} D3D11_STENCIL_OP;\n\ncpp_quote(\"#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)\")\ncpp_quote(\"}\")\ncpp_quote(\"inline UINT D3D11CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT MipLevels) {\")\ncpp_quote(\"    return MipSlice + ArraySlice * MipLevels;\")\ncpp_quote(\"}\")\ncpp_quote(\"extern \\\"C\\\"{\")\ncpp_quote(\"#endif\")\n\ntypedef struct D3D11_SUBRESOURCE_DATA\n{\n    const void *pSysMem;\n    UINT SysMemPitch;\n    UINT SysMemSlicePitch;\n} D3D11_SUBRESOURCE_DATA;\n\ntypedef struct D3D11_TEX1D_ARRAY_DSV\n{\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D11_TEX1D_ARRAY_DSV;\n\ntypedef struct D3D11_TEX1D_ARRAY_RTV\n{\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D11_TEX1D_ARRAY_RTV;\n\ntypedef struct D3D11_TEX1D_ARRAY_SRV\n{\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D11_TEX1D_ARRAY_SRV;\n\ntypedef struct D3D11_TEX1D_ARRAY_UAV\n{\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D11_TEX1D_ARRAY_UAV;\n\ntypedef struct D3D11_TEX1D_DSV\n{\n    UINT MipSlice;\n} D3D11_TEX1D_DSV;\n\ntypedef struct D3D11_TEX1D_RTV\n{\n    UINT MipSlice;\n} D3D11_TEX1D_RTV;\n\ntypedef struct D3D11_TEX1D_SRV\n{\n    UINT MostDetailedMip;\n    UINT MipLevels;\n } D3D11_TEX1D_SRV;\n\ntypedef struct D3D11_TEX1D_UAV\n{\n    UINT MipSlice;\n} D3D11_TEX1D_UAV;\n\ntypedef struct D3D11_TEX2D_ARRAY_DSV\n{\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D11_TEX2D_ARRAY_DSV;\n\ntypedef struct D3D11_TEX2D_ARRAY_RTV\n{\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D11_TEX2D_ARRAY_RTV;\n\ntypedef struct D3D11_TEX2D_ARRAY_SRV\n{\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D11_TEX2D_ARRAY_SRV;\n\ntypedef struct D3D11_TEX2D_ARRAY_UAV\n{\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D11_TEX2D_ARRAY_UAV;\n\ntypedef struct D3D11_TEX2D_DSV\n{\n    UINT MipSlice;\n} D3D11_TEX2D_DSV;\n\ntypedef struct D3D11_TEX2D_RTV\n{\n    UINT MipSlice;\n} D3D11_TEX2D_RTV;\n\ntypedef struct D3D11_TEX2D_SRV\n{\n    UINT MostDetailedMip;\n    UINT MipLevels;\n} D3D11_TEX2D_SRV;\n\ntypedef struct D3D11_TEX2D_UAV\n{\n    UINT MipSlice;\n} D3D11_TEX2D_UAV;\n\ntypedef struct D3D11_TEX2DMS_ARRAY_DSV\n{\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D11_TEX2DMS_ARRAY_DSV;\n\ntypedef struct D3D11_TEX2DMS_ARRAY_RTV\n{\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D11_TEX2DMS_ARRAY_RTV;\n\ntypedef struct D3D11_TEX2DMS_ARRAY_SRV\n{\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D11_TEX2DMS_ARRAY_SRV;\n\ntypedef struct D3D11_TEX2DMS_DSV\n{\n    UINT UnusedField_NothingToDefine;\n} D3D11_TEX2DMS_DSV;\n\ntypedef struct D3D11_TEX2DMS_RTV\n{\n    UINT UnusedField_NothingToDefine;\n} D3D11_TEX2DMS_RTV;\n\ntypedef struct D3D11_TEX2DMS_SRV\n{\n    UINT UnusedField_NothingToDefine;\n} D3D11_TEX2DMS_SRV;\n\ntypedef struct D3D11_TEX3D_RTV\n{\n    UINT MipSlice;\n    UINT FirstWSlice;\n    UINT WSize;\n} D3D11_TEX3D_RTV;\n\ntypedef struct D3D11_TEX3D_SRV\n{\n    UINT MostDetailedMip;\n    UINT MipLevels;\n} D3D11_TEX3D_SRV;\n\ntypedef struct D3D11_TEX3D_UAV\n{\n    UINT MipSlice;\n    UINT FirstWSlice;\n    UINT WSize;\n} D3D11_TEX3D_UAV;\n\ntypedef struct D3D11_TEXCUBE_ARRAY_SRV\n{\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    UINT First2DArrayFace;\n    UINT NumCubes;\n} D3D11_TEXCUBE_ARRAY_SRV;\n\ntypedef struct D3D11_TEXCUBE_SRV\n{\n    UINT MostDetailedMip;\n    UINT MipLevels;\n} D3D11_TEXCUBE_SRV;\n\ntypedef enum D3D11_TEXTURE_ADDRESS_MODE\n{\n    D3D11_TEXTURE_ADDRESS_WRAP = 1,\n    D3D11_TEXTURE_ADDRESS_MIRROR,\n    D3D11_TEXTURE_ADDRESS_CLAMP,\n    D3D11_TEXTURE_ADDRESS_BORDER,\n    D3D11_TEXTURE_ADDRESS_MIRROR_ONCE\n} D3D11_TEXTURE_ADDRESS_MODE;\n\ntypedef enum D3D11_UAV_DIMENSION\n{\n    D3D11_UAV_DIMENSION_UNKNOWN,\n    D3D11_UAV_DIMENSION_BUFFER,\n    D3D11_UAV_DIMENSION_TEXTURE1D,\n    D3D11_UAV_DIMENSION_TEXTURE1DARRAY,\n    D3D11_UAV_DIMENSION_TEXTURE2D,\n    D3D11_UAV_DIMENSION_TEXTURE2DARRAY,\n    D3D11_UAV_DIMENSION_TEXTURE3D = 8,\n} D3D11_UAV_DIMENSION;\n\ntypedef struct D3D11_UNORDERED_ACCESS_VIEW_DESC\n{\n    DXGI_FORMAT Format;\n    D3D11_UAV_DIMENSION ViewDimension;\n\n    union\n    {\n        D3D11_BUFFER_UAV Buffer;\n        D3D11_TEX1D_UAV Texture1D;\n        D3D11_TEX1D_ARRAY_UAV Texture1DArray;\n        D3D11_TEX2D_UAV Texture2D;\n        D3D11_TEX2D_ARRAY_UAV Texture2DArray;\n        D3D11_TEX3D_UAV Texture3D;\n    };\n} D3D11_UNORDERED_ACCESS_VIEW_DESC;\n\ntypedef enum D3D11_USAGE\n{\n    D3D11_USAGE_DEFAULT,\n    D3D11_USAGE_IMMUTABLE,\n    D3D11_USAGE_DYNAMIC,\n    D3D11_USAGE_STAGING,\n} D3D11_USAGE;\n\ntypedef enum D3D11_BIND_FLAG\n{\n    D3D11_BIND_VERTEX_BUFFER    = 0x0001,\n    D3D11_BIND_INDEX_BUFFER     = 0x0002,\n    D3D11_BIND_CONSTANT_BUFFER  = 0x0004,\n    D3D11_BIND_SHADER_RESOURCE  = 0x0008,\n    D3D11_BIND_STREAM_OUTPUT    = 0x0010,\n    D3D11_BIND_RENDER_TARGET    = 0x0020,\n    D3D11_BIND_DEPTH_STENCIL    = 0x0040,\n    D3D11_BIND_UNORDERED_ACCESS = 0x0080,\n    D3D11_BIND_DECODER          = 0x0200,\n    D3D11_BIND_VIDEO_ENCODER    = 0x0400\n} D3D11_BIND_FLAG;\n\ntypedef enum D3D11_CPU_ACCESS_FLAG\n{\n    D3D11_CPU_ACCESS_WRITE = 0x00010000,\n    D3D11_CPU_ACCESS_READ  = 0x00020000\n} D3D11_CPU_ACCESS_FLAG;\n\ntypedef struct D3D11_VIEWPORT\n{\n    FLOAT TopLeftX;\n    FLOAT TopLeftY;\n    FLOAT Width;\n    FLOAT Height;\n    FLOAT MinDepth;\n    FLOAT MaxDepth;\n} D3D11_VIEWPORT;\n\ntypedef enum D3D11_COLOR_WRITE_ENABLE\n{\n    D3D11_COLOR_WRITE_ENABLE_RED   = 1,\n    D3D11_COLOR_WRITE_ENABLE_GREEN = 2,\n    D3D11_COLOR_WRITE_ENABLE_BLUE  = 4,\n    D3D11_COLOR_WRITE_ENABLE_ALPHA = 8,\n    D3D11_COLOR_WRITE_ENABLE_ALL   =\n        (D3D11_COLOR_WRITE_ENABLE_RED|D3D11_COLOR_WRITE_ENABLE_GREEN|D3D11_COLOR_WRITE_ENABLE_BLUE|D3D11_COLOR_WRITE_ENABLE_ALPHA)\n} D3D11_COLOR_WRITE_ENABLE;\n\ntypedef enum D3D11_FORMAT_SUPPORT\n{\n    D3D11_FORMAT_SUPPORT_BUFFER                       = 0x00000001,\n    D3D11_FORMAT_SUPPORT_IA_VERTEX_BUFFER             = 0x00000002,\n    D3D11_FORMAT_SUPPORT_IA_INDEX_BUFFER              = 0x00000004,\n    D3D11_FORMAT_SUPPORT_SO_BUFFER                    = 0x00000008,\n    D3D11_FORMAT_SUPPORT_TEXTURE1D                    = 0x00000010,\n    D3D11_FORMAT_SUPPORT_TEXTURE2D                    = 0x00000020,\n    D3D11_FORMAT_SUPPORT_TEXTURE3D                    = 0x00000040,\n    D3D11_FORMAT_SUPPORT_TEXTURECUBE                  = 0x00000080,\n    D3D11_FORMAT_SUPPORT_SHADER_LOAD                  = 0x00000100,\n    D3D11_FORMAT_SUPPORT_SHADER_SAMPLE                = 0x00000200,\n    D3D11_FORMAT_SUPPORT_SHADER_SAMPLE_COMPARISON     = 0x00000400,\n    D3D11_FORMAT_SUPPORT_SHADER_SAMPLE_MONO_TEXT      = 0x00000800,\n    D3D11_FORMAT_SUPPORT_MIP                          = 0x00001000,\n    D3D11_FORMAT_SUPPORT_MIP_AUTOGEN                  = 0x00002000,\n    D3D11_FORMAT_SUPPORT_RENDER_TARGET                = 0x00004000,\n    D3D11_FORMAT_SUPPORT_BLENDABLE                    = 0x00008000,\n    D3D11_FORMAT_SUPPORT_DEPTH_STENCIL                = 0x00010000,\n    D3D11_FORMAT_SUPPORT_CPU_LOCKABLE                 = 0x00020000,\n    D3D11_FORMAT_SUPPORT_MULTISAMPLE_RESOLVE          = 0x00040000,\n    D3D11_FORMAT_SUPPORT_DISPLAY                      = 0x00080000,\n    D3D11_FORMAT_SUPPORT_CAST_WITHIN_BIT_LAYOUT       = 0x00100000,\n    D3D11_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET     = 0x00200000,\n    D3D11_FORMAT_SUPPORT_MULTISAMPLE_LOAD             = 0x00400000,\n    D3D11_FORMAT_SUPPORT_SHADER_GATHER                = 0x00800000,\n    D3D11_FORMAT_SUPPORT_BACK_BUFFER_CAST             = 0x01000000,\n    D3D11_FORMAT_SUPPORT_TYPED_UNORDERED_ACCESS_VIEW  = 0x02000000,\n    D3D11_FORMAT_SUPPORT_SHADER_GATHER_COMPARISON     = 0x04000000,\n    D3D11_FORMAT_SUPPORT_DECODER_OUTPUT               = 0x08000000,\n    D3D11_FORMAT_SUPPORT_VIDEO_PROCESSOR_OUTPUT       = 0x10000000,\n    D3D11_FORMAT_SUPPORT_VIDEO_PROCESSOR_INPUT        = 0x20000000,\n    D3D11_FORMAT_SUPPORT_VIDEO_ENCODER                = 0x40000000,\n} D3D11_FORMAT_SUPPORT;\n\ntypedef enum D3D11_CLEAR_FLAG\n{\n    D3D11_CLEAR_DEPTH    = 0x0001L,\n    D3D11_CLEAR_STENCIL  = 0x0002L\n} D3D11_CLEAR_FLAG;\n\ntypedef struct D3D11_RENDER_TARGET_BLEND_DESC\n{\n    BOOL BlendEnable;\n    D3D11_BLEND SrcBlend;\n    D3D11_BLEND DestBlend;\n    D3D11_BLEND_OP BlendOp;\n    D3D11_BLEND SrcBlendAlpha;\n    D3D11_BLEND DestBlendAlpha;\n    D3D11_BLEND_OP BlendOpAlpha;\n    UINT8 RenderTargetWriteMask;\n} D3D11_RENDER_TARGET_BLEND_DESC;\n\ntypedef struct D3D11_BLEND_DESC\n{\n    BOOL AlphaToCoverageEnable;\n    BOOL IndependentBlendEnable;\n    D3D11_RENDER_TARGET_BLEND_DESC RenderTarget[D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT];\n} D3D11_BLEND_DESC;\n\ncpp_quote(\"#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)\")\ncpp_quote(\"struct CD3D11_BLEND_DESC : public D3D11_BLEND_DESC {\")\ncpp_quote(\"    CD3D11_BLEND_DESC() {}\")\ncpp_quote(\"    explicit CD3D11_BLEND_DESC(const D3D11_BLEND_DESC &o) : D3D11_BLEND_DESC(o) {}\")\ncpp_quote(\"    explicit CD3D11_BLEND_DESC(CD3D11_DEFAULT) {\")\ncpp_quote(\"        AlphaToCoverageEnable = FALSE;\")\ncpp_quote(\"        IndependentBlendEnable = FALSE;\")\ncpp_quote(\"        for(D3D11_RENDER_TARGET_BLEND_DESC *target = RenderTarget;\")\ncpp_quote(\"                target < RenderTarget + D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT;\")\ncpp_quote(\"                target++) {\")\ncpp_quote(\"            target->BlendEnable = FALSE;\")\ncpp_quote(\"            target->SrcBlend = target->SrcBlendAlpha = D3D11_BLEND_ONE;\")\ncpp_quote(\"            target->DestBlend = target->DestBlendAlpha = D3D11_BLEND_ZERO;\")\ncpp_quote(\"            target->BlendOp = target->BlendOpAlpha = D3D11_BLEND_OP_ADD;\")\ncpp_quote(\"            target->RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;\")\ncpp_quote(\"        }\")\ncpp_quote(\"    }\")\ncpp_quote(\"    ~CD3D11_BLEND_DESC() {}\")\ncpp_quote(\"    operator const D3D11_BLEND_DESC&() const { return *this; }\")\ncpp_quote(\"};\" )\ncpp_quote(\"#endif\" )\n\ntypedef struct D3D11_BUFFER_DESC\n{\n    UINT ByteWidth;\n    D3D11_USAGE Usage;\n    UINT BindFlags;\n    UINT CPUAccessFlags;\n    UINT MiscFlags;\n    UINT StructureByteStride;\n} D3D11_BUFFER_DESC;\n\ncpp_quote(\"#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)\")\ncpp_quote(\"struct CD3D11_BUFFER_DESC : public D3D11_BUFFER_DESC {\")\ncpp_quote(\"    CD3D11_BUFFER_DESC() {}\" )\ncpp_quote(\"    explicit CD3D11_BUFFER_DESC(const D3D11_BUFFER_DESC &o) : D3D11_BUFFER_DESC(o) {}\")\ncpp_quote(\"    explicit CD3D11_BUFFER_DESC(UINT byteWidth,UINT bindFlags,\")\ncpp_quote(\"            D3D11_USAGE usage = D3D11_USAGE_DEFAULT, UINT cpuaccessFlags = 0,\")\ncpp_quote(\"            UINT miscFlags = 0, UINT structureByteStride = 0 ) {\")\ncpp_quote(\"        ByteWidth = byteWidth;\")\ncpp_quote(\"        Usage = usage;\")\ncpp_quote(\"        BindFlags = bindFlags;\")\ncpp_quote(\"        CPUAccessFlags = cpuaccessFlags;\")\ncpp_quote(\"        MiscFlags = miscFlags;\" )\ncpp_quote(\"        StructureByteStride = structureByteStride;\")\ncpp_quote(\"    }\")\ncpp_quote(\"    ~CD3D11_BUFFER_DESC() {}\")\ncpp_quote(\"    operator const D3D11_BUFFER_DESC&() const { return *this; }\")\ncpp_quote(\"};\" )\ncpp_quote(\"#endif\" )\n\ntypedef struct D3D11_DEPTH_STENCIL_VIEW_DESC\n{\n    DXGI_FORMAT Format;\n    D3D11_DSV_DIMENSION ViewDimension;\n    UINT Flags;\n\n    union\n    {\n        D3D11_TEX1D_DSV Texture1D;\n        D3D11_TEX1D_ARRAY_DSV Texture1DArray;\n        D3D11_TEX2D_DSV Texture2D;\n        D3D11_TEX2D_ARRAY_DSV Texture2DArray;\n        D3D11_TEX2DMS_DSV Texture2DMS;\n        D3D11_TEX2DMS_ARRAY_DSV Texture2DMSArray;\n    };\n} D3D11_DEPTH_STENCIL_VIEW_DESC;\n\ntypedef struct D3D11_DEPTH_STENCILOP_DESC\n{\n    D3D11_STENCIL_OP StencilFailOp;\n    D3D11_STENCIL_OP StencilDepthFailOp;\n    D3D11_STENCIL_OP StencilPassOp;\n    D3D11_COMPARISON_FUNC StencilFunc;\n} D3D11_DEPTH_STENCILOP_DESC;\n\ntypedef struct D3D11_DEPTH_STENCIL_DESC\n{\n    BOOL DepthEnable;\n    D3D11_DEPTH_WRITE_MASK DepthWriteMask;\n    D3D11_COMPARISON_FUNC DepthFunc;\n    BOOL StencilEnable;\n    UINT8 StencilReadMask;\n    UINT8 StencilWriteMask;\n    D3D11_DEPTH_STENCILOP_DESC FrontFace;\n    D3D11_DEPTH_STENCILOP_DESC BackFace;\n} D3D11_DEPTH_STENCIL_DESC;\n\ncpp_quote(\"#if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus )\")\ncpp_quote(\"struct CD3D11_DEPTH_STENCIL_DESC : public D3D11_DEPTH_STENCIL_DESC {\")\ncpp_quote(\"    CD3D11_DEPTH_STENCIL_DESC() {}\")\ncpp_quote(\"    explicit CD3D11_DEPTH_STENCIL_DESC(const D3D11_DEPTH_STENCIL_DESC &other) : D3D11_DEPTH_STENCIL_DESC(other) {}\")\ncpp_quote(\"    explicit CD3D11_DEPTH_STENCIL_DESC(CD3D11_DEFAULT) {\")\ncpp_quote(\"        const D3D11_DEPTH_STENCILOP_DESC default_op =\")\ncpp_quote(\"            {D3D11_STENCIL_OP_KEEP, D3D11_STENCIL_OP_KEEP, D3D11_STENCIL_OP_KEEP, D3D11_COMPARISON_ALWAYS};\")\ncpp_quote(\"        DepthEnable = TRUE;\")\ncpp_quote(\"        DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL;\")\ncpp_quote(\"        DepthFunc = D3D11_COMPARISON_LESS;\")\ncpp_quote(\"        StencilEnable = FALSE;\")\ncpp_quote(\"        StencilReadMask = D3D11_DEFAULT_STENCIL_READ_MASK;\")\ncpp_quote(\"        StencilWriteMask = D3D11_DEFAULT_STENCIL_WRITE_MASK;\")\ncpp_quote(\"        FrontFace = default_op;\")\ncpp_quote(\"        BackFace = default_op;\")\ncpp_quote(\"    }\")\ncpp_quote(\"    explicit CD3D11_DEPTH_STENCIL_DESC(\")\ncpp_quote(\"            BOOL depth_enable,\")\ncpp_quote(\"            D3D11_DEPTH_WRITE_MASK depth_write_mask,\")\ncpp_quote(\"            D3D11_COMPARISON_FUNC depth_func,\")\ncpp_quote(\"            BOOL stencil_enable,\")\ncpp_quote(\"            UINT8 stencil_read_mask,\")\ncpp_quote(\"            UINT8 stencil_write_mask,\")\ncpp_quote(\"            D3D11_STENCIL_OP front_stencil_fail_op,\")\ncpp_quote(\"            D3D11_STENCIL_OP front_stencil_depth_fail_op,\")\ncpp_quote(\"            D3D11_STENCIL_OP front_stencil_pass_op,\")\ncpp_quote(\"            D3D11_COMPARISON_FUNC front_stencil_func,\")\ncpp_quote(\"            D3D11_STENCIL_OP back_stencil_fail_op,\")\ncpp_quote(\"            D3D11_STENCIL_OP back_stencil_depth_fail_op,\")\ncpp_quote(\"            D3D11_STENCIL_OP back_stencil_pass_op,\")\ncpp_quote(\"            D3D11_COMPARISON_FUNC back_stencil_func) {\")\ncpp_quote(\"        DepthEnable = depth_enable;\")\ncpp_quote(\"        DepthWriteMask = depth_write_mask;\")\ncpp_quote(\"        DepthFunc = depth_func;\")\ncpp_quote(\"        StencilEnable = stencil_enable;\")\ncpp_quote(\"        StencilReadMask = stencil_read_mask;\")\ncpp_quote(\"        StencilWriteMask = stencil_write_mask;\")\ncpp_quote(\"        FrontFace.StencilFailOp = front_stencil_fail_op;\")\ncpp_quote(\"        FrontFace.StencilDepthFailOp = front_stencil_depth_fail_op;\")\ncpp_quote(\"        FrontFace.StencilPassOp = front_stencil_pass_op;\")\ncpp_quote(\"        FrontFace.StencilFunc = front_stencil_func;\")\ncpp_quote(\"        BackFace.StencilFailOp = back_stencil_fail_op;\")\ncpp_quote(\"        BackFace.StencilDepthFailOp = back_stencil_depth_fail_op;\")\ncpp_quote(\"        BackFace.StencilPassOp = back_stencil_pass_op;\")\ncpp_quote(\"        BackFace.StencilFunc = back_stencil_func;\")\ncpp_quote(\"    }\")\ncpp_quote(\"    ~CD3D11_DEPTH_STENCIL_DESC() {}\")\ncpp_quote(\"    operator const D3D11_DEPTH_STENCIL_DESC&() const { return *this; }\")\ncpp_quote(\"};\")\ncpp_quote(\"#endif\")\n\ntypedef struct D3D11_RENDER_TARGET_VIEW_DESC\n{\n    DXGI_FORMAT Format;\n    D3D11_RTV_DIMENSION ViewDimension;\n\n    union\n    {\n        D3D11_BUFFER_RTV Buffer;\n        D3D11_TEX1D_RTV Texture1D;\n        D3D11_TEX1D_ARRAY_RTV Texture1DArray;\n        D3D11_TEX2D_RTV Texture2D;\n        D3D11_TEX2D_ARRAY_RTV Texture2DArray;\n        D3D11_TEX2DMS_RTV Texture2DMS;\n        D3D11_TEX2DMS_ARRAY_RTV Texture2DMSArray;\n        D3D11_TEX3D_RTV Texture3D;\n    };\n} D3D11_RENDER_TARGET_VIEW_DESC;\n\ncpp_quote(\"#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)\")\ncpp_quote(\"struct CD3D11_RENDER_TARGET_VIEW_DESC : public D3D11_RENDER_TARGET_VIEW_DESC {\")\ncpp_quote(\"    CD3D11_RENDER_TARGET_VIEW_DESC() {}\")\ncpp_quote(\"    explicit CD3D11_RENDER_TARGET_VIEW_DESC(D3D11_RTV_DIMENSION dim, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,\")\ncpp_quote(\"            UINT mip_slice = 0, UINT first_slice = 0, UINT array_size = -1) {\")\ncpp_quote(\"        Format = format;\")\ncpp_quote(\"        ViewDimension = dim;\")\ncpp_quote(\"        switch(dim) {\")\ncpp_quote(\"        case D3D11_RTV_DIMENSION_BUFFER:\")\ncpp_quote(\"            Buffer.FirstElement = mip_slice;\")\ncpp_quote(\"            Buffer.NumElements = first_slice;\")\ncpp_quote(\"            break;\")\ncpp_quote(\"        case D3D11_RTV_DIMENSION_TEXTURE1D:\")\ncpp_quote(\"            Texture1D.MipSlice = mip_slice;\")\ncpp_quote(\"            break;\")\ncpp_quote(\"        case D3D11_RTV_DIMENSION_TEXTURE1DARRAY:\")\ncpp_quote(\"            Texture1DArray.MipSlice = mip_slice;\")\ncpp_quote(\"            Texture1DArray.FirstArraySlice = first_slice;\")\ncpp_quote(\"            Texture1DArray.ArraySize = array_size;\")\ncpp_quote(\"            break;\")\ncpp_quote(\"        case D3D11_RTV_DIMENSION_TEXTURE2D:\")\ncpp_quote(\"            Texture2D.MipSlice = mip_slice;\")\ncpp_quote(\"            break;\")\ncpp_quote(\"        case D3D11_RTV_DIMENSION_TEXTURE2DARRAY:\")\ncpp_quote(\"            Texture2DArray.MipSlice = mip_slice;\")\ncpp_quote(\"            Texture2DArray.FirstArraySlice = first_slice;\")\ncpp_quote(\"            Texture2DArray.ArraySize = array_size;\")\ncpp_quote(\"            break;\")\ncpp_quote(\"        case D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY:\")\ncpp_quote(\"            Texture2DMSArray.FirstArraySlice = first_slice;\")\ncpp_quote(\"            Texture2DMSArray.ArraySize = array_size;\")\ncpp_quote(\"            break;\")\ncpp_quote(\"        case D3D11_RTV_DIMENSION_TEXTURE3D:\")\ncpp_quote(\"            Texture3D.MipSlice = mip_slice;\")\ncpp_quote(\"            Texture3D.FirstWSlice = first_slice;\")\ncpp_quote(\"            Texture3D.WSize = array_size;\")\ncpp_quote(\"            break;\")\ncpp_quote(\"        default:\")\ncpp_quote(\"            break;\")\ncpp_quote(\"        }\")\ncpp_quote(\"    }\")\ncpp_quote(\"    explicit CD3D11_RENDER_TARGET_VIEW_DESC(ID3D11Buffer*, DXGI_FORMAT format, UINT first_elem,\")\ncpp_quote(\"            UINT elem_cnt) {\")\ncpp_quote(\"        Format = format;\")\ncpp_quote(\"        ViewDimension = D3D11_RTV_DIMENSION_BUFFER;\")\ncpp_quote(\"        Buffer.FirstElement = first_elem;\")\ncpp_quote(\"        Buffer.NumElements = elem_cnt;\")\ncpp_quote(\"    }\")\ncpp_quote(\"    explicit CD3D11_RENDER_TARGET_VIEW_DESC(ID3D11Texture1D *texture, D3D11_RTV_DIMENSION dim,\")\ncpp_quote(\"            DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mip_slice = 0, UINT first_slice = 0,\")\ncpp_quote(\"            UINT array_size = -1);\") /* FIXME: implement */\ncpp_quote(\"    explicit CD3D11_RENDER_TARGET_VIEW_DESC(ID3D11Texture2D *texture, D3D11_RTV_DIMENSION dim,\")\ncpp_quote(\"            DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mip_slice = 0, UINT first_slice = 0,\")\ncpp_quote(\"            UINT array_size = -1);\") /* FIXME: implement */\ncpp_quote(\"    explicit CD3D11_RENDER_TARGET_VIEW_DESC(ID3D11Texture3D *texture, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,\")\ncpp_quote(\"            UINT mip_slice = 0, UINT first_w_slice = 0, UINT w_slice = -1 );\") /* FIXME: implement */\ncpp_quote(\"    ~CD3D11_RENDER_TARGET_VIEW_DESC() {}\")\ncpp_quote(\"    explicit CD3D11_RENDER_TARGET_VIEW_DESC(const D3D11_RENDER_TARGET_VIEW_DESC &other)\")\ncpp_quote(\"        : D3D11_RENDER_TARGET_VIEW_DESC(other) {}\")\ncpp_quote(\"    operator const D3D11_RENDER_TARGET_VIEW_DESC&() const {\")\ncpp_quote(\"        return *this;\")\ncpp_quote(\"    }\")\ncpp_quote(\"};\")\ncpp_quote(\"#endif\")\n\n\ntypedef struct D3D11_SAMPLER_DESC\n{\n    D3D11_FILTER Filter;\n    D3D11_TEXTURE_ADDRESS_MODE AddressU;\n    D3D11_TEXTURE_ADDRESS_MODE AddressV;\n    D3D11_TEXTURE_ADDRESS_MODE AddressW;\n    FLOAT MipLODBias;\n    UINT MaxAnisotropy;\n    D3D11_COMPARISON_FUNC ComparisonFunc;\n    FLOAT BorderColor[4];\n    FLOAT MinLOD;\n    FLOAT MaxLOD;\n} D3D11_SAMPLER_DESC;\n\ncpp_quote(\"#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)\")\ncpp_quote(\"struct CD3D11_SAMPLER_DESC : public D3D11_SAMPLER_DESC {\")\ncpp_quote(\"    CD3D11_SAMPLER_DESC() {}\")\ncpp_quote(\"    explicit CD3D11_SAMPLER_DESC(const D3D11_SAMPLER_DESC &o) : D3D11_SAMPLER_DESC(o) {}\")\ncpp_quote(\"    explicit CD3D11_SAMPLER_DESC(CD3D11_DEFAULT) {\" )\ncpp_quote(\"        Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;\")\ncpp_quote(\"        AddressU = D3D11_TEXTURE_ADDRESS_CLAMP;\")\ncpp_quote(\"        AddressV = D3D11_TEXTURE_ADDRESS_CLAMP;\")\ncpp_quote(\"        AddressW = D3D11_TEXTURE_ADDRESS_CLAMP;\")\ncpp_quote(\"        MipLODBias = 0;\")\ncpp_quote(\"        MaxAnisotropy = 1;\")\ncpp_quote(\"        ComparisonFunc = D3D11_COMPARISON_NEVER;\")\ncpp_quote(\"        BorderColor[0] = BorderColor[1] = BorderColor[2] = BorderColor[3] = 1.0f;\")\ncpp_quote(\"        MinLOD = -3.402823466e+38f;\")\ncpp_quote(\"        MaxLOD = 3.402823466e+38f;\")\ncpp_quote(\"    }\")\ncpp_quote(\"    explicit CD3D11_SAMPLER_DESC(D3D11_FILTER filter, D3D11_TEXTURE_ADDRESS_MODE addressU,\")\ncpp_quote(\"            D3D11_TEXTURE_ADDRESS_MODE addressV, D3D11_TEXTURE_ADDRESS_MODE addressW,\")\ncpp_quote(\"            FLOAT mipLODBias, UINT maxAnisotropy, D3D11_COMPARISON_FUNC comparisonFunc,\")\ncpp_quote(\"            const FLOAT *borderColor, FLOAT minLOD, FLOAT maxLOD) {\" )\ncpp_quote(\"        Filter = filter;\")\ncpp_quote(\"        AddressU = addressU;\")\ncpp_quote(\"        AddressV = addressV;\")\ncpp_quote(\"        AddressW = addressW;\")\ncpp_quote(\"        MipLODBias = mipLODBias;\")\ncpp_quote(\"        MaxAnisotropy = maxAnisotropy;\")\ncpp_quote(\"        ComparisonFunc = comparisonFunc;\")\ncpp_quote(\"        if(borderColor) {\")\ncpp_quote(\"            BorderColor[0] = borderColor[0];\")\ncpp_quote(\"            BorderColor[1] = borderColor[1];\")\ncpp_quote(\"            BorderColor[2] = borderColor[2];\")\ncpp_quote(\"            BorderColor[3] = borderColor[3];\")\ncpp_quote(\"        }else {\")\ncpp_quote(\"            BorderColor[0] = BorderColor[1] = BorderColor[2] = BorderColor[3] = 1.0f;\")\ncpp_quote(\"        }\")\ncpp_quote(\"        MinLOD = minLOD;\")\ncpp_quote(\"        MaxLOD = maxLOD;\")\ncpp_quote(\"    }\")\ncpp_quote(\"    ~CD3D11_SAMPLER_DESC() {}\")\ncpp_quote(\"    operator const D3D11_SAMPLER_DESC&() const { return *this; }\")\ncpp_quote(\"};\")\ncpp_quote(\"#endif\")\n\ntypedef struct D3D11_SHADER_RESOURCE_VIEW_DESC\n{\n    DXGI_FORMAT Format;\n    D3D11_SRV_DIMENSION ViewDimension;\n\n    union\n    {\n        D3D11_BUFFER_SRV Buffer;\n        D3D11_TEX1D_SRV Texture1D;\n        D3D11_TEX1D_ARRAY_SRV Texture1DArray;\n        D3D11_TEX2D_SRV Texture2D;\n        D3D11_TEX2D_ARRAY_SRV Texture2DArray;\n        D3D11_TEX2DMS_SRV Texture2DMS;\n        D3D11_TEX2DMS_ARRAY_SRV Texture2DMSArray;\n        D3D11_TEX3D_SRV Texture3D;\n        D3D11_TEXCUBE_SRV TextureCube;\n        D3D11_TEXCUBE_ARRAY_SRV TextureCubeArray;\n        D3D11_BUFFEREX_SRV BufferEx;\n    };\n} D3D11_SHADER_RESOURCE_VIEW_DESC;\n\ncpp_quote(\"#if !defined(D3D11_NO_HELPERS) && defined( __cplusplus )\")\ncpp_quote(\"struct CD3D11_SHADER_RESOURCE_VIEW_DESC : public D3D11_SHADER_RESOURCE_VIEW_DESC {\")\ncpp_quote(\"    CD3D11_SHADER_RESOURCE_VIEW_DESC() {}\")\ncpp_quote(\"    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(D3D11_SRV_DIMENSION dim,\")\ncpp_quote(\"            DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT most_detailed_mip = 0,\")\ncpp_quote(\"            UINT mip_levels = -1, UINT first_slice = 0, UINT array_size = -1, UINT flags = 0) {\")\ncpp_quote(\"        Format = format;\")\ncpp_quote(\"        ViewDimension = dim;\")\ncpp_quote(\"        switch(ViewDimension) {\")\ncpp_quote(\"        case D3D11_SRV_DIMENSION_BUFFER:\")\ncpp_quote(\"            Buffer.FirstElement = most_detailed_mip;\")\ncpp_quote(\"            Buffer.NumElements = mip_levels;\")\ncpp_quote(\"            break;\")\ncpp_quote(\"        case D3D11_SRV_DIMENSION_TEXTURE1D:\")\ncpp_quote(\"            Texture1D.MostDetailedMip = most_detailed_mip;\")\ncpp_quote(\"            Texture1D.MipLevels = mip_levels;\")\ncpp_quote(\"            break;\")\ncpp_quote(\"        case D3D11_SRV_DIMENSION_TEXTURE1DARRAY:\")\ncpp_quote(\"            Texture1DArray.MostDetailedMip = most_detailed_mip;\")\ncpp_quote(\"            Texture1DArray.MipLevels = mip_levels;\")\ncpp_quote(\"            Texture1DArray.FirstArraySlice = first_slice;\")\ncpp_quote(\"            Texture1DArray.ArraySize = array_size;\")\ncpp_quote(\"            break;\")\ncpp_quote(\"        case D3D11_SRV_DIMENSION_TEXTURE2D:\")\ncpp_quote(\"            Texture2D.MostDetailedMip = most_detailed_mip;\")\ncpp_quote(\"            Texture2D.MipLevels = mip_levels;\")\ncpp_quote(\"            break;\")\ncpp_quote(\"        case D3D11_SRV_DIMENSION_TEXTURE2DARRAY:\")\ncpp_quote(\"            Texture2DArray.MostDetailedMip = most_detailed_mip;\")\ncpp_quote(\"            Texture2DArray.MipLevels = mip_levels;\")\ncpp_quote(\"            Texture2DArray.FirstArraySlice = first_slice;\")\ncpp_quote(\"            Texture2DArray.ArraySize = array_size;\")\ncpp_quote(\"            break;\")\ncpp_quote(\"        case D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY:\")\ncpp_quote(\"            Texture2DMSArray.FirstArraySlice = first_slice;\")\ncpp_quote(\"            Texture2DMSArray.ArraySize = array_size;\")\ncpp_quote(\"            break;\")\ncpp_quote(\"        case D3D11_SRV_DIMENSION_TEXTURE3D:\")\ncpp_quote(\"            Texture3D.MostDetailedMip = most_detailed_mip;\")\ncpp_quote(\"            Texture3D.MipLevels = mip_levels;\")\ncpp_quote(\"            break;\")\ncpp_quote(\"        case D3D11_SRV_DIMENSION_TEXTURECUBE:\")\ncpp_quote(\"            TextureCube.MostDetailedMip = most_detailed_mip;\")\ncpp_quote(\"            TextureCube.MipLevels = mip_levels;\")\ncpp_quote(\"            break;\")\ncpp_quote(\"        case D3D11_SRV_DIMENSION_TEXTURECUBEARRAY:\")\ncpp_quote(\"            TextureCubeArray.MostDetailedMip = most_detailed_mip;\")\ncpp_quote(\"            TextureCubeArray.MipLevels = mip_levels;\")\ncpp_quote(\"            TextureCubeArray.First2DArrayFace = first_slice;\")\ncpp_quote(\"            TextureCubeArray.NumCubes = array_size;\")\ncpp_quote(\"            break;\")\ncpp_quote(\"        case D3D11_SRV_DIMENSION_BUFFEREX:\")\ncpp_quote(\"            BufferEx.FirstElement = most_detailed_mip;\")\ncpp_quote(\"            BufferEx.NumElements = mip_levels;\")\ncpp_quote(\"            BufferEx.Flags = flags;\")\ncpp_quote(\"            break;\")\ncpp_quote(\"        default:\")\ncpp_quote(\"            break;\")\ncpp_quote(\"        }\")\ncpp_quote(\"    }\")\ncpp_quote(\"    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(ID3D11Buffer*, DXGI_FORMAT format, UINT first_elem,\")\ncpp_quote(\"            UINT elem_cnt, UINT flags = 0);\") /* FIXME: implement */\ncpp_quote(\"    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(ID3D11Texture1D *texture, D3D11_SRV_DIMENSION dim,\")\ncpp_quote(\"            DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT most_detailed_mip = 0, UINT mip_levels = -1,\")\ncpp_quote(\"            UINT first_slice = 0, UINT array_size = -1 );\") /* FIXME: implement */\ncpp_quote(\"    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(ID3D11Texture2D *texture, D3D11_SRV_DIMENSION dim,\")\ncpp_quote(\"            DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT most_detailed_mip = 0, UINT mip_levels = -1,\")\ncpp_quote(\"            UINT first_slice = 0, UINT array_size = -1 );\") /* FIXME: implement */\ncpp_quote(\"    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(ID3D11Texture3D *texture, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,\")\ncpp_quote(\"            UINT most_detailed_mip = 0, UINT mip_levels = -1 );\")\ncpp_quote(\"    ~CD3D11_SHADER_RESOURCE_VIEW_DESC() {}\")\ncpp_quote(\"    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(const D3D11_SHADER_RESOURCE_VIEW_DESC &other)\")\ncpp_quote(\"        : D3D11_SHADER_RESOURCE_VIEW_DESC(other) {}\")\ncpp_quote(\"    operator const D3D11_SHADER_RESOURCE_VIEW_DESC&() const {\")\ncpp_quote(\"        return *this;\")\ncpp_quote(\"    }\")\ncpp_quote(\"};\")\ncpp_quote(\"#endif\")\n\ntypedef struct D3D11_TEXTURE1D_DESC\n{\n    UINT Width;\n    UINT MipLevels;\n    UINT ArraySize;\n    DXGI_FORMAT Format;\n    D3D11_USAGE Usage;\n    UINT BindFlags;\n    UINT CPUAccessFlags;\n    UINT MiscFlags;\n} D3D11_TEXTURE1D_DESC;\n\ntypedef struct D3D11_TEXTURE2D_DESC\n{\n    UINT Width;\n    UINT Height;\n    UINT MipLevels;\n    UINT ArraySize;\n    DXGI_FORMAT Format;\n    DXGI_SAMPLE_DESC SampleDesc;\n    D3D11_USAGE Usage;\n    UINT BindFlags;\n    UINT CPUAccessFlags;\n    UINT MiscFlags;\n} D3D11_TEXTURE2D_DESC;\n\ncpp_quote(\"#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)\")\ncpp_quote(\"struct CD3D11_TEXTURE2D_DESC : public D3D11_TEXTURE2D_DESC {\")\ncpp_quote(\"    CD3D11_TEXTURE2D_DESC() {}\")\ncpp_quote(\"    explicit CD3D11_TEXTURE2D_DESC(const D3D11_TEXTURE2D_DESC &o) : D3D11_TEXTURE2D_DESC(o) {}\")\ncpp_quote(\"    explicit CD3D11_TEXTURE2D_DESC(DXGI_FORMAT format, UINT width, UINT height, UINT arraySize = 1,\")\ncpp_quote(\"            UINT mipLevels = 0, UINT bindFlags = D3D11_BIND_SHADER_RESOURCE,\")\ncpp_quote(\"            D3D11_USAGE usage = D3D11_USAGE_DEFAULT, UINT cpuaccessFlags = 0, UINT sampleCount = 1,\" )\ncpp_quote(\"            UINT sampleQuality = 0, UINT miscFlags = 0) {\")\ncpp_quote(\"        Width = width;\")\ncpp_quote(\"        Height = height;\")\ncpp_quote(\"        MipLevels = mipLevels;\")\ncpp_quote(\"        ArraySize = arraySize;\")\ncpp_quote(\"        Format = format;\")\ncpp_quote(\"        SampleDesc.Count = sampleCount;\")\ncpp_quote(\"        SampleDesc.Quality = sampleQuality;\")\ncpp_quote(\"        Usage = usage;\")\ncpp_quote(\"        BindFlags = bindFlags;\")\ncpp_quote(\"        CPUAccessFlags = cpuaccessFlags;\")\ncpp_quote(\"        MiscFlags = miscFlags;\")\ncpp_quote(\"    }\" )\ncpp_quote(\"    ~CD3D11_TEXTURE2D_DESC() {}\")\ncpp_quote(\"    operator const D3D11_TEXTURE2D_DESC&() const { return *this; }\")\ncpp_quote(\"};\")\ncpp_quote(\"#endif\")\n\ntypedef struct D3D11_TEXTURE3D_DESC\n{\n    UINT Width;\n    UINT Height;\n    UINT Depth;\n    UINT MipLevels;\n    DXGI_FORMAT Format;\n    D3D11_USAGE Usage;\n    UINT BindFlags;\n    UINT CPUAccessFlags;\n    UINT MiscFlags;\n} D3D11_TEXTURE3D_DESC;\n\ntypedef struct D3D11_VIDEO_DECODER_DESC\n{\n    GUID Guid;\n    UINT SampleWidth;\n    UINT SampleHeight;\n    DXGI_FORMAT OutputFormat;\n} D3D11_VIDEO_DECODER_DESC;\n\ntypedef struct D3D11_VIDEO_DECODER_CONFIG\n{\n    GUID guidConfigBitstreamEncryption;\n    GUID guidConfigMBcontrolEncryption;\n    GUID guidConfigResidDiffEncryption;\n    UINT ConfigBitstreamRaw;\n    UINT ConfigMBcontrolRasterOrder;\n    UINT ConfigResidDiffHost;\n    UINT ConfigSpatialResid8;\n    UINT ConfigResid8Subtraction;\n    UINT ConfigSpatialHost8or9Clipping;\n    UINT ConfigSpatialResidInterleaved;\n    UINT ConfigIntraResidUnsigned;\n    UINT ConfigResidDiffAccelerator;\n    UINT ConfigHostInverseScan;\n    UINT ConfigSpecificIDCT;\n    UINT Config4GroupedCoefs;\n    USHORT ConfigMinRenderTargetBuffCount;\n    USHORT ConfigDecoderSpecific;\n} D3D11_VIDEO_DECODER_CONFIG;\n\ntypedef enum D3D11_VIDEO_FRAME_FORMAT\n{\n    D3D11_VIDEO_FRAME_FORMAT_PROGRESSIVE                   = 0,\n    D3D11_VIDEO_FRAME_FORMAT_INTERLACED_TOP_FIELD_FIRST    = 1,\n    D3D11_VIDEO_FRAME_FORMAT_INTERLACED_BOTTOM_FIELD_FIRST = 2\n} D3D11_VIDEO_FRAME_FORMAT;\n\ntypedef enum D3D11_VIDEO_USAGE\n{\n    D3D11_VIDEO_USAGE_PLAYBACK_NORMAL = 0,\n    D3D11_VIDEO_USAGE_OPTIMAL_SPEED   = 1,\n    D3D11_VIDEO_USAGE_OPTIMAL_QUALITY = 2\n} D3D11_VIDEO_USAGE;\n\ntypedef struct D3D11_VIDEO_PROCESSOR_CONTENT_DESC\n{\n    D3D11_VIDEO_FRAME_FORMAT InputFrameFormat;\n    DXGI_RATIONAL InputFrameRate;\n    UINT InputWidth;\n    UINT InputHeight;\n    DXGI_RATIONAL OutputFrameRate;\n    UINT OutputWidth;\n    UINT OutputHeight;\n    D3D11_VIDEO_USAGE Usage;\n} D3D11_VIDEO_PROCESSOR_CONTENT_DESC;\n\ntypedef struct D3D11_VIDEO_PROCESSOR_CAPS\n{\n    UINT DeviceCaps;\n    UINT FeatureCaps;\n    UINT FilterCaps;\n    UINT InputFormatCaps;\n    UINT AutoStreamCaps;\n    UINT StereoCaps;\n    UINT RateConversionCapsCount;\n    UINT MaxInputStreams;\n    UINT MaxStreamStates;\n} D3D11_VIDEO_PROCESSOR_CAPS;\n\ntypedef struct D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS\n{\n    UINT PastFrames;\n    UINT FutureFrames;\n    UINT ProcessorCaps;\n    UINT ITelecineCaps;\n    UINT CustomRateCount;\n} D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS;\n\ntypedef struct D3D11_VIDEO_PROCESSOR_CUSTOM_RATE\n{\n    DXGI_RATIONAL CustomRate;\n    UINT OutputFrames;\n    BOOL InputInterlaced;\n    UINT InputFramesOrFields;\n} D3D11_VIDEO_PROCESSOR_CUSTOM_RATE;\n\ntypedef enum D3D11_VIDEO_PROCESSOR_FILTER\n{\n    D3D11_VIDEO_PROCESSOR_FILTER_BRIGHTNESS         = 0,\n    D3D11_VIDEO_PROCESSOR_FILTER_CONTRAST           = 1,\n    D3D11_VIDEO_PROCESSOR_FILTER_HUE                = 2,\n    D3D11_VIDEO_PROCESSOR_FILTER_SATURATION         = 3,\n    D3D11_VIDEO_PROCESSOR_FILTER_NOISE_REDUCTION    = 4,\n    D3D11_VIDEO_PROCESSOR_FILTER_EDGE_ENHANCEMENT   = 5,\n    D3D11_VIDEO_PROCESSOR_FILTER_ANAMORPHIC_SCALING = 6,\n    D3D11_VIDEO_PROCESSOR_FILTER_STEREO_ADJUSTMENT  = 7\n} D3D11_VIDEO_PROCESSOR_FILTER;\n\ntypedef struct D3D11_VIDEO_PROCESSOR_FILTER_RANGE\n{\n    int Minimum;\n    int Maximum;\n    int Default;\n    float Multiplier;\n} D3D11_VIDEO_PROCESSOR_FILTER_RANGE;\n\ntypedef enum D3D11_AUTHENTICATED_CHANNEL_TYPE\n{\n    D3D11_AUTHENTICATED_CHANNEL_D3D11           = 1,\n    D3D11_AUTHENTICATED_CHANNEL_DRIVER_SOFTWARE = 2,\n    D3D11_AUTHENTICATED_CHANNEL_DRIVER_HARDWARE = 3\n} D3D11_AUTHENTICATED_CHANNEL_TYPE;\n\ntypedef enum D3D11_VDOV_DIMENSION\n{\n    D3D11_VDOV_DIMENSION_UNKNOWN   = 0,\n    D3D11_VDOV_DIMENSION_TEXTURE2D = 1\n} D3D11_VDOV_DIMENSION;\n\ntypedef struct D3D11_TEX2D_VDOV\n{\n    UINT ArraySlice;\n} D3D11_TEX2D_VDOV;\n\ntypedef struct D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC\n{\n    GUID DecodeProfile;\n    D3D11_VDOV_DIMENSION ViewDimension;\n    union {\n        D3D11_TEX2D_VDOV Texture2D;\n    };\n} D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC;\n\ntypedef enum D3D11_VPIV_DIMENSION\n{\n    D3D11_VPIV_DIMENSION_UNKNOWN   = 0,\n    D3D11_VPIV_DIMENSION_TEXTURE2D = 1\n} D3D11_VPIV_DIMENSION;\n\ntypedef struct D3D11_TEX2D_VPIV\n{\n    UINT MipSlice;\n    UINT ArraySlice;\n} D3D11_TEX2D_VPIV;\n\ntypedef struct D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC\n{\n    UINT FourCC;\n    D3D11_VPIV_DIMENSION ViewDimension;\n    union {\n        D3D11_TEX2D_VPIV Texture2D;\n    };\n} D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC;\n\ntypedef enum D3D11_VPOV_DIMENSION\n{\n    D3D11_VPOV_DIMENSION_UNKNOWN        = 0,\n    D3D11_VPOV_DIMENSION_TEXTURE2D      = 1,\n    D3D11_VPOV_DIMENSION_TEXTURE2DARRAY = 2\n} D3D11_VPOV_DIMENSION;\n\ntypedef struct D3D11_TEX2D_VPOV\n{\n    UINT MipSlice;\n} D3D11_TEX2D_VPOV;\n\ntypedef struct D3D11_TEX2D_ARRAY_VPOV\n{\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D11_TEX2D_ARRAY_VPOV;\n\ntypedef struct D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC\n{\n    D3D11_VPOV_DIMENSION ViewDimension;\n    union {\n        D3D11_TEX2D_VPOV Texture2D;\n        D3D11_TEX2D_ARRAY_VPOV Texture2DArray;\n    };\n} D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC;\n\ntypedef struct D3D11_VIDEO_CONTENT_PROTECTION_CAPS\n{\n    UINT Caps;\n    UINT KeyExchangeTypeCount;\n    UINT BlockAlignmentSize;\n    ULONGLONG ProtectedMemorySize;\n} D3D11_VIDEO_CONTENT_PROTECTION_CAPS;\n\ntypedef struct D3D11_ENCRYPTED_BLOCK_INFO\n{\n    UINT NumEncryptedBytesAtBeginning;\n    UINT NumBytesInSkipPattern;\n    UINT NumBytesInEncryptPattern;\n} D3D11_ENCRYPTED_BLOCK_INFO;\n\ntypedef struct D3D11_VIDEO_DECODER_BUFFER_DESC\n{\n    D3D11_VIDEO_DECODER_BUFFER_TYPE BufferType;\n    UINT BufferIndex;\n    UINT DataOffset;\n    UINT DataSize;\n    UINT FirstMBaddress;\n    UINT NumMBsInBuffer;\n    UINT Width;\n    UINT Height;\n    UINT Stride;\n    UINT ReservedBits;\n    void *pIV;\n    UINT IVSize;\n    BOOL PartialEncryption;\n    D3D11_ENCRYPTED_BLOCK_INFO EncryptedBlockInfo;\n} D3D11_VIDEO_DECODER_BUFFER_DESC;\n\ntypedef struct D3D11_VIDEO_DECODER_EXTENSION\n{\n    UINT Function;\n    void *pPrivateInputData;\n    UINT PrivateInputDataSize;\n    void *pPrivateOutputData;\n    UINT PrivateOutputDataSize;\n    UINT ResourceCount;\n    ID3D11Resource **ppResourceList;\n} D3D11_VIDEO_DECODER_EXTENSION;\n\ntypedef struct D3D11_VIDEO_COLOR_YCbCrA\n{\n    float Y;\n    float Cb;\n    float Cr;\n    float A;\n} D3D11_VIDEO_COLOR_YCbCrA;\n\ntypedef struct D3D11_VIDEO_COLOR_RGBA\n{\n    float R;\n    float G;\n    float B;\n    float A;\n} D3D11_VIDEO_COLOR_RGBA;\n\ntypedef struct D3D11_VIDEO_COLOR\n{\n    union\n    {\n        D3D11_VIDEO_COLOR_YCbCrA YCbCr;\n        D3D11_VIDEO_COLOR_RGBA RGBA;\n    };\n} D3D11_VIDEO_COLOR;\n\ntypedef struct D3D11_VIDEO_PROCESSOR_COLOR_SPACE\n{\n    UINT Usage : 1;\n    UINT RGB_Range : 1;\n    UINT YCbCr_Matrix : 1;\n    UINT YCbCr_xvYCC : 1;\n    UINT Nominal_Range : 2;\n    UINT Reserved : 26;\n} D3D11_VIDEO_PROCESSOR_COLOR_SPACE;\n\ntypedef struct D3D11_VIDEO_PROCESSOR_STREAM\n{\n    BOOL Enable;\n    UINT OutputIndex;\n    UINT InputFrameOrField;\n    UINT PastFrames;\n    UINT FutureFrames;\n    ID3D11VideoProcessorInputView **ppPastSurfaces;\n    ID3D11VideoProcessorInputView *pInputSurface;\n    ID3D11VideoProcessorInputView **ppFutureSurfaces;\n    ID3D11VideoProcessorInputView **ppPastSurfacesRight;\n    ID3D11VideoProcessorInputView *pInputSurfaceRight;\n    ID3D11VideoProcessorInputView **ppFutureSurfacesRight;\n} D3D11_VIDEO_PROCESSOR_STREAM;\n\ntypedef struct D3D11_OMAC\n{\n      BYTE Omac[D3D11_OMAC_SIZE];\n} D3D11_OMAC;\n\ntypedef struct D3D11_AUTHENTICATED_CONFIGURE_OUTPUT\n{\n    D3D11_OMAC omac;\n    GUID ConfigureType;\n    HANDLE hChannel;\n    UINT SequenceNumber;\n    HRESULT ReturnCode;\n} D3D11_AUTHENTICATED_CONFIGURE_OUTPUT;\n\ntypedef struct D3D11_QUERY_DATA_TIMESTAMP_DISJOINT\n{\n    UINT64 Frequency;\n    BOOL Disjoint;\n} D3D11_QUERY_DATA_TIMESTAMP_DISJOINT;\n\ntypedef struct D3D11_QUERY_DATA_PIPELINE_STATISTICS\n{\n    UINT64 IAVertices;\n    UINT64 IAPrimitives;\n    UINT64 VSInvocations;\n    UINT64 GSInvocations;\n    UINT64 GSPrimitives;\n    UINT64 CInvocations;\n    UINT64 CPrimitives;\n    UINT64 PSInvocations;\n    UINT64 HSInvocations;\n    UINT64 DSInvocations;\n    UINT64 CSInvocations;\n} D3D11_QUERY_DATA_PIPELINE_STATISTICS;\n\ntypedef struct D3D11_DRAW_INSTANCED_INDIRECT_ARGS\n{\n    UINT VertexCountPerInstance;\n    UINT InstanceCount;\n    UINT StartVertexLocation;\n    UINT StartInstanceLocation;\n} D3D11_DRAW_INSTANCED_INDIRECT_ARGS;\n\ntypedef struct D3D11_DRAW_INDEXED_INSTANCED_INDIRECT_ARGS\n{\n    UINT IndexCountPerInstance;\n    UINT InstanceCount;\n    UINT StartIndexLocation;\n    INT BaseVertexLocation;\n    UINT StartInstanceLocation;\n} D3D11_DRAW_INDEXED_INSTANCED_INDIRECT_ARGS;\n\ntypedef struct D3D11_AUTHENTICATED_CONFIGURE_INPUT\n{\n    D3D11_OMAC omac;\n    GUID ConfigureType;\n    HANDLE hChannel;\n    UINT SequenceNumber;\n} D3D11_AUTHENTICATED_CONFIGURE_INPUT;\n\ntypedef struct D3D11_AUTHENTICATED_QUERY_INPUT\n{\n    GUID QueryType;\n    HANDLE hChannel;\n    UINT SequenceNumber;\n} D3D11_AUTHENTICATED_QUERY_INPUT;\n\ntypedef struct D3D11_AUTHENTICATED_QUERY_OUTPUT\n{\n    D3D11_OMAC omac;\n    GUID QueryType;\n    HANDLE hChannel;\n    UINT SequenceNumber;\n    HRESULT ReturnCode;\n} D3D11_AUTHENTICATED_QUERY_OUTPUT;\n\ntypedef union D3D11_AUTHENTICATED_PROTECTION_FLAGS\n{\n    struct\n    {\n        UINT ProtectionEnabled              : 1;\n        UINT OverlayOrFullscreenRequired    : 1;\n        UINT Reserved                       : 30;\n    } Flags;\n    UINT Value;\n} D3D11_AUTHENTICATED_PROTECTION_FLAGS;\n\ntypedef struct D3D11_AUTHENTICATED_QUERY_PROTECTION_OUTPUT\n{\n    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;\n    D3D11_AUTHENTICATED_PROTECTION_FLAGS ProtectionFlags;\n} D3D11_AUTHENTICATED_QUERY_PROTECTION_OUTPUT;\n\ntypedef struct D3D11_AUTHENTICATED_QUERY_CHANNEL_TYPE_OUTPUT\n{\n    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;\n    D3D11_AUTHENTICATED_CHANNEL_TYPE ChannelType;\n} D3D11_AUTHENTICATED_QUERY_CHANNEL_TYPE_OUTPUT;\n\ntypedef struct D3D11_AUTHENTICATED_QUERY_DEVICE_HANDLE_OUTPUT\n{\n    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;\n    HANDLE DeviceHandle;\n} D3D11_AUTHENTICATED_QUERY_DEVICE_HANDLE_OUTPUT;\n\ntypedef struct D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION_INPUT\n{\n    D3D11_AUTHENTICATED_QUERY_INPUT Input;\n    HANDLE DecoderHandle;\n} D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION_INPUT;\n\ntypedef struct D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION_OUTPUT\n{\n    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;\n    HANDLE DecoderHandle;\n    HANDLE CryptoSessionHandle;\n    HANDLE DeviceHandle;\n} D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION_OUTPUT;\n\ntypedef struct D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_COUNT_OUTPUT\n{\n    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;\n    UINT RestrictedSharedResourceProcessCount;\n} D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_COUNT_OUTPUT;\n\ntypedef struct D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_INPUT\n{\n    D3D11_AUTHENTICATED_QUERY_INPUT Input;\n    UINT ProcessIndex;\n} D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_INPUT;\n\ntypedef struct D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_OUTPUT\n{\n    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;\n    UINT ProcessIndex;\n    D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE ProcessIdentifier;\n    HANDLE ProcessHandle;\n} D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_OUTPUT;\n\ntypedef struct D3D11_AUTHENTICATED_QUERY_UNRESTRICTED_PROTECTED_SHARED_RESOURCE_COUNT_OUTPUT\n{\n    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;\n    UINT UnrestrictedProtectedSharedResourceCount;\n} D3D11_AUTHENTICATED_QUERY_UNRESTRICTED_PROTECTED_SHARED_RESOURCE_COUNT_OUTPUT;\n\ntypedef struct D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT_INPUT\n{\n    D3D11_AUTHENTICATED_QUERY_INPUT Input;\n    HANDLE DeviceHandle;\n    HANDLE CryptoSessionHandle;\n} D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT_INPUT;\n\ntypedef struct D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT_OUTPUT\n{\n    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;\n    HANDLE DeviceHandle;\n    HANDLE CryptoSessionHandle;\n    UINT OutputIDCount;\n} D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT_OUTPUT;\n\ntypedef struct D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_INPUT\n{\n    D3D11_AUTHENTICATED_QUERY_INPUT Input;\n    HANDLE DeviceHandle;\n    HANDLE CryptoSessionHandle;\n    UINT OutputIDIndex;\n} D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_INPUT;\n\ntypedef struct D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_OUTPUT\n{\n    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;\n    HANDLE DeviceHandle;\n    HANDLE CryptoSessionHandle;\n    UINT OutputIDIndex;\n    UINT64 OutputID;\n} D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_OUTPUT;\n\ntypedef struct D3D11_AUTHENTICATED_QUERY_ACESSIBILITY_OUTPUT\n{\n    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;\n    D3D11_BUS_TYPE BusType;\n    BOOL AccessibleInContiguousBlocks;\n    BOOL AccessibleInNonContiguousBlocks;\n} D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_OUTPUT;\n\ntypedef struct D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_COUNT_OUTPUT\n{\n    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;\n    UINT EncryptionGuidCount;\n} D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_COUNT_OUTPUT;\n\ntypedef struct D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_INPUT\n{\n    D3D11_AUTHENTICATED_QUERY_INPUT Input;\n    UINT EncryptionGuidIndex;\n} D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_INPUT;\n\ntypedef struct D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_OUTPUT\n{\n    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;\n    UINT EncryptionGuidIndex;\n    GUID EncryptionGuid;\n} D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_OUTPUT;\n\ntypedef struct D3D11_AUTHENTICATED_QUERY_CURRENT_ACCESSIBILITY_ENCRYPTION_OUTPUT\n{\n    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;\n    GUID EncryptionGuid;\n} D3D11_AUTHENTICATED_QUERY_CURRENT_ACCESSIBILITY_ENCRYPTION_OUTPUT;\n\ntypedef struct D3D11_AUTHENTICATED_CONFIGURE_INITIALIZE_INPUT\n{\n    D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters;\n    UINT StartSequenceQuery;\n    UINT StartSequenceConfigure;\n} D3D11_AUTHENTICATED_CONFIGURE_INITIALIZE_INPUT;\n\ntypedef struct D3D11_AUTHENTICATED_CONFIGURE_PROTECTION_INPUT\n{\n    D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters;\n    D3D11_AUTHENTICATED_PROTECTION_FLAGS Protections;\n} D3D11_AUTHENTICATED_CONFIGURE_PROTECTION_INPUT;\n\ntypedef struct D3D11_AUTHENTICATED_CONFIGURE_CRYPTO_SESSION_INPUT\n{\n    D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters;\n    HANDLE DecoderHandle;\n    HANDLE CryptoSessionHandle;\n    HANDLE DeviceHandle;\n} D3D11_AUTHENTICATED_CONFIGURE_CRYPTO_SESSION_INPUT;\n\ntypedef struct D3D11_AUTHENTICATED_CONFIGURE_SHARED_RESOURCE_INPUT\n{\n    D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters;\n    D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE ProcessType;\n    HANDLE ProcessHandle;\n    BOOL AllowAccess;\n} D3D11_AUTHENTICATED_CONFIGURE_SHARED_RESOURCE_INPUT;\n\ntypedef struct D3D11_AUTHENTICATED_CONFIGURE_ACCESSIBLE_ENCRYPTION_INPUT\n{\n    D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters;\n    GUID EncryptionGuid;\n} D3D11_AUTHENTICATED_CONFIGURE_ACCESSIBLE_ENCRYPTION_INPUT;\n\n[\n    object,\n    local,\n    uuid(1841e5c8-16b0-489b-bcc8-44cfb0d5deae)\n]\ninterface ID3D11DeviceChild : IUnknown\n{\n    void GetDevice(\n        [out] ID3D11Device **ppDevice);\n    HRESULT GetPrivateData(\n        [in] REFGUID guid,\n        [in, out] UINT *pDataSize,\n        [out] void *pData);\n    HRESULT SetPrivateData(\n        [in] REFGUID guid,\n        [in] UINT DataSize,\n        [in] const void *pData);\n    HRESULT SetPrivateDataInterface(\n        [in] REFGUID guid,\n        [in] const IUnknown *pData);\n}\n\n[\n    object,\n    local,\n    uuid(4b35d0cd-1e15-4258-9c98-1b1333f6dd3b)\n]\ninterface ID3D11Asynchronous : ID3D11DeviceChild\n{\n    UINT GetDataSize();\n}\n\n[\n    object,\n    local,\n    uuid(d6c00747-87b7-425e-b84d-44d108560afd)\n]\ninterface ID3D11Query : ID3D11Asynchronous\n{\n    void GetDesc(\n        [out] D3D11_QUERY_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(dc8e63f3-d12b-4952-b47b-5e45026a862d)\n]\ninterface ID3D11Resource : ID3D11DeviceChild\n{\n    void GetType(\n        [out] D3D11_RESOURCE_DIMENSION *pResourceDimension);\n    void SetEvictionPriority(\n        [in] UINT EvictionPriority);\n    UINT GetEvictionPriority();\n}\n\n[\n    object,\n    local,\n    uuid(839d1216-bb2e-412b-b7f4-a9dbebe08ed1)\n]\ninterface ID3D11View : ID3D11DeviceChild\n{\n    void GetResource(\n        [out] ID3D11Resource **ppResource);\n}\n\n[\n    object,\n    local,\n    uuid(75b68faa-347d-4159-8f45-a0640f01cd9a)\n]\ninterface ID3D11BlendState : ID3D11DeviceChild\n{\n    void GetDesc(\n        [out] D3D11_BLEND_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(48570b85-d1ee-4fcd-a250-eb350722b037)\n]\ninterface ID3D11Buffer : ID3D11Resource\n{\n    void GetDesc(\n        [out] D3D11_BUFFER_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(a6cd7faa-b0b7-4a2f-9436-8662a65797cb)\n]\ninterface ID3D11ClassInstance : ID3D11DeviceChild\n{\n    void GetClassLinkage(\n        [out] ID3D11ClassLinkage **ppLinkage);\n    void GetDesc(\n        [out] D3D11_CLASS_INSTANCE_DESC *pDesc);\n    void GetInstanceName(\n        [out] LPSTR pInstanceName,\n        [in, out] SIZE_T *pBufferLength);\n    void GetTypeName(\n        [out] LPSTR pTypeName,\n        [in, out] SIZE_T *pBufferLength);\n}\n\n[\n    object,\n    local,\n    uuid(ddf57cba-9543-46e4-a12b-f207a0fe7fed)\n]\ninterface ID3D11ClassLinkage : ID3D11DeviceChild\n{\n    HRESULT GetClassInstance(\n        [in] LPCSTR pClassInstanceName,\n        [in] UINT InstanceIndex,\n        [out] ID3D11ClassInstance **ppInstance);\n    HRESULT CreateClassInstance(\n        [in] LPCSTR pClassTypeName,\n        [in] UINT ConstantBufferOffset,\n        [in] UINT ConstantVectorOffset,\n        [in] UINT TextureOffset,\n        [in] UINT SamplerOffset,\n        [out] ID3D11ClassInstance **ppInstance);\n}\n\n[\n    object,\n    local,\n    uuid(a24bc4d1-769e-43f7-8013-98ff566c18e2)\n]\ninterface ID3D11CommandList : ID3D11DeviceChild\n{\n    UINT GetContextFlags();\n}\n\n[\n    object,\n    local,\n    uuid(4f5b196e-c2bd-495e-bd01-1fded38e4969)\n]\ninterface ID3D11ComputeShader : ID3D11DeviceChild\n{\n}\n\n[\n    object,\n    local,\n    uuid(6e8c49fb-a371-4770-b440-29086022b741)\n]\ninterface ID3D11Counter : ID3D11Asynchronous\n{\n    void GetDesc(\n        [out] D3D11_COUNTER_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(03823efb-8d8f-4e1c-9aa2-f64bb2cbfdf1)\n]\ninterface ID3D11DepthStencilState : ID3D11DeviceChild\n{\n    void GetDesc(\n        [out] D3D11_DEPTH_STENCIL_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(9fdac92a-1876-48c3-afad-25b94f84a9b6)\n]\ninterface ID3D11DepthStencilView : ID3D11View\n{\n    void GetDesc(\n        [out] D3D11_DEPTH_STENCIL_VIEW_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(f582c508-0f36-490c-9977-31eece268cfa)\n]\ninterface ID3D11DomainShader : ID3D11DeviceChild\n{\n}\n\n[\n    object,\n    local,\n    uuid(38325b96-effb-4022-ba02-2e795b70275c)\n]\ninterface ID3D11GeometryShader : ID3D11DeviceChild\n{\n}\n\n[\n    object,\n    local,\n    uuid(8e5c6061-628a-4c8e-8264-bbe45cb3d5dd)\n]\ninterface ID3D11HullShader : ID3D11DeviceChild\n{\n}\n\n[\n    object,\n    local,\n    uuid(e4819ddc-4cf0-4025-bd26-5de82a3e07b7)\n]\ninterface ID3D11InputLayout : ID3D11DeviceChild\n{\n}\n\n[\n    object,\n    local,\n    uuid(ea82e40d-51dc-4f33-93d4-db7c9125ae8c)\n]\ninterface ID3D11PixelShader : ID3D11DeviceChild\n{\n}\n\n[\n    object,\n    local,\n    uuid(9eb576dd-9f77-4d86-81aa-8bab5fe490e2)\n]\ninterface ID3D11Predicate : ID3D11Query\n{\n}\n\n[\n    object,\n    local,\n    uuid(9bb4ab81-ab1a-4d8f-b506-fc04200b6ee7)\n]\ninterface ID3D11RasterizerState : ID3D11DeviceChild\n{\n    void GetDesc(\n        [out] D3D11_RASTERIZER_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(dfdba067-0b8d-4865-875b-d7b4516cc164)\n]\ninterface ID3D11RenderTargetView : ID3D11View\n{\n    void GetDesc(\n        [out] D3D11_RENDER_TARGET_VIEW_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(da6fea51-564c-4487-9810-f0d0f9b4e3a5)\n]\ninterface ID3D11SamplerState : ID3D11DeviceChild\n{\n    void GetDesc(\n        [out] D3D11_SAMPLER_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(b0e06fe0-8192-4e1a-b1ca-36d7414710b2)\n]\ninterface ID3D11ShaderResourceView : ID3D11View\n{\n    void GetDesc(\n        [out] D3D11_SHADER_RESOURCE_VIEW_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(f8fb5c27-c6b3-4f75-a4c8-439af2ef564c),\n]\ninterface ID3D11Texture1D : ID3D11Resource\n{\n    void GetDesc(\n        [out] D3D11_TEXTURE1D_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(6f15aaf2-d208-4e89-9ab4-489535d34f9c)\n]\ninterface ID3D11Texture2D : ID3D11Resource\n{\n    void GetDesc(\n        [out] D3D11_TEXTURE2D_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(037e866e-f56d-4357-a8af-9dabbe6e250e)\n]\ninterface ID3D11Texture3D : ID3D11Resource\n{\n    void GetDesc(\n        [out] D3D11_TEXTURE3D_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(28acf509-7f5c-48f6-8611-f316010a6380)\n]\ninterface ID3D11UnorderedAccessView : ID3D11View\n{\n    void GetDesc(\n        [out] D3D11_UNORDERED_ACCESS_VIEW_DESC *pDesc);\n}\n\n[\n    object,\n    local,\n    uuid(3b301d64-d678-4289-8897-22f8928b72f3)\n]\ninterface ID3D11VertexShader : ID3D11DeviceChild\n{\n}\n\n[\n    object,\n    local,\n    uuid(c0bfa96c-e089-44fb-8eaf-26f8796190da)\n]\ninterface ID3D11DeviceContext : ID3D11DeviceChild\n{\n    void VSSetConstantBuffers(\n        [in] UINT StartSlot,\n        [in] UINT NumBuffers,\n        [in] ID3D11Buffer *const *ppConstantBuffers);\n    void PSSetShaderResources(\n        [in] UINT StartSlot,\n        [in] UINT NumViews,\n        [in] ID3D11ShaderResourceView *const *ppShaderResourceViews);\n    void PSSetShader(\n        [in] ID3D11PixelShader *pPixelShader,\n        [in] ID3D11ClassInstance *const *ppClassInstances,\n        UINT NumClassInstances);\n    void PSSetSamplers(\n        [in] UINT StartSlot,\n        [in] UINT NumSamplers,\n        [in] ID3D11SamplerState *const *ppSamplers);\n    void VSSetShader(\n        [in] ID3D11VertexShader *pVertexShader,\n        [in] ID3D11ClassInstance *const *ppClassInstances,\n        UINT NumClassInstances);\n    void DrawIndexed(\n        [in] UINT IndexCount,\n        [in] UINT StartIndexLocation,\n        [in] INT BaseVertexLocation);\n    void Draw(\n        [in] UINT VertexCount,\n        [in] UINT StartVertexLocation);\n    HRESULT Map(\n        [in] ID3D11Resource *pResource,\n        [in] UINT Subresource,\n        [in] D3D11_MAP MapType,\n        [in] UINT MapFlags,\n        [out] D3D11_MAPPED_SUBRESOURCE *pMappedResource);\n    void Unmap(\n        [in] ID3D11Resource *pResource,\n        [in] UINT Subresource);\n    void PSSetConstantBuffers(\n        [in] UINT StartSlot,\n        [in] UINT NumBuffers,\n        [in] ID3D11Buffer *const *ppConstantBuffers);\n    void IASetInputLayout(\n        [in] ID3D11InputLayout *pInputLayout);\n    void IASetVertexBuffers(\n        [in] UINT StartSlot,\n        [in] UINT NumBuffers,\n        [in] ID3D11Buffer *const *ppVertexBuffers,\n        [in] const UINT *pStrides,\n        [in] const UINT *pOffsets);\n    void IASetIndexBuffer(\n        [in] ID3D11Buffer *pIndexBuffer,\n        [in] DXGI_FORMAT  Format,\n        [in] UINT Offset);\n    void DrawIndexedInstanced(\n        [in] UINT IndexCountPerInstance,\n        [in] UINT InstanceCount,\n        [in] UINT StartIndexLocation,\n        [in] INT BaseVertexLocation,\n        [in] UINT StartInstanceLocation);\n    void DrawInstanced(\n        [in] UINT VertexCountPerInstance,\n        [in] UINT InstanceCount,\n        [in] UINT StartVertexLocation,\n        [in] UINT StartInstanceLocation);\n    void GSSetConstantBuffers(\n        [in] UINT StartSlot,\n        [in] UINT NumBuffers,\n        [in] ID3D11Buffer *const *ppConstantBuffers);\n    void GSSetShader(\n        [in] ID3D11GeometryShader *pShader,\n        [in] ID3D11ClassInstance *const *ppClassInstances,\n        UINT NumClassInstances);\n    void IASetPrimitiveTopology(\n        [in] D3D11_PRIMITIVE_TOPOLOGY Topology);\n    void VSSetShaderResources(\n        [in] UINT StartSlot,\n        [in] UINT NumViews,\n        [in] ID3D11ShaderResourceView *const *ppShaderResourceViews);\n    void VSSetSamplers(\n        [in] UINT StartSlot,\n        [in] UINT NumSamplers,\n        [in] ID3D11SamplerState *const *ppSamplers);\n    void Begin(\n        [in] ID3D11Asynchronous *pAsync);\n    void End(\n        [in] ID3D11Asynchronous *pAsync);\n    HRESULT GetData(\n        [in] ID3D11Asynchronous *pAsync,\n        [in] void *pData,\n        [in] UINT DataSize,\n        [in] UINT GetDataFlags);\n    void SetPredication(\n        [in] ID3D11Predicate *pPredicate,\n        [in] BOOL PredicateValue);\n    void GSSetShaderResources(\n        [in] UINT StartSlot,\n        [in] UINT NumViews,\n        [in] ID3D11ShaderResourceView *const *ppShaderResourceViews);\n    void GSSetSamplers(\n        [in] UINT StartSlot,\n        [in] UINT NumSamplers,\n        [in] ID3D11SamplerState *const *ppSamplers);\n    void OMSetRenderTargets(\n        [in] UINT NumViews,\n        [in] ID3D11RenderTargetView *const *ppRenderTargetViews,\n        [in] ID3D11DepthStencilView *pDepthStencilView);\n    void OMSetRenderTargetsAndUnorderedAccessViews(\n        [in] UINT NumRTVs,\n        [in] ID3D11RenderTargetView *const *ppRenderTargetViews,\n        [in] ID3D11DepthStencilView *pDepthStencilView,\n        [in] UINT UAVStartSlot,\n        [in] UINT NumUAVs,\n        [in] ID3D11UnorderedAccessView *const *ppUnorderedAccessViews,\n        [in] const UINT *pUAVInitialCounts);\n    void OMSetBlendState(\n        [in] ID3D11BlendState *pBlendState,\n        [in] const FLOAT BlendFactor[4],\n        [in] UINT SampleMask);\n    void OMSetDepthStencilState(\n        [in] ID3D11DepthStencilState *pDepthStencilState,\n        [in] UINT StencilRef);\n    void SOSetTargets(\n        [in] UINT NumBuffers,\n        [in] ID3D11Buffer *const *ppSOTargets,\n        [in] const UINT *pOffsets);\n    void DrawAuto();\n    void DrawIndexedInstancedIndirect(\n        [in] ID3D11Buffer *pBufferForArgs,\n        [in] UINT AlignedByteOffsetForArgs);\n    void DrawInstancedIndirect(\n        [in] ID3D11Buffer *pBufferForArgs,\n        [in] UINT AlignedByteOffsetForArgs);\n    void Dispatch(\n        [in] UINT ThreadGroupCountX,\n        [in] UINT ThreadGroupCountY,\n        [in] UINT ThreadGroupCountZ);\n    void DispatchIndirect(\n        [in] ID3D11Buffer *pBufferForArgs,\n        [in] UINT AlignedByteOffsetForArgs);\n    void RSSetState(\n        [in] ID3D11RasterizerState *pRasterizerState);\n    void RSSetViewports(\n        [in] UINT NumViewports,\n        [in] const D3D11_VIEWPORT *pViewports);\n    void RSSetScissorRects(\n        [in] UINT NumRects,\n        [in] const D3D11_RECT *pRects);\n    void CopySubresourceRegion(\n        [in] ID3D11Resource *pDstResource,\n        [in] UINT DstSubresource,\n        [in] UINT DstX,\n        [in] UINT DstY,\n        [in] UINT DstZ,\n        [in] ID3D11Resource *pSrcResource,\n        [in] UINT SrcSubresource,\n        [in] const D3D11_BOX *pSrcBox);\n    void CopyResource(\n        [in] ID3D11Resource *pDstResource,\n        [in] ID3D11Resource *pSrcResource);\n    void UpdateSubresource(\n        [in] ID3D11Resource *pDstResource,\n        [in] UINT DstSubresource,\n        [in] const D3D11_BOX *pDstBox,\n        [in] const void *pSrcData,\n        [in] UINT SrcRowPitch,\n        [in] UINT SrcDepthPitch);\n    void CopyStructureCount(\n        [in] ID3D11Buffer *pDstBuffer,\n        [in] UINT DstAlignedByteOffset,\n        [in] ID3D11UnorderedAccessView *pSrcView);\n    void ClearRenderTargetView(\n        [in] ID3D11RenderTargetView *pRenderTargetView,\n        [in] const FLOAT ColorRGBA[4]);\n    void ClearUnorderedAccessViewUint(\n        [in] ID3D11UnorderedAccessView *pUnorderedAccessView,\n        [in] const UINT Values[4]);\n    void ClearUnorderedAccessViewFloat(\n        [in] ID3D11UnorderedAccessView *pUnorderedAccessView,\n        [in] const FLOAT Values[4]);\n    void ClearDepthStencilView(\n        [in] ID3D11DepthStencilView *pDepthStencilView,\n        [in] UINT ClearFlags,\n        [in] FLOAT Depth,\n        [in] UINT8 Stencil);\n    void GenerateMips(\n        [in] ID3D11ShaderResourceView *pShaderResourceView);\n    void SetResourceMinLOD(\n        [in] ID3D11Resource *pResource, FLOAT MinLOD);\n    FLOAT GetResourceMinLOD(\n        [in] ID3D11Resource *pResource);\n    void ResolveSubresource(\n        [in] ID3D11Resource *pDstResource,\n        [in] UINT DstSubresource,\n        [in] ID3D11Resource *pSrcResource,\n        [in] UINT SrcSubresource,\n        [in] DXGI_FORMAT Format);\n    void ExecuteCommandList(\n        [in] ID3D11CommandList *pCommandList,\n        BOOL RestoreContextState);\n    void HSSetShaderResources(\n        [in] UINT StartSlot,\n        [in] UINT NumViews,\n        [in] ID3D11ShaderResourceView *const *ppShaderResourceViews);\n    void HSSetShader(\n        [in] ID3D11HullShader *pHullShader,\n        [in] ID3D11ClassInstance *const *ppClassInstances,\n        UINT NumClassInstances);\n    void HSSetSamplers(\n        [in] UINT StartSlot,\n        [in] UINT NumSamplers,\n        [in] ID3D11SamplerState *const *ppSamplers);\n    void HSSetConstantBuffers(\n        [in] UINT StartSlot,\n        [in] UINT NumBuffers,\n        [in] ID3D11Buffer *const *ppConstantBuffers);\n    void DSSetShaderResources(\n        [in] UINT StartSlot,\n        [in] UINT NumViews,\n        [in] ID3D11ShaderResourceView *const *ppShaderResourceViews);\n    void DSSetShader(\n        [in] ID3D11DomainShader *pDomainShader,\n        [in] ID3D11ClassInstance *const *ppClassInstances,\n        UINT NumClassInstances);\n    void DSSetSamplers(\n        [in] UINT StartSlot,\n        [in] UINT NumSamplers,\n        [in] ID3D11SamplerState *const *ppSamplers);\n    void DSSetConstantBuffers(\n        [in] UINT StartSlot,\n        [in] UINT NumBuffers,\n        [in] ID3D11Buffer *const *ppConstantBuffers);\n    void CSSetShaderResources(\n        [in] UINT StartSlot,\n        [in] UINT NumViews,\n        [in] ID3D11ShaderResourceView *const *ppShaderResourceViews);\n    void CSSetUnorderedAccessViews(\n        [in] UINT StartSlot,\n        [in] UINT NumUAVs,\n        [in] ID3D11UnorderedAccessView *const *ppUnorderedAccessViews,\n        [in] const UINT *pUAVInitialCounts);\n    void CSSetShader(\n        [in] ID3D11ComputeShader *pComputeShader,\n        [in] ID3D11ClassInstance *const *ppClassInstances,\n        UINT NumClassInstances);\n    void CSSetSamplers(\n        [in] UINT StartSlot,\n        [in] UINT NumSamplers,\n        [in] ID3D11SamplerState *const *ppSamplers);\n    void CSSetConstantBuffers(\n        [in] UINT StartSlot,\n        [in] UINT NumBuffers,\n        [in] ID3D11Buffer *const *ppConstantBuffers);\n    void VSGetConstantBuffers(\n        [in] UINT StartSlot,\n        [in] UINT NumBuffers,\n        [out] ID3D11Buffer **ppConstantBuffers);\n    void PSGetShaderResources(\n        [in] UINT StartSlot,\n        [in] UINT NumViews,\n        [out] ID3D11ShaderResourceView **ppShaderResourceViews);\n    void PSGetShader(\n        [out] ID3D11PixelShader **ppPixelShader,\n        [out] ID3D11ClassInstance **ppClassInstances,\n        [in, out] UINT *pNumClassInstances);\n    void PSGetSamplers(\n        [in] UINT StartSlot,\n        [in] UINT NumSamplers,\n        [out] ID3D11SamplerState **ppSamplers);\n    void VSGetShader(\n        [out] ID3D11VertexShader **ppVertexShader,\n        [out] ID3D11ClassInstance **ppClassInstances,\n        [in, out] UINT *pNumClassInstances);\n    void PSGetConstantBuffers(\n        [in] UINT StartSlot,\n        [in] UINT NumBuffers,\n        [out] ID3D11Buffer **ppConstantBuffers);\n    void IAGetInputLayout(\n        [out] ID3D11InputLayout **ppInputLayout);\n    void IAGetVertexBuffers(\n        [in] UINT StartSlot,\n        [in] UINT NumBuffers,\n        [out] ID3D11Buffer **ppVertexBuffers,\n        [out] UINT *pStrides,\n        [out] UINT *pOffsets);\n    void IAGetIndexBuffer(\n        [out] ID3D11Buffer **pIndexBuffer,\n        [out] DXGI_FORMAT* Format,\n        [out] UINT* Offset);\n    void GSGetConstantBuffers(\n        [in] UINT StartSlot,\n        [in] UINT NumBuffers,\n        [out] ID3D11Buffer **ppConstantBuffers);\n    void GSGetShader(\n        [out] ID3D11GeometryShader **ppGeometryShader,\n        [out] ID3D11ClassInstance **ppClassInstances,\n        [in, out] UINT *pNumClassInstances);\n    void IAGetPrimitiveTopology(\n        [out] D3D11_PRIMITIVE_TOPOLOGY *pTopology);\n    void VSGetShaderResources(\n        [in] UINT StartSlot,\n        [in] UINT NumViews,\n        [out] ID3D11ShaderResourceView **ppShaderResourceViews);\n    void VSGetSamplers(\n        [in] UINT StartSlot,\n        [in] UINT NumSamplers,\n        [out] ID3D11SamplerState **ppSamplers);\n    void GetPredication(\n        [out] ID3D11Predicate **ppPredicate,\n        [out] BOOL *pPredicateValue);\n    void GSGetShaderResources(\n        [in] UINT StartSlot,\n        [in] UINT NumViews,\n        [out] ID3D11ShaderResourceView **ppShaderResourceViews);\n    void GSGetSamplers(\n        [in] UINT StartSlot,\n        [in] UINT NumSamplers,\n        [out] ID3D11SamplerState **ppSamplers);\n    void OMGetRenderTargets(\n        [in] UINT NumViews,\n        [out] ID3D11RenderTargetView **ppRenderTargetViews,\n        [out] ID3D11DepthStencilView **ppDepthStencilView);\n    void OMGetRenderTargetsAndUnorderedAccessViews(\n        [in] UINT NumRTVs,\n        [out] ID3D11RenderTargetView **ppRenderTargetViews,\n        [out] ID3D11DepthStencilView **ppDepthStencilView,\n        [in] UINT UAVStartSlot,\n        [in] UINT NumUAVs,\n        [out] ID3D11UnorderedAccessView **ppUnorderedAccessViews);\n    void OMGetBlendState(\n        [out] ID3D11BlendState **ppBlendState,\n        [out] FLOAT BlendFactor[4],\n        [out] UINT *pSampleMask);\n    void OMGetDepthStencilState(\n        [out] ID3D11DepthStencilState **ppDepthStencilState,\n        [out] UINT *pStencilRef);\n    void SOGetTargets(\n        [in] UINT NumBuffers,\n        [out] ID3D11Buffer **ppSOTargets);\n    void RSGetState(\n        [out] ID3D11RasterizerState **ppRasterizerState);\n    void RSGetViewports(\n        [in, out] UINT *pNumViewports,\n        [out] D3D11_VIEWPORT *pViewports);\n    void RSGetScissorRects(\n        [in, out] UINT *pNumRects,\n        [out] D3D11_RECT *pRects);\n    void HSGetShaderResources(\n        [in] UINT StartSlot,\n        [in] UINT NumViews,\n        [out] ID3D11ShaderResourceView **ppShaderResourceViews);\n    void HSGetShader(\n        [out] ID3D11HullShader **ppHullShader,\n        [out] ID3D11ClassInstance **ppClassInstances,\n        [in, out] UINT *pNumClassInstances);\n    void HSGetSamplers(\n        [in] UINT StartSlot,\n        [in] UINT NumSamplers,\n        [out] ID3D11SamplerState **ppSamplers);\n    void HSGetConstantBuffers(\n        [in] UINT StartSlot,\n        [in] UINT NumBuffers,\n        [out] ID3D11Buffer **ppConstantBuffers);\n    void DSGetShaderResources(\n        [in] UINT StartSlot,\n        [in] UINT NumViews,\n        [out] ID3D11ShaderResourceView **ppShaderResourceViews);\n    void DSGetShader(\n        [out] ID3D11DomainShader **ppDomainShader,\n        [out] ID3D11ClassInstance **ppClassInstances,\n        [in, out] UINT *pNumClassInstances);\n    void DSGetSamplers(\n        [in] UINT StartSlot,\n        [in] UINT NumSamplers,\n        [out] ID3D11SamplerState **ppSamplers);\n    void DSGetConstantBuffers(\n        [in] UINT StartSlot,\n        [in] UINT NumBuffers,\n        [out] ID3D11Buffer **ppConstantBuffers);\n    void CSGetShaderResources(\n        [in] UINT StartSlot,\n        [in] UINT NumViews,\n        [out] ID3D11ShaderResourceView **ppShaderResourceViews);\n    void CSGetUnorderedAccessViews(\n        [in] UINT StartSlot,\n        [in] UINT NumUAVs,\n        [out] ID3D11UnorderedAccessView **ppUnorderedAccessViews);\n    void CSGetShader(\n        [out] ID3D11ComputeShader **ppComputeShader,\n        [out] ID3D11ClassInstance **ppClassInstances,\n        [in, out] UINT *pNumClassInstances);\n    void CSGetSamplers(\n        [in] UINT StartSlot,\n        [in] UINT NumSamplers,\n        [out] ID3D11SamplerState **ppSamplers);\n    void CSGetConstantBuffers(\n        [in] UINT StartSlot,\n        [in] UINT NumBuffers,\n        [out] ID3D11Buffer **ppConstantBuffers);\n    void ClearState();\n    void Flush();\n    D3D11_DEVICE_CONTEXT_TYPE GetType();\n    UINT GetContextFlags();\n    HRESULT FinishCommandList(\n        BOOL RestoreDeferredContextState,\n        [out] ID3D11CommandList **ppCommandList);\n}\n\n[\n    object,\n    uuid(3015a308-dcbd-47aa-a747-192486d14d4a),\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11AuthenticatedChannel : ID3D11DeviceChild\n{\n    HRESULT GetCertificateSize(\n        UINT *pCertificateSize);\n    HRESULT GetCertificate(\n        UINT CertificateSize,\n        BYTE *pCertificate);\n    void GetChannelHandle(\n        HANDLE *pChannelHandle);\n}\n\n[\n    object,\n    uuid(9b32f9ad-bdcc-40a6-a39d-d5c865845720),\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11CryptoSession : ID3D11DeviceChild\n{\n    void GetCryptoType(\n        GUID *pCryptoType);\n    void GetDecoderProfile(\n        GUID *pDecoderProfile);\n    HRESULT GetCertificateSize(\n        UINT *pCertificateSize);\n    HRESULT GetCertificate(\n        UINT CertificateSize,\n        BYTE *pCertificate);\n    void GetCryptoSessionHandle(\n        HANDLE *pCryptoSessionHandle);\n}\n\n[\n    object,\n    uuid(3c9c5b51-995d-48d1-9b8d-fa5caeded65c),\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11VideoDecoder : ID3D11DeviceChild\n{\n    HRESULT GetCreationParameters(\n        D3D11_VIDEO_DECODER_DESC *pVideoDesc,\n        D3D11_VIDEO_DECODER_CONFIG *pConfig);\n    HRESULT GetDriverHandle(\n        HANDLE *pDriverHandle);\n}\n\n[\n    object,\n    uuid(31627037-53ab-4200-9061-05faa9ab45f9),\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11VideoProcessorEnumerator : ID3D11DeviceChild\n{\n    HRESULT GetVideoProcessorContentDesc(\n        D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pContentDesc);\n    HRESULT CheckVideoProcessorFormat(\n        DXGI_FORMAT Format,\n        UINT *pFlags);\n    HRESULT GetVideoProcessorCaps(\n        D3D11_VIDEO_PROCESSOR_CAPS *pCaps);\n    HRESULT GetVideoProcessorRateConversionCaps(\n        UINT TypeIndex,\n        D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps);\n    HRESULT GetVideoProcessorCustomRate(\n        UINT TypeIndex,\n        UINT CustomRateIndex,\n        D3D11_VIDEO_PROCESSOR_CUSTOM_RATE *pRate);\n    HRESULT GetVideoProcessorFilterRange(\n        D3D11_VIDEO_PROCESSOR_FILTER Filter,\n        D3D11_VIDEO_PROCESSOR_FILTER_RANGE *pRange);\n}\n\n[\n    object,\n    uuid(1d7b0652-185f-41c6-85ce-0c5be3d4ae6c),\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11VideoProcessor : ID3D11DeviceChild\n{\n    void GetContentDesc(\n        D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pDesc);\n    void GetRateConversionCaps(\n        D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps);\n}\n\n[\n    object,\n    uuid(c2931aea-2a85-4f20-860f-fba1fd256e18),\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11VideoDecoderOutputView : ID3D11View\n{\n    void GetDesc(\n        D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC *pDesc);\n}\n\n[\n    object,\n    uuid(11ec5a5f-51dc-4945-ab34-6e8c21300ea5),\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11VideoProcessorInputView : ID3D11View\n{\n    void GetDesc(\n        D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC *pDesc);\n}\n\n[\n    object,\n    uuid(a048285e-25a9-4527-bd93-d68b68c44254),\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11VideoProcessorOutputView : ID3D11View\n{\n    void GetDesc(\n        D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC *pDesc);\n}\n\n[\n    object,\n    uuid(10ec4d5b-975a-4689-b9e4-d0aac30fe333),\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11VideoDevice : IUnknown\n{\n    HRESULT CreateVideoDecoder(\n        const D3D11_VIDEO_DECODER_DESC *pVideoDesc,\n        const D3D11_VIDEO_DECODER_CONFIG *pConfig,\n        ID3D11VideoDecoder **ppDecoder);\n    HRESULT CreateVideoProcessor(\n        ID3D11VideoProcessorEnumerator *pEnum,\n        UINT RateConversionIndex,\n        ID3D11VideoProcessor **ppVideoProcessor);\n    HRESULT CreateAuthenticatedChannel(\n        D3D11_AUTHENTICATED_CHANNEL_TYPE ChannelType,\n        ID3D11AuthenticatedChannel **ppAuthenticatedChannel);\n    HRESULT CreateCryptoSession(\n        const GUID *pCryptoType,\n        const GUID *pDecoderProfile,\n        const GUID *pKeyExchangeType,\n        ID3D11CryptoSession **ppCryptoSession);\n    HRESULT CreateVideoDecoderOutputView(\n        ID3D11Resource *pResource,\n        const D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC *pDesc,\n        ID3D11VideoDecoderOutputView **ppVDOVView);\n    HRESULT CreateVideoProcessorInputView(\n        ID3D11Resource *pResource,\n        ID3D11VideoProcessorEnumerator *pEnum,\n        const D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC *pDesc,\n        ID3D11VideoProcessorInputView **ppVPIView);\n    HRESULT CreateVideoProcessorOutputView(\n        ID3D11Resource *pResource,\n        ID3D11VideoProcessorEnumerator *pEnum,\n        const D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC *pDesc,\n        ID3D11VideoProcessorOutputView **ppVPOView);\n    HRESULT CreateVideoProcessorEnumerator(\n        const D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pDesc,\n        ID3D11VideoProcessorEnumerator **ppEnum);\n    UINT GetVideoDecoderProfileCount();\n    HRESULT GetVideoDecoderProfile(\n        UINT Index,\n        GUID *pDecoderProfile);\n    HRESULT CheckVideoDecoderFormat(\n        const GUID *pDecoderProfile,\n        DXGI_FORMAT Format,\n        BOOL *pSupported);\n    HRESULT GetVideoDecoderConfigCount(\n        const D3D11_VIDEO_DECODER_DESC *pDesc,\n        UINT *pCount);\n    HRESULT GetVideoDecoderConfig(\n        const D3D11_VIDEO_DECODER_DESC *pDesc,\n        UINT Index,\n        D3D11_VIDEO_DECODER_CONFIG *pConfig);\n    HRESULT GetContentProtectionCaps(\n        const GUID *pCryptoType,\n        const GUID *pDecoderProfile,\n        D3D11_VIDEO_CONTENT_PROTECTION_CAPS *pCaps);\n    HRESULT CheckCryptoKeyExchange(\n        const GUID *pCryptoType,\n        const GUID *pDecoderProfile,\n        UINT Index,\n        GUID *pKeyExchangeType);\n    HRESULT SetPrivateData(\n        REFGUID guid,\n        UINT DataSize,\n        const void *pData);\n    HRESULT SetPrivateDataInterface(\n        REFGUID guid,\n        const IUnknown *pData);\n}\n\n[\n    object,\n    uuid(61f21c45-3c0e-4a74-9cea-67100d9ad5e4),\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11VideoContext : ID3D11DeviceChild\n{\n    HRESULT GetDecoderBuffer(\n        [in] ID3D11VideoDecoder *decoder,\n        [in] D3D11_VIDEO_DECODER_BUFFER_TYPE type,\n        [out] UINT *buffer_size,\n        [out] void **buffer\n    );\n    HRESULT ReleaseDecoderBuffer(\n        [in] ID3D11VideoDecoder *decoder,\n        [in] D3D11_VIDEO_DECODER_BUFFER_TYPE type\n    );\n    HRESULT DecoderBeginFrame(\n        [in] ID3D11VideoDecoder *decoder,\n        [in] ID3D11VideoDecoderOutputView *view,\n        [in] UINT key_size,\n        [in] const void *key\n    );\n    HRESULT DecoderEndFrame(\n        [in] ID3D11VideoDecoder *decoder\n    );\n    HRESULT SubmitDecoderBuffers(\n        [in] ID3D11VideoDecoder *decoder,\n        [in] UINT buffers_count,\n        [in] const D3D11_VIDEO_DECODER_BUFFER_DESC *buffer_desc\n    );\n    HRESULT DecoderExtension(\n        [in] ID3D11VideoDecoder *decoder,\n        [in] const D3D11_VIDEO_DECODER_EXTENSION *extension\n    );\n    void VideoProcessorSetOutputTargetRect(\n        [in] ID3D11VideoProcessor *processor,\n        [in] BOOL enable,\n        [in] const RECT *rect\n    );\n    void VideoProcessorSetOutputBackgroundColor(\n        [in] ID3D11VideoProcessor *processor,\n        [in] BOOL y_cb_cr,\n        [in] const D3D11_VIDEO_COLOR *color\n    );\n    void VideoProcessorSetOutputColorSpace(\n        [in] ID3D11VideoProcessor *processor,\n        [in] const D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space\n    );\n    void VideoProcessorSetOutputAlphaFillMode(\n        [in] ID3D11VideoProcessor *processor,\n        [in] D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE alpha_fill_mode,\n        [in] UINT stream_idx\n    );\n    void VideoProcessorSetOutputConstriction(\n        [in] ID3D11VideoProcessor *processor,\n        [in] BOOL enable,\n        [in] SIZE size\n    );\n    void VideoProcessorSetOutputStereoMode(\n        [in] ID3D11VideoProcessor *processor,\n        [in] BOOL enable\n    );\n    HRESULT VideoProcessorSetOutputExtension(\n        [in] ID3D11VideoProcessor *processor,\n        [in] const GUID *guid,\n        [in] UINT data_size,\n        [in] void *data\n    );\n    void VideoProcessorGetOutputTargetRect(\n        [in] ID3D11VideoProcessor *processor,\n        [out] BOOL *enabled,\n        [out] RECT *rect\n    );\n    void VideoProcessorGetOutputBackgroundColor(\n        [in] ID3D11VideoProcessor *processor,\n        [out] BOOL *y_cb_cr,\n        [out] D3D11_VIDEO_COLOR *color\n    );\n    void VideoProcessorGetOutputColorSpace(\n        [in] ID3D11VideoProcessor *processor,\n        [out] D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space\n    );\n    void VideoProcessorGetOutputAlphaFillMode(\n        [in] ID3D11VideoProcessor *processor,\n        [out] D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE *alpha_fill_mode,\n        [out] UINT *stream_idx\n    );\n    void VideoProcessorGetOutputConstriction(\n        [in] ID3D11VideoProcessor *processor,\n        [out] BOOL *enabled,\n        [out] SIZE *size\n    );\n    void VideoProcessorGetOutputStereoMode(\n        [in] ID3D11VideoProcessor *processor,\n        [out] BOOL *enabled\n    );\n    HRESULT VideoProcessorGetOutputExtension(\n        [in] ID3D11VideoProcessor *processor,\n        [in] const GUID *guid,\n        [in] UINT data_size,\n        [out] void *data\n    );\n    void VideoProcessorSetStreamFrameFormat(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [in] D3D11_VIDEO_FRAME_FORMAT format\n    );\n    void VideoProcessorSetStreamColorSpace(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [in] const D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space\n    );\n    void VideoProcessorSetStreamOutputRate(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [in] D3D11_VIDEO_PROCESSOR_OUTPUT_RATE rate,\n        [in] BOOL repeat,\n        [in] const DXGI_RATIONAL *custom_rate\n    );\n    void VideoProcessorSetStreamSourceRect(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [in] BOOL enable,\n        [in] const RECT *rect\n    );\n    void VideoProcessorSetStreamDestRect(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [in] BOOL enable,\n        [in] const RECT *rect\n    );\n    void VideoProcessorSetStreamAlpha(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [in] BOOL enable,\n        [in] float alpha\n    );\n    void VideoProcessorSetStreamPalette(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [in] UINT entry_count,\n        [in] const UINT *entries\n    );\n    void VideoProcessorSetStreamPixelAspectRatio(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [in] BOOL enable,\n        [in] const DXGI_RATIONAL *src_aspect_ratio,\n        [in] const DXGI_RATIONAL *dst_aspect_ratio\n    );\n    void VideoProcessorSetStreamLumaKey(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [in] BOOL enable,\n        [in] float lower,\n        [in] float upper\n    );\n    void VideoProcessorSetStreamStereoFormat(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [in] BOOL enable,\n        [in] D3D11_VIDEO_PROCESSOR_STEREO_FORMAT format,\n        [in] BOOL left_view_frame0,\n        [in] BOOL base_view_frame0,\n        [in] D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE flip_mode,\n        [in] int mono_offset\n    );\n    void VideoProcessorSetStreamAutoProcessingMode(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [in] BOOL enable\n    );\n    void VideoProcessorSetStreamFilter(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [in] D3D11_VIDEO_PROCESSOR_FILTER filter,\n        [in] BOOL enable,\n        [in] int level\n    );\n    HRESULT VideoProcessorSetStreamExtension(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [in] const GUID *guid,\n        [in] UINT data_size,\n        [in] void *data\n    );\n    void VideoProcessorGetStreamFrameFormat(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [out] D3D11_VIDEO_FRAME_FORMAT *format\n    );\n    void VideoProcessorGetStreamColorSpace(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [out] D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space\n    );\n    void VideoProcessorGetStreamOutputRate(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [out] D3D11_VIDEO_PROCESSOR_OUTPUT_RATE *rate,\n        [out] BOOL *repeat,\n        [out] DXGI_RATIONAL *custom_rate\n    );\n    void VideoProcessorGetStreamSourceRect(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [out] BOOL *enabled,\n        [out] RECT *rect\n    );\n    void VideoProcessorGetStreamDestRect(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [out] BOOL *enabled,\n        [out] RECT *rect\n    );\n    void VideoProcessorGetStreamAlpha(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [out] BOOL *enabled,\n        [out] float *alpha\n    );\n    void VideoProcessorGetStreamPalette(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [in] UINT entry_count,\n        [out] UINT *entries\n    );\n    void VideoProcessorGetStreamPixelAspectRatio(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [out] BOOL *enabled,\n        [out] DXGI_RATIONAL *src_aspect_ratio,\n        [out] DXGI_RATIONAL *dst_aspect_ratio\n    );\n    void VideoProcessorGetStreamLumaKey(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [out] BOOL *enabled,\n        [out] float *lower,\n        [out] float *upper\n    );\n    void VideoProcessorGetStreamStereoFormat(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [out] BOOL *enabled,\n        [out] D3D11_VIDEO_PROCESSOR_STEREO_FORMAT *format,\n        [out] BOOL *left_view_frame0,\n        [out] BOOL *base_view_frame0,\n        [out] D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE *flip_mode,\n        [out] int *mono_offset\n    );\n    void VideoProcessorGetStreamAutoProcessingMode(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [out] BOOL *enabled\n    );\n    void VideoProcessorGetStreamFilter(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [in] D3D11_VIDEO_PROCESSOR_FILTER filter,\n        [out] BOOL *enabled,\n        [out] int *level\n    );\n    HRESULT VideoProcessorGetStreamExtension(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [in] const GUID *guid,\n        [in] UINT data_size,\n        [out] void *data\n    );\n    HRESULT VideoProcessorBlt(\n        [in] ID3D11VideoProcessor *processor,\n        [in] ID3D11VideoProcessorOutputView *view,\n        [in] UINT frame_idx,\n        [in] UINT stream_count,\n        [in] const D3D11_VIDEO_PROCESSOR_STREAM *streams\n    );\n    HRESULT NegotiateCryptoSessionKeyExchange(\n        [in] ID3D11CryptoSession *session,\n        [in] UINT data_size,\n        [in, out] void *data\n    );\n    void EncryptionBlt(\n        [in] ID3D11CryptoSession *session,\n        [in] ID3D11Texture2D *src_surface,\n        [in] ID3D11Texture2D *dst_surface,\n        [in] UINT iv_size,\n        [in, out] void *iv\n    );\n    void DecryptionBlt(\n        [in] ID3D11CryptoSession *session,\n        [in] ID3D11Texture2D *src_surface,\n        [in] ID3D11Texture2D *dst_surface,\n        [in] D3D11_ENCRYPTED_BLOCK_INFO *block_info,\n        [in] UINT key_size,\n        [in] const void *key,\n        [in] UINT iv_size,\n        [in, out] void *iv\n    );\n    void StartSessionKeyRefresh(\n        [in] ID3D11CryptoSession *session,\n        [in] UINT random_number_size,\n        [out] void *random_number\n    );\n    void FinishSessionKeyRefresh(\n        [in] ID3D11CryptoSession *session\n    );\n    HRESULT GetEncryptionBltKey(\n        [in] ID3D11CryptoSession *session,\n        [in] UINT key_size,\n        [out] void *key\n    );\n    HRESULT NegotiateAuthenticatedChannelKeyExchange(\n        [in] ID3D11AuthenticatedChannel *channel,\n        [in] UINT data_size,\n        [in, out] void *data\n    );\n    HRESULT QueryAuthenticatedChannel(\n        [in] ID3D11AuthenticatedChannel *channel,\n        [in] UINT input_size,\n        [in] const void *input,\n        [in] UINT output_size,\n        [out] void *output\n    );\n    HRESULT ConfigureAuthenticatedChannel(\n        [in] ID3D11AuthenticatedChannel *channel,\n        [in] UINT input_size,\n        [in] const void *input,\n        [out] D3D11_AUTHENTICATED_CONFIGURE_OUTPUT *output\n    );\n    void VideoProcessorSetStreamRotation(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [in] BOOL enable,\n        [in] D3D11_VIDEO_PROCESSOR_ROTATION rotation\n    );\n    void VideoProcessorGetStreamRotation(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_idx,\n        [out] BOOL *enable,\n        [out] D3D11_VIDEO_PROCESSOR_ROTATION *rotation\n    );\n}\n\n[\n    object,\n    local,\n    uuid(db6f6ddb-ac77-4e88-8253-819df9bbf140)\n]\ninterface ID3D11Device : IUnknown\n{\n    HRESULT CreateBuffer(\n        [in] const D3D11_BUFFER_DESC *pDesc,\n        [in] const D3D11_SUBRESOURCE_DATA *pInitialData,\n        [out] ID3D11Buffer **ppBuffer);\n    HRESULT CreateTexture1D(\n        [in] const D3D11_TEXTURE1D_DESC *pDesc,\n        [in] const D3D11_SUBRESOURCE_DATA *pInitialData,\n        [out] ID3D11Texture1D **ppTexture1D);\n    HRESULT CreateTexture2D(\n        [in] const D3D11_TEXTURE2D_DESC *pDesc,\n        [in] const D3D11_SUBRESOURCE_DATA *pInitialData,\n        [out] ID3D11Texture2D **ppTexture2D);\n    HRESULT CreateTexture3D(\n        [in] const D3D11_TEXTURE3D_DESC *pDesc,\n        [in] const D3D11_SUBRESOURCE_DATA *pInitialData,\n        [out] ID3D11Texture3D **ppTexture3D);\n    HRESULT CreateShaderResourceView(\n        [in] ID3D11Resource *pResource,\n        [in] const D3D11_SHADER_RESOURCE_VIEW_DESC *pDesc,\n        [out] ID3D11ShaderResourceView **ppSRView);\n    HRESULT CreateUnorderedAccessView(\n        [in] ID3D11Resource *pResource,\n        [in] const D3D11_UNORDERED_ACCESS_VIEW_DESC *pDesc,\n        [out] ID3D11UnorderedAccessView **ppUAView);\n    HRESULT CreateRenderTargetView(\n        [in] ID3D11Resource *pResource,\n        [in] const D3D11_RENDER_TARGET_VIEW_DESC *pDesc,\n        [out] ID3D11RenderTargetView **ppRTView);\n    HRESULT CreateDepthStencilView(\n        [in] ID3D11Resource *pResource,\n        [in] const D3D11_DEPTH_STENCIL_VIEW_DESC *pDesc,\n        [out] ID3D11DepthStencilView **ppDepthStencilView);\n    HRESULT CreateInputLayout(\n        [in] const D3D11_INPUT_ELEMENT_DESC *pInputElementDescs,\n        [in] UINT NumElements,\n        [in] const void *pShaderBytecodeWithInputSignature,\n        [in] SIZE_T BytecodeLength,\n        [out] ID3D11InputLayout **ppInputLayout);\n    HRESULT CreateVertexShader(\n        [in] const void *pShaderBytecode,\n        [in] SIZE_T BytecodeLength,\n        [in] ID3D11ClassLinkage *pClassLinkage,\n        [out] ID3D11VertexShader **ppVertexShader);\n    HRESULT CreateGeometryShader(\n        [in] const void *pShaderBytecode,\n        [in] SIZE_T BytecodeLength,\n        [in] ID3D11ClassLinkage *pClassLinkage,\n        [out] ID3D11GeometryShader **ppGeometryShader);\n    HRESULT CreateGeometryShaderWithStreamOutput(\n        [in] const void *pShaderBytecode,\n        [in] SIZE_T BytecodeLength,\n        [in] const D3D11_SO_DECLARATION_ENTRY *pSODeclaration,\n        [in] UINT NumEntries,\n        [in] const UINT *pBufferStrides,\n        [in] UINT NumStrides,\n        [in] UINT RasterizedStream,\n        [in] ID3D11ClassLinkage *pClassLinkage,\n        [out] ID3D11GeometryShader **ppGeometryShader);\n    HRESULT CreatePixelShader(\n        [in] const void *pShaderBytecode,\n        [in] SIZE_T BytecodeLength,\n        [in] ID3D11ClassLinkage *pClassLinkage,\n        [out] ID3D11PixelShader **ppPixelShader);\n    HRESULT CreateHullShader(\n        [in] const void *pShaderBytecode,\n        [in] SIZE_T BytecodeLength,\n        [in] ID3D11ClassLinkage *pClassLinkage,\n        [out] ID3D11HullShader **ppHullShader);\n    HRESULT CreateDomainShader(\n        [in] const void *pShaderBytecode,\n        [in] SIZE_T BytecodeLength,\n        [in] ID3D11ClassLinkage *pClassLinkage,\n        [out] ID3D11DomainShader **ppDomainShader);\n    HRESULT CreateComputeShader(\n        [in] const void *pShaderBytecode,\n        [in] SIZE_T BytecodeLength,\n        [in] ID3D11ClassLinkage *pClassLinkage,\n        [out] ID3D11ComputeShader **ppComputeShader);\n    HRESULT CreateClassLinkage(\n        [out] ID3D11ClassLinkage **ppLinkage);\n    HRESULT CreateBlendState(\n        [in] const D3D11_BLEND_DESC *pBlendStateDesc,\n        [out] ID3D11BlendState **ppBlendState);\n    HRESULT CreateDepthStencilState(\n        [in] const D3D11_DEPTH_STENCIL_DESC *pDepthStencilDesc,\n        [out] ID3D11DepthStencilState **ppDepthStencilState);\n    HRESULT CreateRasterizerState(\n        [in] const D3D11_RASTERIZER_DESC *pRasterizerDesc,\n        [out] ID3D11RasterizerState **ppRasterizerState);\n    HRESULT CreateSamplerState(\n        [in] const D3D11_SAMPLER_DESC *pSamplerDesc,\n        [out] ID3D11SamplerState **ppSamplerState);\n    HRESULT CreateQuery(\n        [in] const D3D11_QUERY_DESC *pQueryDesc,\n        [out] ID3D11Query **ppQuery);\n    HRESULT CreatePredicate(\n        [in] const D3D11_QUERY_DESC *pPredicateDesc,\n        [out] ID3D11Predicate **ppPredicate);\n    HRESULT CreateCounter(\n        [in] const D3D11_COUNTER_DESC *pCounterDesc,\n        [out] ID3D11Counter **ppCounter);\n    HRESULT CreateDeferredContext(\n        UINT ContextFlags,\n        [out] ID3D11DeviceContext **ppDeferredContext);\n    HRESULT OpenSharedResource(\n        [in] HANDLE hResource,\n        [in] REFIID ReturnedInterface,\n        [out] void  **ppResource);\n    HRESULT CheckFormatSupport(\n        [in] DXGI_FORMAT Format,\n        [out] UINT *pFormatSupport);\n    HRESULT CheckMultisampleQualityLevels(\n        [in] DXGI_FORMAT Format,\n        [in] UINT        SampleCount,\n        [out] UINT *pNumQualityLevels);\n    void CheckCounterInfo(\n        [out] D3D11_COUNTER_INFO *pCounterInfo);\n    HRESULT CheckCounter(\n        [in] const D3D11_COUNTER_DESC *pDesc,\n        [out] D3D11_COUNTER_TYPE *pType,\n        [out] UINT *pActiveCounters,\n        [out] LPSTR szName,\n        [in, out] UINT *pNameLength,\n        [out] LPSTR szUnits,\n        [in, out] UINT *pUnitsLength,\n        [out] LPSTR szDescription,\n        [in, out] UINT *pDescriptionLength);\n    HRESULT CheckFeatureSupport(\n        D3D11_FEATURE Feature,\n        [out] void *pFeatureSupportData,\n        UINT FeatureSupportDataSize);\n    HRESULT GetPrivateData(\n        [in] REFGUID guid,\n        [in, out] UINT *pDataSize,\n        [out] void *pData);\n    HRESULT SetPrivateData(\n        [in] REFGUID guid,\n        [in] UINT DataSize,\n        [in] const void *pData);\n    HRESULT SetPrivateDataInterface(\n        [in] REFGUID guid,\n        [in] const IUnknown *pData);\n    D3D_FEATURE_LEVEL GetFeatureLevel();\n    UINT GetCreationFlags();\n    HRESULT GetDeviceRemovedReason();\n    void GetImmediateContext(\n        [out] ID3D11DeviceContext **ppImmediateContext);\n    HRESULT SetExceptionMode(UINT RaiseFlags);\n    UINT GetExceptionMode();\n}\n\ntypedef enum D3D11_CREATE_DEVICE_FLAG {\n    D3D11_CREATE_DEVICE_SINGLETHREADED  = 0x0001,\n    D3D11_CREATE_DEVICE_DEBUG           = 0x0002,\n    D3D11_CREATE_DEVICE_SWITCH_TO_REF   = 0x0004,\n    D3D11_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS = 0x0008,\n    D3D11_CREATE_DEVICE_BGRA_SUPPORT    = 0x0020,\n    D3D11_CREATE_DEVICE_DEBUGGABLE      = 0x0040,\n    D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY = 0x0080,\n    D3D11_CREATE_DEVICE_DISABLE_GPU_TIMEOUT = 0x0100,\n    D3D11_CREATE_DEVICE_VIDEO_SUPPORT   = 0x0800\n} D3D11_CREATE_DEVICE_FLAG;\n\nconst UINT D3D11_SDK_VERSION = 7;\n\ncpp_quote(\"#include <d3d10_1.h>\")\ncpp_quote(\"#ifndef D3D11_IGNORE_SDK_LAYERS\")\ncpp_quote(\"# include <d3d11sdklayers.h>\")\ncpp_quote(\"#endif\")\ncpp_quote(\"#include <d3d10misc.h>\")\ncpp_quote(\"#include <d3d10shader.h>\")\ncpp_quote(\"#include <d3d10effect.h>\")\ncpp_quote(\"#include <d3d10_1shader.h>\")\n\nconst UINT _FACD3D11 = 0x87c;\ncpp_quote(\"#define MAKE_D3D11_HRESULT(code) MAKE_HRESULT(SEVERITY_ERROR, _FACD3D11, code)\")\n\ncpp_quote(\"typedef HRESULT (WINAPI* PFN_D3D11_CREATE_DEVICE)(IDXGIAdapter*,D3D_DRIVER_TYPE,HMODULE,UINT,\")\ncpp_quote(\"    const D3D_FEATURE_LEVEL*,UINT,UINT,ID3D11Device**,D3D_FEATURE_LEVEL*,ID3D11DeviceContext**);\")\n\ncpp_quote(\"HRESULT WINAPI D3D11CreateDevice(IDXGIAdapter*,D3D_DRIVER_TYPE,HMODULE,UINT,const D3D_FEATURE_LEVEL*,\" )\ncpp_quote(\"    UINT,UINT,ID3D11Device**,D3D_FEATURE_LEVEL*,ID3D11DeviceContext**);\")\n\ncpp_quote(\"typedef HRESULT (WINAPI *PFN_D3D11_CREATE_DEVICE_AND_SWAP_CHAIN)(IDXGIAdapter*,D3D_DRIVER_TYPE,HMODULE,UINT,\")\ncpp_quote(\"    const D3D_FEATURE_LEVEL*,UINT,UINT,const DXGI_SWAP_CHAIN_DESC*,IDXGISwapChain**,ID3D11Device**,\")\ncpp_quote(\"    D3D_FEATURE_LEVEL*,ID3D11DeviceContext**);\")\n\n[local] HRESULT __stdcall D3D11CreateDeviceAndSwapChain(IDXGIAdapter *adapter, D3D_DRIVER_TYPE driver_type,\n        HMODULE swrast, UINT flags, const D3D_FEATURE_LEVEL *feature_levels, UINT levels, UINT sdk_version,\n        const DXGI_SWAP_CHAIN_DESC *swapchain_desc, IDXGISwapChain **swapchain, ID3D11Device **device,\n        D3D_FEATURE_LEVEL *obtained_feature_level, ID3D11DeviceContext **immediate_context);\n"
  },
  {
    "path": "wine/windows/d3d11_1.idl",
    "content": "/*\n * Copyright 2014 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"dxgi1_2.idl\";\nimport \"d3dcommon.idl\";\nimport \"d3d11.idl\";\n\ntypedef enum D3D11_LOGIC_OP\n{\n    D3D11_LOGIC_OP_CLEAR = 0,\n    D3D11_LOGIC_OP_SET,\n    D3D11_LOGIC_OP_COPY,\n    D3D11_LOGIC_OP_COPY_INVERTED,\n    D3D11_LOGIC_OP_NOOP,\n    D3D11_LOGIC_OP_INVERT,\n    D3D11_LOGIC_OP_AND,\n    D3D11_LOGIC_OP_NAND,\n    D3D11_LOGIC_OP_OR,\n    D3D11_LOGIC_OP_NOR,\n    D3D11_LOGIC_OP_XOR,\n    D3D11_LOGIC_OP_EQUIV,\n    D3D11_LOGIC_OP_AND_REVERSE,\n    D3D11_LOGIC_OP_AND_INVERTED,\n    D3D11_LOGIC_OP_OR_REVERSE,\n    D3D11_LOGIC_OP_OR_INVERTED\n} D3D11_LOGIC_OP;\n\ntypedef enum D3D11_COPY_FLAGS\n{\n    D3D11_COPY_NO_OVERWRITE                                                         = 0x00000001,\n    D3D11_COPY_DISCARD                                                              = 0x00000002,\n} D3D11_COPY_FLAGS;\n\ntypedef enum D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG\n{\n    D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED                              = 0x1,\n} D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG;\n\ntypedef enum D3D11_VIDEO_DECODER_CAPS\n{\n    D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE                                             = 0x01,\n    D3D11_VIDEO_DECODER_CAPS_NON_REAL_TIME                                          = 0x02,\n    D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE_DYNAMIC                                     = 0x04,\n    D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE_REQUIRED                                    = 0x08,\n    D3D11_VIDEO_DECODER_CAPS_UNSUPPORTED                                            = 0x10,\n} D3D11_VIDEO_DECODER_CAPS;\n\ntypedef enum D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINTS\n{\n    D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_MULTIPLANE_OVERLAY_ROTATION                 = 0x01,\n    D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_MULTIPLANE_OVERLAY_RESIZE                   = 0x02,\n    D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_MULTIPLANE_OVERLAY_COLOR_SPACE_CONVERSION   = 0x04,\n    D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_TRIPLE_BUFFER_OUTPUT                        = 0x08,\n} D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINTS;\n\ntypedef enum D3D11_CRYPTO_SESSION_STATUS\n{\n    D3D11_CRYPTO_SESSION_STATUS_OK                                                  = 0x0,\n    D3D11_CRYPTO_SESSION_STATUS_KEY_LOST                                            = 0x1,\n    D3D11_CRYPTO_SESSION_STATUS_KEY_AND_CONTENT_LOST                                = 0x2,\n} D3D11_CRYPTO_SESSION_STATUS;\n\ntypedef struct D3D11_RENDER_TARGET_BLEND_DESC1\n{\n    BOOL           BlendEnable;\n    BOOL           LogicOpEnable;\n    D3D11_BLEND    SrcBlend;\n    D3D11_BLEND    DestBlend;\n    D3D11_BLEND_OP BlendOp;\n    D3D11_BLEND    SrcBlendAlpha;\n    D3D11_BLEND    DestBlendAlpha;\n    D3D11_BLEND_OP BlendOpAlpha;\n    D3D11_LOGIC_OP LogicOp;\n    UINT8          RenderTargetWriteMask;\n} D3D11_RENDER_TARGET_BLEND_DESC1;\n\ntypedef struct D3D11_BLEND_DESC1\n{\n    BOOL                            AlphaToCoverageEnable;\n    BOOL                            IndependentBlendEnable;\n    D3D11_RENDER_TARGET_BLEND_DESC1 RenderTarget[D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT];\n} D3D11_BLEND_DESC1;\n\ntypedef struct D3D11_RASTERIZER_DESC1\n{\n    D3D11_FILL_MODE FillMode;\n    D3D11_CULL_MODE CullMode;\n    BOOL            FrontCounterClockwise;\n    INT             DepthBias;\n    FLOAT           DepthBiasClamp;\n    FLOAT           SlopeScaledDepthBias;\n    BOOL            DepthClipEnable;\n    BOOL            ScissorEnable;\n    BOOL            MultisampleEnable;\n    BOOL            AntialiasedLineEnable;\n    UINT            ForcedSampleCount;\n} D3D11_RASTERIZER_DESC1;\n\ntypedef struct D3D11_VIDEO_DECODER_SUB_SAMPLE_MAPPING_BLOCK\n{\n    UINT ClearSize;\n    UINT EncryptedSize;\n} D3D11_VIDEO_DECODER_SUB_SAMPLE_MAPPING_BLOCK;\n\ntypedef struct D3D11_VIDEO_DECODER_BUFFER_DESC1\n{\n    D3D11_VIDEO_DECODER_BUFFER_TYPE BufferType;\n    UINT DataOffset;\n    UINT DataSize;\n    void *pIV;\n    UINT IVSize;\n    D3D11_VIDEO_DECODER_SUB_SAMPLE_MAPPING_BLOCK *pSubSampleMappingBlock;\n    UINT SubSampleMappingCount;\n} D3D11_VIDEO_DECODER_BUFFER_DESC1;\n\ntypedef struct D3D11_VIDEO_DECODER_BEGIN_FRAME_CRYPTO_SESSION\n{\n    ID3D11CryptoSession *pCryptoSession;\n    UINT BlobSize;\n    void *pBlob;\n    GUID *pKeyInfoId;\n    UINT PrivateDataSize;\n    void *pPrivateData;\n} D3D11_VIDEO_DECODER_BEGIN_FRAME_CRYPTO_SESSION;\n\ntypedef struct D3D11_VIDEO_PROCESSOR_STREAM_BEHAVIOR_HINT\n{\n    BOOL Enable;\n    UINT Width;\n    UINT Height;\n    DXGI_FORMAT Format;\n} D3D11_VIDEO_PROCESSOR_STREAM_BEHAVIOR_HINT;\n\ntypedef struct D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA\n{\n    UINT PrivateDataSize;\n    UINT HWProtectionDataSize;\n    BYTE pbInput[4];\n} D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA;\n\ntypedef struct D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA\n{\n    UINT PrivateDataSize;\n    UINT MaxHWProtectionDataSize;\n    UINT HWProtectionDataSize;\n    UINT64 TransportTime;\n    UINT64 ExecutionTime;\n    BYTE pbOutput[4];\n} D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA;\n\ntypedef struct D3D11_KEY_EXCHANGE_HW_PROTECTION_DATA\n{\n    UINT HWProtectionFunctionID;\n    D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA *pInputData;\n    D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA *pOutputData;\n    HRESULT Status;\n} D3D11_KEY_EXCHANGE_HW_PROTECTION_DATA;\n\ntypedef struct D3D11_VIDEO_SAMPLE_DESC\n{\n    UINT Width;\n    UINT Height;\n    DXGI_FORMAT Format;\n    DXGI_COLOR_SPACE_TYPE ColorSpace;\n} D3D11_VIDEO_SAMPLE_DESC;\n\n[\n    uuid(cc86fabe-da55-401d-85e7-e3c9de2877e9),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11BlendState1 : ID3D11BlendState\n{\n    void GetDesc1(D3D11_BLEND_DESC1 *pDesc);\n}\n\n[\n    uuid(5c1e0d8a-7c23-48f9-8c59-a92958ceff11),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3DDeviceContextState : ID3D11DeviceChild\n{\n}\n\n[\n    uuid(bb2c6faa-b5fb-4082-8e6b-388b8cfa90e1),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11DeviceContext1 : ID3D11DeviceContext\n{\n    void CopySubresourceRegion1(\n            ID3D11Resource *pDstResource,\n            UINT DstSubresource,\n            UINT DstX,\n            UINT DstY,\n            UINT DstZ,\n            ID3D11Resource *pSrcResource,\n            UINT SrcSubresource,\n            const D3D11_BOX *pSrcBox,\n            UINT CopyFlags);\n\n    void UpdateSubresource1(\n            ID3D11Resource *pDstResource,\n            UINT DstSubresource,\n            const D3D11_BOX *pDstBox,\n            const void *pSrcData,\n            UINT SrcRowPitch,\n            UINT SrcDepthPitch,\n            UINT CopyFlags);\n\n    void DiscardResource(ID3D11Resource *pResource);\n\n    void DiscardView(ID3D11View *pResourceView);\n\n    void VSSetConstantBuffers1(\n            UINT StartSlot,\n            UINT NumBuffers,\n            ID3D11Buffer *const *ppConstantBuffers,\n            const UINT *pFirstConstant,\n            const UINT *pNumConstants);\n\n    void HSSetConstantBuffers1(\n            UINT StartSlot,\n            UINT NumBuffers,\n            ID3D11Buffer *const *ppConstantBuffers,\n            const UINT *pFirstConstant,\n            const UINT *pNumConstants);\n\n    void DSSetConstantBuffers1(\n            UINT StartSlot,\n            UINT NumBuffers,\n            ID3D11Buffer *const *ppConstantBuffers,\n            const UINT *pFirstConstant,\n            const UINT *pNumConstants);\n\n    void GSSetConstantBuffers1(\n            UINT StartSlot,\n            UINT NumBuffers,\n            ID3D11Buffer *const *ppConstantBuffers,\n            const UINT *pFirstConstant,\n            const UINT *pNumConstants);\n\n    void PSSetConstantBuffers1(\n            UINT StartSlot,\n            UINT NumBuffers,\n            ID3D11Buffer *const *ppConstantBuffers,\n            const UINT *pFirstConstant,\n            const UINT *pNumConstants);\n\n    void CSSetConstantBuffers1(\n            UINT StartSlot,\n            UINT NumBuffers,\n            ID3D11Buffer *const *ppConstantBuffers,\n            const UINT *pFirstConstant,\n            const UINT *pNumConstants);\n\n    void VSGetConstantBuffers1(\n            UINT StartSlot,\n            UINT NumBuffers,\n            ID3D11Buffer **ppConstantBuffers,\n            UINT *pFirstConstant,\n            UINT *pNumConstants);\n\n    void HSGetConstantBuffers1(\n            UINT StartSlot,\n            UINT NumBuffers,\n            ID3D11Buffer **ppConstantBuffers,\n            UINT *pFirstConstant,\n            UINT *pNumConstants);\n\n    void DSGetConstantBuffers1(\n            UINT StartSlot,\n            UINT NumBuffers,\n            ID3D11Buffer **ppConstantBuffers,\n            UINT *pFirstConstant,\n            UINT *pNumConstants);\n\n    void GSGetConstantBuffers1(\n            UINT StartSlot,\n            UINT NumBuffers,\n            ID3D11Buffer **ppConstantBuffers,\n            UINT *pFirstConstant,\n            UINT *pNumConstants);\n\n    void PSGetConstantBuffers1(\n            UINT StartSlot,\n            UINT NumBuffers,\n            ID3D11Buffer **ppConstantBuffers,\n            UINT *pFirstConstant,\n            UINT *pNumConstants);\n\n    void CSGetConstantBuffers1(\n            UINT StartSlot,\n            UINT NumBuffers,\n            ID3D11Buffer **ppConstantBuffers,\n            UINT *pFirstConstant,\n            UINT *pNumConstants);\n\n    void SwapDeviceContextState(\n            ID3DDeviceContextState *pState,\n            ID3DDeviceContextState **ppPreviousState);\n\n    void ClearView(\n            ID3D11View *pView,\n            const FLOAT Color[4],\n            const D3D11_RECT *pRect,\n            UINT NumRects);\n\n    void DiscardView1(\n            ID3D11View *pResourceView,\n            const D3D11_RECT *pRects,\n            UINT NumRects);\n}\n\n[\n    uuid(a7f026da-a5f8-4487-a564-15e34357651e),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11VideoContext1 : ID3D11VideoContext\n{\n    HRESULT SubmitDecoderBuffers1(\n        ID3D11VideoDecoder *decoder,\n        UINT buffer_count,\n        const D3D11_VIDEO_DECODER_BUFFER_DESC1 *buffer_desc\n    );\n    HRESULT GetDataForNewHardwareKey(\n        ID3D11CryptoSession *session,\n        UINT input_size,\n        const void *input_data,\n        UINT64 *output_data\n    );\n    HRESULT CheckCryptoSessionStatus(\n        ID3D11CryptoSession *session,\n        D3D11_CRYPTO_SESSION_STATUS *status\n    );\n    HRESULT DecoderEnableDownsampling(\n        ID3D11VideoDecoder *decoder,\n        DXGI_COLOR_SPACE_TYPE colour_space,\n        const D3D11_VIDEO_SAMPLE_DESC *output_desc,\n        UINT reference_frame_count\n    );\n    HRESULT DecoderUpdateDownsampling(\n        ID3D11VideoDecoder *decoder,\n        const D3D11_VIDEO_SAMPLE_DESC *output_desc\n    );\n    void VideoProcessorSetOutputColorSpace1(\n        ID3D11VideoProcessor *processor,\n        DXGI_COLOR_SPACE_TYPE colour_space\n    );\n    void VideoProcessorSetOutputShaderUsage(\n        ID3D11VideoProcessor *processor,\n        BOOL shader_usage\n    );\n    void VideoProcessorGetOutputColorSpace1(\n        ID3D11VideoProcessor *processor,\n        DXGI_COLOR_SPACE_TYPE *colour_space\n    );\n    void VideoProcessorGetOutputShaderUsage(\n        ID3D11VideoProcessor *processor,\n        BOOL *shader_usage\n    );\n    void VideoProcessorSetStreamColorSpace1(\n        ID3D11VideoProcessor *processor,\n        UINT stream_index,\n        DXGI_COLOR_SPACE_TYPE colour_space\n    );\n    void VideoProcessorSetStreamMirror(\n        ID3D11VideoProcessor *processor,\n        UINT stream_index,\n        BOOL enable,\n        BOOL flip_horizontal,\n        BOOL flip_vertical\n    );\n    void VideoProcessorGetStreamColorSpace1(\n        ID3D11VideoProcessor *processor,\n        UINT stream_index,\n        DXGI_COLOR_SPACE_TYPE *colour_space\n    );\n    void VideoProcessorGetStreamMirror(\n        ID3D11VideoProcessor *processor,\n        UINT stream_index,\n        BOOL *enable,\n        BOOL *flip_horizontal,\n        BOOL *flip_vertical\n    );\n    HRESULT VideoProcessorGetBehaviorHints(\n        ID3D11VideoProcessor *processor,\n        UINT output_width,\n        UINT output_height,\n        DXGI_FORMAT output_format,\n        UINT stream_count,\n        const D3D11_VIDEO_PROCESSOR_STREAM_BEHAVIOR_HINT *streams,\n        UINT *behaviour_hints\n    );\n}\n\n[\n    uuid(29da1d51-1321-4454-804b-f5fc9f861f0f),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11VideoDevice1 : ID3D11VideoDevice\n{\n    HRESULT GetCryptoSessionPrivateDataSize(\n        const GUID *crypto_type,\n        const GUID *decoder_profile,\n        const GUID *key_exchange_type,\n        UINT *input_size,\n        UINT *output_size\n    );\n    HRESULT GetVideoDecoderCaps(\n        const GUID *decoder_profile,\n        UINT sample_width,\n        UINT sample_height,\n        const DXGI_RATIONAL *framerate,\n        UINT bitrate,\n        const GUID *crypto_type,\n        UINT *decoder_caps\n    );\n    HRESULT CheckVideoDecoderDownsampling(\n        const D3D11_VIDEO_DECODER_DESC *input_desc,\n        DXGI_COLOR_SPACE_TYPE input_colour_space,\n        const D3D11_VIDEO_DECODER_CONFIG *input_config,\n        const DXGI_RATIONAL *framerate,\n        const D3D11_VIDEO_SAMPLE_DESC *output_desc,\n        BOOL *supported,\n        BOOL *real_time_hint\n    );\n    HRESULT RecommendVideoDecoderDownsampleParameters(\n        const D3D11_VIDEO_DECODER_DESC *input_desc,\n        DXGI_COLOR_SPACE_TYPE input_colour_space,\n        const D3D11_VIDEO_DECODER_CONFIG *input_config,\n        const DXGI_RATIONAL *framerate,\n        D3D11_VIDEO_SAMPLE_DESC *recommended_output_desc\n    );\n}\n\n[\n    uuid(465217f2-5568-43cf-b5b9-f61d54531ca1),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11VideoProcessorEnumerator1 : ID3D11VideoProcessorEnumerator\n{\n    HRESULT CheckVideoProcessorFormatConversion(\n        DXGI_FORMAT input_format,\n        DXGI_COLOR_SPACE_TYPE input_colour_space,\n        DXGI_FORMAT output_format,\n        DXGI_COLOR_SPACE_TYPE output_colour_space,\n        BOOL *supported\n    );\n}\n\n[\n    uuid(b2daad8b-03d4-4dbf-95eb-32ab4b63d0ab),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3DUserDefinedAnnotation : IUnknown\n{\n    INT BeginEvent(LPCWSTR Name);\n    INT EndEvent();\n    void SetMarker(LPCWSTR Name);\n    BOOL GetStatus();\n}\n\n[\n    uuid(1217d7a6-5039-418c-b042-9cbe256afd6e),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11RasterizerState1 : ID3D11RasterizerState\n{\n    void GetDesc1(D3D11_RASTERIZER_DESC1 *pDesc);\n}\n\n[\n    uuid(a04bfb29-08ef-43d6-a49c-a9bdbdcbe686),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11Device1 : ID3D11Device\n{\n    void GetImmediateContext1(\n            ID3D11DeviceContext1 **ppImmediateContext);\n\n    HRESULT CreateDeferredContext1(\n            UINT ContextFlags,\n            ID3D11DeviceContext1 **ppDeferredContext);\n\n    HRESULT CreateBlendState1(\n            const D3D11_BLEND_DESC1 *pBlendStateDesc,\n            ID3D11BlendState1 **ppBlendState);\n\n    HRESULT CreateRasterizerState1(\n            const D3D11_RASTERIZER_DESC1 *pRasterizerDesc,\n            ID3D11RasterizerState1 **ppRasterizerState);\n\n    HRESULT CreateDeviceContextState(\n            UINT Flags,\n            const D3D_FEATURE_LEVEL *pFeatureLevels,\n            UINT FeatureLevels,\n            UINT SDKVersion,\n            REFIID EmulatedInterface,\n            D3D_FEATURE_LEVEL *pChosenFeatureLevel,\n            ID3DDeviceContextState **ppContextState);\n\n    HRESULT OpenSharedResource1(\n            HANDLE hResource,\n            REFIID returnedInterface,\n            void **ppResource);\n\n     HRESULT OpenSharedResourceByName(\n            LPCWSTR lpName,\n            DWORD dwDesiredAccess,\n            REFIID returnedInterface,\n            void **ppResource);\n}\n"
  },
  {
    "path": "wine/windows/d3d11_2.idl",
    "content": "/*\n * Copyright 2017 Ihsan Akmal\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"dxgi1_3.idl\";\nimport \"d3dcommon.idl\";\nimport \"d3d11_1.idl\";\n\nconst UINT D3D11_PACKED_TILE = 0xffffffff;\n\ntypedef enum D3D11_TILE_MAPPING_FLAG\n{\n    D3D11_TILE_MAPPING_NO_OVERWRITE = 0x1,\n} D3D11_TILE_MAPPING_FLAG;\n\ntypedef enum D3D11_TILE_RANGE_FLAG\n{\n    D3D11_TILE_RANGE_NULL = 0x1,\n    D3D11_TILE_RANGE_SKIP = 0x2,\n    D3D11_TILE_RANGE_REUSE_SINGLE_TILE = 0x4,\n} D3D11_TILE_RANGE_FLAG;\n\ntypedef enum D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_FLAG\n{\n    D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_TILED_RESOURCE = 0x1,\n} D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_FLAG;\n\ntypedef enum D3D11_TILE_COPY_FLAG\n{\n    D3D11_TILE_COPY_NO_OVERWRITE = 0x1,\n    D3D11_TILE_COPY_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE = 0x2,\n    D3D11_TILE_COPY_SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER = 0x4,\n} D3D11_TILE_COPY_FLAG;\n\ntypedef struct D3D11_TILED_RESOURCE_COORDINATE\n{\n    UINT X;\n    UINT Y;\n    UINT Z;\n    UINT Subresource;\n} D3D11_TILED_RESOURCE_COORDINATE;\n\ntypedef struct D3D11_TILE_REGION_SIZE\n{\n    UINT NumTiles;\n    BOOL bUseBox;\n    UINT Width;\n    UINT16 Height;\n    UINT16 Depth;\n} D3D11_TILE_REGION_SIZE;\n\ntypedef struct D3D11_SUBRESOURCE_TILING\n{\n    UINT WidthInTiles;\n    UINT16 HeightInTiles;\n    UINT16 DepthInTiles;\n    UINT StartTileIndexInOverallResource;\n} D3D11_SUBRESOURCE_TILING;\n\ntypedef struct D3D11_TILE_SHAPE\n{\n    UINT WidthInTexels;\n    UINT HeightInTexels;\n    UINT DepthInTexels;\n} D3D11_TILE_SHAPE;\n\ntypedef struct D3D11_PACKED_MIP_DESC\n{\n    UINT8 NumStandardMips;\n    UINT8 NumPackedMips;\n    UINT NumTilesForPackedMips;\n    UINT StartTileIndexInOverallResource;\n} D3D11_PACKED_MIP_DESC;\n\n[\n    uuid(420d5b32-b90c-4da4-bef0-359f6a24a83a),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11DeviceContext2 : ID3D11DeviceContext1\n{\n    HRESULT UpdateTileMappings(\n        ID3D11Resource *resource,\n        UINT region_count,\n        const D3D11_TILED_RESOURCE_COORDINATE *region_start_coordinates,\n        const D3D11_TILE_REGION_SIZE *region_sizes,\n        ID3D11Buffer *pool,\n        UINT range_count,\n        const UINT *range_flags,\n        const UINT *pool_start_offsets,\n        const UINT *range_tile_counts,\n        UINT flags\n    );\n    HRESULT CopyTileMappings(\n        ID3D11Resource *dst_resource,\n        const D3D11_TILED_RESOURCE_COORDINATE *dst_start_coordinate,\n        ID3D11Resource *src_resource,\n        const D3D11_TILED_RESOURCE_COORDINATE *src_start_coordinate,\n        const D3D11_TILE_REGION_SIZE *region_size,\n        UINT flags\n    );\n    void CopyTiles(\n        ID3D11Resource *resource,\n        const D3D11_TILED_RESOURCE_COORDINATE *start_coordinate,\n        const D3D11_TILE_REGION_SIZE *size,\n        ID3D11Buffer *buffer,\n        UINT64 start_offset,\n        UINT flags\n    );\n    void UpdateTiles(\n        ID3D11Resource *dst_resource,\n        const D3D11_TILED_RESOURCE_COORDINATE *dst_start_coordinate,\n        const D3D11_TILE_REGION_SIZE *dst_region_size,\n        const void *src_data,\n        UINT flags\n    );\n    HRESULT ResizeTilePool(\n        ID3D11Buffer *pool,\n        UINT64 size\n    );\n    void TiledResourceBarrier(\n        ID3D11DeviceChild *before_barrier,\n        ID3D11DeviceChild *after_barrier\n    );\n    BOOL IsAnnotationEnabled();\n    void SetMarkerInt(const WCHAR *label, int data);\n    void BeginEventInt(const WCHAR *label, int data);\n    void EndEvent();\n}\n\n[\n    uuid(9d06dffa-d1e5-4d07-83a8-1bb123f2f841),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11Device2 : ID3D11Device1\n{\n    void GetImmediateContext2(ID3D11DeviceContext2 **context);\n    HRESULT CreateDeferredContext2(UINT flags, ID3D11DeviceContext2 **context);\n    void GetResourceTiling(\n        ID3D11Resource *resource,\n        UINT *tile_count,\n        D3D11_PACKED_MIP_DESC *mip_desc,\n        D3D11_TILE_SHAPE *tile_shape,\n        UINT *subresource_tiling_count,\n        UINT first_subresource_tiling,\n        D3D11_SUBRESOURCE_TILING *subresource_tiling\n    );\n    HRESULT CheckMultisampleQualityLevels1(\n        DXGI_FORMAT format,\n        UINT sample_count,\n        UINT flags,\n        UINT *quality_level_count\n    );\n}\n"
  },
  {
    "path": "wine/windows/d3d11_3.idl",
    "content": "/*\n * Copyright 2017 Ihsan Akmal\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"dxgi1_3.idl\";\nimport \"d3dcommon.idl\";\nimport \"d3d11_2.idl\";\n\ntypedef enum D3D11_CONTEXT_TYPE\n{\n    D3D11_CONTEXT_TYPE_ALL = 0x0,\n    D3D11_CONTEXT_TYPE_3D = 0x1,\n    D3D11_CONTEXT_TYPE_COMPUTE = 0x2,\n    D3D11_CONTEXT_TYPE_COPY = 0x3,\n    D3D11_CONTEXT_TYPE_VIDEO = 0x4,\n} D3D11_CONTEXT_TYPE;\n\ntypedef enum D3D11_TEXTURE_LAYOUT\n{\n    D3D11_TEXTURE_LAYOUT_UNDEFINED = 0x0,\n    D3D11_TEXTURE_LAYOUT_ROW_MAJOR = 0x1,\n    D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE = 0x2,\n} D3D11_TEXTURE_LAYOUT;\n\ntypedef enum D3D11_CONSERVATIVE_RASTERIZATION_MODE\n{\n    D3D11_CONSERVATIVE_RASTERIZATION_MODE_OFF = 0x0,\n    D3D11_CONSERVATIVE_RASTERIZATION_MODE_ON = 0x1,\n} D3D11_CONSERVATIVE_RASTERIZATION_MODE;\n\ntypedef enum D3D11_FENCE_FLAG\n{\n    D3D11_FENCE_FLAG_NONE = 0x1,\n    D3D11_FENCE_FLAG_SHARED = 0x2,\n    D3D11_FENCE_FLAG_SHARED_CROSS_ADAPTER = 0x4,\n} D3D11_FENCE_FLAG;\n\ntypedef struct D3D11_TEXTURE2D_DESC1\n{\n    UINT Width;\n    UINT Height;\n    UINT MipLevels;\n    UINT ArraySize;\n    DXGI_FORMAT Format;\n    DXGI_SAMPLE_DESC SampleDesc;\n    D3D11_USAGE Usage;\n    UINT BindFlags;\n    UINT CPUAccessFlags;\n    UINT MiscFlags;\n    D3D11_TEXTURE_LAYOUT TextureLayout;\n} D3D11_TEXTURE2D_DESC1;\n\ntypedef struct D3D11_TEXTURE3D_DESC1\n{\n    UINT Width;\n    UINT Height;\n    UINT Depth;\n    UINT MipLevels;\n    DXGI_FORMAT Format;\n    D3D11_USAGE Usage;\n    UINT BindFlags;\n    UINT CPUAccessFlags;\n    UINT MiscFlags;\n    D3D11_TEXTURE_LAYOUT TextureLayout;\n} D3D11_TEXTURE3D_DESC1;\n\ntypedef struct D3D11_RASTERIZER_DESC2\n{\n    D3D11_FILL_MODE FillMode;\n    D3D11_CULL_MODE CullMode;\n    BOOL FrontCounterClockwise;\n    int DepthBias;\n    float DepthBiasClamp;\n    float SlopeScaledDepthBias;\n    BOOL DepthClipEnable;\n    BOOL ScissorEnable;\n    BOOL MultisampleEnable;\n    BOOL AntialiasedLineEnable;\n    UINT ForcedSampleCount;\n    D3D11_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster;\n} D3D11_RASTERIZER_DESC2;\n\ntypedef struct D3D11_TEX2D_SRV1\n{\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    UINT PlaneSlice;\n} D3D11_TEX2D_SRV1;\n\ntypedef struct D3D11_TEX2D_ARRAY_SRV1\n{\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    UINT PlaneSlice;\n} D3D11_TEX2D_ARRAY_SRV1;\n\ntypedef struct D3D11_SHADER_RESOURCE_VIEW_DESC1\n{\n    DXGI_FORMAT Format;\n    D3D11_SRV_DIMENSION ViewDimension;\n\n    union\n    {\n        D3D11_BUFFER_SRV Buffer;\n        D3D11_TEX1D_SRV Texture1D;\n        D3D11_TEX1D_ARRAY_SRV Texture1DArray;\n        D3D11_TEX2D_SRV1 Texture2D;\n        D3D11_TEX2D_ARRAY_SRV1 Texture2DArray;\n        D3D11_TEX2DMS_SRV Texture2DMS;\n        D3D11_TEX2DMS_ARRAY_SRV Texture2DMSArray;\n        D3D11_TEX3D_SRV Texture3D;\n        D3D11_TEXCUBE_SRV TextureCube;\n        D3D11_TEXCUBE_ARRAY_SRV TextureCubeArray;\n        D3D11_BUFFEREX_SRV BufferEx;\n    };\n} D3D11_SHADER_RESOURCE_VIEW_DESC1;\n\ntypedef struct D3D11_TEX2D_RTV1\n{\n    UINT MipSlice;\n    UINT PlaneSlice;\n} D3D11_TEX2D_RTV1;\n\ntypedef struct D3D11_TEX2D_ARRAY_RTV1\n{\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    UINT PlaneSlice;\n} D3D11_TEX2D_ARRAY_RTV1;\n\ntypedef struct D3D11_RENDER_TARGET_VIEW_DESC1\n{\n    DXGI_FORMAT Format;\n    D3D11_RTV_DIMENSION ViewDimension;\n\n    union\n    {\n        D3D11_BUFFER_RTV Buffer;\n        D3D11_TEX1D_RTV Texture1D;\n        D3D11_TEX1D_ARRAY_RTV Texture1DArray;\n        D3D11_TEX2D_RTV1 Texture2D;\n        D3D11_TEX2D_ARRAY_RTV1 Texture2DArray;\n        D3D11_TEX2DMS_RTV Texture2DMS;\n        D3D11_TEX2DMS_ARRAY_RTV Texture2DMSArray;\n        D3D11_TEX3D_RTV Texture3D;\n    };\n} D3D11_RENDER_TARGET_VIEW_DESC1;\n\ntypedef struct D3D11_TEX2D_UAV1\n{\n    UINT MipSlice;\n    UINT PlaneSlice;\n} D3D11_TEX2D_UAV1;\n\ntypedef struct D3D11_TEX2D_ARRAY_UAV1\n{\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    UINT PlaneSlice;\n} D3D11_TEX2D_ARRAY_UAV1;\n\ntypedef struct D3D11_UNORDERED_ACCESS_VIEW_DESC1\n{\n    DXGI_FORMAT Format;\n    D3D11_UAV_DIMENSION ViewDimension;\n\n    union\n    {\n        D3D11_BUFFER_UAV Buffer;\n        D3D11_TEX1D_UAV Texture1D;\n        D3D11_TEX1D_ARRAY_UAV Texture1DArray;\n        D3D11_TEX2D_UAV1 Texture2D;\n        D3D11_TEX2D_ARRAY_UAV1 Texture2DArray;\n        D3D11_TEX3D_UAV Texture3D;\n    };\n} D3D11_UNORDERED_ACCESS_VIEW_DESC1;\n\ntypedef struct D3D11_QUERY_DESC1\n{\n    D3D11_QUERY Query;\n    UINT MiscFlags;\n    D3D11_CONTEXT_TYPE ContextType;\n} D3D11_QUERY_DESC1;\n\n[\n    uuid(51218251-1e33-4617-9ccb-4d3a4367e7bb),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11Texture2D1 : ID3D11Texture2D\n{\n    void GetDesc1(D3D11_TEXTURE2D_DESC1 *desc);\n}\n\n[\n    uuid(0c711683-2853-4846-9bb0-f3e60639e46a),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11Texture3D1 : ID3D11Texture3D\n{\n    void GetDesc1(D3D11_TEXTURE3D_DESC1 *desc);\n}\n\n[\n    uuid(6fbd02fb-209f-46c4-b059-2ed15586a6ac),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11RasterizerState2 : ID3D11RasterizerState1\n{\n    void GetDesc2(D3D11_RASTERIZER_DESC2 *desc);\n}\n\n[\n    uuid(91308b87-9040-411d-8c67-c39253ce3802),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11ShaderResourceView1 : ID3D11ShaderResourceView\n{\n    void GetDesc1(D3D11_SHADER_RESOURCE_VIEW_DESC1 *desc);\n}\n\n[\n    uuid(ffbe2e23-f011-418a-ac56-5ceed7c5b94b),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11RenderTargetView1 : ID3D11RenderTargetView\n{\n    void GetDesc1(D3D11_RENDER_TARGET_VIEW_DESC1 *desc);\n}\n\n[\n    uuid(7b3b6153-a886-4544-ab37-6537c8500403),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11UnorderedAccessView1 : ID3D11UnorderedAccessView\n{\n    void GetDesc1(D3D11_UNORDERED_ACCESS_VIEW_DESC1 *desc);\n}\n\n[\n    uuid(631b4766-36dc-461d-8db6-c47e13e60916),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11Query1 : ID3D11Query\n{\n    void GetDesc1(D3D11_QUERY_DESC1 *desc);\n}\n\n[\n    uuid(b4e3c01d-e79e-4637-91b2-510e9f4c9b8f),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11DeviceContext3 : ID3D11DeviceContext2\n{\n    void Flush1(D3D11_CONTEXT_TYPE type, HANDLE event);\n    void SetHardwareProtectionState(BOOL enable);\n    void GetHardwareProtectionState(BOOL *enable);\n}\n\n[\n    uuid(affde9d1-1df7-4bb7-8a34-0f46251dab80),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11Fence : ID3D11DeviceChild\n{\n    HRESULT CreateSharedHandle(\n        const SECURITY_ATTRIBUTES *attributes,\n        DWORD access,\n        const WCHAR *name,\n        HANDLE *handle\n    );\n    UINT64 GetCompletedValue();\n    HRESULT SetEventOnCompletion(\n        UINT64 value,\n        HANDLE event\n    );\n}\n\n[\n    uuid(917600da-f58c-4c33-98d8-3e15b390fa24),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11DeviceContext4 : ID3D11DeviceContext3\n{\n    HRESULT Signal(ID3D11Fence *fence, UINT64 value);\n    HRESULT Wait(ID3D11Fence *fence, UINT64 value);\n}\n\n[\n    uuid(a05c8c37-d2c6-4732-b3a0-9ce0b0dc9ae6),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11Device3 : ID3D11Device2\n{\n    HRESULT CreateTexture2D1(\n        const D3D11_TEXTURE2D_DESC1 *desc,\n        const D3D11_SUBRESOURCE_DATA *initial_data,\n        ID3D11Texture2D1 **texture\n    );\n    HRESULT CreateTexture3D1(\n        const D3D11_TEXTURE3D_DESC1 *desc,\n        const D3D11_SUBRESOURCE_DATA *initial_data,\n        ID3D11Texture3D1 **texture\n    );\n    HRESULT CreateRasterizerState2(\n        const D3D11_RASTERIZER_DESC2 *desc,\n        ID3D11RasterizerState2 **state\n    );\n    HRESULT CreateShaderResourceView1(\n        ID3D11Resource *resource,\n        const D3D11_SHADER_RESOURCE_VIEW_DESC1 *desc,\n        ID3D11ShaderResourceView1 **view\n    );\n    HRESULT CreateUnorderedAccessView1(\n        ID3D11Resource *resource,\n        const D3D11_UNORDERED_ACCESS_VIEW_DESC1 *desc,\n        ID3D11UnorderedAccessView1 **view\n    );\n    HRESULT CreateRenderTargetView1(\n        ID3D11Resource *resource,\n        const D3D11_RENDER_TARGET_VIEW_DESC1 *desc,\n        ID3D11RenderTargetView1 **view\n    );\n    HRESULT CreateQuery1(const D3D11_QUERY_DESC1 *desc, ID3D11Query1 **query);\n    void GetImmediateContext3(ID3D11DeviceContext3 **context);\n    HRESULT CreateDeferredContext3(UINT flags, ID3D11DeviceContext3 **context);\n    void WriteToSubresource(\n        ID3D11Resource *dst_resource,\n        UINT dst_subresource,\n        const D3D11_BOX *dst_box,\n        const void *src_data,\n        UINT src_row_pitch,\n        UINT src_depth_pitch\n    );\n    void ReadFromSubresource(\n        void *dst_data,\n        UINT dst_row_pitch,\n        UINT dst_depth_pitch,\n        ID3D11Resource *src_resource,\n        UINT src_subresource,\n        const D3D11_BOX *src_box\n    );\n}\n"
  },
  {
    "path": "wine/windows/d3d11_4.idl",
    "content": "/*\n * Copyright 2017 Ihsan Akmal\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n*/\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"dxgi1_5.idl\";\nimport \"d3dcommon.idl\";\nimport \"d3d11_3.idl\";\n\ntypedef struct D3D11_FEATURE_DATA_D3D11_OPTIONS4\n{\n    BOOL ExtendedNV12SharedTextureSupported;\n} D3D11_FEATURE_DATA_D3D11_OPTIONS4;\n\n[\n    uuid(8992ab71-02e6-4b8d-ba48-b056dcda42c4),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11Device4 : ID3D11Device3\n{\n    HRESULT RegisterDeviceRemovedEvent(\n        [in] HANDLE event,\n        [out] DWORD *cookie\n    );\n    void UnregisterDeviceRemoved(\n        [in] DWORD cookie\n    );\n}\n\n[\n    uuid(8ffde202-a0e7-45df-9e01-e837801b5ea0),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11Device5 : ID3D11Device4\n{\n    HRESULT OpenSharedFence(\n        [in] HANDLE handle,\n        [in] REFIID iid,\n        [out] void **fence\n    );\n    HRESULT CreateFence(\n        [in] UINT64 initial_value,\n        [in] D3D11_FENCE_FLAG flags,\n        [in] REFIID iid,\n        [out] void **fence\n    );\n}\n\n[\n    uuid(9b7e4e00-342c-4106-a19f-4f2704f689f0),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11Multithread : IUnknown\n{\n    void Enter();\n    void Leave();\n    BOOL SetMultithreadProtected(\n        [in] BOOL enable\n    );\n    BOOL GetMultithreadProtected();\n}\n\n[\n    uuid(c4e7374c-6243-4d1b-ae87-52b4f740e261),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11VideoContext2 : ID3D11VideoContext1\n{\n    void VideoProcessorSetOutputHDRMetaData(\n        [in] ID3D11VideoProcessor *processor,\n        [in] DXGI_HDR_METADATA_TYPE type,\n        [in] UINT size,\n        [in] const void *meta_data\n    );\n    void VideoProcessorGetOutputHDRMetaData(\n        [in] ID3D11VideoProcessor *processor,\n        [out] DXGI_HDR_METADATA_TYPE *type,\n        [in] UINT size,\n        [out] void *meta_data\n    );\n\n    void VideoProcessorSetStreamHDRMetaData(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_index,\n        [in] DXGI_HDR_METADATA_TYPE type,\n        [in] UINT size,\n        [in] const void *meta_data\n    );\n\n    void VideoProcessorGetStreamHDRMetaData(\n        [in] ID3D11VideoProcessor *processor,\n        [in] UINT stream_index,\n        [out] DXGI_HDR_METADATA_TYPE *type,\n        [in] UINT size,\n        [out] void *meta_data\n    );\n}\n"
  },
  {
    "path": "wine/windows/d3d11on12.idl",
    "content": "/*\n * Copyright 2018 Józef Kucia\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"d3d11.idl\";\nimport \"d3d12.idl\";\n\ntypedef struct D3D11_RESOURCE_FLAGS\n{\n    UINT BindFlags;\n    UINT MiscFlags;\n    UINT CPUAccessFlags;\n    UINT StructureByteStride;\n} D3D11_RESOURCE_FLAGS;\n\n[\n    uuid(85611e73-70a9-490e-9614-a9e302777904),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11On12Device : IUnknown\n{\n    HRESULT CreateWrappedResource(IUnknown *d3d12_resource,\n            const D3D11_RESOURCE_FLAGS *flags,\n            D3D12_RESOURCE_STATES input_state,\n            D3D12_RESOURCE_STATES output_state,\n            REFIID iid, void **d3d11_resource);\n\n    void ReleaseWrappedResources(ID3D11Resource * const *resources, UINT count);\n\n    void AcquireWrappedResources(ID3D11Resource * const *resources, UINT count);\n}\n\n[local] HRESULT __stdcall D3D11On12CreateDevice(IUnknown *device, UINT flags,\n        const D3D_FEATURE_LEVEL *feature_levels, UINT feature_level_count,\n        IUnknown * const *queues, UINT queue_count, UINT node_mask,\n        ID3D11Device **d3d11_device, ID3D11DeviceContext **d3d11_immediate_context,\n        D3D_FEATURE_LEVEL *obtained_feature_level);\n\ntypedef HRESULT (__stdcall *PFN_D3D11ON12_CREATE_DEVICE)(IUnknown *device, UINT flags,\n        const D3D_FEATURE_LEVEL *feature_levels, UINT feature_level_count,\n        IUnknown * const *queues, UINT queue_count, UINT node_mask,\n        ID3D11Device **d3d11_device, ID3D11DeviceContext **d3d11_immediate_context,\n        D3D_FEATURE_LEVEL *obtained_feature_level);\n"
  },
  {
    "path": "wine/windows/d3d11sdklayers.idl",
    "content": "/*\n * Copyright 2013 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"d3d11.idl\";\n\ntypedef enum D3D11_MESSAGE_CATEGORY {\n    D3D11_MESSAGE_CATEGORY_APPLICATION_DEFINED,\n    D3D11_MESSAGE_CATEGORY_MISCELLANEOUS,\n    D3D11_MESSAGE_CATEGORY_INITIALIZATION,\n    D3D11_MESSAGE_CATEGORY_CLEANUP,\n    D3D11_MESSAGE_CATEGORY_COMPILATION,\n    D3D11_MESSAGE_CATEGORY_STATE_CREATION,\n    D3D11_MESSAGE_CATEGORY_STATE_SETTING,\n    D3D11_MESSAGE_CATEGORY_STATE_GETTING,\n    D3D11_MESSAGE_CATEGORY_RESOURCE_MANIPULATION,\n    D3D11_MESSAGE_CATEGORY_EXECUTION,\n    D3D11_MESSAGE_CATEGORY_SHADER\n} D3D11_MESSAGE_CATEGORY;\n\ntypedef enum D3D11_MESSAGE_SEVERITY {\n    D3D11_MESSAGE_SEVERITY_CORRUPTION,\n    D3D11_MESSAGE_SEVERITY_ERROR,\n    D3D11_MESSAGE_SEVERITY_WARNING,\n    D3D11_MESSAGE_SEVERITY_INFO,\n    D3D11_MESSAGE_SEVERITY_MESSAGE\n} D3D11_MESSAGE_SEVERITY;\n\ntypedef enum D3D11_MESSAGE_ID {\n    D3D11_MESSAGE_ID_UNKNOWN = 0,\n    D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_HAZARD,\n    D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_HAZARD,\n    D3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_HAZARD,\n    D3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_HAZARD,\n    D3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_HAZARD,\n    D3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_HAZARD,\n    D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_HAZARD,\n    D3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_HAZARD,\n    D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETS_HAZARD,\n    D3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_HAZARD,\n    D3D11_MESSAGE_ID_STRING_FROM_APPLICATION,\n    D3D11_MESSAGE_ID_CORRUPTED_THIS,\n    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER1,\n    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER2,\n    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER3,\n    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER4,\n    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER5,\n    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER6,\n    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER7,\n    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER8,\n    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER9,\n    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER10,\n    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER11,\n    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER12,\n    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER13,\n    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER14,\n    D3D11_MESSAGE_ID_CORRUPTED_PARAMETER15,\n    D3D11_MESSAGE_ID_CORRUPTED_MULTITHREADING,\n    D3D11_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY,\n    D3D11_MESSAGE_ID_IASETINPUTLAYOUT_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_IASETINDEXBUFFER_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_VSSETSHADER_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_VSSETSHADERRESOURCES_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_VSSETSAMPLERS_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_GSSETSHADER_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_GSSETSHADERRESOURCES_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_GSSETSAMPLERS_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_SOSETTARGETS_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_PSSETSHADER_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_PSSETSHADERRESOURCES_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_PSSETSAMPLERS_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_RSSETSTATE_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_OMSETBLENDSTATE_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_OMSETDEPTHSTENCILSTATE_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_OMSETRENDERTARGETS_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_SETPREDICATION_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_GETPRIVATEDATA_MOREDATA,\n    D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA,\n    D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDIUNKNOWN,\n    D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFLAGS,\n    D3D11_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS,\n    D3D11_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY,\n    D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDFORMAT,\n    D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSAMPLES,\n    D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDUSAGE,\n    D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDBINDFLAGS,\n    D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDCPUACCESSFLAGS,\n    D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDMISCFLAGS,\n    D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCPUACCESSFLAGS,\n    D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDBINDFLAGS,\n    D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDINITIALDATA,\n    D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDDIMENSIONS,\n    D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMIPLEVELS,\n    D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMISCFLAGS,\n    D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDARG_RETURN,\n    D3D11_MESSAGE_ID_CREATEBUFFER_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_CREATEBUFFER_NULLDESC,\n    D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCONSTANTBUFFERBINDINGS,\n    D3D11_MESSAGE_ID_CREATEBUFFER_LARGEALLOCATION,\n    D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDFORMAT,\n    D3D11_MESSAGE_ID_CREATETEXTURE1D_UNSUPPORTEDFORMAT,\n    D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDSAMPLES,\n    D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDUSAGE,\n    D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDBINDFLAGS,\n    D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDCPUACCESSFLAGS,\n    D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDMISCFLAGS,\n    D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDCPUACCESSFLAGS,\n    D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDBINDFLAGS,\n    D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDINITIALDATA,\n    D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDDIMENSIONS,\n    D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMIPLEVELS,\n    D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMISCFLAGS,\n    D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDARG_RETURN,\n    D3D11_MESSAGE_ID_CREATETEXTURE1D_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_CREATETEXTURE1D_NULLDESC,\n    D3D11_MESSAGE_ID_CREATETEXTURE1D_LARGEALLOCATION,\n    D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDFORMAT,\n    D3D11_MESSAGE_ID_CREATETEXTURE2D_UNSUPPORTEDFORMAT,\n    D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDSAMPLES,\n    D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDUSAGE,\n    D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDBINDFLAGS,\n    D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDCPUACCESSFLAGS,\n    D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDMISCFLAGS,\n    D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDCPUACCESSFLAGS,\n    D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDBINDFLAGS,\n    D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDINITIALDATA,\n    D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDDIMENSIONS,\n    D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMIPLEVELS,\n    D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMISCFLAGS,\n    D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDARG_RETURN,\n    D3D11_MESSAGE_ID_CREATETEXTURE2D_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_CREATETEXTURE2D_NULLDESC,\n    D3D11_MESSAGE_ID_CREATETEXTURE2D_LARGEALLOCATION,\n    D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDFORMAT,\n    D3D11_MESSAGE_ID_CREATETEXTURE3D_UNSUPPORTEDFORMAT,\n    D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDSAMPLES,\n    D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDUSAGE,\n    D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDBINDFLAGS,\n    D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDCPUACCESSFLAGS,\n    D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDMISCFLAGS,\n    D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDCPUACCESSFLAGS,\n    D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDBINDFLAGS,\n    D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDINITIALDATA,\n    D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDDIMENSIONS,\n    D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMIPLEVELS,\n    D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMISCFLAGS,\n    D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDARG_RETURN,\n    D3D11_MESSAGE_ID_CREATETEXTURE3D_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_CREATETEXTURE3D_NULLDESC,\n    D3D11_MESSAGE_ID_CREATETEXTURE3D_LARGEALLOCATION,\n    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT,\n    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC,\n    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT,\n    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS,\n    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE,\n    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_TOOMANYOBJECTS,\n    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN,\n    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT,\n    D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT,\n    D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC,\n    D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT,\n    D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS,\n    D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE,\n    D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_TOOMANYOBJECTS,\n    D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDARG_RETURN,\n    D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT,\n    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC,\n    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT,\n    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS,\n    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE,\n    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_TOOMANYOBJECTS,\n    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDARG_RETURN,\n    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY,\n    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS,\n    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT,\n    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT,\n    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT,\n    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS,\n    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH,\n    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE,\n    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE,\n    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT,\n    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC,\n    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE,\n    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC,\n    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT,\n    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLDESC,\n    D3D11_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY,\n    D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE,\n    D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDDECL,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_EXPECTEDDECL,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE,\n    D3D11_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY,\n    D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE,\n    D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE,\n    D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE,\n    D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE,\n    D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP,\n    D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS,\n    D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_TOOMANYOBJECTS,\n    D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_NULLDESC,\n    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK,\n    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC,\n    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP,\n    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP,\n    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP,\n    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC,\n    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP,\n    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP,\n    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP,\n    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC,\n    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_TOOMANYOBJECTS,\n    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_NULLDESC,\n    D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND,\n    D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND,\n    D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP,\n    D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA,\n    D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA,\n    D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA,\n    D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK,\n    D3D11_MESSAGE_ID_CREATEBLENDSTATE_TOOMANYOBJECTS,\n    D3D11_MESSAGE_ID_CREATEBLENDSTATE_NULLDESC,\n    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDFILTER,\n    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSU,\n    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSV,\n    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSW,\n    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMIPLODBIAS,\n    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXANISOTROPY,\n    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDCOMPARISONFUNC,\n    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMINLOD,\n    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXLOD,\n    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_TOOMANYOBJECTS,\n    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NULLDESC,\n    D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDQUERY,\n    D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDMISCFLAGS,\n    D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_UNEXPECTEDMISCFLAG,\n    D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_NULLDESC,\n    D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNRECOGNIZED,\n    D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNDEFINED,\n    D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_INVALIDBUFFER,\n    D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_OFFSET_TOO_LARGE,\n    D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_BUFFERS_EMPTY,\n    D3D11_MESSAGE_ID_IASETINDEXBUFFER_INVALIDBUFFER,\n    D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_FORMAT_INVALID,\n    D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_TOO_LARGE,\n    D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_UNALIGNED,\n    D3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_VIEWS_EMPTY,\n    D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFER,\n    D3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_BUFFERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_VSSETSAMPLERS_SAMPLERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_VIEWS_EMPTY,\n    D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFER,\n    D3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_BUFFERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_GSSETSAMPLERS_SAMPLERS_EMPTY,\n    D3D11_MESSAGE_ID_SOSETTARGETS_INVALIDBUFFER,\n    D3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_OFFSET_UNALIGNED,\n    D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_VIEWS_EMPTY,\n    D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFER,\n    D3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_BUFFERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_PSSETSAMPLERS_SAMPLERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_INVALIDVIEWPORT,\n    D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_INVALIDSCISSOR,\n    D3D11_MESSAGE_ID_CLEARRENDERTARGETVIEW_DENORMFLUSH,\n    D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DENORMFLUSH,\n    D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID,\n    D3D11_MESSAGE_ID_DEVICE_IAGETVERTEXBUFFERS_BUFFERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_VSGETSHADERRESOURCES_VIEWS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_VSGETCONSTANTBUFFERS_BUFFERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_VSGETSAMPLERS_SAMPLERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_GSGETSHADERRESOURCES_VIEWS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_GSGETCONSTANTBUFFERS_BUFFERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_GSGETSAMPLERS_SAMPLERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_SOGETTARGETS_BUFFERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_PSGETSHADERRESOURCES_VIEWS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_PSGETCONSTANTBUFFERS_BUFFERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_PSGETSAMPLERS_SAMPLERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_RSGETVIEWPORTS_VIEWPORTS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_RSGETSCISSORRECTS_RECTS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_GENERATEMIPS_RESOURCE_INVALID,\n    D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSUBRESOURCE,\n    D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESUBRESOURCE,\n    D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCEBOX,\n    D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCE,\n    D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSTATE,\n    D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESTATE,\n    D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCE,\n    D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDDESTINATIONSTATE,\n    D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCESTATE,\n    D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSUBRESOURCE,\n    D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONBOX,\n    D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE,\n    D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_INVALID,\n    D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_SUBRESOURCE_INVALID,\n    D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_INVALID,\n    D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_SUBRESOURCE_INVALID,\n    D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_FORMAT_INVALID,\n    D3D11_MESSAGE_ID_BUFFER_MAP_INVALIDMAPTYPE,\n    D3D11_MESSAGE_ID_BUFFER_MAP_INVALIDFLAGS,\n    D3D11_MESSAGE_ID_BUFFER_MAP_ALREADYMAPPED,\n    D3D11_MESSAGE_ID_BUFFER_MAP_DEVICEREMOVED_RETURN,\n    D3D11_MESSAGE_ID_BUFFER_UNMAP_NOTMAPPED,\n    D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDMAPTYPE,\n    D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDSUBRESOURCE,\n    D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDFLAGS,\n    D3D11_MESSAGE_ID_TEXTURE1D_MAP_ALREADYMAPPED,\n    D3D11_MESSAGE_ID_TEXTURE1D_MAP_DEVICEREMOVED_RETURN,\n    D3D11_MESSAGE_ID_TEXTURE1D_UNMAP_INVALIDSUBRESOURCE,\n    D3D11_MESSAGE_ID_TEXTURE1D_UNMAP_NOTMAPPED,\n    D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDMAPTYPE,\n    D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDSUBRESOURCE,\n    D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDFLAGS,\n    D3D11_MESSAGE_ID_TEXTURE2D_MAP_ALREADYMAPPED,\n    D3D11_MESSAGE_ID_TEXTURE2D_MAP_DEVICEREMOVED_RETURN,\n    D3D11_MESSAGE_ID_TEXTURE2D_UNMAP_INVALIDSUBRESOURCE,\n    D3D11_MESSAGE_ID_TEXTURE2D_UNMAP_NOTMAPPED,\n    D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDMAPTYPE,\n    D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDSUBRESOURCE,\n    D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDFLAGS,\n    D3D11_MESSAGE_ID_TEXTURE3D_MAP_ALREADYMAPPED,\n    D3D11_MESSAGE_ID_TEXTURE3D_MAP_DEVICEREMOVED_RETURN,\n    D3D11_MESSAGE_ID_TEXTURE3D_UNMAP_INVALIDSUBRESOURCE,\n    D3D11_MESSAGE_ID_TEXTURE3D_UNMAP_NOTMAPPED,\n    D3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_DEPRECATED,\n    D3D11_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_FORMAT_DEPRECATED,\n    D3D11_MESSAGE_ID_SETEXCEPTIONMODE_UNRECOGNIZEDFLAGS,\n    D3D11_MESSAGE_ID_SETEXCEPTIONMODE_INVALIDARG_RETURN,\n    D3D11_MESSAGE_ID_SETEXCEPTIONMODE_DEVICEREMOVED_RETURN,\n    D3D11_MESSAGE_ID_REF_SIMULATING_INFINITELY_FAST_HARDWARE,\n    D3D11_MESSAGE_ID_REF_THREADING_MODE,\n    D3D11_MESSAGE_ID_REF_UMDRIVER_EXCEPTION,\n    D3D11_MESSAGE_ID_REF_KMDRIVER_EXCEPTION,\n    D3D11_MESSAGE_ID_REF_HARDWARE_EXCEPTION,\n    D3D11_MESSAGE_ID_REF_ACCESSING_INDEXABLE_TEMP_OUT_OF_RANGE,\n    D3D11_MESSAGE_ID_REF_PROBLEM_PARSING_SHADER,\n    D3D11_MESSAGE_ID_REF_OUT_OF_MEMORY,\n    D3D11_MESSAGE_ID_REF_INFO,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEXPOS_OVERFLOW,\n    D3D11_MESSAGE_ID_DEVICE_DRAWINDEXED_INDEXPOS_OVERFLOW,\n    D3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_VERTEXPOS_OVERFLOW,\n    D3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_INSTANCEPOS_OVERFLOW,\n    D3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INSTANCEPOS_OVERFLOW,\n    D3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INDEXPOS_OVERFLOW,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_SHADER_NOT_SET,\n    D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND,\n    D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERINDEX,\n    D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_COMPONENTTYPE,\n    D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERMASK,\n    D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SYSTEMVALUE,\n    D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_NOT_SET,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_INPUTLAYOUT_NOT_SET,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_NOT_SET,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_TOO_SMALL,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_NOT_SET,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_SHADERRESOURCEVIEW_NOT_SET,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_VIEW_DIMENSION_MISMATCH,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_TOO_SMALL,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_NOT_SET,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_FORMAT_INVALID,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_GS_INPUT_PRIMITIVE_MISMATCH,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_RETURN_TYPE_MISMATCH,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_POSITION_NOT_PRESENT,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_NOT_SET,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_BOUND_RESOURCE_MAPPED,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_PRIMITIVETOPOLOGY,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_OFFSET_UNALIGNED,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_OFFSET_UNALIGNED,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_OFFSET_UNALIGNED,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_LD_UNSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_UNSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_C_UNSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_MULTISAMPLE_UNSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_SO_TARGETS_BOUND_WITHOUT_SOURCE,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_SO_STRIDE_LARGER_THAN_BUFFER,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0,\n    D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT,\n    D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT,\n    D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT,\n    D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_INVALIDARG_RETURN,\n    D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BADINTERFACE_RETURN,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_VIEWPORT_NOT_SET,\n    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC,\n    D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_DENORMFLUSH,\n    D3D11_MESSAGE_ID_OMSETRENDERTARGETS_INVALIDVIEW,\n    D3D11_MESSAGE_ID_DEVICE_SETTEXTFILTERSIZE_INVALIDDIMENSIONS,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_MISMATCH,\n    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH,\n    D3D11_MESSAGE_ID_BLENDSTATE_GETDESC_LEGACY,\n    D3D11_MESSAGE_ID_SHADERRESOURCEVIEW_GETDESC_LEGACY,\n    D3D11_MESSAGE_ID_CREATEQUERY_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_CREATEPREDICATE_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_CREATECOUNTER_OUTOFRANGE_COUNTER,\n    D3D11_MESSAGE_ID_CREATECOUNTER_SIMULTANEOUS_ACTIVE_COUNTERS_EXHAUSTED,\n    D3D11_MESSAGE_ID_CREATECOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER,\n    D3D11_MESSAGE_ID_CREATECOUNTER_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_CREATECOUNTER_NONEXCLUSIVE_RETURN,\n    D3D11_MESSAGE_ID_CREATECOUNTER_NULLDESC,\n    D3D11_MESSAGE_ID_CHECKCOUNTER_OUTOFRANGE_COUNTER,\n    D3D11_MESSAGE_ID_CHECKCOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER,\n    D3D11_MESSAGE_ID_SETPREDICATION_INVALID_PREDICATE_STATE,\n    D3D11_MESSAGE_ID_QUERY_BEGIN_UNSUPPORTED,\n    D3D11_MESSAGE_ID_PREDICATE_BEGIN_DURING_PREDICATION,\n    D3D11_MESSAGE_ID_QUERY_BEGIN_DUPLICATE,\n    D3D11_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS,\n    D3D11_MESSAGE_ID_PREDICATE_END_DURING_PREDICATION,\n    D3D11_MESSAGE_ID_QUERY_END_ABANDONING_PREVIOUS_RESULTS,\n    D3D11_MESSAGE_ID_QUERY_END_WITHOUT_BEGIN,\n    D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_DATASIZE,\n    D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_FLAGS,\n    D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_CALL,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_PS_OUTPUT_TYPE_MISMATCH,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_GATHER_UNSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN,\n    D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_STRIDE_TOO_LARGE,\n    D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_INVALIDRANGE,\n    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH,\n    D3D11_MESSAGE_ID_LIVE_OBJECT_SUMMARY,\n    D3D11_MESSAGE_ID_LIVE_BUFFER,\n    D3D11_MESSAGE_ID_LIVE_TEXTURE1D,\n    D3D11_MESSAGE_ID_LIVE_TEXTURE2D,\n    D3D11_MESSAGE_ID_LIVE_TEXTURE3D,\n    D3D11_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW,\n    D3D11_MESSAGE_ID_LIVE_RENDERTARGETVIEW,\n    D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW,\n    D3D11_MESSAGE_ID_LIVE_VERTEXSHADER,\n    D3D11_MESSAGE_ID_LIVE_GEOMETRYSHADER,\n    D3D11_MESSAGE_ID_LIVE_PIXELSHADER,\n    D3D11_MESSAGE_ID_LIVE_INPUTLAYOUT,\n    D3D11_MESSAGE_ID_LIVE_SAMPLER,\n    D3D11_MESSAGE_ID_LIVE_BLENDSTATE,\n    D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE,\n    D3D11_MESSAGE_ID_LIVE_RASTERIZERSTATE,\n    D3D11_MESSAGE_ID_LIVE_QUERY,\n    D3D11_MESSAGE_ID_LIVE_PREDICATE,\n    D3D11_MESSAGE_ID_LIVE_COUNTER,\n    D3D11_MESSAGE_ID_LIVE_DEVICE,\n    D3D11_MESSAGE_ID_LIVE_SWAPCHAIN,\n    D3D11_MESSAGE_ID_D3D10_MESSAGES_END,\n\n    D3D11_MESSAGE_ID_D3D10L9_MESSAGES_START = 0x00100000,\n    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_STENCIL_NO_TWO_SIDED,\n    D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthBiasClamp_NOT_SUPPORTED,\n    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_COMPARISON_SUPPORT,\n    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_EXCESSIVE_ANISOTROPY,\n    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_OUT_OF_RANGE,\n    D3D11_MESSAGE_ID_VSSETSAMPLERS_NOT_SUPPORTED,\n    D3D11_MESSAGE_ID_VSSETSAMPLERS_TOO_MANY_SAMPLERS,\n    D3D11_MESSAGE_ID_PSSETSAMPLERS_TOO_MANY_SAMPLERS,\n    D3D11_MESSAGE_ID_CREATERESOURCE_NO_ARRAYS,\n    D3D11_MESSAGE_ID_CREATERESOURCE_NO_VB_AND_IB_BIND,\n    D3D11_MESSAGE_ID_CREATERESOURCE_NO_TEXTURE_1D,\n    D3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_OUT_OF_RANGE,\n    D3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_SHADER_RESOURCE,\n    D3D11_MESSAGE_ID_OMSETRENDERTARGETS_TOO_MANY_RENDER_TARGETS,\n    D3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_DIFFERING_BIT_DEPTHS,\n    D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_BAD_BUFFER_INDEX,\n    D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_TOO_MANY_VIEWPORTS,\n    D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_ADJACENCY_UNSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_TOO_MANY_SCISSORS,\n    D3D11_MESSAGE_ID_COPYRESOURCE_ONLY_TEXTURE_2D_WITHIN_GPU_MEMORY,\n    D3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_3D_READBACK,\n    D3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_ONLY_READBACK,\n    D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNSUPPORTED_FORMAT,\n    D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_ALPHA_TO_COVERAGE,\n    D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthClipEnable_MUST_BE_TRUE,\n    D3D11_MESSAGE_ID_DRAWINDEXED_STARTINDEXLOCATION_MUST_BE_POSITIVE,\n    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_MUST_USE_LOWEST_LOD,\n    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_MINLOD_MUST_NOT_BE_FRACTIONAL,\n    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_MAXLOD_MUST_BE_FLT_MAX,\n    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_FIRSTARRAYSLICE_MUST_BE_ZERO,\n    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_CUBES_MUST_HAVE_6_SIDES,\n    D3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_RENDER_TARGET,\n    D3D11_MESSAGE_ID_CREATERESOURCE_NO_DWORD_INDEX_BUFFER,\n    D3D11_MESSAGE_ID_CREATERESOURCE_MSAA_PRECLUDES_SHADER_RESOURCE,\n    D3D11_MESSAGE_ID_CREATERESOURCE_PRESENTATION_PRECLUDES_SHADER_RESOURCE,\n    D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_BLEND_ENABLE,\n    D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_WRITE_MASKS,\n    D3D11_MESSAGE_ID_CREATERESOURCE_NO_STREAM_OUT,\n    D3D11_MESSAGE_ID_CREATERESOURCE_ONLY_VB_IB_FOR_BUFFERS,\n    D3D11_MESSAGE_ID_CREATERESOURCE_NO_AUTOGEN_FOR_VOLUMES,\n    D3D11_MESSAGE_ID_CREATERESOURCE_DXGI_FORMAT_R8G8B8A8_CANNOT_BE_SHARED,\n    D3D11_MESSAGE_ID_VSSHADERRESOURCES_NOT_SUPPORTED,\n    D3D11_MESSAGE_ID_GEOMETRY_SHADER_NOT_SUPPORTED,\n    D3D11_MESSAGE_ID_STREAM_OUT_NOT_SUPPORTED,\n    D3D11_MESSAGE_ID_TEXT_FILTER_NOT_SUPPORTED,\n    D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_SEPARATE_ALPHA_BLEND,\n    D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_MRT_BLEND,\n    D3D11_MESSAGE_ID_CREATEBLENDSTATE_OPERATION_NOT_SUPPORTED,\n    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_MIRRORONCE,\n    D3D11_MESSAGE_ID_DRAWINSTANCED_NOT_SUPPORTED,\n    D3D11_MESSAGE_ID_DRAWINDEXEDINSTANCED_NOT_SUPPORTED_BELOW_9_3,\n    D3D11_MESSAGE_ID_DRAWINDEXED_POINTLIST_UNSUPPORTED,\n    D3D11_MESSAGE_ID_SETBLENDSTATE_SAMPLE_MASK_CANNOT_BE_ZERO,\n    D3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_EXCEEDS_FEATURE_LEVEL_DEFINITION,\n    D3D11_MESSAGE_ID_CREATERESOURCE_ONLY_SINGLE_MIP_LEVEL_DEPTH_STENCIL_SUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_NEGATIVESCISSOR,\n    D3D11_MESSAGE_ID_SLOT_ZERO_MUST_BE_D3D10_INPUT_PER_VERTEX_DATA,\n    D3D11_MESSAGE_ID_CREATERESOURCE_NON_POW_2_MIPMAP,\n    D3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_NOT_SUPPORTED,\n    D3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_SRGB_MRT,\n    D3D11_MESSAGE_ID_COPYRESOURCE_NO_3D_MISMATCHED_UPDATES,\n    D3D11_MESSAGE_ID_D3D10L9_MESSAGES_END,\n\n    D3D11_MESSAGE_ID_D3D11_MESSAGES_START = 0x00200000,\n    D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFLAGS,\n    D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDCLASSLINKAGE,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDCLASSLINKAGE,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTREAMS,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAMTORASTERIZER,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTREAMS,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCLASSLINKAGE,\n    D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDCLASSLINKAGE,\n    D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_COMMANDLISTFLAGS,\n    D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_SINGLETHREADED,\n    D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALIDARG_RETURN,\n    D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_CALL_RETURN,\n    D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_FINISHDISPLAYLIST_ONIMMEDIATECONTEXT,\n    D3D11_MESSAGE_ID_FINISHDISPLAYLIST_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_FINISHDISPLAYLIST_INVALID_CALL_RETURN,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAM,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDENTRIES,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTRIDES,\n    D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTRIDES,\n    D3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_HAZARD,\n    D3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_HAZARD,\n    D3D11_MESSAGE_ID_HSSETSHADERRESOURCES_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCALL,\n    D3D11_MESSAGE_ID_CREATEHULLSHADER_OUTOFMEMORY,\n    D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERBYTECODE,\n    D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERTYPE,\n    D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCLASSLINKAGE,\n    D3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_VIEWS_EMPTY,\n    D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_INVALIDBUFFER,\n    D3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_BUFFERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_HSSETSAMPLERS_SAMPLERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_HSGETSHADERRESOURCES_VIEWS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_HSGETCONSTANTBUFFERS_BUFFERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_HSGETSAMPLERS_SAMPLERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_HAZARD,\n    D3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_HAZARD,\n    D3D11_MESSAGE_ID_DSSETSHADERRESOURCES_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCALL,\n    D3D11_MESSAGE_ID_CREATEDOMAINSHADER_OUTOFMEMORY,\n    D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERBYTECODE,\n    D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERTYPE,\n    D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCLASSLINKAGE,\n    D3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_VIEWS_EMPTY,\n    D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_INVALIDBUFFER,\n    D3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_BUFFERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_DSSETSAMPLERS_SAMPLERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_DSGETSHADERRESOURCES_VIEWS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_DSGETCONSTANTBUFFERS_BUFFERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_DSGETSAMPLERS_SAMPLERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_HS_XOR_DS_MISMATCH,\n    D3D11_MESSAGE_ID_DEFERRED_CONTEXT_REMOVAL_PROCESS_AT_FAULT,\n    D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_INVALID_ARG_BUFFER,\n    D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_UNALIGNED,\n    D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_OVERFLOW,\n    D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDMAPTYPE,\n    D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDSUBRESOURCE,\n    D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDFLAGS,\n    D3D11_MESSAGE_ID_RESOURCE_MAP_ALREADYMAPPED,\n    D3D11_MESSAGE_ID_RESOURCE_MAP_DEVICEREMOVED_RETURN,\n    D3D11_MESSAGE_ID_RESOURCE_MAP_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_RESOURCE_MAP_WITHOUT_INITIAL_DISCARD,\n    D3D11_MESSAGE_ID_RESOURCE_UNMAP_INVALIDSUBRESOURCE,\n    D3D11_MESSAGE_ID_RESOURCE_UNMAP_NOTMAPPED,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_RASTERIZING_CONTROL_POINTS,\n    D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_SIGNATURE_MISMATCH,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_HULL_SHADER_INPUT_TOPOLOGY_MISMATCH,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_CONTROL_POINT_COUNT_MISMATCH,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_TESSELLATOR_DOMAIN_MISMATCH,\n    D3D11_MESSAGE_ID_CREATE_CONTEXT,\n    D3D11_MESSAGE_ID_LIVE_CONTEXT,\n    D3D11_MESSAGE_ID_DESTROY_CONTEXT,\n    D3D11_MESSAGE_ID_CREATE_BUFFER,\n    D3D11_MESSAGE_ID_LIVE_BUFFER_WIN7,\n    D3D11_MESSAGE_ID_DESTROY_BUFFER,\n    D3D11_MESSAGE_ID_CREATE_TEXTURE1D,\n    D3D11_MESSAGE_ID_LIVE_TEXTURE1D_WIN7,\n    D3D11_MESSAGE_ID_DESTROY_TEXTURE1D,\n    D3D11_MESSAGE_ID_CREATE_TEXTURE2D,\n    D3D11_MESSAGE_ID_LIVE_TEXTURE2D_WIN7,\n    D3D11_MESSAGE_ID_DESTROY_TEXTURE2D,\n    D3D11_MESSAGE_ID_CREATE_TEXTURE3D,\n    D3D11_MESSAGE_ID_LIVE_TEXTURE3D_WIN7,\n    D3D11_MESSAGE_ID_DESTROY_TEXTURE3D,\n    D3D11_MESSAGE_ID_CREATE_SHADERRESOURCEVIEW,\n    D3D11_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW_WIN7,\n    D3D11_MESSAGE_ID_DESTROY_SHADERRESOURCEVIEW,\n    D3D11_MESSAGE_ID_CREATE_RENDERTARGETVIEW,\n    D3D11_MESSAGE_ID_LIVE_RENDERTARGETVIEW_WIN7,\n    D3D11_MESSAGE_ID_DESTROY_RENDERTARGETVIEW,\n    D3D11_MESSAGE_ID_CREATE_DEPTHSTENCILVIEW,\n    D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW_WIN7,\n    D3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILVIEW,\n    D3D11_MESSAGE_ID_CREATE_VERTEXSHADER,\n    D3D11_MESSAGE_ID_LIVE_VERTEXSHADER_WIN7,\n    D3D11_MESSAGE_ID_DESTROY_VERTEXSHADER,\n    D3D11_MESSAGE_ID_CREATE_HULLSHADER,\n    D3D11_MESSAGE_ID_LIVE_HULLSHADER,\n    D3D11_MESSAGE_ID_DESTROY_HULLSHADER,\n    D3D11_MESSAGE_ID_CREATE_DOMAINSHADER,\n    D3D11_MESSAGE_ID_LIVE_DOMAINSHADER,\n    D3D11_MESSAGE_ID_DESTROY_DOMAINSHADER,\n    D3D11_MESSAGE_ID_CREATE_GEOMETRYSHADER,\n    D3D11_MESSAGE_ID_LIVE_GEOMETRYSHADER_WIN7,\n    D3D11_MESSAGE_ID_DESTROY_GEOMETRYSHADER,\n    D3D11_MESSAGE_ID_CREATE_PIXELSHADER,\n    D3D11_MESSAGE_ID_LIVE_PIXELSHADER_WIN7,\n    D3D11_MESSAGE_ID_DESTROY_PIXELSHADER,\n    D3D11_MESSAGE_ID_CREATE_INPUTLAYOUT,\n    D3D11_MESSAGE_ID_LIVE_INPUTLAYOUT_WIN7,\n    D3D11_MESSAGE_ID_DESTROY_INPUTLAYOUT,\n    D3D11_MESSAGE_ID_CREATE_SAMPLER,\n    D3D11_MESSAGE_ID_LIVE_SAMPLER_WIN7,\n    D3D11_MESSAGE_ID_DESTROY_SAMPLER,\n    D3D11_MESSAGE_ID_CREATE_BLENDSTATE,\n    D3D11_MESSAGE_ID_LIVE_BLENDSTATE_WIN7,\n    D3D11_MESSAGE_ID_DESTROY_BLENDSTATE,\n    D3D11_MESSAGE_ID_CREATE_DEPTHSTENCILSTATE,\n    D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE_WIN7,\n    D3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILSTATE,\n    D3D11_MESSAGE_ID_CREATE_RASTERIZERSTATE,\n    D3D11_MESSAGE_ID_LIVE_RASTERIZERSTATE_WIN7,\n    D3D11_MESSAGE_ID_DESTROY_RASTERIZERSTATE,\n    D3D11_MESSAGE_ID_CREATE_QUERY,\n    D3D11_MESSAGE_ID_LIVE_QUERY_WIN7,\n    D3D11_MESSAGE_ID_DESTROY_QUERY,\n    D3D11_MESSAGE_ID_CREATE_PREDICATE,\n    D3D11_MESSAGE_ID_LIVE_PREDICATE_WIN7,\n    D3D11_MESSAGE_ID_DESTROY_PREDICATE,\n    D3D11_MESSAGE_ID_CREATE_COUNTER,\n    D3D11_MESSAGE_ID_DESTROY_COUNTER,\n    D3D11_MESSAGE_ID_CREATE_COMMANDLIST,\n    D3D11_MESSAGE_ID_LIVE_COMMANDLIST,\n    D3D11_MESSAGE_ID_DESTROY_COMMANDLIST,\n    D3D11_MESSAGE_ID_CREATE_CLASSINSTANCE,\n    D3D11_MESSAGE_ID_LIVE_CLASSINSTANCE,\n    D3D11_MESSAGE_ID_DESTROY_CLASSINSTANCE,\n    D3D11_MESSAGE_ID_CREATE_CLASSLINKAGE,\n    D3D11_MESSAGE_ID_LIVE_CLASSLINKAGE,\n    D3D11_MESSAGE_ID_DESTROY_CLASSLINKAGE,\n    D3D11_MESSAGE_ID_LIVE_DEVICE_WIN7,\n    D3D11_MESSAGE_ID_LIVE_OBJECT_SUMMARY_WIN7,\n    D3D11_MESSAGE_ID_CREATE_COMPUTESHADER,\n    D3D11_MESSAGE_ID_LIVE_COMPUTESHADER,\n    D3D11_MESSAGE_ID_DESTROY_COMPUTESHADER,\n    D3D11_MESSAGE_ID_CREATE_UNORDEREDACCESSVIEW,\n    D3D11_MESSAGE_ID_LIVE_UNORDEREDACCESSVIEW,\n    D3D11_MESSAGE_ID_DESTROY_UNORDEREDACCESSVIEW,\n    D3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACES_FEATURELEVEL,\n    D3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACE_COUNT_MISMATCH,\n    D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE,\n    D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_INDEX,\n    D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_TYPE,\n    D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_DATA,\n    D3D11_MESSAGE_ID_DEVICE_SETSHADER_UNBOUND_INSTANCE_DATA,\n    D3D11_MESSAGE_ID_DEVICE_SETSHADER_INSTANCE_DATA_BINDINGS,\n    D3D11_MESSAGE_ID_DEVICE_CREATESHADER_CLASSLINKAGE_FULL,\n    D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_UNRECOGNIZED_FEATURE,\n    D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_MISMATCHED_DATA_SIZE,\n    D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_INVALIDARG_RETURN,\n    D3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_HAZARD,\n    D3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_HAZARD,\n    D3D11_MESSAGE_ID_CSSETSHADERRESOURCES_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCALL,\n    D3D11_MESSAGE_ID_CREATECOMPUTESHADER_OUTOFMEMORY,\n    D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERBYTECODE,\n    D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERTYPE,\n    D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCLASSLINKAGE,\n    D3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_VIEWS_EMPTY,\n    D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_INVALIDBUFFER,\n    D3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_BUFFERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_CSSETSAMPLERS_SAMPLERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_CSGETSHADERRESOURCES_VIEWS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_CSGETCONSTANTBUFFERS_BUFFERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_CSGETSAMPLERS_SAMPLERS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEFLOATOPSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEFLOATOPSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEFLOATOPSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEFLOATOPSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEFLOATOPSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEFLOATOPSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEFLOATOPSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSTRUCTURESTRIDE,\n    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFLAGS,\n    D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDRESOURCE,\n    D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDESC,\n    D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFORMAT,\n    D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDIMENSIONS,\n    D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_UNRECOGNIZEDFORMAT,\n    D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_HAZARD,\n    D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_OVERLAPPING_OLD_SLOTS,\n    D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_NO_OP,\n    D3D11_MESSAGE_ID_CSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_PSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDARG_RETURN,\n    D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_TOOMANYOBJECTS,\n    D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_HAZARD,\n    D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEW_DENORMFLUSH,\n    D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSS_VIEWS_EMPTY,\n    D3D11_MESSAGE_ID_DEVICE_CSGETUNORDEREDACCESSS_VIEWS_EMPTY,\n    D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFLAGS,\n    D3D11_MESSAGE_ID_CREATESHADERRESESOURCEVIEW_TOOMANYOBJECTS,\n    D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_INVALID_ARG_BUFFER,\n    D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_UNALIGNED,\n    D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_OVERFLOW,\n    D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDCONTEXT,\n    D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDRESOURCE,\n    D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDMINLOD,\n    D3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDCONTEXT,\n    D3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDRESOURCE,\n    D3D11_MESSAGE_ID_OMSETDEPTHSTENCIL_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DEPTH_READONLY,\n    D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_STENCIL_READONLY,\n    D3D11_MESSAGE_ID_CHECKFEATURESUPPORT_FORMAT_DEPRECATED,\n    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RETURN_TYPE_MISMATCH,\n    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_NOT_SET,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_UNORDEREDACCESSVIEW_RENDERTARGETVIEW_OVERLAP,\n    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_DIMENSION_MISMATCH,\n    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_APPEND_UNSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMICS_UNSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_STRUCTURE_STRIDE_MISMATCH,\n    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_BUFFER_TYPE_MISMATCH,\n    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RAW_UNSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_LD_UNSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_STORE_UNSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_ADD_UNSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_BITWISE_OPS_UNSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_CMPSTORE_CMPEXCHANGE_UNSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_EXCHANGE_UNSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_SIGNED_MINMAX_UNSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_UNSIGNED_MINMAX_UNSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_DISPATCH_BOUND_RESOURCE_MAPPED,\n    D3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_OVERFLOW,\n    D3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_ZERO,\n    D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_STRUCTURE_STRIDE_MISMATCH,\n    D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_BUFFER_TYPE_MISMATCH,\n    D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_RAW_UNSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_DISPATCH_UNSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_UNSUPPORTED,\n    D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDOFFSET,\n    D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_LARGEOFFSET,\n    D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDDESTINATIONSTATE,\n    D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDSOURCESTATE,\n    D3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_NOT_SUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDVIEW,\n    D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDOFFSET,\n    D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_TOOMANYVIEWS,\n    D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEWFLOAT_INVALIDFORMAT,\n    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_COUNTER_UNSUPPORTED,\n    D3D11_MESSAGE_ID_REF_WARNING,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_PIXEL_SHADER_WITHOUT_RTV_OR_DSV,\n    D3D11_MESSAGE_ID_SHADER_ABORT,\n    D3D11_MESSAGE_ID_SHADER_MESSAGE,\n    D3D11_MESSAGE_ID_SHADER_ERROR,\n    D3D11_MESSAGE_ID_OFFERRESOURCES_INVALIDRESOURCE,\n    D3D11_MESSAGE_ID_HSSETSAMPLERS_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_DSSETSAMPLERS_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_CSSETSAMPLERS_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_HSSETSHADER_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_DSSETSHADER_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_CSSETSHADER_UNBINDDELETINGOBJECT,\n    D3D11_MESSAGE_ID_ENQUEUESETEVENT_INVALIDARG_RETURN,\n    D3D11_MESSAGE_ID_ENQUEUESETEVENT_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_ENQUEUESETEVENT_ACCESSDENIED_RETURN,\n    D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_NUMUAVS_INVALIDRANGE,\n    D3D11_MESSAGE_ID_D3D11_MESSAGES_END,\n\n    D3D11_MESSAGE_ID_D3D11_1_MESSAGES_START = 0x00300000,\n    D3D11_MESSAGE_ID_CREATE_VIDEODECODER,\n    D3D11_MESSAGE_ID_CREATE_VIDEOPROCESSORENUM,\n    D3D11_MESSAGE_ID_CREATE_VIDEOPROCESSOR,\n    D3D11_MESSAGE_ID_CREATE_DECODEROUTPUTVIEW,\n    D3D11_MESSAGE_ID_CREATE_PROCESSORINPUTVIEW,\n    D3D11_MESSAGE_ID_CREATE_PROCESSOROUTPUTVIEW,\n    D3D11_MESSAGE_ID_CREATE_DEVICECONTEXTSTATE,\n    D3D11_MESSAGE_ID_LIVE_VIDEODECODER,\n    D3D11_MESSAGE_ID_LIVE_VIDEOPROCESSORENUM,\n    D3D11_MESSAGE_ID_LIVE_VIDEOPROCESSOR,\n    D3D11_MESSAGE_ID_LIVE_DECODEROUTPUTVIEW,\n    D3D11_MESSAGE_ID_LIVE_PROCESSORINPUTVIEW,\n    D3D11_MESSAGE_ID_LIVE_PROCESSOROUTPUTVIEW,\n    D3D11_MESSAGE_ID_LIVE_DEVICECONTEXTSTATE,\n    D3D11_MESSAGE_ID_DESTROY_VIDEODECODER,\n    D3D11_MESSAGE_ID_DESTROY_VIDEOPROCESSORENUM,\n    D3D11_MESSAGE_ID_DESTROY_VIDEOPROCESSOR,\n    D3D11_MESSAGE_ID_DESTROY_DECODEROUTPUTVIEW,\n    D3D11_MESSAGE_ID_DESTROY_PROCESSORINPUTVIEW,\n    D3D11_MESSAGE_ID_DESTROY_PROCESSOROUTPUTVIEW,\n    D3D11_MESSAGE_ID_DESTROY_DEVICECONTEXTSTATE,\n    D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_INVALIDFLAGS,\n    D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_INVALIDFEATURELEVEL,\n    D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_FEATURELEVELS_NOT_SUPPORTED,\n    D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_INVALIDREFIID,\n    D3D11_MESSAGE_ID_DEVICE_DISCARDVIEW_INVALIDVIEW,\n    D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION1_INVALIDCOPYFLAGS,\n    D3D11_MESSAGE_ID_UPDATESUBRESOURCE1_INVALIDCOPYFLAGS,\n    D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFORCEDSAMPLECOUNT,\n    D3D11_MESSAGE_ID_CREATEVIDEODECODER_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_CREATEVIDEODECODER_NULLPARAM,\n    D3D11_MESSAGE_ID_CREATEVIDEODECODER_INVALIDFORMAT,\n    D3D11_MESSAGE_ID_CREATEVIDEODECODER_ZEROWIDTHHEIGHT,\n    D3D11_MESSAGE_ID_CREATEVIDEODECODER_DRIVER_INVALIDBUFFERSIZE,\n    D3D11_MESSAGE_ID_CREATEVIDEODECODER_DRIVER_INVALIDBUFFERUSAGE,\n    D3D11_MESSAGE_ID_GETVIDEODECODERPROFILECOUNT_OUTOFMEMORY,\n    D3D11_MESSAGE_ID_GETVIDEODECODERPROFILE_NULLPARAM,\n    D3D11_MESSAGE_ID_GETVIDEODECODERPROFILE_INVALIDINDEX,\n    D3D11_MESSAGE_ID_GETVIDEODECODERPROFILE_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_CHECKVIDEODECODERFORMAT_NULLPARAM,\n    D3D11_MESSAGE_ID_CHECKVIDEODECODERFORMAT_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_GETVIDEODECODERCONFIGCOUNT_NULLPARAM,\n    D3D11_MESSAGE_ID_GETVIDEODECODERCONFIGCOUNT_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_GETVIDEODECODERCONFIG_NULLPARAM,\n    D3D11_MESSAGE_ID_GETVIDEODECODERCONFIG_INVALIDINDEX,\n    D3D11_MESSAGE_ID_GETVIDEODECODERCONFIG_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_GETDECODERCREATIONPARAMS_NULLPARAM,\n    D3D11_MESSAGE_ID_GETDECODERDRIVERHANDLE_NULLPARAM,\n    D3D11_MESSAGE_ID_GETDECODERBUFFER_NULLPARAM,\n    D3D11_MESSAGE_ID_GETDECODERBUFFER_INVALIDBUFFER,\n    D3D11_MESSAGE_ID_GETDECODERBUFFER_INVALIDTYPE,\n    D3D11_MESSAGE_ID_GETDECODERBUFFER_LOCKED,\n    D3D11_MESSAGE_ID_RELEASEDECODERBUFFER_NULLPARAM,\n    D3D11_MESSAGE_ID_RELEASEDECODERBUFFER_INVALIDTYPE,\n    D3D11_MESSAGE_ID_RELEASEDECODERBUFFER_NOTLOCKED,\n    D3D11_MESSAGE_ID_DECODERBEGINFRAME_NULLPARAM,\n    D3D11_MESSAGE_ID_DECODERBEGINFRAME_HAZARD,\n    D3D11_MESSAGE_ID_DECODERENDFRAME_NULLPARAM,\n    D3D11_MESSAGE_ID_SUBMITDECODERBUFFERS_NULLPARAM,\n    D3D11_MESSAGE_ID_SUBMITDECODERBUFFERS_INVALIDTYPE,\n    D3D11_MESSAGE_ID_DECODEREXTENSION_NULLPARAM,\n    D3D11_MESSAGE_ID_DECODEREXTENSION_INVALIDRESOURCE,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_NULLPARAM,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDFRAMEFORMAT,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDUSAGE,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDINPUTFRAMERATE,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDOUTPUTFRAMERATE,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDWIDTHHEIGHT,\n    D3D11_MESSAGE_ID_GETVIDEOPROCESSORCONTENTDESC_NULLPARAM,\n    D3D11_MESSAGE_ID_CHECKVIDEOPROCESSORFORMAT_NULLPARAM,\n    D3D11_MESSAGE_ID_GETVIDEOPROCESSORCAPS_NULLPARAM,\n    D3D11_MESSAGE_ID_GETVIDEOPROCESSORRATECONVERSIONCAPS_NULLPARAM,\n    D3D11_MESSAGE_ID_GETVIDEOPROCESSORRATECONVERSIONCAPS_INVALIDINDEX,\n    D3D11_MESSAGE_ID_GETVIDEOPROCESSORCUSTOMRATE_NULLPARAM,\n    D3D11_MESSAGE_ID_GETVIDEOPROCESSORCUSTOMRATE_INVALIDINDEX,\n    D3D11_MESSAGE_ID_GETVIDEOPROCESSORFILTERRANGE_NULLPARAM,\n    D3D11_MESSAGE_ID_GETVIDEOPROCESSORFILTERRANGE_UNSUPPORTED,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOR_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOR_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTTARGETRECT_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTBACKGROUNDCOLOR_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTBACKGROUNDCOLOR_INVALIDALPHA,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCOLORSPACE_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_UNSUPPORTED,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_INVALIDSTREAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_INVALIDFILLMODE,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCONSTRICTION_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTSTEREOMODE_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTSTEREOMODE_UNSUPPORTED,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTEXTENSION_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTTARGETRECT_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTBACKGROUNDCOLOR_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTCOLORSPACE_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTALPHAFILLMODE_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTCONSTRICTION_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCONSTRICTION_UNSUPPORTED,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCONSTRICTION_INVALIDSIZE,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTSTEREOMODE_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTEXTENSION_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFRAMEFORMAT_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFRAMEFORMAT_INVALIDFORMAT,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFRAMEFORMAT_INVALIDSTREAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE_INVALIDSTREAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_INVALIDRATE,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_INVALIDFLAG,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_INVALIDSTREAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSOURCERECT_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSOURCERECT_INVALIDSTREAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSOURCERECT_INVALIDRECT,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMDESTRECT_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMDESTRECT_INVALIDSTREAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMDESTRECT_INVALIDRECT,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_INVALIDSTREAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_INVALIDALPHA,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_INVALIDSTREAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_INVALIDCOUNT,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_INVALIDALPHA,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_INVALIDSTREAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_INVALIDRATIO,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_INVALIDSTREAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_INVALIDRANGE,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_UNSUPPORTED,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_INVALIDSTREAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_UNSUPPORTED,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_FLIPUNSUPPORTED,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_MONOOFFSETUNSUPPORTED,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_FORMATUNSUPPORTED,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_INVALIDFORMAT,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMAUTOPROCESSINGMODE_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMAUTOPROCESSINGMODE_INVALIDSTREAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_INVALIDSTREAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_INVALIDFILTER,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_UNSUPPORTED,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_INVALIDLEVEL,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMEXTENSION_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMEXTENSION_INVALIDSTREAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMFRAMEFORMAT_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMCOLORSPACE_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMOUTPUTRATE_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMSOURCERECT_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMDESTRECT_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMALPHA_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMPALETTE_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMPIXELASPECTRATIO_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMLUMAKEY_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMSTEREOFORMAT_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMAUTOPROCESSINGMODE_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMFILTER_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMEXTENSION_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMEXTENSION_INVALIDSTREAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDSTREAMCOUNT,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_TARGETRECT,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDOUTPUT,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDPASTFRAMES,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDFUTUREFRAMES,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDSOURCERECT,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDDESTRECT,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDINPUTRESOURCE,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDARRAYSIZE,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDARRAY,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_RIGHTEXPECTED,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_RIGHTNOTEXPECTED,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_STEREONOTENABLED,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDRIGHTRESOURCE,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_NOSTEREOSTREAMS,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INPUTHAZARD,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_OUTPUTHAZARD,\n    D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_NULLPARAM,\n    D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDTYPE,\n    D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDBIND,\n    D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_UNSUPPORTEDFORMAT,\n    D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDMIP,\n    D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_UNSUPPORTEMIP,\n    D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDARRAYSIZE,\n    D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDARRAY,\n    D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDDIMENSION,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_NULLPARAM,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDTYPE,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDBIND,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMISC,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDUSAGE,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDFORMAT,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDFOURCC,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMIP,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_UNSUPPORTEDMIP,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDARRAYSIZE,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDARRAY,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDDIMENSION,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_NULLPARAM,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDTYPE,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDBIND,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDFORMAT,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDMIP,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_UNSUPPORTEDMIP,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_UNSUPPORTEDARRAY,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDARRAY,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDDIMENSION,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_FORCED_SAMPLE_COUNT,\n    D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDLOGICOPS,\n    D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDARRAYWITHDECODER,\n    D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDARRAYWITHDECODER,\n    D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDARRAYWITHDECODER,\n    D3D11_MESSAGE_ID_DEVICE_LOCKEDOUT_INTERFACE,\n    D3D11_MESSAGE_ID_REF_WARNING_ATOMIC_INCONSISTENT,\n    D3D11_MESSAGE_ID_REF_WARNING_READING_UNINITIALIZED_RESOURCE,\n    D3D11_MESSAGE_ID_REF_WARNING_RAW_HAZARD,\n    D3D11_MESSAGE_ID_REF_WARNING_WAR_HAZARD,\n    D3D11_MESSAGE_ID_REF_WARNING_WAW_HAZARD,\n    D3D11_MESSAGE_ID_CREATECRYPTOSESSION_NULLPARAM,\n    D3D11_MESSAGE_ID_CREATECRYPTOSESSION_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_GETCRYPTOTYPE_NULLPARAM,\n    D3D11_MESSAGE_ID_GETDECODERPROFILE_NULLPARAM,\n    D3D11_MESSAGE_ID_GETCRYPTOSESSIONCERTIFICATESIZE_NULLPARAM,\n    D3D11_MESSAGE_ID_GETCRYPTOSESSIONCERTIFICATE_NULLPARAM,\n    D3D11_MESSAGE_ID_GETCRYPTOSESSIONCERTIFICATE_WRONGSIZE,\n    D3D11_MESSAGE_ID_GETCRYPTOSESSIONHANDLE_WRONGSIZE,\n    D3D11_MESSAGE_ID_NEGOTIATECRPYTOSESSIONKEYEXCHANGE_NULLPARAM,\n    D3D11_MESSAGE_ID_ENCRYPTIONBLT_UNSUPPORTED,\n    D3D11_MESSAGE_ID_ENCRYPTIONBLT_NULLPARAM,\n    D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_WRONGDEVICE,\n    D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_WRONGDEVICE,\n    D3D11_MESSAGE_ID_ENCRYPTIONBLT_FORMAT_MISMATCH,\n    D3D11_MESSAGE_ID_ENCRYPTIONBLT_SIZE_MISMATCH,\n    D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_MULTISAMPLED,\n    D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_NOT_STAGING,\n    D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_MAPPED,\n    D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_MAPPED,\n    D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_OFFERED,\n    D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_OFFERED,\n    D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_CONTENT_UNDEFINED,\n    D3D11_MESSAGE_ID_DECRYPTIONBLT_UNSUPPORTED,\n    D3D11_MESSAGE_ID_DECRYPTIONBLT_NULLPARAM,\n    D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_WRONGDEVICE,\n    D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_WRONGDEVICE,\n    D3D11_MESSAGE_ID_DECRYPTIONBLT_FORMAT_MISMATCH,\n    D3D11_MESSAGE_ID_DECRYPTIONBLT_SIZE_MISMATCH,\n    D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_MULTISAMPLED,\n    D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_NOT_STAGING,\n    D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_NOT_RENDER_TARGET,\n    D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_MAPPED,\n    D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_MAPPED,\n    D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_OFFERED,\n    D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_OFFERED,\n    D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_CONTENT_UNDEFINED,\n    D3D11_MESSAGE_ID_STARTSESSIONKEYREFRESH_NULLPARAM,\n    D3D11_MESSAGE_ID_STARTSESSIONKEYREFRESH_INVALIDSIZE,\n    D3D11_MESSAGE_ID_FINISHSESSIONKEYREFRESH_NULLPARAM,\n    D3D11_MESSAGE_ID_GETENCRYPTIONBLTKEY_NULLPARAM,\n    D3D11_MESSAGE_ID_GETENCRYPTIONBLTKEY_INVALIDSIZE,\n    D3D11_MESSAGE_ID_GETCONTENTPROTECTIONCAPS_NULLPARAM,\n    D3D11_MESSAGE_ID_CHECKCRYPTOKEYEXCHANGE_NULLPARAM,\n    D3D11_MESSAGE_ID_CHECKCRYPTOKEYEXCHANGE_INVALIDINDEX,\n    D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_NULLPARAM,\n    D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_UNSUPPORTED,\n    D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_INVALIDTYPE,\n    D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_OUTOFMEMORY_RETURN,\n    D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATESIZE_INVALIDCHANNEL,\n    D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATESIZE_NULLPARAM,\n    D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATE_INVALIDCHANNEL,\n    D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATE_NULLPARAM,\n    D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATE_WRONGSIZE,\n    D3D11_MESSAGE_ID_NEGOTIATEAUTHENTICATEDCHANNELKEYEXCHANGE_INVALIDCHANNEL,\n    D3D11_MESSAGE_ID_NEGOTIATEAUTHENTICATEDCHANNELKEYEXCHANGE_NULLPARAM,\n    D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_NULLPARAM,\n    D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_WRONGCHANNEL,\n    D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_UNSUPPORTEDQUERY,\n    D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_WRONGSIZE,\n    D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_INVALIDPROCESSINDEX,\n    D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_NULLPARAM,\n    D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_WRONGCHANNEL,\n    D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_UNSUPPORTEDCONFIGURE,\n    D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_WRONGSIZE,\n    D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_INVALIDPROCESSIDTYPE,\n    D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT,\n    D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT,\n    D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT,\n    D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT,\n    D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT,\n    D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT,\n    D3D11_MESSAGE_ID_NEGOTIATECRPYTOSESSIONKEYEXCHANGE_INVALIDSIZE,\n    D3D11_MESSAGE_ID_NEGOTIATEAUTHENTICATEDCHANNELKEYEXCHANGE_INVALIDSIZE,\n    D3D11_MESSAGE_ID_OFFERRESOURCES_INVALIDPRIORITY,\n    D3D11_MESSAGE_ID_GETCRYPTOSESSIONHANDLE_OUTOFMEMORY,\n    D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_NULLPARAM,\n    D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_INVALIDTYPE,\n    D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_INVALIDBIND,\n    D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_INVALIDARRAY,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_NULLPARAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_INVALIDSTREAM,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_INVALID,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_UNSUPPORTED,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMROTATION_NULLPARAM,\n    D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDVIEW,\n    D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEEXTENSIONSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_SHADEREXTENSIONSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEEXTENSIONSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_SHADEREXTENSIONSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEEXTENSIONSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_SHADEREXTENSIONSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEEXTENSIONSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_SHADEREXTENSIONSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEEXTENSIONSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_SHADEREXTENSIONSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEEXTENSIONSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_SHADEREXTENSIONSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEEXTENSIONSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_SHADEREXTENSIONSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_MINPRECISION,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_UNSUPPORTED,\n    D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_UNSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_UAVSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_UAVSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_UAVSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_UAVSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UAVSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_UAVSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_UAVSNOTSUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_INVALIDOFFSET,\n    D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_TOOMANYVIEWS,\n    D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_NOTSUPPORTED,\n    D3D11_MESSAGE_ID_SWAPDEVICECONTEXTSTATE_NOTSUPPORTED,\n    D3D11_MESSAGE_ID_UPDATESUBRESOURCE_PREFERUPDATESUBRESOURCE1,\n    D3D11_MESSAGE_ID_GETDC_INACCESSIBLE,\n    D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDRECT,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLE_MASK_IGNORED_ON_FL9,\n    D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE1_NOT_SUPPORTED,\n    D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BY_NAME_NOT_SUPPORTED,\n    D3D11_MESSAGE_ID_ENQUEUESETEVENT_NOT_SUPPORTED,\n    D3D11_MESSAGE_ID_OFFERRELEASE_NOT_SUPPORTED,\n    D3D11_MESSAGE_ID_OFFERRESOURCES_INACCESSIBLE,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMSAA,\n    D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDMSAA,\n    D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDSOURCERECT,\n    D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_EMPTYRECT,\n    D3D11_MESSAGE_ID_UPDATESUBRESOURCE_EMPTYDESTBOX,\n    D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_EMPTYSOURCEBOX,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_LOGIC_OPS,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_DEPTHSTENCILVIEW_NOT_SET,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_RENDERTARGETVIEW_NOT_SET,\n    D3D11_MESSAGE_ID_DEVICE_DRAW_RENDERTARGETVIEW_NOT_SET_DUE_TO_FLIP_PRESENT,\n    D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_NOT_SET_DUE_TO_FLIP_PRESENT,\n    D3D11_MESSAGE_ID_D3D11_1_MESSAGES_END\n} D3D11_MESSAGE_ID;\n\ntypedef enum D3D11_RLDO_FLAGS {\n    D3D11_RLDO_SUMMARY = 1,\n    D3D11_RLDO_DETAIL = 2\n} D3D11_RLDO_FLAGS;\n\ntypedef struct D3D11_MESSAGE {\n    D3D11_MESSAGE_CATEGORY Category;\n    D3D11_MESSAGE_SEVERITY Severity;\n    D3D11_MESSAGE_ID ID;\n    const char *pDescription;\n    SIZE_T DescriptionByteLength;\n} D3D11_MESSAGE;\n\ntypedef struct D3D11_INFO_QUEUE_FILTER_DESC {\n    UINT NumCategories;\n    D3D11_MESSAGE_CATEGORY *pCategoryList;\n    UINT NumSeverities;\n    D3D11_MESSAGE_SEVERITY *pSeverityList;\n    UINT NumIDs;\n    D3D11_MESSAGE_ID *pIDList;\n} D3D11_INFO_QUEUE_FILTER_DESC;\n\ntypedef struct D3D11_INFO_QUEUE_FILTER {\n    D3D11_INFO_QUEUE_FILTER_DESC AllowList;\n    D3D11_INFO_QUEUE_FILTER_DESC DenyList;\n} D3D11_INFO_QUEUE_FILTER;\n\ncpp_quote(\"#define D3D11_INFO_QUEUE_DEFAULT_MESSAGE_COUNT_LIMIT 1024\")\n\n[\n    object,\n    uuid(79cf2233-7536-4948-9d36-1e4692dc5760),\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11Debug : IUnknown {\n    HRESULT SetFeatureMask(UINT Mask);\n    UINT GetFeatureMask();\n    HRESULT SetPresentPerRenderOpDelay(UINT Milliseconds);\n    UINT GetPresentPerRenderOpDelay();\n    HRESULT SetSwapChain(IDXGISwapChain *pSwapChain);\n    HRESULT GetSwapChain(IDXGISwapChain **ppSwapChain);\n    HRESULT ValidateContext(ID3D11DeviceContext *pContext);\n    HRESULT ReportLiveDeviceObjects(D3D11_RLDO_FLAGS Flags);\n    HRESULT ValidateContextForDispatch(ID3D11DeviceContext *pContext);\n}\n\n[\n    object,\n    uuid(6543dbb6-1b48-42f5-ab82-e97ec74326f6),\n    local,\n    pointer_default(unique)\n]\ninterface ID3D11InfoQueue : IUnknown {\n    HRESULT SetMessageCountLimit(UINT64 MessageCountLimit);\n    void ClearStoredMessages();\n\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef GetMessage\")\ncpp_quote(\"#endif\")\n    HRESULT GetMessage(UINT64 MessageIndex, D3D11_MESSAGE* pMessage, SIZE_T *pMessageByteLength);\n\n    UINT64 GetNumMessagesAllowedByStorageFilter();\n    UINT64 GetNumMessagesDeniedByStorageFilter();\n    UINT64 GetNumStoredMessages();\n    UINT64 GetNumStoredMessagesAllowedByRetrievalFilter();\n    UINT64 GetNumMessagesDiscardedByMessageCountLimit();\n    UINT64 GetMessageCountLimit();\n    HRESULT AddStorageFilterEntries(D3D11_INFO_QUEUE_FILTER *pFilter);\n    HRESULT GetStorageFilter(D3D11_INFO_QUEUE_FILTER *pFilter, SIZE_T *pFilterByteLength);\n    void ClearStorageFilter();\n    HRESULT PushEmptyStorageFilter();\n    HRESULT PushCopyOfStorageFilter();\n    HRESULT PushStorageFilter(D3D11_INFO_QUEUE_FILTER *pFilter);\n    void PopStorageFilter();\n    UINT GetStorageFilterStackSize();\n    HRESULT AddRetrievalFilterEntries(D3D11_INFO_QUEUE_FILTER *pFilter);\n    HRESULT GetRetrievalFilter(D3D11_INFO_QUEUE_FILTER *pFilter, SIZE_T *pFilterByteLength);\n    void ClearRetrievalFilter();\n    HRESULT PushEmptyRetrievalFilter();\n    HRESULT PushCopyOfRetrievalFilter();\n    HRESULT PushRetrievalFilter(D3D11_INFO_QUEUE_FILTER *pFilter);\n    void PopRetrievalFilter();\n    UINT GetRetrievalFilterStackSize();\n    HRESULT AddMessage(D3D11_MESSAGE_CATEGORY Category, D3D11_MESSAGE_SEVERITY Severity,\n            D3D11_MESSAGE_ID ID, LPCSTR pDescription);\n    HRESULT AddApplicationMessage(D3D11_MESSAGE_SEVERITY Severity, LPCSTR pDescription);\n    HRESULT SetBreakOnCategory(D3D11_MESSAGE_CATEGORY Category, BOOL bEnable);\n    HRESULT SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY Severity, BOOL bEnable);\n    HRESULT SetBreakOnID(D3D11_MESSAGE_ID ID, BOOL bEnable);\n    BOOL GetBreakOnCategory(D3D11_MESSAGE_CATEGORY Category);\n    BOOL GetBreakOnSeverity(D3D11_MESSAGE_SEVERITY Severity);\n    BOOL GetBreakOnID(D3D11_MESSAGE_ID ID);\n    void SetMuteDebugOutput(BOOL bMute);\n    BOOL GetMuteDebugOutput();\n}\n"
  },
  {
    "path": "wine/windows/d3d11shader.h",
    "content": "/*\n * Copyright 2010 Matteo Bruni for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __D3D11SHADER_H__\n#define __D3D11SHADER_H__\n\n#include \"d3dcommon.h\"\n\n/* These are defined as version-neutral in d3dcommon.h */\ntypedef D3D_CBUFFER_TYPE D3D11_CBUFFER_TYPE;\n\ntypedef D3D_RESOURCE_RETURN_TYPE D3D11_RESOURCE_RETURN_TYPE;\n\ntypedef D3D_TESSELLATOR_DOMAIN D3D11_TESSELLATOR_DOMAIN;\n\ntypedef D3D_TESSELLATOR_PARTITIONING D3D11_TESSELLATOR_PARTITIONING;\n\ntypedef D3D_TESSELLATOR_OUTPUT_PRIMITIVE D3D11_TESSELLATOR_OUTPUT_PRIMITIVE;\n\ntypedef struct _D3D11_SHADER_DESC\n{\n    UINT Version;\n    const char *Creator;\n    UINT Flags;\n    UINT ConstantBuffers;\n    UINT BoundResources;\n    UINT InputParameters;\n    UINT OutputParameters;\n    UINT InstructionCount;\n    UINT TempRegisterCount;\n    UINT TempArrayCount;\n    UINT DefCount;\n    UINT DclCount;\n    UINT TextureNormalInstructions;\n    UINT TextureLoadInstructions;\n    UINT TextureCompInstructions;\n    UINT TextureBiasInstructions;\n    UINT TextureGradientInstructions;\n    UINT FloatInstructionCount;\n    UINT IntInstructionCount;\n    UINT UintInstructionCount;\n    UINT StaticFlowControlCount;\n    UINT DynamicFlowControlCount;\n    UINT MacroInstructionCount;\n    UINT ArrayInstructionCount;\n    UINT CutInstructionCount;\n    UINT EmitInstructionCount;\n    D3D_PRIMITIVE_TOPOLOGY GSOutputTopology;\n    UINT GSMaxOutputVertexCount;\n    D3D_PRIMITIVE InputPrimitive;\n    UINT PatchConstantParameters;\n    UINT cGSInstanceCount;\n    UINT cControlPoints;\n    D3D_TESSELLATOR_OUTPUT_PRIMITIVE HSOutputPrimitive;\n    D3D_TESSELLATOR_PARTITIONING HSPartitioning;\n    D3D_TESSELLATOR_DOMAIN TessellatorDomain;\n    UINT cBarrierInstructions;\n    UINT cInterlockedInstructions;\n    UINT cTextureStoreInstructions;\n} D3D11_SHADER_DESC;\n\ntypedef struct _D3D11_SHADER_VARIABLE_DESC\n{\n    const char *Name;\n    UINT StartOffset;\n    UINT Size;\n    UINT uFlags;\n    void *DefaultValue;\n    UINT StartTexture;\n    UINT TextureSize;\n    UINT StartSampler;\n    UINT SamplerSize;\n} D3D11_SHADER_VARIABLE_DESC;\n\ntypedef struct _D3D11_SHADER_TYPE_DESC\n{\n    D3D_SHADER_VARIABLE_CLASS Class;\n    D3D_SHADER_VARIABLE_TYPE Type;\n    UINT Rows;\n    UINT Columns;\n    UINT Elements;\n    UINT Members;\n    UINT Offset;\n    const char *Name;\n} D3D11_SHADER_TYPE_DESC;\n\ntypedef struct _D3D11_SHADER_BUFFER_DESC\n{\n    const char *Name;\n    D3D_CBUFFER_TYPE Type;\n    UINT Variables;\n    UINT Size;\n    UINT uFlags;\n} D3D11_SHADER_BUFFER_DESC;\n\ntypedef struct _D3D11_SHADER_INPUT_BIND_DESC\n{\n    const char *Name;\n    D3D_SHADER_INPUT_TYPE Type;\n    UINT BindPoint;\n    UINT BindCount;\n    UINT uFlags;\n    D3D_RESOURCE_RETURN_TYPE ReturnType;\n    D3D_SRV_DIMENSION Dimension;\n    UINT NumSamples;\n} D3D11_SHADER_INPUT_BIND_DESC;\n\ntypedef struct _D3D11_SIGNATURE_PARAMETER_DESC\n{\n    const char *SemanticName;\n    UINT SemanticIndex;\n    UINT Register;\n    D3D_NAME SystemValueType;\n    D3D_REGISTER_COMPONENT_TYPE ComponentType;\n    BYTE Mask;\n    BYTE ReadWriteMask;\n    UINT Stream;\n} D3D11_SIGNATURE_PARAMETER_DESC;\n\nDEFINE_GUID(IID_ID3D11ShaderReflectionType, 0x6e6ffa6a, 0x9bae, 0x4613, 0xa5, 0x1e, 0x91, 0x65, 0x2d, 0x50, 0x8c, 0x21);\n\n#define INTERFACE ID3D11ShaderReflectionType\nDECLARE_INTERFACE(ID3D11ShaderReflectionType)\n{\n    STDMETHOD(GetDesc)(THIS_ D3D11_SHADER_TYPE_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D11ShaderReflectionType *, GetMemberTypeByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D11ShaderReflectionType *, GetMemberTypeByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(const char *, GetMemberTypeName)(THIS_ UINT index) PURE;\n    STDMETHOD(IsEqual)(THIS_ struct ID3D11ShaderReflectionType *type) PURE;\n    STDMETHOD_(struct ID3D11ShaderReflectionType *, GetSubType)(THIS) PURE;\n    STDMETHOD_(struct ID3D11ShaderReflectionType *, GetBaseClass)(THIS) PURE;\n    STDMETHOD_(UINT, GetNumInterfaces)(THIS) PURE;\n    STDMETHOD_(struct ID3D11ShaderReflectionType *, GetInterfaceByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD(IsOfType)(THIS_ struct ID3D11ShaderReflectionType *type) PURE;\n    STDMETHOD(ImplementsInterface)(THIS_ ID3D11ShaderReflectionType *base) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D11ShaderReflectionVariable, 0x51f23923, 0xf3e5, 0x4bd1, 0x91, 0xcb, 0x60, 0x61, 0x77, 0xd8, 0xdb, 0x4c);\n\n#define INTERFACE ID3D11ShaderReflectionVariable\nDECLARE_INTERFACE(ID3D11ShaderReflectionVariable)\n{\n    STDMETHOD(GetDesc)(THIS_ D3D11_SHADER_VARIABLE_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D11ShaderReflectionType *, GetType)(THIS) PURE;\n    STDMETHOD_(struct ID3D11ShaderReflectionConstantBuffer *, GetBuffer)(THIS) PURE;\n    STDMETHOD_(UINT, GetInterfaceSlot)(THIS_ UINT index) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D11ShaderReflectionConstantBuffer, 0xeb62d63d, 0x93dd, 0x4318, 0x8a, 0xe8, 0xc6, 0xf8, 0x3a, 0xd3, 0x71, 0xb8);\n\n#define INTERFACE ID3D11ShaderReflectionConstantBuffer\nDECLARE_INTERFACE(ID3D11ShaderReflectionConstantBuffer)\n{\n    STDMETHOD(GetDesc)(THIS_ D3D11_SHADER_BUFFER_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D11ShaderReflectionVariable *, GetVariableByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D11ShaderReflectionVariable *, GetVariableByName)(THIS_ const char *name) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D11ShaderReflection, 0x0a233719, 0x3960, 0x4578, 0x9d, 0x7c, 0x20, 0x3b, 0x8b, 0x1d, 0x9c, 0xc1);\n\n#define INTERFACE ID3D11ShaderReflection\nDECLARE_INTERFACE_(ID3D11ShaderReflection, IUnknown)\n{\n    /* IUnknown methods */\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /* ID3D11ShaderReflection methods */\n    STDMETHOD(GetDesc)(THIS_ D3D11_SHADER_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D11ShaderReflectionConstantBuffer *, GetConstantBufferByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(struct ID3D11ShaderReflectionConstantBuffer *, GetConstantBufferByName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetResourceBindingDesc)(THIS_ UINT index, D3D11_SHADER_INPUT_BIND_DESC *desc) PURE;\n    STDMETHOD(GetInputParameterDesc)(THIS_ UINT index, D3D11_SIGNATURE_PARAMETER_DESC *desc) PURE;\n    STDMETHOD(GetOutputParameterDesc)(THIS_ UINT index, D3D11_SIGNATURE_PARAMETER_DESC *desc) PURE;\n    STDMETHOD(GetPatchConstantParameterDesc)(THIS_ UINT index, D3D11_SIGNATURE_PARAMETER_DESC *desc) PURE;\n    STDMETHOD_(struct ID3D11ShaderReflectionVariable *, GetVariableByName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetResourceBindingDescByName)(THIS_ const char *name, D3D11_SHADER_INPUT_BIND_DESC *desc) PURE;\n    STDMETHOD_(UINT, GetMovInstructionCount)(THIS) PURE;\n    STDMETHOD_(UINT, GetMovcInstructionCount)(THIS) PURE;\n    STDMETHOD_(UINT, GetConversionInstructionCount)(THIS) PURE;\n    STDMETHOD_(UINT, GetBitwiseInstructionCount)(THIS) PURE;\n    STDMETHOD_(D3D_PRIMITIVE, GetGSInputPrimitive)(THIS) PURE;\n    STDMETHOD_(BOOL, IsSampleFrequencyShader)(THIS) PURE;\n    STDMETHOD_(UINT, GetNumInterfaceSlots)(THIS) PURE;\n    STDMETHOD(GetMinFeatureLevel)(THIS_ enum D3D_FEATURE_LEVEL *level) PURE;\n    STDMETHOD_(UINT, GetThreadGroupSize)(THIS_ UINT *sizex, UINT *sizey, UINT *sizez) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D11ModuleInstance, 0x469e07f7, 0x45a, 0x48d5, 0xaa, 0x12, 0x68, 0xa4, 0x78, 0xcd, 0xf7, 0x5d);\n\n#define INTERFACE ID3D11ModuleInstance\nDECLARE_INTERFACE_(ID3D11ModuleInstance, IUnknown)\n{\n    STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n\n    /* ID3D11ModuleInstance methods */\n    STDMETHOD(BindConstantBuffer)(THIS_ UINT srcslot, UINT dstslot, UINT dstoffset) PURE;\n    STDMETHOD(BindConstantBufferByName)(THIS_ const char *name, UINT dstslot, UINT dstoffset) PURE;\n\n    STDMETHOD(BindResource)(THIS_ UINT srcslot, UINT dstslot, UINT count) PURE;\n    STDMETHOD(BindResourceByName)(THIS_ const char *name, UINT dstslot, UINT count) PURE;\n\n    STDMETHOD(BindSampler)(THIS_ UINT srcslot,  UINT dstslot,  UINT count) PURE;\n    STDMETHOD(BindSamplerByName)(THIS_ const char *name,  UINT dstslot, UINT count) PURE;\n\n    STDMETHOD(BindUnorderedAccessView)(THIS_ UINT srcslot,  UINT dstslot, UINT count) PURE;\n    STDMETHOD(BindUnorderedAccessViewByName)(THIS_ const char *name, UINT dstslot, UINT count) PURE;\n\n    STDMETHOD(BindResourceAsUnorderedAccessView)(THIS_ UINT srcslot, UINT dstslot, UINT count) PURE;\n    STDMETHOD(BindResourceAsUnorderedAccessViewByName)(THIS_ const char *name, UINT dstslot, UINT count) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(IID_ID3D11Module, 0xcac701ee, 0x80fc, 0x4122, 0x82, 0x42, 0x10, 0xb3, 0x9c, 0x8c, 0xec, 0x34);\n\n#define INTERFACE ID3D11Module\nDECLARE_INTERFACE_(ID3D11Module, IUnknown)\n{\n    STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n\n    /* ID3D11Module methods */\n    STDMETHOD(CreateInstance)(THIS_ const char *instnamespace, ID3D11ModuleInstance **moduleinstance) PURE;\n};\n#undef INTERFACE\n\n#endif\n"
  },
  {
    "path": "wine/windows/d3d12.idl",
    "content": "/*\n * Copyright 2016 Józef Kucia for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"dxgi.idl\";\nimport \"d3dcommon.idl\";\n\ncpp_quote(\"#ifndef _D3D12_CONSTANTS\")\ncpp_quote(\"#define _D3D12_CONSTANTS\")\n\nconst UINT D3D12_CS_TGSM_REGISTER_COUNT = 8192;\nconst UINT D3D12_MAX_ROOT_COST = 64;\nconst UINT D3D12_VIEWPORT_BOUNDS_MAX = 32767;\nconst UINT D3D12_VIEWPORT_BOUNDS_MIN = -32768;\n\nconst UINT D3D12_APPEND_ALIGNED_ELEMENT = 0xffffffff;\ncpp_quote(\"#define D3D12_DEFAULT_BLEND_FACTOR_ALPHA (1.0f)\")\ncpp_quote(\"#define D3D12_DEFAULT_BLEND_FACTOR_BLUE (1.0f)\")\ncpp_quote(\"#define D3D12_DEFAULT_BLEND_FACTOR_GREEN (1.0f)\")\ncpp_quote(\"#define D3D12_DEFAULT_BLEND_FACTOR_RED (1.0f)\")\nconst UINT D3D12_DEFAULT_DEPTH_BIAS = 0;\ncpp_quote(\"#define D3D12_DEFAULT_DEPTH_BIAS_CLAMP (0.0f)\")\ncpp_quote(\"#define D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS (0.0f)\")\nconst UINT D3D12_DEFAULT_STENCIL_READ_MASK = 0xff;\nconst UINT D3D12_DEFAULT_STENCIL_WRITE_MASK = 0xff;\nconst UINT D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND = 0xffffffff;\ncpp_quote(\"#define D3D12_FLOAT32_MAX (3.402823466e+38f)\")\nconst UINT D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT = 32;\nconst UINT D3D12_REQ_MIP_LEVELS = 15;\nconst UINT D3D12_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION = 2048;\nconst UINT D3D12_REQ_TEXTURE1D_U_DIMENSION = 16384;\nconst UINT D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION = 2048;\nconst UINT D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION = 16384;\nconst UINT D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION = 2048;\nconst UINT D3D12_REQ_TEXTURECUBE_DIMENSION = 16384;\nconst UINT D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES = 0xffffffff;\nconst UINT D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT = 8;\nconst UINT D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT = 256;\nconst UINT D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT = 65536;\nconst UINT D3D12_TEXTURE_DATA_PITCH_ALIGNMENT = 256;\nconst UINT D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT = 512;\nconst UINT D3D12_VS_INPUT_REGISTER_COUNT = 32;\nconst UINT D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE = 16;\n\ncpp_quote(\"#endif\")\n\nconst UINT D3D12_SHADER_COMPONENT_MAPPING_MASK = 0x7;\nconst UINT D3D12_SHADER_COMPONENT_MAPPING_SHIFT = 3;\nconst UINT D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES\n        = 1 << (D3D12_SHADER_COMPONENT_MAPPING_SHIFT * 4);\n\ntypedef enum D3D12_SHADER_MIN_PRECISION_SUPPORT\n{\n    D3D12_SHADER_MIN_PRECISION_SUPPORT_NONE = 0x0,\n    D3D12_SHADER_MIN_PRECISION_SUPPORT_10_BIT = 0x1,\n    D3D12_SHADER_MIN_PRECISION_SUPPORT_16_BIT = 0x2,\n} D3D12_SHADER_MIN_PRECISION_SUPPORT;\n\ntypedef enum D3D12_TILED_RESOURCES_TIER\n{\n    D3D12_TILED_RESOURCES_TIER_NOT_SUPPORTED = 0,\n    D3D12_TILED_RESOURCES_TIER_1 = 1,\n    D3D12_TILED_RESOURCES_TIER_2 = 2,\n    D3D12_TILED_RESOURCES_TIER_3 = 3,\n} D3D12_TILED_RESOURCES_TIER;\n\ntypedef enum D3D12_RESOURCE_BINDING_TIER\n{\n    D3D12_RESOURCE_BINDING_TIER_1 = 1,\n    D3D12_RESOURCE_BINDING_TIER_2 = 2,\n    D3D12_RESOURCE_BINDING_TIER_3 = 3,\n} D3D12_RESOURCE_BINDING_TIER;\n\ntypedef enum D3D12_CONSERVATIVE_RASTERIZATION_TIER\n{\n    D3D12_CONSERVATIVE_RASTERIZATION_TIER_NOT_SUPPORTED = 0,\n    D3D12_CONSERVATIVE_RASTERIZATION_TIER_1 = 1,\n    D3D12_CONSERVATIVE_RASTERIZATION_TIER_2 = 2,\n    D3D12_CONSERVATIVE_RASTERIZATION_TIER_3 = 3,\n} D3D12_CONSERVATIVE_RASTERIZATION_TIER;\n\ntypedef enum D3D12_CROSS_NODE_SHARING_TIER\n{\n    D3D12_CROSS_NODE_SHARING_TIER_NOT_SUPPORTED = 0,\n    D3D12_CROSS_NODE_SHARING_TIER_1_EMULATED = 1,\n    D3D12_CROSS_NODE_SHARING_TIER_1 = 2,\n    D3D12_CROSS_NODE_SHARING_TIER_2 = 3,\n} D3D12_CROSS_NODE_SHARING_TIER;\n\ntypedef enum D3D12_RESOURCE_HEAP_TIER\n{\n    D3D12_RESOURCE_HEAP_TIER_1 = 1,\n    D3D12_RESOURCE_HEAP_TIER_2 = 2,\n} D3D12_RESOURCE_HEAP_TIER;\n\ntypedef enum D3D12_FORMAT_SUPPORT1\n{\n    D3D12_FORMAT_SUPPORT1_NONE = 0x00000000,\n    D3D12_FORMAT_SUPPORT1_BUFFER = 0x00000001,\n    D3D12_FORMAT_SUPPORT1_IA_VERTEX_BUFFER = 0x00000002,\n    D3D12_FORMAT_SUPPORT1_IA_INDEX_BUFFER = 0x00000004,\n    D3D12_FORMAT_SUPPORT1_SO_BUFFER = 0x00000008,\n    D3D12_FORMAT_SUPPORT1_TEXTURE1D = 0x00000010,\n    D3D12_FORMAT_SUPPORT1_TEXTURE2D = 0x00000020,\n    D3D12_FORMAT_SUPPORT1_TEXTURE3D = 0x00000040,\n    D3D12_FORMAT_SUPPORT1_TEXTURECUBE = 0x00000080,\n    D3D12_FORMAT_SUPPORT1_SHADER_LOAD = 0x00000100,\n    D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE = 0x00000200,\n    D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_COMPARISON = 0x00000400,\n    D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_MONO_TEXT = 0x00000800,\n    D3D12_FORMAT_SUPPORT1_MIP = 0x00001000,\n    D3D12_FORMAT_SUPPORT1_RENDER_TARGET = 0x00004000,\n    D3D12_FORMAT_SUPPORT1_BLENDABLE = 0x00008000,\n    D3D12_FORMAT_SUPPORT1_DEPTH_STENCIL = 0x00010000,\n    D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RESOLVE = 0x00040000,\n    D3D12_FORMAT_SUPPORT1_DISPLAY = 0x00080000,\n    D3D12_FORMAT_SUPPORT1_CAST_WITHIN_BIT_LAYOUT = 0x00100000,\n    D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RENDERTARGET = 0x00200000,\n    D3D12_FORMAT_SUPPORT1_MULTISAMPLE_LOAD = 0x00400000,\n    D3D12_FORMAT_SUPPORT1_SHADER_GATHER = 0x00800000,\n    D3D12_FORMAT_SUPPORT1_BACK_BUFFER_CAST = 0x01000000,\n    D3D12_FORMAT_SUPPORT1_TYPED_UNORDERED_ACCESS_VIEW = 0x02000000,\n    D3D12_FORMAT_SUPPORT1_SHADER_GATHER_COMPARISON = 0x04000000,\n    D3D12_FORMAT_SUPPORT1_DECODER_OUTPUT = 0x08000000,\n    D3D12_FORMAT_SUPPORT1_VIDEO_PROCESSOR_OUTPUT = 0x10000000,\n    D3D12_FORMAT_SUPPORT1_VIDEO_PROCESSOR_INPUT = 0x20000000,\n    D3D12_FORMAT_SUPPORT1_VIDEO_ENCODER = 0x40000000,\n} D3D12_FORMAT_SUPPORT1;\n\ntypedef enum D3D12_FORMAT_SUPPORT2\n{\n    D3D12_FORMAT_SUPPORT2_NONE = 0x00000000,\n    D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_ADD = 0x00000001,\n    D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_BITWISE_OPS = 0x00000002,\n    D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_COMPARE_STORE_OR_COMPARE_EXCHANGE = 0x00000004,\n    D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_EXCHANGE = 0x00000008,\n    D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_SIGNED_MIN_OR_MAX = 0x00000010,\n    D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_UNSIGNED_MIN_OR_MAX = 0x00000020,\n    D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD = 0x00000040,\n    D3D12_FORMAT_SUPPORT2_UAV_TYPED_STORE = 0x00000080,\n    D3D12_FORMAT_SUPPORT2_OUTPUT_MERGER_LOGIC_OP = 0x00000100,\n    D3D12_FORMAT_SUPPORT2_TILED = 0x00000200,\n    D3D12_FORMAT_SUPPORT2_MULTIPLANE_OVERLAY = 0x00004000,\n} D3D12_FORMAT_SUPPORT2;\n\ninterface ID3D12Fence;\ninterface ID3D12RootSignature;\ninterface ID3D12Heap;\ninterface ID3D12DescriptorHeap;\ninterface ID3D12Resource;\ninterface ID3D12CommandAllocator;\ninterface ID3D12GraphicsCommandList;\ninterface ID3D12CommandQueue;\ninterface ID3D12PipelineState;\ninterface ID3D12Device;\n\ntypedef RECT D3D12_RECT;\n\ntypedef struct D3D12_BOX\n{\n    UINT left;\n    UINT top;\n    UINT front;\n    UINT right;\n    UINT bottom;\n    UINT back;\n} D3D12_BOX;\n\ntypedef struct D3D12_VIEWPORT\n{\n    FLOAT TopLeftX;\n    FLOAT TopLeftY;\n    FLOAT Width;\n    FLOAT Height;\n    FLOAT MinDepth;\n    FLOAT MaxDepth;\n} D3D12_VIEWPORT;\n\ntypedef struct D3D12_RANGE\n{\n    SIZE_T Begin;\n    SIZE_T End;\n} D3D12_RANGE;\n\ntypedef struct D3D12_RESOURCE_ALLOCATION_INFO\n{\n    UINT64 SizeInBytes;\n    UINT64 Alignment;\n} D3D12_RESOURCE_ALLOCATION_INFO;\n\ntypedef struct D3D12_DRAW_ARGUMENTS\n{\n    UINT VertexCountPerInstance;\n    UINT InstanceCount;\n    UINT StartVertexLocation;\n    UINT StartInstanceLocation;\n} D3D12_DRAW_ARGUMENTS;\n\ntypedef struct D3D12_DRAW_INDEXED_ARGUMENTS\n{\n    UINT IndexCountPerInstance;\n    UINT InstanceCount;\n    UINT StartIndexLocation;\n    INT BaseVertexLocation;\n    UINT StartInstanceLocation;\n} D3D12_DRAW_INDEXED_ARGUMENTS;\n\ntypedef struct D3D12_DISPATCH_ARGUMENTS\n{\n    UINT ThreadGroupCountX;\n    UINT ThreadGroupCountY;\n    UINT ThreadGroupCountZ;\n} D3D12_DISPATCH_ARGUMENTS;\n\ntypedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS\n{\n    BOOL DoublePrecisionFloatShaderOps;\n    BOOL OutputMergerLogicOp;\n    D3D12_SHADER_MIN_PRECISION_SUPPORT MinPrecisionSupport;\n    D3D12_TILED_RESOURCES_TIER TiledResourcesTier;\n    D3D12_RESOURCE_BINDING_TIER ResourceBindingTier;\n    BOOL PSSpecifiedStencilRefSupported;\n    BOOL TypedUAVLoadAdditionalFormats;\n    BOOL ROVsSupported;\n    D3D12_CONSERVATIVE_RASTERIZATION_TIER ConservativeRasterizationTier;\n    UINT MaxGPUVirtualAddressBitsPerResource;\n    BOOL StandardSwizzle64KBSupported;\n    D3D12_CROSS_NODE_SHARING_TIER CrossNodeSharingTier;\n    BOOL CrossAdapterRowMajorTextureSupported;\n    BOOL VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation;\n    D3D12_RESOURCE_HEAP_TIER ResourceHeapTier;\n} D3D12_FEATURE_DATA_D3D12_OPTIONS;\n\ntypedef struct D3D12_FEATURE_DATA_FORMAT_SUPPORT\n{\n    DXGI_FORMAT Format;\n    D3D12_FORMAT_SUPPORT1 Support1;\n    D3D12_FORMAT_SUPPORT2 Support2;\n} D3D12_FEATURE_DATA_FORMAT_SUPPORT;\n\ntypedef enum D3D12_HEAP_TYPE\n{\n    D3D12_HEAP_TYPE_DEFAULT = 1,\n    D3D12_HEAP_TYPE_UPLOAD = 2,\n    D3D12_HEAP_TYPE_READBACK = 3,\n    D3D12_HEAP_TYPE_CUSTOM = 4,\n} D3D12_HEAP_TYPE;\n\ntypedef enum D3D12_CPU_PAGE_PROPERTY\n{\n    D3D12_CPU_PAGE_PROPERTY_UNKNOWN = 0,\n    D3D12_CPU_PAGE_PROPERTY_WRITE_COMBINE = 2,\n    D3D12_CPU_PAGE_PROPERTY_WRITE_BACK = 3,\n} D3D12_CPU_PAGE_PROPERTY;\n\ntypedef enum D3D12_MEMORY_POOL\n{\n    D3D12_MEMORY_POOL_UNKNOWN = 0,\n    D3D12_MEMORY_POOL_L0 = 1,\n    D3D12_MEMORY_POOL_L1 = 2,\n} D3D12_MEMORY_POOL;\n\ntypedef struct D3D12_HEAP_PROPERTIES\n{\n    D3D12_HEAP_TYPE Type;\n    D3D12_CPU_PAGE_PROPERTY CPUPageProperty;\n    D3D12_MEMORY_POOL MemoryPoolPreference;\n    UINT CreationNodeMask;\n    UINT VisibleNodeMask;\n} D3D12_HEAP_PROPERTIES;\n\ntypedef enum D3D12_HEAP_FLAGS\n{\n    D3D12_HEAP_FLAG_NONE = 0x00,\n    D3D12_HEAP_FLAG_SHARED = 0x01,\n    D3D12_HEAP_FLAG_DENY_BUFFERS = 0x04,\n    D3D12_HEAP_FLAG_ALLOW_DISPLAY = 0x08,\n    D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER = 0x20,\n    D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES = 0x40,\n    D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES = 0x80,\n    D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES = 0x00,\n    D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS = 0xc0,\n    D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES = 0x44,\n    D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES = 0x84,\n} D3D12_HEAP_FLAGS;\n\ntypedef struct D3D12_HEAP_DESC\n{\n    UINT64 SizeInBytes;\n    D3D12_HEAP_PROPERTIES Properties;\n    UINT64 Alignment;\n    D3D12_HEAP_FLAGS Flags;\n} D3D12_HEAP_DESC;\n\ntypedef struct D3D12_TILED_RESOURCE_COORDINATE\n{\n    UINT X;\n    UINT Y;\n    UINT Z;\n    UINT Subresource;\n} D3D12_TILED_RESOURCE_COORDINATE;\n\ntypedef struct D3D12_TILE_REGION_SIZE\n{\n    UINT NumTiles;\n    BOOL UseBox;\n    UINT Width;\n    UINT16 Height;\n    UINT16 Depth;\n} D3D12_TILE_REGION_SIZE;\n\ntypedef struct D3D12_SUBRESOURCE_TILING\n{\n    UINT WidthInTiles;\n    UINT16 HeightInTiles;\n    UINT16 DepthInTiles;\n    UINT StartTileIndexInOverallResource;\n} D3D12_SUBRESOURCE_TILING;\n\ntypedef struct D3D12_TILE_SHAPE\n{\n    UINT WidthInTexels;\n    UINT HeightInTexels;\n    UINT DepthInTexels;\n} D3D12_TILE_SHAPE;\n\ntypedef struct D3D12_SHADER_BYTECODE\n{\n    const void *pShaderBytecode;\n    SIZE_T BytecodeLength;\n} D3D12_SHADER_BYTECODE;\n\ntypedef struct D3D12_DEPTH_STENCIL_VALUE\n{\n    FLOAT Depth;\n    UINT8 Stencil;\n} D3D12_DEPTH_STENCIL_VALUE;\n\ntypedef struct D3D12_CLEAR_VALUE\n{\n    DXGI_FORMAT Format;\n    union\n    {\n        FLOAT Color[4];\n        D3D12_DEPTH_STENCIL_VALUE DepthStencil;\n    };\n} D3D12_CLEAR_VALUE;\n\ntypedef struct D3D12_PACKED_MIP_INFO\n{\n    UINT8 NumStandardMips;\n    UINT8 NumPackedMips;\n    UINT NumTilesForPackedMips;\n    UINT StartTileIndexInOverallResource;\n} D3D12_PACKED_MIP_INFO;\n\ntypedef enum D3D12_RESOURCE_STATES\n{\n    D3D12_RESOURCE_STATE_COMMON = 0,\n    D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER = 0x1,\n    D3D12_RESOURCE_STATE_INDEX_BUFFER = 0x2,\n    D3D12_RESOURCE_STATE_RENDER_TARGET = 0x4,\n    D3D12_RESOURCE_STATE_UNORDERED_ACCESS = 0x8,\n    D3D12_RESOURCE_STATE_DEPTH_WRITE = 0x10,\n    D3D12_RESOURCE_STATE_DEPTH_READ = 0x20,\n    D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE = 0x40,\n    D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE = 0x80,\n    D3D12_RESOURCE_STATE_STREAM_OUT = 0x100,\n    D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT = 0x200,\n    D3D12_RESOURCE_STATE_COPY_DEST = 0x400,\n    D3D12_RESOURCE_STATE_COPY_SOURCE = 0x800,\n    D3D12_RESOURCE_STATE_RESOLVE_DEST = 0x1000,\n    D3D12_RESOURCE_STATE_RESOLVE_SOURCE = 0x2000,\n    D3D12_RESOURCE_STATE_GENERIC_READ = 0x1 | 0x2 | 0x40 | 0x80 | 0x200 | 0x800,\n    D3D12_RESOURCE_STATE_PRESENT = 0x0,\n    D3D12_RESOURCE_STATE_PREDICATION = 0x200,\n} D3D12_RESOURCE_STATES;\ncpp_quote(\"DEFINE_ENUM_FLAG_OPERATORS(D3D12_RESOURCE_STATES);\")\n\ntypedef enum D3D12_RESOURCE_BARRIER_TYPE\n{\n    D3D12_RESOURCE_BARRIER_TYPE_TRANSITION = 0,\n    D3D12_RESOURCE_BARRIER_TYPE_ALIASING = 1,\n    D3D12_RESOURCE_BARRIER_TYPE_UAV = 2,\n} D3D12_RESOURCE_BARRIER_TYPE;\n\ntypedef enum D3D12_RESOURCE_BARRIER_FLAGS\n{\n    D3D12_RESOURCE_BARRIER_FLAG_NONE = 0x0,\n    D3D12_RESOURCE_BARRIER_FLAG_BEGIN_ONLY = 0x1,\n    D3D12_RESOURCE_BARRIER_FLAG_END_ONLY = 0x2,\n} D3D12_RESOURCE_BARRIER_FLAGS;\n\ntypedef struct D3D12_RESOURCE_TRANSITION_BARRIER\n{\n    ID3D12Resource *pResource;\n    UINT Subresource;\n    D3D12_RESOURCE_STATES StateBefore;\n    D3D12_RESOURCE_STATES StateAfter;\n} D3D12_RESOURCE_TRANSITION_BARRIER;\n\ntypedef struct D3D12_RESOURCE_ALIASING_BARRIER_ALIASING\n{\n    ID3D12Resource *pResourceBefore;\n    ID3D12Resource *pResourceAfter;\n} D3D12_RESOURCE_ALIASING_BARRIER;\n\ntypedef struct D3D12_RESOURCE_UAV_BARRIER\n{\n    ID3D12Resource *pResource;\n} D3D12_RESOURCE_UAV_BARRIER;\n\ntypedef struct D3D12_RESOURCE_BARRIER\n{\n    D3D12_RESOURCE_BARRIER_TYPE Type;\n    D3D12_RESOURCE_BARRIER_FLAGS Flags;\n    union\n    {\n        D3D12_RESOURCE_TRANSITION_BARRIER Transition;\n        D3D12_RESOURCE_ALIASING_BARRIER Aliasing;\n        D3D12_RESOURCE_UAV_BARRIER UAV;\n    };\n} D3D12_RESOURCE_BARRIER;\n\ntypedef enum D3D12_RESOURCE_DIMENSION\n{\n    D3D12_RESOURCE_DIMENSION_UNKNOWN = 0,\n    D3D12_RESOURCE_DIMENSION_BUFFER = 1,\n    D3D12_RESOURCE_DIMENSION_TEXTURE1D = 2,\n    D3D12_RESOURCE_DIMENSION_TEXTURE2D = 3,\n    D3D12_RESOURCE_DIMENSION_TEXTURE3D = 4,\n} D3D12_RESOURCE_DIMENSION;\n\ntypedef enum D3D12_TEXTURE_LAYOUT\n{\n    D3D12_TEXTURE_LAYOUT_UNKNOWN = 0,\n    D3D12_TEXTURE_LAYOUT_ROW_MAJOR = 1,\n    D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE = 2,\n    D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE = 3,\n} D3D12_TEXTURE_LAYOUT;\n\ntypedef enum D3D12_RESOURCE_FLAGS\n{\n    D3D12_RESOURCE_FLAG_NONE = 0x0,\n    D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET = 0x1,\n    D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL = 0x2,\n    D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS = 0x4,\n    D3D12_RESOURCE_FLAG_DENY_SHADER_RESOURCE = 0x8,\n    D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER = 0x10,\n    D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS = 0x20,\n} D3D12_RESOURCE_FLAGS;\ncpp_quote(\"DEFINE_ENUM_FLAG_OPERATORS(D3D12_RESOURCE_FLAGS);\")\n\ntypedef struct D3D12_RESOURCE_DESC\n{\n    D3D12_RESOURCE_DIMENSION Dimension;\n    UINT64 Alignment;\n    UINT64 Width;\n    UINT Height;\n    UINT16 DepthOrArraySize;\n    UINT16 MipLevels;\n    DXGI_FORMAT Format;\n    DXGI_SAMPLE_DESC SampleDesc;\n    D3D12_TEXTURE_LAYOUT Layout;\n    D3D12_RESOURCE_FLAGS Flags;\n} D3D12_RESOURCE_DESC;\n\ntypedef enum D3D12_TEXTURE_COPY_TYPE\n{\n    D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX = 0,\n    D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT = 1,\n} D3D12_TEXTURE_COPY_TYPE;\n\ntypedef struct D3D12_SUBRESOURCE_FOOTPRINT\n{\n    DXGI_FORMAT Format;\n    UINT Width;\n    UINT Height;\n    UINT Depth;\n    UINT RowPitch;\n} D3D12_SUBRESOURCE_FOOTPRINT;\n\ntypedef struct D3D12_PLACED_SUBRESOURCE_FOOTPRINT\n{\n    UINT64 Offset;\n    D3D12_SUBRESOURCE_FOOTPRINT Footprint;\n} D3D12_PLACED_SUBRESOURCE_FOOTPRINT;\n\ntypedef struct D3D12_TEXTURE_COPY_LOCATION\n{\n    ID3D12Resource *pResource;\n    D3D12_TEXTURE_COPY_TYPE Type;\n    union\n    {\n        D3D12_PLACED_SUBRESOURCE_FOOTPRINT PlacedFootprint;\n        UINT SubresourceIndex;\n    };\n} D3D12_TEXTURE_COPY_LOCATION;\n\ntypedef enum D3D12_DESCRIPTOR_RANGE_TYPE\n{\n    D3D12_DESCRIPTOR_RANGE_TYPE_SRV = 0,\n    D3D12_DESCRIPTOR_RANGE_TYPE_UAV = 1,\n    D3D12_DESCRIPTOR_RANGE_TYPE_CBV = 2,\n    D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER = 3,\n} D3D12_DESCRIPTOR_RANGE_TYPE;\n\ntypedef struct D3D12_DESCRIPTOR_RANGE\n{\n    D3D12_DESCRIPTOR_RANGE_TYPE RangeType;\n    UINT NumDescriptors;\n    UINT BaseShaderRegister;\n    UINT RegisterSpace;\n    UINT OffsetInDescriptorsFromTableStart;\n} D3D12_DESCRIPTOR_RANGE;\n\ntypedef enum D3D12_DESCRIPTOR_RANGE_FLAGS\n{\n    D3D12_DESCRIPTOR_RANGE_FLAG_NONE = 0,\n} D3D12_DESCRIPTOR_RANGE_FLAGS;\n\ntypedef struct D3D12_DESCRIPTOR_RANGE1\n{\n    D3D12_DESCRIPTOR_RANGE_TYPE RangeType;\n    UINT NumDescriptors;\n    UINT BaseShaderRegister;\n    UINT RegisterSpace;\n    D3D12_DESCRIPTOR_RANGE_FLAGS Flags;\n    UINT OffsetInDescriptorsFromTableStart;\n} D3D12_DESCRIPTOR_RANGE1;\n\ntypedef struct D3D12_ROOT_DESCRIPTOR_TABLE\n{\n    UINT NumDescriptorRanges;\n    const D3D12_DESCRIPTOR_RANGE *pDescriptorRanges;\n} D3D12_ROOT_DESCRIPTOR_TABLE;\n\ntypedef struct D3D12_ROOT_DESCRIPTOR_TABLE1\n{\n    UINT NumDescriptorRanges;\n    const D3D12_DESCRIPTOR_RANGE1 *pDescriptorRanges;\n} D3D12_ROOT_DESCRIPTOR_TABLE1;\n\ntypedef struct D3D12_ROOT_CONSTANTS\n{\n    UINT ShaderRegister;\n    UINT RegisterSpace;\n    UINT Num32BitValues;\n} D3D12_ROOT_CONSTANTS;\n\ntypedef struct D3D12_ROOT_DESCRIPTOR\n{\n    UINT ShaderRegister;\n    UINT RegisterSpace;\n} D3D12_ROOT_DESCRIPTOR;\n\ntypedef enum D3D12_ROOT_DESCRIPTOR_FLAGS\n{\n    D3D12_ROOT_DESCRIPTOR_FLAG_NONE = 0,\n} D3D12_ROOT_DESCRIPTOR_FLAGS;\n\ntypedef struct D3D12_ROOT_DESCRIPTOR1\n{\n    UINT ShaderRegister;\n    UINT RegisterSpace;\n    D3D12_ROOT_DESCRIPTOR_FLAGS Flags;\n} D3D12_ROOT_DESCRIPTOR1;\n\ntypedef enum D3D12_ROOT_PARAMETER_TYPE\n{\n    D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE = 0,\n    D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS = 1,\n    D3D12_ROOT_PARAMETER_TYPE_CBV = 2,\n    D3D12_ROOT_PARAMETER_TYPE_SRV = 3,\n    D3D12_ROOT_PARAMETER_TYPE_UAV = 4,\n} D3D12_ROOT_PARAMETER_TYPE;\n\ntypedef enum D3D12_SHADER_VISIBILITY\n{\n    D3D12_SHADER_VISIBILITY_ALL = 0,\n    D3D12_SHADER_VISIBILITY_VERTEX = 1,\n    D3D12_SHADER_VISIBILITY_HULL = 2,\n    D3D12_SHADER_VISIBILITY_DOMAIN = 3,\n    D3D12_SHADER_VISIBILITY_GEOMETRY = 4,\n    D3D12_SHADER_VISIBILITY_PIXEL = 5,\n} D3D12_SHADER_VISIBILITY;\n\ntypedef struct D3D12_ROOT_PARAMETER\n{\n    D3D12_ROOT_PARAMETER_TYPE ParameterType;\n    union\n    {\n        D3D12_ROOT_DESCRIPTOR_TABLE DescriptorTable;\n        D3D12_ROOT_CONSTANTS Constants;\n        D3D12_ROOT_DESCRIPTOR Descriptor;\n    };\n    D3D12_SHADER_VISIBILITY ShaderVisibility;\n} D3D12_ROOT_PARAMETER;\n\ntypedef struct D3D12_ROOT_PARAMETER1\n{\n    D3D12_ROOT_PARAMETER_TYPE ParameterType;\n    union\n    {\n        D3D12_ROOT_DESCRIPTOR_TABLE1 DescriptorTable;\n        D3D12_ROOT_CONSTANTS Constants;\n        D3D12_ROOT_DESCRIPTOR1 Descriptor;\n    };\n    D3D12_SHADER_VISIBILITY ShaderVisibility;\n} D3D12_ROOT_PARAMETER1;\n\ntypedef enum D3D12_STATIC_BORDER_COLOR\n{\n    D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK = 0,\n    D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK = 1,\n    D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE = 2,\n} D3D12_STATIC_BORDER_COLOR;\n\ntypedef enum D3D12_FILTER\n{\n    D3D12_FILTER_MIN_MAG_MIP_POINT = 0x00,\n    D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x01,\n    D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x04,\n    D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x05,\n    D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x10,\n    D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x11,\n    D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x14,\n    D3D12_FILTER_MIN_MAG_MIP_LINEAR = 0x15,\n    D3D12_FILTER_ANISOTROPIC = 0x55,\n    D3D12_FILTER_COMPARISON_MIN_MAG_MIP_POINT = 0x80,\n    D3D12_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 0x81,\n    D3D12_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x84,\n    D3D12_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 0x85,\n    D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 0x90,\n    D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91,\n    D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 0x94,\n    D3D12_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR = 0x95,\n    D3D12_FILTER_COMPARISON_ANISOTROPIC = 0xd5,\n    D3D12_FILTER_MINIMUM_MIN_MAG_MIP_POINT = 0x100,\n    D3D12_FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x101,\n    D3D12_FILTER_MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x104,\n    D3D12_FILTER_MINIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x105,\n    D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x110,\n    D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x111,\n    D3D12_FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x114,\n    D3D12_FILTER_MINIMUM_MIN_MAG_MIP_LINEAR = 0x115,\n    D3D12_FILTER_MINIMUM_ANISOTROPIC = 0x155,\n    D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_POINT = 0x180,\n    D3D12_FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x181,\n    D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x184,\n    D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x185,\n    D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x190,\n    D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x191,\n    D3D12_FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x194,\n    D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR = 0x195,\n    D3D12_FILTER_MAXIMUM_ANISOTROPIC = 0x1d5,\n} D3D12_FILTER;\n\ntypedef enum D3D12_FILTER_TYPE\n{\n    D3D12_FILTER_TYPE_POINT = 0,\n    D3D12_FILTER_TYPE_LINEAR = 1,\n} D3D12_FILTER_TYPE;\n\nconst UINT D3D12_MIP_FILTER_SHIFT = 0;\nconst UINT D3D12_MAG_FILTER_SHIFT = 2;\nconst UINT D3D12_MIN_FILTER_SHIFT = 4;\nconst UINT D3D12_FILTER_TYPE_MASK = 0x3;\n\nconst UINT D3D12_ANISOTROPIC_FILTERING_BIT = 0x40;\n\ntypedef enum D3D12_FILTER_REDUCTION_TYPE\n{\n    D3D12_FILTER_REDUCTION_TYPE_STANDARD = 0,\n    D3D12_FILTER_REDUCTION_TYPE_COMPARISON = 1,\n    D3D12_FILTER_REDUCTION_TYPE_MINIMUM = 2,\n    D3D12_FILTER_REDUCTION_TYPE_MAXIMUM = 3,\n} D3D12_FILTER_REDUCTION_TYPE;\n\nconst UINT D3D12_FILTER_REDUCTION_TYPE_MASK = 0x3;\nconst UINT D3D12_FILTER_REDUCTION_TYPE_SHIFT = 7;\n\ncpp_quote(\"#define D3D12_DECODE_MAG_FILTER(filter) \\\\\")\ncpp_quote(\"    ((D3D12_FILTER_TYPE)(((filter) >> D3D12_MAG_FILTER_SHIFT) & D3D12_FILTER_TYPE_MASK))\")\n\ncpp_quote(\"#define D3D12_DECODE_MIN_FILTER(filter) \\\\\")\ncpp_quote(\"    ((D3D12_FILTER_TYPE)(((filter) >> D3D12_MIN_FILTER_SHIFT) & D3D12_FILTER_TYPE_MASK))\")\n\ncpp_quote(\"#define D3D12_DECODE_MIP_FILTER(filter) \\\\\")\ncpp_quote(\"    ((D3D12_FILTER_TYPE)(((filter) >> D3D12_MIP_FILTER_SHIFT) & D3D12_FILTER_TYPE_MASK))\")\n\ncpp_quote(\"#define D3D12_DECODE_IS_ANISOTROPIC_FILTER(filter)  \\\\\")\ncpp_quote(\"    (((filter) & D3D12_ANISOTROPIC_FILTERING_BIT) \\\\\")\ncpp_quote(\"    && (D3D12_DECODE_MIN_FILTER(filter) == D3D12_FILTER_TYPE_LINEAR) \\\\\")\ncpp_quote(\"    && (D3D12_DECODE_MAG_FILTER(filter) == D3D12_FILTER_TYPE_LINEAR) \\\\\")\ncpp_quote(\"    && (D3D12_DECODE_MIP_FILTER(filter) == D3D12_FILTER_TYPE_LINEAR))\")\n\ncpp_quote(\"#define D3D12_DECODE_FILTER_REDUCTION(filter) \\\\\")\ncpp_quote(\"    ((D3D12_FILTER_REDUCTION_TYPE)(((filter) >> D3D12_FILTER_REDUCTION_TYPE_SHIFT) \\\\\")\ncpp_quote(\"    & D3D12_FILTER_REDUCTION_TYPE_MASK))\")\n\ncpp_quote(\"#define D3D12_DECODE_IS_COMPARISON_FILTER(filter) \\\\\")\ncpp_quote(\"    (D3D12_DECODE_FILTER_REDUCTION(filter) == D3D12_FILTER_REDUCTION_TYPE_COMPARISON)\")\n\ntypedef enum D3D12_TEXTURE_ADDRESS_MODE\n{\n    D3D12_TEXTURE_ADDRESS_MODE_WRAP = 1,\n    D3D12_TEXTURE_ADDRESS_MODE_MIRROR = 2,\n    D3D12_TEXTURE_ADDRESS_MODE_CLAMP = 3,\n    D3D12_TEXTURE_ADDRESS_MODE_BORDER = 4,\n    D3D12_TEXTURE_ADDRESS_MODE_MIRROR_ONCE = 5,\n} D3D12_TEXTURE_ADDRESS_MODE;\n\ntypedef enum D3D12_COMPARISON_FUNC\n{\n    D3D12_COMPARISON_FUNC_NEVER = 1,\n    D3D12_COMPARISON_FUNC_LESS = 2,\n    D3D12_COMPARISON_FUNC_EQUAL = 3,\n    D3D12_COMPARISON_FUNC_LESS_EQUAL = 4,\n    D3D12_COMPARISON_FUNC_GREATER = 5,\n    D3D12_COMPARISON_FUNC_NOT_EQUAL = 6,\n    D3D12_COMPARISON_FUNC_GREATER_EQUAL = 7,\n    D3D12_COMPARISON_FUNC_ALWAYS = 8,\n} D3D12_COMPARISON_FUNC;\n\ntypedef struct D3D12_STATIC_SAMPLER_DESC\n{\n    D3D12_FILTER Filter;\n    D3D12_TEXTURE_ADDRESS_MODE AddressU;\n    D3D12_TEXTURE_ADDRESS_MODE AddressV;\n    D3D12_TEXTURE_ADDRESS_MODE AddressW;\n    FLOAT MipLODBias;\n    UINT MaxAnisotropy;\n    D3D12_COMPARISON_FUNC ComparisonFunc;\n    D3D12_STATIC_BORDER_COLOR BorderColor;\n    FLOAT MinLOD;\n    FLOAT MaxLOD;\n    UINT ShaderRegister;\n    UINT RegisterSpace;\n    D3D12_SHADER_VISIBILITY ShaderVisibility;\n} D3D12_STATIC_SAMPLER_DESC;\n\ntypedef enum D3D12_ROOT_SIGNATURE_FLAGS\n{\n    D3D12_ROOT_SIGNATURE_FLAG_NONE = 0x00,\n    D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT = 0x01,\n    D3D12_ROOT_SIGNATURE_FLAG_DENY_VERTEX_SHADER_ROOT_ACCESS = 0x02,\n    D3D12_ROOT_SIGNATURE_FLAG_DENY_HULL_SHADER_ROOT_ACCESS = 0x04,\n    D3D12_ROOT_SIGNATURE_FLAG_DENY_DOMAIN_SHADER_ROOT_ACCESS = 0x08,\n    D3D12_ROOT_SIGNATURE_FLAG_DENY_GEOMETRY_SHADER_ROOT_ACCESS = 0x10,\n    D3D12_ROOT_SIGNATURE_FLAG_DENY_PIXEL_SHADER_ROOT_ACCESS = 0x20,\n    D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT = 0x40,\n} D3D12_ROOT_SIGNATURE_FLAGS;\n\ntypedef struct D3D12_ROOT_SIGNATURE_DESC\n{\n    UINT NumParameters;\n    const D3D12_ROOT_PARAMETER *pParameters;\n    UINT NumStaticSamplers;\n    const D3D12_STATIC_SAMPLER_DESC *pStaticSamplers;\n    D3D12_ROOT_SIGNATURE_FLAGS Flags;\n} D3D12_ROOT_SIGNATURE_DESC;\n\ntypedef struct D3D12_ROOT_SIGNATURE_DESC1\n{\n    UINT NumParameters;\n    const D3D12_ROOT_PARAMETER1 *pParameters;\n    UINT NumStaticSamplers;\n    const D3D12_STATIC_SAMPLER_DESC *pStaticSamplers;\n    D3D12_ROOT_SIGNATURE_FLAGS Flags;\n} D3D12_ROOT_SIGNATURE_DESC1;\n\ntypedef enum D3D_ROOT_SIGNATURE_VERSION\n{\n    D3D_ROOT_SIGNATURE_VERSION_1 = 0x1,\n    D3D_ROOT_SIGNATURE_VERSION_1_0 = 0x1,\n    D3D_ROOT_SIGNATURE_VERSION_1_1 = 0x2,\n} D3D_ROOT_SIGNATURE_VERSION;\n\ntypedef struct D3D12_VERSIONED_ROOT_SIGNATURE_DESC\n{\n    D3D_ROOT_SIGNATURE_VERSION Version;\n    union\n    {\n        D3D12_ROOT_SIGNATURE_DESC Desc_1_0;\n        D3D12_ROOT_SIGNATURE_DESC1 Desc_1_1;\n    };\n} D3D12_VERSIONED_ROOT_SIGNATURE_DESC;\n\ntypedef enum D3D12_DESCRIPTOR_HEAP_TYPE\n{\n    D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV,\n    D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER,\n    D3D12_DESCRIPTOR_HEAP_TYPE_RTV,\n    D3D12_DESCRIPTOR_HEAP_TYPE_DSV,\n    D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES,\n} D3D12_DESCRIPTOR_HEAP_TYPE;\n\ntypedef enum D3D12_DESCRIPTOR_HEAP_FLAGS\n{\n    D3D12_DESCRIPTOR_HEAP_FLAG_NONE = 0x0,\n    D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE = 0x1,\n} D3D12_DESCRIPTOR_HEAP_FLAGS;\n\ntypedef struct D3D12_DESCRIPTOR_HEAP_DESC\n{\n    D3D12_DESCRIPTOR_HEAP_TYPE Type;\n    UINT NumDescriptors;\n    D3D12_DESCRIPTOR_HEAP_FLAGS Flags;\n    UINT NodeMask;\n} D3D12_DESCRIPTOR_HEAP_DESC;\n\ntypedef UINT64 D3D12_GPU_VIRTUAL_ADDRESS;\n\ntypedef struct D3D12_CONSTANT_BUFFER_VIEW_DESC\n{\n    D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;\n    UINT SizeInBytes;\n} D3D12_CONSTANT_BUFFER_VIEW_DESC;\n\ntypedef enum D3D12_SRV_DIMENSION\n{\n    D3D12_SRV_DIMENSION_UNKNOWN = 0,\n    D3D12_SRV_DIMENSION_BUFFER = 1,\n    D3D12_SRV_DIMENSION_TEXTURE1D = 2,\n    D3D12_SRV_DIMENSION_TEXTURE1DARRAY = 3,\n    D3D12_SRV_DIMENSION_TEXTURE2D = 4,\n    D3D12_SRV_DIMENSION_TEXTURE2DARRAY = 5,\n    D3D12_SRV_DIMENSION_TEXTURE2DMS = 6,\n    D3D12_SRV_DIMENSION_TEXTURE2DMSARRAY = 7,\n    D3D12_SRV_DIMENSION_TEXTURE3D = 8,\n    D3D12_SRV_DIMENSION_TEXTURECUBE = 9,\n    D3D12_SRV_DIMENSION_TEXTURECUBEARRAY = 10,\n} D3D12_SRV_DIMENSION;\n\ntypedef enum D3D12_BUFFER_SRV_FLAGS\n{\n    D3D12_BUFFER_SRV_FLAG_NONE = 0x0,\n    D3D12_BUFFER_SRV_FLAG_RAW = 0x1,\n} D3D12_BUFFER_SRV_FLAGS;\n\ntypedef enum D3D12_SHADER_COMPONENT_MAPPING\n{\n    D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_0 = 0,\n    D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_1 = 1,\n    D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_2 = 2,\n    D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_3 = 3,\n    D3D12_SHADER_COMPONENT_MAPPING_FORCE_VALUE_0 = 4,\n    D3D12_SHADER_COMPONENT_MAPPING_FORCE_VALUE_1 = 5,\n} D3D12_SHADER_COMPONENT_MAPPING;\n\ncpp_quote(\"#define D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(x, y, z, w) \\\\\")\ncpp_quote(\"        (((x) & D3D12_SHADER_COMPONENT_MAPPING_MASK) \\\\\")\ncpp_quote(\"        | (((y) & D3D12_SHADER_COMPONENT_MAPPING_MASK) << D3D12_SHADER_COMPONENT_MAPPING_SHIFT) \\\\\")\ncpp_quote(\"        | (((z) & D3D12_SHADER_COMPONENT_MAPPING_MASK) << (D3D12_SHADER_COMPONENT_MAPPING_SHIFT * 2)) \\\\\")\ncpp_quote(\"        | (((w) & D3D12_SHADER_COMPONENT_MAPPING_MASK) << (D3D12_SHADER_COMPONENT_MAPPING_SHIFT * 3)) \\\\\")\ncpp_quote(\"        | D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES)\")\ncpp_quote(\"#define D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(0, 1, 2, 3)\")\n\ntypedef struct D3D12_BUFFER_SRV\n{\n    UINT64 FirstElement;\n    UINT NumElements;\n    UINT StructureByteStride;\n    D3D12_BUFFER_SRV_FLAGS Flags;\n} D3D12_BUFFER_SRV;\n\ntypedef struct D3D12_TEX1D_SRV\n{\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    FLOAT ResourceMinLODClamp;\n} D3D12_TEX1D_SRV;\n\ntypedef struct D3D12_TEX1D_ARRAY_SRV\n{\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    FLOAT ResourceMinLODClamp;\n} D3D12_TEX1D_ARRAY_SRV;\n\ntypedef struct D3D12_TEX2D_SRV\n{\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    UINT PlaneSlice;\n    FLOAT ResourceMinLODClamp;\n} D3D12_TEX2D_SRV;\n\ntypedef struct D3D12_TEX2D_ARRAY_SRV\n{\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    UINT PlaneSlice;\n    FLOAT ResourceMinLODClamp;\n} D3D12_TEX2D_ARRAY_SRV;\n\ntypedef struct D3D12_TEX2DMS_SRV\n{\n    UINT UnusedField_NothingToDefine;\n} D3D12_TEX2DMS_SRV;\n\ntypedef struct D3D12_TEX2DMS_ARRAY_SRV\n{\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D12_TEX2DMS_ARRAY_SRV;\n\ntypedef struct D3D12_TEX3D_SRV\n{\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    FLOAT ResourceMinLODClamp;\n} D3D12_TEX3D_SRV;\n\ntypedef struct D3D12_TEXCUBE_SRV\n{\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    FLOAT ResourceMinLODClamp;\n} D3D12_TEXCUBE_SRV;\n\ntypedef struct D3D12_TEXCUBE_ARRAY_SRV\n{\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    UINT First2DArrayFace;\n    UINT NumCubes;\n    FLOAT ResourceMinLODClamp;\n} D3D12_TEXCUBE_ARRAY_SRV;\n\ntypedef struct D3D12_SHADER_RESOURCE_VIEW_DESC\n{\n    DXGI_FORMAT Format;\n    D3D12_SRV_DIMENSION ViewDimension;\n    UINT Shader4ComponentMapping;\n    union\n    {\n        D3D12_BUFFER_SRV Buffer;\n        D3D12_TEX1D_SRV Texture1D;\n        D3D12_TEX1D_ARRAY_SRV Texture1DArray;\n        D3D12_TEX2D_SRV Texture2D;\n        D3D12_TEX2D_ARRAY_SRV Texture2DArray;\n        D3D12_TEX2DMS_SRV Texture2DMS;\n        D3D12_TEX2DMS_ARRAY_SRV Texture2DMSArray;\n        D3D12_TEX3D_SRV Texture3D;\n        D3D12_TEXCUBE_SRV TextureCube;\n        D3D12_TEXCUBE_ARRAY_SRV TextureCubeArray;\n    };\n} D3D12_SHADER_RESOURCE_VIEW_DESC;\n\ntypedef enum D3D12_UAV_DIMENSION\n{\n    D3D12_UAV_DIMENSION_UNKNOWN = 0,\n    D3D12_UAV_DIMENSION_BUFFER = 1,\n    D3D12_UAV_DIMENSION_TEXTURE1D = 2,\n    D3D12_UAV_DIMENSION_TEXTURE1DARRAY = 3,\n    D3D12_UAV_DIMENSION_TEXTURE2D = 4,\n    D3D12_UAV_DIMENSION_TEXTURE2DARRAY = 5,\n    D3D12_UAV_DIMENSION_TEXTURE3D = 8,\n} D3D12_UAV_DIMENSION;\n\ntypedef enum D3D12_BUFFER_UAV_FLAGS\n{\n    D3D12_BUFFER_UAV_FLAG_NONE = 0x0,\n    D3D12_BUFFER_UAV_FLAG_RAW = 0x1,\n} D3D12_BUFFER_UAV_FLAGS;\n\ntypedef struct D3D12_BUFFER_UAV\n{\n    UINT64 FirstElement;\n    UINT NumElements;\n    UINT StructureByteStride;\n    UINT64 CounterOffsetInBytes;\n    D3D12_BUFFER_UAV_FLAGS Flags;\n} D3D12_BUFFER_UAV;\n\ntypedef struct D3D12_TEX1D_UAV\n{\n    UINT MipSlice;\n} D3D12_TEX1D_UAV;\n\ntypedef struct D3D12_TEX1D_ARRAY_UAV\n{\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D12_TEX1D_ARRAY_UAV;\n\ntypedef struct D3D12_TEX2D_UAV\n{\n    UINT MipSlice;\n    UINT PlaneSlice;\n} D3D12_TEX2D_UAV;\n\ntypedef struct D3D12_TEX2D_ARRAY_UAV\n{\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    UINT PlaneSlice;\n} D3D12_TEX2D_ARRAY_UAV;\n\ntypedef struct D3D12_TEX3D_UAV\n{\n    UINT MipSlice;\n    UINT FirstWSlice;\n    UINT WSize;\n} D3D12_TEX3D_UAV;\n\ntypedef struct D3D12_UNORDERED_ACCESS_VIEW_DESC\n{\n    DXGI_FORMAT Format;\n    D3D12_UAV_DIMENSION ViewDimension;\n    union\n    {\n        D3D12_BUFFER_UAV Buffer;\n        D3D12_TEX1D_UAV Texture1D;\n        D3D12_TEX1D_ARRAY_UAV Texture1DArray;\n        D3D12_TEX2D_UAV Texture2D;\n        D3D12_TEX2D_ARRAY_UAV Texture2DArray;\n        D3D12_TEX3D_UAV Texture3D;\n    };\n} D3D12_UNORDERED_ACCESS_VIEW_DESC;\n\ntypedef enum D3D12_RTV_DIMENSION\n{\n    D3D12_RTV_DIMENSION_UNKNOWN = 0,\n    D3D12_RTV_DIMENSION_BUFFER = 1,\n    D3D12_RTV_DIMENSION_TEXTURE1D = 2,\n    D3D12_RTV_DIMENSION_TEXTURE1DARRAY = 3,\n    D3D12_RTV_DIMENSION_TEXTURE2D = 4,\n    D3D12_RTV_DIMENSION_TEXTURE2DARRAY = 5,\n    D3D12_RTV_DIMENSION_TEXTURE2DMS = 6,\n    D3D12_RTV_DIMENSION_TEXTURE2DMSARRAY = 7,\n    D3D12_RTV_DIMENSION_TEXTURE3D = 8,\n} D3D12_RTV_DIMENSION;\n\ntypedef struct D3D12_BUFFER_RTV\n{\n    UINT64 FirstElement;\n    UINT NumElements;\n} D3D12_BUFFER_RTV;\n\ntypedef struct D3D12_TEX1D_RTV\n{\n    UINT MipSlice;\n} D3D12_TEX1D_RTV;\n\ntypedef struct D3D12_TEX1D_ARRAY_RTV\n{\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D12_TEX1D_ARRAY_RTV;\n\ntypedef struct D3D12_TEX2D_RTV\n{\n    UINT MipSlice;\n    UINT PlaneSlice;\n} D3D12_TEX2D_RTV;\n\ntypedef struct D3D12_TEX2D_ARRAY_RTV\n{\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    UINT PlaneSlice;\n} D3D12_TEX2D_ARRAY_RTV;\n\ntypedef struct D3D12_TEX2DMS_RTV\n{\n    UINT UnusedField_NothingToDefine;\n} D3D12_TEX2DMS_RTV;\n\ntypedef struct D3D12_TEX2DMS_ARRAY_RTV\n{\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D12_TEX2DMS_ARRAY_RTV;\n\ntypedef struct D3D12_TEX3D_RTV\n{\n    UINT MipSlice;\n    UINT FirstWSlice;\n    UINT WSize;\n} D3D12_TEX3D_RTV;\n\ntypedef struct D3D12_RENDER_TARGET_VIEW_DESC\n{\n    DXGI_FORMAT Format;\n    D3D12_RTV_DIMENSION ViewDimension;\n    union\n    {\n        D3D12_BUFFER_RTV Buffer;\n        D3D12_TEX1D_RTV Texture1D;\n        D3D12_TEX1D_ARRAY_RTV Texture1DArray;\n        D3D12_TEX2D_RTV Texture2D;\n        D3D12_TEX2D_ARRAY_RTV Texture2DArray;\n        D3D12_TEX2DMS_RTV Texture2DMS;\n        D3D12_TEX2DMS_ARRAY_RTV Texture2DMSArray;\n        D3D12_TEX3D_RTV Texture3D;\n    };\n} D3D12_RENDER_TARGET_VIEW_DESC;\n\ntypedef enum D3D12_DSV_DIMENSION\n{\n    D3D12_DSV_DIMENSION_UNKNOWN = 0,\n    D3D12_DSV_DIMENSION_TEXTURE1D = 1,\n    D3D12_DSV_DIMENSION_TEXTURE1DARRAY = 2,\n    D3D12_DSV_DIMENSION_TEXTURE2D = 3,\n    D3D12_DSV_DIMENSION_TEXTURE2DARRAY = 4,\n    D3D12_DSV_DIMENSION_TEXTURE2DMS = 5,\n    D3D12_DSV_DIMENSION_TEXTURE2DMSARRAY = 6,\n} D3D12_DSV_DIMENSION;\n\ntypedef enum D3D12_DSV_FLAGS\n{\n    D3D12_DSV_FLAG_NONE = 0x0,\n    D3D12_DSV_FLAG_READ_ONLY_DEPTH = 0x1,\n    D3D12_DSV_FLAG_READ_ONLY_STENCIL = 0x2,\n} D3D12_DSV_FLAGS;\ncpp_quote(\"DEFINE_ENUM_FLAG_OPERATORS(D3D12_DSV_FLAGS);\")\n\ntypedef struct D3D12_TEX1D_DSV\n{\n    UINT MipSlice;\n} D3D12_TEX1D_DSV;\n\ntypedef struct D3D12_TEX1D_ARRAY_DSV\n{\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D12_TEX1D_ARRAY_DSV;\n\ntypedef struct D3D12_TEX2D_DSV\n{\n    UINT MipSlice;\n} D3D12_TEX2D_DSV;\n\ntypedef struct D3D12_TEX2D_ARRAY_DSV\n{\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D12_TEX2D_ARRAY_DSV;\n\ntypedef struct D3D12_TEX2DMS_DSV\n{\n    UINT UnusedField_NothingToDefine;\n} D3D12_TEX2DMS_DSV;\n\ntypedef struct D3D12_TEX2DMS_ARRAY_DSV\n{\n    UINT FirstArraySlice;\n    UINT ArraySize;\n} D3D12_TEX2DMS_ARRAY_DSV;\n\ntypedef struct D3D12_DEPTH_STENCIL_VIEW_DESC\n{\n    DXGI_FORMAT Format;\n    D3D12_DSV_DIMENSION ViewDimension;\n    D3D12_DSV_FLAGS Flags;\n    union\n    {\n        D3D12_TEX1D_DSV Texture1D;\n        D3D12_TEX1D_ARRAY_DSV Texture1DArray;\n        D3D12_TEX2D_DSV Texture2D;\n        D3D12_TEX2D_ARRAY_DSV Texture2DArray;\n        D3D12_TEX2DMS_DSV Texture2DMS;\n        D3D12_TEX2DMS_ARRAY_DSV Texture2DMSArray;\n    };\n} D3D12_DEPTH_STENCIL_VIEW_DESC;\n\ntypedef struct D3D12_SAMPLER_DESC\n{\n    D3D12_FILTER Filter;\n    D3D12_TEXTURE_ADDRESS_MODE AddressU;\n    D3D12_TEXTURE_ADDRESS_MODE AddressV;\n    D3D12_TEXTURE_ADDRESS_MODE AddressW;\n    FLOAT MipLODBias;\n    UINT MaxAnisotropy;\n    D3D12_COMPARISON_FUNC ComparisonFunc;\n    FLOAT BorderColor[4];\n    FLOAT MinLOD;\n    FLOAT MaxLOD;\n} D3D12_SAMPLER_DESC;\n\ntypedef struct D3D12_CPU_DESCRIPTOR_HANDLE\n{\n    SIZE_T ptr;\n} D3D12_CPU_DESCRIPTOR_HANDLE;\n\ntypedef struct D3D12_GPU_DESCRIPTOR_HANDLE\n{\n    UINT64 ptr;\n} D3D12_GPU_DESCRIPTOR_HANDLE;\n\ntypedef enum D3D12_STENCIL_OP\n{\n    D3D12_STENCIL_OP_KEEP = 1,\n    D3D12_STENCIL_OP_ZERO = 2,\n    D3D12_STENCIL_OP_REPLACE = 3,\n    D3D12_STENCIL_OP_INCR_SAT = 4,\n    D3D12_STENCIL_OP_DECR_SAT = 5,\n    D3D12_STENCIL_OP_INVERT = 6,\n    D3D12_STENCIL_OP_INCR = 7,\n    D3D12_STENCIL_OP_DECR = 8,\n} D3D12_STENCIL_OP;\n\ntypedef struct D3D12_DEPTH_STENCILOP_DESC\n{\n    D3D12_STENCIL_OP StencilFailOp;\n    D3D12_STENCIL_OP StencilDepthFailOp;\n    D3D12_STENCIL_OP StencilPassOp;\n    D3D12_COMPARISON_FUNC StencilFunc;\n} D3D12_DEPTH_STENCILOP_DESC;\n\ntypedef enum D3D12_DEPTH_WRITE_MASK\n{\n    D3D12_DEPTH_WRITE_MASK_ZERO = 0,\n    D3D12_DEPTH_WRITE_MASK_ALL = 1,\n} D3D12_DEPTH_WRITE_MASK;\n\ntypedef struct D3D12_DEPTH_STENCIL_DESC\n{\n    BOOL DepthEnable;\n    D3D12_DEPTH_WRITE_MASK DepthWriteMask;\n    D3D12_COMPARISON_FUNC DepthFunc;\n    BOOL StencilEnable;\n    UINT8 StencilReadMask;\n    UINT8 StencilWriteMask;\n    D3D12_DEPTH_STENCILOP_DESC FrontFace;\n    D3D12_DEPTH_STENCILOP_DESC BackFace;\n} D3D12_DEPTH_STENCIL_DESC;\n\ntypedef enum D3D12_BLEND\n{\n    D3D12_BLEND_ZERO = 1,\n    D3D12_BLEND_ONE = 2,\n    D3D12_BLEND_SRC_COLOR = 3,\n    D3D12_BLEND_INV_SRC_COLOR = 4,\n    D3D12_BLEND_SRC_ALPHA = 5,\n    D3D12_BLEND_INV_SRC_ALPHA = 6,\n    D3D12_BLEND_DEST_ALPHA = 7,\n    D3D12_BLEND_INV_DEST_ALPHA = 8,\n    D3D12_BLEND_DEST_COLOR = 9,\n    D3D12_BLEND_INV_DEST_COLOR = 10,\n    D3D12_BLEND_SRC_ALPHA_SAT = 11,\n    D3D12_BLEND_BLEND_FACTOR = 14,\n    D3D12_BLEND_INV_BLEND_FACTOR = 15,\n    D3D12_BLEND_SRC1_COLOR = 16,\n    D3D12_BLEND_INV_SRC1_COLOR = 17,\n    D3D12_BLEND_SRC1_ALPHA = 18,\n    D3D12_BLEND_INV_SRC1_ALPHA = 19,\n} D3D12_BLEND;\n\ntypedef enum D3D12_BLEND_OP\n{\n    D3D12_BLEND_OP_ADD = 1,\n    D3D12_BLEND_OP_SUBTRACT = 2,\n    D3D12_BLEND_OP_REV_SUBTRACT = 3,\n    D3D12_BLEND_OP_MIN = 4,\n    D3D12_BLEND_OP_MAX = 5,\n} D3D12_BLEND_OP;\n\ntypedef enum D3D12_LOGIC_OP\n{\n    D3D12_LOGIC_OP_CLEAR = 0,\n    D3D12_LOGIC_OP_SET = 1,\n    D3D12_LOGIC_OP_COPY = 2,\n    D3D12_LOGIC_OP_COPY_INVERTED = 3,\n    D3D12_LOGIC_OP_NOOP = 4,\n} D3D12_LOGIC_OP;\n\ntypedef enum D3D12_COLOR_WRITE_ENABLE\n{\n    D3D12_COLOR_WRITE_ENABLE_RED = 0x1,\n    D3D12_COLOR_WRITE_ENABLE_GREEN = 0x2,\n    D3D12_COLOR_WRITE_ENABLE_BLUE = 0x4,\n    D3D12_COLOR_WRITE_ENABLE_ALPHA = 0x8,\n    D3D12_COLOR_WRITE_ENABLE_ALL = (D3D12_COLOR_WRITE_ENABLE_RED\\\n            | D3D12_COLOR_WRITE_ENABLE_GREEN | D3D12_COLOR_WRITE_ENABLE_BLUE\\\n            | D3D12_COLOR_WRITE_ENABLE_ALPHA),\n} D3D12_COLOR_WRITE_ENABLE;\n\ntypedef struct D3D12_RENDER_TARGET_BLEND_DESC\n{\n    BOOL BlendEnable;\n    BOOL LogicOpEnable;\n    D3D12_BLEND SrcBlend;\n    D3D12_BLEND DestBlend;\n    D3D12_BLEND_OP BlendOp;\n    D3D12_BLEND SrcBlendAlpha;\n    D3D12_BLEND DestBlendAlpha;\n    D3D12_BLEND_OP BlendOpAlpha;\n    D3D12_LOGIC_OP LogicOp;\n    UINT8 RenderTargetWriteMask;\n} D3D12_RENDER_TARGET_BLEND_DESC;\n\ntypedef struct D3D12_BLEND_DESC\n{\n    BOOL AlphaToCoverageEnable;\n    BOOL IndependentBlendEnable;\n    D3D12_RENDER_TARGET_BLEND_DESC RenderTarget[D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT];\n} D3D12_BLEND_DESC;\n\ntypedef enum D3D12_FILL_MODE\n{\n    D3D12_FILL_MODE_WIREFRAME = 2,\n    D3D12_FILL_MODE_SOLID = 3,\n} D3D12_FILL_MODE;\n\ntypedef enum D3D12_CULL_MODE\n{\n    D3D12_CULL_MODE_NONE = 1,\n    D3D12_CULL_MODE_FRONT = 2,\n    D3D12_CULL_MODE_BACK = 3,\n} D3D12_CULL_MODE;\n\ntypedef enum D3D12_CONSERVATIVE_RASTERIZATION_MODE\n{\n    D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF = 0,\n    D3D12_CONSERVATIVE_RASTERIZATION_MODE_ON = 1,\n} D3D12_CONSERVATIVE_RASTERIZATION_MODE;\n\ntypedef struct D3D12_RASTERIZER_DESC\n{\n    D3D12_FILL_MODE FillMode;\n    D3D12_CULL_MODE CullMode;\n    BOOL FrontCounterClockwise;\n    INT DepthBias;\n    FLOAT DepthBiasClamp;\n    FLOAT SlopeScaledDepthBias;\n    BOOL DepthClipEnable;\n    BOOL MultisampleEnable;\n    BOOL AntialiasedLineEnable;\n    UINT ForcedSampleCount;\n    D3D12_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster;\n} D3D12_RASTERIZER_DESC;\n\ntypedef struct D3D12_SO_DECLARATION_ENTRY\n{\n    UINT Stream;\n    const char *SemanticName;\n    UINT SemanticIndex;\n    BYTE StartComponent;\n    BYTE ComponentCount;\n    BYTE OutputSlot;\n} D3D12_SO_DECLARATION_ENTRY;\n\ntypedef struct D3D12_STREAM_OUTPUT_DESC\n{\n    const D3D12_SO_DECLARATION_ENTRY *pSODeclaration;\n    UINT NumEntries;\n    const UINT *pBufferStrides;\n    UINT NumStrides;\n    UINT RasterizedStream;\n} D3D12_STREAM_OUTPUT_DESC;\n\ntypedef enum D3D12_INPUT_CLASSIFICATION\n{\n    D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA = 0,\n    D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA = 1,\n} D3D12_INPUT_CLASSIFICATION;\n\ntypedef struct D3D12_INPUT_ELEMENT_DESC\n{\n    const char *SemanticName;\n    UINT SemanticIndex;\n    DXGI_FORMAT Format;\n    UINT InputSlot;\n    UINT AlignedByteOffset;\n    D3D12_INPUT_CLASSIFICATION InputSlotClass;\n    UINT InstanceDataStepRate;\n} D3D12_INPUT_ELEMENT_DESC;\n\ntypedef struct D3D12_INPUT_LAYOUT_DESC\n{\n    const D3D12_INPUT_ELEMENT_DESC *pInputElementDescs;\n    UINT NumElements;\n} D3D12_INPUT_LAYOUT_DESC;\n\ntypedef enum D3D12_INDEX_BUFFER_STRIP_CUT_VALUE\n{\n    D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED = 0,\n    D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFF = 1,\n    D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFFFFFF = 2,\n} D3D12_INDEX_BUFFER_STRIP_CUT_VALUE;\n\ntypedef D3D_PRIMITIVE_TOPOLOGY D3D12_PRIMITIVE_TOPOLOGY;\n\ntypedef enum D3D12_PRIMITIVE_TOPOLOGY_TYPE\n{\n    D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED = 0,\n    D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT = 1,\n    D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE = 2,\n    D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE = 3,\n    D3D12_PRIMITIVE_TOPOLOGY_TYPE_PATCH = 4,\n} D3D12_PRIMITIVE_TOPOLOGY_TYPE;\n\ntypedef struct D3D12_CACHED_PIPELINE_STATE\n{\n    const void *pCachedBlob;\n    SIZE_T CachedBlobSizeInBytes;\n} D3D12_CACHED_PIPELINE_STATE;\n\ntypedef enum D3D12_PIPELINE_STATE_FLAGS\n{\n    D3D12_PIPELINE_STATE_FLAG_NONE = 0x0,\n    D3D12_PIPELINE_STATE_FLAG_DEBUG = 0x1,\n} D3D12_PIPELINE_STATE_FLAGS;\n\ntypedef struct D3D12_GRAPHICS_PIPELINE_STATE_DESC\n{\n    ID3D12RootSignature *pRootSignature;\n    D3D12_SHADER_BYTECODE VS;\n    D3D12_SHADER_BYTECODE PS;\n    D3D12_SHADER_BYTECODE DS;\n    D3D12_SHADER_BYTECODE HS;\n    D3D12_SHADER_BYTECODE GS;\n    D3D12_STREAM_OUTPUT_DESC StreamOutput;\n    D3D12_BLEND_DESC BlendState;\n    UINT SampleMask;\n    D3D12_RASTERIZER_DESC RasterizerState;\n    D3D12_DEPTH_STENCIL_DESC DepthStencilState;\n    D3D12_INPUT_LAYOUT_DESC InputLayout;\n    D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue;\n    D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType;\n    UINT NumRenderTargets;\n    DXGI_FORMAT RTVFormats[D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT];\n    DXGI_FORMAT DSVFormat;\n    DXGI_SAMPLE_DESC SampleDesc;\n    UINT NodeMask;\n    D3D12_CACHED_PIPELINE_STATE CachedPSO;\n    D3D12_PIPELINE_STATE_FLAGS Flags;\n} D3D12_GRAPHICS_PIPELINE_STATE_DESC;\n\ntypedef struct D3D12_COMPUTE_PIPELINE_STATE_DESC\n{\n    ID3D12RootSignature *pRootSignature;\n    D3D12_SHADER_BYTECODE CS;\n    UINT NodeMask;\n    D3D12_CACHED_PIPELINE_STATE CachedPSO;\n    D3D12_PIPELINE_STATE_FLAGS Flags;\n} D3D12_COMPUTE_PIPELINE_STATE_DESC;\n\ntypedef enum D3D12_COMMAND_LIST_TYPE\n{\n    D3D12_COMMAND_LIST_TYPE_DIRECT = 0,\n    D3D12_COMMAND_LIST_TYPE_BUNDLE = 1,\n    D3D12_COMMAND_LIST_TYPE_COMPUTE = 2,\n    D3D12_COMMAND_LIST_TYPE_COPY = 3,\n} D3D12_COMMAND_LIST_TYPE;\n\ntypedef enum D3D12_COMMAND_QUEUE_PRIORITY\n{\n    D3D12_COMMAND_QUEUE_PRIORITY_NORMAL = 0,\n    D3D12_COMMAND_QUEUE_PRIORITY_HIGH = 100,\n} D3D12_COMMAND_QUEUE_PRIORITY;\n\ntypedef enum D3D12_COMMAND_QUEUE_FLAGS\n{\n    D3D12_COMMAND_QUEUE_FLAG_NONE = 0x0,\n    D3D12_COMMAND_QUEUE_FLAG_DISABLE_GPU_TIMEOUT = 0x1,\n} D3D12_COMMAND_QUEUE_FLAGS;\n\ntypedef struct D3D12_COMMAND_QUEUE_DESC\n{\n    D3D12_COMMAND_LIST_TYPE Type;\n    INT Priority;\n    D3D12_COMMAND_QUEUE_FLAGS Flags;\n    UINT NodeMask;\n} D3D12_COMMAND_QUEUE_DESC;\n\ntypedef struct D3D12_FEATURE_DATA_ARCHITECTURE\n{\n    UINT NodeIndex;\n    BOOL TileBasedRenderer;\n    BOOL UMA;\n    BOOL CacheCoherentUMA;\n} D3D12_FEATURE_DATA_ARCHITECTURE;\n\ntypedef struct D3D12_FEATURE_DATA_FORMAT_INFO\n{\n    DXGI_FORMAT Format;\n    UINT8 PlaneCount;\n} D3D12_FEATURE_DATA_FORMAT_INFO;\n\ntypedef struct D3D12_FEATURE_DATA_FEATURE_LEVELS\n{\n    UINT NumFeatureLevels;\n    const D3D_FEATURE_LEVEL *pFeatureLevelsRequested;\n    D3D_FEATURE_LEVEL MaxSupportedFeatureLevel;\n} D3D12_FEATURE_DATA_FEATURE_LEVELS;\n\ntypedef enum D3D12_FEATURE\n{\n    D3D12_FEATURE_D3D12_OPTIONS = 0,\n    D3D12_FEATURE_ARCHITECTURE = 1,\n    D3D12_FEATURE_FEATURE_LEVELS = 2,\n    D3D12_FEATURE_FORMAT_SUPPORT = 3,\n    D3D12_FEATURE_FORMAT_INFO = 4,\n    D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT = 5,\n} D3D12_FEATURE;\n\ntypedef struct D3D12_MEMCPY_DEST\n{\n    void *pData;\n    SIZE_T RowPitch;\n    SIZE_T SlicePitch;\n} D3D12_MEMCPY_DEST;\n\ntypedef struct D3D12_SUBRESOURCE_DATA\n{\n    const void *pData;\n    LONG_PTR RowPitch;\n    LONG_PTR SlicePitch;\n} D3D12_SUBRESOURCE_DATA;\n\n[\n    uuid(c4fec28f-7966-4e95-9f94-f431cb56c3b8),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D12Object : IUnknown\n{\n    HRESULT GetPrivateData(REFGUID guid, UINT *data_size, void *data);\n    HRESULT SetPrivateData(REFGUID guid, UINT data_size, const void *data);\n    HRESULT SetPrivateDataInterface(REFGUID guid, const IUnknown *data);\n    HRESULT SetName(const WCHAR *name);\n}\n\n[\n    uuid(905db94b-a00c-4140-9df5-2b64ca9ea357),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D12DeviceChild : ID3D12Object\n{\n    HRESULT GetDevice(REFIID riid, void **device);\n}\n\n[\n    uuid(63ee58fb-1268-4835-86da-f008ce62f0d6),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D12Pageable : ID3D12DeviceChild\n{\n}\n\n[\n    uuid(696442be-a72e-4059-bc79-5b5c98040fad),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D12Resource : ID3D12Pageable\n{\n    HRESULT Map(UINT sub_resource, const D3D12_RANGE *read_range, void **data);\n    void Unmap(UINT sub_resource, const D3D12_RANGE *written_range);\n\n    D3D12_RESOURCE_DESC GetDesc();\n\n    D3D12_GPU_VIRTUAL_ADDRESS GetGPUVirtualAddress();\n\n    HRESULT WriteToSubresource(UINT dst_sub_resource, const D3D12_BOX *dst_box,\n            const void *src_data, UINT src_row_pitch, UINT src_slice_pitch);\n    HRESULT ReadFromSubresource(void *dst_data, UINT dst_row_pitch, UINT dst_slice_pitch,\n            UINT src_sub_resource, const D3D12_BOX *src_box);\n\n    HRESULT GetHeapProperties(D3D12_HEAP_PROPERTIES *heap_properties, D3D12_HEAP_FLAGS *flags);\n}\n\n[\n    uuid(7116d91c-e7e4-47ce-b8c6-ec8168f437e5),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D12CommandList : ID3D12DeviceChild\n{\n    D3D12_COMMAND_LIST_TYPE GetType();\n}\n\ntypedef enum D3D12_TILE_COPY_FLAGS\n{\n    D3D12_TILE_COPY_FLAG_NONE = 0x0,\n    D3D12_TILE_COPY_FLAG_NO_HAZARD = 0x1,\n    D3D12_TILE_COPY_FLAG_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE = 0x2,\n    D3D12_TILE_COPY_FLAG_SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER = 0x4,\n} D3D12_TILE_COPY_FLAGS;\n\ntypedef struct D3D12_INDEX_BUFFER_VIEW\n{\n    D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;\n    UINT SizeInBytes;\n    DXGI_FORMAT Format;\n} D3D12_INDEX_BUFFER_VIEW;\n\ntypedef struct D3D12_VERTEX_BUFFER_VIEW\n{\n    D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;\n    UINT SizeInBytes;\n    UINT StrideInBytes;\n} D3D12_VERTEX_BUFFER_VIEW;\n\ntypedef struct D3D12_STREAM_OUTPUT_BUFFER_VIEW\n{\n    D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;\n    UINT64 SizeInBytes;\n    D3D12_GPU_VIRTUAL_ADDRESS BufferFilledSizeLocation;\n} D3D12_STREAM_OUTPUT_BUFFER_VIEW;\n\ntypedef enum D3D12_CLEAR_FLAGS\n{\n    D3D12_CLEAR_FLAG_DEPTH = 0x1,\n    D3D12_CLEAR_FLAG_STENCIL = 0x2,\n} D3D12_CLEAR_FLAGS;\ncpp_quote(\"DEFINE_ENUM_FLAG_OPERATORS(D3D12_CLEAR_FLAGS);\")\n\ntypedef struct D3D12_DISCARD_REGION\n{\n    UINT NumRects;\n    const D3D12_RECT *pRects;\n    UINT FirstSubresource;\n    UINT NumSubresources;\n} D3D12_DISCARD_REGION;\n\ntypedef enum D3D12_QUERY_TYPE\n{\n    D3D12_QUERY_TYPE_OCCLUSION = 0,\n    D3D12_QUERY_TYPE_BINARY_OCCLUSION = 1,\n    D3D12_QUERY_TYPE_TIMESTAMP = 2,\n    D3D12_QUERY_TYPE_PIPELINE_STATISTICS = 3,\n    D3D12_QUERY_TYPE_SO_STATISTICS_STREAM0 = 4,\n    D3D12_QUERY_TYPE_SO_STATISTICS_STREAM1 = 5,\n    D3D12_QUERY_TYPE_SO_STATISTICS_STREAM2 = 6,\n    D3D12_QUERY_TYPE_SO_STATISTICS_STREAM3 = 7,\n} D3D12_QUERY_TYPE;\n\ntypedef struct D3D12_QUERY_DATA_PIPELINE_STATISTICS\n{\n    UINT64 IAVertices;\n    UINT64 IAPrimitives;\n    UINT64 VSInvocations;\n    UINT64 GSInvocations;\n    UINT64 GSPrimitives;\n    UINT64 CInvocations;\n    UINT64 CPrimitives;\n    UINT64 PSInvocations;\n    UINT64 HSInvocations;\n    UINT64 DSInvocations;\n    UINT64 CSInvocations;\n} D3D12_QUERY_DATA_PIPELINE_STATISTICS;\n\ntypedef enum D3D12_PREDICATION_OP\n{\n    D3D12_PREDICATION_OP_EQUAL_ZERO = 0,\n    D3D12_PREDICATION_OP_NOT_EQUAL_ZERO = 1,\n} D3D12_PREDICATION_OP;\n\n[\n    uuid(8efb471d-616c-4f49-90f7-127bb763fa51),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D12DescriptorHeap : ID3D12Pageable\n{\n    D3D12_DESCRIPTOR_HEAP_DESC GetDesc();\n\n    D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandleForHeapStart();\n    D3D12_GPU_DESCRIPTOR_HANDLE GetGPUDescriptorHandleForHeapStart();\n}\n\n[\n    uuid(0d9658ae-ed45-469e-a61d-970ec583cab4),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D12QueryHeap : ID3D12Pageable\n{\n}\n\n[\n    uuid(c36a797c-ec80-4f0a-8985-a7b2475082d1),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D12CommandSignature : ID3D12Pageable\n{\n}\n\n[\n    uuid(5b160d0f-ac1b-4185-8ba8-b3ae42a5a455),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D12GraphicsCommandList : ID3D12CommandList\n{\n    HRESULT Close();\n\n    HRESULT Reset(ID3D12CommandAllocator *allocator, ID3D12PipelineState *initial_state);\n\n    HRESULT ClearState(ID3D12PipelineState *pipeline_state);\n\n    void DrawInstanced(UINT vertex_count_per_instance, UINT instance_count,\n            UINT start_vertex_location, UINT start_instance_location);\n    void DrawIndexedInstanced(UINT index_count_per_instance, UINT instance_count,\n            UINT start_vertex_location, INT base_vertex_location, UINT start_instance_location);\n\n    void Dispatch(UINT x, UINT u, UINT z);\n\n    void CopyBufferRegion(ID3D12Resource *dst_buffer, UINT64 dst_offset,\n            ID3D12Resource *src_buffer, UINT64 src_offset, UINT64 byte_count);\n    void CopyTextureRegion(const D3D12_TEXTURE_COPY_LOCATION *dst,\n            UINT dst_x, UINT dst_y, UINT dst_z,\n            const D3D12_TEXTURE_COPY_LOCATION *src, const D3D12_BOX *src_box);\n    void CopyResource(ID3D12Resource *dst_resource, ID3D12Resource *src_resource);\n\n    void CopyTiles(ID3D12Resource *tiled_resource,\n            const D3D12_TILED_RESOURCE_COORDINATE *tile_region_start_coordinate,\n            const D3D12_TILE_REGION_SIZE *tile_region_size,\n            ID3D12Resource *buffer,\n            UINT64 buffer_offset,\n            D3D12_TILE_COPY_FLAGS flags);\n\n    void ResolveSubresource(ID3D12Resource *dst_resource, UINT dst_sub_resource,\n            ID3D12Resource *src_resource, UINT src_sub_resource,\n            DXGI_FORMAT format);\n\n    void IASetPrimitiveTopology(D3D12_PRIMITIVE_TOPOLOGY primitive_topology);\n\n    void RSSetViewports(UINT viewport_count, const D3D12_VIEWPORT *viewports);\n    void RSSetScissorRects(UINT rect_count, const D3D12_RECT *rects);\n\n    void OMSetBlendFactor(const FLOAT blend_factor[4]);\n    void OMSetStencilRef(UINT stencil_ref);\n\n    void SetPipelineState(ID3D12PipelineState *pipeline_state);\n\n    void ResourceBarrier(UINT barrier_count, const D3D12_RESOURCE_BARRIER *barriers);\n\n    void ExecuteBundle(ID3D12GraphicsCommandList *command_list);\n\n    void SetDescriptorHeaps(UINT heap_count, ID3D12DescriptorHeap * const *heaps);\n\n    void SetComputeRootSignature(ID3D12RootSignature *root_signature);\n    void SetGraphicsRootSignature(ID3D12RootSignature *root_signature);\n\n    void SetComputeRootDescriptorTable(UINT root_parameter_index, D3D12_GPU_DESCRIPTOR_HANDLE base_descriptor);\n    void SetGraphicsRootDescriptorTable(UINT root_parameter_index, D3D12_GPU_DESCRIPTOR_HANDLE base_descriptor);\n\n    void SetComputeRoot32BitConstant(UINT root_parameter_index, UINT data, UINT dst_offset);\n    void SetGraphicsRoot32BitConstant(UINT root_parameter_index, UINT data, UINT dst_offset);\n\n    void SetComputeRoot32BitConstants(UINT root_parameter_index, UINT constant_count, const void *data,\n            UINT dst_offset);\n    void SetGraphicsRoot32BitConstants(UINT root_parameter_index, UINT constant_count, const void *data,\n            UINT dst_offset);\n\n    void SetComputeRootConstantBufferView(UINT root_parameter_index, D3D12_GPU_VIRTUAL_ADDRESS address);\n    void SetGraphicsRootConstantBufferView(UINT root_parameter_index, D3D12_GPU_VIRTUAL_ADDRESS address);\n\n    void SetComputeRootShaderResourceView(UINT root_parameter_index, D3D12_GPU_VIRTUAL_ADDRESS address);\n    void SetGraphicsRootShaderResourceView(UINT root_parameter_index, D3D12_GPU_VIRTUAL_ADDRESS address);\n\n    void SetComputeRootUnorderedAccessView(UINT root_parameter_index, D3D12_GPU_VIRTUAL_ADDRESS address);\n    void SetGraphicsRootUnorderedAccessView(UINT root_parameter_index, D3D12_GPU_VIRTUAL_ADDRESS address);\n\n    void IASetIndexBuffer(const D3D12_INDEX_BUFFER_VIEW *view);\n    void IASetVertexBuffers(UINT start_slot, UINT view_count, const D3D12_VERTEX_BUFFER_VIEW *views);\n\n    void SOSetTargets(UINT start_slot, UINT view_count, const D3D12_STREAM_OUTPUT_BUFFER_VIEW *views);\n\n    void OMSetRenderTargets(UINT render_target_descriptor_count,\n            const D3D12_CPU_DESCRIPTOR_HANDLE *render_target_descriptors,\n            BOOL single_descriptor_handle,\n            const D3D12_CPU_DESCRIPTOR_HANDLE *depth_stencil_descriptor);\n\n    void ClearDepthStencilView(D3D12_CPU_DESCRIPTOR_HANDLE dsv, D3D12_CLEAR_FLAGS flags,\n            FLOAT depth, UINT8 stencil, UINT rect_count, const D3D12_RECT *rects);\n    void ClearRenderTargetView(D3D12_CPU_DESCRIPTOR_HANDLE rtv, const FLOAT color[4],\n            UINT rect_count, const D3D12_RECT *rects);\n    void ClearUnorderedAccessViewUint(D3D12_GPU_DESCRIPTOR_HANDLE gpu_handle,\n            D3D12_CPU_DESCRIPTOR_HANDLE cpu_handle, ID3D12Resource *resource, const UINT values[4],\n            UINT rect_count, const D3D12_RECT *rects);\n    void ClearUnorderedAccessViewFloat(D3D12_GPU_DESCRIPTOR_HANDLE gpu_handle,\n            D3D12_CPU_DESCRIPTOR_HANDLE cpu_handle, ID3D12Resource *resource, const float values[4],\n            UINT rect_count, const D3D12_RECT *rects);\n\n    void DiscardResource(ID3D12Resource *resource, const D3D12_DISCARD_REGION *region);\n\n    void BeginQuery(ID3D12QueryHeap *heap, D3D12_QUERY_TYPE type, UINT index);\n    void EndQuery(ID3D12QueryHeap *heap, D3D12_QUERY_TYPE type, UINT index);\n    void ResolveQueryData(ID3D12QueryHeap *heap, D3D12_QUERY_TYPE type,\n            UINT start_index, UINT query_count,\n            ID3D12Resource *dst_buffer, UINT64 aligned_dst_buffer_offset);\n\n    void SetPredication(ID3D12Resource *buffer, UINT64 aligned_buffer_offset,\n            D3D12_PREDICATION_OP operation);\n\n    void SetMarker(UINT metadata, const void *data, UINT size);\n    void BeginEvent(UINT metadata, const void *data, UINT size);\n    void EndEvent();\n\n    void ExecuteIndirect(ID3D12CommandSignature *command_signature,\n            UINT max_command_count, ID3D12Resource *arg_buffer, UINT64 arg_buffer_offset,\n            ID3D12Resource *count_buffer, UINT64 count_buffer_offset);\n}\n\ntypedef enum D3D12_TILE_RANGE_FLAGS\n{\n    D3D12_TILE_RANGE_FLAG_NONE = 0x0,\n    D3D12_TILE_RANGE_FLAG_NULL = 0x1,\n    D3D12_TILE_RANGE_FLAG_SKIP = 0x2,\n    D3D12_TILE_RANGE_FLAG_REUSE_SINGLE_TILE = 0x4\n} D3D12_TILE_RANGE_FLAGS;\n\ntypedef enum D3D12_TILE_MAPPING_FLAGS\n{\n    D3D12_TILE_MAPPING_FLAG_NONE = 0x0,\n    D3D12_TILE_MAPPING_FLAG_NO_HAZARD = 0x1,\n} D3D12_TILE_MAPPING_FLAGS;\n\n[\n    uuid(0ec870a6-5d7e-4c22-8cfc-5baae07616ed),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D12CommandQueue : ID3D12Pageable\n{\n    void UpdateTileMappings(ID3D12Resource *resource, UINT region_count,\n            const D3D12_TILED_RESOURCE_COORDINATE *region_start_coordinates,\n            const D3D12_TILE_REGION_SIZE *region_sizes,\n            UINT range_count,\n            const D3D12_TILE_RANGE_FLAGS *range_flags,\n            UINT *heap_range_offsets,\n            UINT *range_tile_counts,\n            D3D12_TILE_MAPPING_FLAGS flags);\n\n    void CopyTileMappings(ID3D12Resource *dst_resource,\n            const D3D12_TILED_RESOURCE_COORDINATE *dst_region_start_coordinate,\n            ID3D12Resource *src_resource,\n            const D3D12_TILED_RESOURCE_COORDINATE *src_region_start_coordinate,\n            const D3D12_TILE_REGION_SIZE *region_size,\n            D3D12_TILE_MAPPING_FLAGS flags);\n\n    void ExecuteCommandLists(UINT command_list_count,\n            ID3D12CommandList * const * command_lists);\n\n    void SetMarker(UINT metadata, const void *data, UINT size);\n    void BeginEvent(UINT metadata, const void *data, UINT size);\n    void EndEvent();\n\n    HRESULT Signal(ID3D12Fence *fence, UINT64 value);\n    HRESULT Wait(ID3D12Fence *fence, UINT64 value);\n\n    HRESULT GetTimestampFrequency(UINT64 *frequency);\n    HRESULT GetClockCalibration(UINT64 *gpu_timestamp, UINT64 *cpu_timestamp);\n\n    D3D12_COMMAND_QUEUE_DESC GetDesc();\n}\n\ntypedef enum D3D12_FENCE_FLAGS\n{\n    D3D12_FENCE_FLAG_NONE = 0x0,\n    D3D12_FENCE_FLAG_SHARED = 0x1,\n    D3D12_FENCE_FLAG_SHARED_CROSS_ADAPTER = 0x2,\n} D3D12_FENCE_FLAGS;\n\ntypedef enum D3D12_QUERY_HEAP_TYPE\n{\n    D3D12_QUERY_HEAP_TYPE_OCCLUSION = 0,\n    D3D12_QUERY_HEAP_TYPE_TIMESTAMP = 1,\n    D3D12_QUERY_HEAP_TYPE_PIPELINE_STATISTICS = 2,\n    D3D12_QUERY_HEAP_TYPE_SO_STATISTICS = 3,\n} D3D12_QUERY_HEAP_TYPE;\n\ntypedef struct D3D12_QUERY_HEAP_DESC\n{\n    D3D12_QUERY_HEAP_TYPE Type;\n    UINT Count;\n    UINT NodeMask;\n} D3D12_QUERY_HEAP_DESC;\n\ntypedef enum D3D12_INDIRECT_ARGUMENT_TYPE\n{\n    D3D12_INDIRECT_ARGUMENT_TYPE_DRAW,\n    D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED,\n    D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH,\n    D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW,\n    D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW,\n    D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT,\n    D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW,\n    D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW,\n    D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW,\n} D3D12_INDIRECT_ARGUMENT_TYPE;\n\ntypedef struct D3D12_INDIRECT_ARGUMENT_DESC\n{\n    D3D12_INDIRECT_ARGUMENT_TYPE Type;\n    union\n    {\n        struct\n        {\n            UINT Slot;\n        } VertexBuffer;\n        struct\n        {\n            UINT RootParameterIndex;\n            UINT DestOffsetIn32BitValues;\n            UINT Num32BitValuesToSet;\n        } Constant;\n        struct\n        {\n            UINT RootParameterIndex;\n        } ConstantBufferView;\n        struct\n        {\n            UINT RootParameterIndex;\n        } ShaderResourceView;\n        struct\n        {\n            UINT RootParameterIndex;\n        } UnorderedAccessView;\n    };\n} D3D12_INDIRECT_ARGUMENT_DESC;\n\ntypedef struct D3D12_COMMAND_SIGNATURE_DESC\n{\n    UINT ByteStride;\n    UINT NumArgumentDescs;\n    const D3D12_INDIRECT_ARGUMENT_DESC *pArgumentDescs;\n    UINT NodeMask;\n} D3D12_COMMAND_SIGNATURE_DESC;\n\n[\n    uuid(c54a6b66-72df-4ee8-8be5-a946a1429214),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D12RootSignature : ID3D12DeviceChild\n{\n}\n\n[\n    uuid(765a30f3-f624-4c6f-a828-ace948622445),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D12PipelineState : ID3D12Pageable\n{\n    HRESULT GetCachedBlob(ID3DBlob **blob);\n}\n\n[\n    uuid(0a753dcf-c4d8-4b91-adf6-be5a60d95a76),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D12Fence : ID3D12Pageable\n{\n    UINT64 GetCompletedValue();\n    HRESULT SetEventOnCompletion(UINT64 value, HANDLE event);\n    HRESULT Signal(UINT64 value);\n}\n\n[\n    uuid(6102dee4-af59-4b09-b999-b44d73f09b24),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D12CommandAllocator : ID3D12Pageable\n{\n    HRESULT Reset();\n}\n\n[\n    uuid(189819f1-1db6-4b57-be54-1821339b85f7),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D12Device : ID3D12Object\n{\n    UINT GetNodeCount();\n\n    HRESULT CreateCommandQueue(const D3D12_COMMAND_QUEUE_DESC *desc,\n            REFIID riid, void **command_queue);\n    HRESULT CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE type,\n            REFIID riid, void **command_allocator);\n    HRESULT CreateGraphicsPipelineState(const D3D12_GRAPHICS_PIPELINE_STATE_DESC *desc,\n            REFIID riid, void **pipeline_state);\n    HRESULT CreateComputePipelineState(const D3D12_COMPUTE_PIPELINE_STATE_DESC *desc,\n            REFIID riid, void **pipeline_state);\n    HRESULT CreateCommandList(UINT node_mask,\n            D3D12_COMMAND_LIST_TYPE type,\n            ID3D12CommandAllocator *command_allocator,\n            ID3D12PipelineState *initial_pipeline_state,\n            REFIID riid, void **command_list);\n\n    HRESULT CheckFeatureSupport(D3D12_FEATURE feature,\n            void *feature_data, UINT feature_data_size);\n\n    HRESULT CreateDescriptorHeap(const D3D12_DESCRIPTOR_HEAP_DESC *desc,\n            REFIID riid, void **descriptor_heap);\n    UINT GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE descriptor_heap_type);\n\n    HRESULT CreateRootSignature(UINT node_mask,\n            const void *bytecode, SIZE_T bytecode_length,\n            REFIID riid, void **root_signature);\n\n    void CreateConstantBufferView(const D3D12_CONSTANT_BUFFER_VIEW_DESC *desc,\n            D3D12_CPU_DESCRIPTOR_HANDLE descriptor);\n    void CreateShaderResourceView(ID3D12Resource *resource,\n            const D3D12_SHADER_RESOURCE_VIEW_DESC *desc,\n            D3D12_CPU_DESCRIPTOR_HANDLE descriptor);\n    void CreateUnorderedAccessView(ID3D12Resource *resource, ID3D12Resource *counter_resource,\n            const D3D12_UNORDERED_ACCESS_VIEW_DESC *desc,\n            D3D12_CPU_DESCRIPTOR_HANDLE descriptor);\n    void CreateRenderTargetView(ID3D12Resource *resource,\n            const D3D12_RENDER_TARGET_VIEW_DESC *desc,\n            D3D12_CPU_DESCRIPTOR_HANDLE descriptor);\n    void CreateDepthStencilView(ID3D12Resource *resource,\n            const D3D12_DEPTH_STENCIL_VIEW_DESC *desc,\n            D3D12_CPU_DESCRIPTOR_HANDLE descriptor);\n    void CreateSampler(const D3D12_SAMPLER_DESC *desc,\n            D3D12_CPU_DESCRIPTOR_HANDLE descriptor);\n\n    void CopyDescriptors(UINT dst_descriptor_range_count,\n            const D3D12_CPU_DESCRIPTOR_HANDLE *dst_descriptor_range_offsets,\n            const UINT *dst_descriptor_range_sizes,\n            UINT src_descriptor_range_count,\n            const D3D12_CPU_DESCRIPTOR_HANDLE *src_descriptor_range_offsets,\n            const UINT *src_descriptor_range_sizes,\n            D3D12_DESCRIPTOR_HEAP_TYPE descriptor_heap_type);\n    void CopyDescriptorsSimple(UINT descriptor_count,\n            const D3D12_CPU_DESCRIPTOR_HANDLE dst_descriptor_range_offset,\n            const D3D12_CPU_DESCRIPTOR_HANDLE src_descriptor_range_offset,\n            D3D12_DESCRIPTOR_HEAP_TYPE descriptor_heap_type);\n\n    D3D12_RESOURCE_ALLOCATION_INFO GetResourceAllocationInfo(UINT visible_mask,\n            UINT reource_desc_count, const D3D12_RESOURCE_DESC *resource_descs);\n\n    D3D12_HEAP_PROPERTIES GetCustomHeapProperties(UINT node_mask,\n            D3D12_HEAP_TYPE heap_type);\n\n    HRESULT CreateCommittedResource(const D3D12_HEAP_PROPERTIES *heap_properties, D3D12_HEAP_FLAGS heap_flags,\n            const D3D12_RESOURCE_DESC *desc, D3D12_RESOURCE_STATES initial_state,\n            const D3D12_CLEAR_VALUE *optimized_clear_value,\n            REFIID riid, void **resource);\n\n    HRESULT CreateHeap(const D3D12_HEAP_DESC *desc, REFIID riid, void **heap);\n\n    HRESULT CreatePlacedResource(ID3D12Heap *heap, UINT64 heap_offset,\n            const D3D12_RESOURCE_DESC *desc, D3D12_RESOURCE_STATES initial_state,\n            const D3D12_CLEAR_VALUE *optimized_clear_value,\n            REFIID riid, void **resource);\n    HRESULT CreateReservedResource(const D3D12_RESOURCE_DESC *desc, D3D12_RESOURCE_STATES initial_state,\n            const D3D12_CLEAR_VALUE *optimized_clear_value,\n            REFIID riid, void **resource);\n\n    HRESULT CreateSharedHandle(ID3D12DeviceChild *object,\n            const SECURITY_ATTRIBUTES *attributes, DWORD access,\n            const WCHAR *name, HANDLE *handle);\n    HRESULT OpenSharedHandle(HANDLE handle,\n            REFIID riid, void **object);\n    HRESULT OpenSharedHandleByName(const WCHAR *name, DWORD access, HANDLE *handle);\n\n    HRESULT MakeResident(UINT object_count, ID3D12Pageable * const *objects);\n    HRESULT Evict(UINT object_count, ID3D12Pageable * const *objects);\n\n    HRESULT CreateFence(UINT64 initial_value, D3D12_FENCE_FLAGS flags, REFIID riid, void **fence);\n\n    HRESULT GetDeviceRemovedReason();\n\n    void GetCopyableFootprints(const D3D12_RESOURCE_DESC *desc,\n            UINT first_sub_resource,\n            UINT sub_resource_count,\n            UINT64 base_offset,\n            D3D12_PLACED_SUBRESOURCE_FOOTPRINT *layouts,\n            UINT *row_count,\n            UINT64 *row_size,\n            UINT64 *total_bytes);\n\n    HRESULT CreateQueryHeap(const D3D12_QUERY_HEAP_DESC *desc,\n            REFIID riid, void **heap);\n\n    HRESULT SetStablePowerState(BOOL enable);\n\n    HRESULT CreateCommandSignature(const D3D12_COMMAND_SIGNATURE_DESC *desc,\n            ID3D12RootSignature *root_signature,\n            REFIID riid, void **command_signature);\n\n    void GetResourceTiling(ID3D12Resource *resource,\n            UINT *total_tile_count,\n            D3D12_PACKED_MIP_INFO *packed_mip_info,\n            D3D12_TILE_SHAPE *standard_tile_shape,\n            UINT *sub_resource_tiling_count,\n            UINT first_sub_resource_tiling,\n            D3D12_SUBRESOURCE_TILING *sub_resource_tilings);\n\n    LUID GetAdapterLuid();\n}\n\n[\n    uuid(344488b7-6846-474b-b989-f027448245e0),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D12Debug : IUnknown\n{\n    void EnableDebugLayer();\n}\n\n[\n    uuid(34ab647b-3cc8-46ac-841b-c0965645c046),\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3D12RootSignatureDeserializer : IUnknown\n{\n    const D3D12_ROOT_SIGNATURE_DESC *GetRootSignatureDesc();\n}\n\n[local] HRESULT __stdcall D3D12CreateRootSignatureDeserializer(\n        const void *data, SIZE_T data_size, REFIID iid, void **deserializer);\n\n[local] HRESULT __stdcall D3D12SerializeRootSignature(\n        const D3D12_ROOT_SIGNATURE_DESC *root_signature_desc,\n        D3D_ROOT_SIGNATURE_VERSION version, ID3DBlob **blob, ID3DBlob **error_blob);\n\n[local] HRESULT __stdcall D3D12SerializeVersionedRootSignature(\n        const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *root_signature_desc,\n        ID3DBlob **blob, ID3DBlob **error_blob);\n\ntypedef HRESULT (__stdcall *PFN_D3D12_CREATE_DEVICE)(IUnknown *adapter,\n        D3D_FEATURE_LEVEL minimum_feature_level, REFIID iid, void **device);\n\n[local] HRESULT __stdcall D3D12CreateDevice(IUnknown *adapter,\n        D3D_FEATURE_LEVEL minimum_feature_level, REFIID iid, void **device);\n\ntypedef HRESULT (__stdcall *PFN_D3D12_GET_DEBUG_INTERFACE)(REFIID iid, void **debug);\n\n[local] HRESULT __stdcall D3D12GetDebugInterface(REFIID iid, void **debug);\n"
  },
  {
    "path": "wine/windows/d3d8.h",
    "content": "/*\n * Copyright (C) 2002 Jason Edmeades\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_D3D8_H\n#define __WINE_D3D8_H\n\n#ifndef DIRECT3D_VERSION\n#define DIRECT3D_VERSION  0x0800\n#endif\n\n#include <stdlib.h>\n\n#define COM_NO_WINDOWS_H\n#include <objbase.h>\n#include <windows.h>\n#include <d3d8types.h>\n#include <d3d8caps.h>\n\n/*****************************************************************************\n * Behavior Flags for IDirect3D8::CreateDevice\n */\n#define D3DCREATE_FPU_PRESERVE                  __MSABI_LONG(0x00000002)\n#define D3DCREATE_MULTITHREADED                 __MSABI_LONG(0x00000004)\n#define D3DCREATE_PUREDEVICE                    __MSABI_LONG(0x00000010)\n#define D3DCREATE_SOFTWARE_VERTEXPROCESSING     __MSABI_LONG(0x00000020)\n#define D3DCREATE_HARDWARE_VERTEXPROCESSING     __MSABI_LONG(0x00000040)\n#define D3DCREATE_MIXED_VERTEXPROCESSING        __MSABI_LONG(0x00000080)\n\n/*****************************************************************************\n * Flags for SetPrivateData\n */\n#define D3DSPD_IUNKNOWN                         __MSABI_LONG(0x00000001)\n\n/*****************************************************************************\n * #defines and error codes\n */\n#define D3D_SDK_VERSION              220\n#define D3DADAPTER_DEFAULT           0\n#define D3DENUM_NO_WHQL_LEVEL        2\n\n#define _FACD3D  0x876\n#define MAKE_D3DHRESULT( code )  MAKE_HRESULT( 1, _FACD3D, code )\n\n/*\n * Direct3D Errors\n */\n#define D3D_OK                                  S_OK\n#define D3DERR_WRONGTEXTUREFORMAT               MAKE_D3DHRESULT(2072)\n#define D3DERR_UNSUPPORTEDCOLOROPERATION        MAKE_D3DHRESULT(2073)\n#define D3DERR_UNSUPPORTEDCOLORARG              MAKE_D3DHRESULT(2074)\n#define D3DERR_UNSUPPORTEDALPHAOPERATION        MAKE_D3DHRESULT(2075)\n#define D3DERR_UNSUPPORTEDALPHAARG              MAKE_D3DHRESULT(2076)\n#define D3DERR_TOOMANYOPERATIONS                MAKE_D3DHRESULT(2077)\n#define D3DERR_CONFLICTINGTEXTUREFILTER         MAKE_D3DHRESULT(2078)\n#define D3DERR_UNSUPPORTEDFACTORVALUE           MAKE_D3DHRESULT(2079)\n#define D3DERR_CONFLICTINGRENDERSTATE           MAKE_D3DHRESULT(2081)\n#define D3DERR_UNSUPPORTEDTEXTUREFILTER         MAKE_D3DHRESULT(2082)\n#define D3DERR_CONFLICTINGTEXTUREPALETTE        MAKE_D3DHRESULT(2086)\n#define D3DERR_DRIVERINTERNALERROR              MAKE_D3DHRESULT(2087)\n\n#define D3DERR_NOTFOUND                         MAKE_D3DHRESULT(2150)\n#define D3DERR_MOREDATA                         MAKE_D3DHRESULT(2151)\n#define D3DERR_DEVICELOST                       MAKE_D3DHRESULT(2152)\n#define D3DERR_DEVICENOTRESET                   MAKE_D3DHRESULT(2153)\n#define D3DERR_NOTAVAILABLE                     MAKE_D3DHRESULT(2154)\n#define D3DERR_OUTOFVIDEOMEMORY                 MAKE_D3DHRESULT(380)\n#define D3DERR_INVALIDDEVICE                    MAKE_D3DHRESULT(2155)\n#define D3DERR_INVALIDCALL                      MAKE_D3DHRESULT(2156)\n#define D3DERR_DRIVERINVALIDCALL                MAKE_D3DHRESULT(2157)\n\n/*****************************************************************************\n * Predeclare the interfaces\n */\nDEFINE_GUID(IID_IDirect3D8,              0x1DD9E8DA,0x1C77,0x4D40,0xB0,0xCF,0x98,0xFE,0xFD,0xFF,0x95,0x12);\ntypedef struct IDirect3D8 *LPDIRECT3D8;\n\nDEFINE_GUID(IID_IDirect3DDevice8,        0x7385E5DF,0x8FE8,0x41D5,0x86,0xB6,0xD7,0xB4,0x85,0x47,0xB6,0xCF);\ntypedef struct IDirect3DDevice8 *LPDIRECT3DDEVICE8;\n\nDEFINE_GUID(IID_IDirect3DResource8,      0x1B36BB7B,0x09B7,0x410A,0xB4,0x45,0x7D,0x14,0x30,0xD7,0xB3,0x3F);\ntypedef struct IDirect3DResource8 *LPDIRECT3DRESOURCE8, *PDIRECT3DRESOURCE8;\n\nDEFINE_GUID(IID_IDirect3DVertexBuffer8,  0x8AEEEAC7,0x05F9,0x44D4,0xB5,0x91,0x00,0x0B,0x0D,0xF1,0xCB,0x95);\ntypedef struct IDirect3DVertexBuffer8 *LPDIRECT3DVERTEXBUFFER8, *PDIRECT3DVERTEXBUFFER8;\n\nDEFINE_GUID(IID_IDirect3DVolume8,        0xBD7349F5,0x14F1,0x42E4,0x9C,0x79,0x97,0x23,0x80,0xDB,0x40,0xC0);\ntypedef struct IDirect3DVolume8 *LPDIRECT3DVOLUME8, *PDIRECT3DVOLUME8;\n\nDEFINE_GUID(IID_IDirect3DSwapChain8,     0x928C088B,0x76B9,0x4C6B,0xA5,0x36,0xA5,0x90,0x85,0x38,0x76,0xCD);\ntypedef struct IDirect3DSwapChain8 *LPDIRECT3DSWAPCHAIN8, *PDIRECT3DSWAPCHAIN8;\n\nDEFINE_GUID(IID_IDirect3DSurface8,       0xB96EEBCA,0xB326,0x4EA5,0x88,0x2F,0x2F,0xF5,0xBA,0xE0,0x21,0xDD);\ntypedef struct IDirect3DSurface8 *LPDIRECT3DSURFACE8, *PDIRECT3DSURFACE8;\n\nDEFINE_GUID(IID_IDirect3DIndexBuffer8,   0x0E689C9A,0x053D,0x44A0,0x9D,0x92,0xDB,0x0E,0x3D,0x75,0x0F,0x86);\ntypedef struct IDirect3DIndexBuffer8 *LPDIRECT3DINDEXBUFFER8, *PDIRECT3DINDEXBUFFER8;\n\nDEFINE_GUID(IID_IDirect3DBaseTexture8,   0xB4211CFA,0x51B9,0x4A9F,0xAB,0x78,0xDB,0x99,0xB2,0xBB,0x67,0x8E);\ntypedef struct IDirect3DBaseTexture8 *LPDIRECT3DBASETEXTURE8, *PDIRECT3DBASETEXTURE8;\n\nDEFINE_GUID(IID_IDirect3DTexture8,       0xE4CDD575,0x2866,0x4F01,0xB1,0x2E,0x7E,0xEC,0xE1,0xEC,0x93,0x58);\ntypedef struct IDirect3DTexture8 *LPDIRECT3DTEXTURE8, *PDIRECT3DTEXTURE8;\n\nDEFINE_GUID(IID_IDirect3DCubeTexture8,   0x3EE5B968,0x2ACA,0x4C34,0x8B,0xB5,0x7E,0x0C,0x3D,0x19,0xB7,0x50);\ntypedef struct IDirect3DCubeTexture8 *LPDIRECT3DCUBETEXTURE8, *PDIRECT3DCUBETEXTURE8;\n\nDEFINE_GUID(IID_IDirect3DVolumeTexture8, 0x4B8AAAFA,0x140F,0x42BA,0x91,0x31,0x59,0x7E,0xAF,0xAA,0x2E,0xAD);\ntypedef struct IDirect3DVolumeTexture8 *LPDIRECT3DVOLUMETEXTURE8, *PDIRECT3DVOLUMETEXTURE8;\n\n/*****************************************************************************\n * IDirect3D8 interface\n */\n#undef INTERFACE\n#define INTERFACE IDirect3D8\nDECLARE_INTERFACE_(IDirect3D8,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3D8 methods ***/\n    STDMETHOD(RegisterSoftwareDevice)(THIS_ void * pInitializeFunction) PURE;\n    STDMETHOD_(UINT,GetAdapterCount             )(THIS) PURE;\n    STDMETHOD(GetAdapterIdentifier)(THIS_ UINT  Adapter, DWORD  Flags, D3DADAPTER_IDENTIFIER8 * pIdentifier) PURE;\n    STDMETHOD_(UINT,GetAdapterModeCount)(THIS_ UINT  Adapter) PURE;\n    STDMETHOD(EnumAdapterModes)(THIS_ UINT  Adapter, UINT  Mode, D3DDISPLAYMODE * pMode) PURE;\n    STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT  Adapter, D3DDISPLAYMODE * pMode) PURE;\n    STDMETHOD(CheckDeviceType)(THIS_ UINT  Adapter, D3DDEVTYPE  CheckType, D3DFORMAT  DisplayFormat, D3DFORMAT  BackBufferFormat, BOOL  Windowed) PURE;\n    STDMETHOD(CheckDeviceFormat)(THIS_ UINT  Adapter, D3DDEVTYPE  DeviceType, D3DFORMAT  AdapterFormat, DWORD  Usage, D3DRESOURCETYPE  RType, D3DFORMAT  CheckFormat) PURE;\n    STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT  Adapter, D3DDEVTYPE  DeviceType, D3DFORMAT  SurfaceFormat, BOOL  Windowed, D3DMULTISAMPLE_TYPE  MultiSampleType) PURE;\n    STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT  Adapter, D3DDEVTYPE  DeviceType, D3DFORMAT  AdapterFormat, D3DFORMAT  RenderTargetFormat, D3DFORMAT  DepthStencilFormat) PURE;\n    STDMETHOD(GetDeviceCaps)(THIS_ UINT  Adapter, D3DDEVTYPE  DeviceType, D3DCAPS8 * pCaps) PURE;\n    STDMETHOD_(HMONITOR,GetAdapterMonitor)(THIS_ UINT  Adapter) PURE;\n    STDMETHOD(CreateDevice)(THIS_ UINT  Adapter, D3DDEVTYPE  DeviceType,HWND  hFocusWindow, DWORD  BehaviorFlags, D3DPRESENT_PARAMETERS * pPresentationParameters, struct IDirect3DDevice8 ** ppReturnedDeviceInterface) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3D8_QueryInterface(p,a,b)                    (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3D8_AddRef(p)                                (p)->lpVtbl->AddRef(p)\n#define IDirect3D8_Release(p)                               (p)->lpVtbl->Release(p)\n/*** IDirect3D8 methods ***/\n#define IDirect3D8_RegisterSoftwareDevice(p,a)              (p)->lpVtbl->RegisterSoftwareDevice(p,a)\n#define IDirect3D8_GetAdapterCount(p)                       (p)->lpVtbl->GetAdapterCount(p)\n#define IDirect3D8_GetAdapterIdentifier(p,a,b,c)            (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)\n#define IDirect3D8_GetAdapterModeCount(p,a)                 (p)->lpVtbl->GetAdapterModeCount(p,a)\n#define IDirect3D8_EnumAdapterModes(p,a,b,c)                (p)->lpVtbl->EnumAdapterModes(p,a,b,c)\n#define IDirect3D8_GetAdapterDisplayMode(p,a,b)             (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)\n#define IDirect3D8_CheckDeviceType(p,a,b,c,d,e)             (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)\n#define IDirect3D8_CheckDeviceFormat(p,a,b,c,d,e,f)         (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)\n#define IDirect3D8_CheckDeviceMultiSampleType(p,a,b,c,d,e)  (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e)\n#define IDirect3D8_CheckDepthStencilMatch(p,a,b,c,d,e)      (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)\n#define IDirect3D8_GetDeviceCaps(p,a,b,c)                   (p)->lpVtbl->GetDeviceCaps(p,a,b,c)\n#define IDirect3D8_GetAdapterMonitor(p,a)                   (p)->lpVtbl->GetAdapterMonitor(p,a)\n#define IDirect3D8_CreateDevice(p,a,b,c,d,e,f)              (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)\n#else\n/*** IUnknown methods ***/\n#define IDirect3D8_QueryInterface(p,a,b)                    (p)->QueryInterface(a,b)\n#define IDirect3D8_AddRef(p)                                (p)->AddRef()\n#define IDirect3D8_Release(p)                               (p)->Release()\n/*** IDirect3D8 methods ***/\n#define IDirect3D8_RegisterSoftwareDevice(p,a)              (p)->RegisterSoftwareDevice(a)\n#define IDirect3D8_GetAdapterCount(p)                       (p)->GetAdapterCount()\n#define IDirect3D8_GetAdapterIdentifier(p,a,b,c)            (p)->GetAdapterIdentifier(a,b,c)\n#define IDirect3D8_GetAdapterModeCount(p,a)                 (p)->GetAdapterModeCount(a)\n#define IDirect3D8_EnumAdapterModes(p,a,b,c)                (p)->EnumAdapterModes(a,b,c)\n#define IDirect3D8_GetAdapterDisplayMode(p,a,b)             (p)->GetAdapterDisplayMode(a,b)\n#define IDirect3D8_CheckDeviceType(p,a,b,c,d,e)             (p)->CheckDeviceType(a,b,c,d,e)\n#define IDirect3D8_CheckDeviceFormat(p,a,b,c,d,e,f)         (p)->CheckDeviceFormat(a,b,c,d,e,f)\n#define IDirect3D8_CheckDeviceMultiSampleType(p,a,b,c,d,e)  (p)->CheckDeviceMultiSampleType(a,b,c,d,e)\n#define IDirect3D8_CheckDepthStencilMatch(p,a,b,c,d,e)      (p)->CheckDepthStencilMatch(a,b,c,d,e)\n#define IDirect3D8_GetDeviceCaps(p,a,b,c)                   (p)->GetDeviceCaps(a,b,c)\n#define IDirect3D8_GetAdapterMonitor(p,a)                   (p)->GetAdapterMonitor(a)\n#define IDirect3D8_CreateDevice(p,a,b,c,d,e,f)              (p)->CreateDevice(a,b,c,d,e,f)\n#endif\n\n/*****************************************************************************\n * IDirect3DVolume8 interface\n */\n#define INTERFACE IDirect3DVolume8\nDECLARE_INTERFACE_(IDirect3DVolume8,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DVolume8 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID   refguid,void * pData, DWORD * pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;\n    STDMETHOD(GetContainer)(THIS_ REFIID  riid, void ** ppContainer) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3DVOLUME_DESC * pDesc) PURE;\n    STDMETHOD(LockBox)(THIS_ D3DLOCKED_BOX *locked_box, const D3DBOX *box, DWORD flags) PURE;\n    STDMETHOD(UnlockBox)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DVolume8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DVolume8_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DVolume8_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DVolume8 methods ***/\n#define IDirect3DVolume8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DVolume8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DVolume8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DVolume8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DVolume8_GetContainer(p,a,b)          (p)->lpVtbl->GetContainer(p,a,b)\n#define IDirect3DVolume8_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)\n#define IDirect3DVolume8_LockBox(p,a,b,c)             (p)->lpVtbl->LockBox(p,a,b,c)\n#define IDirect3DVolume8_UnlockBox(p)                 (p)->lpVtbl->UnlockBox(p)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DVolume8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DVolume8_AddRef(p)                    (p)->AddRef()\n#define IDirect3DVolume8_Release(p)                   (p)->Release()\n/*** IDirect3DVolume8 methods ***/\n#define IDirect3DVolume8_GetDevice(p,a)               (p)->GetDevice(a)\n#define IDirect3DVolume8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DVolume8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)\n#define IDirect3DVolume8_FreePrivateData(p,a)         (p)->FreePrivateData(a)\n#define IDirect3DVolume8_GetContainer(p,a,b)          (p)->GetContainer(a,b)\n#define IDirect3DVolume8_GetDesc(p,a)                 (p)->GetDesc(a)\n#define IDirect3DVolume8_LockBox(p,a,b,c)             (p)->LockBox(a,b,c)\n#define IDirect3DVolume8_UnlockBox(p)                 (p)->UnlockBox()\n#endif\n\n/*****************************************************************************\n * IDirect3DSwapChain8 interface\n */\n#define INTERFACE IDirect3DSwapChain8\nDECLARE_INTERFACE_(IDirect3DSwapChain8,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DSwapChain8 methods ***/\n    STDMETHOD(Present)(THIS_ const RECT *src_rect, const RECT *dst_rect, HWND dst_window_override,\n            const RGNDATA *dirty_region) PURE;\n    STDMETHOD(GetBackBuffer)(THIS_ UINT  BackBuffer, D3DBACKBUFFER_TYPE  Type, struct IDirect3DSurface8 ** ppBackBuffer) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DSwapChain8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DSwapChain8_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DSwapChain8_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DSwapChain8 methods ***/\n#define IDirect3DSwapChain8_Present(p,a,b,c,d)           (p)->lpVtbl->Present(p,a,b,c,d)\n#define IDirect3DSwapChain8_GetBackBuffer(p,a,b,c)       (p)->lpVtbl->GetBackBuffer(p,a,b,c)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DSwapChain8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DSwapChain8_AddRef(p)                    (p)->AddRef()\n#define IDirect3DSwapChain8_Release(p)                   (p)->Release()\n/*** IDirect3DSwapChain8 methods ***/\n#define IDirect3DSwapChain8_Present(p,a,b,c,d)           (p)->Present(a,b,c,d)\n#define IDirect3DSwapChain8_GetBackBuffer(p,a,b,c)       (p)->GetBackBuffer(a,b,c)\n#endif\n\n/*****************************************************************************\n * IDirect3DSurface8 interface\n */\n#define INTERFACE IDirect3DSurface8\nDECLARE_INTERFACE_(IDirect3DSurface8,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DSurface8 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid,void * pData,DWORD * pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;\n    STDMETHOD(GetContainer)(THIS_ REFIID  riid, void ** ppContainer) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3DSURFACE_DESC * pDesc) PURE;\n    STDMETHOD(LockRect)(THIS_ D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) PURE;\n    STDMETHOD(UnlockRect)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DSurface8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DSurface8_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DSurface8_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DSurface8 methods ***/\n#define IDirect3DSurface8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DSurface8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DSurface8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DSurface8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DSurface8_GetContainer(p,a,b)          (p)->lpVtbl->GetContainer(p,a,b)\n#define IDirect3DSurface8_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)\n#define IDirect3DSurface8_LockRect(p,a,b,c)            (p)->lpVtbl->LockRect(p,a,b,c)\n#define IDirect3DSurface8_UnlockRect(p)                (p)->lpVtbl->UnlockRect(p)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DSurface8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DSurface8_AddRef(p)                    (p)->AddRef()\n#define IDirect3DSurface8_Release(p)                   (p)->Release()\n/*** IDirect3DSurface8 methods ***/\n#define IDirect3DSurface8_GetDevice(p,a)               (p)->GetDevice(a)\n#define IDirect3DSurface8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DSurface8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)\n#define IDirect3DSurface8_FreePrivateData(p,a)         (p)->FreePrivateData(a)\n#define IDirect3DSurface8_GetContainer(p,a,b)          (p)->GetContainer(a,b)\n#define IDirect3DSurface8_GetDesc(p,a)                 (p)->GetDesc(a)\n#define IDirect3DSurface8_LockRect(p,a,b,c)            (p)->LockRect(a,b,c)\n#define IDirect3DSurface8_UnlockRect(p)                (p)->UnlockRect()\n#endif\n\n/*****************************************************************************\n * IDirect3DResource8 interface\n */\n#define INTERFACE IDirect3DResource8\nDECLARE_INTERFACE_(IDirect3DResource8,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DResource8 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;\n    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;\n    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;\n    STDMETHOD_(void,PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DResource8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DResource8_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DResource8_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DResource8 methods ***/\n#define IDirect3DResource8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DResource8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DResource8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DResource8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DResource8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DResource8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)\n#define IDirect3DResource8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)\n#define IDirect3DResource8_GetType(p)                   (p)->lpVtbl->GetType(p)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DResource8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DResource8_AddRef(p)                    (p)->AddRef()\n#define IDirect3DResource8_Release(p)                   (p)->Release()\n/*** IDirect3DResource8 methods ***/\n#define IDirect3DResource8_GetDevice(p,a)               (p)->GetDevice(a)\n#define IDirect3DResource8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DResource8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)\n#define IDirect3DResource8_FreePrivateData(p,a)         (p)->FreePrivateData(a)\n#define IDirect3DResource8_SetPriority(p,a)             (p)->SetPriority(a)\n#define IDirect3DResource8_GetPriority(p)               (p)->GetPriority()\n#define IDirect3DResource8_PreLoad(p)                   (p)->PreLoad()\n#define IDirect3DResource8_GetType(p)                   (p)->GetType()\n#endif\n\n/*****************************************************************************\n * IDirect3DVertexBuffer8 interface\n */\n#define INTERFACE IDirect3DVertexBuffer8\nDECLARE_INTERFACE_(IDirect3DVertexBuffer8,IDirect3DResource8)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DResource8 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;\n    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;\n    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;\n    STDMETHOD_(void,PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;\n    /*** IDirect3DVertexBuffer8 methods ***/\n    STDMETHOD(Lock)(THIS_ UINT  OffsetToLock, UINT  SizeToLock, BYTE ** ppbData, DWORD  Flags) PURE;\n    STDMETHOD(Unlock)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC  * pDesc) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DVertexBuffer8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DVertexBuffer8_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DVertexBuffer8_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DVertexBuffer8 methods: IDirect3DResource8 ***/\n#define IDirect3DVertexBuffer8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DVertexBuffer8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DVertexBuffer8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DVertexBuffer8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DVertexBuffer8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DVertexBuffer8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)\n#define IDirect3DVertexBuffer8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)\n#define IDirect3DVertexBuffer8_GetType(p)                   (p)->lpVtbl->GetType(p)\n/*** IDirect3DVertexBuffer8 methods ***/\n#define IDirect3DVertexBuffer8_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)\n#define IDirect3DVertexBuffer8_Unlock(p)                    (p)->lpVtbl->Unlock(p)\n#define IDirect3DVertexBuffer8_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DVertexBuffer8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DVertexBuffer8_AddRef(p)                    (p)->AddRef()\n#define IDirect3DVertexBuffer8_Release(p)                   (p)->Release()\n/*** IDirect3DVertexBuffer8 methods: IDirect3DResource8 ***/\n#define IDirect3DVertexBuffer8_GetDevice(p,a)               (p)->GetDevice(a)\n#define IDirect3DVertexBuffer8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DVertexBuffer8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)\n#define IDirect3DVertexBuffer8_FreePrivateData(p,a)         (p)->FreePrivateData(a)\n#define IDirect3DVertexBuffer8_SetPriority(p,a)             (p)->SetPriority(a)\n#define IDirect3DVertexBuffer8_GetPriority(p)               (p)->GetPriority()\n#define IDirect3DVertexBuffer8_PreLoad(p)                   (p)->PreLoad()\n#define IDirect3DVertexBuffer8_GetType(p)                   (p)->GetType()\n/*** IDirect3DVertexBuffer8 methods ***/\n#define IDirect3DVertexBuffer8_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)\n#define IDirect3DVertexBuffer8_Unlock(p)                    (p)->Unlock()\n#define IDirect3DVertexBuffer8_GetDesc(p,a)                 (p)->GetDesc(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DIndexBuffer8 interface\n */\n#define INTERFACE IDirect3DIndexBuffer8\nDECLARE_INTERFACE_(IDirect3DIndexBuffer8,IDirect3DResource8)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DResource8 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;\n    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;\n    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;\n    STDMETHOD_(void,PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;\n    /*** IDirect3DIndexBuffer8 methods ***/\n    STDMETHOD(Lock)(THIS_ UINT  OffsetToLock, UINT  SizeToLock, BYTE ** ppbData, DWORD  Flags) PURE;\n    STDMETHOD(Unlock)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3DINDEXBUFFER_DESC * pDesc) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DIndexBuffer8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DIndexBuffer8_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DIndexBuffer8_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DIndexBuffer8 methods: IDirect3DResource8 ***/\n#define IDirect3DIndexBuffer8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DIndexBuffer8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DIndexBuffer8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DIndexBuffer8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DIndexBuffer8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DIndexBuffer8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)\n#define IDirect3DIndexBuffer8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)\n#define IDirect3DIndexBuffer8_GetType(p)                   (p)->lpVtbl->GetType(p)\n/*** IDirect3DIndexBuffer8 methods ***/\n#define IDirect3DIndexBuffer8_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)\n#define IDirect3DIndexBuffer8_Unlock(p)                    (p)->lpVtbl->Unlock(p)\n#define IDirect3DIndexBuffer8_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DIndexBuffer8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DIndexBuffer8_AddRef(p)                    (p)->AddRef()\n#define IDirect3DIndexBuffer8_Release(p)                   (p)->Release()\n/*** IDirect3DIndexBuffer8 methods: IDirect3DResource8 ***/\n#define IDirect3DIndexBuffer8_GetDevice(p,a)               (p)->GetDevice(a)\n#define IDirect3DIndexBuffer8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DIndexBuffer8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)\n#define IDirect3DIndexBuffer8_FreePrivateData(p,a)         (p)->FreePrivateData(a)\n#define IDirect3DIndexBuffer8_SetPriority(p,a)             (p)->SetPriority(a)\n#define IDirect3DIndexBuffer8_GetPriority(p)               (p)->GetPriority()\n#define IDirect3DIndexBuffer8_PreLoad(p)                   (p)->PreLoad()\n#define IDirect3DIndexBuffer8_GetType(p)                   (p)->GetType()\n/*** IDirect3DIndexBuffer8 methods ***/\n#define IDirect3DIndexBuffer8_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)\n#define IDirect3DIndexBuffer8_Unlock(p)                    (p)->Unlock()\n#define IDirect3DIndexBuffer8_GetDesc(p,a)                 (p)->GetDesc(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DBaseTexture8 interface\n */\n#define INTERFACE IDirect3DBaseTexture8\nDECLARE_INTERFACE_(IDirect3DBaseTexture8,IDirect3DResource8)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DResource8 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;\n    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;\n    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;\n    STDMETHOD_(void,PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;\n    /*** IDirect3DBaseTexture8 methods ***/\n    STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD  LODNew) PURE;\n    STDMETHOD_(DWORD,GetLOD)(THIS) PURE;\n    STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DBaseTexture8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DBaseTexture8_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DBaseTexture8_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DBaseTexture8 methods: IDirect3DResource8 ***/\n#define IDirect3DBaseTexture8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DBaseTexture8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DBaseTexture8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DBaseTexture8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DBaseTexture8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DBaseTexture8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)\n#define IDirect3DBaseTexture8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)\n#define IDirect3DBaseTexture8_GetType(p)                   (p)->lpVtbl->GetType(p)\n/*** IDirect3DBaseTexture8 methods ***/\n#define IDirect3DBaseTexture8_SetLOD(p,a)                  (p)->lpVtbl->SetLOD(p,a)\n#define IDirect3DBaseTexture8_GetLOD(p)                    (p)->lpVtbl->GetLOD(p)\n#define IDirect3DBaseTexture8_GetLevelCount(p)             (p)->lpVtbl->GetLevelCount(p)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DBaseTexture8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DBaseTexture8_AddRef(p)                    (p)->AddRef()\n#define IDirect3DBaseTexture8_Release(p)                   (p)->Release()\n/*** IDirect3DBaseTexture8 methods: IDirect3DResource8 ***/\n#define IDirect3DBaseTexture8_GetDevice(p,a)               (p)->GetDevice(a)\n#define IDirect3DBaseTexture8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DBaseTexture8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)\n#define IDirect3DBaseTexture8_FreePrivateData(p,a)         (p)->FreePrivateData(a)\n#define IDirect3DBaseTexture8_SetPriority(p,a)             (p)->SetPriority(a)\n#define IDirect3DBaseTexture8_GetPriority(p)               (p)->GetPriority()\n#define IDirect3DBaseTexture8_PreLoad(p)                   (p)->PreLoad()\n#define IDirect3DBaseTexture8_GetType(p)                   (p)->GetType()\n/*** IDirect3DBaseTexture8 methods ***/\n#define IDirect3DBaseTexture8_SetLOD(p,a)                  (p)->SetLOD(a)\n#define IDirect3DBaseTexture8_GetLOD(p)                    (p)->GetLOD()\n#define IDirect3DBaseTexture8_GetLevelCount(p)             (p)->GetLevelCount()\n#endif\n\n/*****************************************************************************\n * IDirect3DCubeTexture8 interface\n */\n#define INTERFACE IDirect3DCubeTexture8\nDECLARE_INTERFACE_(IDirect3DCubeTexture8,IDirect3DBaseTexture8)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DResource8 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;\n    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;\n    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;\n    STDMETHOD_(void,PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;\n    /*** IDirect3DBaseTexture8 methods ***/\n    STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD  LODNew) PURE;\n    STDMETHOD_(DWORD,GetLOD)(THIS) PURE;\n    STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;\n    /*** IDirect3DCubeTexture8 methods ***/\n    STDMETHOD(GetLevelDesc)(THIS_ UINT  Level,D3DSURFACE_DESC * pDesc) PURE;\n    STDMETHOD(GetCubeMapSurface)(THIS_ D3DCUBEMAP_FACES  FaceType,UINT  Level,IDirect3DSurface8 ** ppCubeMapSurface) PURE;\n    STDMETHOD(LockRect)(THIS_ D3DCUBEMAP_FACES face, UINT level, D3DLOCKED_RECT *locked_rect,\n            const RECT *rect, DWORD flags) PURE;\n    STDMETHOD(UnlockRect)(THIS_ D3DCUBEMAP_FACES  FaceType,UINT  Level) PURE;\n    STDMETHOD(AddDirtyRect)(THIS_ D3DCUBEMAP_FACES face, const RECT *dirty_rect) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DCubeTexture8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DCubeTexture8_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DCubeTexture8_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DCubeTexture8 methods: IDirect3DResource8 ***/\n#define IDirect3DCubeTexture8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DCubeTexture8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DCubeTexture8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DCubeTexture8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DCubeTexture8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DCubeTexture8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)\n#define IDirect3DCubeTexture8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)\n#define IDirect3DCubeTexture8_GetType(p)                   (p)->lpVtbl->GetType(p)\n/*** IDirect3DCubeTexture8 methods: IDirect3DBaseTexture8 ***/\n#define IDirect3DCubeTexture8_SetLOD(p,a)                  (p)->lpVtbl->SetLOD(p,a)\n#define IDirect3DCubeTexture8_GetLOD(p)                    (p)->lpVtbl->GetLOD(p)\n#define IDirect3DCubeTexture8_GetLevelCount(p)             (p)->lpVtbl->GetLevelCount(p)\n/*** IDirect3DCubeTexture8 methods ***/\n#define IDirect3DCubeTexture8_GetLevelDesc(p,a,b)          (p)->lpVtbl->GetLevelDesc(p,a,b)\n#define IDirect3DCubeTexture8_GetCubeMapSurface(p,a,b,c)   (p)->lpVtbl->GetCubeMapSurface(p,a,b,c)\n#define IDirect3DCubeTexture8_LockRect(p,a,b,c,d,e)        (p)->lpVtbl->LockRect(p,a,b,c,d,e)\n#define IDirect3DCubeTexture8_UnlockRect(p,a,b)            (p)->lpVtbl->UnlockRect(p,a,b)\n#define IDirect3DCubeTexture8_AddDirtyRect(p,a,b)          (p)->lpVtbl->AddDirtyRect(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DCubeTexture8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DCubeTexture8_AddRef(p)                    (p)->AddRef()\n#define IDirect3DCubeTexture8_Release(p)                   (p)->Release()\n/*** IDirect3DCubeTexture8 methods: IDirect3DResource8 ***/\n#define IDirect3DCubeTexture8_GetDevice(p,a)               (p)->GetDevice(a)\n#define IDirect3DCubeTexture8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DCubeTexture8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)\n#define IDirect3DCubeTexture8_FreePrivateData(p,a)         (p)->FreePrivateData(a)\n#define IDirect3DCubeTexture8_SetPriority(p,a)             (p)->SetPriority(a)\n#define IDirect3DCubeTexture8_GetPriority(p)               (p)->GetPriority()\n#define IDirect3DCubeTexture8_PreLoad(p)                   (p)->PreLoad()\n#define IDirect3DCubeTexture8_GetType(p)                   (p)->GetType()\n/*** IDirect3DCubeTexture8 methods: IDirect3DBaseTexture8 ***/\n#define IDirect3DCubeTexture8_SetLOD(p,a)                  (p)->SetLOD(a)\n#define IDirect3DCubeTexture8_GetLOD(p)                    (p)->GetLOD()\n#define IDirect3DCubeTexture8_GetLevelCount(p)             (p)->GetLevelCount()\n/*** IDirect3DCubeTexture8 methods ***/\n#define IDirect3DCubeTexture8_GetLevelDesc(p,a,b)          (p)->GetLevelDesc(a,b)\n#define IDirect3DCubeTexture8_GetCubeMapSurface(p,a,b,c)   (p)->GetCubeMapSurface(a,b,c)\n#define IDirect3DCubeTexture8_LockRect(p,a,b,c,d,e)        (p)->LockRect(a,b,c,d,e)\n#define IDirect3DCubeTexture8_UnlockRect(p,a,b)            (p)->UnlockRect(a,b)\n#define IDirect3DCubeTexture8_AddDirtyRect(p,a,b)          (p)->AddDirtyRect(a,b)\n#endif\n\n/*****************************************************************************\n * IDirect3DTexture8 interface\n */\n#define INTERFACE IDirect3DTexture8\nDECLARE_INTERFACE_(IDirect3DTexture8,IDirect3DBaseTexture8)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DResource8 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;\n    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;\n    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;\n    STDMETHOD_(void,PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;\n    /*** IDirect3DBaseTexture8 methods ***/\n    STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD  LODNew) PURE;\n    STDMETHOD_(DWORD,GetLOD)(THIS) PURE;\n    STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;\n    /*** IDirect3DTexture8 methods ***/\n    STDMETHOD(GetLevelDesc)(THIS_ UINT  Level,D3DSURFACE_DESC * pDesc) PURE;\n    STDMETHOD(GetSurfaceLevel)(THIS_ UINT  Level,IDirect3DSurface8 ** ppSurfaceLevel) PURE;\n    STDMETHOD(LockRect)(THIS_ UINT level, D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) PURE;\n    STDMETHOD(UnlockRect)(THIS_ UINT  Level) PURE;\n    STDMETHOD(AddDirtyRect)(THIS_ const RECT *dirty_rect) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DTexture8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DTexture8_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DTexture8_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DTexture8 methods: IDirect3DResource8 ***/\n#define IDirect3DTexture8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DTexture8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DTexture8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DTexture8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DTexture8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DTexture8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)\n#define IDirect3DTexture8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)\n#define IDirect3DTexture8_GetType(p)                   (p)->lpVtbl->GetType(p)\n/*** IDirect3DTexture8 methods: IDirect3DBaseTexture8 ***/\n#define IDirect3DTexture8_SetLOD(p,a)                  (p)->lpVtbl->SetLOD(p,a)\n#define IDirect3DTexture8_GetLOD(p)                    (p)->lpVtbl->GetLOD(p)\n#define IDirect3DTexture8_GetLevelCount(p)             (p)->lpVtbl->GetLevelCount(p)\n/*** IDirect3DTexture8 methods ***/\n#define IDirect3DTexture8_GetLevelDesc(p,a,b)          (p)->lpVtbl->GetLevelDesc(p,a,b)\n#define IDirect3DTexture8_GetSurfaceLevel(p,a,b)       (p)->lpVtbl->GetSurfaceLevel(p,a,b)\n#define IDirect3DTexture8_LockRect(p,a,b,c,d)          (p)->lpVtbl->LockRect(p,a,b,c,d)\n#define IDirect3DTexture8_UnlockRect(p,a)              (p)->lpVtbl->UnlockRect(p,a)\n#define IDirect3DTexture8_AddDirtyRect(p,a)            (p)->lpVtbl->AddDirtyRect(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DTexture8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DTexture8_AddRef(p)                    (p)->AddRef()\n#define IDirect3DTexture8_Release(p)                   (p)->Release()\n/*** IDirect3DTexture8 methods: IDirect3DResource8 ***/\n#define IDirect3DTexture8_GetDevice(p,a)               (p)->GetDevice(a)\n#define IDirect3DTexture8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DTexture8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)\n#define IDirect3DTexture8_FreePrivateData(p,a)         (p)->FreePrivateData(a)\n#define IDirect3DTexture8_SetPriority(p,a)             (p)->SetPriority(a)\n#define IDirect3DTexture8_GetPriority(p)               (p)->GetPriority()\n#define IDirect3DTexture8_PreLoad(p)                   (p)->PreLoad()\n#define IDirect3DTexture8_GetType(p)                   (p)->GetType()\n/*** IDirect3DTexture8 methods: IDirect3DBaseTexture8 ***/\n#define IDirect3DTexture8_SetLOD(p,a)                  (p)->SetLOD(a)\n#define IDirect3DTexture8_GetLOD(p)                    (p)->GetLOD()\n#define IDirect3DTexture8_GetLevelCount(p)             (p)->GetLevelCount()\n/*** IDirect3DTexture8 methods ***/\n#define IDirect3DTexture8_GetLevelDesc(p,a,b)          (p)->GetLevelDesc(a,b)\n#define IDirect3DTexture8_GetSurfaceLevel(p,a,b)       (p)->GetSurfaceLevel(a,b)\n#define IDirect3DTexture8_LockRect(p,a,b,c,d)          (p)->LockRect(a,b,c,d)\n#define IDirect3DTexture8_UnlockRect(p,a)              (p)->UnlockRect(a)\n#define IDirect3DTexture8_AddDirtyRect(p,a)            (p)->AddDirtyRect(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DVolumeTexture8 interface\n */\n#define INTERFACE IDirect3DVolumeTexture8\nDECLARE_INTERFACE_(IDirect3DVolumeTexture8,IDirect3DBaseTexture8)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DResource8 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID  refguid) PURE;\n    STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD  PriorityNew) PURE;\n    STDMETHOD_(DWORD,GetPriority)(THIS) PURE;\n    STDMETHOD_(void,PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;\n    /*** IDirect3DBaseTexture8 methods ***/\n    STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD  LODNew) PURE;\n    STDMETHOD_(DWORD,GetLOD)(THIS) PURE;\n    STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;\n    /*** IDirect3DVolumeTexture8 methods ***/\n    STDMETHOD(GetLevelDesc)(THIS_ UINT  Level,D3DVOLUME_DESC * pDesc) PURE;\n    STDMETHOD(GetVolumeLevel)(THIS_ UINT  Level,IDirect3DVolume8 ** ppVolumeLevel) PURE;\n    STDMETHOD(LockBox)(THIS_ UINT level, D3DLOCKED_BOX *locked_box, const D3DBOX *box, DWORD flags) PURE;\n    STDMETHOD(UnlockBox)(THIS_ UINT  Level) PURE;\n    STDMETHOD(AddDirtyBox)(THIS_ const D3DBOX *dirty_box) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DVolumeTexture8_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DVolumeTexture8_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DVolumeTexture8_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DVolumeTexture8 methods: IDirect3DResource8 ***/\n#define IDirect3DVolumeTexture8_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DVolumeTexture8_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DVolumeTexture8_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DVolumeTexture8_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DVolumeTexture8_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DVolumeTexture8_GetPriority(p)               (p)->lpVtbl->GetPriority(p)\n#define IDirect3DVolumeTexture8_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)\n#define IDirect3DVolumeTexture8_GetType(p)                   (p)->lpVtbl->GetType(p)\n/*** IDirect3DVolumeTexture8 methods: IDirect3DBaseTexture8 ***/\n#define IDirect3DVolumeTexture8_SetLOD(p,a)                  (p)->lpVtbl->SetLOD(p,a)\n#define IDirect3DVolumeTexture8_GetLOD(p)                    (p)->lpVtbl->GetLOD(p)\n#define IDirect3DVolumeTexture8_GetLevelCount(p)             (p)->lpVtbl->GetLevelCount(p)\n/*** IDirect3DVolumeTexture8 methods ***/\n#define IDirect3DVolumeTexture8_GetLevelDesc(p,a,b)          (p)->lpVtbl->GetLevelDesc(p,a,b)\n#define IDirect3DVolumeTexture8_GetVolumeLevel(p,a,b)        (p)->lpVtbl->GetVolumeLevel(p,a,b)\n#define IDirect3DVolumeTexture8_LockBox(p,a,b,c,d)           (p)->lpVtbl->LockBox(p,a,b,c,d)\n#define IDirect3DVolumeTexture8_UnlockBox(p,a)               (p)->lpVtbl->UnlockBox(p,a)\n#define IDirect3DVolumeTexture8_AddDirtyBox(p,a)             (p)->lpVtbl->AddDirtyBox(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DVolumeTexture8_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DVolumeTexture8_AddRef(p)                    (p)->AddRef()\n#define IDirect3DVolumeTexture8_Release(p)                   (p)->Release()\n/*** IDirect3DVolumeTexture8 methods: IDirect3DResource8 ***/\n#define IDirect3DVolumeTexture8_GetDevice(p,a)               (p)->GetDevice(a)\n#define IDirect3DVolumeTexture8_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DVolumeTexture8_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)\n#define IDirect3DVolumeTexture8_FreePrivateData(p,a)         (p)->FreePrivateData(a)\n#define IDirect3DVolumeTexture8_SetPriority(p,a)             (p)->SetPriority(a)\n#define IDirect3DVolumeTexture8_GetPriority(p)               (p)->GetPriority()\n#define IDirect3DVolumeTexture8_PreLoad(p)                   (p)->PreLoad()\n#define IDirect3DVolumeTexture8_GetType(p)                   (p)->GetType()\n/*** IDirect3DVolumeTexture8 methods: IDirect3DBaseTexture8 ***/\n#define IDirect3DVolumeTexture8_SetLOD(p,a)                  (p)->SetLOD(a)\n#define IDirect3DVolumeTexture8_GetLOD(p)                    (p)->GetLOD()\n#define IDirect3DVolumeTexture8_GetLevelCount(p)             (p)->GetLevelCount()\n/*** IDirect3DVolumeTexture8 methods ***/\n#define IDirect3DVolumeTexture8_GetLevelDesc(p,a,b)          (p)->GetLevelDesc(a,b)\n#define IDirect3DVolumeTexture8_GetVolumeLevel(p,a,b)        (p)->GetVolumeLevel(a,b)\n#define IDirect3DVolumeTexture8_LockBox(p,a,b,c,d)           (p)->LockBox(a,b,c,d)\n#define IDirect3DVolumeTexture8_UnlockBox(p,a)               (p)->UnlockBox(a)\n#define IDirect3DVolumeTexture8_AddDirtyBox(p,a)             (p)->AddDirtyBox(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DDevice8 interface\n */\n#define INTERFACE IDirect3DDevice8\nDECLARE_INTERFACE_(IDirect3DDevice8,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DDevice8 methods ***/\n    STDMETHOD(TestCooperativeLevel)(THIS) PURE;\n    STDMETHOD_(UINT,GetAvailableTextureMem)(THIS) PURE;\n    STDMETHOD(ResourceManagerDiscardBytes)(THIS_ DWORD  Bytes) PURE;\n    STDMETHOD(GetDirect3D)(THIS_ IDirect3D8 ** ppD3D8) PURE;\n    STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS8 * pCaps) PURE;\n    STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE * pMode) PURE;\n    STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS  * pParameters) PURE;\n    STDMETHOD(SetCursorProperties)(THIS_ UINT  XHotSpot, UINT  YHotSpot, IDirect3DSurface8 * pCursorBitmap) PURE;\n    STDMETHOD_(void,SetCursorPosition)(THIS_ UINT  XScreenSpace, UINT  YScreenSpace,DWORD  Flags) PURE;\n    STDMETHOD_(BOOL,ShowCursor)(THIS_ BOOL  bShow) PURE;\n    STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS * pPresentationParameters, IDirect3DSwapChain8 ** pSwapChain) PURE;\n    STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS * pPresentationParameters) PURE;\n    STDMETHOD(Present)(THIS_ const RECT *src_rect, const RECT *dst_rect, HWND dst_window_override,\n            const RGNDATA *dirty_region) PURE;\n    STDMETHOD(GetBackBuffer)(THIS_ UINT  BackBuffer,D3DBACKBUFFER_TYPE  Type,IDirect3DSurface8 ** ppBackBuffer) PURE;\n    STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS * pRasterStatus) PURE;\n    STDMETHOD_(void, SetGammaRamp)(THIS_ DWORD flags, const D3DGAMMARAMP *ramp) PURE;\n    STDMETHOD_(void,GetGammaRamp)(THIS_ D3DGAMMARAMP * pRamp) PURE;\n    STDMETHOD(CreateTexture)(THIS_ UINT  Width,UINT  Height,UINT  Levels,DWORD  Usage,D3DFORMAT  Format,D3DPOOL  Pool,IDirect3DTexture8 ** ppTexture) PURE;\n    STDMETHOD(CreateVolumeTexture)(THIS_ UINT  Width,UINT  Height,UINT  Depth,UINT  Levels,DWORD  Usage,D3DFORMAT  Format,D3DPOOL  Pool,IDirect3DVolumeTexture8 ** ppVolumeTexture) PURE;\n    STDMETHOD(CreateCubeTexture)(THIS_ UINT  EdgeLength,UINT  Levels,DWORD  Usage,D3DFORMAT  Format,D3DPOOL  Pool,IDirect3DCubeTexture8 ** ppCubeTexture) PURE;\n    STDMETHOD(CreateVertexBuffer)(THIS_ UINT  Length,DWORD  Usage,DWORD  FVF,D3DPOOL  Pool,IDirect3DVertexBuffer8 ** ppVertexBuffer) PURE;\n    STDMETHOD(CreateIndexBuffer)(THIS_ UINT  Length,DWORD  Usage,D3DFORMAT  Format,D3DPOOL  Pool,IDirect3DIndexBuffer8 ** ppIndexBuffer) PURE;\n    STDMETHOD(CreateRenderTarget)(THIS_ UINT  Width,UINT  Height,D3DFORMAT  Format,D3DMULTISAMPLE_TYPE  MultiSample,BOOL  Lockable,IDirect3DSurface8 ** ppSurface) PURE;\n    STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT  Width,UINT  Height,D3DFORMAT  Format,D3DMULTISAMPLE_TYPE  MultiSample,IDirect3DSurface8 ** ppSurface) PURE;\n    STDMETHOD(CreateImageSurface)(THIS_ UINT  Width,UINT  Height,D3DFORMAT  Format,IDirect3DSurface8 ** ppSurface) PURE;\n    STDMETHOD(CopyRects)(THIS_ IDirect3DSurface8 *src_surface, const RECT *src_rects,\n            UINT rect_count, IDirect3DSurface8 *dst_surface, const POINT *dst_points) PURE;\n    STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture8 * pSourceTexture,IDirect3DBaseTexture8 * pDestinationTexture) PURE;\n    STDMETHOD(GetFrontBuffer)(THIS_ IDirect3DSurface8 * pDestSurface) PURE;\n    STDMETHOD(SetRenderTarget)(THIS_ IDirect3DSurface8 * pRenderTarget,IDirect3DSurface8 * pNewZStencil) PURE;\n    STDMETHOD(GetRenderTarget)(THIS_ IDirect3DSurface8 ** ppRenderTarget) PURE;\n    STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface8 ** ppZStencilSurface) PURE;\n    STDMETHOD(BeginScene)(THIS) PURE;\n    STDMETHOD(EndScene)(THIS) PURE;\n    STDMETHOD(Clear)(THIS_ DWORD rect_count, const D3DRECT *rects, DWORD flags, D3DCOLOR color,\n            float z, DWORD stencil) PURE;\n    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE;\n    STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE  State,D3DMATRIX * pMatrix) PURE;\n    STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE;\n    STDMETHOD(SetViewport)(THIS_ const D3DVIEWPORT8 *viewport) PURE;\n    STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT8 * pViewport) PURE;\n    STDMETHOD(SetMaterial)(THIS_ const D3DMATERIAL8 *material) PURE;\n    STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL8 *pMaterial) PURE;\n    STDMETHOD(SetLight)(THIS_ DWORD index, const D3DLIGHT8 *light) PURE;\n    STDMETHOD(GetLight)(THIS_ DWORD  Index,D3DLIGHT8 * pLight) PURE;\n    STDMETHOD(LightEnable)(THIS_ DWORD  Index,BOOL  Enable) PURE;\n    STDMETHOD(GetLightEnable)(THIS_ DWORD  Index,BOOL * pEnable) PURE;\n    STDMETHOD(SetClipPlane)(THIS_ DWORD index, const float *plane) PURE;\n    STDMETHOD(GetClipPlane)(THIS_ DWORD  Index,float * pPlane) PURE;\n    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE  State,DWORD  Value) PURE;\n    STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE  State,DWORD * pValue) PURE;\n    STDMETHOD(BeginStateBlock)(THIS) PURE;\n    STDMETHOD(EndStateBlock)(THIS_ DWORD * pToken) PURE;\n    STDMETHOD(ApplyStateBlock)(THIS_ DWORD  Token) PURE;\n    STDMETHOD(CaptureStateBlock)(THIS_ DWORD  Token) PURE;\n    STDMETHOD(DeleteStateBlock)(THIS_ DWORD  Token) PURE;\n    STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE  Type,DWORD * pToken) PURE;\n    STDMETHOD(SetClipStatus)(THIS_ const D3DCLIPSTATUS8 *clip_status) PURE;\n    STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS8 * pClipStatus) PURE;\n    STDMETHOD(GetTexture)(THIS_ DWORD  Stage,IDirect3DBaseTexture8 ** ppTexture) PURE;\n    STDMETHOD(SetTexture)(THIS_ DWORD  Stage,IDirect3DBaseTexture8 * pTexture) PURE;\n    STDMETHOD(GetTextureStageState)(THIS_ DWORD  Stage,D3DTEXTURESTAGESTATETYPE  Type,DWORD * pValue) PURE;\n    STDMETHOD(SetTextureStageState)(THIS_ DWORD  Stage,D3DTEXTURESTAGESTATETYPE  Type,DWORD  Value) PURE;\n    STDMETHOD(ValidateDevice)(THIS_ DWORD * pNumPasses) PURE;\n    STDMETHOD(GetInfo)(THIS_ DWORD  DevInfoID,void * pDevInfoStruct,DWORD  DevInfoStructSize) PURE;\n    STDMETHOD(SetPaletteEntries)(THIS_ UINT palette_idx, const PALETTEENTRY *entries) PURE;\n    STDMETHOD(GetPaletteEntries)(THIS_ UINT  PaletteNumber,PALETTEENTRY * pEntries) PURE;\n    STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT  PaletteNumber) PURE;\n    STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT  * PaletteNumber) PURE;\n    STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE  PrimitiveType,UINT  StartVertex,UINT  PrimitiveCount) PURE;\n    STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE  PrimitiveType,UINT  minIndex,UINT  NumVertices,UINT  startIndex,UINT  primCount) PURE;\n    STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE primitive_type, UINT primitive_count,\n            const void *data, UINT stride) PURE;\n    STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE primitive_type, UINT min_vertex_idx,\n            UINT vertex_count, UINT primitive_count, const void *index_data, D3DFORMAT index_format,\n            const void *data, UINT stride) PURE;\n    STDMETHOD(ProcessVertices)(THIS_ UINT  SrcStartIndex,UINT  DestIndex,UINT  VertexCount,IDirect3DVertexBuffer8 * pDestBuffer,DWORD  Flags) PURE;\n    STDMETHOD(CreateVertexShader)(THIS_ const DWORD *declaration, const DWORD *byte_code,\n            DWORD *shader, DWORD usage) PURE;\n    STDMETHOD(SetVertexShader)(THIS_ DWORD  Handle) PURE;\n    STDMETHOD(GetVertexShader)(THIS_ DWORD * pHandle) PURE;\n    STDMETHOD(DeleteVertexShader)(THIS_ DWORD  Handle) PURE;\n    STDMETHOD(SetVertexShaderConstant)(THIS_ DWORD reg_idx, const void *data, DWORD count) PURE;\n    STDMETHOD(GetVertexShaderConstant)(THIS_ DWORD  Register,void * pConstantData,DWORD  ConstantCount) PURE;\n    STDMETHOD(GetVertexShaderDeclaration)(THIS_ DWORD  Handle,void * pData,DWORD * pSizeOfData) PURE;\n    STDMETHOD(GetVertexShaderFunction)(THIS_ DWORD  Handle,void * pData,DWORD * pSizeOfData) PURE;\n    STDMETHOD(SetStreamSource)(THIS_ UINT  StreamNumber,IDirect3DVertexBuffer8 * pStreamData,UINT  Stride) PURE;\n    STDMETHOD(GetStreamSource)(THIS_ UINT  StreamNumber,IDirect3DVertexBuffer8 ** ppStreamData,UINT * pStride) PURE;\n    STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer8 * pIndexData,UINT  BaseVertexIndex) PURE;\n    STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer8 ** ppIndexData,UINT * pBaseVertexIndex) PURE;\n    STDMETHOD(CreatePixelShader)(THIS_ const DWORD *byte_code, DWORD *shader) PURE;\n    STDMETHOD(SetPixelShader)(THIS_ DWORD  Handle) PURE;\n    STDMETHOD(GetPixelShader)(THIS_ DWORD * pHandle) PURE;\n    STDMETHOD(DeletePixelShader)(THIS_ DWORD  Handle) PURE;\n    STDMETHOD(SetPixelShaderConstant)(THIS_ DWORD reg_idx, const void *data, DWORD count) PURE;\n    STDMETHOD(GetPixelShaderConstant)(THIS_ DWORD  Register,void * pConstantData,DWORD  ConstantCount) PURE;\n    STDMETHOD(GetPixelShaderFunction)(THIS_ DWORD  Handle,void * pData,DWORD * pSizeOfData) PURE;\n    STDMETHOD(DrawRectPatch)(THIS_ UINT handle, const float *segment_count,\n            const D3DRECTPATCH_INFO *patch_info) PURE;\n    STDMETHOD(DrawTriPatch)(THIS_ UINT handle, const float *segment_count,\n            const D3DTRIPATCH_INFO *patch_info) PURE;\n    STDMETHOD(DeletePatch)(THIS_ UINT  Handle) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DDevice8_QueryInterface(p,a,b)                     (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DDevice8_AddRef(p)                                 (p)->lpVtbl->AddRef(p)\n#define IDirect3DDevice8_Release(p)                                (p)->lpVtbl->Release(p)\n/*** IDirect3DDevice8 methods ***/\n#define IDirect3DDevice8_TestCooperativeLevel(p)                   (p)->lpVtbl->TestCooperativeLevel(p)\n#define IDirect3DDevice8_GetAvailableTextureMem(p)                 (p)->lpVtbl->GetAvailableTextureMem(p)\n#define IDirect3DDevice8_ResourceManagerDiscardBytes(p,a)          (p)->lpVtbl->ResourceManagerDiscardBytes(p,a)\n#define IDirect3DDevice8_GetDirect3D(p,a)                          (p)->lpVtbl->GetDirect3D(p,a)\n#define IDirect3DDevice8_GetDeviceCaps(p,a)                        (p)->lpVtbl->GetDeviceCaps(p,a)\n#define IDirect3DDevice8_GetDisplayMode(p,a)                       (p)->lpVtbl->GetDisplayMode(p,a)\n#define IDirect3DDevice8_GetCreationParameters(p,a)                (p)->lpVtbl->GetCreationParameters(p,a)\n#define IDirect3DDevice8_SetCursorProperties(p,a,b,c)              (p)->lpVtbl->SetCursorProperties(p,a,b,c)\n#define IDirect3DDevice8_SetCursorPosition(p,a,b,c)                (p)->lpVtbl->SetCursorPosition(p,a,b,c)\n#define IDirect3DDevice8_ShowCursor(p,a)                           (p)->lpVtbl->ShowCursor(p,a)\n#define IDirect3DDevice8_CreateAdditionalSwapChain(p,a,b)          (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b)\n#define IDirect3DDevice8_Reset(p,a)                                (p)->lpVtbl->Reset(p,a)\n#define IDirect3DDevice8_Present(p,a,b,c,d)                        (p)->lpVtbl->Present(p,a,b,c,d)\n#define IDirect3DDevice8_GetBackBuffer(p,a,b,c)                    (p)->lpVtbl->GetBackBuffer(p,a,b,c)\n#define IDirect3DDevice8_GetRasterStatus(p,a)                      (p)->lpVtbl->GetRasterStatus(p,a)\n#define IDirect3DDevice8_SetGammaRamp(p,a,b)                       (p)->lpVtbl->SetGammaRamp(p,a,b)\n#define IDirect3DDevice8_GetGammaRamp(p,a)                         (p)->lpVtbl->GetGammaRamp(p,a)\n#define IDirect3DDevice8_CreateTexture(p,a,b,c,d,e,f,g)            (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g)\n#define IDirect3DDevice8_CreateVolumeTexture(p,a,b,c,d,e,f,g,h)    (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h)\n#define IDirect3DDevice8_CreateCubeTexture(p,a,b,c,d,e,f)          (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f)\n#define IDirect3DDevice8_CreateVertexBuffer(p,a,b,c,d,e)           (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e)\n#define IDirect3DDevice8_CreateIndexBuffer(p,a,b,c,d,e)            (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e)\n#define IDirect3DDevice8_CreateRenderTarget(p,a,b,c,d,e,f)         (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f)\n#define IDirect3DDevice8_CreateDepthStencilSurface(p,a,b,c,d,e)    (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e)\n#define IDirect3DDevice8_CreateImageSurface(p,a,b,c,d)             (p)->lpVtbl->CreateImageSurface(p,a,b,c,d)\n#define IDirect3DDevice8_CopyRects(p,a,b,c,d,e)                    (p)->lpVtbl->CopyRects(p,a,b,c,d,e)\n#define IDirect3DDevice8_UpdateTexture(p,a,b)                      (p)->lpVtbl->UpdateTexture(p,a,b)\n#define IDirect3DDevice8_GetFrontBuffer(p,a)                       (p)->lpVtbl->GetFrontBuffer(p,a)\n#define IDirect3DDevice8_SetRenderTarget(p,a,b)                    (p)->lpVtbl->SetRenderTarget(p,a,b)\n#define IDirect3DDevice8_GetRenderTarget(p,a)                      (p)->lpVtbl->GetRenderTarget(p,a)\n#define IDirect3DDevice8_GetDepthStencilSurface(p,a)               (p)->lpVtbl->GetDepthStencilSurface(p,a)\n#define IDirect3DDevice8_BeginScene(p)                             (p)->lpVtbl->BeginScene(p)\n#define IDirect3DDevice8_EndScene(p)                               (p)->lpVtbl->EndScene(p)\n#define IDirect3DDevice8_Clear(p,a,b,c,d,e,f)                      (p)->lpVtbl->Clear(p,a,b,c,d,e,f)\n#define IDirect3DDevice8_SetTransform(p,a,b)                       (p)->lpVtbl->SetTransform(p,a,b)\n#define IDirect3DDevice8_GetTransform(p,a,b)                       (p)->lpVtbl->GetTransform(p,a,b)\n#define IDirect3DDevice8_MultiplyTransform(p,a,b)                  (p)->lpVtbl->MultiplyTransform(p,a,b)\n#define IDirect3DDevice8_SetViewport(p,a)                          (p)->lpVtbl->SetViewport(p,a)\n#define IDirect3DDevice8_GetViewport(p,a)                          (p)->lpVtbl->GetViewport(p,a)\n#define IDirect3DDevice8_SetMaterial(p,a)                          (p)->lpVtbl->SetMaterial(p,a)\n#define IDirect3DDevice8_GetMaterial(p,a)                          (p)->lpVtbl->GetMaterial(p,a)\n#define IDirect3DDevice8_SetLight(p,a,b)                           (p)->lpVtbl->SetLight(p,a,b)\n#define IDirect3DDevice8_GetLight(p,a,b)                           (p)->lpVtbl->GetLight(p,a,b)\n#define IDirect3DDevice8_LightEnable(p,a,b)                        (p)->lpVtbl->LightEnable(p,a,b)\n#define IDirect3DDevice8_GetLightEnable(p,a,b)                     (p)->lpVtbl->GetLightEnable(p,a,b)\n#define IDirect3DDevice8_SetClipPlane(p,a,b)                       (p)->lpVtbl->SetClipPlane(p,a,b)\n#define IDirect3DDevice8_GetClipPlane(p,a,b)                       (p)->lpVtbl->GetClipPlane(p,a,b)\n#define IDirect3DDevice8_SetRenderState(p,a,b)                     (p)->lpVtbl->SetRenderState(p,a,b)\n#define IDirect3DDevice8_GetRenderState(p,a,b)                     (p)->lpVtbl->GetRenderState(p,a,b)\n#define IDirect3DDevice8_BeginStateBlock(p)                        (p)->lpVtbl->BeginStateBlock(p)\n#define IDirect3DDevice8_EndStateBlock(p,a)                        (p)->lpVtbl->EndStateBlock(p,a)\n#define IDirect3DDevice8_ApplyStateBlock(p,a)                      (p)->lpVtbl->ApplyStateBlock(p,a)\n#define IDirect3DDevice8_CaptureStateBlock(p,a)                    (p)->lpVtbl->CaptureStateBlock(p,a)\n#define IDirect3DDevice8_DeleteStateBlock(p,a)                     (p)->lpVtbl->DeleteStateBlock(p,a)\n#define IDirect3DDevice8_CreateStateBlock(p,a,b)                   (p)->lpVtbl->CreateStateBlock(p,a,b)\n#define IDirect3DDevice8_SetClipStatus(p,a)                        (p)->lpVtbl->SetClipStatus(p,a)\n#define IDirect3DDevice8_GetClipStatus(p,a)                        (p)->lpVtbl->GetClipStatus(p,a)\n#define IDirect3DDevice8_GetTexture(p,a,b)                         (p)->lpVtbl->GetTexture(p,a,b)\n#define IDirect3DDevice8_SetTexture(p,a,b)                         (p)->lpVtbl->SetTexture(p,a,b)\n#define IDirect3DDevice8_GetTextureStageState(p,a,b,c)             (p)->lpVtbl->GetTextureStageState(p,a,b,c)\n#define IDirect3DDevice8_SetTextureStageState(p,a,b,c)             (p)->lpVtbl->SetTextureStageState(p,a,b,c)\n#define IDirect3DDevice8_ValidateDevice(p,a)                       (p)->lpVtbl->ValidateDevice(p,a)\n#define IDirect3DDevice8_GetInfo(p,a,b,c)                          (p)->lpVtbl->GetInfo(p,a,b,c)\n#define IDirect3DDevice8_SetPaletteEntries(p,a,b)                  (p)->lpVtbl->SetPaletteEntries(p,a,b)\n#define IDirect3DDevice8_GetPaletteEntries(p,a,b)                  (p)->lpVtbl->GetPaletteEntries(p,a,b)\n#define IDirect3DDevice8_SetCurrentTexturePalette(p,a)             (p)->lpVtbl->SetCurrentTexturePalette(p,a)\n#define IDirect3DDevice8_GetCurrentTexturePalette(p,a)             (p)->lpVtbl->GetCurrentTexturePalette(p,a)\n#define IDirect3DDevice8_DrawPrimitive(p,a,b,c)                    (p)->lpVtbl->DrawPrimitive(p,a,b,c)\n#define IDirect3DDevice8_DrawIndexedPrimitive(p,a,b,c,d,e)         (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e)\n#define IDirect3DDevice8_DrawPrimitiveUP(p,a,b,c,d)                (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)\n#define IDirect3DDevice8_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)\n#define IDirect3DDevice8_ProcessVertices(p,a,b,c,d,e)              (p)->lpVtbl->processVertices(p,a,b,c,d,e)\n#define IDirect3DDevice8_CreateVertexShader(p,a,b,c,d)             (p)->lpVtbl->CreateVertexShader(p,a,b,c,d)\n#define IDirect3DDevice8_SetVertexShader(p,a)                      (p)->lpVtbl->SetVertexShader(p,a)\n#define IDirect3DDevice8_GetVertexShader(p,a)                      (p)->lpVtbl->GetVertexShader(p,a)\n#define IDirect3DDevice8_DeleteVertexShader(p,a)                   (p)->lpVtbl->DeleteVertexShader(p,a)\n#define IDirect3DDevice8_SetVertexShaderConstant(p,a,b,c)          (p)->lpVtbl->SetVertexShaderConstant(p,a,b,c)\n#define IDirect3DDevice8_GetVertexShaderConstant(p,a,b,c)          (p)->lpVtbl->GetVertexShaderConstant(p,a,b,c)\n#define IDirect3DDevice8_GetVertexShaderDeclaration(p,a,b,c)       (p)->lpVtbl->GetVertexShaderDeclaration(p,a,b,c)\n#define IDirect3DDevice8_GetVertexShaderFunction(p,a,b,c)          (p)->lpVtbl->GetVertexShaderFunction(p,a,b,c)\n#define IDirect3DDevice8_SetStreamSource(p,a,b,c)                  (p)->lpVtbl->SetStreamSource(p,a,b,c)\n#define IDirect3DDevice8_GetStreamSource(p,a,b,c)                  (p)->lpVtbl->GetStreamSource(p,a,b,c)\n#define IDirect3DDevice8_SetIndices(p,a,b)                         (p)->lpVtbl->SetIndices(p,a,b)\n#define IDirect3DDevice8_GetIndices(p,a,b)                         (p)->lpVtbl->GetIndices(p,a,b)\n#define IDirect3DDevice8_CreatePixelShader(p,a,b)                  (p)->lpVtbl->CreatePixelShader(p,a,b)\n#define IDirect3DDevice8_SetPixelShader(p,a)                       (p)->lpVtbl->SetPixelShader(p,a)\n#define IDirect3DDevice8_GetPixelShader(p,a)                       (p)->lpVtbl->GetPixelShader(p,a)\n#define IDirect3DDevice8_DeletePixelShader(p,a)                    (p)->lpVtbl->DeletePixelShader(p,a)\n#define IDirect3DDevice8_SetPixelShaderConstant(p,a,b,c)           (p)->lpVtbl->SetPixelShaderConstant(p,a,b,c)\n#define IDirect3DDevice8_GetPixelShaderConstant(p,a,b,c)           (p)->lpVtbl->GetPixelShaderConstant(p,a,b,c)\n#define IDirect3DDevice8_GetPixelShaderFunction(p,a,b,c)           (p)->lpVtbl->GetPixelShaderFunction(p,a,b,c)\n#define IDirect3DDevice8_DrawRectPatch(p,a,b,c)                    (p)->lpVtbl->DrawRectPatch(p,a,b,c)\n#define IDirect3DDevice8_DrawTriPatch(p,a,b,c)                     (p)->lpVtbl->DrawTriPatch(p,a,b,c)\n#define IDirect3DDevice8_DeletePatch(p,a)                          (p)->lpVtbl->DeletePatch(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DDevice8_QueryInterface(p,a,b)                     (p)->QueryInterface(a,b)\n#define IDirect3DDevice8_AddRef(p)                                 (p)->AddRef()\n#define IDirect3DDevice8_Release(p)                                (p)->Release()\n/*** IDirect3DDevice8 methods ***/\n#define IDirect3DDevice8_TestCooperativeLevel(p)                   (p)->TestCooperativeLevel()\n#define IDirect3DDevice8_GetAvailableTextureMem(p)                 (p)->GetAvailableTextureMem()\n#define IDirect3DDevice8_ResourceManagerDiscardBytes(p,a)          (p)->ResourceManagerDiscardBytes(a)\n#define IDirect3DDevice8_GetDirect3D(p,a)                          (p)->GetDirect3D(a)\n#define IDirect3DDevice8_GetDeviceCaps(p,a)                        (p)->GetDeviceCaps(a)\n#define IDirect3DDevice8_GetDisplayMode(p,a)                       (p)->GetDisplayMode(a)\n#define IDirect3DDevice8_GetCreationParameters(p,a)                (p)->GetCreationParameters(a)\n#define IDirect3DDevice8_SetCursorProperties(p,a,b,c)              (p)->SetCursorProperties(a,b,c)\n#define IDirect3DDevice8_SetCursorPosition(p,a,b,c)                (p)->SetCursorPosition(a,b,c)\n#define IDirect3DDevice8_ShowCursor(p,a)                           (p)->ShowCursor(a)\n#define IDirect3DDevice8_CreateAdditionalSwapChain(p,a,b)          (p)->CreateAdditionalSwapChain(a,b)\n#define IDirect3DDevice8_Reset(p,a)                                (p)->Reset(a)\n#define IDirect3DDevice8_Present(p,a,b,c,d)                        (p)->Present(a,b,c,d)\n#define IDirect3DDevice8_GetBackBuffer(p,a,b,c)                    (p)->GetBackBuffer(a,b,c)\n#define IDirect3DDevice8_GetRasterStatus(p,a)                      (p)->GetRasterStatus(a)\n#define IDirect3DDevice8_SetGammaRamp(p,a,b)                       (p)->SetGammaRamp(a,b)\n#define IDirect3DDevice8_GetGammaRamp(p,a)                         (p)->GetGammaRamp(a)\n#define IDirect3DDevice8_CreateTexture(p,a,b,c,d,e,f,g)            (p)->CreateTexture(a,b,c,d,e,f,g)\n#define IDirect3DDevice8_CreateVolumeTexture(p,a,b,c,d,e,f,g,h)    (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h)\n#define IDirect3DDevice8_CreateCubeTexture(p,a,b,c,d,e,f)          (p)->CreateCubeTexture(a,b,c,d,e,f)\n#define IDirect3DDevice8_CreateVertexBuffer(p,a,b,c,d,e)           (p)->CreateVertexBuffer(a,b,c,d,e)\n#define IDirect3DDevice8_CreateIndexBuffer(p,a,b,c,d,e)            (p)->CreateIndexBuffer(a,b,c,d,e)\n#define IDirect3DDevice8_CreateRenderTarget(p,a,b,c,d,e,f)         (p)->CreateRenderTarget(a,b,c,d,e,f)\n#define IDirect3DDevice8_CreateDepthStencilSurface(p,a,b,c,d,e)    (p)->CreateDepthStencilSurface(a,b,c,d,e)\n#define IDirect3DDevice8_CreateImageSurface(p,a,b,c,d)             (p)->CreateImageSurface(a,b,c,d)\n#define IDirect3DDevice8_CopyRects(p,a,b,c,d,e)                    (p)->CopyRects(a,b,c,d,e)\n#define IDirect3DDevice8_UpdateTexture(p,a,b)                      (p)->UpdateTexture(a,b)\n#define IDirect3DDevice8_GetFrontBuffer(p,a)                       (p)->GetFrontBuffer(a)\n#define IDirect3DDevice8_SetRenderTarget(p,a,b)                    (p)->SetRenderTarget(a,b)\n#define IDirect3DDevice8_GetRenderTarget(p,a)                      (p)->GetRenderTarget(a)\n#define IDirect3DDevice8_GetDepthStencilSurface(p,a)               (p)->GetDepthStencilSurface(a)\n#define IDirect3DDevice8_BeginScene(p)                             (p)->BeginScene()\n#define IDirect3DDevice8_EndScene(p)                               (p)->EndScene()\n#define IDirect3DDevice8_Clear(p,a,b,c,d,e,f)                      (p)->Clear(a,b,c,d,e,f)\n#define IDirect3DDevice8_SetTransform(p,a,b)                       (p)->SetTransform(a,b)\n#define IDirect3DDevice8_GetTransform(p,a,b)                       (p)->GetTransform(a,b)\n#define IDirect3DDevice8_MultiplyTransform(p,a,b)                  (p)->MultiplyTransform(a,b)\n#define IDirect3DDevice8_SetViewport(p,a)                          (p)->SetViewport(a)\n#define IDirect3DDevice8_GetViewport(p,a)                          (p)->GetViewport(a)\n#define IDirect3DDevice8_SetMaterial(p,a)                          (p)->SetMaterial(a)\n#define IDirect3DDevice8_GetMaterial(p,a)                          (p)->GetMaterial(a)\n#define IDirect3DDevice8_SetLight(p,a,b)                           (p)->SetLight(a,b)\n#define IDirect3DDevice8_GetLight(p,a,b)                           (p)->GetLight(a,b)\n#define IDirect3DDevice8_LightEnable(p,a,b)                        (p)->LightEnable(a,b)\n#define IDirect3DDevice8_GetLightEnable(p,a,b)                     (p)->GetLightEnable(a,b)\n#define IDirect3DDevice8_SetClipPlane(p,a,b)                       (p)->SetClipPlane(a,b)\n#define IDirect3DDevice8_GetClipPlane(p,a,b)                       (p)->GetClipPlane(a,b)\n#define IDirect3DDevice8_SetRenderState(p,a,b)                     (p)->SetRenderState(a,b)\n#define IDirect3DDevice8_GetRenderState(p,a,b)                     (p)->GetRenderState(a,b)\n#define IDirect3DDevice8_BeginStateBlock(p)                        (p)->BeginStateBlock()\n#define IDirect3DDevice8_EndStateBlock(p,a)                        (p)->EndStateBlock(a)\n#define IDirect3DDevice8_ApplyStateBlock(p,a)                      (p)->ApplyStateBlock(a)\n#define IDirect3DDevice8_CaptureStateBlock(p,a)                    (p)->CaptureStateBlock(a)\n#define IDirect3DDevice8_DeleteStateBlock(p,a)                     (p)->DeleteStateBlock(a)\n#define IDirect3DDevice8_CreateStateBlock(p,a,b)                   (p)->CreateStateBlock(a,b)\n#define IDirect3DDevice8_SetClipStatus(p,a)                        (p)->SetClipStatus(a)\n#define IDirect3DDevice8_GetClipStatus(p,a)                        (p)->GetClipStatus(a)\n#define IDirect3DDevice8_GetTexture(p,a,b)                         (p)->GetTexture(a,b)\n#define IDirect3DDevice8_SetTexture(p,a,b)                         (p)->SetTexture(a,b)\n#define IDirect3DDevice8_GetTextureStageState(p,a,b,c)             (p)->GetTextureStageState(a,b,c)\n#define IDirect3DDevice8_SetTextureStageState(p,a,b,c)             (p)->SetTextureStageState(a,b,c)\n#define IDirect3DDevice8_ValidateDevice(p,a)                       (p)->ValidateDevice(a)\n#define IDirect3DDevice8_GetInfo(p,a,b,c)                          (p)->GetInfo(a,b,c)\n#define IDirect3DDevice8_SetPaletteEntries(p,a,b)                  (p)->SetPaletteEntries(a,b)\n#define IDirect3DDevice8_GetPaletteEntries(p,a,b)                  (p)->GetPaletteEntries(a,b)\n#define IDirect3DDevice8_SetCurrentTexturePalette(p,a)             (p)->SetCurrentTexturePalette(a)\n#define IDirect3DDevice8_GetCurrentTexturePalette(p,a)             (p)->GetCurrentTexturePalette(a)\n#define IDirect3DDevice8_DrawPrimitive(p,a,b,c)                    (p)->DrawPrimitive(a,b,c)\n#define IDirect3DDevice8_DrawIndexedPrimitive(p,a,b,c,d,e)         (p)->DrawIndexedPrimitive(a,b,c,d,e)\n#define IDirect3DDevice8_DrawPrimitiveUP(p,a,b,c,d)                (p)->DrawPrimitiveUP(a,b,c,d)\n#define IDirect3DDevice8_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h)\n#define IDirect3DDevice8_ProcessVertices(p,a,b,c,d,e)              (p)->processVertices(a,b,c,d,e)\n#define IDirect3DDevice8_CreateVertexShader(p,a,b,c,d)             (p)->CreateVertexShader(a,b,c,d)\n#define IDirect3DDevice8_SetVertexShader(p,a)                      (p)->SetVertexShader(a)\n#define IDirect3DDevice8_GetVertexShader(p,a)                      (p)->GetVertexShader(a)\n#define IDirect3DDevice8_DeleteVertexShader(p,a)                   (p)->DeleteVertexShader(a)\n#define IDirect3DDevice8_SetVertexShaderConstant(p,a,b,c)          (p)->SetVertexShaderConstant(a,b,c)\n#define IDirect3DDevice8_GetVertexShaderConstant(p,a,b,c)          (p)->GetVertexShaderConstant(a,b,c)\n#define IDirect3DDevice8_GetVertexShaderDeclaration(p,a,b,c)       (p)->GetVertexShaderDeclaration(a,b,c)\n#define IDirect3DDevice8_GetVertexShaderFunction(p,a,b,c)          (p)->GetVertexShaderFunction(a,b,c)\n#define IDirect3DDevice8_SetStreamSource(p,a,b,c)                  (p)->SetStreamSource(a,b,c)\n#define IDirect3DDevice8_GetStreamSource(p,a,b,c)                  (p)->GetStreamSource(a,b,c)\n#define IDirect3DDevice8_SetIndices(p,a,b)                         (p)->SetIndices(a,b)\n#define IDirect3DDevice8_GetIndices(p,a,b)                         (p)->GetIndices(a,b)\n#define IDirect3DDevice8_CreatePixelShader(p,a,b)                  (p)->CreatePixelShader(a,b)\n#define IDirect3DDevice8_SetPixelShader(p,a)                       (p)->SetPixelShader(a)\n#define IDirect3DDevice8_GetPixelShader(p,a)                       (p)->GetPixelShader(a)\n#define IDirect3DDevice8_DeletePixelShader(p,a)                    (p)->DeletePixelShader(a)\n#define IDirect3DDevice8_SetPixelShaderConstant(p,a,b,c)           (p)->SetPixelShaderConstant(a,b,c)\n#define IDirect3DDevice8_GetPixelShaderConstant(p,a,b,c)           (p)->GetPixelShaderConstant(a,b,c)\n#define IDirect3DDevice8_GetPixelShaderFunction(p,a,b,c)           (p)->GetPixelShaderFunction(a,b,c)\n#define IDirect3DDevice8_DrawRectPatch(p,a,b,c)                    (p)->DrawRectPatch(a,b,c)\n#define IDirect3DDevice8_DrawTriPatch(p,a,b,c)                     (p)->DrawTriPatch(a,b,c)\n#define IDirect3DDevice8_DeletePatch(p,a)                          (p)->DeletePatch(a)\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif  /* defined(__cplusplus) */\n\n/* Define the main entrypoint as well */\nIDirect3D8* WINAPI Direct3DCreate8(UINT SDKVersion);\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif /* __WINE_D3D8_H */\n"
  },
  {
    "path": "wine/windows/d3d8caps.h",
    "content": "/*\n * Copyright (C) 2002 Jason Edmeades\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_D3D8CAPS_H\n#define __WINE_D3D8CAPS_H\n\n#ifdef __i386__\n#include <pshpack4.h>\n#endif\n\n/*\n * Definitions\n */\n\n#define D3DCAPS_READ_SCANLINE 0x20000\n\n#define D3DCURSORCAPS_COLOR   1\n#define D3DCURSORCAPS_LOWRES  2\n\n#define D3DDEVCAPS_EXECUTESYSTEMMEMORY     0x0000010\n#define D3DDEVCAPS_EXECUTEVIDEOMEMORY      0x0000020\n#define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY    0x0000040\n#define D3DDEVCAPS_TLVERTEXVIDEOMEMORY     0x0000080\n#define D3DDEVCAPS_TEXTURESYSTEMMEMORY     0x0000100\n#define D3DDEVCAPS_TEXTUREVIDEOMEMORY      0x0000200\n#define D3DDEVCAPS_DRAWPRIMTLVERTEX        0x0000400\n#define D3DDEVCAPS_CANRENDERAFTERFLIP      0x0000800\n#define D3DDEVCAPS_TEXTURENONLOCALVIDMEM   0x0001000\n#define D3DDEVCAPS_DRAWPRIMITIVES2         0x0002000\n#define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x0004000\n#define D3DDEVCAPS_DRAWPRIMITIVES2EX       0x0008000\n#define D3DDEVCAPS_HWTRANSFORMANDLIGHT     0x0010000\n#define D3DDEVCAPS_CANBLTSYSTONONLOCAL     0x0020000\n#define D3DDEVCAPS_HWRASTERIZATION         0x0080000\n#define D3DDEVCAPS_PUREDEVICE              0x0100000\n#define D3DDEVCAPS_QUINTICRTPATCHES        0x0200000\n#define D3DDEVCAPS_RTPATCHES               0x0400000\n#define D3DDEVCAPS_RTPATCHHANDLEZERO       0x0800000\n#define D3DDEVCAPS_NPATCHES                0x1000000\n\n#define D3DFVFCAPS_TEXCOORDCOUNTMASK  0x00FFFF\n#define D3DFVFCAPS_DONOTSTRIPELEMENTS 0x080000\n#define D3DFVFCAPS_PSIZE              0x100000\n\n#define D3DLINECAPS_TEXTURE           0x01\n#define D3DLINECAPS_ZTEST             0x02\n#define D3DLINECAPS_BLEND             0x04\n#define D3DLINECAPS_ALPHACMP          0x08\n#define D3DLINECAPS_FOG               0x10\n\n#define D3DPBLENDCAPS_ZERO            0x0001\n#define D3DPBLENDCAPS_ONE             0x0002\n#define D3DPBLENDCAPS_SRCCOLOR        0x0004\n#define D3DPBLENDCAPS_INVSRCCOLOR     0x0008\n#define D3DPBLENDCAPS_SRCALPHA        0x0010\n#define D3DPBLENDCAPS_INVSRCALPHA     0x0020\n#define D3DPBLENDCAPS_DESTALPHA       0x0040\n#define D3DPBLENDCAPS_INVDESTALPHA    0x0080\n#define D3DPBLENDCAPS_DESTCOLOR       0x0100\n#define D3DPBLENDCAPS_INVDESTCOLOR    0x0200\n#define D3DPBLENDCAPS_SRCALPHASAT     0x0400\n#define D3DPBLENDCAPS_BOTHSRCALPHA    0x0800\n#define D3DPBLENDCAPS_BOTHINVSRCALPHA 0x1000\n\n#define D3DPCMPCAPS_NEVER        0x01\n#define D3DPCMPCAPS_LESS         0x02\n#define D3DPCMPCAPS_EQUAL        0x04\n#define D3DPCMPCAPS_LESSEQUAL    0x08\n#define D3DPCMPCAPS_GREATER      0x10\n#define D3DPCMPCAPS_NOTEQUAL     0x20\n#define D3DPCMPCAPS_GREATEREQUAL 0x40\n#define D3DPCMPCAPS_ALWAYS       0x80\n\n#define D3DPMISCCAPS_MASKZ                 __MSABI_LONG(0x00000002)\n#define D3DPMISCCAPS_LINEPATTERNREP        __MSABI_LONG(0x00000004)\n#define D3DPMISCCAPS_CULLNONE              __MSABI_LONG(0x00000010)\n#define D3DPMISCCAPS_CULLCW                __MSABI_LONG(0x00000020)\n#define D3DPMISCCAPS_CULLCCW               __MSABI_LONG(0x00000040)\n#define D3DPMISCCAPS_COLORWRITEENABLE      __MSABI_LONG(0x00000080)\n#define D3DPMISCCAPS_CLIPPLANESCALEDPOINTS __MSABI_LONG(0x00000100)\n#define D3DPMISCCAPS_CLIPTLVERTS           __MSABI_LONG(0x00000200)\n#define D3DPMISCCAPS_TSSARGTEMP            __MSABI_LONG(0x00000400)\n#define D3DPMISCCAPS_BLENDOP               __MSABI_LONG(0x00000800)\n#define D3DPMISCCAPS_NULLREFERENCE         __MSABI_LONG(0x00001000)\n\n#define D3DPRASTERCAPS_DITHER                     0x00000001\n#define D3DPRASTERCAPS_PAT                        0x00000008\n#define D3DPRASTERCAPS_ZTEST                      0x00000010\n#define D3DPRASTERCAPS_FOGVERTEX                  0x00000080\n#define D3DPRASTERCAPS_FOGTABLE                   0x00000100\n#define D3DPRASTERCAPS_ANTIALIASEDGES             0x00001000\n#define D3DPRASTERCAPS_MIPMAPLODBIAS              0x00002000\n#define D3DPRASTERCAPS_ZBIAS                      0x00004000\n#define D3DPRASTERCAPS_ZBUFFERLESSHSR             0x00008000\n#define D3DPRASTERCAPS_FOGRANGE                   0x00010000\n#define D3DPRASTERCAPS_ANISOTROPY                 0x00020000\n#define D3DPRASTERCAPS_WBUFFER                    0x00040000\n#define D3DPRASTERCAPS_WFOG                       0x00100000\n#define D3DPRASTERCAPS_ZFOG                       0x00200000\n#define D3DPRASTERCAPS_COLORPERSPECTIVE           0x00400000\n#define D3DPRASTERCAPS_STRETCHBLTMULTISAMPLE      0x00800000\n\n#define D3DPRESENT_INTERVAL_DEFAULT               0x00000000\n#define D3DPRESENT_INTERVAL_ONE                   0x00000001\n#define D3DPRESENT_INTERVAL_TWO                   0x00000002\n#define D3DPRESENT_INTERVAL_THREE                 0x00000004\n#define D3DPRESENT_INTERVAL_FOUR                  0x00000008\n#define D3DPRESENT_INTERVAL_IMMEDIATE             0x80000000\n\n#define D3DPSHADECAPS_COLORGOURAUDRGB             0x00008\n#define D3DPSHADECAPS_SPECULARGOURAUDRGB          0x00200\n#define D3DPSHADECAPS_ALPHAGOURAUDBLEND           0x04000\n#define D3DPSHADECAPS_FOGGOURAUD                  0x80000\n\n#define D3DPTADDRESSCAPS_WRAP                     0x01\n#define D3DPTADDRESSCAPS_MIRROR                   0x02\n#define D3DPTADDRESSCAPS_CLAMP                    0x04\n#define D3DPTADDRESSCAPS_BORDER                   0x08\n#define D3DPTADDRESSCAPS_INDEPENDENTUV            0x10\n#define D3DPTADDRESSCAPS_MIRRORONCE               0x20\n\n#define D3DPTEXTURECAPS_PERSPECTIVE              0x00001\n#define D3DPTEXTURECAPS_POW2                     0x00002\n#define D3DPTEXTURECAPS_ALPHA                    0x00004\n#define D3DPTEXTURECAPS_SQUAREONLY               0x00020\n#define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 0x00040\n#define D3DPTEXTURECAPS_ALPHAPALETTE             0x00080\n#define D3DPTEXTURECAPS_NONPOW2CONDITIONAL       0x00100\n#define D3DPTEXTURECAPS_PROJECTED                0x00400\n#define D3DPTEXTURECAPS_CUBEMAP                  0x00800\n#define D3DPTEXTURECAPS_VOLUMEMAP                0x02000\n#define D3DPTEXTURECAPS_MIPMAP                   0x04000\n#define D3DPTEXTURECAPS_MIPVOLUMEMAP             0x08000\n#define D3DPTEXTURECAPS_MIPCUBEMAP               0x10000\n#define D3DPTEXTURECAPS_CUBEMAP_POW2             0x20000\n#define D3DPTEXTURECAPS_VOLUMEMAP_POW2           0x40000\n\n#define D3DPTFILTERCAPS_MINFPOINT                0x00000100\n#define D3DPTFILTERCAPS_MINFLINEAR               0x00000200\n#define D3DPTFILTERCAPS_MINFANISOTROPIC          0x00000400\n#define D3DPTFILTERCAPS_MIPFPOINT                0x00010000\n#define D3DPTFILTERCAPS_MIPFLINEAR               0x00020000\n#define D3DPTFILTERCAPS_MAGFPOINT                0x01000000\n#define D3DPTFILTERCAPS_MAGFLINEAR               0x02000000\n#define D3DPTFILTERCAPS_MAGFANISOTROPIC          0x04000000\n#define D3DPTFILTERCAPS_MAGFAFLATCUBIC           0x08000000\n#define D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC        0x10000000\n\n#define D3DSTENCILCAPS_KEEP                      0x01\n#define D3DSTENCILCAPS_ZERO                      0x02\n#define D3DSTENCILCAPS_REPLACE                   0x04\n#define D3DSTENCILCAPS_INCRSAT                   0x08\n#define D3DSTENCILCAPS_DECRSAT                   0x10\n#define D3DSTENCILCAPS_INVERT                    0x20\n#define D3DSTENCILCAPS_INCR                      0x40\n#define D3DSTENCILCAPS_DECR                      0x80\n\n#define D3DTEXOPCAPS_DISABLE                     0x0000001\n#define D3DTEXOPCAPS_SELECTARG1                  0x0000002\n#define D3DTEXOPCAPS_SELECTARG2                  0x0000004\n#define D3DTEXOPCAPS_MODULATE                    0x0000008\n#define D3DTEXOPCAPS_MODULATE2X                  0x0000010\n#define D3DTEXOPCAPS_MODULATE4X                  0x0000020\n#define D3DTEXOPCAPS_ADD                         0x0000040\n#define D3DTEXOPCAPS_ADDSIGNED                   0x0000080\n#define D3DTEXOPCAPS_ADDSIGNED2X                 0x0000100\n#define D3DTEXOPCAPS_SUBTRACT                    0x0000200\n#define D3DTEXOPCAPS_ADDSMOOTH                   0x0000400\n#define D3DTEXOPCAPS_BLENDDIFFUSEALPHA           0x0000800\n#define D3DTEXOPCAPS_BLENDTEXTUREALPHA           0x0001000\n#define D3DTEXOPCAPS_BLENDFACTORALPHA            0x0002000\n#define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM         0x0004000\n#define D3DTEXOPCAPS_BLENDCURRENTALPHA           0x0008000\n#define D3DTEXOPCAPS_PREMODULATE                 0x0010000\n#define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR      0x0020000\n#define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA      0x0040000\n#define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR   0x0080000\n#define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA   0x0100000\n#define D3DTEXOPCAPS_BUMPENVMAP                  0x0200000\n#define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE         0x0400000\n#define D3DTEXOPCAPS_DOTPRODUCT3                 0x0800000\n#define D3DTEXOPCAPS_MULTIPLYADD                 0x1000000\n#define D3DTEXOPCAPS_LERP                        0x2000000\n\n#define D3DVTXPCAPS_TEXGEN                       __MSABI_LONG(0x00000001)\n#define D3DVTXPCAPS_MATERIALSOURCE7              __MSABI_LONG(0x00000002)\n#define D3DVTXPCAPS_DIRECTIONALLIGHTS            __MSABI_LONG(0x00000008)\n#define D3DVTXPCAPS_POSITIONALLIGHTS             __MSABI_LONG(0x00000010)\n#define D3DVTXPCAPS_LOCALVIEWER                  __MSABI_LONG(0x00000020)\n#define D3DVTXPCAPS_TWEENING                     __MSABI_LONG(0x00000040)\n#define D3DVTXPCAPS_NO_VSDT_UBYTE4               __MSABI_LONG(0x00000080)\n\n#define D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD  0x00000020\n#define D3DCAPS3_RESERVED                          0x8000001f\n\n#define D3DCAPS2_CANCALIBRATEGAMMA                 0x0100000\n#define D3DCAPS2_CANRENDERWINDOWED                 0x0080000\n#define D3DCAPS2_CANMANAGERESOURCE                 0x10000000\n#define D3DCAPS2_DYNAMICTEXTURES                   0x20000000\n#define D3DCAPS2_FULLSCREENGAMMA                   0x0020000\n#define D3DCAPS2_NO2DDURING3DSCENE                 0x0000002\n#define D3DCAPS2_RESERVED                          0x2000000\n\n/*\n * The d3dcaps8 structure\n */\ntypedef struct _D3DCAPS8 {\n    D3DDEVTYPE          DeviceType;\n    UINT                AdapterOrdinal;\n\n    DWORD               Caps;\n    DWORD               Caps2;\n    DWORD               Caps3;\n    DWORD               PresentationIntervals;\n\n    DWORD               CursorCaps;\n\n    DWORD               DevCaps;\n\n    DWORD               PrimitiveMiscCaps;\n    DWORD               RasterCaps;\n    DWORD               ZCmpCaps;\n    DWORD               SrcBlendCaps;\n    DWORD               DestBlendCaps;\n    DWORD               AlphaCmpCaps;\n    DWORD               ShadeCaps;\n    DWORD               TextureCaps;\n    DWORD               TextureFilterCaps;\n    DWORD               CubeTextureFilterCaps;\n    DWORD               VolumeTextureFilterCaps;\n    DWORD               TextureAddressCaps;\n    DWORD               VolumeTextureAddressCaps;\n\n    DWORD               LineCaps;\n\n    DWORD               MaxTextureWidth, MaxTextureHeight;\n    DWORD               MaxVolumeExtent;\n\n    DWORD               MaxTextureRepeat;\n    DWORD               MaxTextureAspectRatio;\n    DWORD               MaxAnisotropy;\n    float               MaxVertexW;\n\n    float               GuardBandLeft;\n    float               GuardBandTop;\n    float               GuardBandRight;\n    float               GuardBandBottom;\n\n    float               ExtentsAdjust;\n    DWORD               StencilCaps;\n\n    DWORD               FVFCaps;\n    DWORD               TextureOpCaps;\n    DWORD               MaxTextureBlendStages;\n    DWORD               MaxSimultaneousTextures;\n\n    DWORD               VertexProcessingCaps;\n    DWORD               MaxActiveLights;\n    DWORD               MaxUserClipPlanes;\n    DWORD               MaxVertexBlendMatrices;\n    DWORD               MaxVertexBlendMatrixIndex;\n\n    float               MaxPointSize;\n\n    DWORD               MaxPrimitiveCount;\n    DWORD               MaxVertexIndex;\n    DWORD               MaxStreams;\n    DWORD               MaxStreamStride;\n\n    DWORD               VertexShaderVersion;\n    DWORD               MaxVertexShaderConst;\n\n    DWORD               PixelShaderVersion;\n    float               MaxPixelShaderValue;\n} D3DCAPS8;\n\n#ifdef __i386__\n#include <poppack.h>\n#endif\n\n#endif  /* __WINE_D3D8CAPS_H */\n"
  },
  {
    "path": "wine/windows/d3d8types.h",
    "content": "/*\n * Copyright (C) 2002 Jason Edmeades\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_D3D8TYPES_H\n#define __WINE_D3D8TYPES_H\n\n#ifdef __i386__\n#include <pshpack4.h>\n#endif\n\n/*****************************************************************************\n * Direct 3D v8 #defines\n */\n\n#define D3DCLEAR_TARGET   1\n#define D3DCLEAR_ZBUFFER  2\n#define D3DCLEAR_STENCIL  4\n\n#define D3DCLIPPLANE0 (1 << 0)\n#define D3DCLIPPLANE1 (1 << 1)\n#define D3DCLIPPLANE2 (1 << 2)\n#define D3DCLIPPLANE3 (1 << 3)\n#define D3DCLIPPLANE4 (1 << 4)\n#define D3DCLIPPLANE5 (1 << 5)\n\n#define D3DCOLOR_ARGB(a,r,g,b)        ((D3DCOLOR)((((a)&0xffu)<<24)|(((r)&0xffu)<<16)|(((g)&0xffu)<<8)|((b)&0xffu)))\n#define D3DCOLOR_COLORVALUE(r,g,b,a)  D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f))\n#define D3DCOLOR_RGBA(r,g,b,a)        D3DCOLOR_ARGB(a,r,g,b)\n#define D3DCOLOR_XRGB(r,g,b)          D3DCOLOR_ARGB(0xff,r,g,b)\n\n#define D3DCS_LEFT                 0x001\n#define D3DCS_RIGHT                0x002\n#define D3DCS_TOP                  0x004\n#define D3DCS_BOTTOM               0x008\n#define D3DCS_FRONT                0x010\n#define D3DCS_BACK                 0x020\n#define D3DCS_PLANE0               0x040\n#define D3DCS_PLANE1               0x080\n#define D3DCS_PLANE2               0x100\n#define D3DCS_PLANE3               0x200\n#define D3DCS_PLANE4               0x400\n#define D3DCS_PLANE5               0x800\n#define D3DCS_ALL                  0xFFF\n\n#define D3DFVF_TEXTUREFORMAT1 3\n#define D3DFVF_TEXTUREFORMAT2 0\n#define D3DFVF_TEXTUREFORMAT3 1\n#define D3DFVF_TEXTUREFORMAT4 2\n#define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))\n#define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)\n#define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))\n#define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))\n\n#define D3DLOCK_READONLY           0x0010\n#define D3DLOCK_NOSYSLOCK          0x0800\n#define D3DLOCK_NOOVERWRITE        0x1000\n#define D3DLOCK_DISCARD            0x2000\n#define D3DLOCK_NO_DIRTY_UPDATE    0x8000\n\n#define D3DMAXUSERCLIPPLANES       32\n\n#define D3DRENDERSTATE_WRAPBIAS    0x80\n\n#define D3DTSS_TCI_PASSTHRU                       0x00000\n#define D3DTSS_TCI_CAMERASPACENORMAL              0x10000\n#define D3DTSS_TCI_CAMERASPACEPOSITION            0x20000\n#define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR    0x30000\n\n\n#define D3DTS_WORLD  D3DTS_WORLDMATRIX(0)\n#define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1)\n#define D3DTS_WORLD2 D3DTS_WORLDMATRIX(2)\n#define D3DTS_WORLD3 D3DTS_WORLDMATRIX(3)\n#define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256)\n\n#define D3DUSAGE_RENDERTARGET       0x01\n#define D3DUSAGE_DEPTHSTENCIL       0x02\n#define D3DUSAGE_WRITEONLY          0x08\n#define D3DUSAGE_SOFTWAREPROCESSING 0x10\n#define D3DUSAGE_DONOTCLIP          0x20\n#define D3DUSAGE_POINTS             0x40\n#define D3DUSAGE_RTPATCHES          0x80\n#define D3DUSAGE_NPATCHES           0x100\n#define D3DUSAGE_DYNAMIC            0x200\n\n#define D3DWRAP_U        1\n#define D3DWRAP_V        2\n#define D3DWRAP_W        4\n#define D3DWRAPCOORD_0   1\n#define D3DWRAPCOORD_1   2\n#define D3DWRAPCOORD_2   4\n#define D3DWRAPCOORD_3   8\n\n#define MAX_DEVICE_IDENTIFIER_STRING        512\n\n#define D3DFVF_RESERVED0           0x0001\n#define D3DFVF_POSITION_MASK       0x000E\n#define D3DFVF_XYZ                 0x0002\n#define D3DFVF_XYZRHW              0x0004\n#define D3DFVF_XYZB1               0x0006\n#define D3DFVF_XYZB2               0x0008\n#define D3DFVF_XYZB3               0x000a\n#define D3DFVF_XYZB4               0x000c\n#define D3DFVF_XYZB5               0x000e\n#define D3DFVF_NORMAL              0x0010\n#define D3DFVF_PSIZE               0x0020\n#define D3DFVF_DIFFUSE             0x0040\n#define D3DFVF_SPECULAR            0x0080\n#define D3DFVF_TEXCOUNT_MASK       0x0f00\n#define D3DFVF_TEXCOUNT_SHIFT           8\n#define D3DFVF_TEX0                0x0000\n#define D3DFVF_TEX1                0x0100\n#define D3DFVF_TEX2                0x0200\n#define D3DFVF_TEX3                0x0300\n#define D3DFVF_TEX4                0x0400\n#define D3DFVF_TEX5                0x0500\n#define D3DFVF_TEX6                0x0600\n#define D3DFVF_TEX7                0x0700\n#define D3DFVF_TEX8                0x0800\n#define D3DFVF_LASTBETA_UBYTE4     0x1000\n#define D3DFVF_RESERVED2           0xE000\n\n#define D3DTA_SELECTMASK        0x0000000f\n#define D3DTA_DIFFUSE           0x00000000\n#define D3DTA_CURRENT           0x00000001\n#define D3DTA_TEXTURE           0x00000002\n#define D3DTA_TFACTOR           0x00000003\n#define D3DTA_SPECULAR          0x00000004\n#define D3DTA_COMPLEMENT        0x00000010\n#define D3DTA_ALPHAREPLICATE    0x00000020\n#define D3DTA_TEMP              0x00000005\n\n#define D3DCOLORWRITEENABLE_RED   (__MSABI_LONG(1)<<0)\n#define D3DCOLORWRITEENABLE_GREEN (__MSABI_LONG(1)<<1)\n#define D3DCOLORWRITEENABLE_BLUE  (__MSABI_LONG(1)<<2)\n#define D3DCOLORWRITEENABLE_ALPHA (__MSABI_LONG(1)<<3)\n\n\n#ifndef MAKEFOURCC\n#define MAKEFOURCC(ch0, ch1, ch2, ch3)  \\\n    ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |  \\\n    ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))\n#endif\n\n/**************************** \n * Vertex Shaders Declaration\n */\n\ntypedef enum _D3DVSD_TOKENTYPE {\n  D3DVSD_TOKEN_NOP         = 0,\n  D3DVSD_TOKEN_STREAM      = 1,\n  D3DVSD_TOKEN_STREAMDATA  = 2,\n  D3DVSD_TOKEN_TESSELLATOR = 3,\n  D3DVSD_TOKEN_CONSTMEM    = 4,\n  D3DVSD_TOKEN_EXT         = 5,\n  /* RESERVED              = 6 */\n  D3DVSD_TOKEN_END         = 7,\n  D3DVSD_FORCE_DWORD       = 0x7FFFFFFF\n} D3DVSD_TOKENTYPE;\n\n/** input registers for vertex shaders functions */\n/*\n#define D3DVSDE_POSITION      0\n#define D3DVSDE_BLENDWEIGHT   1\n#define D3DVSDE_BLENDINDICES  2\n#define D3DVSDE_NORMAL        3\n#define D3DVSDE_PSIZE         4\n#define D3DVSDE_DIFFUSE       5\n#define D3DVSDE_SPECULAR      6\n#define D3DVSDE_TEXCOORD0     7\n#define D3DVSDE_TEXCOORD1     8\n#define D3DVSDE_TEXCOORD2     9\n#define D3DVSDE_TEXCOORD3    10\n#define D3DVSDE_TEXCOORD4    11\n#define D3DVSDE_TEXCOORD5    12\n#define D3DVSDE_TEXCOORD6    13\n#define D3DVSDE_TEXCOORD7    14\n#define D3DVSDE_POSITION2    15\n#define D3DVSDE_NORMAL2      16\n*/\n/** Address of the vertex register. 0 - 16 */\ntypedef enum _D3DVSDE_REGISTER {\n  D3DVSDE_POSITION     =  0,\n  D3DVSDE_BLENDWEIGHT  =  1,\n  D3DVSDE_BLENDINDICES =  2,\n  D3DVSDE_NORMAL       =  3,\n  D3DVSDE_PSIZE        =  4,\n  D3DVSDE_DIFFUSE      =  5,\n  D3DVSDE_SPECULAR     =  6,\n  D3DVSDE_TEXCOORD0    =  7,\n  D3DVSDE_TEXCOORD1    =  8,\n  D3DVSDE_TEXCOORD2    =  9,\n  D3DVSDE_TEXCOORD3    = 10,\n  D3DVSDE_TEXCOORD4    = 11,\n  D3DVSDE_TEXCOORD5    = 12,\n  D3DVSDE_TEXCOORD6    = 13,\n  D3DVSDE_TEXCOORD7    = 14,\n  D3DVSDE_POSITION2    = 15,\n  D3DVSDE_NORMAL2      = 16\n} D3DVSDE_REGISTER;\n\n/** bit-field declaration for VertexRegister Type */\n/*\n#define D3DVSDT_FLOAT1      0x00\n#define D3DVSDT_FLOAT2      0x01\n#define D3DVSDT_FLOAT3      0x02\n#define D3DVSDT_FLOAT4      0x03\n#define D3DVSDT_D3DCOLOR    0x04\n#define D3DVSDT_UBYTE4      0x05\n#define D3DVSDT_SHORT2      0x06\n#define D3DVSDT_SHORT4      0x07\n*/\ntypedef enum _D3DVSDT_TYPE {\n  D3DVSDT_FLOAT1   = 0x00,\n  D3DVSDT_FLOAT2   = 0x01,\n  D3DVSDT_FLOAT3   = 0x02,\n  D3DVSDT_FLOAT4   = 0x03,\n  D3DVSDT_D3DCOLOR = 0x04,\n  D3DVSDT_UBYTE4   = 0x05,\n  D3DVSDT_SHORT2   = 0x06,\n  D3DVSDT_SHORT4   = 0x07\n} D3DVSDT_TYPE;\n\n\n#define D3DVSD_CONSTADDRESSSHIFT  0\n#define D3DVSD_EXTINFOSHIFT       0\n#define D3DVSD_STREAMNUMBERSHIFT  0\n#define D3DVSD_VERTEXREGSHIFT     0\n#define D3DVSD_CONSTRSSHIFT      16\n#define D3DVSD_DATATYPESHIFT     16\n#define D3DVSD_SKIPCOUNTSHIFT    16\n#define D3DVSD_VERTEXREGINSHIFT  20\n#define D3DVSD_EXTCOUNTSHIFT     24\n#define D3DVSD_CONSTCOUNTSHIFT   25\n#define D3DVSD_DATALOADTYPESHIFT 28\n#define D3DVSD_STREAMTESSSHIFT   28\n#define D3DVSD_TOKENTYPESHIFT    29\n\n#define D3DVSD_CONSTADDRESSMASK  (0x7F     << D3DVSD_CONSTADDRESSSHIFT)\n#define D3DVSD_EXTINFOMASK       (0xFFFFFF << D3DVSD_EXTINFOSHIFT)\n#define D3DVSD_STREAMNUMBERMASK  (0xF      << D3DVSD_STREAMNUMBERSHIFT)\n#define D3DVSD_VERTEXREGMASK     (0x1F     << D3DVSD_VERTEXREGSHIFT)\n#define D3DVSD_CONSTRSMASK       (0x1FFF   << D3DVSD_CONSTRSSHIFT)\n#define D3DVSD_DATATYPEMASK      (0xF      << D3DVSD_DATATYPESHIFT)\n#define D3DVSD_SKIPCOUNTMASK     (0xF      << D3DVSD_SKIPCOUNTSHIFT)\n#define D3DVSD_EXTCOUNTMASK      (0x1F     << D3DVSD_EXTCOUNTSHIFT)\n#define D3DVSD_VERTEXREGINMASK   (0xF      << D3DVSD_VERTEXREGINSHIFT)\n#define D3DVSD_CONSTCOUNTMASK    (0xF      << D3DVSD_CONSTCOUNTSHIFT)\n#define D3DVSD_DATALOADTYPEMASK  (0x1      << D3DVSD_DATALOADTYPESHIFT)\n#define D3DVSD_STREAMTESSMASK    (0x1      << D3DVSD_STREAMTESSSHIFT)\n#define D3DVSD_TOKENTYPEMASK     (0x7u     << D3DVSD_TOKENTYPESHIFT)\n\n\n#define D3DVSD_MAKETOKENTYPE(TokenType) \\\n  (((unsigned)TokenType << D3DVSD_TOKENTYPESHIFT) & D3DVSD_TOKENTYPEMASK)\n\n#define D3DVSD_CONST(ConstantAddress, Count) \\\n  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_CONSTMEM) | ((Count) << D3DVSD_CONSTCOUNTSHIFT) | (ConstantAddress))\n\n#define D3DVSD_END() 0xFFFFFFFF\n\n#define D3DVSD_NOP() 0x00000000\n\n#define D3DVSD_REG(VertexRegister, Type) \\\n  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | ((Type) << D3DVSD_DATATYPESHIFT) | (VertexRegister))\n\n#define D3DVSD_SKIP(Count) \\\n  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | 0x10000000 | ((Count) << D3DVSD_SKIPCOUNTSHIFT))\n\n#define D3DVSD_STREAM(StreamNumber) \\\n  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (StreamNumber))\n\n#define D3DVSD_STREAM_TESS() \\\n  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (D3DVSD_STREAMTESSMASK))\n\n#define D3DVSD_TESSNORMAL(RegisterIn, RegisterOut) \\\n  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | ((RegisterIn) << D3DVSD_VERTEXREGINSHIFT) | ((0x02) << D3DVSD_DATATYPESHIFT) | (RegisterOut))\n\n#define D3DVSD_TESSUV(Register) \\\n  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | 0x10000000 | ((0x01) << D3DVSD_DATATYPESHIFT) | (Register))\n\n\n/********************************\n * Pixel/Vertex Shaders Functions\n */\n\n/** Maximum number of supported texture coordinates sets operation */\n#define D3DDP_MAXTEXCOORD   8\n\n/** opcode token mask */\n#define D3DSI_OPCODE_MASK 0x0000FFFF\n\n/** opcodes types for PS and VS */\ntypedef enum _D3DSHADER_INSTRUCTION_OPCODE_TYPE {\n  D3DSIO_NOP          =  0,\n  D3DSIO_MOV          =  1,\n  D3DSIO_ADD          =  2,\n  D3DSIO_SUB          =  3,\n  D3DSIO_MAD          =  4,\n  D3DSIO_MUL          =  5,\n  D3DSIO_RCP          =  6,\n  D3DSIO_RSQ          =  7,\n  D3DSIO_DP3          =  8,\n  D3DSIO_DP4          =  9,\n  D3DSIO_MIN          = 10,\n  D3DSIO_MAX          = 11,\n  D3DSIO_SLT          = 12,\n  D3DSIO_SGE          = 13,\n  D3DSIO_EXP          = 14,\n  D3DSIO_LOG          = 15,\n  D3DSIO_LIT          = 16,\n  D3DSIO_DST          = 17,\n  D3DSIO_LRP          = 18,\n  D3DSIO_FRC          = 19,\n  D3DSIO_M4x4         = 20,\n  D3DSIO_M4x3         = 21,\n  D3DSIO_M3x4         = 22,\n  D3DSIO_M3x3         = 23,\n  D3DSIO_M3x2         = 24,\n\n  D3DSIO_TEXCOORD     = 64,\n  D3DSIO_TEXKILL      = 65,\n  D3DSIO_TEX          = 66,\n  D3DSIO_TEXBEM       = 67,\n  D3DSIO_TEXBEML      = 68,\n  D3DSIO_TEXREG2AR    = 69,\n  D3DSIO_TEXREG2GB    = 70,\n  D3DSIO_TEXM3x2PAD   = 71,\n  D3DSIO_TEXM3x2TEX   = 72,\n  D3DSIO_TEXM3x3PAD   = 73,\n  D3DSIO_TEXM3x3TEX   = 74,\n  D3DSIO_TEXM3x3DIFF  = 75,\n  D3DSIO_TEXM3x3SPEC  = 76,\n  D3DSIO_TEXM3x3VSPEC = 77,\n  D3DSIO_EXPP         = 78,\n  D3DSIO_LOGP         = 79,\n  D3DSIO_CND          = 80,\n  D3DSIO_DEF          = 81,\n  D3DSIO_TEXREG2RGB   = 82,\n  D3DSIO_TEXDP3TEX    = 83,\n  D3DSIO_TEXM3x2DEPTH = 84,\n  D3DSIO_TEXDP3       = 85,\n  D3DSIO_TEXM3x3      = 86,\n  D3DSIO_TEXDEPTH     = 87,\n  D3DSIO_CMP          = 88,\n  D3DSIO_BEM          = 89,\n\n  D3DSIO_PHASE        = 0xFFFD,\n  D3DSIO_COMMENT      = 0xFFFE,\n  D3DSIO_END          = 0XFFFF,\n\n  D3DSIO_FORCE_DWORD  = 0X7FFFFFFF /** for 32-bit alignment */\n} D3DSHADER_INSTRUCTION_OPCODE_TYPE;\n\n/** for parallelism */\n#define D3DSI_COISSUE 0x40000000\n\n/** destination parameter modifiers (.xyzw) */\n#define D3DSP_WRITEMASK_0       0x00010000 /* .x r */\n#define D3DSP_WRITEMASK_1       0x00020000 /* .y g */\n#define D3DSP_WRITEMASK_2       0x00040000 /* .z b */\n#define D3DSP_WRITEMASK_3       0x00080000 /* .w a */\n#define D3DSP_WRITEMASK_ALL     0x000F0000 /* all */\n\n#define D3DSP_DSTMOD_SHIFT      20\n#define D3DSP_DSTMOD_MASK       (0xF << D3DSP_DSTMOD_SHIFT)\n\ntypedef enum _D3DSHADER_PARAM_DSTMOD_TYPE {\n  D3DSPDM_NONE         = 0 << D3DSP_DSTMOD_SHIFT,\n  D3DSPDM_SATURATE     = 1 << D3DSP_DSTMOD_SHIFT,\n  D3DSPDM_FORCE_DWORD  = 0X7FFFFFFF\n} D3DSHADER_PARAM_DSTMOD_TYPE;\n\n/** destination param */\n#define D3DSP_DSTSHIFT_SHIFT     24\n#define D3DSP_DSTSHIFT_MASK      (0xF << D3DSP_DSTSHIFT_SHIFT)\n\n/** destination/source reg type */\n#define D3DSP_REGTYPE_SHIFT      28\n#define D3DSP_REGTYPE_MASK       (0x7 << D3DSP_REGTYPE_SHIFT)\n\ntypedef enum _D3DSHADER_PARAM_REGISTER_TYPE {\n  D3DSPR_TEMP         = 0 << D3DSP_REGTYPE_SHIFT,\n  D3DSPR_INPUT        = 1 << D3DSP_REGTYPE_SHIFT,\n  D3DSPR_CONST        = 2 << D3DSP_REGTYPE_SHIFT,\n  D3DSPR_ADDR         = 3 << D3DSP_REGTYPE_SHIFT,\n  D3DSPR_TEXTURE      = 3 << D3DSP_REGTYPE_SHIFT,\n  D3DSPR_RASTOUT      = 4 << D3DSP_REGTYPE_SHIFT,\n  D3DSPR_ATTROUT      = 5 << D3DSP_REGTYPE_SHIFT,\n  D3DSPR_TEXCRDOUT    = 6 << D3DSP_REGTYPE_SHIFT,\n  D3DSPR_FORCE_DWORD  = 0x7FFFFFFF\n} D3DSHADER_PARAM_REGISTER_TYPE;\n\ntypedef enum _D3DVS_RASTOUT_OFFSETS {\n  D3DSRO_POSITION     = 0,\n  D3DSRO_FOG          = 1,\n  D3DSRO_POINT_SIZE   = 2,\n  D3DSRO_FORCE_DWORD  = 0x7FFFFFFF\n} D3DVS_RASTOUT_OFFSETS;\n\n#define D3DVS_ADDRESSMODE_SHIFT  13\n#define D3DVS_ADDRESSMODE_MASK   (0x1 << D3DVS_ADDRESSMODE_SHIFT)\n\ntypedef enum _D3DVS_ADDRESSMODE_TYPE {\n  D3DVS_ADDRMODE_ABSOLUTE     = 0 << D3DVS_ADDRESSMODE_SHIFT,\n  D3DVS_ADDRMODE_RELATIVE     = 1 << D3DVS_ADDRESSMODE_SHIFT,\n  D3DVS_ADDRMODE_FORCE_DWORD  = 0x7FFFFFFF\n} D3DVS_ADDRESSMODE_TYPE;\n\n#define D3DVS_SWIZZLE_SHIFT      16\n#define D3DVS_SWIZZLE_MASK       (0xFF << D3DVS_SWIZZLE_SHIFT)\n\n#define D3DSP_SWIZZLE_SHIFT      16\n#define D3DSP_SWIZZLE_MASK       (0xFF << D3DSP_SWIZZLE_SHIFT)\n\n#define D3DVS_X_X       (0 << D3DVS_SWIZZLE_SHIFT)\n#define D3DVS_X_Y       (1 << D3DVS_SWIZZLE_SHIFT)\n#define D3DVS_X_Z       (2 << D3DVS_SWIZZLE_SHIFT)\n#define D3DVS_X_W       (3 << D3DVS_SWIZZLE_SHIFT)\n\n#define D3DVS_Y_X       (0 << (D3DVS_SWIZZLE_SHIFT + 2))\n#define D3DVS_Y_Y       (1 << (D3DVS_SWIZZLE_SHIFT + 2))\n#define D3DVS_Y_Z       (2 << (D3DVS_SWIZZLE_SHIFT + 2))\n#define D3DVS_Y_W       (3 << (D3DVS_SWIZZLE_SHIFT + 2))\n\n#define D3DVS_Z_X       (0 << (D3DVS_SWIZZLE_SHIFT + 4))\n#define D3DVS_Z_Y       (1 << (D3DVS_SWIZZLE_SHIFT + 4))\n#define D3DVS_Z_Z       (2 << (D3DVS_SWIZZLE_SHIFT + 4))\n#define D3DVS_Z_W       (3 << (D3DVS_SWIZZLE_SHIFT + 4))\n\n#define D3DVS_W_X       (0 << (D3DVS_SWIZZLE_SHIFT + 6))\n#define D3DVS_W_Y       (1 << (D3DVS_SWIZZLE_SHIFT + 6))\n#define D3DVS_W_Z       (2 << (D3DVS_SWIZZLE_SHIFT + 6))\n#define D3DVS_W_W       (3 << (D3DVS_SWIZZLE_SHIFT + 6))\n\n#define D3DVS_NOSWIZZLE (D3DVS_X_X | D3DVS_Y_Y | D3DVS_Z_Z | D3DVS_W_W)\n\n#define D3DSP_NOSWIZZLE \\\n    ((0 << (D3DSP_SWIZZLE_SHIFT + 0)) | (1 << (D3DSP_SWIZZLE_SHIFT + 2)) | (2 << (D3DSP_SWIZZLE_SHIFT + 4)) | (3 << (D3DSP_SWIZZLE_SHIFT + 6)))\n\n#define D3DSP_SRCMOD_SHIFT      24\n#define D3DSP_SRCMOD_MASK       (0xF << D3DSP_SRCMOD_SHIFT)\n\ntypedef enum _D3DSHADER_PARAM_SRCMOD_TYPE {\n  D3DSPSM_NONE         =  0 << D3DSP_SRCMOD_SHIFT,\n  D3DSPSM_NEG          =  1 << D3DSP_SRCMOD_SHIFT,\n  D3DSPSM_BIAS         =  2 << D3DSP_SRCMOD_SHIFT,\n  D3DSPSM_BIASNEG      =  3 << D3DSP_SRCMOD_SHIFT,\n  D3DSPSM_SIGN         =  4 << D3DSP_SRCMOD_SHIFT,\n  D3DSPSM_SIGNNEG      =  5 << D3DSP_SRCMOD_SHIFT,\n  D3DSPSM_COMP         =  6 << D3DSP_SRCMOD_SHIFT,\n  D3DSPSM_X2           =  7 << D3DSP_SRCMOD_SHIFT,\n  D3DSPSM_X2NEG        =  8 << D3DSP_SRCMOD_SHIFT,\n  D3DSPSM_DZ           =  9 << D3DSP_SRCMOD_SHIFT,\n  D3DSPSM_DW           = 10 << D3DSP_SRCMOD_SHIFT,\n  D3DSPSM_FORCE_DWORD  = 0x7FFFFFFF\n} D3DSHADER_PARAM_SRCMOD_TYPE;\n\n#define D3DPS_VERSION(major, minor) (0xFFFF0000 | ((major) << 8) | (minor))\n#define D3DVS_VERSION(major, minor) (0xFFFE0000 | ((major) << 8) | (minor))\n#define D3DSHADER_VERSION_MAJOR(version) (((version) >> 8) & 0xFF)\n#define D3DSHADER_VERSION_MINOR(version) (((version) >> 0) & 0xFF)\n\n#define D3DSI_COMMENTSIZE_SHIFT 16\n#define D3DSI_COMMENTSIZE_MASK (0x7FFF << D3DSI_COMMENTSIZE_SHIFT)\n\n#define D3DSHADER_COMMENT(commentSize) \\\n  ((((commentSize) << D3DSI_COMMENTSIZE_SHIFT) & D3DSI_COMMENTSIZE_MASK) | D3DSIO_COMMENT)\n\n#define D3DPS_END() 0x0000FFFF\n#define D3DVS_END() 0x0000FFFF\n\n\n/*****************************************************************************\n * Direct 3D v8 enumerated types\n */\ntypedef enum _D3DBACKBUFFER_TYPE {\n    D3DBACKBUFFER_TYPE_MONO         = 0,\n    D3DBACKBUFFER_TYPE_LEFT         = 1,\n    D3DBACKBUFFER_TYPE_RIGHT        = 2,\n\n    D3DBACKBUFFER_TYPE_FORCE_DWORD  = 0x7fffffff\n} D3DBACKBUFFER_TYPE;\n\ntypedef enum _D3DBASISTYPE{\n   D3DBASIS_BEZIER        = 0,\n   D3DBASIS_BSPLINE       = 1,\n   D3DBASIS_INTERPOLATE   = 2,\n\n   D3DBASIS_FORCE_DWORD   = 0x7fffffff\n} D3DBASISTYPE;\n\ntypedef enum _D3DBLEND {\n    D3DBLEND_ZERO               =  1,\n    D3DBLEND_ONE                =  2,\n    D3DBLEND_SRCCOLOR           =  3,\n    D3DBLEND_INVSRCCOLOR        =  4,\n    D3DBLEND_SRCALPHA           =  5,\n    D3DBLEND_INVSRCALPHA        =  6,\n    D3DBLEND_DESTALPHA          =  7,\n    D3DBLEND_INVDESTALPHA       =  8,\n    D3DBLEND_DESTCOLOR          =  9,\n    D3DBLEND_INVDESTCOLOR       = 10,\n    D3DBLEND_SRCALPHASAT        = 11,\n    D3DBLEND_BOTHSRCALPHA       = 12,\n    D3DBLEND_BOTHINVSRCALPHA    = 13,\n\n    D3DBLEND_FORCE_DWORD        = 0x7fffffff\n} D3DBLEND;\n\ntypedef enum _D3DBLENDOP {\n    D3DBLENDOP_ADD              = 1,\n    D3DBLENDOP_SUBTRACT         = 2,\n    D3DBLENDOP_REVSUBTRACT      = 3,\n    D3DBLENDOP_MIN              = 4,\n    D3DBLENDOP_MAX              = 5,\n\n    D3DBLENDOP_FORCE_DWORD      = 0x7fffffff\n} D3DBLENDOP;\n\ntypedef enum _D3DCMPFUNC {\n    D3DCMP_NEVER                = 1,\n    D3DCMP_LESS                 = 2,\n    D3DCMP_EQUAL                = 3,\n    D3DCMP_LESSEQUAL            = 4,\n    D3DCMP_GREATER              = 5,\n    D3DCMP_NOTEQUAL             = 6,\n    D3DCMP_GREATEREQUAL         = 7,\n    D3DCMP_ALWAYS               = 8,\n\n    D3DCMP_FORCE_DWORD          = 0x7fffffff\n} D3DCMPFUNC;\n\ntypedef enum _D3DCUBEMAP_FACES {\n    D3DCUBEMAP_FACE_POSITIVE_X     = 0,\n    D3DCUBEMAP_FACE_NEGATIVE_X     = 1,\n    D3DCUBEMAP_FACE_POSITIVE_Y     = 2,\n    D3DCUBEMAP_FACE_NEGATIVE_Y     = 3,\n    D3DCUBEMAP_FACE_POSITIVE_Z     = 4,\n    D3DCUBEMAP_FACE_NEGATIVE_Z     = 5,\n\n    D3DCUBEMAP_FACE_FORCE_DWORD    = 0xffffffff\n} D3DCUBEMAP_FACES;\n\ntypedef enum _D3DCULL {\n    D3DCULL_NONE                = 1,\n    D3DCULL_CW                  = 2,\n    D3DCULL_CCW                 = 3,\n\n    D3DCULL_FORCE_DWORD         = 0x7fffffff\n} D3DCULL;\n\ntypedef enum _D3DDEBUGMONITORTOKENS {\n    D3DDMT_ENABLE          = 0,\n    D3DDMT_DISABLE         = 1,\n\n    D3DDMT_FORCE_DWORD     = 0x7fffffff\n} D3DDEBUGMONITORTOKENS;\n\ntypedef enum _D3DDEVTYPE {\n    D3DDEVTYPE_HAL         = 1,\n    D3DDEVTYPE_REF         = 2,\n    D3DDEVTYPE_SW          = 3,\n\n    D3DDEVTYPE_FORCE_DWORD = 0xffffffff\n} D3DDEVTYPE;\n\ntypedef enum _D3DFILLMODE {\n    D3DFILL_POINT               = 1,\n    D3DFILL_WIREFRAME           = 2,\n    D3DFILL_SOLID               = 3,\n\n    D3DFILL_FORCE_DWORD         = 0x7fffffff\n} D3DFILLMODE;\n\ntypedef enum _D3DFOGMODE {\n    D3DFOG_NONE                 = 0,\n    D3DFOG_EXP                  = 1,\n    D3DFOG_EXP2                 = 2,\n    D3DFOG_LINEAR               = 3,\n\n    D3DFOG_FORCE_DWORD          = 0x7fffffff\n} D3DFOGMODE;\n\ntypedef enum _D3DFORMAT {\n    D3DFMT_UNKNOWN              =   0,\n\n    D3DFMT_R8G8B8               =  20,\n    D3DFMT_A8R8G8B8             =  21,\n    D3DFMT_X8R8G8B8             =  22,\n    D3DFMT_R5G6B5               =  23,\n    D3DFMT_X1R5G5B5             =  24,\n    D3DFMT_A1R5G5B5             =  25,\n    D3DFMT_A4R4G4B4             =  26,\n    D3DFMT_R3G3B2               =  27,\n    D3DFMT_A8                   =  28,\n    D3DFMT_A8R3G3B2             =  29,\n    D3DFMT_X4R4G4B4             =  30,\n    D3DFMT_A2B10G10R10          =  31,\n    D3DFMT_G16R16               =  34,\n\n    D3DFMT_A8P8                 =  40,\n    D3DFMT_P8                   =  41,\n\n    D3DFMT_L8                   =  50,\n    D3DFMT_A8L8                 =  51,\n    D3DFMT_A4L4                 =  52,\n\n    D3DFMT_V8U8                 =  60,\n    D3DFMT_L6V5U5               =  61,\n    D3DFMT_X8L8V8U8             =  62,\n    D3DFMT_Q8W8V8U8             =  63,\n    D3DFMT_V16U16               =  64,\n    D3DFMT_W11V11U10            =  65,\n    D3DFMT_A2W10V10U10          =  67,\n\n    D3DFMT_UYVY                 =  MAKEFOURCC('U', 'Y', 'V', 'Y'),\n    D3DFMT_YUY2                 =  MAKEFOURCC('Y', 'U', 'Y', '2'),\n    D3DFMT_DXT1                 =  MAKEFOURCC('D', 'X', 'T', '1'),\n    D3DFMT_DXT2                 =  MAKEFOURCC('D', 'X', 'T', '2'),\n    D3DFMT_DXT3                 =  MAKEFOURCC('D', 'X', 'T', '3'),\n    D3DFMT_DXT4                 =  MAKEFOURCC('D', 'X', 'T', '4'),\n    D3DFMT_DXT5                 =  MAKEFOURCC('D', 'X', 'T', '5'),\n\n    D3DFMT_D16_LOCKABLE         =  70,\n    D3DFMT_D32                  =  71,\n    D3DFMT_D15S1                =  73,\n    D3DFMT_D24S8                =  75,\n    D3DFMT_D16                  =  80,\n    D3DFMT_D24X8                =  77,\n    D3DFMT_D24X4S4              =  79,\n\n    D3DFMT_VERTEXDATA           = 100,\n    D3DFMT_INDEX16              = 101,\n    D3DFMT_INDEX32              = 102,\n\n    D3DFMT_FORCE_DWORD          = 0xFFFFFFFF\n} D3DFORMAT;\n\ntypedef enum _D3DLIGHTTYPE {\n    D3DLIGHT_POINT          = 1,\n    D3DLIGHT_SPOT           = 2,\n    D3DLIGHT_DIRECTIONAL    = 3,\n\n    D3DLIGHT_FORCE_DWORD    = 0x7fffffff\n} D3DLIGHTTYPE;\n\ntypedef enum _D3DMATERIALCOLORSOURCE {\n    D3DMCS_MATERIAL         = 0,\n    D3DMCS_COLOR1           = 1,\n    D3DMCS_COLOR2           = 2,\n\n    D3DMCS_FORCE_DWORD      = 0x7fffffff\n} D3DMATERIALCOLORSOURCE;\n\ntypedef enum _D3DMULTISAMPLE_TYPE {\n    D3DMULTISAMPLE_NONE            =  0,\n    D3DMULTISAMPLE_2_SAMPLES       =  2,\n    D3DMULTISAMPLE_3_SAMPLES       =  3,\n    D3DMULTISAMPLE_4_SAMPLES       =  4,\n    D3DMULTISAMPLE_5_SAMPLES       =  5,\n    D3DMULTISAMPLE_6_SAMPLES       =  6,\n    D3DMULTISAMPLE_7_SAMPLES       =  7,\n    D3DMULTISAMPLE_8_SAMPLES       =  8,\n    D3DMULTISAMPLE_9_SAMPLES       =  9,\n    D3DMULTISAMPLE_10_SAMPLES      = 10,\n    D3DMULTISAMPLE_11_SAMPLES      = 11,\n    D3DMULTISAMPLE_12_SAMPLES      = 12,\n    D3DMULTISAMPLE_13_SAMPLES      = 13,\n    D3DMULTISAMPLE_14_SAMPLES      = 14,\n    D3DMULTISAMPLE_15_SAMPLES      = 15,\n    D3DMULTISAMPLE_16_SAMPLES      = 16,\n\n    D3DMULTISAMPLE_FORCE_DWORD     = 0x7fffffff\n} D3DMULTISAMPLE_TYPE;\n\ntypedef enum _D3DORDERTYPE {\n   D3DORDER_LINEAR      = 1,\n   D3DORDER_QUADRATIC   = 2,\n   D3DORDER_CUBIC       = 3,\n   D3DORDER_QUINTIC     = 5,\n\n   D3DORDER_FORCE_DWORD = 0x7fffffff\n} D3DORDERTYPE;\n\ntypedef enum _D3DPATCHEDGESTYLE {\n   D3DPATCHEDGE_DISCRETE    = 0,\n   D3DPATCHEDGE_CONTINUOUS  = 1,\n\n   D3DPATCHEDGE_FORCE_DWORD = 0x7fffffff,\n} D3DPATCHEDGESTYLE;\n\ntypedef enum _D3DPOOL {\n    D3DPOOL_DEFAULT                 = 0,\n    D3DPOOL_MANAGED                 = 1,\n    D3DPOOL_SYSTEMMEM               = 2,\n    D3DPOOL_SCRATCH                 = 3,\n\n    D3DPOOL_FORCE_DWORD             = 0x7fffffff\n} D3DPOOL;\n\ntypedef enum _D3DPRIMITIVETYPE {\n    D3DPT_POINTLIST             = 1,\n    D3DPT_LINELIST              = 2,\n    D3DPT_LINESTRIP             = 3,\n    D3DPT_TRIANGLELIST          = 4,\n    D3DPT_TRIANGLESTRIP         = 5,\n    D3DPT_TRIANGLEFAN           = 6,\n\n    D3DPT_FORCE_DWORD           = 0x7fffffff\n} D3DPRIMITIVETYPE;\n\ntypedef enum _D3DRENDERSTATETYPE {\n    D3DRS_ZENABLE                   =   7,\n    D3DRS_FILLMODE                  =   8,\n    D3DRS_SHADEMODE                 =   9,\n    D3DRS_LINEPATTERN               =  10,\n    D3DRS_ZWRITEENABLE              =  14,\n    D3DRS_ALPHATESTENABLE           =  15,\n    D3DRS_LASTPIXEL                 =  16,\n    D3DRS_SRCBLEND                  =  19,\n    D3DRS_DESTBLEND                 =  20,\n    D3DRS_CULLMODE                  =  22,\n    D3DRS_ZFUNC                     =  23,\n    D3DRS_ALPHAREF                  =  24,\n    D3DRS_ALPHAFUNC                 =  25,\n    D3DRS_DITHERENABLE              =  26,\n    D3DRS_ALPHABLENDENABLE          =  27,\n    D3DRS_FOGENABLE                 =  28,\n    D3DRS_SPECULARENABLE            =  29,\n    D3DRS_ZVISIBLE                  =  30,\n    D3DRS_FOGCOLOR                  =  34,\n    D3DRS_FOGTABLEMODE              =  35,\n    D3DRS_FOGSTART                  =  36,\n    D3DRS_FOGEND                    =  37,\n    D3DRS_FOGDENSITY                =  38,\n    D3DRS_EDGEANTIALIAS             =  40,\n    D3DRS_ZBIAS                     =  47,\n    D3DRS_RANGEFOGENABLE            =  48,\n    D3DRS_STENCILENABLE             =  52,\n    D3DRS_STENCILFAIL               =  53,\n    D3DRS_STENCILZFAIL              =  54,\n    D3DRS_STENCILPASS               =  55,\n    D3DRS_STENCILFUNC               =  56,\n    D3DRS_STENCILREF                =  57,\n    D3DRS_STENCILMASK               =  58,\n    D3DRS_STENCILWRITEMASK          =  59,\n    D3DRS_TEXTUREFACTOR             =  60,\n    D3DRS_WRAP0                     = 128,\n    D3DRS_WRAP1                     = 129,\n    D3DRS_WRAP2                     = 130,\n    D3DRS_WRAP3                     = 131,\n    D3DRS_WRAP4                     = 132,\n    D3DRS_WRAP5                     = 133,\n    D3DRS_WRAP6                     = 134,\n    D3DRS_WRAP7                     = 135,\n    D3DRS_CLIPPING                  = 136,\n    D3DRS_LIGHTING                  = 137,\n    D3DRS_AMBIENT                   = 139,\n    D3DRS_FOGVERTEXMODE             = 140,\n    D3DRS_COLORVERTEX               = 141,\n    D3DRS_LOCALVIEWER               = 142,\n    D3DRS_NORMALIZENORMALS          = 143,\n    D3DRS_DIFFUSEMATERIALSOURCE     = 145,\n    D3DRS_SPECULARMATERIALSOURCE    = 146,\n    D3DRS_AMBIENTMATERIALSOURCE     = 147,\n    D3DRS_EMISSIVEMATERIALSOURCE    = 148,\n    D3DRS_VERTEXBLEND               = 151,\n    D3DRS_CLIPPLANEENABLE           = 152,\n    D3DRS_SOFTWAREVERTEXPROCESSING  = 153,\n    D3DRS_POINTSIZE                 = 154,\n    D3DRS_POINTSIZE_MIN             = 155,\n    D3DRS_POINTSPRITEENABLE         = 156,\n    D3DRS_POINTSCALEENABLE          = 157,\n    D3DRS_POINTSCALE_A              = 158,\n    D3DRS_POINTSCALE_B              = 159,\n    D3DRS_POINTSCALE_C              = 160,\n    D3DRS_MULTISAMPLEANTIALIAS      = 161,\n    D3DRS_MULTISAMPLEMASK           = 162,\n    D3DRS_PATCHEDGESTYLE            = 163,\n    D3DRS_PATCHSEGMENTS             = 164,\n    D3DRS_DEBUGMONITORTOKEN         = 165,\n    D3DRS_POINTSIZE_MAX             = 166,\n    D3DRS_INDEXEDVERTEXBLENDENABLE  = 167,\n    D3DRS_COLORWRITEENABLE          = 168,\n    D3DRS_TWEENFACTOR               = 170,\n    D3DRS_BLENDOP                   = 171,\n    D3DRS_POSITIONORDER             = 172,\n    D3DRS_NORMALORDER               = 173,\n\n    D3DRS_FORCE_DWORD               = 0x7fffffff\n} D3DRENDERSTATETYPE;\n\ntypedef enum _D3DRESOURCETYPE {\n    D3DRTYPE_SURFACE                =  1,\n    D3DRTYPE_VOLUME                 =  2,\n    D3DRTYPE_TEXTURE                =  3,\n    D3DRTYPE_VOLUMETEXTURE          =  4,\n    D3DRTYPE_CUBETEXTURE            =  5,\n    D3DRTYPE_VERTEXBUFFER           =  6,\n    D3DRTYPE_INDEXBUFFER            =  7,\n\n    D3DRTYPE_FORCE_DWORD            = 0x7fffffff\n} D3DRESOURCETYPE;\n\ntypedef enum _D3DSHADEMODE {\n    D3DSHADE_FLAT               = 1,\n    D3DSHADE_GOURAUD            = 2,\n    D3DSHADE_PHONG              = 3,\n\n    D3DSHADE_FORCE_DWORD        = 0x7fffffff\n} D3DSHADEMODE;\n\ntypedef enum _D3DSTATEBLOCKTYPE {\n    D3DSBT_ALL           = 1,\n    D3DSBT_PIXELSTATE    = 2,\n    D3DSBT_VERTEXSTATE   = 3,\n\n    D3DSBT_FORCE_DWORD   = 0xffffffff\n} D3DSTATEBLOCKTYPE;\n\ntypedef enum _D3DSTENCILOP {\n    D3DSTENCILOP_KEEP           = 1,\n    D3DSTENCILOP_ZERO           = 2,\n    D3DSTENCILOP_REPLACE        = 3,\n    D3DSTENCILOP_INCRSAT        = 4,\n    D3DSTENCILOP_DECRSAT        = 5,\n    D3DSTENCILOP_INVERT         = 6,\n    D3DSTENCILOP_INCR           = 7,\n    D3DSTENCILOP_DECR           = 8,\n\n    D3DSTENCILOP_FORCE_DWORD    = 0x7fffffff\n} D3DSTENCILOP;\n\ntypedef enum _D3DSWAPEFFECT {\n    D3DSWAPEFFECT_DISCARD         = 1,\n    D3DSWAPEFFECT_FLIP            = 2,\n    D3DSWAPEFFECT_COPY            = 3,\n    D3DSWAPEFFECT_COPY_VSYNC      = 4,\n\n    D3DSWAPEFFECT_FORCE_DWORD     = 0xFFFFFFFF\n} D3DSWAPEFFECT;\n\ntypedef enum _D3DTEXTUREADDRESS {\n    D3DTADDRESS_WRAP            = 1,\n    D3DTADDRESS_MIRROR          = 2,\n    D3DTADDRESS_CLAMP           = 3,\n    D3DTADDRESS_BORDER          = 4,\n    D3DTADDRESS_MIRRORONCE      = 5,\n\n    D3DTADDRESS_FORCE_DWORD     = 0x7fffffff\n} D3DTEXTUREADDRESS;\n\ntypedef enum _D3DTEXTUREFILTERTYPE {\n    D3DTEXF_NONE            = 0,\n    D3DTEXF_POINT           = 1,\n    D3DTEXF_LINEAR          = 2,\n    D3DTEXF_ANISOTROPIC     = 3,\n    D3DTEXF_FLATCUBIC       = 4,\n    D3DTEXF_GAUSSIANCUBIC   = 5,\n\n    D3DTEXF_FORCE_DWORD     = 0x7fffffff\n} D3DTEXTUREFILTERTYPE;\n\ntypedef enum _D3DTEXTUREOP {\n    D3DTOP_DISABLE                   =  1,\n    D3DTOP_SELECTARG1                =  2,\n    D3DTOP_SELECTARG2                =  3,\n    D3DTOP_MODULATE                  =  4,\n    D3DTOP_MODULATE2X                =  5,\n    D3DTOP_MODULATE4X                =  6,\n    D3DTOP_ADD                       =  7,\n    D3DTOP_ADDSIGNED                 =  8,\n    D3DTOP_ADDSIGNED2X               =  9,\n    D3DTOP_SUBTRACT                  = 10,\n    D3DTOP_ADDSMOOTH                 = 11,\n    D3DTOP_BLENDDIFFUSEALPHA         = 12,\n    D3DTOP_BLENDTEXTUREALPHA         = 13,\n    D3DTOP_BLENDFACTORALPHA          = 14,\n    D3DTOP_BLENDTEXTUREALPHAPM       = 15,\n    D3DTOP_BLENDCURRENTALPHA         = 16,\n    D3DTOP_PREMODULATE               = 17,\n    D3DTOP_MODULATEALPHA_ADDCOLOR    = 18,\n    D3DTOP_MODULATECOLOR_ADDALPHA    = 19,\n    D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,\n    D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,\n    D3DTOP_BUMPENVMAP                = 22,\n    D3DTOP_BUMPENVMAPLUMINANCE       = 23,\n    D3DTOP_DOTPRODUCT3               = 24,\n    D3DTOP_MULTIPLYADD               = 25,\n    D3DTOP_LERP                      = 26,\n\n    D3DTOP_FORCE_DWORD               = 0x7fffffff,\n} D3DTEXTUREOP;\n\ntypedef enum _D3DTEXTURESTAGESTATETYPE {\n    D3DTSS_COLOROP               =  1,\n    D3DTSS_COLORARG1             =  2,\n    D3DTSS_COLORARG2             =  3,\n    D3DTSS_ALPHAOP               =  4,\n    D3DTSS_ALPHAARG1             =  5,\n    D3DTSS_ALPHAARG2             =  6,\n    D3DTSS_BUMPENVMAT00          =  7,\n    D3DTSS_BUMPENVMAT01          =  8,\n    D3DTSS_BUMPENVMAT10          =  9,\n    D3DTSS_BUMPENVMAT11          = 10,\n    D3DTSS_TEXCOORDINDEX         = 11,\n    D3DTSS_ADDRESSU              = 13,\n    D3DTSS_ADDRESSV              = 14,\n    D3DTSS_BORDERCOLOR           = 15,\n    D3DTSS_MAGFILTER             = 16,\n    D3DTSS_MINFILTER             = 17,\n    D3DTSS_MIPFILTER             = 18,\n    D3DTSS_MIPMAPLODBIAS         = 19,\n    D3DTSS_MAXMIPLEVEL           = 20,\n    D3DTSS_MAXANISOTROPY         = 21,\n    D3DTSS_BUMPENVLSCALE         = 22,\n    D3DTSS_BUMPENVLOFFSET        = 23,\n    D3DTSS_TEXTURETRANSFORMFLAGS = 24,\n    D3DTSS_ADDRESSW              = 25,\n    D3DTSS_COLORARG0             = 26,\n    D3DTSS_ALPHAARG0             = 27,\n    D3DTSS_RESULTARG             = 28,\n\n    D3DTSS_FORCE_DWORD           = 0x7fffffff\n} D3DTEXTURESTAGESTATETYPE;\n\ntypedef enum _D3DTEXTURETRANSFORMFLAGS {\n    D3DTTFF_DISABLE         =   0,\n    D3DTTFF_COUNT1          =   1,\n    D3DTTFF_COUNT2          =   2,\n    D3DTTFF_COUNT3          =   3,\n    D3DTTFF_COUNT4          =   4,\n    D3DTTFF_PROJECTED       = 256,\n\n    D3DTTFF_FORCE_DWORD     = 0x7fffffff\n} D3DTEXTURETRANSFORMFLAGS;\n\ntypedef enum _D3DTRANSFORMSTATETYPE {\n    D3DTS_VIEW            =  2,\n    D3DTS_PROJECTION      =  3,\n    D3DTS_TEXTURE0        = 16,\n    D3DTS_TEXTURE1        = 17,\n    D3DTS_TEXTURE2        = 18,\n    D3DTS_TEXTURE3        = 19,\n    D3DTS_TEXTURE4        = 20,\n    D3DTS_TEXTURE5        = 21,\n    D3DTS_TEXTURE6        = 22,\n    D3DTS_TEXTURE7        = 23,\n\n    D3DTS_FORCE_DWORD     = 0x7fffffff\n} D3DTRANSFORMSTATETYPE;\n\ntypedef enum _D3DVERTEXBLENDFLAGS {\n    D3DVBF_DISABLE  =   0,\n    D3DVBF_1WEIGHTS =   1,\n    D3DVBF_2WEIGHTS =   2,\n    D3DVBF_3WEIGHTS =   3,\n    D3DVBF_TWEENING = 255,\n    D3DVBF_0WEIGHTS = 256\n} D3DVERTEXBLENDFLAGS;\n\ntypedef enum _D3DZBUFFERTYPE {\n    D3DZB_FALSE                 = 0,\n    D3DZB_TRUE                  = 1,\n    D3DZB_USEW                  = 2,\n\n    D3DZB_FORCE_DWORD           = 0x7fffffff\n} D3DZBUFFERTYPE;\n\n\n/*****************************************************************************\n * Direct 3D v8 typedefs\n */\ntypedef DWORD D3DCOLOR;\n\n/*****************************************************************************\n * Direct 3D v8 structures\n */\ntypedef struct _D3DADAPTER_IDENTIFIER8 {\n    char            Driver[MAX_DEVICE_IDENTIFIER_STRING];\n    char            Description[MAX_DEVICE_IDENTIFIER_STRING];\n\n    LARGE_INTEGER   DriverVersion;\n    DWORD           VendorId;\n    DWORD           DeviceId;\n    DWORD           SubSysId;\n    DWORD           Revision;\n\n    GUID            DeviceIdentifier;\n\n    DWORD           WHQLLevel;\n} D3DADAPTER_IDENTIFIER8;\n\ntypedef struct _D3DBOX {\n    UINT                Left;\n    UINT                Top;\n    UINT                Right;\n    UINT                Bottom;\n    UINT                Front;\n    UINT                Back;\n} D3DBOX;\n\ntypedef struct _D3DCLIPSTATUS8 {\n   DWORD ClipUnion;\n   DWORD ClipIntersection;\n} D3DCLIPSTATUS8;\n\ntypedef struct _D3DCOLORVALUE {\n    float r;\n    float g;\n    float b;\n    float a;\n} D3DCOLORVALUE;\n\ntypedef struct _D3DDEVICE_CREATION_PARAMETERS {\n    UINT          AdapterOrdinal;\n    D3DDEVTYPE    DeviceType;\n    HWND          hFocusWindow;\n    DWORD         BehaviorFlags;\n} D3DDEVICE_CREATION_PARAMETERS;\n\ntypedef struct _D3DDISPLAYMODE {\n    UINT            Width;\n    UINT            Height;\n    UINT            RefreshRate;\n    D3DFORMAT       Format;\n} D3DDISPLAYMODE;\n\ntypedef struct _D3DGAMMARAMP {\n    WORD                red  [256];\n    WORD                green[256];\n    WORD                blue [256];\n} D3DGAMMARAMP;\n\ntypedef struct _D3DINDEXBUFFER_DESC {\n    D3DFORMAT           Format;\n    D3DRESOURCETYPE     Type;\n    DWORD               Usage;\n    D3DPOOL             Pool;\n    UINT                Size;\n} D3DINDEXBUFFER_DESC;\n\n#ifndef D3DVECTOR_DEFINED\ntypedef struct _D3DVECTOR {\n    float x;\n    float y;\n    float z;\n} D3DVECTOR;\n#define D3DVECTOR_DEFINED\n#endif\n\ntypedef struct _D3DLIGHT8 {\n    D3DLIGHTTYPE    Type;\n    D3DCOLORVALUE   Diffuse;\n    D3DCOLORVALUE   Specular;\n    D3DCOLORVALUE   Ambient;\n    D3DVECTOR       Position;\n    D3DVECTOR       Direction;\n    float           Range;\n    float           Falloff;\n    float           Attenuation0;\n    float           Attenuation1;\n    float           Attenuation2;\n    float           Theta;\n    float           Phi;\n} D3DLIGHT8;\n\ntypedef struct _D3DLINEPATTERN {\n    WORD    wRepeatFactor;\n    WORD    wLinePattern;\n} D3DLINEPATTERN;\n\ntypedef struct _D3DLOCKED_BOX {\n    INT                 RowPitch;\n    INT                 SlicePitch;\n    void*               pBits;\n} D3DLOCKED_BOX;\n\ntypedef struct _D3DLOCKED_RECT {\n    INT                 Pitch;\n    void*               pBits;\n} D3DLOCKED_RECT;\n\ntypedef struct _D3DMATERIAL8 {\n    D3DCOLORVALUE   Diffuse;\n    D3DCOLORVALUE   Ambient;\n    D3DCOLORVALUE   Specular;\n    D3DCOLORVALUE   Emissive;\n    float           Power;\n} D3DMATERIAL8;\n\ntypedef struct _D3DMATRIX {\n    union {\n        struct {\n            float        _11, _12, _13, _14;\n            float        _21, _22, _23, _24;\n            float        _31, _32, _33, _34;\n            float        _41, _42, _43, _44;\n        } DUMMYSTRUCTNAME;\n        float m[4][4];\n    } DUMMYUNIONNAME;\n} D3DMATRIX;\n\ntypedef struct _D3DPRESENT_PARAMETERS_ {\n    UINT                    BackBufferWidth;\n    UINT                    BackBufferHeight;\n    D3DFORMAT               BackBufferFormat;\n    UINT                    BackBufferCount;\n\n    D3DMULTISAMPLE_TYPE     MultiSampleType;\n\n    D3DSWAPEFFECT           SwapEffect;\n    HWND                    hDeviceWindow;\n    BOOL                    Windowed;\n    BOOL                    EnableAutoDepthStencil;\n    D3DFORMAT               AutoDepthStencilFormat;\n    DWORD                   Flags;\n\n    UINT                    FullScreen_RefreshRateInHz;\n    UINT                    FullScreen_PresentationInterval;\n\n} D3DPRESENT_PARAMETERS;\n\n#define D3DPRESENTFLAG_LOCKABLE_BACKBUFFER  0x00000001\n\ntypedef struct _D3DRANGE {\n    UINT                Offset;\n    UINT                Size;\n} D3DRANGE;\n\ntypedef struct _D3DRASTER_STATUS {\n    BOOL            InVBlank;\n    UINT            ScanLine;\n} D3DRASTER_STATUS;\n\ntypedef struct _D3DRECT {\n    LONG x1;\n    LONG y1;\n    LONG x2;\n    LONG y2;\n} D3DRECT;\n\ntypedef struct _D3DRECTPATCH_INFO {\n    UINT                StartVertexOffsetWidth;\n    UINT                StartVertexOffsetHeight;\n    UINT                Width;\n    UINT                Height;\n    UINT                Stride;\n    D3DBASISTYPE        Basis;\n    D3DORDERTYPE        Order;\n} D3DRECTPATCH_INFO;\n\ntypedef struct _D3DSURFACE_DESC {\n    D3DFORMAT           Format;\n    D3DRESOURCETYPE     Type;\n    DWORD               Usage;\n    D3DPOOL             Pool;\n    UINT                Size;\n    D3DMULTISAMPLE_TYPE MultiSampleType;\n    UINT                Width;\n    UINT                Height;\n} D3DSURFACE_DESC;\n\ntypedef struct _D3DTRIPATCH_INFO {\n    UINT                StartVertexOffset;\n    UINT                NumVertices;\n    D3DBASISTYPE        Basis;\n    D3DORDERTYPE        Order;\n} D3DTRIPATCH_INFO;\n\ntypedef struct _D3DVERTEXBUFFER_DESC {\n    D3DFORMAT           Format;\n    D3DRESOURCETYPE     Type;\n    DWORD               Usage;\n    D3DPOOL             Pool;\n    UINT                Size;\n    DWORD               FVF;\n} D3DVERTEXBUFFER_DESC;\n\ntypedef struct _D3DVIEWPORT8 {\n    DWORD       X;\n    DWORD       Y;\n    DWORD       Width;\n    DWORD       Height;\n    float       MinZ;\n    float       MaxZ;\n} D3DVIEWPORT8;\n\ntypedef struct _D3DVOLUME_DESC {\n    D3DFORMAT           Format;\n    D3DRESOURCETYPE     Type;\n    DWORD               Usage;\n    D3DPOOL             Pool;\n    UINT                Size;\n    UINT                Width;\n    UINT                Height;\n    UINT                Depth;\n} D3DVOLUME_DESC;\n\n#ifdef __i386__\n#include <poppack.h>\n#endif\n\n#endif  /* __WINE_D3D8TYPES_H */\n"
  },
  {
    "path": "wine/windows/d3d9.h",
    "content": "/*\n * Copyright (C) 2002-2003 Jason Edmeades\n *                         Raphael Junqueira\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _D3D9_H_\n#define _D3D9_H_\n\n#ifndef DIRECT3D_VERSION\n#define DIRECT3D_VERSION  0x0900\n#endif\n\n#include <stdlib.h>\n\n#define COM_NO_WINDOWS_H\n#include <objbase.h>\n#include <windows.h>\n#include <d3d9types.h>\n#include <d3d9caps.h>\n\n/*****************************************************************************\n * Behavior Flags for IDirect3D8::CreateDevice\n */\n#define D3DCREATE_FPU_PRESERVE                  __MSABI_LONG(0x00000002)\n#define D3DCREATE_MULTITHREADED                 __MSABI_LONG(0x00000004)\n#define D3DCREATE_PUREDEVICE                    __MSABI_LONG(0x00000010)\n#define D3DCREATE_SOFTWARE_VERTEXPROCESSING     __MSABI_LONG(0x00000020)\n#define D3DCREATE_HARDWARE_VERTEXPROCESSING     __MSABI_LONG(0x00000040)\n#define D3DCREATE_MIXED_VERTEXPROCESSING        __MSABI_LONG(0x00000080)\n#define D3DCREATE_DISABLE_DRIVER_MANAGEMENT     __MSABI_LONG(0x00000100)\n#define D3DCREATE_ADAPTERGROUP_DEVICE           __MSABI_LONG(0x00000200)\n#define D3DCREATE_DISABLE_DRIVER_MANAGEMENT_EX  __MSABI_LONG(0x00000400)\n#define D3DCREATE_NOWINDOWCHANGES               __MSABI_LONG(0x00000800)\n#define D3DCREATE_DISABLE_PSGP_THREADING        __MSABI_LONG(0x00002000)\n#define D3DCREATE_ENABLE_PRESENTSTATS           __MSABI_LONG(0x00004000)\n#define D3DCREATE_DISABLE_PRINTSCREEN           __MSABI_LONG(0x00008000)\n#define D3DCREATE_SCREENSAVER                   __MSABI_LONG(0x10000000)\n\n/*****************************************************************************\n * Flags for SetPrivateData\n */\n#define D3DSPD_IUNKNOWN                         __MSABI_LONG(0x00000001)\n\n\n/*****************************************************************************\n * #defines and error codes\n */\n#define D3D_SDK_VERSION                         32\n#define D3DADAPTER_DEFAULT                      0\n#define D3DENUM_NO_WHQL_LEVEL                   __MSABI_LONG(0x00000002)\n#define D3DPRESENT_DONOTWAIT                    __MSABI_LONG(1)\n#define D3DPRESENT_LINEAR_CONTENT               __MSABI_LONG(2)\n#define D3DPRESENT_BACK_BUFFERS_MAX             __MSABI_LONG(3)\n#define D3DSGR_NO_CALIBRATION                   __MSABI_LONG(0x00000000)\n#define D3DSGR_CALIBRATE                        __MSABI_LONG(0x00000001)\n\n#define _FACD3D  0x876\n#define MAKE_D3DHRESULT( code )                 MAKE_HRESULT( 1, _FACD3D, code )\n#define MAKE_D3DSTATUS( code )                  MAKE_HRESULT( 0, _FACD3D, code )\n\n/*****************************************************************************\n * Direct3D Errors\n */\n#define D3D_OK                                  S_OK\n#define D3DERR_WRONGTEXTUREFORMAT               MAKE_D3DHRESULT(2072)\n#define D3DERR_UNSUPPORTEDCOLOROPERATION        MAKE_D3DHRESULT(2073)\n#define D3DERR_UNSUPPORTEDCOLORARG              MAKE_D3DHRESULT(2074)\n#define D3DERR_UNSUPPORTEDALPHAOPERATION        MAKE_D3DHRESULT(2075)\n#define D3DERR_UNSUPPORTEDALPHAARG              MAKE_D3DHRESULT(2076)\n#define D3DERR_TOOMANYOPERATIONS                MAKE_D3DHRESULT(2077)\n#define D3DERR_CONFLICTINGTEXTUREFILTER         MAKE_D3DHRESULT(2078)\n#define D3DERR_UNSUPPORTEDFACTORVALUE           MAKE_D3DHRESULT(2079)\n#define D3DERR_CONFLICTINGRENDERSTATE           MAKE_D3DHRESULT(2081)\n#define D3DERR_UNSUPPORTEDTEXTUREFILTER         MAKE_D3DHRESULT(2082)\n#define D3DERR_CONFLICTINGTEXTUREPALETTE        MAKE_D3DHRESULT(2086)\n#define D3DERR_DRIVERINTERNALERROR              MAKE_D3DHRESULT(2087)\n#define D3DERR_NOTFOUND                         MAKE_D3DHRESULT(2150)\n#define D3DERR_MOREDATA                         MAKE_D3DHRESULT(2151)\n#define D3DERR_DEVICELOST                       MAKE_D3DHRESULT(2152)\n#define D3DERR_DEVICENOTRESET                   MAKE_D3DHRESULT(2153)\n#define D3DERR_NOTAVAILABLE                     MAKE_D3DHRESULT(2154)\n#define D3DERR_OUTOFVIDEOMEMORY                 MAKE_D3DHRESULT(380)\n#define D3DERR_INVALIDDEVICE                    MAKE_D3DHRESULT(2155)\n#define D3DERR_INVALIDCALL                      MAKE_D3DHRESULT(2156)\n#define D3DERR_DRIVERINVALIDCALL                MAKE_D3DHRESULT(2157)\n#define D3DERR_WASSTILLDRAWING                  MAKE_D3DHRESULT(540)\n#define D3DOK_NOAUTOGEN                         MAKE_D3DSTATUS(2159)\n\n#define D3DERR_DEVICEREMOVED                    MAKE_D3DHRESULT(2160)\n#define D3DERR_DEVICEHUNG                       MAKE_D3DHRESULT(2164)\n#define S_NOT_RESIDENT                          MAKE_D3DSTATUS(2165)\n#define S_RESIDENT_IN_SHARED_MEMORY             MAKE_D3DSTATUS(2166)\n#define S_PRESENT_MODE_CHANGED                  MAKE_D3DSTATUS(2167)\n#define S_PRESENT_OCCLUDED                      MAKE_D3DSTATUS(2168)\n#define D3DERR_UNSUPPORTEDOVERLAY               MAKE_D3DHRESULT(2171)\n#define D3DERR_UNSUPPORTEDOVERLAYFORMAT         MAKE_D3DHRESULT(2172)\n#define D3DERR_CANNOTPROTECTCONTENT             MAKE_D3DHRESULT(2173)\n#define D3DERR_UNSUPPORTEDCRYPTO                MAKE_D3DHRESULT(2174)\n#define D3DERR_PRESENT_STATISTICS_DISJOINT      MAKE_D3DHRESULT(2180)\n\n\n/*****************************************************************************\n * Predeclare the interfaces\n */\nDEFINE_GUID(IID_IDirect3D9,                   0x81BDCBCA, 0x64D4, 0x426D, 0xAE, 0x8D, 0xAD, 0x1, 0x47, 0xF4, 0x27, 0x5C);\ntypedef struct IDirect3D9 *LPDIRECT3D9, *PDIRECT3D9;\n\nDEFINE_GUID(IID_IDirect3DDevice9,             0xd0223b96, 0xbf7a, 0x43fd, 0x92, 0xbd, 0xa4, 0x3b, 0xd, 0x82, 0xb9, 0xeb);\ntypedef struct IDirect3DDevice9 *LPDIRECT3DDEVICE9;\n\nDEFINE_GUID(IID_IDirect3DResource9,           0x5eec05d, 0x8f7d, 0x4362, 0xb9, 0x99, 0xd1, 0xba, 0xf3, 0x57, 0xc7, 0x4);\ntypedef struct IDirect3DResource9 *LPDIRECT3DRESOURCE9, *PDIRECT3DRESOURCE9;\n\nDEFINE_GUID(IID_IDirect3DVertexBuffer9,       0xb64bb1b5, 0xfd70, 0x4df6, 0xbf, 0x91, 0x19, 0xd0, 0xa1, 0x24, 0x55, 0xe3);\ntypedef struct IDirect3DVertexBuffer9 *LPDIRECT3DVERTEXBUFFER9, *PDIRECT3DVERTEXBUFFER9;\n\nDEFINE_GUID(IID_IDirect3DVolume9,             0x24f416e6, 0x1f67, 0x4aa7, 0xb8, 0x8e, 0xd3, 0x3f, 0x6f, 0x31, 0x28, 0xa1);\ntypedef struct IDirect3DVolume9 *LPDIRECT3DVOLUME9, *PDIRECT3DVOLUME9;\n\nDEFINE_GUID(IID_IDirect3DSwapChain9,          0x794950f2, 0xadfc, 0x458a, 0x90, 0x5e, 0x10, 0xa1, 0xb, 0xb, 0x50, 0x3b);\ntypedef struct IDirect3DSwapChain9 *LPDIRECT3DSWAPCHAIN9, *PDIRECT3DSWAPCHAIN9;\n\nDEFINE_GUID(IID_IDirect3DSurface9,            0xcfbaf3a, 0x9ff6, 0x429a, 0x99, 0xb3, 0xa2, 0x79, 0x6a, 0xf8, 0xb8, 0x9b);\ntypedef struct IDirect3DSurface9 *LPDIRECT3DSURFACE9, *PDIRECT3DSURFACE9;\n\nDEFINE_GUID(IID_IDirect3DIndexBuffer9,        0x7c9dd65e, 0xd3f7, 0x4529, 0xac, 0xee, 0x78, 0x58, 0x30, 0xac, 0xde, 0x35);\ntypedef struct IDirect3DIndexBuffer9 *LPDIRECT3DINDEXBUFFER9, *PDIRECT3DINDEXBUFFER9;\n\nDEFINE_GUID(IID_IDirect3DBaseTexture9,        0x580ca87e, 0x1d3c, 0x4d54, 0x99, 0x1d, 0xb7, 0xd3, 0xe3, 0xc2, 0x98, 0xce);\ntypedef struct IDirect3DBaseTexture9 *LPDIRECT3DBASETEXTURE9, *PDIRECT3DBASETEXTURE9;\n\nDEFINE_GUID(IID_IDirect3DTexture9,            0x85c31227, 0x3de5, 0x4f00, 0x9b, 0x3a, 0xf1, 0x1a, 0xc3, 0x8c, 0x18, 0xb5);\ntypedef struct IDirect3DTexture9 *LPDIRECT3DTEXTURE9, *PDIRECT3DTEXTURE9;\n\nDEFINE_GUID(IID_IDirect3DCubeTexture9,        0xfff32f81, 0xd953, 0x473a, 0x92, 0x23, 0x93, 0xd6, 0x52, 0xab, 0xa9, 0x3f);\ntypedef struct IDirect3DCubeTexture9 *LPDIRECT3DCUBETEXTURE9, *PDIRECT3DCUBETEXTURE9;\n\nDEFINE_GUID(IID_IDirect3DVolumeTexture9,      0x2518526c, 0xe789, 0x4111, 0xa7, 0xb9, 0x47, 0xef, 0x32, 0x8d, 0x13, 0xe6);\ntypedef struct IDirect3DVolumeTexture9 *LPDIRECT3DVOLUMETEXTURE9, *PDIRECT3DVOLUMETEXTURE9;\n\nDEFINE_GUID(IID_IDirect3DVertexDeclaration9,  0xdd13c59c, 0x36fa, 0x4098, 0xa8, 0xfb, 0xc7, 0xed, 0x39, 0xdc, 0x85, 0x46);\ntypedef struct IDirect3DVertexDeclaration9 *LPDIRECT3DVERTEXDECLARATION9;\n\nDEFINE_GUID(IID_IDirect3DVertexShader9,       0xefc5557e, 0x6265, 0x4613, 0x8a, 0x94, 0x43, 0x85, 0x78, 0x89, 0xeb, 0x36);\ntypedef struct IDirect3DVertexShader9 *LPDIRECT3DVERTEXSHADER9;\n\nDEFINE_GUID(IID_IDirect3DPixelShader9,        0x6d3bdbdc, 0x5b02, 0x4415, 0xb8, 0x52, 0xce, 0x5e, 0x8b, 0xcc, 0xb2, 0x89);\ntypedef struct IDirect3DPixelShader9 *LPDIRECT3DPIXELSHADER9;\n\nDEFINE_GUID(IID_IDirect3DStateBlock9,         0xb07c4fe5, 0x310d, 0x4ba8, 0xa2, 0x3c, 0x4f, 0xf, 0x20, 0x6f, 0x21, 0x8b);\ntypedef struct IDirect3DStateBlock9 *LPDIRECT3DSTATEBLOCK9;\n\nDEFINE_GUID(IID_IDirect3DQuery9,              0xd9771460, 0xa695, 0x4f26, 0xbb, 0xd3, 0x27, 0xb8, 0x40, 0xb5, 0x41, 0xcc);\ntypedef struct IDirect3DQuery9 *LPDIRECT3DQUERY9, *PDIRECT3DQUERY9;\n\n/*****************************************************************************\n * IDirect3D9 interface\n */\n#undef INTERFACE\n#define INTERFACE IDirect3D9\nDECLARE_INTERFACE_(IDirect3D9,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3D9 methods ***/\n    STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE;\n    STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE;\n    STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9* pIdentifier) PURE;\n    STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter, D3DFORMAT Format) PURE;\n    STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter, D3DFORMAT Format, UINT Mode, D3DDISPLAYMODE* pMode) PURE;\n    STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter, D3DDISPLAYMODE* pMode) PURE;\n    STDMETHOD(CheckDeviceType)(THIS_ UINT iAdapter, D3DDEVTYPE DevType, D3DFORMAT DisplayFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) PURE;\n    STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat) PURE;\n    STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat, BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType, DWORD* pQualityLevels) PURE;\n    STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat) PURE;\n    STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SourceFormat, D3DFORMAT TargetFormat) PURE;\n    STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9* pCaps) PURE;\n    STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE;\n    STDMETHOD(CreateDevice)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, struct IDirect3DDevice9** ppReturnedDeviceInterface) PURE;\n};\n#undef INTERFACE\n\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(IDirect3D9,                   0x81BDCBCA, 0x64D4, 0x426D, 0xAE, 0x8D, 0xAD, 0x1, 0x47, 0xF4, 0x27, 0x5C);\n#endif\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3D9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3D9_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirect3D9_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirect3D9 methods ***/\n#define IDirect3D9_RegisterSoftwareDevice(p,a)                (p)->lpVtbl->RegisterSoftwareDevice(p,a)\n#define IDirect3D9_GetAdapterCount(p)                         (p)->lpVtbl->GetAdapterCount(p)\n#define IDirect3D9_GetAdapterIdentifier(p,a,b,c)              (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)\n#define IDirect3D9_GetAdapterModeCount(p,a,b)                 (p)->lpVtbl->GetAdapterModeCount(p,a,b)\n#define IDirect3D9_EnumAdapterModes(p,a,b,c,d)                (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d)\n#define IDirect3D9_GetAdapterDisplayMode(p,a,b)               (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)\n#define IDirect3D9_CheckDeviceType(p,a,b,c,d,e)               (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)\n#define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f)           (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)\n#define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f)  (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f)\n#define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e)        (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)\n#define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d)     (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d)\n#define IDirect3D9_GetDeviceCaps(p,a,b,c)                     (p)->lpVtbl->GetDeviceCaps(p,a,b,c)\n#define IDirect3D9_GetAdapterMonitor(p,a)                     (p)->lpVtbl->GetAdapterMonitor(p,a)\n#define IDirect3D9_CreateDevice(p,a,b,c,d,e,f)                (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)\n#else\n/*** IUnknown methods ***/\n#define IDirect3D9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3D9_AddRef(p)             (p)->AddRef()\n#define IDirect3D9_Release(p)            (p)->Release()\n/*** IDirect3D9 methods ***/\n#define IDirect3D9_RegisterSoftwareDevice(p,a)                (p)->RegisterSoftwareDevice(a)\n#define IDirect3D9_GetAdapterCount(p)                         (p)->GetAdapterCount()\n#define IDirect3D9_GetAdapterIdentifier(p,a,b,c)              (p)->GetAdapterIdentifier(a,b,c)\n#define IDirect3D9_GetAdapterModeCount(p,a,b)                 (p)->GetAdapterModeCount(a,b)\n#define IDirect3D9_EnumAdapterModes(p,a,b,c,d)                (p)->EnumAdapterModes(a,b,c,d)\n#define IDirect3D9_GetAdapterDisplayMode(p,a,b)               (p)->GetAdapterDisplayMode(a,b)\n#define IDirect3D9_CheckDeviceType(p,a,b,c,d,e)               (p)->CheckDeviceType(a,b,c,d,e)\n#define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f)           (p)->CheckDeviceFormat(a,b,c,d,e,f)\n#define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f)  (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f)\n#define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e)        (p)->CheckDepthStencilMatch(a,b,c,d,e)\n#define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d)     (p)->CheckDeviceFormatConversion(a,b,c,d)\n#define IDirect3D9_GetDeviceCaps(p,a,b,c)                     (p)->GetDeviceCaps(a,b,c)\n#define IDirect3D9_GetAdapterMonitor(p,a)                     (p)->GetAdapterMonitor(a)\n#define IDirect3D9_CreateDevice(p,a,b,c,d,e,f)                (p)->CreateDevice(a,b,c,d,e,f)\n#endif\n\n/*****************************************************************************\n * IDirect3DVolume9 interface\n */\n#define INTERFACE IDirect3DVolume9\nDECLARE_INTERFACE_(IDirect3DVolume9,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DVolume9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD(GetContainer)(THIS_ REFIID riid, void** ppContainer) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3DVOLUME_DESC* pDesc) PURE;\n    STDMETHOD(LockBox)(THIS_ D3DLOCKED_BOX *locked_box, const D3DBOX *box, DWORD flags) PURE;\n    STDMETHOD(UnlockBox)(THIS) PURE;\n};\n#undef INTERFACE\n\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(IDirect3DVolume9,             0x24f416e6, 0x1f67, 0x4aa7, 0xb8, 0x8e, 0xd3, 0x3f, 0x6f, 0x31, 0x28, 0xa1);\n#endif\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DVolume9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DVolume9_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DVolume9_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DVolume9 methods ***/\n#define IDirect3DVolume9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DVolume9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DVolume9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DVolume9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DVolume9_GetContainer(p,a,b)          (p)->lpVtbl->GetContainer(p,a,b)\n#define IDirect3DVolume9_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)\n#define IDirect3DVolume9_LockBox(p,a,b,c)             (p)->lpVtbl->LockBox(p,a,b,c)\n#define IDirect3DVolume9_UnlockBox(p)                 (p)->lpVtbl->UnlockBox(p)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DVolume9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DVolume9_AddRef(p)                    (p)->AddRef()\n#define IDirect3DVolume9_Release(p)                   (p)->Release()\n/*** IDirect3DVolume9 methods ***/\n#define IDirect3DVolume9_GetDevice(p,a)               (p)->GetDevice(a)\n#define IDirect3DVolume9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DVolume9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)\n#define IDirect3DVolume9_FreePrivateData(p,a)         (p)->FreePrivateData(a)\n#define IDirect3DVolume9_GetContainer(p,a,b)          (p)->GetContainer(a,b)\n#define IDirect3DVolume9_GetDesc(p,a)                 (p)->GetDesc(a)\n#define IDirect3DVolume9_LockBox(p,a,b,c)             (p)->LockBox(a,b,c)\n#define IDirect3DVolume9_UnlockBox(p)                 (p)->UnlockBox()\n#endif\n\n/*****************************************************************************\n * IDirect3DSwapChain9 interface\n */\n#define INTERFACE IDirect3DSwapChain9\nDECLARE_INTERFACE_(IDirect3DSwapChain9,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DSwapChain9 methods ***/\n    STDMETHOD(Present)(THIS_ const RECT *src_rect, const RECT *dst_rect, HWND dst_window_override,\n            const RGNDATA *dirty_region, DWORD flags) PURE;\n    STDMETHOD(GetFrontBufferData)(THIS_ struct IDirect3DSurface9 *pDestSurface) PURE;\n    STDMETHOD(GetBackBuffer)(THIS_ UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, struct IDirect3DSurface9 **ppBackBuffer) PURE;\n    STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS *pRasterStatus) PURE;\n    STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE *pMode) PURE;\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **ppDevice) PURE;\n    STDMETHOD(GetPresentParameters)(THIS_ D3DPRESENT_PARAMETERS *pPresentationParameters) PURE;\n};\n#undef INTERFACE\n\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(IDirect3DSwapChain9,          0x794950f2, 0xadfc, 0x458a, 0x90, 0x5e, 0x10, 0xa1, 0xb, 0xb, 0x50, 0x3b);\n#endif\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DSwapChain9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DSwapChain9_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DSwapChain9_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DSwapChain9 methods ***/\n#define IDirect3DSwapChain9_Present(p,a,b,c,d,e)         (p)->lpVtbl->Present(p,a,b,c,d,e)\n#define IDirect3DSwapChain9_GetFrontBufferData(p,a)      (p)->lpVtbl->GetFrontBufferData(p,a)\n#define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c)       (p)->lpVtbl->GetBackBuffer(p,a,b,c)\n#define IDirect3DSwapChain9_GetRasterStatus(p,a)         (p)->lpVtbl->GetRasterStatus(p,a)\n#define IDirect3DSwapChain9_GetDisplayMode(p,a)          (p)->lpVtbl->GetDisplayMode(p,a)\n#define IDirect3DSwapChain9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DSwapChain9_GetPresentParameters(p,a)    (p)->lpVtbl->GetPresentParameters(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DSwapChain9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DSwapChain9_AddRef(p)                    (p)->AddRef()\n#define IDirect3DSwapChain9_Release(p)                   (p)->Release()\n/*** IDirect3DSwapChain9 methods ***/\n#define IDirect3DSwapChain9_Present(p,a,b,c,d,e)         (p)->Present(a,b,c,d,e)\n#define IDirect3DSwapChain9_GetFrontBufferData(p,a)      (p)->GetFrontBufferData(a)\n#define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c)       (p)->GetBackBuffer(a,b,c)\n#define IDirect3DSwapChain9_GetRasterStatus(p,a)         (p)->GetRasterStatus(a)\n#define IDirect3DSwapChain9_GetDisplayMode(p,a)          (p)->GetDisplayMode(a)\n#define IDirect3DSwapChain9_GetDevice(p,a)               (p)->GetDevice(a)\n#define IDirect3DSwapChain9_GetPresentParameters(p,a)    (p)->GetPresentParameters(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DResource9 interface\n */\n#define INTERFACE IDirect3DResource9\nDECLARE_INTERFACE_(IDirect3DResource9,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DResource9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n};\n#undef INTERFACE\n\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(IDirect3DResource9,           0x5eec05d, 0x8f7d, 0x4362, 0xb9, 0x99, 0xd1, 0xba, 0xf3, 0x57, 0xc7, 0x4);\n#endif\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DResource9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DResource9_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DResource9_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DResource9 methods ***/\n#define IDirect3DResource9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DResource9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DResource9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DResource9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DResource9_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DResource9_GetPriority(p)               (p)->lpVtbl->GetPriority(p)\n#define IDirect3DResource9_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)\n#define IDirect3DResource9_GetType(p)                   (p)->lpVtbl->GetType(p)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DResource9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DResource9_AddRef(p)                    (p)->AddRef()\n#define IDirect3DResource9_Release(p)                   (p)->Release()\n/*** IDirect3DResource9 methods ***/\n#define IDirect3DResource9_GetDevice(p,a)               (p)->GetDevice(a)\n#define IDirect3DResource9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DResource9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)\n#define IDirect3DResource9_FreePrivateData(p,a)         (p)->FreePrivateData(a)\n#define IDirect3DResource9_SetPriority(p,a)             (p)->SetPriority(a)\n#define IDirect3DResource9_GetPriority(p)               (p)->GetPriority()\n#define IDirect3DResource9_PreLoad(p)                   (p)->PreLoad()\n#define IDirect3DResource9_GetType(p)                   (p)->GetType()\n#endif\n\n/*****************************************************************************\n * IDirect3DSurface9 interface\n */\n#define INTERFACE IDirect3DSurface9\nDECLARE_INTERFACE_(IDirect3DSurface9,IDirect3DResource9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DResource9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    /*** IDirect3DSurface9 methods ***/\n    STDMETHOD(GetContainer)(THIS_ REFIID riid, void** ppContainer) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3DSURFACE_DESC* pDesc) PURE;\n    STDMETHOD(LockRect)(THIS_ D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) PURE;\n    STDMETHOD(UnlockRect)(THIS) PURE;\n    STDMETHOD(GetDC)(THIS_ HDC* phdc) PURE;\n    STDMETHOD(ReleaseDC)(THIS_ HDC hdc) PURE;\n};\n#undef INTERFACE\n\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(IDirect3DSurface9,            0xcfbaf3a, 0x9ff6, 0x429a, 0x99, 0xb3, 0xa2, 0x79, 0x6a, 0xf8, 0xb8, 0x9b);\n#endif\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DSurface9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DSurface9_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DSurface9_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DSurface9 methods: IDirect3DResource9 ***/\n#define IDirect3DSurface9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DSurface9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DSurface9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DSurface9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DSurface9_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DSurface9_GetPriority(p)               (p)->lpVtbl->GetPriority(p)\n#define IDirect3DSurface9_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)\n#define IDirect3DSurface9_GetType(p)                   (p)->lpVtbl->GetType(p)\n/*** IDirect3DSurface9 methods ***/\n#define IDirect3DSurface9_GetContainer(p,a,b)          (p)->lpVtbl->GetContainer(p,a,b)\n#define IDirect3DSurface9_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)\n#define IDirect3DSurface9_LockRect(p,a,b,c)            (p)->lpVtbl->LockRect(p,a,b,c)\n#define IDirect3DSurface9_UnlockRect(p)                (p)->lpVtbl->UnlockRect(p)\n#define IDirect3DSurface9_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)\n#define IDirect3DSurface9_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DSurface9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DSurface9_AddRef(p)                    (p)->AddRef()\n#define IDirect3DSurface9_Release(p)                   (p)->Release()\n/*** IDirect3DSurface9 methods: IDirect3DResource9 ***/\n#define IDirect3DSurface9_GetDevice(p,a)               (p)->GetDevice(a)\n#define IDirect3DSurface9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DSurface9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)\n#define IDirect3DSurface9_FreePrivateData(p,a)         (p)->FreePrivateData(a)\n#define IDirect3DSurface9_SetPriority(p,a)             (p)->SetPriority(a)\n#define IDirect3DSurface9_GetPriority(p)               (p)->GetPriority()\n#define IDirect3DSurface9_PreLoad(p)                   (p)->PreLoad()\n#define IDirect3DSurface9_GetType(p)                   (p)->GetType()\n/*** IDirect3DSurface9 methods ***/\n#define IDirect3DSurface9_GetContainer(p,a,b)          (p)->GetContainer(a,b)\n#define IDirect3DSurface9_GetDesc(p,a)                 (p)->GetDesc(a)\n#define IDirect3DSurface9_LockRect(p,a,b,c)            (p)->LockRect(a,b,c)\n#define IDirect3DSurface9_UnlockRect(p)                (p)->UnlockRect()\n#define IDirect3DSurface9_GetDC(p,a)                   (p)->GetDC(a)\n#define IDirect3DSurface9_ReleaseDC(p,a)               (p)->ReleaseDC(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DVertexBuffer9 interface\n */\n#define INTERFACE IDirect3DVertexBuffer9\nDECLARE_INTERFACE_(IDirect3DVertexBuffer9,IDirect3DResource9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DResource9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    /*** IDirect3DVertexBuffer9 methods ***/\n    STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, void** ppbData, DWORD Flags) PURE;\n    STDMETHOD(Unlock)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC* pDesc) PURE;\n};\n#undef INTERFACE\n\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(IDirect3DVertexBuffer9,       0xb64bb1b5, 0xfd70, 0x4df6, 0xbf, 0x91, 0x19, 0xd0, 0xa1, 0x24, 0x55, 0xe3);\n#endif\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DVertexBuffer9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DVertexBuffer9_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DVertexBuffer9_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DVertexBuffer9 methods: IDirect3DResource9 ***/\n#define IDirect3DVertexBuffer9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DVertexBuffer9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DVertexBuffer9_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DVertexBuffer9_GetPriority(p)               (p)->lpVtbl->GetPriority(p)\n#define IDirect3DVertexBuffer9_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)\n#define IDirect3DVertexBuffer9_GetType(p)                   (p)->lpVtbl->GetType(p)\n/*** IDirect3DVertexBuffer9 methods ***/\n#define IDirect3DVertexBuffer9_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)\n#define IDirect3DVertexBuffer9_Unlock(p)                    (p)->lpVtbl->Unlock(p)\n#define IDirect3DVertexBuffer9_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DVertexBuffer9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DVertexBuffer9_AddRef(p)                    (p)->AddRef()\n#define IDirect3DVertexBuffer9_Release(p)                   (p)->Release()\n/*** IDirect3DVertexBuffer9 methods: IDirect3DResource9 ***/\n#define IDirect3DVertexBuffer9_GetDevice(p,a)               (p)->GetDevice(a)\n#define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)\n#define IDirect3DVertexBuffer9_FreePrivateData(p,a)         (p)->FreePrivateData(a)\n#define IDirect3DVertexBuffer9_SetPriority(p,a)             (p)->SetPriority(a)\n#define IDirect3DVertexBuffer9_GetPriority(p)               (p)->GetPriority()\n#define IDirect3DVertexBuffer9_PreLoad(p)                   (p)->PreLoad()\n#define IDirect3DVertexBuffer9_GetType(p)                   (p)->GetType()\n/*** IDirect3DVertexBuffer9 methods ***/\n#define IDirect3DVertexBuffer9_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)\n#define IDirect3DVertexBuffer9_Unlock(p)                    (p)->Unlock()\n#define IDirect3DVertexBuffer9_GetDesc(p,a)                 (p)->GetDesc(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DIndexBuffer9 interface\n */\n#define INTERFACE IDirect3DIndexBuffer9\nDECLARE_INTERFACE_(IDirect3DIndexBuffer9,IDirect3DResource9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DResource9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    /*** IDirect3DIndexBuffer9 methods ***/\n    STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, void** ppbData, DWORD Flags) PURE;\n    STDMETHOD(Unlock)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3DINDEXBUFFER_DESC* pDesc) PURE;\n};\n#undef INTERFACE\n\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(IDirect3DIndexBuffer9,        0x7c9dd65e, 0xd3f7, 0x4529, 0xac, 0xee, 0x78, 0x58, 0x30, 0xac, 0xde, 0x35);\n#endif\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DIndexBuffer9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DIndexBuffer9_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DIndexBuffer9_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DIndexBuffer9 methods: IDirect3DResource9 ***/\n#define IDirect3DIndexBuffer9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DIndexBuffer9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DIndexBuffer9_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DIndexBuffer9_GetPriority(p)               (p)->lpVtbl->GetPriority(p)\n#define IDirect3DIndexBuffer9_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)\n#define IDirect3DIndexBuffer9_GetType(p)                   (p)->lpVtbl->GetType(p)\n/*** IDirect3DIndexBuffer9 methods ***/\n#define IDirect3DIndexBuffer9_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)\n#define IDirect3DIndexBuffer9_Unlock(p)                    (p)->lpVtbl->Unlock(p)\n#define IDirect3DIndexBuffer9_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DIndexBuffer9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DIndexBuffer9_AddRef(p)                    (p)->AddRef()\n#define IDirect3DIndexBuffer9_Release(p)                   (p)->Release()\n/*** IDirect3DIndexBuffer9 methods: IDirect3DResource9 ***/\n#define IDirect3DIndexBuffer9_GetDevice(p,a)               (p)->GetDevice(a)\n#define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)\n#define IDirect3DIndexBuffer9_FreePrivateData(p,a)         (p)->FreePrivateData(a)\n#define IDirect3DIndexBuffer9_SetPriority(p,a)             (p)->SetPriority(a)\n#define IDirect3DIndexBuffer9_GetPriority(p)               (p)->GetPriority()\n#define IDirect3DIndexBuffer9_PreLoad(p)                   (p)->PreLoad()\n#define IDirect3DIndexBuffer9_GetType(p)                   (p)->GetType()\n/*** IDirect3DIndexBuffer9 methods ***/\n#define IDirect3DIndexBuffer9_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)\n#define IDirect3DIndexBuffer9_Unlock(p)                    (p)->Unlock()\n#define IDirect3DIndexBuffer9_GetDesc(p,a)                 (p)->GetDesc(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DBaseTexture9 interface\n */\n#define INTERFACE IDirect3DBaseTexture9\nDECLARE_INTERFACE_(IDirect3DBaseTexture9,IDirect3DResource9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DResource9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    /*** IDirect3DBaseTexture9 methods ***/\n    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;\n    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;\n    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;\n    STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;\n    STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;\n    STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;\n};\n#undef INTERFACE\n\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(IDirect3DBaseTexture9,        0x580ca87e, 0x1d3c, 0x4d54, 0x99, 0x1d, 0xb7, 0xd3, 0xe3, 0xc2, 0x98, 0xce);\n#endif\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DBaseTexture9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DBaseTexture9_AddRef(p)              (p)->lpVtbl->AddRef(p)\n#define IDirect3DBaseTexture9_Release(p)             (p)->lpVtbl->Release(p)\n/*** IDirect3DBaseTexture9 methods: IDirect3DResource9 ***/\n#define IDirect3DBaseTexture9_GetDevice(p,a)             (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d)  (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c)    (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DBaseTexture9_FreePrivateData(p,a)       (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DBaseTexture9_SetPriority(p,a)           (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DBaseTexture9_GetPriority(p)             (p)->lpVtbl->GetPriority(p)\n#define IDirect3DBaseTexture9_PreLoad(p)                 (p)->lpVtbl->PreLoad(p)\n#define IDirect3DBaseTexture9_GetType(p)                 (p)->lpVtbl->GetType(p)\n/*** IDirect3DBaseTexture9 methods ***/\n#define IDirect3DBaseTexture9_SetLOD(p,a)                (p)->lpVtbl->SetLOD(p,a)\n#define IDirect3DBaseTexture9_GetLOD(p)                  (p)->lpVtbl->GetLOD(p)\n#define IDirect3DBaseTexture9_GetLevelCount(p)           (p)->lpVtbl->GetLevelCount(p)\n#define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a)  (p)->lpVtbl->SetAutoGenFilterType(p,a)\n#define IDirect3DBaseTexture9_GetAutoGenFilterType(p)    (p)->lpVtbl->GetAutoGenFilterType(p)\n#define IDirect3DBaseTexture9_GenerateMipSubLevels(p)    (p)->lpVtbl->GenerateMipSubLevels(p)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DBaseTexture9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)\n#define IDirect3DBaseTexture9_AddRef(p)              (p)->AddRef()\n#define IDirect3DBaseTexture9_Release(p)             (p)->Release()\n/*** IDirect3DBaseTexture9 methods: IDirect3DResource9 ***/\n#define IDirect3DBaseTexture9_GetDevice(p,a)             (p)->GetDevice(a)\n#define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d)  (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c)    (p)->GetPrivateData(a,b,c)\n#define IDirect3DBaseTexture9_FreePrivateData(p,a)       (p)->FreePrivateData(a)\n#define IDirect3DBaseTexture9_SetPriority(p,a)           (p)->SetPriority(a)\n#define IDirect3DBaseTexture9_GetPriority(p)             (p)->GetPriority()\n#define IDirect3DBaseTexture9_PreLoad(p)                 (p)->PreLoad()\n#define IDirect3DBaseTexture9_GetType(p)                 (p)->GetType()\n/*** IDirect3DBaseTexture9 methods ***/\n#define IDirect3DBaseTexture9_SetLOD(p,a)                (p)->SetLOD(a)\n#define IDirect3DBaseTexture9_GetLOD(p)                  (p)->GetLOD()\n#define IDirect3DBaseTexture9_GetLevelCount(p)           (p)->GetLevelCount()\n#define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a)  (p)->SetAutoGenFilterType(a)\n#define IDirect3DBaseTexture9_GetAutoGenFilterType(p)    (p)->GetAutoGenFilterType()\n#define IDirect3DBaseTexture9_GenerateMipSubLevels(p)    (p)->GenerateMipSubLevels()\n#endif\n\n/*****************************************************************************\n * IDirect3DCubeTexture9 interface\n */\n#define INTERFACE IDirect3DCubeTexture9\nDECLARE_INTERFACE_(IDirect3DCubeTexture9,IDirect3DBaseTexture9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DResource9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    /*** IDirect3DBaseTexture9 methods ***/\n    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;\n    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;\n    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;\n    STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;\n    STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;\n    STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;\n    /*** IDirect3DCubeTexture9 methods ***/\n    STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC* pDesc) PURE;\n    STDMETHOD(GetCubeMapSurface)(THIS_ D3DCUBEMAP_FACES FaceType, UINT Level, IDirect3DSurface9** ppCubeMapSurface) PURE;\n    STDMETHOD(LockRect)(THIS_ D3DCUBEMAP_FACES face, UINT level,\n            D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) PURE;\n    STDMETHOD(UnlockRect)(THIS_ D3DCUBEMAP_FACES FaceType, UINT Level) PURE;\n    STDMETHOD(AddDirtyRect)(THIS_ D3DCUBEMAP_FACES face, const RECT *dirty_rect) PURE;\n};\n#undef INTERFACE\n\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(IDirect3DCubeTexture9,        0xfff32f81, 0xd953, 0x473a, 0x92, 0x23, 0x93, 0xd6, 0x52, 0xab, 0xa9, 0x3f);\n#endif\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DCubeTexture9_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DCubeTexture9_AddRef(p)                   (p)->lpVtbl->AddRef(p)\n#define IDirect3DCubeTexture9_Release(p)                  (p)->lpVtbl->Release(p)\n/*** IDirect3DCubeTexture9 methods: IDirect3DResource9 ***/\n#define IDirect3DCubeTexture9_GetDevice(p,a)              (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d)   (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c)     (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DCubeTexture9_FreePrivateData(p,a)        (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DCubeTexture9_SetPriority(p,a)            (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DCubeTexture9_GetPriority(p)              (p)->lpVtbl->GetPriority(p)\n#define IDirect3DCubeTexture9_PreLoad(p)                  (p)->lpVtbl->PreLoad(p)\n#define IDirect3DCubeTexture9_GetType(p)                  (p)->lpVtbl->GetType(p)\n/*** IDirect3DCubeTexture9 methods: IDirect3DBaseTexture9 ***/\n#define IDirect3DCubeTexture9_SetLOD(p,a)                 (p)->lpVtbl->SetLOD(p,a)\n#define IDirect3DCubeTexture9_GetLOD(p)                   (p)->lpVtbl->GetLOD(p)\n#define IDirect3DCubeTexture9_GetLevelCount(p)            (p)->lpVtbl->GetLevelCount(p)\n#define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a)   (p)->lpVtbl->SetAutoGenFilterType(p,a)\n#define IDirect3DCubeTexture9_GetAutoGenFilterType(p)     (p)->lpVtbl->GetAutoGenFilterType(p)\n#define IDirect3DCubeTexture9_GenerateMipSubLevels(p)     (p)->lpVtbl->GenerateMipSubLevels(p)\n/*** IDirect3DCubeTexture9 methods ***/\n#define IDirect3DCubeTexture9_GetLevelDesc(p,a,b)         (p)->lpVtbl->GetLevelDesc(p,a,b)\n#define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c)  (p)->lpVtbl->GetCubeMapSurface(p,a,b,c)\n#define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e)       (p)->lpVtbl->LockRect(p,a,b,c,d,e)\n#define IDirect3DCubeTexture9_UnlockRect(p,a,b)           (p)->lpVtbl->UnlockRect(p,a,b)\n#define IDirect3DCubeTexture9_AddDirtyRect(p,a,b)         (p)->lpVtbl->AddDirtyRect(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DCubeTexture9_QueryInterface(p,a,b)       (p)->QueryInterface(a,b)\n#define IDirect3DCubeTexture9_AddRef(p)                   (p)->AddRef()\n#define IDirect3DCubeTexture9_Release(p)                  (p)->Release()\n/*** IDirect3DCubeTexture9 methods: IDirect3DResource9 ***/\n#define IDirect3DCubeTexture9_GetDevice(p,a)              (p)->GetDevice(a)\n#define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d)   (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c)     (p)->GetPrivateData(a,b,c)\n#define IDirect3DCubeTexture9_FreePrivateData(p,a)        (p)->FreePrivateData(a)\n#define IDirect3DCubeTexture9_SetPriority(p,a)            (p)->SetPriority(a)\n#define IDirect3DCubeTexture9_GetPriority(p)              (p)->GetPriority()\n#define IDirect3DCubeTexture9_PreLoad(p)                  (p)->PreLoad()\n#define IDirect3DCubeTexture9_GetType(p)                  (p)->GetType()\n/*** IDirect3DCubeTexture9 methods: IDirect3DBaseTexture9 ***/\n#define IDirect3DCubeTexture9_SetLOD(p,a)                 (p)->SetLOD(a)\n#define IDirect3DCubeTexture9_GetLOD(p)                   (p)->GetLOD()\n#define IDirect3DCubeTexture9_GetLevelCount(p)            (p)->GetLevelCount()\n#define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a)   (p)->SetAutoGenFilterType(a)\n#define IDirect3DCubeTexture9_GetAutoGenFilterType(p)     (p)->GetAutoGenFilterType()\n#define IDirect3DCubeTexture9_GenerateMipSubLevels(p)     (p)->GenerateMipSubLevels()\n/*** IDirect3DCubeTexture9 methods ***/\n#define IDirect3DCubeTexture9_GetLevelDesc(p,a,b)         (p)->GetLevelDesc(a,b)\n#define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c)  (p)->GetCubeMapSurface(a,b,c)\n#define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e)       (p)->LockRect(a,b,c,d,e)\n#define IDirect3DCubeTexture9_UnlockRect(p,a,b)           (p)->UnlockRect(a,b)\n#define IDirect3DCubeTexture9_AddDirtyRect(p,a,b)         (p)->AddDirtyRect(a,b)\n#endif\n\n/*****************************************************************************\n * IDirect3DTexture9 interface\n */\n#define INTERFACE IDirect3DTexture9\nDECLARE_INTERFACE_(IDirect3DTexture9,IDirect3DBaseTexture9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DResource9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    /*** IDirect3DBaseTexture9 methods ***/\n    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;\n    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;\n    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;\n    STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;\n    STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;\n    STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;\n    /*** IDirect3DTexture9 methods ***/\n    STDMETHOD(GetLevelDesc)(THIS_ UINT Level, D3DSURFACE_DESC* pDesc) PURE;\n    STDMETHOD(GetSurfaceLevel)(THIS_ UINT Level, IDirect3DSurface9** ppSurfaceLevel) PURE;\n    STDMETHOD(LockRect)(THIS_ UINT level, D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) PURE;\n    STDMETHOD(UnlockRect)(THIS_ UINT Level) PURE;\n    STDMETHOD(AddDirtyRect)(THIS_ const RECT *dirty_rect) PURE;\n};\n#undef INTERFACE\n\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(IDirect3DTexture9,            0x85c31227, 0x3de5, 0x4f00, 0x9b, 0x3a, 0xf1, 0x1a, 0xc3, 0x8c, 0x18, 0xb5);\n#endif\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DTexture9_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DTexture9_AddRef(p)                  (p)->lpVtbl->AddRef(p)\n#define IDirect3DTexture9_Release(p)                 (p)->lpVtbl->Release(p)\n/*** IDirect3DTexture9 methods: IDirect3DResource9 ***/\n#define IDirect3DTexture9_GetDevice(p,a)             (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DTexture9_SetPrivateData(p,a,b,c,d)  (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DTexture9_GetPrivateData(p,a,b,c)    (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DTexture9_FreePrivateData(p,a)       (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DTexture9_SetPriority(p,a)           (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DTexture9_GetPriority(p)             (p)->lpVtbl->GetPriority(p)\n#define IDirect3DTexture9_PreLoad(p)                 (p)->lpVtbl->PreLoad(p)\n#define IDirect3DTexture9_GetType(p)                 (p)->lpVtbl->GetType(p)\n/*** IDirect3DTexture9 methods: IDirect3DBaseTexture9 ***/\n#define IDirect3DTexture9_SetLOD(p,a)                (p)->lpVtbl->SetLOD(p,a)\n#define IDirect3DTexture9_GetLOD(p)                  (p)->lpVtbl->GetLOD(p)\n#define IDirect3DTexture9_GetLevelCount(p)           (p)->lpVtbl->GetLevelCount(p)\n#define IDirect3DTexture9_SetAutoGenFilterType(p,a)  (p)->lpVtbl->SetAutoGenFilterType(p,a)\n#define IDirect3DTexture9_GetAutoGenFilterType(p)    (p)->lpVtbl->GetAutoGenFilterType(p)\n#define IDirect3DTexture9_GenerateMipSubLevels(p)    (p)->lpVtbl->GenerateMipSubLevels(p)\n/*** IDirect3DTexture9 methods ***/\n#define IDirect3DTexture9_GetLevelDesc(p,a,b)        (p)->lpVtbl->GetLevelDesc(p,a,b)\n#define IDirect3DTexture9_GetSurfaceLevel(p,a,b)     (p)->lpVtbl->GetSurfaceLevel(p,a,b)\n#define IDirect3DTexture9_LockRect(p,a,b,c,d)        (p)->lpVtbl->LockRect(p,a,b,c,d)\n#define IDirect3DTexture9_UnlockRect(p,a)            (p)->lpVtbl->UnlockRect(p,a)\n#define IDirect3DTexture9_AddDirtyRect(p,a)          (p)->lpVtbl->AddDirtyRect(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DTexture9_QueryInterface(p,a,b)      (p)->QueryInterface(a,b)\n#define IDirect3DTexture9_AddRef(p)                  (p)->AddRef()\n#define IDirect3DTexture9_Release(p)                 (p)->Release()\n/*** IDirect3DTexture9 methods: IDirect3DResource9 ***/\n#define IDirect3DTexture9_GetDevice(p,a)             (p)->GetDevice(a)\n#define IDirect3DTexture9_SetPrivateData(p,a,b,c,d)  (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DTexture9_GetPrivateData(p,a,b,c)    (p)->GetPrivateData(a,b,c)\n#define IDirect3DTexture9_FreePrivateData(p,a)       (p)->FreePrivateData(a)\n#define IDirect3DTexture9_SetPriority(p,a)           (p)->SetPriority(a)\n#define IDirect3DTexture9_GetPriority(p)             (p)->GetPriority()\n#define IDirect3DTexture9_PreLoad(p)                 (p)->PreLoad()\n#define IDirect3DTexture9_GetType(p)                 (p)->GetType()\n/*** IDirect3DTexture9 methods: IDirect3DBaseTexture9 ***/\n#define IDirect3DTexture9_SetLOD(p,a)                (p)->SetLOD(a)\n#define IDirect3DTexture9_GetLOD(p)                  (p)->GetLOD()\n#define IDirect3DTexture9_GetLevelCount(p)           (p)->GetLevelCount()\n#define IDirect3DTexture9_SetAutoGenFilterType(p,a)  (p)->SetAutoGenFilterType(a)\n#define IDirect3DTexture9_GetAutoGenFilterType(p)    (p)->GetAutoGenFilterType()\n#define IDirect3DTexture9_GenerateMipSubLevels(p)    (p)->GenerateMipSubLevels()\n/*** IDirect3DTexture9 methods ***/\n#define IDirect3DTexture9_GetLevelDesc(p,a,b)        (p)->GetLevelDesc(a,b)\n#define IDirect3DTexture9_GetSurfaceLevel(p,a,b)     (p)->GetSurfaceLevel(a,b)\n#define IDirect3DTexture9_LockRect(p,a,b,c,d)        (p)->LockRect(a,b,c,d)\n#define IDirect3DTexture9_UnlockRect(p,a)            (p)->UnlockRect(a)\n#define IDirect3DTexture9_AddDirtyRect(p,a)          (p)->AddDirtyRect(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DVolumeTexture9 interface\n */\n#define INTERFACE IDirect3DVolumeTexture9\nDECLARE_INTERFACE_(IDirect3DVolumeTexture9,IDirect3DBaseTexture9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DResource9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    /*** IDirect3DBaseTexture9 methods ***/\n    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;\n    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;\n    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;\n    STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;\n    STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;\n    STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;\n    /*** IDirect3DVolumeTexture9 methods ***/\n    STDMETHOD(GetLevelDesc)(THIS_ UINT Level, D3DVOLUME_DESC *pDesc) PURE;\n    STDMETHOD(GetVolumeLevel)(THIS_ UINT Level, IDirect3DVolume9** ppVolumeLevel) PURE;\n    STDMETHOD(LockBox)(THIS_ UINT level, D3DLOCKED_BOX *locked_box, const D3DBOX *box, DWORD flags) PURE;\n    STDMETHOD(UnlockBox)(THIS_ UINT Level) PURE;\n    STDMETHOD(AddDirtyBox)(THIS_ const D3DBOX *dirty_box) PURE;\n};\n#undef INTERFACE\n\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(IDirect3DVolumeTexture9,      0x2518526c, 0xe789, 0x4111, 0xa7, 0xb9, 0x47, 0xef, 0x32, 0x8d, 0x13, 0xe6);\n#endif\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DVolumeTexture9_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DVolumeTexture9_Release(p) (p)->lpVtbl->Release(p)\n/*** IDirect3DVolumeTexture9 methods: IDirect3DResource9 ***/\n#define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DVolumeTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p)\n#define IDirect3DVolumeTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p)\n#define IDirect3DVolumeTexture9_GetType(p) (p)->lpVtbl->GetType(p)\n/*** IDirect3DVolumeTexture9 methods: IDirect3DBaseTexture9 ***/\n#define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)\n#define IDirect3DVolumeTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p)\n#define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)\n#define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a)\n#define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p)\n#define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p)\n/*** IDirect3DVolumeTexture9 methods ***/\n#define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)\n#define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->lpVtbl->GetVolumeLevel(p,a,b)\n#define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->lpVtbl->LockBox(p,a,b,c,d)\n#define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->lpVtbl->UnlockBox(p,a)\n#define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->lpVtbl->AddDirtyBox(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DVolumeTexture9_AddRef(p) (p)->AddRef()\n#define IDirect3DVolumeTexture9_Release(p) (p)->Release()\n/*** IDirect3DVolumeTexture9 methods: IDirect3DResource9 ***/\n#define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)\n#define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a)\n#define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->SetPriority(a)\n#define IDirect3DVolumeTexture9_GetPriority(p) (p)->GetPriority()\n#define IDirect3DVolumeTexture9_PreLoad(p) (p)->PreLoad()\n#define IDirect3DVolumeTexture9_GetType(p) (p)->GetType()\n/*** IDirect3DVolumeTexture9 methods: IDirect3DBaseTexture9 ***/\n#define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->SetLOD(a)\n#define IDirect3DVolumeTexture9_GetLOD(p) (p)->GetLOD()\n#define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->GetLevelCount()\n#define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a)\n#define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType()\n#define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels()\n/*** IDirect3DVolumeTexture9 methods ***/\n#define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)\n#define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->GetVolumeLevel(a,b)\n#define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->LockBox(a,b,c,d)\n#define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->UnlockBox(a)\n#define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->AddDirtyBox(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DVertexDeclaration9 interface\n */\n#define INTERFACE IDirect3DVertexDeclaration9\nDECLARE_INTERFACE_(IDirect3DVertexDeclaration9,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DVertexDeclaration9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9*, UINT* pNumElements) PURE;\n};\n#undef INTERFACE\n\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(IDirect3DVertexDeclaration9,  0xdd13c59c, 0x36fa, 0x4098, 0xa8, 0xfb, 0xc7, 0xed, 0x39, 0xdc, 0x85, 0x46);\n#endif\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DVertexDeclaration9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DVertexDeclaration9_AddRef(p)              (p)->lpVtbl->AddRef(p)\n#define IDirect3DVertexDeclaration9_Release(p)             (p)->lpVtbl->Release(p)\n/*** IDirect3DVertexShader9 methods ***/\n#define IDirect3DVertexDeclaration9_GetDevice(p,a)         (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b)  (p)->lpVtbl->GetDeclaration(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DVertexDeclaration9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)\n#define IDirect3DVertexDeclaration9_AddRef(p)              (p)->AddRef()\n#define IDirect3DVertexDeclaration9_Release(p)             (p)->Release()\n/*** IDirect3DVertexShader9 methods ***/\n#define IDirect3DVertexDeclaration9_GetDevice(p,a)         (p)->GetDevice(a)\n#define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b)  (p)->GetDeclaration(a,b)\n#endif\n\n/*****************************************************************************\n * IDirect3DVertexShader9 interface\n */\n#define INTERFACE IDirect3DVertexShader9\nDECLARE_INTERFACE_(IDirect3DVertexShader9,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DVertexShader9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(GetFunction)(THIS_ void*, UINT* pSizeOfData) PURE;\n};\n#undef INTERFACE\n\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(IDirect3DVertexShader9,       0xefc5557e, 0x6265, 0x4613, 0x8a, 0x94, 0x43, 0x85, 0x78, 0x89, 0xeb, 0x36);\n#endif\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DVertexShader9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DVertexShader9_AddRef(p)              (p)->lpVtbl->AddRef(p)\n#define IDirect3DVertexShader9_Release(p)             (p)->lpVtbl->Release(p)\n/*** IDirect3DVertexShader9 methods ***/\n#define IDirect3DVertexShader9_GetDevice(p,a)         (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DVertexShader9_GetFunction(p,a,b)     (p)->lpVtbl->GetFunction(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DVertexShader9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)\n#define IDirect3DVertexShader9_AddRef(p)              (p)->AddRef()\n#define IDirect3DVertexShader9_Release(p)             (p)->Release()\n/*** IDirect3DVertexShader9 methods ***/\n#define IDirect3DVertexShader9_GetDevice(p,a)         (p)->GetDevice(a)\n#define IDirect3DVertexShader9_GetFunction(p,a,b)     (p)->GetFunction(a,b)\n#endif\n\n/*****************************************************************************\n * IDirect3DPixelShader9 interface\n */\n#define INTERFACE IDirect3DPixelShader9\nDECLARE_INTERFACE_(IDirect3DPixelShader9,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DPixelShader9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(GetFunction)(THIS_ void*, UINT* pSizeOfData) PURE;\n};\n#undef INTERFACE\n\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(IDirect3DPixelShader9,        0x6d3bdbdc, 0x5b02, 0x4415, 0xb8, 0x52, 0xce, 0x5e, 0x8b, 0xcc, 0xb2, 0x89);\n#endif\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DPixelShader9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DPixelShader9_AddRef(p)              (p)->lpVtbl->AddRef(p)\n#define IDirect3DPixelShader9_Release(p)             (p)->lpVtbl->Release(p)\n/*** IDirect3DPixelShader9 methods ***/\n#define IDirect3DPixelShader9_GetDevice(p,a)         (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DPixelShader9_GetFunction(p,a,b)     (p)->lpVtbl->GetFunction(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DPixelShader9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)\n#define IDirect3DPixelShader9_AddRef(p)              (p)->AddRef()\n#define IDirect3DPixelShader9_Release(p)             (p)->Release()\n/*** IDirect3DPixelShader9 methods ***/\n#define IDirect3DPixelShader9_GetDevice(p,a)         (p)->GetDevice(a)\n#define IDirect3DPixelShader9_GetFunction(p,a,b)     (p)->GetFunction(a,b)\n#endif\n\n/*****************************************************************************\n * IDirect3DStateBlock9 interface\n */\n#define INTERFACE IDirect3DStateBlock9\nDECLARE_INTERFACE_(IDirect3DStateBlock9,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DStateBlock9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(Capture)(THIS) PURE;\n    STDMETHOD(Apply)(THIS) PURE;\n};\n#undef INTERFACE\n\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(IDirect3DStateBlock9,         0xb07c4fe5, 0x310d, 0x4ba8, 0xa2, 0x3c, 0x4f, 0xf, 0x20, 0x6f, 0x21, 0x8b);\n#endif\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DStateBlock9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DStateBlock9_AddRef(p)              (p)->lpVtbl->AddRef(p)\n#define IDirect3DStateBlock9_Release(p)             (p)->lpVtbl->Release(p)\n/*** IDirect3DStateBlock9 methods ***/\n#define IDirect3DStateBlock9_GetDevice(p,a)         (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DStateBlock9_Capture(p)             (p)->lpVtbl->Capture(p)\n#define IDirect3DStateBlock9_Apply(p)               (p)->lpVtbl->Apply(p)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DStateBlock9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)\n#define IDirect3DStateBlock9_AddRef(p)              (p)->AddRef()\n#define IDirect3DStateBlock9_Release(p)             (p)->Release()\n/*** IDirect3DStateBlock9 methods ***/\n#define IDirect3DStateBlock9_GetDevice(p,a)         (p)->GetDevice(a)\n#define IDirect3DStateBlock9_Capture(p)             (p)->Capture()\n#define IDirect3DStateBlock9_Apply(p)               (p)->Apply()\n#endif\n\n/*****************************************************************************\n * IDirect3DQuery9 interface\n */\n#define INTERFACE IDirect3DQuery9\nDECLARE_INTERFACE_(IDirect3DQuery9,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DQuery9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD_(D3DQUERYTYPE, GetType)(THIS) PURE;\n    STDMETHOD_(DWORD, GetDataSize)(THIS) PURE;\n    STDMETHOD(Issue)(THIS_ DWORD dwIssueFlags) PURE;\n    STDMETHOD(GetData)(THIS_ void* pData, DWORD dwSize, DWORD dwGetDataFlags) PURE;\n};\n#undef INTERFACE\n\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(IDirect3DQuery9,              0xd9771460, 0xa695, 0x4f26, 0xbb, 0xd3, 0x27, 0xb8, 0x40, 0xb5, 0x41, 0xcc);\n#endif\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DQuery9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DQuery9_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DQuery9_Release(p) (p)->lpVtbl->Release(p)\n/*** IDirect3DQuery9 ***/\n#define IDirect3DQuery9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DQuery9_GetType(p) (p)->lpVtbl->GetType(p)\n#define IDirect3DQuery9_GetDataSize(p) (p)->lpVtbl->GetDataSize(p)\n#define IDirect3DQuery9_Issue(p,a) (p)->lpVtbl->Issue(p,a)\n#define IDirect3DQuery9_GetData(p,a,b,c) (p)->lpVtbl->GetData(p,a,b,c)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DQuery9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DQuery9_AddRef(p) (p)->AddRef()\n#define IDirect3DQuery9_Release(p) (p)->Release()\n/*** IDirect3DQuery9 ***/\n#define IDirect3DQuery9_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DQuery9_GetType(p) (p)->GetType()\n#define IDirect3DQuery9_GetDataSize(p) (p)->GetDataSize()\n#define IDirect3DQuery9_Issue(p,a) (p)->Issue(a)\n#define IDirect3DQuery9_GetData(p,a,b,c) (p)->GetData(a,b,c)\n#endif\n\n/*****************************************************************************\n * IDirect3DDevice9 interface\n */\n#define INTERFACE IDirect3DDevice9\nDECLARE_INTERFACE_(IDirect3DDevice9,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DDevice9 methods ***/\n    STDMETHOD(TestCooperativeLevel)(THIS) PURE;\n    STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE;\n    STDMETHOD(EvictManagedResources)(THIS) PURE;\n    STDMETHOD(GetDirect3D)(THIS_ IDirect3D9** ppD3D9) PURE;\n    STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9* pCaps) PURE;\n    STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain, D3DDISPLAYMODE* pMode) PURE;\n    STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE;\n    STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot, UINT YHotSpot, IDirect3DSurface9* pCursorBitmap) PURE;\n    STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y, DWORD Flags) PURE;\n    STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE;\n    STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DSwapChain9** pSwapChain) PURE;\n    STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain, IDirect3DSwapChain9** pSwapChain) PURE;\n    STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE;\n    STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE;\n    STDMETHOD(Present)(THIS_ const RECT *src_rect, const RECT *dst_rect,\n            HWND dst_window_override, const RGNDATA *dirty_region) PURE;\n    STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain, UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, IDirect3DSurface9** ppBackBuffer) PURE;\n    STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain, D3DRASTER_STATUS* pRasterStatus) PURE;\n    STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs) PURE;\n    STDMETHOD_(void, SetGammaRamp)(THIS_ UINT swapchain_idx, DWORD flags, const D3DGAMMARAMP *ramp) PURE;\n    STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain, D3DGAMMARAMP* pRamp) PURE;\n    STDMETHOD(CreateTexture)(THIS_ UINT Width, UINT Height, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DTexture9** ppTexture, HANDLE* pSharedHandle) PURE;\n    STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width, UINT Height, UINT Depth, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DVolumeTexture9** ppVolumeTexture, HANDLE* pSharedHandle) PURE;\n    STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DCubeTexture9** ppCubeTexture, HANDLE* pSharedHandle) PURE;\n    STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle) PURE;\n    STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DIndexBuffer9** ppIndexBuffer, HANDLE* pSharedHandle) PURE;\n    STDMETHOD(CreateRenderTarget)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Lockable, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;\n    STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Discard, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;\n    STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9 *src_surface, const RECT *src_rect,\n            IDirect3DSurface9 *dst_surface, const POINT *dst_point) PURE;\n    STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9* pSourceTexture, IDirect3DBaseTexture9* pDestinationTexture) PURE;\n    STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9* pRenderTarget, IDirect3DSurface9* pDestSurface) PURE;\n    STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain, IDirect3DSurface9* pDestSurface) PURE;\n    STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9 *src_surface, const RECT *src_rect,\n            IDirect3DSurface9 *dst_surface, const RECT *dst_rect, D3DTEXTUREFILTERTYPE filter) PURE;\n    STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9 *surface, const RECT *rect, D3DCOLOR color) PURE;\n    STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;\n    STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9* pRenderTarget) PURE;\n    STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9** ppRenderTarget) PURE;\n    STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9* pNewZStencil) PURE;\n    STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9** ppZStencilSurface) PURE;\n    STDMETHOD(BeginScene)(THIS) PURE;\n    STDMETHOD(EndScene)(THIS) PURE;\n    STDMETHOD(Clear)(THIS_ DWORD rect_count, const D3DRECT *rects, DWORD flags,\n            D3DCOLOR color, float z, DWORD stencil) PURE;\n    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE;\n    STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, D3DMATRIX* pMatrix) PURE;\n    STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE;\n    STDMETHOD(SetViewport)(THIS_ const D3DVIEWPORT9 *viewport) PURE;\n    STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9* pViewport) PURE;\n    STDMETHOD(SetMaterial)(THIS_ const D3DMATERIAL9 *material) PURE;\n    STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9* pMaterial) PURE;\n    STDMETHOD(SetLight)(THIS_ DWORD index, const D3DLIGHT9 *light) PURE;\n    STDMETHOD(GetLight)(THIS_ DWORD Index, D3DLIGHT9*) PURE;\n    STDMETHOD(LightEnable)(THIS_ DWORD Index, BOOL Enable) PURE;\n    STDMETHOD(GetLightEnable)(THIS_ DWORD Index, BOOL* pEnable) PURE;\n    STDMETHOD(SetClipPlane)(THIS_ DWORD index, const float *plane) PURE;\n    STDMETHOD(GetClipPlane)(THIS_ DWORD Index, float* pPlane) PURE;\n    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD Value) PURE;\n    STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD* pValue) PURE;\n    STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type, IDirect3DStateBlock9** ppSB) PURE;\n    STDMETHOD(BeginStateBlock)(THIS) PURE;\n    STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9** ppSB) PURE;\n    STDMETHOD(SetClipStatus)(THIS_ const D3DCLIPSTATUS9 *clip_status) PURE;\n    STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9* pClipStatus) PURE;\n    STDMETHOD(GetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9** ppTexture) PURE;\n    STDMETHOD(SetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9* pTexture) PURE;\n    STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD* pValue) PURE;\n    STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) PURE;\n    STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD* pValue) PURE;\n    STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) PURE;\n    STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE;\n    STDMETHOD(SetPaletteEntries)(THIS_ UINT palette_idx, const PALETTEENTRY *entries) PURE;\n    STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE;\n    STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE;\n    STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE;\n    STDMETHOD(SetScissorRect)(THIS_ const RECT *rect) PURE;\n    STDMETHOD(GetScissorRect)(THIS_ RECT* pRect) PURE;\n    STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware) PURE;\n    STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE;\n    STDMETHOD(SetNPatchMode)(THIS_ float nSegments) PURE;\n    STDMETHOD_(float, GetNPatchMode)(THIS) PURE;\n    STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount) PURE;\n    STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount) PURE;\n    STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE primitive_type,\n            UINT primitive_count, const void *data, UINT stride) PURE;\n    STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE primitive_type, UINT min_vertex_idx, UINT vertex_count,\n            UINT primitive_count, const void *index_data, D3DFORMAT index_format, const void *data, UINT stride) PURE;\n    STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex, UINT DestIndex, UINT VertexCount, IDirect3DVertexBuffer9* pDestBuffer, IDirect3DVertexDeclaration9* pVertexDecl, DWORD Flags) PURE;\n    STDMETHOD(CreateVertexDeclaration)(THIS_ const D3DVERTEXELEMENT9 *elements,\n            IDirect3DVertexDeclaration9 **declaration) PURE;\n    STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9* pDecl) PURE;\n    STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9** ppDecl) PURE;\n    STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE;\n    STDMETHOD(GetFVF)(THIS_ DWORD* pFVF) PURE;\n    STDMETHOD(CreateVertexShader)(THIS_ const DWORD *byte_code, IDirect3DVertexShader9 **shader) PURE;\n    STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9* pShader) PURE;\n    STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9** ppShader) PURE;\n    STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT reg_idx, const float *data, UINT count) PURE;\n    STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;\n    STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT reg_idx, const int *data, UINT count) PURE;\n    STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;\n    STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT reg_idx, const BOOL *data, UINT count) PURE;\n    STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;\n    STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9* pStreamData, UINT OffsetInBytes, UINT Stride) PURE;\n    STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9** ppStreamData, UINT* OffsetInBytes, UINT* pStride) PURE;\n    STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT Divider) PURE;\n    STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT* Divider) PURE;\n    STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9* pIndexData) PURE;\n    STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9** ppIndexData) PURE;\n    STDMETHOD(CreatePixelShader)(THIS_ const DWORD *byte_code, IDirect3DPixelShader9 **shader) PURE;\n    STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9* pShader) PURE;\n    STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9** ppShader) PURE;\n    STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT reg_idx, const float *data, UINT count) PURE;\n    STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;\n    STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT reg_idx, const int *data, UINT count) PURE;\n    STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;\n    STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT reg_idx, const BOOL *data, UINT count) PURE;\n    STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;\n    STDMETHOD(DrawRectPatch)(THIS_ UINT handle, const float *segment_count, const D3DRECTPATCH_INFO *patch_info) PURE;\n    STDMETHOD(DrawTriPatch)(THIS_ UINT handle, const float *segment_count, const D3DTRIPATCH_INFO *patch_info) PURE;\n    STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE;\n    STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type, IDirect3DQuery9** ppQuery) PURE;\n};\n#undef INTERFACE\n\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(IDirect3DDevice9,             0xd0223b96, 0xbf7a, 0x43fd, 0x92, 0xbd, 0xa4, 0x3b, 0xd, 0x82, 0xb9, 0xeb);\n#endif\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DDevice9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DDevice9_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirect3DDevice9_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirect3DDevice9 methods ***/\n#define IDirect3DDevice9_TestCooperativeLevel(p)                       (p)->lpVtbl->TestCooperativeLevel(p)\n#define IDirect3DDevice9_GetAvailableTextureMem(p)                     (p)->lpVtbl->GetAvailableTextureMem(p)\n#define IDirect3DDevice9_EvictManagedResources(p)                      (p)->lpVtbl->EvictManagedResources(p)\n#define IDirect3DDevice9_GetDirect3D(p,a)                              (p)->lpVtbl->GetDirect3D(p,a)\n#define IDirect3DDevice9_GetDeviceCaps(p,a)                            (p)->lpVtbl->GetDeviceCaps(p,a)\n#define IDirect3DDevice9_GetDisplayMode(p,a,b)                         (p)->lpVtbl->GetDisplayMode(p,a,b)\n#define IDirect3DDevice9_GetCreationParameters(p,a)                    (p)->lpVtbl->GetCreationParameters(p,a)\n#define IDirect3DDevice9_SetCursorProperties(p,a,b,c)                  (p)->lpVtbl->SetCursorProperties(p,a,b,c)\n#define IDirect3DDevice9_SetCursorPosition(p,a,b,c)                    (p)->lpVtbl->SetCursorPosition(p,a,b,c)\n#define IDirect3DDevice9_ShowCursor(p,a)                               (p)->lpVtbl->ShowCursor(p,a)\n#define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b)              (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b)\n#define IDirect3DDevice9_GetSwapChain(p,a,b)                           (p)->lpVtbl->GetSwapChain(p,a,b)\n#define IDirect3DDevice9_GetNumberOfSwapChains(p)                      (p)->lpVtbl->GetNumberOfSwapChains(p)\n#define IDirect3DDevice9_Reset(p,a)                                    (p)->lpVtbl->Reset(p,a)\n#define IDirect3DDevice9_Present(p,a,b,c,d)                            (p)->lpVtbl->Present(p,a,b,c,d)\n#define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d)                      (p)->lpVtbl->GetBackBuffer(p,a,b,c,d)\n#define IDirect3DDevice9_GetRasterStatus(p,a,b)                        (p)->lpVtbl->GetRasterStatus(p,a,b)\n#define IDirect3DDevice9_SetDialogBoxMode(p,a)                         (p)->lpVtbl->SetDialogBoxMode(p,a)\n#define IDirect3DDevice9_SetGammaRamp(p,a,b,c)                         (p)->lpVtbl->SetGammaRamp(p,a,b,c)\n#define IDirect3DDevice9_GetGammaRamp(p,a,b)                           (p)->lpVtbl->GetGammaRamp(p,a,b)\n#define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h)              (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)      (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)\n#define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g)            (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g)\n#define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f)             (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f)\n#define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f)              (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f)\n#define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h)         (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)  (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9_UpdateSurface(p,a,b,c,d)                      (p)->lpVtbl->UpdateSurface(p,a,b,c,d)\n#define IDirect3DDevice9_UpdateTexture(p,a,b)                          (p)->lpVtbl->UpdateTexture(p,a,b)\n#define IDirect3DDevice9_GetRenderTargetData(p,a,b)                    (p)->lpVtbl->GetRenderTargetData(p,a,b)\n#define IDirect3DDevice9_GetFrontBufferData(p,a,b)                     (p)->lpVtbl->GetFrontBufferData(p,a,b)\n#define IDirect3DDevice9_StretchRect(p,a,b,c,d,e)                      (p)->lpVtbl->StretchRect(p,a,b,c,d,e)\n#define IDirect3DDevice9_ColorFill(p,a,b,c)                            (p)->lpVtbl->ColorFill(p,a,b,c)\n#define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f)    (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f)\n#define IDirect3DDevice9_SetRenderTarget(p,a,b)                        (p)->lpVtbl->SetRenderTarget(p,a,b)\n#define IDirect3DDevice9_GetRenderTarget(p,a,b)                        (p)->lpVtbl->GetRenderTarget(p,a,b)\n#define IDirect3DDevice9_SetDepthStencilSurface(p,a)                   (p)->lpVtbl->SetDepthStencilSurface(p,a)\n#define IDirect3DDevice9_GetDepthStencilSurface(p,a)                   (p)->lpVtbl->GetDepthStencilSurface(p,a)\n#define IDirect3DDevice9_BeginScene(p)                                 (p)->lpVtbl->BeginScene(p)\n#define IDirect3DDevice9_EndScene(p)                                   (p)->lpVtbl->EndScene(p)\n#define IDirect3DDevice9_Clear(p,a,b,c,d,e,f)                          (p)->lpVtbl->Clear(p,a,b,c,d,e,f)\n#define IDirect3DDevice9_SetTransform(p,a,b)                           (p)->lpVtbl->SetTransform(p,a,b)\n#define IDirect3DDevice9_GetTransform(p,a,b)                           (p)->lpVtbl->GetTransform(p,a,b)\n#define IDirect3DDevice9_MultiplyTransform(p,a,b)                      (p)->lpVtbl->MultiplyTransform(p,a,b)\n#define IDirect3DDevice9_SetViewport(p,a)                              (p)->lpVtbl->SetViewport(p,a)\n#define IDirect3DDevice9_GetViewport(p,a)                              (p)->lpVtbl->GetViewport(p,a)\n#define IDirect3DDevice9_SetMaterial(p,a)                              (p)->lpVtbl->SetMaterial(p,a)\n#define IDirect3DDevice9_GetMaterial(p,a)                              (p)->lpVtbl->GetMaterial(p,a)\n#define IDirect3DDevice9_SetLight(p,a,b)                               (p)->lpVtbl->SetLight(p,a,b)\n#define IDirect3DDevice9_GetLight(p,a,b)                               (p)->lpVtbl->GetLight(p,a,b)\n#define IDirect3DDevice9_LightEnable(p,a,b)                            (p)->lpVtbl->LightEnable(p,a,b)\n#define IDirect3DDevice9_GetLightEnable(p,a,b)                         (p)->lpVtbl->GetLightEnable(p,a,b)\n#define IDirect3DDevice9_SetClipPlane(p,a,b)                           (p)->lpVtbl->SetClipPlane(p,a,b)\n#define IDirect3DDevice9_GetClipPlane(p,a,b)                           (p)->lpVtbl->GetClipPlane(p,a,b)\n#define IDirect3DDevice9_SetRenderState(p,a,b)                         (p)->lpVtbl->SetRenderState(p,a,b)\n#define IDirect3DDevice9_GetRenderState(p,a,b)                         (p)->lpVtbl->GetRenderState(p,a,b)\n#define IDirect3DDevice9_CreateStateBlock(p,a,b)                       (p)->lpVtbl->CreateStateBlock(p,a,b)\n#define IDirect3DDevice9_BeginStateBlock(p)                            (p)->lpVtbl->BeginStateBlock(p)\n#define IDirect3DDevice9_EndStateBlock(p,a)                            (p)->lpVtbl->EndStateBlock(p,a)\n#define IDirect3DDevice9_SetClipStatus(p,a)                            (p)->lpVtbl->SetClipStatus(p,a)\n#define IDirect3DDevice9_GetClipStatus(p,a)                            (p)->lpVtbl->GetClipStatus(p,a)\n#define IDirect3DDevice9_GetTexture(p,a,b)                             (p)->lpVtbl->GetTexture(p,a,b)\n#define IDirect3DDevice9_SetTexture(p,a,b)                             (p)->lpVtbl->SetTexture(p,a,b)\n#define IDirect3DDevice9_GetTextureStageState(p,a,b,c)                 (p)->lpVtbl->GetTextureStageState(p,a,b,c)\n#define IDirect3DDevice9_SetTextureStageState(p,a,b,c)                 (p)->lpVtbl->SetTextureStageState(p,a,b,c)\n#define IDirect3DDevice9_GetSamplerState(p,a,b,c)                      (p)->lpVtbl->GetSamplerState(p,a,b,c)\n#define IDirect3DDevice9_SetSamplerState(p,a,b,c)                      (p)->lpVtbl->SetSamplerState(p,a,b,c)\n#define IDirect3DDevice9_ValidateDevice(p,a)                           (p)->lpVtbl->ValidateDevice(p,a)\n#define IDirect3DDevice9_SetPaletteEntries(p,a,b)                      (p)->lpVtbl->SetPaletteEntries(p,a,b)\n#define IDirect3DDevice9_GetPaletteEntries(p,a,b)                      (p)->lpVtbl->GetPaletteEntries(p,a,b)\n#define IDirect3DDevice9_SetCurrentTexturePalette(p,a)                 (p)->lpVtbl->SetCurrentTexturePalette(p,a)\n#define IDirect3DDevice9_GetCurrentTexturePalette(p,a)                 (p)->lpVtbl->GetCurrentTexturePalette(p,a)\n#define IDirect3DDevice9_SetScissorRect(p,a)                           (p)->lpVtbl->SetScissorRect(p,a)\n#define IDirect3DDevice9_GetScissorRect(p,a)                           (p)->lpVtbl->GetScissorRect(p,a)\n#define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a)              (p)->lpVtbl->SetSoftwareVertexProcessing(p,a)\n#define IDirect3DDevice9_GetSoftwareVertexProcessing(p)                (p)->lpVtbl->GetSoftwareVertexProcessing(p)\n#define IDirect3DDevice9_SetNPatchMode(p,a)                            (p)->lpVtbl->SetNPatchMode(p,a)\n#define IDirect3DDevice9_GetNPatchMode(p)                              (p)->lpVtbl->GetNPatchMode(p)\n#define IDirect3DDevice9_DrawPrimitive(p,a,b,c)                        (p)->lpVtbl->DrawPrimitive(p,a,b,c)\n#define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f)           (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f)\n#define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d)                    (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)\n#define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)     (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f)                (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f)\n#define IDirect3DDevice9_CreateVertexDeclaration(p,a,b)                (p)->lpVtbl->CreateVertexDeclaration(p,a,b)\n#define IDirect3DDevice9_SetVertexDeclaration(p,a)                     (p)->lpVtbl->SetVertexDeclaration(p,a)\n#define IDirect3DDevice9_GetVertexDeclaration(p,a)                     (p)->lpVtbl->GetVertexDeclaration(p,a)\n#define IDirect3DDevice9_SetFVF(p,a)                                   (p)->lpVtbl->SetFVF(p,a)\n#define IDirect3DDevice9_GetFVF(p,a)                                   (p)->lpVtbl->GetFVF(p,a)\n#define IDirect3DDevice9_CreateVertexShader(p,a,b)                     (p)->lpVtbl->CreateVertexShader(p,a,b)\n#define IDirect3DDevice9_SetVertexShader(p,a)                          (p)->lpVtbl->SetVertexShader(p,a)\n#define IDirect3DDevice9_GetVertexShader(p,a)                          (p)->lpVtbl->GetVertexShader(p,a)\n#define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c)\n#define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c)\n#define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c)\n#define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c)\n#define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c)\n#define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c)\n#define IDirect3DDevice9_SetStreamSource(p,a,b,c,d)                    (p)->lpVtbl->SetStreamSource(p,a,b,c,d)\n#define IDirect3DDevice9_GetStreamSource(p,a,b,c,d)                    (p)->lpVtbl->GetStreamSource(p,a,b,c,d)\n#define IDirect3DDevice9_SetStreamSourceFreq(p,a,b)                    (p)->lpVtbl->SetStreamSourceFreq(p,a,b)\n#define IDirect3DDevice9_GetStreamSourceFreq(p,a,b)                    (p)->lpVtbl->GetStreamSourceFreq(p,a,b)\n#define IDirect3DDevice9_SetIndices(p,a)                               (p)->lpVtbl->SetIndices(p,a)\n#define IDirect3DDevice9_GetIndices(p,a)                               (p)->lpVtbl->GetIndices(p,a)\n#define IDirect3DDevice9_CreatePixelShader(p,a,b)                      (p)->lpVtbl->CreatePixelShader(p,a,b)\n#define IDirect3DDevice9_SetPixelShader(p,a)                           (p)->lpVtbl->SetPixelShader(p,a)\n#define IDirect3DDevice9_GetPixelShader(p,a)                           (p)->lpVtbl->GetPixelShader(p,a)\n#define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c)\n#define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c)\n#define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c)\n#define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c)\n#define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c)\n#define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c)\n#define IDirect3DDevice9_DrawRectPatch(p,a,b,c)                        (p)->lpVtbl->DrawRectPatch(p,a,b,c)\n#define IDirect3DDevice9_DrawTriPatch(p,a,b,c)                         (p)->lpVtbl->DrawTriPatch(p,a,b,c)\n#define IDirect3DDevice9_DeletePatch(p,a)                              (p)->lpVtbl->DeletePatch(p,a)\n#define IDirect3DDevice9_CreateQuery(p,a,b)                            (p)->lpVtbl->CreateQuery(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DDevice9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DDevice9_AddRef(p)             (p)->AddRef()\n#define IDirect3DDevice9_Release(p)            (p)->Release()\n/*** IDirect3DDevice9 methods ***/\n#define IDirect3DDevice9_TestCooperativeLevel(p)                       (p)->TestCooperativeLevel()\n#define IDirect3DDevice9_GetAvailableTextureMem(p)                     (p)->GetAvailableTextureMem()\n#define IDirect3DDevice9_EvictManagedResources(p)                      (p)->EvictManagedResources()\n#define IDirect3DDevice9_GetDirect3D(p,a)                              (p)->GetDirect3D(a)\n#define IDirect3DDevice9_GetDeviceCaps(p,a)                            (p)->GetDeviceCaps(a)\n#define IDirect3DDevice9_GetDisplayMode(p,a,b)                         (p)->GetDisplayMode(a,b)\n#define IDirect3DDevice9_GetCreationParameters(p,a)                    (p)->GetCreationParameters(a)\n#define IDirect3DDevice9_SetCursorProperties(p,a,b,c)                  (p)->SetCursorProperties(a,b,c)\n#define IDirect3DDevice9_SetCursorPosition(p,a,b,c)                    (p)->SetCursorPosition(a,b,c)\n#define IDirect3DDevice9_ShowCursor(p,a)                               (p)->ShowCursor(a)\n#define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b)              (p)->CreateAdditionalSwapChain(a,b)\n#define IDirect3DDevice9_GetSwapChain(p,a,b)                           (p)->GetSwapChain(a,b)\n#define IDirect3DDevice9_GetNumberOfSwapChains(p)                      (p)->GetNumberOfSwapChains()\n#define IDirect3DDevice9_Reset(p,a)                                    (p)->Reset(a)\n#define IDirect3DDevice9_Present(p,a,b,c,d)                            (p)->Present(a,b,c,d)\n#define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d)                      (p)->GetBackBuffer(a,b,c,d)\n#define IDirect3DDevice9_GetRasterStatus(p,a,b)                        (p)->GetRasterStatus(a,b)\n#define IDirect3DDevice9_SetDialogBoxMode(p,a)                         (p)->SetDialogBoxMode(a)\n#define IDirect3DDevice9_SetGammaRamp(p,a,b,c)                         (p)->SetGammaRamp(a,b,c)\n#define IDirect3DDevice9_GetGammaRamp(p,a,b)                           (p)->GetGammaRamp(a,b)\n#define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h)              (p)->CreateTexture(a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)      (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i)\n#define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g)            (p)->CreateCubeTexture(a,b,c,d,e,f,g)\n#define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f)             (p)->CreateVertexBuffer(a,b,c,d,e,f)\n#define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f)              (p)->CreateIndexBuffer(a,b,c,d,e,f)\n#define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h)         (p)->CreateRenderTarget(a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)  (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9_UpdateSurface(p,a,b,c,d)                      (p)->UpdateSurface(a,b,c,d)\n#define IDirect3DDevice9_UpdateTexture(p,a,b)                          (p)->UpdateTexture(a,b)\n#define IDirect3DDevice9_GetRenderTargetData(p,a,b)                    (p)->GetRenderTargetData(a,b)\n#define IDirect3DDevice9_GetFrontBufferData(p,a,b)                     (p)->GetFrontBufferData(a,b)\n#define IDirect3DDevice9_StretchRect(p,a,b,c,d,e)                      (p)->StretchRect(a,b,c,d,e)\n#define IDirect3DDevice9_ColorFill(p,a,b,c)                            (p)->ColorFill(a,b,c)\n#define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f)    (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f)\n#define IDirect3DDevice9_SetRenderTarget(p,a,b)                        (p)->SetRenderTarget(a,b)\n#define IDirect3DDevice9_GetRenderTarget(p,a,b)                        (p)->GetRenderTarget(a,b)\n#define IDirect3DDevice9_SetDepthStencilSurface(p,a)                   (p)->SetDepthStencilSurface(a)\n#define IDirect3DDevice9_GetDepthStencilSurface(p,a)                   (p)->GetDepthStencilSurface(a)\n#define IDirect3DDevice9_BeginScene(p)                                 (p)->BeginScene()\n#define IDirect3DDevice9_EndScene(p)                                   (p)->EndScene()\n#define IDirect3DDevice9_Clear(p,a,b,c,d,e,f)                          (p)->Clear(a,b,c,d,e,f)\n#define IDirect3DDevice9_SetTransform(p,a,b)                           (p)->SetTransform(a,b)\n#define IDirect3DDevice9_GetTransform(p,a,b)                           (p)->GetTransform(a,b)\n#define IDirect3DDevice9_MultiplyTransform(p,a,b)                      (p)->MultiplyTransform(a,b)\n#define IDirect3DDevice9_SetViewport(p,a)                              (p)->SetViewport(a)\n#define IDirect3DDevice9_GetViewport(p,a)                              (p)->GetViewport(a)\n#define IDirect3DDevice9_SetMaterial(p,a)                              (p)->SetMaterial(a)\n#define IDirect3DDevice9_GetMaterial(p,a)                              (p)->GetMaterial(a)\n#define IDirect3DDevice9_SetLight(p,a,b)                               (p)->SetLight(a,b)\n#define IDirect3DDevice9_GetLight(p,a,b)                               (p)->GetLight(a,b)\n#define IDirect3DDevice9_LightEnable(p,a,b)                            (p)->LightEnable(a,b)\n#define IDirect3DDevice9_GetLightEnable(p,a,b)                         (p)->GetLightEnable(a,b)\n#define IDirect3DDevice9_SetClipPlane(p,a,b)                           (p)->SetClipPlane(a,b)\n#define IDirect3DDevice9_GetClipPlane(p,a,b)                           (p)->GetClipPlane(a,b)\n#define IDirect3DDevice9_SetRenderState(p,a,b)                         (p)->SetRenderState(a,b)\n#define IDirect3DDevice9_GetRenderState(p,a,b)                         (p)->GetRenderState(a,b)\n#define IDirect3DDevice9_CreateStateBlock(p,a,b)                       (p)->CreateStateBlock(a,b)\n#define IDirect3DDevice9_BeginStateBlock(p)                            (p)->BeginStateBlock()\n#define IDirect3DDevice9_EndStateBlock(p,a)                            (p)->EndStateBlock(a)\n#define IDirect3DDevice9_SetClipStatus(p,a)                            (p)->SetClipStatus(a)\n#define IDirect3DDevice9_GetClipStatus(p,a)                            (p)->GetClipStatus(a)\n#define IDirect3DDevice9_GetTexture(p,a,b)                             (p)->GetTexture(a,b)\n#define IDirect3DDevice9_SetTexture(p,a,b)                             (p)->SetTexture(a,b)\n#define IDirect3DDevice9_GetTextureStageState(p,a,b,c)                 (p)->GetTextureStageState(a,b,c)\n#define IDirect3DDevice9_SetTextureStageState(p,a,b,c)                 (p)->SetTextureStageState(a,b,c)\n#define IDirect3DDevice9_GetSamplerState(p,a,b,c)                      (p)->GetSamplerState(a,b,c)\n#define IDirect3DDevice9_SetSamplerState(p,a,b,c)                      (p)->SetSamplerState(a,b,c)\n#define IDirect3DDevice9_ValidateDevice(p,a)                           (p)->ValidateDevice(a)\n#define IDirect3DDevice9_SetPaletteEntries(p,a,b)                      (p)->SetPaletteEntries(a,b)\n#define IDirect3DDevice9_GetPaletteEntries(p,a,b)                      (p)->GetPaletteEntries(a,b)\n#define IDirect3DDevice9_SetCurrentTexturePalette(p,a)                 (p)->SetCurrentTexturePalette(a)\n#define IDirect3DDevice9_GetCurrentTexturePalette(p,a)                 (p)->GetCurrentTexturePalette(a)\n#define IDirect3DDevice9_SetScissorRect(p,a)                           (p)->SetScissorRect(a)\n#define IDirect3DDevice9_GetScissorRect(p,a)                           (p)->GetScissorRect(a)\n#define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a)              (p)->SetSoftwareVertexProcessing(a)\n#define IDirect3DDevice9_GetSoftwareVertexProcessing(p)                (p)->GetSoftwareVertexProcessing()\n#define IDirect3DDevice9_SetNPatchMode(p,a)                            (p)->SetNPatchMode(a)\n#define IDirect3DDevice9_GetNPatchMode(p)                              (p)->GetNPatchMode()\n#define IDirect3DDevice9_DrawPrimitive(p,a,b,c)                        (p)->DrawPrimitive(a,b,c)\n#define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f)           (p)->DrawIndexedPrimitive(a,b,c,d,e,f)\n#define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d)                    (p)->DrawPrimitiveUP(a,b,c,d)\n#define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)     (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f)                (p)->ProcessVertices(a,b,c,d,e,f)\n#define IDirect3DDevice9_CreateVertexDeclaration(p,a,b)                (p)->CreateVertexDeclaration(a,b)\n#define IDirect3DDevice9_SetVertexDeclaration(p,a)                     (p)->SetVertexDeclaration(a)\n#define IDirect3DDevice9_GetVertexDeclaration(p,a)                     (p)->GetVertexDeclaration(a)\n#define IDirect3DDevice9_SetFVF(p,a)                                   (p)->SetFVF(a)\n#define IDirect3DDevice9_GetFVF(p,a)                                   (p)->GetFVF(a)\n#define IDirect3DDevice9_CreateVertexShader(p,a,b)                     (p)->CreateVertexShader(a,b)\n#define IDirect3DDevice9_SetVertexShader(p,a)                          (p)->SetVertexShader(a)\n#define IDirect3DDevice9_GetVertexShader(p,a)                          (p)->GetVertexShader(a)\n#define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c)             (p)->SetVertexShaderConstantF(a,b,c)\n#define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c)             (p)->GetVertexShaderConstantF(a,b,c)\n#define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c)             (p)->SetVertexShaderConstantI(a,b,c)\n#define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c)             (p)->GetVertexShaderConstantI(a,b,c)\n#define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c)             (p)->SetVertexShaderConstantB(a,b,c)\n#define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c)             (p)->GetVertexShaderConstantB(a,b,c)\n#define IDirect3DDevice9_SetStreamSource(p,a,b,c,d)                    (p)->SetStreamSource(a,b,c,d)\n#define IDirect3DDevice9_GetStreamSource(p,a,b,c,d)                    (p)->GetStreamSource(a,b,c,d)\n#define IDirect3DDevice9_SetStreamSourceFreq(p,a,b)                    (p)->SetStreamSourceFreq(a,b)\n#define IDirect3DDevice9_GetStreamSourceFreq(p,a,b)                    (p)->GetStreamSourceFreq(a,b)\n#define IDirect3DDevice9_SetIndices(p,a)                               (p)->SetIndices(a)\n#define IDirect3DDevice9_GetIndices(p,a)                               (p)->GetIndices(a)\n#define IDirect3DDevice9_CreatePixelShader(p,a,b)                      (p)->CreatePixelShader(a,b)\n#define IDirect3DDevice9_SetPixelShader(p,a)                           (p)->SetPixelShader(a)\n#define IDirect3DDevice9_GetPixelShader(p,a)                           (p)->GetPixelShader(a)\n#define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c)              (p)->SetPixelShaderConstantF(a,b,c)\n#define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c)              (p)->GetPixelShaderConstantF(a,b,c)\n#define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c)              (p)->SetPixelShaderConstantI(a,b,c)\n#define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c)              (p)->GetPixelShaderConstantI(a,b,c)\n#define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c)              (p)->SetPixelShaderConstantB(a,b,c)\n#define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c)              (p)->GetPixelShaderConstantB(a,b,c)\n#define IDirect3DDevice9_DrawRectPatch(p,a,b,c)                        (p)->DrawRectPatch(a,b,c)\n#define IDirect3DDevice9_DrawTriPatch(p,a,b,c)                         (p)->DrawTriPatch(a,b,c)\n#define IDirect3DDevice9_DeletePatch(p,a)                              (p)->DeletePatch(a)\n#define IDirect3DDevice9_CreateQuery(p,a,b)                            (p)->CreateQuery(a,b)\n#endif\n\n\n#if !defined(D3D_DISABLE_9EX)\n\ntypedef struct IDirect3D9Ex *LPDIRECT3D9EX, *PDIRECT3D9EX;\ntypedef struct IDirect3DSwapChain9Ex *LPDIRECT3DSWAPCHAIN9EX, *PDIRECT3DSWAPCHAIN9EX;\ntypedef struct IDirect3DDevice9Ex *LPDIRECT3DDEVICE9EX, *PDIRECT3DDEVICE9EX;\n\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(IDirect3D9Ex, 0x02177241, 0x69fc, 0x400c, 0x8f, 0xf1, 0x93, 0xa4, 0x4d, 0xf6, 0x86, 0x1d);\n#endif\nDEFINE_GUID(IID_IDirect3D9Ex, 0x02177241, 0x69fc, 0x400c, 0x8f, 0xf1, 0x93, 0xa4, 0x4d, 0xf6, 0x86, 0x1d);\n\n#define INTERFACE IDirect3D9Ex\nDECLARE_INTERFACE_(IDirect3D9Ex, IDirect3D9)\n{\n    /* IUnknown */\n    STDMETHOD_(HRESULT, QueryInterface)(THIS_ REFIID iid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /* IDirect3D9 */\n    STDMETHOD(RegisterSoftwareDevice)(THIS_ void *init) PURE;\n    STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE;\n    STDMETHOD(GetAdapterIdentifier)(THIS_ UINT adapter_idx, DWORD flags, D3DADAPTER_IDENTIFIER9 *identifier) PURE;\n    STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT adapter_idx, D3DFORMAT format) PURE;\n    STDMETHOD(EnumAdapterModes)(THIS_ UINT adapter_idx, D3DFORMAT format, UINT mode_idx, D3DDISPLAYMODE *mode) PURE;\n    STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT adapter_idx, D3DDISPLAYMODE *mode) PURE;\n    STDMETHOD(CheckDeviceType)(THIS_ UINT adapter_idx, D3DDEVTYPE device_type,\n            D3DFORMAT display_format, D3DFORMAT backbuffer_format, BOOL windowed) PURE;\n    STDMETHOD(CheckDeviceFormat)(THIS_ UINT adapter_idx, D3DDEVTYPE device_type, D3DFORMAT adapter_format,\n            DWORD usage, D3DRESOURCETYPE resource_type, D3DFORMAT format) PURE;\n    STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT adapter_idx, D3DDEVTYPE device_type, D3DFORMAT surface_format,\n            BOOL windowed, D3DMULTISAMPLE_TYPE multisample_type, DWORD *quality_levels) PURE;\n    STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT adapter_idx, D3DDEVTYPE device_type,\n            D3DFORMAT adapter_format, D3DFORMAT rt_format, D3DFORMAT ds_format) PURE;\n    STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT adapter_idx, D3DDEVTYPE device_type,\n            D3DFORMAT src_format, D3DFORMAT dst_format) PURE;\n    STDMETHOD(GetDeviceCaps)(THIS_ UINT adapter_idx, D3DDEVTYPE device_type, D3DCAPS9 *caps) PURE;\n    STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT adapter_idx) PURE;\n    STDMETHOD(CreateDevice)(THIS_ UINT adapter_idx, D3DDEVTYPE device_type, HWND focus_window, DWORD flags,\n            D3DPRESENT_PARAMETERS *parameters, struct IDirect3DDevice9 **device) PURE;\n    /* IDirect3D9Ex */\n    STDMETHOD_(UINT, GetAdapterModeCountEx)(THIS_ UINT adapter_idx, const D3DDISPLAYMODEFILTER *filter) PURE;\n    STDMETHOD(EnumAdapterModesEx)(THIS_ UINT adapter_idx, const D3DDISPLAYMODEFILTER *filter,\n            UINT mode_idx, D3DDISPLAYMODEEX *mode) PURE;\n    STDMETHOD(GetAdapterDisplayModeEx)(THIS_ UINT adapter_idx, D3DDISPLAYMODEEX *mode, D3DDISPLAYROTATION *rotation);\n    STDMETHOD(CreateDeviceEx)(THIS_ UINT adapter_idx, D3DDEVTYPE device_type, HWND focus_window, DWORD flags,\n            D3DPRESENT_PARAMETERS *parameters, D3DDISPLAYMODEEX *mode, struct IDirect3DDevice9Ex **device) PURE;\n    STDMETHOD(GetAdapterLUID)(THIS_ UINT adapter_idx, LUID *luid) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/* IUnknown */\n#define IDirect3D9Ex_QueryInterface(p,a,b)                      (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3D9Ex_AddRef(p)                                  (p)->lpVtbl->AddRef(p)\n#define IDirect3D9Ex_Release(p)                                 (p)->lpVtbl->Release(p)\n/* IDirect3D9 */\n#define IDirect3D9Ex_RegisterSoftwareDevice(p,a)                (p)->lpVtbl->RegisterSoftwareDevice(p,a)\n#define IDirect3D9Ex_GetAdapterCount(p)                         (p)->lpVtbl->GetAdapterCount(p)\n#define IDirect3D9Ex_GetAdapterIdentifier(p,a,b,c)              (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)\n#define IDirect3D9Ex_GetAdapterModeCount(p,a,b)                 (p)->lpVtbl->GetAdapterModeCount(p,a,b)\n#define IDirect3D9Ex_EnumAdapterModes(p,a,b,c,d)                (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d)\n#define IDirect3D9Ex_GetAdapterDisplayMode(p,a,b)               (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)\n#define IDirect3D9Ex_CheckDeviceType(p,a,b,c,d,e)               (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)\n#define IDirect3D9Ex_CheckDeviceFormat(p,a,b,c,d,e,f)           (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)\n#define IDirect3D9Ex_CheckDeviceMultiSampleType(p,a,b,c,d,e,f)  (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f)\n#define IDirect3D9Ex_CheckDepthStencilMatch(p,a,b,c,d,e)        (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)\n#define IDirect3D9Ex_CheckDeviceFormatConversion(p,a,b,c,d)     (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d)\n#define IDirect3D9Ex_GetDeviceCaps(p,a,b,c)                     (p)->lpVtbl->GetDeviceCaps(p,a,b,c)\n#define IDirect3D9Ex_GetAdapterMonitor(p,a)                     (p)->lpVtbl->GetAdapterMonitor(p,a)\n#define IDirect3D9Ex_CreateDevice(p,a,b,c,d,e,f)                (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)\n/* IDirect3D9Ex */\n#define IDirect3D9Ex_GetAdapterModeCountEx(p,a,b)               (p)->lpVtbl->GetAdapterModeCountEx(p,a,b)\n#define IDirect3D9Ex_EnumAdapterModesEx(p,a,b,c,d)              (p)->lpVtbl->EnumAdapterModesEx(p,a,b,c,d)\n#define IDirect3D9Ex_GetAdapterDisplayModeEx(p,a,b,c)           (p)->lpVtbl->GetAdapterDisplayModeEx(p,a,b,c)\n#define IDirect3D9Ex_CreateDeviceEx(p,a,b,c,d,e,f,g)            (p)->lpVtbl->CreateDeviceEx(p,a,b,c,d,e,f,g)\n#define IDirect3D9Ex_GetAdapterLUID(p,a,b)                      (p)->lpVtbl->GetAdapterLUID(p,a,b)\n#else\n/* IUnknown */\n#define IDirect3D9Ex_QueryInterface(p,a,b)                      (p)->QueryInterface(a,b)\n#define IDirect3D9Ex_AddRef(p)                                  (p)->AddRef()\n#define IDirect3D9Ex_Release(p)                                 (p)->Release()\n/* IDirect3D9 */\n#define IDirect3D9Ex_RegisterSoftwareDevice(p,a)                (p)->RegisterSoftwareDevice(a)\n#define IDirect3D9Ex_GetAdapterCount(p)                         (p)->GetAdapterCount()\n#define IDirect3D9Ex_GetAdapterIdentifier(p,a,b,c)              (p)->GetAdapterIdentifier(a,b,c)\n#define IDirect3D9Ex_GetAdapterModeCount(p,a,b)                 (p)->GetAdapterModeCount(a,b)\n#define IDirect3D9Ex_EnumAdapterModes(p,a,b,c,d)                (p)->EnumAdapterModes(a,b,c,d)\n#define IDirect3D9Ex_GetAdapterDisplayMode(p,a,b)               (p)->GetAdapterDisplayMode(a,b)\n#define IDirect3D9Ex_CheckDeviceType(p,a,b,c,d,e)               (p)->CheckDeviceType(a,b,c,d,e)\n#define IDirect3D9Ex_CheckDeviceFormat(p,a,b,c,d,e,f)           (p)->CheckDeviceFormat(a,b,c,d,e,f)\n#define IDirect3D9Ex_CheckDeviceMultiSampleType(p,a,b,c,d,e,f)  (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f)\n#define IDirect3D9Ex_CheckDepthStencilMatch(p,a,b,c,d,e)        (p)->CheckDepthStencilMatch(a,b,c,d,e)\n#define IDirect3D9Ex_CheckDeviceFormatConversion(p,a,b,c,d)     (p)->CheckDeviceFormatConversion(a,b,c,d)\n#define IDirect3D9Ex_GetDeviceCaps(p,a,b,c)                     (p)->GetDeviceCaps(a,b,c)\n#define IDirect3D9Ex_GetAdapterMonitor(p,a)                     (p)->GetAdapterMonitor(a)\n#define IDirect3D9Ex_CreateDevice(p,a,b,c,d,e,f)                (p)->CreateDevice(a,b,c,d,e,f)\n/* IDirect3D9Ex */\n#define IDirect3D9Ex_GetAdapterModeCountEx(p,a,b)               (p)->GetAdapterModeCountEx(a,b)\n#define IDirect3D9Ex_EnumAdapterModesEx(p,a,b,c,d)              (p)->EnumAdapterModesEx(a,b,c,d)\n#define IDirect3D9Ex_GetAdapterDisplayModeEx(p,a,b,c)           (p)->GetAdapterDisplayModeEx(a,b,c)\n#define IDirect3D9Ex_CreateDeviceEx(p,a,b,c,d,e,f,g)            (p)->CreateDeviceEx(a,b,c,d,e,f,g)\n#define IDirect3D9Ex_GetAdapterLUID(p,a,b)                      (p)->GetAdapterLUID(a,b)\n#endif\n\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(IDirect3DSwapChain9Ex, 0x91886caf, 0x1c3d, 0x4d2e, 0xa0, 0xab, 0x3e, 0x4c, 0x7d, 0x8d, 0x33, 0x3);\n#endif\nDEFINE_GUID(IID_IDirect3DSwapChain9Ex, 0x91886caf, 0x1c3d, 0x4d2e, 0xa0, 0xab, 0x3e, 0x4c, 0x7d, 0x8d, 0x33, 0x3);\n\n#define INTERFACE IDirect3DSwapChain9Ex\nDECLARE_INTERFACE_(IDirect3DSwapChain9Ex, IDirect3DSwapChain9)\n{\n    /* IUnknown */\n    STDMETHOD_(HRESULT, QueryInterface)(THIS_ REFIID iid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /* IDirect3DSwapChain9 */\n    STDMETHOD(Present)(THIS_ const RECT *src_rect, const RECT *dst_rect, HWND dst_window_override,\n            const RGNDATA *dirty_region, DWORD flags) PURE;\n    STDMETHOD(GetFrontBufferData)(THIS_ struct IDirect3DSurface9 *dst_surface) PURE;\n    STDMETHOD(GetBackBuffer)(THIS_ UINT backbuffer_idx, D3DBACKBUFFER_TYPE backbuffer_type,\n            struct IDirect3DSurface9 **backbuffer) PURE;\n    STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS *raster_status) PURE;\n    STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE *mode) PURE;\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;\n    STDMETHOD(GetPresentParameters)(THIS_ D3DPRESENT_PARAMETERS *parameters) PURE;\n    /* IDirect3DSwapChain9Ex */\n    STDMETHOD(GetLastPresentCount)(THIS_ UINT *last_present_count) PURE;\n    STDMETHOD(GetPresentStats)(THIS_ D3DPRESENTSTATS *stats) PURE;\n    STDMETHOD(GetDisplayModeEx)(THIS_ D3DDISPLAYMODEEX *mode, D3DDISPLAYROTATION *rotation) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/* IUnknown */\n#define IDirect3DSwapChain9Ex_QueryInterface(p,a,b)             (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DSwapChain9Ex_AddRef(p)                         (p)->lpVtbl->AddRef(p)\n#define IDirect3DSwapChain9Ex_Release(p)                        (p)->lpVtbl->Release(p)\n/* IDirect3DSwapChain9 */\n#define IDirect3DSwapChain9Ex_Present(p,a,b,c,d,e)              (p)->lpVtbl->Present(p,a,b,c,d,e)\n#define IDirect3DSwapChain9Ex_GetFrontBufferData(p,a)           (p)->lpVtbl->GetFrontBufferData(p,a)\n#define IDirect3DSwapChain9Ex_GetBackBuffer(p,a,b,c)            (p)->lpVtbl->GetBackBuffer(p,a,b,c)\n#define IDirect3DSwapChain9Ex_GetRasterStatus(p,a)              (p)->lpVtbl->GetRasterStatus(p,a)\n#define IDirect3DSwapChain9Ex_GetDisplayMode(p,a)               (p)->lpVtbl->GetDisplayMode(p,a)\n#define IDirect3DSwapChain9Ex_GetDevice(p,a)                    (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DSwapChain9Ex_GetPresentParameters(p,a)         (p)->lpVtbl->GetPresentParameters(p,a)\n/* IDirect3DSwapChain9Ex */\n#define IDirect3DSwapChain9Ex_GetLastPresentCount(p,a)          (p)->lpVtbl->GetLastPresentCount(p,a)\n#define IDirect3DSwapChain9Ex_GetPresentStats(p,a)              (p)->lpVtbl->GetPresentStats(p,a)\n#define IDirect3DSwapChain9Ex_GetDisplayModeEx(p,a,b)           (p)->lpVtbl->GetDisplayModeEx(p,a,b)\n#else\n/* IUnknown */\n#define IDirect3DSwapChain9Ex_QueryInterface(p,a,b)             (p)->QueryInterface(a,b)\n#define IDirect3DSwapChain9Ex_AddRef(p)                         (p)->AddRef()\n#define IDirect3DSwapChain9Ex_Release(p)                        (p)->Release()\n/* IDirect3DSwapChain9 */\n#define IDirect3DSwapChain9Ex_Present(p,a,b,c,d,e)              (p)->Present(a,b,c,d,e)\n#define IDirect3DSwapChain9Ex_GetFrontBufferData(p,a)           (p)->GetFrontBufferData(a)\n#define IDirect3DSwapChain9Ex_GetBackBuffer(p,a,b,c)            (p)->GetBackBuffer(a,b,c)\n#define IDirect3DSwapChain9Ex_GetRasterStatus(p,a)              (p)->GetRasterStatus(a)\n#define IDirect3DSwapChain9Ex_GetDisplayMode(p,a)               (p)->GetDisplayMode(a)\n#define IDirect3DSwapChain9Ex_GetDevice(p,a)                    (p)->GetDevice(a)\n#define IDirect3DSwapChain9Ex_GetPresentParameters(p,a)         (p)->GetPresentParameters(a)\n/* IDirect3DSwapChain9Ex */\n#define IDirect3DSwapChain9Ex_GetLastPresentCount(p,a)          (p)->GetLastPresentCount(a)\n#define IDirect3DSwapChain9Ex_GetPresentStats(p,a)              (p)->GetPresentStats(a)\n#define IDirect3DSwapChain9Ex_GetDisplayModeEx(p,a,b)           (p)->GetDisplayModeEx(a,b)\n#endif\n\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(IDirect3DDevice9Ex, 0xb18b10ce, 0x2649, 0x405a, 0x87, 0xf, 0x95, 0xf7, 0x77, 0xd4, 0x31, 0x3a);\n#endif\nDEFINE_GUID(IID_IDirect3DDevice9Ex, 0xb18b10ce, 0x2649, 0x405a, 0x87, 0xf, 0x95, 0xf7, 0x77, 0xd4, 0x31, 0x3a);\n\n#define INTERFACE IDirect3DDevice9Ex\nDECLARE_INTERFACE_(IDirect3DDevice9Ex, IDirect3DDevice9)\n{\n    /* IUnknown */\n    STDMETHOD_(HRESULT, QueryInterface)(THIS_ REFIID iid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /* IDirect3DDevice9 */\n    STDMETHOD(TestCooperativeLevel)(THIS) PURE;\n    STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE;\n    STDMETHOD(EvictManagedResources)(THIS) PURE;\n    STDMETHOD(GetDirect3D)(THIS_ IDirect3D9 **d3d9) PURE;\n    STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9 *caps) PURE;\n    STDMETHOD(GetDisplayMode)(THIS_ UINT swapchain_idx, D3DDISPLAYMODE *mode) PURE;\n    STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *parameters) PURE;\n    STDMETHOD(SetCursorProperties)(THIS_ UINT hotspot_x, UINT hotspot_y, IDirect3DSurface9 *bitmap) PURE;\n    STDMETHOD_(void, SetCursorPosition)(THIS_ int x, int y, DWORD flags) PURE;\n    STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL show) PURE;\n    STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS *parameters,\n            IDirect3DSwapChain9 **swapchain) PURE;\n    STDMETHOD(GetSwapChain)(THIS_ UINT swapchain_idx, IDirect3DSwapChain9 **swapchain) PURE;\n    STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE;\n    STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS *parameters) PURE;\n    STDMETHOD(Present)(THIS_ const RECT *src_rect, const RECT *dst_rect,\n            HWND dst_window_override, const RGNDATA *dirty_region) PURE;\n    STDMETHOD(GetBackBuffer)(THIS_ UINT swapchain_idx, UINT backbuffer_idx,\n            D3DBACKBUFFER_TYPE backbuffer_type, IDirect3DSurface9 **backbuffer) PURE;\n    STDMETHOD(GetRasterStatus)(THIS_ UINT swapchain_idx, D3DRASTER_STATUS *raster_status) PURE;\n    STDMETHOD(SetDialogBoxMode)(THIS_ BOOL enable) PURE;\n    STDMETHOD_(void, SetGammaRamp)(THIS_ UINT swapchain_idx, DWORD flags, const D3DGAMMARAMP *ramp) PURE;\n    STDMETHOD_(void, GetGammaRamp)(THIS_ UINT swapchain_idx, D3DGAMMARAMP *ramp) PURE;\n    STDMETHOD(CreateTexture)(THIS_ UINT width, UINT height, UINT levels, DWORD usage,\n            D3DFORMAT format, D3DPOOL pool, IDirect3DTexture9 **texture, HANDLE *shared_handle) PURE;\n    STDMETHOD(CreateVolumeTexture)(THIS_ UINT width, UINT height, UINT depth, UINT levels, DWORD usage,\n            D3DFORMAT format, D3DPOOL pool, IDirect3DVolumeTexture9 **texture, HANDLE *shared_handle) PURE;\n    STDMETHOD(CreateCubeTexture)(THIS_ UINT edge_length, UINT levels, DWORD usage,\n            D3DFORMAT format, D3DPOOL pool, IDirect3DCubeTexture9 **texture, HANDLE *shared_handle) PURE;\n    STDMETHOD(CreateVertexBuffer)(THIS_ UINT size, DWORD usage, DWORD fvf, D3DPOOL pool,\n            IDirect3DVertexBuffer9 **buffer, HANDLE *shared_handle) PURE;\n    STDMETHOD(CreateIndexBuffer)(THIS_ UINT size, DWORD usage, D3DFORMAT format, D3DPOOL pool,\n            IDirect3DIndexBuffer9 **buffer, HANDLE *shared_handle) PURE;\n    STDMETHOD(CreateRenderTarget)(THIS_ UINT width, UINT height, D3DFORMAT format,\n            D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality, BOOL lockable,\n            IDirect3DSurface9 **surface, HANDLE *shared_handle) PURE;\n    STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT width, UINT height, D3DFORMAT format,\n            D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality, BOOL discard,\n            IDirect3DSurface9 **surface, HANDLE *shared_handle) PURE;\n    STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9 *src_surface, const RECT *src_rect,\n            IDirect3DSurface9 *dst_surface, const POINT *dst_point) PURE;\n    STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9 *src_texture, IDirect3DBaseTexture9 *dst_texture) PURE;\n    STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9 *render_target, IDirect3DSurface9 *dst_surface) PURE;\n    STDMETHOD(GetFrontBufferData)(THIS_ UINT swapchain_idx, IDirect3DSurface9 *dst_surface) PURE;\n    STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9 *src_surface, const RECT *src_rect,\n            IDirect3DSurface9 *dst_surface, const RECT *dst_rect, D3DTEXTUREFILTERTYPE filter) PURE;\n    STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9 *surface, const RECT *rect, D3DCOLOR colour) PURE;\n    STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT width, UINT height, D3DFORMAT format, D3DPOOL pool,\n            IDirect3DSurface9 **surface, HANDLE *shared_handle) PURE;\n    STDMETHOD(SetRenderTarget)(THIS_ DWORD idx, IDirect3DSurface9 *surface) PURE;\n    STDMETHOD(GetRenderTarget)(THIS_ DWORD idx, IDirect3DSurface9 **surface) PURE;\n    STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9 *depth_stencil) PURE;\n    STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9 **depth_stencil) PURE;\n    STDMETHOD(BeginScene)(THIS) PURE;\n    STDMETHOD(EndScene)(THIS) PURE;\n    STDMETHOD(Clear)(THIS_ DWORD rect_count, const D3DRECT *rects, DWORD flags,\n            D3DCOLOR colour, float z, DWORD stencil) PURE;\n    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE;\n    STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, D3DMATRIX *matrix) PURE;\n    STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE;\n    STDMETHOD(SetViewport)(THIS_ const D3DVIEWPORT9 *viewport) PURE;\n    STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9 *viewport) PURE;\n    STDMETHOD(SetMaterial)(THIS_ const D3DMATERIAL9 *material) PURE;\n    STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9 *material) PURE;\n    STDMETHOD(SetLight)(THIS_ DWORD idx, const D3DLIGHT9 *light) PURE;\n    STDMETHOD(GetLight)(THIS_ DWORD idx, D3DLIGHT9 *light) PURE;\n    STDMETHOD(LightEnable)(THIS_ DWORD idx, BOOL enable) PURE;\n    STDMETHOD(GetLightEnable)(THIS_ DWORD idx, BOOL *enable) PURE;\n    STDMETHOD(SetClipPlane)(THIS_ DWORD idx, const float *plane) PURE;\n    STDMETHOD(GetClipPlane)(THIS_ DWORD idx, float *plane) PURE;\n    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE state, DWORD value) PURE;\n    STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE state, DWORD *value) PURE;\n    STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE type, IDirect3DStateBlock9 **stateblock) PURE;\n    STDMETHOD(BeginStateBlock)(THIS) PURE;\n    STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9 **stateblock) PURE;\n    STDMETHOD(SetClipStatus)(THIS_ const D3DCLIPSTATUS9 *clip_status) PURE;\n    STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9 *clip_status) PURE;\n    STDMETHOD(GetTexture)(THIS_ DWORD stage, IDirect3DBaseTexture9 **texture) PURE;\n    STDMETHOD(SetTexture)(THIS_ DWORD stage, IDirect3DBaseTexture9 *texture) PURE;\n    STDMETHOD(GetTextureStageState)(THIS_ DWORD stage, D3DTEXTURESTAGESTATETYPE state, DWORD *value) PURE;\n    STDMETHOD(SetTextureStageState)(THIS_ DWORD stage, D3DTEXTURESTAGESTATETYPE state, DWORD value) PURE;\n    STDMETHOD(GetSamplerState)(THIS_ DWORD sampler_idx, D3DSAMPLERSTATETYPE state, DWORD *value) PURE;\n    STDMETHOD(SetSamplerState)(THIS_ DWORD sampler_idx, D3DSAMPLERSTATETYPE state, DWORD value) PURE;\n    STDMETHOD(ValidateDevice)(THIS_ DWORD *pass_count) PURE;\n    STDMETHOD(SetPaletteEntries)(THIS_ UINT palette_idx, const PALETTEENTRY *entries) PURE;\n    STDMETHOD(GetPaletteEntries)(THIS_ UINT palette_idx, PALETTEENTRY *entries) PURE;\n    STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT palette_idx) PURE;\n    STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *palette_idx) PURE;\n    STDMETHOD(SetScissorRect)(THIS_ const RECT *rect) PURE;\n    STDMETHOD(GetScissorRect)(THIS_ RECT *rect) PURE;\n    STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL software) PURE;\n    STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE;\n    STDMETHOD(SetNPatchMode)(THIS_ float segment_count) PURE;\n    STDMETHOD_(float, GetNPatchMode)(THIS) PURE;\n    STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, UINT start_vertex, UINT primitive_count) PURE;\n    STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, INT base_vertex_idx, UINT min_vertex_idx,\n            UINT vertex_count, UINT start_idx, UINT primitive_count) PURE;\n    STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE primitive_type,\n            UINT primitive_count, const void *data, UINT stride) PURE;\n    STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE primitive_type, UINT min_vertex_idx, UINT vertex_count,\n            UINT primitive_count, const void *index_data, D3DFORMAT index_format, const void *data, UINT stride) PURE;\n    STDMETHOD(ProcessVertices)(THIS_ UINT src_start_idx, UINT dst_idx, UINT vertex_count,\n            IDirect3DVertexBuffer9 *dst_buffer, IDirect3DVertexDeclaration9 *declaration, DWORD flags) PURE;\n    STDMETHOD(CreateVertexDeclaration)(THIS_ const D3DVERTEXELEMENT9 *elements,\n            IDirect3DVertexDeclaration9 **declaration) PURE;\n    STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9 *declaration) PURE;\n    STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9 **declaration) PURE;\n    STDMETHOD(SetFVF)(THIS_ DWORD fvf) PURE;\n    STDMETHOD(GetFVF)(THIS_ DWORD *fvf) PURE;\n    STDMETHOD(CreateVertexShader)(THIS_ const DWORD *byte_code, IDirect3DVertexShader9 **shader) PURE;\n    STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9 *shader) PURE;\n    STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9 **shader) PURE;\n    STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT reg_idx, const float *data, UINT count) PURE;\n    STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT reg_idx, float *data, UINT count) PURE;\n    STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT reg_idx, const int *data, UINT count) PURE;\n    STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT reg_idx, int *data, UINT count) PURE;\n    STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT reg_idx, const BOOL *data, UINT count) PURE;\n    STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT reg_idx, BOOL *data, UINT count) PURE;\n    STDMETHOD(SetStreamSource)(THIS_ UINT stream_idx, IDirect3DVertexBuffer9 *buffer, UINT offset, UINT stride) PURE;\n    STDMETHOD(GetStreamSource)(THIS_ UINT stream_idx, IDirect3DVertexBuffer9 **buffer, UINT *offset, UINT *stride) PURE;\n    STDMETHOD(SetStreamSourceFreq)(THIS_ UINT stream_idx, UINT frequency) PURE;\n    STDMETHOD(GetStreamSourceFreq)(THIS_ UINT stream_idx, UINT *frequency) PURE;\n    STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9 *buffer) PURE;\n    STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9 **buffer) PURE;\n    STDMETHOD(CreatePixelShader)(THIS_ const DWORD *byte_code, IDirect3DPixelShader9 **shader) PURE;\n    STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9 *shader) PURE;\n    STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9 **shader) PURE;\n    STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT reg_idx, const float *data, UINT count) PURE;\n    STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT reg_idx, float *data, UINT count) PURE;\n    STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT reg_idx, const int *data, UINT count) PURE;\n    STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT reg_idx, int *data, UINT count) PURE;\n    STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT reg_idx, const BOOL *data, UINT count) PURE;\n    STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT reg_idx, BOOL *data, UINT count) PURE;\n    STDMETHOD(DrawRectPatch)(THIS_ UINT handle, const float *segment_count, const D3DRECTPATCH_INFO *patch_info) PURE;\n    STDMETHOD(DrawTriPatch)(THIS_ UINT handle, const float *segment_count, const D3DTRIPATCH_INFO *patch_info) PURE;\n    STDMETHOD(DeletePatch)(THIS_ UINT handle) PURE;\n    STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE type, IDirect3DQuery9 **query) PURE;\n    /* IDirect3DDevice9Ex */\n    STDMETHOD(SetConvolutionMonoKernel)(THIS_ UINT width, UINT height, float *rows, float *columns) PURE;\n    STDMETHOD(ComposeRects)(THIS_ IDirect3DSurface9 *src_surface, IDirect3DSurface9 *dst_surface,\n            IDirect3DVertexBuffer9 *src_descs, UINT rect_count, IDirect3DVertexBuffer9 *dst_descs,\n            D3DCOMPOSERECTSOP operation, INT offset_x, INT offset_y) PURE;\n    STDMETHOD(PresentEx)(THIS_ const RECT *src_rect, const RECT *dst_rect,\n            HWND dst_window_override, const RGNDATA *dirty_region, DWORD flags) PURE;\n    STDMETHOD(GetGPUThreadPriority)(THIS_ INT *priority) PURE;\n    STDMETHOD(SetGPUThreadPriority)(THIS_ INT priority) PURE;\n    STDMETHOD(WaitForVBlank)(THIS_ UINT swapchain_idx) PURE;\n    STDMETHOD(CheckResourceResidency)(THIS_ IDirect3DResource9 **resources, UINT32 resource_count) PURE;\n    STDMETHOD(SetMaximumFrameLatency)(THIS_ UINT max_latency) PURE;\n    STDMETHOD(GetMaximumFrameLatency)(THIS_ UINT *max_latency) PURE;\n    STDMETHOD(CheckDeviceState)(THIS_ HWND dst_window) PURE;\n    STDMETHOD(CreateRenderTargetEx)(THIS_ UINT width, UINT height, D3DFORMAT format,\n            D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality, BOOL lockable,\n            IDirect3DSurface9 **surface, HANDLE *shared_handle, DWORD usage) PURE;\n    STDMETHOD(CreateOffscreenPlainSurfaceEx)(THIS_ UINT width, UINT Height, D3DFORMAT format,\n            D3DPOOL pool, IDirect3DSurface9 **surface, HANDLE *shared_handle, DWORD usage) PURE;\n    STDMETHOD(CreateDepthStencilSurfaceEx)(THIS_ UINT width, UINT height, D3DFORMAT format,\n            D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality, BOOL discard,\n            IDirect3DSurface9 **surface, HANDLE *shared_handle, DWORD usage) PURE;\n    STDMETHOD(ResetEx)(THIS_ D3DPRESENT_PARAMETERS *parameters, D3DDISPLAYMODEEX *mode) PURE;\n    STDMETHOD(GetDisplayModeEx)(THIS_ UINT swapchain_idx, D3DDISPLAYMODEEX *mode, D3DDISPLAYROTATION *rotation) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/* IUnknown */\n#define IDirect3DDevice9Ex_QueryInterface(p,a,b)                            (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DDevice9Ex_AddRef(p)                                        (p)->lpVtbl->AddRef(p)\n#define IDirect3DDevice9Ex_Release(p)                                       (p)->lpVtbl->Release(p)\n/* IDirect3DDevice9 */\n#define IDirect3DDevice9Ex_TestCooperativeLevel(p)                          (p)->lpVtbl->TestCooperativeLevel(p)\n#define IDirect3DDevice9Ex_GetAvailableTextureMem(p)                        (p)->lpVtbl->GetAvailableTextureMem(p)\n#define IDirect3DDevice9Ex_EvictManagedResources(p)                         (p)->lpVtbl->EvictManagedResources(p)\n#define IDirect3DDevice9Ex_GetDirect3D(p,a)                                 (p)->lpVtbl->GetDirect3D(p,a)\n#define IDirect3DDevice9Ex_GetDeviceCaps(p,a)                               (p)->lpVtbl->GetDeviceCaps(p,a)\n#define IDirect3DDevice9Ex_GetDisplayMode(p,a,b)                            (p)->lpVtbl->GetDisplayMode(p,a,b)\n#define IDirect3DDevice9Ex_GetCreationParameters(p,a)                       (p)->lpVtbl->GetCreationParameters(p,a)\n#define IDirect3DDevice9Ex_SetCursorProperties(p,a,b,c)                     (p)->lpVtbl->SetCursorProperties(p,a,b,c)\n#define IDirect3DDevice9Ex_SetCursorPosition(p,a,b,c)                       (p)->lpVtbl->SetCursorPosition(p,a,b,c)\n#define IDirect3DDevice9Ex_ShowCursor(p,a)                                  (p)->lpVtbl->ShowCursor(p,a)\n#define IDirect3DDevice9Ex_CreateAdditionalSwapChain(p,a,b)                 (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b)\n#define IDirect3DDevice9Ex_GetSwapChain(p,a,b)                              (p)->lpVtbl->GetSwapChain(p,a,b)\n#define IDirect3DDevice9Ex_GetNumberOfSwapChains(p)                         (p)->lpVtbl->GetNumberOfSwapChains(p)\n#define IDirect3DDevice9Ex_Reset(p,a)                                       (p)->lpVtbl->Reset(p,a)\n#define IDirect3DDevice9Ex_Present(p,a,b,c,d)                               (p)->lpVtbl->Present(p,a,b,c,d)\n#define IDirect3DDevice9Ex_GetBackBuffer(p,a,b,c,d)                         (p)->lpVtbl->GetBackBuffer(p,a,b,c,d)\n#define IDirect3DDevice9Ex_GetRasterStatus(p,a,b)                           (p)->lpVtbl->GetRasterStatus(p,a,b)\n#define IDirect3DDevice9Ex_SetDialogBoxMode(p,a)                            (p)->lpVtbl->SetDialogBoxMode(p,a)\n#define IDirect3DDevice9Ex_SetGammaRamp(p,a,b,c)                            (p)->lpVtbl->SetGammaRamp(p,a,b,c)\n#define IDirect3DDevice9Ex_GetGammaRamp(p,a,b)                              (p)->lpVtbl->GetGammaRamp(p,a,b)\n#define IDirect3DDevice9Ex_CreateTexture(p,a,b,c,d,e,f,g,h)                 (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9Ex_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)         (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)\n#define IDirect3DDevice9Ex_CreateCubeTexture(p,a,b,c,d,e,f,g)               (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g)\n#define IDirect3DDevice9Ex_CreateVertexBuffer(p,a,b,c,d,e,f)                (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f)\n#define IDirect3DDevice9Ex_CreateIndexBuffer(p,a,b,c,d,e,f)                 (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f)\n#define IDirect3DDevice9Ex_CreateRenderTarget(p,a,b,c,d,e,f,g,h)            (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9Ex_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)     (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9Ex_UpdateSurface(p,a,b,c,d)                         (p)->lpVtbl->UpdateSurface(p,a,b,c,d)\n#define IDirect3DDevice9Ex_UpdateTexture(p,a,b)                             (p)->lpVtbl->UpdateTexture(p,a,b)\n#define IDirect3DDevice9Ex_GetRenderTargetData(p,a,b)                       (p)->lpVtbl->GetRenderTargetData(p,a,b)\n#define IDirect3DDevice9Ex_GetFrontBufferData(p,a,b)                        (p)->lpVtbl->GetFrontBufferData(p,a,b)\n#define IDirect3DDevice9Ex_StretchRect(p,a,b,c,d,e)                         (p)->lpVtbl->StretchRect(p,a,b,c,d,e)\n#define IDirect3DDevice9Ex_ColorFill(p,a,b,c)                               (p)->lpVtbl->ColorFill(p,a,b,c)\n#define IDirect3DDevice9Ex_CreateOffscreenPlainSurface(p,a,b,c,d,e,f)       (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f)\n#define IDirect3DDevice9Ex_SetRenderTarget(p,a,b)                           (p)->lpVtbl->SetRenderTarget(p,a,b)\n#define IDirect3DDevice9Ex_GetRenderTarget(p,a,b)                           (p)->lpVtbl->GetRenderTarget(p,a,b)\n#define IDirect3DDevice9Ex_SetDepthStencilSurface(p,a)                      (p)->lpVtbl->SetDepthStencilSurface(p,a)\n#define IDirect3DDevice9Ex_GetDepthStencilSurface(p,a)                      (p)->lpVtbl->GetDepthStencilSurface(p,a)\n#define IDirect3DDevice9Ex_BeginScene(p)                                    (p)->lpVtbl->BeginScene(p)\n#define IDirect3DDevice9Ex_EndScene(p)                                      (p)->lpVtbl->EndScene(p)\n#define IDirect3DDevice9Ex_Clear(p,a,b,c,d,e,f)                             (p)->lpVtbl->Clear(p,a,b,c,d,e,f)\n#define IDirect3DDevice9Ex_SetTransform(p,a,b)                              (p)->lpVtbl->SetTransform(p,a,b)\n#define IDirect3DDevice9Ex_GetTransform(p,a,b)                              (p)->lpVtbl->GetTransform(p,a,b)\n#define IDirect3DDevice9Ex_MultiplyTransform(p,a,b)                         (p)->lpVtbl->MultiplyTransform(p,a,b)\n#define IDirect3DDevice9Ex_SetViewport(p,a)                                 (p)->lpVtbl->SetViewport(p,a)\n#define IDirect3DDevice9Ex_GetViewport(p,a)                                 (p)->lpVtbl->GetViewport(p,a)\n#define IDirect3DDevice9Ex_SetMaterial(p,a)                                 (p)->lpVtbl->SetMaterial(p,a)\n#define IDirect3DDevice9Ex_GetMaterial(p,a)                                 (p)->lpVtbl->GetMaterial(p,a)\n#define IDirect3DDevice9Ex_SetLight(p,a,b)                                  (p)->lpVtbl->SetLight(p,a,b)\n#define IDirect3DDevice9Ex_GetLight(p,a,b)                                  (p)->lpVtbl->GetLight(p,a,b)\n#define IDirect3DDevice9Ex_LightEnable(p,a,b)                               (p)->lpVtbl->LightEnable(p,a,b)\n#define IDirect3DDevice9Ex_GetLightEnable(p,a,b)                            (p)->lpVtbl->GetLightEnable(p,a,b)\n#define IDirect3DDevice9Ex_SetClipPlane(p,a,b)                              (p)->lpVtbl->SetClipPlane(p,a,b)\n#define IDirect3DDevice9Ex_GetClipPlane(p,a,b)                              (p)->lpVtbl->GetClipPlane(p,a,b)\n#define IDirect3DDevice9Ex_SetRenderState(p,a,b)                            (p)->lpVtbl->SetRenderState(p,a,b)\n#define IDirect3DDevice9Ex_GetRenderState(p,a,b)                            (p)->lpVtbl->GetRenderState(p,a,b)\n#define IDirect3DDevice9Ex_CreateStateBlock(p,a,b)                          (p)->lpVtbl->CreateStateBlock(p,a,b)\n#define IDirect3DDevice9Ex_BeginStateBlock(p)                               (p)->lpVtbl->BeginStateBlock(p)\n#define IDirect3DDevice9Ex_EndStateBlock(p,a)                               (p)->lpVtbl->EndStateBlock(p,a)\n#define IDirect3DDevice9Ex_SetClipStatus(p,a)                               (p)->lpVtbl->SetClipStatus(p,a)\n#define IDirect3DDevice9Ex_GetClipStatus(p,a)                               (p)->lpVtbl->GetClipStatus(p,a)\n#define IDirect3DDevice9Ex_GetTexture(p,a,b)                                (p)->lpVtbl->GetTexture(p,a,b)\n#define IDirect3DDevice9Ex_SetTexture(p,a,b)                                (p)->lpVtbl->SetTexture(p,a,b)\n#define IDirect3DDevice9Ex_GetTextureStageState(p,a,b,c)                    (p)->lpVtbl->GetTextureStageState(p,a,b,c)\n#define IDirect3DDevice9Ex_SetTextureStageState(p,a,b,c)                    (p)->lpVtbl->SetTextureStageState(p,a,b,c)\n#define IDirect3DDevice9Ex_GetSamplerState(p,a,b,c)                         (p)->lpVtbl->GetSamplerState(p,a,b,c)\n#define IDirect3DDevice9Ex_SetSamplerState(p,a,b,c)                         (p)->lpVtbl->SetSamplerState(p,a,b,c)\n#define IDirect3DDevice9Ex_ValidateDevice(p,a)                              (p)->lpVtbl->ValidateDevice(p,a)\n#define IDirect3DDevice9Ex_SetPaletteEntries(p,a,b)                         (p)->lpVtbl->SetPaletteEntries(p,a,b)\n#define IDirect3DDevice9Ex_GetPaletteEntries(p,a,b)                         (p)->lpVtbl->GetPaletteEntries(p,a,b)\n#define IDirect3DDevice9Ex_SetCurrentTexturePalette(p,a)                    (p)->lpVtbl->SetCurrentTexturePalette(p,a)\n#define IDirect3DDevice9Ex_GetCurrentTexturePalette(p,a)                    (p)->lpVtbl->GetCurrentTexturePalette(p,a)\n#define IDirect3DDevice9Ex_SetScissorRect(p,a)                              (p)->lpVtbl->SetScissorRect(p,a)\n#define IDirect3DDevice9Ex_GetScissorRect(p,a)                              (p)->lpVtbl->GetScissorRect(p,a)\n#define IDirect3DDevice9Ex_SetSoftwareVertexProcessing(p,a)                 (p)->lpVtbl->SetSoftwareVertexProcessing(p,a)\n#define IDirect3DDevice9Ex_GetSoftwareVertexProcessing(p)                   (p)->lpVtbl->GetSoftwareVertexProcessing(p)\n#define IDirect3DDevice9Ex_SetNPatchMode(p,a)                               (p)->lpVtbl->SetNPatchMode(p,a)\n#define IDirect3DDevice9Ex_GetNPatchMode(p)                                 (p)->lpVtbl->GetNPatchMode(p)\n#define IDirect3DDevice9Ex_DrawPrimitive(p,a,b,c)                           (p)->lpVtbl->DrawPrimitive(p,a,b,c)\n#define IDirect3DDevice9Ex_DrawIndexedPrimitive(p,a,b,c,d,e,f)              (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f)\n#define IDirect3DDevice9Ex_DrawPrimitiveUP(p,a,b,c,d)                       (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)\n#define IDirect3DDevice9Ex_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)        (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9Ex_ProcessVertices(p,a,b,c,d,e,f)                   (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f)\n#define IDirect3DDevice9Ex_CreateVertexDeclaration(p,a,b)                   (p)->lpVtbl->CreateVertexDeclaration(p,a,b)\n#define IDirect3DDevice9Ex_SetVertexDeclaration(p,a)                        (p)->lpVtbl->SetVertexDeclaration(p,a)\n#define IDirect3DDevice9Ex_GetVertexDeclaration(p,a)                        (p)->lpVtbl->GetVertexDeclaration(p,a)\n#define IDirect3DDevice9Ex_SetFVF(p,a)                                      (p)->lpVtbl->SetFVF(p,a)\n#define IDirect3DDevice9Ex_GetFVF(p,a)                                      (p)->lpVtbl->GetFVF(p,a)\n#define IDirect3DDevice9Ex_CreateVertexShader(p,a,b)                        (p)->lpVtbl->CreateVertexShader(p,a,b)\n#define IDirect3DDevice9Ex_SetVertexShader(p,a)                             (p)->lpVtbl->SetVertexShader(p,a)\n#define IDirect3DDevice9Ex_GetVertexShader(p,a)                             (p)->lpVtbl->GetVertexShader(p,a)\n#define IDirect3DDevice9Ex_SetVertexShaderConstantF(p,a,b,c)                (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c)\n#define IDirect3DDevice9Ex_GetVertexShaderConstantF(p,a,b,c)                (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c)\n#define IDirect3DDevice9Ex_SetVertexShaderConstantI(p,a,b,c)                (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c)\n#define IDirect3DDevice9Ex_GetVertexShaderConstantI(p,a,b,c)                (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c)\n#define IDirect3DDevice9Ex_SetVertexShaderConstantB(p,a,b,c)                (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c)\n#define IDirect3DDevice9Ex_GetVertexShaderConstantB(p,a,b,c)                (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c)\n#define IDirect3DDevice9Ex_SetStreamSource(p,a,b,c,d)                       (p)->lpVtbl->SetStreamSource(p,a,b,c,d)\n#define IDirect3DDevice9Ex_GetStreamSource(p,a,b,c,d)                       (p)->lpVtbl->GetStreamSource(p,a,b,c,d)\n#define IDirect3DDevice9Ex_SetStreamSourceFreq(p,a,b)                       (p)->lpVtbl->SetStreamSourceFreq(p,a,b)\n#define IDirect3DDevice9Ex_GetStreamSourceFreq(p,a,b)                       (p)->lpVtbl->GetStreamSourceFreq(p,a,b)\n#define IDirect3DDevice9Ex_SetIndices(p,a)                                  (p)->lpVtbl->SetIndices(p,a)\n#define IDirect3DDevice9Ex_GetIndices(p,a)                                  (p)->lpVtbl->GetIndices(p,a)\n#define IDirect3DDevice9Ex_CreatePixelShader(p,a,b)                         (p)->lpVtbl->CreatePixelShader(p,a,b)\n#define IDirect3DDevice9Ex_SetPixelShader(p,a)                              (p)->lpVtbl->SetPixelShader(p,a)\n#define IDirect3DDevice9Ex_GetPixelShader(p,a)                              (p)->lpVtbl->GetPixelShader(p,a)\n#define IDirect3DDevice9Ex_SetPixelShaderConstantF(p,a,b,c)                 (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c)\n#define IDirect3DDevice9Ex_GetPixelShaderConstantF(p,a,b,c)                 (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c)\n#define IDirect3DDevice9Ex_SetPixelShaderConstantI(p,a,b,c)                 (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c)\n#define IDirect3DDevice9Ex_GetPixelShaderConstantI(p,a,b,c)                 (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c)\n#define IDirect3DDevice9Ex_SetPixelShaderConstantB(p,a,b,c)                 (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c)\n#define IDirect3DDevice9Ex_GetPixelShaderConstantB(p,a,b,c)                 (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c)\n#define IDirect3DDevice9Ex_DrawRectPatch(p,a,b,c)                           (p)->lpVtbl->DrawRectPatch(p,a,b,c)\n#define IDirect3DDevice9Ex_DrawTriPatch(p,a,b,c)                            (p)->lpVtbl->DrawTriPatch(p,a,b,c)\n#define IDirect3DDevice9Ex_DeletePatch(p,a)                                 (p)->lpVtbl->DeletePatch(p,a)\n#define IDirect3DDevice9Ex_CreateQuery(p,a,b)                               (p)->lpVtbl->CreateQuery(p,a,b)\n/* IDirect3DDevice9Ex */\n#define IDirect3DDevice9Ex_SetConvolutionMonoKernel(p,a,b,c,d)              (p)->lpVtbl->SetConvolutionMonoKernel(p,a,b,c,d)\n#define IDirect3DDevice9Ex_ComposeRects(p,a,b,c,d,e,f,g,h)                  (p)->lpVtbl->ComposeRects(p,a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9Ex_PresentEx(p,a,b,c,d,e)                           (p)->lpVtbl->PresentEx(p,a,b,c,d,e)\n#define IDirect3DDevice9Ex_GetGPUThreadPriority(p,a)                        (p)->lpVtbl->GetGPUThreadPriority(p,a)\n#define IDirect3DDevice9Ex_SetGPUThreadPriority(p,a)                        (p)->lpVtbl->SetGPUThreadPriority(p,a)\n#define IDirect3DDevice9Ex_WaitForVBlank(p,a)                               (p)->lpVtbl->WaitForVBlank(p,a)\n#define IDirect3DDevice9Ex_CheckResourceResidency(p,a,b)                    (p)->lpVtbl->CheckResourceResidency(p,a,b)\n#define IDirect3DDevice9Ex_SetMaximumFrameLatency(p,a)                      (p)->lpVtbl->SetMaximumFrameLatency(p,a)\n#define IDirect3DDevice9Ex_GetMaximumFrameLatency(p,a)                      (p)->lpVtbl->GetMaximumFrameLatency(p,a)\n#define IDirect3DDevice9Ex_CheckDeviceState(p,a)                            (p)->lpVtbl->CheckDeviceState(p,a)\n#define IDirect3DDevice9Ex_CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i)        (p)->lpVtbl->CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i)\n#define IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g)   (p)->lpVtbl->CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g)\n#define IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i)\n#define IDirect3DDevice9Ex_ResetEx(p,a,b)                                   (p)->lpVtbl->ResetEx(p,a,b)\n#define IDirect3DDevice9Ex_GetDisplayModeEx(p,a,b,c)                        (p)->lpVtbl->GetDisplayModeEx(p,a,b,c)\n#else\n/* IUnknown */\n#define IDirect3DDevice9Ex_QueryInterface(p,a,b)                            (p)->QueryInterface(a,b)\n#define IDirect3DDevice9Ex_AddRef(p)                                        (p)->AddRef()\n#define IDirect3DDevice9Ex_Release(p)                                       (p)->Release()\n/* IDirect3DDevice9 */\n#define IDirect3DDevice9Ex_TestCooperativeLevel(p)                          (p)->TestCooperativeLevel()\n#define IDirect3DDevice9Ex_GetAvailableTextureMem(p)                        (p)->GetAvailableTextureMem()\n#define IDirect3DDevice9Ex_EvictManagedResources(p)                         (p)->EvictManagedResources()\n#define IDirect3DDevice9Ex_GetDirect3D(p,a)                                 (p)->GetDirect3D(a)\n#define IDirect3DDevice9Ex_GetDeviceCaps(p,a)                               (p)->GetDeviceCaps(a)\n#define IDirect3DDevice9Ex_GetDisplayMode(p,a,b)                            (p)->GetDisplayMode(a,b)\n#define IDirect3DDevice9Ex_GetCreationParameters(p,a)                       (p)->GetCreationParameters(a)\n#define IDirect3DDevice9Ex_SetCursorProperties(p,a,b,c)                     (p)->SetCursorProperties(a,b,c)\n#define IDirect3DDevice9Ex_SetCursorPosition(p,a,b,c)                       (p)->SetCursorPosition(a,b,c)\n#define IDirect3DDevice9Ex_ShowCursor(p,a)                                  (p)->ShowCursor(a)\n#define IDirect3DDevice9Ex_CreateAdditionalSwapChain(p,a,b)                 (p)->CreateAdditionalSwapChain(a,b)\n#define IDirect3DDevice9Ex_GetSwapChain(p,a,b)                              (p)->GetSwapChain(a,b)\n#define IDirect3DDevice9Ex_GetNumberOfSwapChains(p)                         (p)->GetNumberOfSwapChains()\n#define IDirect3DDevice9Ex_Reset(p,a)                                       (p)->Reset(a)\n#define IDirect3DDevice9Ex_Present(p,a,b,c,d)                               (p)->Present(a,b,c,d)\n#define IDirect3DDevice9Ex_GetBackBuffer(p,a,b,c,d)                         (p)->GetBackBuffer(a,b,c,d)\n#define IDirect3DDevice9Ex_GetRasterStatus(p,a,b)                           (p)->GetRasterStatus(a,b)\n#define IDirect3DDevice9Ex_SetDialogBoxMode(p,a)                            (p)->SetDialogBoxMode(a)\n#define IDirect3DDevice9Ex_SetGammaRamp(p,a,b,c)                            (p)->SetGammaRamp(a,b,c)\n#define IDirect3DDevice9Ex_GetGammaRamp(p,a,b)                              (p)->GetGammaRamp(a,b)\n#define IDirect3DDevice9Ex_CreateTexture(p,a,b,c,d,e,f,g,h)                 (p)->CreateTexture(a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9Ex_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)         (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i)\n#define IDirect3DDevice9Ex_CreateCubeTexture(p,a,b,c,d,e,f,g)               (p)->CreateCubeTexture(a,b,c,d,e,f,g)\n#define IDirect3DDevice9Ex_CreateVertexBuffer(p,a,b,c,d,e,f)                (p)->CreateVertexBuffer(a,b,c,d,e,f)\n#define IDirect3DDevice9Ex_CreateIndexBuffer(p,a,b,c,d,e,f)                 (p)->CreateIndexBuffer(a,b,c,d,e,f)\n#define IDirect3DDevice9Ex_CreateRenderTarget(p,a,b,c,d,e,f,g,h)            (p)->CreateRenderTarget(a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9Ex_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)     (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9Ex_UpdateSurface(p,a,b,c,d)                         (p)->UpdateSurface(a,b,c,d)\n#define IDirect3DDevice9Ex_UpdateTexture(p,a,b)                             (p)->UpdateTexture(a,b)\n#define IDirect3DDevice9Ex_GetRenderTargetData(p,a,b)                       (p)->GetRenderTargetData(a,b)\n#define IDirect3DDevice9Ex_GetFrontBufferData(p,a,b)                        (p)->GetFrontBufferData(a,b)\n#define IDirect3DDevice9Ex_StretchRect(p,a,b,c,d,e)                         (p)->StretchRect(a,b,c,d,e)\n#define IDirect3DDevice9Ex_ColorFill(p,a,b,c)                               (p)->ColorFill(a,b,c)\n#define IDirect3DDevice9Ex_CreateOffscreenPlainSurface(p,a,b,c,d,e,f)       (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f)\n#define IDirect3DDevice9Ex_SetRenderTarget(p,a,b)                           (p)->SetRenderTarget(a,b)\n#define IDirect3DDevice9Ex_GetRenderTarget(p,a,b)                           (p)->GetRenderTarget(a,b)\n#define IDirect3DDevice9Ex_SetDepthStencilSurface(p,a)                      (p)->SetDepthStencilSurface(a)\n#define IDirect3DDevice9Ex_GetDepthStencilSurface(p,a)                      (p)->GetDepthStencilSurface(a)\n#define IDirect3DDevice9Ex_BeginScene(p)                                    (p)->BeginScene()\n#define IDirect3DDevice9Ex_EndScene(p)                                      (p)->EndScene()\n#define IDirect3DDevice9Ex_Clear(p,a,b,c,d,e,f)                             (p)->Clear(a,b,c,d,e,f)\n#define IDirect3DDevice9Ex_SetTransform(p,a,b)                              (p)->SetTransform(a,b)\n#define IDirect3DDevice9Ex_GetTransform(p,a,b)                              (p)->GetTransform(a,b)\n#define IDirect3DDevice9Ex_MultiplyTransform(p,a,b)                         (p)->MultiplyTransform(a,b)\n#define IDirect3DDevice9Ex_SetViewport(p,a)                                 (p)->SetViewport(a)\n#define IDirect3DDevice9Ex_GetViewport(p,a)                                 (p)->GetViewport(a)\n#define IDirect3DDevice9Ex_SetMaterial(p,a)                                 (p)->SetMaterial(a)\n#define IDirect3DDevice9Ex_GetMaterial(p,a)                                 (p)->GetMaterial(a)\n#define IDirect3DDevice9Ex_SetLight(p,a,b)                                  (p)->SetLight(a,b)\n#define IDirect3DDevice9Ex_GetLight(p,a,b)                                  (p)->GetLight(a,b)\n#define IDirect3DDevice9Ex_LightEnable(p,a,b)                               (p)->LightEnable(a,b)\n#define IDirect3DDevice9Ex_GetLightEnable(p,a,b)                            (p)->GetLightEnable(a,b)\n#define IDirect3DDevice9Ex_SetClipPlane(p,a,b)                              (p)->SetClipPlane(a,b)\n#define IDirect3DDevice9Ex_GetClipPlane(p,a,b)                              (p)->GetClipPlane(a,b)\n#define IDirect3DDevice9Ex_SetRenderState(p,a,b)                            (p)->SetRenderState(a,b)\n#define IDirect3DDevice9Ex_GetRenderState(p,a,b)                            (p)->GetRenderState(a,b)\n#define IDirect3DDevice9Ex_CreateStateBlock(p,a,b)                          (p)->CreateStateBlock(a,b)\n#define IDirect3DDevice9Ex_BeginStateBlock(p)                               (p)->BeginStateBlock()\n#define IDirect3DDevice9Ex_EndStateBlock(p,a)                               (p)->EndStateBlock(a)\n#define IDirect3DDevice9Ex_SetClipStatus(p,a)                               (p)->SetClipStatus(a)\n#define IDirect3DDevice9Ex_GetClipStatus(p,a)                               (p)->GetClipStatus(a)\n#define IDirect3DDevice9Ex_GetTexture(p,a,b)                                (p)->GetTexture(a,b)\n#define IDirect3DDevice9Ex_SetTexture(p,a,b)                                (p)->SetTexture(a,b)\n#define IDirect3DDevice9Ex_GetTextureStageState(p,a,b,c)                    (p)->GetTextureStageState(a,b,c)\n#define IDirect3DDevice9Ex_SetTextureStageState(p,a,b,c)                    (p)->SetTextureStageState(a,b,c)\n#define IDirect3DDevice9Ex_GetSamplerState(p,a,b,c)                         (p)->GetSamplerState(a,b,c)\n#define IDirect3DDevice9Ex_SetSamplerState(p,a,b,c)                         (p)->SetSamplerState(a,b,c)\n#define IDirect3DDevice9Ex_ValidateDevice(p,a)                              (p)->ValidateDevice(a)\n#define IDirect3DDevice9Ex_SetPaletteEntries(p,a,b)                         (p)->SetPaletteEntries(a,b)\n#define IDirect3DDevice9Ex_GetPaletteEntries(p,a,b)                         (p)->GetPaletteEntries(a,b)\n#define IDirect3DDevice9Ex_SetCurrentTexturePalette(p,a)                    (p)->SetCurrentTexturePalette(a)\n#define IDirect3DDevice9Ex_GetCurrentTexturePalette(p,a)                    (p)->GetCurrentTexturePalette(a)\n#define IDirect3DDevice9Ex_SetScissorRect(p,a)                              (p)->SetScissorRect(a)\n#define IDirect3DDevice9Ex_GetScissorRect(p,a)                              (p)->GetScissorRect(a)\n#define IDirect3DDevice9Ex_SetSoftwareVertexProcessing(p,a)                 (p)->SetSoftwareVertexProcessing(a)\n#define IDirect3DDevice9Ex_GetSoftwareVertexProcessing(p)                   (p)->GetSoftwareVertexProcessing()\n#define IDirect3DDevice9Ex_SetNPatchMode(p,a)                               (p)->SetNPatchMode(a)\n#define IDirect3DDevice9Ex_GetNPatchMode(p)                                 (p)->GetNPatchMode()\n#define IDirect3DDevice9Ex_DrawPrimitive(p,a,b,c)                           (p)->DrawPrimitive(a,b,c)\n#define IDirect3DDevice9Ex_DrawIndexedPrimitive(p,a,b,c,d,e,f)              (p)->DrawIndexedPrimitive(a,b,c,d,e,f)\n#define IDirect3DDevice9Ex_DrawPrimitiveUP(p,a,b,c,d)                       (p)->DrawPrimitiveUP(a,b,c,d)\n#define IDirect3DDevice9Ex_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)        (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9Ex_ProcessVertices(p,a,b,c,d,e,f)                   (p)->ProcessVertices(a,b,c,d,e,f)\n#define IDirect3DDevice9Ex_CreateVertexDeclaration(p,a,b)                   (p)->CreateVertexDeclaration(a,b)\n#define IDirect3DDevice9Ex_SetVertexDeclaration(p,a)                        (p)->SetVertexDeclaration(a)\n#define IDirect3DDevice9Ex_GetVertexDeclaration(p,a)                        (p)->GetVertexDeclaration(a)\n#define IDirect3DDevice9Ex_SetFVF(p,a)                                      (p)->SetFVF(a)\n#define IDirect3DDevice9Ex_GetFVF(p,a)                                      (p)->GetFVF(a)\n#define IDirect3DDevice9Ex_CreateVertexShader(p,a,b)                        (p)->CreateVertexShader(a,b)\n#define IDirect3DDevice9Ex_SetVertexShader(p,a)                             (p)->SetVertexShader(a)\n#define IDirect3DDevice9Ex_GetVertexShader(p,a)                             (p)->GetVertexShader(a)\n#define IDirect3DDevice9Ex_SetVertexShaderConstantF(p,a,b,c)                (p)->SetVertexShaderConstantF(a,b,c)\n#define IDirect3DDevice9Ex_GetVertexShaderConstantF(p,a,b,c)                (p)->GetVertexShaderConstantF(a,b,c)\n#define IDirect3DDevice9Ex_SetVertexShaderConstantI(p,a,b,c)                (p)->SetVertexShaderConstantI(a,b,c)\n#define IDirect3DDevice9Ex_GetVertexShaderConstantI(p,a,b,c)                (p)->GetVertexShaderConstantI(a,b,c)\n#define IDirect3DDevice9Ex_SetVertexShaderConstantB(p,a,b,c)                (p)->SetVertexShaderConstantB(a,b,c)\n#define IDirect3DDevice9Ex_GetVertexShaderConstantB(p,a,b,c)                (p)->GetVertexShaderConstantB(a,b,c)\n#define IDirect3DDevice9Ex_SetStreamSource(p,a,b,c,d)                       (p)->SetStreamSource(a,b,c,d)\n#define IDirect3DDevice9Ex_GetStreamSource(p,a,b,c,d)                       (p)->GetStreamSource(a,b,c,d)\n#define IDirect3DDevice9Ex_SetStreamSourceFreq(p,a,b)                       (p)->SetStreamSourceFreq(a,b)\n#define IDirect3DDevice9Ex_GetStreamSourceFreq(p,a,b)                       (p)->GetStreamSourceFreq(a,b)\n#define IDirect3DDevice9Ex_SetIndices(p,a)                                  (p)->SetIndices(a)\n#define IDirect3DDevice9Ex_GetIndices(p,a)                                  (p)->GetIndices(a)\n#define IDirect3DDevice9Ex_CreatePixelShader(p,a,b)                         (p)->CreatePixelShader(a,b)\n#define IDirect3DDevice9Ex_SetPixelShader(p,a)                              (p)->SetPixelShader(a)\n#define IDirect3DDevice9Ex_GetPixelShader(p,a)                              (p)->GetPixelShader(a)\n#define IDirect3DDevice9Ex_SetPixelShaderConstantF(p,a,b,c)                 (p)->SetPixelShaderConstantF(a,b,c)\n#define IDirect3DDevice9Ex_GetPixelShaderConstantF(p,a,b,c)                 (p)->GetPixelShaderConstantF(a,b,c)\n#define IDirect3DDevice9Ex_SetPixelShaderConstantI(p,a,b,c)                 (p)->SetPixelShaderConstantI(a,b,c)\n#define IDirect3DDevice9Ex_GetPixelShaderConstantI(p,a,b,c)                 (p)->GetPixelShaderConstantI(a,b,c)\n#define IDirect3DDevice9Ex_SetPixelShaderConstantB(p,a,b,c)                 (p)->SetPixelShaderConstantB(a,b,c)\n#define IDirect3DDevice9Ex_GetPixelShaderConstantB(p,a,b,c)                 (p)->GetPixelShaderConstantB(a,b,c)\n#define IDirect3DDevice9Ex_DrawRectPatch(p,a,b,c)                           (p)->DrawRectPatch(a,b,c)\n#define IDirect3DDevice9Ex_DrawTriPatch(p,a,b,c)                            (p)->DrawTriPatch(a,b,c)\n#define IDirect3DDevice9Ex_DeletePatch(p,a)                                 (p)->DeletePatch(a)\n#define IDirect3DDevice9Ex_CreateQuery(p,a,b)                               (p)->CreateQuery(a,b)\n/* IDirect3DDevice9Ex */\n#define IDirect3DDevice9Ex_SetConvolutionMonoKernel(p,a,b,c,d)              (p)->SetConvolutionMonoKernel(a,b,c,d)\n#define IDirect3DDevice9Ex_ComposeRects(p,a,b,c,d,e,f,g,h)                  (p)->ComposeRects(a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9Ex_PresentEx(p,a,b,c,d,e)                           (p)->PresentEx(a,b,c,d,e)\n#define IDirect3DDevice9Ex_GetGPUThreadPriority(p,a)                        (p)->GetGPUThreadPriority(a)\n#define IDirect3DDevice9Ex_SetGPUThreadPriority(p,a)                        (p)->SetGPUThreadPriority(a)\n#define IDirect3DDevice9Ex_WaitForVBlank(p,a)                               (p)->WaitForVBlank(a)\n#define IDirect3DDevice9Ex_CheckResourceResidency(p,a,b)                    (p)->CheckResourceResidency(a,b)\n#define IDirect3DDevice9Ex_SetMaximumFrameLatency(p,a)                      (p)->SetMaximumFrameLatency(a)\n#define IDirect3DDevice9Ex_GetMaximumFrameLatency(p,a)                      (p)->GetMaximumFrameLatency(a)\n#define IDirect3DDevice9Ex_CheckDeviceState(p,a)                            (p)->CheckDeviceState(a)\n#define IDirect3DDevice9Ex_CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i)        (p)->CreateRenderTargetEx(a,b,c,d,e,f,g,h,i)\n#define IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g)   (p)->CreateOffscreenPlainSurfaceEx(a,b,c,d,e,f,g)\n#define IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i) (p)->CreateDepthStencilSurfaceEx(a,b,c,d,e,f,g,h,i)\n#define IDirect3DDevice9Ex_ResetEx(p,a,b)                                   (p)->ResetEx(a,b)\n#define IDirect3DDevice9Ex_GetDisplayModeEx(p,a,b,c)                        (p)->GetDisplayModeEx(a,b,c)\n#endif\n\n#endif /* !defined(D3D_DISABLE_9EX) */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif  /* defined(__cplusplus) */\n\nint WINAPI D3DPERF_BeginEvent(D3DCOLOR color, const WCHAR *name);\nint WINAPI D3DPERF_EndEvent(void);\nDWORD WINAPI D3DPERF_GetStatus(void);\nBOOL WINAPI D3DPERF_QueryRepeatFrame(void);\nvoid WINAPI D3DPERF_SetMarker(D3DCOLOR color, const WCHAR *name);\nvoid WINAPI D3DPERF_SetOptions(DWORD options);\nvoid WINAPI D3DPERF_SetRegion(D3DCOLOR color, const WCHAR *name);\n\nIDirect3D9 * WINAPI Direct3DCreate9(UINT sdk_version);\n#ifndef D3D_DISABLE_9EX\nHRESULT WINAPI Direct3DCreate9Ex(UINT sdk_version, IDirect3D9Ex **d3d9ex);\n#endif\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n\n#endif /* _D3D9_H_ */\n"
  },
  {
    "path": "wine/windows/d3d9caps.h",
    "content": "/*\n * Copyright (C) 2002-2003 Jason Edmeades\n *                         Raphael Junqueira\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_D3D9CAPS_H\n#define __WINE_D3D9CAPS_H\n\n#ifdef __i386__\n#include <pshpack4.h>\n#endif\n\n/*\n * Definitions\n */\n#define D3DCAPS_OVERLAY       __MSABI_LONG(0x00000800)\n#define D3DCAPS_READ_SCANLINE __MSABI_LONG(0x00020000)\n\n#define D3DCURSORCAPS_COLOR   1\n#define D3DCURSORCAPS_LOWRES  2\n\n\n#define D3DDEVCAPS2_STREAMOFFSET                        __MSABI_LONG(0x00000001)\n#define D3DDEVCAPS2_DMAPNPATCH                          __MSABI_LONG(0x00000002)\n#define D3DDEVCAPS2_ADAPTIVETESSRTPATCH                 __MSABI_LONG(0x00000004)\n#define D3DDEVCAPS2_ADAPTIVETESSNPATCH                  __MSABI_LONG(0x00000008)\n#define D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES       __MSABI_LONG(0x00000010)\n#define D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH                __MSABI_LONG(0x00000020)\n#define D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET  __MSABI_LONG(0x00000040)\n\n#define D3DDEVCAPS_EXECUTESYSTEMMEMORY     0x0000010\n#define D3DDEVCAPS_EXECUTEVIDEOMEMORY      0x0000020\n#define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY    0x0000040\n#define D3DDEVCAPS_TLVERTEXVIDEOMEMORY     0x0000080\n#define D3DDEVCAPS_TEXTURESYSTEMMEMORY     0x0000100\n#define D3DDEVCAPS_TEXTUREVIDEOMEMORY      0x0000200\n#define D3DDEVCAPS_DRAWPRIMTLVERTEX        0x0000400\n#define D3DDEVCAPS_CANRENDERAFTERFLIP      0x0000800\n#define D3DDEVCAPS_TEXTURENONLOCALVIDMEM   0x0001000\n#define D3DDEVCAPS_DRAWPRIMITIVES2         0x0002000\n#define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x0004000\n#define D3DDEVCAPS_DRAWPRIMITIVES2EX       0x0008000\n#define D3DDEVCAPS_HWTRANSFORMANDLIGHT     0x0010000\n#define D3DDEVCAPS_CANBLTSYSTONONLOCAL     0x0020000\n#define D3DDEVCAPS_HWRASTERIZATION         0x0080000\n#define D3DDEVCAPS_PUREDEVICE              0x0100000\n#define D3DDEVCAPS_QUINTICRTPATCHES        0x0200000\n#define D3DDEVCAPS_RTPATCHES               0x0400000\n#define D3DDEVCAPS_RTPATCHHANDLEZERO       0x0800000\n#define D3DDEVCAPS_NPATCHES                0x1000000\n\n#define D3DFVFCAPS_TEXCOORDCOUNTMASK  0x00FFFF\n#define D3DFVFCAPS_DONOTSTRIPELEMENTS 0x080000\n#define D3DFVFCAPS_PSIZE              0x100000\n\n#define D3DLINECAPS_TEXTURE           0x01\n#define D3DLINECAPS_ZTEST             0x02\n#define D3DLINECAPS_BLEND             0x04\n#define D3DLINECAPS_ALPHACMP          0x08\n#define D3DLINECAPS_FOG               0x10\n#define D3DLINECAPS_ANTIALIAS         0x20\n\n#define D3DPBLENDCAPS_ZERO            __MSABI_LONG(0x00000001)\n#define D3DPBLENDCAPS_ONE             __MSABI_LONG(0x00000002)\n#define D3DPBLENDCAPS_SRCCOLOR        __MSABI_LONG(0x00000004)\n#define D3DPBLENDCAPS_INVSRCCOLOR     __MSABI_LONG(0x00000008)\n#define D3DPBLENDCAPS_SRCALPHA        __MSABI_LONG(0x00000010)\n#define D3DPBLENDCAPS_INVSRCALPHA     __MSABI_LONG(0x00000020)\n#define D3DPBLENDCAPS_DESTALPHA       __MSABI_LONG(0x00000040)\n#define D3DPBLENDCAPS_INVDESTALPHA    __MSABI_LONG(0x00000080)\n#define D3DPBLENDCAPS_DESTCOLOR       __MSABI_LONG(0x00000100)\n#define D3DPBLENDCAPS_INVDESTCOLOR    __MSABI_LONG(0x00000200)\n#define D3DPBLENDCAPS_SRCALPHASAT     __MSABI_LONG(0x00000400)\n#define D3DPBLENDCAPS_BOTHSRCALPHA    __MSABI_LONG(0x00000800)\n#define D3DPBLENDCAPS_BOTHINVSRCALPHA __MSABI_LONG(0x00001000)\n#define D3DPBLENDCAPS_BLENDFACTOR     __MSABI_LONG(0x00002000)\n#ifndef D3D_DISABLE_9EX\n#define D3DPBLENDCAPS_SRCCOLOR2       __MSABI_LONG(0x00004000)\n#define D3DPBLENDCAPS_INVSRCCOLOR2    __MSABI_LONG(0x00008000)\n#endif\n\n#define D3DPCMPCAPS_NEVER        0x01\n#define D3DPCMPCAPS_LESS         0x02\n#define D3DPCMPCAPS_EQUAL        0x04\n#define D3DPCMPCAPS_LESSEQUAL    0x08\n#define D3DPCMPCAPS_GREATER      0x10\n#define D3DPCMPCAPS_NOTEQUAL     0x20\n#define D3DPCMPCAPS_GREATEREQUAL 0x40\n#define D3DPCMPCAPS_ALWAYS       0x80\n\n#define D3DPMISCCAPS_MASKZ                      __MSABI_LONG(0x00000002)\n#define D3DPMISCCAPS_LINEPATTERNREP             __MSABI_LONG(0x00000004)\n#define D3DPMISCCAPS_CULLNONE                   __MSABI_LONG(0x00000010)\n#define D3DPMISCCAPS_CULLCW                     __MSABI_LONG(0x00000020)\n#define D3DPMISCCAPS_CULLCCW                    __MSABI_LONG(0x00000040)\n#define D3DPMISCCAPS_COLORWRITEENABLE           __MSABI_LONG(0x00000080)\n#define D3DPMISCCAPS_CLIPPLANESCALEDPOINTS      __MSABI_LONG(0x00000100)\n#define D3DPMISCCAPS_CLIPTLVERTS                __MSABI_LONG(0x00000200)\n#define D3DPMISCCAPS_TSSARGTEMP                 __MSABI_LONG(0x00000400)\n#define D3DPMISCCAPS_BLENDOP                    __MSABI_LONG(0x00000800)\n#define D3DPMISCCAPS_NULLREFERENCE              __MSABI_LONG(0x00001000)\n#define D3DPMISCCAPS_INDEPENDENTWRITEMASKS      __MSABI_LONG(0x00004000)\n#define D3DPMISCCAPS_PERSTAGECONSTANT           __MSABI_LONG(0x00008000)\n#define D3DPMISCCAPS_FOGANDSPECULARALPHA        __MSABI_LONG(0x00010000)\n#define D3DPMISCCAPS_SEPARATEALPHABLEND         __MSABI_LONG(0x00020000)\n#define D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS    __MSABI_LONG(0x00040000)\n#define D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING __MSABI_LONG(0x00080000)\n#define D3DPMISCCAPS_FOGVERTEXCLAMPED           __MSABI_LONG(0x00100000)\n#ifndef D3D_DISABLE_9EX\n#define D3DPMISCCAPS_POSTBLENDSRGBCONVERT       __MSABI_LONG(0x00200000)\n#endif\n\n#define D3DPRASTERCAPS_DITHER                     __MSABI_LONG(0x00000001)\n#define D3DPRASTERCAPS_PAT                        __MSABI_LONG(0x00000008)\n#define D3DPRASTERCAPS_ZTEST                      __MSABI_LONG(0x00000010)\n#define D3DPRASTERCAPS_FOGVERTEX                  __MSABI_LONG(0x00000080)\n#define D3DPRASTERCAPS_FOGTABLE                   __MSABI_LONG(0x00000100)\n#define D3DPRASTERCAPS_ANTIALIASEDGES             __MSABI_LONG(0x00001000)\n#define D3DPRASTERCAPS_MIPMAPLODBIAS              __MSABI_LONG(0x00002000)\n#define D3DPRASTERCAPS_ZBIAS                      __MSABI_LONG(0x00004000)\n#define D3DPRASTERCAPS_ZBUFFERLESSHSR             __MSABI_LONG(0x00008000)\n#define D3DPRASTERCAPS_FOGRANGE                   __MSABI_LONG(0x00010000)\n#define D3DPRASTERCAPS_ANISOTROPY                 __MSABI_LONG(0x00020000)\n#define D3DPRASTERCAPS_WBUFFER                    __MSABI_LONG(0x00040000)\n#define D3DPRASTERCAPS_WFOG                       __MSABI_LONG(0x00100000)\n#define D3DPRASTERCAPS_ZFOG                       __MSABI_LONG(0x00200000)\n#define D3DPRASTERCAPS_COLORPERSPECTIVE           __MSABI_LONG(0x00400000)\n#define D3DPRASTERCAPS_SCISSORTEST                __MSABI_LONG(0x01000000)\n#define D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS        __MSABI_LONG(0x02000000)\n#define D3DPRASTERCAPS_DEPTHBIAS                  __MSABI_LONG(0x04000000)\n#define D3DPRASTERCAPS_MULTISAMPLE_TOGGLE         __MSABI_LONG(0x08000000)\n\n#define D3DPRESENT_INTERVAL_DEFAULT               0x00000000\n#define D3DPRESENT_INTERVAL_ONE                   0x00000001\n#define D3DPRESENT_INTERVAL_TWO                   0x00000002\n#define D3DPRESENT_INTERVAL_THREE                 0x00000004\n#define D3DPRESENT_INTERVAL_FOUR                  0x00000008\n#define D3DPRESENT_INTERVAL_IMMEDIATE             0x80000000\n\n#define D3DPSHADECAPS_COLORGOURAUDRGB             0x00008\n#define D3DPSHADECAPS_SPECULARGOURAUDRGB          0x00200\n#define D3DPSHADECAPS_ALPHAGOURAUDBLEND           0x04000\n#define D3DPSHADECAPS_FOGGOURAUD                  0x80000\n\n#define D3DPTADDRESSCAPS_WRAP                     0x01\n#define D3DPTADDRESSCAPS_MIRROR                   0x02\n#define D3DPTADDRESSCAPS_CLAMP                    0x04\n#define D3DPTADDRESSCAPS_BORDER                   0x08\n#define D3DPTADDRESSCAPS_INDEPENDENTUV            0x10\n#define D3DPTADDRESSCAPS_MIRRORONCE               0x20\n\n#define D3DPTEXTURECAPS_PERSPECTIVE              __MSABI_LONG(0x00000001)\n#define D3DPTEXTURECAPS_POW2                     __MSABI_LONG(0x00000002)\n#define D3DPTEXTURECAPS_ALPHA                    __MSABI_LONG(0x00000004)\n#define D3DPTEXTURECAPS_SQUAREONLY               __MSABI_LONG(0x00000020)\n#define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE __MSABI_LONG(0x00000040)\n#define D3DPTEXTURECAPS_ALPHAPALETTE             __MSABI_LONG(0x00000080)\n#define D3DPTEXTURECAPS_NONPOW2CONDITIONAL       __MSABI_LONG(0x00000100)\n#define D3DPTEXTURECAPS_PROJECTED                __MSABI_LONG(0x00000400)\n#define D3DPTEXTURECAPS_CUBEMAP                  __MSABI_LONG(0x00000800)\n#define D3DPTEXTURECAPS_VOLUMEMAP                __MSABI_LONG(0x00002000)\n#define D3DPTEXTURECAPS_MIPMAP                   __MSABI_LONG(0x00004000)\n#define D3DPTEXTURECAPS_MIPVOLUMEMAP             __MSABI_LONG(0x00008000)\n#define D3DPTEXTURECAPS_MIPCUBEMAP               __MSABI_LONG(0x00010000)\n#define D3DPTEXTURECAPS_CUBEMAP_POW2             __MSABI_LONG(0x00020000)\n#define D3DPTEXTURECAPS_VOLUMEMAP_POW2           __MSABI_LONG(0x00040000)\n#define D3DPTEXTURECAPS_NOPROJECTEDBUMPENV       __MSABI_LONG(0x00200000)\n\n#define D3DPTFILTERCAPS_MINFPOINT                __MSABI_LONG(0x00000100)\n#define D3DPTFILTERCAPS_MINFLINEAR               __MSABI_LONG(0x00000200)\n#define D3DPTFILTERCAPS_MINFANISOTROPIC          __MSABI_LONG(0x00000400)\n#define D3DPTFILTERCAPS_MINFPYRAMIDALQUAD        __MSABI_LONG(0x00000800)\n#define D3DPTFILTERCAPS_MINFGAUSSIANQUAD         __MSABI_LONG(0x00001000)\n#define D3DPTFILTERCAPS_MIPFPOINT                __MSABI_LONG(0x00010000)\n#define D3DPTFILTERCAPS_MIPFLINEAR               __MSABI_LONG(0x00020000)\n#ifndef D3D_DISABLE_9EX\n#define D3DPTFILTERCAPS_CONVOLUTIONMONO          __MSABI_LONG(0x00040000)\n#endif\n#define D3DPTFILTERCAPS_MAGFPOINT                __MSABI_LONG(0x01000000)\n#define D3DPTFILTERCAPS_MAGFLINEAR               __MSABI_LONG(0x02000000)\n#define D3DPTFILTERCAPS_MAGFANISOTROPIC          __MSABI_LONG(0x04000000)\n#define D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD        __MSABI_LONG(0x08000000)\n#define D3DPTFILTERCAPS_MAGFGAUSSIANQUAD         __MSABI_LONG(0x10000000)\n\n#define D3DSTENCILCAPS_KEEP                      0x01\n#define D3DSTENCILCAPS_ZERO                      0x02\n#define D3DSTENCILCAPS_REPLACE                   0x04\n#define D3DSTENCILCAPS_INCRSAT                   0x08\n#define D3DSTENCILCAPS_DECRSAT                   0x10\n#define D3DSTENCILCAPS_INVERT                    0x20\n#define D3DSTENCILCAPS_INCR                      0x40\n#define D3DSTENCILCAPS_DECR                      0x80\n#define D3DSTENCILCAPS_TWOSIDED                  0x100\n\n#define D3DTEXOPCAPS_DISABLE                     0x0000001\n#define D3DTEXOPCAPS_SELECTARG1                  0x0000002\n#define D3DTEXOPCAPS_SELECTARG2                  0x0000004\n#define D3DTEXOPCAPS_MODULATE                    0x0000008\n#define D3DTEXOPCAPS_MODULATE2X                  0x0000010\n#define D3DTEXOPCAPS_MODULATE4X                  0x0000020\n#define D3DTEXOPCAPS_ADD                         0x0000040\n#define D3DTEXOPCAPS_ADDSIGNED                   0x0000080\n#define D3DTEXOPCAPS_ADDSIGNED2X                 0x0000100\n#define D3DTEXOPCAPS_SUBTRACT                    0x0000200\n#define D3DTEXOPCAPS_ADDSMOOTH                   0x0000400\n#define D3DTEXOPCAPS_BLENDDIFFUSEALPHA           0x0000800\n#define D3DTEXOPCAPS_BLENDTEXTUREALPHA           0x0001000\n#define D3DTEXOPCAPS_BLENDFACTORALPHA            0x0002000\n#define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM         0x0004000\n#define D3DTEXOPCAPS_BLENDCURRENTALPHA           0x0008000\n#define D3DTEXOPCAPS_PREMODULATE                 0x0010000\n#define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR      0x0020000\n#define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA      0x0040000\n#define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR   0x0080000\n#define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA   0x0100000\n#define D3DTEXOPCAPS_BUMPENVMAP                  0x0200000\n#define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE         0x0400000\n#define D3DTEXOPCAPS_DOTPRODUCT3                 0x0800000\n#define D3DTEXOPCAPS_MULTIPLYADD                 0x1000000\n#define D3DTEXOPCAPS_LERP                        0x2000000\n\n#define D3DVTXPCAPS_TEXGEN                         __MSABI_LONG(0x00000001)\n#define D3DVTXPCAPS_MATERIALSOURCE7                __MSABI_LONG(0x00000002)\n#define D3DVTXPCAPS_DIRECTIONALLIGHTS              __MSABI_LONG(0x00000008)\n#define D3DVTXPCAPS_POSITIONALLIGHTS               __MSABI_LONG(0x00000010)\n#define D3DVTXPCAPS_LOCALVIEWER                    __MSABI_LONG(0x00000020)\n#define D3DVTXPCAPS_TWEENING                       __MSABI_LONG(0x00000040)\n#define D3DVTXPCAPS_TEXGEN_SPHEREMAP               __MSABI_LONG(0x00000100)\n#define D3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER       __MSABI_LONG(0x00000200)\n\n#define D3DDTCAPS_UBYTE4                           __MSABI_LONG(0x00000001)\n#define D3DDTCAPS_UBYTE4N                          __MSABI_LONG(0x00000002)\n#define D3DDTCAPS_SHORT2N                          __MSABI_LONG(0x00000004)\n#define D3DDTCAPS_SHORT4N                          __MSABI_LONG(0x00000008)\n#define D3DDTCAPS_USHORT2N                         __MSABI_LONG(0x00000010)\n#define D3DDTCAPS_USHORT4N                         __MSABI_LONG(0x00000020)\n#define D3DDTCAPS_UDEC3                            __MSABI_LONG(0x00000040)\n#define D3DDTCAPS_DEC3N                            __MSABI_LONG(0x00000080)\n#define D3DDTCAPS_FLOAT16_2                        __MSABI_LONG(0x00000100)\n#define D3DDTCAPS_FLOAT16_4                        __MSABI_LONG(0x00000200)\n\n#define D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD  __MSABI_LONG(0x00000020)\n#define D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION       __MSABI_LONG(0x00000080)\n#define D3DCAPS3_COPY_TO_VIDMEM                    __MSABI_LONG(0x00000100)\n#define D3DCAPS3_COPY_TO_SYSTEMMEM                 __MSABI_LONG(0x00000200)\n#define D3DCAPS3_DXVAHD                            __MSABI_LONG(0x00000400)\n#define D3DCAPS3_DXVAHD_LIMITED                    __MSABI_LONG(0x00000800)\n#define D3DCAPS3_RESERVED                          __MSABI_LONG(0x8000001F)\n\n#define D3DCAPS2_NO2DDURING3DSCENE                 __MSABI_LONG(0x00000002)\n#define D3DCAPS2_FULLSCREENGAMMA                   __MSABI_LONG(0x00020000)\n#define D3DCAPS2_CANRENDERWINDOWED                 __MSABI_LONG(0x00080000)\n#define D3DCAPS2_CANCALIBRATEGAMMA                 __MSABI_LONG(0x00100000)\n#define D3DCAPS2_RESERVED                          __MSABI_LONG(0x02000000)\n#define D3DCAPS2_CANMANAGERESOURCE                 __MSABI_LONG(0x10000000)\n#define D3DCAPS2_DYNAMICTEXTURES                   __MSABI_LONG(0x20000000)\n#define D3DCAPS2_CANAUTOGENMIPMAP                  __MSABI_LONG(0x40000000)\n#ifndef D3D_DISABLE_9EX\n#define D3DCAPS2_CANSHARERESOURCE                  __MSABI_LONG(0x80000000)\n#endif\n\n#define D3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH  24\n#define D3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH  0\n#define D3DVS20_MAX_NUMTEMPS                 32\n#define D3DVS20_MIN_NUMTEMPS                 12\n#define D3DVS20_MAX_STATICFLOWCONTROLDEPTH   4\n#define D3DVS20_MIN_STATICFLOWCONTROLDEPTH   1\n\n#define D3DVS20CAPS_PREDICATION              (1 << 0)\n\n#define D3DPS20CAPS_ARBITRARYSWIZZLE         (1 << 0)\n#define D3DPS20CAPS_GRADIENTINSTRUCTIONS     (1 << 1)\n#define D3DPS20CAPS_PREDICATION              (1 << 2)\n#define D3DPS20CAPS_NODEPENDENTREADLIMIT     (1 << 3)\n#define D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT    (1 << 4)\n\n#define D3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH  24\n#define D3DPS20_MIN_DYNAMICFLOWCONTROLDEPTH  0\n#define D3DPS20_MAX_NUMTEMPS                 32\n#define D3DPS20_MIN_NUMTEMPS                 12\n#define D3DPS20_MAX_STATICFLOWCONTROLDEPTH   4\n#define D3DPS20_MIN_STATICFLOWCONTROLDEPTH   0\n#define D3DPS20_MAX_NUMINSTRUCTIONSLOTS      512\n#define D3DPS20_MIN_NUMINSTRUCTIONSLOTS      96\n\n#define D3DMIN30SHADERINSTRUCTIONS          512\n#define D3DMAX30SHADERINSTRUCTIONS          32768\n\n\ntypedef struct _D3DVSHADERCAPS2_0 {\n  DWORD  Caps;\n  INT    DynamicFlowControlDepth;\n  INT    NumTemps;\n  INT    StaticFlowControlDepth;\n} D3DVSHADERCAPS2_0;\n\ntypedef struct _D3DPSHADERCAPS2_0 {\n  DWORD  Caps;\n  INT    DynamicFlowControlDepth;\n  INT    NumTemps;\n  INT    StaticFlowControlDepth;\n  INT    NumInstructionSlots;\n} D3DPSHADERCAPS2_0;\n\n/*\n * The d3dcaps9 structure\n */\ntypedef struct _D3DCAPS9 {\n  D3DDEVTYPE          DeviceType;\n  UINT                AdapterOrdinal;\n  \n  DWORD               Caps;\n  DWORD               Caps2;\n  DWORD               Caps3;\n  DWORD               PresentationIntervals;\n  \n  DWORD               CursorCaps;\n  \n  DWORD               DevCaps;\n  \n  DWORD               PrimitiveMiscCaps;\n  DWORD               RasterCaps;\n  DWORD               ZCmpCaps;\n  DWORD               SrcBlendCaps;\n  DWORD               DestBlendCaps;\n  DWORD               AlphaCmpCaps;\n  DWORD               ShadeCaps;\n  DWORD               TextureCaps;\n  DWORD               TextureFilterCaps;\n  DWORD               CubeTextureFilterCaps;\n  DWORD               VolumeTextureFilterCaps;\n  DWORD               TextureAddressCaps;\n  DWORD               VolumeTextureAddressCaps;\n  \n  DWORD               LineCaps;\n  \n  DWORD               MaxTextureWidth, MaxTextureHeight;\n  DWORD               MaxVolumeExtent;\n  \n  DWORD               MaxTextureRepeat;\n  DWORD               MaxTextureAspectRatio;\n  DWORD               MaxAnisotropy;\n  float               MaxVertexW;\n  \n  float               GuardBandLeft;\n  float               GuardBandTop;\n  float               GuardBandRight;\n  float               GuardBandBottom;\n  \n  float               ExtentsAdjust;\n  DWORD               StencilCaps;\n  \n  DWORD               FVFCaps;\n  DWORD               TextureOpCaps;\n  DWORD               MaxTextureBlendStages;\n  DWORD               MaxSimultaneousTextures;\n  \n  DWORD               VertexProcessingCaps;\n  DWORD               MaxActiveLights;\n  DWORD               MaxUserClipPlanes;\n  DWORD               MaxVertexBlendMatrices;\n  DWORD               MaxVertexBlendMatrixIndex;\n  \n  float               MaxPointSize;\n  \n  DWORD               MaxPrimitiveCount;\n  DWORD               MaxVertexIndex;\n  DWORD               MaxStreams;\n  DWORD               MaxStreamStride;\n  \n  DWORD               VertexShaderVersion;\n  DWORD               MaxVertexShaderConst;\n  \n  DWORD               PixelShaderVersion;\n  float               PixelShader1xMaxValue;\n\n  /* DX 9 */\n  DWORD               DevCaps2;\n\n  float               MaxNpatchTessellationLevel;\n  DWORD               Reserved5;\n\n  UINT                MasterAdapterOrdinal;   \n  UINT                AdapterOrdinalInGroup;  \n  UINT                NumberOfAdaptersInGroup;\n  DWORD               DeclTypes;              \n  DWORD               NumSimultaneousRTs;     \n  DWORD               StretchRectFilterCaps;  \n  D3DVSHADERCAPS2_0   VS20Caps;\n  D3DPSHADERCAPS2_0   PS20Caps;\n  DWORD               VertexTextureFilterCaps;\n  DWORD               MaxVShaderInstructionsExecuted;\n  DWORD               MaxPShaderInstructionsExecuted;\n  DWORD               MaxVertexShader30InstructionSlots; \n  DWORD               MaxPixelShader30InstructionSlots;\n\n} D3DCAPS9;\n\n#ifdef __i386__\n#include <poppack.h>\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/d3d9types.h",
    "content": "/*\n * Copyright (C) 2002-2003 Jason Edmeades \n * Copyright (C) 2002-2003 Raphael Junqueira\n * Copyright (C) 2005 Oliver Stieber\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_D3D9TYPES_H\n#define __WINE_D3D9TYPES_H\n\n#ifdef __i386__\n#include <pshpack4.h>\n#endif\n\n/*****************************************************************************\n * Direct 3D v9 #defines\n */\n#define D3DCLEAR_TARGET   __MSABI_LONG(0x00000001)\n#define D3DCLEAR_ZBUFFER  __MSABI_LONG(0x00000002)\n#define D3DCLEAR_STENCIL  __MSABI_LONG(0x00000004)\n\n#define D3DCLIPPLANE0 (1 << 0)\n#define D3DCLIPPLANE1 (1 << 1)\n#define D3DCLIPPLANE2 (1 << 2)\n#define D3DCLIPPLANE3 (1 << 3)\n#define D3DCLIPPLANE4 (1 << 4)\n#define D3DCLIPPLANE5 (1 << 5)\n\n#define D3DCOLOR_ARGB(a,r,g,b)       ((D3DCOLOR)((((a)&0xffu)<<24)|(((r)&0xffu)<<16)|(((g)&0xffu)<<8)|((b)&0xffu)))\n#define D3DCOLOR_COLORVALUE(r,g,b,a) D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f))\n#define D3DCOLOR_RGBA(r,g,b,a)       D3DCOLOR_ARGB(a,r,g,b)\n#define D3DCOLOR_XRGB(r,g,b)         D3DCOLOR_ARGB(0xff,r,g,b)\n#define D3DCOLOR_XYUV(y,u,v)         D3DCOLOR_ARGB(0xFF,y,u,v)\n#define D3DCOLOR_AYUV(a,y,u,v)       D3DCOLOR_ARGB(a,y,u,v)\n\n#define D3DCS_LEFT                   __MSABI_LONG(0x001)\n#define D3DCS_RIGHT                  __MSABI_LONG(0x002)\n#define D3DCS_TOP                    __MSABI_LONG(0x004)\n#define D3DCS_BOTTOM                 __MSABI_LONG(0x008)\n#define D3DCS_FRONT                  __MSABI_LONG(0x010)\n#define D3DCS_BACK                   __MSABI_LONG(0x020)\n#define D3DCS_PLANE0                 __MSABI_LONG(0x040)\n#define D3DCS_PLANE1                 __MSABI_LONG(0x080)\n#define D3DCS_PLANE2                 __MSABI_LONG(0x100)\n#define D3DCS_PLANE3                 __MSABI_LONG(0x200)\n#define D3DCS_PLANE4                 __MSABI_LONG(0x400)\n#define D3DCS_PLANE5                 __MSABI_LONG(0x800)\n#define D3DCS_ALL                    __MSABI_LONG(0xFFF)\n\n#define D3DFVF_TEXTUREFORMAT1 3u\n#define D3DFVF_TEXTUREFORMAT2 0u\n#define D3DFVF_TEXTUREFORMAT3 1u\n#define D3DFVF_TEXTUREFORMAT4 2u\n#define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))\n#define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)\n#define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))\n#define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))\n\n#define D3DLOCK_READONLY           0x0010\n#define D3DLOCK_NOSYSLOCK          0x0800\n#define D3DLOCK_NOOVERWRITE        0x1000\n#define D3DLOCK_DISCARD            0x2000\n#define D3DLOCK_DONOTWAIT          0x4000\n#define D3DLOCK_NO_DIRTY_UPDATE    0x8000\n\n#define D3DMAXUSERCLIPPLANES       32\n#define D3DCLIPPLANE0              (1 << 0)\n#define D3DCLIPPLANE1              (1 << 1)\n#define D3DCLIPPLANE2              (1 << 2)\n#define D3DCLIPPLANE3              (1 << 3)\n#define D3DCLIPPLANE4              (1 << 4)\n#define D3DCLIPPLANE5              (1 << 5)\n\n\n#define D3DRENDERSTATE_WRAPBIAS    __MSABI_LONG(128U)\n\n/* MSDN has this in d3d9caps.h, but it should be here */\n#define D3DTSS_TCI_PASSTHRU                       0x00000\n#define D3DTSS_TCI_CAMERASPACENORMAL              0x10000\n#define D3DTSS_TCI_CAMERASPACEPOSITION            0x20000\n#define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR    0x30000\n#define D3DTSS_TCI_SPHEREMAP                      0x40000\n\n\n#define D3DTS_WORLD  D3DTS_WORLDMATRIX(0)\n#define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1)\n#define D3DTS_WORLD2 D3DTS_WORLDMATRIX(2)\n#define D3DTS_WORLD3 D3DTS_WORLDMATRIX(3)\n#define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256)\n\n#define D3DUSAGE_RENDERTARGET       __MSABI_LONG(0x00000001)\n#define D3DUSAGE_DEPTHSTENCIL       __MSABI_LONG(0x00000002)\n#define D3DUSAGE_WRITEONLY          __MSABI_LONG(0x00000008)\n#define D3DUSAGE_SOFTWAREPROCESSING __MSABI_LONG(0x00000010)\n#define D3DUSAGE_DONOTCLIP          __MSABI_LONG(0x00000020)\n#define D3DUSAGE_POINTS             __MSABI_LONG(0x00000040)\n#define D3DUSAGE_RTPATCHES          __MSABI_LONG(0x00000080)\n#define D3DUSAGE_NPATCHES           __MSABI_LONG(0x00000100)\n#define D3DUSAGE_DYNAMIC            __MSABI_LONG(0x00000200)\n#define D3DUSAGE_AUTOGENMIPMAP      __MSABI_LONG(0x00000400)\n#define D3DUSAGE_DMAP               __MSABI_LONG(0x00004000)\n\n/* Parts added with d3d9ex */\n#if !defined(D3D_DISABLE_9EX)\n#define D3DUSAGE_RESTRICTED_CONTENT              __MSABI_LONG(0x00000800)\n#define D3DUSAGE_RESTRICT_SHARED_RESOURCE_DRIVER __MSABI_LONG(0x00001000)\n#define D3DUSAGE_RESTRICT_SHARED_RESOURCE        __MSABI_LONG(0x00002000)\n#define D3DUSAGE_NONSECURE                       __MSABI_LONG(0x00800000)\n#define D3DUSAGE_TEXTAPI                         __MSABI_LONG(0x10000000)\n#endif /* D3D_DISABLE_9EX */\n\n#define D3DUSAGE_QUERY_LEGACYBUMPMAP            __MSABI_LONG(0x00008000)\n#define D3DUSAGE_QUERY_SRGBREAD                 __MSABI_LONG(0x00010000)\n#define D3DUSAGE_QUERY_FILTER                   __MSABI_LONG(0x00020000)\n#define D3DUSAGE_QUERY_SRGBWRITE                __MSABI_LONG(0x00040000)\n#define D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING __MSABI_LONG(0x00080000)\n#define D3DUSAGE_QUERY_VERTEXTEXTURE            __MSABI_LONG(0x00100000)\n#define D3DUSAGE_QUERY_WRAPANDMIP               __MSABI_LONG(0x00200000)\n\n#define D3DWRAP_U        1\n#define D3DWRAP_V        2\n#define D3DWRAP_W        4\n#define D3DWRAPCOORD_0   1\n#define D3DWRAPCOORD_1   2\n#define D3DWRAPCOORD_2   4\n#define D3DWRAPCOORD_3   8\n\n#define MAX_DEVICE_IDENTIFIER_STRING        512\n\n#define D3DFVF_RESERVED0           0x0001\n#define D3DFVF_POSITION_MASK       0x400E\n#define D3DFVF_XYZ                 0x0002\n#define D3DFVF_XYZRHW              0x0004\n#define D3DFVF_XYZB1               0x0006\n#define D3DFVF_XYZB2               0x0008\n#define D3DFVF_XYZB3               0x000a\n#define D3DFVF_XYZB4               0x000c\n#define D3DFVF_XYZB5               0x000e\n#define D3DFVF_XYZW                0x4002\n#define D3DFVF_NORMAL              0x0010\n#define D3DFVF_PSIZE               0x0020\n#define D3DFVF_DIFFUSE             0x0040\n#define D3DFVF_SPECULAR            0x0080\n#define D3DFVF_TEXCOUNT_MASK       0x0f00\n#define D3DFVF_TEXCOUNT_SHIFT           8\n#define D3DFVF_TEX0                0x0000\n#define D3DFVF_TEX1                0x0100\n#define D3DFVF_TEX2                0x0200\n#define D3DFVF_TEX3                0x0300\n#define D3DFVF_TEX4                0x0400\n#define D3DFVF_TEX5                0x0500\n#define D3DFVF_TEX6                0x0600\n#define D3DFVF_TEX7                0x0700\n#define D3DFVF_TEX8                0x0800\n#define D3DFVF_LASTBETA_UBYTE4     0x1000\n#define D3DFVF_LASTBETA_D3DCOLOR   0x8000\n#define D3DFVF_RESERVED2           0x6000\n\n#define D3DTA_SELECTMASK        0x0000000f\n#define D3DTA_DIFFUSE           0x00000000\n#define D3DTA_CURRENT           0x00000001\n#define D3DTA_TEXTURE           0x00000002\n#define D3DTA_TFACTOR           0x00000003\n#define D3DTA_SPECULAR          0x00000004\n#define D3DTA_TEMP              0x00000005\n#define D3DTA_CONSTANT          0x00000006\n#define D3DTA_COMPLEMENT        0x00000010\n#define D3DTA_ALPHAREPLICATE    0x00000020\n\n#define D3DCOLORWRITEENABLE_RED   (__MSABI_LONG(1)<<0)\n#define D3DCOLORWRITEENABLE_GREEN (__MSABI_LONG(1)<<1)\n#define D3DCOLORWRITEENABLE_BLUE  (__MSABI_LONG(1)<<2)\n#define D3DCOLORWRITEENABLE_ALPHA (__MSABI_LONG(1)<<3)\n\n#define D3DPV_DONOTCOPYDATA         (1 << 0)\n\n#define D3DSTREAMSOURCE_INDEXEDDATA  (1u << 30)\n#define D3DSTREAMSOURCE_INSTANCEDATA (2u << 30)\n\n#define D3D_MAX_SIMULTANEOUS_RENDERTARGETS 4\n\n#define MAXD3DDECLLENGTH         64 /* +end marker */\n#define MAXD3DDECLMETHOD         D3DDECLMETHOD_LOOKUPPRESAMPLED\n#define MAXD3DDECLTYPE           D3DDECLTYPE_UNUSED\n#define MAXD3DDECLUSAGE          D3DDECLUSAGE_SAMPLE\n#define MAXD3DDECLUSAGEINDEX     15\n\n#define D3DDMAPSAMPLER 256\n#define D3DVERTEXTEXTURESAMPLER0 (D3DDMAPSAMPLER+1)\n#define D3DVERTEXTEXTURESAMPLER1 (D3DDMAPSAMPLER+2)\n#define D3DVERTEXTEXTURESAMPLER2 (D3DDMAPSAMPLER+3)\n#define D3DVERTEXTEXTURESAMPLER3 (D3DDMAPSAMPLER+4)\n\n#ifndef MAKEFOURCC\n#define MAKEFOURCC(ch0, ch1, ch2, ch3)  \\\n    ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |  \\\n    ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))\n#endif\n\n/* Constants used by D3DPRESENT_PARAMETERS. when creating a device or swapchain */\n\n#define D3DPRESENTFLAG_LOCKABLE_BACKBUFFER             0x00000001 /* Create a lockable backbuffer */\n#define D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL            0x00000002 /* Discard Z buffer */\n#define D3DPRESENTFLAG_DEVICECLIP                      0x00000004 /* Clip the window blited into the client area 2k + xp only */\n#define D3DPRESENTFLAG_VIDEO                           0x00000010 /* backbuffer 'may' contain video data */\n#ifndef D3D_DISABLE_9EX\n#define D3DPRESENTFLAG_NOAUTOROTATE                    0x00000020 /* d3d9ex, ignore display rotation */\n#define D3DPRESENTFLAG_UNPRUNEDMODE                    0x00000040 /* d3d9ex, specify invalid display modes */\n#define D3DPRESENTFLAG_OVERLAY_LIMITEDRGB              0x00000080\n#define D3DPRESENTFLAG_OVERLAY_YCbCr_BT709             0x00000100\n#define D3DPRESENTFLAG_OVERLAY_YCbCr_xvYCC             0x00000200\n#define D3DPRESENTFLAG_RESTRICTED_CONTENT              0x00000400\n#define D3DPRESENTFLAG_RESTRICT_SHARED_RESOURCE_DRIVER 0x00000800\n#endif\n\n#define D3DPRESENT_RATE_DEFAULT                        0x00000000\n\n/**************************** \n * Vertex Shaders Declaration\n */\n\ntypedef enum _D3DDECLUSAGE {\n  D3DDECLUSAGE_POSITION     = 0,\n  D3DDECLUSAGE_BLENDWEIGHT  = 1,\n  D3DDECLUSAGE_BLENDINDICES = 2,\n  D3DDECLUSAGE_NORMAL       = 3,      \n  D3DDECLUSAGE_PSIZE        = 4,       \n  D3DDECLUSAGE_TEXCOORD     = 5,    \n  D3DDECLUSAGE_TANGENT      = 6,     \n  D3DDECLUSAGE_BINORMAL     = 7,    \n  D3DDECLUSAGE_TESSFACTOR   = 8,  \n  D3DDECLUSAGE_POSITIONT    = 9,   \n  D3DDECLUSAGE_COLOR        = 10,       \n  D3DDECLUSAGE_FOG          = 11,        \n  D3DDECLUSAGE_DEPTH        = 12,      \n  D3DDECLUSAGE_SAMPLE       = 13     \n} D3DDECLUSAGE;\n\n#define D3DMAXDECLUSAGE         D3DDECLUSAGE_SAMPLE\n#define D3DMAXDECLUSAGEINDEX    15\n#define D3DMAXDECLLENGTH        18\n#define D3DMAXDECLUSAGE_DX8     D3DDECLUSAGE_TEXCOORD\n\ntypedef enum _D3DDECLMETHOD {\n  D3DDECLMETHOD_DEFAULT          = 0,\n  D3DDECLMETHOD_PARTIALU         = 1,\n  D3DDECLMETHOD_PARTIALV         = 2,\n  D3DDECLMETHOD_CROSSUV          = 3,\n  D3DDECLMETHOD_UV               = 4,\n  D3DDECLMETHOD_LOOKUP           = 5,\n  D3DDECLMETHOD_LOOKUPPRESAMPLED = 6\n} D3DDECLMETHOD;\n\n\n#define D3DMAXDECLMETHOD        D3DDECLMETHOD_LOOKUPPRESAMPLED\n\ntypedef enum _D3DDECLTYPE {\n  D3DDECLTYPE_FLOAT1    =  0,\n  D3DDECLTYPE_FLOAT2    =  1,\n  D3DDECLTYPE_FLOAT3    =  2,\n  D3DDECLTYPE_FLOAT4    =  3,\n  D3DDECLTYPE_D3DCOLOR  =  4,\n  D3DDECLTYPE_UBYTE4    =  5,\n  D3DDECLTYPE_SHORT2    =  6,\n  D3DDECLTYPE_SHORT4    =  7,\n  /* VS 2.0 */\n  D3DDECLTYPE_UBYTE4N   =  8,\n  D3DDECLTYPE_SHORT2N   =  9,\n  D3DDECLTYPE_SHORT4N   = 10,\n  D3DDECLTYPE_USHORT2N  = 11,\n  D3DDECLTYPE_USHORT4N  = 12,\n  D3DDECLTYPE_UDEC3     = 13,\n  D3DDECLTYPE_DEC3N     = 14,\n  D3DDECLTYPE_FLOAT16_2 = 15,\n  D3DDECLTYPE_FLOAT16_4 = 16,\n  D3DDECLTYPE_UNUSED    = 17,\n} D3DDECLTYPE;\n\n#define D3DMAXDECLTYPE          D3DDECLTYPE_UNUSED\n\ntypedef struct _D3DVERTEXELEMENT9 {\n  WORD    Stream;\n  WORD    Offset;\n  BYTE    Type;\n  BYTE    Method;\n  BYTE    Usage;\n  BYTE    UsageIndex;\n} D3DVERTEXELEMENT9, *LPD3DVERTEXELEMENT9;\n\n\ntypedef enum _D3DQUERYTYPE {\n    D3DQUERYTYPE_VCACHE = 4,\n    D3DQUERYTYPE_RESOURCEMANAGER = 5,\n    D3DQUERYTYPE_VERTEXSTATS = 6,\n    D3DQUERYTYPE_EVENT = 8,\n    D3DQUERYTYPE_OCCLUSION = 9,\n    D3DQUERYTYPE_TIMESTAMP = 10,\n    D3DQUERYTYPE_TIMESTAMPDISJOINT = 11,\n    D3DQUERYTYPE_TIMESTAMPFREQ = 12,\n    D3DQUERYTYPE_PIPELINETIMINGS = 13,\n    D3DQUERYTYPE_INTERFACETIMINGS = 14,\n    D3DQUERYTYPE_VERTEXTIMINGS = 15,\n    D3DQUERYTYPE_PIXELTIMINGS = 16,\n    D3DQUERYTYPE_BANDWIDTHTIMINGS = 17,\n    D3DQUERYTYPE_CACHEUTILIZATION = 18,\n#ifndef D3D_DISABLE_9EX\n    D3DQUERYTYPE_MEMORYPRESSURE = 19,\n#endif\n} D3DQUERYTYPE;\n\n#define D3DISSUE_BEGIN   (1 << 1)\n#define D3DISSUE_END     (1 << 0)\n#define D3DGETDATA_FLUSH (1 << 0)\n\n\n#define D3DDECL_END() {0xFF,0,D3DDECLTYPE_UNUSED,0,0,0}\n#define D3DDP_MAXTEXCOORD   8\n\n\n#define D3DVSD_MAKETOKENTYPE(TokenType) \\\n  ((TokenType << D3DVSD_TOKENTYPESHIFT) & D3DVSD_TOKENTYPEMASK)\n\n#define D3DVSD_CONST(ConstantAddress, Count) \\\n  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_CONSTMEM) | ((Count) << D3DVSD_CONSTCOUNTSHIFT) | (ConstantAddress))\n\n#define D3DVSD_END() 0xFFFFFFFF\n\n#define D3DVSD_NOP() 0x00000000\n\n#define D3DVSD_REG(VertexRegister, Type) \\\n  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | ((Type) << D3DVSD_DATATYPESHIFT) | (VertexRegister))\n\n#define D3DVSD_SKIP(Count) \\\n  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | 0x10000000 | ((Count) << D3DVSD_SKIPCOUNTSHIFT))\n\n#define D3DVSD_STREAM(StreamNumber) \\\n  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (StreamNumber))\n\n#define D3DVSD_STREAM_TESS() \\\n  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (D3DVSD_STREAMTESSMASK))\n\n#define D3DVSD_TESSNORMAL(RegisterIn, RegisterOut) \\\n  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | ((RegisterIn) << D3DVSD_VERTEXREGINSHIFT) | ((0x02) << D3DVSD_DATATYPESHIFT) | (RegisterOut))\n\n#define D3DVSD_TESSUV(Register) \\\n  (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | 0x10000000 | ((0x01) << D3DVSD_DATATYPESHIFT) | (Register))\n\n\n/********************************\n * Pixel/Vertex Shaders Functions\n */\n\n/** Maximum number of supported texture coordinates sets operation */\n#define D3DDP_MAXTEXCOORD   8\n\n/** opcode token mask */\n#define D3DSI_OPCODE_MASK       0x0000FFFF\n#define D3DSI_INSTLENGTH_MASK   0x0F000000\n#define D3DSI_INSTLENGTH_SHIFT  24\n\n/** opcodes types for PS and VS */\ntypedef enum _D3DSHADER_INSTRUCTION_OPCODE_TYPE {\n  D3DSIO_NOP          =  0,\n  D3DSIO_MOV          =  1,\n  D3DSIO_ADD          =  2,\n  D3DSIO_SUB          =  3,\n  D3DSIO_MAD          =  4,\n  D3DSIO_MUL          =  5,\n  D3DSIO_RCP          =  6,\n  D3DSIO_RSQ          =  7,\n  D3DSIO_DP3          =  8,\n  D3DSIO_DP4          =  9,\n  D3DSIO_MIN          = 10,\n  D3DSIO_MAX          = 11,\n  D3DSIO_SLT          = 12,\n  D3DSIO_SGE          = 13,\n  D3DSIO_EXP          = 14,\n  D3DSIO_LOG          = 15,\n  D3DSIO_LIT          = 16,\n  D3DSIO_DST          = 17,\n  D3DSIO_LRP          = 18,\n  D3DSIO_FRC          = 19,\n  D3DSIO_M4x4         = 20,\n  D3DSIO_M4x3         = 21,\n  D3DSIO_M3x4         = 22,\n  D3DSIO_M3x3         = 23,\n  D3DSIO_M3x2         = 24,\n  D3DSIO_CALL         = 25,\n  D3DSIO_CALLNZ       = 26,\n  D3DSIO_LOOP         = 27,\n  D3DSIO_RET          = 28,\n  D3DSIO_ENDLOOP      = 29,\n  D3DSIO_LABEL        = 30,\n  D3DSIO_DCL          = 31,\n  D3DSIO_POW          = 32,\n  D3DSIO_CRS          = 33,\n  D3DSIO_SGN          = 34,\n  D3DSIO_ABS          = 35,\n  D3DSIO_NRM          = 36,\n  D3DSIO_SINCOS       = 37,\n  D3DSIO_REP          = 38,\n  D3DSIO_ENDREP       = 39,\n  D3DSIO_IF           = 40,\n  D3DSIO_IFC          = 41,\n  D3DSIO_ELSE         = 42,\n  D3DSIO_ENDIF        = 43,\n  D3DSIO_BREAK        = 44,\n  D3DSIO_BREAKC       = 45,\n  D3DSIO_MOVA         = 46,\n  D3DSIO_DEFB         = 47,\n  D3DSIO_DEFI         = 48,\n\n  D3DSIO_TEXCOORD     = 64,\n  D3DSIO_TEXKILL      = 65,\n  D3DSIO_TEX          = 66,\n  D3DSIO_TEXBEM       = 67,\n  D3DSIO_TEXBEML      = 68,\n  D3DSIO_TEXREG2AR    = 69,\n  D3DSIO_TEXREG2GB    = 70,\n  D3DSIO_TEXM3x2PAD   = 71,\n  D3DSIO_TEXM3x2TEX   = 72,\n  D3DSIO_TEXM3x3PAD   = 73,\n  D3DSIO_TEXM3x3TEX   = 74,\n  D3DSIO_TEXM3x3DIFF  = 75,\n  D3DSIO_TEXM3x3SPEC  = 76,\n  D3DSIO_TEXM3x3VSPEC = 77,\n  D3DSIO_EXPP         = 78,\n  D3DSIO_LOGP         = 79,\n  D3DSIO_CND          = 80,\n  D3DSIO_DEF          = 81,\n  D3DSIO_TEXREG2RGB   = 82,\n  D3DSIO_TEXDP3TEX    = 83,\n  D3DSIO_TEXM3x2DEPTH = 84,\n  D3DSIO_TEXDP3       = 85,\n  D3DSIO_TEXM3x3      = 86,\n  D3DSIO_TEXDEPTH     = 87,\n  D3DSIO_CMP          = 88,\n  D3DSIO_BEM          = 89,\n  D3DSIO_DP2ADD       = 90,\n  D3DSIO_DSX          = 91,\n  D3DSIO_DSY          = 92,\n  D3DSIO_TEXLDD       = 93,\n  D3DSIO_SETP         = 94,\n  D3DSIO_TEXLDL       = 95,\n  D3DSIO_BREAKP       = 96,\n  \n  D3DSIO_PHASE        = 0xFFFD,\n  D3DSIO_COMMENT      = 0xFFFE,\n  D3DSIO_END          = 0XFFFF,\n\n  D3DSIO_FORCE_DWORD  = 0X7FFFFFFF /** for 32-bit alignment */\n} D3DSHADER_INSTRUCTION_OPCODE_TYPE;\n\n#define D3DSINCOSCONST1   -1.5500992e-006f, -2.1701389e-005f,  0.0026041667f, 0.00026041668f\n#define D3DSINCOSCONST2   -0.020833334f,    -0.12500000f,      1.0f,          0.50000000f\n\n#define D3DSHADER_INSTRUCTION_PREDICATED    (1 << 28)\n\n#define D3DSI_TEXLD_PROJECT 0x00010000\n#define D3DSI_TEXLD_BIAS    0x00020000\n\n/** for parallelism */\n#define D3DSI_COISSUE 0x40000000\n\n#define D3DSP_DCL_USAGE_SHIFT 0\n#define D3DSP_DCL_USAGE_MASK  0x0000000f\n\n#define D3DSP_DCL_USAGEINDEX_SHIFT 16\n#define D3DSP_DCL_USAGEINDEX_MASK  0x000f0000\n\n#define D3DSP_TEXTURETYPE_SHIFT 27\n#define D3DSP_TEXTURETYPE_MASK  0x78000000\n\ntypedef enum _D3DSAMPLER_TEXTURE_TYPE {\n  D3DSTT_UNKNOWN      = 0 << D3DSP_TEXTURETYPE_SHIFT,\n  D3DSTT_1D           = 1 << D3DSP_TEXTURETYPE_SHIFT,\n  D3DSTT_2D           = 2 << D3DSP_TEXTURETYPE_SHIFT,\n  D3DSTT_CUBE         = 3 << D3DSP_TEXTURETYPE_SHIFT,\n  D3DSTT_VOLUME       = 4 << D3DSP_TEXTURETYPE_SHIFT,\n\n  D3DSTT_FORCE_DWORD  = 0x7FFFFFFF\n} D3DSAMPLER_TEXTURE_TYPE;\n\n#define D3DSP_REGNUM_MASK       0x000007FF\n\n/** destination parameter modifiers (.xyzw) */\n#define D3DSP_WRITEMASK_0       0x00010000 /* .x r */\n#define D3DSP_WRITEMASK_1       0x00020000 /* .y g */\n#define D3DSP_WRITEMASK_2       0x00040000 /* .z b */\n#define D3DSP_WRITEMASK_3       0x00080000 /* .w a */\n#define D3DSP_WRITEMASK_ALL     0x000F0000 /* all */\n\n#define D3DSP_DSTMOD_SHIFT      20\n#define D3DSP_DSTMOD_MASK       (0xF << D3DSP_DSTMOD_SHIFT)\n\ntypedef enum _D3DSHADER_PARAM_DSTMOD_TYPE {\n  D3DSPDM_NONE             = 0 << D3DSP_DSTMOD_SHIFT,\n  D3DSPDM_SATURATE         = 1 << D3DSP_DSTMOD_SHIFT,\n  D3DSPDM_PARTIALPRECISION = 2 << D3DSP_DSTMOD_SHIFT,\n  D3DSPDM_MSAMPCENTROID    = 4 << D3DSP_DSTMOD_SHIFT,\n\n  D3DSPDM_FORCE_DWORD  = 0x7FFFFFFF\n} D3DSHADER_PARAM_DSTMOD_TYPE;\n\n/** destination param */\n#define D3DSP_DSTSHIFT_SHIFT     24\n#define D3DSP_DSTSHIFT_MASK      (0xF << D3DSP_DSTSHIFT_SHIFT)\n\n/** destination/source reg type */\n#define D3DSP_REGTYPE_SHIFT      28\n#define D3DSP_REGTYPE_SHIFT2     8\n#define D3DSP_REGTYPE_MASK       (0x7 << D3DSP_REGTYPE_SHIFT)\n#define D3DSP_REGTYPE_MASK2      0x00001800\n\ntypedef enum _D3DSHADER_PARAM_REGISTER_TYPE\n{\n    D3DSPR_TEMP         =  0,\n    D3DSPR_INPUT        =  1,\n    D3DSPR_CONST        =  2,\n    D3DSPR_ADDR         =  3,\n    D3DSPR_TEXTURE      =  3,\n    D3DSPR_RASTOUT      =  4,\n    D3DSPR_ATTROUT      =  5,\n    D3DSPR_TEXCRDOUT    =  6,\n    D3DSPR_OUTPUT       =  6,\n    D3DSPR_CONSTINT     =  7,\n    D3DSPR_COLOROUT     =  8,\n    D3DSPR_DEPTHOUT     =  9,\n    D3DSPR_SAMPLER      = 10,\n    D3DSPR_CONST2       = 11,\n    D3DSPR_CONST3       = 12,\n    D3DSPR_CONST4       = 13,\n    D3DSPR_CONSTBOOL    = 14,\n    D3DSPR_LOOP         = 15,\n    D3DSPR_TEMPFLOAT16  = 16,\n    D3DSPR_MISCTYPE     = 17,\n    D3DSPR_LABEL        = 18,\n    D3DSPR_PREDICATE    = 19,\n\n    D3DSPR_FORCE_DWORD  = 0x7fffffff\n} D3DSHADER_PARAM_REGISTER_TYPE;\n\ntypedef enum _D3DSHADER_MISCTYPE_OFFSETS {\n    D3DSMO_POSITION  = 0,\n    D3DSMO_FACE      = 1\n} D3DSHADER_MISCTYPE_OFFSETS;\n\ntypedef enum _D3DVS_RASTOUT_OFFSETS {\n  D3DSRO_POSITION     = 0,\n  D3DSRO_FOG          = 1,\n  D3DSRO_POINT_SIZE   = 2,\n\n  D3DSRO_FORCE_DWORD  = 0x7FFFFFFF\n} D3DVS_RASTOUT_OFFSETS;\n\n#define D3DVS_ADDRESSMODE_SHIFT  13\n#define D3DVS_ADDRESSMODE_MASK   (0x1 << D3DVS_ADDRESSMODE_SHIFT)\n\ntypedef enum _D3DVS_ADDRESSMODE_TYPE {\n  D3DVS_ADDRMODE_ABSOLUTE     = 0 << D3DVS_ADDRESSMODE_SHIFT,\n  D3DVS_ADDRMODE_RELATIVE     = 1 << D3DVS_ADDRESSMODE_SHIFT,\n\n  D3DVS_ADDRMODE_FORCE_DWORD  = 0x7FFFFFFF\n} D3DVS_ADDRESSMODE_TYPE;\n\n#define D3DSHADER_ADDRESSMODE_SHIFT 13\n#define D3DSHADER_ADDRESSMODE_MASK  (1 << D3DSHADER_ADDRESSMODE_SHIFT)\n\ntypedef enum _D3DSHADER_ADDRESSMODE_TYPE {\n  D3DSHADER_ADDRMODE_ABSOLUTE    = 0 << D3DSHADER_ADDRESSMODE_SHIFT,\n  D3DSHADER_ADDRMODE_RELATIVE    = 1 << D3DSHADER_ADDRESSMODE_SHIFT,\n\n  D3DSHADER_ADDRMODE_FORCE_DWORD = 0x7FFFFFFF\n} D3DSHADER_ADDRESSMODE_TYPE;\n\n\n#define D3DVS_SWIZZLE_SHIFT      16\n#define D3DVS_SWIZZLE_MASK       (0xFF << D3DVS_SWIZZLE_SHIFT)\n\n#define D3DSP_SWIZZLE_SHIFT      16\n#define D3DSP_SWIZZLE_MASK       (0xFF << D3DSP_SWIZZLE_SHIFT)\n\n#define D3DVS_X_X       (0 << D3DVS_SWIZZLE_SHIFT)\n#define D3DVS_X_Y       (1 << D3DVS_SWIZZLE_SHIFT)\n#define D3DVS_X_Z       (2 << D3DVS_SWIZZLE_SHIFT)\n#define D3DVS_X_W       (3 << D3DVS_SWIZZLE_SHIFT)\n\n#define D3DVS_Y_X       (0 << (D3DVS_SWIZZLE_SHIFT + 2))\n#define D3DVS_Y_Y       (1 << (D3DVS_SWIZZLE_SHIFT + 2))\n#define D3DVS_Y_Z       (2 << (D3DVS_SWIZZLE_SHIFT + 2))\n#define D3DVS_Y_W       (3 << (D3DVS_SWIZZLE_SHIFT + 2))\n\n#define D3DVS_Z_X       (0 << (D3DVS_SWIZZLE_SHIFT + 4))\n#define D3DVS_Z_Y       (1 << (D3DVS_SWIZZLE_SHIFT + 4))\n#define D3DVS_Z_Z       (2 << (D3DVS_SWIZZLE_SHIFT + 4))\n#define D3DVS_Z_W       (3 << (D3DVS_SWIZZLE_SHIFT + 4))\n\n#define D3DVS_W_X       (0 << (D3DVS_SWIZZLE_SHIFT + 6))\n#define D3DVS_W_Y       (1 << (D3DVS_SWIZZLE_SHIFT + 6))\n#define D3DVS_W_Z       (2 << (D3DVS_SWIZZLE_SHIFT + 6))\n#define D3DVS_W_W       (3 << (D3DVS_SWIZZLE_SHIFT + 6))\n\n#define D3DVS_NOSWIZZLE (D3DVS_X_X | D3DVS_Y_Y | D3DVS_Z_Z | D3DVS_W_W)\n\n#define D3DSP_NOSWIZZLE \\\n    ((0 << (D3DSP_SWIZZLE_SHIFT + 0)) | (1 << (D3DSP_SWIZZLE_SHIFT + 2)) | (2 << (D3DSP_SWIZZLE_SHIFT + 4)) | (3 << (D3DSP_SWIZZLE_SHIFT + 6)))\n\n#define D3DSP_SRCMOD_SHIFT      24\n#define D3DSP_SRCMOD_MASK       (0xF << D3DSP_SRCMOD_SHIFT)\n\ntypedef enum _D3DSHADER_PARAM_SRCMOD_TYPE {\n  D3DSPSM_NONE         =  0 << D3DSP_SRCMOD_SHIFT,\n  D3DSPSM_NEG          =  1 << D3DSP_SRCMOD_SHIFT,\n  D3DSPSM_BIAS         =  2 << D3DSP_SRCMOD_SHIFT,\n  D3DSPSM_BIASNEG      =  3 << D3DSP_SRCMOD_SHIFT,\n  D3DSPSM_SIGN         =  4 << D3DSP_SRCMOD_SHIFT,\n  D3DSPSM_SIGNNEG      =  5 << D3DSP_SRCMOD_SHIFT,\n  D3DSPSM_COMP         =  6 << D3DSP_SRCMOD_SHIFT,\n  D3DSPSM_X2           =  7 << D3DSP_SRCMOD_SHIFT,\n  D3DSPSM_X2NEG        =  8 << D3DSP_SRCMOD_SHIFT,\n  D3DSPSM_DZ           =  9 << D3DSP_SRCMOD_SHIFT,\n  D3DSPSM_DW           = 10 << D3DSP_SRCMOD_SHIFT,\n  D3DSPSM_ABS          = 11 << D3DSP_SRCMOD_SHIFT,\n  D3DSPSM_ABSNEG       = 12 << D3DSP_SRCMOD_SHIFT,\n  D3DSPSM_NOT          = 13 << D3DSP_SRCMOD_SHIFT,\n\n  D3DSPSM_FORCE_DWORD  = 0x7FFFFFFF\n} D3DSHADER_PARAM_SRCMOD_TYPE;\n\n#define D3DPS_VERSION(major, minor) (0xFFFF0000 | ((major) << 8) | (minor))\n#define D3DVS_VERSION(major, minor) (0xFFFE0000 | ((major) << 8) | (minor))\n#define D3DSHADER_VERSION_MAJOR(version) (((version) >> 8) & 0xFF)\n#define D3DSHADER_VERSION_MINOR(version) (((version) >> 0) & 0xFF)\n\n#define D3DSI_COMMENTSIZE_SHIFT 16\n#define D3DSI_COMMENTSIZE_MASK (0x7FFF << D3DSI_COMMENTSIZE_SHIFT)\n\n#define D3DSHADER_COMMENT(commentSize) \\\n  ((((commentSize) << D3DSI_COMMENTSIZE_SHIFT) & D3DSI_COMMENTSIZE_MASK) | D3DSIO_COMMENT)\n\n#define D3DPS_END() 0x0000FFFF\n#define D3DVS_END() 0x0000FFFF\n\n\n/*****************************************************************************\n * Direct 3D v8 enumerated types\n */\ntypedef enum _D3DBACKBUFFER_TYPE {\n    D3DBACKBUFFER_TYPE_MONO         = 0,\n    D3DBACKBUFFER_TYPE_LEFT         = 1,\n    D3DBACKBUFFER_TYPE_RIGHT        = 2,\n\n    D3DBACKBUFFER_TYPE_FORCE_DWORD  = 0x7fffffff\n} D3DBACKBUFFER_TYPE;\n\ntypedef enum _D3DBASISTYPE {\n   D3DBASIS_BEZIER        = 0,\n   D3DBASIS_BSPLINE       = 1,\n   D3DBASIS_INTERPOLATE   = 2,\n\n   D3DBASIS_FORCE_DWORD   = 0x7fffffff\n} D3DBASISTYPE;\n\ntypedef enum _D3DBLEND {\n    D3DBLEND_ZERO               =  1,\n    D3DBLEND_ONE                =  2,\n    D3DBLEND_SRCCOLOR           =  3,\n    D3DBLEND_INVSRCCOLOR        =  4,\n    D3DBLEND_SRCALPHA           =  5,\n    D3DBLEND_INVSRCALPHA        =  6,\n    D3DBLEND_DESTALPHA          =  7,\n    D3DBLEND_INVDESTALPHA       =  8,\n    D3DBLEND_DESTCOLOR          =  9,\n    D3DBLEND_INVDESTCOLOR       = 10,\n    D3DBLEND_SRCALPHASAT        = 11,\n    D3DBLEND_BOTHSRCALPHA       = 12,\n    D3DBLEND_BOTHINVSRCALPHA    = 13,\n    D3DBLEND_BLENDFACTOR        = 14,\n    D3DBLEND_INVBLENDFACTOR     = 15,\n#ifndef D3D_DISABLE_9EX\n    D3DBLEND_SRCCOLOR2          = 16,\n    D3DBLEND_INVSRCCOLOR2       = 17,\n#endif\n    D3DBLEND_FORCE_DWORD        = 0x7fffffff\n} D3DBLEND;\n\ntypedef enum _D3DBLENDOP {\n    D3DBLENDOP_ADD              = 1,\n    D3DBLENDOP_SUBTRACT         = 2,\n    D3DBLENDOP_REVSUBTRACT      = 3,\n    D3DBLENDOP_MIN              = 4,\n    D3DBLENDOP_MAX              = 5,\n\n    D3DBLENDOP_FORCE_DWORD      = 0x7fffffff\n} D3DBLENDOP;\n\ntypedef enum _D3DCMPFUNC {\n    D3DCMP_NEVER                = 1,\n    D3DCMP_LESS                 = 2,\n    D3DCMP_EQUAL                = 3,\n    D3DCMP_LESSEQUAL            = 4,\n    D3DCMP_GREATER              = 5,\n    D3DCMP_NOTEQUAL             = 6,\n    D3DCMP_GREATEREQUAL         = 7,\n    D3DCMP_ALWAYS               = 8,\n\n    D3DCMP_FORCE_DWORD          = 0x7fffffff\n} D3DCMPFUNC;\n\ntypedef enum _D3DCUBEMAP_FACES {\n    D3DCUBEMAP_FACE_POSITIVE_X     = 0,\n    D3DCUBEMAP_FACE_NEGATIVE_X     = 1,\n    D3DCUBEMAP_FACE_POSITIVE_Y     = 2,\n    D3DCUBEMAP_FACE_NEGATIVE_Y     = 3,\n    D3DCUBEMAP_FACE_POSITIVE_Z     = 4,\n    D3DCUBEMAP_FACE_NEGATIVE_Z     = 5,\n\n    D3DCUBEMAP_FACE_FORCE_DWORD    = 0xffffffff\n} D3DCUBEMAP_FACES;\n\ntypedef enum _D3DCULL {\n    D3DCULL_NONE                = 1,\n    D3DCULL_CW                  = 2,\n    D3DCULL_CCW                 = 3,\n\n    D3DCULL_FORCE_DWORD         = 0x7fffffff\n} D3DCULL;\n\ntypedef enum _D3DDEBUGMONITORTOKENS {\n    D3DDMT_ENABLE          = 0,\n    D3DDMT_DISABLE         = 1,\n\n    D3DDMT_FORCE_DWORD     = 0x7fffffff\n} D3DDEBUGMONITORTOKENS;\n\ntypedef enum _D3DDEGREETYPE {\n    D3DDEGREE_LINEAR      = 1,\n    D3DDEGREE_QUADRATIC   = 2,\n    D3DDEGREE_CUBIC       = 3,\n    D3DDEGREE_QUINTIC     = 5,\n    \n    D3DDEGREE_FORCE_DWORD   = 0x7fffffff\n} D3DDEGREETYPE;\n\ntypedef enum _D3DDEVTYPE {\n    D3DDEVTYPE_HAL         = 1,\n    D3DDEVTYPE_REF         = 2,\n    D3DDEVTYPE_SW          = 3,\n    D3DDEVTYPE_NULLREF     = 4,\n\n    D3DDEVTYPE_FORCE_DWORD = 0xffffffff\n} D3DDEVTYPE;\n\ntypedef enum _D3DFILLMODE {\n    D3DFILL_POINT               = 1,\n    D3DFILL_WIREFRAME           = 2,\n    D3DFILL_SOLID               = 3,\n\n    D3DFILL_FORCE_DWORD         = 0x7fffffff\n} D3DFILLMODE;\n\ntypedef enum _D3DFOGMODE {\n    D3DFOG_NONE                 = 0,\n    D3DFOG_EXP                  = 1,\n    D3DFOG_EXP2                 = 2,\n    D3DFOG_LINEAR               = 3,\n\n    D3DFOG_FORCE_DWORD          = 0x7fffffff\n} D3DFOGMODE;\n\ntypedef enum _D3DFORMAT {\n    D3DFMT_UNKNOWN              =   0,\n\n    D3DFMT_R8G8B8               =  20,\n    D3DFMT_A8R8G8B8             =  21,\n    D3DFMT_X8R8G8B8             =  22,\n    D3DFMT_R5G6B5               =  23,\n    D3DFMT_X1R5G5B5             =  24,\n    D3DFMT_A1R5G5B5             =  25,\n    D3DFMT_A4R4G4B4             =  26,\n    D3DFMT_R3G3B2               =  27,\n    D3DFMT_A8                   =  28,\n    D3DFMT_A8R3G3B2             =  29,\n    D3DFMT_X4R4G4B4             =  30,\n    D3DFMT_A2B10G10R10          =  31,\n    D3DFMT_A8B8G8R8             =  32,\n    D3DFMT_X8B8G8R8             =  33,\n    D3DFMT_G16R16               =  34,\n    D3DFMT_A2R10G10B10          =  35,\n    D3DFMT_A16B16G16R16         =  36,\n  \n\n    D3DFMT_A8P8                 =  40,\n    D3DFMT_P8                   =  41,\n\n    D3DFMT_L8                   =  50,\n    D3DFMT_A8L8                 =  51,\n    D3DFMT_A4L4                 =  52,\n\n    D3DFMT_V8U8                 =  60,\n    D3DFMT_L6V5U5               =  61,\n    D3DFMT_X8L8V8U8             =  62,\n    D3DFMT_Q8W8V8U8             =  63,\n    D3DFMT_V16U16               =  64,\n    D3DFMT_A2W10V10U10          =  67,\n\n    D3DFMT_UYVY                 =  MAKEFOURCC('U', 'Y', 'V', 'Y'),\n    D3DFMT_YUY2                 =  MAKEFOURCC('Y', 'U', 'Y', '2'),\n    D3DFMT_DXT1                 =  MAKEFOURCC('D', 'X', 'T', '1'),\n    D3DFMT_DXT2                 =  MAKEFOURCC('D', 'X', 'T', '2'),\n    D3DFMT_DXT3                 =  MAKEFOURCC('D', 'X', 'T', '3'),\n    D3DFMT_DXT4                 =  MAKEFOURCC('D', 'X', 'T', '4'),\n    D3DFMT_DXT5                 =  MAKEFOURCC('D', 'X', 'T', '5'),\n    D3DFMT_MULTI2_ARGB8         =  MAKEFOURCC('M', 'E', 'T', '1'),\n    D3DFMT_G8R8_G8B8            =  MAKEFOURCC('G', 'R', 'G', 'B'),\n    D3DFMT_R8G8_B8G8            =  MAKEFOURCC('R', 'G', 'B', 'G'),\n\n    D3DFMT_D16_LOCKABLE         =  70,\n    D3DFMT_D32                  =  71,\n    D3DFMT_D15S1                =  73,\n    D3DFMT_D24S8                =  75,\n    D3DFMT_D24X8                =  77,\n    D3DFMT_D24X4S4              =  79,\n    D3DFMT_D16                  =  80,\n    D3DFMT_L16                  =  81,\n    D3DFMT_D32F_LOCKABLE        =  82,\n    D3DFMT_D24FS8               =  83,\n#ifndef D3D_DISABLE_9EX\n    D3DFMT_D32_LOCKABLE         =  84,\n    D3DFMT_S8_LOCKABLE          =  85,\n#endif\n\n    D3DFMT_VERTEXDATA           = 100,\n    D3DFMT_INDEX16              = 101,\n    D3DFMT_INDEX32              = 102,\n    D3DFMT_Q16W16V16U16         = 110,\n    /* Floating point formats */\n    D3DFMT_R16F                 = 111,\n    D3DFMT_G16R16F              = 112,\n    D3DFMT_A16B16G16R16F        = 113,\n    \n    /* IEEE formats */\n    D3DFMT_R32F                 = 114,\n    D3DFMT_G32R32F              = 115,\n    D3DFMT_A32B32G32R32F        = 116,\n    \n    D3DFMT_CxV8U8               = 117,\n#ifndef D3D_DISABLE_9EX\n    D3DFMT_A1                   = 118,\n    D3DFMT_A2B10G10R10_XR_BIAS  = 119,\n    D3DFMT_BINARYBUFFER         = 199,\n#endif\n\n    D3DFMT_FORCE_DWORD          = 0xFFFFFFFF\n} D3DFORMAT;\n\ntypedef enum _D3DLIGHTTYPE {\n    D3DLIGHT_POINT          = 1,\n    D3DLIGHT_SPOT           = 2,\n    D3DLIGHT_DIRECTIONAL    = 3,\n\n    D3DLIGHT_FORCE_DWORD    = 0x7fffffff\n} D3DLIGHTTYPE;\n\ntypedef enum _D3DMATERIALCOLORSOURCE {\n    D3DMCS_MATERIAL         = 0,\n    D3DMCS_COLOR1           = 1,\n    D3DMCS_COLOR2           = 2,\n\n    D3DMCS_FORCE_DWORD      = 0x7fffffff\n} D3DMATERIALCOLORSOURCE;\n\ntypedef enum _D3DMULTISAMPLE_TYPE {\n    D3DMULTISAMPLE_NONE            =  0,\n    D3DMULTISAMPLE_NONMASKABLE     =  1,\n    D3DMULTISAMPLE_2_SAMPLES       =  2,\n    D3DMULTISAMPLE_3_SAMPLES       =  3,\n    D3DMULTISAMPLE_4_SAMPLES       =  4,\n    D3DMULTISAMPLE_5_SAMPLES       =  5,\n    D3DMULTISAMPLE_6_SAMPLES       =  6,\n    D3DMULTISAMPLE_7_SAMPLES       =  7,\n    D3DMULTISAMPLE_8_SAMPLES       =  8,\n    D3DMULTISAMPLE_9_SAMPLES       =  9,\n    D3DMULTISAMPLE_10_SAMPLES      = 10,\n    D3DMULTISAMPLE_11_SAMPLES      = 11,\n    D3DMULTISAMPLE_12_SAMPLES      = 12,\n    D3DMULTISAMPLE_13_SAMPLES      = 13,\n    D3DMULTISAMPLE_14_SAMPLES      = 14,\n    D3DMULTISAMPLE_15_SAMPLES      = 15,\n    D3DMULTISAMPLE_16_SAMPLES      = 16,\n\n    D3DMULTISAMPLE_FORCE_DWORD     = 0x7fffffff\n} D3DMULTISAMPLE_TYPE;\n\n#if 0\ntypedef enum _D3DORDERTYPE {\n   D3DORDER_LINEAR      = 1,\n   D3DORDER_QUADRATIC   = 2,\n   D3DORDER_CUBIC       = 3,\n   D3DORDER_QUINTIC     = 5,\n\n   D3DORDER_FORCE_DWORD = 0x7fffffff\n} D3DORDERTYPE;\n#endif\ntypedef enum _D3DPATCHEDGESTYLE {\n   D3DPATCHEDGE_DISCRETE    = 0,\n   D3DPATCHEDGE_CONTINUOUS  = 1,\n\n   D3DPATCHEDGE_FORCE_DWORD = 0x7fffffff,\n} D3DPATCHEDGESTYLE;\n\ntypedef enum _D3DPOOL {\n    D3DPOOL_DEFAULT                 = 0,\n    D3DPOOL_MANAGED                 = 1,\n    D3DPOOL_SYSTEMMEM               = 2,\n    D3DPOOL_SCRATCH                 = 3,\n\n    D3DPOOL_FORCE_DWORD             = 0x7fffffff\n} D3DPOOL;\n\ntypedef enum _D3DPRIMITIVETYPE {\n    D3DPT_POINTLIST             = 1,\n    D3DPT_LINELIST              = 2,\n    D3DPT_LINESTRIP             = 3,\n    D3DPT_TRIANGLELIST          = 4,\n    D3DPT_TRIANGLESTRIP         = 5,\n    D3DPT_TRIANGLEFAN           = 6,\n\n    D3DPT_FORCE_DWORD           = 0x7fffffff\n} D3DPRIMITIVETYPE;\n\ntypedef enum _D3DRENDERSTATETYPE {\n    D3DRS_ZENABLE                   =   7,\n    D3DRS_FILLMODE                  =   8,\n    D3DRS_SHADEMODE                 =   9,\n    D3DRS_ZWRITEENABLE              =  14,\n    D3DRS_ALPHATESTENABLE           =  15,\n    D3DRS_LASTPIXEL                 =  16,\n    D3DRS_SRCBLEND                  =  19,\n    D3DRS_DESTBLEND                 =  20,\n    D3DRS_CULLMODE                  =  22,\n    D3DRS_ZFUNC                     =  23,\n    D3DRS_ALPHAREF                  =  24,\n    D3DRS_ALPHAFUNC                 =  25,\n    D3DRS_DITHERENABLE              =  26,\n    D3DRS_ALPHABLENDENABLE          =  27,\n    D3DRS_FOGENABLE                 =  28,\n    D3DRS_SPECULARENABLE            =  29,\n    D3DRS_FOGCOLOR                  =  34,\n    D3DRS_FOGTABLEMODE              =  35,\n    D3DRS_FOGSTART                  =  36,\n    D3DRS_FOGEND                    =  37,\n    D3DRS_FOGDENSITY                =  38,\n    D3DRS_RANGEFOGENABLE            =  48,\n    D3DRS_STENCILENABLE             =  52,\n    D3DRS_STENCILFAIL               =  53,\n    D3DRS_STENCILZFAIL              =  54,\n    D3DRS_STENCILPASS               =  55,\n    D3DRS_STENCILFUNC               =  56,\n    D3DRS_STENCILREF                =  57,\n    D3DRS_STENCILMASK               =  58,\n    D3DRS_STENCILWRITEMASK          =  59,\n    D3DRS_TEXTUREFACTOR             =  60,\n    D3DRS_WRAP0                     = 128,\n    D3DRS_WRAP1                     = 129,\n    D3DRS_WRAP2                     = 130,\n    D3DRS_WRAP3                     = 131,\n    D3DRS_WRAP4                     = 132,\n    D3DRS_WRAP5                     = 133,\n    D3DRS_WRAP6                     = 134,\n    D3DRS_WRAP7                     = 135,\n    D3DRS_CLIPPING                  = 136,\n    D3DRS_LIGHTING                  = 137,\n    D3DRS_AMBIENT                   = 139,\n    D3DRS_FOGVERTEXMODE             = 140,\n    D3DRS_COLORVERTEX               = 141,\n    D3DRS_LOCALVIEWER               = 142,\n    D3DRS_NORMALIZENORMALS          = 143,\n    D3DRS_DIFFUSEMATERIALSOURCE     = 145,\n    D3DRS_SPECULARMATERIALSOURCE    = 146,\n    D3DRS_AMBIENTMATERIALSOURCE     = 147,\n    D3DRS_EMISSIVEMATERIALSOURCE    = 148,\n    D3DRS_VERTEXBLEND               = 151,\n    D3DRS_CLIPPLANEENABLE           = 152,\n    D3DRS_POINTSIZE                 = 154,\n    D3DRS_POINTSIZE_MIN             = 155,\n    D3DRS_POINTSPRITEENABLE         = 156,\n    D3DRS_POINTSCALEENABLE          = 157,\n    D3DRS_POINTSCALE_A              = 158,\n    D3DRS_POINTSCALE_B              = 159,\n    D3DRS_POINTSCALE_C              = 160,\n    D3DRS_MULTISAMPLEANTIALIAS      = 161,\n    D3DRS_MULTISAMPLEMASK           = 162,\n    D3DRS_PATCHEDGESTYLE            = 163,\n    D3DRS_DEBUGMONITORTOKEN         = 165,\n    D3DRS_POINTSIZE_MAX             = 166,\n    D3DRS_INDEXEDVERTEXBLENDENABLE  = 167,\n    D3DRS_COLORWRITEENABLE          = 168,\n    D3DRS_TWEENFACTOR               = 170,\n    D3DRS_BLENDOP                   = 171,\n    D3DRS_POSITIONDEGREE            = 172,\n    D3DRS_NORMALDEGREE              = 173,\n    D3DRS_SCISSORTESTENABLE         = 174,\n    D3DRS_SLOPESCALEDEPTHBIAS       = 175,\n    D3DRS_ANTIALIASEDLINEENABLE     = 176,\n    D3DRS_MINTESSELLATIONLEVEL      = 178,\n    D3DRS_MAXTESSELLATIONLEVEL      = 179,\n    D3DRS_ADAPTIVETESS_X            = 180,\n    D3DRS_ADAPTIVETESS_Y            = 181,\n    D3DRS_ADAPTIVETESS_Z            = 182,\n    D3DRS_ADAPTIVETESS_W            = 183,\n    D3DRS_ENABLEADAPTIVETESSELLATION= 184,\n    D3DRS_TWOSIDEDSTENCILMODE       = 185,\n    D3DRS_CCW_STENCILFAIL           = 186,\n    D3DRS_CCW_STENCILZFAIL          = 187,\n    D3DRS_CCW_STENCILPASS           = 188,\n    D3DRS_CCW_STENCILFUNC           = 189,\n    D3DRS_COLORWRITEENABLE1         = 190,\n    D3DRS_COLORWRITEENABLE2         = 191,\n    D3DRS_COLORWRITEENABLE3         = 192,\n    D3DRS_BLENDFACTOR               = 193,\n    D3DRS_SRGBWRITEENABLE           = 194,\n    D3DRS_DEPTHBIAS                 = 195,\n    D3DRS_WRAP8                     = 198,\n    D3DRS_WRAP9                     = 199,\n    D3DRS_WRAP10                    = 200,\n    D3DRS_WRAP11                    = 201,\n    D3DRS_WRAP12                    = 202,\n    D3DRS_WRAP13                    = 203,\n    D3DRS_WRAP14                    = 204,\n    D3DRS_WRAP15                    = 205,\n    D3DRS_SEPARATEALPHABLENDENABLE  = 206,\n    D3DRS_SRCBLENDALPHA             = 207,\n    D3DRS_DESTBLENDALPHA            = 208,\n    D3DRS_BLENDOPALPHA              = 209,\n\n    D3DRS_FORCE_DWORD               = 0x7fffffff\n} D3DRENDERSTATETYPE;\n\ntypedef enum _D3DRESOURCETYPE {\n    D3DRTYPE_SURFACE                =  1,\n    D3DRTYPE_VOLUME                 =  2,\n    D3DRTYPE_TEXTURE                =  3,\n    D3DRTYPE_VOLUMETEXTURE          =  4,\n    D3DRTYPE_CUBETEXTURE            =  5,\n    D3DRTYPE_VERTEXBUFFER           =  6,\n    D3DRTYPE_INDEXBUFFER            =  7,\n\n    D3DRTYPE_FORCE_DWORD            = 0x7fffffff\n} D3DRESOURCETYPE;\n\n#define D3DRTYPECOUNT (D3DRTYPE_INDEXBUFFER+1)\n\ntypedef enum _D3DSHADEMODE {\n    D3DSHADE_FLAT               = 1,\n    D3DSHADE_GOURAUD            = 2,\n    D3DSHADE_PHONG              = 3,\n\n    D3DSHADE_FORCE_DWORD        = 0x7fffffff\n} D3DSHADEMODE;\n\ntypedef enum _D3DSTATEBLOCKTYPE {\n    D3DSBT_ALL           = 1,\n    D3DSBT_PIXELSTATE    = 2,\n    D3DSBT_VERTEXSTATE   = 3,\n\n    D3DSBT_FORCE_DWORD   = 0xffffffff\n} D3DSTATEBLOCKTYPE;\n\ntypedef enum _D3DSTENCILOP {\n    D3DSTENCILOP_KEEP           = 1,\n    D3DSTENCILOP_ZERO           = 2,\n    D3DSTENCILOP_REPLACE        = 3,\n    D3DSTENCILOP_INCRSAT        = 4,\n    D3DSTENCILOP_DECRSAT        = 5,\n    D3DSTENCILOP_INVERT         = 6,\n    D3DSTENCILOP_INCR           = 7,\n    D3DSTENCILOP_DECR           = 8,\n\n    D3DSTENCILOP_FORCE_DWORD    = 0x7fffffff\n} D3DSTENCILOP;\n\ntypedef enum _D3DSWAPEFFECT {\n    D3DSWAPEFFECT_DISCARD         = 1,\n    D3DSWAPEFFECT_FLIP            = 2,\n    D3DSWAPEFFECT_COPY            = 3,\n#ifndef D3D_DISABLE_9EX\n    D3DSWAPEFFECT_OVERLAY         = 4,\n    D3DSWAPEFFECT_FLIPEX          = 5,\n#endif\n    D3DSWAPEFFECT_FORCE_DWORD     = 0xFFFFFFFF\n} D3DSWAPEFFECT;\n\ntypedef enum _D3DTEXTUREADDRESS {\n    D3DTADDRESS_WRAP            = 1,\n    D3DTADDRESS_MIRROR          = 2,\n    D3DTADDRESS_CLAMP           = 3,\n    D3DTADDRESS_BORDER          = 4,\n    D3DTADDRESS_MIRRORONCE      = 5,\n\n    D3DTADDRESS_FORCE_DWORD     = 0x7fffffff\n} D3DTEXTUREADDRESS;\n\ntypedef enum _D3DTEXTUREFILTERTYPE {\n    D3DTEXF_NONE            = 0,\n    D3DTEXF_POINT           = 1,\n    D3DTEXF_LINEAR          = 2,\n    D3DTEXF_ANISOTROPIC     = 3,\n    D3DTEXF_FLATCUBIC       = 4,\n    D3DTEXF_GAUSSIANCUBIC   = 5,\n    D3DTEXF_PYRAMIDALQUAD   = 6,\n    D3DTEXF_GAUSSIANQUAD    = 7,\n#ifndef D3D_DISABLE_9EX\n    D3DTEXF_CONVOLUTIONMONO = 8,\n#endif\n    D3DTEXF_FORCE_DWORD     = 0x7fffffff\n} D3DTEXTUREFILTERTYPE;\n\ntypedef enum _D3DTEXTUREOP {\n    D3DTOP_DISABLE                   =  1,\n    D3DTOP_SELECTARG1                =  2,\n    D3DTOP_SELECTARG2                =  3,\n    D3DTOP_MODULATE                  =  4,\n    D3DTOP_MODULATE2X                =  5,\n    D3DTOP_MODULATE4X                =  6,\n    D3DTOP_ADD                       =  7,\n    D3DTOP_ADDSIGNED                 =  8,\n    D3DTOP_ADDSIGNED2X               =  9,\n    D3DTOP_SUBTRACT                  = 10,\n    D3DTOP_ADDSMOOTH                 = 11,\n    D3DTOP_BLENDDIFFUSEALPHA         = 12,\n    D3DTOP_BLENDTEXTUREALPHA         = 13,\n    D3DTOP_BLENDFACTORALPHA          = 14,\n    D3DTOP_BLENDTEXTUREALPHAPM       = 15,\n    D3DTOP_BLENDCURRENTALPHA         = 16,\n    D3DTOP_PREMODULATE               = 17,\n    D3DTOP_MODULATEALPHA_ADDCOLOR    = 18,\n    D3DTOP_MODULATECOLOR_ADDALPHA    = 19,\n    D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,\n    D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,\n    D3DTOP_BUMPENVMAP                = 22,\n    D3DTOP_BUMPENVMAPLUMINANCE       = 23,\n    D3DTOP_DOTPRODUCT3               = 24,\n    D3DTOP_MULTIPLYADD               = 25,\n    D3DTOP_LERP                      = 26,\n\n    D3DTOP_FORCE_DWORD               = 0x7fffffff,\n} D3DTEXTUREOP;\n\ntypedef enum _D3DTEXTURESTAGESTATETYPE {\n    D3DTSS_COLOROP               =  1,\n    D3DTSS_COLORARG1             =  2,\n    D3DTSS_COLORARG2             =  3,\n    D3DTSS_ALPHAOP               =  4,\n    D3DTSS_ALPHAARG1             =  5,\n    D3DTSS_ALPHAARG2             =  6,\n    D3DTSS_BUMPENVMAT00          =  7,\n    D3DTSS_BUMPENVMAT01          =  8,\n    D3DTSS_BUMPENVMAT10          =  9,\n    D3DTSS_BUMPENVMAT11          = 10,\n    D3DTSS_TEXCOORDINDEX         = 11,\n    D3DTSS_BUMPENVLSCALE         = 22,\n    D3DTSS_BUMPENVLOFFSET        = 23,\n    D3DTSS_TEXTURETRANSFORMFLAGS = 24,\n    D3DTSS_COLORARG0             = 26,\n    D3DTSS_ALPHAARG0             = 27,\n    D3DTSS_RESULTARG             = 28,\n    D3DTSS_CONSTANT              = 32,\n\n    D3DTSS_FORCE_DWORD           = 0x7fffffff\n} D3DTEXTURESTAGESTATETYPE;\n\ntypedef enum _D3DTEXTURETRANSFORMFLAGS {\n    D3DTTFF_DISABLE         =   0,\n    D3DTTFF_COUNT1          =   1,\n    D3DTTFF_COUNT2          =   2,\n    D3DTTFF_COUNT3          =   3,\n    D3DTTFF_COUNT4          =   4,\n    D3DTTFF_PROJECTED       = 256,\n\n    D3DTTFF_FORCE_DWORD     = 0x7fffffff\n} D3DTEXTURETRANSFORMFLAGS;\n\ntypedef enum _D3DTRANSFORMSTATETYPE {\n    D3DTS_VIEW            =  2,\n    D3DTS_PROJECTION      =  3,\n    D3DTS_TEXTURE0        = 16,\n    D3DTS_TEXTURE1        = 17,\n    D3DTS_TEXTURE2        = 18,\n    D3DTS_TEXTURE3        = 19,\n    D3DTS_TEXTURE4        = 20,\n    D3DTS_TEXTURE5        = 21,\n    D3DTS_TEXTURE6        = 22,\n    D3DTS_TEXTURE7        = 23,\n\n    D3DTS_FORCE_DWORD     = 0x7fffffff\n} D3DTRANSFORMSTATETYPE;\n\ntypedef enum _D3DVERTEXBLENDFLAGS {\n    D3DVBF_DISABLE  =   0,\n    D3DVBF_1WEIGHTS =   1,\n    D3DVBF_2WEIGHTS =   2,\n    D3DVBF_3WEIGHTS =   3,\n    D3DVBF_TWEENING = 255,\n    D3DVBF_0WEIGHTS = 256\n} D3DVERTEXBLENDFLAGS;\n\ntypedef enum _D3DZBUFFERTYPE {\n    D3DZB_FALSE                 = 0,\n    D3DZB_TRUE                  = 1,\n    D3DZB_USEW                  = 2,\n\n    D3DZB_FORCE_DWORD           = 0x7fffffff\n} D3DZBUFFERTYPE;\n\ntypedef enum _D3DSAMPLERSTATETYPE {\n    D3DSAMP_ADDRESSU       = 1,\n    D3DSAMP_ADDRESSV       = 2,\n    D3DSAMP_ADDRESSW       = 3,\n    D3DSAMP_BORDERCOLOR    = 4,\n    D3DSAMP_MAGFILTER      = 5,\n    D3DSAMP_MINFILTER      = 6,\n    D3DSAMP_MIPFILTER      = 7,\n    D3DSAMP_MIPMAPLODBIAS  = 8,\n    D3DSAMP_MAXMIPLEVEL    = 9,\n    D3DSAMP_MAXANISOTROPY  = 10,\n    D3DSAMP_SRGBTEXTURE    = 11,\n    D3DSAMP_ELEMENTINDEX   = 12,\n    D3DSAMP_DMAPOFFSET     = 13,\n                                \n    D3DSAMP_FORCE_DWORD   = 0x7fffffff,\n} D3DSAMPLERSTATETYPE;\n\n\n/*****************************************************************************\n * Direct 3D v9 typedefs\n */\n#ifndef D3DCOLOR_DEFINED\ntypedef DWORD D3DCOLOR;\n#define D3DCOLOR_DEFINED\n#endif\n\n/*****************************************************************************\n * Direct 3D v9 structures\n */\ntypedef struct _D3DADAPTER_IDENTIFIER9 {\n    char            Driver[MAX_DEVICE_IDENTIFIER_STRING];\n    char            Description[MAX_DEVICE_IDENTIFIER_STRING];\n    char            DeviceName[32];\n    LARGE_INTEGER   DriverVersion; \n\n    DWORD           VendorId;\n    DWORD           DeviceId;\n    DWORD           SubSysId;\n    DWORD           Revision;\n\n    GUID            DeviceIdentifier;\n\n    DWORD           WHQLLevel;\n} D3DADAPTER_IDENTIFIER9;\n\ntypedef struct _D3DBOX {\n    UINT                Left;\n    UINT                Top;\n    UINT                Right;\n    UINT                Bottom;\n    UINT                Front;\n    UINT                Back;\n} D3DBOX;\n\ntypedef struct _D3DCLIPSTATUS9 {\n   DWORD ClipUnion;\n   DWORD ClipIntersection;\n} D3DCLIPSTATUS9;\n\n#ifndef D3DCOLORVALUE_DEFINED\ntypedef struct _D3DCOLORVALUE {\n    float r;\n    float g;\n    float b;\n    float a;\n} D3DCOLORVALUE;\n#define D3DCOLORVALUE_DEFINED\n#endif\n\ntypedef struct _D3DDEVICE_CREATION_PARAMETERS {\n    UINT          AdapterOrdinal;\n    D3DDEVTYPE    DeviceType;\n    HWND          hFocusWindow;\n    DWORD         BehaviorFlags;\n} D3DDEVICE_CREATION_PARAMETERS;\n\ntypedef struct _D3DDEVINFO_D3D9BANDWIDTHTIMINGS {\n    float         MaxBandwidthUtilized;\n    float         FrontEndUploadMemoryUtilizedPercent;\n    float         VertexRateUtilizedPercent;\n    float         TriangleSetupRateUtilizedPercent;\n    float         FillRateUtilizedPercent;\n} D3DDEVINFO_D3D9BANDWIDTHTIMINGS;\n\ntypedef struct _D3DDEVINFO_D3D9CACHEUTILIZATION {\n    float         TextureCacheHitRate;\n    float         PostTransformVertexCacheHitRate;\n} D3DDEVINFO_D3D9CACHEUTILIZATION;\n\ntypedef struct _D3DDEVINFO_D3D9INTERFACETIMINGS {\n    float         WaitingForGPUToUseApplicationResourceTimePercent;\n    float         WaitingForGPUToAcceptMoreCommandsTimePercent;\n    float         WaitingForGPUToStayWithinLatencyTimePercent;\n    float         WaitingForGPUExclusiveResourceTimePercent;\n    float         WaitingForGPUOtherTimePercent;\n} D3DDEVINFO_D3D9INTERFACETIMINGS;\n\ntypedef struct _D3DDEVINFO_D3D9PIPELINETIMINGS {\n    float         VertexProcessingTimePercent;\n    float         PixelProcessingTimePercent;\n    float         OtherGPUProcessingTimePercent;\n    float         GPUIdleTimePercent;\n} D3DDEVINFO_D3D9PIPELINETIMINGS;\n\ntypedef struct _D3DDEVINFO_D3D9STAGETIMINGS {\n    float         MemoryProcessingPercent;\n    float         ComputationProcessingPercent;\n} D3DDEVINFO_D3D9STAGETIMINGS;\n\n\n/* Vertex cache optimization hints. */\ntypedef struct D3DDEVINFO_VCACHE {\n    /* Must be a 4 char code FOURCC (e.g. CACH) */\n    DWORD         Pattern; \n    /* 0 to get the longest  strips, 1 vertex cache */\n    DWORD         OptMethod; \n     /* Cache size to use (only valid if OptMethod==1) */\n    DWORD         CacheSize;\n    /* internal for deciding when to restart strips, non user modifiable (only valid if OptMethod==1) */\n    DWORD         MagicNumber; \n} D3DDEVINFO_VCACHE;\n\ntypedef struct D3DRESOURCESTATS {\n    BOOL                bThrashing;\n    DWORD               ApproxBytesDownloaded;\n    DWORD               NumEvicts;\n    DWORD               NumVidCreates;\n    DWORD               LastPri;\n    DWORD               NumUsed;\n    DWORD               NumUsedInVidMem;\n    DWORD               WorkingSet;\n    DWORD               WorkingSetBytes;\n    DWORD               TotalManaged;\n    DWORD               TotalBytes;\n} D3DRESOURCESTATS;\n\ntypedef struct _D3DDEVINFO_D3DRESOURCEMANAGER {\n    D3DRESOURCESTATS stats[D3DRTYPECOUNT];\n} D3DDEVINFO_D3DRESOURCEMANAGER;\n\ntypedef struct _D3DDEVINFO_D3DVERTEXSTATS {\n    DWORD NumRenderedTriangles;\n    DWORD NumExtraClippingTriangles;\n} D3DDEVINFO_D3DVERTEXSTATS;\n\ntypedef struct _D3DDISPLAYMODE {\n    UINT            Width;\n    UINT            Height;\n    UINT            RefreshRate;\n    D3DFORMAT       Format;\n} D3DDISPLAYMODE;\n\ntypedef struct _D3DGAMMARAMP {\n    WORD                red  [256];\n    WORD                green[256];\n    WORD                blue [256];\n} D3DGAMMARAMP;\n\ntypedef struct _D3DINDEXBUFFER_DESC {\n    D3DFORMAT           Format;\n    D3DRESOURCETYPE     Type;\n    DWORD               Usage;\n    D3DPOOL             Pool;\n    UINT                Size;\n} D3DINDEXBUFFER_DESC;\n\n#ifndef D3DVECTOR_DEFINED\ntypedef struct _D3DVECTOR {\n    float x;\n    float y;\n    float z;\n} D3DVECTOR;\n#define D3DVECTOR_DEFINED\n#endif\n\ntypedef struct _D3DLIGHT9 {\n    D3DLIGHTTYPE    Type;\n    D3DCOLORVALUE   Diffuse;\n    D3DCOLORVALUE   Specular;\n    D3DCOLORVALUE   Ambient;\n    D3DVECTOR       Position;\n    D3DVECTOR       Direction;\n    float           Range;\n    float           Falloff;\n    float           Attenuation0;\n    float           Attenuation1;\n    float           Attenuation2;\n    float           Theta;\n    float           Phi;\n} D3DLIGHT9;\n\ntypedef struct _D3DLINEPATTERN {\n    WORD    wRepeatFactor;\n    WORD    wLinePattern;\n} D3DLINEPATTERN;\n\ntypedef struct _D3DLOCKED_BOX {\n    INT                 RowPitch;\n    INT                 SlicePitch;\n    void*               pBits;\n} D3DLOCKED_BOX;\n\ntypedef struct _D3DLOCKED_RECT {\n    INT                 Pitch;\n    void*               pBits;\n} D3DLOCKED_RECT;\n\ntypedef struct _D3DMATERIAL9 {\n    D3DCOLORVALUE   Diffuse;\n    D3DCOLORVALUE   Ambient;\n    D3DCOLORVALUE   Specular;\n    D3DCOLORVALUE   Emissive;\n    float           Power;\n} D3DMATERIAL9;\n\n#ifndef D3DMATRIX_DEFINED\ntypedef struct _D3DMATRIX {\n    union {\n        struct {\n            float        _11, _12, _13, _14;\n            float        _21, _22, _23, _24;\n            float        _31, _32, _33, _34;\n            float        _41, _42, _43, _44;\n        } DUMMYSTRUCTNAME;\n        float m[4][4];\n    } DUMMYUNIONNAME;\n} D3DMATRIX;\n#define D3DMATRIX_DEFINED\n#endif\n\ntypedef struct _D3DPRESENT_PARAMETERS_ {\n    UINT                    BackBufferWidth;\n    UINT                    BackBufferHeight;\n    D3DFORMAT               BackBufferFormat;\n    UINT                    BackBufferCount;\n\n    D3DMULTISAMPLE_TYPE     MultiSampleType;\n    DWORD                   MultiSampleQuality;\n\n    D3DSWAPEFFECT           SwapEffect;\n    HWND                    hDeviceWindow;\n    BOOL                    Windowed;\n    BOOL                    EnableAutoDepthStencil;\n    D3DFORMAT               AutoDepthStencilFormat;\n    DWORD                   Flags;\n\n    UINT                    FullScreen_RefreshRateInHz;\n    UINT                    PresentationInterval;\n\n} D3DPRESENT_PARAMETERS;\n\ntypedef struct _D3DRANGE {\n    UINT                Offset;\n    UINT                Size;\n} D3DRANGE;\n\ntypedef struct _D3DRASTER_STATUS {\n    BOOL            InVBlank;\n    UINT            ScanLine;\n} D3DRASTER_STATUS;\n\n#ifndef D3DRECT_DEFINED\ntypedef struct _D3DRECT {\n    LONG x1;\n    LONG y1;\n    LONG x2;\n    LONG y2;\n} D3DRECT;\n#define D3DRECT_DEFINED\n#endif\n\ntypedef struct _D3DRECTPATCH_INFO {\n    UINT                StartVertexOffsetWidth;\n    UINT                StartVertexOffsetHeight;\n    UINT                Width;\n    UINT                Height;\n    UINT                Stride;\n    D3DBASISTYPE        Basis;\n    D3DDEGREETYPE       Degree;\n} D3DRECTPATCH_INFO;\n\ntypedef struct _D3DSURFACE_DESC {\n    D3DFORMAT           Format;\n    D3DRESOURCETYPE     Type;\n    DWORD               Usage;\n    D3DPOOL             Pool;\n    D3DMULTISAMPLE_TYPE MultiSampleType;\n    DWORD               MultiSampleQuality;\n    UINT                Width;\n    UINT                Height;\n} D3DSURFACE_DESC;\n\ntypedef struct _D3DTRIPATCH_INFO {\n    UINT                StartVertexOffset;\n    UINT                NumVertices;\n    D3DBASISTYPE        Basis;\n    D3DDEGREETYPE       Degree;\n} D3DTRIPATCH_INFO;\n\ntypedef struct _D3DVERTEXBUFFER_DESC {\n    D3DFORMAT           Format;\n    D3DRESOURCETYPE     Type;\n    DWORD               Usage;\n    D3DPOOL             Pool;\n    UINT                Size;\n    DWORD               FVF;\n} D3DVERTEXBUFFER_DESC;\n\ntypedef struct _D3DVIEWPORT9 {\n    DWORD       X;\n    DWORD       Y;\n    DWORD       Width;\n    DWORD       Height;\n    float       MinZ;\n    float       MaxZ;\n} D3DVIEWPORT9;\n\ntypedef struct _D3DVOLUME_DESC {\n    D3DFORMAT           Format;\n    D3DRESOURCETYPE     Type;\n    DWORD               Usage;\n    D3DPOOL             Pool;\n\n    UINT                Width;\n    UINT                Height;\n    UINT                Depth;\n} D3DVOLUME_DESC;\n\n/* Parts added with d3d9ex */\n#if !defined(D3D_DISABLE_9EX)\ntypedef enum D3DSCANLINEORDERING\n{\n    D3DSCANLINEORDERING_UNKNOWN,\n    D3DSCANLINEORDERING_PROGRESSIVE,\n    D3DSCANLINEORDERING_INTERLACED,\n} D3DSCANLINEORDERING;\n\n\ntypedef struct D3DDISPLAYMODEFILTER\n{\n    UINT                Size;\n    D3DFORMAT           Format;\n    D3DSCANLINEORDERING ScanLineOrdering;\n} D3DDISPLAYMODEFILTER;\n\ntypedef struct D3DDISPLAYMODEEX\n{\n    UINT                Size;\n    UINT                Width;\n    UINT                Height;\n    UINT                RefreshRate;\n    D3DFORMAT           Format;\n    D3DSCANLINEORDERING ScanLineOrdering;\n} D3DDISPLAYMODEEX;\n\ntypedef enum D3DDISPLAYROTATION\n{\n    D3DDISPLAYROTATION_IDENTITY = 1,\n    D3DDISPLAYROTATION_90,\n    D3DDISPLAYROTATION_180,\n    D3DDISPLAYROTATION_270\n} D3DDISPLAYROTATION;\n\ntypedef struct _D3DMEMORYPRESSURE\n{\n    UINT64 BytesEvictedFromProcess;\n    UINT64 SizeOfInefficientAllocation;\n    DWORD  LevelOfEfficiency;\n} D3DMEMORYPRESSURE;\n\ntypedef enum _D3DCOMPOSERECTSOP{\n    D3DCOMPOSERECTS_COPY        = 1,\n    D3DCOMPOSERECTS_OR,\n    D3DCOMPOSERECTS_AND,\n    D3DCOMPOSERECTS_NEG,\n    D3DCOMPOSERECTS_FORCE_DWORD = 0x7fffffff\n} D3DCOMPOSERECTSOP;\n\ntypedef struct _D3DPRESENTSTATS\n{\n    UINT          PresentCount;\n    UINT          PresentRefreshCount;\n    UINT          SyncRefreshCount;\n    LARGE_INTEGER SyncQPCTime;\n    LARGE_INTEGER SyncGPUTime;\n} D3DPRESENTSTATS;\n\n#endif /* D3D_DISABLE_9EX */\n\ntypedef enum _D3DSHADER_COMPARISON\n{\n    D3DSPC_RESERVED0 = 0,\n    D3DSPC_GT,\n    D3DSPC_EQ,\n    D3DSPC_GE,\n    D3DSPC_LT,\n    D3DSPC_NE,\n    D3DSPC_LE,\n    D3DSPC_RESERVED1,\n} D3DSHADER_COMPARISON;\n\n#ifdef __i386__\n#include <poppack.h>\n#endif\n\n#endif /* __WINE_D3D9TYPES_H */\n"
  },
  {
    "path": "wine/windows/d3dcaps.h",
    "content": "/*\n * Copyright (C) 2000 Peter Hunnisett\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_D3DCAPS_H\n#define __WINE_D3DCAPS_H\n\n#include <ddraw.h>\n\n#ifdef __i386__\n#include <pshpack4.h>\n#endif\n\ntypedef struct _D3DTRANSFORMCAPS {\n\tDWORD dwSize;\n\tDWORD dwCaps;\n} D3DTRANSFORMCAPS, *LPD3DTRANSFORMCAPS;\n\n#define D3DTRANSFORMCAPS_CLIP           __MSABI_LONG(0x00000001)\n\ntypedef struct _D3DLIGHTINGCAPS {\n\tDWORD dwSize;\n\tDWORD dwCaps;\n\tDWORD dwLightingModel;\n\tDWORD dwNumLights;\n} D3DLIGHTINGCAPS, *LPD3DLIGHTINGCAPS;\n\n#define D3DLIGHTINGMODEL_RGB            0x00000001\n#define D3DLIGHTINGMODEL_MONO           0x00000002\n\n#define D3DLIGHTCAPS_POINT              0x00000001\n#define D3DLIGHTCAPS_SPOT               0x00000002\n#define D3DLIGHTCAPS_DIRECTIONAL        0x00000004\n#define D3DLIGHTCAPS_PARALLELPOINT      0x00000008\n#define D3DLIGHTCAPS_GLSPOT             0x00000010\n\ntypedef struct _D3dPrimCaps {\n    DWORD dwSize;\n    DWORD dwMiscCaps;\n    DWORD dwRasterCaps;\n    DWORD dwZCmpCaps;\n    DWORD dwSrcBlendCaps;\n    DWORD dwDestBlendCaps;\n    DWORD dwAlphaCmpCaps;\n    DWORD dwShadeCaps;\n    DWORD dwTextureCaps;\n    DWORD dwTextureFilterCaps;\n    DWORD dwTextureBlendCaps;\n    DWORD dwTextureAddressCaps;\n    DWORD dwStippleWidth;\n    DWORD dwStippleHeight;\n} D3DPRIMCAPS, *LPD3DPRIMCAPS;\n\n#define D3DPMISCCAPS_MASKPLANES         0x00000001\n#define D3DPMISCCAPS_MASKZ              0x00000002\n#define D3DPMISCCAPS_LINEPATTERNREP     0x00000004\n#define D3DPMISCCAPS_CONFORMANT         0x00000008\n#define D3DPMISCCAPS_CULLNONE           0x00000010\n#define D3DPMISCCAPS_CULLCW             0x00000020\n#define D3DPMISCCAPS_CULLCCW            0x00000040\n\n#define D3DPRASTERCAPS_DITHER                     0x00000001\n#define D3DPRASTERCAPS_ROP2                       0x00000002\n#define D3DPRASTERCAPS_XOR                        0x00000004\n#define D3DPRASTERCAPS_PAT                        0x00000008\n#define D3DPRASTERCAPS_ZTEST                      0x00000010\n#define D3DPRASTERCAPS_SUBPIXEL                   0x00000020\n#define D3DPRASTERCAPS_SUBPIXELX                  0x00000040\n#define D3DPRASTERCAPS_FOGVERTEX                  0x00000080\n#define D3DPRASTERCAPS_FOGTABLE                   0x00000100\n#define D3DPRASTERCAPS_STIPPLE                    0x00000200\n#define D3DPRASTERCAPS_ANTIALIASSORTDEPENDENT     0x00000400\n#define D3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT   0x00000800\n#define D3DPRASTERCAPS_ANTIALIASEDGES             0x00001000\n#define D3DPRASTERCAPS_MIPMAPLODBIAS              0x00002000\n#define D3DPRASTERCAPS_ZBIAS                      0x00004000\n#define D3DPRASTERCAPS_ZBUFFERLESSHSR             0x00008000\n#define D3DPRASTERCAPS_FOGRANGE                   0x00010000\n#define D3DPRASTERCAPS_ANISOTROPY                 0x00020000\n#define D3DPRASTERCAPS_WBUFFER                    0x00040000\n#define D3DPRASTERCAPS_TRANSLUCENTSORTINDEPENDENT 0x00080000\n#define D3DPRASTERCAPS_WFOG                       0x00100000\n#define D3DPRASTERCAPS_ZFOG                       0x00200000\n\n#define D3DPCMPCAPS_NEVER               0x00000001\n#define D3DPCMPCAPS_LESS                0x00000002\n#define D3DPCMPCAPS_EQUAL               0x00000004\n#define D3DPCMPCAPS_LESSEQUAL           0x00000008\n#define D3DPCMPCAPS_GREATER             0x00000010\n#define D3DPCMPCAPS_NOTEQUAL            0x00000020\n#define D3DPCMPCAPS_GREATEREQUAL        0x00000040\n#define D3DPCMPCAPS_ALWAYS              0x00000080\n\n#define D3DPBLENDCAPS_ZERO              0x00000001\n#define D3DPBLENDCAPS_ONE               0x00000002\n#define D3DPBLENDCAPS_SRCCOLOR          0x00000004\n#define D3DPBLENDCAPS_INVSRCCOLOR       0x00000008\n#define D3DPBLENDCAPS_SRCALPHA          0x00000010\n#define D3DPBLENDCAPS_INVSRCALPHA       0x00000020\n#define D3DPBLENDCAPS_DESTALPHA         0x00000040\n#define D3DPBLENDCAPS_INVDESTALPHA      0x00000080\n#define D3DPBLENDCAPS_DESTCOLOR         0x00000100\n#define D3DPBLENDCAPS_INVDESTCOLOR      0x00000200\n#define D3DPBLENDCAPS_SRCALPHASAT       0x00000400\n#define D3DPBLENDCAPS_BOTHSRCALPHA      0x00000800\n#define D3DPBLENDCAPS_BOTHINVSRCALPHA   0x00001000\n\n#define D3DPSHADECAPS_COLORFLATMONO     0x00000001\n#define D3DPSHADECAPS_COLORFLATRGB      0x00000002\n#define D3DPSHADECAPS_COLORGOURAUDMONO  0x00000004\n#define D3DPSHADECAPS_COLORGOURAUDRGB   0x00000008\n#define D3DPSHADECAPS_COLORPHONGMONO    0x00000010\n#define D3DPSHADECAPS_COLORPHONGRGB     0x00000020\n\n#define D3DPSHADECAPS_SPECULARFLATMONO    0x00000040\n#define D3DPSHADECAPS_SPECULARFLATRGB     0x00000080\n#define D3DPSHADECAPS_SPECULARGOURAUDMONO 0x00000100\n#define D3DPSHADECAPS_SPECULARGOURAUDRGB  0x00000200\n#define D3DPSHADECAPS_SPECULARPHONGMONO   0x00000400\n#define D3DPSHADECAPS_SPECULARPHONGRGB    0x00000800\n\n#define D3DPSHADECAPS_ALPHAFLATBLEND       0x00001000\n#define D3DPSHADECAPS_ALPHAFLATSTIPPLED    0x00002000\n#define D3DPSHADECAPS_ALPHAGOURAUDBLEND    0x00004000\n#define D3DPSHADECAPS_ALPHAGOURAUDSTIPPLED 0x00008000\n#define D3DPSHADECAPS_ALPHAPHONGBLEND      0x00010000\n#define D3DPSHADECAPS_ALPHAPHONGSTIPPLED   0x00020000\n\n#define D3DPSHADECAPS_FOGFLAT           0x00040000\n#define D3DPSHADECAPS_FOGGOURAUD        0x00080000\n#define D3DPSHADECAPS_FOGPHONG          0x00100000\n\n#define D3DPTEXTURECAPS_PERSPECTIVE              0x00000001\n#define D3DPTEXTURECAPS_POW2                     0x00000002\n#define D3DPTEXTURECAPS_ALPHA                    0x00000004\n#define D3DPTEXTURECAPS_TRANSPARENCY             0x00000008\n#define D3DPTEXTURECAPS_BORDER                   0x00000010\n#define D3DPTEXTURECAPS_SQUAREONLY               0x00000020\n#define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 0x00000040\n#define D3DPTEXTURECAPS_ALPHAPALETTE             0x00000080\n#define D3DPTEXTURECAPS_NONPOW2CONDITIONAL       __MSABI_LONG(0x00000100)\n/* yes actually 0x00000200 is unused - or at least unreleased */\n#define D3DPTEXTURECAPS_PROJECTED                0x00000400\n#define D3DPTEXTURECAPS_CUBEMAP                  0x00000800\n#define D3DPTEXTURECAPS_COLORKEYBLEND            0x00001000\n\n#define D3DPTFILTERCAPS_NEAREST           0x00000001\n#define D3DPTFILTERCAPS_LINEAR            0x00000002\n#define D3DPTFILTERCAPS_MIPNEAREST        0x00000004\n#define D3DPTFILTERCAPS_MIPLINEAR         0x00000008\n#define D3DPTFILTERCAPS_LINEARMIPNEAREST  0x00000010\n#define D3DPTFILTERCAPS_LINEARMIPLINEAR   0x00000020\n/* yes - missing numbers */\n#define D3DPTFILTERCAPS_MINFPOINT         0x00000100\n#define D3DPTFILTERCAPS_MINFLINEAR        0x00000200\n#define D3DPTFILTERCAPS_MINFANISOTROPIC   0x00000400\n/* yes - missing numbers */\n#define D3DPTFILTERCAPS_MIPFPOINT         0x00010000\n#define D3DPTFILTERCAPS_MIPFLINEAR        0x00020000\n/* yes - missing numbers */\n#define D3DPTFILTERCAPS_MAGFPOINT         0x01000000\n#define D3DPTFILTERCAPS_MAGFLINEAR        0x02000000\n#define D3DPTFILTERCAPS_MAGFANISOTROPIC   0x04000000\n#define D3DPTFILTERCAPS_MAGFAFLATCUBIC    0x08000000\n#define D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC 0x10000000\n\n#define D3DPTBLENDCAPS_DECAL            0x00000001\n#define D3DPTBLENDCAPS_MODULATE         0x00000002\n#define D3DPTBLENDCAPS_DECALALPHA       0x00000004\n#define D3DPTBLENDCAPS_MODULATEALPHA    0x00000008\n#define D3DPTBLENDCAPS_DECALMASK        0x00000010\n#define D3DPTBLENDCAPS_MODULATEMASK     0x00000020\n#define D3DPTBLENDCAPS_COPY             0x00000040\n#define D3DPTBLENDCAPS_ADD              0x00000080\n\n#define D3DPTADDRESSCAPS_WRAP           0x00000001\n#define D3DPTADDRESSCAPS_MIRROR         0x00000002\n#define D3DPTADDRESSCAPS_CLAMP          0x00000004\n#define D3DPTADDRESSCAPS_BORDER         0x00000008\n#define D3DPTADDRESSCAPS_INDEPENDENTUV  0x00000010\n\n\ntypedef struct _D3DDeviceDesc {\n        DWORD           dwSize;\n        DWORD           dwFlags;\n        D3DCOLORMODEL   dcmColorModel;\n        DWORD           dwDevCaps;\n        D3DTRANSFORMCAPS dtcTransformCaps;\n        BOOL            bClipping;\n        D3DLIGHTINGCAPS dlcLightingCaps;\n        D3DPRIMCAPS     dpcLineCaps;\n        D3DPRIMCAPS     dpcTriCaps;\n        DWORD           dwDeviceRenderBitDepth;\n        DWORD           dwDeviceZBufferBitDepth;\n        DWORD           dwMaxBufferSize;\n        DWORD           dwMaxVertexCount;\n\n        DWORD           dwMinTextureWidth,dwMinTextureHeight;\n        DWORD           dwMaxTextureWidth,dwMaxTextureHeight;\n        DWORD           dwMinStippleWidth,dwMaxStippleWidth;\n        DWORD           dwMinStippleHeight,dwMaxStippleHeight;\n\n        DWORD       dwMaxTextureRepeat;\n        DWORD       dwMaxTextureAspectRatio;\n        DWORD       dwMaxAnisotropy;\n\n        D3DVALUE    dvGuardBandLeft;\n        D3DVALUE    dvGuardBandTop;\n        D3DVALUE    dvGuardBandRight;\n        D3DVALUE    dvGuardBandBottom;\n\n        D3DVALUE    dvExtentsAdjust;\n        DWORD       dwStencilCaps;\n\n        DWORD       dwFVFCaps;\n        DWORD       dwTextureOpCaps;\n        WORD        wMaxTextureBlendStages;\n        WORD        wMaxSimultaneousTextures;\n} D3DDEVICEDESC,*LPD3DDEVICEDESC;\n#define D3DDEVICEDESCSIZE (sizeof(D3DDEVICEDESC))\n\ntypedef struct _D3DDeviceDesc7 {\n        DWORD            dwDevCaps;\n        D3DPRIMCAPS      dpcLineCaps;\n        D3DPRIMCAPS      dpcTriCaps;\n        DWORD            dwDeviceRenderBitDepth;\n        DWORD            dwDeviceZBufferBitDepth;\n\n        DWORD       dwMinTextureWidth, dwMinTextureHeight;\n        DWORD       dwMaxTextureWidth, dwMaxTextureHeight;\n\n        DWORD       dwMaxTextureRepeat;\n        DWORD       dwMaxTextureAspectRatio;\n        DWORD       dwMaxAnisotropy;\n\n        D3DVALUE    dvGuardBandLeft;\n        D3DVALUE    dvGuardBandTop;\n        D3DVALUE    dvGuardBandRight;\n        D3DVALUE    dvGuardBandBottom;\n\n        D3DVALUE    dvExtentsAdjust;\n        DWORD       dwStencilCaps;\n        DWORD       dwFVFCaps;\n        DWORD       dwTextureOpCaps;\n        WORD        wMaxTextureBlendStages;\n        WORD        wMaxSimultaneousTextures;\n\n        DWORD       dwMaxActiveLights;\n        D3DVALUE    dvMaxVertexW;\n        GUID        deviceGUID;\n\n        WORD        wMaxUserClipPlanes;\n        WORD        wMaxVertexBlendMatrices;\n\n        DWORD       dwVertexProcessingCaps;\n\n        DWORD       dwReserved1;\n        DWORD       dwReserved2;\n        DWORD       dwReserved3;\n        DWORD       dwReserved4;\n} D3DDEVICEDESC7, *LPD3DDEVICEDESC7;\n#define D3DDEVICEDESC7SIZE (sizeof(D3DDEVICEDESC7))\n\n#define D3DDD_COLORMODEL                0x00000001\n#define D3DDD_DEVCAPS                   0x00000002\n#define D3DDD_TRANSFORMCAPS             0x00000004\n#define D3DDD_LIGHTINGCAPS              0x00000008\n#define D3DDD_BCLIPPING                 0x00000010\n#define D3DDD_LINECAPS                  0x00000020\n#define D3DDD_TRICAPS                   0x00000040\n#define D3DDD_DEVICERENDERBITDEPTH      0x00000080\n#define D3DDD_DEVICEZBUFFERBITDEPTH     0x00000100\n#define D3DDD_MAXBUFFERSIZE             0x00000200\n#define D3DDD_MAXVERTEXCOUNT            0x00000400\n\n#define D3DDEVCAPS_FLOATTLVERTEX           0x00000001\n#define D3DDEVCAPS_SORTINCREASINGZ         0x00000002\n#define D3DDEVCAPS_SORTDECREASINGZ         0X00000004\n#define D3DDEVCAPS_SORTEXACT               0x00000008\n#define D3DDEVCAPS_EXECUTESYSTEMMEMORY     0x00000010\n#define D3DDEVCAPS_EXECUTEVIDEOMEMORY      0x00000020\n#define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY    0x00000040\n#define D3DDEVCAPS_TLVERTEXVIDEOMEMORY     0x00000080\n#define D3DDEVCAPS_TEXTURESYSTEMMEMORY     0x00000100\n#define D3DDEVCAPS_TEXTUREVIDEOMEMORY      0x00000200\n#define D3DDEVCAPS_DRAWPRIMTLVERTEX        0x00000400\n#define D3DDEVCAPS_CANRENDERAFTERFLIP      0x00000800\n#define D3DDEVCAPS_TEXTURENONLOCALVIDMEM   0x00001000\n#define D3DDEVCAPS_DRAWPRIMITIVES2         0x00002000\n#define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x00004000\n#define D3DDEVCAPS_DRAWPRIMITIVES2EX       0x00008000\n#define D3DDEVCAPS_HWTRANSFORMANDLIGHT     0x00010000\n#define D3DDEVCAPS_CANBLTSYSTONONLOCAL     0x00020000\n#define D3DDEVCAPS_HWRASTERIZATION         0x00080000\n\n#define D3DSTENCILCAPS_KEEP     0x00000001\n#define D3DSTENCILCAPS_ZERO     0x00000002\n#define D3DSTENCILCAPS_REPLACE  0x00000004\n#define D3DSTENCILCAPS_INCRSAT  0x00000008\n#define D3DSTENCILCAPS_DECRSAT  0x00000010\n#define D3DSTENCILCAPS_INVERT   0x00000020\n#define D3DSTENCILCAPS_INCR     0x00000040\n#define D3DSTENCILCAPS_DECR     0x00000080\n\n#define D3DTEXOPCAPS_DISABLE                    0x00000001\n#define D3DTEXOPCAPS_SELECTARG1                 0x00000002\n#define D3DTEXOPCAPS_SELECTARG2                 0x00000004\n#define D3DTEXOPCAPS_MODULATE                   0x00000008\n#define D3DTEXOPCAPS_MODULATE2X                 0x00000010\n#define D3DTEXOPCAPS_MODULATE4X                 0x00000020\n#define D3DTEXOPCAPS_ADD                        0x00000040\n#define D3DTEXOPCAPS_ADDSIGNED                  0x00000080\n#define D3DTEXOPCAPS_ADDSIGNED2X                0x00000100\n#define D3DTEXOPCAPS_SUBTRACT                   0x00000200\n#define D3DTEXOPCAPS_ADDSMOOTH                  0x00000400\n#define D3DTEXOPCAPS_BLENDDIFFUSEALPHA          0x00000800\n#define D3DTEXOPCAPS_BLENDTEXTUREALPHA          0x00001000\n#define D3DTEXOPCAPS_BLENDFACTORALPHA           0x00002000\n#define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM        0x00004000\n#define D3DTEXOPCAPS_BLENDCURRENTALPHA          0x00008000\n#define D3DTEXOPCAPS_PREMODULATE                0x00010000\n#define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR     0x00020000\n#define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA     0x00040000\n#define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR  0x00080000\n#define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA  0x00100000\n#define D3DTEXOPCAPS_BUMPENVMAP                 0x00200000\n#define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE        0x00400000\n#define D3DTEXOPCAPS_DOTPRODUCT3                0x00800000\n\n#define D3DFVFCAPS_TEXCOORDCOUNTMASK    0x0000FFFF\n#define D3DFVFCAPS_DONOTSTRIPELEMENTS   0x00080000\n\n#define D3DVTXPCAPS_TEXGEN              0x00000001\n#define D3DVTXPCAPS_MATERIALSOURCE7     0x00000002\n#define D3DVTXPCAPS_VERTEXFOG           0x00000004\n#define D3DVTXPCAPS_DIRECTIONALLIGHTS   0x00000008\n#define D3DVTXPCAPS_POSITIONALLIGHTS    0x00000010\n#define D3DVTXPCAPS_LOCALVIEWER         0x00000020\n\ntypedef HRESULT (CALLBACK *LPD3DENUMDEVICESCALLBACK)(GUID *guid, char *description, char *name,\n        D3DDEVICEDESC *hal_desc, D3DDEVICEDESC *hel_desc, void *ctx);\ntypedef HRESULT (CALLBACK *LPD3DENUMDEVICESCALLBACK7)(char *description, char *name, D3DDEVICEDESC7 *desc, void *ctx);\n\n#define D3DFDS_COLORMODEL          0x00000001\n#define D3DFDS_GUID                0x00000002\n#define D3DFDS_HARDWARE            0x00000004\n#define D3DFDS_TRIANGLES           0x00000008\n#define D3DFDS_LINES               0x00000010\n#define D3DFDS_MISCCAPS            0x00000020\n#define D3DFDS_RASTERCAPS          0x00000040\n#define D3DFDS_ZCMPCAPS            0x00000080\n#define D3DFDS_ALPHACMPCAPS        0x00000100\n#define D3DFDS_SRCBLENDCAPS        0x00000200\n#define D3DFDS_DSTBLENDCAPS        0x00000400\n#define D3DFDS_SHADECAPS           0x00000800\n#define D3DFDS_TEXTURECAPS         0x00001000\n#define D3DFDS_TEXTUREFILTERCAPS   0x00002000\n#define D3DFDS_TEXTUREBLENDCAPS    0x00004000\n#define D3DFDS_TEXTUREADDRESSCAPS  0x00008000\n\ntypedef struct _D3DFINDDEVICESEARCH {\n    DWORD               dwSize;\n    DWORD               dwFlags;\n    BOOL                bHardware;\n    D3DCOLORMODEL       dcmColorModel;\n    GUID                guid;\n    DWORD               dwCaps;\n    D3DPRIMCAPS         dpcPrimCaps;\n} D3DFINDDEVICESEARCH,*LPD3DFINDDEVICESEARCH;\n\ntypedef struct _D3DFINDDEVICERESULT {\n    DWORD               dwSize;\n    GUID                guid;\n    D3DDEVICEDESC       ddHwDesc;\n    D3DDEVICEDESC       ddSwDesc;\n} D3DFINDDEVICERESULT,*LPD3DFINDDEVICERESULT;\n\ntypedef struct _D3DExecuteBufferDesc {\n  DWORD  dwSize;\n  DWORD  dwFlags;\n  DWORD  dwCaps;\n  DWORD  dwBufferSize;\n  void *lpData;\n} D3DEXECUTEBUFFERDESC, *LPD3DEXECUTEBUFFERDESC;\n\n#define D3DDEB_BUFSIZE          0x00000001\n#define D3DDEB_CAPS             0x00000002\n#define D3DDEB_LPDATA           0x00000004\n\n#define D3DDEBCAPS_SYSTEMMEMORY 0x00000001\n#define D3DDEBCAPS_VIDEOMEMORY  0x00000002\n#define D3DDEBCAPS_MEM          (D3DDEBCAPS_SYSTEMMEMORY|D3DDEBCAPS_VIDEOMEMORY) /* = 0x3 */\n\ntypedef struct _D3DDEVINFO_TEXTUREMANAGER {\n\tBOOL    bThrashing;\n\tDWORD   dwApproxBytesDownloaded;\n\tDWORD   dwNumEvicts;\n\tDWORD   dwNumVidCreates;\n\tDWORD   dwNumTexturesUsed;\n\tDWORD   dwNumUsedTexInVid;\n\tDWORD   dwWorkingSet;\n\tDWORD   dwWorkingSetBytes;\n\tDWORD   dwTotalManaged;\n\tDWORD   dwTotalBytes;\n\tDWORD   dwLastPri;\n} D3DDEVINFO_TEXTUREMANAGER, *LPD3DDEVINFO_TEXTUREMANAGER;\n\ntypedef struct _D3DDEVINFO_TEXTURING {\n\tDWORD   dwNumLoads;\n\tDWORD   dwApproxBytesLoaded;\n\tDWORD   dwNumPreLoads;\n\tDWORD   dwNumSet;\n\tDWORD   dwNumCreates;\n\tDWORD   dwNumDestroys;\n\tDWORD   dwNumSetPriorities;\n\tDWORD   dwNumSetLODs;\n\tDWORD   dwNumLocks;\n\tDWORD   dwNumGetDCs;\n} D3DDEVINFO_TEXTURING, *LPD3DDEVINFO_TEXTURING;\n\n#ifdef __i386__\n#include <poppack.h>\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/d3dcommon.idl",
    "content": "/*\n * Copyright 2010 Matteo Bruni for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\n\ntypedef struct _D3D_SHADER_MACRO\n{\n    const char *Name;\n    const char *Definition;\n} D3D_SHADER_MACRO;\n\ntypedef struct _D3D_SHADER_MACRO* LPD3D_SHADER_MACRO;\n\n[\n    object,\n    local,\n    uuid(8ba5fb08-5195-40e2-ac58-0d989c3a0102)\n]\ninterface ID3D10Blob : IUnknown\n{\n    void *GetBufferPointer();\n    SIZE_T GetBufferSize();\n}\n\ntypedef ID3D10Blob* LPD3D10BLOB;\ntypedef ID3D10Blob ID3DBlob;\ntypedef ID3DBlob* LPD3DBLOB;\ncpp_quote(\"#define IID_ID3DBlob IID_ID3D10Blob\")\n\ntypedef enum _D3D_INCLUDE_TYPE\n{\n    D3D_INCLUDE_LOCAL = 0,\n    D3D_INCLUDE_SYSTEM,\n    D3D10_INCLUDE_LOCAL = D3D_INCLUDE_LOCAL,\n    D3D10_INCLUDE_SYSTEM = D3D_INCLUDE_SYSTEM,\n    D3D_INCLUDE_FORCE_DWORD = 0x7fffffff\n} D3D_INCLUDE_TYPE;\n\n[\n    object,\n    local,\n]\ninterface ID3DInclude\n{\n    HRESULT Open(D3D_INCLUDE_TYPE include_type,\n                 const char *filename,\n                 const void *parent_data,\n                 const void **data,\n                 UINT *bytes);\n    HRESULT Close(const void *data);\n}\n\ntypedef ID3DInclude* LPD3DINCLUDE;\n\ntypedef enum D3D_DRIVER_TYPE\n{\n    D3D_DRIVER_TYPE_UNKNOWN,\n    D3D_DRIVER_TYPE_HARDWARE,\n    D3D_DRIVER_TYPE_REFERENCE,\n    D3D_DRIVER_TYPE_NULL,\n    D3D_DRIVER_TYPE_SOFTWARE,\n    D3D_DRIVER_TYPE_WARP,\n} D3D_DRIVER_TYPE;\n\ntypedef enum D3D_FEATURE_LEVEL\n{\n    D3D_FEATURE_LEVEL_9_1 = 0x9100,\n    D3D_FEATURE_LEVEL_9_2 = 0x9200,\n    D3D_FEATURE_LEVEL_9_3 = 0x9300,\n    D3D_FEATURE_LEVEL_10_0 = 0xa000,\n    D3D_FEATURE_LEVEL_10_1 = 0xa100,\n    D3D_FEATURE_LEVEL_11_0 = 0xb000,\n    D3D_FEATURE_LEVEL_11_1 = 0xb100,\n    D3D_FEATURE_LEVEL_12_0 = 0xc000,\n    D3D_FEATURE_LEVEL_12_1 = 0xc100,\n} D3D_FEATURE_LEVEL;\n\ncpp_quote(\"#define D3D_FL9_1_REQ_TEXTURE1D_U_DIMENSION          2048\")\ncpp_quote(\"#define D3D_FL9_3_REQ_TEXTURE1D_U_DIMENSION          4096\")\ncpp_quote(\"#define D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION     2048\")\ncpp_quote(\"#define D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION     4096\")\ncpp_quote(\"#define D3D_FL9_1_REQ_TEXTURECUBE_DIMENSION          512\")\ncpp_quote(\"#define D3D_FL9_3_REQ_TEXTURECUBE_DIMENSION          4096\")\ncpp_quote(\"#define D3D_FL9_1_REQ_TEXTURE3D_U_V_OR_W_DIMENSION   256\")\ncpp_quote(\"#define D3D_FL9_1_DEFAULT_MAX_ANISOTROPY             2\")\ncpp_quote(\"#define D3D_FL9_1_IA_PRIMITIVE_MAX_COUNT             65535\")\ncpp_quote(\"#define D3D_FL9_2_IA_PRIMITIVE_MAX_COUNT             1048575\")\ncpp_quote(\"#define D3D_FL9_1_SIMULTANEOUS_RENDER_TARGET_COUNT   1\")\ncpp_quote(\"#define D3D_FL9_3_SIMULTANEOUS_RENDER_TARGET_COUNT   4\")\ncpp_quote(\"#define D3D_FL9_1_MAX_TEXTURE_REPEAT                 128\")\ncpp_quote(\"#define D3D_FL9_2_MAX_TEXTURE_REPEAT                 2048\")\ncpp_quote(\"#define D3D_FL9_3_MAX_TEXTURE_REPEAT                 8192\")\n\ntypedef enum _D3D_SHADER_VARIABLE_CLASS\n{\n    D3D_SVC_SCALAR,\n    D3D_SVC_VECTOR,\n    D3D_SVC_MATRIX_ROWS,\n    D3D_SVC_MATRIX_COLUMNS,\n    D3D_SVC_OBJECT,\n    D3D_SVC_STRUCT,\n    D3D_SVC_INTERFACE_CLASS,\n    D3D_SVC_INTERFACE_POINTER,\n    D3D10_SVC_SCALAR = 0,\n    D3D10_SVC_VECTOR,\n    D3D10_SVC_MATRIX_ROWS,\n    D3D10_SVC_MATRIX_COLUMNS,\n    D3D10_SVC_OBJECT,\n    D3D10_SVC_STRUCT,\n    D3D11_SVC_INTERFACE_CLASS,\n    D3D11_SVC_INTERFACE_POINTER,\n    D3D_SVC_FORCE_DWORD = 0x7fffffff,\n} D3D_SHADER_VARIABLE_CLASS;\n\ntypedef enum _D3D_SHADER_VARIABLE_FLAGS\n{\n    D3D_SVF_USERPACKED            = 0x01,\n    D3D_SVF_USED                  = 0x02,\n    D3D_SVF_INTERFACE_POINTER     = 0x04,\n    D3D_SVF_INTERFACE_PARAMETER   = 0x08,\n    D3D10_SVF_USERPACKED          = D3D_SVF_USERPACKED,\n    D3D10_SVF_USED                = D3D_SVF_USED,\n    D3D11_SVF_INTERFACE_POINTER   = D3D_SVF_INTERFACE_POINTER,\n    D3D11_SVF_INTERFACE_PARAMETER = D3D_SVF_INTERFACE_PARAMETER,\n    D3D_SVF_FORCE_DWORD           = 0x7fffffff\n} D3D_SHADER_VARIABLE_FLAGS;\n\ntypedef enum _D3D_SHADER_VARIABLE_TYPE\n{\n    D3D_SVT_VOID,\n    D3D_SVT_BOOL,\n    D3D_SVT_INT,\n    D3D_SVT_FLOAT,\n    D3D_SVT_STRING,\n    D3D_SVT_TEXTURE,\n    D3D_SVT_TEXTURE1D,\n    D3D_SVT_TEXTURE2D,\n    D3D_SVT_TEXTURE3D,\n    D3D_SVT_TEXTURECUBE,\n    D3D_SVT_SAMPLER,\n    D3D_SVT_SAMPLER1D,\n    D3D_SVT_SAMPLER2D,\n    D3D_SVT_SAMPLER3D,\n    D3D_SVT_SAMPLERCUBE,\n    D3D_SVT_PIXELSHADER,\n    D3D_SVT_VERTEXSHADER,\n    D3D_SVT_PIXELFRAGMENT,\n    D3D_SVT_VERTEXFRAGMENT,\n    D3D_SVT_UINT,\n    D3D_SVT_UINT8,\n    D3D_SVT_GEOMETRYSHADER,\n    D3D_SVT_RASTERIZER,\n    D3D_SVT_DEPTHSTENCIL,\n    D3D_SVT_BLEND,\n    D3D_SVT_BUFFER,\n    D3D_SVT_CBUFFER,\n    D3D_SVT_TBUFFER,\n    D3D_SVT_TEXTURE1DARRAY,\n    D3D_SVT_TEXTURE2DARRAY,\n    D3D_SVT_RENDERTARGETVIEW,\n    D3D_SVT_DEPTHSTENCILVIEW,\n    D3D_SVT_TEXTURE2DMS,\n    D3D_SVT_TEXTURE2DMSARRAY,\n    D3D_SVT_TEXTURECUBEARRAY,\n    D3D_SVT_HULLSHADER,\n    D3D_SVT_DOMAINSHADER,\n    D3D_SVT_INTERFACE_POINTER,\n    D3D_SVT_COMPUTESHADER,\n    D3D_SVT_DOUBLE,\n    D3D_SVT_RWTEXTURE1D,\n    D3D_SVT_RWTEXTURE1DARRAY,\n    D3D_SVT_RWTEXTURE2D,\n    D3D_SVT_RWTEXTURE2DARRAY,\n    D3D_SVT_RWTEXTURE3D,\n    D3D_SVT_RWBUFFER,\n    D3D_SVT_BYTEADDRESS_BUFFER,\n    D3D_SVT_RWBYTEADDRESS_BUFFER,\n    D3D_SVT_STRUCTURED_BUFFER,\n    D3D_SVT_RWSTRUCTURED_BUFFER,\n    D3D_SVT_APPEND_STRUCTURED_BUFFER,\n    D3D_SVT_CONSUME_STRUCTURED_BUFFER,\n    D3D10_SVT_VOID = 0,\n    D3D10_SVT_BOOL,\n    D3D10_SVT_INT,\n    D3D10_SVT_FLOAT,\n    D3D10_SVT_STRING,\n    D3D10_SVT_TEXTURE,\n    D3D10_SVT_TEXTURE1D,\n    D3D10_SVT_TEXTURE2D,\n    D3D10_SVT_TEXTURE3D,\n    D3D10_SVT_TEXTURECUBE,\n    D3D10_SVT_SAMPLER,\n    D3D10_SVT_SAMPLER1D,\n    D3D10_SVT_SAMPLER2D,\n    D3D10_SVT_SAMPLER3D,\n    D3D10_SVT_SAMPLERCUBE,\n    D3D10_SVT_PIXELSHADER,\n    D3D10_SVT_VERTEXSHADER,\n    D3D10_SVT_PIXELFRAGMENT,\n    D3D10_SVT_VERTEXFRAGMENT,\n    D3D10_SVT_UINT,\n    D3D10_SVT_UINT8,\n    D3D10_SVT_GEOMETRYSHADER,\n    D3D10_SVT_RASTERIZER,\n    D3D10_SVT_DEPTHSTENCIL,\n    D3D10_SVT_BLEND,\n    D3D10_SVT_BUFFER,\n    D3D10_SVT_CBUFFER,\n    D3D10_SVT_TBUFFER,\n    D3D10_SVT_TEXTURE1DARRAY,\n    D3D10_SVT_TEXTURE2DARRAY,\n    D3D10_SVT_RENDERTARGETVIEW,\n    D3D10_SVT_DEPTHSTENCILVIEW,\n    D3D10_SVT_TEXTURE2DMS,\n    D3D10_SVT_TEXTURE2DMSARRAY,\n    D3D10_SVT_TEXTURECUBEARRAY,\n    D3D11_SVT_HULLSHADER,\n    D3D11_SVT_DOMAINSHADER,\n    D3D11_SVT_INTERFACE_POINTER,\n    D3D11_SVT_COMPUTESHADER,\n    D3D11_SVT_DOUBLE,\n    D3D11_SVT_RWTEXTURE1D,\n    D3D11_SVT_RWTEXTURE1DARRAY,\n    D3D11_SVT_RWTEXTURE2D,\n    D3D11_SVT_RWTEXTURE2DARRAY,\n    D3D11_SVT_RWTEXTURE3D,\n    D3D11_SVT_RWBUFFER,\n    D3D11_SVT_BYTEADDRESS_BUFFER,\n    D3D11_SVT_RWBYTEADDRESS_BUFFER,\n    D3D11_SVT_STRUCTURED_BUFFER,\n    D3D11_SVT_RWSTRUCTURED_BUFFER,\n    D3D11_SVT_APPEND_STRUCTURED_BUFFER,\n    D3D11_SVT_CONSUME_STRUCTURED_BUFFER,\n    D3D_SVT_FORCE_DWORD = 0x7fffffff,\n} D3D_SHADER_VARIABLE_TYPE;\n\ntypedef enum _D3D_SHADER_INPUT_FLAGS\n{\n    D3D_SIF_USERPACKED            = 0x01,\n    D3D_SIF_COMPARISON_SAMPLER    = 0x02,\n    D3D_SIF_TEXTURE_COMPONENT_0   = 0x04,\n    D3D_SIF_TEXTURE_COMPONENT_1   = 0x08,\n    D3D_SIF_TEXTURE_COMPONENTS    = 0x0C,\n    D3D_SIF_UNUSED                = 0x10,\n    D3D10_SIF_USERPACKED          = D3D_SIF_USERPACKED,\n    D3D10_SIF_COMPARISON_SAMPLER  = D3D_SIF_COMPARISON_SAMPLER,\n    D3D10_SIF_TEXTURE_COMPONENT_0 = D3D_SIF_TEXTURE_COMPONENT_0,\n    D3D10_SIF_TEXTURE_COMPONENT_1 = D3D_SIF_TEXTURE_COMPONENT_1,\n    D3D10_SIF_TEXTURE_COMPONENTS  = D3D_SIF_TEXTURE_COMPONENTS,\n    D3D_SIF_FORCE_DWORD           = 0x7fffffff\n} D3D_SHADER_INPUT_FLAGS;\n\ntypedef enum D3D_PRIMITIVE\n{\n    D3D_PRIMITIVE_UNDEFINED,\n    D3D_PRIMITIVE_POINT,\n    D3D_PRIMITIVE_LINE,\n    D3D_PRIMITIVE_TRIANGLE,\n    D3D_PRIMITIVE_LINE_ADJ = 6,\n    D3D_PRIMITIVE_TRIANGLE_ADJ,\n    D3D_PRIMITIVE_1_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_2_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_3_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_4_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_5_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_6_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_7_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_8_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_9_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_10_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_11_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_12_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_13_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_14_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_15_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_16_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_17_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_18_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_19_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_20_CONTROL_POINT_PATCH = 28,\n    D3D_PRIMITIVE_21_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_22_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_23_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_24_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_25_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_26_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_27_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_28_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_29_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_30_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_31_CONTROL_POINT_PATCH,\n    D3D_PRIMITIVE_32_CONTROL_POINT_PATCH,\n    D3D10_PRIMITIVE_UNDEFINED = 0,\n    D3D10_PRIMITIVE_POINT,\n    D3D10_PRIMITIVE_LINE,\n    D3D10_PRIMITIVE_TRIANGLE,\n    D3D10_PRIMITIVE_LINE_ADJ = 6,\n    D3D10_PRIMITIVE_TRIANGLE_ADJ,\n    D3D11_PRIMITIVE_UNDEFINED = 0,\n    D3D11_PRIMITIVE_POINT,\n    D3D11_PRIMITIVE_LINE,\n    D3D11_PRIMITIVE_TRIANGLE,\n    D3D11_PRIMITIVE_LINE_ADJ = 6,\n    D3D11_PRIMITIVE_TRIANGLE_ADJ,\n    D3D11_PRIMITIVE_1_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_2_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_3_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_4_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_5_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_6_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_7_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_8_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_9_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_10_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_11_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_12_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_13_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_14_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_15_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_16_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_17_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_18_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_19_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_20_CONTROL_POINT_PATCH = 28,\n    D3D11_PRIMITIVE_21_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_22_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_23_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_24_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_25_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_26_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_27_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_28_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_29_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_30_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_31_CONTROL_POINT_PATCH,\n    D3D11_PRIMITIVE_32_CONTROL_POINT_PATCH,\n} D3D_PRIMITIVE;\n\ntypedef enum D3D_PRIMITIVE_TOPOLOGY\n{\n    D3D_PRIMITIVE_TOPOLOGY_UNDEFINED,\n    D3D_PRIMITIVE_TOPOLOGY_POINTLIST,\n    D3D_PRIMITIVE_TOPOLOGY_LINELIST,\n    D3D_PRIMITIVE_TOPOLOGY_LINESTRIP,\n    D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST,\n    D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP,\n    D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = 10,\n    D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ,\n    D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ,\n    D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ,\n    D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST = 33,\n    D3D_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST,\n    D3D_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST,\n    D3D10_PRIMITIVE_TOPOLOGY_UNDEFINED = 0,\n    D3D10_PRIMITIVE_TOPOLOGY_POINTLIST,\n    D3D10_PRIMITIVE_TOPOLOGY_LINELIST,\n    D3D10_PRIMITIVE_TOPOLOGY_LINESTRIP,\n    D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST,\n    D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP,\n    D3D10_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = 10,\n    D3D10_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ,\n    D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ,\n    D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ,\n    D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED = 0,\n    D3D11_PRIMITIVE_TOPOLOGY_POINTLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_LINELIST,\n    D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP,\n    D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST,\n    D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP,\n    D3D11_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = 10,\n    D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ,\n    D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ,\n    D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ,\n    D3D11_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST = 33,\n    D3D11_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST,\n    D3D11_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST,\n} D3D_PRIMITIVE_TOPOLOGY;\n\ntypedef enum D3D_TESSELLATOR_DOMAIN\n{\n    D3D_TESSELLATOR_DOMAIN_UNDEFINED,\n    D3D_TESSELLATOR_DOMAIN_ISOLINE,\n    D3D_TESSELLATOR_DOMAIN_TRI,\n    D3D_TESSELLATOR_DOMAIN_QUAD,\n    D3D11_TESSELLATOR_DOMAIN_UNDEFINED = 0,\n    D3D11_TESSELLATOR_DOMAIN_ISOLINE,\n    D3D11_TESSELLATOR_DOMAIN_TRI,\n    D3D11_TESSELLATOR_DOMAIN_QUAD,\n} D3D_TESSELLATOR_DOMAIN;\n\ntypedef enum D3D_TESSELLATOR_PARTITIONING\n{\n    D3D_TESSELLATOR_PARTITIONING_UNDEFINED,\n    D3D_TESSELLATOR_PARTITIONING_INTEGER,\n    D3D_TESSELLATOR_PARTITIONING_POW2,\n    D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD,\n    D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN,\n    D3D11_TESSELLATOR_PARTITIONING_UNDEFINED = 0,\n    D3D11_TESSELLATOR_PARTITIONING_INTEGER,\n    D3D11_TESSELLATOR_PARTITIONING_POW2,\n    D3D11_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD,\n    D3D11_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN,\n} D3D_TESSELLATOR_PARTITIONING;\n\ntypedef enum D3D_TESSELLATOR_OUTPUT_PRIMITIVE\n{\n    D3D_TESSELLATOR_OUTPUT_UNDEFINED,\n    D3D_TESSELLATOR_OUTPUT_POINT,\n    D3D_TESSELLATOR_OUTPUT_LINE,\n    D3D_TESSELLATOR_OUTPUT_TRIANGLE_CW,\n    D3D_TESSELLATOR_OUTPUT_TRIANGLE_CCW,\n    D3D11_TESSELLATOR_OUTPUT_UNDEFINED = 0,\n    D3D11_TESSELLATOR_OUTPUT_POINT,\n    D3D11_TESSELLATOR_OUTPUT_LINE,\n    D3D11_TESSELLATOR_OUTPUT_TRIANGLE_CW,\n    D3D11_TESSELLATOR_OUTPUT_TRIANGLE_CCW,\n} D3D_TESSELLATOR_OUTPUT_PRIMITIVE;\n\ntypedef enum D3D_CBUFFER_TYPE\n{\n    D3D_CT_CBUFFER,\n    D3D_CT_TBUFFER,\n    D3D_CT_INTERFACE_POINTERS,\n    D3D_CT_RESOURCE_BIND_INFO,\n    D3D10_CT_CBUFFER = 0,\n    D3D10_CT_TBUFFER,\n    D3D11_CT_CBUFFER = 0,\n    D3D11_CT_TBUFFER,\n    D3D11_CT_INTERFACE_POINTERS,\n    D3D11_CT_RESOURCE_BIND_INFO,\n} D3D_CBUFFER_TYPE;\n\ntypedef enum D3D_SRV_DIMENSION\n{\n    D3D_SRV_DIMENSION_UNKNOWN,\n    D3D_SRV_DIMENSION_BUFFER,\n    D3D_SRV_DIMENSION_TEXTURE1D,\n    D3D_SRV_DIMENSION_TEXTURE1DARRAY,\n    D3D_SRV_DIMENSION_TEXTURE2D,\n    D3D_SRV_DIMENSION_TEXTURE2DARRAY,\n    D3D_SRV_DIMENSION_TEXTURE2DMS,\n    D3D_SRV_DIMENSION_TEXTURE2DMSARRAY,\n    D3D_SRV_DIMENSION_TEXTURE3D,\n    D3D_SRV_DIMENSION_TEXTURECUBE,\n    D3D_SRV_DIMENSION_TEXTURECUBEARRAY,\n    D3D_SRV_DIMENSION_BUFFEREX,\n    D3D10_SRV_DIMENSION_UNKNOWN = 0,\n    D3D10_SRV_DIMENSION_BUFFER,\n    D3D10_SRV_DIMENSION_TEXTURE1D,\n    D3D10_SRV_DIMENSION_TEXTURE1DARRAY,\n    D3D10_SRV_DIMENSION_TEXTURE2D,\n    D3D10_SRV_DIMENSION_TEXTURE2DARRAY,\n    D3D10_SRV_DIMENSION_TEXTURE2DMS,\n    D3D10_SRV_DIMENSION_TEXTURE2DMSARRAY,\n    D3D10_SRV_DIMENSION_TEXTURE3D,\n    D3D10_SRV_DIMENSION_TEXTURECUBE,\n    D3D10_1_SRV_DIMENSION_UNKNOWN = 0,\n    D3D10_1_SRV_DIMENSION_BUFFER,\n    D3D10_1_SRV_DIMENSION_TEXTURE1D,\n    D3D10_1_SRV_DIMENSION_TEXTURE1DARRAY,\n    D3D10_1_SRV_DIMENSION_TEXTURE2D,\n    D3D10_1_SRV_DIMENSION_TEXTURE2DARRAY,\n    D3D10_1_SRV_DIMENSION_TEXTURE2DMS,\n    D3D10_1_SRV_DIMENSION_TEXTURE2DMSARRAY,\n    D3D10_1_SRV_DIMENSION_TEXTURE3D,\n    D3D10_1_SRV_DIMENSION_TEXTURECUBE,\n    D3D10_1_SRV_DIMENSION_TEXTURECUBEARRAY,\n    D3D11_SRV_DIMENSION_UNKNOWN = 0,\n    D3D11_SRV_DIMENSION_BUFFER,\n    D3D11_SRV_DIMENSION_TEXTURE1D,\n    D3D11_SRV_DIMENSION_TEXTURE1DARRAY,\n    D3D11_SRV_DIMENSION_TEXTURE2D,\n    D3D11_SRV_DIMENSION_TEXTURE2DARRAY,\n    D3D11_SRV_DIMENSION_TEXTURE2DMS,\n    D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY,\n    D3D11_SRV_DIMENSION_TEXTURE3D,\n    D3D11_SRV_DIMENSION_TEXTURECUBE,\n    D3D11_SRV_DIMENSION_TEXTURECUBEARRAY,\n    D3D11_SRV_DIMENSION_BUFFEREX,\n} D3D_SRV_DIMENSION;\n\ntypedef enum D3D_REGISTER_COMPONENT_TYPE\n{\n    D3D_REGISTER_COMPONENT_UNKNOWN,\n    D3D_REGISTER_COMPONENT_UINT32,\n    D3D_REGISTER_COMPONENT_SINT32,\n    D3D_REGISTER_COMPONENT_FLOAT32,\n    D3D10_REGISTER_COMPONENT_UNKNOWN = 0,\n    D3D10_REGISTER_COMPONENT_UINT32,\n    D3D10_REGISTER_COMPONENT_SINT32,\n    D3D10_REGISTER_COMPONENT_FLOAT32,\n} D3D_REGISTER_COMPONENT_TYPE;\n\ntypedef enum D3D_RESOURCE_RETURN_TYPE\n{\n    D3D_RETURN_TYPE_UNORM = 1,\n    D3D_RETURN_TYPE_SNORM,\n    D3D_RETURN_TYPE_SINT,\n    D3D_RETURN_TYPE_UINT,\n    D3D_RETURN_TYPE_FLOAT,\n    D3D_RETURN_TYPE_MIXED,\n    D3D_RETURN_TYPE_DOUBLE,\n    D3D_RETURN_TYPE_CONTINUED,\n    D3D10_RETURN_TYPE_UNORM = 1,\n    D3D10_RETURN_TYPE_SNORM,\n    D3D10_RETURN_TYPE_SINT,\n    D3D10_RETURN_TYPE_UINT,\n    D3D10_RETURN_TYPE_FLOAT,\n    D3D10_RETURN_TYPE_MIXED,\n    D3D11_RETURN_TYPE_UNORM = 1,\n    D3D11_RETURN_TYPE_SNORM,\n    D3D11_RETURN_TYPE_SINT,\n    D3D11_RETURN_TYPE_UINT,\n    D3D11_RETURN_TYPE_FLOAT,\n    D3D11_RETURN_TYPE_MIXED,\n    D3D11_RETURN_TYPE_DOUBLE,\n    D3D11_RETURN_TYPE_CONTINUED,\n} D3D_RESOURCE_RETURN_TYPE;\n\ntypedef enum D3D_NAME\n{\n    D3D_NAME_UNDEFINED,\n    D3D_NAME_POSITION,\n    D3D_NAME_CLIP_DISTANCE,\n    D3D_NAME_CULL_DISTANCE,\n    D3D_NAME_RENDER_TARGET_ARRAY_INDEX,\n    D3D_NAME_VIEWPORT_ARRAY_INDEX,\n    D3D_NAME_VERTEX_ID,\n    D3D_NAME_PRIMITIVE_ID,\n    D3D_NAME_INSTANCE_ID,\n    D3D_NAME_IS_FRONT_FACE,\n    D3D_NAME_SAMPLE_INDEX,\n    D3D_NAME_FINAL_QUAD_EDGE_TESSFACTOR,\n    D3D_NAME_FINAL_QUAD_INSIDE_TESSFACTOR,\n    D3D_NAME_FINAL_TRI_EDGE_TESSFACTOR,\n    D3D_NAME_FINAL_TRI_INSIDE_TESSFACTOR,\n    D3D_NAME_FINAL_LINE_DETAIL_TESSFACTOR,\n    D3D_NAME_FINAL_LINE_DENSITY_TESSFACTOR,\n    D3D_NAME_TARGET = 64,\n    D3D_NAME_DEPTH,\n    D3D_NAME_COVERAGE,\n    D3D_NAME_DEPTH_GREATER_EQUAL,\n    D3D_NAME_DEPTH_LESS_EQUAL,\n    D3D10_NAME_UNDEFINED = 0,\n    D3D10_NAME_POSITION,\n    D3D10_NAME_CLIP_DISTANCE,\n    D3D10_NAME_CULL_DISTANCE,\n    D3D10_NAME_RENDER_TARGET_ARRAY_INDEX,\n    D3D10_NAME_VIEWPORT_ARRAY_INDEX,\n    D3D10_NAME_VERTEX_ID,\n    D3D10_NAME_PRIMITIVE_ID,\n    D3D10_NAME_INSTANCE_ID,\n    D3D10_NAME_IS_FRONT_FACE,\n    D3D10_NAME_SAMPLE_INDEX,\n    D3D11_NAME_FINAL_QUAD_EDGE_TESSFACTOR,\n    D3D11_NAME_FINAL_QUAD_INSIDE_TESSFACTOR,\n    D3D11_NAME_FINAL_TRI_EDGE_TESSFACTOR,\n    D3D11_NAME_FINAL_TRI_INSIDE_TESSFACTOR,\n    D3D11_NAME_FINAL_LINE_DETAIL_TESSFACTOR,\n    D3D11_NAME_FINAL_LINE_DENSITY_TESSFACTOR,\n    D3D10_NAME_TARGET = 64,\n    D3D10_NAME_DEPTH,\n    D3D10_NAME_COVERAGE,\n    D3D11_NAME_DEPTH_GREATER_EQUAL,\n    D3D11_NAME_DEPTH_LESS_EQUAL,\n} D3D_NAME;\n\ntypedef enum _D3D_SHADER_INPUT_TYPE\n{\n    D3D_SIT_CBUFFER,\n    D3D_SIT_TBUFFER,\n    D3D_SIT_TEXTURE,\n    D3D_SIT_SAMPLER,\n    D3D_SIT_UAV_RWTYPED,\n    D3D_SIT_STRUCTURED,\n    D3D_SIT_UAV_RWSTRUCTURED,\n    D3D_SIT_BYTEADDRESS,\n    D3D_SIT_UAV_RWBYTEADDRESS,\n    D3D_SIT_UAV_APPEND_STRUCTURED,\n    D3D_SIT_UAV_CONSUME_STRUCTURED,\n    D3D_SIT_UAV_RWSTRUCTURED_WITH_COUNTER,\n    D3D10_SIT_CBUFFER = 0,\n    D3D10_SIT_TBUFFER,\n    D3D10_SIT_TEXTURE,\n    D3D10_SIT_SAMPLER,\n    D3D11_SIT_UAV_RWTYPED,\n    D3D11_SIT_STRUCTURED,\n    D3D11_SIT_UAV_RWSTRUCTURED,\n    D3D11_SIT_BYTEADDRESS,\n    D3D11_SIT_UAV_RWBYTEADDRESS,\n    D3D11_SIT_UAV_APPEND_STRUCTURED,\n    D3D11_SIT_UAV_CONSUME_STRUCTURED,\n    D3D11_SIT_UAV_RWSTRUCTURED_WITH_COUNTER,\n} D3D_SHADER_INPUT_TYPE;\n\ntypedef enum _D3D_SHADER_CBUFFER_FLAGS\n{\n    D3D_CBF_USERPACKED      = 0x01,\n    D3D10_CBF_USERPACKED    = D3D_CBF_USERPACKED,\n    D3D_CBF_FORCE_DWORD     = 0x7fffffff\n} D3D_SHADER_CBUFFER_FLAGS;\n\ncpp_quote(\"DEFINE_GUID(WKPDID_D3DDebugObjectName,0x429b8c22,0x9188,0x4b0c,0x87,0x42,0xac,0xb0,0xbf,0x85,0xc2,0x00);\")\n"
  },
  {
    "path": "wine/windows/d3dcompiler.h",
    "content": "/*\n * Copyright 2010 Matteo Bruni for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __D3DCOMPILER_H__\n#define __D3DCOMPILER_H__\n\n#include \"d3d11shader.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#if defined(__GNUC__)\n#define D3DCOMPILER_DLL_W (const WCHAR[]){'d','3','d','c','o','m','p','i','l','e','r','_','4','3','.','d','l','l',0}\n#elif defined(_MSC_VER)\n#define D3DCOMPILER_DLL_W L\"d3dcompiler_43.dll\"\n#else\nstatic const WCHAR D3DCOMPILER_DLL_W[] = {'d','3','d','c','o','m','p','i','l','e','r','_','4','3','.','d','l','l',0};\n#endif\n\n#define D3DCOMPILER_DLL_A  \"d3dcompiler_43.dll\"\n#define D3DCOMPILER_DLL    WINELIB_NAME_AW(D3DCOMPILER_DLL_)\n\n#define D3DCOMPILE_DEBUG                            0x00000001\n#define D3DCOMPILE_SKIP_VALIDATION                  0x00000002\n#define D3DCOMPILE_SKIP_OPTIMIZATION                0x00000004\n#define D3DCOMPILE_PACK_MATRIX_ROW_MAJOR            0x00000008\n#define D3DCOMPILE_PACK_MATRIX_COLUMN_MAJOR         0x00000010\n#define D3DCOMPILE_PARTIAL_PRECISION                0x00000020\n#define D3DCOMPILE_FORCE_VS_SOFTWARE_NO_OPT         0x00000040\n#define D3DCOMPILE_FORCE_PS_SOFTWARE_NO_OPT         0x00000080\n#define D3DCOMPILE_NO_PRESHADER                     0x00000100\n#define D3DCOMPILE_AVOID_FLOW_CONTROL               0x00000200\n#define D3DCOMPILE_PREFER_FLOW_CONTROL              0x00000400\n#define D3DCOMPILE_ENABLE_STRICTNESS                0x00000800\n#define D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY   0x00001000\n#define D3DCOMPILE_IEEE_STRICTNESS                  0x00002000\n#define D3DCOMPILE_OPTIMIZATION_LEVEL0              0x00004000\n#define D3DCOMPILE_OPTIMIZATION_LEVEL1              0x00000000\n#define D3DCOMPILE_OPTIMIZATION_LEVEL2              0x0000c000\n#define D3DCOMPILE_OPTIMIZATION_LEVEL3              0x00008000\n#define D3DCOMPILE_RESERVED16                       0x00010000\n#define D3DCOMPILE_RESERVED17                       0x00020000\n#define D3DCOMPILE_WARNINGS_ARE_ERRORS              0x00040000\n#define D3DCOMPILE_RESOURCES_MAY_ALIAS              0x00080000\n\n#define D3D_DISASM_ENABLE_COLOR_CODE                0x00000001\n#define D3D_DISASM_ENABLE_DEFAULT_VALUE_PRINTS      0x00000002\n#define D3D_DISASM_ENABLE_INSTRUCTION_NUMBERING     0x00000004\n#define D3D_DISASM_ENABLE_INSTRUCTION_CYCLE         0x00000008\n#define D3D_DISASM_DISABLE_DEBUG_INFO               0x00000010\n\nHRESULT WINAPI D3DCompile(const void *data, SIZE_T data_size, const char *filename,\n        const D3D_SHADER_MACRO *defines, ID3DInclude *include, const char *entrypoint,\n        const char *target, UINT sflags, UINT eflags, ID3DBlob **shader, ID3DBlob **error_messages);\ntypedef HRESULT (WINAPI *pD3DCompile)(const void *data, SIZE_T data_size, const char *filename,\n        const D3D_SHADER_MACRO *defines, ID3DInclude *include, const char *entrypoint,\n        const char *target, UINT sflags, UINT eflags, ID3DBlob **shader, ID3DBlob **error_messages);\n\ntypedef enum D3DCOMPILER_STRIP_FLAGS\n{\n    D3DCOMPILER_STRIP_REFLECTION_DATA = 1,\n    D3DCOMPILER_STRIP_DEBUG_INFO = 2,\n    D3DCOMPILER_STRIP_TEST_BLOBS = 4,\n    D3DCOMPILER_STRIP_FORCE_DWORD = 0x7fffffff\n} D3DCOMPILER_STRIP_FLAGS;\n\nHRESULT WINAPI D3DStripShader(const void *data, SIZE_T data_size, UINT flags, ID3DBlob **blob);\n\ntypedef enum D3D_BLOB_PART\n{\n    D3D_BLOB_INPUT_SIGNATURE_BLOB,\n    D3D_BLOB_OUTPUT_SIGNATURE_BLOB,\n    D3D_BLOB_INPUT_AND_OUTPUT_SIGNATURE_BLOB,\n    D3D_BLOB_PATCH_CONSTANT_SIGNATURE_BLOB,\n    D3D_BLOB_ALL_SIGNATURE_BLOB,\n    D3D_BLOB_DEBUG_INFO,\n    D3D_BLOB_LEGACY_SHADER,\n    D3D_BLOB_XNA_PREPASS_SHADER,\n    D3D_BLOB_XNA_SHADER,\n    D3D_BLOB_TEST_ALTERNATE_SHADER = 0x8000,\n    D3D_BLOB_TEST_COMPILE_DETAILS,\n    D3D_BLOB_TEST_COMPILE_PERF\n} D3D_BLOB_PART;\n\nHRESULT WINAPI D3DDisassemble(const void *data, SIZE_T data_size,\n        UINT flags, const char *comments, ID3DBlob **disassembly);\ntypedef HRESULT (WINAPI *pD3DDisassemble)(const void *data, SIZE_T data_size,\n        UINT flags, const char *comments, ID3DBlob **disassembly);\nHRESULT WINAPI D3DGetBlobPart(const void *data, SIZE_T data_size, D3D_BLOB_PART part, UINT flags, ID3DBlob **blob);\nHRESULT WINAPI D3DGetInputSignatureBlob(const void *data, SIZE_T data_size, ID3DBlob **blob);\nHRESULT WINAPI D3DGetOutputSignatureBlob(const void *data, SIZE_T data_size, ID3DBlob **blob);\nHRESULT WINAPI D3DGetInputAndOutputSignatureBlob(const void *data, SIZE_T data_size, ID3DBlob **blob);\nHRESULT WINAPI D3DGetDebugInfo(const void *data, SIZE_T data_size, ID3DBlob **blob);\nHRESULT WINAPI D3DReadFileToBlob(const WCHAR *filename, ID3DBlob **contents);\nHRESULT WINAPI D3DWriteBlobToFile(ID3DBlob *blob, const WCHAR *filename, BOOL overwrite);\nHRESULT WINAPI D3DReflect(const void *data, SIZE_T data_size, REFIID riid, void **reflector);\n\nHRESULT WINAPI D3DCreateBlob(SIZE_T data_size, ID3DBlob **blob);\n\nHRESULT WINAPI D3DPreprocess(const void *data, SIZE_T size, const char *filename,\n        const D3D_SHADER_MACRO *defines, ID3DInclude *include,\n        ID3DBlob **shader, ID3DBlob **error_messages);\ntypedef HRESULT (WINAPI *pD3DPreprocess)(const void *data, SIZE_T size, const char *filename,\n        const D3D_SHADER_MACRO *defines, ID3DInclude *include,\n        ID3DBlob **shader, ID3DBlob **error_messages);\n\nHRESULT WINAPI D3DLoadModule(const void *data, SIZE_T size, ID3D11Module **module);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/d3dhal.h",
    "content": "/*\n * Direct3D driver interface\n * (DirectX 7 version)\n *\n * Copyright (C) 2001 Ove Kaaven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_D3DHAL_H\n#define __WINE_D3DHAL_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include <d3d.h>\n\n/*****************************************************************************\n * device info structures\n */\ntypedef struct _D3DDeviceDesc_V1 {\n  DWORD\t\t\tdwSize;\n  DWORD\t\t\tdwFlags;\n  D3DCOLORMODEL\t\tdcmColorModel;\n  DWORD\t\t\tdwDevCaps;\n  D3DTRANSFORMCAPS\tdtcTransformCaps;\n  BOOL\t\t\tbClipping;\n  D3DLIGHTINGCAPS\tdlcLightingCaps;\n  D3DPRIMCAPS\t\tdpcLineCaps;\n  D3DPRIMCAPS\t\tdpcTriCaps;\n  DWORD\t\t\tdwDeviceRenderBitDepth;\n  DWORD\t\t\tdwDeviceZBufferBitDepth;\n  DWORD\t\t\tdwMaxBufferSize;\n  DWORD\t\t\tdwMaxVertexCount;\n} D3DDEVICEDESC_V1,*LPD3DDEVICEDESC_V1;\n\ntypedef struct _D3DDeviceDesc_V2\n{\n  DWORD dwSize;\n  DWORD dwFlags;\n  D3DCOLORMODEL dcmColorModel;\n  DWORD dwDevCaps;\n  D3DTRANSFORMCAPS dtcTransformCaps;\n  BOOL bClipping;\n  D3DLIGHTINGCAPS dlcLightingCaps;\n  D3DPRIMCAPS dpcLineCaps;\n  D3DPRIMCAPS dpcTriCaps;\n  DWORD dwDeviceRenderBitDepth;\n  DWORD dwDeviceZBufferBitDepth;\n  DWORD dwMaxBufferSize;\n  DWORD dwMaxVertexCount;\n\n  /* DirectX 5 */\n  DWORD dwMinTextureWidth;\n  DWORD dwMinTextureHeight;\n  DWORD dwMaxTextureWidth;\n  DWORD dwMaxTextureHeight;\n  DWORD dwMinStippleWidth;\n  DWORD dwMaxStippleWidth;\n  DWORD dwMinStippleHeight;\n  DWORD dwMaxStippleHeight;\n} D3DDEVICEDESC_V2, *LPD3DDEVICEDESC_V2;\n\ntypedef struct _D3DDeviceDesc_V3\n{\n  DWORD dwSize;\n  DWORD dwFlags;\n  D3DCOLORMODEL dcmColorModel;\n  DWORD dwDevCaps;\n  D3DTRANSFORMCAPS dtcTransformCaps;\n  BOOL bClipping;\n  D3DLIGHTINGCAPS dlcLightingCaps;\n  D3DPRIMCAPS dpcLineCaps;\n  D3DPRIMCAPS dpcTriCaps;\n  DWORD dwDeviceRenderBitDepth;\n  DWORD dwDeviceZBufferBitDepth;\n  DWORD dwMaxBufferSize;\n  DWORD dwMaxVertexCount;\n\n  /* DirectX 5 */\n  DWORD dwMinTextureWidth;\n  DWORD dwMinTextureHeight;\n  DWORD dwMaxTextureWidth;\n  DWORD dwMaxTextureHeight;\n  DWORD dwMinStippleWidth;\n  DWORD dwMaxStippleWidth;\n  DWORD dwMinStippleHeight;\n  DWORD dwMaxStippleHeight;\n\n  /* DirectX 6 */\n  DWORD dwMaxTextureRepeat;\n  DWORD dwMaxTextureAspectRatio;\n  DWORD dwMaxAnisotropy;\n  D3DVALUE dvGuardBandLeft;\n  D3DVALUE dvGuardBandTop;\n  D3DVALUE dvGuardBandRight;\n  D3DVALUE dvGuardBandBottom;\n  D3DVALUE dvExtentsAdjust;\n  DWORD dwStencilCaps;\n  DWORD dwFVFCaps;\n  DWORD dwTextureOpCaps;\n  WORD wMaxTextureBlendStages;\n  WORD wMaxSimultaneousTextures;\n} D3DDEVICEDESC_V3, *LPD3DDEVICEDESC_V3;\n\ntypedef struct _D3DHAL_GLOBALDRIVERDATA {\n  DWORD\t\t\tdwSize;\n  D3DDEVICEDESC_V1\thwCaps;\n  DWORD\t\t\tdwNumVertices;\n  DWORD\t\t\tdwNumClipVertices;\n  DWORD\t\t\tdwNumTextureFormats;\n  LPDDSURFACEDESC\tlpTextureFormats;\n} D3DHAL_GLOBALDRIVERDATA,*LPD3DHAL_GLOBALDRIVERDATA;\n\ntypedef struct _D3DHAL_D3DEXTENDEDCAPS {\n  DWORD\t\t\tdwSize;\n  /* DirectX 5 */\n  DWORD\t\t\tdwMinTextureWidth, dwMaxTextureWidth;\n  DWORD\t\t\tdwMinTextureHeight, dwMaxTextureHeight;\n  DWORD\t\t\tdwMinStippleWidth, dwMaxStippleWidth;\n  DWORD\t\t\tdwMinStippleHeight, dwMaxStippleHeight;\n  /* DirectX 6 */\n  DWORD\t\t\tdwMaxTextureRepeat;\n  DWORD\t\t\tdwMaxTextureAspectRatio;\n  DWORD\t\t\tdwMaxAnisotropy;\n  D3DVALUE\t\tdvGuardBandLeft;\n  D3DVALUE\t\tdvGuardBandTop;\n  D3DVALUE\t\tdvGuardBandRight;\n  D3DVALUE\t\tdvGuardBandBottom;\n  D3DVALUE\t\tdvExtentsAdjust;\n  DWORD\t\t\tdwStencilCaps;\n  DWORD\t\t\tdwFVFCaps;\n  DWORD\t\t\tdwTextureOpCaps;\n  WORD\t\t\twMaxTextureBlendStages;\n  WORD\t\t\twMaxSimultaneousTextures;\n  /* DirectX 7 */\n  DWORD\t\t\tdwMaxActiveLights;\n  D3DVALUE\t\tdvMaxVertexW;\n  WORD\t\t\twMaxUserClipPlanes;\n  WORD\t\t\twMaxVertexBlendMatrices;\n  DWORD\t\t\tdwVertexProcessingCaps;\n  DWORD\t\t\tdwReserved1;\n  DWORD\t\t\tdwReserved2;\n  DWORD\t\t\tdwReserved3;\n  DWORD\t\t\tdwReserved4;\n} D3DHAL_D3DEXTENDEDCAPS,*LPD3DHAL_D3DEXTENDEDCAPS;\n\n/*****************************************************************************\n * d3d->driver callbacks\n */\ntypedef struct _D3DHAL_CONTEXTCREATEDATA\t*LPD3DHAL_CONTEXTCREATEDATA;\ntypedef struct _D3DHAL_CONTEXTDESTROYDATA\t*LPD3DHAL_CONTEXTDESTROYDATA;\ntypedef struct _D3DHAL_CONTEXTDESTROYALLDATA\t*LPD3DHAL_CONTEXTDESTROYALLDATA;\ntypedef struct _D3DHAL_SCENECAPTUREDATA\t\t*LPD3DHAL_SCENECAPTUREDATA;\ntypedef struct _D3DHAL_RENDERSTATEDATA\t\t*LPD3DHAL_RENDERSTATEDATA;\ntypedef struct _D3DHAL_RENDERPRIMITIVEDATA\t*LPD3DHAL_RENDERPRIMITIVEDATA;\ntypedef struct _D3DHAL_TEXTURECREATEDATA\t*LPD3DHAL_TEXTURECREATEDATA;\ntypedef struct _D3DHAL_TEXTUREDESTROYDATA\t*LPD3DHAL_TEXTUREDESTROYDATA;\ntypedef struct _D3DHAL_TEXTURESWAPDATA\t\t*LPD3DHAL_TEXTURESWAPDATA;\ntypedef struct _D3DHAL_TEXTUREGETSURFDATA\t*LPD3DHAL_TEXTUREGETSURFDATA;\ntypedef struct _D3DHAL_GETSTATEDATA\t\t*LPD3DHAL_GETSTATEDATA;\n\ntypedef DWORD (PASCAL *LPD3DHAL_CONTEXTCREATECB)    (LPD3DHAL_CONTEXTCREATEDATA);\ntypedef DWORD (PASCAL *LPD3DHAL_CONTEXTDESTROYCB)   (LPD3DHAL_CONTEXTDESTROYDATA);\ntypedef DWORD (PASCAL *LPD3DHAL_CONTEXTDESTROYALLCB)(LPD3DHAL_CONTEXTDESTROYALLDATA);\ntypedef DWORD (PASCAL *LPD3DHAL_SCENECAPTURECB)\t    (LPD3DHAL_SCENECAPTUREDATA);\ntypedef DWORD (PASCAL *LPD3DHAL_RENDERSTATECB)\t    (LPD3DHAL_RENDERSTATEDATA);\ntypedef DWORD (PASCAL *LPD3DHAL_RENDERPRIMITIVECB)  (LPD3DHAL_RENDERPRIMITIVEDATA);\ntypedef DWORD (PASCAL *LPD3DHAL_TEXTURECREATECB)    (LPD3DHAL_TEXTURECREATEDATA);\ntypedef DWORD (PASCAL *LPD3DHAL_TEXTUREDESTROYCB)   (LPD3DHAL_TEXTUREDESTROYDATA);\ntypedef DWORD (PASCAL *LPD3DHAL_TEXTURESWAPCB)\t    (LPD3DHAL_TEXTURESWAPDATA);\ntypedef DWORD (PASCAL *LPD3DHAL_TEXTUREGETSURFCB)   (LPD3DHAL_TEXTUREGETSURFDATA);\ntypedef DWORD (PASCAL *LPD3DHAL_GETSTATECB)\t    (LPD3DHAL_GETSTATEDATA);\n\ntypedef struct _D3DHAL_CALLBACKS {\n  DWORD\t\t\t\tdwSize;\n  LPD3DHAL_CONTEXTCREATECB\tContextCreate;\n  LPD3DHAL_CONTEXTDESTROYCB\tContextDestroy;\n  LPD3DHAL_CONTEXTDESTROYALLCB\tContextDestroyAll;\n  LPD3DHAL_SCENECAPTURECB\tSceneCapture;\n  LPVOID\t\t\tlpReserved10;\n  LPVOID\t\t\tlpReserved11;\n  LPD3DHAL_RENDERSTATECB\tRenderState;\n  LPD3DHAL_RENDERPRIMITIVECB\tRenderPrimitive;\n  DWORD\t\t\t\tdwReserved;\n  LPD3DHAL_TEXTURECREATECB\tTextureCreate;\n  LPD3DHAL_TEXTUREDESTROYCB\tTextureDestroy;\n  LPD3DHAL_TEXTURESWAPCB\tTextureSwap;\n  LPD3DHAL_TEXTUREGETSURFCB\tTextureGetSurf;\n  /* now why did MS create CALLBACKS2 and CALLBACKS3 structures if\n   * all these reserved fields were available? we may never know */\n  LPVOID\t\t\tlpReserved12;\n  LPVOID\t\t\tlpReserved13;\n  LPVOID\t\t\tlpReserved14;\n  LPVOID\t\t\tlpReserved15;\n  LPVOID\t\t\tlpReserved16;\n  LPVOID\t\t\tlpReserved17;\n  LPVOID\t\t\tlpReserved18;\n  LPVOID\t\t\tlpReserved19;\n  LPVOID\t\t\tlpReserved20;\n  LPVOID\t\t\tlpReserved21;\n  LPD3DHAL_GETSTATECB\t\tGetState;\n  DWORD\t\t\t\tdwReserved0;\n  DWORD\t\t\t\tdwReserved1;\n  DWORD\t\t\t\tdwReserved2;\n  DWORD\t\t\t\tdwReserved3;\n  DWORD\t\t\t\tdwReserved4;\n  DWORD\t\t\t\tdwReserved5;\n  DWORD\t\t\t\tdwReserved6;\n  DWORD\t\t\t\tdwReserved7;\n  DWORD\t\t\t\tdwReserved8;\n  DWORD\t\t\t\tdwReserved9;\n} D3DHAL_CALLBACKS,*LPD3DHAL_CALLBACKS;\n\ntypedef struct _D3DHAL_SETRENDERTARGETDATA\t\t*LPD3DHAL_SETRENDERTARGETDATA;\ntypedef struct _D3DHAL_CLEARDATA\t\t\t*LPD3DHAL_CLEARDATA;\ntypedef struct _D3DHAL_DRAWONEPRIMITIVEDATA\t\t*LPD3DHAL_DRAWONEPRIMITIVEDATA;\ntypedef struct _D3DHAL_DRAWONEINDEXEDPRIMITIVEDATA\t*LPD3DHAL_DRAWONEINDEXEDPRIMITIVEDATA;\ntypedef struct _D3DHAL_DRAWPRIMITIVESDATA\t\t*LPD3DHAL_DRAWPRIMITIVESDATA;\n\ntypedef DWORD (PASCAL *LPD3DHAL_SETRENDERTARGETCB)\t  (LPD3DHAL_SETRENDERTARGETDATA);\ntypedef DWORD (PASCAL *LPD3DHAL_CLEARCB)\t\t  (LPD3DHAL_CLEARDATA);\ntypedef DWORD (PASCAL *LPD3DHAL_DRAWONEPRIMITIVECB)\t  (LPD3DHAL_DRAWONEPRIMITIVEDATA);\ntypedef DWORD (PASCAL *LPD3DHAL_DRAWONEINDEXEDPRIMITIVECB)(LPD3DHAL_DRAWONEINDEXEDPRIMITIVEDATA);\ntypedef DWORD (PASCAL *LPD3DHAL_DRAWPRIMITIVESCB)\t  (LPD3DHAL_DRAWPRIMITIVESDATA);\n\ntypedef struct _D3DHAL_CALLBACKS2 {\n  DWORD\t\t\t\t\tdwSize;\n  DWORD\t\t\t\t\tdwFlags;\n  LPD3DHAL_SETRENDERTARGETCB\t\tSetRenderTarget;\n  LPD3DHAL_CLEARCB\t\t\tClear;\n  LPD3DHAL_DRAWONEPRIMITIVECB\t\tDrawOnePrimitive;\n  LPD3DHAL_DRAWONEINDEXEDPRIMITIVECB\tDrawOneIndexedPrimitive;\n  LPD3DHAL_DRAWPRIMITIVESCB\t\tDrawPrimitives;\n} D3DHAL_CALLBACKS2,*LPD3DHAL_CALLBACKS2;\n\ntypedef struct _D3DHAL_CLEAR2DATA\t\t\t*LPD3DHAL_CLEAR2DATA;\ntypedef struct _D3DHAL_VALIDATETEXTURESTAGESTATEDATA\t*LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA;\ntypedef struct _D3DHAL_DRAWPRIMITIVES2DATA\t\t*LPD3DHAL_DRAWPRIMITIVES2DATA;\n\ntypedef DWORD (PASCAL *LPD3DHAL_CLEAR2CB)\t\t  (LPD3DHAL_CLEAR2DATA);\ntypedef DWORD (PASCAL *LPD3DHAL_VALIDATETEXTURESTAGESTATECB)(LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA);\ntypedef DWORD (PASCAL *LPD3DHAL_DRAWPRIMITIVES2CB)\t  (LPD3DHAL_DRAWPRIMITIVES2DATA);\n\ntypedef struct _D3DHAL_CALLBACKS3 {\n  DWORD\t\t\t\t\tdwSize;\n  DWORD\t\t\t\t\tdwFlags;\n  LPD3DHAL_CLEAR2CB\t\t\tClear2;\n  LPVOID\t\t\t\tlpvReserved;\n  LPD3DHAL_VALIDATETEXTURESTAGESTATECB\tValidateTextureStageState;\n  LPD3DHAL_DRAWPRIMITIVES2CB\t\tDrawPrimitives2;\n} D3DHAL_CALLBACKS3,*LPD3DHAL_CALLBACKS3;\n\n/*****************************************************************************\n * parameter structures\n */\ntypedef struct _D3DHAL_CONTEXTCREATEDATA {\n  union {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDDGbl; /* pre-DirectX 7 */\n    LPDDRAWI_DIRECTDRAW_LCL\tlpDDLcl; /* DirectX 7 */\n  } DUMMYUNIONNAME1;\n  union {\n    LPDIRECTDRAWSURFACE\t\tlpDDS;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpDDSLcl; /* DirectX 7 */\n  } DUMMYUNIONNAME2;\n  union {\n    LPDIRECTDRAWSURFACE\t\tlpDDSZ;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpDDSZLcl; /* DirectX 7 */\n  } DUMMYUNIONNAME3;\n  union {\n    DWORD\t\t\tdwPID;\n    ULONG_PTR\t\t\tdwrstates;\n  } DUMMYUNIONNAME4;\n  ULONG_PTR\t\t\tdwhContext;\n  HRESULT\t\t\tddrval;\n} D3DHAL_CONTEXTCREATEDATA;\n\ntypedef struct _D3DHAL_CONTEXTDESTROYDATA {\n  ULONG_PTR\t\t\tdwhContext;\n  HRESULT\t\t\tddrval;\n} D3DHAL_CONTEXTDESTROYDATA;\n\ntypedef struct _D3DHAL_CONTEXTDESTROYALLDATA {\n  DWORD\t\t\t\tdwPID;\n  HRESULT\t\t\tddrval;\n} D3DHAL_CONTEXTDESTROYALLDATA;\n\ntypedef struct _D3DHAL_SCENECAPTUREDATA {\n  ULONG_PTR\t\t\tdwhContext;\n  DWORD\t\t\t\tdwFlag;\n  HRESULT\t\t\tddrval;\n} D3DHAL_SCENECAPTUREDATA;\n\n#define D3DHAL_SCENE_CAPTURE_START\t0x00000000\n#define D3DHAL_SCENE_CAPTURE_END\t0x00000001\n\ntypedef struct _D3DHAL_SETRENDERTARGETDATA {\n  ULONG_PTR\t\t\tdwhContext;\n  union {\n    LPDIRECTDRAWSURFACE\t\tlpDDS;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpDDSLcl;\n  } DUMMYUNIONNAME1;\n  union {\n    LPDIRECTDRAWSURFACE\t\tlpDDSZ;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpDDSZLcl;\n  } DUMMYUNIONNAME2;\n  HRESULT\t\t\tddrval;\n} D3DHAL_SETRENDERTARGETDATA;\n\ntypedef struct _D3DHAL_DRAWPRIMITIVES2DATA {\n  ULONG_PTR\t\t\tdwhContext;\n  DWORD\t\t\t\tdwFlags;\n  DWORD\t\t\t\tdwVertexType;\n  LPDDRAWI_DDRAWSURFACE_LCL\tlpDDCommands;\n  DWORD\t\t\t\tdwCommandOffset;\n  DWORD\t\t\t\tdwCommandLength;\n  union {\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpDDVertex;\n    LPVOID\t\t\tlpVertices;\n  } DUMMYUNIONNAME1;\n  DWORD\t\t\t\tdwVertexOffset;\n  DWORD\t\t\t\tdwVertexLength;\n  DWORD\t\t\t\tdwReqVertexBufSize;\n  DWORD\t\t\t\tdwReqCommandBufSize;\n  LPDWORD\t\t\tlpdwRStates;\n  union {\n    DWORD\t\t\tdwVertexSize;\n    HRESULT\t\t\tddrval;\n  } DUMMYUNIONNAME2;\n  DWORD\t\t\t\tdwErrorOffset;\n} D3DHAL_DRAWPRIMITIVES2DATA;\n\n#define D3DHALDP2_USERMEMVERTICES\t0x00000001\n#define D3DHALDP2_EXECUTEBUFFER\t\t0x00000002\n#define D3DHALDP2_SWAPVERTEXBUFFER\t0x00000004\n#define D3DHALDP2_SWAPCOMMANDBUFFER\t0x00000008\n#define D3DHALDP2_REQVERTEXBUFSIZE\t0x00000010\n#define D3DHALDP2_REQCOMMANDBUFSIZE\t0x00000020\n#define D3DHALDP2_VIDMEMVERTEXBUF\t0x00000040\n#define D3DHALDP2_VIDMEMCOMMANDBUF\t0x00000080\n\n/*****************************************************************************\n * DrawPrimitives2 command structures\n */\ntypedef struct _D3DHAL_DP2COMMAND {\n  BYTE bCommand;\n  BYTE bReserved;\n  union {\n    WORD wPrimitiveCount;\n    WORD wStateCount;\n  } DUMMYUNIONNAME;\n} D3DHAL_DP2COMMAND,*LPD3DHAL_DP2COMMAND;\n\ntypedef enum _D3DHAL_DP2OPERATION {\n  D3DDP2OP_POINTS\t\t= 1,\n  D3DDP2OP_INDEXEDLINELIST\t= 2,\n  D3DDP2OP_INDEXEDTRIANGLELIST\t= 3,\n  D3DDP2OP_RENDERSTATE\t\t= 8,\n  D3DDP2OP_LINELIST\t\t= 15,\n  D3DDP2OP_LINESTRIP\t\t= 16,\n  D3DDP2OP_INDEXEDLINESTRIP\t= 17,\n  D3DDP2OP_TRIANGLELIST\t\t= 18,\n  D3DDP2OP_TRIANGLESTRIP\t= 19,\n  D3DDP2OP_INDEXEDTRIANGLESTRIP\t= 20,\n  D3DDP2OP_TRIANGLEFAN\t\t= 21,\n  D3DDP2OP_INDEXEDTRIANGLEFAN\t= 22,\n  D3DDP2OP_TRIANGLEFAN_IMM\t= 23,\n  D3DDP2OP_LINELIST_IMM\t\t= 24,\n  D3DDP2OP_TEXTURESTAGESTATE\t= 25,\n  D3DDP2OP_INDEXEDTRIANGLELIST2\t= 26,\n  D3DDP2OP_INDEXEDLINELIST2\t= 27,\n  D3DDP2OP_VIEWPORTINFO\t\t= 28,\n  D3DDP2OP_WINFO\t\t= 29,\n  /* pre-DirectX 7 interfaces */\n  D3DDP2OP_SETPALETTE\t\t= 30,\n  D3DDP2OP_UPDATEPALETTE\t= 31,\n  /* DirectX 7 interfaces */\n  D3DDP2OP_ZRANGE\t\t= 32,\n  D3DDP2OP_SETMATERIAL\t\t= 33,\n  D3DDP2OP_SETLIGHT\t\t= 34,\n  D3DDP2OP_CREATELIGHT\t\t= 35,\n  D3DDP2OP_SETTRANSFORM\t\t= 36,\n  D3DDP2OP_TEXBLT\t\t= 38,\n  D3DDP2OP_STATESET\t\t= 39,\n  D3DDP2OP_SETPRIORITY\t\t= 40,\n  /* all interfaces */\n  D3DDP2OP_SETRENDERTARGET\t= 41,\n  D3DDP2OP_CLEAR\t\t= 42,\n  /* DirectX 7 interfaces */\n  D3DDP2OP_SETTEXLOD\t\t= 43,\n  D3DPP2OP_SETCLIPPLANE\t\t= 44\n} D3DHAL_DP2OPERATION;\n\n/* point primitives */\n\ntypedef struct _D3DHAL_POINTS {\n  WORD wCount;\n  WORD wVStart;\n} D3DHAL_DP2POINTS,*LPD3DHAL_DP2POINTS;\n\n/* line primitives */\n\ntypedef struct _D3DHAL_DP2STARTVERTEX {\n  WORD wVStart;\n} D3DHAL_DP2STARTVERTEX,*LPD3DHAL_DP2STARTVERTEX;\n\ntypedef struct _D3DHAL_DP2LINELIST {\n  WORD wVStart;\n} D3DHAL_DP2LINELIST,*LPD3DHAL_DP2LINELIST;\n\ntypedef struct _D3DHAL_DP2INDEXEDLINELIST {\n  WORD wV1;\n  WORD wV2;\n} D3DHAL_DP2INDEXEDLINELIST,*LPD3DHAL_DP2INDEXEDLINELIST;\n\ntypedef struct _D3DHAL_DP2LINESTRIP {\n  WORD wVStart;\n} D3DHAL_DP2LINESTRIP,*LPD3DHAL_DP2LINESTRIP;\n\ntypedef struct _D3DHAL_DP2INDEXEDLINESTRIP {\n  WORD wV[2];\n} D3DHAL_DP2INDEXEDLINESTRIP,*LPD3DHAL_DP2INDEXEDLINESTRIP;\n\n/* triangle primitives */\n\ntypedef struct _D3DHAL_DP2TRIANGLELIST {\n  WORD wVStart;\n} D3DHAL_DP2TRIANGLELIST,*LPD3DHAL_DP2TRIANGLELIST;\n\ntypedef struct _D3DHAL_DP2INDEXEDTRIANGLELIST {\n  WORD wV1;\n  WORD wV2;\n  WORD wV3;\n  WORD wFlags;\n} D3DHAL_DP2INDEXEDTRIANGLELIST,*LPD3DHAL_DP2INDEXEDTRIANGLELIST;\n\ntypedef struct _D3DHAL_DP2INDEXEDTRIANGLELIST2 {\n  WORD wV1;\n  WORD wV2;\n  WORD wV3;\n} D3DHAL_DP2INDEXEDTRIANGLELIST2,*LPD3DHAL_DP2INDEXEDTRIANGLELIST2;\n\ntypedef struct _D3DHAL_DP2TRIANGLESTRIP {\n  WORD wVStart;\n} D3DHAL_DP2TRIANGLESTRIP,*LPD3DHAL_DP2TRIANGLESTRIP;\n\ntypedef struct _D3DHAL_DP2INDEXEDTRIANGLESTRIP {\n  WORD wV[3];\n} D3DHAL_DP2INDEXEDTRIANGLESTRIP,*LPD3DHAL_DP2INDEXEDTRIANGLESTRIP;\n\ntypedef struct _D3DHAL_DP2TRIANGLEFAN {\n  WORD wVStart;\n} D3DHAL_DP2TRIANGLEFAN,*LPD3DHAL_DP2TRIANGLEFAN;\n\ntypedef struct _D3DHAL_DP2INDEXEDTRIANGLEFAN {\n  WORD wV[3];\n} D3DHAL_DP2INDEXEDTRIANGLEFAN,*LPD3DHAL_DP2INDEXEDTRIANGLEFAN;\n\ntypedef struct _D3DHAL_DP2TRIANGLEFAN_IMM {\n  DWORD dwEdgeFlags;\n} D3DHAL_DP2TRIANGLEFAN_IMM,*LPD3DHAL_DP2TRIANGLEFAN_IMM;\n\n/* render states */\ntypedef struct _D3DHAL_DP2RENDERSTATE {\n  D3DRENDERSTATETYPE\tRenderState;\n  union {\n    D3DVALUE dvState;\n    DWORD dwState;\n  } DUMMYUNIONNAME;\n} D3DHAL_DP2RENDERSTATE,*LPD3DHAL_DP2RENDERSTATE;\n\ntypedef struct _D3DHAL_DP2TEXTURESTAGESTATE {\n  WORD\twStage;\n  WORD\tTSState;\n  DWORD dwValue;\n} D3DHAL_DP2TEXTURESTAGESTATE,*LPD3DHAL_DP2TEXTURESTAGESTATE;\n\n#define D3DTSS_TEXTUREMAP 0\n\ntypedef struct _D3DHAL_DP2VIEWPORTINFO {\n  DWORD dwX;\n  DWORD dwY;\n  DWORD dwWidth;\n  DWORD dwHeight;\n} D3DHAL_DP2VIEWPORTINFO,*LPD3DHAL_DP2VIEWPORTINFO;\n\ntypedef struct _D3DHAL_DP2WINFO {\n  D3DVALUE dwWNear;\n  D3DVALUE dwWFar;\n} D3DHAL_DP2WINFO,*LPD3DHAL_DP2WINFO;\n\ntypedef struct _D3DHAL_DP2SETPALETTE {\n  DWORD dwPaletteHandle;\n  DWORD dwPaletteFlags;\n  DWORD dwSurfaceHandle;\n} D3DHAL_DP2SETPALETTE,*LPD3DHAL_DP2SETPALETTE;\n\ntypedef struct _D3DHAL_DP2UPDATEPALETTE {\n  DWORD dwPaletteHandle;\n  WORD\twStartIndex;\n  WORD\twNumEntries;\n} D3DHAL_DP2UPDATEPALETTE,*LPD3DHAL_DP2UPDATEPALETTE;\n\ntypedef struct _D3DHAL_DP2ZRANGE {\n  D3DVALUE dvMinZ;\n  D3DVALUE dvMaxZ;\n} D3DHAL_DP2ZRANGE,*LPD3DHAL_DP2ZRANGE;\n\ntypedef D3DMATERIAL7 D3DHAL_DP2SETMATERIAL,*LPD3DHAL_DP2SETMATERIAL;\n\ntypedef struct _D3DHAL_DP2SETLIGHT {\n  DWORD dwIndex;\n  DWORD dwDataType;\n} D3DHAL_DP2SETLIGHT,*LPD3DHAL_DP2SETLIGHT;\n\n#define D3DHAL_SETLIGHT_ENABLE\t0\n#define D3DHAL_SETLIGHT_DISABLE\t1\n#define D3DHAL_SETLIGHT_DATA\t2\n\ntypedef struct _D3DHAL_DP2CREATELIGHT {\n  DWORD dwIndex;\n} D3DHAL_DP2CREATELIGHT,*LPD3DHAL_DP2CREATELIGHT;\n\ntypedef struct _D3DHAL_DP2SETTRANSFORM {\n  D3DTRANSFORMSTATETYPE\txfrmType;\n  D3DMATRIX\t\tmatrix;\n} D3DHAL_DP2SETTRANSFORM,*LPD3DHAL_DP2SETTRANSFORM;\n\ntypedef struct _D3DHAL_DP2TEXBLT {\n  DWORD dwDDDestSurface;\n  DWORD dwDDSrcSurface;\n  POINT pDest;\n  RECTL rSrc;\n  DWORD dwFlags;\n} D3DHAL_DP2TEXBLT,*LPD3DHAL_DP2TEXBLT;\n\ntypedef struct _D3DHAL_DP2STATESET {\n  DWORD               dwOperation;\n  DWORD               dwParam;\n  D3DSTATEBLOCKTYPE   sbType;\n} D3DHAL_DP2STATESET,*LPD3DHAL_DP2STATESET;\n\n#define D3DHAL_STATESETBEGIN\t0\n#define D3DHAL_STATESETEND\t1\n#define D3DHAL_STATESETDELETE\t2\n#define D3DHAL_STATESETEXECUTE\t3\n#define D3DHAL_STATESETCAPTURE\t4\n\ntypedef struct _D3DHAL_DP2SETPRIORITY {\n  DWORD dwDDSurface;\n  DWORD dwPriority;\n} D3DHAL_DP2SETPRIORITY,*LPD3DHAL_DP2SETPRIORITY;\n\ntypedef struct _D3DHAL_DP2SETRENDERTARGET {\n  DWORD hRenderTarget;\n  DWORD hZBuffer;\n} D3DHAL_DP2SETRENDERTARGET,*LPD3DHAL_DP2SETRENDERTARGET;\n\ntypedef struct _D3DHAL_DP2CLEAR {\n  DWORD\t\tdwFlags;\n  DWORD\t\tdwFillColor;\n  D3DVALUE\tdvFillDepth;\n  DWORD\t\tdwFillStencil;\n  RECT\t\tRects[1];\n} D3DHAL_DP2CLEAR,*LPD3DHAL_DP2CLEAR;\n\ntypedef struct _D3DHAL_DP2SETTEXLOD {\n  DWORD dwDDSurface;\n  DWORD dwLOD;\n} D3DHAL_DP2SETTEXLOD,*LPD3DHAL_DP2SETTEXLOD;\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif\n\n#endif /* __WINE_D3DHAL_H */\n"
  },
  {
    "path": "wine/windows/d3drm.h",
    "content": "/*\n * Copyright (C) 2005 Peter Berg Larsen\n * Copyright (C) 2010 Christian Costa\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __D3DRM_H__\n#define __D3DRM_H__\n\n#include <ddraw.h>\n\ntypedef struct IDirect3DRM *LPDIRECT3DRM, **LPLPDIRECT3DRM;\n\n#include <d3drmobj.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Direct3DRM Object CLSID */\nDEFINE_GUID(CLSID_CDirect3DRM,              0x4516ec41, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);\n\n/* Direct3DRM Interface GUIDs */\nDEFINE_GUID(IID_IDirect3DRM,                0x2bc49361, 0x8327, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(IID_IDirect3DRM2,               0x4516ecc8, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);\nDEFINE_GUID(IID_IDirect3DRM3,               0x4516ec83, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);\n\ntypedef struct IDirect3DRM2 *LPDIRECT3DRM2, **LPLPDIRECT3DRM2;\ntypedef struct IDirect3DRM3 *LPDIRECT3DRM3, **LPLPDIRECT3DRM3;\n\nHRESULT WINAPI Direct3DRMCreate(struct IDirect3DRM **d3drm);\n\n/*****************************************************************************\n * IDirect3DRMObject interface\n */\n#ifdef WINE_NO_UNICODE_MACROS\n#undef GetClassName\n#endif\n#define INTERFACE IDirect3DRM\nDECLARE_INTERFACE_(IDirect3DRM,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRM methods ***/\n    STDMETHOD(CreateObject)(THIS_ REFCLSID clsid, IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(CreateFrame)(THIS_ IDirect3DRMFrame *parent, IDirect3DRMFrame **frame) PURE;\n    STDMETHOD(CreateMesh)(THIS_ IDirect3DRMMesh **mesh) PURE;\n    STDMETHOD(CreateMeshBuilder)(THIS_ IDirect3DRMMeshBuilder **mesh_builder) PURE;\n    STDMETHOD(CreateFace)(THIS_ IDirect3DRMFace **face) PURE;\n    STDMETHOD(CreateAnimation)(THIS_ IDirect3DRMAnimation **animation) PURE;\n    STDMETHOD(CreateAnimationSet)(THIS_ IDirect3DRMAnimationSet **set) PURE;\n    STDMETHOD(CreateTexture)(THIS_ D3DRMIMAGE *image, IDirect3DRMTexture **texture) PURE;\n    STDMETHOD(CreateLight)(THIS_ D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light) PURE;\n    STDMETHOD(CreateLightRGB)(THIS_ D3DRMLIGHTTYPE type, D3DVALUE r, D3DVALUE g, D3DVALUE b,\n            IDirect3DRMLight **light) PURE;\n    STDMETHOD(CreateMaterial)(THIS_ D3DVALUE power, IDirect3DRMMaterial **material) PURE;\n    STDMETHOD(CreateDevice)(THIS_ DWORD width, DWORD height, IDirect3DRMDevice **device) PURE;\n    STDMETHOD(CreateDeviceFromSurface)(THIS_ GUID *guid, IDirectDraw *ddraw,\n            IDirectDrawSurface *surface, IDirect3DRMDevice **device) PURE;\n    STDMETHOD(CreateDeviceFromD3D)(THIS_ IDirect3D *d3d, IDirect3DDevice *d3d_device,\n            IDirect3DRMDevice **device) PURE;\n    STDMETHOD(CreateDeviceFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid,\n            int width, int height, IDirect3DRMDevice **device) PURE;\n    STDMETHOD(CreateTextureFromSurface)(THIS_ IDirectDrawSurface *surface,\n            IDirect3DRMTexture **texture) PURE;\n    STDMETHOD(CreateShadow)(THIS_ IDirect3DRMVisual *visual, IDirect3DRMLight *light,\n            D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz,\n            IDirect3DRMVisual **shadow) PURE;\n    STDMETHOD(CreateViewport)(THIS_ IDirect3DRMDevice *device, IDirect3DRMFrame *camera,\n            DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport **viewport) PURE;\n    STDMETHOD(CreateWrap)(THIS_ D3DRMWRAPTYPE type, IDirect3DRMFrame *reference, D3DVALUE ox, D3DVALUE oy, D3DVALUE oz,\n        D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov,\n        D3DVALUE su, D3DVALUE sv, IDirect3DRMWrap **wrap) PURE;\n    STDMETHOD(CreateUserVisual)(THIS_ D3DRMUSERVISUALCALLBACK cb, void *ctx, IDirect3DRMUserVisual **visual) PURE;\n    STDMETHOD(LoadTexture)(THIS_ const char *filename, IDirect3DRMTexture **texture) PURE;\n    STDMETHOD(LoadTextureFromResource)(THIS_ HRSRC resource, IDirect3DRMTexture **texture) PURE;\n    STDMETHOD(SetSearchPath)(THIS_ const char *path) PURE;\n    STDMETHOD(AddSearchPath)(THIS_ const char *path) PURE;\n    STDMETHOD(GetSearchPath)(THIS_ DWORD *size, char *path) PURE;\n    STDMETHOD(SetDefaultTextureColors)(THIS_ DWORD) PURE;\n    STDMETHOD(SetDefaultTextureShades)(THIS_ DWORD) PURE;\n    STDMETHOD(GetDevices)(THIS_ IDirect3DRMDeviceArray **array) PURE;\n    STDMETHOD(GetNamedObject)(THIS_ const char *name, IDirect3DRMObject **object) PURE;\n    STDMETHOD(EnumerateObjects)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(Load)(THIS_ void *source, void *object_id, IID **iids, DWORD iid_count, D3DRMLOADOPTIONS flags,\n            D3DRMLOADCALLBACK load_cb, void *load_ctx, D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx,\n            IDirect3DRMFrame *parent_frame) PURE;\n    STDMETHOD(Tick)(THIS_ D3DVALUE) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRM_QueryInterface(p,a,b)                         (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRM_AddRef(p)                                     (p)->lpVtbl->AddRef(p)\n#define IDirect3DRM_Release(p)                                    (p)->lpVtbl->Release(p)\n/*** IDirect3DRM methods ***/\n#define IDirect3DRM_CreateObject(p,a,b,c,d)                       (p)->lpVtbl->CreateObject(p,a,b,c,d)\n#define IDirect3DRM_CreateFrame(p,a,b)                            (p)->lpVtbl->CreateFrame(p,a,b)\n#define IDirect3DRM_CreateMesh(p,a)                               (p)->lpVtbl->CreateMesh(p,a)\n#define IDirect3DRM_CreateMeshBuilder(p,a)                        (p)->lpVtbl->CreateMeshBuilder(p,a)\n#define IDirect3DRM_CreateFace(p,a)                               (p)->lpVtbl->CreateFace(p,a)\n#define IDirect3DRM_CreateAnimation(p,a)                          (p)->lpVtbl->CreateAnimation(p,a)\n#define IDirect3DRM_CreateAnimationSet(p,a)                       (p)->lpVtbl->CreateAnimationSet(p,a)\n#define IDirect3DRM_CreateTexture(p,a,b)                          (p)->lpVtbl->CreateTexture(p,a,b)\n#define IDirect3DRM_CreateLight(p,a,b,c)                          (p)->lpVtbl->CreateLight(p,a,b,c)\n#define IDirect3DRM_CreateLightRGB(p,a,b,c,d,e)                   (p)->lpVtbl->CreateLightRGB(p,a,b,c,d,e)\n#define IDirect3DRM_CreateMaterial(p,a,b)                         (p)->lpVtbl->CreateMaterial(p,a,b)\n#define IDirect3DRM_CreateDevice(p,a,b,c)                         (p)->lpVtbl->CreateDevice(p,a,b,c)\n#define IDirect3DRM_CreateDeviceFromSurface(p,a,b,c,d)            (p)->lpVtbl->CreateDeviceFromSurface(p,a,b,c,d)\n#define IDirect3DRM_CreateDeviceFromD3D(p,a,b,c)                  (p)->lpVtbl->CreateDeviceFromD3D(p,a,b,c)\n#define IDirect3DRM_CreateDeviceFromClipper(p,a,b,c,d,e)          (p)->lpVtbl->CreateDeviceFromClipper(p,a,b,c,d,e)\n#define IDirect3DRM_CreateTextureFromSurface(p,a,b)               (p)->lpVtbl->CreateTextureFromSurface(p,a,b)\n#define IDirect3DRM_CreateShadow(p,a,b,c,d,e,f,g,h,i)             (p)->lpVtbl->CreateShadow(p,a,b,c,d,e,f,g,h,i)\n#define IDirect3DRM_CreateViewport(p,a,b,c,d,e,f,g)               (p)->lpVtbl->CreateViewport(p,a,b,c,d,e,f,g)\n#define IDirect3DRM_CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q) (p)->lpVtbl->CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q)\n#define IDirect3DRM_CreateUserVisual(p,a,b,c)                     (p)->lpVtbl->CreateUserVisual(p,a,b,c)\n#define IDirect3DRM_LoadTexture(p,a,b)                            (p)->lpVtbl->LoadTexture(p,a,b)\n#define IDirect3DRM_LoadTextureFromResource(p,a,b)                (p)->lpVtbl->LoadTextureFromResource(p,a,b)\n#define IDirect3DRM_SetSearchPath(p,a)                            (p)->lpVtbl->SetSearchPath(p,a)\n#define IDirect3DRM_AddSearchPath(p,a)                            (p)->lpVtbl->AddSearchPath(p,a)\n#define IDirect3DRM_GetSearchPath(p,a,b)                          (p)->lpVtbl->GetSearchPath(p,a,b)\n#define IDirect3DRM_SetDefaultTextureColors(p,a)                  (p)->lpVtbl->SetDefaultTextureColors(p,a)\n#define IDirect3DRM_SetDefaultTextureShades(p,a)                  (p)->lpVtbl->SetDefaultTextureShades(p,a)\n#define IDirect3DRM_GetDevices(p,a)                               (p)->lpVtbl->GetDevices(p,a)\n#define IDirect3DRM_GetNamedObject(p,a,b)                         (p)->lpVtbl->GetNamedObject(p,a,b)\n#define IDirect3DRM_EnumerateObjects(p,a,b)                       (p)->lpVtbl->EnumerateObjects(p,a,b)\n#define IDirect3DRM_Load(p,a,b,c,d,e,f,g,h,i,j)                   (p)->lpVtbl->Load(p,a,b,c,d,e,f,g,h,i,j)\n#define IDirect3DRM_Tick(p,a)                                     (p)->lpVtbl->Tick(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRM_QueryInterface(p,a,b)                         (p)->QueryInterface(a,b)\n#define IDirect3DRM_AddRef(p)                                     (p)->AddRef()\n#define IDirect3DRM_Release(p)                                    (p)->Release()\n/*** IDirect3DRM methods ***/\n#define IDirect3DRM_CreateObject(p,a,b,c,d)                       (p)->CreateObject(a,b,c,d)\n#define IDirect3DRM_CreateFrame(p,a,b)                            (p)->CreateFrame(a,b)\n#define IDirect3DRM_CreateMesh(p,a)                               (p)->CreateMesh(a)\n#define IDirect3DRM_CreateMeshBuilder(p,a)                        (p)->CreateMeshBuilder(a)\n#define IDirect3DRM_CreateFace(p,a)                               (p)->CreateFace(a)\n#define IDirect3DRM_CreateAnimation(p,a)                          (p)->CreateAnimation(a)\n#define IDirect3DRM_CreateAnimationSet(p,a)                       (p)->CreateAnimationSet(a)\n#define IDirect3DRM_CreateTexture(p,a,b)                          (p)->CreateTexture(a,b)\n#define IDirect3DRM_CreateLight(p,a,b,c)                          (p)->CreateLight(a,b,c)\n#define IDirect3DRM_CreateLightRGB(p,a,b,c,d,e)                   (p)->CreateLightRGB(a,b,c,d,e)\n#define IDirect3DRM_CreateMaterial(p,a,b)                         (p)->CreateMaterial(a,b)\n#define IDirect3DRM_CreateDevice(p,a,b,c)                         (p)->CreateDevice(a,b,c)\n#define IDirect3DRM_CreateDeviceFromSurface(p,a,b,c,d)            (p)->CreateDeviceFromSurface(a,b,c,d)\n#define IDirect3DRM_CreateDeviceFromD3D(p,a,b,c)                  (p)->CreateDeviceFromD3D(a,b,c)\n#define IDirect3DRM_CreateDeviceFromClipper(p,a,b,c,d,e)          (p)->CreateDeviceFromClipper(a,b,c,d,e)\n#define IDirect3DRM_CreateTextureFromSurface(p,a,b)               (p)->CreateTextureFromSurface(a,b)\n#define IDirect3DRM_CreateShadow(p,a,b,c,d,e,f,g,h,i)             (p)->CreateShadow(a,b,c,d,e,f,g,h,i)\n#define IDirect3DRM_CreateViewport(p,a,b,c,d,e,f,g)               (p)->CreateViewport(a,b,c,d,e,f,g)\n#define IDirect3DRM_CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q) (p)->CreateWrap(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q)\n#define IDirect3DRM_CreateUserVisual(p,a,b,c)                     (p)->CreateUserVisual(a,b,c)\n#define IDirect3DRM_LoadTexture(p,a,b)                            (p)->LoadTexture(a,b)\n#define IDirect3DRM_LoadTextureFromResource(p,a,b)                (p)->LoadTextureFromResource(a,b)\n#define IDirect3DRM_SetSearchPath(p,a)                            (p)->SetSearchPath(a)\n#define IDirect3DRM_AddSearchPath(p,a)                            (p)->AddSearchPath(a)\n#define IDirect3DRM_GetSearchPath(p,a,b)                          (p)->GetSearchPath(a,b)\n#define IDirect3DRM_SetDefaultTextureColors(p,a)                  (p)->SetDefaultTextureColors(a)\n#define IDirect3DRM_SetDefaultTextureShades(p,a)                  (p)->SetDefaultTextureShades(a)\n#define IDirect3DRM_GetDevices(p,a)                               (p)->GetDevices(a)\n#define IDirect3DRM_GetNamedObject(p,a,b)                         (p)->GetNamedObject(a,b)\n#define IDirect3DRM_EnumerateObjects(p,a,b)                       (p)->EnumerateObjects(a,b)\n#define IDirect3DRM_Load(p,a,b,c,d,e,f,g,h,i,j)                   (p)->Load(a,b,c,d,e,f,g,h,i,j)\n#define IDirect3DRM_Tick(p,a)                                     (p)->Tick(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DRM2 interface\n */\n#ifdef WINE_NO_UNICODE_MACROS\n#undef GetClassName\n#endif\n#define INTERFACE IDirect3DRM2\nDECLARE_INTERFACE_(IDirect3DRM2,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRM2 methods ***/\n    STDMETHOD(CreateObject)(THIS_ REFCLSID clsid, IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(CreateFrame)(THIS_ IDirect3DRMFrame *parent, IDirect3DRMFrame2 **frame) PURE;\n    STDMETHOD(CreateMesh)(THIS_ IDirect3DRMMesh **mesh) PURE;\n    STDMETHOD(CreateMeshBuilder)(THIS_ IDirect3DRMMeshBuilder2 **mesh_builder) PURE;\n    STDMETHOD(CreateFace)(THIS_ IDirect3DRMFace **face) PURE;\n    STDMETHOD(CreateAnimation)(THIS_ IDirect3DRMAnimation **animation) PURE;\n    STDMETHOD(CreateAnimationSet)(THIS_ IDirect3DRMAnimationSet **set) PURE;\n    STDMETHOD(CreateTexture)(THIS_ D3DRMIMAGE *image, IDirect3DRMTexture2 **texture) PURE;\n    STDMETHOD(CreateLight)(THIS_ D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light) PURE;\n    STDMETHOD(CreateLightRGB)(THIS_ D3DRMLIGHTTYPE type, D3DVALUE r, D3DVALUE g, D3DVALUE b,\n            IDirect3DRMLight **light) PURE;\n    STDMETHOD(CreateMaterial)(THIS_ D3DVALUE power, IDirect3DRMMaterial **material) PURE;\n    STDMETHOD(CreateDevice)(THIS_ DWORD width, DWORD height, IDirect3DRMDevice2 **device) PURE;\n    STDMETHOD(CreateDeviceFromSurface)(THIS_ GUID *guid, IDirectDraw *ddraw,\n            IDirectDrawSurface *surface, IDirect3DRMDevice2 **device) PURE;\n    STDMETHOD(CreateDeviceFromD3D)(THIS_ IDirect3D2 *d3d, IDirect3DDevice2 *d3d_device,\n            IDirect3DRMDevice2 **device) PURE;\n    STDMETHOD(CreateDeviceFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid,\n            int width, int height, IDirect3DRMDevice2 **device) PURE;\n    STDMETHOD(CreateTextureFromSurface)(THIS_ IDirectDrawSurface *surface,\n            IDirect3DRMTexture2 **texture) PURE;\n    STDMETHOD(CreateShadow)(THIS_ IDirect3DRMVisual *visual, IDirect3DRMLight *light,\n            D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz,\n            IDirect3DRMVisual **shadow) PURE;\n    STDMETHOD(CreateViewport)(THIS_ IDirect3DRMDevice *device, IDirect3DRMFrame *camera,\n            DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport **viewport) PURE;\n    STDMETHOD(CreateWrap)(THIS_ D3DRMWRAPTYPE type, IDirect3DRMFrame *reference, D3DVALUE ox, D3DVALUE oy, D3DVALUE oz,\n        D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov,\n        D3DVALUE su, D3DVALUE sv, IDirect3DRMWrap **wrap) PURE;\n    STDMETHOD(CreateUserVisual)(THIS_ D3DRMUSERVISUALCALLBACK cb, void *ctx, IDirect3DRMUserVisual **visual) PURE;\n    STDMETHOD(LoadTexture)(THIS_ const char *filename, IDirect3DRMTexture2 **texture) PURE;\n    STDMETHOD(LoadTextureFromResource)(THIS_ HMODULE module, const char *resource_name,\n            const char *resource_type, IDirect3DRMTexture2 **texture) PURE;\n    STDMETHOD(SetSearchPath)(THIS_ const char *path) PURE;\n    STDMETHOD(AddSearchPath)(THIS_ const char *path) PURE;\n    STDMETHOD(GetSearchPath)(THIS_ DWORD *size, char *path) PURE;\n    STDMETHOD(SetDefaultTextureColors)(THIS_ DWORD) PURE;\n    STDMETHOD(SetDefaultTextureShades)(THIS_ DWORD) PURE;\n    STDMETHOD(GetDevices)(THIS_ IDirect3DRMDeviceArray **array) PURE;\n    STDMETHOD(GetNamedObject)(THIS_ const char *name, IDirect3DRMObject **object) PURE;\n    STDMETHOD(EnumerateObjects)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(Load)(THIS_ void *source, void *object_id, IID **iids, DWORD iid_count, D3DRMLOADOPTIONS flags,\n            D3DRMLOADCALLBACK load_cb, void *load_ctx, D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx,\n            IDirect3DRMFrame *parent_frame) PURE;\n    STDMETHOD(Tick)(THIS_ D3DVALUE) PURE;\n    STDMETHOD(CreateProgressiveMesh)(THIS_ IDirect3DRMProgressiveMesh **mesh) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRM2_QueryInterface(p,a,b)                         (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRM2_AddRef(p)                                     (p)->lpVtbl->AddRef(p)\n#define IDirect3DRM2_Release(p)                                    (p)->lpVtbl->Release(p)\n/*** IDirect3DRM2 methods ***/\n#define IDirect3DRM2_CreateObject(p,a,b,c,d)                       (p)->lpVtbl->CreateObject(p,a,b,c,d)\n#define IDirect3DRM2_CreateFrame(p,a,b)                            (p)->lpVtbl->CreateFrame(p,a,b)\n#define IDirect3DRM2_CreateMesh(p,a)                               (p)->lpVtbl->CreateMesh(p,a)\n#define IDirect3DRM2_CreateMeshBuilder(p,a)                        (p)->lpVtbl->CreateMeshBuilder(p,a)\n#define IDirect3DRM2_CreateFace(p,a)                               (p)->lpVtbl->CreateFace(p,a)\n#define IDirect3DRM2_CreateAnimation(p,a)                          (p)->lpVtbl->CreateAnimation(p,a)\n#define IDirect3DRM2_CreateAnimationSet(p,a)                       (p)->lpVtbl->CreateAnimationSet(p,a)\n#define IDirect3DRM2_CreateTexture(p,a,b)                          (p)->lpVtbl->CreateTexture(p,a,b)\n#define IDirect3DRM2_CreateLight(p,a,b,c)                          (p)->lpVtbl->CreateLight(p,a,b,c)\n#define IDirect3DRM2_CreateLightRGB(p,a,b,c,d,e)                   (p)->lpVtbl->CreateLightRGB(p,a,b,c,d,e)\n#define IDirect3DRM2_CreateMaterial(p,a,b)                         (p)->lpVtbl->CreateMaterial(p,a,b)\n#define IDirect3DRM2_CreateDevice(p,a,b,c)                         (p)->lpVtbl->CreateDevice(p,a,b,c)\n#define IDirect3DRM2_CreateDeviceFromSurface(p,a,b,c,d)            (p)->lpVtbl->CreateDeviceFromSurface(p,a,b,c,d)\n#define IDirect3DRM2_CreateDeviceFromD3D(p,a,b,c)                  (p)->lpVtbl->CreateDeviceFromD3D(p,a,b,c)\n#define IDirect3DRM2_CreateDeviceFromClipper(p,a,b,c,d,e)          (p)->lpVtbl->CreateDeviceFromClipper(p,a,b,c,d,e)\n#define IDirect3DRM2_CreateTextureFromSurface(p,a,b)               (p)->lpVtbl->CreateTextureFromSurface(p,a,b)\n#define IDirect3DRM2_CreateShadow(p,a,b,c,d,e,f,g,h,i)             (p)->lpVtbl->CreateShadow(p,a,b,c,d,e,f,g,h,i)\n#define IDirect3DRM2_CreateViewport(p,a,b,c,d,e,f,g)               (p)->lpVtbl->CreateViewport(p,a,b,c,d,e,f,g)\n#define IDirect3DRM2_CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q) (p)->lpVtbl->CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q)\n#define IDirect3DRM2_CreateUserVisual(p,a,b,c)                     (p)->lpVtbl->CreateUserVisual(p,a,b,c)\n#define IDirect3DRM2_LoadTexture(p,a,b)                            (p)->lpVtbl->LoadTexture(p,a,b)\n#define IDirect3DRM2_LoadTextureFromResource(p,a,b,c,d)            (p)->lpVtbl->LoadTextureFromResource(p,a,b,c,d)\n#define IDirect3DRM2_SetSearchPath(p,a)                            (p)->lpVtbl->SetSearchPath(p,a)\n#define IDirect3DRM2_AddSearchPath(p,a)                            (p)->lpVtbl->AddSearchPath(p,a)\n#define IDirect3DRM2_GetSearchPath(p,a,b)                          (p)->lpVtbl->GetSearchPath(p,a,b)\n#define IDirect3DRM2_SetDefaultTextureColors(p,a)                  (p)->lpVtbl->SetDefaultTextureColors(p,a)\n#define IDirect3DRM2_SetDefaultTextureShades(p,a)                  (p)->lpVtbl->SetDefaultTextureShades(p,a)\n#define IDirect3DRM2_GetDevices(p,a)                               (p)->lpVtbl->GetDevices(p,a)\n#define IDirect3DRM2_GetNamedObject(p,a,b)                         (p)->lpVtbl->GetNamedObject(p,a,b)\n#define IDirect3DRM2_EnumerateObjects(p,a,b)                       (p)->lpVtbl->EnumerateObjects(p,a,b)\n#define IDirect3DRM2_Load(p,a,b,c,d,e,f,g,h,i,j)                   (p)->lpVtbl->Load(p,a,b,c,d,e,f,g,h,i,j)\n#define IDirect3DRM2_Tick(p,a)                                     (p)->lpVtbl->Tick(p,a)\n#define IDirect3DRM2_CreateProgressiveMesh(p,a)                    (p)->lpVtbl->CreateProgressiveMesh(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRM2_QueryInterface(p,a,b)                         (p)->QueryInterface(a,b)\n#define IDirect3DRM2_AddRef(p)                                     (p)->AddRef()\n#define IDirect3DRM2_Release(p)                                    (p)->Release()\n/*** IDirect3DRM2 methods ***/\n#define IDirect3DRM2_CreateObject(p,a,b,c,d)                       (p)->CreateObject(a,b,c,d)\n#define IDirect3DRM2_CreateFrame(p,a,b)                            (p)->CreateFrame(a,b)\n#define IDirect3DRM2_CreateMesh(p,a)                               (p)->CreateMesh(a)\n#define IDirect3DRM2_CreateMeshBuilder(p,a)                        (p)->CreateMeshBuilder(a)\n#define IDirect3DRM2_CreateFace(p,a)                               (p)->CreateFace(a)\n#define IDirect3DRM2_CreateAnimation(p,a)                          (p)->CreateAnimation(a)\n#define IDirect3DRM2_CreateAnimationSet(p,a)                       (p)->CreateAnimationSet(a)\n#define IDirect3DRM2_CreateTexture(p,a,b)                          (p)->CreateTexture(a,b)\n#define IDirect3DRM2_CreateLight(p,a,b,c)                          (p)->CreateLight(a,b,c)\n#define IDirect3DRM2_CreateLightRGB(p,a,b,c,d,e)                   (p)->CreateLightRGB(a,b,c,d,e)\n#define IDirect3DRM2_CreateMaterial(p,a,b)                         (p)->CreateMaterial(a,b)\n#define IDirect3DRM2_CreateDevice(p,a,b,c)                         (p)->CreateDevice(a,b,c)\n#define IDirect3DRM2_CreateDeviceFromSurface(p,a,b,c,d)            (p)->CreateDeviceFromSurface(a,b,c,d)\n#define IDirect3DRM2_CreateDeviceFromD3D(p,a,b,c)                  (p)->CreateDeviceFromD3D(a,b,c)\n#define IDirect3DRM2_CreateDeviceFromClipper(p,a,b,c,d,e)          (p)->CreateDeviceFromClipper(a,b,c,d,e)\n#define IDirect3DRM2_CreateTextureFromSurface(p,a,b)               (p)->CreateTextureFromSurface(a,b)\n#define IDirect3DRM2_CreateShadow(p,a,b,c,d,e,f,g,h,i)             (p)->CreateShadow(a,b,c,d,e,f,g,h,i)\n#define IDirect3DRM2_CreateViewport(p,a,b,c,d,e,f,g)               (p)->CreateViewport(a,b,c,d,e,f,g)\n#define IDirect3DRM2_CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q) (p)->CreateWrap(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q)\n#define IDirect3DRM2_CreateUserVisual(p,a,b,c)                     (p)->CreateUserVisual(a,b,c)\n#define IDirect3DRM2_LoadTexture(p,a,b)                            (p)->LoadTexture(a,b)\n#define IDirect3DRM2_LoadTextureFromResource(p,a,b,c,d)            (p)->LoadTextureFromResource(a,b,c,d)\n#define IDirect3DRM2_SetSearchPath(p,a)                            (p)->SetSearchPath(a)\n#define IDirect3DRM2_AddSearchPath(p,a)                            (p)->AddSearchPath(a)\n#define IDirect3DRM2_GetSearchPath(p,a,b)                          (p)->GetSearchPath(a,b)\n#define IDirect3DRM2_SetDefaultTextureColors(p,a)                  (p)->SetDefaultTextureColors(a)\n#define IDirect3DRM2_SetDefaultTextureShades(p,a)                  (p)->SetDefaultTextureShades(a)\n#define IDirect3DRM2_GetDevices(p,a)                               (p)->GetDevices(a)\n#define IDirect3DRM2_GetNamedObject(p,a,b)                         (p)->GetNamedObject(a,b)\n#define IDirect3DRM2_EnumerateObjects(p,a,b)                       (p)->EnumerateObjects(a,b)\n#define IDirect3DRM2_Load(p,a,b,c,d,e,f,g,h,i,j)                   (p)->Load(a,b,c,d,e,f,g,h,i,j)\n#define IDirect3DRM2_Tick(p,a)                                     (p)->Tick(a)\n#define IDirect3DRM2_CreateProgressiveMesh(p,a)                    (p)->CreateProgressiveMesh(p,a)\n#endif\n\n/*****************************************************************************\n * IDirect3DRM3 interface\n */\n#ifdef WINE_NO_UNICODE_MACROS\n#undef GetClassName\n#endif\n#define INTERFACE IDirect3DRM3\nDECLARE_INTERFACE_(IDirect3DRM3,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRM2 methods ***/\n    STDMETHOD(CreateObject)(THIS_ REFCLSID clsid, IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(CreateFrame)(THIS_ IDirect3DRMFrame3 *parent, IDirect3DRMFrame3 **frame) PURE;\n    STDMETHOD(CreateMesh)(THIS_ IDirect3DRMMesh **mesh) PURE;\n    STDMETHOD(CreateMeshBuilder)(THIS_ IDirect3DRMMeshBuilder3 **mesh_builder) PURE;\n    STDMETHOD(CreateFace)(THIS_ IDirect3DRMFace2 **face) PURE;\n    STDMETHOD(CreateAnimation)(THIS_ IDirect3DRMAnimation2 **animation) PURE;\n    STDMETHOD(CreateAnimationSet)(THIS_ IDirect3DRMAnimationSet2 **set) PURE;\n    STDMETHOD(CreateTexture)(THIS_ D3DRMIMAGE *image, IDirect3DRMTexture3 **texture) PURE;\n    STDMETHOD(CreateLight)(THIS_ D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light) PURE;\n    STDMETHOD(CreateLightRGB)(THIS_ D3DRMLIGHTTYPE type, D3DVALUE r, D3DVALUE g, D3DVALUE b,\n            IDirect3DRMLight **light) PURE;\n    STDMETHOD(CreateMaterial)(THIS_ D3DVALUE, IDirect3DRMMaterial2 **material) PURE;\n    STDMETHOD(CreateDevice)(THIS_ DWORD width, DWORD height, IDirect3DRMDevice3 **device) PURE;\n    STDMETHOD(CreateDeviceFromSurface)(THIS_ GUID *guid, IDirectDraw *ddraw,\n            IDirectDrawSurface *surface, DWORD flags, IDirect3DRMDevice3 **device) PURE;\n    STDMETHOD(CreateDeviceFromD3D)(THIS_ IDirect3D2 *d3d, IDirect3DDevice2 *d3d_device,\n            IDirect3DRMDevice3 **device) PURE;\n    STDMETHOD(CreateDeviceFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid,\n            int width, int height, IDirect3DRMDevice3 **device) PURE;\n    STDMETHOD(CreateTextureFromSurface)(THIS_ IDirectDrawSurface *surface,\n            IDirect3DRMTexture3 **texture) PURE;\n    STDMETHOD(CreateShadow)(THIS_ IUnknown *object, IDirect3DRMLight *light, D3DVALUE px, D3DVALUE py, D3DVALUE pz,\n            D3DVALUE nx, D3DVALUE ny, D3DVALUE nz, IDirect3DRMShadow2 **shadow) PURE;\n    STDMETHOD(CreateViewport)(THIS_ IDirect3DRMDevice3 *device, IDirect3DRMFrame3 *camera,\n            DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport2 **viewport) PURE;\n    STDMETHOD(CreateWrap)(THIS_ D3DRMWRAPTYPE type, IDirect3DRMFrame3 *reference,\n            D3DVALUE ox, D3DVALUE oy, D3DVALUE oz, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,\n            D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv,\n            IDirect3DRMWrap **wrap) PURE;\n    STDMETHOD(CreateUserVisual)(THIS_ D3DRMUSERVISUALCALLBACK cb, void *ctx, IDirect3DRMUserVisual **visual) PURE;\n    STDMETHOD(LoadTexture)(THIS_ const char *filename, IDirect3DRMTexture3 **texture) PURE;\n    STDMETHOD(LoadTextureFromResource)(THIS_ HMODULE module, const char *resource_name,\n            const char *resource_type, IDirect3DRMTexture3 **texture) PURE;\n    STDMETHOD(SetSearchPath)(THIS_ const char *path) PURE;\n    STDMETHOD(AddSearchPath)(THIS_ const char *path) PURE;\n    STDMETHOD(GetSearchPath)(THIS_ DWORD *size, char *path) PURE;\n    STDMETHOD(SetDefaultTextureColors)(THIS_ DWORD) PURE;\n    STDMETHOD(SetDefaultTextureShades)(THIS_ DWORD) PURE;\n    STDMETHOD(GetDevices)(THIS_ IDirect3DRMDeviceArray **array) PURE;\n    STDMETHOD(GetNamedObject)(THIS_ const char *name, IDirect3DRMObject **object) PURE;\n    STDMETHOD(EnumerateObjects)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(Load)(THIS_ void *source, void *object_id, IID **iids, DWORD iid_count, D3DRMLOADOPTIONS flags,\n            D3DRMLOADCALLBACK load_cb, void *load_ctx, D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx,\n            IDirect3DRMFrame3 *parent_frame) PURE;\n    STDMETHOD(Tick)(THIS_ D3DVALUE) PURE;\n    STDMETHOD(CreateProgressiveMesh)(THIS_ IDirect3DRMProgressiveMesh **mesh) PURE;\n    STDMETHOD(RegisterClient)(THIS_ REFGUID guid, DWORD *id) PURE;\n    STDMETHOD(UnregisterClient)(THIS_ REFGUID rguid) PURE;\n    STDMETHOD(CreateClippedVisual)(THIS_ IDirect3DRMVisual *visual, IDirect3DRMClippedVisual **clipped_visual) PURE;\n    STDMETHOD(SetOptions)(THIS_ DWORD) PURE;\n    STDMETHOD(GetOptions)(THIS_ DWORD *flags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRM3_QueryInterface(p,a,b)                         (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRM3_AddRef(p)                                     (p)->lpVtbl->AddRef(p)\n#define IDirect3DRM3_Release(p)                                    (p)->lpVtbl->Release(p)\n/*** IDirect3DRM3 methods ***/\n#define IDirect3DRM3_CreateObject(p,a,b,c,d)                       (p)->lpVtbl->CreateObject(p,a,b,c,d)\n#define IDirect3DRM3_CreateFrame(p,a,b)                            (p)->lpVtbl->CreateFrame(p,a,b)\n#define IDirect3DRM3_CreateMesh(p,a)                               (p)->lpVtbl->CreateMesh(p,a)\n#define IDirect3DRM3_CreateMeshBuilder(p,a)                        (p)->lpVtbl->CreateMeshBuilder(p,a)\n#define IDirect3DRM3_CreateFace(p,a)                               (p)->lpVtbl->CreateFace(p,a)\n#define IDirect3DRM3_CreateAnimation(p,a)                          (p)->lpVtbl->CreateAnimation(p,a)\n#define IDirect3DRM3_CreateAnimationSet(p,a)                       (p)->lpVtbl->CreateAnimationSet(p,a)\n#define IDirect3DRM3_CreateTexture(p,a,b)                          (p)->lpVtbl->CreateTexture(p,a,b)\n#define IDirect3DRM3_CreateLight(p,a,b,c)                          (p)->lpVtbl->CreateLight(p,a,b,c)\n#define IDirect3DRM3_CreateLightRGB(p,a,b,c,d,e)                   (p)->lpVtbl->CreateLightRGB(p,a,b,c,d,e)\n#define IDirect3DRM3_CreateMaterial(p,a,b)                         (p)->lpVtbl->CreateMaterial(p,a,b)\n#define IDirect3DRM3_CreateDevice(p,a,b,c)                         (p)->lpVtbl->CreateDevice(p,a,b,c)\n#define IDirect3DRM3_CreateDeviceFromSurface(p,a,b,c,d,e)          (p)->lpVtbl->CreateDeviceFromSurface(p,a,b,c,d,e)\n#define IDirect3DRM3_CreateDeviceFromD3D(p,a,b,c)                  (p)->lpVtbl->CreateDeviceFromD3D(p,a,b,c)\n#define IDirect3DRM3_CreateDeviceFromClipper(p,a,b,c,d,e)          (p)->lpVtbl->CreateDeviceFromClipper(p,a,b,c,d,e)\n#define IDirect3DRM3_CreateTextureFromSurface(p,a,b)               (p)->lpVtbl->CreateTextureFromSurface(p,a,b)\n#define IDirect3DRM3_CreateShadow(p,a,b,c,d,e,f,g,h,i)             (p)->lpVtbl->CreateShadow(p,a,b,c,d,e,f,g,h,i)\n#define IDirect3DRM3_CreateViewport(p,a,b,c,d,e,f,g)               (p)->lpVtbl->CreateViewport(p,a,b,c,d,e,f,g)\n#define IDirect3DRM3_CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q) (p)->lpVtbl->CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q)\n#define IDirect3DRM3_CreateUserVisual(p,a,b,c)                     (p)->lpVtbl->CreateUserVisual(p,a,b,c)\n#define IDirect3DRM3_LoadTexture(p,a,b)                            (p)->lpVtbl->LoadTexture(p,a,b)\n#define IDirect3DRM3_LoadTextureFromResource(p,a,b,c,d)            (p)->lpVtbl->LoadTextureFromResource(p,a,b,c,d)\n#define IDirect3DRM3_SetSearchPath(p,a)                            (p)->lpVtbl->SetSearchPath(p,a)\n#define IDirect3DRM3_AddSearchPath(p,a)                            (p)->lpVtbl->AddSearchPath(p,a)\n#define IDirect3DRM3_GetSearchPath(p,a,b)                          (p)->lpVtbl->GetSearchPath(p,a,b)\n#define IDirect3DRM3_SetDefaultTextureColors(p,a)                  (p)->lpVtbl->SetDefaultTextureColors(p,a)\n#define IDirect3DRM3_SetDefaultTextureShades(p,a)                  (p)->lpVtbl->SetDefaultTextureShades(p,a)\n#define IDirect3DRM3_GetDevices(p,a)                               (p)->lpVtbl->GetDevices(p,a)\n#define IDirect3DRM3_GetNamedObject(p,a,b)                         (p)->lpVtbl->GetNamedObject(p,a,b)\n#define IDirect3DRM3_EnumerateObjects(p,a,b)                       (p)->lpVtbl->EnumerateObjects(p,a,b)\n#define IDirect3DRM3_Load(p,a,b,c,d,e,f,g,h,i,j)                   (p)->lpVtbl->Load(p,a,b,c,d,e,f,g,h,i,j)\n#define IDirect3DRM3_Tick(p,a)                                     (p)->lpVtbl->Tick(p,a)\n#define IDirect3DRM3_CreateProgressiveMesh(p,a)                    (p)->lpVtbl->CreateProgressiveMesh(p,a)\n#define IDirect3DRM3_RegisterClient(p,a,b)                         (p)->lpVtbl->RegisterClient(p,a,b)\n#define IDirect3DRM3_UnregisterClient(p,a)                         (p)->lpVtbl->UnregisterClient(p,a)\n#define IDirect3DRM3_CreateClippedVisual(p,ab)                     (p)->lpVtbl->CreateClippedVisual(p,a,b)\n#define IDirect3DRM3_SetOptions(p,a)                               (p)->lpVtbl->SetOptions(p,a)\n#define IDirect3DRM3_GetOptions(p,a)                               (p)->lpVtbl->GetOptions(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRM3_QueryInterface(p,a,b)                         (p)->QueryInterface(a,b)\n#define IDirect3DRM3_AddRef(p)                                     (p)->AddRef()\n#define IDirect3DRM3_Release(p)                                    (p)->Release()\n/*** IDirect3DRM3 methods ***/\n#define IDirect3DRM3_CreateObject(p,a,b,c,d)                       (p)->CreateObject(a,b,c,d)\n#define IDirect3DRM3_CreateFrame(p,a,b)                            (p)->CreateFrame(a,b)\n#define IDirect3DRM3_CreateMesh(p,a)                               (p)->CreateMesh(a)\n#define IDirect3DRM3_CreateMeshBuilder(p,a)                        (p)->CreateMeshBuilder(a)\n#define IDirect3DRM3_CreateFace(p,a)                               (p)->CreateFace(a)\n#define IDirect3DRM3_CreateAnimation(p,a)                          (p)->CreateAnimation(a)\n#define IDirect3DRM3_CreateAnimationSet(p,a)                       (p)->CreateAnimationSet(a)\n#define IDirect3DRM3_CreateTexture(p,a,b)                          (p)->CreateTexture(a,b)\n#define IDirect3DRM3_CreateLight(p,a,b,c)                          (p)->CreateLight(a,b,c)\n#define IDirect3DRM3_CreateLightRGB(p,a,b,c,d,e)                   (p)->CreateLightRGB(a,b,c,d,e)\n#define IDirect3DRM3_CreateMaterial(p,a,b)                         (p)->CreateMaterial(a,b)\n#define IDirect3DRM3_CreateDevice(p,a,b,c)                         (p)->CreateDevice(a,b,c)\n#define IDirect3DRM3_CreateDeviceFromSurface(p,a,b,c,d,e)          (p)->CreateDeviceFromSurface(a,b,c,d,e)\n#define IDirect3DRM3_CreateDeviceFromD3D(p,a,b,c)                  (p)->CreateDeviceFromD3D(a,b,c)\n#define IDirect3DRM3_CreateDeviceFromClipper(p,a,b,c,d,e)          (p)->CreateDeviceFromClipper(a,b,c,d,e)\n#define IDirect3DRM3_CreateTextureFromSurface(p,a,b)               (p)->CreateTextureFromSurface(a,b)\n#define IDirect3DRM3_CreateShadow(p,a,b,c,d,e,f,g,h,i)             (p)->CreateShadow(a,b,c,d,e,f,g,h,i)\n#define IDirect3DRM3_CreateViewport(p,a,b,c,d,e,f,g)               (p)->CreateViewport(a,b,c,d,e,f,g)\n#define IDirect3DRM3_CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q) (p)->CreateWrap(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q)\n#define IDirect3DRM3_CreateUserVisual(p,a,b,c)                     (p)->CreateUserVisual(a,b,c)\n#define IDirect3DRM3_LoadTexture(p,a,b)                            (p)->LoadTexture(a,b)\n#define IDirect3DRM3_LoadTextureFromResource(p,a,b,c,d)            (p)->LoadTextureFromResource(a,b,c,d)\n#define IDirect3DRM3_SetSearchPath(p,a)                            (p)->SetSearchPath(a)\n#define IDirect3DRM3_AddSearchPath(p,a)                            (p)->AddSearchPath(a)\n#define IDirect3DRM3_GetSearchPath(p,a,b)                          (p)->GetSearchPath(a,b)\n#define IDirect3DRM3_SetDefaultTextureColors(p,a)                  (p)->SetDefaultTextureColors(a)\n#define IDirect3DRM3_SetDefaultTextureShades(p,a)                  (p)->SetDefaultTextureShades(a)\n#define IDirect3DRM3_GetDevices(p,a)                               (p)->GetDevices(a)\n#define IDirect3DRM3_GetNamedObject(p,a,b)                         (p)->GetNamedObject(a,b)\n#define IDirect3DRM3_EnumerateObjects(p,a,b)                       (p)->EnumerateObjects(a,b)\n#define IDirect3DRM3_Load(p,a,b,c,d,e,f,g,h,i,j)                   (p)->Load(a,b,c,d,e,f,g,h,i,j)\n#define IDirect3DRM3_Tick(p,a)                                     (p)->Tick(a)\n#define IDirect3DRM3_CreateProgressiveMesh(p,a)                    (p)->CreateProgressiveMesh(p,a)\n#define IDirect3DRM3_RegisterClient(p,a,b)                         (p)->RegisterClient(p,a,b)\n#define IDirect3DRM3_UnregisterClient(p,a)                         (p)->UnregisterClient(p,a)\n#define IDirect3DRM3_CreateClippedVisual(p,ab)                     (p)->CreateClippedVisual(p,a,b)\n#define IDirect3DRM3_SetOptions(p,a)                               (p)->SetOptions(p,a)\n#define IDirect3DRM3_GetOptions(p,a)                               (p)->GetOptions(p,a)\n#endif\n\n#define D3DRM_OK                        DD_OK\n#define D3DRMERR_BADOBJECT              MAKE_DDHRESULT(781)\n#define D3DRMERR_BADTYPE                MAKE_DDHRESULT(782)\n#define D3DRMERR_BADALLOC               MAKE_DDHRESULT(783)\n#define D3DRMERR_FACEUSED               MAKE_DDHRESULT(784)\n#define D3DRMERR_NOTFOUND               MAKE_DDHRESULT(785)\n#define D3DRMERR_NOTDONEYET             MAKE_DDHRESULT(786)\n#define D3DRMERR_FILENOTFOUND           MAKE_DDHRESULT(787)\n#define D3DRMERR_BADFILE                MAKE_DDHRESULT(788)\n#define D3DRMERR_BADDEVICE              MAKE_DDHRESULT(789)\n#define D3DRMERR_BADVALUE               MAKE_DDHRESULT(790)\n#define D3DRMERR_BADMAJORVERSION        MAKE_DDHRESULT(791)\n#define D3DRMERR_BADMINORVERSION        MAKE_DDHRESULT(792)\n#define D3DRMERR_UNABLETOEXECUTE        MAKE_DDHRESULT(793)\n#define D3DRMERR_LIBRARYNOTFOUND        MAKE_DDHRESULT(794)\n#define D3DRMERR_INVALIDLIBRARY         MAKE_DDHRESULT(795)\n#define D3DRMERR_PENDING                MAKE_DDHRESULT(796)\n#define D3DRMERR_NOTENOUGHDATA          MAKE_DDHRESULT(797)\n#define D3DRMERR_REQUESTTOOLARGE        MAKE_DDHRESULT(798)\n#define D3DRMERR_REQUESTTOOSMALL        MAKE_DDHRESULT(799)\n#define D3DRMERR_CONNECTIONLOST         MAKE_DDHRESULT(800)\n#define D3DRMERR_LOADABORTED            MAKE_DDHRESULT(801)\n#define D3DRMERR_NOINTERNET             MAKE_DDHRESULT(802)\n#define D3DRMERR_BADCACHEFILE           MAKE_DDHRESULT(803)\n#define D3DRMERR_BOXNOTSET              MAKE_DDHRESULT(804)\n#define D3DRMERR_BADPMDATA              MAKE_DDHRESULT(805)\n#define D3DRMERR_CLIENTNOTREGISTERED    MAKE_DDHRESULT(806)\n#define D3DRMERR_NOTCREATEDFROMDDS      MAKE_DDHRESULT(807)\n#define D3DRMERR_NOSUCHKEY              MAKE_DDHRESULT(808)\n#define D3DRMERR_INCOMPATABLEKEY        MAKE_DDHRESULT(809)\n#define D3DRMERR_ELEMENTINUSE           MAKE_DDHRESULT(810)\n#define D3DRMERR_TEXTUREFORMATNOTFOUND  MAKE_DDHRESULT(811)\n#define D3DRMERR_NOTAGGREGATED          MAKE_DDHRESULT(812)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __D3DRM_H__ */\n"
  },
  {
    "path": "wine/windows/d3drmdef.h",
    "content": "/*\n * Copyright 2007,2010 Vijay Kiran Kamuju\n * Copyright 2007 David ADAM\n * Copyright 2010 Christian Costa\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __D3DRMDEFS_H__\n#define __D3DRMDEFS_H__\n\n#include <stddef.h>\n#include <d3dtypes.h>\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\ntypedef struct _D3DRMVECTOR4D\n{\n    D3DVALUE x;\n    D3DVALUE y;\n    D3DVALUE z;\n    D3DVALUE w;\n} D3DRMVECTOR4D, *LPD3DRMVECTOR4D;\n\ntypedef D3DVALUE D3DRMMATRIX4D[4][4];\n\ntypedef struct _D3DRMQUATERNION {\n    D3DVALUE s;\n    D3DVECTOR v;\n} D3DRMQUATERNION, *LPD3DRMQUATERNION;\n\ntypedef struct _D3DRMRAY {\n    D3DVECTOR dvDir;\n    D3DVECTOR dvPos;\n} D3DRMRAY, *LPD3DRMRAY;\n\ntypedef struct _D3DRMBOX {\n    D3DVECTOR min;\n    D3DVECTOR max;\n} D3DRMBOX, *LPD3DRMBOX;\n\ntypedef void (*D3DRMWRAPCALLBACK)(D3DVECTOR *vec, int *u, int *v, D3DVECTOR *a, D3DVECTOR *b, void *ctx);\n\ntypedef enum _D3DRMLIGHTTYPE {\n    D3DRMLIGHT_AMBIENT,\n    D3DRMLIGHT_POINT,\n    D3DRMLIGHT_SPOT,\n    D3DRMLIGHT_DIRECTIONAL,\n    D3DRMLIGHT_PARALLELPOINT\n} D3DRMLIGHTTYPE, *LPD3DRMLIGHTTYPE;\n\ntypedef enum _D3DRMSHADEMODE {\n    D3DRMSHADE_FLAT     = 0,\n    D3DRMSHADE_GOURAUD  = 1,\n    D3DRMSHADE_PHONG    = 2,\n    D3DRMSHADE_MASK     = 7,\n    D3DRMSHADE_MAX      = 8\n} D3DRMSHADEMODE, *LPD3DRMSHADEMODE;\n\ntypedef enum _D3DRMLIGHTMODE {\n    D3DRMLIGHT_OFF      = 0 * D3DRMSHADE_MAX,\n    D3DRMLIGHT_ON       = 1 * D3DRMSHADE_MAX,\n    D3DRMLIGHT_MASK     = 7 * D3DRMSHADE_MAX,\n    D3DRMLIGHT_MAX      = 8 * D3DRMSHADE_MAX\n} D3DRMLIGHTMODE, *LPD3DRMLIGHTMODE;\n\ntypedef enum _D3DRMFILLMODE {\n    D3DRMFILL_POINTS    = 0 * D3DRMLIGHT_MAX,\n    D3DRMFILL_WIREFRAME\t= 1 * D3DRMLIGHT_MAX,\n    D3DRMFILL_SOLID     = 2 * D3DRMLIGHT_MAX,\n    D3DRMFILL_MASK      = 7 * D3DRMLIGHT_MAX,\n    D3DRMFILL_MAX       = 8 * D3DRMLIGHT_MAX\n} D3DRMFILLMODE, *LPD3DRMFILLMODE;\n\ntypedef DWORD D3DRMRENDERQUALITY, *LPD3DRMRENDERQUALITY;\n\n#define D3DRMRENDER_WIREFRAME   (D3DRMSHADE_FLAT+D3DRMLIGHT_OFF+D3DRMFILL_WIREFRAME)\n#define D3DRMRENDER_UNLITFLAT   (D3DRMSHADE_FLAT+D3DRMLIGHT_OFF+D3DRMFILL_SOLID)\n#define D3DRMRENDER_FLAT        (D3DRMSHADE_FLAT+D3DRMLIGHT_ON+D3DRMFILL_SOLID)\n#define D3DRMRENDER_GOURAUD     (D3DRMSHADE_GOURAUD+D3DRMLIGHT_ON+D3DRMFILL_SOLID)\n#define D3DRMRENDER_PHONG       (D3DRMSHADE_PHONG+D3DRMLIGHT_ON+D3DRMFILL_SOLID)\n\n#define D3DRMRENDERMODE_BLENDEDTRANSPARENCY       1\n#define D3DRMRENDERMODE_SORTEDTRANSPARENCY        2\n#define D3DRMRENDERMODE_LIGHTINMODELSPACE         8\n#define D3DRMRENDERMODE_VIEWDEPENDENTSPECULAR    16\n#define D3DRMRENDERMODE_DISABLESORTEDALPHAZWRITE 32\n\ntypedef enum _D3DRMTEXTUREQUALITY {\n    D3DRMTEXTURE_NEAREST,\n    D3DRMTEXTURE_LINEAR,\n    D3DRMTEXTURE_MIPNEAREST,\n    D3DRMTEXTURE_MIPLINEAR,\n    D3DRMTEXTURE_LINEARMIPNEAREST,\n    D3DRMTEXTURE_LINEARMIPLINEAR\n} D3DRMTEXTUREQUALITY, *LPD3DRMTEXTUREQUALITY;\n\n#define D3DRMTEXTURE_FORCERESIDENT          0x00000001\n#define D3DRMTEXTURE_STATIC                 0x00000002\n#define D3DRMTEXTURE_DOWNSAMPLEPOINT        0x00000004\n#define D3DRMTEXTURE_DOWNSAMPLEBILINEAR\t    0x00000008\n#define D3DRMTEXTURE_DOWNSAMPLEREDUCEDEPTH  0x00000010\n#define D3DRMTEXTURE_DOWNSAMPLENONE         0x00000020\n#define D3DRMTEXTURE_CHANGEDPIXELS          0x00000040\n#define D3DRMTEXTURE_CHANGEDPALETTE         0x00000080\n#define D3DRMTEXTURE_INVALIDATEONLY         0x00000100\n\n#define D3DRMSHADOW_TRUEALPHA               0x00000001\n\ntypedef enum _D3DRMCOMBINETYPE {\n    D3DRMCOMBINE_REPLACE,\n    D3DRMCOMBINE_BEFORE,\n    D3DRMCOMBINE_AFTER\n} D3DRMCOMBINETYPE, *LPD3DRMCOMBINETYPE;\n\ntypedef D3DCOLORMODEL D3DRMCOLORMODEL, *LPD3DRMCOLORMODEL;\n\ntypedef enum _D3DRMPALETTEFLAGS\n{\n    D3DRMPALETTE_FREE,\n    D3DRMPALETTE_READONLY,\n    D3DRMPALETTE_RESERVED\n} D3DRMPALETTEFLAGS, *LPD3DRMPALETTEFLAGS;\n\ntypedef struct _D3DRMPALETTEENTRY {\n    unsigned char red;\n    unsigned char green;\n    unsigned char blue;\n    unsigned char flags;\n} D3DRMPALETTEENTRY, *LPD3DRMPALETTEENTRY;\n\ntypedef struct _D3DRMIMAGE {\n    int width;\n    int height;\n    int aspectx;\n    int aspecty;\n    int depth;\n    int rgb;\n    int bytes_per_line;\n    void* buffer1;\n    void* buffer2;\n    ULONG red_mask;\n    ULONG green_mask;\n    ULONG blue_mask;\n    ULONG alpha_mask;\n    int palette_size;\n    D3DRMPALETTEENTRY* palette;\n} D3DRMIMAGE, *LPD3DRMIMAGE;\n\ntypedef enum _D3DRMWRAPTYPE {\n    D3DRMWRAP_FLAT,\n    D3DRMWRAP_CYLINDER,\n    D3DRMWRAP_SPHERE,\n    D3DRMWRAP_CHROME,\n    D3DRMWRAP_SHEET,\n    D3DRMWRAP_BOX\n} D3DRMWRAPTYPE, *LPD3DRMWRAPTYPE;\n\n#define D3DRMWIREFRAME_CULL             1\n#define D3DRMWIREFRAME_HIDDENLINE       2\n\ntypedef enum _D3DRMPROJECTIONTYPE\n{\n    D3DRMPROJECT_PERSPECTIVE,\n    D3DRMPROJECT_ORTHOGRAPHIC,\n    D3DRMPROJECT_RIGHTHANDPERSPECTIVE,\n    D3DRMPROJECT_RIGHTHANDORTHOGRAPHIC\n} D3DRMPROJECTIONTYPE, *LPD3DRMPROJECTIONTYPE;\n\n#define D3DRMOPTIONS_LEFTHANDED  0x00000001\n#define D3DRMOPTIONS_RIGHTHANDED 0x00000002\n\ntypedef enum _D3DRMXOFFORMAT {\n    D3DRMXOF_BINARY,\n    D3DRMXOF_COMPRESSED,\n    D3DRMXOF_TEXT\n} D3DRMXOFFORMAT, *LPD3DRMXOFFORMAT;\n\ntypedef DWORD D3DRMSAVEOPTIONS;\n#define D3DRMXOFSAVE_NORMALS             1\n#define D3DRMXOFSAVE_TEXTURECOORDINATES  2\n#define D3DRMXOFSAVE_MATERIALS           4\n#define D3DRMXOFSAVE_TEXTURENAMES        8\n#define D3DRMXOFSAVE_ALL                15\n#define D3DRMXOFSAVE_TEMPLATES          16\n#define D3DRMXOFSAVE_TEXTURETOPOLOGY    32\n\ntypedef enum _D3DRMCOLORSOURCE {\n    D3DRMCOLOR_FROMFACE,\n    D3DRMCOLOR_FROMVERTEX\n} D3DRMCOLORSOURCE, *LPD3DRMCOLORSOURCE;\n\ntypedef enum _D3DRMFRAMECONSTRAINT {\n    D3DRMCONSTRAIN_Z,\n    D3DRMCONSTRAIN_Y,\n    D3DRMCONSTRAIN_X\n} D3DRMFRAMECONSTRAINT, *LPD3DRMFRAMECONSTRAINT;\n\ntypedef enum _D3DRMMATERIALMODE {\n    D3DRMMATERIAL_FROMMESH,\n    D3DRMMATERIAL_FROMPARENT,\n    D3DRMMATERIAL_FROMFRAME\n} D3DRMMATERIALMODE, *LPD3DRMMATERIALMODE;\n\ntypedef enum _D3DRMFOGMODE {\n    D3DRMFOG_LINEAR,\n    D3DRMFOG_EXPONENTIAL,\n    D3DRMFOG_EXPONENTIALSQUARED\n} D3DRMFOGMODE, *LPD3DRMFOGMODE;\n\ntypedef enum _D3DRMZBUFFERMODE {\n    D3DRMZBUFFER_FROMPARENT,\n    D3DRMZBUFFER_ENABLE,\n    D3DRMZBUFFER_DISABLE\n} D3DRMZBUFFERMODE, *LPD3DRMZBUFFERMODE;\n\ntypedef enum _D3DRMSORTMODE {\n    D3DRMSORT_FROMPARENT,\n    D3DRMSORT_NONE,\n    D3DRMSORT_FRONTTOBACK,\n    D3DRMSORT_BACKTOFRONT\n} D3DRMSORTMODE, *LPD3DRMSORTMODE;\n\ntypedef struct _D3DRMMATERIALOVERRIDE {\n    DWORD         dwSize;\n    DWORD         dwFlags;\n    D3DCOLORVALUE dcDiffuse;\n    D3DCOLORVALUE dcAmbient;\n    D3DCOLORVALUE dcEmissive;\n    D3DCOLORVALUE dcSpecular;\n    D3DVALUE      dvPower;\n    IUnknown *lpD3DRMTex;\n} D3DRMMATERIALOVERRIDE, *LPD3DRMMATERIALOVERRIDE;\n\n#define D3DRMMATERIALOVERRIDE_DIFFUSE_ALPHAONLY     0x00000001\n#define D3DRMMATERIALOVERRIDE_DIFFUSE_RGBONLY       0x00000002\n#define D3DRMMATERIALOVERRIDE_DIFFUSE               0x00000003\n#define D3DRMMATERIALOVERRIDE_AMBIENT               0x00000004\n#define D3DRMMATERIALOVERRIDE_EMISSIVE              0x00000008\n#define D3DRMMATERIALOVERRIDE_SPECULAR              0x00000010\n#define D3DRMMATERIALOVERRIDE_POWER                 0x00000020\n#define D3DRMMATERIALOVERRIDE_TEXTURE               0x00000040\n#define D3DRMMATERIALOVERRIDE_DIFFUSE_ALPHAMULTIPLY 0x00000080\n#define D3DRMMATERIALOVERRIDE_ALL                   0x000000FF\n\n#define D3DRMFPTF_ALPHA                             0x00000001\n#define D3DRMFPTF_NOALPHA                           0x00000002\n#define D3DRMFPTF_PALETTIZED                        0x00000004\n#define D3DRMFPTF_NOTPALETTIZED                     0x00000008\n\n#define D3DRMSTATECHANGE_UPDATEONLY                0x000000001\n#define D3DRMSTATECHANGE_VOLATILE                  0x000000002\n#define D3DRMSTATECHANGE_NONVOLATILE               0x000000004\n#define D3DRMSTATECHANGE_RENDER                    0x000000020\n#define D3DRMSTATECHANGE_LIGHT                     0x000000040\n\n#define D3DRMDEVICE_NOZBUFFER           0x00000001\n\n#define D3DRMCALLBACK_PREORDER\t\t0\n#define D3DRMCALLBACK_POSTORDER\t\t1\n\n#define D3DRMRAYPICK_ONLYBOUNDINGBOXES          0x01\n#define D3DRMRAYPICK_IGNOREFURTHERPRIMITIVES    0x02\n#define D3DRMRAYPICK_INTERPOLATEUV              0x04\n#define D3DRMRAYPICK_INTERPOLATECOLOR           0x08\n#define D3DRMRAYPICK_INTERPOLATENORMAL          0x10\n\n#define D3DRMADDFACES_VERTICESONLY              1\n\n#define D3DRMGENERATENORMALS_PRECOMPACT         1\n#define D3DRMGENERATENORMALS_USECREASEANGLE     2\n\n#define D3DRMMESHBUILDER_DIRECTPARENT           1\n#define D3DRMMESHBUILDER_ROOTMESH               2\n\n#define D3DRMMESHBUILDER_RENDERENABLE   0x00000001\n#define D3DRMMESHBUILDER_PICKENABLE     0x00000002\n\n#define D3DRMADDMESHBUILDER_DONTCOPYAPPDATA     1\n#define D3DRMADDMESHBUILDER_FLATTENSUBMESHES    2\n#define D3DRMADDMESHBUILDER_NOSUBMESHES         4\n\n#define D3DRMMESHBUILDERAGE_GEOMETRY    0x00000001\n#define D3DRMMESHBUILDERAGE_MATERIALS   0x00000002\n#define D3DRMMESHBUILDERAGE_TEXTURES    0x00000004\n\n#define D3DRMFVF_TYPE                   0x00000001\n#define D3DRMFVF_NORMAL                 0x00000002\n#define D3DRMFVF_COLOR                  0x00000004\n#define D3DRMFVF_TEXTURECOORDS          0x00000008\n\n#define D3DRMVERTEX_STRIP               0x00000001\n#define D3DRMVERTEX_FAN                 0x00000002\n#define D3DRMVERTEX_LIST                0x00000004\n\n#define D3DRMCLEAR_TARGET               0x00000001\n#define D3DRMCLEAR_ZBUFFER              0x00000002\n#define D3DRMCLEAR_DIRTYRECTS           0x00000004\n#define D3DRMCLEAR_ALL                  (D3DRMCLEAR_TARGET | D3DRMCLEAR_ZBUFFER | D3DRMCLEAR_DIRTYRECTS)\n\n#define D3DRMFOGMETHOD_VERTEX           0x00000001\n#define D3DRMFOGMETHOD_TABLE            0x00000002\n#define D3DRMFOGMETHOD_ANY              0x00000004\n\n#define D3DRMFRAME_RENDERENABLE         0x00000001\n#define D3DRMFRAME_PICKENABLE           0x00000002\n\ntypedef DWORD D3DRMANIMATIONOPTIONS;\n#define D3DRMANIMATION_OPEN             0x00000001\n#define D3DRMANIMATION_CLOSED           0x00000002\n#define D3DRMANIMATION_LINEARPOSITION   0x00000004\n#define D3DRMANIMATION_SPLINEPOSITION   0x00000008\n#define D3DRMANIMATION_SCALEANDROTATION 0x00000010\n#define D3DRMANIMATION_POSITION         0x00000020\n\ntypedef DWORD D3DRMINTERPOLATIONOPTIONS;\n#define D3DRMINTERPOLATION_OPEN         0x0001\n#define D3DRMINTERPOLATION_CLOSED       0x0002\n#define D3DRMINTERPOLATION_NEAREST      0x0100\n#define D3DRMINTERPOLATION_LINEAR       0x0004\n#define D3DRMINTERPOLATION_SPLINE       0x0008\n#define D3DRMINTERPOLATION_VERTEXCOLOR  0x0040\n#define D3DRMINTERPOLATION_SLERPNORMALS 0x0080\n\ntypedef DWORD D3DRMLOADOPTIONS;\n\n#define D3DRMLOAD_FROMFILE             __MSABI_LONG(0x000)\n#define D3DRMLOAD_FROMRESOURCE         __MSABI_LONG(0x001)\n#define D3DRMLOAD_FROMMEMORY           __MSABI_LONG(0x002)\n#define D3DRMLOAD_FROMSTREAM           __MSABI_LONG(0x004)\n#define D3DRMLOAD_FROMURL              __MSABI_LONG(0x008)\n\n#define D3DRMLOAD_BYNAME               __MSABI_LONG(0x010)\n#define D3DRMLOAD_BYPOSITION           __MSABI_LONG(0x020)\n#define D3DRMLOAD_BYGUID               __MSABI_LONG(0x040)\n#define D3DRMLOAD_FIRST                __MSABI_LONG(0x080)\n\n#define D3DRMLOAD_INSTANCEBYREFERENCE  __MSABI_LONG(0x100)\n#define D3DRMLOAD_INSTANCEBYCOPYING    __MSABI_LONG(0x200)\n\n#define D3DRMLOAD_ASYNCHRONOUS         __MSABI_LONG(0x400)\n\ntypedef struct _D3DRMLOADRESOURCE\n{\n    HMODULE hModule;\n    const char *lpName;\n    const char *lpType;\n} D3DRMLOADRESOURCE, *LPD3DRMLOADRESOURCE;\n\ntypedef struct _D3DRMLOADMEMORY\n{\n    void *lpMemory;\n    DWORD dSize;\n} D3DRMLOADMEMORY, *LPD3DRMLOADMEMORY;\n\n#define D3DRMPMESHSTATUS_VALID            0x01\n#define D3DRMPMESHSTATUS_INTERRUPTED      0x02\n#define D3DRMPMESHSTATUS_BASEMESHCOMPLETE 0x04\n#define D3DRMPMESHSTATUS_COMPLETE         0x08\n#define D3DRMPMESHSTATUS_RENDERABLE       0x10\n\n#define D3DRMPMESHEVENT_BASEMESH          0x01\n#define D3DRMPMESHEVENT_COMPLETE          0x02\n\ntypedef struct _D3DRMPMESHLOADSTATUS {\n    DWORD dwSize;\n    DWORD dwPMeshSize;\n    DWORD dwBaseMeshSize;\n    DWORD dwBytesLoaded;\n    DWORD dwVerticesLoaded;\n    DWORD dwFacesLoaded;\n    HRESULT dwLoadResult;\n    DWORD dwFlags;\n} D3DRMPMESHLOADSTATUS, *LPD3DRMPMESHLOADSTATUS;\n\ntypedef enum _D3DRMUSERVISUALREASON {\n    D3DRMUSERVISUAL_CANSEE,\n    D3DRMUSERVISUAL_RENDER\n} D3DRMUSERVISUALREASON, *LPD3DRMUSERVISUALREASON;\n\ntypedef struct _D3DRMANIMATIONKEY\n{\n    DWORD dwSize;\n    DWORD dwKeyType;\n    D3DVALUE dvTime;\n    DWORD dwID;\n#if !defined(__cplusplus) || !defined(D3D_OVERLOADS)\n    union\n    {\n\tD3DRMQUATERNION dqRotateKey;\n\tD3DVECTOR dvScaleKey;\n\tD3DVECTOR dvPositionKey;\n    } DUMMYUNIONNAME;\n#else\n    D3DVALUE dvK[4];\n#endif\n} D3DRMANIMATIONKEY;\ntypedef D3DRMANIMATIONKEY *LPD3DRMANIMATIONKEY;\n\n#define D3DRMANIMATION_ROTATEKEY   0x01\n#define D3DRMANIMATION_SCALEKEY    0x02\n#define D3DRMANIMATION_POSITIONKEY 0x03\n\ntypedef DWORD D3DRMMAPPING, D3DRMMAPPINGFLAG, *LPD3DRMMAPPING;\nstatic const D3DRMMAPPINGFLAG D3DRMMAP_WRAPU        = 1;\nstatic const D3DRMMAPPINGFLAG D3DRMMAP_WRAPV        = 2;\nstatic const D3DRMMAPPINGFLAG D3DRMMAP_PERSPCORRECT = 4;\n\ntypedef struct _D3DRMVERTEX {\n    D3DVECTOR position;\n    D3DVECTOR normal;\n    D3DVALUE  tu;\n    D3DVALUE  tv;\n    D3DCOLOR  color;\n} D3DRMVERTEX, *LPD3DRMVERTEX;\n\ntypedef LONG D3DRMGROUPINDEX;\nstatic const D3DRMGROUPINDEX D3DRMGROUP_ALLGROUPS = -1;\n\nvoid WINAPI D3DRMMatrixFromQuaternion(D3DRMMATRIX4D m, D3DRMQUATERNION *q);\n\nD3DRMQUATERNION * WINAPI D3DRMQuaternionFromRotation(D3DRMQUATERNION *x, D3DVECTOR *axis, D3DVALUE theta);\nD3DRMQUATERNION * WINAPI D3DRMQuaternionMultiply(D3DRMQUATERNION *ret, D3DRMQUATERNION *x, D3DRMQUATERNION *y);\nD3DRMQUATERNION * WINAPI D3DRMQuaternionSlerp(D3DRMQUATERNION *ret,\n        D3DRMQUATERNION *x, D3DRMQUATERNION *y, D3DVALUE alpha);\n\nD3DVECTOR * WINAPI D3DRMVectorAdd(D3DVECTOR *ret, D3DVECTOR *x, D3DVECTOR *y);\nD3DVECTOR * WINAPI D3DRMVectorCrossProduct(D3DVECTOR *ret, D3DVECTOR *x, D3DVECTOR *y);\nD3DVALUE WINAPI D3DRMVectorDotProduct(D3DVECTOR *x, D3DVECTOR *y);\nD3DVECTOR * WINAPI D3DRMVectorNormalize(D3DVECTOR *x);\n\n#define D3DRMVectorNormalise D3DRMVectorNormalize\n\nD3DVALUE WINAPI D3DRMVectorModulus(D3DVECTOR *x);\nD3DVECTOR * WINAPI D3DRMVectorRandom(D3DVECTOR *ret);\nD3DVECTOR * WINAPI D3DRMVectorRotate(D3DVECTOR *ret, D3DVECTOR *x, D3DVECTOR *axis, D3DVALUE theta);\nD3DVECTOR * WINAPI D3DRMVectorReflect(D3DVECTOR *ret, D3DVECTOR *ray, D3DVECTOR *normal);\nD3DVECTOR * WINAPI D3DRMVectorScale(D3DVECTOR *ret, D3DVECTOR *x, D3DVALUE scale);\nD3DVECTOR * WINAPI D3DRMVectorSubtract(D3DVECTOR *ret, D3DVECTOR *x, D3DVECTOR *y);\n\nD3DCOLOR WINAPI D3DRMCreateColorRGB(D3DVALUE, D3DVALUE, D3DVALUE);\nD3DCOLOR WINAPI D3DRMCreateColorRGBA(D3DVALUE, D3DVALUE, D3DVALUE, D3DVALUE);\nD3DVALUE WINAPI D3DRMColorGetAlpha(D3DCOLOR);\nD3DVALUE WINAPI D3DRMColorGetBlue(D3DCOLOR);\nD3DVALUE WINAPI D3DRMColorGetGreen(D3DCOLOR);\nD3DVALUE WINAPI D3DRMColorGetRed(D3DCOLOR);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/d3drmobj.h",
    "content": "/*\n * Copyright (C) 2008 Vijay Kiran Kamuju\n * Copyright (C) 2010 Christian Costa\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __D3DRMOBJ_H__\n#define __D3DRMOBJ_H__\n\n#include <objbase.h>\n#define VIRTUAL\n#include <d3drmdef.h>\n#include <d3d.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Direct3DRM object CLSIDs */\n\nDEFINE_GUID(CLSID_CDirect3DRMDevice,                    0x4fa3568e, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(CLSID_CDirect3DRMViewport,                  0x4fa3568f, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(CLSID_CDirect3DRMFrame,                     0x4fa35690, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(CLSID_CDirect3DRMMesh,                      0x4fa35691, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(CLSID_CDirect3DRMMeshBuilder,               0x4fa35692, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(CLSID_CDirect3DRMFace,                      0x4fa35693, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(CLSID_CDirect3DRMLight,                     0x4fa35694, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(CLSID_CDirect3DRMTexture,                   0x4fa35695, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(CLSID_CDirect3DRMWrap,                      0x4fa35696, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(CLSID_CDirect3DRMMaterial,                  0x4fa35697, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(CLSID_CDirect3DRMAnimation,                 0x4fa35698, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(CLSID_CDirect3DRMAnimationSet,              0x4fa35699, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(CLSID_CDirect3DRMUserVisual,                0x4fa3569a, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(CLSID_CDirect3DRMShadow,                    0x4fa3569b, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(CLSID_CDirect3DRMViewportInterpolator,      0xde9eaa1, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);\nDEFINE_GUID(CLSID_CDirect3DRMFrameInterpolator,         0xde9eaa2, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);\nDEFINE_GUID(CLSID_CDirect3DRMMeshInterpolator,          0xde9eaa3, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);\nDEFINE_GUID(CLSID_CDirect3DRMLightInterpolator,         0xde9eaa6, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);\nDEFINE_GUID(CLSID_CDirect3DRMMaterialInterpolator,      0xde9eaa7, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);\nDEFINE_GUID(CLSID_CDirect3DRMTextureInterpolator,       0xde9eaa8, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);\nDEFINE_GUID(CLSID_CDirect3DRMProgressiveMesh,           0x4516ec40, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);\nDEFINE_GUID(CLSID_CDirect3DRMClippedVisual,             0x5434e72d, 0x6d66, 0x11d1, 0xbb, 0xb, 0x0, 0x0, 0xf8, 0x75, 0x86, 0x5a);\n\n/* Direct3DRM object interface GUIDs */\n\nDEFINE_GUID(IID_IDirect3DRMObject,          0xeb16cb00, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(IID_IDirect3DRMObject2,         0x4516ec7c, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);\nDEFINE_GUID(IID_IDirect3DRMDevice,          0xe9e19280, 0x6e05, 0x11cf, 0xac, 0x4a, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(IID_IDirect3DRMDevice2,         0x4516ec78, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);\nDEFINE_GUID(IID_IDirect3DRMDevice3,         0x549f498b, 0xbfeb, 0x11d1, 0x8e, 0xd8, 0x00, 0xa0, 0xc9, 0x67, 0xa4, 0x82);\nDEFINE_GUID(IID_IDirect3DRMViewport,        0xeb16cb02, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(IID_IDirect3DRMViewport2,       0x4a1b1be6, 0xbfed, 0x11d1, 0x8e, 0xd8, 0x00, 0xa0, 0xc9, 0x67, 0xa4, 0x82);\nDEFINE_GUID(IID_IDirect3DRMFrame,           0xeb16cb03, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(IID_IDirect3DRMFrame2,          0xc3dfbd60, 0x3988, 0x11d0, 0x9e, 0xc2, 0x00, 0x00, 0xc0, 0x29, 0x1a, 0xc3);\nDEFINE_GUID(IID_IDirect3DRMFrame3,          0xff6b7f70, 0xa40e, 0x11d1, 0x91, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0x8e, 0x66);\nDEFINE_GUID(IID_IDirect3DRMVisual,          0xeb16cb04, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(IID_IDirect3DRMMesh,            0xa3a80d01, 0x6e12, 0x11cf, 0xac, 0x4a, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(IID_IDirect3DRMMeshBuilder,     0xa3a80d02, 0x6e12, 0x11cf, 0xac, 0x4a, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(IID_IDirect3DRMMeshBuilder2,    0x4516ec77, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);\nDEFINE_GUID(IID_IDirect3DRMMeshBuilder3,    0x4516ec82, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);\nDEFINE_GUID(IID_IDirect3DRMFace,            0xeb16cb07, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(IID_IDirect3DRMFace2,           0x4516ec81, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);\nDEFINE_GUID(IID_IDirect3DRMLight,           0xeb16cb08, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(IID_IDirect3DRMTexture,         0xeb16cb09, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(IID_IDirect3DRMTexture2,        0x120f30c0, 0x1629, 0x11d0, 0x94, 0x1c, 0x00, 0x80, 0xc8, 0x0c, 0xfa, 0x7b);\nDEFINE_GUID(IID_IDirect3DRMTexture3,        0xff6b7f73, 0xa40e, 0x11d1, 0x91, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0x8e, 0x66);\nDEFINE_GUID(IID_IDirect3DRMWrap,            0xeb16cb0a, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(IID_IDirect3DRMMaterial,        0xeb16cb0b, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(IID_IDirect3DRMMaterial2,       0xff6b7f75, 0xa40e, 0x11d1, 0x91, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0x8e, 0x66);\nDEFINE_GUID(IID_IDirect3DRMAnimation,       0xeb16cb0d, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(IID_IDirect3DRMAnimation2,      0xff6b7f77, 0xa40e, 0x11d1, 0x91, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0x8e, 0x66);\nDEFINE_GUID(IID_IDirect3DRMAnimationSet,    0xeb16cb0e, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(IID_IDirect3DRMAnimationSet2,   0xff6b7f79, 0xa40e, 0x11d1, 0x91, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0x8e, 0x66);\nDEFINE_GUID(IID_IDirect3DRMObjectArray,     0x242f6bc2, 0x3849, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);\nDEFINE_GUID(IID_IDirect3DRMDeviceArray,     0xeb16cb10, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(IID_IDirect3DRMViewportArray,   0xeb16cb11, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(IID_IDirect3DRMFrameArray,      0xeb16cb12, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(IID_IDirect3DRMVisualArray,     0xeb16cb13, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(IID_IDirect3DRMLightArray,      0xeb16cb14, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(IID_IDirect3DRMPickedArray,     0xeb16cb16, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(IID_IDirect3DRMFaceArray,       0xeb16cb17, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(IID_IDirect3DRMAnimationArray,  0xd5f1cae0, 0x4bd7, 0x11d1, 0xb9, 0x74, 0x00, 0x60, 0x08, 0x3e, 0x45, 0xf3);\nDEFINE_GUID(IID_IDirect3DRMUserVisual,      0x59163de0, 0x6d43, 0x11cf, 0xac, 0x4a, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(IID_IDirect3DRMShadow,          0xaf359780, 0x6ba3, 0x11cf, 0xac, 0x4a, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);\nDEFINE_GUID(IID_IDirect3DRMShadow2,         0x86b44e25, 0x9c82, 0x11d1, 0xbb, 0x0b, 0x00, 0xa0, 0xc9, 0x81, 0xa0, 0xa6);\nDEFINE_GUID(IID_IDirect3DRMInterpolator,    0x242f6bc1, 0x3849, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);\nDEFINE_GUID(IID_IDirect3DRMProgressiveMesh, 0x4516ec79, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);\nDEFINE_GUID(IID_IDirect3DRMPicked2Array,    0x4516ec7b, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);\nDEFINE_GUID(IID_IDirect3DRMClippedVisual,   0x5434e733, 0x6d66, 0x11d1, 0xbb, 0x0b, 0x00, 0x00, 0xf8, 0x75, 0x86, 0x5a);\n\n/*****************************************************************************\n * Predeclare the interfaces\n */\n\ntypedef struct IDirect3DRMObject          *LPDIRECT3DRMOBJECT, **LPLPDIRECT3DRMOBJECT;\ntypedef struct IDirect3DRMObject2         *LPDIRECT3DRMOBJECT2, **LPLPDIRECT3DRMOBJECT2;\ntypedef struct IDirect3DRMDevice          *LPDIRECT3DRMDEVICE, **LPLPDIRECT3DRMDEVICE;\ntypedef struct IDirect3DRMDevice2         *LPDIRECT3DRMDEVICE2, **LPLPDIRECT3DRMDEVICE2;\ntypedef struct IDirect3DRMDevice3         *LPDIRECT3DRMDEVICE3, **LPLPDIRECT3DRMDEVICE3;\ntypedef struct IDirect3DRMViewport        *LPDIRECT3DRMVIEWPORT, **LPLPDIRECT3DRMVIEWPORT;\ntypedef struct IDirect3DRMViewport2       *LPDIRECT3DRMVIEWPORT2, **LPLPDIRECT3DRMVIEWPORT2;\ntypedef struct IDirect3DRMFrame           *LPDIRECT3DRMFRAME, **LPLPDIRECT3DRMFRAME;\ntypedef struct IDirect3DRMFrame2          *LPDIRECT3DRMFRAME2, **LPLPDIRECT3DRMFRAME2;\ntypedef struct IDirect3DRMFrame3          *LPDIRECT3DRMFRAME3, **LPLPDIRECT3DRMFRAME3;\ntypedef struct IDirect3DRMVisual          *LPDIRECT3DRMVISUAL, **LPLPDIRECT3DRMVISUAL;\ntypedef struct IDirect3DRMMesh            *LPDIRECT3DRMMESH, **LPLPDIRECT3DRMMESH;\ntypedef struct IDirect3DRMMeshBuilder     *LPDIRECT3DRMMESHBUILDER, **LPLPDIRECT3DRMMESHBUILDER;\ntypedef struct IDirect3DRMMeshBuilder2    *LPDIRECT3DRMMESHBUILDER2, **LPLPDIRECT3DRMMESHBUILDER2;\ntypedef struct IDirect3DRMMeshBuilder3    *LPDIRECT3DRMMESHBUILDER3, **LPLPDIRECT3DRMMESHBUILDER3;\ntypedef struct IDirect3DRMFace            *LPDIRECT3DRMFACE, **LPLPDIRECT3DRMFACE;\ntypedef struct IDirect3DRMFace2           *LPDIRECT3DRMFACE2, **LPLPDIRECT3DRMFACE2;\ntypedef struct IDirect3DRMLight           *LPDIRECT3DRMLIGHT, **LPLPDIRECT3DRMLIGHT;\ntypedef struct IDirect3DRMTexture         *LPDIRECT3DRMTEXTURE, **LPLPDIRECT3DRMTEXTURE;\ntypedef struct IDirect3DRMTexture2        *LPDIRECT3DRMTEXTURE2, **LPLPDIRECT3DRMTEXTURE2;\ntypedef struct IDirect3DRMTexture3        *LPDIRECT3DRMTEXTURE3, **LPLPDIRECT3DRMTEXTURE3;\ntypedef struct IDirect3DRMWrap            *LPDIRECT3DRMWRAP, **LPLPDIRECT3DRMWRAP;\ntypedef struct IDirect3DRMMaterial        *LPDIRECT3DRMMATERIAL, **LPLPDIRECT3DRMMATERIAL;\ntypedef struct IDirect3DRMMaterial2       *LPDIRECT3DRMMATERIAL2, **LPLPDIRECT3DRMMATERIAL2;\ntypedef struct IDirect3DRMAnimation       *LPDIRECT3DRMANIMATION, **LPLPDIRECT3DRMANIMATION;\ntypedef struct IDirect3DRMAnimation2      *LPDIRECT3DRMANIMATION2, **LPLPDIRECT3DRMANIMATION2;\ntypedef struct IDirect3DRMAnimationSet    *LPDIRECT3DRMANIMATIONSET, **LPLPDIRECT3DRMANIMATIONSET;\ntypedef struct IDirect3DRMAnimationSet2   *LPDIRECT3DRMANIMATIONSET2, **LPLPDIRECT3DRMANIMATIONSET2;\ntypedef struct IDirect3DRMUserVisual      *LPDIRECT3DRMUSERVISUAL, **LPLPDIRECT3DRMUSERVISUAL;\ntypedef struct IDirect3DRMShadow          *LPDIRECT3DRMSHADOW, **LPLPDIRECT3DRMSHADOW;\ntypedef struct IDirect3DRMShadow2         *LPDIRECT3DRMSHADOW2, **LPLPDIRECT3DRMSHADOW2;\ntypedef struct IDirect3DRMArray           *LPDIRECT3DRMARRAY, **LPLPDIRECT3DRMARRAY;\ntypedef struct IDirect3DRMObjectArray     *LPDIRECT3DRMOBJECTARRAY, **LPLPDIRECT3DRMOBJECTARRAY;\ntypedef struct IDirect3DRMDeviceArray     *LPDIRECT3DRMDEVICEARRAY, **LPLPDIRECT3DRMDEVICEARRAY;\ntypedef struct IDirect3DRMFaceArray       *LPDIRECT3DRMFACEARRAY, **LPLPDIRECT3DRMFACEARRAY;\ntypedef struct IDirect3DRMViewportArray   *LPDIRECT3DRMVIEWPORTARRAY, **LPLPDIRECT3DRMVIEWPORTARRAY;\ntypedef struct IDirect3DRMFrameArray      *LPDIRECT3DRMFRAMEARRAY, **LPLPDIRECT3DRMFRAMEARRAY;\ntypedef struct IDirect3DRMAnimationArray  *LPDIRECT3DRMANIMATIONARRAY, **LPLPDIRECT3DRMANIMATIONARRAY;\ntypedef struct IDirect3DRMVisualArray     *LPDIRECT3DRMVISUALARRAY, **LPLPDIRECT3DRMVISUALARRAY;\ntypedef struct IDirect3DRMPickedArray     *LPDIRECT3DRMPICKEDARRAY, **LPLPDIRECT3DRMPICKEDARRAY;\ntypedef struct IDirect3DRMPicked2Array    *LPDIRECT3DRMPICKED2ARRAY, **LPLPDIRECT3DRMPICKED2ARRAY;\ntypedef struct IDirect3DRMLightArray      *LPDIRECT3DRMLIGHTARRAY, **LPLPDIRECT3DRMLIGHTARRAY;\ntypedef struct IDirect3DRMProgressiveMesh *LPDIRECT3DRMPROGRESSIVEMESH, **LPLPDIRECT3DRMPROGRESSIVEMESH;\ntypedef struct IDirect3DRMClippedVisual   *LPDIRECT3DRMCLIPPEDVISUAL, **LPLPDIRECT3DRMCLIPPEDVISUAL;\n\n/* ********************************************************************\n   Types and structures\n   ******************************************************************** */\n\ntypedef void (__cdecl *D3DRMOBJECTCALLBACK)(struct IDirect3DRMObject *obj, void *arg);\ntypedef void (__cdecl *D3DRMFRAMEMOVECALLBACK)(struct IDirect3DRMFrame *frame, void *ctx, D3DVALUE delta);\ntypedef void (__cdecl *D3DRMFRAME3MOVECALLBACK)(struct IDirect3DRMFrame3 *frame, void *ctx, D3DVALUE delta);\ntypedef void (__cdecl *D3DRMUPDATECALLBACK)(struct IDirect3DRMDevice *device, void *ctx, int count, D3DRECT *rects);\ntypedef void (__cdecl *D3DRMDEVICE3UPDATECALLBACK)(struct IDirect3DRMDevice3 *device, void *ctx,\n        int count, D3DRECT *rects);\ntypedef int (__cdecl *D3DRMUSERVISUALCALLBACK)(struct IDirect3DRMUserVisual *visual, void *ctx,\n        D3DRMUSERVISUALREASON reason, struct IDirect3DRMDevice *device, struct IDirect3DRMViewport *viewport);\ntypedef HRESULT (__cdecl *D3DRMLOADTEXTURECALLBACK)(char *tex_name, void *arg, struct IDirect3DRMTexture **texture);\ntypedef HRESULT (__cdecl *D3DRMLOADTEXTURE3CALLBACK)(char *tex_name, void *arg, struct IDirect3DRMTexture3 **texture);\ntypedef void (__cdecl *D3DRMLOADCALLBACK)(struct IDirect3DRMObject *object, REFIID objectguid, void *arg);\ntypedef HRESULT (__cdecl *D3DRMDOWNSAMPLECALLBACK)(struct IDirect3DRMTexture3 *texture, void *ctx,\n        IDirectDrawSurface *src_surface, IDirectDrawSurface *dst_surface);\ntypedef HRESULT (__cdecl *D3DRMVALIDATIONCALLBACK)(struct IDirect3DRMTexture3 *texture, void *ctx,\n        DWORD flags, DWORD rect_count, RECT *rects);\n\ntypedef struct _D3DRMPICKDESC\n{\n    ULONG     ulFaceIdx;\n    LONG      lGroupIdx;\n    D3DVECTOR vPosition;\n} D3DRMPICKDESC, *LPD3DRMPICKDESC;\n\ntypedef struct _D3DRMPICKDESC2\n{\n    ULONG     ulFaceIdx;\n    LONG      lGroupIdx;\n    D3DVECTOR vPosition;\n    D3DVALUE  tu;\n    D3DVALUE  tv;\n    D3DVECTOR dvNormal;\n    D3DCOLOR  dcColor;\n} D3DRMPICKDESC2, *LPD3DRMPICKDESC2;\n\n/*****************************************************************************\n * IDirect3DRMObject interface\n */\n#ifdef WINE_NO_UNICODE_MACROS\n#undef GetClassName\n#endif\n#define INTERFACE IDirect3DRMObject\nDECLARE_INTERFACE_(IDirect3DRMObject,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMObject_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMObject_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMObject_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMObject_Clone(p,a,b,c)               (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMObject_AddDestroyCallback(p,a,b)    (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMObject_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMObject_SetAppData(p,a)              (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMObject_GetAppData(p)                (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMObject_SetName(p,a)                 (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMObject_GetName(p,a,b)               (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMObject_GetClassName(p,a,b)          (p)->lpVtbl->GetClassName(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMObject_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DRMObject_AddRef(p)                    (p)->AddRef()\n#define IDirect3DRMObject_Release(p)                   (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMObject_Clone(p,a,b,c)               (p)->Clone(a,b,c)\n#define IDirect3DRMObject_AddDestroyCallback(p,a,b)    (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMObject_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMObject_SetAppData(p,a)              (p)->SetAppData(a)\n#define IDirect3DRMObject_GetAppData(p)                (p)->GetAppData()\n#define IDirect3DRMObject_SetName(p,a)                 (p)->SetName(a)\n#define IDirect3DRMObject_GetName(p,a,b)               (p)->GetName(a,b)\n#define IDirect3DRMObject_GetClassName(p,a,b)          (p)->GetClassName(a,b)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMObject2 interface\n */\n#ifdef WINE_NO_UNICODE_MACROS\n#undef GetClassName\n#endif\n#define INTERFACE IDirect3DRMObject2\nDECLARE_INTERFACE_(IDirect3DRMObject2,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject2 methods ***/\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(GetClientData)(THIS_ DWORD id, void **data) PURE;\n    STDMETHOD(GetDirect3DRM)(THIS_ struct IDirect3DRM **d3drm) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(SetClientData)(THIS_ DWORD id, void *data, DWORD flags) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetAge)(THIS_ DWORD flags, DWORD *age) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMObject2_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMObject2_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMObject2_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject2 methods ***/\n#define IDirect3DRMObject2_AddDestroyCallback(p,a,b)    (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMObject2_Clone(p,a,b,c)               (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMObject2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMObject2_GetClientData(p,a,b)         (p)->lpVtbl->SetClientData(p,a,b)\n#define IDirect3DRMObject2_GetDirect3DRM(p,a)           (p)->lpVtbl->GetDirect3DRM(p,a)\n#define IDirect3DRMObject2_GetName(p,a,b)               (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMObject2_SetClientData(p,a,b,c)       (p)->lpVtbl->SetClientData(p,a,b,c)\n#define IDirect3DRMObject2_SetName(p,a)                 (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMObject2_GetAge(p,a,b)                (p)->lpVtbl->GetAge(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMObject2_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DRMObject2_AddRef(p)                    (p)->AddRef()\n#define IDirect3DRMObject2_Release(p)                   (p)->Release()\n/*** IDirect3DRMObject2 methods ***/\n#define IDirect3DRMObject2_AddDestroyCallback(p,a,b)    (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMObject2_Clone(p,a,b,c)               (p)->Clone(a,b,c)\n#define IDirect3DRMObject2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMObject2_GetClientData(p,a,b)         (p)->SetClientData(a,b)\n#define IDirect3DRMObject2_GetDirect3DRM(p,a)           (p)->GetDirect3DRM(a)\n#define IDirect3DRMObject2_GetName(p,a,b)               (p)->GetName(a,b)\n#define IDirect3DRMObject2_SetClientData(p,a,b,c)       (p)->SetClientData(a,b,c)\n#define IDirect3DRMObject2_SetName(p,a)                 (p)->SetName(a)\n#define IDirect3DRMObject2_GetAge(p,a,b)                (p)->GetAge(a,b)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMVisual interface\n */\n#define INTERFACE IDirect3DRMVisual\nDECLARE_INTERFACE_(IDirect3DRMVisual,IDirect3DRMObject)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMVisual_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMVisual_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMVisual_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMVisual_Clone(p,a,b,c)               (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMVisual_AddDestroyCallback(p,a,b)    (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMVisual_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMVisual_SetAppData(p,a)              (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMVisual_GetAppData(p)                (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMVisual_SetName(p,a)                 (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMVisual_GetName(p,a,b)               (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMVisual_GetClassName(p,a,b)          (p)->lpVtbl->GetClassName(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMVisual_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DRMVisual_AddRef(p)                    (p)->AddRef()\n#define IDirect3DRMVisual_Release(p)                   (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMVisual_Clone(p,a,b,c)               (p)->Clone(a,b,c)\n#define IDirect3DRMVisual_AddDestroyCallback(p,a,b)    (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMVisual_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMVisual_SetAppData(p,a)              (p)->SetAppData(a)\n#define IDirect3DRMVisual_GetAppData(p)                (p)->GetAppData()\n#define IDirect3DRMVisual_SetName(p,a)                 (p)->SetName(a)\n#define IDirect3DRMVisual_GetName(p,a,b)               (p)->GetName(a,b)\n#define IDirect3DRMVisual_GetClassName(p,a,b)          (p)->GetClassName(a,b)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMDevice interface\n */\n#ifdef WINE_NO_UNICODE_MACROS\n#undef GetClassName\n#endif\n#define INTERFACE IDirect3DRMDevice\nDECLARE_INTERFACE_(IDirect3DRMDevice,IDirect3DRMObject)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMDevice methods ***/\n    STDMETHOD(Init)(THIS_ ULONG width, ULONG height) PURE;\n    STDMETHOD(InitFromD3D)(THIS_ IDirect3D *d3d, IDirect3DDevice *d3d_device) PURE;\n    STDMETHOD(InitFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid, int width, int height) PURE;\n    STDMETHOD(Update)(THIS) PURE;\n    STDMETHOD(AddUpdateCallback)(THIS_ D3DRMUPDATECALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteUpdateCallback)(THIS_ D3DRMUPDATECALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetBufferCount)(THIS_ DWORD) PURE;\n    STDMETHOD_(DWORD, GetBufferCount)(THIS) PURE;\n    STDMETHOD(SetDither)(THIS_ BOOL) PURE;\n    STDMETHOD(SetShades)(THIS_ DWORD) PURE;\n    STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;\n    STDMETHOD(SetTextureQuality)(THIS_ D3DRMTEXTUREQUALITY) PURE;\n    STDMETHOD(GetViewports)(THIS_ struct IDirect3DRMViewportArray **array) PURE;\n    STDMETHOD_(BOOL, GetDither)(THIS) PURE;\n    STDMETHOD_(DWORD, GetShades)(THIS) PURE;\n    STDMETHOD_(DWORD, GetHeight)(THIS) PURE;\n    STDMETHOD_(DWORD, GetWidth)(THIS) PURE;\n    STDMETHOD_(DWORD, GetTrianglesDrawn)(THIS) PURE;\n    STDMETHOD_(DWORD, GetWireframeOptions)(THIS) PURE;\n    STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;\n    STDMETHOD_(D3DCOLORMODEL, GetColorModel)(THIS) PURE;\n    STDMETHOD_(D3DRMTEXTUREQUALITY, GetTextureQuality)(THIS) PURE;\n    STDMETHOD(GetDirect3DDevice)(THIS_ IDirect3DDevice **d3d_device) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMDevice_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMDevice_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMDevice_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMDevice_Clone(p,a,b,c)               (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMDevice_AddDestroyCallback(p,a,b)    (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMDevice_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMDevice_SetAppData(p,a)              (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMDevice_GetAppData(p)                (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMDevice_SetName(p,a)                 (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMDevice_GetName(p,a,b)               (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMDevice_GetClassName(p,a,b)          (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMDevice methods ***/\n#define IDirect3DRMDevice_Init(p,a,b)                  (p)->lpVtbl->Init(p,a,b)\n#define IDirect3DRMDevice_InitFromD3D(p,a,b)           (p)->lpVtbl->InitFromD3D(p,a,b)\n#define IDirect3DRMDevice_InitFromClipper(p,a,b,c,d)   (p)->lpVtbl->InitFromClipper(p,a,b,c,d)\n#define IDirect3DRMDevice_Update(p)                    (p)->lpVtbl->Update(p)\n#define IDirect3DRMDevice_AddUpdateCallback(p,a,b)     (p)->lpVtbl->AddUpdateCallback(p,a,b)\n#define IDirect3DRMDevice_DeleteUpdateCallback(p,a,b)  (p)->lpVtbl->DeleteUpdateCallback(p,a,b)\n#define IDirect3DRMDevice_SetBufferCount(p,a)          (p)->lpVtbl->SetBufferCount(p,a)\n#define IDirect3DRMDevice_GetBufferCount(p)            (p)->lpVtbl->GetBufferCount(p)\n#define IDirect3DRMDevice_SetDither(p,a)               (p)->lpVtbl->SetDither(p,a)\n#define IDirect3DRMDevice_SetShades(p,a)               (p)->lpVtbl->SetShades(p,a)\n#define IDirect3DRMDevice_SetQuality(p,a)              (p)->lpVtbl->SetQuality(p,a)\n#define IDirect3DRMDevice_SetTextureQuality(p,a)       (p)->lpVtbl->SetTextureQuality(p,a)\n#define IDirect3DRMDevice_GetViewports(p,a)            (p)->lpVtbl->GetViewports(p,a)\n#define IDirect3DRMDevice_GetDither(p)                 (p)->lpVtbl->GetDither(p)\n#define IDirect3DRMDevice_GetShades(p)                 (p)->lpVtbl->GetShades(p)\n#define IDirect3DRMDevice_GetHeight(p)                 (p)->lpVtbl->GetHeight(p)\n#define IDirect3DRMDevice_GetWidth(p)                  (p)->lpVtbl->GetWidth(p)\n#define IDirect3DRMDevice_GetTrianglesDrawn(p)         (p)->lpVtbl->GetTrianglesDrawn(p)\n#define IDirect3DRMDevice_GetWireframeOptions(p)       (p)->lpVtbl->GetWireframeOptions(p)\n#define IDirect3DRMDevice_GetQuality(p)                (p)->lpVtbl->GetQuality(p)\n#define IDirect3DRMDevice_GetColorModel(p)             (p)->lpVtbl->GetColorModel(p)\n#define IDirect3DRMDevice_GetTextureQuality(p)         (p)->lpVtbl->GetTextureQuality(p)\n#define IDirect3DRMDevice_GetDirect3DDevice(p,a)       (p)->lpVtbl->GetDirect3DDevice(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMDevice_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DRMDevice_AddRef(p)                    (p)->AddRef()\n#define IDirect3DRMDevice_Release(p)                   (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMDevice_Clone(p,a,b,c)               (p)->Clone(a,b,c)\n#define IDirect3DRMDevice_AddDestroyCallback(p,a,b)    (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMDevice_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMDevice_SetAppData(p,a)              (p)->SetAppData(a)\n#define IDirect3DRMDevice_GetAppData(p)                (p)->GetAppData()\n#define IDirect3DRMDevice_SetName(p,a)                 (p)->SetName(a)\n#define IDirect3DRMDevice_GetName(p,a,b)               (p)->GetName(a,b)\n#define IDirect3DRMDevice_GetClassName(p,a,b)          (p)->GetClassName(a,b)\n/*** IDirect3DRMDevice methods ***/\n#define IDirect3DRMDevice_Init(p,a,b)                  (p)->Init(a,b)\n#define IDirect3DRMDevice_InitFromD3D(p,a,b)           (p)->InitFromD3D(a,b)\n#define IDirect3DRMDevice_InitFromClipper(p,a,b,c,d)   (p)->InitFromClipper(a,b,c,d)\n#define IDirect3DRMDevice_Update(p)                    (p)->Update()\n#define IDirect3DRMDevice_AddUpdateCallback(p,a,b)     (p)->AddUpdateCallback(a,b)\n#define IDirect3DRMDevice_DeleteUpdateCallback(p,a,b)  (p)->DeleteUpdateCallback(a,b)\n#define IDirect3DRMDevice_SetBufferCount(p,a)          (p)->SetBufferCount(a)\n#define IDirect3DRMDevice_GetBufferCount(p)            (p)->GetBufferCount()\n#define IDirect3DRMDevice_SetDither(p,a)               (p)->SetDither(a)\n#define IDirect3DRMDevice_SetShades(p,a)               (p)->SetShades(a)\n#define IDirect3DRMDevice_SetQuality(p,a)              (p)->SetQuality(a)\n#define IDirect3DRMDevice_SetTextureQuality(p,a)       (p)->SetTextureQuality(a)\n#define IDirect3DRMDevice_GetViewports(p,a)            (p)->GetViewports(a)\n#define IDirect3DRMDevice_GetDither(p)                 (p)->GetDither()\n#define IDirect3DRMDevice_GetShades(p)                 (p)->GetShades()\n#define IDirect3DRMDevice_GetHeight(p)                 (p)->GetHeight()\n#define IDirect3DRMDevice_GetWidth(p)                  (p)->GetWidth()\n#define IDirect3DRMDevice_GetTrianglesDrawn(p)         (p)->GetTrianglesDrawn()\n#define IDirect3DRMDevice_GetWireframeOptions(p)       (p)->GetWireframeOptions()\n#define IDirect3DRMDevice_GetQuality(p)                (p)->GetQuality()\n#define IDirect3DRMDevice_GetColorModel(p)             (p)->GetColorModel()\n#define IDirect3DRMDevice_GetTextureQuality(p)         (p)->GetTextureQuality()\n#define IDirect3DRMDevice_GetDirect3DDevice(p,a)       (p)->GetDirect3DDevice(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMDevice2 interface\n */\n#ifdef WINE_NO_UNICODE_MACROS\n#undef GetClassName\n#endif\n#define INTERFACE IDirect3DRMDevice2\nDECLARE_INTERFACE_(IDirect3DRMDevice2,IDirect3DRMDevice)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMDevice methods ***/\n    STDMETHOD(Init)(THIS_ ULONG width, ULONG height) PURE;\n    STDMETHOD(InitFromD3D)(THIS_ IDirect3D *d3d, IDirect3DDevice *d3d_device) PURE;\n    STDMETHOD(InitFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid, int width, int height) PURE;\n    STDMETHOD(Update)(THIS) PURE;\n    STDMETHOD(AddUpdateCallback)(THIS_ D3DRMUPDATECALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteUpdateCallback)(THIS_ D3DRMUPDATECALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetBufferCount)(THIS_ DWORD) PURE;\n    STDMETHOD_(DWORD, GetBufferCount)(THIS) PURE;\n    STDMETHOD(SetDither)(THIS_ BOOL) PURE;\n    STDMETHOD(SetShades)(THIS_ DWORD) PURE;\n    STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;\n    STDMETHOD(SetTextureQuality)(THIS_ D3DRMTEXTUREQUALITY) PURE;\n    STDMETHOD(GetViewports)(THIS_ struct IDirect3DRMViewportArray **array) PURE;\n    STDMETHOD_(BOOL, GetDither)(THIS) PURE;\n    STDMETHOD_(DWORD, GetShades)(THIS) PURE;\n    STDMETHOD_(DWORD, GetHeight)(THIS) PURE;\n    STDMETHOD_(DWORD, GetWidth)(THIS) PURE;\n    STDMETHOD_(DWORD, GetTrianglesDrawn)(THIS) PURE;\n    STDMETHOD_(DWORD, GetWireframeOptions)(THIS) PURE;\n    STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;\n    STDMETHOD_(D3DCOLORMODEL, GetColorModel)(THIS) PURE;\n    STDMETHOD_(D3DRMTEXTUREQUALITY, GetTextureQuality)(THIS) PURE;\n    STDMETHOD(GetDirect3DDevice)(THIS_ IDirect3DDevice **d3d_device) PURE;\n    /*** IDirect3DRMDevice2 methods ***/\n    STDMETHOD(InitFromD3D2)(THIS_ IDirect3D2 *d3d, IDirect3DDevice2 *device) PURE;\n    STDMETHOD(InitFromSurface)(THIS_ GUID *guid, IDirectDraw *ddraw, IDirectDrawSurface *surface) PURE;\n    STDMETHOD(SetRenderMode)(THIS_ DWORD flags) PURE;\n    STDMETHOD_(DWORD, GetRenderMode)(THIS) PURE;\n    STDMETHOD(GetDirect3DDevice2)(THIS_ IDirect3DDevice2 **device) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMDevice2_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMDevice2_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMDevice2_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMDevice2_Clone(p,a,b,c)               (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMDevice2_AddDestroyCallback(p,a,b)    (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMDevice2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMDevice2_SetAppData(p,a)              (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMDevice2_GetAppData(p)                (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMDevice2_SetName(p,a)                 (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMDevice2_GetName(p,a,b)               (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMDevice2_GetClassName(p,a,b)          (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMDevice methods ***/\n#define IDirect3DRMDevice2_Init(p,a,b)                  (p)->lpVtbl->Init(p,a,b)\n#define IDirect3DRMDevice2_InitFromD3D(p,a,b)           (p)->lpVtbl->InitFromD3D(p,a,b)\n#define IDirect3DRMDevice2_InitFromClipper(p,a,b,c,d)   (p)->lpVtbl->InitFromClipper(p,a,b,c,d)\n#define IDirect3DRMDevice2_Update(p)                    (p)->lpVtbl->Update(p)\n#define IDirect3DRMDevice2_AddUpdateCallback(p,a,b)     (p)->lpVtbl->AddUpdateCallback(p,a,b)\n#define IDirect3DRMDevice2_DeleteUpdateCallback(p,a,b)  (p)->lpVtbl->DeleteUpdateCallback(p,a,b)\n#define IDirect3DRMDevice2_SetBufferCount(p,a)          (p)->lpVtbl->SetBufferCount(p,a)\n#define IDirect3DRMDevice2_GetBufferCount(p)            (p)->lpVtbl->GetBufferCount(p)\n#define IDirect3DRMDevice2_SetDither(p,a)               (p)->lpVtbl->SetDither(p,a)\n#define IDirect3DRMDevice2_SetShades(p,a)               (p)->lpVtbl->SetShades(p,a)\n#define IDirect3DRMDevice2_SetQuality(p,a)              (p)->lpVtbl->SetQuality(p,a)\n#define IDirect3DRMDevice2_SetTextureQuality(p,a)       (p)->lpVtbl->SetTextureQuality(p,a)\n#define IDirect3DRMDevice2_GetViewports(p,a)            (p)->lpVtbl->GetViewports(p,a)\n#define IDirect3DRMDevice2_GetDither(p)                 (p)->lpVtbl->GetDither(p)\n#define IDirect3DRMDevice2_GetShades(p)                 (p)->lpVtbl->GetShades(p)\n#define IDirect3DRMDevice2_GetHeight(p)                 (p)->lpVtbl->GetHeight(p)\n#define IDirect3DRMDevice2_GetWidth(p)                  (p)->lpVtbl->GetWidth(p)\n#define IDirect3DRMDevice2_GetTrianglesDrawn(p)         (p)->lpVtbl->GetTrianglesDrawn(p)\n#define IDirect3DRMDevice2_GetWireframeOptions(p)       (p)->lpVtbl->GetWireframeOptions(p)\n#define IDirect3DRMDevice2_GetQuality(p)                (p)->lpVtbl->GetQuality(p)\n#define IDirect3DRMDevice2_GetColorModel(p)             (p)->lpVtbl->GetColorModel(p)\n#define IDirect3DRMDevice2_GetTextureQuality(p)         (p)->lpVtbl->GetTextureQuality(p)\n#define IDirect3DRMDevice2_GetDirect3DDevice(p,a)       (p)->lpVtbl->GetDirect3DDevice(p,a)\n/*** IDirect3DRMDevice2 methods ***/\n#define IDirect3DRMDevice2_InitFromD3D2(p,a,b)          (p)->lpVtbl->InitFromD3D2(p,a,b)\n#define IDirect3DRMDevice2_InitFromSurface(p,a,b,c)     (p)->lpVtbl->InitFromSurface(p,a,b,c)\n#define IDirect3DRMDevice2_SetRenderMode(p,a)           (p)->lpVtbl->SetRenderMode(p,a)\n#define IDirect3DRMDevice2_GetRenderMode(p)             (p)->lpVtbl->GetRenderMode(p)\n#define IDirect3DRMDevice2_GetDirect3DDevice2(p,a)      (p)->lpVtbl->GetDirect3DDevice2(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMDevice2_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DRMDevice2_AddRef(p)                    (p)->AddRef()\n#define IDirect3DRMDevice2_Release(p)                   (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMDevice2_Clone(p,a,b,c)               (p)->Clone(a,b,c)\n#define IDirect3DRMDevice2_AddDestroyCallback(p,a,b)    (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMDevice2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMDevice2_SetAppData(p,a)              (p)->SetAppData(a)\n#define IDirect3DRMDevice2_GetAppData(p)                (p)->GetAppData()\n#define IDirect3DRMDevice2_SetName(p,a)                 (p)->SetName(a)\n#define IDirect3DRMDevice2_GetName(p,a,b)               (p)->GetName(a,b)\n#define IDirect3DRMDevice2_GetClassName(p,a,b)          (p)->GetClassName(a,b)\n/*** IDirect3DRMDevice methods ***/\n#define IDirect3DRMDevice2_Init(p,a,b)                  (p)->Init(a,b)\n#define IDirect3DRMDevice2_InitFromD3D(p,a,b)           (p)->InitFromD3D(a,b)\n#define IDirect3DRMDevice2_InitFromClipper(p,a,b,c,d)   (p)->InitFromClipper(a,b,c,d)\n#define IDirect3DRMDevice2_Update(p)                    (p)->Update()\n#define IDirect3DRMDevice2_AddUpdateCallback(p,a,b)     (p)->AddUpdateCallback(a,b)\n#define IDirect3DRMDevice2_DeleteUpdateCallback(p,a,b)  (p)->DeleteUpdateCallback(a,b)\n#define IDirect3DRMDevice2_SetBufferCount(p,a)          (p)->SetBufferCount(a)\n#define IDirect3DRMDevice2_GetBufferCount(p)            (p)->GetBufferCount()\n#define IDirect3DRMDevice2_SetDither(p,a)               (p)->SetDither(a)\n#define IDirect3DRMDevice2_SetShades(p,a)               (p)->SetShades(a)\n#define IDirect3DRMDevice2_SetQuality(p,a)              (p)->SetQuality(a)\n#define IDirect3DRMDevice2_SetTextureQuality(p,a)       (p)->SetTextureQuality(a)\n#define IDirect3DRMDevice2_GetViewports(p,a)            (p)->GetViewports(a)\n#define IDirect3DRMDevice2_GetDither(p)                 (p)->GetDither()\n#define IDirect3DRMDevice2_GetShades(p)                 (p)->GetShades()\n#define IDirect3DRMDevice2_GetHeight(p)                 (p)->GetHeight()\n#define IDirect3DRMDevice2_GetWidth(p)                  (p)->GetWidth()\n#define IDirect3DRMDevice2_GetTrianglesDrawn(p)         (p)->GetTrianglesDrawn()\n#define IDirect3DRMDevice2_GetWireframeOptions(p)       (p)->GetWireframeOptions()\n#define IDirect3DRMDevice2_GetQuality(p)                (p)->GetQuality()\n#define IDirect3DRMDevice2_GetColorModel(p)             (p)->GetColorModel()\n#define IDirect3DRMDevice2_GetTextureQuality(p)         (p)->GetTextureQuality()\n#define IDirect3DRMDevice2_GetDirect3DDevice(p,a)       (p)->GetDirect3DDevice(a)\n/*** IDirect3DRMDevice2 methods ***/\n#define IDirect3DRMDevice2_InitFromD3D2(p,a,b)          (p)->InitFromD3D2(a,b)\n#define IDirect3DRMDevice2_InitFromSurface(p,a,b,c)     (p)->InitFromSurface(a,b,c)\n#define IDirect3DRMDevice2_SetRenderMode(p,a)           (p)->SetRenderMode(a)\n#define IDirect3DRMDevice2_GetRenderMode(p)             (p)->GetRenderMode()\n#define IDirect3DRMDevice2_GetDirect3DDevice2(p,a)      (p)->GetDirect3DDevice2(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMDevice3 interface\n */\n#ifdef WINE_NO_UNICODE_MACROS\n#undef GetClassName\n#endif\n#define INTERFACE IDirect3DRMDevice3\nDECLARE_INTERFACE_(IDirect3DRMDevice3,IDirect3DRMObject)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMDevice methods ***/\n    STDMETHOD(Init)(THIS_ ULONG width, ULONG height) PURE;\n    STDMETHOD(InitFromD3D)(THIS_ IDirect3D *d3d, IDirect3DDevice *d3d_device) PURE;\n    STDMETHOD(InitFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid, int width, int height) PURE;\n    STDMETHOD(Update)(THIS) PURE;\n    STDMETHOD(AddUpdateCallback)(THIS_ D3DRMUPDATECALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteUpdateCallback)(THIS_ D3DRMUPDATECALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetBufferCount)(THIS_ DWORD) PURE;\n    STDMETHOD_(DWORD, GetBufferCount)(THIS) PURE;\n    STDMETHOD(SetDither)(THIS_ BOOL) PURE;\n    STDMETHOD(SetShades)(THIS_ DWORD) PURE;\n    STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;\n    STDMETHOD(SetTextureQuality)(THIS_ D3DRMTEXTUREQUALITY) PURE;\n    STDMETHOD(GetViewports)(THIS_ struct IDirect3DRMViewportArray **array) PURE;\n    STDMETHOD_(BOOL, GetDither)(THIS) PURE;\n    STDMETHOD_(DWORD, GetShades)(THIS) PURE;\n    STDMETHOD_(DWORD, GetHeight)(THIS) PURE;\n    STDMETHOD_(DWORD, GetWidth)(THIS) PURE;\n    STDMETHOD_(DWORD, GetTrianglesDrawn)(THIS) PURE;\n    STDMETHOD_(DWORD, GetWireframeOptions)(THIS) PURE;\n    STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;\n    STDMETHOD_(D3DCOLORMODEL, GetColorModel)(THIS) PURE;\n    STDMETHOD_(D3DRMTEXTUREQUALITY, GetTextureQuality)(THIS) PURE;\n    STDMETHOD(GetDirect3DDevice)(THIS_ IDirect3DDevice **d3d_device) PURE;\n    /*** IDirect3DRMDevice2 methods ***/\n    STDMETHOD(InitFromD3D2)(THIS_ IDirect3D2 *d3d, IDirect3DDevice2 *device) PURE;\n    STDMETHOD(InitFromSurface)(THIS_ GUID *guid, IDirectDraw *ddraw, IDirectDrawSurface *surface) PURE;\n    STDMETHOD(SetRenderMode)(THIS_ DWORD flags) PURE;\n    STDMETHOD_(DWORD, GetRenderMode)(THIS) PURE;\n    STDMETHOD(GetDirect3DDevice2)(THIS_ IDirect3DDevice2 **device) PURE;\n    /*** IDirect3DRMDevice3 methods ***/\n    STDMETHOD(FindPreferredTextureFormat)(THIS_ DWORD BitDepths, DWORD flags, DDPIXELFORMAT *format) PURE;\n    STDMETHOD(RenderStateChange)(THIS_ D3DRENDERSTATETYPE drsType, DWORD val, DWORD flags) PURE;\n    STDMETHOD(LightStateChange)(THIS_ D3DLIGHTSTATETYPE drsType, DWORD val, DWORD flags) PURE;\n    STDMETHOD(GetStateChangeOptions)(THIS_ DWORD state_class, DWORD state_idx, DWORD *flags) PURE;\n    STDMETHOD(SetStateChangeOptions)(THIS_ DWORD StateClass, DWORD StateNum, DWORD flags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMDevice3_QueryInterface(p,a,b)               (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMDevice3_AddRef(p)                           (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMDevice3_Release(p)                          (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMDevice3_Clone(p,a,b,c)                      (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMDevice3_AddDestroyCallback(p,a,b)           (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMDevice3_DeleteDestroyCallback(p,a,b)        (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMDevice3_SetAppData(p,a)                     (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMDevice3_GetAppData(p)                       (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMDevice3_SetName(p,a)                        (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMDevice3_GetName(p,a,b)                      (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMDevice3_GetClassName(p,a,b)                 (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMDevice methods ***/\n#define IDirect3DRMDevice3_Init(p,a,b)                         (p)->lpVtbl->Init(p,a,b)\n#define IDirect3DRMDevice3_InitFromD3D(p,a,b)                  (p)->lpVtbl->InitFromD3D(p,a,b)\n#define IDirect3DRMDevice3_InitFromClipper(p,a,b,c,d)          (p)->lpVtbl->InitFromClipper(p,a,b,c,d)\n#define IDirect3DRMDevice3_Update(p)                           (p)->lpVtbl->Update(p)\n#define IDirect3DRMDevice3_AddUpdateCallback(p,a,b)            (p)->lpVtbl->AddUpdateCallback(p,a,b)\n#define IDirect3DRMDevice3_DeleteUpdateCallback(p,a,b)         (p)->lpVtbl->DeleteUpdateCallback(p,a,b)\n#define IDirect3DRMDevice3_SetBufferCount(p,a)                 (p)->lpVtbl->SetBufferCount(p,a)\n#define IDirect3DRMDevice3_GetBufferCount(p)                   (p)->lpVtbl->GetBufferCount(p)\n#define IDirect3DRMDevice3_SetDither(p,a)                      (p)->lpVtbl->SetDither(p,a)\n#define IDirect3DRMDevice3_SetShades(p,a)                      (p)->lpVtbl->SetShades(p,a)\n#define IDirect3DRMDevice3_SetQuality(p,a)                     (p)->lpVtbl->SetQuality(p,a)\n#define IDirect3DRMDevice3_SetTextureQuality(p,a)              (p)->lpVtbl->SetTextureQuality(p,a)\n#define IDirect3DRMDevice3_GetViewports(p,a)                   (p)->lpVtbl->GetViewports(p,a)\n#define IDirect3DRMDevice3_GetDither(p)                        (p)->lpVtbl->GetDither(p)\n#define IDirect3DRMDevice3_GetShades(p)                        (p)->lpVtbl->GetShades(p)\n#define IDirect3DRMDevice3_GetHeight(p)                        (p)->lpVtbl->GetHeight(p)\n#define IDirect3DRMDevice3_GetWidth(p)                         (p)->lpVtbl->GetWidth(p)\n#define IDirect3DRMDevice3_GetTrianglesDrawn(p)                (p)->lpVtbl->GetTrianglesDrawn(p)\n#define IDirect3DRMDevice3_GetWireframeOptions(p)              (p)->lpVtbl->GetWireframeOptions(p)\n#define IDirect3DRMDevice3_GetQuality(p)                       (p)->lpVtbl->GetQuality(p)\n#define IDirect3DRMDevice3_GetColorModel(p)                    (p)->lpVtbl->GetColorModel(p)\n#define IDirect3DRMDevice3_GetTextureQuality(p)                (p)->lpVtbl->GetTextureQuality(p)\n#define IDirect3DRMDevice3_GetDirect3DDevice(p,a)              (p)->lpVtbl->GetDirect3DDevice(p,a)\n/*** IDirect3DRMDevice2 methods ***/\n#define IDirect3DRMDevice3_InitFromD3D2(p,a,b)                 (p)->lpVtbl->InitFromD3D2(p,a,b)\n#define IDirect3DRMDevice3_InitFromSurface(p,a,b,c)            (p)->lpVtbl->InitFromSurface(p,a,b,c)\n#define IDirect3DRMDevice3_SetRenderMode(p,a)                  (p)->lpVtbl->SetRenderMode(p,a)\n#define IDirect3DRMDevice3_GetRenderMode(p)                    (p)->lpVtbl->GetRenderMode(p)\n#define IDirect3DRMDevice3_GetDirect3DDevice2(p,a)             (p)->lpVtbl->GetDirect3DDevice2(p,a)\n/*** IDirect3DRMDevice3 methods ***/\n#define IDirect3DRMDevice3_FindPreferredTextureFormat(p,a,b,c) (p)->lpVtbl->FindPreferredTextureFormat(p,a,b,c)\n#define IDirect3DRMDevice3_RenderStateChange(p,a,b,c)          (p)->lpVtbl->RenderStateChange(p,a,b,c)\n#define IDirect3DRMDevice3_LightStateChange(p,a,b,c)           (p)->lpVtbl->LightStateChange(p,a,b,c)\n#define IDirect3DRMDevice3_GetStateChangeOptions(p,a,b,c)      (p)->lpVtbl->GetStateChangeOptions(p,a,b,c)\n#define IDirect3DRMDevice3_SetStateChangeOptions(p,a,b,c)      (p)->lpVtbl->SetStateChangeOptions(p,a,b,c)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMDevice3_QueryInterface(p,a,b)               (p)->QueryInterface(a,b)\n#define IDirect3DRMDevice3_AddRef(p)                           (p)->AddRef()\n#define IDirect3DRMDevice3_Release(p)                          (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMDevice3_Clone(p,a,b,c)                      (p)->Clone(a,b,c)\n#define IDirect3DRMDevice3_AddDestroyCallback(p,a,b)           (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMDevice3_DeleteDestroyCallback(p,a,b)        (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMDevice3_SetAppData(p,a)                     (p)->SetAppData(a)\n#define IDirect3DRMDevice3_GetAppData(p)                       (p)->GetAppData()\n#define IDirect3DRMDevice3_SetName(p,a)                        (p)->SetName(a)\n#define IDirect3DRMDevice3_GetName(p,a,b)                      (p)->GetName(a,b)\n#define IDirect3DRMDevice3_GetClassName(p,a,b)                 (p)->GetClassName(a,b)\n/*** IDirect3DRMDevice methods ***/\n#define IDirect3DRMDevice3_Init(p,a,b)                         (p)->Init(a,b)\n#define IDirect3DRMDevice3_InitFromD3D(p,a,b)                  (p)->InitFromD3D(a,b)\n#define IDirect3DRMDevice3_InitFromClipper(p,a,b,c,d)          (p)->InitFromClipper(a,b,c,d)\n#define IDirect3DRMDevice3_Update(p)                           (p)->Update()\n#define IDirect3DRMDevice3_AddUpdateCallback(p,a,b)            (p)->AddUpdateCallback(a,b)\n#define IDirect3DRMDevice3_DeleteUpdateCallback(p,a,b)         (p)->DeleteUpdateCallback(a,b)\n#define IDirect3DRMDevice3_SetBufferCount(p,a)                 (p)->SetBufferCount(a)\n#define IDirect3DRMDevice3_GetBufferCount(p)                   (p)->GetBufferCount()\n#define IDirect3DRMDevice3_SetDither(p,a)                      (p)->SetDither(a)\n#define IDirect3DRMDevice3_SetShades(p,a)                      (p)->SetShades(a)\n#define IDirect3DRMDevice3_SetQuality(p,a)                     (p)->SetQuality(a)\n#define IDirect3DRMDevice3_SetTextureQuality(p,a)              (p)->SetTextureQuality(a)\n#define IDirect3DRMDevice3_GetViewports(p,a)                   (p)->GetViewports(a)\n#define IDirect3DRMDevice3_GetDither(p)                        (p)->GetDither()\n#define IDirect3DRMDevice3_GetShades(p)                        (p)->GetShades()\n#define IDirect3DRMDevice3_GetHeight(p)                        (p)->GetHeight()\n#define IDirect3DRMDevice3_GetWidth(p)                         (p)->GetWidth()\n#define IDirect3DRMDevice3_GetTrianglesDrawn(p)                (p)->GetTrianglesDrawn()\n#define IDirect3DRMDevice3_GetWireframeOptions(p)              (p)->GetWireframeOptions()\n#define IDirect3DRMDevice3_GetQuality(p)                       (p)->GetQuality()\n#define IDirect3DRMDevice3_GetColorModel(p)                    (p)->GetColorModel()\n#define IDirect3DRMDevice3_GetTextureQuality(p)                (p)->GetTextureQuality()\n#define IDirect3DRMDevice3_GetDirect3DDevice(p,a)              (p)->GetDirect3DDevice(a)\n/*** IDirect3DRMDevice2 methods ***/\n#define IDirect3DRMDevice3_InitFromD3D2(p,a,b)                 (p)->InitFromD3D2(a,b)\n#define IDirect3DRMDevice3_InitFromSurface(p,a,b,c)            (p)->InitFromSurface(a,b,c)\n#define IDirect3DRMDevice3_SetRenderMode(p,a)                  (p)->SetRenderMode(a)\n#define IDirect3DRMDevice3_GetRenderMode(p)                    (p)->GetRenderMode()\n#define IDirect3DRMDevice3_GetDirect3DDevice2(p,a)             (p)->GetDirect3DDevice2(a)\n/*** IDirect3DRMDevice3 methods ***/\n#define IDirect3DRMDevice3_FindPreferredTextureFormat(p,a,b,c) (p)->FindPreferredTextureFormat(a,b,c)\n#define IDirect3DRMDevice3_RenderStateChange(p,a,b,c)          (p)->RenderStateChange(a,b,c)\n#define IDirect3DRMDevice3_LightStateChange(p,a,b,c)           (p)->LightStateChange(a,b,c)\n#define IDirect3DRMDevice3_GetStateChangeOptions(p,a,b,c)      (p)->GetStateChangeOptions(a,b,c)\n#define IDirect3DRMDevice3_SetStateChangeOptions(p,a,b,c)      (p)->SetStateChangeOptions(a,b,c)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMViewport interface\n */\n#define INTERFACE IDirect3DRMViewport\nDECLARE_INTERFACE_(IDirect3DRMViewport,IDirect3DRMObject)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMViewport methods ***/\n    STDMETHOD(Init) (THIS_ IDirect3DRMDevice *device, struct IDirect3DRMFrame *camera,\n            DWORD x, DWORD y, DWORD width, DWORD height) PURE;\n    STDMETHOD(Clear)(THIS) PURE;\n    STDMETHOD(Render)(THIS_ struct IDirect3DRMFrame *frame) PURE;\n    STDMETHOD(SetFront)(THIS_ D3DVALUE) PURE;\n    STDMETHOD(SetBack)(THIS_ D3DVALUE) PURE;\n    STDMETHOD(SetField)(THIS_ D3DVALUE) PURE;\n    STDMETHOD(SetUniformScaling)(THIS_ BOOL) PURE;\n    STDMETHOD(SetCamera)(THIS_ struct IDirect3DRMFrame *camera) PURE;\n    STDMETHOD(SetProjection)(THIS_ D3DRMPROJECTIONTYPE) PURE;\n    STDMETHOD(Transform)(THIS_ D3DRMVECTOR4D *d, D3DVECTOR *s) PURE;\n    STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DRMVECTOR4D *s) PURE;\n    STDMETHOD(Configure)(THIS_ LONG x, LONG y, DWORD width, DWORD height) PURE;\n    STDMETHOD(ForceUpdate)(THIS_ DWORD x1, DWORD y1, DWORD x2, DWORD y2) PURE;\n    STDMETHOD(SetPlane)(THIS_ D3DVALUE left, D3DVALUE right, D3DVALUE bottom, D3DVALUE top) PURE;\n    STDMETHOD(GetCamera)(THIS_ struct IDirect3DRMFrame **camera) PURE;\n    STDMETHOD(GetDevice)(THIS_ IDirect3DRMDevice **device) PURE;\n    STDMETHOD(GetPlane)(THIS_ D3DVALUE *left, D3DVALUE *right, D3DVALUE *bottom, D3DVALUE *top) PURE;\n    STDMETHOD(Pick)(THIS_ LONG x, LONG y, struct IDirect3DRMPickedArray **visuals) PURE;\n    STDMETHOD_(BOOL, GetUniformScaling)(THIS) PURE;\n    STDMETHOD_(LONG, GetX)(THIS) PURE;\n    STDMETHOD_(LONG, GetY)(THIS) PURE;\n    STDMETHOD_(DWORD, GetWidth)(THIS) PURE;\n    STDMETHOD_(DWORD, GetHeight)(THIS) PURE;\n    STDMETHOD_(D3DVALUE, GetField)(THIS) PURE;\n    STDMETHOD_(D3DVALUE, GetBack)(THIS) PURE;\n    STDMETHOD_(D3DVALUE, GetFront)(THIS) PURE;\n    STDMETHOD_(D3DRMPROJECTIONTYPE, GetProjection)(THIS) PURE;\n    STDMETHOD(GetDirect3DViewport)(THIS_ IDirect3DViewport **viewport) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMViewport_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMViewport_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMViewport_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMViewport_Clone(p,a,b,c)               (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMViewport_AddDestroyCallback(p,a,b)    (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMViewport_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMViewport_SetAppData(p,a)              (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMViewport_GetAppData(p)                (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMViewport_SetName(p,a)                 (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMViewport_GetName(p,a,b)               (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMViewport_GetClassName(p,a,b)          (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMViewport methods ***/\n#define IDirect3DRMViewport_Init(p,a,b,c,d,e,f)          (p)->lpVtbl->Init(p,a,b,c,d,e,f)\n#define IDirect3DRMViewport_Clear(p)                     (p)->lpVtbl->Clear(p)\n#define IDirect3DRMViewport_Render(p,a)                  (p)->lpVtbl->Render(p,a)\n#define IDirect3DRMViewport_SetFront(p,a)                (p)->lpVtbl->SetFront(p,a)\n#define IDirect3DRMViewport_SetBack(p,a)                 (p)->lpVtbl->SetBack(p,a)\n#define IDirect3DRMViewport_SetField(p,a)                (p)->lpVtbl->SetField(p,a)\n#define IDirect3DRMViewport_SetUniformScaling(p,a)       (p)->lpVtbl->SetUniformScaling(p,a)\n#define IDirect3DRMViewport_SetCamera(p,a)               (p)->lpVtbl->SetCamera(p,a)\n#define IDirect3DRMViewport_SetProjection(p,a)           (p)->lpVtbl->SetProjection(p,a)\n#define IDirect3DRMViewport_Transform(p,a,b)             (p)->lpVtbl->Transform(p,a,b)\n#define IDirect3DRMViewport_InverseTransform(p,a,b)      (p)->lpVtbl->InverseTransform(p,a,b)\n#define IDirect3DRMViewport_Configure(p,a,b,c,d)         (p)->lpVtbl->Configure(p,a,b,c,d)\n#define IDirect3DRMViewport_ForceUpdate(p,a,b,c,d)       (p)->lpVtbl->ForceUpdate(p,a,b,c,d)\n#define IDirect3DRMViewport_SetPlane(p,a,b,c,d)          (p)->lpVtbl->SetPlane(p,a,b,c,d)\n#define IDirect3DRMViewport_GetCamera(p,a)               (p)->lpVtbl->GetCamera(p,a)\n#define IDirect3DRMViewport_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DRMViewport_GetPlane(p,a,b,c,d)          (p)->lpVtbl->GetPlane(p,a,b,c,d)\n#define IDirect3DRMViewport_Pick(p,a,b,c)                (p)->lpVtbl->Pick(p,a,b,c)\n#define IDirect3DRMViewport_GetUniformScaling(p)         (p)->lpVtbl->GetUniformScaling(p)\n#define IDirect3DRMViewport_GetX(p)                      (p)->lpVtbl->GetX(p)\n#define IDirect3DRMViewport_GetY(p)                      (p)->lpVtbl->GetY(p)\n#define IDirect3DRMViewport_GetWidth(p)                  (p)->lpVtbl->GetWidth(p)\n#define IDirect3DRMViewport_GetHeight(p)                 (p)->lpVtbl->GetHeight(p)\n#define IDirect3DRMViewport_GetField(p)                  (p)->lpVtbl->GetField(p)\n#define IDirect3DRMViewport_GetBack(p)                   (p)->lpVtbl->GetBack(p)\n#define IDirect3DRMViewport_GetFront(p)                  (p)->lpVtbl->GetFront(p)\n#define IDirect3DRMViewport_GetProjection(p)             (p)->lpVtbl->GetProjection(p)\n#define IDirect3DRMViewport_GetDirect3DViewport(p,a)     (p)->lpVtbl->GetDirect3DViewport(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMViewport_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DRMViewport_AddRef(p)                    (p)->AddRef()\n#define IDirect3DRMViewport_Release(p)                   (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMViewport_Clone(p,a,b,c)               (p)->Clone(a,b,c)\n#define IDirect3DRMViewport_AddDestroyCallback(p,a,b)    (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMViewport_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMViewport_SetAppData(p,a)              (p)->SetAppData(a)\n#define IDirect3DRMViewport_GetAppData(p)                (p)->GetAppData()\n#define IDirect3DRMViewport_SetName(p,a)                 (p)->SetName(a)\n#define IDirect3DRMViewport_GetName(p,a,b)               (p)->GetName(a,b)\n#define IDirect3DRMViewport_GetClassName(p,a,b)          (p)->GetClassName(a,b)\n/*** IDirect3DRMViewport methods ***/\n#define IDirect3DRMViewport_Init(p,a,b,c,d,e,f)          (p)->Init(a,b,c,d,e,f)\n#define IDirect3DRMViewport_Clear(p)                     (p)->Clear()\n#define IDirect3DRMViewport_Render(p,a)                  (p)->Render(a)\n#define IDirect3DRMViewport_SetFront(p,a)                (p)->SetFront(a)\n#define IDirect3DRMViewport_SetBack(p,a)                 (p)->SetBack(a)\n#define IDirect3DRMViewport_SetField(p,a)                (p)->SetField(a)\n#define IDirect3DRMViewport_SetUniformScaling(p,a)       (p)->SetUniformScaling(a)\n#define IDirect3DRMViewport_SetCamera(p,a)               (p)->SetCamera(a)\n#define IDirect3DRMViewport_SetProjection(p,a)           (p)->SetProjection(a)\n#define IDirect3DRMViewport_Transform(p,a,b)             (p)->Transform(a,b)\n#define IDirect3DRMViewport_InverseTransform(p,a,b)      (p)->InverseTransform(a,b)\n#define IDirect3DRMViewport_Configure(p,a,b,c,d)         (p)->Configure(a,b,c,d)\n#define IDirect3DRMViewport_ForceUpdate(p,a,b,c,d)       (p)->ForceUpdate(a,b,c,d)\n#define IDirect3DRMViewport_SetPlane(p,a,b,c,d)          (p)->SetPlane(a,b,c,d)\n#define IDirect3DRMViewport_GetCamera(p,a)               (p)->GetCamera(a)\n#define IDirect3DRMViewport_GetDevice(p,a)               (p)->GetDevice(a)\n#define IDirect3DRMViewport_GetPlane(p,a,b,c,d)          (p)->GetPlane(a,b,c,d)\n#define IDirect3DRMViewport_Pick(p,a,b,c)                (p)->Pick(a,b,c)\n#define IDirect3DRMViewport_GetUniformScaling(p)         (p)->GetUniformScaling()\n#define IDirect3DRMViewport_GetX(p)                      (p)->GetX()\n#define IDirect3DRMViewport_GetY(p)                      (p)->GetY()\n#define IDirect3DRMViewport_GetWidth(p)                  (p)->GetWidth()\n#define IDirect3DRMViewport_GetHeight(p)                 (p)->GetHeight()\n#define IDirect3DRMViewport_GetField(p)                  (p)->GetField()\n#define IDirect3DRMViewport_GetBack(p)                   (p)->GetBack()\n#define IDirect3DRMViewport_GetFront(p)                  (p)->GetFront()\n#define IDirect3DRMViewport_GetProjection(p)             (p)->GetProjection()\n#define IDirect3DRMViewport_GetDirect3DViewport(p,a)     (p)->GetDirect3DViewport(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMViewport2 interface\n */\n#define INTERFACE IDirect3DRMViewport2\nDECLARE_INTERFACE_(IDirect3DRMViewport2,IDirect3DRMObject)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMViewport2 methods ***/\n    STDMETHOD(Init) (THIS_ IDirect3DRMDevice3 *device, struct IDirect3DRMFrame3 *camera,\n            DWORD x, DWORD y, DWORD width, DWORD height) PURE;\n    STDMETHOD(Clear)(THIS_ DWORD flags) PURE;\n    STDMETHOD(Render)(THIS_ struct IDirect3DRMFrame3 *frame) PURE;\n    STDMETHOD(SetFront)(THIS_ D3DVALUE) PURE;\n    STDMETHOD(SetBack)(THIS_ D3DVALUE) PURE;\n    STDMETHOD(SetField)(THIS_ D3DVALUE) PURE;\n    STDMETHOD(SetUniformScaling)(THIS_ BOOL) PURE;\n    STDMETHOD(SetCamera)(THIS_ struct IDirect3DRMFrame3 *camera) PURE;\n    STDMETHOD(SetProjection)(THIS_ D3DRMPROJECTIONTYPE) PURE;\n    STDMETHOD(Transform)(THIS_ D3DRMVECTOR4D *d, D3DVECTOR *s) PURE;\n    STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DRMVECTOR4D *s) PURE;\n    STDMETHOD(Configure)(THIS_ LONG x, LONG y, DWORD width, DWORD height) PURE;\n    STDMETHOD(ForceUpdate)(THIS_ DWORD x1, DWORD y1, DWORD x2, DWORD y2) PURE;\n    STDMETHOD(SetPlane)(THIS_ D3DVALUE left, D3DVALUE right, D3DVALUE bottom, D3DVALUE top) PURE;\n    STDMETHOD(GetCamera)(THIS_ struct IDirect3DRMFrame3 **camera) PURE;\n    STDMETHOD(GetDevice)(THIS_ IDirect3DRMDevice3 **device) PURE;\n    STDMETHOD(GetPlane)(THIS_ D3DVALUE *left, D3DVALUE *right, D3DVALUE *bottom, D3DVALUE *top) PURE;\n    STDMETHOD(Pick)(THIS_ LONG x, LONG y, struct IDirect3DRMPickedArray **visuals) PURE;\n    STDMETHOD_(BOOL, GetUniformScaling)(THIS) PURE;\n    STDMETHOD_(LONG, GetX)(THIS) PURE;\n    STDMETHOD_(LONG, GetY)(THIS) PURE;\n    STDMETHOD_(DWORD, GetWidth)(THIS) PURE;\n    STDMETHOD_(DWORD, GetHeight)(THIS) PURE;\n    STDMETHOD_(D3DVALUE, GetField)(THIS) PURE;\n    STDMETHOD_(D3DVALUE, GetBack)(THIS) PURE;\n    STDMETHOD_(D3DVALUE, GetFront)(THIS) PURE;\n    STDMETHOD_(D3DRMPROJECTIONTYPE, GetProjection)(THIS) PURE;\n    STDMETHOD(GetDirect3DViewport)(THIS_ IDirect3DViewport **viewport) PURE;\n    STDMETHOD(TransformVectors)(THIS_ DWORD vector_count, D3DRMVECTOR4D *dst_vectors,\n            D3DVECTOR *src_vectors) PURE;\n    STDMETHOD(InverseTransformVectors)(THIS_ DWORD vector_count, D3DVECTOR *dst_vectors,\n            D3DRMVECTOR4D *src_vectors) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMViewport2_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMViewport2_AddRef(p)                        (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMViewport2_Release(p)                       (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMViewport_2Clone(p,a,b,c)                   (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMViewport2_AddDestroyCallback(p,a,b)        (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMViewport2_DeleteDestroyCallback(p,a,b)     (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMViewport2_SetAppData(p,a)                  (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMViewport2_GetAppData(p)                    (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMViewport2_SetName(p,a)                     (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMViewport2_GetName(p,a,b)                   (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMViewport2_GetClassName(p,a,b)              (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMViewport2 methods ***/\n#define IDirect3DRMViewport2_Init(p,a,b,c,d,e,f)              (p)->lpVtbl->Init(p,a,b,c,d,e,f)\n#define IDirect3DRMViewport2_Clear(p,a)                       (p)->lpVtbl->Clear(p,a)\n#define IDirect3DRMViewport2_Render(p,a)                      (p)->lpVtbl->Render(p,a)\n#define IDirect3DRMViewport2_SetFront(p,a)                    (p)->lpVtbl->SetFront(p,a)\n#define IDirect3DRMViewport2_SetBack(p,a)                     (p)->lpVtbl->SetBack(p,a)\n#define IDirect3DRMViewport2_SetField(p,a)                    (p)->lpVtbl->SetField(p,a)\n#define IDirect3DRMViewport2_SetUniformScaling(p,a)           (p)->lpVtbl->SetUniformScaling(p,a)\n#define IDirect3DRMViewport2_SetCamera(p,a)                   (p)->lpVtbl->SetCamera(p,a)\n#define IDirect3DRMViewport2_SetProjection(p,a)               (p)->lpVtbl->SetProjection(p,a)\n#define IDirect3DRMViewport2_Transform(p,a,b)                 (p)->lpVtbl->Transform(p,a,b)\n#define IDirect3DRMViewport2_InverseTransform(p,a,b)          (p)->lpVtbl->InverseTransform(p,a,b)\n#define IDirect3DRMViewport2_Configure(p,a,b,c,d)             (p)->lpVtbl->Configure(p,a,b,c,d)\n#define IDirect3DRMViewport2_ForceUpdate(p,a,b,c,d)           (p)->lpVtbl->ForceUpdate(p,a,b,c,d)\n#define IDirect3DRMViewport2_SetPlane(p,a,b,c,d)              (p)->lpVtbl->SetPlane(p,a,b,c,d)\n#define IDirect3DRMViewport2_GetCamera(p,a)                   (p)->lpVtbl->GetCamera(p,a)\n#define IDirect3DRMViewport2_GetDevice(p,a)                   (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DRMViewport2_GetPlane(p,a,b,c,d)              (p)->lpVtbl->GetPlane(p,a,b,c,d)\n#define IDirect3DRMViewport2_Pick(p,a,b,c)                    (p)->lpVtbl->Pick(p,a,b,c)\n#define IDirect3DRMViewport2_GetUniformScaling(p)             (p)->lpVtbl->GetUniformScaling(p)\n#define IDirect3DRMViewport2_GetX(p)                          (p)->lpVtbl->GetX(p)\n#define IDirect3DRMViewport2_GetY(p)                          (p)->lpVtbl->GetY(p)\n#define IDirect3DRMViewport2_GetWidth(p)                      (p)->lpVtbl->GetWidth(p)\n#define IDirect3DRMViewport2_GetHeight(p)                     (p)->lpVtbl->GetHeight(p)\n#define IDirect3DRMViewport2_GetField(p)                      (p)->lpVtbl->GetField(p)\n#define IDirect3DRMViewport2_GetBack(p)                       (p)->lpVtbl->GetBack(p)\n#define IDirect3DRMViewport2_GetFront(p)                      (p)->lpVtbl->GetFront(p)\n#define IDirect3DRMViewport2_GetProjection(p)                 (p)->lpVtbl->GetProjection(p)\n#define IDirect3DRMViewport2_GetDirect3DViewport(p,a)         (p)->lpVtbl->GetDirect3DViewport(p,a)\n#define IDirect3DRMViewport2_TransformVectors(p,a,b,c)        (p)->lpVtbl->TransformVectors(p,a,b,c)\n#define IDirect3DRMViewport2_InverseTransformVectors(p,a,b,c) (p)->lpVtbl->InverseTransformVectors(p,a,b,c)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMViewport2_QueryInterface(p,a,b)            (p)->QueryInterface(a,b)\n#define IDirect3DRMViewport2_AddRef(p)                        (p)->AddRef()\n#define IDirect3DRMViewport2_Release(p)                       (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMViewport2_Clone(p,a,b,c)                   (p)->Clone(a,b,c)\n#define IDirect3DRMViewport2_AddDestroyCallback(p,a,b)        (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMViewport2_DeleteDestroyCallback(p,a,b)     (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMViewport2_SetAppData(p,a)                  (p)->SetAppData(a)\n#define IDirect3DRMViewport2_GetAppData(p)                    (p)->GetAppData()\n#define IDirect3DRMViewport2_SetName(p,a)                     (p)->SetName(a)\n#define IDirect3DRMViewport2_GetName(p,a,b)                   (p)->GetName(a,b)\n#define IDirect3DRMViewport2_GetClassName(p,a,b)              (p)->GetClassName(a,b)\n/*** IDirect3DRMViewport2 methods ***/\n#define IDirect3DRMViewport2_Init(p,a,b,c,d,e,f)              (p)->Init(a,b,c,d,e,f)\n#define IDirect3DRMViewport2_Clear(p)                         (p)->Clear()\n#define IDirect3DRMViewport2_Render(p,a)                      (p)->Render(a)\n#define IDirect3DRMViewport2_SetFront(p,a)                    (p)->SetFront(a)\n#define IDirect3DRMViewport2_SetBack(p,a)                     (p)->SetBack(a)\n#define IDirect3DRMViewport2_SetField(p,a)                    (p)->SetField(a)\n#define IDirect3DRMViewport2_SetUniformScaling(p,a)           (p)->SetUniformScaling(a)\n#define IDirect3DRMViewport2_SetCamera(p,a)                   (p)->SetCamera(a)\n#define IDirect3DRMViewport2_SetProjection(p,a)               (p)->SetProjection(a)\n#define IDirect3DRMViewport2_Transform(p,a,b)                 (p)->Transform(a,b)\n#define IDirect3DRMViewport2_InverseTransform(p,a,b)          (p)->InverseTransform(a,b)\n#define IDirect3DRMViewport2_Configure(p,a,b,c,d)             (p)->Configure(a,b,c,d)\n#define IDirect3DRMViewport2_ForceUpdate(p,a,b,c,d)           (p)->ForceUpdate(a,b,c,d)\n#define IDirect3DRMViewport2_SetPlane(p,a,b,c,d)              (p)->SetPlane(a,b,c,d)\n#define IDirect3DRMViewport2_GetCamera(p,a)                   (p)->GetCamera(a)\n#define IDirect3DRMViewport2_GetDevice(p,a)                   (p)->GetDevice(a)\n#define IDirect3DRMViewport2_GetPlane(p,a,b,c,d)              (p)->GetPlane(a,b,c,d)\n#define IDirect3DRMViewport2_Pick(p,a,b,c)                    (p)->Pick(a,b,c)\n#define IDirect3DRMViewport2_GetUniformScaling(p)             (p)->GetUniformScaling()\n#define IDirect3DRMViewport2_GetX(p)                          (p)->GetX()\n#define IDirect3DRMViewport2_GetY(p)                          (p)->GetY()\n#define IDirect3DRMViewport2_GetWidth(p)                      (p)->GetWidth()\n#define IDirect3DRMViewport2_GetHeight(p)                     (p)->GetHeight()\n#define IDirect3DRMViewport2_GetField(p)                      (p)->GetField()\n#define IDirect3DRMViewport2_GetBack(p)                       (p)->GetBack()\n#define IDirect3DRMViewport2_GetFront(p)                      (p)->GetFront()\n#define IDirect3DRMViewport2_GetProjection(p)                 (p)->GetProjection()\n#define IDirect3DRMViewport2_GetDirect3DViewport(p,a)         (p)->GetDirect3DViewport(a)\n#define IDirect3DRMViewport2_TransformVectors(p,a,b,c)        (p)->TransformVectors(a,b,c)\n#define IDirect3DRMViewport2_InverseTransformVectors(p,a,b,c) (p)->InverseTransformVectors(a,b,c)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMFrame interface\n */\n#define INTERFACE IDirect3DRMFrame\nDECLARE_INTERFACE_(IDirect3DRMFrame,IDirect3DRMVisual)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMFrame methods ***/\n    STDMETHOD(AddChild)(THIS_ IDirect3DRMFrame *child) PURE;\n    STDMETHOD(AddLight)(THIS_ struct IDirect3DRMLight *light) PURE;\n    STDMETHOD(AddMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK cb, void *ctx) PURE;\n    STDMETHOD(AddTransform)(THIS_ D3DRMCOMBINETYPE, D3DRMMATRIX4D) PURE;\n    STDMETHOD(AddTranslation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;\n    STDMETHOD(AddScale)(THIS_ D3DRMCOMBINETYPE, D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;\n    STDMETHOD(AddRotation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;\n    STDMETHOD(AddVisual)(THIS_ IDirect3DRMVisual *visual) PURE;\n    STDMETHOD(GetChildren)(THIS_ struct IDirect3DRMFrameArray **children) PURE;\n    STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;\n    STDMETHOD(GetLights)(THIS_ struct IDirect3DRMLightArray **lights) PURE;\n    STDMETHOD_(D3DRMMATERIALMODE, GetMaterialMode)(THIS) PURE;\n    STDMETHOD(GetParent)(THIS_ IDirect3DRMFrame **parent) PURE;\n    STDMETHOD(GetPosition)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *return_position) PURE;\n    STDMETHOD(GetRotation)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *axis, D3DVALUE *return_theta) PURE;\n    STDMETHOD(GetScene)(THIS_ IDirect3DRMFrame **scene) PURE;\n    STDMETHOD_(D3DRMSORTMODE, GetSortMode)(THIS) PURE;\n    STDMETHOD(GetTexture)(THIS_ struct IDirect3DRMTexture **texture) PURE;\n    STDMETHOD(GetTransform)(THIS_ D3DRMMATRIX4D return_matrix) PURE;\n    STDMETHOD(GetVelocity)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *return_velocity, BOOL with_rotation) PURE;\n    STDMETHOD(GetOrientation)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *dir, D3DVECTOR *up) PURE;\n    STDMETHOD(GetVisuals)(THIS_ struct IDirect3DRMVisualArray **visuals) PURE;\n    STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE;\n    STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;\n    STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags,\n            D3DRMLOADTEXTURECALLBACK cb, void *ctx)PURE;\n    STDMETHOD(LookAt)(THIS_ IDirect3DRMFrame *target, IDirect3DRMFrame *reference,\n            D3DRMFRAMECONSTRAINT constraint) PURE;\n    STDMETHOD(Move)(THIS_ D3DVALUE delta) PURE;\n    STDMETHOD(DeleteChild)(THIS_ IDirect3DRMFrame *child) PURE;\n    STDMETHOD(DeleteLight)(THIS_ struct IDirect3DRMLight *light) PURE;\n    STDMETHOD(DeleteMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteVisual)(THIS_ IDirect3DRMVisual *visual) PURE;\n    STDMETHOD_(D3DCOLOR, GetSceneBackground)(THIS) PURE;\n    STDMETHOD(GetSceneBackgroundDepth)(THIS_ IDirectDrawSurface **surface) PURE;\n    STDMETHOD_(D3DCOLOR, GetSceneFogColor)(THIS) PURE;\n    STDMETHOD_(BOOL, GetSceneFogEnable)(THIS) PURE;\n    STDMETHOD_(D3DRMFOGMODE, GetSceneFogMode)(THIS) PURE;\n    STDMETHOD(GetSceneFogParams)(THIS_ D3DVALUE *return_start, D3DVALUE *return_end, D3DVALUE *return_density) PURE;\n    STDMETHOD(SetSceneBackground)(THIS_ D3DCOLOR) PURE;\n    STDMETHOD(SetSceneBackgroundRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;\n    STDMETHOD(SetSceneBackgroundDepth)(THIS_ IDirectDrawSurface *surface) PURE;\n    STDMETHOD(SetSceneBackgroundImage)(THIS_ struct IDirect3DRMTexture *texture) PURE;\n    STDMETHOD(SetSceneFogEnable)(THIS_ BOOL) PURE;\n    STDMETHOD(SetSceneFogColor)(THIS_ D3DCOLOR) PURE;\n    STDMETHOD(SetSceneFogMode)(THIS_ D3DRMFOGMODE) PURE;\n    STDMETHOD(SetSceneFogParams)(THIS_ D3DVALUE start, D3DVALUE end, D3DVALUE density) PURE;\n    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;\n    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;\n    STDMETHOD_(D3DRMZBUFFERMODE, GetZbufferMode)(THIS) PURE;\n    STDMETHOD(SetMaterialMode)(THIS_ D3DRMMATERIALMODE) PURE;\n    STDMETHOD(SetOrientation)(THIS_ IDirect3DRMFrame *reference, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,\n            D3DVALUE ux, D3DVALUE uy, D3DVALUE uz) PURE;\n    STDMETHOD(SetPosition)(THIS_ IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;\n    STDMETHOD(SetRotation)(THIS_ IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;\n    STDMETHOD(SetSortMode)(THIS_ D3DRMSORTMODE) PURE;\n    STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture *texture) PURE;\n    STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;\n    STDMETHOD(SetVelocity)(THIS_ IDirect3DRMFrame *reference,\n            D3DVALUE x, D3DVALUE y, D3DVALUE z, BOOL with_rotation) PURE;\n    STDMETHOD(SetZbufferMode)(THIS_ D3DRMZBUFFERMODE) PURE;\n    STDMETHOD(Transform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMFrame_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMFrame_AddRef(p)                        (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMFrame_Release(p)                       (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMFrame_Clone(p,a,b,c)                   (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMFrame_AddDestroyCallback(p,a,b)        (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMFrame_DeleteDestroyCallback(p,a,b)     (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMFrame_SetAppData(p,a)                  (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMFrame_GetAppData(p)                    (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMFrame_SetName(p,a)                     (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMFrame_GetName(p,a,b)                   (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMFrame_GetClassName(p,a,b)              (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMFrame methods ***/\n#define IDirect3DRMFrame_AddChild(p,a)                    (p)->lpVtbl->AddChild(p,a)\n#define IDirect3DRMFrame_AddLight(p,a)                    (p)->lpVtbl->AddLight(p,a)\n#define IDirect3DRMFrame_AddMoveCallback(p,a,b)           (p)->lpVtbl->AddMoveCallback(p,a,b)\n#define IDirect3DRMFrame_AddTransform(p,a,b)              (p)->lpVtbl->AddTransform(p,a,b)\n#define IDirect3DRMFrame_AddTranslation(p,a,b,c,d)        (p)->lpVtbl->AddTranslation(p,a,b,c,d)\n#define IDirect3DRMFrame_AddScale(p,a,b,c,d)              (p)->lpVtbl->AddScale(p,a,b,c,d)\n#define IDirect3DRMFrame_AddRotation(p,a,b,c,d,e)         (p)->lpVtbl->AddRotation(p,a,b,c,d,e)\n#define IDirect3DRMFrame_AddVisual(p,a)                   (p)->lpVtbl->AddVisual(p,a)\n#define IDirect3DRMFrame_GetChildren(p,a)                 (p)->lpVtbl->GetChildren(p,a)\n#define IDirect3DRMFrame_GetColor(p)                      (p)->lpVtbl->GetColor(p)\n#define IDirect3DRMFrame_GetLights(p,a)                   (p)->lpVtbl->GetLights(p,a)\n#define IDirect3DRMFrame_GetMaterialMode(p)               (p)->lpVtbl->GetMaterialMode(p)\n#define IDirect3DRMFrame_GetParent(p,a)                   (p)->lpVtbl->GetParent(p,a)\n#define IDirect3DRMFrame_GetPosition(p,a,b)               (p)->lpVtbl->GetPosition(p,a,b)\n#define IDirect3DRMFrame_GetRotation(p,a,b,c)             (p)->lpVtbl->GetRotation(p,a,b,c)\n#define IDirect3DRMFrame_GetScene(p,a)                    (p)->lpVtbl->GetScene(p,a)\n#define IDirect3DRMFrame_GetSortMode(p)                   (p)->lpVtbl->GetSortMode(p)\n#define IDirect3DRMFrame_GetTexture(p,a)                  (p)->lpVtbl->GetTexture(p,a)\n#define IDirect3DRMFrame_GetTransform(p,a)                (p)->lpVtbl->GetTransform(p,a)\n#define IDirect3DRMFrame_GetVelocity(p,a,b,c)             (p)->lpVtbl->GetVelocity(p,a,b,c)\n#define IDirect3DRMFrame_GetOrientation(p,a,b,c)          (p)->lpVtbl->GetOrientation(p,a,b,c)\n#define IDirect3DRMFrame_GetVisuals(p,a)                  (p)->lpVtbl->GetVisuals(p,a)\n#define IDirect3DRMFrame_GetTextureTopology(p,a,b)        (p)->lpVtbl->GetTextureTopology(p,a,b)\n#define IDirect3DRMFrame_InverseTransform(p,a,b)          (p)->lpVtbl->InverseTransform(p,a,b)\n#define IDirect3DRMFrame_Load(p,a,b,c,d,e)                (p)->lpVtbl->Load(p,a,b,c,d,e)\n#define IDirect3DRMFrame_LookAt(p,a,b,c)                  (p)->lpVtbl->LookAt(p,a,b,c)\n#define IDirect3DRMFrame_Move(p,a)                        (p)->lpVtbl->Move(p,a)\n#define IDirect3DRMFrame_DeleteChild(p,a)                 (p)->lpVtbl->DeleteChild(p,a)\n#define IDirect3DRMFrame_DeleteLight(p,a)                 (p)->lpVtbl->DeleteLight(p,a)\n#define IDirect3DRMFrame_DeleteMoveCallback(p,a,b)        (p)->lpVtbl->DeleteMoveCallback(p,a,b)\n#define IDirect3DRMFrame_DeleteVisual(p,a)                (p)->lpVtbl->DeleteVisual(p,a)\n#define IDirect3DRMFrame_GetSceneBackground(p)            (p)->lpVtbl->GetSceneBackground(p)\n#define IDirect3DRMFrame_GetSceneBackgroundDepth(p,a)     (p)->lpVtbl->GetSceneBackgroundDepth(p,a)\n#define IDirect3DRMFrame_GetSceneFogColor(p)              (p)->lpVtbl->GetSceneFogColor(p)\n#define IDirect3DRMFrame_GetSceneFogEnable(p)             (p)->lpVtbl->GetSceneFogEnable(p)\n#define IDirect3DRMFrame_GetSceneFogMode(p)               (p)->lpVtbl->GetSceneFogMode(p)\n#define IDirect3DRMFrame_GetSceneFogParams(p,a,b,c)       (p)->lpVtbl->GetSceneFogParams(p,a,b,c)\n#define IDirect3DRMFrame_SetSceneBackground(p,a)          (p)->lpVtbl->SetSceneBackground(p,a)\n#define IDirect3DRMFrame_SetSceneBackgroundRGB(p,a,b,c)   (p)->lpVtbl->SetSceneBackgroundRGB(p,a,b,c)\n#define IDirect3DRMFrame_SetSceneBackgroundDepth(p,a)     (p)->lpVtbl->SetSceneBackgroundDepth(p,a)\n#define IDirect3DRMFrame_SetSceneBackgroundImage(p,a)     (p)->lpVtbl->SetSceneBackgroundImage(p,a)\n#define IDirect3DRMFrame_SetSceneFogEnable(p,a)           (p)->lpVtbl->SetSceneFogEnable(p,a)\n#define IDirect3DRMFrame_SetSceneFogColor(p,a)            (p)->lpVtbl->SetSceneFogColor(p,a)\n#define IDirect3DRMFrame_SetSceneFogMode(p,a)             (p)->lpVtbl->SetSceneFogMode(p,a)\n#define IDirect3DRMFrame_SetSceneFogParams(p,a,b,c)       (p)->lpVtbl->SetSceneFogParams(p,a,b,c)\n#define IDirect3DRMFrame_SetColor(p,a)                    (p)->lpVtbl->SetColor(p,a)\n#define IDirect3DRMFrame_SetColorRGB(p,a,b,c)             (p)->lpVtbl->SetColorRGB(p,a,b,c)\n#define IDirect3DRMFrame_GetZbufferMode(p)                (p)->lpVtbl->GetZbufferMode(p)\n#define IDirect3DRMFrame_SetMaterialMode(p,a)             (p)->lpVtbl->SetMaterialMode(p,a)\n#define IDirect3DRMFrame_SetOrientation(p,a,b,c,d,e,f,g)  (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g)\n#define IDirect3DRMFrame_SetPosition(p,a,b,c,d)           (p)->lpVtbl->SetPosition(p,a,b,c,d)\n#define IDirect3DRMFrame_SetRotation(p,a,b,c,d,e)         (p)->lpVtbl->SetRotation(p,a,b,c,d,e)\n#define IDirect3DRMFrame_SetSortMode(p,a)                 (p)->lpVtbl->SetSortMode(p,a)\n#define IDirect3DRMFrame_SetTexture(p,a)                  (p)->lpVtbl->SetTexture(p,a)\n#define IDirect3DRMFrame_SetTextureTopology(p,a,b)        (p)->lpVtbl->SetTextureTopology(p,a,b)\n#define IDirect3DRMFrame_SetVelocity(p,a,b,c,d,e)         (p)->lpVtbl->SetVelocity(p,a,b,c,d,e)\n#define IDirect3DRMFrame_SetZbufferMode(p,a)              (p)->lpVtbl->SetZbufferMode(p,a)\n#define IDirect3DRMFrame_Transform(p,a,b)                 (p)->lpVtbl->Transform(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMFrame_QueryInterface(p,a,b)            (p)->QueryInterface(a,b)\n#define IDirect3DRMFrame_AddRef(p)                        (p)->AddRef()\n#define IDirect3DRMFrame_Release(p)                       (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMFrame_Clone(p,a,b,c)                   (p)->Clone(a,b,c)\n#define IDirect3DRMFrame_AddDestroyCallback(p,a,b)        (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMFrame_DeleteDestroyCallback(p,a,b)     (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMFrame_SetAppData(p,a)                  (p)->SetAppData(a)\n#define IDirect3DRMFrame_GetAppData(p)                    (p)->GetAppData()\n#define IDirect3DRMFrame_SetName(p,a)                     (p)->SetName(a)\n#define IDirect3DRMFrame_GetName(p,a,b)                   (p)->GetName(a,b)\n#define IDirect3DRMFrame_GetClassName(p,a,b)              (p)->GetClassName(a,b)\n/*** IDirect3DRMFrame methods ***/\n#define IDirect3DRMFrame_AddChild(p,a)                    (p)->AddChild(a)\n#define IDirect3DRMFrame_AddLight(p,a)                    (p)->AddLight(a)\n#define IDirect3DRMFrame_AddMoveCallback(p,a,b)           (p)->AddMoveCallback(a,b)\n#define IDirect3DRMFrame_AddTransform(p,a,b)              (p)->AddTransform(a,b)\n#define IDirect3DRMFrame_AddTranslation(p,a,b,c,d)        (p)->AddTranslation(a,b,c,d)\n#define IDirect3DRMFrame_AddScale(p,a,b,c,d)              (p)->AddScale(a,b,c,d)\n#define IDirect3DRMFrame_AddRotation(p,a,b,c,d,e)         (p)->AddRotation(a,b,c,d,e)\n#define IDirect3DRMFrame_AddVisual(p,a)                   (p)->AddVisual(a)\n#define IDirect3DRMFrame_GetChildren(p,a)                 (p)->GetChildren(a)\n#define IDirect3DRMFrame_GetColor(p)                      (p)->GetColor()\n#define IDirect3DRMFrame_GetLights(p,a)                   (p)->GetLights(a)\n#define IDirect3DRMFrame_GetMaterialMode(p)               (p)->GetMaterialMode()\n#define IDirect3DRMFrame_GetParent(p,a)                   (p)->GetParent(a)\n#define IDirect3DRMFrame_GetPosition(p,a,b)               (p)->GetPosition(a,b)\n#define IDirect3DRMFrame_GetRotation(p,a,b,c)             (p)->GetRotation(a,b,c)\n#define IDirect3DRMFrame_GetScene(p,a)                    (p)->GetScene(a)\n#define IDirect3DRMFrame_GetSortMode(p)                   (p)->GetSortMode()\n#define IDirect3DRMFrame_GetTexture(p,a)                  (p)->GetTexture(a)\n#define IDirect3DRMFrame_GetTransform(p,a)                (p)->GetTransform(a)\n#define IDirect3DRMFrame_GetVelocity(p,a,b,c)             (p)->GetVelocity(a,b,c)\n#define IDirect3DRMFrame_GetOrientation(p,a,b,c)          (p)->GetOrientation(a,b,c)\n#define IDirect3DRMFrame_GetVisuals(p,a)                  (p)->GetVisuals(a)\n#define IDirect3DRMFrame_GetTextureTopology(p,a,b)        (p)->GetTextureTopology(a,b)\n#define IDirect3DRMFrame_InverseTransform(p,a,b)          (p)->InverseTransform(a,b)\n#define IDirect3DRMFrame_Load(p,a,b,c,d,e)                (p)->Load(a,b,c,d,e)\n#define IDirect3DRMFrame_LookAt(p,a,b,c)                  (p)->LookAt(a,b,c)\n#define IDirect3DRMFrame_Move(p,a)                        (p)->Move(a)\n#define IDirect3DRMFrame_DeleteChild(p,a)                 (p)->DeleteChild(a)\n#define IDirect3DRMFrame_DeleteLight(p,a)                 (p)->DeleteLight(a)\n#define IDirect3DRMFrame_DeleteMoveCallback(p,a,b)        (p)->DeleteMoveCallback(a,b)\n#define IDirect3DRMFrame_DeleteVisual(p,a)                (p)->DeleteVisual(a)\n#define IDirect3DRMFrame_GetSceneBackground(p)            (p)->GetSceneBackground()\n#define IDirect3DRMFrame_GetSceneBackgroundDepth(p,a)     (p)->GetSceneBackgroundDepth(a)\n#define IDirect3DRMFrame_GetSceneFogColor(p)              (p)->GetSceneFogColor()\n#define IDirect3DRMFrame_GetSceneFogEnable(p)             (p)->GetSceneFogEnable()\n#define IDirect3DRMFrame_GetSceneFogMode(p)               (p)->GetSceneFogMode()\n#define IDirect3DRMFrame_GetSceneFogParams(p,a,b,c)       (p)->GetSceneFogParams(a,b,c)\n#define IDirect3DRMFrame_SetSceneBackground(p,a)          (p)->SetSceneBackground(a)\n#define IDirect3DRMFrame_SetSceneBackgroundRGB(p,a,b,c)   (p)->SetSceneBackgroundRGB(a,b,c)\n#define IDirect3DRMFrame_SetSceneBackgroundDepth(p,a)     (p)->SetSceneBackgroundDepth(a)\n#define IDirect3DRMFrame_SetSceneBackgroundImage(p,a)     (p)->SetSceneBackgroundImage(a)\n#define IDirect3DRMFrame_SetSceneFogEnable(p,a)           (p)->SetSceneFogEnable(a)\n#define IDirect3DRMFrame_SetSceneFogColor(p,a)            (p)->SetSceneFogColor(a)\n#define IDirect3DRMFrame_SetSceneFogMode(p,a)             (p)->SetSceneFogMode(a)\n#define IDirect3DRMFrame_SetSceneFogParams(p,a,b,c)       (p)->SetSceneFogParams(a,b,c)\n#define IDirect3DRMFrame_SetColor(p,a)                    (p)->SetColor(a)\n#define IDirect3DRMFrame_SetColorRGB(p,a,b,c)             (p)->SetColorRGB(a,b,c)\n#define IDirect3DRMFrame_GetZbufferMode(p)                (p)->GetZbufferMode()\n#define IDirect3DRMFrame_SetMaterialMode(p,a)             (p)->SetMaterialMode(a)\n#define IDirect3DRMFrame_SetOrientation(p,a,b,c,d,e,f,g)  (p)->SetOrientation(a,b,c,d,e,f,g)\n#define IDirect3DRMFrame_SetPosition(p,a,b,c,d)           (p)->SetPosition(a,b,c,d)\n#define IDirect3DRMFrame_SetRotation(p,a,b,c,d,e)         (p)->SetRotation(a,b,c,d,e)\n#define IDirect3DRMFrame_SetSortMode(p,a)                 (p)->SetSortMode(a)\n#define IDirect3DRMFrame_SetTexture(p,a)                  (p)->SetTexture(a)\n#define IDirect3DRMFrame_SetTextureTopology(p,a,b)        (p)->SetTextureTopology(a,b)\n#define IDirect3DRMFrame_SetVelocity(p,a,b,c,d,e)         (p)->SetVelocity(a,b,c,d,e)\n#define IDirect3DRMFrame_SetZbufferMode(p,a)              (p)->SetZbufferMode(a)\n#define IDirect3DRMFrame_Transform(p,a,b)                 (p)->Transform(a,b)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMFrame2 interface\n */\n#define INTERFACE IDirect3DRMFrame2\nDECLARE_INTERFACE_(IDirect3DRMFrame2,IDirect3DRMFrame)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMFrame methods ***/\n    STDMETHOD(AddChild)(THIS_ IDirect3DRMFrame *child) PURE;\n    STDMETHOD(AddLight)(THIS_ struct IDirect3DRMLight *light) PURE;\n    STDMETHOD(AddMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK cb, void *ctx) PURE;\n    STDMETHOD(AddTransform)(THIS_ D3DRMCOMBINETYPE, D3DRMMATRIX4D) PURE;\n    STDMETHOD(AddTranslation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;\n    STDMETHOD(AddScale)(THIS_ D3DRMCOMBINETYPE, D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;\n    STDMETHOD(AddRotation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;\n    STDMETHOD(AddVisual)(THIS_ IDirect3DRMVisual *visual) PURE;\n    STDMETHOD(GetChildren)(THIS_ struct IDirect3DRMFrameArray **children) PURE;\n    STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;\n    STDMETHOD(GetLights)(THIS_ struct IDirect3DRMLightArray **lights) PURE;\n    STDMETHOD_(D3DRMMATERIALMODE, GetMaterialMode)(THIS) PURE;\n    STDMETHOD(GetParent)(THIS_ IDirect3DRMFrame **parent) PURE;\n    STDMETHOD(GetPosition)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *return_position) PURE;\n    STDMETHOD(GetRotation)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *axis, D3DVALUE *return_theta) PURE;\n    STDMETHOD(GetScene)(THIS_ IDirect3DRMFrame **scene) PURE;\n    STDMETHOD_(D3DRMSORTMODE, GetSortMode)(THIS) PURE;\n    STDMETHOD(GetTexture)(THIS_ struct IDirect3DRMTexture **texture) PURE;\n    STDMETHOD(GetTransform)(THIS_ D3DRMMATRIX4D return_matrix) PURE;\n    STDMETHOD(GetVelocity)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *return_velocity, BOOL with_rotation) PURE;\n    STDMETHOD(GetOrientation)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *dir, D3DVECTOR *up) PURE;\n    STDMETHOD(GetVisuals)(THIS_ struct IDirect3DRMVisualArray **visuals) PURE;\n    STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE;\n    STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;\n    STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags,\n            D3DRMLOADTEXTURECALLBACK cb, void *ctx)PURE;\n    STDMETHOD(LookAt)(THIS_ IDirect3DRMFrame *target, IDirect3DRMFrame *reference,\n            D3DRMFRAMECONSTRAINT constraint) PURE;\n    STDMETHOD(Move)(THIS_ D3DVALUE delta) PURE;\n    STDMETHOD(DeleteChild)(THIS_ IDirect3DRMFrame *child) PURE;\n    STDMETHOD(DeleteLight)(THIS_ struct IDirect3DRMLight *light) PURE;\n    STDMETHOD(DeleteMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteVisual)(THIS_ IDirect3DRMVisual *visual) PURE;\n    STDMETHOD_(D3DCOLOR, GetSceneBackground)(THIS) PURE;\n    STDMETHOD(GetSceneBackgroundDepth)(THIS_ IDirectDrawSurface **surface) PURE;\n    STDMETHOD_(D3DCOLOR, GetSceneFogColor)(THIS) PURE;\n    STDMETHOD_(BOOL, GetSceneFogEnable)(THIS) PURE;\n    STDMETHOD_(D3DRMFOGMODE, GetSceneFogMode)(THIS) PURE;\n    STDMETHOD(GetSceneFogParams)(THIS_ D3DVALUE *return_start, D3DVALUE *return_end, D3DVALUE *return_density) PURE;\n    STDMETHOD(SetSceneBackground)(THIS_ D3DCOLOR) PURE;\n    STDMETHOD(SetSceneBackgroundRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;\n    STDMETHOD(SetSceneBackgroundDepth)(THIS_ IDirectDrawSurface *surface) PURE;\n    STDMETHOD(SetSceneBackgroundImage)(THIS_ struct IDirect3DRMTexture *texture) PURE;\n    STDMETHOD(SetSceneFogEnable)(THIS_ BOOL) PURE;\n    STDMETHOD(SetSceneFogColor)(THIS_ D3DCOLOR) PURE;\n    STDMETHOD(SetSceneFogMode)(THIS_ D3DRMFOGMODE) PURE;\n    STDMETHOD(SetSceneFogParams)(THIS_ D3DVALUE start, D3DVALUE end, D3DVALUE density) PURE;\n    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;\n    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;\n    STDMETHOD_(D3DRMZBUFFERMODE, GetZbufferMode)(THIS) PURE;\n    STDMETHOD(SetMaterialMode)(THIS_ D3DRMMATERIALMODE) PURE;\n    STDMETHOD(SetOrientation)(THIS_ IDirect3DRMFrame *reference, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,\n            D3DVALUE ux, D3DVALUE uy, D3DVALUE uz) PURE;\n    STDMETHOD(SetPosition)(THIS_ IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;\n    STDMETHOD(SetRotation)(THIS_ IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;\n    STDMETHOD(SetSortMode)(THIS_ D3DRMSORTMODE) PURE;\n    STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture *texture) PURE;\n    STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;\n    STDMETHOD(SetVelocity)(THIS_ IDirect3DRMFrame *reference,\n            D3DVALUE x, D3DVALUE y, D3DVALUE z, BOOL with_rotation) PURE;\n    STDMETHOD(SetZbufferMode)(THIS_ D3DRMZBUFFERMODE) PURE;\n    STDMETHOD(Transform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;\n    /*** IDirect3DRMFrame2 methods ***/\n    STDMETHOD(AddMoveCallback2)(THIS_ D3DRMFRAMEMOVECALLBACK cb, void *ctx, DWORD flags) PURE;\n    STDMETHOD(GetBox)(THIS_ D3DRMBOX *box) PURE;\n    STDMETHOD_(BOOL, GetBoxEnable)(THIS) PURE;\n    STDMETHOD(GetAxes)(THIS_ D3DVECTOR *dir, D3DVECTOR *up);\n    STDMETHOD(GetMaterial)(THIS_ struct IDirect3DRMMaterial **material) PURE;\n    STDMETHOD_(BOOL, GetInheritAxes)(THIS);\n    STDMETHOD(GetHierarchyBox)(THIS_ D3DRMBOX *box) PURE;\n    STDMETHOD(SetBox)(THIS_ D3DRMBOX *box) PURE;\n    STDMETHOD(SetBoxEnable)(THIS_ BOOL) PURE;\n    STDMETHOD(SetAxes)(THIS_ D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz);\n    STDMETHOD(SetInheritAxes)(THIS_ BOOL inherit_from_parent);\n    STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial *material) PURE;\n    STDMETHOD(SetQuaternion)(THIS_ IDirect3DRMFrame *reference, D3DRMQUATERNION *q) PURE;\n    STDMETHOD(RayPick)(THIS_ IDirect3DRMFrame *reference, D3DRMRAY *ray, DWORD flags,\n            struct IDirect3DRMPicked2Array **return_visuals) PURE;\n    STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT format, D3DRMSAVEOPTIONS flags);\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMFrame2_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMFrame2_AddRef(p)                        (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMFrame2_Release(p)                       (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMFrame2_Clone(p,a,b,c)                   (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMFrame2_AddDestroyCallback(p,a,b)        (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMFrame2_DeleteDestroyCallback(p,a,b)     (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMFrame2_SetAppData(p,a)                  (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMFrame2_GetAppData(p)                    (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMFrame2_SetName(p,a)                     (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMFrame2_GetName(p,a,b)                   (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMFrame2_GetClassName(p,a,b)              (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMFrame methods ***/\n#define IDirect3DRMFrame2_AddChild(p,a)                    (p)->lpVtbl->AddChild(p,a)\n#define IDirect3DRMFrame2_AddLight(p,a)                    (p)->lpVtbl->AddLight(p,a)\n#define IDirect3DRMFrame2_AddMoveCallback(p,a,b)           (p)->lpVtbl->AddMoveCallback(p,a,b)\n#define IDirect3DRMFrame2_AddTransform(p,a,b)              (p)->lpVtbl->AddTransform(p,a,b)\n#define IDirect3DRMFrame2_AddTranslation(p,a,b,c,d)        (p)->lpVtbl->AddTranslation(p,a,b,c,d)\n#define IDirect3DRMFrame2_AddScale(p,a,b,c,d)              (p)->lpVtbl->AddScale(p,a,b,c,d)\n#define IDirect3DRMFrame2_AddRotation(p,a,b,c,d,e)         (p)->lpVtbl->AddRotation(p,a,b,c,d,e)\n#define IDirect3DRMFrame2_AddVisual(p,a)                   (p)->lpVtbl->AddVisual(p,a)\n#define IDirect3DRMFrame2_GetChildren(p,a)                 (p)->lpVtbl->GetChildren(p,a)\n#define IDirect3DRMFrame2_GetColor(p)                      (p)->lpVtbl->GetColor(p)\n#define IDirect3DRMFrame2_GetLights(p,a)                   (p)->lpVtbl->GetLights(p,a)\n#define IDirect3DRMFrame2_GetMaterialMode(p)               (p)->lpVtbl->GetMaterialMode(p)\n#define IDirect3DRMFrame2_GetParent(p,a)                   (p)->lpVtbl->GetParent(p,a)\n#define IDirect3DRMFrame2_GetPosition(p,a,b)               (p)->lpVtbl->GetPosition(p,a,b)\n#define IDirect3DRMFrame2_GetRotation(p,a,b,c)             (p)->lpVtbl->GetRotation(p,a,b,c)\n#define IDirect3DRMFrame2_GetScene(p,a)                    (p)->lpVtbl->GetScene(p,a)\n#define IDirect3DRMFrame2_GetSortMode(p)                   (p)->lpVtbl->GetSortMode(p)\n#define IDirect3DRMFrame2_GetTexture(p,a)                  (p)->lpVtbl->GetTexture(p,a)\n#define IDirect3DRMFrame2_GetTransform(p,a)                (p)->lpVtbl->GetTransform(p,a)\n#define IDirect3DRMFrame2_GetVelocity(p,a,b,c)             (p)->lpVtbl->GetVelocity(p,a,b,c)\n#define IDirect3DRMFrame2_GetOrientation(p,a,b,c)          (p)->lpVtbl->GetOrientation(p,a,b,c)\n#define IDirect3DRMFrame2_GetVisuals(p,a)                  (p)->lpVtbl->GetVisuals(p,a)\n#define IDirect3DRMFrame2_GetTextureTopology(p,a,b)        (p)->lpVtbl->GetTextureTopology(p,a,b)\n#define IDirect3DRMFrame2_InverseTransform(p,a,b)          (p)->lpVtbl->InverseTransform(p,a,b)\n#define IDirect3DRMFrame2_Load(p,a,b,c,d,e)                (p)->lpVtbl->Load(p,a,b,c,d,e)\n#define IDirect3DRMFrame2_LookAt(p,a,b,c)                  (p)->lpVtbl->LookAt(p,a,b,c)\n#define IDirect3DRMFrame2_Move(p,a)                        (p)->lpVtbl->Move(p,a)\n#define IDirect3DRMFrame2_DeleteChild(p,a)                 (p)->lpVtbl->DeleteChild(p,a)\n#define IDirect3DRMFrame2_DeleteLight(p,a)                 (p)->lpVtbl->DeleteLight(p,a)\n#define IDirect3DRMFrame2_DeleteMoveCallback(p,a,b)        (p)->lpVtbl->DeleteMoveCallback(p,a,b)\n#define IDirect3DRMFrame2_DeleteVisual(p,a)                (p)->lpVtbl->DeleteVisual(p,a)\n#define IDirect3DRMFrame2_GetSceneBackground(p)            (p)->lpVtbl->GetSceneBackground(p)\n#define IDirect3DRMFrame2_GetSceneBackgroundDepth(p,a)     (p)->lpVtbl->GetSceneBackgroundDepth(p,a)\n#define IDirect3DRMFrame2_GetSceneFogColor(p)              (p)->lpVtbl->GetSceneFogColor(p)\n#define IDirect3DRMFrame2_GetSceneFogEnable(p)             (p)->lpVtbl->GetSceneFogEnable(p)\n#define IDirect3DRMFrame2_GetSceneFogMode(p)               (p)->lpVtbl->GetSceneFogMode(p)\n#define IDirect3DRMFrame2_GetSceneFogParams(p,a,b,c)       (p)->lpVtbl->GetSceneFogParams(p,a,b,c)\n#define IDirect3DRMFrame2_SetSceneBackground(p,a)          (p)->lpVtbl->SetSceneBackground(p,a)\n#define IDirect3DRMFrame2_SetSceneBackgroundRGB(p,a,b,c)   (p)->lpVtbl->SetSceneBackgroundRGB(p,a,b,c)\n#define IDirect3DRMFrame2_SetSceneBackgroundDepth(p,a)     (p)->lpVtbl->SetSceneBackgroundDepth(p,a)\n#define IDirect3DRMFrame2_SetSceneBackgroundImage(p,a)     (p)->lpVtbl->SetSceneBackgroundImage(p,a)\n#define IDirect3DRMFrame2_SetSceneFogEnable(p,a)           (p)->lpVtbl->SetSceneFogEnable(p,a)\n#define IDirect3DRMFrame2_SetSceneFogColor(p,a)            (p)->lpVtbl->SetSceneFogColor(p,a)\n#define IDirect3DRMFrame2_SetSceneFogMode(p,a)             (p)->lpVtbl->SetSceneFogMode(p,a)\n#define IDirect3DRMFrame2_SetSceneFogParams(p,a,b,c)       (p)->lpVtbl->SetSceneFogParams(p,a,b,c)\n#define IDirect3DRMFrame2_SetColor(p,a)                    (p)->lpVtbl->SetColor(p,a)\n#define IDirect3DRMFrame2_SetColorRGB(p,a,b,c)             (p)->lpVtbl->SetColorRGB(p,a,b,c)\n#define IDirect3DRMFrame2_GetZbufferMode(p)                (p)->lpVtbl->GetZbufferMode(p)\n#define IDirect3DRMFrame2_SetMaterialMode(p,a)             (p)->lpVtbl->SetMaterialMode(p,a)\n#define IDirect3DRMFrame2_SetOrientation(p,a,b,c,d,e,f,g)  (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g)\n#define IDirect3DRMFrame2_SetPosition(p,a,b,c,d)           (p)->lpVtbl->SetPosition(p,a,b,c,d)\n#define IDirect3DRMFrame2_SetRotation(p,a,b,c,d,e)         (p)->lpVtbl->SetRotation(p,a,b,c,d,e)\n#define IDirect3DRMFrame2_SetSortMode(p,a)                 (p)->lpVtbl->SetSortMode(p,a)\n#define IDirect3DRMFrame2_SetTexture(p,a)                  (p)->lpVtbl->SetTexture(p,a)\n#define IDirect3DRMFrame2_SetTextureTopology(p,a,b)        (p)->lpVtbl->SetTextureTopology(p,a,b)\n#define IDirect3DRMFrame2_SetVelocity(p,a,b,c,d,e)         (p)->lpVtbl->SetVelocity(p,a,b,c,d,e)\n#define IDirect3DRMFrame2_SetZbufferMode(p,a)              (p)->lpVtbl->SetZbufferMode(p,a)\n#define IDirect3DRMFrame2_Transform(p,a,b)                 (p)->lpVtbl->Transform(p,a,b)\n/*** IDirect3DRMFrame2 methods ***/\n#define IDirect3DRMFrame2_AddMoveCallback2(p,a,b,c)        (p)->lpVtbl->AddMoveCallback2(p,a,b,c)\n#define IDirect3DRMFrame2_GetBox(p,a)                      (p)->lpVtbl->GetBox(p,a)\n#define IDirect3DRMFrame2_GetBoxEnable(p)                  (p)->lpVtbl->GetBoxEnable(p)\n#define IDirect3DRMFrame2_GetAxes(p,a,b)                   (p)->lpVtbl->GetAxes(p,a,b)\n#define IDirect3DRMFrame2_GetMaterial(p,a)                 (p)->lpVtbl->GetMaterial(p,a)\n#define IDirect3DRMFrame2_GetInheritAxes(p,a,b)            (p)->lpVtbl->GetInheritAxes(p,a,b)\n#define IDirect3DRMFrame2_GetHierarchyBox(p,a)             (p)->lpVtbl->GetHierarchyBox(p,a)\n#define IDirect3DRMFrame2_SetBox(p,a)                      (p)->lpVtbl->SetBox(p,a)\n#define IDirect3DRMFrame2_SetBoxEnable(p,a)                (p)->lpVtbl->SetBoxEnable(p,a)\n#define IDirect3DRMFrame2_SetAxes(p,a,b,c,d,e,f)           (p)->lpVtbl->SetAxes(p,a,b,c,d,e,f)\n#define IDirect3DRMFrame2_SetInheritAxes(p,a)              (p)->lpVtbl->SetInheritAxes(p,a)\n#define IDirect3DRMFrame2_SetMaterial(p,a)                 (p)->lpVtbl->SetMaterial(p,a)\n#define IDirect3DRMFrame2_SetQuaternion(p,a,b)             (p)->lpVtbl->SetQuaternion(p,a,b)\n#define IDirect3DRMFrame2_RayPick(p,a,b,c,d)               (p)->lpVtbl->RayPick(p,a,b,c,d)\n#define IDirect3DRMFrame2_Save(p,a,b,c)                    (p)->lpVtbl->Save(p,a,b,c)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMFrame2_QueryInterface(p,a,b)            (p)->QueryInterface(a,b)\n#define IDirect3DRMFrame2_AddRef(p)                        (p)->AddRef()\n#define IDirect3DRMFrame2_Release(p)                       (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMFrame2_Clone(p,a,b,c)                   (p)->Clone(a,b,c)\n#define IDirect3DRMFrame2_AddDestroyCallback(p,a,b)        (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMFrame2_DeleteDestroyCallback(p,a,b)     (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMFrame2_SetAppData(p,a)                  (p)->SetAppData(a)\n#define IDirect3DRMFrame2_GetAppData(p)                    (p)->GetAppData()\n#define IDirect3DRMFrame2_SetName(p,a)                     (p)->SetName(a)\n#define IDirect3DRMFrame2_GetName(p,a,b)                   (p)->GetName(a,b)\n#define IDirect3DRMFrame2_GetClassName(p,a,b)              (p)->GetClassName(a,b)\n/*** IDirect3DRMFrame methods ***/\n#define IDirect3DRMFrame2_AddChild(p,a)                    (p)->AddChild(a)\n#define IDirect3DRMFrame2_AddLight(p,a)                    (p)->AddLight(a)\n#define IDirect3DRMFrame2_AddMoveCallback(p,a,b)           (p)->AddMoveCallback(a,b)\n#define IDirect3DRMFrame2_AddTransform(p,a,b)              (p)->AddTransform(a,b)\n#define IDirect3DRMFrame2_AddTranslation(p,a,b,c,d)        (p)->AddTranslation(a,b,c,d)\n#define IDirect3DRMFrame2_AddScale(p,a,b,c,d)              (p)->AddScale(a,b,c,d)\n#define IDirect3DRMFrame2_AddRotation(p,a,b,c,d,e)         (p)->AddRotation(a,b,c,d,e)\n#define IDirect3DRMFrame2_AddVisual(p,a)                   (p)->AddVisual(a)\n#define IDirect3DRMFrame2_GetChildren(p,a)                 (p)->GetChildren(a)\n#define IDirect3DRMFrame2_GetColor(p)                      (p)->GetColor()\n#define IDirect3DRMFrame2_GetLights(p,a)                   (p)->GetLights(a)\n#define IDirect3DRMFrame2_GetMaterialMode(p)               (p)->GetMaterialMode()\n#define IDirect3DRMFrame2_GetParent(p,a)                   (p)->GetParent(a)\n#define IDirect3DRMFrame2_GetPosition(p,a,b)               (p)->GetPosition(a,b)\n#define IDirect3DRMFrame2_GetRotation(p,a,b,c)             (p)->GetRotation(a,b,c)\n#define IDirect3DRMFrame2_GetScene(p,a)                    (p)->GetScene(a)\n#define IDirect3DRMFrame2_GetSortMode(p)                   (p)->GetSortMode()\n#define IDirect3DRMFrame2_GetTexture(p,a)                  (p)->GetTexture(a)\n#define IDirect3DRMFrame2_GetTransform(p,a)                (p)->GetTransform(a)\n#define IDirect3DRMFrame2_GetVelocity(p,a,b,c)             (p)->GetVelocity(a,b,c)\n#define IDirect3DRMFrame2_GetOrientation(p,a,b,c)          (p)->GetOrientation(a,b,c)\n#define IDirect3DRMFrame2_GetVisuals(p,a)                  (p)->GetVisuals(a)\n#define IDirect3DRMFrame2_GetTextureTopology(p,a,b)        (p)->GetTextureTopology(a,b)\n#define IDirect3DRMFrame2_InverseTransform(p,a,b)          (p)->InverseTransform(a,b)\n#define IDirect3DRMFrame2_Load(p,a,b,c,d,e)                (p)->Load(a,b,c,d,e)\n#define IDirect3DRMFrame2_LookAt(p,a,b,c)                  (p)->LookAt(a,b,c)\n#define IDirect3DRMFrame2_Move(p,a)                        (p)->Move(a)\n#define IDirect3DRMFrame2_DeleteChild(p,a)                 (p)->DeleteChild(a)\n#define IDirect3DRMFrame2_DeleteLight(p,a)                 (p)->DeleteLight(a)\n#define IDirect3DRMFrame2_DeleteMoveCallback(p,a,b)        (p)->DeleteMoveCallback(a,b)\n#define IDirect3DRMFrame2_DeleteVisual(p,a)                (p)->DeleteVisual(a)\n#define IDirect3DRMFrame2_GetSceneBackground(p)            (p)->GetSceneBackground()\n#define IDirect3DRMFrame2_GetSceneBackgroundDepth(p,a)     (p)->GetSceneBackgroundDepth(a)\n#define IDirect3DRMFrame2_GetSceneFogColor(p)              (p)->GetSceneFogColor()\n#define IDirect3DRMFrame2_GetSceneFogEnable(p)             (p)->GetSceneFogEnable()\n#define IDirect3DRMFrame2_GetSceneFogMode(p)               (p)->GetSceneFogMode()\n#define IDirect3DRMFrame2_GetSceneFogParams(p,a,b,c)       (p)->GetSceneFogParams(a,b,c)\n#define IDirect3DRMFrame2_SetSceneBackground(p,a)          (p)->SetSceneBackground(a)\n#define IDirect3DRMFrame2_SetSceneBackgroundRGB(p,a,b,c)   (p)->SetSceneBackgroundRGB(a,b,c)\n#define IDirect3DRMFrame2_SetSceneBackgroundDepth(p,a)     (p)->SetSceneBackgroundDepth(a)\n#define IDirect3DRMFrame2_SetSceneBackgroundImage(p,a)     (p)->SetSceneBackgroundImage(a)\n#define IDirect3DRMFrame2_SetSceneFogEnable(p,a)           (p)->SetSceneFogEnable(a)\n#define IDirect3DRMFrame2_SetSceneFogColor(p,a)            (p)->SetSceneFogColor(a)\n#define IDirect3DRMFrame2_SetSceneFogMode(p,a)             (p)->SetSceneFogMode(a)\n#define IDirect3DRMFrame2_SetSceneFogParams(p,a,b,c)       (p)->SetSceneFogParams(a,b,c)\n#define IDirect3DRMFrame2_SetColor(p,a)                    (p)->SetColor(a)\n#define IDirect3DRMFrame2_SetColorRGB(p,a,b,c)             (p)->SetColorRGB(a,b,c)\n#define IDirect3DRMFrame2_GetZbufferMode(p)                (p)->GetZbufferMode()\n#define IDirect3DRMFrame2_SetMaterialMode(p,a)             (p)->SetMaterialMode(a)\n#define IDirect3DRMFrame2_SetOrientation(p,a,b,c,d,e,f,g)  (p)->SetOrientation(a,b,c,d,e,f,g)\n#define IDirect3DRMFrame2_SetPosition(p,a,b,c,d)           (p)->SetPosition(a,b,c,d)\n#define IDirect3DRMFrame2_SetRotation(p,a,b,c,d,e)         (p)->SetRotation(a,b,c,d,e)\n#define IDirect3DRMFrame2_SetSortMode(p,a)                 (p)->SetSortMode(a)\n#define IDirect3DRMFrame2_SetTexture(p,a)                  (p)->SetTexture(a)\n#define IDirect3DRMFrame2_SetTextureTopology(p,a,b)        (p)->SetTextureTopology(a,b)\n#define IDirect3DRMFrame2_SetVelocity(p,a,b,c,d,e)         (p)->SetVelocity(a,b,c,d,e)\n#define IDirect3DRMFrame2_SetZbufferMode(p,a)              (p)->SetZbufferMode(a)\n#define IDirect3DRMFrame2_Transform(p,a,b)                 (p)->Transform(a,b)\n/*** IDirect3DRMFrame2 methods ***/\n#define IDirect3DRMFrame2_AddMoveCallback2(p,a,b,c)        (p)->AddMoveCallback2(a,b,c)\n#define IDirect3DRMFrame2_GetBox(p,a)                      (p)->GetBox(a)\n#define IDirect3DRMFrame2_GetBoxEnable(p)                  (p)->GetBoxEnable()\n#define IDirect3DRMFrame2_GetAxes(p,a,b)                   (p)->GetAxes(a,b)\n#define IDirect3DRMFrame2_GetMaterial(p,a)                 (p)->GetMaterial(a)\n#define IDirect3DRMFrame2_GetInheritAxes(p,a,b)            (p)->GetInheritAxes(a,b)\n#define IDirect3DRMFrame2_GetHierarchyBox(p,a)             (p)->GetHierarchyBox(a)\n#define IDirect3DRMFrame2_SetBox(p,a)                      (p)->SetBox(a)\n#define IDirect3DRMFrame2_SetBoxEnable(p,a)                (p)->SetBoxEnable(a)\n#define IDirect3DRMFrame2_SetAxes(p,a,b,c,d,e,f)           (p)->SetAxes(a,b,c,d,e,f)\n#define IDirect3DRMFrame2_SetInheritAxes(p,a)              (p)->SetInheritAxes(a)\n#define IDirect3DRMFrame2_SetMaterial(p,a)                 (p)->SetMaterial(a)\n#define IDirect3DRMFrame2_SetQuaternion(p,a,b)             (p)->SetQuaternion(a,b)\n#define IDirect3DRMFrame2_RayPick(p,a,b,c,d)               (p)->RayPick(a,b,c,d)\n#define IDirect3DRMFrame2_Save(p,a,b,c)                    (p)->Save(a,b,c)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMFrame3 interface\n */\n#define INTERFACE IDirect3DRMFrame3\nDECLARE_INTERFACE_(IDirect3DRMFrame3,IDirect3DRMVisual)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMFrame3 methods ***/\n    STDMETHOD(AddChild)(THIS_ IDirect3DRMFrame3 *child) PURE;\n    STDMETHOD(AddLight)(THIS_ struct IDirect3DRMLight *light) PURE;\n    STDMETHOD(AddMoveCallback)(THIS_ D3DRMFRAME3MOVECALLBACK cb, void *ctx, DWORD flags) PURE;\n    STDMETHOD(AddTransform)(THIS_ D3DRMCOMBINETYPE, D3DRMMATRIX4D) PURE;\n    STDMETHOD(AddTranslation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;\n    STDMETHOD(AddScale)(THIS_ D3DRMCOMBINETYPE, D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;\n    STDMETHOD(AddRotation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;\n    STDMETHOD(AddVisual)(THIS_ IUnknown *visual) PURE;\n    STDMETHOD(GetChildren)(THIS_ struct IDirect3DRMFrameArray **children) PURE;\n    STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;\n    STDMETHOD(GetLights)(THIS_ struct IDirect3DRMLightArray **lights) PURE;\n    STDMETHOD_(D3DRMMATERIALMODE, GetMaterialMode)(THIS) PURE;\n    STDMETHOD(GetParent)(THIS_ IDirect3DRMFrame3 **parent) PURE;\n    STDMETHOD(GetPosition)(THIS_ IDirect3DRMFrame3 *reference, D3DVECTOR *return_position) PURE;\n    STDMETHOD(GetRotation)(THIS_ IDirect3DRMFrame3 *reference, D3DVECTOR *axis, D3DVALUE *return_theta) PURE;\n    STDMETHOD(GetScene)(THIS_ IDirect3DRMFrame3 **scene) PURE;\n    STDMETHOD_(D3DRMSORTMODE, GetSortMode)(THIS) PURE;\n    STDMETHOD(GetTexture)(THIS_ struct IDirect3DRMTexture3 **texture) PURE;\n    STDMETHOD(GetTransform)(THIS_ IDirect3DRMFrame3 *reference, D3DRMMATRIX4D matrix) PURE;\n    STDMETHOD(GetVelocity)(THIS_ IDirect3DRMFrame3 *reference, D3DVECTOR *return_velocity, BOOL with_rotation) PURE;\n    STDMETHOD(GetOrientation)(THIS_ IDirect3DRMFrame3 *reference, D3DVECTOR *dir, D3DVECTOR *up) PURE;\n    STDMETHOD(GetVisuals)(THIS_ DWORD *count, IUnknown **visuals) PURE;\n    STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;\n    STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags,\n            D3DRMLOADTEXTURE3CALLBACK cb, void *ctx) PURE;\n    STDMETHOD(LookAt)(THIS_ IDirect3DRMFrame3 *target, IDirect3DRMFrame3 *reference,\n            D3DRMFRAMECONSTRAINT constraint) PURE;\n    STDMETHOD(Move)(THIS_ D3DVALUE delta) PURE;\n    STDMETHOD(DeleteChild)(THIS_ IDirect3DRMFrame3 *child) PURE;\n    STDMETHOD(DeleteLight)(THIS_ struct IDirect3DRMLight *light) PURE;\n    STDMETHOD(DeleteMoveCallback)(THIS_ D3DRMFRAME3MOVECALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteVisual)(THIS_ IUnknown *visual) PURE;\n    STDMETHOD_(D3DCOLOR, GetSceneBackground)(THIS) PURE;\n    STDMETHOD(GetSceneBackgroundDepth)(THIS_ IDirectDrawSurface **surface) PURE;\n    STDMETHOD_(D3DCOLOR, GetSceneFogColor)(THIS) PURE;\n    STDMETHOD_(BOOL, GetSceneFogEnable)(THIS) PURE;\n    STDMETHOD_(D3DRMFOGMODE, GetSceneFogMode)(THIS) PURE;\n    STDMETHOD(GetSceneFogParams)(THIS_ D3DVALUE *return_start, D3DVALUE *return_end,\n        D3DVALUE *return_density) PURE;\n    STDMETHOD(SetSceneBackground)(THIS_ D3DCOLOR) PURE;\n    STDMETHOD(SetSceneBackgroundRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;\n    STDMETHOD(SetSceneBackgroundDepth)(THIS_ IDirectDrawSurface *surface) PURE;\n    STDMETHOD(SetSceneBackgroundImage)(THIS_ struct IDirect3DRMTexture3 *texture) PURE;\n    STDMETHOD(SetSceneFogEnable)(THIS_ BOOL) PURE;\n    STDMETHOD(SetSceneFogColor)(THIS_ D3DCOLOR) PURE;\n    STDMETHOD(SetSceneFogMode)(THIS_ D3DRMFOGMODE) PURE;\n    STDMETHOD(SetSceneFogParams)(THIS_ D3DVALUE start, D3DVALUE end, D3DVALUE density) PURE;\n    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;\n    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;\n    STDMETHOD_(D3DRMZBUFFERMODE, GetZbufferMode)(THIS) PURE;\n    STDMETHOD(SetMaterialMode)(THIS_ D3DRMMATERIALMODE) PURE;\n    STDMETHOD(SetOrientation)(THIS_ IDirect3DRMFrame3 *reference, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,\n            D3DVALUE ux, D3DVALUE uy, D3DVALUE uz) PURE;\n    STDMETHOD(SetPosition)(THIS_ IDirect3DRMFrame3 *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;\n    STDMETHOD(SetRotation)(THIS_ IDirect3DRMFrame3 *reference,\n            D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;\n    STDMETHOD(SetSortMode)(THIS_ D3DRMSORTMODE) PURE;\n    STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture3 *texture) PURE;\n    STDMETHOD(SetVelocity)(THIS_ IDirect3DRMFrame3 *reference,\n            D3DVALUE x, D3DVALUE y, D3DVALUE z, BOOL with_rotation) PURE;\n    STDMETHOD(SetZbufferMode)(THIS_ D3DRMZBUFFERMODE) PURE;\n    STDMETHOD(Transform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;\n    STDMETHOD(GetBox)(THIS_ D3DRMBOX *box) PURE;\n    STDMETHOD_(BOOL, GetBoxEnable)(THIS) PURE;\n    STDMETHOD(GetAxes)(THIS_ D3DVECTOR *dir, D3DVECTOR *up);\n    STDMETHOD(GetMaterial)(THIS_ struct IDirect3DRMMaterial2 **material) PURE;\n    STDMETHOD_(BOOL, GetInheritAxes)(THIS);\n    STDMETHOD(GetHierarchyBox)(THIS_ D3DRMBOX *box) PURE;\n    STDMETHOD(SetBox)(THIS_ D3DRMBOX *box) PURE;\n    STDMETHOD(SetBoxEnable)(THIS_ BOOL) PURE;\n    STDMETHOD(SetAxes)(THIS_ D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz);\n    STDMETHOD(SetInheritAxes)(THIS_ BOOL inherit_from_parent);\n    STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial2 *material) PURE;\n    STDMETHOD(SetQuaternion)(THIS_ IDirect3DRMFrame3 *reference, D3DRMQUATERNION *q) PURE;\n    STDMETHOD(RayPick)(THIS_ IDirect3DRMFrame3 *reference, D3DRMRAY *ray, DWORD flags,\n            struct IDirect3DRMPicked2Array **return_visuals) PURE;\n    STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT format, D3DRMSAVEOPTIONS flags);\n    STDMETHOD(TransformVectors)(THIS_ IDirect3DRMFrame3 *reference, DWORD vector_count,\n            D3DVECTOR *dst_vectors, D3DVECTOR *src_vectors) PURE;\n    STDMETHOD(InverseTransformVectors)(THIS_ IDirect3DRMFrame3 *reference, DWORD vector_count,\n            D3DVECTOR *dst_vectors, D3DVECTOR *src_vectors) PURE;\n    STDMETHOD(SetTraversalOptions)(THIS_ DWORD flags) PURE;\n    STDMETHOD(GetTraversalOptions)(THIS_ DWORD *flags) PURE;\n    STDMETHOD(SetSceneFogMethod)(THIS_ DWORD flags) PURE;\n    STDMETHOD(GetSceneFogMethod)(THIS_ DWORD *fog_mode) PURE;\n    STDMETHOD(SetMaterialOverride)(THIS_ D3DRMMATERIALOVERRIDE *override) PURE;\n    STDMETHOD(GetMaterialOverride)(THIS_ D3DRMMATERIALOVERRIDE *override) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMFrame3_QueryInterface(p,a,b)              (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMFrame3_AddRef(p)                          (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMFrame3_Release(p)                         (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMFrame3_Clone(p,a,b,c)                     (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMFrame3_AddDestroyCallback(p,a,b)          (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMFrame3_DeleteDestroyCallback(p,a,b)       (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMFrame3_SetAppData(p,a)                    (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMFrame3_GetAppData(p)                      (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMFrame3_SetName(p,a)                       (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMFrame3_GetName(p,a,b)                     (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMFrame3_GetClassName(p,a,b)                (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMFrame3 methods ***/\n#define IDirect3DRMFrame3_AddChild(p,a)                      (p)->lpVtbl->AddChild(p,a)\n#define IDirect3DRMFrame3_AddLight(p,a)                      (p)->lpVtbl->AddLight(p,a)\n#define IDirect3DRMFrame3_AddMoveCallback(p,a,b,c)           (p)->lpVtbl->AddMoveCallback(p,a,b,c)\n#define IDirect3DRMFrame3_AddTransform(p,a,b)                (p)->lpVtbl->AddTransform(p,a,b)\n#define IDirect3DRMFrame3_AddTranslation(p,a,b,c,d)          (p)->lpVtbl->AddTranslation(p,a,b,c,d)\n#define IDirect3DRMFrame3_AddScale(p,a,b,c,d)                (p)->lpVtbl->AddScale(p,a,b,c,d)\n#define IDirect3DRMFrame3_AddRotation(p,a,b,c,d,e)           (p)->lpVtbl->AddRotation(p,a,b,c,d,e)\n#define IDirect3DRMFrame3_AddVisual(p,a)                     (p)->lpVtbl->AddVisual(p,a)\n#define IDirect3DRMFrame3_GetChildren(p,a)                   (p)->lpVtbl->GetChildren(p,a)\n#define IDirect3DRMFrame3_GetColor(p)                        (p)->lpVtbl->GetColor(p)\n#define IDirect3DRMFrame3_GetLights(p,a)                     (p)->lpVtbl->GetLights(p,a)\n#define IDirect3DRMFrame3_GetMaterialMode(p)                 (p)->lpVtbl->GetMaterialMode(p)\n#define IDirect3DRMFrame3_GetParent(p,a)                     (p)->lpVtbl->GetParent(p,a)\n#define IDirect3DRMFrame3_GetPosition(p,a,b)                 (p)->lpVtbl->GetPosition(p,a,b)\n#define IDirect3DRMFrame3_GetRotation(p,a,b,c)               (p)->lpVtbl->GetRotation(p,a,b,c)\n#define IDirect3DRMFrame3_GetScene(p,a)                      (p)->lpVtbl->GetScene(p,a)\n#define IDirect3DRMFrame3_GetSortMode(p)                     (p)->lpVtbl->GetSortMode(p)\n#define IDirect3DRMFrame3_GetTexture(p,a)                    (p)->lpVtbl->GetTexture(p,a)\n#define IDirect3DRMFrame3_GetTransform(p,a,b)                (p)->lpVtbl->GetTransform(p,a,b)\n#define IDirect3DRMFrame3_GetVelocity(p,a,b,c)               (p)->lpVtbl->GetVelocity(p,a,b,c)\n#define IDirect3DRMFrame3_GetOrientation(p,a,b,c)            (p)->lpVtbl->GetOrientation(p,a,b,c)\n#define IDirect3DRMFrame3_GetVisuals(p,a,b)                  (p)->lpVtbl->GetVisuals(p,a,b)\n#define IDirect3DRMFrame3_InverseTransform(p,a,b)            (p)->lpVtbl->InverseTransform(p,a,b)\n#define IDirect3DRMFrame3_Load(p,a,b,c,d,e)                  (p)->lpVtbl->Load(p,a,b,c,d,e)\n#define IDirect3DRMFrame3_LookAt(p,a,b,c)                    (p)->lpVtbl->LookAt(p,a,b,c)\n#define IDirect3DRMFrame3_Move(p,a)                          (p)->lpVtbl->Move(p,a)\n#define IDirect3DRMFrame3_DeleteChild(p,a)                   (p)->lpVtbl->DeleteChild(p,a)\n#define IDirect3DRMFrame3_DeleteLight(p,a)                   (p)->lpVtbl->DeleteLight(p,a)\n#define IDirect3DRMFrame3_DeleteMoveCallback(p,a,b)          (p)->lpVtbl->DeleteMoveCallback(p,a,b)\n#define IDirect3DRMFrame3_DeleteVisual(p,a)                  (p)->lpVtbl->DeleteVisual(p,a)\n#define IDirect3DRMFrame3_GetSceneBackground(p)              (p)->lpVtbl->GetSceneBackground(p)\n#define IDirect3DRMFrame3_GetSceneBackgroundDepth(p,a)       (p)->lpVtbl->GetSceneBackgroundDepth(p,a)\n#define IDirect3DRMFrame3_GetSceneFogColor(p)                (p)->lpVtbl->GetSceneFogColor(p)\n#define IDirect3DRMFrame3_GetSceneFogEnable(p)               (p)->lpVtbl->GetSceneFogEnable(p)\n#define IDirect3DRMFrame3_GetSceneFogMode(p)                 (p)->lpVtbl->GetSceneFogMode(p)\n#define IDirect3DRMFrame3_GetSceneFogParams(p,a,b,c)         (p)->lpVtbl->GetSceneFogParams(p,a,b,c)\n#define IDirect3DRMFrame3_SetSceneBackground(p,a)            (p)->lpVtbl->SetSceneBackground(p,a)\n#define IDirect3DRMFrame3_SetSceneBackgroundRGB(p,a,b,c)     (p)->lpVtbl->SetSceneBackgroundRGB(p,a,b,c)\n#define IDirect3DRMFrame3_SetSceneBackgroundDepth(p,a)       (p)->lpVtbl->SetSceneBackgroundDepth(p,a)\n#define IDirect3DRMFrame3_SetSceneBackgroundImage(p,a)       (p)->lpVtbl->SetSceneBackgroundImage(p,a)\n#define IDirect3DRMFrame3_SetSceneFogEnable(p,a)             (p)->lpVtbl->SetSceneFogEnable(p,a)\n#define IDirect3DRMFrame3_SetSceneFogColor(p,a)              (p)->lpVtbl->SetSceneFogColor(p,a)\n#define IDirect3DRMFrame3_SetSceneFogMode(p,a)               (p)->lpVtbl->SetSceneFogMode(p,a)\n#define IDirect3DRMFrame3_SetSceneFogParams(p,a,b,c)         (p)->lpVtbl->SetSceneFogParams(p,a,b,c)\n#define IDirect3DRMFrame3_SetColor(p,a)                      (p)->lpVtbl->SetColor(p,a)\n#define IDirect3DRMFrame3_SetColorRGB(p,a,b,c)               (p)->lpVtbl->SetColorRGB(p,a,b,c)\n#define IDirect3DRMFrame3_GetZbufferMode(p)                  (p)->lpVtbl->GetZbufferMode(p)\n#define IDirect3DRMFrame3_SetMaterialMode(p,a)               (p)->lpVtbl->SetMaterialMode(p,a)\n#define IDirect3DRMFrame3_SetOrientation(p,a,b,c,d,e,f,g)    (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g)\n#define IDirect3DRMFrame3_SetPosition(p,a,b,c,d)             (p)->lpVtbl->SetPosition(p,a,b,c,d)\n#define IDirect3DRMFrame3_SetRotation(p,a,b,c,d,e)           (p)->lpVtbl->SetRotation(p,a,b,c,d,e)\n#define IDirect3DRMFrame3_SetSortMode(p,a)                   (p)->lpVtbl->SetSortMode(p,a)\n#define IDirect3DRMFrame3_SetTexture(p,a)                    (p)->lpVtbl->SetTexture(p,a)\n#define IDirect3DRMFrame3_SetVelocity(p,a,b,c,d,e)           (p)->lpVtbl->SetVelocity(p,a,b,c,d,e)\n#define IDirect3DRMFrame3_SetZbufferMode(p,a)                (p)->lpVtbl->SetZbufferMode(p,a)\n#define IDirect3DRMFrame3_Transform(p,a,b)                   (p)->lpVtbl->Transform(p,a,b)\n#define IDirect3DRMFrame3_GetBox(p,a)                        (p)->lpVtbl->GetBox(p,a)\n#define IDirect3DRMFrame3_GetBoxEnable(p)                    (p)->lpVtbl->GetBoxEnable(p)\n#define IDirect3DRMFrame3_GetAxes(p,a,b)                     (p)->lpVtbl->GetAxes(p,a,b)\n#define IDirect3DRMFrame3_GetMaterial(p,a)                   (p)->lpVtbl->GetMaterial(p,a)\n#define IDirect3DRMFrame3_GetInheritAxes(p)                  (p)->lpVtbl->GetInheritAxes(p)\n#define IDirect3DRMFrame3_GetHierarchyBox(p,a)               (p)->lpVtbl->GetHierarchyBox(p,a)\n#define IDirect3DRMFrame3_SetBox(p,a)                        (p)->lpVtbl->SetBox(p,a)\n#define IDirect3DRMFrame3_SetBoxEnable(p,a)                  (p)->lpVtbl->SetBoxEnable(p,a)\n#define IDirect3DRMFrame3_SetAxes(p,a,b,c,d,e,f)             (p)->lpVtbl->SetAxes(p,a,b,c,d,e,f)\n#define IDirect3DRMFrame3_SetInheritAxes(p,a)                (p)->lpVtbl->SetInheritAxes(p,a)\n#define IDirect3DRMFrame3_SetMaterial(p,a)                   (p)->lpVtbl->SetMaterial(p,a)\n#define IDirect3DRMFrame3_SetQuaternion(p,a,b)               (p)->lpVtbl->SetQuaternion(p,a,b)\n#define IDirect3DRMFrame3_RayPick(p,a,b,c,d)                 (p)->lpVtbl->RayPick(p,a,b,c,d)\n#define IDirect3DRMFrame3_Save(p,a,b,c)                      (p)->lpVtbl->Save(p,a,b,c)\n#define IDirect3DRMFrame3_TransformVectors(p,a,b,c,d)        (p)->lpVtbl->TransformVectors(p,a,b,c,d)\n#define IDirect3DRMFrame3_InverseTransformVectors(p,a,b,c,d) (p)->lpVtbl->InverseTransformVectors(p,a,b,c,d)\n#define IDirect3DRMFrame3_SetTraversalOptions(p,a)           (p)->lpVtbl->SetTraversalOptions(p,a)\n#define IDirect3DRMFrame3_GetTraversalOptions(p,a)           (p)->lpVtbl->GetTraversalOptions(p,a)\n#define IDirect3DRMFrame3_SetSceneFogMethod(p,a)             (p)->lpVtbl->SetSceneFogMethod(p,a)\n#define IDirect3DRMFrame3_GetSceneFogMethod(p,a)             (p)->lpVtbl->GetSceneFogMethod(p,a)\n#define IDirect3DRMFrame3_SetMaterialOverride(p,a)           (p)->lpVtbl->SetMaterialOverride(p,a)\n#define IDirect3DRMFrame3_GetMaterialOverride(p,a)           (p)->lpVtbl->GetMaterialOverride(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMFrame3_QueryInterface(p,a,b)              (p)->QueryInterface(a,b)\n#define IDirect3DRMFrame3_AddRef(p)                          (p)->AddRef()\n#define IDirect3DRMFrame3_Release(p)                         (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMFrame3_Clone(p,a,b,c)                     (p)->Clone(a,b,c)\n#define IDirect3DRMFrame3_AddDestroyCallback(p,a,b)          (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMFrame3_DeleteDestroyCallback(p,a,b)       (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMFrame3_SetAppData(p,a)                    (p)->SetAppData(a)\n#define IDirect3DRMFrame3_GetAppData(p)                      (p)->GetAppData()\n#define IDirect3DRMFrame3_SetName(p,a)                       (p)->SetName(a)\n#define IDirect3DRMFrame3_GetName(p,a,b)                     (p)->GetName(a,b)\n#define IDirect3DRMFrame3_GetClassName(p,a,b)                (p)->GetClassName(a,b)\n/*** IDirect3DRMFrame3 methods ***/\n#define IDirect3DRMFrame3_AddChild(p,a)                      (p)->AddChild(a)\n#define IDirect3DRMFrame3_AddLight(p,a)                      (p)->AddLight(a)\n#define IDirect3DRMFrame3_AddMoveCallback(p,a,b,c)           (p)->AddMoveCallback(a,b,c)\n#define IDirect3DRMFrame3_AddTransform(p,a,b)                (p)->AddTransform(a,b)\n#define IDirect3DRMFrame3_AddTranslation(p,a,b,c,d)          (p)->AddTranslation(a,b,c,d)\n#define IDirect3DRMFrame3_AddScale(p,a,b,c,d)                (p)->AddScale(a,b,c,d)\n#define IDirect3DRMFrame3_AddRotation(p,a,b,c,d,e)           (p)->AddRotation(a,b,c,d,e)\n#define IDirect3DRMFrame3_AddVisual(p,a)                     (p)->AddVisual(a)\n#define IDirect3DRMFrame3_GetChildren(p,a)                   (p)->GetChildren(a)\n#define IDirect3DRMFrame3_GetColor(p)                        (p)->GetColor()\n#define IDirect3DRMFrame3_GetLights(p,a)                     (p)->GetLights(a)\n#define IDirect3DRMFrame3_GetMaterialMode(p)                 (p)->GetMaterialMode()\n#define IDirect3DRMFrame3_GetParent(p,a)                     (p)->GetParent(a)\n#define IDirect3DRMFrame3_GetPosition(p,a,b)                 (p)->GetPosition(a,b)\n#define IDirect3DRMFrame3_GetRotation(p,a,b,c)               (p)->GetRotation(a,b,c)\n#define IDirect3DRMFrame3_GetScene(p,a)                      (p)->GetScene(a)\n#define IDirect3DRMFrame3_GetSortMode(p)                     (p)->GetSortMode()\n#define IDirect3DRMFrame3_GetTexture(p,a)                    (p)->GetTexture(a)\n#define IDirect3DRMFrame3_GetTransform(p,a,b)                (p)->GetTransform(a,b)\n#define IDirect3DRMFrame3_GetVelocity(p,a,b,c)               (p)->GetVelocity(a,b,c)\n#define IDirect3DRMFrame3_GetOrientation(p,a,b,c)            (p)->GetOrientation(a,b,c)\n#define IDirect3DRMFrame3_GetVisuals(p,a,b)                  (p)->GetVisuals(a,b)\n#define IDirect3DRMFrame3_InverseTransform(p,a,b)            (p)->InverseTransform(a,b)\n#define IDirect3DRMFrame3_Load(p,a,b,c,d,e)                  (p)->Load(a,b,c,d,e)\n#define IDirect3DRMFrame3_LookAt(p,a,b,c)                    (p)->LookAt(a,b,c)\n#define IDirect3DRMFrame3_Move(p,a)                          (p)->Move(a)\n#define IDirect3DRMFrame3_DeleteChild(p,a)                   (p)->DeleteChild(a)\n#define IDirect3DRMFrame3_DeleteLight(p,a)                   (p)->DeleteLight(a)\n#define IDirect3DRMFrame3_DeleteMoveCallback(p,a,b)          (p)->DeleteMoveCallback(a,b)\n#define IDirect3DRMFrame3_DeleteVisual(p,a)                  (p)->DeleteVisual(a)\n#define IDirect3DRMFrame3_GetSceneBackground(p)              (p)->GetSceneBackground()\n#define IDirect3DRMFrame3_GetSceneBackgroundDepth(p,a)       (p)->GetSceneBackgroundDepth(a)\n#define IDirect3DRMFrame3_GetSceneFogColor(p)                (p)->GetSceneFogColor()\n#define IDirect3DRMFrame3_GetSceneFogEnable(p)               (p)->GetSceneFogEnable()\n#define IDirect3DRMFrame3_GetSceneFogMode(p)                 (p)->GetSceneFogMode()\n#define IDirect3DRMFrame3_GetSceneFogParams(p,a,b,c)         (p)->GetSceneFogParams(a,b,c)\n#define IDirect3DRMFrame3_SetSceneBackground(p,a)            (p)->SetSceneBackground(a)\n#define IDirect3DRMFrame3_SetSceneBackgroundRGB(p,a,b,c)     (p)->SetSceneBackgroundRGB(a,b,c)\n#define IDirect3DRMFrame3_SetSceneBackgroundDepth(p,a)       (p)->SetSceneBackgroundDepth(a)\n#define IDirect3DRMFrame3_SetSceneBackgroundImage(p,a)       (p)->SetSceneBackgroundImage(a)\n#define IDirect3DRMFrame3_SetSceneFogEnable(p,a)             (p)->SetSceneFogEnable(a)\n#define IDirect3DRMFrame3_SetSceneFogColor(p,a)              (p)->SetSceneFogColor(a)\n#define IDirect3DRMFrame3_SetSceneFogMode(p,a)               (p)->SetSceneFogMode(a)\n#define IDirect3DRMFrame3_SetSceneFogParams(p,a,b,c)         (p)->SetSceneFogParams(a,b,c)\n#define IDirect3DRMFrame3_SetColor(p,a)                      (p)->SetColor(a)\n#define IDirect3DRMFrame3_SetColorRGB(p,a,b,c)               (p)->SetColorRGB(a,b,c)\n#define IDirect3DRMFrame3_GetZbufferMode(p)                  (p)->GetZbufferMode()\n#define IDirect3DRMFrame3_SetMaterialMode(p,a)               (p)->SetMaterialMode(a)\n#define IDirect3DRMFrame3_SetOrientation(p,a,b,c,d,e,f,g)    (p)->SetOrientation(a,b,c,d,e,f,g)\n#define IDirect3DRMFrame3_SetPosition(p,a,b,c,d)             (p)->SetPosition(a,b,c,d)\n#define IDirect3DRMFrame3_SetRotation(p,a,b,c,d,e)           (p)->SetRotation(a,b,c,d,e)\n#define IDirect3DRMFrame3_SetSortMode(p,a)                   (p)->SetSortMode(a)\n#define IDirect3DRMFrame3_SetTexture(p,a)                    (p)->SetTexture(a)\n#define IDirect3DRMFrame3_SetVelocity(p,a,b,c,d,e)           (p)->SetVelocity(a,b,c,d,e)\n#define IDirect3DRMFrame3_SetZbufferMode(p,a)                (p)->SetZbufferMode(a)\n#define IDirect3DRMFrame3_Transform(p,a,b)                   (p)->Transform(a,b)\n#define IDirect3DRMFrame3_GetBox(p,a)                        (p)->GetBox(a)\n#define IDirect3DRMFrame3_GetBoxEnable(p)                    (p)->GetBoxEnable()\n#define IDirect3DRMFrame3_GetAxes(p,a,b)                     (p)->GetAxes(a,b)\n#define IDirect3DRMFrame3_GetMaterial(p,a)                   (p)->GetMaterial(a)\n#define IDirect3DRMFrame3_GetInheritAxes(p)                  (p)->GetInheritAxes()\n#define IDirect3DRMFrame3_GetHierarchyBox(p,a)               (p)->GetHierarchyBox(a)\n#define IDirect3DRMFrame3_SetBox(p,a)                        (p)->SetBox(a)\n#define IDirect3DRMFrame3_SetBoxEnable(p,a)                  (p)->SetBoxEnable(a)\n#define IDirect3DRMFrame3_SetAxes(p,a,b,c,d,e,f)             (p)->SetAxes(a,b,c,d,e,f)\n#define IDirect3DRMFrame3_SetInheritAxes(p,a)                (p)->SetInheritAxes(a)\n#define IDirect3DRMFrame3_SetMaterial(p,a)                   (p)->SetMaterial(a)\n#define IDirect3DRMFrame3_SetQuaternion(p,a,b)               (p)->SetQuaternion(a,b)\n#define IDirect3DRMFrame3_RayPick(p,a,b,c,d)                 (p)->RayPick(a,b,c,d)\n#define IDirect3DRMFrame3_Save(p,a,b,c)                      (p)->Save(a,b,c)\n#define IDirect3DRMFrame3_TransformVectors(p,a,b,c,d)        (p)->TransformVectors(a,b,c,d)\n#define IDirect3DRMFrame3_InverseTransformVectors(p,a,b,c,d) (p)->InverseTransformVectors(a,b,c,d)\n#define IDirect3DRMFrame3_SetTraversalOptions(p,a)           (p)->SetTraversalOptions(a)\n#define IDirect3DRMFrame3_GetTraversalOptions(p,a)           (p)->GetTraversalOptions(a)\n#define IDirect3DRMFrame3_SetSceneFogMethod(p,a)             (p)->SetSceneFogMethod(a)\n#define IDirect3DRMFrame3_GetSceneFogMethod(p,a)             (p)->GetSceneFogMethod(a)\n#define IDirect3DRMFrame3_SetMaterialOverride(p,a)           (p)->SetMaterialOverride(a)\n#define IDirect3DRMFrame3_GetMaterialOverride(p,a)           (p)->GetMaterialOverride(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMMesh interface\n */\n#define INTERFACE IDirect3DRMMesh\nDECLARE_INTERFACE_(IDirect3DRMMesh,IDirect3DRMVisual)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMMesh methods ***/\n    STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;\n    STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE;\n    STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE;\n    STDMETHOD(AddGroup)(THIS_ unsigned vCount, unsigned fCount, unsigned vPerFace, unsigned *fData,\n        D3DRMGROUPINDEX *returnId) PURE;\n    STDMETHOD(SetVertices)(THIS_ D3DRMGROUPINDEX id, unsigned index, unsigned count,\n        D3DRMVERTEX *values) PURE;\n    STDMETHOD(SetGroupColor)(THIS_ D3DRMGROUPINDEX id, D3DCOLOR value) PURE;\n    STDMETHOD(SetGroupColorRGB)(THIS_ D3DRMGROUPINDEX id, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;\n    STDMETHOD(SetGroupMapping)(THIS_ D3DRMGROUPINDEX id, D3DRMMAPPING value) PURE;\n    STDMETHOD(SetGroupQuality)(THIS_ D3DRMGROUPINDEX id, D3DRMRENDERQUALITY value) PURE;\n    STDMETHOD(SetGroupMaterial)(THIS_ D3DRMGROUPINDEX id, struct IDirect3DRMMaterial *material) PURE;\n    STDMETHOD(SetGroupTexture)(THIS_ D3DRMGROUPINDEX id, struct IDirect3DRMTexture *texture) PURE;\n    STDMETHOD_(unsigned, GetGroupCount)(THIS) PURE;\n    STDMETHOD(GetGroup)(THIS_ D3DRMGROUPINDEX id, unsigned *vCount, unsigned *fCount, unsigned *vPerFace,\n        DWORD *fDataSize, unsigned *fData) PURE;\n    STDMETHOD(GetVertices)(THIS_ D3DRMGROUPINDEX id, DWORD index, DWORD count, D3DRMVERTEX *returnPtr) PURE;\n    STDMETHOD_(D3DCOLOR, GetGroupColor)(THIS_ D3DRMGROUPINDEX id) PURE;\n    STDMETHOD_(D3DRMMAPPING, GetGroupMapping)(THIS_ D3DRMGROUPINDEX id) PURE;\n    STDMETHOD_(D3DRMRENDERQUALITY, GetGroupQuality)(THIS_ D3DRMGROUPINDEX id) PURE;\n    STDMETHOD(GetGroupMaterial)(THIS_ D3DRMGROUPINDEX id, struct IDirect3DRMMaterial **material) PURE;\n    STDMETHOD(GetGroupTexture)(THIS_ D3DRMGROUPINDEX id, struct IDirect3DRMTexture **texture) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMMesh_QueryInterface(p,a,b)              (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMMesh_AddRef(p)                          (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMMesh_Release(p)                         (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMMesh_Clone(p,a,b,c)                     (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMMesh_AddDestroyCallback(p,a,b)          (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMMesh_DeleteDestroyCallback(p,a,b)       (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMMesh_SetAppData(p,a)                    (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMMesh_GetAppData(p)                      (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMMesh_SetName(p,a)                       (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMMesh_GetName(p,a,b)                     (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMMesh_GetClassName(p,a,b)                (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMMesh methods ***/\n#define IDirect3DRMMesh_Scale(p,a,b,c)                     (p)->lpVtbl->Scale(p,a,b,c)\n#define IDirect3DRMMesh_Translate(p,a,b,c)                 (p)->lpVtbl->Translate(p,a,b,c)\n#define IDirect3DRMMesh_GetBox(p,a)                        (p)->lpVtbl->GetBox(p,a)\n#define IDirect3DRMMesh_AddGroup(p,a,b,c,d,e)              (p)->lpVtbl->AddGroup(p,a,b,c,d,e)\n#define IDirect3DRMMesh_SetVertices(p,a,b,c,d)             (p)->lpVtbl->SetVertices(p,a,b,c,d)\n#define IDirect3DRMMesh_SetGroupColor(p,a,b)               (p)->lpVtbl->SetGroupColor(p,a,b)\n#define IDirect3DRMMesh_SetGroupColorRGB(p,a,b,c,d)        (p)->lpVtbl->SetGroupColorRGB(p,a,b,c,d)\n#define IDirect3DRMMesh_SetGroupMapping(p,a,b)             (p)->lpVtbl->SetGroupMapping(p,a,b)\n#define IDirect3DRMMesh_SetGroupQuality(p,a,b)             (p)->lpVtbl->SetGroupQuality(p,a,b)\n#define IDirect3DRMMesh_SetGroupMaterial(p,a,b)            (p)->lpVtbl->SetGroupMaterial(p,a,b)\n#define IDirect3DRMMesh_SetGroupTexture(p,a,b)             (p)->lpVtbl->SetGroupTexture(p,a,b)\n#define IDirect3DRMMesh_GetGroupCount(p)                   (p)->lpVtbl->GetGroupCount(p)\n#define IDirect3DRMMesh_GetGroup(p,a,b,c,d,e,f)            (p)->lpVtbl->GetGroup(p,a,b,c,d,e,f)\n#define IDirect3DRMMesh_GetVertices(p,a,b,c,d)             (p)->lpVtbl->GetVertices(p,a,b,c,d)\n#define IDirect3DRMMesh_GetGroupColor(p,a)                 (p)->lpVtbl->GetGroupColor(p,a)\n#define IDirect3DRMMesh_GetGroupMapping(p,a)               (p)->lpVtbl->GetGroupMapping(p,a)\n#define IDirect3DRMMesh_GetGroupQuality(p,a)               (p)->lpVtbl->GetGroupQuality(p,a)\n#define IDirect3DRMMesh_GetGroupMaterial(p,a,b)            (p)->lpVtbl->GetGroupMaterial(p,a,b)\n#define IDirect3DRMMesh_GetGroupTexture(p,a,b)             (p)->lpVtbl->GetGroupTexture(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMMesh_QueryInterface(p,a,b)              (p)->QueryInterface(a,b)\n#define IDirect3DRMMesh_AddRef(p)                          (p)->AddRef()\n#define IDirect3DRMMesh_Release(p)                         (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMMesh_Clone(p,a,b,c)                     (p)->Clone(a,b,c)\n#define IDirect3DRMMesh_AddDestroyCallback(p,a,b)          (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMMesh_DeleteDestroyCallback(p,a,b)       (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMMesh_SetAppData(p,a)                    (p)->SetAppData(a)\n#define IDirect3DRMMesh_GetAppData(p)                      (p)->GetAppData()\n#define IDirect3DRMMesh_SetName(p,a)                       (p)->SetName(a)\n#define IDirect3DRMMesh_GetName(p,a,b)                     (p)->GetName(a,b)\n#define IDirect3DRMMesh_GetClassName(p,a,b)                (p)->GetClassName(a,b)\n/*** IDirect3DRMMesh methods ***/\n#define IDirect3DRMMesh_Scale(p,a,b,c)                     (p)->Scale(a,b,c)\n#define IDirect3DRMMesh_Translate(p,a,b,c)                 (p)->Translate(a,b,c)\n#define IDirect3DRMMesh_GetBox(p,a)                        (p)->GetBox(a)\n#define IDirect3DRMMesh_AddGroup(p,a,b,c,d,e)              (p)->AddGroup(a,b,c,d,e)\n#define IDirect3DRMMesh_SetVertices(p,a,b,c,d)             (p)->SetVertices(a,b,c,d)\n#define IDirect3DRMMesh_SetGroupColor(p,a,b)               (p)->SetGroupColor(a,b)\n#define IDirect3DRMMesh_SetGroupColorRGB(p,a,b,c,d)        (p)->SetGroupColorRGB(a,b,c,d)\n#define IDirect3DRMMesh_SetGroupMapping(p,a,b)             (p)->SetGroupMapping(a,b)\n#define IDirect3DRMMesh_SetGroupQuality(p,a,b)             (p)->SetGroupQuality(a,b)\n#define IDirect3DRMMesh_SetGroupMaterial(p,a,b)            (p)->SetGroupMaterial(a,b)\n#define IDirect3DRMMesh_SetGroupTexture(p,a,b)             (p)->SetGroupTexture(a,b)\n#define IDirect3DRMMesh_GetGroupCount(p)                   (p)->GetGroupCount()\n#define IDirect3DRMMesh_GetGroup(p,a,b,c,d,e,f)            (p)->GetGroup(a,b,c,d,e,f)\n#define IDirect3DRMMesh_GetVertices(p,a,b,c,d)             (p)->GetVertices(a,b,c,d)\n#define IDirect3DRMMesh_GetGroupColor(p,a)                 (p)->GetGroupColor(a)\n#define IDirect3DRMMesh_GetGroupMapping(p,a)               (p)->GetGroupMapping(a)\n#define IDirect3DRMMesh_GetGroupQuality(p,a)               (p)->GetGroupQuality(a)\n#define IDirect3DRMMesh_GetGroupMaterial(p,a,b)            (p)->GetGroupMaterial(a,b)\n#define IDirect3DRMMesh_GetGroupTexture(p,a,b)             (p)->GetGroupTexture(a,b)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMProgressiveMesh interface\n */\n#define INTERFACE IDirect3DRMProgressiveMesh\nDECLARE_INTERFACE_(IDirect3DRMProgressiveMesh,IDirect3DRMVisual)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMProgressiveMesh methods ***/\n    STDMETHOD(Load) (THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags,\n            D3DRMLOADTEXTURECALLBACK cb, void *ctx) PURE;\n    STDMETHOD(GetLoadStatus) (THIS_ D3DRMPMESHLOADSTATUS *status) PURE;\n    STDMETHOD(SetMinRenderDetail) (THIS_ D3DVALUE d3dVal) PURE;\n    STDMETHOD(Abort) (THIS_ DWORD flags) PURE;\n    STDMETHOD(GetFaceDetail) (THIS_ DWORD *count) PURE;\n    STDMETHOD(GetVertexDetail) (THIS_ DWORD *count) PURE;\n    STDMETHOD(SetFaceDetail) (THIS_ DWORD count) PURE;\n    STDMETHOD(SetVertexDetail) (THIS_ DWORD count) PURE;\n    STDMETHOD(GetFaceDetailRange) (THIS_ DWORD *min_detail, DWORD *max_detail) PURE;\n    STDMETHOD(GetVertexDetailRange) (THIS_ DWORD *min_detail, DWORD *max_detail) PURE;\n    STDMETHOD(GetDetail) (THIS_ D3DVALUE *pdvVal) PURE;\n    STDMETHOD(SetDetail) (THIS_ D3DVALUE d3dVal) PURE;\n    STDMETHOD(RegisterEvents) (THIS_ HANDLE event, DWORD flags, DWORD reserved) PURE;\n    STDMETHOD(CreateMesh) (THIS_ IDirect3DRMMesh **mesh) PURE;\n    STDMETHOD(Duplicate) (THIS_ IDirect3DRMProgressiveMesh **mesh) PURE;\n    STDMETHOD(GetBox) (THIS_ D3DRMBOX *box) PURE;\n    STDMETHOD(SetQuality) (THIS_ D3DRMRENDERQUALITY quality) PURE;\n    STDMETHOD(GetQuality) (THIS_ D3DRMRENDERQUALITY *quality) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMProgressiveMesh_QueryInterface(p,a,b)          (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMProgressiveMesh_AddRef(p)                      (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMProgressiveMesh_Release(p)                     (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMProgressiveMesh_Clone(p,a,b,c)                 (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMProgressiveMesh_AddDestroyCallback(p,a,b)      (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMProgressiveMesh_DeleteDestroyCallback(p,a,b)   (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMProgressiveMesh_SetAppData(p,a)                (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMProgressiveMesh_GetAppData(p)                  (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMProgressiveMesh_SetName(p,a)                   (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMProgressiveMesh_GetName(p,a,b)                 (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMProgressiveMesh_GetClassName(p,a,b)            (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMProgressiveMesh methods ***/\n#define IDirect3DRMProgressiveMesh_Load(p,a,b,c,d,e)              (p)->lpVtbl->Load(p,a,b,c,d,e)\n#define IDirect3DRMProgressiveMesh_GetLoadStatus(p,a)             (p)->lpVtbl->GetLoadStatus(p,a)\n#define IDirect3DRMProgressiveMesh_SetMinRenderDetail(p,a)        (p)->lpVtbl->SetMinRenderDetail(p,a)\n#define IDirect3DRMProgressiveMesh_Abort(p,a)                     (p)->lpVtbl->Abort(p,a)\n#define IDirect3DRMProgressiveMesh_GetFaceDetail(p,a)             (p)->lpVtbl->GetFaceDetail(p,a)\n#define IDirect3DRMProgressiveMesh_GetVertexDetail(p,a)           (p)->lpVtbl->GetVertexDetail(p,a)\n#define IDirect3DRMProgressiveMesh_SetFaceDetail(p,a)             (p)->lpVtbl->SetFaceDetail(p,a)\n#define IDirect3DRMProgressiveMesh_SetVertexDetail(p,a)           (p)->lpVtbl->SetVertexDetail(p,a)\n#define IDirect3DRMProgressiveMesh_GetFaceDetailRange(p,a,b)      (p)->lpVtbl->GetFaceDetailRange(p,a,b)\n#define IDirect3DRMProgressiveMesh_GetVertexDetailRange(p,a,b)    (p)->lpVtbl->GetVertexDetailRange(p,a,b)\n#define IDirect3DRMProgressiveMesh_GetDetail(p,a)                 (p)->lpVtbl->GetDetail(p,a)\n#define IDirect3DRMProgressiveMesh_SetDetail(p,a)                 (p)->lpVtbl->SetDetail(p,a)\n#define IDirect3DRMProgressiveMesh_RegisterEvents(p,a,b,c)        (p)->lpVtbl->RegisterEvents(p,a,b,c)\n#define IDirect3DRMProgressiveMesh_CreateMesh(p,a)                (p)->lpVtbl->CreateMesh(p,a)\n#define IDirect3DRMProgressiveMesh_Duplicate(p,a)                 (p)->lpVtbl->Duplicate(p,a)\n#define IDirect3DRMProgressiveMesh_GetBox(p,a)                    (p)->lpVtbl->GetBox(p,a)\n#define IDirect3DRMProgressiveMesh_SetQuality(p,a)                (p)->lpVtbl->SetQuality(p,a)\n#define IDirect3DRMProgressiveMesh_GetQuality(p,a)                (p)->lpVtbl->GetQuality(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMProgressiveMesh_QueryInterface(p,a,b)          (p)->QueryInterface(a,b)\n#define IDirect3DRMProgressiveMesh_AddRef(p)                      (p)->AddRef()\n#define IDirect3DRMProgressiveMesh_Release(p)                     (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMProgressiveMesh_Clone(p,a,b,c)                 (p)->Clone(a,b,c)\n#define IDirect3DRMProgressiveMesh_AddDestroyCallback(p,a,b)      (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMProgressiveMesh_DeleteDestroyCallback(p,a,b)   (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMProgressiveMesh_SetAppData(p,a)                (p)->SetAppData(a)\n#define IDirect3DRMProgressiveMesh_GetAppData(p)                  (p)->GetAppData()\n#define IDirect3DRMProgressiveMesh_SetName(p,a)                   (p)->SetName(a)\n#define IDirect3DRMProgressiveMesh_GetName(p,a,b)                 (p)->GetName(a,b)\n#define IDirect3DRMProgressiveMesh_GetClassName(p,a,b)            (p)->GetClassName(a,b)\n/*** IDirect3DRMProgressiveMesh methods ***/\n#define IDirect3DRMProgressiveMesh_Load(p,a,b,c,d,e)              (p)->Load(a,b,c,d,e)\n#define IDirect3DRMProgressiveMesh_GetLoadStatus(p,a)             (p)->GetLoadStatus(a)\n#define IDirect3DRMProgressiveMesh_SetMinRenderDetail(p,a)        (p)->SetMinRenderDetail(a)\n#define IDirect3DRMProgressiveMesh_Abort(p,a)                     (p)->Abort(a)\n#define IDirect3DRMProgressiveMesh_GetFaceDetail(p,a)             (p)->GetFaceDetail(a)\n#define IDirect3DRMProgressiveMesh_GetVertexDetail(p,a)           (p)->GetVertexDetail(a)\n#define IDirect3DRMProgressiveMesh_SetFaceDetail(p,a)             (p)->SetFaceDetail(a)\n#define IDirect3DRMProgressiveMesh_SetVertexDetail(p,a)           (p)->SetVertexDetail(a)\n#define IDirect3DRMProgressiveMesh_GetFaceDetailRange(p,a,b)      (p)->GetFaceDetailRange(a,b)\n#define IDirect3DRMProgressiveMesh_GetVertexDetailRange(p,a,b)    (p)->GetVertexDetailRange(a,b)\n#define IDirect3DRMProgressiveMesh_GetDetail(p,a)                 (p)->GetDetail(a)\n#define IDirect3DRMProgressiveMesh_SetDetail(p,a)                 (p)->SetDetail(a)\n#define IDirect3DRMProgressiveMesh_RegisterEvents(p,a,b,c)        (p)->RegisterEvents(a,b,c)\n#define IDirect3DRMProgressiveMesh_CreateMesh(p,a)                (p)->CreateMesh(a)\n#define IDirect3DRMProgressiveMesh_Duplicate(p,a)                 (p)->Duplicate(a)\n#define IDirect3DRMProgressiveMesh_GetBox(p,a)                    (p)->GetBox(a)\n#define IDirect3DRMProgressiveMesh_SetQuality(p,a)                (p)->SetQuality(a)\n#define IDirect3DRMProgressiveMesh_GetQuality(p,a)                (p)->GetQuality(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMShadow interface\n */\n#define INTERFACE IDirect3DRMShadow\nDECLARE_INTERFACE_(IDirect3DRMShadow,IDirect3DRMVisual)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMShadow methods ***/\n    STDMETHOD(Init)(THIS_ IDirect3DRMVisual *visual, struct IDirect3DRMLight *light,\n            D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMShadow_QueryInterface(p,a,b)          (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMShadow_AddRef(p)                      (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMShadow_Release(p)                     (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMShadow_Clone(p,a,b,c)                 (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMShadow_AddDestroyCallback(p,a,b)      (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMShadow_DeleteDestroyCallback(p,a,b)   (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMShadow_SetAppData(p,a)                (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMShadow_GetAppData(p)                  (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMShadow_SetName(p,a)                   (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMShadow_GetName(p,a,b)                 (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMShadow_GetClassName(p,a,b)            (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMShadow methods ***/\n#define IDirect3DRMShadow_Init(p,a,b,c,d,e,f,g)          (p)->lpVtbl->Load(p,a,b,c,d,e,f,g)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMShadow_QueryInterface(p,a,b)          (p)->QueryInterface(a,b)\n#define IDirect3DRMShadow_AddRef(p)                      (p)->AddRef()\n#define IDirect3DRMShadow_Release(p)                     (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMShadow_Clone(p,a,b,c)                 (p)->Clone(a,b,c)\n#define IDirect3DRMShadow_AddDestroyCallback(p,a,b)      (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMShadow_DeleteDestroyCallback(p,a,b)   (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMShadow_SetAppData(p,a)                (p)->SetAppData(a)\n#define IDirect3DRMShadow_GetAppData(p)                  (p)->GetAppData()\n#define IDirect3DRMShadow_SetName(p,a)                   (p)->SetName(a)\n#define IDirect3DRMShadow_GetName(p,a,b)                 (p)->GetName(a,b)\n#define IDirect3DRMShadow_GetClassName(p,a,b)            (p)->GetClassName(a,b)\n/*** IDirect3DRMShadow methods ***/\n#define IDirect3DRMShadow_Init(p,a,b,c,d,e,f,g)          (p)->Load(a,b,c,d,e,f,g)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMShadow2 interface\n */\n#define INTERFACE IDirect3DRMShadow2\nDECLARE_INTERFACE_(IDirect3DRMShadow2,IDirect3DRMVisual)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMShadow methods ***/\n    STDMETHOD(Init)(THIS_ IUnknown *object, struct IDirect3DRMLight *light,\n            D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz) PURE;\n    /*** IDirect3DRMShadow2 methods ***/\n    STDMETHOD(GetVisual)(THIS_ IDirect3DRMVisual **visual) PURE;\n    STDMETHOD(SetVisual)(THIS_ IUnknown *visual, DWORD flags) PURE;\n    STDMETHOD(GetLight)(THIS_ struct IDirect3DRMLight **light) PURE;\n    STDMETHOD(SetLight)(THIS_ struct IDirect3DRMLight *light, DWORD flags) PURE;\n    STDMETHOD(GetPlane)(THIS_ D3DVALUE *px, D3DVALUE *py, D3DVALUE *pz,\n            D3DVALUE *nx, D3DVALUE *ny, D3DVALUE *nz) PURE;\n    STDMETHOD(SetPlane)(THIS_ D3DVALUE px, D3DVALUE py, D3DVALUE pz,\n        D3DVALUE nx, D3DVALUE ny, D3DVALUE nz, DWORD) PURE;\n    STDMETHOD(GetOptions)(THIS_ DWORD *flags) PURE;\n    STDMETHOD(SetOptions)(THIS_ DWORD) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMShadow2_QueryInterface(p,a,b)          (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMShadow2_AddRef(p)                      (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMShadow2_Release(p)                     (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMShadow2_Clone(p,a,b,c)                 (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMShadow2_AddDestroyCallback(p,a,b)      (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMShadow2_DeleteDestroyCallback(p,a,b)   (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMShadow2_SetAppData(p,a)                (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMShadow2_GetAppData(p)                  (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMShadow2_SetName(p,a)                   (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMShadow2_GetName(p,a,b)                 (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMShadow2_GetClassName(p,a,b)            (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMShadow methods ***/\n#define IDirect3DRMShadow2_Init(p,a,b,c,d,e,f,g)          (p)->lpVtbl->Init(p,a,b,c,d,e,f,g)\n/*** IDirect3DRMShadow2 methods ***/\n#define IDirect3DRMShadow2_GetVisual(p,a)                 (p)->lpVtbl->GetVisual(p,a)\n#define IDirect3DRMShadow2_SetVisual(p,a,b)               (p)->lpVtbl->SetVisual(p,a,b)\n#define IDirect3DRMShadow2_GetLight(p,a)                  (p)->lpVtbl->GetLight(p,a)\n#define IDirect3DRMShadow2_SetLight(p,a,b)                (p)->lpVtbl->SetLight(p,a,b)\n#define IDirect3DRMShadow2_GetPlane(p,a,b,c,d,e,f)        (p)->lpVtbl->GetPlane(p,a,b,c,d,e,f)\n#define IDirect3DRMShadow2_SetPlane(p,a,b,c,d,e,f)        (p)->lpVtbl->SetPlane(p,a,b,c,d,e,f)\n#define IDirect3DRMShadow2_GetOptions(p,a)                (p)->lpVtbl->GetOptions(p,a)\n#define IDirect3DRMShadow2_SetOptions(p,a)                (p)->lpVtbl->SetOptions(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMShadow2_QueryInterface(p,a,b)          (p)->QueryInterface(a,b)\n#define IDirect3DRMShadow2_AddRef(p)                      (p)->AddRef()\n#define IDirect3DRMShadow2_Release(p)                     (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMShadow2_Clone(p,a,b,c)                 (p)->Clone(a,b,c)\n#define IDirect3DRMShadow2_AddDestroyCallback(p,a,b)      (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMShadow2_DeleteDestroyCallback(p,a,b)   (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMShadow2_SetAppData(p,a)                (p)->SetAppData(a)\n#define IDirect3DRMShadow2_GetAppData(p)                  (p)->GetAppData()\n#define IDirect3DRMShadow2_SetName(p,a)                   (p)->SetName(a)\n#define IDirect3DRMShadow2_GetName(p,a,b)                 (p)->GetName(a,b)\n#define IDirect3DRMShadow2_GetClassName(p,a,b)            (p)->GetClassName(a,b)\n/*** IDirect3DRMShadow methods ***/\n#define IDirect3DRMShadow2_Init(p,a,b,c,d,e,f,g)          (p)->Init(a,b,c,d,e,f,g)\n/*** IDirect3DRMShadow2 methods ***/\n#define IDirect3DRMShadow2_GetVisual(p,a)                 (p)->GetVisual(a)\n#define IDirect3DRMShadow2_SetVisual(p,a,b)               (p)->SetVisual(a,b)\n#define IDirect3DRMShadow2_GetLight(p,a)                  (p)->GetLight(a)\n#define IDirect3DRMShadow2_SetLight(p,a,b)                (p)->SetLight(a,b)\n#define IDirect3DRMShadow2_GetPlane(p,a,b,c,d,e,f)        (p)->GetPlane(a,b,c,d,e,f)\n#define IDirect3DRMShadow2_SetPlane(p,a,b,c,d,e,f)        (p)->SetPlane(a,b,c,d,e,f)\n#define IDirect3DRMShadow2_GetOptions(p,a)                (p)->GetOptions(a)\n#define IDirect3DRMShadow2_SetOptions(p,a)                (p)->SetOptions(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMFace interface\n */\n#define INTERFACE IDirect3DRMFace\nDECLARE_INTERFACE_(IDirect3DRMFace,IDirect3DRMObject)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMFace methods ***/\n    STDMETHOD(AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;\n    STDMETHOD(AddVertexAndNormalIndexed)(THIS_ DWORD vertex, DWORD normal) PURE;\n    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE, D3DVALUE, D3DVALUE) PURE;\n    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;\n    STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture *texture) PURE;\n    STDMETHOD(SetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE u, D3DVALUE v) PURE;\n    STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial *material) PURE;\n    STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;\n    STDMETHOD(GetVertex)(THIS_ DWORD index, D3DVECTOR *vertex, D3DVECTOR *normal) PURE;\n    STDMETHOD(GetVertices)(THIS_ DWORD *vertex_count, D3DVECTOR *coords, D3DVECTOR *normals);\n    STDMETHOD(GetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE *u, D3DVALUE *v) PURE;\n    STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE;\n    STDMETHOD(GetNormal)(THIS_ D3DVECTOR *) PURE;\n    STDMETHOD(GetTexture)(THIS_ struct IDirect3DRMTexture **texture) PURE;\n    STDMETHOD(GetMaterial)(THIS_ struct IDirect3DRMMaterial **material) PURE;\n    STDMETHOD_(int, GetVertexCount)(THIS) PURE;\n    STDMETHOD_(int, GetVertexIndex)(THIS_ DWORD which) PURE;\n    STDMETHOD_(int, GetTextureCoordinateIndex)(THIS_ DWORD which) PURE;\n    STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMFace_QueryInterface(p,a,b)             (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMFace_AddRef(p)                         (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMFace_Release(p)                        (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMFace_Clone(p,a,b,c)                    (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMFace_AddDestroyCallback(p,a,b)         (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMFace_DeleteDestroyCallback(p,a,b)      (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMFace_SetAppData(p,a)                   (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMFace_GetAppData(p)                     (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMFace_SetName(p,a)                      (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMFace_GetName(p,a,b)                    (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMFace_GetClassName(p,a,b)               (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMFace methods ***/\n#define IDirect3DRMFace_AddVertex(p,a,b,c)                (p)->lpVtbl->AddVertex(p,a,b,c)\n#define IDirect3DRMFace_AddVertexAndNormalIndexed(p,a,b)  (p)->lpVtbl->AddVertexAndNormalIndexed(p,a,b)\n#define IDirect3DRMFace_SetColorRGB(p,a,b,c)              (p)->lpVtbl->SetColorRGB(p,a,b,c)\n#define IDirect3DRMFace_SetColor(p,a)                     (p)->lpVtbl->SetColor(p,a)\n#define IDirect3DRMFace_SetTexture(p,a)                   (p)->lpVtbl->SetTexture(p,a)\n#define IDirect3DRMFace_SetTextureCoordinates(p,a,b,c)    (p)->lpVtbl->SetTextureCoordinates(p,a,b,c)\n#define IDirect3DRMFace_SetMaterial(p,a)                  (p)->lpVtbl->SetMaterial(p,a)\n#define IDirect3DRMFace_SetTextureTopology(p,a,b)         (p)->lpVtbl->SetTextureTopology(p,a,b)\n#define IDirect3DRMFace_GetVertex(p,a,b,c)                (p)->lpVtbl->GetVertex(p,a,b,c)\n#define IDirect3DRMFace_GetVertices(p,a,b,c)              (p)->lpVtbl->GetVertices(p,a,b,c)\n#define IDirect3DRMFace_GetTextureCoordinates(p,a,b,c)    (p)->lpVtbl->GetTextureCoordinates(p,a,b,c)\n#define IDirect3DRMFace_GetTextureTopology(p,a,b)         (p)->lpVtbl->GetTextureTopology(p,a,b)\n#define IDirect3DRMFace_GetNormal(p,a)                    (p)->lpVtbl->GetNormal(p,a)\n#define IDirect3DRMFace_GetTexture(p,a)                   (p)->lpVtbl->GetTexture(p,a)\n#define IDirect3DRMFace_GetVertexCount(p)                 (p)->lpVtbl->GetVertexCount(p)\n#define IDirect3DRMFace_GetVertexIndex(p,a)               (p)->lpVtbl->GetVertexIndex(p,a)\n#define IDirect3DRMFace_GetTextureCoordinateIndex(p,a)    (p)->lpVtbl->GetTextureCoordinateIndex(p,a)\n#define IDirect3DRMFace_GetColor(p)                       (p)->lpVtbl->GetColor(p)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMFace_QueryInterface(p,a,b)             (p)->QueryInterface(a,b)\n#define IDirect3DRMFace_AddRef(p)                         (p)->AddRef()\n#define IDirect3DRMFace_Release(p)                        (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMFace_Clone(p,a,b,c)                    (p)->Clone(a,b,c)\n#define IDirect3DRMFace_AddDestroyCallback(p,a,b)         (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMFace_DeleteDestroyCallback(p,a,b)      (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMFace_SetAppData(p,a)                   (p)->SetAppData(a)\n#define IDirect3DRMFace_GetAppData(p)                     (p)->GetAppData()\n#define IDirect3DRMFace_SetName(p,a)                      (p)->SetName(a)\n#define IDirect3DRMFace_GetName(p,a,b)                    (p)->GetName(a,b)\n#define IDirect3DRMFace_GetClassName(p,a,b)               (p)->GetClassName(a,b)\n/*** IDirect3DRMFace methods ***/\n#define IDirect3DRMFace_AddVertex(p,a,b,c)                (p)->AddVertex(a,b,c)\n#define IDirect3DRMFace_AddVertexAndNormalIndexed(p,a,b)  (p)->AddVertexAndNormalIndexed(a,b)\n#define IDirect3DRMFace_SetColorRGB(p,a,b,c)              (p)->SetColorRGB(a,b,c)\n#define IDirect3DRMFace_SetColor(p,a)                     (p)->SetColor(a)\n#define IDirect3DRMFace_SetTexture(p,a)                   (p)->SetTexture(a)\n#define IDirect3DRMFace_SetTextureCoordinates(p,a,b,c)    (p)->SetTextureCoordinates(a,b,c)\n#define IDirect3DRMFace_SetMaterial(p,a)                  (p)->SetMaterial(a)\n#define IDirect3DRMFace_SetTextureTopology(p,a,b)         (p)->SetTextureTopology(a,b)\n#define IDirect3DRMFace_GetVertex(p,a,b,c)                (p)->GetVertex(a,b,c)\n#define IDirect3DRMFace_GetVertices(p,a,b,c)              (p)->GetVertices(a,b,c)\n#define IDirect3DRMFace_GetTextureCoordinates(p,a,b,c)    (p)->GetTextureCoordinates(a,b,c)\n#define IDirect3DRMFace_GetTextureTopology(p,a,b)         (p)->GetTextureTopology(a,b)\n#define IDirect3DRMFace_GetNormal(p,a)                    (p)->GetNormal(a)\n#define IDirect3DRMFace_GetTexture(p,a)                   (p)->GetTexture(a)\n#define IDirect3DRMFace_GetVertexCount(p)                 (p)->GetVertexCount()\n#define IDirect3DRMFace_GetVertexIndex(p,a)               (p)->GetVertexIndex(a)\n#define IDirect3DRMFace_GetTextureCoordinateIndex(p,a)    (p)->GetTextureCoordinateIndex(a)\n#define IDirect3DRMFace_GetColor(p)                       (p)->GetColor()\n#endif\n\n/*****************************************************************************\n * IDirect3DRMFace2 interface\n */\n#define INTERFACE IDirect3DRMFace2\nDECLARE_INTERFACE_(IDirect3DRMFace2,IDirect3DRMObject)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMFace methods ***/\n    STDMETHOD(AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;\n    STDMETHOD(AddVertexAndNormalIndexed)(THIS_ DWORD vertex, DWORD normal) PURE;\n    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE, D3DVALUE, D3DVALUE) PURE;\n    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;\n    STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture3 *texture) PURE;\n    STDMETHOD(SetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE u, D3DVALUE v) PURE;\n    STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial2 *material) PURE;\n    STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;\n    STDMETHOD(GetVertex)(THIS_ DWORD index, D3DVECTOR *vertex, D3DVECTOR *normal) PURE;\n    STDMETHOD(GetVertices)(THIS_ DWORD *vertex_count, D3DVECTOR *coords, D3DVECTOR *normals);\n    STDMETHOD(GetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE *u, D3DVALUE *v) PURE;\n    STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE;\n    STDMETHOD(GetNormal)(THIS_ D3DVECTOR *) PURE;\n    STDMETHOD(GetTexture)(THIS_ struct IDirect3DRMTexture3 **texture) PURE;\n    STDMETHOD(GetMaterial)(THIS_ struct IDirect3DRMMaterial2 **material) PURE;\n    STDMETHOD_(int, GetVertexCount)(THIS) PURE;\n    STDMETHOD_(int, GetVertexIndex)(THIS_ DWORD which) PURE;\n    STDMETHOD_(int, GetTextureCoordinateIndex)(THIS_ DWORD which) PURE;\n    STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMFace2_QueryInterface(p,a,b)             (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMFace2_AddRef(p)                         (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMFace2_Release(p)                        (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMFace2_Clone(p,a,b,c)                    (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMFace2_AddDestroyCallback(p,a,b)         (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMFace2_DeleteDestroyCallback(p,a,b)      (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMFace2_SetAppData(p,a)                   (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMFace2_GetAppData(p)                     (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMFace2_SetName(p,a)                      (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMFace2_GetName(p,a,b)                    (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMFace2_GetClassName(p,a,b)               (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMFace methods ***/\n#define IDirect3DRMFace2_AddVertex(p,a,b,c)                (p)->lpVtbl->AddVertex(p,a,b,c)\n#define IDirect3DRMFace2_AddVertexAndNormalIndexed(p,a,b)  (p)->lpVtbl->AddVertexAndNormalIndexed(p,a,b)\n#define IDirect3DRMFace2_SetColorRGB(p,a,b,c)              (p)->lpVtbl->SetColorRGB(p,a,b,c)\n#define IDirect3DRMFace2_SetColor(p,a)                     (p)->lpVtbl->SetColor(p,a)\n#define IDirect3DRMFace2_SetTexture(p,a)                   (p)->lpVtbl->SetTexture(p,a)\n#define IDirect3DRMFace2_SetTextureCoordinates(p,a,b,c)    (p)->lpVtbl->SetTextureCoordinates(p,a,b,c)\n#define IDirect3DRMFace2_SetMaterial(p,a)                  (p)->lpVtbl->SetMaterial(p,a)\n#define IDirect3DRMFace2_SetTextureTopology(p,a,b)         (p)->lpVtbl->SetTextureTopology(p,a,b)\n#define IDirect3DRMFace2_GetVertex(p,a,b,c)                (p)->lpVtbl->GetVertex(p,a,b,c)\n#define IDirect3DRMFace2_GetVertices(p,a,b,c)              (p)->lpVtbl->GetVertices(p,a,b,c)\n#define IDirect3DRMFace2_GetTextureCoordinates(p,a,b,c)    (p)->lpVtbl->GetTextureCoordinates(p,a,b,c)\n#define IDirect3DRMFace2_GetTextureTopology(p,a,b)         (p)->lpVtbl->GetTextureTopology(p,a,b)\n#define IDirect3DRMFace2_GetNormal(p,a)                    (p)->lpVtbl->GetNormal(p,a)\n#define IDirect3DRMFace2_GetTexture(p,a)                   (p)->lpVtbl->GetTexture(p,a)\n#define IDirect3DRMFace2_GetVertexCount(p)                 (p)->lpVtbl->GetVertexCount(p)\n#define IDirect3DRMFace2_GetVertexIndex(p,a)               (p)->lpVtbl->GetVertexIndex(p,a)\n#define IDirect3DRMFace2_GetTextureCoordinateIndex(p,a)    (p)->lpVtbl->GetTextureCoordinateIndex(p,a)\n#define IDirect3DRMFace2_GetColor(p)                       (p)->lpVtbl->GetColor(p)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMFace2_QueryInterface(p,a,b)             (p)->QueryInterface(a,b)\n#define IDirect3DRMFace2_AddRef(p)                         (p)->AddRef()\n#define IDirect3DRMFace2_Release(p)                        (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMFace2_Clone(p,a,b,c)                    (p)->Clone(a,b,c)\n#define IDirect3DRMFace2_AddDestroyCallback(p,a,b)         (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMFace2_DeleteDestroyCallback(p,a,b)      (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMFace2_SetAppData(p,a)                   (p)->SetAppData(a)\n#define IDirect3DRMFace2_GetAppData(p)                     (p)->GetAppData()\n#define IDirect3DRMFace2_SetName(p,a)                      (p)->SetName(a)\n#define IDirect3DRMFace2_GetName(p,a,b)                    (p)->GetName(a,b)\n#define IDirect3DRMFace2_GetClassName(p,a,b)               (p)->GetClassName(a,b)\n/*** IDirect3DRMFace methods ***/\n#define IDirect3DRMFace2_AddVertex(p,a,b,c)                (p)->AddVertex(a,b,c)\n#define IDirect3DRMFace2_AddVertexAndNormalIndexed(p,a,b)  (p)->AddVertexAndNormalIndexed(a,b)\n#define IDirect3DRMFace2_SetColorRGB(p,a,b,c)              (p)->SetColorRGB(a,b,c)\n#define IDirect3DRMFace2_SetColor(p,a)                     (p)->SetColor(a)\n#define IDirect3DRMFace2_SetTexture(p,a)                   (p)->SetTexture(a)\n#define IDirect3DRMFace2_SetTextureCoordinates(p,a,b,c)    (p)->SetTextureCoordinates(a,b,c)\n#define IDirect3DRMFace2_SetMaterial(p,a)                  (p)->SetMaterial(a)\n#define IDirect3DRMFace2_SetTextureTopology(p,a,b)         (p)->SetTextureTopology(a,b)\n#define IDirect3DRMFace2_GetVertex(p,a,b,c)                (p)->GetVertex(a,b,c)\n#define IDirect3DRMFace2_GetVertices(p,a,b,c)              (p)->GetVertices(a,b,c)\n#define IDirect3DRMFace2_GetTextureCoordinates(p,a,b,c)    (p)->GetTextureCoordinates(a,b,c)\n#define IDirect3DRMFace2_GetTextureTopology(p,a,b)         (p)->GetTextureTopology(a,b)\n#define IDirect3DRMFace2_GetNormal(p,a)                    (p)->GetNormal(a)\n#define IDirect3DRMFace2_GetTexture(p,a)                   (p)->GetTexture(a)\n#define IDirect3DRMFace2_GetVertexCount(p)                 (p)->GetVertexCount()\n#define IDirect3DRMFace2_GetVertexIndex(p,a)               (p)->GetVertexIndex(a)\n#define IDirect3DRMFace2_GetTextureCoordinateIndex(p,a)    (p)->GetTextureCoordinateIndex(a)\n#define IDirect3DRMFace2_GetColor(p)                       (p)->GetColor()\n#endif\n\n/*****************************************************************************\n * IDirect3DRMMeshBuilder interface\n */\n#define INTERFACE IDirect3DRMMeshBuilder\nDECLARE_INTERFACE_(IDirect3DRMMeshBuilder,IDirect3DRMVisual)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMMeshBuilder methods ***/\n    STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags,\n            D3DRMLOADTEXTURECALLBACK cb, void *ctx) PURE;\n    STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT, D3DRMSAVEOPTIONS save) PURE;\n    STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;\n    STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE;\n    STDMETHOD(SetColorSource)(THIS_ D3DRMCOLORSOURCE) PURE;\n    STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE;\n    STDMETHOD(GenerateNormals)(THIS) PURE;\n    STDMETHOD_(D3DRMCOLORSOURCE, GetColorSource)(THIS) PURE;\n    STDMETHOD(AddMesh)(THIS_ IDirect3DRMMesh *mesh) PURE;\n    STDMETHOD(AddMeshBuilder)(THIS_ IDirect3DRMMeshBuilder *mesh_builder) PURE;\n    STDMETHOD(AddFrame)(THIS_ IDirect3DRMFrame *frame) PURE;\n    STDMETHOD(AddFace)(THIS_ IDirect3DRMFace *face) PURE;\n    STDMETHOD(AddFaces)(THIS_ DWORD vertex_count, D3DVECTOR *vertices, DWORD normal_count,\n            D3DVECTOR *normals, DWORD *face_data, struct IDirect3DRMFaceArray **array) PURE;\n    STDMETHOD(ReserveSpace)(THIS_ DWORD vertex_Count, DWORD normal_count, DWORD face_count) PURE;\n    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;\n    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;\n    STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture *texture) PURE;\n    STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial *material) PURE;\n    STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;\n    STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;\n    STDMETHOD(SetPerspective)(THIS_ BOOL) PURE;\n    STDMETHOD(SetVertex)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;\n    STDMETHOD(SetNormal)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;\n    STDMETHOD(SetTextureCoordinates)(THIS_ DWORD index, D3DVALUE u, D3DVALUE v) PURE;\n    STDMETHOD(SetVertexColor)(THIS_ DWORD index, D3DCOLOR) PURE;\n    STDMETHOD(SetVertexColorRGB)(THIS_ DWORD index, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;\n    STDMETHOD(GetFaces)(THIS_ struct IDirect3DRMFaceArray **array) PURE;\n    STDMETHOD(GetVertices)(THIS_ DWORD *vcount, D3DVECTOR *vertices, DWORD *ncount, D3DVECTOR *normals,\n        DWORD *face_data_size, DWORD *face_data) PURE;\n    STDMETHOD(GetTextureCoordinates)(THIS_ DWORD index, D3DVALUE *u, D3DVALUE *v) PURE;\n    STDMETHOD_(int, AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;\n    STDMETHOD_(int, AddNormal)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;\n    STDMETHOD(CreateFace)(THIS_ IDirect3DRMFace **face) PURE;\n    STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;\n    STDMETHOD_(BOOL, GetPerspective)(THIS) PURE;\n    STDMETHOD_(int, GetFaceCount)(THIS) PURE;\n    STDMETHOD_(int, GetVertexCount)(THIS) PURE;\n    STDMETHOD_(D3DCOLOR, GetVertexColor)(THIS_ DWORD index) PURE;\n    STDMETHOD(CreateMesh)(THIS_ IDirect3DRMMesh **mesh) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMMeshBuilder_QueryInterface(p,a,b)             (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMMeshBuilder_AddRef(p)                         (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMMeshBuilder_Release(p)                        (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMMeshBuilder_Clone(p,a,b,c)                    (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMMeshBuilder_AddDestroyCallback(p,a,b)         (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMMeshBuilder_DeleteDestroyCallback(p,a,b)      (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMMeshBuilder_SetAppData(p,a)                   (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMMeshBuilder_GetAppData(p)                     (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMMeshBuilder_SetName(p,a)                      (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMMeshBuilder_GetName(p,a,b)                    (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMMeshBuilder_GetClassName(p,a,b)               (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMMeshBuilder methods ***/\n#define IDirect3DRMMeshBuilder_Load(p,a,b,c,d,e)                 (p)->lpVtbl->Load(p,a,b,c,d,e)\n#define IDirect3DRMMeshBuilder_Save(p,a,b,c)                     (p)->lpVtbl->Save(p,a,b,c)\n#define IDirect3DRMMeshBuilder_Scale(p,a,b,c)                    (p)->lpVtbl->Scale(p,a,b,c)\n#define IDirect3DRMMeshBuilder_Translate(p,a,b,c)                (p)->lpVtbl->Translate(p,a)\n#define IDirect3DRMMeshBuilder_SetColorSource(p,a)               (p)->lpVtbl->SetColorSource(p,a,b,c)\n#define IDirect3DRMMeshBuilder_GetBox(p,a)                       (p)->lpVtbl->GetBox(p,a)\n#define IDirect3DRMMeshBuilder_GenerateNormals(p)                (p)->lpVtbl->GenerateNormals(p)\n#define IDirect3DRMMeshBuilder_GetColorSource(p)                 (p)->lpVtbl->GetColorSource(p)\n#define IDirect3DRMMeshBuilder_AddMesh(p,a)                      (p)->lpVtbl->AddMesh(p,a)\n#define IDirect3DRMMeshBuilder_AddMeshBuilder(p,a)               (p)->lpVtbl->AddMeshBuilder(p,a)\n#define IDirect3DRMMeshBuilder_AddFrame(p,a)                     (p)->lpVtbl->AddFrame(p,a)\n#define IDirect3DRMMeshBuilder_AddFace(p,a)                      (p)->lpVtbl->AddFace(p,a)\n#define IDirect3DRMMeshBuilder_AddFaces(p,a,b,c,d,e,f)           (p)->lpVtbl->AddFaces(p,a,b,c,d,e,f)\n#define IDirect3DRMMeshBuilder_ReserveSpace(p,a,b,c)             (p)->lpVtbl->ReserveSpace(p,a,b,c)\n#define IDirect3DRMMeshBuilder_SetColorRGB(p,a,b,c)              (p)->lpVtbl->SetColorRGB(p,a,b,c)\n#define IDirect3DRMMeshBuilder_SetColor(p,a)                     (p)->lpVtbl->SetColor(p,a)\n#define IDirect3DRMMeshBuilder_SetTexture(p,a)                   (p)->lpVtbl->SetTexture(p,a)\n#define IDirect3DRMMeshBuilder_SetMaterial(p,a)                  (p)->lpVtbl->SetMaterial(p,a)\n#define IDirect3DRMMeshBuilder_SetTextureTopology(p,a,b)         (p)->lpVtbl->SetTextureTopology(p,a,b)\n#define IDirect3DRMMeshBuilder_SetQuality(p,a)                   (p)->lpVtbl->SetQuality(p,a)\n#define IDirect3DRMMeshBuilder_SetPerspective(p,a)               (p)->lpVtbl->SetPerspective(p,a)\n#define IDirect3DRMMeshBuilder_SetVertex(p,a,b,c,d)              (p)->lpVtbl->SetVertex(p,a,b,c,d)\n#define IDirect3DRMMeshBuilder_SetNormal(p,a,b,c,d)              (p)->lpVtbl->SetNormal(p,a,b,c,d)\n#define IDirect3DRMMeshBuilder_SetTextureCoordinates(p,a,b,c)    (p)->lpVtbl->SetTextureCoordinates(p,a,b,c)\n#define IDirect3DRMMeshBuilder_SetVertexColor(p,a,b)             (p)->lpVtbl->SetVertexColor(p,a,b)\n#define IDirect3DRMMeshBuilder_SetVertexColorRGB(p,a,b,c,d)      (p)->lpVtbl->SetVertexColorRGB(p,a,b,c,d)\n#define IDirect3DRMMeshBuilder_GetFaces(p,a)                     (p)->lpVtbl->GetFaces(p,a)\n#define IDirect3DRMMeshBuilder_GetVertices(p,a,b,c,d,e,f)        (p)->lpVtbl->GetVertices(p,a,b,c,d,e,f)\n#define IDirect3DRMMeshBuilder_GetTextureCoordinates(p,a,b,c)    (p)->lpVtbl->GetTextureCoordinates(p,a,b,c)\n#define IDirect3DRMMeshBuilder_AddVertex(p,a,b,c)                (p)->lpVtbl->AddVertex(p,a,b,c)\n#define IDirect3DRMMeshBuilder_AddNormal(p,a,b,c)                (p)->lpVtbl->AddNormal(p,a,b,c)\n#define IDirect3DRMMeshBuilder_CreateFace(p,a)                   (p)->lpVtbl->CreateFace(p,a)\n#define IDirect3DRMMeshBuilder_GetQuality(p)                     (p)->lpVtbl->GetQuality(p)\n#define IDirect3DRMMeshBuilder_GetPerspective(p)                 (p)->lpVtbl->GetPerspective(p)\n#define IDirect3DRMMeshBuilder_GetFaceCount(p)                   (p)->lpVtbl->GetFaceCount(p)\n#define IDirect3DRMMeshBuilder_GetVertexCount(p)                 (p)->lpVtbl->GetVertexCount(p)\n#define IDirect3DRMMeshBuilder_GetVertexColor(p,a)               (p)->lpVtbl->GetVertexColor(p,a)\n#define IDirect3DRMMeshBuilder_CreateMesh(p,a)                   (p)->lpVtbl->CreateMesh(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMMeshBuilder_QueryInterface(p,a,b)             (p)->QueryInterface(a,b)\n#define IDirect3DRMMeshBuilder_AddRef(p)                         (p)->AddRef()\n#define IDirect3DRMMeshBuilder_Release(p)                        (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMMeshBuilder_Clone(p,a,b,c)                    (p)->Clone(a,b,c)\n#define IDirect3DRMMeshBuilder_AddDestroyCallback(p,a,b)         (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMMeshBuilder_DeleteDestroyCallback(p,a,b)      (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMMeshBuilder_SetAppData(p,a)                   (p)->SetAppData(a)\n#define IDirect3DRMMeshBuilder_GetAppData(p)                     (p)->GetAppData()\n#define IDirect3DRMMeshBuilder_SetName(p,a)                      (p)->SetName(a)\n#define IDirect3DRMMeshBuilder_GetName(p,a,b)                    (p)->GetName(a,b)\n#define IDirect3DRMMeshBuilder_GetClassName(p,a,b)               (p)->GetClassName(a,b)\n/*** IDirect3DRMMeshBuilder methods ***/\n#define IDirect3DRMMeshBuilder_Load(p,a,b,c,d,e)                 (p)->Load(a,b,c,d,e)\n#define IDirect3DRMMeshBuilder_Save(p,a,b,c)                     (p)->Save(a,b,c)\n#define IDirect3DRMMeshBuilder_Scale(p,a,b,c)                    (p)->Scale(a,b,c)\n#define IDirect3DRMMeshBuilder_Translate(p,a,b,c)                (p)->Translate(a)\n#define IDirect3DRMMeshBuilder_SetColorSource(p,a)               (p)->SetColorSource(a,b,c)\n#define IDirect3DRMMeshBuilder_GetBox(p,a)                       (p)->GetBox(a)\n#define IDirect3DRMMeshBuilder_GenerateNormals(p)                (p)->GenerateNormals()\n#define IDirect3DRMMeshBuilder_GetColorSource(p)                 (p)->GetColorSource()\n#define IDirect3DRMMeshBuilder_AddMesh(p,a)                      (p)-->AddMesh(a)\n#define IDirect3DRMMeshBuilder_AddMeshBuilder(p,a)               (p)->AddMeshBuilder(a)\n#define IDirect3DRMMeshBuilder_AddFrame(p,a)                     (p)->AddFrame(a)\n#define IDirect3DRMMeshBuilder_AddFace(p,a)                      (p)->AddFace(a)\n#define IDirect3DRMMeshBuilder_AddFaces(p,a,b,c,d,e,f)           (p)->AddFaces(a,b,c,d,e,f)\n#define IDirect3DRMMeshBuilder_ReserveSpace(p,a,b,c)             (p)->ReserveSpace(a,b,c)\n#define IDirect3DRMMeshBuilder_SetColorRGB(p,a,b,c)              (p)->SetColorRGB(a,b,c)\n#define IDirect3DRMMeshBuilder_SetColor(p,a)                     (p)->SetColor(a)\n#define IDirect3DRMMeshBuilder_SetTexture(p,a)                   (p)->SetTexture(a)\n#define IDirect3DRMMeshBuilder_SetMaterial(p,a)                  (p)->SetMaterial(a)\n#define IDirect3DRMMeshBuilder_SetTextureTopology(p,a,b)         (p)->SetTextureTopology(a,b)\n#define IDirect3DRMMeshBuilder_SetQuality(p,a)                   (p)->SetQuality(a)\n#define IDirect3DRMMeshBuilder_SetPerspective(p,a)               (p)->SetPerspective(a)\n#define IDirect3DRMMeshBuilder_SetVertex(p,a,b,c,d)              (p)->SetVertex(a,b,c,d)\n#define IDirect3DRMMeshBuilder_SetNormal(p,a,b,c,d)              (p)->SetNormal(a,b,c,d)\n#define IDirect3DRMMeshBuilder_SetTextureCoordinates(p,a,b,c)    (p)->SetTextureCoordinates(a,b,c)\n#define IDirect3DRMMeshBuilder_SetVertexColor(p,a,b)             (p)->SetVertexColor(a,b)\n#define IDirect3DRMMeshBuilder_SetVertexColorRGB(p,a,b,c,d)      (p)->SetVertexColorRGB(a,b,c,d)\n#define IDirect3DRMMeshBuilder_GetFaces(p,a)                     (p)->GetFaces(a)\n#define IDirect3DRMMeshBuilder_GetVertices(p,a,b,c,d,e,f)        (p)->GetVertices(a,b,c,d,e,f)\n#define IDirect3DRMMeshBuilder_GetTextureCoordinates(p,a,b,c)    (p)->GetTextureCoordinates(a,b,c)\n#define IDirect3DRMMeshBuilder_AddVertex(p,a,b,c)                (p)->AddVertex(a,b,c)\n#define IDirect3DRMMeshBuilder_AddNormal(p,a,b,c)                (p)->AddNormal(a,b,c)\n#define IDirect3DRMMeshBuilder_CreateFace(p,a)                   (p)->CreateFace(a)\n#define IDirect3DRMMeshBuilder_GetQuality(p)                     (p)->GetQuality()\n#define IDirect3DRMMeshBuilder_GetPerspective(p)                 (p)->GetPerspective()\n#define IDirect3DRMMeshBuilder_GetFaceCount(p)                   (p)->GetFaceCount()\n#define IDirect3DRMMeshBuilder_GetVertexCount(p)                 (p)->GetVertexCount()\n#define IDirect3DRMMeshBuilder_GetVertexColor(p,a)               (p)->GetVertexColor(a)\n#define IDirect3DRMMeshBuilder_CreateMesh(p,a)                   (p)->CreateMesh(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMMeshBuilder2 interface\n */\n#define INTERFACE IDirect3DRMMeshBuilder2\nDECLARE_INTERFACE_(IDirect3DRMMeshBuilder2,IDirect3DRMMeshBuilder)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMMeshBuilder methods ***/\n    STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags,\n            D3DRMLOADTEXTURECALLBACK cb, void *ctx) PURE;\n    STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT, D3DRMSAVEOPTIONS save) PURE;\n    STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;\n    STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE;\n    STDMETHOD(SetColorSource)(THIS_ D3DRMCOLORSOURCE) PURE;\n    STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE;\n    STDMETHOD(GenerateNormals)(THIS) PURE;\n    STDMETHOD_(D3DRMCOLORSOURCE, GetColorSource)(THIS) PURE;\n    STDMETHOD(AddMesh)(THIS_ IDirect3DRMMesh *mesh) PURE;\n    STDMETHOD(AddMeshBuilder)(THIS_ IDirect3DRMMeshBuilder *mesh_builder) PURE;\n    STDMETHOD(AddFrame)(THIS_ IDirect3DRMFrame *frame) PURE;\n    STDMETHOD(AddFace)(THIS_ IDirect3DRMFace *face) PURE;\n    STDMETHOD(AddFaces)(THIS_ DWORD vertex_count, D3DVECTOR *vertices, DWORD normal_count,\n            D3DVECTOR *normals, DWORD *face_data, struct IDirect3DRMFaceArray **array) PURE;\n    STDMETHOD(ReserveSpace)(THIS_ DWORD vertex_Count, DWORD normal_count, DWORD face_count) PURE;\n    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;\n    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;\n    STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture *texture) PURE;\n    STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial *material) PURE;\n    STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;\n    STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;\n    STDMETHOD(SetPerspective)(THIS_ BOOL) PURE;\n    STDMETHOD(SetVertex)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;\n    STDMETHOD(SetNormal)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;\n    STDMETHOD(SetTextureCoordinates)(THIS_ DWORD index, D3DVALUE u, D3DVALUE v) PURE;\n    STDMETHOD(SetVertexColor)(THIS_ DWORD index, D3DCOLOR) PURE;\n    STDMETHOD(SetVertexColorRGB)(THIS_ DWORD index, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;\n    STDMETHOD(GetFaces)(THIS_ struct IDirect3DRMFaceArray **array) PURE;\n    STDMETHOD(GetVertices)(THIS_ DWORD *vcount, D3DVECTOR *vertices, DWORD *ncount, D3DVECTOR *normals,\n        DWORD *face_data_size, DWORD *face_data) PURE;\n    STDMETHOD(GetTextureCoordinates)(THIS_ DWORD index, D3DVALUE *u, D3DVALUE *v) PURE;\n    STDMETHOD_(int, AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;\n    STDMETHOD_(int, AddNormal)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;\n    STDMETHOD(CreateFace)(THIS_ IDirect3DRMFace **face) PURE;\n    STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;\n    STDMETHOD_(BOOL, GetPerspective)(THIS) PURE;\n    STDMETHOD_(int, GetFaceCount)(THIS) PURE;\n    STDMETHOD_(int, GetVertexCount)(THIS) PURE;\n    STDMETHOD_(D3DCOLOR, GetVertexColor)(THIS_ DWORD index) PURE;\n    STDMETHOD(CreateMesh)(THIS_ IDirect3DRMMesh **mesh) PURE;\n    /*** IDirect3DRMMeshBuilder2 methods ***/\n    STDMETHOD(GenerateNormals2)(THIS_ D3DVALUE crease, DWORD flags) PURE;\n    STDMETHOD(GetFace)(THIS_ DWORD index, IDirect3DRMFace **face) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMMeshBuilder2_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMMeshBuilder2_AddRef(p)                        (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMMeshBuilder2_Release(p)                       (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMMeshBuilder2_Clone(p,a,b,c)                   (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMMeshBuilder2_AddDestroyCallback(p,a,b)        (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMMeshBuilder2_DeleteDestroyCallback(p,a,b)     (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMMeshBuilder2_SetAppData(p,a)                  (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMMeshBuilder2_GetAppData(p)                    (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMMeshBuilder2_SetName(p,a)                     (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMMeshBuilder2_GetName(p,a,b)                   (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMMeshBuilder2_GetClassName(p,a,b)              (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMMeshBuilder methods ***/\n#define IDirect3DRMMeshBuilder2_Load(p,a,b,c,d,e)                (p)->lpVtbl->Load(p,a,b,c,d,e)\n#define IDirect3DRMMeshBuilder2_Save(p,a,b,c)                    (p)->lpVtbl->Save(p,a,b,c)\n#define IDirect3DRMMeshBuilder2_Scale(p,a,b,c)                   (p)->lpVtbl->Scale(p,a,b,c)\n#define IDirect3DRMMeshBuilder2_Translate(p,a,b,c)               (p)->lpVtbl->Translate(p,a)\n#define IDirect3DRMMeshBuilder2_SetColorSource(p,a)              (p)->lpVtbl->SetColorSource(p,a,b,c)\n#define IDirect3DRMMeshBuilder2_GetBox(p,a)                      (p)->lpVtbl->GetBox(p,a)\n#define IDirect3DRMMeshBuilder2_GenerateNormals(p)               (p)->lpVtbl->GenerateNormals(p)\n#define IDirect3DRMMeshBuilder2_GetColorSource(p)                (p)->lpVtbl->GetColorSource(p)\n#define IDirect3DRMMeshBuilder2_AddMesh(p,a)                     (p)->lpVtbl->AddMesh(p,a)\n#define IDirect3DRMMeshBuilder2_AddMeshBuilder(p,a)              (p)->lpVtbl->AddMeshBuilder(p,a)\n#define IDirect3DRMMeshBuilder2_AddFrame(p,a)                    (p)->lpVtbl->AddFrame(p,a)\n#define IDirect3DRMMeshBuilder2_AddFace(p,a)                     (p)->lpVtbl->AddFace(p,a)\n#define IDirect3DRMMeshBuilder2_AddFaces(p,a,b,c,d,e,f)          (p)->lpVtbl->AddFaces(p,a,b,c,d,e,f)\n#define IDirect3DRMMeshBuilder2_ReserveSpace(p,a,b,c)            (p)->lpVtbl->ReserveSpace(p,a,b,c)\n#define IDirect3DRMMeshBuilder2_SetColorRGB(p,a,b,c)             (p)->lpVtbl->SetColorRGB(p,a,b,c)\n#define IDirect3DRMMeshBuilder2_SetColor(p,a)                    (p)->lpVtbl->SetColor(p,a)\n#define IDirect3DRMMeshBuilder2_SetTexture(p,a)                  (p)->lpVtbl->SetTexture(p,a)\n#define IDirect3DRMMeshBuilder2_SetMaterial(p,a)                 (p)->lpVtbl->SetMaterial(p,a)\n#define IDirect3DRMMeshBuilder2_SetTextureTopology(p,a,b)        (p)->lpVtbl->SetTextureTopology(p,a,b)\n#define IDirect3DRMMeshBuilder2_SetQuality(p,a)                  (p)->lpVtbl->SetQuality(p,a)\n#define IDirect3DRMMeshBuilder2_SetPerspective(p,a)              (p)->lpVtbl->SetPerspective(p,a)\n#define IDirect3DRMMeshBuilder2_SetVertex(p,a,b,c,d)             (p)->lpVtbl->SetVertex(p,a,b,c,d)\n#define IDirect3DRMMeshBuilder2_SetNormal(p,a,b,c,d)             (p)->lpVtbl->SetNormal(p,a,b,c,d)\n#define IDirect3DRMMeshBuilder2_SetTextureCoordinates(p,a,b,c)   (p)->lpVtbl->SetTextureCoordinates(p,a,b,c)\n#define IDirect3DRMMeshBuilder2_SetVertexColor(p,a,b)            (p)->lpVtbl->SetVertexColor(p,a,b)\n#define IDirect3DRMMeshBuilder2_SetVertexColorRGB(p,a,b,c,d)     (p)->lpVtbl->SetVertexColorRGB(p,a,b,c,d)\n#define IDirect3DRMMeshBuilder2_GetFaces(p,a)                    (p)->lpVtbl->GetFaces(p,a)\n#define IDirect3DRMMeshBuilder2_GetVertices(p,a,b,c,d,e,f)       (p)->lpVtbl->GetVertices(p,a,b,c,d,e,f)\n#define IDirect3DRMMeshBuilder2_GetTextureCoordinates(p,a,b,c)   (p)->lpVtbl->GetTextureCoordinates(p,a,b,c)\n#define IDirect3DRMMeshBuilder2_AddVertex(p,a,b,c)               (p)->lpVtbl->AddVertex(p,a,b,c)\n#define IDirect3DRMMeshBuilder2_AddNormal(p,a,b,c)               (p)->lpVtbl->AddNormal(p,a,b,c)\n#define IDirect3DRMMeshBuilder2_CreateFace(p,a)                  (p)->lpVtbl->CreateFace(p,a)\n#define IDirect3DRMMeshBuilder2_GetQuality(p)                    (p)->lpVtbl->GetQuality(p)\n#define IDirect3DRMMeshBuilder2_GetPerspective(p)                (p)->lpVtbl->GetPerspective(p)\n#define IDirect3DRMMeshBuilder2_GetFaceCount(p)                  (p)->lpVtbl->GetFaceCount(p)\n#define IDirect3DRMMeshBuilder2_GetVertexCount(p)                (p)->lpVtbl->GetVertexCount(p)\n#define IDirect3DRMMeshBuilder2_GetVertexColor(p,a)              (p)->lpVtbl->GetVertexColor(p,a)\n#define IDirect3DRMMeshBuilder2_CreateMesh(p,a)                  (p)->lpVtbl->CreateMesh(p,a)\n/*** IDirect3DRMMeshBuilder2 methods ***/\n#define IDirect3DRMMeshBuilder2_GenerateNormals2(p,a,b)          (p)->lpVtbl->GenerateNormals2(p,a,b)\n#define IDirect3DRMMeshBuilder2_GetFace(p,a,b)                   (p)->lpVtbl->GetFace(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMMeshBuilder2_QueryInterface(p,a,b)            (p)->QueryInterface(a,b)\n#define IDirect3DRMMeshBuilder2_AddRef(p)                        (p)->AddRef()\n#define IDirect3DRMMeshBuilder2_Release(p)                       (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMMeshBuilder2_Clone(p,a,b,c)                   (p)->Clone(a,b,c)\n#define IDirect3DRMMeshBuilder2_AddDestroyCallback(p,a,b)        (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMMeshBuilder2_DeleteDestroyCallback(p,a,b)     (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMMeshBuilder2_SetAppData(p,a)                  (p)->SetAppData(a)\n#define IDirect3DRMMeshBuilder2_GetAppData(p)                    (p)->GetAppData()\n#define IDirect3DRMMeshBuilder2_SetName(p,a)                     (p)->SetName(a)\n#define IDirect3DRMMeshBuilder2_GetName(p,a,b)                   (p)->GetName(a,b)\n#define IDirect3DRMMeshBuilder2_GetClassName(p,a,b)              (p)->GetClassName(a,b)\n/*** IDirect3DRMMeshBuilder methods ***/\n#define IDirect3DRMMeshBuilder2_Load(p,a,b,c,d,e)                (p)->Load(a,b,c,d,e)\n#define IDirect3DRMMeshBuilder2_Save(p,a,b,c)                    (p)->Save(a,b,c)\n#define IDirect3DRMMeshBuilder2_Scale(p,a,b,c)                   (p)->Scale(a,b,c)\n#define IDirect3DRMMeshBuilder2_Translate(p,a,b,c)               (p)->Translate(a)\n#define IDirect3DRMMeshBuilder2_SetColorSource(p,a)              (p)->SetColorSource(a,b,c)\n#define IDirect3DRMMeshBuilder2_GetBox(p,a)                      (p)->GetBox(a)\n#define IDirect3DRMMeshBuilder2_GenerateNormals(p)               (p)->GenerateNormals()\n#define IDirect3DRMMeshBuilder2_GetColorSource(p)                (p)->GetColorSource()\n#define IDirect3DRMMeshBuilder2_AddMesh(p,a)                     (p)-->AddMesh(a)\n#define IDirect3DRMMeshBuilder2_AddMeshBuilder(p,a)              (p)->AddMeshBuilder(a)\n#define IDirect3DRMMeshBuilder2_AddFrame(p,a)                    (p)->AddFrame(a)\n#define IDirect3DRMMeshBuilder2_AddFace(p,a)                     (p)->AddFace(a)\n#define IDirect3DRMMeshBuilder2_AddFaces(p,a,b,c,d,e,f)          (p)->AddFaces(a,b,c,d,e,f)\n#define IDirect3DRMMeshBuilder2_ReserveSpace(p,a,b,c)            (p)->ReserveSpace(a,b,c)\n#define IDirect3DRMMeshBuilder2_SetColorRGB(p,a,b,c)             (p)->SetColorRGB(a,b,c)\n#define IDirect3DRMMeshBuilder2_SetColor(p,a)                    (p)->SetColor(a)\n#define IDirect3DRMMeshBuilder2_SetTexture(p,a)                  (p)->SetTexture(a)\n#define IDirect3DRMMeshBuilder2_SetMaterial(p,a)                 (p)->SetMaterial(a)\n#define IDirect3DRMMeshBuilder2_SetTextureTopology(p,a,b)        (p)->SetTextureTopology(a,b)\n#define IDirect3DRMMeshBuilder2_SetQuality(p,a)                  (p)->SetQuality(a)\n#define IDirect3DRMMeshBuilder2_SetPerspective(p,a)              (p)->SetPerspective(a)\n#define IDirect3DRMMeshBuilder2_SetVertex(p,a,b,c,d)             (p)->SetVertex(a,b,c,d)\n#define IDirect3DRMMeshBuilder2_SetNormal(p,a,b,c,d)             (p)->SetNormal(a,b,c,d)\n#define IDirect3DRMMeshBuilder2_SetTextureCoordinates(p,a,b,c)   (p)->SetTextureCoordinates(a,b,c)\n#define IDirect3DRMMeshBuilder2_SetVertexColor(p,a,b)            (p)->SetVertexColor(a,b)\n#define IDirect3DRMMeshBuilder2_SetVertexColorRGB(p,a,b,c,d)     (p)->SetVertexColorRGB(a,b,c,d)\n#define IDirect3DRMMeshBuilder2_GetFaces(p,a)                    (p)->GetFaces(a)\n#define IDirect3DRMMeshBuilder2_GetVertices(p,a,b,c,d,e,f)       (p)->GetVertices(a,b,c,d,e,f)\n#define IDirect3DRMMeshBuilder2_GetTextureCoordinates(p,a,b,c)   (p)->GetTextureCoordinates(a,b,c)\n#define IDirect3DRMMeshBuilder2_AddVertex(p,a,b,c)               (p)->AddVertex(a,b,c)\n#define IDirect3DRMMeshBuilder2_AddNormal(p,a,b,c)               (p)->AddNormal(a,b,c)\n#define IDirect3DRMMeshBuilder2_CreateFace(p,a)                  (p)->CreateFace(a)\n#define IDirect3DRMMeshBuilder2_GetQuality(p)                    (p)->GetQuality()\n#define IDirect3DRMMeshBuilder2_GetPerspective(p)                (p)->GetPerspective()\n#define IDirect3DRMMeshBuilder2_GetFaceCount(p)                  (p)->GetFaceCount()\n#define IDirect3DRMMeshBuilder2_GetVertexCount(p)                (p)->GetVertexCount()\n#define IDirect3DRMMeshBuilder2_GetVertexColor(p,a)              (p)->GetVertexColor(a)\n#define IDirect3DRMMeshBuilder2_CreateMesh(p,a)                  (p)->CreateMesh(a)\n/*** IDirect3DRMMeshBuilder2 methods ***/\n#define IDirect3DRMMeshBuilder2_GenerateNormals2(p,a,b)          (p)->GenerateNormals2(a,b)\n#define IDirect3DRMMeshBuilder2_GetFace(p,a,b)                   (p)->GetFace(a,b)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMMeshBuilder3 interface\n */\n#define INTERFACE IDirect3DRMMeshBuilder3\nDECLARE_INTERFACE_(IDirect3DRMMeshBuilder3,IDirect3DRMVisual)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMMeshBuilder3 methods ***/\n    STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags,\n            D3DRMLOADTEXTURE3CALLBACK cb, void *ctx) PURE;\n    STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT, D3DRMSAVEOPTIONS save) PURE;\n    STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;\n    STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE;\n    STDMETHOD(SetColorSource)(THIS_ D3DRMCOLORSOURCE) PURE;\n    STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE;\n    STDMETHOD(GenerateNormals)(THIS_ D3DVALUE crease, DWORD flags) PURE;\n    STDMETHOD_(D3DRMCOLORSOURCE, GetColorSource)(THIS) PURE;\n    STDMETHOD(AddMesh)(THIS_ IDirect3DRMMesh *mesh) PURE;\n    STDMETHOD(AddMeshBuilder)(THIS_ IDirect3DRMMeshBuilder3 *mesh_builder, DWORD flags) PURE;\n    STDMETHOD(AddFrame)(THIS_ IDirect3DRMFrame3 *frame) PURE;\n    STDMETHOD(AddFace)(THIS_ IDirect3DRMFace2 *face) PURE;\n    STDMETHOD(AddFaces)(THIS_ DWORD vertex_count, D3DVECTOR *vertices, DWORD normal_count,\n            D3DVECTOR *normals, DWORD *face_data, struct IDirect3DRMFaceArray **array) PURE;\n    STDMETHOD(ReserveSpace)(THIS_ DWORD vertex_Count, DWORD normal_count, DWORD face_count) PURE;\n    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;\n    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;\n    STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture3 *texture) PURE;\n    STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial2 *material) PURE;\n    STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;\n    STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;\n    STDMETHOD(SetPerspective)(THIS_ BOOL) PURE;\n    STDMETHOD(SetVertex)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;\n    STDMETHOD(SetNormal)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;\n    STDMETHOD(SetTextureCoordinates)(THIS_ DWORD index, D3DVALUE u, D3DVALUE v) PURE;\n    STDMETHOD(SetVertexColor)(THIS_ DWORD index, D3DCOLOR) PURE;\n    STDMETHOD(SetVertexColorRGB)(THIS_ DWORD index, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;\n    STDMETHOD(GetFaces)(THIS_ struct IDirect3DRMFaceArray **array) PURE;\n    STDMETHOD(GetGeometry)(THIS_ DWORD *vcount, D3DVECTOR *vertices, DWORD *ncount, D3DVECTOR *normals,\n        DWORD *face_data_size, DWORD *face_data) PURE;\n    STDMETHOD(GetTextureCoordinates)(THIS_ DWORD index, D3DVALUE *u, D3DVALUE *v) PURE;\n    STDMETHOD_(int, AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;\n    STDMETHOD_(int, AddNormal)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;\n    STDMETHOD(CreateFace)(THIS_ IDirect3DRMFace2 **face) PURE;\n    STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;\n    STDMETHOD_(BOOL, GetPerspective)(THIS) PURE;\n    STDMETHOD_(int, GetFaceCount)(THIS) PURE;\n    STDMETHOD_(int, GetVertexCount)(THIS) PURE;\n    STDMETHOD_(D3DCOLOR, GetVertexColor)(THIS_ DWORD index) PURE;\n    STDMETHOD(CreateMesh)(THIS_ IDirect3DRMMesh **mesh) PURE;\n    STDMETHOD(GetFace)(THIS_ DWORD index, IDirect3DRMFace2 **face) PURE;\n    STDMETHOD(GetVertex)(THIS_ DWORD index, D3DVECTOR *vector) PURE;\n    STDMETHOD(GetNormal)(THIS_ DWORD index, D3DVECTOR *vector) PURE;\n    STDMETHOD(DeleteVertices)(THIS_ DWORD IndexFirst, DWORD count) PURE;\n    STDMETHOD(DeleteNormals)(THIS_ DWORD IndexFirst, DWORD count) PURE;\n    STDMETHOD(DeleteFace)(THIS_ IDirect3DRMFace2 *face) PURE;\n    STDMETHOD(Empty)(THIS_ DWORD flags) PURE;\n    STDMETHOD(Optimize)(THIS_ DWORD flags) PURE;\n    STDMETHOD(AddFacesIndexed)(THIS_ DWORD flags, DWORD *pvIndices, DWORD *pIndexFirst, DWORD *pCount) PURE;\n    STDMETHOD(CreateSubMesh)(THIS_ IUnknown **mesh) PURE;\n    STDMETHOD(GetParentMesh)(THIS_ DWORD flags, IUnknown **parent) PURE;\n    STDMETHOD(GetSubMeshes)(THIS_ DWORD *count, IUnknown **meshes) PURE;\n    STDMETHOD(DeleteSubMesh)(THIS_ IUnknown *mesh) PURE;\n    STDMETHOD(Enable)(THIS_ DWORD) PURE;\n    STDMETHOD(GetEnable)(THIS_ DWORD *) PURE;\n    STDMETHOD(AddTriangles)(THIS_ DWORD flags, DWORD format, DWORD vertex_count, void *data) PURE;\n    STDMETHOD(SetVertices)(THIS_ DWORD start_idx, DWORD count, D3DVECTOR *v) PURE;\n    STDMETHOD(GetVertices)(THIS_ DWORD start_idx, DWORD *count, D3DVECTOR *v) PURE;\n    STDMETHOD(SetNormals)(THIS_ DWORD start_idx, DWORD count, D3DVECTOR *v) PURE;\n    STDMETHOD(GetNormals)(THIS_ DWORD start_idx, DWORD *count, D3DVECTOR *v) PURE;\n    STDMETHOD_(int, GetNormalCount)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMMeshBuilder3_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMMeshBuilder3_AddRef(p)                        (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMMeshBuilder3_Release(p)                       (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMMeshBuilder3_Clone(p,a,b,c)                   (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMMeshBuilder3_AddDestroyCallback(p,a,b)        (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMMeshBuilder3_DeleteDestroyCallback(p,a,b)     (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMMeshBuilder3_SetAppData(p,a)                  (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMMeshBuilder3_GetAppData(p)                    (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMMeshBuilder3_SetName(p,a)                     (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMMeshBuilder3_GetName(p,a,b)                   (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMMeshBuilder3_GetClassName(p,a,b)              (p)->lpVtbl->GetClassName(p,a,b)\n\n/*** IDirect3DRMMeshBuilder3 methods ***/\n#define IDirect3DRMMeshBuilder3_Load(p,a,b,c,d,e)                (p)->lpVtbl->Load(p,a,b,c,d,e)\n#define IDirect3DRMMeshBuilder3_Save(p,a,b,c)                    (p)->lpVtbl->Save(p,a,b,c)\n#define IDirect3DRMMeshBuilder3_Scale(p,a,b,c)                   (p)->lpVtbl->Scale(p,a,b,c)\n#define IDirect3DRMMeshBuilder3_Translate(p,a,b,c)               (p)->lpVtbl->Translate(p,a)\n#define IDirect3DRMMeshBuilder3_SetColorSource(p,a)              (p)->lpVtbl->SetColorSource(p,a,b,c)\n#define IDirect3DRMMeshBuilder3_GetBox(p,a)                      (p)->lpVtbl->GetBox(p,a)\n#define IDirect3DRMMeshBuilder3_GenerateNormals(p,a,b)           (p)->lpVtbl->GenerateNormals(p,a,b)\n#define IDirect3DRMMeshBuilder3_GetColorSource(p)                (p)->lpVtbl->GetColorSource(p)\n#define IDirect3DRMMeshBuilder3_AddMesh(p,a)                     (p)->lpVtbl->AddMesh(p,a)\n#define IDirect3DRMMeshBuilder3_AddMeshBuilder(p,a)              (p)->lpVtbl->AddMeshBuilder(p,a)\n#define IDirect3DRMMeshBuilder3_AddFrame(p,a)                    (p)->lpVtbl->AddFrame(p,a)\n#define IDirect3DRMMeshBuilder3_AddFace(p,a)                     (p)->lpVtbl->AddFace(p,a)\n#define IDirect3DRMMeshBuilder3_AddFaces(p,a,b,c,d,e,f)          (p)->lpVtbl->AddFaces(p,a,b,c,d,e,f)\n#define IDirect3DRMMeshBuilder3_ReserveSpace(p,a,b,c)            (p)->lpVtbl->ReserveSpace(p,a,b,c)\n#define IDirect3DRMMeshBuilder3_SetColorRGB(p,a,b,c)             (p)->lpVtbl->SetColorRGB(p,a,b,c)\n#define IDirect3DRMMeshBuilder3_SetColor(p,a)                    (p)->lpVtbl->SetColor(p,a)\n#define IDirect3DRMMeshBuilder3_SetTexture(p,a)                  (p)->lpVtbl->SetTexture(p,a)\n#define IDirect3DRMMeshBuilder3_SetMaterial(p,a)                 (p)->lpVtbl->SetMaterial(p,a)\n#define IDirect3DRMMeshBuilder3_SetTextureTopology(p,a,b)        (p)->lpVtbl->SetTextureTopology(p,a,b)\n#define IDirect3DRMMeshBuilder3_SetQuality(p,a)                  (p)->lpVtbl->SetQuality(p,a)\n#define IDirect3DRMMeshBuilder3_SetPerspective(p,a)              (p)->lpVtbl->SetPerspective(p,a)\n#define IDirect3DRMMeshBuilder3_SetVertex(p,a,b,c,d)             (p)->lpVtbl->SetVertex(p,a,b,c,d)\n#define IDirect3DRMMeshBuilder3_SetNormal(p,a,b,c,d)             (p)->lpVtbl->SetNormal(p,a,b,c,d)\n#define IDirect3DRMMeshBuilder3_SetTextureCoordinates(p,a,b,c)   (p)->lpVtbl->SetTextureCoordinates(p,a,b,c)\n#define IDirect3DRMMeshBuilder3_SetVertexColor(p,a,b)            (p)->lpVtbl->SetVertexColor(p,a,b)\n#define IDirect3DRMMeshBuilder3_SetVertexColorRGB(p,a,b,c,d)     (p)->lpVtbl->SetVertexColorRGB(p,a,b,c,d)\n#define IDirect3DRMMeshBuilder3_GetFaces(p,a)                    (p)->lpVtbl->GetFaces(p,a)\n#define IDirect3DRMMeshBuilder3_GetGeometry(p,a,b,c,d,e,f)       (p)->lpVtbl->GetGeometry(p,a,b,c,d,e,f)\n#define IDirect3DRMMeshBuilder3_GetTextureCoordinates(p,a,b,c)   (p)->lpVtbl->GetTextureCoordinates(p,a,b,c)\n#define IDirect3DRMMeshBuilder3_AddVertex(p,a,b,c)               (p)->lpVtbl->AddVertex(p,a,b,c)\n#define IDirect3DRMMeshBuilder3_AddNormal(p,a,b,c)               (p)->lpVtbl->AddNormal(p,a,b,c)\n\n#define IDirect3DRMMeshBuilder3_CreateFace(p,a)                  (p)->lpVtbl->CreateFace(p,a)\n#define IDirect3DRMMeshBuilder3_GetQuality(p)                    (p)->lpVtbl->GetQuality(p)\n#define IDirect3DRMMeshBuilder3_GetPerspective(p)                (p)->lpVtbl->GetPerspective(p)\n\n#define IDirect3DRMMeshBuilder3_GetFaceCount(p)                  (p)->lpVtbl->GetFaceCount(p)\n#define IDirect3DRMMeshBuilder3_GetVertexCount(p)                (p)->lpVtbl->GetVertexCount(p)\n#define IDirect3DRMMeshBuilder3_GetVertexColor(p,a)              (p)->lpVtbl->GetVertexColor(p,a)\n#define IDirect3DRMMeshBuilder3_CreateMesh(p,a)                  (p)->lpVtbl->CreateMesh(p,a)\n#define IDirect3DRMMeshBuilder3_GetFace(p,a,b)                   (p)->lpVtbl->GetFace(p,a,b)\n#define IDirect3DRMMeshBuilder3_GetVertex(p,a,b)                 (p)->lpVtbl->GetVertex(p,a,b)\n#define IDirect3DRMMeshBuilder3_GetNormal(p,a,b)                 (p)->lpVtbl->GetNormal(p,a,b)\n#define IDirect3DRMMeshBuilder3_DeleteVertices(p,a,b)            (p)->lpVtbl->DeleteVertices(p,a,b)\n#define IDirect3DRMMeshBuilder3_DeleteNormals(p,a,b)             (p)->lpVtbl->DeleteNormals(p,a,b)\n#define IDirect3DRMMeshBuilder3_DeleteFace(p,a)                  (p)->lpVtbl->DeleteFace(p,a)\n#define IDirect3DRMMeshBuilder3_Empty(p,a)                       (p)->lpVtbl->Empty(p,a)\n#define IDirect3DRMMeshBuilder3_Optimize(p,a)                    (p)->lpVtbl->Optimize(p,a)\n#define IDirect3DRMMeshBuilder3_AddFacesIndexed(p,a,b,c,d)       (p)->lpVtbl->AddFacesIndexed(p,a,b,c,d)\n#define IDirect3DRMMeshBuilder3_CreateSubMesh(p,a)               (p)->lpVtbl->CreateSubMesh(p,a)\n#define IDirect3DRMMeshBuilder3_GetParentMesh(p,a,b)             (p)->lpVtbl->GetParentMesh(p,a,b)\n#define IDirect3DRMMeshBuilder3_GetSubMeshes(p,a,b)              (p)->lpVtbl->GetSubMeshes(p,a,b)\n#define IDirect3DRMMeshBuilder3_DeleteSubMesh(p,a)               (p)->lpVtbl->DeleteSubMesh(p,a)\n#define IDirect3DRMMeshBuilder3_Enable(p,a)                      (p)->lpVtbl->Enable(p,a)\n#define IDirect3DRMMeshBuilder3_AddTriangles(p,a,b,c,d)          (p)->lpVtbl->AddTriangles(p,a,b,c,d)\n#define IDirect3DRMMeshBuilder3_SetVertices(p,a,b,c)             (p)->lpVtbl->SetVertices(p,a,b,c)\n#define IDirect3DRMMeshBuilder3_GetVertices(p,a,b,c)             (p)->lpVtbl->GetVertices(p,a,b,c)\n#define IDirect3DRMMeshBuilder3_SetNormals(p,a,b,c)              (p)->lpVtbl->SetNormals(p,a,b,c)\n#define IDirect3DRMMeshBuilder3_GetNormals(p,a,b,c)              (p)->lpVtbl->GetNormals(p,a,b,c)\n#define IDirect3DRMMeshBuilder3_GetNormalCount(p)                (p)->lpVtbl->GetNormalCount(p)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMMeshBuilder3_QueryInterface(p,a,b)            (p)->QueryInterface(a,b)\n#define IDirect3DRMMeshBuilder3_AddRef(p)                        (p)->AddRef()\n#define IDirect3DRMMeshBuilder3_Release(p)                       (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMMeshBuilder3_Clone(p,a,b,c)                   (p)->Clone(a,b,c)\n#define IDirect3DRMMeshBuilder3_AddDestroyCallback(p,a,b)        (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMMeshBuilder3_DeleteDestroyCallback(p,a,b)     (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMMeshBuilder3_SetAppData(p,a)                  (p)->SetAppData(a)\n#define IDirect3DRMMeshBuilder3_GetAppData(p)                    (p)->GetAppData()\n#define IDirect3DRMMeshBuilder3_SetName(p,a)                     (p)->SetName(a)\n#define IDirect3DRMMeshBuilder3_GetName(p,a,b)                   (p)->GetName(a,b)\n#define IDirect3DRMMeshBuilder3_GetClassName(p,a,b)              (p)->GetClassName(a,b)\n/*** IDirect3DRMMeshBuilder3 methods ***/\n#define IDirect3DRMMeshBuilder3_Load(p,a,b,c,d,e)                (p)->Load(a,b,c,d,e)\n#define IDirect3DRMMeshBuilder3_Save(p,a,b,c)                    (p)->Save(a,b,c)\n#define IDirect3DRMMeshBuilder3_Scale(p,a,b,c)                   (p)->Scale(a,b,c)\n#define IDirect3DRMMeshBuilder3_Translate(p,a,b,c)               (p)->Translate(a)\n#define IDirect3DRMMeshBuilder3_SetColorSource(p,a)              (p)->SetColorSource(a,b,c)\n#define IDirect3DRMMeshBuilder3_GetBox(p,a)                      (p)->GetBox(a)\n#define IDirect3DRMMeshBuilder3_GenerateNormals(p,a,b)           (p)->GenerateNormals(a,b)\n#define IDirect3DRMMeshBuilder3_GetColorSource(p)                (p)->GetColorSource()\n#define IDirect3DRMMeshBuilder3_AddMesh(p,a)                     (p)-->AddMesh(a)\n#define IDirect3DRMMeshBuilder3_AddMeshBuilder(p,a)              (p)->AddMeshBuilder(a)\n#define IDirect3DRMMeshBuilder3_AddFrame(p,a)                    (p)->AddFrame(a)\n#define IDirect3DRMMeshBuilder3_AddFace(p,a)                     (p)->AddFace(a)\n#define IDirect3DRMMeshBuilder3_AddFaces(p,a,b,c,d,e,f)          (p)->AddFaces(a,b,c,d,e,f)\n#define IDirect3DRMMeshBuilder3_ReserveSpace(p,a,b,c)            (p)->ReserveSpace(a,b,c)\n#define IDirect3DRMMeshBuilder3_SetColorRGB(p,a,b,c)             (p)->SetColorRGB(a,b,c)\n#define IDirect3DRMMeshBuilder3_SetColor(p,a)                    (p)->SetColor(a)\n#define IDirect3DRMMeshBuilder3_SetTexture(p,a)                  (p)->SetTexture(a)\n#define IDirect3DRMMeshBuilder3_SetMaterial(p,a)                 (p)->SetMaterial(a)\n#define IDirect3DRMMeshBuilder3_SetTextureTopology(p,a,b)        (p)->SetTextureTopology(a,b)\n#define IDirect3DRMMeshBuilder3_SetQuality(p,a)                  (p)->SetQuality(a)\n#define IDirect3DRMMeshBuilder3_SetPerspective(p,a)              (p)->SetPerspective(a)\n#define IDirect3DRMMeshBuilder3_SetVertex(p,a,b,c,d)             (p)->SetVertex(a,b,c,d)\n#define IDirect3DRMMeshBuilder3_SetNormal(p,a,b,c,d)             (p)->SetNormal(a,b,c,d)\n#define IDirect3DRMMeshBuilder3_SetTextureCoordinates(p,a,b,c)   (p)->SetTextureCoordinates(a,b,c)\n#define IDirect3DRMMeshBuilder3_SetVertexColor(p,a,b)            (p)->SetVertexColor(a,b)\n#define IDirect3DRMMeshBuilder3_SetVertexColorRGB(p,a,b,c,d)     (p)->SetVertexColorRGB(a,b,c,d)\n#define IDirect3DRMMeshBuilder3_GetFaces(p,a)                    (p)->GetFaces(a)\n#define IDirect3DRMMeshBuilder3_GetGeometry(p,a,b,c,d,e,f)       (p)->GetGeometry(a,b,c,d,e,f)\n#define IDirect3DRMMeshBuilder3_GetTextureCoordinates(p,a,b,c)   (p)->GetTextureCoordinates(a,b,c)\n#define IDirect3DRMMeshBuilder3_AddVertex(p,a,b,c)               (p)->AddVertex(a,b,c)\n#define IDirect3DRMMeshBuilder3_AddNormal(p,a,b,c)               (p)->AddNormal(a,b,c)\n#define IDirect3DRMMeshBuilder3_CreateFace(p,a)                  (p)->CreateFace(a)\n\n#define IDirect3DRMMeshBuilder3_GetQuality(p)                    (p)->GetQuality()\n#define IDirect3DRMMeshBuilder3_GetPerspective(p)                (p)->GetPerspective()\n#define IDirect3DRMMeshBuilder3_GetFaceCount(p)                  (p)->GetFaceCount()\n#define IDirect3DRMMeshBuilder3_GetVertexCount(p)                (p)->GetVertexCount()\n#define IDirect3DRMMeshBuilder3_GetVertexColor(p,a)              (p)->GetVertexColor(a)\n#define IDirect3DRMMeshBuilder3_CreateMesh(p,a)                  (p)->CreateMesh(a)\n#define IDirect3DRMMeshBuilder3_GetFace(p,a,b)                   (p)->GetFace(a,b)\n#define IDirect3DRMMeshBuilder3_GetVertex(p,a,b)                 (p)->GetVertex(a,b)\n#define IDirect3DRMMeshBuilder3_GetNormal(p,a,b)                 (p)->GetNormal(a,b)\n#define IDirect3DRMMeshBuilder3_DeleteVertices(p,a,b)            (p)->DeleteVertices(a,b)\n#define IDirect3DRMMeshBuilder3_DeleteNormals(p,a,b)             (p)->DeleteNormals(a,b)\n#define IDirect3DRMMeshBuilder3_DeleteFace(p,a)                  (p)->DeleteFace(a)\n#define IDirect3DRMMeshBuilder3_Empty(p,a)                       (p)->Empty(a)\n#define IDirect3DRMMeshBuilder3_Optimize(p,a)                    (p)->Optimize(a)\n#define IDirect3DRMMeshBuilder3_AddFacesIndexed(p,a,b,c,d)       (p)->AddFacesIndexed(a,b,c,d)\n#define IDirect3DRMMeshBuilder3_CreateSubMesh(p,a)               (p)->CreateSubMesh(a)\n#define IDirect3DRMMeshBuilder3_GetParentMesh(p,a,b)             (p)->GetParentMesh(a,b)\n#define IDirect3DRMMeshBuilder3_GetSubMeshes(p,a,b)              (p)->GetSubMeshes(a,b)\n#define IDirect3DRMMeshBuilder3_DeleteSubMesh(p,a)               (p)->DeleteSubMesh(a)\n#define IDirect3DRMMeshBuilder3_Enable(p,a)                      (p)->Enable(a)\n#define IDirect3DRMMeshBuilder3_AddTriangles(p,a,b,c,d)          (p)->AddTriangles(a,b,c,d)\n#define IDirect3DRMMeshBuilder3_SetVertices(p,a,b,c)             (p)->SetVertices(a,b,c)\n#define IDirect3DRMMeshBuilder3_GetVertices(p,a,b,c)             (p)->GetVertices(a,b,c)\n#define IDirect3DRMMeshBuilder3_SetNormals(p,a,b,c)              (p)->SetNormals(a,b,c)\n#define IDirect3DRMMeshBuilder3_GetNormals(p,a,b,c)              (p)->GetNormals(a,b,c)\n#define IDirect3DRMMeshBuilder3_GetNormalCount(p)                (p)->GetNormalCount()\n#endif\n\n/*****************************************************************************\n * IDirect3DRMLight interface\n */\n#define INTERFACE IDirect3DRMLight\nDECLARE_INTERFACE_(IDirect3DRMLight,IDirect3DRMObject)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMLight methods ***/\n    STDMETHOD(SetType)(THIS_ D3DRMLIGHTTYPE) PURE;\n    STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;\n    STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;\n    STDMETHOD(SetRange)(THIS_ D3DVALUE) PURE;\n    STDMETHOD(SetUmbra)(THIS_ D3DVALUE) PURE;\n    STDMETHOD(SetPenumbra)(THIS_ D3DVALUE) PURE;\n    STDMETHOD(SetConstantAttenuation)(THIS_ D3DVALUE) PURE;\n    STDMETHOD(SetLinearAttenuation)(THIS_ D3DVALUE) PURE;\n    STDMETHOD(SetQuadraticAttenuation)(THIS_ D3DVALUE) PURE;\n    STDMETHOD_(D3DVALUE, GetRange)(THIS) PURE;\n    STDMETHOD_(D3DVALUE, GetUmbra)(THIS) PURE;\n    STDMETHOD_(D3DVALUE, GetPenumbra)(THIS) PURE;\n    STDMETHOD_(D3DVALUE, GetConstantAttenuation)(THIS) PURE;\n    STDMETHOD_(D3DVALUE, GetLinearAttenuation)(THIS) PURE;\n    STDMETHOD_(D3DVALUE, GetQuadraticAttenuation)(THIS) PURE;\n    STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;\n    STDMETHOD_(D3DRMLIGHTTYPE, GetType)(THIS) PURE;\n    STDMETHOD(SetEnableFrame)(THIS_ IDirect3DRMFrame *frame) PURE;\n    STDMETHOD(GetEnableFrame)(THIS_ IDirect3DRMFrame **frame) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMLight_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMLight_AddRef(p)                        (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMLight_Release(p)                       (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMLight_Clone(p,a,b,c)                   (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMLight_AddDestroyCallback(p,a,b)        (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMLight_DeleteDestroyCallback(p,a,b)     (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMLight_SetAppData(p,a)                  (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMLight_GetAppData(p)                    (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMLight_SetName(p,a)                     (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMLight_GetName(p,a,b)                   (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMLight_GetClassName(p,a,b)              (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMLight methods ***/\n#define IDirect3DRMLight_SetType(p,a)                     (p)->lpVtbl->SetType(p,a)\n#define IDirect3DRMLight_SetColor(p,a)                    (p)->lpVtbl->SetColor(p,a)\n#define IDirect3DRMLight_SetColorRGB(p,a,b,c)             (p)->lpVtbl->SetColorRGB(p,a,b,c)\n#define IDirect3DRMLight_SetRange(p,a)                    (p)->lpVtbl->SetRange(p,a)\n#define IDirect3DRMLight_SetUmbra(p,a)                    (p)->lpVtbl->SetUmbra(p,a)\n#define IDirect3DRMLight_SetPenumbra(p,a)                 (p)->lpVtbl->SetPenumbra(p,a)\n#define IDirect3DRMLight_SetConstantAttenuation(p,a)      (p)->lpVtbl->SetConstantAttenuation(p,a)\n#define IDirect3DRMLight_SetLinearAttenuation(p,a)        (p)->lpVtbl->SetLinearAttenuation(p,a)\n#define IDirect3DRMLight_SetQuadraticAttenuation(p,a)     (p)->lpVtbl->SetQuadraticAttenuation(p,a)\n#define IDirect3DRMLight_GetRange(p)                      (p)->lpVtbl->GetRange(p)\n#define IDirect3DRMLight_GetUmbra(p)                      (p)->lpVtbl->GetUmbra(p)\n#define IDirect3DRMLight_GetPenumbra(p)                   (p)->lpVtbl->GetPenumbra(p)\n#define IDirect3DRMLight_GetConstantAttenuation(p)        (p)->lpVtbl->GetConstantAttenuation(p)\n#define IDirect3DRMLight_GetLinearAttenuation(p)          (p)->lpVtbl->GetLinearAttenuation(p)\n#define IDirect3DRMLight_GetQuadraticAttenuation(p)       (p)->lpVtbl->GetQuadraticAttenuation(p)\n#define IDirect3DRMLight_GetColor(p)                      (p)->lpVtbl->GetColor(p)\n#define IDirect3DRMLight_GetType(p)                       (p)->lpVtbl->GetType(p)\n#define IDirect3DRMLight_SetEnableFrame(p,a)              (p)->lpVtbl->SetEnableFrame(p,a)\n#define IDirect3DRMLight_GetEnableFrame(p,a)              (p)->lpVtbl->GetEnableFrame(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMLight_QueryInterface(p,a,b)            (p)->QueryInterface(a,b)\n#define IDirect3DRMLight_AddRef(p)                        (p)->AddRef()\n#define IDirect3DRMLight_Release(p)                       (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMLight_Clone(p,a,b,c)                   (p)->Clone(a,b,c)\n#define IDirect3DRMLight_AddDestroyCallback(p,a,b)        (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMLight_DeleteDestroyCallback(p,a,b)     (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMLight_SetAppData(p,a)                  (p)->SetAppData(a)\n#define IDirect3DRMLight_GetAppData(p)                    (p)->GetAppData()\n#define IDirect3DRMLight_SetName(p,a)                     (p)->SetName(a)\n#define IDirect3DRMLight_GetName(p,a,b)                   (p)->GetName(a,b)\n#define IDirect3DRMLight_GetClassName(p,a,b)              (p)->GetClassName(a,b)\n/*** IDirect3DRMLight methods ***/\n#define IDirect3DRMLight_SetType(p,a)                     (p)->SetType(a)\n#define IDirect3DRMLight_SetColor(p,a)                    (p)->SetColor(a)\n#define IDirect3DRMLight_SetColorRGB(p,a,b,c)             (p)->SetColorRGB(a,b,c)\n#define IDirect3DRMLight_SetRange(p,a)                    (p)->SetRange(a)\n#define IDirect3DRMLight_SetUmbra(p,a)                    (p)->SetUmbra(a)\n#define IDirect3DRMLight_SetPenumbra(p,a)                 (p)->SetPenumbra(a)\n#define IDirect3DRMLight_SetConstantAttenuation(p,a)      (p)->SetConstantAttenuation(a)\n#define IDirect3DRMLight_SetLinearAttenuation(p,a)        (p)->SetLinearAttenuation(a)\n#define IDirect3DRMLight_SetQuadraticAttenuation(p,a)     (p)->SetQuadraticAttenuation(a)\n#define IDirect3DRMLight_GetRange(p)                      (p)->GetRange()\n#define IDirect3DRMLight_GetUmbra(p)                      (p)->GetUmbra()\n#define IDirect3DRMLight_GetPenumbra(p)                   (p)->GetPenumbra()\n#define IDirect3DRMLight_GetConstantAttenuation(p)        (p)->GetConstantAttenuation()\n#define IDirect3DRMLight_GetLinearAttenuation(p)          (p)->GetLinearAttenuation()\n#define IDirect3DRMLight_GetQuadraticAttenuation(p)       (p)->GetQuadraticAttenuation()\n#define IDirect3DRMLight_GetColor(p)                      (p)->GetColor()\n#define IDirect3DRMLight_GetType(p)                       (p)->GetType()\n#define IDirect3DRMLight_SetEnableFrame(p,a)              (p)->SetEnableFrame(a)\n#define IDirect3DRMLight_GetEnableFrame(p,a)              (p)->GetEnableFrame(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMTexture interface\n */\n#define INTERFACE IDirect3DRMTexture\nDECLARE_INTERFACE_(IDirect3DRMTexture, IDirect3DRMVisual)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMTexture methods ***/\n    STDMETHOD(InitFromFile)(THIS_ const char *filename) PURE;\n    STDMETHOD(InitFromSurface)(THIS_ IDirectDrawSurface *surface) PURE;\n    STDMETHOD(InitFromResource)(THIS_ HRSRC) PURE;\n    STDMETHOD(Changed)(THIS_ BOOL pixels, BOOL palette) PURE;\n    STDMETHOD(SetColors)(THIS_ DWORD) PURE;\n    STDMETHOD(SetShades)(THIS_ DWORD) PURE;\n    STDMETHOD(SetDecalSize)(THIS_ D3DVALUE width, D3DVALUE height) PURE;\n    STDMETHOD(SetDecalOrigin)(THIS_ LONG x, LONG y) PURE;\n    STDMETHOD(SetDecalScale)(THIS_ DWORD) PURE;\n    STDMETHOD(SetDecalTransparency)(THIS_ BOOL) PURE;\n    STDMETHOD(SetDecalTransparentColor)(THIS_ D3DCOLOR) PURE;\n    STDMETHOD(GetDecalSize)(THIS_ D3DVALUE *width_return, D3DVALUE *height_return) PURE;\n    STDMETHOD(GetDecalOrigin)(THIS_ LONG *x_return, LONG *y_return) PURE;\n    STDMETHOD_(D3DRMIMAGE *, GetImage)(THIS) PURE;\n    STDMETHOD_(DWORD, GetShades)(THIS) PURE;\n    STDMETHOD_(DWORD, GetColors)(THIS) PURE;\n    STDMETHOD_(DWORD, GetDecalScale)(THIS) PURE;\n    STDMETHOD_(BOOL, GetDecalTransparency)(THIS) PURE;\n    STDMETHOD_(D3DCOLOR, GetDecalTransparentColor)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMTexture_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMTexture_AddRef(p)                        (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMTexture_Release(p)                       (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMTexture_Clone(p,a,b,c)                   (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMTexture_AddDestroyCallback(p,a,b)        (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMTexture_DeleteDestroyCallback(p,a,b)     (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMTexture_SetAppData(p,a)                  (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMTexture_GetAppData(p)                    (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMTexture_SetName(p,a)                     (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMTexture_GetName(p,a,b)                   (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMTexture_GetClassName(p,a,b)              (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMTexture methods ***/\n#define IDirect3DRMTexture_InitFromFile(p,a)                (p)->lpVtbl->InitFromFile(p,a)\n#define IDirect3DRMTexture_InitFromSurface(p,a)             (p)->lpVtbl->InitFromSurface(p,a)\n#define IDirect3DRMTexture_InitFromResource(p,a)            (p)->lpVtbl->InitFromResource(p,a)\n#define IDirect3DRMTexture_Changed(p,a,b)                   (p)->lpVtbl->Changed(p,a,b)\n#define IDirect3DRMTexture_SetColors(p,a)                   (p)->lpVtbl->SetColors(p,a)\n#define IDirect3DRMTexture_SetShades(p,a)                   (p)->lpVtbl->SetShades(p,a)\n#define IDirect3DRMTexture_SetDecalSize(p,a,b)              (p)->lpVtbl->SetDecalSize(p,a,b)\n#define IDirect3DRMTexture_SetDecalOrigin(p,a,b)            (p)->lpVtbl->SetDecalOrigin(p,a,b)\n#define IDirect3DRMTexture_SetDecalScale(p,a)               (p)->lpVtbl->SetDecalScale(p,a)\n#define IDirect3DRMTexture_SetDecalTransparency(p,a)        (p)->lpVtbl->SetDecalTransparency(p,a)\n#define IDirect3DRMTexture_SetDecalTransparencyColor(p,a)   (p)->lpVtbl->SetDecalTransparentColor(p,a)\n#define IDirect3DRMTexture_GetDecalSize(p,a,b)              (p)->lpVtbl->GetDecalSize(p,a,b)\n#define IDirect3DRMTexture_GetDecalOrigin(p,a,b)            (p)->lpVtbl->GetDecalOrigin(p,a,b)\n#define IDirect3DRMTexture_GetImage(p)                      (p)->lpVtbl->GetImage(p)\n#define IDirect3DRMTexture_GetShades(p)                     (p)->lpVtbl->GetShades(p)\n#define IDirect3DRMTexture_GetColors(p)                     (p)->lpVtbl->GetColors(p)\n#define IDirect3DRMTexture_GetDecalScale(p)                 (p)->lpVtbl->GetDecalScale(p)\n#define IDirect3DRMTexture_GetDecalTransparency(p)          (p)->lpVtbl->GetDecalTransparency(p)\n#define IDirect3DRMTexture_GetDecalTransparencyColor(p)     (p)->lpVtbl->GetDecalTransparencyColor(p)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMTexture_QueryInterface(p,a,b)            (p)->QueryInterface(a,b)\n#define IDirect3DRMTexture_AddRef(p)                        (p)->AddRef()\n#define IDirect3DRMTexture_Release(p)                       (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMTexture_Clone(p,a,b,c)                   (p)->Clone(a,b,c)\n#define IDirect3DRMTexture_AddDestroyCallback(p,a,b)        (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMTexture_DeleteDestroyCallback(p,a,b)     (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMTexture_SetAppData(p,a)                  (p)->SetAppData(a)\n#define IDirect3DRMTexture_GetAppData(p)                    (p)->GetAppData()\n#define IDirect3DRMTexture_SetName(p,a)                     (p)->SetName(a)\n#define IDirect3DRMTexture_GetName(p,a,b)                   (p)->GetName(a,b)\n#define IDirect3DRMTexture_GetClassName(p,a,b)              (p)->GetClassName(a,b)\n/*** IDirect3DRMTexture methods ***/\n#define IDirect3DRMTexture_InitFromFile(p,a)                (p)->InitFromFile(a)\n#define IDirect3DRMTexture_InitFromSurface(p,a)             (p)->InitFromSurface(a)\n#define IDirect3DRMTexture_InitFromResource(p,a)            (p)->InitFromResource(a)\n#define IDirect3DRMTexture_Changed(p,a,b)                   (p)->Changed(a,b)\n#define IDirect3DRMTexture_SetColors(p,a)                   (p)->SetColors(a)\n#define IDirect3DRMTexture_SetShades(p,a)                   (p)->SetShades(a)\n#define IDirect3DRMTexture_SetDecalSize(p,a,b)              (p)->SetDecalSize(a,b)\n#define IDirect3DRMTexture_SetDecalOrigin(p,a,b)            (p)->SetDecalOrigin(a,b)\n#define IDirect3DRMTexture_SetDecalScale(p,a)               (p)->SetDecalScale(a)\n#define IDirect3DRMTexture_SetDecalTransparency(p,a)        (p)->SetDecalTransparency(a)\n#define IDirect3DRMTexture_SetDecalTransparentColor(p,a)    (p)->SetDecalTransparentColor(a)\n#define IDirect3DRMTexture_GetDecalSize(p,a,b)              (p)->GetDecalSize(a,b)\n#define IDirect3DRMTexture_GetDecalOrigin(p,a,b)            (p)->GetDecalOrigin(a,b)\n#define IDirect3DRMTexture_GetImage(p)                      (p)->GetImage()\n#define IDirect3DRMTexture_GetShades(p)                     (p)->GetShades()\n#define IDirect3DRMTexture_GetColors(p)                     (p)->GetColors()\n#define IDirect3DRMTexture_GetDecalScale(p)                 (p)->GetDecalScale()\n#define IDirect3DRMTexture_GetDecalTransparency(p)          (p)->GetDecalTransparency()\n#define IDirect3DRMTexture_GetDecalTransparentColor(p)      (p)->GetDecalTransparentColor()\n#endif\n\n/*****************************************************************************\n * IDirect3DRMTexture2 interface\n */\n#define INTERFACE IDirect3DRMTexture2\nDECLARE_INTERFACE_(IDirect3DRMTexture2, IDirect3DRMTexture)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMTexture methods ***/\n    STDMETHOD(InitFromFile)(THIS_ const char *filename) PURE;\n    STDMETHOD(InitFromSurface)(THIS_ IDirectDrawSurface *surface) PURE;\n    STDMETHOD(InitFromResource)(THIS_ HRSRC) PURE;\n    STDMETHOD(Changed)(THIS_ BOOL pixels, BOOL palette) PURE;\n    STDMETHOD(SetColors)(THIS_ DWORD) PURE;\n    STDMETHOD(SetShades)(THIS_ DWORD) PURE;\n    STDMETHOD(SetDecalSize)(THIS_ D3DVALUE width, D3DVALUE height) PURE;\n    STDMETHOD(SetDecalOrigin)(THIS_ LONG x, LONG y) PURE;\n    STDMETHOD(SetDecalScale)(THIS_ DWORD) PURE;\n    STDMETHOD(SetDecalTransparency)(THIS_ BOOL) PURE;\n    STDMETHOD(SetDecalTransparentColor)(THIS_ D3DCOLOR) PURE;\n    STDMETHOD(GetDecalSize)(THIS_ D3DVALUE *width_return, D3DVALUE *height_return) PURE;\n    STDMETHOD(GetDecalOrigin)(THIS_ LONG *x_return, LONG *y_return) PURE;\n    STDMETHOD_(D3DRMIMAGE *, GetImage)(THIS) PURE;\n    STDMETHOD_(DWORD, GetShades)(THIS) PURE;\n    STDMETHOD_(DWORD, GetColors)(THIS) PURE;\n    STDMETHOD_(DWORD, GetDecalScale)(THIS) PURE;\n    STDMETHOD_(BOOL, GetDecalTransparency)(THIS) PURE;\n    STDMETHOD_(D3DCOLOR, GetDecalTransparentColor)(THIS) PURE;\n    /*** IDirect3DRMTexture2 methods ***/\n    STDMETHOD(InitFromImage)(THIS_ D3DRMIMAGE *image) PURE;\n    STDMETHOD(InitFromResource2)(THIS_ HMODULE module, const char *name, const char *type) PURE;\n    STDMETHOD(GenerateMIPMap)(THIS_ DWORD) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMTexture2_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMTexture2_AddRef(p)                        (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMTexture2_Release(p)                       (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMTexture2_Clone(p,a,b,c)                   (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMTexture2_AddDestroyCallback(p,a,b)        (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMTexture2_DeleteDestroyCallback(p,a,b)     (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMTexture2_SetAppData(p,a)                  (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMTexture2_GetAppData(p)                    (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMTexture2_SetName(p,a)                     (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMTexture2_GetName(p,a,b)                   (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMTexture2_GetClassName(p,a,b)              (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMTexture methods ***/\n#define IDirect3DRMTexture2_InitFromFile(p,a)                (p)->lpVtbl->InitFromFile(p,a)\n#define IDirect3DRMTexture2_InitFromSurface(p,a)             (p)->lpVtbl->InitFromSurface(p,a)\n#define IDirect3DRMTexture2_InitFromResource(p,a)            (p)->lpVtbl->InitFromResource(p,a)\n#define IDirect3DRMTexture2_Changed(p,a,b)                   (p)->lpVtbl->Changed(p,a,b)\n#define IDirect3DRMTexture2_SetColors(p,a)                   (p)->lpVtbl->SetColors(p,a)\n#define IDirect3DRMTexture2_SetShades(p,a)                   (p)->lpVtbl->SetShades(p,a)\n#define IDirect3DRMTexture2_SetDecalSize(p,a,b)              (p)->lpVtbl->SetDecalSize(p,a,b)\n#define IDirect3DRMTexture2_SetDecalOrigin(p,a,b)            (p)->lpVtbl->SetDecalOrigin(p,a,b)\n#define IDirect3DRMTexture2_SetDecalScale(p,a)               (p)->lpVtbl->SetDecalScale(p,a)\n#define IDirect3DRMTexture2_SetDecalTransparency(p,a)        (p)->lpVtbl->SetDecalTransparency(p,a)\n#define IDirect3DRMTexture2_SetDecalTransparencyColor(p,a)   (p)->lpVtbl->SetDecalTransparentColor(p,a)\n#define IDirect3DRMTexture2_GetDecalSize(p,a,b)              (p)->lpVtbl->GetDecalSize(p,a,b)\n#define IDirect3DRMTexture2_GetDecalOrigin(p,a,b)            (p)->lpVtbl->GetDecalOrigin(p,a,b)\n#define IDirect3DRMTexture2_GetImage(p)                      (p)->lpVtbl->GetImage(p)\n#define IDirect3DRMTexture2_GetShades(p)                     (p)->lpVtbl->GetShades(p)\n#define IDirect3DRMTexture2_GetColors(p)                     (p)->lpVtbl->GetColors(p)\n#define IDirect3DRMTexture2_GetDecalScale(p)                 (p)->lpVtbl->GetDecalScale(p)\n#define IDirect3DRMTexture2_GetDecalTransparency(p)          (p)->lpVtbl->GetDecalTransparency(p)\n#define IDirect3DRMTexture2_GetDecalTransparencyColor(p)     (p)->lpVtbl->GetDecalTransparencyColor(p)\n/*** IDirect3DRMTexture2 methods ***/\n#define IDirect3DRMTexture2_InitFromImage(p,a)               (p)->lpVtbl->InitFromImage(p,a)\n#define IDirect3DRMTexture2_InitFromResource2(p,a,b,c)       (p)->lpVtbl->InitFromResource2(p,a,b,c)\n#define IDirect3DRMTexture2_GenerateMIPMap(p,a)              (p)->lpVtbl->GenerateMIPMap(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMTexture2_QueryInterface(p,a,b)            (p)->QueryInterface(a,b)\n#define IDirect3DRMTexture2_AddRef(p)                        (p)->AddRef()\n#define IDirect3DRMTexture2_Release(p)                       (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMTexture2_Clone(p,a,b,c)                   (p)->Clone(a,b,c)\n#define IDirect3DRMTexture2_AddDestroyCallback(p,a,b)        (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMTexture2_DeleteDestroyCallback(p,a,b)     (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMTexture2_SetAppData(p,a)                  (p)->SetAppData(a)\n#define IDirect3DRMTexture2_GetAppData(p)                    (p)->GetAppData()\n#define IDirect3DRMTexture2_SetName(p,a)                     (p)->SetName(a)\n#define IDirect3DRMTexture2_GetName(p,a,b)                   (p)->GetName(a,b)\n#define IDirect3DRMTexture2_GetClassName(p,a,b)              (p)->GetClassName(a,b)\n/*** IDirect3DRMTexture methods ***/\n#define IDirect3DRMTexture2_InitFromFile(p,a)                (p)->InitFromFile(a)\n#define IDirect3DRMTexture2_InitFromSurface(p,a)             (p)->InitFromSurface(a)\n#define IDirect3DRMTexture2_InitFromResource(p,a)            (p)->InitFromResource(a)\n#define IDirect3DRMTexture2_Changed(p,a,b)                   (p)->Changed(a,b)\n#define IDirect3DRMTexture2_SetColors(p,a)                   (p)->SetColors(a)\n#define IDirect3DRMTexture2_SetShades(p,a)                   (p)->SetShades(a)\n#define IDirect3DRMTexture2_SetDecalSize(p,a,b)              (p)->SetDecalSize(a,b)\n#define IDirect3DRMTexture2_SetDecalOrigin(p,a,b)            (p)->SetDecalOrigin(a,b)\n#define IDirect3DRMTexture2_SetDecalScale(p,a)               (p)->SetDecalScale(a)\n#define IDirect3DRMTexture2_SetDecalTransparency(p,a)        (p)->SetDecalTransparency(a)\n#define IDirect3DRMTexture2_SetDecalTransparentColor(p,a)    (p)->SetDecalTransparentColor(a)\n#define IDirect3DRMTexture2_GetDecalSize(p,a,b)              (p)->GetDecalSize(a,b)\n#define IDirect3DRMTexture2_GetDecalOrigin(p,a,b)            (p)->GetDecalOrigin(a,b)\n#define IDirect3DRMTexture2_GetImage(p)                      (p)->GetImage()\n#define IDirect3DRMTexture2_GetShades(p)                     (p)->GetShades()\n#define IDirect3DRMTexture2_GetColors(p)                     (p)->GetColors()\n#define IDirect3DRMTexture2_GetDecalScale(p)                 (p)->GetDecalScale()\n#define IDirect3DRMTexture2_GetDecalTransparency(p)          (p)->GetDecalTransparency()\n#define IDirect3DRMTexture2_GetDecalTransparentColor(p)      (p)->GetDecalTransparentColor()\n/*** IDirect3DRMTexture2 methods ***/\n#define IDirect3DRMTexture2_InitFromImage(p,a)               (p)->InitFromImage(a)\n#define IDirect3DRMTexture2_InitFromResource2(p,a,b,c)       (p)->InitFromResource2(a,b,c)\n#define IDirect3DRMTexture2_GenerateMIPMap(p,a)              (p)->GenerateMIPMap(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMTexture3 interface\n */\n#define INTERFACE IDirect3DRMTexture3\nDECLARE_INTERFACE_(IDirect3DRMTexture3, IDirect3DRMVisual)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMTexture3 methods ***/\n    STDMETHOD(InitFromFile)(THIS_ const char *filename) PURE;\n    STDMETHOD(InitFromSurface)(THIS_ IDirectDrawSurface *surface) PURE;\n    STDMETHOD(InitFromResource)(THIS_ HRSRC) PURE;\n    STDMETHOD(Changed)(THIS_ DWORD flags, DWORD rect_count, RECT *rects) PURE;\n    STDMETHOD(SetColors)(THIS_ DWORD) PURE;\n    STDMETHOD(SetShades)(THIS_ DWORD) PURE;\n    STDMETHOD(SetDecalSize)(THIS_ D3DVALUE width, D3DVALUE height) PURE;\n    STDMETHOD(SetDecalOrigin)(THIS_ LONG x, LONG y) PURE;\n    STDMETHOD(SetDecalScale)(THIS_ DWORD) PURE;\n    STDMETHOD(SetDecalTransparency)(THIS_ BOOL) PURE;\n    STDMETHOD(SetDecalTransparentColor)(THIS_ D3DCOLOR) PURE;\n    STDMETHOD(GetDecalSize)(THIS_ D3DVALUE *width_return, D3DVALUE *height_return) PURE;\n    STDMETHOD(GetDecalOrigin)(THIS_ LONG *x_return, LONG *y_return) PURE;\n    STDMETHOD_(D3DRMIMAGE *, GetImage)(THIS) PURE;\n    STDMETHOD_(DWORD, GetShades)(THIS) PURE;\n    STDMETHOD_(DWORD, GetColors)(THIS) PURE;\n    STDMETHOD_(DWORD, GetDecalScale)(THIS) PURE;\n    STDMETHOD_(BOOL, GetDecalTransparency)(THIS) PURE;\n    STDMETHOD_(D3DCOLOR, GetDecalTransparentColor)(THIS) PURE;\n    STDMETHOD(InitFromImage)(THIS_ D3DRMIMAGE *image) PURE;\n    STDMETHOD(InitFromResource2)(THIS_ HMODULE module, const char *name, const char *type) PURE;\n    STDMETHOD(GenerateMIPMap)(THIS_ DWORD) PURE;\n    STDMETHOD(GetSurface)(THIS_ DWORD flags, IDirectDrawSurface **surface) PURE;\n    STDMETHOD(SetCacheOptions)(THIS_ LONG lImportance, DWORD dwFlags) PURE;\n    STDMETHOD(GetCacheOptions)(THIS_ LONG *importance, DWORD *flags) PURE;\n    STDMETHOD(SetDownsampleCallback)(THIS_ D3DRMDOWNSAMPLECALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetValidationCallback)(THIS_ D3DRMVALIDATIONCALLBACK cb, void *ctx) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMTexture3_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMTexture3_AddRef(p)                        (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMTexture3_Release(p)                       (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMTexture3_Clone(p,a,b,c)                   (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMTexture3_AddDestroyCallback(p,a,b)        (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMTexture3_DeleteDestroyCallback(p,a,b)     (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMTexture3_SetAppData(p,a)                  (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMTexture3_GetAppData(p)                    (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMTexture3_SetName(p,a)                     (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMTexture3_GetName(p,a,b)                   (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMTexture3_GetClassName(p,a,b)              (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMTexture3 methods ***/\n#define IDirect3DRMTexture3_InitFromFile(p,a)                (p)->lpVtbl->InitFromFile(p,a)\n#define IDirect3DRMTexture3_InitFromSurface(p,a)             (p)->lpVtbl->InitFromSurface(p,a)\n#define IDirect3DRMTexture3_InitFromResource(p,a)            (p)->lpVtbl->InitFromResource(p,a)\n#define IDirect3DRMTexture3_Changed(p,a,b,c)                 (p)->lpVtbl->Changed(p,a,b,c)\n#define IDirect3DRMTexture3_SetColors(p,a)                   (p)->lpVtbl->SetColors(p,a)\n#define IDirect3DRMTexture3_SetShades(p,a)                   (p)->lpVtbl->SetShades(p,a)\n#define IDirect3DRMTexture3_SetDecalSize(p,a,b)              (p)->lpVtbl->SetDecalSize(p,a,b)\n#define IDirect3DRMTexture3_SetDecalOrigin(p,a,b)            (p)->lpVtbl->SetDecalOrigin(p,a,b)\n#define IDirect3DRMTexture3_SetDecalScale(p,a)               (p)->lpVtbl->SetDecalScale(p,a)\n#define IDirect3DRMTexture3_SetDecalTransparency(p,a)        (p)->lpVtbl->SetDecalTransparency(p,a)\n#define IDirect3DRMTexture3_SetDecalTransparentColor(p,a)    (p)->lpVtbl->SetDecalTransparentColor(p,a)\n#define IDirect3DRMTexture3_GetDecalSize(p,a,b)              (p)->lpVtbl->GetDecalSize(p,a,b)\n#define IDirect3DRMTexture3_GetDecalOrigin(p,a,b)            (p)->lpVtbl->GetDecalOrigin(p,a,b)\n#define IDirect3DRMTexture3_GetImage(p)                      (p)->lpVtbl->GetImage(p)\n#define IDirect3DRMTexture3_GetShades(p)                     (p)->lpVtbl->GetShades(p)\n#define IDirect3DRMTexture3_GetColors(p)                     (p)->lpVtbl->GetColors(p)\n#define IDirect3DRMTexture3_GetDecalScale(p)                 (p)->lpVtbl->GetDecalScale(p)\n#define IDirect3DRMTexture3_GetDecalTransparency(p)          (p)->lpVtbl->GetDecalTransparency(p)\n#define IDirect3DRMTexture3_GetDecalTransparentColor(p)      (p)->lpVtbl->GetDecalTransparentColor(p)\n#define IDirect3DRMTexture3_InitFromImage(p,a)               (p)->lpVtbl->InitFromImage(p,a)\n#define IDirect3DRMTexture3_InitFromResource2(p,a,b,c)       (p)->lpVtbl->InitFromResource2(p,a,b,c)\n#define IDirect3DRMTexture3_GenerateMIPMap(p,a)              (p)->lpVtbl->GenerateMIPMap(p,a)\n#define IDirect3DRMTexture3_GetSurface(p,a,b)                (p)->lpVtbl->GetSurface(p,a,b)\n#define IDirect3DRMTexture3_SetCacheOptions(p,a,b)           (p)->lpVtbl->SetCacheOptions(p,a,b)\n#define IDirect3DRMTexture3_GetCacheOptions(p,a,b)           (p)->lpVtbl->GetCacheOptions(p,a,b)\n#define IDirect3DRMTexture3_SetDownsampleCallback(p,a,b)     (p)->lpVtbl->SetDownsampleCallback(p,a,b)\n#define IDirect3DRMTexture3_SetValidationCallback(p,a,b)     (p)->lpVtbl->SetValidationCallback(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMTexture3_QueryInterface(p,a,b)            (p)->QueryInterface(a,b)\n#define IDirect3DRMTexture3_AddRef(p)                        (p)->AddRef()\n#define IDirect3DRMTexture3_Release(p)                       (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMTexture3_Clone(p,a,b,c)                   (p)->Clone(a,b,c)\n#define IDirect3DRMTexture3_AddDestroyCallback(p,a,b)        (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMTexture3_DeleteDestroyCallback(p,a,b)     (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMTexture3_SetAppData(p,a)                  (p)->SetAppData(a)\n#define IDirect3DRMTexture3_GetAppData(p)                    (p)->GetAppData()\n#define IDirect3DRMTexture3_SetName(p,a)                     (p)->SetName(a)\n#define IDirect3DRMTexture3_GetName(p,a,b)                   (p)->GetName(a,b)\n#define IDirect3DRMTexture3_GetClassName(p,a,b)              (p)->GetClassName(a,b)\n/*** IDirect3DRMTexture3 methods ***/\n#define IDirect3DRMTexture3_InitFromFile(p,a)                (p)->InitFromFile(a)\n#define IDirect3DRMTexture3_InitFromSurface(p,a)             (p)->InitFromSurface(a)\n#define IDirect3DRMTexture3_InitFromResource(p,a)            (p)->InitFromResource(a)\n#define IDirect3DRMTexture3_Changed(p,a,b,c)                 (p)->Changed(a,b,c)\n#define IDirect3DRMTexture3_SetColors(p,a)                   (p)->SetColors(a)\n#define IDirect3DRMTexture3_SetShades(p,a)                   (p)->SetShades(a)\n#define IDirect3DRMTexture3_SetDecalSize(p,a,b)              (p)->SetDecalSize(a,b)\n#define IDirect3DRMTexture3_SetDecalOrigin(p,a,b)            (p)->SetDecalOrigin(a,b)\n#define IDirect3DRMTexture3_SetDecalScale(p,a)               (p)->SetDecalScale(a)\n#define IDirect3DRMTexture3_SetDecalTransparency(p,a)        (p)->SetDecalTransparency(a)\n#define IDirect3DRMTexture3_SetDecalTransparencyColor(p,a)   (p)->SetDecalTransparentColor(a)\n#define IDirect3DRMTexture3_GetDecalSize(p,a,b)              (p)->GetDecalSize(a,b)\n#define IDirect3DRMTexture3_GetDecalOrigin(p,a,b)            (p)->GetDecalOrigin(a,b)\n#define IDirect3DRMTexture3_GetImage(p)                      (p)->GetImage()\n#define IDirect3DRMTexture3_GetShades(p)                     (p)->GetShades()\n#define IDirect3DRMTexture3_GetColors(p)                     (p)->GetColors()\n#define IDirect3DRMTexture3_GetDecalScale(p)                 (p)->GetDecalScale()\n#define IDirect3DRMTexture3_GetDecalTransparency(p)          (p)->GetDecalTransparency()\n#define IDirect3DRMTexture3_GetDecalTransparencyColor(p)     (p)->GetDecalTransparencyColor()\n#define IDirect3DRMTexture3_InitFromImage(p,a)               (p)->InitFromImage(a)\n#define IDirect3DRMTexture3_InitFromResource2(p,a,b,c)       (p)->InitFromResource2(a,b,c)\n#define IDirect3DRMTexture3_GenerateMIPMap(p,a)              (p)->GenerateMIPMap(a)\n#define IDirect3DRMTexture3_GetSurface(p,a,b)                (p)->GetSurface(a,b)\n#define IDirect3DRMTexture3_SetCacheOptions(p,a,b)           (p)->SetCacheOptions(a,b)\n#define IDirect3DRMTexture3_GetCacheOptions(p,a,b)           (p)->GetCacheOptions(a,b)\n#define IDirect3DRMTexture3_SetDownsampleCallback(p,a,b)     (p)->SetDownsampleCallback(a,b)\n#define IDirect3DRMTexture3_SetValidationCallback(p,a,b)     (p)->SetValidationCallback(a,b)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMWrap interface\n */\n#define INTERFACE IDirect3DRMWrap\nDECLARE_INTERFACE_(IDirect3DRMWrap, IDirect3DRMObject)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMWrap methods ***/\n    STDMETHOD(Init)(THIS_ D3DRMWRAPTYPE type, IDirect3DRMFrame *reference, D3DVALUE ox, D3DVALUE oy, D3DVALUE oz,\n            D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz,\n            D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv) PURE;\n    STDMETHOD(Apply)(THIS_ IDirect3DRMObject *object) PURE;\n    STDMETHOD(ApplyRelative)(THIS_ IDirect3DRMFrame *frame, IDirect3DRMObject *object) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMWrap_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMWrap_AddRef(p)                               (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMWrap_Release(p)                              (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMWrap_Clone(p,a,b,c)                          (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMWrap_AddDestroyCallback(p,a,b)               (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMWrap_DeleteDestroyCallback(p,a,b)            (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMWrap_SetAppData(p,a)                         (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMWrap_GetAppData(p)                           (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMWrap_SetName(p,a)                            (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMWrap_GetName(p,a,b)                          (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMWrap_GetClassName(p,a,b)                     (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMWrap methods ***/\n#define IDirect3DRMWrap_Init(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o)   (p)->lpVtbl->Init(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o)\n#define IDirect3DRMWrap_Apply(p,a)                              (p)->lpVtbl->Apply(p,a)\n#define IDirect3DRMWrap_ApplyRelative(p,a,b)                    (p)->lpVtbl->ApplyRelative(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMWrap_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)\n#define IDirect3DRMWrap_AddRef(p)                               (p)->AddRef()\n#define IDirect3DRMWrap_Release(p)                              (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMWrap_Clone(p,a,b,c)                          (p)->Clone(a,b,c)\n#define IDirect3DRMWrap_AddDestroyCallback(p,a,b)               (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMWrap_DeleteDestroyCallback(p,a,b)            (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMWrap_SetAppData(p,a)                         (p)->SetAppData(a)\n#define IDirect3DRMWrap_GetAppData(p)                           (p)->GetAppData()\n#define IDirect3DRMWrap_SetName(p,a)                            (p)->SetName(a)\n#define IDirect3DRMWrap_GetName(p,a,b)                          (p)->GetName(a,b)\n#define IDirect3DRMWrap_GetClassName(p,a,b)                     (p)->GetClassName(a,b)\n/*** IDirect3DRMWrap methods ***/\n#define IDirect3DRMWrap_Init(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o)   (p)->Init(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o)\n#define IDirect3DRMWrap_Apply(p,a)                              (p)->Apply(p,a)\n#define IDirect3DRMWrap_ApplyRelative(p,a,b)                    (p)->ApplyRelative(p,a,b)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMMaterial interface\n */\n#define INTERFACE IDirect3DRMMaterial\nDECLARE_INTERFACE_(IDirect3DRMMaterial, IDirect3DRMObject)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMMaterial methods ***/\n    STDMETHOD(SetPower)(THIS_ D3DVALUE power) PURE;\n    STDMETHOD(SetSpecular)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE;\n    STDMETHOD(SetEmissive)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE;\n    STDMETHOD_(D3DVALUE, GetPower)(THIS) PURE;\n    STDMETHOD(GetSpecular)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE;\n    STDMETHOD(GetEmissive)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMMaterial_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMMaterial_AddRef(p)                               (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMMaterial_Release(p)                              (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMMaterial_Clone(p,a,b,c)                          (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMMaterial_AddDestroyCallback(p,a,b)               (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMMaterial_DeleteDestroyCallback(p,a,b)            (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMMaterial_SetAppData(p,a)                         (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMMaterial_GetAppData(p)                           (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMMaterial_SetName(p,a)                            (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMMaterial_GetName(p,a,b)                          (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMMaterial_GetClassName(p,a,b)                     (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMMaterial methods ***/\n#define IDirect3DRMMaterial_SetPower(p,a)                           (p)->lpVtbl->SetPower(p,a)\n#define IDirect3DRMMaterial_SetSpecular(p,a,b,c)                    (p)->lpVtbl->SetSpecular(p,a,b,c)\n#define IDirect3DRMMaterial_SetEmissive(p,a,b,c)                    (p)->lpVtbl->SetEmissive(p,a,b,c)\n#define IDirect3DRMMaterial_GetPower(p)                             (p)->lpVtbl->GetPower(p)\n#define IDirect3DRMMaterial_GetSpecular(p,a,b,c)                    (p)->lpVtbl->GetSpecular(p,a,b,c)\n#define IDirect3DRMMaterial_GetEmissive(p,a,b,c)                    (p)->lpVtbl->GetEmissive(p,a,b,c)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMMaterial_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)\n#define IDirect3DRMMaterial_AddRef(p)                               (p)->AddRef()\n#define IDirect3DRMMaterial_Release(p)                              (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMMaterial_Clone(p,a,b,c)                          (p)->Clone(a,b,c)\n#define IDirect3DRMMaterial_AddDestroyCallback(p,a,b)               (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMMaterial_DeleteDestroyCallback(p,a,b)            (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMMaterial_SetAppData(p,a)                         (p)->SetAppData(a)\n#define IDirect3DRMMaterial_GetAppData(p)                           (p)->GetAppData()\n#define IDirect3DRMMaterial_SetName(p,a)                            (p)->SetName(a)\n#define IDirect3DRMMaterial_GetName(p,a,b)                          (p)->GetName(a,b)\n#define IDirect3DRMMaterial_GetClassName(p,a,b)                     (p)->GetClassName(a,b)\n/*** IDirect3DRMMaterial methods ***/\n#define IDirect3DRMMaterial_SetPower(p,a)                           (p)->SetPower(a)\n#define IDirect3DRMMaterial_SetSpecular(p,a,b,c)                    (p)->SetSpecular(a,b,c)\n#define IDirect3DRMMaterial_SetEmissive(p,a,b,c)                    (p)->SetEmissive(a,b,c)\n#define IDirect3DRMMaterial_GetPower(p)                             (p)->GetPower()\n#define IDirect3DRMMaterial_GetSpecular(p,a,b,c)                    (p)->GetSpecular(a,b,c)\n#define IDirect3DRMMaterial_GetEmissive(p,a,b,c)                    (p)->GetEmissive(a,b,c)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMMaterial2 interface\n */\n#define INTERFACE IDirect3DRMMaterial2\nDECLARE_INTERFACE_(IDirect3DRMMaterial2, IDirect3DRMObject)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMMaterial2 methods ***/\n    STDMETHOD(SetPower)(THIS_ D3DVALUE power) PURE;\n    STDMETHOD(SetSpecular)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE;\n    STDMETHOD(SetEmissive)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE;\n    STDMETHOD_(D3DVALUE, GetPower)(THIS) PURE;\n    STDMETHOD(GetSpecular)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE;\n    STDMETHOD(GetEmissive)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE;\n    STDMETHOD(GetAmbient)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE;\n    STDMETHOD(SetAmbient)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMMaterial2_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMMaterial2_AddRef(p)                               (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMMaterial2_Release(p)                              (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMMaterial2_Clone(p,a,b,c)                          (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMMaterial2_AddDestroyCallback(p,a,b)               (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMMaterial2_DeleteDestroyCallback(p,a,b)            (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMMaterial2_SetAppData(p,a)                         (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMMaterial2_GetAppData(p)                           (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMMaterial2_SetName(p,a)                            (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMMaterial2_GetName(p,a,b)                          (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMMaterial2_GetClassName(p,a,b)                     (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMMaterial2 methods ***/\n#define IDirect3DRMMaterial2_SetPower(p,a)                           (p)->lpVtbl->SetPower(p,a)\n#define IDirect3DRMMaterial2_SetSpecular(p,a,b,c)                    (p)->lpVtbl->SetSpecular(p,a,b,c)\n#define IDirect3DRMMaterial2_SetEmissive(p,a,b,c)                    (p)->lpVtbl->SetEmissive(p,a,b,c)\n#define IDirect3DRMMaterial2_GetPower(p)                             (p)->lpVtbl->GetPower(p)\n#define IDirect3DRMMaterial2_GetSpecular(p,a,b,c)                    (p)->lpVtbl->GetSpecular(p,a,b,c)\n#define IDirect3DRMMaterial2_GetEmissive(p,a,b,c)                    (p)->lpVtbl->GetEmissive(p,a,b,c)\n#define IDirect3DRMMaterial2_SetAmbient(p,a,b,c)                     (p)->lpVtbl->SetAmbient(p,a,b,c)\n#define IDirect3DRMMaterial2_GetAmbient(p,a,b,c)                     (p)->lpVtbl->GetAmbient(p,a,b,c)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMMaterial2_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)\n#define IDirect3DRMMaterial2_AddRef(p)                               (p)->AddRef()\n#define IDirect3DRMMaterial2_Release(p)                              (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMMaterial2_Clone(p,a,b,c)                          (p)->Clone(a,b,c)\n#define IDirect3DRMMaterial2_AddDestroyCallback(p,a,b)               (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMMaterial2_DeleteDestroyCallback(p,a,b)            (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMMaterial2_SetAppData(p,a)                         (p)->SetAppData(a)\n#define IDirect3DRMMaterial2_GetAppData(p)                           (p)->GetAppData()\n#define IDirect3DRMMaterial2_SetName(p,a)                            (p)->SetName(a)\n#define IDirect3DRMMaterial2_GetName(p,a,b)                          (p)->GetName(a,b)\n#define IDirect3DRMMaterial2_GetClassName(p,a,b)                     (p)->GetClassName(a,b)\n/*** IDirect3DRMMaterial2 methods ***/\n#define IDirect3DRMMaterial2_SetPower(p,a)                           (p)->SetPower(a)\n#define IDirect3DRMMaterial2_SetSpecular(p,a,b,c)                    (p)->SetSpecular(a,b,c)\n#define IDirect3DRMMaterial2_SetEmissive(p,a,b,c)                    (p)->SetEmissive(a,b,c)\n#define IDirect3DRMMaterial2_GetPower(p)                             (p)->GetPower()\n#define IDirect3DRMMaterial2_GetSpecular(p,a,b,c)                    (p)->GetSpecular(a,b,c)\n#define IDirect3DRMMaterial2_GetEmissive(p,a,b,c)                    (p)->GetEmissive(a,b,c)\n#define IDirect3DRMMaterial2_SetAmbient(p,a,b,c)                     (p)->SetAmbient(a,b,c)\n#define IDirect3DRMMaterial2_GetAmbient(p,a,b,c)                     (p)->GetAmbient(a,b,c)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMAnimation interface\n */\n#define INTERFACE IDirect3DRMAnimation\nDECLARE_INTERFACE_(IDirect3DRMAnimation, IDirect3DRMObject)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMAnimation methods ***/\n    STDMETHOD(SetOptions)(THIS_ D3DRMANIMATIONOPTIONS flags) PURE;\n    STDMETHOD(AddRotateKey)(THIS_ D3DVALUE time, D3DRMQUATERNION *q) PURE;\n    STDMETHOD(AddPositionKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;\n    STDMETHOD(AddScaleKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;\n    STDMETHOD(DeleteKey)(THIS_ D3DVALUE time) PURE;\n    STDMETHOD(SetFrame)(THIS_ IDirect3DRMFrame *frame) PURE;\n    STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE;\n    STDMETHOD_(D3DRMANIMATIONOPTIONS, GetOptions)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMAnimation_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMAnimation_AddRef(p)                               (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMAnimation_Release(p)                              (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMAnimation_Clone(p,a,b,c)                          (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMAnimation_AddDestroyCallback(p,a,b)               (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMAnimation_DeleteDestroyCallback(p,a,b)            (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMAnimation_SetAppData(p,a)                         (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMAnimation_GetAppData(p)                           (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMAnimation_SetName(p,a)                            (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMAnimation_GetName(p,a,b)                          (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMAnimation_GetClassName(p,a,b)                     (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMAnimation methods ***/\n#define IDirect3DRMAnimation_SetOptions(p,a)                         (p)->lpVtbl->SetOptions(p,a)\n#define IDirect3DRMAnimation_AddRotateKey(p,a,b)                     (p)->lpVtbl->AddRotateKey(p,a,b)\n#define IDirect3DRMAnimation_AddPositionKey(p,a,b,c,d)               (p)->lpVtbl->AddPositionKey(p,a,b,c,d)\n#define IDirect3DRMAnimation_AddScaleKey(p,a,b,c,d)                  (p)->lpVtbl->AddScaleKey(p,a,b,c,d)\n#define IDirect3DRMAnimation_DeleteKey(p,a)                          (p)->lpVtbl->DeleteKey(p,a)\n#define IDirect3DRMAnimation_SetFrame(p,a)                           (p)->lpVtbl->SetFrame(p,a)\n#define IDirect3DRMAnimation_SetTime(p,a)                            (p)->lpVtbl->SetTime(p,a)\n#define IDirect3DRMAnimation_GetOptions(p)                           (p)->lpVtbl->GetOptions(p)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMAnimation_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)\n#define IDirect3DRMAnimation_AddRef(p)                               (p)->AddRef()\n#define IDirect3DRMAnimation_Release(p)                              (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMAnimation_Clone(p,a,b,c)                          (p)->Clone(a,b,c)\n#define IDirect3DRMAnimation_AddDestroyCallback(p,a,b)               (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMAnimation_DeleteDestroyCallback(p,a,b)            (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMAnimation_SetAppData(p,a)                         (p)->SetAppData(a)\n#define IDirect3DRMAnimation_GetAppData(p)                           (p)->GetAppData()\n#define IDirect3DRMAnimation_SetName(p,a)                            (p)->SetName(a)\n#define IDirect3DRMAnimation_GetName(p,a,b)                          (p)->GetName(a,b)\n#define IDirect3DRMAnimation_GetClassName(p,a,b)                     (p)->GetClassName(a,b)\n/*** IDirect3DRMAnimation methods ***/\n#define IDirect3DRMAnimation_SetOptions(p,a)                         (p)->SetOptions(a)\n#define IDirect3DRMAnimation_AddRotateKey(p,a,b)                     (p)->AddRotateKey(a,b)\n#define IDirect3DRMAnimation_AddPositionKey(p,a,b,c,d)               (p)->AddPositionKey(a,b,c,d)\n#define IDirect3DRMAnimation_AddScaleKey(p,a,b,c,d)                  (p)->AddScaleKey(a,b,c,d)\n#define IDirect3DRMAnimation_DeleteKey(p,a)                          (p)->DeleteKey(a)\n#define IDirect3DRMAnimation_SetFrame(p,a)                           (p)->SetFrame(a)\n#define IDirect3DRMAnimation_SetTime(p,a)                            (p)->SetTime(a)\n#define IDirect3DRMAnimation_GetOptions(p)                           (p)->GetOptions()\n#endif\n\n/*****************************************************************************\n * IDirect3DRMAnimation2 interface\n */\n#define INTERFACE IDirect3DRMAnimation2\nDECLARE_INTERFACE_(IDirect3DRMAnimation2, IDirect3DRMObject)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMAnimation2 methods ***/\n    STDMETHOD(SetOptions)(THIS_ D3DRMANIMATIONOPTIONS flags) PURE;\n    STDMETHOD(AddRotateKey)(THIS_ D3DVALUE time, D3DRMQUATERNION *q) PURE;\n    STDMETHOD(AddPositionKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;\n    STDMETHOD(AddScaleKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;\n    STDMETHOD(DeleteKey)(THIS_ D3DVALUE time) PURE;\n    STDMETHOD(SetFrame)(THIS_ IDirect3DRMFrame3 *frame) PURE;\n    STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE;\n    STDMETHOD_(D3DRMANIMATIONOPTIONS, GetOptions)(THIS) PURE;\n    STDMETHOD(GetFrame)(THIS_ IDirect3DRMFrame3 **frame) PURE;\n    STDMETHOD(DeleteKeyByID)(THIS_ DWORD dwID) PURE;\n    STDMETHOD(AddKey)(THIS_ D3DRMANIMATIONKEY *key) PURE;\n    STDMETHOD(ModifyKey)(THIS_ D3DRMANIMATIONKEY *key) PURE;\n    STDMETHOD(GetKeys)(THIS_ D3DVALUE time_min, D3DVALUE time_max, DWORD *key_count, D3DRMANIMATIONKEY *keys);\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMAnimation2_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMAnimation2_AddRef(p)                               (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMAnimation2_Release(p)                              (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMAnimation2_Clone(p,a,b,c)                          (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMAnimation2_AddDestroyCallback(p,a,b)               (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMAnimation2_DeleteDestroyCallback(p,a,b)            (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMAnimation2_SetAppData(p,a)                         (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMAnimation2_GetAppData(p)                           (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMAnimation2_SetName(p,a)                            (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMAnimation2_GetName(p,a,b)                          (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMAnimation2_GetClassName(p,a,b)                     (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMAnimation2 methods ***/\n#define IDirect3DRMAnimation2_SetOptions(p,a)                         (p)->lpVtbl->SetOptions(p,a)\n#define IDirect3DRMAnimation2_AddRotateKey(p,a,b)                     (p)->lpVtbl->AddRotateKey(p,a,b)\n#define IDirect3DRMAnimation2_AddPositionKey(p,a,b,c,d)               (p)->lpVtbl->AddPositionKey(p,a,b,c,d)\n#define IDirect3DRMAnimation2_AddScaleKey(p,a,b,c,d)                  (p)->lpVtbl->AddScaleKey(p,a,b,c,d)\n#define IDirect3DRMAnimation2_DeleteKey(p,a)                          (p)->lpVtbl->DeleteKey(p,a)\n#define IDirect3DRMAnimation2_SetFrame(p,a)                           (p)->lpVtbl->SetFrame(p,a)\n#define IDirect3DRMAnimation2_SetTime(p,a)                            (p)->lpVtbl->SetTime(p,a)\n#define IDirect3DRMAnimation2_GetOptions(p)                           (p)->lpVtbl->GetOptions(p)\n#define IDirect3DRMAnimation2_GetFrame(p,a)                           (p)->lpVtbl->GetFrame(p,a)\n#define IDirect3DRMAnimation2_DeleteKeyByID(p,a)                      (p)->lpVtbl->DeleteKeyByID(p,a)\n#define IDirect3DRMAnimation2_AddKey(p,a)                             (p)->lpVtbl->AddKey(p,a)\n#define IDirect3DRMAnimation2_ModifyKey(p,a)                          (p)->lpVtbl->ModifyKey(p,a)\n#define IDirect3DRMAnimation2_GetKeys(p,a,b,c,d)                      (p)->lpVtbl->GetKeys(p,a,b,c,d)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMAnimation2_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)\n#define IDirect3DRMAnimation2_AddRef(p)                               (p)->AddRef()\n#define IDirect3DRMAnimation2_Release(p)                              (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMAnimation2_Clone(p,a,b,c)                          (p)->Clone(a,b,c)\n#define IDirect3DRMAnimation2_AddDestroyCallback(p,a,b)               (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMAnimation2_DeleteDestroyCallback(p,a,b)            (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMAnimation2_SetAppData(p,a)                         (p)->SetAppData(a)\n#define IDirect3DRMAnimation2_GetAppData(p)                           (p)->GetAppData()\n#define IDirect3DRMAnimation2_SetName(p,a)                            (p)->SetName(a)\n#define IDirect3DRMAnimation2_GetName(p,a,b)                          (p)->GetName(a,b)\n#define IDirect3DRMAnimation2_GetClassName(p,a,b)                     (p)->GetClassName(a,b)\n/*** IDirect3DRMAnimation2 methods ***/\n#define IDirect3DRMAnimation2_SetOptions(p,a)                         (p)->SetOptions(a)\n#define IDirect3DRMAnimation2_AddRotateKey(p,a,b)                     (p)->AddRotateKey(a,b)\n#define IDirect3DRMAnimation2_AddPositionKey(p,a,b,c,d)               (p)->AddPositionKey(a,b,c,d)\n#define IDirect3DRMAnimation2_AddScaleKey(p,a,b,c,d)                  (p)->AddScaleKey(a,b,c,d)\n#define IDirect3DRMAnimation2_DeleteKey(p,a)                          (p)->DeleteKey(a)\n#define IDirect3DRMAnimation2_SetFrame(p,a)                           (p)->SetFrame(a)\n#define IDirect3DRMAnimation2_SetTime(p,a)                            (p)->SetTime(a)\n#define IDirect3DRMAnimation2_GetOptions(p)                           (p)->GetOptions()\n#define IDirect3DRMAnimation2_GetFrame(p,a)                           (p)->GetFrame(a)\n#define IDirect3DRMAnimation2_DeleteKeyByID(p,a)                      (p)->DeleteKeyByID(a)\n#define IDirect3DRMAnimation2_AddKey(p,a)                             (p)->AddKey(a)\n#define IDirect3DRMAnimation2_ModifyKey(p,a)                          (p)->ModifyKey(a)\n#define IDirect3DRMAnimation2_GetKeys(p,a,b,c,d)                      (p)->GetKeys(a,b,c,d)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMAnimationSet interface\n */\n#define INTERFACE IDirect3DRMAnimationSet\nDECLARE_INTERFACE_(IDirect3DRMAnimationSet, IDirect3DRMObject)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMAnimationSet methods ***/\n    STDMETHOD(AddAnimation)(THIS_ IDirect3DRMAnimation *animation) PURE;\n    STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags,\n            D3DRMLOADTEXTURECALLBACK cb, void *ctx, IDirect3DRMFrame *parent)PURE;\n    STDMETHOD(DeleteAnimation)(THIS_ IDirect3DRMAnimation *animation) PURE;\n    STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMAnimationSet_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMAnimationSet_AddRef(p)                               (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMAnimationSet_Release(p)                              (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMAnimationSet_Clone(p,a,b,c)                          (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMAnimationSet_AddDestroyCallback(p,a,b)               (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMAnimationSet_DeleteDestroyCallback(p,a,b)            (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMAnimationSet_SetAppData(p,a)                         (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMAnimationSet_GetAppData(p)                           (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMAnimationSet_SetName(p,a)                            (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMAnimationSet_GetName(p,a,b)                          (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMAnimationSet_GetClassName(p,a,b)                     (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMAnimationSet methods ***/\n#define IDirect3DRMAnimationSet_AddAnimation(p,a)                       (p)->lpVtbl->AddAnimation(p,a)\n#define IDirect3DRMAnimationSet_Load(p,a,b,c,d,e,f)                     (p)->lpVtbl->Load(p,a,b,c,d,e,f)\n#define IDirect3DRMAnimationSet_DeleteAnimation(p,a)                    (p)->lpVtbl->DeleteAnimation(p,a)\n#define IDirect3DRMAnimationSet_SetTime(p,a)                            (p)->lpVtbl->SetTime(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMAnimationSet_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)\n#define IDirect3DRMAnimationSet_AddRef(p)                               (p)->AddRef()\n#define IDirect3DRMAnimationSet_Release(p)                              (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMAnimationSet_Clone(p,a,b,c)                          (p)->Clone(a,b,c)\n#define IDirect3DRMAnimationSet_AddDestroyCallback(p,a,b)               (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMAnimationSet_DeleteDestroyCallback(p,a,b)            (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMAnimationSet_SetAppData(p,a)                         (p)->SetAppData(a)\n#define IDirect3DRMAnimationSet_GetAppData(p)                           (p)->GetAppData()\n#define IDirect3DRMAnimationSet_SetName(p,a)                            (p)->SetName(a)\n#define IDirect3DRMAnimationSet_GetName(p,a,b)                          (p)->GetName(a,b)\n#define IDirect3DRMAnimationSet_GetClassName(p,a,b)                     (p)->GetClassName(a,b)\n/*** IDirect3DRMAnimationSet methods ***/\n#define IDirect3DRMAnimationSet_AddAnimation(p,a)                       (p)->AddAnimation(a)\n#define IDirect3DRMAnimationSet_Load(p,a,b,c,d,e,f)                     (p)->Load(a,b,c,d,e,f)\n#define IDirect3DRMAnimationSet_DeleteAnimation(p,a)                    (p)->DeleteAnimation(a)\n#define IDirect3DRMAnimationSet_SetTime(p,a)                            (p)->SetTime(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMAnimationSet2 interface\n */\n#define INTERFACE IDirect3DRMAnimationSet2\nDECLARE_INTERFACE_(IDirect3DRMAnimationSet2, IDirect3DRMObject)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMAnimationSet2 methods ***/\n    STDMETHOD(AddAnimation)(THIS_ IDirect3DRMAnimation2 *animation) PURE;\n    STDMETHOD(Load)(THIS_ void *source, void *object_id, D3DRMLOADOPTIONS flags,\n            D3DRMLOADTEXTURE3CALLBACK cb, void *ctx, IDirect3DRMFrame3 *parent_frame)PURE;\n    STDMETHOD(DeleteAnimation)(THIS_ IDirect3DRMAnimation2 *animation) PURE;\n    STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE;\n    STDMETHOD(GetAnimations)(THIS_ struct IDirect3DRMAnimationArray **array) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMAnimationSet2_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMAnimationSet2_AddRef(p)                               (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMAnimationSet2_Release(p)                              (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMAnimationSet2_Clone(p,a,b,c)                          (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMAnimationSet2_AddDestroyCallback(p,a,b)               (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMAnimationSet2_DeleteDestroyCallback(p,a,b)            (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMAnimationSet2_SetAppData(p,a)                         (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMAnimationSet2_GetAppData(p)                           (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMAnimationSet2_SetName(p,a)                            (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMAnimationSet2_GetName(p,a,b)                          (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMAnimationSet2_GetClassName(p,a,b)                     (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMAnimationSet2 methods ***/\n#define IDirect3DRMAnimationSet2_AddAnimation(p,a)                       (p)->lpVtbl->AddAnimation(p,a)\n#define IDirect3DRMAnimationSet2_Load(p,a,b,c,d,e,f)                     (p)->lpVtbl->Load(p,a,b,c,d,e,f)\n#define IDirect3DRMAnimationSet2_DeleteAnimation(p,a)                    (p)->lpVtbl->DeleteAnimation(p,a)\n#define IDirect3DRMAnimationSet2_SetTime(p,a)                            (p)->lpVtbl->SetTime(p,a)\n#define IDirect3DRMAnimationSet2_GetAnimations(p,a)                      (p)->lpVtbl->GetAnimations(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMAnimationSet2_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)\n#define IDirect3DRMAnimationSet2_AddRef(p)                               (p)->AddRef()\n#define IDirect3DRMAnimationSet2_Release(p)                              (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMAnimationSet2_Clone(p,a,b,c)                          (p)->Clone(a,b,c)\n#define IDirect3DRMAnimationSet2_AddDestroyCallback(p,a,b)               (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMAnimationSet2_DeleteDestroyCallback(p,a,b)            (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMAnimationSet2_SetAppData(p,a)                         (p)->SetAppData(a)\n#define IDirect3DRMAnimationSet2_GetAppData(p)                           (p)->GetAppData()\n#define IDirect3DRMAnimationSet2_SetName(p,a)                            (p)->SetName(a)\n#define IDirect3DRMAnimationSet2_GetName(p,a,b)                          (p)->GetName(a,b)\n#define IDirect3DRMAnimationSet2_GetClassName(p,a,b)                     (p)->GetClassName(a,b)\n/*** IDirect3DRMAnimationSet2 methods ***/\n#define IDirect3DRMAnimationSet2_AddAnimation(p,a)                       (p)->AddAnimation(a)\n#define IDirect3DRMAnimationSet2_Load(p,a,b,c,d,e,f)                     (p)->Load(a,b,c,d,e,f)\n#define IDirect3DRMAnimationSet2_DeleteAnimation(p,a)                    (p)->DeleteAnimation(a)\n#define IDirect3DRMAnimationSet2_SetTime(p,a)                            (p)->SetTime(a)\n#define IDirect3DRMAnimationSet2_GetAnimations(p,a)                      (p)->GetAnimations(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMUserVisual interface\n */\n#define INTERFACE IDirect3DRMUserVisual\nDECLARE_INTERFACE_(IDirect3DRMUserVisual, IDirect3DRMVisual)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMUserVisual methods ***/\n    STDMETHOD(Init)(THIS_ D3DRMUSERVISUALCALLBACK fn, void *arg) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMUserVisual_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMUserVisual_AddRef(p)                               (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMUserVisual_Release(p)                              (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMUserVisual_Clone(p,a,b,c)                          (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMUserVisual_AddDestroyCallback(p,a,b)               (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMUserVisual_DeleteDestroyCallback(p,a,b)            (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMUserVisual_SetAppData(p,a)                         (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMUserVisual_GetAppData(p)                           (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMUserVisual_SetName(p,a)                            (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMUserVisual_GetName(p,a,b)                          (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMUserVisual_GetClassName(p,a,b)                     (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMUserVisual methods ***/\n#define IDirect3DRMUserVisual_Init(p,a,b)                             (p)->lpVtbl->Init(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMUserVisual_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)\n#define IDirect3DRMUserVisual_AddRef(p)                               (p)->AddRef()\n#define IDirect3DRMUserVisual_Release(p)                              (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMUserVisual_Clone(p,a,b,c)                          (p)->Clone(a,b,c)\n#define IDirect3DRMUserVisual_AddDestroyCallback(p,a,b)               (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMUserVisual_DeleteDestroyCallback(p,a,b)            (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMUserVisual_SetAppData(p,a)                         (p)->SetAppData(a)\n#define IDirect3DRMUserVisual_GetAppData(p)                           (p)->GetAppData()\n#define IDirect3DRMUserVisual_SetName(p,a)                            (p)->SetName(a)\n#define IDirect3DRMUserVisual_GetName(p,a,b)                          (p)->GetName(a,b)\n#define IDirect3DRMUserVisual_GetClassName(p,a,b)                     (p)->GetClassName(a,b)\n/*** IDirect3DRMUserVisual methods ***/\n#define IDirect3DRMUserVisual_Init(p,a,b)                             (p)->Init(a,b)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMArray interface\n */\n#define INTERFACE IDirect3DRMArray\nDECLARE_INTERFACE_(IDirect3DRMArray, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMArray methods ***/\n    STDMETHOD_(DWORD, GetSize)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMArray_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMArray_AddRef(p)                               (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMArray_Release(p)                              (p)->lpVtbl->Release(p)\n/*** IDirect3DRMArray methods ***/\n#define IDirect3DRMArray_GetSize(p)                              (p)->lpVtbl->GetSize(p)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMArray_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)\n#define IDirect3DRMArray_AddRef(p)                               (p)->AddRef()\n#define IDirect3DRMArray_Release(p)                              (p)->Release()\n/*** IDirect3DRMArray methods ***/\n#define IDirect3DRMArray_GetSize(p)                              (p)->GetSize()\n#endif\n\n/*****************************************************************************\n * IDirect3DRMObjectArray interface\n */\n#define INTERFACE IDirect3DRMObjectArray\nDECLARE_INTERFACE_(IDirect3DRMObjectArray, IDirect3DRMArray)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMArray methods ***/\n    STDMETHOD_(DWORD, GetSize)(THIS) PURE;\n    /*** IDirect3DRMObjectArray methods ***/\n    STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMObject **element) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMObjectArray_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMObjectArray_AddRef(p)                               (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMObjectArray_Release(p)                              (p)->lpVtbl->Release(p)\n/*** IDirect3DRMArray methods ***/\n#define IDirect3DRMObjectArray_GetSize(p)                              (p)->lpVtbl->GetSize(p)\n/*** IDirect3DRMObjectArray methods ***/\n#define IDirect3DRMObjectArray_GetElement(p,a,b)                       (p)->lpVtbl->GetElement(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMObjectArray_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)\n#define IDirect3DRMObjectArray_AddRef(p)                               (p)->AddRef()\n#define IDirect3DRMObjectArray_Release(p)                              (p)->Release()\n/*** IDirect3DRMArray methods ***/\n#define IDirect3DRMObjectArray_GetSize(p)                              (p)->GetSize()\n/*** IDirect3DRMObjectArray methods ***/\n#define IDirect3DRMObjectArray_GetElement(p,a,b)                       (p)->GetElement(a,b)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMDeviceArray interface\n */\n#define INTERFACE IDirect3DRMDeviceArray\nDECLARE_INTERFACE_(IDirect3DRMDeviceArray, IDirect3DRMArray)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMArray methods ***/\n    STDMETHOD_(DWORD, GetSize)(THIS) PURE;\n    /*** IDirect3DRMDeviceArray methods ***/\n    STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMDevice **element) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMDeviceArray_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMDeviceArray_AddRef(p)                               (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMDeviceArray_Release(p)                              (p)->lpVtbl->Release(p)\n/*** IDirect3DRMArray methods ***/\n#define IDirect3DRMDeviceArray_GetSize(p)                              (p)->lpVtbl->GetSize(p)\n/*** IDirect3DRMDeviceArray methods ***/\n#define IDirect3DRMDeviceArray_GetElement(p,a,b)                       (p)->lpVtbl->GetElement(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMDeviceArray_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)\n#define IDirect3DRMDeviceArray_AddRef(p)                               (p)->AddRef()\n#define IDirect3DRMDeviceArray_Release(p)                              (p)->Release()\n/*** IDirect3DRMArray methods ***/\n#define IDirect3DRMDeviceArray_GetSize(p)                              (p)->GetSize()\n/*** IDirect3DRMDeviceArray methods ***/\n#define IDirect3DRMDeviceArray_GetElement(p,a,b)                       (p)->GetElement(a,b)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMFrameArray interface\n */\n#define INTERFACE IDirect3DRMFrameArray\nDECLARE_INTERFACE_(IDirect3DRMFrameArray, IDirect3DRMArray)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMArray methods ***/\n    STDMETHOD_(DWORD, GetSize)(THIS) PURE;\n    /*** IDirect3DRMFrameArray methods ***/\n    STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMFrame **element) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMFrameArray_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMFrameArray_AddRef(p)                               (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMFrameArray_Release(p)                              (p)->lpVtbl->Release(p)\n/*** IDirect3DRMArray methods ***/\n#define IDirect3DRMFrameArray_GetSize(p)                              (p)->lpVtbl->GetSize(p)\n/*** IDirect3DRMFrameArray methods ***/\n#define IDirect3DRMFrameArray_GetElement(p,a,b)                       (p)->lpVtbl->GetElement(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMFrameArray_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)\n#define IDirect3DRMFrameArray_AddRef(p)                               (p)->AddRef()\n#define IDirect3DRMFrameArray_Release(p)                              (p)->Release()\n/*** IDirect3DRMArray methods ***/\n#define IDirect3DRMFrameArray_GetSize(p)                              (p)->GetSize()\n/*** IDirect3DRMFrameArray methods ***/\n#define IDirect3DRMFrameArray_GetElement(p,a,b)                       (p)->GetElement(a,b)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMViewportArray interface\n */\n#define INTERFACE IDirect3DRMViewportArray\nDECLARE_INTERFACE_(IDirect3DRMViewportArray, IDirect3DRMArray)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMArray methods ***/\n    STDMETHOD_(DWORD, GetSize)(THIS) PURE;\n    /*** IDirect3DRMViewportArray methods ***/\n    STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMViewport **element) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMViewportArray_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMViewportArray_AddRef(p)                               (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMViewportArray_Release(p)                              (p)->lpVtbl->Release(p)\n/*** IDirect3DRMArray methods ***/\n#define IDirect3DRMViewportArray_GetSize(p)                              (p)->lpVtbl->GetSize(p)\n/*** IDirect3DRMViewportArray methods ***/\n#define IDirect3DRMViewportArray_GetElement(p,a,b)                       (p)->lpVtbl->GetElement(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMViewportArray_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)\n#define IDirect3DRMViewportArray_AddRef(p)                               (p)->AddRef()\n#define IDirect3DRMViewportArray_Release(p)                              (p)->Release()\n/*** IDirect3DRMArray methods ***/\n#define IDirect3DRMViewportArray_GetSize(p)                              (p)->GetSize()\n/*** IDirect3DRMViewportArray methods ***/\n#define IDirect3DRMviewportArray_GetElement(p,a,b)                       (p)->GetElement(a,b)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMVisualArray interface\n */\n#define INTERFACE IDirect3DRMVisualArray\nDECLARE_INTERFACE_(IDirect3DRMVisualArray, IDirect3DRMArray)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMArray methods ***/\n    STDMETHOD_(DWORD, GetSize)(THIS) PURE;\n    /*** IDirect3DRMVisualArray methods ***/\n    STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMVisual **element) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMVisualArray_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMVisualArray_AddRef(p)                               (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMVisualArray_Release(p)                              (p)->lpVtbl->Release(p)\n/*** IDirect3DRMArray methods ***/\n#define IDirect3DRMVisualArray_GetSize(p)                              (p)->lpVtbl->GetSize(p)\n/*** IDirect3DRMVisualArray methods ***/\n#define IDirect3DRMVisualArray_GetElement(p,a,b)                       (p)->lpVtbl->GetElement(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMVisualArray_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)\n#define IDirect3DRMVisualArray_AddRef(p)                               (p)->AddRef()\n#define IDirect3DRMVisualArray_Release(p)                              (p)->Release()\n/*** IDirect3DRMArray methods ***/\n#define IDirect3DRMVisualArray_GetSize(p)                              (p)->GetSize()\n/*** IDirect3DRMVisualArray methods ***/\n#define IDirect3DRMVisualArray_GetElement(p,a,b)                       (p)->GetElement(a,b)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMAnimationArray interface\n */\n#define INTERFACE IDirect3DRMAnimationArray\nDECLARE_INTERFACE_(IDirect3DRMAnimationArray, IDirect3DRMArray)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMArray methods ***/\n    STDMETHOD_(DWORD, GetSize)(THIS) PURE;\n    /*** IDirect3DRMAnimationArray methods ***/\n    STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMAnimation2 **element) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMAnimationArray_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMAnimationArray_AddRef(p)                               (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMAnimationArray_Release(p)                              (p)->lpVtbl->Release(p)\n/*** IDirect3DRMArray methods ***/\n#define IDirect3DRMAnimationArray_GetSize(p)                              (p)->lpVtbl->GetSize(p)\n/*** IDirect3DRMAnimationArray methods ***/\n#define IDirect3DRMAnimationArray_GetElement(p,a,b)                       (p)->lpVtbl->GetElement(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMAnimationArray_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)\n#define IDirect3DRMAnimationArray_AddRef(p)                               (p)->AddRef()\n#define IDirect3DRMAnimationArray_Release(p)                              (p)->Release()\n/*** IDirect3DRMArray methods ***/\n#define IDirect3DRMAnimationArray_GetSize(p)                              (p)->GetSize()\n/*** IDirect3DRMAnimationArray methods ***/\n#define IDirect3DRMAnimationArray_GetElement(p,a,b)                       (p)->GetElement(a,b)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMPickedArray interface\n */\n#define INTERFACE IDirect3DRMPickedArray\nDECLARE_INTERFACE_(IDirect3DRMPickedArray, IDirect3DRMArray)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMArray methods ***/\n    STDMETHOD_(DWORD, GetSize)(THIS) PURE;\n    /*** IDirect3DRMPickedArray methods ***/\n    STDMETHOD(GetPick)(THIS_ DWORD index, IDirect3DRMVisual **visual,\n            IDirect3DRMFrameArray **frame_array, D3DRMPICKDESC *pick_desc) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMPickedArray_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMPickedArray_AddRef(p)                               (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMPickedArray_Release(p)                              (p)->lpVtbl->Release(p)\n/*** IDirect3DRMArray methods ***/\n#define IDirect3DRMPickedArray_GetSize(p)                              (p)->lpVtbl->GetSize(p)\n/*** IDirect3DRMPickedArray methods ***/\n#define IDirect3DRMPickedArray_GetPick(p,a,b,c,d)                      (p)->lpVtbl->GetPick(p,a,b,c,d)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMPickedArray_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)\n#define IDirect3DRMPickedArray_AddRef(p)                               (p)->AddRef()\n#define IDirect3DRMPickedArray_Release(p)                              (p)->Release()\n/*** IDirect3DRMArray methods ***/\n#define IDirect3DRMPickedArray_GetSize(p)                              (p)->GetSize()\n/*** IDirect3DRMPickedArray methods ***/\n#define IDirect3DRMPickedArray_GetPick(p,a,b,c,d)                      (p)->GetPick(a,b,c,d)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMLightArray interface\n */\n#define INTERFACE IDirect3DRMLightArray\nDECLARE_INTERFACE_(IDirect3DRMLightArray, IDirect3DRMArray)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMArray methods ***/\n    STDMETHOD_(DWORD, GetSize)(THIS) PURE;\n    /*** IDirect3DRMLightArray methods ***/\n    STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMLight **element) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMLightArray_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMLightArray_AddRef(p)                               (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMLightArray_Release(p)                              (p)->lpVtbl->Release(p)\n/*** IDirect3DRMArray methods ***/\n#define IDirect3DRMLightArray_GetSize(p)                              (p)->lpVtbl->GetSize(p)\n/*** IDirect3DRMLightArray methods ***/\n#define IDirect3DRMLightArray_GetElement(p,a,b)                       (p)->lpVtbl->GetElement(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMLightArray_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)\n#define IDirect3DRMLightArray_AddRef(p)                               (p)->AddRef()\n#define IDirect3DRMLightArray_Release(p)                              (p)->Release()\n/*** IDirect3DRMArray methods ***/\n#define IDirect3DRMLightArray_GetSize(p)                              (p)->GetSize()\n/*** IDirect3DRMLightArray methods ***/\n#define IDirect3DRMLightArray_GetElement(p,a,b)                       (p)->GetElement(a,b)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMFaceArray interface\n */\n#define INTERFACE IDirect3DRMFaceArray\nDECLARE_INTERFACE_(IDirect3DRMFaceArray, IDirect3DRMArray)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMArray methods ***/\n    STDMETHOD_(DWORD, GetSize)(THIS) PURE;\n    /*** IDirect3DRMFaceArray methods ***/\n    STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMFace **element) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMFaceArray_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMFaceArray_AddRef(p)                               (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMFaceArray_Release(p)                              (p)->lpVtbl->Release(p)\n/*** IDirect3DRMArray methods ***/\n#define IDirect3DRMFaceArray_GetSize(p)                              (p)->lpVtbl->GetSize(p)\n/*** IDirect3DRMFaceArray methods ***/\n#define IDirect3DRMFaceArray_GetElement(p,a,b)                       (p)->lpVtbl->GetElement(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMFaceArray_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)\n#define IDirect3DRMFaceArray_AddRef(p)                               (p)->AddRef()\n#define IDirect3DRMFaceArray_Release(p)                              (p)->Release()\n/*** IDirect3DRMArray methods ***/\n#define IDirect3DRMFaceArray_GetSize(p)                              (p)->GetSize()\n/*** IDirect3DRMFaceArray methods ***/\n#define IDirect3DRMFaceArray_GetElement(p,a,b)                       (p)->GetElement(a,b)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMPicked2Array interface\n */\n#define INTERFACE IDirect3DRMPicked2Array\nDECLARE_INTERFACE_(IDirect3DRMPicked2Array, IDirect3DRMArray)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMArray methods ***/\n    STDMETHOD_(DWORD, GetSize)(THIS) PURE;\n    /*** IDirect3DRMPicked2Array methods ***/\n    STDMETHOD(GetPick)(THIS_ DWORD index, IDirect3DRMVisual **visual,\n            IDirect3DRMFrameArray **frame_array, D3DRMPICKDESC2 *pick_desc) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMPicked2Array_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMPicked2Array_AddRef(p)                               (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMPicked2Array_Release(p)                              (p)->lpVtbl->Release(p)\n/*** IDirect3DRMArray methods ***/\n#define IDirect3DRMPicked2Array_GetSize(p)                              (p)->lpVtbl->GetSize(p)\n/*** IDirect3DRMPicked2Array methods ***/\n#define IDirect3DRMPicked2Array_GetPick(p,a,b,c,d)                      (p)->lpVtbl->GetPick(p,a,b,c,d)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMPicked2Array_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)\n#define IDirect3DRMPicked2Array_AddRef(p)                               (p)->AddRef()\n#define IDirect3DRMPicked2Array_Release(p)                              (p)->Release()\n/*** IDirect3DRMArray methods ***/\n#define IDirect3DRMPicked2Array_GetSize(p)                              (p)->GetSize()\n/*** IDirect3DRMPicked2Array methods ***/\n#define IDirect3DRMPicked2Array_GetPick(p,a,b,c,d)                      (p)->GetPick(a,b,c,d)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMInterpolator interface\n */\n#define INTERFACE IDirect3DRMInterpolator\nDECLARE_INTERFACE_(IDirect3DRMInterpolator, IDirect3DRMObject)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMInterpolator methods ***/\n    STDMETHOD(AttachObject)(THIS_ IDirect3DRMObject *object) PURE;\n    STDMETHOD(GetAttachedObjects)(THIS_ IDirect3DRMObjectArray **array) PURE;\n    STDMETHOD(DetachObject)(THIS_ IDirect3DRMObject *object) PURE;\n    STDMETHOD(SetIndex)(THIS_ D3DVALUE) PURE;\n    STDMETHOD_(D3DVALUE, GetIndex)(THIS) PURE;\n    STDMETHOD(Interpolate)(THIS_ D3DVALUE index, IDirect3DRMObject *object, D3DRMINTERPOLATIONOPTIONS flags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMInterpolator_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMInterpolator_AddRef(p)                               (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMInterpolator_Release(p)                              (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMInterpolator_Clone(p,a,b,c)                          (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMInterpolator_AddDestroyCallback(p,a,b)               (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMInterpolator_DeleteDestroyCallback(p,a,b)            (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMInterpolator_SetAppData(p,a)                         (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMInterpolator_GetAppData(p)                           (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMInterpolator_SetName(p,a)                            (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMInterpolator_GetName(p,a,b)                          (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMInterpolator_GetClassName(p,a,b)                     (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMInterpolator methods ***/\n#define IDirect3DRMInterpolator_AttachObject(p,a)                       (p)->lpVtbl->AttachObject(p,a)\n#define IDirect3DRMInterpolator_GetAttachedObjects(p,a)                 (p)->lpVtbl->GetAttachedObjects(p,a)\n#define IDirect3DRMInterpolator_DetachObject(p,a)                       (p)->lpVtbl->DetachObject(p,a)\n#define IDirect3DRMInterpolator_SetIndex(p,a)                           (p)->lpVtbl->SetIndex(p,a)\n#define IDirect3DRMInterpolator_GetIndex(p)                             (p)->lpVtbl->GetIndex(p)\n#define IDirect3DRMInterpolator_Interpolate(p,a,b,c)                    (p)->lpVtbl->Interpolate(p,a,b,c)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMInterpolator_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)\n#define IDirect3DRMInterpolator_AddRef(p)                               (p)->AddRef()\n#define IDirect3DRMInterpolator_Release(p)                              (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMInterpolator_Clone(p,a,b,c)                          (p)->Clone(a,b,c)\n#define IDirect3DRMInterpolator_AddDestroyCallback(p,a,b)               (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMInterpolator_DeleteDestroyCallback(p,a,b)            (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMInterpolator_SetAppData(p,a)                         (p)->SetAppData(a)\n#define IDirect3DRMInterpolator_GetAppData(p)                           (p)->GetAppData()\n#define IDirect3DRMInterpolator_SetName(p,a)                            (p)->SetName(a)\n#define IDirect3DRMInterpolator_GetName(p,a,b)                          (p)->GetName(a,b)\n#define IDirect3DRMInterpolator_GetClassName(p,a,b)                     (p)->GetClassName(a,b)\n/*** IDirect3DRMInterpolator methods ***/\n#define IDirect3DRMInterpolator_AttachObject(p,a)                       (p)->AttachObject(a)\n#define IDirect3DRMInterpolator_GetAttachedObjects(p,a)                 (p)->GetAttachedObjects(a)\n#define IDirect3DRMInterpolator_DetachObject(p,a)                       (p)->DetachObject(a)\n#define IDirect3DRMInterpolator_SetIndex(p,a)                           (p)->SetIndex(a)\n#define IDirect3DRMInterpolator_GetIndex(p)                             (p)->GetIndex()\n#define IDirect3DRMInterpolator_Interpolate(p,a,b,c)                    (p)->Interpolate(a,b,c)\n#endif\n\n/*****************************************************************************\n * IDirect3DRMClippedVisual interface\n */\n#define INTERFACE IDirect3DRMClippedVisual\nDECLARE_INTERFACE_(IDirect3DRMClippedVisual, IDirect3DRMVisual)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMClippedVisual methods ***/\n    STDMETHOD(Init) (THIS_ IDirect3DRMVisual *visual) PURE;\n    STDMETHOD(AddPlane) (THIS_ IDirect3DRMFrame3 *reference, D3DVECTOR *point,\n            D3DVECTOR *normal, DWORD flags, DWORD *id) PURE;\n    STDMETHOD(DeletePlane)(THIS_ DWORD, DWORD) PURE;\n    STDMETHOD(GetPlaneIDs)(THIS_ DWORD *count, DWORD *id, DWORD flags) PURE;\n    STDMETHOD(GetPlane) (THIS_ DWORD id, IDirect3DRMFrame3 *reference, D3DVECTOR *point,\n            D3DVECTOR *normal, DWORD flags) PURE;\n    STDMETHOD(SetPlane) (THIS_ DWORD id, IDirect3DRMFrame3 *reference, D3DVECTOR *point,\n            D3DVECTOR *normal, DWORD flags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMClippedVisual_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMClippedVisual_AddRef(p)                               (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMClippedVisual_Release(p)                              (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMClippedVisual_Clone(p,a,b,c)                          (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMClippedVisual_AddDestroyCallback(p,a,b)               (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMClippedVisual_DeleteDestroyCallback(p,a,b)            (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMClippedVisual_SetAppData(p,a)                         (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMClippedVisual_GetAppData(p)                           (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMClippedVisual_SetName(p,a)                            (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMClippedVisual_GetName(p,a,b)                          (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMClippedVisual_GetClassName(p,a,b)                     (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMClippedVisual methods ***/\n#define IDirect3DRMClippedVisual_Init(p,a)                               (p)->lpVtbl->Init(p,a)\n#define IDirect3DRMClippedVisual_AddPlane(p,a,b,c,d,e)                   (p)->lpVtbl->AddPlane(p,a,b,c,d,e)\n#define IDirect3DRMClippedVisual_DeletePlane(p,a,b)                      (p)->lpVtbl->DeletePlane(p,a,b)\n#define IDirect3DRMClippedVisual_GetPlaneIDs(p,a,b,c)                    (p)->lpVtbl->GetPlaneIDs(p,a,b,c)\n#define IDirect3DRMClippedVisual_GetPlane(p,a,b,c,d,e)                   (p)->lpVtbl->GetPlane(p,a,b,c,d,e)\n#define IDirect3DRMClippedVisual_SetPlane(p,a,b,c,d,e)                   (p)->lpVtbl->SetPlane(p,a,b,c,d,e)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMClippedVisual_QueryInterface(p,a,b)                   (p)->QueryInterface(a,b)\n#define IDirect3DRMClippedVisual_AddRef(p)                               (p)->AddRef()\n#define IDirect3DRMClippedVisual_Release(p)                              (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMClippedVisual_Clone(p,a,b,c)                          (p)->Clone(a,b,c)\n#define IDirect3DRMClippedVisual_AddDestroyCallback(p,a,b)               (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMClippedVisual_DeleteDestroyCallback(p,a,b)            (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMClippedVisual_SetAppData(p,a)                         (p)->SetAppData(a)\n#define IDirect3DRMClippedVisual_GetAppData(p)                           (p)->GetAppData()\n#define IDirect3DRMClippedVisual_SetName(p,a)                            (p)->SetName(a)\n#define IDirect3DRMClippedVisual_GetName(p,a,b)                          (p)->GetName(a,b)\n#define IDirect3DRMClippedVisual_GetClassName(p,a,b)                     (p)->GetClassName(a,b)\n/*** IDirect3DRMClippedVisual methods ***/\n#define IDirect3DRMClippedVisual_Init(p,a)                               (p)->Init(a)\n#define IDirect3DRMClippedVisual_AddPlane(p,a,b,c,d,e)                   (p)->AddPlane(a,b,c,d,e)\n#define IDirect3DRMClippedVisual_DeletePlane(p,a,b)                      (p)->DeletePlane(a,b)\n#define IDirect3DRMClippedVisual_GetPlaneIDs(p,a,b,c)                    (p)->GetPlaneIDs(a,b,c)\n#define IDirect3DRMClippedVisual_GetPlane(p,a,b,c,d,e)                   (p)->GetPlane(a,b,c,d,e)\n#define IDirect3DRMClippedVisual_SetPlane(p,a,b,c,d,e)                   (p)->SetPlane(a,b,c,d,e)\n#endif\n\n#ifdef __cplusplus\n};\n#endif\n\n#endif /* __D3DRMOBJ_H__ */\n"
  },
  {
    "path": "wine/windows/d3drmwin.h",
    "content": "/*\n * Copyright (C) 2010 Vijay Kiran Kamuju\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __D3DRMWIN_H__\n#define __D3DRMWIN_H__\n\n#include <d3drm.h>\n#include <ddraw.h>\n#include <d3d.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*****************************************************************************\n * Direct3DRMWinDevice interface GUID\n */\n\nDEFINE_GUID(IID_IDirect3DRMWinDevice,       0xc5016cc0, 0xd273, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);\n\ntypedef struct IDirect3DRMWinDevice       *LPDIRECT3DRMWINDEVICE, **LPLPDIRECT3DRMWINDEVICE;\n\n/*****************************************************************************\n * IDirect3DRMWinDevice interface\n */\n#define INTERFACE IDirect3DRMWinDevice\nDECLARE_INTERFACE_(IDirect3DRMWinDevice,IDirect3DRMObject)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DRMObject methods ***/\n    STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;\n    STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;\n    STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;\n    STDMETHOD_(DWORD, GetAppData)(THIS) PURE;\n    STDMETHOD(SetName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;\n    STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;\n    /*** IDirect3DRMWinDevice methods ***/\n    STDMETHOD(HandlePaint)(THIS_ HDC) PURE;\n    STDMETHOD(HandleActivate)(THIS_ WORD) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DRMWinDevice_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DRMWinDevice_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DRMWinDevice_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMWinDevice_Clone(p,a,b,c)               (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirect3DRMWinDevice_AddDestroyCallback(p,a,b)    (p)->lpVtbl->AddDestroyCallback(p,a,b)\n#define IDirect3DRMWinDevice_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)\n#define IDirect3DRMWinDevice_SetAppData(p,a)              (p)->lpVtbl->SetAppData(p,a)\n#define IDirect3DRMWinDevice_GetAppData(p)                (p)->lpVtbl->GetAppData(p)\n#define IDirect3DRMWinDevice_SetName(p,a)                 (p)->lpVtbl->SetName(p,a)\n#define IDirect3DRMWinDevice_GetName(p,a,b)               (p)->lpVtbl->GetName(p,a,b)\n#define IDirect3DRMWinDevice_GetClassName(p,a,b)          (p)->lpVtbl->GetClassName(p,a,b)\n/*** IDirect3DRMWinDevice methods ***/\n#define IDirect3DRMWinDevice_HandlePaint(p,a)             (p)->lpVtbl->HandlePaint(p,a)\n#define IDirect3DRMWinDevice_HandleActivate(p,a)          (p)->lpVtbl->HandleActivate(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DRMWinDevice_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DRMWinDevice_AddRef(p)                    (p)->AddRef()\n#define IDirect3DRMwinDevice_Release(p)                   (p)->Release()\n/*** IDirect3DRMObject methods ***/\n#define IDirect3DRMWinDevice_Clone(p,a,b,c)               (p)->Clone(a,b,c)\n#define IDirect3DRMWinDevice_AddDestroyCallback(p,a,b)    (p)->AddDestroyCallback(a,b)\n#define IDirect3DRMWinDevice_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)\n#define IDirect3DRMWinDevice_SetAppData(p,a)              (p)->SetAppData(a)\n#define IDirect3DRMWinDevice_GetAppData(p)                (p)->GetAppData()\n#define IDirect3DRMWinDevice_SetName(p,a)                 (p)->SetName(a)\n#define IDirect3DRMWinDevice_GetName(p,a,b)               (p)->GetName(a,b)\n#define IDirect3DRMWinDevice_GetClassName(p,a,b)          (p)->GetClassName(a,b)\n/*** IDirect3DRMWinDevice methods ***/\n#define IDirect3DRMWinDevice_HandlePaint(p,a)             (p)->HandlePaint(a)\n#define IDirect3DRMWinDevice_HandleActivate(p,a)          (p)->HandleActivate(a)\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __D3DRMWIN_H__ */\n"
  },
  {
    "path": "wine/windows/d3dtypes.h",
    "content": "/*\n * Copyright (C) 2000 Peter Hunnisett\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n/* FIXME: Need to add C++ code for certain structs for headers - this is going to be a problem\n          if WINE continues to only use C code  - I suppose that we could always inline in\n          the header file to get around that little problem... */\n/* FIXME: We need to implement versioning on everything directx 5 and up if these headers\n          are going to be generically useful for directx stuff */\n\n#ifndef __WINE_D3DTYPES_H\n#define __WINE_D3DTYPES_H\n\n#include <windows.h>\n#include <float.h>\n#include <ddraw.h>\n\n#ifdef __i386__\n#include <pshpack4.h>\n#endif\n\n#define D3DVALP(val, prec)      ((float)(val))\n#define D3DVAL(val)             ((float)(val))\n#define D3DDivide(a, b)         (float)((double) (a) / (double) (b))\n#define D3DMultiply(a, b)       ((a) * (b))\n\ntypedef LONG D3DFIXED;\n\n\n#ifndef RGB_MAKE\n#define CI_GETALPHA(ci)    ((ci) >> 24)\n#define CI_GETINDEX(ci)    (((ci) >> 8) & 0xffff)\n#define CI_GETFRACTION(ci) ((ci) & 0xff)\n#define CI_ROUNDINDEX(ci)  CI_GETINDEX((ci) + 0x80)\n#define CI_MASKALPHA(ci)   ((ci) & 0xffffff)\n#define CI_MAKE(a, i, f)    (((a) << 24) | ((i) << 8) | (f))\n\n#define RGBA_GETALPHA(rgb)      ((rgb) >> 24)\n#define RGBA_GETRED(rgb)        (((rgb) >> 16) & 0xff)\n#define RGBA_GETGREEN(rgb)      (((rgb) >> 8) & 0xff)\n#define RGBA_GETBLUE(rgb)       ((rgb) & 0xff)\n#define RGBA_MAKE(r, g, b, a)   ((D3DCOLOR) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b)))\n\n#define D3DRGB(r, g, b) \\\n    (0xff000000 | ( ((LONG)((r) * 255)) << 16) | (((LONG)((g) * 255)) << 8) | (LONG)((b) * 255))\n#define D3DRGBA(r, g, b, a) \\\n    (   (((LONG)((a) * 255)) << 24) | (((LONG)((r) * 255)) << 16) \\\n    |   (((LONG)((g) * 255)) << 8) | (LONG)((b) * 255) \\\n    )\n\n#define RGB_GETRED(rgb)         (((rgb) >> 16) & 0xff)\n#define RGB_GETGREEN(rgb)       (((rgb) >> 8) & 0xff)\n#define RGB_GETBLUE(rgb)        ((rgb) & 0xff)\n#define RGBA_SETALPHA(rgba, x) (((x) << 24) | ((rgba) & 0x00ffffff))\n#define RGB_MAKE(r, g, b)       ((D3DCOLOR) (((r) << 16) | ((g) << 8) | (b)))\n#define RGBA_TORGB(rgba)       ((D3DCOLOR) ((rgba) & 0xffffff))\n#define RGB_TORGBA(rgb)        ((D3DCOLOR) ((rgb) | 0xff000000))\n\n#endif\n\n#define D3DENUMRET_CANCEL                        DDENUMRET_CANCEL\n#define D3DENUMRET_OK                            DDENUMRET_OK\n\ntypedef HRESULT (CALLBACK *LPD3DVALIDATECALLBACK)(void *ctx, DWORD offset);\ntypedef HRESULT (CALLBACK *LPD3DENUMTEXTUREFORMATSCALLBACK)(DDSURFACEDESC *surface_desc, void *ctx);\ntypedef HRESULT (CALLBACK *LPD3DENUMPIXELFORMATSCALLBACK)(DDPIXELFORMAT *format, void *ctx);\n\n#ifndef DX_SHARED_DEFINES\n\ntypedef float D3DVALUE,*LPD3DVALUE;\n\n#ifndef D3DCOLOR_DEFINED\ntypedef DWORD D3DCOLOR, *LPD3DCOLOR;\n#define D3DCOLOR_DEFINED\n#endif\n\n#ifndef D3DVECTOR_DEFINED\ntypedef struct _D3DVECTOR {\n  union {\n        D3DVALUE        x;\n    D3DVALUE dvX;\n  } DUMMYUNIONNAME1;\n  union {\n        D3DVALUE        y;\n    D3DVALUE dvY;\n  } DUMMYUNIONNAME2;\n  union {\n        D3DVALUE        z;\n    D3DVALUE dvZ;\n  } DUMMYUNIONNAME3;\n#if defined(__cplusplus) && defined(D3D_OVERLOADS)\n  /* the definitions for these methods are in d3dvec.inl */\npublic:\n  /*** constructors ***/\n  _D3DVECTOR() {}\n  _D3DVECTOR(D3DVALUE f);\n  _D3DVECTOR(D3DVALUE _x, D3DVALUE _y, D3DVALUE _z);\n  _D3DVECTOR(const D3DVALUE f[3]);\n\n  /*** assignment operators ***/\n  _D3DVECTOR& operator += (const _D3DVECTOR& v);\n  _D3DVECTOR& operator -= (const _D3DVECTOR& v);\n  _D3DVECTOR& operator *= (const _D3DVECTOR& v);\n  _D3DVECTOR& operator /= (const _D3DVECTOR& v);\n  _D3DVECTOR& operator *= (D3DVALUE s);\n  _D3DVECTOR& operator /= (D3DVALUE s);\n\n  /*** unary operators ***/\n  friend _D3DVECTOR operator + (const _D3DVECTOR& v);\n  friend _D3DVECTOR operator - (const _D3DVECTOR& v);\n\n  /*** binary operators ***/\n  friend _D3DVECTOR operator + (const _D3DVECTOR& v1, const _D3DVECTOR& v2);\n  friend _D3DVECTOR operator - (const _D3DVECTOR& v1, const _D3DVECTOR& v2);\n\n  friend _D3DVECTOR operator * (const _D3DVECTOR& v, D3DVALUE s);\n  friend _D3DVECTOR operator * (D3DVALUE s, const _D3DVECTOR& v);\n  friend _D3DVECTOR operator / (const _D3DVECTOR& v, D3DVALUE s);\n\n  friend D3DVALUE SquareMagnitude(const _D3DVECTOR& v);\n  friend D3DVALUE Magnitude(const _D3DVECTOR& v);\n\n  friend _D3DVECTOR Normalize(const _D3DVECTOR& v);\n\n  friend D3DVALUE DotProduct(const _D3DVECTOR& v1, const _D3DVECTOR& v2);\n  friend _D3DVECTOR CrossProduct(const _D3DVECTOR& v1, const _D3DVECTOR& v2);\n#endif\n} D3DVECTOR,*LPD3DVECTOR;\n#define D3DVECTOR_DEFINED\n#endif\n\n#define DX_SHARED_DEFINES\n#endif /* DX_SHARED_DEFINES */\n\ntypedef DWORD D3DMATERIALHANDLE, *LPD3DMATERIALHANDLE;\ntypedef DWORD D3DTEXTUREHANDLE,  *LPD3DTEXTUREHANDLE;\ntypedef DWORD D3DMATRIXHANDLE,   *LPD3DMATRIXHANDLE;\n\ntypedef struct _D3DCOLORVALUE {\n        union {\n                D3DVALUE r;\n                D3DVALUE dvR;\n        } DUMMYUNIONNAME1;\n        union {\n                D3DVALUE g;\n                D3DVALUE dvG;\n        } DUMMYUNIONNAME2;\n        union {\n                D3DVALUE b;\n                D3DVALUE dvB;\n        } DUMMYUNIONNAME3;\n        union {\n                D3DVALUE a;\n                D3DVALUE dvA;\n        } DUMMYUNIONNAME4;\n} D3DCOLORVALUE,*LPD3DCOLORVALUE;\n\ntypedef struct _D3DRECT {\n  union {\n    LONG x1;\n    LONG lX1;\n  } DUMMYUNIONNAME1;\n  union {\n    LONG y1;\n    LONG lY1;\n  } DUMMYUNIONNAME2;\n  union {\n    LONG x2;\n    LONG lX2;\n  } DUMMYUNIONNAME3;\n  union {\n    LONG y2;\n    LONG lY2;\n  } DUMMYUNIONNAME4;\n} D3DRECT, *LPD3DRECT;\n\ntypedef struct _D3DHVERTEX {\n    DWORD         dwFlags;\n union {\n    D3DVALUE    hx;\n    D3DVALUE    dvHX;\n  } DUMMYUNIONNAME1;\n  union {\n    D3DVALUE    hy;\n    D3DVALUE    dvHY;\n  } DUMMYUNIONNAME2;\n  union {\n    D3DVALUE    hz;\n    D3DVALUE    dvHZ;\n  } DUMMYUNIONNAME3;\n} D3DHVERTEX, *LPD3DHVERTEX;\n\n/*\n * Transformed/lit vertices\n */\ntypedef struct _D3DTLVERTEX {\n  union {\n    D3DVALUE    sx;\n    D3DVALUE    dvSX;\n  } DUMMYUNIONNAME1;\n  union {\n    D3DVALUE    sy;\n    D3DVALUE    dvSY;\n  } DUMMYUNIONNAME2;\n  union {\n    D3DVALUE    sz;\n    D3DVALUE    dvSZ;\n  } DUMMYUNIONNAME3;\n  union {\n    D3DVALUE    rhw;\n    D3DVALUE    dvRHW;\n  } DUMMYUNIONNAME4;\n  union {\n    D3DCOLOR    color;\n    D3DCOLOR    dcColor;\n  } DUMMYUNIONNAME5;\n  union {\n    D3DCOLOR    specular;\n    D3DCOLOR    dcSpecular;\n  } DUMMYUNIONNAME6;\n  union {\n    D3DVALUE    tu;\n    D3DVALUE    dvTU;\n  } DUMMYUNIONNAME7;\n  union {\n    D3DVALUE    tv;\n    D3DVALUE    dvTV;\n  } DUMMYUNIONNAME8;\n#if defined(__cplusplus) && defined(D3D_OVERLOADS)\npublic:\n  _D3DTLVERTEX() {}\n  _D3DTLVERTEX(const D3DVECTOR& v, float _rhw, D3DCOLOR _color, D3DCOLOR _specular, float _tu, float _tv) {\n    sx = v.x; sy = v.y; sz = v.z; rhw = _rhw;\n    color = _color; specular = _specular;\n    tu = _tu; tv = _tv;\n  }\n#endif\n} D3DTLVERTEX, *LPD3DTLVERTEX;\n\ntypedef struct _D3DLVERTEX {\n  union {\n    D3DVALUE x;\n    D3DVALUE dvX;\n  } DUMMYUNIONNAME1;\n  union {\n    D3DVALUE y;\n    D3DVALUE dvY;\n  } DUMMYUNIONNAME2;\n  union {\n    D3DVALUE z;\n    D3DVALUE dvZ;\n  } DUMMYUNIONNAME3;\n  DWORD            dwReserved;\n  union {\n    D3DCOLOR     color;\n    D3DCOLOR     dcColor;\n  } DUMMYUNIONNAME4;\n  union {\n    D3DCOLOR     specular;\n    D3DCOLOR     dcSpecular;\n  } DUMMYUNIONNAME5;\n  union {\n    D3DVALUE     tu;\n    D3DVALUE     dvTU;\n  } DUMMYUNIONNAME6;\n  union {\n    D3DVALUE     tv;\n    D3DVALUE     dvTV;\n  } DUMMYUNIONNAME7;\n} D3DLVERTEX, *LPD3DLVERTEX;\n\ntypedef struct _D3DVERTEX {\n  union {\n    D3DVALUE     x;\n    D3DVALUE     dvX;\n  } DUMMYUNIONNAME1;\n  union {\n    D3DVALUE     y;\n    D3DVALUE     dvY;\n  } DUMMYUNIONNAME2;\n  union {\n    D3DVALUE     z;\n    D3DVALUE     dvZ;\n  } DUMMYUNIONNAME3;\n  union {\n    D3DVALUE     nx;\n    D3DVALUE     dvNX;\n  } DUMMYUNIONNAME4;\n  union {\n    D3DVALUE     ny;\n    D3DVALUE     dvNY;\n  } DUMMYUNIONNAME5;\n  union {\n    D3DVALUE     nz;\n    D3DVALUE     dvNZ;\n  } DUMMYUNIONNAME6;\n  union {\n    D3DVALUE     tu;\n    D3DVALUE     dvTU;\n  } DUMMYUNIONNAME7;\n  union {\n    D3DVALUE     tv;\n    D3DVALUE     dvTV;\n  } DUMMYUNIONNAME8;\n#if defined(__cplusplus) && defined(D3D_OVERLOADS)\npublic:\n  _D3DVERTEX() {}\n  _D3DVERTEX(const D3DVECTOR& v, const D3DVECTOR& n, float _tu, float _tv) {\n    x  = v.x; y  = v.y; z  = v.z;\n    nx = n.x; ny = n.y; nz = n.z;\n    tu = _tu; tv = _tv;\n  }\n#endif\n} D3DVERTEX, *LPD3DVERTEX;\n\ntypedef struct _D3DMATRIX {\n  D3DVALUE        _11, _12, _13, _14;\n  D3DVALUE        _21, _22, _23, _24;\n  D3DVALUE        _31, _32, _33, _34;\n  D3DVALUE        _41, _42, _43, _44;\n#if defined(__cplusplus) && defined(D3D_OVERLOADS)\n  _D3DMATRIX() { }\n\n    /* This is different from MS, but avoids anonymous structs. */\n    D3DVALUE &operator () (int r, int c)\n\t{ return (&_11)[r*4 + c]; }\n    const D3DVALUE &operator() (int r, int c) const\n\t{ return (&_11)[r*4 + c]; }\n#endif\n} D3DMATRIX, *LPD3DMATRIX;\n\n#if defined(__cplusplus) && defined(D3D_OVERLOADS)\n#include <d3dvec.inl>\n#endif\n\ntypedef struct _D3DVIEWPORT {\n  DWORD       dwSize;\n  DWORD       dwX;\n  DWORD       dwY;\n  DWORD       dwWidth;\n  DWORD       dwHeight;\n  D3DVALUE    dvScaleX;\n  D3DVALUE    dvScaleY;\n  D3DVALUE    dvMaxX;\n  D3DVALUE    dvMaxY;\n  D3DVALUE    dvMinZ;\n  D3DVALUE    dvMaxZ;\n} D3DVIEWPORT, *LPD3DVIEWPORT;\n\ntypedef struct _D3DVIEWPORT2 {\n  DWORD       dwSize;\n  DWORD       dwX;\n  DWORD       dwY;\n  DWORD       dwWidth;\n  DWORD       dwHeight;\n  D3DVALUE    dvClipX;\n  D3DVALUE    dvClipY;\n  D3DVALUE    dvClipWidth;\n  D3DVALUE    dvClipHeight;\n  D3DVALUE    dvMinZ;\n  D3DVALUE    dvMaxZ;\n} D3DVIEWPORT2, *LPD3DVIEWPORT2;\n\ntypedef struct _D3DVIEWPORT7 {\n  DWORD       dwX;\n  DWORD       dwY;\n  DWORD       dwWidth;\n  DWORD       dwHeight;\n  D3DVALUE    dvMinZ;\n  D3DVALUE    dvMaxZ;\n} D3DVIEWPORT7, *LPD3DVIEWPORT7;\n\n#define D3DMAXUSERCLIPPLANES 32\n\n#define D3DCLIPPLANE0 (1 << 0)\n#define D3DCLIPPLANE1 (1 << 1)\n#define D3DCLIPPLANE2 (1 << 2)\n#define D3DCLIPPLANE3 (1 << 3)\n#define D3DCLIPPLANE4 (1 << 4)\n#define D3DCLIPPLANE5 (1 << 5)\n\n#define D3DCLIP_LEFT     0x00000001\n#define D3DCLIP_RIGHT    0x00000002\n#define D3DCLIP_TOP      0x00000004\n#define D3DCLIP_BOTTOM   0x00000008\n#define D3DCLIP_FRONT    0x00000010\n#define D3DCLIP_BACK     0x00000020\n#define D3DCLIP_GEN0     0x00000040\n#define D3DCLIP_GEN1     0x00000080\n#define D3DCLIP_GEN2     0x00000100\n#define D3DCLIP_GEN3     0x00000200\n#define D3DCLIP_GEN4     0x00000400\n#define D3DCLIP_GEN5     0x00000800\n\n#define D3DSTATUS_CLIPUNIONLEFT                 D3DCLIP_LEFT\n#define D3DSTATUS_CLIPUNIONRIGHT                D3DCLIP_RIGHT\n#define D3DSTATUS_CLIPUNIONTOP                  D3DCLIP_TOP\n#define D3DSTATUS_CLIPUNIONBOTTOM               D3DCLIP_BOTTOM\n#define D3DSTATUS_CLIPUNIONFRONT                D3DCLIP_FRONT\n#define D3DSTATUS_CLIPUNIONBACK                 D3DCLIP_BACK\n#define D3DSTATUS_CLIPUNIONGEN0                 D3DCLIP_GEN0\n#define D3DSTATUS_CLIPUNIONGEN1                 D3DCLIP_GEN1\n#define D3DSTATUS_CLIPUNIONGEN2                 D3DCLIP_GEN2\n#define D3DSTATUS_CLIPUNIONGEN3                 D3DCLIP_GEN3\n#define D3DSTATUS_CLIPUNIONGEN4                 D3DCLIP_GEN4\n#define D3DSTATUS_CLIPUNIONGEN5                 D3DCLIP_GEN5\n\n#define D3DSTATUS_CLIPINTERSECTIONLEFT          0x00001000\n#define D3DSTATUS_CLIPINTERSECTIONRIGHT         0x00002000\n#define D3DSTATUS_CLIPINTERSECTIONTOP           0x00004000\n#define D3DSTATUS_CLIPINTERSECTIONBOTTOM        0x00008000\n#define D3DSTATUS_CLIPINTERSECTIONFRONT         0x00010000\n#define D3DSTATUS_CLIPINTERSECTIONBACK          0x00020000\n#define D3DSTATUS_CLIPINTERSECTIONGEN0          0x00040000\n#define D3DSTATUS_CLIPINTERSECTIONGEN1          0x00080000\n#define D3DSTATUS_CLIPINTERSECTIONGEN2          0x00100000\n#define D3DSTATUS_CLIPINTERSECTIONGEN3          0x00200000\n#define D3DSTATUS_CLIPINTERSECTIONGEN4          0x00400000\n#define D3DSTATUS_CLIPINTERSECTIONGEN5          0x00800000\n#define D3DSTATUS_ZNOTVISIBLE                   0x01000000\n\n#define D3DSTATUS_CLIPUNIONALL  (               \\\n            D3DSTATUS_CLIPUNIONLEFT     |       \\\n            D3DSTATUS_CLIPUNIONRIGHT    |       \\\n            D3DSTATUS_CLIPUNIONTOP      |       \\\n            D3DSTATUS_CLIPUNIONBOTTOM   |       \\\n            D3DSTATUS_CLIPUNIONFRONT    |       \\\n            D3DSTATUS_CLIPUNIONBACK     |       \\\n            D3DSTATUS_CLIPUNIONGEN0     |       \\\n            D3DSTATUS_CLIPUNIONGEN1     |       \\\n            D3DSTATUS_CLIPUNIONGEN2     |       \\\n            D3DSTATUS_CLIPUNIONGEN3     |       \\\n            D3DSTATUS_CLIPUNIONGEN4     |       \\\n            D3DSTATUS_CLIPUNIONGEN5             \\\n            )\n\n#define D3DSTATUS_CLIPINTERSECTIONALL   (               \\\n            D3DSTATUS_CLIPINTERSECTIONLEFT      |       \\\n            D3DSTATUS_CLIPINTERSECTIONRIGHT     |       \\\n            D3DSTATUS_CLIPINTERSECTIONTOP       |       \\\n            D3DSTATUS_CLIPINTERSECTIONBOTTOM    |       \\\n            D3DSTATUS_CLIPINTERSECTIONFRONT     |       \\\n            D3DSTATUS_CLIPINTERSECTIONBACK      |       \\\n            D3DSTATUS_CLIPINTERSECTIONGEN0      |       \\\n            D3DSTATUS_CLIPINTERSECTIONGEN1      |       \\\n            D3DSTATUS_CLIPINTERSECTIONGEN2      |       \\\n            D3DSTATUS_CLIPINTERSECTIONGEN3      |       \\\n            D3DSTATUS_CLIPINTERSECTIONGEN4      |       \\\n            D3DSTATUS_CLIPINTERSECTIONGEN5              \\\n            )\n\n#define D3DSTATUS_DEFAULT       (                       \\\n            D3DSTATUS_CLIPINTERSECTIONALL       |       \\\n            D3DSTATUS_ZNOTVISIBLE)\n\n#define D3DTRANSFORM_CLIPPED       0x00000001\n#define D3DTRANSFORM_UNCLIPPED     0x00000002\n\ntypedef struct _D3DTRANSFORMDATA {\n  DWORD           dwSize;\n  void            *lpIn;\n  DWORD           dwInSize;\n  void            *lpOut;\n  DWORD           dwOutSize;\n  D3DHVERTEX      *lpHOut;\n  DWORD           dwClip;\n  DWORD           dwClipIntersection;\n  DWORD           dwClipUnion;\n  D3DRECT         drExtent;\n} D3DTRANSFORMDATA, *LPD3DTRANSFORMDATA;\n\ntypedef struct _D3DLIGHTINGELEMENT {\n  D3DVECTOR dvPosition;\n  D3DVECTOR dvNormal;\n} D3DLIGHTINGELEMENT, *LPD3DLIGHTINGELEMENT;\n\ntypedef struct _D3DMATERIAL {\n  DWORD               dwSize;\n  union {\n    D3DCOLORVALUE   diffuse;\n    D3DCOLORVALUE   dcvDiffuse;\n  } DUMMYUNIONNAME;\n  union {\n    D3DCOLORVALUE   ambient;\n    D3DCOLORVALUE   dcvAmbient;\n  } DUMMYUNIONNAME1;\n  union {\n    D3DCOLORVALUE   specular;\n    D3DCOLORVALUE   dcvSpecular;\n  } DUMMYUNIONNAME2;\n  union {\n    D3DCOLORVALUE   emissive;\n    D3DCOLORVALUE   dcvEmissive;\n  } DUMMYUNIONNAME3;\n  union {\n    D3DVALUE        power;\n    D3DVALUE        dvPower;\n  } DUMMYUNIONNAME4;\n  D3DTEXTUREHANDLE    hTexture;\n  DWORD               dwRampSize;\n} D3DMATERIAL, *LPD3DMATERIAL;\n\ntypedef struct _D3DMATERIAL7 {\n  union {\n    D3DCOLORVALUE   diffuse;\n    D3DCOLORVALUE   dcvDiffuse;\n  } DUMMYUNIONNAME;\n  union {\n    D3DCOLORVALUE   ambient;\n    D3DCOLORVALUE   dcvAmbient;\n  } DUMMYUNIONNAME1;\n  union {\n    D3DCOLORVALUE   specular;\n    D3DCOLORVALUE   dcvSpecular;\n  } DUMMYUNIONNAME2;\n  union {\n    D3DCOLORVALUE   emissive;\n    D3DCOLORVALUE   dcvEmissive;\n  } DUMMYUNIONNAME3;\n  union {\n    D3DVALUE        power;\n    D3DVALUE        dvPower;\n  } DUMMYUNIONNAME4;\n} D3DMATERIAL7, *LPD3DMATERIAL7;\n\ntypedef enum {\n  D3DLIGHT_POINT          = 1,\n  D3DLIGHT_SPOT           = 2,\n  D3DLIGHT_DIRECTIONAL    = 3,\n  D3DLIGHT_PARALLELPOINT  = 4,\n  D3DLIGHT_GLSPOT         = 5,\n  D3DLIGHT_FORCE_DWORD    = 0x7fffffff\n} D3DLIGHTTYPE;\n\ntypedef struct _D3DLIGHT {\n    DWORD           dwSize;\n    D3DLIGHTTYPE    dltType;\n    D3DCOLORVALUE   dcvColor;\n    D3DVECTOR       dvPosition;\n    D3DVECTOR       dvDirection;\n    D3DVALUE        dvRange;\n    D3DVALUE        dvFalloff;\n    D3DVALUE        dvAttenuation0;\n    D3DVALUE        dvAttenuation1;\n    D3DVALUE        dvAttenuation2;\n    D3DVALUE        dvTheta;\n    D3DVALUE        dvPhi;\n} D3DLIGHT,*LPD3DLIGHT;\n\ntypedef struct _D3DLIGHT7 {\n    D3DLIGHTTYPE    dltType;\n    D3DCOLORVALUE   dcvDiffuse;\n    D3DCOLORVALUE   dcvSpecular;\n    D3DCOLORVALUE   dcvAmbient;\n    D3DVECTOR       dvPosition;\n    D3DVECTOR       dvDirection;\n    D3DVALUE        dvRange;\n    D3DVALUE        dvFalloff;\n    D3DVALUE        dvAttenuation0;\n    D3DVALUE        dvAttenuation1;\n    D3DVALUE        dvAttenuation2;\n    D3DVALUE        dvTheta;\n    D3DVALUE        dvPhi;\n} D3DLIGHT7, *LPD3DLIGHT7;\n\n#define D3DLIGHT_ACTIVE         0x00000001\n#define D3DLIGHT_NO_SPECULAR    0x00000002\n#define D3DLIGHT_ALL (D3DLIGHT_ACTIVE | D3DLIGHT_NO_SPECULAR) /* 0x3 */\n\n#define D3DLIGHT_RANGE_MAX              ((float)sqrt(FLT_MAX))\n\ntypedef struct _D3DLIGHT2 {\n  DWORD           dwSize;\n  D3DLIGHTTYPE    dltType;\n  D3DCOLORVALUE   dcvColor;\n  D3DVECTOR       dvPosition;\n  D3DVECTOR       dvDirection;\n  D3DVALUE        dvRange;\n  D3DVALUE        dvFalloff;\n  D3DVALUE        dvAttenuation0;\n  D3DVALUE        dvAttenuation1;\n  D3DVALUE        dvAttenuation2;\n  D3DVALUE        dvTheta;\n  D3DVALUE        dvPhi;\n  DWORD           dwFlags;\n} D3DLIGHT2, *LPD3DLIGHT2;\n\ntypedef struct _D3DLIGHTDATA {\n  DWORD                dwSize;\n  D3DLIGHTINGELEMENT   *lpIn;\n  DWORD                dwInSize;\n  D3DTLVERTEX          *lpOut;\n  DWORD                dwOutSize;\n} D3DLIGHTDATA, *LPD3DLIGHTDATA;\n\n#define D3DCOLOR_MONO   1\n#define D3DCOLOR_RGB    2\n\ntypedef DWORD D3DCOLORMODEL;\n\n\n#define D3DCLEAR_TARGET   0x00000001\n#define D3DCLEAR_ZBUFFER  0x00000002\n#define D3DCLEAR_STENCIL  0x00000004\n\ntypedef enum _D3DOPCODE {\n  D3DOP_POINT           = 1,\n  D3DOP_LINE            = 2,\n  D3DOP_TRIANGLE        = 3,\n  D3DOP_MATRIXLOAD      = 4,\n  D3DOP_MATRIXMULTIPLY  = 5,\n  D3DOP_STATETRANSFORM  = 6,\n  D3DOP_STATELIGHT      = 7,\n  D3DOP_STATERENDER     = 8,\n  D3DOP_PROCESSVERTICES = 9,\n  D3DOP_TEXTURELOAD     = 10,\n  D3DOP_EXIT            = 11,\n  D3DOP_BRANCHFORWARD   = 12,\n  D3DOP_SPAN            = 13,\n  D3DOP_SETSTATUS       = 14,\n\n  D3DOP_FORCE_DWORD     = 0x7fffffff\n} D3DOPCODE;\n\ntypedef struct _D3DINSTRUCTION {\n  BYTE bOpcode;\n  BYTE bSize;\n  WORD wCount;\n} D3DINSTRUCTION, *LPD3DINSTRUCTION;\n\ntypedef struct _D3DTEXTURELOAD {\n  D3DTEXTUREHANDLE hDestTexture;\n  D3DTEXTUREHANDLE hSrcTexture;\n} D3DTEXTURELOAD, *LPD3DTEXTURELOAD;\n\ntypedef struct _D3DPICKRECORD {\n  BYTE     bOpcode;\n  BYTE     bPad;\n  DWORD    dwOffset;\n  D3DVALUE dvZ;\n} D3DPICKRECORD, *LPD3DPICKRECORD;\n\ntypedef enum {\n  D3DSHADE_FLAT         = 1,\n  D3DSHADE_GOURAUD      = 2,\n  D3DSHADE_PHONG        = 3,\n  D3DSHADE_FORCE_DWORD  = 0x7fffffff\n} D3DSHADEMODE;\n\ntypedef enum {\n  D3DFILL_POINT         = 1,\n  D3DFILL_WIREFRAME     = 2,\n  D3DFILL_SOLID         = 3,\n  D3DFILL_FORCE_DWORD   = 0x7fffffff\n} D3DFILLMODE;\n\ntypedef struct _D3DLINEPATTERN {\n  WORD    wRepeatFactor;\n  WORD    wLinePattern;\n} D3DLINEPATTERN;\n\ntypedef enum {\n  D3DFILTER_NEAREST          = 1,\n  D3DFILTER_LINEAR           = 2,\n  D3DFILTER_MIPNEAREST       = 3,\n  D3DFILTER_MIPLINEAR        = 4,\n  D3DFILTER_LINEARMIPNEAREST = 5,\n  D3DFILTER_LINEARMIPLINEAR  = 6,\n  D3DFILTER_FORCE_DWORD      = 0x7fffffff\n} D3DTEXTUREFILTER;\n\ntypedef enum {\n  D3DBLEND_ZERO            = 1,\n  D3DBLEND_ONE             = 2,\n  D3DBLEND_SRCCOLOR        = 3,\n  D3DBLEND_INVSRCCOLOR     = 4,\n  D3DBLEND_SRCALPHA        = 5,\n  D3DBLEND_INVSRCALPHA     = 6,\n  D3DBLEND_DESTALPHA       = 7,\n  D3DBLEND_INVDESTALPHA    = 8,\n  D3DBLEND_DESTCOLOR       = 9,\n  D3DBLEND_INVDESTCOLOR    = 10,\n  D3DBLEND_SRCALPHASAT     = 11,\n  D3DBLEND_BOTHSRCALPHA    = 12,\n  D3DBLEND_BOTHINVSRCALPHA = 13,\n  D3DBLEND_FORCE_DWORD     = 0x7fffffff\n} D3DBLEND;\n\ntypedef enum {\n  D3DTBLEND_DECAL         = 1,\n  D3DTBLEND_MODULATE      = 2,\n  D3DTBLEND_DECALALPHA    = 3,\n  D3DTBLEND_MODULATEALPHA = 4,\n  D3DTBLEND_DECALMASK     = 5,\n  D3DTBLEND_MODULATEMASK  = 6,\n  D3DTBLEND_COPY          = 7,\n  D3DTBLEND_ADD           = 8,\n  D3DTBLEND_FORCE_DWORD   = 0x7fffffff\n} D3DTEXTUREBLEND;\n\ntypedef enum _D3DTEXTUREADDRESS {\n    D3DTADDRESS_WRAP           = 1,\n    D3DTADDRESS_MIRROR         = 2,\n    D3DTADDRESS_CLAMP          = 3,\n    D3DTADDRESS_BORDER         = 4,\n    D3DTADDRESS_FORCE_DWORD    = 0x7fffffff\n} D3DTEXTUREADDRESS;\n\ntypedef enum {\n  D3DCULL_NONE        = 1,\n  D3DCULL_CW          = 2,\n  D3DCULL_CCW         = 3,\n  D3DCULL_FORCE_DWORD = 0x7fffffff\n} D3DCULL;\n\ntypedef enum {\n  D3DCMP_NEVER        = 1,\n  D3DCMP_LESS         = 2,\n  D3DCMP_EQUAL        = 3,\n  D3DCMP_LESSEQUAL    = 4,\n  D3DCMP_GREATER      = 5,\n  D3DCMP_NOTEQUAL     = 6,\n  D3DCMP_GREATEREQUAL = 7,\n  D3DCMP_ALWAYS       = 8,\n  D3DCMP_FORCE_DWORD  = 0x7fffffff\n} D3DCMPFUNC;\n\ntypedef enum _D3DSTENCILOP {\n  D3DSTENCILOP_KEEP        = 1,\n  D3DSTENCILOP_ZERO        = 2,\n  D3DSTENCILOP_REPLACE     = 3,\n  D3DSTENCILOP_INCRSAT     = 4,\n  D3DSTENCILOP_DECRSAT     = 5,\n  D3DSTENCILOP_INVERT      = 6,\n  D3DSTENCILOP_INCR        = 7,\n  D3DSTENCILOP_DECR        = 8,\n  D3DSTENCILOP_FORCE_DWORD = 0x7fffffff\n} D3DSTENCILOP;\n\ntypedef enum _D3DFOGMODE {\n  D3DFOG_NONE         = 0,\n  D3DFOG_EXP          = 1,\n  D3DFOG_EXP2         = 2,\n  D3DFOG_LINEAR       = 3,\n  D3DFOG_FORCE_DWORD  = 0x7fffffff\n} D3DFOGMODE;\n\ntypedef enum _D3DZBUFFERTYPE {\n  D3DZB_FALSE        = 0,\n  D3DZB_TRUE         = 1,\n  D3DZB_USEW         = 2,\n  D3DZB_FORCE_DWORD  = 0x7fffffff\n} D3DZBUFFERTYPE;\n\ntypedef enum _D3DANTIALIASMODE {\n  D3DANTIALIAS_NONE            = 0,\n  D3DANTIALIAS_SORTDEPENDENT   = 1,\n  D3DANTIALIAS_SORTINDEPENDENT = 2,\n  D3DANTIALIAS_FORCE_DWORD     = 0x7fffffff\n} D3DANTIALIASMODE;\n\ntypedef enum {\n  D3DVT_VERTEX        = 1,\n  D3DVT_LVERTEX       = 2,\n  D3DVT_TLVERTEX      = 3,\n  D3DVT_FORCE_DWORD   = 0x7fffffff\n} D3DVERTEXTYPE;\n\ntypedef enum {\n  D3DPT_POINTLIST     = 1,\n  D3DPT_LINELIST      = 2,\n  D3DPT_LINESTRIP     = 3,\n  D3DPT_TRIANGLELIST  = 4,\n  D3DPT_TRIANGLESTRIP = 5,\n  D3DPT_TRIANGLEFAN   = 6,\n  D3DPT_FORCE_DWORD   = 0x7fffffff\n} D3DPRIMITIVETYPE;\n\n#define D3DSTATE_OVERRIDE_BIAS      256\n\n#define D3DSTATE_OVERRIDE(type) (D3DRENDERSTATETYPE)(((DWORD) (type) + D3DSTATE_OVERRIDE_BIAS))\n\ntypedef enum _D3DTRANSFORMSTATETYPE {\n    D3DTRANSFORMSTATE_WORLD         = 1,\n    D3DTRANSFORMSTATE_VIEW          = 2,\n    D3DTRANSFORMSTATE_PROJECTION    = 3,\n    D3DTRANSFORMSTATE_WORLD1        = 4,\n    D3DTRANSFORMSTATE_WORLD2        = 5,\n    D3DTRANSFORMSTATE_WORLD3        = 6,\n    D3DTRANSFORMSTATE_TEXTURE0      = 16,\n    D3DTRANSFORMSTATE_TEXTURE1      = 17,\n    D3DTRANSFORMSTATE_TEXTURE2      = 18,\n    D3DTRANSFORMSTATE_TEXTURE3      = 19,\n    D3DTRANSFORMSTATE_TEXTURE4      = 20,\n    D3DTRANSFORMSTATE_TEXTURE5      = 21,\n    D3DTRANSFORMSTATE_TEXTURE6      = 22,\n    D3DTRANSFORMSTATE_TEXTURE7      = 23,\n    D3DTRANSFORMSTATE_FORCE_DWORD   = 0x7fffffff\n} D3DTRANSFORMSTATETYPE;\n\ntypedef enum {\n  D3DLIGHTSTATE_MATERIAL      = 1,\n  D3DLIGHTSTATE_AMBIENT       = 2,\n  D3DLIGHTSTATE_COLORMODEL    = 3,\n  D3DLIGHTSTATE_FOGMODE       = 4,\n  D3DLIGHTSTATE_FOGSTART      = 5,\n  D3DLIGHTSTATE_FOGEND        = 6,\n  D3DLIGHTSTATE_FOGDENSITY    = 7,\n  D3DLIGHTSTATE_COLORVERTEX   = 8,\n  D3DLIGHTSTATE_FORCE_DWORD   = 0x7fffffff\n} D3DLIGHTSTATETYPE;\n\ntypedef enum {\n  D3DRENDERSTATE_TEXTUREHANDLE      = 1,\n  D3DRENDERSTATE_ANTIALIAS          = 2,\n  D3DRENDERSTATE_TEXTUREADDRESS     = 3,\n  D3DRENDERSTATE_TEXTUREPERSPECTIVE = 4,\n  D3DRENDERSTATE_WRAPU              = 5, /* <= d3d6 */\n  D3DRENDERSTATE_WRAPV              = 6, /* <= d3d6 */\n  D3DRENDERSTATE_ZENABLE            = 7,\n  D3DRENDERSTATE_FILLMODE           = 8,\n  D3DRENDERSTATE_SHADEMODE          = 9,\n  D3DRENDERSTATE_LINEPATTERN        = 10,\n  D3DRENDERSTATE_MONOENABLE         = 11, /* <= d3d6 */\n  D3DRENDERSTATE_ROP2               = 12, /* <= d3d6 */\n  D3DRENDERSTATE_PLANEMASK          = 13, /* <= d3d6 */\n  D3DRENDERSTATE_ZWRITEENABLE       = 14,\n  D3DRENDERSTATE_ALPHATESTENABLE    = 15,\n  D3DRENDERSTATE_LASTPIXEL          = 16,\n  D3DRENDERSTATE_TEXTUREMAG         = 17,\n  D3DRENDERSTATE_TEXTUREMIN         = 18,\n  D3DRENDERSTATE_SRCBLEND           = 19,\n  D3DRENDERSTATE_DESTBLEND          = 20,\n  D3DRENDERSTATE_TEXTUREMAPBLEND    = 21,\n  D3DRENDERSTATE_CULLMODE           = 22,\n  D3DRENDERSTATE_ZFUNC              = 23,\n  D3DRENDERSTATE_ALPHAREF           = 24,\n  D3DRENDERSTATE_ALPHAFUNC          = 25,\n  D3DRENDERSTATE_DITHERENABLE       = 26,\n  D3DRENDERSTATE_ALPHABLENDENABLE   = 27,\n  D3DRENDERSTATE_FOGENABLE          = 28,\n  D3DRENDERSTATE_SPECULARENABLE     = 29,\n  D3DRENDERSTATE_ZVISIBLE           = 30,\n  D3DRENDERSTATE_SUBPIXEL           = 31, /* <= d3d6 */\n  D3DRENDERSTATE_SUBPIXELX          = 32, /* <= d3d6 */\n  D3DRENDERSTATE_STIPPLEDALPHA      = 33,\n  D3DRENDERSTATE_FOGCOLOR           = 34,\n  D3DRENDERSTATE_FOGTABLEMODE       = 35,\n  D3DRENDERSTATE_FOGTABLESTART      = 36,\n  D3DRENDERSTATE_FOGTABLEEND        = 37,\n  D3DRENDERSTATE_FOGTABLEDENSITY    = 38,\n  D3DRENDERSTATE_FOGSTART           = 36,\n  D3DRENDERSTATE_FOGEND             = 37,\n  D3DRENDERSTATE_FOGDENSITY         = 38,\n  D3DRENDERSTATE_STIPPLEENABLE      = 39, /* <= d3d6 */\n  /* d3d5 */\n  D3DRENDERSTATE_EDGEANTIALIAS      = 40,\n  D3DRENDERSTATE_COLORKEYENABLE     = 41,\n  D3DRENDERSTATE_BORDERCOLOR        = 43,\n  D3DRENDERSTATE_TEXTUREADDRESSU    = 44,\n  D3DRENDERSTATE_TEXTUREADDRESSV    = 45,\n  D3DRENDERSTATE_MIPMAPLODBIAS      = 46, /* <= d3d6 */\n  D3DRENDERSTATE_ZBIAS              = 47,\n  D3DRENDERSTATE_RANGEFOGENABLE     = 48,\n  D3DRENDERSTATE_ANISOTROPY         = 49, /* <= d3d6 */\n  D3DRENDERSTATE_FLUSHBATCH         = 50, /* <= d3d6 */\n  /* d3d6 */\n  D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT = 51, /* <= d3d6 */\n\n  D3DRENDERSTATE_STENCILENABLE      = 52,\n  D3DRENDERSTATE_STENCILFAIL        = 53,\n  D3DRENDERSTATE_STENCILZFAIL       = 54,\n  D3DRENDERSTATE_STENCILPASS        = 55,\n  D3DRENDERSTATE_STENCILFUNC        = 56,\n  D3DRENDERSTATE_STENCILREF         = 57,\n  D3DRENDERSTATE_STENCILMASK        = 58,\n  D3DRENDERSTATE_STENCILWRITEMASK   = 59,\n  D3DRENDERSTATE_TEXTUREFACTOR      = 60,\n\n  D3DRENDERSTATE_STIPPLEPATTERN00   = 64,\n  D3DRENDERSTATE_STIPPLEPATTERN01   = 65,\n  D3DRENDERSTATE_STIPPLEPATTERN02   = 66,\n  D3DRENDERSTATE_STIPPLEPATTERN03   = 67,\n  D3DRENDERSTATE_STIPPLEPATTERN04   = 68,\n  D3DRENDERSTATE_STIPPLEPATTERN05   = 69,\n  D3DRENDERSTATE_STIPPLEPATTERN06   = 70,\n  D3DRENDERSTATE_STIPPLEPATTERN07   = 71,\n  D3DRENDERSTATE_STIPPLEPATTERN08   = 72,\n  D3DRENDERSTATE_STIPPLEPATTERN09   = 73,\n  D3DRENDERSTATE_STIPPLEPATTERN10   = 74,\n  D3DRENDERSTATE_STIPPLEPATTERN11   = 75,\n  D3DRENDERSTATE_STIPPLEPATTERN12   = 76,\n  D3DRENDERSTATE_STIPPLEPATTERN13   = 77,\n  D3DRENDERSTATE_STIPPLEPATTERN14   = 78,\n  D3DRENDERSTATE_STIPPLEPATTERN15   = 79,\n  D3DRENDERSTATE_STIPPLEPATTERN16   = 80,\n  D3DRENDERSTATE_STIPPLEPATTERN17   = 81,\n  D3DRENDERSTATE_STIPPLEPATTERN18   = 82,\n  D3DRENDERSTATE_STIPPLEPATTERN19   = 83,\n  D3DRENDERSTATE_STIPPLEPATTERN20   = 84,\n  D3DRENDERSTATE_STIPPLEPATTERN21   = 85,\n  D3DRENDERSTATE_STIPPLEPATTERN22   = 86,\n  D3DRENDERSTATE_STIPPLEPATTERN23   = 87,\n  D3DRENDERSTATE_STIPPLEPATTERN24   = 88,\n  D3DRENDERSTATE_STIPPLEPATTERN25   = 89,\n  D3DRENDERSTATE_STIPPLEPATTERN26   = 90,\n  D3DRENDERSTATE_STIPPLEPATTERN27   = 91,\n  D3DRENDERSTATE_STIPPLEPATTERN28   = 92,\n  D3DRENDERSTATE_STIPPLEPATTERN29   = 93,\n  D3DRENDERSTATE_STIPPLEPATTERN30   = 94,\n  D3DRENDERSTATE_STIPPLEPATTERN31   = 95,\n\n  D3DRENDERSTATE_WRAP0              = 128,\n  D3DRENDERSTATE_WRAP1              = 129,\n  D3DRENDERSTATE_WRAP2              = 130,\n  D3DRENDERSTATE_WRAP3              = 131,\n  D3DRENDERSTATE_WRAP4              = 132,\n  D3DRENDERSTATE_WRAP5              = 133,\n  D3DRENDERSTATE_WRAP6              = 134,\n  D3DRENDERSTATE_WRAP7              = 135,\n  /* d3d7 */\n  D3DRENDERSTATE_CLIPPING            = 136,\n  D3DRENDERSTATE_LIGHTING            = 137,\n  D3DRENDERSTATE_EXTENTS             = 138,\n  D3DRENDERSTATE_AMBIENT             = 139,\n  D3DRENDERSTATE_FOGVERTEXMODE       = 140,\n  D3DRENDERSTATE_COLORVERTEX         = 141,\n  D3DRENDERSTATE_LOCALVIEWER         = 142,\n  D3DRENDERSTATE_NORMALIZENORMALS    = 143,\n  D3DRENDERSTATE_COLORKEYBLENDENABLE = 144,\n  D3DRENDERSTATE_DIFFUSEMATERIALSOURCE    = 145,\n  D3DRENDERSTATE_SPECULARMATERIALSOURCE   = 146,\n  D3DRENDERSTATE_AMBIENTMATERIALSOURCE    = 147,\n  D3DRENDERSTATE_EMISSIVEMATERIALSOURCE   = 148,\n  D3DRENDERSTATE_VERTEXBLEND              = 151,\n  D3DRENDERSTATE_CLIPPLANEENABLE          = 152,\n\n  D3DRENDERSTATE_FORCE_DWORD        = 0x7fffffff\n\n  /* FIXME: We have some retired values that are being reused for DirectX 7 */\n} D3DRENDERSTATETYPE;\n\ntypedef enum _D3DMATERIALCOLORSOURCE\n{\n    D3DMCS_MATERIAL = 0,\n    D3DMCS_COLOR1   = 1,\n    D3DMCS_COLOR2   = 2,\n    D3DMCS_FORCE_DWORD = 0x7fffffff\n} D3DMATERIALCOLORSOURCE;\n\n#define D3DRENDERSTATE_BLENDENABLE      D3DRENDERSTATE_ALPHABLENDENABLE\n#define D3DRENDERSTATE_WRAPBIAS         __MSABI_LONG(128U)\n#define D3DWRAP_U   __MSABI_LONG(0x00000001)\n#define D3DWRAP_V   __MSABI_LONG(0x00000002)\n\n#define D3DWRAPCOORD_0   __MSABI_LONG(0x00000001)\n#define D3DWRAPCOORD_1   __MSABI_LONG(0x00000002)\n#define D3DWRAPCOORD_2   __MSABI_LONG(0x00000004)\n#define D3DWRAPCOORD_3   __MSABI_LONG(0x00000008)\n\n#define D3DRENDERSTATE_STIPPLEPATTERN(y) (D3DRENDERSTATE_STIPPLEPATTERN00 + (y))\n\ntypedef struct _D3DSTATE {\n  union {\n    D3DTRANSFORMSTATETYPE dtstTransformStateType;\n    D3DLIGHTSTATETYPE     dlstLightStateType;\n    D3DRENDERSTATETYPE    drstRenderStateType;\n  } DUMMYUNIONNAME1;\n  union {\n    DWORD                 dwArg[1];\n    D3DVALUE              dvArg[1];\n  } DUMMYUNIONNAME2;\n} D3DSTATE, *LPD3DSTATE;\n\ntypedef struct _D3DMATRIXLOAD {\n  D3DMATRIXHANDLE hDestMatrix;\n  D3DMATRIXHANDLE hSrcMatrix;\n} D3DMATRIXLOAD, *LPD3DMATRIXLOAD;\n\ntypedef struct _D3DMATRIXMULTIPLY {\n  D3DMATRIXHANDLE hDestMatrix;\n  D3DMATRIXHANDLE hSrcMatrix1;\n  D3DMATRIXHANDLE hSrcMatrix2;\n} D3DMATRIXMULTIPLY, *LPD3DMATRIXMULTIPLY;\n\ntypedef struct _D3DPROCESSVERTICES {\n  DWORD dwFlags;\n  WORD  wStart;\n  WORD  wDest;\n  DWORD dwCount;\n  DWORD dwReserved;\n} D3DPROCESSVERTICES, *LPD3DPROCESSVERTICES;\n\n#define D3DPROCESSVERTICES_TRANSFORMLIGHT       __MSABI_LONG(0x00000000)\n#define D3DPROCESSVERTICES_TRANSFORM            __MSABI_LONG(0x00000001)\n#define D3DPROCESSVERTICES_COPY                 __MSABI_LONG(0x00000002)\n#define D3DPROCESSVERTICES_OPMASK               __MSABI_LONG(0x00000007)\n\n#define D3DPROCESSVERTICES_UPDATEEXTENTS        __MSABI_LONG(0x00000008)\n#define D3DPROCESSVERTICES_NOCOLOR              __MSABI_LONG(0x00000010)\n\ntypedef enum _D3DTEXTURESTAGESTATETYPE\n{\n    D3DTSS_COLOROP        =  1,\n    D3DTSS_COLORARG1      =  2,\n    D3DTSS_COLORARG2      =  3,\n    D3DTSS_ALPHAOP        =  4,\n    D3DTSS_ALPHAARG1      =  5,\n    D3DTSS_ALPHAARG2      =  6,\n    D3DTSS_BUMPENVMAT00   =  7,\n    D3DTSS_BUMPENVMAT01   =  8,\n    D3DTSS_BUMPENVMAT10   =  9,\n    D3DTSS_BUMPENVMAT11   = 10,\n    D3DTSS_TEXCOORDINDEX  = 11,\n    D3DTSS_ADDRESS        = 12,\n    D3DTSS_ADDRESSU       = 13,\n    D3DTSS_ADDRESSV       = 14,\n    D3DTSS_BORDERCOLOR    = 15,\n    D3DTSS_MAGFILTER      = 16,\n    D3DTSS_MINFILTER      = 17,\n    D3DTSS_MIPFILTER      = 18,\n    D3DTSS_MIPMAPLODBIAS  = 19,\n    D3DTSS_MAXMIPLEVEL    = 20,\n    D3DTSS_MAXANISOTROPY  = 21,\n    D3DTSS_BUMPENVLSCALE  = 22,\n    D3DTSS_BUMPENVLOFFSET = 23,\n    D3DTSS_TEXTURETRANSFORMFLAGS = 24,\n    D3DTSS_FORCE_DWORD   = 0x7fffffff\n} D3DTEXTURESTAGESTATETYPE;\n\n#define D3DTSS_TCI_PASSTHRU                             0x00000000\n#define D3DTSS_TCI_CAMERASPACENORMAL                    0x00010000\n#define D3DTSS_TCI_CAMERASPACEPOSITION                  0x00020000\n#define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR          0x00030000\n\ntypedef enum _D3DTEXTUREOP\n{\n    D3DTOP_DISABLE    = 1,\n    D3DTOP_SELECTARG1 = 2,\n    D3DTOP_SELECTARG2 = 3,\n\n    D3DTOP_MODULATE   = 4,\n    D3DTOP_MODULATE2X = 5,\n    D3DTOP_MODULATE4X = 6,\n\n    D3DTOP_ADD          =  7,\n    D3DTOP_ADDSIGNED    =  8,\n    D3DTOP_ADDSIGNED2X  =  9,\n    D3DTOP_SUBTRACT     = 10,\n    D3DTOP_ADDSMOOTH    = 11,\n\n    D3DTOP_BLENDDIFFUSEALPHA    = 12,\n    D3DTOP_BLENDTEXTUREALPHA    = 13,\n    D3DTOP_BLENDFACTORALPHA     = 14,\n    D3DTOP_BLENDTEXTUREALPHAPM  = 15,\n    D3DTOP_BLENDCURRENTALPHA    = 16,\n\n    D3DTOP_PREMODULATE            = 17,\n    D3DTOP_MODULATEALPHA_ADDCOLOR = 18,\n    D3DTOP_MODULATECOLOR_ADDALPHA = 19,\n    D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,\n    D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,\n\n    D3DTOP_BUMPENVMAP           = 22,\n    D3DTOP_BUMPENVMAPLUMINANCE  = 23,\n    D3DTOP_DOTPRODUCT3          = 24,\n\n    D3DTOP_FORCE_DWORD = 0x7fffffff\n} D3DTEXTUREOP;\n\n#define D3DTA_SELECTMASK        0x0000000f\n#define D3DTA_DIFFUSE           0x00000000\n#define D3DTA_CURRENT           0x00000001\n#define D3DTA_TEXTURE           0x00000002\n#define D3DTA_TFACTOR           0x00000003\n#define D3DTA_SPECULAR          0x00000004\n#define D3DTA_COMPLEMENT        0x00000010\n#define D3DTA_ALPHAREPLICATE    0x00000020\n\ntypedef enum _D3DTEXTUREMAGFILTER\n{\n    D3DTFG_POINT        = 1,\n    D3DTFG_LINEAR       = 2,\n    D3DTFG_FLATCUBIC    = 3,\n    D3DTFG_GAUSSIANCUBIC = 4,\n    D3DTFG_ANISOTROPIC  = 5,\n    D3DTFG_FORCE_DWORD  = 0x7fffffff\n} D3DTEXTUREMAGFILTER;\n\ntypedef enum _D3DTEXTUREMINFILTER\n{\n    D3DTFN_POINT        = 1,\n    D3DTFN_LINEAR       = 2,\n    D3DTFN_ANISOTROPIC  = 3,\n    D3DTFN_FORCE_DWORD  = 0x7fffffff\n} D3DTEXTUREMINFILTER;\n\ntypedef enum _D3DTEXTUREMIPFILTER\n{\n    D3DTFP_NONE         = 1,\n    D3DTFP_POINT        = 2,\n    D3DTFP_LINEAR       = 3,\n    D3DTFP_FORCE_DWORD  = 0x7fffffff\n} D3DTEXTUREMIPFILTER;\n\n#define D3DTRIFLAG_START                        __MSABI_LONG(0x00000000)\n#define D3DTRIFLAG_STARTFLAT(len) (len)\n#define D3DTRIFLAG_ODD                          __MSABI_LONG(0x0000001e)\n#define D3DTRIFLAG_EVEN                         __MSABI_LONG(0x0000001f)\n\n#define D3DTRIFLAG_EDGEENABLE1                  __MSABI_LONG(0x00000100)\n#define D3DTRIFLAG_EDGEENABLE2                  __MSABI_LONG(0x00000200)\n#define D3DTRIFLAG_EDGEENABLE3                  __MSABI_LONG(0x00000400)\n#define D3DTRIFLAG_EDGEENABLETRIANGLE \\\n        (D3DTRIFLAG_EDGEENABLE1 | D3DTRIFLAG_EDGEENABLE2 | D3DTRIFLAG_EDGEENABLE3)\n\ntypedef struct _D3DTRIANGLE {\n  union {\n    WORD v1;\n    WORD wV1;\n  } DUMMYUNIONNAME1;\n  union {\n    WORD v2;\n    WORD wV2;\n  } DUMMYUNIONNAME2;\n  union {\n    WORD v3;\n    WORD wV3;\n  } DUMMYUNIONNAME3;\n  WORD     wFlags;\n} D3DTRIANGLE, *LPD3DTRIANGLE;\n\ntypedef struct _D3DLINE {\n  union {\n    WORD v1;\n    WORD wV1;\n  } DUMMYUNIONNAME1;\n  union {\n    WORD v2;\n    WORD wV2;\n  } DUMMYUNIONNAME2;\n} D3DLINE, *LPD3DLINE;\n\ntypedef struct _D3DSPAN {\n  WORD wCount;\n  WORD wFirst;\n} D3DSPAN, *LPD3DSPAN;\n\ntypedef struct _D3DPOINT {\n  WORD wCount;\n  WORD wFirst;\n} D3DPOINT, *LPD3DPOINT;\n\ntypedef struct _D3DBRANCH {\n  DWORD dwMask;\n  DWORD dwValue;\n  BOOL  bNegate;\n  DWORD dwOffset;\n} D3DBRANCH, *LPD3DBRANCH;\n\ntypedef struct _D3DSTATUS {\n  DWORD   dwFlags;\n  DWORD   dwStatus;\n  D3DRECT drExtent;\n} D3DSTATUS, *LPD3DSTATUS;\n\n#define D3DSETSTATUS_STATUS   __MSABI_LONG(0x00000001)\n#define D3DSETSTATUS_EXTENTS  __MSABI_LONG(0x00000002)\n#define D3DSETSTATUS_ALL      (D3DSETSTATUS_STATUS | D3DSETSTATUS_EXTENTS)\n\ntypedef struct _D3DCLIPSTATUS {\n  DWORD dwFlags;\n  DWORD dwStatus;\n  float minx, maxx;\n  float miny, maxy;\n  float minz, maxz;\n} D3DCLIPSTATUS, *LPD3DCLIPSTATUS;\n\n#define D3DCLIPSTATUS_STATUS        __MSABI_LONG(0x00000001)\n#define D3DCLIPSTATUS_EXTENTS2      __MSABI_LONG(0x00000002)\n#define D3DCLIPSTATUS_EXTENTS3      __MSABI_LONG(0x00000004)\n\ntypedef struct {\n  DWORD        dwSize;\n  DWORD        dwTrianglesDrawn;\n  DWORD        dwLinesDrawn;\n  DWORD        dwPointsDrawn;\n  DWORD        dwSpansDrawn;\n  DWORD        dwVerticesProcessed;\n} D3DSTATS, *LPD3DSTATS;\n\n#define D3DEXECUTE_CLIPPED       __MSABI_LONG(0x00000001)\n#define D3DEXECUTE_UNCLIPPED     __MSABI_LONG(0x00000002)\n\ntypedef struct _D3DEXECUTEDATA {\n  DWORD     dwSize;\n  DWORD     dwVertexOffset;\n  DWORD     dwVertexCount;\n  DWORD     dwInstructionOffset;\n  DWORD     dwInstructionLength;\n  DWORD     dwHVertexOffset;\n  D3DSTATUS dsStatus;\n} D3DEXECUTEDATA, *LPD3DEXECUTEDATA;\n\n#define D3DPAL_FREE 0x00\n#define D3DPAL_READONLY 0x40\n#define D3DPAL_RESERVED 0x80\n\ntypedef struct _D3DVERTEXBUFFERDESC {\n  DWORD dwSize;\n  DWORD dwCaps;\n  DWORD dwFVF;\n  DWORD dwNumVertices;\n} D3DVERTEXBUFFERDESC, *LPD3DVERTEXBUFFERDESC;\n\n#define D3DVBCAPS_SYSTEMMEMORY      __MSABI_LONG(0x00000800)\n#define D3DVBCAPS_WRITEONLY         __MSABI_LONG(0x00010000)\n#define D3DVBCAPS_OPTIMIZED         __MSABI_LONG(0x80000000)\n#define D3DVBCAPS_DONOTCLIP         __MSABI_LONG(0x00000001)\n\n#define D3DVOP_LIGHT       (1 << 10)\n#define D3DVOP_TRANSFORM   (1 << 0)\n#define D3DVOP_CLIP        (1 << 2)\n#define D3DVOP_EXTENTS     (1 << 3)\n\n#define D3DMAXNUMVERTICES    ((1<<16) - 1)\n\n#define D3DMAXNUMPRIMITIVES  ((1<<16) - 1)\n\n#define D3DPV_DONOTCOPYDATA (1 << 0)\n\n#define D3DFVF_RESERVED0        0x001\n#define D3DFVF_POSITION_MASK    0x00E\n#define D3DFVF_XYZ              0x002\n#define D3DFVF_XYZRHW           0x004\n#define D3DFVF_XYZB1            0x006\n#define D3DFVF_XYZB2            0x008\n#define D3DFVF_XYZB3            0x00a\n#define D3DFVF_XYZB4            0x00c\n#define D3DFVF_XYZB5            0x00e\n\n#define D3DFVF_NORMAL           0x010\n#define D3DFVF_RESERVED1        0x020\n#define D3DFVF_DIFFUSE          0x040\n#define D3DFVF_SPECULAR         0x080\n#define D3DFVF_TEXCOUNT_MASK    0xf00\n#define D3DFVF_TEXCOUNT_SHIFT   8\n#define D3DFVF_TEX0             0x000\n#define D3DFVF_TEX1             0x100\n#define D3DFVF_TEX2             0x200\n#define D3DFVF_TEX3             0x300\n#define D3DFVF_TEX4             0x400\n#define D3DFVF_TEX5             0x500\n#define D3DFVF_TEX6             0x600\n#define D3DFVF_TEX7             0x700\n#define D3DFVF_TEX8             0x800\n\n#define D3DFVF_RESERVED2        0xf000\n\n#define D3DFVF_VERTEX ( D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1 )\n#define D3DFVF_LVERTEX ( D3DFVF_XYZ | D3DFVF_RESERVED1 | D3DFVF_DIFFUSE | \\\n                         D3DFVF_SPECULAR | D3DFVF_TEX1 )\n#define D3DFVF_TLVERTEX ( D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | \\\n                          D3DFVF_TEX1 )\n\ntypedef struct _D3DDP_PTRSTRIDE\n{\n  void *lpvData;\n  DWORD dwStride;\n} D3DDP_PTRSTRIDE;\n\n#define D3DDP_MAXTEXCOORD 8\n\ntypedef struct _D3DDRAWPRIMITIVESTRIDEDDATA  {\n  D3DDP_PTRSTRIDE position;\n  D3DDP_PTRSTRIDE normal;\n  D3DDP_PTRSTRIDE diffuse;\n  D3DDP_PTRSTRIDE specular;\n  D3DDP_PTRSTRIDE textureCoords[D3DDP_MAXTEXCOORD];\n} D3DDRAWPRIMITIVESTRIDEDDATA ,*LPD3DDRAWPRIMITIVESTRIDEDDATA;\n\n#define D3DVIS_INSIDE_FRUSTUM       0\n#define D3DVIS_INTERSECT_FRUSTUM    1\n#define D3DVIS_OUTSIDE_FRUSTUM      2\n#define D3DVIS_INSIDE_LEFT          0\n#define D3DVIS_INTERSECT_LEFT       (1 << 2)\n#define D3DVIS_OUTSIDE_LEFT         (2 << 2)\n#define D3DVIS_INSIDE_RIGHT         0\n#define D3DVIS_INTERSECT_RIGHT      (1 << 4)\n#define D3DVIS_OUTSIDE_RIGHT        (2 << 4)\n#define D3DVIS_INSIDE_TOP           0\n#define D3DVIS_INTERSECT_TOP        (1 << 6)\n#define D3DVIS_OUTSIDE_TOP          (2 << 6)\n#define D3DVIS_INSIDE_BOTTOM        0\n#define D3DVIS_INTERSECT_BOTTOM     (1 << 8)\n#define D3DVIS_OUTSIDE_BOTTOM       (2 << 8)\n#define D3DVIS_INSIDE_NEAR          0\n#define D3DVIS_INTERSECT_NEAR       (1 << 10)\n#define D3DVIS_OUTSIDE_NEAR         (2 << 10)\n#define D3DVIS_INSIDE_FAR           0\n#define D3DVIS_INTERSECT_FAR        (1 << 12)\n#define D3DVIS_OUTSIDE_FAR          (2 << 12)\n\n#define D3DVIS_MASK_FRUSTUM         (3 << 0)\n#define D3DVIS_MASK_LEFT            (3 << 2)\n#define D3DVIS_MASK_RIGHT           (3 << 4)\n#define D3DVIS_MASK_TOP             (3 << 6)\n#define D3DVIS_MASK_BOTTOM          (3 << 8)\n#define D3DVIS_MASK_NEAR            (3 << 10)\n#define D3DVIS_MASK_FAR             (3 << 12)\n\n#define D3DDEVINFOID_TEXTUREMANAGER    1\n#define D3DDEVINFOID_D3DTEXTUREMANAGER 2\n#define D3DDEVINFOID_TEXTURING         3\n\ntypedef enum _D3DSTATEBLOCKTYPE\n{\n    D3DSBT_ALL           = 1,\n    D3DSBT_PIXELSTATE    = 2,\n    D3DSBT_VERTEXSTATE   = 3,\n    D3DSBT_FORCE_DWORD   = 0xffffffff\n} D3DSTATEBLOCKTYPE;\n\ntypedef enum _D3DVERTEXBLENDFLAGS\n{\n    D3DVBLEND_DISABLE  = 0,\n    D3DVBLEND_1WEIGHT  = 1,\n    D3DVBLEND_2WEIGHTS = 2,\n    D3DVBLEND_3WEIGHTS = 3,\n} D3DVERTEXBLENDFLAGS;\n\ntypedef enum _D3DTEXTURETRANSFORMFLAGS {\n    D3DTTFF_DISABLE         = 0,\n    D3DTTFF_COUNT1          = 1,\n    D3DTTFF_COUNT2          = 2,\n    D3DTTFF_COUNT3          = 3,\n    D3DTTFF_COUNT4          = 4,\n    D3DTTFF_PROJECTED       = 256,\n    D3DTTFF_FORCE_DWORD     = 0x7fffffff\n} D3DTEXTURETRANSFORMFLAGS;\n\n#define D3DFVF_TEXTUREFORMAT2 0\n#define D3DFVF_TEXTUREFORMAT1 3\n#define D3DFVF_TEXTUREFORMAT3 1\n#define D3DFVF_TEXTUREFORMAT4 2\n\n#define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))\n#define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)\n#define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))\n#define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))\n\n#ifdef __i386__\n#include <poppack.h>\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/d3dukmdt.h",
    "content": "/*\n * Copyright 2016 Henri Verbeet for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_D3DUKMDT_H\n#define __WINE_D3DUKMDT_H\n\n#ifndef MAKEFOURCC\n#define MAKEFOURCC(ch0, ch1, ch2, ch3) \\\n        ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \\\n        ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24))\n#endif /* MAKEFOURCC */\n\ntypedef enum _D3DDDIFORMAT\n{\n    D3DDDIFMT_UNKNOWN                 = 0,\n    D3DDDIFMT_R8G8B8                  = 0x14,\n    D3DDDIFMT_A8R8G8B8                = 0x15,\n    D3DDDIFMT_X8R8G8B8                = 0x16,\n    D3DDDIFMT_R5G6B5                  = 0x17,\n    D3DDDIFMT_X1R5G5B5                = 0x18,\n    D3DDDIFMT_A1R5G5B5                = 0x19,\n    D3DDDIFMT_A4R4G4B4                = 0x1a,\n    D3DDDIFMT_R3G3B2                  = 0x1b,\n    D3DDDIFMT_A8                      = 0x1c,\n    D3DDDIFMT_A8R3G3B2                = 0x1d,\n    D3DDDIFMT_X4R4G4B4                = 0x1e,\n    D3DDDIFMT_A2B10G10R10             = 0x1f,\n    D3DDDIFMT_A8B8G8R8                = 0x20,\n    D3DDDIFMT_X8B8G8R8                = 0x21,\n    D3DDDIFMT_G16R16                  = 0x22,\n    D3DDDIFMT_A2R10G10B10             = 0x23,\n    D3DDDIFMT_A16B16G16R16            = 0x24,\n    D3DDDIFMT_A8P8                    = 0x28,\n    D3DDDIFMT_P8                      = 0x29,\n    D3DDDIFMT_L8                      = 0x32,\n    D3DDDIFMT_A8L8                    = 0x33,\n    D3DDDIFMT_A4L4                    = 0x34,\n    D3DDDIFMT_V8U8                    = 0x3c,\n    D3DDDIFMT_L6V5U5                  = 0x3d,\n    D3DDDIFMT_X8L8V8U8                = 0x3e,\n    D3DDDIFMT_Q8W8V8U8                = 0x3f,\n    D3DDDIFMT_V16U16                  = 0x40,\n    D3DDDIFMT_W11V11U10               = 0x41,\n    D3DDDIFMT_A2W10V10U10             = 0x43,\n    D3DDDIFMT_D16_LOCKABLE            = 0x46,\n    D3DDDIFMT_D32                     = 0x47,\n    D3DDDIFMT_S1D15                   = 0x48,\n    D3DDDIFMT_D15S1                   = 0x49,\n    D3DDDIFMT_S8D24                   = 0x4a,\n    D3DDDIFMT_D24S8                   = 0x4b,\n    D3DDDIFMT_X8D24                   = 0x4c,\n    D3DDDIFMT_D24X8                   = 0x4d,\n    D3DDDIFMT_X4S4D24                 = 0x4e,\n    D3DDDIFMT_D24X4S4                 = 0x4f,\n    D3DDDIFMT_D16                     = 0x50,\n    D3DDDIFMT_L16                     = 0x51,\n    D3DDDIFMT_D32F_LOCKABLE           = 0x52,\n    D3DDDIFMT_D24FS8                  = 0x53,\n    D3DDDIFMT_D32_LOCKABLE            = 0x54,\n    D3DDDIFMT_S8_LOCKABLE             = 0x55,\n    D3DDDIFMT_G8R8                    = 0x5b,\n    D3DDDIFMT_R8                      = 0x5c,\n    D3DDDIFMT_VERTEXDATA              = 0x64,\n    D3DDDIFMT_INDEX16                 = 0x65,\n    D3DDDIFMT_INDEX32                 = 0x66,\n    D3DDDIFMT_Q16W16V16U16            = 0x6e,\n    D3DDDIFMT_R16F                    = 0x6f,\n    D3DDDIFMT_G16R16F                 = 0x70,\n    D3DDDIFMT_A16B16G16R16F           = 0x71,\n    D3DDDIFMT_R32F                    = 0x72,\n    D3DDDIFMT_G32R32F                 = 0x73,\n    D3DDDIFMT_A32B32G32R32F           = 0x74,\n    D3DDDIFMT_CxV8U8                  = 0x75,\n    D3DDDIFMT_A1                      = 0x76,\n    D3DDDIFMT_A2B10G10R10_XR_BIAS     = 0x77,\n    D3DDDIFMT_DXVACOMPBUFFER_BASE     = 0x96,\n    D3DDDIFMT_PICTUREPARAMSDATA       = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0,\n    D3DDDIFMT_MACROBLOCKDATA          = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x01,\n    D3DDDIFMT_RESIDUALDIFFERENCEDATA  = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x02,\n    D3DDDIFMT_DEBLOCKINGDATA          = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x03,\n    D3DDDIFMT_INVERSEQUANTIZATIONDATA = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x04,\n    D3DDDIFMT_SLICECONTROLDATA        = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x05,\n    D3DDDIFMT_BITSTREAMDATA           = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x06,\n    D3DDDIFMT_MOTIONVECTORBUFFER      = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x07,\n    D3DDDIFMT_FILMGRAINBUFFER         = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x08,\n    D3DDDIFMT_DXVA_RESERVED9          = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x09,\n    D3DDDIFMT_DXVA_RESERVED10         = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x0a,\n    D3DDDIFMT_DXVA_RESERVED11         = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x0b,\n    D3DDDIFMT_DXVA_RESERVED12         = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x0c,\n    D3DDDIFMT_DXVA_RESERVED13         = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x0d,\n    D3DDDIFMT_DXVA_RESERVED14         = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x0e,\n    D3DDDIFMT_DXVA_RESERVED15         = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x0f,\n    D3DDDIFMT_DXVA_RESERVED16         = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x10,\n    D3DDDIFMT_DXVA_RESERVED17         = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x11,\n    D3DDDIFMT_DXVA_RESERVED18         = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x12,\n    D3DDDIFMT_DXVA_RESERVED19         = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x13,\n    D3DDDIFMT_DXVA_RESERVED20         = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x14,\n    D3DDDIFMT_DXVA_RESERVED21         = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x15,\n    D3DDDIFMT_DXVA_RESERVED22         = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x16,\n    D3DDDIFMT_DXVA_RESERVED23         = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x17,\n    D3DDDIFMT_DXVA_RESERVED24         = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x18,\n    D3DDDIFMT_DXVA_RESERVED25         = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x19,\n    D3DDDIFMT_DXVA_RESERVED26         = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x1a,\n    D3DDDIFMT_DXVA_RESERVED27         = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x1b,\n    D3DDDIFMT_DXVA_RESERVED28         = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x1c,\n    D3DDDIFMT_DXVA_RESERVED29         = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x1d,\n    D3DDDIFMT_DXVA_RESERVED30         = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x1e,\n    D3DDDIFMT_DXVA_RESERVED31         = D3DDDIFMT_DXVACOMPBUFFER_BASE + 0x1f,\n    D3DDDIFMT_DXVACOMPBUFFER_MAX      = D3DDDIFMT_DXVA_RESERVED31,\n    D3DDDIFMT_BINARYBUFFER            = 0xc7,\n    D3DDDIFMT_DXT1                    = MAKEFOURCC('D', 'X', 'T', '1'),\n    D3DDDIFMT_DXT2                    = MAKEFOURCC('D', 'X', 'T', '2'),\n    D3DDDIFMT_DXT3                    = MAKEFOURCC('D', 'X', 'T', '3'),\n    D3DDDIFMT_DXT4                    = MAKEFOURCC('D', 'X', 'T', '4'),\n    D3DDDIFMT_DXT5                    = MAKEFOURCC('D', 'X', 'T', '5'),\n    D3DDDIFMT_G8R8_G8B8               = MAKEFOURCC('G', 'R', 'G', 'B'),\n    D3DDDIFMT_MULTI2_ARGB8            = MAKEFOURCC('M', 'E', 'T', '1'),\n    D3DDDIFMT_R8G8_B8G8               = MAKEFOURCC('R', 'G', 'B', 'G'),\n    D3DDDIFMT_UYVY                    = MAKEFOURCC('U', 'Y', 'V', 'Y'),\n    D3DDDIFMT_YUY2                    = MAKEFOURCC('Y', 'U', 'Y', '2'),\n    D3DDDIFMT_FORCE_UINT              = 0x7fffffff,\n} D3DDDIFORMAT;\n\n#endif /* __WINE_D3DUKMDT_H */\n"
  },
  {
    "path": "wine/windows/d3dvec.inl",
    "content": "/*\n * Copyright (C) 2000 Ove Kaaven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_D3DVEC_INL\n#define __WINE_D3DVEC_INL\n\n#include <math.h>\n\n/*** constructors ***/\n\ninline _D3DVECTOR::_D3DVECTOR(D3DVALUE f)\n{\n  x = y = z = f;\n}\n\ninline _D3DVECTOR::_D3DVECTOR(D3DVALUE _x, D3DVALUE _y, D3DVALUE _z)\n{\n  x = _x; y = _y; z = _z;\n}\n\n/*** assignment operators ***/\n\ninline _D3DVECTOR& _D3DVECTOR::operator += (const _D3DVECTOR& v)\n{\n  x += v.x; y += v.y; z += v.z;\n  return *this;\n}\n\ninline _D3DVECTOR& _D3DVECTOR::operator -= (const _D3DVECTOR& v)\n{\n  x -= v.x; y -= v.y; z -= v.z;\n  return *this;\n}\n\ninline _D3DVECTOR& _D3DVECTOR::operator *= (const _D3DVECTOR& v)\n{\n  x *= v.x; y *= v.y; z *= v.z;\n  return *this;\n}\n\ninline _D3DVECTOR& _D3DVECTOR::operator /= (const _D3DVECTOR& v)\n{\n  x /= v.x; y /= v.y; z /= v.z;\n  return *this;\n}\n\ninline _D3DVECTOR& _D3DVECTOR::operator *= (D3DVALUE s)\n{\n  x *= s; y *= s; z *= s;\n  return *this;\n}\n\ninline _D3DVECTOR& _D3DVECTOR::operator /= (D3DVALUE s)\n{\n  x /= s; y /= s; z /= s;\n  return *this;\n}\n\n/*** unary operators ***/\n\ninline _D3DVECTOR operator + (const _D3DVECTOR& v)\n{\n  return v;\n}\n\ninline _D3DVECTOR operator - (const _D3DVECTOR& v)\n{\n  return _D3DVECTOR(-v.x, -v.y, -v.z);\n}\n\n/*** binary operators ***/\n\ninline _D3DVECTOR operator + (const _D3DVECTOR& v1, const _D3DVECTOR& v2)\n{\n  return _D3DVECTOR(v1.x+v2.x, v1.y+v2.y, v1.z+v2.z);\n}\n\ninline _D3DVECTOR operator - (const _D3DVECTOR& v1, const _D3DVECTOR& v2)\n{\n  return _D3DVECTOR(v1.x-v2.x, v1.y-v2.y, v1.z-v2.z);\n}\n\ninline _D3DVECTOR operator * (const _D3DVECTOR& v, D3DVALUE s)\n{\n  return _D3DVECTOR(v.x*s, v.y*s, v.z*s);\n}\n\ninline _D3DVECTOR operator * (D3DVALUE s, const _D3DVECTOR& v)\n{\n  return _D3DVECTOR(v.x*s, v.y*s, v.z*s);\n}\n\ninline _D3DVECTOR operator / (const _D3DVECTOR& v, D3DVALUE s)\n{\n  return _D3DVECTOR(v.x/s, v.y/s, v.z/s);\n}\n\ninline D3DVALUE SquareMagnitude(const _D3DVECTOR& v)\n{\n  return v.x*v.x + v.y*v.y + v.z*v.z; /* DotProduct(v, v) */\n}\n\ninline D3DVALUE Magnitude(const _D3DVECTOR& v)\n{\n  return sqrt(SquareMagnitude(v));\n}\n\ninline _D3DVECTOR Normalize(const _D3DVECTOR& v)\n{\n  return v / Magnitude(v);\n}\n\ninline D3DVALUE DotProduct(const _D3DVECTOR& v1, const _D3DVECTOR& v2)\n{\n  return v1.x*v2.x + v1.y*v2.y + v1.z*v2.z;\n}\n\ninline _D3DVECTOR CrossProduct(const _D3DVECTOR& v1, const _D3DVECTOR& v2)\n{\n  _D3DVECTOR res;\n  /* this is a left-handed cross product, right? */\n  res.x = v1.y * v2.z - v1.z * v2.y;\n  res.y = v1.z * v2.x - v1.x * v2.z;\n  res.z = v1.x * v2.y - v1.y * v2.x;\n  return res;\n}\n\n#endif\n"
  },
  {
    "path": "wine/windows/d3dx10.h",
    "content": "/*\n * Copyright 2015 Andrey Gusev\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __D3DX10_H__\n#define __D3DX10_H__\n\n#include <limits.h>\n#include <float.h>\n\n#define D3DX10_DEFAULT        (0xffffffffu)\n#define D3DX10_FROM_FILE      (0xfffffffdu)\n#define DXGI_FORMAT_FROM_FILE ((DXGI_FORMAT)0xfffffffdu)\n\n#include \"d3d10.h\"\n#include \"d3dx10math.h\"\n#include \"d3dx10core.h\"\n#include \"d3dx10async.h\"\n#include \"d3dx10tex.h\"\n\n#define _FACDD 0x876\n#define MAKE_DDHRESULT(code) MAKE_HRESULT(1, _FACDD, code)\n\nenum _D3DX10_ERR\n{\n    D3DX10_ERR_CANNOT_MODIFY_INDEX_BUFFER = MAKE_DDHRESULT(2900),\n    D3DX10_ERR_INVALID_MESH               = MAKE_DDHRESULT(2901),\n    D3DX10_ERR_CANNOT_ATTR_SORT           = MAKE_DDHRESULT(2902),\n    D3DX10_ERR_SKINNING_NOT_SUPPORTED     = MAKE_DDHRESULT(2903),\n    D3DX10_ERR_TOO_MANY_INFLUENCES        = MAKE_DDHRESULT(2904),\n    D3DX10_ERR_INVALID_DATA               = MAKE_DDHRESULT(2905),\n    D3DX10_ERR_LOADED_MESH_HAS_NO_DATA    = MAKE_DDHRESULT(2906),\n    D3DX10_ERR_DUPLICATE_NAMED_FRAGMENT   = MAKE_DDHRESULT(2907),\n    D3DX10_ERR_CANNOT_REMOVE_LAST_ITEM    = MAKE_DDHRESULT(2908)\n};\n\n#endif\n"
  },
  {
    "path": "wine/windows/d3dx10async.h",
    "content": "/*\n * Copyright 2015 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __D3DX10ASYNC_H__\n#define __D3DX10ASYNC_H__\n\n#include \"d3dx10.h\"\n\nHRESULT WINAPI D3DX10CompileFromMemory(const char *data, SIZE_T data_size, const char *filename,\n        const D3D10_SHADER_MACRO *defines, ID3D10Include *include, const char *entry_point,\n        const char *target, UINT sflags, UINT eflags, ID3DX10ThreadPump *pump, ID3D10Blob **shader,\n        ID3D10Blob **error_messages, HRESULT *hresult);\n\nHRESULT WINAPI D3DX10CreateEffectFromFileA(const char *filename, const D3D10_SHADER_MACRO *defines,\n        ID3D10Include *include, const char *profile, UINT hlslflags, UINT fxflags, ID3D10Device *device,\n        ID3D10EffectPool *effectpool, ID3DX10ThreadPump *pump, ID3D10Effect **effect, ID3D10Blob **errors,\n        HRESULT *hresult);\n\nHRESULT WINAPI D3DX10CreateEffectFromFileW(const WCHAR *filename, const D3D10_SHADER_MACRO *defines,\n        ID3D10Include *include, const char *profile, UINT hlslflags, UINT fxflags, ID3D10Device *device,\n        ID3D10EffectPool *effectpool, ID3DX10ThreadPump *pump, ID3D10Effect **effect, ID3D10Blob **errors,\n        HRESULT *hresult);\n\nHRESULT WINAPI D3DX10CreateEffectFromMemory(const void *data, SIZE_T datasize, const char *filename,\n        const D3D10_SHADER_MACRO *defines, ID3D10Include *include, const char *profile, UINT hlslflags,\n        UINT fxflags, ID3D10Device *device, ID3D10EffectPool *effectpool, ID3DX10ThreadPump *pump,\n        ID3D10Effect **effect, ID3D10Blob **errors, HRESULT *hresult);\n\nHRESULT WINAPI D3DX10CreateEffectPoolFromFileA(const char *filename, const D3D10_SHADER_MACRO *defines,\n        ID3D10Include *include, const char *profile, UINT hlslflags, UINT fxflags, ID3D10Device *device,\n        ID3DX10ThreadPump *pump, ID3D10EffectPool **effectpool, ID3D10Blob **errors, HRESULT *hresult);\n\nHRESULT WINAPI D3DX10CreateEffectPoolFromFileW(const WCHAR *filename, const D3D10_SHADER_MACRO *defines,\n        ID3D10Include *include, const char *profile, UINT hlslflags, UINT fxflags, ID3D10Device *device,\n        ID3DX10ThreadPump *pump, ID3D10EffectPool **effectpool, ID3D10Blob **errors, HRESULT *hresult);\n\nHRESULT WINAPI D3DX10CreateEffectPoolFromMemory(const void *data, SIZE_T datasize, const char *filename,\n        const D3D10_SHADER_MACRO *defines, ID3D10Include *include, const char *profile, UINT hlslflags,\n        UINT fxflags, ID3D10Device *device, ID3DX10ThreadPump *pump, ID3D10EffectPool **effectpool,\n        ID3D10Blob **errors, HRESULT *hresult);\n\nHRESULT WINAPI D3DX10PreprocessShaderFromMemory(const char *data, SIZE_T data_size, const char *filename,\n        const D3D10_SHADER_MACRO *defines, ID3DInclude *include, ID3DX10ThreadPump *pump, ID3D10Blob **shader_text,\n        ID3D10Blob **errors, HRESULT *hresult);\n\nHRESULT WINAPI D3DX10CreateAsyncFileLoaderW(const WCHAR *filename, ID3DX10DataLoader **loader);\nHRESULT WINAPI D3DX10CreateAsyncFileLoaderA(const char *filename, ID3DX10DataLoader **loader);\nHRESULT WINAPI D3DX10CreateAsyncMemoryLoader(const void *data, SIZE_T datasize, ID3DX10DataLoader **loader);\nHRESULT WINAPI D3DX10CreateAsyncResourceLoaderA(HMODULE module, const char *resource, ID3DX10DataLoader **loader);\nHRESULT WINAPI D3DX10CreateAsyncResourceLoaderW(HMODULE module, const WCHAR *resource, ID3DX10DataLoader **loader);\n\n#endif\n"
  },
  {
    "path": "wine/windows/d3dx10core.idl",
    "content": "/*\n * Copyright 2015 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"dxgi.idl\";\nimport \"d3dcommon.idl\";\n\n[\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3DX10DataLoader\n{\n    HRESULT Load();\n    HRESULT Decompress([out] void **data, [in] SIZE_T *bytes);\n    HRESULT Destroy();\n}\n\n[\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3DX10DataProcessor\n{\n    HRESULT Process([in] void *data, [in] SIZE_T bytes);\n    HRESULT CreateDeviceObject([out] void **dataobject);\n    HRESULT Destroy();\n}\n\n\n[\n    object,\n    local,\n    pointer_default(unique),\n    uuid(c93fecfa-6967-478a-abbc-402d90621fcb)\n]\ninterface ID3DX10ThreadPump : IUnknown\n{\n    HRESULT AddWorkItem([in] ID3DX10DataLoader *loader, [in] ID3DX10DataProcessor *processor,\n                        [in] HRESULT *result, [out] void **object);\n    UINT GetWorkItemCount();\n\n    HRESULT WaitForAllItems();\n    HRESULT ProcessDeviceWorkItems([in] UINT count);\n\n    HRESULT PurgeAllItems();\n    HRESULT GetQueueStatus([in] UINT *queue, [in] UINT *processqueue, [in] UINT *devicequeue);\n}\n\ncpp_quote(\"HRESULT WINAPI D3DX10UnsetAllDeviceObjects(ID3D10Device *device);\")\ncpp_quote(\"HRESULT WINAPI D3DX10CreateDevice(IDXGIAdapter *adapter, D3D10_DRIVER_TYPE driver_type,\")\ncpp_quote(\"        HMODULE swrast, unsigned int flags, ID3D10Device **device);\")\ncpp_quote(\"HRESULT WINAPI D3DX10CreateDeviceAndSwapChain(IDXGIAdapter *adapter, D3D10_DRIVER_TYPE driver_type,\")\ncpp_quote(\"        HMODULE swrast, unsigned int flags, DXGI_SWAP_CHAIN_DESC *desc, IDXGISwapChain **swapchain,\")\ncpp_quote(\"        ID3D10Device **device);\")\ncpp_quote(\"HRESULT WINAPI D3DX10GetFeatureLevel1(ID3D10Device *device, ID3D10Device1 **device1);\")\n"
  },
  {
    "path": "wine/windows/d3dx10math.h",
    "content": "/*\n * Copyright (C) 2016 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"d3dx10.h\"\n\n/* This guard is the same as D3DX9 to prevent double-inclusion */\n#ifndef __D3DX9MATH_H__\n#define __D3DX9MATH_H__\n\n#include <math.h>\n\ntypedef enum _D3DX_CPU_OPTIMIZATION\n{\n    D3DX_NOT_OPTIMIZED,\n    D3DX_3DNOW_OPTIMIZED,\n    D3DX_SSE2_OPTIMIZED,\n    D3DX_SSE_OPTIMIZED\n} D3DX_CPU_OPTIMIZATION;\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nD3DX_CPU_OPTIMIZATION WINAPI D3DXCpuOptimizations(BOOL enable);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __D3DX9MATH_H__ */\n"
  },
  {
    "path": "wine/windows/d3dx10tex.h",
    "content": "/*\n * Copyright 2016 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"d3dx10.h\"\n\n#ifndef __D3DX10TEX_H__\n#define __D3DX10TEX_H__\n\ntypedef enum D3DX10_FILTER_FLAG\n{\n    D3DX10_FILTER_NONE             = 0x00000001,\n    D3DX10_FILTER_POINT            = 0x00000002,\n    D3DX10_FILTER_LINEAR           = 0x00000003,\n    D3DX10_FILTER_TRIANGLE         = 0x00000004,\n    D3DX10_FILTER_BOX              = 0x00000005,\n\n    D3DX10_FILTER_MIRROR_U         = 0x00010000,\n    D3DX10_FILTER_MIRROR_V         = 0x00020000,\n    D3DX10_FILTER_MIRROR_W         = 0x00040000,\n    D3DX10_FILTER_MIRROR           = 0x00070000,\n\n    D3DX10_FILTER_DITHER           = 0x00080000,\n    D3DX10_FILTER_DITHER_DIFFUSION = 0x00100000,\n\n    D3DX10_FILTER_SRGB_IN          = 0x00200000,\n    D3DX10_FILTER_SRGB_OUT         = 0x00400000,\n    D3DX10_FILTER_SRGB             = 0x00600000,\n} D3DX10_FILTER_FLAG;\n\ntypedef enum D3DX10_IMAGE_FILE_FORMAT\n{\n    D3DX10_IFF_BMP         = 0,\n    D3DX10_IFF_JPG         = 1,\n    D3DX10_IFF_PNG         = 3,\n    D3DX10_IFF_DDS         = 4,\n    D3DX10_IFF_TIFF        = 10,\n    D3DX10_IFF_GIF         = 11,\n    D3DX10_IFF_WMP         = 12,\n    D3DX10_IFF_FORCE_DWORD = 0x7fffffff\n} D3DX10_IMAGE_FILE_FORMAT;\n\ntypedef struct D3DX10_IMAGE_INFO\n{\n    UINT                     Width;\n    UINT                     Height;\n    UINT                     Depth;\n    UINT                     ArraySize;\n    UINT                     MipLevels;\n    UINT                     MiscFlags;\n    DXGI_FORMAT              Format;\n    D3D10_RESOURCE_DIMENSION ResourceDimension;\n    D3DX10_IMAGE_FILE_FORMAT ImageFileFormat;\n} D3DX10_IMAGE_INFO;\n\ntypedef struct D3DX10_IMAGE_LOAD_INFO\n{\n    UINT              Width;\n    UINT              Height;\n    UINT              Depth;\n    UINT              FirstMipLevel;\n    UINT              MipLevels;\n    D3D10_USAGE       Usage;\n    UINT              BindFlags;\n    UINT              CpuAccessFlags;\n    UINT              MiscFlags;\n    DXGI_FORMAT       Format;\n    UINT              Filter;\n    UINT              MipFilter;\n    D3DX10_IMAGE_INFO *pSrcInfo;\n\n#ifdef __cplusplus\n    D3DX10_IMAGE_LOAD_INFO()\n    {\n        Width          = D3DX10_DEFAULT;\n        Height         = D3DX10_DEFAULT;\n        Depth          = D3DX10_DEFAULT;\n        FirstMipLevel  = D3DX10_DEFAULT;\n        MipLevels      = D3DX10_DEFAULT;\n        Usage          = (D3D10_USAGE)D3DX10_DEFAULT;\n        BindFlags      = D3DX10_DEFAULT;\n        CpuAccessFlags = D3DX10_DEFAULT;\n        MiscFlags      = D3DX10_DEFAULT;\n        Format         = DXGI_FORMAT_FROM_FILE;\n        Filter         = D3DX10_DEFAULT;\n        MipFilter      = D3DX10_DEFAULT;\n        pSrcInfo       = NULL;\n    }\n#endif\n} D3DX10_IMAGE_LOAD_INFO;\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nHRESULT WINAPI D3DX10CreateTextureFromMemory(ID3D10Device *device, const void *src_data, SIZE_T src_data_size,\n        D3DX10_IMAGE_LOAD_INFO *loadinfo, ID3DX10ThreadPump *pump, ID3D10Resource **texture, HRESULT *hresult);\n\nHRESULT WINAPI D3DX10FilterTexture(ID3D10Resource *texture, UINT src_level, UINT filter);\n\nHRESULT WINAPI D3DX10GetImageInfoFromMemory(const void *src_data, SIZE_T src_data_size, ID3DX10ThreadPump *pump,\n        D3DX10_IMAGE_INFO *img_info, HRESULT *hresult);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/d3dx11.h",
    "content": "/*\n * Copyright 2016 Andrey Gusev\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __D3DX11_H__\n#define __D3DX11_H__\n\n#include <limits.h>\n#include <float.h>\n\n#define D3DX11_DEFAULT        (0xffffffffu)\n#define D3DX11_FROM_FILE      (0xfffffffdu)\n#define DXGI_FORMAT_FROM_FILE ((DXGI_FORMAT)0xfffffffdu)\n\n#include \"d3d11.h\"\n#include \"d3dx11core.h\"\n#include \"d3dx11async.h\"\n#include \"d3dx11tex.h\"\n\n#define _FACDD 0x876\n#define MAKE_DDHRESULT(code) MAKE_HRESULT(SEVERITY_ERROR, _FACDD, code)\n\nenum _D3DX11_ERR\n{\n    D3DX11_ERR_CANNOT_MODIFY_INDEX_BUFFER = MAKE_DDHRESULT(2900),\n    D3DX11_ERR_INVALID_MESH               = MAKE_DDHRESULT(2901),\n    D3DX11_ERR_CANNOT_ATTR_SORT           = MAKE_DDHRESULT(2902),\n    D3DX11_ERR_SKINNING_NOT_SUPPORTED     = MAKE_DDHRESULT(2903),\n    D3DX11_ERR_TOO_MANY_INFLUENCES        = MAKE_DDHRESULT(2904),\n    D3DX11_ERR_INVALID_DATA               = MAKE_DDHRESULT(2905),\n    D3DX11_ERR_LOADED_MESH_HAS_NO_DATA    = MAKE_DDHRESULT(2906),\n    D3DX11_ERR_DUPLICATE_NAMED_FRAGMENT   = MAKE_DDHRESULT(2907),\n    D3DX11_ERR_CANNOT_REMOVE_LAST_ITEM    = MAKE_DDHRESULT(2908)\n};\n\n#endif\n"
  },
  {
    "path": "wine/windows/d3dx11async.h",
    "content": "/*\n * Copyright 2016 Matteo Bruni for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __D3DX11ASYNC_H__\n#define __D3DX11ASYNC_H__\n\n#include \"d3dx11.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nHRESULT WINAPI D3DX11CreateAsyncFileLoaderA(const char *file_name, ID3DX11DataLoader **loader);\nHRESULT WINAPI D3DX11CreateAsyncFileLoaderW(const WCHAR *file_name, ID3DX11DataLoader **loader);\nHRESULT WINAPI D3DX11CreateAsyncResourceLoaderA(HMODULE module, const char *resource, ID3DX11DataLoader **loader);\nHRESULT WINAPI D3DX11CreateAsyncResourceLoaderW(HMODULE module, const WCHAR *resource, ID3DX11DataLoader **loader);\nHRESULT WINAPI D3DX11CreateAsyncMemoryLoader(const void *data, SIZE_T data_size, ID3DX11DataLoader **loader);\n\nHRESULT WINAPI D3DX11CompileFromMemory(const char *data, SIZE_T data_size, const char *filename,\n        const D3D10_SHADER_MACRO *defines, ID3D10Include *include, const char *entry_point,\n        const char *target, UINT sflags, UINT eflags, ID3DX11ThreadPump *pump, ID3D10Blob **shader,\n        ID3D10Blob **error_messages, HRESULT *hresult);\n\nHRESULT WINAPI D3DX11CompileFromFileA(const char *filename, const D3D10_SHADER_MACRO *defines,\n        ID3D10Include *include, const char *entry_point, const char *target, UINT sflags, UINT eflags,\n        ID3DX11ThreadPump *pump, ID3D10Blob **shader, ID3D10Blob **error_messages, HRESULT *hresult);\n\nHRESULT WINAPI D3DX11CompileFromFileW(const WCHAR *filename, const D3D10_SHADER_MACRO *defines,\n        ID3D10Include *include, const char *entry_point, const char *target, UINT sflags, UINT eflags,\n        ID3DX11ThreadPump *pump, ID3D10Blob **shader, ID3D10Blob **error_messages, HRESULT *hresult);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/d3dx11core.idl",
    "content": "/*\n * Copyright 2016 Andrey Gusev\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"dxgi.idl\";\nimport \"d3dcommon.idl\";\n\n[\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3DX11DataLoader\n{\n    HRESULT Load();\n    HRESULT Decompress([out] void **data, [in] SIZE_T *bytes);\n    HRESULT Destroy();\n}\n\n[\n    object,\n    local,\n    pointer_default(unique)\n]\ninterface ID3DX11DataProcessor\n{\n    HRESULT Process([in] void *data, [in] SIZE_T bytes);\n    HRESULT CreateDeviceObject([out] void **data_object);\n    HRESULT Destroy();\n}\n\n[\n    object,\n    local,\n    pointer_default(unique),\n    uuid(c93fecfa-6967-478a-abbc-402d90621fcb)\n]\ninterface ID3DX11ThreadPump : IUnknown\n{\n    HRESULT AddWorkItem([in] ID3DX11DataLoader *loader, [in] ID3DX11DataProcessor *processor,\n                        [in] HRESULT *hresult, [out] void **device_object);\n    UINT GetWorkItemCount();\n\n    HRESULT WaitForAllItems();\n    HRESULT ProcessDeviceWorkItems([in] UINT count);\n\n    HRESULT PurgeAllItems();\n    HRESULT GetQueueStatus([in] UINT *io_queue, [in] UINT *process_queue, [in] UINT *device_queue);\n}\n"
  },
  {
    "path": "wine/windows/d3dx11tex.h",
    "content": "/*\n * Copyright 2016 Andrey Gusev\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"d3dx11.h\"\n\n#ifndef __D3DX11TEX_H__\n#define __D3DX11TEX_H__\n\ntypedef enum D3DX11_FILTER_FLAG\n{\n    D3DX11_FILTER_NONE             = 0x00000001,\n    D3DX11_FILTER_POINT            = 0x00000002,\n    D3DX11_FILTER_LINEAR           = 0x00000003,\n    D3DX11_FILTER_TRIANGLE         = 0x00000004,\n    D3DX11_FILTER_BOX              = 0x00000005,\n\n    D3DX11_FILTER_MIRROR_U         = 0x00010000,\n    D3DX11_FILTER_MIRROR_V         = 0x00020000,\n    D3DX11_FILTER_MIRROR_W         = 0x00040000,\n    D3DX11_FILTER_MIRROR           = 0x00070000,\n\n    D3DX11_FILTER_DITHER           = 0x00080000,\n    D3DX11_FILTER_DITHER_DIFFUSION = 0x00100000,\n\n    D3DX11_FILTER_SRGB_IN          = 0x00200000,\n    D3DX11_FILTER_SRGB_OUT         = 0x00400000,\n    D3DX11_FILTER_SRGB             = 0x00600000,\n} D3DX11_FILTER_FLAG;\n\ntypedef enum D3DX11_IMAGE_FILE_FORMAT\n{\n    D3DX11_IFF_BMP         = 0,\n    D3DX11_IFF_JPG         = 1,\n    D3DX11_IFF_PNG         = 3,\n    D3DX11_IFF_DDS         = 4,\n    D3DX11_IFF_TIFF        = 10,\n    D3DX11_IFF_GIF         = 11,\n    D3DX11_IFF_WMP         = 12,\n    D3DX11_IFF_FORCE_DWORD = 0x7fffffff\n} D3DX11_IMAGE_FILE_FORMAT;\n\ntypedef struct D3DX11_IMAGE_INFO\n{\n    UINT                     Width;\n    UINT                     Height;\n    UINT                     Depth;\n    UINT                     ArraySize;\n    UINT                     MipLevels;\n    UINT                     MiscFlags;\n    DXGI_FORMAT              Format;\n    D3D11_RESOURCE_DIMENSION ResourceDimension;\n    D3DX11_IMAGE_FILE_FORMAT ImageFileFormat;\n} D3DX11_IMAGE_INFO;\n\ntypedef struct D3DX11_IMAGE_LOAD_INFO\n{\n    UINT              Width;\n    UINT              Height;\n    UINT              Depth;\n    UINT              FirstMipLevel;\n    UINT              MipLevels;\n    D3D11_USAGE       Usage;\n    UINT              BindFlags;\n    UINT              CpuAccessFlags;\n    UINT              MiscFlags;\n    DXGI_FORMAT       Format;\n    UINT              Filter;\n    UINT              MipFilter;\n    D3DX11_IMAGE_INFO *pSrcInfo;\n\n#ifdef __cplusplus\n    D3DX11_IMAGE_LOAD_INFO()\n    {\n        Width          = D3DX11_DEFAULT;\n        Height         = D3DX11_DEFAULT;\n        Depth          = D3DX11_DEFAULT;\n        FirstMipLevel  = D3DX11_DEFAULT;\n        MipLevels      = D3DX11_DEFAULT;\n        Usage          = (D3D11_USAGE)D3DX11_DEFAULT;\n        BindFlags      = D3DX11_DEFAULT;\n        CpuAccessFlags = D3DX11_DEFAULT;\n        MiscFlags      = D3DX11_DEFAULT;\n        Format         = DXGI_FORMAT_FROM_FILE;\n        Filter         = D3DX11_DEFAULT;\n        MipFilter      = D3DX11_DEFAULT;\n        pSrcInfo       = NULL;\n    }\n#endif\n} D3DX11_IMAGE_LOAD_INFO;\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nHRESULT WINAPI D3DX11CreateShaderResourceViewFromMemory(ID3D11Device *device, const void *data,\n        SIZE_T data_size, D3DX11_IMAGE_LOAD_INFO *load_info, ID3DX11ThreadPump *pump,\n        ID3D11ShaderResourceView **view, HRESULT *hresult);\n\nHRESULT WINAPI D3DX11CreateTextureFromFileA(ID3D11Device *device, const char *filename,\n        D3DX11_IMAGE_LOAD_INFO *load_info, ID3DX11ThreadPump *pump, ID3D11Resource **texture,\n        HRESULT *hresult);\n\nHRESULT WINAPI D3DX11CreateTextureFromFileW(ID3D11Device *device, const WCHAR *filename,\n        D3DX11_IMAGE_LOAD_INFO *load_info, ID3DX11ThreadPump *pump, ID3D11Resource **texture,\n        HRESULT *hresult);\n\nHRESULT WINAPI D3DX11CreateTextureFromMemory(ID3D11Device *device, const void *src_data, SIZE_T src_data_size,\n        D3DX11_IMAGE_LOAD_INFO *loadinfo, ID3DX11ThreadPump *pump, ID3D11Resource **texture, HRESULT *hresult);\n\nHRESULT WINAPI D3DX11FilterTexture(ID3D11DeviceContext *context, ID3D11Resource *texture, UINT src_level, UINT filter);\n\nHRESULT WINAPI D3DX11GetImageInfoFromMemory(const void *src_data, SIZE_T src_data_size, ID3DX11ThreadPump *pump,\n        D3DX11_IMAGE_INFO *img_info, HRESULT *hresult);\n\nHRESULT WINAPI D3DX11SaveTextureToMemory(ID3D11DeviceContext *context, ID3D11Resource *texture,\n        D3DX11_IMAGE_FILE_FORMAT format, ID3D10Blob **buffer, UINT flags);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/d3dx9.h",
    "content": "/*\n * Copyright (C) 2007 David Adam\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __D3DX9_H__\n#define __D3DX9_H__\n\n#include <limits.h>\n\n#define D3DX_DEFAULT         ((UINT)-1)\n#define D3DX_DEFAULT_NONPOW2 ((UINT)-2)\n#define D3DX_DEFAULT_FLOAT   FLT_MAX\n#define D3DX_FROM_FILE       ((UINT)-3)\n#define D3DFMT_FROM_FILE     ((D3DFORMAT)-3)\n\n#include \"d3d9.h\"\n#include \"d3dx9math.h\"\n#include \"d3dx9core.h\"\n#include \"d3dx9xof.h\"\n#include \"d3dx9mesh.h\"\n#include \"d3dx9shader.h\"\n#include \"d3dx9effect.h\"\n#include \"d3dx9shape.h\"\n#include \"d3dx9anim.h\"\n#include \"d3dx9tex.h\"\n\n#define _FACDD 0x876\n#define MAKE_DDHRESULT(code) MAKE_HRESULT(1, _FACDD, code)\n\nenum _D3DXERR {\n    D3DXERR_CANNOTMODIFYINDEXBUFFER = MAKE_DDHRESULT(2900),\n    D3DXERR_INVALIDMESH             = MAKE_DDHRESULT(2901),\n    D3DXERR_CANNOTATTRSORT          = MAKE_DDHRESULT(2902),\n    D3DXERR_SKINNINGNOTSUPPORTED    = MAKE_DDHRESULT(2903),\n    D3DXERR_TOOMANYINFLUENCES       = MAKE_DDHRESULT(2904),\n    D3DXERR_INVALIDDATA             = MAKE_DDHRESULT(2905),\n    D3DXERR_LOADEDMESHASNODATA      = MAKE_DDHRESULT(2906),\n    D3DXERR_DUPLICATENAMEDFRAGMENT  = MAKE_DDHRESULT(2907),\n    D3DXERR_CANNOTREMOVELASTITEM    = MAKE_DDHRESULT(2908),\n};\n\n#endif\n"
  },
  {
    "path": "wine/windows/d3dx9anim.h",
    "content": "/*\n * Copyright 2011 Dylan Smith\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_D3DX9ANIM_H\n#define __WINE_D3DX9ANIM_H\n\nDEFINE_GUID(IID_ID3DXAnimationSet,           0x698cfb3f, 0x9289, 0x4d95, 0x9a, 0x57, 0x33, 0xa9, 0x4b, 0x5a, 0x65, 0xf9);\nDEFINE_GUID(IID_ID3DXKeyframedAnimationSet,  0xfa4e8e3a, 0x9786, 0x407d, 0x8b, 0x4c, 0x59, 0x95, 0x89, 0x37, 0x64, 0xaf);\nDEFINE_GUID(IID_ID3DXCompressedAnimationSet, 0x6cc2480d, 0x3808, 0x4739, 0x9f, 0x88, 0xde, 0x49, 0xfa, 0xcd, 0x8d, 0x4c);\nDEFINE_GUID(IID_ID3DXAnimationController,    0xac8948ec, 0xf86d, 0x43e2, 0x96, 0xde, 0x31, 0xfc, 0x35, 0xf9, 0x6d, 0x9e);\n\ntypedef enum _D3DXMESHDATATYPE\n{\n    D3DXMESHTYPE_MESH        = 1,\n    D3DXMESHTYPE_PMESH       = 2,\n    D3DXMESHTYPE_PATCHMESH   = 3,\n    D3DXMESHTYPE_FORCE_DWORD = 0x7fffffff,\n} D3DXMESHDATATYPE;\n\ntypedef enum _D3DXCALLBACK_SEARCH_FLAGS\n{\n    D3DXCALLBACK_SEARCH_EXCLUDING_INITIAL_POSITION = 0x00000001,\n    D3DXCALLBACK_SEARCH_BEHIND_INITIAL_POSITION    = 0x00000002,\n    D3DXCALLBACK_SEARCH_FORCE_DWORD                = 0x7fffffff,\n} D3DXCALLBACK_SEARCH_FLAGS;\n\ntypedef enum _D3DXPLAYBACK_TYPE\n{\n    D3DXPLAY_LOOP        = 0,\n    D3DXPLAY_ONCE        = 1,\n    D3DXPLAY_PINGPONG    = 2,\n    D3DXPLAY_FORCE_DWORD = 0x7fffffff,\n} D3DXPLAYBACK_TYPE;\n\ntypedef enum _D3DXCOMPRESSION_FLAGS\n{\n    D3DXCOMPRESSION_DEFAULT     = 0x00000000,\n    D3DXCOMPRESSION_FORCE_DWORD = 0x7fffffff,\n} D3DXCOMPRESSION_FLAGS;\n\ntypedef enum _D3DXPRIORITY_TYPE\n{\n    D3DXPRIORITY_LOW         = 0,\n    D3DXPRIORITY_HIGH        = 1,\n    D3DXPRIORITY_FORCE_DWORD = 0x7fffffff,\n} D3DXPRIORITY_TYPE;\n\ntypedef enum _D3DXEVENT_TYPE\n{\n    D3DXEVENT_TRACKSPEED    = 0,\n    D3DXEVENT_TRACKWEIGHT   = 1,\n    D3DXEVENT_TRACKPOSITION = 2,\n    D3DXEVENT_TRACKENABLE   = 3,\n    D3DXEVENT_PRIORITYBLEND = 4,\n    D3DXEVENT_FORCE_DWORD   = 0x7fffffff,\n} D3DXEVENT_TYPE;\n\ntypedef enum _D3DXTRANSITION_TYPE\n{\n    D3DXTRANSITION_LINEAR        = 0,\n    D3DXTRANSITION_EASEINEASEOUT = 1,\n    D3DXTRANSITION_FORCE_DWORD   = 0x7fffffff,\n} D3DXTRANSITION_TYPE;\n\n\ntypedef struct _D3DXMESHDATA\n{\n    D3DXMESHDATATYPE Type;\n\n    union\n    {\n        ID3DXMesh *pMesh;\n        ID3DXPMesh *pPMesh;\n        ID3DXPatchMesh *pPatchMesh;\n    } DUMMYUNIONNAME;\n} D3DXMESHDATA, *LPD3DXMESHDATA;\n\ntypedef struct _D3DXMESHCONTAINER\n{\n    char *Name;\n    D3DXMESHDATA MeshData;\n    LPD3DXMATERIAL pMaterials;\n    LPD3DXEFFECTINSTANCE pEffects;\n    DWORD NumMaterials;\n    DWORD *pAdjacency;\n    ID3DXSkinInfo *pSkinInfo;\n    struct _D3DXMESHCONTAINER *pNextMeshContainer;\n} D3DXMESHCONTAINER, *LPD3DXMESHCONTAINER;\n\ntypedef struct _D3DXFRAME\n{\n    char *Name;\n    D3DXMATRIX TransformationMatrix;\n    LPD3DXMESHCONTAINER pMeshContainer;\n    struct _D3DXFRAME *pFrameSibling;\n    struct _D3DXFRAME *pFrameFirstChild;\n} D3DXFRAME, *LPD3DXFRAME;\n\ntypedef struct _D3DXKEY_VECTOR3\n{\n    FLOAT Time;\n    D3DXVECTOR3 Value;\n} D3DXKEY_VECTOR3, *LPD3DXKEY_VECTOR3;\n\ntypedef struct _D3DXKEY_QUATERNION\n{\n    FLOAT Time;\n    D3DXQUATERNION Value;\n} D3DXKEY_QUATERNION, *LPD3DXKEY_QUATERNION;\n\ntypedef struct _D3DXKEY_CALLBACK\n{\n    float Time;\n    void *pCallbackData;\n} D3DXKEY_CALLBACK, *LPD3DXKEY_CALLBACK;\n\ntypedef struct _D3DXTRACK_DESC\n{\n    D3DXPRIORITY_TYPE Priority;\n    FLOAT Weight;\n    FLOAT Speed;\n    DOUBLE Position;\n    BOOL Enable;\n} D3DXTRACK_DESC, *LPD3DXTRACK_DESC;\n\ntypedef struct _D3DXEVENT_DESC\n{\n    D3DXEVENT_TYPE Type;\n    UINT Track;\n    DOUBLE StartTime;\n    DOUBLE Duration;\n    D3DXTRANSITION_TYPE Transition;\n    union\n    {\n        FLOAT Weight;\n        FLOAT Speed;\n        DOUBLE Position;\n        BOOL Enable;\n    } DUMMYUNIONNAME;\n} D3DXEVENT_DESC, *LPD3DXEVENT_DESC;\n\ntypedef DWORD D3DXEVENTHANDLE, *LPD3DXEVENTHANDLE;\n\ntypedef interface ID3DXAllocateHierarchy *LPD3DXALLOCATEHIERARCHY;\ntypedef interface ID3DXLoadUserData *LPD3DXLOADUSERDATA;\ntypedef interface ID3DXSaveUserData *LPD3DXSAVEUSERDATA;\ntypedef interface ID3DXAnimationSet *LPD3DXANIMATIONSET;\ntypedef interface ID3DXKeyframedAnimationSet *LPD3DXKEYFRAMEDANIMATIONSET;\ntypedef interface ID3DXCompressedAnimationSet *LPD3DXCOMPRESSEDANIMATIONSET;\ntypedef interface ID3DXAnimationCallbackHandler *LPD3DXANIMATIONCALLBACKHANDLER;\ntypedef interface ID3DXAnimationController *LPD3DXANIMATIONCONTROLLER;\n\n#undef INTERFACE\n\n#define INTERFACE ID3DXAllocateHierarchy\nDECLARE_INTERFACE(ID3DXAllocateHierarchy)\n{\n    STDMETHOD(CreateFrame)(THIS_ const char *name, D3DXFRAME **new_frame) PURE;\n    STDMETHOD(CreateMeshContainer)(THIS_ const char *name, const D3DXMESHDATA *mesh_data,\n            const D3DXMATERIAL *materials, const D3DXEFFECTINSTANCE *effect_instances,\n            DWORD num_materials, const DWORD *adjacency, ID3DXSkinInfo *skin_info,\n            D3DXMESHCONTAINER **new_mesh_container) PURE;\n    STDMETHOD(DestroyFrame)(THIS_ LPD3DXFRAME frame) PURE;\n    STDMETHOD(DestroyMeshContainer)(THIS_ LPD3DXMESHCONTAINER mesh_container) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE ID3DXLoadUserData\nDECLARE_INTERFACE(ID3DXLoadUserData)\n{\n    STDMETHOD(LoadTopLevelData)(ID3DXFileData *child_data) PURE;\n    STDMETHOD(LoadFrameChildData)(D3DXFRAME *frame, ID3DXFileData *child_data) PURE;\n    STDMETHOD(LoadMeshChildData)(D3DXMESHCONTAINER *mesh_container, ID3DXFileData *child_data) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE ID3DXSaveUserData\nDECLARE_INTERFACE(ID3DXSaveUserData)\n{\n    STDMETHOD(AddFrameChildData)(const D3DXFRAME *frame,\n            ID3DXFileSaveObject *save_obj, ID3DXFileSaveData *frame_data) PURE;\n    STDMETHOD(AddMeshChildData)(const D3DXMESHCONTAINER *mesh_container,\n            ID3DXFileSaveObject *save_obj, ID3DXFileSaveData *mesh_data) PURE;\n    STDMETHOD(AddTopLevelDataObjectsPre)(ID3DXFileSaveObject *save_obj) PURE;\n    STDMETHOD(AddTopLevelDataObjectsPost)(ID3DXFileSaveObject *save_obj) PURE;\n    STDMETHOD(RegisterTemplates)(ID3DXFile *file) PURE;\n    STDMETHOD(SaveTemplates)(ID3DXFileSaveObject *save_obj) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE ID3DXAnimationSet\nDECLARE_INTERFACE_(ID3DXAnimationSet, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /*** ID3DXAnimationSet methods ***/\n    STDMETHOD_(const char *, GetName)(THIS) PURE;\n    STDMETHOD_(DOUBLE, GetPeriod)(THIS) PURE;\n    STDMETHOD_(DOUBLE, GetPeriodicPosition)(THIS_ DOUBLE position) PURE;\n    STDMETHOD_(UINT, GetNumAnimations)(THIS) PURE;\n    STDMETHOD(GetAnimationNameByIndex)(THIS_ UINT index, const char **name) PURE;\n    STDMETHOD(GetAnimationIndexByName)(THIS_ const char *name, UINT *index) PURE;\n    STDMETHOD(GetSRT)(THIS_ DOUBLE periodic_position, UINT animation, D3DXVECTOR3 *scale,\n            D3DXQUATERNION *rotation, D3DXVECTOR3 *translation) PURE;\n    STDMETHOD(GetCallback)(THIS_ double position, DWORD flags, double *callback_position,\n            void **callback_data) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE ID3DXKeyframedAnimationSet\nDECLARE_INTERFACE_(ID3DXKeyframedAnimationSet, ID3DXAnimationSet)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /*** ID3DXAnimationSet methods ***/\n    STDMETHOD_(const char *, GetName)(THIS) PURE;\n    STDMETHOD_(DOUBLE, GetPeriod)(THIS) PURE;\n    STDMETHOD_(DOUBLE, GetPeriodicPosition)(THIS_ DOUBLE position) PURE;\n    STDMETHOD_(UINT, GetNumAnimations)(THIS) PURE;\n    STDMETHOD(GetAnimationNameByIndex)(THIS_ UINT index, const char **name) PURE;\n    STDMETHOD(GetAnimationIndexByName)(THIS_ const char *name, UINT *index) PURE;\n    STDMETHOD(GetSRT)(THIS_ DOUBLE periodic_position, UINT animation, D3DXVECTOR3 *scale,\n            D3DXQUATERNION *rotation, D3DXVECTOR3 *translation) PURE;\n    STDMETHOD(GetCallback)(THIS_ double position, DWORD flags, double *callback_position,\n            void **callback_data) PURE;\n    /*** ID3DXKeyframedAnimationSet methods ***/\n    STDMETHOD_(D3DXPLAYBACK_TYPE, GetPlaybackType)(THIS) PURE;\n    STDMETHOD_(DOUBLE, GetSourceTicksPerSecond)(THIS) PURE;\n    STDMETHOD_(UINT, GetNumScaleKeys)(THIS_ UINT animation) PURE;\n    STDMETHOD(GetScaleKeys)(THIS_ UINT animation, LPD3DXKEY_VECTOR3 scale_keys) PURE;\n    STDMETHOD(GetScaleKey)(THIS_ UINT animation, UINT key, LPD3DXKEY_VECTOR3 scale_key) PURE;\n    STDMETHOD(SetScaleKey)(THIS_ UINT animation, UINT key, LPD3DXKEY_VECTOR3 scale_key) PURE;\n    STDMETHOD_(UINT, GetNumRotationKeys)(THIS_ UINT animation) PURE;\n    STDMETHOD(GetRotationKeys)(THIS_ UINT animation, LPD3DXKEY_QUATERNION rotation_keys) PURE;\n    STDMETHOD(GetRotationKey)(THIS_ UINT animation, UINT key, LPD3DXKEY_QUATERNION rotation_key) PURE;\n    STDMETHOD(SetRotationKey)(THIS_ UINT animation, UINT key, LPD3DXKEY_QUATERNION rotation_key) PURE;\n    STDMETHOD_(UINT, GetNumTranslationKeys)(THIS_ UINT animation) PURE;\n    STDMETHOD(GetTranslationKeys)(THIS_ UINT animation, LPD3DXKEY_VECTOR3 translation_keys) PURE;\n    STDMETHOD(GetTranslationKey)(THIS_ UINT animation, UINT key, LPD3DXKEY_VECTOR3 translation_key) PURE;\n    STDMETHOD(SetTranslationKey)(THIS_ UINT animation, UINT key, LPD3DXKEY_VECTOR3 translation_key) PURE;\n    STDMETHOD_(UINT, GetNumCallbackKeys)(THIS) PURE;\n    STDMETHOD(GetCallbackKeys)(THIS_ LPD3DXKEY_CALLBACK callback_keys) PURE;\n    STDMETHOD(GetCallbackKey)(THIS_ UINT key, LPD3DXKEY_CALLBACK callback_key) PURE;\n    STDMETHOD(SetCallbackKey)(THIS_ UINT key, LPD3DXKEY_CALLBACK callback_key) PURE;\n    STDMETHOD(UnregisterScaleKey)(THIS_ UINT animation, UINT key) PURE;\n    STDMETHOD(UnregisterRotationKey)(THIS_ UINT animation, UINT key) PURE;\n    STDMETHOD(UnregisterTranslationKey)(THIS_ UINT animation, UINT key) PURE;\n    STDMETHOD(RegisterAnimationSRTKeys)(THIS_ const char *name, UINT num_scale_keys,\n            UINT num_rotation_keys, UINT num_translation_keys, const D3DXKEY_VECTOR3 *scale_keys,\n            const D3DXKEY_QUATERNION *rotation_keys, const D3DXKEY_VECTOR3 *translation_keys,\n            DWORD *animation_index) PURE;\n    STDMETHOD(Compress)(THIS_ DWORD flags, float lossiness, D3DXFRAME *hierarchy,\n            ID3DXBuffer **compressed_data) PURE;\n    STDMETHOD(UnregisterAnimation)(THIS_ UINT index) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE ID3DXCompressedAnimationSet\nDECLARE_INTERFACE_(ID3DXCompressedAnimationSet, ID3DXAnimationSet)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /*** ID3DXAnimationSet methods ***/\n    STDMETHOD_(const char *, GetName)(THIS) PURE;\n    STDMETHOD_(DOUBLE, GetPeriod)(THIS) PURE;\n    STDMETHOD_(DOUBLE, GetPeriodicPosition)(THIS_ DOUBLE position) PURE;\n    STDMETHOD_(UINT, GetNumAnimations)(THIS) PURE;\n    STDMETHOD(GetAnimationNameByIndex)(THIS_ UINT index, const char **name) PURE;\n    STDMETHOD(GetAnimationIndexByName)(THIS_ const char *name, UINT *index) PURE;\n    STDMETHOD(GetSRT)(THIS_ DOUBLE periodic_position, UINT animation, D3DXVECTOR3 *scale,\n            D3DXQUATERNION *rotation, D3DXVECTOR3 *translation) PURE;\n    STDMETHOD(GetCallback)(THIS_ double position, DWORD flags, double *callback_position,\n            void **callback_data) PURE;\n    /*** ID3DXCompressedAnimationSet methods ***/\n    STDMETHOD_(D3DXPLAYBACK_TYPE, GetPlaybackType)(THIS) PURE;\n    STDMETHOD_(DOUBLE, GetSourceTicksPerSecond)(THIS) PURE;\n    STDMETHOD(GetCompressedData)(THIS_ ID3DXBuffer **compressed_data) PURE;\n    STDMETHOD_(UINT, GetNumCallbackKeys)(THIS) PURE;\n    STDMETHOD(GetCallbackKeys)(THIS_ LPD3DXKEY_CALLBACK callback_keys) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE ID3DXAnimationCallbackHandler\nDECLARE_INTERFACE(ID3DXAnimationCallbackHandler)\n{\n    STDMETHOD(HandleCallback)(THIS_ UINT track, void *callback_data) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE ID3DXAnimationController\nDECLARE_INTERFACE_(ID3DXAnimationController, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /*** ID3DXAnimationController methods ***/\n    STDMETHOD_(UINT, GetMaxNumAnimationOutputs)(THIS) PURE;\n    STDMETHOD_(UINT, GetMaxNumAnimationSets)(THIS) PURE;\n    STDMETHOD_(UINT, GetMaxNumTracks)(THIS) PURE;\n    STDMETHOD_(UINT, GetMaxNumEvents)(THIS) PURE;\n    STDMETHOD(RegisterAnimationOutput)(THIS_ const char *name, D3DXMATRIX *matrix,\n            D3DXVECTOR3 *scale, D3DXQUATERNION *rotation, D3DXVECTOR3 *translation) PURE;\n    STDMETHOD(RegisterAnimationSet)(THIS_ ID3DXAnimationSet *anim_set) PURE;\n    STDMETHOD(UnregisterAnimationSet)(THIS_ ID3DXAnimationSet *anim_set) PURE;\n    STDMETHOD_(UINT, GetNumAnimationSets)(THIS) PURE;\n    STDMETHOD(GetAnimationSet)(THIS_ UINT index, ID3DXAnimationSet **anim_set) PURE;\n    STDMETHOD(GetAnimationSetByName)(THIS_ const char *name, ID3DXAnimationSet **anim_set) PURE;\n    STDMETHOD(AdvanceTime)(THIS_ double time_delta, ID3DXAnimationCallbackHandler *callback_handler) PURE;\n    STDMETHOD(ResetTime)(THIS) PURE;\n    STDMETHOD_(double, GetTime)(THIS) PURE;\n    STDMETHOD(SetTrackAnimationSet)(THIS_ UINT track, ID3DXAnimationSet *anim_set) PURE;\n    STDMETHOD(GetTrackAnimationSet)(THIS_ UINT track, ID3DXAnimationSet **anim_set) PURE;\n    STDMETHOD(SetTrackPriority)(THIS_ UINT track, D3DXPRIORITY_TYPE priority) PURE;\n    STDMETHOD(SetTrackSpeed)(THIS_ UINT track, float speed) PURE;\n    STDMETHOD(SetTrackWeight)(THIS_ UINT track, float weight) PURE;\n    STDMETHOD(SetTrackPosition)(THIS_ UINT track, double position) PURE;\n    STDMETHOD(SetTrackEnable)(THIS_ UINT track, BOOL enable) PURE;\n    STDMETHOD(SetTrackDesc)(THIS_ UINT track, D3DXTRACK_DESC *desc) PURE;\n    STDMETHOD(GetTrackDesc)(THIS_ UINT track, D3DXTRACK_DESC *desc) PURE;\n    STDMETHOD(SetPriorityBlend)(THIS_ float blend_weight) PURE;\n    STDMETHOD_(float, GetPriorityBlend)(THIS) PURE;\n    STDMETHOD_(D3DXEVENTHANDLE, KeyTrackSpeed)(THIS_ UINT track, float new_speed,\n            double start_time, double duration, D3DXTRANSITION_TYPE transition) PURE;\n    STDMETHOD_(D3DXEVENTHANDLE, KeyTrackWeight)(THIS_ UINT track, float new_weight,\n            double start_time, double duration, D3DXTRANSITION_TYPE transition) PURE;\n    STDMETHOD_(D3DXEVENTHANDLE, KeyTrackPosition)(THIS_ UINT track, double new_position, double start_time) PURE;\n    STDMETHOD_(D3DXEVENTHANDLE, KeyTrackEnable)(THIS_ UINT track, BOOL new_enable, double start_time) PURE;\n    STDMETHOD_(D3DXEVENTHANDLE, KeyPriorityBlend)(THIS_ float new_blend_weight,\n            double start_time, double duration, D3DXTRANSITION_TYPE transition) PURE;\n    STDMETHOD(UnkeyEvent)(THIS_ D3DXEVENTHANDLE event) PURE;\n    STDMETHOD(UnkeyAllTrackEvents)(THIS_ UINT track) PURE;\n    STDMETHOD(UnkeyAllPriorityBlends)(THIS) PURE;\n    STDMETHOD_(D3DXEVENTHANDLE, GetCurrentTrackEvent)(THIS_ UINT track, D3DXEVENT_TYPE event_type) PURE;\n    STDMETHOD_(D3DXEVENTHANDLE, GetCurrentPriorityBlend)(THIS) PURE;\n    STDMETHOD_(D3DXEVENTHANDLE, GetUpcomingTrackEvent)(THIS_ UINT track, D3DXEVENTHANDLE event) PURE;\n    STDMETHOD_(D3DXEVENTHANDLE, GetUpcomingPriorityBlend)(THIS_ D3DXEVENTHANDLE event) PURE;\n    STDMETHOD(ValidateEvent)(THIS_ D3DXEVENTHANDLE event) PURE;\n    STDMETHOD(GetEventDesc)(THIS_ D3DXEVENTHANDLE event, D3DXEVENT_DESC *desc) PURE;\n    STDMETHOD(CloneAnimationController)(THIS_ UINT max_num_anim_outputs, UINT max_num_anim_sets,\n            UINT max_num_tracks, UINT max_num_events, ID3DXAnimationController **anim_controller) PURE;\n};\n#undef INTERFACE\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nHRESULT WINAPI D3DXLoadMeshHierarchyFromXA(const char *filename, DWORD flags, struct IDirect3DDevice9 *device,\n        struct ID3DXAllocateHierarchy *alloc, struct ID3DXLoadUserData *user_data_loader,\n        D3DXFRAME **frame_hierarchy, struct ID3DXAnimationController **animation_controller);\nHRESULT WINAPI D3DXLoadMeshHierarchyFromXW(const WCHAR *filename, DWORD flags, struct IDirect3DDevice9 *device,\n        struct ID3DXAllocateHierarchy *alloc, struct ID3DXLoadUserData *user_data_loader,\n        D3DXFRAME **frame_hierarchy, struct ID3DXAnimationController **animation_controller);\n#define D3DXLoadMeshHierarchyFromX WINELIB_NAME_AW(D3DXLoadMeshHierarchyFromX)\nHRESULT WINAPI D3DXLoadMeshHierarchyFromXInMemory(const void *data, DWORD data_size, DWORD flags,\n        struct IDirect3DDevice9 *device, struct ID3DXAllocateHierarchy *alloc,\n        struct ID3DXLoadUserData *user_data_loader, D3DXFRAME **frame_hierarchy,\n        struct ID3DXAnimationController **animation_controller);\nHRESULT WINAPI D3DXSaveMeshHierarchyToFileA(const char *filename, DWORD format,\n        const D3DXFRAME *frame_root, ID3DXAnimationController *animation_controller,\n        ID3DXSaveUserData *user_data_saver);\nHRESULT WINAPI D3DXSaveMeshHierarchyToFileW(const WCHAR *filename, DWORD format,\n        const D3DXFRAME *frame_root, ID3DXAnimationController *animation_controller,\n        ID3DXSaveUserData *user_data_saver);\n#define D3DXSaveMeshHierarchyToFile WINELIB_NAME_AW(D3DXSaveMeshHierarchyToFile)\nHRESULT WINAPI D3DXFrameDestroy(D3DXFRAME *frame_root, ID3DXAllocateHierarchy *alloc);\nHRESULT WINAPI D3DXFrameAppendChild(D3DXFRAME *parent, const D3DXFRAME *child);\nD3DXFRAME * WINAPI D3DXFrameFind(const D3DXFRAME *root, const char *name);\nHRESULT WINAPI D3DXFrameRegisterNamedMatrices(D3DXFRAME *frame_root, ID3DXAnimationController *animation_controller);\nUINT WINAPI D3DXFrameNumNamedMatrices(const D3DXFRAME *frame_root);\nHRESULT WINAPI D3DXFrameCalculateBoundingSphere(const D3DXFRAME *frame_root, D3DXVECTOR3 *center,\n        FLOAT *radius);\nHRESULT WINAPI D3DXCreateKeyframedAnimationSet(const char *name, double ticks_per_second,\n        D3DXPLAYBACK_TYPE playback_type, UINT animation_count, UINT callback_key_count,\n        const D3DXKEY_CALLBACK *callback_keys, ID3DXKeyframedAnimationSet **animation_set);\nHRESULT WINAPI D3DXCreateCompressedAnimationSet(const char *name, double ticks_per_second,\n        D3DXPLAYBACK_TYPE playback_type, ID3DXBuffer *compressed_data, UINT callback_key_count,\n        const D3DXKEY_CALLBACK *callback_keys, ID3DXCompressedAnimationSet **animation_set);\nHRESULT WINAPI D3DXCreateAnimationController(UINT max_animation_output_count, UINT max_animation_set_count,\n        UINT max_track_count, UINT max_event_count, ID3DXAnimationController **animation_controller);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_D3DX9ANIM_H */\n"
  },
  {
    "path": "wine/windows/d3dx9core.h",
    "content": "/*\n * Copyright (C) 2007, 2008 Tony Wasserka\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"d3dx9.h\"\n\n#ifndef __WINE_D3DX9CORE_H\n#define __WINE_D3DX9CORE_H\n\n/**********************************************\n ***************** Definitions ****************\n **********************************************/\n#define D3DX_VERSION 0x0902\n#ifndef D3DX_SDK_VERSION\n#define D3DX_SDK_VERSION 43\n#endif\n#define D3DXSPRITE_DONOTSAVESTATE          0x00000001\n#define D3DXSPRITE_DONOTMODIFY_RENDERSTATE 0x00000002\n#define D3DXSPRITE_OBJECTSPACE             0x00000004\n#define D3DXSPRITE_BILLBOARD               0x00000008\n#define D3DXSPRITE_ALPHABLEND              0x00000010\n#define D3DXSPRITE_SORT_TEXTURE            0x00000020\n#define D3DXSPRITE_SORT_DEPTH_FRONTTOBACK  0x00000040\n#define D3DXSPRITE_SORT_DEPTH_BACKTOFRONT  0x00000080\n#define D3DXSPRITE_DO_NOT_ADDREF_TEXTURE   0x00000100\n\n/**********************************************\n ******************** GUIDs *******************\n **********************************************/\nDEFINE_GUID(IID_ID3DXBuffer, 0x8ba5fb08, 0x5195, 0x40e2, 0xac, 0x58, 0xd, 0x98, 0x9c, 0x3a, 0x1, 0x2);\nDEFINE_GUID(IID_ID3DXFont, 0xd79dbb70, 0x5f21, 0x4d36, 0xbb, 0xc2, 0xff, 0x52, 0x5c, 0x21, 0x3c, 0xdc);\nDEFINE_GUID(IID_ID3DXLine, 0xd379ba7f, 0x9042, 0x4ac4, 0x9f, 0x5e, 0x58, 0x19, 0x2a, 0x4c, 0x6b, 0xd8);\nDEFINE_GUID(IID_ID3DXRenderToEnvMap, 0x313f1b4b, 0xc7b0, 0x4fa2, 0x9d, 0x9d, 0x8d, 0x38, 0xb, 0x64, 0x38, 0x5e);\nDEFINE_GUID(IID_ID3DXRenderToSurface, 0x6985f346, 0x2c3d, 0x43b3, 0xbe, 0x8b, 0xda, 0xae, 0x8a, 0x3, 0xd8, 0x94);\nDEFINE_GUID(IID_ID3DXSprite, 0xba0b762d, 0x7d28, 0x43ec, 0xb9, 0xdc, 0x2f, 0x84, 0x44, 0x3b, 0x6, 0x14);\n\n/**********************************************\n ****************** typedefs ******************\n **********************************************/\ntypedef struct ID3DXBuffer *LPD3DXBUFFER;\ntypedef struct ID3DXFont *LPD3DXFONT;\ntypedef struct ID3DXLine *LPD3DXLINE;\ntypedef struct ID3DXRenderToEnvMap *LPD3DXRenderToEnvMap;\ntypedef struct ID3DXRenderToSurface *LPD3DXRENDERTOSURFACE;\ntypedef struct ID3DXSprite *LPD3DXSPRITE;\n\n/**********************************************\n *********** interface declarations ***********\n **********************************************/\n#define INTERFACE ID3DXBuffer\nDECLARE_INTERFACE_(ID3DXBuffer, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /*** ID3DXBuffer methods ***/\n    STDMETHOD_(void *, GetBufferPointer)(THIS) PURE;\n    STDMETHOD_(DWORD, GetBufferSize)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define ID3DXBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define ID3DXBuffer_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define ID3DXBuffer_Release(p)            (p)->lpVtbl->Release(p)\n/*** ID3DXBuffer methods ***/\n#define ID3DXBuffer_GetBufferPointer(p)   (p)->lpVtbl->GetBufferPointer(p)\n#define ID3DXBuffer_GetBufferSize(p)      (p)->lpVtbl->GetBufferSize(p)\n#else\n/*** IUnknown methods ***/\n#define ID3DXBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define ID3DXBuffer_AddRef(p)             (p)->AddRef()\n#define ID3DXBuffer_Release(p)            (p)->Release()\n/*** ID3DXBuffer methods ***/\n#define ID3DXBuffer_GetBufferPointer(p)   (p)->GetBufferPointer()\n#define ID3DXBuffer_GetBufferSize(p)      (p)->GetBufferSize()\n#endif\n\ntypedef struct _D3DXFONT_DESCA\n{\n    INT Height;\n    UINT Width;\n    UINT Weight;\n    UINT MipLevels;\n    BOOL Italic;\n    BYTE CharSet;\n    BYTE OutputPrecision;\n    BYTE Quality;\n    BYTE PitchAndFamily;\n    CHAR FaceName[LF_FACESIZE];\n} D3DXFONT_DESCA, *LPD3DXFONT_DESCA;\n\ntypedef struct _D3DXFONT_DESCW\n{\n    INT Height;\n    UINT Width;\n    UINT Weight;\n    UINT MipLevels;\n    BOOL Italic;\n    BYTE CharSet;\n    BYTE OutputPrecision;\n    BYTE Quality;\n    BYTE PitchAndFamily;\n    WCHAR FaceName[LF_FACESIZE];\n} D3DXFONT_DESCW, *LPD3DXFONT_DESCW;\n\nDECL_WINELIB_TYPE_AW(D3DXFONT_DESC)\nDECL_WINELIB_TYPE_AW(LPD3DXFONT_DESC)\n\n#define INTERFACE ID3DXFont\nDECLARE_INTERFACE_(ID3DXFont, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /*** ID3DXFont methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;\n    STDMETHOD(GetDescA)(THIS_ D3DXFONT_DESCA *desc) PURE;\n    STDMETHOD(GetDescW)(THIS_ D3DXFONT_DESCW *desc) PURE;\n    STDMETHOD_(BOOL, GetTextMetricsA)(THIS_ TEXTMETRICA *metrics) PURE;\n    STDMETHOD_(BOOL, GetTextMetricsW)(THIS_ TEXTMETRICW *metrics) PURE;\n\n    STDMETHOD_(HDC, GetDC)(THIS) PURE;\n    STDMETHOD(GetGlyphData)(THIS_ UINT glyph, struct IDirect3DTexture9 **texture,\n            RECT *blackbox, POINT *cellinc) PURE;\n\n    STDMETHOD(PreloadCharacters)(THIS_ UINT first, UINT last) PURE;\n    STDMETHOD(PreloadGlyphs)(THIS_ UINT first, UINT last) PURE;\n    STDMETHOD(PreloadTextA)(THIS_ const char *string, INT count) PURE;\n    STDMETHOD(PreloadTextW)(THIS_ const WCHAR *string, INT count) PURE;\n\n    STDMETHOD_(INT, DrawTextA)(THIS_ struct ID3DXSprite *sprite, const char *string,\n            INT count, RECT *rect, DWORD format, D3DCOLOR color) PURE;\n    STDMETHOD_(INT, DrawTextW)(THIS_ struct ID3DXSprite *sprite, const WCHAR *string,\n            INT count, RECT *rect, DWORD format, D3DCOLOR color) PURE;\n\n    STDMETHOD(OnLostDevice)(THIS) PURE;\n    STDMETHOD(OnResetDevice)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n\n/*** IUnknown methods ***/\n#define ID3DXFont_QueryInterface(p,a,b)    (p)->lpVtbl->QueryInterface(p,a,b)\n#define ID3DXFont_AddRef(p)                (p)->lpVtbl->AddRef(p)\n#define ID3DXFont_Release(p)               (p)->lpVtbl->Release(p)\n/*** ID3DXFont methods ***/\n#define ID3DXFont_GetDevice(p,a)           (p)->lpVtbl->GetDevice(p,a)\n#define ID3DXFont_GetDescA(p,a)            (p)->lpVtbl->GetDescA(p,a)\n#define ID3DXFont_GetDescW(p,a)            (p)->lpVtbl->GetDescW(p,a)\n#define ID3DXFont_GetTextMetricsA(p,a)     (p)->lpVtbl->GetTextMetricsA(p,a)\n#define ID3DXFont_GetTextMetricsW(p,a)     (p)->lpVtbl->GetTextMetricsW(p,a)\n#define ID3DXFont_GetDC(p)                 (p)->lpVtbl->GetDC(p)\n#define ID3DXFont_GetGlyphData(p,a,b,c,d)  (p)->lpVtbl->GetGlyphData(p,a,b,c,d)\n#define ID3DXFont_PreloadCharacters(p,a,b) (p)->lpVtbl->PreloadCharacters(p,a,b)\n#define ID3DXFont_PreloadGlyphs(p,a,b)     (p)->lpVtbl->PreloadGlyphs(p,a,b)\n#define ID3DXFont_PreloadTextA(p,a,b)      (p)->lpVtbl->PreloadTextA(p,a,b)\n#define ID3DXFont_PreloadTextW(p,a,b)      (p)->lpVtbl->PreloadTextW(p,a,b)\n#define ID3DXFont_DrawTextA(p,a,b,c,d,e,f) (p)->lpVtbl->DrawTextA(p,a,b,c,d,e,f)\n#define ID3DXFont_DrawTextW(p,a,b,c,d,e,f) (p)->lpVtbl->DrawTextW(p,a,b,c,d,e,f)\n#define ID3DXFont_OnLostDevice(p)          (p)->lpVtbl->OnLostDevice(p)\n#define ID3DXFont_OnResetDevice(p)         (p)->lpVtbl->OnResetDevice(p)\n#else\n/*** IUnknown methods ***/\n#define ID3DXFont_QueryInterface(p,a,b)    (p)->QueryInterface(a,b)\n#define ID3DXFont_AddRef(p)                (p)->AddRef()\n#define ID3DXFont_Release(p)               (p)->Release()\n/*** ID3DXFont methods ***/\n#define ID3DXFont_GetDevice(p,a)           (p)->GetDevice(a)\n#define ID3DXFont_GetDescA(p,a)            (p)->GetDescA(a)\n#define ID3DXFont_GetDescW(p,a)            (p)->GetDescW(a)\n#define ID3DXFont_GetTextMetricsA(p,a)     (p)->GetTextMetricsA(a)\n#define ID3DXFont_GetTextMetricsW(p,a)     (p)->GetTextMetricsW(a)\n#define ID3DXFont_GetDC(p)                 (p)->GetDC()\n#define ID3DXFont_GetGlyphData(p,a,b,c,d)  (p)->GetGlyphData(a,b,c,d)\n#define ID3DXFont_PreloadCharacters(p,a,b) (p)->PreloadCharacters(a,b)\n#define ID3DXFont_PreloadGlyphs(p,a,b)     (p)->PreloadGlyphs(a,b)\n#define ID3DXFont_PreloadTextA(p,a,b)      (p)->PreloadTextA(a,b)\n#define ID3DXFont_PreloadTextW(p,a,b)      (p)->PreloadTextW(a,b)\n#define ID3DXFont_DrawTextA(p,a,b,c,d,e,f) (p)->DrawTextA(a,b,c,d,e,f)\n#define ID3DXFont_DrawTextW(p,a,b,c,d,e,f) (p)->DrawTextW(a,b,c,d,e,f)\n#define ID3DXFont_OnLostDevice(p)          (p)->OnLostDevice()\n#define ID3DXFont_OnResetDevice(p)         (p)->OnResetDevice()\n#endif\n#define ID3DXFont_DrawText       WINELIB_NAME_AW(ID3DXFont_DrawText)\n#define ID3DXFont_GetDesc        WINELIB_NAME_AW(ID3DXFont_GetDesc)\n#define ID3DXFont_GetTextMetrics WINELIB_NAME_AW(ID3DXFont_GetTextMetrics)\n#define ID3DXFont_PreloadText    WINELIB_NAME_AW(ID3DXFont_PreloadText)\n\n#define INTERFACE ID3DXLine\nDECLARE_INTERFACE_(ID3DXLine, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n\n    /*** ID3DXLine methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;\n\n    STDMETHOD(Begin)(THIS) PURE;\n    STDMETHOD(Draw)(THIS_ const D3DXVECTOR2 *vertexlist, DWORD vertexlistcount, D3DCOLOR color) PURE;\n    STDMETHOD(DrawTransform)(THIS_ const D3DXVECTOR3 *vertexlist, DWORD vertexlistcount,\n            const D3DXMATRIX *transform, D3DCOLOR color) PURE;\n    STDMETHOD(SetPattern)(THIS_ DWORD pattern) PURE;\n    STDMETHOD_(DWORD, GetPattern)(THIS) PURE;\n    STDMETHOD(SetPatternScale)(THIS_ FLOAT scale) PURE;\n    STDMETHOD_(FLOAT, GetPatternScale)(THIS) PURE;\n    STDMETHOD(SetWidth)(THIS_ FLOAT width) PURE;\n    STDMETHOD_(FLOAT, GetWidth)(THIS) PURE;\n    STDMETHOD(SetAntialias)(THIS_ BOOL antialias) PURE;\n    STDMETHOD_(BOOL, GetAntialias)(THIS) PURE;\n    STDMETHOD(SetGLLines)(THIS_ BOOL gl_lines) PURE;\n    STDMETHOD_(BOOL, GetGLLines)(THIS) PURE;\n    STDMETHOD(End)(THIS) PURE;\n\n    STDMETHOD(OnLostDevice)(THIS) PURE;\n    STDMETHOD(OnResetDevice)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define ID3DXLine_QueryInterface(p,a,b)    (p)->lpVtbl->QueryInterface(p,a,b)\n#define ID3DXLine_AddRef(p)                (p)->lpVtbl->AddRef(p)\n#define ID3DXLine_Release(p)               (p)->lpVtbl->Release(p)\n/*** ID3DXLine methods ***/\n#define ID3DXLine_GetDevice(p,a)           (p)->lpVtbl->GetDevice(p,a)\n#define ID3DXLine_Begin(p)                 (p)->lpVtbl->Begin(p)\n#define ID3DXLine_Draw(p,a,b,c)            (p)->lpVtbl->Draw(p,a,b,c)\n#define ID3DXLine_DrawTransform(p,a,b,c,d) (p)->lpVtbl->DrawTransform(p,a,b,c,d)\n#define ID3DXLine_SetPattern(p,a)          (p)->lpVtbl->SetPattern(p,a)\n#define ID3DXLine_GetPattern(p)            (p)->lpVtbl->GetPattern(p)\n#define ID3DXLine_SetPatternScale(p,a)     (p)->lpVtbl->SetPatternScale(p,a)\n#define ID3DXLine_GetPatternScale(p)       (p)->lpVtbl->GetPatternScale(p)\n#define ID3DXLine_SetWidth(p,a)            (p)->lpVtbl->SetWidth(p,a)\n#define ID3DXLine_GetWidth(p)              (p)->lpVtbl->GetWidth(p)\n#define ID3DXLine_SetAntialias(p,a)        (p)->lpVtbl->SetAntialias(p,a)\n#define ID3DXLine_GetAntialias(p)          (p)->lpVtbl->GetAntialias(p)\n#define ID3DXLine_SetGLLines(p,a)          (p)->lpVtbl->SetGLLines(p,a)\n#define ID3DXLine_GetGLLines(p)            (p)->lpVtbl->GetGLLines(p)\n#define ID3DXLine_End(p)                   (p)->lpVtbl->End(p)\n#define ID3DXLine_OnLostDevice(p)          (p)->lpVtbl->OnLostDevice(p)\n#define ID3DXLine_OnResetDevice(p)         (p)->lpVtbl->OnResetDevice(p)\n#else\n/*** IUnknown methods ***/\n#define ID3DXLine_QueryInterface(p,a,b)    (p)->QueryInterface(a,b)\n#define ID3DXLine_AddRef(p)                (p)->AddRef()\n#define ID3DXLine_Release(p)               (p)->Release()\n/*** ID3DXLine methods ***/\n#define ID3DXLine_GetDevice(p,a)           (p)->GetDevice(a)\n#define ID3DXLine_Begin(p)                 (p)->Begin()\n#define ID3DXLine_Draw(p,a,b,c)            (p)->Draw(a,b,c)\n#define ID3DXLine_DrawTransform(p,a,b,c,d) (p)->DrawTransform(a,b,c,d)\n#define ID3DXLine_SetPattern(p,a)          (p)->SetPattern(a)\n#define ID3DXLine_GetPattern(p)            (p)->GetPattern()\n#define ID3DXLine_SetPatternScale(p,a)     (p)->SetPatternScale(a)\n#define ID3DXLine_GetPatternScale(p)       (p)->GetPatternScale()\n#define ID3DXLine_SetWidth(p,a)            (p)->SetWidth(a)\n#define ID3DXLine_GetWidth(p)              (p)->GetWidth()\n#define ID3DXLine_SetAntialias(p,a)        (p)->SetAntialias(a)\n#define ID3DXLine_GetAntialias(p)          (p)->GetAntialias()\n#define ID3DXLine_SetGLLines(p,a)          (p)->SetGLLines(a)\n#define ID3DXLine_GetGLLines(p)            (p)->GetGLLines()\n#define ID3DXLine_End(p)                   (p)->End()\n#define ID3DXLine_OnLostDevice(p)          (p)->OnLostDevice()\n#define ID3DXLine_OnResetDevice(p)         (p)->OnResetDevice()\n#endif\n\ntypedef struct _D3DXRTE_DESC\n{\n    UINT Size;\n    UINT MipLevels;\n    D3DFORMAT Format;\n    BOOL DepthStencil;\n    D3DFORMAT DepthStencilFormat;\n} D3DXRTE_DESC;\n\n#define INTERFACE ID3DXRenderToEnvMap\nDECLARE_INTERFACE_(ID3DXRenderToEnvMap, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n\n    /*** ID3DXRenderToEnvMap methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3DXRTE_DESC *desc) PURE;\n\n    STDMETHOD(BeginCube)(THIS_ struct IDirect3DCubeTexture9 *cubetex) PURE;\n    STDMETHOD(BeginSphere)(THIS_ struct IDirect3DTexture9 *tex) PURE;\n    STDMETHOD(BeginHemisphere)(THIS_ struct IDirect3DTexture9 *texzpos, struct IDirect3DTexture9 *texzneg) PURE;\n    STDMETHOD(BeginParabolic)(THIS_ struct IDirect3DTexture9 *texzpos, struct IDirect3DTexture9 *texzneg) PURE;\n\n    STDMETHOD(Face)(THIS_ D3DCUBEMAP_FACES face, DWORD mipfilter) PURE;\n    STDMETHOD(End)(THIS_ DWORD mipfilter) PURE;\n\n    STDMETHOD(OnLostDevice)(THIS) PURE;\n    STDMETHOD(OnResetDevice)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define ID3DXRenderToEnvMap_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)\n#define ID3DXRenderToEnvMap_AddRef(p)              (p)->lpVtbl->AddRef(p)\n#define ID3DXRenderToEnvMap_Release(p)             (p)->lpVtbl->Release(p)\n/*** ID3DXRenderToEnvMap methods ***/\n#define ID3DXRenderToEnvMap_GetDevice(p,a)         (p)->lpVtbl->GetDevice(p,a)\n#define ID3DXRenderToEnvMap_GetDesc(p,a)           (p)->lpVtbl->GetDesc(p,a)\n#define ID3DXRenderToEnvMap_BeginCube(p,a)         (p)->lpVtbl->BeginCube(p,a)\n#define ID3DXRenderToEnvMap_BeginSphere(p,a)       (p)->lpVtbl->BeginSphere(p,a)\n#define ID3DXRenderToEnvMap_BeginHemisphere(p,a,b) (p)->lpVtbl->BeginHemisphere(p,a,b)\n#define ID3DXRenderToEnvMap_BeginParabolic(p,a,b)  (p)->lpVtbl->BeginParabolic(p,a,b)\n#define ID3DXRenderToEnvMap_Face(p,a,b)            (p)->lpVtbl->Face(p,a,b)\n#define ID3DXRenderToEnvMap_End(p,a)               (p)->lpVtbl->End(p,a)\n#define ID3DXRenderToEnvMap_OnLostDevice(p)        (p)->lpVtbl->OnLostDevice(p)\n#define ID3DXRenderToEnvMap_OnLostDevice(p)        (p)->lpVtbl->OnLostDevice(p)\n#else\n/*** IUnknown methods ***/\n#define ID3DXRenderToEnvMap_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)\n#define ID3DXRenderToEnvMap_AddRef(p)              (p)->AddRef()\n#define ID3DXRenderToEnvMap_Release(p)             (p)->Release()\n/*** ID3DXRenderToEnvMap methods ***/\n#define ID3DXRenderToEnvMap_GetDevice(p,a)         (p)->GetDevice(a)\n#define ID3DXRenderToEnvMap_GetDesc(p,a)           (p)->GetDesc(a)\n#define ID3DXRenderToEnvMap_BeginCube(p,a)         (p)->BeginCube(a)\n#define ID3DXRenderToEnvMap_BeginSphere(p,a)       (p)->BeginSphere(a)\n#define ID3DXRenderToEnvMap_BeginHemisphere(p,a,b) (p)->BeginHemisphere(a,b)\n#define ID3DXRenderToEnvMap_BeginParabolic(p,a,b)  (p)->BeginParabolic(a,b)\n#define ID3DXRenderToEnvMap_Face(p,a,b)            (p)->Face(a,b)\n#define ID3DXRenderToEnvMap_End(p,a)               (p)->End(a)\n#define ID3DXRenderToEnvMap_OnLostDevice(p)        (p)->OnLostDevice()\n#define ID3DXRenderToEnvMap_OnLostDevice(p)        (p)->OnLostDevice()\n#endif\n\ntypedef struct _D3DXRTS_DESC\n{\n    UINT Width;\n    UINT Height;\n    D3DFORMAT Format;\n    BOOL DepthStencil;\n    D3DFORMAT DepthStencilFormat;\n} D3DXRTS_DESC;\n\n#define INTERFACE ID3DXRenderToSurface\nDECLARE_INTERFACE_(ID3DXRenderToSurface, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /*** ID3DXRenderToSurface methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3DXRTS_DESC *desc) PURE;\n\n    STDMETHOD(BeginScene)(THIS_ struct IDirect3DSurface9 *surface, const D3DVIEWPORT9 *viewport) PURE;\n    STDMETHOD(EndScene)(THIS_ DWORD mipfilter) PURE;\n\n    STDMETHOD(OnLostDevice)(THIS) PURE;\n    STDMETHOD(OnResetDevice)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define ID3DXRenderToSurface_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define ID3DXRenderToSurface_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define ID3DXRenderToSurface_Release(p)            (p)->lpVtbl->Release(p)\n/*** ID3DXRenderToSurface methods ***/\n#define ID3DXRenderToSurface_GetDevice(p,a)        (p)->lpVtbl->GetDevice(p,a)\n#define ID3DXRenderToSurface_GetDesc(p,a)          (p)->lpVtbl->GetDesc(p,a)\n#define ID3DXRenderToSurface_BeginScene(p,a,b)     (p)->lpVtbl->BeginScene(p,a,b)\n#define ID3DXRenderToSurface_EndScene(p,a)         (p)->lpVtbl->EndScene(p,a)\n#define ID3DXRenderToSurface_OnLostDevice(p)       (p)->lpVtbl->OnLostDevice(p)\n#define ID3DXRenderToSurface_OnResetDevice(p)      (p)->lpVtbl->OnResetDevice(p)\n#else\n/*** IUnknown methods ***/\n#define ID3DXRenderToSurface_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define ID3DXRenderToSurface_AddRef(p)             (p)->AddRef()\n#define ID3DXRenderToSurface_Release(p)            (p)->Release()\n/*** ID3DXRenderToSurface methods ***/\n#define ID3DXRenderToSurface_GetDevice(p,a)        (p)->GetDevice(a)\n#define ID3DXRenderToSurface_GetDesc(p,a)          (p)->GetDesc(a)\n#define ID3DXRenderToSurface_BeginScene(p,a,b)     (p)->BeginScene(a,b)\n#define ID3DXRenderToSurface_EndScene(p,a)         (p)->EndScene(a)\n#define ID3DXRenderToSurface_OnLostDevice(p)       (p)->OnLostDevice()\n#define ID3DXRenderToSurface_OnResetDevice(p)      (p)->OnResetDevice()\n#endif\n\n#define INTERFACE ID3DXSprite\nDECLARE_INTERFACE_(ID3DXSprite, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **object) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /*** ID3DXSprite methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;\n\n    STDMETHOD(GetTransform)(THIS_ D3DXMATRIX *transform) PURE;\n    STDMETHOD(SetTransform)(THIS_ const D3DXMATRIX *transform) PURE;\n    STDMETHOD(SetWorldViewRH)(THIS_ const D3DXMATRIX *world, const D3DXMATRIX *view) PURE;\n    STDMETHOD(SetWorldViewLH)(THIS_ const D3DXMATRIX *world, const D3DXMATRIX *view) PURE;\n\n    STDMETHOD(Begin)(THIS_ DWORD flags) PURE;\n    STDMETHOD(Draw)(THIS_ struct IDirect3DTexture9 *texture, const RECT *rect,\n            const D3DXVECTOR3 *center, const D3DXVECTOR3 *position, D3DCOLOR color) PURE;\n    STDMETHOD(Flush)(THIS) PURE;\n    STDMETHOD(End)(THIS) PURE;\n\n    STDMETHOD(OnLostDevice)(THIS) PURE;\n    STDMETHOD(OnResetDevice)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define ID3DXSprite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define ID3DXSprite_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define ID3DXSprite_Release(p)            (p)->lpVtbl->Release(p)\n/*** ID3DXSprite methods ***/\n#define ID3DXSprite_GetDevice(p,a)        (p)->lpVtbl->GetDevice(p,a)\n#define ID3DXSprite_GetTransform(p,a)     (p)->lpVtbl->GetTransform(p,a)\n#define ID3DXSprite_SetTransform(p,a)     (p)->lpVtbl->SetTransform(p,a)\n#define ID3DXSprite_SetWorldViewRH(p,a,b) (p)->lpVtbl->SetWorldViewRH(p,a,b)\n#define ID3DXSprite_SetWorldViewLH(p,a,b) (p)->lpVtbl->SetWorldViewLH(p,a,b)\n#define ID3DXSprite_Begin(p,a)            (p)->lpVtbl->Begin(p,a)\n#define ID3DXSprite_Draw(p,a,b,c,d,e)     (p)->lpVtbl->Draw(p,a,b,c,d,e)\n#define ID3DXSprite_Flush(p)              (p)->lpVtbl->Flush(p)\n#define ID3DXSprite_End(p)                (p)->lpVtbl->End(p)\n#define ID3DXSprite_OnLostDevice(p)       (p)->lpVtbl->OnLostDevice(p)\n#define ID3DXSprite_OnResetDevice(p)      (p)->lpVtbl->OnResetDevice(p)\n#else\n/*** IUnknown methods ***/\n#define ID3DXSprite_QueryInterface(p,a,b)    (p)->QueryInterface(a,b)\n#define ID3DXSprite_AddRef(p)                (p)->AddRef()\n#define ID3DXSprite_Release(p)               (p)->Release()\n/*** ID3DXSprite methods ***/\n#define ID3DXSprite_GetDevice(p,a)        (p)->GetDevice(a)\n#define ID3DXSprite_GetTransform(p,a)     (p)->GetTransform(a)\n#define ID3DXSprite_SetTransform(p,a)     (p)->SetTransform(a)\n#define ID3DXSprite_SetWorldViewRH(p,a,b) (p)->SetWorldViewRH(a,b)\n#define ID3DXSprite_SetWorldViewLH(p,a,b) (p)->SetWorldViewLH(a,b)\n#define ID3DXSprite_Begin(p,a)            (p)->Begin(a)\n#define ID3DXSprite_Draw(p,a,b,c,d,e)     (p)->Draw(a,b,c,d,e)\n#define ID3DXSprite_Flush(p)              (p)->Flush()\n#define ID3DXSprite_End(p)                (p)->End()\n#define ID3DXSprite_OnLostDevice(p)       (p)->OnLostDevice()\n#define ID3DXSprite_OnResetDevice(p)      (p)->OnResetDevice()\n#endif\n\n/**********************************************\n ****************** functions *****************\n **********************************************/\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nBOOL WINAPI D3DXCheckVersion(UINT d3dsdkvers, UINT d3dxsdkvers);\nHRESULT WINAPI D3DXCreateFontA(struct IDirect3DDevice9 *device, INT height, UINT width, UINT weight,\n        UINT miplevels, BOOL italic, DWORD charset, DWORD precision, DWORD quality, DWORD pitchandfamily,\n        const char *facename, struct ID3DXFont **font);\nHRESULT WINAPI D3DXCreateFontW(struct IDirect3DDevice9 *device, INT height, UINT width, UINT weight,\n        UINT miplevels, BOOL italic, DWORD charset, DWORD precision, DWORD quality, DWORD pitchandfamily,\n        const WCHAR *facename, struct ID3DXFont **font);\n#define D3DXCreateFont WINELIB_NAME_AW(D3DXCreateFont)\nHRESULT WINAPI D3DXCreateFontIndirectA(struct IDirect3DDevice9 *device,\n        const D3DXFONT_DESCA *desc, struct ID3DXFont **font);\nHRESULT WINAPI D3DXCreateFontIndirectW(struct IDirect3DDevice9 *device,\n        const D3DXFONT_DESCW *desc, struct ID3DXFont **font);\n#define D3DXCreateFontIndirect WINELIB_NAME_AW(D3DXCreateFontIndirect)\nHRESULT WINAPI D3DXCreateLine(struct IDirect3DDevice9 *device, struct ID3DXLine **line);\nHRESULT WINAPI D3DXCreateRenderToEnvMap(struct IDirect3DDevice9 *device, UINT size, UINT miplevels,\n        D3DFORMAT format, BOOL stencil, D3DFORMAT stencil_format, struct ID3DXRenderToEnvMap **rtem);\nHRESULT WINAPI D3DXCreateRenderToSurface(struct IDirect3DDevice9 *device, UINT width, UINT height,\n        D3DFORMAT format, BOOL stencil, D3DFORMAT stencil_format, struct ID3DXRenderToSurface **rts);\nHRESULT WINAPI D3DXCreateSprite(struct IDirect3DDevice9 *device, struct ID3DXSprite **sprite);\nBOOL WINAPI D3DXDebugMute(BOOL mute);\nUINT WINAPI D3DXGetDriverLevel(struct IDirect3DDevice9 *device);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_D3DX9CORE_H */\n"
  },
  {
    "path": "wine/windows/d3dx9effect.h",
    "content": "/*\n * Copyright 2010 Christian Costa\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"d3dx9.h\"\n\n#ifndef __D3DX9EFFECT_H__\n#define __D3DX9EFFECT_H__\n\n#define D3DXFX_DONOTSAVESTATE (1 << 0)\n#define D3DXFX_DONOTSAVESHADERSTATE (1 << 1)\n#define D3DXFX_DONOTSAVESAMPLERSTATE (1 << 2)\n#define D3DXFX_NOT_CLONEABLE (1 << 11)\n#define D3DXFX_LARGEADDRESSAWARE (1 << 17)\n\n#define D3DX_PARAMETER_SHARED       1\n#define D3DX_PARAMETER_LITERAL      2\n#define D3DX_PARAMETER_ANNOTATION   4\n\ntypedef struct _D3DXEFFECT_DESC\n{\n    const char *Creator;\n    UINT Parameters;\n    UINT Techniques;\n    UINT Functions;\n} D3DXEFFECT_DESC;\n\ntypedef struct _D3DXPARAMETER_DESC\n{\n    const char *Name;\n    const char *Semantic;\n    D3DXPARAMETER_CLASS Class;\n    D3DXPARAMETER_TYPE Type;\n    UINT Rows;\n    UINT Columns;\n    UINT Elements;\n    UINT Annotations;\n    UINT StructMembers;\n    DWORD Flags;\n    UINT Bytes;\n} D3DXPARAMETER_DESC;\n\ntypedef struct _D3DXTECHNIQUE_DESC\n{\n    const char *Name;\n    UINT Passes;\n    UINT Annotations;\n} D3DXTECHNIQUE_DESC;\n\ntypedef struct _D3DXPASS_DESC\n{\n    const char *Name;\n    UINT Annotations;\n    const DWORD *pVertexShaderFunction;\n    const DWORD *pPixelShaderFunction;\n} D3DXPASS_DESC;\n\ntypedef struct _D3DXFUNCTION_DESC\n{\n    const char *Name;\n    UINT Annotations;\n} D3DXFUNCTION_DESC;\n\ntypedef struct ID3DXEffectPool *LPD3DXEFFECTPOOL;\n\nDEFINE_GUID(IID_ID3DXEffectPool, 0x9537ab04, 0x3250, 0x412e, 0x82, 0x13, 0xfc, 0xd2, 0xf8, 0x67, 0x79, 0x33);\n\n#undef INTERFACE\n#define INTERFACE ID3DXEffectPool\n\nDECLARE_INTERFACE_(ID3DXEffectPool, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n};\n#undef INTERFACE\n\ntypedef struct ID3DXBaseEffect *LPD3DXBASEEFFECT;\n\nDEFINE_GUID(IID_ID3DXBaseEffect, 0x17c18ac, 0x103f, 0x4417, 0x8c, 0x51, 0x6b, 0xf6, 0xef, 0x1e, 0x56, 0xbe);\n\n#define INTERFACE ID3DXBaseEffect\n\nDECLARE_INTERFACE_(ID3DXBaseEffect, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /*** ID3DXBaseEffect methods ***/\n    STDMETHOD(GetDesc)(THIS_ D3DXEFFECT_DESC* desc) PURE;\n    STDMETHOD(GetParameterDesc)(THIS_ D3DXHANDLE parameter, D3DXPARAMETER_DESC* desc) PURE;\n    STDMETHOD(GetTechniqueDesc)(THIS_ D3DXHANDLE technique, D3DXTECHNIQUE_DESC* desc) PURE;\n    STDMETHOD(GetPassDesc)(THIS_ D3DXHANDLE pass, D3DXPASS_DESC* desc) PURE;\n    STDMETHOD(GetFunctionDesc)(THIS_ D3DXHANDLE shader, D3DXFUNCTION_DESC* desc) PURE;\n    STDMETHOD_(D3DXHANDLE, GetParameter)(THIS_ D3DXHANDLE parameter, UINT index) PURE;\n    STDMETHOD_(D3DXHANDLE, GetParameterByName)(THIS_ D3DXHANDLE parameter, const char *name) PURE;\n    STDMETHOD_(D3DXHANDLE, GetParameterBySemantic)(THIS_ D3DXHANDLE parameter, const char *semantic) PURE;\n    STDMETHOD_(D3DXHANDLE, GetParameterElement)(THIS_ D3DXHANDLE parameter, UINT index) PURE;\n    STDMETHOD_(D3DXHANDLE, GetTechnique)(THIS_ UINT index) PURE;\n    STDMETHOD_(D3DXHANDLE, GetTechniqueByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(D3DXHANDLE, GetPass)(THIS_ D3DXHANDLE technique, UINT index) PURE;\n    STDMETHOD_(D3DXHANDLE, GetPassByName)(THIS_ D3DXHANDLE technique, const char *name) PURE;\n    STDMETHOD_(D3DXHANDLE, GetFunction)(THIS_ UINT index);\n    STDMETHOD_(D3DXHANDLE, GetFunctionByName)(THIS_ const char *name);\n    STDMETHOD_(D3DXHANDLE, GetAnnotation)(THIS_ D3DXHANDLE object, UINT index) PURE;\n    STDMETHOD_(D3DXHANDLE, GetAnnotationByName)(THIS_ D3DXHANDLE object, const char *name) PURE;\n    STDMETHOD(SetValue)(THIS_ D3DXHANDLE parameter, const void *data, UINT bytes) PURE;\n    STDMETHOD(GetValue)(THIS_ D3DXHANDLE parameter, void *data, UINT bytes) PURE;\n    STDMETHOD(SetBool)(THIS_ D3DXHANDLE parameter, BOOL b) PURE;\n    STDMETHOD(GetBool)(THIS_ D3DXHANDLE parameter, BOOL* b) PURE;\n    STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE parameter, const BOOL *b, UINT count) PURE;\n    STDMETHOD(GetBoolArray)(THIS_ D3DXHANDLE parameter, BOOL* b, UINT count) PURE;\n    STDMETHOD(SetInt)(THIS_ D3DXHANDLE parameter, INT n) PURE;\n    STDMETHOD(GetInt)(THIS_ D3DXHANDLE parameter, INT* n) PURE;\n    STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE parameter, const INT *n, UINT count) PURE;\n    STDMETHOD(GetIntArray)(THIS_ D3DXHANDLE parameter, INT* n, UINT count) PURE;\n    STDMETHOD(SetFloat)(THIS_ D3DXHANDLE parameter, FLOAT f) PURE;\n    STDMETHOD(GetFloat)(THIS_ D3DXHANDLE parameter, FLOAT* f) PURE;\n    STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE parameter, const FLOAT *f, UINT count) PURE;\n    STDMETHOD(GetFloatArray)(THIS_ D3DXHANDLE parameter, FLOAT* f, UINT count) PURE;\n    STDMETHOD(SetVector)(THIS_ D3DXHANDLE parameter, const D3DXVECTOR4 *vector) PURE;\n    STDMETHOD(GetVector)(THIS_ D3DXHANDLE parameter, D3DXVECTOR4* vector) PURE;\n    STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE parameter, const D3DXVECTOR4 *vector, UINT count) PURE;\n    STDMETHOD(GetVectorArray)(THIS_ D3DXHANDLE parameter, D3DXVECTOR4* vector, UINT count) PURE;\n    STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix) PURE;\n    STDMETHOD(GetMatrix)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix) PURE;\n    STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix, UINT count) PURE;\n    STDMETHOD(GetMatrixArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count) PURE;\n    STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX **matrix, UINT count) PURE;\n    STDMETHOD(GetMatrixPointerArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count) PURE;\n    STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix) PURE;\n    STDMETHOD(GetMatrixTranspose)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix) PURE;\n    STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix, UINT count) PURE;\n    STDMETHOD(GetMatrixTransposeArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count) PURE;\n    STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX **matrix, UINT count) PURE;\n    STDMETHOD(GetMatrixTransposePointerArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count) PURE;\n    STDMETHOD(SetString)(THIS_ D3DXHANDLE parameter, const char *string) PURE;\n    STDMETHOD(GetString)(THIS_ D3DXHANDLE parameter, const char **string) PURE;\n    STDMETHOD(SetTexture)(THIS_ D3DXHANDLE parameter, struct IDirect3DBaseTexture9 *texture) PURE;\n    STDMETHOD(GetTexture)(THIS_ D3DXHANDLE parameter, struct IDirect3DBaseTexture9 **texture) PURE;\n    STDMETHOD(GetPixelShader)(THIS_ D3DXHANDLE parameter, struct IDirect3DPixelShader9 **shader) PURE;\n    STDMETHOD(GetVertexShader)(THIS_ D3DXHANDLE parameter, struct IDirect3DVertexShader9 **shader) PURE;\n    STDMETHOD(SetArrayRange)(THIS_ D3DXHANDLE parameter, UINT start, UINT end) PURE;\n};\n#undef INTERFACE\n\ntypedef struct ID3DXEffectStateManager *LPD3DXEFFECTSTATEMANAGER;\n\nDEFINE_GUID(IID_ID3DXEffectStateManager, 0x79aab587, 0x6dbc, 0x4fa7, 0x82, 0xde, 0x37, 0xfa, 0x17, 0x81, 0xc5, 0xce);\n\n#define INTERFACE ID3DXEffectStateManager\n\nDECLARE_INTERFACE_(ID3DXEffectStateManager, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /*** ID3DXEffectStateManager methods ***/\n    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE;\n    STDMETHOD(SetMaterial)(THIS_ const D3DMATERIAL9 *material) PURE;\n    STDMETHOD(SetLight)(THIS_ DWORD index, const D3DLIGHT9 *light) PURE;\n    STDMETHOD(LightEnable)(THIS_ DWORD index, BOOL enable) PURE;\n    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE state, DWORD value) PURE;\n    STDMETHOD(SetTexture)(THIS_ DWORD stage, struct IDirect3DBaseTexture9 *texture) PURE;\n    STDMETHOD(SetTextureStageState)(THIS_ DWORD stage, D3DTEXTURESTAGESTATETYPE type, DWORD value) PURE;\n    STDMETHOD(SetSamplerState)(THIS_ DWORD sampler, D3DSAMPLERSTATETYPE type, DWORD value) PURE;\n    STDMETHOD(SetNPatchMode)(THIS_ FLOAT num_segments) PURE;\n    STDMETHOD(SetFVF)(THIS_ DWORD format) PURE;\n    STDMETHOD(SetVertexShader)(THIS_ struct IDirect3DVertexShader9 *shader) PURE;\n    STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT register_index, const FLOAT *constant_data, UINT register_count) PURE;\n    STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT register_index, const INT *constant_data, UINT register_count) PURE;\n    STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT register_index, const BOOL *constant_data, UINT register_count) PURE;\n    STDMETHOD(SetPixelShader)(THIS_ struct IDirect3DPixelShader9 *shader) PURE;\n    STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT register_index, const FLOAT *constant_data, UINT register_count) PURE;\n    STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT register_index, const INT *constant_data, UINT register_count) PURE;\n    STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT register_index, const BOOL *constant_data, UINT register_count) PURE;\n};\n#undef INTERFACE\n\ntypedef struct ID3DXEffect *LPD3DXEFFECT;\n\n#if D3DX_SDK_VERSION <= 25\nDEFINE_GUID(IID_ID3DXEffect, 0xd165ccb1, 0x62b0, 0x4a33, 0xb3, 0xfa, 0xa9, 0x23, 0x00, 0x30, 0x5a, 0x11);\n#elif D3DX_SDK_VERSION == 26\nDEFINE_GUID(IID_ID3DXEffect, 0xc7b17651, 0x5420, 0x490e, 0x8a, 0x7f, 0x92, 0x36, 0x75, 0xa2, 0xd6, 0x87);\n#else\nDEFINE_GUID(IID_ID3DXEffect, 0xf6ceb4b3, 0x4e4c, 0x40dd, 0xb8, 0x83, 0x8d, 0x8d, 0xe5, 0xea, 0x0c, 0xd5);\n#endif\n\n#define INTERFACE ID3DXEffect\n\nDECLARE_INTERFACE_(ID3DXEffect, ID3DXBaseEffect)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /*** ID3DXBaseEffect methods ***/\n    STDMETHOD(GetDesc)(THIS_ D3DXEFFECT_DESC* desc) PURE;\n    STDMETHOD(GetParameterDesc)(THIS_ D3DXHANDLE parameter, D3DXPARAMETER_DESC* desc) PURE;\n    STDMETHOD(GetTechniqueDesc)(THIS_ D3DXHANDLE technique, D3DXTECHNIQUE_DESC* desc) PURE;\n    STDMETHOD(GetPassDesc)(THIS_ D3DXHANDLE pass, D3DXPASS_DESC* desc) PURE;\n    STDMETHOD(GetFunctionDesc)(THIS_ D3DXHANDLE shader, D3DXFUNCTION_DESC* desc) PURE;\n    STDMETHOD_(D3DXHANDLE, GetParameter)(THIS_ D3DXHANDLE parameter, UINT index) PURE;\n    STDMETHOD_(D3DXHANDLE, GetParameterByName)(THIS_ D3DXHANDLE parameter, const char *name) PURE;\n    STDMETHOD_(D3DXHANDLE, GetParameterBySemantic)(THIS_ D3DXHANDLE parameter, const char *semantic) PURE;\n    STDMETHOD_(D3DXHANDLE, GetParameterElement)(THIS_ D3DXHANDLE parameter, UINT index) PURE;\n    STDMETHOD_(D3DXHANDLE, GetTechnique)(THIS_ UINT index) PURE;\n    STDMETHOD_(D3DXHANDLE, GetTechniqueByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(D3DXHANDLE, GetPass)(THIS_ D3DXHANDLE technique, UINT index) PURE;\n    STDMETHOD_(D3DXHANDLE, GetPassByName)(THIS_ D3DXHANDLE technique, const char *name) PURE;\n    STDMETHOD_(D3DXHANDLE, GetFunction)(THIS_ UINT index);\n    STDMETHOD_(D3DXHANDLE, GetFunctionByName)(THIS_ const char *name);\n    STDMETHOD_(D3DXHANDLE, GetAnnotation)(THIS_ D3DXHANDLE object, UINT index) PURE;\n    STDMETHOD_(D3DXHANDLE, GetAnnotationByName)(THIS_ D3DXHANDLE object, const char *name) PURE;\n    STDMETHOD(SetValue)(THIS_ D3DXHANDLE parameter, const void *data, UINT bytes) PURE;\n    STDMETHOD(GetValue)(THIS_ D3DXHANDLE parameter, void *data, UINT bytes) PURE;\n    STDMETHOD(SetBool)(THIS_ D3DXHANDLE parameter, BOOL b) PURE;\n    STDMETHOD(GetBool)(THIS_ D3DXHANDLE parameter, BOOL* b) PURE;\n    STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE parameter, const BOOL *b, UINT count) PURE;\n    STDMETHOD(GetBoolArray)(THIS_ D3DXHANDLE parameter, BOOL* b, UINT count) PURE;\n    STDMETHOD(SetInt)(THIS_ D3DXHANDLE parameter, INT n) PURE;\n    STDMETHOD(GetInt)(THIS_ D3DXHANDLE parameter, INT* n) PURE;\n    STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE parameter, const INT *n, UINT count) PURE;\n    STDMETHOD(GetIntArray)(THIS_ D3DXHANDLE parameter, INT* n, UINT count) PURE;\n    STDMETHOD(SetFloat)(THIS_ D3DXHANDLE parameter, FLOAT f) PURE;\n    STDMETHOD(GetFloat)(THIS_ D3DXHANDLE parameter, FLOAT* f) PURE;\n    STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE parameter, const FLOAT *f, UINT count) PURE;\n    STDMETHOD(GetFloatArray)(THIS_ D3DXHANDLE parameter, FLOAT* f, UINT count) PURE;\n    STDMETHOD(SetVector)(THIS_ D3DXHANDLE parameter, const D3DXVECTOR4 *vector) PURE;\n    STDMETHOD(GetVector)(THIS_ D3DXHANDLE parameter, D3DXVECTOR4* vector) PURE;\n    STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE parameter, const D3DXVECTOR4 *vector, UINT count) PURE;\n    STDMETHOD(GetVectorArray)(THIS_ D3DXHANDLE parameter, D3DXVECTOR4* vector, UINT count) PURE;\n    STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix) PURE;\n    STDMETHOD(GetMatrix)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix) PURE;\n    STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix, UINT count) PURE;\n    STDMETHOD(GetMatrixArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count) PURE;\n    STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX **matrix, UINT count) PURE;\n    STDMETHOD(GetMatrixPointerArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count) PURE;\n    STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix) PURE;\n    STDMETHOD(GetMatrixTranspose)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix) PURE;\n    STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix, UINT count) PURE;\n    STDMETHOD(GetMatrixTransposeArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count) PURE;\n    STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX **matrix, UINT count) PURE;\n    STDMETHOD(GetMatrixTransposePointerArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count) PURE;\n    STDMETHOD(SetString)(THIS_ D3DXHANDLE parameter, const char *string) PURE;\n    STDMETHOD(GetString)(THIS_ D3DXHANDLE parameter, const char **string) PURE;\n    STDMETHOD(SetTexture)(THIS_ D3DXHANDLE parameter, struct IDirect3DBaseTexture9 *texture) PURE;\n    STDMETHOD(GetTexture)(THIS_ D3DXHANDLE parameter, struct IDirect3DBaseTexture9 **texture) PURE;\n    STDMETHOD(GetPixelShader)(THIS_ D3DXHANDLE parameter, struct IDirect3DPixelShader9 **shader) PURE;\n    STDMETHOD(GetVertexShader)(THIS_ D3DXHANDLE parameter, struct IDirect3DVertexShader9 **shader) PURE;\n    STDMETHOD(SetArrayRange)(THIS_ D3DXHANDLE parameter, UINT start, UINT end) PURE;\n    /*** ID3DXEffect methods ***/\n    STDMETHOD(GetPool)(THIS_ ID3DXEffectPool **pool) PURE;\n    STDMETHOD(SetTechnique)(THIS_ D3DXHANDLE technique) PURE;\n    STDMETHOD_(D3DXHANDLE, GetCurrentTechnique)(THIS) PURE;\n    STDMETHOD(ValidateTechnique)(THIS_ D3DXHANDLE technique) PURE;\n    STDMETHOD(FindNextValidTechnique)(THIS_ D3DXHANDLE technique, D3DXHANDLE* next_technique) PURE;\n    STDMETHOD_(BOOL, IsParameterUsed)(THIS_ D3DXHANDLE parameter, D3DXHANDLE technique) PURE;\n    STDMETHOD(Begin)(THIS_ UINT *passes, DWORD flags) PURE;\n    STDMETHOD(BeginPass)(THIS_ UINT pass) PURE;\n    STDMETHOD(CommitChanges)(THIS) PURE;\n    STDMETHOD(EndPass)(THIS) PURE;\n    STDMETHOD(End)(THIS) PURE;\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;\n    STDMETHOD(OnLostDevice)(THIS) PURE;\n    STDMETHOD(OnResetDevice)(THIS) PURE;\n    STDMETHOD(SetStateManager)(THIS_ ID3DXEffectStateManager *manager) PURE;\n    STDMETHOD(GetStateManager)(THIS_ ID3DXEffectStateManager **manager) PURE;\n    STDMETHOD(BeginParameterBlock)(THIS) PURE;\n    STDMETHOD_(D3DXHANDLE, EndParameterBlock)(THIS) PURE;\n    STDMETHOD(ApplyParameterBlock)(THIS_ D3DXHANDLE parameter_block) PURE;\n#if D3DX_SDK_VERSION >= 26\n    STDMETHOD(DeleteParameterBlock)(THIS_ D3DXHANDLE parameter_block) PURE;\n#endif\n    STDMETHOD(CloneEffect)(THIS_ struct IDirect3DDevice9 *device, struct ID3DXEffect **effect) PURE;\n#if D3DX_SDK_VERSION >= 27\n    STDMETHOD(SetRawValue)(THIS_ D3DXHANDLE parameter, const void *data, UINT byte_offset, UINT bytes) PURE;\n#endif\n};\n\n#undef INTERFACE\n\ntypedef struct ID3DXEffectCompiler *LPD3DXEFFECTCOMPILER;\n\nDEFINE_GUID(IID_ID3DXEffectCompiler, 0x51b8a949, 0x1a31, 0x47e6, 0xbe, 0xa0, 0x4b, 0x30, 0xdb, 0x53, 0xf1, 0xe0);\n\n#define INTERFACE ID3DXEffectCompiler\n\nDECLARE_INTERFACE_(ID3DXEffectCompiler, ID3DXBaseEffect)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /*** ID3DXBaseEffect methods ***/\n    STDMETHOD(GetDesc)(THIS_ D3DXEFFECT_DESC* desc) PURE;\n    STDMETHOD(GetParameterDesc)(THIS_ D3DXHANDLE parameter, D3DXPARAMETER_DESC* desc) PURE;\n    STDMETHOD(GetTechniqueDesc)(THIS_ D3DXHANDLE technique, D3DXTECHNIQUE_DESC* desc) PURE;\n    STDMETHOD(GetPassDesc)(THIS_ D3DXHANDLE pass, D3DXPASS_DESC* desc) PURE;\n    STDMETHOD(GetFunctionDesc)(THIS_ D3DXHANDLE shader, D3DXFUNCTION_DESC* desc) PURE;\n    STDMETHOD_(D3DXHANDLE, GetParameter)(THIS_ D3DXHANDLE parameter, UINT index) PURE;\n    STDMETHOD_(D3DXHANDLE, GetParameterByName)(THIS_ D3DXHANDLE parameter, const char *name) PURE;\n    STDMETHOD_(D3DXHANDLE, GetParameterBySemantic)(THIS_ D3DXHANDLE parameter, const char *semantic) PURE;\n    STDMETHOD_(D3DXHANDLE, GetParameterElement)(THIS_ D3DXHANDLE parameter, UINT index) PURE;\n    STDMETHOD_(D3DXHANDLE, GetTechnique)(THIS_ UINT index) PURE;\n    STDMETHOD_(D3DXHANDLE, GetTechniqueByName)(THIS_ const char *name) PURE;\n    STDMETHOD_(D3DXHANDLE, GetPass)(THIS_ D3DXHANDLE technique, UINT index) PURE;\n    STDMETHOD_(D3DXHANDLE, GetPassByName)(THIS_ D3DXHANDLE technique, const char *name) PURE;\n    STDMETHOD_(D3DXHANDLE, GetFunction)(THIS_ UINT index);\n    STDMETHOD_(D3DXHANDLE, GetFunctionByName)(THIS_ const char *name);\n    STDMETHOD_(D3DXHANDLE, GetAnnotation)(THIS_ D3DXHANDLE object, UINT index) PURE;\n    STDMETHOD_(D3DXHANDLE, GetAnnotationByName)(THIS_ D3DXHANDLE object, const char *name) PURE;\n    STDMETHOD(SetValue)(THIS_ D3DXHANDLE parameter, const void *data, UINT bytes) PURE;\n    STDMETHOD(GetValue)(THIS_ D3DXHANDLE parameter, void *data, UINT bytes) PURE;\n    STDMETHOD(SetBool)(THIS_ D3DXHANDLE parameter, BOOL b) PURE;\n    STDMETHOD(GetBool)(THIS_ D3DXHANDLE parameter, BOOL* b) PURE;\n    STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE parameter, const BOOL *b, UINT count) PURE;\n    STDMETHOD(GetBoolArray)(THIS_ D3DXHANDLE parameter, BOOL* b, UINT count) PURE;\n    STDMETHOD(SetInt)(THIS_ D3DXHANDLE parameter, INT n) PURE;\n    STDMETHOD(GetInt)(THIS_ D3DXHANDLE parameter, INT* n) PURE;\n    STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE parameter, const INT *n, UINT count) PURE;\n    STDMETHOD(GetIntArray)(THIS_ D3DXHANDLE parameter, INT* n, UINT count) PURE;\n    STDMETHOD(SetFloat)(THIS_ D3DXHANDLE parameter, FLOAT f) PURE;\n    STDMETHOD(GetFloat)(THIS_ D3DXHANDLE parameter, FLOAT* f) PURE;\n    STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE parameter, const FLOAT *f, UINT count) PURE;\n    STDMETHOD(GetFloatArray)(THIS_ D3DXHANDLE parameter, FLOAT* f, UINT count) PURE;\n    STDMETHOD(SetVector)(THIS_ D3DXHANDLE parameter, const D3DXVECTOR4 *vector) PURE;\n    STDMETHOD(GetVector)(THIS_ D3DXHANDLE parameter, D3DXVECTOR4* vector) PURE;\n    STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE parameter, const D3DXVECTOR4 *vector, UINT count) PURE;\n    STDMETHOD(GetVectorArray)(THIS_ D3DXHANDLE parameter, D3DXVECTOR4* vector, UINT count) PURE;\n    STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix) PURE;\n    STDMETHOD(GetMatrix)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix) PURE;\n    STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix, UINT count) PURE;\n    STDMETHOD(GetMatrixArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count) PURE;\n    STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX **matrix, UINT count) PURE;\n    STDMETHOD(GetMatrixPointerArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count) PURE;\n    STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix) PURE;\n    STDMETHOD(GetMatrixTranspose)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix) PURE;\n    STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix, UINT count) PURE;\n    STDMETHOD(GetMatrixTransposeArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count) PURE;\n    STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX **matrix, UINT count) PURE;\n    STDMETHOD(GetMatrixTransposePointerArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count) PURE;\n    STDMETHOD(SetString)(THIS_ D3DXHANDLE parameter, const char *string) PURE;\n    STDMETHOD(GetString)(THIS_ D3DXHANDLE parameter, const char **string) PURE;\n    STDMETHOD(SetTexture)(THIS_ D3DXHANDLE parameter, struct IDirect3DBaseTexture9 *texture) PURE;\n    STDMETHOD(GetTexture)(THIS_ D3DXHANDLE parameter, struct IDirect3DBaseTexture9 **texture) PURE;\n    STDMETHOD(GetPixelShader)(THIS_ D3DXHANDLE parameter, struct IDirect3DPixelShader9 **shader) PURE;\n    STDMETHOD(GetVertexShader)(THIS_ D3DXHANDLE parameter, struct IDirect3DVertexShader9 **shader) PURE;\n    STDMETHOD(SetArrayRange)(THIS_ D3DXHANDLE parameter, UINT start, UINT end) PURE;\n    /*** ID3DXEffectCompiler methods ***/\n    STDMETHOD(SetLiteral)(THIS_ D3DXHANDLE parameter, BOOL literal) PURE;\n    STDMETHOD(GetLiteral)(THIS_ D3DXHANDLE parameter, BOOL* literal) PURE;\n    STDMETHOD(CompileEffect)(THIS_ DWORD flags, ID3DXBuffer **effect, ID3DXBuffer **error_msgs) PURE;\n    STDMETHOD(CompileShader)(THIS_ D3DXHANDLE function, const char *target, DWORD flags,\n            ID3DXBuffer **shader, ID3DXBuffer **error_msgs, ID3DXConstantTable **constant_table) PURE;\n};\n#undef INTERFACE\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nHRESULT WINAPI D3DXCreateEffectPool(ID3DXEffectPool **pool);\nHRESULT WINAPI D3DXCreateEffect(struct IDirect3DDevice9 *device, const void *srcdata, UINT srcdatalen,\n        const D3DXMACRO *defines, struct ID3DXInclude *include, DWORD flags,\n        struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);\nHRESULT WINAPI D3DXCreateEffectEx(struct IDirect3DDevice9 *device, const void *srcdata, UINT srcdatalen,\n        const D3DXMACRO *defines, struct ID3DXInclude *include, const char *skip_constants, DWORD flags,\n        struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);\nHRESULT WINAPI D3DXCreateEffectCompiler(const char *srcdata, UINT srcdatalen, const D3DXMACRO *defines,\n        ID3DXInclude *include, DWORD flags, ID3DXEffectCompiler **compiler, ID3DXBuffer **parse_errors);\nHRESULT WINAPI D3DXCreateEffectFromFileExA(struct IDirect3DDevice9 *device, const char *srcfile,\n        const D3DXMACRO *defines, struct ID3DXInclude *include, const char *skip_constants, DWORD flags,\n        struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);\nHRESULT WINAPI D3DXCreateEffectFromFileExW(struct IDirect3DDevice9 *device, const WCHAR *srcfile,\n        const D3DXMACRO *defines, struct ID3DXInclude *include, const char *skip_constants, DWORD flags,\n        struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);\n#define D3DXCreateEffectFromFileEx WINELIB_NAME_AW(D3DXCreateEffectFromFileEx)\n\nHRESULT WINAPI D3DXCreateEffectFromFileA(struct IDirect3DDevice9 *device, const char *srcfile,\n        const D3DXMACRO *defines, struct ID3DXInclude *include, DWORD flags,\n        struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);\nHRESULT WINAPI D3DXCreateEffectFromFileW(struct IDirect3DDevice9 *device, const WCHAR *srcfile,\n        const D3DXMACRO *defines, struct ID3DXInclude *include, DWORD flags,\n        struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);\n#define D3DXCreateEffectFromFile WINELIB_NAME_AW(D3DXCreateEffectFromFile)\n\nHRESULT WINAPI D3DXCreateEffectFromResourceExA(struct IDirect3DDevice9 *device, HMODULE srcmodule,\n        const char *srcresource, const D3DXMACRO *defines, struct ID3DXInclude *include,\n        const char *skip_constants, DWORD flags, struct ID3DXEffectPool *pool,\n        struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);\nHRESULT WINAPI D3DXCreateEffectFromResourceExW(struct IDirect3DDevice9 *device, HMODULE srcmodule,\n        const WCHAR *srcresource, const D3DXMACRO *defines, struct ID3DXInclude *include,\n        const char *skip_constants, DWORD flags, struct ID3DXEffectPool *pool,\n        struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);\n#define D3DXCreateEffectFromResourceEx WINELIB_NAME_AW(D3DXCreateEffectFromResourceEx)\n\nHRESULT WINAPI D3DXCreateEffectFromResourceA(struct IDirect3DDevice9 *device, HMODULE srcmodule,\n        const char *srcresource, const D3DXMACRO *defines, struct ID3DXInclude *include, DWORD flags,\n        struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);\nHRESULT WINAPI D3DXCreateEffectFromResourceW(struct IDirect3DDevice9 *device, HMODULE srcmodule,\n        const WCHAR *srcresource, const D3DXMACRO *defines, struct ID3DXInclude *include, DWORD flags,\n        struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);\n#define D3DXCreateEffectFromResource WINELIB_NAME_AW(D3DXCreateEffectFromResource)\n\nHRESULT WINAPI D3DXCreateEffectCompilerFromFileA(const char *srcfile, const D3DXMACRO *defines,\n        ID3DXInclude *include, DWORD flags, ID3DXEffectCompiler **effectcompiler, ID3DXBuffer **parseerrors);\nHRESULT WINAPI D3DXCreateEffectCompilerFromFileW(const WCHAR *srcfile, const D3DXMACRO *defines,\n        ID3DXInclude *include, DWORD flags, ID3DXEffectCompiler **effectcompiler, ID3DXBuffer **parseerrors);\n#define D3DXCreateEffectCompilerFromFile WINELIB_NAME_AW(D3DXCreateEffectCompilerFromFile)\n\nHRESULT WINAPI D3DXCreateEffectCompilerFromResourceA(HMODULE srcmodule, const char *srcresource,\n        const D3DXMACRO *defines, ID3DXInclude *include, DWORD flags,\n        ID3DXEffectCompiler **effectcompiler, ID3DXBuffer **parseerrors);\nHRESULT WINAPI D3DXCreateEffectCompilerFromResourceW(HMODULE srcmodule, const WCHAR *srcresource,\n        const D3DXMACRO *defines, ID3DXInclude *include, DWORD flags,\n        ID3DXEffectCompiler **effectcompiler, ID3DXBuffer **parseerrors);\n#define D3DXCreateEffectCompilerFromResource WINELIB_NAME_AW(D3DXCreateEffectCompilerFromResource)\n\nHRESULT WINAPI D3DXDisassembleEffect(ID3DXEffect *effect, BOOL enable_color_code, ID3DXBuffer **disassembly);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __D3DX9EFFECT_H__ */\n"
  },
  {
    "path": "wine/windows/d3dx9math.h",
    "content": "/*\n * Copyright (C) 2007 David Adam\n * Copyright (C) 2007 Tony Wasserka\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"d3dx9.h\"\n\n#ifndef __D3DX9MATH_H__\n#define __D3DX9MATH_H__\n\n#include <math.h>\n\n#define D3DX_PI    ((FLOAT)3.141592654)\n#define D3DX_1BYPI ((FLOAT)0.318309886)\n\n#define D3DXSH_MINORDER 2\n#define D3DXSH_MAXORDER 6\n\n#define D3DXToRadian(degree) ((degree) * (D3DX_PI / 180.0f))\n#define D3DXToDegree(radian) ((radian) * (180.0f / D3DX_PI))\n\ntypedef struct D3DXVECTOR2\n{\n#ifdef __cplusplus\n    D3DXVECTOR2();\n    D3DXVECTOR2(const FLOAT *pf);\n    D3DXVECTOR2(FLOAT fx, FLOAT fy);\n\n    operator FLOAT* ();\n    operator const FLOAT* () const;\n\n    D3DXVECTOR2& operator += (const D3DXVECTOR2&);\n    D3DXVECTOR2& operator -= (const D3DXVECTOR2&);\n    D3DXVECTOR2& operator *= (FLOAT);\n    D3DXVECTOR2& operator /= (FLOAT);\n\n    D3DXVECTOR2 operator + () const;\n    D3DXVECTOR2 operator - () const;\n\n    D3DXVECTOR2 operator + (const D3DXVECTOR2&) const;\n    D3DXVECTOR2 operator - (const D3DXVECTOR2&) const;\n    D3DXVECTOR2 operator * (FLOAT) const;\n    D3DXVECTOR2 operator / (FLOAT) const;\n\n    friend D3DXVECTOR2 operator * (FLOAT, const D3DXVECTOR2&);\n\n    BOOL operator == (const D3DXVECTOR2&) const;\n    BOOL operator != (const D3DXVECTOR2&) const;\n#endif /* __cplusplus */\n    FLOAT x, y;\n} D3DXVECTOR2, *LPD3DXVECTOR2;\n\n#ifdef __cplusplus\ntypedef struct D3DXVECTOR3 : public D3DVECTOR\n{\n    D3DXVECTOR3();\n    D3DXVECTOR3(const FLOAT *pf);\n    D3DXVECTOR3(const D3DVECTOR& v);\n    D3DXVECTOR3(FLOAT fx, FLOAT fy, FLOAT fz);\n\n    operator FLOAT* ();\n    operator const FLOAT* () const;\n\n    D3DXVECTOR3& operator += (const D3DXVECTOR3&);\n    D3DXVECTOR3& operator -= (const D3DXVECTOR3&);\n    D3DXVECTOR3& operator *= (FLOAT);\n    D3DXVECTOR3& operator /= (FLOAT);\n\n    D3DXVECTOR3 operator + () const;\n    D3DXVECTOR3 operator - () const;\n\n    D3DXVECTOR3 operator + (const D3DXVECTOR3&) const;\n    D3DXVECTOR3 operator - (const D3DXVECTOR3&) const;\n    D3DXVECTOR3 operator * (FLOAT) const;\n    D3DXVECTOR3 operator / (FLOAT) const;\n\n    friend D3DXVECTOR3 operator * (FLOAT, const struct D3DXVECTOR3&);\n\n    BOOL operator == (const D3DXVECTOR3&) const;\n    BOOL operator != (const D3DXVECTOR3&) const;\n} D3DXVECTOR3, *LPD3DXVECTOR3;\n#else /* !__cplusplus */\ntypedef struct _D3DVECTOR D3DXVECTOR3, *LPD3DXVECTOR3;\n#endif /* !__cplusplus */\n\ntypedef struct D3DXVECTOR4\n{\n#ifdef __cplusplus\n    D3DXVECTOR4();\n    D3DXVECTOR4(const FLOAT *pf);\n    D3DXVECTOR4(FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw);\n\n    operator FLOAT* ();\n    operator const FLOAT* () const;\n\n    D3DXVECTOR4& operator += (const D3DXVECTOR4&);\n    D3DXVECTOR4& operator -= (const D3DXVECTOR4&);\n    D3DXVECTOR4& operator *= (FLOAT);\n    D3DXVECTOR4& operator /= (FLOAT);\n\n    D3DXVECTOR4 operator + () const;\n    D3DXVECTOR4 operator - () const;\n\n    D3DXVECTOR4 operator + (const D3DXVECTOR4&) const;\n    D3DXVECTOR4 operator - (const D3DXVECTOR4&) const;\n    D3DXVECTOR4 operator * (FLOAT) const;\n    D3DXVECTOR4 operator / (FLOAT) const;\n\n    friend D3DXVECTOR4 operator * (FLOAT, const D3DXVECTOR4&);\n\n    BOOL operator == (const D3DXVECTOR4&) const;\n    BOOL operator != (const D3DXVECTOR4&) const;\n#endif /* __cplusplus */\n    FLOAT x, y, z, w;\n} D3DXVECTOR4, *LPD3DXVECTOR4;\n\n#ifdef __cplusplus\ntypedef struct D3DXMATRIX : public D3DMATRIX\n{\n    D3DXMATRIX();\n    D3DXMATRIX(const FLOAT *pf);\n    D3DXMATRIX(const D3DMATRIX& mat);\n    D3DXMATRIX(FLOAT f11, FLOAT f12, FLOAT f13, FLOAT f14,\n               FLOAT f21, FLOAT f22, FLOAT f23, FLOAT f24,\n               FLOAT f31, FLOAT f32, FLOAT f33, FLOAT f34,\n               FLOAT f41, FLOAT f42, FLOAT f43, FLOAT f44);\n\n    FLOAT& operator () (UINT row, UINT col);\n    FLOAT operator () (UINT row, UINT col) const;\n\n    operator FLOAT* ();\n    operator const FLOAT* () const;\n\n    D3DXMATRIX& operator *= (const D3DXMATRIX&);\n    D3DXMATRIX& operator += (const D3DXMATRIX&);\n    D3DXMATRIX& operator -= (const D3DXMATRIX&);\n    D3DXMATRIX& operator *= (FLOAT);\n    D3DXMATRIX& operator /= (FLOAT);\n\n    D3DXMATRIX operator + () const;\n    D3DXMATRIX operator - () const;\n\n    D3DXMATRIX operator * (const D3DXMATRIX&) const;\n    D3DXMATRIX operator + (const D3DXMATRIX&) const;\n    D3DXMATRIX operator - (const D3DXMATRIX&) const;\n    D3DXMATRIX operator * (FLOAT) const;\n    D3DXMATRIX operator / (FLOAT) const;\n\n    friend D3DXMATRIX operator * (FLOAT, const D3DXMATRIX&);\n\n    BOOL operator == (const D3DXMATRIX&) const;\n    BOOL operator != (const D3DXMATRIX&) const;\n} D3DXMATRIX, *LPD3DXMATRIX;\n#else /* !__cplusplus */\ntypedef struct _D3DMATRIX D3DXMATRIX, *LPD3DXMATRIX;\n#endif /* !__cplusplus */\n\ntypedef struct D3DXQUATERNION\n{\n#ifdef __cplusplus\n    D3DXQUATERNION();\n    D3DXQUATERNION(const FLOAT *pf);\n    D3DXQUATERNION(FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw);\n\n    operator FLOAT* ();\n    operator const FLOAT* () const;\n\n    D3DXQUATERNION& operator += (const D3DXQUATERNION&);\n    D3DXQUATERNION& operator -= (const D3DXQUATERNION&);\n    D3DXQUATERNION& operator *= (const D3DXQUATERNION&);\n    D3DXQUATERNION& operator *= (FLOAT);\n    D3DXQUATERNION& operator /= (FLOAT);\n\n    D3DXQUATERNION  operator + () const;\n    D3DXQUATERNION  operator - () const;\n\n    D3DXQUATERNION operator + (const D3DXQUATERNION&) const;\n    D3DXQUATERNION operator - (const D3DXQUATERNION&) const;\n    D3DXQUATERNION operator * (const D3DXQUATERNION&) const;\n    D3DXQUATERNION operator * (FLOAT) const;\n    D3DXQUATERNION operator / (FLOAT) const;\n\n    friend D3DXQUATERNION operator * (FLOAT, const D3DXQUATERNION&);\n\n    BOOL operator == (const D3DXQUATERNION&) const;\n    BOOL operator != (const D3DXQUATERNION&) const;\n#endif /* __cplusplus */\n    FLOAT x, y, z, w;\n} D3DXQUATERNION, *LPD3DXQUATERNION;\n\ntypedef struct D3DXPLANE\n{\n#ifdef __cplusplus\n    D3DXPLANE();\n    D3DXPLANE(const FLOAT *pf);\n    D3DXPLANE(FLOAT fa, FLOAT fb, FLOAT fc, FLOAT fd);\n\n    operator FLOAT* ();\n    operator const FLOAT* () const;\n\n    D3DXPLANE operator + () const;\n    D3DXPLANE operator - () const;\n\n    BOOL operator == (const D3DXPLANE&) const;\n    BOOL operator != (const D3DXPLANE&) const;\n#endif /* __cplusplus */\n    FLOAT a, b, c, d;\n} D3DXPLANE, *LPD3DXPLANE;\n\ntypedef struct D3DXCOLOR\n{\n#ifdef __cplusplus\n    D3DXCOLOR();\n    D3DXCOLOR(DWORD col);\n    D3DXCOLOR(const FLOAT *pf);\n    D3DXCOLOR(const D3DCOLORVALUE& col);\n    D3DXCOLOR(FLOAT fr, FLOAT fg, FLOAT fb, FLOAT fa);\n\n    operator DWORD () const;\n\n    operator FLOAT* ();\n    operator const FLOAT* () const;\n\n    operator D3DCOLORVALUE* ();\n    operator const D3DCOLORVALUE* () const;\n\n    operator D3DCOLORVALUE& ();\n    operator const D3DCOLORVALUE& () const;\n\n    D3DXCOLOR& operator += (const D3DXCOLOR&);\n    D3DXCOLOR& operator -= (const D3DXCOLOR&);\n    D3DXCOLOR& operator *= (FLOAT);\n    D3DXCOLOR& operator /= (FLOAT);\n\n    D3DXCOLOR operator + () const;\n    D3DXCOLOR operator - () const;\n\n    D3DXCOLOR operator + (const D3DXCOLOR&) const;\n    D3DXCOLOR operator - (const D3DXCOLOR&) const;\n    D3DXCOLOR operator * (FLOAT) const;\n    D3DXCOLOR operator / (FLOAT) const;\n\n    friend D3DXCOLOR operator * (FLOAT, const D3DXCOLOR&);\n\n    BOOL operator == (const D3DXCOLOR&) const;\n    BOOL operator != (const D3DXCOLOR&) const;\n#endif /* __cplusplus */\n    FLOAT r, g, b, a;\n} D3DXCOLOR, *LPD3DXCOLOR;\n\ntypedef struct D3DXFLOAT16\n{\n#ifdef __cplusplus\n    D3DXFLOAT16();\n    D3DXFLOAT16(FLOAT f);\n    D3DXFLOAT16(const D3DXFLOAT16 &f);\n\n    operator FLOAT ();\n\n    BOOL operator == (const D3DXFLOAT16 &) const;\n    BOOL operator != (const D3DXFLOAT16 &) const;\n#endif /* __cplusplus */\n    WORD value;\n} D3DXFLOAT16, *LPD3DXFLOAT16;\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nD3DXCOLOR* WINAPI D3DXColorAdjustContrast(D3DXCOLOR *pout, const D3DXCOLOR *pc, FLOAT s);\nD3DXCOLOR* WINAPI D3DXColorAdjustSaturation(D3DXCOLOR *pout, const D3DXCOLOR *pc, FLOAT s);\n\nFLOAT WINAPI D3DXFresnelTerm(FLOAT costheta, FLOAT refractionindex);\n\nD3DXMATRIX* WINAPI D3DXMatrixAffineTransformation(D3DXMATRIX *pout, FLOAT scaling, const D3DXVECTOR3 *rotationcenter, const D3DXQUATERNION *rotation,\n    const D3DXVECTOR3 *translation);\nD3DXMATRIX* WINAPI D3DXMatrixAffineTransformation2D(D3DXMATRIX *pout, FLOAT scaling, const D3DXVECTOR2 *protationcenter, FLOAT rotation,\n    const D3DXVECTOR2 *ptranslation);\nHRESULT WINAPI D3DXMatrixDecompose(D3DXVECTOR3 *poutscale, D3DXQUATERNION *poutrotation, D3DXVECTOR3 *pouttranslation, const D3DXMATRIX *pm);\nFLOAT WINAPI D3DXMatrixDeterminant(const D3DXMATRIX *pm);\nD3DXMATRIX* WINAPI D3DXMatrixInverse(D3DXMATRIX *pout, FLOAT *pdeterminant, const D3DXMATRIX *pm);\nD3DXMATRIX* WINAPI D3DXMatrixLookAtLH(D3DXMATRIX *pout, const D3DXVECTOR3 *peye, const D3DXVECTOR3 *pat, const D3DXVECTOR3 *pup);\nD3DXMATRIX* WINAPI D3DXMatrixLookAtRH(D3DXMATRIX *pout, const D3DXVECTOR3 *peye, const D3DXVECTOR3 *pat, const D3DXVECTOR3 *pup);\nD3DXMATRIX* WINAPI D3DXMatrixMultiply(D3DXMATRIX *pout, const D3DXMATRIX *pm1, const D3DXMATRIX *pm2);\nD3DXMATRIX* WINAPI D3DXMatrixMultiplyTranspose(D3DXMATRIX *pout, const D3DXMATRIX *pm1, const D3DXMATRIX *pm2);\nD3DXMATRIX* WINAPI D3DXMatrixOrthoLH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf);\nD3DXMATRIX* WINAPI D3DXMatrixOrthoOffCenterLH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf);\nD3DXMATRIX* WINAPI D3DXMatrixOrthoOffCenterRH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf);\nD3DXMATRIX* WINAPI D3DXMatrixOrthoRH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf);\nD3DXMATRIX* WINAPI D3DXMatrixPerspectiveFovLH(D3DXMATRIX *pout, FLOAT fovy, FLOAT aspect, FLOAT zn, FLOAT zf);\nD3DXMATRIX* WINAPI D3DXMatrixPerspectiveFovRH(D3DXMATRIX *pout, FLOAT fovy, FLOAT aspect, FLOAT zn, FLOAT zf);\nD3DXMATRIX* WINAPI D3DXMatrixPerspectiveLH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf);\nD3DXMATRIX* WINAPI D3DXMatrixPerspectiveOffCenterLH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf);\nD3DXMATRIX* WINAPI D3DXMatrixPerspectiveOffCenterRH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf);\nD3DXMATRIX* WINAPI D3DXMatrixPerspectiveRH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf);\nD3DXMATRIX* WINAPI D3DXMatrixReflect(D3DXMATRIX *pout, const D3DXPLANE *pplane);\nD3DXMATRIX* WINAPI D3DXMatrixRotationAxis(D3DXMATRIX *pout, const D3DXVECTOR3 *pv, FLOAT angle);\nD3DXMATRIX* WINAPI D3DXMatrixRotationQuaternion(D3DXMATRIX *pout, const D3DXQUATERNION *pq);\nD3DXMATRIX* WINAPI D3DXMatrixRotationX(D3DXMATRIX *pout, FLOAT angle);\nD3DXMATRIX* WINAPI D3DXMatrixRotationY(D3DXMATRIX *pout, FLOAT angle);\nD3DXMATRIX* WINAPI D3DXMatrixRotationYawPitchRoll(D3DXMATRIX *pout, FLOAT yaw, FLOAT pitch, FLOAT roll);\nD3DXMATRIX* WINAPI D3DXMatrixRotationZ(D3DXMATRIX *pout, FLOAT angle);\nD3DXMATRIX* WINAPI D3DXMatrixScaling(D3DXMATRIX *pout, FLOAT sx, FLOAT sy, FLOAT sz);\nD3DXMATRIX* WINAPI D3DXMatrixShadow(D3DXMATRIX *pout, const D3DXVECTOR4 *plight, const D3DXPLANE *pPlane);\nD3DXMATRIX* WINAPI D3DXMatrixTransformation(D3DXMATRIX *pout, const D3DXVECTOR3 *pscalingcenter, const D3DXQUATERNION *pscalingrotation, const D3DXVECTOR3 *pscaling, const D3DXVECTOR3 *protationcenter,\n    const D3DXQUATERNION *protation, const D3DXVECTOR3 *ptranslation);\nD3DXMATRIX* WINAPI D3DXMatrixTransformation2D(D3DXMATRIX *pout, const D3DXVECTOR2 *pscalingcenter, FLOAT scalingrotation, const D3DXVECTOR2 *pscaling,\n    const D3DXVECTOR2 *protationcenter, FLOAT rotation, const D3DXVECTOR2 *ptranslation);\nD3DXMATRIX* WINAPI D3DXMatrixTranslation(D3DXMATRIX *pout, FLOAT x, FLOAT y, FLOAT z);\nD3DXMATRIX* WINAPI D3DXMatrixTranspose(D3DXMATRIX *pout, const D3DXMATRIX *pm);\n\nD3DXPLANE* WINAPI D3DXPlaneFromPointNormal(D3DXPLANE *pout, const D3DXVECTOR3 *pvpoint, const D3DXVECTOR3 *pvnormal);\nD3DXPLANE* WINAPI D3DXPlaneFromPoints(D3DXPLANE *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2, const D3DXVECTOR3 *pv3);\nD3DXVECTOR3* WINAPI D3DXPlaneIntersectLine(D3DXVECTOR3 *pout, const D3DXPLANE *pp, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2);\nD3DXPLANE* WINAPI D3DXPlaneNormalize(D3DXPLANE *pout, const D3DXPLANE *pp);\nD3DXPLANE* WINAPI D3DXPlaneTransform(D3DXPLANE *pout, const D3DXPLANE *pplane, const D3DXMATRIX *pm);\nD3DXPLANE* WINAPI D3DXPlaneTransformArray(D3DXPLANE *pout, UINT outstride, const D3DXPLANE *pplane, UINT pstride, const D3DXMATRIX *pm, UINT n);\n\nD3DXQUATERNION* WINAPI D3DXQuaternionBaryCentric(D3DXQUATERNION *pout, const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2, const D3DXQUATERNION *pq3, FLOAT f, FLOAT g);\nD3DXQUATERNION* WINAPI D3DXQuaternionExp(D3DXQUATERNION *pout, const D3DXQUATERNION *pq);\nD3DXQUATERNION* WINAPI D3DXQuaternionInverse(D3DXQUATERNION *pout, const D3DXQUATERNION *pq);\nD3DXQUATERNION* WINAPI D3DXQuaternionLn(D3DXQUATERNION *pout, const D3DXQUATERNION *pq);\nD3DXQUATERNION* WINAPI D3DXQuaternionMultiply(D3DXQUATERNION *pout, const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2);\nD3DXQUATERNION* WINAPI D3DXQuaternionNormalize(D3DXQUATERNION *pout, const D3DXQUATERNION *pq);\nD3DXQUATERNION* WINAPI D3DXQuaternionRotationAxis(D3DXQUATERNION *pout, const D3DXVECTOR3 *pv, FLOAT angle);\nD3DXQUATERNION* WINAPI D3DXQuaternionRotationMatrix(D3DXQUATERNION *pout, const D3DXMATRIX *pm);\nD3DXQUATERNION* WINAPI D3DXQuaternionRotationYawPitchRoll(D3DXQUATERNION *pout, FLOAT yaw, FLOAT pitch, FLOAT roll);\nD3DXQUATERNION* WINAPI D3DXQuaternionSlerp(D3DXQUATERNION *pout, const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2, FLOAT t);\nD3DXQUATERNION* WINAPI D3DXQuaternionSquad(D3DXQUATERNION *pout, const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2, const D3DXQUATERNION *pq3,\n    const D3DXQUATERNION *pq4, FLOAT t);\nvoid WINAPI D3DXQuaternionSquadSetup(D3DXQUATERNION *paout, D3DXQUATERNION *pbout, D3DXQUATERNION *pcout, const D3DXQUATERNION *pq0,\n    const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2, const D3DXQUATERNION *pq3);\nvoid WINAPI D3DXQuaternionToAxisAngle(const D3DXQUATERNION *pq, D3DXVECTOR3 *paxis, FLOAT *pangle);\n\nD3DXVECTOR2* WINAPI D3DXVec2BaryCentric(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2, const D3DXVECTOR2 *pv3, FLOAT f, FLOAT g);\nD3DXVECTOR2* WINAPI D3DXVec2CatmullRom(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv0, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2, const D3DXVECTOR2 *pv3, FLOAT s);\nD3DXVECTOR2* WINAPI D3DXVec2Hermite(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pt1, const D3DXVECTOR2 *pv2, const D3DXVECTOR2 *pt2, FLOAT s);\nD3DXVECTOR2* WINAPI D3DXVec2Normalize(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv);\nD3DXVECTOR4* WINAPI D3DXVec2Transform(D3DXVECTOR4 *pout, const D3DXVECTOR2 *pv, const D3DXMATRIX *pm);\nD3DXVECTOR4* WINAPI D3DXVec2TransformArray(D3DXVECTOR4 *pout, UINT outstride, const D3DXVECTOR2 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n);\nD3DXVECTOR2* WINAPI D3DXVec2TransformCoord(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv, const D3DXMATRIX *pm);\nD3DXVECTOR2* WINAPI D3DXVec2TransformCoordArray(D3DXVECTOR2 *pout, UINT outstride, const D3DXVECTOR2 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n);\nD3DXVECTOR2* WINAPI D3DXVec2TransformNormal(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv, const D3DXMATRIX *pm);\nD3DXVECTOR2* WINAPI D3DXVec2TransformNormalArray(D3DXVECTOR2 *pout, UINT outstride, const D3DXVECTOR2 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n);\n\nD3DXVECTOR3* WINAPI D3DXVec3BaryCentric(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2, const D3DXVECTOR3 *pv3, FLOAT f, FLOAT g);\nD3DXVECTOR3* WINAPI D3DXVec3CatmullRom( D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv0, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2, const D3DXVECTOR3 *pv3, FLOAT s);\nD3DXVECTOR3* WINAPI D3DXVec3Hermite(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pt1, const D3DXVECTOR3 *pv2, const D3DXVECTOR3 *pt2, FLOAT s);\nD3DXVECTOR3* WINAPI D3DXVec3Normalize(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv);\nD3DXVECTOR3* WINAPI D3DXVec3Project(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv, const D3DVIEWPORT9 *pviewport, const D3DXMATRIX *pprojection,\n    const D3DXMATRIX *pview, const D3DXMATRIX *pworld);\nD3DXVECTOR3* WINAPI D3DXVec3ProjectArray(D3DXVECTOR3 *pout, UINT outstride, const D3DXVECTOR3 *pv, UINT vstride, const D3DVIEWPORT9 *pviewport,\n    const D3DXMATRIX *pprojection, const D3DXMATRIX *pview, const D3DXMATRIX *pworld, UINT n);\nD3DXVECTOR4* WINAPI D3DXVec3Transform(D3DXVECTOR4 *pout, const D3DXVECTOR3 *pv, const D3DXMATRIX *pm);\nD3DXVECTOR4* WINAPI D3DXVec3TransformArray(D3DXVECTOR4 *pout, UINT outstride, const D3DXVECTOR3 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n);\nD3DXVECTOR3* WINAPI D3DXVec3TransformCoord(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv, const D3DXMATRIX *pm);\nD3DXVECTOR3* WINAPI D3DXVec3TransformCoordArray(D3DXVECTOR3 *pout, UINT outstride, const D3DXVECTOR3 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n);\nD3DXVECTOR3* WINAPI D3DXVec3TransformNormal(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv, const D3DXMATRIX *pm);\nD3DXVECTOR3* WINAPI D3DXVec3TransformNormalArray(D3DXVECTOR3 *pout, UINT outstride, const D3DXVECTOR3 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n);\nD3DXVECTOR3* WINAPI D3DXVec3Unproject(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv, const D3DVIEWPORT9 *pviewport, const D3DXMATRIX *pprojection,\n    const D3DXMATRIX *pview, const D3DXMATRIX *pworld);\nD3DXVECTOR3* WINAPI D3DXVec3UnprojectArray(D3DXVECTOR3 *pout, UINT outstride, const D3DXVECTOR3 *pv, UINT vstride, const D3DVIEWPORT9 *pviewport,\n    const D3DXMATRIX *pprojection, const D3DXMATRIX *pview, const D3DXMATRIX *pworld, UINT n);\nD3DXVECTOR4* WINAPI D3DXVec4BaryCentric(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2, const D3DXVECTOR4 *pv3, FLOAT f, FLOAT g);\nD3DXVECTOR4* WINAPI D3DXVec4CatmullRom(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv0, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2, const D3DXVECTOR4 *pv3, FLOAT s);\nD3DXVECTOR4* WINAPI D3DXVec4Cross(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2, const D3DXVECTOR4 *pv3);\nD3DXVECTOR4* WINAPI D3DXVec4Hermite(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pt1, const D3DXVECTOR4 *pv2, const D3DXVECTOR4 *pt2, FLOAT s);\nD3DXVECTOR4* WINAPI D3DXVec4Normalize(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv);\nD3DXVECTOR4* WINAPI D3DXVec4Transform(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv, const D3DXMATRIX *pm);\nD3DXVECTOR4* WINAPI D3DXVec4TransformArray(D3DXVECTOR4 *pout, UINT outstride, const D3DXVECTOR4 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n);\n\nD3DXFLOAT16 *WINAPI D3DXFloat32To16Array(D3DXFLOAT16 *pout, const FLOAT *pin, UINT n);\nFLOAT *WINAPI D3DXFloat16To32Array(FLOAT *pout, const D3DXFLOAT16 *pin, UINT n);\n\nFLOAT* WINAPI D3DXSHAdd(FLOAT *out, UINT order, const FLOAT *a, const FLOAT *b);\nFLOAT WINAPI D3DXSHDot(UINT order, const FLOAT *a, const FLOAT *b);\nHRESULT WINAPI D3DXSHEvalConeLight(UINT order, const D3DXVECTOR3 *dir, FLOAT radius, FLOAT Rintensity, FLOAT Gintensity, FLOAT Bintensity, FLOAT *rout, FLOAT *gout, FLOAT *bout);\nFLOAT* WINAPI D3DXSHEvalDirection(FLOAT *out, UINT order, const D3DXVECTOR3 *dir);\nHRESULT WINAPI D3DXSHEvalDirectionalLight(UINT order, const D3DXVECTOR3 *dir, FLOAT Rintensity, FLOAT Gintensity, FLOAT Bintensity, FLOAT *rout, FLOAT *gout, FLOAT *bout);\nHRESULT WINAPI D3DXSHEvalHemisphereLight(UINT order, const D3DXVECTOR3 *dir, D3DXCOLOR top, D3DXCOLOR bottom, FLOAT *rout, FLOAT *gout, FLOAT *bout);\nHRESULT WINAPI D3DXSHEvalSphericalLight(UINT order, const D3DXVECTOR3 *dir, FLOAT radius, FLOAT Rintensity, FLOAT Gintensity, FLOAT Bintensity, FLOAT *rout, FLOAT *gout, FLOAT *bout);\nFLOAT* WINAPI D3DXSHMultiply2(FLOAT *out, const FLOAT *a, const FLOAT *b);\nFLOAT* WINAPI D3DXSHMultiply3(FLOAT *out, const FLOAT *a, const FLOAT *b);\nFLOAT* WINAPI D3DXSHMultiply4(FLOAT *out, const FLOAT *a, const FLOAT *b);\nFLOAT* WINAPI D3DXSHRotate(FLOAT *out, UINT order, const D3DXMATRIX *matrix, const FLOAT *in);\nFLOAT* WINAPI D3DXSHRotateZ(FLOAT *out, UINT order, FLOAT angle, const FLOAT *in);\nFLOAT* WINAPI D3DXSHScale(FLOAT *out, UINT order, const FLOAT *a, const FLOAT scale);\n\n#ifdef __cplusplus\n}\n#endif\n\ntypedef interface ID3DXMatrixStack *LPD3DXMATRIXSTACK;\n\nDEFINE_GUID(IID_ID3DXMatrixStack,\n0xc7885ba7, 0xf990, 0x4fe7, 0x92, 0x2d, 0x85, 0x15, 0xe4, 0x77, 0xdd, 0x85);\n\n#undef INTERFACE\n#define INTERFACE ID3DXMatrixStack\n\nDECLARE_INTERFACE_(ID3DXMatrixStack, IUnknown)\n{\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    STDMETHOD(Pop)(THIS) PURE;\n    STDMETHOD(Push)(THIS) PURE;\n    STDMETHOD(LoadIdentity)(THIS) PURE;\n    STDMETHOD(LoadMatrix)(THIS_ const D3DXMATRIX* pM ) PURE;\n    STDMETHOD(MultMatrix)(THIS_ const D3DXMATRIX* pM ) PURE;\n    STDMETHOD(MultMatrixLocal)(THIS_ const D3DXMATRIX* pM ) PURE;\n    STDMETHOD(RotateAxis)(THIS_ const D3DXVECTOR3* pV, FLOAT Angle) PURE;\n    STDMETHOD(RotateAxisLocal)(THIS_ const D3DXVECTOR3* pV, FLOAT Angle) PURE;\n    STDMETHOD(RotateYawPitchRoll)(THIS_ FLOAT Yaw, FLOAT Pitch, FLOAT Roll) PURE;\n    STDMETHOD(RotateYawPitchRollLocal)(THIS_ FLOAT Yaw, FLOAT Pitch, FLOAT Roll) PURE;\n    STDMETHOD(Scale)(THIS_ FLOAT x, FLOAT y, FLOAT z) PURE;\n    STDMETHOD(ScaleLocal)(THIS_ FLOAT x, FLOAT y, FLOAT z) PURE;\n    STDMETHOD(Translate)(THIS_ FLOAT x, FLOAT y, FLOAT z ) PURE;\n    STDMETHOD(TranslateLocal)(THIS_ FLOAT x, FLOAT y, FLOAT z) PURE;\n    STDMETHOD_(D3DXMATRIX*, GetTop)(THIS) PURE;\n};\n\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n\n#define ID3DXMatrixStack_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)\n#define ID3DXMatrixStack_AddRef(p)                        (p)->lpVtbl->AddRef(p)\n#define ID3DXMatrixStack_Release(p)                       (p)->lpVtbl->Release(p)\n#define ID3DXMatrixStack_Pop(p)                           (p)->lpVtbl->Pop(p)\n#define ID3DXMatrixStack_Push(p)                          (p)->lpVtbl->Push(p)\n#define ID3DXMatrixStack_LoadIdentity(p)                  (p)->lpVtbl->LoadIdentity(p)\n#define ID3DXMatrixStack_LoadMatrix(p,a)                  (p)->lpVtbl->LoadMatrix(p,a)\n#define ID3DXMatrixStack_MultMatrix(p,a)                  (p)->lpVtbl->MultMatrix(p,a)\n#define ID3DXMatrixStack_MultMatrixLocal(p,a)             (p)->lpVtbl->MultMatrixLocal(p,a)\n#define ID3DXMatrixStack_RotateAxis(p,a,b)                (p)->lpVtbl->RotateAxis(p,a,b)\n#define ID3DXMatrixStack_RotateAxisLocal(p,a,b)           (p)->lpVtbl->RotateAxisLocal(p,a,b)\n#define ID3DXMatrixStack_RotateYawPitchRoll(p,a,b,c)      (p)->lpVtbl->RotateYawPitchRoll(p,a,b,c)\n#define ID3DXMatrixStack_RotateYawPitchRollLocal(p,a,b,c) (p)->lpVtbl->RotateYawPitchRollLocal(p,a,b,c)\n#define ID3DXMatrixStack_Scale(p,a,b,c)                   (p)->lpVtbl->Scale(p,a,b,c)\n#define ID3DXMatrixStack_ScaleLocal(p,a,b,c)              (p)->lpVtbl->ScaleLocal(p,a,b,c)\n#define ID3DXMatrixStack_Translate(p,a,b,c)               (p)->lpVtbl->Translate(p,a,b,c)\n#define ID3DXMatrixStack_TranslateLocal(p,a,b,c)          (p)->lpVtbl->TranslateLocal(p,a,b,c)\n#define ID3DXMatrixStack_GetTop(p)                        (p)->lpVtbl->GetTop(p)\n\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nHRESULT WINAPI D3DXCreateMatrixStack(DWORD flags, ID3DXMatrixStack **stack);\n\n#ifdef __cplusplus\n}\n#endif\n\n#include \"d3dx9math.inl\"\n\n#endif /* __D3DX9MATH_H__ */\n"
  },
  {
    "path": "wine/windows/d3dx9math.inl",
    "content": "/*\n * Copyright (C) 2007 David Adam\n * Copyright (C) 2007 Tony Wasserka\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __D3DX9MATH_INL__\n#define __D3DX9MATH_INL__\n\n/* constructors & operators */\n#ifdef __cplusplus\n\ninline D3DXVECTOR2::D3DXVECTOR2()\n{\n}\n\ninline D3DXVECTOR2::D3DXVECTOR2(const FLOAT *pf)\n{\n    if(!pf) return;\n    x = pf[0];\n    y = pf[1];\n}\n\ninline D3DXVECTOR2::D3DXVECTOR2(FLOAT fx, FLOAT fy)\n{\n    x = fx;\n    y = fy;\n}\n\ninline D3DXVECTOR2::operator FLOAT* ()\n{\n    return (FLOAT*)&x;\n}\n\ninline D3DXVECTOR2::operator const FLOAT* () const\n{\n    return (const FLOAT*)&x;\n}\n\ninline D3DXVECTOR2& D3DXVECTOR2::operator += (const D3DXVECTOR2& v)\n{\n    x += v.x;\n    y += v.y;\n    return *this;\n}\n\ninline D3DXVECTOR2& D3DXVECTOR2::operator -= (const D3DXVECTOR2& v)\n{\n    x -= v.x;\n    y -= v.y;\n    return *this;\n}\n\ninline D3DXVECTOR2& D3DXVECTOR2::operator *= (FLOAT f)\n{\n    x *= f;\n    y *= f;\n    return *this;\n}\n\ninline D3DXVECTOR2& D3DXVECTOR2::operator /= (FLOAT f)\n{\n    x /= f;\n    y /= f;\n    return *this;\n}\n\ninline D3DXVECTOR2 D3DXVECTOR2::operator + () const\n{\n    return *this;\n}\n\ninline D3DXVECTOR2 D3DXVECTOR2::operator - () const\n{\n    return D3DXVECTOR2(-x, -y);\n}\n\ninline D3DXVECTOR2 D3DXVECTOR2::operator + (const D3DXVECTOR2& v) const\n{\n    return D3DXVECTOR2(x + v.x, y + v.y);\n}\n\ninline D3DXVECTOR2 D3DXVECTOR2::operator - (const D3DXVECTOR2& v) const\n{\n    return D3DXVECTOR2(x - v.x, y - v.y);\n}\n\ninline D3DXVECTOR2 D3DXVECTOR2::operator * (FLOAT f) const\n{\n    return D3DXVECTOR2(x * f, y * f);\n}\n\ninline D3DXVECTOR2 D3DXVECTOR2::operator / (FLOAT f) const\n{\n    return D3DXVECTOR2(x / f, y / f);\n}\n\ninline D3DXVECTOR2 operator * (FLOAT f, const D3DXVECTOR2& v)\n{\n    return D3DXVECTOR2(f * v.x, f * v.y);\n}\n\ninline BOOL D3DXVECTOR2::operator == (const D3DXVECTOR2& v) const\n{\n    return x == v.x && y == v.y;\n}\n\ninline BOOL D3DXVECTOR2::operator != (const D3DXVECTOR2& v) const\n{\n    return x != v.x || y != v.y;\n}\n\ninline D3DXVECTOR3::D3DXVECTOR3()\n{\n}\n\ninline D3DXVECTOR3::D3DXVECTOR3(const FLOAT *pf)\n{\n    if(!pf) return;\n    x = pf[0];\n    y = pf[1];\n    z = pf[2];\n}\n\ninline D3DXVECTOR3::D3DXVECTOR3(const D3DVECTOR& v)\n{\n    x = v.x;\n    y = v.y;\n    z = v.z;\n}\n\ninline D3DXVECTOR3::D3DXVECTOR3(FLOAT fx, FLOAT fy, FLOAT fz)\n{\n    x = fx;\n    y = fy;\n    z = fz;\n}\n\ninline D3DXVECTOR3::operator FLOAT* ()\n{\n    return (FLOAT*)&x;\n}\n\ninline D3DXVECTOR3::operator const FLOAT* () const\n{\n    return (const FLOAT*)&x;\n}\n\ninline D3DXVECTOR3& D3DXVECTOR3::operator += (const D3DXVECTOR3& v)\n{\n    x += v.x;\n    y += v.y;\n    z += v.z;\n    return *this;\n}\n\ninline D3DXVECTOR3& D3DXVECTOR3::operator -= (const D3DXVECTOR3& v)\n{\n    x -= v.x;\n    y -= v.y;\n    z -= v.z;\n    return *this;\n}\n\ninline D3DXVECTOR3& D3DXVECTOR3::operator *= (FLOAT f)\n{\n    x *= f;\n    y *= f;\n    z *= f;\n    return *this;\n}\n\ninline D3DXVECTOR3& D3DXVECTOR3::operator /= (FLOAT f)\n{\n    x /= f;\n    y /= f;\n    z /= f;\n    return *this;\n}\n\ninline D3DXVECTOR3 D3DXVECTOR3::operator + () const\n{\n    return *this;\n}\n\ninline D3DXVECTOR3 D3DXVECTOR3::operator - () const\n{\n    return D3DXVECTOR3(-x, -y, -z);\n}\n\ninline D3DXVECTOR3 D3DXVECTOR3::operator + (const D3DXVECTOR3& v) const\n{\n    return D3DXVECTOR3(x + v.x, y + v.y, z + v.z);\n}\n\ninline D3DXVECTOR3 D3DXVECTOR3::operator - (const D3DXVECTOR3& v) const\n{\n    return D3DXVECTOR3(x - v.x, y - v.y, z - v.z);\n}\n\ninline D3DXVECTOR3 D3DXVECTOR3::operator * (FLOAT f) const\n{\n    return D3DXVECTOR3(x * f, y * f, z * f);\n}\n\ninline D3DXVECTOR3 D3DXVECTOR3::operator / (FLOAT f) const\n{\n    return D3DXVECTOR3(x / f, y / f, z / f);\n}\n\ninline D3DXVECTOR3 operator * (FLOAT f, const D3DXVECTOR3& v)\n{\n    return D3DXVECTOR3(f * v.x, f * v.y, f * v.z);\n}\n\ninline BOOL D3DXVECTOR3::operator == (const D3DXVECTOR3& v) const\n{\n    return x == v.x && y == v.y && z == v.z;\n}\n\ninline BOOL D3DXVECTOR3::operator != (const D3DXVECTOR3& v) const\n{\n    return x != v.x || y != v.y || z != v.z;\n}\n\ninline D3DXVECTOR4::D3DXVECTOR4()\n{\n}\n\ninline D3DXVECTOR4::D3DXVECTOR4(const FLOAT *pf)\n{\n    if(!pf) return;\n    x = pf[0];\n    y = pf[1];\n    z = pf[2];\n    w = pf[3];\n}\n\ninline D3DXVECTOR4::D3DXVECTOR4(FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw)\n{\n    x = fx;\n    y = fy;\n    z = fz;\n    w = fw;\n}\n\ninline D3DXVECTOR4::operator FLOAT* ()\n{\n    return (FLOAT*)&x;\n}\n\ninline D3DXVECTOR4::operator const FLOAT* () const\n{\n    return (const FLOAT*)&x;\n}\n\ninline D3DXVECTOR4& D3DXVECTOR4::operator += (const D3DXVECTOR4& v)\n{\n    x += v.x;\n    y += v.y;\n    z += v.z;\n    w += v.w;\n    return *this;\n}\n\ninline D3DXVECTOR4& D3DXVECTOR4::operator -= (const D3DXVECTOR4& v)\n{\n    x -= v.x;\n    y -= v.y;\n    z -= v.z;\n    w -= v.w;\n    return *this;\n}\n\ninline D3DXVECTOR4& D3DXVECTOR4::operator *= (FLOAT f)\n{\n    x *= f;\n    y *= f;\n    z *= f;\n    w *= f;\n    return *this;\n}\n\ninline D3DXVECTOR4& D3DXVECTOR4::operator /= (FLOAT f)\n{\n    x /= f;\n    y /= f;\n    z /= f;\n    w /= f;\n    return *this;\n}\n\ninline D3DXVECTOR4 D3DXVECTOR4::operator + () const\n{\n    return *this;\n}\n\ninline D3DXVECTOR4 D3DXVECTOR4::operator - () const\n{\n    return D3DXVECTOR4(-x, -y, -z, -w);\n}\n\ninline D3DXVECTOR4 D3DXVECTOR4::operator + (const D3DXVECTOR4& v) const\n{\n    return D3DXVECTOR4(x + v.x, y + v.y, z + v.z, w + v.w);\n}\n\ninline D3DXVECTOR4 D3DXVECTOR4::operator - (const D3DXVECTOR4& v) const\n{\n    return D3DXVECTOR4(x - v.x, y - v.y, z - v.z, w - v.w);\n}\n\ninline D3DXVECTOR4 D3DXVECTOR4::operator * (FLOAT f) const\n{\n    return D3DXVECTOR4(x * f, y * f, z * f, w * f);\n}\n\ninline D3DXVECTOR4 D3DXVECTOR4::operator / (FLOAT f) const\n{\n    return D3DXVECTOR4(x / f, y / f, z / f, w / f);\n}\n\ninline D3DXVECTOR4 operator * (FLOAT f, const D3DXVECTOR4& v)\n{\n    return D3DXVECTOR4(f * v.x, f * v.y, f * v.z, f * v.w);\n}\n\ninline BOOL D3DXVECTOR4::operator == (const D3DXVECTOR4& v) const\n{\n    return x == v.x && y == v.y && z == v.z && w == v.w;\n}\n\ninline BOOL D3DXVECTOR4::operator != (const D3DXVECTOR4& v) const\n{\n    return x != v.x || y != v.y || z != v.z || w != v.w;\n}\n\ninline D3DXMATRIX::D3DXMATRIX()\n{\n}\n\ninline D3DXMATRIX::D3DXMATRIX(const FLOAT *pf)\n{\n    if(!pf) return;\n    memcpy(&_11, pf, sizeof(D3DXMATRIX));\n}\n\ninline D3DXMATRIX::D3DXMATRIX(const D3DMATRIX& mat)\n{\n    memcpy(&_11, &mat, sizeof(D3DXMATRIX));\n}\n\ninline D3DXMATRIX::D3DXMATRIX(FLOAT f11, FLOAT f12, FLOAT f13, FLOAT f14,\n                              FLOAT f21, FLOAT f22, FLOAT f23, FLOAT f24,\n                              FLOAT f31, FLOAT f32, FLOAT f33, FLOAT f34,\n                              FLOAT f41, FLOAT f42, FLOAT f43, FLOAT f44)\n{\n    _11 = f11; _12 = f12; _13 = f13; _14 = f14;\n    _21 = f21; _22 = f22; _23 = f23; _24 = f24;\n    _31 = f31; _32 = f32; _33 = f33; _34 = f34;\n    _41 = f41; _42 = f42; _43 = f43; _44 = f44;\n}\n\ninline FLOAT& D3DXMATRIX::operator () (UINT row, UINT col)\n{\n    return m[row][col];\n}\n\ninline FLOAT D3DXMATRIX::operator () (UINT row, UINT col) const\n{\n    return m[row][col];\n}\n\ninline D3DXMATRIX::operator FLOAT* ()\n{\n    return (FLOAT*)&_11;\n}\n\ninline D3DXMATRIX::operator const FLOAT* () const\n{\n    return (const FLOAT*)&_11;\n}\n\ninline D3DXMATRIX& D3DXMATRIX::operator *= (const D3DXMATRIX& mat)\n{\n    D3DXMatrixMultiply(this, this, &mat);\n    return *this;\n}\n\ninline D3DXMATRIX& D3DXMATRIX::operator += (const D3DXMATRIX& mat)\n{\n    _11 += mat._11; _12 += mat._12; _13 += mat._13; _14 += mat._14;\n    _21 += mat._21; _22 += mat._22; _23 += mat._23; _24 += mat._24;\n    _31 += mat._31; _32 += mat._32; _33 += mat._33; _34 += mat._34;\n    _41 += mat._41; _42 += mat._42; _43 += mat._43; _44 += mat._44;\n    return *this;\n}\n\ninline D3DXMATRIX& D3DXMATRIX::operator -= (const D3DXMATRIX& mat)\n{\n    _11 -= mat._11; _12 -= mat._12; _13 -= mat._13; _14 -= mat._14;\n    _21 -= mat._21; _22 -= mat._22; _23 -= mat._23; _24 -= mat._24;\n    _31 -= mat._31; _32 -= mat._32; _33 -= mat._33; _34 -= mat._34;\n    _41 -= mat._41; _42 -= mat._42; _43 -= mat._43; _44 -= mat._44;\n    return *this;\n}\n\ninline D3DXMATRIX& D3DXMATRIX::operator *= (FLOAT f)\n{\n    _11 *= f; _12 *= f; _13 *= f; _14 *= f;\n    _21 *= f; _22 *= f; _23 *= f; _24 *= f;\n    _31 *= f; _32 *= f; _33 *= f; _34 *= f;\n    _41 *= f; _42 *= f; _43 *= f; _44 *= f;\n    return *this;\n}\n\ninline D3DXMATRIX& D3DXMATRIX::operator /= (FLOAT f)\n{\n    FLOAT inv = 1.0f / f;\n    _11 *= inv; _12 *= inv; _13 *= inv; _14 *= inv;\n    _21 *= inv; _22 *= inv; _23 *= inv; _24 *= inv;\n    _31 *= inv; _32 *= inv; _33 *= inv; _34 *= inv;\n    _41 *= inv; _42 *= inv; _43 *= inv; _44 *= inv;\n    return *this;\n}\n\ninline D3DXMATRIX D3DXMATRIX::operator + () const\n{\n    return *this;\n}\n\ninline D3DXMATRIX D3DXMATRIX::operator - () const\n{\n    return D3DXMATRIX(-_11, -_12, -_13, -_14,\n                      -_21, -_22, -_23, -_24,\n                      -_31, -_32, -_33, -_34,\n                      -_41, -_42, -_43, -_44);\n}\n\ninline D3DXMATRIX D3DXMATRIX::operator * (const D3DXMATRIX& mat) const\n{\n    D3DXMATRIX buf;\n    D3DXMatrixMultiply(&buf, this, &mat);\n    return buf;\n}\n\ninline D3DXMATRIX D3DXMATRIX::operator + (const D3DXMATRIX& mat) const\n{\n    return D3DXMATRIX(_11 + mat._11, _12 + mat._12, _13 + mat._13, _14 + mat._14,\n                      _21 + mat._21, _22 + mat._22, _23 + mat._23, _24 + mat._24,\n                      _31 + mat._31, _32 + mat._32, _33 + mat._33, _34 + mat._34,\n                      _41 + mat._41, _42 + mat._42, _43 + mat._43, _44 + mat._44);\n}\n\ninline D3DXMATRIX D3DXMATRIX::operator - (const D3DXMATRIX& mat) const\n{\n    return D3DXMATRIX(_11 - mat._11, _12 - mat._12, _13 - mat._13, _14 - mat._14,\n                      _21 - mat._21, _22 - mat._22, _23 - mat._23, _24 - mat._24,\n                      _31 - mat._31, _32 - mat._32, _33 - mat._33, _34 - mat._34,\n                      _41 - mat._41, _42 - mat._42, _43 - mat._43, _44 - mat._44);\n}\n\ninline D3DXMATRIX D3DXMATRIX::operator * (FLOAT f) const\n{\n    return D3DXMATRIX(_11 * f, _12 * f, _13 * f, _14 * f,\n                      _21 * f, _22 * f, _23 * f, _24 * f,\n                      _31 * f, _32 * f, _33 * f, _34 * f,\n                      _41 * f, _42 * f, _43 * f, _44 * f);\n}\n\ninline D3DXMATRIX D3DXMATRIX::operator / (FLOAT f) const\n{\n    FLOAT inv = 1.0f / f;\n    return D3DXMATRIX(_11 * inv, _12 * inv, _13 * inv, _14 * inv,\n                      _21 * inv, _22 * inv, _23 * inv, _24 * inv,\n                      _31 * inv, _32 * inv, _33 * inv, _34 * inv,\n                      _41 * inv, _42 * inv, _43 * inv, _44 * inv);\n}\n\ninline D3DXMATRIX operator * (FLOAT f, const D3DXMATRIX& mat)\n{\n    return D3DXMATRIX(f * mat._11, f * mat._12, f * mat._13, f * mat._14,\n                      f * mat._21, f * mat._22, f * mat._23, f * mat._24,\n                      f * mat._31, f * mat._32, f * mat._33, f * mat._34,\n                      f * mat._41, f * mat._42, f * mat._43, f * mat._44);\n}\n\ninline BOOL D3DXMATRIX::operator == (const D3DXMATRIX& mat) const\n{\n    return (memcmp(this, &mat, sizeof(D3DXMATRIX)) == 0);\n}\n\ninline BOOL D3DXMATRIX::operator != (const D3DXMATRIX& mat) const\n{\n    return (memcmp(this, &mat, sizeof(D3DXMATRIX)) != 0);\n}\n\ninline D3DXQUATERNION::D3DXQUATERNION()\n{\n}\n\ninline D3DXQUATERNION::D3DXQUATERNION(const FLOAT *pf)\n{\n    if(!pf) return;\n    x = pf[0];\n    y = pf[1];\n    z = pf[2];\n    w = pf[3];\n}\n\ninline D3DXQUATERNION::D3DXQUATERNION(FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw)\n{\n    x = fx;\n    y = fy;\n    z = fz;\n    w = fw;\n}\n\ninline D3DXQUATERNION::operator FLOAT* ()\n{\n    return (FLOAT*)&x;\n}\n\ninline D3DXQUATERNION::operator const FLOAT* () const\n{\n    return (const FLOAT*)&x;\n}\n\ninline D3DXQUATERNION& D3DXQUATERNION::operator += (const D3DXQUATERNION& quat)\n{\n    x += quat.x;\n    y += quat.y;\n    z += quat.z;\n    w += quat.w;\n    return *this;\n}\n\ninline D3DXQUATERNION& D3DXQUATERNION::operator -= (const D3DXQUATERNION& quat)\n{\n    x -= quat.x;\n    y -= quat.y;\n    z -= quat.z;\n    w -= quat.w;\n    return *this;\n}\n\ninline D3DXQUATERNION& D3DXQUATERNION::operator *= (const D3DXQUATERNION& quat)\n{\n    D3DXQuaternionMultiply(this, this, &quat);\n    return *this;\n}\n\ninline D3DXQUATERNION& D3DXQUATERNION::operator *= (FLOAT f)\n{\n    x *= f;\n    y *= f;\n    z *= f;\n    w *= f;\n    return *this;\n}\n\ninline D3DXQUATERNION& D3DXQUATERNION::operator /= (FLOAT f)\n{\n    FLOAT inv = 1.0f / f;\n    x *= inv;\n    y *= inv;\n    z *= inv;\n    w *= inv;\n    return *this;\n}\n\ninline D3DXQUATERNION D3DXQUATERNION::operator + () const\n{\n    return *this;\n}\n\ninline D3DXQUATERNION D3DXQUATERNION::operator - () const\n{\n    return D3DXQUATERNION(-x, -y, -z, -w);\n}\n\ninline D3DXQUATERNION D3DXQUATERNION::operator + (const D3DXQUATERNION& quat) const\n{\n    return D3DXQUATERNION(x + quat.x, y + quat.y, z + quat.z, w + quat.w);\n}\n\ninline D3DXQUATERNION D3DXQUATERNION::operator - (const D3DXQUATERNION& quat) const\n{\n    return D3DXQUATERNION(x - quat.x, y - quat.y, z - quat.z, w - quat.w);\n}\n\ninline D3DXQUATERNION D3DXQUATERNION::operator * (const D3DXQUATERNION& quat) const\n{\n    D3DXQUATERNION buf;\n    D3DXQuaternionMultiply(&buf, this, &quat);\n    return buf;\n}\n\ninline D3DXQUATERNION D3DXQUATERNION::operator * (FLOAT f) const\n{\n    return D3DXQUATERNION(x * f, y * f, z * f, w * f);\n}\n\ninline D3DXQUATERNION D3DXQUATERNION::operator / (FLOAT f) const\n{\n    FLOAT inv = 1.0f / f;\n    return D3DXQUATERNION(x * inv, y * inv, z * inv, w * inv);\n}\n\ninline D3DXQUATERNION operator * (FLOAT f, const D3DXQUATERNION& quat)\n{\n    return D3DXQUATERNION(f * quat.x, f * quat.y, f * quat.z, f * quat.w);\n}\n\ninline BOOL D3DXQUATERNION::operator == (const D3DXQUATERNION& quat) const\n{\n    return x == quat.x && y == quat.y && z == quat.z && w == quat.w;\n}\n\ninline BOOL D3DXQUATERNION::operator != (const D3DXQUATERNION& quat) const\n{\n    return x != quat.x || y != quat.y || z != quat.z || w != quat.w;\n}\n\ninline D3DXPLANE::D3DXPLANE()\n{\n}\n\ninline D3DXPLANE::D3DXPLANE(const FLOAT *pf)\n{\n    if(!pf) return;\n    a = pf[0];\n    b = pf[1];\n    c = pf[2];\n    d = pf[3];\n}\n\ninline D3DXPLANE::D3DXPLANE(FLOAT fa, FLOAT fb, FLOAT fc, FLOAT fd)\n{\n    a = fa;\n    b = fb;\n    c = fc;\n    d = fd;\n}\n\ninline D3DXPLANE::operator FLOAT* ()\n{\n    return (FLOAT*)&a;\n}\n\ninline D3DXPLANE::operator const FLOAT* () const\n{\n    return (const FLOAT*)&a;\n}\n\ninline D3DXPLANE D3DXPLANE::operator + () const\n{\n    return *this;\n}\n\ninline D3DXPLANE D3DXPLANE::operator - () const\n{\n    return D3DXPLANE(-a, -b, -c, -d);\n}\n\ninline BOOL D3DXPLANE::operator == (const D3DXPLANE& pl) const\n{\n    return a == pl.a && b == pl.b && c == pl.c && d == pl.d;\n}\n\ninline BOOL D3DXPLANE::operator != (const D3DXPLANE& pl) const\n{\n    return a != pl.a || b != pl.b || c != pl.c || d != pl.d;\n}\n\ninline D3DXCOLOR::D3DXCOLOR()\n{\n}\n\ninline D3DXCOLOR::D3DXCOLOR(DWORD col)\n{\n    const FLOAT f = 1.0f / 255.0f;\n    r = f * (FLOAT)(unsigned char)(col >> 16);\n    g = f * (FLOAT)(unsigned char)(col >>  8);\n    b = f * (FLOAT)(unsigned char)col;\n    a = f * (FLOAT)(unsigned char)(col >> 24);\n}\n\ninline D3DXCOLOR::D3DXCOLOR(const FLOAT *pf)\n{\n    if(!pf) return;\n    r = pf[0];\n    g = pf[1];\n    b = pf[2];\n    a = pf[3];\n}\n\ninline D3DXCOLOR::D3DXCOLOR(const D3DCOLORVALUE& col)\n{\n    r = col.r;\n    g = col.g;\n    b = col.b;\n    a = col.a;\n}\n\ninline D3DXCOLOR::D3DXCOLOR(FLOAT fr, FLOAT fg, FLOAT fb, FLOAT fa)\n{\n    r = fr;\n    g = fg;\n    b = fb;\n    a = fa;\n}\n\ninline D3DXCOLOR::operator DWORD () const\n{\n    DWORD _r = r >= 1.0f ? 0xff : r <= 0.0f ? 0x00 : (DWORD)(r * 255.0f + 0.5f);\n    DWORD _g = g >= 1.0f ? 0xff : g <= 0.0f ? 0x00 : (DWORD)(g * 255.0f + 0.5f);\n    DWORD _b = b >= 1.0f ? 0xff : b <= 0.0f ? 0x00 : (DWORD)(b * 255.0f + 0.5f);\n    DWORD _a = a >= 1.0f ? 0xff : a <= 0.0f ? 0x00 : (DWORD)(a * 255.0f + 0.5f);\n\n    return (_a << 24) | (_r << 16) | (_g << 8) | _b;\n}\n\ninline D3DXCOLOR::operator FLOAT * ()\n{\n    return (FLOAT*)&r;\n}\n\ninline D3DXCOLOR::operator const FLOAT * () const\n{\n    return (const FLOAT*)&r;\n}\n\ninline D3DXCOLOR::operator D3DCOLORVALUE * ()\n{\n    return (D3DCOLORVALUE*)&r;\n}\n\ninline D3DXCOLOR::operator const D3DCOLORVALUE * () const\n{\n    return (const D3DCOLORVALUE*)&r;\n}\n\ninline D3DXCOLOR::operator D3DCOLORVALUE& ()\n{\n    return *((D3DCOLORVALUE*)&r);\n}\n\ninline D3DXCOLOR::operator const D3DCOLORVALUE& () const\n{\n    return *((const D3DCOLORVALUE*)&r);\n}\n\ninline D3DXCOLOR& D3DXCOLOR::operator += (const D3DXCOLOR& col)\n{\n    r += col.r;\n    g += col.g;\n    b += col.b;\n    a += col.a;\n    return *this;\n}\n\ninline D3DXCOLOR& D3DXCOLOR::operator -= (const D3DXCOLOR& col)\n{\n    r -= col.r;\n    g -= col.g;\n    b -= col.b;\n    a -= col.a;\n    return *this;\n}\n\ninline D3DXCOLOR& D3DXCOLOR::operator *= (FLOAT f)\n{\n    r *= f;\n    g *= f;\n    b *= f;\n    a *= f;\n    return *this;\n}\n\ninline D3DXCOLOR& D3DXCOLOR::operator /= (FLOAT f)\n{\n    FLOAT inv = 1.0f / f;\n    r *= inv;\n    g *= inv;\n    b *= inv;\n    a *= inv;\n    return *this;\n}\n\ninline D3DXCOLOR D3DXCOLOR::operator + () const\n{\n    return *this;\n}\n\ninline D3DXCOLOR D3DXCOLOR::operator - () const\n{\n    return D3DXCOLOR(-r, -g, -b, -a);\n}\n\ninline D3DXCOLOR D3DXCOLOR::operator + (const D3DXCOLOR& col) const\n{\n    return D3DXCOLOR(r + col.r, g + col.g, b + col.b, a + col.a);\n}\n\ninline D3DXCOLOR D3DXCOLOR::operator - (const D3DXCOLOR& col) const\n{\n    return D3DXCOLOR(r - col.r, g - col.g, b - col.b, a - col.a);\n}\n\ninline D3DXCOLOR D3DXCOLOR::operator * (FLOAT f) const\n{\n    return D3DXCOLOR(r * f, g * f, b * f, a * f);\n}\n\ninline D3DXCOLOR D3DXCOLOR::operator / (FLOAT f) const\n{\n    FLOAT inv = 1.0f / f;\n    return D3DXCOLOR(r * inv, g * inv, b * inv, a * inv);\n}\n\ninline D3DXCOLOR operator * (FLOAT f, const D3DXCOLOR& col)\n{\n    return D3DXCOLOR(f * col.r, f * col.g, f * col.b, f * col.a);\n}\n\ninline BOOL D3DXCOLOR::operator == (const D3DXCOLOR& col) const\n{\n    return r == col.r && g == col.g && b == col.b && a == col.a;\n}\n\ninline BOOL D3DXCOLOR::operator != (const D3DXCOLOR& col) const\n{\n    return r != col.r || g != col.g || b != col.b || a != col.a;\n}\n\ninline D3DXFLOAT16::D3DXFLOAT16()\n{\n}\n\ninline D3DXFLOAT16::D3DXFLOAT16(FLOAT f)\n{\n    D3DXFloat32To16Array(this, &f, 1);\n}\n\ninline D3DXFLOAT16::D3DXFLOAT16(const D3DXFLOAT16 &f)\n{\n    value = f.value;\n}\n\ninline D3DXFLOAT16::operator FLOAT ()\n{\n    FLOAT f;\n    D3DXFloat16To32Array(&f, this, 1);\n    return f;\n}\n\ninline BOOL D3DXFLOAT16::operator == (const D3DXFLOAT16 &f) const\n{\n    return value == f.value;\n}\n\ninline BOOL D3DXFLOAT16::operator != (const D3DXFLOAT16 &f) const\n{\n    return value != f.value;\n}\n\n#endif /* __cplusplus */\n\n/*_______________D3DXCOLOR_____________________*/\n\nstatic inline D3DXCOLOR* D3DXColorAdd(D3DXCOLOR *pout, const D3DXCOLOR *pc1, const D3DXCOLOR *pc2)\n{\n    if ( !pout || !pc1 || !pc2 ) return NULL;\n    pout->r = (pc1->r) + (pc2->r);\n    pout->g = (pc1->g) + (pc2->g);\n    pout->b = (pc1->b) + (pc2->b);\n    pout->a = (pc1->a) + (pc2->a);\n    return pout;\n}\n\nstatic inline D3DXCOLOR* D3DXColorLerp(D3DXCOLOR *pout, const D3DXCOLOR *pc1, const D3DXCOLOR *pc2, FLOAT s)\n{\n    if ( !pout || !pc1 || !pc2 ) return NULL;\n    pout->r = (1-s) * (pc1->r) + s *(pc2->r);\n    pout->g = (1-s) * (pc1->g) + s *(pc2->g);\n    pout->b = (1-s) * (pc1->b) + s *(pc2->b);\n    pout->a = (1-s) * (pc1->a) + s *(pc2->a);\n    return pout;\n}\n\nstatic inline D3DXCOLOR* D3DXColorModulate(D3DXCOLOR *pout, const D3DXCOLOR *pc1, const D3DXCOLOR *pc2)\n{\n    if ( !pout || !pc1 || !pc2 ) return NULL;\n    pout->r = (pc1->r) * (pc2->r);\n    pout->g = (pc1->g) * (pc2->g);\n    pout->b = (pc1->b) * (pc2->b);\n    pout->a = (pc1->a) * (pc2->a);\n    return pout;\n}\n\nstatic inline D3DXCOLOR* D3DXColorNegative(D3DXCOLOR *pout, const D3DXCOLOR *pc)\n{\n    if ( !pout || !pc ) return NULL;\n    pout->r = 1.0f - pc->r;\n    pout->g = 1.0f - pc->g;\n    pout->b = 1.0f - pc->b;\n    pout->a = pc->a;\n    return pout;\n}\n\nstatic inline D3DXCOLOR* D3DXColorScale(D3DXCOLOR *pout, const D3DXCOLOR *pc, FLOAT s)\n{\n    if ( !pout || !pc ) return NULL;\n    pout->r = s* (pc->r);\n    pout->g = s* (pc->g);\n    pout->b = s* (pc->b);\n    pout->a = s* (pc->a);\n    return pout;\n}\n\nstatic inline D3DXCOLOR* D3DXColorSubtract(D3DXCOLOR *pout, const D3DXCOLOR *pc1, const D3DXCOLOR *pc2)\n{\n    if ( !pout || !pc1 || !pc2 ) return NULL;\n    pout->r = (pc1->r) - (pc2->r);\n    pout->g = (pc1->g) - (pc2->g);\n    pout->b = (pc1->b) - (pc2->b);\n    pout->a = (pc1->a) - (pc2->a);\n    return pout;\n}\n\n/*_______________D3DXVECTOR2________________________*/\n\nstatic inline D3DXVECTOR2* D3DXVec2Add(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2)\n{\n    if ( !pout || !pv1 || !pv2) return NULL;\n    pout->x = pv1->x + pv2->x;\n    pout->y = pv1->y + pv2->y;\n    return pout;\n}\n\nstatic inline FLOAT D3DXVec2CCW(const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2)\n{\n    if ( !pv1 || !pv2) return 0.0f;\n    return ( (pv1->x) * (pv2->y) - (pv1->y) * (pv2->x) );\n}\n\nstatic inline FLOAT D3DXVec2Dot(const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2)\n{\n    if ( !pv1 || !pv2) return 0.0f;\n    return ( (pv1->x * pv2->x + pv1->y * pv2->y) );\n}\n\nstatic inline FLOAT D3DXVec2Length(const D3DXVECTOR2 *pv)\n{\n    if (!pv) return 0.0f;\n    return sqrtf( pv->x * pv->x + pv->y * pv->y );\n}\n\nstatic inline FLOAT D3DXVec2LengthSq(const D3DXVECTOR2 *pv)\n{\n    if (!pv) return 0.0f;\n    return( (pv->x) * (pv->x) + (pv->y) * (pv->y) );\n}\n\nstatic inline D3DXVECTOR2* D3DXVec2Lerp(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2, FLOAT s)\n{\n    if ( !pout || !pv1 || !pv2) return NULL;\n    pout->x = (1-s) * (pv1->x) + s * (pv2->x);\n    pout->y = (1-s) * (pv1->y) + s * (pv2->y);\n    return pout;\n}\n\nstatic inline D3DXVECTOR2* D3DXVec2Maximize(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2)\n{\n    if ( !pout || !pv1 || !pv2) return NULL;\n    pout->x = pv1->x > pv2->x ? pv1->x : pv2->x;\n    pout->y = pv1->y > pv2->y ? pv1->y : pv2->y;\n    return pout;\n}\n\nstatic inline D3DXVECTOR2* D3DXVec2Minimize(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2)\n{\n    if ( !pout || !pv1 || !pv2) return NULL;\n    pout->x = pv1->x < pv2->x ? pv1->x : pv2->x;\n    pout->y = pv1->y < pv2->y ? pv1->y : pv2->y;\n    return pout;\n}\n\nstatic inline D3DXVECTOR2* D3DXVec2Scale(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv, FLOAT s)\n{\n    if ( !pout || !pv) return NULL;\n    pout->x = s * (pv->x);\n    pout->y = s * (pv->y);\n    return pout;\n}\n\nstatic inline D3DXVECTOR2* D3DXVec2Subtract(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2)\n{\n    if ( !pout || !pv1 || !pv2) return NULL;\n    pout->x = pv1->x - pv2->x;\n    pout->y = pv1->y - pv2->y;\n    return pout;\n}\n\n/*__________________D3DXVECTOR3_______________________*/\n\nstatic inline D3DXVECTOR3* D3DXVec3Add(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2)\n{\n    if ( !pout || !pv1 || !pv2) return NULL;\n    pout->x = pv1->x + pv2->x;\n    pout->y = pv1->y + pv2->y;\n    pout->z = pv1->z + pv2->z;\n    return pout;\n}\n\nstatic inline D3DXVECTOR3* D3DXVec3Cross(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2)\n{\n    D3DXVECTOR3 temp;\n\n    if ( !pout || !pv1 || !pv2) return NULL;\n    temp.x = (pv1->y) * (pv2->z) - (pv1->z) * (pv2->y);\n    temp.y = (pv1->z) * (pv2->x) - (pv1->x) * (pv2->z);\n    temp.z = (pv1->x) * (pv2->y) - (pv1->y) * (pv2->x);\n    *pout = temp;\n    return pout;\n}\n\nstatic inline FLOAT D3DXVec3Dot(const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2)\n{\n    if ( !pv1 || !pv2 ) return 0.0f;\n    return (pv1->x) * (pv2->x) + (pv1->y) * (pv2->y) + (pv1->z) * (pv2->z);\n}\n\nstatic inline FLOAT D3DXVec3Length(const D3DXVECTOR3 *pv)\n{\n    if (!pv) return 0.0f;\n    return sqrtf( pv->x * pv->x + pv->y * pv->y + pv->z * pv->z );\n}\n\nstatic inline FLOAT D3DXVec3LengthSq(const D3DXVECTOR3 *pv)\n{\n    if (!pv) return 0.0f;\n    return (pv->x) * (pv->x) + (pv->y) * (pv->y) + (pv->z) * (pv->z);\n}\n\nstatic inline D3DXVECTOR3* D3DXVec3Lerp(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2, FLOAT s)\n{\n    if ( !pout || !pv1 || !pv2) return NULL;\n    pout->x = (1-s) * (pv1->x) + s * (pv2->x);\n    pout->y = (1-s) * (pv1->y) + s * (pv2->y);\n    pout->z = (1-s) * (pv1->z) + s * (pv2->z);\n    return pout;\n}\n\nstatic inline D3DXVECTOR3* D3DXVec3Maximize(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2)\n{\n    if ( !pout || !pv1 || !pv2) return NULL;\n    pout->x = pv1->x > pv2->x ? pv1->x : pv2->x;\n    pout->y = pv1->y > pv2->y ? pv1->y : pv2->y;\n    pout->z = pv1->z > pv2->z ? pv1->z : pv2->z;\n    return pout;\n}\n\nstatic inline D3DXVECTOR3* D3DXVec3Minimize(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2)\n{\n    if ( !pout || !pv1 || !pv2) return NULL;\n    pout->x = pv1->x < pv2->x ? pv1->x : pv2->x;\n    pout->y = pv1->y < pv2->y ? pv1->y : pv2->y;\n    pout->z = pv1->z < pv2->z ? pv1->z : pv2->z;\n    return pout;\n}\n\nstatic inline D3DXVECTOR3* D3DXVec3Scale(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv, FLOAT s)\n{\n    if ( !pout || !pv) return NULL;\n    pout->x = s * (pv->x);\n    pout->y = s * (pv->y);\n    pout->z = s * (pv->z);\n    return pout;\n}\n\nstatic inline D3DXVECTOR3* D3DXVec3Subtract(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2)\n{\n    if ( !pout || !pv1 || !pv2) return NULL;\n    pout->x = pv1->x - pv2->x;\n    pout->y = pv1->y - pv2->y;\n    pout->z = pv1->z - pv2->z;\n    return pout;\n}\n/*__________________D3DXVECTOR4_______________________*/\n\nstatic inline D3DXVECTOR4* D3DXVec4Add(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2)\n{\n    if ( !pout || !pv1 || !pv2) return NULL;\n    pout->x = pv1->x + pv2->x;\n    pout->y = pv1->y + pv2->y;\n    pout->z = pv1->z + pv2->z;\n    pout->w = pv1->w + pv2->w;\n    return pout;\n}\n\nstatic inline FLOAT D3DXVec4Dot(const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2)\n{\n    if (!pv1 || !pv2 ) return 0.0f;\n    return (pv1->x) * (pv2->x) + (pv1->y) * (pv2->y) + (pv1->z) * (pv2->z) + (pv1->w) * (pv2->w);\n}\n\nstatic inline FLOAT D3DXVec4Length(const D3DXVECTOR4 *pv)\n{\n    if (!pv) return 0.0f;\n    return sqrtf( pv->x * pv->x + pv->y * pv->y + pv->z * pv->z + pv->w * pv->w );\n}\n\nstatic inline FLOAT D3DXVec4LengthSq(const D3DXVECTOR4 *pv)\n{\n    if (!pv) return 0.0f;\n    return (pv->x) * (pv->x) + (pv->y) * (pv->y) + (pv->z) * (pv->z) + (pv->w) * (pv->w);\n}\n\nstatic inline D3DXVECTOR4* D3DXVec4Lerp(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2, FLOAT s)\n{\n    if ( !pout || !pv1 || !pv2) return NULL;\n    pout->x = (1-s) * (pv1->x) + s * (pv2->x);\n    pout->y = (1-s) * (pv1->y) + s * (pv2->y);\n    pout->z = (1-s) * (pv1->z) + s * (pv2->z);\n    pout->w = (1-s) * (pv1->w) + s * (pv2->w);\n    return pout;\n}\n\n\nstatic inline D3DXVECTOR4* D3DXVec4Maximize(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2)\n{\n    if ( !pout || !pv1 || !pv2) return NULL;\n    pout->x = pv1->x > pv2->x ? pv1->x : pv2->x;\n    pout->y = pv1->y > pv2->y ? pv1->y : pv2->y;\n    pout->z = pv1->z > pv2->z ? pv1->z : pv2->z;\n    pout->w = pv1->w > pv2->w ? pv1->w : pv2->w;\n    return pout;\n}\n\nstatic inline D3DXVECTOR4* D3DXVec4Minimize(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2)\n{\n    if ( !pout || !pv1 || !pv2) return NULL;\n    pout->x = pv1->x < pv2->x ? pv1->x : pv2->x;\n    pout->y = pv1->y < pv2->y ? pv1->y : pv2->y;\n    pout->z = pv1->z < pv2->z ? pv1->z : pv2->z;\n    pout->w = pv1->w < pv2->w ? pv1->w : pv2->w;\n    return pout;\n}\n\nstatic inline D3DXVECTOR4* D3DXVec4Scale(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv, FLOAT s)\n{\n    if ( !pout || !pv) return NULL;\n    pout->x = s * (pv->x);\n    pout->y = s * (pv->y);\n    pout->z = s * (pv->z);\n    pout->w = s * (pv->w);\n    return pout;\n}\n\nstatic inline D3DXVECTOR4* D3DXVec4Subtract(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2)\n{\n    if ( !pout || !pv1 || !pv2) return NULL;\n    pout->x = pv1->x - pv2->x;\n    pout->y = pv1->y - pv2->y;\n    pout->z = pv1->z - pv2->z;\n    pout->w = pv1->w - pv2->w;\n    return pout;\n}\n\n/*__________________D3DXMatrix____________________*/\n#ifdef NONAMELESSUNION\n# define D3DX_U(x)  (x).u\n#else\n# define D3DX_U(x)  (x)\n#endif\n\nstatic inline D3DXMATRIX* D3DXMatrixIdentity(D3DXMATRIX *pout)\n{\n    if ( !pout ) return NULL;\n    D3DX_U(*pout).m[0][1] = 0.0f;\n    D3DX_U(*pout).m[0][2] = 0.0f;\n    D3DX_U(*pout).m[0][3] = 0.0f;\n    D3DX_U(*pout).m[1][0] = 0.0f;\n    D3DX_U(*pout).m[1][2] = 0.0f;\n    D3DX_U(*pout).m[1][3] = 0.0f;\n    D3DX_U(*pout).m[2][0] = 0.0f;\n    D3DX_U(*pout).m[2][1] = 0.0f;\n    D3DX_U(*pout).m[2][3] = 0.0f;\n    D3DX_U(*pout).m[3][0] = 0.0f;\n    D3DX_U(*pout).m[3][1] = 0.0f;\n    D3DX_U(*pout).m[3][2] = 0.0f;\n    D3DX_U(*pout).m[0][0] = 1.0f;\n    D3DX_U(*pout).m[1][1] = 1.0f;\n    D3DX_U(*pout).m[2][2] = 1.0f;\n    D3DX_U(*pout).m[3][3] = 1.0f;\n    return pout;\n}\n\nstatic inline BOOL D3DXMatrixIsIdentity(D3DXMATRIX *pm)\n{\n    int i,j;\n    D3DXMATRIX testmatrix;\n\n    if ( !pm ) return FALSE;\n    D3DXMatrixIdentity(&testmatrix);\n    for (i=0; i<4; i++)\n    {\n     for (j=0; j<4; j++)\n     {\n      if ( D3DX_U(*pm).m[i][j] != D3DX_U(testmatrix).m[i][j] ) return FALSE;\n     }\n    }\n    return TRUE;\n}\n#undef D3DX_U\n\n/*__________________D3DXPLANE____________________*/\n\nstatic inline FLOAT D3DXPlaneDot(const D3DXPLANE *pp, const D3DXVECTOR4 *pv)\n{\n    if ( !pp || !pv ) return 0.0f;\n    return ( (pp->a) * (pv->x) + (pp->b) * (pv->y) + (pp->c) * (pv->z) + (pp->d) * (pv->w) );\n}\n\nstatic inline FLOAT D3DXPlaneDotCoord(const D3DXPLANE *pp, const D3DXVECTOR4 *pv)\n{\n    if ( !pp || !pv ) return 0.0f;\n    return ( (pp->a) * (pv->x) + (pp->b) * (pv->y) + (pp->c) * (pv->z) + (pp->d) );\n}\n\nstatic inline FLOAT D3DXPlaneDotNormal(const D3DXPLANE *pp, const D3DXVECTOR4 *pv)\n{\n    if ( !pp || !pv ) return 0.0f;\n    return ( (pp->a) * (pv->x) + (pp->b) * (pv->y) + (pp->c) * (pv->z) );\n}\n\n/*__________________D3DXQUATERNION____________________*/\n\nstatic inline D3DXQUATERNION* D3DXQuaternionConjugate(D3DXQUATERNION *pout, const D3DXQUATERNION *pq)\n{\n    if ( !pout || !pq) return NULL;\n    pout->x = -pq->x;\n    pout->y = -pq->y;\n    pout->z = -pq->z;\n    pout->w = pq->w;\n    return pout;\n}\n\nstatic inline FLOAT D3DXQuaternionDot(const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2)\n{\n    if ( !pq1 || !pq2 ) return 0.0f;\n    return (pq1->x) * (pq2->x) + (pq1->y) * (pq2->y) + (pq1->z) * (pq2->z) + (pq1->w) * (pq2->w);\n}\n\nstatic inline D3DXQUATERNION* D3DXQuaternionIdentity(D3DXQUATERNION *pout)\n{\n    if ( !pout) return NULL;\n    pout->x = 0.0f;\n    pout->y = 0.0f;\n    pout->z = 0.0f;\n    pout->w = 1.0f;\n    return pout;\n}\n\nstatic inline BOOL D3DXQuaternionIsIdentity(D3DXQUATERNION *pq)\n{\n    if ( !pq) return FALSE;\n    return ( (pq->x == 0.0f) && (pq->y == 0.0f) && (pq->z == 0.0f) && (pq->w == 1.0f) );\n}\n\nstatic inline FLOAT D3DXQuaternionLength(const D3DXQUATERNION *pq)\n{\n    if (!pq) return 0.0f;\n    return sqrtf( pq->x * pq->x + pq->y * pq->y + pq->z * pq->z + pq->w * pq->w );\n}\n\nstatic inline FLOAT D3DXQuaternionLengthSq(const D3DXQUATERNION *pq)\n{\n    if (!pq) return 0.0f;\n    return (pq->x) * (pq->x) + (pq->y) * (pq->y) + (pq->z) * (pq->z) + (pq->w) * (pq->w);\n}\n\n#endif\n"
  },
  {
    "path": "wine/windows/d3dx9mesh.h",
    "content": "/*\n * Copyright (C) 2009 David Adam\n * Copyright (C) 2010 Tony Wasserka\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"d3dx9.h\"\n\n#ifndef __WINE_D3DX9MESH_H\n#define __WINE_D3DX9MESH_H\n\nDEFINE_GUID(IID_ID3DXBaseMesh, 0x7ed943dd, 0x52e8, 0x40b5, 0xa8, 0xd8, 0x76, 0x68, 0x5c, 0x40, 0x63, 0x30);\nDEFINE_GUID(IID_ID3DXMesh,     0x4020e5c2, 0x1403, 0x4929, 0x88, 0x3f, 0xe2, 0xe8, 0x49, 0xfa, 0xc1, 0x95);\nDEFINE_GUID(IID_ID3DXPMesh,    0x8875769a, 0xd579, 0x4088, 0xaa, 0xeb, 0x53, 0x4d, 0x1a, 0xd8, 0x4e, 0x96);\nDEFINE_GUID(IID_ID3DXSPMesh,   0x667ea4c7, 0xf1cd, 0x4386, 0xb5, 0x23, 0x7c, 0x02, 0x90, 0xb8, 0x3c, 0xc5);\nDEFINE_GUID(IID_ID3DXSkinInfo, 0x11eaa540, 0xf9a6, 0x4d49, 0xae, 0x6a, 0xe1, 0x92, 0x21, 0xf7, 0x0c, 0xc4);\nDEFINE_GUID(IID_ID3DXPatchMesh,0x3ce6cc22, 0xdbf2, 0x44f4, 0x89, 0x4d, 0xf9, 0xc3, 0x4a, 0x33, 0x71, 0x39);\nDEFINE_GUID(IID_ID3DXPRTBuffer,           0xf1827e47, 0x00a8, 0x49cd, 0x90, 0x8c, 0x9d, 0x11, 0x95, 0x5f, 0x87, 0x28);\nDEFINE_GUID(IID_ID3DXPRTCompBuffer,       0xa758d465, 0xfe8d, 0x45ad, 0x9c, 0xf0, 0xd0, 0x1e, 0x56, 0x26, 0x6a, 0x07);\nDEFINE_GUID(IID_ID3DXTextureGutterHelper, 0x838f01ec, 0x9729, 0x4527, 0xaa, 0xdb, 0xdf, 0x70, 0xad, 0xe7, 0xfe, 0xa9);\nDEFINE_GUID(IID_ID3DXPRTEngine,           0x683a4278, 0xcd5f, 0x4d24, 0x90, 0xad, 0xc4, 0xe1, 0xb6, 0x85, 0x5d, 0x53);\n\n#define UNUSED16 (0xffff)\n#define UNUSED32 (0xffffffff)\n\nenum _MAX_FVF_DECL_SIZE\n{\n    MAX_FVF_DECL_SIZE = MAXD3DDECLLENGTH + 1\n};\n\nenum _D3DXMESH\n{\n    D3DXMESH_32BIT                 = 0x001,\n    D3DXMESH_DONOTCLIP             = 0x002,\n    D3DXMESH_POINTS                = 0x004,\n    D3DXMESH_RTPATCHES             = 0x008,\n    D3DXMESH_NPATCHES              = 0x4000,\n    D3DXMESH_VB_SYSTEMMEM          = 0x010,\n    D3DXMESH_VB_MANAGED            = 0x020,\n    D3DXMESH_VB_WRITEONLY          = 0x040,\n    D3DXMESH_VB_DYNAMIC            = 0x080,\n    D3DXMESH_VB_SOFTWAREPROCESSING = 0x8000,\n    D3DXMESH_IB_SYSTEMMEM          = 0x100,\n    D3DXMESH_IB_MANAGED            = 0x200,\n    D3DXMESH_IB_WRITEONLY          = 0x400,\n    D3DXMESH_IB_DYNAMIC            = 0x800,\n    D3DXMESH_IB_SOFTWAREPROCESSING = 0x10000,\n    D3DXMESH_VB_SHARE              = 0x1000,\n    D3DXMESH_USEHWONLY             = 0x2000,\n    D3DXMESH_SYSTEMMEM             = 0x110,\n    D3DXMESH_MANAGED               = 0x220,\n    D3DXMESH_WRITEONLY             = 0x440,\n    D3DXMESH_DYNAMIC               = 0x880,\n    D3DXMESH_SOFTWAREPROCESSING    = 0x18000\n};\n\nenum _D3DXMESHOPT\n{\n    D3DXMESHOPT_DEVICEINDEPENDENT = 0x00400000,\n    D3DXMESHOPT_COMPACT           = 0x01000000,\n    D3DXMESHOPT_ATTRSORT          = 0x02000000,\n    D3DXMESHOPT_VERTEXCACHE       = 0x04000000,\n    D3DXMESHOPT_STRIPREORDER      = 0x08000000,\n    D3DXMESHOPT_IGNOREVERTS       = 0x10000000,\n    D3DXMESHOPT_DONOTSPLIT        = 0x20000000,\n};\n\ntypedef enum _D3DXPATCHMESHTYPE\n{\n    D3DXPATCHMESH_RECT        = 1,\n    D3DXPATCHMESH_TRI         = 2,\n    D3DXPATCHMESH_NPATCH      = 3,\n    D3DXPATCHMESH_FORCE_DWORD = 0x7fffffff,\n} D3DXPATCHMESHTYPE;\n\nenum _D3DXPATCHMESH\n{\n    D3DXPATCHMESH_DEFAULT = 0,\n};\n\nenum _D3DXMESHSIMP\n{\n    D3DXMESHSIMP_VERTEX = 0x1,\n    D3DXMESHSIMP_FACE   = 0x2,\n};\n\ntypedef enum D3DXCLEANTYPE {\n    D3DXCLEAN_BACKFACING     = 0x00000001,\n    D3DXCLEAN_BOWTIES        = 0x00000002,\n\n    D3DXCLEAN_SKINNING       = D3DXCLEAN_BACKFACING,\n    D3DXCLEAN_OPTIMIZATION   = D3DXCLEAN_BACKFACING,\n    D3DXCLEAN_SIMPLIFICATION = D3DXCLEAN_BACKFACING | D3DXCLEAN_BOWTIES,\n} D3DXCLEANTYPE;\n\ntypedef enum _D3DXTANGENT\n{\n    D3DXTANGENT_WRAP_U =                  0x0001,\n    D3DXTANGENT_WRAP_V =                  0x0002,\n    D3DXTANGENT_WRAP_UV =                 0x0003,\n    D3DXTANGENT_DONT_NORMALIZE_PARTIALS = 0x0004,\n    D3DXTANGENT_DONT_ORTHOGONALIZE =      0x0008,\n    D3DXTANGENT_ORTHOGONALIZE_FROM_V =    0x0010,\n    D3DXTANGENT_ORTHOGONALIZE_FROM_U =    0x0020,\n    D3DXTANGENT_WEIGHT_BY_AREA =          0x0040,\n    D3DXTANGENT_WEIGHT_EQUAL =            0x0080,\n    D3DXTANGENT_WIND_CW =                 0x0100,\n    D3DXTANGENT_CALCULATE_NORMALS =       0x0200,\n    D3DXTANGENT_GENERATE_IN_PLACE =       0x0400,\n} D3DXTANGENT;\n\ntypedef enum _D3DXIMT\n{\n    D3DXIMT_WRAP_U   = 0x01,\n    D3DXIMT_WRAP_V   = 0x02,\n    D3DXIMT_WRAP_UV  = 0x03,\n} D3DXIMT;\n\ntypedef enum _D3DXUVATLAS\n{\n    D3DXUVATLAS_DEFAULT          = 0x00,\n    D3DXUVATLAS_GEODESIC_FAST    = 0x01,\n    D3DXUVATLAS_GEODESIC_QUALITY = 0x02,\n} D3DXUVATLAS;\n\ntypedef enum _D3DXEFFECTDEFAULTTYPE\n{\n    D3DXEDT_STRING     = 1,\n    D3DXEDT_FLOATS     = 2,\n    D3DXEDT_DWORD      = 3,\n    D3DXEDT_FORCEDWORD = 0x7fffffff,\n} D3DXEFFECTDEFAULTTYPE;\n\nenum _D3DXWELDEPSILONSFLAGS\n{\n    D3DXWELDEPSILONS_WELDALL             = 0x1,\n    D3DXWELDEPSILONS_WELDPARTIALMATCHES  = 0x2,\n    D3DXWELDEPSILONS_DONOTREMOVEVERTICES = 0x4,\n    D3DXWELDEPSILONS_DONOTSPLIT          = 0x8,\n};\n\ntypedef enum _D3DXSHCOMPRESSQUALITYTYPE\n{\n    D3DXSHCQUAL_FASTLOWQUALITY  = 1,\n    D3DXSHCQUAL_SLOWHIGHQUALITY = 2,\n    D3DXSHCQUAL_FORCE_DWORD     = 0x7fffffff,\n} D3DXSHCOMPRESSQUALITYTYPE;\n\ntypedef enum _D3DXSHGPUSIMOPT\n{\n    D3DXSHGPUSIMOPT_SHADOWRES256   = 1,\n    D3DXSHGPUSIMOPT_SHADOWRES512   = 0,\n    D3DXSHGPUSIMOPT_SHADOWRES1024  = 2,\n    D3DXSHGPUSIMOPT_SHADOWRES2048  = 3,\n    D3DXSHGPUSIMOPT_HIGHQUALITY    = 4,\n    D3DXSHGPUSIMOPT_FORCE_DWORD    = 0x7fffffff,\n} D3DXSHGPUSIMOPT;\n\ntypedef struct ID3DXBaseMesh* LPD3DXBASEMESH;\ntypedef struct ID3DXMesh* LPD3DXMESH;\ntypedef struct ID3DXPMesh *LPD3DXPMESH;\ntypedef struct ID3DXSPMesh *LPD3DXSPMESH;\ntypedef struct ID3DXSkinInfo *LPD3DXSKININFO;\ntypedef struct ID3DXPatchMesh *LPD3DXPATCHMESH;\ntypedef struct ID3DXPRTBuffer *LPD3DXPRTBUFFER;\ntypedef struct ID3DXPRTCompBuffer *LPD3DXPRTCOMPBUFFER;\ntypedef struct ID3DXPRTEngine *LPD3DXPRTENGINE;\ntypedef struct ID3DXTextureGutterHelper *LPD3DXTEXTUREGUTTERHELPER;\n\ntypedef struct _D3DXATTRIBUTERANGE {\n    DWORD AttribId;\n    DWORD FaceStart;\n    DWORD FaceCount;\n    DWORD VertexStart;\n    DWORD VertexCount;\n} D3DXATTRIBUTERANGE;\n\ntypedef D3DXATTRIBUTERANGE* LPD3DXATTRIBUTERANGE;\n\ntypedef struct _D3DXMATERIAL\n{\n    D3DMATERIAL9 MatD3D;\n    char *pTextureFilename;\n} D3DXMATERIAL, *LPD3DXMATERIAL;\n\ntypedef struct _D3DXEFFECTDEFAULT\n{\n    char *pParamName;\n    D3DXEFFECTDEFAULTTYPE Type;\n    DWORD NumBytes;\n    void *pValue;\n} D3DXEFFECTDEFAULT, *LPD3DXEFFECTDEFAULT;\n\ntypedef struct _D3DXEFFECTINSTANCE\n{\n    char *pEffectFilename;\n    DWORD NumDefaults;\n    LPD3DXEFFECTDEFAULT pDefaults;\n} D3DXEFFECTINSTANCE, *LPD3DXEFFECTINSTANCE;\n\ntypedef struct _D3DXATTRIBUTEWEIGHTS\n{\n    FLOAT Position;\n    FLOAT Boundary;\n    FLOAT Normal;\n    FLOAT Diffuse;\n    FLOAT Specular;\n    FLOAT Texcoords[8];\n    FLOAT Tangent;\n    FLOAT Binormal;\n} D3DXATTRIBUTEWEIGHTS, *LPD3DXATTRIBUTEWEIGHTS;\n\ntypedef struct _D3DXWELDEPSILONS\n{\n    FLOAT Position;\n    FLOAT BlendWeights;\n    FLOAT Normals;\n    FLOAT PSize;\n    FLOAT Specular;\n    FLOAT Diffuse;\n    FLOAT Texcoords[8];\n    FLOAT Tangent;\n    FLOAT Binormal;\n    FLOAT TessFactor;\n} D3DXWELDEPSILONS, *LPD3DXWELDEPSILONS;\n\ntypedef struct _D3DXBONECOMBINATION\n{\n    DWORD AttribId;\n    DWORD FaceStart;\n    DWORD FaceCount;\n    DWORD VertexStart;\n    DWORD VertexCout;\n    DWORD *BoneId;\n} D3DXBONECOMBINATION, *LPD3DXBONECOMBINATION;\n\ntypedef struct _D3DXPATCHINFO\n{\n    D3DXPATCHMESHTYPE PatchType;\n    D3DDEGREETYPE Degree;\n    D3DBASISTYPE Basis;\n} D3DXPATCHINFO, *LPD3DXPATCHINFO;\n\ntypedef struct _D3DXINTERSECTINFO\n{\n    DWORD FaceIndex;\n    FLOAT U;\n    FLOAT V;\n    FLOAT Dist;\n} D3DXINTERSECTINFO, *LPD3DXINTERSECTINFO;\n\ntypedef struct _D3DXSHMATERIAL\n{\n    D3DCOLORVALUE Diffuse;\n    BOOL bMirror;\n    BOOL bSubSurf;\n    FLOAT RelativeIndexOfRefraction;\n    D3DCOLORVALUE Absorption;\n    D3DCOLORVALUE ReducedScattering;\n} D3DXSHMATERIAL;\n\ntypedef struct _D3DXSHPRTSPLITMESHVERTDATA\n{\n    UINT uVertRemap;\n    UINT uSubCluster;\n    UCHAR ucVertStatus;\n} D3DXSHPRTSPLITMESHVERTDATA;\n\ntypedef struct _D3DXSHPRTSPLITMESHCLUSTERDATA\n{\n    UINT uVertStart;\n    UINT uVertLength;\n    UINT uFaceStart;\n    UINT uFaceLength;\n    UINT uClusterStart;\n    UINT uClusterLength;\n} D3DXSHPRTSPLITMESHCLUSTERDATA;\n\ntypedef struct _XFILECOMPRESSEDANIMATIONSET\n{\n    DWORD CompressedBlockSize;\n    FLOAT TicksPerSec;\n    DWORD PlaybackType;\n    DWORD BufferLength;\n} XFILECOMPRESSEDANIMATIONSET;\n\ntypedef HRESULT (WINAPI *LPD3DXUVATLASCB)(float complete, void *ctx);\ntypedef HRESULT (WINAPI *LPD3DXIMTSIGNALCALLBACK)(const D3DXVECTOR2 *, UINT, UINT, void *, FLOAT *);\ntypedef HRESULT (WINAPI *LPD3DXSHPRTSIMCB)(float complete, void *ctx);\n\n#undef INTERFACE\n#define INTERFACE ID3DXBaseMesh\n\nDECLARE_INTERFACE_(ID3DXBaseMesh, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /*** ID3DXBaseMesh ***/\n    STDMETHOD(DrawSubset)(THIS_ DWORD attrib_id) PURE;\n    STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;\n    STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;\n    STDMETHOD_(DWORD, GetFVF)(THIS) PURE;\n    STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;\n    STDMETHOD_(DWORD, GetNumBytesPerVertex)(THIS) PURE;\n    STDMETHOD_(DWORD, GetOptions)(THIS) PURE;\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;\n    STDMETHOD(CloneMeshFVF)(THIS_ DWORD options, DWORD fvf,\n            struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE;\n    STDMETHOD(CloneMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration,\n            struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE;\n    STDMETHOD(GetVertexBuffer)(THIS_ struct IDirect3DVertexBuffer9 **vertex_buffer) PURE;\n    STDMETHOD(GetIndexBuffer)(THIS_ struct IDirect3DIndexBuffer9 **index_buffer) PURE;\n    STDMETHOD(LockVertexBuffer)(THIS_ DWORD flags, void **data) PURE;\n    STDMETHOD(UnlockVertexBuffer)(THIS) PURE;\n    STDMETHOD(LockIndexBuffer)(THIS_ DWORD flags, void **data) PURE;\n    STDMETHOD(UnlockIndexBuffer)(THIS) PURE;\n    STDMETHOD(GetAttributeTable)(THIS_ D3DXATTRIBUTERANGE* attrib_table, DWORD* attrib_table_size) PURE;\n    STDMETHOD(ConvertPointRepsToAdjacency)(THIS_ const DWORD *point_reps, DWORD *adjacency) PURE;\n    STDMETHOD(ConvertAdjacencyToPointReps)(THIS_ const DWORD *adjacency, DWORD *point_reps) PURE;\n    STDMETHOD(GenerateAdjacency)(THIS_ FLOAT epsilon, DWORD* adjacency) PURE;\n    STDMETHOD(UpdateSemantics)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE ID3DXMesh\nDECLARE_INTERFACE_(ID3DXMesh, ID3DXBaseMesh)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /*** ID3DXBaseMesh ***/\n    STDMETHOD(DrawSubset)(THIS_ DWORD attrib_id) PURE;\n    STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;\n    STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;\n    STDMETHOD_(DWORD, GetFVF)(THIS) PURE;\n    STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;\n    STDMETHOD_(DWORD, GetNumBytesPerVertex)(THIS) PURE;\n    STDMETHOD_(DWORD, GetOptions)(THIS) PURE;\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;\n    STDMETHOD(CloneMeshFVF)(THIS_ DWORD options, DWORD fvf,\n            struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE;\n    STDMETHOD(CloneMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration,\n            struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE;\n    STDMETHOD(GetVertexBuffer)(THIS_ struct IDirect3DVertexBuffer9 **vertex_buffer) PURE;\n    STDMETHOD(GetIndexBuffer)(THIS_ struct IDirect3DIndexBuffer9 **index_buffer) PURE;\n    STDMETHOD(LockVertexBuffer)(THIS_ DWORD flags, void **data) PURE;\n    STDMETHOD(UnlockVertexBuffer)(THIS) PURE;\n    STDMETHOD(LockIndexBuffer)(THIS_ DWORD flags, void **data) PURE;\n    STDMETHOD(UnlockIndexBuffer)(THIS) PURE;\n    STDMETHOD(GetAttributeTable)(THIS_ D3DXATTRIBUTERANGE* attrib_table, DWORD* attrib_table_size) PURE;\n    STDMETHOD(ConvertPointRepsToAdjacency)(THIS_ const DWORD *point_reps, DWORD *adjacency) PURE;\n    STDMETHOD(ConvertAdjacencyToPointReps)(THIS_ const DWORD *adjacency, DWORD *point_reps) PURE;\n    STDMETHOD(GenerateAdjacency)(THIS_ FLOAT epsilon, DWORD* adjacency) PURE;\n    STDMETHOD(UpdateSemantics)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;\n    /*** ID3DXMesh ***/\n    STDMETHOD(LockAttributeBuffer)(THIS_ DWORD flags, DWORD** data) PURE;\n    STDMETHOD(UnlockAttributeBuffer)(THIS) PURE;\n    STDMETHOD(Optimize)(THIS_ DWORD flags, const DWORD *adjacency_in, DWORD *adjacency_out,\n            DWORD *face_remap, ID3DXBuffer **vertex_remap, ID3DXMesh **opt_mesh) PURE;\n    STDMETHOD(OptimizeInplace)(THIS_ DWORD flags, const DWORD *adjacency_in, DWORD *adjacency_out,\n                     DWORD *face_remap, ID3DXBuffer **vertex_remap) PURE;\n    STDMETHOD(SetAttributeTable)(THIS_ const D3DXATTRIBUTERANGE *attrib_table,\n            DWORD attrib_table_size) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE ID3DXPMesh\nDECLARE_INTERFACE_(ID3DXPMesh, ID3DXBaseMesh)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /*** ID3DXBaseMesh ***/\n    STDMETHOD(DrawSubset)(THIS_ DWORD attrib_id) PURE;\n    STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;\n    STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;\n    STDMETHOD_(DWORD, GetFVF)(THIS) PURE;\n    STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;\n    STDMETHOD_(DWORD, GetNumBytesPerVertex)(THIS) PURE;\n    STDMETHOD_(DWORD, GetOptions)(THIS) PURE;\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;\n    STDMETHOD(CloneMeshFVF)(THIS_ DWORD options, DWORD fvf,\n            struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE;\n    STDMETHOD(CloneMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration,\n            struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE;\n    STDMETHOD(GetVertexBuffer)(THIS_ struct IDirect3DVertexBuffer9 **vertex_buffer) PURE;\n    STDMETHOD(GetIndexBuffer)(THIS_ struct IDirect3DIndexBuffer9 **index_buffer) PURE;\n    STDMETHOD(LockVertexBuffer)(THIS_ DWORD flags, void **data) PURE;\n    STDMETHOD(UnlockVertexBuffer)(THIS) PURE;\n    STDMETHOD(LockIndexBuffer)(THIS_ DWORD flags, void **data) PURE;\n    STDMETHOD(UnlockIndexBuffer)(THIS) PURE;\n    STDMETHOD(GetAttributeTable)(THIS_ D3DXATTRIBUTERANGE* attrib_table, DWORD* attrib_table_size) PURE;\n    STDMETHOD(ConvertPointRepsToAdjacency)(THIS_ const DWORD *point_reps, DWORD *adjacency) PURE;\n    STDMETHOD(ConvertAdjacencyToPointReps)(THIS_ const DWORD *adjacency, DWORD *point_reps) PURE;\n    STDMETHOD(GenerateAdjacency)(THIS_ FLOAT epsilon, DWORD* adjacency) PURE;\n    STDMETHOD(UpdateSemantics)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;\n    /*** ID3DXPMesh ***/\n    STDMETHOD(ClonePMeshFVF)(THIS_ DWORD options, DWORD fvf,\n            struct IDirect3DDevice9 *device, struct ID3DXPMesh **clone_mesh) PURE;\n    STDMETHOD(ClonePMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration,\n            struct IDirect3DDevice9 *device, struct ID3DXPMesh **clone_mesh) PURE;\n    STDMETHOD(SetNumFaces)(THIS_ DWORD faces) PURE;\n    STDMETHOD(SetNumVertices)(THIS_ DWORD vertices) PURE;\n    STDMETHOD_(DWORD, GetMaxFaces)(THIS) PURE;\n    STDMETHOD_(DWORD, GetMinFaces)(THIS) PURE;\n    STDMETHOD_(DWORD, GetMaxVertices)(THIS) PURE;\n    STDMETHOD_(DWORD, GetMinVertices)(THIS) PURE;\n    STDMETHOD(Save)(THIS_ IStream *stream, const D3DXMATERIAL *material,\n            const D3DXEFFECTINSTANCE *effect_instance, DWORD num_materials) PURE;\n    STDMETHOD(Optimize)(THIS_ DWORD flags, DWORD *adjacency_out, DWORD *face_remap,\n            ID3DXBuffer **vertex_remap, ID3DXMesh **opt_mesh) PURE;\n    STDMETHOD(OptimizeBaseLOD)(THIS_ DWORD flags, DWORD* face_remap) PURE;\n    STDMETHOD(TrimByFaces)(THIS_ DWORD new_faces_min, DWORD new_faces_max, DWORD* face_remap, DWORD* vertex_remap) PURE;\n    STDMETHOD(TrimByVertices)(THIS_ DWORD new_vertices_min, DWORD new_vertices_max, DWORD* face_remap, DWORD* vertex_remap) PURE;\n    STDMETHOD(GetAdjacency)(THIS_ DWORD* adjacency) PURE;\n    STDMETHOD(GenerateVertexHistory)(THIS_ DWORD* vertex_history) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE ID3DXSPMesh\nDECLARE_INTERFACE_(ID3DXSPMesh, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /*** ID3DXSPMesh ***/\n    STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;\n    STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;\n    STDMETHOD_(DWORD, GetNumFVF)(THIS) PURE;\n    STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;\n    STDMETHOD_(DWORD, GetOptions)(THIS) PURE;\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;\n    STDMETHOD(CloneMeshFVF)(THIS_ DWORD options, DWORD fvf,\n            struct IDirect3DDevice9 *device, DWORD *adjacency_out,\n            DWORD *vertex_remap_out, struct ID3DXMesh **clone_mesh) PURE;\n    STDMETHOD(CloneMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration,\n            struct IDirect3DDevice9 *device, DWORD *adjacency_out,\n            DWORD *vertex_remap_out, struct ID3DXMesh **clone_mesh) PURE;\n    STDMETHOD(ClonePMeshFVF)(THIS_ DWORD options, DWORD fvf,\n            struct IDirect3DDevice9 *device, DWORD *vertex_remap_out,\n            float *errors_by_face, struct ID3DXPMesh **clone_mesh) PURE;\n    STDMETHOD(ClonePMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration,\n            struct IDirect3DDevice9 *device, DWORD *vertex_remap_out,\n            float *errors_by_face, struct ID3DXPMesh **clone_mesh) PURE;\n    STDMETHOD(ReduceFaces)(THIS_ DWORD faces) PURE;\n    STDMETHOD(ReduceVertices)(THIS_ DWORD vertices) PURE;\n    STDMETHOD_(DWORD, GetMaxFaces)(THIS) PURE;\n    STDMETHOD_(DWORD, GetMaxVertices)(THIS) PURE;\n    STDMETHOD(GetVertexAttributeWeights)(THIS_ LPD3DXATTRIBUTEWEIGHTS vertex_attribute_weights) PURE;\n    STDMETHOD(GetVertexWeights)(THIS_ FLOAT* vertex_weights) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE ID3DXPatchMesh\nDECLARE_INTERFACE_(ID3DXPatchMesh, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /*** ID3DXPatchMesh ***/\n    STDMETHOD_(DWORD, GetNumPatches)(THIS) PURE;\n    STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;\n    STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;\n    STDMETHOD_(DWORD, GetControlVerticesPerPatch)(THIS) PURE;\n    STDMETHOD_(DWORD, GetOptions)(THIS) PURE;\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;\n    STDMETHOD(GetPatchInfo)(THIS_ LPD3DXPATCHINFO patch_info) PURE;\n    STDMETHOD(GetVertexBuffer)(THIS_ struct IDirect3DVertexBuffer9 **vertex_buffer) PURE;\n    STDMETHOD(GetIndexBuffer)(THIS_ struct IDirect3DIndexBuffer9 **index_buffer) PURE;\n    STDMETHOD(LockVertexBuffer)(THIS_ DWORD flags, void **data) PURE;\n    STDMETHOD(UnlockVertexBuffer)(THIS) PURE;\n    STDMETHOD(LockIndexBuffer)(THIS_ DWORD flags, void **data) PURE;\n    STDMETHOD(UnlockIndexBuffer)(THIS) PURE;\n    STDMETHOD(LockAttributeBuffer)(THIS_ DWORD flags, DWORD** data) PURE;\n    STDMETHOD(UnlockAttributeBuffer)(THIS) PURE;\n    STDMETHOD(GetTessSize)(THIS_ FLOAT tess_level, DWORD adaptive, DWORD* num_triangles, DWORD* num_vertices) PURE;\n    STDMETHOD(GenerateAdjacency)(THIS_ FLOAT tolerance) PURE;\n    STDMETHOD(CloneMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration, ID3DXPatchMesh **clone_mesh) PURE;\n    STDMETHOD(Optimize)(THIS_ DWORD flags) PURE;\n    STDMETHOD(SetDisplaceParam)(THIS_ struct IDirect3DBaseTexture9 *texture, D3DTEXTUREFILTERTYPE min_filter,\n            D3DTEXTUREFILTERTYPE mag_filter, D3DTEXTUREFILTERTYPE mip_filter, D3DTEXTUREADDRESS wrap,\n            DWORD lod_bias) PURE;\n    STDMETHOD(GetDisplaceParam)(THIS_ struct IDirect3DBaseTexture9 **texture, D3DTEXTUREFILTERTYPE *min_filter,\n            D3DTEXTUREFILTERTYPE *mag_filter, D3DTEXTUREFILTERTYPE *mip_filter, D3DTEXTUREADDRESS *wrap,\n            DWORD *lod_bias) PURE;\n    STDMETHOD(Tessellate)(THIS_ float tess_level, ID3DXMesh *mesh) PURE;\n    STDMETHOD(TessellateAdaptive)(THIS_ const D3DXVECTOR4 *trans, DWORD max_tess_level,\n            DWORD min_tess_level, ID3DXMesh *mesh) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE ID3DXSkinInfo\nDECLARE_INTERFACE_(ID3DXSkinInfo, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /*** ID3DXSkinInfo ***/\n    STDMETHOD(SetBoneInfluence)(THIS_ DWORD bone, DWORD num_influences, const DWORD *vertices,\n            const FLOAT *weights) PURE;\n    STDMETHOD(SetBoneVertexInfluence)(THIS_ DWORD bone_num, DWORD influence_num, float weight) PURE;\n    STDMETHOD_(DWORD, GetNumBoneInfluences)(THIS_ DWORD bone) PURE;\n    STDMETHOD(GetBoneInfluence)(THIS_ DWORD bone, DWORD* vertices, FLOAT* weights) PURE;\n    STDMETHOD(GetBoneVertexInfluence)(THIS_ DWORD bone_num, DWORD influence_num, float *weight, DWORD* vertex_num) PURE;\n    STDMETHOD(GetMaxVertexInfluences)(THIS_ DWORD* max_vertex_influences) PURE;\n    STDMETHOD_(DWORD, GetNumBones)(THIS) PURE;\n    STDMETHOD(FindBoneVertexInfluenceIndex)(THIS_ DWORD bone_num, DWORD vertex_num, DWORD* influence_index) PURE;\n    STDMETHOD(GetMaxFaceInfluences)(THIS_ struct IDirect3DIndexBuffer9 *index_buffer,\n            DWORD num_faces, DWORD *max_face_influences) PURE;\n    STDMETHOD(SetMinBoneInfluence)(THIS_ FLOAT min_influence) PURE;\n    STDMETHOD_(FLOAT, GetMinBoneInfluence)(THIS) PURE;\n    STDMETHOD(SetBoneName)(THIS_ DWORD bone_idx, const char *name) PURE;\n    STDMETHOD_(const char *, GetBoneName)(THIS_ DWORD bone_idx) PURE;\n    STDMETHOD(SetBoneOffsetMatrix)(THIS_ DWORD bone, const D3DXMATRIX *bone_transform) PURE;\n    STDMETHOD_(D3DXMATRIX *, GetBoneOffsetMatrix)(THIS_ DWORD bone) PURE;\n    STDMETHOD(Clone)(THIS_ ID3DXSkinInfo **skin_info) PURE;\n    STDMETHOD(Remap)(THIS_ DWORD num_vertices, DWORD* vertex_remap) PURE;\n    STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE;\n    STDMETHOD(SetDeclaration)(THIS_ const D3DVERTEXELEMENT9 *declaration) PURE;\n    STDMETHOD_(DWORD, GetFVF)(THIS) PURE;\n    STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;\n    STDMETHOD(UpdateSkinnedMesh)(THIS_ const D3DXMATRIX *bone_transforms,\n            const D3DXMATRIX *bone_inv_transpose_transforms, const void *src_vertices, void *dst_vertices) PURE;\n    STDMETHOD(ConvertToBlendedMesh)(THIS_ ID3DXMesh *mesh_in, DWORD options, const DWORD *adjacency_in,\n            DWORD *adjacency_out, DWORD *face_remap, ID3DXBuffer **vertex_remap, DWORD *max_face_infl,\n            DWORD *num_bone_combinations, ID3DXBuffer **bone_combination_table, ID3DXMesh **mesh_out) PURE;\n    STDMETHOD(ConvertToIndexedBlendedMesh)(THIS_ ID3DXMesh *mesh_in, DWORD options, DWORD palette_size,\n            const DWORD *adjacency_in, DWORD *adjacency_out, DWORD *face_remap, ID3DXBuffer **vertex_remap,\n            DWORD *max_face_infl, DWORD *num_bone_combinations, ID3DXBuffer **bone_combination_table,\n            ID3DXMesh **mesh_out) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE ID3DXPRTBuffer\nDECLARE_INTERFACE_(ID3DXPRTBuffer, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /*** ID3DXPRTBuffer methods ***/\n    STDMETHOD_(UINT, GetNumSamples)(THIS) PURE;\n    STDMETHOD_(UINT, GetNumCoeffs)(THIS) PURE;\n    STDMETHOD_(UINT, GetNumChannels)(THIS) PURE;\n    STDMETHOD_(BOOL, IsTexture)(THIS) PURE;\n    STDMETHOD_(BOOL, GetWidth)(THIS) PURE;\n    STDMETHOD_(BOOL, GetHeight)(THIS) PURE;\n    STDMETHOD(Resize)(THIS_ UINT new_size) PURE;\n    STDMETHOD(LockBuffer)(THIS_ UINT start, UINT num_samples, FLOAT **data) PURE;\n    STDMETHOD(UnlockBuffer)(THIS) PURE;\n    STDMETHOD(ScaleBuffer)(THIS_ FLOAT scale) PURE;\n    STDMETHOD(AddBuffer)(THIS_ ID3DXPRTBuffer *buffer) PURE;\n    STDMETHOD(AttachGH)(THIS_ struct ID3DXTextureGutterHelper *gh) PURE;\n    STDMETHOD(ReleaseGH)(THIS) PURE;\n    STDMETHOD(EvalGH)(THIS) PURE;\n    STDMETHOD(ExtractTexture)(THIS_ UINT channel, UINT start_coefficient,\n        UINT num_coefficients, struct IDirect3DTexture9 *texture) PURE;\n    STDMETHOD(ExtractToMesh)(THIS_ UINT num_coefficients, D3DDECLUSAGE usage,\n            UINT usage_index_start, ID3DXMesh *scene) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE ID3DXPRTCompBuffer\nDECLARE_INTERFACE_(ID3DXPRTCompBuffer, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /*** ID3DXPRTCompBuffer methods ***/\n    STDMETHOD_(UINT, GetNumSamples)(THIS) PURE;\n    STDMETHOD_(UINT, GetNumCoeffs)(THIS) PURE;\n    STDMETHOD_(UINT, GetNumChannels)(THIS) PURE;\n    STDMETHOD_(BOOL, IsTexture)(THIS) PURE;\n    STDMETHOD_(UINT, GetWidth)(THIS) PURE;\n    STDMETHOD_(UINT, GetHeight)(THIS) PURE;\n    STDMETHOD_(UINT, GetNumClusters)(THIS) PURE;\n    STDMETHOD_(UINT, GetNumPCA)(THIS) PURE;\n    STDMETHOD(NormalizeData)(THIS) PURE;\n    STDMETHOD(ExtractBasis)(THIS_ UINT cluster, FLOAT *cluster_basis) PURE;\n    STDMETHOD(ExtractClusterIDs)(THIS_ UINT *cluster_ids) PURE;\n    STDMETHOD(ExtractPCA)(THIS_ UINT start_pca, UINT num_extract, FLOAT *pca_coefficients) PURE;\n    STDMETHOD(ExtractTexture)(THIS_ UINT start_pca, UINT num_pca, struct IDirect3DTexture9 *texture) PURE;\n    STDMETHOD(ExtractToMesh)(THIS_ UINT num_pca, D3DDECLUSAGE usage, UINT usage_index_start, ID3DXMesh *scene) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE ID3DXTextureGutterHelper\nDECLARE_INTERFACE_(ID3DXTextureGutterHelper, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /*** ID3DXTextureGutterHelper methods ***/\n    STDMETHOD_(UINT, GetWidth)(THIS) PURE;\n    STDMETHOD_(UINT, GetHeight)(THIS) PURE;\n\n    STDMETHOD(ApplyGuttersFloat)(THIS_ FLOAT *data_in, UINT num_coeffs, UINT width, UINT height) PURE;\n    STDMETHOD(ApplyGuttersTex)(THIS_ struct IDirect3DTexture9 *texture) PURE;\n    STDMETHOD(ApplyGuttersPRT)(THIS_ ID3DXPRTBuffer *buffer) PURE;\n    STDMETHOD(ResampleTex)(THIS_ struct IDirect3DTexture9 *texture_in, struct ID3DXMesh *mesh_in,\n        D3DDECLUSAGE usage, UINT usage_index, struct IDirect3DTexture9 *texture_out) PURE;\n    STDMETHOD(GetFaceMap)(THIS_ UINT *face_data) PURE;\n    STDMETHOD(GetBaryMap)(THIS_ D3DXVECTOR2 *bary_data) PURE;\n    STDMETHOD(GetTexelMap)(THIS_ D3DXVECTOR2 *texel_data) PURE;\n    STDMETHOD(GetGutterMap)(THIS_ BYTE *gutter_data) PURE;\n    STDMETHOD(SetFaceMap)(THIS_ UINT *face_data) PURE;\n    STDMETHOD(SetBaryMap)(THIS_ D3DXVECTOR2 *bary_data) PURE;\n    STDMETHOD(SetTexelMap)(THIS_ D3DXVECTOR2 *texel_data) PURE;\n    STDMETHOD(SetGutterMap)(THIS_ BYTE *gutter_data) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE ID3DXPRTEngine\nDECLARE_INTERFACE_(ID3DXPRTEngine, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /*** ID3DXPRTEngine methods ***/\n    STDMETHOD(SetMeshMaterials)(THIS_ const D3DXSHMATERIAL **materials, UINT num_meshes,\n        UINT num_channels, BOOL set_albedo, FLOAT length_scale) PURE;\n    STDMETHOD(SetPerVertexAlbedo)(THIS_ const void *data_in, UINT num_channels, UINT stride) PURE;\n    STDMETHOD(SetPerTexelAlbedo)(THIS_ struct IDirect3DTexture9 *albedo_texture,\n            UINT num_channels, struct ID3DXTextureGutterHelper *gh) PURE;\n    STDMETHOD(GetVertexAlbedo)(THIS_ D3DXCOLOR *vert_colors, UINT num_verts) PURE;\n    STDMETHOD(SetPerTexelNormals)(THIS_ struct IDirect3DTexture9 *normal_texture) PURE;\n    STDMETHOD(ExtractPerVertexAlbedo)(THIS_ ID3DXMesh *mesh, D3DDECLUSAGE usage, UINT num_channels) PURE;\n    STDMETHOD(ResampleBuffer)(THIS_ ID3DXPRTBuffer *buffer_in, ID3DXPRTBuffer *buffer_out) PURE;\n    STDMETHOD(GetAdaptedMesh)(THIS_ struct IDirect3DDevice9 *device, UINT *face_remap,\n            UINT *vert_remap, float *vert_weights, struct ID3DXMesh **mesh) PURE;\n    STDMETHOD_(UINT, GetNumVerts)(THIS) PURE;\n    STDMETHOD_(UINT, GetNumFaces)(THIS) PURE;\n    STDMETHOD(SetMinMaxIntersection)(THIS_ FLOAT min, FLOAT max) PURE;\n    STDMETHOD(RobustMeshRefine)(THIS_ FLOAT min_edge_length, UINT max_subdiv) PURE;\n    STDMETHOD(SetSamplingInfo)(THIS_ UINT num_rays, BOOL use_sphere,\n        BOOL use_cosine, BOOL adaptive, FLOAT adpative_thresh) PURE;\n    STDMETHOD(ComputeDirectLightingSH)(THIS_ UINT sh_order, ID3DXPRTBuffer *data_out) PURE;\n    STDMETHOD(ComputeDirectLightingSHAdaptive)(THIS_ UINT sh_order, float adaptive_thresh,\n            float min_edge_length, UINT max_subdiv, ID3DXPRTBuffer *data_out) PURE;\n    STDMETHOD(ComputeDirectLightingSHGPU)(THIS_ struct IDirect3DDevice9 *device, UINT flags,\n            UINT sh_order, float zbias, float zangle_bias, struct ID3DXPRTBuffer *data_out) PURE;\n    STDMETHOD(ComputeSS)(THIS_ ID3DXPRTBuffer *data_in, ID3DXPRTBuffer *data_out,\n            ID3DXPRTBuffer *data_total) PURE;\n    STDMETHOD(ComputeSSAdaptive)(THIS_ ID3DXPRTBuffer *data_in, float adaptive_thres,\n            float min_edge_length, UINT max_subdiv, ID3DXPRTBuffer *data_out, ID3DXPRTBuffer *data_total) PURE;\n    STDMETHOD(ComputeBounce)(THIS_ ID3DXPRTBuffer *data_in, ID3DXPRTBuffer *data_out,\n            ID3DXPRTBuffer *data_total) PURE;\n    STDMETHOD(ComputeBounceAdaptive)(THIS_ ID3DXPRTBuffer *data_in, float adaptive_thres,\n            float min_edge_length, UINT max_subdiv, ID3DXPRTBuffer *data_out, ID3DXPRTBuffer *data_total) PURE;\n    STDMETHOD(ComputeVolumeSamplesDirectSH)(THIS_ UINT sh_order_in, UINT sh_order_out,\n            UINT num_vol_samples, const D3DXVECTOR3 *sample_locs, ID3DXPRTBuffer *data_out) PURE;\n    STDMETHOD(ComputeVolumeSamples)(THIS_ ID3DXPRTBuffer *surf_data_in, UINT sh_order,\n            UINT num_vol_samples, const D3DXVECTOR3 *sample_locs, ID3DXPRTBuffer *data_out) PURE;\n    STDMETHOD(ComputeSurfSamplesDirectSH)(THIS_ UINT sh_order, UINT num_samples,\n            const D3DXVECTOR3 *sample_locs, const D3DXVECTOR3 *sample_norms, ID3DXPRTBuffer *data_out) PURE;\n    STDMETHOD(ComputeSurfSamplesBounce)(THIS_ ID3DXPRTBuffer *surf_data_in, UINT num_samples,\n            const D3DXVECTOR3 *sample_locs, const D3DXVECTOR3 *sample_norms, ID3DXPRTBuffer *data_out,\n            ID3DXPRTBuffer *data_total) PURE;\n    STDMETHOD(FreeSSData)(THIS) PURE;\n    STDMETHOD(FreeBounceData)(THIS) PURE;\n    STDMETHOD(ComputeLDPRTCoeffs)(THIS_ ID3DXPRTBuffer *data_in, UINT sh_order, D3DXVECTOR3 *norm_out,\n            ID3DXPRTBuffer *data_out) PURE;\n    STDMETHOD(ScaleMeshChunk)(THIS_ UINT mesh_chunk, float scale, ID3DXPRTBuffer *data_out) PURE;\n    STDMETHOD(MultiplyAlbedo)(THIS_ ID3DXPRTBuffer *data_out) PURE;\n    STDMETHOD(SetCallback)(THIS_ LPD3DXSHPRTSIMCB cb, float frequency, void *user_context) PURE;\n    STDMETHOD_(BOOL, ShadowRayIntersects)(THIS_ const D3DXVECTOR3 *ray_pos,\n            const D3DXVECTOR3 *ray_dir) PURE;\n    STDMETHOD_(BOOL, ClosestRayIntersects)(THIS_ const D3DXVECTOR3 *ray_pos,\n            const D3DXVECTOR3 *ray_dir, DWORD *face_index, FLOAT *u, FLOAT *v, FLOAT *dist) PURE;\n};\n#undef INTERFACE\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nHRESULT WINAPI D3DXCreateMesh(DWORD face_count, DWORD vertex_count, DWORD flags,\n        const D3DVERTEXELEMENT9 *declaration, struct IDirect3DDevice9 *device, struct ID3DXMesh **mesh);\nHRESULT WINAPI D3DXCreateMeshFVF(DWORD face_count, DWORD vertex_count, DWORD flags,\n        DWORD fvf, struct IDirect3DDevice9 *device, struct ID3DXMesh **mesh);\nHRESULT WINAPI D3DXCreateBuffer(DWORD size, ID3DXBuffer **buffer);\nHRESULT WINAPI D3DXCreateSPMesh(ID3DXMesh *mesh, const DWORD *adjacency,\n        const D3DXATTRIBUTEWEIGHTS *attribute_weights, const float *vertex_weights, ID3DXSPMesh **spmesh);\nHRESULT WINAPI D3DXCreatePMeshFromStream(struct IStream *stream, DWORD flags, struct IDirect3DDevice9 *device,\n        struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances,\n        DWORD *material_count, struct ID3DXPMesh **mesh);\nHRESULT WINAPI D3DXCreateSkinInfo(DWORD vertex_count, const D3DVERTEXELEMENT9 *declaration,\n        DWORD bone_count, ID3DXSkinInfo **skin_info);\nHRESULT WINAPI D3DXCreateSkinInfoFVF(DWORD vertex_count, DWORD fvf, DWORD bone_count, ID3DXSkinInfo **skin_info);\nHRESULT WINAPI D3DXCreateSkinInfoFromBlendedMesh(ID3DXBaseMesh *mesh, DWORD bone_count,\n        const D3DXBONECOMBINATION *bone_combination_table, ID3DXSkinInfo **skin_info);\nHRESULT WINAPI D3DXCreatePatchMesh(const D3DXPATCHINFO *patch_info, DWORD patch_count,\n        DWORD vertex_count, DWORD flags, const D3DVERTEXELEMENT9 *declaration,\n        struct IDirect3DDevice9 *device, struct ID3DXPatchMesh **mesh);\nHRESULT WINAPI D3DXCreatePRTBuffer(UINT sample_count, UINT coeff_count, UINT channel_count, ID3DXPRTBuffer **buffer);\nHRESULT WINAPI D3DXCreatePRTBufferTex(UINT width, UINT height, UINT coeff_count,\n        UINT channel_count, ID3DXPRTBuffer **buffer);\nHRESULT WINAPI D3DXCreatePRTCompBuffer(D3DXSHCOMPRESSQUALITYTYPE quality, UINT cluster_count, UINT pca_count,\n        LPD3DXSHPRTSIMCB cb, void *ctx, ID3DXPRTBuffer *input, ID3DXPRTCompBuffer **buffer);\nHRESULT WINAPI D3DXCreateTextureGutterHelper(UINT width, UINT height, ID3DXMesh *mesh,\n        float gutter_size, ID3DXTextureGutterHelper **gh);\nHRESULT WINAPI D3DXCreatePRTEngine(ID3DXMesh *mesh, DWORD *adjacency, BOOL extract_uv,\n        ID3DXMesh *blocker_mesh, ID3DXPRTEngine **engine);\nHRESULT WINAPI D3DXLoadMeshFromXA(const char *filename, DWORD flags, struct IDirect3DDevice9 *device,\n        struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances,\n        DWORD *material_count, struct ID3DXMesh **mesh);\nHRESULT WINAPI D3DXLoadMeshFromXW(const WCHAR *filename, DWORD flags, struct IDirect3DDevice9 *device,\n        struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances,\n        DWORD *material_count, struct ID3DXMesh **mesh);\n#define D3DXLoadMeshFromX WINELIB_NAME_AW(D3DXLoadMeshFromX)\nHRESULT WINAPI D3DXLoadMeshFromXInMemory(const void *data, DWORD data_size, DWORD flags,\n        struct IDirect3DDevice9 *device, struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials,\n        struct ID3DXBuffer **effect_instances, DWORD *material_count, struct ID3DXMesh **mesh);\nHRESULT WINAPI D3DXLoadMeshFromXResource(HMODULE module, const char *resource, const char *resource_type,\n        DWORD flags, struct IDirect3DDevice9 *device, struct ID3DXBuffer **adjacency,\n        struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances,\n        DWORD *material_count, struct ID3DXMesh **mesh);\nHRESULT WINAPI D3DXLoadMeshFromXof(struct ID3DXFileData *file_data, DWORD flags, struct IDirect3DDevice9 *device,\n        struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances,\n        DWORD *material_count, struct ID3DXMesh **mesh);\nHRESULT WINAPI D3DXLoadPatchMeshFromXof(struct ID3DXFileData *file_data, DWORD flags, struct IDirect3DDevice9 *device,\n        struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances,\n        DWORD *material_count, struct ID3DXPatchMesh **mesh);\nHRESULT WINAPI D3DXLoadSkinMeshFromXof(struct ID3DXFileData *file_data, DWORD flags, struct IDirect3DDevice9 *device,\n        struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances,\n        DWORD *material_count, struct ID3DXSkinInfo **skin_info, struct ID3DXMesh **mesh);\nHRESULT WINAPI D3DXLoadPRTBufferFromFileA(const char *filename, ID3DXPRTBuffer **buffer);\nHRESULT WINAPI D3DXLoadPRTBufferFromFileW(const WCHAR *filename, ID3DXPRTBuffer **buffer);\n#define D3DXLoadPRTBufferFromFile WINELIB_NAME_AW(D3DXLoadPRTBufferFromFile)\nHRESULT WINAPI D3DXLoadPRTCompBufferFromFileA(const char *filename, ID3DXPRTCompBuffer **buffer);\nHRESULT WINAPI D3DXLoadPRTCompBufferFromFileW(const WCHAR *filename, ID3DXPRTCompBuffer **buffer);\n#define D3DXLoadPRTCompBufferFromFile WINELIB_NAME_AW(D3DXLoadPRTCompBufferFromFile)\nHRESULT WINAPI D3DXSaveMeshToXA(const char *filename, ID3DXMesh *mesh, const DWORD *adjacency,\n        const D3DXMATERIAL *materials, const D3DXEFFECTINSTANCE *effect_instances, DWORD material_count, DWORD format);\nHRESULT WINAPI D3DXSaveMeshToXW(const WCHAR *filename, ID3DXMesh *mesh, const DWORD *adjacency,\n        const D3DXMATERIAL *materials, const D3DXEFFECTINSTANCE *effect_instances, DWORD material_count, DWORD format);\n#define D3DXSaveMeshToX WINELIB_NAME_AW(D3DXSaveMeshToX)\nHRESULT WINAPI D3DXSavePRTBufferToFileA(const char *filename, ID3DXPRTBuffer *buffer);\nHRESULT WINAPI D3DXSavePRTBufferToFileW(const WCHAR *filename, ID3DXPRTBuffer *buffer);\n#define D3DXSavePRTBufferToFile WINELIB_NAME_AW(D3DXSavePRTBufferToFile)\nHRESULT WINAPI D3DXSavePRTCompBufferToFileA(const char *filename, ID3DXPRTCompBuffer *buffer);\nHRESULT WINAPI D3DXSavePRTCompBufferToFileW(const WCHAR *filename, ID3DXPRTCompBuffer *buffer);\n#define D3DXSavePRTCompBufferToFile WINELIB_NAME_AW(D3DXSavePRTCompBufferToFile)\nUINT    WINAPI D3DXGetDeclLength(const D3DVERTEXELEMENT9 *decl);\nUINT    WINAPI D3DXGetDeclVertexSize(const D3DVERTEXELEMENT9 *decl, DWORD stream_idx);\nUINT    WINAPI D3DXGetFVFVertexSize(DWORD);\nBOOL WINAPI D3DXBoxBoundProbe(const D3DXVECTOR3 *vmin, const D3DXVECTOR3 *vmax,\n        const D3DXVECTOR3 *ray_pos, const D3DXVECTOR3 *ray_dir);\nBOOL WINAPI D3DXSphereBoundProbe(const D3DXVECTOR3 *center, FLOAT radius,\n        const D3DXVECTOR3 *ray_pos, const D3DXVECTOR3 *ray_dir);\nHRESULT WINAPI D3DXCleanMesh(D3DXCLEANTYPE clean_type, ID3DXMesh *mesh_in, const DWORD *adjacency_in,\n        ID3DXMesh **mesh_out, DWORD *adjacency_out, ID3DXBuffer **errors);\nHRESULT WINAPI D3DXConcatenateMeshes(struct ID3DXMesh **meshes, UINT mesh_count, DWORD flags,\n        const D3DXMATRIX *geometry_matrices, const D3DXMATRIX *texture_matrices,\n        const D3DVERTEXELEMENT9 *declaration, struct IDirect3DDevice9 *device, struct ID3DXMesh **mesh);\nHRESULT WINAPI D3DXComputeBoundingBox(const D3DXVECTOR3 *first_pos, DWORD num_vertices,\n        DWORD stride, D3DXVECTOR3 *vmin, D3DXVECTOR3 *vmax);\nHRESULT WINAPI D3DXComputeBoundingSphere(const D3DXVECTOR3 *first_pos, DWORD num_vertices,\n        DWORD stride, D3DXVECTOR3 *center, FLOAT *radius);\nHRESULT WINAPI D3DXComputeIMTFromPerTexelSignal(ID3DXMesh *mesh, DWORD texture_idx, float *texel_signal,\n        UINT width, UINT height, UINT signal_dimension, UINT component_count, DWORD flags,\n        LPD3DXUVATLASCB cb, void *ctx, ID3DXBuffer **buffer);\nHRESULT WINAPI D3DXComputeIMTFromPerVertexSignal(ID3DXMesh *mesh, const float *vertex_signal,\n        UINT signal_dimension, UINT signal_stride, DWORD flags,\n        LPD3DXUVATLASCB cb, void *ctx, ID3DXBuffer **buffer);\nHRESULT WINAPI D3DXComputeIMTFromSignal(ID3DXMesh *mesh, DWORD texture_idx, UINT signal_dimension,\n        float max_uv_distance, DWORD flags, LPD3DXIMTSIGNALCALLBACK signal_cb, void *signal_ctx,\n        LPD3DXUVATLASCB status_cb, void *status_ctx, ID3DXBuffer **buffer);\nHRESULT WINAPI D3DXComputeIMTFromTexture(struct ID3DXMesh *mesh, struct IDirect3DTexture9 *texture,\n        DWORD texture_idx, DWORD options, LPD3DXUVATLASCB cb, void *ctx, struct ID3DXBuffer **out);\nHRESULT WINAPI D3DXComputeNormals(ID3DXBaseMesh *mesh, const DWORD *adjacency);\nHRESULT WINAPI D3DXComputeTangentFrameEx(ID3DXMesh *mesh_in, DWORD texture_in_semantic, DWORD texture_in_idx,\n        DWORD u_partial_out_semantic, DWORD u_partial_out_idx, DWORD v_partial_out_semantic,\n        DWORD v_partial_out_idx, DWORD normal_out_semantic, DWORD normal_out_idx, DWORD flags,\n        const DWORD *adjacency, float partial_edge_threshold, float singular_point_threshold,\n        float normal_edge_threshold, ID3DXMesh **mesh_out, ID3DXBuffer **buffer);\nHRESULT WINAPI D3DXComputeTangent(ID3DXMesh *mesh, DWORD stage, DWORD tangent_idx,\n        DWORD binorm_idx, DWORD wrap, const DWORD *adjacency);\nHRESULT WINAPI D3DXConvertMeshSubsetToSingleStrip(struct ID3DXBaseMesh *mesh_in, DWORD attribute_id,\n        DWORD ib_flags, struct IDirect3DIndexBuffer9 **index_buffer, DWORD *index_count);\nHRESULT WINAPI D3DXConvertMeshSubsetToStrips(struct ID3DXBaseMesh *mesh_in, DWORD attribute_id,\n        DWORD ib_flags, struct IDirect3DIndexBuffer9 **index_buffer, DWORD *index_count,\n        struct ID3DXBuffer **strip_lengths, DWORD *strip_count);\nHRESULT WINAPI D3DXDeclaratorFromFVF(DWORD, D3DVERTEXELEMENT9[MAX_FVF_DECL_SIZE]);\nHRESULT WINAPI D3DXFVFFromDeclarator(const D3DVERTEXELEMENT9 *decl, DWORD *fvf);\nHRESULT WINAPI D3DXGenerateOutputDecl(D3DVERTEXELEMENT9 *decl_out, const D3DVERTEXELEMENT9 *decl_in);\nHRESULT WINAPI D3DXGeneratePMesh(ID3DXMesh *mesh, const DWORD *adjacency,\n        const D3DXATTRIBUTEWEIGHTS *attribute_weights, const float *vertex_weights,\n        DWORD min_value, DWORD flags, ID3DXPMesh **pmesh);\nHRESULT WINAPI D3DXIntersect(ID3DXBaseMesh *mesh, const D3DXVECTOR3 *ray_position, const D3DXVECTOR3 *ray_direction,\n        BOOL *hit, DWORD *face_idx, float *u, float *v, float *distance, ID3DXBuffer **hits, DWORD *hit_count);\nHRESULT WINAPI D3DXIntersectSubset(ID3DXBaseMesh *mesh, DWORD attribute_id, const D3DXVECTOR3 *ray_position,\n        const D3DXVECTOR3 *ray_direction, BOOL *hit, DWORD *face_idx, float *u, float *v, float *distance,\n        ID3DXBuffer **hits, DWORD *hit_count);\nBOOL WINAPI D3DXIntersectTri(const D3DXVECTOR3 *vtx0, const D3DXVECTOR3 *vtx1,\n        const D3DXVECTOR3 *vtx2, const D3DXVECTOR3 *ray_pos, const D3DXVECTOR3 *ray_dir, FLOAT *u,\n        FLOAT *v, FLOAT *dist);\nHRESULT WINAPI D3DXOptimizeFaces(const void *indices, UINT face_count,\n        UINT vertex_count, BOOL idx_32bit, DWORD *face_remap);\nHRESULT WINAPI D3DXOptimizeVertices(const void *indices, UINT face_count,\n        UINT vertex_count, BOOL idx_32bit, DWORD *vertex_remap);\nHRESULT WINAPI D3DXRectPatchSize(const FLOAT *segment_count, DWORD *num_triangles,\n        DWORD *num_vertices);\nHRESULT WINAPI D3DXSHPRTCompSuperCluster(UINT *cluster_ids, ID3DXMesh *scene, UINT max_cluster_count,\n        UINT cluster_count, UINT *scluster_ids, UINT *scluster_count);\nHRESULT WINAPI D3DXSHPRTCompSplitMeshSC(UINT *cluster_idx, UINT vertex_count, UINT cluster_count, UINT *scluster_ids,\n        UINT scluster_count, void *index_buffer_in, BOOL ib_in_32bit, UINT face_count, ID3DXBuffer **index_buffer_out,\n        UINT *index_buffer_size, BOOL ib_out_32bit, ID3DXBuffer **face_remap, ID3DXBuffer **vertex_data,\n        UINT *vertex_data_length, UINT *sc_cluster_list, D3DXSHPRTSPLITMESHCLUSTERDATA *sc_data);\nHRESULT WINAPI D3DXSimplifyMesh(ID3DXMesh *mesh_in, const DWORD *adjacency,\n        const D3DXATTRIBUTEWEIGHTS *attribute_weights, const float *vertex_weights, DWORD min_value,\n        DWORD flags, ID3DXMesh **mesh_out);\nHRESULT WINAPI D3DXSplitMesh(ID3DXMesh *mesh_in, const DWORD *adjacency_in, const DWORD max_size,\n        const DWORD flags, DWORD *mesh_out_count, ID3DXBuffer **mesh_out, ID3DXBuffer **adjacency_out,\n        ID3DXBuffer **face_remap_out, ID3DXBuffer **vertex_remap_out);\nHRESULT WINAPI D3DXTessellateNPatches(ID3DXMesh *mesh_in, const DWORD *adjacency_in, float segment_count,\n        BOOL quad_interp, ID3DXMesh **mesh_out, ID3DXBuffer **adjacency_out);\nHRESULT WINAPI D3DXTessellateRectPatch(struct IDirect3DVertexBuffer9 *buffer, const float *segment_count,\n        const D3DVERTEXELEMENT9 *declaration, const D3DRECTPATCH_INFO *patch_info, struct ID3DXMesh *mesh);\nHRESULT WINAPI D3DXTessellateTriPatch(struct IDirect3DVertexBuffer9 *buffer, const float *segment_count,\n        const D3DVERTEXELEMENT9 *declaration, const D3DTRIPATCH_INFO *patch_info, struct ID3DXMesh *mesh);\nHRESULT WINAPI D3DXTriPatchSize(const FLOAT *segment_count, DWORD *num_triangles,\n        DWORD *num_vertices);\nHRESULT WINAPI D3DXUVAtlasCreate(ID3DXMesh *mesh_in, UINT max_chart_count, float max_stretch_in,\n        UINT width, UINT height, float gutter, DWORD texture_idx, const DWORD *adjacency, const DWORD *false_edges,\n        const float *imt_array, LPD3DXUVATLASCB cb, float cb_freq, void *ctx, DWORD flags, ID3DXMesh **mesh_out,\n        ID3DXBuffer **face_partitioning_out, ID3DXBuffer **vertex_remap_out, float *max_stretch_out, UINT *chart_count);\nHRESULT WINAPI D3DXUVAtlasPack(ID3DXMesh *mesh, UINT width, UINT height, float gutter, DWORD texture_idx,\n        const DWORD *partition_result_adjacency, LPD3DXUVATLASCB cb, float cb_freq, void *ctx, DWORD flags,\n        ID3DXBuffer *face_partitioning);\nHRESULT WINAPI D3DXUVAtlasPartition(ID3DXMesh *mesh_in, UINT max_chart_count, float max_stretch_in,\n        DWORD texture_idx, const DWORD *adjacency, const DWORD *false_edges, const float *imt_array,\n        LPD3DXUVATLASCB cb, float cb_freq, void *ctx, DWORD flags, ID3DXMesh **mesh_out,\n        ID3DXBuffer **face_partitioning_out, ID3DXBuffer **vertex_remap_out, ID3DXBuffer **adjacency_out,\n        float *max_stretch_out, UINT *chart_count);\nHRESULT WINAPI D3DXValidMesh(ID3DXMesh *mesh, const DWORD *adjacency, ID3DXBuffer **errors);\nHRESULT WINAPI D3DXValidPatchMesh(ID3DXPatchMesh *mesh, DWORD *degenerate_vertex_count,\n        DWORD *degenerate_patch_count, ID3DXBuffer **errors);\nHRESULT WINAPI D3DXWeldVertices(ID3DXMesh *mesh, DWORD flags, const D3DXWELDEPSILONS *epsilons,\n        const DWORD *adjacency_in, DWORD *adjacency_out, DWORD *face_remap_out, ID3DXBuffer **vertex_remap_out);\n\n#ifdef __cplusplus\n}\n#endif\n\nDEFINE_GUID(DXFILEOBJ_XSkinMeshHeader,          0x3cf169ce, 0xff7c, 0x44ab, 0x93, 0xc0, 0xf7, 0x8f, 0x62, 0xd1, 0x72, 0xe2);\nDEFINE_GUID(DXFILEOBJ_VertexDuplicationIndices, 0xb8d65549, 0xd7c9, 0x4995, 0x89, 0xcf, 0x53, 0xa9, 0xa8, 0xb0, 0x31, 0xe3);\nDEFINE_GUID(DXFILEOBJ_FaceAdjacency,            0xa64c844a, 0xe282, 0x4756, 0x8b, 0x80, 0x25, 0x0c, 0xde, 0x04, 0x39, 0x8c);\nDEFINE_GUID(DXFILEOBJ_SkinWeights,              0x6f0d123b, 0xbad2, 0x4167, 0xa0, 0xd0, 0x80, 0x22, 0x4f, 0x25, 0xfa, 0xbb);\nDEFINE_GUID(DXFILEOBJ_Patch,                    0xa3eb5d44, 0xfc22, 0x429d, 0x9a, 0xfb, 0x32, 0x21, 0xcb, 0x97, 0x19, 0xa6);\nDEFINE_GUID(DXFILEOBJ_PatchMesh,                0xd02c95cc, 0xedba, 0x4305, 0x9b, 0x5d, 0x18, 0x20, 0xd7, 0x70, 0x4d, 0xbf);\nDEFINE_GUID(DXFILEOBJ_PatchMesh9,               0xb9ec94e1, 0xb9a6, 0x4251, 0xba, 0x18, 0x94, 0x89, 0x3f, 0x02, 0xc0, 0xea);\nDEFINE_GUID(DXFILEOBJ_PMInfo,                   0xb6c3e656, 0xec8b, 0x4b92, 0x9b, 0x62, 0x68, 0x16, 0x59, 0x52, 0x29, 0x47);\nDEFINE_GUID(DXFILEOBJ_PMAttributeRange,         0x917e0427, 0xc61e, 0x4a14, 0x9c, 0x64, 0xaf, 0xe6, 0x5f, 0x9e, 0x98, 0x44);\nDEFINE_GUID(DXFILEOBJ_PMVSplitRecord,           0x574ccc14, 0xf0b3, 0x4333, 0x82, 0x2d, 0x93, 0xe8, 0xa8, 0xa0, 0x8e, 0x4c);\nDEFINE_GUID(DXFILEOBJ_FVFData,                  0xb6e70a0e, 0x8ef9, 0x4e83, 0x94, 0xad, 0xec, 0xc8, 0xb0, 0xc0, 0x48, 0x97);\nDEFINE_GUID(DXFILEOBJ_VertexElement,            0xf752461c, 0x1e23, 0x48f6, 0xb9, 0xf8, 0x83, 0x50, 0x85, 0x0f, 0x33, 0x6f);\nDEFINE_GUID(DXFILEOBJ_DeclData,                 0xbf22e553, 0x292c, 0x4781, 0x9f, 0xea, 0x62, 0xbd, 0x55, 0x4b, 0xdd, 0x93);\nDEFINE_GUID(DXFILEOBJ_EffectFloats,             0xf1cfe2b3, 0x0de3, 0x4e28, 0xaf, 0xa1, 0x15, 0x5a, 0x75, 0x0a, 0x28, 0x2d);\nDEFINE_GUID(DXFILEOBJ_EffectString,             0xd55b097e, 0xbdb6, 0x4c52, 0xb0, 0x3d, 0x60, 0x51, 0xc8, 0x9d, 0x0e, 0x42);\nDEFINE_GUID(DXFILEOBJ_EffectDWord,              0x622c0ed0, 0x956e, 0x4da9, 0x90, 0x8a, 0x2a, 0xf9, 0x4f, 0x3c, 0xe7, 0x16);\nDEFINE_GUID(DXFILEOBJ_EffectParamFloats,        0x3014b9a0, 0x62f5, 0x478c, 0x9b, 0x86, 0xe4, 0xac, 0x9f, 0x4e, 0x41, 0x8b);\nDEFINE_GUID(DXFILEOBJ_EffectParamString,        0x1dbc4c88, 0x94c1, 0x46ee, 0x90, 0x76, 0x2c, 0x28, 0x81, 0x8c, 0x94, 0x81);\nDEFINE_GUID(DXFILEOBJ_EffectParamDWord,         0xe13963bc, 0xae51, 0x4c5d, 0xb0, 0x0f, 0xcf, 0xa3, 0xa9, 0xd9, 0x7c, 0xe5);\nDEFINE_GUID(DXFILEOBJ_EffectInstance,           0xe331f7e4, 0x0559, 0x4cc2, 0x8e, 0x99, 0x1c, 0xec, 0x16, 0x57, 0x92, 0x8f);\nDEFINE_GUID(DXFILEOBJ_AnimTicksPerSecond,       0x9e415a43, 0x7ba6, 0x4a73, 0x87, 0x43, 0xb7, 0x3d, 0x47, 0xe8, 0x84, 0x76);\nDEFINE_GUID(DXFILEOBJ_CompressedAnimationSet,   0x7f9b00b3, 0xf125, 0x4890, 0x87, 0x6e, 0x1c, 0x42, 0xbf, 0x69, 0x7c, 0x4d);\n\n#define XSKINEXP_TEMPLATES \\\n        \"xof 0303txt 0032\\\n        template XSkinMeshHeader \\\n        { \\\n            <3CF169CE-FF7C-44ab-93C0-F78F62D172E2> \\\n            WORD nMaxSkinWeightsPerVertex; \\\n            WORD nMaxSkinWeightsPerFace; \\\n            WORD nBones; \\\n        } \\\n        template VertexDuplicationIndices \\\n        { \\\n            <B8D65549-D7C9-4995-89CF-53A9A8B031E3> \\\n            DWORD nIndices; \\\n            DWORD nOriginalVertices; \\\n            array DWORD indices[nIndices]; \\\n        } \\\n        template FaceAdjacency \\\n        { \\\n            <A64C844A-E282-4756-8B80-250CDE04398C> \\\n            DWORD nIndices; \\\n            array DWORD indices[nIndices]; \\\n        } \\\n        template SkinWeights \\\n        { \\\n            <6F0D123B-BAD2-4167-A0D0-80224F25FABB> \\\n            STRING transformNodeName; \\\n            DWORD nWeights; \\\n            array DWORD vertexIndices[nWeights]; \\\n            array float weights[nWeights]; \\\n            Matrix4x4 matrixOffset; \\\n        } \\\n        template Patch \\\n        { \\\n            <A3EB5D44-FC22-429D-9AFB-3221CB9719A6> \\\n            DWORD nControlIndices; \\\n            array DWORD controlIndices[nControlIndices]; \\\n        } \\\n        template PatchMesh \\\n        { \\\n            <D02C95CC-EDBA-4305-9B5D-1820D7704BBF> \\\n            DWORD nVertices; \\\n            array Vector vertices[nVertices]; \\\n            DWORD nPatches; \\\n            array Patch patches[nPatches]; \\\n            [ ... ] \\\n        } \\\n        template PatchMesh9 \\\n        { \\\n            <B9EC94E1-B9A6-4251-BA18-94893F02C0EA> \\\n            DWORD Type; \\\n            DWORD Degree; \\\n            DWORD Basis; \\\n            DWORD nVertices; \\\n            array Vector vertices[nVertices]; \\\n            DWORD nPatches; \\\n            array Patch patches[nPatches]; \\\n            [ ... ] \\\n        } template EffectFloats \\\n        { \\\n            <F1CFE2B3-0DE3-4e28-AFA1-155A750A282D> \\\n            DWORD nFloats; \\\n            array float Floats[nFloats]; \\\n        } \\\n        template EffectString \\\n        { \\\n            <D55B097E-BDB6-4c52-B03D-6051C89D0E42> \\\n            STRING Value; \\\n        } \\\n        template EffectDWord \\\n        { \\\n            <622C0ED0-956E-4da9-908A-2AF94F3CE716> \\\n            DWORD Value; \\\n        } template EffectParamFloats \\\n        { \\\n            <3014B9A0-62F5-478c-9B86-E4AC9F4E418B> \\\n            STRING ParamName; \\\n            DWORD nFloats; \\\n            array float Floats[nFloats]; \\\n        } template EffectParamString \\\n        { \\\n            <1DBC4C88-94C1-46ee-9076-2C28818C9481> \\\n            STRING ParamName; \\\n            STRING Value; \\\n        } \\\n        template EffectParamDWord \\\n        { \\\n            <E13963BC-AE51-4c5d-B00F-CFA3A9D97CE5> \\\n            STRING ParamName; \\\n            DWORD Value; \\\n        } \\\n        template EffectInstance \\\n        { \\\n            <E331F7E4-0559-4cc2-8E99-1CEC1657928F> \\\n            STRING EffectFilename; \\\n            [ ... ] \\\n        } template AnimTicksPerSecond \\\n        { \\\n            <9E415A43-7BA6-4a73-8743-B73D47E88476> \\\n            DWORD AnimTicksPerSecond; \\\n        } \\\n        template CompressedAnimationSet \\\n        { \\\n            <7F9B00B3-F125-4890-876E-1C42BF697C4D> \\\n            DWORD CompressedBlockSize; \\\n            FLOAT TicksPerSec; \\\n            DWORD PlaybackType; \\\n            DWORD BufferLength; \\\n            array DWORD CompressedData[BufferLength]; \\\n        } \"\n\n#define XEXTENSIONS_TEMPLATES \\\n        \"xof 0303txt 0032\\\n        template FVFData \\\n        { \\\n            <B6E70A0E-8EF9-4e83-94AD-ECC8B0C04897> \\\n            DWORD dwFVF; \\\n            DWORD nDWords; \\\n            array DWORD data[nDWords]; \\\n        } \\\n        template VertexElement \\\n        { \\\n            <F752461C-1E23-48f6-B9F8-8350850F336F> \\\n            DWORD Type; \\\n            DWORD Method; \\\n            DWORD Usage; \\\n            DWORD UsageIndex; \\\n        } \\\n        template DeclData \\\n        { \\\n            <BF22E553-292C-4781-9FEA-62BD554BDD93> \\\n            DWORD nElements; \\\n            array VertexElement Elements[nElements]; \\\n            DWORD nDWords; \\\n            array DWORD data[nDWords]; \\\n        } \\\n        template PMAttributeRange \\\n        { \\\n            <917E0427-C61E-4a14-9C64-AFE65F9E9844> \\\n            DWORD iFaceOffset; \\\n            DWORD nFacesMin; \\\n            DWORD nFacesMax; \\\n            DWORD iVertexOffset; \\\n            DWORD nVerticesMin; \\\n            DWORD nVerticesMax; \\\n        } \\\n        template PMVSplitRecord \\\n        { \\\n            <574CCC14-F0B3-4333-822D-93E8A8A08E4C> \\\n            DWORD iFaceCLW; \\\n            DWORD iVlrOffset; \\\n            DWORD iCode; \\\n        } \\\n        template PMInfo \\\n        { \\\n            <B6C3E656-EC8B-4b92-9B62-681659522947> \\\n            DWORD nAttributes; \\\n            array PMAttributeRange attributeRanges[nAttributes]; \\\n            DWORD nMaxValence; \\\n            DWORD nMinLogicalVertices; \\\n            DWORD nMaxLogicalVertices; \\\n            DWORD nVSplits; \\\n            array PMVSplitRecord splitRecords[nVSplits]; \\\n            DWORD nAttributeMispredicts; \\\n            array DWORD attributeMispredicts[nAttributeMispredicts]; \\\n        } \"\n\n#endif /* __WINE_D3DX9MESH_H */\n"
  },
  {
    "path": "wine/windows/d3dx9shader.h",
    "content": "/*\n * Copyright 2008 Luis Busquets\n * Copyright 2014 Kai Tietz\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"d3dx9.h\"\n\n#ifndef __D3DX9SHADER_H__\n#define __D3DX9SHADER_H__\n\n#define D3DXSHADER_DEBUG                          0x1\n#define D3DXSHADER_SKIPVALIDATION                 0x2\n#define D3DXSHADER_SKIPOPTIMIZATION               0x4\n#define D3DXSHADER_PACKMATRIX_ROWMAJOR            0x8\n#define D3DXSHADER_PACKMATRIX_COLUMNMAJOR         0x10\n#define D3DXSHADER_PARTIALPRECISION               0x20\n#define D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT        0x40\n#define D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT        0x80\n#define D3DXSHADER_NO_PRESHADER                   0x100\n#define D3DXSHADER_AVOID_FLOW_CONTROL             0x200\n#define D3DXSHADER_PREFER_FLOW_CONTROL            0x400\n#define D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY 0x1000\n#define D3DXSHADER_IEEE_STRICTNESS                0x2000\n\n#define D3DXSHADER_OPTIMIZATION_LEVEL0            0x4000\n#define D3DXSHADER_OPTIMIZATION_LEVEL1            0x0\n#define D3DXSHADER_OPTIMIZATION_LEVEL2            0xC000\n#define D3DXSHADER_OPTIMIZATION_LEVEL3            0x8000\n\n#define D3DXSHADER_USE_LEGACY_D3DX9_31_DLL        0x10000\n\n#define D3DXCONSTTABLE_LARGEADDRESSAWARE          0x20000\n\ntypedef const char *D3DXHANDLE;\ntypedef D3DXHANDLE *LPD3DXHANDLE;\n\ntypedef enum _D3DXREGISTER_SET\n{\n    D3DXRS_BOOL,\n    D3DXRS_INT4,\n    D3DXRS_FLOAT4,\n    D3DXRS_SAMPLER,\n    D3DXRS_FORCE_DWORD = 0x7fffffff\n} D3DXREGISTER_SET, *LPD3DXREGISTER_SET;\n\ntypedef enum D3DXPARAMETER_CLASS\n{\n    D3DXPC_SCALAR,\n    D3DXPC_VECTOR,\n    D3DXPC_MATRIX_ROWS,\n    D3DXPC_MATRIX_COLUMNS,\n    D3DXPC_OBJECT,\n    D3DXPC_STRUCT,\n    D3DXPC_FORCE_DWORD = 0x7fffffff,\n} D3DXPARAMETER_CLASS, *LPD3DXPARAMETER_CLASS;\n\ntypedef enum D3DXPARAMETER_TYPE\n{\n    D3DXPT_VOID,\n    D3DXPT_BOOL,\n    D3DXPT_INT,\n    D3DXPT_FLOAT,\n    D3DXPT_STRING,\n    D3DXPT_TEXTURE,\n    D3DXPT_TEXTURE1D,\n    D3DXPT_TEXTURE2D,\n    D3DXPT_TEXTURE3D,\n    D3DXPT_TEXTURECUBE,\n    D3DXPT_SAMPLER,\n    D3DXPT_SAMPLER1D,\n    D3DXPT_SAMPLER2D,\n    D3DXPT_SAMPLER3D,\n    D3DXPT_SAMPLERCUBE,\n    D3DXPT_PIXELSHADER,\n    D3DXPT_VERTEXSHADER,\n    D3DXPT_PIXELFRAGMENT,\n    D3DXPT_VERTEXFRAGMENT,\n    D3DXPT_UNSUPPORTED,\n    D3DXPT_FORCE_DWORD = 0x7fffffff,\n} D3DXPARAMETER_TYPE, *LPD3DXPARAMETER_TYPE;\n\ntypedef struct _D3DXCONSTANTTABLE_DESC\n{\n    const char *Creator;\n    DWORD Version;\n    UINT Constants;\n} D3DXCONSTANTTABLE_DESC, *LPD3DXCONSTANTTABLE_DESC;\n\ntypedef struct _D3DXCONSTANT_DESC\n{\n    const char *Name;\n    D3DXREGISTER_SET RegisterSet;\n    UINT RegisterIndex;\n    UINT RegisterCount;\n    D3DXPARAMETER_CLASS Class;\n    D3DXPARAMETER_TYPE Type;\n    UINT Rows;\n    UINT Columns;\n    UINT Elements;\n    UINT StructMembers;\n    UINT Bytes;\n    const void *DefaultValue;\n} D3DXCONSTANT_DESC, *LPD3DXCONSTANT_DESC;\n\n#if D3DX_SDK_VERSION < 43\nDEFINE_GUID(IID_ID3DXConstantTable, 0x9dca3190, 0x38b9, 0x4fc3, 0x92, 0xe3, 0x39, 0xc6, 0xdd, 0xfb, 0x35, 0x8b);\n#else\nDEFINE_GUID(IID_ID3DXConstantTable, 0xab3c758f, 0x093e, 0x4356, 0xb7, 0x62, 0x4d, 0xb1, 0x8f, 0x1b, 0x3a, 0x01);\n#endif\n\n#undef INTERFACE\n#define INTERFACE ID3DXConstantTable\n\nDECLARE_INTERFACE_(ID3DXConstantTable, ID3DXBuffer)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    /*** ID3DXBuffer methods ***/\n    STDMETHOD_(void *, GetBufferPointer)(THIS) PURE;\n    STDMETHOD_(DWORD, GetBufferSize)(THIS) PURE;\n    /*** ID3DXConstantTable methods ***/\n    STDMETHOD(GetDesc)(THIS_ D3DXCONSTANTTABLE_DESC *pDesc) PURE;\n    STDMETHOD(GetConstantDesc)(THIS_ D3DXHANDLE hConstant, D3DXCONSTANT_DESC *pConstantDesc, UINT *pCount) PURE;\n    STDMETHOD_(UINT, GetSamplerIndex)(THIS_ D3DXHANDLE hConstant) PURE;\n    STDMETHOD_(D3DXHANDLE, GetConstant)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE;\n    STDMETHOD_(D3DXHANDLE, GetConstantByName)(THIS_ D3DXHANDLE constant, const char *name) PURE;\n    STDMETHOD_(D3DXHANDLE, GetConstantElement)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE;\n    STDMETHOD(SetDefaults)(THIS_ struct IDirect3DDevice9 *device) PURE;\n    STDMETHOD(SetValue)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,\n            const void *data, UINT data_size) PURE;\n    STDMETHOD(SetBool)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, BOOL value) PURE;\n    STDMETHOD(SetBoolArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,\n            const BOOL *values, UINT value_count) PURE;\n    STDMETHOD(SetInt)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, INT value) PURE;\n    STDMETHOD(SetIntArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,\n            const INT *values, UINT value_count) PURE;\n    STDMETHOD(SetFloat)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, float value) PURE;\n    STDMETHOD(SetFloatArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,\n            const float *values, UINT value_count) PURE;\n    STDMETHOD(SetVector)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXVECTOR4 *value) PURE;\n    STDMETHOD(SetVectorArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,\n            const D3DXVECTOR4 *values, UINT value_count) PURE;\n    STDMETHOD(SetMatrix)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXMATRIX *value) PURE;\n    STDMETHOD(SetMatrixArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,\n            const D3DXMATRIX *values, UINT value_count) PURE;\n    STDMETHOD(SetMatrixPointerArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,\n            const D3DXMATRIX **values, UINT value_count) PURE;\n    STDMETHOD(SetMatrixTranspose)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,\n            const D3DXMATRIX *value) PURE;\n    STDMETHOD(SetMatrixTransposeArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,\n            const D3DXMATRIX *values, UINT value_count) PURE;\n    STDMETHOD(SetMatrixTransposePointerArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,\n            const D3DXMATRIX **values, UINT value_count) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define ID3DXConstantTable_QueryInterface(p,a,b)                      (p)->lpVtbl->QueryInterface(p,a,b)\n#define ID3DXConstantTable_AddRef(p)                                  (p)->lpVtbl->AddRef(p)\n#define ID3DXConstantTable_Release(p)                                 (p)->lpVtbl->Release(p)\n/*** ID3DXBuffer methods ***/\n#define ID3DXConstantTable_GetBufferPointer(p)                        (p)->lpVtbl->GetBufferPointer(p)\n#define ID3DXConstantTable_GetBufferSize(p)                           (p)->lpVtbl->GetBufferSize(p)\n/*** ID3DXConstantTable methods ***/\n#define ID3DXConstantTable_GetDesc(p,a)                               (p)->lpVtbl->GetDesc(p,a)\n#define ID3DXConstantTable_GetConstantDesc(p,a,b,c)                   (p)->lpVtbl->GetConstantDesc(p,a,b,c)\n#define ID3DXConstantTable_GetSamplerIndex(p,a)                       (p)->lpVtbl->GetSamplerIndex(p,a)\n#define ID3DXConstantTable_GetConstant(p,a,b)                         (p)->lpVtbl->GetConstant(p,a,b)\n#define ID3DXConstantTable_GetConstantByName(p,a,b)                   (p)->lpVtbl->GetConstantByName(p,a,b)\n#define ID3DXConstantTable_GetConstantElement(p,a,b)                  (p)->lpVtbl->GetConstantElement(p,a,b)\n#define ID3DXConstantTable_SetDefaults(p,a)                           (p)->lpVtbl->SetDefaults(p,a)\n#define ID3DXConstantTable_SetValue(p,a,b,c,d)                        (p)->lpVtbl->SetValue(p,a,b,c,d)\n#define ID3DXConstantTable_SetBool(p,a,b,c)                           (p)->lpVtbl->SetBool(p,a,b,c)\n#define ID3DXConstantTable_SetBoolArray(p,a,b,c,d)                    (p)->lpVtbl->SetBoolArray(p,a,b,c,d)\n#define ID3DXConstantTable_SetInt(p,a,b,c)                            (p)->lpVtbl->SetInt(p,a,b,c)\n#define ID3DXConstantTable_SetIntArray(p,a,b,c,d)                     (p)->lpVtbl->SetIntArray(p,a,b,c,d)\n#define ID3DXConstantTable_SetFloat(p,a,b,c)                          (p)->lpVtbl->SetFloat(p,a,b,c)\n#define ID3DXConstantTable_SetFloatArray(p,a,b,c,d)                   (p)->lpVtbl->SetFloatArray(p,a,b,c,d)\n#define ID3DXConstantTable_SetVector(p,a,b,c)                         (p)->lpVtbl->SetVector(p,a,b,c)\n#define ID3DXConstantTable_SetVectorArray(p,a,b,c,d)                  (p)->lpVtbl->SetVectorArray(p,a,b,c,d)\n#define ID3DXConstantTable_SetMatrix(p,a,b,c)                         (p)->lpVtbl->SetMatrix(p,a,b,c)\n#define ID3DXConstantTable_SetMatrixArray(p,a,b,c,d)                  (p)->lpVtbl->SetMatrixArray(p,a,b,c,d)\n#define ID3DXConstantTable_SetMatrixPointerArray(p,a,b,c,d)           (p)->lpVtbl->SetMatrixPointerArray(p,a,b,c,d)\n#define ID3DXConstantTable_SetMatrixTranspose(p,a,b,c)                (p)->lpVtbl->SetMatrixTranspose(p,a,b,c)\n#define ID3DXConstantTable_SetMatrixTransposeArray(p,a,b,c,d)         (p)->lpVtbl->SetMatrixTransposeArray(p,a,b,c,d)\n#define ID3DXConstantTable_SetMatrixTransposePointerArray(p,a,b,c,d)  (p)->lpVtbl->SetMatrixTransposePointerArray(p,a,b,c,d)\n#else\n/*** IUnknown methods ***/\n#define ID3DXConstantTable_QueryInterface(p,a,b)                      (p)->QueryInterface(a,b)\n#define ID3DXConstantTable_AddRef(p)                                  (p)->AddRef()\n#define ID3DXConstantTable_Release(p)                                 (p)->Release()\n/*** ID3DXBuffer methods ***/\n#define ID3DXConstantTable_GetBufferPointer(p)                        (p)->GetBufferPointer()\n#define ID3DXConstantTable_GetBufferSize(p)                           (p)->GetBufferSize()\n/*** ID3DXConstantTable methods ***/\n#define ID3DXConstantTable_GetDesc(p,a)                               (p)->GetDesc(a)\n#define ID3DXConstantTable_GetConstantDesc(p,a,b,c)                   (p)->GetConstantDesc(a,b,c)\n#define ID3DXConstantTable_GetSamplerIndex(p,a)                       (p)->GetConstantDesc(a)\n#define ID3DXConstantTable_GetConstant(p,a,b)                         (p)->GetConstant(a,b)\n#define ID3DXConstantTable_GetConstantByName(p,a,b)                   (p)->GetConstantByName(a,b)\n#define ID3DXConstantTable_GetConstantElement(p,a,b)                  (p)->GetConstantElement(a,b)\n#define ID3DXConstantTable_SetDefaults(p,a)                           (p)->SetDefaults(a)\n#define ID3DXConstantTable_SetValue(p,a,b,c,d)                        (p)->SetValue(a,b,c,d)\n#define ID3DXConstantTable_SetBool(p,a,b,c)                           (p)->SetBool(a,b,c)\n#define ID3DXConstantTable_SetBoolArray(p,a,b,c,d)                    (p)->SetBoolArray(a,b,c,d)\n#define ID3DXConstantTable_SetInt(p,a,b,c)                            (p)->SetInt(a,b,c)\n#define ID3DXConstantTable_SetIntArray(p,a,b,c,d)                     (p)->SetIntArray(a,b,c,d)\n#define ID3DXConstantTable_SetFloat(p,a,b,c)                          (p)->SetFloat(a,b,c)\n#define ID3DXConstantTable_SetFloatArray(p,a,b,c,d)                   (p)->SetFloatArray(a,b,c,d)\n#define ID3DXConstantTable_SetVector(p,a,b,c)                         (p)->SetVector(a,b,c)\n#define ID3DXConstantTable_SetVectorArray(p,a,b,c,d)                  (p)->SetVectorArray(a,b,c,d)\n#define ID3DXConstantTable_SetMatrix(p,a,b,c)                         (p)->SetMatrix(a,b,c)\n#define ID3DXConstantTable_SetMatrixArray(p,a,b,c,d)                  (p)->SetMatrixArray(a,b,c,d)\n#define ID3DXConstantTable_SetMatrixPointerArray(p,a,b,c,d)           (p)->SetMatrixPointerArray(a,b,c,d)\n#define ID3DXConstantTable_SetMatrixTranspose(p,a,b,c)                (p)->SetMatrixTranspose(a,b,c)\n#define ID3DXConstantTable_SetMatrixTransposeArray(p,a,b,c,d)         (p)->SetMatrixTransposeArray(a,b,c,d)\n#define ID3DXConstantTable_SetMatrixTransposePointerArray(p,a,b,c,d)  (p)->SetMatrixTransposePointerArray(a,b,c,d)\n#endif\n\ntypedef struct ID3DXConstantTable *LPD3DXCONSTANTTABLE;\n\ntypedef interface ID3DXTextureShader *LPD3DXTEXTURESHADER;\n\nDEFINE_GUID(IID_ID3DXTextureShader, 0x3e3d67f8, 0xaa7a, 0x405d, 0xa8, 0x57, 0xba, 0x1, 0xd4, 0x75, 0x84, 0x26);\n\n#define INTERFACE ID3DXTextureShader\nDECLARE_INTERFACE_(ID3DXTextureShader, IUnknown)\n{\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    STDMETHOD(GetFunction)(THIS_ struct ID3DXBuffer **ppFunction) PURE;\n    STDMETHOD(GetConstantBuffer)(THIS_ struct ID3DXBuffer **ppConstantBuffer) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3DXCONSTANTTABLE_DESC *pDesc) PURE;\n    STDMETHOD(GetConstantDesc)(THIS_ D3DXHANDLE hConstant, D3DXCONSTANT_DESC *pConstantDesc, UINT *pCount) PURE;\n    STDMETHOD_(D3DXHANDLE, GetConstant)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE;\n    STDMETHOD_(D3DXHANDLE, GetConstantByName)(THIS_ D3DXHANDLE hConstant, const char *pName) PURE;\n    STDMETHOD_(D3DXHANDLE, GetConstantElement)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE;\n    STDMETHOD(SetDefaults)(THIS) PURE;\n    STDMETHOD(SetValue)(THIS_ D3DXHANDLE hConstant, const void *pData, UINT Bytes) PURE;\n    STDMETHOD(SetBool)(THIS_ D3DXHANDLE hConstant, BOOL b) PURE;\n    STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE hConstant, const BOOL *pb, UINT Count) PURE;\n    STDMETHOD(SetInt)(THIS_ D3DXHANDLE hConstant, INT n) PURE;\n    STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE hConstant, const INT *pn, UINT Count) PURE;\n    STDMETHOD(SetFloat)(THIS_ D3DXHANDLE hConstant, FLOAT f) PURE;\n    STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE hConstant, const FLOAT *pf, UINT Count) PURE;\n    STDMETHOD(SetVector)(THIS_ D3DXHANDLE hConstant, const D3DXVECTOR4 *pVector) PURE;\n    STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE hConstant, const D3DXVECTOR4 *pVector, UINT Count) PURE;\n    STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE hConstant, const D3DXMATRIX *pMatrix) PURE;\n    STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE hConstant, const D3DXMATRIX *pMatrix, UINT Count) PURE;\n    STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE hConstant, const D3DXMATRIX **ppMatrix, UINT Count) PURE;\n    STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE hConstant, const D3DXMATRIX *pMatrix) PURE;\n    STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE hConstant, const D3DXMATRIX *pMatrix, UINT Count) PURE;\n    STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hConstant, const D3DXMATRIX **ppMatrix, UINT Count) PURE;\n};\n#undef INTERFACE\n\ntypedef struct _D3DXMACRO\n{\n    const char *Name;\n    const char *Definition;\n} D3DXMACRO, *LPD3DXMACRO;\n\ntypedef struct _D3DXSEMANTIC {\n    UINT Usage;\n    UINT UsageIndex;\n} D3DXSEMANTIC, *LPD3DXSEMANTIC;\n\ntypedef enum _D3DXINCLUDE_TYPE\n{\n    D3DXINC_LOCAL,\n    D3DXINC_SYSTEM,\n    D3DXINC_FORCE_DWORD = 0x7fffffff,\n} D3DXINCLUDE_TYPE, *LPD3DXINCLUDE_TYPE;\n\n#define INTERFACE ID3DXInclude\n\nDECLARE_INTERFACE(ID3DXInclude)\n{\n    STDMETHOD(Open)(THIS_ D3DXINCLUDE_TYPE include_type, const char *filename,\n            const void *parent_data, const void **data, UINT *bytes) PURE;\n    STDMETHOD(Close)(THIS_ const void *data) PURE;\n};\n#undef INTERFACE\n\n#define ID3DXInclude_Open(p,a,b,c,d,e)  (p)->lpVtbl->Open(p,a,b,c,d,e)\n#define ID3DXInclude_Close(p,a)         (p)->lpVtbl->Close(p,a)\n\ntypedef struct ID3DXInclude *LPD3DXINCLUDE;\n\ntypedef struct _D3DXFRAGMENT_DESC\n{\n    const char *Name;\n    DWORD Target;\n\n} D3DXFRAGMENT_DESC, *LPD3DXFRAGMENT_DESC;\n\n\nDEFINE_GUID(IID_ID3DXFragmentLinker, 0x1a2c0cc2, 0xe5b6, 0x4ebc, 0x9e, 0x8d, 0x39, 0xe, 0x5, 0x78, 0x11, 0xb6);\n\n#define INTERFACE ID3DXFragmentLinker\nDECLARE_INTERFACE_(ID3DXFragmentLinker, IUnknown)\n{\n    STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **ppv) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;\n    STDMETHOD_(UINT, GetNumberOfFragments)(THIS) PURE;\n\n    STDMETHOD_(D3DXHANDLE, GetFragmentHandleByIndex)(THIS_ UINT index) PURE;\n    STDMETHOD_(D3DXHANDLE, GetFragmentHandleByName)(THIS_ const char *name) PURE;\n    STDMETHOD(GetFragmentDesc)(THIS_ D3DXHANDLE name, D3DXFRAGMENT_DESC *frag_desc) PURE;\n\n    STDMETHOD(AddFragments)(THIS_ const DWORD *fragments) PURE;\n\n    STDMETHOD(GetAllFragments)(THIS_ ID3DXBuffer **buffer) PURE;\n    STDMETHOD(GetFragment)(THIS_ D3DXHANDLE name, ID3DXBuffer **buffer) PURE;\n\n    STDMETHOD(LinkShader)(THIS_ const char *profile, DWORD flags, const D3DXHANDLE *fragmenthandles, UINT fragments, ID3DXBuffer **buffer, ID3DXBuffer **errors) PURE;\n    STDMETHOD(LinkVertexShader)(THIS_ const char *profile, DWORD flags, const D3DXHANDLE *fragment_handles, UINT fragments, IDirect3DVertexShader9 **shader, ID3DXBuffer **errors) PURE;\n    STDMETHOD(LinkPixelShader)(THIS_ const char *profile, DWORD flags, const D3DXHANDLE *fragment_handles, UINT fragments, IDirect3DPixelShader9 **shader, ID3DXBuffer **errors) PURE;\n\n    STDMETHOD(ClearCache)(THIS) PURE;\n};\n#undef INTERFACE\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nconst char * WINAPI D3DXGetPixelShaderProfile(struct IDirect3DDevice9 *device);\nUINT WINAPI D3DXGetShaderSize(const DWORD *byte_code);\nDWORD WINAPI D3DXGetShaderVersion(const DWORD *byte_code);\nconst char * WINAPI D3DXGetVertexShaderProfile(struct IDirect3DDevice9 *device);\nHRESULT WINAPI D3DXFindShaderComment(const DWORD *byte_code, DWORD fourcc, const void **data, UINT *size);\nHRESULT WINAPI D3DXGetShaderSamplers(const DWORD *byte_code, const char **samplers, UINT *count);\n\nHRESULT WINAPI D3DXAssembleShaderFromFileA(const char *filename, const D3DXMACRO *defines,\n        ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);\nHRESULT WINAPI D3DXAssembleShaderFromFileW(const WCHAR *filename, const D3DXMACRO *defines,\n        ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);\n#define D3DXAssembleShaderFromFile WINELIB_NAME_AW(D3DXAssembleShaderFromFile)\n\nHRESULT WINAPI D3DXAssembleShaderFromResourceA(HMODULE module, const char *resource, const D3DXMACRO *defines,\n        ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);\nHRESULT WINAPI D3DXAssembleShaderFromResourceW(HMODULE module, const WCHAR *resource, const D3DXMACRO *defines,\n        ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);\n#define D3DXAssembleShaderFromResource WINELIB_NAME_AW(D3DXAssembleShaderFromResource)\n\nHRESULT WINAPI D3DXAssembleShader(const char *data, UINT data_len, const D3DXMACRO *defines,\n        ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);\n\nHRESULT WINAPI D3DXCompileShader(const char *src_data, UINT data_len, const D3DXMACRO *defines,\n        ID3DXInclude *include, const char *function_name, const char *profile, DWORD flags,\n        ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);\n\nHRESULT WINAPI D3DXDisassembleShader(const DWORD *pShader, BOOL EnableColorCode, const char *pComments, struct ID3DXBuffer **ppDisassembly);\n\nHRESULT WINAPI D3DXCompileShaderFromFileA(const char *filename, const D3DXMACRO *defines,\n        ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags,\n        ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);\nHRESULT WINAPI D3DXCompileShaderFromFileW(const WCHAR *filename, const D3DXMACRO *defines,\n        ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags,\n        ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);\n#define D3DXCompileShaderFromFile WINELIB_NAME_AW(D3DXCompileShaderFromFile)\n\nHRESULT WINAPI D3DXCompileShaderFromResourceA(HMODULE module, const char *resource, const D3DXMACRO *defines,\n        ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags,\n        ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);\nHRESULT WINAPI D3DXCompileShaderFromResourceW(HMODULE module, const WCHAR *resource, const D3DXMACRO *defines,\n        ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags,\n        ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);\n#define D3DXCompileShaderFromResource WINELIB_NAME_AW(D3DXCompileShaderFromResource)\n\nHRESULT WINAPI D3DXPreprocessShader(const char *data, UINT data_len, const D3DXMACRO *defines,\n        ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);\n\nHRESULT WINAPI D3DXPreprocessShaderFromFileA(const char *filename, const D3DXMACRO *defines,\n        ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);\nHRESULT WINAPI D3DXPreprocessShaderFromFileW(const WCHAR *filename, const D3DXMACRO *defines,\n        ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);\n#define D3DXPreprocessShaderFromFile WINELIB_NAME_AW(D3DXPreprocessShaderFromFile)\n\nHRESULT WINAPI D3DXPreprocessShaderFromResourceA(HMODULE module, const char *resource, const D3DXMACRO *defines,\n        ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);\nHRESULT WINAPI D3DXPreprocessShaderFromResourceW(HMODULE module, const WCHAR *resource, const D3DXMACRO *defines,\n        ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);\n#define D3DXPreprocessShaderFromResource WINELIB_NAME_AW(D3DXPreprocessShaderFromResource)\n\nHRESULT WINAPI D3DXGetShaderConstantTableEx(const DWORD *byte_code, DWORD flags, ID3DXConstantTable **constant_table);\n\nHRESULT WINAPI D3DXGetShaderConstantTable(const DWORD *byte_code, ID3DXConstantTable **constant_table);\n\nHRESULT WINAPI D3DXGetShaderInputSemantics(const DWORD *pFunction, D3DXSEMANTIC *pSemantics, UINT *pCount);\nHRESULT WINAPI D3DXGetShaderOutputSemantics(const DWORD *pFunction, D3DXSEMANTIC *pSemantics, UINT *pCount);\n\nHRESULT WINAPI D3DXCreateTextureShader(const DWORD *pFunction, ID3DXTextureShader **ppTextureShader);\n\nHRESULT WINAPI D3DXCreateFragmentLinker(IDirect3DDevice9 *device, UINT size, ID3DXFragmentLinker **linker);\nHRESULT WINAPI D3DXCreateFragmentLinkerEx(IDirect3DDevice9 *device, UINT size, DWORD flags, ID3DXFragmentLinker **linker);\n\n#ifdef __cplusplus\n}\n#endif\n\ntypedef struct _D3DXSHADER_CONSTANTTABLE\n{\n    DWORD Size;\n    DWORD Creator;\n    DWORD Version;\n    DWORD Constants;\n    DWORD ConstantInfo;\n    DWORD Flags;\n    DWORD Target;\n} D3DXSHADER_CONSTANTTABLE, *LPD3DXSHADER_CONSTANTTABLE;\n\ntypedef struct _D3DXSHADER_CONSTANTINFO\n{\n    DWORD Name;\n    WORD  RegisterSet;\n    WORD  RegisterIndex;\n    WORD  RegisterCount;\n    WORD  Reserved;\n    DWORD TypeInfo;\n    DWORD DefaultValue;\n} D3DXSHADER_CONSTANTINFO, *LPD3DXSHADER_CONSTANTINFO;\n\ntypedef struct _D3DXSHADER_TYPEINFO\n{\n    WORD  Class;\n    WORD  Type;\n    WORD  Rows;\n    WORD  Columns;\n    WORD  Elements;\n    WORD  StructMembers;\n    DWORD StructMemberInfo;\n} D3DXSHADER_TYPEINFO, *LPD3DXSHADER_TYPEINFO;\n\ntypedef struct _D3DXSHADER_STRUCTMEMBERINFO\n{\n    DWORD Name;\n    DWORD TypeInfo;\n} D3DXSHADER_STRUCTMEMBERINFO, *LPD3DXSHADER_STRUCTMEMBERINFO;\n\n#endif /* __D3DX9SHADER_H__ */\n"
  },
  {
    "path": "wine/windows/d3dx9shape.h",
    "content": "/*\n * Copyright 2010 Christian Costa\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"d3dx9.h\"\n\n#ifndef __D3DX9SHAPE_H__\n#define __D3DX9SHAPE_H__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nHRESULT WINAPI D3DXCreateBox(struct IDirect3DDevice9 *device, float width, float height,\n        float depth, struct ID3DXMesh **mesh, struct ID3DXBuffer **adjacency);\nHRESULT WINAPI D3DXCreateCylinder(struct IDirect3DDevice9 *device, float radius1, float radius2,\n        float length, UINT slices, UINT stacks, struct ID3DXMesh **mesh, struct ID3DXBuffer **adjacency);\nHRESULT WINAPI D3DXCreatePolygon(struct IDirect3DDevice9 *device, float length, UINT sides, struct ID3DXMesh **mesh,\n        ID3DXBuffer **adjacency);\nHRESULT WINAPI D3DXCreateSphere(struct IDirect3DDevice9 *device, float radius, UINT slices,\n        UINT stacks, struct ID3DXMesh **mesh, struct ID3DXBuffer **adjacency);\nHRESULT WINAPI D3DXCreateTeapot(struct IDirect3DDevice9 *device,\n        struct ID3DXMesh **mesh, struct ID3DXBuffer **adjacency);\nHRESULT WINAPI D3DXCreateTextA(struct IDirect3DDevice9 *device, HDC hdc, const char *text, float deviation,\n        float extrusion, struct ID3DXMesh **mesh, struct ID3DXBuffer **adjacency, GLYPHMETRICSFLOAT *glyphmetrics);\nHRESULT WINAPI D3DXCreateTextW(struct IDirect3DDevice9 *device, HDC hdc, const WCHAR *text, float deviation,\n        FLOAT extrusion, struct ID3DXMesh **mesh, struct ID3DXBuffer **adjacency, GLYPHMETRICSFLOAT *glyphmetrics);\nHRESULT WINAPI D3DXCreateTorus(struct IDirect3DDevice9 *device,\n        float innerradius, float outerradius, UINT sides, UINT rings, struct ID3DXMesh **mesh, ID3DXBuffer **adjacency);\n#define D3DXCreateText WINELIB_NAME_AW(D3DXCreateText)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __D3DX9SHAPE_H__ */\n"
  },
  {
    "path": "wine/windows/d3dx9tex.h",
    "content": "/*\n * Copyright (C) 2008 Tony Wasserka\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"d3dx9.h\"\n\n#ifndef __WINE_D3DX9TEX_H\n#define __WINE_D3DX9TEX_H\n\n/**********************************************\n ***************** Definitions ****************\n **********************************************/\n#define D3DX_FILTER_NONE                 0x00000001\n#define D3DX_FILTER_POINT                0x00000002\n#define D3DX_FILTER_LINEAR               0x00000003\n#define D3DX_FILTER_TRIANGLE             0x00000004\n#define D3DX_FILTER_BOX                  0x00000005\n#define D3DX_FILTER_MIRROR_U             0x00010000\n#define D3DX_FILTER_MIRROR_V             0x00020000\n#define D3DX_FILTER_MIRROR_W             0x00040000\n#define D3DX_FILTER_MIRROR               0x00070000\n#define D3DX_FILTER_DITHER               0x00080000\n#define D3DX_FILTER_DITHER_DIFFUSION     0x00100000\n#define D3DX_FILTER_SRGB_IN              0x00200000\n#define D3DX_FILTER_SRGB_OUT             0x00400000\n#define D3DX_FILTER_SRGB                 0x00600000\n\n#define D3DX_SKIP_DDS_MIP_LEVELS_MASK    0x1f\n#define D3DX_SKIP_DDS_MIP_LEVELS_SHIFT   26\n#define D3DX_SKIP_DDS_MIP_LEVELS(l, f)   ((((l) & D3DX_SKIP_DDS_MIP_LEVELS_MASK) \\\n        << D3DX_SKIP_DDS_MIP_LEVELS_SHIFT) | ((f) == D3DX_DEFAULT ? D3DX_FILTER_BOX : (f)))\n\n#define D3DX_NORMALMAP_MIRROR_U          0x00010000\n#define D3DX_NORMALMAP_MIRROR_V          0x00020000\n#define D3DX_NORMALMAP_MIRROR            0x00030000\n#define D3DX_NORMALMAP_INVERTSIGN        0x00080000\n#define D3DX_NORMALMAP_COMPUTE_OCCLUSION 0x00100000\n\n#define D3DX_CHANNEL_RED                 0x00000001\n#define D3DX_CHANNEL_BLUE                0x00000002\n#define D3DX_CHANNEL_GREEN               0x00000004\n#define D3DX_CHANNEL_ALPHA               0x00000008\n#define D3DX_CHANNEL_LUMINANCE           0x00000010\n\n/**********************************************\n ****************** Typedefs ******************\n **********************************************/\ntypedef enum _D3DXIMAGE_FILEFORMAT\n{\n    D3DXIFF_BMP,\n    D3DXIFF_JPG,\n    D3DXIFF_TGA,\n    D3DXIFF_PNG,\n    D3DXIFF_DDS,\n    D3DXIFF_PPM,\n    D3DXIFF_DIB,\n    D3DXIFF_HDR,\n    D3DXIFF_PFM,\n    D3DXIFF_FORCE_DWORD = 0x7fffffff\n} D3DXIMAGE_FILEFORMAT;\n\ntypedef struct _D3DXIMAGE_INFO\n{\n    UINT Width;\n    UINT Height;\n    UINT Depth;\n    UINT MipLevels;\n    D3DFORMAT Format;\n    D3DRESOURCETYPE ResourceType;\n    D3DXIMAGE_FILEFORMAT ImageFileFormat;\n} D3DXIMAGE_INFO;\n\n/**********************************************\n ****************** Functions *****************\n **********************************************/\n/* Typedefs for callback functions */\ntypedef void (WINAPI *LPD3DXFILL2D)(D3DXVECTOR4 *out, const D3DXVECTOR2 *texcoord,\n        const D3DXVECTOR2 *texelsize, void *data);\ntypedef void (WINAPI *LPD3DXFILL3D)(D3DXVECTOR4 *out, const D3DXVECTOR3 *texcoord,\n        const D3DXVECTOR3 *texelsize, void *data);\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/* Image Information */\nHRESULT WINAPI D3DXGetImageInfoFromFileA(const char *file, D3DXIMAGE_INFO *info);\nHRESULT WINAPI D3DXGetImageInfoFromFileW(const WCHAR *file, D3DXIMAGE_INFO *info);\n#define        D3DXGetImageInfoFromFile WINELIB_NAME_AW(D3DXGetImageInfoFromFile)\n\nHRESULT WINAPI D3DXGetImageInfoFromResourceA(HMODULE module, const char *resource, D3DXIMAGE_INFO *info);\nHRESULT WINAPI D3DXGetImageInfoFromResourceW(HMODULE module, const WCHAR *resource, D3DXIMAGE_INFO *info);\n#define        D3DXGetImageInfoFromResource WINELIB_NAME_AW(D3DXGetImageInfoFromResource)\n\nHRESULT WINAPI D3DXGetImageInfoFromFileInMemory(const void *data, UINT data_size, D3DXIMAGE_INFO *info);\n\n\n/* Surface Loading/Saving */\nHRESULT WINAPI D3DXLoadSurfaceFromFileA(struct IDirect3DSurface9 *destsurface,\n        const PALETTEENTRY *destpalette, const RECT *destrect, const char *srcfile,\n        const RECT *srcrect, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);\nHRESULT WINAPI D3DXLoadSurfaceFromFileW(struct IDirect3DSurface9 *destsurface,\n        const PALETTEENTRY *destpalette, const RECT *destrect, const WCHAR *srcfile,\n        const RECT *srcrect, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);\n#define D3DXLoadSurfaceFromFile WINELIB_NAME_AW(D3DXLoadSurfaceFromFile)\n\nHRESULT WINAPI D3DXLoadSurfaceFromResourceA(struct IDirect3DSurface9 *destsurface,\n        const PALETTEENTRY *destpalette, const RECT *destrect, HMODULE srcmodule, const char *resource,\n        const RECT *srcrect, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);\nHRESULT WINAPI D3DXLoadSurfaceFromResourceW(struct IDirect3DSurface9 *destsurface,\n        const PALETTEENTRY *destpalette, const RECT *destrect, HMODULE srcmodule, const WCHAR *resource,\n        const RECT *srcrect, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);\n#define D3DXLoadSurfaceFromResource WINELIB_NAME_AW(D3DXLoadSurfaceFromResource)\n\nHRESULT WINAPI D3DXLoadSurfaceFromFileInMemory(struct IDirect3DSurface9 *destsurface,\n        const PALETTEENTRY *destpalette, const RECT *destrect, const void *srcdata, UINT srcdatasize,\n        const RECT *srcrect, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);\n\nHRESULT WINAPI D3DXLoadSurfaceFromSurface(struct IDirect3DSurface9 *destsurface,\n        const PALETTEENTRY *destpalette, const RECT *destrect, struct IDirect3DSurface9 *srcsurface,\n        const PALETTEENTRY *srcpalette, const RECT *srcrect, DWORD filter, D3DCOLOR colorkey);\n\nHRESULT WINAPI D3DXLoadSurfaceFromMemory(IDirect3DSurface9 *dst_surface,\n        const PALETTEENTRY *dst_palette, const RECT *dst_rect, const void *src_memory,\n        D3DFORMAT src_format, UINT src_pitch, const PALETTEENTRY *src_palette, const RECT *src_rect,\n        DWORD filter, D3DCOLOR color_key);\n\nHRESULT WINAPI D3DXSaveSurfaceToFileInMemory(struct ID3DXBuffer **destbuffer,\n        D3DXIMAGE_FILEFORMAT destformat, struct IDirect3DSurface9 *srcsurface,\n        const PALETTEENTRY *srcpalette, const RECT *srcrect);\n\nHRESULT WINAPI D3DXSaveSurfaceToFileA(const char *destfile, D3DXIMAGE_FILEFORMAT destformat,\n        struct IDirect3DSurface9 *srcsurface, const PALETTEENTRY *srcpalette, const RECT *srcrect);\nHRESULT WINAPI D3DXSaveSurfaceToFileW(const WCHAR *destfile, D3DXIMAGE_FILEFORMAT destformat,\n        struct IDirect3DSurface9 *srcsurface, const PALETTEENTRY *srcpalette, const RECT *srcrect);\n#define D3DXSaveSurfaceToFile WINELIB_NAME_AW(D3DXSaveSurfaceToFile)\n\n\n/* Volume Loading/Saving */\nHRESULT WINAPI D3DXLoadVolumeFromFileA(struct IDirect3DVolume9 *destvolume,\n        const PALETTEENTRY *destpalette, const D3DBOX *destbox, const char *srcfile,\n        const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);\nHRESULT WINAPI D3DXLoadVolumeFromFileW( struct IDirect3DVolume9 *destvolume,\n        const PALETTEENTRY *destpalette, const D3DBOX *destbox, const WCHAR *srcfile,\n        const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);\n#define D3DXLoadVolumeFromFile WINELIB_NAME_AW(D3DXLoadVolumeFromFile)\n\nHRESULT WINAPI D3DXLoadVolumeFromResourceA(struct IDirect3DVolume9 *destvolume,\n        const PALETTEENTRY *destpalette, const D3DBOX *destbox, HMODULE srcmodule, const char *resource,\n        const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);\nHRESULT WINAPI D3DXLoadVolumeFromResourceW(struct IDirect3DVolume9 *destvolume,\n        const PALETTEENTRY *destpalette, const D3DBOX *destbox, HMODULE srcmodule, const WCHAR *resource,\n        const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);\n#define D3DXLoadVolumeFromResource WINELIB_NAME_AW(D3DXLoadVolumeFromResource)\n\nHRESULT WINAPI D3DXLoadVolumeFromFileInMemory(struct IDirect3DVolume9 *destvolume,\n        const PALETTEENTRY *destpalette, const D3DBOX *destbox, const void *srcdata, UINT srcdatasize,\n        const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);\n\nHRESULT WINAPI D3DXLoadVolumeFromVolume(struct IDirect3DVolume9 *destvolume,\n        const PALETTEENTRY *destpalette, const D3DBOX *destbox, struct IDirect3DVolume9 *srcvolume,\n        const PALETTEENTRY *srcpalette, const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey);\n\nHRESULT WINAPI D3DXLoadVolumeFromMemory(struct IDirect3DVolume9 *destvolume,\n        const PALETTEENTRY *destpalette, const D3DBOX *destbox, const void *srcmemory,\n        D3DFORMAT srcformat, UINT srcrowpitch, UINT srcslicepitch, const PALETTEENTRY *srcpalette,\n        const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey);\n\nHRESULT WINAPI D3DXSaveVolumeToFileA(const char *destfile, D3DXIMAGE_FILEFORMAT destformat,\n        struct IDirect3DVolume9 *srcvolume, const PALETTEENTRY *srcpalette, const D3DBOX *srcbox);\nHRESULT WINAPI D3DXSaveVolumeToFileW(const WCHAR *destfile, D3DXIMAGE_FILEFORMAT destformat,\n        struct IDirect3DVolume9 *srcvolume, const PALETTEENTRY *srcpalette, const D3DBOX *srcbox);\n#define D3DXSaveVolumeToFile WINELIB_NAME_AW(D3DXSaveVolumeToFile)\n\n\n/* Texture, cube texture and volume texture creation */\nHRESULT WINAPI D3DXCheckTextureRequirements(struct IDirect3DDevice9 *device, UINT *width, UINT *height,\n        UINT *miplevels, DWORD usage, D3DFORMAT *format, D3DPOOL pool);\nHRESULT WINAPI D3DXCheckCubeTextureRequirements(struct IDirect3DDevice9 *device, UINT *size,\n        UINT *miplevels, DWORD usage, D3DFORMAT *format, D3DPOOL pool);\nHRESULT WINAPI D3DXCheckVolumeTextureRequirements(struct IDirect3DDevice9 *device, UINT *width, UINT *height,\n        UINT *depth, UINT *miplevels, DWORD usage, D3DFORMAT *format, D3DPOOL pool);\n\nHRESULT WINAPI D3DXCreateTexture(struct IDirect3DDevice9 *device, UINT width, UINT height,\n        UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, struct IDirect3DTexture9 **texture);\nHRESULT WINAPI D3DXCreateCubeTexture(struct IDirect3DDevice9 *device, UINT size,\n        UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, struct IDirect3DCubeTexture9 **cube);\nHRESULT WINAPI D3DXCreateVolumeTexture(struct IDirect3DDevice9 *device, UINT width, UINT height, UINT depth,\n        UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, struct IDirect3DVolumeTexture9 **volume);\n\nHRESULT WINAPI D3DXCreateTextureFromFileA(struct IDirect3DDevice9 *device,\n        const char *srcfile, struct IDirect3DTexture9 **texture);\nHRESULT WINAPI D3DXCreateTextureFromFileW(struct IDirect3DDevice9 *device,\n        const WCHAR *srcfile, struct IDirect3DTexture9 **texture);\n#define D3DXCreateTextureFromFile WINELIB_NAME_AW(D3DXCreateTextureFromFile)\n\nHRESULT WINAPI D3DXCreateCubeTextureFromFileA(struct IDirect3DDevice9 *device,\n        const char *srcfile, struct IDirect3DCubeTexture9 **cube);\nHRESULT WINAPI D3DXCreateCubeTextureFromFileW(struct IDirect3DDevice9 *device,\n        const WCHAR *srcfile, struct IDirect3DCubeTexture9 **cube);\n#define D3DXCreateCubeTextureFromFile WINELIB_NAME_AW(D3DXCreateCubeTextureFromFile)\n\nHRESULT WINAPI D3DXCreateVolumeTextureFromFileA(struct IDirect3DDevice9 *device,\n        const char *srcfile, struct IDirect3DVolumeTexture9 **volume);\nHRESULT WINAPI D3DXCreateVolumeTextureFromFileW(struct IDirect3DDevice9 *device,\n        const WCHAR *srcfile, struct IDirect3DVolumeTexture9 **volume);\n#define D3DXCreateVolumeTextureFromFile WINELIB_NAME_AW(D3DXCreateVolumeTextureFromFile)\n\nHRESULT WINAPI D3DXCreateTextureFromResourceA(struct IDirect3DDevice9 *device,\n        HMODULE srcmodule, const char *resource, struct IDirect3DTexture9 **texture);\nHRESULT WINAPI D3DXCreateTextureFromResourceW(struct IDirect3DDevice9 *device,\n        HMODULE srcmodule, const WCHAR *resource, struct IDirect3DTexture9 **texture);\n#define D3DXCreateTextureFromResource WINELIB_NAME_AW(D3DXCreateTextureFromResource)\n\nHRESULT WINAPI D3DXCreateCubeTextureFromResourceA(struct IDirect3DDevice9 *device,\n        HMODULE srcmodule, const char *resource, struct IDirect3DCubeTexture9 **cube);\nHRESULT WINAPI D3DXCreateCubeTextureFromResourceW(struct IDirect3DDevice9 *device,\n        HMODULE srcmodule, const WCHAR *resource, struct IDirect3DCubeTexture9 **cube);\n#define D3DXCreateCubeTextureFromResource WINELIB_NAME_AW(D3DXCreateCubeTextureFromResource)\n\nHRESULT WINAPI D3DXCreateVolumeTextureFromResourceA(struct IDirect3DDevice9 *device,\n        HMODULE srcmodule, const char *resource, struct IDirect3DVolumeTexture9 **volume);\nHRESULT WINAPI D3DXCreateVolumeTextureFromResourceW(struct IDirect3DDevice9 *device,\n        HMODULE srcmodule, const WCHAR *resource, struct IDirect3DVolumeTexture9 **volume);\n#define D3DXCreateVolumeTextureFromResource WINELIB_NAME_AW(D3DXCreateVolumeTextureFromResource)\n\nHRESULT WINAPI D3DXCreateTextureFromFileExA(struct IDirect3DDevice9 *device, const char *srcfile,\n        UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format,\n        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,\n        PALETTEENTRY *palette, struct IDirect3DTexture9 **texture);\nHRESULT WINAPI D3DXCreateTextureFromFileExW(struct IDirect3DDevice9 *device, const WCHAR *srcfile,\n        UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format,\n        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,\n        PALETTEENTRY *palette, struct IDirect3DTexture9 **texture);\n#define D3DXCreateTextureFromFileEx WINELIB_NAME_AW(D3DXCreateTextureFromFileEx)\n\nHRESULT WINAPI D3DXCreateCubeTextureFromFileExA(struct IDirect3DDevice9 *device, const char *srcfile,\n        UINT size, UINT miplevels, DWORD usage, D3DFORMAT format,\n        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,\n        PALETTEENTRY *palette, struct IDirect3DCubeTexture9 **cube);\nHRESULT WINAPI D3DXCreateCubeTextureFromFileExW(struct IDirect3DDevice9 *device, const WCHAR *srcfile,\n        UINT size, UINT miplevels, DWORD usage, D3DFORMAT format,\n        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,\n        PALETTEENTRY *palette, struct IDirect3DCubeTexture9 **cube);\n#define D3DXCreateCubeTextureFromFileEx WINELIB_NAME_AW(D3DXCreateCubeTextureFromFileEx)\n\nHRESULT WINAPI D3DXCreateVolumeTextureFromFileExA(struct IDirect3DDevice9 *device, const char *srcfile,\n        UINT width, UINT height, UINT depth, UINT miplevels, DWORD usage, D3DFORMAT format,\n        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,\n        PALETTEENTRY *palette, struct IDirect3DVolumeTexture9 **volume);\nHRESULT WINAPI D3DXCreateVolumeTextureFromFileExW(struct IDirect3DDevice9 *device, const WCHAR *srcfile,\n        UINT width, UINT height, UINT depth, UINT miplevels, DWORD usage, D3DFORMAT format,\n        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,\n        PALETTEENTRY *palette, struct IDirect3DVolumeTexture9 **volume);\n#define D3DXCreateVolumeTextureFromFileEx WINELIB_NAME_AW(D3DXCreateVolumeTextureFromFileEx)\n\nHRESULT WINAPI D3DXCreateTextureFromResourceExA(struct IDirect3DDevice9 *device, HMODULE srcmodule,\n        const char *resource, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format,\n        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,\n        PALETTEENTRY *palette, struct IDirect3DTexture9 **texture);\nHRESULT WINAPI D3DXCreateTextureFromResourceExW(struct IDirect3DDevice9 *device, HMODULE srcmodule,\n        const WCHAR *resource, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format,\n        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,\n        PALETTEENTRY *palette, struct IDirect3DTexture9 **texture);\n#define D3DXCreateTextureFromResourceEx WINELIB_NAME_AW(D3DXCreateTextureFromResourceEx)\n\nHRESULT WINAPI D3DXCreateCubeTextureFromResourceExA(struct IDirect3DDevice9 *device, HMODULE srcmodule,\n        const char *resource, UINT size, UINT miplevels, DWORD usage, D3DFORMAT format,\n        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,\n        PALETTEENTRY *palette, struct IDirect3DCubeTexture9 **cube);\nHRESULT WINAPI D3DXCreateCubeTextureFromResourceExW(struct IDirect3DDevice9 *device, HMODULE srcmodule,\n        const WCHAR *resource, UINT size, UINT miplevels, DWORD usage, D3DFORMAT format,\n        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,\n        PALETTEENTRY *palette, struct IDirect3DCubeTexture9 **cube);\n#define D3DXCreateCubeTextureFromResourceEx WINELIB_NAME_AW(D3DXCreateCubeTextureFromResourceEx)\n\nHRESULT WINAPI D3DXCreateVolumeTextureFromResourceExA(struct IDirect3DDevice9 *device, HMODULE srcmodule,\n        const char *resource, UINT width, UINT height, UINT depth, UINT miplevels, DWORD usage, D3DFORMAT format,\n        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,\n        PALETTEENTRY *palette, struct IDirect3DVolumeTexture9 **volume);\nHRESULT WINAPI D3DXCreateVolumeTextureFromResourceExW(struct IDirect3DDevice9 *device, HMODULE srcmodule,\n        const WCHAR *resource, UINT width, UINT height, UINT depth, UINT miplevels, DWORD usage, D3DFORMAT format,\n        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,\n        PALETTEENTRY *palette, struct IDirect3DVolumeTexture9 **volume);\n#define D3DXCreateVolumeTextureFromResourceEx WINELIB_NAME_AW(D3DXCreateVolumeTextureFromResourceEx)\n\nHRESULT WINAPI D3DXCreateTextureFromFileInMemory(struct IDirect3DDevice9 *device,\n        const void *srcdata, UINT srcdatasize, struct IDirect3DTexture9 **texture);\nHRESULT WINAPI D3DXCreateCubeTextureFromFileInMemory(struct IDirect3DDevice9 *device,\n        const void *srcdata, UINT srcdatasize, struct IDirect3DCubeTexture9 **cube);\nHRESULT WINAPI D3DXCreateVolumeTextureFromFileInMemory(struct IDirect3DDevice9 *device,\n        const void *srcdata, UINT srcdatasize, struct IDirect3DVolumeTexture9 **volume);\n\nHRESULT WINAPI D3DXCreateTextureFromFileInMemoryEx(struct IDirect3DDevice9 *device, const void *srcdata,\n        UINT srcdatasize, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format,\n        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,\n        PALETTEENTRY *palette, struct IDirect3DTexture9 **texture);\nHRESULT WINAPI D3DXCreateCubeTextureFromFileInMemoryEx(struct IDirect3DDevice9 *device, const void *srcdata,\n        UINT srcdatasize, UINT size, UINT miplevels, DWORD usage, D3DFORMAT format,\n        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,\n        PALETTEENTRY *palette, struct IDirect3DCubeTexture9 **cube);\nHRESULT WINAPI D3DXCreateVolumeTextureFromFileInMemoryEx(struct IDirect3DDevice9 *device, const void *srcdata,\n        UINT srcdatasize, UINT width, UINT height, UINT depth, UINT miplevels, DWORD usage, D3DFORMAT format,\n        D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,\n        PALETTEENTRY *palette, struct IDirect3DVolumeTexture9 **volume);\n\nHRESULT WINAPI D3DXSaveTextureToFileInMemory(struct ID3DXBuffer **destbuffer, D3DXIMAGE_FILEFORMAT destformat,\n        struct IDirect3DBaseTexture9 *srctexture, const PALETTEENTRY *srcpalette);\nHRESULT WINAPI D3DXSaveTextureToFileA(const char *destfile, D3DXIMAGE_FILEFORMAT destformat,\n        struct IDirect3DBaseTexture9 *srctexture, const PALETTEENTRY *srcpalette);\nHRESULT WINAPI D3DXSaveTextureToFileW(const WCHAR *destfile, D3DXIMAGE_FILEFORMAT destformat,\n        struct IDirect3DBaseTexture9 *srctexture, const PALETTEENTRY *srcpalette);\n#define D3DXSaveTextureToFile WINELIB_NAME_AW(D3DXSaveTextureToFile)\n\n/* Other functions */\nHRESULT WINAPI D3DXFilterTexture(struct IDirect3DBaseTexture9 *texture,\n        const PALETTEENTRY *palette, UINT srclevel, DWORD filter);\n#define D3DXFilterCubeTexture D3DXFilterTexture\n#define D3DXFilterVolumeTexture D3DXFilterTexture\n\nHRESULT WINAPI D3DXFillTexture(struct IDirect3DTexture9 *texture, LPD3DXFILL2D function, void *data);\nHRESULT WINAPI D3DXFillCubeTexture(struct IDirect3DCubeTexture9 *cube, LPD3DXFILL3D function, void *data);\nHRESULT WINAPI D3DXFillVolumeTexture(struct IDirect3DVolumeTexture9 *volume, LPD3DXFILL3D function, void *data);\n\nHRESULT WINAPI D3DXFillTextureTX(struct IDirect3DTexture9 *texture, ID3DXTextureShader *texture_shader);\nHRESULT WINAPI D3DXFillCubeTextureTX(struct IDirect3DCubeTexture9 *cube, ID3DXTextureShader *texture_shader);\nHRESULT WINAPI D3DXFillVolumeTextureTX(struct IDirect3DVolumeTexture9 *volume, ID3DXTextureShader *texture_shader);\n\nHRESULT WINAPI D3DXComputeNormalMap(IDirect3DTexture9 *texture, IDirect3DTexture9 *srctexture,\n        const PALETTEENTRY *srcpalette, DWORD flags, DWORD channel, float amplitude);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_D3DX9TEX_H */\n"
  },
  {
    "path": "wine/windows/d3dx9xof.h",
    "content": "/*\n * Copyright 2011 Dylan Smith\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_D3DX9XOF_H\n#define __WINE_D3DX9XOF_H\n\n#include \"d3dx9.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef DWORD D3DXF_FILEFORMAT;\n#define D3DXF_FILEFORMAT_BINARY     0\n#define D3DXF_FILEFORMAT_TEXT       1\n#define D3DXF_FILEFORMAT_COMPRESSED 2\n\ntypedef DWORD D3DXF_FILESAVEOPTIONS;\n#define D3DXF_FILESAVE_TOFILE   0x00\n#define D3DXF_FILESAVE_TOWFILE  0x01\n\ntypedef DWORD D3DXF_FILELOADOPTIONS;\n#define D3DXF_FILELOAD_FROMFILE     0x00\n#define D3DXF_FILELOAD_FROMWFILE    0x01\n#define D3DXF_FILELOAD_FROMRESOURCE 0x02\n#define D3DXF_FILELOAD_FROMMEMORY   0x03\n\ntypedef struct _D3DXF_FILELOADRESOURCE\n{\n    HMODULE hModule;\n    const char *lpName;\n    const char *lpType;\n} D3DXF_FILELOADRESOURCE;\n\ntypedef struct _D3DXF_FILELOADMEMORY\n{\n    void *lpMemory;\n    SIZE_T dSize;\n} D3DXF_FILELOADMEMORY;\n\n\n#ifndef _NO_COM\nDEFINE_GUID(IID_ID3DXFile,           0xcef08cf9, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01);\nDEFINE_GUID(IID_ID3DXFileSaveObject, 0xcef08cfa, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01);\nDEFINE_GUID(IID_ID3DXFileSaveData,   0xcef08cfb, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01);\nDEFINE_GUID(IID_ID3DXFileEnumObject, 0xcef08cfc, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01);\nDEFINE_GUID(IID_ID3DXFileData,       0xcef08cfd, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01);\n#endif /* _NO_COM */\n\ntypedef interface ID3DXFile *LPD3DXFILE, **LPLPD3DXFILE;\ntypedef interface ID3DXFileSaveObject *LPD3DXFILESAVEOBJECT, **LPLPD3DXFILESAVEOBJECT;\ntypedef interface ID3DXFileSaveData *LPD3DXFILESAVEDATA, **LPLPD3DXFILESAVEDATA;\ntypedef interface ID3DXFileEnumObject *LPD3DXFILEENUMOBJECT, **LPLPD3DXFILEENUMOBJECT;\ntypedef interface ID3DXFileData *LPD3DXFILEDATA, **LPLPD3DXFILEDATA;\n\nSTDAPI D3DXFileCreate(struct ID3DXFile **file);\n\n#define INTERFACE ID3DXFile\nDECLARE_INTERFACE_IID_(ID3DXFile,IUnknown,\"cef08cf9-7b4f-4429-9624-2a690a933201\")\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** ID3DXFile methods ***/\n    STDMETHOD(CreateEnumObject)(THIS_ const void *src, D3DXF_FILELOADOPTIONS type,\n            struct ID3DXFileEnumObject **enum_obj) PURE;\n    STDMETHOD(CreateSaveObject)(THIS_ const void *data, D3DXF_FILESAVEOPTIONS flags,\n            D3DXF_FILEFORMAT format, struct ID3DXFileSaveObject **save_obj) PURE;\n    STDMETHOD(RegisterTemplates)(THIS_ const void *data, SIZE_T data_size) PURE;\n    STDMETHOD(RegisterEnumTemplates)(THIS_ struct ID3DXFileEnumObject *enum_obj) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE ID3DXFileSaveObject\nDECLARE_INTERFACE_IID_(ID3DXFileSaveObject,IUnknown,\"cef08cfa-7b4f-4429-9624-2a690a933201\")\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** ID3DXFileSaveObject methods ***/\n    STDMETHOD(GetFile)(THIS_ ID3DXFile **file) PURE;\n    STDMETHOD(AddDataObject)(THIS_ REFGUID template_guid, const char *name, const GUID *guid,\n            SIZE_T data_size, const void *data, struct ID3DXFileSaveData **obj) PURE;\n    STDMETHOD(Save)(THIS) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE ID3DXFileSaveData\nDECLARE_INTERFACE_IID_(ID3DXFileSaveData,IUnknown,\"cef08cfb-7b4f-4429-9624-2a690a933201\")\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** ID3DXFileSaveObject methods ***/\n    STDMETHOD(GetSave)(THIS_ ID3DXFileSaveObject **save_obj) PURE;\n    STDMETHOD(GetName)(THIS_ char *name, SIZE_T *size) PURE;\n    STDMETHOD(GetId)(THIS_ LPGUID) PURE;\n    STDMETHOD(GetType)(THIS_ GUID*) PURE;\n    STDMETHOD(AddDataObject)(THIS_ REFGUID template_guid, const char *name, const GUID *guid,\n            SIZE_T data_size, const void *data, ID3DXFileSaveData **obj) PURE;\n    STDMETHOD(AddDataReference)(THIS_ const char *name, const GUID *id) PURE;\n};\n#undef INTERFACE\n\n\n#define INTERFACE ID3DXFileEnumObject\nDECLARE_INTERFACE_IID_(ID3DXFileEnumObject,IUnknown,\"cef08cfc-7b4f-4429-9624-2a690a933201\")\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** ID3DXFileEnumObject methods ***/\n    STDMETHOD(GetFile)(THIS_ ID3DXFile **file) PURE;\n    STDMETHOD(GetChildren)(THIS_ SIZE_T*) PURE;\n    STDMETHOD(GetChild)(THIS_ SIZE_T id, struct ID3DXFileData **child) PURE;\n    STDMETHOD(GetDataObjectById)(THIS_ REFGUID guid, struct ID3DXFileData **obj) PURE;\n    STDMETHOD(GetDataObjectByName)(THIS_ const char *name, struct ID3DXFileData **obj) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE ID3DXFileData\nDECLARE_INTERFACE_IID_(ID3DXFileData,IUnknown,\"cef08cfd-7b4f-4429-9624-2a690a933201\")\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** ID3DXFileData methods ***/\n    STDMETHOD(GetEnum)(THIS_ ID3DXFileEnumObject **enum_obj) PURE;\n    STDMETHOD(GetName)(THIS_ char *name, SIZE_T *size) PURE;\n    STDMETHOD(GetId)(THIS_ LPGUID) PURE;\n    STDMETHOD(Lock)(THIS_ SIZE_T *data_size, const void **data) PURE;\n    STDMETHOD(Unlock)(THIS) PURE;\n    STDMETHOD(GetType)(THIS_ GUID*) PURE;\n    STDMETHOD_(BOOL,IsReference)(THIS) PURE;\n    STDMETHOD(GetChildren)(THIS_ SIZE_T*) PURE;\n    STDMETHOD(GetChild)(THIS_ SIZE_T id, ID3DXFileData **child) PURE;\n};\n#undef INTERFACE\n\n/* D3DX File errors */\n#define _FACD3DXF 0x876\n\n#define D3DXFERR_BADOBJECT          MAKE_HRESULT(1,_FACD3DXF,900)\n#define D3DXFERR_BADVALUE           MAKE_HRESULT(1,_FACD3DXF,901)\n#define D3DXFERR_BADTYPE            MAKE_HRESULT(1,_FACD3DXF,902)\n#define D3DXFERR_NOTFOUND           MAKE_HRESULT(1,_FACD3DXF,903)\n#define D3DXFERR_NOTDONEYET         MAKE_HRESULT(1,_FACD3DXF,904)\n#define D3DXFERR_FILENOTFOUND       MAKE_HRESULT(1,_FACD3DXF,905)\n#define D3DXFERR_RESOURCENOTFOUND   MAKE_HRESULT(1,_FACD3DXF,906)\n#define D3DXFERR_BADRESOURCE        MAKE_HRESULT(1,_FACD3DXF,907)\n#define D3DXFERR_BADFILETYPE        MAKE_HRESULT(1,_FACD3DXF,908)\n#define D3DXFERR_BADFILEVERSION     MAKE_HRESULT(1,_FACD3DXF,909)\n#define D3DXFERR_BADFILEFLOATSIZE   MAKE_HRESULT(1,_FACD3DXF,910)\n#define D3DXFERR_BADFILE            MAKE_HRESULT(1,_FACD3DXF,911)\n#define D3DXFERR_PARSEERROR         MAKE_HRESULT(1,_FACD3DXF,912)\n#define D3DXFERR_BADARRAYSIZE       MAKE_HRESULT(1,_FACD3DXF,913)\n#define D3DXFERR_BADDATAREFERENCE   MAKE_HRESULT(1,_FACD3DXF,914)\n#define D3DXFERR_NOMOREOBJECTS      MAKE_HRESULT(1,_FACD3DXF,915)\n#define D3DXFERR_NOMOREDATA         MAKE_HRESULT(1,_FACD3DXF,916)\n#define D3DXFERR_BADCACHEFILE       MAKE_HRESULT(1,_FACD3DXF,917)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_D3DX9XOF_H */\n"
  },
  {
    "path": "wine/windows/davclnt.h",
    "content": "/*\n * Copyright 2015 Hans Leidekker for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DAVCLNT_H\n#define __WINE_DAVCLNT_H\n\n#define OPAQUE_HANDLE DWORD\n\n#define DAV_AUTHN_SCHEME_BASIC     0x00000001\n#define DAV_AUTHN_SCHEME_NTLM      0x00000002\n#define DAV_AUTHN_SCHEME_PASSPORT  0x00000004\n#define DAV_AUTHN_SCHEME_DIGEST    0x00000008\n#define DAV_AUTHN_SCHEME_NEGOTIATE 0x00000010\n#define DAV_AUTHN_SCHEME_CERT      0x00010000\n#define DAV_AUTHN_SCHEME_FBA       0x00100000\n\ntypedef enum\n{\n    DefaultBehavior,\n    RetryRequest,\n    CancelRequest\n} AUTHNEXTSTEP;\n\ntypedef struct _DAV_CALLBACK_AUTH_BLOB\n{\n    PVOID pBuffer;\n    ULONG ulSize;\n    ULONG ulType;\n} DAV_CALLBACK_AUTH_BLOB, *PDAV_CALLBACK_AUTH_BLOB;\n\ntypedef struct _DAV_CALLBACK_AUTH_UNP\n{\n    LPWSTR pszUserName;\n    ULONG  ulUserNameLength;\n    LPWSTR pszPassword;\n    ULONG  ulPasswordLength;\n} DAV_CALLBACK_AUTH_UNP, *PDAV_CALLBACK_AUTH_UNP;\n\ntypedef struct _DAV_CALLBACK_CRED\n{\n    DAV_CALLBACK_AUTH_BLOB AuthBlob;\n    DAV_CALLBACK_AUTH_UNP  UNPBlob;\n    BOOL                   bAuthBlobValid;\n    BOOL                   bSave;\n} DAV_CALLBACK_CRED, *PDAV_CALLBACK_CRED;\n\ntypedef DWORD (*PFNDAVAUTHCALLBACK_FREECRED)\n    (PVOID);\n\ntypedef DWORD (*PFNDAVAUTHCALLBACK)\n    (LPWSTR,LPWSTR,DWORD,DWORD,PDAV_CALLBACK_CRED,AUTHNEXTSTEP*,PFNDAVAUTHCALLBACK_FREECRED*);\n\nDWORD WINAPI DavGetHTTPFromUNCPath(LPCWSTR,LPWSTR,LPDWORD);\nDWORD WINAPI DavGetUNCFromHTTPPath(LPCWSTR,LPWSTR,LPDWORD);\nOPAQUE_HANDLE WINAPI DavRegisterAuthCallback(PFNDAVAUTHCALLBACK,ULONG);\nVOID WINAPI DavUnregisterAuthCallback(OPAQUE_HANDLE);\n\n#endif /* __WINE_DAVCLNT_H */\n"
  },
  {
    "path": "wine/windows/dbccmd.idl",
    "content": "/*\n * Copyright (C) 2009 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    object,\n    uuid(0c733a1d-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface IDBCreateCommand : IUnknown\n{\n    [local]\n    HRESULT CreateCommand([in] IUnknown *pUnkOuter,\n                          [in] REFIID riid,\n                          [out, iid_is(riid)] IUnknown **ppCommand);\n\n    [call_as(CreateCommand)]\n    HRESULT RemoteCreateCommand([in] IUnknown *pUnkOuter,\n                                [in] REFIID riid,\n                                [out, iid_is(riid)] IUnknown **ppCommand,\n                                [out] IErrorInfo **ppErrorInfoRem);\n}\n"
  },
  {
    "path": "wine/windows/dbcses.idl",
    "content": "/*\n * Copyright (C) 2009 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    object,\n    uuid(0c733a5d-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface IDBCreateSession : IUnknown\n{\n    [local]\n    HRESULT CreateSession([in] IUnknown *pUnkOuter,\n                          [in] REFIID riid,\n                          [out, iid_is(riid)] IUnknown **ppDBSession);\n\n    [call_as(CreateSession)]\n    HRESULT RemoteCreateSession([in] IUnknown *pUnkOuter,\n                                [in] REFIID riid,\n                                [out, iid_is(riid)] IUnknown **ppDBSession,\n                                [out] IErrorInfo **ppErrorInfoRem);\n}\n"
  },
  {
    "path": "wine/windows/dbdsad.idl",
    "content": "/*\n * Copyright (C) 2009 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    object,\n    uuid(0c733a7a-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface IDBDataSourceAdmin : IUnknown\n{\n    [local]\n    HRESULT CreateDataSource([in] ULONG cPropertySets,\n                             [in, out, size_is(cPropertySets)] DBPROPSET rgPropertySets[],\n                             [in] IUnknown *pUnkOuter,\n                             [in] REFIID riid,\n                             [out, iid_is(riid)] IUnknown **ppDBSession);\n\n    [call_as(CreateDataSource)]\n    HRESULT RemoteCreateDataSource([in] ULONG cPropertySets,\n                                   [in, unique, size_is(cPropertySets)] DBPROPSET *rgPropertySets,\n                                   [in] IUnknown *pUnkOuter,\n                                   [in] REFIID riid,\n                                   [in, out, unique, iid_is(riid)] IUnknown **ppDBSession,\n                                   [in] ULONG cTotalProps,\n                                   [out, size_is(cTotalProps)] DBPROPSTATUS *rgPropStatus,\n                                   [out] IErrorInfo **ppErrorInfoRem);\n\n    [local]\n    HRESULT DestroyDataSource();\n\n    [call_as(DestroyDataSource)]\n    HRESULT RemoteDestroyDataSource([out] IErrorInfo **ppErrorInfoRem);\n\n    [local]\n    HRESULT GetCreationProperties([in] ULONG cPropertyIDSets,\n                                  [in, size_is(cPropertyIDSets)] const DBPROPIDSET rgPropertyIDSets[],\n                                  [in, out] ULONG *pcPropertyInfoSets,\n                                  [out, size_is(,*pcPropertyInfoSets)] DBPROPINFOSET **prgPropertyInfoSets,\n                                  [out, annotation(\"__deref_out_z_opt\")] OLECHAR **ppDescBuffer);\n\n    [call_as(GetCreationProperties)]\n    HRESULT RemoteGetCreationProperties([in] ULONG cPropertyIDSets,\n                                        [in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets,\n                                        [in, out] ULONG *pcPropertyInfoSets,\n                                        [out, size_is(,*pcPropertyInfoSets)] DBPROPINFOSET **prgPropertyInfoSets,\n                                        [in, out] DBCOUNTITEM *pcOffsets,\n                                        [out, size_is(,(ULONG)*pcOffsets)] DBBYTEOFFSET **prgDescOffsets,\n                                        [in, out] ULONG *pcbDescBuffer,\n                                        [in, out, unique, size_is(,*pcbDescBuffer)] OLECHAR **ppDescBuffer,\n                                        [out] IErrorInfo **ppErrorInfoRem);\n\n    [local]\n    HRESULT ModifyDataSource([in] ULONG cPropertySets,\n                             [in, size_is(cPropertySets)] DBPROPSET rgPropertySets[]);\n\n    [call_as(ModifyDataSource)]\n    HRESULT RemoteModifyDataSource([in] ULONG cPropertySets,\n                                   [in, size_is(cPropertySets)] DBPROPSET *rgPropertySets,\n                                   [out] IErrorInfo **ppErrorInfoRem);\n}\n"
  },
  {
    "path": "wine/windows/dbghelp.h",
    "content": "/*\n * Declarations for DBGHELP\n *\n * Copyright (C) 2003 Eric Pouech\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DBGHELP_H\n#define __WINE_DBGHELP_H\n\n/* A set of documentation macros (see also imagehlp.h) */\n#ifndef __deref_out\n# define __deref_out\n#endif\n#ifndef __deref_out_opt\n# define __deref_out_opt\n#endif\n#ifndef __deref_opt_out\n# define __deref_opt_out\n#endif\n#ifndef __in\n# define __in\n#endif\n#ifndef __in_opt\n# define __in_opt\n#endif\n#ifndef __in_bcount\n# define __in_bcount(x)\n#endif\n#ifndef __in_bcount_opt\n# define __in_bcount_opt(x)\n#endif\n#ifndef __in_ecount\n# define __in_ecount(x)\n#endif\n#ifndef __inout\n# define __inout\n#endif\n#ifndef __inout_opt\n# define __inout_opt\n#endif\n#ifndef __inout_bcount\n# define __inout_bcount(x)\n#endif\n#ifndef __inout_ecount\n# define __inout_ecount(x)\n#endif\n#ifndef __out\n# define __out\n#endif\n#ifndef __out_opt\n# define __out_opt\n#endif\n#ifndef __out_bcount\n# define __out_bcount(x)\n#endif\n#ifndef __out_bcount_opt\n# define __out_bcount_opt(x)\n#endif\n#ifndef __out_ecount\n# define __out_ecount(x)\n#endif\n#ifndef __out_ecount_opt\n# define __out_ecount_opt(x)\n#endif\n#ifndef __out_xcount\n# define __out_xcount(x)\n#endif\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n#ifdef _WIN64\n#ifndef _IMAGEHLP64\n#define _IMAGEHLP64\n#endif\n#endif\n\n#define IMAGEAPI WINAPI\n#define DBHLPAPI IMAGEAPI\n\ntypedef struct _LOADED_IMAGE\n{\n    PSTR                        ModuleName;\n    HANDLE                      hFile;\n    PUCHAR                      MappedAddress;\n    PIMAGE_NT_HEADERS           FileHeader;\n    PIMAGE_SECTION_HEADER       LastRvaSection;\n    ULONG                       NumberOfSections;\n    PIMAGE_SECTION_HEADER       Sections;\n    ULONG                       Characteristics;\n    BOOLEAN                     fSystemImage;\n    BOOLEAN                     fDOSImage;\n    BOOLEAN                     fReadOnly;\n    UCHAR                       Version;\n    LIST_ENTRY                  Links;\n    ULONG                       SizeOfImage;\n} LOADED_IMAGE, *PLOADED_IMAGE;\n\n/*************************\n *    IMAGEHLP equiv     *\n *************************/\n\ntypedef enum\n{\n    AddrMode1616,\n    AddrMode1632,\n    AddrModeReal,\n    AddrModeFlat\n} ADDRESS_MODE;\n\n#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)\n#define ADDRESS ADDRESS64\n#define LPADDRESS LPADDRESS64\n#else\ntypedef struct _tagADDRESS\n{\n    DWORD                       Offset;\n    WORD                        Segment;\n    ADDRESS_MODE                Mode;\n} ADDRESS, *LPADDRESS;\n#endif\n\ntypedef struct _tagADDRESS64\n{\n    DWORD64                     Offset;\n    WORD                        Segment;\n    ADDRESS_MODE                Mode;\n} ADDRESS64, *LPADDRESS64;\n\n#define SYMF_OMAP_GENERATED   0x00000001\n#define SYMF_OMAP_MODIFIED    0x00000002\n#define SYMF_USER_GENERATED   0x00000004\n#define SYMF_REGISTER         0x00000008\n#define SYMF_REGREL           0x00000010\n#define SYMF_FRAMEREL         0x00000020\n#define SYMF_PARAMETER        0x00000040\n#define SYMF_LOCAL            0x00000080\n#define SYMF_CONSTANT         0x00000100\n#define SYMF_EXPORT           0x00000200\n#define SYMF_FORWARDER        0x00000400\n#define SYMF_FUNCTION         0x00000800\n#define SYMF_VIRTUAL          0x00001000\n#define SYMF_THUNK            0x00002000\n#define SYMF_TLSREL           0x00004000\n\ntypedef enum \n{\n    SymNone = 0,\n    SymCoff,\n    SymCv,\n    SymPdb,\n    SymExport,\n    SymDeferred,\n    SymSym,\n    SymDia,\n    SymVirtual,\n    NumSymTypes\n} SYM_TYPE;\n\n#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)\n#define IMAGEHLP_SYMBOL IMAGEHLP_SYMBOL64\n#define IMAGEHLP_SYMBOLW IMAGEHLP_SYMBOLW64\n#define PIMAGEHLP_SYMBOL PIMAGEHLP_SYMBOL64\n#define PIMAGEHLP_SYMBOLW PIMAGEHLP_SYMBOLW64\n#else\ntypedef struct _IMAGEHLP_SYMBOL\n{\n    DWORD                       SizeOfStruct;\n    DWORD                       Address;\n    DWORD                       Size;\n    DWORD                       Flags;\n    DWORD                       MaxNameLength;\n    CHAR                        Name[1];\n} IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL;\n\ntypedef struct _IMAGEHLP_SYMBOLW\n{\n    DWORD                       SizeOfStruct;\n    DWORD                       Address;\n    DWORD                       Size;\n    DWORD                       Flags;\n    DWORD                       MaxNameLength;\n    WCHAR                       Name[1];\n} IMAGEHLP_SYMBOLW, *PIMAGEHLP_SYMBOLW;\n#endif\n\ntypedef struct _IMAGEHLP_SYMBOL64\n{\n    DWORD                       SizeOfStruct;\n    DWORD64                     Address;\n    DWORD                       Size;\n    DWORD                       Flags;\n    DWORD                       MaxNameLength;\n    CHAR                        Name[1];\n} IMAGEHLP_SYMBOL64, *PIMAGEHLP_SYMBOL64;\n\ntypedef struct _IMAGEHLP_SYMBOLW64\n{\n    DWORD                       SizeOfStruct;\n    DWORD64                     Address;\n    DWORD                       Size;\n    DWORD                       Flags;\n    DWORD                       MaxNameLength;\n    WCHAR                       Name[1];\n} IMAGEHLP_SYMBOLW64, *PIMAGEHLP_SYMBOLW64;\n\n#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)\n#define IMAGEHLP_MODULE IMAGEHLP_MODULE64\n#define PIMAGEHLP_MODULE PIMAGEHLP_MODULE64\n#define IMAGEHLP_MODULEW IMAGEHLP_MODULEW64\n#define PIMAGEHLP_MODULEW PIMAGEHLP_MODULEW64\n#else\ntypedef struct _IMAGEHLP_MODULE\n{\n    DWORD                       SizeOfStruct;\n    DWORD                       BaseOfImage;\n    DWORD                       ImageSize;\n    DWORD                       TimeDateStamp;\n    DWORD                       CheckSum;\n    DWORD                       NumSyms;\n    SYM_TYPE                    SymType;\n    CHAR                        ModuleName[32];\n    CHAR                        ImageName[256];\n    CHAR                        LoadedImageName[256];\n} IMAGEHLP_MODULE, *PIMAGEHLP_MODULE;\n\ntypedef struct _IMAGEHLP_MODULEW\n{\n    DWORD                       SizeOfStruct;\n    DWORD                       BaseOfImage;\n    DWORD                       ImageSize;\n    DWORD                       TimeDateStamp;\n    DWORD                       CheckSum;\n    DWORD                       NumSyms;\n    SYM_TYPE                    SymType;\n    WCHAR                       ModuleName[32];\n    WCHAR                       ImageName[256];\n    WCHAR                       LoadedImageName[256];\n} IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW;\n#endif\n\ntypedef struct _IMAGEHLP_MODULE64\n{\n    DWORD                       SizeOfStruct;\n    DWORD64                     BaseOfImage;\n    DWORD                       ImageSize;\n    DWORD                       TimeDateStamp;\n    DWORD                       CheckSum;\n    DWORD                       NumSyms;\n    SYM_TYPE                    SymType;\n    CHAR                        ModuleName[32];\n    CHAR                        ImageName[256];\n    CHAR                        LoadedImageName[256];\n    CHAR                        LoadedPdbName[256];\n    DWORD                       CVSig;\n    CHAR                        CVData[MAX_PATH*3];\n    DWORD                       PdbSig;\n    GUID                        PdbSig70;\n    DWORD                       PdbAge;\n    BOOL                        PdbUnmatched;\n    BOOL                        DbgUnmatched;\n    BOOL                        LineNumbers;\n    BOOL                        GlobalSymbols;\n    BOOL                        TypeInfo;\n    BOOL                        SourceIndexed;\n    BOOL                        Publics;\n} IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64;\n\ntypedef struct _IMAGEHLP_MODULEW64\n{\n    DWORD                       SizeOfStruct;\n    DWORD64                     BaseOfImage;\n    DWORD                       ImageSize;\n    DWORD                       TimeDateStamp;\n    DWORD                       CheckSum;\n    DWORD                       NumSyms;\n    SYM_TYPE                    SymType;\n    WCHAR                       ModuleName[32];\n    WCHAR                       ImageName[256];\n    WCHAR                       LoadedImageName[256];\n    WCHAR                       LoadedPdbName[256];\n    DWORD                       CVSig;\n    WCHAR                       CVData[MAX_PATH*3];\n    DWORD                       PdbSig;\n    GUID                        PdbSig70;\n    DWORD                       PdbAge;\n    BOOL                        PdbUnmatched;\n    BOOL                        DbgUnmatched;\n    BOOL                        LineNumbers;\n    BOOL                        GlobalSymbols;\n    BOOL                        TypeInfo;\n    BOOL                        SourceIndexed;\n    BOOL                        Publics;\n} IMAGEHLP_MODULEW64, *PIMAGEHLP_MODULEW64;\n\n#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)\n#define IMAGEHLP_LINE IMAGEHLP_LINE64\n#define PIMAGEHLP_LINE PIMAGEHLP_LINE64\n#define IMAGEHLP_LINEW IMAGEHLP_LINEW64\n#define PIMAGEHLP_LINEW PIMAGEHLP_LINEW64\n#else\ntypedef struct _IMAGEHLP_LINE\n{\n    DWORD                       SizeOfStruct;\n    PVOID                       Key;\n    DWORD                       LineNumber;\n    PCHAR                       FileName;\n    DWORD                       Address;\n} IMAGEHLP_LINE, *PIMAGEHLP_LINE;\n\ntypedef struct _IMAGEHLP_LINEW\n{\n    DWORD                       SizeOfStruct;\n    PVOID                       Key;\n    DWORD                       LineNumber;\n    PWSTR                       FileName;\n    DWORD                       Address;\n} IMAGEHLP_LINEW, *PIMAGEHLP_LINEW;\n#endif\n\ntypedef struct _IMAGEHLP_LINE64\n{\n    DWORD                       SizeOfStruct;\n    PVOID                       Key;\n    DWORD                       LineNumber;\n    PCHAR                       FileName;\n    DWORD64                     Address;\n} IMAGEHLP_LINE64, *PIMAGEHLP_LINE64;\n\ntypedef struct _IMAGEHLP_LINEW64\n{\n    DWORD                       SizeOfStruct;\n    PVOID                       Key;\n    DWORD                       LineNumber;\n    PWSTR                       FileName;\n    DWORD64                     Address;\n} IMAGEHLP_LINEW64, *PIMAGEHLP_LINEW64;\n\ntypedef struct _SOURCEFILE\n{\n    DWORD64                     ModBase;\n    PCHAR                       FileName;\n} SOURCEFILE, *PSOURCEFILE;\n\ntypedef struct _SOURCEFILEW\n{\n    DWORD64                     ModBase;\n    PWSTR                       FileName;\n} SOURCEFILEW, *PSOURCEFILEW;\n\n#define CBA_DEFERRED_SYMBOL_LOAD_START          0x00000001\n#define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE       0x00000002\n#define CBA_DEFERRED_SYMBOL_LOAD_FAILURE        0x00000003\n#define CBA_SYMBOLS_UNLOADED                    0x00000004\n#define CBA_DUPLICATE_SYMBOL                    0x00000005\n#define CBA_READ_MEMORY                         0x00000006\n#define CBA_DEFERRED_SYMBOL_LOAD_CANCEL         0x00000007\n#define CBA_SET_OPTIONS                         0x00000008\n#define CBA_EVENT                               0x00000010\n#define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL        0x00000020\n#define CBA_DEBUG_INFO                          0x10000000\n\ntypedef struct _IMAGEHLP_CBA_READ_MEMORY\n{\n    DWORD64   addr;\n    PVOID     buf;\n    DWORD     bytes;\n    DWORD    *bytesread;\n} IMAGEHLP_CBA_READ_MEMORY, *PIMAGEHLP_CBA_READ_MEMORY;\n\nenum\n{\n    sevInfo = 0,\n    sevProblem,\n    sevAttn,\n    sevFatal,\n    sevMax\n};\n\n#define EVENT_SRCSPEW_START 100\n#define EVENT_SRCSPEW       100\n#define EVENT_SRCSPEW_END   199\n\ntypedef struct _IMAGEHLP_CBA_EVENT\n{\n    DWORD       severity;\n    DWORD       code;\n    PCHAR       desc;\n    PVOID       object;\n} IMAGEHLP_CBA_EVENT, *PIMAGEHLP_CBA_EVENT;\n\ntypedef struct _IMAGEHLP_CBA_EVENTW\n{\n    DWORD       severity;\n    DWORD       code;\n    PCWSTR      desc;\n    PVOID       object;\n} IMAGEHLP_CBA_EVENTW, *PIMAGEHLP_CBA_EVENTW;\n\n#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)\n#define IMAGEHLP_DEFERRED_SYMBOL_LOAD IMAGEHLP_DEFERRED_SYMBOL_LOAD64\n#define PIMAGEHLP_DEFERRED_SYMBOL_LOAD PIMAGEHLP_DEFERRED_SYMBOL_LOAD64\n#else\ntypedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD\n{\n    DWORD                       SizeOfStruct;\n    DWORD                       BaseOfImage;\n    DWORD                       CheckSum;\n    DWORD                       TimeDateStamp;\n    CHAR                        FileName[MAX_PATH];\n    BOOLEAN                     Reparse;\n    HANDLE                      hFile;\n} IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD;\n#endif\n\ntypedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD64\n{\n    DWORD                       SizeOfStruct;\n    DWORD64                     BaseOfImage;\n    DWORD                       CheckSum;\n    DWORD                       TimeDateStamp;\n    CHAR                        FileName[MAX_PATH];\n    BOOLEAN                     Reparse;\n    HANDLE                      hFile;\n    DWORD                       Flags;\n} IMAGEHLP_DEFERRED_SYMBOL_LOAD64, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD64;\n\ntypedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOADW64\n{\n    DWORD                       SizeOfStruct;\n    DWORD64                     BaseOfImage;\n    DWORD                       CheckSum;\n    DWORD                       TimeDateStamp;\n    WCHAR                       FileName[MAX_PATH + 1];\n    BOOLEAN                     Reparse;\n    HANDLE                      hFile;\n    DWORD                       Flags;\n} IMAGEHLP_DEFERRED_SYMBOL_LOADW64, *PIMAGEHLP_DEFERRED_SYMBOL_LOADW64;\n\n#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)\n#define IMAGEHLP_DUPLICATE_SYMBOL IMAGEHLP_DUPLICATE_SYMBOL64\n#define PIMAGEHLP_DUPLICATE_SYMBOL PIMAGEHLP_DUPLICATE_SYMBOL64\n#else\ntypedef struct _IMAGEHLP_DUPLICATE_SYMBOL\n{\n    DWORD                       SizeOfStruct;\n    DWORD                       NumberOfDups;\n    PIMAGEHLP_SYMBOL            Symbol;\n    DWORD                       SelectedSymbol;\n} IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL;\n#endif\n\ntypedef struct _IMAGEHLP_DUPLICATE_SYMBOL64\n{\n    DWORD                       SizeOfStruct;\n    DWORD                       NumberOfDups;\n    PIMAGEHLP_SYMBOL64          Symbol;\n    DWORD                       SelectedSymbol;\n} IMAGEHLP_DUPLICATE_SYMBOL64, *PIMAGEHLP_DUPLICATE_SYMBOL64;\n\n#define SYMOPT_CASE_INSENSITIVE         0x00000001\n#define SYMOPT_UNDNAME                  0x00000002\n#define SYMOPT_DEFERRED_LOADS           0x00000004\n#define SYMOPT_NO_CPP                   0x00000008\n#define SYMOPT_LOAD_LINES               0x00000010\n#define SYMOPT_OMAP_FIND_NEAREST        0x00000020\n#define SYMOPT_LOAD_ANYTHING            0x00000040\n#define SYMOPT_IGNORE_CVREC             0x00000080\n#define SYMOPT_NO_UNQUALIFIED_LOADS     0x00000100\n#define SYMOPT_FAIL_CRITICAL_ERRORS     0x00000200\n#define SYMOPT_EXACT_SYMBOLS            0x00000400\n#define SYMOPT_WILD_UNDERSCORE          0x00000800\n#define SYMOPT_USE_DEFAULTS             0x00001000\n/* latest SDK defines:\n#define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS   0x00000800\n#define SYMOPT_IGNORE_NT_SYMPATH        0x00001000\n*/\n#define SYMOPT_INCLUDE_32BIT_MODULES    0x00002000\n#define SYMOPT_PUBLICS_ONLY             0x00004000\n#define SYMOPT_NO_PUBLICS               0x00008000\n#define SYMOPT_AUTO_PUBLICS             0x00010000\n#define SYMOPT_NO_IMAGE_SEARCH          0x00020000\n#define SYMOPT_SECURE                   0x00040000\n#define SYMOPT_NO_PROMPTS               0x00080000\n#define SYMOPT_OVERWRITE                0x00100000\n#define SYMOPT_IGNORE_IMAGEDIR          0x00200000\n\n#define SYMOPT_DEBUG                    0x80000000\n\ntypedef struct _IMAGEHLP_STACK_FRAME\n{\n    ULONG64     InstructionOffset;\n    ULONG64     ReturnOffset;\n    ULONG64     FrameOffset;\n    ULONG64     StackOffset;\n    ULONG64     BackingStoreOffset;\n    ULONG64     FuncTableEntry;\n    ULONG64     Params[4];\n    ULONG64     Reserved[5];\n    BOOL        Virtual;\n    ULONG       Reserved2;\n} IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME;\n\ntypedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT;\n\n#define DBHHEADER_DEBUGDIRS     0x1\ntypedef struct _DBGHELP_MODLOAD_DATA\n{\n    DWORD               ssize;\n    DWORD               ssig;\n    PVOID               data;\n    DWORD               size;\n    DWORD               flags;\n} MODLOAD_DATA, *PMODLOAD_DATA;\n\n/*************************\n *       MiniDUMP        *\n *************************/\n\n#include <pshpack4.h>\n/* DebugHelp */\n\n#define MINIDUMP_SIGNATURE 0x504D444D /* 'MDMP' */\n#define MINIDUMP_VERSION   (42899)\n\ntypedef DWORD   RVA;\ntypedef ULONG64 RVA64;\n\ntypedef enum _MINIDUMP_TYPE \n{\n    MiniDumpNormal                              = 0x0000,\n    MiniDumpWithDataSegs                        = 0x0001,\n    MiniDumpWithFullMemory                      = 0x0002,\n    MiniDumpWithHandleData                      = 0x0004,\n    MiniDumpFilterMemory                        = 0x0008,\n    MiniDumpScanMemory                          = 0x0010,\n    MiniDumpWithUnloadedModules                 = 0x0020,\n    MiniDumpWithIndirectlyReferencedMemory      = 0x0040,\n    MiniDumpFilterModulePaths                   = 0x0080,\n    MiniDumpWithProcessThreadData               = 0x0100,\n    MiniDumpWithPrivateReadWriteMemory          = 0x0200,\n    MiniDumpWithoutOptionalData                 = 0x0400,\n    MiniDumpWithFullMemoryInfo                  = 0x0800,\n    MiniDumpWithThreadInfo                      = 0x1000,\n    MiniDumpWithCodeSegs                        = 0x2000\n} MINIDUMP_TYPE;\n\ntypedef enum _MINIDUMP_CALLBACK_TYPE\n{\n    ModuleCallback,\n    ThreadCallback,\n    ThreadExCallback,\n    IncludeThreadCallback,\n    IncludeModuleCallback,\n    MemoryCallback,\n} MINIDUMP_CALLBACK_TYPE;\n\ntypedef struct _MINIDUMP_THREAD_CALLBACK\n{\n    ULONG                       ThreadId;\n    HANDLE                      ThreadHandle;\n    CONTEXT                     Context;\n    ULONG                       SizeOfContext;\n    ULONG64                     StackBase;\n    ULONG64                     StackEnd;\n} MINIDUMP_THREAD_CALLBACK, *PMINIDUMP_THREAD_CALLBACK;\n\ntypedef struct _MINIDUMP_THREAD_EX_CALLBACK \n{\n    ULONG                       ThreadId;\n    HANDLE                      ThreadHandle;\n    CONTEXT                     Context;\n    ULONG                       SizeOfContext;\n    ULONG64                     StackBase;\n    ULONG64                     StackEnd;\n    ULONG64                     BackingStoreBase;\n    ULONG64                     BackingStoreEnd;\n} MINIDUMP_THREAD_EX_CALLBACK, *PMINIDUMP_THREAD_EX_CALLBACK;\n\ntypedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK\n{\n    ULONG ThreadId;\n} MINIDUMP_INCLUDE_THREAD_CALLBACK, *PMINIDUMP_INCLUDE_THREAD_CALLBACK;\n\ntypedef enum _THREAD_WRITE_FLAGS \n{\n    ThreadWriteThread            = 0x0001,\n    ThreadWriteStack             = 0x0002,\n    ThreadWriteContext           = 0x0004,\n    ThreadWriteBackingStore      = 0x0008,\n    ThreadWriteInstructionWindow = 0x0010,\n    ThreadWriteThreadData        = 0x0020,\n    ThreadWriteThreadInfo        = 0x0040\n} THREAD_WRITE_FLAGS;\n\ntypedef struct _MINIDUMP_MODULE_CALLBACK \n{\n    PWCHAR                      FullPath;\n    ULONG64                     BaseOfImage;\n    ULONG                       SizeOfImage;\n    ULONG                       CheckSum;\n    ULONG                       TimeDateStamp;\n    VS_FIXEDFILEINFO            VersionInfo;\n    PVOID                       CvRecord;\n    ULONG                       SizeOfCvRecord;\n    PVOID                       MiscRecord;\n    ULONG                       SizeOfMiscRecord;\n} MINIDUMP_MODULE_CALLBACK, *PMINIDUMP_MODULE_CALLBACK;\n\ntypedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK \n{\n    ULONG64 BaseOfImage;\n} MINIDUMP_INCLUDE_MODULE_CALLBACK, *PMINIDUMP_INCLUDE_MODULE_CALLBACK;\n\ntypedef enum _MODULE_WRITE_FLAGS \n{\n    ModuleWriteModule        = 0x0001,\n    ModuleWriteDataSeg       = 0x0002,\n    ModuleWriteMiscRecord    = 0x0004,\n    ModuleWriteCvRecord      = 0x0008,\n    ModuleReferencedByMemory = 0x0010,\n    ModuleWriteTlsData       = 0x0020,\n    ModuleWriteCodeSegs      = 0x0040,\n} MODULE_WRITE_FLAGS;\n\ntypedef struct _MINIDUMP_CALLBACK_INPUT \n{\n    ULONG                       ProcessId;\n    HANDLE                      ProcessHandle;\n    ULONG                       CallbackType;\n    union \n    {\n        MINIDUMP_THREAD_CALLBACK        Thread;\n        MINIDUMP_THREAD_EX_CALLBACK     ThreadEx;\n        MINIDUMP_MODULE_CALLBACK        Module;\n        MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread;\n        MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule;\n    } DUMMYUNIONNAME;\n} MINIDUMP_CALLBACK_INPUT, *PMINIDUMP_CALLBACK_INPUT;\n\ntypedef struct _MINIDUMP_CALLBACK_OUTPUT\n{\n    union \n    {\n        ULONG                           ModuleWriteFlags;\n        ULONG                           ThreadWriteFlags;\n        struct\n        {\n            ULONG64                     MemoryBase;\n            ULONG                       MemorySize;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME;\n} MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT;\n\ntypedef BOOL (WINAPI* MINIDUMP_CALLBACK_ROUTINE)(PVOID, const PMINIDUMP_CALLBACK_INPUT, PMINIDUMP_CALLBACK_OUTPUT);\n\ntypedef struct _MINIDUMP_CALLBACK_INFORMATION \n{\n    MINIDUMP_CALLBACK_ROUTINE   CallbackRoutine;\n    void*                       CallbackParam;\n} MINIDUMP_CALLBACK_INFORMATION, *PMINIDUMP_CALLBACK_INFORMATION;\n\ntypedef struct _MINIDUMP_LOCATION_DESCRIPTOR \n{\n    ULONG                       DataSize;\n    RVA                         Rva;\n} MINIDUMP_LOCATION_DESCRIPTOR;\n\ntypedef struct _MINIDUMP_LOCATION_DESCRIPTOR64 \n{\n    ULONG64                     DataSize;\n    RVA64                       Rva;\n} MINIDUMP_LOCATION_DESCRIPTOR64;\n\ntypedef struct _MINIDUMP_DIRECTORY \n{\n    ULONG                       StreamType;\n    MINIDUMP_LOCATION_DESCRIPTOR Location;\n} MINIDUMP_DIRECTORY, *PMINIDUMP_DIRECTORY;\n\ntypedef struct _MINIDUMP_EXCEPTION\n{\n    ULONG                       ExceptionCode;\n    ULONG                       ExceptionFlags;\n    ULONG64                     ExceptionRecord;\n    ULONG64                     ExceptionAddress;\n    ULONG                       NumberParameters;\n    ULONG                        __unusedAlignment;\n    ULONG64                     ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];\n} MINIDUMP_EXCEPTION, *PMINIDUMP_EXCEPTION;\n\ntypedef struct _MINIDUMP_EXCEPTION_INFORMATION\n{\n    DWORD                       ThreadId;\n    PEXCEPTION_POINTERS         ExceptionPointers;\n    BOOL                        ClientPointers;\n} MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION;\n\ntypedef struct MINIDUMP_EXCEPTION_STREAM \n{\n    ULONG                       ThreadId;\n    ULONG                       __alignment;\n    MINIDUMP_EXCEPTION          ExceptionRecord;\n    MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;\n} MINIDUMP_EXCEPTION_STREAM, *PMINIDUMP_EXCEPTION_STREAM;\n\ntypedef struct _MINIDUMP_HEADER \n{\n    DWORD                       Signature;\n    DWORD                       Version;\n    DWORD                       NumberOfStreams;\n    RVA                         StreamDirectoryRva;\n    DWORD                       CheckSum;\n    union \n    {\n        DWORD                           Reserved;\n        DWORD                           TimeDateStamp;\n    } DUMMYUNIONNAME;\n    ULONG64                     Flags;\n} MINIDUMP_HEADER, *PMINIDUMP_HEADER;\n\ntypedef struct _MINIDUMP_MEMORY_DESCRIPTOR \n{\n    ULONG64                     StartOfMemoryRange;\n    MINIDUMP_LOCATION_DESCRIPTOR Memory;\n} MINIDUMP_MEMORY_DESCRIPTOR, *PMINIDUMP_MEMORY_DESCRIPTOR;\n\ntypedef struct _MINIDUMP_MEMORY_LIST\n{\n    ULONG                       NumberOfMemoryRanges;\n    MINIDUMP_MEMORY_DESCRIPTOR  MemoryRanges[1]; /* FIXME: 0-sized array not supported */\n} MINIDUMP_MEMORY_LIST, *PMINIDUMP_MEMORY_LIST;\n\n#define MINIDUMP_MISC1_PROCESS_ID       0x00000001\n#define MINIDUMP_MISC1_PROCESS_TIMES    0x00000002\n\ntypedef struct _MINIDUMP_MISC_INFO\n{\n    ULONG                       SizeOfInfo;\n    ULONG                       Flags1;\n    ULONG                       ProcessId;\n    ULONG                       ProcessCreateTime;\n    ULONG                       ProcessUserTime;\n    ULONG                       ProcessKernelTime;\n} MINIDUMP_MISC_INFO, *PMINIDUMP_MISC_INFO;\n\ntypedef struct _MINIDUMP_MODULE\n{\n    ULONG64                     BaseOfImage;\n    ULONG                       SizeOfImage;\n    ULONG                       CheckSum;\n    ULONG                       TimeDateStamp;\n    RVA                         ModuleNameRva;\n    VS_FIXEDFILEINFO            VersionInfo;\n    MINIDUMP_LOCATION_DESCRIPTOR CvRecord;\n    MINIDUMP_LOCATION_DESCRIPTOR MiscRecord;\n    ULONG64                     Reserved0;\n    ULONG64                     Reserved1;\n} MINIDUMP_MODULE, *PMINIDUMP_MODULE;\n\ntypedef struct _MINIDUMP_MODULE_LIST \n{\n    ULONG                       NumberOfModules;\n    MINIDUMP_MODULE             Modules[1]; /* FIXME: 0-sized array not supported */\n} MINIDUMP_MODULE_LIST, *PMINIDUMP_MODULE_LIST;\n\ntypedef struct _MINIDUMP_STRING\n{\n    ULONG                       Length;\n    WCHAR                       Buffer[1]; /* FIXME: O-sized array not supported */\n} MINIDUMP_STRING, *PMINIDUMP_STRING;\n\ntypedef struct _MINIDUMP_SYSTEM_INFO\n{\n    USHORT                      ProcessorArchitecture;\n    USHORT                      ProcessorLevel;\n    USHORT                      ProcessorRevision;\n    union\n    {\n        USHORT                          Reserved0;\n        struct\n        {\n            UCHAR                       NumberOfProcessors;\n            UCHAR                       ProductType;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME;\n\n    ULONG                       MajorVersion;\n    ULONG                       MinorVersion;\n    ULONG                       BuildNumber;\n    ULONG                       PlatformId;\n\n    RVA                         CSDVersionRva;\n    union\n    {\n        ULONG                           Reserved1;\n        struct\n        {\n            USHORT                      SuiteMask;\n            USHORT                      Reserved2;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME1;\n    union _CPU_INFORMATION \n    {\n        struct \n        {\n            ULONG                       VendorId[3];\n            ULONG                       VersionInformation;\n            ULONG                       FeatureInformation;\n            ULONG                       AMDExtendedCpuFeatures;\n        } X86CpuInfo;\n        struct \n        {\n            ULONG64                     ProcessorFeatures[2];\n        } OtherCpuInfo;\n    } Cpu;\n\n} MINIDUMP_SYSTEM_INFO, *PMINIDUMP_SYSTEM_INFO;\n\ntypedef struct _MINIDUMP_THREAD\n{\n    ULONG                       ThreadId;\n    ULONG                       SuspendCount;\n    ULONG                       PriorityClass;\n    ULONG                       Priority;\n    ULONG64                     Teb;\n    MINIDUMP_MEMORY_DESCRIPTOR  Stack;\n    MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;\n} MINIDUMP_THREAD, *PMINIDUMP_THREAD;\n\ntypedef struct _MINIDUMP_THREAD_LIST\n{\n    ULONG                       NumberOfThreads;\n    MINIDUMP_THREAD             Threads[1]; /* FIXME: no support of 0 sized array */\n} MINIDUMP_THREAD_LIST, *PMINIDUMP_THREAD_LIST;\n\ntypedef struct _MINIDUMP_USER_STREAM\n{\n    ULONG                       Type;\n    ULONG                       BufferSize;\n    void*                       Buffer;\n} MINIDUMP_USER_STREAM, *PMINIDUMP_USER_STREAM;\n\ntypedef struct _MINIDUMP_USER_STREAM_INFORMATION\n{\n    ULONG                       UserStreamCount;\n    PMINIDUMP_USER_STREAM       UserStreamArray;\n} MINIDUMP_USER_STREAM_INFORMATION, *PMINIDUMP_USER_STREAM_INFORMATION;\n\ntypedef enum _MINIDUMP_STREAM_TYPE\n{\n    UnusedStream                = 0,\n    ReservedStream0             = 1,\n    ReservedStream1             = 2,\n    ThreadListStream            = 3,\n    ModuleListStream            = 4,\n    MemoryListStream            = 5,\n    ExceptionStream             = 6,\n    SystemInfoStream            = 7,\n    ThreadExListStream          = 8,\n    Memory64ListStream          = 9,\n    CommentStreamA              = 10,\n    CommentStreamW              = 11,\n    HandleDataStream            = 12,\n    FunctionTableStream         = 13,\n    UnloadedModuleListStream    = 14,\n    MiscInfoStream              = 15,\n    MemoryInfoListStream        = 16,\n    ThreadInfoListStream        = 17,\n\n    LastReservedStream          = 0xffff\n} MINIDUMP_STREAM_TYPE;\n\nBOOL WINAPI MiniDumpWriteDump(HANDLE, DWORD, HANDLE, MINIDUMP_TYPE,\n                              const PMINIDUMP_EXCEPTION_INFORMATION,\n                              const PMINIDUMP_USER_STREAM_INFORMATION,\n                              const PMINIDUMP_CALLBACK_INFORMATION);\nBOOL WINAPI MiniDumpReadDumpStream(PVOID, ULONG, PMINIDUMP_DIRECTORY*, PVOID*,\n                                   ULONG*);\n\n#include <poppack.h>\n\n/*************************\n *    MODULE handling    *\n *************************/\n\n/* flags for SymLoadModuleEx */\n#define SLMFLAG_VIRTUAL         0x1\n#define SLMFLAG_NO_SYMBOLS      0x4\n\ntypedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK64)(PCSTR, DWORD64, ULONG, PVOID);\nBOOL   WINAPI EnumerateLoadedModules64(HANDLE, PENUMLOADED_MODULES_CALLBACK64, PVOID);\ntypedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACKW64)(PCWSTR, DWORD64, ULONG, PVOID);\nBOOL   WINAPI EnumerateLoadedModulesW64(HANDLE, PENUMLOADED_MODULES_CALLBACKW64, PVOID);\nBOOL WINAPI EnumerateLoadedModulesEx(HANDLE, PENUMLOADED_MODULES_CALLBACK64, PVOID);\nBOOL WINAPI EnumerateLoadedModulesExW(HANDLE, PENUMLOADED_MODULES_CALLBACKW64, PVOID);\ntypedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK64)(PCSTR, DWORD64, PVOID);\nBOOL    WINAPI SymEnumerateModules64(HANDLE, PSYM_ENUMMODULES_CALLBACK64, PVOID);\ntypedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACKW64)(PCWSTR, DWORD64, PVOID);\nBOOL    WINAPI SymEnumerateModulesW64(HANDLE, PSYM_ENUMMODULES_CALLBACKW64, PVOID);\nBOOL    WINAPI SymGetModuleInfo64(HANDLE, DWORD64, PIMAGEHLP_MODULE64);\nBOOL    WINAPI SymGetModuleInfoW64(HANDLE, DWORD64, PIMAGEHLP_MODULEW64);\nDWORD64 WINAPI SymGetModuleBase64(HANDLE, DWORD64);\nDWORD64 WINAPI SymLoadModule64(HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD);\nDWORD64 WINAPI SymLoadModuleEx(HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD,\n                               PMODLOAD_DATA, DWORD);\nDWORD64 WINAPI SymLoadModuleExW(HANDLE, HANDLE, PCWSTR, PCWSTR, DWORD64, DWORD,\n                                PMODLOAD_DATA, DWORD);\nBOOL    WINAPI SymUnloadModule64(HANDLE, DWORD64);\n\n/*************************\n *    Symbol Handling    *\n *************************/\n\n#define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT          1\n#define IMAGEHLP_SYMBOL_INFO_REGISTER              SYMF_REGISTER        /*  0x08 */\n#define IMAGEHLP_SYMBOL_INFO_REGRELATIVE           SYMF_REGREL          /*  0x10 */\n#define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE         SYMF_FRAMEREL        /*  0x20 */\n#define IMAGEHLP_SYMBOL_INFO_PARAMETER             SYMF_PARAMETER       /*  0x40 */\n#define IMAGEHLP_SYMBOL_INFO_LOCAL                 SYMF_LOCAL           /*  0x80 */\n#define IMAGEHLP_SYMBOL_INFO_CONSTANT              SYMF_CONSTANT        /* 0x100 */\n#define IMAGEHLP_SYMBOL_FUNCTION                   SYMF_FUNCTION        /* 0x800 */\n\n#define SYMFLAG_VALUEPRESENT     0x00000001\n#define SYMFLAG_REGISTER         0x00000008\n#define SYMFLAG_REGREL           0x00000010\n#define SYMFLAG_FRAMEREL         0x00000020\n#define SYMFLAG_PARAMETER        0x00000040\n#define SYMFLAG_LOCAL            0x00000080\n#define SYMFLAG_CONSTANT         0x00000100\n#define SYMFLAG_EXPORT           0x00000200\n#define SYMFLAG_FORWARDER        0x00000400\n#define SYMFLAG_FUNCTION         0x00000800\n#define SYMFLAG_VIRTUAL          0x00001000\n#define SYMFLAG_THUNK            0x00002000\n#define SYMFLAG_TLSREL           0x00004000\n#define SYMFLAG_SLOT             0x00008000\n\n#define MAX_SYM_NAME    2000\n\ntypedef struct _SYMBOL_INFO\n{\n    ULONG       SizeOfStruct;\n    ULONG       TypeIndex;\n    ULONG64     Reserved[2];\n    ULONG       Index;\n    ULONG       Size;\n    ULONG64     ModBase;\n    ULONG       Flags;\n    ULONG64     Value;\n    ULONG64     Address;\n    ULONG       Register;\n    ULONG       Scope;\n    ULONG       Tag;\n    ULONG       NameLen;\n    ULONG       MaxNameLen;\n    CHAR        Name[1];\n} SYMBOL_INFO, *PSYMBOL_INFO;\n\ntypedef struct _SYMBOL_INFOW\n{\n    ULONG       SizeOfStruct;\n    ULONG       TypeIndex;\n    ULONG64     Reserved[2];\n    ULONG       Index;\n    ULONG       Size;\n    ULONG64     ModBase;\n    ULONG       Flags;\n    ULONG64     Value;\n    ULONG64     Address;\n    ULONG       Register;\n    ULONG       Scope;\n    ULONG       Tag;\n    ULONG       NameLen;\n    ULONG       MaxNameLen;\n    WCHAR       Name[1];\n} SYMBOL_INFOW, *PSYMBOL_INFOW;\n\ntypedef struct _SYMBOL_INFO_PACKAGE\n{\n    SYMBOL_INFO si;\n    CHAR        name[MAX_SYM_NAME+1];\n} SYMBOL_INFO_PACKAGE, *PSYMBOL_INFO_PACKAGE;\n\ntypedef struct _SYMBOL_INFO_PACKAGEW\n{\n    SYMBOL_INFOW si;\n    WCHAR        name[MAX_SYM_NAME+1];\n} SYMBOL_INFO_PACKAGEW, *PSYMBOL_INFO_PACKAGEW;\n\ntypedef enum _IMAGEHLP_SYMBOL_TYPE_INFO \n{\n    TI_GET_SYMTAG,\n    TI_GET_SYMNAME,\n    TI_GET_LENGTH,\n    TI_GET_TYPE,\n    TI_GET_TYPEID,\n    TI_GET_BASETYPE,\n    TI_GET_ARRAYINDEXTYPEID,\n    TI_FINDCHILDREN,\n    TI_GET_DATAKIND,\n    TI_GET_ADDRESSOFFSET,\n    TI_GET_OFFSET,\n    TI_GET_VALUE,\n    TI_GET_COUNT,\n    TI_GET_CHILDRENCOUNT,\n    TI_GET_BITPOSITION,\n    TI_GET_VIRTUALBASECLASS,\n    TI_GET_VIRTUALTABLESHAPEID,\n    TI_GET_VIRTUALBASEPOINTEROFFSET,\n    TI_GET_CLASSPARENTID,\n    TI_GET_NESTED,\n    TI_GET_SYMINDEX,\n    TI_GET_LEXICALPARENT,\n    TI_GET_ADDRESS,\n    TI_GET_THISADJUST,\n    TI_GET_UDTKIND,\n    TI_IS_EQUIV_TO,\n    TI_GET_CALLING_CONVENTION,\n} IMAGEHLP_SYMBOL_TYPE_INFO;\n\n#define IMAGEHLP_GET_TYPE_INFO_UNCACHED            0x00000001\n#define IMAGEHLP_GET_TYPE_INFO_CHILDREN            0x00000002\ntypedef struct _IMAGEHLP_GET_TYPE_INFO_PARAMS\n{\n    ULONG       SizeOfStruct;\n    ULONG       Flags;\n    ULONG       NumIds;\n    PULONG      TypeIds;\n    ULONG64     TagFilter;\n    ULONG       NumReqs;\n    IMAGEHLP_SYMBOL_TYPE_INFO* ReqKinds;\n    PULONG_PTR  ReqOffsets;\n    PULONG      ReqSizes;\n    ULONG_PTR   ReqStride;\n    ULONG_PTR   BufferSize;\n    PVOID       Buffer;\n    ULONG       EntriesMatched;\n    ULONG       EntriesFilled;\n    ULONG64     TagsFound;\n    ULONG64     AllReqsValid;\n    ULONG       NumReqsValid;\n    PULONG64    ReqsValid;\n} IMAGEHLP_GET_TYPE_INFO_PARAMS, *PIMAGEHLP_GET_TYPE_INFO_PARAMS;\n\ntypedef struct _TI_FINDCHILDREN_PARAMS \n{\n    ULONG Count;\n    ULONG Start;\n    ULONG ChildId[1];\n} TI_FINDCHILDREN_PARAMS;\n\n#define UNDNAME_COMPLETE                 (0x0000)\n#define UNDNAME_NO_LEADING_UNDERSCORES   (0x0001)\n#define UNDNAME_NO_MS_KEYWORDS           (0x0002)\n#define UNDNAME_NO_FUNCTION_RETURNS      (0x0004)\n#define UNDNAME_NO_ALLOCATION_MODEL      (0x0008)\n#define UNDNAME_NO_ALLOCATION_LANGUAGE   (0x0010)\n#define UNDNAME_NO_MS_THISTYPE           (0x0020)\n#define UNDNAME_NO_CV_THISTYPE           (0x0040)\n#define UNDNAME_NO_THISTYPE              (0x0060)\n#define UNDNAME_NO_ACCESS_SPECIFIERS     (0x0080)\n#define UNDNAME_NO_THROW_SIGNATURES      (0x0100)\n#define UNDNAME_NO_MEMBER_TYPE           (0x0200)\n#define UNDNAME_NO_RETURN_UDT_MODEL      (0x0400)\n#define UNDNAME_32_BIT_DECODE            (0x0800)\n#define UNDNAME_NAME_ONLY                (0x1000)\n#define UNDNAME_NO_ARGUMENTS             (0x2000)\n#define UNDNAME_NO_SPECIAL_SYMS          (0x4000)\n\n#define SYMSEARCH_MASKOBJS              0x01\n#define SYMSEARCH_RECURSE               0x02\n#define SYMSEARCH_GLOBALSONLY           0x04\n\nBOOL WINAPI SymGetTypeInfo(HANDLE, DWORD64, ULONG, IMAGEHLP_SYMBOL_TYPE_INFO, PVOID);\nBOOL WINAPI SymGetTypeInfoEx(HANDLE, DWORD64, PIMAGEHLP_GET_TYPE_INFO_PARAMS);\ntypedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(PSYMBOL_INFO, ULONG, PVOID);\ntypedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACKW)(PSYMBOL_INFOW, ULONG, PVOID);\nBOOL WINAPI SymEnumTypes(HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID);\nBOOL WINAPI SymEnumTypesW(HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID);\nBOOL WINAPI SymFromAddr(HANDLE, DWORD64, DWORD64*, SYMBOL_INFO*);\nBOOL WINAPI SymFromAddrW(HANDLE, DWORD64, DWORD64*, SYMBOL_INFOW*);\nBOOL WINAPI SymFromToken(HANDLE, DWORD64, DWORD, PSYMBOL_INFO);\nBOOL WINAPI SymFromTokenW(HANDLE, DWORD64, DWORD, PSYMBOL_INFOW);\nBOOL WINAPI SymFromName(HANDLE, PCSTR, PSYMBOL_INFO);\nBOOL WINAPI SymFromNameW(HANDLE, PCWSTR, PSYMBOL_INFOW);\nBOOL WINAPI SymGetSymFromAddr64(HANDLE, DWORD64, PDWORD64, PIMAGEHLP_SYMBOL64);\nBOOL WINAPI SymGetSymFromName64(HANDLE, PCSTR, PIMAGEHLP_SYMBOL64);\nBOOL WINAPI SymGetTypeFromName(HANDLE, ULONG64, PCSTR, PSYMBOL_INFO);\nBOOL WINAPI SymGetTypeFromNameW(HANDLE, ULONG64, PCWSTR, PSYMBOL_INFOW);\nBOOL WINAPI SymGetSymNext64(HANDLE, PIMAGEHLP_SYMBOL64);\nBOOL WINAPI SymGetSymNextW64(HANDLE, PIMAGEHLP_SYMBOLW64);\nBOOL WINAPI SymGetSymPrev64(HANDLE, PIMAGEHLP_SYMBOL64);\nBOOL WINAPI SymGetSymPrevW64(HANDLE, PIMAGEHLP_SYMBOLW64);\nBOOL WINAPI SymEnumSym(HANDLE,ULONG64,PSYM_ENUMERATESYMBOLS_CALLBACK,PVOID);\nBOOL WINAPI SymEnumSymbols(HANDLE, ULONG64, PCSTR, PSYM_ENUMERATESYMBOLS_CALLBACK,\n                           PVOID);\nBOOL WINAPI SymEnumSymbolsW(HANDLE, ULONG64, PCWSTR, PSYM_ENUMERATESYMBOLS_CALLBACKW,\n                            PVOID);\ntypedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)(PCSTR, DWORD64, ULONG, PVOID);\ntypedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)(PCWSTR, DWORD64, ULONG, PVOID);\nBOOL WINAPI SymEnumerateSymbols64(HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64, PVOID);\nBOOL WINAPI SymEnumerateSymbolsW64(HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64W, PVOID);\nBOOL WINAPI SymEnumSymbolsForAddr(HANDLE, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID);\nBOOL WINAPI SymEnumSymbolsForAddrW(HANDLE, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID);\ntypedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)(HANDLE, ULONG, ULONG64, ULONG64);\nBOOL WINAPI SymRegisterCallback64(HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64);\nBOOL WINAPI SymRegisterCallbackW64(HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64);\nBOOL WINAPI SymUnDName64(PIMAGEHLP_SYMBOL64, PSTR, DWORD);\nBOOL WINAPI SymMatchString(PCSTR, PCSTR, BOOL);\nBOOL WINAPI SymMatchStringA(PCSTR, PCSTR, BOOL);\nBOOL WINAPI SymMatchStringW(PCWSTR, PCWSTR, BOOL);\nBOOL WINAPI SymSearch(HANDLE, ULONG64, DWORD, DWORD, PCSTR, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID, DWORD);\nBOOL WINAPI SymSearchW(HANDLE, ULONG64, DWORD, DWORD, PCWSTR, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID, DWORD);\nDWORD WINAPI UnDecorateSymbolName(PCSTR, PSTR, DWORD, DWORD);\nDWORD WINAPI UnDecorateSymbolNameW(PCWSTR, PWSTR, DWORD, DWORD);\nBOOL WINAPI SymGetScope(HANDLE, ULONG64, DWORD, PSYMBOL_INFO);\nBOOL WINAPI SymGetScopeW(HANDLE, ULONG64, DWORD, PSYMBOL_INFOW);\nBOOL WINAPI SymFromIndex(HANDLE, ULONG64, DWORD, PSYMBOL_INFO);\nBOOL WINAPI SymFromIndexW(HANDLE, ULONG64, DWORD, PSYMBOL_INFOW);\nBOOL WINAPI SymAddSymbol(HANDLE, ULONG64, PCSTR, DWORD64, DWORD, DWORD);\nBOOL WINAPI SymAddSymbolW(HANDLE, ULONG64, PCWSTR, DWORD64, DWORD, DWORD);\nBOOL WINAPI SymDeleteSymbol(HANDLE, ULONG64, PCSTR, DWORD64, DWORD);\nBOOL WINAPI SymDeleteSymbolW(HANDLE, ULONG64, PCWSTR, DWORD64, DWORD);\n\n/*************************\n *      Source Files     *\n *************************/\ntypedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACK)(PSOURCEFILE, PVOID);\ntypedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACKW)(PSOURCEFILEW, PVOID);\n\nBOOL WINAPI SymEnumSourceFiles(HANDLE, ULONG64, PCSTR, PSYM_ENUMSOURCEFILES_CALLBACK,\n                               PVOID);\nBOOL WINAPI SymEnumSourceFilesW(HANDLE, ULONG64, PCWSTR, PSYM_ENUMSOURCEFILES_CALLBACKW, PVOID);\nBOOL WINAPI SymGetLineFromAddr64(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINE64);\nBOOL WINAPI SymGetLineFromAddrW64(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINEW64);\nBOOL WINAPI SymGetLinePrev64(HANDLE, PIMAGEHLP_LINE64);\nBOOL WINAPI SymGetLinePrevW64(HANDLE, PIMAGEHLP_LINEW64);\nBOOL WINAPI SymGetLineNext64(HANDLE, PIMAGEHLP_LINE64);\nBOOL WINAPI SymGetLineNextW64(HANDLE, PIMAGEHLP_LINEW64);\nBOOL WINAPI SymGetLineFromName64(HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE64);\nBOOL WINAPI SymGetLineFromNameW64(HANDLE, PCWSTR, PCWSTR, DWORD, PLONG, PIMAGEHLP_LINEW64);\nULONG WINAPI SymGetFileLineOffsets64(HANDLE, PCSTR, PCSTR, PDWORD64, ULONG);\nBOOL WINAPI SymGetSourceFile(HANDLE, ULONG64, PCSTR, PCSTR, PSTR, DWORD);\nBOOL WINAPI SymGetSourceFileW(HANDLE, ULONG64, PCWSTR, PCWSTR, PWSTR, DWORD);\nBOOL WINAPI SymGetSourceFileToken(HANDLE, ULONG64, PCSTR, PVOID*, DWORD*);\nBOOL WINAPI SymGetSourceFileTokenW(HANDLE, ULONG64, PCWSTR, PVOID*, DWORD*);\nBOOL WINAPI SymGetSourceFileFromToken(HANDLE, PVOID, PCSTR, PSTR, DWORD);\nBOOL WINAPI SymGetSourceFileFromTokenW(HANDLE, PVOID, PCWSTR, PWSTR, DWORD);\nBOOL WINAPI SymGetSourceVarFromToken(HANDLE, PVOID, PCSTR, PCSTR, PSTR, DWORD);\nBOOL WINAPI SymGetSourceVarFromTokenW(HANDLE, PVOID, PCWSTR, PCWSTR, PWSTR, DWORD);\n\ntypedef struct _SRCCODEINFO\n{\n    DWORD       SizeOfStruct;\n    PVOID       Key;\n    DWORD64     ModBase;\n    CHAR        Obj[MAX_PATH+1];\n    CHAR        FileName[MAX_PATH+1];\n    DWORD       LineNumber;\n    DWORD64     Address;\n} SRCCODEINFO, *PSRCCODEINFO;\n\ntypedef struct _SRCCODEINFOW\n{\n    DWORD       SizeOfStruct;\n    PVOID       Key;\n    DWORD64     ModBase;\n    WCHAR       Obj[MAX_PATH+1];\n    WCHAR       FileName[MAX_PATH+1];\n    DWORD       LineNumber;\n    DWORD64     Address;\n} SRCCODEINFOW, *PSRCCODEINFOW;\n\ntypedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACK)(PSRCCODEINFO, PVOID);\ntypedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACKW)(PSRCCODEINFOW, PVOID);\nBOOL WINAPI SymEnumLines(HANDLE, ULONG64, PCSTR, PCSTR, PSYM_ENUMLINES_CALLBACK, PVOID);\nBOOL WINAPI SymEnumLinesW(HANDLE, ULONG64, PCWSTR, PCWSTR, PSYM_ENUMLINES_CALLBACKW, PVOID);\nBOOL WINAPI SymEnumSourceLines(HANDLE, ULONG64, PCSTR, PCSTR, DWORD, DWORD, PSYM_ENUMLINES_CALLBACK, PVOID);\nBOOL WINAPI SymEnumSourceLinesW(HANDLE, ULONG64, PCWSTR, PCWSTR, DWORD, DWORD, PSYM_ENUMLINES_CALLBACKW, PVOID);\n\n/*************************\n * File & image handling *\n *************************/\nBOOL WINAPI SymInitialize(HANDLE, PCSTR, BOOL);\nBOOL WINAPI SymInitializeW(HANDLE, PCWSTR, BOOL);\nBOOL WINAPI SymCleanup(HANDLE);\n\nHANDLE WINAPI FindDebugInfoFile(PCSTR, PCSTR, PSTR);\ntypedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(HANDLE, PCSTR, PVOID);\ntypedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACKW)(HANDLE, PCWSTR, PVOID);\nHANDLE WINAPI FindDebugInfoFileEx(PCSTR, PCSTR, PSTR, PFIND_DEBUG_FILE_CALLBACK, PVOID);\nHANDLE WINAPI FindDebugInfoFileExW(PCWSTR, PCWSTR, PWSTR, PFIND_DEBUG_FILE_CALLBACKW, PVOID);\nHANDLE WINAPI SymFindDebugInfoFile(HANDLE, PCSTR, PSTR, PFIND_DEBUG_FILE_CALLBACK, PVOID);\nHANDLE WINAPI SymFindDebugInfoFileW(HANDLE, PCWSTR, PWSTR, PFIND_DEBUG_FILE_CALLBACKW, PVOID);\ntypedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACK)(PCSTR, PVOID);\ntypedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACKW)(PCWSTR, PVOID);\nBOOL WINAPI FindFileInPath(HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD,\n                           PSTR, PFINDFILEINPATHCALLBACK, PVOID);\nBOOL WINAPI SymFindFileInPath(HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD,\n                              PSTR, PFINDFILEINPATHCALLBACK, PVOID);\nBOOL WINAPI SymFindFileInPathW(HANDLE, PCWSTR, PCWSTR, PVOID, DWORD, DWORD, DWORD,\n                              PWSTR, PFINDFILEINPATHCALLBACKW, PVOID);\nHANDLE WINAPI FindExecutableImage(PCSTR, PCSTR, PSTR);\ntypedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACK)(HANDLE, PCSTR, PVOID);\ntypedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACKW)(HANDLE, PCWSTR, PVOID);\nHANDLE WINAPI FindExecutableImageEx(PCSTR, PCSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID);\nHANDLE WINAPI FindExecutableImageExW(PCWSTR, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID);\nHANDLE WINAPI SymFindExecutableImage(HANDLE, PCSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID);\nHANDLE WINAPI SymFindExecutableImageW(HANDLE, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID);\nPIMAGE_NT_HEADERS WINAPI ImageNtHeader(PVOID);\nPVOID WINAPI ImageDirectoryEntryToDataEx(PVOID, BOOLEAN, USHORT, PULONG,\n                                         PIMAGE_SECTION_HEADER *);\nPVOID WINAPI ImageDirectoryEntryToData(PVOID, BOOLEAN, USHORT, PULONG);\nPIMAGE_SECTION_HEADER WINAPI ImageRvaToSection(PIMAGE_NT_HEADERS, PVOID, ULONG);\nPVOID WINAPI ImageRvaToVa(PIMAGE_NT_HEADERS, PVOID, ULONG, PIMAGE_SECTION_HEADER*);\nBOOL WINAPI SymGetSearchPath(HANDLE, PSTR, DWORD);\nBOOL WINAPI SymGetSearchPathW(HANDLE, PWSTR, DWORD);\nBOOL WINAPI SymSetSearchPath(HANDLE, PCSTR);\nBOOL WINAPI SymSetSearchPathW(HANDLE, PCWSTR);\nDWORD WINAPI GetTimestampForLoadedLibrary(HMODULE);\nBOOL WINAPI MakeSureDirectoryPathExists(PCSTR);\nBOOL WINAPI SearchTreeForFile(PCSTR, PCSTR, PSTR);\nBOOL WINAPI SearchTreeForFileW(PCWSTR, PCWSTR, PWSTR);\ntypedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACK)(PCSTR, PVOID);\ntypedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACKW)(PCWSTR, PVOID);\nBOOL WINAPI EnumDirTree(HANDLE, PCSTR, PCSTR, PSTR, PENUMDIRTREE_CALLBACK, PVOID);\nBOOL WINAPI EnumDirTreeW(HANDLE, PCWSTR, PCWSTR, PWSTR, PENUMDIRTREE_CALLBACKW, PVOID);\nBOOL WINAPI SymMatchFileName(PCSTR, PCSTR, PSTR*, PSTR*);\nBOOL WINAPI SymMatchFileNameW(PCWSTR, PCWSTR, PWSTR*, PWSTR*);\nPCHAR WINAPI SymSetHomeDirectory(HANDLE, PCSTR);\nPWSTR WINAPI SymSetHomeDirectoryW(HANDLE, PCWSTR);\nPCHAR WINAPI SymGetHomeDirectory(DWORD, PSTR, size_t);\nPWSTR WINAPI SymGetHomeDirectoryW(DWORD, PWSTR, size_t);\n#define hdBase  0\n#define hdSym   1\n#define hdSrc   2\n#define hdMax   3\n\n/*************************\n *   Context management  *\n *************************/\nBOOL WINAPI SymSetContext(HANDLE, PIMAGEHLP_STACK_FRAME, PIMAGEHLP_CONTEXT);\n\n\n/*************************\n *    Stack management   *\n *************************/\n\n#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)\n#define KDHELP KDHELP64\n#define PKDHELP PKDHELP64\n#else\ntypedef struct _KDHELP\n{\n    DWORD       Thread;\n    DWORD       ThCallbackStack;\n    DWORD       NextCallback;\n    DWORD       FramePointer;\n    DWORD       KiCallUserMode;\n    DWORD       KeUserCallbackDispatcher;\n    DWORD       SystemRangeStart;\n} KDHELP, *PKDHELP;\n#endif\n\ntypedef struct _KDHELP64\n{\n    DWORD64     Thread;\n    DWORD       ThCallbackStack;\n    DWORD       ThCallbackBStore;\n    DWORD       NextCallback;\n    DWORD       FramePointer;\n    DWORD64     KiCallUserMode;\n    DWORD64     KeUserCallbackDispatcher;\n    DWORD64     SystemRangeStart;\n    DWORD64     Reserved[8];\n} KDHELP64, *PKDHELP64;\n\n#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)\n#define STACKFRAME STACKFRAME64\n#define LPSTACKFRAME LPSTACKFRAME64\n#else\ntypedef struct _STACKFRAME\n{\n    ADDRESS     AddrPC;\n    ADDRESS     AddrReturn;\n    ADDRESS     AddrFrame;\n    ADDRESS     AddrStack;\n    PVOID       FuncTableEntry;\n    DWORD       Params[4];\n    BOOL        Far;\n    BOOL        Virtual;\n    DWORD       Reserved[3];\n    KDHELP      KdHelp;\n    ADDRESS     AddrBStore;\n} STACKFRAME, *LPSTACKFRAME;\n#endif\n\ntypedef struct _STACKFRAME64\n{\n    ADDRESS64   AddrPC;\n    ADDRESS64   AddrReturn;\n    ADDRESS64   AddrFrame;\n    ADDRESS64   AddrStack;\n    ADDRESS64   AddrBStore;\n    PVOID       FuncTableEntry;\n    DWORD64     Params[4];\n    BOOL        Far;\n    BOOL        Virtual;\n    DWORD64     Reserved[3];\n    KDHELP64    KdHelp;\n} STACKFRAME64, *LPSTACKFRAME64;\n\ntypedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE64)\n    (HANDLE, DWORD64, PVOID, DWORD, PDWORD);\ntypedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE64)(HANDLE, DWORD64);\ntypedef DWORD64 (CALLBACK *PGET_MODULE_BASE_ROUTINE64)(HANDLE, DWORD64);\ntypedef DWORD64 (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE64)(HANDLE, HANDLE, LPADDRESS64);\nBOOL WINAPI StackWalk64(DWORD, HANDLE, HANDLE, LPSTACKFRAME64, PVOID,\n                        PREAD_PROCESS_MEMORY_ROUTINE64,\n                        PFUNCTION_TABLE_ACCESS_ROUTINE64,\n                        PGET_MODULE_BASE_ROUTINE64,\n                        PTRANSLATE_ADDRESS_ROUTINE64);\n\nPVOID WINAPI SymFunctionTableAccess64(HANDLE, DWORD64);\n\ntypedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)(HANDLE, ULONG64, ULONG64);\n\nBOOL WINAPI SymRegisterFunctionEntryCallback64(HANDLE, PSYMBOL_FUNCENTRY_CALLBACK64, ULONG64);\n\n/*************************\n * Version, global stuff *\n *************************/\n\n#define API_VERSION_NUMBER 9\n\ntypedef struct API_VERSION\n{\n    USHORT  MajorVersion;\n    USHORT  MinorVersion;\n    USHORT  Revision;\n    USHORT  Reserved;\n} API_VERSION, *LPAPI_VERSION;\n\nLPAPI_VERSION WINAPI ImagehlpApiVersion(void);\nLPAPI_VERSION WINAPI ImagehlpApiVersionEx(LPAPI_VERSION);\n\ntypedef struct _IMAGE_DEBUG_INFORMATION\n{\n    LIST_ENTRY                  List;\n    DWORD                       ReservedSize;\n    PVOID                       ReservedMappedBase;\n    USHORT                      ReservedMachine;\n    USHORT                      ReservedCharacteristics;\n    DWORD                       ReservedCheckSum;\n    DWORD                       ImageBase;\n    DWORD                       SizeOfImage;\n    DWORD                       ReservedNumberOfSections;\n    PIMAGE_SECTION_HEADER       ReservedSections;\n    DWORD                       ReservedExportedNamesSize;\n    PSTR                        ReservedExportedNames;\n    DWORD                       ReservedNumberOfFunctionTableEntries;\n    PIMAGE_FUNCTION_ENTRY       ReservedFunctionTableEntries;\n    DWORD                       ReservedLowestFunctionStartingAddress;\n    DWORD                       ReservedHighestFunctionEndingAddress;\n    DWORD                       ReservedNumberOfFpoTableEntries;\n    PFPO_DATA                   ReservedFpoTableEntries;\n    DWORD                       SizeOfCoffSymbols;\n    PIMAGE_COFF_SYMBOLS_HEADER  CoffSymbols;\n    DWORD                       ReservedSizeOfCodeViewSymbols;\n    PVOID                       ReservedCodeViewSymbols;\n    PSTR                        ImageFilePath;\n    PSTR                        ImageFileName;\n    PSTR                        ReservedDebugFilePath;\n    DWORD                       ReservedTimeDateStamp;\n    BOOL                        ReservedRomImage;\n    PIMAGE_DEBUG_DIRECTORY      ReservedDebugDirectory;\n    DWORD                       ReservedNumberOfDebugDirectories;\n    DWORD                       ReservedOriginalFunctionTableBaseAddress;\n    DWORD                       Reserved[ 2 ];\n} IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION;\n\n\nPIMAGE_DEBUG_INFORMATION WINAPI MapDebugInformation(HANDLE, PCSTR, PCSTR, ULONG);\n\nBOOL WINAPI UnmapDebugInformation(PIMAGE_DEBUG_INFORMATION);\n\nDWORD   WINAPI  SymGetOptions(void);\nDWORD   WINAPI  SymSetOptions(DWORD);\n\nBOOL WINAPI SymSetParentWindow(HWND);\n\n/*************************\n * Version, global stuff *\n *************************/\n\ntypedef BOOL     (WINAPI* PSYMBOLSERVERPROC)(PCSTR, PCSTR, PVOID, DWORD, DWORD, PSTR);\ntypedef BOOL     (WINAPI* PSYMBOLSERVERPROCA)(PCSTR, PCSTR, PVOID, DWORD, DWORD, PSTR);\ntypedef BOOL     (WINAPI* PSYMBOLSERVERPROCW)(PCWSTR, PCWSTR, PVOID, DWORD, DWORD, PWSTR);\ntypedef BOOL     (WINAPI* PSYMBOLSERVEROPENPROC)(void);\ntypedef BOOL     (WINAPI* PSYMBOLSERVERCLOSEPROC)(void);\ntypedef BOOL     (WINAPI* PSYMBOLSERVERSETOPTIONSPROC)(UINT_PTR, ULONG64);\ntypedef BOOL     (CALLBACK* PSYMBOLSERVERCALLBACKPROC)(UINT_PTR, ULONG64, ULONG64);\ntypedef UINT_PTR (WINAPI* PSYMBOLSERVERGETOPTIONSPROC)(void);\ntypedef BOOL     (WINAPI* PSYMBOLSERVERPINGPROC)(PCSTR);\ntypedef BOOL     (WINAPI* PSYMBOLSERVERPINGPROCA)(PCSTR);\ntypedef BOOL     (WINAPI* PSYMBOLSERVERPINGPROCW)(PCWSTR);\n\n#define SSRVOPT_CALLBACK            0x0001\n#define SSRVOPT_DWORD               0x0002\n#define SSRVOPT_DWORDPTR            0x0004\n#define SSRVOPT_GUIDPTR             0x0008\n#define SSRVOPT_OLDGUIDPTR          0x0010\n#define SSRVOPT_UNATTENDED          0x0020\n#define SSRVOPT_NOCOPY              0x0040\n#define SSRVOPT_PARENTWIN           0x0080\n#define SSRVOPT_PARAMTYPE           0x0100\n#define SSRVOPT_SECURE              0x0200\n#define SSRVOPT_TRACE               0x0400\n#define SSRVOPT_SETCONTEXT          0x0800\n#define SSRVOPT_PROXY               0x1000\n#define SSRVOPT_DOWNSTREAM_STORE    0x2000\n#define SSRVOPT_RESET               ((ULONG_PTR)-1)\n\n#define SSRVACTION_TRACE        1\n#define SSRVACTION_QUERYCANCEL  2\n#define SSRVACTION_EVENT        3\n\n/* 32-bit functions */\n\n#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)\n\n#define PENUMLOADED_MODULES_CALLBACK PENUMLOADED_MODULES_CALLBACK64\n#define PFUNCTION_TABLE_ACCESS_ROUTINE PFUNCTION_TABLE_ACCESS_ROUTINE64\n#define PGET_MODULE_BASE_ROUTINE PGET_MODULE_BASE_ROUTINE64\n#define PREAD_PROCESS_MEMORY_ROUTINE PREAD_PROCESS_MEMORY_ROUTINE64\n#define PSYMBOL_FUNCENTRY_CALLBACK PSYMBOL_FUNCENTRY_CALLBACK64\n#define PSYMBOL_REGISTERED_CALLBACK PSYMBOL_REGISTERED_CALLBACK64\n#define PSYM_ENUMMODULES_CALLBACK PSYM_ENUMMODULES_CALLBACK64\n#define PSYM_ENUMSYMBOLS_CALLBACK PSYM_ENUMSYMBOLS_CALLBACK64\n#define PSYM_ENUMSYMBOLS_CALLBACKW PSYM_ENUMSYMBOLS_CALLBACKW64\n#define PTRANSLATE_ADDRESS_ROUTINE PTRANSLATE_ADDRESS_ROUTINE64\n\n#define EnumerateLoadedModules EnumerateLoadedModules64\n#define StackWalk StackWalk64\n#define SymEnumerateModules SymEnumerateModules64\n#define SymEnumerateSymbols SymEnumerateSymbols64\n#define SymEnumerateSymbolsW SymEnumerateSymbolsW64\n#define SymFunctionTableAccess SymFunctionTableAccess64\n#define SymGetLineFromAddr SymGetLineFromAddr64\n#define SymGetLineFromAddrW SymGetLineFromAddrW64\n#define SymGetLineFromName SymGetLineFromName64\n#define SymGetLineNext SymGetLineNext64\n#define SymGetLineNextW SymGetLineNextW64\n#define SymGetLinePrev SymGetLinePrev64\n#define SymGetLinePrevW SymGetLinePrevW64\n#define SymGetModuleBase SymGetModuleBase64\n#define SymGetModuleInfo SymGetModuleInfo64\n#define SymGetModuleInfoW SymGetModuleInfoW64\n#define SymGetSymFromAddr SymGetSymFromAddr64\n#define SymGetSymFromName SymGetSymFromName64\n#define SymGetSymNext SymGetSymNext64\n#define SymGetSymNextW SymGetSymNextW64\n#define SymGetSymPrev SymGetSymPrev64\n#define SymGetSymPrevW SymGetSymPrevW64\n#define SymLoadModule SymLoadModule64\n#define SymRegisterCallback SymRegisterCallback64\n#define SymRegisterFunctionEntryCallback SymRegisterFunctionEntryCallback64\n#define SymUnDName SymUnDName64\n#define SymUnloadModule SymUnloadModule64\n\n#else\n\ntypedef BOOL  (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(PCSTR, ULONG, ULONG, PVOID);\ntypedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE)(HANDLE, DWORD);\ntypedef DWORD (CALLBACK *PGET_MODULE_BASE_ROUTINE)(HANDLE, DWORD);\ntypedef BOOL  (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE)(HANDLE, DWORD, PVOID, DWORD, PDWORD);\ntypedef BOOL  (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(PCSTR, ULONG, PVOID);\ntypedef BOOL  (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(PCSTR, ULONG, ULONG, PVOID);\ntypedef BOOL  (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)(PCWSTR, ULONG, ULONG, PVOID);\ntypedef BOOL  (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(HANDLE, ULONG, PVOID, PVOID);\ntypedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)(HANDLE, DWORD, PVOID);\ntypedef DWORD (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE)(HANDLE, HANDLE, LPADDRESS);\n\nBOOL    WINAPI EnumerateLoadedModules(HANDLE, PENUMLOADED_MODULES_CALLBACK, PVOID);\nBOOL    WINAPI StackWalk(DWORD, HANDLE, HANDLE, LPSTACKFRAME, PVOID, PREAD_PROCESS_MEMORY_ROUTINE, PFUNCTION_TABLE_ACCESS_ROUTINE, PGET_MODULE_BASE_ROUTINE, PTRANSLATE_ADDRESS_ROUTINE);\nBOOL    WINAPI SymEnumerateModules(HANDLE, PSYM_ENUMMODULES_CALLBACK, PVOID);\nBOOL    WINAPI SymEnumerateSymbols(HANDLE, ULONG, PSYM_ENUMSYMBOLS_CALLBACK, PVOID);\nBOOL    WINAPI SymEnumerateSymbolsW(HANDLE, ULONG, PSYM_ENUMSYMBOLS_CALLBACKW, PVOID);\nPVOID   WINAPI SymFunctionTableAccess(HANDLE, DWORD);\nBOOL    WINAPI SymGetLineFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_LINE);\nBOOL    WINAPI SymGetLineFromAddrW(HANDLE, DWORD, PDWORD, PIMAGEHLP_LINEW);\nBOOL    WINAPI SymGetLineFromName(HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE);\nBOOL    WINAPI SymGetLineNext(HANDLE, PIMAGEHLP_LINE);\nBOOL    WINAPI SymGetLineNextW(HANDLE, PIMAGEHLP_LINEW);\nBOOL    WINAPI SymGetLinePrev(HANDLE, PIMAGEHLP_LINE);\nBOOL    WINAPI SymGetLinePrevW(HANDLE, PIMAGEHLP_LINEW);\nDWORD   WINAPI SymGetModuleBase(HANDLE, DWORD);\nBOOL    WINAPI SymGetModuleInfo(HANDLE, DWORD, PIMAGEHLP_MODULE);\nBOOL    WINAPI SymGetModuleInfoW(HANDLE, DWORD, PIMAGEHLP_MODULEW);\nBOOL    WINAPI SymGetSymFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_SYMBOL);\nBOOL    WINAPI SymGetSymFromName(HANDLE, PCSTR, PIMAGEHLP_SYMBOL);\nBOOL    WINAPI SymGetSymNext(HANDLE, PIMAGEHLP_SYMBOL);\nBOOL    WINAPI SymGetSymNextW(HANDLE, PIMAGEHLP_SYMBOLW);\nBOOL    WINAPI SymGetSymPrev(HANDLE, PIMAGEHLP_SYMBOL);\nBOOL    WINAPI SymGetSymPrevW(HANDLE, PIMAGEHLP_SYMBOLW);\nDWORD   WINAPI SymLoadModule(HANDLE, HANDLE, PCSTR, PCSTR, DWORD, DWORD);\nBOOL    WINAPI SymRegisterCallback(HANDLE, PSYMBOL_REGISTERED_CALLBACK, PVOID);\nBOOL    WINAPI SymRegisterFunctionEntryCallback(HANDLE, PSYMBOL_FUNCENTRY_CALLBACK, PVOID);\nBOOL    WINAPI SymRefreshModuleList(HANDLE);\nBOOL    WINAPI SymUnDName(PIMAGEHLP_SYMBOL, PSTR, DWORD);\nBOOL    WINAPI SymUnloadModule(HANDLE, DWORD);\n\n#endif\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif  /* __WINE_DBGHELP_H */\n"
  },
  {
    "path": "wine/windows/dbinit.idl",
    "content": "/*\n * Copyright (C) 2006 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    object,\n    uuid(0c733a8b-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface IDBInitialize : IUnknown {\n    [local] HRESULT Initialize();\n    [call_as(Initialize)] HRESULT RemoteInitialize( [out] IErrorInfo **ppErrorInfoRem );\n    [local] HRESULT Uninitialize();\n    [call_as(Uninitialize)] HRESULT RemoteUninitialize( [out] IErrorInfo **ppErrorInfoRem );\n}\n"
  },
  {
    "path": "wine/windows/dbprop.idl",
    "content": "/*\n * Copyright (C) 2006 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    object,\n    uuid(0c733a8a-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface IDBProperties : IUnknown {\n    [local] HRESULT GetProperties(\n             [in] ULONG cPropertyIDSets,\n             [in, size_is(cPropertyIDSets)] const DBPROPIDSET rgPropertyIDSets[],\n             [in, out] ULONG *pcPropertySets,\n             [out, size_is(,*pcPropertySets)] DBPROPSET **prgPropertySets);\n\n    [call_as(GetProperties)] HRESULT RemoteGetProperties(\n             [in] ULONG cPropertyIDSets,\n             [in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets,\n             [in, out] ULONG *pcPropertySets,\n             [out, size_is(,*pcPropertySets)] DBPROPSET **prgPropertySets,\n             [out] IErrorInfo **ppErrorInfoRem);\n\n    [local] HRESULT GetPropertyInfo(\n             [in] ULONG cPropertyIDSets,\n             [in, size_is(cPropertyIDSets)] const DBPROPIDSET rgPropertyIDSets[],\n             [in, out] ULONG *pcPropertyInfoSets,\n             [out, size_is(,*pcPropertyInfoSets)] DBPROPINFOSET **prgPropertyInfoSets,\n             [out, annotation(\"__deref_out_z_opt\")] OLECHAR **ppDescBuffer);\n\n    [call_as(GetPropertyInfo)] HRESULT RemoteGetPropertyInfo(\n             [in] ULONG cPropertyIDSets,\n             [in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets,\n             [in, out] ULONG *pcPropertyInfoSets,\n             [out, size_is(,*pcPropertyInfoSets)] DBPROPINFOSET **prgPropertyInfoSets,\n             [in, out] ULONG *pcOffsets,\n             [out, size_is(,*pcOffsets)] DBBYTEOFFSET **prgDescOffsets,\n             [in, out] ULONG *pcbDescBuffer,\n             [in, out, unique, size_is(,*pcbDescBuffer)] OLECHAR **ppDescBuffer,\n             [out] IErrorInfo **ppErrorInfoRem);\n\n    [local] HRESULT SetProperties(\n             [in] ULONG cPropertySets,\n             [in, out, size_is(cPropertySets)] DBPROPSET rgPropertySets[]);\n\n    [call_as(SetProperties)] HRESULT RemoteSetProperties(\n             [in] ULONG cPropertySets,\n             [in, unique, size_is(cPropertySets)] DBPROPSET *rgPropertySets,\n             [in] ULONG cTotalProps,\n             [out, size_is(cTotalProps)] DBPROPSTATUS *rgPropStatus,\n             [out] IErrorInfo **ppErrorInfoRem);\n}\n"
  },
  {
    "path": "wine/windows/dbs.idl",
    "content": "/*\n * Copyright (C) 2006 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\ntypedef DWORD DBKIND;\n\nenum DBKINDENUM {\n    DBKIND_GUID_NAME,\n    DBKIND_GUID_PROPID,\n    DBKIND_NAME,\n    DBKIND_PGUID_NAME,\n    DBKIND_PGUID_PROPID,\n    DBKIND_PROPID,\n    DBKIND_GUID,\n};\n\ntypedef struct tagDBID {\n    [switch_type(DBKIND), switch_is(eKind)] union\n    {\n    [case(DBKIND_GUID_NAME, DBKIND_GUID_PROPID, DBKIND_GUID, DBKIND_NAME, DBKIND_PROPID)]\n        GUID guid;\n    [case(DBKIND_PGUID_NAME, DBKIND_PGUID_PROPID)]\n        GUID *pguid;\n    [default]\n        ;\n    } uGuid;\n    DBKIND eKind;\n    [switch_type(DBKIND), switch_is(eKind)] union\n    {\n    [case(DBKIND_GUID_NAME, DBKIND_NAME, DBKIND_PGUID_NAME)]\n        LPOLESTR pwszName;\n    [case(DBKIND_GUID_PROPID, DBKIND_GUID, DBKIND_PGUID_PROPID, DBKIND_PROPID)]\n        ULONG ulPropid;\n    [default]\n        ;\n    } uName;\n} DBID;\n\ntypedef struct tagDB_NUMERIC {\n    BYTE precision;\n    BYTE scale;\n    BYTE sign;\n    BYTE val[16];\n} DB_NUMERIC;\n\ntypedef DWORD DBPROPID;\n\ntypedef struct tagDBPROPIDSET {\n    [size_is(cPropertyIDs)] DBPROPID *rgPropertyIDs;\n    ULONG cPropertyIDs;\n    GUID guidPropertySet;\n} DBPROPIDSET;\n\ntypedef DWORD DBPROPOPTIONS;\n\nenum DBPROPOPTIONENUM {\n    DBPROPOPTIONS_REQUIRED = 0,\n    DBPROPOPTIONS_SETIFCHEAP = 1,\n    DBPROPOPTIONS_OPTIONAL = 1,\n};\n\ntypedef DWORD DBPROPSTATUS;\n\ntypedef struct tagDBPROP {\n    DBPROPID dwPropertyID;\n    DBPROPOPTIONS dwOptions;\n    DBPROPSTATUS dwStatus;\n    DBID colid;\n    VARIANT vValue;\n} DBPROP;\n\ntypedef struct tagDBPROPSET {\n    [size_is(cProperties)] DBPROP *rgProperties;\n    ULONG cProperties;\n    GUID guidPropertySet;\n} DBPROPSET;\n\ntypedef DWORD DBPROPFLAGS;\n\ntypedef struct tagDBPROPINFO {\n    LPOLESTR pwszDescription;\n    DBPROPID dwPropertyID;\n    DBPROPFLAGS dwFlags;\n    VARTYPE vtType;\n    VARIANT vValues;\n} DBPROPINFO;\n\ntypedef DBPROPINFO *PDBPROPINFO;\n\ntypedef struct tagDBPROPINFOSET {\n    [size_is(cPropertyInfos)] PDBPROPINFO rgPropertyInfos;\n    ULONG cPropertyInfos;\n    GUID guidPropertySet;\n} DBPROPINFOSET;\n\ntypedef DWORD DBBINDURLFLAG;\ntypedef DWORD DBBINDURLSTATUS;\n\ntypedef struct tagDBIMPLICITSESSION\n{\n    IUnknown *pUnkOuter;\n    IID *piid;\n    IUnknown *pSession;\n} DBIMPLICITSESSION;\n\ntypedef WORD DBTYPE;\n\nenum DBTYPEENUM\n{\n    DBTYPE_EMPTY         = 0,\n    DBTYPE_NULL          = 1,\n    DBTYPE_I2            = 2,\n    DBTYPE_I4            = 3,\n    DBTYPE_R4            = 4,\n    DBTYPE_R8            = 5,\n    DBTYPE_CY            = 6,\n    DBTYPE_DATE          = 7,\n    DBTYPE_BSTR          = 8,\n    DBTYPE_IDISPATCH     = 9,\n    DBTYPE_ERROR         = 10,\n    DBTYPE_BOOL          = 11,\n    DBTYPE_VARIANT       = 12,\n    DBTYPE_IUNKNOWN      = 13,\n    DBTYPE_DECIMAL       = 14,\n    DBTYPE_I1            = 16,\n    DBTYPE_UI1           = 17,\n    DBTYPE_UI2           = 18,\n    DBTYPE_UI4           = 19,\n    DBTYPE_I8            = 20,\n    DBTYPE_UI8           = 21,\n    DBTYPE_GUID          = 72,\n    DBTYPE_BYTES         = 128,\n    DBTYPE_STR           = 129,\n    DBTYPE_WSTR          = 130,\n    DBTYPE_NUMERIC       = 131,\n    DBTYPE_UDT           = 132,\n    DBTYPE_DBDATE        = 133,\n    DBTYPE_DBTIME        = 134,\n    DBTYPE_DBTIMESTAMP   = 135,\n\n    DBTYPE_VECTOR        = 0x1000,\n    DBTYPE_ARRAY         = 0x2000,\n    DBTYPE_BYREF         = 0x4000,\n    DBTYPE_RESERVED      = 0x8000\n};\n\nenum DBTYPEENUM15\n{\n    DBTYPE_HCHAPTER      = 136\n};\n\nenum DBTYPEENUM20\n{\n    DBTYPE_FILETIME      = 64,\n    DBTYPE_PROPVARIANT   = 138,\n    DBTYPE_VARNUMERIC    = 139\n};\n\ntypedef DWORD DBSTATUS;\n\nenum DBSTATUSENUM\n{\n    DBSTATUS_S_OK = 0,\n    DBSTATUS_E_BADACCESSOR = 1,\n    DBSTATUS_E_CANTCONVERTVALUE = 2,\n    DBSTATUS_S_ISNULL = 3,\n    DBSTATUS_S_TRUNCATED = 4,\n    DBSTATUS_E_SIGNMISMATCH = 5,\n    DBSTATUS_E_DATAOVERFLOW = 6,\n    DBSTATUS_E_CANTCREATE = 7,\n    DBSTATUS_E_UNAVAILABLE = 8,\n    DBSTATUS_E_PERMISSIONDENIED = 9,\n    DBSTATUS_E_INTEGRITYVIOLATION = 10,\n    DBSTATUS_E_SCHEMAVIOLATION = 11,\n    DBSTATUS_E_BADSTATUS = 12,\n    DBSTATUS_S_DEFAULT = 13\n};\n\nenum DBPROPENUM\n{\n    DBPROP_ABORTPRESERVE                   = 0x00000002,\n    DBPROP_ACTIVESESSIONS                  = 0x00000003,\n    DBPROP_ASYNCTXNCOMMIT                  = 0x00000004,\n    DBPROP_AUTH_CACHE_AUTHINFO             = 0x00000005,\n    DBPROP_AUTH_ENCRYPT_PASSWORD           = 0x00000006,\n    DBPROP_AUTH_INTEGRATED                 = 0x00000007,\n    DBPROP_AUTH_MASK_PASSWORD              = 0x00000008,\n    DBPROP_AUTH_PASSWORD                   = 0x00000009,\n    DBPROP_AUTH_PERSIST_ENCRYPTED          = 0x0000000a,\n    DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO = 0x0000000b,\n    DBPROP_AUTH_USERID                     = 0x0000000c,\n    DBPROP_BLOCKINGSTORAGEOBJECTS          = 0x0000000d,\n    DBPROP_BOOKMARKS                       = 0x0000000e,\n    DBPROP_BOOKMARKSKIPPED                 = 0x0000000f,\n    DBPROP_BOOKMARKTYPE                    = 0x00000010,\n    DBPROP_CACHEDEFERRED                   = 0x00000011,\n    DBPROP_CANFETCHBACKWARDS               = 0x00000012,\n    DBPROP_CANHOLDROWS                     = 0x00000013,\n    DBPROP_CANSCROLLBACKWARDS              = 0x00000015,\n    DBPROP_CATALOGLOCATION                 = 0x00000016,\n    DBPROP_CATALOGTERM                     = 0x00000017,\n    DBPROP_CATALOGUSAGE                    = 0x00000018,\n    DBPROP_COL_AUTOINCREMENT               = 0x0000001a,\n    DBPROP_COL_DEFAULT                     = 0x0000001b,\n    DBPROP_COL_DESCRIPTION                 = 0x0000001c,\n    DBPROP_COL_NULLABLE                    = 0x0000001d,\n    DBPROP_COL_PRIMARYKEY                  = 0x0000001e,\n    DBPROP_COL_UNIQUE                      = 0x0000001f,\n    DBPROP_COLUMNDEFINITION                = 0x00000020,\n    DBPROP_COLUMNRESTRICT                  = 0x00000021,\n    DBPROP_COMMANDTIMEOUT                  = 0x00000022,\n    DBPROP_COMMITPRESERVE                  = 0x00000023,\n    DBPROP_CONCATNULLBEHAVIOR              = 0x00000024,\n    DBPROP_CURRENTCATALOG                  = 0x00000025,\n    DBPROP_DATASOURCENAME                  = 0x00000026,\n    DBPROP_DATASOURCEREADONLY              = 0x00000027,\n    DBPROP_DBMSNAME                        = 0x00000028,\n    DBPROP_DBMSVER                         = 0x00000029,\n    DBPROP_DEFERRED                        = 0x0000002a,\n    DBPROP_DELAYSTORAGEOBJECTS             = 0x0000002b,\n    DBPROP_GROUPBY                         = 0x0000002c,\n    DBPROP_HETEROGENEOUSTABLES             = 0x0000002d,\n    DBPROP_IDENTIFIERCASE                  = 0x0000002e,\n    DBPROP_IMMOBILEROWS                    = 0x0000002f,\n    DBPROP_INDEX_AUTOUPDATE                = 0x00000030,\n    DBPROP_INDEX_CLUSTERED                 = 0x00000031,\n    DBPROP_INDEX_FILLFACTOR                = 0x00000032,\n    DBPROP_INDEX_INITIALSIZE               = 0x00000033,\n    DBPROP_INDEX_NULLCOLLATION             = 0x00000034,\n    DBPROP_INDEX_NULLS                     = 0x00000035,\n    DBPROP_INDEX_PRIMARYKEY                = 0x00000036,\n    DBPROP_INDEX_SORTBOOKMARKS             = 0x00000037,\n    DBPROP_INDEX_TYPE                      = 0x00000038,\n    DBPROP_INDEX_UNIQUE                    = 0x00000039,\n    DBPROP_INIT_DATASOURCE                 = 0x0000003b,\n    DBPROP_INIT_HWND                       = 0x0000003c,\n    DBPROP_INIT_IMPERSONATION_LEVEL        = 0x0000003d,\n    DBPROP_INIT_LOCATION                   = 0x0000003e,\n    DBPROP_INIT_MODE                       = 0x0000003f,\n    DBPROP_INIT_PROMPT                     = 0x00000040,\n    DBPROP_INIT_PROTECTION_LEVEL           = 0x00000041,\n    DBPROP_INIT_TIMEOUT                    = 0x00000042,\n    DBPROP_LITERALBOOKMARKS                = 0x00000043,\n    DBPROP_LITERALIDENTITY                 = 0x00000044,\n    DBPROP_MAXINDEXSIZE                    = 0x00000046,\n    DBPROP_MAXOPENROWS                     = 0x00000047,\n    DBPROP_MAXPENDINGROWS                  = 0x00000048,\n    DBPROP_MAXROWS                         = 0x00000049,\n    DBPROP_MAXROWSIZE                      = 0x0000004a,\n    DBPROP_MAXROWSIZEINCLUDESBLOB          = 0x0000004b,\n    DBPROP_MAXTABLESINSELECT               = 0x0000004c,\n    DBPROP_MAYWRITECOLUMN                  = 0x0000004d,\n    DBPROP_MEMORYUSAGE                     = 0x0000004e,\n    DBPROP_MULTIPLESTORAGEOBJECTS          = 0x00000050,\n    DBPROP_MULTITABLEUPDATE                = 0x00000051,\n    DBPROP_NOTIFICATIONPHASES              = 0x00000052,\n    DBPROP_NULLCOLLATION                   = 0x00000053,\n    DBPROP_OLEOBJECTS                      = 0x00000054,\n    DBPROP_ORDERBYCOLUMNSINSELECT          = 0x00000055,\n    DBPROP_ORDEREDBOOKMARKS                = 0x00000056,\n    DBPROP_OTHERINSERT                     = 0x00000057,\n    DBPROP_OTHERUPDATEDELETE               = 0x00000058,\n    DBPROP_OWNINSERT                       = 0x00000059,\n    DBPROP_OWNUPDATEDELETE                 = 0x0000005a,\n    DBPROP_PREPAREABORTBEHAVIOR            = 0x0000005b,\n    DBPROP_PREPARECOMMITBEHAVIOR           = 0x0000005c,\n    DBPROP_PROCEDURETERM                   = 0x0000005d,\n    DBPROP_PROVIDERNAME                    = 0x00000060,\n    DBPROP_PROVIDEROLEDBVER                = 0x00000061,\n    DBPROP_PROVIDERVER                     = 0x00000062,\n    DBPROP_QUICKRESTART                    = 0x00000063,\n    DBPROP_QUOTEDIDENTIFIERCASE            = 0x00000064,\n    DBPROP_REENTRANTEVENTS                 = 0x00000065,\n    DBPROP_REMOVEDELETED                   = 0x00000066,\n    DBPROP_REPORTMULTIPLECHANGES           = 0x00000067,\n    DBPROP_ROWRESTRICT                     = 0x00000068,\n    DBPROP_ROWTHREADMODEL                  = 0x00000069,\n    DBPROP_SCHEMATERM                      = 0x0000006a,\n    DBPROP_SCHEMAUSAGE                     = 0x0000006b,\n    DBPROP_SERVERCURSOR                    = 0x0000006c,\n    DBPROP_SQLSUPPORT                      = 0x0000006d,\n    DBPROP_STRUCTUREDSTORAGE               = 0x0000006f,\n    DBPROP_SUBQUERIES                      = 0x00000070,\n    DBPROP_SUPPORTEDTXNISOLEVELS           = 0x00000071,\n    DBPROP_SUPPORTEDTXNISORETAIN           = 0x00000072,\n    DBPROP_TABLETERM                       = 0x00000073,\n    DBPROP_TRANSACTEDOBJECT                = 0x00000074,\n    DBPROP_UPDATABILITY                    = 0x00000075,\n    DBPROP_USERNAME                        = 0x00000076,\n    DBPROP_STRONGIDENTITY                  = 0x00000077,\n    DBPROP_BYREFACCESSORS                  = 0x00000078,\n    DBPROP_IAccessor                       = 0x00000079,\n    DBPROP_IColumnsInfo                    = 0x0000007a,\n    DBPROP_IColumnsRowset                  = 0x0000007b,\n    DBPROP_IConnectionPointContainer       = 0x0000007c,\n    DBPROP_IRowset                         = 0x0000007e,\n    DBPROP_IRowsetChange                   = 0x0000007f,\n    DBPROP_IRowsetIdentity                 = 0x00000080,\n    DBPROP_IRowsetInfo                     = 0x00000081,\n    DBPROP_IRowsetLocate                   = 0x00000082,\n    DBPROP_IRowsetResynch                  = 0x00000084,\n    DBPROP_IRowsetScroll                   = 0x00000085,\n    DBPROP_IRowsetUpdate                   = 0x00000086,\n    DBPROP_ISupportErrorInfo               = 0x00000087,\n    DBPROP_ILockBytes                      = 0x00000088,\n    DBPROP_ISequentialStream               = 0x00000089,\n    DBPROP_IStorage                        = 0x0000008a,\n    DBPROP_IStream                         = 0x0000008b,\n    DBPROP_TBL_TEMPTABLE                   = 0x0000008c,\n    DBPROP_IRowsetIndex                    = 0x0000009f,\n    DBPROP_INIT_PROVIDERSTRING             = 0x000000a0,\n    DBPROP_SUPPORTEDTXNDDL                 = 0x000000a1,\n    DBPROP_INDEX_TEMPINDEX                 = 0x000000a3,\n    DBPROP_COL_FIXEDLENGTH                 = 0x000000a7,\n    DBPROP_ASYNCTXNABORT                   = 0x000000a8,\n    DBPROP_DSOTHREADMODEL                  = 0x000000a9,\n    DBPROP_NOTIFYCOLUMNSET                 = 0x000000ab,\n    DBPROP_NOTIFYROWDELETE                 = 0x000000ad,\n    DBPROP_NOTIFYROWFIRSTCHANGE            = 0x000000ae,\n    DBPROP_NOTIFYROWINSERT                 = 0x000000af,\n    DBPROP_NOTIFYROWRESYNCH                = 0x000000b1,\n    DBPROP_NOTIFYROWSETRELEASE             = 0x000000b2,\n    DBPROP_NOTIFYROWSETFETCHPOSITIONCHANGE = 0x000000b3,\n    DBPROP_NOTIFYROWUNDOCHANGE             = 0x000000b4,\n    DBPROP_NOTIFYROWUNDODELETE             = 0x000000b5,\n    DBPROP_NOTIFYROWUNDOINSERT             = 0x000000b6,\n    DBPROP_NOTIFYROWUPDATE                 = 0x000000b7,\n    DBPROP_OUTPUTPARAMETERAVAILABILITY     = 0x000000b8,\n    DBPROP_PERSISTENTIDTYPE                = 0x000000b9,\n    DBPROP_INIT_LCID                       = 0x000000ba,\n    DBPROP_APPENDONLY                      = 0x000000bb,\n    DBPROP_CHANGEINSERTEDROWS              = 0x000000bc,\n    DBPROP_RETURNPENDINGINSERTS            = 0x000000bd,\n    DBPROP_SESS_AUTOCOMMITISOLEVELS        = 0x000000be,\n    DBPROP_MULTIPLEPARAMSETS               = 0x000000bf,\n    DBPROP_ROWSETCONVERSIONSONCOMMAND      = 0x000000c0,\n    DBPROP_IConvertType                    = 0x000000c2,\n    DBPROP_MULTIPLERESULTS                 = 0x000000c4,\n    DBPROP_NOTIFICATIONGRANULARITY         = 0x000000c6,\n    DBPROP_NOTIFYROWSETCHANGED             = 0x000000d3,\n};\n\nenum DBPROPENUM15 {\n    DBPROP_FILTERCOMPAREOPS                = 0x000000d1,\n    DBPROP_FINDCOMPAREOPS                  = 0x000000d2,\n    DBPROP_IChapteredRowset                = 0x000000ca,\n    DBPROP_IDBAsynchStatus                 = 0x000000cb,\n    DBPROP_IRowsetFind                     = 0x000000cc,\n    DBPROP_IRowsetView                     = 0x000000d4,\n    DBPROP_IViewChapter                    = 0x000000d5,\n    DBPROP_IViewFilter                     = 0x000000d6,\n    DBPROP_IViewRowset                     = 0x000000d7,\n    DBPROP_IViewSort                       = 0x000000d8,\n    DBPROP_INIT_ASYNCH                     = 0x000000c8,\n    DBPROP_MAXOPENCHAPTERS                 = 0x000000c7,\n    DBPROP_MAXORSINFILTER                  = 0x000000cd,\n    DBPROP_MAXSORTCOLUMNS                  = 0x000000ce,\n    DBPROP_ROWSET_ASYNCH                   = 0x000000c9,\n    DBPROP_SORTONINDEX                     = 0x000000cf\n};\n\nenum DBPROPENUM20 {\n    DBPROP_IMultipleResults                = 0x000000d9,\n    DBPROP_DATASOURCE_TYPE                 = 0x000000fb,\n    MDPROP_AXES                            = 0x000000fc,\n    MDPROP_FLATTENING_SUPPORT              = 0x000000fd,\n    MDPROP_MDX_JOINCUBES                   = 0x000000fe,\n    MDPROP_NAMED_LEVELS                    = 0x000000ff,\n    MDPROP_RANGEROWSET                     = 0x00000100,\n    MDPROP_MDX_SLICER                      = 0x000000da,\n    MDPROP_MDX_CUBEQUALIFICATION           = 0x000000db,\n    MDPROP_MDX_OUTERREFERENCE              = 0x000000dc,\n    MDPROP_MDX_QUERYBYPROPERTY             = 0x000000dd,\n    MDPROP_MDX_CASESUPPORT                 = 0x000000de,\n    MDPROP_MDX_STRING_COMPOP               = 0x000000e0,\n    MDPROP_MDX_DESCFLAGS                   = 0x000000e1,\n    MDPROP_MDX_SET_FUNCTIONS               = 0x000000e2,\n    MDPROP_MDX_MEMBER_FUNCTIONS            = 0x000000e3,\n    MDPROP_MDX_NUMERIC_FUNCTIONS           = 0x000000e4,\n    MDPROP_MDX_FORMULAS                    = 0x000000e5,\n    MDPROP_AGGREGATECELL_UPDATE            = 0x000000e6,\n    MDPROP_MDX_AGGREGATECELL_UPDATE        = MDPROP_AGGREGATECELL_UPDATE,\n    MDPROP_MDX_OBJQUALIFICATION            = 0x00000105,\n    MDPROP_MDX_NONMEASURE_EXPRESSIONS      = 0x00000106,\n    DBPROP_ACCESSORDER                     = 0x000000e7,\n    DBPROP_BOOKMARKINFO                    = 0x000000e8,\n    DBPROP_INIT_CATALOG                    = 0x000000e9,\n    DBPROP_ROW_BULKOPS                     = 0x000000ea,\n    DBPROP_PROVIDERFRIENDLYNAME            = 0x000000eb,\n    DBPROP_LOCKMODE                        = 0x000000ec,\n    DBPROP_MULTIPLECONNECTIONS             = 0x000000ed,\n    DBPROP_UNIQUEROWS                      = 0x000000ee,\n    DBPROP_SERVERDATAONINSERT              = 0x000000ef,\n    DBPROP_STORAGEFLAGS                    = 0x000000f0,\n    DBPROP_CONNECTIONSTATUS                = 0x000000f4,\n    DBPROP_ALTERCOLUMN                     = 0x000000f5,\n    DBPROP_COLUMNLCID                      = 0x000000f6,\n    DBPROP_RESETDATASOURCE                 = 0x000000f7,\n    DBPROP_INIT_OLEDBSERVICES              = 0x000000f8,\n    DBPROP_IRowsetRefresh                  = 0x000000f9,\n    DBPROP_SERVERNAME                      = 0x000000fa,\n    DBPROP_IParentRowset                   = 0x00000101,\n    DBPROP_HIDDENCOLUMNS                   = 0x00000102,\n    DBPROP_PROVIDERMEMORY                  = 0x00000103,\n    DBPROP_CLIENTCURSOR                    = 0x00000104\n};\n\n\nenum DBPROPENUM21 {\n    DBPROP_TRUSTEE_USERNAME                = 0x000000f1,\n    DBPROP_TRUSTEE_AUTHENTICATION          = 0x000000f2,\n    DBPROP_TRUSTEE_NEWAUTHENTICATION       = 0x000000f3,\n    DBPROP_IRow                            = 0x00000107,\n    DBPROP_IRowChange                      = 0x00000108,\n    DBPROP_IRowSchemaChange                = 0x00000109,\n    DBPROP_IGetRow                         = 0x0000010a,\n    DBPROP_IScopedOperations               = 0x0000010b,\n    DBPROP_IBindResource                   = 0x0000010c,\n    DBPROP_ICreateRow                      = 0x0000010d,\n    DBPROP_INIT_BINDFLAGS                  = 0x0000010e,\n    DBPROP_INIT_LOCKOWNER                  = 0x0000010f,\n    DBPROP_GENERATEURL                     = 0x00000111,\n    DBPROP_IDBBinderProperties             = 0x00000112,\n    DBPROP_IColumnsInfo2                   = 0x00000113,\n    DBPROP_IRegisterProvider               = 0x00000114,\n    DBPROP_IGetSession                     = 0x00000115,\n    DBPROP_IGetSourceRow                   = 0x00000116,\n    DBPROP_IRowsetCurrentIndex             = 0x00000117,\n    DBPROP_OPENROWSETSUPPORT               = 0x00000118,\n    DBPROP_COL_ISLONG                      = 0x00000119\n};\n\nenum DBPROPENUM25 {\n    DBPROP_COL_SEED                        = 0x0000011a,\n    DBPROP_COL_INCREMENT                   = 0x0000011b,\n    DBPROP_INIT_GENERALTIMEOUT             = 0x0000011c,\n    DBPROP_COMSERVICES                     = 0x0000011d\n};\n\nenum DBPROPENUM26 {\n    DBPROP_OUTPUTSTREAM                    = 0x0000011e,\n    DBPROP_OUTPUTENCODING                  = 0x0000011f,\n    DBPROP_TABLESTATISTICS                 = 0x00000120,\n    DBPROP_SKIPROWCOUNTRESULTS             = 0x00000123,\n    DBPROP_IRowsetBookmark                 = 0x00000124,\n    MDPROP_VISUALMODE                      = 0x00000125,\n};\n\ncpp_quote(\"#ifdef DBINITCONSTANTS\")\ncpp_quote(\"#ifdef __cplusplus\")\ncpp_quote(\"#define DEFINE_DBGUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\\\\")\ncpp_quote(\"        EXTERN_C const GUID name DECLSPEC_HIDDEN;     \\\\\")\ncpp_quote(\"        EXTERN_C const GUID name =                    \\\\\")\ncpp_quote(\"\t{ l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }\")\ncpp_quote(\"#else\")\ncpp_quote(\"#define DEFINE_DBGUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\\\\")\ncpp_quote(\"        const GUID name DECLSPEC_HIDDEN;      \\\\\")\ncpp_quote(\"        const GUID name =                             \\\\\")\ncpp_quote(\"\t{ l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }\")\ncpp_quote(\"#endif\")\ncpp_quote(\"#else\")\ncpp_quote(\"#define DEFINE_DBGUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\\\\")\ncpp_quote(\"    EXTERN_C const GUID name DECLSPEC_HIDDEN\")\ncpp_quote(\"#endif\")\n\ncpp_quote(\"DEFINE_DBGUID(DB_NULLGUID,       0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);\")\ncpp_quote(\"DEFINE_DBGUID(DBPROPSET_DBINIT,  0xc8b522bc, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);\")\ncpp_quote(\"DEFINE_DBGUID(DBGUID_SESSION,    0xc8b522f5, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);\")\ncpp_quote(\"DEFINE_DBGUID(DBGUID_ROWSET,     0xc8b522f6, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);\")\ncpp_quote(\"DEFINE_DBGUID(DBGUID_ROW,        0xc8b522f7, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);\")\ncpp_quote(\"DEFINE_DBGUID(DBGUID_STREAM,     0xc8b522f9, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);\")\n\ncpp_quote(\"#define DBPROMPT_PROMPT              0x01\")\ncpp_quote(\"#define DBPROMPT_COMPLETE            0x02\")\ncpp_quote(\"#define DBPROMPT_COMPLETEREQUIRED    0x03\")\ncpp_quote(\"#define DBPROMPT_NOPROMPT            0x04\")\n\ncpp_quote(\"#define DBPROPVAL_STGM_READ                 OF_READ\")\ncpp_quote(\"#define DBPROPVAL_STGM_WRITE                OF_WRITE\")\ncpp_quote(\"#define DBPROPVAL_STGM_READWRITE            OF_READWRITE\")\ncpp_quote(\"#define DBPROPVAL_STGM_SHARE_DENY_NONE      OF_SHARE_DENY_NONE\")\ncpp_quote(\"#define DBPROPVAL_STGM_SHARE_DENY_READ      OF_SHARE_DENY_READ\")\ncpp_quote(\"#define DBPROPVAL_STGM_SHARE_DENY_WRITE     OF_SHARE_DENY_WRITE)\")\ncpp_quote(\"#define DBPROPVAL_STGM_SHARE_EXCLUSIVE      OF_SHARE_EXCLUSIVE\")\ncpp_quote(\"#define DBPROPVAL_STGM_DIRECT               0x00010000\")\ncpp_quote(\"#define DBPROPVAL_STGM_TRANSACTED           0x00020000\")\ncpp_quote(\"#define DBPROPVAL_STGM_CREATE               OF_CREATE\")\ncpp_quote(\"#define DBPROPVAL_STGM_CONVERT              0x00040000\")\ncpp_quote(\"#define DBPROPVAL_STGM_FAILIFTHERE          0x00080000\")\ncpp_quote(\"#define DBPROPVAL_STGM_PRIORITY             0x00100000\")\ncpp_quote(\"#define DBPROPVAL_STGM_DELETEONRELEASE      0x00200000\")\ncpp_quote(\"#define DBPROPVAL_GB_COLLATE                __MSABI_LONG(0x00000010)\")\ncpp_quote(\"#define DBPROPVAL_CS_UNINITIALIZED          __MSABI_LONG(0x00000000)\")\ncpp_quote(\"#define DBPROPVAL_CS_INITIALIZED            __MSABI_LONG(0x00000001)\")\ncpp_quote(\"#define DBPROPVAL_CS_COMMUNICATIONFAILURE   __MSABI_LONG(0x00000002)\")\n\ncpp_quote(\"#define DBPROPVAL_RD_RESETALL               __MSABI_LONG(0xffffffff)\")\ncpp_quote(\"#define DBPROPVAL_OS_RESOURCEPOOLING        __MSABI_LONG(0x00000001)\")\ncpp_quote(\"#define DBPROPVAL_OS_TXNENLISTMENT          __MSABI_LONG(0x00000002)\")\ncpp_quote(\"#define DBPROPVAL_OS_CLIENTCURSOR           __MSABI_LONG(0x00000004)\")\ncpp_quote(\"#define DBPROPVAL_OS_ENABLEALL              __MSABI_LONG(0xffffffff)\")\ncpp_quote(\"#define DBPROPVAL_BI_CROSSROWSET            __MSABI_LONG(0x00000001)\")\n\ncpp_quote(\"#define DB_MODE_READ                        0x01\")\ncpp_quote(\"#define DB_MODE_WRITE                       0x02\")\ncpp_quote(\"#define DB_MODE_READWRITE                   0x03\")\ncpp_quote(\"#define DB_MODE_SHARE_DENY_READ             0x04\")\ncpp_quote(\"#define DB_MODE_SHARE_DENY_WRITE            0x08\")\ncpp_quote(\"#define DB_MODE_SHARE_EXCLUSIVE             0x0c\")\ncpp_quote(\"#define DB_MODE_SHARE_DENY_NONE             0x10\")\n\ntypedef struct tagDBCOLUMNACCESS\n{\n    void *pData;\n    DBID columnid;\n    DBLENGTH cbDataLen;\n    DBSTATUS dwStatus;\n    DBLENGTH cbMaxLen;\n    DB_DWRESERVE dwReserved;\n    DBTYPE wType;\n    BYTE bPrecision;\n    BYTE bScale;\n} DBCOLUMNACCESS;\n\ntypedef DWORD DBROWSTATUS;\n\nenum DBROWSTATUSENUM\n{\n    DBROWSTATUS_S_OK,\n    DBROWSTATUS_S_LOCKUPGRADED,\n    DBROWSTATUS_S_MULTIPLECHANGES,\n    DBROWSTATUS_S_PENDINGCHANGES,\n    DBROWSTATUS_E_CANCELED,\n    DBROWSTATUS_E_CANTLOCKROW,\n    DBROWSTATUS_E_CANTRELEASE,\n    DBROWSTATUS_E_CONCURRENCYVIOLATION,\n    DBROWSTATUS_E_DELETED,\n    DBROWSTATUS_E_PENDINGINSERT,\n    DBROWSTATUS_E_NEWLYINSERTED,\n    DBROWSTATUS_E_INTEGRITYVIOLATION,\n    DBROWSTATUS_E_INVALID,\n    DBROWSTATUS_E_MAXPENDCHANGESEXCEEDED,\n    DBROWSTATUS_E_OBJECTOPEN,\n    DBROWSTATUS_E_OUTOFMEMORY,\n    DBROWSTATUS_E_PERMISSIONDENIED,\n    DBROWSTATUS_E_LIMITREACHED,\n    DBROWSTATUS_E_SCHEMAVIOLATION,\n    DBROWSTATUS_E_FAIL,\n\n};\n\ntypedef DWORD DBPART;\n\nenum DBPARTENUM\n{\n    DBPART_INVALID  = 0,\n    DBPART_VALUE    = 1,\n    DBPART_LENGTH   = 2,\n    DBPART_STATUS   = 4,\n};\n\ntypedef DWORD DBPARAMIO;\n\nenum DBPARAMIOENUM\n{\n    DBPARAMIO_NOTPARAM = 0,\n    DBPARAMIO_INPUT    = 1,\n    DBPARAMIO_OUTPUT   = 2,\n};\n\ntypedef DWORD DBMEMOWNER;\n\nenum DBMEMOWNERENUM\n{\n    DBMEMOWNER_CLIENTOWNED    = 0,\n    DBMEMOWNER_PROVIDEROWNED  = 1,\n};\n\ntypedef struct tagDBOBJECT\n{\n    DWORD dwFlags;\n    IID iid;\n} DBOBJECT;\n\ntypedef struct tagDBBINDEXT\n{\n    [size_is((ULONG)ulExtension)] BYTE *pExtension;\n    DBCOUNTITEM ulExtension;\n} DBBINDEXT;\n\ntypedef struct tagDBBINDING\n{\n    DBORDINAL iOrdinal;\n    DBBYTEOFFSET obValue;\n    DBBYTEOFFSET obLength;\n    DBBYTEOFFSET obStatus;\n    ITypeInfo *pTypeInfo;\n    DBOBJECT *pObject;\n    DBBINDEXT *pBindExt;\n    DBPART dwPart;\n    DBMEMOWNER dwMemOwner;\n    DBPARAMIO eParamIO;\n    DBLENGTH cbMaxLen;\n    DWORD dwFlags;\n    DBTYPE wType;\n    BYTE bPrecision;\n    BYTE bScale;\n} DBBINDING;\n\ntypedef ULONG_PTR HACCESSOR;\n\ncpp_quote(\"#define DB_INVALID_HACCESSOR 0x00\")\n\ntypedef ULONG_PTR HROW;\n\ncpp_quote(\"#define DB_NULL_HROW 0x00\")\n\ntypedef ULONG_PTR HWATCHREGION;\n\ncpp_quote(\"#define DBWATCHREGION_NULL NULL\")\n\ntypedef ULONG_PTR HCHAPTER;\n\ncpp_quote(\"#define DB_NULL_HCHAPTER 0x00\")\n\ntypedef struct tagDBPARAMS\n{\n    void *pData;\n    DB_UPARAMS cParamSets;\n    HACCESSOR hAccessor;\n} DBPARAMS;\n\ntypedef DWORD DBASYNCHOP;\n\nenum DBASYNCHOPENUM\n{\n    DBSYNCHOP_OPEN,\n};\n\ntypedef DWORD DBASYNCHPHASE;\n\nenum DBASYNCHPHASEENUM\n{\n    DBASYNCHPHASE_INITIALIZATION,\n    DBASYNCHPHASE_POPULATION,\n    DBASYNCHPHASE_COMPLETE,\n    DBASYNCHPHASE_CANCELED,\n};\n\ntypedef struct tagRMTPACK\n{\n    ISequentialStream *pISeqStream;\n    ULONG cbData;\n    ULONG cBSTR;\n    [size_is(cBSTR)] BSTR *rgBSTR;\n    ULONG cVARIANT;\n    [size_is(cVARIANT)] VARIANT *rgVARIANT;\n    ULONG cIDISPATCH;\n    [size_is(cIDISPATCH)] IDispatch **rgIDISPATCH;\n    ULONG cIUNKNOWN;\n    [size_is(cIUNKNOWN)] IUnknown **rgIUNKNOWN;\n    ULONG cPROPVARIANT;\n    [size_is(cPROPVARIANT)] PROPVARIANT *rgPROPVARIANT;\n    ULONG cArray;\n    [size_is(cArray)] VARIANT *rgArray;\n} RMTPACK;\n\ntypedef struct tagDBDATE {\n\tSHORT year;\n\tUSHORT month;\n\tUSHORT day;\n} DBDATE;\n\ntypedef struct tagDBTIME {\n\tUSHORT hour;\n\tUSHORT minute;\n\tUSHORT second;\n} DBTIME;\n\ntypedef struct tagDBTIMESTAMP {\n\tSHORT year;\n\tUSHORT month;\n\tUSHORT day;\n\tUSHORT hour;\n\tUSHORT minute;\n\tUSHORT second;\n\tULONG fraction;\n} DBTIMESTAMP;\n\ntypedef DWORD DBREASON;\ntypedef DWORD DBEVENTPHASE;\n\nenum DBEVENTPHASEENUM {\n    DBEVENTPHASE_OKTODO,\n    DBEVENTPHASE_ABOUTTODO,\n    DBEVENTPHASE_SYNCHAFTER,\n    DBEVENTPHASE_FAILEDTODO,\n    DBEVENTPHASE_DIDEVENT\n};\n\nenum DBREASONENUM {\n    DBREASON_ROWSET_FETCHPOSITIONCHANGE,\n    DBREASON_ROWSET_RELEASE,\n    DBREASON_COLUMN_SET,\n    DBREASON_COLUMN_RECALCULATED,\n    DBREASON_ROW_ACTIVATE,\n    DBREASON_ROW_RELEASE,\n    DBREASON_ROW_DELETE,\n    DBREASON_ROW_FIRSTCHANCE,\n    DBREASON_ROW_INSERT,\n    DBREASON_ROW_RESYNCH,\n    DBREASON_ROW_UNDOCHANGE,\n    DBREASON_ROW_UNDOINSERT,\n    DBREASON_ROW_UNDODELETE,\n    DBREASON_ROW_UPDATE,\n    DBREASON_ROWSET_CHANGED\n};\n\nenum DBREASONENUM15 {\n    DBREASON_ROWPOSITION_CHANGED = DBREASON_ROWSET_CHANGED + 1,\n    DBREASON_ROWPOSITION_CHAPTERCHANGED,\n    DBREASON_ROWPOSITION_CLEARED,\n    DBREASON_ROW_ASYNCHINSERT\n};\n\ntypedef DWORD DBCOLUMNFLAGS;\n\nenum DBCOLUMNFLAGSENUM {\n    DBCOLUMNFLAGS_ISBOOKMARK    = 0x0001,\n    DBCOLUMNFLAGS_MAYDEFER      = 0x0002,\n    DBCOLUMNFLAGS_WRITE         = 0x0004,\n    DBCOLUMNFLAGS_WRITEUNKNOWN  = 0x0008,\n    DBCOLUMNFLAGS_ISFIXEDLENGTH = 0x0010,\n    DBCOLUMNFLAGS_ISNULLABLE    = 0x0020,\n    DBCOLUMNFLAGS_MAYBENULL     = 0x0040,\n    DBCOLUMNFLAGS_ISLONG        = 0x0080,\n    DBCOLUMNFLAGS_ISROWID       = 0x0100,\n    DBCOLUMNFLAGS_ISROWVER      = 0x0200,\n    DBCOLUMNFLAGS_CACHEDEFERRED = 0x1000\n};\n\ntypedef struct tagDBCOLUMNINFO {\n    LPOLESTR      pwszName;\n    ITypeInfo    *pTypeInfo;\n    DBORDINAL     iOrdinal;\n    DBCOLUMNFLAGS dwFlags;\n    DBLENGTH      ulColumnSize;\n    DBTYPE        wType;\n    BYTE          bPrecision;\n    BYTE          bScale;\n    DBID          columnid;\n} DBCOLUMNINFO;\n"
  },
  {
    "path": "wine/windows/dbt.h",
    "content": "/*\n * Copyright (C) 2004 Ulrich Czekalla\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DBT_H\n#define __WINE_DBT_H\n\n#ifndef GUID_DEFINED\n# include <guiddef.h>\n#endif\n\n/* dbt.h doesn't use the normal convention, it adds an underscore before A/W */\n#ifdef WINE_NO_UNICODE_MACROS\n# define DECL_WINELIB_DBT_TYPE_AW(type)  /* nothing */\n#else\n# define DECL_WINELIB_DBT_TYPE_AW(type)  typedef WINELIB_NAME_AW(type##_) type;\n#endif\n\n#define DBT_DEVNODES_CHANGED            0x0007\n#define DBT_QUERYCHANGECONFIG           0x0017\n#define DBT_CONFIGCHANGED               0x0018\n#define DBT_CONFIGCHANGECANCELED        0x0019\n#define DBT_NO_DISK_SPACE               0x0047\n#define DBT_LOW_DISK_SPACE              0x0048\n#define DBT_CONFIGMGPRIVATE             0x7FFF\n#define DBT_DEVICEARRIVAL               0x8000\n#define DBT_DEVICEQUERYREMOVE           0x8001\n#define DBT_DEVICEQUERYREMOVEFAILED     0x8002\n#define DBT_DEVICEREMOVEPENDING         0x8003\n#define DBT_DEVICEREMOVECOMPLETE        0x8004\n#define DBT_DEVICETYPESPECIFIC          0x8005\n#define DBT_CUSTOMEVENT                 0x8006\n\ntypedef struct _DEV_BROADCAST_HDR\n{\n    DWORD dbch_size;\n    DWORD dbch_devicetype;\n    DWORD dbch_reserved;\n} DEV_BROADCAST_HDR, *PDEV_BROADCAST_HDR;\n\n#define DBT_DEVTYP_OEM                  0x00000000\n#define DBT_DEVTYP_DEVNODE              0x00000001\n#define DBT_DEVTYP_VOLUME               0x00000002\n#define DBT_DEVTYP_PORT                 0x00000003\n#define DBT_DEVTYP_NET                  0x00000004\n#define DBT_DEVTYP_DEVICEINTERFACE      0x00000005\n#define DBT_DEVTYP_HANDLE               0x00000006\n\ntypedef struct _DEV_BROADCAST_OEM\n{\n    DWORD       dbco_size;\n    DWORD       dbco_devicetype;\n    DWORD       dbco_reserved;\n    DWORD       dbco_identifier;\n    DWORD       dbco_suppfunc;\n} DEV_BROADCAST_OEM, *PDEV_BROADCAST_OEM;\n\ntypedef struct _DEV_BROADCAST_DEVNODE\n{\n    DWORD       dbcd_size;\n    DWORD       dbcd_devicetype;\n    DWORD       dbcd_reserved;\n    DWORD       dbcd_devnode;\n} DEV_BROADCAST_DEVNODE, *PDEV_BROADCAST_DEVNODE;\n\ntypedef struct _DEV_BROADCAST_VOLUME\n{\n    DWORD       dbcv_size;\n    DWORD       dbcv_devicetype;\n    DWORD       dbcv_reserved;\n    DWORD       dbcv_unitmask;\n    WORD        dbcv_flags;\n} DEV_BROADCAST_VOLUME, *PDEV_BROADCAST_VOLUME;\n\n#define DBTF_MEDIA 0x0001\n#define DBTF_NET   0x0002\n\ntypedef struct _DEV_BROADCAST_PORT_A\n{\n    DWORD       dbcp_size;\n    DWORD       dbcp_devicetype;\n    DWORD       dbcp_reserved;\n    char        dbcp_name[1];\n} DEV_BROADCAST_PORT_A, *PDEV_BROADCAST_PORT_A;\n\ntypedef struct _DEV_BROADCAST_PORT_W\n{\n    DWORD       dbcp_size;\n    DWORD       dbcp_devicetype;\n    DWORD       dbcp_reserved;\n    WCHAR       dbcp_name[1];\n} DEV_BROADCAST_PORT_W, *PDEV_BROADCAST_PORT_W;\n\nDECL_WINELIB_DBT_TYPE_AW(DEV_BROADCAST_PORT)\nDECL_WINELIB_DBT_TYPE_AW(PDEV_BROADCAST_PORT)\n\ntypedef struct _DEV_BROADCAST_NET\n{\n    DWORD       dbcn_size;\n    DWORD       dbcn_devicetype;\n    DWORD       dbcn_reserved;\n    DWORD       dbcn_resource;\n    DWORD       dbcn_flags;\n} DEV_BROADCAST_NET, *PDEV_BROADCAST_NET;\n\ntypedef struct _DEV_BROADCAST_DEVICEINTERFACE_A\n{\n    DWORD       dbcc_size;\n    DWORD       dbcc_devicetype;\n    DWORD       dbcc_reserved;\n    GUID        dbcc_classguid;\n    CHAR        dbcc_name[1];\n} DEV_BROADCAST_DEVICEINTERFACE_A, *PDEV_BROADCAST_DEVICEINTERFACE_A;\n\ntypedef struct _DEV_BROADCAST_DEVICEINTERFACE_W\n{\n    DWORD       dbcc_size;\n    DWORD       dbcc_devicetype;\n    DWORD       dbcc_reserved;\n    GUID        dbcc_classguid;\n    WCHAR       dbcc_name[1];\n} DEV_BROADCAST_DEVICEINTERFACE_W, *PDEV_BROADCAST_DEVICEINTERFACE_W;\n\nDECL_WINELIB_DBT_TYPE_AW(DEV_BROADCAST_DEVICEINTERFACE)\nDECL_WINELIB_DBT_TYPE_AW(PDEV_BROADCAST_DEVICEINTERFACE)\n\ntypedef struct _DEV_BROADCAST_HANDLE\n{\n    DWORD       dbch_size;\n    DWORD       dbch_devicetype;\n    DWORD       dbch_reserved;\n    HANDLE      dbch_handle;\n    HDEVNOTIFY  dbch_hdevnotify;\n    GUID        dbch_eventguid;\n    LONG        dbch_nameoffset;\n    BYTE        dbch_data[1];\n} DEV_BROADCAST_HANDLE, *PDEV_BROADCAST_HANDLE;\n\n#undef DECL_WINELIB_DBT_TYPE_AW\n\n#endif /* __WINE_DBT_H */\n"
  },
  {
    "path": "wine/windows/dciddi.h",
    "content": "/*\n * DCI driver interface\n *\n * Copyright (C) 2001 Ove Kaaven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DCIDDI_H\n#define __WINE_DCIDDI_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* DCI Command Escape */\n#define DCICOMMAND\t3075\n#define DCI_VERSION\t0x0100\n\n#define DCICREATEPRIMARYSURFACE\t\t1\n#define DCICREATEOFFSCREENSURFACE\t2\n#define DCICREATEOVERLAYSURFACE\t\t3\n#define DCIENUMSURFACE\t\t\t4\n#define DCIESCAPE\t\t\t5\n\n/* DCI Errors */\n#define DCI_OK\t\t                0\n#define DCI_FAIL_GENERIC               -1\n#define DCI_FAIL_UNSUPPORTEDVERSION    -2\n#define DCI_FAIL_INVALIDSURFACE        -3\n#define DCI_FAIL_UNSUPPORTED           -4\n\n\ntypedef int DCIRVAL; /* DCI callback return type */\n\n/*****************************************************************************\n * Escape command structures\n */\ntypedef struct _DCICMD {\n    DWORD dwCommand;\n    DWORD dwParam1;\n    DWORD dwParam2;\n    DWORD dwVersion;\n    DWORD dwReserved;\n} DCICMD,*LPDCICMD;\n\ntypedef struct _DCISURFACEINFO {\n    DWORD dwSize;\n    DWORD dwDCICaps;\n    DWORD dwCompression;\n    DWORD dwMask[3];\n    DWORD dwWidth;\n    DWORD dwHeight;\n    LONG  lStride;\n    DWORD dwBitCount;\n    ULONG_PTR dwOffSurface;\n    WORD  wSelSurface;\n    WORD  wReserved;\n    DWORD dwReserved1;\n    DWORD dwReserved2;\n    DWORD dwReserved3;\n    DCIRVAL (CALLBACK *BeginAccess)(LPVOID, LPRECT);\n    void (CALLBACK *EndAccess)(LPVOID);\n    void (CALLBACK *DestroySurface)(LPVOID);\n} DCISURFACEINFO, *LPDCISURFACEINFO;\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif\n\n#endif /* __WINE_DCIDDI_H */\n"
  },
  {
    "path": "wine/windows/dciman.h",
    "content": "/*\n * DCI driver interface\n *\n * Copyright (C) 2005 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _INC_DCIMAN\n#define _INC_DCIMAN\n\n#include <dciddi.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nHDC         WINAPI DCIOpenProvider(void);\nvoid        WINAPI DCICloseProvider(HDC);\nint         WINAPI DCICreatePrimary(HDC,LPDCISURFACEINFO*);\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif\n\n#endif /* _INC_DCIMAN */\n"
  },
  {
    "path": "wine/windows/dcommon.idl",
    "content": "/*\n * Copyright 2012 Nikolay Sivov for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"dxgiformat.idl\";\n\ncpp_quote(\"#if 0\")\ntypedef struct\n{\n    long x, y;\n} POINT;\ntypedef unsigned int UINT32;\ncpp_quote(\"#endif\")\n\ntypedef enum DWRITE_MEASURING_MODE\n{\n    DWRITE_MEASURING_MODE_NATURAL,\n    DWRITE_MEASURING_MODE_GDI_CLASSIC,\n    DWRITE_MEASURING_MODE_GDI_NATURAL\n} DWRITE_MEASURING_MODE;\n\ntypedef enum D2D1_ALPHA_MODE\n{\n    D2D1_ALPHA_MODE_UNKNOWN = 0,\n    D2D1_ALPHA_MODE_PREMULTIPLIED = 1,\n    D2D1_ALPHA_MODE_STRAIGHT = 2,\n    D2D1_ALPHA_MODE_IGNORE = 3,\n    D2D1_ALPHA_MODE_FORCE_DWORD = 0xffffffff,\n} D2D1_ALPHA_MODE;\n\ntypedef struct D2D1_PIXEL_FORMAT\n{\n    DXGI_FORMAT format;\n    D2D1_ALPHA_MODE alphaMode;\n} D2D1_PIXEL_FORMAT;\n\ntypedef struct D2D_POINT_2F\n{\n    float x;\n    float y;\n} D2D_POINT_2F, D2D1_POINT_2F;\n\ntypedef POINT D2D_POINT_2L, D2D1_POINT_2L;\n\ntypedef struct D2D_SIZE_U\n{\n    UINT32 width;\n    UINT32 height;\n} D2D_SIZE_U, D2D1_SIZE_U;\n\ntypedef struct D2D_MATRIX_4X4_F\n{\n    union\n    {\n        struct\n        {\n            float _11, _12, _13, _14;\n            float _21, _22, _23, _24;\n            float _31, _32, _33, _34;\n            float _41, _42, _43, _44;\n        };\n\n        float m[4][4];\n    };\n} D2D_MATRIX_4X4_F;\n"
  },
  {
    "path": "wine/windows/dde.h",
    "content": "/*\n * Copyright 1995, Technion, Israel Institute of Technology\n * Electrical Eng, Software Lab.\n * Author:    Michael Veksler.\n * Purpose:   dde declarations\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DDE_H\n#define __WINE_DDE_H\n\n#include <windef.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifdef _USER32_\n#define WINUSERAPI\n#else\n#define WINUSERAPI DECLSPEC_IMPORT\n#endif\n\n#include <dde.rh>\n\n/* DDEACK: wStatus in WM_DDE_ACK message */\ntypedef struct\n{\n    unsigned short bAppReturnCode:8, reserved:6, fBusy:1, fAck:1;\n} DDEACK;\n\n/* DDEDATA: hData in WM_DDE_DATA message */\ntypedef struct\n{\n    unsigned short unused:12, fResponse:1, fRelease:1, reserved:1, fAckReq:1;\n    short cfFormat;\n    BYTE Value[1];\t\t/* undetermined array */\n} DDEDATA;\n\n/* DDEADVISE: hOptions in WM_DDE_ADVISE message */\ntypedef struct\n{\n    unsigned short reserved:14, fDeferUpd:1, fAckReq:1;\n    short cfFormat;\n} DDEADVISE;\n\n/* DDEPOKE: hData in WM_DDE_POKE message. */\ntypedef struct\n{\n    unsigned short unused:13, fRelease:1, fReserved:2;\n    short cfFormat;\n    BYTE Value[1];   \t/* undetermined array */\n} DDEPOKE;\n\nWINUSERAPI BOOL        WINAPI DdeSetQualityOfService(HWND,const SECURITY_QUALITY_OF_SERVICE *,PSECURITY_QUALITY_OF_SERVICE);\nWINUSERAPI BOOL        WINAPI FreeDDElParam(UINT,LPARAM);\nWINUSERAPI BOOL        WINAPI ImpersonateDdeClientWindow(HWND,HWND);\nWINUSERAPI LPARAM      WINAPI PackDDElParam(UINT,UINT_PTR,UINT_PTR);\nWINUSERAPI LPARAM      WINAPI ReuseDDElParam(LPARAM,UINT,UINT,UINT_PTR,UINT_PTR);\nWINUSERAPI BOOL        WINAPI UnpackDDElParam(UINT,LPARAM,PUINT_PTR,PUINT_PTR);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_DDE_H */\n"
  },
  {
    "path": "wine/windows/dde.rh",
    "content": "/*\n * Copyright 1995, Technion, Israel Institute of Technology\n * Electrical Eng, Software Lab.\n * Author:    Michael Veksler.\n * Purpose:   dde declarations\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#define WM_DDE_INITIATE   0x3E0\n#define WM_DDE_TERMINATE  0x3E1\n#define WM_DDE_ADVISE\t  0x3E2\n#define WM_DDE_UNADVISE   0x3E3\n#define WM_DDE_ACK\t  0x3E4\n#define WM_DDE_DATA\t  0x3E5\n#define WM_DDE_REQUEST\t  0x3E6\n#define WM_DDE_POKE\t  0x3E7\n#define WM_DDE_EXECUTE\t  0x3E8\n#define WM_DDE_LAST\t  WM_DDE_EXECUTE\n#define WM_DDE_FIRST\t  WM_DDE_INITIATE\n"
  },
  {
    "path": "wine/windows/ddeml.h",
    "content": "/*\n * DDEML library definitions\n *\n * Copyright 1997 Alexandre Julliard\n * Copyright 1997 Len White\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DDEML_H\n#define __WINE_DDEML_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n#ifdef _USER32_\n#define WINUSERAPI\n#else\n#define WINUSERAPI DECLSPEC_IMPORT\n#endif\n\n/* Codepage Constants\n */\n\n#define CP_WINANSI      1004\n#define CP_WINUNICODE   1200\n\n/* DDE synchronisation constants\n */\n\n#define MSGF_DDEMGR 0x8001\n\n#define QID_SYNC\t0xFFFFFFFF\n\n/*   Type variation for MS  deliberate departures from ANSI standards\n */\n\n#define EXPENTRY CALLBACK\n\n#ifdef UNICODE\n#if defined(_MSC_VER)\n#define SZDDESYS_TOPIC          L\"System\"\n#define SZDDESYS_ITEM_TOPICS    L\"Topics\"\n#define SZDDESYS_ITEM_SYSITEMS  L\"SysItems\"\n#define SZDDESYS_ITEM_RTNMSG    L\"ReturnMessage\"\n#define SZDDESYS_ITEM_STATUS    L\"Status\"\n#define SZDDESYS_ITEM_FORMATS   L\"Formats\"\n#define SZDDESYS_ITEM_HELP      L\"Help\"\n#define SZDDE_ITEM_ITEMLIST     L\"TopicItemList\"\n#elif defined(__GNUC__)\n#define SZDDESYS_TOPIC          (const WCHAR []){'S','y','s','t','e','m',0}\n#define SZDDESYS_ITEM_TOPICS    (const WCHAR []){'T','o','p','i','c','s',0}\n#define SZDDESYS_ITEM_SYSITEMS  (const WCHAR []){'S','y','s','I','t','e','m','s',0}\n#define SZDDESYS_ITEM_RTNMSG    (const WCHAR []){'R','e','t','u','r','n','M','e','s','s','a','g','e',0}\n#define SZDDESYS_ITEM_STATUS    (const WCHAR []){'S','t','a','t','u','s',0}\n#define SZDDESYS_ITEM_FORMATS   (const WCHAR []){'F','o','r','m','a','t','s',0}\n#define SZDDESYS_ITEM_HELP      (const WCHAR []){'H','e','l','p',0}\n#define SZDDE_ITEM_ITEMLIST     (const WCHAR []){'T','o','p','i','c','I','t','e','m','L','i','s','t',0}\n#else /* _MSC_VER/__GNUC__ */\nstatic const WCHAR SZDDESYS_TOPIC[] = {'S','y','s','t','e','m',0};\nstatic const WCHAR SZDDESYS_ITEM_TOPICS[] = {'T','o','p','i','c','s',0};\nstatic const WCHAR SZDDESYS_ITEM_SYSITEMS[] = {'S','y','s','I','t','e','m','s',0};\nstatic const WCHAR SZDDESYS_ITEM_RTNMSG[] = {'R','e','t','u','r','n','M','e','s','s','a','g','e',0};\nstatic const WCHAR SZDDESYS_ITEM_STATUS[] = {'S','t','a','t','u','s',0};\nstatic const WCHAR SZDDESYS_ITEM_FORMATS[] = {'F','o','r','m','a','t','s',0};\nstatic const WCHAR SZDDESYS_ITEM_HELP[] = {'H','e','l','p',0};\nstatic const WCHAR SZDDE_ITEM_ITEMLIST[] = {'T','o','p','i','c','I','t','e','m','L','i','s','t',0};\n#endif\n#else /* UNICODE */\n#define SZDDESYS_TOPIC          \"System\"\n#define SZDDESYS_ITEM_TOPICS    \"Topics\"\n#define SZDDESYS_ITEM_SYSITEMS  \"SysItems\"\n#define SZDDESYS_ITEM_RTNMSG    \"ReturnMessage\"\n#define SZDDESYS_ITEM_STATUS    \"Status\"\n#define SZDDESYS_ITEM_FORMATS   \"Formats\"\n#define SZDDESYS_ITEM_HELP      \"Help\"\n#define SZDDE_ITEM_ITEMLIST     \"TopicItemList\"\n#endif\n\n/***************************************************\n\n      FLAGS Section - copied from Microsoft SDK as must be standard, probably Copyright Microsoft Corporation\n\n***************************************************/\n\n#define     XST_NULL              0\n#define     XST_INCOMPLETE        1\n#define     XST_CONNECTED         2\n#define     XST_INIT1             3\n#define     XST_INIT2             4\n#define     XST_REQSENT           5\n#define     XST_DATARCVD          6\n#define     XST_POKESENT          7\n#define     XST_POKEACKRCVD       8\n#define     XST_EXECSENT          9\n#define     XST_EXECACKRCVD      10\n#define     XST_ADVSENT          11\n#define     XST_UNADVSENT        12\n#define     XST_ADVACKRCVD       13\n#define     XST_UNADVACKRCVD     14\n#define     XST_ADVDATASENT      15\n#define     XST_ADVDATAACKRCVD   16\n\n#define     ST_CONNECTED            0x0001\n#define     ST_ADVISE               0x0002\n#define     ST_ISLOCAL              0x0004\n#define     ST_BLOCKED              0x0008\n#define     ST_CLIENT               0x0010\n#define     ST_TERMINATED           0x0020\n#define     ST_INLIST               0x0040\n#define     ST_BLOCKNEXT            0x0080\n#define     ST_ISSELF               0x0100\n\n/*\n * DdeEnableCallback function codes\n */\n\n#define     EC_ENABLEALL                 0\n#define     EC_ENABLEONE                 ST_BLOCKNEXT\n#define     EC_DISABLE                   ST_BLOCKED\n#define     EC_QUERYWAITING              2\n\n/*\n * Callback filter flags for use with standard apps.\n */\n\n#define     CBF_FAIL_SELFCONNECTIONS     0x00001000\n#define     CBF_FAIL_CONNECTIONS         0x00002000\n#define     CBF_FAIL_ADVISES             0x00004000\n#define     CBF_FAIL_EXECUTES            0x00008000\n#define     CBF_FAIL_POKES               0x00010000\n#define     CBF_FAIL_REQUESTS            0x00020000\n#define     CBF_FAIL_ALLSVRXACTIONS      0x0003f000\n\n#define     CBF_SKIP_CONNECT_CONFIRMS    0x00040000\n#define     CBF_SKIP_REGISTRATIONS       0x00080000\n#define     CBF_SKIP_UNREGISTRATIONS     0x00100000\n#define     CBF_SKIP_DISCONNECTS         0x00200000\n#define     CBF_SKIP_ALLNOTIFICATIONS    0x003c0000\n\n#define     CBR_BLOCK                    ((HDDEDATA)-1)\n\n/*\n * Application command flags\n */\n#define     APPCMD_CLIENTONLY            __MSABI_LONG(0x00000010)\n#define     APPCMD_FILTERINITS           __MSABI_LONG(0x00000020)\n#define     APPCMD_MASK                  __MSABI_LONG(0x00000FF0)\n\n/*\n * Application classification flags\n */\n\n#define     APPCLASS_STANDARD            __MSABI_LONG(0x00000000)\n#define     APPCLASS_MONITOR             __MSABI_LONG(0x00000001)\n#define     APPCLASS_MASK                __MSABI_LONG(0x0000000F)\n\n/*\n * Callback filter flags for use with MONITOR apps - 0 implies no monitor\n * callbacks.\n */\n#define     MF_HSZ_INFO                  0x01000000\n#define     MF_SENDMSGS                  0x02000000\n#define     MF_POSTMSGS                  0x04000000\n#define     MF_CALLBACKS                 0x08000000\n#define     MF_ERRORS                    0x10000000\n#define     MF_LINKS                     0x20000000\n#define     MF_CONV                      0x40000000\n\n#define     MF_MASK                      0xFF000000\n\n/*\n *\tDdeNameService service name flags\n */\n\n#define     DNS_REGISTER\t\t 0x0001\n#define     DNS_UNREGISTER\t\t 0x0002\n#define     DNS_FILTERON\t\t 0x0004\n#define     DNS_FILTEROFF         \t 0x0008\n\n\n/****************************************************\n\n      End of Flags section\n\n****************************************************/\n\n/****************************************************\n\n\tMessage Types Section\n\n****************************************************/\n\n#define XTYPF_NOBLOCK\t\t0x0002\t\t/* CBR_NOBLOCK will not work */\n#define XTYPF_NODATA\t\t0x0004\t\t/* DDE_FDEFERUPD  */\n#define XTYPF_ACKREQ\t\t0x0008\t\t/* DDE_FACKREQ */\n\n#define XCLASS_MASK\t\t0xFC00\n#define XCLASS_BOOL\t\t0x1000\n#define XCLASS_DATA\t\t0x2000\n#define XCLASS_FLAGS\t\t0x4000\n#define\tXCLASS_NOTIFICATION\t0x8000\n\n#define XTYP_ERROR\t\t(0x0000 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK)\n#define XTYP_ADVDATA\t\t(0x0010 | XCLASS_FLAGS)\n#define XTYP_ADVREQ\t\t(0x0020 | XCLASS_DATA | XTYPF_NOBLOCK)\n#define XTYP_ADVSTART\t\t(0x0030 | XCLASS_BOOL)\n#define XTYP_ADVSTOP\t\t(0x0040 | XCLASS_NOTIFICATION)\n#define XTYP_EXECUTE\t\t(0x0050 | XCLASS_FLAGS)\n#define XTYP_CONNECT\t\t(0x0060 | XCLASS_BOOL | XTYPF_NOBLOCK)\n#define XTYP_CONNECT_CONFIRM\t(0x0070 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK)\n#define XTYP_XACT_COMPLETE\t(0x0080 | XCLASS_NOTIFICATION )\n#define XTYP_POKE\t\t(0x0090 | XCLASS_FLAGS)\n#define XTYP_REGISTER\t\t(0x00A0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK )\n#define XTYP_REQUEST\t\t(0x00B0 | XCLASS_DATA )\n#define XTYP_DISCONNECT\t\t(0x00C0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK )\n#define XTYP_UNREGISTER\t\t(0x00D0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK )\n#define XTYP_WILDCONNECT\t(0x00E0 | XCLASS_DATA | XTYPF_NOBLOCK)\n#define XTYP_MONITOR\t\t(0x00F0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK)\n\n#define XTYP_MASK\t\t0x00F0\n#define XTYP_SHIFT\t\t4\n\n#define TIMEOUT_ASYNC           0xFFFFFFFF\n\n#define CADV_LATEACK\t\t0xFFFF\n\n/**************************************************\n\n\tEnd of Message Types Section\n\n****************************************************/\n\n/*****************************************************\n\n\tDDE Codes for wStatus field\n\n*****************************************************/\n\n#define DDE_FACK\t\t0x8000\n#define DDE_FBUSY\t\t0x4000\n#define DDE_FDEFERUPD\t\t0x4000\n#define DDE_FACKREQ\t\t0x8000\n#define DDE_FRELEASE\t\t0x2000\n#define DDE_FREQUESTED\t\t0x1000\n#define DDE_FAPPSTATUS\t\t0x00FF\n#define DDE_FNOTPROCESSED\t0x0000\n\n#define DDE_FACKRESERVED        (~(DDE_FACK | DDE_FBUSY | DDE_FAPPSTATUS))\n#define DDE_FADVRESERVED        (~(DDE_FACKREQ | DDE_FDEFERUPD))\n#define DDE_FDATRESERVED        (~(DDE_FACKREQ | DDE_FRELEASE | DDE_FREQUESTED))\n#define DDE_FPOKRESERVED        (~(DDE_FRELEASE))\n\n/*****************************************************\n\n\tEnd of wStatus codes\n\n*****************************************************/\n\n/****************************************************\n\n      Return Codes section again copied from SDK as must be same\n\n*****************************************************/\n\n#define     DMLERR_NO_ERROR                    0       /* must be 0 */\n\n#define     DMLERR_FIRST                       0x4000\n\n#define     DMLERR_ADVACKTIMEOUT               0x4000\n#define     DMLERR_BUSY                        0x4001\n#define     DMLERR_DATAACKTIMEOUT              0x4002\n#define     DMLERR_DLL_NOT_INITIALIZED         0x4003\n#define     DMLERR_DLL_USAGE                   0x4004\n#define     DMLERR_EXECACKTIMEOUT              0x4005\n#define     DMLERR_INVALIDPARAMETER            0x4006\n#define     DMLERR_LOW_MEMORY                  0x4007\n#define     DMLERR_MEMORY_ERROR                0x4008\n#define     DMLERR_NOTPROCESSED                0x4009\n#define     DMLERR_NO_CONV_ESTABLISHED         0x400a\n#define     DMLERR_POKEACKTIMEOUT              0x400b\n#define     DMLERR_POSTMSG_FAILED              0x400c\n#define     DMLERR_REENTRANCY                  0x400d\n#define     DMLERR_SERVER_DIED                 0x400e\n#define     DMLERR_SYS_ERROR                   0x400f\n#define     DMLERR_UNADVACKTIMEOUT             0x4010\n#define     DMLERR_UNFOUND_QUEUE_ID            0x4011\n\n#define     DMLERR_LAST                        0x4011\n\n#define     HDATA_APPOWNED          \t       0x0001\n\n/*****************************************************\n\n      End of Return Codes and Microsoft section\n\n******************************************************/\n\n\n\nDECLARE_HANDLE(HCONVLIST);\nDECLARE_HANDLE(HCONV);\nDECLARE_HANDLE(HSZ);\nDECLARE_HANDLE(HDDEDATA);\n\n\n\n/*******************************************************\n\n\tAPI Entry Points\n\n*******************************************************/\n\ntypedef HDDEDATA (CALLBACK *PFNCALLBACK)(UINT, UINT, HCONV, HSZ, HSZ,\n\t\t\t\t\t HDDEDATA, ULONG_PTR, ULONG_PTR);\n\n/***************************************************\n\n\tExternally visible data structures\n\n***************************************************/\n\ntypedef struct tagHSZPAIR\n{\n    HSZ hszSvc;\n    HSZ hszTopic;\n} HSZPAIR, *PHSZPAIR;\n\ntypedef struct tagCONVCONTEXT\n{\n    UINT  cb;\n    UINT  wFlags;\n    UINT  wCountryID;\n    INT   iCodePage;\n    DWORD dwLangID;\n    DWORD dwSecurity;\n    SECURITY_QUALITY_OF_SERVICE qos;\n} CONVCONTEXT, *PCONVCONTEXT;\n\ntypedef struct tagCONVINFO\n{\n    DWORD\t\tcb;\n    DWORD_PTR \t\thUser;\n    HCONV\t\thConvPartner;\n    HSZ\t\t\thszSvcPartner;\n    HSZ\t\t\thszServiceReq;\n    HSZ\t\t\thszTopic;\n    HSZ\t\t\thszItem;\n    UINT\t\twFmt;\n    UINT\t\twType;\n    UINT\t\twStatus;\n    UINT\t\twConvst;\n    UINT\t\twLastError;\n    HCONVLIST\t\thConvList;\n    CONVCONTEXT\t\tConvCtxt;\n    HWND\t\thwnd;\n    HWND\t\thwndPartner;\n} CONVINFO, *PCONVINFO;\n\n/*            Interface Definitions\t\t*/\n\nWINUSERAPI BOOL      WINAPI DdeAbandonTransaction(DWORD idInst, HCONV hConv, DWORD idTransaction);\nWINUSERAPI LPBYTE    WINAPI DdeAccessData(HDDEDATA,LPDWORD);\nWINUSERAPI HDDEDATA  WINAPI DdeAddData(HDDEDATA,LPBYTE,DWORD,DWORD);\nWINUSERAPI HDDEDATA  WINAPI DdeClientTransaction(LPBYTE,DWORD,HCONV,HSZ,UINT,UINT,DWORD,LPDWORD);\nWINUSERAPI INT       WINAPI DdeCmpStringHandles(HSZ,HSZ);\nWINUSERAPI HCONV     WINAPI DdeConnect(DWORD,HSZ,HSZ,PCONVCONTEXT);\nWINUSERAPI HCONVLIST WINAPI DdeConnectList(DWORD,HSZ,HSZ,HCONVLIST,PCONVCONTEXT);\nWINUSERAPI HDDEDATA  WINAPI DdeCreateDataHandle(DWORD,LPBYTE,DWORD,DWORD,HSZ,UINT,UINT);\nWINUSERAPI HSZ       WINAPI DdeCreateStringHandleA(DWORD,LPCSTR,INT);\nWINUSERAPI HSZ       WINAPI DdeCreateStringHandleW(DWORD,LPCWSTR,INT);\n#define                     DdeCreateStringHandle WINELIB_NAME_AW(DdeCreateStringHandle)\nWINUSERAPI BOOL      WINAPI DdeDisconnect(HCONV);\nWINUSERAPI BOOL      WINAPI DdeDisconnectList(HCONVLIST);\nWINUSERAPI BOOL      WINAPI DdeEnableCallback(DWORD,HCONV,UINT);\nWINUSERAPI BOOL      WINAPI DdeFreeDataHandle(HDDEDATA);\nWINUSERAPI BOOL      WINAPI DdeFreeStringHandle(DWORD,HSZ);\nWINUSERAPI DWORD     WINAPI DdeGetData(HDDEDATA,LPBYTE,DWORD,DWORD);\nWINUSERAPI UINT      WINAPI DdeGetLastError(DWORD);\nWINUSERAPI BOOL      WINAPI DdeImpersonateClient(HCONV);\nWINUSERAPI UINT      WINAPI DdeInitializeA(LPDWORD,PFNCALLBACK,DWORD,DWORD);\nWINUSERAPI UINT      WINAPI DdeInitializeW(LPDWORD,PFNCALLBACK,DWORD,DWORD);\n#define                     DdeInitialize WINELIB_NAME_AW(DdeInitialize)\nWINUSERAPI BOOL      WINAPI DdeKeepStringHandle(DWORD,HSZ);\nWINUSERAPI HDDEDATA  WINAPI DdeNameService(DWORD,HSZ,HSZ,UINT);\nWINUSERAPI BOOL      WINAPI DdePostAdvise(DWORD,HSZ,HSZ);\nWINUSERAPI UINT      WINAPI DdeQueryConvInfo(HCONV,DWORD,PCONVINFO);\nWINUSERAPI HCONV     WINAPI DdeQueryNextServer(HCONVLIST, HCONV);\nWINUSERAPI DWORD     WINAPI DdeQueryStringA(DWORD, HSZ, LPSTR, DWORD, INT);\nWINUSERAPI DWORD     WINAPI DdeQueryStringW(DWORD, HSZ, LPWSTR, DWORD, INT);\n#define                     DdeQueryString WINELIB_NAME_AW(DdeQueryString)\nWINUSERAPI HCONV     WINAPI DdeReconnect(HCONV);\nWINUSERAPI BOOL      WINAPI DdeSetUserHandle(HCONV,DWORD,DWORD);\nWINUSERAPI BOOL      WINAPI DdeUnaccessData(HDDEDATA);\nWINUSERAPI BOOL      WINAPI DdeUninitialize(DWORD);\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif  /* __WINE_DDEML_H */\n"
  },
  {
    "path": "wine/windows/ddraw.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __DDRAW_INCLUDED__\n#define __DDRAW_INCLUDED__\n\n#define COM_NO_WINDOWS_H\n#include <objbase.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n#ifndef\tDIRECTDRAW_VERSION\n#define\tDIRECTDRAW_VERSION\t0x0700\n#endif /* DIRECTDRAW_VERSION */\n\n/*****************************************************************************\n * Predeclare the interfaces\n */\n#ifndef __DDRAW_GUID_DEFINED__\nDEFINE_GUID( CLSID_DirectDraw,\t\t0xD7B70EE0,0x4340,0x11CF,0xB0,0x63,0x00,0x20,0xAF,0xC2,0xCD,0x35 );\nDEFINE_GUID( CLSID_DirectDraw7,         0x3C305196,0x50DB,0x11D3,0x9C,0xFE,0x00,0xC0,0x4F,0xD9,0x30,0xC5 );\nDEFINE_GUID( CLSID_DirectDrawClipper,\t0x593817A0,0x7DB3,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xb9,0x33,0x56 );\nDEFINE_GUID( IID_IDirectDraw,\t\t0x6C14DB80,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );\nDEFINE_GUID( IID_IDirectDraw2,\t\t0xB3A6F3E0,0x2B43,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xB9,0x33,0x56 );\nDEFINE_GUID( IID_IDirectDraw3,\t\t0x618f8ad4,0x8b7a,0x11d0,0x8f,0xcc,0x0,0xc0,0x4f,0xd9,0x18,0x9d );\nDEFINE_GUID( IID_IDirectDraw4,          0x9c59509a,0x39bd,0x11d1,0x8c,0x4a,0x00,0xc0,0x4f,0xd9,0x30,0xc5 );\nDEFINE_GUID( IID_IDirectDraw7,          0x15e65ec0,0x3b9c,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b );\nDEFINE_GUID( IID_IDirectDrawSurface,\t0x6C14DB81,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );\nDEFINE_GUID( IID_IDirectDrawSurface2,\t0x57805885,0x6eec,0x11cf,0x94,0x41,0xa8,0x23,0x03,0xc1,0x0e,0x27 );\nDEFINE_GUID( IID_IDirectDrawSurface3,\t0xDA044E00,0x69B2,0x11D0,0xA1,0xD5,0x00,0xAA,0x00,0xB8,0xDF,0xBB );\nDEFINE_GUID( IID_IDirectDrawSurface4,   0x0B2B8630,0xAD35,0x11D0,0x8E,0xA6,0x00,0x60,0x97,0x97,0xEA,0x5B );\nDEFINE_GUID( IID_IDirectDrawSurface7,   0x06675a80,0x3b9b,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b );\nDEFINE_GUID( IID_IDirectDrawPalette,\t0x6C14DB84,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );\nDEFINE_GUID( IID_IDirectDrawClipper,\t0x6C14DB85,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );\nDEFINE_GUID( IID_IDirectDrawColorControl,0x4B9F0EE0,0x0D7E,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8 );\nDEFINE_GUID( IID_IDirectDrawGammaControl,0x69C11C3E,0xB46B,0x11D1,0xAD,0x7A,0x00,0xC0,0x4F,0xC2,0x9B,0x4E );\n#endif\n\ntypedef struct IDirectDraw *LPDIRECTDRAW;\ntypedef struct IDirectDraw2 *LPDIRECTDRAW2;\ntypedef struct IDirectDraw3 *LPDIRECTDRAW3;\ntypedef struct IDirectDraw4 *LPDIRECTDRAW4;\ntypedef struct IDirectDraw7 *LPDIRECTDRAW7;\ntypedef struct IDirectDrawClipper *LPDIRECTDRAWCLIPPER;\ntypedef struct IDirectDrawPalette *LPDIRECTDRAWPALETTE;\ntypedef struct IDirectDrawSurface *LPDIRECTDRAWSURFACE;\ntypedef struct IDirectDrawSurface2 *LPDIRECTDRAWSURFACE2;\ntypedef struct IDirectDrawSurface3 *LPDIRECTDRAWSURFACE3;\ntypedef struct IDirectDrawSurface4 *LPDIRECTDRAWSURFACE4;\ntypedef struct IDirectDrawSurface7 *LPDIRECTDRAWSURFACE7;\ntypedef struct IDirectDrawColorControl *LPDIRECTDRAWCOLORCONTROL;\ntypedef struct IDirectDrawGammaControl *LPDIRECTDRAWGAMMACONTROL;\n\n\n#define DDENUMRET_CANCEL\t0\n#define DDENUMRET_OK\t\t1\n\n#define DD_OK\t\t\tS_OK\n#define DD_FALSE\t\tS_FALSE\n\n\n#define _FACDD\t\t0x876\n#define MAKE_DDHRESULT( code )  MAKE_HRESULT( 1, _FACDD, code )\n\n#define DDERR_ALREADYINITIALIZED\t\tMAKE_DDHRESULT( 5 )\n#define DDERR_CANNOTATTACHSURFACE\t\tMAKE_DDHRESULT( 10 )\n#define DDERR_CANNOTDETACHSURFACE\t\tMAKE_DDHRESULT( 20 )\n#define DDERR_CURRENTLYNOTAVAIL\t\t\tMAKE_DDHRESULT( 40 )\n#define DDERR_EXCEPTION\t\t\t\tMAKE_DDHRESULT( 55 )\n#define DDERR_GENERIC\t\t\t\tE_FAIL\n#define DDERR_HEIGHTALIGN\t\t\tMAKE_DDHRESULT( 90 )\n#define DDERR_INCOMPATIBLEPRIMARY\t\tMAKE_DDHRESULT( 95 )\n#define DDERR_INVALIDCAPS\t\t\tMAKE_DDHRESULT( 100 )\n#define DDERR_INVALIDCLIPLIST\t\t\tMAKE_DDHRESULT( 110 )\n#define DDERR_INVALIDMODE\t\t\tMAKE_DDHRESULT( 120 )\n#define DDERR_INVALIDOBJECT\t\t\tMAKE_DDHRESULT( 130 )\n#define DDERR_INVALIDPARAMS\t\t\tE_INVALIDARG\n#define DDERR_INVALIDPIXELFORMAT\t\tMAKE_DDHRESULT( 145 )\n#define DDERR_INVALIDRECT\t\t\tMAKE_DDHRESULT( 150 )\n#define DDERR_LOCKEDSURFACES\t\t\tMAKE_DDHRESULT( 160 )\n#define DDERR_NO3D\t\t\t\tMAKE_DDHRESULT( 170 )\n#define DDERR_NOALPHAHW\t\t\t\tMAKE_DDHRESULT( 180 )\n#define DDERR_NOSTEREOHARDWARE          \tMAKE_DDHRESULT( 181 )\n#define DDERR_NOSURFACELEFT                     MAKE_DDHRESULT( 182 )\n#define DDERR_NOCLIPLIST\t\t\tMAKE_DDHRESULT( 205 )\n#define DDERR_NOCOLORCONVHW\t\t\tMAKE_DDHRESULT( 210 )\n#define DDERR_NOCOOPERATIVELEVELSET\t\tMAKE_DDHRESULT( 212 )\n#define DDERR_NOCOLORKEY\t\t\tMAKE_DDHRESULT( 215 )\n#define DDERR_NOCOLORKEYHW\t\t\tMAKE_DDHRESULT( 220 )\n#define DDERR_NODIRECTDRAWSUPPORT\t\tMAKE_DDHRESULT( 222 )\n#define DDERR_NOEXCLUSIVEMODE\t\t\tMAKE_DDHRESULT( 225 )\n#define DDERR_NOFLIPHW\t\t\t\tMAKE_DDHRESULT( 230 )\n#define DDERR_NOGDI\t\t\t\tMAKE_DDHRESULT( 240 )\n#define DDERR_NOMIRRORHW\t\t\tMAKE_DDHRESULT( 250 )\n#define DDERR_NOTFOUND\t\t\t\tMAKE_DDHRESULT( 255 )\n#define DDERR_NOOVERLAYHW\t\t\tMAKE_DDHRESULT( 260 )\n#define DDERR_OVERLAPPINGRECTS                  MAKE_DDHRESULT( 270 )\n#define DDERR_NORASTEROPHW\t\t\tMAKE_DDHRESULT( 280 )\n#define DDERR_NOROTATIONHW\t\t\tMAKE_DDHRESULT( 290 )\n#define DDERR_NOSTRETCHHW\t\t\tMAKE_DDHRESULT( 310 )\n#define DDERR_NOT4BITCOLOR\t\t\tMAKE_DDHRESULT( 316 )\n#define DDERR_NOT4BITCOLORINDEX\t\t\tMAKE_DDHRESULT( 317 )\n#define DDERR_NOT8BITCOLOR\t\t\tMAKE_DDHRESULT( 320 )\n#define DDERR_NOTEXTUREHW\t\t\tMAKE_DDHRESULT( 330 )\n#define DDERR_NOVSYNCHW\t\t\t\tMAKE_DDHRESULT( 335 )\n#define DDERR_NOZBUFFERHW\t\t\tMAKE_DDHRESULT( 340 )\n#define DDERR_NOZOVERLAYHW\t\t\tMAKE_DDHRESULT( 350 )\n#define DDERR_OUTOFCAPS\t\t\t\tMAKE_DDHRESULT( 360 )\n#define DDERR_OUTOFMEMORY\t\t\tE_OUTOFMEMORY\n#define DDERR_OUTOFVIDEOMEMORY\t\t\tMAKE_DDHRESULT( 380 )\n#define DDERR_OVERLAYCANTCLIP\t\t\tMAKE_DDHRESULT( 382 )\n#define DDERR_OVERLAYCOLORKEYONLYONEACTIVE\tMAKE_DDHRESULT( 384 )\n#define DDERR_PALETTEBUSY\t\t\tMAKE_DDHRESULT( 387 )\n#define DDERR_COLORKEYNOTSET\t\t\tMAKE_DDHRESULT( 400 )\n#define DDERR_SURFACEALREADYATTACHED\t\tMAKE_DDHRESULT( 410 )\n#define DDERR_SURFACEALREADYDEPENDENT\t\tMAKE_DDHRESULT( 420 )\n#define DDERR_SURFACEBUSY\t\t\tMAKE_DDHRESULT( 430 )\n#define DDERR_CANTLOCKSURFACE\t\t\tMAKE_DDHRESULT( 435 )\n#define DDERR_SURFACEISOBSCURED\t\t\tMAKE_DDHRESULT( 440 )\n#define DDERR_SURFACELOST\t\t\tMAKE_DDHRESULT( 450 )\n#define DDERR_SURFACENOTATTACHED\t\tMAKE_DDHRESULT( 460 )\n#define DDERR_TOOBIGHEIGHT\t\t\tMAKE_DDHRESULT( 470 )\n#define DDERR_TOOBIGSIZE\t\t\tMAKE_DDHRESULT( 480 )\n#define DDERR_TOOBIGWIDTH\t\t\tMAKE_DDHRESULT( 490 )\n#define DDERR_UNSUPPORTED\t\t\tE_NOTIMPL\n#define DDERR_UNSUPPORTEDFORMAT\t\t\tMAKE_DDHRESULT( 510 )\n#define DDERR_UNSUPPORTEDMASK\t\t\tMAKE_DDHRESULT( 520 )\n#define DDERR_INVALIDSTREAM                     MAKE_DDHRESULT( 521 )\n#define DDERR_VERTICALBLANKINPROGRESS\t\tMAKE_DDHRESULT( 537 )\n#define DDERR_WASSTILLDRAWING\t\t\tMAKE_DDHRESULT( 540 )\n#define DDERR_DDSCAPSCOMPLEXREQUIRED            MAKE_DDHRESULT( 542 )\n#define DDERR_XALIGN\t\t\t\tMAKE_DDHRESULT( 560 )\n#define DDERR_INVALIDDIRECTDRAWGUID\t\tMAKE_DDHRESULT( 561 )\n#define DDERR_DIRECTDRAWALREADYCREATED\t\tMAKE_DDHRESULT( 562 )\n#define DDERR_NODIRECTDRAWHW\t\t\tMAKE_DDHRESULT( 563 )\n#define DDERR_PRIMARYSURFACEALREADYEXISTS\tMAKE_DDHRESULT( 564 )\n#define DDERR_NOEMULATION\t\t\tMAKE_DDHRESULT( 565 )\n#define DDERR_REGIONTOOSMALL\t\t\tMAKE_DDHRESULT( 566 )\n#define DDERR_CLIPPERISUSINGHWND\t\tMAKE_DDHRESULT( 567 )\n#define DDERR_NOCLIPPERATTACHED\t\t\tMAKE_DDHRESULT( 568 )\n#define DDERR_NOHWND\t\t\t\tMAKE_DDHRESULT( 569 )\n#define DDERR_HWNDSUBCLASSED\t\t\tMAKE_DDHRESULT( 570 )\n#define DDERR_HWNDALREADYSET\t\t\tMAKE_DDHRESULT( 571 )\n#define DDERR_NOPALETTEATTACHED\t\t\tMAKE_DDHRESULT( 572 )\n#define DDERR_NOPALETTEHW\t\t\tMAKE_DDHRESULT( 573 )\n#define DDERR_BLTFASTCANTCLIP\t\t\tMAKE_DDHRESULT( 574 )\n#define DDERR_NOBLTHW\t\t\t\tMAKE_DDHRESULT( 575 )\n#define DDERR_NODDROPSHW\t\t\tMAKE_DDHRESULT( 576 )\n#define DDERR_OVERLAYNOTVISIBLE\t\t\tMAKE_DDHRESULT( 577 )\n#define DDERR_NOOVERLAYDEST\t\t\tMAKE_DDHRESULT( 578 )\n#define DDERR_INVALIDPOSITION\t\t\tMAKE_DDHRESULT( 579 )\n#define DDERR_NOTAOVERLAYSURFACE\t\tMAKE_DDHRESULT( 580 )\n#define DDERR_EXCLUSIVEMODEALREADYSET\t\tMAKE_DDHRESULT( 581 )\n#define DDERR_NOTFLIPPABLE\t\t\tMAKE_DDHRESULT( 582 )\n#define DDERR_CANTDUPLICATE\t\t\tMAKE_DDHRESULT( 583 )\n#define DDERR_NOTLOCKED\t\t\t\tMAKE_DDHRESULT( 584 )\n#define DDERR_CANTCREATEDC\t\t\tMAKE_DDHRESULT( 585 )\n#define DDERR_NODC\t\t\t\tMAKE_DDHRESULT( 586 )\n#define DDERR_WRONGMODE\t\t\t\tMAKE_DDHRESULT( 587 )\n#define DDERR_IMPLICITLYCREATED\t\t\tMAKE_DDHRESULT( 588 )\n#define DDERR_NOTPALETTIZED\t\t\tMAKE_DDHRESULT( 589 )\n#define DDERR_UNSUPPORTEDMODE\t\t\tMAKE_DDHRESULT( 590 )\n#define DDERR_NOMIPMAPHW\t\t\tMAKE_DDHRESULT( 591 )\n#define DDERR_INVALIDSURFACETYPE\t\tMAKE_DDHRESULT( 592 )\n#define DDERR_NOOPTIMIZEHW\t\t\tMAKE_DDHRESULT( 600 )\n#define DDERR_NOTLOADED\t\t\t\tMAKE_DDHRESULT( 601 )\n#define DDERR_NOFOCUSWINDOW\t\t\tMAKE_DDHRESULT( 602 )\n#define DDERR_NOTONMIPMAPSUBLEVEL               MAKE_DDHRESULT( 603 )\n#define DDERR_DCALREADYCREATED\t\t\tMAKE_DDHRESULT( 620 )\n#define DDERR_NONONLOCALVIDMEM\t\t\tMAKE_DDHRESULT( 630 )\n#define DDERR_CANTPAGELOCK\t\t\tMAKE_DDHRESULT( 640 )\n#define DDERR_CANTPAGEUNLOCK\t\t\tMAKE_DDHRESULT( 660 )\n#define DDERR_NOTPAGELOCKED\t\t\tMAKE_DDHRESULT( 680 )\n#define DDERR_MOREDATA\t\t\t\tMAKE_DDHRESULT( 690 )\n#define DDERR_EXPIRED                           MAKE_DDHRESULT( 691 )\n#define DDERR_TESTFINISHED                      MAKE_DDHRESULT( 692 )\n#define DDERR_NEWMODE                           MAKE_DDHRESULT( 693 )\n#define DDERR_D3DNOTINITIALIZED                 MAKE_DDHRESULT( 694 )\n#define DDERR_VIDEONOTACTIVE\t\t\tMAKE_DDHRESULT( 695 )\n#define DDERR_NOMONITORINFORMATION              MAKE_DDHRESULT( 696 )\n#define DDERR_NODRIVERSUPPORT                   MAKE_DDHRESULT( 697 )\n#define DDERR_DEVICEDOESNTOWNSURFACE\t\tMAKE_DDHRESULT( 699 )\n#define DDERR_NOTINITIALIZED\t\t\tCO_E_NOTINITIALIZED\n\n/* dwFlags for Blt* */\n#define DDBLT_ALPHADEST\t\t\t\t0x00000001\n#define DDBLT_ALPHADESTCONSTOVERRIDE\t\t0x00000002\n#define DDBLT_ALPHADESTNEG\t\t\t0x00000004\n#define DDBLT_ALPHADESTSURFACEOVERRIDE\t\t0x00000008\n#define DDBLT_ALPHAEDGEBLEND\t\t\t0x00000010\n#define DDBLT_ALPHASRC\t\t\t\t0x00000020\n#define DDBLT_ALPHASRCCONSTOVERRIDE\t\t0x00000040\n#define DDBLT_ALPHASRCNEG\t\t\t0x00000080\n#define DDBLT_ALPHASRCSURFACEOVERRIDE\t\t0x00000100\n#define DDBLT_ASYNC\t\t\t\t0x00000200\n#define DDBLT_COLORFILL\t\t\t\t0x00000400\n#define DDBLT_DDFX\t\t\t\t0x00000800\n#define DDBLT_DDROPS\t\t\t\t0x00001000\n#define DDBLT_KEYDEST\t\t\t\t0x00002000\n#define DDBLT_KEYDESTOVERRIDE\t\t\t0x00004000\n#define DDBLT_KEYSRC\t\t\t\t0x00008000\n#define DDBLT_KEYSRCOVERRIDE\t\t\t0x00010000\n#define DDBLT_ROP\t\t\t\t0x00020000\n#define DDBLT_ROTATIONANGLE\t\t\t0x00040000\n#define DDBLT_ZBUFFER\t\t\t\t0x00080000\n#define DDBLT_ZBUFFERDESTCONSTOVERRIDE\t\t0x00100000\n#define DDBLT_ZBUFFERDESTOVERRIDE\t\t0x00200000\n#define DDBLT_ZBUFFERSRCCONSTOVERRIDE\t\t0x00400000\n#define DDBLT_ZBUFFERSRCOVERRIDE\t\t0x00800000\n#define DDBLT_WAIT\t\t\t\t0x01000000\n#define DDBLT_DEPTHFILL\t\t\t\t0x02000000\n#define DDBLT_DONOTWAIT                         0x08000000\n\n/* dwTrans for BltFast */\n#define DDBLTFAST_NOCOLORKEY\t\t\t0x00000000\n#define DDBLTFAST_SRCCOLORKEY\t\t\t0x00000001\n#define DDBLTFAST_DESTCOLORKEY\t\t\t0x00000002\n#define DDBLTFAST_WAIT\t\t\t\t0x00000010\n#define DDBLTFAST_DONOTWAIT                     0x00000020\n\n/* dwFlags for Flip */\n#define DDFLIP_WAIT\t\t0x00000001\n#define DDFLIP_EVEN\t\t0x00000002 /* only valid for overlay */\n#define DDFLIP_ODD\t\t0x00000004 /* only valid for overlay */\n#define DDFLIP_NOVSYNC\t\t0x00000008\n#define DDFLIP_STEREO\t\t0x00000010\n#define DDFLIP_DONOTWAIT\t0x00000020\n#define DDFLIP_INTERVAL2\t0x02000000\n#define DDFLIP_INTERVAL3\t0x03000000\n#define DDFLIP_INTERVAL4\t0x04000000\n\n\n/* dwFlags for GetBltStatus */\n#define DDGBS_CANBLT\t\t\t\t0x00000001\n#define DDGBS_ISBLTDONE\t\t\t\t0x00000002\n\n/* dwFlags for IDirectDrawSurface7::GetFlipStatus */\n#define DDGFS_CANFLIP           __MSABI_LONG(1)\n#define DDGFS_ISFLIPDONE        __MSABI_LONG(2)\n\n/* dwFlags for IDirectDrawSurface7::SetPrivateData */\n#define DDSPD_IUNKNOWNPOINTER   __MSABI_LONG(1)\n#define DDSPD_VOLATILE          __MSABI_LONG(2)\n\n/* DDSCAPS.dwCaps */\n/* reserved1, was 3d capable */\n#define DDSCAPS_RESERVED1\t\t0x00000001\n/* surface contains alpha information */\n#define DDSCAPS_ALPHA\t\t\t0x00000002\n/* this surface is a backbuffer */\n#define DDSCAPS_BACKBUFFER\t\t0x00000004\n/* complex surface structure */\n#define DDSCAPS_COMPLEX\t\t\t0x00000008\n/* part of surface flipping structure */\n#define DDSCAPS_FLIP\t\t\t0x00000010\n/* this surface is the frontbuffer surface */\n#define DDSCAPS_FRONTBUFFER\t\t0x00000020\n/* this is a plain offscreen surface */\n#define DDSCAPS_OFFSCREENPLAIN\t\t0x00000040\n/* overlay */\n#define DDSCAPS_OVERLAY\t\t\t0x00000080\n/* palette objects can be created and attached to us */\n#define DDSCAPS_PALETTE\t\t\t0x00000100\n/* primary surface (the one the user looks at currently)(right eye)*/\n#define DDSCAPS_PRIMARYSURFACE\t\t0x00000200\n/* primary surface for left eye */\n#define DDSCAPS_PRIMARYSURFACELEFT\t0x00000400\n/* surface exists in systemmemory */\n#define DDSCAPS_SYSTEMMEMORY\t\t0x00000800\n/* surface can be used as a texture */\n#define DDSCAPS_TEXTURE\t\t        0x00001000\n/* surface may be destination for 3d rendering */\n#define DDSCAPS_3DDEVICE\t\t0x00002000\n/* surface exists in videomemory */\n#define DDSCAPS_VIDEOMEMORY\t\t0x00004000\n/* surface changes immediately visible */\n#define DDSCAPS_VISIBLE\t\t\t0x00008000\n/* write only surface */\n#define DDSCAPS_WRITEONLY\t\t0x00010000\n/* zbuffer surface */\n#define DDSCAPS_ZBUFFER\t\t\t0x00020000\n/* has its own DC */\n#define DDSCAPS_OWNDC\t\t\t0x00040000\n/* surface should be able to receive live video */\n#define DDSCAPS_LIVEVIDEO\t\t0x00080000\n/* should be able to have a hw codec decompress stuff into it */\n#define DDSCAPS_HWCODEC\t\t\t0x00100000\n/* mode X (320x200 or 320x240) surface */\n#define DDSCAPS_MODEX\t\t\t0x00200000\n/* one mipmap surface (1 level) */\n#define DDSCAPS_MIPMAP\t\t\t0x00400000\n#define DDSCAPS_RESERVED2\t\t0x00800000\n/* memory allocation delayed until Load() */\n#define DDSCAPS_ALLOCONLOAD\t\t0x04000000\n/* Indicates that the surface will receive data from a video port */\n#define DDSCAPS_VIDEOPORT\t\t0x08000000\n/* surface is in local videomemory */\n#define DDSCAPS_LOCALVIDMEM\t\t0x10000000\n/* surface is in nonlocal videomemory */\n#define DDSCAPS_NONLOCALVIDMEM\t\t0x20000000\n/* surface is a standard VGA mode surface (NOT ModeX) */\n#define DDSCAPS_STANDARDVGAMODE\t\t0x40000000\n/* optimized? surface */\n#define DDSCAPS_OPTIMIZED\t\t0x80000000\n\ntypedef struct _DDSCAPS {\n\tDWORD\tdwCaps;\t/* capabilities of surface wanted */\n} DDSCAPS,*LPDDSCAPS;\n\n/* DDSCAPS2.dwCaps2 */\n/* indicates the surface will receive data from a video port using\n   deinterlacing hardware. */\n#define DDSCAPS2_HARDWAREDEINTERLACE\t0x00000002\n/* indicates the surface will be locked very frequently. */\n#define DDSCAPS2_HINTDYNAMIC\t\t0x00000004\n/* indicates surface can be re-ordered or retiled on load() */\n#define DDSCAPS2_HINTSTATIC             0x00000008\n/* indicates surface to be managed by directdraw/direct3D */\n#define DDSCAPS2_TEXTUREMANAGE          0x00000010\n/* reserved bits */\n#define DDSCAPS2_RESERVED1              0x00000020\n#define DDSCAPS2_RESERVED2              0x00000040\n/* indicates surface will never be locked again */\n#define DDSCAPS2_OPAQUE                 0x00000080\n/* set at CreateSurface() time to indicate antialiasing will be used */\n#define DDSCAPS2_HINTANTIALIASING       0x00000100\n/* set at CreateSurface() time to indicate cubic environment map */\n#define DDSCAPS2_CUBEMAP                0x00000200\n/* face flags for cube maps */\n#define DDSCAPS2_CUBEMAP_POSITIVEX      0x00000400\n#define DDSCAPS2_CUBEMAP_NEGATIVEX      0x00000800\n#define DDSCAPS2_CUBEMAP_POSITIVEY      0x00001000\n#define DDSCAPS2_CUBEMAP_NEGATIVEY      0x00002000\n#define DDSCAPS2_CUBEMAP_POSITIVEZ      0x00004000\n#define DDSCAPS2_CUBEMAP_NEGATIVEZ      0x00008000\n/* specifies all faces of a cube for CreateSurface() */\n#define DDSCAPS2_CUBEMAP_ALLFACES ( DDSCAPS2_CUBEMAP_POSITIVEX |\\\n                                    DDSCAPS2_CUBEMAP_NEGATIVEX |\\\n                                    DDSCAPS2_CUBEMAP_POSITIVEY |\\\n                                    DDSCAPS2_CUBEMAP_NEGATIVEY |\\\n                                    DDSCAPS2_CUBEMAP_POSITIVEZ |\\\n                                    DDSCAPS2_CUBEMAP_NEGATIVEZ )\n/* set for mipmap sublevels on DirectX7 and later.  ignored by CreateSurface() */\n#define DDSCAPS2_MIPMAPSUBLEVEL         0x00010000\n/* indicates texture surface to be managed by Direct3D *only* */\n#define DDSCAPS2_D3DTEXTUREMANAGE       0x00020000\n/* indicates managed surface that can safely be lost */\n#define DDSCAPS2_DONOTPERSIST           0x00040000\n/* indicates surface is part of a stereo flipping chain */\n#define DDSCAPS2_STEREOSURFACELEFT      0x00080000\n#define DDSCAPS2_VOLUME                 0x00200000\n\ntypedef struct _DDSCAPS2 {\n\tDWORD\tdwCaps;\t/* capabilities of surface wanted */\n\tDWORD   dwCaps2; /* additional capabilities */\n\tDWORD   dwCaps3; /* reserved capabilities */\n\tunion {\n\t\tDWORD dwCaps4; /* more reserved capabilities */\n\t\tDWORD dwVolumeDepth;\n\t} DUMMYUNIONNAME1;\n} DDSCAPS2,*LPDDSCAPS2;\n\n#define\tDD_ROP_SPACE\t(256/32)\t/* space required to store ROP array */\n\ntypedef struct _DDCAPS_DX7\t\t/* DirectX 7 version of caps struct */\n{\n    DWORD\tdwSize;                 /* size of the DDDRIVERCAPS structure */\n    DWORD\tdwCaps;                 /* driver specific capabilities */\n    DWORD\tdwCaps2;                /* more driver specific capabilities */\n    DWORD\tdwCKeyCaps;             /* color key capabilities of the surface */\n    DWORD\tdwFXCaps;               /* driver specific stretching and effects capabilities */\n    DWORD\tdwFXAlphaCaps;          /* alpha driver specific capabilities */\n    DWORD\tdwPalCaps;              /* palette capabilities */\n    DWORD\tdwSVCaps;               /* stereo vision capabilities */\n    DWORD\tdwAlphaBltConstBitDepths;       /* DDBD_2,4,8 */\n    DWORD\tdwAlphaBltPixelBitDepths;       /* DDBD_1,2,4,8 */\n    DWORD\tdwAlphaBltSurfaceBitDepths;     /* DDBD_1,2,4,8 */\n    DWORD\tdwAlphaOverlayConstBitDepths;   /* DDBD_2,4,8 */\n    DWORD\tdwAlphaOverlayPixelBitDepths;   /* DDBD_1,2,4,8 */\n    DWORD\tdwAlphaOverlaySurfaceBitDepths; /* DDBD_1,2,4,8 */\n    DWORD\tdwZBufferBitDepths;             /* DDBD_8,16,24,32 */\n    DWORD\tdwVidMemTotal;          /* total amount of video memory */\n    DWORD\tdwVidMemFree;           /* amount of free video memory */\n    DWORD\tdwMaxVisibleOverlays;   /* maximum number of visible overlays */\n    DWORD\tdwCurrVisibleOverlays;  /* current number of visible overlays */\n    DWORD\tdwNumFourCCCodes;       /* number of four cc codes */\n    DWORD\tdwAlignBoundarySrc;     /* source rectangle alignment */\n    DWORD\tdwAlignSizeSrc;         /* source rectangle byte size */\n    DWORD\tdwAlignBoundaryDest;    /* dest rectangle alignment */\n    DWORD\tdwAlignSizeDest;        /* dest rectangle byte size */\n    DWORD\tdwAlignStrideAlign;     /* stride alignment */\n    DWORD\tdwRops[DD_ROP_SPACE];   /* ROPs supported */\n    DDSCAPS\tddsOldCaps;             /* old DDSCAPS - superseded for DirectX6+ */\n    DWORD\tdwMinOverlayStretch;    /* minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */\n    DWORD\tdwMaxOverlayStretch;    /* maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */\n    DWORD\tdwMinLiveVideoStretch;  /* minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */\n    DWORD\tdwMaxLiveVideoStretch;  /* maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */\n    DWORD\tdwMinHwCodecStretch;    /* minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */\n    DWORD\tdwMaxHwCodecStretch;    /* maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */\n    DWORD\tdwReserved1;\n    DWORD\tdwReserved2;\n    DWORD\tdwReserved3;\n    DWORD\tdwSVBCaps;              /* driver specific capabilities for System->Vmem blts */\n    DWORD\tdwSVBCKeyCaps;          /* driver color key capabilities for System->Vmem blts */\n    DWORD\tdwSVBFXCaps;            /* driver FX capabilities for System->Vmem blts */\n    DWORD\tdwSVBRops[DD_ROP_SPACE];/* ROPs supported for System->Vmem blts */\n    DWORD\tdwVSBCaps;              /* driver specific capabilities for Vmem->System blts */\n    DWORD\tdwVSBCKeyCaps;          /* driver color key capabilities for Vmem->System blts */\n    DWORD\tdwVSBFXCaps;            /* driver FX capabilities for Vmem->System blts */\n    DWORD\tdwVSBRops[DD_ROP_SPACE];/* ROPs supported for Vmem->System blts */\n    DWORD\tdwSSBCaps;              /* driver specific capabilities for System->System blts */\n    DWORD\tdwSSBCKeyCaps;          /* driver color key capabilities for System->System blts */\n    DWORD\tdwSSBFXCaps;            /* driver FX capabilities for System->System blts */\n    DWORD\tdwSSBRops[DD_ROP_SPACE];/* ROPs supported for System->System blts */\n    DWORD       dwMaxVideoPorts;        /* maximum number of usable video ports */\n    DWORD   \tdwCurrVideoPorts;       /* current number of video ports used */\n    DWORD   \tdwSVBCaps2;             /* more driver specific capabilities for System->Vmem blts */\n    DWORD   \tdwNLVBCaps;             /* driver specific capabilities for non-local->local vidmem blts */\n    DWORD   \tdwNLVBCaps2;            /* more driver specific capabilities non-local->local vidmem blts */\n    DWORD   \tdwNLVBCKeyCaps;         /* driver color key capabilities for non-local->local vidmem blts */\n    DWORD   \tdwNLVBFXCaps;           /* driver FX capabilities for non-local->local blts */\n    DWORD   \tdwNLVBRops[DD_ROP_SPACE]; /* ROPs supported for non-local->local blts */\n    DDSCAPS2    ddsCaps;\t\t/* surface capabilities */\n} DDCAPS_DX7,*LPDDCAPS_DX7;\n\ntypedef struct _DDCAPS_DX6\t\t/* DirectX 6 version of caps struct */\n{\n    DWORD\tdwSize;                 /* size of the DDDRIVERCAPS structure */\n    DWORD\tdwCaps;                 /* driver specific capabilities */\n    DWORD\tdwCaps2;                /* more driver specific capabilities */\n    DWORD\tdwCKeyCaps;             /* color key capabilities of the surface */\n    DWORD\tdwFXCaps;               /* driver specific stretching and effects capabilities */\n    DWORD\tdwFXAlphaCaps;          /* alpha driver specific capabilities */\n    DWORD\tdwPalCaps;              /* palette capabilities */\n    DWORD\tdwSVCaps;               /* stereo vision capabilities */\n    DWORD\tdwAlphaBltConstBitDepths;       /* DDBD_2,4,8 */\n    DWORD\tdwAlphaBltPixelBitDepths;       /* DDBD_1,2,4,8 */\n    DWORD\tdwAlphaBltSurfaceBitDepths;     /* DDBD_1,2,4,8 */\n    DWORD\tdwAlphaOverlayConstBitDepths;   /* DDBD_2,4,8 */\n    DWORD\tdwAlphaOverlayPixelBitDepths;   /* DDBD_1,2,4,8 */\n    DWORD\tdwAlphaOverlaySurfaceBitDepths; /* DDBD_1,2,4,8 */\n    DWORD\tdwZBufferBitDepths;             /* DDBD_8,16,24,32 */\n    DWORD\tdwVidMemTotal;          /* total amount of video memory */\n    DWORD\tdwVidMemFree;           /* amount of free video memory */\n    DWORD\tdwMaxVisibleOverlays;   /* maximum number of visible overlays */\n    DWORD\tdwCurrVisibleOverlays;  /* current number of visible overlays */\n    DWORD\tdwNumFourCCCodes;       /* number of four cc codes */\n    DWORD\tdwAlignBoundarySrc;     /* source rectangle alignment */\n    DWORD\tdwAlignSizeSrc;         /* source rectangle byte size */\n    DWORD\tdwAlignBoundaryDest;    /* dest rectangle alignment */\n    DWORD\tdwAlignSizeDest;        /* dest rectangle byte size */\n    DWORD\tdwAlignStrideAlign;     /* stride alignment */\n    DWORD\tdwRops[DD_ROP_SPACE];   /* ROPs supported */\n    DDSCAPS\tddsOldCaps;             /* old DDSCAPS - superseded for DirectX6+ */\n    DWORD\tdwMinOverlayStretch;    /* minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */\n    DWORD\tdwMaxOverlayStretch;    /* maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */\n    DWORD\tdwMinLiveVideoStretch;  /* minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */\n    DWORD\tdwMaxLiveVideoStretch;  /* maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */\n    DWORD\tdwMinHwCodecStretch;    /* minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */\n    DWORD\tdwMaxHwCodecStretch;    /* maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */\n    DWORD\tdwReserved1;\n    DWORD\tdwReserved2;\n    DWORD\tdwReserved3;\n    DWORD\tdwSVBCaps;              /* driver specific capabilities for System->Vmem blts */\n    DWORD\tdwSVBCKeyCaps;          /* driver color key capabilities for System->Vmem blts */\n    DWORD\tdwSVBFXCaps;            /* driver FX capabilities for System->Vmem blts */\n    DWORD\tdwSVBRops[DD_ROP_SPACE];/* ROPs supported for System->Vmem blts */\n    DWORD\tdwVSBCaps;              /* driver specific capabilities for Vmem->System blts */\n    DWORD\tdwVSBCKeyCaps;          /* driver color key capabilities for Vmem->System blts */\n    DWORD\tdwVSBFXCaps;            /* driver FX capabilities for Vmem->System blts */\n    DWORD\tdwVSBRops[DD_ROP_SPACE];/* ROPs supported for Vmem->System blts */\n    DWORD\tdwSSBCaps;              /* driver specific capabilities for System->System blts */\n    DWORD\tdwSSBCKeyCaps;          /* driver color key capabilities for System->System blts */\n    DWORD\tdwSSBFXCaps;            /* driver FX capabilities for System->System blts */\n    DWORD\tdwSSBRops[DD_ROP_SPACE];/* ROPs supported for System->System blts */\n    DWORD       dwMaxVideoPorts;        /* maximum number of usable video ports */\n    DWORD   \tdwCurrVideoPorts;       /* current number of video ports used */\n    DWORD   \tdwSVBCaps2;             /* more driver specific capabilities for System->Vmem blts */\n    DWORD   \tdwNLVBCaps;             /* driver specific capabilities for non-local->local vidmem blts */\n    DWORD   \tdwNLVBCaps2;            /* more driver specific capabilities non-local->local vidmem blts */\n    DWORD   \tdwNLVBCKeyCaps;         /* driver color key capabilities for non-local->local vidmem blts */\n    DWORD   \tdwNLVBFXCaps;           /* driver FX capabilities for non-local->local blts */\n    DWORD   \tdwNLVBRops[DD_ROP_SPACE]; /* ROPs supported for non-local->local blts */\n    /* and one new member for DirectX 6 */\n    DDSCAPS2    ddsCaps;\t\t/* surface capabilities */\n} DDCAPS_DX6,*LPDDCAPS_DX6;\n\ntypedef struct _DDCAPS_DX5\t\t/* DirectX5 version of caps struct */\n{\n    DWORD\tdwSize;                 /* size of the DDDRIVERCAPS structure */\n    DWORD\tdwCaps;                 /* driver specific capabilities */\n    DWORD\tdwCaps2;                /* more driver specific capabilities */\n    DWORD\tdwCKeyCaps;             /* color key capabilities of the surface */\n    DWORD\tdwFXCaps;               /* driver specific stretching and effects capabilities */\n    DWORD\tdwFXAlphaCaps;          /* alpha driver specific capabilities */\n    DWORD\tdwPalCaps;              /* palette capabilities */\n    DWORD\tdwSVCaps;               /* stereo vision capabilities */\n    DWORD\tdwAlphaBltConstBitDepths;       /* DDBD_2,4,8 */\n    DWORD\tdwAlphaBltPixelBitDepths;       /* DDBD_1,2,4,8 */\n    DWORD\tdwAlphaBltSurfaceBitDepths;     /* DDBD_1,2,4,8 */\n    DWORD\tdwAlphaOverlayConstBitDepths;   /* DDBD_2,4,8 */\n    DWORD\tdwAlphaOverlayPixelBitDepths;   /* DDBD_1,2,4,8 */\n    DWORD\tdwAlphaOverlaySurfaceBitDepths; /* DDBD_1,2,4,8 */\n    DWORD\tdwZBufferBitDepths;             /* DDBD_8,16,24,32 */\n    DWORD\tdwVidMemTotal;          /* total amount of video memory */\n    DWORD\tdwVidMemFree;           /* amount of free video memory */\n    DWORD\tdwMaxVisibleOverlays;   /* maximum number of visible overlays */\n    DWORD\tdwCurrVisibleOverlays;  /* current number of visible overlays */\n    DWORD\tdwNumFourCCCodes;       /* number of four cc codes */\n    DWORD\tdwAlignBoundarySrc;     /* source rectangle alignment */\n    DWORD\tdwAlignSizeSrc;         /* source rectangle byte size */\n    DWORD\tdwAlignBoundaryDest;    /* dest rectangle alignment */\n    DWORD\tdwAlignSizeDest;        /* dest rectangle byte size */\n    DWORD\tdwAlignStrideAlign;     /* stride alignment */\n    DWORD\tdwRops[DD_ROP_SPACE];   /* ROPs supported */\n    DDSCAPS\tddsCaps;                /* DDSCAPS structure has all the general capabilities */\n    DWORD\tdwMinOverlayStretch;    /* minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */\n    DWORD\tdwMaxOverlayStretch;    /* maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */\n    DWORD\tdwMinLiveVideoStretch;  /* minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */\n    DWORD\tdwMaxLiveVideoStretch;  /* maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */\n    DWORD\tdwMinHwCodecStretch;    /* minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */\n    DWORD\tdwMaxHwCodecStretch;    /* maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */\n    DWORD\tdwReserved1;\n    DWORD\tdwReserved2;\n    DWORD\tdwReserved3;\n    DWORD\tdwSVBCaps;              /* driver specific capabilities for System->Vmem blts */\n    DWORD\tdwSVBCKeyCaps;          /* driver color key capabilities for System->Vmem blts */\n    DWORD\tdwSVBFXCaps;            /* driver FX capabilities for System->Vmem blts */\n    DWORD\tdwSVBRops[DD_ROP_SPACE];/* ROPs supported for System->Vmem blts */\n    DWORD\tdwVSBCaps;              /* driver specific capabilities for Vmem->System blts */\n    DWORD\tdwVSBCKeyCaps;          /* driver color key capabilities for Vmem->System blts */\n    DWORD\tdwVSBFXCaps;            /* driver FX capabilities for Vmem->System blts */\n    DWORD\tdwVSBRops[DD_ROP_SPACE];/* ROPs supported for Vmem->System blts */\n    DWORD\tdwSSBCaps;              /* driver specific capabilities for System->System blts */\n    DWORD\tdwSSBCKeyCaps;          /* driver color key capabilities for System->System blts */\n    DWORD\tdwSSBFXCaps;            /* driver FX capabilities for System->System blts */\n    DWORD\tdwSSBRops[DD_ROP_SPACE];/* ROPs supported for System->System blts */\n    /* the following are the new DirectX 5 members */\n    DWORD       dwMaxVideoPorts;        /* maximum number of usable video ports */\n    DWORD   \tdwCurrVideoPorts;       /* current number of video ports used */\n    DWORD   \tdwSVBCaps2;             /* more driver specific capabilities for System->Vmem blts */\n    DWORD   \tdwNLVBCaps;             /* driver specific capabilities for non-local->local vidmem blts */\n    DWORD   \tdwNLVBCaps2;            /* more driver specific capabilities non-local->local vidmem blts */\n    DWORD   \tdwNLVBCKeyCaps;         /* driver color key capabilities for non-local->local vidmem blts */\n    DWORD   \tdwNLVBFXCaps;           /* driver FX capabilities for non-local->local blts */\n    DWORD   \tdwNLVBRops[DD_ROP_SPACE]; /* ROPs supported for non-local->local blts */\n} DDCAPS_DX5,*LPDDCAPS_DX5;\n\ntypedef struct _DDCAPS_DX3\t\t/* DirectX3 version of caps struct */\n{\n    DWORD\tdwSize;                 /* size of the DDDRIVERCAPS structure */\n    DWORD\tdwCaps;                 /* driver specific capabilities */\n    DWORD\tdwCaps2;                /* more driver specific capabilities */\n    DWORD\tdwCKeyCaps;             /* color key capabilities of the surface */\n    DWORD\tdwFXCaps;               /* driver specific stretching and effects capabilities */\n    DWORD\tdwFXAlphaCaps;          /* alpha driver specific capabilities */\n    DWORD\tdwPalCaps;              /* palette capabilities */\n    DWORD\tdwSVCaps;               /* stereo vision capabilities */\n    DWORD\tdwAlphaBltConstBitDepths;       /* DDBD_2,4,8 */\n    DWORD\tdwAlphaBltPixelBitDepths;       /* DDBD_1,2,4,8 */\n    DWORD\tdwAlphaBltSurfaceBitDepths;     /* DDBD_1,2,4,8 */\n    DWORD\tdwAlphaOverlayConstBitDepths;   /* DDBD_2,4,8 */\n    DWORD\tdwAlphaOverlayPixelBitDepths;   /* DDBD_1,2,4,8 */\n    DWORD\tdwAlphaOverlaySurfaceBitDepths; /* DDBD_1,2,4,8 */\n    DWORD\tdwZBufferBitDepths;             /* DDBD_8,16,24,32 */\n    DWORD\tdwVidMemTotal;          /* total amount of video memory */\n    DWORD\tdwVidMemFree;           /* amount of free video memory */\n    DWORD\tdwMaxVisibleOverlays;   /* maximum number of visible overlays */\n    DWORD\tdwCurrVisibleOverlays;  /* current number of visible overlays */\n    DWORD\tdwNumFourCCCodes;       /* number of four cc codes */\n    DWORD\tdwAlignBoundarySrc;     /* source rectangle alignment */\n    DWORD\tdwAlignSizeSrc;         /* source rectangle byte size */\n    DWORD\tdwAlignBoundaryDest;    /* dest rectangle alignment */\n    DWORD\tdwAlignSizeDest;        /* dest rectangle byte size */\n    DWORD\tdwAlignStrideAlign;     /* stride alignment */\n    DWORD\tdwRops[DD_ROP_SPACE];   /* ROPs supported */\n    DDSCAPS\tddsCaps;                /* DDSCAPS structure has all the general capabilities */\n    DWORD\tdwMinOverlayStretch;    /* minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */\n    DWORD\tdwMaxOverlayStretch;    /* maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */\n    DWORD\tdwMinLiveVideoStretch;  /* minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */\n    DWORD\tdwMaxLiveVideoStretch;  /* maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */\n    DWORD\tdwMinHwCodecStretch;    /* minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */\n    DWORD\tdwMaxHwCodecStretch;    /* maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */\n    DWORD\tdwReserved1;\n    DWORD\tdwReserved2;\n    DWORD\tdwReserved3;\n    DWORD\tdwSVBCaps;              /* driver specific capabilities for System->Vmem blts */\n    DWORD\tdwSVBCKeyCaps;          /* driver color key capabilities for System->Vmem blts */\n    DWORD\tdwSVBFXCaps;            /* driver FX capabilities for System->Vmem blts */\n    DWORD\tdwSVBRops[DD_ROP_SPACE];/* ROPs supported for System->Vmem blts */\n    DWORD\tdwVSBCaps;              /* driver specific capabilities for Vmem->System blts */\n    DWORD\tdwVSBCKeyCaps;          /* driver color key capabilities for Vmem->System blts */\n    DWORD\tdwVSBFXCaps;            /* driver FX capabilities for Vmem->System blts */\n    DWORD\tdwVSBRops[DD_ROP_SPACE];/* ROPs supported for Vmem->System blts */\n    DWORD\tdwSSBCaps;              /* driver specific capabilities for System->System blts */\n    DWORD\tdwSSBCKeyCaps;          /* driver color key capabilities for System->System blts */\n    DWORD\tdwSSBFXCaps;            /* driver FX capabilities for System->System blts */\n    DWORD\tdwSSBRops[DD_ROP_SPACE];/* ROPs supported for System->System blts */\n    DWORD\tdwReserved4;\n    DWORD\tdwReserved5;\n    DWORD\tdwReserved6;\n} DDCAPS_DX3,*LPDDCAPS_DX3;\n\n/* set caps struct according to DIRECTDRAW_VERSION */\n\n#if DIRECTDRAW_VERSION <= 0x300\ntypedef DDCAPS_DX3 DDCAPS;\n#elif DIRECTDRAW_VERSION <= 0x500\ntypedef DDCAPS_DX5 DDCAPS;\n#elif DIRECTDRAW_VERSION <= 0x600\ntypedef DDCAPS_DX6 DDCAPS;\n#else\ntypedef DDCAPS_DX7 DDCAPS;\n#endif\n\ntypedef DDCAPS *LPDDCAPS;\n\n/* DDCAPS.dwCaps */\n#define DDCAPS_3D\t\t\t0x00000001\n#define DDCAPS_ALIGNBOUNDARYDEST\t0x00000002\n#define DDCAPS_ALIGNSIZEDEST\t\t0x00000004\n#define DDCAPS_ALIGNBOUNDARYSRC\t\t0x00000008\n#define DDCAPS_ALIGNSIZESRC\t\t0x00000010\n#define DDCAPS_ALIGNSTRIDE\t\t0x00000020\n#define DDCAPS_BLT\t\t\t0x00000040\n#define DDCAPS_BLTQUEUE\t\t\t0x00000080\n#define DDCAPS_BLTFOURCC\t\t0x00000100\n#define DDCAPS_BLTSTRETCH\t\t0x00000200\n#define DDCAPS_GDI\t\t\t0x00000400\n#define DDCAPS_OVERLAY\t\t\t0x00000800\n#define DDCAPS_OVERLAYCANTCLIP\t\t0x00001000\n#define DDCAPS_OVERLAYFOURCC\t\t0x00002000\n#define DDCAPS_OVERLAYSTRETCH\t\t0x00004000\n#define DDCAPS_PALETTE\t\t\t0x00008000\n#define DDCAPS_PALETTEVSYNC\t\t0x00010000\n#define DDCAPS_READSCANLINE\t\t0x00020000\n#define DDCAPS_STEREOVIEW\t\t0x00040000\n#define DDCAPS_VBI\t\t\t0x00080000\n#define DDCAPS_ZBLTS\t\t\t0x00100000\n#define DDCAPS_ZOVERLAYS\t\t0x00200000\n#define DDCAPS_COLORKEY\t\t\t0x00400000\n#define DDCAPS_ALPHA\t\t\t0x00800000\n#define DDCAPS_COLORKEYHWASSIST\t\t0x01000000\n#define DDCAPS_NOHARDWARE\t\t0x02000000\n#define DDCAPS_BLTCOLORFILL\t\t0x04000000\n#define DDCAPS_BANKSWITCHED\t\t0x08000000\n#define DDCAPS_BLTDEPTHFILL\t\t0x10000000\n#define DDCAPS_CANCLIP\t\t\t0x20000000\n#define DDCAPS_CANCLIPSTRETCHED\t\t0x40000000\n#define DDCAPS_CANBLTSYSMEM\t\t0x80000000\n\n/* DDCAPS.dwCaps2 */\n#define DDCAPS2_CERTIFIED\t\t0x00000001\n#define DDCAPS2_NO2DDURING3DSCENE       0x00000002\n#define DDCAPS2_VIDEOPORT\t\t0x00000004\n#define DDCAPS2_AUTOFLIPOVERLAY\t\t0x00000008\n#define DDCAPS2_CANBOBINTERLEAVED\t0x00000010\n#define DDCAPS2_CANBOBNONINTERLEAVED\t0x00000020\n#define DDCAPS2_COLORCONTROLOVERLAY\t0x00000040\n#define DDCAPS2_COLORCONTROLPRIMARY\t0x00000080\n#define DDCAPS2_CANDROPZ16BIT\t\t0x00000100\n#define DDCAPS2_NONLOCALVIDMEM\t\t0x00000200\n#define DDCAPS2_NONLOCALVIDMEMCAPS\t0x00000400\n#define DDCAPS2_NOPAGELOCKREQUIRED\t0x00000800\n#define DDCAPS2_WIDESURFACES\t\t0x00001000\n#define DDCAPS2_CANFLIPODDEVEN\t\t0x00002000\n#define DDCAPS2_CANBOBHARDWARE\t\t0x00004000\n#define DDCAPS2_COPYFOURCC              0x00008000\n#define DDCAPS2_PRIMARYGAMMA            0x00020000\n#define DDCAPS2_CANRENDERWINDOWED       0x00080000\n#define DDCAPS2_CANCALIBRATEGAMMA       0x00100000\n#define DDCAPS2_FLIPINTERVAL            0x00200000\n#define DDCAPS2_FLIPNOVSYNC             0x00400000\n#define DDCAPS2_CANMANAGETEXTURE        0x00800000\n#define DDCAPS2_TEXMANINNONLOCALVIDMEM  0x01000000\n#define DDCAPS2_STEREO                  0x02000000\n#define DDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL   0x04000000\n\n\n/* Set/Get Colour Key Flags */\n#define DDCKEY_COLORSPACE  0x00000001  /* Struct is single colour space */\n#define DDCKEY_DESTBLT     0x00000002  /* To be used as dest for blt */\n#define DDCKEY_DESTOVERLAY 0x00000004  /* To be used as dest for CK overlays */\n#define DDCKEY_SRCBLT      0x00000008  /* To be used as src for blt */\n#define DDCKEY_SRCOVERLAY  0x00000010  /* To be used as src for CK overlays */\n\ntypedef struct _DDCOLORKEY\n{\n\tDWORD\tdwColorSpaceLowValue;/* low boundary of color space that is to\n                                      * be treated as Color Key, inclusive\n\t\t\t\t      */\n\tDWORD\tdwColorSpaceHighValue;/* high boundary of color space that is\n                                       * to be treated as Color Key, inclusive\n\t\t\t\t       */\n} DDCOLORKEY,*LPDDCOLORKEY;\n\n/* ddCKEYCAPS bits */\n#define DDCKEYCAPS_DESTBLT\t\t\t0x00000001\n#define DDCKEYCAPS_DESTBLTCLRSPACE\t\t0x00000002\n#define DDCKEYCAPS_DESTBLTCLRSPACEYUV\t\t0x00000004\n#define DDCKEYCAPS_DESTBLTYUV\t\t\t0x00000008\n#define DDCKEYCAPS_DESTOVERLAY\t\t\t0x00000010\n#define DDCKEYCAPS_DESTOVERLAYCLRSPACE\t\t0x00000020\n#define DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV\t0x00000040\n#define DDCKEYCAPS_DESTOVERLAYONEACTIVE\t\t0x00000080\n#define DDCKEYCAPS_DESTOVERLAYYUV\t\t0x00000100\n#define DDCKEYCAPS_SRCBLT\t\t\t0x00000200\n#define DDCKEYCAPS_SRCBLTCLRSPACE\t\t0x00000400\n#define DDCKEYCAPS_SRCBLTCLRSPACEYUV\t\t0x00000800\n#define DDCKEYCAPS_SRCBLTYUV\t\t\t0x00001000\n#define DDCKEYCAPS_SRCOVERLAY\t\t\t0x00002000\n#define DDCKEYCAPS_SRCOVERLAYCLRSPACE\t\t0x00004000\n#define DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV\t0x00008000\n#define DDCKEYCAPS_SRCOVERLAYONEACTIVE\t\t0x00010000\n#define DDCKEYCAPS_SRCOVERLAYYUV\t\t0x00020000\n#define DDCKEYCAPS_NOCOSTOVERLAY\t\t0x00040000\n\ntypedef struct _DDPIXELFORMAT {\n    DWORD\tdwSize;                 /* 0: size of structure */\n    DWORD\tdwFlags;                /* 4: pixel format flags */\n    DWORD\tdwFourCC;               /* 8: (FOURCC code) */\n    union {\n\tDWORD\tdwRGBBitCount;          /* C: how many bits per pixel */\n\tDWORD\tdwYUVBitCount;          /* C: how many bits per pixel */\n\tDWORD\tdwZBufferBitDepth;      /* C: how many bits for z buffers */\n\tDWORD\tdwAlphaBitDepth;        /* C: how many bits for alpha channels*/\n\tDWORD\tdwLuminanceBitCount;\n\tDWORD\tdwBumpBitCount;\n    } DUMMYUNIONNAME1;\n    union {\n\tDWORD\tdwRBitMask;             /* 10: mask for red bit*/\n\tDWORD\tdwYBitMask;             /* 10: mask for Y bits*/\n\tDWORD\tdwStencilBitDepth;\n\tDWORD\tdwLuminanceBitMask;\n\tDWORD\tdwBumpDuBitMask;\n    } DUMMYUNIONNAME2;\n    union {\n\tDWORD\tdwGBitMask;             /* 14: mask for green bits*/\n\tDWORD\tdwUBitMask;             /* 14: mask for U bits*/\n\tDWORD\tdwZBitMask;\n\tDWORD\tdwBumpDvBitMask;\n    } DUMMYUNIONNAME3;\n    union {\n\tDWORD   dwBBitMask;             /* 18: mask for blue bits*/\n\tDWORD   dwVBitMask;             /* 18: mask for V bits*/\n\tDWORD\tdwStencilBitMask;\n\tDWORD\tdwBumpLuminanceBitMask;\n    } DUMMYUNIONNAME4;\n    union {\n    \tDWORD\tdwRGBAlphaBitMask;\t/* 1C: mask for alpha channel */\n    \tDWORD\tdwYUVAlphaBitMask;\t/* 1C: mask for alpha channel */\n\tDWORD\tdwLuminanceAlphaBitMask;\n\tDWORD\tdwRGBZBitMask;\t\t/* 1C: mask for Z channel */\n\tDWORD\tdwYUVZBitMask;\t\t/* 1C: mask for Z channel */\n    } DUMMYUNIONNAME5;\n    \t\t\t\t\t/* 20: next structure */\n} DDPIXELFORMAT,*LPDDPIXELFORMAT;\n\n#define MAKEFOURCC(ch0, ch1, ch2, ch3)  \\\n    ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |  \\\n    ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))\n\n/* DDCAPS.dwFXCaps */\n#define DDFXCAPS_BLTALPHA               0x00000001\n#define DDFXCAPS_OVERLAYALPHA           0x00000004\n#define DDFXCAPS_BLTARITHSTRETCHYN\t0x00000010\n#define DDFXCAPS_BLTARITHSTRETCHY\t0x00000020\n#define DDFXCAPS_BLTMIRRORLEFTRIGHT\t0x00000040\n#define DDFXCAPS_BLTMIRRORUPDOWN\t0x00000080\n#define DDFXCAPS_BLTROTATION\t\t0x00000100\n#define DDFXCAPS_BLTROTATION90\t\t0x00000200\n#define DDFXCAPS_BLTSHRINKX\t\t0x00000400\n#define DDFXCAPS_BLTSHRINKXN\t\t0x00000800\n#define DDFXCAPS_BLTSHRINKY\t\t0x00001000\n#define DDFXCAPS_BLTSHRINKYN\t\t0x00002000\n#define DDFXCAPS_BLTSTRETCHX\t\t0x00004000\n#define DDFXCAPS_BLTSTRETCHXN\t\t0x00008000\n#define DDFXCAPS_BLTSTRETCHY\t\t0x00010000\n#define DDFXCAPS_BLTSTRETCHYN\t\t0x00020000\n#define DDFXCAPS_OVERLAYARITHSTRETCHY\t0x00040000\n#define DDFXCAPS_OVERLAYARITHSTRETCHYN\t0x00000008\n#define DDFXCAPS_OVERLAYSHRINKX\t\t0x00080000\n#define DDFXCAPS_OVERLAYSHRINKXN\t0x00100000\n#define DDFXCAPS_OVERLAYSHRINKY\t\t0x00200000\n#define DDFXCAPS_OVERLAYSHRINKYN\t0x00400000\n#define DDFXCAPS_OVERLAYSTRETCHX\t0x00800000\n#define DDFXCAPS_OVERLAYSTRETCHXN\t0x01000000\n#define DDFXCAPS_OVERLAYSTRETCHY\t0x02000000\n#define DDFXCAPS_OVERLAYSTRETCHYN\t0x04000000\n#define DDFXCAPS_OVERLAYMIRRORLEFTRIGHT\t0x08000000\n#define DDFXCAPS_OVERLAYMIRRORUPDOWN\t0x10000000\n\n#define DDFXCAPS_OVERLAYFILTER          DDFXCAPS_OVERLAYARITHSTRETCHY\n\n/* DDCAPS.dwFXAlphaCaps */\n#define DDFXALPHACAPS_BLTALPHAEDGEBLEND\t\t0x00000001\n#define DDFXALPHACAPS_BLTALPHAPIXELS\t\t0x00000002\n#define DDFXALPHACAPS_BLTALPHAPIXELSNEG\t\t0x00000004\n#define DDFXALPHACAPS_BLTALPHASURFACES\t\t0x00000008\n#define DDFXALPHACAPS_BLTALPHASURFACESNEG\t0x00000010\n#define DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND\t0x00000020\n#define DDFXALPHACAPS_OVERLAYALPHAPIXELS\t0x00000040\n#define DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG\t0x00000080\n#define DDFXALPHACAPS_OVERLAYALPHASURFACES\t0x00000100\n#define DDFXALPHACAPS_OVERLAYALPHASURFACESNEG\t0x00000200\n\n/* DDCAPS.dwPalCaps */\n#define DDPCAPS_4BIT\t\t\t0x00000001\n#define DDPCAPS_8BITENTRIES\t\t0x00000002\n#define DDPCAPS_8BIT\t\t\t0x00000004\n#define DDPCAPS_INITIALIZE\t\t0x00000008\n#define DDPCAPS_PRIMARYSURFACE\t\t0x00000010\n#define DDPCAPS_PRIMARYSURFACELEFT\t0x00000020\n#define DDPCAPS_ALLOW256\t\t0x00000040\n#define DDPCAPS_VSYNC\t\t\t0x00000080\n#define DDPCAPS_1BIT\t\t\t0x00000100\n#define DDPCAPS_2BIT\t\t\t0x00000200\n#define DDPCAPS_ALPHA                   0x00000400\n\n/* DDCAPS.dwSVCaps */\n/* the first 4 of these are now obsolete */\n#if DIRECTDRAW_VERSION >= 0x700\t/* FIXME: I'm not sure when this switch occurred */\n#define DDSVCAPS_RESERVED1\t\t0x00000001\n#define DDSVCAPS_RESERVED2\t\t0x00000002\n#define DDSVCAPS_RESERVED3\t\t0x00000004\n#define DDSVCAPS_RESERVED4\t\t0x00000008\n#else\n#define DDSVCAPS_ENIGMA\t\t\t0x00000001\n#define DDSVCAPS_FLICKER\t\t0x00000002\n#define DDSVCAPS_REDBLUE\t\t0x00000004\n#define DDSVCAPS_SPLIT\t\t\t0x00000008\n#endif\n#define DDSVCAPS_STEREOSEQUENTIAL       0x00000010\n\n/* BitDepths */\n#define DDBD_1\t\t\t\t0x00004000\n#define DDBD_2\t\t\t\t0x00002000\n#define DDBD_4\t\t\t\t0x00001000\n#define DDBD_8\t\t\t\t0x00000800\n#define DDBD_16\t\t\t\t0x00000400\n#define DDBD_24\t\t\t\t0x00000200\n#define DDBD_32\t\t\t\t0x00000100\n\n/* DDOVERLAYFX.dwDDFX */\n#define DDOVERFX_ARITHSTRETCHY\t\t0x00000001\n#define DDOVERFX_MIRRORLEFTRIGHT\t0x00000002\n#define DDOVERFX_MIRRORUPDOWN\t\t0x00000004\n\n/* UpdateOverlay flags */\n#define DDOVER_ALPHADEST                        0x00000001\n#define DDOVER_ALPHADESTCONSTOVERRIDE           0x00000002\n#define DDOVER_ALPHADESTNEG                     0x00000004\n#define DDOVER_ALPHADESTSURFACEOVERRIDE         0x00000008\n#define DDOVER_ALPHAEDGEBLEND                   0x00000010\n#define DDOVER_ALPHASRC                         0x00000020\n#define DDOVER_ALPHASRCCONSTOVERRIDE            0x00000040\n#define DDOVER_ALPHASRCNEG                      0x00000080\n#define DDOVER_ALPHASRCSURFACEOVERRIDE          0x00000100\n#define DDOVER_HIDE                             0x00000200\n#define DDOVER_KEYDEST                          0x00000400\n#define DDOVER_KEYDESTOVERRIDE                  0x00000800\n#define DDOVER_KEYSRC                           0x00001000\n#define DDOVER_KEYSRCOVERRIDE                   0x00002000\n#define DDOVER_SHOW                             0x00004000\n#define DDOVER_ADDDIRTYRECT                     0x00008000\n#define DDOVER_REFRESHDIRTYRECTS                0x00010000\n#define DDOVER_REFRESHALL                       0x00020000\n#define DDOVER_DDFX                             0x00080000\n#define DDOVER_AUTOFLIP                         0x00100000\n#define DDOVER_BOB                              0x00200000\n#define DDOVER_OVERRIDEBOBWEAVE                 0x00400000\n#define DDOVER_INTERLEAVED                      0x00800000\n\n/* DDPIXELFORMAT.dwFlags */\n#define DDPF_ALPHAPIXELS\t\t0x00000001\n#define DDPF_ALPHA\t\t\t0x00000002\n#define DDPF_FOURCC\t\t\t0x00000004\n#define DDPF_PALETTEINDEXED4\t\t0x00000008\n#define DDPF_PALETTEINDEXEDTO8\t\t0x00000010\n#define DDPF_PALETTEINDEXED8\t\t0x00000020\n#define DDPF_RGB\t\t\t0x00000040\n#define DDPF_COMPRESSED\t\t\t0x00000080\n#define DDPF_RGBTOYUV\t\t\t0x00000100\n#define DDPF_YUV\t\t\t0x00000200\n#define DDPF_ZBUFFER\t\t\t0x00000400\n#define DDPF_PALETTEINDEXED1\t\t0x00000800\n#define DDPF_PALETTEINDEXED2\t\t0x00001000\n#define DDPF_ZPIXELS\t\t\t0x00002000\n#define DDPF_STENCILBUFFER              0x00004000\n#define DDPF_ALPHAPREMULT               0x00008000\n#define DDPF_LUMINANCE                  0x00020000\n#define DDPF_BUMPLUMINANCE              0x00040000\n#define DDPF_BUMPDUDV                   0x00080000\n\n/* SetCooperativeLevel dwFlags */\n#define DDSCL_FULLSCREEN\t\t0x00000001\n#define DDSCL_ALLOWREBOOT\t\t0x00000002\n#define DDSCL_NOWINDOWCHANGES\t\t0x00000004\n#define DDSCL_NORMAL\t\t\t0x00000008\n#define DDSCL_EXCLUSIVE\t\t\t0x00000010\n#define DDSCL_ALLOWMODEX\t\t0x00000040\n#define DDSCL_SETFOCUSWINDOW\t\t0x00000080\n#define DDSCL_SETDEVICEWINDOW\t\t0x00000100\n#define DDSCL_CREATEDEVICEWINDOW\t0x00000200\n#define DDSCL_MULTITHREADED             0x00000400\n#define DDSCL_FPUSETUP                  0x00000800\n#define DDSCL_FPUPRESERVE               0x00001000\n\n\n/* DDSURFACEDESC.dwFlags */\n#define\tDDSD_CAPS\t\t0x00000001\n#define\tDDSD_HEIGHT\t\t0x00000002\n#define\tDDSD_WIDTH\t\t0x00000004\n#define\tDDSD_PITCH\t\t0x00000008\n#define\tDDSD_BACKBUFFERCOUNT\t0x00000020\n#define\tDDSD_ZBUFFERBITDEPTH\t0x00000040\n#define\tDDSD_ALPHABITDEPTH\t0x00000080\n#define\tDDSD_LPSURFACE\t\t0x00000800\n#define\tDDSD_PIXELFORMAT\t0x00001000\n#define\tDDSD_CKDESTOVERLAY\t0x00002000\n#define\tDDSD_CKDESTBLT\t\t0x00004000\n#define\tDDSD_CKSRCOVERLAY\t0x00008000\n#define\tDDSD_CKSRCBLT\t\t0x00010000\n#define\tDDSD_MIPMAPCOUNT\t0x00020000\n#define\tDDSD_REFRESHRATE\t0x00040000\n#define\tDDSD_LINEARSIZE\t\t0x00080000\n#define DDSD_TEXTURESTAGE       0x00100000\n#define DDSD_FVF                0x00200000\n#define DDSD_SRCVBHANDLE        0x00400000\n#define DDSD_DEPTH              0x00800000\n#define DDSD_ALL                0x00fff9ee\n\n/* EnumSurfaces flags */\n#define DDENUMSURFACES_ALL          0x00000001\n#define DDENUMSURFACES_MATCH        0x00000002\n#define DDENUMSURFACES_NOMATCH      0x00000004\n#define DDENUMSURFACES_CANBECREATED 0x00000008\n#define DDENUMSURFACES_DOESEXIST    0x00000010\n\n/* SetDisplayMode flags */\n#define DDSDM_STANDARDVGAMODE\t0x00000001\n\n/* EnumDisplayModes flags */\n#define DDEDM_REFRESHRATES\t0x00000001\n#define DDEDM_STANDARDVGAMODES\t0x00000002\n\n/* WaitForVerticalDisplay flags */\n\n#define DDWAITVB_BLOCKBEGIN\t\t0x00000001\n#define DDWAITVB_BLOCKBEGINEVENT\t0x00000002\n#define DDWAITVB_BLOCKEND\t\t0x00000004\n\ntypedef struct _DDSURFACEDESC\n{\n\tDWORD\tdwSize;\t\t/* 0: size of the DDSURFACEDESC structure*/\n\tDWORD\tdwFlags;\t/* 4: determines what fields are valid*/\n\tDWORD\tdwHeight;\t/* 8: height of surface to be created*/\n\tDWORD\tdwWidth;\t/* C: width of input surface*/\n\tunion {\n\t\tLONG\tlPitch;\t/* 10: distance to start of next line (return value only)*/\n\t\tDWORD\tdwLinearSize;\n\t} DUMMYUNIONNAME1;\n\tDWORD\tdwBackBufferCount;/* 14: number of back buffers requested*/\n\tunion {\n\t\tDWORD\tdwMipMapCount;/* 18:number of mip-map levels requested*/\n\t\tDWORD\tdwZBufferBitDepth;/*18: depth of Z buffer requested*/\n\t\tDWORD\tdwRefreshRate;/* 18:refresh rate (used when display mode is described)*/\n\t} DUMMYUNIONNAME2;\n\tDWORD\tdwAlphaBitDepth;/* 1C:depth of alpha buffer requested*/\n\tDWORD\tdwReserved;\t/* 20:reserved*/\n\tvoid *lpSurface;\t/* 24:pointer to the associated surface memory*/\n\tDDCOLORKEY\tddckCKDestOverlay;/* 28: CK for dest overlay use*/\n\tDDCOLORKEY\tddckCKDestBlt;\t/* 30: CK for destination blt use*/\n\tDDCOLORKEY\tddckCKSrcOverlay;/* 38: CK for source overlay use*/\n\tDDCOLORKEY\tddckCKSrcBlt;\t/* 40: CK for source blt use*/\n\tDDPIXELFORMAT\tddpfPixelFormat;/* 48: pixel format description of the surface*/\n\tDDSCAPS\t\tddsCaps;\t/* 68: direct draw surface caps */\n} DDSURFACEDESC,*LPDDSURFACEDESC;\n\ntypedef struct _DDSURFACEDESC2\n{\n\tDWORD\tdwSize;\t\t/* 0: size of the DDSURFACEDESC2 structure*/\n\tDWORD\tdwFlags;\t/* 4: determines what fields are valid*/\n\tDWORD\tdwHeight;\t/* 8: height of surface to be created*/\n\tDWORD\tdwWidth;\t/* C: width of input surface*/\n\tunion {\n\t\tLONG\tlPitch;\t      /*10: distance to start of next line (return value only)*/\n\t\tDWORD   dwLinearSize; /*10: formless late-allocated optimized surface size */\n\t} DUMMYUNIONNAME1;\n\tunion {\n\t\tDWORD\tdwBackBufferCount;/* 14: number of back buffers requested*/\n\t\tDWORD\tdwDepth;\n\t} DUMMYUNIONNAME5;\n\tunion {\n\t\tDWORD\tdwMipMapCount;/* 18:number of mip-map levels requested*/\n\t\tDWORD\tdwRefreshRate;/* 18:refresh rate (used when display mode is described)*/\n\t\tDWORD   dwSrcVBHandle;/* 18:source used in VB::Optimize */\n\t} DUMMYUNIONNAME2;\n\tDWORD\tdwAlphaBitDepth;/* 1C:depth of alpha buffer requested*/\n\tDWORD\tdwReserved;\t/* 20:reserved*/\n\tvoid *lpSurface;\t/* 24:pointer to the associated surface memory*/\n\tunion {\n\t\tDDCOLORKEY\tddckCKDestOverlay; /* 28: CK for dest overlay use*/\n\t\tDWORD \t\tdwEmptyFaceColor;  /* 28: color for empty cubemap faces */\n\t} DUMMYUNIONNAME3;\n\tDDCOLORKEY\tddckCKDestBlt;\t/* 30: CK for destination blt use*/\n\tDDCOLORKEY\tddckCKSrcOverlay;/* 38: CK for source overlay use*/\n\tDDCOLORKEY\tddckCKSrcBlt;\t/* 40: CK for source blt use*/\n\n\tunion {\n\t\tDDPIXELFORMAT\tddpfPixelFormat;/* 48: pixel format description of the surface*/\n\t\tDWORD \t\tdwFVF;\t/* 48: vertex format description of vertex buffers */\n\t} DUMMYUNIONNAME4;\n\tDDSCAPS2\tddsCaps;  /* 68: DDraw surface caps */\n\tDWORD\t\tdwTextureStage; /* 78: stage in multitexture cascade */\n} DDSURFACEDESC2,*LPDDSURFACEDESC2;\n\n/* DDCOLORCONTROL.dwFlags */\n#define DDCOLOR_BRIGHTNESS\t0x00000001\n#define DDCOLOR_CONTRAST\t0x00000002\n#define DDCOLOR_HUE\t\t0x00000004\n#define DDCOLOR_SATURATION\t0x00000008\n#define DDCOLOR_SHARPNESS\t0x00000010\n#define DDCOLOR_GAMMA\t\t0x00000020\n#define DDCOLOR_COLORENABLE\t0x00000040\n\ntypedef struct {\n\tDWORD\tdwSize;\n\tDWORD\tdwFlags;\n\tLONG\tlBrightness;\n\tLONG\tlContrast;\n\tLONG\tlHue;\n\tLONG\tlSaturation;\n\tLONG\tlSharpness;\n\tLONG\tlGamma;\n\tLONG\tlColorEnable;\n\tDWORD\tdwReserved1;\n} DDCOLORCONTROL,*LPDDCOLORCONTROL;\n\ntypedef struct {\n\tWORD\tred[256];\n\tWORD\tgreen[256];\n\tWORD\tblue[256];\n} DDGAMMARAMP,*LPDDGAMMARAMP;\n\ntypedef BOOL (CALLBACK *LPDDENUMCALLBACKA)(GUID *guid, char *driver_description, char *driver_name, void *ctx);\ntypedef BOOL (CALLBACK *LPDDENUMCALLBACKW)(GUID *guid, WCHAR *driver_description, WCHAR *driver_name, void *ctx);\nDECL_WINELIB_TYPE_AW(LPDDENUMCALLBACK)\n\ntypedef HRESULT (CALLBACK *LPDDENUMMODESCALLBACK)(DDSURFACEDESC *desc, void *ctx);\ntypedef HRESULT (CALLBACK *LPDDENUMMODESCALLBACK2)(DDSURFACEDESC2 *desc, void *ctx);\ntypedef HRESULT (CALLBACK *LPDDENUMSURFACESCALLBACK)(struct IDirectDrawSurface *surface,\n        DDSURFACEDESC *surface_desc, void *ctx);\ntypedef HRESULT (CALLBACK *LPDDENUMSURFACESCALLBACK2)(struct IDirectDrawSurface4 *surface,\n        DDSURFACEDESC2 *surface_desc, void *ctx);\ntypedef HRESULT (CALLBACK *LPDDENUMSURFACESCALLBACK7)(struct IDirectDrawSurface7 *surface,\n        DDSURFACEDESC2 *surface_desc, void *ctx);\n\ntypedef BOOL (CALLBACK *LPDDENUMCALLBACKEXA)(GUID *guid, char *driver_description,\n        char *driver_name, void *ctx, HMONITOR monitor);\ntypedef BOOL (CALLBACK *LPDDENUMCALLBACKEXW)(GUID *guid, WCHAR *driver_description,\n        WCHAR *driver_name, void *ctx, HMONITOR monitor);\nDECL_WINELIB_TYPE_AW(LPDDENUMCALLBACKEX)\n\nHRESULT WINAPI DirectDrawEnumerateA(LPDDENUMCALLBACKA cb, void *ctx);\nHRESULT WINAPI DirectDrawEnumerateW(LPDDENUMCALLBACKW cb, void *ctx);\n#define DirectDrawEnumerate WINELIB_NAME_AW(DirectDrawEnumerate)\n\nHRESULT WINAPI DirectDrawEnumerateExA(LPDDENUMCALLBACKEXA cb, void *ctx, DWORD flags);\nHRESULT WINAPI DirectDrawEnumerateExW(LPDDENUMCALLBACKEXW cb, void *ctx, DWORD flags);\n#define DirectDrawEnumerateEx WINELIB_NAME_AW(DirectDrawEnumerateEx)\n\ntypedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEXA)(LPDDENUMCALLBACKEXA cb, void *ctx, DWORD flags);\ntypedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEXW)(LPDDENUMCALLBACKEXW cb, void *ctx, DWORD flags);\nDECL_WINELIB_TYPE_AW(LPDIRECTDRAWENUMERATEEX)\n\n/* flags for DirectDrawEnumerateEx */\n#define DDENUM_ATTACHEDSECONDARYDEVICES\t0x00000001\n#define DDENUM_DETACHEDSECONDARYDEVICES\t0x00000002\n#define DDENUM_NONDISPLAYDEVICES\t0x00000004\n\n/* flags for DirectDrawCreate or IDirectDraw::Initialize */\n#define DDCREATE_HARDWAREONLY   __MSABI_LONG(1)\n#define DDCREATE_EMULATIONONLY  __MSABI_LONG(2)\n\ntypedef struct _DDBLTFX\n{\n    DWORD       dwSize;                         /* size of structure */\n    DWORD       dwDDFX;                         /* FX operations */\n    DWORD       dwROP;                          /* Win32 raster operations */\n    DWORD       dwDDROP;                        /* Raster operations new for DirectDraw */\n    DWORD       dwRotationAngle;                /* Rotation angle for blt */\n    DWORD       dwZBufferOpCode;                /* ZBuffer compares */\n    DWORD       dwZBufferLow;                   /* Low limit of Z buffer */\n    DWORD       dwZBufferHigh;                  /* High limit of Z buffer */\n    DWORD       dwZBufferBaseDest;              /* Destination base value */\n    DWORD       dwZDestConstBitDepth;           /* Bit depth used to specify Z constant for destination */\n    union\n    {\n        DWORD   dwZDestConst;                   /* Constant to use as Z buffer for dest */\n        struct IDirectDrawSurface *lpDDSZBufferDest; /* Surface to use as Z buffer for dest */\n    } DUMMYUNIONNAME1;\n    DWORD       dwZSrcConstBitDepth;            /* Bit depth used to specify Z constant for source */\n    union\n    {\n        DWORD   dwZSrcConst;                    /* Constant to use as Z buffer for src */\n        struct IDirectDrawSurface *lpDDSZBufferSrc; /* Surface to use as Z buffer for src */\n    } DUMMYUNIONNAME2;\n    DWORD       dwAlphaEdgeBlendBitDepth;       /* Bit depth used to specify constant for alpha edge blend */\n    DWORD       dwAlphaEdgeBlend;               /* Alpha for edge blending */\n    DWORD       dwReserved;\n    DWORD       dwAlphaDestConstBitDepth;       /* Bit depth used to specify alpha constant for destination */\n    union\n    {\n        DWORD   dwAlphaDestConst;               /* Constant to use as Alpha Channel */\n        struct IDirectDrawSurface *lpDDSAlphaDest; /* Surface to use as Alpha Channel */\n    } DUMMYUNIONNAME3;\n    DWORD       dwAlphaSrcConstBitDepth;        /* Bit depth used to specify alpha constant for source */\n    union\n    {\n        DWORD   dwAlphaSrcConst;                /* Constant to use as Alpha Channel */\n        struct IDirectDrawSurface *lpDDSAlphaSrc; /* Surface to use as Alpha Channel */\n    } DUMMYUNIONNAME4;\n    union\n    {\n        DWORD   dwFillColor;                    /* color in RGB or Palettized */\n        DWORD   dwFillDepth;                    /* depth value for z-buffer */\n        DWORD   dwFillPixel;                    /* pixel val for RGBA or RGBZ */\n        struct IDirectDrawSurface *lpDDSPattern; /* Surface to use as pattern */\n    } DUMMYUNIONNAME5;\n    DDCOLORKEY  ddckDestColorkey;               /* DestColorkey override */\n    DDCOLORKEY  ddckSrcColorkey;                /* SrcColorkey override */\n} DDBLTFX,*LPDDBLTFX;\n\n/* dwDDFX */\n/* arithmetic stretching along y axis */\n#define DDBLTFX_ARITHSTRETCHY\t\t\t0x00000001\n/* mirror on y axis */\n#define DDBLTFX_MIRRORLEFTRIGHT\t\t\t0x00000002\n/* mirror on x axis */\n#define DDBLTFX_MIRRORUPDOWN\t\t\t0x00000004\n/* do not tear */\n#define DDBLTFX_NOTEARING\t\t\t0x00000008\n/* 180 degrees clockwise rotation */\n#define DDBLTFX_ROTATE180\t\t\t0x00000010\n/* 270 degrees clockwise rotation */\n#define DDBLTFX_ROTATE270\t\t\t0x00000020\n/* 90 degrees clockwise rotation */\n#define DDBLTFX_ROTATE90\t\t\t0x00000040\n/* dwZBufferLow and dwZBufferHigh specify limits to the copied Z values */\n#define DDBLTFX_ZBUFFERRANGE\t\t\t0x00000080\n/* add dwZBufferBaseDest to every source z value before compare */\n#define DDBLTFX_ZBUFFERBASEDEST\t\t\t0x00000100\n\ntypedef struct _DDOVERLAYFX\n{\n    DWORD       dwSize;                         /* size of structure */\n    DWORD       dwAlphaEdgeBlendBitDepth;       /* Bit depth used to specify constant for alpha edge blend */\n    DWORD       dwAlphaEdgeBlend;               /* Constant to use as alpha for edge blend */\n    DWORD       dwReserved;\n    DWORD       dwAlphaDestConstBitDepth;       /* Bit depth used to specify alpha constant for destination */\n    union\n    {\n        DWORD   dwAlphaDestConst;               /* Constant to use as alpha channel for dest */\n        struct IDirectDrawSurface *lpDDSAlphaDest; /* Surface to use as alpha channel for dest */\n    } DUMMYUNIONNAME1;\n    DWORD       dwAlphaSrcConstBitDepth;        /* Bit depth used to specify alpha constant for source */\n    union\n    {\n        DWORD   dwAlphaSrcConst;                /* Constant to use as alpha channel for src */\n        struct IDirectDrawSurface *lpDDSAlphaSrc; /* Surface to use as alpha channel for src */\n    } DUMMYUNIONNAME2;\n    DDCOLORKEY  dckDestColorkey;                /* DestColorkey override */\n    DDCOLORKEY  dckSrcColorkey;                 /* DestColorkey override */\n    DWORD       dwDDFX;                         /* Overlay FX */\n    DWORD       dwFlags;                        /* flags */\n} DDOVERLAYFX,*LPDDOVERLAYFX;\n\ntypedef struct _DDBLTBATCH\n{\n    RECT *lprDest;\n    struct IDirectDrawSurface *lpDDSSrc;\n    RECT *lprSrc;\n    DWORD dwFlags;\n    DDBLTFX *lpDDBltFx;\n} DDBLTBATCH,*LPDDBLTBATCH;\n\n#define MAX_DDDEVICEID_STRING          512\n\n#define DDGDI_GETHOSTIDENTIFIER 1\n\ntypedef struct tagDDDEVICEIDENTIFIER {\n  char    szDriver[MAX_DDDEVICEID_STRING];\n  char    szDescription[MAX_DDDEVICEID_STRING];\n  LARGE_INTEGER  liDriverVersion;\n  DWORD   dwVendorId;\n  DWORD   dwDeviceId;\n  DWORD   dwSubSysId;\n  DWORD   dwRevision;\n  GUID    guidDeviceIdentifier;\n} DDDEVICEIDENTIFIER, * LPDDDEVICEIDENTIFIER;\n\ntypedef struct tagDDDEVICEIDENTIFIER2 {\n  char    szDriver[MAX_DDDEVICEID_STRING];\t/* user readable driver name */\n  char    szDescription[MAX_DDDEVICEID_STRING]; /* user readable description */\n  LARGE_INTEGER  liDriverVersion;\t\t/* driver version */\n  DWORD   dwVendorId;\t\t\t\t/* vendor ID, zero if unknown */\n  DWORD   dwDeviceId;\t\t\t\t/* chipset ID, zero if unknown */\n  DWORD   dwSubSysId;\t\t\t\t/* board ID, zero if unknown */\n  DWORD   dwRevision;\t\t\t\t/* chipset version, zero if unknown */\n  GUID    guidDeviceIdentifier;\t\t\t/* unique ID for this driver/chipset combination */\n  DWORD   dwWHQLLevel;\t\t\t\t/* Windows Hardware Quality Lab certification level */\n} DDDEVICEIDENTIFIER2, * LPDDDEVICEIDENTIFIER2;\n\n/*****************************************************************************\n * IDirectDrawPalette interface\n */\n#undef INTERFACE\n#define INTERFACE IDirectDrawPalette\nDECLARE_INTERFACE_(IDirectDrawPalette,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectDrawPalette methods ***/\n    STDMETHOD(GetCaps)(THIS_ LPDWORD lpdwCaps) PURE;\n    STDMETHOD(GetEntries)(THIS_ DWORD dwFlags, DWORD dwBase, DWORD dwNumEntries, LPPALETTEENTRY lpEntries) PURE;\n    STDMETHOD(Initialize)(THIS_ struct IDirectDraw *ddraw, DWORD flags, PALETTEENTRY *color_table) PURE;\n    STDMETHOD(SetEntries)(THIS_ DWORD dwFlags, DWORD dwStartingEntry, DWORD dwCount, LPPALETTEENTRY lpEntries) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectDrawPalette_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectDrawPalette_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectDrawPalette_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectDrawPalette methods ***/\n#define IDirectDrawPalette_GetCaps(p,a)          (p)->lpVtbl->GetCaps(p,a)\n#define IDirectDrawPalette_GetEntries(p,a,b,c,d) (p)->lpVtbl->GetEntries(p,a,b,c,d)\n#define IDirectDrawPalette_Initialize(p,a,b,c)   (p)->lpVtbl->Initialize(p,a,b,c)\n#define IDirectDrawPalette_SetEntries(p,a,b,c,d) (p)->lpVtbl->SetEntries(p,a,b,c,d)\n#else\n/*** IUnknown methods ***/\n#define IDirectDrawPalette_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectDrawPalette_AddRef(p)             (p)->AddRef()\n#define IDirectDrawPalette_Release(p)            (p)->Release()\n/*** IDirectDrawPalette methods ***/\n#define IDirectDrawPalette_GetCaps(p,a)          (p)->GetCaps(a)\n#define IDirectDrawPalette_GetEntries(p,a,b,c,d) (p)->GetEntries(a,b,c,d)\n#define IDirectDrawPalette_Initialize(p,a,b,c)   (p)->Initialize(a,b,c)\n#define IDirectDrawPalette_SetEntries(p,a,b,c,d) (p)->SetEntries(a,b,c,d)\n#endif\n\n\n/*****************************************************************************\n * IDirectDrawClipper interface\n */\n#define INTERFACE IDirectDrawClipper\nDECLARE_INTERFACE_(IDirectDrawClipper,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectDrawClipper methods ***/\n    STDMETHOD(GetClipList)(THIS_ LPRECT lpRect, LPRGNDATA lpClipList, LPDWORD lpdwSize) PURE;\n    STDMETHOD(GetHWnd)(THIS_ HWND *lphWnd) PURE;\n    STDMETHOD(Initialize)(THIS_ struct IDirectDraw *ddraw, DWORD flags) PURE;\n    STDMETHOD(IsClipListChanged)(THIS_ BOOL *lpbChanged) PURE;\n    STDMETHOD(SetClipList)(THIS_ LPRGNDATA lpClipList, DWORD dwFlags) PURE;\n    STDMETHOD(SetHWnd)(THIS_ DWORD dwFlags, HWND hWnd) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectDrawClipper_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectDrawClipper_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectDrawClipper_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectDrawClipper methods ***/\n#define IDirectDrawClipper_GetClipList(p,a,b,c)   (p)->lpVtbl->GetClipList(p,a,b,c)\n#define IDirectDrawClipper_GetHWnd(p,a)           (p)->lpVtbl->GetHWnd(p,a)\n#define IDirectDrawClipper_Initialize(p,a,b)      (p)->lpVtbl->Initialize(p,a,b)\n#define IDirectDrawClipper_IsClipListChanged(p,a) (p)->lpVtbl->IsClipListChanged(p,a)\n#define IDirectDrawClipper_SetClipList(p,a,b)     (p)->lpVtbl->SetClipList(p,a,b)\n#define IDirectDrawClipper_SetHWnd(p,a,b)         (p)->lpVtbl->SetHWnd(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirectDrawClipper_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectDrawClipper_AddRef(p)             (p)->AddRef()\n#define IDirectDrawClipper_Release(p)            (p)->Release()\n/*** IDirectDrawClipper methods ***/\n#define IDirectDrawClipper_GetClipList(p,a,b,c)   (p)->GetClipList(a,b,c)\n#define IDirectDrawClipper_GetHWnd(p,a)           (p)->GetHWnd(a)\n#define IDirectDrawClipper_Initialize(p,a,b)      (p)->Initialize(a,b)\n#define IDirectDrawClipper_IsClipListChanged(p,a) (p)->IsClipListChanged(a)\n#define IDirectDrawClipper_SetClipList(p,a,b)     (p)->SetClipList(a,b)\n#define IDirectDrawClipper_SetHWnd(p,a,b)         (p)->SetHWnd(a,b)\n#endif\n\n\n/*****************************************************************************\n * IDirectDraw interface\n */\n#define INTERFACE IDirectDraw\nDECLARE_INTERFACE_(IDirectDraw,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectDraw methods ***/\n    STDMETHOD(Compact)(THIS) PURE;\n    STDMETHOD(CreateClipper)(THIS_ DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer) PURE;\n    STDMETHOD(CreatePalette)(THIS_ DWORD flags, PALETTEENTRY *color_table,\n            IDirectDrawPalette **palette, IUnknown *outer) PURE;\n    STDMETHOD(CreateSurface)(THIS_ DDSURFACEDESC *surface_desc,\n            struct IDirectDrawSurface **surface, IUnknown *outer) PURE;\n    STDMETHOD(DuplicateSurface)(THIS_ struct IDirectDrawSurface *src_surface,\n            struct IDirectDrawSurface **dst_surface) PURE;\n    STDMETHOD(EnumDisplayModes)(THIS_ DWORD flags, DDSURFACEDESC *surface_desc,\n            void *ctx, LPDDENUMMODESCALLBACK cb) PURE;\n    STDMETHOD(EnumSurfaces)(THIS_ DWORD flags, DDSURFACEDESC *surface_desc,\n            void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;\n    STDMETHOD(FlipToGDISurface)(THIS) PURE;\n    STDMETHOD(GetCaps)(THIS_ DDCAPS *driver_caps, DDCAPS *hel_caps) PURE;\n    STDMETHOD(GetDisplayMode)(THIS_ DDSURFACEDESC *surface_desc) PURE;\n    STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE;\n    STDMETHOD(GetGDISurface)(THIS_ struct IDirectDrawSurface **surface) PURE;\n    STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE;\n    STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE;\n    STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE;\n    STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE;\n    STDMETHOD(RestoreDisplayMode)(THIS) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE;\n    STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP) PURE;\n    STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectDraw_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectDraw_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectDraw_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectDraw methods ***/\n#define IDirectDraw_Compact(p)                  (p)->lpVtbl->Compact(p)\n#define IDirectDraw_CreateClipper(p,a,b,c)      (p)->lpVtbl->CreateClipper(p,a,b,c)\n#define IDirectDraw_CreatePalette(p,a,b,c,d)    (p)->lpVtbl->CreatePalette(p,a,b,c,d)\n#define IDirectDraw_CreateSurface(p,a,b,c)      (p)->lpVtbl->CreateSurface(p,a,b,c)\n#define IDirectDraw_DuplicateSurface(p,a,b)     (p)->lpVtbl->DuplicateSurface(p,a,b)\n#define IDirectDraw_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d)\n#define IDirectDraw_EnumSurfaces(p,a,b,c,d)     (p)->lpVtbl->EnumSurfaces(p,a,b,c,d)\n#define IDirectDraw_FlipToGDISurface(p)         (p)->lpVtbl->FlipToGDISurface(p)\n#define IDirectDraw_GetCaps(p,a,b)              (p)->lpVtbl->GetCaps(p,a,b)\n#define IDirectDraw_GetDisplayMode(p,a)         (p)->lpVtbl->GetDisplayMode(p,a)\n#define IDirectDraw_GetFourCCCodes(p,a,b)       (p)->lpVtbl->GetFourCCCodes(p,a,b)\n#define IDirectDraw_GetGDISurface(p,a)          (p)->lpVtbl->GetGDISurface(p,a)\n#define IDirectDraw_GetMonitorFrequency(p,a)    (p)->lpVtbl->GetMonitorFrequency(p,a)\n#define IDirectDraw_GetScanLine(p,a)            (p)->lpVtbl->GetScanLine(p,a)\n#define IDirectDraw_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a)\n#define IDirectDraw_Initialize(p,a)             (p)->lpVtbl->Initialize(p,a)\n#define IDirectDraw_RestoreDisplayMode(p)       (p)->lpVtbl->RestoreDisplayMode(p)\n#define IDirectDraw_SetCooperativeLevel(p,a,b)  (p)->lpVtbl->SetCooperativeLevel(p,a,b)\n#define IDirectDraw_SetDisplayMode(p,a,b,c)     (p)->lpVtbl->SetDisplayMode(p,a,b,c)\n#define IDirectDraw_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirectDraw_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectDraw_AddRef(p)             (p)->AddRef()\n#define IDirectDraw_Release(p)            (p)->Release()\n/*** IDirectDraw methods ***/\n#define IDirectDraw_Compact(p)                  (p)->Compact()\n#define IDirectDraw_CreateClipper(p,a,b,c)      (p)->CreateClipper(a,b,c)\n#define IDirectDraw_CreatePalette(p,a,b,c,d)    (p)->CreatePalette(a,b,c,d)\n#define IDirectDraw_CreateSurface(p,a,b,c)      (p)->CreateSurface(a,b,c)\n#define IDirectDraw_DuplicateSurface(p,a,b)     (p)->DuplicateSurface(a,b)\n#define IDirectDraw_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d)\n#define IDirectDraw_EnumSurfaces(p,a,b,c,d)     (p)->EnumSurfaces(a,b,c,d)\n#define IDirectDraw_FlipToGDISurface(p)         (p)->FlipToGDISurface()\n#define IDirectDraw_GetCaps(p,a,b)              (p)->GetCaps(a,b)\n#define IDirectDraw_GetDisplayMode(p,a)         (p)->GetDisplayMode(a)\n#define IDirectDraw_GetFourCCCodes(p,a,b)       (p)->GetFourCCCodes(a,b)\n#define IDirectDraw_GetGDISurface(p,a)          (p)->GetGDISurface(a)\n#define IDirectDraw_GetMonitorFrequency(p,a)    (p)->GetMonitorFrequency(a)\n#define IDirectDraw_GetScanLine(p,a)            (p)->GetScanLine(a)\n#define IDirectDraw_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a)\n#define IDirectDraw_Initialize(p,a)             (p)->Initialize(a)\n#define IDirectDraw_RestoreDisplayMode(p)       (p)->RestoreDisplayMode()\n#define IDirectDraw_SetCooperativeLevel(p,a,b)  (p)->SetCooperativeLevel(a,b)\n#define IDirectDraw_SetDisplayMode(p,a,b,c)     (p)->SetDisplayMode(a,b,c)\n#define IDirectDraw_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b)\n#endif\n\n\n/* flags for Lock() */\n#define DDLOCK_SURFACEMEMORYPTR         __MSABI_LONG(0x00000000)\n#define DDLOCK_WAIT                     __MSABI_LONG(0x00000001)\n#define DDLOCK_EVENT                    __MSABI_LONG(0x00000002)\n#define DDLOCK_READONLY                 __MSABI_LONG(0x00000010)\n#define DDLOCK_WRITEONLY                __MSABI_LONG(0x00000020)\n#define DDLOCK_NOSYSLOCK                __MSABI_LONG(0x00000800)\n#define DDLOCK_NOOVERWRITE              __MSABI_LONG(0x00001000)\n#define DDLOCK_DISCARDCONTENTS          __MSABI_LONG(0x00002000)\n#define DDLOCK_OKTOSWAP                 __MSABI_LONG(0x00002000)\n#define DDLOCK_DONOTWAIT                __MSABI_LONG(0x00004000)\n#define DDLOCK_HASVOLUMETEXTUREBOXRECT  __MSABI_LONG(0x00008000)\n#define DDLOCK_NODIRTYUPDATE            __MSABI_LONG(0x00010000)\n\n\n/*****************************************************************************\n * IDirectDraw2 interface\n */\n/* Note: IDirectDraw2 cannot derive from IDirectDraw because the number of\n * arguments of SetDisplayMode has changed !\n */\n#define INTERFACE IDirectDraw2\nDECLARE_INTERFACE_(IDirectDraw2,IUnknown)\n{\n          /*** IUnknown methods ***/\n/*00*/    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n/*04*/    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n/*08*/    STDMETHOD_(ULONG,Release)(THIS) PURE;\n          /*** IDirectDraw2 methods ***/\n/*0c*/    STDMETHOD(Compact)(THIS) PURE;\n/*10*/    STDMETHOD(CreateClipper)(THIS_ DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer) PURE;\n/*14*/    STDMETHOD(CreatePalette)(THIS_ DWORD flags, PALETTEENTRY *color_table,\n                IDirectDrawPalette **palette, IUnknown *outer) PURE;\n/*18*/    STDMETHOD(CreateSurface)(THIS_ DDSURFACEDESC *surface_desc,\n                struct IDirectDrawSurface **surface, IUnknown *outer) PURE;\n/*1c*/    STDMETHOD(DuplicateSurface)(THIS_ struct IDirectDrawSurface *src_surface,\n                struct IDirectDrawSurface **dst_surface) PURE;\n/*20*/    STDMETHOD(EnumDisplayModes)(THIS_ DWORD flags, DDSURFACEDESC *surface_desc,\n                void *ctx, LPDDENUMMODESCALLBACK cb) PURE;\n/*24*/    STDMETHOD(EnumSurfaces)(THIS_ DWORD flags, DDSURFACEDESC *surface_desc,\n                void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;\n/*28*/    STDMETHOD(FlipToGDISurface)(THIS) PURE;\n/*2c*/    STDMETHOD(GetCaps)(THIS_ DDCAPS *driver_caps, DDCAPS *hel_caps) PURE;\n/*30*/    STDMETHOD(GetDisplayMode)(THIS_ DDSURFACEDESC *surface_desc) PURE;\n/*34*/    STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE;\n/*38*/    STDMETHOD(GetGDISurface)(THIS_ struct IDirectDrawSurface **surface) PURE;\n/*3c*/    STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE;\n/*40*/    STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE;\n/*44*/    STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE;\n/*48*/    STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE;\n/*4c*/    STDMETHOD(RestoreDisplayMode)(THIS) PURE;\n/*50*/    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE;\n/*54*/    STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) PURE;\n/*58*/    STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE;\n          /* added in v2 */\n/*5c*/    STDMETHOD(GetAvailableVidMem)(THIS_ DDSCAPS *caps, DWORD *total, DWORD *free) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectDraw2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectDraw2_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectDraw2_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectDraw methods ***/\n#define IDirectDraw2_Compact(p)                  (p)->lpVtbl->Compact(p)\n#define IDirectDraw2_CreateClipper(p,a,b,c)      (p)->lpVtbl->CreateClipper(p,a,b,c)\n#define IDirectDraw2_CreatePalette(p,a,b,c,d)    (p)->lpVtbl->CreatePalette(p,a,b,c,d)\n#define IDirectDraw2_CreateSurface(p,a,b,c)      (p)->lpVtbl->CreateSurface(p,a,b,c)\n#define IDirectDraw2_DuplicateSurface(p,a,b)     (p)->lpVtbl->DuplicateSurface(p,a,b)\n#define IDirectDraw2_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d)\n#define IDirectDraw2_EnumSurfaces(p,a,b,c,d)     (p)->lpVtbl->EnumSurfaces(p,a,b,c,d)\n#define IDirectDraw2_FlipToGDISurface(p)         (p)->lpVtbl->FlipToGDISurface(p)\n#define IDirectDraw2_GetCaps(p,a,b)              (p)->lpVtbl->GetCaps(p,a,b)\n#define IDirectDraw2_GetDisplayMode(p,a)         (p)->lpVtbl->GetDisplayMode(p,a)\n#define IDirectDraw2_GetFourCCCodes(p,a,b)       (p)->lpVtbl->GetFourCCCodes(p,a,b)\n#define IDirectDraw2_GetGDISurface(p,a)          (p)->lpVtbl->GetGDISurface(p,a)\n#define IDirectDraw2_GetMonitorFrequency(p,a)    (p)->lpVtbl->GetMonitorFrequency(p,a)\n#define IDirectDraw2_GetScanLine(p,a)            (p)->lpVtbl->GetScanLine(p,a)\n#define IDirectDraw2_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a)\n#define IDirectDraw2_Initialize(p,a)             (p)->lpVtbl->Initialize(p,a)\n#define IDirectDraw2_RestoreDisplayMode(p)       (p)->lpVtbl->RestoreDisplayMode(p)\n#define IDirectDraw2_SetCooperativeLevel(p,a,b)  (p)->lpVtbl->SetCooperativeLevel(p,a,b)\n#define IDirectDraw2_SetDisplayMode(p,a,b,c,d,e) (p)->lpVtbl->SetDisplayMode(p,a,b,c,d,e)\n#define IDirectDraw2_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b)\n/*** IDirectDraw2 methods ***/\n#define IDirectDraw2_GetAvailableVidMem(p,a,b,c) (p)->lpVtbl->GetAvailableVidMem(p,a,b,c)\n#else\n/*** IUnknown methods ***/\n#define IDirectDraw2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectDraw2_AddRef(p)             (p)->AddRef()\n#define IDirectDraw2_Release(p)            (p)->Release()\n/*** IDirectDraw methods ***/\n#define IDirectDraw2_Compact(p)                  (p)->Compact()\n#define IDirectDraw2_CreateClipper(p,a,b,c)      (p)->CreateClipper(a,b,c)\n#define IDirectDraw2_CreatePalette(p,a,b,c,d)    (p)->CreatePalette(a,b,c,d)\n#define IDirectDraw2_CreateSurface(p,a,b,c)      (p)->CreateSurface(a,b,c)\n#define IDirectDraw2_DuplicateSurface(p,a,b)     (p)->DuplicateSurface(a,b)\n#define IDirectDraw2_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d)\n#define IDirectDraw2_EnumSurfaces(p,a,b,c,d)     (p)->EnumSurfaces(a,b,c,d)\n#define IDirectDraw2_FlipToGDISurface(p)         (p)->FlipToGDISurface()\n#define IDirectDraw2_GetCaps(p,a,b)              (p)->GetCaps(a,b)\n#define IDirectDraw2_GetDisplayMode(p,a)         (p)->GetDisplayMode(a)\n#define IDirectDraw2_GetFourCCCodes(p,a,b)       (p)->GetFourCCCodes(a,b)\n#define IDirectDraw2_GetGDISurface(p,a)          (p)->GetGDISurface(a)\n#define IDirectDraw2_GetMonitorFrequency(p,a)    (p)->GetMonitorFrequency(a)\n#define IDirectDraw2_GetScanLine(p,a)            (p)->GetScanLine(a)\n#define IDirectDraw2_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a)\n#define IDirectDraw2_Initialize(p,a)             (p)->Initialize(a)\n#define IDirectDraw2_RestoreDisplayMode(p)       (p)->RestoreDisplayMode()\n#define IDirectDraw2_SetCooperativeLevel(p,a,b)  (p)->SetCooperativeLevel(a,b)\n#define IDirectDraw2_SetDisplayMode(p,a,b,c,d,e) (p)->SetDisplayMode(a,b,c,d,e)\n#define IDirectDraw2_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b)\n/*** IDirectDraw2 methods ***/\n#define IDirectDraw2_GetAvailableVidMem(p,a,b,c) (p)->GetAvailableVidMem(a,b,c)\n#endif\n\n\n/*****************************************************************************\n * IDirectDraw3 interface\n */\n#define INTERFACE IDirectDraw3\nDECLARE_INTERFACE_(IDirectDraw3,IUnknown)\n{\n          /*** IUnknown methods ***/\n/*00*/    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n/*04*/    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n/*08*/    STDMETHOD_(ULONG,Release)(THIS) PURE;\n          /*** IDirectDraw2 methods ***/\n/*0c*/    STDMETHOD(Compact)(THIS) PURE;\n/*10*/    STDMETHOD(CreateClipper)(THIS_ DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer) PURE;\n/*14*/    STDMETHOD(CreatePalette)(THIS_ DWORD flags, PALETTEENTRY *color_table,\n                IDirectDrawPalette **lplpDDPalette, IUnknown *outer) PURE;\n/*18*/    STDMETHOD(CreateSurface)(THIS_ DDSURFACEDESC *surface_desc,\n                struct IDirectDrawSurface **surface, IUnknown *outer) PURE;\n/*1c*/    STDMETHOD(DuplicateSurface)(THIS_ struct IDirectDrawSurface *src_surface,\n                struct IDirectDrawSurface **dst_surface) PURE;\n/*20*/    STDMETHOD(EnumDisplayModes)(THIS_ DWORD flags, DDSURFACEDESC *surface_desc,\n                void *ctx, LPDDENUMMODESCALLBACK cb) PURE;\n/*24*/    STDMETHOD(EnumSurfaces)(THIS_ DWORD flags, DDSURFACEDESC *surface_desc,\n                void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;\n/*28*/    STDMETHOD(FlipToGDISurface)(THIS) PURE;\n/*2c*/    STDMETHOD(GetCaps)(THIS_ DDCAPS *driver_caps, DDCAPS *hel_caps) PURE;\n/*30*/    STDMETHOD(GetDisplayMode)(THIS_ DDSURFACEDESC *surface_desc) PURE;\n/*34*/    STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE;\n/*38*/    STDMETHOD(GetGDISurface)(THIS_ struct IDirectDrawSurface **surface) PURE;\n/*3c*/    STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE;\n/*40*/    STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE;\n/*44*/    STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE;\n/*48*/    STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE;\n/*4c*/    STDMETHOD(RestoreDisplayMode)(THIS) PURE;\n/*50*/    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE;\n/*54*/    STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) PURE;\n/*58*/    STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE;\n          /* added in v2 */\n/*5c*/    STDMETHOD(GetAvailableVidMem)(THIS_ DDSCAPS *caps, DWORD *total, DWORD *free) PURE;\n          /* added in v3 */\n/*60*/    STDMETHOD(GetSurfaceFromDC)(THIS_ HDC dc, struct IDirectDrawSurface **surface) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectDraw3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectDraw3_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectDraw3_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectDraw methods ***/\n#define IDirectDraw3_Compact(p)                  (p)->lpVtbl->Compact(p)\n#define IDirectDraw3_CreateClipper(p,a,b,c)      (p)->lpVtbl->CreateClipper(p,a,b,c)\n#define IDirectDraw3_CreatePalette(p,a,b,c,d)    (p)->lpVtbl->CreatePalette(p,a,b,c,d)\n#define IDirectDraw3_CreateSurface(p,a,b,c)      (p)->lpVtbl->CreateSurface(p,a,b,c)\n#define IDirectDraw3_DuplicateSurface(p,a,b)     (p)->lpVtbl->DuplicateSurface(p,a,b)\n#define IDirectDraw3_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d)\n#define IDirectDraw3_EnumSurfaces(p,a,b,c,d)     (p)->lpVtbl->EnumSurfaces(p,a,b,c,d)\n#define IDirectDraw3_FlipToGDISurface(p)         (p)->lpVtbl->FlipToGDISurface(p)\n#define IDirectDraw3_GetCaps(p,a,b)              (p)->lpVtbl->GetCaps(p,a,b)\n#define IDirectDraw3_GetDisplayMode(p,a)         (p)->lpVtbl->GetDisplayMode(p,a)\n#define IDirectDraw3_GetFourCCCodes(p,a,b)       (p)->lpVtbl->GetFourCCCodes(p,a,b)\n#define IDirectDraw3_GetGDISurface(p,a)          (p)->lpVtbl->GetGDISurface(p,a)\n#define IDirectDraw3_GetMonitorFrequency(p,a)    (p)->lpVtbl->GetMonitorFrequency(p,a)\n#define IDirectDraw3_GetScanLine(p,a)            (p)->lpVtbl->GetScanLine(p,a)\n#define IDirectDraw3_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a)\n#define IDirectDraw3_Initialize(p,a)             (p)->lpVtbl->Initialize(p,a)\n#define IDirectDraw3_RestoreDisplayMode(p)       (p)->lpVtbl->RestoreDisplayMode(p)\n#define IDirectDraw3_SetCooperativeLevel(p,a,b)  (p)->lpVtbl->SetCooperativeLevel(p,a,b)\n#define IDirectDraw3_SetDisplayMode(p,a,b,c,d,e) (p)->lpVtbl->SetDisplayMode(p,a,b,c,d,e)\n#define IDirectDraw3_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b)\n/*** IDirectDraw2 methods ***/\n#define IDirectDraw3_GetAvailableVidMem(p,a,b,c) (p)->lpVtbl->GetAvailableVidMem(p,a,b,c)\n/*** IDirectDraw3 methods ***/\n#define IDirectDraw3_GetSurfaceFromDC(p,a,b)    (p)->lpVtbl->GetSurfaceFromDC(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirectDraw3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectDraw3_AddRef(p)             (p)->AddRef()\n#define IDirectDraw3_Release(p)            (p)->Release()\n/*** IDirectDraw methods ***/\n#define IDirectDraw3_Compact(p)                  (p)->Compact()\n#define IDirectDraw3_CreateClipper(p,a,b,c)      (p)->CreateClipper(a,b,c)\n#define IDirectDraw3_CreatePalette(p,a,b,c,d)    (p)->CreatePalette(a,b,c,d)\n#define IDirectDraw3_CreateSurface(p,a,b,c)      (p)->CreateSurface(a,b,c)\n#define IDirectDraw3_DuplicateSurface(p,a,b)     (p)->DuplicateSurface(a,b)\n#define IDirectDraw3_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d)\n#define IDirectDraw3_EnumSurfaces(p,a,b,c,d)     (p)->EnumSurfaces(a,b,c,d)\n#define IDirectDraw3_FlipToGDISurface(p)         (p)->FlipToGDISurface()\n#define IDirectDraw3_GetCaps(p,a,b)              (p)->GetCaps(a,b)\n#define IDirectDraw3_GetDisplayMode(p,a)         (p)->GetDisplayMode(a)\n#define IDirectDraw3_GetFourCCCodes(p,a,b)       (p)->GetFourCCCodes(a,b)\n#define IDirectDraw3_GetGDISurface(p,a)          (p)->GetGDISurface(a)\n#define IDirectDraw3_GetMonitorFrequency(p,a)    (p)->GetMonitorFrequency(a)\n#define IDirectDraw3_GetScanLine(p,a)            (p)->GetScanLine(a)\n#define IDirectDraw3_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a)\n#define IDirectDraw3_Initialize(p,a)             (p)->Initialize(a)\n#define IDirectDraw3_RestoreDisplayMode(p)       (p)->RestoreDisplayMode()\n#define IDirectDraw3_SetCooperativeLevel(p,a,b)  (p)->SetCooperativeLevel(a,b)\n#define IDirectDraw3_SetDisplayMode(p,a,b,c,d,e) (p)->SetDisplayMode(a,b,c,d,e)\n#define IDirectDraw3_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b)\n/*** IDirectDraw2 methods ***/\n#define IDirectDraw3_GetAvailableVidMem(p,a,b,c) (p)->GetAvailableVidMem(a,b,c)\n/*** IDirectDraw3 methods ***/\n#define IDirectDraw3_GetSurfaceFromDC(p,a,b)    (p)->GetSurfaceFromDC(a,b)\n#endif\n\n\n/*****************************************************************************\n * IDirectDraw4 interface\n */\n#define INTERFACE IDirectDraw4\nDECLARE_INTERFACE_(IDirectDraw4,IUnknown)\n{\n          /*** IUnknown methods ***/\n/*00*/    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n/*04*/    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n/*08*/    STDMETHOD_(ULONG,Release)(THIS) PURE;\n          /*** IDirectDraw4 methods ***/\n/*0c*/    STDMETHOD(Compact)(THIS) PURE;\n/*10*/    STDMETHOD(CreateClipper)(THIS_ DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer) PURE;\n/*14*/    STDMETHOD(CreatePalette)(THIS_ DWORD flags, PALETTEENTRY *color_table,\n                IDirectDrawPalette **palette, IUnknown *outer) PURE;\n/*18*/    STDMETHOD(CreateSurface)(THIS_ DDSURFACEDESC2 *surface_desc,\n                struct IDirectDrawSurface4 **surface, IUnknown *outer) PURE;\n/*1c*/    STDMETHOD(DuplicateSurface)(THIS_ struct IDirectDrawSurface4 *src_surface,\n                struct IDirectDrawSurface4 **dst_surface) PURE;\n/*20*/    STDMETHOD(EnumDisplayModes)(THIS_ DWORD flags, DDSURFACEDESC2 *surface_desc,\n                void *ctx, LPDDENUMMODESCALLBACK2 cb) PURE;\n/*24*/    STDMETHOD(EnumSurfaces)(THIS_ DWORD flags, DDSURFACEDESC2 *surface_desc,\n                void *ctx, LPDDENUMSURFACESCALLBACK2 cb) PURE;\n/*28*/    STDMETHOD(FlipToGDISurface)(THIS) PURE;\n/*2c*/    STDMETHOD(GetCaps)(THIS_ DDCAPS *driver_caps, DDCAPS *hel_caps) PURE;\n/*30*/    STDMETHOD(GetDisplayMode)(THIS_ DDSURFACEDESC2 *surface_desc) PURE;\n/*34*/    STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE;\n/*38*/    STDMETHOD(GetGDISurface)(THIS_ struct IDirectDrawSurface4 **surface) PURE;\n/*3c*/    STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE;\n/*40*/    STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE;\n/*44*/    STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE;\n/*48*/    STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE;\n/*4c*/    STDMETHOD(RestoreDisplayMode)(THIS) PURE;\n/*50*/    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE;\n/*54*/    STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) PURE;\n/*58*/    STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE;\n          /* added in v2 */\n/*5c*/    STDMETHOD(GetAvailableVidMem)(THIS_ DDSCAPS2 *caps, DWORD *total, DWORD *free) PURE;\n          /* added in v4 */\n/*60*/    STDMETHOD(GetSurfaceFromDC)(THIS_ HDC dc, struct IDirectDrawSurface4 **surface) PURE;\n/*64*/    STDMETHOD(RestoreAllSurfaces)(THIS) PURE;\n/*68*/    STDMETHOD(TestCooperativeLevel)(THIS) PURE;\n/*6c*/    STDMETHOD(GetDeviceIdentifier)(THIS_ DDDEVICEIDENTIFIER *identifier, DWORD flags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectDraw4_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectDraw4_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectDraw4_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectDraw methods ***/\n#define IDirectDraw4_Compact(p)                  (p)->lpVtbl->Compact(p)\n#define IDirectDraw4_CreateClipper(p,a,b,c)      (p)->lpVtbl->CreateClipper(p,a,b,c)\n#define IDirectDraw4_CreatePalette(p,a,b,c,d)    (p)->lpVtbl->CreatePalette(p,a,b,c,d)\n#define IDirectDraw4_CreateSurface(p,a,b,c)      (p)->lpVtbl->CreateSurface(p,a,b,c)\n#define IDirectDraw4_DuplicateSurface(p,a,b)     (p)->lpVtbl->DuplicateSurface(p,a,b)\n#define IDirectDraw4_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d)\n#define IDirectDraw4_EnumSurfaces(p,a,b,c,d)     (p)->lpVtbl->EnumSurfaces(p,a,b,c,d)\n#define IDirectDraw4_FlipToGDISurface(p)         (p)->lpVtbl->FlipToGDISurface(p)\n#define IDirectDraw4_GetCaps(p,a,b)              (p)->lpVtbl->GetCaps(p,a,b)\n#define IDirectDraw4_GetDisplayMode(p,a)         (p)->lpVtbl->GetDisplayMode(p,a)\n#define IDirectDraw4_GetFourCCCodes(p,a,b)       (p)->lpVtbl->GetFourCCCodes(p,a,b)\n#define IDirectDraw4_GetGDISurface(p,a)          (p)->lpVtbl->GetGDISurface(p,a)\n#define IDirectDraw4_GetMonitorFrequency(p,a)    (p)->lpVtbl->GetMonitorFrequency(p,a)\n#define IDirectDraw4_GetScanLine(p,a)            (p)->lpVtbl->GetScanLine(p,a)\n#define IDirectDraw4_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a)\n#define IDirectDraw4_Initialize(p,a)             (p)->lpVtbl->Initialize(p,a)\n#define IDirectDraw4_RestoreDisplayMode(p)       (p)->lpVtbl->RestoreDisplayMode(p)\n#define IDirectDraw4_SetCooperativeLevel(p,a,b)  (p)->lpVtbl->SetCooperativeLevel(p,a,b)\n#define IDirectDraw4_SetDisplayMode(p,a,b,c,d,e) (p)->lpVtbl->SetDisplayMode(p,a,b,c,d,e)\n#define IDirectDraw4_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b)\n/*** IDirectDraw2 methods ***/\n#define IDirectDraw4_GetAvailableVidMem(p,a,b,c) (p)->lpVtbl->GetAvailableVidMem(p,a,b,c)\n/*** IDirectDraw4 methods ***/\n#define IDirectDraw4_GetSurfaceFromDC(p,a,b)    (p)->lpVtbl->GetSurfaceFromDC(p,a,b)\n#define IDirectDraw4_RestoreAllSurfaces(p)      (p)->lpVtbl->RestoreAllSurfaces(p)\n#define IDirectDraw4_TestCooperativeLevel(p)    (p)->lpVtbl->TestCooperativeLevel(p)\n#define IDirectDraw4_GetDeviceIdentifier(p,a,b) (p)->lpVtbl->GetDeviceIdentifier(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirectDraw4_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectDraw4_AddRef(p)             (p)->AddRef()\n#define IDirectDraw4_Release(p)            (p)->Release()\n/*** IDirectDraw methods ***/\n#define IDirectDraw4_Compact(p)                  (p)->Compact()\n#define IDirectDraw4_CreateClipper(p,a,b,c)      (p)->CreateClipper(a,b,c)\n#define IDirectDraw4_CreatePalette(p,a,b,c,d)    (p)->CreatePalette(a,b,c,d)\n#define IDirectDraw4_CreateSurface(p,a,b,c)      (p)->CreateSurface(a,b,c)\n#define IDirectDraw4_DuplicateSurface(p,a,b)     (p)->DuplicateSurface(a,b)\n#define IDirectDraw4_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d)\n#define IDirectDraw4_EnumSurfaces(p,a,b,c,d)     (p)->EnumSurfaces(a,b,c,d)\n#define IDirectDraw4_FlipToGDISurface(p)         (p)->FlipToGDISurface()\n#define IDirectDraw4_GetCaps(p,a,b)              (p)->GetCaps(a,b)\n#define IDirectDraw4_GetDisplayMode(p,a)         (p)->GetDisplayMode(a)\n#define IDirectDraw4_GetFourCCCodes(p,a,b)       (p)->GetFourCCCodes(a,b)\n#define IDirectDraw4_GetGDISurface(p,a)          (p)->GetGDISurface(a)\n#define IDirectDraw4_GetMonitorFrequency(p,a)    (p)->GetMonitorFrequency(a)\n#define IDirectDraw4_GetScanLine(p,a)            (p)->GetScanLine(a)\n#define IDirectDraw4_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a)\n#define IDirectDraw4_Initialize(p,a)             (p)->Initialize(a)\n#define IDirectDraw4_RestoreDisplayMode(p)       (p)->RestoreDisplayMode()\n#define IDirectDraw4_SetCooperativeLevel(p,a,b)  (p)->SetCooperativeLevel(a,b)\n#define IDirectDraw4_SetDisplayMode(p,a,b,c,d,e) (p)->SetDisplayMode(a,b,c,d,e)\n#define IDirectDraw4_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b)\n/*** IDirectDraw2 methods ***/\n#define IDirectDraw4_GetAvailableVidMem(p,a,b,c) (p)->GetAvailableVidMem(a,b,c)\n/*** IDirectDraw4 methods ***/\n#define IDirectDraw4_GetSurfaceFromDC(p,a,b)    (p)->GetSurfaceFromDC(a,b)\n#define IDirectDraw4_RestoreAllSurfaces(pc)     (p)->RestoreAllSurfaces()\n#define IDirectDraw4_TestCooperativeLevel(p)    (p)->TestCooperativeLevel()\n#define IDirectDraw4_GetDeviceIdentifier(p,a,b) (p)->GetDeviceIdentifier(a,b)\n#endif\n\n\n/*****************************************************************************\n * IDirectDraw7 interface\n */\n/* Note: IDirectDraw7 cannot derive from IDirectDraw4; it is even documented\n * as not interchangeable with earlier DirectDraw interfaces.\n */\n#define INTERFACE IDirectDraw7\nDECLARE_INTERFACE_(IDirectDraw7,IUnknown)\n{\n          /*** IUnknown methods ***/\n/*00*/    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n/*04*/    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n/*08*/    STDMETHOD_(ULONG,Release)(THIS) PURE;\n          /*** IDirectDraw7 methods ***/\n/*0c*/    STDMETHOD(Compact)(THIS) PURE;\n/*10*/    STDMETHOD(CreateClipper)(THIS_ DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer) PURE;\n/*14*/    STDMETHOD(CreatePalette)(THIS_ DWORD flags, PALETTEENTRY *color_table,\n                IDirectDrawPalette **palette, IUnknown *outer) PURE;\n/*18*/    STDMETHOD(CreateSurface)(THIS_ DDSURFACEDESC2 *surface_desc,\n                struct IDirectDrawSurface7 **surface, IUnknown *outer) PURE;\n/*1c*/    STDMETHOD(DuplicateSurface)(THIS_ struct IDirectDrawSurface7 *src_surface,\n                struct IDirectDrawSurface7 **dst_surface) PURE;\n/*20*/    STDMETHOD(EnumDisplayModes)(THIS_ DWORD flags, DDSURFACEDESC2 *surface_desc,\n                void *ctx, LPDDENUMMODESCALLBACK2 cb) PURE;\n/*24*/    STDMETHOD(EnumSurfaces)(THIS_ DWORD flags, DDSURFACEDESC2 *surface_desc,\n                void *ctx, LPDDENUMSURFACESCALLBACK7 cb) PURE;\n/*28*/    STDMETHOD(FlipToGDISurface)(THIS) PURE;\n/*2c*/    STDMETHOD(GetCaps)(THIS_ DDCAPS *driver_caps, DDCAPS *hel_caps) PURE;\n/*30*/    STDMETHOD(GetDisplayMode)(THIS_ DDSURFACEDESC2 *surface_desc) PURE;\n/*34*/    STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE;\n/*38*/    STDMETHOD(GetGDISurface)(THIS_ struct IDirectDrawSurface7 **surface) PURE;\n/*3c*/    STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE;\n/*40*/    STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE;\n/*44*/    STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE;\n/*48*/    STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE;\n/*4c*/    STDMETHOD(RestoreDisplayMode)(THIS) PURE;\n/*50*/    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE;\n/*54*/    STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) PURE;\n/*58*/    STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE;\n          /* added in v2 */\n/*5c*/    STDMETHOD(GetAvailableVidMem)(THIS_ DDSCAPS2 *caps, DWORD *total, DWORD *free) PURE;\n          /* added in v4 */\n/*60*/    STDMETHOD(GetSurfaceFromDC)(THIS_ HDC dc, struct IDirectDrawSurface7 **surface) PURE;\n/*64*/    STDMETHOD(RestoreAllSurfaces)(THIS) PURE;\n/*68*/    STDMETHOD(TestCooperativeLevel)(THIS) PURE;\n/*6c*/    STDMETHOD(GetDeviceIdentifier)(THIS_ DDDEVICEIDENTIFIER2 *identifier, DWORD flags) PURE;\n          /* added in v7 */\n/*70*/    STDMETHOD(StartModeTest)(THIS_ LPSIZE pModes, DWORD dwNumModes, DWORD dwFlags) PURE;\n/*74*/    STDMETHOD(EvaluateMode)(THIS_ DWORD dwFlags, DWORD  *pTimeout) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectDraw7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectDraw7_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectDraw7_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectDraw methods ***/\n#define IDirectDraw7_Compact(p)                  (p)->lpVtbl->Compact(p)\n#define IDirectDraw7_CreateClipper(p,a,b,c)      (p)->lpVtbl->CreateClipper(p,a,b,c)\n#define IDirectDraw7_CreatePalette(p,a,b,c,d)    (p)->lpVtbl->CreatePalette(p,a,b,c,d)\n#define IDirectDraw7_CreateSurface(p,a,b,c)      (p)->lpVtbl->CreateSurface(p,a,b,c)\n#define IDirectDraw7_DuplicateSurface(p,a,b)     (p)->lpVtbl->DuplicateSurface(p,a,b)\n#define IDirectDraw7_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d)\n#define IDirectDraw7_EnumSurfaces(p,a,b,c,d)     (p)->lpVtbl->EnumSurfaces(p,a,b,c,d)\n#define IDirectDraw7_FlipToGDISurface(p)         (p)->lpVtbl->FlipToGDISurface(p)\n#define IDirectDraw7_GetCaps(p,a,b)              (p)->lpVtbl->GetCaps(p,a,b)\n#define IDirectDraw7_GetDisplayMode(p,a)         (p)->lpVtbl->GetDisplayMode(p,a)\n#define IDirectDraw7_GetFourCCCodes(p,a,b)       (p)->lpVtbl->GetFourCCCodes(p,a,b)\n#define IDirectDraw7_GetGDISurface(p,a)          (p)->lpVtbl->GetGDISurface(p,a)\n#define IDirectDraw7_GetMonitorFrequency(p,a)    (p)->lpVtbl->GetMonitorFrequency(p,a)\n#define IDirectDraw7_GetScanLine(p,a)            (p)->lpVtbl->GetScanLine(p,a)\n#define IDirectDraw7_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a)\n#define IDirectDraw7_Initialize(p,a)             (p)->lpVtbl->Initialize(p,a)\n#define IDirectDraw7_RestoreDisplayMode(p)       (p)->lpVtbl->RestoreDisplayMode(p)\n#define IDirectDraw7_SetCooperativeLevel(p,a,b)  (p)->lpVtbl->SetCooperativeLevel(p,a,b)\n#define IDirectDraw7_SetDisplayMode(p,a,b,c,d,e) (p)->lpVtbl->SetDisplayMode(p,a,b,c,d,e)\n#define IDirectDraw7_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b)\n/*** added in IDirectDraw2 ***/\n#define IDirectDraw7_GetAvailableVidMem(p,a,b,c) (p)->lpVtbl->GetAvailableVidMem(p,a,b,c)\n/*** added in IDirectDraw4 ***/\n#define IDirectDraw7_GetSurfaceFromDC(p,a,b)    (p)->lpVtbl->GetSurfaceFromDC(p,a,b)\n#define IDirectDraw7_RestoreAllSurfaces(p)     (p)->lpVtbl->RestoreAllSurfaces(p)\n#define IDirectDraw7_TestCooperativeLevel(p)    (p)->lpVtbl->TestCooperativeLevel(p)\n#define IDirectDraw7_GetDeviceIdentifier(p,a,b) (p)->lpVtbl->GetDeviceIdentifier(p,a,b)\n/*** added in IDirectDraw 7 ***/\n#define IDirectDraw7_StartModeTest(p,a,b,c)     (p)->lpVtbl->StartModeTest(p,a,b,c)\n#define IDirectDraw7_EvaluateMode(p,a,b)        (p)->lpVtbl->EvaluateMode(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirectDraw7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectDraw7_AddRef(p)             (p)->AddRef()\n#define IDirectDraw7_Release(p)            (p)->Release()\n/*** IDirectDraw methods ***/\n#define IDirectDraw7_Compact(p)                  (p)->Compact()\n#define IDirectDraw7_CreateClipper(p,a,b,c)      (p)->CreateClipper(a,b,c)\n#define IDirectDraw7_CreatePalette(p,a,b,c,d)    (p)->CreatePalette(a,b,c,d)\n#define IDirectDraw7_CreateSurface(p,a,b,c)      (p)->CreateSurface(a,b,c)\n#define IDirectDraw7_DuplicateSurface(p,a,b)     (p)->DuplicateSurface(a,b)\n#define IDirectDraw7_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d)\n#define IDirectDraw7_EnumSurfaces(p,a,b,c,d)     (p)->EnumSurfaces(a,b,c,d)\n#define IDirectDraw7_FlipToGDISurface(p)         (p)->FlipToGDISurface()\n#define IDirectDraw7_GetCaps(p,a,b)              (p)->GetCaps(a,b)\n#define IDirectDraw7_GetDisplayMode(p,a)         (p)->GetDisplayMode(a)\n#define IDirectDraw7_GetFourCCCodes(p,a,b)       (p)->GetFourCCCodes(a,b)\n#define IDirectDraw7_GetGDISurface(p,a)          (p)->GetGDISurface(a)\n#define IDirectDraw7_GetMonitorFrequency(p,a)    (p)->GetMonitorFrequency(a)\n#define IDirectDraw7_GetScanLine(p,a)            (p)->GetScanLine(a)\n#define IDirectDraw7_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a)\n#define IDirectDraw7_Initialize(p,a)             (p)->Initialize(a)\n#define IDirectDraw7_RestoreDisplayMode(p)       (p)->RestoreDisplayMode()\n#define IDirectDraw7_SetCooperativeLevel(p,a,b)  (p)->SetCooperativeLevel(a,b)\n#define IDirectDraw7_SetDisplayMode(p,a,b,c,d,e) (p)->SetDisplayMode(a,b,c,d,e)\n#define IDirectDraw7_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b)\n/*** added in IDirectDraw2 ***/\n#define IDirectDraw7_GetAvailableVidMem(p,a,b,c) (p)->GetAvailableVidMem(a,b,c)\n/*** added in IDirectDraw4 ***/\n#define IDirectDraw7_GetSurfaceFromDC(p,a,b)    (p)->GetSurfaceFromDC(a,b)\n#define IDirectDraw7_RestoreAllSurfaces(p)     (p)->RestoreAllSurfaces()\n#define IDirectDraw7_TestCooperativeLevel(p)    (p)->TestCooperativeLevel()\n#define IDirectDraw7_GetDeviceIdentifier(p,a,b) (p)->GetDeviceIdentifier(a,b)\n/*** added in IDirectDraw 7 ***/\n#define IDirectDraw7_StartModeTest(p,a,b,c)     (p)->StartModeTest(a,b,c)\n#define IDirectDraw7_EvaluateMode(p,a,b)        (p)->EvaluateMode(a,b)\n#endif\n\n\n/*****************************************************************************\n * IDirectDrawSurface interface\n */\n#define INTERFACE IDirectDrawSurface\nDECLARE_INTERFACE_(IDirectDrawSurface,IUnknown)\n{\n          /*** IUnknown methods ***/\n/*00*/    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n/*04*/    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n/*08*/    STDMETHOD_(ULONG,Release)(THIS) PURE;\n          /*** IDirectDrawSurface methods ***/\n/*0c*/    STDMETHOD(AddAttachedSurface)(THIS_ IDirectDrawSurface *attachment) PURE;\n/*10*/    STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE;\n/*14*/    STDMETHOD(Blt)(THIS_ RECT *dst_rect, IDirectDrawSurface *src_surface, RECT *src_rect,\n                DWORD flags, DDBLTFX *fx) PURE;\n/*18*/    STDMETHOD(BltBatch)(THIS_ DDBLTBATCH *batch, DWORD count, DWORD flags) PURE;\n/*1c*/    STDMETHOD(BltFast)(THIS_ DWORD x, DWORD y, IDirectDrawSurface *src_surface,\n                RECT *src_rect, DWORD flags) PURE;\n/*20*/    STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD flags, IDirectDrawSurface *attachment) PURE;\n/*24*/    STDMETHOD(EnumAttachedSurfaces)(THIS_ void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;\n/*28*/    STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD flags, void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;\n/*2c*/    STDMETHOD(Flip)(THIS_ IDirectDrawSurface *dst_surface, DWORD flags) PURE;\n/*30*/    STDMETHOD(GetAttachedSurface)(THIS_ DDSCAPS *caps, IDirectDrawSurface **attachment) PURE;\n/*34*/    STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE;\n/*38*/    STDMETHOD(GetCaps)(THIS_ DDSCAPS *caps) PURE;\n/*3c*/    STDMETHOD(GetClipper)(THIS_ IDirectDrawClipper **clipper) PURE;\n/*40*/    STDMETHOD(GetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;\n/*44*/    STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE;\n/*48*/    STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE;\n/*4c*/    STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE;\n/*50*/    STDMETHOD(GetPalette)(THIS_ IDirectDrawPalette **palette) PURE;\n/*54*/    STDMETHOD(GetPixelFormat)(THIS_ DDPIXELFORMAT *format) PURE;\n/*58*/    STDMETHOD(GetSurfaceDesc)(THIS_ DDSURFACEDESC *surface_desc) PURE;\n/*5c*/    STDMETHOD(Initialize)(THIS_ IDirectDraw *ddraw, DDSURFACEDESC *surface_desc) PURE;\n/*60*/    STDMETHOD(IsLost)(THIS) PURE;\n/*64*/    STDMETHOD(Lock)(THIS_ RECT *rect, DDSURFACEDESC *surface_desc, DWORD flags, HANDLE event) PURE;\n/*68*/    STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE;\n/*6c*/    STDMETHOD(Restore)(THIS) PURE;\n/*70*/    STDMETHOD(SetClipper)(THIS_ IDirectDrawClipper *clipper) PURE;\n/*74*/    STDMETHOD(SetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;\n/*78*/    STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE;\n/*7c*/    STDMETHOD(SetPalette)(THIS_ IDirectDrawPalette *palette) PURE;\n/*80*/    STDMETHOD(Unlock)(THIS_ void *data) PURE;\n/*84*/    STDMETHOD(UpdateOverlay)(THIS_ RECT *src_rect, IDirectDrawSurface *dst_surface,\n                RECT *dst_rect, DWORD flags, DDOVERLAYFX *fx) PURE;\n/*88*/    STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE;\n/*8c*/    STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD flags, IDirectDrawSurface *reference_surface) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectDrawSurface_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectDrawSurface_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectDrawSurface_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectDrawSurface methods ***/\n#define IDirectDrawSurface_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)\n#define IDirectDrawSurface_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)\n#define IDirectDrawSurface_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)\n#define IDirectDrawSurface_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)\n#define IDirectDrawSurface_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)\n#define IDirectDrawSurface_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)\n#define IDirectDrawSurface_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)\n#define IDirectDrawSurface_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)\n#define IDirectDrawSurface_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)\n#define IDirectDrawSurface_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)\n#define IDirectDrawSurface_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)\n#define IDirectDrawSurface_GetCaps(p,a)                 (p)->lpVtbl->GetCaps(p,a)\n#define IDirectDrawSurface_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)\n#define IDirectDrawSurface_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)\n#define IDirectDrawSurface_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)\n#define IDirectDrawSurface_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)\n#define IDirectDrawSurface_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)\n#define IDirectDrawSurface_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)\n#define IDirectDrawSurface_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)\n#define IDirectDrawSurface_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)\n#define IDirectDrawSurface_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)\n#define IDirectDrawSurface_IsLost(p)                    (p)->lpVtbl->IsLost(p)\n#define IDirectDrawSurface_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)\n#define IDirectDrawSurface_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)\n#define IDirectDrawSurface_Restore(p)                   (p)->lpVtbl->Restore(p)\n#define IDirectDrawSurface_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)\n#define IDirectDrawSurface_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)\n#define IDirectDrawSurface_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)\n#define IDirectDrawSurface_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)\n#define IDirectDrawSurface_Unlock(p,a)                  (p)->lpVtbl->Unlock(p,a)\n#define IDirectDrawSurface_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)\n#define IDirectDrawSurface_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)\n#define IDirectDrawSurface_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirectDrawSurface_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectDrawSurface_AddRef(p)             (p)->AddRef()\n#define IDirectDrawSurface_Release(p)            (p)->Release()\n/*** IDirectDrawSurface methods ***/\n#define IDirectDrawSurface_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)\n#define IDirectDrawSurface_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)\n#define IDirectDrawSurface_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)\n#define IDirectDrawSurface_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)\n#define IDirectDrawSurface_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)\n#define IDirectDrawSurface_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)\n#define IDirectDrawSurface_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)\n#define IDirectDrawSurface_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)\n#define IDirectDrawSurface_Flip(p,a,b)                  (p)->Flip(a,b)\n#define IDirectDrawSurface_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)\n#define IDirectDrawSurface_GetBltStatus(p,a)            (p)->GetBltStatus(a)\n#define IDirectDrawSurface_GetCaps(p,a)                 (p)->GetCaps(a)\n#define IDirectDrawSurface_GetClipper(p,a)              (p)->GetClipper(a)\n#define IDirectDrawSurface_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)\n#define IDirectDrawSurface_GetDC(p,a)                   (p)->GetDC(a)\n#define IDirectDrawSurface_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)\n#define IDirectDrawSurface_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)\n#define IDirectDrawSurface_GetPalette(p,a)              (p)->GetPalette(a)\n#define IDirectDrawSurface_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)\n#define IDirectDrawSurface_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)\n#define IDirectDrawSurface_Initialize(p,a,b)            (p)->Initialize(a,b)\n#define IDirectDrawSurface_IsLost(p)                    (p)->IsLost()\n#define IDirectDrawSurface_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)\n#define IDirectDrawSurface_ReleaseDC(p,a)               (p)->ReleaseDC(a)\n#define IDirectDrawSurface_Restore(p)                   (p)->Restore()\n#define IDirectDrawSurface_SetClipper(p,a)              (p)->SetClipper(a)\n#define IDirectDrawSurface_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)\n#define IDirectDrawSurface_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)\n#define IDirectDrawSurface_SetPalette(p,a)              (p)->SetPalette(a)\n#define IDirectDrawSurface_Unlock(p,a)                  (p)->Unlock(a)\n#define IDirectDrawSurface_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)\n#define IDirectDrawSurface_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)\n#define IDirectDrawSurface_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)\n#endif\n\n\n/*****************************************************************************\n * IDirectDrawSurface2 interface\n */\n/* Cannot inherit from IDirectDrawSurface because the LPDIRECTDRAWSURFACE parameters\n * have been converted to LPDIRECTDRAWSURFACE2.\n */\n#define INTERFACE IDirectDrawSurface2\nDECLARE_INTERFACE_(IDirectDrawSurface2,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectDrawSurface2 methods ***/\n    STDMETHOD(AddAttachedSurface)(THIS_ IDirectDrawSurface2 *attachment) PURE;\n    STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE;\n    STDMETHOD(Blt)(THIS_ RECT *dst_rect, IDirectDrawSurface2 *src_surface, RECT *src_rect,\n            DWORD flags, DDBLTFX *fx) PURE;\n    STDMETHOD(BltBatch)(THIS_ DDBLTBATCH *batch, DWORD count, DWORD flags) PURE;\n    STDMETHOD(BltFast)(THIS_ DWORD x, DWORD y, IDirectDrawSurface2 *src_surface,\n            RECT *src_rect, DWORD flags) PURE;\n    STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD flags, IDirectDrawSurface2 *attachment) PURE;\n    STDMETHOD(EnumAttachedSurfaces)(THIS_ void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;\n    STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD flags, void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;\n    STDMETHOD(Flip)(THIS_ IDirectDrawSurface2 *dst_surface, DWORD flags) PURE;\n    STDMETHOD(GetAttachedSurface)(THIS_ DDSCAPS *caps, IDirectDrawSurface2 **attachment) PURE;\n    STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(GetCaps)(THIS_ DDSCAPS *caps) PURE;\n    STDMETHOD(GetClipper)(THIS_ IDirectDrawClipper **clipper) PURE;\n    STDMETHOD(GetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;\n    STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE;\n    STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE;\n    STDMETHOD(GetPalette)(THIS_ IDirectDrawPalette **palette) PURE;\n    STDMETHOD(GetPixelFormat)(THIS_ DDPIXELFORMAT *format) PURE;\n    STDMETHOD(GetSurfaceDesc)(THIS_ DDSURFACEDESC *surface_desc) PURE;\n    STDMETHOD(Initialize)(THIS_ IDirectDraw *ddraw, DDSURFACEDESC *surface_desc) PURE;\n    STDMETHOD(IsLost)(THIS) PURE;\n    STDMETHOD(Lock)(THIS_ RECT *rect, DDSURFACEDESC *surface_desc, DWORD flags, HANDLE event) PURE;\n    STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE;\n    STDMETHOD(Restore)(THIS) PURE;\n    STDMETHOD(SetClipper)(THIS_ IDirectDrawClipper *clipper) PURE;\n    STDMETHOD(SetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;\n    STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE;\n    STDMETHOD(SetPalette)(THIS_ IDirectDrawPalette *palette) PURE;\n    STDMETHOD(Unlock)(THIS_ void *data) PURE;\n    STDMETHOD(UpdateOverlay)(THIS_ RECT *src_rect, IDirectDrawSurface2 *dst_surface, RECT *dst_rect,\n            DWORD flags, DDOVERLAYFX *fx) PURE;\n    STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD flags, IDirectDrawSurface2 *reference_surface) PURE;\n    /* added in v2 */\n    STDMETHOD(GetDDInterface)(THIS_ void **ddraw) PURE;\n    STDMETHOD(PageLock)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(PageUnlock)(THIS_ DWORD dwFlags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectDrawSurface2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectDrawSurface2_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectDrawSurface2_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectDrawSurface methods (almost) ***/\n#define IDirectDrawSurface2_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)\n#define IDirectDrawSurface2_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)\n#define IDirectDrawSurface2_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)\n#define IDirectDrawSurface2_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)\n#define IDirectDrawSurface2_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)\n#define IDirectDrawSurface2_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)\n#define IDirectDrawSurface2_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)\n#define IDirectDrawSurface2_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)\n#define IDirectDrawSurface2_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)\n#define IDirectDrawSurface2_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)\n#define IDirectDrawSurface2_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)\n#define IDirectDrawSurface2_GetCaps(p,a)                 (p)->lpVtbl->GetCaps(p,a)\n#define IDirectDrawSurface2_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)\n#define IDirectDrawSurface2_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)\n#define IDirectDrawSurface2_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)\n#define IDirectDrawSurface2_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)\n#define IDirectDrawSurface2_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)\n#define IDirectDrawSurface2_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)\n#define IDirectDrawSurface2_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)\n#define IDirectDrawSurface2_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)\n#define IDirectDrawSurface2_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)\n#define IDirectDrawSurface2_IsLost(p)                    (p)->lpVtbl->IsLost(p)\n#define IDirectDrawSurface2_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)\n#define IDirectDrawSurface2_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)\n#define IDirectDrawSurface2_Restore(p)                   (p)->lpVtbl->Restore(p)\n#define IDirectDrawSurface2_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)\n#define IDirectDrawSurface2_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)\n#define IDirectDrawSurface2_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)\n#define IDirectDrawSurface2_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)\n#define IDirectDrawSurface2_Unlock(p,a)                  (p)->lpVtbl->Unlock(p,a)\n#define IDirectDrawSurface2_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)\n#define IDirectDrawSurface2_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)\n#define IDirectDrawSurface2_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)\n/*** IDirectDrawSurface2 methods ***/\n#define IDirectDrawSurface2_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a)\n#define IDirectDrawSurface2_PageLock(p,a)       (p)->lpVtbl->PageLock(p,a)\n#define IDirectDrawSurface2_PageUnlock(p,a)     (p)->lpVtbl->PageUnlock(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirectDrawSurface2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectDrawSurface2_AddRef(p)             (p)->AddRef()\n#define IDirectDrawSurface2_Release(p)            (p)->Release()\n/*** IDirectDrawSurface methods (almost) ***/\n#define IDirectDrawSurface2_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)\n#define IDirectDrawSurface2_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)\n#define IDirectDrawSurface2_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)\n#define IDirectDrawSurface2_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)\n#define IDirectDrawSurface2_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)\n#define IDirectDrawSurface2_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)\n#define IDirectDrawSurface2_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)\n#define IDirectDrawSurface2_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)\n#define IDirectDrawSurface2_Flip(p,a,b)                  (p)->Flip(a,b)\n#define IDirectDrawSurface2_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)\n#define IDirectDrawSurface2_GetBltStatus(p,a)            (p)->GetBltStatus(a)\n#define IDirectDrawSurface2_GetCaps(p,a)                 (p)->GetCaps(a)\n#define IDirectDrawSurface2_GetClipper(p,a)              (p)->GetClipper(a)\n#define IDirectDrawSurface2_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)\n#define IDirectDrawSurface2_GetDC(p,a)                   (p)->GetDC(a)\n#define IDirectDrawSurface2_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)\n#define IDirectDrawSurface2_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)\n#define IDirectDrawSurface2_GetPalette(p,a)              (p)->GetPalette(a)\n#define IDirectDrawSurface2_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)\n#define IDirectDrawSurface2_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)\n#define IDirectDrawSurface2_Initialize(p,a,b)            (p)->Initialize(a,b)\n#define IDirectDrawSurface2_IsLost(p)                    (p)->IsLost()\n#define IDirectDrawSurface2_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)\n#define IDirectDrawSurface2_ReleaseDC(p,a)               (p)->ReleaseDC(a)\n#define IDirectDrawSurface2_Restore(p)                   (p)->Restore()\n#define IDirectDrawSurface2_SetClipper(p,a)              (p)->SetClipper(a)\n#define IDirectDrawSurface2_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)\n#define IDirectDrawSurface2_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)\n#define IDirectDrawSurface2_SetPalette(p,a)              (p)->SetPalette(a)\n#define IDirectDrawSurface2_Unlock(p,a)                  (p)->Unlock(a)\n#define IDirectDrawSurface2_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)\n#define IDirectDrawSurface2_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)\n#define IDirectDrawSurface2_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)\n/*** IDirectDrawSurface2 methods ***/\n#define IDirectDrawSurface2_GetDDInterface(p,a) (p)->GetDDInterface(a)\n#define IDirectDrawSurface2_PageLock(p,a)       (p)->PageLock(a)\n#define IDirectDrawSurface2_PageUnlock(p,a)     (p)->PageUnlock(a)\n#endif\n\n\n/*****************************************************************************\n * IDirectDrawSurface3 interface\n */\n/* Cannot inherit from IDirectDrawSurface2 because the LPDIRECTDRAWSURFACE2 parameters\n * have been converted to LPDIRECTDRAWSURFACE3.\n */\n#define INTERFACE IDirectDrawSurface3\nDECLARE_INTERFACE_(IDirectDrawSurface3,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectDrawSurface3 methods ***/\n    STDMETHOD(AddAttachedSurface)(THIS_ IDirectDrawSurface3 *attachment) PURE;\n    STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE;\n    STDMETHOD(Blt)(THIS_ RECT *dst_rest, IDirectDrawSurface3 *src_surface, RECT *src_rect,\n            DWORD flags, DDBLTFX *fx) PURE;\n    STDMETHOD(BltBatch)(THIS_ DDBLTBATCH *batch, DWORD count, DWORD flags) PURE;\n    STDMETHOD(BltFast)(THIS_ DWORD x, DWORD y, IDirectDrawSurface3 *src_surface,\n            RECT *src_rect, DWORD flags) PURE;\n    STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD flags, IDirectDrawSurface3 *attachment) PURE;\n    STDMETHOD(EnumAttachedSurfaces)(THIS_ void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;\n    STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD flags, void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;\n    STDMETHOD(Flip)(THIS_ IDirectDrawSurface3 *dst_surface, DWORD flags) PURE;\n    STDMETHOD(GetAttachedSurface)(THIS_ DDSCAPS *caps, IDirectDrawSurface3 **attachment) PURE;\n    STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(GetCaps)(THIS_ DDSCAPS *caps) PURE;\n    STDMETHOD(GetClipper)(THIS_ IDirectDrawClipper **clipper) PURE;\n    STDMETHOD(GetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;\n    STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE;\n    STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE;\n    STDMETHOD(GetPalette)(THIS_ IDirectDrawPalette **palette) PURE;\n    STDMETHOD(GetPixelFormat)(THIS_ DDPIXELFORMAT *format) PURE;\n    STDMETHOD(GetSurfaceDesc)(THIS_ DDSURFACEDESC *surface_desc) PURE;\n    STDMETHOD(Initialize)(THIS_ IDirectDraw *ddraw, DDSURFACEDESC *surface_desc) PURE;\n    STDMETHOD(IsLost)(THIS) PURE;\n    STDMETHOD(Lock)(THIS_ RECT *rect, DDSURFACEDESC *surface_desc, DWORD flags, HANDLE event) PURE;\n    STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE;\n    STDMETHOD(Restore)(THIS) PURE;\n    STDMETHOD(SetClipper)(THIS_ IDirectDrawClipper *clipper) PURE;\n    STDMETHOD(SetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;\n    STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE;\n    STDMETHOD(SetPalette)(THIS_ IDirectDrawPalette *palette) PURE;\n    STDMETHOD(Unlock)(THIS_ void *data) PURE;\n    STDMETHOD(UpdateOverlay)(THIS_ RECT *src_rect, IDirectDrawSurface3 *dst_surface, RECT *dst_rect,\n            DWORD flags, DDOVERLAYFX *fx) PURE;\n    STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD flags, IDirectDrawSurface3 *reference_surface) PURE;\n    /* added in v2 */\n    STDMETHOD(GetDDInterface)(THIS_ void **ddraw) PURE;\n    STDMETHOD(PageLock)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(PageUnlock)(THIS_ DWORD dwFlags) PURE;\n    /* added in v3 */\n    STDMETHOD(SetSurfaceDesc)(THIS_ DDSURFACEDESC *surface_desc, DWORD flags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectDrawSurface3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectDrawSurface3_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectDrawSurface3_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectDrawSurface methods (almost) ***/\n#define IDirectDrawSurface3_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)\n#define IDirectDrawSurface3_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)\n#define IDirectDrawSurface3_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)\n#define IDirectDrawSurface3_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)\n#define IDirectDrawSurface3_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)\n#define IDirectDrawSurface3_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)\n#define IDirectDrawSurface3_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)\n#define IDirectDrawSurface3_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)\n#define IDirectDrawSurface3_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)\n#define IDirectDrawSurface3_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)\n#define IDirectDrawSurface3_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)\n#define IDirectDrawSurface3_GetCaps(p,a)                 (p)->lpVtbl->GetCaps(p,a)\n#define IDirectDrawSurface3_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)\n#define IDirectDrawSurface3_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)\n#define IDirectDrawSurface3_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)\n#define IDirectDrawSurface3_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)\n#define IDirectDrawSurface3_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)\n#define IDirectDrawSurface3_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)\n#define IDirectDrawSurface3_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)\n#define IDirectDrawSurface3_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)\n#define IDirectDrawSurface3_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)\n#define IDirectDrawSurface3_IsLost(p)                    (p)->lpVtbl->IsLost(p)\n#define IDirectDrawSurface3_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)\n#define IDirectDrawSurface3_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)\n#define IDirectDrawSurface3_Restore(p)                   (p)->lpVtbl->Restore(p)\n#define IDirectDrawSurface3_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)\n#define IDirectDrawSurface3_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)\n#define IDirectDrawSurface3_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)\n#define IDirectDrawSurface3_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)\n#define IDirectDrawSurface3_Unlock(p,a)                  (p)->lpVtbl->Unlock(p,a)\n#define IDirectDrawSurface3_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)\n#define IDirectDrawSurface3_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)\n#define IDirectDrawSurface3_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)\n/*** IDirectDrawSurface2 methods ***/\n#define IDirectDrawSurface3_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a)\n#define IDirectDrawSurface3_PageLock(p,a)       (p)->lpVtbl->PageLock(p,a)\n#define IDirectDrawSurface3_PageUnlock(p,a)     (p)->lpVtbl->PageUnlock(p,a)\n/*** IDirectDrawSurface3 methods ***/\n#define IDirectDrawSurface3_SetSurfaceDesc(p,a,b) (p)->lpVtbl->SetSurfaceDesc(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirectDrawSurface3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectDrawSurface3_AddRef(p)             (p)->AddRef()\n#define IDirectDrawSurface3_Release(p)            (p)->Release()\n/*** IDirectDrawSurface methods (almost) ***/\n#define IDirectDrawSurface3_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)\n#define IDirectDrawSurface3_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)\n#define IDirectDrawSurface3_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)\n#define IDirectDrawSurface3_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)\n#define IDirectDrawSurface3_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)\n#define IDirectDrawSurface3_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)\n#define IDirectDrawSurface3_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)\n#define IDirectDrawSurface3_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)\n#define IDirectDrawSurface3_Flip(p,a,b)                  (p)->Flip(a,b)\n#define IDirectDrawSurface3_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)\n#define IDirectDrawSurface3_GetBltStatus(p,a)            (p)->GetBltStatus(a)\n#define IDirectDrawSurface3_GetCaps(p,a)                 (p)->GetCaps(a)\n#define IDirectDrawSurface3_GetClipper(p,a)              (p)->GetClipper(a)\n#define IDirectDrawSurface3_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)\n#define IDirectDrawSurface3_GetDC(p,a)                   (p)->GetDC(a)\n#define IDirectDrawSurface3_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)\n#define IDirectDrawSurface3_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)\n#define IDirectDrawSurface3_GetPalette(p,a)              (p)->GetPalette(a)\n#define IDirectDrawSurface3_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)\n#define IDirectDrawSurface3_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)\n#define IDirectDrawSurface3_Initialize(p,a,b)            (p)->Initialize(a,b)\n#define IDirectDrawSurface3_IsLost(p)                    (p)->IsLost()\n#define IDirectDrawSurface3_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)\n#define IDirectDrawSurface3_ReleaseDC(p,a)               (p)->ReleaseDC(a)\n#define IDirectDrawSurface3_Restore(p)                   (p)->Restore()\n#define IDirectDrawSurface3_SetClipper(p,a)              (p)->SetClipper(a)\n#define IDirectDrawSurface3_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)\n#define IDirectDrawSurface3_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)\n#define IDirectDrawSurface3_SetPalette(p,a)              (p)->SetPalette(a)\n#define IDirectDrawSurface3_Unlock(p,a)                  (p)->Unlock(a)\n#define IDirectDrawSurface3_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)\n#define IDirectDrawSurface3_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)\n#define IDirectDrawSurface3_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)\n/*** IDirectDrawSurface2 methods ***/\n#define IDirectDrawSurface3_GetDDInterface(p,a) (p)->GetDDInterface(a)\n#define IDirectDrawSurface3_PageLock(p,a)       (p)->PageLock(a)\n#define IDirectDrawSurface3_PageUnlock(p,a)     (p)->PageUnlock(a)\n/*** IDirectDrawSurface3 methods ***/\n#define IDirectDrawSurface3_SetSurfaceDesc(p,a,b) (p)->SetSurfaceDesc(a,b)\n#endif\n\n\n/*****************************************************************************\n * IDirectDrawSurface4 interface\n */\n/* Cannot inherit from IDirectDrawSurface2 because DDSCAPS changed to DDSCAPS2.\n */\n#define INTERFACE IDirectDrawSurface4\nDECLARE_INTERFACE_(IDirectDrawSurface4,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectDrawSurface4 methods ***/\n    STDMETHOD(AddAttachedSurface)(THIS_ IDirectDrawSurface4 *attachment) PURE;\n    STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE;\n    STDMETHOD(Blt)(THIS_ RECT *dst_rect, IDirectDrawSurface4 *src_surface, RECT *src_rect,\n            DWORD flags, DDBLTFX *fx) PURE;\n    STDMETHOD(BltBatch)(THIS_ DDBLTBATCH *batch, DWORD count, DWORD flags) PURE;\n    STDMETHOD(BltFast)(THIS_ DWORD x, DWORD y, IDirectDrawSurface4 *src_surface,\n            RECT *src_rect, DWORD flags) PURE;\n    STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD flags, IDirectDrawSurface4 *attachment) PURE;\n    STDMETHOD(EnumAttachedSurfaces)(THIS_ void *ctx, LPDDENUMSURFACESCALLBACK2 cb) PURE;\n    STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD flags, void *ctx, LPDDENUMSURFACESCALLBACK2 cb) PURE;\n    STDMETHOD(Flip)(THIS_ IDirectDrawSurface4 *dst_surface, DWORD flags) PURE;\n    STDMETHOD(GetAttachedSurface)(THIS_ DDSCAPS2 *caps, IDirectDrawSurface4 **attachment) PURE;\n    STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(GetCaps)(THIS_ DDSCAPS2 *caps) PURE;\n    STDMETHOD(GetClipper)(THIS_ IDirectDrawClipper **clipper) PURE;\n    STDMETHOD(GetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;\n    STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE;\n    STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE;\n    STDMETHOD(GetPalette)(THIS_ IDirectDrawPalette **palette) PURE;\n    STDMETHOD(GetPixelFormat)(THIS_ DDPIXELFORMAT *format) PURE;\n    STDMETHOD(GetSurfaceDesc)(THIS_ DDSURFACEDESC2 *surface_desc) PURE;\n    STDMETHOD(Initialize)(THIS_ IDirectDraw *ddraw, DDSURFACEDESC2 *surface_desc) PURE;\n    STDMETHOD(IsLost)(THIS) PURE;\n    STDMETHOD(Lock)(THIS_ RECT *rect, DDSURFACEDESC2 *surface_desc, DWORD flags, HANDLE event) PURE;\n    STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE;\n    STDMETHOD(Restore)(THIS) PURE;\n    STDMETHOD(SetClipper)(THIS_ IDirectDrawClipper *clipper) PURE;\n    STDMETHOD(SetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;\n    STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE;\n    STDMETHOD(SetPalette)(THIS_ IDirectDrawPalette *palette) PURE;\n    STDMETHOD(Unlock)(THIS_ LPRECT lpSurfaceData) PURE;\n    STDMETHOD(UpdateOverlay)(THIS_ RECT *src_rect, IDirectDrawSurface4 *dst_surface, RECT *dst_rect,\n            DWORD flags, DDOVERLAYFX *fx) PURE;\n    STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD flags, IDirectDrawSurface4 *reference_surface) PURE;\n    /* added in v2 */\n    STDMETHOD(GetDDInterface)(THIS_ void **ddraw) PURE;\n    STDMETHOD(PageLock)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(PageUnlock)(THIS_ DWORD dwFlags) PURE;\n    /* added in v3 */\n    STDMETHOD(SetSurfaceDesc)(THIS_ DDSURFACEDESC2 *surface_desc, DWORD flags) PURE;\n    /* added in v4 */\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID tag, void *data, DWORD size, DWORD flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID tag, void *data, DWORD *size) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID tag) PURE;\n    STDMETHOD(GetUniquenessValue)(THIS_ LPDWORD pValue) PURE;\n    STDMETHOD(ChangeUniquenessValue)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectDrawSurface4_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectDrawSurface4_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectDrawSurface4_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectDrawSurface (almost) methods ***/\n#define IDirectDrawSurface4_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)\n#define IDirectDrawSurface4_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)\n#define IDirectDrawSurface4_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)\n#define IDirectDrawSurface4_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)\n#define IDirectDrawSurface4_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)\n#define IDirectDrawSurface4_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)\n#define IDirectDrawSurface4_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)\n#define IDirectDrawSurface4_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)\n#define IDirectDrawSurface4_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)\n#define IDirectDrawSurface4_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)\n#define IDirectDrawSurface4_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)\n#define IDirectDrawSurface4_GetCaps(p,a)                 (p)->lpVtbl->GetCaps(p,a)\n#define IDirectDrawSurface4_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)\n#define IDirectDrawSurface4_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)\n#define IDirectDrawSurface4_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)\n#define IDirectDrawSurface4_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)\n#define IDirectDrawSurface4_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)\n#define IDirectDrawSurface4_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)\n#define IDirectDrawSurface4_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)\n#define IDirectDrawSurface4_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)\n#define IDirectDrawSurface4_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)\n#define IDirectDrawSurface4_IsLost(p)                    (p)->lpVtbl->IsLost(p)\n#define IDirectDrawSurface4_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)\n#define IDirectDrawSurface4_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)\n#define IDirectDrawSurface4_Restore(p)                   (p)->lpVtbl->Restore(p)\n#define IDirectDrawSurface4_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)\n#define IDirectDrawSurface4_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)\n#define IDirectDrawSurface4_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)\n#define IDirectDrawSurface4_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)\n#define IDirectDrawSurface4_Unlock(p,a)                  (p)->lpVtbl->Unlock(p,a)\n#define IDirectDrawSurface4_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)\n#define IDirectDrawSurface4_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)\n#define IDirectDrawSurface4_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)\n/*** IDirectDrawSurface2 methods ***/\n#define IDirectDrawSurface4_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a)\n#define IDirectDrawSurface4_PageLock(p,a)       (p)->lpVtbl->PageLock(p,a)\n#define IDirectDrawSurface4_PageUnlock(p,a)     (p)->lpVtbl->PageUnlock(p,a)\n/*** IDirectDrawSurface3 methods ***/\n#define IDirectDrawSurface4_SetSurfaceDesc(p,a,b) (p)->lpVtbl->SetSurfaceDesc(p,a,b)\n/*** IDirectDrawSurface4 methods ***/\n#define IDirectDrawSurface4_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirectDrawSurface4_GetPrivateData(p,a,b,c)   (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirectDrawSurface4_FreePrivateData(p,a)      (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirectDrawSurface4_GetUniquenessValue(p,a)   (p)->lpVtbl->GetUniquenessValue(p,a)\n#define IDirectDrawSurface4_ChangeUniquenessValue(p)  (p)->lpVtbl->ChangeUniquenessValue(p)\n#else\n/*** IUnknown methods ***/\n#define IDirectDrawSurface4_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectDrawSurface4_AddRef(p)             (p)->AddRef()\n#define IDirectDrawSurface4_Release(p)            (p)->Release()\n/*** IDirectDrawSurface (almost) methods ***/\n#define IDirectDrawSurface4_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)\n#define IDirectDrawSurface4_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)\n#define IDirectDrawSurface4_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)\n#define IDirectDrawSurface4_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)\n#define IDirectDrawSurface4_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)\n#define IDirectDrawSurface4_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)\n#define IDirectDrawSurface4_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)\n#define IDirectDrawSurface4_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)\n#define IDirectDrawSurface4_Flip(p,a,b)                  (p)->Flip(a,b)\n#define IDirectDrawSurface4_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)\n#define IDirectDrawSurface4_GetBltStatus(p,a)            (p)->GetBltStatus(a)\n#define IDirectDrawSurface4_GetCaps(p,a)                 (p)->GetCaps(a)\n#define IDirectDrawSurface4_GetClipper(p,a)              (p)->GetClipper(a)\n#define IDirectDrawSurface4_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)\n#define IDirectDrawSurface4_GetDC(p,a)                   (p)->GetDC(a)\n#define IDirectDrawSurface4_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)\n#define IDirectDrawSurface4_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)\n#define IDirectDrawSurface4_GetPalette(p,a)              (p)->GetPalette(a)\n#define IDirectDrawSurface4_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)\n#define IDirectDrawSurface4_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)\n#define IDirectDrawSurface4_Initialize(p,a,b)            (p)->Initialize(a,b)\n#define IDirectDrawSurface4_IsLost(p)                    (p)->IsLost()\n#define IDirectDrawSurface4_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)\n#define IDirectDrawSurface4_ReleaseDC(p,a)               (p)->ReleaseDC(a)\n#define IDirectDrawSurface4_Restore(p)                   (p)->Restore()\n#define IDirectDrawSurface4_SetClipper(p,a)              (p)->SetClipper(a)\n#define IDirectDrawSurface4_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)\n#define IDirectDrawSurface4_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)\n#define IDirectDrawSurface4_SetPalette(p,a)              (p)->SetPalette(a)\n#define IDirectDrawSurface4_Unlock(p,a)                  (p)->Unlock(a)\n#define IDirectDrawSurface4_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)\n#define IDirectDrawSurface4_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)\n#define IDirectDrawSurface4_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)\n/*** IDirectDrawSurface2 methods ***/\n#define IDirectDrawSurface4_GetDDInterface(p,a) (p)->GetDDInterface(a)\n#define IDirectDrawSurface4_PageLock(p,a)       (p)->PageLock(a)\n#define IDirectDrawSurface4_PageUnlock(p,a)     (p)->PageUnlock(a)\n/*** IDirectDrawSurface3 methods ***/\n#define IDirectDrawSurface4_SetSurfaceDesc(p,a,b) (p)->SetSurfaceDesc(a,b)\n/*** IDirectDrawSurface4 methods ***/\n#define IDirectDrawSurface4_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)\n#define IDirectDrawSurface4_GetPrivateData(p,a,b,c)   (p)->GetPrivateData(a,b,c)\n#define IDirectDrawSurface4_FreePrivateData(p,a)      (p)->FreePrivateData(a)\n#define IDirectDrawSurface4_GetUniquenessValue(p,a)   (p)->GetUniquenessValue(a)\n#define IDirectDrawSurface4_ChangeUniquenessValue(p)  (p)->ChangeUniquenessValue()\n#endif\n\n\n/*****************************************************************************\n * IDirectDrawSurface7 interface\n */\n#define INTERFACE IDirectDrawSurface7\nDECLARE_INTERFACE_(IDirectDrawSurface7,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectDrawSurface7 methods ***/\n    STDMETHOD(AddAttachedSurface)(THIS_ IDirectDrawSurface7 *attachment) PURE;\n    STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE;\n    STDMETHOD(Blt)(THIS_ RECT *dst_rect, IDirectDrawSurface7 *src_surface, RECT *src_rect,\n            DWORD flags, DDBLTFX *fx) PURE;\n    STDMETHOD(BltBatch)(THIS_ DDBLTBATCH *batch, DWORD count, DWORD flags) PURE;\n    STDMETHOD(BltFast)(THIS_ DWORD x, DWORD y, IDirectDrawSurface7 *src_surface,\n            RECT *src_rect, DWORD flags) PURE;\n    STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD flags, IDirectDrawSurface7 *attachment) PURE;\n    STDMETHOD(EnumAttachedSurfaces)(THIS_ void *ctx, LPDDENUMSURFACESCALLBACK7 cb) PURE;\n    STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD flags, void *ctx, LPDDENUMSURFACESCALLBACK7 cb) PURE;\n    STDMETHOD(Flip)(THIS_ IDirectDrawSurface7 *dst_surface, DWORD flags) PURE;\n    STDMETHOD(GetAttachedSurface)(THIS_ DDSCAPS2 *caps, IDirectDrawSurface7 **attachment) PURE;\n    STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(GetCaps)(THIS_ DDSCAPS2 *caps) PURE;\n    STDMETHOD(GetClipper)(THIS_ IDirectDrawClipper **clipper) PURE;\n    STDMETHOD(GetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;\n    STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE;\n    STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE;\n    STDMETHOD(GetPalette)(THIS_ IDirectDrawPalette **palette) PURE;\n    STDMETHOD(GetPixelFormat)(THIS_ DDPIXELFORMAT *format) PURE;\n    STDMETHOD(GetSurfaceDesc)(THIS_ DDSURFACEDESC2 *surface_desc) PURE;\n    STDMETHOD(Initialize)(THIS_ IDirectDraw *ddraw, DDSURFACEDESC2 *surface_desc) PURE;\n    STDMETHOD(IsLost)(THIS) PURE;\n    STDMETHOD(Lock)(THIS_ RECT *rect, DDSURFACEDESC2 *surface_desc, DWORD flags, HANDLE event) PURE;\n    STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE;\n    STDMETHOD(Restore)(THIS) PURE;\n    STDMETHOD(SetClipper)(THIS_ IDirectDrawClipper *clipper) PURE;\n    STDMETHOD(SetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;\n    STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE;\n    STDMETHOD(SetPalette)(THIS_ IDirectDrawPalette *palette) PURE;\n    STDMETHOD(Unlock)(THIS_ LPRECT lpSurfaceData) PURE;\n    STDMETHOD(UpdateOverlay)(THIS_ RECT *src_rect, IDirectDrawSurface7 *dst_surface, RECT *dst_rect,\n            DWORD flags, DDOVERLAYFX *fx) PURE;\n    STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD flags, IDirectDrawSurface7 *reference_surface) PURE;\n    /* added in v2 */\n    STDMETHOD(GetDDInterface)(THIS_ void **ddraw) PURE;\n    STDMETHOD(PageLock)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(PageUnlock)(THIS_ DWORD dwFlags) PURE;\n    /* added in v3 */\n    STDMETHOD(SetSurfaceDesc)(THIS_ DDSURFACEDESC2 *surface_desc, DWORD flags) PURE;\n    /* added in v4 */\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID tag, void *data, DWORD size, DWORD flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID tag, void *data, DWORD *size) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID tag) PURE;\n    STDMETHOD(GetUniquenessValue)(THIS_ LPDWORD pValue) PURE;\n    STDMETHOD(ChangeUniquenessValue)(THIS) PURE;\n    /* added in v7 */\n    STDMETHOD(SetPriority)(THIS_ DWORD prio) PURE;\n    STDMETHOD(GetPriority)(THIS_ LPDWORD prio) PURE;\n    STDMETHOD(SetLOD)(THIS_ DWORD lod) PURE;\n    STDMETHOD(GetLOD)(THIS_ LPDWORD lod) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectDrawSurface7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectDrawSurface7_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectDrawSurface7_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectDrawSurface (almost) methods ***/\n#define IDirectDrawSurface7_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)\n#define IDirectDrawSurface7_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)\n#define IDirectDrawSurface7_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)\n#define IDirectDrawSurface7_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)\n#define IDirectDrawSurface7_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)\n#define IDirectDrawSurface7_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)\n#define IDirectDrawSurface7_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)\n#define IDirectDrawSurface7_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)\n#define IDirectDrawSurface7_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)\n#define IDirectDrawSurface7_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)\n#define IDirectDrawSurface7_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)\n#define IDirectDrawSurface7_GetCaps(p,a)                 (p)->lpVtbl->GetCaps(p,a)\n#define IDirectDrawSurface7_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)\n#define IDirectDrawSurface7_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)\n#define IDirectDrawSurface7_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)\n#define IDirectDrawSurface7_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)\n#define IDirectDrawSurface7_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)\n#define IDirectDrawSurface7_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)\n#define IDirectDrawSurface7_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)\n#define IDirectDrawSurface7_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)\n#define IDirectDrawSurface7_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)\n#define IDirectDrawSurface7_IsLost(p)                    (p)->lpVtbl->IsLost(p)\n#define IDirectDrawSurface7_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)\n#define IDirectDrawSurface7_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)\n#define IDirectDrawSurface7_Restore(p)                   (p)->lpVtbl->Restore(p)\n#define IDirectDrawSurface7_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)\n#define IDirectDrawSurface7_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)\n#define IDirectDrawSurface7_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)\n#define IDirectDrawSurface7_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)\n#define IDirectDrawSurface7_Unlock(p,a)                  (p)->lpVtbl->Unlock(p,a)\n#define IDirectDrawSurface7_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)\n#define IDirectDrawSurface7_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)\n#define IDirectDrawSurface7_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)\n/*** IDirectDrawSurface2 methods ***/\n#define IDirectDrawSurface7_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a)\n#define IDirectDrawSurface7_PageLock(p,a)       (p)->lpVtbl->PageLock(p,a)\n#define IDirectDrawSurface7_PageUnlock(p,a)     (p)->lpVtbl->PageUnlock(p,a)\n/*** IDirectDrawSurface3 methods ***/\n#define IDirectDrawSurface7_SetSurfaceDesc(p,a,b) (p)->lpVtbl->SetSurfaceDesc(p,a,b)\n/*** IDirectDrawSurface4 methods ***/\n#define IDirectDrawSurface7_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirectDrawSurface7_GetPrivateData(p,a,b,c)   (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirectDrawSurface7_FreePrivateData(p,a)      (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirectDrawSurface7_GetUniquenessValue(p,a)   (p)->lpVtbl->GetUniquenessValue(p,a)\n#define IDirectDrawSurface7_ChangeUniquenessValue(p)  (p)->lpVtbl->ChangeUniquenessValue(p)\n/*** IDirectDrawSurface7 methods ***/\n#define IDirectDrawSurface7_SetPriority(p,a)          (p)->lpVtbl->SetPriority(p,a)\n#define IDirectDrawSurface7_GetPriority(p,a)          (p)->lpVtbl->GetPriority(p,a)\n#define IDirectDrawSurface7_SetLOD(p,a)               (p)->lpVtbl->SetLOD(p,a)\n#define IDirectDrawSurface7_GetLOD(p,a)               (p)->lpVtbl->GetLOD(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirectDrawSurface7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectDrawSurface7_AddRef(p)             (p)->AddRef()\n#define IDirectDrawSurface7_Release(p)            (p)->Release()\n/*** IDirectDrawSurface (almost) methods ***/\n#define IDirectDrawSurface7_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)\n#define IDirectDrawSurface7_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)\n#define IDirectDrawSurface7_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)\n#define IDirectDrawSurface7_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)\n#define IDirectDrawSurface7_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)\n#define IDirectDrawSurface7_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)\n#define IDirectDrawSurface7_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)\n#define IDirectDrawSurface7_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)\n#define IDirectDrawSurface7_Flip(p,a,b)                  (p)->Flip(a,b)\n#define IDirectDrawSurface7_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)\n#define IDirectDrawSurface7_GetBltStatus(p,a)            (p)->GetBltStatus(a)\n#define IDirectDrawSurface7_GetCaps(p,a)                 (p)->GetCaps(a)\n#define IDirectDrawSurface7_GetClipper(p,a)              (p)->GetClipper(a)\n#define IDirectDrawSurface7_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)\n#define IDirectDrawSurface7_GetDC(p,a)                   (p)->GetDC(a)\n#define IDirectDrawSurface7_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)\n#define IDirectDrawSurface7_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)\n#define IDirectDrawSurface7_GetPalette(p,a)              (p)->GetPalette(a)\n#define IDirectDrawSurface7_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)\n#define IDirectDrawSurface7_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)\n#define IDirectDrawSurface7_Initialize(p,a,b)            (p)->Initialize(a,b)\n#define IDirectDrawSurface7_IsLost(p)                    (p)->IsLost()\n#define IDirectDrawSurface7_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)\n#define IDirectDrawSurface7_ReleaseDC(p,a)               (p)->ReleaseDC(a)\n#define IDirectDrawSurface7_Restore(p)                   (p)->Restore()\n#define IDirectDrawSurface7_SetClipper(p,a)              (p)->SetClipper(a)\n#define IDirectDrawSurface7_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)\n#define IDirectDrawSurface7_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)\n#define IDirectDrawSurface7_SetPalette(p,a)              (p)->SetPalette(a)\n#define IDirectDrawSurface7_Unlock(p,a)                  (p)->Unlock(a)\n#define IDirectDrawSurface7_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)\n#define IDirectDrawSurface7_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)\n#define IDirectDrawSurface7_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)\n/*** IDirectDrawSurface2 methods ***/\n#define IDirectDrawSurface7_GetDDInterface(p,a) (p)->GetDDInterface(a)\n#define IDirectDrawSurface7_PageLock(p,a)       (p)->PageLock(a)\n#define IDirectDrawSurface7_PageUnlock(p,a)     (p)->PageUnlock(a)\n/*** IDirectDrawSurface3 methods ***/\n#define IDirectDrawSurface7_SetSurfaceDesc(p,a,b) (p)->SetSurfaceDesc(a,b)\n/*** IDirectDrawSurface4 methods ***/\n#define IDirectDrawSurface7_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)\n#define IDirectDrawSurface7_GetPrivateData(p,a,b,c)   (p)->GetPrivateData(a,b,c)\n#define IDirectDrawSurface7_FreePrivateData(p,a)      (p)->FreePrivateData(a)\n#define IDirectDrawSurface7_GetUniquenessValue(p,a)   (p)->GetUniquenessValue(a)\n#define IDirectDrawSurface7_ChangeUniquenessValue(p)  (p)->ChangeUniquenessValue()\n/*** IDirectDrawSurface7 methods ***/\n#define IDirectDrawSurface7_SetPriority(p,a)          (p)->SetPriority(a)\n#define IDirectDrawSurface7_GetPriority(p,a)          (p)->GetPriority(a)\n#define IDirectDrawSurface7_SetLOD(p,a)               (p)->SetLOD(a)\n#define IDirectDrawSurface7_GetLOD(p,a)               (p)->GetLOD(a)\n#endif\n\n/*****************************************************************************\n * IDirectDrawColorControl interface\n */\n#define INTERFACE IDirectDrawColorControl\nDECLARE_INTERFACE_(IDirectDrawColorControl,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectDrawColorControl methods ***/\n    STDMETHOD(GetColorControls)(THIS_ DDCOLORCONTROL *color_control) PURE;\n    STDMETHOD(SetColorControls)(THIS_ DDCOLORCONTROL *color_control) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectDrawColorControl_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectDrawColorControl_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectDrawColorControl_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectDrawColorControl methods ***/\n#define IDirectDrawColorControl_GetColorControls(p,a) (p)->lpVtbl->GetColorControls(p,a)\n#define IDirectDrawColorControl_SetColorControls(p,a) (p)->lpVtbl->SetColorControls(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirectDrawColorControl_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectDrawColorControl_AddRef(p)             (p)->AddRef()\n#define IDirectDrawColorControl_Release(p)            (p)->Release()\n/*** IDirectDrawColorControl methods ***/\n#define IDirectDrawColorControl_GetColorControls(p,a) (p)->GetColorControls(a)\n#define IDirectDrawColorControl_SetColorControls(p,a) (p)->SetColorControls(a)\n#endif\n\n/*****************************************************************************\n * IDirectDrawGammaControl interface\n */\n#define INTERFACE IDirectDrawGammaControl\nDECLARE_INTERFACE_(IDirectDrawGammaControl,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectDrawGammaControl methods ***/\n    STDMETHOD(GetGammaRamp)(THIS_ DWORD flags, DDGAMMARAMP *gamma_ramp) PURE;\n    STDMETHOD(SetGammaRamp)(THIS_ DWORD flags, DDGAMMARAMP *gamma_ramp) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectDrawGammaControl_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectDrawGammaControl_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectDrawGammaControl_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectDrawGammaControl methods ***/\n#define IDirectDrawGammaControl_GetGammaRamp(p,a,b)   (p)->lpVtbl->GetGammaRamp(p,a,b)\n#define IDirectDrawGammaControl_SetGammaRamp(p,a,b)   (p)->lpVtbl->SetGammaRamp(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirectDrawGammaControl_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectDrawGammaControl_AddRef(p)             (p)->AddRef()\n#define IDirectDrawGammaControl_Release(p)            (p)->Release()\n/*** IDirectDrawGammaControl methods ***/\n#define IDirectDrawGammaControl_GetGammaRamp(p,a,b)   (p)->GetGammaRamp(a,b)\n#define IDirectDrawGammaControl_SetGammaRamp(p,a,b)   (p)->SetGammaRamp(a,b)\n#endif\n\n\nHRESULT WINAPI DirectDrawCreate(GUID *driver_guid, IDirectDraw **ddraw, IUnknown *outer);\nHRESULT WINAPI DirectDrawCreateEx(GUID *driver_guid, void **ddraw, REFIID interface_iid, IUnknown *outer);\nHRESULT WINAPI DirectDrawCreateClipper(DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer);\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif /* __DDRAW_INCLUDED__ */\n"
  },
  {
    "path": "wine/windows/ddrawgdi.h",
    "content": "/*\n * Ddrawgdi definitions\n *\n * Copyright (C) 2009 Louis Lenders\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DDRAWGDI_H\n#define __WINE_DDRAWGDI_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define DdQueryDisplaySettingsUniqueness    GdiEntry13\n\nULONG APIENTRY DdQueryDisplaySettingsUniqueness(void);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_DDRAWGDI_H */\n"
  },
  {
    "path": "wine/windows/ddrawi.h",
    "content": "/*\n * DirectDraw driver interface\n * (DirectX 7 version)\n *\n * Copyright (C) 2001 Ove Kaaven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __DDRAWI_INCLUDED__\n#define __DDRAWI_INCLUDED__\n\n#include <ddraw.h>\n#include <dciddi.h> /* the DD HAL is layered onto DCI escapes */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct _DDVIDEOPORTCAPS *LPDDVIDEOPORTCAPS; /* should be in dvp.h */\ntypedef struct _DDKERNELCAPS *LPDDKERNELCAPS; /* should be in ddkernel.h */\ntypedef struct _VMEMHEAP *LPVMEMHEAP; /* should be in dmemmgr.h */\n\n#define DDAPI WINAPI\n\n/* the DirectDraw versions */\n#define DD_VERSION\t\t0x0200 /* compatibility version */\n#define DD_RUNTIME_VERSION\t0x0700 /* actual version */\n\n/* the HAL version returned from QUERYESCSUPPORT - DCICOMMAND */\n#define DD_HAL_VERSION\t0x0100\n\n/* more DCICOMMAND escapes */\n#define DDCREATEDRIVEROBJECT\t10\n#define DDGET32BITDRIVERNAME\t11\n#define DDNEWCALLBACKFNS\t12\n#define DDVERSIONINFO\t\t13\n\n#define MAX_DRIVER_NAME\t\tCCHDEVICENAME\n\n/*****************************************************************************\n * Initialization stuff\n */\ntypedef struct {\n    char szName[260];\n    char szEntryPoint[64];\n    DWORD dwContext;\n} DD32BITDRIVERDATA,*LPDD32BITDRIVERDATA;\n\ntypedef struct {\n    DWORD dwHALVersion;\n    ULONG_PTR dwReserved1;\n    ULONG_PTR dwReserved2;\n} DDVERSIONDATA,*LPDDVERSIONDATA;\n\ntypedef DWORD (PASCAL *LPDD32BITDRIVERINIT)(DWORD dwContext);\n\n/* pointer to video memory */\ntypedef ULONG_PTR FLATPTR;\n\n/* predeclare some structures */\ntypedef struct _DDHALINFO *LPDDHALINFO;\ntypedef struct _DDRAWI_DIRECTDRAW_INT *LPDDRAWI_DIRECTDRAW_INT;\ntypedef struct _DDRAWI_DIRECTDRAW_LCL *LPDDRAWI_DIRECTDRAW_LCL;\ntypedef struct _DDRAWI_DIRECTDRAW_GBL *LPDDRAWI_DIRECTDRAW_GBL;\ntypedef struct _DDRAWI_DDRAWSURFACE_INT *LPDDRAWI_DDRAWSURFACE_INT;\ntypedef struct _DDRAWI_DDRAWSURFACE_LCL *LPDDRAWI_DDRAWSURFACE_LCL;\ntypedef struct _DDRAWI_DDRAWSURFACE_GBL *LPDDRAWI_DDRAWSURFACE_GBL;\ntypedef struct _DDRAWI_DDRAWSURFACE_MORE *LPDDRAWI_DDRAWSURFACE_MORE;\ntypedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE *LPDDRAWI_DDRAWSURFACE_GBL_MORE;\ntypedef struct _DDRAWI_DDRAWPALETTE_INT *LPDDRAWI_DDRAWPALETTE_INT;\ntypedef struct _DDRAWI_DDRAWPALETTE_LCL *LPDDRAWI_DDRAWPALETTE_LCL;\ntypedef struct _DDRAWI_DDRAWPALETTE_GBL *LPDDRAWI_DDRAWPALETTE_GBL;\ntypedef struct _DDRAWI_DDRAWCLIPPER_INT *LPDDRAWI_DDRAWCLIPPER_INT;\ntypedef struct _DDRAWI_DDRAWCLIPPER_LCL *LPDDRAWI_DDRAWCLIPPER_LCL;\ntypedef struct _DDRAWI_DDRAWCLIPPER_GBL *LPDDRAWI_DDRAWCLIPPER_GBL;\ntypedef struct _DDRAWI_DDVIDEOPORT_INT *LPDDRAWI_DDVIDEOPORT_INT;\ntypedef struct _DDRAWI_DDVIDEOPORT_LCL *LPDDRAWI_DDVIDEOPORT_LCL;\ntypedef struct _DDRAWI_DDMOTIONCOMP_INT *LPDDRAWI_DDMOTIONCOMP_INT;\ntypedef struct _DDRAWI_DDMOTIONCOMP_LCL *LPDDRAWI_DDMOTIONCOMP_LCL;\n\n/* structure GUIDs for GetDriverInfo */\nDEFINE_GUID( GUID_MiscellaneousCallbacks,\t0xEFD60CC0,0x49E7,0x11D0,0x88,0x9D,0x00,0xAA,0x00,0xBB,0xB7,0x6A );\n/* ...videport stuff here... */\nDEFINE_GUID( GUID_D3DCallbacks2,\t\t0x0BA584E1,0x70B6,0x11D0,0x88,0x9D,0x00,0xAA,0x00,0xBB,0xB7,0x6A );\nDEFINE_GUID( GUID_D3DCallbacks3,\t\t0xDDF41230,0xEC0A,0x11D0,0xA9,0xB6,0x00,0xAA,0x00,0xC0,0x99,0x3E );\nDEFINE_GUID( GUID_NonLocalVidMemCaps,\t\t0x86C4FA80,0x8D84,0x11D0,0x94,0xE8,0x00,0xC0,0x4F,0xC3,0x41,0x37 );\n/* ...kernel stuff here... */\nDEFINE_GUID( GUID_D3DExtendedCaps,\t\t0x7DE41F80,0x9D93,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29 );\nDEFINE_GUID( GUID_ZPixelFormats,\t\t0x93869880,0x36CF,0x11D1,0x9B,0x1B,0x00,0xAA,0x00,0xBB,0xB8,0xAE );\nDEFINE_GUID( GUID_DDMoreSurfaceCaps,\t\t0x3B8A0466,0xF269,0x11D1,0x88,0x0B,0x00,0xC0,0x4F,0xD9,0x30,0xC5 );\nDEFINE_GUID( GUID_DDStereoMode,\t\t\t0xF828169C,0xA8E8,0x11D2,0xA1,0xF2,0x00,0xA0,0xC9,0x83,0xEA,0xF6 );\n/* ...more stuff here... */\nDEFINE_GUID(GUID_D3DParseUnknownCommandCallback,0x2E04FFA0,0x98E4,0x11D1,0x8C,0xE1,0x00,0xA0,0xC9,0x06,0x29,0xA8 );\n/* ...motioncomp stuff here... */\nDEFINE_GUID( GUID_Miscellaneous2Callbacks,\t0x406B2F00,0x3E5A,0x11D1,0xB6,0x40,0x00,0xAA,0x00,0xA1,0xF9,0x6A );\n\n/*****************************************************************************\n * driver->ddraw callbacks\n */\ntypedef BOOL    (DDAPI *LPDDHAL_SETINFO)(LPDDHALINFO lpDDHalInfo, BOOL reset);\ntypedef FLATPTR (DDAPI *LPDDHAL_VIDMEMALLOC)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, DWORD dwWidth, DWORD dwHeight);\ntypedef void    (DDAPI *LPDDHAL_VIDMEMFREE)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, FLATPTR fpMem);\n\ntypedef struct {\n    DWORD\t\tdwSize;\n    LPDDHAL_SETINFO\tlpSetInfo;\n    LPDDHAL_VIDMEMALLOC\tlpVidMemAlloc;\n    LPDDHAL_VIDMEMFREE\tlpVidMemFree;\n} DDHALDDRAWFNS,*LPDDHALDDRAWFNS;\n\n/*****************************************************************************\n * mode info structure\n */\ntypedef struct _DDHALMODEINFO {\n    DWORD\tdwWidth;\n    DWORD\tdwHeight;\n    LONG\tlPitch;\n    DWORD\tdwBPP;\n    WORD\twFlags;\n    WORD\twRefreshRate;\n    DWORD\tdwRBitMask;\n    DWORD\tdwGBitMask;\n    DWORD\tdwBBitMask;\n    DWORD\tdwAlphaBitMask;\n} DDHALMODEINFO,*LPDDHALMODEINFO;\n\n#define DDMODEINFO_PALETTIZED\t0x0001\n#define DDMODEINFO_MODEX\t0x0002\n#define DDMODEINFO_UNSUPPORTED\t0x0004\n#define DDMODEINFO_STANDARDVGA\t0x0008\n#define DDMODEINFO_MAXREFRESH\t0x0010\n#define DDMODEINFO_STEREO\t0x0020\n\n/*****************************************************************************\n * video memory info structure\n */\ntypedef struct _VIDMEM {\n    DWORD\tdwFlags;\n    FLATPTR\tfpStart;\n    union {\n\tFLATPTR\t\tfpEnd;\n\tDWORD\t\tdwWidth;\n    } DUMMYUNIONNAME1;\n    DDSCAPS\tddsCaps;\n    DDSCAPS\tddsCapsAlt;\n    union {\n\tLPVMEMHEAP\tlpHeap;\n\tDWORD\t\tdwHeight;\n    } DUMMYUNIONNAME2;\n} VIDMEM,*LPVIDMEM;\n\n#define VIDMEM_ISLINEAR\t\t0x00000001\n#define VIDMEM_ISRECTANGULAR\t0x00000002\n#define VIDMEM_ISHEAP\t\t0x00000004\n#define VIDMEM_ISNONLOCAL\t0x00000008\n#define VIDMEM_ISWC\t\t0x00000010\n#define VIDMEM_ISDISABLED\t0x00000020\n\ntypedef struct _VIDMEMINFO {\n    FLATPTR\t\tfpPrimary;\n    DWORD\t\tdwFlags;\n    DWORD\t\tdwDisplayWidth;\n    DWORD\t\tdwDisplayHeight;\n    LONG\t\tlDisplayPitch;\n    DDPIXELFORMAT\tddpfDisplay;\n    DWORD\t\tdwOffscreenAlign;\n    DWORD\t\tdwOverlayAlign;\n    DWORD\t\tdwTextureAlign;\n    DWORD\t\tdwZBufferAlign;\n    DWORD\t\tdwAlphaAlign;\n    DWORD\t\tdwNumHeaps;\n    LPVIDMEM\t\tpvmList;\n} VIDMEMINFO,*LPVIDMEMINFO;\n\ntypedef struct _HEAPALIAS {\n    FLATPTR\tfpVidMem;\n    LPVOID\tlpAlias;\n    DWORD\tdwAliasSize;\n} HEAPALIAS,*LPHEAPALIAS;\n\ntypedef struct _HEAPALIASINFO {\n    DWORD\tdwRefCnt;\n    DWORD\tdwFlags;\n    DWORD\tdwNumHeaps;\n    LPHEAPALIAS\tlpAliases;\n} HEAPALIASINFO,*LPHEAPALIASINFO;\n\n#define HEAPALIASINFO_MAPPEDREAL\t0x00000001\n#define HEAPALIASINFO_MAPPEDDUMMY\t0x00000002\n\n/*****************************************************************************\n * capabilities structures\n */\ntypedef struct _DDCORECAPS {\n    DWORD\tdwSize;\n    DWORD\tdwCaps;\n    DWORD\tdwCaps2;\n    DWORD\tdwCKeyCaps;\n    DWORD\tdwFXCaps;\n    DWORD\tdwFXAlphaCaps;\n    DWORD\tdwPalCaps;\n    DWORD\tdwSVCaps;\n    DWORD\tdwAlphaBltConstBitDepths;\n    DWORD\tdwAlphaBltPixelBitDepths;\n    DWORD\tdwAlphaBltSurfaceBitDepths;\n    DWORD\tdwAlphaOverlayConstBitDepths;\n    DWORD\tdwAlphaOverlayPixelBitDepths;\n    DWORD\tdwAlphaOverlaySurfaceBitDepths;\n    DWORD\tdwZBufferBitDepths;\n    DWORD\tdwVidMemTotal;\n    DWORD\tdwVidMemFree;\n    DWORD\tdwMaxVisibleOverlays;\n    DWORD\tdwCurrVisibleOverlays;\n    DWORD\tdwNumFourCCCodes;\n    DWORD\tdwAlignBoundarySrc;\n    DWORD\tdwAlignSizeSrc;\n    DWORD\tdwAlignBoundaryDest;\n    DWORD\tdwAlignSizeDest;\n    DWORD\tdwAlignStrideAlign;\n    DWORD\tdwRops[DD_ROP_SPACE];\n    DDSCAPS\tddsCaps;\n    DWORD\tdwMinOverlayStretch;\n    DWORD\tdwMaxOverlayStretch;\n    DWORD\tdwMinLiveVideoStretch;\n    DWORD\tdwMaxLiveVideoStretch;\n    DWORD\tdwMinHwCodecStretch;\n    DWORD\tdwMaxHwCodecStretch;\n    DWORD\tdwReserved1;\n    DWORD\tdwReserved2;\n    DWORD\tdwReserved3;\n    DWORD\tdwSVBCaps;\n    DWORD\tdwSVBCKeyCaps;\n    DWORD\tdwSVBFXCaps;\n    DWORD\tdwSVBRops[DD_ROP_SPACE];\n    DWORD\tdwVSBCaps;\n    DWORD\tdwVSBCKeyCaps;\n    DWORD\tdwVSBFXCaps;\n    DWORD\tdwVSBRops[DD_ROP_SPACE];\n    DWORD\tdwSSBCaps;\n    DWORD\tdwSSBCKeyCaps;\n    DWORD\tdwSSBFXCaps;\n    DWORD\tdwSSBRops[DD_ROP_SPACE];\n    DWORD\tdwMaxVideoPorts;\n    DWORD\tdwCurrVideoPorts;\n    DWORD\tdwSVBCaps2;\n} DDCORECAPS,*LPDDCORECAPS;\n\ntypedef struct _DDNONLOCALVIDMEMCAPS {\n    DWORD\tdwSize;\n    DWORD\tdwNLVBCaps;\n    DWORD\tdwNLVBCaps2;\n    DWORD\tdwNLVBCKeyCaps;\n    DWORD\tdwNLVBFXCaps;\n    DWORD\tdwNLVBRops[DD_ROP_SPACE];\n} DDNONLOCALVIDMEMCAPS,*LPDDNONLOCALVIDMEMCAPS;\n\ntypedef struct _DDSCAPSEX {\n    DWORD\tdwCaps2;\n    DWORD\tdwCaps3;\n    DWORD\tdwCaps4;\n} DDSCAPSEX,*LPDDSCAPSEX;\n\n#define DDSCAPS_EXECUTEBUFFER\tDDSCAPS_RESERVED2\n#define DDSCAPS2_VERTEXBUFFER\tDDSCAPS2_RESERVED1\n#define DDSCAPS2_COMMANDBUFFER\tDDSCAPS2_RESERVED2\n\n/*****************************************************************************\n * ddraw->driver callbacks\n */\n#define DDHAL_DRIVER_NOTHANDLED\t0\n#define DDHAL_DRIVER_HANDLED\t1\n#define DDHAL_DRIVER_NOCKEYHW\t2\n\ntypedef struct _DDHAL_DESTROYDRIVERDATA\t\t*LPDDHAL_DESTROYDRIVERDATA;\ntypedef struct _DDHAL_CREATESURFACEDATA\t\t*LPDDHAL_CREATESURFACEDATA;\ntypedef struct _DDHAL_DRVSETCOLORKEYDATA\t*LPDDHAL_DRVSETCOLORKEYDATA;\ntypedef struct _DDHAL_SETMODEDATA\t\t*LPDDHAL_SETMODEDATA;\ntypedef struct _DDHAL_WAITFORVERTICALBLANKDATA\t*LPDDHAL_WAITFORVERTICALBLANKDATA;\ntypedef struct _DDHAL_CANCREATESURFACEDATA\t*LPDDHAL_CANCREATESURFACEDATA;\ntypedef struct _DDHAL_CREATEPALETTEDATA\t\t*LPDDHAL_CREATEPALETTEDATA;\ntypedef struct _DDHAL_GETSCANLINEDATA\t\t*LPDDHAL_GETSCANLINEDATA;\ntypedef struct _DDHAL_SETEXCLUSIVEMODEDATA\t*LPDDHAL_SETEXCLUSIVEMODEDATA;\ntypedef struct _DDHAL_FLIPTOGDISURFACEDATA\t*LPDDHAL_FLIPTOGDISURFACEDATA;\n\ntypedef DWORD (PASCAL *LPDDHAL_DESTROYDRIVER)\t    (LPDDHAL_DESTROYDRIVERDATA);\ntypedef DWORD (PASCAL *LPDDHAL_CREATESURFACE)\t    (LPDDHAL_CREATESURFACEDATA);\ntypedef DWORD (PASCAL *LPDDHAL_SETCOLORKEY)\t    (LPDDHAL_DRVSETCOLORKEYDATA);\ntypedef DWORD (PASCAL *LPDDHAL_SETMODE)\t\t    (LPDDHAL_SETMODEDATA);\ntypedef DWORD (PASCAL *LPDDHAL_WAITFORVERTICALBLANK)(LPDDHAL_WAITFORVERTICALBLANKDATA);\ntypedef DWORD (PASCAL *LPDDHAL_CANCREATESURFACE)    (LPDDHAL_CANCREATESURFACEDATA );\ntypedef DWORD (PASCAL *LPDDHAL_CREATEPALETTE)\t    (LPDDHAL_CREATEPALETTEDATA);\ntypedef DWORD (PASCAL *LPDDHAL_GETSCANLINE)\t    (LPDDHAL_GETSCANLINEDATA);\ntypedef DWORD (PASCAL *LPDDHAL_SETEXCLUSIVEMODE)    (LPDDHAL_SETEXCLUSIVEMODEDATA);\ntypedef DWORD (PASCAL *LPDDHAL_FLIPTOGDISURFACE)    (LPDDHAL_FLIPTOGDISURFACEDATA);\n\ntypedef struct _DDHAL_DDCALLBACKS {\n    DWORD\t\t\t\tdwSize;\n    DWORD\t\t\t\tdwFlags;\n    LPDDHAL_DESTROYDRIVER\t\tDestroyDriver;\n    LPDDHAL_CREATESURFACE\t\tCreateSurface;\n    LPDDHAL_SETCOLORKEY\t\t\tSetColorKey;\n    LPDDHAL_SETMODE\t\t\tSetMode;\n    LPDDHAL_WAITFORVERTICALBLANK\tWaitForVerticalBlank;\n    LPDDHAL_CANCREATESURFACE\t\tCanCreateSurface;\n    LPDDHAL_CREATEPALETTE\t\tCreatePalette;\n    LPDDHAL_GETSCANLINE\t\t\tGetScanLine;\n    /* DirectX 2 */\n    LPDDHAL_SETEXCLUSIVEMODE\t\tSetExclusiveMode;\n    LPDDHAL_FLIPTOGDISURFACE\t\tFlipToGDISurface;\n} DDHAL_DDCALLBACKS,*LPDDHAL_DDCALLBACKS;\n\ntypedef struct _DDHAL_DESTROYSURFACEDATA\t*LPDDHAL_DESTROYSURFACEDATA;\ntypedef struct _DDHAL_FLIPDATA\t\t\t*LPDDHAL_FLIPDATA;\ntypedef struct _DDHAL_SETCLIPLISTDATA\t\t*LPDDHAL_SETCLIPLISTDATA;\ntypedef struct _DDHAL_LOCKDATA\t\t\t*LPDDHAL_LOCKDATA;\ntypedef struct _DDHAL_UNLOCKDATA\t\t*LPDDHAL_UNLOCKDATA;\ntypedef struct _DDHAL_BLTDATA\t\t\t*LPDDHAL_BLTDATA;\ntypedef struct _DDHAL_SETCOLORKEYDATA\t\t*LPDDHAL_SETCOLORKEYDATA;\ntypedef struct _DDHAL_ADDATTACHEDSURFACEDATA\t*LPDDHAL_ADDATTACHEDSURFACEDATA;\ntypedef struct _DDHAL_GETBLTSTATUSDATA\t\t*LPDDHAL_GETBLTSTATUSDATA;\ntypedef struct _DDHAL_GETFLIPSTATUSDATA\t\t*LPDDHAL_GETFLIPSTATUSDATA;\ntypedef struct _DDHAL_UPDATEOVERLAYDATA\t\t*LPDDHAL_UPDATEOVERLAYDATA;\ntypedef struct _DDHAL_SETOVERLAYPOSITIONDATA\t*LPDDHAL_SETOVERLAYPOSITIONDATA;\ntypedef struct _DDHAL_SETPALETTEDATA\t\t*LPDDHAL_SETPALETTEDATA;\n\ntypedef DWORD (PASCAL *LPDDHALSURFCB_DESTROYSURFACE)\t(LPDDHAL_DESTROYSURFACEDATA);\ntypedef DWORD (PASCAL *LPDDHALSURFCB_FLIP)\t\t(LPDDHAL_FLIPDATA);\ntypedef DWORD (PASCAL *LPDDHALSURFCB_SETCLIPLIST)\t(LPDDHAL_SETCLIPLISTDATA);\ntypedef DWORD (PASCAL *LPDDHALSURFCB_LOCK)\t\t(LPDDHAL_LOCKDATA);\ntypedef DWORD (PASCAL *LPDDHALSURFCB_UNLOCK)\t\t(LPDDHAL_UNLOCKDATA);\ntypedef DWORD (PASCAL *LPDDHALSURFCB_BLT)\t\t(LPDDHAL_BLTDATA);\ntypedef DWORD (PASCAL *LPDDHALSURFCB_SETCOLORKEY)\t(LPDDHAL_SETCOLORKEYDATA);\ntypedef DWORD (PASCAL *LPDDHALSURFCB_ADDATTACHEDSURFACE)(LPDDHAL_ADDATTACHEDSURFACEDATA);\ntypedef DWORD (PASCAL *LPDDHALSURFCB_GETBLTSTATUS)\t(LPDDHAL_GETBLTSTATUSDATA);\ntypedef DWORD (PASCAL *LPDDHALSURFCB_GETFLIPSTATUS)\t(LPDDHAL_GETFLIPSTATUSDATA);\ntypedef DWORD (PASCAL *LPDDHALSURFCB_UPDATEOVERLAY)\t(LPDDHAL_UPDATEOVERLAYDATA);\ntypedef DWORD (PASCAL *LPDDHALSURFCB_SETOVERLAYPOSITION)(LPDDHAL_SETOVERLAYPOSITIONDATA);\ntypedef DWORD (PASCAL *LPDDHALSURFCB_SETPALETTE)\t(LPDDHAL_SETPALETTEDATA);\n\ntypedef struct _DDHAL_DDSURFACECALLBACKS {\n    DWORD\t\t\t\tdwSize;\n    DWORD\t\t\t\tdwFlags;\n    LPDDHALSURFCB_DESTROYSURFACE\tDestroySurface;\n    LPDDHALSURFCB_FLIP\t\t\tFlip;\n    LPDDHALSURFCB_SETCLIPLIST\t\tSetClipList;\n    LPDDHALSURFCB_LOCK\t\t\tLock;\n    LPDDHALSURFCB_UNLOCK\t\tUnlock;\n    LPDDHALSURFCB_BLT\t\t\tBlt;\n    LPDDHALSURFCB_SETCOLORKEY\t\tSetColorKey;\n    LPDDHALSURFCB_ADDATTACHEDSURFACE\tAddAttachedSurface;\n    LPDDHALSURFCB_GETBLTSTATUS\t\tGetBltStatus;\n    LPDDHALSURFCB_GETFLIPSTATUS\t\tGetFlipStatus;\n    LPDDHALSURFCB_UPDATEOVERLAY\t\tUpdateOverlay;\n    LPDDHALSURFCB_SETOVERLAYPOSITION\tSetOverlayPosition;\n    LPVOID\t\t\t\treserved4;\n    LPDDHALSURFCB_SETPALETTE\t\tSetPalette;\n} DDHAL_DDSURFACECALLBACKS,*LPDDHAL_DDSURFACECALLBACKS;\n\ntypedef struct _DDHAL_DESTROYPALETTEDATA\t*LPDDHAL_DESTROYPALETTEDATA;\ntypedef struct _DDHAL_SETENTRIESDATA\t\t*LPDDHAL_SETENTRIESDATA;\n\ntypedef DWORD (PASCAL *LPDDHALPALCB_DESTROYPALETTE)(LPDDHAL_DESTROYPALETTEDATA);\ntypedef DWORD (PASCAL *LPDDHALPALCB_SETENTRIES)    (LPDDHAL_SETENTRIESDATA);\n\ntypedef struct _DDHAL_DDPALETTECALLBACKS {\n    DWORD\t\t\t\tdwSize;\n    DWORD\t\t\t\tdwFlags;\n    LPDDHALPALCB_DESTROYPALETTE\t\tDestroyPalette;\n    LPDDHALPALCB_SETENTRIES\t\tSetEntries;\n} DDHAL_DDPALETTECALLBACKS,*LPDDHAL_DDPALETTECALLBACKS;\n\ntypedef DWORD (PASCAL *LPDDHALEXEBUFCB_CANCREATEEXEBUF)(LPDDHAL_CANCREATESURFACEDATA);\ntypedef DWORD (PASCAL *LPDDHALEXEBUFCB_CREATEEXEBUF)   (LPDDHAL_CREATESURFACEDATA);\ntypedef DWORD (PASCAL *LPDDHALEXEBUFCB_DESTROYEXEBUF)  (LPDDHAL_DESTROYSURFACEDATA);\ntypedef DWORD (PASCAL *LPDDHALEXEBUFCB_LOCKEXEBUF)     (LPDDHAL_LOCKDATA);\ntypedef DWORD (PASCAL *LPDDHALEXEBUFCB_UNLOCKEXEBUF)   (LPDDHAL_UNLOCKDATA);\n\ntypedef struct _DDHAL_DDEXEBUFCALLBACKS {\n    DWORD\t\t\t\tdwSize;\n    DWORD\t\t\t\tdwFlags;\n    LPDDHALEXEBUFCB_CANCREATEEXEBUF\tCanCreateExecuteBuffer;\n    LPDDHALEXEBUFCB_CREATEEXEBUF\tCreateExecuteBuffer;\n    LPDDHALEXEBUFCB_DESTROYEXEBUF\tDestroyExecuteBuffer;\n    LPDDHALEXEBUFCB_LOCKEXEBUF\t\tLockExecuteBuffer;\n    LPDDHALEXEBUFCB_UNLOCKEXEBUF\tUnlockExecuteBuffer;\n} DDHAL_DDEXEBUFCALLBACKS,*LPDDHAL_DDEXEBUFCALLBACKS;\n\ntypedef struct _DDHAL_GETAVAILDRIVERMEMORYDATA\t*LPDDHAL_GETAVAILDRIVERMEMORYDATA;\ntypedef struct _DDHAL_UPDATENONLOCALHEAPDATA\t*LPDDHAL_UPDATENONLOCALHEAPDATA;\ntypedef struct _DDHAL_GETHEAPALIGNMENTDATA\t*LPDDHAL_GETHEAPALIGNMENTDATA;\n\ntypedef DWORD (PASCAL *LPDDHAL_GETAVAILDRIVERMEMORY)(LPDDHAL_GETAVAILDRIVERMEMORYDATA);\ntypedef DWORD (PASCAL *LPDDHAL_UPDATENONLOCALHEAP)  (LPDDHAL_UPDATENONLOCALHEAPDATA);\ntypedef DWORD (PASCAL *LPDDHAL_GETHEAPALIGNMENT)    (LPDDHAL_GETHEAPALIGNMENTDATA);\n\ntypedef struct _DDHAL_DDMISCELLANEOUSCALLBACKS {\n    DWORD\t\t\t\tdwSize;\n    DWORD\t\t\t\tdwFlags;\n    LPDDHAL_GETAVAILDRIVERMEMORY\tGetAvailDriverMemory;\n    LPDDHAL_UPDATENONLOCALHEAP\t\tUpdateNonLocalHeap;\n    LPDDHAL_GETHEAPALIGNMENT\t\tGetHeapAlignment;\n    LPDDHALSURFCB_GETBLTSTATUS\t\tGetSysmemBltStatus;\n} DDHAL_DDMISCELLANEOUSCALLBACKS,*LPDDHAL_DDMISCELLANEOUSCALLBACKS;\n\ntypedef struct _DDHAL_CREATESURFACEEXDATA\t*LPDDHAL_CREATESURFACEEXDATA;\ntypedef struct _DDHAL_GETDRIVERSTATEDATA\t*LPDDHAL_GETDRIVERSTATEDATA;\ntypedef struct _DDHAL_DESTROYDDLOCALDATA\t*LPDDHAL_DESTROYDDLOCALDATA;\n\ntypedef DWORD (PASCAL *LPDDHAL_CREATESURFACEEX)(LPDDHAL_CREATESURFACEEXDATA);\ntypedef DWORD (PASCAL *LPDDHAL_GETDRIVERSTATE) (LPDDHAL_GETDRIVERSTATEDATA);\ntypedef DWORD (PASCAL *LPDDHAL_DESTROYDDLOCAL) (LPDDHAL_DESTROYDDLOCALDATA);\n\ntypedef struct _DDHAL_DDMISCELLANEOUS2CALLBACKS {\n    DWORD\t\t\t\tdwSize;\n    DWORD\t\t\t\tdwFlags;\n    LPVOID\t\t\t\tReserved;\n    LPDDHAL_CREATESURFACEEX\t\tCreateSurfaceEx;\n    LPDDHAL_GETDRIVERSTATE\t\tGetDriverState;\n    LPDDHAL_DESTROYDDLOCAL\t\tDestroyDDLocal;\n} DDHAL_DDMISCELLANEOUS2CALLBACKS,*LPDDHAL_DDMISCELLANEOUS2CALLBACKS;\n\ntypedef HRESULT (WINAPI *LPDDGAMMACALIBRATORPROC)(DDGAMMARAMP *, BYTE *);\n\n/*****************************************************************************\n * driver info structure\n *\n * The HAL is queried for additional callbacks via the GetDriverInfo callback.\n */\ntypedef struct _DDHAL_GETDRIVERINFODATA *LPDDHAL_GETDRIVERINFODATA;\ntypedef DWORD (PASCAL *LPDDHAL_GETDRIVERINFO)(LPDDHAL_GETDRIVERINFODATA);\n\ntypedef struct _DDHALINFO {\n    DWORD\t\t\tdwSize;\n    LPDDHAL_DDCALLBACKS\t\tlpDDCallbacks;\n    LPDDHAL_DDSURFACECALLBACKS\tlpDDSurfaceCallbacks;\n    LPDDHAL_DDPALETTECALLBACKS\tlpDDPaletteCallbacks;\n    VIDMEMINFO\t\t\tvmiData;\n    DDCORECAPS\t\t\tddCaps;\n    DWORD\t\t\tdwMonitorFrequency;\n    LPDDHAL_GETDRIVERINFO\tGetDriverInfo;\n    DWORD\t\t\tdwModeIndex;\n    LPDWORD\t\t\tlpdwFourCC;\n    DWORD\t\t\tdwNumModes;\n    LPDDHALMODEINFO\t\tlpModeInfo;\n    DWORD\t\t\tdwFlags;\n    LPVOID\t\t\tlpPDevice;\n    DWORD\t\t\thInstance;\n    /* DirectX 2 */\n    ULONG_PTR\t\t\tlpD3DGlobalDriverData;\n    ULONG_PTR\t\t\tlpD3DHALCallbacks;\n    LPDDHAL_DDEXEBUFCALLBACKS\tlpDDExeBufCallbacks;\n} DDHALINFO;\n\n#define DDHALINFO_ISPRIMARYDISPLAY\t0x00000001\n#define DDHALINFO_MODEXILLEGAL\t\t0x00000002\n#define DDHALINFO_GETDRIVERINFOSET\t0x00000004\n\n/* where the high-level ddraw implementation stores the callbacks */\ntypedef struct _DDHAL_CALLBACKS {\n    DDHAL_DDCALLBACKS\t\tcbDDCallbacks;\n    DDHAL_DDSURFACECALLBACKS\tcbDDSurfaceCallbacks;\n    DDHAL_DDPALETTECALLBACKS\tcbDDPaletteCallbacks;\n    DDHAL_DDCALLBACKS\t\tHALDD;\n    DDHAL_DDSURFACECALLBACKS\tHALDDSurface;\n    DDHAL_DDPALETTECALLBACKS\tHALDDPalette;\n    DDHAL_DDCALLBACKS\t\tHELDD;\n    DDHAL_DDSURFACECALLBACKS\tHELDDSurface;\n    DDHAL_DDPALETTECALLBACKS\tHELDDPalette;\n    DDHAL_DDEXEBUFCALLBACKS\tcbDDExeBufCallbacks;\n    DDHAL_DDEXEBUFCALLBACKS\tHALDDExeBuf;\n    DDHAL_DDEXEBUFCALLBACKS\tHELDDExeBuf;\n    /* there's more... videoport, colorcontrol, misc, and motion compensation callbacks... */\n} DDHAL_CALLBACKS,*LPDDHAL_CALLBACKS;\n\n/*****************************************************************************\n * parameter structures\n */\ntypedef struct _DDHAL_DESTROYDRIVERDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    HRESULT\t\t\tddRVal;\n    LPDDHAL_DESTROYDRIVER\tDestroyDriver;\n} DDHAL_DESTROYDRIVERDATA;\n\ntypedef struct _DDHAL_SETMODEDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    DWORD\t\t\tdwModeIndex;\n    HRESULT\t\t\tddRVal;\n    LPDDHAL_SETMODE\t\tSetMode;\n    BOOL\t\t\tinexcl;\n    BOOL\t\t\tuseRefreshRate;\n} DDHAL_SETMODEDATA;\n\ntypedef struct _DDHAL_CREATESURFACEDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    DDSURFACEDESC              *lpDDSurfaceDesc;\n    LPDDRAWI_DDRAWSURFACE_LCL *\tlplpSList;\n    DWORD\t\t\tdwSCnt;\n    HRESULT\t\t\tddRVal;\n    LPDDHAL_CREATESURFACE\tCreateSurface;\n} DDHAL_CREATESURFACEDATA;\n\ntypedef struct _DDHAL_CANCREATESURFACEDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    DDSURFACEDESC              *lpDDSurfaceDesc;\n    DWORD\t\t\tbIsDifferentPixelFormat;\n    HRESULT\t\t\tddRVal;\n    LPDDHAL_CANCREATESURFACE\tCanCreateSurface;\n} DDHAL_CANCREATESURFACEDATA;\n\ntypedef struct _DDHAL_CREATEPALETTEDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    LPDDRAWI_DDRAWPALETTE_GBL\tlpDDPalette;\n    LPPALETTEENTRY\t\tlpColorTable;\n    HRESULT\t\t\tddRVal;\n    LPDDHAL_CREATEPALETTE\tCreatePalette;\n    BOOL\t\t\tis_excl;\n} DDHAL_CREATEPALETTEDATA;\n\ntypedef struct _DDHAL_SETEXCLUSIVEMODEDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    DWORD\t\t\tdwEnterExcl;\n    DWORD\t\t\tdwReserved;\n    HRESULT\t\t\tddRVal;\n    LPDDHAL_SETEXCLUSIVEMODE\tSetExclusiveMode;\n} DDHAL_SETEXCLUSIVEMODEDATA;\n\n/* surfaces */\ntypedef struct _DDHAL_DESTROYSURFACEDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpDDSurface;\n    HRESULT\t\t\tddRVal;\n    LPDDHALSURFCB_DESTROYSURFACE DestroySurface;\n} DDHAL_DESTROYSURFACEDATA;\n\ntypedef struct _DDHAL_FLIPDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpSurfCurr;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpSurfTarg;\n    DWORD\t\t\tdwFlags;\n    HRESULT\t\t\tddRVal;\n    LPDDHALSURFCB_FLIP\t\tFlip;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpSurfCurrLeft;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpSurfTargLeft;\n} DDHAL_FLIPDATA;\n\ntypedef struct _DDHAL_LOCKDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpDDSurface;\n    DWORD\t\t\tbHasRect;\n    RECTL\t\t\trArea;\n    LPVOID\t\t\tlpSurfData;\n    HRESULT\t\t\tddRVal;\n    LPDDHALSURFCB_LOCK\t\tLock;\n    DWORD\t\t\tdwFlags;\n} DDHAL_LOCKDATA;\n\ntypedef struct _DDHAL_UNLOCKDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpDDSurface;\n    HRESULT\t\t\tddRVal;\n    LPDDHALSURFCB_UNLOCK\tUnlock;\n} DDHAL_UNLOCKDATA;\n\ntypedef struct _DDHAL_BLTDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpDDDestSurface;\n    RECTL\t\t\trDest;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpDDSrcSurface;\n    RECTL\t\t\trSrc;\n    DWORD\t\t\tdwFlags;\n    DWORD\t\t\tdwROPFlags;\n    DDBLTFX\t\t\tbltFX;\n    HRESULT\t\t\tddRVal;\n    LPDDHALSURFCB_BLT\t\tBlt;\n    BOOL\t\t\tIsClipped;\n    RECTL\t\t\trOrigDest;\n    RECTL\t\t\trOrigSrc;\n    DWORD\t\t\tdwRectCnt;\n    LPRECT\t\t\tprDestRects;\n} DDHAL_BLTDATA;\n\ntypedef struct _DDHAL_UPDATEOVERLAYDATA {\n LPDDRAWI_DIRECTDRAW_GBL lpDD;\n LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface;\n RECTL rDest;\n LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface;\n RECTL rSrc;\n DWORD dwFlags;\n DDOVERLAYFX overlayFX;\n HRESULT ddRVal;\n LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay;\n} DDHAL_UPDATEOVERLAYDATA;\n\ntypedef struct _DDHAL_SETPALETTEDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpDDSurface;\n    LPDDRAWI_DDRAWPALETTE_GBL\tlpDDPalette;\n    HRESULT\t\t\tddRVal;\n    LPDDHALSURFCB_SETPALETTE\tSetPalette;\n    BOOL\t\t\tAttach;\n} DDHAL_SETPALETTEDATA;\n\n/* palettes */\ntypedef struct _DDHAL_DESTROYPALETTEDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    LPDDRAWI_DDRAWPALETTE_GBL\tlpDDPalette;\n    HRESULT\t\t\tddRVal;\n    LPDDHALPALCB_DESTROYPALETTE\tDestroyPalette;\n} DDHAL_DESTROYPALETTEDATA;\n\ntypedef struct _DDHAL_SETENTRIESDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    LPDDRAWI_DDRAWPALETTE_GBL\tlpDDPalette;\n    DWORD\t\t\tdwBase;\n    DWORD\t\t\tdwNumEntries;\n    LPPALETTEENTRY\t\tlpEntries;\n    HRESULT\t\t\tddRVal;\n    LPDDHALPALCB_SETENTRIES\tSetEntries;\n} DDHAL_SETENTRIESDATA;\n\ntypedef struct _DDHAL_GETDRIVERINFODATA {\n    DWORD\tdwSize;\n    DWORD\tdwFlags;\n    GUID\tguidInfo;\n    DWORD\tdwExpectedSize;\n    LPVOID\tlpvData;\n    DWORD\tdwActualSize;\n    HRESULT\tddRVal;\n    ULONG_PTR\tdwContext;\n} DDHAL_GETDRIVERINFODATA;\n\n/*****************************************************************************\n * high-level ddraw implementation structures\n */\ntypedef struct _IUNKNOWN_LIST {\n    struct _IUNKNOWN_LIST *\tlpLink;\n    LPGUID\t\t\tlpGuid;\n    IUnknown *\t\t\tlpIUnknown;\n} IUNKNOWN_LIST,*LPIUNKNOWN_LIST;\n\ntypedef struct _PROCESS_LIST {\n    struct _PROCESS_LIST *\tlpLink;\n    DWORD\t\t\tdwProcessId;\n    DWORD\t\t\tdwRefCnt;\n    DWORD\t\t\tdwAlphaDepth;\n    DWORD\t\t\tdwZDepth;\n} PROCESS_LIST,*LPPROCESS_LIST;\n\ntypedef struct _ATTACHLIST {\n    DWORD\t\t\tdwFlags;\n    struct _ATTACHLIST *\tlpLink;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpAttached;\n    LPDDRAWI_DDRAWSURFACE_INT\tlpIAttached;\n} ATTACHLIST,*LPATTACHLIST;\n\n#define DDAL_IMPLICIT\t0x00000001\n\ntypedef struct _ACCESSRECTLIST {\n    struct _ACCESSRECTLIST *\tlpLink;\n    RECT\t\t\trDest;\n    LPDDRAWI_DIRECTDRAW_LCL\tlpOwner;\n    LPVOID\t\t\tlpSurfaceData;\n    DWORD\t\t\tdwFlags;\n    LPHEAPALIASINFO\t\tlpHeapAliasInfo;\n} ACCESSRECTLIST,*LPACCESSRECTLIST;\n\n#define ACCESSRECT_VRAMSTYLE\t\t0x00000001\n#define ACCESSRECT_NOTHOLDINGWIN16LOCK\t0x00000002\n#define ACCESSRECT_BROKEN\t\t0x00000004\n\ntypedef struct _DBLNODE {\n    struct _DBLNODE *\t\tnext;\n    struct _DBLNODE *\t\tprev;\n    LPDDRAWI_DDRAWSURFACE_LCL\tobject;\n    LPDDRAWI_DDRAWSURFACE_INT\tobject_int;\n} DBLNODE,*LPDBLNODE;\n\ntypedef struct _DDRAWI_DIRECTDRAW_INT {\n    LPVOID\t\t\tlpVtbl;\n    LPDDRAWI_DIRECTDRAW_LCL\tlpLcl;\n    LPDDRAWI_DIRECTDRAW_INT\tlpLink;\n    DWORD\t\t\tdwIntRefCnt;\n} DDRAWI_DIRECTDRAW_INT;\n\ntypedef struct _DDRAWI_DIRECTDRAW_LCL {\n    DWORD\t\t\tlpDDMore;\n    LPDDRAWI_DIRECTDRAW_GBL\tlpGbl;\n    DWORD\t\t\tdwUnused0;\n    DWORD\t\t\tdwLocalFlags;\n    DWORD\t\t\tdwLocalRefCnt;\n    DWORD\t\t\tdwProcessId;\n    IUnknown *\t\t\tpUnkOuter;\n    DWORD\t\t\tdwObsolete1;\n    ULONG_PTR\t\t\thWnd;\n    ULONG_PTR\t\t\thDC;\n    DWORD\t\t\tdwErrorMode;\n    LPDDRAWI_DDRAWSURFACE_INT\tlpPrimary;\n    LPDDRAWI_DDRAWSURFACE_INT\tlpCB;\n    DWORD\t\t\tdwPreferredMode;\n    /* DirectX 2 */\n    HINSTANCE\t\t\thD3DInstance;\n    IUnknown *\t\t\tpD3DIUnknown;\n    LPDDHAL_CALLBACKS\t\tlpDDCB;\n    ULONG_PTR\t\t\thDDVxd;\n    /* DirectX 5.0 */\n    DWORD\t\t\tdwAppHackFlags;\n    /* DirectX 5.0A */\n    ULONG_PTR\t\t\thFocusWnd;\n    DWORD\t\t\tdwHotTracking;\n    DWORD\t\t\tdwIMEState;\n    /* DirectX 6.0 */\n    ULONG_PTR\t\t\thWndPopup;\n    ULONG_PTR\t\t\thDD;\n    ULONG_PTR\t\t\thGammaCalibrator;\n    LPDDGAMMACALIBRATORPROC\tlpGammaCalibrator;\n} DDRAWI_DIRECTDRAW_LCL;\n\n#define DDRAWILCL_HASEXCLUSIVEMODE\t0x00000001\n#define DDRAWILCL_ISFULLSCREEN\t\t0x00000002\n#define DDRAWILCL_SETCOOPCALLED\t\t0x00000004\n#define DDRAWILCL_ACTIVEYES\t\t0x00000008\n#define DDRAWILCL_ACTIVENO\t\t0x00000010\n#define DDRAWILCL_HOOKEDHWND\t\t0x00000020\n#define DDRAWILCL_ALLOWMODEX\t\t0x00000040\n#define DDRAWILCL_V1SCLBEHAVIOUR\t0x00000080\n#define DDRAWILCL_MODEHASBEENCHANGED\t0x00000100\n#define DDRAWILCL_CREATEDWINDOW\t\t0x00000200\n#define DDRAWILCL_DIRTYDC\t\t0x00000400\n#define DDRAWILCL_DISABLEINACTIVATE\t0x00000800\n#define DDRAWILCL_CURSORCLIPPED\t\t0x00001000\n#define DDRAWILCL_EXPLICITMONITOR\t0x00002000\n#define DDRAWILCL_MULTITHREADED\t\t0x00004000\n#define DDRAWILCL_FPUSETUP\t\t0x00008000\n#define DDRAWILCL_POWEREDDOWN\t\t0x00010000\n#define DDRAWILCL_DIRECTDRAW7\t\t0x00020000\n#define DDRAWILCL_ATTEMPTEDD3DCONTEXT\t0x00040000\n#define DDRAWILCL_FPUPRESERVE\t\t0x00080000\n\ntypedef struct _DDRAWI_DIRECTDRAW_GBL {\n    DWORD\t\t\tdwRefCnt;\n    DWORD\t\t\tdwFlags;\n    FLATPTR\t\t\tfpPrimaryOrig;\n    DDCORECAPS\t\t\tddCaps;\n    DWORD\t\t\tdwInternal1;\n    DWORD\t\t\tdwUnused1[9];\n    LPDDHAL_CALLBACKS\t\tlpDDCBtmp;\n    LPDDRAWI_DDRAWSURFACE_INT\tdsList;\n    LPDDRAWI_DDRAWPALETTE_INT\tpalList;\n    LPDDRAWI_DDRAWCLIPPER_INT\tclipperList;\n    LPDDRAWI_DIRECTDRAW_GBL\tlp16DD;\n    DWORD\t\t\tdwMaxOverlays;\n    DWORD\t\t\tdwCurrOverlays;\n    DWORD\t\t\tdwMonitorFrequency;\n    DDCORECAPS\t\t\tddHELCaps;\n    DWORD\t\t\tdwUnused2[50];\n    DDCOLORKEY\t\t\tddckCKDestOverlay;\n    DDCOLORKEY\t\t\tddckCKSrcOverlay;\n    VIDMEMINFO\t\t\tvmiData;\n    LPVOID\t\t\tlpDriverHandle;\n    LPDDRAWI_DIRECTDRAW_LCL\tlpExclusiveOwner;\n    DWORD\t\t\tdwModeIndex;\n    DWORD\t\t\tdwModeIndexOrig;\n    DWORD\t\t\tdwNumFourCC;\n    LPDWORD\t\t\tlpdwFourCC;\n    DWORD\t\t\tdwNumModes;\n    LPDDHALMODEINFO\t\tlpModeInfo;\n    PROCESS_LIST\t\tplProcessList;\n    DWORD\t\t\tdwSurfaceLockCount;\n    DWORD\t\t\tdwAliasedLockCnt;\n    ULONG_PTR\t\t\tdwReserved3;\n    ULONG_PTR\t\t\thDD;\n    char\t\t\tcObsolete[12];\n    DWORD\t\t\tdwReserved1;\n    DWORD\t\t\tdwReserved2;\n    DBLNODE\t\t\tdbnOverlayRoot;\n    volatile LPWORD\t\tlpwPDeviceFlags;\n    DWORD\t\t\tdwPDevice;\n    DWORD\t\t\tdwWin16LockCnt;\n    DWORD\t\t\tdwUnused3;\n    DWORD\t\t\thInstance;\n    DWORD\t\t\tdwEvent16;\n    DWORD\t\t\tdwSaveNumModes;\n    /* DirectX 2 */\n    ULONG_PTR\t\t\tlpD3DGlobalDriverData;\n    ULONG_PTR\t\t\tlpD3DHALCallbacks;\n    DDCORECAPS\t\t\tddBothCaps;\n    /* DirectX 5.0 */\n    LPDDVIDEOPORTCAPS\t\tlpDDVideoPortCaps;\n    LPDDRAWI_DDVIDEOPORT_INT\tdvpList;\n    ULONG_PTR\t\t\tlpD3DHALCallbacks2;\n    RECT\t\t\trectDevice;\n    DWORD\t\t\tcMonitors;\n    LPVOID\t\t\tgpbmiSrc;\n    LPVOID\t\t\tgpbmiDest;\n    LPHEAPALIASINFO\t\tphaiHeapAliases;\n    ULONG_PTR\t\t\thKernelHandle;\n    ULONG_PTR\t\t\tpfnNotifyProc;\n    LPDDKERNELCAPS\t\tlpDDKernelCaps;\n    LPDDNONLOCALVIDMEMCAPS\tlpddNLVCaps;\n    LPDDNONLOCALVIDMEMCAPS\tlpddNLVHELCaps;\n    LPDDNONLOCALVIDMEMCAPS\tlpddNLVBothCaps;\n    ULONG_PTR\t\t\tlpD3DExtendedCaps;\n    /* DirectX 5.0A */\n    DWORD\t\t\tdwDOSBoxEvent;\n    RECT\t\t\trectDesktop;\n    char\t\t\tcDriverName[MAX_DRIVER_NAME];\n    /* DirectX 6.0 */\n    ULONG_PTR\t\t\tlpD3DHALCallbacks3;\n    DWORD\t\t\tdwNumZPixelFormats;\n    DDPIXELFORMAT              *lpZPixelFormats;\n    LPDDRAWI_DDMOTIONCOMP_INT\tmcList;\n    DWORD\t\t\thDDVxd;\n    DDSCAPSEX\t\t\tddsCapsMore;\n} DDRAWI_DIRECTDRAW_GBL;\n\n#define DDRAWI_VIRTUALDESKTOP\t0x00000008\n#define DDRAWI_MODEX\t\t0x00000010\n#define DDRAWI_DISPLAYDRV\t0x00000020\n#define DDRAWI_FULLSCREEN\t0x00000040\n#define DDRAWI_MODECHANGED\t0x00000080\n#define DDRAWI_NOHARDWARE\t0x00000100\n#define DDRAWI_PALETTEINIT\t0x00000200\n#define DDRAWI_NOEMULATION\t0x00000400\n/* more... */\n\n/* surfaces */\ntypedef struct _DDRAWI_DDRAWSURFACE_INT {\n    LPVOID\t\t\tlpVtbl;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpLcl;\n    LPDDRAWI_DDRAWSURFACE_INT\tlpLink;\n    DWORD\t\t\tdwIntRefCnt;\n} DDRAWI_DDRAWSURFACE_INT;\n\ntypedef struct _DDRAWI_DDRAWSURFACE_GBL {\n    DWORD\t\t\tdwRefCnt;\n    DWORD\t\t\tdwGlobalFlags;\n    union {\n\tLPACCESSRECTLIST\tlpRectList;\n\tDWORD\t\t\tdwBlockSizeY;\n    } DUMMYUNIONNAME1;\n    union {\n\tLPVMEMHEAP\t\tlpVidMemHeap;\n\tDWORD\t\t\tdwBlockSizeX;\n    } DUMMYUNIONNAME2;\n    union {\n\tLPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n\tLPVOID\t\t\tlpDDHandle;\n    } DUMMYUNIONNAME3;\n    FLATPTR\t\t\tfpVidMem;\n    union {\n\tLONG\t\t\tlPitch;\n\tDWORD\t\t\tdwLinearSize;\n    } DUMMYUNIONNAME4;\n    WORD\t\t\twHeight;\n    WORD\t\t\twWidth;\n    DWORD\t\t\tdwUsageCount;\n    ULONG_PTR\t\t\tdwReserved1; /* for display driver use */\n    /* optional (defaults to primary surface pixelformat) */\n    DDPIXELFORMAT\t\tddpfSurface;\n} DDRAWI_DDRAWSURFACE_GBL;\n\n#define DDRAWISURFGBL_MEMFREE\t\t\t0x00000001\n#define DDRAWISURFGBL_SYSMEMREQUESTED\t\t0x00000002\n#define DDRAWISURFGBL_ISGDISURFACE\t\t0x00000004\n#define DDRAWISURFGBL_SOFTWAREAUTOFLIP\t\t0x00000008\n#define DDRAWISURFGBL_LOCKNOTHOLDINGWIN16LOCK\t0x00000010\n#define DDRAWISURFGBL_LOCKVRAMSTYLE\t\t0x00000020\n#define DDRAWISURFGBL_LOCKBROKEN\t\t0x00000040\n#define DDRAWISURFGBL_IMPLICITHANDLE\t\t0x00000080\n#define DDRAWISURFGBL_ISCLIENTMEM\t\t0x00000100\n#define DDRAWISURFGBL_HARDWAREOPSOURCE\t\t0x00000200\n#define DDRAWISURFGBL_HARDWAREOPDEST\t\t0x00000400\n#define DDRAWISURFGBL_HARDWAREOPSTARTED\t\t0x00000600\n#define DDRAWISURFGBL_VPORTINTERLEAVED\t\t0x00000800\n#define DDRAWISURFGBL_VPORTDATA\t\t\t0x00001000\n#define DDRAWISURFGBL_LATEALLOCATELINEAR\t0x00002000\n#define DDRAWISURFGBL_SYSMEMEXECUTEBUFFER\t0x00004000\n#define DDRAWISURFGBL_FASTLOCKHELD\t\t0x00008000\n#define DDRAWISURFGBL_READONLYLOCKHELD\t\t0x00010000\n\ntypedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE {\n    DWORD\t\t\tdwSize;\n    union {\n\tDWORD\t\t\tdwPhysicalPageTable;\n\tFLATPTR\t\t\tfpPhysicalVidMem;\n    } DUMMYUNIONNAME1;\n    LPDWORD\t\t\tpPageTable;\n    DWORD\t\t\tcPages;\n    ULONG_PTR\t\t\tdwSavedDCContext;\n    FLATPTR\t\t\tfpAliasedVidMem;\n    ULONG_PTR\t\t\tdwDriverReserved;\n    ULONG_PTR\t\t\tdwHELReserved;\n    DWORD\t\t\tcPageUnlocks;\n    ULONG_PTR\t\t\thKernelSurface;\n    DWORD\t\t\tdwKernelRefCnt;\n    DDCOLORCONTROL             *lpColorInfo;\n    FLATPTR\t\t\tfpNTAlias;\n    DWORD\t\t\tdwContentsStamp;\n    LPVOID\t\t\tlpvUnswappedDriverReserved;\n    LPVOID\t\t\tlpDDRAWReserved2;\n    DWORD\t\t\tdwDDRAWReserved1;\n    DWORD\t\t\tdwDDRAWReserved2;\n    FLATPTR\t\t\tfpAliasOfVidMem;\n} DDRAWI_DDRAWSURFACE_GBL_MORE;\n\n/* the MS version of this macro was somewhat obfuscated and unreadable\n * (possibly because of mediocre MS coders)... so I simplified it...\n * (and so I commit no copyright violations either, hah) */\n#define GET_LPDDRAWSURFACE_GBL_MORE(psurf_gbl) \\\n    (*(((LPDDRAWI_DDRAWSURFACE_GBL_MORE *)(psurf_gbl)) - 1))\n\ntypedef struct _DDRAWI_DDRAWSURFACE_MORE {\n    DWORD\t\t\tdwSize;\n    IUNKNOWN_LIST *\t\tlpIUnknowns;\n    LPDDRAWI_DIRECTDRAW_LCL\tlpDD_lcl;\n    DWORD\t\t\tdwPageLockCount;\n    DWORD\t\t\tdwBytesAllocated;\n    LPDDRAWI_DIRECTDRAW_INT\tlpDD_int;\n    DWORD\t\t\tdwMipMapCount;\n    LPDDRAWI_DDRAWCLIPPER_INT\tlpDDIClipper;\n    /* DirectX 5.0 */\n    LPHEAPALIASINFO\t\tlpHeapAliasInfo;\n    DWORD\t\t\tdwOverlayFlags;\n    VOID\t\t\t*rgjunc;\n    LPDDRAWI_DDVIDEOPORT_LCL\tlpVideoPort;\n    DDOVERLAYFX                *lpddOverlayFX;\n    DDSCAPSEX\t\t\tddsCapsEx;\n    DWORD\t\t\tdwTextureStage;\n    LPVOID\t\t\tlpDDRAWReserved;\n    LPVOID\t\t\tlpDDRAWReserved2;\n    LPVOID\t\t\tlpDDrawReserved3;\n    DWORD\t\t\tdwDDrawReserved4;\n    LPVOID\t\t\tlpDDrawReserved5;\n    LPDWORD\t\t\tlpGammaRamp;\n    LPDWORD\t\t\tlpOriginalGammaRamp;\n    LPVOID\t\t\tlpDDrawReserved6;\n    DWORD\t\t\tdwSurfaceHandle;\n    DWORD\t\t\tqwDDrawReserved8[2];\n    LPVOID\t\t\tlpDDrawReserved9;\n    DWORD\t\t\tcSurfaces;\n    DDSURFACEDESC2             *pCreatedDDSurfaceDesc2;\n    LPDDRAWI_DDRAWSURFACE_LCL\t*slist;\n    DWORD\t\t\tdwFVF;\n    LPVOID\t\t\tlpVB;\n} DDRAWI_DDRAWSURFACE_MORE;\n\ntypedef struct _DDRAWI_DDRAWSURFACE_LCL {\n    LPDDRAWI_DDRAWSURFACE_MORE\tlpSurfMore;\n    LPDDRAWI_DDRAWSURFACE_GBL\tlpGbl;\n    ULONG_PTR\t\t\thDDSurface;\n    LPATTACHLIST\t\tlpAttachList;\n    LPATTACHLIST\t\tlpAttachListFrom;\n    DWORD\t\t\tdwLocalRefCnt;\n    DWORD\t\t\tdwProcessId;\n    DWORD\t\t\tdwFlags;\n    DDSCAPS\t\t\tddsCaps;\n    LPDDRAWI_DDRAWPALETTE_INT\tlpDDPalette;\n    LPDDRAWI_DDRAWCLIPPER_LCL\tlpDDClipper;\n    DWORD\t\t\tdwModeCreatedIn;\n    DWORD\t\t\tdwBackBufferCount;\n    DDCOLORKEY\t\t\tddckCKDestBlt;\n    DDCOLORKEY\t\t\tddckCKSrcBlt;\n    ULONG_PTR\t\t\thDC;\n    ULONG_PTR\t\t\tdwReserved1; /* for display driver use */\n    /* overlays only */\n    DDCOLORKEY\t\t\tddckCKSrcOverlay;\n    DDCOLORKEY\t\t\tddckCKDestOverlay;\n    LPDDRAWI_DDRAWSURFACE_INT\tlpSurfaceOverlaying;\n    DBLNODE\t\t\tdbnOverlayNode;\n    RECT\t\t\trcOverlaySrc;\n    RECT\t\t\trcOverlayDest;\n    DWORD\t\t\tdwClrXparent;\n    DWORD\t\t\tdwAlpha;\n    LONG\t\t\tlOverlayX;\n    LONG\t\t\tlOverlayY;\n} DDRAWI_DDRAWSURFACE_LCL;\n\n#define DDRAWISURF_ATTACHED\t\t0x00000001\n#define DDRAWISURF_IMPLICITCREATE\t0x00000002\n#define DDRAWISURF_ISFREE\t\t0x00000004\n#define DDRAWISURF_ATTACHED_FROM\t0x00000008\n#define DDRAWISURF_IMPLICITROOT\t\t0x00000010\n#define DDRAWISURF_PARTOFPRIMARYCHAIN\t0x00000020\n#define DDRAWISURF_DATAISALIASED\t0x00000040\n#define DDRAWISURF_HASDC\t\t0x00000080\n#define DDRAWISURF_HASCKEYDESTOVERLAY\t0x00000100\n#define DDRAWISURF_HASCKEYDESTBLT\t0x00000200\n#define DDRAWISURF_HASCKEYSRCOVERLAY\t0x00000400\n#define DDRAWISURF_HASCKEYSRCBLT\t0x00000800\n#define DDRAWISURF_LOCKEXCLUDEDCURSOR\t0x00001000\n#define DDRAWISURF_HASPIXELFORMAT\t0x00002000\n#define DDRAWISURF_HASOVERLAYDATA\t0x00004000\n#define DDRAWISURF_SETGAMMA\t\t0x00008000\n/* more... */\n#define DDRAWISURF_INVALID\t\t0x10000000\n\n/* palettes */\ntypedef struct _DDRAWI_DDRAWPALETTE_INT {\n    LPVOID\t\t\tlpVtbl;\n    LPDDRAWI_DDRAWPALETTE_LCL\tlpLcl;\n    LPDDRAWI_DDRAWPALETTE_INT\tlpLink;\n    DWORD\t\t\tdwIntRefCnt;\n} DDRAWI_DDRAWPALETTE_INT;\n\ntypedef struct _DDRAWI_DDRAWPALETTE_GBL {\n    DWORD\t\t\tdwRefCnt;\n    DWORD\t\t\tdwFlags;\n    LPDDRAWI_DIRECTDRAW_LCL\tlpDD_lcl;\n    DWORD\t\t\tdwProcessId;\n    LPPALETTEENTRY\t\tlpColorTable;\n    union {\n\tULONG_PTR\t\tdwReserved1; /* for display driver use */\n\tHPALETTE\t\thHELGDIPalette;\n    } DUMMYUNIONNAME1;\n    /* DirectX 5.0 */\n    DWORD\t\t\tdwDriverReserved;\n    DWORD\t\t\tdwContentsStamp;\n    /* DirectX 6.0 */\n    DWORD\t\t\tdwSaveStamp;\n    /* DirectX 7.0 */\n    DWORD\t\t\tdwHandle;\n} DDRAWI_DDRAWPALETTE_GBL;\n\n#define DDRAWIPAL_256\t\t0x00000001\n#define DDRAWIPAL_16\t\t0x00000002\n#define DDRAWIPAL_GDI\t\t0x00000004\n#define DDRAWIPAL_STORED_8\t0x00000008\n#define DDRAWIPAL_STORED_16\t0x00000010\n#define DDRAWIPAL_STORED_24\t0x00000020\n#define DDRAWIPAL_EXCLUSIVE\t0x00000040\n#define DDRAWIPAL_INHEL\t\t0x00000080\n#define DDRAWIPAL_DIRTY\t\t0x00000100\n#define DDRAWIPAL_ALLOW256\t0x00000200\n#define DDRAWIPAL_4\t\t0x00000400\n#define DDRAWIPAL_2\t\t0x00000800\n#define DDRAWIPAL_STORED_8INDEX\t0x00001000\n#define DDRAWIPAL_ALPHA\t\t0x00002000\n\ntypedef struct _DDRAWI_DDRAWPALETTE_LCL {\n    DWORD\t\t\tlpPalMore;\n    LPDDRAWI_DDRAWPALETTE_GBL\tlpGbl;\n    ULONG_PTR\t\t\tdwUnused0;\n    DWORD\t\t\tdwLocalRefCnt;\n    IUnknown *\t\t\tpUnkOuter;\n    LPDDRAWI_DIRECTDRAW_LCL\tlpDD_lcl;\n    ULONG_PTR\t\t\tdwReserved1;\n    /* DirectX 6.0 */\n    ULONG_PTR\t\t\tdwDDRAWReserved1;\n    ULONG_PTR\t\t\tdwDDRAWReserved2;\n    ULONG_PTR\t\t\tdwDDRAWReserved3;\n} DDRAWI_DDRAWPALETTE_LCL;\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif\n\n#endif /* __DDRAWI_INCLUDED__ */\n"
  },
  {
    "path": "wine/windows/ddstream.idl",
    "content": "/*\n * Copyright 2004 Christian Costa\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\nimport \"mmstream.idl\";\n\ncpp_quote(\"#ifndef __DDRAW_INCLUDED__\")\ntypedef void * LPDDSURFACEDESC;\ntypedef struct tDDSURFACEDESC DDSURFACEDESC;\ninterface IDirectDraw;\ninterface IDirectDrawSurface;\ninterface IDirectDrawPalette;\ncpp_quote(\"#endif\")\ncpp_quote(\"#include <ddraw.h>\")\n\nenum {\n\tDDSFF_PROGRESSIVERENDER = 0x00000001\n};\n\ninterface IDirectDrawMediaStream;\ninterface IDirectDrawStreamSample;\n\n[\nobject,\nlocal,\nuuid(F4104FCE-9A70-11d0-8FDE-00C04FD9189D),\npointer_default(unique)\n]\ninterface IDirectDrawMediaStream : IMediaStream\n{\n\tHRESULT GetFormat(\n\t\t[out] DDSURFACEDESC *pDDSDCurrent,\n\t\t[out] IDirectDrawPalette **ppDirectDrawPalette,\n\t\t[out] DDSURFACEDESC *pDDSDDesired,\n\t\t[out] DWORD *pdwFlags);\n\n\tHRESULT SetFormat(\n\t\t[in] const DDSURFACEDESC *pDDSurfaceDesc,\n\t\t[in] IDirectDrawPalette *pDirectDrawPalette);\n\n\tHRESULT GetDirectDraw(\n\t\t[out] IDirectDraw **ppDirectDraw);\n\n\tHRESULT SetDirectDraw(\n\t\t[in] IDirectDraw *pDirectDraw);\n\n\tHRESULT CreateSample(\n\t\t[in] IDirectDrawSurface *pSurface,\n\t\t[in] const RECT *pRect,\n\t\t[in] DWORD dwFlags,\n\t\t[out] IDirectDrawStreamSample **ppSample);\n\n\tHRESULT GetTimePerFrame(\n\t\t[out] STREAM_TIME *pFrameTime);\n}\n\n\n[\nobject,\nlocal,\nuuid(F4104FCF-9A70-11d0-8FDE-00C04FD9189D),\npointer_default(unique)\n]\ninterface IDirectDrawStreamSample : IStreamSample\n{\n\tHRESULT GetSurface(\n\t\t[out] IDirectDrawSurface ** ppDirectDrawSurface,\n\t\t[out] RECT * pRect);\n\n\tHRESULT SetRect(\n\t\t[in] const RECT * pRect);\n\n}\n"
  },
  {
    "path": "wine/windows/delayloadhandler.h",
    "content": "/*\n * Copyright 2013 André Hentschel\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DELAYLOADHANDLER_H\n#define __WINE_DELAYLOADHANDLER_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define DELAYLOAD_GPA_FAILURE 4\n\ntypedef struct _DELAYLOAD_PROC_DESCRIPTOR\n{\n    ULONG ImportDescribedByName;\n    union {\n        LPCSTR Name;\n        ULONG Ordinal;\n    } Description;\n} DELAYLOAD_PROC_DESCRIPTOR, *PDELAYLOAD_PROC_DESCRIPTOR;\n\ntypedef struct _DELAYLOAD_INFO\n{\n    ULONG Size;\n    PCIMAGE_DELAYLOAD_DESCRIPTOR DelayloadDescriptor;\n    PIMAGE_THUNK_DATA ThunkAddress;\n    LPCSTR TargetDllName;\n    DELAYLOAD_PROC_DESCRIPTOR TargetApiDescriptor;\n    PVOID TargetModuleBase;\n    PVOID Unused;\n    ULONG LastError;\n} DELAYLOAD_INFO, *PDELAYLOAD_INFO;\n\ntypedef PVOID (WINAPI *PDELAYLOAD_FAILURE_DLL_CALLBACK)(ULONG, PDELAYLOAD_INFO);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* __WINE_DELAYLOADHANDLER_H */\n"
  },
  {
    "path": "wine/windows/devenum.idl",
    "content": "/*\n * Copyright (C) 2002 Robert Shearman\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\nimport \"oaidl.idl\";\n\ncpp_quote(\"#define CDEF_CLASS_DEFAULT 0x0001\")\ncpp_quote(\"#define CDEF_BYPASS_CLASS_MANAGER 0x0002\")\ncpp_quote(\"#define CDEF_CLASS_LEGACY  0x0004\")\ncpp_quote(\"#define CDEF_MERIT_ABOVE_DO_NOT_USE 0x0008\")\n\n[\n    object,\n    uuid(29840822-5B84-11D0-BD3B-00A0C911CE86),\n    pointer_default(unique)\n]\ninterface ICreateDevEnum : IUnknown\n{\n    HRESULT CreateClassEnumerator(\n        [in]  REFCLSID clsidDeviceClass,\n        [out] IEnumMoniker ** ppEnumMoniker,\n        [in]  DWORD dwFlags);\n}\n"
  },
  {
    "path": "wine/windows/devguid.h",
    "content": "/*\n * Defines GUIDs for device classes\n *\n * Copyright (C) 2004 CodeWeavers (Aric Stewart)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nDEFINE_GUID( GUID_DEVCLASS_1394,\n  0x6BDD1FC1, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F );\nDEFINE_GUID( GUID_DEVCLASS_ADAPTER,\n  0x4D36E964, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_APMSUPPORT,\n  0xD45B1C18, 0xC8FA, 0x11D1, 0x9F, 0x77, 0x00, 0x00, 0xF8, 0x05, 0xF5, 0x30 );\nDEFINE_GUID( GUID_DEVCLASS_BATTERY,\n  0x72631E54, 0x78A4, 0x11D0, 0xBC, 0xF7, 0x00, 0xAA, 0x00, 0xB7, 0xB3, 0x2A );\nDEFINE_GUID( GUID_DEVCLASS_CDROM,\n  0x4D36E965, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_COMPUTER,\n  0x4D36E966, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_DECODER,\n  0x6BDD1FC2, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F );\nDEFINE_GUID( GUID_DEVCLASS_DISKDRIVE,\n  0x4D36E967, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_DISPLAY,\n  0x4D36E968, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_FDC,\n  0x4D36E969, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_FLOPPYDISK,\n  0x4D36E980, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_GPS,\n  0x6BDD1FC3, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F );\nDEFINE_GUID( GUID_DEVCLASS_HDC,\n  0x4D36E96A, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_HIDCLASS,\n  0x745A17A0, 0x74D3, 0x11D0, 0xB6, 0xFE, 0x00, 0xA0, 0xC9, 0x0F, 0x57, 0xDA );\nDEFINE_GUID( GUID_DEVCLASS_IMAGE,\n  0x6BDD1FC6, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F );\nDEFINE_GUID( GUID_DEVCLASS_INFRARED,\n  0x6BDD1FC5, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F );\nDEFINE_GUID( GUID_DEVCLASS_KEYBOARD,\n  0x4D36E96B, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_LEGACYDRIVER,\n  0x8ECC055D, 0x047F, 0x11D1, 0xA5, 0x37, 0x00, 0x00, 0xF8, 0x75, 0x3E, 0xD1 );\nDEFINE_GUID( GUID_DEVCLASS_MEDIA,\n  0x4D36E96C, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_MEDIUM_CHANGER,\n  0xCE5939AE, 0xEBDE, 0x11D0, 0xB1, 0x81, 0x00, 0x00, 0xF8, 0x75, 0x3E, 0xC4 );\nDEFINE_GUID( GUID_DEVCLASS_MODEM,\n  0x4D36E96D, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_MONITOR,\n  0x4D36E96E, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_MOUSE,\n  0x4D36E96F, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_MTD,\n  0x4D36E970, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_MULTIFUNCTION,\n  0x4D36E971, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_MULTIPORTSERIAL,\n  0x50906CB8, 0xBA12, 0x11D1, 0xBF, 0x5D, 0x00, 0x00, 0xF8, 0x05, 0xF5, 0x30 );\nDEFINE_GUID( GUID_DEVCLASS_NET,\n  0x4D36E972, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_NETCLIENT,\n  0x4D36E973, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_NETSERVICE,\n  0x4D36E974, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_NETTRANS,\n  0x4D36E975, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_NODRIVER,\n  0x4D36E976, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_PCMCIA,\n  0x4D36E977, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_PORTS,\n  0x4D36E978, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_PRINTER,\n  0x4D36E979, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_PRINTERUPGRADE,\n  0x4D36E97A, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_SCSIADAPTER,\n  0x4D36E97B, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_SMARTCARDREADER,\n  0x50DD5230, 0xBA8A, 0x11D1, 0xBF, 0x5D, 0x00, 0x00, 0xF8, 0x05, 0xF5, 0x30 );\nDEFINE_GUID( GUID_DEVCLASS_SOUND,\n  0x4D36E97C, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_SYSTEM,\n  0x4D36E97D, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_TAPEDRIVE,\n  0x6D807884, 0x7D21, 0x11CF, 0x80, 0x1C, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_UNKNOWN,\n  0x4D36E97E, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );\nDEFINE_GUID( GUID_DEVCLASS_USB,\n  0x36FC9E60, 0xC465, 0x11CF, 0x80, 0x56, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 );\nDEFINE_GUID( GUID_DEVCLASS_VOLUME,\n  0x71A27CDD, 0x812A, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F );\n"
  },
  {
    "path": "wine/windows/devicetopology.idl",
    "content": "/*\n * Core Audio device topology definitions\n *\n * Copyright 2009 Maarten Lankhorst\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n */\n\ninterface IPart;\ninterface IControlInterface;\ninterface IDeviceTopology;\ninterface IControlChangeNotify;\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"propidl.idl\";\n\ncpp_quote(\"#ifndef E_NOTFOUND\")\ncpp_quote(\"#define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND)\")\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#define DEVTOPO_HARDWARE_INITIATED_EVENTCONTEXT 0x64726148 /* 'draH' */\")\ncpp_quote(\"DEFINE_GUID(EVENTCONTEXT_VOLUMESLIDER, 0xe2c2e9de, 0x09b1, 0x4b04,0x84,0xe5, 0x07, 0x93, 0x12, 0x25, 0xee, 0x04);\")\n\ncpp_quote(\"#define _IKsControl_\")\ncpp_quote(\"#include <ks.h>\")\ncpp_quote(\"#include <ksmedia.h>\")\ncpp_quote(\"#ifndef _KS_\")\n\ntypedef struct {\n    ULONG FormatSize;\n    ULONG Flags;\n    ULONG SampleSize;\n    ULONG Reserved;\n    GUID MajorFormat;\n    GUID SubFormat;\n    GUID Specifier;\n} KSDATAFORMAT;\n\ntypedef KSDATAFORMAT *PKSDATAFORMAT;\n\ntypedef struct\n{\n    union\n    {\n        struct {\n            GUID Set;\n            ULONG Id;\n            ULONG Flags;\n        };\n        LONGLONG Alignment;\n    };\n} KSIDENTIFIER;\n\ntypedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY;\ntypedef KSIDENTIFIER KSMETHOD, *PKSMETHOD;\ntypedef KSIDENTIFIER KSEVENT, *PKSEVENT;\n\ntypedef enum\n{\n    eConnTypeUnknown = 0,\n    eConnType3Point5mm,\n    eConnTypeQuarter,\n    eConnTypeAtapiInternal,\n    eConnTypeRCA,\n    eConnTypeOptical,\n    eConnTypeOtherDigital,\n    eConnTypeOtherAnalog,\n    eConnTypeMultichannelAnalogDIN,\n    eConnTypeXlrProfessional,\n    eConnTypeRJ11Modem,\n    eConnTypeCombination\n} EPcxConnectionType;\n\ntypedef enum\n{\n    eGeoLocRear = 1,\n    eGeoLocFront,\n    eGeoLocLeft,\n    eGeoLocRight,\n    eGeoLocTop,\n    eGeoLocBottom,\n    eGeoLocRearPanel,\n    eGeoLocRiser,\n    eGeoLocInsideMobileLid,\n    eGeoLocDrivebay,\n    eGeoLocHDMI,\n    eGeoLocOutsideMobileLid,\n    eGeoLocATAPI,\n    eGeoLocReserved5,\n    eGeoLocReserved6\n} EPcxGeoLocation;\n\ntypedef enum\n{\n    eGenLocPrimaryBox = 0,\n    eGenLocInternal,\n    eGenLocSeparate,\n    eGenLocOther\n} EPcxGenLocation;\n\ntypedef enum\n{\n    ePortConnJack = 0,\n    ePortConnIntegratedDevice,\n    ePortConnBothIntegratedAndJack,\n    ePortConnUnknown\n} EPxcPortConnection;\n\ntypedef struct\n{\n    DWORD ChannelMapping;\n    COLORREF Color;\n    EPcxConnectionType ConnectionType;\n    EPcxGeoLocation GeoLocation;\n    EPcxGenLocation GenLocation;\n    EPxcPortConnection PortConnection;\n    BOOL IsConnected;\n} KSJACK_DESCRIPTION;\n\ntypedef KSJACK_DESCRIPTION *PKSJACK_DESCRIPTION;\n\ntypedef struct _LUID\n{\n    DWORD LowPart;\n    LONG HighPart;\n} LUID;\n\ntypedef struct _LUID *PLUID;\n\ntypedef enum\n{\n    KSJACK_SINK_CONNECTIONTYPE_HDMI = 0,\n    KSJACK_SINK_CONNECTIONTYPE_DISPLAYPORT\n} KSJACK_SINK_CONNECTIONTYPE;\n\ntypedef struct _tagKSJACK_SINK_INFORMATION\n{\n    KSJACK_SINK_CONNECTIONTYPE ConnType;\n    WORD ManufacturerId;\n    WORD ProductId;\n    WORD AudioLatency;\n    BOOL HDCPCapable;\n    BOOL AICapable;\n    UCHAR SinkDescriptionLength;\n    WCHAR SinkDescription[32];\n    LUID PortId;\n} KSJACK_SINK_INFORMATION;\n\ntypedef struct _tagKSJACK_DESCRIPTION2\n{\n    DWORD DeviceStateInfo;\n    DWORD JackCapabilities;\n} KSJACK_DESCRIPTION2;\n\ntypedef struct _tagKSJACK_DESCRIPTION2 *PKSJACK_DESCRIPTION2;\n\ncpp_quote(\"#endif\")\n\ntypedef enum\n{\n    In = 0,\n    Out\n} DataFlow;\n\ntypedef enum\n{\n    Connector = 0,\n    Subunit\n} PartType;\n\ntypedef enum\n{\n    Unknown_Connector = 0,\n    Physical_Internal,\n    Physical_External,\n    Software_IO,\n    Software_Fixed,\n    Network\n} ConnectorType;\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(28f54685-06fd-11d2-b27a-00a0c9223196),\n    local,\n    object\n]\ninterface IKsControl : IUnknown\n{\n    HRESULT KsProperty(\n        [in] PKSPROPERTY Property,\n        [in] ULONG PropertyLength,\n        [in,out] void *PropertyData,\n        [in] ULONG DataLength,\n        [out] ULONG *BytesReturned\n    );\n    HRESULT KsMethod(\n        [in] PKSMETHOD Method,\n        [in] ULONG MethodLength,\n        [in,out] void *MethodData,\n        [in] ULONG DataLength,\n        [out] ULONG *BytesReturned\n    );\n    HRESULT KsEvent(\n        [in] PKSEVENT Event,\n        [in] ULONG EventLength,\n        [in,out] void *EventData,\n        [in] ULONG DataLength,\n        [out] ULONG *BytesReturned\n    );\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(c2f8e001-f205-4bc9-99bc-c13b1e048ccb),\n    local,\n    object\n]\ninterface IPerChannelDbLevel : IUnknown\n{\n    HRESULT GetChannelCount(\n        [out] UINT *pcChannels\n    );\n    HRESULT GetLevelRange(\n        [in] UINT nChannel,\n        [out] float *pfMinLevelDB,\n        [out] float *pfMaxLevelDB,\n        [out] float *pfStepping\n    );\n    HRESULT GetLevel(\n        [in] UINT nChannel,\n        [out] float *pfLevelDB\n    );\n    HRESULT SetLevel(\n        [in] UINT nChannel,\n        [in] float fLevelDB,\n        [in,unique] LPCGUID pguidEventContext\n    );\n    HRESULT SetLevelUniform(\n        [in] float fLevelDB,\n        [in,unique] LPCGUID pguidEventContext\n    );\n    HRESULT SetLevelAllChannels(\n        [size_is(cChannels),in] float *aLevelsDB,\n        [in] ULONG cChannels,\n        [in] LPCGUID pguidEventContext\n    );\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc),\n    local,\n    object\n]\ninterface IAudioVolumeLevel : IPerChannelDbLevel\n{\n    /* Empty */\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(bb11c46f-ec28-493c-b88a-5db88062ce98),\n    local,\n    object\n]\ninterface IAudioChannelConfig : IUnknown\n{\n    HRESULT SetChannelConfig(\n        [in] DWORD dwConfig,\n        [in] LPCGUID pguidEventContext\n    );\n    HRESULT GetChannelConfig(\n        [in] DWORD dwConfig,\n        [retval,out] DWORD *pdwConfig\n    );\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(7d8b1437-dd53-4350-9c1b-1ee2890bf938),\n    local,\n    object\n]\ninterface IAudioLoudness : IUnknown\n{\n    HRESULT GetEnabled(\n        [out] BOOL *pbEnabled\n    );\n    HRESULT SetEnabled(\n        [in] BOOL bEnabled,\n        [in] LPCGUID pguidEventContext\n    );\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(4f03dc02-5e6e-4653-8f72-a030c123d598),\n    local,\n    object\n]\ninterface IAudioInputSelector : IUnknown\n{\n    HRESULT GetSelection(\n        [out] UINT *pnIdSelected\n    );\n    HRESULT SetSelection(\n        [in] UINT nIdSelect,\n        [unique,in] LPCGUID pguidEventContext\n    );\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(bb515f69-94a7-429e-8b9c-271b3f11a3ab),\n    local,\n    object\n]\ninterface IAudioOutputSelector : IUnknown\n{\n    HRESULT GetSelection(\n        [out] UINT *pnIdSelected\n    );\n    HRESULT SetSelection(\n        [in] UINT nIdSelect,\n        [unique,in] LPCGUID pguidEventContext\n    );\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(df45aeea-b74a-4b6b-afad-2366b6aa012e),\n    local,\n    object\n]\ninterface IAudioMute : IUnknown\n{\n    HRESULT SetMute(\n        [in] BOOL bMute,\n        [unique,in] LPCGUID pguidEventContext\n    );\n    HRESULT GetMute(\n        [out] BOOL *pbMute\n    );\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(a2b1a1d9-4db3-425d-a2b2-bd335cb3e2e5),\n    local,\n    object\n]\ninterface IAudioBass : IPerChannelDbLevel\n{\n    /* Empty */\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(5e54b6d7-b44b-40d9-9a9e-e691d9ce6edf),\n    local,\n    object\n]\ninterface IAudioMidRange : IPerChannelDbLevel\n{\n    /* Empty */\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(0a717812-694e-4907-b74b-bafa5cfdca7b),\n    local,\n    object\n]\ninterface IAudioTreble : IPerChannelDbLevel\n{\n    /* Empty */\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(85401fd4-6de4-4b9d-9869-2d6753a82f3c),\n    local,\n    object\n]\ninterface IAudioAutoGainControl : IUnknown\n{\n    HRESULT GetEnabled(\n        [in] BOOL bEnabled,\n        [unique,in] LPCGUID pguidEventContext\n    );\n    HRESULT GetMute(\n        [out] BOOL *pbEnabled\n    );\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(dd79923c-0599-45e0-b8b6-c8df7db6e796),\n    local,\n    object\n]\ninterface IAudioPeakMeter : IUnknown\n{\n    HRESULT GetChannelCount(\n        [out] UINT *pcChannels\n    );\n    HRESULT GetLevel(\n        [in] UINT nChannel,\n        [out] float *pfLevel\n    );\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(3b22bcbf-2586-4af0-8583-205d391b807c),\n    local,\n    object\n]\ninterface IDeviceSpecificProperty : IUnknown\n{\n    HRESULT GetType(\n        [out] VARTYPE *pVType\n    );\n    HRESULT GetValue(\n        [out] VARTYPE *pvType,\n        [out,in] DWORD *pcbValue\n    );\n    HRESULT SetValue(\n        [in] void *pvValue,\n        [in] DWORD cbValue,\n        [in] LPCGUID pguidEventContext\n    );\n    HRESULT Get4BRange(\n        [out] LONG *plMin,\n        [out] LONG *plMax,\n        [out] LONG *plStepping\n    );\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(3cb4a69d-bb6f-4d2b-95b7-452d2c155db5),\n    local,\n    object\n]\ninterface IKsFormatSupport : IUnknown\n{\n    HRESULT IsFormatSupported(\n        [size_is(cbFormat),in] PKSDATAFORMAT pKsFormat,\n        [in] DWORD cbFormat,\n        [out] BOOL *pbSupported\n    );\n    HRESULT GetDevicePreferredFormat(\n        [out] PKSDATAFORMAT *ppKsFormat\n    );\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(4509f757-2d46-4637-8e62-ce7db944f57b),\n    local,\n    object\n]\ninterface IKsJackDescription : IUnknown\n{\n    HRESULT GetJackCount(\n        [out] UINT *pcJacks\n    );\n    HRESULT GetJackDescription(\n        [in] UINT nJack,\n        [out] KSJACK_DESCRIPTION *pDescription\n    );\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(478f3a9b-e0c9-4827-9228-6f5505ffe76a),\n    local,\n    object\n]\ninterface IKsJackDescription2 : IUnknown\n{\n    HRESULT GetJackCount(\n        [out] UINT *pcJacks\n    );\n    HRESULT GetJackDescription2(\n        [in] UINT nJack,\n        [out] KSJACK_DESCRIPTION2 *pDescription2\n    );\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(d9bd72ed-290f-4581-9ff3-61027a8fe532),\n    local,\n    object\n]\ninterface IKsJackSinkInformation : IUnknown\n{\n    HRESULT GetJackSinkInformation(\n        [out] KSJACK_SINK_INFORMATION *pJackSinkInformation\n    );\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(6daa848c-5eb0-45cc-aea5-998a2cda1ffb),\n    local,\n    object\n]\ninterface IPartsList : IUnknown\n{\n    HRESULT GetCount(\n        [out] UINT *pCount\n    );\n    HRESULT GetPart(\n        [in] UINT nIndex,\n        [out] IPart **ppPart\n    );\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(ae2de0e4-5bca-4f2d-aa46-5d13f8fdb3a9),\n    local,\n    object\n]\ninterface IPart : IUnknown\n{\n    HRESULT GetName(\n        [out] LPWSTR *ppwstrName\n    );\n    HRESULT GetLocalId(\n        [out] UINT *pnId\n    );\n    HRESULT GetGlobalId(\n        [out] LPWSTR *ppwstrGlobalId\n    );\n    HRESULT GetPartType(\n        [out] PartType *pPartType\n    );\n    HRESULT GetSubType(\n        [out] GUID *pSubType\n    );\n    HRESULT GetControlInterfaceCount(\n        [out] UINT *pCount\n    );\n    HRESULT GetControlInterface(\n        [in] UINT nIndex,\n        [out] IControlInterface **ppInterfaceDesc\n    );\n    HRESULT EnumPartsIncoming(\n        [out] IPartsList **ppParts\n    );\n    HRESULT EnumPartsOutgoing(\n        [out] IPartsList **ppParts\n    );\n    HRESULT GetTopologyObjects(\n        [out] IDeviceTopology **ppTopology\n    );\n    HRESULT Activate(\n        [in] DWORD dwClsContext,\n        [in] REFIID refiid,\n        [iid_is(refiid),out] void **ppvObject\n    );\n    HRESULT RegisterControlChangeCallback(\n        [in] REFGUID riid,\n        [in] IControlChangeNotify *pNotify\n    );\n    HRESULT UnregisterControlChangeCallback(\n        [in] IControlChangeNotify *pNotify\n    );\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(9c2c4058-23f5-41de-877a-df3af236a09e),\n    local,\n    object\n]\ninterface IConnector : IUnknown\n{\n    HRESULT GetType(\n        [out] ConnectorType *pType\n    );\n    HRESULT GetDataFlow(\n        [out] DataFlow *pFlow\n    );\n    HRESULT ConnectTo(\n        [in] IConnector *pConnectTo\n    );\n    HRESULT Disconnect(void);\n    HRESULT IsConnected(\n        [out] BOOL *pbConnected\n    );\n    HRESULT GetConnectedTo(\n        [out] IConnector **ppConTo\n    );\n    HRESULT GetConnectorIdConnectedTo(\n        [out] LPWSTR *ppwstrConnectorId\n    );\n    HRESULT GetDeviceIdConnectedTo(\n        [out] LPWSTR *ppwstrDeviceId\n    );\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(82149a85-dba6-4487-86bb-ea8f7fefcc71),\n    local,\n    object\n]\ninterface ISubUnit: IUnknown\n{\n    /* Empty IUnknown interface.. */\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(45d37c3f-5140-444a-ae24-400789f3cbf3),\n    local,\n    object\n]\ninterface IControlInterface : IUnknown\n{\n    HRESULT GetName(\n        [out] LPWSTR *ppwstrName\n    );\n    HRESULT GetIID(\n        [out] GUID *pIID\n    );\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(a09513ed-c709-4d21-bd7b-5f34c47f3947),\n    local,\n    object\n]\ninterface IControlChangeNotify : IUnknown\n{\n    HRESULT OnNotify(\n        [in] DWORD dwSenderProcessId,\n        [in] LPCGUID ppguidEventContext\n    );\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(2a07407e-6497-4a18-9787-32f79bd0d98f),\n    local,\n    object\n]\ninterface IDeviceTopology : IUnknown\n{\n    HRESULT GetConnectorCount(\n        [out] UINT *pCount\n    );\n    HRESULT GetConnector(\n        [in] UINT nIndex,\n        [out] IConnector **ppConnector\n    );\n    HRESULT GetSubunitCount(\n        [out] UINT *pCount\n    );\n    HRESULT GetSubunit(\n        [in] UINT nIndex,\n        [out] ISubUnit **ppConnector\n    );\n    HRESULT GetPartById(\n        [in] UINT nId,\n        [out] IPart **ppPart\n    );\n    HRESULT GetDeviceId(\n        [out] LPWSTR *ppwstrDeviceId\n    );\n    HRESULT GetSignalPath(\n        [in] IPart *pIPartFrom,\n        [in] IPart *pIPartTo,\n        [in] BOOL bRejectMixedPaths,\n        [out] IPartsList **ppParts\n    );\n}\n\n[\n    uuid(51b9a01d-8181-4363-b59c-e678f476dd0e),\n    version(1.0)\n]\nlibrary DevTopologyLib\n{\n    [\n        uuid(1df639d0-5ec1-47aa-9379-828dc1aa8c59),\n    ]\n    coclass DeviceTopology\n    {\n        interface IDeviceTopology;\n    }\n}\n"
  },
  {
    "path": "wine/windows/devpkey.h",
    "content": "/*\n * Copyright (C) 2010 Maarten Lankhorst for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <devpropdef.h>\n\n/* TODO: Not all DEVPROPKEYS have been defined here */\n\nDEFINE_DEVPROPKEY(DEVPKEY_NAME, 0xb725f130,0x47ef,0x101a,0xa5,0xf1,0x02,0x60,0x8c,0x9e,0xeb,0xac, 10);\n\nDEFINE_DEVPROPKEY(DEVPKEY_Device_DeviceDesc, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 2);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_HardwareIds, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 3);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_CompatibleIds, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 4);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_Service, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 6);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_Class, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 9);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_ClassGuid, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 10);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_Driver, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 11);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_ConfigFlags, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 12);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_Manufacturer, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 13);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_FriendlyName, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 14);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_LocationInfo, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 15);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_PDOName, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 16);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_Capabilities, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 17);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_UINumber, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 18);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_UpperFilters, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 19);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_LowerFilters, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 20);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_BusTypeGuid, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 21);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_LegacyBusType, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 22);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_BusNumber, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 23);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_EnumeratorName, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 24);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_Security, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 25);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_SecuritySDS, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 26);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_DevType, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 27);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_Exclusive, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 28);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_Characteristics, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 29);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_Address, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 30);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_UINumberDescFormat, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 31);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_PowerData, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 32);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_RemovalPolicy, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 33);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_RemovalPolicyDefault, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 34);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_RemovalPolicyOverride, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 35);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_InstallState, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 36);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_LocationPaths, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 37);\nDEFINE_DEVPROPKEY(DEVPKEY_Device_BaseContainerId, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 38);\n\nDEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_FriendlyName, 0x026e516e,0xb814,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 2);\nDEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_Enabled, 0x026e516e,0xb814,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 3);\nDEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_ClassGuid, 0x026e516e,0xb814,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 4);\n"
  },
  {
    "path": "wine/windows/devpropdef.h",
    "content": "/*\n * Copyright (C) 2010 Maarten Lankhorst for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _DEVPROPDEF_H_\n#define _DEVPROPDEF_H_\n\ntypedef ULONG DEVPROPTYPE, *PDEVPROPTYPE;\n\n#define DEVPROP_TYPEMOD_ARRAY 0x1000\n#define DEVPROP_TYPEMOD_LIST 0x2000\n#define MAX_DEVPROP_TYPEMOD DEVPROP_TYPEMOD_LIST\n\n#define DEVPROP_TYPE_EMPTY 0x00\n#define DEVPROP_TYPE_NULL 0x01\n#define DEVPROP_TYPE_SBYTE 0x02\n#define DEVPROP_TYPE_BYTE 0x03\n#define DEVPROP_TYPE_INT16 0x04\n#define DEVPROP_TYPE_UINT16 0x05\n#define DEVPROP_TYPE_INT32 0x06\n#define DEVPROP_TYPE_UINT32 0x07\n#define DEVPROP_TYPE_INT64 0x08\n#define DEVPROP_TYPE_UINT64 0x09\n#define DEVPROP_TYPE_FLOAT 0x0a\n#define DEVPROP_TYPE_DOUBLE 0x0b\n#define DEVPROP_TYPE_DECIMAL 0x0c\n#define DEVPROP_TYPE_GUID 0x0d\n#define DEVPROP_TYPE_CURRENCY 0x0e\n#define DEVPROP_TYPE_DATE 0x0f\n#define DEVPROP_TYPE_FILETIME 0x10\n#define DEVPROP_TYPE_BOOLEAN 0x11\n#define DEVPROP_TYPE_STRING 0x12\n#define DEVPROP_TYPE_STRING_LIST (DEVPROP_TYPE_STRING|DEVPROP_TYPEMOD_LIST)\n#define DEVPROP_TYPE_SECURITY_DESCRIPTOR 0x13\n#define DEVPROP_TYPE_SECURITY_DESCRIPTOR_STRING 0x14\n#define DEVPROP_TYPE_DEVPROPKEY 0x15\n#define DEVPROP_TYPE_DEVPROPTYPE 0x16\n#define DEVPROP_TYPE_BINARY (DEVPROP_TYPE_BYTE|DEVPROP_TYPEMOD_ARRAY)\n#define DEVPROP_TYPE_ERROR 0x17\n#define DEVPROP_TYPE_NTSTATUS 0x18\n#define DEVPROP_TYPE_STRING_INDIRECT 0x19\n#define MAX_DEVPROP_TYPE DEVPROP_TYPE_STRING_INDIRECT\n\n#define DEVPROP_MASK_TYPE 0x0fff\n#define DEVPROP_MASK_TYPEMOD 0xf000\n\ntypedef CHAR DEVPROP_BOOLEAN, *PDEVPROP_BOOLEAN;\n#define DEVPROP_TRUE ((DEVPROP_BOOLEAN)-1)\n#define DEVPROP_FALSE ((DEVPROP_BOOLEAN)0)\n\n#ifndef DEVPROPKEY_DEFINED\n#define DEVPROPKEY_DEFINED\ntypedef GUID DEVPROPGUID, *PDEVPROPGUID;\ntypedef ULONG DEVPROPID, *PDEVPROPID;\n\ntypedef struct _DEVPROPKEY {\n    DEVPROPGUID fmtid;\n    DEVPROPID pid;\n} DEVPROPKEY, *PDEVPROPKEY;\n\n#define DEVPROPID_FIRST_USABLE 2\n\n#endif /*DEVPROPKEY_DEFINED*/\n\n#endif /*_DEVPROPDEF_H_*/\n\n#undef DEFINE_DEVPROPKEY\n#ifdef INITGUID\n#ifdef __cplusplus\n#define DEFINE_DEVPROPKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \\\n        EXTERN_C const DEVPROPKEY name DECLSPEC_HIDDEN DECLSPEC_SELECTANY; \\\n        EXTERN_C const DEVPROPKEY name = \\\n        { { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }, pid }\n#else\n#define DEFINE_DEVPROPKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \\\n        const DEVPROPKEY name DECLSPEC_HIDDEN DECLSPEC_SELECTANY; \\\n        const DEVPROPKEY name = \\\n        { { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }, pid }\n#endif\n#else\n#define DEFINE_DEVPROPKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \\\n    EXTERN_C const DEVPROPKEY name DECLSPEC_HIDDEN DECLSPEC_SELECTANY\n#endif\n\n#ifndef IsEqualDevPropKey\n#ifdef __cplusplus\n#define IsEqualDevPropKey(a,b) (((a).pid == (b).pid) && IsEqualIID((a).fmtid,(b).fmtid))\n#else\n#define IsEqualDevPropKey(a,b) (((a).pid == (b).pid) && IsEqualIID(&(a).fmtid,&(b).fmtid))\n#endif\n#endif\n"
  },
  {
    "path": "wine/windows/dhcpcsdk.h",
    "content": "/*\n * Copyright (C) 2017 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef _DHCPCSDK_\n#define _DHCPCSDK_\n\ntypedef struct _DHCPAPI_PARAMS\n{\n    ULONG  Flags;\n    ULONG  OptionId;\n    BOOL   IsVendor;\n    BYTE   *Data;\n    DWORD  nBytesData;\n} DHCPAPI_PARAMS, *PDHCPAPI_PARAMS, *LPDHCPAPI_PARAMS;\n\ntypedef struct _DHCPAPI_PARAMS DHCPCAPI_PARAMS, *PDHCPCAPI_PARAMS, *LPDHCPCAPI_PARAMS;\n\ntypedef struct _DHCPCAPI_PARAMS_ARARAY\n{\n    ULONG             nParams;\n    LPDHCPCAPI_PARAMS Params;\n} DHCPCAPI_PARAMS_ARRAY, *PDHCPCAPI_PARAMS_ARRAY, *LPDHCPCAPI_PARAMS_ARRAY;\n\ntypedef struct _DHCPCAPI_CLASSID\n{\n    ULONG  Flags;\n    BYTE   *Data;\n    ULONG  nBytesData;\n} DHCPCAPI_CLASSID, *PDHCPCAPI_CLASSID, *LPDHCPCAPI_CLASSID;\n\n\nDWORD WINAPI DhcpRequestParams( DWORD flags, void *reserved, WCHAR *adaptername, DHCPCAPI_CLASSID *classid,\n                                DHCPCAPI_PARAMS_ARRAY sendparams, DHCPCAPI_PARAMS_ARRAY recdparams,\n                                BYTE *buffer, DWORD *size, WCHAR *requestidstr );\n\n#endif\n"
  },
  {
    "path": "wine/windows/dhtmldid.h",
    "content": "/*\n * Copyright 2017 Alex Henrie\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#define DISPID_LOADDOCUMENT                  1\n#define DISPID_EXECCOMMAND                   2\n#define DISPID_QUERYSTATUS                   3\n#define DISPID_SAVEDOCUMENT                  4\n#define DISPID_SETCONTEXTMENU                5\n#define DISPID_DOCUMENT                      6\n#define DISPID_ACTIVATEAPPLETS               7\n#define DISPID_ACTIVATEACTIVEXCONTROLS       8\n#define DISPID_ACTIVATEDTCS                  9\n#define DISPID_SHOWDETAILS                  11\n#define DISPID_SHOWBORDERS                  12\n#define DISPID_DHTMLEDITAPPEARANCE          13\n#define DISPID_DHTMLEDITSCROLLBARS          14\n#define DISPID_SCROLLBARAPPEARANCE          15\n#define DISPID_SOURCECODEPRESERVATION       16\n#define DISPID_DOCUMENTHTML                 17\n#define DISPID_ABSOLUTEDROPMODE             18\n#define DISPID_SNAPTOGRIDX                  19\n#define DISPID_SNAPTOGRIDY                  20\n#define DISPID_SNAPTOGRID                   21\n#define DISPID_ISDIRTY                      22\n#define DISPID_CURRENTDOCUMENTPATH          23\n#define DISPID_BASEURL                      24\n#define DISPID_DOCUMENTTITLE                25\n#define DISPID_BROWSEMODE                   26\n#define DISPID_NEWDOCUMENT                  27\n#define DISPID_PRINT                        28\n#define DISPID_LOADURL                      29\n#define DISPID_USEDIVONCR                   30\n#define DISPID_FILTERSRCCODE                31\n#define DISPID_REFRESHDOC                   32\n#define DISPID_BUSY                         33\n\n#define DISPID_DOCUMENTCOMPLETE              1\n#define DISPID_DISPLAYCHANGED                2\n#define DISPID_SHOWCONTEXTMENU               3\n#define DISPID_CONTEXTMENUACTION             4\n#define DISPID_ONMOUSEDOWN                   5\n#define DISPID_ONMOUSEMOVE                   6\n#define DISPID_ONMOUSEUP                     7\n#define DISPID_ONMOUSEOUT                    8\n#define DISPID_ONMOUSEOVER                   9\n#define DISPID_ONCLICK                      10\n#define DISPID_ONDBLCLICK                   11\n#define DISPID_ONKEYDOWN                    12\n#define DISPID_ONKEYPRESS                   13\n#define DISPID_ONKEYUP                      14\n#define DISPID_ONBLUR                       15\n#define DISPID_ONREADYSTATECHANGE           16\n"
  },
  {
    "path": "wine/windows/dhtmled.idl",
    "content": "/*\n * Copyright 2017 Alex Henrie\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"docobj.idl\";\nimport \"mshtml.idl\";\n\n#include \"dhtmldid.h\"\n\n#ifndef __WIDL__\n#define threading(model)\n#define progid(str)\n#define vi_progid(str)\n#endif\n\n[\n    uuid(683364a1-b37d-11d1-adc5-006008a5848c),\n    version(1.0)\n]\nlibrary DHTMLEDLib\n{\n    importlib(\"stdole2.tlb\");\n\n    typedef\n    [\n        uuid(7179FC44-B2E4-11d1-ADC5-006008A5848C)\n    ]\n    enum DHTMLEDITAPPEARANCE {\n        DEAPPEARANCE_FLAT,\n        DEAPPEARANCE_3D\n    } DHTMLEDITAPPEARANCE;\n\n    typedef\n    [\n        uuid(bf82426a-b961-11d1-adc5-006008a5848c)\n    ]\n    enum DHTMLEDITCMDF {\n        DECMDF_NOTSUPPORTED = 0,\n        DECMDF_DISABLED = 1,\n        DECMDF_ENABLED = 3,\n        DECMDF_LATCHED = 7,\n        DECMDF_NINCHED = 11\n    } DHTMLEDITCMDF;\n\n    typedef enum DHTMLEDITCMDID {\n        DECMD_BOLD = 5000,\n        DECMD_COPY = 5002,\n        DECMD_CUT,\n        DECMD_DELETE,\n        DECMD_DELETECELLS,\n        DECMD_DELETECOLS,\n        DECMD_DELETEROWS,\n        DECMD_FINDTEXT,\n        DECMD_FONT,\n        DECMD_GETBACKCOLOR,\n        DECMD_GETBLOCKFMT,\n        DECMD_GETBLOCKFMTNAMES,\n        DECMD_GETFONTNAME,\n        DECMD_GETFONTSIZE,\n        DECMD_GETFORECOLOR,\n        DECMD_HYPERLINK,\n        DECMD_IMAGE,\n        DECMD_INDENT,\n        DECMD_INSERTCELL,\n        DECMD_INSERTCOL,\n        DECMD_INSERTROW,\n        DECMD_INSERTTABLE,\n        DECMD_ITALIC,\n        DECMD_JUSTIFYCENTER,\n        DECMD_JUSTIFYLEFT,\n        DECMD_JUSTIFYRIGHT,\n        DECMD_LOCK_ELEMENT,\n        DECMD_MAKE_ABSOLUTE,\n        DECMD_MERGECELLS,\n        DECMD_ORDERLIST,\n        DECMD_OUTDENT,\n        DECMD_PASTE,\n        DECMD_REDO,\n        DECMD_REMOVEFORMAT,\n        DECMD_SELECTALL,\n        DECMD_SEND_BACKWARD,\n        DECMD_BRING_FORWARD,\n        DECMD_SEND_BELOW_TEXT,\n        DECMD_BRING_ABOVE_TEXT,\n        DECMD_SEND_TO_BACK,\n        DECMD_BRING_TO_FRONT,\n        DECMD_SETBACKCOLOR,\n        DECMD_SETBLOCKFMT,\n        DECMD_SETFONTNAME,\n        DECMD_SETFONTSIZE,\n        DECMD_SETFORECOLOR,\n        DECMD_SPLITCELL,\n        DECMD_UNDERLINE,\n        DECMD_UNDO,\n        DECMD_UNLINK,\n        DECMD_UNORDERLIST,\n        DECMD_PROPERTIES\n    } DHTMLEDITCMDID;\n\n    [\n        object,\n        uuid(ce04b590-2b1f-11d2-8d1e-00a0c959bc0a),\n        dual,\n        pointer_default(unique)\n    ]\n    interface IDHTMLSafe : IDispatch\n    {\n        [\n            id(DISPID_EXECCOMMAND)\n        ]\n        HRESULT ExecCommand(\n            [in] DHTMLEDITCMDID cmd_id,\n            [in, defaultvalue(OLECMDEXECOPT_DODEFAULT)] OLECMDEXECOPT options,\n            [in, optional] VARIANT *code_in,\n            [out, retval] VARIANT *code_out\n        );\n\n        [\n            id(DISPID_QUERYSTATUS)\n        ]\n        HRESULT QueryStatus(\n            [in] DHTMLEDITCMDID cmd_id,\n            [out, retval] DHTMLEDITCMDF *status\n        );\n\n        [\n            id(DISPID_SETCONTEXTMENU)\n        ]\n        HRESULT SetContextMenu(\n            [in] VARIANT *strings,\n            [in] VARIANT *states\n        );\n\n        [\n            id(DISPID_NEWDOCUMENT)\n        ]\n        HRESULT NewDocument();\n\n        [\n            id(DISPID_LOADURL)\n        ]\n        HRESULT LoadURL(\n            [in] BSTR url\n        );\n\n        [\n            id(DISPID_FILTERSRCCODE)\n        ]\n        HRESULT FilterSourceCode(\n            [in] BSTR in,\n            [out, retval] BSTR *out\n        );\n\n        [\n            id(DISPID_REFRESHDOC)\n        ]\n        HRESULT Refresh();\n\n        [\n            propget,\n            id(DISPID_DOCUMENT)\n        ]\n        HRESULT DOM(\n            [out, retval] IHTMLDocument2 **value\n        );\n\n        [\n            propget,\n            id(DISPID_DOCUMENTHTML)\n        ]\n        HRESULT DocumentHTML(\n            [out, retval] BSTR *value\n        );\n\n        [\n            propput,\n            id(DISPID_DOCUMENTHTML)\n        ]\n        HRESULT DocumentHTML(\n            [in] BSTR html\n        );\n\n        [\n            propget,\n            id(DISPID_ACTIVATEAPPLETS)\n        ]\n        HRESULT ActivateApplets(\n            [out, retval] VARIANT_BOOL *value\n        );\n\n        [\n            propput,\n            id(DISPID_ACTIVATEAPPLETS)\n        ]\n        HRESULT ActivateApplets(\n            [in] VARIANT_BOOL value\n        );\n\n        [\n            propget,\n            id(DISPID_ACTIVATEACTIVEXCONTROLS)\n        ]\n        HRESULT ActivateActiveXControls(\n            [out, retval] VARIANT_BOOL *value\n        );\n\n        [\n            propput,\n            id(DISPID_ACTIVATEACTIVEXCONTROLS)\n        ]\n        HRESULT ActivateActiveXControls(\n            [in] VARIANT_BOOL value\n        );\n\n        [\n            propget,\n            id(DISPID_ACTIVATEDTCS)\n        ]\n        HRESULT ActivateDTCs(\n            [out, retval] VARIANT_BOOL *value\n        );\n\n        [\n            propput,\n            id(DISPID_ACTIVATEDTCS)\n        ]\n        HRESULT ActivateDTCs(\n            [in] VARIANT_BOOL value\n        );\n\n        [\n            propget,\n            id(DISPID_SHOWDETAILS)\n        ]\n        HRESULT ShowDetails(\n            [out, retval] VARIANT_BOOL *value\n        );\n\n        [\n            propput,\n            id(DISPID_SHOWDETAILS)\n        ]\n        HRESULT ShowDetails(\n            [in] VARIANT_BOOL value\n        );\n\n        [\n            propget,\n            id(DISPID_SHOWBORDERS)\n        ]\n        HRESULT ShowBorders(\n            [out, retval] VARIANT_BOOL *value\n        );\n\n        [\n            propput,\n            id(DISPID_SHOWBORDERS)\n        ]\n        HRESULT ShowBorders(\n            [in] VARIANT_BOOL value\n        );\n\n        [\n            propget,\n            id(DISPID_DHTMLEDITAPPEARANCE)\n        ]\n        HRESULT Appearance(\n            [out, retval] DHTMLEDITAPPEARANCE *value\n        );\n\n        [\n            propput,\n            id(DISPID_DHTMLEDITAPPEARANCE)\n        ]\n        HRESULT Appearance(\n            [in] DHTMLEDITAPPEARANCE value\n        );\n\n        [\n            propget,\n            id(DISPID_DHTMLEDITSCROLLBARS)\n        ]\n        HRESULT Scrollbars(\n            [out, retval] VARIANT_BOOL *value\n        );\n\n        [\n            propput,\n            id(DISPID_DHTMLEDITSCROLLBARS)\n        ]\n        HRESULT Scrollbars(\n            [in] VARIANT_BOOL value\n        );\n\n        [\n            propget,\n            id(DISPID_SCROLLBARAPPEARANCE)\n        ]\n        HRESULT ScrollbarAppearance(\n            [out, retval] DHTMLEDITAPPEARANCE *value\n        );\n\n        [\n            propput,\n            id(DISPID_SCROLLBARAPPEARANCE)\n        ]\n        HRESULT ScrollbarAppearance(\n            [in] DHTMLEDITAPPEARANCE value\n        );\n\n        [\n            propget,\n            id(DISPID_SOURCECODEPRESERVATION)\n        ]\n        HRESULT SourceCodePreservation(\n            [out, retval] VARIANT_BOOL *value\n        );\n\n        [\n            propput,\n            id(DISPID_SOURCECODEPRESERVATION)\n        ]\n        HRESULT SourceCodePreservation(\n            [in] VARIANT_BOOL value\n        );\n\n        [\n            propget,\n            id(DISPID_ABSOLUTEDROPMODE)\n        ]\n        HRESULT AbsoluteDropMode(\n            [out, retval] VARIANT_BOOL *value\n        );\n\n        [\n            propput,\n            id(DISPID_ABSOLUTEDROPMODE)\n        ]\n        HRESULT AbsoluteDropMode(\n            [in] VARIANT_BOOL value\n        );\n\n        [\n            propget,\n            id(DISPID_SNAPTOGRIDX)\n        ]\n        HRESULT SnapToGridX(\n            [out, retval] long *value\n        );\n\n        [\n            propput,\n            id(DISPID_SNAPTOGRIDX)\n        ]\n        HRESULT SnapToGridX(\n            [in] long value\n        );\n\n        [\n            propget,\n            id(DISPID_SNAPTOGRIDY)\n        ]\n        HRESULT SnapToGridY(\n            [out, retval] long *value\n        );\n\n        [\n            propput,\n            id(DISPID_SNAPTOGRIDY)\n        ]\n        HRESULT SnapToGridY(\n            [in] long value\n        );\n\n        [\n            propget,\n            id(DISPID_SNAPTOGRID)\n        ]\n        HRESULT SnapToGrid(\n            [out, retval] VARIANT_BOOL *value\n        );\n\n        [\n            propput,\n            id(DISPID_SNAPTOGRID)\n        ]\n        HRESULT SnapToGrid(\n            [in] VARIANT_BOOL value\n        );\n\n        [\n            propget,\n            id(DISPID_ISDIRTY)\n        ]\n        HRESULT IsDirty(\n            [out, retval] VARIANT_BOOL *value\n        );\n\n        [\n            propget,\n            id(DISPID_CURRENTDOCUMENTPATH)\n        ]\n        HRESULT CurrentDocumentPath(\n            [out, retval] BSTR *value\n        );\n\n        [\n            propget,\n            id(DISPID_BASEURL)\n        ]\n        HRESULT BaseURL(\n            [out, retval] BSTR *value\n        );\n\n        [\n            propput,\n            id(DISPID_BASEURL)\n        ]\n        HRESULT BaseURL(\n            [in] BSTR value\n        );\n\n        [\n            propget,\n            id(DISPID_DOCUMENTTITLE)\n        ]\n        HRESULT DocumentTitle(\n            [out, retval] BSTR *value\n        );\n\n        [\n            propget,\n            id(DISPID_USEDIVONCR)\n        ]\n        HRESULT UseDivOnCarriageReturn(\n            [out, retval] VARIANT_BOOL *value\n        );\n\n        [\n            propput,\n            id(DISPID_USEDIVONCR)\n        ]\n        HRESULT UseDivOnCarriageReturn(\n            [in] VARIANT_BOOL value\n        );\n\n        [\n            propget,\n            id(DISPID_BUSY)\n        ]\n        HRESULT Busy(\n            [out, retval] VARIANT_BOOL *value\n        );\n    };\n\n    [\n        uuid(d1fc78e8-b380-11d1-adc5-006008a5848c)\n    ]\n    dispinterface _DHTMLSafeEvents\n    {\n    properties:\n    methods:\n        [\n            id(DISPID_DOCUMENTCOMPLETE)\n        ]\n        void DocumentComplete();\n\n        [\n            id(DISPID_DISPLAYCHANGED)\n        ]\n        void DisplayChanged();\n\n        [\n            id(DISPID_SHOWCONTEXTMENU)\n        ]\n        void ShowContextMenu(\n            [in] long x,\n            [in] long y\n        );\n\n        [\n            id(DISPID_CONTEXTMENUACTION)\n        ]\n        void ContextMenuAction(\n            [in] long index\n        );\n\n        [\n            id(DISPID_ONMOUSEDOWN)\n        ]\n        void onmousedown();\n\n        [\n            id(DISPID_ONMOUSEMOVE)\n        ]\n        void onmousemove();\n\n        [\n            id(DISPID_ONMOUSEUP)\n        ]\n        void onmouseup();\n\n        [\n            id(DISPID_ONMOUSEOUT)\n        ]\n        void onmouseout();\n\n        [\n            id(DISPID_ONMOUSEOVER)\n        ]\n        void onmouseover();\n\n        [\n            id(DISPID_ONCLICK)\n        ]\n        void onclick();\n\n        [\n            id(DISPID_ONDBLCLICK)\n        ]\n        void ondblclick();\n\n        [\n            id(DISPID_ONKEYDOWN)\n        ]\n        void onkeydown();\n\n        [\n            id(DISPID_ONKEYPRESS)\n        ]\n        void onkeypress();\n\n        [\n            id(DISPID_ONKEYUP)\n        ]\n        void onkeyup();\n\n        [\n            id(DISPID_ONBLUR)\n        ]\n        void onblur();\n\n        [\n            id(DISPID_ONREADYSTATECHANGE)\n        ]\n        void onreadystatechange();\n    };\n\n    [\n        uuid(2d360201-fff5-11d1-8d03-00a0c959bc0a),\n        threading(apartment),\n        progid(\"DHTMLSafe.DHTMLSafe.1\"),\n        vi_progid(\"DHTMLSafe.DHTMLSafe\")\n    ]\n    coclass DHTMLSafe\n    {\n        [default] interface IDHTMLSafe;\n        [default, source] interface _DHTMLSafeEvents;\n    };\n\n    [\n        uuid(ce04b591-2b1f-11d2-8d1e-00a0c959bc0a),\n        dual,\n        pointer_default(unique)\n    ]\n    interface IDHTMLEdit : IDHTMLSafe\n    {\n        [\n            id(DISPID_LOADDOCUMENT)\n        ]\n        HRESULT LoadDocument(\n            [in] VARIANT *path,\n            [in, optional] VARIANT *prompt\n        );\n\n        [\n            id(DISPID_SAVEDOCUMENT)\n        ]\n        HRESULT SaveDocument(\n            [in] VARIANT *path,\n            [in, optional] VARIANT *prompt\n        );\n\n        [\n            id(DISPID_PRINT)\n        ]\n        HRESULT PrintDocument(\n            [in, optional] VARIANT *prompt\n        );\n\n        [\n            propget,\n            id(DISPID_BROWSEMODE)\n        ]\n        HRESULT BrowseMode(\n            [out, retval] VARIANT_BOOL *value\n        );\n\n        [\n            propput,\n            id(DISPID_BROWSEMODE)\n        ]\n        HRESULT BrowseMode(\n            [in] VARIANT_BOOL value\n        );\n    };\n\n    [\n        uuid(588d5040-cf28-11d1-8cd3-00a0c959bc0a)\n    ]\n    dispinterface _DHTMLEditEvents\n    {\n    properties:\n    methods:\n        [\n            id(DISPID_DOCUMENTCOMPLETE)\n        ]\n        void DocumentComplete();\n\n        [\n            id(DISPID_DISPLAYCHANGED)\n        ]\n        void DisplayChanged();\n\n        [\n            id(DISPID_SHOWCONTEXTMENU)\n        ]\n        void ShowContextMenu(\n            [in] long x,\n            [in] long y\n        );\n\n        [\n            id(DISPID_CONTEXTMENUACTION)\n        ]\n        void ContextMenuAction(\n            [in] long index\n        );\n\n        [\n            id(DISPID_ONMOUSEDOWN)\n        ]\n        void onmousedown();\n\n        [\n            id(DISPID_ONMOUSEMOVE)\n        ]\n        void onmousemove();\n\n        [\n            id(DISPID_ONMOUSEUP)\n        ]\n        void onmouseup();\n\n        [\n            id(DISPID_ONMOUSEOUT)\n        ]\n        void onmouseout();\n\n        [\n            id(DISPID_ONMOUSEOVER)\n        ]\n        void onmouseover();\n\n        [\n            id(DISPID_ONCLICK)\n        ]\n        void onclick();\n\n        [\n            id(DISPID_ONDBLCLICK)\n        ]\n        void ondblclick();\n\n        [\n            id(DISPID_ONKEYDOWN)\n        ]\n        void onkeydown();\n\n        [\n            id(DISPID_ONKEYPRESS)\n        ]\n        void onkeypress();\n\n        [\n            id(DISPID_ONKEYUP)\n        ]\n        void onkeyup();\n\n        [\n            id(DISPID_ONBLUR)\n        ]\n        void onblur();\n\n        [\n            id(DISPID_ONREADYSTATECHANGE)\n        ]\n        void onreadystatechange();\n    };\n\n    [\n        uuid(2d360200-fff5-11d1-8d03-00a0c959bc0a),\n        threading(apartment),\n        progid(\"DHTMLEdit.DHTMLEdit.1\"),\n        vi_progid(\"DHTMLEdit.DHTMLEdit\")\n    ]\n    coclass DHTMLEdit\n    {\n        [default] interface IDHTMLEdit;\n        [default, source] interface _DHTMLEditEvents;\n    };\n}\n"
  },
  {
    "path": "wine/windows/difxapi.h",
    "content": "/*\n * Copyright (c) 2013 André Hentschel\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DIFXAPI_H\n#define __WINE_DIFXAPI_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct _INSTALLERINFO_A\n{\n    PSTR pApplicationId;\n    PSTR pDisplayName;\n    PSTR pProductName;\n    PSTR pMfgName;\n} INSTALLERINFO_A, *PINSTALLERINFO_A;\ntypedef const PINSTALLERINFO_A PCINSTALLERINFO_A;\n\ntypedef struct _INSTALLERINFO_W\n{\n    PWSTR pApplicationId;\n    PWSTR pDisplayName;\n    PWSTR pProductName;\n    PWSTR pMfgName;\n} INSTALLERINFO_W, *PINSTALLERINFO_W;\ntypedef const PINSTALLERINFO_W PCINSTALLERINFO_W;\n\ntypedef enum _DIFXAPI_LOG\n{\n    DIFXAPI_SUCCESS,\n    DIFXAPI_INFO,\n    DIFXAPI_WARNING,\n    DIFXAPI_ERROR,\n} DIFXAPI_LOG;\n\ntypedef VOID (CALLBACK *DIFXAPILOGCALLBACK_A)(DIFXAPI_LOG,DWORD,PCSTR,PVOID);\ntypedef VOID (CALLBACK *DIFXAPILOGCALLBACK_W)(DIFXAPI_LOG,DWORD,PCWSTR,PVOID);\ntypedef VOID (CALLBACK *DIFXLOGCALLBACK_A)(DIFXAPI_LOG,DWORD,PCSTR,PVOID);\ntypedef VOID (CALLBACK *DIFXLOGCALLBACK_W)(DIFXAPI_LOG,DWORD,PCWSTR,PVOID);\n\nVOID  WINAPI DIFXAPISetLogCallbackA(DIFXAPILOGCALLBACK_A,VOID*);\nVOID  WINAPI DIFXAPISetLogCallbackW(DIFXAPILOGCALLBACK_W,VOID*);\nDWORD WINAPI DriverPackageGetPathA(PCSTR,PSTR,DWORD*);\nDWORD WINAPI DriverPackageGetPathW(PCWSTR,PWSTR,DWORD*);\nDWORD WINAPI DriverPackageInstallA(PCSTR,DWORD,PCINSTALLERINFO_A,BOOL*);\nDWORD WINAPI DriverPackageInstallW(PCWSTR,DWORD,PCINSTALLERINFO_W,BOOL*);\nDWORD WINAPI DriverPackagePreinstallA(PCSTR,DWORD);\nDWORD WINAPI DriverPackagePreinstallW(PCWSTR,DWORD);\nDWORD WINAPI DriverPackageUninstallA(PCSTR,DWORD,PCINSTALLERINFO_A,BOOL*);\nDWORD WINAPI DriverPackageUninstallW(PCWSTR,DWORD,PCINSTALLERINFO_W,BOOL*);\nVOID  WINAPI SetDifxLogCallbackA(DIFXLOGCALLBACK_A,VOID*);\nVOID  WINAPI SetDifxLogCallbackW(DIFXLOGCALLBACK_W,VOID*);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* __WINE_DIFXAPI_H */\n"
  },
  {
    "path": "wine/windows/digitalv.h",
    "content": "/*\n * Copyright (C) 1999 Eric Pouech\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DIGITALV_H\n#define __WINE_DIGITALV_H\n\n/*\n * Wine Digital Video extensions\n */\n\n#include <pshpack1.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define MCI_TEST                            __MSABI_LONG(0x00000020)\n\n/* Message values */\n\n#define MCI_CAPTURE                         0x0870\n#define MCI_MONITOR                         0x0871\n#define MCI_RESERVE                         0x0872\n#define MCI_SETAUDIO                        0x0873\n#define MCI_SIGNAL                          0x0875\n#define MCI_SETVIDEO                        0x0876\n#define MCI_QUALITY                         0x0877\n#define MCI_LIST                            0x0878\n#define MCI_UNDO                            0x0879\n#define MCI_CONFIGURE                       0x087A\n#define MCI_RESTORE                         0x087B\n\n/* Return and string constant values */\n\n#define MCI_ON   1\n#define MCI_OFF  0\n\n#define MCI_DGV_FILE_MODE_SAVING            0x0001\n#define MCI_DGV_FILE_MODE_LOADING           0x0002\n#define MCI_DGV_FILE_MODE_EDITING           0x0003\n#define MCI_DGV_FILE_MODE_IDLE              0x0004\n\n/* These identifiers are used only by device drivers */\n\n#define MCI_ON_S                            __MSABI_LONG(0x00008000)\n#define MCI_OFF_S                           __MSABI_LONG(0x00008001)\n#define MCI_DGV_FILE_S                      __MSABI_LONG(0x00008002)\n#define MCI_DGV_INPUT_S                     __MSABI_LONG(0x00008003)\n\n#define MCI_DGV_FILE_MODE_SAVING_S          __MSABI_LONG(0x00008004)\n#define MCI_DGV_FILE_MODE_LOADING_S         __MSABI_LONG(0x00008005)\n#define MCI_DGV_FILE_MODE_EDITING_S         __MSABI_LONG(0x00008006)\n#define MCI_DGV_FILE_MODE_IDLE_S            __MSABI_LONG(0x00008007)\n\n#define MCI_DGV_SETVIDEO_SRC_NTSC_S         __MSABI_LONG(0x00008010)\n#define MCI_DGV_SETVIDEO_SRC_RGB_S          __MSABI_LONG(0x00008011)\n#define MCI_DGV_SETVIDEO_SRC_SVIDEO_S       __MSABI_LONG(0x00008012)\n#define MCI_DGV_SETVIDEO_SRC_PAL_S          __MSABI_LONG(0x00008013)\n#define MCI_DGV_SETVIDEO_SRC_SECAM_S        __MSABI_LONG(0x00008014)\n#define MCI_DGV_SETVIDEO_SRC_GENERIC_S      __MSABI_LONG(0x00008015)\n\n#define MCI_DGV_SETAUDIO_SRC_LEFT_S         __MSABI_LONG(0x00008020)\n#define MCI_DGV_SETAUDIO_SRC_RIGHT_S        __MSABI_LONG(0x00008021)\n#define MCI_DGV_SETAUDIO_SRC_AVERAGE_S      __MSABI_LONG(0x00008022)\n#define MCI_DGV_SETAUDIO_SRC_STEREO_S       __MSABI_LONG(0x00008023)\n\n/* Window message for signal notification */\n\n#ifndef MM_MCISIGNAL\n#define MM_MCISIGNAL                        0x3CB\n#endif\n\n/* error values */\n\n#define MCIERR_DGV_DEVICE_LIMIT             (MCIERR_CUSTOM_DRIVER_BASE+0)\n#define MCIERR_DGV_IOERR                    (MCIERR_CUSTOM_DRIVER_BASE+1)\n#define MCIERR_DGV_WORKSPACE_EMPTY          (MCIERR_CUSTOM_DRIVER_BASE+2)\n#define MCIERR_DGV_DISK_FULL                (MCIERR_CUSTOM_DRIVER_BASE+3)\n#define MCIERR_DGV_DEVICE_MEMORY_FULL       (MCIERR_CUSTOM_DRIVER_BASE+4)\n#define MCIERR_DGV_BAD_CLIPBOARD_RANGE      (MCIERR_CUSTOM_DRIVER_BASE+5)\n\n/* defines for monitor methods */\n\n#define MCI_DGV_METHOD_PRE                  __MSABI_LONG(0x0000a000)\n#define MCI_DGV_METHOD_POST                 __MSABI_LONG(0x0000a001)\n#define MCI_DGV_METHOD_DIRECT               __MSABI_LONG(0x0000a002)\n\n/* defines for known file formats */\n\n#define MCI_DGV_FF_AVSS                     __MSABI_LONG(0x00004000)\n#define MCI_DGV_FF_AVI                      __MSABI_LONG(0x00004001)\n#define MCI_DGV_FF_DIB                      __MSABI_LONG(0x00004002)\n#define MCI_DGV_FF_RDIB                     __MSABI_LONG(0x00004003)\n#define MCI_DGV_FF_JPEG                     __MSABI_LONG(0x00004004)\n#define MCI_DGV_FF_RJPEG                    __MSABI_LONG(0x00004005)\n#define MCI_DGV_FF_JFIF                     __MSABI_LONG(0x00004006)\n#define MCI_DGV_FF_MPEG                     __MSABI_LONG(0x00004007)\n\n/* values for dwItem field of MCI_CAPABILITY_PARMS structure */\n\n#define MCI_DGV_GETDEVCAPS_CAN_LOCK         __MSABI_LONG(0x00004000)\n#define MCI_DGV_GETDEVCAPS_CAN_STRETCH      __MSABI_LONG(0x00004001)\n#define MCI_DGV_GETDEVCAPS_CAN_FREEZE       __MSABI_LONG(0x00004002)\n#define MCI_DGV_GETDEVCAPS_MAX_WINDOWS      __MSABI_LONG(0x00004003)\n#define MCI_DGV_GETDEVCAPS_CAN_REVERSE      __MSABI_LONG(0x00004004)\n#define MCI_DGV_GETDEVCAPS_HAS_STILL        __MSABI_LONG(0x00004005)\n#define MCI_DGV_GETDEVCAPS_PALETTES         __MSABI_LONG(0x00004006)\n#define MCI_DGV_GETDEVCAPS_CAN_STR_IN       __MSABI_LONG(0x00004008)\n#define MCI_DGV_GETDEVCAPS_CAN_TEST         __MSABI_LONG(0x00004009)\n#define MCI_DGV_GETDEVCAPS_MAXIMUM_RATE     __MSABI_LONG(0x0000400a)\n#define MCI_DGV_GETDEVCAPS_MINIMUM_RATE     __MSABI_LONG(0x0000400b)\n\n/* flags for dwFlags parameter of MCI_CAPTURE command message */\n\n#define MCI_DGV_CAPTURE_AS                  __MSABI_LONG(0x00010000)\n#define MCI_DGV_CAPTURE_AT                  __MSABI_LONG(0x00020000)\n\n/* flags for dwFlags parameter of MCI_COPY command message */\n\n#define MCI_DGV_COPY_AT                     __MSABI_LONG(0x00010000)\n#define MCI_DGV_COPY_AUDIO_STREAM           __MSABI_LONG(0x00020000)\n#define MCI_DGV_COPY_VIDEO_STREAM           __MSABI_LONG(0x00040000)\n\n/* flags for dwFlags parameter of MCI_CUE command message */\n\n#define MCI_DGV_CUE_INPUT                   __MSABI_LONG(0x00010000)\n#define MCI_DGV_CUE_OUTPUT                  __MSABI_LONG(0x00020000)\n#define MCI_DGV_CUE_NOSHOW                  __MSABI_LONG(0x00040000)\n\n/* flags for dwFlags parameter of MCI_CUT command message */\n\n#define MCI_DGV_CUT_AT                      __MSABI_LONG(0x00010000)\n#define MCI_DGV_CUT_AUDIO_STREAM            __MSABI_LONG(0x00020000)\n#define MCI_DGV_CUT_VIDEO_STREAM            __MSABI_LONG(0x00040000)\n\n/* flags for dwFlags parameter of MCI_DELETE command message */\n\n#define MCI_DGV_DELETE_AT                   __MSABI_LONG(0x00010000)\n#define MCI_DGV_DELETE_AUDIO_STREAM         __MSABI_LONG(0x00020000)\n#define MCI_DGV_DELETE_VIDEO_STREAM         __MSABI_LONG(0x00040000)\n\n/* flags for dwFlags parameter of MCI_FREEZE command message */\n\n#define MCI_DGV_FREEZE_AT                   __MSABI_LONG(0x00010000)\n#define MCI_DGV_FREEZE_OUTSIDE              __MSABI_LONG(0x00020000)\n\n/* flags for dwFlags parameter of MCI_INFO command message */\n\n#define MCI_DGV_INFO_TEXT                   __MSABI_LONG(0x00010000)\n#define MCI_DGV_INFO_ITEM                   __MSABI_LONG(0x00020000)\n\n/* values for dwItem field of MCI_DGV_INFO_PARMS structure */\n\n#define MCI_INFO_VERSION                    __MSABI_LONG(0x00000400)\n\n#define MCI_DGV_INFO_USAGE                  __MSABI_LONG(0x00004000)\n#define MCI_DGV_INFO_AUDIO_QUALITY          __MSABI_LONG(0x00004001)\n#define MCI_DGV_INFO_STILL_QUALITY          __MSABI_LONG(0x00004002)\n#define MCI_DGV_INFO_VIDEO_QUALITY          __MSABI_LONG(0x00004003)\n#define MCI_DGV_INFO_AUDIO_ALG              __MSABI_LONG(0x00004004)\n#define MCI_DGV_INFO_STILL_ALG              __MSABI_LONG(0x00004005)\n#define MCI_DGV_INFO_VIDEO_ALG              __MSABI_LONG(0x00004006)\n\n/* flags for dwFlags parameter of MCI_LIST command message */\n\n#define MCI_DGV_LIST_ITEM                   __MSABI_LONG(0x00010000)\n#define MCI_DGV_LIST_COUNT                  __MSABI_LONG(0x00020000)\n#define MCI_DGV_LIST_NUMBER                 __MSABI_LONG(0x00040000)\n#define MCI_DGV_LIST_ALG                    __MSABI_LONG(0x00080000)\n\n/* values for dwItem field of MCI_DGV_LIST_PARMS structure */\n\n#define MCI_DGV_LIST_AUDIO_ALG              __MSABI_LONG(0x00004000)\n#define MCI_DGV_LIST_AUDIO_QUALITY          __MSABI_LONG(0x00004001)\n#define MCI_DGV_LIST_AUDIO_STREAM           __MSABI_LONG(0x00004002)\n#define MCI_DGV_LIST_STILL_ALG              __MSABI_LONG(0x00004003)\n#define MCI_DGV_LIST_STILL_QUALITY          __MSABI_LONG(0x00004004)\n#define MCI_DGV_LIST_VIDEO_ALG              __MSABI_LONG(0x00004005)\n#define MCI_DGV_LIST_VIDEO_QUALITY          __MSABI_LONG(0x00004006)\n#define MCI_DGV_LIST_VIDEO_STREAM           __MSABI_LONG(0x00004007)\n#define MCI_DGV_LIST_VIDEO_SOURCE           __MSABI_LONG(0x00004008)\n\n\n/* flags for dwFlags parameter of MCI_MONITOR command message */\n\n#define MCI_DGV_MONITOR_METHOD              __MSABI_LONG(0x00010000)\n#define MCI_DGV_MONITOR_SOURCE              __MSABI_LONG(0x00020000)\n\n/* values for dwSource parameter of the MCI_DGV_MONITOR_PARMS structure */\n\n#define MCI_DGV_MONITOR_INPUT               __MSABI_LONG(0x00004000)\n#define MCI_DGV_MONITOR_FILE                __MSABI_LONG(0x00004001)\n\n/* flags for dwFlags parameter of MCI_OPEN command message */\n\n#define MCI_DGV_OPEN_WS                     __MSABI_LONG(0x00010000)\n#define MCI_DGV_OPEN_PARENT                 __MSABI_LONG(0x00020000)\n#define MCI_DGV_OPEN_NOSTATIC               __MSABI_LONG(0x00040000)\n#define MCI_DGV_OPEN_16BIT                  __MSABI_LONG(0x00080000)\n#define MCI_DGV_OPEN_32BIT                  __MSABI_LONG(0x00100000)\n\n/* flags for dwFlags parameter of MCI_PASTE command message */\n\n#define MCI_DGV_PASTE_AT                    __MSABI_LONG(0x00010000)\n#define MCI_DGV_PASTE_AUDIO_STREAM          __MSABI_LONG(0x00020000)\n#define MCI_DGV_PASTE_VIDEO_STREAM          __MSABI_LONG(0x00040000)\n#define MCI_DGV_PASTE_INSERT                __MSABI_LONG(0x00080000)\n#define MCI_DGV_PASTE_OVERWRITE             __MSABI_LONG(0x00100000)\n\n/* flags for dwFlags parameter of MCI_PLAY command message */\n\n#define MCI_DGV_PLAY_REPEAT                 __MSABI_LONG(0x00010000)\n#define MCI_DGV_PLAY_REVERSE                __MSABI_LONG(0x00020000)\n\n/* flags for dwFlags parameter of MCI_PUT command message */\n\n#define MCI_DGV_RECT                        __MSABI_LONG(0x00010000)\n#define MCI_DGV_PUT_SOURCE                  __MSABI_LONG(0x00020000)\n#define MCI_DGV_PUT_DESTINATION             __MSABI_LONG(0x00040000)\n#define MCI_DGV_PUT_FRAME                   __MSABI_LONG(0x00080000)\n#define MCI_DGV_PUT_VIDEO                   __MSABI_LONG(0x00100000)\n#define MCI_DGV_PUT_WINDOW                  __MSABI_LONG(0x00200000)\n#define MCI_DGV_PUT_CLIENT                  __MSABI_LONG(0x00400000)\n\n/* flags for dwFlags parameter of MCI_QUALITY command message */\n\n#define MCI_QUALITY_ITEM                    __MSABI_LONG(0x00010000)\n#define MCI_QUALITY_NAME                    __MSABI_LONG(0x00020000)\n#define MCI_QUALITY_ALG                     __MSABI_LONG(0x00040000)\n#define MCI_QUALITY_DIALOG                  __MSABI_LONG(0x00080000)\n#define MCI_QUALITY_HANDLE                  __MSABI_LONG(0x00100000)\n\n/* values for dwItem field of MCI_QUALITY_PARMS structure */\n\n#define MCI_QUALITY_ITEM_AUDIO              __MSABI_LONG(0x00004000)\n#define MCI_QUALITY_ITEM_STILL              __MSABI_LONG(0x00004001)\n#define MCI_QUALITY_ITEM_VIDEO              __MSABI_LONG(0x00004002)\n\n/* flags for dwFlags parameter of MCI_REALIZE command message */\n\n#define MCI_DGV_REALIZE_NORM                __MSABI_LONG(0x00010000)\n#define MCI_DGV_REALIZE_BKGD                __MSABI_LONG(0x00020000)\n\n/* flags for dwFlags parameter of MCI_RECORD command message */\n\n#define MCI_DGV_RECORD_HOLD                 __MSABI_LONG(0x00020000)\n#define MCI_DGV_RECORD_AUDIO_STREAM         __MSABI_LONG(0x00040000)\n#define MCI_DGV_RECORD_VIDEO_STREAM         __MSABI_LONG(0x00080000)\n\n/* flags for dwFlags parameters of MCI_RESERVE command message */\n\n#define MCI_DGV_RESERVE_IN                  __MSABI_LONG(0x00010000)\n#define MCI_DGV_RESERVE_SIZE                __MSABI_LONG(0x00020000)\n\n/* flags for dwFlags parameter of MCI_RESTORE command message */\n\n#define MCI_DGV_RESTORE_FROM                __MSABI_LONG(0x00010000)\n#define MCI_DGV_RESTORE_AT                  __MSABI_LONG(0x00020000)\n\n/* flags for dwFlags parameters of MCI_SAVE command message */\n\n#define MCI_DGV_SAVE_ABORT                  __MSABI_LONG(0x00020000)\n#define MCI_DGV_SAVE_KEEPRESERVE            __MSABI_LONG(0x00040000)\n\n/* flags for dwFlags parameters of MCI_SET command message */\n\n#define MCI_DGV_SET_SEEK_EXACTLY            __MSABI_LONG(0x00010000)\n#define MCI_DGV_SET_SPEED                   __MSABI_LONG(0x00020000)\n#define MCI_DGV_SET_STILL                   __MSABI_LONG(0x00040000)\n#define MCI_DGV_SET_FILEFORMAT              __MSABI_LONG(0x00080000)\n\n/* flags for the dwFlags parameter of MCI_SETAUDIO command message */\n\n#define MCI_DGV_SETAUDIO_OVER               __MSABI_LONG(0x00010000)\n#define MCI_DGV_SETAUDIO_CLOCKTIME          __MSABI_LONG(0x00020000)\n#define MCI_DGV_SETAUDIO_ALG                __MSABI_LONG(0x00040000)\n#define MCI_DGV_SETAUDIO_QUALITY            __MSABI_LONG(0x00080000)\n#define MCI_DGV_SETAUDIO_RECORD             __MSABI_LONG(0x00100000)\n#define MCI_DGV_SETAUDIO_LEFT               __MSABI_LONG(0x00200000)\n#define MCI_DGV_SETAUDIO_RIGHT              __MSABI_LONG(0x00400000)\n#define MCI_DGV_SETAUDIO_ITEM               __MSABI_LONG(0x00800000)\n#define MCI_DGV_SETAUDIO_VALUE              __MSABI_LONG(0x01000000)\n#define MCI_DGV_SETAUDIO_INPUT              __MSABI_LONG(0x02000000)\n#define MCI_DGV_SETAUDIO_OUTPUT             __MSABI_LONG(0x04000000)\n\n/* values for the dwItem parameter of MCI_DGV_SETAUDIO_PARMS */\n\n#define MCI_DGV_SETAUDIO_TREBLE             __MSABI_LONG(0x00004000)\n#define MCI_DGV_SETAUDIO_BASS               __MSABI_LONG(0x00004001)\n#define MCI_DGV_SETAUDIO_VOLUME             __MSABI_LONG(0x00004002)\n#define MCI_DGV_SETAUDIO_STREAM             __MSABI_LONG(0x00004003)\n#define MCI_DGV_SETAUDIO_SOURCE             __MSABI_LONG(0x00004004)\n#define MCI_DGV_SETAUDIO_SAMPLESPERSEC      __MSABI_LONG(0x00004005)\n#define MCI_DGV_SETAUDIO_AVGBYTESPERSEC     __MSABI_LONG(0x00004006)\n#define MCI_DGV_SETAUDIO_BLOCKALIGN         __MSABI_LONG(0x00004007)\n#define MCI_DGV_SETAUDIO_BITSPERSAMPLE      __MSABI_LONG(0x00004008)\n\n/* values for the dwValue parameter of MCI_DGV_SETAUDIO_PARMS\n   used with MCI_DGV_SETAUDIO_SOURCE */\n\n#define MCI_DGV_SETAUDIO_SOURCE_STEREO      __MSABI_LONG(0x00000000)\n#define MCI_DGV_SETAUDIO_SOURCE_LEFT        __MSABI_LONG(0x00000001)\n#define MCI_DGV_SETAUDIO_SOURCE_RIGHT       __MSABI_LONG(0x00000002)\n#define MCI_DGV_SETAUDIO_SOURCE_AVERAGE     __MSABI_LONG(0x00004000)\n\n/* flags for the dwFlags parameter of MCI_SETVIDEO command */\n\n#define MCI_DGV_SETVIDEO_QUALITY            __MSABI_LONG(0x00010000)\n#define MCI_DGV_SETVIDEO_ALG                __MSABI_LONG(0x00020000)\n#define MCI_DGV_SETVIDEO_CLOCKTIME          __MSABI_LONG(0x00040000)\n#define MCI_DGV_SETVIDEO_SRC_NUMBER         __MSABI_LONG(0x00080000)\n#define MCI_DGV_SETVIDEO_ITEM               __MSABI_LONG(0x00100000)\n#define MCI_DGV_SETVIDEO_OVER               __MSABI_LONG(0x00200000)\n#define MCI_DGV_SETVIDEO_RECORD             __MSABI_LONG(0x00400000)\n#define MCI_DGV_SETVIDEO_STILL              __MSABI_LONG(0x00800000)\n#define MCI_DGV_SETVIDEO_VALUE              __MSABI_LONG(0x01000000)\n#define MCI_DGV_SETVIDEO_INPUT              __MSABI_LONG(0x02000000)\n#define MCI_DGV_SETVIDEO_OUTPUT             __MSABI_LONG(0x04000000)\n\n/* values for the dwTo field of MCI_SETVIDEO_PARMS\n   used with MCI_DGV_SETVIDEO_SOURCE */\n\n#define MCI_DGV_SETVIDEO_SRC_NTSC           __MSABI_LONG(0x00004000)\n#define MCI_DGV_SETVIDEO_SRC_RGB            __MSABI_LONG(0x00004001)\n#define MCI_DGV_SETVIDEO_SRC_SVIDEO         __MSABI_LONG(0x00004002)\n#define MCI_DGV_SETVIDEO_SRC_PAL            __MSABI_LONG(0x00004003)\n#define MCI_DGV_SETVIDEO_SRC_SECAM          __MSABI_LONG(0x00004004)\n#define MCI_DGV_SETVIDEO_SRC_GENERIC        __MSABI_LONG(0x00004005)\n\n/* values for the dwItem field of MCI_SETVIDEO_PARMS */\n\n#define MCI_DGV_SETVIDEO_BRIGHTNESS         __MSABI_LONG(0x00004000)\n#define MCI_DGV_SETVIDEO_COLOR              __MSABI_LONG(0x00004001)\n#define MCI_DGV_SETVIDEO_CONTRAST           __MSABI_LONG(0x00004002)\n#define MCI_DGV_SETVIDEO_TINT               __MSABI_LONG(0x00004003)\n#define MCI_DGV_SETVIDEO_SHARPNESS          __MSABI_LONG(0x00004004)\n#define MCI_DGV_SETVIDEO_GAMMA              __MSABI_LONG(0x00004005)\n#define MCI_DGV_SETVIDEO_STREAM             __MSABI_LONG(0x00004006)\n#define MCI_DGV_SETVIDEO_PALHANDLE          __MSABI_LONG(0x00004007)\n#define MCI_DGV_SETVIDEO_FRAME_RATE         __MSABI_LONG(0x00004008)\n#define MCI_DGV_SETVIDEO_SOURCE             __MSABI_LONG(0x00004009)\n#define MCI_DGV_SETVIDEO_KEY_INDEX          __MSABI_LONG(0x0000400a)\n#define MCI_DGV_SETVIDEO_KEY_COLOR          __MSABI_LONG(0x0000400b)\n#define MCI_DGV_SETVIDEO_BITSPERPEL         __MSABI_LONG(0x0000400c)\n\n/* flags for the dwFlags parameter of MCI_SIGNAL */\n\n#define MCI_DGV_SIGNAL_AT                   __MSABI_LONG(0x00010000)\n#define MCI_DGV_SIGNAL_EVERY                __MSABI_LONG(0x00020000)\n#define MCI_DGV_SIGNAL_USERVAL              __MSABI_LONG(0x00040000)\n#define MCI_DGV_SIGNAL_CANCEL               __MSABI_LONG(0x00080000)\n#define MCI_DGV_SIGNAL_POSITION             __MSABI_LONG(0x00100000)\n\n/* flags for the dwFlags parameter of MCI_STATUS command */\n\n#define MCI_DGV_STATUS_NOMINAL              __MSABI_LONG(0x00020000)\n#define MCI_DGV_STATUS_REFERENCE            __MSABI_LONG(0x00040000)\n#define MCI_DGV_STATUS_LEFT                 __MSABI_LONG(0x00080000)\n#define MCI_DGV_STATUS_RIGHT                __MSABI_LONG(0x00100000)\n#define MCI_DGV_STATUS_DISKSPACE            __MSABI_LONG(0x00200000)\n#define MCI_DGV_STATUS_INPUT                __MSABI_LONG(0x00400000)\n#define MCI_DGV_STATUS_OUTPUT               __MSABI_LONG(0x00800000)\n#define MCI_DGV_STATUS_RECORD               __MSABI_LONG(0x01000000)\n\n/* values for dwItem field of MCI_STATUS_PARMS structure */\n\n#define MCI_DGV_STATUS_AUDIO_INPUT          __MSABI_LONG(0x00004000)\n#define MCI_DGV_STATUS_HWND                 __MSABI_LONG(0x00004001)\n#define MCI_DGV_STATUS_SPEED                __MSABI_LONG(0x00004003)\n#define MCI_DGV_STATUS_HPAL                 __MSABI_LONG(0x00004004)\n#define MCI_DGV_STATUS_BRIGHTNESS           __MSABI_LONG(0x00004005)\n#define MCI_DGV_STATUS_COLOR                __MSABI_LONG(0x00004006)\n#define MCI_DGV_STATUS_CONTRAST             __MSABI_LONG(0x00004007)\n#define MCI_DGV_STATUS_FILEFORMAT           __MSABI_LONG(0x00004008)\n#define MCI_DGV_STATUS_AUDIO_SOURCE         __MSABI_LONG(0x00004009)\n#define MCI_DGV_STATUS_GAMMA                __MSABI_LONG(0x0000400a)\n#define MCI_DGV_STATUS_MONITOR              __MSABI_LONG(0x0000400b)\n#define MCI_DGV_STATUS_MONITOR_METHOD       __MSABI_LONG(0x0000400c)\n#define MCI_DGV_STATUS_FRAME_RATE           __MSABI_LONG(0x0000400e)\n#define MCI_DGV_STATUS_BASS                 __MSABI_LONG(0x0000400f)\n#define MCI_DGV_STATUS_SIZE                 __MSABI_LONG(0x00004010)\n#define MCI_DGV_STATUS_SEEK_EXACTLY         __MSABI_LONG(0x00004011)\n#define MCI_DGV_STATUS_SHARPNESS            __MSABI_LONG(0x00004012)\n#define MCI_DGV_STATUS_SMPTE                __MSABI_LONG(0x00004013)\n#define MCI_DGV_STATUS_AUDIO                __MSABI_LONG(0x00004014)\n#define MCI_DGV_STATUS_TINT                 __MSABI_LONG(0x00004015)\n#define MCI_DGV_STATUS_TREBLE               __MSABI_LONG(0x00004016)\n#define MCI_DGV_STATUS_UNSAVED              __MSABI_LONG(0x00004017)\n#define MCI_DGV_STATUS_VIDEO                __MSABI_LONG(0x00004018)\n#define MCI_DGV_STATUS_VOLUME               __MSABI_LONG(0x00004019)\n#define MCI_DGV_STATUS_AUDIO_RECORD         __MSABI_LONG(0x0000401a)\n#define MCI_DGV_STATUS_VIDEO_SOURCE         __MSABI_LONG(0x0000401b)\n#define MCI_DGV_STATUS_VIDEO_RECORD         __MSABI_LONG(0x0000401c)\n#define MCI_DGV_STATUS_STILL_FILEFORMAT     __MSABI_LONG(0x0000401d)\n#define MCI_DGV_STATUS_VIDEO_SRC_NUM        __MSABI_LONG(0x0000401e)\n#define MCI_DGV_STATUS_FILE_MODE            __MSABI_LONG(0x0000401f)\n#define MCI_DGV_STATUS_FILE_COMPLETION      __MSABI_LONG(0x00004020)\n#define MCI_DGV_STATUS_WINDOW_VISIBLE       __MSABI_LONG(0x00004021)\n#define MCI_DGV_STATUS_WINDOW_MINIMIZED     __MSABI_LONG(0x00004022)\n#define MCI_DGV_STATUS_WINDOW_MAXIMIZED     __MSABI_LONG(0x00004023)\n#define MCI_DGV_STATUS_KEY_INDEX            __MSABI_LONG(0x00004024)\n#define MCI_DGV_STATUS_KEY_COLOR            __MSABI_LONG(0x00004025)\n#define MCI_DGV_STATUS_PAUSE_MODE           __MSABI_LONG(0x00004026)\n#define MCI_DGV_STATUS_SAMPLESPERSEC        __MSABI_LONG(0x00004027)\n#define MCI_DGV_STATUS_AVGBYTESPERSEC       __MSABI_LONG(0x00004028)\n#define MCI_DGV_STATUS_BLOCKALIGN           __MSABI_LONG(0x00004029)\n#define MCI_DGV_STATUS_BITSPERSAMPLE        __MSABI_LONG(0x0000402a)\n#define MCI_DGV_STATUS_BITSPERPEL           __MSABI_LONG(0x0000402b)\n#define MCI_DGV_STATUS_FORWARD              __MSABI_LONG(0x0000402c)\n#define MCI_DGV_STATUS_AUDIO_STREAM         __MSABI_LONG(0x0000402d)\n#define MCI_DGV_STATUS_VIDEO_STREAM         __MSABI_LONG(0x0000402e)\n\n/* flags for dwFlags parameter of MCI_STEP command message */\n\n#define MCI_DGV_STEP_REVERSE                __MSABI_LONG(0x00010000)\n#define MCI_DGV_STEP_FRAMES                 __MSABI_LONG(0x00020000)\n\n/* flags for dwFlags parameter of MCI_STOP command message */\n\n#define MCI_DGV_STOP_HOLD                   __MSABI_LONG(0x00010000)\n\n/* flags for dwFlags parameter of MCI_UPDATE command message */\n\n#define MCI_DGV_UPDATE_HDC                  __MSABI_LONG(0x00020000)\n#define MCI_DGV_UPDATE_PAINT                __MSABI_LONG(0x00040000)\n\n/* flags for dwFlags parameter of MCI_WHERE command message */\n\n#define MCI_DGV_WHERE_SOURCE                __MSABI_LONG(0x00020000)\n#define MCI_DGV_WHERE_DESTINATION           __MSABI_LONG(0x00040000)\n#define MCI_DGV_WHERE_FRAME                 __MSABI_LONG(0x00080000)\n#define MCI_DGV_WHERE_VIDEO                 __MSABI_LONG(0x00100000)\n#define MCI_DGV_WHERE_WINDOW                __MSABI_LONG(0x00200000)\n#define MCI_DGV_WHERE_MAX                   __MSABI_LONG(0x00400000)\n\n/* flags for dwFlags parameter of MCI_WINDOW command message */\n\n#define MCI_DGV_WINDOW_HWND                 __MSABI_LONG(0x00010000)\n#define MCI_DGV_WINDOW_STATE                __MSABI_LONG(0x00040000)\n#define MCI_DGV_WINDOW_TEXT                 __MSABI_LONG(0x00080000)\n\n/* flags for hWnd parameter of MCI_DGV_WINDOW_PARMS parameter block */\n\n#define MCI_DGV_WINDOW_DEFAULT              __MSABI_LONG(0x00000000)\n\n/* parameter block for MCI_WHERE, MCI_PUT, MCI_FREEZE, MCI_UNFREEZE cmds */\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    RECT    rc;\n} MCI_DGV_RECT_PARMS, *LPMCI_DGV_RECT_PARMS;\n\n/* parameter block for MCI_CAPTURE command message */\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    LPSTR   lpstrFileName;\n    RECT    rc;\n} MCI_DGV_CAPTURE_PARMSA, *LPMCI_DGV_CAPTURE_PARMSA;\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    LPWSTR  lpstrFileName;\n    RECT    rc;\n} MCI_DGV_CAPTURE_PARMSW, *LPMCI_DGV_CAPTURE_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_DGV_CAPTURE_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_DGV_CAPTURE_PARMS)\n\n/* parameter block for MCI_CLOSE command message */\n\ntypedef MCI_GENERIC_PARMS MCI_CLOSE_PARMS, *LPMCI_CLOSE_PARMS;\n\n/* parameter block for MCI_COPY command message */\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    DWORD   dwFrom;\n    DWORD   dwTo;\n    RECT    rc;\n    DWORD   dwAudioStream;\n    DWORD   dwVideoStream;\n} MCI_DGV_COPY_PARMS, *LPMCI_DGV_COPY_PARMS;\n\n/* parameter block for MCI_CUE command message */\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    DWORD   dwTo;\n} MCI_DGV_CUE_PARMS, *LPMCI_DGV_CUE_PARMS;\n\n/* parameter block for MCI_CUT command message */\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    DWORD   dwFrom;\n    DWORD   dwTo;\n    RECT    rc;\n    DWORD   dwAudioStream;\n    DWORD   dwVideoStream;\n} MCI_DGV_CUT_PARMS, * LPMCI_DGV_CUT_PARMS;\n\n/* parameter block for MCI_DELETE command message */\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    DWORD   dwFrom;\n    DWORD   dwTo;\n    RECT    rc;\n    DWORD   dwAudioStream;\n    DWORD   dwVideoStream;\n} MCI_DGV_DELETE_PARMS, * LPMCI_DGV_DELETE_PARMS;\n\n/* parameter block for MCI_FREEZE command message */\n\ntypedef MCI_DGV_RECT_PARMS MCI_DGV_FREEZE_PARMS, * LPMCI_DGV_FREEZE_PARMS;\n\n/* parameter block for MCI_INFO command message */\n\ntypedef struct  {\n    DWORD_PTR dwCallback;\n    LPSTR   lpstrReturn;\n    DWORD   dwRetSize;\n    DWORD   dwItem;\n} MCI_DGV_INFO_PARMSA, * LPMCI_DGV_INFO_PARMSA;\n\ntypedef struct  {\n    DWORD_PTR dwCallback;\n    LPWSTR  lpstrReturn;\n    DWORD   dwRetSize;\n    DWORD   dwItem;\n} MCI_DGV_INFO_PARMSW, *LPMCI_DGV_INFO_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_DGV_INFO_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_DGV_INFO_PARMS)\n\n/* parameter block for MCI_LIST command message */\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    LPSTR   lpstrReturn;\n    DWORD   dwLength;\n    DWORD   dwNumber;\n    DWORD   dwItem;\n    LPSTR   lpstrAlgorithm;\n} MCI_DGV_LIST_PARMSA, *LPMCI_DGV_LIST_PARMSA;\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    LPWSTR  lpstrReturn;\n    DWORD   dwLength;\n    DWORD   dwNumber;\n    DWORD   dwItem;\n    LPWSTR  lpstrAlgorithm;\n} MCI_DGV_LIST_PARMSW, *LPMCI_DGV_LIST_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_DGV_LIST_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_DGV_LIST_PARMS)\n\n/* parameter block for MCI_LOAD command message */\n\ntypedef MCI_LOAD_PARMSA MCI_DGV_LOAD_PARMSA, * LPMCI_DGV_LOAD_PARMSA;\ntypedef MCI_LOAD_PARMSW MCI_DGV_LOAD_PARMSW, * LPMCI_DGV_LOAD_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_DGV_LOAD_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_DGV_LOAD_PARMS)\n\n/* parameter block for MCI_MONITOR command message */\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    DWORD   dwSource;\n    DWORD   dwMethod;\n} MCI_DGV_MONITOR_PARMS, * LPMCI_DGV_MONITOR_PARMS;\n\n/* parameter block for MCI_OPEN command message */\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    UINT    wDeviceID;\n    LPSTR   lpstrDeviceType;\n    LPSTR   lpstrElementName;\n    LPSTR   lpstrAlias;\n    DWORD   dwStyle;\n    HWND  hWndParent;\n} MCI_DGV_OPEN_PARMSA, *LPMCI_DGV_OPEN_PARMSA;\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    UINT    wDeviceID;\n    LPWSTR  lpstrDeviceType;\n    LPWSTR  lpstrElementName;\n    LPWSTR  lpstrAlias;\n    DWORD   dwStyle;\n    HWND  hWndParent;\n} MCI_DGV_OPEN_PARMSW, *LPMCI_DGV_OPEN_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_DGV_OPEN_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_DGV_OPEN_PARMS)\n\n/* parameter block for MCI_PAUSE command message */\n\ntypedef MCI_GENERIC_PARMS MCI_DGV_PAUSE_PARMS, * LPMCI_DGV_PAUSE_PARMS;\n\n/* parameter block for MCI_PASTE command message */\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    DWORD   dwTo;\n    RECT    rc;\n    DWORD   dwAudioStream;\n    DWORD   dwVideoStream;\n} MCI_DGV_PASTE_PARMS, * LPMCI_DGV_PASTE_PARMS;\n\n/* parameter block for MCI_PLAY command message */\n\ntypedef MCI_PLAY_PARMS MCI_DGV_PLAY_PARMS, * LPMCI_DGV_PLAY_PARMS;\n\n/* parameter block for MCI_PUT command message */\n\ntypedef MCI_DGV_RECT_PARMS MCI_DGV_PUT_PARMS, * LPMCI_DGV_PUT_PARMS;\n\n/* parameter block for MCI_QUALITY command message */\n\ntypedef struct {\n    DWORD_PTR   dwCallback;\n    DWORD       dwItem;\n    LPSTR       lpstrName;\n    DWORD       lpstrAlgorithm;\n    DWORD       dwHandle;\n} MCI_DGV_QUALITY_PARMSA, *LPMCI_DGV_QUALITY_PARMSA;\n\ntypedef struct {\n    DWORD_PTR   dwCallback;\n    DWORD       dwItem;\n    LPWSTR      lpstrName;\n    DWORD       lpstrAlgorithm;\n    DWORD       dwHandle;\n} MCI_DGV_QUALITY_PARMSW, *LPMCI_DGV_QUALITY_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_DGV_QUALITY_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_DGV_QUALITY_PARMS)\n\n/* parameter block for MCI_REALIZE command message */\n\ntypedef MCI_GENERIC_PARMS MCI_REALIZE_PARMS, * LPMCI_REALIZE_PARMS;\n\n/* parameter block for MCI_RECORD command message */\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    DWORD   dwFrom;\n    DWORD   dwTo;\n    RECT    rc;\n    DWORD   dwAudioStream;\n    DWORD   dwVideoStream;\n} MCI_DGV_RECORD_PARMS, * LPMCI_DGV_RECORD_PARMS;\n\n/* parameter block for MCI_RESERVE command message */\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    LPSTR   lpstrPath;\n    DWORD   dwSize;\n} MCI_DGV_RESERVE_PARMSA, *LPMCI_DGV_RESERVE_PARMSA;\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    LPWSTR  lpstrPath;\n    DWORD   dwSize;\n} MCI_DGV_RESERVE_PARMSW, *LPMCI_DGV_RESERVE_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_DGV_RESERVE_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_DGV_RESERVE_PARMS)\n\n/* parameter block for MCI_RESTORE command message */\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    LPSTR   lpstrFileName;\n    RECT    rc;\n} MCI_DGV_RESTORE_PARMSA, *LPMCI_DGV_RESTORE_PARMSA;\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    LPWSTR  lpstrFileName;\n    RECT    rc;\n} MCI_DGV_RESTORE_PARMSW, *LPMCI_DGV_RESTORE_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_DGV_RESTORE_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_DGV_RESTORE_PARMS)\n\n/* parameter block for MCI_RESUME command message */\n\ntypedef MCI_GENERIC_PARMS MCI_DGV_RESUME_PARMS, * LPMCI_DGV_RESUME_PARMS;\n\n/* parameter block for MCI_SAVE command message */\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    LPSTR   lpstrFileName;\n    RECT    rc;\n} MCI_DGV_SAVE_PARMSA, *LPMCI_DGV_SAVE_PARMSA;\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    LPWSTR  lpstrFileName;\n    RECT    rc;\n} MCI_DGV_SAVE_PARMSW, *LPMCI_DGV_SAVE_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_DGV_SAVE_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_DGV_SAVE_PARMS)\n\n/* parameter block for MCI_SET command message */\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    DWORD   dwTimeFormat;\n    DWORD   dwAudio;\n    DWORD   dwFileFormat;\n    DWORD   dwSpeed;\n} MCI_DGV_SET_PARMS, *LPMCI_DGV_SET_PARMS;\n\n/* parameter block for MCI_SETAUDIO command message */\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    DWORD   dwItem;\n    DWORD   dwValue;\n    DWORD   dwOver;\n    LPSTR   lpstrAlgorithm;\n    LPSTR   lpstrQuality;\n} MCI_DGV_SETAUDIO_PARMSA, *LPMCI_DGV_SETAUDIO_PARMSA;\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    DWORD   dwItem;\n    DWORD   dwValue;\n    DWORD   dwOver;\n    LPWSTR  lpstrAlgorithm;\n    LPWSTR  lpstrQuality;\n} MCI_DGV_SETAUDIO_PARMSW, *LPMCI_DGV_SETAUDIO_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_DGV_SETAUDIO_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_DGV_SETAUDIO_PARMS)\n\n/* parameter block for MCI_SIGNAL command message */\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    DWORD   dwPosition;\n    DWORD   dwPeriod;\n    DWORD   dwUserParm;\n} MCI_DGV_SIGNAL_PARMS, * LPMCI_DGV_SIGNAL_PARMS;\n\n/* parameter block for MCI_SETVIDEO command message */\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    DWORD   dwItem;\n    DWORD   dwValue;\n    DWORD   dwOver;\n    LPSTR   lpstrAlgorithm;\n    LPSTR   lpstrQuality;\n    DWORD   dwSourceNumber;\n} MCI_DGV_SETVIDEO_PARMSA, *LPMCI_DGV_SETVIDEO_PARMSA;\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    DWORD   dwItem;\n    DWORD   dwValue;\n    DWORD   dwOver;\n    LPWSTR  lpstrAlgorithm;\n    LPWSTR  lpstrQuality;\n    DWORD   dwSourceNumber;\n} MCI_DGV_SETVIDEO_PARMSW, *LPMCI_DGV_SETVIDEO_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_DGV_SETVIDEO_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_DGV_SETVIDEO_PARMS)\n\n/* parameter block for MCI_STATUS command message */\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    DWORD_PTR dwReturn;\n    DWORD   dwItem;\n    DWORD   dwTrack;\n    LPSTR   lpstrDrive;\n    DWORD   dwReference;\n} MCI_DGV_STATUS_PARMSA, *LPMCI_DGV_STATUS_PARMSA;\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    DWORD_PTR dwReturn;\n    DWORD   dwItem;\n    DWORD   dwTrack;\n    LPWSTR  lpstrDrive;\n    DWORD   dwReference;\n} MCI_DGV_STATUS_PARMSW, *LPMCI_DGV_STATUS_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_DGV_STATUS_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_DGV_STATUS_PARMS)\n\n/* parameter block for MCI_STEP command message */\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    DWORD   dwFrames;\n} MCI_DGV_STEP_PARMS, *LPMCI_DGV_STEP_PARMS;\n\n/* parameter block for MCI_STOP command message */\n\ntypedef MCI_GENERIC_PARMS MCI_DGV_STOP_PARMS, * LPMCI_DGV_STOP_PARMS;\n\n/* parameter block for MCI_UNFREEZE command message */\n\ntypedef MCI_DGV_RECT_PARMS MCI_DGV_UNFREEZE_PARMS, * LPMCI_DGV_UNFREEZE_PARMS;\n\n/* parameter block for MCI_UPDATE command message */\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    RECT    rc;\n    HDC     hDC;\n} MCI_DGV_UPDATE_PARMS, * LPMCI_DGV_UPDATE_PARMS;\n\n/* parameter block for MCI_WHERE command message */\n\ntypedef MCI_DGV_RECT_PARMS MCI_DGV_WHERE_PARMS, * LPMCI_DGV_WHERE_PARMS;\n\n/* parameter block for MCI_WINDOW command message */\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    HWND    hWnd;\n    UINT    nCmdShow;\n    LPSTR   lpstrText;\n} MCI_DGV_WINDOW_PARMSA, *LPMCI_DGV_WINDOW_PARMSA;\n\ntypedef struct {\n    DWORD_PTR dwCallback;\n    HWND    hWnd;\n    UINT    nCmdShow;\n    LPWSTR  lpstrText;\n} MCI_DGV_WINDOW_PARMSW, *LPMCI_DGV_WINDOW_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_DGV_WINDOW_PARMS)\n\n#ifdef __cplusplus\n}\n#endif\n\n#include <poppack.h>\n\n#endif /* __WINE_DIGITALV_H */\n"
  },
  {
    "path": "wine/windows/dimm.idl",
    "content": "/*\n * Copyright 2007 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"unknwn.idl\";\n#endif\n\ncpp_quote(\"#include <imm.h>\")\n\ncpp_quote(\"#if 0\")\n\ntypedef struct {\n    LPSTR lpReading;\n    LPSTR lpWord;\n} REGISTERWORDA;\n\ntypedef struct {\n    LPWSTR lpReading;\n    LPWSTR lpWord;\n} REGISTERWORDW;\n\n#define LF_FACESIZE         32\n\ntypedef struct {\n    LONG lfHeight;\n    LONG lfWidth;\n    LONG lfEscapement;\n    LONG lfOrientation;\n    LONG lfWeight;\n    BYTE lfItalic;\n    BYTE lfUnderline;\n    BYTE lfStrikeOut;\n    BYTE lfCharSet;\n    BYTE lfOutPrecision;\n    BYTE lfClipPrecision;\n    BYTE lfQuality;\n    BYTE lfPitchAndFamily;\n    CHAR lfFaceName[LF_FACESIZE];\n} LOGFONTA;\n\ntypedef struct {\n    LONG  lfHeight;\n    LONG  lfWidth;\n    LONG  lfEscapement;\n    LONG  lfOrientation;\n    LONG  lfWeight;\n    BYTE  lfItalic;\n    BYTE  lfUnderline;\n    BYTE  lfStrikeOut;\n    BYTE  lfCharSet;\n    BYTE  lfOutPrecision;\n    BYTE  lfClipPrecision;\n    BYTE  lfQuality;\n    BYTE  lfPitchAndFamily;\n    WCHAR lfFaceName[LF_FACESIZE];\n} LOGFONTW;\n\ntypedef DWORD HIMC;\ntypedef DWORD HIMCC;\n\ntypedef struct {\n    DWORD dwIndex;\n    DWORD dwStyle;\n    POINT ptCurrentPos;\n    RECT  rcArea;\n} CANDIDATEFORM;\n\ntypedef struct {\n    DWORD dwStyle;\n    POINT ptCurrentPos;\n    RECT  rcArea;\n} COMPOSITIONFORM;\n\ntypedef struct {\n    DWORD dwSize;\n    DWORD dwStyle;\n    DWORD dwCount;\n    DWORD dwSelection;\n    DWORD dwPageStart;\n    DWORD dwPageSize;\n    DWORD dwOffset[1];\n} CANDIDATELIST;\n\n#define STYLE_DESCRIPTION_SIZE  32\n\ntypedef struct {\n    DWORD dwStyle;\n    CHAR  szDescription[STYLE_DESCRIPTION_SIZE];\n} STYLEBUFA;\n\ntypedef struct {\n    DWORD dwStyle;\n    WCHAR szDescription[STYLE_DESCRIPTION_SIZE];\n} STYLEBUFW;\n\ntypedef WORD ATOM;\n\n#define IMEMENUITEM_STRING_SIZE 80\n\ntypedef struct {\n    UINT    cbSize;\n    UINT    fType;\n    UINT    fState;\n    UINT    wID;\n    HBITMAP hbmpChecked;\n    HBITMAP hbmpUnchecked;\n    DWORD   dwItemData;\n    CHAR    szString[IMEMENUITEM_STRING_SIZE];\n    HBITMAP hbmpItem;\n} IMEMENUITEMINFOA;\n\ntypedef struct {\n    UINT    cbSize;\n    UINT    fType;\n    UINT    fState;\n    UINT    wID;\n    HBITMAP hbmpChecked;\n    HBITMAP hbmpUnchecked;\n    DWORD   dwItemData;\n    WCHAR   szString[IMEMENUITEM_STRING_SIZE];\n    HBITMAP hbmpItem;\n} IMEMENUITEMINFOW;\n\ncpp_quote(\"#endif\")\n\n[\n    object,\n    uuid(08c03412-f96b-11d0-a475-00aa006bcc59),\n    pointer_default(unique)\n]\ninterface IEnumRegisterWordA : IUnknown\n{\n    HRESULT Clone(\n            [out] IEnumRegisterWordA **ppEnum);\n\n    HRESULT Next(\n            [in]  ULONG ulCount,\n            [out] REGISTERWORDA *rgRegisterword,\n            [out] ULONG *pcFetched);\n\n    HRESULT Reset();\n\n    HRESULT Skip(\n            [in]  ULONG ulCount);\n}\n\n[\n    object,\n    uuid(4955dd31-b159-11d0-8fcf-00aa006bcc59),\n    pointer_default(unique)\n]\ninterface IEnumRegisterWordW : IUnknown\n{\n    HRESULT Clone(\n            [out] IEnumRegisterWordW **ppEnum);\n\n    HRESULT Next(\n            [in]  ULONG ulCount,\n            [out] REGISTERWORDW *rgRegisterword,\n            [out] ULONG *pcFetched);\n\n    HRESULT Reset();\n\n    HRESULT Skip(\n            [in]  ULONG ulCount);\n}\n\n[\n    object,\n    uuid(09b5eab0-f997-11d1-93d4-0060b067b86e),\n    pointer_default(unique),\n    local\n]\ninterface IEnumInputContext : IUnknown\n{\n    HRESULT Clone(\n            [out] IEnumInputContext **ppEnum);\n\n    HRESULT Next(\n            [in]  ULONG ulCount,\n            [out] HIMC *rgInputContext,\n            [out] ULONG *pcFetched);\n\n    HRESULT Reset();\n\n    HRESULT Skip(\n            [in]  ULONG ulCount);\n}\n\n[\n    object,\n    uuid(08c0e040-62d1-11d1-9326-0060b067b86e),\n    pointer_default(unique),\n    local\n]\ninterface IActiveIMMApp : IUnknown\n{\n    HRESULT AssociateContext(\n            [in]  HWND hWnd,\n            [in]  HIMC hIME,\n            [out] HIMC *phPrev);\n\n    HRESULT ConfigureIMEA(\n            [in]  HKL hKL,\n            [in]  HWND hwnd,\n            [in]  DWORD dwMode,\n            [in]  REGISTERWORDA *pData);\n\n    HRESULT ConfigureIMEW(\n            [in]  HKL hKL,\n            [in]  HWND hWnd,\n            [in]  DWORD dwMode,\n            [in]  REGISTERWORDW *pData);\n\n    HRESULT CreateContext(\n            [out] HIMC *phIMC);\n\n    HRESULT DestroyContext(\n            [in]  HIMC hIME);\n\n    HRESULT EnumRegisterWordA(\n            [in]  HKL hKL,\n            [in]  LPSTR szReading,\n            [in]  DWORD dwStyle,\n            [in]  LPSTR szRegister,\n            [in]  LPVOID pData,\n            [out] IEnumRegisterWordA **pEnum);\n\n    HRESULT EnumRegisterWordW(\n            [in]  HKL hKL,\n            [in]  LPWSTR szReading,\n            [in]  DWORD dwStyle,\n            [in]  LPWSTR szRegister,\n            [in]  LPVOID pData,\n            [out] IEnumRegisterWordW **pEnum);\n\n    HRESULT EscapeA(\n            [in]  HKL hKL,\n            [in]  HIMC hIMC,\n            [in]  UINT uEscape,\n            [in, out] LPVOID pData,\n            [out] LRESULT *plResult);\n\n    HRESULT EscapeW(\n            [in]  HKL hKL,\n            [in]  HIMC hIMC,\n            [in]  UINT uEscape,\n            [in, out] LPVOID pData,\n            [out] LRESULT *plResult);\n\n    HRESULT GetCandidateListA(\n            [in]  HIMC hIMC,\n            [in]  DWORD dwIndex,\n            [in]  UINT uBufLen,\n            [out] CANDIDATELIST *pCandList,\n            [out] UINT *puCopied);\n\n    HRESULT GetCandidateListW(\n            [in]  HIMC hIMC,\n            [in]  DWORD dwIndex,\n            [in]  UINT uBufLen,\n            [out] CANDIDATELIST *pCandList,\n            [out] UINT *puCopied);\n\n    HRESULT GetCandidateListCountA(\n            [in]  HIMC hIMC,\n            [out] DWORD *pdwListSize,\n            [out] DWORD *pdwBufLen);\n\n    HRESULT GetCandidateListCountW(\n            [in]  HIMC hIMC,\n            [out] DWORD *pdwListSize,\n            [out] DWORD *pdwBufLen);\n\n    HRESULT GetCandidateWindow(\n            [in]  HIMC hIMC,\n            [in]  DWORD dwIndex,\n            [out] CANDIDATEFORM *pCandidate);\n\n    HRESULT GetCompositionFontA(\n            [in]  HIMC hIMC,\n            [out] LOGFONTA *plf);\n\n    HRESULT GetCompositionFontW(\n            [in]  HIMC hIMC,\n            [out] LOGFONTW *plf);\n\n    HRESULT GetCompositionStringA(\n            [in]  HIMC hIMC,\n            [in]  DWORD dwIndex,\n            [in]  DWORD dwBufLen,\n            [out] LONG *plCopied,\n            [out] LPVOID pBuf);\n\n    HRESULT GetCompositionStringW(\n            [in]  HIMC hIMC,\n            [in]  DWORD dwIndex,\n            [in]  DWORD dwBufLen,\n            [out] LONG *plCopied,\n            [out] LPVOID pBuf);\n\n    HRESULT GetCompositionWindow(\n            [in]  HIMC hIMC,\n            [out] COMPOSITIONFORM *pCompForm);\n\n    HRESULT GetContext(\n            [in]  HWND hwnd,\n            [out] HIMC *phIMC);\n\n    HRESULT GetConversionListA(\n            [in]  HKL hKL,\n            [in]  HIMC hIMC,\n            [in]  LPSTR pSrc,\n            [in]  UINT uBufLen,\n            [in]  UINT uFlag,\n            [out] CANDIDATELIST *pDst,\n            [out] UINT *puCopied);\n\n    HRESULT GetConversionListW(\n            [in]  HKL hKL,\n            [in]  HIMC hIMC,\n            [in]  LPWSTR pSrc,\n            [in]  UINT uBufLen,\n            [in]  UINT uFlag,\n            [out] CANDIDATELIST *pDst,\n            [out] UINT *puCopied);\n\n    HRESULT GetConversionStatus(\n            [in] HIMC hIMC,\n            [out] DWORD *pfdwConversion,\n            [out] DWORD *pfdwSentence);\n\n    HRESULT GetDefaultIMEWnd(\n            [in] HWND hWnd,\n            [out] HWND *phDefWnd);\n\n    HRESULT GetDescriptionA(\n            [in]  HKL hKL,\n            [in]  UINT uBufLen,\n            [out] LPSTR szDescription,\n            [out] UINT *puCopied);\n\n    HRESULT GetDescriptionW(\n            [in]  HKL hKL,\n            [in]  UINT uBufLen,\n            [out] LPWSTR szDescription,\n            [out] UINT *puCopied);\n\n    HRESULT GetGuideLineA(\n            [in]  HIMC hIMC,\n            [in]  DWORD dwIndex,\n            [in]  DWORD dwBufLen,\n            [out] LPSTR pBuf,\n            [out] DWORD *pdwResult);\n\n    HRESULT GetGuideLineW(\n            [in]  HIMC hIMC,\n            [in]  DWORD dwIndex,\n            [in]  DWORD dwBufLen,\n            [out] LPWSTR pBuf,\n            [out] DWORD *pdwResult);\n\n    HRESULT GetIMEFileNameA(\n            [in]  HKL hKL,\n            [in]  UINT uBufLen,\n            [out] LPSTR szFileName,\n            [out] UINT *puCopied);\n\n    HRESULT GetIMEFileNameW(\n            [in]  HKL hKL,\n            [in]  UINT uBufLen,\n            [out] LPWSTR szFileName,\n            [out] UINT *puCopied);\n\n    HRESULT GetOpenStatus(\n            [in]  HIMC hIMC);\n\n    HRESULT GetProperty(\n            [in]  HKL hKL,\n            [in]  DWORD fdwIndex,\n            [out] DWORD *pdwProperty);\n\n    HRESULT GetRegisterWordStyleA(\n            [in]  HKL hKL,\n            [in]  UINT nItem,\n            [out] STYLEBUFA *pStyleBuf,\n            [out] UINT *puCopied);\n\n    HRESULT GetRegisterWordStyleW(\n            [in]  HKL hKL,\n            [in]  UINT nItem,\n            [out] STYLEBUFW *pStyleBuf,\n            [out] UINT *puCopied);\n\n    HRESULT GetStatusWindowPos(\n            [in]  HIMC hIMC,\n            [out] POINT *pptPos);\n\n    HRESULT GetVirtualKey(\n            [in]  HWND hWnd,\n            [out] UINT *puVirtualKey);\n\n    HRESULT InstallIMEA(\n            [in]  LPSTR szIMEFileName,\n            [in]  LPSTR szLayoutText,\n            [out] HKL *phKL);\n\n    HRESULT InstallIMEW(\n            [in]  LPWSTR szIMEFileName,\n            [in]  LPWSTR szLayoutText,\n            [out] HKL *phKL);\n\n    HRESULT IsIME(\n            [in]  HKL hKL);\n\n    HRESULT IsUIMessageA(\n            [in]  HWND hWndIME,\n            [in]  UINT msg,\n            [in]  WPARAM wParam,\n            [in]  LPARAM lParam);\n\n    HRESULT IsUIMessageW(\n            [in]  HWND hWndIME,\n            [in]  UINT msg,\n            [in]  WPARAM wParam,\n            [in]  LPARAM lParam);\n\n    HRESULT NotifyIME(\n            [in]  HIMC hIMC,\n            [in]  DWORD dwAction,\n            [in]  DWORD dwIndex,\n            [in]  DWORD dwValue);\n\n    HRESULT RegisterWordA(\n            [in]  HKL hKL,\n            [in]  LPSTR szReading,\n            [in]  DWORD dwStyle,\n            [in]  LPSTR szRegister);\n\n    HRESULT RegisterWordW(\n            [in]  HKL hKL,\n            [in]  LPWSTR szReading,\n            [in]  DWORD dwStyle,\n            [in]  LPWSTR szRegister);\n\n    HRESULT ReleaseContext(\n            [in]  HWND hWnd,\n            [in]  HIMC hIMC);\n\n    HRESULT SetCandidateWindow(\n            [in]  HIMC hIMC,\n            [in]  CANDIDATEFORM *pCandidate);\n\n    HRESULT SetCompositionFontA(\n            [in]  HIMC hIMC,\n            [in]  LOGFONTA *plf);\n\n    HRESULT SetCompositionFontW(\n            [in]  HIMC hIMC,\n            [in]  LOGFONTW *plf);\n\n    HRESULT SetCompositionStringA(\n            [in]  HIMC hIMC,\n            [in]  DWORD dwIndex,\n            [in]  LPVOID pComp,\n            [in]  DWORD dwCompLen,\n            [in]  LPVOID pRead,\n            [in]  DWORD dwReadLen);\n\n    HRESULT SetCompositionStringW(\n            [in]  HIMC hIMC,\n            [in]  DWORD dwIndex,\n            [in]  LPVOID pComp,\n            [in]  DWORD dwCompLen,\n            [in]  LPVOID pRead,\n            [in]  DWORD dwReadLen);\n\n    HRESULT SetCompositionWindow(\n            [in]  HIMC hIMC,\n            [in]  COMPOSITIONFORM *pCompForm);\n\n    HRESULT SetConversionStatus(\n            [in]  HIMC hIMC,\n            [in]  DWORD fdwConversion,\n            [in]  DWORD fdwSentence);\n\n    HRESULT SetOpenStatus(\n            [in]  HIMC hIMC,\n            [in]  BOOL fOpen);\n\n    HRESULT SetStatusWindowPos(\n            [in]  HIMC hIMC,\n            [in]  POINT *pptPos);\n\n    HRESULT SimulateHotKey(\n            [in]  HWND hwnd,\n            [in]  DWORD dwHotKeyID);\n\n    HRESULT UnregisterWordA(\n            [in]  HKL hKL,\n            [in]  LPSTR szReading,\n            [in]  DWORD dwStyle,\n            [in]  LPSTR szUnregister);\n\n    HRESULT UnregisterWordW(\n            [in]  HKL hKL,\n            [in]  LPWSTR szReading,\n            [in]  DWORD dwStyle,\n            [in]  LPWSTR szUnregister);\n\n    HRESULT Activate(\n            [in]  BOOL fRestoreLayout);\n\n    HRESULT Deactivate();\n\n    HRESULT OnDefWindowProc(\n            [in]  HWND hWnd,\n            [in]  UINT Msg,\n            [in]  WPARAM wParam,\n            [in]  LPARAM lParam,\n            [out] LRESULT *plResult);\n\n    HRESULT FilterClientWindows(\n            [in]  ATOM *aaClassList,\n            [in]  UINT uSize);\n\n    HRESULT GetCodePageA(\n            [in]  HKL hKL,\n            [out] UINT *uCodePage);\n\n    HRESULT GetLangId(\n            [in]  HKL hKL,\n            [out] LANGID *plid);\n\n    HRESULT AssociateContextEx(\n            [in]  HWND hWnd,\n            [in]  HIMC hIMC,\n            [in]  DWORD dwFlags);\n\n    HRESULT DisableIME(\n            [in]  DWORD idThread);\n\n    HRESULT GetImeMenuItemsA(\n            [in]  HIMC hIMC,\n            [in]  DWORD dwFlags,\n            [in]  DWORD dwType,\n            [in]  IMEMENUITEMINFOA *pImeParentMenu,\n            [out] IMEMENUITEMINFOA *pImeMenu,\n            [in]  DWORD dwSize,\n            [out] DWORD *pdwResult);\n\n    HRESULT GetImeMenuItemsW(\n            [in]  HIMC hIMC,\n            [in]  DWORD dwFlags,\n            [in]  DWORD dwType,\n            [in]  IMEMENUITEMINFOW *pImeParentMenu,\n            [out] IMEMENUITEMINFOW *pImeMenu,\n            [in]  DWORD dwSize,\n            [out] DWORD *pdwResult);\n\n    HRESULT EnumInputContext(\n            [in]  DWORD idThread,\n            [out] IEnumInputContext **ppEnum);\n}\n\n[\n    object,\n    uuid(b5cf2cfa-8aeb-11d1-9364-0060b067b86e),\n    pointer_default(unique)\n]\ninterface IActiveIMMMessagePumpOwner : IUnknown\n{\n    HRESULT Start();\n    HRESULT End();\n    HRESULT OnTranslateMessage([in] const MSG *msg);\n    HRESULT Pause([out] DWORD *cookie);\n    HRESULT Resume([in] DWORD cookie);\n}\n\n[\n    uuid(4955dd33-b159-11d0-8fcf-00aa006bcc59)\n]\ncoclass CActiveIMM\n{\n    [default] interface IActiveIMMApp;\n    /* interface IActiveIMMIME; */\n    /* interface IActiveIMMRegistrar; */\n    interface IActiveIMMMessagePumpOwner;\n}\n"
  },
  {
    "path": "wine/windows/dinput.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __DINPUT_INCLUDED__\n#define __DINPUT_INCLUDED__\n\n#define COM_NO_WINDOWS_H\n#include <objbase.h>\n\n#ifndef DIRECTINPUT_VERSION\n#define DIRECTINPUT_VERSION\t0x0800\n#endif\n\n/* Classes */\nDEFINE_GUID(CLSID_DirectInput,\t\t0x25E609E0,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(CLSID_DirectInputDevice,\t0x25E609E1,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\n\nDEFINE_GUID(CLSID_DirectInput8,\t\t0x25E609E4,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(CLSID_DirectInputDevice8,\t0x25E609E5,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\n\n/* Interfaces */\nDEFINE_GUID(IID_IDirectInputA,\t\t0x89521360,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(IID_IDirectInputW,\t\t0x89521361,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(IID_IDirectInput2A,\t\t0x5944E662,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(IID_IDirectInput2W,\t\t0x5944E663,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(IID_IDirectInput7A,\t\t0x9A4CB684,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE);\nDEFINE_GUID(IID_IDirectInput7W,\t\t0x9A4CB685,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE);\nDEFINE_GUID(IID_IDirectInput8A,\t\t0xBF798030,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00);\nDEFINE_GUID(IID_IDirectInput8W,\t\t0xBF798031,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00);\nDEFINE_GUID(IID_IDirectInputDeviceA,\t0x5944E680,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(IID_IDirectInputDeviceW,\t0x5944E681,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(IID_IDirectInputDevice2A,\t0x5944E682,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(IID_IDirectInputDevice2W,\t0x5944E683,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(IID_IDirectInputDevice7A,\t0x57D7C6BC,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE);\nDEFINE_GUID(IID_IDirectInputDevice7W,\t0x57D7C6BD,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE);\nDEFINE_GUID(IID_IDirectInputDevice8A,\t0x54D41080,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79);\nDEFINE_GUID(IID_IDirectInputDevice8W,\t0x54D41081,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79);\nDEFINE_GUID(IID_IDirectInputEffect,\t0xE7E1F7C0,0x88D2,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\n\n/* Predefined object types */\nDEFINE_GUID(GUID_XAxis,\t0xA36D02E0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_YAxis,\t0xA36D02E1,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_ZAxis,\t0xA36D02E2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_RxAxis,0xA36D02F4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_RyAxis,0xA36D02F5,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_RzAxis,0xA36D02E3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_Slider,0xA36D02E4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_Button,0xA36D02F0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_Key,\t0x55728220,0xD33C,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_POV,\t0xA36D02F2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_Unknown,0xA36D02F3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\n\n/* Predefined product GUIDs */\nDEFINE_GUID(GUID_SysMouse,\t0x6F1D2B60,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_SysKeyboard,\t0x6F1D2B61,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_Joystick,\t0x6F1D2B70,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_SysMouseEm,\t0x6F1D2B80,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_SysMouseEm2,\t0x6F1D2B81,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_SysKeyboardEm,\t0x6F1D2B82,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_SysKeyboardEm2,0x6F1D2B83,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\n\n/* predefined forcefeedback effects */\nDEFINE_GUID(GUID_ConstantForce,\t0x13541C20,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\nDEFINE_GUID(GUID_RampForce,\t0x13541C21,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\nDEFINE_GUID(GUID_Square,\t0x13541C22,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\nDEFINE_GUID(GUID_Sine,\t\t0x13541C23,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\nDEFINE_GUID(GUID_Triangle,\t0x13541C24,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\nDEFINE_GUID(GUID_SawtoothUp,\t0x13541C25,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\nDEFINE_GUID(GUID_SawtoothDown,\t0x13541C26,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\nDEFINE_GUID(GUID_Spring,\t0x13541C27,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\nDEFINE_GUID(GUID_Damper,\t0x13541C28,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\nDEFINE_GUID(GUID_Inertia,\t0x13541C29,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\nDEFINE_GUID(GUID_Friction,\t0x13541C2A,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\nDEFINE_GUID(GUID_CustomForce,\t0x13541C2B,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\n\ntypedef struct IDirectInputA *LPDIRECTINPUTA;\ntypedef struct IDirectInputW *LPDIRECTINPUTW;\ntypedef struct IDirectInput2A *LPDIRECTINPUT2A;\ntypedef struct IDirectInput2W *LPDIRECTINPUT2W;\ntypedef struct IDirectInput7A *LPDIRECTINPUT7A;\ntypedef struct IDirectInput7W *LPDIRECTINPUT7W;\ntypedef struct IDirectInput8A *LPDIRECTINPUT8A;\ntypedef struct IDirectInput8W *LPDIRECTINPUT8W;\ntypedef struct IDirectInputDeviceA *LPDIRECTINPUTDEVICEA;\ntypedef struct IDirectInputDeviceW *LPDIRECTINPUTDEVICEW;\ntypedef struct IDirectInputDevice2A *LPDIRECTINPUTDEVICE2A;\ntypedef struct IDirectInputDevice2W *LPDIRECTINPUTDEVICE2W;\ntypedef struct IDirectInputDevice7A *LPDIRECTINPUTDEVICE7A;\ntypedef struct IDirectInputDevice7W *LPDIRECTINPUTDEVICE7W;\ntypedef struct IDirectInputDevice8A *LPDIRECTINPUTDEVICE8A;\ntypedef struct IDirectInputDevice8W *LPDIRECTINPUTDEVICE8W;\ntypedef struct IDirectInputEffect *LPDIRECTINPUTEFFECT;\ntypedef struct SysKeyboardA *LPSYSKEYBOARDA;\ntypedef struct SysMouseA *LPSYSMOUSEA;\n\n#define IID_IDirectInput WINELIB_NAME_AW(IID_IDirectInput)\nDECL_WINELIB_TYPE_AW(LPDIRECTINPUT)\n#define IID_IDirectInput2 WINELIB_NAME_AW(IID_IDirectInput2)\nDECL_WINELIB_TYPE_AW(LPDIRECTINPUT2)\n#define IID_IDirectInput7 WINELIB_NAME_AW(IID_IDirectInput7)\nDECL_WINELIB_TYPE_AW(LPDIRECTINPUT7)\n#define IID_IDirectInput8 WINELIB_NAME_AW(IID_IDirectInput8)\nDECL_WINELIB_TYPE_AW(LPDIRECTINPUT8)\n#define IID_IDirectInputDevice WINELIB_NAME_AW(IID_IDirectInputDevice)\nDECL_WINELIB_TYPE_AW(LPDIRECTINPUTDEVICE)\n#define IID_IDirectInputDevice2 WINELIB_NAME_AW(IID_IDirectInputDevice2)\nDECL_WINELIB_TYPE_AW(LPDIRECTINPUTDEVICE2)\n#define IID_IDirectInputDevice7 WINELIB_NAME_AW(IID_IDirectInputDevice7)\nDECL_WINELIB_TYPE_AW(LPDIRECTINPUTDEVICE7)\n#define IID_IDirectInputDevice8 WINELIB_NAME_AW(IID_IDirectInputDevice8)\nDECL_WINELIB_TYPE_AW(LPDIRECTINPUTDEVICE8)\n\n#define DI_OK                           S_OK\n#define DI_NOTATTACHED                  S_FALSE\n#define DI_BUFFEROVERFLOW               S_FALSE\n#define DI_PROPNOEFFECT                 S_FALSE\n#define DI_NOEFFECT                     S_FALSE\n#define DI_POLLEDDEVICE                 ((HRESULT)0x00000002)\n#define DI_DOWNLOADSKIPPED              ((HRESULT)0x00000003)\n#define DI_EFFECTRESTARTED              ((HRESULT)0x00000004)\n#define DI_TRUNCATED                    ((HRESULT)0x00000008)\n#define DI_SETTINGSNOTSAVED             ((HRESULT)0x0000000B)\n#define DI_TRUNCATEDANDRESTARTED        ((HRESULT)0x0000000C)\n#define DI_WRITEPROTECT                 ((HRESULT)0x00000013)\n\n#define DIERR_OLDDIRECTINPUTVERSION     \\\n    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_OLD_WIN_VERSION)\n#define DIERR_BETADIRECTINPUTVERSION    \\\n    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_RMODE_APP)\n#define DIERR_BADDRIVERVER              \\\n    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BAD_DRIVER_LEVEL)\n#define DIERR_DEVICENOTREG              REGDB_E_CLASSNOTREG\n#define DIERR_NOTFOUND                  \\\n    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND)\n#define DIERR_OBJECTNOTFOUND            \\\n    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND)\n#define DIERR_INVALIDPARAM              E_INVALIDARG\n#define DIERR_NOINTERFACE               E_NOINTERFACE\n#define DIERR_GENERIC                   E_FAIL\n#define DIERR_OUTOFMEMORY               E_OUTOFMEMORY\n#define DIERR_UNSUPPORTED               E_NOTIMPL\n#define DIERR_NOTINITIALIZED            \\\n    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_READY)\n#define DIERR_ALREADYINITIALIZED        \\\n    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_ALREADY_INITIALIZED)\n#define DIERR_NOAGGREGATION             CLASS_E_NOAGGREGATION\n#define DIERR_OTHERAPPHASPRIO           E_ACCESSDENIED\n#define DIERR_INPUTLOST                 \\\n    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_READ_FAULT)\n#define DIERR_ACQUIRED                  \\\n    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BUSY)\n#define DIERR_NOTACQUIRED               \\\n    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_INVALID_ACCESS)\n#define DIERR_READONLY                  E_ACCESSDENIED\n#define DIERR_HANDLEEXISTS              E_ACCESSDENIED\n#ifndef E_PENDING\n#define E_PENDING                       __MSABI_LONG(0x8000000A)\n#endif\n#define DIERR_INSUFFICIENTPRIVS         __MSABI_LONG(0x80040200)\n#define DIERR_DEVICEFULL                __MSABI_LONG(0x80040201)\n#define DIERR_MOREDATA                  __MSABI_LONG(0x80040202)\n#define DIERR_NOTDOWNLOADED             __MSABI_LONG(0x80040203)\n#define DIERR_HASEFFECTS                __MSABI_LONG(0x80040204)\n#define DIERR_NOTEXCLUSIVEACQUIRED      __MSABI_LONG(0x80040205)\n#define DIERR_INCOMPLETEEFFECT          __MSABI_LONG(0x80040206)\n#define DIERR_NOTBUFFERED               __MSABI_LONG(0x80040207)\n#define DIERR_EFFECTPLAYING             __MSABI_LONG(0x80040208)\n#define DIERR_UNPLUGGED                 __MSABI_LONG(0x80040209)\n#define DIERR_REPORTFULL                __MSABI_LONG(0x8004020A)\n#define DIERR_MAPFILEFAIL               __MSABI_LONG(0x8004020B)\n\n#define DIENUM_STOP                     0\n#define DIENUM_CONTINUE                 1\n\n#define DIEDFL_ALLDEVICES               0x00000000\n#define DIEDFL_ATTACHEDONLY             0x00000001\n#define DIEDFL_FORCEFEEDBACK            0x00000100\n#define DIEDFL_INCLUDEALIASES           0x00010000\n#define DIEDFL_INCLUDEPHANTOMS          0x00020000\n#define DIEDFL_INCLUDEHIDDEN\t\t0x00040000\n\n#define DIDEVTYPE_DEVICE                1\n#define DIDEVTYPE_MOUSE                 2\n#define DIDEVTYPE_KEYBOARD              3\n#define DIDEVTYPE_JOYSTICK              4\n#define DIDEVTYPE_HID                   0x00010000\n\n#define DI8DEVCLASS_ALL             0\n#define DI8DEVCLASS_DEVICE          1\n#define DI8DEVCLASS_POINTER         2\n#define DI8DEVCLASS_KEYBOARD        3\n#define DI8DEVCLASS_GAMECTRL        4\n\n#define DI8DEVTYPE_DEVICE           0x11\n#define DI8DEVTYPE_MOUSE            0x12\n#define DI8DEVTYPE_KEYBOARD         0x13\n#define DI8DEVTYPE_JOYSTICK         0x14\n#define DI8DEVTYPE_GAMEPAD          0x15\n#define DI8DEVTYPE_DRIVING          0x16\n#define DI8DEVTYPE_FLIGHT           0x17\n#define DI8DEVTYPE_1STPERSON        0x18\n#define DI8DEVTYPE_DEVICECTRL       0x19\n#define DI8DEVTYPE_SCREENPOINTER    0x1A\n#define DI8DEVTYPE_REMOTE           0x1B\n#define DI8DEVTYPE_SUPPLEMENTAL     0x1C\n\t\n#define DIDEVTYPEMOUSE_UNKNOWN          1\n#define DIDEVTYPEMOUSE_TRADITIONAL      2\n#define DIDEVTYPEMOUSE_FINGERSTICK      3\n#define DIDEVTYPEMOUSE_TOUCHPAD         4\n#define DIDEVTYPEMOUSE_TRACKBALL        5\n\n#define DIDEVTYPEKEYBOARD_UNKNOWN       0\n#define DIDEVTYPEKEYBOARD_PCXT          1\n#define DIDEVTYPEKEYBOARD_OLIVETTI      2\n#define DIDEVTYPEKEYBOARD_PCAT          3\n#define DIDEVTYPEKEYBOARD_PCENH         4\n#define DIDEVTYPEKEYBOARD_NOKIA1050     5\n#define DIDEVTYPEKEYBOARD_NOKIA9140     6\n#define DIDEVTYPEKEYBOARD_NEC98         7\n#define DIDEVTYPEKEYBOARD_NEC98LAPTOP   8\n#define DIDEVTYPEKEYBOARD_NEC98106      9\n#define DIDEVTYPEKEYBOARD_JAPAN106     10\n#define DIDEVTYPEKEYBOARD_JAPANAX      11\n#define DIDEVTYPEKEYBOARD_J3100        12\n\n#define DIDEVTYPEJOYSTICK_UNKNOWN       1\n#define DIDEVTYPEJOYSTICK_TRADITIONAL   2\n#define DIDEVTYPEJOYSTICK_FLIGHTSTICK   3\n#define DIDEVTYPEJOYSTICK_GAMEPAD       4\n#define DIDEVTYPEJOYSTICK_RUDDER        5\n#define DIDEVTYPEJOYSTICK_WHEEL         6\n#define DIDEVTYPEJOYSTICK_HEADTRACKER   7\n\n#define DI8DEVTYPEMOUSE_UNKNOWN                     1\n#define DI8DEVTYPEMOUSE_TRADITIONAL                 2\n#define DI8DEVTYPEMOUSE_FINGERSTICK                 3\n#define DI8DEVTYPEMOUSE_TOUCHPAD                    4\n#define DI8DEVTYPEMOUSE_TRACKBALL                   5\n#define DI8DEVTYPEMOUSE_ABSOLUTE                    6\n\n#define DI8DEVTYPEKEYBOARD_UNKNOWN                  0\n#define DI8DEVTYPEKEYBOARD_PCXT                     1\n#define DI8DEVTYPEKEYBOARD_OLIVETTI                 2\n#define DI8DEVTYPEKEYBOARD_PCAT                     3\n#define DI8DEVTYPEKEYBOARD_PCENH                    4\n#define DI8DEVTYPEKEYBOARD_NOKIA1050                5\n#define DI8DEVTYPEKEYBOARD_NOKIA9140                6\n#define DI8DEVTYPEKEYBOARD_NEC98                    7\n#define DI8DEVTYPEKEYBOARD_NEC98LAPTOP              8\n#define DI8DEVTYPEKEYBOARD_NEC98106                 9\n#define DI8DEVTYPEKEYBOARD_JAPAN106                10\n#define DI8DEVTYPEKEYBOARD_JAPANAX                 11\n#define DI8DEVTYPEKEYBOARD_J3100                   12\n\n#define DI8DEVTYPE_LIMITEDGAMESUBTYPE               1\n\n#define DI8DEVTYPEJOYSTICK_LIMITED                  DI8DEVTYPE_LIMITEDGAMESUBTYPE\n#define DI8DEVTYPEJOYSTICK_STANDARD                 2\n\n#define DI8DEVTYPEGAMEPAD_LIMITED                   DI8DEVTYPE_LIMITEDGAMESUBTYPE\n#define DI8DEVTYPEGAMEPAD_STANDARD                  2\n#define DI8DEVTYPEGAMEPAD_TILT                      3\n\n#define DI8DEVTYPEDRIVING_LIMITED                   DI8DEVTYPE_LIMITEDGAMESUBTYPE\n#define DI8DEVTYPEDRIVING_COMBINEDPEDALS            2\n#define DI8DEVTYPEDRIVING_DUALPEDALS                3\n#define DI8DEVTYPEDRIVING_THREEPEDALS               4\n#define DI8DEVTYPEDRIVING_HANDHELD                  5\n\n#define DI8DEVTYPEFLIGHT_LIMITED                    DI8DEVTYPE_LIMITEDGAMESUBTYPE\n#define DI8DEVTYPEFLIGHT_STICK                      2\n#define DI8DEVTYPEFLIGHT_YOKE                       3\n#define DI8DEVTYPEFLIGHT_RC                         4\n\n#define DI8DEVTYPE1STPERSON_LIMITED                 DI8DEVTYPE_LIMITEDGAMESUBTYPE\n#define DI8DEVTYPE1STPERSON_UNKNOWN                 2\n#define DI8DEVTYPE1STPERSON_SIXDOF                  3\n#define DI8DEVTYPE1STPERSON_SHOOTER                 4\n\n#define DI8DEVTYPESCREENPTR_UNKNOWN                 2\n#define DI8DEVTYPESCREENPTR_LIGHTGUN                3\n#define DI8DEVTYPESCREENPTR_LIGHTPEN                4\n#define DI8DEVTYPESCREENPTR_TOUCH                   5\n\n#define DI8DEVTYPEREMOTE_UNKNOWN                    2\n\n#define DI8DEVTYPEDEVICECTRL_UNKNOWN                2\n#define DI8DEVTYPEDEVICECTRL_COMMSSELECTION         3\n#define DI8DEVTYPEDEVICECTRL_COMMSSELECTION_HARDWIRED 4\n\n#define DI8DEVTYPESUPPLEMENTAL_UNKNOWN              2\n#define DI8DEVTYPESUPPLEMENTAL_2NDHANDCONTROLLER    3\n#define DI8DEVTYPESUPPLEMENTAL_HEADTRACKER          4\n#define DI8DEVTYPESUPPLEMENTAL_HANDTRACKER          5\n#define DI8DEVTYPESUPPLEMENTAL_SHIFTSTICKGATE       6\n#define DI8DEVTYPESUPPLEMENTAL_SHIFTER              7\n#define DI8DEVTYPESUPPLEMENTAL_THROTTLE             8\n#define DI8DEVTYPESUPPLEMENTAL_SPLITTHROTTLE        9\n#define DI8DEVTYPESUPPLEMENTAL_COMBINEDPEDALS      10\n#define DI8DEVTYPESUPPLEMENTAL_DUALPEDALS          11\n#define DI8DEVTYPESUPPLEMENTAL_THREEPEDALS         12\n#define DI8DEVTYPESUPPLEMENTAL_RUDDERPEDALS        13\n\t\n#define GET_DIDEVICE_TYPE(dwDevType)     LOBYTE(dwDevType)\n#define GET_DIDEVICE_SUBTYPE(dwDevType)  HIBYTE(dwDevType)\n\ntypedef struct DIDEVICEOBJECTINSTANCE_DX3A {\n    DWORD   dwSize;\n    GUID    guidType;\n    DWORD   dwOfs;\n    DWORD   dwType;\n    DWORD   dwFlags;\n    CHAR    tszName[MAX_PATH];\n} DIDEVICEOBJECTINSTANCE_DX3A, *LPDIDEVICEOBJECTINSTANCE_DX3A;\ntypedef const DIDEVICEOBJECTINSTANCE_DX3A *LPCDIDEVICEOBJECTINSTANCE_DX3A;\ntypedef struct DIDEVICEOBJECTINSTANCE_DX3W {\n    DWORD   dwSize;\n    GUID    guidType;\n    DWORD   dwOfs;\n    DWORD   dwType;\n    DWORD   dwFlags;\n    WCHAR   tszName[MAX_PATH];\n} DIDEVICEOBJECTINSTANCE_DX3W, *LPDIDEVICEOBJECTINSTANCE_DX3W;\ntypedef const DIDEVICEOBJECTINSTANCE_DX3W *LPCDIDEVICEOBJECTINSTANCE_DX3W;\n\nDECL_WINELIB_TYPE_AW(DIDEVICEOBJECTINSTANCE_DX3)\nDECL_WINELIB_TYPE_AW(LPDIDEVICEOBJECTINSTANCE_DX3)\nDECL_WINELIB_TYPE_AW(LPCDIDEVICEOBJECTINSTANCE_DX3)\n\ntypedef struct DIDEVICEOBJECTINSTANCEA {\n    DWORD\tdwSize;\n    GUID\tguidType;\n    DWORD\tdwOfs;\n    DWORD\tdwType;\n    DWORD\tdwFlags;\n    CHAR\ttszName[MAX_PATH];\n    DWORD\tdwFFMaxForce;\n    DWORD\tdwFFForceResolution;\n    WORD\twCollectionNumber;\n    WORD\twDesignatorIndex;\n    WORD\twUsagePage;\n    WORD\twUsage;\n    DWORD\tdwDimension;\n    WORD\twExponent;\n    WORD\twReserved;\n} DIDEVICEOBJECTINSTANCEA, *LPDIDEVICEOBJECTINSTANCEA;\ntypedef const DIDEVICEOBJECTINSTANCEA *LPCDIDEVICEOBJECTINSTANCEA;\n\ntypedef struct DIDEVICEOBJECTINSTANCEW {\n    DWORD\tdwSize;\n    GUID\tguidType;\n    DWORD\tdwOfs;\n    DWORD\tdwType;\n    DWORD\tdwFlags;\n    WCHAR\ttszName[MAX_PATH];\n    DWORD\tdwFFMaxForce;\n    DWORD\tdwFFForceResolution;\n    WORD\twCollectionNumber;\n    WORD\twDesignatorIndex;\n    WORD\twUsagePage;\n    WORD\twUsage;\n    DWORD\tdwDimension;\n    WORD\twExponent;\n    WORD\twReserved;\n} DIDEVICEOBJECTINSTANCEW, *LPDIDEVICEOBJECTINSTANCEW;\ntypedef const DIDEVICEOBJECTINSTANCEW *LPCDIDEVICEOBJECTINSTANCEW;\n\nDECL_WINELIB_TYPE_AW(DIDEVICEOBJECTINSTANCE)\nDECL_WINELIB_TYPE_AW(LPDIDEVICEOBJECTINSTANCE)\nDECL_WINELIB_TYPE_AW(LPCDIDEVICEOBJECTINSTANCE)\n\ntypedef struct DIDEVICEINSTANCE_DX3A {\n    DWORD   dwSize;\n    GUID    guidInstance;\n    GUID    guidProduct;\n    DWORD   dwDevType;\n    CHAR    tszInstanceName[MAX_PATH];\n    CHAR    tszProductName[MAX_PATH];\n} DIDEVICEINSTANCE_DX3A, *LPDIDEVICEINSTANCE_DX3A;\ntypedef const DIDEVICEINSTANCE_DX3A *LPCDIDEVICEINSTANCE_DX3A;\ntypedef struct DIDEVICEINSTANCE_DX3W {\n    DWORD   dwSize;\n    GUID    guidInstance;\n    GUID    guidProduct;\n    DWORD   dwDevType;\n    WCHAR   tszInstanceName[MAX_PATH];\n    WCHAR   tszProductName[MAX_PATH];\n} DIDEVICEINSTANCE_DX3W, *LPDIDEVICEINSTANCE_DX3W;\ntypedef const DIDEVICEINSTANCE_DX3W *LPCDIDEVICEINSTANCE_DX3W;\n\nDECL_WINELIB_TYPE_AW(DIDEVICEINSTANCE_DX3)\nDECL_WINELIB_TYPE_AW(LPDIDEVICEINSTANCE_DX3)\nDECL_WINELIB_TYPE_AW(LPCDIDEVICEINSTANCE_DX3)\n\ntypedef struct DIDEVICEINSTANCEA {\n    DWORD\tdwSize;\n    GUID\tguidInstance;\n    GUID\tguidProduct;\n    DWORD\tdwDevType;\n    CHAR\ttszInstanceName[MAX_PATH];\n    CHAR\ttszProductName[MAX_PATH];\n    GUID\tguidFFDriver;\n    WORD\twUsagePage;\n    WORD\twUsage;\n} DIDEVICEINSTANCEA, *LPDIDEVICEINSTANCEA;\ntypedef const DIDEVICEINSTANCEA *LPCDIDEVICEINSTANCEA;\n\ntypedef struct DIDEVICEINSTANCEW {\n    DWORD\tdwSize;\n    GUID\tguidInstance;\n    GUID\tguidProduct;\n    DWORD\tdwDevType;\n    WCHAR\ttszInstanceName[MAX_PATH];\n    WCHAR\ttszProductName[MAX_PATH];\n    GUID\tguidFFDriver;\n    WORD\twUsagePage;\n    WORD\twUsage;\n} DIDEVICEINSTANCEW, *LPDIDEVICEINSTANCEW;\ntypedef const DIDEVICEINSTANCEW *LPCDIDEVICEINSTANCEW;\n\nDECL_WINELIB_TYPE_AW(DIDEVICEINSTANCE)\nDECL_WINELIB_TYPE_AW(LPDIDEVICEINSTANCE)\nDECL_WINELIB_TYPE_AW(LPCDIDEVICEINSTANCE)\n\ntypedef BOOL (CALLBACK *LPDIENUMDEVICESCALLBACKA)(LPCDIDEVICEINSTANCEA,LPVOID);\ntypedef BOOL (CALLBACK *LPDIENUMDEVICESCALLBACKW)(LPCDIDEVICEINSTANCEW,LPVOID);\nDECL_WINELIB_TYPE_AW(LPDIENUMDEVICESCALLBACK)\n\n#define DIEDBS_MAPPEDPRI1\t\t0x00000001\n#define DIEDBS_MAPPEDPRI2\t\t0x00000002\n#define DIEDBS_RECENTDEVICE\t\t0x00000010\n#define DIEDBS_NEWDEVICE\t\t0x00000020\n\n#define DIEDBSFL_ATTACHEDONLY\t\t0x00000000\n#define DIEDBSFL_THISUSER\t\t0x00000010\n#define DIEDBSFL_FORCEFEEDBACK\t\tDIEDFL_FORCEFEEDBACK\n#define DIEDBSFL_AVAILABLEDEVICES\t0x00001000\n#define DIEDBSFL_MULTIMICEKEYBOARDS\t0x00002000\n#define DIEDBSFL_NONGAMINGDEVICES\t0x00004000\n#define DIEDBSFL_VALID\t\t\t0x00007110\n\ntypedef BOOL (CALLBACK *LPDIENUMDEVICESBYSEMANTICSCBA)(LPCDIDEVICEINSTANCEA,LPDIRECTINPUTDEVICE8A,DWORD,DWORD,LPVOID);\ntypedef BOOL (CALLBACK *LPDIENUMDEVICESBYSEMANTICSCBW)(LPCDIDEVICEINSTANCEW,LPDIRECTINPUTDEVICE8W,DWORD,DWORD,LPVOID);\nDECL_WINELIB_TYPE_AW(LPDIENUMDEVICESBYSEMANTICSCB)\n\ntypedef BOOL (CALLBACK *LPDICONFIGUREDEVICESCALLBACK)(LPUNKNOWN,LPVOID);\n\ntypedef BOOL (CALLBACK *LPDIENUMDEVICEOBJECTSCALLBACKA)(LPCDIDEVICEOBJECTINSTANCEA,LPVOID);\ntypedef BOOL (CALLBACK *LPDIENUMDEVICEOBJECTSCALLBACKW)(LPCDIDEVICEOBJECTINSTANCEW,LPVOID);\nDECL_WINELIB_TYPE_AW(LPDIENUMDEVICEOBJECTSCALLBACK)\n\ntypedef BOOL (CALLBACK *LPDIENUMCREATEDEFFECTOBJECTSCALLBACK)(LPDIRECTINPUTEFFECT, LPVOID);\n\n#define DIK_ESCAPE          0x01\n#define DIK_1               0x02\n#define DIK_2               0x03\n#define DIK_3               0x04\n#define DIK_4               0x05\n#define DIK_5               0x06\n#define DIK_6               0x07\n#define DIK_7               0x08\n#define DIK_8               0x09\n#define DIK_9               0x0A\n#define DIK_0               0x0B\n#define DIK_MINUS           0x0C    /* - on main keyboard */\n#define DIK_EQUALS          0x0D\n#define DIK_BACK            0x0E    /* backspace */\n#define DIK_TAB             0x0F\n#define DIK_Q               0x10\n#define DIK_W               0x11\n#define DIK_E               0x12\n#define DIK_R               0x13\n#define DIK_T               0x14\n#define DIK_Y               0x15\n#define DIK_U               0x16\n#define DIK_I               0x17\n#define DIK_O               0x18\n#define DIK_P               0x19\n#define DIK_LBRACKET        0x1A\n#define DIK_RBRACKET        0x1B\n#define DIK_RETURN          0x1C    /* Enter on main keyboard */\n#define DIK_LCONTROL        0x1D\n#define DIK_A               0x1E\n#define DIK_S               0x1F\n#define DIK_D               0x20\n#define DIK_F               0x21\n#define DIK_G               0x22\n#define DIK_H               0x23\n#define DIK_J               0x24\n#define DIK_K               0x25\n#define DIK_L               0x26\n#define DIK_SEMICOLON       0x27\n#define DIK_APOSTROPHE      0x28\n#define DIK_GRAVE           0x29    /* accent grave */\n#define DIK_LSHIFT          0x2A\n#define DIK_BACKSLASH       0x2B\n#define DIK_Z               0x2C\n#define DIK_X               0x2D\n#define DIK_C               0x2E\n#define DIK_V               0x2F\n#define DIK_B               0x30\n#define DIK_N               0x31\n#define DIK_M               0x32\n#define DIK_COMMA           0x33\n#define DIK_PERIOD          0x34    /* . on main keyboard */\n#define DIK_SLASH           0x35    /* / on main keyboard */\n#define DIK_RSHIFT          0x36\n#define DIK_MULTIPLY        0x37    /* * on numeric keypad */\n#define DIK_LMENU           0x38    /* left Alt */\n#define DIK_SPACE           0x39\n#define DIK_CAPITAL         0x3A\n#define DIK_F1              0x3B\n#define DIK_F2              0x3C\n#define DIK_F3              0x3D\n#define DIK_F4              0x3E\n#define DIK_F5              0x3F\n#define DIK_F6              0x40\n#define DIK_F7              0x41\n#define DIK_F8              0x42\n#define DIK_F9              0x43\n#define DIK_F10             0x44\n#define DIK_NUMLOCK         0x45\n#define DIK_SCROLL          0x46    /* Scroll Lock */\n#define DIK_NUMPAD7         0x47\n#define DIK_NUMPAD8         0x48\n#define DIK_NUMPAD9         0x49\n#define DIK_SUBTRACT        0x4A    /* - on numeric keypad */\n#define DIK_NUMPAD4         0x4B\n#define DIK_NUMPAD5         0x4C\n#define DIK_NUMPAD6         0x4D\n#define DIK_ADD             0x4E    /* + on numeric keypad */\n#define DIK_NUMPAD1         0x4F\n#define DIK_NUMPAD2         0x50\n#define DIK_NUMPAD3         0x51\n#define DIK_NUMPAD0         0x52\n#define DIK_DECIMAL         0x53    /* . on numeric keypad */\n#define DIK_F11             0x57\n#define DIK_F12             0x58\n#define DIK_F13             0x64    /*                     (NEC PC98) */\n#define DIK_F14             0x65    /*                     (NEC PC98) */\n#define DIK_F15             0x66    /*                     (NEC PC98) */\n#define DIK_KANA            0x70    /* (Japanese keyboard)            */\n#define DIK_CONVERT         0x79    /* (Japanese keyboard)            */\n#define DIK_NOCONVERT       0x7B    /* (Japanese keyboard)            */\n#define DIK_YEN             0x7D    /* (Japanese keyboard)            */\n#define DIK_NUMPADEQUALS    0x8D    /* = on numeric keypad (NEC PC98) */\n#define DIK_CIRCUMFLEX      0x90    /* (Japanese keyboard)            */\n#define DIK_AT              0x91    /*                     (NEC PC98) */\n#define DIK_COLON           0x92    /*                     (NEC PC98) */\n#define DIK_UNDERLINE       0x93    /*                     (NEC PC98) */\n#define DIK_KANJI           0x94    /* (Japanese keyboard)            */\n#define DIK_STOP            0x95    /*                     (NEC PC98) */\n#define DIK_AX              0x96    /*                     (Japan AX) */\n#define DIK_UNLABELED       0x97    /*                        (J3100) */\n#define DIK_NUMPADENTER     0x9C    /* Enter on numeric keypad */\n#define DIK_RCONTROL        0x9D\n#define DIK_NUMPADCOMMA     0xB3    /* , on numeric keypad (NEC PC98) */\n#define DIK_DIVIDE          0xB5    /* / on numeric keypad */\n#define DIK_SYSRQ           0xB7\n#define DIK_RMENU           0xB8    /* right Alt */\n#define DIK_PAUSE           0xC5    /* Pause */\n#define DIK_HOME            0xC7    /* Home on arrow keypad */\n#define DIK_UP              0xC8    /* UpArrow on arrow keypad */\n#define DIK_PRIOR           0xC9    /* PgUp on arrow keypad */\n#define DIK_LEFT            0xCB    /* LeftArrow on arrow keypad */\n#define DIK_RIGHT           0xCD    /* RightArrow on arrow keypad */\n#define DIK_END             0xCF    /* End on arrow keypad */\n#define DIK_DOWN            0xD0    /* DownArrow on arrow keypad */\n#define DIK_NEXT            0xD1    /* PgDn on arrow keypad */\n#define DIK_INSERT          0xD2    /* Insert on arrow keypad */\n#define DIK_DELETE          0xD3    /* Delete on arrow keypad */\n#define DIK_LWIN            0xDB    /* Left Windows key */\n#define DIK_RWIN            0xDC    /* Right Windows key */\n#define DIK_APPS            0xDD    /* AppMenu key */\n#define DIK_POWER           0xDE\n#define DIK_SLEEP           0xDF\n#define DIK_BACKSPACE       DIK_BACK            /* backspace */\n#define DIK_NUMPADSTAR      DIK_MULTIPLY        /* * on numeric keypad */\n#define DIK_LALT            DIK_LMENU           /* left Alt */\n#define DIK_CAPSLOCK        DIK_CAPITAL         /* CapsLock */\n#define DIK_NUMPADMINUS     DIK_SUBTRACT        /* - on numeric keypad */\n#define DIK_NUMPADPLUS      DIK_ADD             /* + on numeric keypad */\n#define DIK_NUMPADPERIOD    DIK_DECIMAL         /* . on numeric keypad */\n#define DIK_NUMPADSLASH     DIK_DIVIDE          /* / on numeric keypad */\n#define DIK_RALT            DIK_RMENU           /* right Alt */\n#define DIK_UPARROW         DIK_UP              /* UpArrow on arrow keypad */\n#define DIK_PGUP            DIK_PRIOR           /* PgUp on arrow keypad */\n#define DIK_LEFTARROW       DIK_LEFT            /* LeftArrow on arrow keypad */\n#define DIK_RIGHTARROW      DIK_RIGHT           /* RightArrow on arrow keypad */\n#define DIK_DOWNARROW       DIK_DOWN            /* DownArrow on arrow keypad */\n#define DIK_PGDN            DIK_NEXT            /* PgDn on arrow keypad */\n\n/* New DirectInput8 style keyboard constants */\n\n#define DIKEYBOARD_ESCAPE               (DIK_ESCAPE | 0x81000400)\n#define DIKEYBOARD_1                    (DIK_1 | 0x81000400)\n#define DIKEYBOARD_2                    (DIK_2 | 0x81000400)\n#define DIKEYBOARD_3                    (DIK_3 | 0x81000400)\n#define DIKEYBOARD_4                    (DIK_4 | 0x81000400)\n#define DIKEYBOARD_5                    (DIK_5 | 0x81000400)\n#define DIKEYBOARD_6                    (DIK_6 | 0x81000400)\n#define DIKEYBOARD_7                    (DIK_7 | 0x81000400)\n#define DIKEYBOARD_8                    (DIK_8 | 0x81000400)\n#define DIKEYBOARD_9                    (DIK_9 | 0x81000400)\n#define DIKEYBOARD_0                    (DIK_0 | 0x81000400)\n#define DIKEYBOARD_MINUS                (DIK_MINUS | 0x81000400)\n#define DIKEYBOARD_EQUALS               (DIK_EQUALS | 0x81000400)\n#define DIKEYBOARD_BACK                 (DIK_BACK | 0x81000400)\n#define DIKEYBOARD_TAB                  (DIK_TAB | 0x81000400)\n#define DIKEYBOARD_Q                    (DIK_Q | 0x81000400)\n#define DIKEYBOARD_W                    (DIK_W | 0x81000400)\n#define DIKEYBOARD_E                    (DIK_E | 0x81000400)\n#define DIKEYBOARD_R                    (DIK_R | 0x81000400)\n#define DIKEYBOARD_T                    (DIK_T | 0x81000400)\n#define DIKEYBOARD_Y                    (DIK_Y | 0x81000400)\n#define DIKEYBOARD_U                    (DIK_U | 0x81000400)\n#define DIKEYBOARD_I                    (DIK_I | 0x81000400)\n#define DIKEYBOARD_O                    (DIK_O | 0x81000400)\n#define DIKEYBOARD_P                    (DIK_P | 0x81000400)\n#define DIKEYBOARD_LBRACKET             (DIK_LBRACKET | 0x81000400)\n#define DIKEYBOARD_RBRACKET             (DIK_RBRACKET | 0x81000400)\n#define DIKEYBOARD_RETURN               (DIK_RETURN | 0x81000400)\n#define DIKEYBOARD_LCONTROL             (DIK_LCONTROL | 0x81000400)\n#define DIKEYBOARD_A                    (DIK_A | 0x81000400)\n#define DIKEYBOARD_S                    (DIK_S | 0x81000400)\n#define DIKEYBOARD_D                    (DIK_D | 0x81000400)\n#define DIKEYBOARD_F                    (DIK_F | 0x81000400)\n#define DIKEYBOARD_G                    (DIK_G | 0x81000400)\n#define DIKEYBOARD_H                    (DIK_H | 0x81000400)\n#define DIKEYBOARD_J                    (DIK_J | 0x81000400)\n#define DIKEYBOARD_K                    (DIK_K | 0x81000400)\n#define DIKEYBOARD_L                    (DIK_L | 0x81000400)\n#define DIKEYBOARD_SEMICOLON            (DIK_SEMICOLON | 0x81000400)\n#define DIKEYBOARD_APOSTROPHE           (DIK_APOSTROPHE | 0x81000400)\n#define DIKEYBOARD_GRAVE                (DIK_GRAVE | 0x81000400)\n#define DIKEYBOARD_LSHIFT               (DIK_LSHIFT | 0x81000400)\n#define DIKEYBOARD_BACKSLASH            (DIK_BACKSLASH | 0x81000400)\n#define DIKEYBOARD_Z                    (DIK_Z | 0x81000400)\n#define DIKEYBOARD_X                    (DIK_X | 0x81000400)\n#define DIKEYBOARD_C                    (DIK_C | 0x81000400)\n#define DIKEYBOARD_V                    (DIK_V | 0x81000400)\n#define DIKEYBOARD_B                    (DIK_B | 0x81000400)\n#define DIKEYBOARD_N                    (DIK_N | 0x81000400)\n#define DIKEYBOARD_M                    (DIK_M | 0x81000400)\n#define DIKEYBOARD_COMMA                (DIK_COMMA | 0x81000400)\n#define DIKEYBOARD_PERIOD               (DIK_PERIOD | 0x81000400)\n#define DIKEYBOARD_SLASH                (DIK_SLASH | 0x81000400)\n#define DIKEYBOARD_RSHIFT               (DIK_RSHIFT | 0x81000400)\n#define DIKEYBOARD_MULTIPLY             (DIK_MULTIPLY | 0x81000400)\n#define DIKEYBOARD_LMENU                (DIK_LMENU | 0x81000400)\n#define DIKEYBOARD_SPACE                (DIK_SPACE | 0x81000400)\n#define DIKEYBOARD_CAPITAL              (DIK_CAPITAL | 0x81000400)\n#define DIKEYBOARD_F1                   (DIK_F1 | 0x81000400)\n#define DIKEYBOARD_F2                   (DIK_F2 | 0x81000400)\n#define DIKEYBOARD_F3                   (DIK_F3 | 0x81000400)\n#define DIKEYBOARD_F4                   (DIK_F4 | 0x81000400)\n#define DIKEYBOARD_F5                   (DIK_F5 | 0x81000400)\n#define DIKEYBOARD_F6                   (DIK_F6 | 0x81000400)\n#define DIKEYBOARD_F7                   (DIK_F7 | 0x81000400)\n#define DIKEYBOARD_F8                   (DIK_F8 | 0x81000400)\n#define DIKEYBOARD_F9                   (DIK_F9 | 0x81000400)\n#define DIKEYBOARD_F10                  (DIK_F10 | 0x81000400)\n#define DIKEYBOARD_NUMLOCK              (DIK_NUMLOCK | 0x81000400)\n#define DIKEYBOARD_SCROLL               (DIK_SCROLL | 0x81000400)\n#define DIKEYBOARD_NUMPAD7              (DIK_NUMPAD7 | 0x81000400)\n#define DIKEYBOARD_NUMPAD8              (DIK_NUMPAD8 | 0x81000400)\n#define DIKEYBOARD_NUMPAD9              (DIK_NUMPAD9 | 0x81000400)\n#define DIKEYBOARD_SUBTRACT             (DIK_SUBTRACT | 0x81000400)\n#define DIKEYBOARD_NUMPAD4              (DIK_NUMPAD4 | 0x81000400)\n#define DIKEYBOARD_NUMPAD5              (DIK_NUMPAD5 | 0x81000400)\n#define DIKEYBOARD_NUMPAD6              (DIK_NUMPAD6 | 0x81000400)\n#define DIKEYBOARD_ADD                  (DIK_ADD | 0x81000400)\n#define DIKEYBOARD_NUMPAD1              (DIK_NUMPAD1 | 0x81000400)\n#define DIKEYBOARD_NUMPAD2              (DIK_NUMPAD2 | 0x81000400)\n#define DIKEYBOARD_NUMPAD3              (DIK_NUMPAD3 | 0x81000400)\n#define DIKEYBOARD_NUMPAD0              (DIK_NUMPAD0 | 0x81000400)\n#define DIKEYBOARD_DECIMAL              (DIK_DECIMAL | 0x81000400)\n#define DIKEYBOARD_F11                  (DIK_F11 | 0x81000400)\n#define DIKEYBOARD_F12                  (DIK_F12 | 0x81000400)\n#define DIKEYBOARD_F13                  (DIK_F13 | 0x81000400)\n#define DIKEYBOARD_F14                  (DIK_F14 | 0x81000400)\n#define DIKEYBOARD_F15                  (DIK_F15 | 0x81000400)\n#define DIKEYBOARD_KANA                 (DIK_KANA | 0x81000400)\n#define DIKEYBOARD_CONVERT              (DIK_CONVERT | 0x81000400)\n#define DIKEYBOARD_NOCONVERT            (DIK_NOCONVERT | 0x81000400)\n#define DIKEYBOARD_YEN                  (DIK_YEN | 0x81000400)\n#define DIKEYBOARD_NUMPADEQUALS         (DIK_NUMPADEQUALS | 0x81000400)\n#define DIKEYBOARD_CIRCUMFLEX           (DIK_CIRCUMFLEX | 0x81000400)\n#define DIKEYBOARD_AT                   (DIK_AT | 0x81000400)\n#define DIKEYBOARD_COLON                (DIK_COLON | 0x81000400)\n#define DIKEYBOARD_UNDERLINE            (DIK_UNDERLINE | 0x81000400)\n#define DIKEYBOARD_KANJI                (DIK_KANJI | 0x81000400)\n#define DIKEYBOARD_STOP                 (DIK_STOP | 0x81000400)\n#define DIKEYBOARD_AX                   (DIK_AX | 0x81000400)\n#define DIKEYBOARD_UNLABELED            (DIK_UNLABELED | 0x81000400)\n#define DIKEYBOARD_NUMPADENTER          (DIK_NUMPADENTER | 0x81000400)\n#define DIKEYBOARD_RCONTROL             (DIK_RCONTROL | 0x81000400)\n#define DIKEYBOARD_NUMPADCOMMA          (DIK_NUMPADCOMMA | 0x81000400)\n#define DIKEYBOARD_DIVIDE               (DIK_DIVIDE | 0x81000400)\n#define DIKEYBOARD_SYSRQ                (DIK_SYSRQ | 0x81000400)\n#define DIKEYBOARD_RMENU                (DIK_RMENU | 0x81000400)\n#define DIKEYBOARD_PAUSE                (DIK_PAUSE | 0x81000400)\n#define DIKEYBOARD_HOME                 (DIK_HOME | 0x81000400)\n#define DIKEYBOARD_UP                   (DIK_UP | 0x81000400)\n#define DIKEYBOARD_PRIOR                (DIK_PRIOR | 0x81000400)\n#define DIKEYBOARD_LEFT                 (DIK_LEFT | 0x81000400)\n#define DIKEYBOARD_RIGHT                (DIK_RIGHT | 0x81000400)\n#define DIKEYBOARD_END                  (DIK_END | 0x81000400)\n#define DIKEYBOARD_DOWN                 (DIK_DOWN | 0x81000400)\n#define DIKEYBOARD_NEXT                 (DIK_NEXT | 0x81000400)\n#define DIKEYBOARD_INSERT               (DIK_INSERT | 0x81000400)\n#define DIKEYBOARD_DELETE               (DIK_DELETE | 0x81000400)\n#define DIKEYBOARD_LWIN                 (DIK_LWIN | 0x81000400)\n#define DIKEYBOARD_RWIN                 (DIK_RWIN | 0x81000400)\n#define DIKEYBOARD_APPS                 (DIK_APPS | 0x81000400)\n#define DIKEYBOARD_POWER                (DIK_POWER | 0x81000400)\n#define DIKEYBOARD_SLEEP                (DIK_SLEEP | 0x81000400)\n#define DIKEYBOARD_BACKSPACE            (DIK_BACKSPACE | 0x81000400)\n#define DIKEYBOARD_NUMPADSTAR           (DIK_NUMPADSTAR | 0x81000400)\n#define DIKEYBOARD_LALT                 (DIK_LALT | 0x81000400)\n#define DIKEYBOARD_CAPSLOCK             (DIK_CAPSLOCK | 0x81000400)\n#define DIKEYBOARD_NUMPADMINUS          (DIK_NUMPADMINUS | 0x81000400)\n#define DIKEYBOARD_NUMPADPLUS           (DIK_NUMPADPLUS | 0x81000400)\n#define DIKEYBOARD_NUMPADPERIOD         (DIK_NUMPADPERIOD | 0x81000400)\n#define DIKEYBOARD_NUMPADSLASH          (DIK_NUMPADSLASH | 0x81000400)\n#define DIKEYBOARD_RALT                 (DIK_RALT | 0x81000400)\n#define DIKEYBOARD_UPARROW              (DIK_UPARROW | 0x81000400)\n#define DIKEYBOARD_PGUP                 (DIK_PGUP | 0x81000400)\n#define DIKEYBOARD_LEFTARROW            (DIK_LEFTARROW | 0x81000400)\n#define DIKEYBOARD_RIGHTARROW           (DIK_RIGHTARROW | 0x81000400)\n#define DIKEYBOARD_DOWNARROW            (DIK_DOWNARROW | 0x81000400)\n#define DIKEYBOARD_PGDN                 (DIK_PGDN | 0x81000400)\n\n#define DIDFT_ALL\t\t0x00000000\n#define DIDFT_RELAXIS\t\t0x00000001\n#define DIDFT_ABSAXIS\t\t0x00000002\n#define DIDFT_AXIS\t\t0x00000003\n#define DIDFT_PSHBUTTON\t\t0x00000004\n#define DIDFT_TGLBUTTON\t\t0x00000008\n#define DIDFT_BUTTON\t\t0x0000000C\n#define DIDFT_POV\t\t0x00000010\n#define DIDFT_COLLECTION\t0x00000040\n#define DIDFT_NODATA\t\t0x00000080\n#define DIDFT_ANYINSTANCE\t0x00FFFF00\n#define DIDFT_INSTANCEMASK\tDIDFT_ANYINSTANCE\n#define DIDFT_MAKEINSTANCE(n)\t((WORD)(n) << 8)\n#define DIDFT_GETTYPE(n)\tLOBYTE(n)\n#define DIDFT_GETINSTANCE(n)\tLOWORD((n) >> 8)\n#define DIDFT_FFACTUATOR\t0x01000000\n#define DIDFT_FFEFFECTTRIGGER\t0x02000000\n#define DIDFT_OUTPUT\t\t0x10000000\n#define DIDFT_VENDORDEFINED\t0x04000000\n#define DIDFT_ALIAS\t\t0x08000000\n#ifndef DIDFT_OPTIONAL\n#define DIDFT_OPTIONAL\t\t0x80000000\n#endif\n#define DIDFT_ENUMCOLLECTION(n)\t((WORD)(n) << 8)\n#define DIDFT_NOCOLLECTION\t0x00FFFF00\n#define DIDF_ABSAXIS\t\t0x00000001\n#define DIDF_RELAXIS\t\t0x00000002\n\n#define DIGDD_PEEK\t\t0x00000001\n\n#define DISEQUENCE_COMPARE(dwSq1,cmp,dwSq2) ((int)((dwSq1) - (dwSq2)) cmp 0)\n\ntypedef struct DIDEVICEOBJECTDATA_DX3 {\n    DWORD\tdwOfs;\n    DWORD\tdwData;\n    DWORD\tdwTimeStamp;\n    DWORD\tdwSequence;\n} DIDEVICEOBJECTDATA_DX3,*LPDIDEVICEOBJECTDATA_DX3;\ntypedef const DIDEVICEOBJECTDATA_DX3 *LPCDIDEVICEOBJECTDATA_DX3;\n\ntypedef struct DIDEVICEOBJECTDATA {\n    DWORD\tdwOfs;\n    DWORD\tdwData;\n    DWORD\tdwTimeStamp;\n    DWORD\tdwSequence;\n    UINT_PTR\tuAppData;\n} DIDEVICEOBJECTDATA, *LPDIDEVICEOBJECTDATA;\ntypedef const DIDEVICEOBJECTDATA *LPCDIDEVICEOBJECTDATA;\n\ntypedef struct _DIOBJECTDATAFORMAT {\n    const GUID *pguid;\n    DWORD\tdwOfs;\n    DWORD\tdwType;\n    DWORD\tdwFlags;\n} DIOBJECTDATAFORMAT, *LPDIOBJECTDATAFORMAT;\ntypedef const DIOBJECTDATAFORMAT *LPCDIOBJECTDATAFORMAT;\n\ntypedef struct _DIDATAFORMAT {\n    DWORD\t\t\tdwSize;\n    DWORD\t\t\tdwObjSize;\n    DWORD\t\t\tdwFlags;\n    DWORD\t\t\tdwDataSize;\n    DWORD\t\t\tdwNumObjs;\n    LPDIOBJECTDATAFORMAT\trgodf;\n} DIDATAFORMAT, *LPDIDATAFORMAT;\ntypedef const DIDATAFORMAT *LPCDIDATAFORMAT;\n\n#define DIDOI_FFACTUATOR\t0x00000001\n#define DIDOI_FFEFFECTTRIGGER\t0x00000002\n#define DIDOI_POLLED\t\t0x00008000\n#define DIDOI_ASPECTPOSITION\t0x00000100\n#define DIDOI_ASPECTVELOCITY\t0x00000200\n#define DIDOI_ASPECTACCEL\t0x00000300\n#define DIDOI_ASPECTFORCE\t0x00000400\n#define DIDOI_ASPECTMASK\t0x00000F00\n#define DIDOI_GUIDISUSAGE\t0x00010000\n\ntypedef struct DIPROPHEADER {\n    DWORD\tdwSize;\n    DWORD\tdwHeaderSize;\n    DWORD\tdwObj;\n    DWORD\tdwHow;\n} DIPROPHEADER,*LPDIPROPHEADER;\ntypedef const DIPROPHEADER *LPCDIPROPHEADER;\n\n#define DIPH_DEVICE\t0\n#define DIPH_BYOFFSET\t1\n#define DIPH_BYID\t2\n#define DIPH_BYUSAGE\t3\n\n#define DIMAKEUSAGEDWORD(UsagePage, Usage) (DWORD)MAKELONG(Usage, UsagePage)\n\ntypedef struct DIPROPDWORD {\n\tDIPROPHEADER\tdiph;\n\tDWORD\t\tdwData;\n} DIPROPDWORD, *LPDIPROPDWORD;\ntypedef const DIPROPDWORD *LPCDIPROPDWORD;\n\ntypedef struct DIPROPRANGE {\n\tDIPROPHEADER\tdiph;\n\tLONG\t\tlMin;\n\tLONG\t\tlMax;\n} DIPROPRANGE, *LPDIPROPRANGE;\ntypedef const DIPROPRANGE *LPCDIPROPRANGE;\n\n#define DIPROPRANGE_NOMIN\t((LONG)0x80000000)\n#define DIPROPRANGE_NOMAX\t((LONG)0x7FFFFFFF)\n\ntypedef struct DIPROPCAL {\n\tDIPROPHEADER diph;\n\tLONG\tlMin;\n\tLONG\tlCenter;\n\tLONG\tlMax;\n} DIPROPCAL, *LPDIPROPCAL;\ntypedef const DIPROPCAL *LPCDIPROPCAL;\n\ntypedef struct DIPROPGUIDANDPATH {\n\tDIPROPHEADER diph;\n\tGUID    guidClass;\n\tWCHAR   wszPath[MAX_PATH];\n} DIPROPGUIDANDPATH, *LPDIPROPGUIDANDPATH;\ntypedef const DIPROPGUIDANDPATH *LPCDIPROPGUIDANDPATH;\n\ntypedef struct DIPROPSTRING {\n        DIPROPHEADER diph;\n        WCHAR        wsz[MAX_PATH];\n} DIPROPSTRING, *LPDIPROPSTRING;\ntypedef const DIPROPSTRING *LPCDIPROPSTRING;\n\n/* special property GUIDs */\n#ifdef __cplusplus\n#define MAKEDIPROP(prop)\t(*(const GUID *)(prop))\n#else\n#define MAKEDIPROP(prop)\t((REFGUID)(prop))\n#endif\n#define DIPROP_BUFFERSIZE\tMAKEDIPROP(1)\n#define DIPROP_AXISMODE\t\tMAKEDIPROP(2)\n\n#define DIPROPAXISMODE_ABS\t0\n#define DIPROPAXISMODE_REL\t1\n\n#define DIPROP_GRANULARITY\tMAKEDIPROP(3)\n#define DIPROP_RANGE\t\tMAKEDIPROP(4)\n#define DIPROP_DEADZONE\t\tMAKEDIPROP(5)\n#define DIPROP_SATURATION\tMAKEDIPROP(6)\n#define DIPROP_FFGAIN\t\tMAKEDIPROP(7)\n#define DIPROP_FFLOAD\t\tMAKEDIPROP(8)\n#define DIPROP_AUTOCENTER\tMAKEDIPROP(9)\n\n#define DIPROPAUTOCENTER_OFF\t0\n#define DIPROPAUTOCENTER_ON\t1\n\n#define DIPROP_CALIBRATIONMODE\tMAKEDIPROP(10)\n\n#define DIPROPCALIBRATIONMODE_COOKED\t0\n#define DIPROPCALIBRATIONMODE_RAW\t1\n\n#define DIPROP_CALIBRATION\tMAKEDIPROP(11)\n#define DIPROP_GUIDANDPATH\tMAKEDIPROP(12)\n\n#define DIPROP_INSTANCENAME     MAKEDIPROP(13)\n#define DIPROP_PRODUCTNAME      MAKEDIPROP(14)\n#define DIPROP_JOYSTICKID       MAKEDIPROP(15)\n\n#define DIPROP_KEYNAME     MAKEDIPROP(20)\n#define DIPROP_CPOINTS     MAKEDIPROP(21)\n#define DIPROP_APPDATA     MAKEDIPROP(22)\n#define DIPROP_SCANCODE    MAKEDIPROP(23)\n#define DIPROP_VIDPID      MAKEDIPROP(24)\n#define DIPROP_USERNAME    MAKEDIPROP(25)\n#define DIPROP_TYPENAME    MAKEDIPROP(26)\n\ntypedef struct DIDEVCAPS_DX3 {\n    DWORD\tdwSize;\n    DWORD\tdwFlags;\n    DWORD\tdwDevType;\n    DWORD\tdwAxes;\n    DWORD\tdwButtons;\n    DWORD\tdwPOVs;\n} DIDEVCAPS_DX3, *LPDIDEVCAPS_DX3;\n\ntypedef struct DIDEVCAPS {\n    DWORD\tdwSize;\n    DWORD\tdwFlags;\n    DWORD\tdwDevType;\n    DWORD\tdwAxes;\n    DWORD\tdwButtons;\n    DWORD\tdwPOVs;\n    DWORD\tdwFFSamplePeriod;\n    DWORD\tdwFFMinTimeResolution;\n    DWORD\tdwFirmwareRevision;\n    DWORD\tdwHardwareRevision;\n    DWORD\tdwFFDriverVersion;\n} DIDEVCAPS,*LPDIDEVCAPS;\n\n#define DIDC_ATTACHED\t\t0x00000001\n#define DIDC_POLLEDDEVICE\t0x00000002\n#define DIDC_EMULATED\t\t0x00000004\n#define DIDC_POLLEDDATAFORMAT\t0x00000008\n#define DIDC_FORCEFEEDBACK\t0x00000100\n#define DIDC_FFATTACK\t\t0x00000200\n#define DIDC_FFFADE\t\t0x00000400\n#define DIDC_SATURATION\t\t0x00000800\n#define DIDC_POSNEGCOEFFICIENTS\t0x00001000\n#define DIDC_POSNEGSATURATION\t0x00002000\n#define DIDC_DEADBAND\t\t0x00004000\n#define DIDC_STARTDELAY\t\t0x00008000\n#define DIDC_ALIAS\t\t0x00010000\n#define DIDC_PHANTOM\t\t0x00020000\n#define DIDC_HIDDEN\t\t0x00040000\n\n\n/* SetCooperativeLevel dwFlags */\n#define DISCL_EXCLUSIVE\t\t0x00000001\n#define DISCL_NONEXCLUSIVE\t0x00000002\n#define DISCL_FOREGROUND\t0x00000004\n#define DISCL_BACKGROUND\t0x00000008\n#define DISCL_NOWINKEY          0x00000010\n\n/* Device FF flags */\n#define DISFFC_RESET            0x00000001\n#define DISFFC_STOPALL          0x00000002\n#define DISFFC_PAUSE            0x00000004\n#define DISFFC_CONTINUE         0x00000008\n#define DISFFC_SETACTUATORSON   0x00000010\n#define DISFFC_SETACTUATORSOFF  0x00000020\n  \n#define DIGFFS_EMPTY            0x00000001\n#define DIGFFS_STOPPED          0x00000002\n#define DIGFFS_PAUSED           0x00000004\n#define DIGFFS_ACTUATORSON      0x00000010\n#define DIGFFS_ACTUATORSOFF     0x00000020\n#define DIGFFS_POWERON          0x00000040\n#define DIGFFS_POWEROFF         0x00000080\n#define DIGFFS_SAFETYSWITCHON   0x00000100\n#define DIGFFS_SAFETYSWITCHOFF  0x00000200\n#define DIGFFS_USERFFSWITCHON   0x00000400\n#define DIGFFS_USERFFSWITCHOFF  0x00000800\n#define DIGFFS_DEVICELOST       0x80000000\n\n/* Effect flags */\n#define DIEFT_ALL\t\t0x00000000\n                                                                                \n#define DIEFT_CONSTANTFORCE\t0x00000001\n#define DIEFT_RAMPFORCE\t\t0x00000002\n#define DIEFT_PERIODIC\t\t0x00000003\n#define DIEFT_CONDITION\t\t0x00000004\n#define DIEFT_CUSTOMFORCE\t0x00000005\n#define DIEFT_HARDWARE\t\t0x000000FF\n#define DIEFT_FFATTACK\t\t0x00000200\n#define DIEFT_FFFADE\t\t0x00000400\n#define DIEFT_SATURATION\t0x00000800\n#define DIEFT_POSNEGCOEFFICIENTS 0x00001000\n#define DIEFT_POSNEGSATURATION\t0x00002000\n#define DIEFT_DEADBAND\t\t0x00004000\n#define DIEFT_STARTDELAY\t0x00008000\n#define DIEFT_GETTYPE(n)\tLOBYTE(n)\n                                                                                \n#define DIEFF_OBJECTIDS         0x00000001\n#define DIEFF_OBJECTOFFSETS     0x00000002\n#define DIEFF_CARTESIAN         0x00000010\n#define DIEFF_POLAR             0x00000020\n#define DIEFF_SPHERICAL         0x00000040\n\n#define DIEP_DURATION           0x00000001\n#define DIEP_SAMPLEPERIOD       0x00000002\n#define DIEP_GAIN               0x00000004\n#define DIEP_TRIGGERBUTTON      0x00000008\n#define DIEP_TRIGGERREPEATINTERVAL 0x00000010\n#define DIEP_AXES               0x00000020\n#define DIEP_DIRECTION          0x00000040\n#define DIEP_ENVELOPE           0x00000080\n#define DIEP_TYPESPECIFICPARAMS 0x00000100\n#define DIEP_STARTDELAY         0x00000200\n#define DIEP_ALLPARAMS_DX5      0x000001FF\n#define DIEP_ALLPARAMS          0x000003FF\n#define DIEP_START              0x20000000\n#define DIEP_NORESTART          0x40000000\n#define DIEP_NODOWNLOAD         0x80000000\n#define DIEB_NOTRIGGER          0xFFFFFFFF\n\n#define DIES_SOLO               0x00000001\n#define DIES_NODOWNLOAD         0x80000000\n\n#define DIEGES_PLAYING          0x00000001\n#define DIEGES_EMULATED         0x00000002\n\n#define DI_DEGREES\t\t100\n#define DI_FFNOMINALMAX\t\t10000\n#define DI_SECONDS\t\t1000000\n\ntypedef struct DICONSTANTFORCE {\n\tLONG\t\t\tlMagnitude;\n} DICONSTANTFORCE, *LPDICONSTANTFORCE;\ntypedef const DICONSTANTFORCE *LPCDICONSTANTFORCE;\n\ntypedef struct DIRAMPFORCE {\n\tLONG\t\t\tlStart;\n\tLONG\t\t\tlEnd;\n} DIRAMPFORCE, *LPDIRAMPFORCE;\ntypedef const DIRAMPFORCE *LPCDIRAMPFORCE;\n\ntypedef struct DIPERIODIC {\n\tDWORD\t\t\tdwMagnitude;\n\tLONG\t\t\tlOffset;\n\tDWORD\t\t\tdwPhase;\n\tDWORD\t\t\tdwPeriod;\n} DIPERIODIC, *LPDIPERIODIC;\ntypedef const DIPERIODIC *LPCDIPERIODIC;\n\ntypedef struct DICONDITION {\n\tLONG\t\t\tlOffset;\n\tLONG\t\t\tlPositiveCoefficient;\n\tLONG\t\t\tlNegativeCoefficient;\n\tDWORD\t\t\tdwPositiveSaturation;\n\tDWORD\t\t\tdwNegativeSaturation;\n\tLONG\t\t\tlDeadBand;\n} DICONDITION, *LPDICONDITION;\ntypedef const DICONDITION *LPCDICONDITION;\n\ntypedef struct DICUSTOMFORCE {\n\tDWORD\t\t\tcChannels;\n\tDWORD\t\t\tdwSamplePeriod;\n\tDWORD\t\t\tcSamples;\n\tLPLONG\t\t\trglForceData;\n} DICUSTOMFORCE, *LPDICUSTOMFORCE;\ntypedef const DICUSTOMFORCE *LPCDICUSTOMFORCE;\n\ntypedef struct DIENVELOPE {\n\tDWORD\t\t\tdwSize;\n\tDWORD\t\t\tdwAttackLevel;\n\tDWORD\t\t\tdwAttackTime;\n\tDWORD\t\t\tdwFadeLevel;\n\tDWORD\t\t\tdwFadeTime;\n} DIENVELOPE, *LPDIENVELOPE;\ntypedef const DIENVELOPE *LPCDIENVELOPE;\n\ntypedef struct DIEFFECT_DX5 {\n\tDWORD\t\t\tdwSize;\n\tDWORD\t\t\tdwFlags;\n\tDWORD\t\t\tdwDuration;\n\tDWORD\t\t\tdwSamplePeriod;\n\tDWORD\t\t\tdwGain;\n\tDWORD\t\t\tdwTriggerButton;\n\tDWORD\t\t\tdwTriggerRepeatInterval;\n\tDWORD\t\t\tcAxes;\n\tLPDWORD\t\t\trgdwAxes;\n\tLPLONG\t\t\trglDirection;\n\tLPDIENVELOPE\t\tlpEnvelope;\n\tDWORD\t\t\tcbTypeSpecificParams;\n\tLPVOID\t\t\tlpvTypeSpecificParams;\n} DIEFFECT_DX5, *LPDIEFFECT_DX5;\ntypedef const DIEFFECT_DX5 *LPCDIEFFECT_DX5;\n\ntypedef struct DIEFFECT {\n\tDWORD\t\t\tdwSize;\n\tDWORD\t\t\tdwFlags;\n\tDWORD\t\t\tdwDuration;\n\tDWORD\t\t\tdwSamplePeriod;\n\tDWORD\t\t\tdwGain;\n\tDWORD\t\t\tdwTriggerButton;\n\tDWORD\t\t\tdwTriggerRepeatInterval;\n\tDWORD\t\t\tcAxes;\n\tLPDWORD\t\t\trgdwAxes;\n\tLPLONG\t\t\trglDirection;\n\tLPDIENVELOPE\t\tlpEnvelope;\n\tDWORD\t\t\tcbTypeSpecificParams;\n\tLPVOID\t\t\tlpvTypeSpecificParams;\n\tDWORD\t\t\tdwStartDelay;\n} DIEFFECT, *LPDIEFFECT;\ntypedef const DIEFFECT *LPCDIEFFECT;\ntypedef DIEFFECT DIEFFECT_DX6;\ntypedef LPDIEFFECT LPDIEFFECT_DX6;\n\ntypedef struct DIEFFECTINFOA {\n\tDWORD\t\t\tdwSize;\n\tGUID\t\t\tguid;\n\tDWORD\t\t\tdwEffType;\n\tDWORD\t\t\tdwStaticParams;\n\tDWORD\t\t\tdwDynamicParams;\n\tCHAR\t\t\ttszName[MAX_PATH];\n} DIEFFECTINFOA, *LPDIEFFECTINFOA;\ntypedef const DIEFFECTINFOA *LPCDIEFFECTINFOA;\n\ntypedef struct DIEFFECTINFOW {\n\tDWORD\t\t\tdwSize;\n\tGUID\t\t\tguid;\n\tDWORD\t\t\tdwEffType;\n\tDWORD\t\t\tdwStaticParams;\n\tDWORD\t\t\tdwDynamicParams;\n\tWCHAR\t\t\ttszName[MAX_PATH];\n} DIEFFECTINFOW, *LPDIEFFECTINFOW;\ntypedef const DIEFFECTINFOW *LPCDIEFFECTINFOW;\n\nDECL_WINELIB_TYPE_AW(DIEFFECTINFO)\nDECL_WINELIB_TYPE_AW(LPDIEFFECTINFO)\nDECL_WINELIB_TYPE_AW(LPCDIEFFECTINFO)\n\ntypedef BOOL (CALLBACK *LPDIENUMEFFECTSCALLBACKA)(LPCDIEFFECTINFOA, LPVOID);\ntypedef BOOL (CALLBACK *LPDIENUMEFFECTSCALLBACKW)(LPCDIEFFECTINFOW, LPVOID);\n\ntypedef struct DIEFFESCAPE {\n\tDWORD\tdwSize;\n\tDWORD\tdwCommand;\n\tLPVOID\tlpvInBuffer;\n\tDWORD\tcbInBuffer;\n\tLPVOID\tlpvOutBuffer;\n\tDWORD\tcbOutBuffer;\n} DIEFFESCAPE, *LPDIEFFESCAPE;\n\ntypedef struct DIJOYSTATE {\n\tLONG\tlX;\n\tLONG\tlY;\n\tLONG\tlZ;\n\tLONG\tlRx;\n\tLONG\tlRy;\n\tLONG\tlRz;\n\tLONG\trglSlider[2];\n\tDWORD\trgdwPOV[4];\n\tBYTE\trgbButtons[32];\n} DIJOYSTATE, *LPDIJOYSTATE;\n\ntypedef struct DIJOYSTATE2 {\n\tLONG\tlX;\n\tLONG\tlY;\n\tLONG\tlZ;\n\tLONG\tlRx;\n\tLONG\tlRy;\n\tLONG\tlRz;\n\tLONG\trglSlider[2];\n\tDWORD\trgdwPOV[4];\n\tBYTE\trgbButtons[128];\n\tLONG\tlVX;\t\t/* 'v' as in velocity */\n\tLONG\tlVY;\n\tLONG\tlVZ;\n\tLONG\tlVRx;\n\tLONG\tlVRy;\n\tLONG\tlVRz;\n\tLONG\trglVSlider[2];\n\tLONG\tlAX;\t\t/* 'a' as in acceleration */\n\tLONG\tlAY;\n\tLONG\tlAZ;\n\tLONG\tlARx;\n\tLONG\tlARy;\n\tLONG\tlARz;\n\tLONG\trglASlider[2];\n\tLONG\tlFX;\t\t/* 'f' as in force */\n\tLONG\tlFY;\n\tLONG\tlFZ;\n\tLONG\tlFRx;\t\t/* 'fr' as in rotational force aka torque */\n\tLONG\tlFRy;\n\tLONG\tlFRz;\n\tLONG\trglFSlider[2];\n} DIJOYSTATE2, *LPDIJOYSTATE2;\n\n#define DIJOFS_X\t\tFIELD_OFFSET(DIJOYSTATE, lX)\n#define DIJOFS_Y\t\tFIELD_OFFSET(DIJOYSTATE, lY)\n#define DIJOFS_Z\t\tFIELD_OFFSET(DIJOYSTATE, lZ)\n#define DIJOFS_RX\t\tFIELD_OFFSET(DIJOYSTATE, lRx)\n#define DIJOFS_RY\t\tFIELD_OFFSET(DIJOYSTATE, lRy)\n#define DIJOFS_RZ\t\tFIELD_OFFSET(DIJOYSTATE, lRz)\n#define DIJOFS_SLIDER(n)\t(FIELD_OFFSET(DIJOYSTATE, rglSlider) + \\\n                                                        (n) * sizeof(LONG))\n#define DIJOFS_POV(n)\t\t(FIELD_OFFSET(DIJOYSTATE, rgdwPOV) + \\\n                                                        (n) * sizeof(DWORD))\n#define DIJOFS_BUTTON(n)\t(FIELD_OFFSET(DIJOYSTATE, rgbButtons) + (n))\n#define DIJOFS_BUTTON0\t\tDIJOFS_BUTTON(0)\n#define DIJOFS_BUTTON1\t\tDIJOFS_BUTTON(1)\n#define DIJOFS_BUTTON2\t\tDIJOFS_BUTTON(2)\n#define DIJOFS_BUTTON3\t\tDIJOFS_BUTTON(3)\n#define DIJOFS_BUTTON4\t\tDIJOFS_BUTTON(4)\n#define DIJOFS_BUTTON5\t\tDIJOFS_BUTTON(5)\n#define DIJOFS_BUTTON6\t\tDIJOFS_BUTTON(6)\n#define DIJOFS_BUTTON7\t\tDIJOFS_BUTTON(7)\n#define DIJOFS_BUTTON8\t\tDIJOFS_BUTTON(8)\n#define DIJOFS_BUTTON9\t\tDIJOFS_BUTTON(9)\n#define DIJOFS_BUTTON10\t\tDIJOFS_BUTTON(10)\n#define DIJOFS_BUTTON11\t\tDIJOFS_BUTTON(11)\n#define DIJOFS_BUTTON12\t\tDIJOFS_BUTTON(12)\n#define DIJOFS_BUTTON13\t\tDIJOFS_BUTTON(13)\n#define DIJOFS_BUTTON14\t\tDIJOFS_BUTTON(14)\n#define DIJOFS_BUTTON15\t\tDIJOFS_BUTTON(15)\n#define DIJOFS_BUTTON16\t\tDIJOFS_BUTTON(16)\n#define DIJOFS_BUTTON17\t\tDIJOFS_BUTTON(17)\n#define DIJOFS_BUTTON18\t\tDIJOFS_BUTTON(18)\n#define DIJOFS_BUTTON19\t\tDIJOFS_BUTTON(19)\n#define DIJOFS_BUTTON20\t\tDIJOFS_BUTTON(20)\n#define DIJOFS_BUTTON21\t\tDIJOFS_BUTTON(21)\n#define DIJOFS_BUTTON22\t\tDIJOFS_BUTTON(22)\n#define DIJOFS_BUTTON23\t\tDIJOFS_BUTTON(23)\n#define DIJOFS_BUTTON24\t\tDIJOFS_BUTTON(24)\n#define DIJOFS_BUTTON25\t\tDIJOFS_BUTTON(25)\n#define DIJOFS_BUTTON26\t\tDIJOFS_BUTTON(26)\n#define DIJOFS_BUTTON27\t\tDIJOFS_BUTTON(27)\n#define DIJOFS_BUTTON28\t\tDIJOFS_BUTTON(28)\n#define DIJOFS_BUTTON29\t\tDIJOFS_BUTTON(29)\n#define DIJOFS_BUTTON30\t\tDIJOFS_BUTTON(30)\n#define DIJOFS_BUTTON31\t\tDIJOFS_BUTTON(31)\n\n/* DInput 7 structures, types */\ntypedef struct DIFILEEFFECT {\n  DWORD       dwSize;\n  GUID        GuidEffect;\n  LPCDIEFFECT lpDiEffect;\n  CHAR        szFriendlyName[MAX_PATH];\n} DIFILEEFFECT, *LPDIFILEEFFECT;\n\ntypedef const DIFILEEFFECT *LPCDIFILEEFFECT;\ntypedef BOOL (CALLBACK *LPDIENUMEFFECTSINFILECALLBACK)(LPCDIFILEEFFECT , LPVOID);\n\n/* DInput 8 structures and types */\ntypedef struct _DIACTIONA {\n\tUINT_PTR\tuAppData;\n\tDWORD\t\tdwSemantic;\n\tDWORD\t\tdwFlags;\n\tunion {\n\t\tLPCSTR\tlptszActionName;\n\t\tUINT\tuResIdString;\n\t} DUMMYUNIONNAME;\n\tGUID\t\tguidInstance;\n\tDWORD\t\tdwObjID;\n\tDWORD\t\tdwHow;\n} DIACTIONA, *LPDIACTIONA;\ntypedef const DIACTIONA *LPCDIACTIONA;\n\ntypedef struct _DIACTIONW {\n\tUINT_PTR\tuAppData;\n\tDWORD\t\tdwSemantic;\n\tDWORD\t\tdwFlags;\n\tunion {\n\t\tLPCWSTR\tlptszActionName;\n\t\tUINT\tuResIdString;\n\t} DUMMYUNIONNAME;\n\tGUID\t\tguidInstance;\n\tDWORD\t\tdwObjID;\n\tDWORD\t\tdwHow;\n} DIACTIONW, *LPDIACTIONW;\ntypedef const DIACTIONW *LPCDIACTIONW;\n\nDECL_WINELIB_TYPE_AW(DIACTION)\nDECL_WINELIB_TYPE_AW(LPDIACTION)\nDECL_WINELIB_TYPE_AW(LPCDIACTION)\n\n#define DIA_FORCEFEEDBACK\t0x00000001\n#define DIA_APPMAPPED\t\t0x00000002\n#define DIA_APPNOMAP\t\t0x00000004\n#define DIA_NORANGE\t\t0x00000008\n#define DIA_APPFIXED\t\t0x00000010\n\n#define DIAH_UNMAPPED\t\t0x00000000\n#define DIAH_USERCONFIG\t\t0x00000001\n#define DIAH_APPREQUESTED\t0x00000002\n#define DIAH_HWAPP\t\t0x00000004\n#define DIAH_HWDEFAULT\t\t0x00000008\n#define DIAH_DEFAULT\t\t0x00000020\n#define DIAH_ERROR\t\t0x80000000\n\ntypedef struct _DIACTIONFORMATA {\n\tDWORD\t\tdwSize;\n\tDWORD\t\tdwActionSize;\n\tDWORD\t\tdwDataSize;\n\tDWORD\t\tdwNumActions;\n\tLPDIACTIONA\trgoAction;\n\tGUID\t\tguidActionMap;\n\tDWORD\t\tdwGenre;\n\tDWORD\t\tdwBufferSize;\n\tLONG\t\tlAxisMin;\n\tLONG\t\tlAxisMax;\n\tHINSTANCE\thInstString;\n\tFILETIME\tftTimeStamp;\n\tDWORD\t\tdwCRC;\n\tCHAR\t\ttszActionMap[MAX_PATH];\n} DIACTIONFORMATA, *LPDIACTIONFORMATA;\ntypedef const DIACTIONFORMATA *LPCDIACTIONFORMATA;\n\ntypedef struct _DIACTIONFORMATW {\n\tDWORD\t\tdwSize;\n\tDWORD\t\tdwActionSize;\n\tDWORD\t\tdwDataSize;\n\tDWORD\t\tdwNumActions;\n\tLPDIACTIONW\trgoAction;\n\tGUID\t\tguidActionMap;\n\tDWORD\t\tdwGenre;\n\tDWORD\t\tdwBufferSize;\n\tLONG\t\tlAxisMin;\n\tLONG\t\tlAxisMax;\n\tHINSTANCE\thInstString;\n\tFILETIME\tftTimeStamp;\n\tDWORD\t\tdwCRC;\n\tWCHAR\t\ttszActionMap[MAX_PATH];\n} DIACTIONFORMATW, *LPDIACTIONFORMATW;\ntypedef const DIACTIONFORMATW *LPCDIACTIONFORMATW;\n\nDECL_WINELIB_TYPE_AW(DIACTIONFORMAT)\nDECL_WINELIB_TYPE_AW(LPDIACTIONFORMAT)\nDECL_WINELIB_TYPE_AW(LPCDIACTIONFORMAT)\n\n#define DIAFTS_NEWDEVICELOW\t0xFFFFFFFF\n#define DIAFTS_NEWDEVICEHIGH\t0xFFFFFFFF\n#define DIAFTS_UNUSEDDEVICELOW\t0x00000000\n#define DIAFTS_UNUSEDDEVICEHIGH\t0x00000000\n\n#define DIDBAM_DEFAULT\t\t0x00000000\n#define DIDBAM_PRESERVE\t\t0x00000001\n#define DIDBAM_INITIALIZE\t0x00000002\n#define DIDBAM_HWDEFAULTS\t0x00000004\n\n#define DIDSAM_DEFAULT\t\t0x00000000\n#define DIDSAM_NOUSER\t\t0x00000001\n#define DIDSAM_FORCESAVE\t0x00000002\n\n#define DICD_DEFAULT\t\t0x00000000\n#define DICD_EDIT\t\t0x00000001\n\n#ifndef D3DCOLOR_DEFINED\ntypedef DWORD D3DCOLOR;\n#define D3DCOLOR_DEFINED\n#endif\n\ntypedef struct _DICOLORSET {\n\tDWORD\t\tdwSize;\n\tD3DCOLOR\tcTextFore;\n\tD3DCOLOR\tcTextHighlight;\n\tD3DCOLOR\tcCalloutLine;\n\tD3DCOLOR\tcCalloutHighlight;\n\tD3DCOLOR\tcBorder;\n\tD3DCOLOR\tcControlFill;\n\tD3DCOLOR\tcHighlightFill;\n\tD3DCOLOR\tcAreaFill;\n} DICOLORSET, *LPDICOLORSET;\ntypedef const DICOLORSET *LPCDICOLORSET;\n\ntypedef struct _DICONFIGUREDEVICESPARAMSA {\n\tDWORD\t\t\tdwSize;\n\tDWORD\t\t\tdwcUsers;\n\tLPSTR\t\t\tlptszUserNames;\n\tDWORD\t\t\tdwcFormats;\n\tLPDIACTIONFORMATA\tlprgFormats;\n\tHWND\t\t\thwnd;\n\tDICOLORSET\t\tdics;\n\tLPUNKNOWN\t\tlpUnkDDSTarget;\n} DICONFIGUREDEVICESPARAMSA, *LPDICONFIGUREDEVICESPARAMSA;\ntypedef const DICONFIGUREDEVICESPARAMSA *LPCDICONFIGUREDEVICESPARAMSA;\n\ntypedef struct _DICONFIGUREDEVICESPARAMSW {\n\tDWORD\t\t\tdwSize;\n\tDWORD\t\t\tdwcUsers;\n\tLPWSTR\t\t\tlptszUserNames;\n\tDWORD\t\t\tdwcFormats;\n\tLPDIACTIONFORMATW\tlprgFormats;\n\tHWND\t\t\thwnd;\n\tDICOLORSET\t\tdics;\n\tLPUNKNOWN\t\tlpUnkDDSTarget;\n} DICONFIGUREDEVICESPARAMSW, *LPDICONFIGUREDEVICESPARAMSW;\ntypedef const DICONFIGUREDEVICESPARAMSW *LPCDICONFIGUREDEVICESPARAMSW;\n\nDECL_WINELIB_TYPE_AW(DICONFIGUREDEVICESPARAMS)\nDECL_WINELIB_TYPE_AW(LPDICONFIGUREDEVICESPARAMS)\nDECL_WINELIB_TYPE_AW(LPCDICONFIGUREDEVICESPARAMS)\n\n#define DIDIFT_CONFIGURATION\t0x00000001\n#define DIDIFT_OVERLAY\t\t0x00000002\n\n#define DIDAL_CENTERED\t\t0x00000000\n#define DIDAL_LEFTALIGNED\t0x00000001\n#define DIDAL_RIGHTALIGNED\t0x00000002\n#define DIDAL_MIDDLE\t\t0x00000000\n#define DIDAL_TOPALIGNED\t0x00000004\n#define DIDAL_BOTTOMALIGNED\t0x00000008\n\ntypedef struct _DIDEVICEIMAGEINFOA {\n\tCHAR\ttszImagePath[MAX_PATH];\n\tDWORD\tdwFlags;\n\tDWORD\tdwViewID;\n\tRECT\trcOverlay;\n\tDWORD\tdwObjID;\n\tDWORD\tdwcValidPts;\n\tPOINT\trgptCalloutLine[5];\n\tRECT\trcCalloutRect;\n\tDWORD\tdwTextAlign;\n} DIDEVICEIMAGEINFOA, *LPDIDEVICEIMAGEINFOA;\ntypedef const DIDEVICEIMAGEINFOA *LPCDIDEVICEIMAGEINFOA;\n\ntypedef struct _DIDEVICEIMAGEINFOW {\n\tWCHAR\ttszImagePath[MAX_PATH];\n\tDWORD\tdwFlags;\n\tDWORD\tdwViewID;\n\tRECT\trcOverlay;\n\tDWORD\tdwObjID;\n\tDWORD\tdwcValidPts;\n\tPOINT\trgptCalloutLine[5];\n\tRECT\trcCalloutRect;\n\tDWORD\tdwTextAlign;\n} DIDEVICEIMAGEINFOW, *LPDIDEVICEIMAGEINFOW;\ntypedef const DIDEVICEIMAGEINFOW *LPCDIDEVICEIMAGEINFOW;\n\nDECL_WINELIB_TYPE_AW(DIDEVICEIMAGEINFO)\nDECL_WINELIB_TYPE_AW(LPDIDEVICEIMAGEINFO)\nDECL_WINELIB_TYPE_AW(LPCDIDEVICEIMAGEINFO)\n\ntypedef struct _DIDEVICEIMAGEINFOHEADERA {\n\tDWORD\tdwSize;\n\tDWORD\tdwSizeImageInfo;\n\tDWORD\tdwcViews;\n\tDWORD\tdwcButtons;\n\tDWORD\tdwcAxes;\n\tDWORD\tdwcPOVs;\n\tDWORD\tdwBufferSize;\n\tDWORD\tdwBufferUsed;\n\tLPDIDEVICEIMAGEINFOA\tlprgImageInfoArray;\n} DIDEVICEIMAGEINFOHEADERA, *LPDIDEVICEIMAGEINFOHEADERA;\ntypedef const DIDEVICEIMAGEINFOHEADERA *LPCDIDEVICEIMAGEINFOHEADERA;\n\ntypedef struct _DIDEVICEIMAGEINFOHEADERW {\n\tDWORD\tdwSize;\n\tDWORD\tdwSizeImageInfo;\n\tDWORD\tdwcViews;\n\tDWORD\tdwcButtons;\n\tDWORD\tdwcAxes;\n\tDWORD\tdwcPOVs;\n\tDWORD\tdwBufferSize;\n\tDWORD\tdwBufferUsed;\n\tLPDIDEVICEIMAGEINFOW\tlprgImageInfoArray;\n} DIDEVICEIMAGEINFOHEADERW, *LPDIDEVICEIMAGEINFOHEADERW;\ntypedef const DIDEVICEIMAGEINFOHEADERW *LPCDIDEVICEIMAGEINFOHEADERW;\n\nDECL_WINELIB_TYPE_AW(DIDEVICEIMAGEINFOHEADER)\nDECL_WINELIB_TYPE_AW(LPDIDEVICEIMAGEINFOHEADER)\nDECL_WINELIB_TYPE_AW(LPCDIDEVICEIMAGEINFOHEADER)\n\n\n/*****************************************************************************\n * IDirectInputEffect interface\n */\n#define INTERFACE IDirectInputEffect\nDECLARE_INTERFACE_(IDirectInputEffect,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectInputEffect methods ***/\n    STDMETHOD(Initialize)(THIS_ HINSTANCE, DWORD, REFGUID) PURE;\n    STDMETHOD(GetEffectGuid)(THIS_ LPGUID) PURE;\n    STDMETHOD(GetParameters)(THIS_ LPDIEFFECT, DWORD) PURE;\n    STDMETHOD(SetParameters)(THIS_ LPCDIEFFECT, DWORD) PURE;\n    STDMETHOD(Start)(THIS_ DWORD, DWORD) PURE;\n    STDMETHOD(Stop)(THIS) PURE;\n    STDMETHOD(GetEffectStatus)(THIS_ LPDWORD) PURE;\n    STDMETHOD(Download)(THIS) PURE;\n    STDMETHOD(Unload)(THIS) PURE;\n    STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectInputEffect_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectInputEffect_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectInputEffect_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectInputEffect methods ***/\n#define IDirectInputEffect_Initialize(p,a,b,c)    (p)->lpVtbl->Initialize(p,a,b,c)\n#define IDirectInputEffect_GetEffectGuid(p,a)     (p)->lpVtbl->GetEffectGuid(p,a)\n#define IDirectInputEffect_GetParameters(p,a,b)   (p)->lpVtbl->GetParameters(p,a,b)\n#define IDirectInputEffect_SetParameters(p,a,b)   (p)->lpVtbl->SetParameters(p,a,b)\n#define IDirectInputEffect_Start(p,a,b)           (p)->lpVtbl->Start(p,a,b)\n#define IDirectInputEffect_Stop(p)                (p)->lpVtbl->Stop(p)\n#define IDirectInputEffect_GetEffectStatus(p,a)   (p)->lpVtbl->GetEffectStatus(p,a)\n#define IDirectInputEffect_Download(p)            (p)->lpVtbl->Download(p)\n#define IDirectInputEffect_Unload(p)              (p)->lpVtbl->Unload(p)\n#define IDirectInputEffect_Escape(p,a)            (p)->lpVtbl->Escape(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirectInputEffect_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectInputEffect_AddRef(p)             (p)->AddRef()\n#define IDirectInputEffect_Release(p)            (p)->Release()\n/*** IDirectInputEffect methods ***/\n#define IDirectInputEffect_Initialize(p,a,b,c)    (p)->Initialize(a,b,c)\n#define IDirectInputEffect_GetEffectGuid(p,a)     (p)->GetEffectGuid(a)\n#define IDirectInputEffect_GetParameters(p,a,b)   (p)->GetParameters(a,b)\n#define IDirectInputEffect_SetParameters(p,a,b)   (p)->SetParameters(a,b)\n#define IDirectInputEffect_Start(p,a,b)           (p)->Start(a,b)\n#define IDirectInputEffect_Stop(p)                (p)->Stop()\n#define IDirectInputEffect_GetEffectStatus(p,a)   (p)->GetEffectStatus(a)\n#define IDirectInputEffect_Download(p)            (p)->Download()\n#define IDirectInputEffect_Unload(p)              (p)->Unload()\n#define IDirectInputEffect_Escape(p,a)            (p)->Escape(a)\n#endif\n\n\n/*****************************************************************************\n * IDirectInputDeviceA interface\n */\n#define INTERFACE IDirectInputDeviceA\nDECLARE_INTERFACE_(IDirectInputDeviceA,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectInputDeviceA methods ***/\n    STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;\n    STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;\n    STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;\n    STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;\n    STDMETHOD(Acquire)(THIS) PURE;\n    STDMETHOD(Unacquire)(THIS) PURE;\n    STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;\n    STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;\n    STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;\n    STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;\n    STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) PURE;\n    STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA pdidi) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;\n};\n#undef INTERFACE\n\n/*****************************************************************************\n * IDirectInputDeviceW interface\n */\n#define INTERFACE IDirectInputDeviceW\nDECLARE_INTERFACE_(IDirectInputDeviceW,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectInputDeviceW methods ***/\n    STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;\n    STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;\n    STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;\n    STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;\n    STDMETHOD(Acquire)(THIS) PURE;\n    STDMETHOD(Unacquire)(THIS) PURE;\n    STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;\n    STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;\n    STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;\n    STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;\n    STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW pdidoi, DWORD dwObj, DWORD dwHow) PURE;\n    STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW pdidi) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectInputDevice_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectInputDevice_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectInputDevice_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectInputDevice methods ***/\n#define IDirectInputDevice_GetCapabilities(p,a)       (p)->lpVtbl->GetCapabilities(p,a)\n#define IDirectInputDevice_EnumObjects(p,a,b,c)       (p)->lpVtbl->EnumObjects(p,a,b,c)\n#define IDirectInputDevice_GetProperty(p,a,b)         (p)->lpVtbl->GetProperty(p,a,b)\n#define IDirectInputDevice_SetProperty(p,a,b)         (p)->lpVtbl->SetProperty(p,a,b)\n#define IDirectInputDevice_Acquire(p)                 (p)->lpVtbl->Acquire(p)\n#define IDirectInputDevice_Unacquire(p)               (p)->lpVtbl->Unacquire(p)\n#define IDirectInputDevice_GetDeviceState(p,a,b)      (p)->lpVtbl->GetDeviceState(p,a,b)\n#define IDirectInputDevice_GetDeviceData(p,a,b,c,d)   (p)->lpVtbl->GetDeviceData(p,a,b,c,d)\n#define IDirectInputDevice_SetDataFormat(p,a)         (p)->lpVtbl->SetDataFormat(p,a)\n#define IDirectInputDevice_SetEventNotification(p,a)  (p)->lpVtbl->SetEventNotification(p,a)\n#define IDirectInputDevice_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)\n#define IDirectInputDevice_GetObjectInfo(p,a,b,c)     (p)->lpVtbl->GetObjectInfo(p,a,b,c)\n#define IDirectInputDevice_GetDeviceInfo(p,a)         (p)->lpVtbl->GetDeviceInfo(p,a)\n#define IDirectInputDevice_RunControlPanel(p,a,b)     (p)->lpVtbl->RunControlPanel(p,a,b)\n#define IDirectInputDevice_Initialize(p,a,b,c)        (p)->lpVtbl->Initialize(p,a,b,c)\n#else\n/*** IUnknown methods ***/\n#define IDirectInputDevice_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectInputDevice_AddRef(p)             (p)->AddRef()\n#define IDirectInputDevice_Release(p)            (p)->Release()\n/*** IDirectInputDevice methods ***/\n#define IDirectInputDevice_GetCapabilities(p,a)       (p)->GetCapabilities(a)\n#define IDirectInputDevice_EnumObjects(p,a,b,c)       (p)->EnumObjects(a,b,c)\n#define IDirectInputDevice_GetProperty(p,a,b)         (p)->GetProperty(a,b)\n#define IDirectInputDevice_SetProperty(p,a,b)         (p)->SetProperty(a,b)\n#define IDirectInputDevice_Acquire(p)                 (p)->Acquire()\n#define IDirectInputDevice_Unacquire(p)               (p)->Unacquire()\n#define IDirectInputDevice_GetDeviceState(p,a,b)      (p)->GetDeviceState(a,b)\n#define IDirectInputDevice_GetDeviceData(p,a,b,c,d)   (p)->GetDeviceData(a,b,c,d)\n#define IDirectInputDevice_SetDataFormat(p,a)         (p)->SetDataFormat(a)\n#define IDirectInputDevice_SetEventNotification(p,a)  (p)->SetEventNotification(a)\n#define IDirectInputDevice_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)\n#define IDirectInputDevice_GetObjectInfo(p,a,b,c)     (p)->GetObjectInfo(a,b,c)\n#define IDirectInputDevice_GetDeviceInfo(p,a)         (p)->GetDeviceInfo(a)\n#define IDirectInputDevice_RunControlPanel(p,a,b)     (p)->RunControlPanel(a,b)\n#define IDirectInputDevice_Initialize(p,a,b,c)        (p)->Initialize(a,b,c)\n#endif\n\n\n/*****************************************************************************\n * IDirectInputDevice2A interface\n */\n#define INTERFACE IDirectInputDevice2A\nDECLARE_INTERFACE_(IDirectInputDevice2A,IDirectInputDeviceA)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectInputDeviceA methods ***/\n    STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;\n    STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;\n    STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;\n    STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;\n    STDMETHOD(Acquire)(THIS) PURE;\n    STDMETHOD(Unacquire)(THIS) PURE;\n    STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;\n    STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;\n    STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;\n    STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;\n    STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) PURE;\n    STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA pdidi) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;\n    /*** IDirectInputDevice2A methods ***/\n    STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE;\n    STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwEffType) PURE;\n    STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA pdei, REFGUID rguid) PURE;\n    STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE;\n    STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE;\n    STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE;\n    STDMETHOD(Poll)(THIS) PURE;\n    STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE;\n};\n#undef INTERFACE\n\n/*****************************************************************************\n * IDirectInputDevice2W interface\n */\n#define INTERFACE IDirectInputDevice2W\nDECLARE_INTERFACE_(IDirectInputDevice2W,IDirectInputDeviceW)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectInputDeviceW methods ***/\n    STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;\n    STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;\n    STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;\n    STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;\n    STDMETHOD(Acquire)(THIS) PURE;\n    STDMETHOD(Unacquire)(THIS) PURE;\n    STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;\n    STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;\n    STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;\n    STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;\n    STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW pdidoi, DWORD dwObj, DWORD dwHow) PURE;\n    STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW pdidi) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;\n    /*** IDirectInputDevice2W methods ***/\n    STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE;\n    STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwEffType) PURE;\n    STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW pdei, REFGUID rguid) PURE;\n    STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE;\n    STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE;\n    STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE;\n    STDMETHOD(Poll)(THIS) PURE;\n    STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectInputDevice2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectInputDevice2_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectInputDevice2_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectInputDevice methods ***/\n#define IDirectInputDevice2_GetCapabilities(p,a)       (p)->lpVtbl->GetCapabilities(p,a)\n#define IDirectInputDevice2_EnumObjects(p,a,b,c)       (p)->lpVtbl->EnumObjects(p,a,b,c)\n#define IDirectInputDevice2_GetProperty(p,a,b)         (p)->lpVtbl->GetProperty(p,a,b)\n#define IDirectInputDevice2_SetProperty(p,a,b)         (p)->lpVtbl->SetProperty(p,a,b)\n#define IDirectInputDevice2_Acquire(p)                 (p)->lpVtbl->Acquire(p)\n#define IDirectInputDevice2_Unacquire(p)               (p)->lpVtbl->Unacquire(p)\n#define IDirectInputDevice2_GetDeviceState(p,a,b)      (p)->lpVtbl->GetDeviceState(p,a,b)\n#define IDirectInputDevice2_GetDeviceData(p,a,b,c,d)   (p)->lpVtbl->GetDeviceData(p,a,b,c,d)\n#define IDirectInputDevice2_SetDataFormat(p,a)         (p)->lpVtbl->SetDataFormat(p,a)\n#define IDirectInputDevice2_SetEventNotification(p,a)  (p)->lpVtbl->SetEventNotification(p,a)\n#define IDirectInputDevice2_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)\n#define IDirectInputDevice2_GetObjectInfo(p,a,b,c)     (p)->lpVtbl->GetObjectInfo(p,a,b,c)\n#define IDirectInputDevice2_GetDeviceInfo(p,a)         (p)->lpVtbl->GetDeviceInfo(p,a)\n#define IDirectInputDevice2_RunControlPanel(p,a,b)     (p)->lpVtbl->RunControlPanel(p,a,b)\n#define IDirectInputDevice2_Initialize(p,a,b,c)        (p)->lpVtbl->Initialize(p,a,b,c)\n/*** IDirectInputDevice2 methods ***/\n#define IDirectInputDevice2_CreateEffect(p,a,b,c,d)           (p)->lpVtbl->CreateEffect(p,a,b,c,d)\n#define IDirectInputDevice2_EnumEffects(p,a,b,c)              (p)->lpVtbl->EnumEffects(p,a,b,c)\n#define IDirectInputDevice2_GetEffectInfo(p,a,b)              (p)->lpVtbl->GetEffectInfo(p,a,b)\n#define IDirectInputDevice2_GetForceFeedbackState(p,a)        (p)->lpVtbl->GetForceFeedbackState(p,a)\n#define IDirectInputDevice2_SendForceFeedbackCommand(p,a)     (p)->lpVtbl->SendForceFeedbackCommand(p,a)\n#define IDirectInputDevice2_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c)\n#define IDirectInputDevice2_Escape(p,a)                       (p)->lpVtbl->Escape(p,a)\n#define IDirectInputDevice2_Poll(p)                           (p)->lpVtbl->Poll(p)\n#define IDirectInputDevice2_SendDeviceData(p,a,b,c,d)         (p)->lpVtbl->SendDeviceData(p,a,b,c,d)\n#else\n/*** IUnknown methods ***/\n#define IDirectInputDevice2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectInputDevice2_AddRef(p)             (p)->AddRef()\n#define IDirectInputDevice2_Release(p)            (p)->Release()\n/*** IDirectInputDevice methods ***/\n#define IDirectInputDevice2_GetCapabilities(p,a)       (p)->GetCapabilities(a)\n#define IDirectInputDevice2_EnumObjects(p,a,b,c)       (p)->EnumObjects(a,b,c)\n#define IDirectInputDevice2_GetProperty(p,a,b)         (p)->GetProperty(a,b)\n#define IDirectInputDevice2_SetProperty(p,a,b)         (p)->SetProperty(a,b)\n#define IDirectInputDevice2_Acquire(p)                 (p)->Acquire()\n#define IDirectInputDevice2_Unacquire(p)               (p)->Unacquire()\n#define IDirectInputDevice2_GetDeviceState(p,a,b)      (p)->GetDeviceState(a,b)\n#define IDirectInputDevice2_GetDeviceData(p,a,b,c,d)   (p)->GetDeviceData(a,b,c,d)\n#define IDirectInputDevice2_SetDataFormat(p,a)         (p)->SetDataFormat(a)\n#define IDirectInputDevice2_SetEventNotification(p,a)  (p)->SetEventNotification(a)\n#define IDirectInputDevice2_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)\n#define IDirectInputDevice2_GetObjectInfo(p,a,b,c)     (p)->GetObjectInfo(a,b,c)\n#define IDirectInputDevice2_GetDeviceInfo(p,a)         (p)->GetDeviceInfo(a)\n#define IDirectInputDevice2_RunControlPanel(p,a,b)     (p)->RunControlPanel(a,b)\n#define IDirectInputDevice2_Initialize(p,a,b,c)        (p)->Initialize(a,b,c)\n/*** IDirectInputDevice2 methods ***/\n#define IDirectInputDevice2_CreateEffect(p,a,b,c,d)           (p)->CreateEffect(a,b,c,d)\n#define IDirectInputDevice2_EnumEffects(p,a,b,c)              (p)->EnumEffects(a,b,c)\n#define IDirectInputDevice2_GetEffectInfo(p,a,b)              (p)->GetEffectInfo(a,b)\n#define IDirectInputDevice2_GetForceFeedbackState(p,a)        (p)->GetForceFeedbackState(a)\n#define IDirectInputDevice2_SendForceFeedbackCommand(p,a)     (p)->SendForceFeedbackCommand(a)\n#define IDirectInputDevice2_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c)\n#define IDirectInputDevice2_Escape(p,a)                       (p)->Escape(a)\n#define IDirectInputDevice2_Poll(p)                           (p)->Poll()\n#define IDirectInputDevice2_SendDeviceData(p,a,b,c,d)         (p)->SendDeviceData(a,b,c,d)\n#endif\n\n/*****************************************************************************\n * IDirectInputDevice7A interface\n */\n#define INTERFACE IDirectInputDevice7A\nDECLARE_INTERFACE_(IDirectInputDevice7A,IDirectInputDevice2A)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectInputDeviceA methods ***/\n    STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;\n    STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;\n    STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;\n    STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;\n    STDMETHOD(Acquire)(THIS) PURE;\n    STDMETHOD(Unacquire)(THIS) PURE;\n    STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;\n    STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;\n    STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;\n    STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;\n    STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) PURE;\n    STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA pdidi) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;\n    /*** IDirectInputDevice2A methods ***/\n    STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE;\n    STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwEffType) PURE;\n    STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA pdei, REFGUID rguid) PURE;\n    STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE;\n    STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE;\n    STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE;\n    STDMETHOD(Poll)(THIS) PURE;\n    STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE;\n    /*** IDirectInputDevice7A methods ***/\n    STDMETHOD(EnumEffectsInFile)(THIS_ LPCSTR lpszFileName,LPDIENUMEFFECTSINFILECALLBACK pec,LPVOID pvRef,DWORD dwFlags) PURE;\n    STDMETHOD(WriteEffectToFile)(THIS_ LPCSTR lpszFileName,DWORD dwEntries,LPDIFILEEFFECT rgDiFileEft,DWORD dwFlags) PURE;\n};\n#undef INTERFACE\n\n/*****************************************************************************\n * IDirectInputDevice7W interface\n */\n#define INTERFACE IDirectInputDevice7W\nDECLARE_INTERFACE_(IDirectInputDevice7W,IDirectInputDevice2W)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectInputDeviceW methods ***/\n    STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;\n    STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;\n    STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;\n    STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;\n    STDMETHOD(Acquire)(THIS) PURE;\n    STDMETHOD(Unacquire)(THIS) PURE;\n    STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;\n    STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;\n    STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;\n    STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;\n    STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW pdidoi, DWORD dwObj, DWORD dwHow) PURE;\n    STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW pdidi) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;\n    /*** IDirectInputDevice2W methods ***/\n    STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE;\n    STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwEffType) PURE;\n    STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW pdei, REFGUID rguid) PURE;\n    STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE;\n    STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE;\n    STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE;\n    STDMETHOD(Poll)(THIS) PURE;\n    STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE;\n    /*** IDirectInputDevice7W methods ***/\n    STDMETHOD(EnumEffectsInFile)(THIS_ LPCWSTR lpszFileName,LPDIENUMEFFECTSINFILECALLBACK pec,LPVOID pvRef,DWORD dwFlags) PURE;\n    STDMETHOD(WriteEffectToFile)(THIS_ LPCWSTR lpszFileName,DWORD dwEntries,LPDIFILEEFFECT rgDiFileEft,DWORD dwFlags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectInputDevice7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectInputDevice7_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectInputDevice7_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectInputDevice methods ***/\n#define IDirectInputDevice7_GetCapabilities(p,a)       (p)->lpVtbl->GetCapabilities(p,a)\n#define IDirectInputDevice7_EnumObjects(p,a,b,c)       (p)->lpVtbl->EnumObjects(p,a,b,c)\n#define IDirectInputDevice7_GetProperty(p,a,b)         (p)->lpVtbl->GetProperty(p,a,b)\n#define IDirectInputDevice7_SetProperty(p,a,b)         (p)->lpVtbl->SetProperty(p,a,b)\n#define IDirectInputDevice7_Acquire(p)                 (p)->lpVtbl->Acquire(p)\n#define IDirectInputDevice7_Unacquire(p)               (p)->lpVtbl->Unacquire(p)\n#define IDirectInputDevice7_GetDeviceState(p,a,b)      (p)->lpVtbl->GetDeviceState(p,a,b)\n#define IDirectInputDevice7_GetDeviceData(p,a,b,c,d)   (p)->lpVtbl->GetDeviceData(p,a,b,c,d)\n#define IDirectInputDevice7_SetDataFormat(p,a)         (p)->lpVtbl->SetDataFormat(p,a)\n#define IDirectInputDevice7_SetEventNotification(p,a)  (p)->lpVtbl->SetEventNotification(p,a)\n#define IDirectInputDevice7_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)\n#define IDirectInputDevice7_GetObjectInfo(p,a,b,c)     (p)->lpVtbl->GetObjectInfo(p,a,b,c)\n#define IDirectInputDevice7_GetDeviceInfo(p,a)         (p)->lpVtbl->GetDeviceInfo(p,a)\n#define IDirectInputDevice7_RunControlPanel(p,a,b)     (p)->lpVtbl->RunControlPanel(p,a,b)\n#define IDirectInputDevice7_Initialize(p,a,b,c)        (p)->lpVtbl->Initialize(p,a,b,c)\n/*** IDirectInputDevice2 methods ***/\n#define IDirectInputDevice7_CreateEffect(p,a,b,c,d)           (p)->lpVtbl->CreateEffect(p,a,b,c,d)\n#define IDirectInputDevice7_EnumEffects(p,a,b,c)              (p)->lpVtbl->EnumEffects(p,a,b,c)\n#define IDirectInputDevice7_GetEffectInfo(p,a,b)              (p)->lpVtbl->GetEffectInfo(p,a,b)\n#define IDirectInputDevice7_GetForceFeedbackState(p,a)        (p)->lpVtbl->GetForceFeedbackState(p,a)\n#define IDirectInputDevice7_SendForceFeedbackCommand(p,a)     (p)->lpVtbl->SendForceFeedbackCommand(p,a)\n#define IDirectInputDevice7_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c)\n#define IDirectInputDevice7_Escape(p,a)                       (p)->lpVtbl->Escape(p,a)\n#define IDirectInputDevice7_Poll(p)                           (p)->lpVtbl->Poll(p)\n#define IDirectInputDevice7_SendDeviceData(p,a,b,c,d)         (p)->lpVtbl->SendDeviceData(p,a,b,c,d)\n/*** IDirectInputDevice7 methods ***/\n#define IDirectInputDevice7_EnumEffectsInFile(p,a,b,c,d) (p)->lpVtbl->EnumEffectsInFile(p,a,b,c,d)\n#define IDirectInputDevice7_WriteEffectToFile(p,a,b,c,d) (p)->lpVtbl->WriteEffectToFile(p,a,b,c,d)\n#else\n/*** IUnknown methods ***/\n#define IDirectInputDevice7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectInputDevice7_AddRef(p)             (p)->AddRef()\n#define IDirectInputDevice7_Release(p)            (p)->Release()\n/*** IDirectInputDevice methods ***/\n#define IDirectInputDevice7_GetCapabilities(p,a)       (p)->GetCapabilities(a)\n#define IDirectInputDevice7_EnumObjects(p,a,b,c)       (p)->EnumObjects(a,b,c)\n#define IDirectInputDevice7_GetProperty(p,a,b)         (p)->GetProperty(a,b)\n#define IDirectInputDevice7_SetProperty(p,a,b)         (p)->SetProperty(a,b)\n#define IDirectInputDevice7_Acquire(p)                 (p)->Acquire()\n#define IDirectInputDevice7_Unacquire(p)               (p)->Unacquire()\n#define IDirectInputDevice7_GetDeviceState(p,a,b)      (p)->GetDeviceState(a,b)\n#define IDirectInputDevice7_GetDeviceData(p,a,b,c,d)   (p)->GetDeviceData(a,b,c,d)\n#define IDirectInputDevice7_SetDataFormat(p,a)         (p)->SetDataFormat(a)\n#define IDirectInputDevice7_SetEventNotification(p,a)  (p)->SetEventNotification(a)\n#define IDirectInputDevice7_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)\n#define IDirectInputDevice7_GetObjectInfo(p,a,b,c)     (p)->GetObjectInfo(a,b,c)\n#define IDirectInputDevice7_GetDeviceInfo(p,a)         (p)->GetDeviceInfo(a)\n#define IDirectInputDevice7_RunControlPanel(p,a,b)     (p)->RunControlPanel(a,b)\n#define IDirectInputDevice7_Initialize(p,a,b,c)        (p)->Initialize(a,b,c)\n/*** IDirectInputDevice2 methods ***/\n#define IDirectInputDevice7_CreateEffect(p,a,b,c,d)           (p)->CreateEffect(a,b,c,d)\n#define IDirectInputDevice7_EnumEffects(p,a,b,c)              (p)->EnumEffects(a,b,c)\n#define IDirectInputDevice7_GetEffectInfo(p,a,b)              (p)->GetEffectInfo(a,b)\n#define IDirectInputDevice7_GetForceFeedbackState(p,a)        (p)->GetForceFeedbackState(a)\n#define IDirectInputDevice7_SendForceFeedbackCommand(p,a)     (p)->SendForceFeedbackCommand(a)\n#define IDirectInputDevice7_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c)\n#define IDirectInputDevice7_Escape(p,a)                       (p)->Escape(a)\n#define IDirectInputDevice7_Poll(p)                           (p)->Poll()\n#define IDirectInputDevice7_SendDeviceData(p,a,b,c,d)         (p)->SendDeviceData(a,b,c,d)\n/*** IDirectInputDevice7 methods ***/\n#define IDirectInputDevice7_EnumEffectsInFile(p,a,b,c,d) (p)->EnumEffectsInFile(a,b,c,d)\n#define IDirectInputDevice7_WriteEffectToFile(p,a,b,c,d) (p)->WriteEffectToFile(a,b,c,d)\n#endif\n\n\n/*****************************************************************************\n * IDirectInputDevice8A interface\n */\n#define INTERFACE IDirectInputDevice8A\nDECLARE_INTERFACE_(IDirectInputDevice8A,IDirectInputDevice7A)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectInputDeviceA methods ***/\n    STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;\n    STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;\n    STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;\n    STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;\n    STDMETHOD(Acquire)(THIS) PURE;\n    STDMETHOD(Unacquire)(THIS) PURE;\n    STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;\n    STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;\n    STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;\n    STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;\n    STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) PURE;\n    STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA pdidi) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;\n    /*** IDirectInputDevice2A methods ***/\n    STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE;\n    STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwEffType) PURE;\n    STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA pdei, REFGUID rguid) PURE;\n    STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE;\n    STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE;\n    STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE;\n    STDMETHOD(Poll)(THIS) PURE;\n    STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE;\n    /*** IDirectInputDevice7A methods ***/\n    STDMETHOD(EnumEffectsInFile)(THIS_ LPCSTR lpszFileName,LPDIENUMEFFECTSINFILECALLBACK pec,LPVOID pvRef,DWORD dwFlags) PURE;\n    STDMETHOD(WriteEffectToFile)(THIS_ LPCSTR lpszFileName,DWORD dwEntries,LPDIFILEEFFECT rgDiFileEft,DWORD dwFlags) PURE;\n    /*** IDirectInputDevice8A methods ***/\n    STDMETHOD(BuildActionMap)(THIS_ LPDIACTIONFORMATA lpdiaf, LPCSTR lpszUserName, DWORD dwFlags) PURE;\n    STDMETHOD(SetActionMap)(THIS_ LPDIACTIONFORMATA lpdiaf, LPCSTR lpszUserName, DWORD dwFlags) PURE;\n    STDMETHOD(GetImageInfo)(THIS_ LPDIDEVICEIMAGEINFOHEADERA lpdiDevImageInfoHeader) PURE;\n};\n#undef INTERFACE\n\n/*****************************************************************************\n * IDirectInputDevice8W interface\n */\n#define INTERFACE IDirectInputDevice8W\nDECLARE_INTERFACE_(IDirectInputDevice8W,IDirectInputDevice7W)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectInputDeviceW methods ***/\n    STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;\n    STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;\n    STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;\n    STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;\n    STDMETHOD(Acquire)(THIS) PURE;\n    STDMETHOD(Unacquire)(THIS) PURE;\n    STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;\n    STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;\n    STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;\n    STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;\n    STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW pdidoi, DWORD dwObj, DWORD dwHow) PURE;\n    STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW pdidi) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;\n    /*** IDirectInputDevice2W methods ***/\n    STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE;\n    STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwEffType) PURE;\n    STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW pdei, REFGUID rguid) PURE;\n    STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE;\n    STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE;\n    STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE;\n    STDMETHOD(Poll)(THIS) PURE;\n    STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE;\n    /*** IDirectInputDevice7W methods ***/\n    STDMETHOD(EnumEffectsInFile)(THIS_ LPCWSTR lpszFileName,LPDIENUMEFFECTSINFILECALLBACK pec,LPVOID pvRef,DWORD dwFlags) PURE;\n    STDMETHOD(WriteEffectToFile)(THIS_ LPCWSTR lpszFileName,DWORD dwEntries,LPDIFILEEFFECT rgDiFileEft,DWORD dwFlags) PURE;\n    /*** IDirectInputDevice8W methods ***/\n    STDMETHOD(BuildActionMap)(THIS_ LPDIACTIONFORMATW lpdiaf, LPCWSTR lpszUserName, DWORD dwFlags) PURE;\n    STDMETHOD(SetActionMap)(THIS_ LPDIACTIONFORMATW lpdiaf, LPCWSTR lpszUserName, DWORD dwFlags) PURE;\n    STDMETHOD(GetImageInfo)(THIS_ LPDIDEVICEIMAGEINFOHEADERW lpdiDevImageInfoHeader) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectInputDevice8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectInputDevice8_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectInputDevice8_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectInputDevice methods ***/\n#define IDirectInputDevice8_GetCapabilities(p,a)       (p)->lpVtbl->GetCapabilities(p,a)\n#define IDirectInputDevice8_EnumObjects(p,a,b,c)       (p)->lpVtbl->EnumObjects(p,a,b,c)\n#define IDirectInputDevice8_GetProperty(p,a,b)         (p)->lpVtbl->GetProperty(p,a,b)\n#define IDirectInputDevice8_SetProperty(p,a,b)         (p)->lpVtbl->SetProperty(p,a,b)\n#define IDirectInputDevice8_Acquire(p)                 (p)->lpVtbl->Acquire(p)\n#define IDirectInputDevice8_Unacquire(p)               (p)->lpVtbl->Unacquire(p)\n#define IDirectInputDevice8_GetDeviceState(p,a,b)      (p)->lpVtbl->GetDeviceState(p,a,b)\n#define IDirectInputDevice8_GetDeviceData(p,a,b,c,d)   (p)->lpVtbl->GetDeviceData(p,a,b,c,d)\n#define IDirectInputDevice8_SetDataFormat(p,a)         (p)->lpVtbl->SetDataFormat(p,a)\n#define IDirectInputDevice8_SetEventNotification(p,a)  (p)->lpVtbl->SetEventNotification(p,a)\n#define IDirectInputDevice8_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)\n#define IDirectInputDevice8_GetObjectInfo(p,a,b,c)     (p)->lpVtbl->GetObjectInfo(p,a,b,c)\n#define IDirectInputDevice8_GetDeviceInfo(p,a)         (p)->lpVtbl->GetDeviceInfo(p,a)\n#define IDirectInputDevice8_RunControlPanel(p,a,b)     (p)->lpVtbl->RunControlPanel(p,a,b)\n#define IDirectInputDevice8_Initialize(p,a,b,c)        (p)->lpVtbl->Initialize(p,a,b,c)\n/*** IDirectInputDevice2 methods ***/\n#define IDirectInputDevice8_CreateEffect(p,a,b,c,d)           (p)->lpVtbl->CreateEffect(p,a,b,c,d)\n#define IDirectInputDevice8_EnumEffects(p,a,b,c)              (p)->lpVtbl->EnumEffects(p,a,b,c)\n#define IDirectInputDevice8_GetEffectInfo(p,a,b)              (p)->lpVtbl->GetEffectInfo(p,a,b)\n#define IDirectInputDevice8_GetForceFeedbackState(p,a)        (p)->lpVtbl->GetForceFeedbackState(p,a)\n#define IDirectInputDevice8_SendForceFeedbackCommand(p,a)     (p)->lpVtbl->SendForceFeedbackCommand(p,a)\n#define IDirectInputDevice8_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c)\n#define IDirectInputDevice8_Escape(p,a)                       (p)->lpVtbl->Escape(p,a)\n#define IDirectInputDevice8_Poll(p)                           (p)->lpVtbl->Poll(p)\n#define IDirectInputDevice8_SendDeviceData(p,a,b,c,d)         (p)->lpVtbl->SendDeviceData(p,a,b,c,d)\n/*** IDirectInputDevice7 methods ***/\n#define IDirectInputDevice8_EnumEffectsInFile(p,a,b,c,d) (p)->lpVtbl->EnumEffectsInFile(p,a,b,c,d)\n#define IDirectInputDevice8_WriteEffectToFile(p,a,b,c,d) (p)->lpVtbl->WriteEffectToFile(p,a,b,c,d)\n/*** IDirectInputDevice8 methods ***/\n#define IDirectInputDevice8_BuildActionMap(p,a,b,c) (p)->lpVtbl->BuildActionMap(p,a,b,c)\n#define IDirectInputDevice8_SetActionMap(p,a,b,c)   (p)->lpVtbl->SetActionMap(p,a,b,c)\n#define IDirectInputDevice8_GetImageInfo(p,a)       (p)->lpVtbl->GetImageInfo(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirectInputDevice8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectInputDevice8_AddRef(p)             (p)->AddRef()\n#define IDirectInputDevice8_Release(p)            (p)->Release()\n/*** IDirectInputDevice methods ***/\n#define IDirectInputDevice8_GetCapabilities(p,a)       (p)->GetCapabilities(a)\n#define IDirectInputDevice8_EnumObjects(p,a,b,c)       (p)->EnumObjects(a,b,c)\n#define IDirectInputDevice8_GetProperty(p,a,b)         (p)->GetProperty(a,b)\n#define IDirectInputDevice8_SetProperty(p,a,b)         (p)->SetProperty(a,b)\n#define IDirectInputDevice8_Acquire(p)                 (p)->Acquire()\n#define IDirectInputDevice8_Unacquire(p)               (p)->Unacquire()\n#define IDirectInputDevice8_GetDeviceState(p,a,b)      (p)->GetDeviceState(a,b)\n#define IDirectInputDevice8_GetDeviceData(p,a,b,c,d)   (p)->GetDeviceData(a,b,c,d)\n#define IDirectInputDevice8_SetDataFormat(p,a)         (p)->SetDataFormat(a)\n#define IDirectInputDevice8_SetEventNotification(p,a)  (p)->SetEventNotification(a)\n#define IDirectInputDevice8_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)\n#define IDirectInputDevice8_GetObjectInfo(p,a,b,c)     (p)->GetObjectInfo(a,b,c)\n#define IDirectInputDevice8_GetDeviceInfo(p,a)         (p)->GetDeviceInfo(a)\n#define IDirectInputDevice8_RunControlPanel(p,a,b)     (p)->RunControlPanel(a,b)\n#define IDirectInputDevice8_Initialize(p,a,b,c)        (p)->Initialize(a,b,c)\n/*** IDirectInputDevice2 methods ***/\n#define IDirectInputDevice8_CreateEffect(p,a,b,c,d)           (p)->CreateEffect(a,b,c,d)\n#define IDirectInputDevice8_EnumEffects(p,a,b,c)              (p)->EnumEffects(a,b,c)\n#define IDirectInputDevice8_GetEffectInfo(p,a,b)              (p)->GetEffectInfo(a,b)\n#define IDirectInputDevice8_GetForceFeedbackState(p,a)        (p)->GetForceFeedbackState(a)\n#define IDirectInputDevice8_SendForceFeedbackCommand(p,a)     (p)->SendForceFeedbackCommand(a)\n#define IDirectInputDevice8_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c)\n#define IDirectInputDevice8_Escape(p,a)                       (p)->Escape(a)\n#define IDirectInputDevice8_Poll(p)                           (p)->Poll()\n#define IDirectInputDevice8_SendDeviceData(p,a,b,c,d)         (p)->SendDeviceData(a,b,c,d)\n/*** IDirectInputDevice7 methods ***/\n#define IDirectInputDevice8_EnumEffectsInFile(p,a,b,c,d) (p)->EnumEffectsInFile(a,b,c,d)\n#define IDirectInputDevice8_WriteEffectToFile(p,a,b,c,d) (p)->WriteEffectToFile(a,b,c,d)\n/*** IDirectInputDevice8 methods ***/\n#define IDirectInputDevice8_BuildActionMap(p,a,b,c) (p)->BuildActionMap(a,b,c)\n#define IDirectInputDevice8_SetActionMap(p,a,b,c)   (p)->SetActionMap(a,b,c)\n#define IDirectInputDevice8_GetImageInfo(p,a)       (p)->GetImageInfo(a)\n#endif\n\n/* \"Standard\" Mouse report... */\ntypedef struct DIMOUSESTATE {\n  LONG lX;\n  LONG lY;\n  LONG lZ;\n  BYTE rgbButtons[4];\n} DIMOUSESTATE;\n\n/* \"Standard\" Mouse report for DInput 7... */\ntypedef struct DIMOUSESTATE2 {\n  LONG lX;\n  LONG lY;\n  LONG lZ;\n  BYTE rgbButtons[8];\n} DIMOUSESTATE2;\n\n#define DIMOFS_X        FIELD_OFFSET(DIMOUSESTATE, lX)\n#define DIMOFS_Y        FIELD_OFFSET(DIMOUSESTATE, lY)\n#define DIMOFS_Z        FIELD_OFFSET(DIMOUSESTATE, lZ)\n#define DIMOFS_BUTTON0 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 0)\n#define DIMOFS_BUTTON1 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 1)\n#define DIMOFS_BUTTON2 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 2)\n#define DIMOFS_BUTTON3 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 3)\n#define DIMOFS_BUTTON4 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 4)\n#define DIMOFS_BUTTON5 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 5)\n#define DIMOFS_BUTTON6 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 6)\n#define DIMOFS_BUTTON7 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 7)\n\n/* New DirectInput8 mouse definitions */\n\n#define DIMOUSE_XAXISAB            (0x82000200 | DIMOFS_X)\n#define DIMOUSE_YAXISAB            (0x82000200 | DIMOFS_Y)\n#define DIMOUSE_XAXIS              (0x82000300 | DIMOFS_X)\n#define DIMOUSE_YAXIS              (0x82000300 | DIMOFS_Y)\n#define DIMOUSE_WHEEL              (0x82000300 | DIMOFS_Z)\n#define DIMOUSE_BUTTON0            (0x82000400 | DIMOFS_BUTTON0)\n#define DIMOUSE_BUTTON1            (0x82000400 | DIMOFS_BUTTON1)\n#define DIMOUSE_BUTTON2            (0x82000400 | DIMOFS_BUTTON2)\n#define DIMOUSE_BUTTON3            (0x82000400 | DIMOFS_BUTTON3)\n#define DIMOUSE_BUTTON4            (0x82000400 | DIMOFS_BUTTON4)\n#define DIMOUSE_BUTTON5            (0x82000400 | DIMOFS_BUTTON5)\n#define DIMOUSE_BUTTON6            (0x82000400 | DIMOFS_BUTTON6)\n#define DIMOUSE_BUTTON7            (0x82000400 | DIMOFS_BUTTON7)\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\nextern const DIDATAFORMAT c_dfDIMouse;\nextern const DIDATAFORMAT c_dfDIMouse2; /* DX 7 */\nextern const DIDATAFORMAT c_dfDIKeyboard;\nextern const DIDATAFORMAT c_dfDIJoystick;\nextern const DIDATAFORMAT c_dfDIJoystick2;\n#ifdef __cplusplus\n};\n#endif\n\n#define DIAXIS_ANY_X_1             0xFF00C201\n#define DIAXIS_ANY_X_2             0xFF00C202\n#define DIAXIS_ANY_Y_1             0xFF014201\n#define DIAXIS_ANY_Y_2             0xFF014202\n#define DIAXIS_ANY_Z_1             0xFF01C201\n#define DIAXIS_ANY_Z_2             0xFF01C202\n#define DIAXIS_ANY_R_1             0xFF024201\n#define DIAXIS_ANY_R_2             0xFF024202\n#define DIAXIS_ANY_U_1             0xFF02C201\n#define DIAXIS_ANY_U_2             0xFF02C202\n#define DIAXIS_ANY_V_1             0xFF034201\n#define DIAXIS_ANY_V_2             0xFF034202\n#define DIAXIS_ANY_A_1             0xFF03C201\n#define DIAXIS_ANY_A_2             0xFF03C202\n#define DIAXIS_ANY_B_1             0xFF044201\n#define DIAXIS_ANY_B_2             0xFF044202\n#define DIAXIS_ANY_C_1             0xFF04C201\n#define DIAXIS_ANY_C_2             0xFF04C202\n#define DIAXIS_ANY_S_1             0xFF054201\n#define DIAXIS_ANY_S_2             0xFF054202\n#define DIAXIS_ANY_1               0xFF004201\n#define DIAXIS_ANY_2               0xFF004202\n#define DIAXIS_ANY_3               0xFF004203\n#define DIAXIS_ANY_4               0xFF004204\n#define DIPOV_ANY_1                0xFF004601\n#define DIPOV_ANY_2                0xFF004602\n#define DIPOV_ANY_3                0xFF004603\n#define DIPOV_ANY_4                0xFF004604\n#define DIBUTTON_ANY(instance)     (0xFF004400 | (instance))\n\n\n/*****************************************************************************\n * IDirectInputA interface\n */\n#define INTERFACE IDirectInputA\nDECLARE_INTERFACE_(IDirectInputA,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectInputA methods ***/\n    STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;\n    STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;\n    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;\n};\n#undef INTERFACE\n\n/*****************************************************************************\n * IDirectInputW interface\n */\n#define INTERFACE IDirectInputW\nDECLARE_INTERFACE_(IDirectInputW,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectInputW methods ***/\n    STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;\n    STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;\n    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectInput_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectInput_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectInput_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectInput methods ***/\n#define IDirectInput_CreateDevice(p,a,b,c)  (p)->lpVtbl->CreateDevice(p,a,b,c)\n#define IDirectInput_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d)\n#define IDirectInput_GetDeviceStatus(p,a)   (p)->lpVtbl->GetDeviceStatus(p,a)\n#define IDirectInput_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)\n#define IDirectInput_Initialize(p,a,b)      (p)->lpVtbl->Initialize(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirectInput_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectInput_AddRef(p)             (p)->AddRef()\n#define IDirectInput_Release(p)            (p)->Release()\n/*** IDirectInput methods ***/\n#define IDirectInput_CreateDevice(p,a,b,c)  (p)->CreateDevice(a,b,c)\n#define IDirectInput_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d)\n#define IDirectInput_GetDeviceStatus(p,a)   (p)->GetDeviceStatus(a)\n#define IDirectInput_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)\n#define IDirectInput_Initialize(p,a,b)      (p)->Initialize(a,b)\n#endif\n\n/*****************************************************************************\n * IDirectInput2A interface\n */\n#define INTERFACE IDirectInput2A\nDECLARE_INTERFACE_(IDirectInput2A,IDirectInputA)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectInputA methods ***/\n    STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;\n    STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;\n    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;\n    /*** IDirectInput2A methods ***/\n    STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCSTR pszName, LPGUID pguidInstance) PURE;\n};\n#undef INTERFACE\n\n/*****************************************************************************\n * IDirectInput2W interface\n */\n#define INTERFACE IDirectInput2W\nDECLARE_INTERFACE_(IDirectInput2W,IDirectInputW)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectInputW methods ***/\n    STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;\n    STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;\n    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;\n    /*** IDirectInput2W methods ***/\n    STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCWSTR pszName, LPGUID pguidInstance) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectInput2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectInput2_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectInput2_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectInput methods ***/\n#define IDirectInput2_CreateDevice(p,a,b,c)  (p)->lpVtbl->CreateDevice(p,a,b,c)\n#define IDirectInput2_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d)\n#define IDirectInput2_GetDeviceStatus(p,a)   (p)->lpVtbl->GetDeviceStatus(p,a)\n#define IDirectInput2_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)\n#define IDirectInput2_Initialize(p,a,b)      (p)->lpVtbl->Initialize(p,a,b)\n/*** IDirectInput2 methods ***/\n#define IDirectInput2_FindDevice(p,a,b,c)    (p)->lpVtbl->FindDevice(p,a,b,c)\n#else\n/*** IUnknown methods ***/\n#define IDirectInput2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectInput2_AddRef(p)             (p)->AddRef()\n#define IDirectInput2_Release(p)            (p)->Release()\n/*** IDirectInput methods ***/\n#define IDirectInput2_CreateDevice(p,a,b,c)  (p)->CreateDevice(a,b,c)\n#define IDirectInput2_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d)\n#define IDirectInput2_GetDeviceStatus(p,a)   (p)->GetDeviceStatus(a)\n#define IDirectInput2_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)\n#define IDirectInput2_Initialize(p,a,b)      (p)->Initialize(a,b)\n/*** IDirectInput2 methods ***/\n#define IDirectInput2_FindDevice(p,a,b,c)    (p)->FindDevice(a,b,c)\n#endif\n\n/*****************************************************************************\n * IDirectInput7A interface\n */\n#define INTERFACE IDirectInput7A\nDECLARE_INTERFACE_(IDirectInput7A,IDirectInput2A)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectInputA methods ***/\n    STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;\n    STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;\n    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;\n    /*** IDirectInput2A methods ***/\n    STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCSTR pszName, LPGUID pguidInstance) PURE;\n    /*** IDirectInput7A methods ***/\n    STDMETHOD(CreateDeviceEx)(THIS_ REFGUID rguid, REFIID riid, LPVOID *pvOut, LPUNKNOWN lpUnknownOuter) PURE;\n};\n#undef INTERFACE\n\n/*****************************************************************************\n * IDirectInput7W interface\n */\n#define INTERFACE IDirectInput7W\nDECLARE_INTERFACE_(IDirectInput7W,IDirectInput2W)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectInputW methods ***/\n    STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;\n    STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;\n    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;\n    /*** IDirectInput2W methods ***/\n    STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCWSTR pszName, LPGUID pguidInstance) PURE;\n    /*** IDirectInput7W methods ***/\n    STDMETHOD(CreateDeviceEx)(THIS_ REFGUID rguid, REFIID riid, LPVOID *pvOut, LPUNKNOWN lpUnknownOuter) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectInput7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectInput7_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectInput7_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectInput methods ***/\n#define IDirectInput7_CreateDevice(p,a,b,c)  (p)->lpVtbl->CreateDevice(p,a,b,c)\n#define IDirectInput7_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d)\n#define IDirectInput7_GetDeviceStatus(p,a)   (p)->lpVtbl->GetDeviceStatus(p,a)\n#define IDirectInput7_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)\n#define IDirectInput7_Initialize(p,a,b)      (p)->lpVtbl->Initialize(p,a,b)\n/*** IDirectInput2 methods ***/\n#define IDirectInput7_FindDevice(p,a,b,c)    (p)->lpVtbl->FindDevice(p,a,b,c)\n/*** IDirectInput7 methods ***/\n#define IDirectInput7_CreateDeviceEx(p,a,b,c,d) (p)->lpVtbl->CreateDeviceEx(p,a,b,c,d)\n#else\n/*** IUnknown methods ***/\n#define IDirectInput7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectInput7_AddRef(p)             (p)->AddRef()\n#define IDirectInput7_Release(p)            (p)->Release()\n/*** IDirectInput methods ***/\n#define IDirectInput7_CreateDevice(p,a,b,c)  (p)->CreateDevice(a,b,c)\n#define IDirectInput7_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d)\n#define IDirectInput7_GetDeviceStatus(p,a)   (p)->GetDeviceStatus(a)\n#define IDirectInput7_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)\n#define IDirectInput7_Initialize(p,a,b)      (p)->Initialize(a,b)\n/*** IDirectInput2 methods ***/\n#define IDirectInput7_FindDevice(p,a,b,c)    (p)->FindDevice(a,b,c)\n/*** IDirectInput7 methods ***/\n#define IDirectInput7_CreateDeviceEx(p,a,b,c,d) (p)->CreateDeviceEx(a,b,c,d)\n#endif\n\n\n/*****************************************************************************\n * IDirectInput8A interface\n */\n#define INTERFACE IDirectInput8A\nDECLARE_INTERFACE_(IDirectInput8A,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectInput8A methods ***/\n    STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICE8A *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;\n    STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;\n    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;\n    STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCSTR pszName, LPGUID pguidInstance) PURE;\n    STDMETHOD(EnumDevicesBySemantics)(THIS_ LPCSTR ptszUserName, LPDIACTIONFORMATA lpdiActionFormat, LPDIENUMDEVICESBYSEMANTICSCBA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;\n    STDMETHOD(ConfigureDevices)(THIS_ LPDICONFIGUREDEVICESCALLBACK lpdiCallback, LPDICONFIGUREDEVICESPARAMSA lpdiCDParams, DWORD dwFlags, LPVOID pvRefData) PURE;\n};\n#undef INTERFACE\n\n/*****************************************************************************\n * IDirectInput8W interface\n */\n#define INTERFACE IDirectInput8W\nDECLARE_INTERFACE_(IDirectInput8W,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectInput8W methods ***/\n    STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICE8W *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;\n    STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;\n    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;\n    STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCWSTR pszName, LPGUID pguidInstance) PURE;\n    STDMETHOD(EnumDevicesBySemantics)(THIS_ LPCWSTR ptszUserName, LPDIACTIONFORMATW lpdiActionFormat, LPDIENUMDEVICESBYSEMANTICSCBW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;\n    STDMETHOD(ConfigureDevices)(THIS_ LPDICONFIGUREDEVICESCALLBACK lpdiCallback, LPDICONFIGUREDEVICESPARAMSW lpdiCDParams, DWORD dwFlags, LPVOID pvRefData) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectInput8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectInput8_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectInput8_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectInput8 methods ***/\n#define IDirectInput8_CreateDevice(p,a,b,c)       (p)->lpVtbl->CreateDevice(p,a,b,c)\n#define IDirectInput8_EnumDevices(p,a,b,c,d)      (p)->lpVtbl->EnumDevices(p,a,b,c,d)\n#define IDirectInput8_GetDeviceStatus(p,a)        (p)->lpVtbl->GetDeviceStatus(p,a)\n#define IDirectInput8_RunControlPanel(p,a,b)      (p)->lpVtbl->RunControlPanel(p,a,b)\n#define IDirectInput8_Initialize(p,a,b)           (p)->lpVtbl->Initialize(p,a,b)\n#define IDirectInput8_FindDevice(p,a,b,c)         (p)->lpVtbl->FindDevice(p,a,b,c)\n#define IDirectInput8_EnumDevicesBySemantics(p,a,b,c,d,e) (p)->lpVtbl->EnumDevicesBySemantics(p,a,b,c,d,e)\n#define IDirectInput8_ConfigureDevices(p,a,b,c,d) (p)->lpVtbl->ConfigureDevices(p,a,b,c,d)\n#else\n/*** IUnknown methods ***/\n#define IDirectInput8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectInput8_AddRef(p)             (p)->AddRef()\n#define IDirectInput8_Release(p)            (p)->Release()\n/*** IDirectInput8 methods ***/\n#define IDirectInput8_CreateDevice(p,a,b,c)       (p)->CreateDevice(a,b,c)\n#define IDirectInput8_EnumDevices(p,a,b,c,d)      (p)->EnumDevices(a,b,c,d)\n#define IDirectInput8_GetDeviceStatus(p,a)        (p)->GetDeviceStatus(a)\n#define IDirectInput8_RunControlPanel(p,a,b)      (p)->RunControlPanel(a,b)\n#define IDirectInput8_Initialize(p,a,b)           (p)->Initialize(a,b)\n#define IDirectInput8_FindDevice(p,a,b,c)         (p)->FindDevice(a,b,c)\n#define IDirectInput8_EnumDevicesBySemantics(p,a,b,c,d,e) (p)->EnumDevicesBySemantics(a,b,c,d,e)\n#define IDirectInput8_ConfigureDevices(p,a,b,c,d) (p)->ConfigureDevices(a,b,c,d)\n#endif\n\n\n/* Export functions */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nHRESULT WINAPI DirectInput8Create(HINSTANCE,DWORD,REFIID,LPVOID *,LPUNKNOWN);\n\nHRESULT WINAPI DirectInputCreateA(HINSTANCE,DWORD,LPDIRECTINPUTA *,LPUNKNOWN);\nHRESULT WINAPI DirectInputCreateW(HINSTANCE,DWORD,LPDIRECTINPUTW *,LPUNKNOWN);\n#define DirectInputCreate WINELIB_NAME_AW(DirectInputCreate)\n\nHRESULT WINAPI DirectInputCreateEx(HINSTANCE,DWORD,REFIID,LPVOID *,LPUNKNOWN);\n\n#ifdef __cplusplus\n};\n#endif\n\n#endif /* __DINPUT_INCLUDED__ */\n"
  },
  {
    "path": "wine/windows/dinputd.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __DINPUTD_INCLUDED__\n#define __DINPUTD_INCLUDED__\n\n#define COM_NO_WINDOWS_H\n#include <objbase.h>\n\n#ifndef DIRECTINPUT_VERSION\n#define DIRECTINPUT_VERSION 0x0800\n#endif\n\nDEFINE_GUID(IID_IDirectInputJoyConfig8, 0xEB0D7DFA,0x1990,0x4F27,0xB4,0xD6,0xED,0xF2,0xEE,0xC4,0xA4,0x4C);\n\ntypedef struct IDirectInputJoyConfig8 *LPDIRECTINPUTJOYCONFIG8;\n\n\ntypedef BOOL (CALLBACK *LPDIJOYTYPECALLBACK)(LPCWSTR, LPVOID);\n\n#define MAX_JOYSTRING 256\n#ifndef MAX_JOYSTICKOEMVXDNAME\n#define MAX_JOYSTICKOEMVXDNAME 260\n#endif\n\n#define JOY_POV_NUMDIRS         4\n#define JOY_POVVAL_FORWARD      0\n#define JOY_POVVAL_BACKWARD     1\n#define JOY_POVVAL_LEFT         2\n#define JOY_POVVAL_RIGHT        3\n\n#define DIERR_NOMOREITEMS       MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NO_MORE_ITEMS)\n\ntypedef struct joypos_tag\n{\n    DWORD dwX;\n    DWORD dwY;\n    DWORD dwZ;\n    DWORD dwR;\n    DWORD dwU;\n    DWORD dwV;\n} JOYPOS, *LPJOYPOS;\n\ntypedef struct joyrange_tag\n{\n    JOYPOS jpMin;\n    JOYPOS jpMax;\n    JOYPOS jpCenter;\n} JOYRANGE, *LPJOYRANGE;\n\ntypedef struct joyreguservalues_tag\n{\n    DWORD dwTimeOut;\n    JOYRANGE jrvRanges;\n    JOYPOS jpDeadZone;\n} JOYREGUSERVALUES, *LPJOYREGUSERVALUES;\n\ntypedef struct joyreghwsettings_tag\n{\n    DWORD dwFlags;\n    DWORD dwNumButtons;\n} JOYREGHWSETTINGS, *LPJOYHWSETTINGS;\n\ntypedef struct joyreghwvalues_tag\n{\n    JOYRANGE jrvHardware;\n    DWORD dwPOVValues[JOY_POV_NUMDIRS];\n    DWORD dwCalFlags;\n} JOYREGHWVALUES, *LPJOYREGHWVALUES;\n\ntypedef struct joyreghwconfig_tag\n{\n    JOYREGHWSETTINGS hws;\n    DWORD dwUsageSettings;\n    JOYREGHWVALUES hwv;\n    DWORD dwType;\n    DWORD dwReserved;\n} JOYREGHWCONFIG, *LPJOYREGHWCONFIG;\n\ntypedef struct DIJOYTYPEINFO_DX5\n{\n    DWORD dwSize;\n    JOYREGHWSETTINGS hws;\n    CLSID clsidConfig;\n    WCHAR wszDisplayName[MAX_JOYSTRING];\n    WCHAR wszCallout[MAX_JOYSTICKOEMVXDNAME];\n} DIJOYTYPEINFO_DX5, *LPDIJOYTYPEINFO_DX5;\ntypedef const DIJOYTYPEINFO_DX5 *LPCDIJOYTYPEINFO_DX5;\n\ntypedef struct DIJOYTYPEINFO_DX6\n{\n    DWORD dwSize;\n    JOYREGHWSETTINGS hws;\n    CLSID clsidConfig;\n    WCHAR wszDisplayName[MAX_JOYSTRING];\n    WCHAR wszCallout[MAX_JOYSTICKOEMVXDNAME];\n    WCHAR wszHardwareId[MAX_JOYSTRING];\n    DWORD dwFlags1;\n} DIJOYTYPEINFO_DX6, *LPDIJOYTYPEINFO_DX6;\ntypedef const DIJOYTYPEINFO_DX6 *LPCDIJOYTYPEINFO_DX6;\n\ntypedef struct DIJOYTYPEINFO\n{\n    DWORD dwSize;\n    JOYREGHWSETTINGS hws;\n    CLSID clsidConfig;\n    WCHAR wszDisplayName[MAX_JOYSTRING];\n    WCHAR wszCallout[MAX_JOYSTICKOEMVXDNAME];\n    WCHAR wszHardwareId[MAX_JOYSTRING];\n    DWORD dwFlags1;\n    DWORD dwFlags2;\n    WCHAR wszMapFile[MAX_JOYSTRING];\n} DIJOYTYPEINFO, *LPDIJOYTYPEINFO;\ntypedef const DIJOYTYPEINFO *LPCDIJOYTYPEINFO;\n#define DIJC_GUIDINSTANCE       0x00000001\n#define DIJC_REGHWCONFIGTYPE    0x00000002\n#define DIJC_GAIN               0x00000004\n#define DIJC_CALLOUT            0x00000008\n#define DIJC_WDMGAMEPORT        0x00000010\n\ntypedef struct DIJOYCONFIG_DX5\n{\n    DWORD dwSize;\n    GUID guidInstance;\n    JOYREGHWCONFIG hwc;\n    DWORD dwGain;\n    WCHAR wszType[MAX_JOYSTRING];\n    WCHAR wszCallout[MAX_JOYSTRING];\n} DIJOYCONFIG_DX5, *LPDIJOYCONFIG_DX5;\ntypedef const DIJOYCONFIG_DX5 *LPCDIJOYCONFIG_DX5;\n\ntypedef struct DIJOYCONFIG\n{\n    DWORD dwSize;\n    GUID guidInstance;\n    JOYREGHWCONFIG hwc;\n    DWORD dwGain;\n    WCHAR wszType[MAX_JOYSTRING];\n    WCHAR wszCallout[MAX_JOYSTRING];\n    GUID guidGameport;\n} DIJOYCONFIG, *LPDIJOYCONFIG;\ntypedef const DIJOYCONFIG *LPCDIJOYCONFIG;\n\ntypedef struct DIJOYUSERVALUES\n{\n    DWORD dwSize;\n    JOYREGUSERVALUES ruv;\n    WCHAR wszGlobalDriver[MAX_JOYSTRING];\n    WCHAR wszGameportEmulator[MAX_JOYSTRING];\n} DIJOYUSERVALUES, *LPDIJOYUSERVALUES;\ntypedef const DIJOYUSERVALUES *LPCDIJOYUSERVALUES;\n\n\n/*****************************************************************************\n * IDirectInputJoyConfig8 interface\n */\n#define INTERFACE IDirectInputJoyConfig8\nDECLARE_INTERFACE_(IDirectInputJoyConfig8, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectInputJoyConfig8 methods ***/\n    STDMETHOD(Acquire)(THIS) PURE;\n    STDMETHOD(Unacquire)(THIS) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE;\n    STDMETHOD(SendNotify)(THIS) PURE;\n    STDMETHOD(EnumTypes)(THIS_ LPDIJOYTYPECALLBACK, LPVOID) PURE;\n    STDMETHOD(GetTypeInfo)(THIS_ LPCWSTR, LPDIJOYTYPEINFO, DWORD) PURE;\n    STDMETHOD(SetTypeInfo)(THIS_ LPCWSTR, LPCDIJOYTYPEINFO, DWORD, LPWSTR) PURE;\n    STDMETHOD(DeleteType)(THIS_ LPCWSTR) PURE;\n    STDMETHOD(GetConfig)(THIS_ UINT, LPDIJOYCONFIG, DWORD) PURE;\n    STDMETHOD(SetConfig)(THIS_ UINT, LPCDIJOYCONFIG, DWORD) PURE;\n    STDMETHOD(DeleteConfig)(THIS_ UINT) PURE;\n    STDMETHOD(GetUserValues)(THIS_ LPDIJOYUSERVALUES, DWORD) PURE;\n    STDMETHOD(SetUserValues)(THIS_ LPCDIJOYUSERVALUES, DWORD) PURE;\n    STDMETHOD(AddNewHardware)(THIS_ HWND, REFGUID) PURE;\n    STDMETHOD(OpenTypeKey)(THIS_ LPCWSTR, DWORD, PHKEY) PURE;\n    STDMETHOD(OpenAppStatusKey)(THIS_ PHKEY) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectInputJoyConfig8_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectInputJoyConfig8_AddRef(p)                  (p)->lpVtbl->AddRef(p)\n#define IDirectInputJoyConfig8_Release(p)                 (p)->lpVtbl->Release(p)\n/*** IDirectInputJoyConfig8 methods ***/\n#define IDirectInputJoyConfig8_Acquire(p)                 (p)->lpVtbl->Acquire(p)\n#define IDirectInputJoyConfig8_Unacquire(p)               (p)->lpVtbl->Unacquire(p)\n#define IDirectInputJoyConfig8_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)\n#define IDirectInputJoyConfig8_SendNotify(p)              (p)->lpVtbl->SendNotify(p)\n#define IDirectInputJoyConfig8_EnumTypes(p,a,b)           (p)->lpVtbl->EnumTypes(p,a,b)\n#define IDirectInputJoyConfig8_GetTypeInfo(p,a,b,c)       (p)->lpVtbl->GetTypeInfo(p,a,b,c)\n#define IDirectInputJoyConfig8_SetTypeInfo(p,a,b,c,d)     (p)->lpVtbl->SetTypeInfo(p,a,b,c,d)\n#define IDirectInputJoyConfig8_DeleteType(p,a)            (p)->lpVtbl->DeleteType(p,a)\n#define IDirectInputJoyConfig8_GetConfig(p,a,b,c)         (p)->lpVtbl->GetConfig(p,a,b,c)\n#define IDirectInputJoyConfig8_SetConfig(p,a,b,c)         (p)->lpVtbl->SetConfig(p,a,b,c)\n#define IDirectInputJoyConfig8_DeleteConfig(p,a)          (p)->lpVtbl->DeleteConfig(p,a)\n#define IDirectInputJoyConfig8_GetUserValues(p,a,b)       (p)->lpVtbl->GetUserValues(p,a,b)\n#define IDirectInputJoyConfig8_SetUserValues(p,a,b)       (p)->lpVtbl->SetUserValues(p,a,b)\n#define IDirectInputJoyConfig8_AddNewHardware(p,a,b)      (p)->lpVtbl->AddNewHardware(p,a,b)\n#define IDirectInputJoyConfig8_OpenTypeKey(p,a,b,c)       (p)->lpVtbl->OpenTypeKey(p,a,b,c)\n#define IDirectInputJoyConfig8_OpenAppStatusKey(p,a)      (p)->lpVtbl->OpenAppStatusKey(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirectInputJoyConfig8_QueryInterface(p,a,b)      (p)->QueryInterface(a,b)\n#define IDirectInputJoyConfig8_AddRef(p)                  (p)->AddRef()\n#define IDirectInputJoyConfig8_Release(p)                 (p)->Release()\n/*** IDirectInputJoyConfig8 methods ***/\n#define IDirectInputJoyConfig8_Acquire(p)                 (p)->Acquire()\n#define IDirectInputJoyConfig8_Unacquire(p)               (p)->Unacquire()\n#define IDirectInputJoyConfig8_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)\n#define IDirectInputJoyConfig8_SendNotify(p)              (p)->SendNotify()\n#define IDirectInputJoyConfig8_EnumTypes(p,a,b)           (p)->EnumTypes(a,b)\n#define IDirectInputJoyConfig8_GetTypeInfo(p,a,b,c)       (p)->GetTypeInfo(a,b,c)\n#define IDirectInputJoyConfig8_SetTypeInfo(p,a,b,c,d)     (p)->SetTypeInfo(a,b,c,d)\n#define IDirectInputJoyConfig8_DeleteType(p,a)            (p)->DeleteType(a)\n#define IDirectInputJoyConfig8_GetConfig(p,a,b,c)         (p)->GetConfig(a,b,c)\n#define IDirectInputJoyConfig8_SetConfig(p,a,b,c)         (p)->SetConfig(a,b,c)\n#define IDirectInputJoyConfig8_DeleteConfig(p,a)          (p)->DeleteConfig(a)\n#define IDirectInputJoyConfig8_GetUserValues(p,a,b)       (p)->GetUserValues(a,b)\n#define IDirectInputJoyConfig8_SetUserValues(p,a,b)       (p)->SetUserValues(a,b)\n#define IDirectInputJoyConfig8_AddNewHardware(p,a,b)      (p)->AddNewHardware(a,b)\n#define IDirectInputJoyConfig8_OpenTypeKey(p,a,b,c)       (p)->OpenTypeKey(a,b,c)\n#define IDirectInputJoyConfig8_OpenAppStatusKey(p,a)      (p)->OpenAppStatusKey(a)\n#endif\n\n#endif /* __DINPUTD_INCLUDED__ */\n"
  },
  {
    "path": "wine/windows/dispdib.h",
    "content": "/*\n * DISPDIB.dll\n *\n * Copyright 1998 Ove Kaaven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DISPDIB_H\n#define __WINE_DISPDIB_H\n\n/* error codes */\n#define DISPLAYDIB_NOERROR        0x0000\n#define DISPLAYDIB_NOTSUPPORTED   0x0001\n#define DISPLAYDIB_INVALIDDIB     0x0002\n#define DISPLAYDIB_INVALIDFORMAT  0x0003\n#define DISPLAYDIB_INVALIDTASK    0x0004\n\n/* flags */\n#define DISPLAYDIB_NOPALETTE      0x0010\n#define DISPLAYDIB_NOCENTER       0x0020\n#define DISPLAYDIB_NOWAIT         0x0040\n#define DISPLAYDIB_BEGIN          0x8000\n#define DISPLAYDIB_END            0x4000\n#define DISPLAYDIB_MODE           0x000F /* mask */\n#define DISPLAYDIB_MODE_DEFAULT   0x0000\n#define DISPLAYDIB_MODE_320x200x8 0x0001\n#define DISPLAYDIB_MODE_320x240x8 0x0005\n\nWORD WINAPI DisplayDib( LPBITMAPINFO lpbi, LPSTR lpBits, WORD wFlags );\n\n#endif /* __WINE_DISPDIB_H */\n"
  },
  {
    "path": "wine/windows/dispex.idl",
    "content": "/*\n * Copyright 2004 Kevin Koltzau\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"ocidl.idl\";\nimport \"oleidl.idl\";\nimport \"oaidl.idl\";\nimport \"servprov.idl\";\n#endif\n\ncpp_quote(\"DEFINE_GUID(SID_VariantConversion, 0x1f101481,0xbccd,0x11d0,0x93,0x36,0x00,0xa0,0xc9,0xd,0xca,0xa9);\")\ncpp_quote(\"DEFINE_GUID(SID_GetCaller, 0x4717cc40,0xbcb9,0x11d0,0x93,0x36,0x00,0xa0,0xc9,0xd,0xca,0xa9);\")\n\ncpp_quote(\"#define fdexNameCaseSensitive       0x00000001L\")\ncpp_quote(\"#define fdexNameEnsure              0x00000002L\")\ncpp_quote(\"#define fdexNameImplicit            0x00000004L\")\ncpp_quote(\"#define fdexNameCaseInsensitive     0x00000008L\")\ncpp_quote(\"#define fdexNameInternal            0x00000010L\")\ncpp_quote(\"#define fdexNameNoDynamicProperties 0x00000020L\")\n\ncpp_quote(\"#define fdexPropCanGet              0x00000001L\")\ncpp_quote(\"#define fdexPropCannotGet           0x00000002L\")\ncpp_quote(\"#define fdexPropCanPut              0x00000004L\")\ncpp_quote(\"#define fdexPropCannotPut           0x00000008L\")\ncpp_quote(\"#define fdexPropCanPutRef           0x00000010L\")\ncpp_quote(\"#define fdexPropCannotPutRef        0x00000020L\")\ncpp_quote(\"#define fdexPropNoSideEffects       0x00000040L\")\ncpp_quote(\"#define fdexPropDynamicType         0x00000080L\")\ncpp_quote(\"#define fdexPropCanCall             0x00000100L\")\ncpp_quote(\"#define fdexPropCannotCall          0x00000200L\")\ncpp_quote(\"#define fdexPropCanConstruct        0x00000400L\")\ncpp_quote(\"#define fdexPropCannotConstruct     0x00000800L\")\ncpp_quote(\"#define fdexPropCanSourceEvents     0x00001000L\")\ncpp_quote(\"#define fdexPropCannotSourceEvents  0x00002000L\")\n\ncpp_quote(\"#define fdexEnumDefault             0x00000001L\")\ncpp_quote(\"#define fdexEnumAll                 0x00000002L\")\n\ncpp_quote(\"#define grfdexPropCanAll \\\\\")\ncpp_quote(\"       (fdexPropCanGet | fdexPropCanPut | fdexPropCanPutRef | \\\\\")\ncpp_quote(\"        fdexPropCanCall | fdexPropCanConstruct | fdexPropCanSourceEvents)\")\ncpp_quote(\"#define grfdexPropCannotAll \\\\\")\ncpp_quote(\"       (fdexPropCannotGet | fdexPropCannotPut | fdexPropCannotPutRef | \\\\\")\ncpp_quote(\"        fdexPropCannotCall | fdexPropCannotConstruct | fdexPropCannotSourceEvents)\")\ncpp_quote(\"#define grfdexPropExtraAll \\\\\")\ncpp_quote(\"       (fdexPropNoSideEffects | fdexPropDynamicType)\")\ncpp_quote(\"#define grfdexPropAll \\\\\")\ncpp_quote(\"       (grfdexPropCanAll | grfdexPropCannotAll | grfdexPropExtraAll)\")\n\ncpp_quote(\"#define DISPATCH_CONSTRUCT 0x4000\")\n\ncpp_quote(\"#define DISPID_THIS (-613)\")\ncpp_quote(\"#define DISPID_STARTENUM DISPID_UNKNOWN\")\n\n[\nobject,\nuuid(A6EF9860-C720-11d0-9337-00A0C90DCAA9),\npointer_default(unique)\n]\ninterface IDispatchEx : IDispatch\n{\n    HRESULT GetDispID(\n            [in] BSTR bstrName,\n            [in] DWORD grfdex,\n            [out] DISPID *pid);\n\n    [local]\n    HRESULT InvokeEx(\n            [in, annotation(\"__in\")] DISPID id,\n            [in, annotation(\"__in\")] LCID lcid,\n            [in, annotation(\"__in\")] WORD wFlags,\n            [in, annotation(\"__in\")] DISPPARAMS *pdp,\n            [out, annotation(\"__out_opt\")] VARIANT *pvarRes,\n            [out, annotation(\"__out_opt\")] EXCEPINFO *pei,\n            [in, unique, annotation(\"__in_opt\")] IServiceProvider *pspCaller);\n\n    [call_as(InvokeEx)]\n    HRESULT RemoteInvokeEx(\n            [in] DISPID id,\n            [in] LCID lcid,\n            [in] DWORD dwFlags,\n            [in] DISPPARAMS *pdp,\n            [out] VARIANT *pvarRes,\n            [out] EXCEPINFO *pei,\n            [in, unique] IServiceProvider *pspCaller,\n            [in] UINT cvarRefArg,\n            [in, size_is(cvarRefArg)] UINT *rgiRefArg,\n            [in, out, size_is(cvarRefArg)] VARIANT *rgvarRefArg);\n\n    HRESULT DeleteMemberByName(\n            [in] BSTR bstrName,\n            [in] DWORD grfdex);\n\n    HRESULT DeleteMemberByDispID(\n            [in] DISPID id);\n\n    HRESULT GetMemberProperties(\n            [in] DISPID id,\n            [in] DWORD grfdexFetch,\n            [out] DWORD *pgrfdex);\n\n    HRESULT GetMemberName(\n            [in] DISPID id,\n            [out] BSTR *pbstrName);\n\n    HRESULT GetNextDispID(\n            [in] DWORD grfdex,\n            [in] DISPID id,\n            [out] DISPID *pid);\n\n    HRESULT GetNameSpaceParent([out] IUnknown **ppunk);\n}\n\n[\nobject,\nuuid(A6EF9861-C720-11d0-9337-00A0C90DCAA9),\npointer_default(unique)\n]\ninterface IDispError : IUnknown\n{\n    HRESULT QueryErrorInfo(\n            [in] GUID guidErrorType,\n            [out] IDispError **ppde);\n\n    HRESULT GetNext(\n            [out] IDispError **ppde);\n\n    HRESULT GetHresult(\n            [out] HRESULT *phr);\n\n    HRESULT GetSource(\n            [out] BSTR *pbstrSource);\n\n    HRESULT GetHelpInfo(\n            [out] BSTR *pbstrFileName,\n            [out] DWORD *pdwContext);\n\n    HRESULT GetDescription(\n            [out] BSTR *pbstrDescription);\n}\n\n[\nobject,\nuuid(A6EF9862-C720-11d0-9337-00A0C90DCAA9),\npointer_default(unique)\n]\ninterface IVariantChangeType : IUnknown\n{\n    HRESULT ChangeType(\n            [in, out, unique] VARIANT *pvarDst,\n            [in, unique] VARIANT *pvarSrc,\n            [in] LCID lcid,\n            [in] VARTYPE vtNew);\n}\n\n\n[\nobject,\nuuid(CA04B7E6-0D21-11d1-8CC5-00C04FC2B085),\npointer_default(unique)\n]\ninterface IObjectIdentity : IUnknown\n{\n    HRESULT IsEqualObject( \n            [in] IUnknown *punk);\n}\n\n[\n    object,\n    uuid(c5598e60-b307-11d1-b27d-006008c3fbfb),\n    pointer_default(unique)\n]\ninterface ICanHandleException : IUnknown\n{\n    HRESULT CanHandleException(\n            [in] EXCEPINFO *pExcepInfo,\n            [in] VARIANT *pvar);\n}\n\n[\n    object,\n    uuid(10e2414a-ec59-49d2-bc51-5add2c36febc),\n    pointer_default(unique)\n]\ninterface IProvideRuntimeContext : IUnknown\n{\n    HRESULT GetCurrentSourceContext(\n            [out] DWORD_PTR *pdwContext,\n            [out] VARIANT_BOOL *pfExecutingGlobalCode);\n}\n"
  },
  {
    "path": "wine/windows/dlgs.h",
    "content": "/*\n * Common dialog's dialog control ID numbers\n *\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DLGS_H\n#define __WINE_DLGS_H\n\n#define ctlFirst    0x0400\n#define ctlLast     0x04ff\n    /* Push buttons */\n#define psh1        0x0400\n#define psh2        0x0401\n#define psh3        0x0402\n#define psh4        0x0403\n#define psh5        0x0404\n#define psh6        0x0405\n#define psh7        0x0406\n#define psh8        0x0407\n#define psh9        0x0408\n#define psh10       0x0409\n#define psh11       0x040a\n#define psh12       0x040b\n#define psh13       0x040c\n#define psh14       0x040d\n#define psh15       0x040e\n#define pshHelp     psh15\n#define psh16       0x040f\n    /* Checkboxes */\n#define chx1        0x0410\n#define chx2        0x0411\n#define chx3        0x0412\n#define chx4        0x0413\n#define chx5        0x0414\n#define chx6        0x0415\n#define chx7        0x0416\n#define chx8        0x0417\n#define chx9        0x0418\n#define chx10       0x0419\n#define chx11       0x041a\n#define chx12       0x041b\n#define chx13       0x041c\n#define chx14       0x041d\n#define chx15       0x041e\n#define chx16       0x041f\n    /* Radio buttons */\n#define rad1        0x0420\n#define rad2        0x0421\n#define rad3        0x0422\n#define rad4        0x0423\n#define rad5        0x0424\n#define rad6        0x0425\n#define rad7        0x0426\n#define rad8        0x0427\n#define rad9        0x0428\n#define rad10       0x0429\n#define rad11       0x042a\n#define rad12       0x042b\n#define rad13       0x042c\n#define rad14       0x042d\n#define rad15       0x042e\n#define rad16       0x042f\n    /* Groups, frames, rectangles, and icons */\n#define grp1        0x0430\n#define grp2        0x0431\n#define grp3        0x0432\n#define grp4        0x0433\n#define frm1        0x0434\n#define frm2        0x0435\n#define frm3        0x0436\n#define frm4        0x0437\n#define rct1        0x0438\n#define rct2        0x0439\n#define rct3        0x043a\n#define rct4        0x043b\n#define ico1        0x043c\n#define ico2        0x043d\n#define ico3        0x043e\n#define ico4        0x043f\n    /* Static text */\n#define stc1        0x0440\n#define stc2        0x0441\n#define stc3        0x0442\n#define stc4        0x0443\n#define stc5        0x0444\n#define stc6        0x0445\n#define stc7        0x0446\n#define stc8        0x0447\n#define stc9        0x0448\n#define stc10       0x0449\n#define stc11       0x044a\n#define stc12       0x044b\n#define stc13       0x044c\n#define stc14       0x044d\n#define stc15       0x044e\n#define stc16       0x044f\n#define stc17       0x0450\n#define stc18       0x0451\n#define stc19       0x0452\n#define stc20       0x0453\n#define stc21       0x0454\n#define stc22       0x0455\n#define stc23       0x0456\n#define stc24       0x0457\n#define stc25       0x0458\n#define stc26       0x0459\n#define stc27       0x045a\n#define stc28       0x045b\n#define stc29       0x045c\n#define stc30       0x045d\n#define stc31       0x045e\n#define stc32       0x045f\n    /* Listboxes */\n#define lst1        0x0460\n#define lst2        0x0461\n#define lst3        0x0462\n#define lst4        0x0463\n#define lst5        0x0464\n#define lst6        0x0465\n#define lst7        0x0466\n#define lst8        0x0467\n#define lst9        0x0468\n#define lst10       0x0469\n#define lst11       0x046a\n#define lst12       0x046b\n#define lst13       0x046c\n#define lst14       0x046d\n#define lst15       0x046e\n#define lst16       0x046f\n    /* Combo boxes */\n#define cmb1        0x0470\n#define cmb2        0x0471\n#define cmb3        0x0472\n#define cmb4        0x0473\n#define cmb5        0x0474\n#define cmb6        0x0475\n#define cmb7        0x0476\n#define cmb8        0x0477\n#define cmb9        0x0478\n#define cmb10       0x0479\n#define cmb11       0x047a\n#define cmb12       0x047b\n#define cmb13       0x047c\n#define cmb14       0x047d\n#define cmb15       0x047e\n#define cmb16       0x047f\n    /* Edit controls */\n#define edt1        0x0480\n#define edt2        0x0481\n#define edt3        0x0482\n#define edt4        0x0483\n#define edt5        0x0484\n#define edt6        0x0485\n#define edt7        0x0486\n#define edt8        0x0487\n#define edt9        0x0488\n#define edt10       0x0489\n#define edt11       0x048a\n#define edt12       0x048b\n#define edt13       0x048c\n#define edt14       0x048d\n#define edt15       0x048e\n#define edt16       0x048f\n    /* Scroll bars */\n#define scr1        0x0490\n#define scr2        0x0491\n#define scr3        0x0492\n#define scr4        0x0493\n#define scr5        0x0494\n#define scr6        0x0495\n#define scr7        0x0496\n#define scr8        0x0497\n\n/*\n *  Controls\n */\n#define ctl1\t    0x04A0\n\n/* These dialog resource ordinals really start at 0x0600, but the\n * RC Compiler can't handle hex for resource IDs, hence the decimal.\n */\n#define FILEOPENORD\t\t1536\n#define MULTIFILEOPENORD\t1537\n#define PRINTDLGORD\t\t1538\n#define PRNSETUPDLGORD\t\t1539\n#define FINDDLGORD\t\t1540\n#define REPLACEDLGORD\t\t1541\n#define FONTDLGORD\t\t1542\n#define FORMATDLGORD31\t\t1543\n#define FORMATDLGORD30\t\t1544\n#define PAGESETUPDLGORD\t\t1546\n#define NEWFILEOPENORD\t\t1547\n#define PRINTDLGEXORD\t\t1549\n#define PAGESETUPDLGORDMOTIF\t1550\n#define COLORMGMTDLGORD\t\t1551\n#define NEWFILEOPENV2ORD\t1552\n#define NEWFILEOPENV3ORD\t1553\n#define NEWFORMATDLGWITHLINK\t1591\n#define IDC_MANAGE_LINK\t\t1592\n\ntypedef struct tagCRGB\n{\n    BYTE bRed;\n    BYTE bGreen;\n    BYTE bBlue;\n    BYTE bExtra;\n} CRGB;\n\n#endif  /* #ifdef __WINE_DLGS_H */\n"
  },
  {
    "path": "wine/windows/dls1.h",
    "content": "/* Defines and Structures for Instrument Collection Form RIFF DLS1\n *\n * Copyright (C) 2003-2004 Rok Mandeljc\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n \n#ifndef __WINE_INCLUDE_DLS1_H\n#define __WINE_INCLUDE_DLS1_H\n\n/*****************************************************************************\n * FOURCCs\n */\n#define FOURCC_DLS   mmioFOURCC('D','L','S',' ')\n#define FOURCC_DLID  mmioFOURCC('d','l','i','d')\n#define FOURCC_COLH  mmioFOURCC('c','o','l','h')\n#define FOURCC_WVPL  mmioFOURCC('w','v','p','l')\n#define FOURCC_PTBL  mmioFOURCC('p','t','b','l')\n#define FOURCC_PATH  mmioFOURCC('p','a','t','h')\n#define FOURCC_wave  mmioFOURCC('w','a','v','e')\n#define FOURCC_LINS  mmioFOURCC('l','i','n','s')\n#define FOURCC_INS   mmioFOURCC('i','n','s',' ')\n#define FOURCC_INSH  mmioFOURCC('i','n','s','h')\n#define FOURCC_LRGN  mmioFOURCC('l','r','g','n')\n#define FOURCC_RGN   mmioFOURCC('r','g','n',' ')\n#define FOURCC_RGNH  mmioFOURCC('r','g','n','h')\n#define FOURCC_LART  mmioFOURCC('l','a','r','t')\n#define FOURCC_ART1  mmioFOURCC('a','r','t','1')\n#define FOURCC_WLNK  mmioFOURCC('w','l','n','k')\n#define FOURCC_WSMP  mmioFOURCC('w','s','m','p')\n#define FOURCC_VERS  mmioFOURCC('v','e','r','s')\n\n/*****************************************************************************\n * Flags\n */\n\n#define CONN_DST_NONE             0x000\n#define CONN_DST_ATTENUATION      0x001\n#define CONN_DST_PITCH            0x003\n#define CONN_DST_PAN              0x004\n\n#define CONN_DST_LFO_FREQUENCY    0x104\n#define CONN_DST_LFO_STARTDELAY   0x105\n\n#define CONN_DST_EG1_ATTACKTIME   0x206\n#define CONN_DST_EG1_DECAYTIME    0x207\n#define CONN_DST_EG1_RELEASETIME  0x209\n#define CONN_DST_EG1_SUSTAINLEVEL 0x20A\n\n#define CONN_DST_EG2_ATTACKTIME   0x30A\n#define CONN_DST_EG2_DECAYTIME    0x30B\n#define CONN_DST_EG2_RELEASETIME  0x30D\n#define CONN_DST_EG2_SUSTAINLEVEL 0x30E\n\n#define CONN_SRC_NONE             0x000\n#define CONN_SRC_LFO              0x001\n#define CONN_SRC_KEYONVELOCITY    0x002\n#define CONN_SRC_KEYNUMBER        0x003\n#define CONN_SRC_EG1              0x004\n#define CONN_SRC_EG2              0x005\n#define CONN_SRC_PITCHWHEEL       0x006\n\n#define CONN_SRC_CC1              0x081\n#define CONN_SRC_CC7              0x087\n#define CONN_SRC_CC10             0x08A\n#define CONN_SRC_CC11             0x08B\n\n#define CONN_TRN_NONE             0x000\n#define CONN_TRN_CONCAVE          0x001\n\n#define F_INSTRUMENT_DRUMS 0x80000000\n\n#define F_RGN_OPTION_SELFNONEXCLUSIVE 0x1\n\n#define F_WAVELINK_PHASE_MASTER 0x1\n\n#define F_WSMP_NO_TRUNCATION  0x1\n#define F_WSMP_NO_COMPRESSION 0x2\n\n#define POOL_CUE_NULL 0xFFFFFFFF\n\n#define WAVELINK_CHANNEL_LEFT  0x1\n#define WAVELINK_CHANNEL_RIGHT 0x2\n\n#define WLOOP_TYPE_FORWARD 0x0\n\n/*****************************************************************************\n * Structures\n */\n/* typedef definitions */\ntypedef struct _DLSID          DLSID,          *LPDLSID;\ntypedef struct _DLSVERSION     DLSVERSION,     *LPDLSVERSION;\ntypedef struct _CONNECTION     CONNECTION,     *LPCONNECTION;\ntypedef struct _CONNECTIONLIST CONNECTIONLIST, *LPCONNECTIONLIST;\ntypedef struct _RGNRANGE       RGNRANGE,       *LPRGNRANGE;\ntypedef struct _MIDILOCALE     MIDILOCALE,     *LPMIDILOCALE;\ntypedef struct _RGNHEADER      RGNHEADER,      *LPRGNHEADER;\ntypedef struct _INSTHEADER     INSTHEADER,     *LPINSTHEADER;\ntypedef struct _DLSHEADER      DLSHEADER,      *LPDLSHEADER;\ntypedef struct _WAVELINK       WAVELINK,       *LPWAVELINK;\ntypedef struct _POOLCUE        POOLCUE,        *LPPOOLCUE;\ntypedef struct _POOLTABLE      POOLTABLE,      *LPPOOLTABLE;\ntypedef struct _rwsmp          WSMPL,          *LPWSMPL;\ntypedef struct _rloop          WLOOP,          *LPWLOOP;\n\n/* actual structures */\nstruct _DLSID {\n\tULONG  ulData1;\n\tUSHORT usData2;\n\tUSHORT usData3;\n\tBYTE   abData4[8];\n};\n\nstruct _DLSVERSION {\n\tDWORD dwVersionMS;\n\tDWORD dwVersionLS;\n};\n\nstruct _CONNECTION {\n\tUSHORT usSource;\n\tUSHORT usControl;\n\tUSHORT usDestination;\n\tUSHORT usTransform;\n\tLONG   lScale;\n};\n\nstruct _CONNECTIONLIST {\n\tULONG cbSize;\n\tULONG cConnections;\n};\n\nstruct _RGNRANGE {\n\tUSHORT usLow;\n\tUSHORT usHigh;\n};\n\nstruct _MIDILOCALE {\n\tULONG ulBank;\n\tULONG ulInstrument;\n};\n\nstruct _RGNHEADER {\n\tRGNRANGE RangeKey;\n\tRGNRANGE RangeVelocity;\n\tUSHORT   fusOptions;\n\tUSHORT   usKeyGroup;\n};\n\nstruct _INSTHEADER {\n\tULONG      cRegions;\n\tMIDILOCALE Locale;\n};\n\nstruct _DLSHEADER {\n\tULONG cInstruments;\n};\n\nstruct _WAVELINK {\n\tUSHORT fusOptions;\n\tUSHORT usPhaseGroup;\n\tULONG  ulChannel;\n\tULONG  ulTableIndex;\n};\n\nstruct _POOLCUE { \n\tULONG ulOffset;\n};\n\nstruct _POOLTABLE {\n\tULONG cbSize;\n\tULONG cCues;\n};\n\nstruct _rwsmp {\n\tULONG  cbSize;\n\tUSHORT usUnityNote;\n\tSHORT  sFineTune;\n\tLONG   lAttenuation;\n\tULONG  fulOptions;\n\tULONG  cSampleLoops;\n};\n\nstruct _rloop {\n\tULONG cbSize;\n\tULONG ulType;\n\tULONG ulStart;\n\tULONG ulLength;\n};\n\n#endif /* __WINE_INCLUDE_DLS1_H */\n"
  },
  {
    "path": "wine/windows/dls2.h",
    "content": "/* Defines and Structures for Instrument Collection Form RIFF DLS2\n *\n * Copyright (C) 2003-2004 Rok Mandeljc\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_INCLUDE_DLS2_H\n#define __WINE_INCLUDE_DLS2_H\n\n/*****************************************************************************\n * DLSIDs - property set\n */ \nDEFINE_GUID(DLSID_GMInHardware,       0x178f2f24,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);\nDEFINE_GUID(DLSID_GSInHardware,       0x178f2f25,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);\nDEFINE_GUID(DLSID_ManufacturersID,    0xb03e1181,0x8095,0x11d2,0xa1,0xef,0x00,0x60,0x08,0x33,0xdb,0xd8);\nDEFINE_GUID(DLSID_ProductID,          0xb03e1182,0x8095,0x11d2,0xa1,0xef,0x00,0x60,0x08,0x33,0xdb,0xd8);\nDEFINE_GUID(DLSID_SampleMemorySize,   0x178f2f28,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);\nDEFINE_GUID(DLSID_SupportsDLS1,       0x178f2f27,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);\nDEFINE_GUID(DLSID_SupportsDLS2,       0xf14599e5,0x4689,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);\nDEFINE_GUID(DLSID_SamplePlaybackRate, 0x2a91f713,0xa4bf,0x11d2,0xbb,0xdf,0x00,0x60,0x08,0x33,0xdb,0xd8);\nDEFINE_GUID(DLSID_XGInHardware,       0x178f2f26,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);\n\n/*****************************************************************************\n * FOURCCs\n */ \n#define FOURCC_RGN2  mmioFOURCC('r','g','n','2')\n#define FOURCC_LAR2  mmioFOURCC('l','a','r','2')\n#define FOURCC_ART2  mmioFOURCC('a','r','t','2')\n#define FOURCC_CDL   mmioFOURCC('c','d','l',' ')\n#define FOURCC_DLID  mmioFOURCC('d','l','i','d')\n\n/*****************************************************************************\n * Flags\n */\n#define CONN_DST_GAIN             0x001\n#define CONN_DST_KEYNUMBER        0x005\n\n#define CONN_DST_LEFT             0x010\n#define CONN_DST_RIGHT            0x011\n#define CONN_DST_CENTER           0x012\n#define CONN_DST_LEFTREAR         0x013\n#define CONN_DST_RIGHTREAR        0x014\n#define CONN_DST_LFE_CHANNEL      0x015\n#define CONN_DST_CHORUS           0x080\n#define CONN_DST_REVERB           0x081\n\n#define CONN_DST_VIB_FREQUENCY    0x114\n#define CONN_DST_VIB_STARTDELAY   0x115\t\n\n#define CONN_DST_EG1_DELAYTIME    0x20B\n#define CONN_DST_EG1_HOLDTIME     0x20C\n#define CONN_DST_EG1_SHUTDOWNTIME 0x20D\n\n#define CONN_DST_EG2_DELAYTIME    0x30F\n#define CONN_DST_EG2_HOLDTIME     0x310\n\n#define CONN_DST_FILTER_CUTOFF    0x500\n#define CONN_DST_FILTER_Q         0x501\n\n#define CONN_SRC_POLYPRESSURE     0x007\n#define CONN_SRC_CHANNELPRESSURE  0x008\n#define CONN_SRC_VIBRATO          0x009\n#define CONN_SRC_MONOPRESSURE     0x00A\n\n#define CONN_SRC_CC91             0x0DB\n#define CONN_SRC_CC93             0x0DD\n\n#define CONN_TRN_CONVEX           0x002\n#define CONN_TRN_SWITCH           0x003\n\n#define DLS_CDL_AND            0x01\n#define DLS_CDL_OR             0x02\n#define DLS_CDL_XOR            0x03\n#define DLS_CDL_ADD            0x04\n#define DLS_CDL_SUBTRACT       0x05\n#define DLS_CDL_MULTIPLY       0x06\n#define DLS_CDL_DIVIDE         0x07\n#define DLS_CDL_LOGICAL_AND    0x08\n#define DLS_CDL_LOGICAL_OR     0x09\n#define DLS_CDL_LT             0x0A\n#define DLS_CDL_LE             0x0B\n#define DLS_CDL_GT             0x0C\n#define DLS_CDL_GE             0x0D\n#define DLS_CDL_EQ             0x0E\n#define DLS_CDL_NOT            0x0F\n#define DLS_CDL_CONST          0x10\n#define DLS_CDL_QUERY          0x11\n#define DLS_CDL_QUERYSUPPORTED 0x12\n\n#define F_WAVELINK_MULTICHANNEL 0x2\n\n#define WLOOP_TYPE_RELEASE 0x1\n\n#endif\t/* __WINE_INCLUDE_DLS2_H */\n"
  },
  {
    "path": "wine/windows/dmdls.h",
    "content": "/* DirectMusic DLS Download Definitions\n *\n *  Copyright (C) 2003-2004 Rok Mandeljc\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n \n#ifndef __WINE_DMUSIC_DLS_H\n#define __WINE_DMUSIC_DLS_H\n\n#include <dls1.h>\n\n/*****************************************************************************\n * Typedef definitions\n */\ntypedef LONG GCENT;\ntypedef LONG PCENT;\ntypedef LONG PERCENT;\ntypedef LONG TCENT;\n\n#ifndef REFERENCE_TIME_DEFINED\n#define REFERENCE_TIME_DEFINED\ntypedef LONGLONG REFERENCE_TIME, *LPREFERENCE_TIME;\n#endif\n\n/*****************************************************************************\n * FOURCC definition\n */\n#ifndef mmioFOURCC\ntypedef DWORD FOURCC;\n#define mmioFOURCC(ch0,ch1,ch2,ch3) \\\n\t((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \\\n\t((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))\n#endif\n\n/*****************************************************************************\n * Flags\n */\n#define DMUS_DEFAULT_SIZE_OFFSETTABLE 0x1\n\n#define DMUS_DOWNLOADINFO_INSTRUMENT       0x1\n#define DMUS_DOWNLOADINFO_WAVE             0x2\n#define DMUS_DOWNLOADINFO_INSTRUMENT2      0x3\n#define DMUS_DOWNLOADINFO_WAVEARTICULATION 0x4\n#define DMUS_DOWNLOADINFO_STREAMINGWAVE    0x5\n#define DMUS_DOWNLOADINFO_ONESHOTWAVE      0x6\n\n#define DMUS_INSTRUMENT_GM_INSTRUMENT 0x1\n\n#define DMUS_MIN_DATA_SIZE 0x4       \n\n/*****************************************************************************\n * Structures\n */\n/* typedef definitions */\ntypedef struct _DMUS_DOWNLOADINFO   DMUS_DOWNLOADINFO,   *LPDMUS_DOWNLOADINFO;\ntypedef struct _DMUS_OFFSETTABLE    DMUS_OFFSETTABLE,    *LPDMUS_OFFSETTABLE;\ntypedef struct _DMUS_INSTRUMENT     DMUS_INSTRUMENT,     *LPDMUS_INSTRUMENT;\ntypedef struct _DMUS_REGION         DMUS_REGION,         *LPDMUS_REGION;\ntypedef struct _DMUS_LFOPARAMS      DMUS_LFOPARAMS,      *LPDMUS_LFOPARAMS;\ntypedef struct _DMUS_VEGPARAMS      DMUS_VEGPARAMS,      *LPDMUS_VEGPARAMS;\ntypedef struct _DMUS_PEGPARAMS      DMUS_PEGPARAMS,      *LPDMUS_PEGPARAMS;\ntypedef struct _DMUS_MSCPARAMS      DMUS_MSCPARAMS,      *LPDMUS_MSCPARAMS;\ntypedef struct _DMUS_ARTICPARAMS    DMUS_ARTICPARAMS,    *LPDMUS_ARTICPARAMS;\ntypedef struct _DMUS_ARTICULATION   DMUS_ARTICULATION,   *LPDMUS_ARTICULATION;\ntypedef struct _DMUS_ARTICULATION2  DMUS_ARTICULATION2,  *LPDMUS_ARTICULATION2;\ntypedef struct _DMUS_EXTENSIONCHUNK DMUS_EXTENSIONCHUNK, *LPDMUS_EXTENSIONCHUNK;\ntypedef struct _DMUS_COPYRIGHT      DMUS_COPYRIGHT,      *LPDMUS_COPYRIGHT;\ntypedef struct _DMUS_WAVEDATA       DMUS_WAVEDATA,       *LPDMUS_WAVEDATA;\ntypedef struct _DMUS_WAVE           DMUS_WAVE,           *LPDMUS_WAVE;\ntypedef struct _DMUS_NOTERANGE      DMUS_NOTERANGE,      *LPDMUS_NOTERANGE;\ntypedef struct _DMUS_WAVEARTDL      DMUS_WAVEARTDL,      *LPDMUS_WAVEARTDL;\ntypedef struct _DMUS_WAVEDL         DMUS_WAVEDL,         *LPDMUS_WAVEDL;\n\n/* actual structures */\nstruct _DMUS_DOWNLOADINFO {\n\tDWORD dwDLType;\n\tDWORD dwDLId;\n\tDWORD dwNumOffsetTableEntries;\n\tDWORD cbSize;\n};\n\nstruct _DMUS_OFFSETTABLE {\n\tULONG ulOffsetTable[DMUS_DEFAULT_SIZE_OFFSETTABLE];\n};\n\nstruct _DMUS_INSTRUMENT {\n\tULONG ulPatch;\n\tULONG ulFirstRegionIdx;             \n\tULONG ulGlobalArtIdx;\n\tULONG ulFirstExtCkIdx;\n\tULONG ulCopyrightIdx;\n\tULONG ulFlags;                        \n};\n\nstruct _DMUS_REGION {\n\tRGNRANGE RangeKey;\n\tRGNRANGE RangeVelocity;\n\tUSHORT   fusOptions;\n\tUSHORT   usKeyGroup;\n\tULONG    ulRegionArtIdx;\n\tULONG    ulNextRegionIdx;\n\tULONG    ulFirstExtCkIdx;\n\tWAVELINK WaveLink;\n\tWSMPL    WSMP;\n\tWLOOP    WLOOP[1];\n};\n\nstruct _DMUS_LFOPARAMS {\n\tPCENT pcFrequency;\n\tTCENT tcDelay;\n\tGCENT gcVolumeScale;\n\tPCENT pcPitchScale;\n\tGCENT gcMWToVolume;\n\tPCENT pcMWToPitch;\n};\n\nstruct _DMUS_VEGPARAMS {\n\tTCENT   tcAttack;\n\tTCENT   tcDecay;\n\tPERCENT ptSustain;\n\tTCENT   tcRelease;\n\tTCENT   tcVel2Attack;\n\tTCENT   tcKey2Decay;\n};\n\nstruct _DMUS_PEGPARAMS {\n\tTCENT   tcAttack;\n\tTCENT   tcDecay;\n\tPERCENT ptSustain;\n\tTCENT   tcRelease;\n\tTCENT   tcVel2Attack;\n\tTCENT   tcKey2Decay;\n\tPCENT   pcRange;\n};\n\nstruct _DMUS_MSCPARAMS {\n\tPERCENT ptDefaultPan;\n};\n\nstruct _DMUS_ARTICPARAMS {\n\tDMUS_LFOPARAMS LFO;\n\tDMUS_VEGPARAMS VolEG;\n\tDMUS_PEGPARAMS PitchEG;\n\tDMUS_MSCPARAMS Misc;\n};\n\nstruct _DMUS_ARTICULATION {\n\tULONG ulArt1Idx;\n\tULONG ulFirstExtCkIdx;\n};\n\nstruct _DMUS_ARTICULATION2 {\n\tULONG ulArtIdx;\n\tULONG ulFirstExtCkIdx;\n\tULONG ulNextArtIdx;\n};\n\nstruct _DMUS_EXTENSIONCHUNK {\n\tULONG  cbSize;\n\tULONG  ulNextExtCkIdx;\n\tFOURCC ExtCkID;                                      \n\tBYTE   byExtCk[DMUS_MIN_DATA_SIZE];\n};\n\nstruct _DMUS_COPYRIGHT {\n\tULONG cbSize;\n\tBYTE  byCopyright[DMUS_MIN_DATA_SIZE];\n};\n\nstruct _DMUS_WAVEDATA {\n\tULONG cbSize;\n\tBYTE  byData[DMUS_MIN_DATA_SIZE]; \n};\n\nstruct _DMUS_WAVE {\n\tULONG        ulFirstExtCkIdx;\n\tULONG        ulCopyrightIdx;\n\tULONG        ulWaveDataIdx;\n\tWAVEFORMATEX WaveformatEx;\n};\n\nstruct _DMUS_NOTERANGE {\n\tDWORD dwLowNote;\n\tDWORD dwHighNote;\n};\n\nstruct _DMUS_WAVEARTDL {\n\tULONG  ulDownloadIdIdx;\n\tULONG  ulBus;\n\tULONG  ulBuffers;\n\tULONG  ulMasterDLId;\n\tUSHORT usOptions;\n};\n\nstruct _DMUS_WAVEDL {\n\tULONG cbWaveData;\n};\n\n#endif /* __WINE_DMUSIC_DLS_H */\n"
  },
  {
    "path": "wine/windows/dmerror.h",
    "content": "/* DirectMusic Error Codes\n *\n * Copyright (C) 2003-2004 Rok Mandeljc\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DMUSIC_ERROR_H\n#define __WINE_DMUSIC_ERROR_H\n\n/*****************************************************************************\n * Error code handling\n */\n#define FACILITY_DIRECTMUSIC 0x878\n#define DMUS_ERRBASE 0x1000\n\n#ifndef MAKE_HRESULT\n#define MAKE_HRESULT(sev,fac,code) \\\n    ((HRESULT) (((ULONG)(sev)<<31) | ((ULONG)(fac)<<16) | ((ULONG)(code))) )\n#endif\n\n#define MAKE_DMHRESULTSUCCESS(code)  MAKE_HRESULT(0, FACILITY_DIRECTMUSIC, (DMUS_ERRBASE + (code)))\n#define MAKE_DMHRESULTERROR(code)    MAKE_HRESULT(1, FACILITY_DIRECTMUSIC, (DMUS_ERRBASE + (code)))\n\n/*****************************************************************************\n * Error codes\n */\n\n#define DMUS_S_PARTIALLOAD                    MAKE_DMHRESULTSUCCESS(0x091)\n#define DMUS_S_PARTIALDOWNLOAD                MAKE_DMHRESULTSUCCESS(0x092)\n#define DMUS_S_REQUEUE                        MAKE_DMHRESULTSUCCESS(0x200)\n#define DMUS_S_FREE                           MAKE_DMHRESULTSUCCESS(0x201)\n#define DMUS_S_END                            MAKE_DMHRESULTSUCCESS(0x202)\n#define DMUS_S_STRING_TRUNCATED               MAKE_DMHRESULTSUCCESS(0x210)\n#define DMUS_S_LAST_TOOL                      MAKE_DMHRESULTSUCCESS(0x211)\n#define DMUS_S_OVER_CHORD                     MAKE_DMHRESULTSUCCESS(0x212)\n#define DMUS_S_UP_OCTAVE                      MAKE_DMHRESULTSUCCESS(0x213)\n#define DMUS_S_DOWN_OCTAVE                    MAKE_DMHRESULTSUCCESS(0x214)\n#define DMUS_S_NOBUFFERCONTROL                MAKE_DMHRESULTSUCCESS(0x215)\n#define DMUS_S_GARBAGE_COLLECTED              MAKE_DMHRESULTSUCCESS(0x216)\n\n#define DMUS_E_DRIVER_FAILED                  MAKE_DMHRESULTERROR(0x0101)\n#define DMUS_E_PORTS_OPEN                     MAKE_DMHRESULTERROR(0x0102)\n#define DMUS_E_DEVICE_IN_USE                  MAKE_DMHRESULTERROR(0x0103)\n#define DMUS_E_INSUFFICIENTBUFFER             MAKE_DMHRESULTERROR(0x0104)\n#define DMUS_E_BUFFERNOTSET                   MAKE_DMHRESULTERROR(0x0105)\n#define DMUS_E_BUFFERNOTAVAILABLE             MAKE_DMHRESULTERROR(0x0106)\n#define DMUS_E_NOTADLSCOL                     MAKE_DMHRESULTERROR(0x0108)\n#define DMUS_E_INVALIDOFFSET                  MAKE_DMHRESULTERROR(0x0109)\n#define DMUS_E_ALREADY_LOADED                 MAKE_DMHRESULTERROR(0x0111)\n#define DMUS_E_INVALIDPOS                     MAKE_DMHRESULTERROR(0x0113)\n#define DMUS_E_INVALIDPATCH                   MAKE_DMHRESULTERROR(0x0114)\n#define DMUS_E_CANNOTSEEK                     MAKE_DMHRESULTERROR(0x0115)\n#define DMUS_E_CANNOTWRITE                    MAKE_DMHRESULTERROR(0x0116)\n#define DMUS_E_CHUNKNOTFOUND                  MAKE_DMHRESULTERROR(0x0117)\n#define DMUS_E_INVALID_DOWNLOADID             MAKE_DMHRESULTERROR(0x0119)\n#define DMUS_E_NOT_DOWNLOADED_TO_PORT         MAKE_DMHRESULTERROR(0x0120)\n#define DMUS_E_ALREADY_DOWNLOADED             MAKE_DMHRESULTERROR(0x0121)\n#define DMUS_E_UNKNOWN_PROPERTY               MAKE_DMHRESULTERROR(0x0122)\n#define DMUS_E_SET_UNSUPPORTED                MAKE_DMHRESULTERROR(0x0123)\n#define DMUS_E_GET_UNSUPPORTED                MAKE_DMHRESULTERROR(0x0124)\n#define DMUS_E_NOTMONO                        MAKE_DMHRESULTERROR(0x0125)\n#define DMUS_E_BADARTICULATION                MAKE_DMHRESULTERROR(0x0126)\n#define DMUS_E_BADINSTRUMENT                  MAKE_DMHRESULTERROR(0x0127)\n#define DMUS_E_BADWAVELINK                    MAKE_DMHRESULTERROR(0x0128)\n#define DMUS_E_NOARTICULATION                 MAKE_DMHRESULTERROR(0x0129)\n#define DMUS_E_NOTPCM                         MAKE_DMHRESULTERROR(0x012A)\n#define DMUS_E_BADWAVE                        MAKE_DMHRESULTERROR(0x012B)\n#define DMUS_E_BADOFFSETTABLE                 MAKE_DMHRESULTERROR(0x012C)\n#define DMUS_E_UNKNOWNDOWNLOAD                MAKE_DMHRESULTERROR(0x012D)\n#define DMUS_E_NOSYNTHSINK                    MAKE_DMHRESULTERROR(0x012E)\n#define DMUS_E_ALREADYOPEN                    MAKE_DMHRESULTERROR(0x012F)\n#define DMUS_E_ALREADYCLOSED                  MAKE_DMHRESULTERROR(0x0130)\n#define DMUS_E_SYNTHNOTCONFIGURED             MAKE_DMHRESULTERROR(0x0131)\n#define DMUS_E_SYNTHACTIVE                    MAKE_DMHRESULTERROR(0x0132)\n#define DMUS_E_CANNOTREAD                     MAKE_DMHRESULTERROR(0x0133)\n#define DMUS_E_DMUSIC_RELEASED                MAKE_DMHRESULTERROR(0x0134)\n#define DMUS_E_BUFFER_EMPTY                   MAKE_DMHRESULTERROR(0x0135)\n#define DMUS_E_BUFFER_FULL                    MAKE_DMHRESULTERROR(0x0136)\n#define DMUS_E_PORT_NOT_CAPTURE               MAKE_DMHRESULTERROR(0x0137)\n#define DMUS_E_PORT_NOT_RENDER                MAKE_DMHRESULTERROR(0x0138)\n#define DMUS_E_DSOUND_NOT_SET                 MAKE_DMHRESULTERROR(0x0139)\n#define DMUS_E_ALREADY_ACTIVATED              MAKE_DMHRESULTERROR(0x013A)\n#define DMUS_E_INVALIDBUFFER                  MAKE_DMHRESULTERROR(0x013B)\n#define DMUS_E_WAVEFORMATNOTSUPPORTED         MAKE_DMHRESULTERROR(0x013C)\n#define DMUS_E_SYNTHINACTIVE                  MAKE_DMHRESULTERROR(0x013D)\n#define DMUS_E_DSOUND_ALREADY_SET             MAKE_DMHRESULTERROR(0x013E)\n#define DMUS_E_INVALID_EVENT                  MAKE_DMHRESULTERROR(0x013F)\n#define DMUS_E_UNSUPPORTED_STREAM             MAKE_DMHRESULTERROR(0x0150)\n#define DMUS_E_ALREADY_INITED                 MAKE_DMHRESULTERROR(0x0151)\n#define DMUS_E_INVALID_BAND                   MAKE_DMHRESULTERROR(0x0152)\n#define DMUS_E_TRACK_HDR_NOT_FIRST_CK         MAKE_DMHRESULTERROR(0x0155)\n#define DMUS_E_TOOL_HDR_NOT_FIRST_CK          MAKE_DMHRESULTERROR(0x0156)\n#define DMUS_E_INVALID_TRACK_HDR              MAKE_DMHRESULTERROR(0x0157)\n#define DMUS_E_INVALID_TOOL_HDR               MAKE_DMHRESULTERROR(0x0158)\n#define DMUS_E_ALL_TOOLS_FAILED               MAKE_DMHRESULTERROR(0x0159)\n#define DMUS_E_ALL_TRACKS_FAILED              MAKE_DMHRESULTERROR(0x0160)\n#define DMUS_E_NOT_FOUND                      MAKE_DMHRESULTERROR(0x0161)\n#define DMUS_E_NOT_INIT                       MAKE_DMHRESULTERROR(0x0162)\n#define DMUS_E_TYPE_DISABLED                  MAKE_DMHRESULTERROR(0x0163)\n#define DMUS_E_TYPE_UNSUPPORTED               MAKE_DMHRESULTERROR(0x0164)\n#define DMUS_E_TIME_PAST                      MAKE_DMHRESULTERROR(0x0165)\n#define DMUS_E_TRACK_NOT_FOUND                MAKE_DMHRESULTERROR(0x0166)\n#define DMUS_E_TRACK_NO_CLOCKTIME_SUPPORT     MAKE_DMHRESULTERROR(0x0167)\n#define DMUS_E_NO_MASTER_CLOCK                MAKE_DMHRESULTERROR(0x0170)\n#define DMUS_E_LOADER_NOCLASSID               MAKE_DMHRESULTERROR(0x0180)\n#define DMUS_E_LOADER_BADPATH                 MAKE_DMHRESULTERROR(0x0181)\n#define DMUS_E_LOADER_FAILEDOPEN              MAKE_DMHRESULTERROR(0x0182)\n#define DMUS_E_LOADER_FORMATNOTSUPPORTED      MAKE_DMHRESULTERROR(0x0183)\n#define DMUS_E_LOADER_FAILEDCREATE            MAKE_DMHRESULTERROR(0x0184)\n#define DMUS_E_LOADER_OBJECTNOTFOUND          MAKE_DMHRESULTERROR(0x0185)\n#define DMUS_E_LOADER_NOFILENAME              MAKE_DMHRESULTERROR(0x0186)\n#define DMUS_E_INVALIDFILE                    MAKE_DMHRESULTERROR(0x0200)\n#define DMUS_E_ALREADY_EXISTS                 MAKE_DMHRESULTERROR(0x0201)\n#define DMUS_E_OUT_OF_RANGE                   MAKE_DMHRESULTERROR(0x0202)\n#define DMUS_E_SEGMENT_INIT_FAILED            MAKE_DMHRESULTERROR(0x0203)\n#define DMUS_E_ALREADY_SENT                   MAKE_DMHRESULTERROR(0x0204)\n#define DMUS_E_CANNOT_FREE                    MAKE_DMHRESULTERROR(0x0205)\n#define DMUS_E_CANNOT_OPEN_PORT               MAKE_DMHRESULTERROR(0x0206)\n#define DMUS_E_CANNOT_CONVERT                 MAKE_DMHRESULTERROR(0x0207)\n#define DMUS_E_DESCEND_CHUNK_FAIL             MAKE_DMHRESULTERROR(0x0210)\n#define DMUS_E_NOT_LOADED                     MAKE_DMHRESULTERROR(0x0211)\n#define DMUS_E_SCRIPT_LANGUAGE_INCOMPATIBLE   MAKE_DMHRESULTERROR(0x0213)\n#define DMUS_E_SCRIPT_UNSUPPORTED_VARTYPE     MAKE_DMHRESULTERROR(0x0214)\n#define DMUS_E_SCRIPT_ERROR_IN_SCRIPT         MAKE_DMHRESULTERROR(0x0215)\n#define DMUS_E_SCRIPT_CANTLOAD_OLEAUT32       MAKE_DMHRESULTERROR(0x0216)\n#define DMUS_E_SCRIPT_LOADSCRIPT_ERROR        MAKE_DMHRESULTERROR(0x0217)\n#define DMUS_E_SCRIPT_INVALID_FILE            MAKE_DMHRESULTERROR(0x0218)\n#define DMUS_E_INVALID_SCRIPTTRACK            MAKE_DMHRESULTERROR(0x0219)\n#define DMUS_E_SCRIPT_VARIABLE_NOT_FOUND      MAKE_DMHRESULTERROR(0x021A)\n#define DMUS_E_SCRIPT_ROUTINE_NOT_FOUND       MAKE_DMHRESULTERROR(0x021B)\n#define DMUS_E_SCRIPT_CONTENT_READONLY        MAKE_DMHRESULTERROR(0x021C)\n#define DMUS_E_SCRIPT_NOT_A_REFERENCE         MAKE_DMHRESULTERROR(0x021D)\n#define DMUS_E_SCRIPT_VALUE_NOT_SUPPORTED     MAKE_DMHRESULTERROR(0x021E)\n#define DMUS_E_INVALID_SEGMENTTRIGGERTRACK    MAKE_DMHRESULTERROR(0x0220)\n#define DMUS_E_INVALID_LYRICSTRACK            MAKE_DMHRESULTERROR(0x0221)\n#define DMUS_E_INVALID_PARAMCONTROLTRACK      MAKE_DMHRESULTERROR(0x0222)\n#define DMUS_E_AUDIOVBSCRIPT_SYNTAXERROR      MAKE_DMHRESULTERROR(0x0223)\n#define DMUS_E_AUDIOVBSCRIPT_RUNTIMEERROR     MAKE_DMHRESULTERROR(0x0224)\n#define DMUS_E_AUDIOVBSCRIPT_OPERATIONFAILURE MAKE_DMHRESULTERROR(0x0225)\n#define DMUS_E_AUDIOPATHS_NOT_VALID           MAKE_DMHRESULTERROR(0x0226)\n#define DMUS_E_AUDIOPATHS_IN_USE              MAKE_DMHRESULTERROR(0x0227)\n#define DMUS_E_NO_AUDIOPATH_CONFIG            MAKE_DMHRESULTERROR(0x0228)\n#define DMUS_E_AUDIOPATH_INACTIVE             MAKE_DMHRESULTERROR(0x0229)\n#define DMUS_E_AUDIOPATH_NOBUFFER             MAKE_DMHRESULTERROR(0x022A)\n#define DMUS_E_AUDIOPATH_NOPORT               MAKE_DMHRESULTERROR(0x022B)\n#define DMUS_E_NO_AUDIOPATH                   MAKE_DMHRESULTERROR(0x022C)\n#define DMUS_E_INVALIDCHUNK                   MAKE_DMHRESULTERROR(0x022D)\n#define DMUS_E_AUDIOPATH_NOGLOBALFXBUFFER     MAKE_DMHRESULTERROR(0x022E)\n#define DMUS_E_INVALID_CONTAINER_OBJECT       MAKE_DMHRESULTERROR(0x022F)\n\n#endif /* __WINE_DMUSIC_ERROR_H */\n"
  },
  {
    "path": "wine/windows/dmksctrl.h",
    "content": "/*\n * Definition of IKsControl\n *\n * Copyright (C) 2012 Christian Costa\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _DMKSCTRL_\n#define _DMKSCTRL_\n\n#include <pshpack8.h>\n\n#include <objbase.h>\n\n#ifndef _KS_\n#define _KS_\n\ntypedef struct {\n    union {\n        struct {\n            GUID    Set;\n            ULONG   Id;\n            ULONG   Flags;\n        } DUMMYSTRUCTNAME;\n        LONGLONG    Alignment;\n    } DUMMYUNIONNAME;\n} KSIDENTIFIER, *PKSIDENTIFIER;\n\ntypedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY, KSMETHOD, *PKSMETHOD, KSEVENT, *PKSEVENT;\n\n#define KSMETHOD_TYPE_NONE                  0x00000000\n#define KSMETHOD_TYPE_READ                  0x00000001\n#define KSMETHOD_TYPE_WRITE                 0x00000002\n#define KSMETHOD_TYPE_MODIFY                0x00000003\n#define KSMETHOD_TYPE_SOURCE                0x00000004\n\n#define KSMETHOD_TYPE_SEND                  0x00000001\n#define KSMETHOD_TYPE_SETSUPPORT            0x00000100\n#define KSMETHOD_TYPE_BASICSUPPORT          0x00000200\n\n#define KSPROPERTY_TYPE_GET                 0x00000001\n#define KSPROPERTY_TYPE_SET                 0x00000002\n#define KSPROPERTY_TYPE_SETSUPPORT          0x00000100\n#define KSPROPERTY_TYPE_BASICSUPPORT        0x00000200\n#define KSPROPERTY_TYPE_RELATIONS           0x00000400\n#define KSPROPERTY_TYPE_SERIALIZESET        0x00000800\n#define KSPROPERTY_TYPE_UNSERIALIZESET      0x00001000\n#define KSPROPERTY_TYPE_SERIALIZERAW        0x00002000\n#define KSPROPERTY_TYPE_UNSERIALIZERAW      0x00004000\n#define KSPROPERTY_TYPE_SERIALIZESIZE       0x00008000\n#define KSPROPERTY_TYPE_DEFAULTVALUES       0x00010000\n\n#define KSPROPERTY_TYPE_TOPOLOGY            0x10000000\n\n#define INTERFACE IKsControl\nDECLARE_INTERFACE_(IKsControl,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IKsControl methods ***/\n    STDMETHOD(KsProperty)(THIS_ PKSPROPERTY Property, ULONG PropertyLength, LPVOID PropertyData,\n                          ULONG DataLength, ULONG* BytesReturned) PURE;\n    STDMETHOD(KsMethod)(THIS_ PKSMETHOD Method, ULONG MethodLength, LPVOID MethodData,\n                        ULONG DataLength, ULONG* BytesReturned) PURE;\n    STDMETHOD(KsEvent)(THIS_ PKSEVENT Event, ULONG EventLength, LPVOID EventData,\n                       ULONG DataLength, ULONG* BytesReturned) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IKsControl_QueryInterface(p,a,b)   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IKsControl_AddRef(p)               (p)->lpVtbl->AddRef(p)\n#define IKsControl_Release(p)              (p)->lpVtbl->Release(p)\n/*** IKsControl methods ***/\n#define IKsControl_KsProperty(p,a,b,c,d,e) (p)->lpVtbl->KsProperty(p,a,b,c,d,e)\n#define IKsControl_KsMethod(p,a,b,c,d,e)   (p)->lpVtbl->KsMethod(p,a,b,c,d,e)\n#define IKsControl_KsEvent(p,a,b,c,d,e)    (p)->lpVtbl->KsEvent(p,a,b,c,d,e)\n#endif\n\n#endif /* _KS_ */\n\n#include <poppack.h>\n\n\nDEFINE_GUID(IID_IKsControl, 0x28f54685, 0x06fd, 0x11d2, 0xb2, 0x7a, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96);\n\n#ifndef _KSMEDIA_\n\nDEFINE_GUID(KSDATAFORMAT_SUBTYPE_MIDI, 0x1d262760, 0xe957, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00);\nDEFINE_GUID(KSDATAFORMAT_SUBTYPE_DIRECTMUSIC, 0x1a82f8bc, 0x3f8b, 0x11d2, 0xb7, 0x74, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1);\n\n#endif\n\n#endif /* _DMKSCTRL_ */\n"
  },
  {
    "path": "wine/windows/dmo.h",
    "content": "/*\n * Copyright (C) 2002 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __DMO_H__\n#define __DMO_H__\n\n#include <mediaerr.h>\n\n#ifdef FIX_LOCK_NAME\n#define Lock DMOLock\n#endif\n#include <mediaobj.h>\n#ifdef FIX_LOCK_NAME\n#undef Lock\n#endif\n#include <dmoreg.h>\n#include <dmort.h>\n\n#endif  /* __DMO_H__ */\n"
  },
  {
    "path": "wine/windows/dmoreg.h",
    "content": "/*\n * Copyright (C) 2002 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __DMOREG_H__\n#define __DMOREG_H__\n\n#include \"mediaobj.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct _DMO_PARTIAL_MEDIATYPE\n{\n   GUID type;\n   GUID subtype;\n} DMO_PARTIAL_MEDIATYPE, *PDMO_PARTIAL_MEDIATYPE;\n\nenum DMO_REGISTER_FLAGS\n{\n   DMO_REGISTERF_IS_KEYED = 1\n};\n\nenum DMO_ENUM_FLAGS\n{\n   DMO_ENUMF_INCLUDE_KEYED = 1\n};\n\nHRESULT WINAPI DMORegister(LPCWSTR,REFCLSID,REFGUID,DWORD,DWORD,const DMO_PARTIAL_MEDIATYPE*,\n                           DWORD,const DMO_PARTIAL_MEDIATYPE*);\nHRESULT WINAPI DMOUnregister(REFCLSID,REFGUID);\nHRESULT WINAPI DMOEnum(REFGUID,DWORD,DWORD,const DMO_PARTIAL_MEDIATYPE*,DWORD,\n                       const DMO_PARTIAL_MEDIATYPE*,IEnumDMO**);\nHRESULT WINAPI DMOGetTypes(REFCLSID,ULONG,ULONG*,DMO_PARTIAL_MEDIATYPE*,\n                           ULONG,ULONG*,DMO_PARTIAL_MEDIATYPE*);\nHRESULT WINAPI DMOGetName(REFCLSID,WCHAR[80]);\n\nDEFINE_GUID(DMOCATEGORY_AUDIO_DECODER,\n            0x57f2db8b,0xe6bb,0x4513,0x9d,0x43,0xdc,0xd2,0xa6,0x59,0x31,0x25);\nDEFINE_GUID(DMOCATEGORY_AUDIO_ENCODER,\n            0x33d9a761,0x90c8,0x11d0,0xbd,0x43,0x00,0xa0,0xc9,0x11,0xce,0x86);\nDEFINE_GUID(DMOCATEGORY_VIDEO_DECODER,\n            0x4a69b442,0x28be,0x4991,0x96,0x9c,0xb5,0x00,0xad,0xf5,0xd8,0xa8);\nDEFINE_GUID(DMOCATEGORY_VIDEO_ENCODER,\n            0x33d9a760,0x90c8,0x11d0,0xbd,0x43,0x00,0xa0,0xc9,0x11,0xce,0x86);\nDEFINE_GUID(DMOCATEGORY_AUDIO_EFFECT,\n            0xf3602b3f,0x0592,0x48df,0xa4,0xcd,0x67,0x47,0x21,0xe7,0xeb,0xeb);\nDEFINE_GUID(DMOCATEGORY_VIDEO_EFFECT,\n            0xd990ee14,0x776c,0x4723,0xbe,0x46,0x3d,0xa2,0xf5,0x6f,0x10,0xb9);\nDEFINE_GUID(DMOCATEGORY_AUDIO_CAPTURE_EFFECT,\n            0xf665aaba,0x3e09,0x4920,0xaa,0x5f,0x21,0x98,0x11,0x14,0x8f,0x09);\nDEFINE_GUID(DMOCATEGORY_ACOUSTIC_ECHO_CANCEL,\n            0xbf963d80,0xc559,0x11d0,0x8a,0x2b,0x00,0xa0,0xc9,0x25,0x5a,0xc1);\nDEFINE_GUID(DMOCATEGORY_AUDIO_NOISE_SUPPRESS,\n            0xe07f903f,0x62fd,0x4e60,0x8c,0xdd,0xde,0xa7,0x23,0x66,0x65,0xb5);\nDEFINE_GUID(DMOCATEGORY_AGC,\n            0xe88c9ba0,0xc557,0x11d0,0x8a,0x2b,0x00,0xa0,0xc9,0x25,0x5a,0xc1);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __DMOREG_H__ */\n"
  },
  {
    "path": "wine/windows/dmort.h",
    "content": "/*\n * Copyright (C) 2002 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __DMORT_H__\n#define __DMORT_H__\n\nHRESULT WINAPI MoCopyMediaType(DMO_MEDIA_TYPE*,const DMO_MEDIA_TYPE*);\nHRESULT WINAPI MoCreateMediaType(DMO_MEDIA_TYPE**,DWORD);\nHRESULT WINAPI MoDeleteMediaType(DMO_MEDIA_TYPE*);\nHRESULT WINAPI MoDuplicateMediaType(DMO_MEDIA_TYPE**,const DMO_MEDIA_TYPE*);\nHRESULT WINAPI MoFreeMediaType(DMO_MEDIA_TYPE*);\nHRESULT WINAPI MoInitMediaType(DMO_MEDIA_TYPE*,DWORD);\n\n#endif /* __DMORT_H__ */\n"
  },
  {
    "path": "wine/windows/dmplugin.h",
    "content": "/*\n *  DirectMusic Performance Layer Plugins API\n *\n *  Copyright (C) 2003-2004 Rok Mandeljc\n *\n *  This program is free software; you can redistribute it and/or\n *  modify it under the terms of the GNU Lesser General Public\n *  License as published by the Free Software Foundation; either\n *  version 2.1 of the License, or (at your option) any later version.\n *\n *  This program is distributed in the hope that it will be useful,\n *  but WITHOUT ANY WARRANTY; without even the implied warranty of\n *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n *  Lesser General Public License for more details.\n *\n *  You should have received a copy of the GNU Lesser General Public\n *  License along with this program; if not, write to the Free Software\n *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DMUSIC_PLUGIN_H\n#define __WINE_DMUSIC_PLUGIN_H\n\n#include <windows.h>\n\n#define COM_NO_WINDOWS_H\n#include <objbase.h>\n#include <mmsystem.h>\n#include <dmusici.h>\n#include <pshpack8.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*****************************************************************************\n * Registry path\n */\n#define DMUS_REGSTR_PATH_TOOLS \"Software\\\\Microsoft\\\\DirectMusic\\\\Tools\"\n\n\t\n/*****************************************************************************\n * Predeclare the interfaces\n */\n/* CLSIDs */\t\nDEFINE_GUID(CLSID_DirectMusicBandTrack,              0xd2ac2894,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(CLSID_DirectMusicChordTrack,             0xd2ac288b,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(CLSID_DirectMusicChordMapTrack,          0xd2ac2896,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(CLSID_DirectMusicCommandTrack,           0xd2ac288c,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(CLSID_DirectMusicLyricsTrack,            0x995c1cf5,0x54ff,0x11d3,0x8b,0xda,0x00,0x60,0x08,0x93,0xb1,0xb6);\nDEFINE_GUID(CLSID_DirectMusicMarkerTrack,            0x55a8fd00,0x4288,0x11d3,0x9b,0xd1,0x8a,0x0d,0x61,0xc8,0x88,0x35);\nDEFINE_GUID(CLSID_DirectMusicMotifTrack,             0xd2ac288e,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(CLSID_DirectMusicMuteTrack,              0xd2ac2898,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(CLSID_DirectMusicParamControlTrack,      0x4be0537b,0x5c19,0x11d3,0x8b,0xdc,0x00,0x60,0x08,0x93,0xb1,0xb6);\nDEFINE_GUID(CLSID_DirectMusicScriptTrack,            0x4108fa85,0x3586,0x11d3,0x8b,0xd7,0x00,0x60,0x08,0x93,0xb1,0xb6);\nDEFINE_GUID(CLSID_DirectMusicSegmentTriggerTrack,    0xbae4d665,0x4ea1,0x11d3,0x8b,0xda,0x00,0x60,0x08,0x93,0xb1,0xb6);\nDEFINE_GUID(CLSID_DirectMusicSeqTrack,               0xd2ac2886,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(CLSID_DirectMusicSignPostTrack,          0xf17e8672,0xc3b4,0x11d1,0x87,0x0b,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(CLSID_DirectMusicStyleTrack,             0xd2ac288d,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(CLSID_DirectMusicSysExTrack,             0xd2ac2887,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(CLSID_DirectMusicTempoTrack,             0xd2ac2885,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(CLSID_DirectMusicTimeSigTrack,           0xd2ac2888,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(CLSID_DirectMusicWaveTrack,              0xeed36461,0x9ea5,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);\n/* MS doesn't support this in DX 9.0 and newer... but there's no harm in keeping it around */\nDEFINE_GUID(CLSID_DirectMusicMelodyFormulationTrack, 0xb0684266,0xb57f,0x11d2,0x97,0xf9,0x00,0xc0,0x4f,0xa3,0x6e,0x58);\n\n/* IIDs */\nDEFINE_GUID(IID_IDirectMusicTool,                    0xd2ac28ba,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(IID_IDirectMusicTool8,                   0x0e674303,0x3b05,0x11d3,0x9b,0xd1,0xf9,0xe7,0xf0,0xa0,0x15,0x36);\nDEFINE_GUID(IID_IDirectMusicTrack,                   0xf96029a1,0x4282,0x11d2,0x87,0x17,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(IID_IDirectMusicTrack8,                  0x0e674304,0x3b05,0x11d3,0x9b,0xd1,0xf9,0xe7,0xf0,0xa0,0x15,0x36);\n\n/* typedef definitions */\ntypedef struct IDirectMusicTrack *LPDIRECTMUSICTRACK;\ntypedef struct IDirectMusicTrack8 *LPDIRECTMUSICTRACK8;\ntypedef struct IDirectMusicTool *LPDIRECTMUSICTOOL;\ntypedef struct IDirectMusicTool8 *LPDIRECTMUSICTOOL8;\n/* these are from dmusici.h and are needed here */\ntypedef struct IDirectMusicPerformance *LPDIRECTMUSICPERFORMANCE;\ntypedef struct IDirectMusicPerformance8 *LPDIRECTMUSICPERFORMANCE8;\ntypedef struct IDirectMusicSegment *LPDIRECTMUSICSEGMENT;\ntypedef struct IDirectMusicSegment8 *LPDIRECTMUSICSEGMENT8;\ntypedef struct IDirectMusicSegmentState *LPDIRECTMUSICSEGMENTSTATE;\ntypedef struct IDirectMusicSegmentState8 *LPDIRECTMUSICSEGMENTSTATE8;\ntypedef struct IDirectMusicGraph *LPDIRECTMUSICGRAPH;\ntypedef struct IDirectMusicGraph         IDirectMusicGraph8,        *LPDIRECTMUSICGRAPH8;\n\n\n/*****************************************************************************\n * Typedef definitions\n */\ntypedef struct _DMUS_PMSG DMUS_PMSG;\ntypedef LONG MUSIC_TIME;\n\n\n/*****************************************************************************\n * Flags\n */\n#define DMUS_TRACK_PARAMF_CLOCK 0x1\n\n/*****************************************************************************\n * Enumerations\n */\n/* typedef definitions */\ntypedef enum enumDMUS_TRACKF_FLAGS DMUS_TRACKF_FLAGS;\n\n/* actual enumerations */\nenum enumDMUS_TRACKF_FLAGS {\n\tDMUS_TRACKF_SEEK       = 0x001,\n\tDMUS_TRACKF_LOOP       = 0x002,\n\tDMUS_TRACKF_START      = 0x004,\n\tDMUS_TRACKF_FLUSH      = 0x008,\n\tDMUS_TRACKF_DIRTY      = 0x010,\n\tDMUS_TRACKF_NOTIFY_OFF = 0x020,\n\tDMUS_TRACKF_PLAY_OFF   = 0x040,\n\tDMUS_TRACKF_LOOPEND    = 0x080,\n\tDMUS_TRACKF_STOP       = 0x100,\n\tDMUS_TRACKF_RECOMPOSE  = 0x200,\n\tDMUS_TRACKF_CLOCK      = 0x400,\n};\n\n/*****************************************************************************\n * IDirectMusicTool interface\n */\n#define INTERFACE IDirectMusicTool\nDECLARE_INTERFACE_(IDirectMusicTool,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicTool methods ***/\n    STDMETHOD(Init)(THIS_ struct IDirectMusicGraph *pGraph) PURE;\n    STDMETHOD(GetMsgDeliveryType)(THIS_ DWORD *pdwDeliveryType) PURE;\n    STDMETHOD(GetMediaTypeArraySize)(THIS_ DWORD *pdwNumElements) PURE;\n    STDMETHOD(GetMediaTypes)(THIS_ DWORD **padwMediaTypes, DWORD dwNumElements) PURE;\n    STDMETHOD(ProcessPMsg)(THIS_ struct IDirectMusicPerformance *pPerf, DMUS_PMSG *pPMSG) PURE;\n    STDMETHOD(Flush)(THIS_ struct IDirectMusicPerformance *pPerf, DMUS_PMSG *pPMSG, REFERENCE_TIME rtTime) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicTool_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicTool_AddRef(p)                  (p)->lpVtbl->AddRef(p)\n#define IDirectMusicTool_Release(p)                 (p)->lpVtbl->Release(p)\n/*** IDirectMusicTool methods ***/\n#define IDirectMusicTool_Init(p,a)                  (p)->lpVtbl->Init(p,a)\n#define IDirectMusicTool_GetMsgDeliveryType(p,a)    (p)->lpVtbl->GetMsgDeliveryType(p,a)\n#define IDirectMusicTool_GetMediaTypeArraySize(p,a) (p)->lpVtbl->GetMediaTypeArraySize(p,a)\n#define IDirectMusicTool_GetMediaTypes(p,a,b)       (p)->lpVtbl->GetMediaTypes(p,a,b)\n#define IDirectMusicTool_ProcessPMsg(p,a,b)         (p)->lpVtbl->ProcessPMsg(p,a,b)\n#define IDirectMusicTool_Flush(p,a,b,c)             (p)->lpVtbl->Flush(p,a,b,c)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicTool8 interface\n */\n#define INTERFACE IDirectMusicTool8\nDECLARE_INTERFACE_(IDirectMusicTool8,IDirectMusicTool)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicTool methods ***/\n    STDMETHOD(Init)(THIS_ struct IDirectMusicGraph *pGraph) PURE;\n    STDMETHOD(GetMsgDeliveryType)(THIS_ DWORD *pdwDeliveryType) PURE;\n    STDMETHOD(GetMediaTypeArraySize)(THIS_ DWORD *pdwNumElements) PURE;\n    STDMETHOD(GetMediaTypes)(THIS_ DWORD **padwMediaTypes, DWORD dwNumElements) PURE;\n    STDMETHOD(ProcessPMsg)(THIS_ struct IDirectMusicPerformance *pPerf, DMUS_PMSG *pPMSG) PURE;\n    STDMETHOD(Flush)(THIS_ struct IDirectMusicPerformance *pPerf, DMUS_PMSG *pPMSG, REFERENCE_TIME rtTime) PURE;\n    /*** IDirectMusicTool8 methods ***/\n    STDMETHOD(Clone)(THIS_ IDirectMusicTool **ppTool) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicTool8_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicTool8_AddRef(p)                  (p)->lpVtbl->AddRef(p)\n#define IDirectMusicTool8_Release(p)                 (p)->lpVtbl->Release(p)\n/*** IDirectMusicTool methods ***/\n#define IDirectMusicTool8_Init(p,a)                  (p)->lpVtbl->Init(p,a)\n#define IDirectMusicTool8_GetMsgDeliveryType(p,a)    (p)->lpVtbl->GetMsgDeliveryType(p,a)\n#define IDirectMusicTool8_GetMediaTypeArraySize(p,a) (p)->lpVtbl->GetMediaTypeArraySize(p,a)\n#define IDirectMusicTool8_GetMediaTypes(p,a,b)       (p)->lpVtbl->GetMediaTypes(p,a,b)\n#define IDirectMusicTool8_ProcessPMsg(p,a,b)         (p)->lpVtbl->ProcessPMsg(p,a,b)\n#define IDirectMusicTool8_Flush(p,a,b)               (p)->lpVtbl->Flush(p,a,b)\n/*** IDirectMusicTool8 methods ***/\n#define IDirectMusicTool8_Clone(p,a)                 (p)->lpVtbl->Clone(p,a)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicTrack interface\n */\n#define INTERFACE IDirectMusicTrack\nDECLARE_INTERFACE_(IDirectMusicTrack,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicTrack methods ***/\n    STDMETHOD(Init)(THIS_ struct IDirectMusicSegment *pSegment) PURE;\n    STDMETHOD(InitPlay)(THIS_ struct IDirectMusicSegmentState *pSegmentState, struct IDirectMusicPerformance *pPerformance, void **ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags) PURE;\n    STDMETHOD(EndPlay)(THIS_ void *pStateData) PURE;\n    STDMETHOD(Play)(THIS_ void *pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, struct IDirectMusicPerformance *pPerf, struct IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) PURE;\n    STDMETHOD(GetParam)(THIS_ REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE;\n    STDMETHOD(SetParam)(THIS_ REFGUID rguidType, MUSIC_TIME mtTime, void *pParam) PURE;\n    STDMETHOD(IsParamSupported)(THIS_ REFGUID rguidType) PURE;\n    STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;\n    STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;\n    STDMETHOD(Clone)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicTrack_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicTrack_AddRef(p)                   (p)->lpVtbl->AddRef(p)\n#define IDirectMusicTrack_Release(p)                  (p)->lpVtbl->Release(p)\n/*** IDirectMusicTrack methods ***/\n#define IDirectMusicTrack_Init(p,a)                   (p)->lpVtbl->Init(p,a)\n#define IDirectMusicTrack_InitPlay(p,a,b,c,d,e)       (p)->lpVtbl->InitPlay(p,a,b,c,d,e)\n#define IDirectMusicTrack_EndPlay(p,a)                (p)->lpVtbl->EndPlay(p,a)\n#define IDirectMusicTrack_Play(p,a,b,c,d,e,f,g,h)     (p)->lpVtbl->Play(p,a,b,c,d,e,f,g,h)\n#define IDirectMusicTrack_GetParam(p,a,b,c,d)         (p)->lpVtbl->GetParam(p,a,b,c,d)\n#define IDirectMusicTrack_SetParam(p,a,b,c)           (p)->lpVtbl->SetParam(p,a,b,c)\n#define IDirectMusicTrack_IsParamSupported(p,a)       (p)->lpVtbl->IsParamSupported(p,a)\n#define IDirectMusicTrack_AddNotificationType(p,a)    (p)->lpVtbl->AddNotificationType(p,a)\n#define IDirectMusicTrack_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a)\n#define IDirectMusicTrack_Clone(p,a,b,c)              (p)->lpVtbl->Clone(p,a,b,c)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicTrack8 interface\n */\n#define INTERFACE IDirectMusicTrack8\nDECLARE_INTERFACE_(IDirectMusicTrack8,IDirectMusicTrack)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicTrack methods ***/\n    STDMETHOD(Init)(THIS_ struct IDirectMusicSegment *pSegment) PURE;\n    STDMETHOD(InitPlay)(THIS_ struct IDirectMusicSegmentState *pSegmentState, struct IDirectMusicPerformance *pPerformance, void **ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags) PURE;\n    STDMETHOD(EndPlay)(THIS_ void *pStateData) PURE;\n    STDMETHOD(Play)(THIS_ void *pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, struct IDirectMusicPerformance *pPerf, struct IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) PURE;\n    STDMETHOD(GetParam)(THIS_ REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE;\n    STDMETHOD(SetParam)(THIS_ REFGUID rguidType, MUSIC_TIME mtTime, void *pParam) PURE;\n    STDMETHOD(IsParamSupported)(THIS_ REFGUID rguidType) PURE;\n    STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;\n    STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;\n    STDMETHOD(Clone)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) PURE;\n    /*** IDirectMusicTrack8 methods ***/\n    STDMETHOD(PlayEx)(THIS_ void *pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, struct IDirectMusicPerformance *pPerf, struct IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) PURE;\n    STDMETHOD(GetParamEx)(THIS_ REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, void *pStateData, DWORD dwFlags) PURE;\n    STDMETHOD(SetParamEx)(THIS_ REFGUID rguidType, REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags) PURE;\n    STDMETHOD(Compose)(THIS_ IUnknown *pContext, DWORD dwTrackGroup, IDirectMusicTrack **ppResultTrack) PURE;\n    STDMETHOD(Join)(THIS_ IDirectMusicTrack *pNewTrack, MUSIC_TIME mtJoin, IUnknown *pContext, DWORD dwTrackGroup, IDirectMusicTrack **ppResultTrack) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicTrack8_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicTrack8_AddRef(p)                   (p)->lpVtbl->AddRef(p)\n#define IDirectMusicTrack8_Release(p)                  (p)->lpVtbl->Release(p)\n/*** IDirectMusicTrack methods ***/\n#define IDirectMusicTrack8_Init(p,a)                   (p)->lpVtbl->Init(p,a)\n#define IDirectMusicTrack8_InitPlay(p,a,b,c,d,e)       (p)->lpVtbl->InitPlay(p,a,b,c,d,e)\n#define IDirectMusicTrack8_EndPlay(p,a)                (p)->lpVtbl->EndPlay(p,a)\n#define IDirectMusicTrack8_Play(p,a,b,c,d,e,f,g,h)     (p)->lpVtbl->Play(p,a,b,c,d,e,f,g,h)\n#define IDirectMusicTrack8_GetParam(p,a,b,c,d)         (p)->lpVtbl->GetParam(p,a,b,c,d)\n#define IDirectMusicTrack8_SetParam(p,a,b,c)           (p)->lpVtbl->SetParam(p,a,b,c)\n#define IDirectMusicTrack8_IsParamSupported(p,a)       (p)->lpVtbl->IsParamSupported(p,a)\n#define IDirectMusicTrack8_AddNotificationType(p,a)    (p)->lpVtbl->AddNotificationType(p,a)\n#define IDirectMusicTrack8_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a)\n#define IDirectMusicTrack8_Clone(p,a,b,c)              (p)->lpVtbl->Clone(p,a,b,c)\n/*** IDirectMusicTrack8 methods ***/\n#define IDirectMusicTrack8_PlayEx(p,a,b,c,d,e,f,g,h)   (p)->lpVtbl->PlayEx(p,a,b,c,d,e,f,g,h)\n#define IDirectMusicTrack8_GetParamEx(p,a,b,c,d,e,f)   (p)->lpVtbl->GetParamEx(p,a,b,c,d,e,f)\n#define IDirectMusicTrack8_SetParamEx(p,a,b,c,d,e)     (p)->lpVtbl->SetParamEx(p,a,b,c,d,e)\n#define IDirectMusicTrack8_Compose(p,a,b,c)            (p)->lpVtbl->Compose(p,a,b,c)\n#define IDirectMusicTrack8_Join(p,a,b,c,d,e)           (p)->lpVtbl->Join(p,a,b,c,d,e)\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#include <poppack.h>\n\n#endif /* __WINE_DMUSIC_PLUGIN_H */\n"
  },
  {
    "path": "wine/windows/dmusbuff.h",
    "content": "/* DirectMusic Buffer Format\n *\n * Copyright (C) 2003-2004 Rok Mandeljc\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DMUSIC_BUFFER_H\n#define __WINE_DMUSIC_BUFFER_H\n\n#include <dmdls.h>\n\n/*****************************************************************************\n * Misc. definitions\n */\n#define QWORD_ALIGN(x) (((x) + 7) & ~7)\n#define DMUS_EVENT_SIZE(cb) QWORD_ALIGN(sizeof(DMUS_EVENTHEADER) + cb)\n\n/*****************************************************************************\n * Flags\n */\n#define DMUS_EVENT_STRUCTURED   0x1\n\n/*****************************************************************************\n * Structures\n */\n/* typedef definitions */\ntypedef struct _DMUS_EVENTHEADER DMUS_EVENTHEADER, *LPDMUS_EVENTHEADER;\n\n/* actual structure*/ \n#include <pshpack4.h>\nstruct _DMUS_EVENTHEADER {\n    DWORD           cbEvent;\n    DWORD           dwChannelGroup;\n    REFERENCE_TIME  rtDelta;\n    DWORD           dwFlags;\n};\n#include <poppack.h>\n\n#endif /* __WINE_DMUSIC_BUFFER_H */\n"
  },
  {
    "path": "wine/windows/dmusicc.h",
    "content": "/* DirectMusic Core API Stuff\n *\n * Copyright (C) 2003-2004 Rok Mandeljc\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DMUSIC_CORE_H\n#define __WINE_DMUSIC_CORE_H\n\n#include <windows.h>\n\n#define COM_NO_WINDOWS_H\n#include <objbase.h>\n#include <mmsystem.h>\n\n#include <dls1.h>\n#include <dmerror.h>\n#include <dmdls.h>\n#include <dsound.h>\n#include <dmusbuff.h>\n\n#include <pshpack8.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/*****************************************************************************\n * Predeclare the interfaces\n */\n/* CLSIDs */\nDEFINE_GUID(CLSID_DirectMusic,                    0x636b9f10,0x0c7d,0x11d1,0x95,0xb2,0x00,0x20,0xaf,0xdc,0x74,0x21);\nDEFINE_GUID(CLSID_DirectMusicCollection,          0x480ff4b0,0x28b2,0x11d1,0xbe,0xf7,0x00,0xc0,0x4f,0xbf,0x8f,0xef);\nDEFINE_GUID(CLSID_DirectMusicSynth,               0x58c2b4d0,0x46e7,0x11d1,0x89,0xac,0x00,0xa0,0xc9,0x05,0x41,0x29);\n\t\n/* IIDs */\nDEFINE_GUID(IID_IDirectMusic,                     0x6536115a,0x7b2d,0x11d2,0xba,0x18,0x00,0x00,0xf8,0x75,0xac,0x12);\nDEFINE_GUID(IID_IDirectMusic2,                    0x6fc2cae1,0xbc78,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);\nDEFINE_GUID(IID_IDirectMusic8,                    0x2d3629f7,0x813d,0x4939,0x85,0x08,0xf0,0x5c,0x6b,0x75,0xfd,0x97);\nDEFINE_GUID(IID_IDirectMusicBuffer,               0xd2ac2878,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(IID_IDirectMusicCollection,           0xd2ac287c,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(IID_IDirectMusicDownload,             0xd2ac287b,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(IID_IDirectMusicDownloadedInstrument, 0xd2ac287e,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(IID_IDirectMusicInstrument,           0xd2ac287d,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(IID_IDirectMusicPort,                 0x08f2d8c9,0x37c2,0x11d2,0xb9,0xf9,0x00,0x00,0xf8,0x75,0xac,0x12);\nDEFINE_GUID(IID_IDirectMusicPortDownload,         0xd2ac287a,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(IID_IDirectMusicThru,                 0xced153e7,0x3606,0x11d2,0xb9,0xf9,0x00,0x00,0xf8,0x75,0xac,0x12);\n\n#define IID_IDirectMusicCollection8 IID_IDirectMusicCollection\n#define IID_IDirectMusicDownload8 IID_IDirectMusicDownload\n#define IID_IDirectMusicDownloadedInstrument8 IID_IDirectMusicDownloadedInstrument\n#define IID_IDirectMusicInstrument8 IID_IDirectMusicInstrument\n#define IID_IDirectMusicPort8 IID_IDirectMusicPort\n#define IID_IDirectMusicPortDownload8 IID_IDirectMusicPortDownload\n#define IID_IDirectMusicThru8 IID_IDirectMusicThru\n\n/* GUIDs - property set */\nDEFINE_GUID(GUID_DMUS_PROP_GM_Hardware,           0x178f2f24,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);\nDEFINE_GUID(GUID_DMUS_PROP_GS_Capable,            0x6496aba2,0x61b0,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);\nDEFINE_GUID(GUID_DMUS_PROP_GS_Hardware,           0x178f2f25,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);\nDEFINE_GUID(GUID_DMUS_PROP_DLS1,                  0x178f2f27,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);\nDEFINE_GUID(GUID_DMUS_PROP_DLS2,                  0xf14599e5,0x4689,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);\nDEFINE_GUID(GUID_DMUS_PROP_Effects,               0xcda8d611,0x684a,0x11d2,0x87,0x1e,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(GUID_DMUS_PROP_INSTRUMENT2,           0x865fd372,0x9f67,0x11d2,0x87,0x2a,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(GUID_DMUS_PROP_LegacyCaps,            0xcfa7cdc2,0x00a1,0x11d2,0xaa,0xd5,0x00,0x00,0xf8,0x75,0xac,0x12);\nDEFINE_GUID(GUID_DMUS_PROP_MemorySize,            0x178f2f28,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);\nDEFINE_GUID(GUID_DMUS_PROP_SampleMemorySize,      0x178f2f28,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);\nDEFINE_GUID(GUID_DMUS_PROP_SamplePlaybackRate,    0x2a91f713,0xa4bf,0x11d2,0xbb,0xdf,0x00,0x60,0x08,0x33,0xdb,0xd8);\nDEFINE_GUID(GUID_DMUS_PROP_SynthSink_DSOUND,      0x0aa97844,0xc877,0x11d1,0x87,0x0c,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(GUID_DMUS_PROP_SynthSink_WAVE,        0x0aa97845,0xc877,0x11d1,0x87,0x0c,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(GUID_DMUS_PROP_Volume,                0xfedfae25,0xe46e,0x11d1,0xaa,0xce,0x00,0x00,0xf8,0x75,0xac,0x12);\nDEFINE_GUID(GUID_DMUS_PROP_WavesReverb,           0x04cb5622,0x32e5,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);\nDEFINE_GUID(GUID_DMUS_PROP_WriteLatency,          0x268a0fa0,0x60f2,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);\nDEFINE_GUID(GUID_DMUS_PROP_WritePeriod,           0x268a0fa1,0x60f2,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);\nDEFINE_GUID(GUID_DMUS_PROP_XG_Capable,            0x6496aba1,0x61b0,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);\nDEFINE_GUID(GUID_DMUS_PROP_XG_Hardware,           0x178f2f26,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);\t\n\n/* typedef definitions */\ntypedef struct IDirectMusic *LPDIRECTMUSIC;\ntypedef struct IDirectMusic8 *LPDIRECTMUSIC8;\ntypedef struct IDirectMusicBuffer *LPDIRECTMUSICBUFFER;\ntypedef struct IDirectMusicBuffer IDirectMusicBuffer8, *LPDIRECTMUSICBUFFER8;\ntypedef struct IDirectMusicInstrument *LPDIRECTMUSICINSTRUMENT;\ntypedef struct IDirectMusicInstrument IDirectMusicInstrument8, *LPDIRECTMUSICINSTRUMENT8;\ntypedef struct IDirectMusicDownloadedInstrument *LPDIRECTMUSICDOWNLOADEDINSTRUMENT;\ntypedef struct IDirectMusicDownloadedInstrument IDirectMusicDownloadedInstrument8, *LPDIRECTMUSICDOWNLOADEDINSTRUMENT8;\ntypedef struct IDirectMusicCollection *LPDIRECTMUSICCOLLECTION;\ntypedef struct IDirectMusicCollection IDirectMusicCollection8, *LPDIRECTMUSICCOLLECTION8;\ntypedef struct IDirectMusicDownload *LPDIRECTMUSICDOWNLOAD;\ntypedef struct IDirectMusicDownload IDirectMusicDownload8, *LPDIRECTMUSICDOWNLOAD8;\ntypedef struct IDirectMusicPortDownload *LPDIRECTMUSICPORTDOWNLOAD;\ntypedef struct IDirectMusicPortDownload IDirectMusicPortDownload8, *LPDIRECTMUSICPORTDOWNLOAD8;\ntypedef struct IDirectMusicPort *LPDIRECTMUSICPORT;\ntypedef struct IDirectMusicPort IDirectMusicPort8, *LPDIRECTMUSICPORT8;\ntypedef struct IDirectMusicThru *LPDIRECTMUSICTHRU;\ntypedef struct IDirectMusicThru IDirectMusicThru8, *LPDIRECTMUSICTHRU8;\ntypedef struct IReferenceClock *LPREFERENCECLOCK;\n\n\n/*****************************************************************************\n * Typedef definitions\n */\ntypedef ULONGLONG    SAMPLE_TIME, *LPSAMPLE_TIME;\ntypedef ULONGLONG    SAMPLE_POSITION, *LPSAMPLE_POSITION;\t\n\n\n/*****************************************************************************\n * Flags\n */\n#ifndef _DIRECTAUDIO_PRIORITIES_DEFINED_\n#define _DIRECTAUDIO_PRIORITIES_DEFINED_\n\n#define DAUD_CRITICAL_VOICE_PRIORITY 0xF0000000\n#define DAUD_HIGH_VOICE_PRIORITY     0xC0000000\n#define DAUD_STANDARD_VOICE_PRIORITY 0x80000000\n#define DAUD_LOW_VOICE_PRIORITY      0x40000000\n#define DAUD_PERSIST_VOICE_PRIORITY  0x10000000\n\n#define DAUD_CHAN1_VOICE_PRIORITY_OFFSET  0x0000000E\n#define DAUD_CHAN2_VOICE_PRIORITY_OFFSET  0x0000000D\n#define DAUD_CHAN3_VOICE_PRIORITY_OFFSET  0x0000000C\n#define DAUD_CHAN4_VOICE_PRIORITY_OFFSET  0x0000000B\n#define DAUD_CHAN5_VOICE_PRIORITY_OFFSET  0x0000000A\n#define DAUD_CHAN6_VOICE_PRIORITY_OFFSET  0x00000009\n#define DAUD_CHAN7_VOICE_PRIORITY_OFFSET  0x00000008\n#define DAUD_CHAN8_VOICE_PRIORITY_OFFSET  0x00000007\n#define DAUD_CHAN9_VOICE_PRIORITY_OFFSET  0x00000006\n#define DAUD_CHAN10_VOICE_PRIORITY_OFFSET 0x0000000F\n#define DAUD_CHAN11_VOICE_PRIORITY_OFFSET 0x00000005\n#define DAUD_CHAN12_VOICE_PRIORITY_OFFSET 0x00000004\n#define DAUD_CHAN13_VOICE_PRIORITY_OFFSET 0x00000003\n#define DAUD_CHAN14_VOICE_PRIORITY_OFFSET 0x00000002\n#define DAUD_CHAN15_VOICE_PRIORITY_OFFSET 0x00000001\n#define DAUD_CHAN16_VOICE_PRIORITY_OFFSET 0x00000000\n\n#define DAUD_CHAN1_DEF_VOICE_PRIORITY  (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN1_VOICE_PRIORITY_OFFSET)\n#define DAUD_CHAN2_DEF_VOICE_PRIORITY  (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN2_VOICE_PRIORITY_OFFSET)\n#define DAUD_CHAN3_DEF_VOICE_PRIORITY  (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN3_VOICE_PRIORITY_OFFSET)\n#define DAUD_CHAN4_DEF_VOICE_PRIORITY  (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN4_VOICE_PRIORITY_OFFSET)\n#define DAUD_CHAN5_DEF_VOICE_PRIORITY  (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN5_VOICE_PRIORITY_OFFSET)\n#define DAUD_CHAN6_DEF_VOICE_PRIORITY  (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN6_VOICE_PRIORITY_OFFSET)\n#define DAUD_CHAN7_DEF_VOICE_PRIORITY  (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN7_VOICE_PRIORITY_OFFSET)\n#define DAUD_CHAN8_DEF_VOICE_PRIORITY  (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN8_VOICE_PRIORITY_OFFSET)\n#define DAUD_CHAN9_DEF_VOICE_PRIORITY  (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN9_VOICE_PRIORITY_OFFSET)\n#define DAUD_CHAN10_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN10_VOICE_PRIORITY_OFFSET)\n#define DAUD_CHAN11_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN11_VOICE_PRIORITY_OFFSET)\n#define DAUD_CHAN12_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN12_VOICE_PRIORITY_OFFSET)\n#define DAUD_CHAN13_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN13_VOICE_PRIORITY_OFFSET)\n#define DAUD_CHAN14_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN14_VOICE_PRIORITY_OFFSET)\n#define DAUD_CHAN15_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN15_VOICE_PRIORITY_OFFSET)\n#define DAUD_CHAN16_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN16_VOICE_PRIORITY_OFFSET)\n#endif  /* _DIRECTAUDIO_PRIORITIES_DEFINED_ */\n\n#define DMUS_CLOCKF_GLOBAL 0x1\n\n#define DMUS_EFFECT_NONE   0x0\n#define DMUS_EFFECT_REVERB 0x1\n#define DMUS_EFFECT_CHORUS 0x2\n#define DMUS_EFFECT_DELAY  0x4\n\t\n#define DMUS_MAX_DESCRIPTION 0x80\n#define DMUS_MAX_DRIVER 0x80\n\n#define DMUS_PC_INPUTCLASS  0x0\n#define DMUS_PC_OUTPUTCLASS 0x1\n\n#define DMUS_PC_DLS             0x00000001\n#define DMUS_PC_EXTERNAL        0x00000002\n#define DMUS_PC_SOFTWARESYNTH   0x00000004\n#define DMUS_PC_MEMORYSIZEFIXED 0x00000008\n#define DMUS_PC_GMINHARDWARE    0x00000010\n#define DMUS_PC_GSINHARDWARE    0x00000020\n#define DMUS_PC_XGINHARDWARE    0x00000040\n#define DMUS_PC_DIRECTSOUND     0x00000080\n#define DMUS_PC_SHAREABLE       0x00000100\n#define DMUS_PC_DLS2            0x00000200\n#define DMUS_PC_AUDIOPATH       0x00000400\n#define DMUS_PC_WAVE            0x00000800\n#define DMUS_PC_SYSTEMMEMORY    0x7FFFFFFF\n\n#define DMUS_PORT_WINMM_DRIVER    0x0\n#define DMUS_PORT_USER_MODE_SYNTH 0x1\n#define DMUS_PORT_KERNEL_MODE     0x2\n\n#define DMUS_PORT_FEATURE_AUDIOPATH     0x1\n#define DMUS_PORT_FEATURE_STREAMING     0x2\n\n#define DMUS_PORTPARAMS_VOICES           0x01\n#define DMUS_PORTPARAMS_CHANNELGROUPS    0x02\n#define DMUS_PORTPARAMS_AUDIOCHANNELS    0x04\n#define DMUS_PORTPARAMS_SAMPLERATE       0x08\n#define DMUS_PORTPARAMS_EFFECTS          0x20\n#define DMUS_PORTPARAMS_SHARE            0x40\n#define DMUS_PORTPARAMS_FEATURES         0x80\n\n#define DMUS_VOLUME_MAX     2000\n#define DMUS_VOLUME_MIN   -20000\n\n#define DMUS_SYNTHSTATS_VOICES        0x01\n#define DMUS_SYNTHSTATS_TOTAL_CPU     0x02\n#define DMUS_SYNTHSTATS_CPU_PER_VOICE 0x04\n#define DMUS_SYNTHSTATS_LOST_NOTES    0x08\n#define DMUS_SYNTHSTATS_PEAK_VOLUME   0x10\n#define DMUS_SYNTHSTATS_FREE_MEMORY   0x20\n#define DMUS_SYNTHSTATS_SYSTEMMEMORY  DMUS_PC_SYSTEMMEMORY\n\n#define DSBUSID_FIRST_SPKR_LOC        0x00000000\n#define DSBUSID_FRONT_LEFT            0x00000000\n#define DSBUSID_LEFT                  0x00000000\n#define DSBUSID_FRONT_RIGHT           0x00000001\n#define DSBUSID_RIGHT                 0x00000001\n#define DSBUSID_FRONT_CENTER          0x00000002\n#define DSBUSID_LOW_FREQUENCY         0x00000003\n#define DSBUSID_BACK_LEFT             0x00000004\n#define DSBUSID_BACK_RIGHT            0x00000005\n#define DSBUSID_FRONT_LEFT_OF_CENTER  0x00000006 \n#define DSBUSID_FRONT_RIGHT_OF_CENTER 0x00000007\n#define DSBUSID_BACK_CENTER           0x00000008\n#define DSBUSID_SIDE_LEFT             0x00000009\n#define DSBUSID_SIDE_RIGHT            0x0000000A\n#define DSBUSID_TOP_CENTER            0x0000000B\n#define DSBUSID_TOP_FRONT_LEFT        0x0000000C\n#define DSBUSID_TOP_FRONT_CENTER      0x0000000D\n#define DSBUSID_TOP_FRONT_RIGHT       0x0000000E\n#define DSBUSID_TOP_BACK_LEFT         0x0000000F\n#define DSBUSID_TOP_BACK_CENTER       0x00000010\n#define DSBUSID_TOP_BACK_RIGHT        0x011\n#define DSBUSID_LAST_SPKR_LOC         0x00000011\n#define DSBUSID_IS_SPKR_LOC(id)       (((id) >= DSBUSID_FIRST_SPKR_LOC) && ((id) <= DSBUSID_LAST_SPKR_LOC))\n\n#define DSBUSID_REVERB_SEND           0x00000040\n#define DSBUSID_CHORUS_SEND           0x00000041\n\n#define DSBUSID_DYNAMIC_0             0x00000200 \n\n#define DSBUSID_NULL\t\t\t      0xFFFFFFFF\n\n/*****************************************************************************\n * Enumerations\n */\ntypedef enum {\n\tDMUS_CLOCK_SYSTEM = 0x0,\n\tDMUS_CLOCK_WAVE   = 0x1\n} DMUS_CLOCKTYPE;\n\n\n/*****************************************************************************\n * Structures\n */\n/* typedef definitions */\ntypedef struct _DMUS_BUFFERDESC          DMUS_BUFFERDESC,          *LPDMUS_BUFFERDESC;\ntypedef struct _DMUS_PORTCAPS            DMUS_PORTCAPS,            *LPDMUS_PORTCAPS;\ntypedef struct _DMUS_PORTPARAMS          DMUS_PORTPARAMS7,         *LPDMUS_PORTPARAMS7;\ntypedef struct _DMUS_PORTPARAMS8         DMUS_PORTPARAMS8,         *LPDMUS_PORTPARAMS8;\ntypedef         DMUS_PORTPARAMS8         DMUS_PORTPARAMS,          *LPDMUS_PORTPARAMS;\ntypedef struct _DMUS_SYNTHSTATS          DMUS_SYNTHSTATS,          *LPDMUS_SYNTHSTATS;\ntypedef struct _DMUS_SYNTHSTATS8         DMUS_SYNTHSTATS8,         *LPDMUS_SYNTHSTATS8;\ntypedef struct _DMUS_WAVES_REVERB_PARAMS DMUS_WAVES_REVERB_PARAMS, *LPDMUS_WAVES_REVERB_PARAMS;\ntypedef struct _DMUS_CLOCKINFO7          DMUS_CLOCKINFO7,          *LPDMUS_CLOCKINFO7;\ntypedef struct _DMUS_CLOCKINFO8          DMUS_CLOCKINFO8,          *LPDMUS_CLOCKINFO8;\ntypedef         DMUS_CLOCKINFO8          DMUS_CLOCKINFO,           *LPDMUS_CLOCKINFO;\n\n\n/* actual structures */\nstruct _DMUS_BUFFERDESC {\n\tDWORD dwSize;\n\tDWORD dwFlags;\n\tGUID guidBufferFormat;\n\tDWORD cbBuffer;\n} ;\n\nstruct _DMUS_PORTCAPS {\n\tDWORD dwSize;\n\tDWORD dwFlags;\n\tGUID  guidPort;\n\tDWORD dwClass;\n\tDWORD dwType;\n\tDWORD dwMemorySize;\n\tDWORD dwMaxChannelGroups;\n\tDWORD dwMaxVoices;    \n\tDWORD dwMaxAudioChannels;\n\tDWORD dwEffectFlags;\n\tWCHAR wszDescription[DMUS_MAX_DESCRIPTION];\n};\n\nstruct _DMUS_PORTPARAMS {\n\tDWORD dwSize;\n\tDWORD dwValidParams;\n\tDWORD dwVoices;\n\tDWORD dwChannelGroups;\n\tDWORD dwAudioChannels;\n\tDWORD dwSampleRate;\n\tDWORD dwEffectFlags;\n\tBOOL  fShare;\n};\n\nstruct _DMUS_PORTPARAMS8 {\n\tDWORD dwSize;\n\tDWORD dwValidParams;\n\tDWORD dwVoices;\n\tDWORD dwChannelGroups;\n\tDWORD dwAudioChannels;\n\tDWORD dwSampleRate;\n\tDWORD dwEffectFlags;\n\tBOOL  fShare;\n\tDWORD dwFeatures;\n};\n\nstruct _DMUS_SYNTHSTATS {\n\tDWORD dwSize;\n\tDWORD dwValidStats;\n\tDWORD dwVoices;\n\tDWORD dwTotalCPU;\n\tDWORD dwCPUPerVoice;\n\tDWORD dwLostNotes;\n\tDWORD dwFreeMemory;\n\tLONG  lPeakVolume;\n};\n\nstruct _DMUS_SYNTHSTATS8 {\n\tDWORD dwSize;\n\tDWORD dwValidStats;\n\tDWORD dwVoices;\n\tDWORD dwTotalCPU;\n\tDWORD dwCPUPerVoice;\n\tDWORD dwLostNotes;\n\tDWORD dwFreeMemory;\n\tLONG  lPeakVolume;\n\tDWORD dwSynthMemUse;\n};\n\nstruct _DMUS_WAVES_REVERB_PARAMS {\n\tfloat fInGain;\n\tfloat fReverbMix;\n\tfloat fReverbTime;\n\tfloat fHighFreqRTRatio;\n};\n\nstruct _DMUS_CLOCKINFO7 {\n\tDWORD          dwSize;\n\tDMUS_CLOCKTYPE ctType;\n\tGUID           guidClock;\n\tWCHAR          wszDescription[DMUS_MAX_DESCRIPTION];\n};\n\nstruct _DMUS_CLOCKINFO8 {\n    DWORD          dwSize;\n    DMUS_CLOCKTYPE ctType;\n    GUID           guidClock;\n    WCHAR          wszDescription[DMUS_MAX_DESCRIPTION];\n    DWORD          dwFlags;           \n};\n\n\n/*****************************************************************************\n * IDirectMusic interface\n */\n#define INTERFACE IDirectMusic\nDECLARE_INTERFACE_(IDirectMusic,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusic methods ***/\n    STDMETHOD(EnumPort)(THIS_ DWORD dwIndex, LPDMUS_PORTCAPS pPortCaps) PURE;\n    STDMETHOD(CreateMusicBuffer)(THIS_ LPDMUS_BUFFERDESC pBufferDesc, LPDIRECTMUSICBUFFER *ppBuffer, LPUNKNOWN pUnkOuter) PURE;\n    STDMETHOD(CreatePort)(THIS_ REFCLSID rclsidPort, LPDMUS_PORTPARAMS pPortParams, LPDIRECTMUSICPORT *ppPort, LPUNKNOWN pUnkOuter) PURE;\n    STDMETHOD(EnumMasterClock)(THIS_ DWORD dwIndex, LPDMUS_CLOCKINFO lpClockInfo) PURE;\n    STDMETHOD(GetMasterClock)(THIS_ LPGUID pguidClock, struct IReferenceClock **ppReferenceClock) PURE;\n    STDMETHOD(SetMasterClock)(THIS_ REFGUID rguidClock) PURE;\n    STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE;\n    STDMETHOD(GetDefaultPort)(THIS_ LPGUID pguidPort) PURE;\n    STDMETHOD(SetDirectSound)(THIS_ LPDIRECTSOUND pDirectSound, HWND hWnd) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusic_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusic_AddRef(p)                  (p)->lpVtbl->AddRef(p)\n#define IDirectMusic_Release(p)                 (p)->lpVtbl->Release(p)\n/*** IDirectMusic methods ***/\n#define IDirectMusic_EnumPort(p,a,b)            (p)->lpVtbl->EnumPort(p,a,b)\n#define IDirectMusic_CreateMusicBuffer(p,a,b,c) (p)->lpVtbl->CreateMusicBuffer(p,a,b,c)\n#define IDirectMusic_CreatePort(p,a,b,c,d)      (p)->lpVtbl->CreatePort(p,a,b,c,d)\n#define IDirectMusic_EnumMasterClock(p,a,b)     (p)->lpVtbl->EnumMasterClock(p,a,b)\n#define IDirectMusic_GetMasterClock(p,a,b)      (p)->lpVtbl->GetMasterClock(p,a,b)\n#define IDirectMusic_SetMasterClock(p,a)        (p)->lpVtbl->SetMasterClock(p,a)\n#define IDirectMusic_Activate(p,a)              (p)->lpVtbl->Activate(p,a)\n#define IDirectMusic_GetDefaultPort(p,a)        (p)->lpVtbl->GetDefaultPort(p,a)\n#define IDirectMusic_SetDirectSound(p,a,b)      (p)->lpVtbl->SetDirectSound(p,a,b)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusic8 interface\n */\n#define INTERFACE IDirectMusic8\nDECLARE_INTERFACE_(IDirectMusic8,IDirectMusic)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusic methods ***/\n    STDMETHOD(EnumPort)(THIS_ DWORD dwIndex, LPDMUS_PORTCAPS pPortCaps) PURE;\n    STDMETHOD(CreateMusicBuffer)(THIS_ LPDMUS_BUFFERDESC pBufferDesc, LPDIRECTMUSICBUFFER *ppBuffer, LPUNKNOWN pUnkOuter) PURE;\n    STDMETHOD(CreatePort)(THIS_ REFCLSID rclsidPort, LPDMUS_PORTPARAMS pPortParams, LPDIRECTMUSICPORT *ppPort, LPUNKNOWN pUnkOuter) PURE;\n    STDMETHOD(EnumMasterClock)(THIS_ DWORD dwIndex, LPDMUS_CLOCKINFO lpClockInfo) PURE;\n    STDMETHOD(GetMasterClock)(THIS_ LPGUID pguidClock, struct IReferenceClock **ppReferenceClock) PURE;\n    STDMETHOD(SetMasterClock)(THIS_ REFGUID rguidClock) PURE;\n    STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE;\n    STDMETHOD(GetDefaultPort)(THIS_ LPGUID pguidPort) PURE;\n    STDMETHOD(SetDirectSound)(THIS_ LPDIRECTSOUND pDirectSound, HWND hWnd) PURE;\n    /*** IDirectMusic8 methods ***/\n    STDMETHOD(SetExternalMasterClock)(THIS_ struct IReferenceClock *pClock) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusic8_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusic8_AddRef(p)                   (p)->lpVtbl->AddRef(p)\n#define IDirectMusic8_Release(p)                  (p)->lpVtbl->Release(p)\n/*** IDirectMusic methods ***/\n#define IDirectMusic8_EnumPort(p,a,b)             (p)->lpVtbl->EnumPort(p,a,b)\n#define IDirectMusic8_CreateMusicBuffer(p,a,b,c)  (p)->lpVtbl->CreateMusicBuffer(p,a,b,c)\n#define IDirectMusic8_CreatePort(p,a,b,c,d)       (p)->lpVtbl->CreatePort(p,a,b,c,d)\n#define IDirectMusic8_EnumMasterClock(p,a,b)      (p)->lpVtbl->EnumMasterClock(p,a,b)\n#define IDirectMusic8_GetMasterClock(p,a,b)       (p)->lpVtbl->GetMasterClock(p,a,b)\n#define IDirectMusic8_SetMasterClock(p,a)         (p)->lpVtbl->SetMasterClock(p,a)\n#define IDirectMusic8_Activate(p,a)               (p)->lpVtbl->Activate(p,a)\n#define IDirectMusic8_GetDefaultPort(p,a)         (p)->lpVtbl->GetDefaultPort(p,a)\n#define IDirectMusic8_SetDirectSound(p,a,b)       (p)->lpVtbl->SetDirectSound(p,a,b)\n/*** IDirectMusic8 methods ***/\n#define IDirectMusic8_SetExternalMasterClock(p,a) (p)->lpVtbl->SetExternalMasterClock(p,a)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicBuffer interface\n */\n#define INTERFACE IDirectMusicBuffer\nDECLARE_INTERFACE_(IDirectMusicBuffer,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicBuffer methods ***/\n    STDMETHOD(Flush)(THIS) PURE;\n    STDMETHOD(TotalTime)(THIS_ LPREFERENCE_TIME prtTime) PURE;\n    STDMETHOD(PackStructured)(THIS_ REFERENCE_TIME rt, DWORD dwChannelGroup, DWORD dwChannelMessage) PURE;\n    STDMETHOD(PackUnstructured)(THIS_ REFERENCE_TIME rt, DWORD dwChannelGroup, DWORD cb, LPBYTE lpb) PURE;\n    STDMETHOD(ResetReadPtr)(THIS) PURE;\n    STDMETHOD(GetNextEvent)(THIS_ LPREFERENCE_TIME prt, LPDWORD pdwChannelGroup, LPDWORD pdwLength, LPBYTE *ppData) PURE;\n    STDMETHOD(GetRawBufferPtr)(THIS_ LPBYTE *ppData) PURE;\n    STDMETHOD(GetStartTime)(THIS_ LPREFERENCE_TIME prt) PURE;\n    STDMETHOD(GetUsedBytes)(THIS_ LPDWORD pcb) PURE;\n    STDMETHOD(GetMaxBytes)(THIS_ LPDWORD pcb) PURE;\n    STDMETHOD(GetBufferFormat)(THIS_ LPGUID pGuidFormat) PURE;\n    STDMETHOD(SetStartTime)(THIS_ REFERENCE_TIME rt) PURE;\n    STDMETHOD(SetUsedBytes)(THIS_ DWORD cb) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicBuffer_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicBuffer_AddRef(p)                        (p)->lpVtbl->AddRef(p)\n#define IDirectMusicBuffer_Release(p)                       (p)->lpVtbl->Release(p)\n/*** IDirectMusicBuffer methods ***/\n#define IDirectMusicBuffer_Flush(p)                         (p)->lpVtbl->Flush(p)\n#define IDirectMusicBuffer_TotalTime(p,a)                   (p)->lpVtbl->TotalTime(p,a)\n#define IDirectMusicBuffer_PackStructured(p,a,b,c)          (p)->lpVtbl->PackStructured(p,a,b,c)\n#define IDirectMusicBuffer_PackUnstructured(p,a,b,c,d)      (p)->lpVtbl->PackUnstructured(p,a,b,c,d)\n#define IDirectMusicBuffer_ResetReadPtr(p)                  (p)->lpVtbl->ResetReadPtr(p)\n#define IDirectMusicBuffer_GetNextEvent(p,a,b,c,d)          (p)->lpVtbl->GetNextEvent(p,a,b,c,d)\n#define IDirectMusicBuffer_GetRawBufferPtr(p,a)             (p)->lpVtbl->GetRawBufferPtr(p,a)\n#define IDirectMusicBuffer_GetStartTime(p,a)                (p)->lpVtbl->GetStartTime(p,a)\n#define IDirectMusicBuffer_GetUsedBytes(p,a)                (p)->lpVtbl->GetUsedBytes(p,a)\n#define IDirectMusicBuffer_GetMaxBytes(p,a)                 (p)->lpVtbl->GetMaxBytes(p,a)\n#define IDirectMusicBuffer_GetBufferFormat(p,a)             (p)->lpVtbl->GetBufferFormat(p,a)\n#define IDirectMusicBuffer_SetStartTime(p,a)                (p)->lpVtbl->SetStartTime(p,a)\n#define IDirectMusicBuffer_SetUsedBytes(p,a)                (p)->lpVtbl->SetUsedBytes(p,a)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicInstrument interface\n */\n#define INTERFACE IDirectMusicInstrument\nDECLARE_INTERFACE_(IDirectMusicInstrument,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicInstrument methods ***/\n    STDMETHOD(GetPatch)(THIS_ DWORD *pdwPatch) PURE;\n    STDMETHOD(SetPatch)(THIS_ DWORD dwPatch) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicInstrument_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicInstrument_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectMusicInstrument_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectMusicInstrument methods ***/\n#define IDirectMusicInstrument_GetPatch(p,a)         (p)->lpVtbl->GetPatch(p,a)\n#define IDirectMusicInstrument_SetPatch(p,a)         (p)->lpVtbl->SetPatch(p,a)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicDownloadedInstrument interface\n */\n#define INTERFACE IDirectMusicDownloadedInstrument\nDECLARE_INTERFACE_(IDirectMusicDownloadedInstrument,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /* no IDirectMusicDownloadedInstrument methods at this time */\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicDownloadedInstrument_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicDownloadedInstrument_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectMusicDownloadedInstrument_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectMusicDownloadedInstrument methods ***/\n/* none at this time */\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicCollection interface\n */\n#define INTERFACE IDirectMusicCollection\nDECLARE_INTERFACE_(IDirectMusicCollection,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicCollection methods ***/\n    STDMETHOD(GetInstrument)(THIS_ DWORD dwPatch, IDirectMusicInstrument **ppInstrument) PURE;\n    STDMETHOD(EnumInstrument)(THIS_ DWORD dwIndex, DWORD *pdwPatch, LPWSTR pwszName, DWORD dwNameLen) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicCollection_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicCollection_AddRef(p)                        (p)->lpVtbl->AddRef(p)\n#define IDirectMusicCollection_Release(p)                       (p)->lpVtbl->Release(p)\n/*** IDirectMusicCollection methods ***/\n#define IDirectMusicCollection_GetInstrument(p,a,b)             (p)->lpVtbl->GetInstrument(p,a,b)\n#define IDirectMusicCollection_EnumInstrument(p,a,b,c,d)        (p)->lpVtbl->EnumInstrument(p,a,b,c,d)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicDownload interface\n */\n#define INTERFACE IDirectMusicDownload\nDECLARE_INTERFACE_(IDirectMusicDownload,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicDownload methods ***/\n    STDMETHOD(GetBuffer)(THIS_ void **ppvBuffer, DWORD *pdwSize) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicDownload_QueryInterface(p,a,b)          (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicDownload_AddRef(p)                      (p)->lpVtbl->AddRef(p)\n#define IDirectMusicDownload_Release(p)                     (p)->lpVtbl->Release(p)\n/*** IDirectMusicDownload methods ***/\n#define IDirectMusicDownload_GetBuffer(p,a,b)               (p)->lpVtbl->GetBuffer(p,a,b)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicPortDownload interface\n */\n#define INTERFACE IDirectMusicPortDownload\nDECLARE_INTERFACE_(IDirectMusicPortDownload,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicPortDownload methods ***/\n    STDMETHOD(GetBuffer)(THIS_ DWORD dwDLId, IDirectMusicDownload **ppIDMDownload) PURE;\n    STDMETHOD(AllocateBuffer)(THIS_ DWORD dwSize, IDirectMusicDownload **ppIDMDownload) PURE;\n    STDMETHOD(GetDLId)(THIS_ DWORD *pdwStartDLId, DWORD dwCount) PURE;\n    STDMETHOD(GetAppend)(THIS_ DWORD *pdwAppend) PURE;\n    STDMETHOD(Download)(THIS_ IDirectMusicDownload *pIDMDownload) PURE;\n    STDMETHOD(Unload)(THIS_ IDirectMusicDownload *pIDMDownload) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicPortDownload_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicPortDownload_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectMusicPortDownload_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectMusicPortDownload methods ***/\n#define IDirectMusicPortDownload_GetBuffer(p,a,b)      (p)->lpVtbl->GetBuffer(p,a,b)\n#define IDirectMusicPortDownload_AllocateBuffer(p,a,b) (p)->lpVtbl->AllocateBuffer(p,a,b)\n#define IDirectMusicPortDownload_GetDLId(p,a,b)        (p)->lpVtbl->GetDLId(p,a,b)\n#define IDirectMusicPortDownload_GetAppend(p,a)        (p)->lpVtbl->GetAppend(p,a)\n#define IDirectMusicPortDownload_Download(p,a)         (p)->lpVtbl->Download(p,a)\n#define IDirectMusicPortDownload_Unload(p,a)           (p)->lpVtbl->GetBuffer(p,a)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicPort interface\n */\n#define INTERFACE IDirectMusicPort\nDECLARE_INTERFACE_(IDirectMusicPort,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicPort methods ***/\n    STDMETHOD(PlayBuffer)(THIS_ LPDIRECTMUSICBUFFER pBuffer) PURE;\n    STDMETHOD(SetReadNotificationHandle)(THIS_ HANDLE hEvent) PURE;\n    STDMETHOD(Read)(THIS_ LPDIRECTMUSICBUFFER pBuffer) PURE;\n    STDMETHOD(DownloadInstrument)(THIS_ IDirectMusicInstrument *pInstrument, IDirectMusicDownloadedInstrument **ppDownloadedInstrument, DMUS_NOTERANGE *pNoteRanges, DWORD dwNumNoteRanges) PURE;\n    STDMETHOD(UnloadInstrument)(THIS_ IDirectMusicDownloadedInstrument *pDownloadedInstrument) PURE;\n    STDMETHOD(GetLatencyClock)(THIS_ struct IReferenceClock **ppClock) PURE;\n    STDMETHOD(GetRunningStats)(THIS_ LPDMUS_SYNTHSTATS pStats) PURE;\n    STDMETHOD(Compact)(THIS) PURE;\n    STDMETHOD(GetCaps)(THIS_ LPDMUS_PORTCAPS pPortCaps) PURE;\n    STDMETHOD(DeviceIoControl)(THIS_ DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped) PURE;\n    STDMETHOD(SetNumChannelGroups)(THIS_ DWORD dwChannelGroups) PURE;\n    STDMETHOD(GetNumChannelGroups)(THIS_ LPDWORD pdwChannelGroups) PURE;\n    STDMETHOD(Activate)(THIS_ BOOL fActive) PURE;\n    STDMETHOD(SetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) PURE;\n    STDMETHOD(GetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) PURE;\n    STDMETHOD(SetDirectSound)(THIS_ LPDIRECTSOUND pDirectSound, LPDIRECTSOUNDBUFFER pDirectSoundBuffer) PURE;\n    STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSize, LPDWORD pdwBufferSize) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicPort_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicPort_AddRef(p)                        (p)->lpVtbl->AddRef(p)\n#define IDirectMusicPort_Release(p)                       (p)->lpVtbl->Release(p)\n/*** IDirectMusicPort methods ***/\n#define IDirectMusicPort_PlayBuffer(p,a)                  (p)->lpVtbl->PlayBuffer(p,a)\n#define IDirectMusicPort_SetReadNotificationHandle(p,a)   (p)->lpVtbl->SetReadNotificationHandle(p,a)\n#define IDirectMusicPort_Read(p,a)                        (p)->lpVtbl->Read(p,a)\n#define IDirectMusicPort_DownloadInstrument(p,a,b,c,d)    (p)->lpVtbl->DownloadInstrument(p,a,b,c,d)\n#define IDirectMusicPort_UnloadInstrument(p,a)            (p)->lpVtbl->UnloadInstrument(p,a)\n#define IDirectMusicPort_GetLatencyClock(p,a)             (p)->lpVtbl->GetLatencyClock(p,a)\n#define IDirectMusicPort_GetRunningStats(p,a)             (p)->lpVtbl->GetRunningStats(p,a)\n#define IDirectMusicPort_Compact(p)                       (p)->lpVtbl->Compact(p)\n#define IDirectMusicPort_GetCaps(p,a)                     (p)->lpVtbl->GetCaps(p,a)\n#define IDirectMusicPort_DeviceIoControl(p,a,b,c,d,e,f,g) (p)->lpVtbl->DeviceIoControl(p,a,b,c,d,e,f,g)\n#define IDirectMusicPort_SetNumChannelGroups(p,a)         (p)->lpVtbl->SetNumChannelGroups(p,a)\n#define IDirectMusicPort_GetNumChannelGroups(p,a)         (p)->lpVtbl->GetNumChannelGroups(p,a)\n#define IDirectMusicPort_Activate(p,a)                    (p)->lpVtbl->Activate(p,a)\n#define IDirectMusicPort_SetChannelPriority(p,a,b,c)      (p)->lpVtbl->SetChannelPriority(p,a,b,c)\n#define IDirectMusicPort_GetChannelPriority(p,a,b,c)      (p)->lpVtbl->GetChannelPriority(p,a,b,c)\n#define IDirectMusicPort_SetDirectSound(p,a,b)            (p)->lpVtbl->SetDirectSound(p,a,b)\n#define IDirectMusicPort_GetFormat(p,a,b,c)               (p)->lpVtbl->GetFormat(p,a,b,c)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicThru interface\n */\n#define INTERFACE IDirectMusicThru\nDECLARE_INTERFACE_(IDirectMusicThru,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicThru methods ***/\n    STDMETHOD(ThruChannel)(THIS_ DWORD dwSourceChannelGroup, DWORD dwSourceChannel, DWORD dwDestinationChannelGroup, DWORD dwDestinationChannel, LPDIRECTMUSICPORT pDestinationPort) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicThru_QueryInterface(p,a,b)                  (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicThru_AddRef(p)                              (p)->lpVtbl->AddRef(p)\n#define IDirectMusicThru_Release(p)                             (p)->lpVtbl->Release(p)\n/*** IDirectMusicThru methods ***/\n#define IDirectMusicThru_ThruChannel(p,a,b,c,d,e)               (p)->lpVtbl->ThruChannel(p,a,b,c,d,e)\n#endif\n\n\n#ifndef __IReferenceClock_INTERFACE_DEFINED__\n#define __IReferenceClock_INTERFACE_DEFINED__\nDEFINE_GUID(IID_IReferenceClock,0x56a86897,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70);\n\n/*****************************************************************************\n * IReferenceClock interface\n */\n#define INTERFACE IReferenceClock\nDECLARE_INTERFACE_(IReferenceClock,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IReferenceClock methods ***/\n    STDMETHOD(GetTime)(THIS_ REFERENCE_TIME *pTime) PURE;\n    STDMETHOD(AdviseTime)(THIS_ REFERENCE_TIME baseTime, REFERENCE_TIME streamTime, HANDLE hEvent, DWORD *pdwAdviseCookie) PURE;\n    STDMETHOD(AdvisePeriodic)(THIS_ REFERENCE_TIME startTime, REFERENCE_TIME periodTime, HANDLE hSemaphore, DWORD *pdwAdviseCookie) PURE;\n    STDMETHOD(Unadvise)(THIS_ DWORD dwAdviseCookie) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IReferenceClock_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IReferenceClock_AddRef(p)                               (p)->lpVtbl->AddRef(p)\n#define IReferenceClock_Release(p)                              (p)->lpVtbl->Release(p)\n/*** IReferenceClock methods ***/\n#define IReferenceClock_GetTime(p,a)                            (p)->lpVtbl->GetTime(p,a)\n#define IReferenceClock_AdviseTime(p,a,b,c,d)                   (p)->lpVtbl->AdviseTime(p,a,b,c,d)\n#define IReferenceClock_AdvisePeriodic(p,a,b,c,d)               (p)->lpVtbl->AdvisePeriodic(p,a,b,c,d)\n#define IReferenceClock_Unadvise(p,a)                           (p)->lpVtbl->Unadvise(p,a)\n#endif\n\n#endif /* __IReferenceClock_INTERFACE_DEFINED__ */\n\n#ifdef __cplusplus\n}\n#endif\n\n#include <poppack.h>\n\n#endif /* __WINE_DMUSIC_CORE_H */\n"
  },
  {
    "path": "wine/windows/dmusicf.h",
    "content": "/*\n *  DirectMusic File Formats\n *\n *  Copyright (C) 2003-2004 Rok Mandeljc\n *\n *  This program is free software; you can redistribute it and/or\n *  modify it under the terms of the GNU Lesser General Public\n *  License as published by the Free Software Foundation; either\n *  version 2.1 of the License, or (at your option) any later version.\n *\n *  This program is distributed in the hope that it will be useful,\n *  but WITHOUT ANY WARRANTY; without even the implied warranty of\n *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n *  Lesser General Public License for more details.\n *\n *  You should have received a copy of the GNU Lesser General Public\n *  License along with this program; if not, write to the Free Software\n *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DMUSIC_FILEFORMATS_H\n#define __WINE_DMUSIC_FILEFORMATS_H\n\n#include <windows.h>\n\n#define COM_NO_WINDOWS_H\n#include <objbase.h>\n#include <mmsystem.h>\n#include <pshpack8.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/*****************************************************************************\n * FOURCC Definitions\n */\n/* Common chunks */\n#define DMUS_FOURCC_GUID_CHUNK                     mmioFOURCC('g','u','i','d')\n#define DMUS_FOURCC_INFO_LIST                      mmioFOURCC('I','N','F','O')\n#define DMUS_FOURCC_UNFO_LIST                      mmioFOURCC('U','N','F','O')\n#define DMUS_FOURCC_UNAM_CHUNK                     mmioFOURCC('U','N','A','M')\n#define DMUS_FOURCC_UART_CHUNK                     mmioFOURCC('U','A','R','T')\n#define DMUS_FOURCC_UCOP_CHUNK                     mmioFOURCC('U','C','O','P')\n#define DMUS_FOURCC_USBJ_CHUNK                     mmioFOURCC('U','S','B','J')\n#define DMUS_FOURCC_UCMT_CHUNK                     mmioFOURCC('U','C','M','T')\n#define DMUS_FOURCC_CATEGORY_CHUNK                 mmioFOURCC('c','a','t','g')\n#define DMUS_FOURCC_VERSION_CHUNK                  mmioFOURCC('v','e','r','s')\n/* AudioPath */\n#define DMUS_FOURCC_AUDIOPATH_FORM                 mmioFOURCC('D','M','A','P')\n#define DMUS_FOURCC_PORTCONFIGS_LIST               mmioFOURCC('p','c','s','l')\n#define DMUS_FOURCC_PORTCONFIG_LIST                mmioFOURCC('p','c','f','l')\n#define DMUS_FOURCC_PORTCONFIG_ITEM                mmioFOURCC('p','c','f','h')\n#define DMUS_FOURCC_PORTPARAMS_ITEM                mmioFOURCC('p','p','r','h')\n#define DMUS_FOURCC_DSBUFFER_LIST                  mmioFOURCC('d','b','f','l')\n#define DMUS_FOURCC_DSBUFFATTR_ITEM                mmioFOURCC('d','d','a','h')\n#define DMUS_FOURCC_PCHANNELS_LIST                 mmioFOURCC('p','c','h','l')\n#define DMUS_FOURCC_PCHANNELS_ITEM                 mmioFOURCC('p','c','h','h')\n/* Band */\n#define DMUS_FOURCC_BAND_FORM                      mmioFOURCC('D','M','B','D')\n#define DMUS_FOURCC_INSTRUMENTS_LIST               mmioFOURCC('l','b','i','l')\n#define DMUS_FOURCC_INSTRUMENT_LIST                mmioFOURCC('l','b','i','n')\n#define DMUS_FOURCC_INSTRUMENT_CHUNK               mmioFOURCC('b','i','n','s')\n/* Chordmap */\n#define DMUS_FOURCC_CHORDMAP_FORM                  mmioFOURCC('D','M','P','R')\n#define DMUS_FOURCC_IOCHORDMAP_CHUNK               mmioFOURCC('p','e','r','h')\n#define DMUS_FOURCC_SUBCHORD_CHUNK                 mmioFOURCC('c','h','d','t')\n#define DMUS_FOURCC_CHORDENTRY_CHUNK               mmioFOURCC('c','h','e','h')\n#define DMUS_FOURCC_SUBCHORDID_CHUNK               mmioFOURCC('s','b','c','n')\n#define DMUS_FOURCC_IONEXTCHORD_CHUNK              mmioFOURCC('n','c','r','d')\n#define DMUS_FOURCC_NEXTCHORDSEQ_CHUNK             mmioFOURCC('n','c','s','q')\n#define DMUS_FOURCC_IOSIGNPOST_CHUNK               mmioFOURCC('s','p','s','h')\n#define DMUS_FOURCC_CHORDNAME_CHUNK                mmioFOURCC('I','N','A','M')\n#define DMUS_FOURCC_CHORDENTRY_LIST                mmioFOURCC('c','h','o','e')\n#define DMUS_FOURCC_CHORDMAP_LIST                  mmioFOURCC('c','m','a','p')\n#define DMUS_FOURCC_CHORD_LIST                     mmioFOURCC('c','h','r','d')\n#define DMUS_FOURCC_CHORDPALETTE_LIST              mmioFOURCC('c','h','p','l')\n#define DMUS_FOURCC_CADENCE_LIST                   mmioFOURCC('c','a','d','e')\n#define DMUS_FOURCC_SIGNPOSTITEM_LIST              mmioFOURCC('s','p','s','t')\n#define DMUS_FOURCC_SIGNPOST_LIST                  mmioFOURCC('s','p','s','q')\n/* Container */\n#define DMUS_FOURCC_CONTAINER_FORM                 mmioFOURCC('D','M','C','N')\n#define DMUS_FOURCC_CONTAINER_CHUNK                mmioFOURCC('c','o','n','h')\n#define DMUS_FOURCC_CONTAINED_ALIAS_CHUNK          mmioFOURCC('c','o','b','a')\n#define DMUS_FOURCC_CONTAINED_OBJECT_CHUNK         mmioFOURCC('c','o','b','h')\n#define DMUS_FOURCC_CONTAINED_OBJECTS_LIST         mmioFOURCC('c','o','s','l')\n#define DMUS_FOURCC_CONTAINED_OBJECT_LIST          mmioFOURCC('c','o','b','l')\n/* DirectSound Buffer Configuration */\n#define DMUS_FOURCC_DSBC_FORM                      mmioFOURCC('D','S','B','C')\n#define DMUS_FOURCC_DSBD_CHUNK                     mmioFOURCC('d','s','b','d')\n#define DMUS_FOURCC_BSID_CHUNK                     mmioFOURCC('b','s','i','d')\n#define DMUS_FOURCC_DS3D_CHUNK                     mmioFOURCC('d','s','3','d')\n#define DMUS_FOURCC_DSBC_LIST                      mmioFOURCC('f','x','l','s')\n/* Effects */\n#define DMUS_FOURCC_DSFX_FORM                      mmioFOURCC('D','S','F','X')\n#define DMUS_FOURCC_DSFX_CHUNK                     mmioFOURCC('f','x','h','r')\n#define DMUS_FOURCC_DSFX_DATA                      mmioFOURCC('d','a','t','a')\n/* Reference */\n#define DMUS_FOURCC_REF_LIST                       mmioFOURCC('D','M','R','F')\n#define DMUS_FOURCC_REF_CHUNK                      mmioFOURCC('r','e','f','h')\n#define DMUS_FOURCC_DATE_CHUNK                     mmioFOURCC('d','a','t','e')\n#define DMUS_FOURCC_NAME_CHUNK                     mmioFOURCC('n','a','m','e')\n#define DMUS_FOURCC_FILE_CHUNK                     mmioFOURCC('f','i','l','e')\n/* Script */\n#define DMUS_FOURCC_SCRIPT_FORM                    mmioFOURCC('D','M','S','C')\n#define DMUS_FOURCC_SCRIPT_CHUNK                   mmioFOURCC('s','c','h','d')\n#define DMUS_FOURCC_SCRIPTVERSION_CHUNK            mmioFOURCC('s','c','v','e')\n#define DMUS_FOURCC_SCRIPTLANGUAGE_CHUNK           mmioFOURCC('s','c','l','a')\n#define DMUS_FOURCC_SCRIPTSOURCE_CHUNK             mmioFOURCC('s','c','s','r')\n/* Segment */\n#define DMUS_FOURCC_SEGMENT_FORM                   mmioFOURCC('D','M','S','G')\n#define DMUS_FOURCC_SEGMENT_CHUNK                  mmioFOURCC('s','e','g','h')\n#define DMUS_FOURCC_TRACK_LIST                     mmioFOURCC('t','r','k','l')\n/* Style chunks */\n#define DMUS_FOURCC_STYLE_FORM                     mmioFOURCC('D','M','S','T')\n#define DMUS_FOURCC_STYLE_CHUNK                    mmioFOURCC('s','t','y','h')\n#define DMUS_FOURCC_PART_LIST                      mmioFOURCC('p','a','r','t')\n#define DMUS_FOURCC_PART_CHUNK                     mmioFOURCC('p','r','t','h')\n#define DMUS_FOURCC_NOTE_CHUNK                     mmioFOURCC('n','o','t','e')\n#define DMUS_FOURCC_CURVE_CHUNK                    mmioFOURCC('c','r','v','e')\n#define DMUS_FOURCC_MARKER_CHUNK                   mmioFOURCC('m','r','k','r')\n#define DMUS_FOURCC_RESOLUTION_CHUNK               mmioFOURCC('r','s','l','n')\n#define DMUS_FOURCC_ANTICIPATION_CHUNK             mmioFOURCC('a','n','p','n')\n#define DMUS_FOURCC_PATTERN_LIST                   mmioFOURCC('p','t','t','n')\n#define DMUS_FOURCC_PATTERN_CHUNK                  mmioFOURCC('p','t','n','h')\n#define DMUS_FOURCC_RHYTHM_CHUNK                   mmioFOURCC('r','h','t','m')\n#define DMUS_FOURCC_PARTREF_LIST                   mmioFOURCC('p','r','e','f')\n#define DMUS_FOURCC_PARTREF_CHUNK                  mmioFOURCC('p','r','f','c')\n#define DMUS_FOURCC_STYLE_PERS_REF_LIST            mmioFOURCC('p','r','r','f')\n#define DMUS_FOURCC_MOTIFSETTINGS_CHUNK            mmioFOURCC('m','t','f','s')\n/* Tool */\n#define DMUS_FOURCC_TOOL_FORM                      mmioFOURCC('D','M','T','L')\n#define DMUS_FOURCC_TOOL_CHUNK                     mmioFOURCC('t','o','l','h')\n/* ToolGraph */\n#define DMUS_FOURCC_TOOLGRAPH_FORM                 mmioFOURCC('D','M','T','G')\n#define DMUS_FOURCC_TOOL_LIST                      mmioFOURCC('t','o','l','l')\n/* Track */\n#define DMUS_FOURCC_TRACK_FORM                     mmioFOURCC('D','M','T','K')\n#define DMUS_FOURCC_TRACK_CHUNK                    mmioFOURCC('t','r','k','h')\n#define DMUS_FOURCC_TRACK_EXTRAS_CHUNK             mmioFOURCC('t','r','k','x')\n/* Band Track */\n#define DMUS_FOURCC_BANDTRACK_FORM                 mmioFOURCC('D','M','B','T')\n#define DMUS_FOURCC_BANDTRACK_CHUNK                mmioFOURCC('b','d','t','h')\n#define DMUS_FOURCC_BANDS_LIST                     mmioFOURCC('l','b','d','l')\n#define DMUS_FOURCC_BAND_LIST                      mmioFOURCC('l','b','n','d')\n#define DMUS_FOURCC_BANDITEM_CHUNK                 mmioFOURCC('b','d','i','h')\n#define DMUS_FOURCC_BANDITEM_CHUNK2                mmioFOURCC('b','d','2','h')\n/* Chord Track */\n#define DMUS_FOURCC_CHORDTRACK_LIST                mmioFOURCC('c','o','r','d')\n#define DMUS_FOURCC_CHORDTRACKHEADER_CHUNK         mmioFOURCC('c','r','d','h')\n#define DMUS_FOURCC_CHORDTRACKBODY_CHUNK           mmioFOURCC('c','r','d','b')\n/* Chordmap Track */\n#define DMUS_FOURCC_PERS_TRACK_LIST                mmioFOURCC('p','f','t','r')\n#define DMUS_FOURCC_PERS_REF_LIST                  mmioFOURCC('p','f','r','f')\n#define DMUS_FOURCC_TIME_STAMP_CHUNK               mmioFOURCC('s','t','m','p')\n/* Command Track */\n#define DMUS_FOURCC_COMMANDTRACK_CHUNK             mmioFOURCC('c','m','n','d')\n/* Lyrics Track */\n#define DMUS_FOURCC_LYRICSTRACK_LIST               mmioFOURCC('l','y','r','t')\n#define DMUS_FOURCC_LYRICSTRACKEVENTS_LIST         mmioFOURCC('l','y','r','l')\n#define DMUS_FOURCC_LYRICSTRACKEVENT_LIST          mmioFOURCC('l','y','r','e')\n#define DMUS_FOURCC_LYRICSTRACKEVENTHEADER_CHUNK   mmioFOURCC('l','y','r','h')\n#define DMUS_FOURCC_LYRICSTRACKEVENTTEXT_CHUNK     mmioFOURCC('l','y','r','n')\n/* Marker Track */\n#define DMUS_FOURCC_MARKERTRACK_LIST               mmioFOURCC('M','A','R','K')\n#define DMUS_FOURCC_VALIDSTART_CHUNK               mmioFOURCC('v','a','l','s')\n#define DMUS_FOURCC_PLAYMARKER_CHUNK               mmioFOURCC('p','l','a','y')\n/* Mute Track */\n#define DMUS_FOURCC_MUTE_CHUNK                     mmioFOURCC('m','u','t','e')\n/* Parameter Control Track */\n#define DMUS_FOURCC_PARAMCONTROLTRACK_TRACK_LIST   mmioFOURCC('p','r','m','t')\n#define DMUS_FOURCC_PARAMCONTROLTRACK_OBJECT_LIST  mmioFOURCC('p','r','o','l')\n#define DMUS_FOURCC_PARAMCONTROLTRACK_OBJECT_CHUNK mmioFOURCC('p','r','o','h')\n#define DMUS_FOURCC_PARAMCONTROLTRACK_PARAM_LIST   mmioFOURCC('p','r','p','l')\n#define DMUS_FOURCC_PARAMCONTROLTRACK_PARAM_CHUNK  mmioFOURCC('p','r','p','h')\n#define DMUS_FOURCC_PARAMCONTROLTRACK_CURVES_CHUNK mmioFOURCC('p','r','c','c')\n/* Pattern Track */\n#define DMUS_FOURCC_PATTERN_FORM                   mmioFOURCC('D','M','P','T')\n/* Script Track */\n#define DMUS_FOURCC_SCRIPTTRACK_LIST               mmioFOURCC('s','c','r','t')\n#define DMUS_FOURCC_SCRIPTTRACKEVENTS_LIST         mmioFOURCC('s','c','r','l')\n#define DMUS_FOURCC_SCRIPTTRACKEVENT_LIST          mmioFOURCC('s','c','r','e')\n#define DMUS_FOURCC_SCRIPTTRACKEVENTHEADER_CHUNK   mmioFOURCC('s','c','r','h')\n#define DMUS_FOURCC_SCRIPTTRACKEVENTNAME_CHUNK     mmioFOURCC('s','c','r','n')\n/* Segment Trgigger Track */\n#define DMUS_FOURCC_SEGTRACK_LIST                  mmioFOURCC('s','e','g','t')\n#define DMUS_FOURCC_SEGTRACK_CHUNK                 mmioFOURCC('s','g','t','h')\n#define DMUS_FOURCC_SEGMENTS_LIST                  mmioFOURCC('l','s','g','l')\n#define DMUS_FOURCC_SEGMENT_LIST                   mmioFOURCC('l','s','e','g')\n#define DMUS_FOURCC_SEGMENTITEM_CHUNK              mmioFOURCC('s','g','i','h')\n#define DMUS_FOURCC_SEGMENTITEMNAME_CHUNK          mmioFOURCC('s','n','a','m')\n/* Sequence Track */\n#define DMUS_FOURCC_SEQ_TRACK                      mmioFOURCC('s','e','q','t')\n#define DMUS_FOURCC_SEQ_LIST                       mmioFOURCC('e','v','t','l')\n#define DMUS_FOURCC_CURVE_LIST                     mmioFOURCC('c','u','r','l')\n/* Signpost Track */\n#define DMUS_FOURCC_SIGNPOST_TRACK_CHUNK           mmioFOURCC('s','g','n','p')\n/* Style Track */\n#define DMUS_FOURCC_STYLE_TRACK_LIST               mmioFOURCC('s','t','t','r')\n#define DMUS_FOURCC_STYLE_REF_LIST                 mmioFOURCC('s','t','r','f')\n/* SysEx Track */\n#define DMUS_FOURCC_SYSEX_TRACK                    mmioFOURCC('s','y','e','x')\n/* Tempo Track */\n#define DMUS_FOURCC_TEMPO_TRACK                    mmioFOURCC('t','e','t','r')\n/* Time Signature Track */\n#define DMUS_FOURCC_TIMESIGNATURE_TRACK            mmioFOURCC('t','i','m','s')\n#define DMUS_FOURCC_TIMESIGTRACK_LIST              mmioFOURCC('T','I','M','S')\n#define DMUS_FOURCC_TIMESIG_CHUNK                  DMUS_FOURCC_TIMESIGNATURE_TRACK\n/* Wave Track */\n#define DMUS_FOURCC_WAVETRACK_LIST                 mmioFOURCC('w','a','v','t')\n#define DMUS_FOURCC_WAVETRACK_CHUNK                mmioFOURCC('w','a','t','h')\n#define DMUS_FOURCC_WAVEPART_LIST                  mmioFOURCC('w','a','v','p')\n#define DMUS_FOURCC_WAVEPART_CHUNK                 mmioFOURCC('w','a','p','h')\n#define DMUS_FOURCC_WAVEITEM_LIST                  mmioFOURCC('w','a','v','i')\n#define DMUS_FOURCC_WAVE_LIST                      mmioFOURCC('w','a','v','e')\n#define DMUS_FOURCC_WAVEITEM_CHUNK                 mmioFOURCC('w','a','i','h')\n/* Wave Header */\n#define DMUS_FOURCC_WAVEHEADER_CHUNK               mmioFOURCC('w','a','v','h')\n\n\n/*****************************************************************************\n * Flags\n */\n#define DMUS_BUFFERF_SHARED  0x1\n#define DMUS_BUFFERF_DEFINED 0x2\n#define DMUS_BUFFERF_MIXIN   0x8\n\n#define DMUS_CHORDMAPF_VERSION8 0x1\n\n#define DMUS_CONTAINED_OBJF_KEEP 0x1\n\n#define DMUS_CONTAINER_NOLOADS 0x2\n\n#define DMUS_IO_INST_PATCH              0x0001\n#define DMUS_IO_INST_BANKSELECT         0x0002\n#define DMUS_IO_INST_ASSIGN_PATCH       0x0008\n#define DMUS_IO_INST_NOTERANGES         0x0010\n#define DMUS_IO_INST_PAN                0x0020\n#define DMUS_IO_INST_VOLUME             0x0040\n#define DMUS_IO_INST_TRANSPOSE          0x0080\n#define DMUS_IO_INST_GM                 0x0100\n#define DMUS_IO_INST_GS                 0x0200\n#define DMUS_IO_INST_XG                 0x0400\n#define DMUS_IO_INST_CHANNEL_PRIORITY   0x0800\n#define DMUS_IO_INST_USE_DEFAULT_GM_SET 0x1000\n#define DMUS_IO_INST_PITCHBENDRANGE     0x2000\n\n#define DMUS_IO_SCRIPTTRACKF_PREPARE 0x1\n#define DMUS_IO_SCRIPTTRACKF_QUEUE   0x2\n#define DMUS_IO_SCRIPTTRACKF_ATTIME  0x4\n\n#define DMUS_MARKERF_START       0x1\n#define DMUS_MARKERF_STOP        0x2\n#define DMUS_MARKERF_CHORD_ALIGN 0x4\n\n#define DMUS_PATTERNF_PERSIST_CONTROL 0x1\n\n#define DMUS_PARTF_USE_MARKERS  0x1\n#define DMUS_PARTF_ALIGN_CHORDS 0x2\n\n#define DMUS_PORTCONFIGF_DRUMSON10  0x1\n#define DMUS_PORTCONFIGF_USEDEFAULT 0x2\n\n#define DMUS_SCRIPTIOF_LOAD_ALL_CONTENT       0x1\n#define DMUS_SCRIPTIOF_DOWNLOAD_ALL_SEGMENTS  0x2\n\n#define DMUS_SEGIOF_REFLENGTH 0x1\n#define DMUS_SEGIOF_CLOCKTIME 0x2\n\n#define DMUS_SEGMENTTRACKF_MOTIF 0x1\n\n/* Song flags; MS doesn't support this in DX 9.0 anymore */\n#define DMUS_SONG_MAXSEGID  0x7FFFFFFF\n#define DMUS_SONG_ANYSEG    0x80000000\n#define DMUS_SONG_NOSEG     0xFFFFFFFF\n#define DMUS_SONG_NOFROMSEG 0x80000001\n\n#define DMUS_SIGNPOSTF_A        0x0001      \n#define DMUS_SIGNPOSTF_B        0x0002\n#define DMUS_SIGNPOSTF_C        0x0004\n#define DMUS_SIGNPOSTF_D        0x0008\n#define DMUS_SIGNPOSTF_E        0x0010\n#define DMUS_SIGNPOSTF_F        0x0020\n#define DMUS_SIGNPOSTF_1        0x0100\n#define DMUS_SIGNPOSTF_2        0x0200\n#define DMUS_SIGNPOSTF_3        0x0400\n#define DMUS_SIGNPOSTF_4        0x0800\n#define DMUS_SIGNPOSTF_5        0x1000\n#define DMUS_SIGNPOSTF_6        0x2000\n#define DMUS_SIGNPOSTF_7        0x4000\n#define DMUS_SIGNPOSTF_CADENCE  0x8000\n#define DMUS_SIGNPOSTF_LETTER   (DMUS_SIGNPOSTF_A | DMUS_SIGNPOSTF_B | DMUS_SIGNPOSTF_C | DMUS_SIGNPOSTF_D | DMUS_SIGNPOSTF_E | DMUS_SIGNPOSTF_F)\n#define DMUS_SIGNPOSTF_ROOT     (DMUS_SIGNPOSTF_1 | DMUS_SIGNPOSTF_2 | DMUS_SIGNPOSTF_3 | DMUS_SIGNPOSTF_4 | DMUS_SIGNPOSTF_5 | DMUS_SIGNPOSTF_6 | DMUS_SIGNPOSTF_7)\n\n#define DMUS_SPOSTCADENCEF_1 0x2\n#define DMUS_SPOSTCADENCEF_2 0x4\n\n#define DMUS_VARIATIONF_MAJOR        0x0000007F\n#define DMUS_VARIATIONF_MINOR        0x00003F80\n#define DMUS_VARIATIONF_OTHER        0x001FC000\n#define DMUS_VARIATIONF_ROOT_SCALE   0x00200000\n#define DMUS_VARIATIONF_ROOT_FLAT    0x00400000\n#define DMUS_VARIATIONF_ROOT_SHARP   0x00800000\n#define DMUS_VARIATIONF_TYPE_TRIAD   0x01000000\n#define DMUS_VARIATIONF_TYPE_6AND7   0x02000000\n#define DMUS_VARIATIONF_TYPE_COMPLEX 0x04000000\n#define DMUS_VARIATIONF_DEST_TO1     0x08000000\n#define DMUS_VARIATIONF_DEST_TO5     0x10000000\n#define DMUS_VARIATIONF_DEST_OTHER   0x40000000\n#define DMUS_VARIATIONF_MODES        0xE0000000\n#define DMUS_VARIATIONF_MODES_EX     (0x20000000 | 0x80000000)\n#define DMUS_VARIATIONF_IMA25_MODE   0x00000000\n#define DMUS_VARIATIONF_DMUS_MODE    0x20000000\n\n#define DMUS_WAVETRACKF_SYNC_VAR        0x1\n#define DMUS_WAVETRACKF_PERSIST_CONTROL 0x2\n\n\n/*****************************************************************************\n * Enumerations\n */\n/* typedef definitions */\ntypedef enum enumDMUS_VARIATIONT_TYPES DMUS_VARIATIONT_TYPES;\ntypedef enum enumDMUS_EMBELLISHT_TYPES DMUS_EMBELLISHT_TYPES;\ntypedef enum enumDMUS_PATTERNT_TYPES   DMUS_PATTERNT_TYPES;\n\n/* actual enumerations */\nenum enumDMUS_VARIATIONT_TYPES {\n\tDMUS_VARIATIONT_SEQUENTIAL   = 0x0,\n\tDMUS_VARIATIONT_RANDOM       = 0x1,\n\tDMUS_VARIATIONT_RANDOM_START = 0x2,\n\tDMUS_VARIATIONT_NO_REPEAT    = 0x3,\n\tDMUS_VARIATIONT_RANDOM_ROW   = 0x4\n};\n\nenum enumDMUS_EMBELLISHT_TYPES {\n\tDMUS_EMBELLISHT_NORMAL = 0x0000,\n\tDMUS_EMBELLISHT_FILL   = 0x0001,\n\tDMUS_EMBELLISHT_BREAK  = 0x0002,\n\tDMUS_EMBELLISHT_INTRO  = 0x0004,\n\tDMUS_EMBELLISHT_END    = 0x0008,\n\tDMUS_EMBELLISHT_MOTIF  = 0x0010,\n\tDMUS_EMBELLISHT_ALL    = 0xFFFF\n};\n\nenum enumDMUS_PATTERNT_TYPES {\n\tDMUS_PATTERNT_RANDOM       = 0x0,\n\tDMUS_PATTERNT_REPEAT       = 0x1,\n\tDMUS_PATTERNT_SEQUENTIAL   = 0x2,\n\tDMUS_PATTERNT_RANDOM_START = 0x3,\n\tDMUS_PATTERNT_NO_REPEAT    = 0x4,\n\tDMUS_PATTERNT_RANDOM_ROW   = 0x5\n};\n\n\n/*****************************************************************************\n * Structures\n */\n/* typedef definitions */\ntypedef struct _DMUS_IO_SEQ_ITEM                       DMUS_IO_SEQ_ITEM,                       *LPDMUS_IO_SEQ_ITEM;\ntypedef struct _DMUS_IO_CURVE_ITEM                     DMUS_IO_CURVE_ITEM,                     *LPDMUS_IO_CURVE_ITEM;\ntypedef struct _DMUS_IO_TEMPO_ITEM                     DMUS_IO_TEMPO_ITEM,                     *LPDMUS_IO_TEMPO_ITEM;\ntypedef struct _DMUS_IO_SYSEX_ITEM                     DMUS_IO_SYSEX_ITEM,                     *LPDMUS_IO_SYSEX_ITEM;\ntypedef struct  DMUS_CHORD_KEY                         DMUS_CHORD_PARAM,                       *LPDMUS_CHORD_PARAM; /* in dmusici.h */\ntypedef struct _DMUS_RHYTHM_PARAM                      DMUS_RHYTHM_PARAM,                      *LPDMUS_RHYTHM_PARAM;\ntypedef struct _DMUS_TEMPO_PARAM                       DMUS_TEMPO_PARAM,                       *LPDMUS_TEMPO_PARAM;\ntypedef struct _DMUS_MUTE_PARAM                        DMUS_MUTE_PARAM,                        *LPDMUS_MUTE_PARAM;\ntypedef struct _DMUS_IO_TIMESIG                        DMUS_IO_TIMESIG,                        *LPDMUS_IO_TIMESIG;\ntypedef struct _DMUS_IO_STYLE                          DMUS_IO_STYLE,                          *LPDMUS_IO_STYLE;\ntypedef struct _DMUS_IO_VERSION                        DMUS_IO_VERSION,                        *LPDMUS_IO_VERSION;\ntypedef struct _DMUS_IO_PATTERN                        DMUS_IO_PATTERN,                        *LPDMUS_IO_PATTERN;\ntypedef struct _DMUS_IO_STYLEPART                      DMUS_IO_STYLEPART,                      *LPDMUS_IO_STYLEPART;\ntypedef struct _DMUS_IO_PARTREF                        DMUS_IO_PARTREF,                        *LPDMUS_IO_PARTREF;\ntypedef struct _DMUS_IO_STYLENOTE                      DMUS_IO_STYLENOTE,                      *LPDMUS_IO_STYLENOTE;\ntypedef struct _DMUS_IO_STYLECURVE                     DMUS_IO_STYLECURVE,                     *LPDMUS_IO_STYLECURVE;\ntypedef struct _DMUS_IO_STYLEMARKER                    DMUS_IO_STYLEMARKER,                    *LPDMUS_IO_STYLEMARKER;\ntypedef struct _DMUS_IO_STYLERESOLUTION                DMUS_IO_STYLERESOLUTION,                *LPDMUS_IO_STYLERESOLUTION;\ntypedef struct _DMUS_IO_STYLE_ANTICIPATION             DMUS_IO_STYLE_ANTICIPATION,             *LPDMUS_IO_STYLE_ANTICIPATION;\ntypedef struct _DMUS_IO_MOTIFSETTINGS                  DMUS_IO_MOTIFSETTINGS,                  *LPDMUS_IO_MOTIFSETTINGS;\ntypedef struct _DMUS_IO_CHORD                          DMUS_IO_CHORD,                          *LPDMUS_IO_CHORD;\ntypedef struct _DMUS_IO_SUBCHORD                       DMUS_IO_SUBCHORD,                       *LPDMUS_IO_SUBCHORD;\ntypedef struct _DMUS_IO_COMMAND                        DMUS_IO_COMMAND,                        *LPDMUS_IO_COMMAND;\ntypedef struct _DMUS_IO_TOOL_HEADER                    DMUS_IO_TOOL_HEADER,                    *LPDMUS_IO_TOOL_HEADER;\ntypedef struct _DMUS_IO_PORTCONFIG_HEADER              DMUS_IO_PORTCONFIG_HEADER,              *LPDMUS_IO_PORTCONFIG_HEADER;\ntypedef struct _DMUS_IO_PCHANNELTOBUFFER_HEADER        DMUS_IO_PCHANNELTOBUFFER_HEADER,        *LPDMUS_IO_PCHANNELTOBUFFER_HEADER;\ntypedef struct _DMUS_IO_BUFFER_ATTRIBUTES_HEADER       DMUS_IO_BUFFER_ATTRIBUTES_HEADER,       *LPDMUS_IO_BUFFER_ATTRIBUTES_HEADER;\ntypedef struct _DMUS_IO_BAND_TRACK_HEADER              DMUS_IO_BAND_TRACK_HEADER,              *LPDMUS_IO_BAND_TRACK_HEADER;\ntypedef struct _DMUS_IO_BAND_ITEM_HEADER               DMUS_IO_BAND_ITEM_HEADER,               *LPDMUS_IO_BAND_ITEM_HEADER;\ntypedef struct _DMUS_IO_BAND_ITEM_HEADER2              DMUS_IO_BAND_ITEM_HEADER2,              *LPDMUS_IO_BAND_ITEM_HEADER2;\ntypedef struct _DMUS_IO_INSTRUMENT                     DMUS_IO_INSTRUMENT,                     *LPDMUS_IO_INSTRUMENT;\ntypedef struct _DMUS_IO_WAVE_HEADER                    DMUS_IO_WAVE_HEADER,                    *LPDMUS_IO_WAVE_HEADER;\ntypedef struct _DMUS_IO_WAVE_TRACK_HEADER              DMUS_IO_WAVE_TRACK_HEADER,              *LPDMUS_IO_WAVE_TRACK_HEADER;\ntypedef struct _DMUS_IO_WAVE_PART_HEADER               DMUS_IO_WAVE_PART_HEADER,               *LPDMUS_IO_WAVE_PART_HEADER;\ntypedef struct _DMUS_IO_WAVE_ITEM_HEADER               DMUS_IO_WAVE_ITEM_HEADER,               *LPDMUS_IO_WAVE_ITEM_HEADER;\ntypedef struct _DMUS_IO_CONTAINER_HEADER               DMUS_IO_CONTAINER_HEADER,               *LPDMUS_IO_CONTAINER_HEADER;\ntypedef struct _DMUS_IO_CONTAINED_OBJECT_HEADER        DMUS_IO_CONTAINED_OBJECT_HEADER,        *LPDMUS_IO_CONTAINED_OBJECT_HEADER;\ntypedef struct _DMUS_IO_SEGMENT_HEADER                 DMUS_IO_SEGMENT_HEADER,                 *LPDMUS_IO_SEGMENT_HEADER;\t\ntypedef struct _DMUS_IO_TRACK_HEADER                   DMUS_IO_TRACK_HEADER,                   *LPDMUS_IO_TRACK_HEADER;\ntypedef struct _DMUS_IO_TRACK_EXTRAS_HEADER            DMUS_IO_TRACK_EXTRAS_HEADER,            *LPDMUS_IO_TRACK_EXTRAS_HEADER;\ntypedef struct _DMUS_IO_REFERENCE                      DMUS_IO_REFERENCE,                      *LPDMUS_IO_REFERENCE;\ntypedef struct _DMUS_IO_CHORDMAP                       DMUS_IO_CHORDMAP,                       *LPDMUS_IO_CHORDMAP;\ntypedef struct _DMUS_IO_CHORDMAP_SUBCHORD              DMUS_IO_CHORDMAP_SUBCHORD,              *LPDMUS_IO_CHORDMAP_SUBCHORD;\ntypedef struct _DMUS_IO_CHORDMAP_SUBCHORD              DMUS_IO_PERS_SUBCHORD,                  *LPDMUS_IO_PERS_SUBCHORD;\ntypedef struct _DMUS_IO_CHORDENTRY                     DMUS_IO_CHORDENTRY,                     *LPDMUS_IO_CHORDENTRY;\ntypedef struct _DMUS_IO_NEXTCHORD                      DMUS_IO_NEXTCHORD,                      *LPDMUS_IO_NEXTCHORD;\ntypedef struct _DMUS_IO_CHORDMAP_SIGNPOST              DMUS_IO_CHORDMAP_SIGNPOST,              *LPDMUS_IO_CHORDMAP_SIGNPOST;\ntypedef struct _DMUS_IO_CHORDMAP_SIGNPOST              DMUS_IO_PERS_SIGNPOST,                  *LPDMUS_IO_PERS_SIGNPOST;\ntypedef struct _DMUS_IO_SCRIPT_HEADER                  DMUS_IO_SCRIPT_HEADER,                  *LPDMUS_IO_SCRIPT_HEADER;\ntypedef struct _DMUS_IO_SIGNPOST                       DMUS_IO_SIGNPOST,                       *LPDMUS_IO_SIGNPOST;\ntypedef struct _DMUS_IO_MUTE                           DMUS_IO_MUTE,                           *LPDMUS_IO_MUTE;\ntypedef struct _DMUS_IO_TIMESIGNATURE_ITEM             DMUS_IO_TIMESIGNATURE_ITEM,             *LPDMUS_IO_TIMESIGNATURE_ITEM;\ntypedef struct _DMUS_IO_VALID_START                    DMUS_IO_VALID_START,                    *LPDMUS_IO_VALID_START;\ntypedef struct _DMUS_IO_PLAY_MARKER                    DMUS_IO_PLAY_MARKER,                    *LPDMUS_IO_PLAY_MARKER;\ntypedef struct _DMUS_IO_SEGMENT_TRACK_HEADER           DMUS_IO_SEGMENT_TRACK_HEADER,           *LPDMUS_IO_SEGMENT_TRACK_HEADER;\ntypedef struct _DMUS_IO_SEGMENT_ITEM_HEADER            DMUS_IO_SEGMENT_ITEM_HEADER,            *LPDMUS_IO_SEGMENT_ITEM_HEADER;\ntypedef struct _DMUS_IO_SCRIPTTRACK_EVENTHEADER        DMUS_IO_SCRIPTTRACK_EVENTHEADER,        *LPDMUS_IO_SCRIPTTRACK_EVENTHEADER;\ntypedef struct _DMUS_IO_LYRICSTRACK_EVENTHEADER        DMUS_IO_LYRICSTRACK_EVENTHEADER,        *LPDMUS_IO_LYRICSTRACK_EVENTHEADER;\ntypedef struct _DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER, *LPDMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER;\ntypedef struct _DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER  DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER,  *LPDMUS_IO_PARAMCONTROLTRACK_PARAMHEADER;\ntypedef struct _DMUS_IO_PARAMCONTROLTRACK_CURVEINFO    DMUS_IO_PARAMCONTROLTRACK_CURVEINFO,    *LPDMUS_IO_PARAMCONTROLTRACK_CURVEINFO;\ntypedef struct _DSOUND_IO_DSBUFFERDESC                 DSOUND_IO_DSBUFFERDESC,                 *LPDSOUND_IO_DSBUFFERDESC;\ntypedef struct _DSOUND_IO_DSBUSID                      DSOUND_IO_DSBUSID,                      *LPDSOUND_IO_DSBUSID;\ntypedef struct _DSOUND_IO_3D                           DSOUND_IO_3D,                           *LPDSOUND_IO_3D;\ntypedef struct _DSOUND_IO_DXDMO_HEADER                 DSOUND_IO_DXDMO_HEADER,                 *LPDSOUND_IO_DXDMO_HEADER;\ntypedef struct _DSOUND_IO_DXDMO_DATA                   DSOUND_IO_DXDMO_DATA,                   *LPDSOUND_IO_DXDMO_DATA;\n\n/* actual structures */\nstruct _DMUS_IO_SEQ_ITEM {\n\tMUSIC_TIME mtTime;\n\tMUSIC_TIME mtDuration;\n\tDWORD      dwPChannel;\n\tshort      nOffset; \n\tBYTE       bStatus;\n\tBYTE       bByte1;\n\tBYTE       bByte2;\n};\n\nstruct _DMUS_IO_CURVE_ITEM {\n\tMUSIC_TIME mtStart;\n\tMUSIC_TIME mtDuration;\n\tMUSIC_TIME mtResetDuration;\n\tDWORD      dwPChannel;\n\tshort      nOffset;\n\tshort      nStartValue;\n\tshort      nEndValue;\n\tshort      nResetValue;\n\tBYTE       bType;\n\tBYTE       bCurveShape;\n\tBYTE       bCCData;\n\tBYTE       bFlags;\n\t/* DX8 */\n\tWORD       wParamType;\n\tWORD       wMergeIndex;\n};\n\nstruct _DMUS_IO_TEMPO_ITEM {\n\tMUSIC_TIME lTime;\n\tdouble     dblTempo;\n};\n\nstruct _DMUS_IO_SYSEX_ITEM {\n\tMUSIC_TIME mtTime;\n\tDWORD      dwPChannel;\n\tDWORD      dwSysExLength;\n};\n\nstruct _DMUS_RHYTHM_PARAM {\n\tDMUS_TIMESIGNATURE TimeSig;\n\tDWORD              dwRhythmPattern;\n};\n\nstruct _DMUS_TEMPO_PARAM {\n\tMUSIC_TIME mtTime;\n\tdouble     dblTempo;\n};\n\nstruct _DMUS_MUTE_PARAM {\n\tDWORD dwPChannel;\n\tDWORD dwPChannelMap;\n\tBOOL  fMute;\n};\n\n#pragma pack(2)\nstruct _DMUS_IO_TIMESIG {\n\tBYTE bBeatsPerMeasure;\n\tBYTE bBeat;\n\tWORD wGridsPerBeat;\n};\n\nstruct _DMUS_IO_STYLE {\n\tDMUS_IO_TIMESIG timeSig;\n\tdouble          dblTempo;   \n};\n\nstruct _DMUS_IO_VERSION {\n\tDWORD dwVersionMS;\n\tDWORD dwVersionLS;\n};\n\nstruct _DMUS_IO_PATTERN {\n\tDMUS_IO_TIMESIG timeSig;\n\tBYTE            bGrooveBottom;\n\tBYTE            bGrooveTop;\n\tWORD            wEmbellishment;\n\tWORD            wNbrMeasures;\n\tBYTE            bDestGrooveBottom;\n\tBYTE            bDestGrooveTop;\n\tDWORD           dwFlags;\n};\n\nstruct _DMUS_IO_STYLEPART {\n\tDMUS_IO_TIMESIG timeSig;\n\tDWORD           dwVariationChoices[32];\n\tGUID            guidPartID;\n\tWORD            wNbrMeasures;\n\tBYTE            bPlayModeFlags;\n\tBYTE            bInvertUpper;\n\tBYTE            bInvertLower;\n\tBYTE            bPad[3];\n\tDWORD           dwFlags;\n};\n\nstruct _DMUS_IO_PARTREF {\n\tGUID  guidPartID;\n\tWORD  wLogicalPartID;\n\tBYTE  bVariationLockID;\n\tBYTE  bSubChordLevel;\n\tBYTE  bPriority;\n\tBYTE  bRandomVariation;\n\tWORD  wPad;\n\tDWORD dwPChannel;\n};\n\n\nstruct _DMUS_IO_STYLENOTE {\n\tMUSIC_TIME mtGridStart;\n\tDWORD      dwVariation;\n\tMUSIC_TIME mtDuration;\n\tshort      nTimeOffset;\n\tWORD       wMusicValue;\n\tBYTE       bVelocity;\n\tBYTE       bTimeRange;\n\tBYTE       bDurRange;\n\tBYTE       bVelRange;\n\tBYTE       bInversionID;\n\tBYTE       bPlayModeFlags;\n\t /* DX8 */\n\tBYTE       bNoteFlags;\n};\n\nstruct _DMUS_IO_STYLECURVE {\n\tMUSIC_TIME mtGridStart;\n\tDWORD      dwVariation;\n\tMUSIC_TIME mtDuration;\n\tMUSIC_TIME mtResetDuration;\n\tshort      nTimeOffset;\n\tshort      nStartValue;\n\tshort      nEndValue;\n\tshort      nResetValue;\n\tBYTE       bEventType;\n\tBYTE       bCurveShape;\n\tBYTE       bCCData;\n\tBYTE       bFlags;\n\t/* DX8 */\n\tWORD       wParamType;\n\tWORD       wMergeIndex;\n};\n\nstruct _DMUS_IO_STYLEMARKER {\n\tMUSIC_TIME mtGridStart;\n\tDWORD      dwVariation;\n\tWORD       wMarkerFlags;\n};\n\nstruct _DMUS_IO_STYLERESOLUTION {\n\tDWORD dwVariation;\n\tWORD  wMusicValue;\n\tBYTE  bInversionID;\n\tBYTE  bPlayModeFlags;\n};\n\nstruct _DMUS_IO_STYLE_ANTICIPATION {\n\tMUSIC_TIME mtGridStart;\n\tDWORD      dwVariation;\n\tshort      nTimeOffset;\n\tBYTE       bTimeRange;\n};\n\nstruct _DMUS_IO_MOTIFSETTINGS {\n\tDWORD      dwRepeats;\n\tMUSIC_TIME mtPlayStart;\n\tMUSIC_TIME mtLoopStart;\n\tMUSIC_TIME mtLoopEnd;\n\tDWORD      dwResolution;\n};\n#pragma pack()\n\nstruct _DMUS_IO_CHORD {\n\tWCHAR      wszName[16];\n\tMUSIC_TIME mtTime;\n\tWORD       wMeasure;\n\tBYTE       bBeat;\n\tBYTE       bFlags;\n};\n\nstruct _DMUS_IO_SUBCHORD {\n\tDWORD dwChordPattern;\n\tDWORD dwScalePattern;\n\tDWORD dwInversionPoints;\n\tDWORD dwLevels;\n\tBYTE  bChordRoot;\n\tBYTE  bScaleRoot;\n};\n\nstruct _DMUS_IO_COMMAND {\n\tMUSIC_TIME mtTime;\n\tWORD       wMeasure;\n\tBYTE       bBeat;\n\tBYTE       bCommand;\n\tBYTE       bGrooveLevel;\n\tBYTE       bGrooveRange;\n\tBYTE       bRepeatMode;\n};\n\nstruct _DMUS_IO_TOOL_HEADER {\n\tGUID   guidClassID;\n\tLONG   lIndex;\n\tDWORD  cPChannels;\n\tFOURCC ckid;\n\tFOURCC fccType;\n\tDWORD  dwPChannels[1];\n};\n\nstruct _DMUS_IO_PORTCONFIG_HEADER {\n\tGUID  guidPort;\n\tDWORD dwPChannelBase;\n\tDWORD dwPChannelCount;\n\tDWORD dwFlags;\n};\n\nstruct _DMUS_IO_PCHANNELTOBUFFER_HEADER {\n\tDWORD dwPChannelBase;\n\tDWORD dwPChannelCount;\n\tDWORD dwBufferCount;\n\tDWORD dwFlags;\n};\n\nstruct _DMUS_IO_BUFFER_ATTRIBUTES_HEADER {\n\tGUID  guidBufferID;\n\tDWORD dwFlags;\n};\n\nstruct _DMUS_IO_BAND_TRACK_HEADER {\n\tBOOL bAutoDownload;\n};\n\nstruct _DMUS_IO_BAND_ITEM_HEADER {\n\tMUSIC_TIME lBandTime;\n};\n\nstruct _DMUS_IO_BAND_ITEM_HEADER2 {\n\tMUSIC_TIME lBandTimeLogical;\n\tMUSIC_TIME lBandTimePhysical;\n};\n\nstruct _DMUS_IO_INSTRUMENT {\n\tDWORD dwPatch;\n\tDWORD dwAssignPatch;\n\tDWORD dwNoteRanges[4];\n\tDWORD dwPChannel;\n\tDWORD dwFlags;\n\tBYTE  bPan;\n\tBYTE  bVolume;\n\tshort nTranspose;\n\tDWORD dwChannelPriority;\n\tshort nPitchBendRange;\n};\n\nstruct _DMUS_IO_WAVE_HEADER {\n\tREFERENCE_TIME rtReadAhead;\n\tDWORD          dwFlags;\n};\n\nstruct _DMUS_IO_WAVE_TRACK_HEADER {\n\tLONG  lVolume;\n\tDWORD dwFlags;\n};\n\nstruct _DMUS_IO_WAVE_PART_HEADER {\n    LONG  lVolume;\n    DWORD dwVariations;\n    DWORD dwPChannel;\n    DWORD dwLockToPart;\n    DWORD dwFlags;\n    DWORD dwIndex;\n};\n\nstruct _DMUS_IO_WAVE_ITEM_HEADER  {\n\tLONG           lVolume;\n\tLONG           lPitch;\n\tDWORD          dwVariations;\n\tREFERENCE_TIME rtTime;\n\tREFERENCE_TIME rtStartOffset;\n\tREFERENCE_TIME rtReserved;\n\tREFERENCE_TIME rtDuration;\n\tMUSIC_TIME     mtLogicalTime;\n\tDWORD          dwLoopStart;\n\tDWORD          dwLoopEnd;\n\tDWORD          dwFlags;\n\tWORD           wVolumeRange;\n\tWORD           wPitchRange;\n};\n\nstruct _DMUS_IO_CONTAINER_HEADER {\n\tDWORD dwFlags;\n};\n\nstruct _DMUS_IO_CONTAINED_OBJECT_HEADER {\n\tGUID   guidClassID;\n\tDWORD  dwFlags;\n\tFOURCC ckid;\n\tFOURCC fccType;\n};\n\nstruct _DMUS_IO_SEGMENT_HEADER {\n\tDWORD          dwRepeats;\n\tMUSIC_TIME     mtLength;\n\tMUSIC_TIME     mtPlayStart;\n\tMUSIC_TIME     mtLoopStart;\n\tMUSIC_TIME     mtLoopEnd;\n\tDWORD          dwResolution;\n\t/* DX8 */\n\tREFERENCE_TIME rtLength;\n\tDWORD          dwFlags;\n\tDWORD          dwReserved;\n\t/* DX9 */\n\tREFERENCE_TIME rtLoopStart;\n\tREFERENCE_TIME rtLoopEnd;\n\tREFERENCE_TIME rtPlayStart;\n};\n\nstruct _DMUS_IO_TRACK_HEADER {\n\tGUID   guidClassID;\n\tDWORD  dwPosition;\n\tDWORD  dwGroup;\n\tFOURCC ckid;\n\tFOURCC fccType;\n};\n\nstruct _DMUS_IO_TRACK_EXTRAS_HEADER {\n\tDWORD dwFlags;\n\tDWORD dwPriority;\n};\n\nstruct _DMUS_IO_REFERENCE {\n\tGUID  guidClassID;\n\tDWORD dwValidData;\n};\n\nstruct _DMUS_IO_CHORDMAP {\n\tWCHAR wszLoadName[20];\n\tDWORD dwScalePattern;\n\tDWORD dwFlags;\n};\n\nstruct _DMUS_IO_CHORDMAP_SUBCHORD {\n\tDWORD dwChordPattern;\n\tDWORD dwScalePattern;\n\tDWORD dwInvertPattern;\n\tBYTE  bChordRoot;\n\tBYTE  bScaleRoot;\n\tWORD  wCFlags;\n\tDWORD dwLevels;\n};\n\nstruct _DMUS_IO_CHORDENTRY {\n\tDWORD dwFlags;\n\tWORD  wConnectionID;\n};\n\nstruct _DMUS_IO_NEXTCHORD {\n\tDWORD dwFlags;\n\tWORD  nWeight;\n\tWORD  wMinBeats;\n\tWORD  wMaxBeats;\n\tWORD  wConnectionID;\n};\n\nstruct _DMUS_IO_CHORDMAP_SIGNPOST {\n\tDWORD dwChords;\n\tDWORD dwFlags;\n};\n\nstruct _DMUS_IO_SCRIPT_HEADER {\n\tDWORD dwFlags;\n};\n\nstruct _DMUS_IO_SIGNPOST {\n\tMUSIC_TIME mtTime;\n\tDWORD      dwChords;\n\tWORD       wMeasure;\n};\n\nstruct _DMUS_IO_MUTE {\n\tMUSIC_TIME mtTime;\n\tDWORD      dwPChannel;\n\tDWORD      dwPChannelMap;\n};\n\nstruct _DMUS_IO_TIMESIGNATURE_ITEM {\n\tMUSIC_TIME lTime;\n\tBYTE       bBeatsPerMeasure;\n\tBYTE       bBeat;\n\tWORD       wGridsPerBeat;\n};\n\nstruct _DMUS_IO_VALID_START {\n\tMUSIC_TIME mtTime;\n};\n\nstruct _DMUS_IO_PLAY_MARKER {\n\tMUSIC_TIME mtTime;\n};\n\nstruct _DMUS_IO_SEGMENT_TRACK_HEADER {\n\tDWORD dwFlags;\n};\n\nstruct _DMUS_IO_SEGMENT_ITEM_HEADER {\n\tMUSIC_TIME lTimeLogical;\n\tMUSIC_TIME lTimePhysical;\n\tDWORD      dwPlayFlags;\n\tDWORD      dwFlags;\n};\n\nstruct _DMUS_IO_SCRIPTTRACK_EVENTHEADER {\n\tDWORD      dwFlags;\n\tMUSIC_TIME lTimeLogical;\n\tMUSIC_TIME lTimePhysical;\n};\n\nstruct _DMUS_IO_LYRICSTRACK_EVENTHEADER {\n\tDWORD dwFlags;\n\tDWORD dwTimingFlags;\n\tMUSIC_TIME lTimeLogical;\n\tMUSIC_TIME lTimePhysical;\n};\n\nstruct _DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER {\n\tDWORD dwFlags;\n\tGUID guidTimeFormat;\n\tDWORD dwPChannel;\n\tDWORD dwStage;\n\tDWORD dwBuffer;\n\tGUID guidObject;\n\tDWORD dwIndex;\n};\n\nstruct _DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER {\n\tDWORD dwFlags;\n\tDWORD dwIndex;\n};\n\nstruct _DMUS_IO_PARAMCONTROLTRACK_CURVEINFO {\n\tMUSIC_TIME mtStartTime;\n\tMUSIC_TIME mtEndTime;\n\tfloat      fltStartValue;\n\tfloat      fltEndValue;\n\tDWORD      dwCurveType;\n\tDWORD      dwFlags;\n};\n\nstruct _DSOUND_IO_DSBUFFERDESC {\n\tDWORD dwFlags;\n\tWORD  nChannels;\n\tLONG  lVolume;\n\tLONG  lPan;\n\tDWORD dwReserved;\n};\n\nstruct _DSOUND_IO_DSBUSID {\n\tDWORD busid[1];\n};\n\nstruct _DSOUND_IO_3D {\n\tGUID guid3DAlgorithm;\n\tDS3DBUFFER ds3d;\n};\n\nstruct _DSOUND_IO_DXDMO_HEADER {\n\tDWORD dwEffectFlags;\n\tGUID  guidDSFXClass;\n\tGUID  guidReserved;\n\tGUID  guidSendBuffer;\n\tDWORD dwReserved;\n};\n\nstruct _DSOUND_IO_DXDMO_DATA {\n\tDWORD data[1];\n};\n\n#ifdef __cplusplus\n}\n#endif\n\n#include <poppack.h>\n\n#endif /* __WINE_DMUSIC_FILEFORMATS_H */\n"
  },
  {
    "path": "wine/windows/dmusici.h",
    "content": "/*\n *  DirectMusic Performance API\n *\n *  Copyright (C) 2003-2004 Rok Mandeljc\n *\n *  This program is free software; you can redistribute it and/or\n *  modify it under the terms of the GNU Lesser General Public\n *  License as published by the Free Software Foundation; either\n *  version 2.1 of the License, or (at your option) any later version.\n *\n *  This program is distributed in the hope that it will be useful,\n *  but WITHOUT ANY WARRANTY; without even the implied warranty of\n *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n *  Lesser General Public License for more details.\n *\n *  You should have received a copy of the GNU Lesser General Public\n *  License along with this program; if not, write to the Free Software\n *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DMUSIC_PERFORMANCE_H\n#define __WINE_DMUSIC_PERFORMANCE_H\n\n#include <windows.h>\n\n#define COM_NO_WINDOWS_H\n#include <objbase.h>\n#include <mmsystem.h>\n#include <dmusicc.h>\n#include <dmplugin.h>\n#include <pshpack8.h>\n\n#ifdef WINE_NO_UNICODE_MACROS\n#undef AddPort\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*****************************************************************************\n * Predeclare the interfaces\n */\n/* CLSIDs */\nDEFINE_GUID(CLSID_DirectMusicAudioPathConfig,              0xee0b9ca0,0xa81e,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);\nDEFINE_GUID(CLSID_DirectMusicBand,                         0x79ba9e00,0xb6ee,0x11d1,0x86,0xbe,0x00,0xc0,0x4f,0xbf,0x8f,0xef);\nDEFINE_GUID(CLSID_DirectMusicChordMap,                     0xd2ac288f,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(CLSID_DirectMusicComposer,                     0xd2ac2890,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(CLSID_DirectMusicContainer,                    0x9301e380,0x1f22,0x11d3,0x82,0x26,0xd2,0xfa,0x76,0x25,0x5d,0x47);\nDEFINE_GUID(CLSID_DirectMusicGraph,                        0xd2ac2884,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(CLSID_DirectMusicLoader,                       0xd2ac2892,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(CLSID_DirectMusicPatternTrack,                 0xd2ac2897,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(CLSID_DirectMusicPerformance,                  0xd2ac2881,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(CLSID_DirectMusicScript,                       0x810b5013,0xe88d,0x11d2,0x8b,0xc1,0x00,0x60,0x08,0x93,0xb1,0xb6);\nDEFINE_GUID(CLSID_DirectMusicSegment,                      0xd2ac2882,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(CLSID_DirectMusicSegmentState,                 0xd2ac2883,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(CLSID_DirectMusicStyle,                        0xd2ac288a,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(CLSID_DirectSoundWave,                         0x8a667154,0xf9cb,0x11d2,0xad,0x8a,0x00,0x60,0xb0,0x57,0x5a,0xbc);\n/* MS doesn't support this in DX 9.0 and newer... but there's no harm in keeping it around */\nDEFINE_GUID(CLSID_DirectMusicSong,                         0xaed5f0a5,0xd972,0x483d,0xa3,0x84,0x64,0x9d,0xfe,0xb9,0xc1,0x81);\n/* these CLSIDs aren't officially declared in any dmusic header, but are used by wine's regsvr implementations*/\nDEFINE_GUID(CLSID_DirectMusicSynthSink,                    0xaec17ce3,0xa514,0x11d1,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);\nDEFINE_GUID(CLSID_DirectMusicSection,                      0x3f037241,0x414e,0x11d1,0xa7,0xce,0x00,0xa0,0xc9,0x13,0xf7,0x3c);\nDEFINE_GUID(CLSID_DirectMusicAuditionTrack,                0xd2ac2897,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(CLSID_DirectMusicSegTriggerTrack,              0xbae4d665,0x4ea1,0x11d3,0x8b,0xda,0x00,0x60,0x08,0x93,0xb1,0xb6);\nDEFINE_GUID(CLSID_DirectMusicTemplate,                     0xd30bcc65,0x60e8,0x11d1,0xa7,0xce,0x00,0xa0,0xc9,0x13,0xf7,0x3c);\nDEFINE_GUID(CLSID_DirectMusicScriptAutoImpSegment,         0x4062c116,0x0270,0x11d3,0x8b,0xcb,0x00,0x60,0x08,0x93,0xb1,0xb6);\nDEFINE_GUID(CLSID_AudioVBScript,                           0x4ee17959,0x931e,0x49e4,0xa2,0xc6,0x97,0x7e,0xcf,0x36,0x28,0xf3);\nDEFINE_GUID(CLSID_DirectMusicScriptAutoImpPerformance,     0xa861c6e2,0xfcfc,0x11d2,0x8b,0xc9,0x00,0x60,0x08,0x93,0xb1,0xb6);\nDEFINE_GUID(CLSID_DirectMusicScriptSourceCodeLoader,       0xc70eb77f,0xefd4,0x4678,0xa2,0x7b,0xbf,0x16,0x48,0xf3,0x0d,0x04);\nDEFINE_GUID(CLSID_DirectMusicScriptAutoImpSegmentState,    0xebf2320a,0x2502,0x11d3,0x8b,0xd1,0x00,0x60,0x08,0x93,0xb1,0xb6);\nDEFINE_GUID(CLSID_DirectMusicScriptAutoImpAudioPathConfig, 0x1cebde3e,0x6b91,0x484a,0xaf,0x48,0x5e,0x4f,0x4e,0xd6,0xb1,0xe1);\nDEFINE_GUID(CLSID_DirectMusicScriptAutoImpAudioPath,       0x2c5f9b72,0x7148,0x4d97,0xbf,0xc9,0x68,0xa0,0xe0,0x76,0xbe,0xbd);\nDEFINE_GUID(CLSID_DirectMusicScriptAutoImpSong,            0xa16f1761,0xb6d8,0x42eb,0x8d,0x57,0x4a,0x44,0xfe,0xdd,0x3b,0xd2);\n\n/* IIDs */\nDEFINE_GUID(IID_IDirectMusicAudioPath,                     0xc87631f5,0x23be,0x4986,0x88,0x36,0x05,0x83,0x2f,0xcc,0x48,0xf9);\nDEFINE_GUID(IID_IDirectMusicBand,                          0xd2ac28c0,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(IID_IDirectMusicChordMap,                      0xd2ac28be,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(IID_IDirectMusicComposer,                      0xd2ac28bf,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(IID_IDirectMusicContainer,                     0x9301e386,0x1f22,0x11d3,0x82,0x26,0xd2,0xfa,0x76,0x25,0x5d,0x47);\nDEFINE_GUID(IID_IDirectMusicGetLoader,                     0x68a04844,0xd13d,0x11d1,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);\nDEFINE_GUID(IID_IDirectMusicGraph,                         0x2befc277,0x5497,0x11d2,0xbc,0xcb,0x00,0xa0,0xc9,0x22,0xe6,0xeb);\nDEFINE_GUID(IID_IDirectMusicLoader,                        0x2ffaaca2,0x5dca,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);\nDEFINE_GUID(IID_IDirectMusicLoader8,                       0x19e7c08c,0x0a44,0x4e6a,0xa1,0x16,0x59,0x5a,0x7c,0xd5,0xde,0x8c);\nDEFINE_GUID(IID_IDirectMusicObject,                        0xd2ac28b5,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(IID_IDirectMusicPatternTrack,                  0x51c22e10,0xb49f,0x46fc,0xbe,0xc2,0xe6,0x28,0x8f,0xb9,0xed,0xe6);\nDEFINE_GUID(IID_IDirectMusicPerformance,                   0x07d43d03,0x6523,0x11d2,0x87,0x1d,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(IID_IDirectMusicPerformance2,                  0x6fc2cae0,0xbc78,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);\nDEFINE_GUID(IID_IDirectMusicPerformance8,                  0x679c4137,0xc62e,0x4147,0xb2,0xb4,0x9d,0x56,0x9a,0xcb,0x25,0x4c);\nDEFINE_GUID(IID_IDirectMusicScript,                        0x2252373a,0x5814,0x489b,0x82,0x09,0x31,0xfe,0xde,0xba,0xf1,0x37);\nDEFINE_GUID(IID_IDirectMusicSegment,                       0xf96029a2,0x4282,0x11d2,0x87,0x17,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(IID_IDirectMusicSegment2,                      0xd38894d1,0xc052,0x11d2,0x87,0x2f,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(IID_IDirectMusicSegment8,                      0xc6784488,0x41a3,0x418f,0xaa,0x15,0xb3,0x50,0x93,0xba,0x42,0xd4);\nDEFINE_GUID(IID_IDirectMusicSegmentState,                  0xa3afdcc7,0xd3ee,0x11d1,0xbc,0x8d,0x00,0xa0,0xc9,0x22,0xe6,0xeb);\nDEFINE_GUID(IID_IDirectMusicSegmentState8,                 0xa50e4730,0x0ae4,0x48a7,0x98,0x39,0xbc,0x04,0xbf,0xe0,0x77,0x72);\nDEFINE_GUID(IID_IDirectMusicStyle,                         0xd2ac28bd,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(IID_IDirectMusicStyle8,                        0xfd24ad8a,0xa260,0x453d,0xbf,0x50,0x6f,0x93,0x84,0xf7,0x09,0x85);\n\n/* IIDs of unchanged interfaces */\n#define IID_IDirectMusicAudioPath8    IID_IDirectMusicAudioPath\n#define IID_IDirectMusicBand8         IID_IDirectMusicBand\n#define IID_IDirectMusicChordMap8     IID_IDirectMusicChordMap\n#define IID_IDirectMusicComposer8     IID_IDirectMusicComposer\n#define IID_IDirectMusicContainer8    IID_IDirectMusicContainer\n#define IID_IDirectMusicGetLoader8    IID_IDirectMusicGetLoader\n#define IID_IDirectMusicGraph8        IID_IDirectMusicGraph\n#define IID_IDirectMusicObject8       IID_IDirectMusicObject\n#define IID_IDirectMusicPatternTrack8 IID_IDirectMusicPatternTrack\n#define IID_IDirectMusicScript8       IID_IDirectMusicScript\n\n/* typedef definitions */\ntypedef struct IDirectMusicBand *LPDIRECTMUSICBAND;\ntypedef struct IDirectMusicBand         IDirectMusicBand8,         *LPDIRECTMUSICBAND8;\ntypedef struct IDirectMusicObject *LPDIRECTMUSICOBJECT;\ntypedef struct IDirectMusicObject       IDirectMusicObject8,       *LPDIRECTMUSICOBJECT8;\ntypedef struct IDirectMusicLoader *LPDIRECTMUSICLOADER;\ntypedef struct IDirectMusicLoader8 *LPDIRECTMUSICLOADER8;\ntypedef struct IDirectMusicGetLoader *LPDIRECTMUSICGETLOADER;\ntypedef struct IDirectMusicGetLoader    IDirectMusicGetLoader8,    *LPDIRECTMUSICGETLOADER8;\ntypedef struct IDirectMusicAudioPath *LPDIRECTMUSICAUDIOPATH;\ntypedef struct IDirectMusicAudioPath    IDirectMusicAudioPath8,    *LPDIRECTMUSICAUDIOPATH8;\ntypedef struct IDirectMusicStyle *LPDIRECTMUSICSTYLE;\ntypedef struct IDirectMusicStyle8 *LPDIRECTMUSICSTYLE8;\ntypedef struct IDirectMusicChordMap *LPDIRECTMUSICCHORDMAP;\ntypedef struct IDirectMusicChordMap     IDirectMusicChordMap8,     *LPDIRECTMUSICCHORDMAP8;\ntypedef struct IDirectMusicComposer *LPDIRECTMUSICCOMPOSER;\ntypedef struct IDirectMusicComposer     IDirectMusicComposer8,     *LPDIRECTMUSICCOMPOSER8;\ntypedef struct IDirectMusicPatternTrack *LPDIRECTMUSICPATTERNTRACK;\ntypedef struct IDirectMusicPatternTrack IDirectMusicPatternTrack8, *LPDIRECTMUSICPATTERNTRACK8;\ntypedef struct IDirectMusicScript *LPDIRECTMUSICSCRIPT;\ntypedef struct IDirectMusicScript       IDirectMusicScript8,       *LPDIRECTMUSICSCRIPT8;\ntypedef struct IDirectMusicContainer *LPDIRECTMUSICCONTAINER;\ntypedef struct IDirectMusicContainer    IDirectMusicContainer8,    *LPDIRECTMUSICCONTAINER8;\n\n/* RPC declarations */\ntypedef struct IDirectMusicBand   *LPDMUS_BAND;\ntypedef struct IDirectMusicLoader *LPDMUS_LOADER;\ntypedef struct IDirectMusicObject *LPDMUS_OBJECT;\n\n/* GUIDs - all types loader */\nDEFINE_GUID(GUID_DirectMusicAllTypes,         0xd2ac2893,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\n/* GUIDs - notification */\nDEFINE_GUID(GUID_NOTIFICATION_CHORD,          0xd2ac289b,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(GUID_NOTIFICATION_COMMAND,        0xd2ac289c,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(GUID_NOTIFICATION_MEASUREANDBEAT, 0xd2ac289a,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(GUID_NOTIFICATION_PERFORMANCE,    0x81f75bc5,0x4e5d,0x11d2,0xbc,0xc7,0x00,0xa0,0xc9,0x22,0xe6,0xeb);\nDEFINE_GUID(GUID_NOTIFICATION_RECOMPOSE,      0xd348372b,0x945b,0x45ae,0xa5,0x22,0x45,0x0f,0x12,0x5b,0x84,0xa5);\nDEFINE_GUID(GUID_NOTIFICATION_SEGMENT,        0xd2ac2899,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\n/* GUIDs - param types */\nDEFINE_GUID(GUID_BandParam,                   0x02bb1938,0xcb8b,0x11d2,0x8b,0xb9,0x00,0x60,0x08,0x93,0xb1,0xb6);\nDEFINE_GUID(GUID_ChordParam,                  0xd2ac289e,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(GUID_CommandParam,                0xd2ac289d,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(GUID_CommandParam2,               0x28f97ef7,0x9538,0x11d2,0x97,0xa9,0x00,0xc0,0x4f,0xa3,0x6e,0x58);\nDEFINE_GUID(GUID_CommandParamNext,            0x472afe7a,0x281b,0x11d3,0x81,0x7d,0x00,0xc0,0x4f,0xa3,0x6e,0x58);\nDEFINE_GUID(GUID_IDirectMusicBand,            0xd2ac28ac,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(GUID_IDirectMusicChordMap,        0xd2ac28ad,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(GUID_IDirectMusicStyle,           0xd2ac28a1,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(GUID_MuteParam,                   0xd2ac28af,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(GUID_Play_Marker,                 0xd8761a41,0x801a,0x11d3,0x9b,0xd1,0xda,0xf7,0xe1,0xc3,0xd8,0x34);\nDEFINE_GUID(GUID_RhythmParam,                 0xd2ac289f,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(GUID_TempoParam,                  0xd2ac28a5,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(GUID_TimeSignature,               0xd2ac28a4,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(GUID_Valid_Start_Time,            0x7f6b1760,0x1fdb,0x11d3,0x82,0x26,0x44,0x45,0x53,0x54,0x00,0x00);\n/* GUIDs - param setting */\nDEFINE_GUID(GUID_Clear_All_Bands,             0xd2ac28ab,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(GUID_ConnectToDLSCollection,      0x1db1ae6b,0xe92e,0x11d1,0xa8,0xc5,0x00,0xc0,0x4f,0xa3,0x72,0x6e);\nDEFINE_GUID(GUID_Disable_Auto_Download,       0xd2ac28aa,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(GUID_DisableTempo,                0x45fc707d,0x1db4,0x11d2,0xbc,0xac,0x00,0xa0,0xc9,0x22,0xe6,0xeb);\nDEFINE_GUID(GUID_DisableTimeSig,              0x45fc707b,0x1db4,0x11d2,0xbc,0xac,0x00,0xa0,0xc9,0x22,0xe6,0xeb);\nDEFINE_GUID(GUID_Download,                    0xd2ac28a7,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(GUID_DownloadToAudioPath,         0x9f2c0341,0xc5c4,0x11d3,0x9b,0xd1,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_Enable_Auto_Download,        0xd2ac28a9,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(GUID_EnableTempo,                 0x45fc707e,0x1db4,0x11d2,0xbc,0xac,0x00,0xa0,0xc9,0x22,0xe6,0xeb);\nDEFINE_GUID(GUID_EnableTimeSig,               0x45fc707c,0x1db4,0x11d2,0xbc,0xac,0x00,0xa0,0xc9,0x22,0xe6,0xeb);\n#define GUID_IgnoreBankSelectForGM            GUID_StandardMIDIFile\nDEFINE_GUID(GUID_SeedVariations,              0x65b76fa5,0xff37,0x11d2,0x81,0x4e,0x00,0xc0,0x4f,0xa3,0x6e,0x58);\nDEFINE_GUID(GUID_StandardMIDIFile,            0x06621075,0xe92e,0x11d1,0xa8,0xc5,0x00,0xc0,0x4f,0xa3,0x72,0x6e);\nDEFINE_GUID(GUID_Unload,                      0xd2ac28a8,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(GUID_UnloadFromAudioPath,         0x9f2c0342,0xc5c4,0x11d3,0x9b,0xd1,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_Variations,                  0x11f72cce,0x26e6,0x4ecd,0xaf,0x2e,0xd6,0x68,0xe6,0x67,0x07,0xd8);\n/* GUIDs - global data */\nDEFINE_GUID(GUID_PerfMasterTempo,             0xd2ac28b0,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(GUID_PerfMasterVolume,            0xd2ac28b1,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(GUID_PerfMasterGrooveLevel,       0xd2ac28b2,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);\nDEFINE_GUID(GUID_PerfAutoDownload,            0xfb09565b,0x3631,0x11d2,0xbc,0xb8,0x00,0xa0,0xc9,0x22,0xe6,0xeb);\n/* GUID - default DLS collection */\nDEFINE_GUID(GUID_DefaultGMCollection,         0xf17e8673,0xc3b4,0x11d1,0x87,0x0b,0x00,0x60,0x08,0x93,0xb1,0xbd);\n/* GUID - default synthesizer */\nDEFINE_GUID(GUID_Synth_Default,               0x26bb9432,0x45fe,0x48d3,0xa3,0x75,0x24,0x72,0xc5,0xe3,0xe7,0x86);\n/* GUIDs - define default buffer configuration */\nDEFINE_GUID(GUID_Buffer_Reverb,               0x186cc541,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);\nDEFINE_GUID(GUID_Buffer_EnvReverb,            0x186cc542,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);\nDEFINE_GUID(GUID_Buffer_Stereo,               0x186cc545,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);\nDEFINE_GUID(GUID_Buffer_3D_Dry,               0x186cc546,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);\nDEFINE_GUID(GUID_Buffer_Mono,                 0x186cc547,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);\n\n\n/*****************************************************************************\n * Typedef definitions\n */\ntypedef WORD    TRANSITION_TYPE, *LPTRANSITION_TYPE;\n/*\n * typedef __int64 REFERENCE_TIME,  *LPREFERENCE_TIME;\n * typedef LONG    MUSIC_TIME,      *LPMUSIC_TIME;\n */\n\n\n/*****************************************************************************\n * Flags\n */\n#define DMUS_APATH_SHARED_STEREOPLUSREVERB 0x1\n#define DMUS_APATH_DYNAMIC_3D              0x6\n#define DMUS_APATH_DYNAMIC_MONO            0x7\n#define DMUS_APATH_DYNAMIC_STEREO          0x8\n\n#define DMUS_AUDIOF_3D          0x01\n#define DMUS_AUDIOF_ENVIRON     0x02\n#define DMUS_AUDIOF_EAX         0x04\n#define DMUS_AUDIOF_DMOS        0x08\n#define DMUS_AUDIOF_STREAMING   0x10\n#define DMUS_AUDIOF_BUFFERS     0x20\n#define DMUS_AUDIOF_ALL         0x3F\n\n#define DMUS_AUDIOPARAMS_FEATURES     0x1\n#define DMUS_AUDIOPARAMS_VOICES       0x2\n#define DMUS_AUDIOPARAMS_SAMPLERATE   0x4\n#define DMUS_AUDIOPARAMS_DEFAULTSYNTH 0x8\n\n#define DMUS_CURVET_PBCURVE   0x03\n#define DMUS_CURVET_CCCURVE   0x04\n#define DMUS_CURVET_MATCURVE  0x05\n#define DMUS_CURVET_PATCURVE  0x06\n#define DMUS_CURVET_RPNCURVE  0x07\n#define DMUS_CURVET_NRPNCURVE 0x08\n\n#define DMUS_MASTERTEMPO_MAX 100.0f\n#define DMUS_MASTERTEMPO_MIN 0.01f\n\n#define DMUS_MAX_NAME     0x40\n#define DMUS_MAX_CATEGORY 0x40\n#define DMUS_MAX_FILENAME MAX_PATH\n\n#define DMUS_MAXSUBCHORD 0x8\n\n#define DMUS_NOTIFICATION_SEGSTART       0x0\n#define DMUS_NOTIFICATION_SEGEND         0x1\n#define DMUS_NOTIFICATION_SEGALMOSTEND   0x2\n#define DMUS_NOTIFICATION_SEGLOOP        0x3\n#define DMUS_NOTIFICATION_SEGABORT       0x4\n#define DMUS_NOTIFICATION_MUSICSTARTED   0x0\n#define DMUS_NOTIFICATION_MUSICSTOPPED   0x1\n#define DMUS_NOTIFICATION_MUSICALMOSTEND 0x2\n#define DMUS_NOTIFICATION_MEASUREBEAT    0x0\n#define DMUS_NOTIFICATION_CHORD          0x0\n#define DMUS_NOTIFICATION_GROOVE         0x0\n#define DMUS_NOTIFICATION_EMBELLISHMENT  0x1\n#define DMUS_NOTIFICATION_RECOMPOSE      0x0\n\n#define DMUS_OBJ_OBJECT   0x001\n#define DMUS_OBJ_CLASS    0x002\n#define DMUS_OBJ_NAME     0x004\n#define DMUS_OBJ_CATEGORY 0x008\n#define DMUS_OBJ_FILENAME 0x010\n#define DMUS_OBJ_FULLPATH 0x020\n#define DMUS_OBJ_URL      0x040\n#define DMUS_OBJ_VERSION  0x080\n#define DMUS_OBJ_DATE     0x100\n#define DMUS_OBJ_LOADED   0x200\n#define DMUS_OBJ_MEMORY   0x400\n#define DMUS_OBJ_STREAM   0x800\n\n#define DMUS_PATH_SEGMENT           0x1000\n#define DMUS_PATH_SEGMENT_TRACK     0x1100\n#define DMUS_PATH_SEGMENT_GRAPH     0x1200\n#define DMUS_PATH_SEGMENT_TOOL      0x1300\n#define DMUS_PATH_AUDIOPATH         0x2000\n#define DMUS_PATH_AUDIOPATH_GRAPH   0x2200\n#define DMUS_PATH_AUDIOPATH_TOOL    0x2300\n#define DMUS_PATH_PERFORMANCE       0x3000\n#define DMUS_PATH_PERFORMANCE_GRAPH 0x3200\n#define DMUS_PATH_PERFORMANCE_TOOL  0x3300\n#define DMUS_PATH_PORT              0x4000\n#define DMUS_PATH_BUFFER            0x6000\n#define DMUS_PATH_BUFFER_DMO        0x6100\n#define DMUS_PATH_MIXIN_BUFFER      0x7000\n#define DMUS_PATH_MIXIN_BUFFER_DMO  0x7100\n#define DMUS_PATH_PRIMARY_BUFFER    0x8000\n\n#define DMUS_PCHANNEL_BROADCAST_PERFORMANCE\t0xFFFFFFFF\n#define DMUS_PCHANNEL_BROADCAST_AUDIOPATH   0xFFFFFFFE\n#define DMUS_PCHANNEL_BROADCAST_SEGMENT\t    0xFFFFFFFD\n#define DMUS_PCHANNEL_BROADCAST_GROUPS  \t0xFFFFFFFC\n#define DMUS_PCHANNEL_ALL                   0xFFFFFFFB \n\n#define DMUS_PLAYMODE_FIXED             0x0  \n#define DMUS_PLAYMODE_FIXEDTOKEY        DMUS_PLAYMODE_KEY_ROOT\n#define DMUS_PLAYMODE_FIXEDTOCHORD      DMUS_PLAYMODE_CHORD_ROOT\n#define DMUS_PLAYMODE_PEDALPOINT        (DMUS_PLAYMODE_KEY_ROOT | DMUS_PLAYMODE_SCALE_INTERVALS)\n#define DMUS_PLAYMODE_MELODIC           (DMUS_PLAYMODE_CHORD_ROOT | DMUS_PLAYMODE_SCALE_INTERVALS)\n#define DMUS_PLAYMODE_NORMALCHORD       (DMUS_PLAYMODE_CHORD_ROOT | DMUS_PLAYMODE_CHORD_INTERVALS)\n#define DMUS_PLAYMODE_ALWAYSPLAY        (DMUS_PLAYMODE_MELODIC | DMUS_PLAYMODE_NORMALCHORD)\n#define DMUS_PLAYMODE_PEDALPOINTCHORD   (DMUS_PLAYMODE_KEY_ROOT | DMUS_PLAYMODE_CHORD_INTERVALS)\n#define DMUS_PLAYMODE_PEDALPOINTALWAYS  (DMUS_PLAYMODE_PEDALPOINT | DMUS_PLAYMODE_PEDALPOINTCHORD)\n#define DMUS_PLAYMODE_PURPLEIZED        DMUS_PLAYMODE_ALWAYSPLAY\n#define DMUS_PLAYMODE_SCALE_ROOT        DMUS_PLAYMODE_KEY_ROOT\n#define DMUS_PLAYMODE_FIXEDTOSCALE      DMUS_PLAYMODE_FIXEDTOKEY\n\n#define DMUS_PPQ 768\n\n#define DMUS_SEG_REPEAT_INFINITE 0xFFFFFFFF\n#define DMUS_SEG_ALLTRACKS       0x80000000\n#define DMUS_SEG_ANYTRACK        0x80000000\n\n#define DMUS_TEMPO_MAX 1000\n#define DMUS_TEMPO_MIN 1\n\n#define DMUS_TRACKCONFIG_OVERRIDE_ALL          0x00001\n#define DMUS_TRACKCONFIG_OVERRIDE_PRIMARY      0x00002\n#define DMUS_TRACKCONFIG_FALLBACK              0x00004\n#define DMUS_TRACKCONFIG_CONTROL_ENABLED       0x00008\n#define DMUS_TRACKCONFIG_PLAY_ENABLED          0x00010\n#define DMUS_TRACKCONFIG_NOTIFICATION_ENABLED  0x00020\n#define DMUS_TRACKCONFIG_PLAY_CLOCKTIME        0x00040\n#define DMUS_TRACKCONFIG_PLAY_COMPOSE \t       0x00080\n#define DMUS_TRACKCONFIG_LOOP_COMPOSE          0x00100\n#define DMUS_TRACKCONFIG_COMPOSING             0x00200\n#define DMUS_TRACKCONFIG_TRANS1_FROMSEGSTART   0x00400\n#define DMUS_TRACKCONFIG_TRANS1_FROMSEGCURRENT 0x00800\n#define DMUS_TRACKCONFIG_TRANS1_TOSEGSTART     0x01000\n#define DMUS_TRACKCONFIG_CONTROL_PLAY          0x10000\n#define DMUS_TRACKCONFIG_CONTROL_NOTIFICATION  0x20000\n#define DMUS_TRACKCONFIG_DEFAULT               (DMUS_TRACKCONFIG_CONTROL_ENABLED | DMUS_TRACKCONFIG_PLAY_ENABLED | DMUS_TRACKCONFIG_NOTIFICATION_ENABLED)\n\n#define DMUS_WAVEF_OFF          0x01\n#define DMUS_WAVEF_STREAMING    0x02\n#define DMUS_WAVEF_NOINVALIDATE 0x04\n#define DMUS_WAVEF_NOPREROLL    0x08\n#define DMUS_WAVEF_IGNORELOOPS  0x20\n\n#define DMUSB_LOADED  0x1\n#define DMUSB_DEFAULT 0x2\n\n#define MT_MIN 0x80000000\n#define MT_MAX 0x7FFFFFFF\n\n\n/*****************************************************************************\n * Definitions\n */\n#define DMUS_PMSG_PART \\\n\tDWORD              dwSize; \\\n\tREFERENCE_TIME     rtTime; \\\n\tMUSIC_TIME         mtTime; \\\n\tDWORD              dwFlags; \\\n\tDWORD              dwPChannel; \\\n\tDWORD              dwVirtualTrackID; \\\n\tIDirectMusicTool*  pTool; \\\n\tstruct IDirectMusicGraph* pGraph; \\\n\tDWORD              dwType; \\\n\tDWORD              dwVoiceID; \\\n\tDWORD              dwGroupID; \\\n\tIUnknown*          punkUser;\n\n\n/*****************************************************************************\n * Enumerations\n */\n/* typedef definitions */\ntypedef enum enumDMUS_STYLET_TYPES       DMUS_STYLET_TYPES;\ntypedef enum enumDMUS_COMMANDT_TYPES     DMUS_COMMANDT_TYPES;\ntypedef enum enumDMUS_SHAPET_TYPES       DMUS_SHAPET_TYPES;\ntypedef enum enumDMUS_COMPOSEF_FLAGS     DMUS_COMPOSEF_FLAGS;\ntypedef enum enumDMUS_PMSGF_FLAGS        DMUS_PMSGF_FLAGS;\ntypedef enum enumDMUS_PMSGT_TYPES        DMUS_PMSGT_TYPES;\ntypedef enum enumDMUS_SEGF_FLAGS         DMUS_SEGF_FLAGS;\ntypedef enum enumDMUS_TIME_RESOLVE_FLAGS DMUS_TIME_RESOLVE_FLAGS;\ntypedef enum enumDMUS_CHORDKEYF_FLAGS    DMUS_CHORDKEYF_FLAGS;\ntypedef enum enumDMUS_NOTEF_FLAGS        DMUS_NOTEF_FLAGS;\ntypedef enum enumDMUS_PLAYMODE_FLAGS     DMUS_PLAYMODE_FLAGS;\ntypedef enum enumDMUS_CURVE_FLAGS        DMUS_CURVE_FLAGS;\n\n\n\n/* actual enumerations */\nenum enumDMUS_STYLET_TYPES {\n\tDMUS_STYLET_PATTERN = 0x0,\n\tDMUS_STYLET_MOTIF   = 0x1,\n};\n\nenum enumDMUS_COMMANDT_TYPES {\n\tDMUS_COMMANDT_GROOVE      = 0x0,\n\tDMUS_COMMANDT_FILL        = 0x1,\n\tDMUS_COMMANDT_INTRO       = 0x2,\n\tDMUS_COMMANDT_BREAK       = 0x3,\n\tDMUS_COMMANDT_END         = 0x4,\n\tDMUS_COMMANDT_ENDANDINTRO = 0x5\n};\n\nenum enumDMUS_SHAPET_TYPES {\n\tDMUS_SHAPET_FALLING  = 0x0,\n\tDMUS_SHAPET_LEVEL    = 0x1,\n\tDMUS_SHAPET_LOOPABLE = 0x2,\n\tDMUS_SHAPET_LOUD     = 0x3,\n\tDMUS_SHAPET_QUIET    = 0x4,\n\tDMUS_SHAPET_PEAKING  = 0x5,\n\tDMUS_SHAPET_RANDOM   = 0x6,\n\tDMUS_SHAPET_RISING   = 0x7,\n\tDMUS_SHAPET_SONG     = 0x8\n};\n\nenum enumDMUS_COMPOSEF_FLAGS {       \n\tDMUS_COMPOSEF_NONE                = 0x000000,\n\tDMUS_COMPOSEF_ALIGN               = 0x000001,\n\tDMUS_COMPOSEF_OVERLAP             = 0x000002,\n\tDMUS_COMPOSEF_IMMEDIATE           = 0x000004,\n\tDMUS_COMPOSEF_GRID                = 0x000008,\n\tDMUS_COMPOSEF_BEAT                = 0x000010,\n\tDMUS_COMPOSEF_MEASURE             = 0x000020,\n\tDMUS_COMPOSEF_AFTERPREPARETIME    = 0x000040,\n\tDMUS_COMPOSEF_VALID_START_BEAT    = 0x000080,\n\tDMUS_COMPOSEF_VALID_START_GRID    = 0x000100,\n\tDMUS_COMPOSEF_VALID_START_TICK    = 0x000200,\n\tDMUS_COMPOSEF_SEGMENTEND          = 0x000400,\n\tDMUS_COMPOSEF_MARKER              = 0x000800,\n\tDMUS_COMPOSEF_MODULATE            = 0x001000,\n\tDMUS_COMPOSEF_LONG                = 0x002000,\n\tDMUS_COMPOSEF_ENTIRE_TRANSITION   = 0x004000,\n\tDMUS_COMPOSEF_1BAR_TRANSITION     = 0x008000,\n\tDMUS_COMPOSEF_ENTIRE_ADDITION     = 0x010000,\n\tDMUS_COMPOSEF_1BAR_ADDITION       = 0x020000,\n\tDMUS_COMPOSEF_VALID_START_MEASURE = 0x040000,\n\tDMUS_COMPOSEF_DEFAULT             = 0x080000,\n\tDMUS_COMPOSEF_NOINVALIDATE        = 0x100000,\n\tDMUS_COMPOSEF_USE_AUDIOPATH       = 0x200000,\n\tDMUS_COMPOSEF_INVALIDATE_PRI      = 0x400000\n};\n\nenum enumDMUS_PMSGF_FLAGS {\n\tDMUS_PMSGF_REFTIME        = 1,\n\tDMUS_PMSGF_MUSICTIME      = 2,\n\tDMUS_PMSGF_TOOL_IMMEDIATE = 4,\n\tDMUS_PMSGF_TOOL_QUEUE     = 8,\n\tDMUS_PMSGF_TOOL_ATTIME    = 0x10,\n\tDMUS_PMSGF_TOOL_FLUSH     = 0x20,\n\tDMUS_PMSGF_LOCKTOREFTIME  = 0x40,\n\tDMUS_PMSGF_DX8            = 0x80\n};\n\nenum enumDMUS_PMSGT_TYPES {\n\tDMUS_PMSGT_MIDI             = 0x00,\n\tDMUS_PMSGT_NOTE             = 0x01,\n\tDMUS_PMSGT_SYSEX            = 0x02,\n\tDMUS_PMSGT_NOTIFICATION     = 0x03,\n\tDMUS_PMSGT_TEMPO            = 0x04,\n\tDMUS_PMSGT_CURVE            = 0x05,\n\tDMUS_PMSGT_TIMESIG          = 0x06,\n\tDMUS_PMSGT_PATCH            = 0x07,\n\tDMUS_PMSGT_TRANSPOSE        = 0x08,\n\tDMUS_PMSGT_CHANNEL_PRIORITY = 0x09,\n\tDMUS_PMSGT_STOP             = 0x0A,\n\tDMUS_PMSGT_DIRTY            = 0x0B,\n\tDMUS_PMSGT_WAVE             = 0x0C,\n\tDMUS_PMSGT_LYRIC            = 0x0D,\n\tDMUS_PMSGT_SCRIPTLYRIC      = 0x0E,\n\tDMUS_PMSGT_USER             = 0xFF\n};\n\nenum enumDMUS_SEGF_FLAGS {\n\tDMUS_SEGF_REFTIME             = 0x000040,   \n\tDMUS_SEGF_SECONDARY           = 0x000080,\n\tDMUS_SEGF_QUEUE               = 0x000100,\n\tDMUS_SEGF_CONTROL             = 0x000200,\n\tDMUS_SEGF_AFTERPREPARETIME    = 0x000400,\n\tDMUS_SEGF_GRID                = 0x000800,\n\tDMUS_SEGF_BEAT                = 0x001000,\n\tDMUS_SEGF_MEASURE             = 0x002000,\n\tDMUS_SEGF_DEFAULT             = 0x004000,\n\tDMUS_SEGF_NOINVALIDATE        = 0x008000,\n\tDMUS_SEGF_ALIGN               = 0x0010000,\n\tDMUS_SEGF_VALID_START_BEAT    = 0x0020000,\n\tDMUS_SEGF_VALID_START_GRID    = 0x0040000,\n\tDMUS_SEGF_VALID_START_TICK    = 0x0080000,\n\tDMUS_SEGF_AUTOTRANSITION      = 0x0100000,\n\tDMUS_SEGF_AFTERQUEUETIME      = 0x0200000,\n\tDMUS_SEGF_AFTERLATENCYTIME    = 0x0400000,\n\tDMUS_SEGF_SEGMENTEND          = 0x0800000,\n\tDMUS_SEGF_MARKER              = 0x01000000,\n\tDMUS_SEGF_TIMESIG_ALWAYS      = 0x02000000,\n\tDMUS_SEGF_USE_AUDIOPATH       = 0x04000000,\n\tDMUS_SEGF_VALID_START_MEASURE = 0x08000000,\n\tDMUS_SEGF_INVALIDATE_PRI      = 0x10000000\n};\n\nenum enumDMUS_TIME_RESOLVE_FLAGS {\n\tDMUS_TIME_RESOLVE_AFTERPREPARETIME = DMUS_SEGF_AFTERPREPARETIME,\n\tDMUS_TIME_RESOLVE_AFTERQUEUETIME   = DMUS_SEGF_AFTERQUEUETIME,\n\tDMUS_TIME_RESOLVE_AFTERLATENCYTIME = DMUS_SEGF_AFTERLATENCYTIME,\n\tDMUS_TIME_RESOLVE_GRID             = DMUS_SEGF_GRID,\n\tDMUS_TIME_RESOLVE_BEAT             = DMUS_SEGF_BEAT,\n\tDMUS_TIME_RESOLVE_MEASURE          = DMUS_SEGF_MEASURE,\n\tDMUS_TIME_RESOLVE_MARKER           = DMUS_SEGF_MARKER,\n\tDMUS_TIME_RESOLVE_SEGMENTEND       = DMUS_SEGF_SEGMENTEND,\n};\n\nenum enumDMUS_CHORDKEYF_FLAGS {\n\tDMUS_CHORDKEYF_SILENT = 0x1,\n};\n\nenum enumDMUS_NOTEF_FLAGS {\n\tDMUS_NOTEF_NOTEON               = 0x01,\n\t/* DX8 */\n\tDMUS_NOTEF_NOINVALIDATE         = 0x02,\n\tDMUS_NOTEF_NOINVALIDATE_INSCALE = 0x04,\n\tDMUS_NOTEF_NOINVALIDATE_INCHORD = 0x08,\n\tDMUS_NOTEF_REGENERATE           = 0x10,\n};\n\nenum enumDMUS_PLAYMODE_FLAGS {\n\tDMUS_PLAYMODE_KEY_ROOT        = 0x01,\n\tDMUS_PLAYMODE_CHORD_ROOT      = 0x02,\n\tDMUS_PLAYMODE_SCALE_INTERVALS = 0x04,\n\tDMUS_PLAYMODE_CHORD_INTERVALS = 0x08,\n\tDMUS_PLAYMODE_NONE            = 0x10,\n};\n\nenum enumDMUS_CURVE_FLAGS {\n\tDMUS_CURVE_RESET              = 0x1,\n\tDMUS_CURVE_START_FROM_CURRENT = 0x2\n};\n\nenum { \n\tDMUS_CURVES_LINEAR  = 0x0,\n\tDMUS_CURVES_INSTANT = 0x1,\n\tDMUS_CURVES_EXP     = 0x2,\n\tDMUS_CURVES_LOG     = 0x3,\n\tDMUS_CURVES_SINE    = 0x4\n};\n\n\n/*****************************************************************************\n * Structures\n */\n/* typedef definitions */\n/*typedef struct _DMUS_PMSG                  DMUS_PMSG,                  *LPDMUS_PMSG; */\ntypedef struct _DMUS_AUDIOPARAMS           DMUS_AUDIOPARAMS,           *LPDMUS_AUDIOPARAMS;\ntypedef struct _DMUS_SUBCHORD              DMUS_SUBCHORD,              *LPDMUS_SUBCHORD;\ntypedef struct _DMUS_CHORD_KEY             DMUS_CHORD_KEY,             *LPDMUS_CHORD_KEY;\ntypedef struct _DMUS_NOTE_PMSG             DMUS_NOTE_PMSG,             *LPDMUS_NOTE_PMSG;\ntypedef struct _DMUS_MIDI_PMSG             DMUS_MIDI_PMSG,             *LPDMUS_MIDI_PMSG;\ntypedef struct _DMUS_PATCH_PMSG            DMUS_PATCH_PMSG,            *LPDMUS_PATCH_PMSG;\ntypedef struct _DMUS_TRANSPOSE_PMSG        DMUS_TRANSPOSE_PMSG,        *LPDMUS_TRANSPOSE_PMSG;\ntypedef struct _DMUS_CHANNEL_PRIORITY_PMSG DMUS_CHANNEL_PRIORITY_PMSG, *LPDMUS_CHANNEL_PRIORITY_PMSG;\ntypedef struct _DMUS_TEMPO_PMSG            DMUS_TEMPO_PMSG,            *LPDMUS_TEMPO_PMSG;\ntypedef struct _DMUS_SYSEX_PMSG            DMUS_SYSEX_PMSG,            *LPDMUS_SYSEX_PMSG;\ntypedef struct _DMUS_CURVE_PMSG            DMUS_CURVE_PMSG,            *LPDMUS_CURVE_PMSG;\ntypedef struct _DMUS_TIMESIG_PMSG          DMUS_TIMESIG_PMSG,          *LPDMUS_TIMESIG_PMSG;\ntypedef struct _DMUS_NOTIFICATION_PMSG     DMUS_NOTIFICATION_PMSG,     *LPDMUS_NOTIFICATION_PMSG;\ntypedef struct _DMUS_WAVE_PMSG             DMUS_WAVE_PMSG,             *LPDMUS_WAVE_PMSG;\ntypedef struct _DMUS_LYRIC_PMSG            DMUS_LYRIC_PMSG,            *LPDMUS_LYRIC_PMSG;\ntypedef struct _DMUS_VERSION               DMUS_VERSION,               *LPDMUS_VERSION;\ntypedef struct _DMUS_TIMESIGNATURE         DMUS_TIMESIGNATURE,         *LPDMUS_TIMESIGNATURE;\ntypedef struct _DMUS_VALID_START_PARAM     DMUS_VALID_START_PARAM,     *LPDMUS_VALID_START_PARAM;\ntypedef struct _DMUS_PLAY_MARKER_PARAM     DMUS_PLAY_MARKER_PARAM,     *LPDMUS_PLAY_MARKER_PARAM;\ntypedef struct _DMUS_OBJECTDESC            DMUS_OBJECTDESC,            *LPDMUS_OBJECTDESC;\ntypedef struct _DMUS_SCRIPT_ERRORINFO      DMUS_SCRIPT_ERRORINFO,      *LPDMUS_SCRIPT_ERRORINFO;\ntypedef struct _DMUS_COMMAND_PARAM         DMUS_COMMAND_PARAM,         *LPDMUS_COMMAND_PARAM;\ntypedef struct _DMUS_COMMAND_PARAM_2       DMUS_COMMAND_PARAM_2,       *LPDMUS_COMMAND_PARAM_2;\ntypedef struct _DMUS_BAND_PARAM            DMUS_BAND_PARAM,            *LPDMUS_BAND_PARAM;\ntypedef struct _DMUS_VARIATIONS_PARAM      DMUS_VARIATIONS_PARAM,      *LPDMUS_VARIATIONS_PARAM;\n\n/* actual structures */\nstruct _DMUS_PMSG {\n    DMUS_PMSG_PART\n};\n\nstruct _DMUS_AUDIOPARAMS {\n\tDWORD dwSize;\n\tBOOL  fInitNow;\n\tDWORD dwValidData;\n\tDWORD dwFeatures;\n\tDWORD dwVoices;\n\tDWORD dwSampleRate;\n\tCLSID clsidDefaultSynth;\n};\n\nstruct _DMUS_SUBCHORD {\n\tDWORD dwChordPattern;\n\tDWORD dwScalePattern;\n\tDWORD dwInversionPoints;\n\tDWORD dwLevels;\n\tBYTE  bChordRoot;\n\tBYTE  bScaleRoot;\n};\n\nstruct _DMUS_CHORD_KEY {\n\tWCHAR         wszName[16];\n\tWORD          wMeasure;\n\tBYTE          bBeat;\n\tBYTE          bSubChordCount;\n\tDMUS_SUBCHORD SubChordList[DMUS_MAXSUBCHORD];\n\tDWORD         dwScale;\n\tBYTE          bKey;\n\tBYTE          bFlags;\n};\n\nstruct _DMUS_NOTE_PMSG {\n\tDMUS_PMSG_PART\n\tMUSIC_TIME mtDuration;\n\tWORD       wMusicValue;\n\tWORD       wMeasure;\n\tshort      nOffset;\n\tBYTE       bBeat;\n\tBYTE       bGrid;\n\tBYTE       bVelocity;\n\tBYTE       bFlags;\n\tBYTE       bTimeRange;\n\tBYTE       bDurRange;\n\tBYTE       bVelRange;\n\tBYTE       bPlayModeFlags;\n\tBYTE       bSubChordLevel;\n\tBYTE       bMidiValue;\n\tchar       cTranspose;\n};\n\nstruct _DMUS_MIDI_PMSG {\n\tDMUS_PMSG_PART\n\tBYTE bStatus;\n\tBYTE bByte1;\n\tBYTE bByte2;\n\tBYTE bPad[1];\n};\n\nstruct _DMUS_PATCH_PMSG {\n\tDMUS_PMSG_PART\n\tBYTE byInstrument;\n\tBYTE byMSB;\n\tBYTE byLSB;\n\tBYTE byPad[1];\n};\n\nstruct _DMUS_TRANSPOSE_PMSG {\n\tDMUS_PMSG_PART\n\tshort nTranspose;\n\t/* DX8 */\n\tWORD  wMergeIndex;\n};\n\nstruct _DMUS_CHANNEL_PRIORITY_PMSG {\n\tDMUS_PMSG_PART\n\tDWORD dwChannelPriority;\n};\n\nstruct _DMUS_TEMPO_PMSG {\n\tDMUS_PMSG_PART\n\tdouble  dblTempo;\n};\n\nstruct _DMUS_SYSEX_PMSG {\n\tDMUS_PMSG_PART\n\tDWORD dwLen;\n\tBYTE  abData[1];\n};\n\nstruct _DMUS_CURVE_PMSG {\n\tDMUS_PMSG_PART\n\tMUSIC_TIME mtDuration;\n\tMUSIC_TIME mtOriginalStart;\n\tMUSIC_TIME mtResetDuration;\n\tshort      nStartValue;\n\tshort      nEndValue;\n\tshort      nResetValue;\n\tWORD       wMeasure;\n\tshort      nOffset;\n\tBYTE       bBeat;\n\tBYTE       bGrid;\n\tBYTE       bType;\n\tBYTE       bCurveShape;\n\tBYTE       bCCData;\n\tBYTE       bFlags;\n\t/* DX8 */\n\tWORD       wParamType;\n\tWORD       wMergeIndex;\n};\n\nstruct _DMUS_TIMESIG_PMSG {\n\tDMUS_PMSG_PART\n\tBYTE bBeatsPerMeasure;\n\tBYTE bBeat;\n\tWORD wGridsPerBeat;\n};\n\nstruct _DMUS_NOTIFICATION_PMSG {\n\tDMUS_PMSG_PART\n\tGUID  guidNotificationType;\n\tDWORD dwNotificationOption;\n\tDWORD dwField1;\n\tDWORD dwField2;\n};\n\nstruct _DMUS_WAVE_PMSG {\n\tDMUS_PMSG_PART    \n\tREFERENCE_TIME rtStartOffset;\n\tREFERENCE_TIME rtDuration;\n\tLONG           lOffset;\n\tLONG           lVolume;\n\tLONG           lPitch;\n\tBYTE           bFlags;\n};\n\nstruct _DMUS_LYRIC_PMSG {\n\tDMUS_PMSG_PART    \n\tWCHAR wszString[1];\n};\n\nstruct _DMUS_VERSION {\n\tDWORD dwVersionMS;\n\tDWORD dwVersionLS;\n};\n\nstruct _DMUS_TIMESIGNATURE {\n\tMUSIC_TIME mtTime;\n\tBYTE       bBeatsPerMeasure;\n\tBYTE       bBeat;\n\tWORD       wGridsPerBeat;\n};\n\nstruct _DMUS_VALID_START_PARAM {\n\tMUSIC_TIME mtTime;\n};\n\nstruct _DMUS_PLAY_MARKER_PARAM {\n\tMUSIC_TIME mtTime;\n};\n\nstruct _DMUS_OBJECTDESC {\n\tDWORD        dwSize;\n\tDWORD        dwValidData;\n\tGUID         guidObject;\n\tGUID         guidClass;\n\tFILETIME     ftDate;\n\tDMUS_VERSION vVersion;\n\tWCHAR        wszName[DMUS_MAX_NAME];\n\tWCHAR        wszCategory[DMUS_MAX_CATEGORY];\n\tWCHAR        wszFileName[DMUS_MAX_FILENAME];\n\tLONGLONG     llMemLength;\n\tLPBYTE       pbMemData;\n\tIStream*     pStream;\n};\n\nstruct _DMUS_SCRIPT_ERRORINFO {\n\tDWORD   dwSize;\n\tHRESULT hr;\n\tULONG   ulLineNumber;\n\tLONG    ichCharPosition;\n\tWCHAR   wszSourceFile[DMUS_MAX_FILENAME];\n\tWCHAR   wszSourceComponent[DMUS_MAX_FILENAME];\n\tWCHAR   wszDescription[DMUS_MAX_FILENAME];\n\tWCHAR   wszSourceLineText[DMUS_MAX_FILENAME];\n};\n\nstruct _DMUS_COMMAND_PARAM {\n\tBYTE bCommand;\n\tBYTE bGrooveLevel;\n\tBYTE bGrooveRange;\n\tBYTE bRepeatMode;\n};\n\nstruct _DMUS_COMMAND_PARAM_2 {\n\tMUSIC_TIME mtTime;\n\tBYTE       bCommand;\n\tBYTE       bGrooveLevel;\n\tBYTE       bGrooveRange;\n\tBYTE       bRepeatMode;\n};\n\nstruct _DMUS_BAND_PARAM {\n\tMUSIC_TIME       mtTimePhysical;\n\tstruct IDirectMusicBand *pBand;\n};\n\nstruct _DMUS_VARIATIONS_PARAM {\n\tDWORD  dwPChannelsUsed;\n\tDWORD* padwPChannels;\n\tDWORD* padwVariations;\n};\n\n\n/*****************************************************************************\n * IDirectMusicBand interface\n */\n#define INTERFACE IDirectMusicBand\nDECLARE_INTERFACE_(IDirectMusicBand,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicBand methods ***/\n    STDMETHOD(CreateSegment)(THIS_ struct IDirectMusicSegment **ppSegment) PURE;\n    STDMETHOD(Download)(THIS_ struct IDirectMusicPerformance *pPerformance) PURE;\n    STDMETHOD(Unload)(THIS_ struct IDirectMusicPerformance *pPerformance) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicBand_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicBand_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectMusicBand_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectMusicBand methods ***/\n#define IDirectMusicBand_CreateSegment(p,a)    (p)->lpVtbl->CreateSegment(p,a)\n#define IDirectMusicBand_Download(p,a)         (p)->lpVtbl->Download(p,a)\n#define IDirectMusicBand_Unload(p,a)           (p)->lpVtbl->Unload(p,a)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicObject interface\n */\n#define INTERFACE IDirectMusicObject\nDECLARE_INTERFACE_(IDirectMusicObject,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicObject methods ***/\n    STDMETHOD(GetDescriptor)(THIS_ LPDMUS_OBJECTDESC pDesc) PURE;\n    STDMETHOD(SetDescriptor)(THIS_ LPDMUS_OBJECTDESC pDesc) PURE;\n    STDMETHOD(ParseDescriptor)(THIS_ LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicObject_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicObject_AddRef(p)              (p)->lpVtbl->AddRef(p)\n#define IDirectMusicObject_Release(p)             (p)->lpVtbl->Release(p)\n/*** IDirectMusicObject methods ***/\n#define IDirectMusicObject_GetDescriptor(p,a)     (p)->lpVtbl->GetDescriptor(p,a)\n#define IDirectMusicObject_SetDescriptor(p,a)     (p)->lpVtbl->SetDescriptor(p,a)\n#define IDirectMusicObject_ParseDescriptor(p,a,b) (p)->lpVtbl->ParseDescriptor(p,a,b)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicLoader interface\n */\n#define INTERFACE IDirectMusicLoader\nDECLARE_INTERFACE_(IDirectMusicLoader,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicLoader methods ***/\n    STDMETHOD(GetObject)(THIS_ LPDMUS_OBJECTDESC pDesc, REFIID riid, LPVOID *ppv) PURE;\n    STDMETHOD(SetObject)(THIS_ LPDMUS_OBJECTDESC pDesc) PURE;\n    STDMETHOD(SetSearchDirectory)(THIS_ REFGUID rguidClass, WCHAR *pwzPath, BOOL fClear) PURE;\n    STDMETHOD(ScanDirectory)(THIS_ REFGUID rguidClass, WCHAR *pwzFileExtension, WCHAR *pwzScanFileName) PURE;\n    STDMETHOD(CacheObject)(THIS_ IDirectMusicObject *pObject) PURE;\n    STDMETHOD(ReleaseObject)(THIS_ IDirectMusicObject *pObject) PURE;\n    STDMETHOD(ClearCache)(THIS_ REFGUID rguidClass) PURE;\n    STDMETHOD(EnableCache)(THIS_ REFGUID rguidClass, BOOL fEnable) PURE;\n    STDMETHOD(EnumObject)(THIS_ REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicLoader_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicLoader_AddRef(p)                   (p)->lpVtbl->AddRef(p)\n#define IDirectMusicLoader_Release(p)                  (p)->lpVtbl->Release(p)\n/*** IDirectMusicLoader methods ***/\n#define IDirectMusicLoader_GetObject(p,a,b,c)          (p)->lpVtbl->GetObject(p,a,b,c)\n#define IDirectMusicLoader_SetObject(p,a)              (p)->lpVtbl->SetObject(p,a)\n#define IDirectMusicLoader_SetSearchDirectory(p,a,b,c) (p)->lpVtbl->SetSearchDirectory(p,a,b,c)\n#define IDirectMusicLoader_ScanDirectory(p,a,b,c)      (p)->lpVtbl->ScanDirectory(p,a,b,c)\n#define IDirectMusicLoader_CacheObject(p,a)            (p)->lpVtbl->CacheObject(p,a)\n#define IDirectMusicLoader_ReleaseObject(p,a)          (p)->lpVtbl->ReleaseObject(p,a)\n#define IDirectMusicLoader_ClearCache(p,a)             (p)->lpVtbl->ClearCache(p,a)\n#define IDirectMusicLoader_EnableCache(p,a,b)          (p)->lpVtbl->EnableCache(p,a,b)\n#define IDirectMusicLoader_EnumObject(p,a,b,c)         (p)->lpVtbl->EnumObject(p,a,b,c)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicLoader8 interface\n */\n#define INTERFACE IDirectMusicLoader8\nDECLARE_INTERFACE_(IDirectMusicLoader8,IDirectMusicLoader)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicLoader methods ***/\n    STDMETHOD(GetObject)(THIS_ LPDMUS_OBJECTDESC pDesc, REFIID riid, LPVOID *ppv) PURE;\n    STDMETHOD(SetObject)(THIS_ LPDMUS_OBJECTDESC pDesc) PURE;\n    STDMETHOD(SetSearchDirectory)(THIS_ REFGUID rguidClass, WCHAR *pwzPath, BOOL fClear) PURE;\n    STDMETHOD(ScanDirectory)(THIS_ REFGUID rguidClass, WCHAR *pwzFileExtension, WCHAR *pwzScanFileName) PURE;\n    STDMETHOD(CacheObject)(THIS_ IDirectMusicObject *pObject) PURE;\n    STDMETHOD(ReleaseObject)(THIS_ IDirectMusicObject *pObject) PURE;\n    STDMETHOD(ClearCache)(THIS_ REFGUID rguidClass) PURE;\n    STDMETHOD(EnableCache)(THIS_ REFGUID rguidClass, BOOL fEnable) PURE;\n    STDMETHOD(EnumObject)(THIS_ REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc) PURE;\n    /*** IDirectMusicLoader8 methods ***/\n    STDMETHOD_(void,CollectGarbage)(THIS) PURE;\n    STDMETHOD(ReleaseObjectByUnknown)(THIS_ IUnknown *pObject) PURE;\n    STDMETHOD(LoadObjectFromFile)(THIS_ REFGUID rguidClassID, REFIID iidInterfaceID, WCHAR *pwzFilePath, void **ppObject) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicLoader8_QueryInterface(p,a,b)         (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicLoader8_AddRef(p)                     (p)->lpVtbl->AddRef(p)\n#define IDirectMusicLoader8_Release(p)                    (p)->lpVtbl->Release(p)\n/*** IDirectMusicLoader methods ***/\n#define IDirectMusicLoader8_GetObject(p,a,b,c)            (p)->lpVtbl->GetObject(p,a,b,c)\n#define IDirectMusicLoader8_SetObject(p,a)                (p)->lpVtbl->SetObject(p,a)\n#define IDirectMusicLoader8_SetSearchDirectory(p,a,b,c)   (p)->lpVtbl->SetSearchDirectory(p,a,b,c)\n#define IDirectMusicLoader8_ScanDirectory(p,a,b,c)        (p)->lpVtbl->ScanDirectory(p,a,b,c)\n#define IDirectMusicLoader8_CacheObject(p,a)              (p)->lpVtbl->CacheObject(p,a)\n#define IDirectMusicLoader8_ReleaseObject(p,a)            (p)->lpVtbl->ReleaseObject(p,a)\n#define IDirectMusicLoader8_ClearCache(p,a)               (p)->lpVtbl->ClearCache(p,a)\n#define IDirectMusicLoader8_EnableCache(p,a,b)            (p)->lpVtbl->EnableCache(p,a,b)\n#define IDirectMusicLoader8_EnumObject(p,a,b,c)           (p)->lpVtbl->EnumObject(p,a,b,c)\n/*** IDirectMusicLoader8 methods ***/\n#define IDirectMusicLoader8_CollectGarbage(p)             (p)->lpVtbl->CollectGarbage(p)\n#define IDirectMusicLoader8_ReleaseObjectByUnknown(p,a)   (p)->lpVtbl->ReleaseObjectByUnknown(p,a)\n#define IDirectMusicLoader8_LoadObjectFromFile(p,a,b,c,d) (p)->lpVtbl->LoadObjectFromFile(p,a,b,c,d)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicGetLoader interface\n */\n#define INTERFACE IDirectMusicGetLoader\nDECLARE_INTERFACE_(IDirectMusicGetLoader,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicGetLoader methods ***/\n    STDMETHOD(GetLoader)(THIS_ IDirectMusicLoader **ppLoader) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicGetLoader_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicGetLoader_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectMusicGetLoader_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectMusicGetLoader methods ***/\n#define IDirectMusicGetLoader_GetLoader(p,a)        (p)->lpVtbl->GetLoader(p,a)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicSegment interface\n */\n#define INTERFACE IDirectMusicSegment\nDECLARE_INTERFACE_(IDirectMusicSegment,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicSegment methods ***/\n    STDMETHOD(GetLength)(THIS_ MUSIC_TIME *pmtLength) PURE;\n    STDMETHOD(SetLength)(THIS_ MUSIC_TIME mtLength) PURE;\n    STDMETHOD(GetRepeats)(THIS_ DWORD *pdwRepeats) PURE;\n    STDMETHOD(SetRepeats)(THIS_ DWORD dwRepeats) PURE;\n    STDMETHOD(GetDefaultResolution)(THIS_ DWORD *pdwResolution) PURE;\n    STDMETHOD(SetDefaultResolution)(THIS_ DWORD dwResolution) PURE;\n    STDMETHOD(GetTrack)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, IDirectMusicTrack **ppTrack) PURE;\n    STDMETHOD(GetTrackGroup)(THIS_ IDirectMusicTrack *pTrack, DWORD *pdwGroupBits) PURE;\n    STDMETHOD(InsertTrack)(THIS_ IDirectMusicTrack *pTrack, DWORD dwGroupBits) PURE;\n    STDMETHOD(RemoveTrack)(THIS_ IDirectMusicTrack *pTrack) PURE;\n    STDMETHOD(InitPlay)(THIS_ struct IDirectMusicSegmentState **ppSegState, struct IDirectMusicPerformance *pPerformance, DWORD  dwFlags) PURE;\n    STDMETHOD(GetGraph)(THIS_ struct IDirectMusicGraph **ppGraph) PURE;\n    STDMETHOD(SetGraph)(THIS_ struct IDirectMusicGraph *pGraph) PURE;\n    STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;\n    STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;\n    STDMETHOD(GetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE;\n    STDMETHOD(SetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void *pParam) PURE;\n    STDMETHOD(Clone)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicSegment **ppSegment) PURE;\n    STDMETHOD(SetStartPoint)(THIS_ MUSIC_TIME mtStart) PURE;\n    STDMETHOD(GetStartPoint)(THIS_ MUSIC_TIME *pmtStart) PURE;\n    STDMETHOD(SetLoopPoints)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd) PURE;\n    STDMETHOD(GetLoopPoints)(THIS_ MUSIC_TIME *pmtStart, MUSIC_TIME *pmtEnd) PURE;\n    STDMETHOD(SetPChannelsUsed)(THIS_ DWORD dwNumPChannels, DWORD *paPChannels) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicSegment_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicSegment_AddRef(p)                   (p)->lpVtbl->AddRef(p)\n#define IDirectMusicSegment_Release(p)                  (p)->lpVtbl->Release(p)\n/*** IDirectMusicSegment methods ***/\n#define IDirectMusicSegment_GetLength(p,a)              (p)->lpVtbl->GetLength(p,a)\n#define IDirectMusicSegment_SetLength(p,a)              (p)->lpVtbl->SetLength(p,a)\n#define IDirectMusicSegment_GetRepeats(p,a)             (p)->lpVtbl->GetRepeats(p,a)\n#define IDirectMusicSegment_SetRepeats(p,a)             (p)->lpVtbl->SetRepeats(p,a)\n#define IDirectMusicSegment_GetDefaultResolution(p,a)   (p)->lpVtbl->GetDefaultResolution(p,a)\n#define IDirectMusicSegment_SetDefaultResolution(p,a)   (p)->lpVtbl->SetDefaultResolution(p,a)\n#define IDirectMusicSegment_GetTrack(p,a,b,c,d)         (p)->lpVtbl->GetTrack(p,a,b,c,d)\n#define IDirectMusicSegment_GetTrackGroup(p,a,b)        (p)->lpVtbl->GetTrackGroup(p,a,b)\n#define IDirectMusicSegment_InsertTrack(p,a,b)          (p)->lpVtbl->InsertTrack(p,a,b)\n#define IDirectMusicSegment_RemoveTrack(p,a)            (p)->lpVtbl->RemoveTrack(p,a)\n#define IDirectMusicSegment_InitPlay(p,a,b,c)           (p)->lpVtbl->InitPlay(p,a,b,c)\n#define IDirectMusicSegment_GetGraph(p,a)               (p)->lpVtbl->GetGraph(p,a)\n#define IDirectMusicSegment_SetGraph(p,a)               (p)->lpVtbl->SetGraph(p,a)\n#define IDirectMusicSegment_AddNotificationType(p,a)    (p)->lpVtbl->AddNotificationType(p,a)\n#define IDirectMusicSegment_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a)\n#define IDirectMusicSegment_GetParam(p,a,b,c,d,e,f)     (p)->lpVtbl->GetParam(p,a,b,c,d,e,f)\n#define IDirectMusicSegment_SetParam(p,a,b,c,d,e)       (p)->lpVtbl->SetParam(p,a,b,c,d,e)\n#define IDirectMusicSegment_Clone(p,a,b,c)              (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirectMusicSegment_SetStartPoint(p,a)          (p)->lpVtbl->SetStartPoint(p,a)\n#define IDirectMusicSegment_GetStartPoint(p,a)          (p)->lpVtbl->GetStartPoint(p,a)\n#define IDirectMusicSegment_SetLoopPoints(p,a,b)        (p)->lpVtbl->SetLoopPoints(p,a,b)\n#define IDirectMusicSegment_GetLoopPoints(p,a,b)        (p)->lpVtbl->GetLoopPoints(p,a,b)\n#define IDirectMusicSegment_SetPChannelsUsed(p,a,b)     (p)->lpVtbl->SetPChannelsUsed(p,a,b)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicSegment8 interface\n */\n#define INTERFACE IDirectMusicSegment8\nDECLARE_INTERFACE_(IDirectMusicSegment8,IDirectMusicSegment)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicSegment methods ***/\n    STDMETHOD(GetLength)(THIS_ MUSIC_TIME *pmtLength) PURE;\n    STDMETHOD(SetLength)(THIS_ MUSIC_TIME mtLength) PURE;\n    STDMETHOD(GetRepeats)(THIS_ DWORD *pdwRepeats) PURE;\n    STDMETHOD(SetRepeats)(THIS_ DWORD dwRepeats) PURE;\n    STDMETHOD(GetDefaultResolution)(THIS_ DWORD *pdwResolution) PURE;\n    STDMETHOD(SetDefaultResolution)(THIS_ DWORD dwResolution) PURE;\n    STDMETHOD(GetTrack)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, IDirectMusicTrack **ppTrack) PURE;\n    STDMETHOD(GetTrackGroup)(THIS_ IDirectMusicTrack *pTrack, DWORD *pdwGroupBits) PURE;\n    STDMETHOD(InsertTrack)(THIS_ IDirectMusicTrack *pTrack, DWORD dwGroupBits) PURE;\n    STDMETHOD(RemoveTrack)(THIS_ IDirectMusicTrack *pTrack) PURE;\n    STDMETHOD(InitPlay)(THIS_ struct IDirectMusicSegmentState **ppSegState, struct IDirectMusicPerformance *pPerformance, DWORD  dwFlags) PURE;\n    STDMETHOD(GetGraph)(THIS_ struct IDirectMusicGraph **ppGraph) PURE;\n    STDMETHOD(SetGraph)(THIS_ struct IDirectMusicGraph *pGraph) PURE;\n    STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;\n    STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;\n    STDMETHOD(GetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE;\n    STDMETHOD(SetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void *pParam) PURE;\n    STDMETHOD(Clone)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicSegment **ppSegment) PURE;\n    STDMETHOD(SetStartPoint)(THIS_ MUSIC_TIME mtStart) PURE;\n    STDMETHOD(GetStartPoint)(THIS_ MUSIC_TIME *pmtStart) PURE;\n    STDMETHOD(SetLoopPoints)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd) PURE;\n    STDMETHOD(GetLoopPoints)(THIS_ MUSIC_TIME *pmtStart, MUSIC_TIME *pmtEnd) PURE;\n    STDMETHOD(SetPChannelsUsed)(THIS_ DWORD dwNumPChannels, DWORD *paPChannels) PURE;\n    /*** IDirectMusicSegment8 methods ***/\n    STDMETHOD(SetTrackConfig)(THIS_ REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff) PURE;\n    STDMETHOD(GetAudioPathConfig)(THIS_ IUnknown **ppAudioPathConfig) PURE;\n    STDMETHOD(Compose)(THIS_ MUSIC_TIME mtTime, IDirectMusicSegment *pFromSegment, IDirectMusicSegment *pToSegment, IDirectMusicSegment **ppComposedSegment) PURE;\n    STDMETHOD(Download)(THIS_ IUnknown *pAudioPath) PURE;\n    STDMETHOD(Unload)(THIS_ IUnknown *pAudioPath) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicSegment8_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicSegment8_AddRef(p)                   (p)->lpVtbl->AddRef(p)\n#define IDirectMusicSegment8_Release(p)                  (p)->lpVtbl->Release(p)\n/*** IDirectMusicSegment methods ***/\n#define IDirectMusicSegment8_GetLength(p,a)              (p)->lpVtbl->GetLength(p,a)\n#define IDirectMusicSegment8_SetLength(p,a)              (p)->lpVtbl->SetLength(p,a)\n#define IDirectMusicSegment8_GetRepeats(p,a)             (p)->lpVtbl->GetRepeats(p,a)\n#define IDirectMusicSegment8_SetRepeats(p,a)             (p)->lpVtbl->SetRepeats(p,a)\n#define IDirectMusicSegment8_GetDefaultResolution(p,a)   (p)->lpVtbl->GetDefaultResolution(p,a)\n#define IDirectMusicSegment8_SetDefaultResolution(p,a)   (p)->lpVtbl->SetDefaultResolution(p,a)\n#define IDirectMusicSegment8_GetTrack(p,a,b,c,d)         (p)->lpVtbl->GetTrack(p,a,b,c,d)\n#define IDirectMusicSegment8_GetTrackGroup(p,a,b)        (p)->lpVtbl->GetTrackGroup(p,a,b)\n#define IDirectMusicSegment8_InsertTrack(p,a,b)          (p)->lpVtbl->InsertTrack(p,a,b)\n#define IDirectMusicSegment8_RemoveTrack(p,a)            (p)->lpVtbl->RemoveTrack(p,a)\n#define IDirectMusicSegment8_InitPlay(p,a,b,c)           (p)->lpVtbl->InitPlay(p,a,b,c)\n#define IDirectMusicSegment8_GetGraph(p,a)               (p)->lpVtbl->GetGraph(p,a)\n#define IDirectMusicSegment8_SetGraph(p,a)               (p)->lpVtbl->SetGraph(p,a)\n#define IDirectMusicSegment8_AddNotificationType(p,a)    (p)->lpVtbl->AddNotificationType(p,a)\n#define IDirectMusicSegment8_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a)\n#define IDirectMusicSegment8_GetParam(p,a,b,c,d,e,f)     (p)->lpVtbl->GetParam(p,a,b,c,d,e,f)\n#define IDirectMusicSegment8_SetParam(p,a,b,c,d,e)       (p)->lpVtbl->SetParam(p,a,b,c,d,e)\n#define IDirectMusicSegment8_Clone(p,a,b,c)              (p)->lpVtbl->Clone(p,a,b,c)\n#define IDirectMusicSegment8_SetStartPoint(p,a)          (p)->lpVtbl->SetStartPoint(p,a)\n#define IDirectMusicSegment8_GetStartPoint(p,a)          (p)->lpVtbl->GetStartPoint(p,a)\n#define IDirectMusicSegment8_SetLoopPoints(p,a,b)        (p)->lpVtbl->SetLoopPoints(p,a,b)\n#define IDirectMusicSegment8_GetLoopPoints(p,a,b)        (p)->lpVtbl->GetLoopPoints(p,a,b)\n#define IDirectMusicSegment8_SetPChannelsUsed(p,a,b)     (p)->lpVtbl->SetPChannelsUsed(p,a,b)\n/*** IDirectMusicSegment8 methods ***/\n#define IDirectMusicSegment8_SetTrackConfig(p,a,b,c,d,e) (p)->lpVtbl->SetTrackConfig(p,a,b,c,d,e)\n#define IDirectMusicSegment8_GetAudioPathConfig(p,a)     (p)->lpVtbl->GetAudioPathConfig(p,a)\n#define IDirectMusicSegment8_Compose(p,a,b,c,d)          (p)->lpVtbl->Compose(p,a,b,c,d)\n#define IDirectMusicSegment8_Download(p,a)               (p)->lpVtbl->Download(p,a)\n#define IDirectMusicSegment8_Unload(p,a)                 (p)->lpVtbl->Unload(p,a)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicSegmentState interface\n */\n#define INTERFACE IDirectMusicSegmentState\nDECLARE_INTERFACE_(IDirectMusicSegmentState,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicSegmentState methods ***/\n    STDMETHOD(GetRepeats)(THIS_ DWORD *pdwRepeats) PURE;\n    STDMETHOD(GetSegment)(THIS_ IDirectMusicSegment **ppSegment) PURE;\n    STDMETHOD(GetStartTime)(THIS_ MUSIC_TIME *pmtStart) PURE;\n    STDMETHOD(GetSeek)(THIS_ MUSIC_TIME *pmtSeek) PURE;\n    STDMETHOD(GetStartPoint)(THIS_ MUSIC_TIME *pmtStart) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicSegmentState_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicSegmentState_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectMusicSegmentState_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectMusicSegmentState methods ***/\n#define IDirectMusicSegmentState_GetRepeats(p,a)       (p)->lpVtbl->GetRepeats(p,a)\n#define IDirectMusicSegmentState_GetSegment(p,a)       (p)->lpVtbl->GetSegment(p,a)\n#define IDirectMusicSegmentState_GetStartTime(p,a)     (p)->lpVtbl->GetStartTime(p,a)\n#define IDirectMusicSegmentState_GetSeek(p,a)          (p)->lpVtbl->GetSeek(p,a)\n#define IDirectMusicSegmentState_GetStartPoint(p,a)    (p)->lpVtbl->GetStartPoint(p,a)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicSegmentState8 interface\n */\n#define INTERFACE IDirectMusicSegmentState8\nDECLARE_INTERFACE_(IDirectMusicSegmentState8,IDirectMusicSegmentState)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicSegmentState methods ***/\n    STDMETHOD(GetRepeats)(THIS_ DWORD *pdwRepeats) PURE;\n    STDMETHOD(GetSegment)(THIS_ IDirectMusicSegment **ppSegment) PURE;\n    STDMETHOD(GetStartTime)(THIS_ MUSIC_TIME *pmtStart) PURE;\n    STDMETHOD(GetSeek)(THIS_ MUSIC_TIME *pmtSeek) PURE;\n    STDMETHOD(GetStartPoint)(THIS_ MUSIC_TIME *pmtStart) PURE;\n    /*** IDirectMusicSegmentState8 methods ***/\n    STDMETHOD(SetTrackConfig)(THIS_ REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff) PURE;\n    STDMETHOD(GetObjectInPath)(THIS_ DWORD dwPChannel, DWORD dwStage, DWORD dwBuffer, REFGUID guidObject, DWORD dwIndex, REFGUID iidInterface, void **ppObject) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicSegmentState8_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicSegmentState8_AddRef(p)                        (p)->lpVtbl->AddRef(p)\n#define IDirectMusicSegmentState8_Release(p)                       (p)->lpVtbl->Release(p)\n/*** IDirectMusicSegmentState methods ***/\n#define IDirectMusicSegmentState8_GetRepeats(p,a)                  (p)->lpVtbl->GetRepeats(p,a)\n#define IDirectMusicSegmentState8_GetSegment(p,a)                  (p)->lpVtbl->GetSegment(p,a)\n#define IDirectMusicSegmentState8_GetStartTime(p,a)                (p)->lpVtbl->GetStartTime(p,a)\n#define IDirectMusicSegmentState8_GetSeek(p,a)                     (p)->lpVtbl->GetSeek(p,a)\n#define IDirectMusicSegmentState8_GetStartPoint(p,a)               (p)->lpVtbl->GetStartPoint(p,a)\n/*** IDirectMusicSegmentState8 methods ***/\n#define IDirectMusicSegmentState8_SetTrackConfig(p,a,b,c,d,e)      (p)->lpVtbl->SetTrackConfig(p,a,b,c,d,e)\n#define IDirectMusicSegmentState8_GetObjectInPath(p,a,b,c,d,e,f,g) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d,e,f,g)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicAudioPath interface\n */\n#define INTERFACE IDirectMusicAudioPath\nDECLARE_INTERFACE_(IDirectMusicAudioPath,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicAudioPath methods ***/\n    STDMETHOD(GetObjectInPath)(THIS_ DWORD dwPChannel, DWORD dwStage, DWORD dwBuffer, REFGUID guidObject, WORD dwIndex, REFGUID iidInterface, void **ppObject) PURE;\n    STDMETHOD(Activate)(THIS_ BOOL fActivate) PURE;\n    STDMETHOD(SetVolume)(THIS_ LONG lVolume, DWORD dwDuration) PURE;\n    STDMETHOD(ConvertPChannel)(THIS_ DWORD dwPChannelIn, DWORD *pdwPChannelOut) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicAudioPath_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicAudioPath_AddRef(p)                        (p)->lpVtbl->AddRef(p)\n#define IDirectMusicAudioPath_Release(p)                       (p)->lpVtbl->Release(p)\n/*** IDirectMusicAudioPath methods ***/\n#define IDirectMusicAudioPath_GetObjectInPath(p,a,b,c,d,e,f,g) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d,e,f,g)\n#define IDirectMusicAudioPath_Activate(p,a)                    (p)->lpVtbl->Activate(p,a)\n#define IDirectMusicAudioPath_SetVolume(p,a,b)                 (p)->lpVtbl->SetVolume(p,a,b)\n#define IDirectMusicAudioPath_ConvertPChannel(p,a,b)           (p)->lpVtbl->ConvertPChannel(p,a,b)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicPerformance interface\n */\n#define INTERFACE IDirectMusicPerformance\nDECLARE_INTERFACE_(IDirectMusicPerformance,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicPerformance methods ***/\n    STDMETHOD(Init)(THIS_ IDirectMusic **ppDirectMusic, LPDIRECTSOUND pDirectSound, HWND hWnd) PURE;\n    STDMETHOD(PlaySegment)(THIS_ IDirectMusicSegment *pSegment, DWORD dwFlags, __int64 i64StartTime, IDirectMusicSegmentState **ppSegmentState) PURE;\n    STDMETHOD(Stop)(THIS_ IDirectMusicSegment *pSegment, IDirectMusicSegmentState *pSegmentState, MUSIC_TIME mtTime, DWORD dwFlags) PURE;\n    STDMETHOD(GetSegmentState)(THIS_ IDirectMusicSegmentState **ppSegmentState, MUSIC_TIME mtTime) PURE;\n    STDMETHOD(SetPrepareTime)(THIS_ DWORD dwMilliSeconds) PURE;\n    STDMETHOD(GetPrepareTime)(THIS_ DWORD *pdwMilliSeconds) PURE;\n    STDMETHOD(SetBumperLength)(THIS_ DWORD dwMilliSeconds) PURE;\n    STDMETHOD(GetBumperLength)(THIS_ DWORD *pdwMilliSeconds) PURE;\n    STDMETHOD(SendPMsg)(THIS_ DMUS_PMSG *pPMSG) PURE;\n    STDMETHOD(MusicToReferenceTime)(THIS_ MUSIC_TIME mtTime, REFERENCE_TIME *prtTime) PURE;\n    STDMETHOD(ReferenceToMusicTime)(THIS_ REFERENCE_TIME rtTime, MUSIC_TIME *pmtTime) PURE;\n    STDMETHOD(IsPlaying)(THIS_ IDirectMusicSegment *pSegment, IDirectMusicSegmentState *pSegState) PURE;\n    STDMETHOD(GetTime)(THIS_ REFERENCE_TIME *prtNow, MUSIC_TIME *pmtNow) PURE;\n    STDMETHOD(AllocPMsg)(THIS_ ULONG cb, DMUS_PMSG **ppPMSG) PURE;\n    STDMETHOD(FreePMsg)(THIS_ DMUS_PMSG *pPMSG) PURE;\n    STDMETHOD(GetGraph)(THIS_ struct IDirectMusicGraph **ppGraph) PURE;\n    STDMETHOD(SetGraph)(THIS_ struct IDirectMusicGraph *pGraph) PURE;\n    STDMETHOD(SetNotificationHandle)(THIS_ HANDLE hNotification, REFERENCE_TIME rtMinimum) PURE;\n    STDMETHOD(GetNotificationPMsg)(THIS_ DMUS_NOTIFICATION_PMSG **ppNotificationPMsg) PURE;\n    STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;\n    STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;\n    STDMETHOD(AddPort)(THIS_ IDirectMusicPort *pPort) PURE;\n    STDMETHOD(RemovePort)(THIS_ IDirectMusicPort *pPort) PURE;\n    STDMETHOD(AssignPChannelBlock)(THIS_ DWORD dwBlockNum, IDirectMusicPort *pPort, DWORD dwGroup) PURE;\n    STDMETHOD(AssignPChannel)(THIS_ DWORD dwPChannel, IDirectMusicPort *pPort, DWORD dwGroup, DWORD dwMChannel) PURE;\n    STDMETHOD(PChannelInfo)(THIS_ DWORD dwPChannel, IDirectMusicPort **ppPort, DWORD *pdwGroup, DWORD *pdwMChannel) PURE;\n    STDMETHOD(DownloadInstrument)(THIS_ IDirectMusicInstrument *pInst, DWORD dwPChannel, IDirectMusicDownloadedInstrument **ppDownInst, DMUS_NOTERANGE *pNoteRanges, DWORD dwNumNoteRanges, IDirectMusicPort **ppPort, DWORD *pdwGroup, DWORD *pdwMChannel) PURE;\n    STDMETHOD(Invalidate)(THIS_ MUSIC_TIME mtTime, DWORD dwFlags) PURE;\n    STDMETHOD(GetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE;\n    STDMETHOD(SetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void *pParam) PURE;\n    STDMETHOD(GetGlobalParam)(THIS_ REFGUID rguidType, void *pParam, DWORD dwSize) PURE;\n    STDMETHOD(SetGlobalParam)(THIS_ REFGUID rguidType, void *pParam, DWORD dwSize) PURE;\n    STDMETHOD(GetLatencyTime)(THIS_ REFERENCE_TIME *prtTime) PURE;\n    STDMETHOD(GetQueueTime)(THIS_ REFERENCE_TIME *prtTime) PURE;\n    STDMETHOD(AdjustTime)(THIS_ REFERENCE_TIME rtAmount) PURE;\n    STDMETHOD(CloseDown)(THIS) PURE;\n    STDMETHOD(GetResolvedTime)(THIS_ REFERENCE_TIME rtTime, REFERENCE_TIME *prtResolved, DWORD dwTimeResolveFlags) PURE;\n    STDMETHOD(MIDIToMusic)(THIS_ BYTE bMIDIValue, DMUS_CHORD_KEY *pChord, BYTE bPlayMode, BYTE bChordLevel, WORD *pwMusicValue) PURE;\n    STDMETHOD(MusicToMIDI)(THIS_ WORD wMusicValue, DMUS_CHORD_KEY *pChord, BYTE bPlayMode, BYTE bChordLevel, BYTE *pbMIDIValue) PURE;\n    STDMETHOD(TimeToRhythm)(THIS_ MUSIC_TIME mtTime, DMUS_TIMESIGNATURE *pTimeSig, WORD *pwMeasure, BYTE *pbBeat, BYTE *pbGrid, short *pnOffset) PURE;\n    STDMETHOD(RhythmToTime)(THIS_ WORD wMeasure, BYTE bBeat, BYTE bGrid, short nOffset, DMUS_TIMESIGNATURE *pTimeSig, MUSIC_TIME *pmtTime) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicPerformance_QueryInterface(p,a,b)                 (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicPerformance_AddRef(p)                             (p)->lpVtbl->AddRef(p)\n#define IDirectMusicPerformance_Release(p)                            (p)->lpVtbl->Release(p)\n/*** IDirectMusicPerformance methods ***/\n#define IDirectMusicPerformance_Init(p,a,b,c)                         (p)->lpVtbl->Init(p,a,b,c)\n#define IDirectMusicPerformance_PlaySegment(p,a,b,c,d)                (p)->lpVtbl->PlaySegment(p,a,b,c,d)\n#define IDirectMusicPerformance_Stop(p,a,b,c,d)                       (p)->lpVtbl->Stop(p,a,b,c,d)\n#define IDirectMusicPerformance_GetSegmentState(p,a,b)                (p)->lpVtbl->GetSegmentState(p,a,b)\n#define IDirectMusicPerformance_SetPrepareTime(p,a)                   (p)->lpVtbl->SetPrepareTime(p,a)\n#define IDirectMusicPerformance_GetPrepareTime(p,a)                   (p)->lpVtbl->GetPrepareTime(p,a)\n#define IDirectMusicPerformance_SetBumperLength(p,a)                  (p)->lpVtbl->SetBumperLength(p,a)\n#define IDirectMusicPerformance_GetBumperLength(p,a)                  (p)->lpVtbl->GetBumperLength(p,a)\n#define IDirectMusicPerformance_SendPMsg(p,a)                         (p)->lpVtbl->SendPMsg(p,a)\n#define IDirectMusicPerformance_MusicToReferenceTime(p,a,b)           (p)->lpVtbl->MusicToReferenceTime(p,a,b)\n#define IDirectMusicPerformance_ReferenceToMusicTime(p,a,b)           (p)->lpVtbl->ReferenceToMusicTime(p,a,b)\n#define IDirectMusicPerformance_IsPlaying(p,a,b)                      (p)->lpVtbl->IsPlaying(p,a,b)\n#define IDirectMusicPerformance_GetTime(p,a,b)                        (p)->lpVtbl->GetTime(p,a,b)\n#define IDirectMusicPerformance_AllocPMsg(p,a,b)                      (p)->lpVtbl->AllocPMsg(p,a,b)\n#define IDirectMusicPerformance_FreePMsg(p,a)                         (p)->lpVtbl->FreePMsg(p,a)\n#define IDirectMusicPerformance_GetGraph(p,a)                         (p)->lpVtbl->GetGraph(p,a)\n#define IDirectMusicPerformance_SetGraph(p,a)                         (p)->lpVtbl->SetGraph(p,a)\n#define IDirectMusicPerformance_SetNotificationHandle(p,a,b)          (p)->lpVtbl->SetNotificationHandle(p,a,b)\n#define IDirectMusicPerformance_GetNotificationPMsg(p,a)              (p)->lpVtbl->GetNotificationPMsg(p,a)\n#define IDirectMusicPerformance_AddNotificationType(p,a)              (p)->lpVtbl->AddNotificationType(p,a)\n#define IDirectMusicPerformance_RemoveNotificationType(p,a)           (p)->lpVtbl->RemoveNotificationType(p,a)\n#define IDirectMusicPerformance_AddPort(p,a)                          (p)->lpVtbl->AddPort(p,a)\n#define IDirectMusicPerformance_RemovePort(p,a)                       (p)->lpVtbl->RemovePort(p,a)\n#define IDirectMusicPerformance_AssignPChannelBlock(p,a,b,c)          (p)->lpVtbl->AssignPChannelBlock(p,a,b,c)\n#define IDirectMusicPerformance_AssignPChannel(p,a,b,c,d)             (p)->lpVtbl->AssignPChannel(p,a,b,c,d)\n#define IDirectMusicPerformance_PChannelInfo(p,a,b,c,d)               (p)->lpVtbl->PChannelInfo(p,a,b,c,d)\n#define IDirectMusicPerformance_DownloadInstrument(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DownloadInstrument(p,a,b,c,d,e,f,g,h)\n#define IDirectMusicPerformance_Invalidate(p,a,b)                     (p)->lpVtbl->Invalidate(p,a,b)\n#define IDirectMusicPerformance_GetParam(p,a,b,c,d,e,f)               (p)->lpVtbl->GetParam(p,a,b,c,d,e,f)\n#define IDirectMusicPerformance_SetParam(p,a,b,c,d,e)                 (p)->lpVtbl->SetParam(p,a,b,c,d,e)\n#define IDirectMusicPerformance_GetGlobalParam(p,a,b,c)               (p)->lpVtbl->GetGlobalParam(p,a,b,c)\n#define IDirectMusicPerformance_SetGlobalParam(p,a,b,c)               (p)->lpVtbl->SetGlobalParam(p,a,b,c)\n#define IDirectMusicPerformance_GetLatencyTime(p,a)                   (p)->lpVtbl->GetLatencyTime(p,a)\n#define IDirectMusicPerformance_GetQueueTime(p,a)                     (p)->lpVtbl->GetQueueTime(p,a)\n#define IDirectMusicPerformance_AdjustTime(p,a)                       (p)->lpVtbl->AdjustTime(p,a)\n#define IDirectMusicPerformance_CloseDown(p)                          (p)->lpVtbl->CloseDown(p)\n#define IDirectMusicPerformance_GetResolvedTime(p,a,b,c)              (p)->lpVtbl->GetResolvedTime(p,a,b,c)\n#define IDirectMusicPerformance_MIDIToMusic(p,a,b,c,d,e)              (p)->lpVtbl->MIDIToMusic(p,a,b,c,d,e)\n#define IDirectMusicPerformance_MusicToMIDI(p,a,b,c,d,e)              (p)->lpVtbl->MusicToMIDI(p,a,b,c,d,e)\n#define IDirectMusicPerformance_TimeToRhythm(p,a,b,c,d,e,f)           (p)->lpVtbl->TimeToRhythm(p,a,b,c,d,e,f)\n#define IDirectMusicPerformance_RhythmToTime(p,a,b,c,d,e,f)           (p)->lpVtbl->RhythmToTime(p,a,b,c,d,e,f)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicPerformance8 interface\n */\n#define INTERFACE IDirectMusicPerformance8\nDECLARE_INTERFACE_(IDirectMusicPerformance8,IDirectMusicPerformance)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicPerformance methods ***/\n    STDMETHOD(Init)(THIS_ IDirectMusic **ppDirectMusic, LPDIRECTSOUND pDirectSound, HWND hWnd) PURE;\n    STDMETHOD(PlaySegment)(THIS_ IDirectMusicSegment *pSegment, DWORD dwFlags, __int64 i64StartTime, IDirectMusicSegmentState **ppSegmentState) PURE;\n    STDMETHOD(Stop)(THIS_ IDirectMusicSegment *pSegment, IDirectMusicSegmentState *pSegmentState, MUSIC_TIME mtTime, DWORD dwFlags) PURE;\n    STDMETHOD(GetSegmentState)(THIS_ IDirectMusicSegmentState **ppSegmentState, MUSIC_TIME mtTime) PURE;\n    STDMETHOD(SetPrepareTime)(THIS_ DWORD dwMilliSeconds) PURE;\n    STDMETHOD(GetPrepareTime)(THIS_ DWORD *pdwMilliSeconds) PURE;\n    STDMETHOD(SetBumperLength)(THIS_ DWORD dwMilliSeconds) PURE;\n    STDMETHOD(GetBumperLength)(THIS_ DWORD *pdwMilliSeconds) PURE;\n    STDMETHOD(SendPMsg)(THIS_ DMUS_PMSG *pPMSG) PURE;\n    STDMETHOD(MusicToReferenceTime)(THIS_ MUSIC_TIME mtTime, REFERENCE_TIME *prtTime) PURE;\n    STDMETHOD(ReferenceToMusicTime)(THIS_ REFERENCE_TIME rtTime, MUSIC_TIME *pmtTime) PURE;\n    STDMETHOD(IsPlaying)(THIS_ IDirectMusicSegment *pSegment, IDirectMusicSegmentState *pSegState) PURE;\n    STDMETHOD(GetTime)(THIS_ REFERENCE_TIME *prtNow, MUSIC_TIME *pmtNow) PURE;\n    STDMETHOD(AllocPMsg)(THIS_ ULONG cb, DMUS_PMSG **ppPMSG) PURE;\n    STDMETHOD(FreePMsg)(THIS_ DMUS_PMSG *pPMSG) PURE;\n    STDMETHOD(GetGraph)(THIS_ struct IDirectMusicGraph **ppGraph) PURE;\n    STDMETHOD(SetGraph)(THIS_ struct IDirectMusicGraph *pGraph) PURE;\n    STDMETHOD(SetNotificationHandle)(THIS_ HANDLE hNotification, REFERENCE_TIME rtMinimum) PURE;\n    STDMETHOD(GetNotificationPMsg)(THIS_ DMUS_NOTIFICATION_PMSG **ppNotificationPMsg) PURE;\n    STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;\n    STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;\n    STDMETHOD(AddPort)(THIS_ IDirectMusicPort *pPort) PURE;\n    STDMETHOD(RemovePort)(THIS_ IDirectMusicPort *pPort) PURE;\n    STDMETHOD(AssignPChannelBlock)(THIS_ DWORD dwBlockNum, IDirectMusicPort *pPort, DWORD dwGroup) PURE;\n    STDMETHOD(AssignPChannel)(THIS_ DWORD dwPChannel, IDirectMusicPort *pPort, DWORD dwGroup, DWORD dwMChannel) PURE;\n    STDMETHOD(PChannelInfo)(THIS_ DWORD dwPChannel, IDirectMusicPort **ppPort, DWORD *pdwGroup, DWORD *pdwMChannel) PURE;\n    STDMETHOD(DownloadInstrument)(THIS_ IDirectMusicInstrument *pInst, DWORD dwPChannel, IDirectMusicDownloadedInstrument **ppDownInst, DMUS_NOTERANGE *pNoteRanges, DWORD dwNumNoteRanges, IDirectMusicPort **ppPort, DWORD *pdwGroup, DWORD *pdwMChannel) PURE;\n    STDMETHOD(Invalidate)(THIS_ MUSIC_TIME mtTime, DWORD dwFlags) PURE;\n    STDMETHOD(GetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE;\n    STDMETHOD(SetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void *pParam) PURE;\n    STDMETHOD(GetGlobalParam)(THIS_ REFGUID rguidType, void *pParam, DWORD dwSize) PURE;\n    STDMETHOD(SetGlobalParam)(THIS_ REFGUID rguidType, void *pParam, DWORD dwSize) PURE;\n    STDMETHOD(GetLatencyTime)(THIS_ REFERENCE_TIME *prtTime) PURE;\n    STDMETHOD(GetQueueTime)(THIS_ REFERENCE_TIME *prtTime) PURE;\n    STDMETHOD(AdjustTime)(THIS_ REFERENCE_TIME rtAmount) PURE;\n    STDMETHOD(CloseDown)(THIS) PURE;\n    STDMETHOD(GetResolvedTime)(THIS_ REFERENCE_TIME rtTime, REFERENCE_TIME *prtResolved, DWORD dwTimeResolveFlags) PURE;\n    STDMETHOD(MIDIToMusic)(THIS_ BYTE bMIDIValue, DMUS_CHORD_KEY *pChord, BYTE bPlayMode, BYTE bChordLevel, WORD *pwMusicValue) PURE;\n    STDMETHOD(MusicToMIDI)(THIS_ WORD wMusicValue, DMUS_CHORD_KEY *pChord, BYTE bPlayMode, BYTE bChordLevel, BYTE *pbMIDIValue) PURE;\n    STDMETHOD(TimeToRhythm)(THIS_ MUSIC_TIME mtTime, DMUS_TIMESIGNATURE *pTimeSig, WORD *pwMeasure, BYTE *pbBeat, BYTE *pbGrid, short *pnOffset) PURE;\n    STDMETHOD(RhythmToTime)(THIS_ WORD wMeasure, BYTE bBeat, BYTE bGrid, short nOffset, DMUS_TIMESIGNATURE *pTimeSig, MUSIC_TIME *pmtTime) PURE;\n    /*** IDirectMusicPerformance8 methods ***/\n    STDMETHOD(InitAudio)(THIS_ IDirectMusic **ppDirectMusic, IDirectSound **ppDirectSound, HWND hWnd, DWORD dwDefaultPathType, DWORD dwPChannelCount, DWORD dwFlags, DMUS_AUDIOPARAMS *pParams) PURE;\n    STDMETHOD(PlaySegmentEx)(THIS_ IUnknown *pSource, WCHAR *pwzSegmentName, IUnknown *pTransition, DWORD dwFlags, __int64 i64StartTime, IDirectMusicSegmentState **ppSegmentState, IUnknown *pFrom, IUnknown *pAudioPath) PURE;\n    STDMETHOD(StopEx)(THIS_ IUnknown *pObjectToStop, __int64 i64StopTime, DWORD dwFlags) PURE;\n    STDMETHOD(ClonePMsg)(THIS_ DMUS_PMSG *pSourcePMSG, DMUS_PMSG **ppCopyPMSG) PURE;\n    STDMETHOD(CreateAudioPath)(THIS_ IUnknown *pSourceConfig, BOOL fActivate, IDirectMusicAudioPath **ppNewPath) PURE;\n    STDMETHOD(CreateStandardAudioPath)(THIS_ DWORD dwType, DWORD dwPChannelCount, BOOL fActivate, IDirectMusicAudioPath **ppNewPath) PURE;\n    STDMETHOD(SetDefaultAudioPath)(THIS_ IDirectMusicAudioPath *pAudioPath) PURE;\n    STDMETHOD(GetDefaultAudioPath)(THIS_ IDirectMusicAudioPath **ppAudioPath) PURE;\n    STDMETHOD(GetParamEx)(THIS_ REFGUID rguidType, DWORD dwTrackID, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicPerformance8_QueryInterface(p,a,b)                 (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicPerformance8_AddRef(p)                             (p)->lpVtbl->AddRef(p)\n#define IDirectMusicPerformance8_Release(p)                            (p)->lpVtbl->Release(p)\n/*** IDirectMusicPerformance methods ***/\n#define IDirectMusicPerformance8_Init(p,a,b,c)                         (p)->lpVtbl->Init(p,a,b,c)\n#define IDirectMusicPerformance8_PlaySegment(p,a,b,c,d)                (p)->lpVtbl->PlaySegment(p,a,b,c,d)\n#define IDirectMusicPerformance8_Stop(p,a,b,c,d)                       (p)->lpVtbl->Stop(p,a,b,c,d)\n#define IDirectMusicPerformance8_GetSegmentState(p,a,b)                (p)->lpVtbl->GetSegmentState(p,a,b)\n#define IDirectMusicPerformance8_SetPrepareTime(p,a)                   (p)->lpVtbl->SetPrepareTime(p,a)\n#define IDirectMusicPerformance8_GetPrepareTime(p,a)                   (p)->lpVtbl->GetPrepareTime(p,a)\n#define IDirectMusicPerformance8_SetBumperLength(p,a)                  (p)->lpVtbl->SetBumperLength(p,a)\n#define IDirectMusicPerformance8_GetBumperLength(p,a)                  (p)->lpVtbl->GetBumperLength(p,a)\n#define IDirectMusicPerformance8_SendPMsg(p,a)                         (p)->lpVtbl->SendPMsg(p,a)\n#define IDirectMusicPerformance8_MusicToReferenceTime(p,a,b)           (p)->lpVtbl->MusicToReferenceTime(p,a,b)\n#define IDirectMusicPerformance8_ReferenceToMusicTime(p,a,b)           (p)->lpVtbl->ReferenceToMusicTime(p,a,b)\n#define IDirectMusicPerformance8_IsPlaying(p,a,b)                      (p)->lpVtbl->IsPlaying(p,a,b)\n#define IDirectMusicPerformance8_GetTime(p,a,b)                        (p)->lpVtbl->GetTime(p,a,b)\n#define IDirectMusicPerformance8_AllocPMsg(p,a,b)                      (p)->lpVtbl->AllocPMsg(p,a,b)\n#define IDirectMusicPerformance8_FreePMsg(p,a)                         (p)->lpVtbl->FreePMsg(p,a)\n#define IDirectMusicPerformance8_GetGraph(p,a)                         (p)->lpVtbl->GetGraph(p,a)\n#define IDirectMusicPerformance8_SetGraph(p,a)                         (p)->lpVtbl->SetGraph(p,a)\n#define IDirectMusicPerformance8_SetNotificationHandle(p,a,b)          (p)->lpVtbl->SetNotificationHandle(p,a,b)\n#define IDirectMusicPerformance8_GetNotificationPMsg(p,a)              (p)->lpVtbl->GetNotificationPMsg(p,a)\n#define IDirectMusicPerformance8_AddNotificationType(p,a)              (p)->lpVtbl->AddNotificationType(p,a)\n#define IDirectMusicPerformance8_RemoveNotificationType(p,a)           (p)->lpVtbl->RemoveNotificationType(p,a)\n#define IDirectMusicPerformance8_AddPort(p,a)                          (p)->lpVtbl->AddPort(p,a)\n#define IDirectMusicPerformance8_RemovePort(p,a)                       (p)->lpVtbl->RemovePort(p,a)\n#define IDirectMusicPerformance8_AssignPChannelBlock(p,a,b,c)          (p)->lpVtbl->AssignPChannelBlock(p,a,b,c)\n#define IDirectMusicPerformance8_AssignPChannel(p,a,b,c,d)             (p)->lpVtbl->AssignPChannel(p,a,b,c,d)\n#define IDirectMusicPerformance8_PChannelInfo(p,a,b,c,d)               (p)->lpVtbl->PChannelInfo(p,a,b,c,d)\n#define IDirectMusicPerformance8_DownloadInstrument(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DownloadInstrument(p,a,b,c,d,e,f,g,h)\n#define IDirectMusicPerformance8_Invalidate(p,a,b)                     (p)->lpVtbl->Invalidate(p,a,b)\n#define IDirectMusicPerformance8_GetParam(p,a,b,c,d,e,f)               (p)->lpVtbl->GetParam(p,a,b,c,d,e,f)\n#define IDirectMusicPerformance8_SetParam(p,a,b,c,d,e)                 (p)->lpVtbl->SetParam(p,a,b,c,d,e)\n#define IDirectMusicPerformance8_GetGlobalParam(p,a,b,c)               (p)->lpVtbl->GetGlobalParam(p,a,b,c)\n#define IDirectMusicPerformance8_SetGlobalParam(p,a,b,c)               (p)->lpVtbl->SetGlobalParam(p,a,b,c)\n#define IDirectMusicPerformance8_GetLatencyTime(p,a)                   (p)->lpVtbl->GetLatencyTime(p,a)\n#define IDirectMusicPerformance8_GetQueueTime(p,a)                     (p)->lpVtbl->GetQueueTime(p,a)\n#define IDirectMusicPerformance8_AdjustTime(p,a)                       (p)->lpVtbl->AdjustTime(p,a)\n#define IDirectMusicPerformance8_CloseDown(p)                          (p)->lpVtbl->CloseDown(p)\n#define IDirectMusicPerformance8_GetResolvedTime(p,a,b,c)              (p)->lpVtbl->GetResolvedTime(p,a,b,c)\n#define IDirectMusicPerformance8_MIDIToMusic(p,a,b,c,d,e)              (p)->lpVtbl->MIDIToMusic(p,a,b,c,d,e)\n#define IDirectMusicPerformance8_MusicToMIDI(p,a,b,c,d,e)              (p)->lpVtbl->MusicToMIDI(p,a,b,c,d,e)\n#define IDirectMusicPerformance8_TimeToRhythm(p,a,b,c,d,e,f)           (p)->lpVtbl->TimeToRhythm(p,a,b,c,d,e,f)\n#define IDirectMusicPerformance8_RhythmToTime(p,a,b,c,d,e,f)           (p)->lpVtbl->RhythmToTime(p,a,b,c,d,e,f)\n    /*  IDirectMusicPerformance8 methods*/\n#define IDirectMusicPerformance8_InitAudio(p,a,b,c,d,e,f,g)            (p)->lpVtbl->InitAudio(p,a,b,c,d,e,f,g)\n#define IDirectMusicPerformance8_PlaySegmentEx(p,a,b,c,d,e,f,g,h)      (p)->lpVtbl->PlaySegmentEx(p,a,b,c,d,e,f,g,h)\n#define IDirectMusicPerformance8_StopEx(p,a,b,c)                       (p)->lpVtbl->StopEx(p,a,b,c)\n#define IDirectMusicPerformance8_ClonePMsg(p,a,b)                      (p)->lpVtbl->ClonePMsg(p,a,b)\n#define IDirectMusicPerformance8_CreateAudioPath(p,a,b,c)              (p)->lpVtbl->CreateAudioPath(p,a,b,c)\n#define IDirectMusicPerformance8_CreateStandardAudioPath(p,a,b,c,d)    (p)->lpVtbl->CreateStandardAudioPath(p,a,b,c,d)\n#define IDirectMusicPerformance8_SetDefaultAudioPath(p,a)              (p)->lpVtbl->SetDefaultAudioPath(p,a)\n#define IDirectMusicPerformance8_GetDefaultAudioPath(p,a)              (p)->lpVtbl->GetDefaultAudioPath(p,a)\n#define IDirectMusicPerformance8_GetParamEx(p,a,b,c,d,e,f,g)           (p)->lpVtbl->GetParamEx(p,a,b,c,d,e,f,g)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicGraph interface\n */\n#define INTERFACE IDirectMusicGraph\nDECLARE_INTERFACE_(IDirectMusicGraph,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicGraph methods ***/\n    STDMETHOD(StampPMsg)(THIS_ DMUS_PMSG *pPMSG) PURE;\n    STDMETHOD(InsertTool)(THIS_ IDirectMusicTool *pTool, DWORD *pdwPChannels, DWORD cPChannels, LONG lIndex) PURE;\n    STDMETHOD(GetTool)(THIS_ DWORD dwIndex, IDirectMusicTool **ppTool) PURE;\n    STDMETHOD(RemoveTool)(THIS_ IDirectMusicTool *pTool) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicGraph_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicGraph_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectMusicGraph_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectMusicGraph methods ***/\n#define IDirectMusicGraph_StampPMsg(p,a)        (p)->lpVtbl->StampPMsg(p,a)\n#define IDirectMusicGraph_InsertTool(p,a,b,c,d) (p)->lpVtbl->InsertTool(p,a,b,c,d)\n#define IDirectMusicGraph_GetTool(p,a,b)        (p)->lpVtbl->GetTool(p,a,b)\n#define IDirectMusicGraph_RemoveTool(p,a)       (p)->lpVtbl->RemoveTool(p,a)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicStyle interface\n */\n#define INTERFACE IDirectMusicStyle\nDECLARE_INTERFACE_(IDirectMusicStyle,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicStyle methods ***/\n    STDMETHOD(GetBand)(THIS_ WCHAR *pwszName, IDirectMusicBand **ppBand) PURE;\n    STDMETHOD(EnumBand)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;\n    STDMETHOD(GetDefaultBand)(THIS_ IDirectMusicBand **ppBand) PURE;\n    STDMETHOD(EnumMotif)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;\n    STDMETHOD(GetMotif)(THIS_ WCHAR *pwszName, IDirectMusicSegment **ppSegment) PURE;\n    STDMETHOD(GetDefaultChordMap)(THIS_ struct IDirectMusicChordMap **ppChordMap) PURE;\n    STDMETHOD(EnumChordMap)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;\n    STDMETHOD(GetChordMap)(THIS_ WCHAR *pwszName, struct IDirectMusicChordMap **ppChordMap) PURE;\n    STDMETHOD(GetTimeSignature)(THIS_ DMUS_TIMESIGNATURE *pTimeSig) PURE;\n    STDMETHOD(GetEmbellishmentLength)(THIS_ DWORD dwType, DWORD dwLevel, DWORD *pdwMin, DWORD *pdwMax) PURE;\n    STDMETHOD(GetTempo)(THIS_ double *pTempo) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicStyle_QueryInterface(p,a,b)             (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicStyle_AddRef(p)                         (p)->lpVtbl->AddRef(p)\n#define IDirectMusicStyle_Release(p)                        (p)->lpVtbl->Release(p)\n/*** IDirectMusicStyle methods ***/\n#define IDirectMusicStyle_GetBand(p,a,b)                    (p)->lpVtbl->GetBand(p,a,b)\n#define IDirectMusicStyle_EnumBand(p,a,b)                   (p)->lpVtbl->EnumBand(p,a,b)\n#define IDirectMusicStyle_GetDefaultBand(p,a)               (p)->lpVtbl->GetDefaultBand(p,a)\n#define IDirectMusicStyle_EnumMotif(p,a,b)                  (p)->lpVtbl->EnumMotif(p,a,b)\n#define IDirectMusicStyle_GetMotif(p,a,b)                   (p)->lpVtbl->GetMotif(p,a,b)\n#define IDirectMusicStyle_GetDefaultChordMap(p,a)           (p)->lpVtbl->GetDefaultChordMap(p,a)\n#define IDirectMusicStyle_EnumChordMap(p,a,b)               (p)->lpVtbl->EnumChordMap(p,a,b)\n#define IDirectMusicStyle_GetChordMap(p,a,b)                (p)->lpVtbl->GetChordMap(p,a,b)\n#define IDirectMusicStyle_GetTimeSignature(p,a)             (p)->lpVtbl->GetTimeSignature(p,a)\n#define IDirectMusicStyle_GetEmbellishmentLength(p,a,b,c,d) (p)->lpVtbl->GetEmbellishmentLength(p,a,b,c,d)\n#define IDirectMusicStyle_GetTempo(p,a)                     (p)->lpVtbl->GetTempo(p,a)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicStyle8 interface\n */\n#define INTERFACE IDirectMusicStyle8\nDECLARE_INTERFACE_(IDirectMusicStyle8,IDirectMusicStyle)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicStyle methods ***/\n    STDMETHOD(GetBand)(THIS_ WCHAR *pwszName, IDirectMusicBand **ppBand) PURE;\n    STDMETHOD(EnumBand)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;\n    STDMETHOD(GetDefaultBand)(THIS_ IDirectMusicBand **ppBand) PURE;\n    STDMETHOD(EnumMotif)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;\n    STDMETHOD(GetMotif)(THIS_ WCHAR *pwszName, IDirectMusicSegment **ppSegment) PURE;\n    STDMETHOD(GetDefaultChordMap)(THIS_ struct IDirectMusicChordMap **ppChordMap) PURE;\n    STDMETHOD(EnumChordMap)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;\n    STDMETHOD(GetChordMap)(THIS_ WCHAR *pwszName, struct IDirectMusicChordMap **ppChordMap) PURE;\n    STDMETHOD(GetTimeSignature)(THIS_ DMUS_TIMESIGNATURE *pTimeSig) PURE;\n    STDMETHOD(GetEmbellishmentLength)(THIS_ DWORD dwType, DWORD dwLevel, DWORD *pdwMin, DWORD *pdwMax) PURE;\n    STDMETHOD(GetTempo)(THIS_ double *pTempo) PURE;\n    /*** IDirectMusicStyle8 methods ***/\n    STDMETHOD(EnumPattern)(THIS_ DWORD dwIndex, DWORD dwPatternType, WCHAR *pwszName) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicStyle8_QueryInterface(p,a,b)             (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicStyle8_AddRef(p)                         (p)->lpVtbl->AddRef(p)\n#define IDirectMusicStyle8_Release(p)                        (p)->lpVtbl->Release(p)\n/*** IDirectMusicStyle methods ***/\n#define IDirectMusicStyle8_GetBand(p,a,b)                    (p)->lpVtbl->GetBand(p,a,b)\n#define IDirectMusicStyle8_EnumBand(p,a,b)                   (p)->lpVtbl->EnumBand(p,a,b)\n#define IDirectMusicStyle8_GetDefaultBand(p,a)               (p)->lpVtbl->GetDefaultBand(p,a)\n#define IDirectMusicStyle8_EnumMotif(p,a,b)                  (p)->lpVtbl->EnumMotif(p,a,b)\n#define IDirectMusicStyle8_GetMotif(p,a,b)                   (p)->lpVtbl->GetMotif(p,a,b)\n#define IDirectMusicStyle8_GetDefaultChordMap(p,a)           (p)->lpVtbl->GetDefaultChordMap(p,a)\n#define IDirectMusicStyle8_EnumChordMap(p,a,b)               (p)->lpVtbl->EnumChordMap(p,a,b)\n#define IDirectMusicStyle8_GetChordMap(p,a,b)                (p)->lpVtbl->GetChordMap(p,a,b)\n#define IDirectMusicStyle8_GetTimeSignature(p,a)             (p)->lpVtbl->GetTimeSignature(p,a)\n#define IDirectMusicStyle8_GetEmbellishmentLength(p,a,b,c,d) (p)->lpVtbl->GetEmbellishmentLength(p,a,b,c,d)\n#define IDirectMusicStyle8_GetTempo(p,a)                     (p)->lpVtbl->GetTempo(p,a)\n/*** IDirectMusicStyle8 methods ***/\n#define IDirectMusicStyle8_EnumPattern(p,a,b,c)              (p)->lpVtbl->EnumPattern(p,a,b,c)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicChordMap interface\n */\n#define INTERFACE IDirectMusicChordMap\nDECLARE_INTERFACE_(IDirectMusicChordMap,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicChordMap methods ***/\n    STDMETHOD(GetScale)(THIS_ DWORD *pdwScale) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicChordMap_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicChordMap_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectMusicChordMap_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectMusicChordMap methods ***/\n#define IDirectMusicChordMap_GetScale(p,a)         (p)->lpVtbl->GetScale(p,a)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicComposer interface\n */\n#define INTERFACE IDirectMusicComposer\nDECLARE_INTERFACE_(IDirectMusicComposer,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicComposer methods ***/\n    STDMETHOD(ComposeSegmentFromTemplate)(THIS_ IDirectMusicStyle *pStyle, IDirectMusicSegment *pTemplate, WORD wActivity, IDirectMusicChordMap *pChordMap, IDirectMusicSegment **ppSegment) PURE;\n    STDMETHOD(ComposeSegmentFromShape)(THIS_ IDirectMusicStyle *pStyle, WORD wNumMeasures, WORD wShape, WORD wActivity, BOOL fIntro, BOOL fEnd, IDirectMusicChordMap *pChordMap, IDirectMusicSegment **ppSegment) PURE;\n    STDMETHOD(ComposeTransition)(THIS_ IDirectMusicSegment *pFromSeg, IDirectMusicSegment *pToSeg, MUSIC_TIME mtTime, WORD wCommand, DWORD dwFlags, IDirectMusicChordMap *pChordMap, IDirectMusicSegment **ppTransSeg) PURE;\n    STDMETHOD(AutoTransition)(THIS_ IDirectMusicPerformance *pPerformance, IDirectMusicSegment *pToSeg, WORD wCommand, DWORD dwFlags, IDirectMusicChordMap *pChordMap, IDirectMusicSegment **ppTransSeg, IDirectMusicSegmentState **ppToSegState, IDirectMusicSegmentState **ppTransSegState) PURE;\n    STDMETHOD(ComposeTemplateFromShape)(THIS_ WORD wNumMeasures, WORD wShape, BOOL fIntro, BOOL fEnd, WORD wEndLength, IDirectMusicSegment **ppTemplate) PURE;\n    STDMETHOD(ChangeChordMap)(THIS_ IDirectMusicSegment *pSegment, BOOL fTrackScale, IDirectMusicChordMap *pChordMap) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicComposer_QueryInterface(p,a,b)                      (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicComposer_AddRef(p)                                  (p)->lpVtbl->AddRef(p)\n#define IDirectMusicComposer_Release(p)                                 (p)->lpVtbl->Release(p)\n/*** IDirectMusicComposer methods ***/\n#define IDirectMusicComposer_ComposeSegmentFromTemplate(p,a,b,c,d,e)    (p)->lpVtbl->ComposeSegmentFromTemplate(p,a,b,c,d,e)\n#define IDirectMusicComposer_ComposeSegmentFromShape(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->ComposeSegmentFromShape(p,a,b,c,d,e,f,g,h)\n#define IDirectMusicComposer_ComposeTransition(p,a,b,c,d,e,f,g)         (p)->lpVtbl->ComposeTransition(p,a,b,c,d,e,f,g)\n#define IDirectMusicComposer_AutoTransition(p,a,b,c,d,e,f,g,h)          (p)->lpVtbl->AutoTransition(p,a,b,c,d,e,f,g,h)\n#define IDirectMusicComposer_ComposeTemplateFromShape(p,a,b,c,d,e,f)    (p)->lpVtbl->ComposeTemplateFromShape(p,a,b,c,d,e,f)\n#define IDirectMusicComposer_ChangeChordMap(p,a,b,c)                    (p)->lpVtbl->ChangeChordMap(p,a,b,c)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicPatternTrack interface\n */\n#define INTERFACE IDirectMusicPatternTrack\nDECLARE_INTERFACE_(IDirectMusicPatternTrack,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicPatternTrack methods ***/\n    STDMETHOD(CreateSegment)(THIS_ IDirectMusicStyle *pStyle, IDirectMusicSegment **ppSegment) PURE;\n    STDMETHOD(SetVariation)(THIS_ IDirectMusicSegmentState *pSegState, DWORD dwVariationFlags, DWORD dwPart) PURE;\n    STDMETHOD(SetPatternByName)(THIS_ IDirectMusicSegmentState *pSegState, WCHAR *wszName, IDirectMusicStyle *pStyle, DWORD dwPatternType, DWORD *pdwLength) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicPatternTrack_QueryInterface(p,a,b)         (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicPatternTrack_AddRef(p)                     (p)->lpVtbl->AddRef(p)\n#define IDirectMusicPatternTrack_Release(p)                    (p)->lpVtbl->Release(p)\n/*** IDirectMusicPatternTrack methods ***/\n#define IDirectMusicPatternTrack_CreateSegment(p,a,b)          (p)->lpVtbl->CreateSegment(p,a,b)\n#define IDirectMusicPatternTrack_SetVariation(p,a,b,c)         (p)->lpVtbl->SetVariation(p,a,b,c)\n#define IDirectMusicPatternTrack_SetPatternByName(p,a,b,c,d,e) (p)->lpVtbl->SetPatternByName(p,a,b,c,d,e)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicScript interface\n */\n#define INTERFACE IDirectMusicScript\nDECLARE_INTERFACE_(IDirectMusicScript,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicScript methods ***/\n    STDMETHOD(Init)(THIS_ IDirectMusicPerformance *pPerformance, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;\n    STDMETHOD(CallRoutine)(THIS_ WCHAR *pwszRoutineName, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;\n    STDMETHOD(SetVariableVariant)(THIS_ WCHAR *pwszVariableName, VARIANT varValue, BOOL fSetRef, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;\n    STDMETHOD(GetVariableVariant)(THIS_ WCHAR *pwszVariableName, VARIANT *pvarValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;\n    STDMETHOD(SetVariableNumber)(THIS_ WCHAR *pwszVariableName, LONG lValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;\n    STDMETHOD(GetVariableNumber)(THIS_ WCHAR *pwszVariableName, LONG *plValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;\n    STDMETHOD(SetVariableObject)(THIS_ WCHAR *pwszVariableName, IUnknown *punkValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;\n    STDMETHOD(GetVariableObject)(THIS_ WCHAR *pwszVariableName, REFIID riid, LPVOID *ppv, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;\n    STDMETHOD(EnumRoutine)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;\n    STDMETHOD(EnumVariable)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicScript_QueryInterface(p,a,b)               (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicScript_AddRef(p)                           (p)->lpVtbl->AddRef(p)\n#define IDirectMusicScript_Release(p)                          (p)->lpVtbl->Release(p)\n/*** IDirectMusicScript methods ***/\n#define IDirectMusicPatternTrack_Init(p,a,b)                   (p)->lpVtbl->Init(p,a,b)\n#define IDirectMusicPatternTrack_CallRoutine(p,a,b)            (p)->lpVtbl->CallRoutine(p,a,b)\n#define IDirectMusicPatternTrack_SetVariableVariant(p,a,b,c,d) (p)->lpVtbl->SetVariableVariant(p,a,b,c,d)\n#define IDirectMusicPatternTrack_GetVariableVariant(p,a,b,c)   (p)->lpVtbl->GetVariableVariant(p,a,b,c)\n#define IDirectMusicPatternTrack_SetVariableNumber(p,a,b,c)    (p)->lpVtbl->SetVariableNumber(p,a,b,c)\n#define IDirectMusicPatternTrack_GetVariableNumber(p,a,b,c)    (p)->lpVtbl->GetVariableNumber(p,a,b,c)\n#define IDirectMusicPatternTrack_SetVariableObject(p,a,b,c)    (p)->lpVtbl->SetVariableObject(p,a,b,c)\n#define IDirectMusicPatternTrack_GetVariableObject(p,a,b,c,d)  (p)->lpVtbl->GetVariableObject(p,a,b,c,d)\n#define IDirectMusicPatternTrack_EnumRoutine(p,a,b)            (p)->lpVtbl->EnumRoutine(p,a,b)\n#define IDirectMusicPatternTrack_EnumVariable(p,a,b)           (p)->lpVtbl->EnumVariable(p,a,b)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicContainer interface\n */\n#define INTERFACE IDirectMusicContainer\nDECLARE_INTERFACE_(IDirectMusicContainer,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicContainer methods ***/\n    STDMETHOD(EnumObject)(THIS_ REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc, WCHAR *pwszAlias) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicContainer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicContainer_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectMusicContainer_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectMusicContainer methods ***/\n#define IDirectMusicContainer_EnumObject(p,a,b,c,d) (p)->lpVtbl->EnumObject(p,a,b,c,d)\n#endif\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#include <poppack.h>\n\n#endif /* __WINE_DMUSIC_PERFORMANCE_H */\n"
  },
  {
    "path": "wine/windows/dmusics.h",
    "content": "/*\n *  DirectMusic Software Synth Definitions\n *\n *  Copyright (C) 2003-2004 Rok Mandeljc\n *\n *  This program is free software; you can redistribute it and/or\n *  modify it under the terms of the GNU Lesser General Public\n *  License as published by the Free Software Foundation; either\n *  version 2.1 of the License, or (at your option) any later version.\n *\n *  This program is distributed in the hope that it will be useful,\n *  but WITHOUT ANY WARRANTY; without even the implied warranty of\n *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n *  Lesser General Public License for more details.\n *\n *  You should have received a copy of the GNU Lesser General Public\n *  License along with this program; if not, write to the Free Software\n *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DMUSIC_SOFTWARESYNTH_H\n#define __WINE_DMUSIC_SOFTWARESYNTH_H\n\n#include <dmusicc.h>\n\n/*****************************************************************************\n * Registry path\n */\n#define REGSTR_PATH_SOFTWARESYNTHS \"Software\\\\Microsoft\\\\DirectMusic\\\\SoftwareSynths\"\n\n\n/*****************************************************************************\n * Predeclare the interfaces\n */\n/* IIDs */\nDEFINE_GUID(IID_IDirectMusicSynth,     0x09823661,0x5c85,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);\nDEFINE_GUID(IID_IDirectMusicSynth8,    0x53cab625,0x2711,0x4c9f,0x9d,0xe7,0x1b,0x7f,0x92,0x5f,0x6f,0xc8);\nDEFINE_GUID(IID_IDirectMusicSynthSink, 0x09823663,0x5c85,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);\n\n/* typedef definitions */\ntypedef struct IDirectMusicSynth *LPDIRECTMUSICSYNTH;\ntypedef struct IDirectMusicSynth8 *LPDIRECTMUSICSYNTH8;\ntypedef struct IDirectMusicSynthSink *LPDIRECTMUSICSYNTHSINK;\n\n/* GUIDs - property set */\nDEFINE_GUID(GUID_DMUS_PROP_SetSynthSink,   0x0a3a5ba5,0x37b6,0x11d2,0xb9,0xf9,0x00,0x00,0xf8,0x75,0xac,0x12);\nDEFINE_GUID(GUID_DMUS_PROP_SinkUsesDSound, 0xbe208857,0x8952,0x11d2,0xba,0x1c,0x00,0x00,0xf8,0x75,0xac,0x12);\n\n\n/*****************************************************************************\n * Flags\n */\n#define REFRESH_F_LASTBUFFER        0x1\n\n\n/*****************************************************************************\n * Structures\n */\n#ifndef _DMUS_VOICE_STATE_DEFINED\n#define _DMUS_VOICE_STATE_DEFINED\n\n/* typedef definition */\ntypedef struct _DMUS_VOICE_STATE DMUS_VOICE_STATE, *LPDMUS_VOICE_STATE;\n\n/* actual structure */\nstruct _DMUS_VOICE_STATE {\n\tBOOL            bExists;\n\tSAMPLE_POSITION spPosition;\n}; \n#endif /* _DMUS_VOICE_STATE_DEFINED */\n\n\n/*****************************************************************************\n * IDirectMusicSynth interface\n */\n#define INTERFACE IDirectMusicSynth\nDECLARE_INTERFACE_(IDirectMusicSynth,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicSynth methods ***/\n    STDMETHOD(Open)(THIS_ LPDMUS_PORTPARAMS pPortParams) PURE;\n    STDMETHOD(Close)(THIS) PURE;\n    STDMETHOD(SetNumChannelGroups)(THIS_ DWORD dwGroups) PURE;\n    STDMETHOD(Download)(THIS_ LPHANDLE phDownload, LPVOID pvData, LPBOOL pbFree) PURE;\n    STDMETHOD(Unload)(THIS_ HANDLE hDownload, HRESULT (CALLBACK* lpFreeHandle)(HANDLE,HANDLE), HANDLE hUserData) PURE;\n    STDMETHOD(PlayBuffer)(THIS_ REFERENCE_TIME rt, LPBYTE pbBuffer, DWORD cbBuffer) PURE;\n    STDMETHOD(GetRunningStats)(THIS_ LPDMUS_SYNTHSTATS pStats) PURE;\n    STDMETHOD(GetPortCaps)(THIS_ LPDMUS_PORTCAPS pCaps) PURE;\n    STDMETHOD(SetMasterClock)(THIS_ IReferenceClock *pClock) PURE;\n    STDMETHOD(GetLatencyClock)(THIS_ IReferenceClock **ppClock) PURE;\n    STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE;\n    STDMETHOD(SetSynthSink)(THIS_ struct IDirectMusicSynthSink *pSynthSink) PURE;\n    STDMETHOD(Render)(THIS_ short *pBuffer, DWORD dwLength, LONGLONG llPosition) PURE;\n    STDMETHOD(SetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) PURE;\n    STDMETHOD(GetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) PURE;\n    STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSiz) PURE;\n    STDMETHOD(GetAppend)(THIS_ DWORD *pdwAppend) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicSynth_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicSynth_AddRef(p)                   (p)->lpVtbl->AddRef(p)\n#define IDirectMusicSynth_Release(p)                  (p)->lpVtbl->Release(p)\n/*** IDirectMusicSynth methods ***/\n#define IDirectMusicSynth_Open(p,a)                   (p)->lpVtbl->Open(p,a)\n#define IDirectMusicSynth_Close(p)                    (p)->lpVtbl->Close(p)\n#define IDirectMusicSynth_SetNumChannelGroups(p,a)    (p)->lpVtbl->SetNumChannelGroups(p,a)\n#define IDirectMusicSynth_Download(p,a,b,c)           (p)->lpVtbl->Download(p,a,b,c)\n#define IDirectMusicSynth_Unload(p,a,b,c)             (p)->lpVtbl->Unload(p,a,b,c)\n#define IDirectMusicSynth_PlayBuffer(p,a,b,c)         (p)->lpVtbl->PlayBuffer(p,a,b,c)\n#define IDirectMusicSynth_GetRunningStats(p,a)        (p)->lpVtbl->GetRunningStats(p,a)\n#define IDirectMusicSynth_GetPortCaps(p,a)            (p)->lpVtbl->GetPortCaps(p,a)\n#define IDirectMusicSynth_SetMasterClock(p,a)         (p)->lpVtbl->SetMasterClock(p,a)\n#define IDirectMusicSynth_GetLatencyClock(p,a)        (p)->lpVtbl->GetLatencyClock(p,a)\n#define IDirectMusicSynth_Activate(p,a)               (p)->lpVtbl->Activate(p,a)\n#define IDirectMusicSynth_SetSynthSink(p,a)           (p)->lpVtbl->SetSynthSink(p,a)\n#define IDirectMusicSynth_Render(p,a,b,c)             (p)->lpVtbl->Render(p,a,b,c)\n#define IDirectMusicSynth_SetChannelPriority(p,a,b,c) (p)->lpVtbl->SetChannelPriority(p,a,b,c)\n#define IDirectMusicSynth_GetChannelPriority(p,a,b,c) (p)->lpVtbl->GetChannelPriority(p,a,b,c)\n#define IDirectMusicSynth_GetFormat(p,a,b)            (p)->lpVtbl->GetFormat(p,a,b)\n#define IDirectMusicSynth_GetAppend(p,a)              (p)->lpVtbl->GetAppend(p,a)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicSynth8 interface\n */\n#define INTERFACE IDirectMusicSynth8\nDECLARE_INTERFACE_(IDirectMusicSynth8,IDirectMusicSynth)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicSynth methods ***/\n    STDMETHOD(Open)(THIS_ LPDMUS_PORTPARAMS pPortParams) PURE;\n    STDMETHOD(Close)(THIS) PURE;\n    STDMETHOD(SetNumChannelGroups)(THIS_ DWORD dwGroups) PURE;\n    STDMETHOD(Download)(THIS_ LPHANDLE phDownload, LPVOID pvData, LPBOOL pbFree) PURE;\n    STDMETHOD(Unload)(THIS_ HANDLE hDownload, HRESULT (CALLBACK* lpFreeHandle)(HANDLE,HANDLE), HANDLE hUserData) PURE;\n    STDMETHOD(PlayBuffer)(THIS_ REFERENCE_TIME rt, LPBYTE pbBuffer, DWORD cbBuffer) PURE;\n    STDMETHOD(GetRunningStats)(THIS_ LPDMUS_SYNTHSTATS pStats) PURE;\n    STDMETHOD(GetPortCaps)(THIS_ LPDMUS_PORTCAPS pCaps) PURE;\n    STDMETHOD(SetMasterClock)(THIS_ IReferenceClock *pClock) PURE;\n    STDMETHOD(GetLatencyClock)(THIS_ IReferenceClock **ppClock) PURE;\n    STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE;\n    STDMETHOD(SetSynthSink)(THIS_ struct IDirectMusicSynthSink *pSynthSink) PURE;\n    STDMETHOD(Render)(THIS_ short *pBuffer, DWORD dwLength, LONGLONG llPosition) PURE;\n    STDMETHOD(SetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) PURE;\n    STDMETHOD(GetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) PURE;\n    STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSiz) PURE;\n    STDMETHOD(GetAppend)(THIS_ DWORD *pdwAppend) PURE;\n    /*** IDirectMusicSynth8 methods ***/\n    STDMETHOD(PlayVoice)(THIS_ REFERENCE_TIME rt, DWORD dwVoiceId, DWORD dwChannelGroup, DWORD dwChannel, DWORD dwDLId, LONG prPitch, LONG vrVolume, SAMPLE_TIME stVoiceStart, SAMPLE_TIME stLoopStart, SAMPLE_TIME stLoopEnd) PURE;\n    STDMETHOD(StopVoice)(THIS_ REFERENCE_TIME rt, DWORD dwVoiceId) PURE;\n    STDMETHOD(GetVoiceState)(THIS_ DWORD dwVoice[], DWORD cbVoice, DMUS_VOICE_STATE dwVoiceState[]) PURE;\n    STDMETHOD(Refresh)(THIS_ DWORD dwDownloadID, DWORD dwFlags) PURE;\n    STDMETHOD(AssignChannelToBuses)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwBuses, DWORD cBuses) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicSynth8_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicSynth8_AddRef(p)                        (p)->lpVtbl->AddRef(p)\n#define IDirectMusicSynth8_Release(p)                       (p)->lpVtbl->Release(p)\n/*** IDirectMusicSynth methods ***/\n#define IDirectMusicSynth8_Open(p,a)                        (p)->lpVtbl->Open(p,a)\n#define IDirectMusicSynth8_Close(p)                         (p)->lpVtbl->Close(p)\n#define IDirectMusicSynth8_SetNumChannelGroups(p,a)         (p)->lpVtbl->SetNumChannelGroups(p,a)\n#define IDirectMusicSynth8_Download(p,a,b,c)                (p)->lpVtbl->Download(p,a,b,c)\n#define IDirectMusicSynth8_Unload(p,a,b,c)                  (p)->lpVtbl->Unload(p,a,b,c)\n#define IDirectMusicSynth8_PlayBuffer(p,a,b,c)              (p)->lpVtbl->PlayBuffer(p,a,b,c)\n#define IDirectMusicSynth8_GetRunningStats(p,a)             (p)->lpVtbl->GetRunningStats(p,a)\n#define IDirectMusicSynth8_GetPortCaps(p,a)                 (p)->lpVtbl->GetPortCaps(p,a)\n#define IDirectMusicSynth8_SetMasterClock(p,a)              (p)->lpVtbl->SetMasterClock(p,a)\n#define IDirectMusicSynth8_GetLatencyClock(p,a)             (p)->lpVtbl->GetLatencyClock(p,a)\n#define IDirectMusicSynth8_Activate(p,a)                    (p)->lpVtbl->Activate(p,a)\n#define IDirectMusicSynth8_SetSynthSink(p,a)                (p)->lpVtbl->SetSynthSink(p,a)\n#define IDirectMusicSynth8_Render(p,a,b,c)                  (p)->lpVtbl->Render(p,a,b,c)\n#define IDirectMusicSynth8_SetChannelPriority(p,a,b,c)      (p)->lpVtbl->SetChannelPriority(p,a,b,c)\n#define IDirectMusicSynth8_GetChannelPriority(p,a,b,c)      (p)->lpVtbl->GetChannelPriority(p,a,b,c)\n#define IDirectMusicSynth8_GetFormat(p,a,b)                 (p)->lpVtbl->GetFormat(p,a,b)\n#define IDirectMusicSynth8_GetAppend(p,a)                   (p)->lpVtbl->GetAppend(p,a)\n/*** IDirectMusicSynth8 methods ***/\n#define IDirectMusicSynth8_PlayVoice(p,a,b,c,d,e,f,g,h,i,j) (p)->lpVtbl->PlayVoice(p,a,b,c,d,e,f,g,h,i,j)\n#define IDirectMusicSynth8_StopVoice(p,a,b)                 (p)->lpVtbl->StopVoice(p,a,b)\n#define IDirectMusicSynth8_GetVoiceState(p,a,b,c)           (p)->lpVtbl->GetVoiceState(p,a,b,c)\n#define IDirectMusicSynth8_Refresh(p,a,b)                   (p)->lpVtbl->Refresh(p,a,b)\n#define IDirectMusicSynth8_AssignChannelToBuses(p,a,b,c,d)  (p)->lpVtbl->AssignChannelToBuses(p,a,b,c,d)\n#endif\n\n\n/*****************************************************************************\n * IDirectMusicSynthSink interface\n */\n#define INTERFACE IDirectMusicSynthSink\nDECLARE_INTERFACE_(IDirectMusicSynthSink,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectMusicSynthSink methods ***/\n    STDMETHOD(Init)(THIS_ IDirectMusicSynth *pSynth) PURE;\n    STDMETHOD(SetMasterClock)(THIS_ IReferenceClock *pClock) PURE;\n    STDMETHOD(GetLatencyClock)(THIS_ IReferenceClock **ppClock) PURE;\n    STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE;\n    STDMETHOD(SampleToRefTime)(THIS_ LONGLONG llSampleTime, REFERENCE_TIME *prfTime) PURE;\n    STDMETHOD(RefTimeToSample)(THIS_ REFERENCE_TIME rfTime, LONGLONG *pllSampleTime) PURE;\n    STDMETHOD(SetDirectSound)(THIS_ LPDIRECTSOUND pDirectSound, LPDIRECTSOUNDBUFFER pDirectSoundBuffer) PURE;\n    STDMETHOD(GetDesiredBufferSize)(THIS_ LPDWORD pdwBufferSizeInSamples) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectMusicSynthSink_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectMusicSynthSink_AddRef(p)                  (p)->lpVtbl->AddRef(p)\n#define IDirectMusicSynthSink_Release(p)                 (p)->lpVtbl->Release(p)\n/*** IDirectMusicSynth methods ***/\n#define IDirectMusicSynthSink_Init(p,a)                  (p)->lpVtbl->Init(p,a)\n#define IDirectMusicSynthSink_SetMasterClock(p,a)        (p)->lpVtbl->SetMasterClock(p,a)\n#define IDirectMusicSynthSink_GetLatencyClock(p,a)       (p)->lpVtbl->GetLatencyClock(p,a)\n#define IDirectMusicSynthSink_Activate(p,a)              (p)->lpVtbl->Activate(p,a)\n#define IDirectMusicSynthSink_SampleToRefTime(p,a,b)     (p)->lpVtbl->SampleToRefTime(p,a,b)\n#define IDirectMusicSynthSink_RefTimeToSample(p,a,b)     (p)->lpVtbl->RefTimeToSample(p,a,b)\n#define IDirectMusicSynthSink_SetDirectSound(p,a,b)      (p)->lpVtbl->SetDirectSound(p,a,b)\n#define IDirectMusicSynthSink_GetDesiredBufferSize(p,a)  (p)->lpVtbl->GetDesiredBufferSize(p,a)\n#endif\n\n#endif /* __WINE_DMUSIC_SOFTWARESYNTH_H */\n"
  },
  {
    "path": "wine/windows/docobj.idl",
    "content": "/*\n * Copyright (C) 1999 Paul Quinn\n * Copyright (C) 2003 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"ocidl.idl\";\nimport \"objidl.idl\";\nimport \"oleidl.idl\";\nimport \"oaidl.idl\";\nimport \"servprov.idl\";\n\n\ninterface IOleDocumentView;\ninterface IEnumOleDocumentViews;\n\n\n/*****************************************************************************\n * IOleDocument interface\n */\n[\n    object,\n    uuid(b722bcc5-4e68-101b-a2bc-00aa00404770),\n    pointer_default(unique)\n]\ninterface IOleDocument : IUnknown\n{\n    typedef [unique] IOleDocument *LPOLEDOCUMENT;\n\n    typedef enum\n    {\n        DOCMISC_CANCREATEMULTIPLEVIEWS = 1,\n        DOCMISC_SUPPORTCOMPLEXRECTANGLES = 2,\n        DOCMISC_CANTOPENEDIT = 4,\n        DOCMISC_NOFILESUPPORT = 8\n    } DOCMISC;\n\n    HRESULT CreateView(\n        [in, unique] IOleInPlaceSite *pIPSite,\n        [in, unique] IStream *pstm,\n        [in] DWORD dwReserved,\n        [out] IOleDocumentView **ppView);\n\n    HRESULT GetDocMiscStatus(\n        [out] DWORD *pdwStatus);\n\n    HRESULT EnumViews(\n        [out] IEnumOleDocumentViews **ppEnum,\n        [out] IOleDocumentView **ppView);\n}\n\n\n/*****************************************************************************\n * IOleDocumentSite interface\n */\n[\n    object,\n    uuid(b722bcc7-4e68-101b-a2bc-00aa00404770),\n    pointer_default(unique)\n]\ninterface IOleDocumentSite : IUnknown\n{\n    typedef [unique] IOleDocumentSite *LPOLEDOCUMENTSITE;\n\n    HRESULT ActivateMe( [in] IOleDocumentView *pViewToActivate );\n}\n\n\n/*****************************************************************************\n * IOleDocumentView interface\n */\n[\n    object,\n    uuid(b722bcc6-4e68-101b-a2bc-00aa00404770),\n    pointer_default(unique)\n]\ninterface IOleDocumentView : IUnknown\n{\n    typedef [unique] IOleDocumentView *LPOLEDOCUMENTVIEW;\n\n    HRESULT SetInPlaceSite( [in, unique] IOleInPlaceSite *pIPSite );\n\n    HRESULT GetInPlaceSite( [out] IOleInPlaceSite **ppIPSite );\n\n    HRESULT GetDocument( [out] IUnknown **ppunk );\n\n    HRESULT SetRect( [in] LPRECT prcView );\n\n    HRESULT GetRect( [out] LPRECT prcView );\n\n    HRESULT SetRectComplex(\n        [in, unique] LPRECT prcView,\n        [in, unique] LPRECT prcHScroll,\n        [in, unique] LPRECT prcVScroll,\n        [in, unique] LPRECT prcSizeBox);\n\n    HRESULT Show( [in] BOOL fShow );\n\n    HRESULT UIActivate( [in] BOOL fUIActivate );\n\n    HRESULT Open();\n\n    HRESULT CloseView( [in] DWORD dwReserved );\n\n    HRESULT SaveViewState( [in] LPSTREAM pstm );\n\n    HRESULT ApplyViewState( [in] LPSTREAM pstm );\n\n    HRESULT Clone(\n        [in] IOleInPlaceSite *pIPSiteNew,\n        [out] IOleDocumentView **ppViewNew);\n}\n\n\n/*****************************************************************************\n * IEnumOleDocumentViews interface\n */\n[\n    object,\n    uuid(b722bcc8-4e68-101b-a2bc-00aa00404770),\n    pointer_default(unique)\n]\ninterface IEnumOleDocumentViews : IUnknown\n{\n    typedef [unique] IEnumOleDocumentViews *LPENUMOLEDOCUMENTVIEWS;\n\n    [local]\n    HRESULT Next(\n        [in] ULONG cViews,\n        [out] IOleDocumentView **rgpView,\n        [out] ULONG *pcFetched);\n\n    [call_as(Next)]\n    HRESULT RemoteNext(\n        [in] ULONG cViews,\n        [out, size_is(cViews), length_is(*pcFetched)] IOleDocumentView **rgpView,\n        [out] ULONG *pcFetched);\n\n    HRESULT Skip( [in] ULONG cViews );\n\n    HRESULT Reset();\n\n    HRESULT Clone( [out] IEnumOleDocumentViews **ppEnum );\n}\n\n\n/*****************************************************************************\n * IOleCommandTarget interface\n */\n[\n    object,\n    uuid(b722bccb-4e68-101b-a2bc-00aa00404770),\n    pointer_default(unique)\n]\ninterface IOleCommandTarget : IUnknown\n{\n    typedef [unique] IOleCommandTarget *LPOLECOMMANDTARGET;\n\n    typedef enum OLECMDF\n    {\n        OLECMDF_SUPPORTED = 0x1,\n        OLECMDF_ENABLED = 0x2,\n        OLECMDF_LATCHED = 0x4,\n        OLECMDF_NINCHED = 0x8,\n        OLECMDF_INVISIBLE = 0x10,\n        OLECMDF_DEFHIDEONCTXTMENU = 0x20\n    } OLECMDF;\n\n    typedef struct _tagOLECMD\n    {\n        ULONG cmdID;\n        DWORD cmdf;\n    } OLECMD;\n\n    typedef struct _tagOLECMDTEXT\n    {\n        DWORD cmdtextf;\n        ULONG cwActual;\n        ULONG cwBuf;\n        [size_is(cwBuf)] WCHAR rgwz[];\n    } OLECMDTEXT;\n\n    typedef enum OLECMDTEXTF\n    {\n        OLECMDTEXTF_NONE = 0,\n        OLECMDTEXTF_NAME = 1,\n        OLECMDTEXTF_STATUS = 2\n    } OLECMDTEXTF;\n\n    typedef enum OLECMDEXECOPT\n    {\n        OLECMDEXECOPT_DODEFAULT = 0,\n        OLECMDEXECOPT_PROMPTUSER = 1,\n        OLECMDEXECOPT_DONTPROMPTUSER = 2,\n        OLECMDEXECOPT_SHOWHELP = 3\n    } OLECMDEXECOPT;\n\n    typedef enum OLECMDID\n    {\n        OLECMDID_OPEN = 1,\n        OLECMDID_NEW = 2,\n        OLECMDID_SAVE = 3,\n        OLECMDID_SAVEAS = 4,\n        OLECMDID_SAVECOPYAS = 5,\n        OLECMDID_PRINT = 6,\n        OLECMDID_PRINTPREVIEW = 7,\n        OLECMDID_PAGESETUP = 8,\n        OLECMDID_SPELL = 9,\n        OLECMDID_PROPERTIES = 10,\n        OLECMDID_CUT = 11,\n        OLECMDID_COPY = 12,\n        OLECMDID_PASTE = 13,\n        OLECMDID_PASTESPECIAL = 14,\n        OLECMDID_UNDO = 15,\n        OLECMDID_REDO = 16,\n        OLECMDID_SELECTALL = 17,\n        OLECMDID_CLEARSELECTION = 18,\n        OLECMDID_ZOOM = 19,\n        OLECMDID_GETZOOMRANGE = 20,\n        OLECMDID_UPDATECOMMANDS = 21,\n        OLECMDID_REFRESH = 22,\n        OLECMDID_STOP = 23,\n        OLECMDID_HIDETOOLBARS = 24,\n        OLECMDID_SETPROGRESSMAX = 25,\n        OLECMDID_SETPROGRESSPOS = 26,\n        OLECMDID_SETPROGRESSTEXT = 27,\n        OLECMDID_SETTITLE = 28,\n        OLECMDID_SETDOWNLOADSTATE = 29,\n        OLECMDID_STOPDOWNLOAD = 30,\n        OLECMDID_ONTOOLBARACTIVATED = 31,\n        OLECMDID_FIND = 32,\n        OLECMDID_DELETE = 33,\n        OLECMDID_HTTPEQUIV = 34,\n        OLECMDID_HTTPEQUIV_DONE = 35,\n        OLECMDID_ENABLE_INTERACTION = 36,\n        OLECMDID_ONUNLOAD = 37,\n        OLECMDID_PROPERTYBAG2 = 38,\n        OLECMDID_PREREFRESH = 39,\n        /* iexplorer uses ... 44 */\n        OLECMDID_SHOWSCRIPTERROR = 40,\n        OLECMDID_SHOWMESSAGE = 41,\n        OLECMDID_SHOWFIND = 42,\n        OLECMDID_SHOWPAGESETUP = 43,\n        OLECMDID_SHOWPRINT = 44,\n        OLECMDID_CLOSE = 45,\n        OLECMDID_ALLOWUILESSSAVEAS = 46,\n        OLECMDID_DONTDOWNLOADCSS = 47,\n        OLECMDID_UPDATEPAGESTATUS = 48,\n        OLECMDID_PRINT2 = 49,\n        OLECMDID_PRINTPREVIEW2 = 50,\n        OLECMDID_SETPRINTTEMPLATE = 51,\n        OLECMDID_GETPRINTTEMPLATE = 52,\n        OLECMDID_PAGEACTIONBLOCKED = 55,\n        OLECMDID_PAGEACTIONUIQUERY = 56,\n        OLECMDID_FOCUSVIEWCONTROLS = 57,\n        OLECMDID_FOCUSVIEWCONTROLSQUERY = 58,\n        OLECMDID_SHOWPAGEACTIONMENU = 59,\n        OLECMDID_ADDTRAVELENTRY = 60,\n        OLECMDID_UPDATETRAVELENTRY = 61,\n        OLECMDID_UPDATEBACKFORWARDSTATE = 62,\n        OLECMDID_OPTICAL_ZOOM = 63,\n        OLECMDID_OPTICAL_GETZOOMRANGE = 64,\n        OLECMDID_WINDOWSTATECHANGED = 65,\n        OLECMDID_ACTIVEXINSTALLSCOPE = 66,\n        OLECMDID_UPDATETRAVELENTRY_DATARECOVERY = 67,\n        OLECMDID_SHOWTASKDLG = 68,\n        OLECMDID_POPSTATEEVENT = 69,\n        OLECMDID_VIEWPORT_MODE = 70,\n        OLECMDID_LAYOUT_VIEWPORT_WIDTH = 71,\n        OLECMDID_VISUAL_VIEWPORT_EXCLUDE_BOTTOM = 72,\n        OLECMDID_USER_OPTICAL_ZOOM = 73,\n        OLECMDID_PAGEAVAILABLE = 74,\n        OLECMDID_GETUSERSCALABLE = 75,\n        OLECMDID_UPDATE_CARET = 76,\n        OLECMDID_ENABLE_VISIBILITY = 77,\n        OLECMDID_MEDIA_PLAYBACK = 78\n    } OLECMDID;\n\n    HRESULT QueryStatus(\n        [in, unique] const GUID *pguidCmdGroup,\n        [in] ULONG cCmds,\n        [in, out, size_is(cCmds)] OLECMD prgCmds[],\n        [in, out, unique] OLECMDTEXT *pCmdText);\n\n    HRESULT Exec(\n        [in, unique] const GUID *pguidCmdGroup,\n        [in] DWORD nCmdID,\n        [in] DWORD nCmdexecopt,\n        [in, unique] VARIANT *pvaIn,\n        [in, out, unique] VARIANT *pvaOut);\n}\n\n\n/*****************************************************************************\n * IContinueCallback interface\n */\n[\n   object,\n   uuid(b722bcca-4e68-101b-a2bc-00aa00404770),\n   pointer_default(unique)\n]\ninterface IContinueCallback : IUnknown\n{\n    typedef [unique] IContinueCallback *LPCONTINUECALLBACK;\n\n    HRESULT FContinue();\n\n    HRESULT FContinuePrinting(\n        [in] LONG nCntPrinted,\n        [in] LONG nCurPage,\n        [in, unique] WCHAR *pwszPrintStatus);\n}\n\n\n/*****************************************************************************\n * IPrint interface\n */\n[\n   object,\n   uuid(b722bcc9-4e68-101b-a2bc-00aa00404770),\n   pointer_default(unique)\n]\ninterface IPrint : IUnknown\n{\n    typedef [unique] IPrint *LPPRINT;\n\n    typedef enum\n    {\n        PRINTFLAG_MAYBOTHERUSER = 1,\n        PRINTFLAG_PROMPTUSER  = 2,\n        PRINTFLAG_USERMAYCHANGEPRINTER  = 4,\n        PRINTFLAG_RECOMPOSETODEVICE = 8,\n        PRINTFLAG_DONTACTUALLYPRINT = 16,\n        PRINTFLAG_FORCEPROPERTIES = 32,\n        PRINTFLAG_PRINTTOFILE = 64\n    } PRINTFLAG;\n\n    typedef struct tagPAGERANGE\n    {\n        LONG nFromPage;\n        LONG nToPage;\n    } PAGERANGE;\n\n    typedef struct tagPAGESET\n    {\n        ULONG cbStruct;\n        BOOL fOddPages;\n        BOOL fEvenPages;\n        ULONG cPageRange;\n        [size_is(cPageRange)] PAGERANGE rgPages[];\n    } PAGESET;\n\n    HRESULT SetInitialPageNum(\n        [in] LONG nFirstPage);\n\n    HRESULT GetPageInfo(\n        [out] LONG *pnFirstPage,\n        [out] LONG *pcPages);\n\n    [local]\n    HRESULT Print(\n        [in] DWORD grfFlags,\n        [in, out] DVTARGETDEVICE **pptd,\n        [in, out] PAGESET **ppPageSet,\n        [in, out, unique] STGMEDIUM *pstgmOptions,\n        [in] IContinueCallback *pcallback,\n        [in]  LONG nFirstPage,\n        [out] LONG *pcPagesPrinted,\n        [out] LONG *pnLastPage);\n\n    [call_as(Print)]\n    HRESULT RemotePrint(\n        [in] DWORD grfFlags,\n        [in, out] DVTARGETDEVICE **pptd,\n        [in, out] PAGESET **pppageset,\n        [in, out, unique] RemSTGMEDIUM *pstgmOptions,\n        [in] IContinueCallback *pcallback,\n        [in]  LONG nFirstPage,\n        [out] LONG *pcPagesPrinted,\n        [out] LONG *pnLastPage);\n}\n\n\ncpp_quote(\"#define OLECMDERR_E_FIRST            (OLE_E_LAST+1)\")\ncpp_quote(\"#define OLECMDERR_E_NOTSUPPORTED     (OLECMDERR_E_FIRST)\")\ncpp_quote(\"#define OLECMDERR_E_DISABLED         (OLECMDERR_E_FIRST+1)\")\ncpp_quote(\"#define OLECMDERR_E_NOHELP           (OLECMDERR_E_FIRST+2)\")\ncpp_quote(\"#define OLECMDERR_E_CANCELED         (OLECMDERR_E_FIRST+3)\")\ncpp_quote(\"#define OLECMDERR_E_UNKNOWNGROUP     (OLECMDERR_E_FIRST+4)\")\n\ncpp_quote(\"#define MSOCMDERR_E_FIRST OLECMDERR_E_FIRST\")\ncpp_quote(\"#define MSOCMDERR_E_NOTSUPPORTED OLECMDERR_E_NOTSUPPORTED\")\ncpp_quote(\"#define MSOCMDERR_E_DISABLED OLECMDERR_E_DISABLED\")\ncpp_quote(\"#define MSOCMDERR_E_NOHELP OLECMDERR_E_NOHELP\")\ncpp_quote(\"#define MSOCMDERR_E_CANCELED OLECMDERR_E_CANCELED\")\ncpp_quote(\"#define MSOCMDERR_E_UNKNOWNGROUP OLECMDERR_E_UNKNOWNGROUP\")\n\ncpp_quote(\"#define LPMSODOCUMENT                  LPOLEDOCUMENT\")\ncpp_quote(\"#define LPMSODOCUMENTSITE              LPOLEDOCUMENTSITE\")\ncpp_quote(\"#define LPMSOVIEW                      LPOLEDOCUMENTVIEW\")\ncpp_quote(\"#define LPENUMMSOVIEW                  LPENUMOLEDOCUMENTVIEWS\")\ncpp_quote(\"#define LPMSOCOMMANDTARGET             LPOLECOMMANDTARGET\")\ncpp_quote(\"#define IID_IMsoDocument               IID_IOleDocument\")\ncpp_quote(\"#define IID_IMsoDocumentSite           IID_IOleDocumentSite\")\ncpp_quote(\"#define IID_IMsoView                   IID_IOleDocumentView\")\ncpp_quote(\"#define IID_IEnumMsoView               IID_IEnumOleDocumentViews\")\ncpp_quote(\"#define IID_IMsoCommandTarget          IID_IOleCommandTarget\")\n\ncpp_quote(\"EXTERN_C const GUID SID_SContainerDispatch;\")\n"
  },
  {
    "path": "wine/windows/docobjectservice.idl",
    "content": "/*\n * Copyright 2011 Piotr Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"objidl.idl\";\nimport \"mshtml.idl\";\n\n[\n    local,\n    object,\n    uuid(3050f801-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IDocObjectService : IUnknown\n{\n    HRESULT FireBeforeNavigate2(\n            [in] IDispatch *pDispatch,\n            [in] LPCWSTR lpszUrl,\n            [in] DWORD dwFlags,\n            [in] LPCWSTR lpszFrameName,\n            [in] BYTE *pPostData,\n            [in] DWORD cbPostData,\n            [in] LPCWSTR lpszHeaders,\n            [in] BOOL fPlayNavSound,\n            [out] BOOL *pfCancel);\n\n    HRESULT FireNavigateComplete2(\n            [in] IHTMLWindow2 *pHTMLWindow2,\n            [in] DWORD dwFlags);\n\n    HRESULT FireDownloadBegin(void);\n\n    HRESULT FireDownloadComplete(void);\n\n    HRESULT FireDocumentComplete(\n            [in] IHTMLWindow2 *pHTMLWindow,\n            [in] DWORD dwFlags);\n\n    HRESULT UpdateDesktopComponent(\n            [in] IHTMLWindow2 *pHTMLWindow);\n\n    HRESULT GetPendingUrl(\n            [out] BSTR *pbstrPendingUrl);\n\n    HRESULT ActiveElementChanged(\n            [in] IHTMLElement *pHTMLElement);\n\n    HRESULT GetUrlSearchComponent(\n            [out] BSTR *pbstrSearch);\n\n    HRESULT IsErrorUrl(\n            [in] LPCWSTR lpszUrl,\n            [out] BOOL *pfIsError);\n}\n"
  },
  {
    "path": "wine/windows/downloadmgr.idl",
    "content": "/*\n * Copyright 2005 Jacek Caban\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"unknwn.idl\";\nimport \"ocidl.idl\";\nimport \"oleidl.idl\";\nimport \"oaidl.idl\";\n#endif\n\n[\n    object,\n    uuid(988934A4-064B-11D3-BB80-00104B35E7F9),\n    pointer_default(unique),\n    local\n]\ninterface IDownloadManager : IUnknown\n{\n    HRESULT Download(\n        [in] IMoniker *pmk,\n        [in] IBindCtx *pbc,\n        [in] DWORD dwBindVerb,\n        [in] LONG grfBINDF,\n        [in] BINDINFO *pBindInfo,\n        [in] LPCOLESTR pszHeaders,\n        [in] LPCOLESTR pszRedir,\n        [in] UINT uiCP);\n}\n"
  },
  {
    "path": "wine/windows/dpaddr.h",
    "content": "/*\n * Copyright (C) 2003-2005 Raphael Junqueira\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DPLAY8_DPADDR_H\n#define __WINE_DPLAY8_DPADDR_H\n\n#include <ole2.h>\n#include <dplay8.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\ntypedef REFIID\t        DPNAREFIID;\n#ifndef _WINSOCK2API_\ntypedef struct sockaddr SOCKADDR;\n#endif\n\n/*****************************************************************************\n * DirectPlay8Addr defines\n */\n#define DPNA_DATATYPE_STRING                0x00000001\n#define DPNA_DATATYPE_DWORD                 0x00000002\n#define DPNA_DATATYPE_GUID                  0x00000003\n#define DPNA_DATATYPE_BINARY                0x00000004\n#define DPNA_DATATYPE_STRING_ANSI           0x00000005\n#define DPNA_DPNSVR_PORT                          6073\n#define DPNA_INDEX_INVALID                  0xFFFFFFFF\n\n#define DPNA_SEPARATOR_KEYVALUE             L'='\n#define DPNA_SEPARATOR_KEYVALUE_A           '='\n#define DPNA_SEPARATOR_USERDATA             L'#'\n#define DPNA_SEPARATOR_USERDATA_A           '#'\n#define DPNA_SEPARATOR_COMPONENT            L';'\n#define DPNA_SEPARATOR_COMPONENT_A          ';'\n#define DPNA_ESCAPECHAR                     L'%'\n#define DPNA_ESCAPECHAR_A                   '%'\n\n#define DPNA_HEADER_A                       \"x-directplay:/\"\n#define DPNA_KEY_APPLICATION_INSTANCE_A     \"applicationinstance\"\n#define DPNA_KEY_BAUD_A                     \"baud\"\n#define DPNA_KEY_DEVICE_A                   \"device\"\n#define DPNA_KEY_FLOWCONTROL_A              \"flowcontrol\"\n#define DPNA_KEY_HOSTNAME_A                 \"hostname\"\n#define DPNA_KEY_NAMEINFO_A                 \"nameinfo\"\n#define DPNA_KEY_PARITY_A                   \"parity\"\n#define DPNA_KEY_PHONENUMBER_A              \"phonenumber\"\n#define DPNA_KEY_PORT_A                     \"port\"\n#define DPNA_KEY_PROCESSOR_A                \"processor\"\n#define DPNA_KEY_PROGRAM_A                  \"program\"\n#define DPNA_KEY_PROVIDER_A                 \"provider\"\n#define DPNA_KEY_SCOPE_A                     \"scope\"\n#define DPNA_KEY_STOPBITS_A                 \"stopbits\"\n#define DPNA_KEY_TRAVERSALMODE_A             \"traversalmode\"\n\n#define DPNA_STOP_BITS_ONE_A                \"1\"\n#define DPNA_STOP_BITS_ONE_FIVE_A           \"1.5\"\n#define DPNA_STOP_BITS_TWO_A                \"2\"\n#define DPNA_PARITY_NONE_A                  \"NONE\"\n#define DPNA_PARITY_EVEN_A                  \"EVEN\"\n#define DPNA_PARITY_ODD_A                   \"ODD\"\n#define DPNA_PARITY_MARK_A                  \"MARK\"\n#define DPNA_PARITY_SPACE_A                 \"SPACE\"\n#define DPNA_FLOW_CONTROL_NONE_A            \"NONE\"\n#define DPNA_FLOW_CONTROL_XONXOFF_A         \"XONXOFF\"\n#define DPNA_FLOW_CONTROL_RTS_A             \"RTS\"\n#define DPNA_FLOW_CONTROL_DTR_A             \"DTR\"\n#define DPNA_FLOW_CONTROL_RTSDTR_A          \"RTSDTR\"\n#define DPNA_VALUE_TCPIPPROVIDER_A          \"IP\"\n#define DPNA_VALUE_IPXPROVIDER_A            \"IPX\"\n#define DPNA_VALUE_MODEMPROVIDER_A          \"MODEM\"\n#define DPNA_VALUE_SERIALPROVIDER_A         \"SERIAL\"\n\n/* And now the same thing but as Unicode strings */\n#if defined(__GNUC__)\n\n# define DPNA_HEADER                   (const WCHAR []){ 'x','-','d','i','r','e','c','t','p','l','a','y',':','/',0 }\n# define DPNA_KEY_APPLICATION_INSTANCE (const WCHAR []){ 'a','p','p','l','i','c','a','t','i','o','n','i','n','s','t','a','n','c','e',0 }\n# define DPNA_KEY_BAUD                 (const WCHAR []){ 'b','a','u','d',0 }\n# define DPNA_KEY_DEVICE               (const WCHAR []){ 'd','e','v','i','c','e',0 }\n# define DPNA_KEY_FLOWCONTROL          (const WCHAR []){ 'f','l','o','w','c','o','n','t','r','o','l',0 }\n# define DPNA_KEY_HOSTNAME             (const WCHAR []){ 'h','o','s','t','n','a','m','e',0 }\n# define DPNA_KEY_NAMEINFO             (const WCHAR []){ 'n','a','m','e','i','n','f','o',0 }\n# define DPNA_KEY_PARITY               (const WCHAR []){ 'p','a','r','i','t','y',0 }\n# define DPNA_KEY_PHONENUMBER          (const WCHAR []){ 'p','h','o','n','e','n','u','m','b','e','r',0 }\n# define DPNA_KEY_PORT                 (const WCHAR []){ 'p','o','r','t',0 }\n# define DPNA_KEY_PROCESSOR            (const WCHAR []){ 'p','r','o','c','e','s','s','o','r',0 }\n# define DPNA_KEY_PROGRAM              (const WCHAR []){ 'p','r','o','g','r','a','m',0 }\n# define DPNA_KEY_PROVIDER             (const WCHAR []){ 'p','r','o','v','i','d','e','r',0 }\n# define DPNA_KEY_SCOPE                (const WCHAR []){ 's','c','o','p','e',0 }\n# define DPNA_KEY_STOPBITS             (const WCHAR []){ 's','t','o','p','b','i','t','s',0 }\n# define DPNA_KEY_TRAVERSALMODE        (const WCHAR []){ 't','r','a','v','e','r','s','a','l','m','o','d','e',0 }\n# define DPNA_STOP_BITS_ONE            (const WCHAR []){ '1',0 }\n# define DPNA_STOP_BITS_ONE_FIVE       (const WCHAR []){ '1','.','5',0 }\n# define DPNA_STOP_BITS_TWO            (const WCHAR []){ '2',0 }\n# define DPNA_PARITY_NONE              (const WCHAR []){ 'N','O','N','E',0 }\n# define DPNA_PARITY_EVEN              (const WCHAR []){ 'E','V','E','N',0 }\n# define DPNA_PARITY_ODD               (const WCHAR []){ 'O','D','D',0 }\n# define DPNA_PARITY_MARK              (const WCHAR []){ 'M','A','R','K',0 }\n# define DPNA_PARITY_SPACE             (const WCHAR []){ 'S','P','A','C','E',0 }\n# define DPNA_FLOW_CONTROL_NONE        (const WCHAR []){ 'N','O','N','E',0 }\n# define DPNA_FLOW_CONTROL_XONXOFF     (const WCHAR []){ 'X','O','N','X','O','F','F',0 }\n# define DPNA_FLOW_CONTROL_RTS         (const WCHAR []){ 'R','T','S',0 }\n# define DPNA_FLOW_CONTROL_DTR         (const WCHAR []){ 'D','T','R',0 }\n# define DPNA_FLOW_CONTROL_RTSDTR      (const WCHAR []){ 'R','T','S','D','T','R',0 }\n# define DPNA_VALUE_TCPIPPROVIDER      (const WCHAR []){ 'I','P',0 }\n# define DPNA_VALUE_IPXPROVIDER        (const WCHAR []){ 'I','P','X',0 }\n# define DPNA_VALUE_MODEMPROVIDER      (const WCHAR []){ 'M','O','D','E','M',0 }\n# define DPNA_VALUE_SERIALPROVIDER     (const WCHAR []){ 'S','E','R','I','A','L',0 }\n\n#elif defined(_MSC_VER)\n\n# define DPNA_HEADER                   L\"x-directplay:/\"\n# define DPNA_KEY_APPLICATION_INSTANCE L\"applicationinstance\"\n# define DPNA_KEY_BAUD                 L\"baud\"\n# define DPNA_KEY_DEVICE               L\"device\"\n# define DPNA_KEY_FLOWCONTROL          L\"flowcontrol\"\n# define DPNA_KEY_HOSTNAME             L\"hostname\"\n# define DPNA_KEY_NAMEINFO             L\"nameinfo\"\n# define DPNA_KEY_PARITY               L\"parity\"\n# define DPNA_KEY_PHONENUMBER          L\"phonenumber\"\n# define DPNA_KEY_PORT                 L\"port\"\n# define DPNA_KEY_PROCESSOR            L\"processor\"\n# define DPNA_KEY_PROGRAM              L\"program\"\n# define DPNA_KEY_PROVIDER             L\"provider\"\n# define DPNA_KEY_SCOPE                L\"scope\"\n# define DPNA_KEY_STOPBITS             L\"stopbits\"\n# define DPNA_KEY_TRAVERSALMODE        L\"traversalmode\"\n# define DPNA_STOP_BITS_ONE            L\"1\"\n# define DPNA_STOP_BITS_ONE_FIVE       L\"1.5\"\n# define DPNA_STOP_BITS_TWO            L\"2\"\n# define DPNA_PARITY_NONE              L\"NONE\"\n# define DPNA_PARITY_EVEN              L\"EVEN\"\n# define DPNA_PARITY_ODD               L\"ODD\"\n# define DPNA_PARITY_MARK              L\"MARK\"\n# define DPNA_PARITY_SPACE             L\"SPACE\"\n# define DPNA_FLOW_CONTROL_NONE        L\"NONE\"\n# define DPNA_FLOW_CONTROL_XONXOFF     L\"XONXOFF\"\n# define DPNA_FLOW_CONTROL_RTS         L\"RTS\"\n# define DPNA_FLOW_CONTROL_DTR         L\"DTR\"\n# define DPNA_FLOW_CONTROL_RTSDTR      L\"RTSDTR\"\n# define DPNA_VALUE_TCPIPPROVIDER      L\"IP\"\n# define DPNA_VALUE_IPXPROVIDER        L\"IPX\"\n# define DPNA_VALUE_MODEMPROVIDER      L\"MODEM\"\n# define DPNA_VALUE_SERIALPROVIDER     L\"SERIAL\"\n\n#else\n\nstatic const WCHAR DPNA_HEADER[] = { 'x','-','d','i','r','e','c','t','p','l','a','y',':','/',0 };\nstatic const WCHAR DPNA_KEY_APPLICATION_INSTANCE[] = { 'a','p','p','l','i','c','a','t','i','o','n','i','n','s','t','a','n','c','e',0 };\nstatic const WCHAR DPNA_KEY_BAUD[] = { 'b','a','u','d',0 };\nstatic const WCHAR DPNA_KEY_DEVICE[] = { 'd','e','v','i','c','e',0 };\nstatic const WCHAR DPNA_KEY_FLOWCONTROL[] = { 'f','l','o','w','c','o','n','t','r','o','l',0 };\nstatic const WCHAR DPNA_KEY_HOSTNAME[] = { 'h','o','s','t','n','a','m','e',0 };\nstatic const WCHAR DPNA_KEY_NAMEINFO[] = { 'n','a','m','e','i','n','f','o',0 };\nstatic const WCHAR DPNA_KEY_PARITY[] = { 'p','a','r','i','t','y',0 };\nstatic const WCHAR DPNA_KEY_PHONENUMBER[] = { 'p','h','o','n','e','n','u','m','b','e','r',0 };\nstatic const WCHAR DPNA_KEY_PORT[] =   { 'p','o','r','t',0 };\nstatic const WCHAR DPNA_KEY_PROCESSOR[] = { 'p','r','o','c','e','s','s','o','r',0 };\nstatic const WCHAR DPNA_KEY_PROGRAM[] = { 'p','r','o','g','r','a','m',0 };\nstatic const WCHAR DPNA_KEY_PROVIDER[] = { 'p','r','o','v','i','d','e','r',0 };\nstatic const WCHAR DPNA_KEY_SCOPE[] = { 's','c','o','p','e',0 };\nstatic const WCHAR DPNA_KEY_STOPBITS[] = { 's','t','o','p','b','i','t','s',0 };\nstatic const WCHAR DPNA_KEY_TRAVERSALMODE[] = { 't','r','a','v','e','r','s','a','l','m','o','d','e',0 };\nstatic const WCHAR DPNA_STOP_BITS_ONE[] = { '1',0 };\nstatic const WCHAR DPNA_STOP_BITS_ONE_FIVE[] = { '1','.','5',0 };\nstatic const WCHAR DPNA_STOP_BITS_TWO[] = { '2',0 };\nstatic const WCHAR DPNA_PARITY_NONE[] = { 'N','O','N','E',0 };\nstatic const WCHAR DPNA_PARITY_EVEN[] = { 'E','V','E','N',0 };\nstatic const WCHAR DPNA_PARITY_ODD[] = { 'O','D','D',0 };\nstatic const WCHAR DPNA_PARITY_MARK[] = { 'M','A','R','K',0 };\nstatic const WCHAR DPNA_PARITY_SPACE[] = { 'S','P','A','C','E',0 };\nstatic const WCHAR DPNA_FLOW_CONTROL_NONE[] = { 'N','O','N','E',0 };\nstatic const WCHAR DPNA_FLOW_CONTROL_XONXOFF[] = { 'X','O','N','X','O','F','F',0 };\nstatic const WCHAR DPNA_FLOW_CONTROL_RTS[] = { 'R','T','S',0 };\nstatic const WCHAR DPNA_FLOW_CONTROL_DTR[] = { 'D','T','R',0 };\nstatic const WCHAR DPNA_FLOW_CONTROL_RTSDTR[] = { 'R','T','S','D','T','R',0 };\nstatic const WCHAR DPNA_VALUE_TCPIPPROVIDER[] = { 'I','P',0 };\nstatic const WCHAR DPNA_VALUE_IPXPROVIDER[] = { 'I','P','X',0 };\nstatic const WCHAR DPNA_VALUE_MODEMPROVIDER[] = { 'M','O','D','E','M',0 };\nstatic const WCHAR DPNA_VALUE_SERIALPROVIDER[] = { 'S','E','R','I','A','L',0 };\n\n\n#endif\n\n#define DPNA_BAUD_RATE_9600                   9600\n#define DPNA_BAUD_RATE_14400                 14400\n#define DPNA_BAUD_RATE_19200                 19200\n#define DPNA_BAUD_RATE_38400                 38400\n#define DPNA_BAUD_RATE_56000                 56000\n#define DPNA_BAUD_RATE_57600                 57600\n#define DPNA_BAUD_RATE_115200               115200\n\n/*****************************************************************************\n * Predeclare the interfaces\n */\nDEFINE_GUID(CLSID_DirectPlay8Address,      0x934a9523, 0xa3ca, 0x4bc5, 0xad, 0xa0, 0xd6, 0xd9, 0x5d, 0x97, 0x94, 0x21);\n\nDEFINE_GUID(IID_IDirectPlay8Address,       0x83783300, 0x4063, 0x4c8a, 0x9d, 0xb3, 0x82, 0x83, 0xa, 0x7f, 0xeb, 0x31);\ntypedef struct IDirectPlay8Address *PDIRECTPLAY8ADDRESS, *LPDIRECTPLAY8ADDRESS;\nDEFINE_GUID(IID_IDirectPlay8AddressIP,     0xe5a0e990, 0x2bad, 0x430b, 0x87, 0xda, 0xa1, 0x42, 0xcf, 0x75, 0xde, 0x58);\ntypedef struct IDirectPlay8AddressIP *PDIRECTPLAY8ADDRESSIP, *LPDIRECTPLAY8ADDRESSIP;\n\n\n/*****************************************************************************\n * IDirectPlay8Address interface\n */\n#define INTERFACE IDirectPlay8Address\nDECLARE_INTERFACE_(IDirectPlay8Address,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectPlay8Address methods ***/\n    STDMETHOD(BuildFromURLW)(THIS_ WCHAR* pwszSourceURL) PURE;\n    STDMETHOD(BuildFromURLA)(THIS_ CHAR* pszSourceURL) PURE;\n    STDMETHOD(Duplicate)(THIS_ PDIRECTPLAY8ADDRESS* ppdpaNewAddress) PURE;\n    STDMETHOD(SetEqual)(THIS_ PDIRECTPLAY8ADDRESS pdpaAddress) PURE;\n    STDMETHOD(IsEqual)(THIS_  PDIRECTPLAY8ADDRESS pdpaAddress) PURE;\n    STDMETHOD(Clear)(THIS) PURE;\n    STDMETHOD(GetURLW)(THIS_ WCHAR* pwszURL, PDWORD pdwNumChars) PURE;\n    STDMETHOD(GetURLA)(THIS_ CHAR* pszURL, PDWORD pdwNumChars) PURE;\n    STDMETHOD(GetSP)(THIS_ GUID* pguidSP) PURE;\n    STDMETHOD(GetUserData)(THIS_ LPVOID pvUserData, PDWORD pdwBufferSize) PURE;\n    STDMETHOD(SetSP)(THIS_ const GUID* pguidSP) PURE;\n    STDMETHOD(SetUserData)(THIS_ const void* pvUserData, DWORD dwDataSize) PURE;\n    STDMETHOD(GetNumComponents)(THIS_ PDWORD pdwNumComponents) PURE;\n    STDMETHOD(GetComponentByName)(THIS_ const WCHAR* pwszName, LPVOID pvBuffer, PDWORD pdwBufferSize, PDWORD pdwDataType) PURE;\n    STDMETHOD(GetComponentByIndex)(THIS_ DWORD dwComponentID, WCHAR* pwszName, PDWORD pdwNameLen, void* pvBuffer, PDWORD pdwBufferSize, PDWORD pdwDataType) PURE;\n    STDMETHOD(AddComponent)(THIS_ const WCHAR* pwszName, const void* lpvData, DWORD dwDataSize, DWORD dwDataType) PURE;\n    STDMETHOD(GetDevice)(THIS_ GUID* pDevGuid) PURE;\n    STDMETHOD(SetDevice)(THIS_ const GUID* devGuid) PURE;\n    STDMETHOD(BuildFromDirectPlay4Address)(THIS_ LPVOID pvAddress, DWORD dwDataSize) PURE;\n};\n#undef INTERFACE\n\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectPlay8Address_QueryInterface(p,a,b)               (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectPlay8Address_AddRef(p)                           (p)->lpVtbl->AddRef(p)\n#define IDirectPlay8Address_Release(p)                          (p)->lpVtbl->Release(p)\n/*** IDirectPlay8Address methods ***/\n#define IDirectPlay8Address_BuildFromURLW(p,a)                  (p)->lpVtbl->BuildFromURLW(p,a)\n#define IDirectPlay8Address_BuildFromURLA(p,a)                  (p)->lpVtbl->BuildFromURLA(p,a)\n#define IDirectPlay8Address_Duplicate(p,a)                      (p)->lpVtbl->Duplicate(p,a)\n#define IDirectPlay8Address_SetEqual(p,a)                       (p)->lpVtbl->SetEqual(p,a)\n#define IDirectPlay8Address_IsEqual(p,a)                        (p)->lpVtbl->IsEqual(p,a)\n#define IDirectPlay8Address_Clear(p)                            (p)->lpVtbl->Clear(p)\n#define IDirectPlay8Address_GetURLW(p,a,b)                      (p)->lpVtbl->GetURLW(p,a,b)\n#define IDirectPlay8Address_GetURLA(p,a,b)                      (p)->lpVtbl->GetURLA(p,a,b)\n#define IDirectPlay8Address_GetSP(p,a)                          (p)->lpVtbl->GetSP(p,a)\n#define IDirectPlay8Address_GetUserData(p,a,b)                  (p)->lpVtbl->GetUserData(p,a,b)\n#define IDirectPlay8Address_SetSP(p,a)                          (p)->lpVtbl->SetSP(p,a)\n#define IDirectPlay8Address_SetUserData(p,a,b)                  (p)->lpVtbl->SetUserData(p,a,b)\n#define IDirectPlay8Address_GetNumComponents(p,a)               (p)->lpVtbl->GetNumComponents(p,a)\n#define IDirectPlay8Address_GetComponentByName(p,a,b,c,d)       (p)->lpVtbl->GetComponentByName(p,a,b,c,d)\n#define IDirectPlay8Address_GetComponentByIndex(p,a,b,c,d,e,f)  (p)->lpVtbl->GetComponentByIndex(p,a,b,c,d,e,f)\n#define IDirectPlay8Address_AddComponent(p,a,b,c,d)             (p)->lpVtbl->AddComponent(p,a,b,c,d)\n#define IDirectPlay8Address_SetDevice(p,a)                      (p)->lpVtbl->SetDevice(p,a)\n#define IDirectPlay8Address_GetDevice(p,a)                      (p)->lpVtbl->GetDevice(p,a)\n#define IDirectPlay8Address_BuildFromDirectPlay4Address(p,a,b)  (p)->lpVtbl->BuildFromDirectPlay4Address(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirectPlay8Address_QueryInterface(p,a,b)               (p)->QueryInterface(a,b)\n#define IDirectPlay8Address_AddRef(p)                           (p)->AddRef()\n#define IDirectPlay8Address_Release(p)                          (p)->Release()\n/*** IDirectPlay8Address methods ***/\n#define IDirectPlay8Address_BuildFromURLW(p,a)                  (p)->BuildFromURLW(a)\n#define IDirectPlay8Address_BuildFromURLA(p,a)                  (p)->BuildFromURLA(a)\n#define IDirectPlay8Address_Duplicate(p,a)                      (p)->Duplicate(a)\n#define IDirectPlay8Address_SetEqual(p,a)                       (p)->SetEqual(a)\n#define IDirectPlay8Address_IsEqual(p,a)                        (p)->IsEqual(a)\n#define IDirectPlay8Address_Clear(p)                            (p)->Clear()\n#define IDirectPlay8Address_GetURLW(p,a,b)                      (p)->GetURLW(a,b)\n#define IDirectPlay8Address_GetURLA(p,a,b)                      (p)->GetURLA(a,b)\n#define IDirectPlay8Address_GetSP(p,a)                          (p)->GetSP(a)\n#define IDirectPlay8Address_GetUserData(p,a,b)                  (p)->GetUserData(a,b)\n#define IDirectPlay8Address_SetSP(p,a)                          (p)->SetSP(a)\n#define IDirectPlay8Address_SetUserData(p,a,b)                  (p)->SetUserData(a,b)\n#define IDirectPlay8Address_GetNumComponents(p,a)               (p)->GetNumComponents(a)\n#define IDirectPlay8Address_GetComponentByName(p,a,b,c,d)       (p)->GetComponentByName(a,b,c,d)\n#define IDirectPlay8Address_GetComponentByIndex(p,a,b,c,d,e,f)  (p)->GetComponentByIndex(a,b,c,d,e,f)\n#define IDirectPlay8Address_AddComponent(p,a,b,c,d)             (p)->AddComponent(a,b,c,d)\n#define IDirectPlay8Address_SetDevice(p,a)                      (p)->SetDevice(a)\n#define IDirectPlay8Address_GetDevice(p,a)                      (p)->GetDevice(a)\n#define IDirectPlay8Address_BuildFromDirectPlay4Address(p,a,b)  (p)->BuildFromDirectPlay4Address(a,b)\n#endif\n\n/*****************************************************************************\n * IDirectPlay8AddressIP interface\n */\n#define INTERFACE IDirectPlay8AddressIP\nDECLARE_INTERFACE_(IDirectPlay8AddressIP,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectPlay8AddressIP methods ***/\n    STDMETHOD(BuildFromSockAddr)(THIS_ const SOCKADDR* pSockAddr) PURE;\n    STDMETHOD(BuildAddress)(THIS_ const WCHAR* wszAddress, USHORT usPort) PURE;\n    STDMETHOD(BuildLocalAddress)(THIS_ const GUID* pguidAdapter, USHORT usPort) PURE;\n    STDMETHOD(GetSockAddress)(THIS_ SOCKADDR* pSockAddr, PDWORD) PURE;\n    STDMETHOD(GetLocalAddress)(THIS_ GUID* pguidAdapter, USHORT* pusPort) PURE;\n    STDMETHOD(GetAddress)(THIS_ WCHAR* wszAddress, PDWORD pdwAddressLength, USHORT* psPort) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectPlay8AddressIP_QueryInterface(p,a,b)         (p)->lpVtbl->QueryInterface(a,b)\n#define IDirectPlay8AddressIP_AddRef(p)                     (p)->lpVtbl->AddRef()\n#define IDirectPlay8AddressIP_Release(p)                    (p)->lpVtbl->Release()\n/*** IDirectPlay8AddressIP methods ***/\n#define IDirectPlay8AddressIP_BuildFromSockAddr(p,a)        (p)->lpVtbl->BuildFromSockAddr(a)\n#define IDirectPlay8AddressIP_BuildAddress(p,a,b)           (p)->lpVtbl->BuildAddress(a,b)\n#define IDirectPlay8AddressIP_BuildLocalAddress(p,a,b)      (p)->lpVtbl->BuildLocalAddress(a,b)\n#define IDirectPlay8AddressIP_GetSockAddress(p,a,b)         (p)->lpVtbl->GetSockAddress(a,b)\n#define IDirectPlay8AddressIP_GetLocalAddress(p,a,b)        (p)->lpVtbl->GetLocalAddress(a,b)\n#define IDirectPlay8AddressIP_GetAddress(p,a,b,c)           (p)->lpVtbl->GetAddress(a,b,c)\n#else\n/*** IUnknown methods ***/\n#define IDirectPlay8AddressIP_QueryInterface(p,a,b)         (p)->QueryInterface(a,b)\n#define IDirectPlay8AddressIP_AddRef(p)                     (p)->AddRef()\n#define IDirectPlay8AddressIP_Release(p)                    (p)->Release()\n/*** IDirectPlay8AddressIP methods ***/\n#define IDirectPlay8AddressIP_BuildFromSockAddr(p,a)        (p)->BuildFromSockAddr(a)\n#define IDirectPlay8AddressIP_BuildAddress(p,a,b)           (p)->BuildAddress(a,b)\n#define IDirectPlay8AddressIP_BuildLocalAddress(p,a,b)      (p)->BuildLocalAddress(a,b)\n#define IDirectPlay8AddressIP_GetSockAddress(p,a,b)         (p)->GetSockAddress(a,b)\n#define IDirectPlay8AddressIP_GetLocalAddress(p,a,b)        (p)->GetLocalAddress(a,b)\n#define IDirectPlay8AddressIP_GetAddress(p,a,b,c)           (p)->GetAddress(a,b,c)\n#endif\n\n/* Export functions */\n\nHRESULT WINAPI DirectPlay8AddressCreate(const GUID* pcIID, LPVOID* ppvInterface, IUnknown* pUnknown);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/dplay.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DPLAY_H\n#define __WINE_DPLAY_H\n\n#include <ole2.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\ntypedef LPVOID (*LPRGLPVOID)[];\ntypedef LPRGLPVOID PRGPVOID, LPRGPVOID, PRGLPVOID, PAPVOID, LPAPVOID, PALPVOID, LPALPVOID;\n\n#define VOL volatile\ntypedef VOID * volatile LPVOIDV;\n\n\n/*****************************************************************************\n * Predeclare the interfaces\n */\nDEFINE_GUID(CLSID_DirectPlay,0xd1eb6d20, 0x8923, 0x11d0, 0x9d, 0x97, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb);\n\nDEFINE_GUID(IID_IDirectPlay, 0x5454e9a0, 0xdb65, 0x11ce, 0x92, 0x1c, 0x00, 0xaa, 0x00, 0x6c, 0x49, 0x72);\ntypedef struct IDirectPlay *LPDIRECTPLAY;\n\nDEFINE_GUID(IID_IDirectPlay2, 0x2b74f7c0, 0x9154, 0x11cf, 0xa9, 0xcd, 0x0, 0xaa, 0x0, 0x68, 0x86, 0xe3);\ntypedef struct IDirectPlay2 *LPDIRECTPLAY2;\n\nDEFINE_GUID(IID_IDirectPlay2A,0x9d460580, 0xa822, 0x11cf, 0x96, 0xc, 0x0, 0x80, 0xc7, 0x53, 0x4e, 0x82);\ntypedef struct IDirectPlay2 IDirectPlay2A,*LPDIRECTPLAY2A;\n\nDEFINE_GUID(IID_IDirectPlay3, 0x133efe40, 0x32dc, 0x11d0, 0x9c, 0xfb, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb);\ntypedef struct IDirectPlay3 *LPDIRECTPLAY3;\n\nDEFINE_GUID(IID_IDirectPlay3A,0x133efe41, 0x32dc, 0x11d0, 0x9c, 0xfb, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb);\ntypedef struct IDirectPlay3 IDirectPlay3A,*LPDIRECTPLAY3A;\n\nDEFINE_GUID(IID_IDirectPlay4, 0xab1c530, 0x4745, 0x11d1, 0xa7, 0xa1, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc);\ntypedef struct IDirectPlay4 *LPDIRECTPLAY4;\n\nDEFINE_GUID(IID_IDirectPlay4A,0xab1c531, 0x4745, 0x11d1, 0xa7, 0xa1, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc);\ntypedef struct IDirectPlay4 IDirectPlay4A,*LPDIRECTPLAY4A;\n\n\n/*\n * GUIDS used by Service Providers shipped with DirectPlay\n * Use these to identify Service Provider returned by EnumConnections\n */\n\n/* GUID for IPX service provider {685BC400-9D2C-11cf-A9CD-00AA006886E3} */\nDEFINE_GUID(DPSPGUID_IPX, 0x685bc400, 0x9d2c, 0x11cf, 0xa9, 0xcd, 0x0, 0xaa, 0x0, 0x68, 0x86, 0xe3);\n\n/* GUID for TCP/IP service provider {36E95EE0-8577-11cf-960C-0080C7534E82} */\nDEFINE_GUID(DPSPGUID_TCPIP, 0x36E95EE0, 0x8577, 0x11cf, 0x96, 0xc, 0x0, 0x80, 0xc7, 0x53, 0x4e, 0x82);\n\n/* GUID for Serial service provider {0F1D6860-88D9-11cf-9C4E-00A0C905425E} */\nDEFINE_GUID(DPSPGUID_SERIAL, 0xf1d6860, 0x88d9, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);\n\n/* GUID for Modem service provider {44EAA760-CB68-11cf-9C4E-00A0C905425E} */\nDEFINE_GUID(DPSPGUID_MODEM, 0x44eaa760, 0xcb68, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);\n\n\n/*****************************************************************************\n * Miscellaneous\n */\n\n/* Return Values for Direct Play */\n#define _FACDP  0x877\n#define MAKE_DPHRESULT( code )    MAKE_HRESULT( 1, _FACDP, code )\n\n#define DP_OK                           S_OK\n#define DPERR_ALREADYINITIALIZED        MAKE_DPHRESULT(   5 )\n#define DPERR_ACCESSDENIED              MAKE_DPHRESULT(  10 )\n#define DPERR_ACTIVEPLAYERS             MAKE_DPHRESULT(  20 )\n#define DPERR_BUFFERTOOSMALL            MAKE_DPHRESULT(  30 )\n#define DPERR_CANTADDPLAYER             MAKE_DPHRESULT(  40 )\n#define DPERR_CANTCREATEGROUP           MAKE_DPHRESULT(  50 )\n#define DPERR_CANTCREATEPLAYER          MAKE_DPHRESULT(  60 )\n#define DPERR_CANTCREATESESSION         MAKE_DPHRESULT(  70 )\n#define DPERR_CAPSNOTAVAILABLEYET       MAKE_DPHRESULT(  80 )\n#define DPERR_EXCEPTION                 MAKE_DPHRESULT(  90 )\n#define DPERR_GENERIC                   E_FAIL\n#define DPERR_INVALIDFLAGS              MAKE_DPHRESULT( 120 )\n#define DPERR_INVALIDOBJECT             MAKE_DPHRESULT( 130 )\n#define DPERR_INVALIDPARAM              E_INVALIDARG\n#define DPERR_INVALIDPARAMS             DPERR_INVALIDPARAM\n#define DPERR_INVALIDPLAYER             MAKE_DPHRESULT( 150 )\n#define DPERR_INVALIDGROUP              MAKE_DPHRESULT( 155 )\n#define DPERR_NOCAPS                    MAKE_DPHRESULT( 160 )\n#define DPERR_NOCONNECTION              MAKE_DPHRESULT( 170 )\n#define DPERR_NOMEMORY                  E_OUTOFMEMORY\n#define DPERR_OUTOFMEMORY               DPERR_NOMEMORY\n#define DPERR_NOMESSAGES                MAKE_DPHRESULT( 190 )\n#define DPERR_NONAMESERVERFOUND         MAKE_DPHRESULT( 200 )\n#define DPERR_NOPLAYERS                 MAKE_DPHRESULT( 210 )\n#define DPERR_NOSESSIONS                MAKE_DPHRESULT( 220 )\n#define DPERR_PENDING                   E_PENDING\n#define DPERR_SENDTOOBIG                MAKE_DPHRESULT( 230 )\n#define DPERR_TIMEOUT                   MAKE_DPHRESULT( 240 )\n#define DPERR_UNAVAILABLE               MAKE_DPHRESULT( 250 )\n#define DPERR_UNSUPPORTED               E_NOTIMPL\n#define DPERR_BUSY                      MAKE_DPHRESULT( 270 )\n#define DPERR_USERCANCEL                MAKE_DPHRESULT( 280 )\n#define DPERR_NOINTERFACE               E_NOINTERFACE\n#define DPERR_CANNOTCREATESERVER        MAKE_DPHRESULT( 290 )\n#define DPERR_PLAYERLOST                MAKE_DPHRESULT( 300 )\n#define DPERR_SESSIONLOST               MAKE_DPHRESULT( 310 )\n#define DPERR_UNINITIALIZED             MAKE_DPHRESULT( 320 )\n#define DPERR_NONEWPLAYERS              MAKE_DPHRESULT( 330 )\n#define DPERR_INVALIDPASSWORD           MAKE_DPHRESULT( 340 )\n#define DPERR_CONNECTING                MAKE_DPHRESULT( 350 )\n#define DPERR_CONNECTIONLOST            MAKE_DPHRESULT( 360 )\n#define DPERR_UNKNOWNMESSAGE            MAKE_DPHRESULT( 370 )\n#define DPERR_CANCELFAILED              MAKE_DPHRESULT( 380 )\n#define DPERR_INVALIDPRIORITY           MAKE_DPHRESULT( 390 )\n#define DPERR_NOTHANDLED                MAKE_DPHRESULT( 400 )\n#define DPERR_CANCELLED                 MAKE_DPHRESULT( 410 )\n#define DPERR_ABORTED                   MAKE_DPHRESULT( 420 )\n#define DPERR_BUFFERTOOLARGE            MAKE_DPHRESULT( 1000 )\n#define DPERR_CANTCREATEPROCESS         MAKE_DPHRESULT( 1010 )\n#define DPERR_APPNOTSTARTED             MAKE_DPHRESULT( 1020 )\n#define DPERR_INVALIDINTERFACE          MAKE_DPHRESULT( 1030 )\n#define DPERR_NOSERVICEPROVIDER         MAKE_DPHRESULT( 1040 )\n#define DPERR_UNKNOWNAPPLICATION        MAKE_DPHRESULT( 1050 )\n#define DPERR_NOTLOBBIED                MAKE_DPHRESULT( 1070 )\n#define DPERR_SERVICEPROVIDERLOADED     MAKE_DPHRESULT( 1080 )\n#define DPERR_ALREADYREGISTERED         MAKE_DPHRESULT( 1090 )\n#define DPERR_NOTREGISTERED             MAKE_DPHRESULT( 1100 )\n#define DPERR_AUTHENTICATIONFAILED      MAKE_DPHRESULT( 2000 )\n#define DPERR_CANTLOADSSPI              MAKE_DPHRESULT( 2010 )\n#define DPERR_ENCRYPTIONFAILED          MAKE_DPHRESULT( 2020 )\n#define DPERR_SIGNFAILED                MAKE_DPHRESULT( 2030 )\n#define DPERR_CANTLOADSECURITYPACKAGE   MAKE_DPHRESULT( 2040 )\n#define DPERR_ENCRYPTIONNOTSUPPORTED    MAKE_DPHRESULT( 2050 )\n#define DPERR_CANTLOADCAPI              MAKE_DPHRESULT( 2060 )\n#define DPERR_NOTLOGGEDIN               MAKE_DPHRESULT( 2070 )\n#define DPERR_LOGONDENIED               MAKE_DPHRESULT( 2080 )\n\n\n/* DPID - DirectPlay player and group ID */\ntypedef DWORD DPID, *LPDPID;\n\n/* DPID from whence originate messages - just an ID */\n#define DPID_SYSMSG             0           /* DPID of system */\n#define DPID_ALLPLAYERS         0           /* DPID of all players */\n#define DPID_SERVERPLAYER       1           /* DPID of the server player */\n#define DPID_UNKNOWN            0xFFFFFFFF  /* Player ID is unknown */\n\n/*  DPCAPS -  Used to obtain the capabilities of a DirectPlay object */\ntypedef struct tagDPCAPS\n{\n    DWORD dwSize;               /* Size of structure in bytes */\n    DWORD dwFlags;\n    DWORD dwMaxBufferSize;\n    DWORD dwMaxQueueSize;       /* Obsolete. */\n    DWORD dwMaxPlayers;         /* Maximum players/groups (local + remote) */\n    DWORD dwHundredBaud;        /* Bandwidth in 100 bits per second units;\n                                 * i.e. 24 is 2400, 96 is 9600, etc.\n                                 */\n    DWORD dwLatency;            /* Estimated latency; 0 = unknown */\n    DWORD dwMaxLocalPlayers;    /* Maximum # of locally created players */\n    DWORD dwHeaderLength;       /* Maximum header length in bytes */\n    DWORD dwTimeout;            /* Service provider's suggested timeout value\n                                 * This is how long DirectPlay will wait for\n                                 * responses to system messages\n                                 */\n} DPCAPS, *LPDPCAPS;\n\ntypedef struct tagDPNAME\n{\n    DWORD   dwSize;\n    DWORD   dwFlags;            /* Not used must be 0 */\n\n    union /*playerShortName */      /* Player's Handle? */\n    {\n        LPWSTR  lpszShortName;\n        LPSTR   lpszShortNameA;\n    } DUMMYUNIONNAME1;\n\n    union /*playerLongName */       /* Player's formal/real name */\n    {\n        LPWSTR  lpszLongName;\n        LPSTR   lpszLongNameA;\n    } DUMMYUNIONNAME2;\n\n} DPNAME, *LPDPNAME;\n\n#define DPLONGNAMELEN     52\n#define DPSHORTNAMELEN    20\n#define DPSESSIONNAMELEN  32\n#define DPPASSWORDLEN     16\n#define DPUSERRESERVED    16\n\ntypedef struct tagDPSESSIONDESC\n{\n    DWORD   dwSize;\n    GUID    guidSession;\n    DWORD   dwSession;\n    DWORD   dwMaxPlayers;\n    DWORD   dwCurrentPlayers;\n    DWORD   dwFlags;\n    char    szSessionName[ DPSESSIONNAMELEN ];\n    char    szUserField[ DPUSERRESERVED ];\n    DWORD   dwReserved1;\n    char    szPassword[ DPPASSWORDLEN ];\n    DWORD   dwReserved2;\n    DWORD   dwUser1;\n    DWORD   dwUser2;\n    DWORD   dwUser3;\n    DWORD   dwUser4;\n} DPSESSIONDESC, *LPDPSESSIONDESC;\n\ntypedef struct tagDPSESSIONDESC2\n{\n    DWORD   dwSize;\n    DWORD   dwFlags;\n    GUID    guidInstance;\n    GUID    guidApplication;   /* GUID of the DP application, GUID_NULL if\n                                * all applications! */\n\n    DWORD   dwMaxPlayers;\n    DWORD   dwCurrentPlayers;   /* (read only value) */\n\n    union  /* Session name */\n    {\n        LPWSTR  lpszSessionName;\n        LPSTR   lpszSessionNameA;\n    } DUMMYUNIONNAME1;\n\n    union  /* Optional password */\n    {\n        LPWSTR  lpszPassword;\n        LPSTR   lpszPasswordA;\n    } DUMMYUNIONNAME2;\n\n    DWORD   dwReserved1;\n    DWORD   dwReserved2;\n\n    DWORD   dwUser1;        /* For use by the application */\n    DWORD   dwUser2;\n    DWORD   dwUser3;\n    DWORD   dwUser4;\n} DPSESSIONDESC2, *LPDPSESSIONDESC2;\ntypedef const DPSESSIONDESC2* LPCDPSESSIONDESC2;\n\n#define DPOPEN_JOIN                     0x00000001\n#define DPOPEN_CREATE                   0x00000002\n#define DPOPEN_RETURNSTATUS             DPENUMSESSIONS_RETURNSTATUS\n\n#define DPSESSION_NEWPLAYERSDISABLED    0x00000001\n#define DPSESSION_MIGRATEHOST           0x00000004\n#define DPSESSION_NOMESSAGEID           0x00000008\n#define DPSESSION_JOINDISABLED          0x00000020\n#define DPSESSION_KEEPALIVE             0x00000040\n#define DPSESSION_NODATAMESSAGES        0x00000080\n#define DPSESSION_SECURESERVER          0x00000100\n#define DPSESSION_PRIVATE               0x00000200\n#define DPSESSION_PASSWORDREQUIRED      0x00000400\n#define DPSESSION_MULTICASTSERVER       0x00000800\n#define DPSESSION_CLIENTSERVER          0x00001000\n#define DPSESSION_DIRECTPLAYPROTOCOL    0x00002000\n#define DPSESSION_NOPRESERVEORDER       0x00004000\n#define DPSESSION_OPTIMIZELATENCY       0x00008000\n\ntypedef struct tagDPLCONNECTION\n{\n    DWORD               dwSize;\n    DWORD               dwFlags;\n    LPDPSESSIONDESC2    lpSessionDesc;  /* Ptr to session desc to use for connect */\n    LPDPNAME            lpPlayerName;   /* Ptr to player name structure */\n    GUID                guidSP;         /* GUID of Service Provider to use */\n    LPVOID              lpAddress;      /* Ptr to Address of Service Provider to use */\n    DWORD               dwAddressSize;  /* Size of address data */\n} DPLCONNECTION, *LPDPLCONNECTION;\n\n/* DPLCONNECTION flags (for dwFlags) */\n#define DPLCONNECTION_CREATESESSION DPOPEN_CREATE\n#define DPLCONNECTION_JOINSESSION   DPOPEN_JOIN\n\ntypedef struct tagDPCHAT\n{\n    DWORD               dwSize;\n    DWORD               dwFlags;\n    union\n    {                          /* Message string */\n        LPWSTR  lpszMessage;   /* Unicode */\n        LPSTR   lpszMessageA;  /* ANSI */\n    } DUMMYUNIONNAME;\n} DPCHAT, *LPDPCHAT;\n\ntypedef struct\n{\n  UINT   len;\n  PUCHAR pData;\n} SGBUFFER, *PSGBUFFER, *LPSGBUFFER;\n\n\ntypedef struct tagDPSECURITYDESC\n{\n    DWORD dwSize;                   /* Size of structure */\n    DWORD dwFlags;                  /* Not used. Must be zero. */\n    union\n    {                               /* SSPI provider name */\n        LPWSTR  lpszSSPIProvider;   /* Unicode */\n        LPSTR   lpszSSPIProviderA;  /* ANSI */\n    } DUMMYUNIONNAME1;\n    union\n    {                               /* CAPI provider name */\n        LPWSTR lpszCAPIProvider;    /* Unicode */\n        LPSTR  lpszCAPIProviderA;   /* ANSI */\n    } DUMMYUNIONNAME2;\n    DWORD dwCAPIProviderType;       /* Crypto Service Provider type */\n    DWORD dwEncryptionAlgorithm;    /* Encryption Algorithm type */\n} DPSECURITYDESC, *LPDPSECURITYDESC;\n\ntypedef const DPSECURITYDESC *LPCDPSECURITYDESC;\n\ntypedef struct tagDPCREDENTIALS\n{\n    DWORD dwSize;               /* Size of structure */\n    DWORD dwFlags;              /* Not used. Must be zero. */\n    union\n    {                           /* User name of the account */\n        LPWSTR  lpszUsername;   /* Unicode */\n        LPSTR   lpszUsernameA;  /* ANSI */\n    } DUMMYUNIONNAME1;\n    union\n    {                           /* Password of the account */\n        LPWSTR  lpszPassword;   /* Unicode */\n        LPSTR   lpszPasswordA;  /* ANSI */\n    } DUMMYUNIONNAME2;\n    union\n    {                           /* Domain name of the account */\n        LPWSTR  lpszDomain;     /* Unicode */\n        LPSTR   lpszDomainA;    /* ANSI */\n    } DUMMYUNIONNAME3;\n} DPCREDENTIALS, *LPDPCREDENTIALS;\n\ntypedef const DPCREDENTIALS *LPCDPCREDENTIALS;\n\n\n\ntypedef BOOL (CALLBACK *LPDPENUMDPCALLBACKW)(\n    LPGUID      lpguidSP,\n    LPWSTR      lpSPName,\n    DWORD       dwMajorVersion,\n    DWORD       dwMinorVersion,\n    LPVOID      lpContext);\n\ntypedef BOOL (CALLBACK *LPDPENUMDPCALLBACKA)(\n    LPGUID      lpguidSP,\n    LPSTR       lpSPName,       /* ptr to str w/ driver description */\n    DWORD       dwMajorVersion, /* Major # of driver spec in lpguidSP */\n    DWORD       dwMinorVersion, /* Minor # of driver spec in lpguidSP */\n    LPVOID      lpContext);     /* User given */\n\n#ifndef __LPCGUID_DEFINED__\n#define __LPCGUID_DEFINED__\ntypedef const GUID *LPCGUID;\n#endif\n\ntypedef const DPNAME *LPCDPNAME;\n\ntypedef BOOL (CALLBACK *LPDPENUMCONNECTIONSCALLBACK)(\n    LPCGUID     lpguidSP,\n    LPVOID      lpConnection,\n    DWORD       dwConnectionSize,\n    LPCDPNAME   lpName,\n    DWORD       dwFlags,\n    LPVOID      lpContext);\n\ntypedef BOOL (CALLBACK *LPDPENUMSESSIONSCALLBACK)(\n    LPDPSESSIONDESC lpDPSessionDesc,\n    LPVOID      lpContext,\n    LPDWORD     lpdwTimeOut,\n    DWORD       dwFlags);\n\n\nextern HRESULT WINAPI DirectPlayEnumerateA( LPDPENUMDPCALLBACKA, LPVOID );\nextern HRESULT WINAPI DirectPlayEnumerateW( LPDPENUMDPCALLBACKW, LPVOID );\nextern HRESULT WINAPI DirectPlayCreate( LPGUID lpGUID, LPDIRECTPLAY *lplpDP, IUnknown *pUnk );\n\ntypedef BOOL (CALLBACK *LPDPENUMPLAYERSCALLBACK)(\n    DPID   dpId,\n    LPSTR  lpFriendlyName,\n    LPSTR  lpFormalName,\n    DWORD  dwFlags,\n    LPVOID          lpContext );\n\ntypedef BOOL (CALLBACK *LPDPENUMPLAYERSCALLBACK2)(\n    DPID            dpId,\n    DWORD           dwPlayerType,\n    LPCDPNAME       lpName,\n    DWORD           dwFlags,\n    LPVOID          lpContext );\n\ntypedef BOOL (CALLBACK *LPDPENUMSESSIONSCALLBACK2)(\n    LPCDPSESSIONDESC2   lpThisSD,\n    LPDWORD             lpdwTimeOut,\n    DWORD               dwFlags,\n    LPVOID              lpContext );\n\n#define DPESC_TIMEDOUT          0x00000001\n\n/*****************************************************************************\n * IDirectPlay interface\n */\n#define INTERFACE IDirectPlay\nDECLARE_INTERFACE_(IDirectPlay,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectPlay methods ***/\n    STDMETHOD(AddPlayerToGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE;\n    STDMETHOD(Close)(THIS) PURE;\n    STDMETHOD(CreatePlayer)(THIS_ LPDPID lpidPlayer, LPSTR lpPlayerName, LPSTR, LPHANDLE) PURE;\n    STDMETHOD(CreateGroup)(THIS_ LPDPID lpidGroup, LPSTR lpGroupName, LPSTR) PURE;\n    STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE;\n    STDMETHOD(DestroyPlayer)(THIS_ DPID idPlayer) PURE;\n    STDMETHOD(DestroyGroup)(THIS_ DPID idGroup) PURE;\n    STDMETHOD(EnableNewPlayers)(THIS_ BOOL) PURE;\n    STDMETHOD(EnumGroupPlayers)(THIS_ DPID idGroup, LPDPENUMPLAYERSCALLBACK lpEnumPlayersCallback, LPVOID lpContext, DWORD dwFlags) PURE;\n    STDMETHOD(EnumGroups)(THIS_ DWORD, LPDPENUMPLAYERSCALLBACK lpEnumPlayersCallback, LPVOID lpContext, DWORD dwFlags) PURE;\n    STDMETHOD(EnumPlayers)(THIS_ DWORD, LPDPENUMPLAYERSCALLBACK lpEnumPlayersCallback, LPVOID lpContext, DWORD dwFlags) PURE;\n    STDMETHOD(EnumSessions)(THIS_ LPDPSESSIONDESC lpsd, DWORD dwTimeout, LPDPENUMSESSIONSCALLBACK lpEnumSessionsCallback, LPVOID lpContext, DWORD dwFlags) PURE;\n    STDMETHOD(GetCaps)(THIS_ LPDPCAPS lpDPCaps) PURE;\n    STDMETHOD(GetMessageCount)(THIS_ DPID idPlayer, LPDWORD lpdwCount) PURE;\n    STDMETHOD(GetPlayerCaps)(THIS_ DPID idPlayer, LPDPCAPS lpPlayerCaps) PURE;\n    STDMETHOD(GetPlayerName)(THIS_ DPID idPlayer, LPSTR, LPDWORD, LPSTR, LPDWORD) PURE;\n    STDMETHOD(Initialize)(THIS_ LPGUID lpGUID) PURE;\n    STDMETHOD(Open)(THIS_ LPDPSESSIONDESC lpsd) PURE;\n    STDMETHOD(Receive)(THIS_ LPDPID lpidFrom, LPDPID lpidTo, DWORD dwFlags, LPVOID lpData, LPDWORD lpdwDataSize) PURE;\n    STDMETHOD(SaveSession)(THIS_ LPSTR) PURE;\n    STDMETHOD(Send)(THIS_ DPID idFrom, DPID idTo, DWORD dwFlags, LPVOID lpData, DWORD dwDataSize) PURE;\n    STDMETHOD(SetPlayerName)(THIS_ DPID idPlayer, LPSTR lpPlayerName, LPSTR) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectPlay_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectPlay_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectPlay_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectPlay methods ***/\n#define IDirectPlay_AddPlayerToGroup(p,a,b)      (p)->lpVtbl->AddPlayerToGroup(p,a,b)\n#define IDirectPlay_Close(p)                     (p)->lpVtbl->Close(p)\n#define IDirectPlay_CreatePlayer(p,a,b,c,d)      (p)->lpVtbl->CreatePlayer(p,a,b,c,d)\n#define IDirectPlay_CreateGroup(p,a,b,c)         (p)->lpVtbl->CreateGroup(p,a,b,c)\n#define IDirectPlay_DeletePlayerFromGroup(p,a,b) (p)->lpVtbl->DeletePlayerFromGroup(p,a,b)\n#define IDirectPlay_DestroyPlayer(p,a)           (p)->lpVtbl->DestroyPlayer(p,a)\n#define IDirectPlay_DestroyGroup(p,a)            (p)->lpVtbl->DestroyGroup(p,a)\n#define IDirectPlay_EnableNewPlayers(p,a)        (p)->lpVtbl->EnableNewPlayers(p,a)\n#define IDirectPlay_EnumGroupPlayers(p,a,b,c,d)  (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d)\n#define IDirectPlay_EnumGroups(p,a,b,c,d)        (p)->lpVtbl->EnumGroups(p,a,b,c,d)\n#define IDirectPlay_EnumPlayers(p,a,b,c,d)       (p)->lpVtbl->EnumPlayers(p,a,b,c,d)\n#define IDirectPlay_EnumSessions(p,a,b,c,d,e)    (p)->lpVtbl->EnumSessions(p,a,b,c,d,e)\n#define IDirectPlay_GetCaps(p,a)                 (p)->lpVtbl->GetCaps(p,a)\n#define IDirectPlay_GetMessageCount(p,a,b)       (p)->lpVtbl->GetMessageCount(p,a,b)\n#define IDirectPlay_GetPlayerCaps(p,a,b)         (p)->lpVtbl->GetPlayerCaps(p,a,b)\n#define IDirectPlay_GetPlayerName(p,a,b,c,d,e)   (p)->lpVtbl->GetPlayerName(p,a,b,c,d,e)\n#define IDirectPlay_Initialize(p,a)              (p)->lpVtbl->Initialize(p,a)\n#define IDirectPlay_Open(p,a)                    (p)->lpVtbl->Open(p,a)\n#define IDirectPlay_Receive(p,a,b,c,d,e)         (p)->lpVtbl->Receive(p,a,b,c,d,e)\n#define IDirectPlay_SaveSession(p,a)             (p)->lpVtbl->SaveSession(p,a)\n#define IDirectPlay_Send(p,a,b,c,d,e)            (p)->lpVtbl->Send(p,a,b,c,d,e)\n#define IDirectPlay_SetPlayerName(p,a,b,c)       (p)->lpVtbl->SetPlayerName(p,a,b,c)\n#else\n/*** IUnknown methods ***/\n#define IDirectPlay_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectPlay_AddRef(p)             (p)->AddRef()\n#define IDirectPlay_Release(p)            (p)->Release()\n/*** IDirectPlay methods ***/\n#define IDirectPlay_AddPlayerToGroup(p,a,b)      (p)->AddPlayerToGroup(a,b)\n#define IDirectPlay_Close(p)                     (p)->Close()\n#define IDirectPlay_CreatePlayer(p,a,b,c,d)      (p)->CreatePlayer(a,b,c,d)\n#define IDirectPlay_CreateGroup(p,a,b,c)         (p)->CreateGroup(a,b,c)\n#define IDirectPlay_DeletePlayerFromGroup(p,a,b) (p)->DeletePlayerFromGroup(a,b)\n#define IDirectPlay_DestroyPlayer(p,a)           (p)->DestroyPlayer(a)\n#define IDirectPlay_DestroyGroup(p,a)            (p)->DestroyGroup(a)\n#define IDirectPlay_EnableNewPlayers(p,a)        (p)->EnableNewPlayers(a)\n#define IDirectPlay_EnumGroupPlayers(p,a,b,c,d)  (p)->EnumGroupPlayers(a,b,c,d)\n#define IDirectPlay_EnumGroups(p,a,b,c,d)        (p)->EnumGroups(a,b,c,d)\n#define IDirectPlay_EnumPlayers(p,a,b,c,d)       (p)->EnumPlayers(a,b,c,d)\n#define IDirectPlay_EnumSessions(p,a,b,c,d,e)    (p)->EnumSessions(a,b,c,d,e)\n#define IDirectPlay_GetCaps(p,a)                 (p)->GetCaps(a)\n#define IDirectPlay_GetMessageCount(p,a,b)       (p)->GetMessageCount(a,b)\n#define IDirectPlay_GetPlayerCaps(p,a,b)         (p)->GetPlayerCaps(a,b)\n#define IDirectPlay_GetPlayerName(p,a,b,c,d,e)   (p)->GetPlayerName(a,b,c,d,e)\n#define IDirectPlay_Initialize(p,a)              (p)->Initialize(a)\n#define IDirectPlay_Open(p,a)                    (p)->Open(a)\n#define IDirectPlay_Receive(p,a,b,c,d,e)         (p)->Receive(a,b,c,d,e)\n#define IDirectPlay_SaveSession(p,a)             (p)->SaveSession(a)\n#define IDirectPlay_Send(p,a,b,c,d,e)            (p)->Send(a,b,c,d,e)\n#define IDirectPlay_SetPlayerName(p,a,b,c)       (p)->SetPlayerName(a,b,c)\n#endif\n\n\n/*****************************************************************************\n * IDirectPlay2 and IDirectPlay2A interface\n */\n#define INTERFACE IDirectPlay2\nDECLARE_INTERFACE_(IDirectPlay2,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectPlay2 methods ***/\n    STDMETHOD(AddPlayerToGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE;\n    STDMETHOD(Close)(THIS) PURE;\n    STDMETHOD(CreateGroup)(THIS_ LPDPID lpidGroup, LPDPNAME lpGroupName, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(CreatePlayer)(THIS_ LPDPID lpidPlayer, LPDPNAME lpPlayerName, HANDLE hEvent, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE;\n    STDMETHOD(DestroyGroup)(THIS_ DPID idGroup) PURE;\n    STDMETHOD(DestroyPlayer)(THIS_ DPID idPlayer) PURE;\n    STDMETHOD(EnumGroupPlayers)(THIS_ DPID idGroup, LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;\n    STDMETHOD(EnumGroups)(THIS_ LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;\n    STDMETHOD(EnumPlayers)(THIS_ LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;\n    STDMETHOD(EnumSessions)(THIS_ LPDPSESSIONDESC2 lpsd, DWORD dwTimeout, LPDPENUMSESSIONSCALLBACK2 lpEnumSessionsCallback2, LPVOID lpContext, DWORD dwFlags) PURE;\n    STDMETHOD(GetCaps)(THIS_ LPDPCAPS lpDPCaps, DWORD dwFlags) PURE;\n    STDMETHOD(GetGroupData)(THIS_ DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(GetGroupName)(THIS_ DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize) PURE;\n    STDMETHOD(GetMessageCount)(THIS_ DPID idPlayer, LPDWORD lpdwCount) PURE;\n    STDMETHOD(GetPlayerAddress)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize) PURE;\n    STDMETHOD(GetPlayerCaps)(THIS_ DPID idPlayer, LPDPCAPS lpPlayerCaps, DWORD dwFlags) PURE;\n    STDMETHOD(GetPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(GetPlayerName)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize) PURE;\n    STDMETHOD(GetSessionDesc)(THIS_ LPVOID lpData, LPDWORD lpdwDataSize) PURE;\n    STDMETHOD(Initialize)(THIS_ LPGUID lpGUID) PURE;\n    STDMETHOD(Open)(THIS_ LPDPSESSIONDESC2 lpsd, DWORD dwFlags) PURE;\n    STDMETHOD(Receive)(THIS_ LPDPID lpidFrom, LPDPID lpidTo, DWORD dwFlags, LPVOID lpData, LPDWORD lpdwDataSize) PURE;\n    STDMETHOD(Send)(THIS_ DPID idFrom, DPID idTo, DWORD dwFlags, LPVOID lpData, DWORD dwDataSize) PURE;\n    STDMETHOD(SetGroupData)(THIS_ DPID idGroup, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(SetGroupName)(THIS_ DPID idGroup, LPDPNAME lpGroupName, DWORD dwFlags) PURE;\n    STDMETHOD(SetPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(SetPlayerName)(THIS_ DPID idPlayer, LPDPNAME lpPlayerName, DWORD dwFlags) PURE;\n    STDMETHOD(SetSessionDesc)(THIS_ LPDPSESSIONDESC2 lpSessDesc, DWORD dwFlags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectPlay2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectPlay2_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectPlay2_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectPlay2 methods ***/\n#define IDirectPlay2_AddPlayerToGroup(p,a,b)       (p)->lpVtbl->AddPlayerToGroup(p,a,b)\n#define IDirectPlay2_Close(p)                      (p)->lpVtbl->Close(p)\n#define IDirectPlay2_CreateGroup(p,a,b,c,d,e)      (p)->lpVtbl->CreateGroup(p,a,b,c,d,e)\n#define IDirectPlay2_CreatePlayer(p,a,b,c,d,e,f)   (p)->lpVtbl->CreatePlayer(p,a,b,c,d,e,f)\n#define IDirectPlay2_DeletePlayerFromGroup(p,a,b)  (p)->lpVtbl->DeletePlayerFromGroup(p,a,b)\n#define IDirectPlay2_DestroyGroup(p,a)             (p)->lpVtbl->DestroyGroup(p,a)\n#define IDirectPlay2_DestroyPlayer(p,a)            (p)->lpVtbl->DestroyPlayer(p,a)\n#define IDirectPlay2_EnumGroupPlayers(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d,e)\n#define IDirectPlay2_EnumGroups(p,a,b,c,d)         (p)->lpVtbl->EnumGroups(p,a,b,c,d)\n#define IDirectPlay2_EnumPlayers(p,a,b,c,d)        (p)->lpVtbl->EnumPlayers(p,a,b,c,d)\n#define IDirectPlay2_EnumSessions(p,a,b,c,d,e)     (p)->lpVtbl->EnumSessions(p,a,b,c,d,e)\n#define IDirectPlay2_GetCaps(p,a,b)                (p)->lpVtbl->GetCaps(p,a,b)\n#define IDirectPlay2_GetGroupData(p,a,b,c,d)       (p)->lpVtbl->GetGroupData(p,a,b,c,d)\n#define IDirectPlay2_GetGroupName(p,a,b,c)         (p)->lpVtbl->GetGroupName(p,a,b,c)\n#define IDirectPlay2_GetMessageCount(p,a,b)        (p)->lpVtbl->GetMessageCount(p,a,b)\n#define IDirectPlay2_GetPlayerAddress(p,a,b,c)     (p)->lpVtbl->GetPlayerAddress(p,a,b,c)\n#define IDirectPlay2_GetPlayerCaps(p,a,b,c)        (p)->lpVtbl->GetPlayerCaps(p,a,b,c)\n#define IDirectPlay2_GetPlayerData(p,a,b,c,d)      (p)->lpVtbl->GetPlayerData(p,a,b,c,d)\n#define IDirectPlay2_GetPlayerName(p,a,b,c)        (p)->lpVtbl->GetPlayerName(p,a,b,c)\n#define IDirectPlay2_GetSessionDesc(p,a,b)         (p)->lpVtbl->GetSessionDesc(p,a,b)\n#define IDirectPlay2_Initialize(p,a)               (p)->lpVtbl->Initialize(p,a)\n#define IDirectPlay2_Open(p,a,b)                   (p)->lpVtbl->Open(p,a,b)\n#define IDirectPlay2_Receive(p,a,b,c,d,e)          (p)->lpVtbl->Receive(p,a,b,c,d,e)\n#define IDirectPlay2_Send(p,a,b,c,d,e)             (p)->lpVtbl->Send(p,a,b,c,d,e)\n#define IDirectPlay2_SetGroupData(p,a,b,c,d)       (p)->lpVtbl->SetGroupData(p,a,b,c,d)\n#define IDirectPlay2_SetGroupName(p,a,b,c)         (p)->lpVtbl->SetGroupName(p,a,b,c)\n#define IDirectPlay2_SetPlayerData(p,a,b,c,d)      (p)->lpVtbl->SetPlayerData(p,a,b,c,d)\n#define IDirectPlay2_SetPlayerName(p,a,b,c)        (p)->lpVtbl->SetPlayerName(p,a,b,c)\n#define IDirectPlay2_SetSessionDesc(p,a,b)         (p)->lpVtbl->SetSessionDesc(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirectPlay2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectPlay2_AddRef(p)             (p)->AddRef()\n#define IDirectPlay2_Release(p)            (p)->Release()\n/*** IDirectPlay2 methods ***/\n#define IDirectPlay2_AddPlayerToGroup(p,a,b)       (p)->AddPlayerToGroup(a,b)\n#define IDirectPlay2_Close(p)                      (p)->Close()\n#define IDirectPlay2_CreateGroup(p,a,b,c,d,e)      (p)->CreateGroup(a,b,c,d,e)\n#define IDirectPlay2_CreatePlayer(p,a,b,c,d,e,f)   (p)->CreatePlayer(a,b,c,d,e,f)\n#define IDirectPlay2_DeletePlayerFromGroup(p,a,b)  (p)->DeletePlayerFromGroup(a,b)\n#define IDirectPlay2_DestroyGroup(p,a)             (p)->DestroyGroup(a)\n#define IDirectPlay2_DestroyPlayer(p,a)            (p)->DestroyPlayer(a)\n#define IDirectPlay2_EnumGroupPlayers(p,a,b,c,d,e) (p)->EnumGroupPlayers(a,b,c,d,e)\n#define IDirectPlay2_EnumGroups(p,a,b,c,d)         (p)->EnumGroups(a,b,c,d)\n#define IDirectPlay2_EnumPlayers(p,a,b,c,d)        (p)->EnumPlayers(a,b,c,d)\n#define IDirectPlay2_EnumSessions(p,a,b,c,d,e)     (p)->EnumSessions(a,b,c,d,e)\n#define IDirectPlay2_GetCaps(p,a,b)                (p)->GetCaps(a,b)\n#define IDirectPlay2_GetGroupData(p,a,b,c,d)       (p)->GetGroupData(a,b,c,d)\n#define IDirectPlay2_GetGroupName(p,a,b,c)         (p)->GetGroupName(a,b,c)\n#define IDirectPlay2_GetMessageCount(p,a,b)        (p)->GetMessageCount(a,b)\n#define IDirectPlay2_GetPlayerAddress(p,a,b,c)     (p)->GetPlayerAddress(a,b,c)\n#define IDirectPlay2_GetPlayerCaps(p,a,b,c)        (p)->GetPlayerCaps(a,b,c)\n#define IDirectPlay2_GetPlayerData(p,a,b,c,d)      (p)->GetPlayerData(a,b,c,d)\n#define IDirectPlay2_GetPlayerName(p,a,b,c)        (p)->GetPlayerName(a,b,c)\n#define IDirectPlay2_GetSessionDesc(p,a,b)         (p)->GetSessionDesc(a,b)\n#define IDirectPlay2_Initialize(p,a)               (p)->Initialize(a)\n#define IDirectPlay2_Open(p,a,b)                   (p)->Open(a,b)\n#define IDirectPlay2_Receive(p,a,b,c,d,e)          (p)->Receive(a,b,c,d,e)\n#define IDirectPlay2_Send(p,a,b,c,d,e)             (p)->Send(a,b,c,d,e)\n#define IDirectPlay2_SetGroupData(p,a,b,c,d)       (p)->SetGroupData(a,b,c,d)\n#define IDirectPlay2_SetGroupName(p,a,b,c)         (p)->SetGroupName(a,b,c)\n#define IDirectPlay2_SetPlayerData(p,a,b,c,d)      (p)->SetPlayerData(a,b,c,d)\n#define IDirectPlay2_SetPlayerName(p,a,b,c)        (p)->SetPlayerName(a,b,c)\n#define IDirectPlay2_SetSessionDesc(p,a,b)         (p)->SetSessionDesc(a,b)\n#endif\n\n\n/*****************************************************************************\n * IDirectPlay3 and IDirectPlay3A interface\n */\n#define INTERFACE IDirectPlay3\nDECLARE_INTERFACE_(IDirectPlay3,IDirectPlay2)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectPlay2 methods ***/\n    STDMETHOD(AddPlayerToGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE;\n    STDMETHOD(Close)(THIS) PURE;\n    STDMETHOD(CreateGroup)(THIS_ LPDPID lpidGroup, LPDPNAME lpGroupName, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(CreatePlayer)(THIS_ LPDPID lpidPlayer, LPDPNAME lpPlayerName, HANDLE hEvent, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE;\n    STDMETHOD(DestroyGroup)(THIS_ DPID idGroup) PURE;\n    STDMETHOD(DestroyPlayer)(THIS_ DPID idPlayer) PURE;\n    STDMETHOD(EnumGroupPlayers)(THIS_ DPID idGroup, LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;\n    STDMETHOD(EnumGroups)(THIS_ LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;\n    STDMETHOD(EnumPlayers)(THIS_ LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;\n    STDMETHOD(EnumSessions)(THIS_ LPDPSESSIONDESC2 lpsd, DWORD dwTimeout, LPDPENUMSESSIONSCALLBACK2 lpEnumSessionsCallback2, LPVOID lpContext, DWORD dwFlags) PURE;\n    STDMETHOD(GetCaps)(THIS_ LPDPCAPS lpDPCaps, DWORD dwFlags) PURE;\n    STDMETHOD(GetGroupData)(THIS_ DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(GetGroupName)(THIS_ DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize) PURE;\n    STDMETHOD(GetMessageCount)(THIS_ DPID idPlayer, LPDWORD lpdwCount) PURE;\n    STDMETHOD(GetPlayerAddress)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize) PURE;\n    STDMETHOD(GetPlayerCaps)(THIS_ DPID idPlayer, LPDPCAPS lpPlayerCaps, DWORD dwFlags) PURE;\n    STDMETHOD(GetPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(GetPlayerName)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize) PURE;\n    STDMETHOD(GetSessionDesc)(THIS_ LPVOID lpData, LPDWORD lpdwDataSize) PURE;\n    STDMETHOD(Initialize)(THIS_ LPGUID lpGUID) PURE;\n    STDMETHOD(Open)(THIS_ LPDPSESSIONDESC2 lpsd, DWORD dwFlags) PURE;\n    STDMETHOD(Receive)(THIS_ LPDPID lpidFrom, LPDPID lpidTo, DWORD dwFlags, LPVOID lpData, LPDWORD lpdwDataSize) PURE;\n    STDMETHOD(Send)(THIS_ DPID idFrom, DPID idTo, DWORD dwFlags, LPVOID lpData, DWORD dwDataSize) PURE;\n    STDMETHOD(SetGroupData)(THIS_ DPID idGroup, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(SetGroupName)(THIS_ DPID idGroup, LPDPNAME lpGroupName, DWORD dwFlags) PURE;\n    STDMETHOD(SetPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(SetPlayerName)(THIS_ DPID idPlayer, LPDPNAME lpPlayerName, DWORD dwFlags) PURE;\n    STDMETHOD(SetSessionDesc)(THIS_ LPDPSESSIONDESC2 lpSessDesc, DWORD dwFlags) PURE;\n    /*** IDirectPlay3 methods ***/\n    STDMETHOD(AddGroupToGroup)(THIS_ DPID idParentGroup, DPID idGroup) PURE;\n    STDMETHOD(CreateGroupInGroup)(THIS_ DPID idParentGroup, LPDPID lpidGroup, LPDPNAME lpGroupName, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(DeleteGroupFromGroup)(THIS_ DPID idParentGroup, DPID idGroup) PURE;\n    STDMETHOD(EnumConnections)(THIS_ LPCGUID lpguidApplication, LPDPENUMCONNECTIONSCALLBACK lpEnumCallback, LPVOID lpContext, DWORD dwFlags) PURE;\n    STDMETHOD(EnumGroupsInGroup)(THIS_ DPID idGroup, LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumCallback, LPVOID lpContext, DWORD dwFlags) PURE;\n    STDMETHOD(GetGroupConnectionSettings)(THIS_ DWORD dwFlags, DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize) PURE;\n    STDMETHOD(InitializeConnection)(THIS_ LPVOID lpConnection, DWORD dwFlags) PURE;\n    STDMETHOD(SecureOpen)(THIS_ LPCDPSESSIONDESC2 lpsd, DWORD dwFlags, LPCDPSECURITYDESC lpSecurity, LPCDPCREDENTIALS lpCredentials) PURE;\n    STDMETHOD(SendChatMessage)(THIS_ DPID idFrom, DPID idTo, DWORD dwFlags, LPDPCHAT lpChatMessage) PURE;\n    STDMETHOD(SetGroupConnectionSettings)(THIS_ DWORD dwFlags, DPID idGroup, LPDPLCONNECTION lpConnection) PURE;\n    STDMETHOD(StartSession)(THIS_ DWORD dwFlags, DPID idGroup) PURE;\n    STDMETHOD(GetGroupFlags)(THIS_ DPID idGroup, LPDWORD lpdwFlags) PURE;\n    STDMETHOD(GetGroupParent)(THIS_ DPID idGroup, LPDPID lpidParent) PURE;\n    STDMETHOD(GetPlayerAccount)(THIS_ DPID idPlayer, DWORD dwFlags, LPVOID lpData, LPDWORD lpdwDataSize) PURE;\n    STDMETHOD(GetPlayerFlags)(THIS_ DPID idPlayer, LPDWORD lpdwFlags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectPlay3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectPlay3_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectPlay3_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectPlay2 methods ***/\n#define IDirectPlay3_AddPlayerToGroup(p,a,b)       (p)->lpVtbl->AddPlayerToGroup(p,a,b)\n#define IDirectPlay3_Close(p)                      (p)->lpVtbl->Close(p)\n#define IDirectPlay3_CreateGroup(p,a,b,c,d,e)      (p)->lpVtbl->CreateGroup(p,a,b,c,d,e)\n#define IDirectPlay3_CreatePlayer(p,a,b,c,d,e,f)   (p)->lpVtbl->CreatePlayer(p,a,b,c,d,e,f)\n#define IDirectPlay3_DeletePlayerFromGroup(p,a,b)  (p)->lpVtbl->DeletePlayerFromGroup(p,a,b)\n#define IDirectPlay3_DestroyGroup(p,a)             (p)->lpVtbl->DestroyGroup(p,a)\n#define IDirectPlay3_DestroyPlayer(p,a)            (p)->lpVtbl->DestroyPlayer(p,a)\n#define IDirectPlay3_EnumGroupPlayers(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d,e)\n#define IDirectPlay3_EnumGroups(p,a,b,c,d)         (p)->lpVtbl->EnumGroups(p,a,b,c,d)\n#define IDirectPlay3_EnumPlayers(p,a,b,c,d)        (p)->lpVtbl->EnumPlayers(p,a,b,c,d)\n#define IDirectPlay3_EnumSessions(p,a,b,c,d,e)     (p)->lpVtbl->EnumSessions(p,a,b,c,d,e)\n#define IDirectPlay3_GetCaps(p,a,b)                (p)->lpVtbl->GetCaps(p,a,b)\n#define IDirectPlay3_GetGroupData(p,a,b,c,d)       (p)->lpVtbl->GetGroupData(p,a,b,c,d)\n#define IDirectPlay3_GetGroupName(p,a,b,c)         (p)->lpVtbl->GetGroupName(p,a,b,c)\n#define IDirectPlay3_GetMessageCount(p,a,b)        (p)->lpVtbl->GetMessageCount(p,a,b)\n#define IDirectPlay3_GetPlayerAddress(p,a,b,c)     (p)->lpVtbl->GetPlayerAddress(p,a,b,c)\n#define IDirectPlay3_GetPlayerCaps(p,a,b,c)        (p)->lpVtbl->GetPlayerCaps(p,a,b,c)\n#define IDirectPlay3_GetPlayerData(p,a,b,c,d)      (p)->lpVtbl->GetPlayerData(p,a,b,c,d)\n#define IDirectPlay3_GetPlayerName(p,a,b,c)        (p)->lpVtbl->GetPlayerName(p,a,b,c)\n#define IDirectPlay3_GetSessionDesc(p,a,b)         (p)->lpVtbl->GetSessionDesc(p,a,b)\n#define IDirectPlay3_Initialize(p,a)               (p)->lpVtbl->Initialize(p,a)\n#define IDirectPlay3_Open(p,a,b)                   (p)->lpVtbl->Open(p,a,b)\n#define IDirectPlay3_Receive(p,a,b,c,d,e)          (p)->lpVtbl->Receive(p,a,b,c,d,e)\n#define IDirectPlay3_Send(p,a,b,c,d,e)             (p)->lpVtbl->Send(p,a,b,c,d,e)\n#define IDirectPlay3_SetGroupData(p,a,b,c,d)       (p)->lpVtbl->SetGroupData(p,a,b,c,d)\n#define IDirectPlay3_SetGroupName(p,a,b,c)         (p)->lpVtbl->SetGroupName(p,a,b,c)\n#define IDirectPlay3_SetPlayerData(p,a,b,c,d)      (p)->lpVtbl->SetPlayerData(p,a,b,c,d)\n#define IDirectPlay3_SetPlayerName(p,a,b,c)        (p)->lpVtbl->SetPlayerName(p,a,b,c)\n#define IDirectPlay3_SetSessionDesc(p,a,b)         (p)->lpVtbl->SetSessionDesc(p,a,b)\n/*** IDirectPlay3 methods ***/\n#define IDirectPlay3_AddGroupToGroup(p,a,b)                (p)->lpVtbl->AddGroupToGroup(p,a,b)\n#define IDirectPlay3_CreateGroupInGroup(p,a,b,c,d,e,f)     (p)->lpVtbl->CreateGroupInGroup(p,a,b,c,d,e,f)\n#define IDirectPlay3_DeleteGroupFromGroup(p,a,b)           (p)->lpVtbl->DeleteGroupFromGroup(p,a,b)\n#define IDirectPlay3_EnumConnections(p,a,b,c,d)            (p)->lpVtbl->EnumConnections(p,a,b,c,d)\n#define IDirectPlay3_EnumGroupsInGroup(p,a,b,c,d,e)        (p)->lpVtbl->EnumGroupsInGroup(p,a,b,c,d,e)\n#define IDirectPlay3_GetGroupConnectionSettings(p,a,b,c,d) (p)->lpVtbl->GetGroupConnectionSettings(p,a,b,c,d)\n#define IDirectPlay3_InitializeConnection(p,a,b)           (p)->lpVtbl->InitializeConnection(p,a,b)\n#define IDirectPlay3_SecureOpen(p,a,b,c,d)                 (p)->lpVtbl->SecureOpen(p,a,b,c,d)\n#define IDirectPlay3_SendChatMessage(p,a,b,c,d)            (p)->lpVtbl->SendChatMessage(p,a,b,c,d)\n#define IDirectPlay3_SetGroupConnectionSettings(p,a,b,c)   (p)->lpVtbl->SetGroupConnectionSettings(p,a,b,c)\n#define IDirectPlay3_StartSession(p,a,b)                   (p)->lpVtbl->StartSession(p,a,b)\n#define IDirectPlay3_GetGroupFlags(p,a,b)                  (p)->lpVtbl->GetGroupFlags(p,a,b)\n#define IDirectPlay3_GetGroupParent(p,a,b)                 (p)->lpVtbl->GetGroupParent(p,a,b)\n#define IDirectPlay3_GetPlayerAccount(p,a,b,c,d)           (p)->lpVtbl->GetPlayerAccount(p,a,b,c,d)\n#define IDirectPlay3_GetPlayerFlags(p,a,b)                 (p)->lpVtbl->GetPlayerFlags(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirectPlay3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectPlay3_AddRef(p)             (p)->AddRef()\n#define IDirectPlay3_Release(p)            (p)->Release()\n/*** IDirectPlay2 methods ***/\n#define IDirectPlay3_AddPlayerToGroup(p,a,b)       (p)->AddPlayerToGroup(a,b)\n#define IDirectPlay3_Close(p)                      (p)->Close()\n#define IDirectPlay3_CreateGroup(p,a,b,c,d,e)      (p)->CreateGroup(a,b,c,d,e)\n#define IDirectPlay3_CreatePlayer(p,a,b,c,d,e,f)   (p)->CreatePlayer(a,b,c,d,e,f)\n#define IDirectPlay3_DeletePlayerFromGroup(p,a,b)  (p)->DeletePlayerFromGroup(a,b)\n#define IDirectPlay3_DestroyGroup(p,a)             (p)->DestroyGroup(a)\n#define IDirectPlay3_DestroyPlayer(p,a)            (p)->DestroyPlayer(a)\n#define IDirectPlay3_EnumGroupPlayers(p,a,b,c,d,e) (p)->EnumGroupPlayers(a,b,c,d,e)\n#define IDirectPlay3_EnumGroups(p,a,b,c,d)         (p)->EnumGroups(a,b,c,d)\n#define IDirectPlay3_EnumPlayers(p,a,b,c,d)        (p)->EnumPlayers(a,b,c,d)\n#define IDirectPlay3_EnumSessions(p,a,b,c,d,e)     (p)->EnumSessions(a,b,c,d,e)\n#define IDirectPlay3_GetCaps(p,a,b)                (p)->GetCaps(a,b)\n#define IDirectPlay3_GetGroupData(p,a,b,c,d)       (p)->GetGroupData(a,b,c,d)\n#define IDirectPlay3_GetGroupName(p,a,b,c)         (p)->GetGroupName(a,b,c)\n#define IDirectPlay3_GetMessageCount(p,a,b)        (p)->GetMessageCount(a,b)\n#define IDirectPlay3_GetPlayerAddress(p,a,b,c)     (p)->GetPlayerAddress(a,b,c)\n#define IDirectPlay3_GetPlayerCaps(p,a,b,c)        (p)->GetPlayerCaps(a,b,c)\n#define IDirectPlay3_GetPlayerData(p,a,b,c,d)      (p)->GetPlayerData(a,b,c,d)\n#define IDirectPlay3_GetPlayerName(p,a,b,c)        (p)->GetPlayerName(a,b,c)\n#define IDirectPlay3_GetSessionDesc(p,a,b)         (p)->GetSessionDesc(a,b)\n#define IDirectPlay3_Initialize(p,a)               (p)->Initialize(a)\n#define IDirectPlay3_Open(p,a,b)                   (p)->Open(a,b)\n#define IDirectPlay3_Receive(p,a,b,c,d,e)          (p)->Receive(a,b,c,d,e)\n#define IDirectPlay3_Send(p,a,b,c,d,e)             (p)->Send(a,b,c,d,e)\n#define IDirectPlay3_SetGroupData(p,a,b,c,d)       (p)->SetGroupData(a,b,c,d)\n#define IDirectPlay3_SetGroupName(p,a,b,c)         (p)->SetGroupName(a,b,c)\n#define IDirectPlay3_SetPlayerData(p,a,b,c,d)      (p)->SetPlayerData(a,b,c,d)\n#define IDirectPlay3_SetPlayerName(p,a,b,c)        (p)->SetPlayerName(a,b,c)\n#define IDirectPlay3_SetSessionDesc(p,a,b)         (p)->SetSessionDesc(a,b)\n/*** IDirectPlay3 methods ***/\n#define IDirectPlay3_AddGroupToGroup(p,a,b)                (p)->AddGroupToGroup(a,b)\n#define IDirectPlay3_CreateGroupInGroup(p,a,b,c,d,e,f)     (p)->CreateGroupInGroup(a,b,c,d,e,f)\n#define IDirectPlay3_DeleteGroupFromGroup(p,a,b)           (p)->DeleteGroupFromGroup(a,b)\n#define IDirectPlay3_EnumConnections(p,a,b,c,d)            (p)->EnumConnections(a,b,c,d)\n#define IDirectPlay3_EnumGroupsInGroup(p,a,b,c,d,e)        (p)->EnumGroupsInGroup(a,b,c,d,e)\n#define IDirectPlay3_GetGroupConnectionSettings(p,a,b,c,d) (p)->GetGroupConnectionSettings(a,b,c,d)\n#define IDirectPlay3_InitializeConnection(p,a,b)           (p)->InitializeConnection(a,b)\n#define IDirectPlay3_SecureOpen(p,a,b,c,d)                 (p)->SecureOpen(a,b,c,d)\n#define IDirectPlay3_SendChatMessage(p,a,b,c,d)            (p)->SendChatMessage(a,b,c,d)\n#define IDirectPlay3_SetGroupConnectionSettings(p,a,b,c)   (p)->SetGroupConnectionSettings(a,b,c)\n#define IDirectPlay3_StartSession(p,a,b)                   (p)->StartSession(a,b)\n#define IDirectPlay3_GetGroupFlags(p,a,b)                  (p)->GetGroupFlags(a,b)\n#define IDirectPlay3_GetGroupParent(p,a,b)                 (p)->GetGroupParent(a,b)\n#define IDirectPlay3_GetPlayerAccount(p,a,b,c,d)           (p)->GetPlayerAccount(a,b,c,d)\n#define IDirectPlay3_GetPlayerFlags(p,a,b)                 (p)->GetPlayerFlags(a,b)\n#endif\n\n/*****************************************************************************\n * IDirectPlay4 and IDirectPlay4A interface\n */\n#define INTERFACE IDirectPlay4\nDECLARE_INTERFACE_(IDirectPlay4,IDirectPlay3)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectPlay2 methods ***/\n    STDMETHOD(AddPlayerToGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE;\n    STDMETHOD(Close)(THIS) PURE;\n    STDMETHOD(CreateGroup)(THIS_ LPDPID lpidGroup, LPDPNAME lpGroupName, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(CreatePlayer)(THIS_ LPDPID lpidPlayer, LPDPNAME lpPlayerName, HANDLE hEvent, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE;\n    STDMETHOD(DestroyGroup)(THIS_ DPID idGroup) PURE;\n    STDMETHOD(DestroyPlayer)(THIS_ DPID idPlayer) PURE;\n    STDMETHOD(EnumGroupPlayers)(THIS_ DPID idGroup, LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;\n    STDMETHOD(EnumGroups)(THIS_ LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;\n    STDMETHOD(EnumPlayers)(THIS_ LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;\n    STDMETHOD(EnumSessions)(THIS_ LPDPSESSIONDESC2 lpsd, DWORD dwTimeout, LPDPENUMSESSIONSCALLBACK2 lpEnumSessionsCallback2, LPVOID lpContext, DWORD dwFlags) PURE;\n    STDMETHOD(GetCaps)(THIS_ LPDPCAPS lpDPCaps, DWORD dwFlags) PURE;\n    STDMETHOD(GetGroupData)(THIS_ DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(GetGroupName)(THIS_ DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize) PURE;\n    STDMETHOD(GetMessageCount)(THIS_ DPID idPlayer, LPDWORD lpdwCount) PURE;\n    STDMETHOD(GetPlayerAddress)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize) PURE;\n    STDMETHOD(GetPlayerCaps)(THIS_ DPID idPlayer, LPDPCAPS lpPlayerCaps, DWORD dwFlags) PURE;\n    STDMETHOD(GetPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(GetPlayerName)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize) PURE;\n    STDMETHOD(GetSessionDesc)(THIS_ LPVOID lpData, LPDWORD lpdwDataSize) PURE;\n    STDMETHOD(Initialize)(THIS_ LPGUID lpGUID) PURE;\n    STDMETHOD(Open)(THIS_ LPDPSESSIONDESC2 lpsd, DWORD dwFlags) PURE;\n    STDMETHOD(Receive)(THIS_ LPDPID lpidFrom, LPDPID lpidTo, DWORD dwFlags, LPVOID lpData, LPDWORD lpdwDataSize) PURE;\n    STDMETHOD(Send)(THIS_ DPID idFrom, DPID idTo, DWORD dwFlags, LPVOID lpData, DWORD dwDataSize) PURE;\n    STDMETHOD(SetGroupData)(THIS_ DPID idGroup, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(SetGroupName)(THIS_ DPID idGroup, LPDPNAME lpGroupName, DWORD dwFlags) PURE;\n    STDMETHOD(SetPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(SetPlayerName)(THIS_ DPID idPlayer, LPDPNAME lpPlayerName, DWORD dwFlags) PURE;\n    STDMETHOD(SetSessionDesc)(THIS_ LPDPSESSIONDESC2 lpSessDesc, DWORD dwFlags) PURE;\n    /*** IDirectPlay3 methods ***/\n    STDMETHOD(AddGroupToGroup)(THIS_ DPID idParentGroup, DPID idGroup) PURE;\n    STDMETHOD(CreateGroupInGroup)(THIS_ DPID idParentGroup, LPDPID lpidGroup, LPDPNAME lpGroupName, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(DeleteGroupFromGroup)(THIS_ DPID idParentGroup, DPID idGroup) PURE;\n    STDMETHOD(EnumConnections)(THIS_ LPCGUID lpguidApplication, LPDPENUMCONNECTIONSCALLBACK lpEnumCallback, LPVOID lpContext, DWORD dwFlags) PURE;\n    STDMETHOD(EnumGroupsInGroup)(THIS_ DPID idGroup, LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumCallback, LPVOID lpContext, DWORD dwFlags) PURE;\n    STDMETHOD(GetGroupConnectionSettings)(THIS_ DWORD dwFlags, DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize) PURE;\n    STDMETHOD(InitializeConnection)(THIS_ LPVOID lpConnection, DWORD dwFlags) PURE;\n    STDMETHOD(SecureOpen)(THIS_ LPCDPSESSIONDESC2 lpsd, DWORD dwFlags, LPCDPSECURITYDESC lpSecurity, LPCDPCREDENTIALS lpCredentials) PURE;\n    STDMETHOD(SendChatMessage)(THIS_ DPID idFrom, DPID idTo, DWORD dwFlags, LPDPCHAT lpChatMessage) PURE;\n    STDMETHOD(SetGroupConnectionSettings)(THIS_ DWORD dwFlags, DPID idGroup, LPDPLCONNECTION lpConnection) PURE;\n    STDMETHOD(StartSession)(THIS_ DWORD dwFlags, DPID idGroup) PURE;\n    STDMETHOD(GetGroupFlags)(THIS_ DPID idGroup, LPDWORD lpdwFlags) PURE;\n    STDMETHOD(GetGroupParent)(THIS_ DPID idGroup, LPDPID lpidParent) PURE;\n    STDMETHOD(GetPlayerAccount)(THIS_ DPID idPlayer, DWORD dwFlags, LPVOID lpData, LPDWORD lpdwDataSize) PURE;\n    STDMETHOD(GetPlayerFlags)(THIS_ DPID idPlayer, LPDWORD lpdwFlags) PURE;\n    /*** IDirectPlay4 methods ***/\n    STDMETHOD(GetGroupOwner)(THIS_ DPID , LPDPID  ) PURE;\n    STDMETHOD(SetGroupOwner)(THIS_ DPID , DPID  ) PURE;\n    STDMETHOD(SendEx)(THIS_ DPID , DPID , DWORD , LPVOID , DWORD , DWORD , DWORD , LPVOID , LPDWORD  ) PURE;\n    STDMETHOD(GetMessageQueue)(THIS_ DPID , DPID , DWORD , LPDWORD , LPDWORD  ) PURE;\n    STDMETHOD(CancelMessage)(THIS_ DWORD , DWORD  ) PURE;\n    STDMETHOD(CancelPriority)(THIS_ DWORD , DWORD , DWORD  ) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectPlayX_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectPlayX_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectPlayX_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectPlay2 methods ***/\n#define IDirectPlayX_AddPlayerToGroup(p,a,b)       (p)->lpVtbl->AddPlayerToGroup(p,a,b)\n#define IDirectPlayX_Close(p)                      (p)->lpVtbl->Close(p)\n#define IDirectPlayX_CreateGroup(p,a,b,c,d,e)      (p)->lpVtbl->CreateGroup(p,a,b,c,d,e)\n#define IDirectPlayX_CreatePlayer(p,a,b,c,d,e,f)   (p)->lpVtbl->CreatePlayer(p,a,b,c,d,e,f)\n#define IDirectPlayX_DeletePlayerFromGroup(p,a,b)  (p)->lpVtbl->DeletePlayerFromGroup(p,a,b)\n#define IDirectPlayX_DestroyGroup(p,a)             (p)->lpVtbl->DestroyGroup(p,a)\n#define IDirectPlayX_DestroyPlayer(p,a)            (p)->lpVtbl->DestroyPlayer(p,a)\n#define IDirectPlayX_EnumGroupPlayers(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d,e)\n#define IDirectPlayX_EnumGroups(p,a,b,c,d)         (p)->lpVtbl->EnumGroups(p,a,b,c,d)\n#define IDirectPlayX_EnumPlayers(p,a,b,c,d)        (p)->lpVtbl->EnumPlayers(p,a,b,c,d)\n#define IDirectPlayX_EnumSessions(p,a,b,c,d,e)     (p)->lpVtbl->EnumSessions(p,a,b,c,d,e)\n#define IDirectPlayX_GetCaps(p,a,b)                (p)->lpVtbl->GetCaps(p,a,b)\n#define IDirectPlayX_GetGroupData(p,a,b,c,d)       (p)->lpVtbl->GetGroupData(p,a,b,c,d)\n#define IDirectPlayX_GetGroupName(p,a,b,c)         (p)->lpVtbl->GetGroupName(p,a,b,c)\n#define IDirectPlayX_GetMessageCount(p,a,b)        (p)->lpVtbl->GetMessageCount(p,a,b)\n#define IDirectPlayX_GetPlayerAddress(p,a,b,c)     (p)->lpVtbl->GetPlayerAddress(p,a,b,c)\n#define IDirectPlayX_GetPlayerCaps(p,a,b,c)        (p)->lpVtbl->GetPlayerCaps(p,a,b,c)\n#define IDirectPlayX_GetPlayerData(p,a,b,c,d)      (p)->lpVtbl->GetPlayerData(p,a,b,c,d)\n#define IDirectPlayX_GetPlayerName(p,a,b,c)        (p)->lpVtbl->GetPlayerName(p,a,b,c)\n#define IDirectPlayX_GetSessionDesc(p,a,b)         (p)->lpVtbl->GetSessionDesc(p,a,b)\n#define IDirectPlayX_Initialize(p,a)               (p)->lpVtbl->Initialize(p,a)\n#define IDirectPlayX_Open(p,a,b)                   (p)->lpVtbl->Open(p,a,b)\n#define IDirectPlayX_Receive(p,a,b,c,d,e)          (p)->lpVtbl->Receive(p,a,b,c,d,e)\n#define IDirectPlayX_Send(p,a,b,c,d,e)             (p)->lpVtbl->Send(p,a,b,c,d,e)\n#define IDirectPlayX_SetGroupData(p,a,b,c,d)       (p)->lpVtbl->SetGroupData(p,a,b,c,d)\n#define IDirectPlayX_SetGroupName(p,a,b,c)         (p)->lpVtbl->SetGroupName(p,a,b,c)\n#define IDirectPlayX_SetPlayerData(p,a,b,c,d)      (p)->lpVtbl->SetPlayerData(p,a,b,c,d)\n#define IDirectPlayX_SetPlayerName(p,a,b,c)        (p)->lpVtbl->SetPlayerName(p,a,b,c)\n#define IDirectPlayX_SetSessionDesc(p,a,b)         (p)->lpVtbl->SetSessionDesc(p,a,b)\n/*** IDirectPlay3 methods ***/\n#define IDirectPlayX_AddGroupToGroup(p,a,b)                (p)->lpVtbl->AddGroupToGroup(p,a,b)\n#define IDirectPlayX_CreateGroupInGroup(p,a,b,c,d,e,f)     (p)->lpVtbl->CreateGroupInGroup(p,a,b,c,d,e,f)\n#define IDirectPlayX_DeleteGroupFromGroup(p,a,b)           (p)->lpVtbl->DeleteGroupFromGroup(p,a,b)\n#define IDirectPlayX_EnumConnections(p,a,b,c,d)            (p)->lpVtbl->EnumConnections(p,a,b,c,d)\n#define IDirectPlayX_EnumGroupsInGroup(p,a,b,c,d,e)        (p)->lpVtbl->EnumGroupsInGroup(p,a,b,c,d,e)\n#define IDirectPlayX_GetGroupConnectionSettings(p,a,b,c,d) (p)->lpVtbl->GetGroupConnectionSettings(p,a,b,c,d)\n#define IDirectPlayX_InitializeConnection(p,a,b)           (p)->lpVtbl->InitializeConnection(p,a,b)\n#define IDirectPlayX_SecureOpen(p,a,b,c,d)                 (p)->lpVtbl->SecureOpen(p,a,b,c,d)\n#define IDirectPlayX_SendChatMessage(p,a,b,c,d)            (p)->lpVtbl->SendChatMessage(p,a,b,c,d)\n#define IDirectPlayX_SetGroupConnectionSettings(p,a,b,c)   (p)->lpVtbl->SetGroupConnectionSettings(p,a,b,c)\n#define IDirectPlayX_StartSession(p,a,b)                   (p)->lpVtbl->StartSession(p,a,b)\n#define IDirectPlayX_GetGroupFlags(p,a,b)                  (p)->lpVtbl->GetGroupFlags(p,a,b)\n#define IDirectPlayX_GetGroupParent(p,a,b)                 (p)->lpVtbl->GetGroupParent(p,a,b)\n#define IDirectPlayX_GetPlayerAccount(p,a,b,c,d)           (p)->lpVtbl->GetPlayerAccount(p,a,b,c,d)\n#define IDirectPlayX_GetPlayerFlags(p,a,b)                 (p)->lpVtbl->GetPlayerFlags(p,a,b)\n/*** IDirectPlay4 methods ***/\n#define IDirectPlayX_GetGroupOwner(p,a,b)                  (p)->lpVtbl->GetGroupOwner(p,a,b)\n#define IDirectPlayX_SetGroupOwner(p,a,b)                  (p)->lpVtbl->SetGroupOwner(p,a,b)\n#define IDirectPlayX_SendEx(p,a,b,c,d,e,f,g,h,i)           (p)->lpVtbl->SendEx(p,a,b,c,d,e,f,g,h,i)\n#define IDirectPlayX_GetMessageQueue(p,a,b,c,d,e)          (p)->lpVtbl->GetMessageQueue(p,a,b,c,d,e)\n#define IDirectPlayX_CancelMessage(p,a,b)                  (p)->lpVtbl->CancelMessage(p,a,b)\n#define IDirectPlayX_CancelPriority(p,a,b,c)               (p)->lpVtbl->CancelPriority(p,a,b,c)\n#else\n/*** IUnknown methods ***/\n#define IDirectPlayX_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectPlayX_AddRef(p)             (p)->AddRef()\n#define IDirectPlayX_Release(p)            (p)->Release()\n/*** IDirectPlay2 methods ***/\n#define IDirectPlayX_AddPlayerToGroup(p,a,b)       (p)->AddPlayerToGroup(a,b)\n#define IDirectPlayX_Close(p)                      (p)->Close()\n#define IDirectPlayX_CreateGroup(p,a,b,c,d,e)      (p)->CreateGroup(a,b,c,d,e)\n#define IDirectPlayX_CreatePlayer(p,a,b,c,d,e,f)   (p)->CreatePlayer(a,b,c,d,e,f)\n#define IDirectPlayX_DeletePlayerFromGroup(p,a,b)  (p)->DeletePlayerFromGroup(a,b)\n#define IDirectPlayX_DestroyGroup(p,a)             (p)->DestroyGroup(a)\n#define IDirectPlayX_DestroyPlayer(p,a)            (p)->DestroyPlayer(a)\n#define IDirectPlayX_EnumGroupPlayers(p,a,b,c,d,e) (p)->EnumGroupPlayers(a,b,c,d,e)\n#define IDirectPlayX_EnumGroups(p,a,b,c,d)         (p)->EnumGroups(a,b,c,d)\n#define IDirectPlayX_EnumPlayers(p,a,b,c,d)        (p)->EnumPlayers(a,b,c,d)\n#define IDirectPlayX_EnumSessions(p,a,b,c,d,e)     (p)->EnumSessions(a,b,c,d,e)\n#define IDirectPlayX_GetCaps(p,a,b)                (p)->GetCaps(a,b)\n#define IDirectPlayX_GetGroupData(p,a,b,c,d)       (p)->GetGroupData(a,b,c,d)\n#define IDirectPlayX_GetGroupName(p,a,b,c)         (p)->GetGroupName(a,b,c)\n#define IDirectPlayX_GetMessageCount(p,a,b)        (p)->GetMessageCount(a,b)\n#define IDirectPlayX_GetPlayerAddress(p,a,b,c)     (p)->GetPlayerAddress(a,b,c)\n#define IDirectPlayX_GetPlayerCaps(p,a,b,c)        (p)->GetPlayerCaps(a,b,c)\n#define IDirectPlayX_GetPlayerData(p,a,b,c,d)      (p)->GetPlayerData(a,b,c,d)\n#define IDirectPlayX_GetPlayerName(p,a,b,c)        (p)->GetPlayerName(a,b,c)\n#define IDirectPlayX_GetSessionDesc(p,a,b)         (p)->GetSessionDesc(a,b)\n#define IDirectPlayX_Initialize(p,a)               (p)->Initialize(a)\n#define IDirectPlayX_Open(p,a,b)                   (p)->Open(a,b)\n#define IDirectPlayX_Receive(p,a,b,c,d,e)          (p)->Receive(a,b,c,d,e)\n#define IDirectPlayX_Send(p,a,b,c,d,e)             (p)->Send(a,b,c,d,e)\n#define IDirectPlayX_SetGroupData(p,a,b,c,d)       (p)->SetGroupData(a,b,c,d)\n#define IDirectPlayX_SetGroupName(p,a,b,c)         (p)->SetGroupName(a,b,c)\n#define IDirectPlayX_SetPlayerData(p,a,b,c,d)      (p)->SetPlayerData(a,b,c,d)\n#define IDirectPlayX_SetPlayerName(p,a,b,c)        (p)->SetPlayerName(a,b,c)\n#define IDirectPlayX_SetSessionDesc(p,a,b)         (p)->SetSessionDesc(a,b)\n/*** IDirectPlay3 methods ***/\n#define IDirectPlayX_AddGroupToGroup(p,a,b)                (p)->AddGroupToGroup(a,b)\n#define IDirectPlayX_CreateGroupInGroup(p,a,b,c,d,e,f)     (p)->CreateGroupInGroup(a,b,c,d,e,f)\n#define IDirectPlayX_DeleteGroupFromGroup(p,a,b)           (p)->DeleteGroupFromGroup(a,b)\n#define IDirectPlayX_EnumConnections(p,a,b,c,d)            (p)->EnumConnections(a,b,c,d)\n#define IDirectPlayX_EnumGroupsInGroup(p,a,b,c,d,e)        (p)->EnumGroupsInGroup(a,b,c,d,e)\n#define IDirectPlayX_GetGroupConnectionSettings(p,a,b,c,d) (p)->GetGroupConnectionSettings(a,b,c,d)\n#define IDirectPlayX_InitializeConnection(p,a,b)           (p)->InitializeConnection(a,b)\n#define IDirectPlayX_SecureOpen(p,a,b,c,d)                 (p)->SecureOpen(a,b,c,d)\n#define IDirectPlayX_SendChatMessage(p,a,b,c,d)            (p)->SendChatMessage(a,b,c,d)\n#define IDirectPlayX_SetGroupConnectionSettings(p,a,b,c)   (p)->SetGroupConnectionSettings(a,b,c)\n#define IDirectPlayX_StartSession(p,a,b)                   (p)->StartSession(a,b)\n#define IDirectPlayX_GetGroupFlags(p,a,b)                  (p)->GetGroupFlags(a,b)\n#define IDirectPlayX_GetGroupParent(p,a,b)                 (p)->GetGroupParent(a,b)\n#define IDirectPlayX_GetPlayerAccount(p,a,b,c,d)           (p)->GetPlayerAccount(a,b,c,d)\n#define IDirectPlayX_GetPlayerFlags(p,a,b)                 (p)->GetPlayerFlags(a,b)\n/*** IDirectPlay4 methods ***/\n#define IDirectPlayX_GetGroupOwner(p,a,b)                  (p)->GetGroupOwner(a,b)\n#define IDirectPlayX_SetGroupOwner(p,a,b)                  (p)->SetGroupOwner(a,b)\n#define IDirectPlayX_SendEx(p,a,b,c,d,e,f,g,h,i)           (p)->SendEx(a,b,c,d,e,f,g,h,i)\n#define IDirectPlayX_GetMessageQueue(p,a,b,c,d,e)          (p)->GetMessageQueue(a,b,c,d,e)\n#define IDirectPlayX_CancelMessage(p,a,b)                  (p)->CancelMessage(a,b)\n#define IDirectPlayX_CancelPriority(p,a,b,c)               (p)->CancelPriority(a,b,c)\n#endif\n\n\n/* For DirectPlay::EnumConnections */\n#define DPCONNECTION_DIRECTPLAY      0x00000001\n#define DPCONNECTION_DIRECTPLAYLOBBY 0x00000002\n\n/* For DirectPlay::EnumPlayers and DirectPlay::EnumGroups */\n#define DPENUMPLAYERS_ALL           0x00000000\n#define DPENUMPLAYERS_LOCAL         0x00000008\n#define DPENUMPLAYERS_REMOTE        0x00000010\n#define DPENUMPLAYERS_GROUP         0x00000020\n#define DPENUMPLAYERS_SESSION       0x00000080\n#define DPENUMPLAYERS_SERVERPLAYER  0x00000100\n#define DPENUMPLAYERS_SPECTATOR     0x00000200\n#define DPENUMPLAYERS_OWNER         0x00002000\n\n#define DPENUMGROUPS_ALL            DPENUMPLAYERS_ALL\n#define DPENUMGROUPS_LOCAL          DPENUMPLAYERS_LOCAL\n#define DPENUMGROUPS_REMOTE         DPENUMPLAYERS_REMOTE\n#define DPENUMGROUPS_SESSION        DPENUMPLAYERS_SESSION\n#define DPENUMGROUPS_SHORTCUT       0x00000400\n#define DPENUMGROUPS_STAGINGAREA    0x00000800\n#define DPENUMGROUPS_HIDDEN         0x00001000\n\n\n/* For DirectPlay::CreatePlayer */\n#define DPPLAYER_SERVERPLAYER  DPENUMPLAYERS_SERVERPLAYER\n#define DPPLAYER_SPECTATOR     DPENUMPLAYERS_SPECTATOR\n#define DPPLAYER_LOCAL         DPENUMPLAYERS_LOCAL\n#define DPPLAYER_OWNER         DPENUMPLAYERS_OWNER\n\n/* For DirectPlay::CreateGroup */\n#define DPGROUP_STAGINGAREA  DPENUMGROUPS_STAGINGAREA\n#define DPGROUP_LOCAL        DPENUMGROUPS_LOCAL\n#define DPGROUP_HIDDEN       DPENUMGROUPS_HIDDEN\n\n/* For DirectPlay::EnumSessions */\n#define DPENUMSESSIONS_AVAILABLE         0x00000001\n#define DPENUMSESSIONS_ALL               0x00000002\n#define DPENUMSESSIONS_ASYNC             0x00000010\n#define DPENUMSESSIONS_STOPASYNC         0x00000020\n#define DPENUMSESSIONS_PASSWORDREQUIRED  0x00000040\n#define DPENUMSESSIONS_RETURNSTATUS      0x00000080\n\n/* For DirectPlay::GetCaps and DirectPlay::GetPlayerCaps */\n#define DPGETCAPS_GUARANTEED  0x00000001\n\n/* For DirectPlay::GetGroupData and DirectPlay::GetPlayerData */\n#define DPGET_REMOTE  0x00000000\n#define DPGET_LOCAL   0x00000001\n\n/* For DirectPlay::Receive */\n#define DPRECEIVE_ALL         0x00000001\n#define DPRECEIVE_TOPLAYER    0x00000002\n#define DPRECEIVE_FROMPLAYER  0x00000004\n#define DPRECEIVE_PEEK        0x00000008\n\n/* For DirectPlay::Send */\n#define DPSEND_NONGUARANTEED       0x00000000\n#define DPSEND_GUARANTEED          0x00000001\n#define DPSEND_HIGHPRIORITY        0x00000002\n#define DPSEND_OPENSTREAM          0x00000008\n#define DPSEND_CLOSESTREAM         0x00000010\n#define DPSEND_SIGNED              0x00000020\n#define DPSEND_ENCRYPTED           0x00000040\n#define DPSEND_LOBBYSYSTEMMESSAGE  0x00000080\n#define DPSEND_ASYNC               0x00000200\n#define DPSEND_NOSENDCOMPLETEMSG   0x00000400\n\n#define DPSEND_MAX_PRI       0x0000FFFF\n#define DPSEND_MAX_PRIORITY  DPSEND_MAX_PRI\n\n\n/* For  DirectPlay::SetGroupData, DirectPlay::SetGroupName,\n * DirectPlay::SetPlayerData, DirectPlay::SetPlayerName and\n * DirectPlay::SetSessionDesc.\n */\n#define DPSET_REMOTE      0x00000000\n#define DPSET_LOCAL       0x00000001\n#define DPSET_GUARANTEED  0x00000002\n\n/* For DirectPlay::GetMessageQueue */\n#define DPMESSAGEQUEUE_SEND    0x00000001\n#define DPMESSAGEQUEUE_RECEIVE 0x00000002\n\n/* DirectPlay::Connect */\n#define DPCONNECT_RETURNSTATUS  (DPENUMSESSIONS_RETURNSTATUS)\n\n/* DirectPlay::GetCaps and DirectPlay::GetPlayerCaps */\n#define DPCAPS_ISHOST                  0x00000002\n#define DPCAPS_GROUPOPTIMIZED          0x00000008\n#define DPCAPS_KEEPALIVEOPTIMIZED      0x00000010\n#define DPCAPS_GUARANTEEDOPTIMIZED     0x00000020\n#define DPCAPS_GUARANTEEDSUPPORTED     0x00000040\n#define DPCAPS_SIGNINGSUPPORTED        0x00000080\n#define DPCAPS_ENCRYPTIONSUPPORTED     0x00000100\n#define DPPLAYERCAPS_LOCAL             0x00000800\n#define DPCAPS_ASYNCCANCELSUPPORTED    0x00001000\n#define DPCAPS_ASYNCCANCELALLSUPPORTED 0x00002000\n#define DPCAPS_SENDTIMEOUTSUPPORTED    0x00004000\n#define DPCAPS_SENDPRIORITYSUPPORTED   0x00008000\n#define DPCAPS_ASYNCSUPPORTED          0x00010000\n\n/** DirectPlay system messages **/\n\n/* A new player or group has been created in the session */\n#define DPSYS_CREATEPLAYERORGROUP   0x0003\n\n/* A player or group has been deleted from the session */\n#define DPSYS_DESTROYPLAYERORGROUP  0x0005\n\n/* A player has been added to a group */\n#define DPSYS_ADDPLAYERTOGROUP      0x0007\n\n/* A player has been deleted from a group */\n#define DPSYS_DELETEPLAYERFROMGROUP 0x0021\n\n/* Session lost for this object - ie lost contact with all players */\n#define DPSYS_SESSIONLOST           0x0031\n\n/* The current host has left the session */\n#define DPSYS_HOST                  0x0101\n\n/* Player or group data has changed */\n#define DPSYS_SETPLAYERORGROUPDATA  0x0102\n\n/* The name of a player or group has changed */\n#define DPSYS_SETPLAYERORGROUPNAME  0x0103\n\n/* The session description has changed */\n#define DPSYS_SETSESSIONDESC        0x0104\n\n/* A group has been added to a group */\n#define DPSYS_ADDGROUPTOGROUP           0x0105\n\n/* A group has been deleted from a group */\n#define DPSYS_DELETEGROUPFROMGROUP      0x0106\n\n/* A secure player to player message has arrived */\n#define DPSYS_SECUREMESSAGE         0x0107\n\n/* Start a new session */\n#define DPSYS_STARTSESSION          0x0108\n\n/* A chat message has arrived */\n#define DPSYS_CHAT                  0x0109\n\n/* The owner of a group has changed */\n#define DPSYS_SETGROUPOWNER         0x010A\n\n/* An async send is done (finished normally, failed or cancelled) */\n#define DPSYS_SENDCOMPLETE          0x010d\n\n/** DirectPlay System Messages **/\n\n#define DPPLAYERTYPE_GROUP   0x00000000\n#define DPPLAYERTYPE_PLAYER  0x00000001\n\n\n/* NOTE: DPMSG_HOST and DPMSG_GENERIC share the same format */\ntypedef struct tagDPMSG_GENERIC\n{\n   DWORD       dwType; /* Use message type as described above */\n} DPMSG_GENERIC,     *LPDPMSG_GENERIC,\n  DPMSG_HOST,        *LPDPMSG_HOST,\n  DPMSG_SESSIONLOST, *LPDPMSG_SESSIONLOST;\n\ntypedef struct tagDPMSG_CREATEPLAYERORGROUP\n{\n   DWORD   dwType;           /* Use message type as described above */\n   DWORD   dwPlayerType;     /* Use DPPLAYERTYPE_GROUP or DPPLAYERTYPE_PLAYER */\n   DPID    dpId;             /* ID of the player/group */\n   DWORD   dwCurrentPlayers; /* Current number of players/groups in session */\n   LPVOID  lpData;           /* Pointer to data */\n   DWORD   dwDataSize;       /* Size of data */\n   DPNAME  dpnName;          /* Name info */\n\n   /* dpIdParent and dwFlags are only valid in DirectPlay3 and later. What\n    * does that mean about the message size before? -PH */\n   DPID   dpIdParent;  /* id of parent group */\n   DWORD  dwFlags;     /* Flags for the player/group */\n} DPMSG_CREATEPLAYERORGROUP, *LPDPMSG_CREATEPLAYERORGROUP;\n\ntypedef struct tagDPMSG_DESTROYPLAYERORGROUP\n{\n   DWORD   dwType;           /* Use message type as described above */\n   DWORD   dwPlayerType;     /* Use DPPLAYERTYPE_GROUP or DPPLAYERTYPE_PLAYER */\n   DPID    dpId;             /* ID of player/group to be deleted */\n   LPVOID  lpLocalData;      /* Pointer to local data */\n   DWORD   dwLocalDataSize;  /* Sizeof local data */\n   LPVOID  lpRemoteData;     /* Pointer to remote data */\n   DWORD   dwRemoteDataSize; /* Sizeof remote data */\n\n   /* dpnName, dpIdParent and dwFlags are only valid in DirectPlay3 and later. What\n    * does that mean about the message size before? -PH */\n   DPNAME  dpnName;     /* Name info */\n   DPID    dpIdParent;  /* id of parent group */\n   DWORD   dwFlags;     /* Flags for the player/group */\n} DPMSG_DESTROYPLAYERORGROUP, *LPDPMSG_DESTROYPLAYERORGROUP;\n\n/* NOTE: DPMSG_ADDPLAYERTOGROUP and DPMSG_DELETEPLAYERFROMGROUP are the same */\ntypedef struct tagDPMSG_ADDPLAYERTOGROUP\n{\n   DWORD  dwType;      /* Use message type as described above */\n   DPID   dpIdGroup;   /* Group ID to add player into */\n   DPID   dpIdPlayer;  /* ID of player to add */\n} DPMSG_ADDPLAYERTOGROUP,      *LPDPMSG_ADDPLAYERTOGROUP,\n  DPMSG_DELETEPLAYERFROMGROUP, *LPDPMSG_DELETEPLAYERFROMGROUP;\n\n/* NOTE: DPMSG_ADDGROUPTOGROUP and DPMSG_DELETEGROUPFROMGROUP are the same */\ntypedef struct tagDPMSG_ADDGROUPTOGROUP\n{\n   DWORD  dwType;          /* Use message type as described above */\n   DPID   dpIdParentGroup; /* Group ID to add group into */\n   DPID   dpIdGroup;       /* ID of group to add */\n} DPMSG_ADDGROUPTOGROUP,      *LPDPMSG_ADDGROUPTOGROUP,\n  DPMSG_DELETEGROUPFROMGROUP, *LPDPMSG_DELETEGROUPFROMGROUP;\n\ntypedef struct tagDPMSG_SETPLAYERORGROUPDATA\n{\n   DWORD   dwType;       /* Use message type as described above */\n   DWORD   dwPlayerType; /* Use DPPLAYERTYPE_GROUP or DPPLAYERTYPE_PLAYER */\n   DPID    dpId;         /* ID of player/group */\n   LPVOID  lpData;       /* Pointer to data */\n   DWORD   dwDataSize;   /* Size of data */\n} DPMSG_SETPLAYERORGROUPDATA, *LPDPMSG_SETPLAYERORGROUPDATA;\n\ntypedef struct tagDPMSG_SETPLAYERORGROUPNAME\n{\n   DWORD  dwType;       /* Use message type as described above */\n   DWORD  dwPlayerType; /* Use DPPLAYERTYPE_GROUP or DPPLAYERTYPE_PLAYER */\n   DPID   dpId;         /* ID of player/group */\n   DPNAME dpnName;      /* New name */\n} DPMSG_SETPLAYERORGROUPNAME, *LPDPMSG_SETPLAYERORGROUPNAME;\n\ntypedef struct tagDPMSG_SETSESSIONDESC\n{\n   DWORD           dwType; /* Use message type as described above */\n   DPSESSIONDESC2  dpDesc; /* New session desc */\n} DPMSG_SETSESSIONDESC, *LPDPMSG_SETSESSIONDESC;\n\ntypedef struct tagDPMSG_SECUREMESSAGE\n{\n   DWORD   dwType;     /* Use message type as described above */\n   DWORD   dwFlags;    /* Signed/Encrypted */\n   DPID    dpIdFrom;   /* ID of from player */\n   LPVOID  lpData;     /* Message sent */\n   DWORD   dwDataSize; /* Size of message */\n} DPMSG_SECUREMESSAGE, *LPDPMSG_SECUREMESSAGE;\n\ntypedef struct tagDPMSG_STARTSESSION\n{\n   DWORD            dwType; /* Use message type as described above */\n   LPDPLCONNECTION  lpConn; /* DPLCONNECTION structure */\n} DPMSG_STARTSESSION, *LPDPMSG_STARTSESSION;\n\ntypedef struct tagDPMSG_CHAT\n{\n   DWORD     dwType;       /* Use message type as described above */\n   DWORD     dwFlags;      /* Message flags */\n   DPID      idFromPlayer; /* ID of sender */\n   DPID      idToPlayer;   /* ID of who msg is for */\n   DPID      idToGroup;    /* ID of what group msg is for */\n   LPDPCHAT  lpChat;       /* Chat message */\n} DPMSG_CHAT, *LPDPMSG_CHAT;\n\ntypedef struct tagDPMSG_SETGROUPOWNER\n{\n   DWORD  dwType;     /* Use message type as described above */\n   DPID   idGroup;    /* Group ID */\n   DPID   idNewOwner; /* ID of player who now owns group */\n   DPID   idOldOwner; /* ID of player who used to own group */\n} DPMSG_SETGROUPOWNER, *LPDPMSG_SETGROUPOWNER;\n\ntypedef struct\n{\n   DWORD    dwType;      /* Use message type as described above */\n   DPID     idFrom;      /* ID from */\n   DPID     idTo;        /* ID to */\n   DWORD    dwFlags;\n   DWORD    dwPriority;\n   DWORD    dwTimeout;\n   LPVOID   lpvContext;\n   DWORD    dwMsgID;\n   HRESULT  hr;\n   DWORD    dwSendTime;  /* When sent ? */\n} DPMSG_SENDCOMPLETE, *LPDPMSG_SENDCOMPLETE;\n\n\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif /* __WINE_DPLAY_H */\n"
  },
  {
    "path": "wine/windows/dplay8.h",
    "content": "/*\n * Copyright (C) 2003-2005 Raphael Junqueira\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DPLAY8_H\n#define __WINE_DPLAY8_H\n\n#include <ole2.h>\n#include <dpaddr.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n\ntypedef HRESULT (WINAPI *PFNDPNMESSAGEHANDLER)(PVOID, DWORD, PVOID);\ntypedef DWORD\tDPNID, *PDPNID;\ntypedef\tDWORD\tDPNHANDLE, *PDPNHANDLE;\n\n/*****************************************************************************\n * DirectPlay8 Message Id\n */\n#define\tDPN_MSGID_OFFSET                        0xFFFF0000\n#define DPN_MSGID_ADD_PLAYER_TO_GROUP           (DPN_MSGID_OFFSET | 0x0001)\n#define DPN_MSGID_APPLICATION_DESC              (DPN_MSGID_OFFSET | 0x0002)\n#define DPN_MSGID_ASYNC_OP_COMPLETE             (DPN_MSGID_OFFSET | 0x0003)\n#define DPN_MSGID_CLIENT_INFO                   (DPN_MSGID_OFFSET | 0x0004)\n#define DPN_MSGID_CONNECT_COMPLETE              (DPN_MSGID_OFFSET | 0x0005)\n#define DPN_MSGID_CREATE_GROUP                  (DPN_MSGID_OFFSET | 0x0006)\n#define DPN_MSGID_CREATE_PLAYER                 (DPN_MSGID_OFFSET | 0x0007)\n#define DPN_MSGID_DESTROY_GROUP                 (DPN_MSGID_OFFSET | 0x0008)\n#define DPN_MSGID_DESTROY_PLAYER                (DPN_MSGID_OFFSET | 0x0009)\n#define DPN_MSGID_ENUM_HOSTS_QUERY              (DPN_MSGID_OFFSET | 0x000A)\n#define DPN_MSGID_ENUM_HOSTS_RESPONSE           (DPN_MSGID_OFFSET | 0x000B)\n#define DPN_MSGID_GROUP_INFO                    (DPN_MSGID_OFFSET | 0x000C)\n#define DPN_MSGID_HOST_MIGRATE                  (DPN_MSGID_OFFSET | 0x000D)\n#define DPN_MSGID_INDICATE_CONNECT              (DPN_MSGID_OFFSET | 0x000E)\n#define DPN_MSGID_INDICATED_CONNECT_ABORTED     (DPN_MSGID_OFFSET | 0x000F)\n#define DPN_MSGID_PEER_INFO                     (DPN_MSGID_OFFSET | 0x0010)\n#define DPN_MSGID_RECEIVE                       (DPN_MSGID_OFFSET | 0x0011)\n#define DPN_MSGID_REMOVE_PLAYER_FROM_GROUP      (DPN_MSGID_OFFSET | 0x0012)\n#define\tDPN_MSGID_RETURN_BUFFER                 (DPN_MSGID_OFFSET | 0x0013)\n#define DPN_MSGID_SEND_COMPLETE                 (DPN_MSGID_OFFSET | 0x0014)\n#define DPN_MSGID_SERVER_INFO                   (DPN_MSGID_OFFSET | 0x0015)\n#define\tDPN_MSGID_TERMINATE_SESSION             (DPN_MSGID_OFFSET | 0x0016)\n#define DPN_MSGID_CREATE_THREAD                 (DPN_MSGID_OFFSET | 0x0017)\n#define DPN_MSGID_DESTROY_THREAD                (DPN_MSGID_OFFSET | 0x0018)\n#define DPN_MSGID_NAT_RESOLVER_QUERY            (DPN_MSGID_OFFSET | 0x0101)\n\n/*****************************************************************************\n * DirectPlay8 Errors\n */\n#define _DPN_FACILITY_CODE              0x015\n#define _DPNHRESULT_BASE                0x8000\n#define MAKE_DPNHRESULT(code)           MAKE_HRESULT(1, _DPN_FACILITY_CODE, (code + _DPNHRESULT_BASE))\n\n#define DPNSUCCESS_EQUAL                MAKE_HRESULT(0, _DPN_FACILITY_CODE, (0x05 + _DPNHRESULT_BASE))\n#define DPNSUCCESS_NOTEQUAL             MAKE_HRESULT(0, _DPN_FACILITY_CODE, (0x0A + _DPNHRESULT_BASE))\n#define DPNSUCCESS_PENDING              MAKE_HRESULT(0, _DPN_FACILITY_CODE, (0x0E + _DPNHRESULT_BASE))\n\n#define DPN_OK                          S_OK\n#define DPNERR_GENERIC                  E_FAIL\n#define DPNERR_INVALIDPARAM             E_INVALIDARG\n#define DPNERR_UNSUPPORTED              E_NOTIMPL\n#define DPNERR_NOINTERFACE              E_NOINTERFACE\n#define DPNERR_OUTOFMEMORY              E_OUTOFMEMORY\n#define DPNERR_INVALIDPOINTER           E_POINTER\n#define DPNERR_PENDING                  DPNSUCCESS_PENDING\n#define DPNERR_ABORTED                  MAKE_DPNHRESULT(0x030)\n#define DPNERR_ADDRESSING               MAKE_DPNHRESULT(0x040)\n#define DPNERR_ALREADYCLOSING           MAKE_DPNHRESULT(0x050)\n#define DPNERR_ALREADYCONNECTED         MAKE_DPNHRESULT(0x060)\n#define DPNERR_ALREADYDISCONNECTING     MAKE_DPNHRESULT(0x070)\n#define DPNERR_ALREADYINITIALIZED       MAKE_DPNHRESULT(0x080)\n#define DPNERR_ALREADYREGISTERED        MAKE_DPNHRESULT(0x090)\n#define DPNERR_BUFFERTOOSMALL           MAKE_DPNHRESULT(0x100)\n#define DPNERR_CANNOTCANCEL             MAKE_DPNHRESULT(0x110)\n#define DPNERR_CANTCREATEGROUP          MAKE_DPNHRESULT(0x120)\n#define DPNERR_CANTCREATEPLAYER         MAKE_DPNHRESULT(0x130)\n#define DPNERR_CANTLAUNCHAPPLICATION    MAKE_DPNHRESULT(0x140)\n#define DPNERR_CONNECTING               MAKE_DPNHRESULT(0x150)\n#define DPNERR_CONNECTIONLOST           MAKE_DPNHRESULT(0x160)\n#define DPNERR_CONVERSION               MAKE_DPNHRESULT(0x170)\n#define DPNERR_DATATOOLARGE             MAKE_DPNHRESULT(0x175)\n#define DPNERR_DOESNOTEXIST             MAKE_DPNHRESULT(0x180)\n#define DPNERR_DPNSVRNOTAVAILABLE       MAKE_DPNHRESULT(0x185)\n#define DPNERR_DUPLICATECOMMAND         MAKE_DPNHRESULT(0x190)\n#define DPNERR_ENDPOINTNOTRECEIVING     MAKE_DPNHRESULT(0x200)\n#define DPNERR_ENUMQUERYTOOLARGE        MAKE_DPNHRESULT(0x210)\n#define DPNERR_ENUMRESPONSETOOLARGE     MAKE_DPNHRESULT(0x220)\n#define DPNERR_EXCEPTION                MAKE_DPNHRESULT(0x230)\n#define DPNERR_GROUPNOTEMPTY            MAKE_DPNHRESULT(0x240)\n#define DPNERR_HOSTING                  MAKE_DPNHRESULT(0x250)\n#define DPNERR_HOSTREJECTEDCONNECTION   MAKE_DPNHRESULT(0x260)\n#define DPNERR_HOSTTERMINATEDSESSION    MAKE_DPNHRESULT(0x270)\n#define DPNERR_INCOMPLETEADDRESS        MAKE_DPNHRESULT(0x280)\n#define DPNERR_INVALIDADDRESSFORMAT     MAKE_DPNHRESULT(0x290)\n#define DPNERR_INVALIDAPPLICATION       MAKE_DPNHRESULT(0x300)\n#define DPNERR_INVALIDCOMMAND           MAKE_DPNHRESULT(0x310)\n#define DPNERR_INVALIDDEVICEADDRESS     MAKE_DPNHRESULT(0x320)\n#define DPNERR_INVALIDENDPOINT          MAKE_DPNHRESULT(0x330)\n#define DPNERR_INVALIDFLAGS             MAKE_DPNHRESULT(0x340)\n#define DPNERR_INVALIDGROUP             MAKE_DPNHRESULT(0x350)\n#define DPNERR_INVALIDHANDLE            MAKE_DPNHRESULT(0x360)\n#define DPNERR_INVALIDHOSTADDRESS       MAKE_DPNHRESULT(0x370)\n#define DPNERR_INVALIDINSTANCE          MAKE_DPNHRESULT(0x380)\n#define DPNERR_INVALIDINTERFACE         MAKE_DPNHRESULT(0x390)\n#define DPNERR_INVALIDOBJECT            MAKE_DPNHRESULT(0x400)\n#define DPNERR_INVALIDPASSWORD          MAKE_DPNHRESULT(0x410)\n#define DPNERR_INVALIDPLAYER            MAKE_DPNHRESULT(0x420)\n#define DPNERR_INVALIDPRIORITY          MAKE_DPNHRESULT(0x430)\n#define DPNERR_INVALIDSTRING            MAKE_DPNHRESULT(0x440)\n#define DPNERR_INVALIDURL               MAKE_DPNHRESULT(0x450)\n#define DPNERR_INVALIDVERSION           MAKE_DPNHRESULT(0x460)\n#define DPNERR_NOCAPS                   MAKE_DPNHRESULT(0x470)\n#define DPNERR_NOCONNECTION             MAKE_DPNHRESULT(0x480)\n#define DPNERR_NOHOSTPLAYER             MAKE_DPNHRESULT(0x490)\n#define DPNERR_NOMOREADDRESSCOMPONENTS  MAKE_DPNHRESULT(0x500)\n#define DPNERR_NORESPONSE               MAKE_DPNHRESULT(0x510)\n#define DPNERR_NOTALLOWED               MAKE_DPNHRESULT(0x520)\n#define DPNERR_NOTHOST                  MAKE_DPNHRESULT(0x530)\n#define DPNERR_NOTREADY                 MAKE_DPNHRESULT(0x540)\n#define DPNERR_NOTREGISTERED            MAKE_DPNHRESULT(0x550)\n#define DPNERR_PLAYERALREADYINGROUP     MAKE_DPNHRESULT(0x560)\n#define DPNERR_PLAYERLOST               MAKE_DPNHRESULT(0x570)\n#define DPNERR_PLAYERNOTINGROUP         MAKE_DPNHRESULT(0x580)\n#define DPNERR_PLAYERNOTREACHABLE       MAKE_DPNHRESULT(0x590)\n#define DPNERR_SENDTOOLARGE             MAKE_DPNHRESULT(0x600)\n#define DPNERR_SESSIONFULL              MAKE_DPNHRESULT(0x610)\n#define DPNERR_TABLEFULL                MAKE_DPNHRESULT(0x620)\n#define DPNERR_TIMEDOUT                 MAKE_DPNHRESULT(0x630)\n#define DPNERR_UNINITIALIZED            MAKE_DPNHRESULT(0x640)\n#define DPNERR_USERCANCEL               MAKE_DPNHRESULT(0x650)\n\n/*****************************************************************************\n * DirectPlay8 defines\n */\n#define DPNID_ALL_PLAYERS_GROUP                              0\n#define DPNDESTROYGROUPREASON_NORMAL                    0x0001\n#define DPNDESTROYGROUPREASON_AUTODESTRUCTED            0x0002\n#define DPNDESTROYGROUPREASON_SESSIONTERMINATED         0x0003\n#define DPNDESTROYPLAYERREASON_NORMAL                   0x0001\n#define DPNDESTROYPLAYERREASON_CONNECTIONLOST           0x0002\n#define DPNDESTROYPLAYERREASON_SESSIONTERMINATED        0x0003\n#define DPNDESTROYPLAYERREASON_HOSTDESTROYEDPLAYER      0x0004\n#define DPN_MAX_APPDESC_RESERVEDDATA_SIZE                   64\n\n#define DPNOP_SYNC                                  0x80000000\n#define DPNADDPLAYERTOGROUP_SYNC                    DPNOP_SYNC\n#define DPNCANCEL_CONNECT                               0x0001\n#define DPNCANCEL_ENUM                                  0x0002\n#define DPNCANCEL_SEND                                  0x0004\n#define DPNCANCEL_ALL_OPERATIONS                        0x8000\n#define DPNCANCEL_PLAYER_SENDS                      0x80000000\n#define DPNCANCEL_PLAYER_SENDS_PRIORITY_HIGH        (DPNCANCEL_PLAYER_SENDS | 0x00010000)\n#define DPNCANCEL_PLAYER_SENDS_PRIORITY_NORMAL      (DPNCANCEL_PLAYER_SENDS | 0x00020000)\n#define DPNCANCEL_PLAYER_SENDS_PRIORITY_LOW         (DPNCANCEL_PLAYER_SENDS | 0x00040000)\n#define DPNCLOSE_IMMEDIATE                          0x00000001\n#define DPNCONNECT_SYNC                             DPNOP_SYNC\n#define DPNCONNECT_OKTOQUERYFORADDRESSING               0x0001\n#define DPNCREATEGROUP_SYNC                         DPNOP_SYNC\n#define DPNDESTROYGROUP_SYNC                        DPNOP_SYNC\n#define DPNENUM_PLAYERS                                 0x0001\n#define DPNENUM_GROUPS                                  0x0010\n#define DPNENUMHOSTS_SYNC                           DPNOP_SYNC\n#define DPNENUMHOSTS_OKTOQUERYFORADDRESSING             0x0001\n#define DPNENUMHOSTS_NOBROADCASTFALLBACK                0x0002\n#define DPNENUMSERVICEPROVIDERS_ALL                     0x0001\n#define DPNGETLOCALHOSTADDRESSES_COMBINED               0x0001\n#define DPNGETSENDQUEUEINFO_PRIORITY_NORMAL             0x0001\n#define DPNGETSENDQUEUEINFO_PRIORITY_HIGH               0x0002\n#define DPNGETSENDQUEUEINFO_PRIORITY_LOW                0x0004\n#define DPNGROUP_AUTODESTRUCT                           0x0001\n#define DPNHOST_OKTOQUERYFORADDRESSING                  0x0001\n#define DPNINFO_NAME                                    0x0001\n#define DPNINFO_DATA                                    0x0002\n#define DPNINITIALIZE_DISABLEPARAMVAL                   0x0001\n#define DPNINITIALIZE_HINT_LANSESSION                   0x0002\n#define DPNINITIALIZE_DISABLELINKTUNING                 0x0004\n#define DPNLOBBY_REGISTER                               0x0001\n#define DPNLOBBY_UNREGISTER                             0x0002\n#define DPNPLAYER_LOCAL                                 0x0002\n#define DPNPLAYER_HOST                                  0x0004\n#define DPNRECEIVE_GUARANTEED                           0x0001\n#define DPNRECEIVE_COALESCED                            0x0002\n#define DPNREMOVEPLAYERFROMGROUP_SYNC               DPNOP_SYNC\n#define DPNSEND_SYNC                                DPNOP_SYNC\n#define DPNSEND_NOCOPY                                  0x0001\n#define DPNSEND_NOCOMPLETE                              0x0002\n#define DPNSEND_COMPLETEONPROCESS                       0x0004\n#define DPNSEND_GUARANTEED                              0x0008\n#define DPNSEND_NONSEQUENTIAL                           0x0010\n#define DPNSEND_NOLOOPBACK                              0x0020\n#define DPNSEND_PRIORITY_LOW                            0x0040\n#define DPNSEND_PRIORITY_HIGH                           0x0080\n#define DPNSEND_COALESCE                                0x0100\n#define DPNSENDCOMPLETE_GUARANTEED                      0x0001\n#define DPNSENDCOMPLETE_COALESCED                       0x0002\n#define DPNSESSION_CLIENT_SERVER                        0x0001\n#define DPNSESSION_MIGRATE_HOST                         0x0004\n#define DPNSESSION_NODPNSVR                             0x0040\n#define DPNSESSION_REQUIREPASSWORD                      0x0080\n#define DPNSESSION_NOENUMS                              0x0100\n#define DPNSESSION_FAST_SIGNED                          0x0200\n#define DPNSESSION_FULL_SIGNED                          0x0400\n#define DPNSETCLIENTINFO_SYNC                       DPNOP_SYNC\n#define DPNSETGROUPINFO_SYNC                        DPNOP_SYNC\n#define DPNSETPEERINFO_SYNC                         DPNOP_SYNC\n#define DPNSETSERVERINFO_SYNC                       DPNOP_SYNC\n#define DPNSPCAPS_SUPPORTSDPNSRV                        0x0001\n#define DPNSPCAPS_SUPPORTSBROADCAST                     0x0002\n#define DPNSPCAPS_SUPPORTSALLADAPTERS                   0x0004\n#define DPNSPCAPS_SUPPORTSTHREADPOOL\t\t\t0x0008\n#define DPNSPCAPS_NETWORKSIMULATOR                      0x0010\n#define DPNSPINFO_NETWORKSIMULATORDEVICE                0x0001\n\n\n/*****************************************************************************\n * DirectPlay8 structures Typedefs\n */\ntypedef struct _DPN_APPLICATION_DESC {\n  DWORD   dwSize;\n  DWORD   dwFlags;\n  GUID    guidInstance;\n  GUID\t  guidApplication;\n  DWORD   dwMaxPlayers;\n  DWORD   dwCurrentPlayers;\n  WCHAR*  pwszSessionName;\n  WCHAR*  pwszPassword;\n  PVOID   pvReservedData;\n  DWORD   dwReservedDataSize;\n  PVOID   pvApplicationReservedData;\n  DWORD   dwApplicationReservedDataSize;\n} DPN_APPLICATION_DESC, *PDPN_APPLICATION_DESC;\n\ntypedef struct _BUFFERDESC {\n  DWORD\t  dwBufferSize;\t\t\n  BYTE*   pBufferData;\t\t\n} BUFFERDESC, DPN_BUFFER_DESC, *PDPN_BUFFER_DESC, *PBUFFERDESC;\n\ntypedef struct _DPN_CAPS {\n  DWORD   dwSize;\n  DWORD   dwFlags;\n  DWORD   dwConnectTimeout;\n  DWORD   dwConnectRetries;\n  DWORD   dwTimeoutUntilKeepAlive;\n} DPN_CAPS, *PDPN_CAPS;\n\ntypedef struct\t_DPN_CAPS_EX {\n  DWORD   dwSize;\n  DWORD   dwFlags;\n  DWORD   dwConnectTimeout;\n  DWORD   dwConnectRetries;\n  DWORD   dwTimeoutUntilKeepAlive;\n  DWORD   dwMaxRecvMsgSize;\n  DWORD   dwNumSendRetries;\n  DWORD   dwMaxSendRetryInterval;\n  DWORD   dwDropThresholdRate;\n  DWORD   dwThrottleRate;\n  DWORD   dwNumHardDisconnectSends;\n  DWORD   dwMaxHardDisconnectPeriod;\n} DPN_CAPS_EX, *PDPN_CAPS_EX;\n\ntypedef struct _DPN_CONNECTION_INFO {\n  DWORD   dwSize;\n  DWORD   dwRoundTripLatencyMS;\n  DWORD   dwThroughputBPS;\n  DWORD   dwPeakThroughputBPS;\n  DWORD   dwBytesSentGuaranteed;\n  DWORD   dwPacketsSentGuaranteed;\n  DWORD   dwBytesSentNonGuaranteed;\n  DWORD   dwPacketsSentNonGuaranteed;\n  DWORD   dwBytesRetried;\n  DWORD   dwPacketsRetried;\n  DWORD   dwBytesDropped;\n  DWORD   dwPacketsDropped;\n  DWORD   dwMessagesTransmittedHighPriority;\n  DWORD   dwMessagesTimedOutHighPriority;\n  DWORD   dwMessagesTransmittedNormalPriority;\n  DWORD   dwMessagesTimedOutNormalPriority;\n  DWORD   dwMessagesTransmittedLowPriority;\n  DWORD   dwMessagesTimedOutLowPriority;\n  DWORD   dwBytesReceivedGuaranteed;\n  DWORD   dwPacketsReceivedGuaranteed;\n  DWORD   dwBytesReceivedNonGuaranteed;\n  DWORD   dwPacketsReceivedNonGuaranteed;\n  DWORD   dwMessagesReceived;\n} DPN_CONNECTION_INFO, *PDPN_CONNECTION_INFO;\n\ntypedef struct _DPN_GROUP_INFO {\n  DWORD\t  dwSize;\n  DWORD\t  dwInfoFlags;\n  PWSTR\t  pwszName;\n  PVOID\t  pvData;\n  DWORD\t  dwDataSize;\n  DWORD\t  dwGroupFlags;\n} DPN_GROUP_INFO, *PDPN_GROUP_INFO;\n\ntypedef struct _DPN_PLAYER_INFO {\n  DWORD\t  dwSize;\n  DWORD\t  dwInfoFlags;\n  PWSTR\t  pwszName;\n  PVOID\t  pvData;\n  DWORD\t  dwDataSize;\n  DWORD\t  dwPlayerFlags;\n} DPN_PLAYER_INFO, *PDPN_PLAYER_INFO;\n\ntypedef struct _DPN_SERVICE_PROVIDER_INFO {\n  DWORD   dwFlags;\n  GUID    guid;\n  WCHAR*  pwszName;\n  PVOID   pvReserved;\t\n  DWORD   dwReserved;\n} DPN_SERVICE_PROVIDER_INFO, *PDPN_SERVICE_PROVIDER_INFO;\n\ntypedef struct _DPN_SP_CAPS {\n  DWORD   dwSize;\n  DWORD   dwFlags;\n  DWORD   dwNumThreads;\n  DWORD\t  dwDefaultEnumCount;\n  DWORD\t  dwDefaultEnumRetryInterval;\n  DWORD\t  dwDefaultEnumTimeout;\n  DWORD\t  dwMaxEnumPayloadSize;\n  DWORD\t  dwBuffersPerThread;\n  DWORD\t  dwSystemBufferSize;\n} DPN_SP_CAPS, *PDPN_SP_CAPS;\n\ntypedef struct _DPN_SECURITY_CREDENTIALS  DPN_SECURITY_CREDENTIALS, *PDPN_SECURITY_CREDENTIALS;\ntypedef struct _DPN_SECURITY_DESC         DPN_SECURITY_DESC, *PDPN_SECURITY_DESC;\n\ntypedef struct _DPNMSG_ADD_PLAYER_TO_GROUP {\n  DWORD\t  dwSize;\n  DPNID\t  dpnidGroup;\n  PVOID\t  pvGroupContext;\n  DPNID\t  dpnidPlayer;\n  PVOID\t  pvPlayerContext;\n} DPNMSG_ADD_PLAYER_TO_GROUP, *PDPNMSG_ADD_PLAYER_TO_GROUP;\n\ntypedef struct _DPNMSG_ASYNC_OP_COMPLETE {\n  DWORD      dwSize;\n  DPNHANDLE  hAsyncOp;\n  PVOID      pvUserContext;\n  HRESULT    hResultCode;\n} DPNMSG_ASYNC_OP_COMPLETE, *PDPNMSG_ASYNC_OP_COMPLETE;\n\ntypedef struct _DPNMSG_CLIENT_INFO {\n  DWORD\t  dwSize;\n  DPNID\t  dpnidClient;\n  PVOID\t  pvPlayerContext;\n} DPNMSG_CLIENT_INFO, *PDPNMSG_CLIENT_INFO;\n\ntypedef struct _DPNMSG_CONNECT_COMPLETE {\n  DWORD      dwSize;\n  DPNHANDLE  hAsyncOp;\n  PVOID      pvUserContext;\n  HRESULT    hResultCode;\n  PVOID      pvApplicationReplyData;\n  DWORD      dwApplicationReplyDataSize;\n  /** DirectX 9 */\n  DPNID      dpnidLocal;\n} DPNMSG_CONNECT_COMPLETE, *PDPNMSG_CONNECT_COMPLETE;\n\ntypedef struct _DPNMSG_CREATE_GROUP {\n  DWORD   dwSize;\n  DPNID   dpnidGroup;\n  DPNID   dpnidOwner;\n  PVOID   pvGroupContext;\n  /** DirectX 9 */\n  PVOID   pvOwnerContext;\t\n} DPNMSG_CREATE_GROUP, *PDPNMSG_CREATE_GROUP;\n\ntypedef struct _DPNMSG_CREATE_PLAYER {\n  DWORD   dwSize;\n  DPNID   dpnidPlayer;\n  PVOID   pvPlayerContext;\n} DPNMSG_CREATE_PLAYER, *PDPNMSG_CREATE_PLAYER;\n\ntypedef struct _DPNMSG_DESTROY_GROUP {\n  DWORD   dwSize;\n  DPNID   dpnidGroup;\n  PVOID   pvGroupContext;\n  DWORD   dwReason;\n} DPNMSG_DESTROY_GROUP, *PDPNMSG_DESTROY_GROUP;\n\ntypedef struct _DPNMSG_DESTROY_PLAYER {\n  DWORD  dwSize;\n  DPNID  dpnidPlayer;\n  PVOID  pvPlayerContext;\n  DWORD  dwReason;\n} DPNMSG_DESTROY_PLAYER, *PDPNMSG_DESTROY_PLAYER;\n\ntypedef\tstruct _DPNMSG_ENUM_HOSTS_QUERY {\n  DWORD                 dwSize;\n  IDirectPlay8Address*  pAddressSender;\n  IDirectPlay8Address*  pAddressDevice;\n  PVOID                 pvReceivedData;\n  DWORD                 dwReceivedDataSize;\n  DWORD                 dwMaxResponseDataSize;\n  PVOID                 pvResponseData;\n  DWORD                 dwResponseDataSize;\n  PVOID                 pvResponseContext;\n} DPNMSG_ENUM_HOSTS_QUERY, *PDPNMSG_ENUM_HOSTS_QUERY;\n\ntypedef\tstruct _DPNMSG_ENUM_HOSTS_RESPONSE {\n  DWORD                        dwSize;\n  IDirectPlay8Address*         pAddressSender;\n  IDirectPlay8Address*         pAddressDevice;\n  const DPN_APPLICATION_DESC*  pApplicationDescription;\n  PVOID                        pvResponseData;\n  DWORD                        dwResponseDataSize;\n  PVOID                        pvUserContext;\n  DWORD                        dwRoundTripLatencyMS;\n} DPNMSG_ENUM_HOSTS_RESPONSE, *PDPNMSG_ENUM_HOSTS_RESPONSE;\n\ntypedef struct _DPNMSG_GROUP_INFO {\n  DWORD   dwSize;\n  DPNID   dpnidGroup;\n  PVOID   pvGroupContext;\n} DPNMSG_GROUP_INFO, *PDPNMSG_GROUP_INFO;\n\ntypedef struct _DPNMSG_HOST_MIGRATE {\n  DWORD   dwSize;\n  DPNID   dpnidNewHost;\n  PVOID   pvPlayerContext;\n} DPNMSG_HOST_MIGRATE, *PDPNMSG_HOST_MIGRATE;\n\ntypedef struct _DPNMSG_INDICATE_CONNECT {\n  DWORD                 dwSize;\n  PVOID                 pvUserConnectData;\n  DWORD                 dwUserConnectDataSize;\n  PVOID                 pvReplyData;\n  DWORD                 dwReplyDataSize;\n  PVOID                 pvReplyContext;\n  PVOID                 pvPlayerContext;\n  IDirectPlay8Address*  pAddressPlayer;\n  IDirectPlay8Address*  pAddressDevice;\n} DPNMSG_INDICATE_CONNECT, *PDPNMSG_INDICATE_CONNECT;\n\ntypedef struct _DPNMSG_INDICATED_CONNECT_ABORTED {\n  DWORD   dwSize;\n  PVOID   pvPlayerContext;\n} DPNMSG_INDICATED_CONNECT_ABORTED, *PDPNMSG_INDICATED_CONNECT_ABORTED;\n\ntypedef struct _DPNMSG_PEER_INFO {\n  DWORD   dwSize;\n  DPNID   dpnidPeer;\n  PVOID   pvPlayerContext;\n} DPNMSG_PEER_INFO, *PDPNMSG_PEER_INFO;\n\ntypedef struct _DPNMSG_RECEIVE {\n  DWORD      dwSize;\n  DPNID      dpnidSender;\n  PVOID      pvPlayerContext;\n  PBYTE      pReceiveData;\n  DWORD      dwReceiveDataSize;\n  DPNHANDLE  hBufferHandle;\n  /** DirectX 9 */\n  DWORD      dwReceiveFlags;\t\n} DPNMSG_RECEIVE, *PDPNMSG_RECEIVE;\n\ntypedef struct _DPNMSG_REMOVE_PLAYER_FROM_GROUP {\n  DWORD   dwSize;\n  DPNID   dpnidGroup;\n  PVOID   pvGroupContext;\n  DPNID   dpnidPlayer;\n  PVOID   pvPlayerContext;\n} DPNMSG_REMOVE_PLAYER_FROM_GROUP, *PDPNMSG_REMOVE_PLAYER_FROM_GROUP;\n\ntypedef struct _DPNMSG_RETURN_BUFFER {\n  DWORD     dwSize;\n  HRESULT   hResultCode;\n  PVOID     pvBuffer;\n  PVOID     pvUserContext;\n} DPNMSG_RETURN_BUFFER, *PDPNMSG_RETURN_BUFFER;\n\ntypedef struct _DPNMSG_SEND_COMPLETE {\n  DWORD       dwSize;\n  DPNHANDLE   hAsyncOp;\n  PVOID       pvUserContext;\n  HRESULT     hResultCode;\n  DWORD       dwSendTime;\n  /** DirectX 9 */\n  DWORD            dwFirstFrameRTT;\n  DWORD            dwFirstFrameRetryCount;\n  DWORD            dwSendCompleteFlags;\n  DPN_BUFFER_DESC* pBuffers;\n  DWORD            dwNumBuffers;\n} DPNMSG_SEND_COMPLETE, *PDPNMSG_SEND_COMPLETE;\n\ntypedef struct _DPNMSG_SERVER_INFO {\n  DWORD   dwSize;\n  DPNID   dpnidServer;\n  PVOID   pvPlayerContext;\n} DPNMSG_SERVER_INFO, *PDPNMSG_SERVER_INFO;\n\ntypedef struct _DPNMSG_TERMINATE_SESSION {\n  DWORD    dwSize;\n  HRESULT  hResultCode;\n  PVOID    pvTerminateData;\n  DWORD    dwTerminateDataSize;\n} DPNMSG_TERMINATE_SESSION, *PDPNMSG_TERMINATE_SESSION;\n\ntypedef struct _DPNMSG_CREATE_THREAD {\n  DWORD    dwSize;\n  DWORD    dwFlags;\n  DWORD    dwProcessorNum;\n  PVOID    pvUserContext;\n} DPNMSG_CREATE_THREAD, *PDPNMSG_CREATE_THREAD;\n\ntypedef struct _DPNMSG_DESTROY_THREAD {\n  DWORD    dwSize;\n  DWORD    dwProcessorNum;\n  PVOID    pvUserContext;\n} DPNMSG_DESTROY_THREAD, *PDPNMSG_DESTROY_THREAD;\n\ntypedef\tstruct _DPNMSG_NAT_RESOLVER_QUERY {\n  DWORD    dwSize;\n  IDirectPlay8Address* pAddressSender;\n  IDirectPlay8Address* pAddressDevice;\n  WCHAR*   pwszUserString;\n} DPNMSG_NAT_RESOLVER_QUERY, *PDPNMSG_NAT_RESOLVER_QUERY;\n\n/*****************************************************************************\n * Predeclare the interfaces\n */\nDEFINE_GUID(CLSID_DirectPlay8Peer,        0x286f484d,0x375e,0x4458,0xa2,0x72,0xb1,0x38,0xe2,0xf8,0x0a,0x6a);\nDEFINE_GUID(CLSID_DirectPlay8Client,      0x743f1dc6,0x5aba,0x429f,0x8b,0xdf,0xc5,0x4d,0x03,0x25,0x3d,0xc2);\nDEFINE_GUID(CLSID_DirectPlay8Server,      0xda825e1b,0x6830,0x43d7,0x83,0x5d,0x0b,0x5a,0xd8,0x29,0x56,0xa2);\n/** DirectX 9 */\nDEFINE_GUID(CLSID_DirectPlay8ThreadPool,  0xfc47060e,0x6153,0x4b34,0xb9,0x75,0x8e,0x41,0x21,0xeb,0x7f,0x3c);\nDEFINE_GUID(CLSID_DirectPlay8NATResolver, 0xe4c1d9a2,0xcbf7,0x48bd,0x9a,0x69,0x34,0xa5,0x5e,0x0d,0x89,0x41);\n\nDEFINE_GUID(IID_IDirectPlay8Peer,         0x5102dacf,0x241b,0x11d3,0xae,0xa7,0x0,0x60,0x97,0xb0,0x14,0x11);\ntypedef struct IDirectPlay8Peer *PDIRECTPLAY8PEER;\nDEFINE_GUID(IID_IDirectPlay8Client,       0x5102dacd,0x241b,0x11d3,0xae,0xa7,0x0,0x60,0x97,0xb0,0x14,0x11);\ntypedef struct IDirectPlay8Client *PDIRECTPLAY8CLIENT;\nDEFINE_GUID(IID_IDirectPlay8Server,       0x5102dace,0x241b,0x11d3,0xae,0xa7,0x0,0x60,0x97,0xb0,0x14,0x11);\ntypedef struct IDirectPlay8Server *PDIRECTPLAY8SERVER;\n/** DirectX 9 */\nDEFINE_GUID(IID_IDirectPlay8ThreadPool,   0x0d22ee73,0x4a46,0x4a0d,0x89,0xb2,0x04,0x5b,0x4d,0x66,0x64,0x25);\ntypedef\tstruct IDirectPlay8ThreadPool *PDIRECTPLAY8THREADPOOL;\nDEFINE_GUID(IID_IDirectPlay8NATResolver,  0xa9e213f2,0x9a60,0x486f,0xbf,0x3b,0x53,0x40,0x8b,0x6d,0x1c,0xbb);\ntypedef\tstruct IDirectPlay8NATResolver *PDIRECTPLAY8NATRESOLVER;\n\nDEFINE_GUID(CLSID_DP8SP_IPX,               0x53934290,0x628d,0x11d2,0xae,0x0f,0x0,0x60,0x97,0xb0,0x14,0x11);\nDEFINE_GUID(CLSID_DP8SP_TCPIP,             0xebfe7ba0,0x628d,0x11d2,0xae,0x0f,0x0,0x60,0x97,0xb0,0x14,0x11);\nDEFINE_GUID(CLSID_DP8SP_SERIAL,            0x743b5d60,0x628d,0x11d2,0xae,0x0f,0x0,0x60,0x97,0xb0,0x14,0x11);\nDEFINE_GUID(CLSID_DP8SP_MODEM,             0x6d4a3650,0x628d,0x11d2,0xae,0x0f,0x0,0x60,0x97,0xb0,0x14,0x11);\n/** DirectX 9 */\nDEFINE_GUID(CLSID_DP8SP_BLUETOOTH,         0x995513af,0x3027,0x4b9a,0x95,0x6e,0xc7,0x72,0xb3,0xf7,0x80,0x06);\n\ntypedef struct IDirectPlay8LobbiedApplication\t*PIDirectPlay8LobbiedApplication, DNLOBBIEDAPPLICATION;\n\n\n/*****************************************************************************\n * IDirectPlay8Client interface\n */\n#define INTERFACE IDirectPlay8Client\nDECLARE_INTERFACE_(IDirectPlay8Client,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectPlay8Client methods ***/\n    STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DWORD dwFlags) PURE;\n    STDMETHOD(EnumServiceProviders)(THIS_ const GUID *pguidServiceProvider, const GUID *pguidApplication, DPN_SERVICE_PROVIDER_INFO *pSPInfoBuffer, PDWORD pcbEnumData, PDWORD pcReturned, DWORD dwFlags) PURE;\n    STDMETHOD(EnumHosts)(THIS_ PDPN_APPLICATION_DESC pApplicationDesc,IDirectPlay8Address *pAddrHost,IDirectPlay8Address *pDeviceInfo, PVOID pUserEnumData, DWORD dwUserEnumDataSize, DWORD dwEnumCount, DWORD dwRetryInterval, DWORD dwTimeOut, PVOID pvUserContext, DPNHANDLE *pAsyncHandle, DWORD dwFlags) PURE;\n    STDMETHOD(CancelAsyncOperation)(THIS_ DPNHANDLE hAsyncHandle, DWORD dwFlags) PURE;\n    STDMETHOD(Connect)(THIS_ const DPN_APPLICATION_DESC *pdnAppDesc,IDirectPlay8Address *pHostAddr,IDirectPlay8Address *pDeviceInfo, const DPN_SECURITY_DESC *pdnSecurity, const DPN_SECURITY_CREDENTIALS *pdnCredentials, const void *pvUserConnectData, DWORD dwUserConnectDataSize,void *pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;\n    STDMETHOD(Send)(THIS_ const DPN_BUFFER_DESC *prgBufferDesc, DWORD cBufferDesc, DWORD dwTimeOut, void *pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;\n    STDMETHOD(GetSendQueueInfo)(THIS_ DWORD *pdwNumMsgs, DWORD *pdwNumBytes, DWORD dwFlags) PURE;\n    STDMETHOD(GetApplicationDesc)(THIS_ DPN_APPLICATION_DESC *pAppDescBuffer, DWORD *pcbDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(SetClientInfo)(THIS_ const DPN_PLAYER_INFO *pdpnPlayerInfo, PVOID pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;\n    STDMETHOD(GetServerInfo)(THIS_ DPN_PLAYER_INFO *pdpnPlayerInfo, DWORD *pdwSize, DWORD dwFlags) PURE;\n    STDMETHOD(GetServerAddress)(THIS_ IDirectPlay8Address ** pAddress, DWORD dwFlags) PURE;\n    STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(ReturnBuffer)(THIS_ DPNHANDLE hBufferHandle, DWORD dwFlags) PURE;\n    STDMETHOD(GetCaps)(THIS_ DPN_CAPS *pdpCaps, DWORD dwFlags) PURE;\n    STDMETHOD(SetCaps)(THIS_ const DPN_CAPS *pdpCaps, DWORD dwFlags) PURE;\n    STDMETHOD(SetSPCaps)(THIS_ const GUID *pguidSP, const DPN_SP_CAPS *pdpspCaps, DWORD dwFlags ) PURE;\n    STDMETHOD(GetSPCaps)(THIS_ const GUID *pguidSP, DPN_SP_CAPS *pdpspCaps, DWORD dwFlags) PURE;\n    STDMETHOD(GetConnectionInfo)(THIS_ DPN_CONNECTION_INFO *pdpConnectionInfo, DWORD dwFlags) PURE;\n    STDMETHOD(RegisterLobby)(THIS_ DPNHANDLE dpnHandle, struct IDirectPlay8LobbiedApplication *pIDP8LobbiedApplication, DWORD dwFlags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define\tIDirectPlay8Client_QueryInterface(p,a,b)                (p)->lpVtbl->QueryInterface(p,a,b)\n#define\tIDirectPlay8Client_AddRef(p)                            (p)->lpVtbl->AddRef(p)\n#define\tIDirectPlay8Client_Release(p)                           (p)->lpVtbl->Release(p)\n/*** IDirectPlay8Client methods ***/\n#define\tIDirectPlay8Client_Initialize(p,a,b,c)                  (p)->lpVtbl->Initialize(p,a,b,c)\n#define\tIDirectPlay8Client_EnumServiceProviders(p,a,b,c,d,e,f)  (p)->lpVtbl->EnumServiceProviders(p,a,b,c,d,e,f)\n#define\tIDirectPlay8Client_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)   (p)->lpVtbl->EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)\n#define\tIDirectPlay8Client_CancelAsyncOperation(p,a,b)          (p)->lpVtbl->CancelAsyncOperation(p,a,b)\n#define\tIDirectPlay8Client_Connect(p,a,b,c,d,e,f,g,h,i,j)       (p)->lpVtbl->Connect(p,a,b,c,d,e,f,g,h,i,j)\n#define\tIDirectPlay8Client_Send(p,a,b,c,d,e,f)                  (p)->lpVtbl->Send(p,a,b,c,d,e,f)\n#define\tIDirectPlay8Client_GetSendQueueInfo(p,a,b,c)            (p)->lpVtbl->GetSendQueueInfo(p,a,b,c)\n#define\tIDirectPlay8Client_GetApplicationDesc(p,a,b,c)          (p)->lpVtbl->GetApplicationDesc(p,a,b,c)\n#define\tIDirectPlay8Client_SetClientInfo(p,a,b,c,d)             (p)->lpVtbl->SetClientInfo(p,a,b,c,d)\n#define\tIDirectPlay8Client_GetServerInfo(p,a,b,c)               (p)->lpVtbl->GetServerInfo(p,a,b,c)\n#define\tIDirectPlay8Client_GetServerAddress(p,a,b)              (p)->lpVtbl->GetServerAddress(p,a,b)\n#define\tIDirectPlay8Client_Close(p,a)                           (p)->lpVtbl->Close(p,a)\n#define\tIDirectPlay8Client_ReturnBuffer(p,a,b)                  (p)->lpVtbl->ReturnBuffer(p,a,b)\n#define\tIDirectPlay8Client_GetCaps(p,a,b)                       (p)->lpVtbl->GetCaps(p,a,b)\n#define\tIDirectPlay8Client_SetCaps(p,a,b)                       (p)->lpVtbl->SetCaps(p,a,b)\n#define\tIDirectPlay8Client_SetSPCaps(p,a,b,c)                   (p)->lpVtbl->SetSPCaps(p,a,b,c)\n#define\tIDirectPlay8Client_GetSPCaps(p,a,b,c)                   (p)->lpVtbl->GetSPCaps(p,a,b,c)\n#define\tIDirectPlay8Client_GetConnectionInfo(p,a,b)             (p)->lpVtbl->GetConnectionInfo(p,a,b)\n#define\tIDirectPlay8Client_RegisterLobby(p,a,b,c)               (p)->lpVtbl->RegisterLobby(p,a,b,c)\n#else\n/*** IUnknown methods ***/\n#define\tIDirectPlay8Client_QueryInterface(p,a,b)                (p)->QueryInterface(a,b)\n#define\tIDirectPlay8Client_AddRef(p)                            (p)->AddRef()\n#define\tIDirectPlay8Client_Release(p)                           (p)->Release()\n/*** IDirectPlay8Client methods ***/\n#define\tIDirectPlay8Client_Initialize(p,a,b,c)                  (p)->Initialize(a,b,c)\n#define\tIDirectPlay8Client_EnumServiceProviders(p,a,b,c,d,e,f)  (p)->EnumServiceProviders(a,b,c,d,e,f)\n#define\tIDirectPlay8Client_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)   (p)->EnumHosts(a,b,c,d,e,f,g,h,i,j,k)\n#define\tIDirectPlay8Client_CancelAsyncOperation(p,a,b)          (p)->CancelAsyncOperation(a,b)\n#define\tIDirectPlay8Client_Connect(p,a,b,c,d,e,f,g,h,i,j)       (p)->Connect(a,b,c,d,e,f,g,h,i,j)\n#define\tIDirectPlay8Client_Send(p,a,b,c,d,e,f)                  (p)->Send(a,b,c,d,e,f)\n#define\tIDirectPlay8Client_GetSendQueueInfo(p,a,b,c)            (p)->GetSendQueueInfo(a,b,c)\n#define\tIDirectPlay8Client_GetApplicationDesc(p,a,b,c)          (p)->GetApplicationDesc(a,b,c)\n#define\tIDirectPlay8Client_SetClientInfo(p,a,b,c,d)             (p)->SetClientInfo(a,b,c,d)\n#define\tIDirectPlay8Client_GetServerInfo(p,a,b,c)               (p)->GetServerInfo(a,b,c)\n#define\tIDirectPlay8Client_GetServerAddress(p,a,b)              (p)->GetServerAddress(a,b)\n#define\tIDirectPlay8Client_Close(p,a)                           (p)->Close(a)\n#define\tIDirectPlay8Client_ReturnBuffer(p,a,b)                  (p)->ReturnBuffer(a,b)\n#define\tIDirectPlay8Client_GetCaps(p,a,b)                       (p)->GetCaps(a,b)\n#define\tIDirectPlay8Client_SetCaps(p,a,b)                       (p)->SetCaps(a,b)\n#define\tIDirectPlay8Client_SetSPCaps(p,a,b,c)                   (p)->SetSPCaps(a,b,c)\n#define\tIDirectPlay8Client_GetSPCaps(p,a,b,c)                   (p)->GetSPCaps(a,b,c)\n#define\tIDirectPlay8Client_GetConnectionInfo(p,a,b)             (p)->GetConnectionInfo(a,b)\n#define\tIDirectPlay8Client_RegisterLobby(p,a,b,c)               (p)->RegisterLobby(a,b,c)\n#endif\n\n/*****************************************************************************\n * IDirectPlay8Server interface\n */\n#define INTERFACE IDirectPlay8Server\nDECLARE_INTERFACE_(IDirectPlay8Server,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectPlay8Server methods ***/\n    STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DWORD dwFlags) PURE;\n    STDMETHOD(EnumServiceProviders)(THIS_ const GUID *pguidServiceProvider, const GUID *pguidApplication, DPN_SERVICE_PROVIDER_INFO *pSPInfoBuffer, PDWORD pcbEnumData, PDWORD pcReturned, DWORD dwFlags) PURE;\n    STDMETHOD(CancelAsyncOperation)(THIS_ DPNHANDLE hAsyncHandle, DWORD dwFlags) PURE;\n    STDMETHOD(GetSendQueueInfo)(THIS_ DPNID dpnid, DWORD *pdwNumMsgs, DWORD *pdwNumBytes, DWORD dwFlags) PURE;\n    STDMETHOD(GetApplicationDesc)(THIS_ DPN_APPLICATION_DESC *pAppDescBuffer, DWORD *pcbDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(SetServerInfo)(THIS_ const DPN_PLAYER_INFO *pdpnPlayerInfo, PVOID pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;\n    STDMETHOD(GetClientInfo)(THIS_ DPNID dpnid, DPN_PLAYER_INFO *pdpnPlayerInfo, DWORD *pdwSize, DWORD dwFlags) PURE;\n    STDMETHOD(GetClientAddress)(THIS_ DPNID dpnid, IDirectPlay8Address ** pAddress, DWORD dwFlags) PURE;\n    STDMETHOD(GetLocalHostAddresses)(THIS_ IDirectPlay8Address ** prgpAddress, DWORD *pcAddress, DWORD dwFlags) PURE;\n    STDMETHOD(SetApplicationDesc)(THIS_ const DPN_APPLICATION_DESC *pad, DWORD dwFlags) PURE;\n    STDMETHOD(Host)(THIS_ const DPN_APPLICATION_DESC *pdnAppDesc, IDirectPlay8Address ** prgpDeviceInfo, DWORD cDeviceInfo, const DPN_SECURITY_DESC *pdnSecurity, const DPN_SECURITY_CREDENTIALS *pdnCredentials, void *pvPlayerContext, DWORD dwFlags) PURE;\n    STDMETHOD(SendTo)(THIS_ DPNID dpnid, const DPN_BUFFER_DESC *prgBufferDesc, DWORD cBufferDesc, DWORD dwTimeOut, void *pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;\n    STDMETHOD(CreateGroup)(THIS_ const DPN_GROUP_INFO *pdpnGroupInfo, void *pvGroupContext, void *pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;\n    STDMETHOD(DestroyGroup)(THIS_ DPNID idGroup, PVOID pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;\n    STDMETHOD(AddPlayerToGroup)(THIS_ DPNID idGroup, DPNID idClient, PVOID pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;\n    STDMETHOD(RemovePlayerFromGroup)(THIS_ DPNID idGroup, DPNID idClient, PVOID pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;\n    STDMETHOD(SetGroupInfo)(THIS_ DPNID dpnid, DPN_GROUP_INFO *pdpnGroupInfo, PVOID pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;\n    STDMETHOD(GetGroupInfo)(THIS_ DPNID dpnid, DPN_GROUP_INFO *pdpnGroupInfo, DWORD *pdwSize, DWORD dwFlags) PURE;\n    STDMETHOD(EnumPlayersAndGroups)(THIS_ DPNID *prgdpnid, DWORD *pcdpnid, DWORD dwFlags) PURE;\n    STDMETHOD(EnumGroupMembers)(THIS_ DPNID dpnid, DPNID *prgdpnid, DWORD *pcdpnid, DWORD dwFlags) PURE;\n    STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(DestroyClient)(THIS_ DPNID dpnidClient, const void *pvDestroyData, DWORD dwDestroyDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(ReturnBuffer)(THIS_ DPNHANDLE hBufferHandle, DWORD dwFlags) PURE;\n    STDMETHOD(GetPlayerContext)(THIS_ DPNID dpnid, PVOID *ppvPlayerContext, DWORD dwFlags) PURE;\n    STDMETHOD(GetGroupContext)(THIS_ DPNID dpnid, PVOID *ppvGroupContext, DWORD dwFlags) PURE;\n    STDMETHOD(GetCaps)(THIS_ DPN_CAPS *pdpCaps, DWORD dwFlags) PURE;\n    STDMETHOD(SetCaps)(THIS_ const DPN_CAPS *pdpCaps, DWORD dwFlags) PURE;\n    STDMETHOD(SetSPCaps)(THIS_ const GUID *pguidSP, const DPN_SP_CAPS *pdpspCaps, DWORD dwFlags ) PURE;\n    STDMETHOD(GetSPCaps)(THIS_ const GUID *pguidSP, DPN_SP_CAPS *pdpspCaps, DWORD dwFlags) PURE;\n    STDMETHOD(GetConnectionInfo)(THIS_ DPNID dpnid, DPN_CONNECTION_INFO *pdpConnectionInfo, DWORD dwFlags) PURE;\n    STDMETHOD(RegisterLobby)(THIS_ DPNHANDLE dpnHandle, struct IDirectPlay8LobbiedApplication *pIDP8LobbiedApplication, DWORD dwFlags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define\tIDirectPlay8Server_QueryInterface(p,a,b)                (p)->lpVtbl->QueryInterface(p,a,b)\n#define\tIDirectPlay8Server_AddRef(p)                            (p)->lpVtbl->AddRef(p)\n#define\tIDirectPlay8Server_Release(p)                           (p)->lpVtbl->Release(p)\n/*** IDirectPlay8Server methods ***/\n#define\tIDirectPlay8Server_Initialize(p,a,b,c)                  (p)->lpVtbl->Initialize(p,a,b,c)\n#define\tIDirectPlay8Server_EnumServiceProviders(p,a,b,c,d,e,f)  (p)->lpVtbl->EnumServiceProviders(p,a,b,c,d,e,f)\n#define\tIDirectPlay8Server_CancelAsyncOperation(p,a,b)          (p)->lpVtbl->CancelAsyncOperation(p,a,b)\n#define\tIDirectPlay8Server_GetSendQueueInfo(p,a,b,c,d)          (p)->lpVtbl->GetSendQueueInfo(p,a,b,c,d)\n#define\tIDirectPlay8Server_GetApplicationDesc(p,a,b,c)          (p)->lpVtbl->GetApplicationDesc(p,a,b,c)\n#define\tIDirectPlay8Server_SetServerInfo(p,a,b,c,d)             (p)->lpVtbl->SetServerInfo(p,a,b,c,d)\n#define\tIDirectPlay8Server_GetClientInfo(p,a,b,c,d)             (p)->lpVtbl->GetClientInfo(p,a,b,c,d)\n#define\tIDirectPlay8Server_GetClientAddress(p,a,b,c)            (p)->lpVtbl->GetClientAddress(p,a,b,c)\n#define\tIDirectPlay8Server_GetLocalHostAddresses(p,a,b,c)       (p)->lpVtbl->GetLocalHostAddresses(p,a,b,c)\n#define\tIDirectPlay8Server_SetApplicationDesc(p,a,b)            (p)->lpVtbl->SetApplicationDesc(p,a,b)\n#define\tIDirectPlay8Server_Host(p,a,b,c,d,e,f,g)                (p)->lpVtbl->Host(p,a,b,c,d,e,f,g)\n#define\tIDirectPlay8Server_SendTo(p,a,b,c,d,e,f,g)              (p)->lpVtbl->SendTo(p,a,b,c,d,e,f,g)\n#define\tIDirectPlay8Server_CreateGroup(p,a,b,c,d,e)             (p)->lpVtbl->CreateGroup(p,a,b,c,d,e)\n#define\tIDirectPlay8Server_DestroyGroup(p,a,b,c,d)              (p)->lpVtbl->DestroyGroup(p,a,b,c,d)\n#define\tIDirectPlay8Server_AddPlayerToGroup(p,a,b,c,d,e)        (p)->lpVtbl->AddPlayerToGroup(p,a,b,c,d,e)\n#define\tIDirectPlay8Server_RemovePlayerFromGroup(p,a,b,c,d,e)   (p)->lpVtbl->RemovePlayerFromGroup(p,a,b,c,d,e)\n#define\tIDirectPlay8Server_SetGroupInfo(p,a,b,c,d,e)            (p)->lpVtbl->SetGroupInfo(p,a,b,c,d,e)\n#define\tIDirectPlay8Server_GetGroupInfo(p,a,b,c,d)              (p)->lpVtbl->GetGroupInfo(p,a,b,c,d)\n#define\tIDirectPlay8Server_EnumPlayersAndGroups(p,a,b,c)        (p)->lpVtbl->EnumPlayersAndGroups(p,a,b,c)\n#define\tIDirectPlay8Server_EnumGroupMembers(p,a,b,c,d)          (p)->lpVtbl->EnumGroupMembers(p,a,b,c,d)\n#define\tIDirectPlay8Server_Close(p,a)                           (p)->lpVtbl->Close(p,a)\n#define\tIDirectPlay8Server_DestroyClient(p,a,b,c,d)             (p)->lpVtbl->DestroyClient(p,a,b,c,d)\n#define\tIDirectPlay8Server_ReturnBuffer(p,a,b)                  (p)->lpVtbl->ReturnBuffer(p,a,b)\n#define\tIDirectPlay8Server_GetPlayerContext(p,a,b,c)            (p)->lpVtbl->GetPlayerContext(p,a,b,c)\n#define\tIDirectPlay8Server_GetGroupContext(p,a,b,c)             (p)->lpVtbl->GetGroupContext(p,a,b,c)\n#define\tIDirectPlay8Server_GetCaps(p,a,b)                       (p)->lpVtbl->GetCaps(p,a,b)\n#define\tIDirectPlay8Server_SetCaps(p,a,b)                       (p)->lpVtbl->SetCaps(p,a,b)\n#define\tIDirectPlay8Server_SetSPCaps(p,a,b,c)                   (p)->lpVtbl->SetSPCaps(p,a,b,c)\n#define\tIDirectPlay8Server_GetSPCaps(p,a,b,c)                   (p)->lpVtbl->GetSPCaps(p,a,b,c)\n#define\tIDirectPlay8Server_GetConnectionInfo(p,a,b,c)           (p)->lpVtbl->GetConnectionInfo(p,a,b,c)\n#define\tIDirectPlay8Server_RegisterLobby(p,a,b,c)               (p)->lpVtbl->RegisterLobby(p,a,b,c)\n#else\n/*** IUnknown methods ***/\n#define\tIDirectPlay8Server_QueryInterface(p,a,b)                (p)->QueryInterface(a,b)\n#define\tIDirectPlay8Server_AddRef(p)                            (p)->AddRef()\n#define\tIDirectPlay8Server_Release(p)                           (p)->Release()\n/*** IDirectPlay8Server methods ***/\n#define\tIDirectPlay8Server_Initialize(p,a,b,c)                  (p)->Initialize(a,b,c)\n#define\tIDirectPlay8Server_EnumServiceProviders(p,a,b,c,d,e,f)  (p)->EnumServiceProviders(a,b,c,d,e,f)\n#define\tIDirectPlay8Server_CancelAsyncOperation(p,a,b)          (p)->CancelAsyncOperation(a,b)\n#define\tIDirectPlay8Server_GetSendQueueInfo(p,a,b,c,d)          (p)->GetSendQueueInfo(a,b,c,d)\n#define\tIDirectPlay8Server_GetApplicationDesc(p,a,b,c)          (p)->GetApplicationDesc(a,b,c)\n#define\tIDirectPlay8Server_SetServerInfo(p,a,b,c,d)             (p)->SetServerInfo(a,b,c,d)\n#define\tIDirectPlay8Server_GetClientInfo(p,a,b,c,d)             (p)->GetClientInfo(a,b,c,d)\n#define\tIDirectPlay8Server_GetClientAddress(p,a,b,c)            (p)->GetClientAddress(a,b,c)\n#define\tIDirectPlay8Server_GetLocalHostAddresses(p,a,b,c)       (p)->GetLocalHostAddresses(a,b,c)\n#define\tIDirectPlay8Server_SetApplicationDesc(p,a,b)            (p)->SetApplicationDesc(a,b)\n#define\tIDirectPlay8Server_Host(p,a,b,c,d,e,f,g)                (p)->Host(a,b,c,d,e,f,g)\n#define\tIDirectPlay8Server_SendTo(p,a,b,c,d,e,f,g)              (p)->SendTo(a,b,c,d,e,f,g)\n#define\tIDirectPlay8Server_CreateGroup(p,a,b,c,d,e)             (p)->CreateGroup(a,b,c,d,e)\n#define\tIDirectPlay8Server_DestroyGroup(p,a,b,c,d)              (p)->DestroyGroup(a,b,c,d)\n#define\tIDirectPlay8Server_AddPlayerToGroup(p,a,b,c,d,e)        (p)->AddPlayerToGroup(a,b,c,d,e)\n#define\tIDirectPlay8Server_RemovePlayerFromGroup(p,a,b,c,d,e)   (p)->RemovePlayerFromGroup(a,b,c,d,e)\n#define\tIDirectPlay8Server_SetGroupInfo(p,a,b,c,d,e)            (p)->SetGroupInfo(a,b,c,d,e)\n#define\tIDirectPlay8Server_GetGroupInfo(p,a,b,c,d)              (p)->GetGroupInfo(a,b,c,d)\n#define\tIDirectPlay8Server_EnumPlayersAndGroups(p,a,b,c)        (p)->EnumPlayersAndGroups(a,b,c)\n#define\tIDirectPlay8Server_EnumGroupMembers(p,a,b,c,d)          (p)->EnumGroupMembers(a,b,c,d)\n#define\tIDirectPlay8Server_Close(p,a)                           (p)->Close(a)\n#define\tIDirectPlay8Server_DestroyClient(p,a,b,c,d)             (p)->DestroyClient(a,b,c,d)\n#define\tIDirectPlay8Server_ReturnBuffer(p,a,b)                  (p)->ReturnBuffer(a,b)\n#define\tIDirectPlay8Server_GetPlayerContext(p,a,b,c)            (p)->GetPlayerContext(a,b,c)\n#define\tIDirectPlay8Server_GetGroupContext(p,a,b,c)             (p)->GetGroupContext(a,b,c)\n#define\tIDirectPlay8Server_GetCaps(p,a,b)                       (p)->GetCaps(a,b)\n#define\tIDirectPlay8Server_SetCaps(p,a,b)                       (p)->SetCaps(a,b)\n#define\tIDirectPlay8Server_SetSPCaps(p,a,b,c)                   (p)->SetSPCaps(a,b,c)\n#define\tIDirectPlay8Server_GetSPCaps(p,a,b,c)                   (p)->GetSPCaps(a,b,c)\n#define\tIDirectPlay8Server_GetConnectionInfo(p,a,b,c)           (p)->GetConnectionInfo(a,b,c)\n#define\tIDirectPlay8Server_RegisterLobby(p,a,b,c)               (p)->RegisterLobby(a,b,c)\n#endif\n\n/*****************************************************************************\n * IDirectPlay8Peer interface\n */\n#define INTERFACE IDirectPlay8Peer\nDECLARE_INTERFACE_(IDirectPlay8Peer,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectPlay8Peer methods ***/\n    STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DWORD dwFlags) PURE;\n    STDMETHOD(EnumServiceProviders)(THIS_ const GUID* pguidServiceProvider, const GUID* pguidApplication, DPN_SERVICE_PROVIDER_INFO* pSPInfoBuffer, DWORD* pcbEnumData, DWORD* pcReturned, DWORD dwFlags) PURE;\n    STDMETHOD(CancelAsyncOperation)(THIS_ DPNHANDLE hAsyncHandle, DWORD dwFlags) PURE;\n    STDMETHOD(Connect)(THIS_ const DPN_APPLICATION_DESC* pdnAppDesc, IDirectPlay8Address* pHostAddr, IDirectPlay8Address* pDeviceInfo, const DPN_SECURITY_DESC* pdnSecurity, const DPN_SECURITY_CREDENTIALS* pdnCredentials, const void* pvUserConnectData, DWORD dwUserConnectDataSize, void* pvPlayerContext, void* pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE;\n    STDMETHOD(SendTo)(THIS_ DPNID dpnid, const DPN_BUFFER_DESC* prgBufferDesc, DWORD cBufferDesc, DWORD dwTimeOut, void* pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE;\n    STDMETHOD(GetSendQueueInfo)(THIS_ DPNID dpnid, DWORD* pdwNumMsgs, DWORD* pdwNumBytes, DWORD dwFlags) PURE;\n    STDMETHOD(Host)(THIS_ const DPN_APPLICATION_DESC* pdnAppDesc, IDirectPlay8Address **prgpDeviceInfo, DWORD cDeviceInfo, const DPN_SECURITY_DESC* pdnSecurity, const DPN_SECURITY_CREDENTIALS* pdnCredentials, void* pvPlayerContext, DWORD dwFlags) PURE;\n    STDMETHOD(GetApplicationDesc)(THIS_ DPN_APPLICATION_DESC* pAppDescBuffer, DWORD* pcbDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(SetApplicationDesc)(THIS_ const DPN_APPLICATION_DESC* pad, DWORD dwFlags) PURE;\n    STDMETHOD(CreateGroup)(THIS_ const DPN_GROUP_INFO* pdpnGroupInfo, void* pvGroupContext, void* pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE;\n    STDMETHOD(DestroyGroup)(THIS_ DPNID idGroup, PVOID pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE;\n    STDMETHOD(AddPlayerToGroup)(THIS_ DPNID idGroup, DPNID idClient, PVOID pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE;\n    STDMETHOD(RemovePlayerFromGroup)(THIS_ DPNID idGroup, DPNID idClient, PVOID pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE;\n    STDMETHOD(SetGroupInfo)(THIS_ DPNID dpnid, DPN_GROUP_INFO* pdpnGroupInfo,PVOID pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE;\n    STDMETHOD(GetGroupInfo)(THIS_ DPNID dpnid, DPN_GROUP_INFO* pdpnGroupInfo, DWORD* pdwSize, DWORD dwFlags) PURE;\n    STDMETHOD(EnumPlayersAndGroups)(THIS_ DPNID* prgdpnid, DWORD* pcdpnid, DWORD dwFlags) PURE;\n    STDMETHOD(EnumGroupMembers)(THIS_ DPNID dpnid, DPNID* prgdpnid, DWORD* pcdpnid, DWORD dwFlags) PURE;\n    STDMETHOD(SetPeerInfo)(THIS_ const DPN_PLAYER_INFO* pdpnPlayerInfo,PVOID pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE;\n    STDMETHOD(GetPeerInfo)(THIS_ DPNID dpnid, DPN_PLAYER_INFO* pdpnPlayerInfo, DWORD* pdwSize, DWORD dwFlags) PURE;\n    STDMETHOD(GetPeerAddress)(THIS_ DPNID dpnid, IDirectPlay8Address** pAddress, DWORD dwFlags) PURE;\n    STDMETHOD(GetLocalHostAddresses)(THIS_ IDirectPlay8Address** prgpAddress, DWORD* pcAddress, DWORD dwFlags) PURE;\n    STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(EnumHosts)(THIS_ PDPN_APPLICATION_DESC pApplicationDesc, IDirectPlay8Address* pAddrHost, IDirectPlay8Address* pDeviceInfo,PVOID pUserEnumData, DWORD dwUserEnumDataSize, DWORD dwEnumCount, DWORD dwRetryInterval, DWORD dwTimeOut,PVOID pvUserContext, DPNHANDLE* pAsyncHandle, DWORD dwFlags) PURE;\n    STDMETHOD(DestroyPeer)(THIS_ DPNID dpnidClient, const void* pvDestroyData, DWORD dwDestroyDataSize, DWORD dwFlags) PURE;\n    STDMETHOD(ReturnBuffer)(THIS_ DPNHANDLE hBufferHandle, DWORD dwFlags) PURE;\n    STDMETHOD(GetPlayerContext)(THIS_ DPNID dpnid,PVOID* ppvPlayerContext, DWORD dwFlags) PURE;\n    STDMETHOD(GetGroupContext)(THIS_ DPNID dpnid,PVOID* ppvGroupContext, DWORD dwFlags) PURE;\n    STDMETHOD(GetCaps)(THIS_ DPN_CAPS* pdpCaps, DWORD dwFlags) PURE;\n    STDMETHOD(SetCaps)(THIS_ const DPN_CAPS* pdpCaps, DWORD dwFlags) PURE;\n    STDMETHOD(SetSPCaps)(THIS_ const GUID* pguidSP, const DPN_SP_CAPS* pdpspCaps, DWORD dwFlags ) PURE;\n    STDMETHOD(GetSPCaps)(THIS_ const GUID* pguidSP, DPN_SP_CAPS* pdpspCaps, DWORD dwFlags) PURE;\n    STDMETHOD(GetConnectionInfo)(THIS_ DPNID dpnid, DPN_CONNECTION_INFO* pdpConnectionInfo, DWORD dwFlags) PURE;\n    STDMETHOD(RegisterLobby)(THIS_ DPNHANDLE dpnHandle, struct IDirectPlay8LobbiedApplication* pIDP8LobbiedApplication, DWORD dwFlags) PURE;\n    STDMETHOD(TerminateSession)(THIS_ void* pvTerminateData, DWORD dwTerminateDataSize, DWORD dwFlags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define\tIDirectPlay8Peer_QueryInterface(p,a,b)                  (p)->lpVtbl->QueryInterface(p,a,b)\n#define\tIDirectPlay8Peer_AddRef(p)                              (p)->lpVtbl->AddRef(p)\n#define\tIDirectPlay8Peer_Release(p)                             (p)->lpVtbl->Release(p)\n/*** IDirectPlay8Peer methods ***/\n#define\tIDirectPlay8Peer_Initialize(p,a,b,c)                    (p)->lpVtbl->Initialize(p,a,b,c)\n#define\tIDirectPlay8Peer_EnumServiceProviders(p,a,b,c,d,e,f)    (p)->lpVtbl->EnumServiceProviders(p,a,b,c,d,e,f)\n#define\tIDirectPlay8Peer_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)     (p)->lpVtbl->EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)\n#define\tIDirectPlay8Peer_CancelAsyncOperation(p,a,b)            (p)->lpVtbl->CancelAsyncOperation(p,a,b)\n#define\tIDirectPlay8Peer_Connect(p,a,b,c,d,e,f,g,h,i,j,k)       (p)->lpVtbl->Connect(p,a,b,c,d,e,f,g,h,i,j,k)\n#define\tIDirectPlay8Peer_SendTo(p,a,b,c,d,e,f,g)                (p)->lpVtbl->SendTo(p,a,b,c,d,e,f,g)\n#define\tIDirectPlay8Peer_GetSendQueueInfo(p,a,b,c,d)            (p)->lpVtbl->GetSendQueueInfo(p,a,b,c,d)\n#define\tIDirectPlay8Peer_Host(p,a,b,c,d,e,f,g)                  (p)->lpVtbl->Host(p,a,b,c,d,e,f,g)\n#define\tIDirectPlay8Peer_GetApplicationDesc(p,a,b,c)            (p)->lpVtbl->GetApplicationDesc(p,a,b,c)\n#define\tIDirectPlay8Peer_SetApplicationDesc(p,a,b)              (p)->lpVtbl->SetApplicationDesc(p,a,b)\n#define\tIDirectPlay8Peer_CreateGroup(p,a,b,c,d,e)               (p)->lpVtbl->CreateGroup(p,a,b,c,d,e)\n#define\tIDirectPlay8Peer_DestroyGroup(p,a,b,c,d)                (p)->lpVtbl->DestroyGroup(p,a,b,c,d)\n#define\tIDirectPlay8Peer_AddPlayerToGroup(p,a,b,c,d,e)          (p)->lpVtbl->AddPlayerToGroup(p,a,b,c,d,e)\n#define\tIDirectPlay8Peer_RemovePlayerFromGroup(p,a,b,c,d,e)     (p)->lpVtbl->RemovePlayerFromGroup(p,a,b,c,d,e)\n#define\tIDirectPlay8Peer_SetGroupInfo(p,a,b,c,d,e)              (p)->lpVtbl->SetGroupInfo(p,a,b,c,d,e)\n#define\tIDirectPlay8Peer_GetGroupInfo(p,a,b,c,d)                (p)->lpVtbl->GetGroupInfo(p,a,b,c,d)\n#define\tIDirectPlay8Peer_EnumPlayersAndGroups(p,a,b,c)          (p)->lpVtbl->EnumPlayersAndGroups(p,a,b,c)\n#define\tIDirectPlay8Peer_EnumGroupMembers(p,a,b,c,d)            (p)->lpVtbl->EnumGroupMembers(p,a,b,c,d)\n#define\tIDirectPlay8Peer_SetPeerInfo(p,a,b,c,d)                 (p)->lpVtbl->SetPeerInfo(p,a,b,c,d)\n#define\tIDirectPlay8Peer_GetPeerInfo(p,a,b,c,d)                 (p)->lpVtbl->GetPeerInfo(p,a,b,c,d)\n#define\tIDirectPlay8Peer_GetPeerAddress(p,a,b,c)                (p)->lpVtbl->GetPeerAddress(p,a,b,c)\n#define\tIDirectPlay8Peer_GetLocalHostAddresses(p,a,b,c)         (p)->lpVtbl->GetLocalHostAddresses(p,a,b,c)\n#define\tIDirectPlay8Peer_Close(p,a)                             (p)->lpVtbl->Close(p,a)\n#define\tIDirectPlay8Peer_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)     (p)->lpVtbl->EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)\n#define\tIDirectPlay8Peer_DestroyPeer(p,a,b,c,d)                 (p)->lpVtbl->DestroyPeer(p,a,b,c,d)\n#define\tIDirectPlay8Peer_ReturnBuffer(p,a,b)                    (p)->lpVtbl->ReturnBuffer(p,a,b)\n#define\tIDirectPlay8Peer_GetPlayerContext(p,a,b,c)              (p)->lpVtbl->GetPlayerContext(p,a,b,c)\n#define\tIDirectPlay8Peer_GetGroupContext(p,a,b,c)               (p)->lpVtbl->GetGroupContext(p,a,b,c)\n#define\tIDirectPlay8Peer_GetCaps(p,a,b)                         (p)->lpVtbl->GetCaps(p,a,b)\n#define\tIDirectPlay8Peer_SetCaps(p,a,b)                         (p)->lpVtbl->SetCaps(p,a,b)\n#define\tIDirectPlay8Peer_SetSPCaps(p,a,b,c)                     (p)->lpVtbl->SetSPCaps(p,a,b,c)\n#define\tIDirectPlay8Peer_GetSPCaps(p,a,b,c)                     (p)->lpVtbl->GetSPCaps(p,a,b,c)\n#define\tIDirectPlay8Peer_GetConnectionInfo(p,a,b,c)             (p)->lpVtbl->GetConnectionInfo(p,a,b,c)\n#define\tIDirectPlay8Peer_RegisterLobby(p,a,b,c)                 (p)->lpVtbl->RegisterLobby(p,a,b,c)\n#define\tIDirectPlay8Peer_TerminateSession(p,a,b,c)              (p)->lpVtbl->TerminateSession(p,a,b,c)\n#else\n/*** IUnknown methods ***/\n#define\tIDirectPlay8Peer_QueryInterface(p,a,b)                  (p)->QueryInterface(a,b)\n#define\tIDirectPlay8Peer_AddRef(p)                              (p)->AddRef()\n#define\tIDirectPlay8Peer_Release(p)                             (p)->Release()\n/*** IDirectPlay8Peer methods ***/\n#define\tIDirectPlay8Peer_Initialize(p,a,b,c)                    (p)->Initialize(a,b,c)\n#define\tIDirectPlay8Peer_EnumServiceProviders(p,a,b,c,d,e,f)    (p)->EnumServiceProviders(a,b,c,d,e,f)\n#define\tIDirectPlay8Peer_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)     (p)->EnumHosts(a,b,c,d,e,f,g,h,i,j,k)\n#define\tIDirectPlay8Peer_CancelAsyncOperation(p,a,b)            (p)->CancelAsyncOperation(a,b)\n#define\tIDirectPlay8Peer_Connect(p,a,b,c,d,e,f,g,h,i,j,k)       (p)->Connect(a,b,c,d,e,f,g,h,i,j,k)\n#define\tIDirectPlay8Peer_SendTo(p,a,b,c,d,e,f,g)                (p)->SendTo(a,b,c,d,e,f,g)\n#define\tIDirectPlay8Peer_GetSendQueueInfo(p,a,b,c,d)            (p)->GetSendQueueInfo(a,b,c,d)\n#define\tIDirectPlay8Peer_Host(p,a,b,c,d,e,f,g)                  (p)->Host(a,b,c,d,e,f,g)\n#define\tIDirectPlay8Peer_GetApplicationDesc(p,a,b,c)            (p)->GetApplicationDesc(a,b,c)\n#define\tIDirectPlay8Peer_SetApplicationDesc(p,a,b)              (p)->SetApplicationDesc(a,b)\n#define\tIDirectPlay8Peer_CreateGroup(p,a,b,c,d,e)               (p)->CreateGroup(a,b,c,d,e)\n#define\tIDirectPlay8Peer_DestroyGroup(p,a,b,c,d)                (p)->DestroyGroup(a,b,c,d)\n#define\tIDirectPlay8Peer_AddPlayerToGroup(p,a,b,c,d,e)          (p)->AddPlayerToGroup(a,b,c,d,e)\n#define\tIDirectPlay8Peer_RemovePlayerFromGroup(p,a,b,c,d,e)     (p)->RemovePlayerFromGroup(a,b,c,d,e)\n#define\tIDirectPlay8Peer_SetGroupInfo(p,a,b,c,d,e)              (p)->SetGroupInfo(a,b,c,d,e)\n#define\tIDirectPlay8Peer_GetGroupInfo(p,a,b,c,d)                (p)->GetGroupInfo(a,b,c,d)\n#define\tIDirectPlay8Peer_EnumPlayersAndGroups(p,a,b,c)          (p)->EnumPlayersAndGroups(a,b,c)\n#define\tIDirectPlay8Peer_EnumGroupMembers(p,a,b,c,d)            (p)->EnumGroupMembers(a,b,c,d)\n#define\tIDirectPlay8Peer_SetPeerInfo(p,a,b,c,d)                 (p)->SetPeerInfo(a,b,c,d)\n#define\tIDirectPlay8Peer_GetPeerInfo(p,a,b,c,d)                 (p)->GetPeerInfo(a,b,c,d)\n#define\tIDirectPlay8Peer_GetPeerAddress(p,a,b,c)                (p)->GetPeerAddress(a,b,c)\n#define\tIDirectPlay8Peer_GetLocalHostAddresses(p,a,b,c)         (p)->GetLocalHostAddresses(a,b,c)\n#define\tIDirectPlay8Peer_Close(p,a)                             (p)->Close(a)\n#define\tIDirectPlay8Peer_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)     (p)->EnumHosts(a,b,c,d,e,f,g,h,i,j,k)\n#define\tIDirectPlay8Peer_DestroyPeer(p,a,b,c,d)                 (p)->DestroyPeer(a,b,c,d)\n#define\tIDirectPlay8Peer_ReturnBuffer(p,a,b)                    (p)->ReturnBuffer(a,b)\n#define\tIDirectPlay8Peer_GetPlayerContext(p,a,b,c)              (p)->GetPlayerContext(a,b,c)\n#define\tIDirectPlay8Peer_GetGroupContext(p,a,b,c)               (p)->GetGroupContext(a,b,c)\n#define\tIDirectPlay8Peer_GetCaps(p,a,b)                         (p)->GetCaps(a,b)\n#define\tIDirectPlay8Peer_SetCaps(p,a,b)                         (p)->SetCaps(a,b)\n#define\tIDirectPlay8Peer_SetSPCaps(p,a,b,c)                     (p)->SetSPCaps(a,b,c)\n#define\tIDirectPlay8Peer_GetSPCaps(p,a,b,c)                     (p)->GetSPCaps(a,b,c)\n#define\tIDirectPlay8Peer_GetConnectionInfo(p,a,b,c)             (p)->GetConnectionInfo(a,b,c)\n#define\tIDirectPlay8Peer_RegisterLobby(p,a,b,c)                 (p)->RegisterLobby(a,b,c)\n#define\tIDirectPlay8Peer_TerminateSession(p,a,b,c)              (p)->TerminateSession(a,b,c)\n#endif\n\n/*****************************************************************************\n * IDirectPlay8ThreadPool interface\n */\n#define INTERFACE IDirectPlay8ThreadPool\nDECLARE_INTERFACE_(IDirectPlay8ThreadPool,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectPlay8ThreadPool methods ***/\n    STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DWORD dwFlags) PURE;\n    STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(GetThreadCount)(THIS_ DWORD dwProcessorNum, DWORD* pdwNumThreads, DWORD dwFlags) PURE;\n    STDMETHOD(SetThreadCount)(THIS_ DWORD dwProcessorNum, DWORD dwNumThreads, DWORD dwFlags) PURE;\n    STDMETHOD(DoWork)(THIS_ DWORD dwAllowedTimeSlice, DWORD dwFlags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define\tIDirectPlay8ThreadPool_QueryInterface(p,a,b)                  (p)->lpVtbl->QueryInterface(p,a,b)\n#define\tIDirectPlay8ThreadPool_AddRef(p)                              (p)->lpVtbl->AddRef(p)\n#define\tIDirectPlay8ThreadPool_Release(p)                             (p)->lpVtbl->Release(p)\n/*** IDirectPlay8ThreadPool methods ***/\n#define IDirectPlay8ThreadPool_Initialize(p,a,b,c)                    (p)->lpVtbl->Initialize(p,a,b,c)\n#define IDirectPlay8ThreadPool_Close(p,a)                             (p)->lpVtbl->Close(p,a)\n#define IDirectPlay8ThreadPool_GetThreadCount(p,a,b,c)                (p)->lpVtbl->GetThreadCount(p,a,b,c)\n#define IDirectPlay8ThreadPool_SetThreadCount(p,a,b,c)                (p)->lpVtbl->SetThreadCount(p,a,b,c)\n#define IDirectPlay8ThreadPool_DoWork(p,a,b)                          (p)->lpVtbl->DoWork(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define\tIDirectPlay8ThreadPool_QueryInterface(p,a,b)                  (p)->QueryInterface(a,b)\n#define\tIDirectPlay8ThreadPool_AddRef(p)                              (p)->AddRef()\n#define\tIDirectPlay8ThreadPool_Release(p)                             (p)->Release()\n/*** IDirectPlay8ThreadPool methods ***/\n#define IDirectPlay8ThreadPool_Initialize(p,a,b,c)                    (p)->Initialize(a,b,c)\n#define IDirectPlay8ThreadPool_Close(p,a)                             (p)->Close(a)\n#define IDirectPlay8ThreadPool_GetThreadCount(p,a,b,c)                (p)->GetThreadCount(a,b,c)\n#define IDirectPlay8ThreadPool_SetThreadCount(p,a,b,c)                (p)->SetThreadCount(a,b,c)\n#define IDirectPlay8ThreadPool_DoWork(p,a,b)                          (p)->DoWork(a,b)\n#endif\n\n/*****************************************************************************\n * IDirectPlay8NATResolver interface\n */\n#define INTERFACE IDirectPlay8NATResolver\nDECLARE_INTERFACE_(IDirectPlay8NATResolver,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectPlay8NATResolver methods ***/\n    STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DWORD dwFlags) PURE;\n    STDMETHOD(Start)(THIS_ IDirectPlay8Address** ppDevices, DWORD dwNumDevices, DWORD dwFlags) PURE;\n    STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(EnumDevices)(THIS_ DPN_SERVICE_PROVIDER_INFO* pSPInfoBuffer, PDWORD pdwBufferSize, PDWORD pdwNumDevices, DWORD dwFlags) PURE;\n    STDMETHOD(GetAddresses)(THIS_ IDirectPlay8Address** ppAddresses, DWORD* pdwNumAddresses, DWORD dwFlags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define\tIDirectPlay8NATResolver_QueryInterface(p,a,b)                  (p)->lpVtbl->QueryInterface(p,a,b)\n#define\tIDirectPlay8NATResolver_AddRef(p)                              (p)->lpVtbl->AddRef(p)\n#define\tIDirectPlay8NATResolver_Release(p)                             (p)->lpVtbl->Release(p)\n/*** IDirectPlay8NATResolver methods ***/\n#define IDirectPlay8NATResolver_Initialize(p,a,b,c)                    (p)->lpVtbl->Initialize(p,a,b,c)\n#define IDirectPlay8NATResolver_Start(p,a,b,c)                         (p)->lpVtbl->Start(p,a,b,c)\n#define IDirectPlay8NATResolver_Close(p,a)                             (p)->lpVtbl->Close(p,a)\n#define IDirectPlay8NATResolver_EnumDevices(p,a,b,c,d)                 (p)->lpVtbl->EnumDevices(p,a,b,c,d)\n#define IDirectPlay8NATResolver_GetAddresses(p,a,b,c)                  (p)->lpVtbl->GetAddresses(p,a,b,c)\n#else\n/*** IUnknown methods ***/\n#define\tIDirectPlay8NATResolver_QueryInterface(p,a,b)                  (p)->QueryInterface(a,b)\n#define\tIDirectPlay8NATResolver_AddRef(p)                              (p)->AddRef()\n#define\tIDirectPlay8NATResolver_Release(p)                             (p)->Release()\n/*** IDirectPlay8NATResolver methods ***/\n#define IDirectPlay8NATResolver_Initialize(p,a,b,c)                    (p)->Initialize(a,b,c)\n#define IDirectPlay8NATResolver_Start(p,a,b,c)                         (p)->Start(a,b,c)\n#define IDirectPlay8NATResolver_Close(p,a)                             (p)->Close(a)\n#define IDirectPlay8NATResolver_EnumDevices(p,a,b,c,d)                 (p)->EnumDevices(a,b,c,d)\n#define IDirectPlay8NATResolver_GetAddresses(p,a,b,c)                  (p)->GetAddresses(a,b,c)\n#endif\n\n/* Export functions */\n\nHRESULT WINAPI DirectPlay8Create(const CLSID* pcIID, LPVOID* ppvInterface, IUnknown* pUnknown);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/dplobby.h",
    "content": "/*\n * Copyright (C) 1999 Francois Gouget\n * Copyright (C) 1999 Peter Hunnisett\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DPLOBBY_H\n#define __WINE_DPLOBBY_H\n\n#include <dplay.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n/*****************************************************************************\n * Predeclare the interfaces\n */\nDEFINE_GUID(CLSID_DirectPlayLobby, 0x2fe8f810, 0xb2a5, 0x11d0, 0xa7, 0x87, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc);\n\nDEFINE_GUID(IID_IDirectPlayLobby, 0xaf465c71, 0x9588, 0x11cf, 0xa0, 0x20, 0x0, 0xaa, 0x0, 0x61, 0x57, 0xac);\ntypedef struct IDirectPlayLobby *LPDIRECTPLAYLOBBY;\n\nDEFINE_GUID(IID_IDirectPlayLobbyA, 0x26c66a70, 0xb367, 0x11cf, 0xa0, 0x24, 0x0, 0xaa, 0x0, 0x61, 0x57, 0xac);\ntypedef struct IDirectPlayLobby IDirectPlayLobbyA,*LPDIRECTPLAYLOBBYA;\n\nDEFINE_GUID(IID_IDirectPlayLobby2, 0x194c220, 0xa303, 0x11d0, 0x9c, 0x4f, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);\ntypedef struct IDirectPlayLobby2 *LPDIRECTPLAYLOBBY2;\n\nDEFINE_GUID(IID_IDirectPlayLobby2A, 0x1bb4af80, 0xa303, 0x11d0, 0x9c, 0x4f, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);\ntypedef struct IDirectPlayLobby2 IDirectPlayLobby2A, *LPDIRECTPLAYLOBBY2A;\n\nDEFINE_GUID(IID_IDirectPlayLobby3, 0x2db72490, 0x652c, 0x11d1, 0xa7, 0xa8, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc);\ntypedef struct IDirectPlayLobby3 *LPDIRECTPLAYLOBBY3;\n\nDEFINE_GUID(IID_IDirectPlayLobby3A, 0x2db72491, 0x652c, 0x11d1, 0xa7, 0xa8, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc);\ntypedef struct IDirectPlayLobby3 IDirectPlayLobby3A, *LPDIRECTPLAYLOBBY3A;\n\n\n/*****************************************************************************\n * DirectPlayLobby Property GUIDs used in lobby messages\n */\n\n/* DPLPROPERTY_MessagesSupported {762CCDA1-D916-11d0-BA39-00C04FD7ED67}.\n * Purpose: Request if the lobby supports standard (?).\n * Response: Answer is a BOOL. TRUE if supports the standard (?) and FALSE otherwise. Of course, it might not respond at all.\n */\nDEFINE_GUID(DPLPROPERTY_MessagesSupported, 0x762ccda1, 0xd916, 0x11d0, 0xba, 0x39, 0x0, 0xc0, 0x4f, 0xd7, 0xed, 0x67);\n\n/* DPLPROPERTY_LobbyGuid {F56920A0-D218-11d0-BA39-00C04FD7ED67}.\n * Purpose: Request the GUID that identifies the lobby version that the application is communicating with.\n * Response: The GUID which identifies the lobby version\n */\nDEFINE_GUID(DPLPROPERTY_LobbyGuid, 0xf56920a0, 0xd218, 0x11d0, 0xba, 0x39, 0x0, 0xc0, 0x4f, 0xd7, 0xed, 0x67);\n\n/* DPLPROPERTY_PlayerGuid {B4319322-D20D-11d0-BA39-00C04FD7ED67}\n * Purpose: Request the GUID that identifies the player for this particular machine.\n * Response: DPLDATA_PLAYERDATA structure.\n */\nDEFINE_GUID(DPLPROPERTY_PlayerGuid, 0xb4319322, 0xd20d, 0x11d0, 0xba, 0x39, 0x0, 0xc0, 0x4f, 0xd7, 0xed, 0x67);\n\n/* DPLPROPERTY_PlayerScore {48784000-D219-11d0-BA39-00C04FD7ED67}\n * Purpose: Used to send a score of a player to the lobby. The format is an array of long integers.\n * Response: I don't think there is one.\n */\nDEFINE_GUID(DPLPROPERTY_PlayerScore, 0x48784000, 0xd219, 0x11d0, 0xba, 0x39, 0x0, 0xc0, 0x4f, 0xd7, 0xed, 0x67);\n\n\n\n/*****************************************************************************\n * LOBBY structures associated with GUID messages\n */\n\ntypedef struct tagDPLDATA_PLAYERGUID\n{\n        GUID    guidPlayer;\n        DWORD   dwPlayerFlags;\n} DPLDATA_PLAYERGUID, *LPDPLDATA_PLAYERGUID;\n\ntypedef struct tagDPLDATA_PLAYERSCORE\n{\n        DWORD   dwScoreCount;\n        LONG    Score[1];\n} DPLDATA_PLAYERSCORE, *LPDPLDATA_PLAYERSCORE;\n\n\n/*****************************************************************************\n * LOBBY messages and message data structures.\n *\n * System messages can be identified by dwMessageFlags having a value of DPLMSG_SYSTEM\n * after a call to ReceiveLobbyMessage.\n *\n * Standard messages can be identified by dwMessageFlags having a value of DPLMSG_STANDARD\n * after a call to ReceiveLobbyMessage.\n */\n\n/* DPLobby1 definition required for backwards compatibility */\n#define DPLMSG_SYSTEM                                   0x00000001\n#define DPLMSG_STANDARD                                 0x00000002\n#define DPLAD_SYSTEM          DPLMSG_SYSTEM\n\n\n/* System messages  - dwType field for messages */\n#define DPLSYS_CONNECTIONSETTINGSREAD   0x00000001\n#define DPLSYS_DPLAYCONNECTFAILED       0x00000002\n#define DPLSYS_DPLAYCONNECTSUCCEEDED    0x00000003\n#define DPLSYS_APPTERMINATED            0x00000004\n#define DPLSYS_SETPROPERTY              0x00000005\n#define DPLSYS_SETPROPERTYRESPONSE      0x00000006\n#define DPLSYS_GETPROPERTY              0x00000007\n#define DPLSYS_GETPROPERTYRESPONSE      0x00000008\n#define DPLSYS_NEWSESSIONHOST           0x00000009\n#define DPLSYS_NEWCONNECTIONSETTINGS    0x0000000A\n\n\n\n/* Used to identify the message type */\ntypedef struct tagDPLMSG_GENERIC\n{\n    DWORD       dwType;         /* Message type */\n} DPLMSG_GENERIC, *LPDPLMSG_GENERIC;\n\n/* Generic format for system messages - see above */\ntypedef struct tagDPLMSG_SYSTEMMESSAGE\n{\n    DWORD       dwType;         /* Message type */\n    GUID        guidInstance;   /* Instance GUID of the dplay session the message corresponds to */\n} DPLMSG_SYSTEMMESSAGE, *LPDPLMSG_SYSTEMMESSAGE;\n\n/* Generic message to set a property - see property GUIDs above */\ntypedef struct tagDPLMSG_SETPROPERTY\n{\n        DWORD   dwType;              /* Message type */\n        DWORD   dwRequestID;         /* Request ID (DPL_NOCONFIRMATION if no confirmation desired) */\n        GUID    guidPlayer;          /* Player GUID */\n        GUID    guidPropertyTag;     /* Property GUID */\n        DWORD   dwDataSize;          /* Size of data */\n        DWORD   dwPropertyData[1];   /* Buffer containing data */\n} DPLMSG_SETPROPERTY, *LPDPLMSG_SETPROPERTY;\n\n#define DPL_NOCONFIRMATION      0\n\n/* Reply to DPLMSG_SETPROPERTY */\ntypedef struct tagDPLMSG_SETPROPERTYRESPONSE\n{\n        DWORD   dwType;              /* Message type */\n        DWORD   dwRequestID;         /* Request ID */\n        GUID    guidPlayer;          /* Player GUID */\n        GUID    guidPropertyTag;     /* Property GUID */\n        HRESULT hr;                  /* Return Code */\n} DPLMSG_SETPROPERTYRESPONSE, *LPDPLMSG_SETPROPERTYRESPONSE;\n\n/* Request to get the present value of a property */\ntypedef struct tagDPLMSG_GETPROPERTY\n{\n        DWORD   dwType;           /* Message type */\n        DWORD   dwRequestID;      /* Request ID */\n        GUID    guidPlayer;       /* Player GUID */\n        GUID    guidPropertyTag;  /* Property GUID */\n} DPLMSG_GETPROPERTY, *LPDPLMSG_GETPROPERTY;\n\n/* Response to a request to get the present value of a property */\ntypedef struct tagDPLMSG_GETPROPERTYRESPONSE\n{\n        DWORD   dwType;              /* Message type */\n        DWORD   dwRequestID;         /* Request ID */\n        GUID    guidPlayer;          /* Player GUID */\n        GUID    guidPropertyTag;     /* Property GUID */\n        HRESULT hr;                  /* Return Code */\n        DWORD   dwDataSize;          /* Size of data */\n        DWORD   dwPropertyData[1];   /* Buffer containing data */\n} DPLMSG_GETPROPERTYRESPONSE, *LPDPLMSG_GETPROPERTYRESPONSE;\n\n/* Standard message in response to a session host migration to a new client */\ntypedef struct tagDPLMSG_NEWSESSIONHOST\n{\n    DWORD   dwType;        /* Message type */\n    GUID    guidInstance;  /* GUID Instance of the session */\n} DPLMSG_NEWSESSIONHOST, *LPDPLMSG_NEWSESSIONHOST;\n\n/*****************************************************************************\n * DirectPlay Address ID's\n * A DirectPlay address is composed of multiple data chunks, each associated with\n * a GUID to give significance to the type of data. All chunks have an associated\n * size so that unknown chunks can be ignored for backwards compatibility!\n * EnumAddresses function is used to parse the address data chunks.\n */\n\n/* DPAID_TotalSize {1318F560-912C-11d0-9DAA-00A0C90A43CB}\n * Chunk purpose: Chunk is a DWORD containing the size of the entire DPADDRESS struct\n */\nDEFINE_GUID(DPAID_TotalSize, 0x1318f560, 0x912c, 0x11d0, 0x9d, 0xaa, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb);\n\n/* DPAID_ServiceProvider {07D916C0-E0AF-11cf-9C4E-00A0C905425E}\n * Chunk purpose: Chunk is a GUID indicated what service provider created the chunk.\n */\nDEFINE_GUID(DPAID_ServiceProvider, 0x7d916c0, 0xe0af, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);\n\n/* DPAID_LobbyProvider {59B95640-9667-11d0-A77D-0000F803ABFC}\n * Chunk purpose: Chunk is a GUID indicating what lobby provider created the chunk.\n */\nDEFINE_GUID(DPAID_LobbyProvider, 0x59b95640, 0x9667, 0x11d0, 0xa7, 0x7d, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc);\n\n/* DPAID_Phone  {78EC89A0-E0AF-11cf-9C4E-00A0C905425E} -- ANSI\n * DPAID_PhoneW {BA5A7A70-9DBF-11d0-9CC1-00A0C905425E} -- UNICODE\n * Chunk purpose: Chunk is a phone number in ANSI or UNICODE format\n */\nDEFINE_GUID(DPAID_Phone, 0x78ec89a0, 0xe0af, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);\nDEFINE_GUID(DPAID_PhoneW, 0xba5a7a70, 0x9dbf, 0x11d0, 0x9c, 0xc1, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);\n\n/* DPAID_Modem  {F6DCC200-A2FE-11d0-9C4F-00A0C905425E} -- ANSI\n * DPAID_ModemW {01FD92E0-A2FF-11d0-9C4F-00A0C905425E} -- UNICODE\n * Chunk purpose: Chunk is a modem name registered with TAPI\n */\nDEFINE_GUID(DPAID_Modem, 0xf6dcc200, 0xa2fe, 0x11d0, 0x9c, 0x4f, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);\nDEFINE_GUID(DPAID_ModemW, 0x1fd92e0, 0xa2ff, 0x11d0, 0x9c, 0x4f, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);\n\n/* DPAID_INet  {C4A54DA0-E0AF-11cf-9C4E-00A0C905425E} -- ANSI\n * DPAID_INetW {E63232A0-9DBF-11d0-9CC1-00A0C905425E} -- UNICODE\n * Chunk purpose: Chunk is a string containing a TCP/IP host name or IP address\n */\nDEFINE_GUID(DPAID_INet, 0xc4a54da0, 0xe0af, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);\nDEFINE_GUID(DPAID_INetW, 0xe63232a0, 0x9dbf, 0x11d0, 0x9c, 0xc1, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);\n\n/* DPAID_INetPort {E4524541-8EA5-11d1-8A96-006097B01411}\n * Chunk purpose: Chunk is a port number used for creating TCP and UDP sockets. (WORD)\n */\nDEFINE_GUID(DPAID_INetPort, 0xe4524541, 0x8ea5, 0x11d1, 0x8a, 0x96, 0x0, 0x60, 0x97, 0xb0, 0x14, 0x11);\n\n/* DPAID_ComPort {F2F0CE00-E0AF-11cf-9C4E-00A0C905425E}\n * Chunk purpose: Chunk contains the description of a serial port.\n */\nDEFINE_GUID(DPAID_ComPort, 0xf2f0ce00, 0xe0af, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);\n\n\n/* Header block for address data elements */\ntypedef struct tagDPADDRESS\n{\n    GUID                guidDataType;\n    DWORD               dwDataSize;\n} DPADDRESS, *LPDPADDRESS;\n\n\n/* Used for specification of a communication port. Baud rate, stop bits and\n * parity bits can be found in winbase.h. These are flow control constants only.\n */\n#define DPCPA_NOFLOW        0           /* no flow control */\n#define DPCPA_XONXOFFFLOW   1           /* software flow control */\n#define DPCPA_RTSFLOW       2           /* hardware flow control with RTS */\n#define DPCPA_DTRFLOW       3           /* hardware flow control with DTR */\n#define DPCPA_RTSDTRFLOW    4           /* hardware flow control with RTS and DTR */\n\ntypedef struct tagDPCOMPORTADDRESS\n{\n    DWORD   dwComPort;                  /* COM port to use (1-4) */\n    DWORD   dwBaudRate;                 /* baud rate (100-256k) */\n    DWORD   dwStopBits;                 /* no. stop bits (1-2) */\n    DWORD   dwParity;                   /* parity (none, odd, even, mark) */\n    DWORD   dwFlowControl;              /* flow control (none, xon/xoff, rts, dtr) */\n} DPCOMPORTADDRESS, *LPDPCOMPORTADDRESS;\n\n\n\n/****************************************************************************\n * Miscellaneous\n */\n\ntypedef struct tagDPLAPPINFO\n{\n    DWORD       dwSize;\n    GUID        guidApplication;\n\n    union\n    {\n        LPSTR   lpszAppNameA;\n        LPWSTR  lpszAppName;\n    } DUMMYUNIONNAME;\n\n} DPLAPPINFO, *LPDPLAPPINFO;\ntypedef const DPLAPPINFO *LPCDPLAPPINFO;\n\ntypedef struct DPCOMPOUNDADDRESSELEMENT\n{\n    GUID    guidDataType;\n    DWORD   dwDataSize;\n    LPVOID  lpData;\n} DPCOMPOUNDADDRESSELEMENT, *LPDPCOMPOUNDADDRESSELEMENT;\ntypedef const DPCOMPOUNDADDRESSELEMENT *LPCDPCOMPOUNDADDRESSELEMENT;\n\ntypedef struct tagDPAPPLICATIONDESC\n{\n    DWORD       dwSize;\n    DWORD       dwFlags;\n\n    union\n    {\n        LPSTR       lpszApplicationNameA;\n        LPWSTR      lpszApplicationName;\n    } DUMMYUNIONNAME1;\n\n    GUID        guidApplication;\n\n    union\n    {\n        LPSTR       lpszFilenameA;\n        LPWSTR      lpszFilename;\n    } DUMMYUNIONNAME2;\n\n    union\n    {\n        LPSTR       lpszCommandLineA;\n        LPWSTR      lpszCommandLine;\n    } DUMMYUNIONNAME3;\n\n    union\n    {\n        LPSTR       lpszPathA;\n        LPWSTR      lpszPath;\n    } DUMMYUNIONNAME4;\n\n    union\n    {\n        LPSTR       lpszCurrentDirectoryA;\n        LPWSTR      lpszCurrentDirectory;\n    } DUMMYUNIONNAME5;\n\n    LPSTR       lpszDescriptionA;\n    LPWSTR      lpszDescriptionW;\n\n} DPAPPLICATIONDESC, *LPDPAPPLICATIONDESC;\n\n\n\nextern HRESULT WINAPI DirectPlayLobbyCreateW(LPGUID, LPDIRECTPLAYLOBBY*,  IUnknown*, LPVOID, DWORD );\nextern HRESULT WINAPI DirectPlayLobbyCreateA(LPGUID, LPDIRECTPLAYLOBBYA*, IUnknown*, LPVOID, DWORD );\n#define DirectPlayLobbyCreate WINELIB_NAME_AW(DirectPlayLobbyCreate)\n\n\ntypedef BOOL (CALLBACK *LPDPENUMADDRESSCALLBACK)(\n    REFGUID         guidDataType,\n    DWORD           dwDataSize,\n    LPCVOID         lpData,\n    LPVOID          lpContext );\n\ntypedef BOOL (CALLBACK *LPDPLENUMADDRESSTYPESCALLBACK)(\n    REFGUID         guidDataType,\n    LPVOID          lpContext,\n    DWORD           dwFlags );\n\ntypedef BOOL (CALLBACK *LPDPLENUMLOCALAPPLICATIONSCALLBACK)(\n    LPCDPLAPPINFO   lpAppInfo,\n    LPVOID          lpContext,\n    DWORD           dwFlags );\n\n/*****************************************************************************\n * IDirectPlayLobby and IDirectPlayLobbyA interface\n */\n#define INTERFACE IDirectPlayLobby\nDECLARE_INTERFACE_(IDirectPlayLobby,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectPlayLobby methods ***/\n    STDMETHOD(Connect)(THIS_ DWORD, LPDIRECTPLAY2*, IUnknown*) PURE;\n    STDMETHOD(CreateAddress)(THIS_ REFGUID, REFGUID, LPCVOID, DWORD, LPVOID, LPDWORD) PURE;\n    STDMETHOD(EnumAddress)(THIS_ LPDPENUMADDRESSCALLBACK, LPCVOID, DWORD, LPVOID) PURE;\n    STDMETHOD(EnumAddressTypes)(THIS_ LPDPLENUMADDRESSTYPESCALLBACK, REFGUID, LPVOID, DWORD) PURE;\n    STDMETHOD(EnumLocalApplications)(THIS_ LPDPLENUMLOCALAPPLICATIONSCALLBACK, LPVOID, DWORD) PURE;\n    STDMETHOD(GetConnectionSettings)(THIS_ DWORD, LPVOID, LPDWORD) PURE;\n    STDMETHOD(ReceiveLobbyMessage)(THIS_ DWORD, DWORD, LPDWORD, LPVOID, LPDWORD) PURE;\n    STDMETHOD(RunApplication)(THIS_ DWORD, LPDWORD, LPDPLCONNECTION, HANDLE) PURE;\n    STDMETHOD(SendLobbyMessage)(THIS_ DWORD, DWORD, LPVOID, DWORD) PURE;\n    STDMETHOD(SetConnectionSettings)(THIS_ DWORD, DWORD, LPDPLCONNECTION) PURE;\n    STDMETHOD(SetLobbyMessageEvent)(THIS_ DWORD, DWORD, HANDLE) PURE;\n};\n#undef INTERFACE\n\n/*****************************************************************************\n * IDirectPlayLobby2 and IDirectPlayLobby2A interface\n */\n#define INTERFACE IDirectPlayLobby2\nDECLARE_INTERFACE_(IDirectPlayLobby2,IDirectPlayLobby)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectPlayLobby methods ***/\n    STDMETHOD(Connect)(THIS_ DWORD, LPDIRECTPLAY2*, IUnknown*) PURE;\n    STDMETHOD(CreateAddress)(THIS_ REFGUID, REFGUID, LPCVOID, DWORD, LPVOID, LPDWORD) PURE;\n    STDMETHOD(EnumAddress)(THIS_ LPDPENUMADDRESSCALLBACK, LPCVOID, DWORD, LPVOID) PURE;\n    STDMETHOD(EnumAddressTypes)(THIS_ LPDPLENUMADDRESSTYPESCALLBACK, REFGUID, LPVOID, DWORD) PURE;\n    STDMETHOD(EnumLocalApplications)(THIS_ LPDPLENUMLOCALAPPLICATIONSCALLBACK, LPVOID, DWORD) PURE;\n    STDMETHOD(GetConnectionSettings)(THIS_ DWORD, LPVOID, LPDWORD) PURE;\n    STDMETHOD(ReceiveLobbyMessage)(THIS_ DWORD, DWORD, LPDWORD, LPVOID, LPDWORD) PURE;\n    STDMETHOD(RunApplication)(THIS_ DWORD, LPDWORD, LPDPLCONNECTION, HANDLE) PURE;\n    STDMETHOD(SendLobbyMessage)(THIS_ DWORD, DWORD, LPVOID, DWORD) PURE;\n    STDMETHOD(SetConnectionSettings)(THIS_ DWORD, DWORD, LPDPLCONNECTION) PURE;\n    STDMETHOD(SetLobbyMessageEvent)(THIS_ DWORD, DWORD, HANDLE) PURE;\n    /*** IDirectPlayLobby2 methods ***/\n    STDMETHOD(CreateCompoundAddress)(THIS_ LPCDPCOMPOUNDADDRESSELEMENT, DWORD, LPVOID, LPDWORD) PURE;\n};\n#undef INTERFACE\n\n/*****************************************************************************\n * IDirectPlayLobby3 and IDirectPlayLobby3A interface\n */\n#define INTERFACE IDirectPlayLobby3\nDECLARE_INTERFACE_(IDirectPlayLobby3,IDirectPlayLobby2)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectPlayLobby methods ***/\n    STDMETHOD(Connect)(THIS_ DWORD, LPDIRECTPLAY2*, IUnknown*) PURE;\n    STDMETHOD(CreateAddress)(THIS_ REFGUID, REFGUID, LPCVOID, DWORD, LPVOID, LPDWORD) PURE;\n    STDMETHOD(EnumAddress)(THIS_ LPDPENUMADDRESSCALLBACK, LPCVOID, DWORD, LPVOID) PURE;\n    STDMETHOD(EnumAddressTypes)(THIS_ LPDPLENUMADDRESSTYPESCALLBACK, REFGUID, LPVOID, DWORD) PURE;\n    STDMETHOD(EnumLocalApplications)(THIS_ LPDPLENUMLOCALAPPLICATIONSCALLBACK, LPVOID, DWORD) PURE;\n    STDMETHOD(GetConnectionSettings)(THIS_ DWORD, LPVOID, LPDWORD) PURE;\n    STDMETHOD(ReceiveLobbyMessage)(THIS_ DWORD, DWORD, LPDWORD, LPVOID, LPDWORD) PURE;\n    STDMETHOD(RunApplication)(THIS_ DWORD, LPDWORD, LPDPLCONNECTION, HANDLE) PURE;\n    STDMETHOD(SendLobbyMessage)(THIS_ DWORD, DWORD, LPVOID, DWORD) PURE;\n    STDMETHOD(SetConnectionSettings)(THIS_ DWORD, DWORD, LPDPLCONNECTION) PURE;\n    STDMETHOD(SetLobbyMessageEvent)(THIS_ DWORD, DWORD, HANDLE) PURE;\n    /*** IDirectPlayLobby2 methods ***/\n    STDMETHOD(CreateCompoundAddress)(THIS_ LPCDPCOMPOUNDADDRESSELEMENT, DWORD, LPVOID, LPDWORD) PURE;\n    /*** IDirectPlayLobby3 methods ***/\n    STDMETHOD(ConnectEx)(THIS_ DWORD, REFIID, LPVOID *, IUnknown *) PURE;\n    STDMETHOD(RegisterApplication)(THIS_ DWORD, LPDPAPPLICATIONDESC) PURE;\n    STDMETHOD(UnregisterApplication)(THIS_ DWORD, REFGUID) PURE;\n    STDMETHOD(WaitForConnectionSettings)(THIS_ DWORD) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectPlayLobby_QueryInterface(p,a,b)              (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectPlayLobby_AddRef(p)                          (p)->lpVtbl->AddRef(p)\n#define IDirectPlayLobby_Release(p)                         (p)->lpVtbl->Release(p)\n/*** IDirectPlayLobby methods ***/\n#define IDirectPlayLobby_Connect(p,a,b,c)                   (p)->lpVtbl->Connect(p,a,b,c)\n#define IDirectPlayLobby_CreateAddress(p,a,b,c,d,e,f)       (p)->lpVtbl->CreateAddress(p,a,b,c,d,e,f)\n#define IDirectPlayLobby_EnumAddress(p,a,b,c,d)             (p)->lpVtbl->EnumAddress(p,a,b,c,d)\n#define IDirectPlayLobby_EnumAddressTypes(p,a,b,c,d)        (p)->lpVtbl->EnumAddressTypes(p,a,b,c,d)\n#define IDirectPlayLobby_EnumLocalApplications(p,a,b,c)     (p)->lpVtbl->EnumLocalApplications(p,a,b,c)\n#define IDirectPlayLobby_GetConnectionSettings(p,a,b,c)     (p)->lpVtbl->GetConnectionSettings(p,a,b,c)\n#define IDirectPlayLobby_ReceiveLobbyMessage(p,a,b,c,d,e)   (p)->lpVtbl->ReceiveLobbyMessage(p,a,b,c,d,e)\n#define IDirectPlayLobby_RunApplication(p,a,b,c,d)          (p)->lpVtbl->RunApplication(p,a,b,c,d)\n#define IDirectPlayLobby_SendLobbyMessage(p,a,b,c,d)        (p)->lpVtbl->SendLobbyMessage(p,a,b,c,d)\n#define IDirectPlayLobby_SetConnectionSettings(p,a,b,c)     (p)->lpVtbl->SetConnectionSettings(p,a,b,c)\n#define IDirectPlayLobby_SetLobbyMessageEvent(p,a,b,c)      (p)->lpVtbl->SetLobbyMessageEvent(p,a,b,c)\n/*** IDirectPlayLobby2 methods ***/\n#define IDirectPlayLobby_CreateCompoundAddress(p,a,b,c,d)   (p)->lpVtbl->CreateCompoundAddress(p,a,b,c,d)\n/*** IDirectPlayLobby3 methods ***/\n#define IDirectPlayLobby_ConnectEx(p,a,b,c,d)               (p)->lpVtbl->ConnectEx(p,a,b,c,d)\n#define IDirectPlayLobby_RegisterApplication(p,a,b)         (p)->lpVtbl->RegisterApplication(p,a,b)\n#define IDirectPlayLobby_UnregisterApplication(p,a,b)       (p)->lpVtbl->UnregisterApplication(p,a,b)\n#define IDirectPlayLobby_WaitForConnectionSettings(p,a)     (p)->lpVtbl->WaitForConnectionSettings(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirectPlayLobby_QueryInterface(p,a,b)              (p)->QueryInterface(a,b)\n#define IDirectPlayLobby_AddRef(p)                          (p)->AddRef()\n#define IDirectPlayLobby_Release(p)                         (p)->Release()\n/*** IDirectPlayLobby methods ***/\n#define IDirectPlayLobby_Connect(p,a,b,c)                   (p)->Connect(a,b,c)\n#define IDirectPlayLobby_CreateAddress(p,a,b,c,d,e,f)       (p)->CreateAddress(a,b,c,d,e,f)\n#define IDirectPlayLobby_EnumAddress(p,a,b,c,d)             (p)->EnumAddress(a,b,c,d)\n#define IDirectPlayLobby_EnumAddressTypes(p,a,b,c,d)        (p)->EnumAddressTypes(a,b,c,d)\n#define IDirectPlayLobby_EnumLocalApplications(p,a,b,c)     (p)->EnumLocalApplications(a,b,c)\n#define IDirectPlayLobby_GetConnectionSettings(p,a,b,c)     (p)->GetConnectionSettings(a,b,c)\n#define IDirectPlayLobby_ReceiveLobbyMessage(p,a,b,c,d,e)   (p)->ReceiveLobbyMessage(a,b,c,d,e)\n#define IDirectPlayLobby_RunApplication(p,a,b,c,d)          (p)->RunApplication(a,b,c,d)\n#define IDirectPlayLobby_SendLobbyMessage(p,a,b,c,d)        (p)->SendLobbyMessage(a,b,c,d)\n#define IDirectPlayLobby_SetConnectionSettings(p,a,b,c)     (p)->SetConnectionSettings(a,b,c)\n#define IDirectPlayLobby_SetLobbyMessageEvent(p,a,b,c)      (p)->SetLobbyMessageEvent(a,b,c)\n/*** IDirectPlayLobby2 methods ***/\n#define IDirectPlayLobby_CreateCompoundAddress(p,a,b,c,d)   (p)->CreateCompoundAddress(a,b,c,d)\n/*** IDirectPlayLobby3 methods ***/\n#define IDirectPlayLobby_ConnectEx(p,a,b,c,d)               (p)->ConnectEx(a,b,c,d)\n#define IDirectPlayLobby_RegisterApplication(p,a,b)         (p)->RegisterApplication(a,b)\n#define IDirectPlayLobby_UnregisterApplication(p,a,b)       (p)->UnregisterApplication(a,b)\n#define IDirectPlayLobby_WaitForConnectionSettings(p,a)     (p)->WaitForConnectionSettings(a)\n#endif\n\n/* Used for WaitForConnectionSettings */\n#define DPLWAIT_CANCEL                  0x00000001\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif /* __WINE_DPLOBBY_H */\n"
  },
  {
    "path": "wine/windows/dplobby8.h",
    "content": "/*\n * Copyright (C) 2003-2005 Raphael Junqueira\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DPLOBBY8_H\n#define __WINE_DPLOBBY8_H\n\n#include <ole2.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n/*****************************************************************************\n * DirectPlay8Lobby defines\n */\n#define DPL_MSGID_LOBBY                   0x8000\n#define DPL_MSGID_RECEIVE                 (0x0001 | DPL_MSGID_LOBBY)\n#define DPL_MSGID_CONNECT                 (0x0002 | DPL_MSGID_LOBBY)\n#define DPL_MSGID_DISCONNECT              (0x0003 | DPL_MSGID_LOBBY)\n#define DPL_MSGID_SESSION_STATUS          (0x0004 | DPL_MSGID_LOBBY)\n#define DPL_MSGID_CONNECTION_SETTINGS     (0x0005 | DPL_MSGID_LOBBY)\n#define DPLHANDLE_ALLCONNECTIONS          0xFFFFFFFF\n#define DPLSESSION_CONNECTED              0x0001\n#define DPLSESSION_COULDNOTCONNECT        0x0002\n#define DPLSESSION_DISCONNECTED           0x0003\n#define DPLSESSION_TERMINATED             0x0004\n#define DPLSESSION_HOSTMIGRATED           0x0005\n#define DPLSESSION_HOSTMIGRATEDHERE       0x0006\n#define DPLAVAILABLE_ALLOWMULTIPLECONNECT 0x0001\n#define DPLCONNECT_LAUNCHNEW              0x0001\n#define DPLCONNECT_LAUNCHNOTFOUND         0x0002\n#define DPLCONNECTSETTINGS_HOST           0x0001\n#define DPLINITIALIZE_DISABLEPARAMVAL     0x0001\n\n/*****************************************************************************\n * DirectPlay8Lobby structures Typedefs\n */\ntypedef struct _DPL_APPLICATION_INFO {\n  GUID    guidApplication;\n  PWSTR   pwszApplicationName;\n  DWORD   dwNumRunning;\n  DWORD   dwNumWaiting;\n  DWORD   dwFlags;\n} DPL_APPLICATION_INFO, *PDPL_APPLICATION_INFO;\n\ntypedef struct _DPL_CONNECTION_SETTINGS {\n  DWORD                 dwSize;\n  DWORD                 dwFlags;\n  DPN_APPLICATION_DESC  dpnAppDesc;\n  IDirectPlay8Address*  pdp8HostAddress;\n  IDirectPlay8Address** ppdp8DeviceAddresses;\n  DWORD                 cNumDeviceAddresses;\n  PWSTR                 pwszPlayerName;\n} DPL_CONNECTION_SETTINGS, *PDPL_CONNECTION_SETTINGS;\n\ntypedef struct _DPL_CONNECT_INFO {\n  DWORD\t                   dwSize;\n  DWORD\t                   dwFlags;\n  GUID                     guidApplication;\n  PDPL_CONNECTION_SETTINGS pdplConnectionSettings;\n  PVOID                    pvLobbyConnectData;\n  DWORD                    dwLobbyConnectDataSize;\n} DPL_CONNECT_INFO, *PDPL_CONNECT_INFO;\n\ntypedef struct  _DPL_PROGRAM_DESC {\n  DWORD   dwSize;\n  DWORD   dwFlags;\n  GUID    guidApplication;\n  PWSTR   pwszApplicationName;\n  PWSTR   pwszCommandLine;\n  PWSTR   pwszCurrentDirectory;\n  PWSTR   pwszDescription;\n  PWSTR   pwszExecutableFilename;\n  PWSTR   pwszExecutablePath;\n  PWSTR   pwszLauncherFilename;\n  PWSTR   pwszLauncherPath;\n} DPL_PROGRAM_DESC, *PDPL_PROGRAM_DESC;\n\ntypedef struct _DPL_MESSAGE_CONNECT {\n  DWORD                    dwSize;\n  DPNHANDLE                hConnectId;\n  PDPL_CONNECTION_SETTINGS pdplConnectionSettings;\n  PVOID\t                   pvLobbyConnectData;\n  DWORD\t                   dwLobbyConnectDataSize;\n  PVOID\t                   pvConnectionContext;\n} DPL_MESSAGE_CONNECT, *PDPL_MESSAGE_CONNECT;\n\ntypedef struct _DPL_MESSAGE_CONNECTION_SETTINGS {\n  DWORD                     dwSize;\n  DPNHANDLE                 hSender;\n  PDPL_CONNECTION_SETTINGS  pdplConnectionSettings;\n  PVOID\t                    pvConnectionContext;\n} DPL_MESSAGE_CONNECTION_SETTINGS, *PDPL_MESSAGE_CONNECTION_SETTINGS;\n\ntypedef struct _DPL_MESSAGE_DISCONNECT {\n  DWORD\t    dwSize;\n  DPNHANDLE hDisconnectId;\n  HRESULT   hrReason;\n  PVOID\t    pvConnectionContext;\n} DPL_MESSAGE_DISCONNECT, *PDPL_MESSAGE_DISCONNECT;\n\ntypedef struct _DPL_MESSAGE_RECEIVE {\n  DWORD\t    dwSize;\n  DPNHANDLE hSender;\n  BYTE*     pBuffer;\n  DWORD\t    dwBufferSize;\n  PVOID\t    pvConnectionContext;\n} DPL_MESSAGE_RECEIVE, *PDPL_MESSAGE_RECEIVE;\n\ntypedef struct _DPL_MESSAGE_SESSION_STATUS {\n  DWORD     dwSize;\n  DPNHANDLE hSender;\n  DWORD     dwStatus;\n  PVOID\t    pvConnectionContext;\n} DPL_MESSAGE_SESSION_STATUS, *PDPL_MESSAGE_SESSION_STATUS;\n\n/*****************************************************************************\n * Predeclare the interfaces\n */\nDEFINE_GUID(CLSID_DirectPlay8LobbiedApplication,  0x667955ad,0x6b3b,0x43ca,0xb9,0x49,0xbc,0x69,0xb5,0xba,0xff,0x7f);\nDEFINE_GUID(CLSID_DirectPlay8LobbyClient,         0x3b2b6775,0x70b6,0x45af,0x8d,0xea,0xa2,0x09,0xc6,0x95,0x59,0xf3);\n\nDEFINE_GUID(IID_IDirectPlay8LobbiedApplication,   0x819074a3,0x16c,0x11d3,0xae,0x14,0x00,0x60,0x97,0xb0,0x14,0x11);\ntypedef struct IDirectPlay8LobbiedApplication *PDIRECTPLAY8LOBBIEDAPPLICATION;\nDEFINE_GUID(IID_IDirectPlay8LobbyClient,          0x819074a2,0x16c,0x11d3,0xae,0x14,0x00,0x60,0x97,0xb0,0x14,0x11);\ntypedef struct IDirectPlay8LobbyClient *PDIRECTPLAY8LOBBYCLIENT;\n\n/*****************************************************************************\n * IDirectPlay8LobbiedApplication interface\n */\n#define INTERFACE IDirectPlay8LobbiedApplication\nDECLARE_INTERFACE_(IDirectPlay8LobbiedApplication,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectPlay8LobbiedApplication methods ***/\n    STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DPNHANDLE* pdpnhConnection, DWORD dwFlags) PURE;\n    STDMETHOD(RegisterProgram)(THIS_ PDPL_PROGRAM_DESC pdplProgramDesc, DWORD dwFlags) PURE;\n    STDMETHOD(UnRegisterProgram)(THIS_ GUID* pguidApplication, DWORD dwFlags) PURE;\n    STDMETHOD(Send)(THIS_ DPNHANDLE hConnection, BYTE* pBuffer, DWORD pBufferSize, DWORD dwFlags) PURE;\n    STDMETHOD(SetAppAvailable)(THIS_ BOOL fAvailable, DWORD dwFlags) PURE;\n    STDMETHOD(UpdateStatus)(THIS_ DPNHANDLE hConnection, DWORD dwStatus, DWORD dwFlags) PURE;\n    STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(GetConnectionSettings)(THIS_ DPNHANDLE hConnection, DPL_CONNECTION_SETTINGS* pdplSessionInfo, DWORD* pdwInfoSize, DWORD dwFlags) PURE;\n    STDMETHOD(SetConnectionSettings)(THIS_ DPNHANDLE hConnection, const DPL_CONNECTION_SETTINGS* pdplSessionInfo, DWORD dwFlags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectPlay8LobbiedApplication_QueryInterface(p,a,b)                (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectPlay8LobbiedApplication_AddRef(p)                            (p)->lpVtbl->AddRef(p)\n#define IDirectPlay8LobbiedApplication_Release(p)                           (p)->lpVtbl->Release(p)\n/*** IDirectPlay8LobbiedApplication methods ***/\n#define IDirectPlay8LobbiedApplication_Initialize(p,a,b,c,d)                (p)->lpVtbl->Initialize(p,a,b,c,d)\n#define IDirectPlay8LobbiedApplication_RegisterProgram(p,a,b)               (p)->lpVtbl->RegisterProgram(p,a,b)\n#define IDirectPlay8LobbiedApplication_UnRegisterProgram(p,a,b)             (p)->lpVtbl->UnRegisterProgram(p,a,b)\n#define IDirectPlay8LobbiedApplication_Send(p,a,b,c,d)                      (p)->lpVtbl->Send(p,a,b,c,d)\n#define IDirectPlay8LobbiedApplication_SetAppAvailable(p,a,b)               (p)->lpVtbl->SetAppAvailable(p,a,b)\n#define IDirectPlay8LobbiedApplication_UpdateStatus(p,a,b,c)                (p)->lpVtbl->UpdateStatus(p,a,b,c)\n#define IDirectPlay8LobbiedApplication_Close(p,a)                           (p)->lpVtbl->Close(p,a)\n#define IDirectPlay8LobbiedApplication_GetConnectionSettings(p,a,b,c,d)     (p)->lpVtbl->GetConnectionSettings(p,a,b,c,d)\n#define IDirectPlay8LobbiedApplication_SetConnectionSettings(p,a,b,c)       (p)->lpVtbl->SetConnectionSettings(p,a,b,c)\n#else\n/*** IUnknown methods ***/\n#define IDirectPlay8LobbiedApplication_QueryInterface(p,a,b)                (p)->QueryInterface(a,b)\n#define IDirectPlay8LobbiedApplication_AddRef(p)                            (p)->AddRef()\n#define IDirectPlay8LobbiedApplication_Release(p)                           (p)->Release()\n/*** IDirectPlay8LobbiedApplication methods ***/\n#define IDirectPlay8LobbiedApplication_Initialize(p,a,b,c,d)                (p)->Initialize(a,b,c,d)\n#define IDirectPlay8LobbiedApplication_RegisterProgram(p,a,b)               (p)->RegisterProgram(a,b)\n#define IDirectPlay8LobbiedApplication_UnRegisterProgram(p,a,b)             (p)->UnRegisterProgram(a,b)\n#define IDirectPlay8LobbiedApplication_Send(p,a,b,c,d)                      (p)->Send(a,b,c,d)\n#define IDirectPlay8LobbiedApplication_SetAppAvailable(p,a,b)               (p)->SetAppAvailable(a,b)\n#define IDirectPlay8LobbiedApplication_UpdateStatus(p,a,b,c)                (p)->UpdateStatus(a,b,c)\n#define IDirectPlay8LobbiedApplication_Close(p,a)                           (p)->Close(a)\n#define IDirectPlay8LobbiedApplication_GetConnectionSettings(p,a,b,c,d)     (p)->GetConnectionSettings(a,b,c,d)\n#define IDirectPlay8LobbiedApplication_SetConnectionSettings(p,a,b,c)       (p)->SetConnectionSettings(a,b,c)\n#endif\n\n/*****************************************************************************\n * IDirectPlay8LobbyClient interface\n */\n#define INTERFACE IDirectPlay8LobbyClient\nDECLARE_INTERFACE_(IDirectPlay8LobbyClient,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectPlay8LobbyClient methods ***/\n    STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DWORD dwFlags) PURE;\n    STDMETHOD(EnumLocalPrograms)(THIS_ GUID* pGuidApplication, BYTE* pEnumData, DWORD* pdwEnumData, DWORD* pdwItems, DWORD dwFlags) PURE;\n    STDMETHOD(ConnectApplication)(THIS_ DPL_CONNECT_INFO* pdplConnectionInfo, PVOID pvConnectionContext, DPNHANDLE* hApplication, DWORD dwTimeOut, DWORD dwFlags) PURE;\n    STDMETHOD(Send)(THIS_ DPNHANDLE hConnection, BYTE* pBuffer, DWORD pBufferSize, DWORD dwFlags) PURE;\n    STDMETHOD(ReleaseApplication)(THIS_ DPNHANDLE hConnection, DWORD dwFlags) PURE;\n    STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(GetConnectionSettings)(THIS_ DPNHANDLE hConnection, DPL_CONNECTION_SETTINGS* pdplSessionInfo, DWORD* pdwInfoSize, DWORD dwFlags) PURE;\n    STDMETHOD(SetConnectionSettings)(THIS_ DPNHANDLE hConnection, const DPL_CONNECTION_SETTINGS* pdplSessionInfo, DWORD dwFlags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectPlay8LobbyClient_QueryInterface(p,a,b)                (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectPlay8LobbyClient_AddRef(p)                            (p)->lpVtbl->AddRef(p)\n#define IDirectPlay8LobbyClient_Release(p)                           (p)->lpVtbl->Release(p)\n/*** IDirectPlay8LobbyClient methods ***/\n#define IDirectPlay8LobbyClient_Initialize(p,a,b,c)                  (p)->lpVtbl->Initialize(p,a,b,c)\n#define IDirectPlay8LobbyClient_EnumLocalPrograms(p,a,b,c,d,e)       (p)->lpVtbl->EnumLocalPrograms(p,a,b,c,d,e)\n#define IDirectPlay8LobbyClient_ConnectApplication(p,a,b,c,d,e)      (p)->lpVtbl->ConnectApplication(p,a,b,c,d,e)\n#define IDirectPlay8LobbyClient_Send(p,a,b,c,d)                      (p)->lpVtbl->Send(p,a,b,c,d)\n#define IDirectPlay8LobbyClient_ReleaseApplication(p,a,b)            (p)->lpVtbl->ReleaseApplication(p,a,b)\n#define IDirectPlay8LobbyClient_Close(p,a)                           (p)->lpVtbl->Close(p,a)\n#define IDirectPlay8LobbyClient_GetConnectionSettings(p,a,b,c,d)     (p)->lpVtbl->GetConnectionSettings(p,a,b,c,d)\n#define IDirectPlay8LobbyClient_SetConnectionSettings(p,a,b,c)       (p)->lpVtbl->SetConnectionSettings(p,a,b,c)\n#else\n/*** IUnknown methods ***/\n#define IDirectPlay8LobbyClient_QueryInterface(p,a,b)                (p)->QueryInterface(a,b)\n#define IDirectPlay8LobbyClient_AddRef(p)                            (p)->AddRef()\n#define IDirectPlay8LobbyClient_Release(p)                           (p)->Release()\n/*** IDirectPlay8LobbyClient methods ***/\n#define IDirectPlay8LobbyClient_Initialize(p,a,b,c)                  (p)->Initialize(a,b,c)\n#define IDirectPlay8LobbyClient_EnumLocalPrograms(p,a,b,c,d,e)       (p)->EnumLocalPrograms(a,b,c,d,e)\n#define IDirectPlay8LobbyClient_ConnectApplication(p,a,b,c,d,e)      (p)->ConnectApplication(a,b,c,d,e)\n#define IDirectPlay8LobbyClient_Send(p,a,b,c,d)                      (p)->Send(a,b,c,d)\n#define IDirectPlay8LobbyClient_ReleaseApplication(p,a,b)            (p)->ReleaseApplication(a,b)\n#define IDirectPlay8LobbyClient_Close(p,a)                           (p)->Close(a)\n#define IDirectPlay8LobbyClient_GetConnectionSettings(p,a,b,c,d)     (p)->GetConnectionSettings(a,b,c,d)\n#define IDirectPlay8LobbyClient_SetConnectionSettings(p,a,b,c)       (p)->SetConnectionSettings(a,b,c)\n#endif\n\n\n/* Export functions */\n\nHRESULT WINAPI DirectPlay8LobbyCreate(const GUID* pcIID, LPVOID* ppvInterface, IUnknown* pUnknown);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif \n"
  },
  {
    "path": "wine/windows/dpnathlp.h",
    "content": "/*\n * Copyright (C) 2006 Maarten Lankhorst\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __DPNATHLP_H__\n#define __DPNATHLP_H__\n\n#include <ole2.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nHRESULT DirectPlayNATHelpCreate(LPCGUID pIID, LPVOID *ppvInterface);\n\nDEFINE_GUID(CLSID_DirectPlayNATHelpUPnP, 0xb9c2e9c4,0x68c1,0x4d42,0xa7,0xa1,0xe7,0x6a,0x26,0x98,0x2a,0xd6);\nDEFINE_GUID(CLSID_DirectPlayNATHelpPAST, 0x963ab779,0x16a1,0x477c,0xa3,0x6d,0xcb,0x5e,0x71,0x19,0x38,0xf7);\nDEFINE_GUID(IID_IDirectPlayNATHelp,      0x154940b6,0x2278,0x4a2f,0x91,0x01,0x9b,0xa9,0xf4,0x31,0xf6,0x03);\n\n#define DPNHGETCAPS_UPDATESERVERSTATUS  0x01\n\n#define DPNHREGISTERPORTS_TCP           0x01\n#define DPNHREGISTERPORTS_FIXEDPORTS    0x02\n#define DPNHREGISTERPORTS_SHAREDPORTS   0x04\n\n#define DPNHADDRESSTYPE_TCP             0x01\n#define DPNHADDRESSTYPE_FIXEDPORTS      0x02\n#define DPNHADDRESSTYPE_SHAREDPORTS     0x04\n#define DPNHADDRESSTYPE_LOCALFIREWALL   0x08\n#define DPNHADDRESSTYPE_GATEWAY         0x10\n#define DPNHADDRESSTYPE_GATEWAYISLOCAL  0x20\n\n#define DPNHCAPSFLAG_LOCALFIREWALLPRESENT       0x01\n#define DPNHCAPSFLAG_GATEWAYPRESENT             0x02\n#define DPNHCAPSFLAG_GATEWAYISLOCAL             0x04\n#define DPNHCAPSFLAG_PUBLICADDRESSAVAILABLE     0x08\n#define DPNHCAPSFLAG_NOTALLSUPPORTACTIVENOTIFY  0x10\n\n#define DPNHINITIALIZE_DISABLEGATEWAYSUPPORT        0x01\n#define DPNHINITIALIZE_DISABLELOCALFIREWALLSUPPORT  0x02\n\n#define DPNHQUERYADDRESS_TCP                        0x01\n#define DPNHQUERYADDRESS_CACHEFOUND                 0x02\n#define DPNHQUERYADDRESS_CACHENOTFOUND              0x04\n#define DPNHQUERYADDRESS_CHECKFORPRIVATEBUTUNMAPPED 0x08\n\n#define DPNHGETREGISTEREDADDRESSES_LOCALFIREWALLREMAPONLY 0x01\n\n#define _DPNH_FACILITY_CODE   0x015\n#define _DPNH_HRESULT_BASE    0xF000\n\n#define MAKE_DPNHSUCCESS(code) \\\n               MAKE_HRESULT(0, _DPNH_FACILITY_CODE, (code + _DPNH_HRESULT_BASE))\n#define MAKE_DPNHFAILURE(code) \\\n               MAKE_HRESULT(1, _DPNH_FACILITY_CODE, (code + _DPNH_HRESULT_BASE))\n\n#define DPNH_OK                         S_OK\n#define DPNHSUCCESS_ADDRESSESCHANGED    MAKE_DPNHSUCCESS(0x10)\n\n#define DPNHERR_ALREADYINITIALIZED      MAKE_DPNHFAILURE(0x10)\n#define DPNHERR_BUFFERTOOSMALL          MAKE_DPNHFAILURE(0x20)\n#define DPNHERR_GENERIC                 E_FAIL\n#define DPNHERR_INVALIDFLAGS            MAKE_DPNHFAILURE(0x30)\n#define DPNHERR_INVALIDOBJECT           MAKE_DPNHFAILURE(0x40)\n#define DPNHERR_INVALIDPARAM            E_INVALIDARG\n#define DPNHERR_INVALIDPOINTER          E_POINTER\n#define DPNHERR_NOMAPPING               MAKE_DPNHFAILURE(0x50)\n#define DPNHERR_NOMAPPINGBUTPRIVATE     MAKE_DPNHFAILURE(0x60)\n#define DPNHERR_NOTINITIALIZED          MAKE_DPNHFAILURE(0x70)\n#define DPNHERR_OUTOFMEMORY             E_OUTOFMEMORY\n#define DPNHERR_PORTALREADYREGISTERED   MAKE_DPNHFAILURE(0x80)\n#define DPNHERR_PORTUNAVAILABLE         MAKE_DPNHFAILURE(0x90)\n#define DPNHERR_REENTRANT               MAKE_DPNHFAILURE(0x95)\n#define DPNHERR_SERVERNOTAVAILABLE      MAKE_DPNHFAILURE(0xA0)\n#define DPNHERR_UPDATESERVERSTATUS      MAKE_DPNHFAILURE(0xC0)\n\t\ntypedef DWORD_PTR DPNHHANDLE;\ntypedef DWORD_PTR *PDPNHHANDLE;\n\ntypedef struct _DPNHCAPS\n{\n   DWORD dwSize;\n   DWORD dwFlags;\n   DWORD dwNumRegisteredPorts;\n   DWORD dwMinLeaseTimeRemaining;\n   DWORD dwRecommendedGetCapsInterval;\n} DPNHCAPS, *PDPNHCAPS;\n\n\n#define INTERFACE IDirectPlayNATHelp\nDECLARE_INTERFACE_(IDirectPlayNATHelp,IUnknown)\n{\n   /*** IUnknown methods ***/\n   STDMETHOD(QueryInterface) (THIS_\n                              REFIID riid,\n                              void** ppvObject) PURE;\n\n   STDMETHOD_(ULONG,AddRef)  (THIS) PURE;\n\n   STDMETHOD_(ULONG,Release) (THIS) PURE;\n\n   /*** IDirectPlayNATHelp functions ***/\n   STDMETHOD(Initialize)     (THIS_\n                              DWORD dwFlags) PURE;\n\n   STDMETHOD(Close)          (THIS_\n                              DWORD dwFlags) PURE;\n\n   STDMETHOD(GetCaps)        (THIS_\n                              PDPNHCAPS pCaps,\n                              DWORD dwFlags) PURE;\n\n   STDMETHOD(RegisterPorts)  (THIS_\n                              PSOCKADDR aLocalAddresses,\n                              DWORD dwAddressSize,\n                              DWORD dwAddresses,\n                              DWORD dwTime,\n                              PDPNHHANDLE phRegisteredPorts,\n                              DWORD dwFlags) PURE;\n\n   STDMETHOD(GetRegisteredAddresses) (THIS_\n                              PDPNHHANDLE hRegisteredPorts,\n                              PSOCKADDR paPublicAddresses,\n                              const DWORD *dwAddressSize,\n                              const DWORD *dwAddressFlags,\n                              const DWORD *dwRemaining,\n                              DWORD dwFlags) PURE;\n\n   STDMETHOD(DeregisterPorts)(THIS_\n                              DPNHHANDLE hRegPorts,\n                              DWORD dwFlags) PURE;\n\n   STDMETHOD(QueryAddress)   (THIS_\n                              PSOCKADDR pSource,\n                              PSOCKADDR pQuery,\n                              PSOCKADDR pResponse,\n                              INT iAddresses,\n                              DWORD dwFlags) PURE;\n\n   STDMETHOD(SetAlertEvent)  (THIS_\n                              HANDLE hEvent,\n                              DWORD dwFlags) PURE;\n\n   STDMETHOD(SetAlertIOCompletionPort)(THIS_\n                              HANDLE hIOCompletionPort,\n                              DWORD dwCompletion,\n                              DWORD dwMaxThreads,\n                              DWORD dwFlags) PURE;\n\n   STDMETHOD(ExtendRegisteredPortsLease)(THIS_\n                              DPNHHANDLE hRegisteredPorts,\n                              DWORD dwLeaseTime,\n                              DWORD dwFlags) PURE;\n};\n\n#undef INTERFACE\n\n#ifdef COBJMACROS\n#define IDirectPlayNATHelp_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectPlayNATHelp_AddRef(p)  (p)->lpVtbl->AddRef(p)\n#define IDirectPlayNATHelp_Release(p) (p)->lpVtbl->Release(p)\n#define IDirectPlayNATHelp_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)\n#define IDirectPlayNATHelp_Close(p,a) (p)->lpVtbl->Close(p,a)\n#define IDirectPlayNATHelp_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)\n#define IDirectPlayNATHelp_RegisterPorts(p,a,b,c,d,e,f) (p)->lpVtbl->RegisterPorts(p,a,b,c,d,e,f)\n#define IDirectPlayNATHelp_GetRegisteredAddresses(p,a,b,c,d,e,f) (p)->lpVtbl->GetRegisteredAddresses(p,a,b,c,d,e,f)\n#define IDirectPlayNATHelp_DeregisterPorts(p,a,b) (p)->lpVtbl->DeregisterPorts(p,a,b)\n#define IDirectPlayNATHelp_QueryAddress(p,a,b,c,d,e) (p)->lpVtbl->QueryAddress(p,a,b,c,d,e)\n#define IDirectPlayNATHelp_SetAlertEvent(p,a,b) (p)->lpVtbl->SetAlertEvent(p,a,b)\n#define IDirectPlayNATHelp_SetAlertIOCompletionPort(p,a,b,c,d) (p)->lpVtbl->SetAlertIOCompletionPort(p,a,b,c,d)\n#define IDirectPlayNATHelp_ExtendRegisteredPortsLease(p,a,b,c) (p)->lpVtbl->SetAlertIOCompletionPort(p,a,b,c)\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __DPNATHLP_H__ */\n"
  },
  {
    "path": "wine/windows/drmexternals.idl",
    "content": "/*\n * Copyright 2017 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"wmdrmsdk.idl\";\n"
  },
  {
    "path": "wine/windows/dsconf.h",
    "content": "/*\n * Copyright (C) 2003 Robert Reif\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DSCONF_H\n#define __WINE_DSCONF_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n/*****************************************************************************\n * Predeclare the interfaces\n */\nDEFINE_GUID(CLSID_DirectSoundPrivate,           0x11ab3ec0,0x25ec,0x11d1,0xa4,0xd8,0x00,0xc0,0x4f,0xc2,0x8a,0xca);\n\nDEFINE_GUID(DSPROPSETID_DirectSoundDevice,      0x84624f82,0x25ec,0x11d1,0xa4,0xd8,0x00,0xc0,0x4f,0xc2,0x8a,0xca);\n\ntypedef enum\n{\n        DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A = 1,\n        DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1       = 2,\n        DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1         = 3,\n        DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W = 4,\n        DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A       = 5,\n        DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W       = 6,\n        DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A         = 7,\n        DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W         = 8,\n} DSPROPERTY_DIRECTSOUNDDEVICE;\n\n#ifdef UNICODE\n#define DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING  DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W\n#define DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION        DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W\n#define DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE          DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W\n#else\n#define DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING  DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A\n#define DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION        DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A\n#define DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE          DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A\n#endif\n\ntypedef enum\n{\n        DIRECTSOUNDDEVICE_TYPE_EMULATED,\n        DIRECTSOUNDDEVICE_TYPE_VXD,\n        DIRECTSOUNDDEVICE_TYPE_WDM\n} DIRECTSOUNDDEVICE_TYPE;\n\ntypedef enum\n{\n        DIRECTSOUNDDEVICE_DATAFLOW_RENDER,\n        DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE\n} DIRECTSOUNDDEVICE_DATAFLOW;\n\ntypedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA\n{\n        LPSTR                           DeviceName;\n        DIRECTSOUNDDEVICE_DATAFLOW      DataFlow;\n        GUID                            DeviceId;\n} DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA;\n\ntypedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA\n{\n        LPWSTR                          DeviceName;\n        DIRECTSOUNDDEVICE_DATAFLOW      DataFlow;\n        GUID                            DeviceId;\n} DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA;\n\n#ifdef UNICODE\n#define DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_DATA     DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA\n#define PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_DATA    PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA\n#else\n#define DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_DATA     DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA\n#define PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_DATA    PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA\n#endif\n\ntypedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA\n{\n        GUID                            DeviceId;\n        CHAR                            DescriptionA[0x100];\n        WCHAR                           DescriptionW[0x100];\n        CHAR                            ModuleA[MAX_PATH];\n        WCHAR                           ModuleW[MAX_PATH];\n        DIRECTSOUNDDEVICE_TYPE          Type;\n        DIRECTSOUNDDEVICE_DATAFLOW      DataFlow;\n        ULONG                           WaveDeviceId;\n        ULONG                           Devnode;\n} DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA;\n\ntypedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA\n{\n        DIRECTSOUNDDEVICE_TYPE          Type;\n        DIRECTSOUNDDEVICE_DATAFLOW      DataFlow;\n        GUID                            DeviceId;\n        LPSTR                           Description;\n        LPSTR                           Module;\n        LPSTR                           Interface;\n        ULONG                           WaveDeviceId;\n} DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA;\n\ntypedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA\n{\n        DIRECTSOUNDDEVICE_TYPE          Type;\n        DIRECTSOUNDDEVICE_DATAFLOW      DataFlow;\n        GUID                            DeviceId;\n        LPWSTR                          Description;\n        LPWSTR                          Module;\n        LPWSTR                          Interface;\n        ULONG                           WaveDeviceId;\n} DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA;\n\n#ifdef UNICODE\n#define DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA   DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA\n#define PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA  PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA\n#else\n#define DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA   DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA\n#define PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA  PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA\n#endif\n\ntypedef BOOL (CALLBACK *LPFNDIRECTSOUNDDEVICEENUMERATECALLBACK1)(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA, LPVOID);\ntypedef BOOL (CALLBACK *LPFNDIRECTSOUNDDEVICEENUMERATECALLBACKA)(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA, LPVOID);\ntypedef BOOL (CALLBACK *LPFNDIRECTSOUNDDEVICEENUMERATECALLBACKW)(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA, LPVOID);\n\ntypedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1_DATA\n{\n        LPFNDIRECTSOUNDDEVICEENUMERATECALLBACK1 Callback;\n        LPVOID                                  Context;\n} DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1_DATA;\n\ntypedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA\n{\n        LPFNDIRECTSOUNDDEVICEENUMERATECALLBACKA Callback;\n        LPVOID                                  Context;\n} DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA;\n\ntypedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA\n{\n        LPFNDIRECTSOUNDDEVICEENUMERATECALLBACKW Callback;\n        LPVOID                                  Context;\n} DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA;\n\n#ifdef UNICODE\n#define DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_DATA     DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA\n#define PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_DATA    PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA\n#else\n#define DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_DATA     DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA\n#define PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_DATA    PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA\n#endif\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif /* __WINE_DSCONF_H */\n"
  },
  {
    "path": "wine/windows/dsgetdc.h",
    "content": "/*\n * Copyright (C) 2006 Robert Reif\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DSGETDC_H\n#define __WINE_DSGETDC_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define DS_FORCE_REDISCOVERY            0x00000001\n#define DS_DIRECTORY_SERVICE_REQUIRED   0x00000010\n#define DS_DIRECTORY_SERVICE_PREFERRED  0x00000020\n#define DS_GC_SERVER_REQUIRED           0x00000040\n#define DS_PDC_REQUIRED                 0x00000080\n#define DS_BACKGROUND_ONLY              0x00000100\n#define DS_IP_REQUIRED                  0x00000200\n#define DS_KDC_REQUIRED                 0x00000400\n#define DS_TIMESERV_REQUIRED            0x00000800\n#define DS_WRITABLE_REQUIRED            0x00001000\n#define DS_GOOD_TIMESERV_PREFERRED      0x00002000\n#define DS_AVOID_SELF                   0x00004000\n#define DS_ONLY_LDAP_NEEDED             0x00008000\n\n#define DS_IS_FLAT_NAME                 0x00010000\n#define DS_IS_DNS_NAME                  0x00020000\n\n#define DS_RETURN_DNS_NAME              0x40000000\n#define DS_RETURN_FLAT_NAME             0x80000000\n\n#define DSGETDC_VALID_FLAGS ( \\\n    DS_FORCE_REDISCOVERY | \\\n    DS_DIRECTORY_SERVICE_REQUIRED | \\\n    DS_DIRECTORY_SERVICE_PREFERRED | \\\n    DS_GC_SERVER_REQUIRED | \\\n    DS_PDC_REQUIRED | \\\n    DS_BACKGROUND_ONLY | \\\n    DS_IP_REQUIRED | \\\n    DS_KDC_REQUIRED | \\\n    DS_TIMESERV_REQUIRED | \\\n    DS_WRITABLE_REQUIRED | \\\n    DS_GOOD_TIMESERV_PREFERRED | \\\n    DS_AVOID_SELF | \\\n    DS_ONLY_LDAP_NEEDED | \\\n    DS_IS_FLAT_NAME | \\\n    DS_IS_DNS_NAME | \\\n    DS_RETURN_FLAT_NAME  | \\\n    DS_RETURN_DNS_NAME )\n\ntypedef struct _DOMAIN_CONTROLLER_INFOA {\n    LPSTR DomainControllerName;\n    LPSTR DomainControllerAddress;\n    ULONG DomainControllerAddressType;\n    GUID DomainGuid;\n    LPSTR DomainName;\n    LPSTR DnsForestName;\n    ULONG Flags;\n    LPSTR DcSiteName;\n    LPSTR ClientSiteName;\n} DOMAIN_CONTROLLER_INFOA, *PDOMAIN_CONTROLLER_INFOA;\n\ntypedef struct _DOMAIN_CONTROLLER_INFOW {\n    LPWSTR DomainControllerName;\n    LPWSTR DomainControllerAddress;\n    ULONG DomainControllerAddressType;\n    GUID DomainGuid;\n    LPWSTR DomainName;\n    LPWSTR DnsForestName;\n    ULONG Flags;\n    LPWSTR DcSiteName;\n    LPWSTR ClientSiteName;\n} DOMAIN_CONTROLLER_INFOW, *PDOMAIN_CONTROLLER_INFOW;\n\ntypedef struct _DS_DOMAIN_TRUSTSA {\n    LPSTR NetbiosDomainName;\n    LPSTR DnsDomainName;\n    ULONG Flags;\n    ULONG ParentIndex;\n    ULONG TrustType;\n    ULONG TrustAttributes;\n    PSID DomainSid;\n    GUID DomainGuid;\n} DS_DOMAIN_TRUSTSA, *PDS_DOMAIN_TRUSTSA;\n\ntypedef struct _DS_DOMAIN_TRUSTSW {\n    LPWSTR NetbiosDomainName;\n    LPWSTR DnsDomainName;\n    ULONG Flags;\n    ULONG ParentIndex;\n    ULONG TrustType;\n    ULONG TrustAttributes;\n    PSID DomainSid;\n    GUID DomainGuid;\n} DS_DOMAIN_TRUSTSW, *PDS_DOMAIN_TRUSTSW;\n\nDECL_WINELIB_TYPE_AW(DOMAIN_CONTROLLER_INFO)\n\nDWORD WINAPI DsGetDcNameA(LPCSTR,LPCSTR,GUID*,LPCSTR,ULONG,PDOMAIN_CONTROLLER_INFOA*);\nDWORD WINAPI DsGetDcNameW(LPCWSTR,LPCWSTR,GUID*,LPCWSTR,ULONG,PDOMAIN_CONTROLLER_INFOW*);\n#define     DsGetDcName WINELIB_NAME_AW(DsGetDcName)\n\nDWORD WINAPI DsGetSiteNameA(LPCSTR ComputerName, LPSTR *SiteName);\nDWORD WINAPI DsGetSiteNameW(LPCWSTR ComputerName, LPWSTR *SiteName);\n#define     DsGetSiteName WINELIB_NAME_AW(DsGetSiteName)\n\nDWORD WINAPI DsEnumerateDomainTrustsA(LPSTR, ULONG, PDS_DOMAIN_TRUSTSA*, PULONG);\nDWORD WINAPI DsEnumerateDomainTrustsW(LPWSTR, ULONG, PDS_DOMAIN_TRUSTSW*, PULONG);\n#define      DsEnumerateDomainTrusts WINELIB_NAME_AW(DsEnumerateDomainTrusts)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_DSGETDC_H */\n"
  },
  {
    "path": "wine/windows/dshow.h",
    "content": "/*\n * Copyright (C) 2002 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __DSHOW_INCLUDED__\n#define __DSHOW_INCLUDED__\n\n#define AM_NOVTABLE\n\n#include <windows.h>\n#ifndef __WINESRC__\n# include <windowsx.h>\n#endif\n#include <olectl.h>\n#include <ddraw.h>\n#include <mmsystem.h>\n#ifndef NO_DSHOW_STRSAFE\n#define NO_SHLWAPI_STRFCNS\n#include <strsafe.h>\n#endif\n\n#ifndef NUMELMS\n#define NUMELMS(array) (sizeof(array)/sizeof((array)[0]))\n#endif\n\n#include <strmif.h>\n#include <amvideo.h>\n#ifdef DSHOW_USE_AMAUDIO\n#include <amaudio.h>\n#endif\n#include <control.h>\n#include <evcode.h>\n#include <uuids.h>\n#include <errors.h>\n/* FIXME: #include <edevdefs.h> */\n#include <audevcod.h>\n/* FIXME: #include <dvdevcod.h> */\n\n#ifndef OATRUE\n#define OATRUE (-1)\n#endif\n#ifndef OAFALSE\n#define OAFALSE (0)\n#endif\n\n#endif /* __DSHOW_INCLUDED__ */\n"
  },
  {
    "path": "wine/windows/dsound.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __DSOUND_INCLUDED__\n#define __DSOUND_INCLUDED__\n\n#ifndef DIRECTSOUND_VERSION\n#define DIRECTSOUND_VERSION 0x0900\n#endif\n\n#define COM_NO_WINDOWS_H\n#include <objbase.h>\n#include <float.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n#ifndef DX_SHARED_DEFINES\n\ntypedef float D3DVALUE, *LPD3DVALUE;\n\n#ifndef D3DCOLOR_DEFINED\ntypedef DWORD D3DCOLOR, *LPD3DCOLOR;\n#define D3DCOLOR_DEFINED\n#endif\n\n#ifndef D3DVECTOR_DEFINED\ntypedef struct _D3DVECTOR {\n    float x;\n    float y;\n    float z;\n} D3DVECTOR;\n#define D3DVECTOR_DEFINED\n#endif\n\n#ifndef LPD3DVECTOR_DEFINED\ntypedef D3DVECTOR *LPD3DVECTOR;\n#define LPD3DVECTOR_DEFINED\n#endif\n\n#define DX_SHARED_DEFINES\n#endif /* DX_SHARED_DEFINES */\n\n/*****************************************************************************\n * Predeclare the interfaces\n */\nDEFINE_GUID(CLSID_DirectSound,\t\t0x47d4d946, 0x62e8, 0x11cf, 0x93, 0xbc, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00);\nDEFINE_GUID(CLSID_DirectSound8,\t\t0x3901cc3f, 0x84b5, 0x4fa4, 0xba, 0x35, 0xaa, 0x81, 0x72, 0xb8, 0xa0, 0x9b);\nDEFINE_GUID(CLSID_DirectSoundCapture,\t0xb0210780, 0x89cd, 0x11d0, 0xaf, 0x08, 0x00, 0xa0, 0xc9, 0x25, 0xcd, 0x16);\nDEFINE_GUID(CLSID_DirectSoundCapture8,\t0xe4bcac13, 0x7f99, 0x4908, 0x9a, 0x8e, 0x74, 0xe3, 0xbf, 0x24, 0xb6, 0xe1);\nDEFINE_GUID(CLSID_DirectSoundFullDuplex,0xfea4300c, 0x7959, 0x4147, 0xb2, 0x6a, 0x23, 0x77, 0xb9, 0xe7, 0xa9, 0x1d);\n\nDEFINE_GUID(IID_IDirectSound,\t\t0x279AFA83,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60);\ntypedef struct IDirectSound *LPDIRECTSOUND,**LPLPDIRECTSOUND;\n\nDEFINE_GUID(IID_IDirectSound8,\t\t0xC50A7E93,0xF395,0x4834,0x9E,0xF6,0x7F,0xA9,0x9D,0xE5,0x09,0x66);\ntypedef struct IDirectSound8 *LPDIRECTSOUND8,**LPLPDIRECTSOUND8;\n\nDEFINE_GUID(IID_IDirectSoundBuffer,\t0x279AFA85,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60);\ntypedef struct IDirectSoundBuffer *LPDIRECTSOUNDBUFFER,**LPLPDIRECTSOUNDBUFFER;\n\nDEFINE_GUID(IID_IDirectSoundBuffer8,\t0x6825A449,0x7524,0x4D82,0x92,0x0F,0x50,0xE3,0x6A,0xB3,0xAB,0x1E);\ntypedef struct IDirectSoundBuffer8 *LPDIRECTSOUNDBUFFER8,**LPLPDIRECTSOUNDBUFFER8;\n\nDEFINE_GUID(IID_IDirectSoundNotify,\t0xB0210783,0x89cd,0x11d0,0xAF,0x08,0x00,0xA0,0xC9,0x25,0xCD,0x16);\ntypedef struct IDirectSoundNotify *LPDIRECTSOUNDNOTIFY,**LPLPDIRECTSOUNDNOTIFY;\n#define\tIID_IDirectSoundNotify8\t\tIID_IDirectSoundNotify\n\nDEFINE_GUID(IID_IDirectSound3DListener,\t0x279AFA84,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60);\ntypedef struct IDirectSound3DListener *LPDIRECTSOUND3DLISTENER,**LPLPDIRECTSOUND3DLISTENER;\n\nDEFINE_GUID(IID_IDirectSound3DBuffer,\t0x279AFA86,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60);\ntypedef struct IDirectSound3DBuffer *LPDIRECTSOUND3DBUFFER,**LPLPDIRECTSOUND3DBUFFER;\n\nDEFINE_GUID(IID_IDirectSoundCapture,\t0xB0210781,0x89CD,0x11D0,0xAF,0x08,0x00,0xA0,0xC9,0x25,0xCD,0x16);\ntypedef struct IDirectSoundCapture *LPDIRECTSOUNDCAPTURE,**LPLPDIRECTSOUNDCAPTURE;\n#define\tIID_IDirectSoundCapture8\tIID_IDirectSoundCapture\ntypedef struct IDirectSoundCapture IDirectSoundCapture8,*LPDIRECTSOUNDCAPTURE8,**LPLPDIRECTSOUNDCAPTURE8;\n\nDEFINE_GUID(IID_IDirectSoundCaptureBuffer,0xB0210782,0x89CD,0x11D0,0xAF,0x08,0x00,0xA0,0xC9,0x25,0xCD,0x16);\ntypedef struct IDirectSoundCaptureBuffer *LPDIRECTSOUNDCAPTUREBUFFER,**LPLPDIRECTSOUNDCAPTUREBUFFER;\n\nDEFINE_GUID(IID_IDirectSoundCaptureBuffer8,0x00990DF4,0x0DBB,0x4872,0x83,0x3E,0x6D,0x30,0x3E,0x80,0xAE,0xB6);\ntypedef struct IDirectSoundCaptureBuffer8 *LPDIRECTSOUNDCAPTUREBUFFER8,**LPLPDIRECTSOUNDCAPTUREBUFFER8;\n\nDEFINE_GUID(IID_IDirectSoundFullDuplex,\t0xEDCB4C7A,0xDAAB,0x4216,0xA4,0x2E,0x6C,0x50,0x59,0x6D,0xDC,0x1D);\ntypedef struct IDirectSoundFullDuplex *LPDIRECTSOUNDFULLDUPLEX,**LPLPDIRECTSOUNDFULLDUPLEX;\n#define\tIID_IDirectSoundFullDuplex8\tIID_IDirectSoundFullDuplex\n\nDEFINE_GUID(IID_IDirectSoundFXI3DL2Reverb, 0x4b166a6a, 0x0d66, 0x43f3, 0x80, 0xe3, 0xee, 0x62, 0x80, 0xde, 0xe1, 0xa4);\ntypedef struct IDirectSoundFXI3DL2Reverb  *LPDIRECTSOUNDFXI3DL2REVERB;\n#define IDirectSoundFXI3DL2Reverb8        IDirectSoundFXI3DL2Reverb\n#define IID_IDirectSoundFXI3DL2Reverb8    IID_IDirectSoundFXI3DL2Reverb\ntypedef struct IDirectSoundFXI3DL2Reverb8 *LPDIRECTSOUNDFXI3DL2REVERB8;\n\nDEFINE_GUID(DSDEVID_DefaultPlayback,     0xDEF00000,0x9C6D,0x47Ed,0xAA,0xF1,0x4D,0xDA,0x8F,0x2B,0x5C,0x03);\nDEFINE_GUID(DSDEVID_DefaultCapture,      0xDEF00001,0x9C6D,0x47Ed,0xAA,0xF1,0x4D,0xDA,0x8F,0x2B,0x5C,0x03);\nDEFINE_GUID(DSDEVID_DefaultVoicePlayback,0xDEF00002,0x9C6D,0x47Ed,0xAA,0xF1,0x4D,0xDA,0x8F,0x2B,0x5C,0x03);\nDEFINE_GUID(DSDEVID_DefaultVoiceCapture, 0xDEF00003,0x9C6D,0x47ED,0xAA,0xF1,0x4D,0xDA,0x8F,0x2B,0x5C,0x03);\n\nDEFINE_GUID(DSDEVID_WinePlayback,        0x40316A1D,0x605B,0xD611,0x87,0xC6,0x00,0x80,0xAD,0x00,0x02,0xFE);\n\nDEFINE_GUID(GUID_DSFX_STANDARD_GARGLE,      0xDAFD8210,0x5711,0x4B91,0x9F,0xE3,0xF7,0x5B,0x7A,0xE2,0x79,0xBF);\nDEFINE_GUID(GUID_DSFX_STANDARD_CHORUS,      0xEFE6629C,0x81F7,0x4281,0xBD,0x91,0xC9,0xD6,0x04,0xA9,0x5A,0xF6);\nDEFINE_GUID(GUID_DSFX_STANDARD_FLANGER,     0xEFCA3D92,0xDFD8,0x4672,0xA6,0x03,0x74,0x20,0x89,0x4B,0xAD,0x98);\nDEFINE_GUID(GUID_DSFX_STANDARD_ECHO,        0xEF3E932C,0xD40B,0x4F51,0x8C,0xCF,0x3F,0x98,0xF1,0xB2,0x9D,0x5D);\nDEFINE_GUID(GUID_DSFX_STANDARD_DISTORTION,  0xEF114C90,0xCD1D,0x484E,0x96,0xE5,0x09,0xCF,0xAF,0x91,0x2A,0x21);\nDEFINE_GUID(GUID_DSFX_STANDARD_COMPRESSOR,  0xEF011F79,0x4000,0x406D,0x87,0xAF,0xBF,0xFB,0x3F,0xC3,0x9D,0x57);\nDEFINE_GUID(GUID_DSFX_STANDARD_PARAMEQ,     0x120CED89,0x3BF4,0x4173,0xA1,0x32,0x3C,0xB4,0x06,0xCF,0x32,0x31);\nDEFINE_GUID(GUID_DSFX_STANDARD_I3DL2REVERB, 0xEF985E71,0xD5C7,0x42D4,0xBA,0x4D,0x2D,0x07,0x3E,0x2E,0x96,0xF4);\nDEFINE_GUID(GUID_DSFX_WAVES_REVERB,         0x87FC0268,0x9A55,0x4360,0x95,0xAA,0x00,0x4A,0x1D,0x9D,0xE2,0x6C);\nDEFINE_GUID(GUID_DSCFX_CLASS_AEC,           0xBF963D80,0xC559,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1);\nDEFINE_GUID(GUID_DSCFX_MS_AEC,              0xCDEBB919,0x379A,0x488A,0x87,0x65,0xF5,0x3C,0xFD,0x36,0xDE,0x40);\nDEFINE_GUID(GUID_DSCFX_SYSTEM_AEC,          0x1C22C56D,0x9879,0x4F5B,0xA3,0x89,0x27,0x99,0x6D,0xDC,0x28,0x10);\nDEFINE_GUID(GUID_DSCFX_CLASS_NS,            0xE07F903F,0x62FD,0x4E60,0x8C,0xDD,0xDE,0xA7,0x23,0x66,0x65,0xB5);\nDEFINE_GUID(GUID_DSCFX_MS_NS,               0x11C5C73B,0x66E9,0x4BA1,0xA0,0xBA,0xE8,0x14,0xC6,0xEE,0xD9,0x2D);\nDEFINE_GUID(GUID_DSCFX_SYSTEM_NS,           0x5AB0882E,0x7274,0x4516,0x87,0x7D,0x4E,0xEE,0x99,0xBA,0x4F,0xD0);\n\n#define\t_FACDS\t\t0x878\n#define\tMAKE_DSHRESULT(code)\t\tMAKE_HRESULT(1,_FACDS,code)\n\n#define DS_OK\t\t\t\t0\n#define DS_NO_VIRTUALIZATION            MAKE_HRESULT(0, _FACDS, 10)\n#define DS_INCOMPLETE                   MAKE_HRESULT(0, _FACDS, 20)\n#define DSERR_ALLOCATED\t\t\tMAKE_DSHRESULT(10)\n#define DSERR_CONTROLUNAVAIL\t\tMAKE_DSHRESULT(30)\n#define DSERR_INVALIDPARAM\t\tE_INVALIDARG\n#define DSERR_INVALIDCALL\t\tMAKE_DSHRESULT(50)\n#define DSERR_GENERIC\t\t\tE_FAIL\n#define DSERR_PRIOLEVELNEEDED\t\tMAKE_DSHRESULT(70)\n#define DSERR_OUTOFMEMORY\t\tE_OUTOFMEMORY\n#define DSERR_BADFORMAT\t\t\tMAKE_DSHRESULT(100)\n#define DSERR_UNSUPPORTED\t\tE_NOTIMPL\n#define DSERR_NODRIVER\t\t\tMAKE_DSHRESULT(120)\n#define DSERR_ALREADYINITIALIZED\tMAKE_DSHRESULT(130)\n#define DSERR_NOAGGREGATION\t\tCLASS_E_NOAGGREGATION\n#define DSERR_BUFFERLOST\t\tMAKE_DSHRESULT(150)\n#define DSERR_OTHERAPPHASPRIO\t\tMAKE_DSHRESULT(160)\n#define DSERR_UNINITIALIZED\t\tMAKE_DSHRESULT(170)\n#define DSERR_NOINTERFACE               E_NOINTERFACE\n#define DSERR_ACCESSDENIED              E_ACCESSDENIED\n#define DSERR_BUFFERTOOSMALL            MAKE_DSHRESULT(180)\n#define DSERR_DS8_REQUIRED              MAKE_DSHRESULT(190)\n#define DSERR_SENDLOOP                  MAKE_DSHRESULT(200)\n#define DSERR_BADSENDBUFFERGUID         MAKE_DSHRESULT(210)\n#define DSERR_FXUNAVAILABLE             MAKE_DSHRESULT(220)\n#define DSERR_OBJECTNOTFOUND            MAKE_DSHRESULT(4449)\n\n#define DSCAPS_PRIMARYMONO          0x00000001\n#define DSCAPS_PRIMARYSTEREO        0x00000002\n#define DSCAPS_PRIMARY8BIT          0x00000004\n#define DSCAPS_PRIMARY16BIT         0x00000008\n#define DSCAPS_CONTINUOUSRATE       0x00000010\n#define DSCAPS_EMULDRIVER           0x00000020\n#define DSCAPS_CERTIFIED            0x00000040\n#define DSCAPS_SECONDARYMONO        0x00000100\n#define DSCAPS_SECONDARYSTEREO      0x00000200\n#define DSCAPS_SECONDARY8BIT        0x00000400\n#define DSCAPS_SECONDARY16BIT       0x00000800\n\n#define\tDSSCL_NORMAL\t\t1\n#define\tDSSCL_PRIORITY\t\t2\n#define\tDSSCL_EXCLUSIVE\t\t3\n#define\tDSSCL_WRITEPRIMARY\t4\n\ntypedef struct _DSCAPS\n{\n    DWORD\tdwSize;\n    DWORD\tdwFlags;\n    DWORD\tdwMinSecondarySampleRate;\n    DWORD\tdwMaxSecondarySampleRate;\n    DWORD\tdwPrimaryBuffers;\n    DWORD\tdwMaxHwMixingAllBuffers;\n    DWORD\tdwMaxHwMixingStaticBuffers;\n    DWORD\tdwMaxHwMixingStreamingBuffers;\n    DWORD\tdwFreeHwMixingAllBuffers;\n    DWORD\tdwFreeHwMixingStaticBuffers;\n    DWORD\tdwFreeHwMixingStreamingBuffers;\n    DWORD\tdwMaxHw3DAllBuffers;\n    DWORD\tdwMaxHw3DStaticBuffers;\n    DWORD\tdwMaxHw3DStreamingBuffers;\n    DWORD\tdwFreeHw3DAllBuffers;\n    DWORD\tdwFreeHw3DStaticBuffers;\n    DWORD\tdwFreeHw3DStreamingBuffers;\n    DWORD\tdwTotalHwMemBytes;\n    DWORD\tdwFreeHwMemBytes;\n    DWORD\tdwMaxContigFreeHwMemBytes;\n    DWORD\tdwUnlockTransferRateHwBuffers;\n    DWORD\tdwPlayCpuOverheadSwBuffers;\n    DWORD\tdwReserved1;\n    DWORD\tdwReserved2;\n} DSCAPS,*LPDSCAPS;\ntypedef const DSCAPS *LPCDSCAPS;\n\n#define DSBPLAY_LOOPING             0x00000001\n#define DSBPLAY_LOCHARDWARE         0x00000002\n#define DSBPLAY_LOCSOFTWARE         0x00000004\n#define DSBPLAY_TERMINATEBY_TIME    0x00000008\n#define DSBPLAY_TERMINATEBY_DISTANCE    0x000000010\n#define DSBPLAY_TERMINATEBY_PRIORITY    0x000000020\n\n#define DSBSTATUS_PLAYING           0x00000001\n#define DSBSTATUS_BUFFERLOST        0x00000002\n#define DSBSTATUS_LOOPING           0x00000004\n#define DSBSTATUS_LOCHARDWARE       0x00000008\n#define DSBSTATUS_LOCSOFTWARE       0x00000010\n#define DSBSTATUS_TERMINATED        0x00000020\n\n#define DSBLOCK_FROMWRITECURSOR     0x00000001\n#define DSBLOCK_ENTIREBUFFER        0x00000002\n\n#define DSBCAPS_PRIMARYBUFFER       0x00000001\n#define DSBCAPS_STATIC              0x00000002\n#define DSBCAPS_LOCHARDWARE         0x00000004\n#define DSBCAPS_LOCSOFTWARE         0x00000008\n#define DSBCAPS_CTRL3D              0x00000010\n#define DSBCAPS_CTRLFREQUENCY       0x00000020\n#define DSBCAPS_CTRLPAN             0x00000040\n#define DSBCAPS_CTRLVOLUME          0x00000080\n#define DSBCAPS_CTRLDEFAULT         0x000000E0  /* Pan + volume + frequency. */\n#define DSBCAPS_CTRLPOSITIONNOTIFY  0x00000100\n#define DSBCAPS_CTRLFX              0x00000200\n#define DSBCAPS_CTRLALL             0x000001F0  /* All control capabilities */\n#define DSBCAPS_STICKYFOCUS         0x00004000\n#define DSBCAPS_GLOBALFOCUS         0x00008000\n#define DSBCAPS_GETCURRENTPOSITION2 0x00010000  /* More accurate play cursor under emulation*/\n#define DSBCAPS_MUTE3DATMAXDISTANCE 0x00020000\n#define DSBCAPS_LOCDEFER            0x00040000\n\n#define DSBSIZE_MIN                 4\n#define DSBSIZE_MAX                 0xFFFFFFF\n#define DSBPAN_LEFT                 -10000\n#define DSBPAN_CENTER               0\n#define DSBPAN_RIGHT                 10000\n#define DSBVOLUME_MAX                    0\n#define DSBVOLUME_MIN               -10000\n#define DSBFREQUENCY_MIN            100\n#define DSBFREQUENCY_MAX            200000\n#define DSBFREQUENCY_ORIGINAL       0\n\n#define DSBNOTIFICATIONS_MAX        100000U\n\ntypedef struct _DSBCAPS\n{\n    DWORD\tdwSize;\n    DWORD\tdwFlags;\n    DWORD\tdwBufferBytes;\n    DWORD\tdwUnlockTransferRate;\n    DWORD\tdwPlayCpuOverhead;\n} DSBCAPS,*LPDSBCAPS;\ntypedef const DSBCAPS *LPCDSBCAPS;\n\n#define DSSCL_NORMAL                1\n#define DSSCL_PRIORITY              2\n#define DSSCL_EXCLUSIVE             3\n#define DSSCL_WRITEPRIMARY          4\n\ntypedef struct _DSEFFECTDESC\n{\n    DWORD\tdwSize;\n    DWORD\tdwFlags;\n    GUID\tguidDSFXClass;\n    DWORD_PTR\tdwReserved1;\n    DWORD_PTR\tdwReserved2;\n} DSEFFECTDESC,*LPDSEFFECTDESC;\ntypedef const DSEFFECTDESC *LPCDSEFFECTDESC;\n\n#define DSFX_LOCHARDWARE    0x00000001\n#define DSFX_LOCSOFTWARE    0x00000002\n\nenum\n{\n    DSFXR_PRESENT,\n    DSFXR_LOCHARDWARE,\n    DSFXR_LOCSOFTWARE,\n    DSFXR_UNALLOCATED,\n    DSFXR_FAILED,\n    DSFXR_UNKNOWN,\n    DSFXR_SENDLOOP\n};\n\ntypedef struct _DSBUFFERDESC1\n{\n    DWORD\t\tdwSize;\n    DWORD\t\tdwFlags;\n    DWORD\t\tdwBufferBytes;\n    DWORD\t\tdwReserved;\n    LPWAVEFORMATEX\tlpwfxFormat;\n} DSBUFFERDESC1,*LPDSBUFFERDESC1;\ntypedef const DSBUFFERDESC1 *LPCDSBUFFERDESC1;\n\ntypedef struct _DSBUFFERDESC\n{\n    DWORD\t\tdwSize;\n    DWORD\t\tdwFlags;\n    DWORD\t\tdwBufferBytes;\n    DWORD\t\tdwReserved;\n    LPWAVEFORMATEX\tlpwfxFormat;\n    GUID\t\tguid3DAlgorithm;\n} DSBUFFERDESC,*LPDSBUFFERDESC;\ntypedef const DSBUFFERDESC *LPCDSBUFFERDESC;\n\ntypedef struct _DSBPOSITIONNOTIFY\n{\n    DWORD\tdwOffset;\n    HANDLE\thEventNotify;\n} DSBPOSITIONNOTIFY,*LPDSBPOSITIONNOTIFY;\ntypedef const DSBPOSITIONNOTIFY *LPCDSBPOSITIONNOTIFY;\n\n#define DSSPEAKER_DIRECTOUT     0\n#define DSSPEAKER_HEADPHONE     1\n#define DSSPEAKER_MONO          2\n#define DSSPEAKER_QUAD          3\n#define DSSPEAKER_STEREO        4\n#define DSSPEAKER_SURROUND      5\n#define DSSPEAKER_5POINT1       6\n#define DSSPEAKER_5POINT1_BACK  6\n#define DSSPEAKER_7POINT1       7\n#define DSSPEAKER_7POINT1_WIDE  7\n#define DSSPEAKER_7POINT1_SURROUND  8\n#define DSSPEAKER_5POINT1_SURROUND  9\n\n#define DSSPEAKER_GEOMETRY_MIN      0x00000005  /* 5 degrees */\n#define DSSPEAKER_GEOMETRY_NARROW   0x0000000A  /* 10 degrees */\n#define DSSPEAKER_GEOMETRY_WIDE     0x00000014  /* 20 degrees */\n#define DSSPEAKER_GEOMETRY_MAX      0x000000B4  /* 180 degrees */\n\n#define DSSPEAKER_COMBINED(c, g)    ((DWORD)(((BYTE)(c)) | ((DWORD)((BYTE)(g))) << 16))\n#define DSSPEAKER_CONFIG(a)         ((BYTE)(a))\n#define DSSPEAKER_GEOMETRY(a)       ((BYTE)(((DWORD)(a) >> 16) & 0x00FF))\n\n#define DS_CERTIFIED                0x00000000\n#define DS_UNCERTIFIED              0x00000001\n\ntypedef struct _DSCEFFECTDESC\n{\n    DWORD       dwSize;\n    DWORD       dwFlags;\n    GUID        guidDSCFXClass;\n    GUID        guidDSCFXInstance;\n    DWORD       dwReserved1;\n    DWORD       dwReserved2;\n} DSCEFFECTDESC, *LPDSCEFFECTDESC;\ntypedef const DSCEFFECTDESC *LPCDSCEFFECTDESC;\n\n#define DSCFX_LOCHARDWARE   0x00000001\n#define DSCFX_LOCSOFTWARE   0x00000002\n\n#define DSCFXR_LOCHARDWARE  0x00000010\n#define DSCFXR_LOCSOFTWARE  0x00000020\n\ntypedef struct _DSCBUFFERDESC1\n{\n  DWORD           dwSize;\n  DWORD           dwFlags;\n  DWORD           dwBufferBytes;\n  DWORD           dwReserved;\n  LPWAVEFORMATEX  lpwfxFormat;\n} DSCBUFFERDESC1, *LPDSCBUFFERDESC1;\n\ntypedef struct _DSCBUFFERDESC\n{\n  DWORD           dwSize;\n  DWORD           dwFlags;\n  DWORD           dwBufferBytes;\n  DWORD           dwReserved;\n  LPWAVEFORMATEX  lpwfxFormat;\n  DWORD           dwFXCount;\n  LPDSCEFFECTDESC lpDSCFXDesc;\n} DSCBUFFERDESC, *LPDSCBUFFERDESC;\ntypedef const DSCBUFFERDESC *LPCDSCBUFFERDESC;\n\ntypedef struct _DSCCAPS\n{\n  DWORD dwSize;\n  DWORD dwFlags;\n  DWORD dwFormats;\n  DWORD dwChannels;\n} DSCCAPS, *LPDSCCAPS;\ntypedef const DSCCAPS *LPCDSCCAPS;\n\ntypedef struct _DSCBCAPS\n{\n  DWORD dwSize;\n  DWORD dwFlags;\n  DWORD dwBufferBytes;\n  DWORD dwReserved;\n} DSCBCAPS, *LPDSCBCAPS;\ntypedef const DSCBCAPS *LPCDSCBCAPS;\n\ntypedef struct _DSFXI3DL2Reverb\n{\n  LONG  lRoom;\n  LONG  lRoomHF;\n  FLOAT flRoomRolloffFactor;\n  FLOAT flDecayTime;\n  FLOAT flDecayHFRatio;\n  LONG  lReflections;\n  FLOAT flReflectionsDelay;\n  LONG  lReverb;\n  FLOAT flReverbDelay;\n  FLOAT flDiffusion;\n  FLOAT flDensity;\n  FLOAT flHFReference;\n} DSFXI3DL2Reverb, *LPDSFXI3DL2Reverb;\n\ntypedef const DSFXI3DL2Reverb *LPCDSFXI3DL2Reverb;\n\n#define DSCCAPS_EMULDRIVER          DSCAPS_EMULDRIVER\n#define DSCCAPS_CERTIFIED           DSCAPS_CERTIFIED\n#define DSCCAPS_MULTIPLECAPTURE     0x00000001\n\n#define DSCBCAPS_WAVEMAPPED         0x80000000\n#define DSCBCAPS_CTRLFX             0x00000200\n\n#define DSCBLOCK_ENTIREBUFFER       0x00000001\n#define DSCBSTART_LOOPING           0x00000001\n#define DSCBPN_OFFSET_STOP          0xffffffff\n\n#define DSCBSTATUS_CAPTURING        0x00000001\n#define DSCBSTATUS_LOOPING          0x00000002\n\n#ifndef __LPCGUID_DEFINED__\n#define __LPCGUID_DEFINED__\ntypedef const GUID *LPCGUID;\n#endif\n\ntypedef BOOL (CALLBACK *LPDSENUMCALLBACKW)(LPGUID,LPCWSTR,LPCWSTR,LPVOID);\ntypedef BOOL (CALLBACK *LPDSENUMCALLBACKA)(LPGUID,LPCSTR,LPCSTR,LPVOID);\nDECL_WINELIB_TYPE_AW(LPDSENUMCALLBACK)\n\nextern HRESULT WINAPI DirectSoundCreate(LPCGUID lpGUID,LPDIRECTSOUND *ppDS,LPUNKNOWN pUnkOuter);\nextern HRESULT WINAPI DirectSoundEnumerateA(LPDSENUMCALLBACKA, LPVOID);\nextern HRESULT WINAPI DirectSoundEnumerateW(LPDSENUMCALLBACKW, LPVOID);\n#define DirectSoundEnumerate WINELIB_NAME_AW(DirectSoundEnumerate)\nextern HRESULT WINAPI DirectSoundCaptureCreate(LPCGUID lpGUID, LPDIRECTSOUNDCAPTURE *ppDSC, LPUNKNOWN pUnkOuter);\nextern HRESULT WINAPI DirectSoundCaptureEnumerateA(LPDSENUMCALLBACKA, LPVOID);\nextern HRESULT WINAPI DirectSoundCaptureEnumerateW(LPDSENUMCALLBACKW, LPVOID);\n#define DirectSoundCaptureEnumerate WINELIB_NAME_AW(DirectSoundCaptureEnumerate)\n\nextern HRESULT WINAPI DirectSoundCreate8(LPCGUID lpGUID,LPDIRECTSOUND8 *ppDS8,LPUNKNOWN pUnkOuter);\nextern HRESULT WINAPI DirectSoundCaptureCreate8(LPCGUID lpGUID, LPDIRECTSOUNDCAPTURE8 *ppDSC8, LPUNKNOWN pUnkOuter);\nextern HRESULT WINAPI DirectSoundFullDuplexCreate(LPCGUID pcGuidCaptureDevice, LPCGUID pcGuidRenderDevice,\n    LPCDSCBUFFERDESC pcDSCBufferDesc, LPCDSBUFFERDESC pcDSBufferDesc, HWND hWnd, DWORD dwLevel,\n    LPDIRECTSOUNDFULLDUPLEX *ppDSFD, LPDIRECTSOUNDCAPTUREBUFFER8 *ppDSCBuffer8, LPDIRECTSOUNDBUFFER8 *ppDSBuffer8, LPUNKNOWN pUnkOuter);\n#define DirectSoundFullDuplexCreate8 DirectSoundFullDuplexCreate\nextern HRESULT WINAPI GetDeviceID(LPCGUID lpGuidSrc, LPGUID lpGuidDest);\n\n\n/*****************************************************************************\n * IDirectSound interface\n */\n#define INTERFACE IDirectSound\nDECLARE_INTERFACE_(IDirectSound,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectSound methods ***/\n    STDMETHOD(CreateSoundBuffer)(THIS_ LPCDSBUFFERDESC lpcDSBufferDesc, LPLPDIRECTSOUNDBUFFER lplpDirectSoundBuffer, IUnknown *pUnkOuter) PURE;\n    STDMETHOD(GetCaps)(THIS_ LPDSCAPS lpDSCaps) PURE;\n    STDMETHOD(DuplicateSoundBuffer)(THIS_ LPDIRECTSOUNDBUFFER lpDsbOriginal, LPLPDIRECTSOUNDBUFFER lplpDsbDuplicate) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwLevel) PURE;\n    STDMETHOD(Compact)(THIS) PURE;\n    STDMETHOD(GetSpeakerConfig)(THIS_ LPDWORD lpdwSpeakerConfig) PURE;\n    STDMETHOD(SetSpeakerConfig)(THIS_ DWORD dwSpeakerConfig) PURE;\n    STDMETHOD(Initialize)(THIS_ LPCGUID lpcGuid) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectSound_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectSound_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectSound_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectSound methods ***/\n#define IDirectSound_CreateSoundBuffer(p,a,b,c)  (p)->lpVtbl->CreateSoundBuffer(p,a,b,c)\n#define IDirectSound_GetCaps(p,a)                (p)->lpVtbl->GetCaps(p,a)\n#define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->lpVtbl->DuplicateSoundBuffer(p,a,b)\n#define IDirectSound_SetCooperativeLevel(p,a,b)  (p)->lpVtbl->SetCooperativeLevel(p,a,b)\n#define IDirectSound_Compact(p)                  (p)->lpVtbl->Compact(p)\n#define IDirectSound_GetSpeakerConfig(p,a)       (p)->lpVtbl->GetSpeakerConfig(p,a)\n#define IDirectSound_SetSpeakerConfig(p,a)       (p)->lpVtbl->SetSpeakerConfig(p,a)\n#define IDirectSound_Initialize(p,a)             (p)->lpVtbl->Initialize(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirectSound_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectSound_AddRef(p)             (p)->AddRef()\n#define IDirectSound_Release(p)            (p)->Release()\n/*** IDirectSound methods ***/\n#define IDirectSound_CreateSoundBuffer(p,a,b,c)  (p)->CreateSoundBuffer(a,b,c)\n#define IDirectSound_GetCaps(p,a)                (p)->GetCaps(a)\n#define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->DuplicateSoundBuffer(a,b)\n#define IDirectSound_SetCooperativeLevel(p,a,b)  (p)->SetCooperativeLevel(a,b)\n#define IDirectSound_Compact(p)                  (p)->Compact()\n#define IDirectSound_GetSpeakerConfig(p,a)       (p)->GetSpeakerConfig(a)\n#define IDirectSound_SetSpeakerConfig(p,a)       (p)->SetSpeakerConfig(a)\n#define IDirectSound_Initialize(p,a)             (p)->Initialize(a)\n#endif\n\n\n/*****************************************************************************\n * IDirectSound8 interface\n */\n#define INTERFACE IDirectSound8\nDECLARE_INTERFACE_(IDirectSound8,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectSound8 methods ***/\n    STDMETHOD(CreateSoundBuffer)(THIS_ LPCDSBUFFERDESC lpcDSBufferDesc, LPLPDIRECTSOUNDBUFFER lplpDirectSoundBuffer, IUnknown *pUnkOuter) PURE;\n    STDMETHOD(GetCaps)(THIS_ LPDSCAPS lpDSCaps) PURE;\n    STDMETHOD(DuplicateSoundBuffer)(THIS_ LPDIRECTSOUNDBUFFER lpDsbOriginal, LPLPDIRECTSOUNDBUFFER lplpDsbDuplicate) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwLevel) PURE;\n    STDMETHOD(Compact)(THIS) PURE;\n    STDMETHOD(GetSpeakerConfig)(THIS_ LPDWORD lpdwSpeakerConfig) PURE;\n    STDMETHOD(SetSpeakerConfig)(THIS_ DWORD dwSpeakerConfig) PURE;\n    STDMETHOD(Initialize)(THIS_ LPCGUID lpcGuid) PURE;\n    STDMETHOD(VerifyCertification)(THIS_ LPDWORD pdwCertified) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectSound8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectSound8_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectSound8_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectSound methods ***/\n#define IDirectSound8_CreateSoundBuffer(p,a,b,c)  (p)->lpVtbl->CreateSoundBuffer(p,a,b,c)\n#define IDirectSound8_GetCaps(p,a)                (p)->lpVtbl->GetCaps(p,a)\n#define IDirectSound8_DuplicateSoundBuffer(p,a,b) (p)->lpVtbl->DuplicateSoundBuffer(p,a,b)\n#define IDirectSound8_SetCooperativeLevel(p,a,b)  (p)->lpVtbl->SetCooperativeLevel(p,a,b)\n#define IDirectSound8_Compact(p)                  (p)->lpVtbl->Compact(p)\n#define IDirectSound8_GetSpeakerConfig(p,a)       (p)->lpVtbl->GetSpeakerConfig(p,a)\n#define IDirectSound8_SetSpeakerConfig(p,a)       (p)->lpVtbl->SetSpeakerConfig(p,a)\n#define IDirectSound8_Initialize(p,a)             (p)->lpVtbl->Initialize(p,a)\n/*** IDirectSound8 methods ***/\n#define IDirectSound8_VerifyCertification(p,a)    (p)->lpVtbl->VerifyCertification(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirectSound8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectSound8_AddRef(p)             (p)->AddRef()\n#define IDirectSound8_Release(p)            (p)->Release()\n/*** IDirectSound methods ***/\n#define IDirectSound8_CreateSoundBuffer(p,a,b,c)  (p)->CreateSoundBuffer(a,b,c)\n#define IDirectSound8_GetCaps(p,a)                (p)->GetCaps(a)\n#define IDirectSound8_DuplicateSoundBuffer(p,a,b) (p)->DuplicateSoundBuffer(a,b)\n#define IDirectSound8_SetCooperativeLevel(p,a,b)  (p)->SetCooperativeLevel(a,b)\n#define IDirectSound8_Compact(p)                  (p)->Compact()\n#define IDirectSound8_GetSpeakerConfig(p,a)       (p)->GetSpeakerConfig(a)\n#define IDirectSound8_SetSpeakerConfig(p,a)       (p)->SetSpeakerConfig(a)\n#define IDirectSound8_Initialize(p,a)             (p)->Initialize(a)\n/*** IDirectSound8 methods ***/\n#define IDirectSound8_VerifyCertification(p,a)    (p)->VerifyCertification(a)\n#endif\n\n\n/*****************************************************************************\n * IDirectSoundBuffer interface\n */\n#define INTERFACE IDirectSoundBuffer\nDECLARE_INTERFACE_(IDirectSoundBuffer,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectSoundBuffer methods ***/\n    STDMETHOD(GetCaps)(THIS_ LPDSBCAPS lpDSBufferCaps) PURE;\n    STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD lpdwCurrentPlayCursor, LPDWORD lpdwCurrentWriteCursor) PURE;\n    STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX lpwfxFormat, DWORD dwSizeAllocated, LPDWORD lpdwSizeWritten) PURE;\n    STDMETHOD(GetVolume)(THIS_ LPLONG lplVolume) PURE;\n    STDMETHOD(GetPan)(THIS_ LPLONG lplpan) PURE;\n    STDMETHOD(GetFrequency)(THIS_ LPDWORD lpdwFrequency) PURE;\n    STDMETHOD(GetStatus)(THIS_ LPDWORD lpdwStatus) PURE;\n    STDMETHOD(Initialize)(THIS_ LPDIRECTSOUND lpDirectSound, LPCDSBUFFERDESC lpcDSBufferDesc) PURE;\n    STDMETHOD(Lock)(THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE;\n    STDMETHOD(Play)(THIS_ DWORD dwReserved1, DWORD dwReserved2, DWORD dwFlags) PURE;\n    STDMETHOD(SetCurrentPosition)(THIS_ DWORD dwNewPosition) PURE;\n    STDMETHOD(SetFormat)(THIS_ LPCWAVEFORMATEX lpcfxFormat) PURE;\n    STDMETHOD(SetVolume)(THIS_ LONG lVolume) PURE;\n    STDMETHOD(SetPan)(THIS_ LONG lPan) PURE;\n    STDMETHOD(SetFrequency)(THIS_ DWORD dwFrequency) PURE;\n    STDMETHOD(Stop)(THIS) PURE;\n    STDMETHOD(Unlock)(THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioPtr2) PURE;\n    STDMETHOD(Restore)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectSoundBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectSoundBuffer_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectSoundBuffer_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectSoundBuffer methods ***/\n#define IDirectSoundBuffer_GetCaps(p,a)                (p)->lpVtbl->GetCaps(p,a)\n#define IDirectSoundBuffer_GetCurrentPosition(p,a,b)   (p)->lpVtbl->GetCurrentPosition(p,a,b)\n#define IDirectSoundBuffer_GetFormat(p,a,b,c)          (p)->lpVtbl->GetFormat(p,a,b,c)\n#define IDirectSoundBuffer_GetVolume(p,a)              (p)->lpVtbl->GetVolume(p,a)\n#define IDirectSoundBuffer_GetPan(p,a)                 (p)->lpVtbl->GetPan(p,a)\n#define IDirectSoundBuffer_GetFrequency(p,a)           (p)->lpVtbl->GetFrequency(p,a)\n#define IDirectSoundBuffer_GetStatus(p,a)              (p)->lpVtbl->GetStatus(p,a)\n#define IDirectSoundBuffer_Initialize(p,a,b)           (p)->lpVtbl->Initialize(p,a,b)\n#define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g)       (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)\n#define IDirectSoundBuffer_Play(p,a,b,c)               (p)->lpVtbl->Play(p,a,b,c)\n#define IDirectSoundBuffer_SetCurrentPosition(p,a)     (p)->lpVtbl->SetCurrentPosition(p,a)\n#define IDirectSoundBuffer_SetFormat(p,a)              (p)->lpVtbl->SetFormat(p,a)\n#define IDirectSoundBuffer_SetVolume(p,a)              (p)->lpVtbl->SetVolume(p,a)\n#define IDirectSoundBuffer_SetPan(p,a)                 (p)->lpVtbl->SetPan(p,a)\n#define IDirectSoundBuffer_SetFrequency(p,a)           (p)->lpVtbl->SetFrequency(p,a)\n#define IDirectSoundBuffer_Stop(p)                     (p)->lpVtbl->Stop(p)\n#define IDirectSoundBuffer_Unlock(p,a,b,c,d)           (p)->lpVtbl->Unlock(p,a,b,c,d)\n#define IDirectSoundBuffer_Restore(p)                  (p)->lpVtbl->Restore(p)\n#else\n/*** IUnknown methods ***/\n#define IDirectSoundBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectSoundBuffer_AddRef(p)             (p)->AddRef()\n#define IDirectSoundBuffer_Release(p)            (p)->Release()\n/*** IDirectSoundBuffer methods ***/\n#define IDirectSoundBuffer_GetCaps(p,a)                (p)->GetCaps(a)\n#define IDirectSoundBuffer_GetCurrentPosition(p,a,b)   (p)->GetCurrentPosition(a,b)\n#define IDirectSoundBuffer_GetFormat(p,a,b,c)          (p)->GetFormat(a,b,c)\n#define IDirectSoundBuffer_GetVolume(p,a)              (p)->GetVolume(a)\n#define IDirectSoundBuffer_GetPan(p,a)                 (p)->GetPan(a)\n#define IDirectSoundBuffer_GetFrequency(p,a)           (p)->GetFrequency(a)\n#define IDirectSoundBuffer_GetStatus(p,a)              (p)->GetStatus(a)\n#define IDirectSoundBuffer_Initialize(p,a,b)           (p)->Initialize(a,b)\n#define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g)       (p)->Lock(a,b,c,d,e,f,g)\n#define IDirectSoundBuffer_Play(p,a,b,c)               (p)->Play(a,b,c)\n#define IDirectSoundBuffer_SetCurrentPosition(p,a)     (p)->SetCurrentPosition(a)\n#define IDirectSoundBuffer_SetFormat(p,a)              (p)->SetFormat(a)\n#define IDirectSoundBuffer_SetVolume(p,a)              (p)->SetVolume(a)\n#define IDirectSoundBuffer_SetPan(p,a)                 (p)->SetPan(a)\n#define IDirectSoundBuffer_SetFrequency(p,a)           (p)->SetFrequency(a)\n#define IDirectSoundBuffer_Stop(p)                     (p)->Stop()\n#define IDirectSoundBuffer_Unlock(p,a,b,c,d)           (p)->Unlock(a,b,c,d)\n#define IDirectSoundBuffer_Restore(p)                  (p)->Restore()\n#endif\n\n\n/*****************************************************************************\n * IDirectSoundBuffer8 interface\n */\n#define INTERFACE IDirectSoundBuffer8\nDECLARE_INTERFACE_(IDirectSoundBuffer8,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectSoundBuffer8 methods ***/\n    STDMETHOD(GetCaps)(THIS_ LPDSBCAPS lpDSBufferCaps) PURE;\n    STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD lpdwCurrentPlayCursor, LPDWORD lpdwCurrentWriteCursor) PURE;\n    STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX lpwfxFormat, DWORD dwSizeAllocated, LPDWORD lpdwSizeWritten) PURE;\n    STDMETHOD(GetVolume)(THIS_ LPLONG lplVolume) PURE;\n    STDMETHOD(GetPan)(THIS_ LPLONG lplpan) PURE;\n    STDMETHOD(GetFrequency)(THIS_ LPDWORD lpdwFrequency) PURE;\n    STDMETHOD(GetStatus)(THIS_ LPDWORD lpdwStatus) PURE;\n    STDMETHOD(Initialize)(THIS_ LPDIRECTSOUND lpDirectSound, LPCDSBUFFERDESC lpcDSBufferDesc) PURE;\n    STDMETHOD(Lock)(THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE;\n    STDMETHOD(Play)(THIS_ DWORD dwReserved1, DWORD dwReserved2, DWORD dwFlags) PURE;\n    STDMETHOD(SetCurrentPosition)(THIS_ DWORD dwNewPosition) PURE;\n    STDMETHOD(SetFormat)(THIS_ LPCWAVEFORMATEX lpcfxFormat) PURE;\n    STDMETHOD(SetVolume)(THIS_ LONG lVolume) PURE;\n    STDMETHOD(SetPan)(THIS_ LONG lPan) PURE;\n    STDMETHOD(SetFrequency)(THIS_ DWORD dwFrequency) PURE;\n    STDMETHOD(Stop)(THIS) PURE;\n    STDMETHOD(Unlock)(THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioPtr2) PURE;\n    STDMETHOD(Restore)(THIS) PURE;\n    STDMETHOD(SetFX)(THIS_ DWORD dwEffectsCount, LPDSEFFECTDESC pDSFXDesc, LPDWORD pdwResultCodes) PURE;\n    STDMETHOD(AcquireResources)(THIS_ DWORD dwFlags, DWORD dwEffectsCount, LPDWORD pdwResultCodes) PURE;\n    STDMETHOD(GetObjectInPath)(THIS_ REFGUID rguidObject, DWORD dwIndex, REFGUID rguidInterface, LPVOID *ppObject) PURE;\n};\n#undef INTERFACE\n\nDEFINE_GUID(GUID_All_Objects, 0xaa114de5, 0xc262, 0x4169, 0xa1, 0xc8, 0x23, 0xd6, 0x98, 0xcc, 0x73, 0xb5);\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectSoundBuffer8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectSoundBuffer8_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectSoundBuffer8_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectSoundBuffer methods ***/\n#define IDirectSoundBuffer8_GetCaps(p,a)                (p)->lpVtbl->GetCaps(p,a)\n#define IDirectSoundBuffer8_GetCurrentPosition(p,a,b)   (p)->lpVtbl->GetCurrentPosition(p,a,b)\n#define IDirectSoundBuffer8_GetFormat(p,a,b,c)          (p)->lpVtbl->GetFormat(p,a,b,c)\n#define IDirectSoundBuffer8_GetVolume(p,a)              (p)->lpVtbl->GetVolume(p,a)\n#define IDirectSoundBuffer8_GetPan(p,a)                 (p)->lpVtbl->GetPan(p,a)\n#define IDirectSoundBuffer8_GetFrequency(p,a)           (p)->lpVtbl->GetFrequency(p,a)\n#define IDirectSoundBuffer8_GetStatus(p,a)              (p)->lpVtbl->GetStatus(p,a)\n#define IDirectSoundBuffer8_Initialize(p,a,b)           (p)->lpVtbl->Initialize(p,a,b)\n#define IDirectSoundBuffer8_Lock(p,a,b,c,d,e,f,g)       (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)\n#define IDirectSoundBuffer8_Play(p,a,b,c)               (p)->lpVtbl->Play(p,a,b,c)\n#define IDirectSoundBuffer8_SetCurrentPosition(p,a)     (p)->lpVtbl->SetCurrentPosition(p,a)\n#define IDirectSoundBuffer8_SetFormat(p,a)              (p)->lpVtbl->SetFormat(p,a)\n#define IDirectSoundBuffer8_SetVolume(p,a)              (p)->lpVtbl->SetVolume(p,a)\n#define IDirectSoundBuffer8_SetPan(p,a)                 (p)->lpVtbl->SetPan(p,a)\n#define IDirectSoundBuffer8_SetFrequency(p,a)           (p)->lpVtbl->SetFrequency(p,a)\n#define IDirectSoundBuffer8_Stop(p)                     (p)->lpVtbl->Stop(p)\n#define IDirectSoundBuffer8_Unlock(p,a,b,c,d)           (p)->lpVtbl->Unlock(p,a,b,c,d)\n#define IDirectSoundBuffer8_Restore(p)                  (p)->lpVtbl->Restore(p)\n/*** IDirectSoundBuffer8 methods ***/\n#define IDirectSoundBuffer8_SetFX(p,a,b,c)              (p)->lpVtbl->SetFX(p,a,b,c)\n#define IDirectSoundBuffer8_AcquireResources(p,a,b,c)   (p)->lpVtbl->AcquireResources(p,a,b,c)\n#define IDirectSoundBuffer8_GetObjectInPath(p,a,b,c,d)  (p)->lpVtbl->GetObjectInPath(p,a,b,c,d)\n#else\n/*** IUnknown methods ***/\n#define IDirectSoundBuffer8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectSoundBuffer8_AddRef(p)             (p)->AddRef()\n#define IDirectSoundBuffer8_Release(p)            (p)->Release()\n/*** IDirectSoundBuffer methods ***/\n#define IDirectSoundBuffer8_GetCaps(p,a)                (p)->GetCaps(a)\n#define IDirectSoundBuffer8_GetCurrentPosition(p,a,b)   (p)->GetCurrentPosition(a,b)\n#define IDirectSoundBuffer8_GetFormat(p,a,b,c)          (p)->GetFormat(a,b,c)\n#define IDirectSoundBuffer8_GetVolume(p,a)              (p)->GetVolume(a)\n#define IDirectSoundBuffer8_GetPan(p,a)                 (p)->GetPan(a)\n#define IDirectSoundBuffer8_GetFrequency(p,a)           (p)->GetFrequency(a)\n#define IDirectSoundBuffer8_GetStatus(p,a)              (p)->GetStatus(a)\n#define IDirectSoundBuffer8_Initialize(p,a,b)           (p)->Initialize(a,b)\n#define IDirectSoundBuffer8_Lock(p,a,b,c,d,e,f,g)       (p)->Lock(a,b,c,d,e,f,g)\n#define IDirectSoundBuffer8_Play(p,a,b,c)               (p)->Play(a,b,c)\n#define IDirectSoundBuffer8_SetCurrentPosition(p,a)     (p)->SetCurrentPosition(a)\n#define IDirectSoundBuffer8_SetFormat(p,a)              (p)->SetFormat(a)\n#define IDirectSoundBuffer8_SetVolume(p,a)              (p)->SetVolume(a)\n#define IDirectSoundBuffer8_SetPan(p,a)                 (p)->SetPan(a)\n#define IDirectSoundBuffer8_SetFrequency(p,a)           (p)->SetFrequency(a)\n#define IDirectSoundBuffer8_Stop(p)                     (p)->Stop()\n#define IDirectSoundBuffer8_Unlock(p,a,b,c,d)           (p)->Unlock(a,b,c,d)\n#define IDirectSoundBuffer8_Restore(p)                  (p)->Restore()\n/*** IDirectSoundBuffer8 methods ***/\n#define IDirectSoundBuffer8_SetFX(p,a,b,c)              (p)->SetFX(a,b,c)\n#define IDirectSoundBuffer8_AcquireResources(p,a,b,c)   (p)->AcquireResources(a,b,c)\n#define IDirectSoundBuffer8_GetObjectInPath(p,a,b,c,d)  (p)->GetObjectInPath(a,b,c,d)\n#endif\n\n\n/*****************************************************************************\n * IDirectSoundCapture interface\n */\n#define INTERFACE IDirectSoundCapture\nDECLARE_INTERFACE_(IDirectSoundCapture,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectSoundCapture methods ***/\n    STDMETHOD(CreateCaptureBuffer)(THIS_ LPCDSCBUFFERDESC lpcDSCBufferDesc,LPDIRECTSOUNDCAPTUREBUFFER *lplpDSCaptureBuffer, LPUNKNOWN pUnk) PURE;\n    STDMETHOD(GetCaps)(THIS_ LPDSCCAPS lpDSCCaps) PURE;\n    STDMETHOD(Initialize)(THIS_ LPCGUID lpcGUID) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectSoundCapture_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectSoundCapture_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirectSoundCapture_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirectSoundCapture methods ***/\n#define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c) (p)->lpVtbl->CreateCaptureBuffer(p,a,b,c)\n#define IDirectSoundCapture_GetCaps(p,a)                 (p)->lpVtbl->GetCaps(p,a)\n#define IDirectSoundCapture_Initialize(p,a)              (p)->lpVtbl->Initialize(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirectSoundCapture_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirectSoundCapture_AddRef(p)                    (p)->AddRef()\n#define IDirectSoundCapture_Release(p)                   (p)->Release()\n/*** IDirectSoundCapture methods ***/\n#define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c) (p)->CreateCaptureBuffer(a,b,c)\n#define IDirectSoundCapture_GetCaps(p,a)                 (p)->GetCaps(a)\n#define IDirectSoundCapture_Initialize(p,a)              (p)->Initialize(a)\n#endif\n\n/*****************************************************************************\n * IDirectSoundCaptureBuffer interface\n */\n#define INTERFACE IDirectSoundCaptureBuffer\nDECLARE_INTERFACE_(IDirectSoundCaptureBuffer,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectSoundCaptureBuffer methods ***/\n    STDMETHOD(GetCaps)(THIS_ LPDSCBCAPS lpDSCBCaps) PURE;\n    STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD lpdwCapturePosition,LPDWORD lpdwReadPosition) PURE;\n    STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX lpwfxFormat, DWORD dwSizeAllocated, LPDWORD lpdwSizeWritten) PURE;\n    STDMETHOD(GetStatus)(THIS_ LPDWORD lpdwStatus) PURE;\n    STDMETHOD(Initialize)(THIS_ LPDIRECTSOUNDCAPTURE lpDSC, LPCDSCBUFFERDESC lpcDSCBDesc) PURE;\n    STDMETHOD(Lock)(THIS_ DWORD dwReadCusor, DWORD dwReadBytes, LPVOID *lplpvAudioPtr1, LPDWORD lpdwAudioBytes1, LPVOID *lplpvAudioPtr2, LPDWORD lpdwAudioBytes2, DWORD dwFlags) PURE;\n    STDMETHOD(Start)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(Stop)(THIS) PURE;\n    STDMETHOD(Unlock)(THIS_ LPVOID lpvAudioPtr1, DWORD dwAudioBytes1, LPVOID lpvAudioPtr2, DWORD dwAudioBytes2) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectSoundCaptureBuffer_QueryInterface(p,a,b)     (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectSoundCaptureBuffer_AddRef(p)                 (p)->lpVtbl->AddRef(p)\n#define IDirectSoundCaptureBuffer_Release(p)                (p)->lpVtbl->Release(p)\n/*** IDirectSoundCaptureBuffer methods ***/\n#define IDirectSoundCaptureBuffer_GetCaps(p,a)              (p)->lpVtbl->GetCaps(p,a)\n#define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b)\n#define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c)        (p)->lpVtbl->GetFormat(p,a,b,c)\n#define IDirectSoundCaptureBuffer_GetStatus(p,a)            (p)->lpVtbl->GetStatus(p,a)\n#define IDirectSoundCaptureBuffer_Initialize(p,a,b)         (p)->lpVtbl->Initialize(p,a,b)\n#define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g)     (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)\n#define IDirectSoundCaptureBuffer_Start(p,a)                (p)->lpVtbl->Start(p,a)\n#define IDirectSoundCaptureBuffer_Stop(p)                   (p)->lpVtbl->Stop(p)\n#define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d)         (p)->lpVtbl->Unlock(p,a,b,c,d)\n#else\n/*** IUnknown methods ***/\n#define IDirectSoundCaptureBuffer_QueryInterface(p,a,b)     (p)->QueryInterface(a,b)\n#define IDirectSoundCaptureBuffer_AddRef(p)                 (p)->AddRef()\n#define IDirectSoundCaptureBuffer_Release(p)                (p)->Release()\n/*** IDirectSoundCaptureBuffer methods ***/\n#define IDirectSoundCaptureBuffer_GetCaps(p,a)              (p)->GetCaps(a)\n#define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b)\n#define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c)        (p)->GetFormat(a,b,c)\n#define IDirectSoundCaptureBuffer_GetStatus(p,a)            (p)->GetStatus(a)\n#define IDirectSoundCaptureBuffer_Initialize(p,a,b)         (p)->Initialize(a,b)\n#define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g)     (p)->Lock(a,b,c,d,e,f,g)\n#define IDirectSoundCaptureBuffer_Start(p,a)                (p)->Start(a)\n#define IDirectSoundCaptureBuffer_Stop(p)                   (p)->Stop()\n#define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d)         (p)->Unlock(a,b,c,d)\n#endif\n\n/*****************************************************************************\n * IDirectSoundCaptureBuffer8 interface\n */\n#define INTERFACE IDirectSoundCaptureBuffer8\nDECLARE_INTERFACE_(IDirectSoundCaptureBuffer8,IDirectSoundCaptureBuffer)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectSoundCaptureBuffer methods ***/\n    STDMETHOD(GetCaps)(THIS_ LPDSCBCAPS lpDSCBCaps) PURE;\n    STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD lpdwCapturePosition,LPDWORD lpdwReadPosition) PURE;\n    STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX lpwfxFormat, DWORD dwSizeAllocated, LPDWORD lpdwSizeWritten) PURE;\n    STDMETHOD(GetStatus)(THIS_ LPDWORD lpdwStatus) PURE;\n    STDMETHOD(Initialize)(THIS_ LPDIRECTSOUNDCAPTURE lpDSC, LPCDSCBUFFERDESC lpcDSCBDesc) PURE;\n    STDMETHOD(Lock)(THIS_ DWORD dwReadCusor, DWORD dwReadBytes, LPVOID *lplpvAudioPtr1, LPDWORD lpdwAudioBytes1, LPVOID *lplpvAudioPtr2, LPDWORD lpdwAudioBytes2, DWORD dwFlags) PURE;\n    STDMETHOD(Start)(THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(Stop)(THIS) PURE;\n    STDMETHOD(Unlock)(THIS_ LPVOID lpvAudioPtr1, DWORD dwAudioBytes1, LPVOID lpvAudioPtr2, DWORD dwAudioBytes2) PURE;\n    /*** IDirectSoundCaptureBuffer8 methods ***/\n    STDMETHOD(GetObjectInPath)(THIS_ REFGUID rguidObject, DWORD dwIndex, REFGUID rguidInterface, LPVOID *ppObject) PURE;\n    STDMETHOD(GetFXStatus)(THIS_ DWORD dwFXCount, LPDWORD pdwFXStatus) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectSoundCaptureBuffer8_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectSoundCaptureBuffer8_AddRef(p)                  (p)->lpVtbl->AddRef(p)\n#define IDirectSoundCaptureBuffer8_Release(p)                 (p)->lpVtbl->Release(p)\n/*** IDirectSoundCaptureBuffer methods ***/\n#define IDirectSoundCaptureBuffer8_GetCaps(p,a)               (p)->lpVtbl->GetCaps(p,a)\n#define IDirectSoundCaptureBuffer8_GetCurrentPosition(p,a,b)  (p)->lpVtbl->GetCurrentPosition(p,a,b)\n#define IDirectSoundCaptureBuffer8_GetFormat(p,a,b,c)         (p)->lpVtbl->GetFormat(p,a,b,c)\n#define IDirectSoundCaptureBuffer8_GetStatus(p,a)             (p)->lpVtbl->GetStatus(p,a)\n#define IDirectSoundCaptureBuffer8_Initialize(p,a,b)          (p)->lpVtbl->Initialize(p,a,b)\n#define IDirectSoundCaptureBuffer8_Lock(p,a,b,c,d,e,f,g)      (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)\n#define IDirectSoundCaptureBuffer8_Start(p,a)                 (p)->lpVtbl->Start(p,a)\n#define IDirectSoundCaptureBuffer8_Stop(p)                    (p)->lpVtbl->Stop(p)\n#define IDirectSoundCaptureBuffer8_Unlock(p,a,b,c,d)          (p)->lpVtbl->Unlock(p,a,b,c,d)\n/*** IDirectSoundCaptureBuffer8 methods ***/\n#define IDirectSoundCaptureBuffer8_GetObjectInPath(p,a,b,c,d) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d)\n#define IDirectSoundCaptureBuffer8_GetFXStatus(p,a,b)         (p)->lpVtbl->GetFXStatus(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirectSoundCaptureBuffer8_QueryInterface(p,a,b)      (p)->QueryInterface(a,b)\n#define IDirectSoundCaptureBuffer8_AddRef(p)                  (p)->AddRef()\n#define IDirectSoundCaptureBuffer8_Release(p)                 (p)->Release()\n/*** IDirectSoundCaptureBuffer methods ***/\n#define IDirectSoundCaptureBuffer8_GetCaps(p,a)               (p)->GetCaps(a)\n#define IDirectSoundCaptureBuffer8_GetCurrentPosition(p,a,b)  (p)->GetCurrentPosition(a,b)\n#define IDirectSoundCaptureBuffer8_GetFormat(p,a,b,c)         (p)->GetFormat(a,b,c)\n#define IDirectSoundCaptureBuffer8_GetStatus(p,a)             (p)->GetStatus(a)\n#define IDirectSoundCaptureBuffer8_Initialize(p,a,b)          (p)->Initialize(a,b)\n#define IDirectSoundCaptureBuffer8_Lock(p,a,b,c,d,e,f,g)      (p)->Lock(a,b,c,d,e,f,g)\n#define IDirectSoundCaptureBuffer8_Start(p,a)                 (p)->Start(a)\n#define IDirectSoundCaptureBuffer8_Stop(p)                    (p)->Stop()\n#define IDirectSoundCaptureBuffer8_Unlock(p,a,b,c,d)          (p)->Unlock(a,b,c,d)\n/*** IDirectSoundCaptureBuffer8 methods ***/\n#define IDirectSoundCaptureBuffer8_GetObjectInPath(p,a,b,c,d) (p)->GetObjectInPath(a,b,c,d)\n#define IDirectSoundCaptureBuffer8_GetFXStatus(p,a,b)         (p)->GetFXStatus(a,b)\n#endif\n\n/*****************************************************************************\n * IDirectSoundNotify interface\n */\n#define WINE_NOBUFFER                   0x80000000\n\n#define DSBPN_OFFSETSTOP\t\t-1\n\n#define INTERFACE IDirectSoundNotify\nDECLARE_INTERFACE_(IDirectSoundNotify,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectSoundNotify methods ***/\n    STDMETHOD(SetNotificationPositions)(THIS_ DWORD cPositionNotifies, LPCDSBPOSITIONNOTIFY lpcPositionNotifies) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectSoundNotify_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectSoundNotify_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectSoundNotify_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectSoundNotify methods ***/\n#define IDirectSoundNotify_SetNotificationPositions(p,a,b) (p)->lpVtbl->SetNotificationPositions(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirectSoundNotify_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectSoundNotify_AddRef(p)             (p)->AddRef()\n#define IDirectSoundNotify_Release(p)            (p)->Release()\n/*** IDirectSoundNotify methods ***/\n#define IDirectSoundNotify_SetNotificationPositions(p,a,b) (p)->SetNotificationPositions(a,b)\n#endif\n\n\n/*****************************************************************************\n * IDirectSound3DListener interface\n */\n#define DS3DMODE_NORMAL             0x00000000\n#define DS3DMODE_HEADRELATIVE       0x00000001\n#define DS3DMODE_DISABLE            0x00000002\n\n#define DS3D_IMMEDIATE              0x00000000\n#define DS3D_DEFERRED               0x00000001\n\n#define DS3D_MINDISTANCEFACTOR      FLT_MIN\n#define DS3D_MAXDISTANCEFACTOR      FLT_MAX\n#define DS3D_DEFAULTDISTANCEFACTOR  1.0f\n\n#define DS3D_MINROLLOFFFACTOR       0.0f\n#define DS3D_MAXROLLOFFFACTOR       10.0f\n#define DS3D_DEFAULTROLLOFFFACTOR   1.0f\n\n#define DS3D_MINDOPPLERFACTOR       0.0f\n#define DS3D_MAXDOPPLERFACTOR       10.0f\n#define DS3D_DEFAULTDOPPLERFACTOR   1.0f\n\n#define DS3D_DEFAULTMINDISTANCE     1.0f\n#define DS3D_DEFAULTMAXDISTANCE     1000000000.0f\n\n#define DS3D_MINCONEANGLE           0\n#define DS3D_MAXCONEANGLE           360\n#define DS3D_DEFAULTCONEANGLE       360\n\n#define DS3D_DEFAULTCONEOUTSIDEVOLUME   DSBVOLUME_MAX\n\ntypedef struct _DS3DLISTENER {\n\tDWORD\t\t\t\tdwSize;\n\tD3DVECTOR\t\t\tvPosition;\n\tD3DVECTOR\t\t\tvVelocity;\n\tD3DVECTOR\t\t\tvOrientFront;\n\tD3DVECTOR\t\t\tvOrientTop;\n\tD3DVALUE\t\t\tflDistanceFactor;\n\tD3DVALUE\t\t\tflRolloffFactor;\n\tD3DVALUE\t\t\tflDopplerFactor;\n} DS3DLISTENER, *LPDS3DLISTENER;\n\ntypedef const DS3DLISTENER *LPCDS3DLISTENER;\n\n#define INTERFACE IDirectSound3DListener\nDECLARE_INTERFACE_(IDirectSound3DListener,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectSound3DListener methods ***/\n    STDMETHOD(GetAllParameters)(THIS_ LPDS3DLISTENER lpListener) PURE;\n    STDMETHOD(GetDistanceFactor)(THIS_ LPD3DVALUE lpflDistanceFactor) PURE;\n    STDMETHOD(GetDopplerFactor)(THIS_ LPD3DVALUE lpflDopplerFactor) PURE;\n    STDMETHOD(GetOrientation)(THIS_ LPD3DVECTOR lpvOrientFront, LPD3DVECTOR lpvOrientTop) PURE;\n    STDMETHOD(GetPosition)(THIS_ LPD3DVECTOR lpvPosition) PURE;\n    STDMETHOD(GetRolloffFactor)(THIS_ LPD3DVALUE lpflRolloffFactor) PURE;\n    STDMETHOD(GetVelocity)(THIS_ LPD3DVECTOR lpvVelocity) PURE;\n    STDMETHOD(SetAllParameters)(THIS_ LPCDS3DLISTENER lpcListener, DWORD dwApply) PURE;\n    STDMETHOD(SetDistanceFactor)(THIS_ D3DVALUE flDistanceFactor, DWORD dwApply) PURE;\n    STDMETHOD(SetDopplerFactor)(THIS_ D3DVALUE flDopplerFactor, DWORD dwApply) PURE;\n    STDMETHOD(SetOrientation)(THIS_ D3DVALUE xFront, D3DVALUE yFront, D3DVALUE zFront, D3DVALUE xTop, D3DVALUE yTop, D3DVALUE zTop, DWORD dwApply) PURE;\n    STDMETHOD(SetPosition)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;\n    STDMETHOD(SetRolloffFactor)(THIS_ D3DVALUE flRolloffFactor, DWORD dwApply) PURE;\n    STDMETHOD(SetVelocity)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;\n    STDMETHOD(CommitDeferredSettings)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectSound3DListener_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectSound3DListener_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectSound3DListener_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectSound3DListener methods ***/\n#define IDirectSound3DListener_GetAllParameters(p,a)           (p)->lpVtbl->GetAllParameters(p,a)\n#define IDirectSound3DListener_GetDistanceFactor(p,a)          (p)->lpVtbl->GetDistanceFactor(p,a)\n#define IDirectSound3DListener_GetDopplerFactor(p,a)           (p)->lpVtbl->GetDopplerFactor(p,a)\n#define IDirectSound3DListener_GetOrientation(p,a,b)           (p)->lpVtbl->GetOrientation(p,a,b)\n#define IDirectSound3DListener_GetPosition(p,a)                (p)->lpVtbl->GetPosition(p,a)\n#define IDirectSound3DListener_GetRolloffFactor(p,a)           (p)->lpVtbl->GetRolloffFactor(p,a)\n#define IDirectSound3DListener_GetVelocity(p,a)                (p)->lpVtbl->GetVelocity(p,a)\n#define IDirectSound3DListener_SetAllParameters(p,a,b)         (p)->lpVtbl->SetAllParameters(p,a,b)\n#define IDirectSound3DListener_SetDistanceFactor(p,a,b)        (p)->lpVtbl->SetDistanceFactor(p,a,b)\n#define IDirectSound3DListener_SetDopplerFactor(p,a,b)         (p)->lpVtbl->SetDopplerFactor(p,a,b)\n#define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g) (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g)\n#define IDirectSound3DListener_SetPosition(p,a,b,c,d)          (p)->lpVtbl->SetPosition(p,a,b,c,d)\n#define IDirectSound3DListener_SetRolloffFactor(p,a,b)         (p)->lpVtbl->SetRolloffFactor(p,a,b)\n#define IDirectSound3DListener_SetVelocity(p,a,b,c,d)          (p)->lpVtbl->SetVelocity(p,a,b,c,d)\n#define IDirectSound3DListener_CommitDeferredSettings(p)       (p)->lpVtbl->CommitDeferredSettings(p)\n#else\n/*** IUnknown methods ***/\n#define IDirectSound3DListener_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectSound3DListener_AddRef(p)             (p)->AddRef()\n#define IDirectSound3DListener_Release(p)            (p)->Release()\n/*** IDirectSound3DListener methods ***/\n#define IDirectSound3DListener_GetAllParameters(p,a)           (p)->GetAllParameters(a)\n#define IDirectSound3DListener_GetDistanceFactor(p,a)          (p)->GetDistanceFactor(a)\n#define IDirectSound3DListener_GetDopplerFactor(p,a)           (p)->GetDopplerFactor(a)\n#define IDirectSound3DListener_GetOrientation(p,a,b)           (p)->GetOrientation(a,b)\n#define IDirectSound3DListener_GetPosition(p,a)                (p)->GetPosition(a)\n#define IDirectSound3DListener_GetRolloffFactor(p,a)           (p)->GetRolloffFactor(a)\n#define IDirectSound3DListener_GetVelocity(p,a)                (p)->GetVelocity(a)\n#define IDirectSound3DListener_SetAllParameters(p,a,b)         (p)->SetAllParameters(a,b)\n#define IDirectSound3DListener_SetDistanceFactor(p,a,b)        (p)->SetDistanceFactor(a,b)\n#define IDirectSound3DListener_SetDopplerFactor(p,a,b)         (p)->SetDopplerFactor(a,b)\n#define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g) (p)->SetOrientation(a,b,c,d,e,f,g)\n#define IDirectSound3DListener_SetPosition(p,a,b,c,d)          (p)->SetPosition(a,b,c,d)\n#define IDirectSound3DListener_SetRolloffFactor(p,a,b)         (p)->SetRolloffFactor(a,b)\n#define IDirectSound3DListener_SetVelocity(p,a,b,c,d)          (p)->SetVelocity(a,b,c,d)\n#define IDirectSound3DListener_CommitDeferredSettings(p)       (p)->CommitDeferredSettings()\n#endif\n\n\n/*****************************************************************************\n * IDirectSound3DBuffer interface\n */\ntypedef struct  _DS3DBUFFER {\n\tDWORD\t\t\t\tdwSize;\n\tD3DVECTOR\t\t\tvPosition;\n\tD3DVECTOR\t\t\tvVelocity;\n\tDWORD\t\t\t\tdwInsideConeAngle;\n\tDWORD\t\t\t\tdwOutsideConeAngle;\n\tD3DVECTOR\t\t\tvConeOrientation;\n\tLONG\t\t\t\tlConeOutsideVolume;\n\tD3DVALUE\t\t\tflMinDistance;\n\tD3DVALUE\t\t\tflMaxDistance;\n\tDWORD\t\t\t\tdwMode;\n} DS3DBUFFER, *LPDS3DBUFFER;\n\ntypedef const DS3DBUFFER *LPCDS3DBUFFER;\n\n#define INTERFACE IDirectSound3DBuffer\nDECLARE_INTERFACE_(IDirectSound3DBuffer,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectSound3DBuffer methods ***/\n    STDMETHOD(GetAllParameters)(THIS_ LPDS3DBUFFER lpDs3dBuffer) PURE;\n    STDMETHOD(GetConeAngles)(THIS_ LPDWORD lpdwInsideConeAngle, LPDWORD lpdwOutsideConeAngle) PURE;\n    STDMETHOD(GetConeOrientation)(THIS_ LPD3DVECTOR lpvOrientation) PURE;\n    STDMETHOD(GetConeOutsideVolume)(THIS_ LPLONG lplConeOutsideVolume) PURE;\n    STDMETHOD(GetMaxDistance)(THIS_ LPD3DVALUE lpflMaxDistance) PURE;\n    STDMETHOD(GetMinDistance)(THIS_ LPD3DVALUE lpflMinDistance) PURE;\n    STDMETHOD(GetMode)(THIS_ LPDWORD lpwdMode) PURE;\n    STDMETHOD(GetPosition)(THIS_ LPD3DVECTOR lpvPosition) PURE;\n    STDMETHOD(GetVelocity)(THIS_ LPD3DVECTOR lpvVelocity) PURE;\n    STDMETHOD(SetAllParameters)(THIS_ LPCDS3DBUFFER lpcDs3dBuffer, DWORD dwApply) PURE;\n    STDMETHOD(SetConeAngles)(THIS_ DWORD dwInsideConeAngle, DWORD dwOutsideConeAngle, DWORD dwApply) PURE;\n    STDMETHOD(SetConeOrientation)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;\n    STDMETHOD(SetConeOutsideVolume)(THIS_ LONG lConeOutsideVolume, DWORD dwApply) PURE;\n    STDMETHOD(SetMaxDistance)(THIS_ D3DVALUE flMaxDistance, DWORD dwApply) PURE;\n    STDMETHOD(SetMinDistance)(THIS_ D3DVALUE flMinDistance, DWORD dwApply) PURE;\n    STDMETHOD(SetMode)(THIS_ DWORD dwMode, DWORD dwApply) PURE;\n    STDMETHOD(SetPosition)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;\n    STDMETHOD(SetVelocity)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectSound3DBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectSound3DBuffer_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectSound3DBuffer_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirectSound3DBuffer methods ***/\n#define IDirectSound3DBuffer_GetAllParameters(p,a)         (p)->lpVtbl->GetAllParameters(p,a)\n#define IDirectSound3DBuffer_GetConeAngles(p,a,b)          (p)->lpVtbl->GetConeAngles(p,a,b)\n#define IDirectSound3DBuffer_GetConeOrientation(p,a)       (p)->lpVtbl->GetConeOrientation(p,a)\n#define IDirectSound3DBuffer_GetConeOutsideVolume(p,a)     (p)->lpVtbl->GetConeOutsideVolume(p,a)\n#define IDirectSound3DBuffer_GetMaxDistance(p,a)           (p)->lpVtbl->GetMaxDistance(p,a)\n#define IDirectSound3DBuffer_GetMinDistance(p,a)           (p)->lpVtbl->GetMinDistance(p,a)\n#define IDirectSound3DBuffer_GetMode(p,a)                  (p)->lpVtbl->GetMode(p,a)\n#define IDirectSound3DBuffer_GetPosition(p,a)              (p)->lpVtbl->GetPosition(p,a)\n#define IDirectSound3DBuffer_GetVelocity(p,a)              (p)->lpVtbl->GetVelocity(p,a)\n#define IDirectSound3DBuffer_SetAllParameters(p,a,b)       (p)->lpVtbl->SetAllParameters(p,a,b)\n#define IDirectSound3DBuffer_SetConeAngles(p,a,b,c)        (p)->lpVtbl->SetConeAngles(p,a,b,c)\n#define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) (p)->lpVtbl->SetConeOrientation(p,a,b,c,d)\n#define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b)   (p)->lpVtbl->SetConeOutsideVolume(p,a,b)\n#define IDirectSound3DBuffer_SetMaxDistance(p,a,b)         (p)->lpVtbl->SetMaxDistance(p,a,b)\n#define IDirectSound3DBuffer_SetMinDistance(p,a,b)         (p)->lpVtbl->SetMinDistance(p,a,b)\n#define IDirectSound3DBuffer_SetMode(p,a,b)                (p)->lpVtbl->SetMode(p,a,b)\n#define IDirectSound3DBuffer_SetPosition(p,a,b,c,d)        (p)->lpVtbl->SetPosition(p,a,b,c,d)\n#define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d)        (p)->lpVtbl->SetVelocity(p,a,b,c,d)\n#else\n/*** IUnknown methods ***/\n#define IDirectSound3DBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectSound3DBuffer_AddRef(p)             (p)->AddRef()\n#define IDirectSound3DBuffer_Release(p)            (p)->Release()\n/*** IDirectSound3DBuffer methods ***/\n#define IDirectSound3DBuffer_GetAllParameters(p,a)         (p)->GetAllParameters(a)\n#define IDirectSound3DBuffer_GetConeAngles(p,a,b)          (p)->GetConeAngles(a,b)\n#define IDirectSound3DBuffer_GetConeOrientation(p,a)       (p)->GetConeOrientation(a)\n#define IDirectSound3DBuffer_GetConeOutsideVolume(p,a)     (p)->GetConeOutsideVolume(a)\n#define IDirectSound3DBuffer_GetMaxDistance(p,a)           (p)->GetMaxDistance(a)\n#define IDirectSound3DBuffer_GetMinDistance(p,a)           (p)->GetMinDistance(a)\n#define IDirectSound3DBuffer_GetMode(p,a)                  (p)->GetMode(a)\n#define IDirectSound3DBuffer_GetPosition(p,a)              (p)->GetPosition(a)\n#define IDirectSound3DBuffer_GetVelocity(p,a)              (p)->GetVelocity(a)\n#define IDirectSound3DBuffer_SetAllParameters(p,a,b)       (p)->SetAllParameters(a,b)\n#define IDirectSound3DBuffer_SetConeAngles(p,a,b,c)        (p)->SetConeAngles(a,b,c)\n#define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) (p)->SetConeOrientation(a,b,c,d)\n#define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b)   (p)->SetConeOutsideVolume(a,b)\n#define IDirectSound3DBuffer_SetMaxDistance(p,a,b)         (p)->SetMaxDistance(a,b)\n#define IDirectSound3DBuffer_SetMinDistance(p,a,b)         (p)->SetMinDistance(a,b)\n#define IDirectSound3DBuffer_SetMode(p,a,b)                (p)->SetMode(a,b)\n#define IDirectSound3DBuffer_SetPosition(p,a,b,c,d)        (p)->SetPosition(a,b,c,d)\n#define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d)        (p)->SetVelocity(a,b,c,d)\n#endif\n\n/*****************************************************************************\n * IKsPropertySet interface\n */\n#ifndef _IKsPropertySet_\n#define _IKsPropertySet_\n#define __IKsPropertySet_FWD_DEFINED__\n\ntypedef struct IKsPropertySet *LPKSPROPERTYSET;\n\nDEFINE_GUID(IID_IKsPropertySet,0x31EFAC30,0x515C,0x11D0,0xA9,0xAA,0x00,0xAA,0x00,0x61,0xBE,0x93);\n\n#define KSPROPERTY_SUPPORT_GET\t1\n#define KSPROPERTY_SUPPORT_SET\t2\n\n#define INTERFACE IKsPropertySet\nDECLARE_INTERFACE_(IKsPropertySet,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IKsPropertySet methods ***/\n    STDMETHOD(Get)(THIS_ REFGUID rgid,ULONG x1,LPVOID p1,ULONG x2,LPVOID p2,ULONG x3,ULONG *px4) PURE;\n    STDMETHOD(Set)(THIS_ REFGUID rgid,ULONG x1,LPVOID p1,ULONG x2,LPVOID p2,ULONG x3) PURE;\n    STDMETHOD(QuerySupport)(THIS_ REFGUID rgid,ULONG x1,ULONG *px2) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IKsPropertySet_QueryInterface(p,a,b)    (p)->lpVtbl->QueryInterface(p,a,b)\n#define IKsPropertySet_AddRef(p)                (p)->lpVtbl->AddRef(p)\n#define IKsPropertySet_Release(p)               (p)->lpVtbl->Release(p)\n/*** IKsPropertySet methods ***/\n#define IKsPropertySet_Get(p,a,b,c,d,e,f,g)     (p)->lpVtbl->Get(p,a,b,c,d,e,f,g)\n#define IKsPropertySet_Set(p,a,b,c,d,e,f)       (p)->lpVtbl->Set(p,a,b,c,d,e,f)\n#define IKsPropertySet_QuerySupport(p,a,b,c)    (p)->lpVtbl->QuerySupport(p,a,b,c)\n#else\n/*** IUnknown methods ***/\n#define IKsPropertySet_QueryInterface(p,a,b)    (p)->QueryInterface(a,b)\n#define IKsPropertySet_AddRef(p)                (p)->AddRef()\n#define IKsPropertySet_Release(p)               (p)->Release()\n/*** IKsPropertySet methods ***/\n#define IKsPropertySet_Get(p,a,b,c,d,e,f,g)     (p)->Get(a,b,c,d,e,f,g)\n#define IKsPropertySet_Set(p,a,b,c,d,e,f)       (p)->Set(a,b,c,d,e,f)\n#define IKsPropertySet_QuerySupport(p,a,b,c)    (p)->QuerySupport(a,b,c)\n#endif\n\n#endif /* _IKsPropertySet_ */\n\n/*****************************************************************************\n * IDirectSoundFullDuplex interface\n */\n#define INTERFACE IDirectSoundFullDuplex\nDECLARE_INTERFACE_(IDirectSoundFullDuplex,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectSoundFullDuplex methods ***/\n    STDMETHOD(Initialize)(THIS_ LPCGUID pCaptureGuid,LPCGUID pRendererGuid,LPCDSCBUFFERDESC lpDscBufferDesc,LPCDSBUFFERDESC lpDsBufferDesc,HWND hWnd,DWORD dwLevel,LPLPDIRECTSOUNDCAPTUREBUFFER8 lplpDirectSoundCaptureBuffer8,LPLPDIRECTSOUNDBUFFER8 lplpDirectSoundBuffer8) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirectSoundFullDuplex_QueryInterface(p,a,b)    (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectSoundFullDuplex_AddRef(p)                (p)->lpVtbl->AddRef(p)\n#define IDirectSoundFullDuplex_Release(p)               (p)->lpVtbl->Release(p)\n/*** IDirectSoundFullDuplex methods ***/\n#define IDirectSoundFullDuplex_Initialize(p,a,b,c,d,e,f,g,h)    (p)->lpVtbl->Initialize(p,a,b,c,d,e,f,g,h)\n#else\n/*** IUnknown methods ***/\n#define IDirectSoundFullDuplex_QueryInterface(p,a,b)    (p)->QueryInterface(a,b)\n#define IDirectSoundFullDuplex_AddRef(p)                (p)->AddRef()\n#define IDirectSoundFullDuplex_Release(p)               (p)->Release()\n/*** IDirectSoundFullDuplex methods ***/\n#define IDirectSoundFullDuplex_Initialize(p,a,b,c,d,e,f,g,h)    (p)->Initialize(a,b,c,d,e,f,g,h)\n#endif\n\n\n/*****************************************************************************\n * IDirectSoundFXI3DL2Reverb interface\n */\n#define INTERFACE IDirectSoundFXI3DL2Reverb\nDECLARE_INTERFACE_(IDirectSoundFXI3DL2Reverb,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID, void**) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirectSoundFXI3DL2Reverb methods ***/\n    STDMETHOD(SetAllParameters)(THIS_ LPCDSFXI3DL2Reverb reverb) PURE;\n    STDMETHOD(GetAllParameters)(THIS_ LPDSFXI3DL2Reverb reverb) PURE;\n    STDMETHOD(SetPreset)(THIS_ DWORD preset) PURE;\n    STDMETHOD(GetPreset)(THIS_ DWORD *preset) PURE;\n    STDMETHOD(SetQuality)(THIS_ LONG quality) PURE;\n    STDMETHOD(GetQuality)(THIS_ LONG *quality) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundFXI3DL2Reverb_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectSoundFXI3DL2Reverb_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectSoundFXI3DL2Reverb_Release(p)            (p)->lpVtbl->Release(p)\n#define IDirectSoundFXI3DL2Reverb_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a)\n#define IDirectSoundFXI3DL2Reverb_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a)\n#define IDirectSoundFXI3DL2Reverb_SetPreset(p,a)        (p)->lpVtbl->SetPreset(p,a)\n#define IDirectSoundFXI3DL2Reverb_GetPreset(p,a)        (p)->lpVtbl->GetPreset(p,a)\n#else\n#define IDirectSoundFXI3DL2Reverb_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectSoundFXI3DL2Reverb_AddRef(p)             (p)->AddRef()\n#define IDirectSoundFXI3DL2Reverb_Release(p)            (p)->Release()\n#define IDirectSoundFXI3DL2Reverb_SetAllParameters(p,a) (p)->SetAllParameters(a)\n#define IDirectSoundFXI3DL2Reverb_GetAllParameters(p,a) (p)->GetAllParameters(a)\n#define IDirectSoundFXI3DL2Reverb_SetPreset(p,a)        (p)->SetPreset(a)\n#define IDirectSoundFXI3DL2Reverb_GetPreset(p,a)        (p)->GetPreset(a)\n#endif\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif /* __DSOUND_INCLUDED__ */\n"
  },
  {
    "path": "wine/windows/dsrole.h",
    "content": "/*\n * Directory Services definitions\n *\n * Copyright 2005 Paul Vriens\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DSROLE_H\n#define __WINE_DSROLE_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define DSROLE_PRIMARY_DS_RUNNING           0x00000001\n#define DSROLE_PRIMARY_DS_MIXED_MODE        0x00000002\n#define DSROLE_UPGRADE_IN_PROGRESS          0x00000004\n#define DSROLE_PRIMARY_DOMAIN_GUID_PRESENT  0x01000000\n\ntypedef enum _DSROLE_PRIMARY_DOMAIN_INFO_LEVEL\n{\n    DsRolePrimaryDomainInfoBasic = 1,\n    DsRoleUpgradeStatus,\n    DsRoleOperationState\n} DSROLE_PRIMARY_DOMAIN_INFO_LEVEL;\n\ntypedef enum _DSROLE_MACHINE_ROLE\n{\n  DsRole_RoleStandaloneWorkstation = 0,\n  DsRole_RoleMemberWorkstation,\n  DsRole_RoleStandaloneServer,\n  DsRole_RoleMemberServer,\n  DsRole_RoleBackupDomainController,\n  DsRole_RolePrimaryDomainController\n} DSROLE_MACHINE_ROLE;\n\ntypedef enum _DSROLE_SERVER_STATE\n{\n  DsRoleServerUnknown = 0,\n  DsRoleServerPrimary,\n  DsRoleServerBackup\n} DSROLE_SERVER_STATE;\n\ntypedef enum _DSROLE_OPERATION_STATE\n{\n  DsRoleOperationIdle = 0,\n  DsRoleOperationActive,\n  DsRoleOperationNeedReboot\n} DSROLE_OPERATION_STATE;\n\ntypedef struct _DSROLE_PRIMARY_DOMAIN_INFO_BASIC\n{\n    DSROLE_MACHINE_ROLE MachineRole;\n    ULONG Flags;\n    LPWSTR DomainNameFlat;\n    LPWSTR DomainNameDns;\n    LPWSTR DomainForestName;\n    GUID DomainGuid;\n} DSROLE_PRIMARY_DOMAIN_INFO_BASIC, *PDSROLE_PRIMARY_DOMAIN_INFO_BASIC;\n\ntypedef struct _DSROLE_UPGRADE_STATUS_INFO\n{\n    ULONG OperationState;\n    DSROLE_SERVER_STATE PreviousServerState;\n} DSROLE_UPGRADE_STATUS_INFO, *PDSROLE_UPGRADE_STATUS_INFO;\n\ntypedef struct _DSROLE_OPERATION_STATE_INFO\n{\n    DSROLE_OPERATION_STATE OperationState;\n} DSROLE_OPERATION_STATE_INFO, *PDSROLE_OPERATION_STATE_INFO;\n\nVOID WINAPI DsRoleFreeMemory(IN PVOID Buffer);\nDWORD WINAPI DsRoleGetPrimaryDomainInformation(IN LPCWSTR lpServer OPTIONAL, IN DSROLE_PRIMARY_DOMAIN_INFO_LEVEL InfoLevel, OUT PBYTE *Buffer);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_DSROLE_H */\n"
  },
  {
    "path": "wine/windows/dvdmedia.h",
    "content": "/*\n * Copyright (C) 2008 Maarten Lankhorst\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __DVDMEDIA_H__\n#define __DVDMEDIA_H__\n\n#define AMCONTROL_USED 0x00000001\n#define AMCONTROL_PAD_TO_4x3 0x00000002\n#define AMCONTROL_PAD_TO_16x9 0x00000004\n\ntypedef struct tagVIDEOINFOHEADER2 {\n    RECT rcSource;\n    RECT rcTarget;\n    DWORD dwBitRate;\n    DWORD dwBitErrorRate;\n    REFERENCE_TIME AvgTimePerFrame;\n    DWORD dwInterlaceFlags;\n    DWORD dwCopyProtectFlags;\n    DWORD dwPictAspectRatioX;\n    DWORD dwPictAspectRatioY;\n    union {\n        DWORD dwControlFlags;\n        DWORD dwReserved1;\n    } DUMMYUNIONNAME;\n    DWORD dwReserved2;\n    BITMAPINFOHEADER bmiHeader;\n} VIDEOINFOHEADER2;\n\ntypedef struct tagMPEG2VIDEOINFO {\n    VIDEOINFOHEADER2 hdr;\n    DWORD dwStartTimeCode;\n    DWORD cbSequenceHeader;\n    DWORD dwProfile;\n    DWORD dwLevel;\n    DWORD dwFlags;\n    DWORD dwSequenceHeader[1];\n} MPEG2VIDEOINFO;\n\n#define AMINTERLACE_IsInterlaced          0x0001\n#define AMINTERLACE_1FieldPerSample       0x0002\n#define AMINTERLACE_Field1First           0x0004\n#define AMINTERLACE_UNUSED                0x0008\n#define AMINTERLACE_FieldPatField1Only    0x0000\n#define AMINTERLACE_FieldPatField2Only    0x0010\n#define AMINTERLACE_FieldPatBothRegular   0x0020\n#define AMINTERLACE_FieldPatBothIrregular 0x0030\n#define AMINTERLACE_FieldPatternMask      0x0030\n#define AMINTERLACE_DisplayModeBobOnly    0x0000\n#define AMINTERLACE_DisplayModeWeaveOnly  0x0040\n#define AMINTERLACE_DisplayModeBobOrWeave 0x0080\n#define AMINTERLACE_DisplayModeMask       0x00c0\n\n#endif /* __DVDMEDIA_H__ */\n"
  },
  {
    "path": "wine/windows/dvoice.h",
    "content": " /*\n * DirectPlay Voice Interfaces\n *\n * Copyright (C) 2014 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __DVOICE_INCLUDED__\n#define __DVOICE_INCLUDED__\n\n#include <ole2.h>\n#include <mmsystem.h>\n#include <mmreg.h>\n#include <msacm.h>\n#include <dsound.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\nDEFINE_GUID(CLSID_DirectPlayVoiceClient, 0xb9f3eb85, 0xb781, 0x4ac1, 0x8d, 0x90, 0x93, 0xa0, 0x5e, 0xe3, 0x7d, 0x7d);\nDEFINE_GUID(CLSID_DirectPlayVoiceServer, 0xd3f5b8e6, 0x9b78, 0x4a4c, 0x94, 0xea, 0xca, 0x23, 0x97, 0xb6, 0x63, 0xd3);\nDEFINE_GUID(CLSID_DirectPlayVoiceTest,   0x0f0f094b, 0xb01c, 0x4091, 0xa1, 0x4d, 0xdd, 0x0c, 0xd8, 0x07, 0x71, 0x1a);\n\nDEFINE_GUID(IID_IDirectPlayVoiceClient,  0x1dfdc8ea, 0xbcf7, 0x41d6, 0xb2, 0x95, 0xab, 0x64, 0xb3, 0xb2, 0x33, 0x06);\nDEFINE_GUID(IID_IDirectPlayVoiceServer,  0xfaa1c173, 0x0468, 0x43b6, 0x8a, 0x2a, 0xea, 0x8a, 0x4f, 0x20, 0x76, 0xc9);\nDEFINE_GUID(IID_IDirectPlayVoiceTest,    0xd26af734, 0x208b, 0x41da, 0x82, 0x24, 0xe0, 0xce, 0x79, 0x81, 0x0b, 0xe1);\n\nDEFINE_GUID(DPVCTGUID_ADPCM,             0x699b52c1, 0xa885, 0x46a8, 0xa3, 0x08, 0x97, 0x17, 0x24, 0x19, 0xad, 0xc7);\nDEFINE_GUID(DPVCTGUID_GSM,               0x24768c60, 0x5a0d, 0x11d3, 0x9b, 0xe4, 0x52, 0x54, 0x00, 0xd9, 0x85, 0xe7);\nDEFINE_GUID(DPVCTGUID_NONE,              0x8de12fd4, 0x7cb3, 0x48ce, 0xa7, 0xe8, 0x9c, 0x47, 0xa2, 0x2e, 0x8a, 0xc5);\nDEFINE_GUID(DPVCTGUID_SC03,              0x7d82a29b, 0x2242, 0x4f82, 0x8f, 0x39, 0x5d, 0x11, 0x53, 0xdf, 0x3e, 0x41);\nDEFINE_GUID(DPVCTGUID_SC06,              0x53def900, 0x7168, 0x4633, 0xb4, 0x7f, 0xd1, 0x43, 0x91, 0x6a, 0x13, 0xc7);\nDEFINE_GUID(DPVCTGUID_TRUESPEECH,        0xd7954361, 0x5a0b, 0x11d3, 0x9b, 0xe4, 0x52, 0x54, 0x00, 0xd9, 0x85, 0xe7);\nDEFINE_GUID(DPVCTGUID_VR12,              0xfe44a9fe, 0x8ed4, 0x48bf, 0x9d, 0x66, 0x1b, 0x1a, 0xdf, 0xf9, 0xff, 0x6d);\n\n#define DPVCTGUID_DEFAULT    DPVCTGUID_SC03\n\ntypedef struct IDirectPlayVoiceClient *LPDIRECTPLAYVOICECLIENT, *PDIRECTPLAYVOICECLIENT;\ntypedef struct IDirectPlayVoiceServer *LPDIRECTPLAYVOICESERVER, *PDIRECTPLAYVOICESERVER;\ntypedef struct IDirectPlayVoiceTest   *LPDIRECTPLAYVOICETEST,   *PDIRECTPLAYVOICETEST;\n\n\ntypedef HRESULT (PASCAL *PDVMESSAGEHANDLER)(PVOID pvUserContext, DWORD dwMessageType, LPVOID lpMessage);\ntypedef PDVMESSAGEHANDLER LPDVMESSAGEHANDLER;\n\ntypedef DWORD DVID, *LPDVID, *PDVID;\n\n#define DVMSGID_MINBASE                     DVMSGID_CREATEVOICEPLAYER\n#define DVMSGID_CREATEVOICEPLAYER           0x0001\n#define DVMSGID_DELETEVOICEPLAYER           0x0002\n#define DVMSGID_SESSIONLOST                 0x0003\n#define DVMSGID_PLAYERVOICESTART            0x0004\n#define DVMSGID_PLAYERVOICESTOP             0x0005\n#define DVMSGID_RECORDSTART                 0x0006\n#define DVMSGID_RECORDSTOP                  0x0007\n#define DVMSGID_CONNECTRESULT               0x0008\n#define DVMSGID_DISCONNECTRESULT            0x0009\n#define DVMSGID_INPUTLEVEL                  0x000A\n#define DVMSGID_OUTPUTLEVEL                 0x000B\n#define DVMSGID_HOSTMIGRATED                0x000C\n#define DVMSGID_SETTARGETS                  0x000D\n#define DVMSGID_PLAYEROUTPUTLEVEL           0x000E\n#define DVMSGID_LOSTFOCUS                   0x0010\n#define DVMSGID_GAINFOCUS                   0x0011\n#define DVMSGID_LOCALHOSTSETUP              0x0012\n#define DVMSGID_MAXBASE                     DVMSGID_LOCALHOSTSETUP\n\n#define DVBUFFERAGGRESSIVENESS_MIN          0x00000001\n#define DVBUFFERAGGRESSIVENESS_MAX          0x00000064\n#define DVBUFFERAGGRESSIVENESS_DEFAULT      0x00000000\n\n#define DVBUFFERQUALITY_MIN                 0x00000001\n#define DVBUFFERQUALITY_MAX                 0x00000064\n#define DVBUFFERQUALITY_DEFAULT             0x00000000\n\n#define DVID_SERVERPLAYER                   1\n#define DVID_ALLPLAYERS                     0\n#define DVID_REMAINING                      0xFFFFFFFF\n\n#define DVINPUTLEVEL_MIN                    0x00000000\n#define DVINPUTLEVEL_MAX                    0x00000063\n\n#define DVNOTIFYPERIOD_MINPERIOD            20\n\n#define DVPLAYBACKVOLUME_DEFAULT            DSBVOLUME_MAX\n\n#define DVRECORDVOLUME_LAST                 0x00000001\n\n\n#define DVTHRESHOLD_DEFAULT                 0xFFFFFFFF\n#define DVTHRESHOLD_MIN                     0x00000000\n#define DVTHRESHOLD_MAX                     0x00000063\n#define DVTHRESHOLD_UNUSED                  0xFFFFFFFE\n\n\n#define DVSESSIONTYPE_PEER                  0x00000001\n#define DVSESSIONTYPE_MIXING                0x00000002\n#define DVSESSIONTYPE_FORWARDING            0x00000003\n#define DVSESSIONTYPE_ECHO                  0x00000004\n\n#define DVCLIENTCONFIG_RECORDMUTE           0x00000001\n#define DVCLIENTCONFIG_PLAYBACKMUTE         0x00000002\n#define DVCLIENTCONFIG_MANUALVOICEACTIVATED 0x00000004\n#define DVCLIENTCONFIG_AUTORECORDVOLUME     0x00000008\n#define DVCLIENTCONFIG_MUTEGLOBAL           0x00000010\n#define DVCLIENTCONFIG_AUTOVOICEACTIVATED   0x00000020\n#define DVCLIENTCONFIG_ECHOSUPPRESSION      0x08000000\n\n#define DVFLAGS_SYNC                        0x00000001\n#define DVFLAGS_QUERYONLY                   0x00000002\n#define DVFLAGS_NOHOSTMIGRATE               0x00000008\n#define DVFLAGS_ALLOWBACK                   0x00000010\n\n#define DVSESSION_NOHOSTMIGRATION           0x00000001\n#define DVSESSION_SERVERCONTROLTARGET       0x00000002\n\n#define DVSOUNDCONFIG_NORMALMODE            0x00000001\n#define DVSOUNDCONFIG_AUTOSELECT            0x00000002\n#define DVSOUNDCONFIG_HALFDUPLEX            0x00000004\n#define DVSOUNDCONFIG_NORECVOLAVAILABLE     0x00000010\n#define DVSOUNDCONFIG_NOFOCUS               0x20000000\n\n#define DVSOUNDCONFIG_SETCONVERSIONQUALITY  0x00000008\n#define DVSOUNDCONFIG_STRICTFOCUS           0x40000000\n#define DVPLAYERCAPS_HALFDUPLEX             0x00000001\n#define DVPLAYERCAPS_LOCAL                  0x00000002\n\ntypedef struct\n{\n    DWORD   dwSize;\n    DWORD   dwFlags;\n} DVCAPS, *LPDVCAPS, *PDVCAPS;\n\ntypedef struct\n{\n    DWORD   dwSize;\n    DWORD   dwFlags;\n    LONG    lRecordVolume;\n    LONG    lPlaybackVolume;\n    DWORD   dwThreshold;\n    DWORD   dwBufferQuality;\n    DWORD   dwBufferAggressiveness;\n    DWORD   dwNotifyPeriod;\n} DVCLIENTCONFIG, *LPDVCLIENTCONFIG, *PDVCLIENTCONFIG;\n\ntypedef struct\n{\n    DWORD   dwSize;\n    GUID    guidType;\n    LPWSTR  lpszName;\n    LPWSTR  lpszDescription;\n    DWORD   dwFlags;\n    DWORD   dwMaxBitsPerSecond;\n} DVCOMPRESSIONINFO, *LPDVCOMPRESSIONINFO, *PDVCOMPRESSIONINFO;\n\ntypedef struct\n{\n    DWORD   dwSize;\n    DWORD   dwFlags;\n    DWORD   dwSessionType;\n    GUID    guidCT;\n    DWORD   dwBufferQuality;\n    DWORD   dwBufferAggressiveness;\n} DVSESSIONDESC, *LPDVSESSIONDESC, *PDVSESSIONDESC;\n\ntypedef struct\n{\n    DWORD                   dwSize;\n    DWORD                   dwFlags;\n    GUID                    guidPlaybackDevice;\n    LPDIRECTSOUND           lpdsPlaybackDevice;\n    GUID                    guidCaptureDevice;\n    LPDIRECTSOUNDCAPTURE    lpdsCaptureDevice;\n    HWND                    hwndAppWindow;\n    LPDIRECTSOUNDBUFFER     lpdsMainBuffer;\n    DWORD                   dwMainBufferFlags;\n    DWORD                   dwMainBufferPriority;\n} DVSOUNDDEVICECONFIG, *LPDVSOUNDDEVICECONFIG, *PDVSOUNDDEVICECONFIG;\n\ntypedef struct\n{\n    DWORD    dwSize;\n    HRESULT  hrResult;\n} DVMSG_CONNECTRESULT, *LPDVMSG_CONNECTRESULT, *PDVMSG_CONNECTRESULT;\n\ntypedef struct\n{\n    DWORD    dwSize;\n    DVID     dvidPlayer;\n    DWORD    dwFlags;\n    PVOID    pvPlayerContext;\n} DVMSG_CREATEVOICEPLAYER, *LPDVMSG_CREATEVOICEPLAYER, *PDVMSG_CREATEVOICEPLAYER;\n\ntypedef struct\n{\n    DWORD   dwSize;\n    DVID    dvidPlayer;\n    PVOID\tpvPlayerContext;\n} DVMSG_DELETEVOICEPLAYER, *LPDVMSG_DELETEVOICEPLAYER, *PDVMSG_DELETEVOICEPLAYER;\n\ntypedef struct\n{\n    DWORD   dwSize;\n    HRESULT hrResult;\n} DVMSG_DISCONNECTRESULT, *LPDVMSG_DISCONNECTRESULT, *PDVMSG_DISCONNECTRESULT;\n\ntypedef struct\n{\n    DWORD                   dwSize;\n    DVID                    dvidNewHostID;\n    LPDIRECTPLAYVOICESERVER pdvServerInterface;\n} DVMSG_HOSTMIGRATED, *LPDVMSG_HOSTMIGRATED, *PDVMSG_HOSTMIGRATED;\n\ntypedef struct\n{\n    DWORD    dwSize;\n    DWORD    dwPeakLevel;\n    LONG     lRecordVolume;\n    PVOID    pvLocalPlayerContext;\n} DVMSG_INPUTLEVEL, *LPDVMSG_INPUTLEVEL, *PDVMSG_INPUTLEVEL;\n\ntypedef struct\n{\n    DWORD               dwSize;\n    PVOID               pvContext;\n    PDVMESSAGEHANDLER   pMessageHandler;\n} DVMSG_LOCALHOSTSETUP, *LPDVMSG_LOCALHOSTSETUP, *PDVMSG_LOCALHOSTSETUP;\n\ntypedef struct\n{\n    DWORD   dwSize;\n    DWORD   dwPeakLevel;\n    LONG    lOutputVolume;\n    PVOID   pvLocalPlayerContext;\n} DVMSG_OUTPUTLEVEL, *LPDVMSG_OUTPUTLEVEL, *PDVMSG_OUTPUTLEVEL;\n\ntypedef struct\n{\n    DWORD   dwSize;\n    DVID    dvidSourcePlayerID;\n    DWORD   dwPeakLevel;\n    PVOID   pvPlayerContext;\n} DVMSG_PLAYEROUTPUTLEVEL, *LPDVMSG_PLAYEROUTPUTLEVEL, *PDVMSG_PLAYEROUTPUTLEVEL;\n\ntypedef struct\n{\n    DWORD   dwSize;\n    DVID    dvidSourcePlayerID;\n    PVOID   pvPlayerContext;\n} DVMSG_PLAYERVOICESTART, *LPDVMSG_PLAYERVOICESTART, *PDVMSG_PLAYERVOICESTART;\n\ntypedef struct\n{\n    DWORD    dwSize;\n    DVID     dvidSourcePlayerID;\n    PVOID    pvPlayerContext;\n} DVMSG_PLAYERVOICESTOP, *LPDVMSG_PLAYERVOICESTOP, *PDVMSG_PLAYERVOICESTOP;\n\ntypedef struct\n{\n    DWORD    dwSize;\n    DWORD    dwPeakLevel;\n    PVOID    pvLocalPlayerContext;\n} DVMSG_RECORDSTART, *LPDVMSG_RECORDSTART, *PDVMSG_RECORDSTART;\n\ntypedef struct\n{\n    DWORD    dwSize;\n    DWORD    dwPeakLevel;\n    PVOID    pvLocalPlayerContext;\n} DVMSG_RECORDSTOP, *LPDVMSG_RECORDSTOP, *PDVMSG_RECORDSTOP;\n\ntypedef struct\n{\n    DWORD    dwSize;\n    HRESULT  hrResult;\n} DVMSG_SESSIONLOST, *LPDVMSG_SESSIONLOST, *PDVMSG_SESSIONLOST;\n\ntypedef struct\n{\n    DWORD    dwSize;\n    DWORD    dwNumTargets;\n    PDVID    pdvidTargets;\n} DVMSG_SETTARGETS, *LPDVMSG_SETTARGETS, *PDVMSG_SETTARGETS;\n\n\n#define _FACDPV  0x15\n#define MAKE_DVHRESULT( code )          MAKE_HRESULT( 1, _FACDPV, code )\n\n#define DV_OK                           S_OK\n#define DV_FULLDUPLEX                   MAKE_HRESULT(0, _FACDPV, 0x0005)\n#define DV_HALFDUPLEX                   MAKE_HRESULT(0, _FACDPV, 0x000A)\n#define DV_PENDING                      MAKE_HRESULT(0, _FACDPV, 0x0010)\n\n#define DVERR_BUFFERTOOSMALL            MAKE_DVHRESULT(0x001E)\n#define DVERR_EXCEPTION                 MAKE_DVHRESULT(0x004A)\n#define DVERR_GENERIC                   E_FAIL\n#define DVERR_INVALIDFLAGS              MAKE_DVHRESULT(0x0078)\n#define DVERR_INVALIDOBJECT             MAKE_DVHRESULT(0x0082)\n#define DVERR_INVALIDPARAM              E_INVALIDARG\n#define DVERR_INVALIDPLAYER             MAKE_DVHRESULT(0x0087)\n#define DVERR_INVALIDGROUP              MAKE_DVHRESULT(0x0091)\n#define DVERR_INVALIDHANDLE             MAKE_DVHRESULT(0x0096)\n#define DVERR_OUTOFMEMORY               E_OUTOFMEMORY\n#define DVERR_PENDING                   DV_PENDING\n#define DVERR_NOTSUPPORTED              E_NOTIMPL\n#define DVERR_NOINTERFACE               E_NOINTERFACE\n#define DVERR_SESSIONLOST               MAKE_DVHRESULT(0x012C)\n#define DVERR_NOVOICESESSION            MAKE_DVHRESULT(0x012E)\n#define DVERR_CONNECTIONLOST            MAKE_DVHRESULT(0x0168)\n#define DVERR_NOTINITIALIZED            MAKE_DVHRESULT(0x0169)\n#define DVERR_CONNECTED                 MAKE_DVHRESULT(0x016A)\n#define DVERR_NOTCONNECTED              MAKE_DVHRESULT(0x016B)\n#define DVERR_CONNECTABORTING           MAKE_DVHRESULT(0x016E)\n#define DVERR_NOTALLOWED                MAKE_DVHRESULT(0x016F)\n#define DVERR_INVALIDTARGET             MAKE_DVHRESULT(0x0170)\n#define DVERR_TRANSPORTNOTHOST          MAKE_DVHRESULT(0x0171)\n#define DVERR_COMPRESSIONNOTSUPPORTED   MAKE_DVHRESULT(0x0172)\n#define DVERR_ALREADYPENDING            MAKE_DVHRESULT(0x0173)\n#define DVERR_SOUNDINITFAILURE          MAKE_DVHRESULT(0x0174)\n#define DVERR_TIMEOUT                   MAKE_DVHRESULT(0x0175)\n#define DVERR_CONNECTABORTED            MAKE_DVHRESULT(0x0176)\n#define DVERR_NO3DSOUND                 MAKE_DVHRESULT(0x0177)\n#define DVERR_ALREADYBUFFERED           MAKE_DVHRESULT(0x0178)\n#define DVERR_NOTBUFFERED               MAKE_DVHRESULT(0x0179)\n#define DVERR_HOSTING                   MAKE_DVHRESULT(0x017A)\n#define DVERR_NOTHOSTING                MAKE_DVHRESULT(0x017B)\n#define DVERR_INVALIDDEVICE             MAKE_DVHRESULT(0x017C)\n#define DVERR_RECORDSYSTEMERROR         MAKE_DVHRESULT(0x017D)\n#define DVERR_PLAYBACKSYSTEMERROR       MAKE_DVHRESULT(0x017E)\n#define DVERR_SENDERROR                 MAKE_DVHRESULT(0x017F)\n#define DVERR_USERCANCEL                MAKE_DVHRESULT(0x0180)\n#define DVERR_RUNSETUP                  MAKE_DVHRESULT(0x0183)\n#define DVERR_INCOMPATIBLEVERSION       MAKE_DVHRESULT(0x0184)\n#define DVERR_INITIALIZED               MAKE_DVHRESULT(0x0187)\n#define DVERR_INVALIDPOINTER            E_POINTER\n#define DVERR_NOTRANSPORT               MAKE_DVHRESULT(0x0188)\n#define DVERR_NOCALLBACK                MAKE_DVHRESULT(0x0189)\n#define DVERR_TRANSPORTNOTINIT          MAKE_DVHRESULT(0x018A)\n#define DVERR_TRANSPORTNOSESSION        MAKE_DVHRESULT(0x018B)\n#define DVERR_TRANSPORTNOPLAYER         MAKE_DVHRESULT(0x018C)\n#define DVERR_USERBACK                  MAKE_DVHRESULT(0x018D)\n#define DVERR_NORECVOLAVAILABLE         MAKE_DVHRESULT(0x018E)\n#define DVERR_INVALIDBUFFER             MAKE_DVHRESULT(0x018F)\n#define DVERR_LOCKEDBUFFER              MAKE_DVHRESULT(0x0190)\n\n#undef INTERFACE\n#define INTERFACE IDirectPlayVoiceClient\nDECLARE_INTERFACE_(IDirectPlayVoiceClient, IUnknown)\n{\n    STDMETHOD(QueryInterface)      (THIS_ REFIID riid, PVOID *ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)       (THIS) PURE;\n    STDMETHOD_(ULONG,Release)      (THIS) PURE;\n    STDMETHOD(Initialize)          (THIS_ LPUNKNOWN, PDVMESSAGEHANDLER, PVOID, PDWORD, DWORD) PURE;\n    STDMETHOD(Connect)             (THIS_ PDVSOUNDDEVICECONFIG, PDVCLIENTCONFIG, DWORD) PURE;\n    STDMETHOD(Disconnect)          (THIS_ DWORD) PURE;\n    STDMETHOD(GetSessionDesc)      (THIS_ PDVSESSIONDESC) PURE;\n    STDMETHOD(GetClientConfig)     (THIS_ PDVCLIENTCONFIG) PURE;\n    STDMETHOD(SetClientConfig)     (THIS_ PDVCLIENTCONFIG) PURE;\n    STDMETHOD(GetCaps)             (THIS_ PDVCAPS) PURE;\n    STDMETHOD(GetCompressionTypes) (THIS_ PVOID, PDWORD, PDWORD, DWORD) PURE;\n    STDMETHOD(SetTransmitTargets)  (THIS_ PDVID, DWORD, DWORD) PURE;\n    STDMETHOD(GetTransmitTargets)  (THIS_ PDVID, PDWORD, DWORD) PURE;\n    STDMETHOD(Create3DSoundBuffer) (THIS_ DVID, LPDIRECTSOUNDBUFFER, DWORD, DWORD, LPDIRECTSOUND3DBUFFER *) PURE;\n    STDMETHOD(Delete3DSoundBuffer) (THIS_ DVID, LPDIRECTSOUND3DBUFFER *) PURE;\n    STDMETHOD(SetNotifyMask)       (THIS_ PDWORD, DWORD) PURE;\n    STDMETHOD(GetSoundDeviceConfig)(THIS_ PDVSOUNDDEVICECONFIG, PDWORD) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE IDirectPlayVoiceServer\nDECLARE_INTERFACE_(IDirectPlayVoiceServer, IUnknown)\n{\n    STDMETHOD(QueryInterface)      (THIS_ REFIID riid, LPVOID *ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)       (THIS) PURE;\n    STDMETHOD_(ULONG,Release)      (THIS) PURE;\n    STDMETHOD(Initialize)          (THIS_ LPUNKNOWN, PDVMESSAGEHANDLER, PVOID, LPDWORD, DWORD) PURE;\n    STDMETHOD(StartSession)        (THIS_ PDVSESSIONDESC, DWORD) PURE;\n    STDMETHOD(StopSession)         (THIS_ DWORD) PURE;\n    STDMETHOD(GetSessionDesc)      (THIS_ PDVSESSIONDESC) PURE;\n    STDMETHOD(SetSessionDesc)      (THIS_ PDVSESSIONDESC) PURE;\n    STDMETHOD(GetCaps)             (THIS_ PDVCAPS) PURE;\n    STDMETHOD(GetCompressionTypes) (THIS_ PVOID, PDWORD, PDWORD, DWORD) PURE;\n    STDMETHOD(SetTransmitTargets)  (THIS_ DVID, PDVID, DWORD, DWORD) PURE;\n    STDMETHOD(GetTransmitTargets)  (THIS_ DVID, PDVID, PDWORD, DWORD) PURE;\n    STDMETHOD(SetNotifyMask)       (THIS_ PDWORD, DWORD) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE IDirectPlayVoiceTest\nDECLARE_INTERFACE_(IDirectPlayVoiceTest, IUnknown)\n{\n    STDMETHOD(QueryInterface)  (THIS_ REFIID riid, PVOID *ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)   (THIS) PURE;\n    STDMETHOD_(ULONG,Release)  (THIS) PURE;\n    STDMETHOD(CheckAudioSetup) (THIS_ const GUID *, const GUID *, HWND, DWORD) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n\n#define IDirectPlayVoiceClient_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectPlayVoiceClient_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirectPlayVoiceClient_Release(p)                   (p)->lpVtbl->Release(p)\n\n#define IDirectPlayVoiceClient_Initialize(p,a,b,c,d,e)          (p)->lpVtbl->Initialize(p,a,b,c,d,e)\n#define IDirectPlayVoiceClient_Connect(p,a,b,c)                 (p)->lpVtbl->Connect(p,a,b,c)\n#define IDirectPlayVoiceClient_Disconnect(p,a)                  (p)->lpVtbl->Disconnect(p,a)\n#define IDirectPlayVoiceClient_GetSessionDesc(p,a)              (p)->lpVtbl->GetSessionDesc(p,a)\n#define IDirectPlayVoiceClient_GetClientConfig(p,a)             (p)->lpVtbl->GetClientConfig(p,a)\n#define IDirectPlayVoiceClient_SetClientConfig(p,a)             (p)->lpVtbl->SetClientConfig(p,a)\n#define IDirectPlayVoiceClient_GetCaps(p,a)                     (p)->lpVtbl->GetCaps(p,a)\n#define IDirectPlayVoiceClient_GetCompressionTypes(p,a,b,c,d)   (p)->lpVtbl->GetCompressionTypes(p,a,b,c,d)\n#define IDirectPlayVoiceClient_SetTransmitTargets(p,a,b,c)      (p)->lpVtbl->SetTransmitTargets(p,a,b,c)\n#define IDirectPlayVoiceClient_GetTransmitTargets(p,a,b,c)      (p)->lpVtbl->GetTransmitTargets(p,a,b,c)\n#define IDirectPlayVoiceClient_Create3DSoundBuffer(p,a,b,c,d,e) (p)->lpVtbl->Create3DSoundBuffer(p,a,b,c,d,e)\n#define IDirectPlayVoiceClient_Delete3DSoundBuffer(p,a,b)       (p)->lpVtbl->Delete3DSoundBuffer(p,a,b)\n#define IDirectPlayVoiceClient_SetNotifyMask(p,a,b)             (p)->lpVtbl->SetNotifyMask(p,a,b)\n#define IDirectPlayVoiceClient_GetSoundDeviceConfig(p,a,b)      (p)->lpVtbl->GetSoundDeviceConfig(p,a,b)\n\n#define IDirectPlayVoiceServer_QueryInterface(p,a,b)          (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectPlayVoiceServer_AddRef(p)                      (p)->lpVtbl->AddRef(p)\n#define IDirectPlayVoiceServer_Release(p)                     (p)->lpVtbl->Release(p)\n\n#define IDirectPlayVoiceServer_Initialize(p,a,b,c,d,e)        (p)->lpVtbl->Initialize(p,a,b,c,d,e)\n#define IDirectPlayVoiceServer_StartSession(p,a,b)            (p)->lpVtbl->StartSession(p,a,b)\n#define IDirectPlayVoiceServer_StopSession(p,a)               (p)->lpVtbl->StopSession(p,a)\n#define IDirectPlayVoiceServer_GetSessionDesc(p,a)            (p)->lpVtbl->GetSessionDesc(p,a)\n#define IDirectPlayVoiceServer_SetSessionDesc(p,a)            (p)->lpVtbl->SetSessionDesc(p,a)\n#define IDirectPlayVoiceServer_GetCaps(p,a)                   (p)->lpVtbl->GetCaps(p,a)\n#define IDirectPlayVoiceServer_GetCompressionTypes(p,a,b,c,d) (p)->lpVtbl->GetCompressionTypes(p,a,b,c,d)\n#define IDirectPlayVoiceServer_SetTransmitTargets(p,a,b,c,d)  (p)->lpVtbl->SetTransmitTargets(p,a,b,c,d)\n#define IDirectPlayVoiceServer_GetTransmitTargets(p,a,b,c,d)  (p)->lpVtbl->GetTransmitTargets(p,a,b,c,d)\n#define IDirectPlayVoiceServer_SetNotifyMask(p,a,b)           (p)->lpVtbl->SetNotifyMask(p,a,b)\n#define IDirectPlayVoiceTest_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectPlayVoiceTest_AddRef(p)                        (p)->lpVtbl->AddRef(p)\n#define IDirectPlayVoiceTest_Release(p)                       (p)->lpVtbl->Release(p)\n#define IDirectPlayVoiceTest_CheckAudioSetup(p,a,b,c,d)       (p)->lpVtbl->CheckAudioSetup(p,a,b,c,d)\n\n\n#else /* C++ */\n\n#define IDirectPlayVoiceClient_QueryInterface(p,a,b)            (p)->QueryInterface(a,b)\n#define IDirectPlayVoiceClient_AddRef(p)                        (p)->AddRef()\n#define IDirectPlayVoiceClient_Release(p)                       (p)->Release()\n#define IDirectPlayVoiceClient_Initialize(p,a,b,c,d,e)          (p)->Initialize(a,b,c,d,e)\n#define IDirectPlayVoiceClient_Connect(p,a,b,c)                 (p)->Connect(a,b,c)\n#define IDirectPlayVoiceClient_Disconnect(p,a)                  (p)->Disconnect(a)\n#define IDirectPlayVoiceClient_GetSessionDesc(p,a)              (p)->GetSessionDesc(a)\n#define IDirectPlayVoiceClient_GetClientConfig(p,a)             (p)->GetClientConfig(a)\n#define IDirectPlayVoiceClient_SetClientConfig(p,a)             (p)->SetClientConfig(a)\n#define IDirectPlayVoiceClient_GetCaps(p,a)                     (p)->GetCaps(a)\n#define IDirectPlayVoiceClient_GetCompressionTypes(p,a,b,c,d)   (p)->GetCompressionTypes(a,b,c,d)\n#define IDirectPlayVoiceClient_SetTransmitTargets(p,a,b,c)      (p)->SetTransmitTargets(a,b,c)\n#define IDirectPlayVoiceClient_GetTransmitTargets(p,a,b,c)      (p)->GetTransmitTargets(a,b,c)\n#define IDirectPlayVoiceClient_Create3DSoundBuffer(p,a,b,c,d,e) (p)->Create3DSoundBuffer(a,b,c,d,e)\n#define IDirectPlayVoiceClient_Delete3DSoundBuffer(p,a,b)       (p)->Delete3DSoundBuffer(a,b)\n#define IDirectPlayVoiceClient_SetNotifyMask(p,a,b)             (p)->SetNotifyMask(a,b)\n#define IDirectPlayVoiceClient_GetSoundDeviceConfig(p,a,b)      (p)->GetSoundDeviceConfig(a,b)\n\n#define IDirectPlayVoiceServer_QueryInterface(p,a,b)          (p)->QueryInterface(a,b)\n#define IDirectPlayVoiceServer_AddRef(p)                      (p)->AddRef()\n#define IDirectPlayVoiceServer_Release(p)                     (p)->Release()\n#define IDirectPlayVoiceServer_Initialize(p,a,b,c,d,e)        (p)->Initialize(a,b,c,d,e)\n#define IDirectPlayVoiceServer_StartSession(p,a,b)            (p)->StartSession(a,b)\n#define IDirectPlayVoiceServer_StopSession(p,a)               (p)->StopSession(a)\n#define IDirectPlayVoiceServer_GetSessionDesc(p,a)            (p)->GetSessionDesc(a)\n#define IDirectPlayVoiceServer_SetSessionDesc(p,a)            (p)->SetSessionDesc(a)\n#define IDirectPlayVoiceServer_GetCaps(p,a)                   (p)->GetCaps(a)\n#define IDirectPlayVoiceServer_GetCompressionTypes(p,a,b,c,d) (p)->GetCompressionTypes(a,b,c,d)\n#define IDirectPlayVoiceServer_SetTransmitTargets(p,a,b,c,d)  (p)->SetTransmitTargets(a,b,c,d)\n#define IDirectPlayVoiceServer_GetTransmitTargets(p,a,b,c,d)  (p)->GetTransmitTargets(a,b,c,d)\n#define IDirectPlayVoiceServer_SetNotifyMask(p,a,b)           (p)->SetNotifyMask(a,b)\n\n#define IDirectPlayVoiceTest_QueryInterface(p,a,b)            (p)->QueryInterface(a,b)\n#define IDirectPlayVoiceTest_AddRef(p)                        (p)->AddRef()\n#define IDirectPlayVoiceTest_Release(p)                       (p)->Release()\n#define IDirectPlayVoiceTest_CheckAudioSetup(p,a,b,c,d)       (p)->CheckAudioSetup(a,b,c,d)\n\n#endif\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __DVOICE_INCLUDED__ */\n"
  },
  {
    "path": "wine/windows/dwmapi.h",
    "content": "/*\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DWMAPI_H\n#define __WINE_DWMAPI_H\n\n#include \"wtypes.h\"\n#include \"uxtheme.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef DWMAPI\n# define DWMAPI        STDAPI\n# define DWMAPI_(type) STDAPI_(type)\n#endif\n\nDECLARE_HANDLE(HTHUMBNAIL);\ntypedef HTHUMBNAIL *PHTHUMBNAIL;\n\n#include <pshpack1.h>\n\ntypedef ULONGLONG DWM_FRAME_COUNT;\ntypedef ULONGLONG QPC_TIME;\n\ntypedef enum _DWM_SOURCE_FRAME_SAMPLING {\n    DWM_SOURCE_FRAME_SAMPLING_POINT,\n    DWM_SOURCE_FRAME_SAMPLING_COVERAGE,\n    DWM_SOURCE_FRAME_SAMPLING_LAST\n} DWM_SOURCE_FRAME_SAMPLING;\n\ntypedef struct _UNSIGNED_RATIO {\n    UINT32 uiNumerator;\n    UINT32 uiDenominator;\n} UNSIGNED_RATIO;\n\ntypedef struct _DWM_TIMING_INFO {\n    UINT32 cbSize;\n    UNSIGNED_RATIO rateRefresh;\n    QPC_TIME qpcRefreshPeriod;\n    UNSIGNED_RATIO rateCompose;\n    QPC_TIME qpcVBlank;\n    DWM_FRAME_COUNT cRefresh;\n    UINT cDXRefresh;\n    QPC_TIME qpcCompose;\n    DWM_FRAME_COUNT cFrame;\n    UINT cDXPresent;\n    DWM_FRAME_COUNT cRefreshFrame;\n    DWM_FRAME_COUNT cFrameSubmitted;\n    UINT cDXPresentSubmitted;\n    DWM_FRAME_COUNT cFrameConfirmed;\n    UINT cDXPresentConfirmed;\n    DWM_FRAME_COUNT cRefreshConfirmed;\n    UINT cDXRefreshConfirmed;\n    DWM_FRAME_COUNT cFramesLate;\n    UINT cFramesOutstanding;\n    DWM_FRAME_COUNT cFrameDisplayed;\n    QPC_TIME qpcFrameDisplayed;\n    DWM_FRAME_COUNT cRefreshFrameDisplayed;\n    DWM_FRAME_COUNT cFrameComplete;\n    QPC_TIME qpcFrameComplete;\n    DWM_FRAME_COUNT cFramePending;\n    QPC_TIME qpcFramePending;\n    DWM_FRAME_COUNT cFramesDisplayed;\n    DWM_FRAME_COUNT cFramesComplete;\n    DWM_FRAME_COUNT cFramesPending;\n    DWM_FRAME_COUNT cFramesAvailable;\n    DWM_FRAME_COUNT cFramesDropped;\n    DWM_FRAME_COUNT cFramesMissed;\n    DWM_FRAME_COUNT cRefreshNextDisplayed;\n    DWM_FRAME_COUNT cRefreshNextPresented;\n    DWM_FRAME_COUNT cRefreshesDisplayed;\n    DWM_FRAME_COUNT cRefreshesPresented;\n    DWM_FRAME_COUNT cRefreshStarted;\n    ULONGLONG cPixelsReceived;\n    ULONGLONG cPixelsDrawn;\n    DWM_FRAME_COUNT cBuffersEmpty;\n} DWM_TIMING_INFO;\n\ntypedef struct _MilMatrix3x2D\n{\n    DOUBLE S_11;\n    DOUBLE S_12;\n    DOUBLE S_21;\n    DOUBLE S_22;\n    DOUBLE DX;\n    DOUBLE DY;\n} MilMatrix3x2D;\n\n#define DWM_BB_ENABLE                 0x00000001\n#define DWM_BB_BLURREGION             0x00000002\n#define DWM_BB_TRANSITIONONMAXIMIZED  0x00000004\n\ntypedef struct _DWM_BLURBEHIND\n{\n    DWORD dwFlags;\n    BOOL fEnable;\n    HRGN hRgnBlur;\n    BOOL fTransitionOnMaximized;\n} DWM_BLURBEHIND, *PDWM_BLURBEHIND;\n\ntypedef struct _DWM_THUMBNAIL_PROPERTIES\n{\n    DWORD dwFlags;\n    RECT  rcDestination;\n    RECT  rcSource;\n    BYTE  opacity;\n    BOOL  fVisible;\n    BOOL  fSourceClientAreaOnly;\n} DWM_THUMBNAIL_PROPERTIES, *PDWM_THUMBNAIL_PROPERTIES;\n\ntypedef struct _DWM_PRESENT_PARAMETERS {\n    UINT32 cbSize;\n    BOOL fQueue;\n    DWM_FRAME_COUNT cRefreshStart;\n    UINT cBuffer;\n    BOOL fUseSourceRate;\n    UNSIGNED_RATIO rateSource;\n    UINT cRefreshesPerFrame;\n    DWM_SOURCE_FRAME_SAMPLING eSampling;\n} DWM_PRESENT_PARAMETERS;\n\n#include <poppack.h>\n\nDWMAPI_(BOOL) DwmDefWindowProc(HWND, UINT, WPARAM, LPARAM, LRESULT*);\nDWMAPI DwmEnableBlurBehindWindow(HWND, const DWM_BLURBEHIND *);\nDWMAPI DwmEnableComposition(UINT);\nDWMAPI DwmEnableMMCSS(BOOL);\nDWMAPI DwmExtendFrameIntoClientArea(HWND,const MARGINS*);\nDWMAPI DwmGetColorizationColor(DWORD*,BOOL);\nDWMAPI DwmGetCompositionTimingInfo(HWND,DWM_TIMING_INFO*);\nDWMAPI DwmInvalidateIconicBitmaps(HWND);\nDWMAPI DwmIsCompositionEnabled(BOOL*);\nDWMAPI DwmRegisterThumbnail(HWND, HWND, PHTHUMBNAIL);\nDWMAPI DwmSetPresentParameters(HWND, DWM_PRESENT_PARAMETERS *);\nDWMAPI DwmSetWindowAttribute(HWND, DWORD, LPCVOID, DWORD);\nDWMAPI DwmUnregisterThumbnail(HTHUMBNAIL);\nDWMAPI DwmUpdateThumbnailProperties(HTHUMBNAIL, const DWM_THUMBNAIL_PROPERTIES *);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* __WINE_DWMAPI_H */\n"
  },
  {
    "path": "wine/windows/dwrite.idl",
    "content": "/*\n * Copyright 2012 Nikolay Sivov for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\nimport \"dcommon.idl\";\n\ninterface IDWriteFactory;\ninterface IDWriteFontCollection;\ninterface IDWriteFontFamily;\ninterface IDWriteFontFace;\ninterface IDWriteInlineObject;\n\ninterface ID2D1SimplifiedGeometrySink;\ntypedef ID2D1SimplifiedGeometrySink IDWriteGeometrySink;\n\ncpp_quote(\"#ifndef _WINDEF_\")\n/* already defined in windef.h but needed for WIDL */\ntypedef void *HMONITOR;\ncpp_quote(\"#endif /* _WINDEF_ */\")\n\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef GetGlyphIndices\")\ncpp_quote(\"#endif\")\n\ntypedef enum DWRITE_FACTORY_TYPE\n{\n    DWRITE_FACTORY_TYPE_SHARED,\n    DWRITE_FACTORY_TYPE_ISOLATED\n} DWRITE_FACTORY_TYPE;\n\ntypedef enum DWRITE_FONT_FILE_TYPE\n{\n    DWRITE_FONT_FILE_TYPE_UNKNOWN,\n    DWRITE_FONT_FILE_TYPE_CFF,\n    DWRITE_FONT_FILE_TYPE_TRUETYPE,\n    DWRITE_FONT_FILE_TYPE_OPENTYPE_COLLECTION,\n    DWRITE_FONT_FILE_TYPE_TYPE1_PFM,\n    DWRITE_FONT_FILE_TYPE_TYPE1_PFB,\n    DWRITE_FONT_FILE_TYPE_VECTOR,\n    DWRITE_FONT_FILE_TYPE_BITMAP,\n    DWRITE_FONT_FILE_TYPE_TRUETYPE_COLLECTION = DWRITE_FONT_FILE_TYPE_OPENTYPE_COLLECTION\n} DWRITE_FONT_FILE_TYPE;\n\ntypedef enum DWRITE_FONT_FACE_TYPE\n{\n    DWRITE_FONT_FACE_TYPE_CFF,\n    DWRITE_FONT_FACE_TYPE_TRUETYPE,\n    DWRITE_FONT_FACE_TYPE_OPENTYPE_COLLECTION,\n    DWRITE_FONT_FACE_TYPE_TYPE1,\n    DWRITE_FONT_FACE_TYPE_VECTOR,\n    DWRITE_FONT_FACE_TYPE_BITMAP,\n    DWRITE_FONT_FACE_TYPE_UNKNOWN,\n    DWRITE_FONT_FACE_TYPE_RAW_CFF,\n    DWRITE_FONT_FACE_TYPE_TRUETYPE_COLLECTION = DWRITE_FONT_FACE_TYPE_OPENTYPE_COLLECTION\n} DWRITE_FONT_FACE_TYPE;\n\ntypedef enum DWRITE_FONT_WEIGHT\n{\n    DWRITE_FONT_WEIGHT_THIN = 100,\n    DWRITE_FONT_WEIGHT_EXTRA_LIGHT = 200,\n    DWRITE_FONT_WEIGHT_ULTRA_LIGHT = 200,\n    DWRITE_FONT_WEIGHT_LIGHT = 300,\n    DWRITE_FONT_WEIGHT_SEMI_LIGHT = 350,\n    DWRITE_FONT_WEIGHT_NORMAL = 400,\n    DWRITE_FONT_WEIGHT_REGULAR = 400,\n    DWRITE_FONT_WEIGHT_MEDIUM = 500,\n    DWRITE_FONT_WEIGHT_DEMI_BOLD = 600,\n    DWRITE_FONT_WEIGHT_SEMI_BOLD = 600,\n    DWRITE_FONT_WEIGHT_BOLD = 700,\n    DWRITE_FONT_WEIGHT_EXTRA_BOLD = 800,\n    DWRITE_FONT_WEIGHT_ULTRA_BOLD = 800,\n    DWRITE_FONT_WEIGHT_BLACK = 900,\n    DWRITE_FONT_WEIGHT_HEAVY = 900,\n    DWRITE_FONT_WEIGHT_EXTRA_BLACK = 950,\n    DWRITE_FONT_WEIGHT_ULTRA_BLACK = 950\n} DWRITE_FONT_WEIGHT;\n\ntypedef enum DWRITE_FONT_STRETCH\n{\n    DWRITE_FONT_STRETCH_UNDEFINED = 0,\n    DWRITE_FONT_STRETCH_ULTRA_CONDENSED = 1,\n    DWRITE_FONT_STRETCH_EXTRA_CONDENSED = 2,\n    DWRITE_FONT_STRETCH_CONDENSED = 3,\n    DWRITE_FONT_STRETCH_SEMI_CONDENSED = 4,\n    DWRITE_FONT_STRETCH_NORMAL = 5,\n    DWRITE_FONT_STRETCH_MEDIUM = 5,\n    DWRITE_FONT_STRETCH_SEMI_EXPANDED = 6,\n    DWRITE_FONT_STRETCH_EXPANDED = 7,\n    DWRITE_FONT_STRETCH_EXTRA_EXPANDED = 8,\n    DWRITE_FONT_STRETCH_ULTRA_EXPANDED = 9\n} DWRITE_FONT_STRETCH;\n\ntypedef enum DWRITE_FONT_STYLE\n{\n    DWRITE_FONT_STYLE_NORMAL,\n    DWRITE_FONT_STYLE_OBLIQUE,\n    DWRITE_FONT_STYLE_ITALIC\n} DWRITE_FONT_STYLE;\n\ntypedef enum DWRITE_INFORMATIONAL_STRING_ID\n{\n    DWRITE_INFORMATIONAL_STRING_NONE,\n    DWRITE_INFORMATIONAL_STRING_COPYRIGHT_NOTICE,\n    DWRITE_INFORMATIONAL_STRING_VERSION_STRINGS,\n    DWRITE_INFORMATIONAL_STRING_TRADEMARK,\n    DWRITE_INFORMATIONAL_STRING_MANUFACTURER,\n    DWRITE_INFORMATIONAL_STRING_DESIGNER,\n    DWRITE_INFORMATIONAL_STRING_DESIGNER_URL,\n    DWRITE_INFORMATIONAL_STRING_DESCRIPTION,\n    DWRITE_INFORMATIONAL_STRING_FONT_VENDOR_URL,\n    DWRITE_INFORMATIONAL_STRING_LICENSE_DESCRIPTION,\n    DWRITE_INFORMATIONAL_STRING_LICENSE_INFO_URL,\n    DWRITE_INFORMATIONAL_STRING_WIN32_FAMILY_NAMES,\n    DWRITE_INFORMATIONAL_STRING_WIN32_SUBFAMILY_NAMES,\n    DWRITE_INFORMATIONAL_STRING_PREFERRED_FAMILY_NAMES,\n    DWRITE_INFORMATIONAL_STRING_PREFERRED_SUBFAMILY_NAMES,\n    DWRITE_INFORMATIONAL_STRING_SAMPLE_TEXT,\n    DWRITE_INFORMATIONAL_STRING_FULL_NAME,\n    DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_NAME,\n    DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_CID_NAME\n} DWRITE_INFORMATIONAL_STRING_ID;\n\ntypedef enum DWRITE_FONT_SIMULATIONS\n{\n    DWRITE_FONT_SIMULATIONS_NONE,\n    DWRITE_FONT_SIMULATIONS_BOLD,\n    DWRITE_FONT_SIMULATIONS_OBLIQUE\n} DWRITE_FONT_SIMULATIONS;\n\ntypedef enum DWRITE_PIXEL_GEOMETRY\n{\n    DWRITE_PIXEL_GEOMETRY_FLAT,\n    DWRITE_PIXEL_GEOMETRY_RGB,\n    DWRITE_PIXEL_GEOMETRY_BGR\n} DWRITE_PIXEL_GEOMETRY;\n\ntypedef enum DWRITE_RENDERING_MODE\n{\n    DWRITE_RENDERING_MODE_DEFAULT,\n    DWRITE_RENDERING_MODE_ALIASED,\n    DWRITE_RENDERING_MODE_GDI_CLASSIC,\n    DWRITE_RENDERING_MODE_GDI_NATURAL,\n    DWRITE_RENDERING_MODE_NATURAL,\n    DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC,\n    DWRITE_RENDERING_MODE_OUTLINE,\n    DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC = DWRITE_RENDERING_MODE_GDI_CLASSIC,\n    DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL = DWRITE_RENDERING_MODE_GDI_NATURAL,\n    DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL = DWRITE_RENDERING_MODE_NATURAL,\n    DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC = DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC\n} DWRITE_RENDERING_MODE;\n\ntypedef enum DWRITE_TEXT_ALIGNMENT\n{\n    DWRITE_TEXT_ALIGNMENT_LEADING,\n    DWRITE_TEXT_ALIGNMENT_TRAILING,\n    DWRITE_TEXT_ALIGNMENT_CENTER,\n    DWRITE_TEXT_ALIGNMENT_JUSTIFIED\n} DWRITE_TEXT_ALIGNMENT;\n\ntypedef enum DWRITE_PARAGRAPH_ALIGNMENT\n{\n    DWRITE_PARAGRAPH_ALIGNMENT_NEAR,\n    DWRITE_PARAGRAPH_ALIGNMENT_FAR,\n    DWRITE_PARAGRAPH_ALIGNMENT_CENTER\n} DWRITE_PARAGRAPH_ALIGNMENT;\n\ntypedef enum DWRITE_WORD_WRAPPING\n{\n    DWRITE_WORD_WRAPPING_WRAP,\n    DWRITE_WORD_WRAPPING_NO_WRAP,\n    DWRITE_WORD_WRAPPING_EMERGENCY_BREAK,\n    DWRITE_WORD_WRAPPING_WHOLE_WORD,\n    DWRITE_WORD_WRAPPING_CHARACTER\n} DWRITE_WORD_WRAPPING;\n\ntypedef enum DWRITE_READING_DIRECTION\n{\n    DWRITE_READING_DIRECTION_LEFT_TO_RIGHT,\n    DWRITE_READING_DIRECTION_RIGHT_TO_LEFT,\n    DWRITE_READING_DIRECTION_TOP_TO_BOTTOM,\n    DWRITE_READING_DIRECTION_BOTTOM_TO_TOP\n} DWRITE_READING_DIRECTION;\n\ntypedef enum DWRITE_FLOW_DIRECTION\n{\n    DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM,\n    DWRITE_FLOW_DIRECTION_BOTTOM_TO_TOP,\n    DWRITE_FLOW_DIRECTION_LEFT_TO_RIGHT,\n    DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT\n} DWRITE_FLOW_DIRECTION;\n\ntypedef enum DWRITE_TRIMMING_GRANULARITY\n{\n    DWRITE_TRIMMING_GRANULARITY_NONE,\n    DWRITE_TRIMMING_GRANULARITY_CHARACTER,\n    DWRITE_TRIMMING_GRANULARITY_WORD\n} DWRITE_TRIMMING_GRANULARITY;\n\ntypedef enum DWRITE_BREAK_CONDITION\n{\n    DWRITE_BREAK_CONDITION_NEUTRAL,\n    DWRITE_BREAK_CONDITION_CAN_BREAK,\n    DWRITE_BREAK_CONDITION_MAY_NOT_BREAK,\n    DWRITE_BREAK_CONDITION_MUST_BREAK\n} DWRITE_BREAK_CONDITION;\n\ntypedef enum DWRITE_LINE_SPACING_METHOD\n{\n    DWRITE_LINE_SPACING_METHOD_DEFAULT,\n    DWRITE_LINE_SPACING_METHOD_UNIFORM,\n    DWRITE_LINE_SPACING_METHOD_PROPORTIONAL\n} DWRITE_LINE_SPACING_METHOD;\n\ncpp_quote(\"#define DWRITE_MAKE_OPENTYPE_TAG(a,b,c,d) ( \\\\\")\ncpp_quote(\"    ((UINT32)(UINT8)(d) << 24) | \\\\\")\ncpp_quote(\"    ((UINT32)(UINT8)(c) << 16) | \\\\\")\ncpp_quote(\"    ((UINT32)(UINT8)(b) <<  8) | \\\\\")\ncpp_quote(\"     (UINT32)(UINT8)(a))\")\n\ntypedef enum DWRITE_FONT_FEATURE_TAG\n{\n    DWRITE_FONT_FEATURE_TAG_ALTERNATIVE_FRACTIONS           = 0x63726661, /* 'afrc' */\n    DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS_FROM_CAPITALS   = 0x63703263, /* 'c2pc' */\n    DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS_FROM_CAPITALS    = 0x63733263, /* 'c2sc' */\n    DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_ALTERNATES           = 0x746c6163, /* 'calt' */\n    DWRITE_FONT_FEATURE_TAG_CASE_SENSITIVE_FORMS            = 0x65736163, /* 'case' */\n    DWRITE_FONT_FEATURE_TAG_GLYPH_COMPOSITION_DECOMPOSITION = 0x706d6363, /* 'ccmp' */\n    DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_LIGATURES            = 0x67696c63, /* 'clig' */\n    DWRITE_FONT_FEATURE_TAG_CAPITAL_SPACING                 = 0x70737063, /* 'cpsp' */\n    DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_SWASH                = 0x68777363, /* 'cswh' */\n    DWRITE_FONT_FEATURE_TAG_CURSIVE_POSITIONING             = 0x73727563, /* 'curs' */\n    DWRITE_FONT_FEATURE_TAG_DEFAULT                         = 0x746c6664, /* 'dflt' */\n    DWRITE_FONT_FEATURE_TAG_DISCRETIONARY_LIGATURES         = 0x67696c64, /* 'dlig' */\n    DWRITE_FONT_FEATURE_TAG_EXPERT_FORMS                    = 0x74707865, /* 'expt' */\n    DWRITE_FONT_FEATURE_TAG_FRACTIONS                       = 0x63617266, /* 'frac' */\n    DWRITE_FONT_FEATURE_TAG_FULL_WIDTH                      = 0x64697766, /* 'fwid' */\n    DWRITE_FONT_FEATURE_TAG_HALF_FORMS                      = 0x666c6168, /* 'half' */\n    DWRITE_FONT_FEATURE_TAG_HALANT_FORMS                    = 0x6e6c6168, /* 'haln' */\n    DWRITE_FONT_FEATURE_TAG_ALTERNATE_HALF_WIDTH            = 0x746c6168, /* 'halt' */\n    DWRITE_FONT_FEATURE_TAG_HISTORICAL_FORMS                = 0x74736968, /* 'hist' */\n    DWRITE_FONT_FEATURE_TAG_HORIZONTAL_KANA_ALTERNATES      = 0x616e6b68, /* 'hkna' */\n    DWRITE_FONT_FEATURE_TAG_HISTORICAL_LIGATURES            = 0x67696c68, /* 'hlig' */\n    DWRITE_FONT_FEATURE_TAG_HALF_WIDTH                      = 0x64697768, /* 'hwid' */\n    DWRITE_FONT_FEATURE_TAG_HOJO_KANJI_FORMS                = 0x6f6a6f68, /* 'hojo' */\n    DWRITE_FONT_FEATURE_TAG_JIS04_FORMS                     = 0x3430706a, /* 'jp04' */\n    DWRITE_FONT_FEATURE_TAG_JIS78_FORMS                     = 0x3837706a, /* 'jp78' */\n    DWRITE_FONT_FEATURE_TAG_JIS83_FORMS                     = 0x3338706a, /* 'jp83' */\n    DWRITE_FONT_FEATURE_TAG_JIS90_FORMS                     = 0x3039706a, /* 'jp90' */\n    DWRITE_FONT_FEATURE_TAG_KERNING                         = 0x6e72656b, /* 'kern' */\n    DWRITE_FONT_FEATURE_TAG_STANDARD_LIGATURES              = 0x6167696c, /* 'liga' */\n    DWRITE_FONT_FEATURE_TAG_LINING_FIGURES                  = 0x6d756e6c, /* 'lnum' */\n    DWRITE_FONT_FEATURE_TAG_LOCALIZED_FORMS                 = 0x6c636f6c, /* 'locl' */\n    DWRITE_FONT_FEATURE_TAG_MARK_POSITIONING                = 0x6b72616d, /* 'mark' */\n    DWRITE_FONT_FEATURE_TAG_MATHEMATICAL_GREEK              = 0x6b72676d, /* 'mgrk' */\n    DWRITE_FONT_FEATURE_TAG_MARK_TO_MARK_POSITIONING        = 0x6b6d6b6d, /* 'mkmk' */\n    DWRITE_FONT_FEATURE_TAG_ALTERNATE_ANNOTATION_FORMS      = 0x746c616e, /* 'nalt' */\n    DWRITE_FONT_FEATURE_TAG_NLC_KANJI_FORMS                 = 0x6b636c6e, /* 'nlck' */\n    DWRITE_FONT_FEATURE_TAG_OLD_STYLE_FIGURES               = 0x6d756e6f, /* 'onum' */\n    DWRITE_FONT_FEATURE_TAG_ORDINALS                        = 0x6e64726f, /* 'ordn' */\n    DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_ALTERNATE_WIDTH    = 0x746c6170, /* 'palt' */\n    DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS                 = 0x70616370, /* 'pcap' */\n    DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_FIGURES            = 0x6d756e70, /* 'pnum' */\n    DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_WIDTHS             = 0x64697770, /* 'pwid' */\n    DWRITE_FONT_FEATURE_TAG_QUARTER_WIDTHS                  = 0x64697771, /* 'qwid' */\n    DWRITE_FONT_FEATURE_TAG_REQUIRED_LIGATURES              = 0x67696c72, /* 'rlig' */\n    DWRITE_FONT_FEATURE_TAG_RUBY_NOTATION_FORMS             = 0x79627572, /* 'ruby' */\n    DWRITE_FONT_FEATURE_TAG_STYLISTIC_ALTERNATES            = 0x746c6173, /* 'salt' */\n    DWRITE_FONT_FEATURE_TAG_SCIENTIFIC_INFERIORS            = 0x666e6973, /* 'sinf' */\n    DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS                  = 0x70636d73, /* 'smcp' */\n    DWRITE_FONT_FEATURE_TAG_SIMPLIFIED_FORMS                = 0x6c706d73, /* 'smpl' */\n    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1                 = 0x31307373, /* 'ss01' */\n    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_2                 = 0x32307373, /* 'ss02' */\n    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_3                 = 0x33307373, /* 'ss03' */\n    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_4                 = 0x34307373, /* 'ss04' */\n    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_5                 = 0x35307373, /* 'ss05' */\n    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_6                 = 0x36307373, /* 'ss06' */\n    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_7                 = 0x37307373, /* 'ss07' */\n    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_8                 = 0x38307373, /* 'ss08' */\n    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_9                 = 0x39307373, /* 'ss09' */\n    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_10                = 0x30317373, /* 'ss10' */\n    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_11                = 0x31317373, /* 'ss11' */\n    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_12                = 0x32317373, /* 'ss12' */\n    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_13                = 0x33317373, /* 'ss13' */\n    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_14                = 0x34317373, /* 'ss14' */\n    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_15                = 0x35317373, /* 'ss15' */\n    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_16                = 0x36317373, /* 'ss16' */\n    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_17                = 0x37317373, /* 'ss17' */\n    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_18                = 0x38317373, /* 'ss18' */\n    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_19                = 0x39317373, /* 'ss19' */\n    DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_20                = 0x30327373, /* 'ss20' */\n    DWRITE_FONT_FEATURE_TAG_SUBSCRIPT                       = 0x73627573, /* 'subs' */\n    DWRITE_FONT_FEATURE_TAG_SUPERSCRIPT                     = 0x73707573, /* 'sups' */\n    DWRITE_FONT_FEATURE_TAG_SWASH                           = 0x68737773, /* 'swsh' */\n    DWRITE_FONT_FEATURE_TAG_TITLING                         = 0x6c746974, /* 'titl' */\n    DWRITE_FONT_FEATURE_TAG_TRADITIONAL_NAME_FORMS          = 0x6d616e74, /* 'tnam' */\n    DWRITE_FONT_FEATURE_TAG_TABULAR_FIGURES                 = 0x6d756e74, /* 'tnum' */\n    DWRITE_FONT_FEATURE_TAG_TRADITIONAL_FORMS               = 0x64617274, /* 'trad' */\n    DWRITE_FONT_FEATURE_TAG_THIRD_WIDTHS                    = 0x64697774, /* 'twid' */\n    DWRITE_FONT_FEATURE_TAG_UNICASE                         = 0x63696e75, /* 'unic' */\n    DWRITE_FONT_FEATURE_TAG_VERTICAL_WRITING                = 0x74726576, /* 'vert' */\n    DWRITE_FONT_FEATURE_TAG_VERTICAL_ALTERNATES_AND_ROTATION= 0x32747276, /* 'vrt2' */\n    DWRITE_FONT_FEATURE_TAG_SLASHED_ZERO                    = 0x6f72657a, /* 'zero' */\n} DWRITE_FONT_FEATURE_TAG;\n\ntypedef enum DWRITE_SCRIPT_SHAPES\n{\n    DWRITE_SCRIPT_SHAPES_DEFAULT = 0,\n    DWRITE_SCRIPT_SHAPES_NO_VISUAL = 1\n} DWRITE_SCRIPT_SHAPES;\n\ntypedef enum DWRITE_NUMBER_SUBSTITUTION_METHOD\n{\n    DWRITE_NUMBER_SUBSTITUTION_METHOD_FROM_CULTURE,\n    DWRITE_NUMBER_SUBSTITUTION_METHOD_CONTEXTUAL,\n    DWRITE_NUMBER_SUBSTITUTION_METHOD_NONE,\n    DWRITE_NUMBER_SUBSTITUTION_METHOD_NATIONAL,\n    DWRITE_NUMBER_SUBSTITUTION_METHOD_TRADITIONAL\n} DWRITE_NUMBER_SUBSTITUTION_METHOD;\n\ncpp_quote(\"#define DWRITE_ALPHA_MAX 255\")\n\ntypedef enum DWRITE_TEXTURE_TYPE\n{\n    DWRITE_TEXTURE_ALIASED_1x1,\n    DWRITE_TEXTURE_CLEARTYPE_3x1\n} DWRITE_TEXTURE_TYPE;\n\ntypedef struct DWRITE_FONT_METRICS\n{\n    UINT16 designUnitsPerEm;\n    UINT16 ascent;\n    UINT16 descent;\n    INT16 lineGap;\n    UINT16 capHeight;\n    UINT16 xHeight;\n    INT16 underlinePosition;\n    UINT16 underlineThickness;\n    INT16 strikethroughPosition;\n    UINT16 strikethroughThickness;\n} DWRITE_FONT_METRICS;\n\ntypedef struct DWRITE_GLYPH_METRICS\n{\n    INT32 leftSideBearing;\n    UINT32 advanceWidth;\n    INT32 rightSideBearing;\n    INT32 topSideBearing;\n    UINT32 advanceHeight;\n    INT32 bottomSideBearing;\n    INT32 verticalOriginY;\n} DWRITE_GLYPH_METRICS;\n\ntypedef struct DWRITE_GLYPH_OFFSET\n{\n    FLOAT advanceOffset;\n    FLOAT ascenderOffset;\n} DWRITE_GLYPH_OFFSET;\n\ntypedef struct DWRITE_MATRIX\n{\n    FLOAT m11;\n    FLOAT m12;\n    FLOAT m21;\n    FLOAT m22;\n    FLOAT dx;\n    FLOAT dy;\n} DWRITE_MATRIX;\n\ntypedef struct DWRITE_TRIMMING\n{\n    DWRITE_TRIMMING_GRANULARITY granularity;\n    UINT32 delimiter;\n    UINT32 delimiterCount;\n} DWRITE_TRIMMING;\n\ncpp_quote(\"#ifndef __d2d1_h__\")\ntypedef struct DWRITE_GLYPH_RUN DWRITE_GLYPH_RUN;\ncpp_quote(\"#endif /* __d2d1_h__ */\")\n\nstruct DWRITE_GLYPH_RUN\n{\n    IDWriteFontFace* fontFace;\n    FLOAT fontEmSize;\n    UINT32 glyphCount;\n    UINT16 const* glyphIndices;\n    FLOAT const* glyphAdvances;\n    DWRITE_GLYPH_OFFSET const* glyphOffsets;\n    BOOL isSideways;\n    UINT32 bidiLevel;\n};\n\ncpp_quote(\"#ifndef __d2d1_1_h__\")\ntypedef struct DWRITE_GLYPH_RUN_DESCRIPTION DWRITE_GLYPH_RUN_DESCRIPTION;\ncpp_quote(\"#endif /* __d2d1_1_h__ */\")\n\nstruct DWRITE_GLYPH_RUN_DESCRIPTION\n{\n    WCHAR const* localeName;\n    WCHAR const* string;\n    UINT32 stringLength;\n    UINT16 const* clusterMap;\n    UINT32 textPosition;\n};\n\ntypedef struct DWRITE_UNDERLINE\n{\n    FLOAT width;\n    FLOAT thickness;\n    FLOAT offset;\n    FLOAT runHeight;\n    DWRITE_READING_DIRECTION readingDirection;\n    DWRITE_FLOW_DIRECTION flowDirection;\n    WCHAR const* localeName;\n    DWRITE_MEASURING_MODE measuringMode;\n} DWRITE_UNDERLINE;\n\ntypedef struct DWRITE_STRIKETHROUGH\n{\n    FLOAT width;\n    FLOAT thickness;\n    FLOAT offset;\n    DWRITE_READING_DIRECTION readingDirection;\n    DWRITE_FLOW_DIRECTION flowDirection;\n    WCHAR const* localeName;\n    DWRITE_MEASURING_MODE measuringMode;\n} DWRITE_STRIKETHROUGH;\n\ntypedef struct DWRITE_INLINE_OBJECT_METRICS\n{\n    FLOAT width;\n    FLOAT height;\n    FLOAT baseline;\n    BOOL  supportsSideways;\n} DWRITE_INLINE_OBJECT_METRICS;\n\ntypedef struct DWRITE_OVERHANG_METRICS\n{\n    FLOAT left;\n    FLOAT top;\n    FLOAT right;\n    FLOAT bottom;\n} DWRITE_OVERHANG_METRICS;\n\ntypedef struct DWRITE_FONT_FEATURE\n{\n    DWRITE_FONT_FEATURE_TAG nameTag;\n    UINT32 parameter;\n} DWRITE_FONT_FEATURE;\n\ntypedef struct DWRITE_TEXT_RANGE\n{\n    UINT32 startPosition;\n    UINT32 length;\n} DWRITE_TEXT_RANGE;\n\ntypedef struct DWRITE_LINE_METRICS\n{\n    UINT32 length;\n    UINT32 trailingWhitespaceLength;\n    UINT32 newlineLength;\n    FLOAT height;\n    FLOAT baseline;\n    BOOL isTrimmed;\n} DWRITE_LINE_METRICS;\n\ntypedef struct DWRITE_TEXT_METRICS\n{\n    FLOAT left;\n    FLOAT top;\n    FLOAT width;\n    FLOAT widthIncludingTrailingWhitespace;\n    FLOAT height;\n    FLOAT layoutWidth;\n    FLOAT layoutHeight;\n    UINT32 maxBidiReorderingDepth;\n    UINT32 lineCount;\n} DWRITE_TEXT_METRICS;\n\ntypedef struct DWRITE_CLUSTER_METRICS\n{\n    FLOAT width;\n    UINT16 length;\n    UINT16 canWrapLineAfter : 1;\n    UINT16 isWhitespace : 1;\n    UINT16 isNewline : 1;\n    UINT16 isSoftHyphen : 1;\n    UINT16 isRightToLeft : 1;\n    UINT16 padding : 11;\n} DWRITE_CLUSTER_METRICS;\n\ntypedef struct DWRITE_HIT_TEST_METRICS\n{\n    UINT32 textPosition;\n    UINT32 length;\n    FLOAT left;\n    FLOAT top;\n    FLOAT width;\n    FLOAT height;\n    UINT32 bidiLevel;\n    BOOL isText;\n    BOOL isTrimmed;\n} DWRITE_HIT_TEST_METRICS;\n\ntypedef struct DWRITE_SCRIPT_ANALYSIS\n{\n    UINT16 script;\n    DWRITE_SCRIPT_SHAPES shapes;\n} DWRITE_SCRIPT_ANALYSIS;\n\ntypedef struct DWRITE_LINE_BREAKPOINT\n{\n    UINT8 breakConditionBefore : 2;\n    UINT8 breakConditionAfter : 2;\n    UINT8 isWhitespace : 1;\n    UINT8 isSoftHyphen : 1;\n    UINT8 padding : 2;\n} DWRITE_LINE_BREAKPOINT;\n\ntypedef struct DWRITE_TYPOGRAPHIC_FEATURES\n{\n    DWRITE_FONT_FEATURE* features;\n    UINT32 featureCount;\n} DWRITE_TYPOGRAPHIC_FEATURES;\n\ntypedef struct DWRITE_SHAPING_TEXT_PROPERTIES\n{\n    UINT16 isShapedAlone : 1;\n    UINT16 reserved : 15;\n} DWRITE_SHAPING_TEXT_PROPERTIES;\n\ntypedef struct DWRITE_SHAPING_GLYPH_PROPERTIES\n{\n    UINT16 justification : 4;\n    UINT16 isClusterStart : 1;\n    UINT16 isDiacritic : 1;\n    UINT16 isZeroWidthSpace : 1;\n    UINT16 reserved : 9;\n} DWRITE_SHAPING_GLYPH_PROPERTIES;\n\n[\nlocal,\nobject,\nuuid(6d4865fe-0ab8-4d91-8f62-5dd6be34a3e0)\n]\ninterface IDWriteFontFileStream : IUnknown\n{\n    HRESULT ReadFileFragment(\n        void const **fragment_start,\n        UINT64 offset,\n        UINT64 fragment_size,\n        void **fragment_context);\n\n    void ReleaseFileFragment(void *fragment_context);\n    HRESULT GetFileSize(UINT64 *size);\n    HRESULT GetLastWriteTime(UINT64 *last_writetime);\n}\n\n[\nlocal,\nobject,\nuuid(727cad4e-d6af-4c9e-8a08-d695b11caa49)\n]\ninterface IDWriteFontFileLoader : IUnknown\n{\n    HRESULT CreateStreamFromKey(\n        void const *key,\n        UINT32 key_size,\n        IDWriteFontFileStream **stream);\n}\n\n[\nlocal,\nobject,\nuuid(b2d9f3ec-c9fe-4a11-a2ec-d86208f7c0a2)\n]\ninterface IDWriteLocalFontFileLoader : IDWriteFontFileLoader\n{\n    HRESULT GetFilePathLengthFromKey(void const *key, UINT32 key_size, UINT32 *length);\n    HRESULT GetFilePathFromKey(void const *key, UINT32 key_size, WCHAR *path, UINT32 length);\n    HRESULT GetLastWriteTimeFromKey(void const *key, UINT32 key_size, FILETIME *writetime);\n}\n\n[\nlocal,\nobject,\nuuid(739d886a-cef5-47dc-8769-1a8b41bebbb0)\n]\ninterface IDWriteFontFile : IUnknown\n{\n    HRESULT GetReferenceKey(\n        void const **key,\n        UINT32 *key_size);\n\n    HRESULT GetLoader(IDWriteFontFileLoader **loader);\n\n    HRESULT Analyze(\n        BOOL *is_supported_fonttype,\n        DWRITE_FONT_FILE_TYPE *file_type,\n        DWRITE_FONT_FACE_TYPE *face_type,\n        UINT32 *faces_num);\n}\n\n[\nlocal,\nobject,\nuuid(72755049-5ff7-435d-8348-4be97cfa6c7c)\n]\ninterface IDWriteFontFileEnumerator : IUnknown\n{\n    HRESULT MoveNext(BOOL *has_current_file);\n    HRESULT GetCurrentFontFile(IDWriteFontFile **font_file);\n}\n\n[\nlocal,\nobject,\nuuid(cca920e4-52f0-492b-bfa8-29c72ee0a468)\n]\ninterface IDWriteFontCollectionLoader : IUnknown\n{\n    HRESULT CreateEnumeratorFromKey(\n        IDWriteFactory* factory,\n        void const* key,\n        UINT32 key_size,\n        IDWriteFontFileEnumerator **enumerator);\n}\n\n[\nlocal,\nobject,\nuuid(08256209-099a-4b34-b86d-c22b110e7771)\n]\ninterface IDWriteLocalizedStrings : IUnknown\n{\n    UINT32 GetCount();\n\n    HRESULT FindLocaleName(\n        WCHAR const *locale_name,\n        UINT32 *index,\n        BOOL *exists);\n\n    HRESULT GetLocaleNameLength(UINT32 index, UINT32 *length);\n    HRESULT GetLocaleName(UINT32 index, WCHAR *locale_name, UINT32 size);\n    HRESULT GetStringLength(UINT32 index, UINT32 *length);\n    HRESULT GetString(UINT32 index, WCHAR *buffer, UINT32 size);\n}\n\n[\nlocal,\nobject,\nuuid(2f0da53a-2add-47cd-82ee-d9ec34688e75)\n]\ninterface IDWriteRenderingParams : IUnknown\n{\n    FLOAT GetGamma();\n    FLOAT GetEnhancedContrast();\n    FLOAT GetClearTypeLevel();\n    DWRITE_PIXEL_GEOMETRY GetPixelGeometry();\n    DWRITE_RENDERING_MODE GetRenderingMode();\n}\n\n[\nlocal,\nobject,\nuuid(5f49804d-7024-4d43-bfa9-d25984f53849)\n]\ninterface IDWriteFontFace : IUnknown\n{\n    DWRITE_FONT_FACE_TYPE GetType();\n    HRESULT GetFiles(UINT32 *number_of_files, IDWriteFontFile **fontfiles);\n    UINT32 GetIndex();\n    DWRITE_FONT_SIMULATIONS GetSimulations();\n    BOOL IsSymbolFont();\n    void GetMetrics(DWRITE_FONT_METRICS *metrics);\n    UINT16 GetGlyphCount();\n\n    HRESULT GetDesignGlyphMetrics(\n        UINT16 const *glyph_indices,\n        UINT32 glyph_count,\n        DWRITE_GLYPH_METRICS *metrics,\n        [defaultvalue(FALSE)] BOOL is_sideways);\n\n    HRESULT GetGlyphIndices(\n        UINT32 const *codepoints,\n        UINT32 count,\n        UINT16 *glyph_indices);\n\n    HRESULT TryGetFontTable(\n        UINT32 table_tag,\n        const void **table_data,\n        UINT32 *table_size,\n        void **context,\n        BOOL *exists);\n\n    void ReleaseFontTable(void *table_context);\n\n    HRESULT GetGlyphRunOutline(\n        FLOAT emSize,\n        UINT16 const *glyph_indices,\n        FLOAT const* glyph_advances,\n        DWRITE_GLYPH_OFFSET const *glyph_offsets,\n        UINT32 glyph_count,\n        BOOL is_sideways,\n        BOOL is_rtl,\n        IDWriteGeometrySink *geometrysink);\n\n    HRESULT GetRecommendedRenderingMode(\n        FLOAT emSize,\n        FLOAT pixels_per_dip,\n        DWRITE_MEASURING_MODE mode,\n        IDWriteRenderingParams* params,\n        DWRITE_RENDERING_MODE* rendering_mode);\n\n    HRESULT GetGdiCompatibleMetrics(\n        FLOAT emSize,\n        FLOAT pixels_per_dip,\n        DWRITE_MATRIX const *transform,\n        DWRITE_FONT_METRICS *metrics);\n\n    HRESULT GetGdiCompatibleGlyphMetrics(\n        FLOAT emSize,\n        FLOAT pixels_per_dip,\n        DWRITE_MATRIX const *transform,\n        BOOL use_gdi_natural,\n        UINT16 const *glyph_indices,\n        UINT32 glyph_count,\n        DWRITE_GLYPH_METRICS *metrics,\n        [defaultvalue(FALSE)] BOOL is_sideways);\n}\n\n[\nlocal,\nobject,\nuuid(acd16696-8c14-4f5d-877e-fe3fc1d32737)\n]\ninterface IDWriteFont : IUnknown\n{\n    HRESULT GetFontFamily(IDWriteFontFamily **family);\n    DWRITE_FONT_WEIGHT GetWeight();\n    DWRITE_FONT_STRETCH GetStretch();\n    DWRITE_FONT_STYLE GetStyle();\n    BOOL IsSymbolFont();\n\n    HRESULT GetFaceNames(IDWriteLocalizedStrings **names);\n    HRESULT GetInformationalStrings(\n        DWRITE_INFORMATIONAL_STRING_ID stringid,\n        IDWriteLocalizedStrings **strings,\n        BOOL *exists);\n\n    DWRITE_FONT_SIMULATIONS GetSimulations();\n    void GetMetrics(DWRITE_FONT_METRICS *metrics);\n    HRESULT HasCharacter(UINT32 value, BOOL *exists);\n    HRESULT CreateFontFace(IDWriteFontFace **face);\n}\n\n[\nlocal,\nobject,\nuuid(1a0d8438-1d97-4ec1-aef9-a2fb86ed6acb)\n]\ninterface IDWriteFontList : IUnknown\n{\n    HRESULT GetFontCollection(IDWriteFontCollection **collection);\n    UINT32 GetFontCount();\n    HRESULT GetFont(UINT32 index, IDWriteFont **font);\n}\n\n[\nlocal,\nobject,\nuuid(da20d8ef-812a-4c43-9802-62ec4abd7add)\n]\ninterface IDWriteFontFamily : IDWriteFontList\n{\n    HRESULT GetFamilyNames(IDWriteLocalizedStrings **names);\n\n    HRESULT GetFirstMatchingFont(\n        DWRITE_FONT_WEIGHT weight,\n        DWRITE_FONT_STRETCH stretch,\n        DWRITE_FONT_STYLE style,\n        IDWriteFont **font);\n\n    HRESULT GetMatchingFonts(\n        DWRITE_FONT_WEIGHT weight,\n        DWRITE_FONT_STRETCH stretch,\n        DWRITE_FONT_STYLE style,\n        IDWriteFontList **fonts);\n}\n\n[\nlocal,\nobject,\nuuid(a84cee02-3eea-4eee-a827-87c1a02a0fcc)\n]\ninterface IDWriteFontCollection : IUnknown\n{\n    UINT32 GetFontFamilyCount();\n    HRESULT GetFontFamily(UINT32 index, IDWriteFontFamily **family);\n    HRESULT FindFamilyName(WCHAR const *name, UINT32 *index, BOOL *exists);\n    HRESULT GetFontFromFontFace(IDWriteFontFace *face, IDWriteFont **font);\n}\n\n[\nlocal,\nobject,\nuuid(eaf3a2da-ecf4-4d24-b644-b34f6842024b)\n]\ninterface IDWritePixelSnapping : IUnknown\n{\n    HRESULT IsPixelSnappingDisabled(\n        void *client_drawingcontext,\n        BOOL *disabled);\n\n    HRESULT GetCurrentTransform(\n        void *client_drawingcontext,\n        DWRITE_MATRIX *transform);\n\n    HRESULT GetPixelsPerDip(\n        void *client_drawingcontext,\n        FLOAT *pixels_per_dip);\n}\n\n[\nlocal,\nobject,\nuuid(ef8a8135-5cc6-45fe-8825-c5a0724eb819)\n]\ninterface IDWriteTextRenderer : IDWritePixelSnapping\n{\n    HRESULT DrawGlyphRun(\n        void* client_drawingcontext,\n        FLOAT baselineOriginX,\n        FLOAT baselineOriginY,\n        DWRITE_MEASURING_MODE mode,\n        DWRITE_GLYPH_RUN const *glyph_run,\n        DWRITE_GLYPH_RUN_DESCRIPTION const *run_descr,\n        IUnknown *drawing_effect);\n\n    HRESULT DrawUnderline(\n        void *client_drawingcontext,\n        FLOAT baselineOriginX,\n        FLOAT baselineOriginY,\n        DWRITE_UNDERLINE const* underline,\n        IUnknown *drawing_effect);\n\n    HRESULT DrawStrikethrough(\n        void *client_drawingcontext,\n        FLOAT baselineOriginX,\n        FLOAT baselineOriginY,\n        DWRITE_STRIKETHROUGH const* strikethrough,\n        IUnknown *drawing_effect);\n\n    HRESULT DrawInlineObject(\n        void *client_drawingcontext,\n        FLOAT originX,\n        FLOAT originY,\n        IDWriteInlineObject *object,\n        BOOL is_sideways,\n        BOOL is_rtl,\n        IUnknown *drawing_effect);\n}\n\n[\nlocal,\nobject,\nuuid(8339fde3-106f-47ab-8373-1c6295eb10b3)\n]\ninterface IDWriteInlineObject : IUnknown\n{\n    HRESULT Draw(\n        void* client_drawingontext,\n        IDWriteTextRenderer* renderer,\n        FLOAT originX,\n        FLOAT originY,\n        BOOL is_sideways,\n        BOOL is_rtl,\n        IUnknown *drawing_effect);\n\n    HRESULT GetMetrics(DWRITE_INLINE_OBJECT_METRICS *metrics);\n    HRESULT GetOverhangMetrics(DWRITE_OVERHANG_METRICS *overhangs);\n    HRESULT GetBreakConditions(\n        DWRITE_BREAK_CONDITION* condition_before,\n        DWRITE_BREAK_CONDITION* condition_after);\n}\n\n[\nlocal,\nobject,\nuuid(9c906818-31d7-4fd3-a151-7c5e225db55a)\n]\ninterface IDWriteTextFormat : IUnknown\n{\n    HRESULT SetTextAlignment(DWRITE_TEXT_ALIGNMENT alignment);\n    HRESULT SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT alignment);\n    HRESULT SetWordWrapping(DWRITE_WORD_WRAPPING wrapping);\n    HRESULT SetReadingDirection(DWRITE_READING_DIRECTION direction);\n    HRESULT SetFlowDirection(DWRITE_FLOW_DIRECTION direction);\n    HRESULT SetIncrementalTabStop(FLOAT tabstop);\n    HRESULT SetTrimming(DWRITE_TRIMMING const *trimming, IDWriteInlineObject *trimming_sign);\n    HRESULT SetLineSpacing(DWRITE_LINE_SPACING_METHOD spacing, FLOAT line_spacing, FLOAT baseline);\n    DWRITE_TEXT_ALIGNMENT GetTextAlignment();\n    DWRITE_PARAGRAPH_ALIGNMENT GetParagraphAlignment();\n    DWRITE_WORD_WRAPPING GetWordWrapping();\n    DWRITE_READING_DIRECTION GetReadingDirection();\n    DWRITE_FLOW_DIRECTION GetFlowDirection();\n    FLOAT GetIncrementalTabStop();\n    HRESULT GetTrimming(DWRITE_TRIMMING *options, IDWriteInlineObject **trimming_sign);\n\n    HRESULT GetLineSpacing(\n        DWRITE_LINE_SPACING_METHOD *method,\n        FLOAT *spacing,\n        FLOAT *baseline);\n\n    HRESULT GetFontCollection(IDWriteFontCollection **collection);\n    UINT32 GetFontFamilyNameLength();\n    HRESULT GetFontFamilyName(WCHAR *name, UINT32 size);\n    DWRITE_FONT_WEIGHT GetFontWeight();\n    DWRITE_FONT_STYLE GetFontStyle();\n    DWRITE_FONT_STRETCH GetFontStretch();\n    FLOAT GetFontSize();\n    UINT32 GetLocaleNameLength();\n    HRESULT GetLocaleName(WCHAR *name, UINT32 size);\n}\n\n[\nlocal,\nobject,\nuuid(55f1112b-1dc2-4b3c-9541-f46894ed85b6)\n]\ninterface IDWriteTypography : IUnknown\n{\n    HRESULT AddFontFeature(DWRITE_FONT_FEATURE feature);\n    UINT32 GetFontFeatureCount();\n    HRESULT GetFontFeature(UINT32 index, DWRITE_FONT_FEATURE *feature);\n}\n\n[\nlocal,\nobject,\nuuid(5e5a32a3-8dff-4773-9ff6-0696eab77267)\n]\ninterface IDWriteBitmapRenderTarget : IUnknown\n{\n    HRESULT DrawGlyphRun(\n        FLOAT baselineOriginX,\n        FLOAT baselineOriginY,\n        DWRITE_MEASURING_MODE measuring_mode,\n        DWRITE_GLYPH_RUN const* glyph_run,\n        IDWriteRenderingParams* params,\n        COLORREF textColor,\n        [defaultvalue(NULL)] RECT *blackbox_rect);\n\n    HDC GetMemoryDC();\n    FLOAT GetPixelsPerDip();\n    HRESULT SetPixelsPerDip(FLOAT pixels_per_dip);\n    HRESULT GetCurrentTransform(DWRITE_MATRIX *transform);\n    HRESULT SetCurrentTransform(DWRITE_MATRIX const *transform);\n    HRESULT GetSize(SIZE *size);\n    HRESULT Resize(UINT32 width, UINT32 height);\n}\n\ncpp_quote(\"#ifndef _WINGDI_\")\n/* already defined in wingdi.h but needed for WIDL */\n#define LF_FACESIZE     32\n\n    typedef struct tagLOGFONTW\n    {\n        LONG   lfHeight;\n        LONG   lfWidth;\n        LONG   lfEscapement;\n        LONG   lfOrientation;\n        LONG   lfWeight;\n        BYTE   lfItalic;\n        BYTE   lfUnderline;\n        BYTE   lfStrikeOut;\n        BYTE   lfCharSet;\n        BYTE   lfOutPrecision;\n        BYTE   lfClipPrecision;\n        BYTE   lfQuality;\n        BYTE   lfPitchAndFamily;\n        WCHAR  lfFaceName[LF_FACESIZE];\n    } LOGFONTW, *PLOGFONTW, *LPLOGFONTW;\ncpp_quote(\"#endif /* _WINGDI_ */\")\n\n[\nlocal,\nobject,\nuuid(1edd9491-9853-4299-898f-6432983b6f3a)\n]\ninterface IDWriteGdiInterop : IUnknown\n{\n    HRESULT CreateFontFromLOGFONT(LOGFONTW const *logfont, IDWriteFont **font);\n    HRESULT ConvertFontToLOGFONT(\n        IDWriteFont* font,\n        LOGFONTW* logfont,\n        BOOL *is_systemfont);\n\n    HRESULT ConvertFontFaceToLOGFONT(IDWriteFontFace* font, LOGFONTW* logfont);\n    HRESULT CreateFontFaceFromHdc(HDC hdc, IDWriteFontFace **fontface);\n    HRESULT CreateBitmapRenderTarget(HDC hdc, UINT32 width, UINT32 height, IDWriteBitmapRenderTarget **target);\n}\n\n[\nlocal,\nobject,\nuuid(53737037-6d14-410b-9bfe-0b182bb70961)\n]\ninterface IDWriteTextLayout : IDWriteTextFormat\n{\n    HRESULT SetMaxWidth(FLOAT maxWidth);\n    HRESULT SetMaxHeight(FLOAT maxHeight);\n    HRESULT SetFontCollection(IDWriteFontCollection* collection, DWRITE_TEXT_RANGE range);\n    HRESULT SetFontFamilyName(WCHAR const *name, DWRITE_TEXT_RANGE range);\n    HRESULT SetFontWeight(DWRITE_FONT_WEIGHT weight, DWRITE_TEXT_RANGE range);\n    HRESULT SetFontStyle(DWRITE_FONT_STYLE style, DWRITE_TEXT_RANGE range);\n    HRESULT SetFontStretch(DWRITE_FONT_STRETCH stretch, DWRITE_TEXT_RANGE range);\n    HRESULT SetFontSize(FLOAT size, DWRITE_TEXT_RANGE range);\n    HRESULT SetUnderline(BOOL underline, DWRITE_TEXT_RANGE range);\n    HRESULT SetStrikethrough(BOOL strikethrough, DWRITE_TEXT_RANGE range);\n    HRESULT SetDrawingEffect(IUnknown* effect, DWRITE_TEXT_RANGE range);\n    HRESULT SetInlineObject(IDWriteInlineObject *object, DWRITE_TEXT_RANGE range);\n    HRESULT SetTypography(IDWriteTypography* typography, DWRITE_TEXT_RANGE range);\n    HRESULT SetLocaleName(WCHAR const* locale, DWRITE_TEXT_RANGE range);\n\n    FLOAT GetMaxWidth();\n    FLOAT GetMaxHeight();\n    HRESULT GetFontCollection(\n        UINT32 pos,\n        IDWriteFontCollection** collection,\n        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);\n\n    HRESULT GetFontFamilyNameLength(\n        UINT32 pos,\n        UINT32* len,\n        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);\n\n    HRESULT GetFontFamilyName(\n        UINT32 position,\n        WCHAR* name,\n        UINT32 name_size,\n        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);\n\n    HRESULT GetFontWeight(\n        UINT32 position,\n        DWRITE_FONT_WEIGHT *weight,\n        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);\n\n    HRESULT GetFontStyle(\n        UINT32 currentPosition,\n        DWRITE_FONT_STYLE *style,\n        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);\n\n    HRESULT GetFontStretch(\n        UINT32 position,\n        DWRITE_FONT_STRETCH *stretch,\n        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);\n\n    HRESULT GetFontSize(\n        UINT32 position,\n        FLOAT *size,\n        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);\n\n    HRESULT GetUnderline(\n        UINT32 position,\n        BOOL *has_underline,\n        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);\n\n    HRESULT GetStrikethrough(\n        UINT32 position,\n        BOOL *has_strikethrough,\n        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);\n\n    HRESULT GetDrawingEffect(\n        UINT32 position,\n        IUnknown **effect,\n        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);\n\n    HRESULT GetInlineObject(\n        UINT32 position,\n        IDWriteInlineObject **object,\n        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);\n\n    HRESULT GetTypography(\n        UINT32 position,\n        IDWriteTypography** typography,\n        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);\n\n    HRESULT GetLocaleNameLength(\n        UINT32 position,\n        UINT32* length,\n        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);\n\n    HRESULT GetLocaleName(\n        UINT32 position,\n        WCHAR* name,\n        UINT32 name_size,\n        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);\n\n    HRESULT Draw(\n        void *context,\n        IDWriteTextRenderer* renderer,\n        FLOAT originX,\n        FLOAT originY);\n\n    HRESULT GetLineMetrics(\n        DWRITE_LINE_METRICS *metrics,\n        UINT32 max_count,\n        UINT32 *actual_count);\n\n    HRESULT GetMetrics(DWRITE_TEXT_METRICS *metrics);\n    HRESULT GetOverhangMetrics(DWRITE_OVERHANG_METRICS *overhangs);\n    HRESULT GetClusterMetrics(\n        DWRITE_CLUSTER_METRICS *metrics,\n        UINT32 max_count,\n        UINT32* act_count);\n\n    HRESULT DetermineMinWidth(FLOAT* min_width);\n    HRESULT HitTestPoint(\n        FLOAT pointX,\n        FLOAT pointY,\n        BOOL* is_trailinghit,\n        BOOL* is_inside,\n        DWRITE_HIT_TEST_METRICS *metrics);\n\n    HRESULT HitTestTextPosition(\n        UINT32 textPosition,\n        BOOL is_trailinghit,\n        FLOAT* pointX,\n        FLOAT* pointY,\n        DWRITE_HIT_TEST_METRICS *metrics);\n\n    HRESULT HitTestTextRange(\n        UINT32 textPosition,\n        UINT32 textLength,\n        FLOAT originX,\n        FLOAT originY,\n        DWRITE_HIT_TEST_METRICS *metrics,\n        UINT32 max_metricscount,\n        UINT32* actual_metricscount);\n}\n\n[\nlocal,\nobject,\nuuid(14885cc9-bab0-4f90-b6ed-5c366a2cd03d)\n]\ninterface IDWriteNumberSubstitution : IUnknown\n{\n}\n\n[\nlocal,\nobject,\nuuid(688e1a58-5094-47c8-adc8-fbcea60ae92b)\n]\ninterface IDWriteTextAnalysisSource : IUnknown\n{\n    HRESULT GetTextAtPosition(\n        UINT32 position,\n        WCHAR const** text,\n        UINT32* text_len);\n\n    HRESULT GetTextBeforePosition(\n        UINT32 position,\n        WCHAR const** text,\n        UINT32* text_len);\n\n    DWRITE_READING_DIRECTION GetParagraphReadingDirection();\n    HRESULT GetLocaleName(\n        UINT32 position,\n        UINT32* text_len,\n        WCHAR const** locale);\n\n    HRESULT GetNumberSubstitution(\n        UINT32 position,\n        UINT32* text_len,\n        IDWriteNumberSubstitution **substitution);\n}\n\n[\nlocal,\nobject,\nuuid(5810cd44-0ca0-4701-b3fa-bec5182ae4f6)\n]\ninterface IDWriteTextAnalysisSink : IUnknown\n{\n    HRESULT SetScriptAnalysis(\n        UINT32 position,\n        UINT32 length,\n        DWRITE_SCRIPT_ANALYSIS const* scriptanalysis);\n\n    HRESULT SetLineBreakpoints(\n        UINT32 position,\n        UINT32 length,\n        DWRITE_LINE_BREAKPOINT const* breakpoints);\n\n    HRESULT SetBidiLevel(\n        UINT32 position,\n        UINT32 length,\n        UINT8 explicitLevel,\n        UINT8 resolvedLevel);\n\n    HRESULT SetNumberSubstitution(\n        UINT32 position,\n        UINT32 length,\n        IDWriteNumberSubstitution* substitution);\n}\n\n[\nlocal,\nobject,\nuuid(b7e6163e-7f46-43b4-84b3-e4e6249c365d)\n]\ninterface IDWriteTextAnalyzer : IUnknown\n{\n    HRESULT AnalyzeScript(\n        IDWriteTextAnalysisSource* source,\n        UINT32 position,\n        UINT32 length,\n        IDWriteTextAnalysisSink* sink);\n\n    HRESULT AnalyzeBidi(\n        IDWriteTextAnalysisSource* source,\n        UINT32 position,\n        UINT32 length,\n        IDWriteTextAnalysisSink* sink);\n\n    HRESULT AnalyzeNumberSubstitution(\n        IDWriteTextAnalysisSource* source,\n        UINT32 position,\n        UINT32 length,\n        IDWriteTextAnalysisSink* sink);\n\n    HRESULT AnalyzeLineBreakpoints(\n        IDWriteTextAnalysisSource* source,\n        UINT32 position,\n        UINT32 length,\n        IDWriteTextAnalysisSink* sink);\n\n    HRESULT GetGlyphs(\n        WCHAR const* text,\n        UINT32 length,\n        IDWriteFontFace* font_face,\n        BOOL is_sideways,\n        BOOL is_rtl,\n        DWRITE_SCRIPT_ANALYSIS const* analysis,\n        WCHAR const* locale,\n        IDWriteNumberSubstitution* substitution,\n        DWRITE_TYPOGRAPHIC_FEATURES const** features,\n        UINT32 const* feature_range_len,\n        UINT32 feature_ranges,\n        UINT32 max_glyph_count,\n        UINT16* clustermap,\n        DWRITE_SHAPING_TEXT_PROPERTIES* text_props,\n        UINT16* glyph_indices,\n        DWRITE_SHAPING_GLYPH_PROPERTIES* glyph_props,\n        UINT32* actual_glyph_count);\n\n    HRESULT GetGlyphPlacements(\n        WCHAR const* text,\n        UINT16 const* clustermap,\n        DWRITE_SHAPING_TEXT_PROPERTIES* props,\n        UINT32 text_len,\n        UINT16 const* glyph_indices,\n        DWRITE_SHAPING_GLYPH_PROPERTIES const* glyph_props,\n        UINT32 glyph_count,\n        IDWriteFontFace * font_face,\n        FLOAT fontEmSize,\n        BOOL is_sideways,\n        BOOL is_rtl,\n        DWRITE_SCRIPT_ANALYSIS const* analysis,\n        WCHAR const* locale,\n        DWRITE_TYPOGRAPHIC_FEATURES const** features,\n        UINT32 const* feature_range_len,\n        UINT32 feature_ranges,\n        FLOAT* glyph_advances,\n        DWRITE_GLYPH_OFFSET* glyph_offsets);\n\n    HRESULT GetGdiCompatibleGlyphPlacements(\n        WCHAR const* text,\n        UINT16 const* clustermap,\n        DWRITE_SHAPING_TEXT_PROPERTIES* props,\n        UINT32 text_len,\n        UINT16 const* glyph_indices,\n        DWRITE_SHAPING_GLYPH_PROPERTIES const* glyph_props,\n        UINT32 glyph_count,\n        IDWriteFontFace * font_face,\n        FLOAT fontEmSize,\n        FLOAT pixels_per_dip,\n        DWRITE_MATRIX const* transform,\n        BOOL use_gdi_natural,\n        BOOL is_sideways,\n        BOOL is_rtl,\n        DWRITE_SCRIPT_ANALYSIS const* analysis,\n        WCHAR const* locale,\n        DWRITE_TYPOGRAPHIC_FEATURES const** features,\n        UINT32 const* feature_range_lengths,\n        UINT32 feature_ranges,\n        FLOAT* glyph_advances,\n        DWRITE_GLYPH_OFFSET* glyph_offsets);\n}\n\n[\nlocal,\nobject,\nuuid(7d97dbf7-e085-42d4-81e3-6a883bded118)\n]\ninterface IDWriteGlyphRunAnalysis : IUnknown\n{\n    HRESULT GetAlphaTextureBounds(DWRITE_TEXTURE_TYPE type, RECT* bounds);\n    HRESULT CreateAlphaTexture(DWRITE_TEXTURE_TYPE type, RECT const* bounds, BYTE* alphaValues, UINT32 bufferSize);\n    HRESULT GetAlphaBlendParams(\n        IDWriteRenderingParams* renderingParams,\n        FLOAT* blendGamma,\n        FLOAT* blendEnhancedContrast,\n        FLOAT* blendClearTypeLevel);\n}\n\n[\nlocal,\nobject,\nuuid(b859ee5a-d838-4b5b-a2e8-1adc7d93db48)\n]\ninterface IDWriteFactory : IUnknown\n{\n    HRESULT GetSystemFontCollection(IDWriteFontCollection **collection,\n                                    [defaultvalue(FALSE)] BOOL check_for_updates);\n\n    HRESULT CreateCustomFontCollection(\n        IDWriteFontCollectionLoader *loader,\n        void const *key,\n        UINT32 key_size,\n        IDWriteFontCollection **collection);\n\n    HRESULT RegisterFontCollectionLoader(IDWriteFontCollectionLoader *loader);\n\n    HRESULT UnregisterFontCollectionLoader(IDWriteFontCollectionLoader *loader);\n\n    HRESULT CreateFontFileReference(\n        WCHAR const *path,\n        FILETIME const *writetime,\n        IDWriteFontFile **font_file);\n\n    HRESULT CreateCustomFontFileReference(\n        void const *reference_key,\n        UINT32 key_size,\n        IDWriteFontFileLoader *loader,\n        IDWriteFontFile **font_file);\n\n    HRESULT CreateFontFace(\n        DWRITE_FONT_FACE_TYPE facetype,\n        UINT32 files_number,\n        IDWriteFontFile* const* font_files,\n        UINT32 index,\n        DWRITE_FONT_SIMULATIONS sim_flags,\n        IDWriteFontFace **font_face);\n\n    HRESULT CreateRenderingParams(IDWriteRenderingParams **params);\n\n    HRESULT CreateMonitorRenderingParams(\n        HMONITOR monitor,\n        IDWriteRenderingParams **params);\n\n    HRESULT CreateCustomRenderingParams(\n        FLOAT gamma,\n        FLOAT enhancedContrast,\n        FLOAT cleartype_level,\n        DWRITE_PIXEL_GEOMETRY geometry,\n        DWRITE_RENDERING_MODE mode,\n        IDWriteRenderingParams **params);\n\n    HRESULT RegisterFontFileLoader(IDWriteFontFileLoader *loader);\n\n    HRESULT UnregisterFontFileLoader(IDWriteFontFileLoader *loader);\n\n    HRESULT CreateTextFormat(\n        WCHAR const* family_name,\n        IDWriteFontCollection *collection,\n        DWRITE_FONT_WEIGHT weight,\n        DWRITE_FONT_STYLE style,\n        DWRITE_FONT_STRETCH stretch,\n        FLOAT size,\n        WCHAR const *locale,\n        IDWriteTextFormat **format);\n\n    HRESULT CreateTypography(IDWriteTypography **typography);\n\n    HRESULT GetGdiInterop(IDWriteGdiInterop **gdi_interop);\n\n    HRESULT CreateTextLayout(\n        WCHAR const* string,\n        UINT32 len,\n        IDWriteTextFormat *format,\n        FLOAT max_width,\n        FLOAT max_height,\n        IDWriteTextLayout **layout);\n\n    HRESULT CreateGdiCompatibleTextLayout(\n        WCHAR const* string,\n        UINT32 len,\n        IDWriteTextFormat *format,\n        FLOAT layout_width,\n        FLOAT layout_height,\n        FLOAT pixels_per_dip,\n        DWRITE_MATRIX const* transform,\n        BOOL use_gdi_natural,\n        IDWriteTextLayout **layout);\n\n    HRESULT CreateEllipsisTrimmingSign(\n        IDWriteTextFormat *format,\n        IDWriteInlineObject **trimming_sign);\n\n    HRESULT CreateTextAnalyzer(IDWriteTextAnalyzer **analyzer);\n\n    HRESULT CreateNumberSubstitution(\n        DWRITE_NUMBER_SUBSTITUTION_METHOD method,\n        WCHAR const* locale,\n        BOOL ignore_user_override,\n        IDWriteNumberSubstitution **substitution);\n\n    HRESULT CreateGlyphRunAnalysis(\n        DWRITE_GLYPH_RUN const *glyph_run,\n        FLOAT pixels_per_dip,\n        DWRITE_MATRIX const* transform,\n        DWRITE_RENDERING_MODE rendering_mode,\n        DWRITE_MEASURING_MODE measuring_mode,\n        FLOAT baseline_x,\n        FLOAT baseline_y,\n        IDWriteGlyphRunAnalysis **analysis);\n}\n\ncpp_quote(\"HRESULT WINAPI DWriteCreateFactory(DWRITE_FACTORY_TYPE,REFIID,IUnknown**);\")\n\n/* error codes */\ncpp_quote(\"#define FACILITY_DWRITE 0x898\")\ncpp_quote(\"#define DWRITE_ERR_BASE 0x5000\")\ncpp_quote(\"#define MAKE_DWRITE_HR(severity, code) MAKE_HRESULT(severity, FACILITY_DWRITE, (DWRITE_ERR_BASE + code))\")\ncpp_quote(\"#define MAKE_DWRITE_HR_ERR(code) MAKE_DWRITE_HR(SEVERITY_ERROR, code)\")\n"
  },
  {
    "path": "wine/windows/dwrite_1.idl",
    "content": "/*\n * Copyright 2013 Nikolay Sivov for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"dwrite.idl\";\n\ntypedef enum DWRITE_PANOSE_FAMILY\n{\n    DWRITE_PANOSE_FAMILY_ANY,\n    DWRITE_PANOSE_FAMILY_NO_FIT,\n    DWRITE_PANOSE_FAMILY_TEXT_DISPLAY,\n    DWRITE_PANOSE_FAMILY_SCRIPT,\n    DWRITE_PANOSE_FAMILY_DECORATIVE,\n    DWRITE_PANOSE_FAMILY_SYMBOL,\n    DWRITE_PANOSE_FAMILY_PICTORIAL = DWRITE_PANOSE_FAMILY_SYMBOL\n} DWRITE_PANOSE_FAMILY;\n\ntypedef enum DWRITE_PANOSE_SERIF_STYLE\n{\n    DWRITE_PANOSE_SERIF_STYLE_ANY,\n    DWRITE_PANOSE_SERIF_STYLE_NO_FIT,\n    DWRITE_PANOSE_SERIF_STYLE_COVE,\n    DWRITE_PANOSE_SERIF_STYLE_OBTUSE_COVE,\n    DWRITE_PANOSE_SERIF_STYLE_SQUARE_COVE,\n    DWRITE_PANOSE_SERIF_STYLE_OBTUSE_SQUARE_COVE,\n    DWRITE_PANOSE_SERIF_STYLE_SQUARE,\n    DWRITE_PANOSE_SERIF_STYLE_THIN,\n    DWRITE_PANOSE_SERIF_STYLE_OVAL,\n    DWRITE_PANOSE_SERIF_STYLE_EXAGGERATED,\n    DWRITE_PANOSE_SERIF_STYLE_TRIANGLE,\n    DWRITE_PANOSE_SERIF_STYLE_NORMAL_SANS,\n    DWRITE_PANOSE_SERIF_STYLE_OBTUSE_SANS,\n    DWRITE_PANOSE_SERIF_STYLE_PERPENDICULAR_SANS,\n    DWRITE_PANOSE_SERIF_STYLE_FLARED,\n    DWRITE_PANOSE_SERIF_STYLE_ROUNDED,\n    DWRITE_PANOSE_SERIF_STYLE_SCRIPT,\n    DWRITE_PANOSE_SERIF_STYLE_PERP_SANS = DWRITE_PANOSE_SERIF_STYLE_PERPENDICULAR_SANS,\n    DWRITE_PANOSE_SERIF_STYLE_BONE = DWRITE_PANOSE_SERIF_STYLE_OVAL\n} DWRITE_PANOSE_SERIF_STYLE;\n\ntypedef enum DWRITE_PANOSE_WEIGHT\n{\n    DWRITE_PANOSE_WEIGHT_ANY,\n    DWRITE_PANOSE_WEIGHT_NO_FIT,\n    DWRITE_PANOSE_WEIGHT_VERY_LIGHT,\n    DWRITE_PANOSE_WEIGHT_LIGHT,\n    DWRITE_PANOSE_WEIGHT_THIN,\n    DWRITE_PANOSE_WEIGHT_BOOK,\n    DWRITE_PANOSE_WEIGHT_MEDIUM,\n    DWRITE_PANOSE_WEIGHT_DEMI,\n    DWRITE_PANOSE_WEIGHT_BOLD,\n    DWRITE_PANOSE_WEIGHT_HEAVY,\n    DWRITE_PANOSE_WEIGHT_BLACK,\n    DWRITE_PANOSE_WEIGHT_EXTRA_BLACK,\n    DWRITE_PANOSE_WEIGHT_NORD = DWRITE_PANOSE_WEIGHT_EXTRA_BLACK\n} DWRITE_PANOSE_WEIGHT;\n\ntypedef enum DWRITE_PANOSE_PROPORTION\n{\n    DWRITE_PANOSE_PROPORTION_ANY,\n    DWRITE_PANOSE_PROPORTION_NO_FIT,\n    DWRITE_PANOSE_PROPORTION_OLD_STYLE,\n    DWRITE_PANOSE_PROPORTION_MODERN,\n    DWRITE_PANOSE_PROPORTION_EVEN_WIDTH,\n    DWRITE_PANOSE_PROPORTION_EXPANDED,\n    DWRITE_PANOSE_PROPORTION_CONDENSED,\n    DWRITE_PANOSE_PROPORTION_VERY_EXPANDED,\n    DWRITE_PANOSE_PROPORTION_VERY_CONDENSED,\n    DWRITE_PANOSE_PROPORTION_MONOSPACED\n} DWRITE_PANOSE_PROPORTION;\n\ntypedef enum DWRITE_PANOSE_CONTRAST\n{\n    DWRITE_PANOSE_CONTRAST_ANY,\n    DWRITE_PANOSE_CONTRAST_NO_FIT,\n    DWRITE_PANOSE_CONTRAST_NONE,\n    DWRITE_PANOSE_CONTRAST_VERY_LOW,\n    DWRITE_PANOSE_CONTRAST_LOW,\n    DWRITE_PANOSE_CONTRAST_MEDIUM_LOW,\n    DWRITE_PANOSE_CONTRAST_MEDIUM,\n    DWRITE_PANOSE_CONTRAST_MEDIUM_HIGH,\n    DWRITE_PANOSE_CONTRAST_HIGH,\n    DWRITE_PANOSE_CONTRAST_VERY_HIGH,\n    DWRITE_PANOSE_CONTRAST_HORIZONTAL_LOW,\n    DWRITE_PANOSE_CONTRAST_HORIZONTAL_MEDIUM,\n    DWRITE_PANOSE_CONTRAST_HORIZONTAL_HIGH,\n    DWRITE_PANOSE_CONTRAST_BROKEN\n} DWRITE_PANOSE_CONTRAST;\n\ntypedef enum DWRITE_PANOSE_STROKE_VARIATION\n{\n    DWRITE_PANOSE_STROKE_VARIATION_ANY,\n    DWRITE_PANOSE_STROKE_VARIATION_NO_FIT,\n    DWRITE_PANOSE_STROKE_VARIATION_NO_VARIATION,\n    DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_DIAGONAL,\n    DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_TRANSITIONAL,\n    DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_VERTICAL,\n    DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_HORIZONTAL,\n    DWRITE_PANOSE_STROKE_VARIATION_RAPID_VERTICAL,\n    DWRITE_PANOSE_STROKE_VARIATION_RAPID_HORIZONTAL,\n    DWRITE_PANOSE_STROKE_VARIATION_INSTANT_VERTICAL,\n    DWRITE_PANOSE_STROKE_VARIATION_INSTANT_HORIZONTAL\n} DWRITE_PANOSE_STROKE_VARIANTION;\n\ntypedef enum DWRITE_PANOSE_ARM_STYLE\n{\n    DWRITE_PANOSE_ARM_STYLE_ANY,\n    DWRITE_PANOSE_ARM_STYLE_NO_FIT,\n    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORIZONTAL,\n    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_WEDGE,\n    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERTICAL,\n    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_SINGLE_SERIF,\n    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_DOUBLE_SERIF,\n    DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_HORIZONTAL,\n    DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_WEDGE,\n    DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_VERTICAL,\n    DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_SINGLE_SERIF,\n    DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_DOUBLE_SERIF,\n    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORZ = DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORIZONTAL,\n    DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERT = DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERTICAL,\n    DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_HORZ = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_HORIZONTAL,\n    DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_WEDGE = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_WEDGE,\n    DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_VERT = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_VERTICAL,\n    DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_SINGLE_SERIF = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_SINGLE_SERIF,\n    DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_DOUBLE_SERIF = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_DOUBLE_SERIF\n} DWRITE_PANOSE_ARM_STYLE;\n\ntypedef enum DWRITE_PANOSE_LETTERFORM\n{\n    DWRITE_PANOSE_LETTERFORM_ANY,\n    DWRITE_PANOSE_LETTERFORM_NO_FIT,\n    DWRITE_PANOSE_LETTERFORM_NORMAL_CONTACT,\n    DWRITE_PANOSE_LETTERFORM_NORMAL_WEIGHTED,\n    DWRITE_PANOSE_LETTERFORM_NORMAL_BOXED,\n    DWRITE_PANOSE_LETTERFORM_NORMAL_FLATTENED,\n    DWRITE_PANOSE_LETTERFORM_NORMAL_ROUNDED,\n    DWRITE_PANOSE_LETTERFORM_NORMAL_OFF_CENTER,\n    DWRITE_PANOSE_LETTERFORM_NORMAL_SQUARE,\n    DWRITE_PANOSE_LETTERFORM_OBLIQUE_CONTACT,\n    DWRITE_PANOSE_LETTERFORM_OBLIQUE_WEIGHTED,\n    DWRITE_PANOSE_LETTERFORM_OBLIQUE_BOXED,\n    DWRITE_PANOSE_LETTERFORM_OBLIQUE_FLATTENED,\n    DWRITE_PANOSE_LETTERFORM_OBLIQUE_ROUNDED,\n    DWRITE_PANOSE_LETTERFORM_OBLIQUE_OFF_CENTER,\n    DWRITE_PANOSE_LETTERFORM_OBLIQUE_SQUARE\n} DWRITE_PANOSE_LETTERFORM;\n\ntypedef enum DWRITE_PANOSE_MIDLINE\n{\n    DWRITE_PANOSE_MIDLINE_ANY,\n    DWRITE_PANOSE_MIDLINE_NO_FIT,\n    DWRITE_PANOSE_MIDLINE_STANDARD_TRIMMED,\n    DWRITE_PANOSE_MIDLINE_STANDARD_POINTED,\n    DWRITE_PANOSE_MIDLINE_STANDARD_SERIFED,\n    DWRITE_PANOSE_MIDLINE_HIGH_TRIMMED,\n    DWRITE_PANOSE_MIDLINE_HIGH_POINTED,\n    DWRITE_PANOSE_MIDLINE_HIGH_SERIFED,\n    DWRITE_PANOSE_MIDLINE_CONSTANT_TRIMMED,\n    DWRITE_PANOSE_MIDLINE_CONSTANT_POINTED,\n    DWRITE_PANOSE_MIDLINE_CONSTANT_SERIFED,\n    DWRITE_PANOSE_MIDLINE_LOW_TRIMMED,\n    DWRITE_PANOSE_MIDLINE_LOW_POINTED,\n    DWRITE_PANOSE_MIDLINE_LOW_SERIFED\n} DWRITE_PANOSE_MIDLINE;\n\ntypedef enum DWRITE_PANOSE_XHEIGHT\n{\n    DWRITE_PANOSE_XHEIGHT_ANY,\n    DWRITE_PANOSE_XHEIGHT_NO_FIT,\n    DWRITE_PANOSE_XHEIGHT_CONSTANT_SMALL,\n    DWRITE_PANOSE_XHEIGHT_CONSTANT_STANDARD,\n    DWRITE_PANOSE_XHEIGHT_CONSTANT_LARGE,\n    DWRITE_PANOSE_XHEIGHT_DUCKING_SMALL,\n    DWRITE_PANOSE_XHEIGHT_DUCKING_STANDARD,\n    DWRITE_PANOSE_XHEIGHT_DUCKING_LARGE,\n    DWRITE_PANOSE_XHEIGHT_CONSTANT_STD = DWRITE_PANOSE_XHEIGHT_CONSTANT_STANDARD,\n    DWRITE_PANOSE_XHEIGHT_DUCKING_STD = DWRITE_PANOSE_XHEIGHT_DUCKING_STANDARD\n} DWRITE_PANOSE_XHEIGHT;\n\ntypedef enum DWRITE_PANOSE_TOOL_KIND\n{\n    DWRITE_PANOSE_TOOL_KIND_ANY,\n    DWRITE_PANOSE_TOOL_KIND_NO_FIT,\n    DWRITE_PANOSE_TOOL_KIND_FLAT_NIB,\n    DWRITE_PANOSE_TOOL_KIND_PRESSURE_POINT,\n    DWRITE_PANOSE_TOOL_KIND_ENGRAVED,\n    DWRITE_PANOSE_TOOL_KIND_BALL,\n    DWRITE_PANOSE_TOOL_KIND_BRUSH,\n    DWRITE_PANOSE_TOOL_KIND_ROUGH,\n    DWRITE_PANOSE_TOOL_KIND_FELT_PEN_BRUSH_TIP,\n    DWRITE_PANOSE_TOOL_KIND_WILD_BRUSH\n} DWRITE_PANOSE_TOOL_KIND;\n\ntypedef enum DWRITE_PANOSE_SPACING\n{\n    DWRITE_PANOSE_SPACING_ANY,\n    DWRITE_PANOSE_SPACING_NO_FIT,\n    DWRITE_PANOSE_SPACING_PROPORTIONAL_SPACED,\n    DWRITE_PANOSE_SPACING_MONOSPACED\n} DWRITE_PANOSE_SPACING;\n\ntypedef enum DWRITE_PANOSE_ASPECT_RATIO\n{\n    DWRITE_PANOSE_ASPECT_RATIO_ANY,\n    DWRITE_PANOSE_ASPECT_RATIO_NO_FIT,\n    DWRITE_PANOSE_ASPECT_RATIO_VERY_CONDENSED,\n    DWRITE_PANOSE_ASPECT_RATIO_CONDENSED,\n    DWRITE_PANOSE_ASPECT_RATIO_NORMAL,\n    DWRITE_PANOSE_ASPECT_RATIO_EXPANDED,\n    DWRITE_PANOSE_ASPECT_RATIO_VERY_EXPANDED\n} DWRITE_PANOSE_ASPECT_RATIO;\n\ntypedef enum DWRITE_PANOSE_SCRIPT_TOPOLOGY\n{\n    DWRITE_PANOSE_SCRIPT_TOPOLOGY_ANY,\n    DWRITE_PANOSE_SCRIPT_TOPOLOGY_NO_FIT,\n    DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_DISCONNECTED,\n    DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_TRAILING,\n    DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_CONNECTED,\n    DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_DISCONNECTED,\n    DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_TRAILING,\n    DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_CONNECTED,\n    DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_DISCONNECTED,\n    DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_TRAILING,\n    DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_CONNECTED\n} DWRITE_PANOSE_SCRIPT_TOPOLOGY;\n\ntypedef enum DWRITE_PANOSE_SCRIPT_FORM\n{\n    DWRITE_PANOSE_SCRIPT_FORM_ANY,\n    DWRITE_PANOSE_SCRIPT_FORM_NO_FIT,\n    DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_NO_WRAPPING,\n    DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_SOME_WRAPPING,\n    DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_MORE_WRAPPING,\n    DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_EXTREME_WRAPPING,\n    DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_NO_WRAPPING,\n    DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_SOME_WRAPPING,\n    DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_MORE_WRAPPING,\n    DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_EXTREME_WRAPPING,\n    DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_NO_WRAPPING,\n    DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_SOME_WRAPPING,\n    DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_MORE_WRAPPING,\n    DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_EXTREME_WRAPPING\n} DWRITE_PANOSE_SCRIPT_FORM;\n\ntypedef enum DWRITE_PANOSE_FINIALS\n{\n    DWRITE_PANOSE_FINIALS_ANY,\n    DWRITE_PANOSE_FINIALS_NO_FIT,\n    DWRITE_PANOSE_FINIALS_NONE_NO_LOOPS,\n    DWRITE_PANOSE_FINIALS_NONE_CLOSED_LOOPS,\n    DWRITE_PANOSE_FINIALS_NONE_OPEN_LOOPS,\n    DWRITE_PANOSE_FINIALS_SHARP_NO_LOOPS,\n    DWRITE_PANOSE_FINIALS_SHARP_CLOSED_LOOPS,\n    DWRITE_PANOSE_FINIALS_SHARP_OPEN_LOOPS,\n    DWRITE_PANOSE_FINIALS_TAPERED_NO_LOOPS,\n    DWRITE_PANOSE_FINIALS_TAPERED_CLOSED_LOOPS,\n    DWRITE_PANOSE_FINIALS_TAPERED_OPEN_LOOPS,\n    DWRITE_PANOSE_FINIALS_ROUND_NO_LOOPS,\n    DWRITE_PANOSE_FINIALS_ROUND_CLOSED_LOOPS,\n    DWRITE_PANOSE_FINIALS_ROUND_OPEN_LOOPS\n} DWRITE_PANOSE_FINIALS;\n\ntypedef enum DWRITE_PANOSE_XASCENT\n{\n    DWRITE_PANOSE_XASCENT_ANY,\n    DWRITE_PANOSE_XASCENT_NO_FIT,\n    DWRITE_PANOSE_XASCENT_VERY_LOW,\n    DWRITE_PANOSE_XASCENT_LOW,\n    DWRITE_PANOSE_XASCENT_MEDIUM,\n    DWRITE_PANOSE_XASCENT_HIGH,\n    DWRITE_PANOSE_XASCENT_VERY_HIGH\n} DWRITE_PANOSE_XASCENT;\n\ntypedef enum DWRITE_PANOSE_DECORATIVE_CLASS\n{\n    DWRITE_PANOSE_DECORATIVE_CLASS_ANY,\n    DWRITE_PANOSE_DECORATIVE_CLASS_NO_FIT,\n    DWRITE_PANOSE_DECORATIVE_CLASS_DERIVATIVE,\n    DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_TOPOLOGY,\n    DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_ELEMENTS,\n    DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_ASPECT,\n    DWRITE_PANOSE_DECORATIVE_CLASS_INITIALS,\n    DWRITE_PANOSE_DECORATIVE_CLASS_CARTOON,\n    DWRITE_PANOSE_DECORATIVE_CLASS_PICTURE_STEMS,\n    DWRITE_PANOSE_DECORATIVE_CLASS_ORNAMENTED,\n    DWRITE_PANOSE_DECORATIVE_CLASS_TEXT_AND_BACKGROUND,\n    DWRITE_PANOSE_DECORATIVE_CLASS_COLLAGE,\n    DWRITE_PANOSE_DECORATIVE_CLASS_MONTAGE\n} DWRITE_PANOSE_DECORATIVE_CLASS;\n\ntypedef enum DWRITE_PANOSE_ASPECT\n{\n    DWRITE_PANOSE_ASPECT_ANY,\n    DWRITE_PANOSE_ASPECT_NO_FIT,\n    DWRITE_PANOSE_ASPECT_SUPER_CONDENSED,\n    DWRITE_PANOSE_ASPECT_VERY_CONDENSED,\n    DWRITE_PANOSE_ASPECT_CONDENSED,\n    DWRITE_PANOSE_ASPECT_NORMAL,\n    DWRITE_PANOSE_ASPECT_EXTENDED,\n    DWRITE_PANOSE_ASPECT_VERY_EXTENDED,\n    DWRITE_PANOSE_ASPECT_SUPER_EXTENDED,\n    DWRITE_PANOSE_ASPECT_MONOSPACED\n} DWRITE_PANOSE_ASPECT;\n\ntypedef enum DWRITE_PANOSE_FILL\n{\n    DWRITE_PANOSE_FILL_ANY,\n    DWRITE_PANOSE_FILL_NO_FIT,\n    DWRITE_PANOSE_FILL_STANDARD_SOLID_FILL,\n    DWRITE_PANOSE_FILL_NO_FILL,\n    DWRITE_PANOSE_FILL_PATTERNED_FILL,\n    DWRITE_PANOSE_FILL_COMPLEX_FILL,\n    DWRITE_PANOSE_FILL_SHAPED_FILL,\n    DWRITE_PANOSE_FILL_DRAWN_DISTRESSED\n} DWRITE_PANOSE_FILL;\n\ntypedef enum DWRITE_PANOSE_LINING\n{\n    DWRITE_PANOSE_LINING_ANY,\n    DWRITE_PANOSE_LINING_NO_FIT,\n    DWRITE_PANOSE_LINING_NONE,\n    DWRITE_PANOSE_LINING_INLINE,\n    DWRITE_PANOSE_LINING_OUTLINE,\n    DWRITE_PANOSE_LINING_ENGRAVED,\n    DWRITE_PANOSE_LINING_SHADOW,\n    DWRITE_PANOSE_LINING_RELIEF,\n    DWRITE_PANOSE_LINING_BACKDROP\n} DWRITE_PANOSE_LINING;\n\ntypedef enum DWRITE_PANOSE_DECORATIVE_TOPOLOGY\n{\n    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_ANY,\n    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_NO_FIT,\n    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_STANDARD,\n    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_SQUARE,\n    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_MULTIPLE_SEGMENT,\n    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_ART_DECO,\n    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_UNEVEN_WEIGHTING,\n    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_DIVERSE_ARMS,\n    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_DIVERSE_FORMS,\n    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_LOMBARDIC_FORMS,\n    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_UPPER_CASE_IN_LOWER_CASE,\n    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_IMPLIED_TOPOLOGY,\n    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_HORSESHOE_E_AND_A,\n    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_CURSIVE,\n    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_BLACKLETTER,\n    DWRITE_PANOSE_DECORATIVE_TOPOLOGY_SWASH_VARIANCE\n} DWRITE_PANOSE_DECORATIVE_TOPOLOGY;\n\ntypedef enum DWRITE_PANOSE_CHARACTER_RANGES\n{\n    DWRITE_PANOSE_CHARACTER_RANGES_ANY,\n    DWRITE_PANOSE_CHARACTER_RANGES_NO_FIT,\n    DWRITE_PANOSE_CHARACTER_RANGES_EXTENDED_COLLECTION,\n    DWRITE_PANOSE_CHARACTER_RANGES_LITERALS,\n    DWRITE_PANOSE_CHARACTER_RANGES_NO_LOWER_CASE,\n    DWRITE_PANOSE_CHARACTER_RANGES_SMALL_CAPS\n} DWRITE_PANOSE_CHARACTER_RANGES;\n\ntypedef enum DWRITE_PANOSE_SYMBOL_KIND\n{\n    DWRITE_PANOSE_SYMBOL_KIND_ANY,\n    DWRITE_PANOSE_SYMBOL_KIND_NO_FIT,\n    DWRITE_PANOSE_SYMBOL_KIND_MONTAGES,\n    DWRITE_PANOSE_SYMBOL_KIND_PICTURES,\n    DWRITE_PANOSE_SYMBOL_KIND_SHAPES,\n    DWRITE_PANOSE_SYMBOL_KIND_SCIENTIFIC,\n    DWRITE_PANOSE_SYMBOL_KIND_MUSIC,\n    DWRITE_PANOSE_SYMBOL_KIND_EXPERT,\n    DWRITE_PANOSE_SYMBOL_KIND_PATTERNS,\n    DWRITE_PANOSE_SYMBOL_KIND_BOARDERS,\n    DWRITE_PANOSE_SYMBOL_KIND_ICONS,\n    DWRITE_PANOSE_SYMBOL_KIND_LOGOS,\n    DWRITE_PANOSE_SYMBOL_KIND_INDUSTRY_SPECIFIC\n} DWRITE_PANOSE_SYMBOL_KIND;\n\ntypedef enum DWRITE_PANOSE_SYMBOL_ASPECT_RATIO\n{\n    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_ANY,\n    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NO_FIT,\n    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NO_WIDTH,\n    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_EXCEPTIONALLY_WIDE,\n    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_SUPER_WIDE,\n    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_VERY_WIDE,\n    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_WIDE,\n    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NORMAL,\n    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NARROW,\n    DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_VERY_NARROW\n} DWRITE_PANOSE_SYMBOL_ASPECT_RATIO;\n\ntypedef enum DWRITE_OUTLINE_THRESHOLD\n{\n    DWRITE_OUTLINE_THRESHOLD_ANTIALIASED,\n    DWRITE_OUTLINE_THRESHOLD_ALIASED\n} DWRITE_OUTLINE_THRESHOLD;\n\ntypedef enum DWRITE_BASELINE\n{\n    DWRITE_BASELINE_DEFAULT,\n    DWRITE_BASELINE_ROMAN,\n    DWRITE_BASELINE_CENTRAL,\n    DWRITE_BASELINE_MATH,\n    DWRITE_BASELINE_HANGING,\n    DWRITE_BASELINE_IDEOGRAPHIC_BOTTOM,\n    DWRITE_BASELINE_IDEOGRAPHIC_TOP,\n    DWRITE_BASELINE_MINIMUM,\n    DWRITE_BASELINE_MAXIMUM\n} DWRITE_BASELINE;\n\ntypedef enum DWRITE_VERTICAL_GLYPH_ORIENTATION\n{\n    DWRITE_VERTICAL_GLYPH_ORIENTATION_DEFAULT,\n    DWRITE_VERTICAL_GLYPH_ORIENTATION_STACKED\n} DWRITE_VERTICAL_GLYPH_ORIENTATION;\n\ntypedef enum DWRITE_GLYPH_ORIENTATION_ANGLE\n{\n    DWRITE_GLYPH_ORIENTATION_ANGLE_0_DEGREES,\n    DWRITE_GLYPH_ORIENTATION_ANGLE_90_DEGREES,\n    DWRITE_GLYPH_ORIENTATION_ANGLE_180_DEGREES,\n    DWRITE_GLYPH_ORIENTATION_ANGLE_270_DEGREES\n} DWRITE_GLYPH_ORIENTATION_ANGLE;\n\ntypedef struct DWRITE_FONT_METRICS1\n{\n    UINT16 designUnitsPerEm;\n    UINT16 ascent;\n    UINT16 descent;\n    INT16 lineGap;\n    UINT16 capHeight;\n    UINT16 xHeight;\n    INT16 underlinePosition;\n    UINT16 underlineThickness;\n    INT16 strikethroughPosition;\n    UINT16 strikethroughThickness;\n    INT16 glyphBoxLeft;\n    INT16 glyphBoxTop;\n    INT16 glyphBoxRight;\n    INT16 glyphBoxBottom;\n    INT16 subscriptPositionX;\n    INT16 subscriptPositionY;\n    INT16 subscriptSizeX;\n    INT16 subscriptSizeY;\n    INT16 superscriptPositionX;\n    INT16 superscriptPositionY;\n    INT16 superscriptSizeX;\n    INT16 superscriptSizeY;\n    BOOL hasTypographicMetrics;\n} DWRITE_FONT_METRICS1;\n\ntypedef struct DWRITE_CARET_METRICS\n{\n    INT16 slopeRise;\n    INT16 slopeRun;\n    INT16 offset;\n} DWRITE_CARET_METRICS;\n\ntypedef union DWRITE_PANOSE\n{\n    UINT8 values[10];\n    UINT8 familyKind;\n    struct\n    {\n        UINT8 familyKind;\n        UINT8 serifStyle;\n        UINT8 weight;\n        UINT8 proportion;\n        UINT8 contrast;\n        UINT8 strokeVariation;\n        UINT8 armStyle;\n        UINT8 letterform;\n        UINT8 midline;\n        UINT8 xHeight;\n    } text;\n    struct\n    {\n        UINT8 familyKind;\n        UINT8 toolKind;\n        UINT8 weight;\n        UINT8 spacing;\n        UINT8 aspectRatio;\n        UINT8 contrast;\n        UINT8 scriptTopology;\n        UINT8 scriptForm;\n        UINT8 finials;\n        UINT8 xAscent;\n    } script;\n    struct\n    {\n        UINT8 familyKind;\n        UINT8 decorativeClass;\n        UINT8 weight;\n        UINT8 aspect;\n        UINT8 contrast;\n        UINT8 serifVariant;\n        UINT8 fill;\n        UINT8 lining;\n        UINT8 decorativeTopology;\n        UINT8 characterRange;\n    } decorative;\n    struct\n    {\n        UINT8 familyKind;\n        UINT8 symbolKind;\n        UINT8 weight;\n        UINT8 spacing;\n        UINT8 aspectRatioAndContrast;\n        UINT8 aspectRatio94;\n        UINT8 aspectRatio119;\n        UINT8 aspectRatio157;\n        UINT8 aspectRatio163;\n        UINT8 aspectRatio211;\n    } symbol;\n} DWRITE_PANOSE;\n\ntypedef struct DWRITE_UNICODE_RANGE\n{\n    UINT32 first;\n    UINT32 last;\n} DWRITE_UNICODE_RANGE;\n\ntypedef struct DWRITE_SCRIPT_PROPERTIES\n{\n    UINT32 isoScriptCode;\n    UINT32 isoScriptNumber;\n    UINT32 clusterLookahead;\n    UINT32 justificationCharacter;\n    UINT32 restrictCaretToClusters : 1;\n    UINT32 usesWordDividers : 1;\n    UINT32 isDiscreteWriting : 1;\n    UINT32 isBlockWriting : 1;\n    UINT32 isDistributedWithinCluster : 1;\n    UINT32 isConnectedWriting : 1;\n    UINT32 isCursiveWriting : 1;\n    UINT32 reserved : 25;\n} DWRITE_SCRIPT_PROPERTIES;\n\ntypedef struct DWRITE_JUSTIFICATION_OPPORTUNITY\n{\n    FLOAT expansionMinimum;\n    FLOAT expansionMaximum;\n    FLOAT compressionMaximum;\n    UINT32 expansionPriority : 8;\n    UINT32 compressionPriority : 8;\n    UINT32 allowResidualExpansion : 1;\n    UINT32 allowResidualCompression : 1;\n    UINT32 applyToLeadingEdge : 1;\n    UINT32 applyToTrailingEdge : 1;\n    UINT32 reserved : 12;\n} DWRITE_JUSTIFICATION_OPPORTUNITY;\n\ninterface IDWriteTextAnalysisSource1;\ninterface IDWriteTextAnalysisSink1;\ninterface IDWriteRenderingParams1;\n\n[\nlocal,\nobject,\nuuid(30572f99-dac6-41db-a16e-0486307e606a)\n]\ninterface IDWriteFactory1 : IDWriteFactory\n{\n    HRESULT GetEudcFontCollection(IDWriteFontCollection **collection,\n                                  [defaultvalue(FALSE)] BOOL check_for_updates);\n    HRESULT CreateCustomRenderingParams(FLOAT gamma,\n                                        FLOAT enhcontrast,\n                                        FLOAT enhcontrast_grayscale,\n                                        FLOAT cleartype_level,\n                                        DWRITE_PIXEL_GEOMETRY geometry,\n                                        DWRITE_RENDERING_MODE mode,\n                                        IDWriteRenderingParams1** params);\n}\n\n[\nlocal,\nobject,\nuuid(a71efdb4-9fdb-4838-ad90-cfc3be8c3daf)\n]\ninterface IDWriteFontFace1 : IDWriteFontFace\n{\n    void GetMetrics(DWRITE_FONT_METRICS1 *metrics);\n    HRESULT GetGdiCompatibleMetrics(FLOAT em_size,\n                                    FLOAT pixels_per_dip,\n                                    const DWRITE_MATRIX *transform,\n                                    DWRITE_FONT_METRICS1 *metrics);\n    void GetCaretMetrics(DWRITE_CARET_METRICS *metrics);\n    HRESULT GetUnicodeRanges(UINT32 max_count,\n                             DWRITE_UNICODE_RANGE *ranges,\n                             UINT32 *count);\n    BOOL IsMonospacedFont();\n    HRESULT GetDesignGlyphAdvances(UINT32 glyph_count,\n                                   UINT16 const *indices,\n                                   INT32 *advances,\n                                   [defaultvalue(FALSE)] BOOL is_sideways);\n    HRESULT GetGdiCompatibleGlyphAdvances(FLOAT em_size,\n                                          FLOAT pixels_per_dip,\n                                          const DWRITE_MATRIX *transform,\n                                          BOOL use_gdi_natural,\n                                          BOOL is_sideways,\n                                          UINT32 glyph_count,\n                                          const UINT16 *indices,\n                                          INT32 *advances);\n\n    HRESULT GetKerningPairAdjustments(UINT32 glyph_count,\n                                      const UINT16 *indices,\n                                      INT32 *adjustments);\n    BOOL HasKerningPairs();\n    HRESULT GetRecommendedRenderingMode(FLOAT font_emsize,\n                                        FLOAT dpiX,\n                                        FLOAT dpiY,\n                                        const DWRITE_MATRIX *transform,\n                                        BOOL is_sideways,\n                                        DWRITE_OUTLINE_THRESHOLD threshold,\n                                        DWRITE_MEASURING_MODE measuring_mode,\n                                        DWRITE_RENDERING_MODE *rendering_mode);\n\n    HRESULT GetVerticalGlyphVariants(UINT32 glyph_count,\n                                     const UINT16 *nominal_indices,\n                                     UINT16 *vertical_indices);\n    BOOL HasVerticalGlyphVariants();\n}\n\n[\nlocal,\nobject,\nuuid(acd16696-8c14-4f5d-877e-fe3fc1d32738)\n]\ninterface IDWriteFont1 : IDWriteFont\n{\n    void GetMetrics(DWRITE_FONT_METRICS1 *metrics);\n    void GetPanose(DWRITE_PANOSE *panose);\n    HRESULT GetUnicodeRanges(UINT32 max_count,\n                             DWRITE_UNICODE_RANGE *ranges,\n                             UINT32 *count);\n    BOOL IsMonospacedFont();\n}\n\n[\nlocal,\nobject,\nuuid(94413cf4-a6fc-4248-8b50-6674348fcad3)\n]\ninterface IDWriteRenderingParams1 : IDWriteRenderingParams\n{\n    FLOAT GetGrayscaleEnhancedContrast();\n}\n\n[\nlocal,\nobject,\nuuid(80dad800-e21f-4e83-96ce-bfcce500db7c)\n]\ninterface IDWriteTextAnalyzer1 : IDWriteTextAnalyzer\n{\n    HRESULT ApplyCharacterSpacing(FLOAT leading_spacing,\n                                  FLOAT trailing_spacing,\n                                  FLOAT min_advance_width,\n                                  UINT32 len,\n                                  UINT32 glyph_count,\n                                  UINT16 const *clustermap,\n                                  FLOAT const *advances,\n                                  DWRITE_GLYPH_OFFSET const *offsets,\n                                  DWRITE_SHAPING_GLYPH_PROPERTIES const *props,\n                                  FLOAT *modified_advances,\n                                  DWRITE_GLYPH_OFFSET *modified_offsets);\n    HRESULT GetBaseline(IDWriteFontFace *face,\n                        DWRITE_BASELINE baseline,\n                        BOOL vertical,\n                        BOOL is_simulation_allowed,\n                        DWRITE_SCRIPT_ANALYSIS sa,\n                        const WCHAR *localeName,\n                        INT32 *baseline_coord,\n                        BOOL *exists);\n\n    HRESULT AnalyzeVerticalGlyphOrientation(\n        IDWriteTextAnalysisSource1* source,\n        UINT32 text_pos,\n        UINT32 len,\n        IDWriteTextAnalysisSink1 *sink);\n\n    HRESULT GetGlyphOrientationTransform(\n        DWRITE_GLYPH_ORIENTATION_ANGLE angle,\n        BOOL is_sideways,\n        DWRITE_MATRIX *transform);\n\n    HRESULT GetScriptProperties(DWRITE_SCRIPT_ANALYSIS sa, DWRITE_SCRIPT_PROPERTIES *props);\n\n    HRESULT GetTextComplexity(const WCHAR *text,\n                              UINT32 len,\n                              IDWriteFontFace *face,\n                              BOOL *is_simple,\n                              UINT32 *len_read,\n                              UINT16 *indices);\n    HRESULT GetJustificationOpportunities(\n        IDWriteFontFace *face,\n        FLOAT font_em_size,\n        DWRITE_SCRIPT_ANALYSIS sa,\n        UINT32 length,\n        UINT32 glyph_count,\n        const WCHAR *text,\n        const UINT16 *clustermap,\n        const DWRITE_SHAPING_GLYPH_PROPERTIES *prop,\n        DWRITE_JUSTIFICATION_OPPORTUNITY *jo);\n\n    HRESULT JustifyGlyphAdvances(\n        FLOAT width,\n        UINT32 glyph_count,\n        const DWRITE_JUSTIFICATION_OPPORTUNITY *jo,\n        const FLOAT *advances,\n        const DWRITE_GLYPH_OFFSET *offsets,\n        FLOAT *justifiedadvances,\n        DWRITE_GLYPH_OFFSET *justifiedoffsets);\n\n    HRESULT GetJustifiedGlyphs(\n        IDWriteFontFace *face,\n        FLOAT font_em_size,\n        DWRITE_SCRIPT_ANALYSIS sa,\n        UINT32 length,\n        UINT32 glyph_count,\n        UINT32 max_glyphcount,\n        const UINT16 *clustermap,\n        const UINT16 *indices,\n        const FLOAT *advances,\n        const FLOAT *justifiedadvances,\n        const DWRITE_GLYPH_OFFSET *justifiedoffsets,\n        const DWRITE_SHAPING_GLYPH_PROPERTIES *prop,\n        UINT32 *actual_count,\n        UINT16 *modified_clustermap,\n        UINT16 *modified_indices,\n        FLOAT *modified_advances,\n        DWRITE_GLYPH_OFFSET *modified_offsets);\n}\n\n[\nlocal,\nobject,\nuuid(639cfad8-0fb4-4b21-a58a-067920120009)\n]\ninterface IDWriteTextAnalysisSource1 : IDWriteTextAnalysisSource\n{\n    HRESULT GetVerticalGlyphOrientation(\n        UINT32 pos,\n        UINT32 *length,\n        DWRITE_VERTICAL_GLYPH_ORIENTATION *orientation,\n        UINT8 *bidi_level);\n}\n\n[\nlocal,\nobject,\nuuid(b0d941a0-85e7-4d8b-9fd3-5ced9934482a)\n]\ninterface IDWriteTextAnalysisSink1 : IDWriteTextAnalysisSink\n{\n    HRESULT SetGlyphOrientation(\n        UINT32 pos,\n        UINT32 length,\n        DWRITE_GLYPH_ORIENTATION_ANGLE angle,\n        UINT8 adjusted_bidilevel,\n        BOOL is_sideways,\n        BOOL is_rtl);\n}\n\n[\nlocal,\nobject,\nuuid(9064d822-80a7-465c-a986-df65f78b8feb)\n]\ninterface IDWriteTextLayout1 : IDWriteTextLayout\n{\n    HRESULT SetPairKerning(\n        BOOL is_pairkerning_enabled,\n        DWRITE_TEXT_RANGE range);\n\n    HRESULT GetPairKerning(\n        UINT32 position,\n        BOOL *is_pairkerning_enabled,\n        DWRITE_TEXT_RANGE *range);\n\n    HRESULT SetCharacterSpacing(\n        FLOAT leading_spacing,\n        FLOAT trailing_spacing,\n        FLOAT minimum_advance_width,\n        DWRITE_TEXT_RANGE range);\n\n    HRESULT GetCharacterSpacing(\n        UINT32 position,\n        FLOAT* leading_spacing,\n        FLOAT* trailing_spacing,\n        FLOAT* minimum_advance_width,\n        [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);\n}\n\ntypedef enum DWRITE_TEXT_ANTIALIAS_MODE\n{\n    DWRITE_TEXT_ANTIALIAS_MODE_CLEARTYPE,\n    DWRITE_TEXT_ANTIALIAS_MODE_GRAYSCALE\n} DWRITE_TEXT_ANTIALIAS_MODE;\n\n[\nlocal,\nobject,\nuuid(791e8298-3ef3-4230-9880-c9bdecc42064)\n]\ninterface IDWriteBitmapRenderTarget1 : IDWriteBitmapRenderTarget\n{\n    DWRITE_TEXT_ANTIALIAS_MODE GetTextAntialiasMode();\n    HRESULT SetTextAntialiasMode(DWRITE_TEXT_ANTIALIAS_MODE mode);\n}\n"
  },
  {
    "path": "wine/windows/dwrite_2.idl",
    "content": "/*\n * Copyright 2014 Nikolay Sivov for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"dwrite_1.idl\";\n\ntypedef enum DWRITE_OPTICAL_ALIGNMENT\n{\n    DWRITE_OPTICAL_ALIGNMENT_NONE,\n    DWRITE_OPTICAL_ALIGNMENT_NO_SIDE_BEARINGS\n} DWRITE_OPTICAL_ALIGNMENT;\n\ntypedef enum DWRITE_GRID_FIT_MODE\n{\n    DWRITE_GRID_FIT_MODE_DEFAULT,\n    DWRITE_GRID_FIT_MODE_DISABLED,\n    DWRITE_GRID_FIT_MODE_ENABLED\n} DWRITE_GRID_FIT_MODE;\n\ntypedef struct DWRITE_TEXT_METRICS1\n{\n    /* DWRITE_TEXT_METRICS fields */\n    FLOAT left;\n    FLOAT top;\n    FLOAT width;\n    FLOAT widthIncludingTrailingWhitespace;\n    FLOAT height;\n    FLOAT layoutWidth;\n    FLOAT layoutHeight;\n    UINT32 maxBidiReorderingDepth;\n    UINT32 lineCount;\n    /* DWRITE_TEXT_METRICS1 fields */\n    FLOAT heightIncludingTrailingWhitespace;\n} DWRITE_TEXT_METRICS1;\n\ncpp_quote(\"#ifndef D3DCOLORVALUE_DEFINED\")\ntypedef struct _D3DCOLORVALUE\n{\n    union {\n        FLOAT r;\n        FLOAT dvR;\n    };\n    union {\n        FLOAT g;\n        FLOAT dvG;\n    };\n    union {\n        FLOAT b;\n        FLOAT dvB;\n    };\n    union {\n        FLOAT a;\n        FLOAT dvA;\n    };\n} D3DCOLORVALUE;\ncpp_quote(\"#define D3DCOLORVALUE_DEFINED\")\ncpp_quote(\"#endif\")\n\ntypedef D3DCOLORVALUE DWRITE_COLOR_F;\n\ntypedef struct DWRITE_COLOR_GLYPH_RUN\n{\n    DWRITE_GLYPH_RUN glyphRun;\n    DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription;\n    FLOAT baselineOriginX;\n    FLOAT baselineOriginY;\n    DWRITE_COLOR_F runColor;\n    UINT16 paletteIndex;\n} DWRITE_COLOR_GLYPH_RUN;\n\n[\n    local,\n    object,\n    uuid(d3e0e934-22a0-427e-aae4-7d9574b59db1)\n]\ninterface IDWriteTextRenderer1 : IDWriteTextRenderer\n{\n    HRESULT DrawGlyphRun(void *context,\n                         FLOAT originX,\n                         FLOAT originY,\n                         DWRITE_GLYPH_ORIENTATION_ANGLE angle,\n                         DWRITE_MEASURING_MODE mode,\n                         DWRITE_GLYPH_RUN const *run,\n                         DWRITE_GLYPH_RUN_DESCRIPTION const *rundescr,\n                         IUnknown *effect);\n\n    HRESULT DrawUnderline(void *context,\n                          FLOAT originX,\n                          FLOAT originY,\n                          DWRITE_GLYPH_ORIENTATION_ANGLE angle,\n                          DWRITE_UNDERLINE const *underline,\n                          IUnknown *effect);\n\n    HRESULT DrawStrikethrough(void *context,\n                              FLOAT originX,\n                              FLOAT originY,\n                              DWRITE_GLYPH_ORIENTATION_ANGLE angle,\n                              DWRITE_STRIKETHROUGH const *strikethrough,\n                              IUnknown *effect\n                             );\n\n    HRESULT DrawInlineObject(void *context,\n                             FLOAT originX,\n                             FLOAT originY,\n                             DWRITE_GLYPH_ORIENTATION_ANGLE angle,\n                             IDWriteInlineObject *inlineObject,\n                             BOOL is_sideways,\n                             BOOL is_rtl,\n                             IUnknown *effect\n                            );\n}\n\n[\n    local,\n    object,\n    uuid(efa008f9-f7a1-48bf-b05c-f224713cc0ff)\n]\ninterface IDWriteFontFallback : IUnknown\n{\n    HRESULT MapCharacters(IDWriteTextAnalysisSource *source,\n                          UINT32 position,\n                          UINT32 length,\n                          IDWriteFontCollection *basecollection,\n                          const WCHAR *baseFamilyName,\n                          DWRITE_FONT_WEIGHT baseWeight,\n                          DWRITE_FONT_STYLE baseStyle,\n                          DWRITE_FONT_STRETCH baseStretch,\n                          UINT32 *mappedLength,\n                          IDWriteFont **mappedFont,\n                          FLOAT *scale\n                         );\n}\n\n[\n    local,\n    object,\n    uuid(5f174b49-0d8b-4cfb-8bca-f1cce9d06c67)\n]\ninterface IDWriteTextFormat1 : IDWriteTextFormat\n{\n    HRESULT SetVerticalGlyphOrientation(DWRITE_VERTICAL_GLYPH_ORIENTATION orientation);\n    DWRITE_VERTICAL_GLYPH_ORIENTATION GetVerticalGlyphOrientation();\n    HRESULT SetLastLineWrapping(BOOL lastline_wrapping_enabled);\n    BOOL GetLastLineWrapping();\n    HRESULT SetOpticalAlignment(DWRITE_OPTICAL_ALIGNMENT alignment);\n    DWRITE_OPTICAL_ALIGNMENT GetOpticalAlignment();\n    HRESULT SetFontFallback(IDWriteFontFallback *fallback);\n    HRESULT GetFontFallback(IDWriteFontFallback **fallback);\n}\n\n[\n    local,\n    object,\n    uuid(1093c18f-8d5e-43f0-b064-0917311b525e)\n]\ninterface IDWriteTextLayout2 : IDWriteTextLayout1\n{\n    HRESULT GetMetrics(DWRITE_TEXT_METRICS1 *metrics);\n    HRESULT SetVerticalGlyphOrientation(DWRITE_VERTICAL_GLYPH_ORIENTATION orientation);\n    DWRITE_VERTICAL_GLYPH_ORIENTATION GetVerticalGlyphOrientation();\n    HRESULT SetLastLineWrapping(BOOL lastline_wrapping_enabled);\n    BOOL GetLastLineWrapping();\n    HRESULT SetOpticalAlignment(DWRITE_OPTICAL_ALIGNMENT alignment);\n    DWRITE_OPTICAL_ALIGNMENT GetOpticalAlignment();\n    HRESULT SetFontFallback(IDWriteFontFallback *fallback);\n    HRESULT GetFontFallback(IDWriteFontFallback **fallback);\n}\n\n[\n    local,\n    object,\n    uuid(553a9ff3-5693-4df7-b52b-74806f7f2eb9)\n]\ninterface IDWriteTextAnalyzer2 : IDWriteTextAnalyzer1\n{\n    HRESULT GetGlyphOrientationTransform(DWRITE_GLYPH_ORIENTATION_ANGLE angle,\n                                         BOOL is_sideways,\n                                         FLOAT originX,\n                                         FLOAT originY,\n                                         DWRITE_MATRIX *transform\n                                        );\n    HRESULT GetTypographicFeatures(IDWriteFontFace *fontface,\n                                   DWRITE_SCRIPT_ANALYSIS analysis,\n                                   const WCHAR *localeName,\n                                   UINT32 max_tagcount,\n                                   UINT32 *actual_tagcount,\n                                   DWRITE_FONT_FEATURE_TAG *tags\n                                  );\n\n    HRESULT CheckTypographicFeature(IDWriteFontFace *fontface,\n                                    DWRITE_SCRIPT_ANALYSIS analysis,\n                                    const WCHAR *localeName,\n                                    DWRITE_FONT_FEATURE_TAG feature,\n                                    UINT32 glyph_count,\n                                    const UINT16 *indices,\n                                    UINT8 *feature_applies\n                                   );\n}\n\n[\n    local,\n    object,\n    uuid(fd882d06-8aba-4fb8-b849-8be8b73e14de)\n]\ninterface IDWriteFontFallbackBuilder : IUnknown\n{\n    HRESULT AddMapping(const DWRITE_UNICODE_RANGE *ranges,\n                       UINT32 rangesCount,\n                       WCHAR const **targetFamilyNames,\n                       UINT32 targetFamilyNamesCount,\n                       [defaultvalue(NULL)] IDWriteFontCollection *collection,\n                       [defaultvalue(NULL)] WCHAR const *localeName,\n                       [defaultvalue(NULL)] WCHAR const *baseFamilyName,\n                       [defaultvalue(1)] FLOAT scale\n                      );\n    HRESULT AddMappings(IDWriteFontFallback *fallback);\n    HRESULT CreateFontFallback(IDWriteFontFallback **fallback);\n}\n\n[\n    local,\n    object,\n    uuid(29748ed6-8c9c-4a6a-be0b-d912e8538944)\n]\ninterface IDWriteFont2 : IDWriteFont1\n{\n    BOOL IsColorFont();\n}\n\n[\n    local,\n    object,\n    uuid(d8b768ff-64bc-4e66-982b-ec8e87f693f7)\n]\ninterface IDWriteFontFace2 : IDWriteFontFace1\n{\n    BOOL IsColorFont();\n    UINT32 GetColorPaletteCount();\n    UINT32 GetPaletteEntryCount();\n    HRESULT GetPaletteEntries(UINT32 palette_index,\n                              UINT32 first_entry_index,\n                              UINT32 entry_count,\n                              DWRITE_COLOR_F *entries\n                             );\n    HRESULT GetRecommendedRenderingMode(FLOAT fontEmSize,\n                                        FLOAT dpiX,\n                                        FLOAT dpiY,\n                                        DWRITE_MATRIX const *transform,\n                                        BOOL is_sideways,\n                                        DWRITE_OUTLINE_THRESHOLD threshold,\n                                        DWRITE_MEASURING_MODE measuringmode,\n                                        IDWriteRenderingParams *params,\n                                        DWRITE_RENDERING_MODE *renderingmode,\n                                        DWRITE_GRID_FIT_MODE *gridfitmode\n                                       );\n}\n\n[\n    local,\n    object,\n    uuid(d31fbe17-f157-41a2-8d24-cb779e0560e8)\n]\ninterface IDWriteColorGlyphRunEnumerator : IUnknown\n{\n    HRESULT MoveNext(BOOL *hasRun);\n    HRESULT GetCurrentRun(DWRITE_COLOR_GLYPH_RUN const **run);\n}\n\n[\n    local,\n    object,\n    uuid(f9d711c3-9777-40ae-87e8-3e5aF9bf0948)\n]\ninterface IDWriteRenderingParams2 : IDWriteRenderingParams1\n{\n    DWRITE_GRID_FIT_MODE GetGridFitMode();\n}\n\n[\n    local,\n    object,\n    uuid(0439fc60-ca44-4994-8dee-3a9af7b732ec)\n]\ninterface IDWriteFactory2 : IDWriteFactory1\n{\n    HRESULT GetSystemFontFallback(IDWriteFontFallback **fallback);\n    HRESULT CreateFontFallbackBuilder(IDWriteFontFallbackBuilder **fallbackbuilder);\n    HRESULT TranslateColorGlyphRun(FLOAT originX,\n                                   FLOAT originY,\n                                   const DWRITE_GLYPH_RUN *run,\n                                   const DWRITE_GLYPH_RUN_DESCRIPTION *rundescr,\n                                   DWRITE_MEASURING_MODE mode,\n                                   const DWRITE_MATRIX *transform,\n                                   UINT32 palette_index,\n                                   IDWriteColorGlyphRunEnumerator **colorlayers\n                                  );\n\n    HRESULT CreateCustomRenderingParams(FLOAT gamma,\n                                        FLOAT contrast,\n                                        FLOAT grayscalecontrast,\n                                        FLOAT cleartypeLevel,\n                                        DWRITE_PIXEL_GEOMETRY pixelGeometry,\n                                        DWRITE_RENDERING_MODE renderingMode,\n                                        DWRITE_GRID_FIT_MODE gridFitMode,\n                                        IDWriteRenderingParams2 **params\n                                       );\n\n    HRESULT CreateGlyphRunAnalysis(const DWRITE_GLYPH_RUN *run,\n                                   const DWRITE_MATRIX *transform,\n                                   DWRITE_RENDERING_MODE renderingMode,\n                                   DWRITE_MEASURING_MODE measuringMode,\n                                   DWRITE_GRID_FIT_MODE gridFitMode,\n                                   DWRITE_TEXT_ANTIALIAS_MODE antialiasMode,\n                                   FLOAT originX,\n                                   FLOAT originY,\n                                   IDWriteGlyphRunAnalysis **analysis\n                                  );\n}\n"
  },
  {
    "path": "wine/windows/dwrite_3.idl",
    "content": "/*\n * Copyright 2016 Nikolay Sivov for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"dwrite_2.idl\";\n\ninterface IDWriteFontFaceReference;\ninterface IDWriteFontFaceReference1;\ninterface IDWriteFontFace3;\ninterface IDWriteFontSet;\ninterface IDWriteFontDownloadQueue;\ninterface IDWriteFontFace5;\ninterface IDWriteFontList2;\n\ncpp_quote(\"#ifndef _WINGDI_\")\n/* already defined in wingdi.h but needed for WIDL */\ntypedef struct FONTSIGNATURE FONTSIGNATURE;\ncpp_quote(\"#endif /* _WINGDI_ */\")\n\ntypedef enum DWRITE_LOCALITY\n{\n    DWRITE_LOCALITY_REMOTE,\n    DWRITE_LOCALITY_PARTIAL,\n    DWRITE_LOCALITY_LOCAL\n} DWRITE_LOCALITY;\n\ntypedef enum DWRITE_RENDERING_MODE1\n{\n    DWRITE_RENDERING_MODE1_DEFAULT,\n    DWRITE_RENDERING_MODE1_ALIASED,\n    DWRITE_RENDERING_MODE1_GDI_CLASSIC,\n    DWRITE_RENDERING_MODE1_GDI_NATURAL,\n    DWRITE_RENDERING_MODE1_NATURAL,\n    DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC,\n    DWRITE_RENDERING_MODE1_OUTLINE,\n    DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC_DOWNSAMPLED\n} DWRITE_RENDERING_MODE1;\n\ntypedef enum DWRITE_FONT_PROPERTY_ID\n{\n    DWRITE_FONT_PROPERTY_ID_NONE,\n    DWRITE_FONT_PROPERTY_ID_FAMILY_NAME,\n    DWRITE_FONT_PROPERTY_ID_PREFERRED_FAMILY_NAME,\n    DWRITE_FONT_PROPERTY_ID_FACE_NAME,\n    DWRITE_FONT_PROPERTY_ID_FULL_NAME,\n    DWRITE_FONT_PROPERTY_ID_WIN32_FAMILY_NAME,\n    DWRITE_FONT_PROPERTY_ID_POSTSCRIPT_NAME,\n    DWRITE_FONT_PROPERTY_ID_DESIGN_SCRIPT_LANGUAGE_TAG,\n    DWRITE_FONT_PROPERTY_ID_SUPPORTED_SCRIPT_LANGUAGE_TAG,\n    DWRITE_FONT_PROPERTY_ID_SEMANTIC_TAG,\n    DWRITE_FONT_PROPERTY_ID_WEIGHT,\n    DWRITE_FONT_PROPERTY_ID_STRETCH,\n    DWRITE_FONT_PROPERTY_ID_STYLE,\n    DWRITE_FONT_PROPERTY_ID_TOTAL\n} DWRITE_FONT_PROPERTY_ID;\n\ntypedef struct DWRITE_FONT_PROPERTY\n{\n    DWRITE_FONT_PROPERTY_ID propertyId;\n    WCHAR const *propertyValue;\n    WCHAR const *localeName;\n} DWRITE_FONT_PROPERTY;\n\ntypedef enum DWRITE_FONT_AXIS_TAG\n{\n    DWRITE_FONT_AXIS_TAG_WEIGHT       = 0x74686777, /* 'wght' */\n    DWRITE_FONT_AXIS_TAG_WIDTH        = 0x68746477, /* 'wdth' */\n    DWRITE_FONT_AXIS_TAG_SLANT        = 0x746e6c73, /* 'slnt' */\n    DWRITE_FONT_AXIS_TAG_OPTICAL_SIZE = 0x7a73706f, /* 'opsz' */\n    DWRITE_FONT_AXIS_TAG_ITALIC       = 0x6c617469, /* 'ital' */\n} DWRITE_FONT_AXIS_TAG;\n\ntypedef struct DWRITE_FONT_AXIS_VALUE\n{\n    DWRITE_FONT_AXIS_TAG axisTag;\n    FLOAT value;\n} DWRITE_FONT_AXIS_VALUE;\n\ntypedef struct DWRITE_FONT_AXIS_RANGE\n{\n    DWRITE_FONT_AXIS_TAG axisTag;\n    FLOAT minValue;\n    FLOAT maxValue;\n} DWRITE_FONT_AXIS_RANGE;\n\ntypedef enum DWRITE_AUTOMATIC_FONT_AXES\n{\n    DWRITE_AUTOMATIC_FONT_AXES_NONE,\n    DWRITE_AUTOMATIC_FONT_AXES_OPTICAL_SIZE,\n} DWRITE_AUTOMATIC_FONT_AXES;\n\ntypedef enum DWRITE_FONT_AXIS_ATTRIBUTES\n{\n    DWRITE_FONT_AXIS_ATTRIBUTES_NONE,\n    DWRITE_FONT_AXIS_ATTRIBUTES_VARIABLE,\n    DWRITE_FONT_AXIS_ATTRIBUTES_HIDDEN,\n} DWRITE_FONT_AXIS_ATTRIBUTES;\n\ntypedef enum DWRITE_FONT_FAMILY_MODEL\n{\n    DWRITE_FONT_FAMILY_MODEL_TYPOGRAPHIC,\n    DWRITE_FONT_FAMILY_MODEL_WEIGHT_STRETCH_STYLE,\n} DWRITE_FONT_FAMILY_MODEL;\n\n[\n    local,\n    object,\n    uuid(b06fe5b9-43ec-4393-881b-dbe4dc72fda7)\n]\ninterface IDWriteFontDownloadListener : IUnknown\n{\n    void DownloadCompleted(IDWriteFontDownloadQueue *queue, IUnknown *context, HRESULT result);\n}\n\n[\n    local,\n    object,\n    uuid(b71e6052-5aea-4fa3-832e-f60d431f7e91)\n]\ninterface IDWriteFontDownloadQueue : IUnknown\n{\n    HRESULT AddListener(IDWriteFontDownloadListener *listener, UINT32 *token);\n    HRESULT RemoveListener(UINT32 token);\n    BOOL IsEmpty();\n    HRESULT BeginDownload(IUnknown *context);\n    HRESULT CancelDownload();\n    UINT64 GetGenerationCount();\n}\n\n[\n    local,\n    object,\n    uuid(b7924baa-391b-412a-8c5c-e44cc2d867dc)\n]\ninterface IDWriteRenderingParams3 : IDWriteRenderingParams2\n{\n    DWRITE_RENDERING_MODE1 GetRenderingMode1();\n}\n\n[\n    local,\n    object,\n    uuid(cfee3140-1257-47ca-8b85-31bfcf3f2d0e)\n]\ninterface IDWriteStringList : IUnknown\n{\n    UINT32 GetCount();\n    HRESULT GetLocaleNameLength(UINT32 index, UINT32 *length);\n    HRESULT GetLocaleName(UINT32 index, WCHAR *name, UINT32 size);\n    HRESULT GetStringLength(UINT32 index, UINT32 *length);\n    HRESULT GetString(UINT32 index, WCHAR *string, UINT32 size);\n}\n\n[\n    local,\n    object,\n    uuid(53585141-d9f8-4095-8321-d73cf6bd116b)\n]\ninterface IDWriteFontSet : IUnknown\n{\n    UINT32 GetFontCount();\n    HRESULT GetFontFaceReference(UINT32 index, IDWriteFontFaceReference **reference);\n    HRESULT FindFontFaceReference(IDWriteFontFaceReference *reference,\n        UINT32 *index, BOOL *exists);\n    HRESULT FindFontFace(IDWriteFontFace *fontface, UINT32 *index, BOOL *exists);\n    HRESULT GetPropertyValues__(DWRITE_FONT_PROPERTY_ID id, IDWriteStringList **values);\n    HRESULT GetPropertyValues_(DWRITE_FONT_PROPERTY_ID id,\n        WCHAR const *preferred_locales, IDWriteStringList **values);\n    HRESULT GetPropertyValues(UINT32 index, DWRITE_FONT_PROPERTY_ID id, BOOL *exists,\n        IDWriteLocalizedStrings **values);\n    HRESULT GetPropertyOccurrenceCount(DWRITE_FONT_PROPERTY const *property, UINT32 *count);\n    HRESULT GetMatchingFonts_(WCHAR const *family, DWRITE_FONT_WEIGHT weight, DWRITE_FONT_STRETCH stretch,\n        DWRITE_FONT_STYLE style, IDWriteFontSet **fontset);\n    HRESULT GetMatchingFonts(DWRITE_FONT_PROPERTY const *props, UINT32 count, IDWriteFontSet **fontset);\n}\n\n[\n    local,\n    object,\n    uuid(1f803a76-6871-48e8-987f-b975551c50f2)\n]\ninterface IDWriteFontResource : IUnknown\n{\n    HRESULT GetFontFile(IDWriteFontFile **fontfile);\n    UINT32 GetFontFaceIndex();\n    UINT32 GetFontAxisCount();\n    HRESULT GetDefaultFontAxisValues(\n        DWRITE_FONT_AXIS_VALUE const *values,\n        UINT32 num_values);\n    HRESULT GetFontAxisRanges(\n        DWRITE_FONT_AXIS_RANGE const *ranges,\n        UINT32 num_ranges);\n    DWRITE_FONT_AXIS_ATTRIBUTES GetFontAxisAttributes(\n        UINT32 axis);\n    HRESULT GetAxisNames(\n        UINT32 axis,\n        IDWriteLocalizedStrings **names);\n    UINT32 GetAxisValueNameCount(\n        UINT32 axis);\n    HRESULT GetAxisValueNames(\n        UINT32 axis,\n        UINT32 axis_value,\n        DWRITE_FONT_AXIS_RANGE *axis_range,\n        IDWriteLocalizedStrings **names);\n    BOOL HasVariations();\n    HRESULT CreateFontFace(\n        DWRITE_FONT_SIMULATIONS simulations,\n        DWRITE_FONT_AXIS_VALUE const *axis_values,\n        UINT32 num_values,\n        IDWriteFontFace5 **fontface);\n    HRESULT CreateFontFaceReference(\n        DWRITE_FONT_SIMULATIONS simulations,\n        DWRITE_FONT_AXIS_VALUE const *axis_values,\n        UINT32 num_values,\n        IDWriteFontFaceReference1 **reference);\n}\n\n[\n    local,\n    object,\n    uuid(7e9fda85-6c92-4053-bc47-7ae3530db4d3)\n]\ninterface IDWriteFontSet1 : IDWriteFontSet\n{\n    HRESULT GetMatchingFonts(\n        DWRITE_FONT_PROPERTY const *property,\n        DWRITE_FONT_AXIS_VALUE const *axis_values,\n        UINT32 num_values,\n        IDWriteFontSet1 **fontset);\n    HRESULT GetFirstFontResources(IDWriteFontSet1 **fontset);\n    HRESULT GetFilteredFonts__(\n        UINT32 const *indices,\n        UINT32 num_indices,\n        IDWriteFontSet1 **fontset);\n    HRESULT GetFilteredFonts_(\n        DWRITE_FONT_AXIS_RANGE const *axis_ranges,\n        UINT32 num_ranges,\n        BOOL select_any_range,\n        IDWriteFontSet1 **fontset);\n    HRESULT GetFilteredFonts(\n        DWRITE_FONT_PROPERTY const *props,\n        UINT32 num_properties,\n        BOOL select_any_property,\n        IDWriteFontSet1 **fontset);\n    HRESULT GetFilteredFontIndices_(\n        DWRITE_FONT_AXIS_RANGE const *ranges,\n        UINT32 num_ranges,\n        BOOL select_any_range,\n        UINT32 *indices,\n        UINT32 num_indices,\n        UINT32 *actual_num_indices);\n    HRESULT GetFilteredFontIndices(\n        DWRITE_FONT_PROPERTY const *props,\n        UINT32 num_properties,\n        BOOL select_any_range,\n        UINT32 *indices,\n        UINT32 num_indices,\n        UINT32 *actual_num_indices);\n    HRESULT GetFontAxisRanges_(\n        UINT32 font_index,\n        DWRITE_FONT_AXIS_RANGE *axis_ranges,\n        UINT32 num_ranges,\n        UINT32 *actual_num_ranges);\n    HRESULT GetFontAxisRanges(\n        DWRITE_FONT_AXIS_RANGE *axis_ranges,\n        UINT32 num_ranges,\n        UINT32 *actual_num_ranges);\n    HRESULT GetFontFaceReference(\n        UINT32 index,\n        IDWriteFontFaceReference1 **reference);\n    HRESULT CreateFontResource(\n        UINT32 index,\n        IDWriteFontResource **resource);\n    HRESULT CreateFontFace(\n        UINT32 index,\n        IDWriteFontFace5 **fontface);\n    DWRITE_LOCALITY GetFontLocality(UINT32 index);\n}\n\n[\n    local,\n    object,\n    uuid(29748ed6-8c9c-4a6a-be0b-d912e8538944)\n]\ninterface IDWriteFont3 : IDWriteFont2\n{\n    HRESULT CreateFontFace(IDWriteFontFace3 **fontface);\n    BOOL Equals(IDWriteFont *font);\n    HRESULT GetFontFaceReference(IDWriteFontFaceReference **reference);\n    BOOL HasCharacter(UINT32 character);\n    DWRITE_LOCALITY GetLocality();\n}\n\n[\n    local,\n    object,\n    uuid(da20d8ef-812a-4c43-9802-62ec4abd7adf)\n]\ninterface IDWriteFontFamily1 : IDWriteFontFamily\n{\n    DWRITE_LOCALITY GetFontLocality(UINT32 index);\n    HRESULT GetFont(UINT32 index, IDWriteFont3 **font);\n    HRESULT GetFontFaceReference(UINT32 index, IDWriteFontFaceReference **reference);\n}\n\n[\n    local,\n    object,\n    uuid(3ed49e77-a398-4261-b9cf-c126c2131ef3)\n]\ninterface IDWriteFontFamily2 : IDWriteFontFamily1\n{\n    HRESULT GetMatchingFonts(\n        DWRITE_FONT_AXIS_VALUE const *axis_values,\n        UINT32 num_values,\n        IDWriteFontList2 **fontlist);\n    HRESULT GetFontSet(IDWriteFontSet1 **fontset);\n}\n\n[\n    local,\n    object,\n    uuid(53585141-d9f8-4095-8321-d73cf6bd116c)\n]\ninterface IDWriteFontCollection1 : IDWriteFontCollection\n{\n    HRESULT GetFontSet(IDWriteFontSet **fontset);\n    HRESULT GetFontFamily(UINT32 index, IDWriteFontFamily1 **family);\n}\n\n[\n    local,\n    object,\n    uuid(514039c6-4617-4064-bf8b-92ea83e506e0)\n]\ninterface IDWriteFontCollection2 : IDWriteFontCollection1\n{\n    HRESULT GetFontFamily(\n        UINT32 index,\n        IDWriteFontFamily2 **family);\n    HRESULT GetMatchingFonts(\n        const WCHAR *familyname,\n        DWRITE_FONT_AXIS_VALUE const *axis_values,\n        UINT32 num_values,\n        IDWriteFontList2 **fontlist);\n    DWRITE_FONT_FAMILY_MODEL GetFontFamilyModel();\n    HRESULT GetFontSet(IDWriteFontSet1 **fontset);\n}\n\n[\n    local,\n    object,\n    uuid(a4d055a6-f9e3-4e25-93b7-9e309f3af8e9)\n]\ninterface IDWriteFontCollection3 : IDWriteFontCollection2\n{\n    HANDLE GetExiprationEvent();\n}\n\n[\n    local,\n    object,\n    uuid(5e7fa7ca-dde3-424c-89f0-9fcd6fed58cd)\n]\ninterface IDWriteFontFaceReference : IUnknown\n{\n    HRESULT CreateFontFace(IDWriteFontFace3 **fontface);\n    HRESULT CreateFontFaceWithSimulations(DWRITE_FONT_SIMULATIONS simulations,\n        IDWriteFontFace3 **fontface);\n    BOOL Equals(IDWriteFontFaceReference *reference);\n    UINT32 GetFontFaceIndex();\n    DWRITE_FONT_SIMULATIONS GetSimulations();\n    HRESULT GetFontFile(IDWriteFontFile **fontfile);\n    UINT64 GetLocalFileSize();\n    UINT64 GetFileSize();\n    HRESULT GetFileTime(FILETIME *writetime);\n    DWRITE_LOCALITY GetLocality();\n    HRESULT EnqueueFontDownloadRequest();\n    HRESULT EnqueueCharacterDownloadRequest(WCHAR const *chars, UINT32 count);\n    HRESULT EnqueueGlyphDownloadRequest(UINT16 const *glyphs, UINT32 count);\n    HRESULT EnqueueFileFragmentDownloadRequest(UINT64 offset, UINT64 size);\n}\n\n[\n    local,\n    object,\n    uuid(c081fe77-2fd1-41ac-a5a3-34983c4ba61a)\n]\ninterface IDWriteFontFaceReference1 : IDWriteFontFaceReference\n{\n    HRESULT CreateFontFace(IDWriteFontFace5 **fontface);\n    UINT32 GetFontAxisValueCount();\n    HRESULT GetFontAxisValues(\n        DWRITE_FONT_AXIS_VALUE *values,\n        UINT32 num_values);\n}\n\n[\n    local,\n    object,\n    uuid(da20d8ef-812a-4c43-9802-62ec4abd7ade)\n]\ninterface IDWriteFontList1 : IDWriteFontList\n{\n    DWRITE_LOCALITY GetFontLocality(UINT32 index);\n    HRESULT GetFont(UINT32 index, IDWriteFont3 **font);\n    HRESULT GetFontFaceReference(UINT32 index, IDWriteFontFaceReference **reference);\n}\n\n[\n    local,\n    object,\n    uuid(c0763a34-77af-445a-b735-08c37b0a5bf5)\n]\ninterface IDWriteFontList2 : IDWriteFontList1\n{\n    HRESULT GetFontSet(IDWriteFontSet1 **fontset);\n}\n\n[\n    local,\n    object,\n    uuid(dc7ead19-e54c-43af-b2da-4e2b79ba3f7f)\n]\ninterface IDWriteFontSet2 : IDWriteFontSet1\n{\n    HANDLE GetExpirationEvent();\n}\n\n[\n    local,\n    object,\n    uuid(d37d7598-09be-4222-a236-2081341cc1f2)\n]\ninterface IDWriteFontFace3 : IDWriteFontFace2\n{\n    HRESULT GetFontFaceReference(IDWriteFontFaceReference **reference);\n    void GetPanose(DWRITE_PANOSE *panose);\n    DWRITE_FONT_WEIGHT GetWeight();\n    DWRITE_FONT_STRETCH GetStretch();\n    DWRITE_FONT_STYLE GetStyle();\n    HRESULT GetFamilyNames(IDWriteLocalizedStrings **names);\n    HRESULT GetFaceNames(IDWriteLocalizedStrings **names);\n    HRESULT GetInformationalStrings(DWRITE_INFORMATIONAL_STRING_ID stringid,\n        IDWriteLocalizedStrings **strings,\n        BOOL *exists);\n    BOOL HasCharacter(UINT32 character);\n    HRESULT GetRecommendedRenderingMode(\n        FLOAT emsize,\n        FLOAT dpi_x,\n        FLOAT dpi_y,\n        DWRITE_MATRIX const *transform,\n        BOOL is_sideways,\n        DWRITE_OUTLINE_THRESHOLD threshold,\n        DWRITE_MEASURING_MODE measuring_mode,\n        IDWriteRenderingParams *params,\n        DWRITE_RENDERING_MODE1 *rendering_mode,\n        DWRITE_GRID_FIT_MODE *gridfit_mode);\n    BOOL IsCharacterLocal(UINT32 character);\n    BOOL IsGlyphLocal(UINT16 glyph);\n    HRESULT AreCharactersLocal(WCHAR const *characters,\n        UINT32 count, BOOL enqueue_if_not, BOOL *are_local);\n    HRESULT AreGlyphsLocal(UINT16 const *glyphs, UINT32 count,\n        BOOL enqueue_if_not, BOOL *are_local);\n}\n\n\ntypedef struct DWRITE_LINE_METRICS1\n{\n    UINT32 length;\n    UINT32 trailingWhitespaceLength;\n    UINT32 newlineLength;\n    FLOAT height;\n    FLOAT baseline;\n    BOOL isTrimmed;\n    FLOAT leadingBefore;\n    FLOAT leadingAfter;\n} DWRITE_LINE_METRICS1;\n\ntypedef enum DWRITE_FONT_LINE_GAP_USAGE\n{\n    DWRITE_FONT_LINE_GAP_USAGE_DEFAULT,\n    DWRITE_FONT_LINE_GAP_USAGE_DISABLED,\n    DWRITE_FONT_LINE_GAP_USAGE_ENABLED\n} DWRITE_FONT_LINE_GAP_USAGE;\n\ntypedef struct DWRITE_LINE_SPACING\n{\n    DWRITE_LINE_SPACING_METHOD method;\n    FLOAT height;\n    FLOAT baseline;\n    FLOAT leadingBefore;\n    DWRITE_FONT_LINE_GAP_USAGE fontLineGapUsage;\n} DWRITE_LINE_SPACING;\n\n[\n    local,\n    object,\n    uuid(f67e0edd-9e3d-4ecc-8c32-4183253dfe70)\n]\ninterface IDWriteTextFormat2 : IDWriteTextFormat1\n{\n    HRESULT SetLineSpacing(DWRITE_LINE_SPACING const *spacing);\n    HRESULT GetLineSpacing(DWRITE_LINE_SPACING *spacing);\n}\n\n[\n    local,\n    object,\n    uuid(6d3b5641-e550-430d-a85b-b7bf48a93427)\n]\ninterface IDWriteTextFormat3 : IDWriteTextFormat2\n{\n    HRESULT SetFontAxisValues(\n        DWRITE_FONT_AXIS_VALUE const *axis_values,\n        UINT32 num_values);\n    UINT32 GetFontAxisValueCount();\n    HRESULT GetFontAxisValues(\n        DWRITE_FONT_AXIS_VALUE const *axis_values,\n        UINT32 num_values);\n    DWRITE_AUTOMATIC_FONT_AXES GetAutomaticFontAxes();\n    HRESULT SetAutomaticFontAxes(DWRITE_AUTOMATIC_FONT_AXES axes);\n}\n\n[\n    local,\n    object,\n    uuid(07ddcd52-020e-4de8-ac33-6c953d83f92d)\n]\ninterface IDWriteTextLayout3 : IDWriteTextLayout2\n{\n    HRESULT InvalidateLayout();\n    HRESULT SetLineSpacing(DWRITE_LINE_SPACING const *spacing);\n    HRESULT GetLineSpacing(DWRITE_LINE_SPACING *spacing);\n    HRESULT GetLineMetrics(DWRITE_LINE_METRICS1 *metrics, UINT32 max_count, UINT32 *count);\n}\n\n[\n    local,\n    object,\n    uuid(05a9bf42-223f-4441-b5fb-8263685f55e9)\n]\ninterface IDWriteTextLayout4 : IDWriteTextLayout3\n{\n    HRESULT SetFontAxisValues(\n        DWRITE_FONT_AXIS_VALUE const *axis_values,\n        UINT32 num_values,\n        DWRITE_TEXT_RANGE range);\n    UINT32 GetFontAxisValueCount(UINT32 pos);\n    HRESULT GetFontAxisValues(\n        UINT32 pos,\n        DWRITE_FONT_AXIS_VALUE *values,\n        UINT32 num_values,\n        DWRITE_TEXT_RANGE *range);\n    DWRITE_AUTOMATIC_FONT_AXES GetAutomaticFontAxes();\n    HRESULT SetAutomaticFontAxes(DWRITE_AUTOMATIC_FONT_AXES axes);\n}\n\n[\n    local,\n    object,\n    uuid(2397599d-dd0d-4681-bd6a-f4f31eaade77)\n]\ninterface IDWriteFontFallback1 : IDWriteFontFallback\n{\n    HRESULT MapCharacters(\n        IDWriteTextAnalysisSource *source,\n        UINT32 pos,\n        UINT32 length,\n        IDWriteFontCollection *base_collection,\n        const WCHAR *familyname,\n        DWRITE_FONT_AXIS_VALUE const *axis_values,\n        UINT32 num_values,\n        UINT32 *mapped_length,\n        FLOAT *scale,\n        IDWriteFontFace5 **fontface);\n}\n\n[\n    local,\n    object,\n    uuid(4556be70-3abd-4f70-90be-421780a6f515)\n]\ninterface IDWriteGdiInterop1 : IDWriteGdiInterop\n{\n    HRESULT CreateFontFromLOGFONT(LOGFONTW const *logfont,\n        IDWriteFontCollection *collection,\n        IDWriteFont **font);\n\n    /* GetFontSignature() methods are listed in reversed order to make\n       resulting vtable order compatible. */\n    HRESULT GetFontSignature_(IDWriteFontFace *fontface, FONTSIGNATURE *fontsig);\n    HRESULT GetFontSignature(IDWriteFont *font, FONTSIGNATURE *fontsig);\n    HRESULT GetMatchingFontsByLOGFONT(LOGFONTW const *logfont,\n        IDWriteFontSet *fontset,\n        IDWriteFontSet **subset);\n}\n\n[\n    local,\n    object,\n    uuid(2f642afe-9c68-4f40-b8be-457401afcb3d)\n]\ninterface IDWriteFontSetBuilder : IUnknown\n{\n    HRESULT AddFontFaceReference_(IDWriteFontFaceReference *ref,\n        DWRITE_FONT_PROPERTY const *props,\n        UINT32 prop_count);\n    HRESULT AddFontFaceReference(IDWriteFontFaceReference *ref);\n    HRESULT AddFontSet(IDWriteFontSet *fontset);\n    HRESULT CreateFontSet(IDWriteFontSet **fontset);\n}\n\n[\n    local,\n    object,\n    uuid(3ff7715f-3cdc-4dc6-9b72-ec5621dccafd)\n]\ninterface IDWriteFontSetBuilder1 : IDWriteFontSetBuilder\n{\n    HRESULT AddFontFile(IDWriteFontFile *file);\n}\n\n[\n    local,\n    object,\n    uuid(ee5ba612-b131-463c-8f4f-3189b9401e45)\n]\ninterface IDWriteFontSetBuilder2 : IDWriteFontSetBuilder1\n{\n    HRESULT AddFont(\n        IDWriteFontFile *fontfile,\n        UINT32 face_index,\n        DWRITE_FONT_SIMULATIONS simulations,\n        DWRITE_FONT_AXIS_VALUE const *axis_values,\n        UINT32 num_values,\n        DWRITE_FONT_AXIS_RANGE const *axis_ranges,\n        UINT32 num_ranges,\n        DWRITE_FONT_PROPERTY const *props,\n        UINT32 num_properties);\n    HRESULT AddFontFile(const WCHAR *filepath);\n}\n\n[\n    local,\n    object,\n    uuid(9a1b41c3-d3bb-466a-87fc-fe67556a3b65)\n]\ninterface IDWriteFactory3 : IDWriteFactory2\n{\n    HRESULT CreateGlyphRunAnalysis(\n        DWRITE_GLYPH_RUN const *run,\n        DWRITE_MATRIX const *transform,\n        DWRITE_RENDERING_MODE1 rendering_mode,\n        DWRITE_MEASURING_MODE measuring_mode,\n        DWRITE_GRID_FIT_MODE gridfit_mode,\n        DWRITE_TEXT_ANTIALIAS_MODE antialias_mode,\n        FLOAT origin_x,\n        FLOAT origin_y,\n        IDWriteGlyphRunAnalysis **analysis);\n\n    HRESULT CreateCustomRenderingParams(\n        FLOAT gamma,\n        FLOAT enhanced_contrast,\n        FLOAT grayscale_enhanced_contrast,\n        FLOAT cleartype_level,\n        DWRITE_PIXEL_GEOMETRY pixel_geometry,\n        DWRITE_RENDERING_MODE1 rendering_mode,\n        DWRITE_GRID_FIT_MODE gridfit_mode,\n        IDWriteRenderingParams3 **params);\n\n    /* CreateFontFaceReference methods are listed in reversed order to make\n       resulting vtable order compatible. */\n    HRESULT CreateFontFaceReference_(\n        IDWriteFontFile *file,\n        UINT32 index,\n        DWRITE_FONT_SIMULATIONS simulations,\n        IDWriteFontFaceReference **reference);\n\n    HRESULT CreateFontFaceReference(\n        WCHAR const *path,\n        FILETIME const *writetime,\n        UINT32 index,\n        DWRITE_FONT_SIMULATIONS simulations,\n        IDWriteFontFaceReference **reference);\n\n    HRESULT GetSystemFontSet(IDWriteFontSet **fontset);\n    HRESULT CreateFontSetBuilder(IDWriteFontSetBuilder **builder);\n    HRESULT CreateFontCollectionFromFontSet(\n        IDWriteFontSet *fontset,\n        IDWriteFontCollection1 **collection);\n\n    HRESULT GetSystemFontCollection(\n        BOOL include_downloadable,\n        IDWriteFontCollection1 **collection,\n        BOOL check_for_updates);\n\n    HRESULT GetFontDownloadQueue(IDWriteFontDownloadQueue **queue);\n}\n\ntypedef enum DWRITE_GLYPH_IMAGE_FORMATS\n{\n    DWRITE_GLYPH_IMAGE_FORMATS_NONE                   = 0,\n    DWRITE_GLYPH_IMAGE_FORMATS_TRUETYPE               = 1 << 0,\n    DWRITE_GLYPH_IMAGE_FORMATS_CFF                    = 1 << 1,\n    DWRITE_GLYPH_IMAGE_FORMATS_COLR                   = 1 << 2,\n    DWRITE_GLYPH_IMAGE_FORMATS_SVG                    = 1 << 3,\n    DWRITE_GLYPH_IMAGE_FORMATS_PNG                    = 1 << 4,\n    DWRITE_GLYPH_IMAGE_FORMATS_JPEG                   = 1 << 5,\n    DWRITE_GLYPH_IMAGE_FORMATS_TIFF                   = 1 << 6,\n    DWRITE_GLYPH_IMAGE_FORMATS_PREMULTIPLIED_B8G8R8A8 = 1 << 7\n} DWRITE_GLYPH_IMAGE_FORMATS;\n\ntypedef struct DWRITE_GLYPH_IMAGE_DATA\n{\n    void const *imageData;\n    UINT32 imageDataSize;\n    UINT32 uniqueDataId;\n    UINT32 pixelsPerEm;\n    D2D1_SIZE_U pixelSize;\n    D2D1_POINT_2L horizontalLeftOrigin;\n    D2D1_POINT_2L horizontalRightOrigin;\n    D2D1_POINT_2L verticalTopOrigin;\n    D2D1_POINT_2L verticalBottomOrigin;\n} DWRITE_GLYPH_IMAGE_DATA;\n\n[\n    local,\n    object,\n    uuid(27f2a904-4eb8-441d-9678-0563f53e3e2f)\n]\ninterface IDWriteFontFace4 : IDWriteFontFace3\n{\n    HRESULT GetGlyphImageFormats_(\n        UINT16 glyph,\n        UINT32 ppem_first,\n        UINT32 ppem_last,\n        DWRITE_GLYPH_IMAGE_FORMATS *formats);\n    DWRITE_GLYPH_IMAGE_FORMATS GetGlyphImageFormats();\n    HRESULT GetGlyphImageData(\n        UINT16 glyph,\n        UINT32 ppem,\n        DWRITE_GLYPH_IMAGE_FORMATS format,\n        DWRITE_GLYPH_IMAGE_DATA *data,\n        void **context);\n    void ReleaseGlyphImageData(void *context);\n}\n\n[\n    local,\n    object,\n    uuid(98eff3a5-b667-479a-b145-e2fa5b9fdc29)\n]\ninterface IDWriteFontFace5 : IDWriteFontFace4\n{\n    UINT32 GetFontAxisValueCount();\n    HRESULT GetFontAxisValues(\n        DWRITE_FONT_AXIS_VALUE *values,\n        UINT32 value_count);\n    BOOL HasVariations();\n    HRESULT GetFontResource(IDWriteFontResource **resource);\n    BOOL Equals(IDWriteFontFace *fontface);\n}\n\ntypedef struct DWRITE_COLOR_GLYPH_RUN1\n{\n    DWRITE_GLYPH_RUN glyphRun;\n    DWRITE_GLYPH_RUN_DESCRIPTION *glyphRunDescription;\n    FLOAT baselineOriginX;\n    FLOAT baselineOriginY;\n    DWRITE_COLOR_F runColor;\n    UINT16 paletteIndex;\n    DWRITE_GLYPH_IMAGE_FORMATS glyphImageFormat;\n    DWRITE_MEASURING_MODE measuringMode;\n} DWRITE_COLOR_GLYPH_RUN1;\n\n[\n    local,\n    object,\n    uuid(7c5f86da-c7a1-4f05-b8e1-55a179fe5a35)\n]\ninterface IDWriteColorGlyphRunEnumerator1 : IDWriteColorGlyphRunEnumerator\n{\n    HRESULT GetCurrentRun(\n        DWRITE_COLOR_GLYPH_RUN1 const **run);\n}\n\n[\n    local,\n    object,\n    uuid(4b0b5bd3-0797-4549-8ac5-fe915cc53856)\n]\ninterface IDWriteFactory4 : IDWriteFactory3\n{\n    HRESULT TranslateColorGlyphRun(\n        D2D1_POINT_2F baseline_origin,\n        DWRITE_GLYPH_RUN const *run,\n        DWRITE_GLYPH_RUN_DESCRIPTION const *run_desc,\n        DWRITE_GLYPH_IMAGE_FORMATS desired_formats,\n        DWRITE_MEASURING_MODE measuring_mode,\n        DWRITE_MATRIX const *transform,\n        UINT32 palette,\n        IDWriteColorGlyphRunEnumerator1 **layers);\n\n    HRESULT ComputeGlyphOrigins_(\n        DWRITE_GLYPH_RUN const *run,\n        D2D1_POINT_2F baseline_origin,\n        D2D1_POINT_2F *origins);\n\n    HRESULT ComputeGlyphOrigins(\n        DWRITE_GLYPH_RUN const *run,\n        DWRITE_MEASURING_MODE measuring_mode,\n        D2D1_POINT_2F baseline_origin,\n        DWRITE_MATRIX const *transform,\n        D2D1_POINT_2F *origins);\n}\n\n[\n    local,\n    object,\n    uuid(ce25f8fd-863b-4d13-9651-c1f88dc73fe2)\n]\ninterface IDWriteAsyncResult : IUnknown\n{\n    HANDLE GetWaitHandle();\n    HRESULT GetResult();\n}\n\ntypedef struct DWRITE_FILE_FRAGMENT\n{\n    UINT64 fileOffset;\n    UINT64 fragmentSize;\n} DWRITE_FILE_FRAGMENT;\n\n[\n    local,\n    object,\n    uuid(4db3757a-2c72-4ed9-b2b6-1ababe1aff9c)\n]\ninterface IDWriteRemoteFontFileStream : IDWriteFontFileStream\n{\n    HRESULT GetLocalFileSize(UINT64 *size);\n    HRESULT GetFileFragmentLocality(UINT64 offset, UINT64 size, BOOL *is_local, UINT64 *partial_size);\n    DWRITE_LOCALITY GetLocality();\n    HRESULT BeginDownload(\n        GUID const *operation_id,\n        DWRITE_FILE_FRAGMENT const *fragments,\n        UINT32 fragment_count,\n        IDWriteAsyncResult **async_result);\n}\n\ntypedef enum DWRITE_CONTAINER_TYPE\n{\n    DWRITE_CONTAINER_TYPE_UNKNOWN,\n    DWRITE_CONTAINER_TYPE_WOFF,\n    DWRITE_CONTAINER_TYPE_WOFF2,\n} DWRITE_CONTAINER_TYPE;\n\n[\n    local,\n    object,\n    uuid(68648c83-6ede-46c0-ab46-20083a887fde)\n]\ninterface IDWriteRemoteFontFileLoader : IDWriteFontFileLoader\n{\n    HRESULT CreateRemoteStreamFromKey(void const *key, UINT32 key_size, IDWriteRemoteFontFileStream **stream);\n    HRESULT GetLocalityFromKey(void const *key, UINT32 key_size, DWRITE_LOCALITY *locality);\n    HRESULT CreateFontFileReferenceFromUrl(\n        IDWriteFactory *factory,\n        WCHAR const *base_url,\n        WCHAR const *file_url,\n        IDWriteFontFile **fontfile);\n}\n\n[\n    local,\n    object,\n    uuid(dc102f47-a12d-4b1c-822d-9e117e33043f)\n]\ninterface IDWriteInMemoryFontFileLoader : IDWriteFontFileLoader\n{\n    HRESULT CreateInMemoryFontFileReference(\n        IDWriteFactory *factory,\n        void const *data,\n        UINT32 data_size,\n        IUnknown *owner,\n        IDWriteFontFile **fontfile);\n    UINT32 GetFileCount();\n}\n\n[\n    local,\n    object,\n    uuid(958db99a-be2a-4f09-af7d-65189803d1d3)\n]\ninterface IDWriteFactory5 : IDWriteFactory4\n{\n    HRESULT CreateFontSetBuilder(IDWriteFontSetBuilder1 **fontset_builder);\n    HRESULT CreateInMemoryFontFileLoader(IDWriteFontFileLoader **loader);\n    HRESULT CreateHttpFontFileLoader(\n        WCHAR const *referrer_url,\n        WCHAR const *extra_headers,\n        IDWriteRemoteFontFileLoader **loader);\n    DWRITE_CONTAINER_TYPE AnalyzeContainerType(void const *data, UINT32 data_size);\n    HRESULT UnpackFontFile(\n        DWRITE_CONTAINER_TYPE container_type,\n        void const *data,\n        UINT32 data_size,\n        IDWriteFontFileStream **stream);\n}\n\n[\n    local,\n    object,\n    uuid(f3744d80-21f7-42eb-b35d-995bc72fc223)\n]\ninterface IDWriteFactory6 : IDWriteFactory5\n{\n    HRESULT CreateFontFaceReference(\n        IDWriteFontFile *file,\n        UINT32 face_index,\n        DWRITE_FONT_SIMULATIONS simulations,\n        DWRITE_FONT_AXIS_VALUE const *axis_values,\n        UINT32 num_axis,\n        IDWriteFontFaceReference1 **face_ref);\n    HRESULT CreateFontResource(\n        IDWriteFontFile *file,\n        UINT32 face_index,\n        IDWriteFontResource **resource);\n    HRESULT GetSystemFontSet(\n        BOOL include_downloadable,\n        IDWriteFontSet1 **fontset);\n    HRESULT GetSystemFontCollection(\n        BOOL include_downloadable,\n        DWRITE_FONT_FAMILY_MODEL family_model,\n        IDWriteFontCollection2 **collection);\n    HRESULT CreateFontCollectionFromFontSet(\n        IDWriteFontSet *fontset,\n        DWRITE_FONT_FAMILY_MODEL family_model,\n        IDWriteFontCollection2 **collection);\n    HRESULT CreateFontSetBuilder(\n        IDWriteFontSetBuilder2 **builder);\n    HRESULT CreateTextFormat(\n        const WCHAR *familyname,\n        IDWriteFontCollection *collection,\n        DWRITE_FONT_AXIS_VALUE const *axis_values,\n        UINT32 num_axis,\n        FLOAT fontsize,\n        const WCHAR *localename,\n        IDWriteTextFormat3 **format);\n}\n\n[\n    local,\n    object,\n    uuid(35d0e0b3-9076-4d2e-a016-a91b568a06b4)\n]\ninterface IDWriteFactory7 : IDWriteFactory6\n{\n    HRESULT GetSystemFontSet(\n        BOOL include_downloadable,\n        IDWriteFontSet2 **fontset);\n    HRESULT GetSystemFontCollection(\n        BOOL include_downloadable,\n        DWRITE_FONT_FAMILY_MODEL family_model,\n        IDWriteFontCollection3 **collection);\n}\n"
  },
  {
    "path": "wine/windows/dxdiag.h",
    "content": "/*\n * Copyright (C) 2004 Raphael Junqueira\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DXDIAG_H\n#define __WINE_DXDIAG_H\n\n#include <ole2.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n/*****************************************************************************\n * #defines and error codes\n */\n#define DXDIAG_DX9_SDK_VERSION 111\n\n#define _FACDXDIAG  0x007\n#define MAKE_DXDIAGHRESULT( code )  MAKE_HRESULT( 1, _FACDXDIAG, code )\n\n/*\n * DXDiag Errors\n */\n#define DXDIAG_E_INSUFFICIENT_BUFFER       MAKE_DXDIAGHRESULT(0x007A)\n\n\n/*****************************************************************************\n * DXDiag structures Typedefs\n */\ntypedef struct _DXDIAG_INIT_PARAMS {\n  DWORD  dwSize;\n  DWORD  dwDxDiagHeaderVersion;\n  BOOL   bAllowWHQLChecks;\n  VOID*  pReserved;\n} DXDIAG_INIT_PARAMS;\n\n\n/*****************************************************************************\n * Predeclare the interfaces\n */\n/* CLSIDs */\nDEFINE_GUID(CLSID_DxDiagProvider,   0xA65B8071, 0x3BFE, 0x4213, 0x9A, 0x5B, 0x49, 0x1D, 0xA4, 0x46, 0x1C, 0xA7);\n\n/* IIDs */\nDEFINE_GUID(IID_IDxDiagProvider,    0x9C6B4CB0, 0x23F8, 0x49CC, 0xA3, 0xED, 0x45, 0xA5, 0x50, 0x00, 0xA6, 0xD2);\nDEFINE_GUID(IID_IDxDiagContainer,   0x7D0F462F, 0x4064, 0x4862, 0xBC, 0x7F, 0x93, 0x3E, 0x50, 0x58, 0xC1, 0x0F);\n\n/* typedef definitions */\ntypedef struct IDxDiagProvider *LPDXDIAGPROVIDER,   *PDXDIAGPROVIDER;\ntypedef struct IDxDiagContainer *LPDXDIAGCONTAINER,  *PDXDIAGCONTAINER;\n\n/*****************************************************************************\n * IDxDiagContainer interface\n */\n#ifdef WINE_NO_UNICODE_MACROS\n#undef GetProp\n#endif\n\n#define INTERFACE IDxDiagContainer\nDECLARE_INTERFACE_(IDxDiagContainer,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDxDiagContainer methods ***/\n    STDMETHOD(GetNumberOfChildContainers)(THIS_  DWORD* pdwCount) PURE;\n    STDMETHOD(EnumChildContainerNames)(THIS_ DWORD dwIndex, LPWSTR pwszContainer, DWORD cchContainer) PURE;\n    STDMETHOD(GetChildContainer)(THIS_ LPCWSTR pwszContainer, IDxDiagContainer** ppInstance) PURE;\n    STDMETHOD(GetNumberOfProps)(THIS_ DWORD* pdwCount) PURE;\n    STDMETHOD(EnumPropNames)(THIS_ DWORD dwIndex, LPWSTR pwszPropName, DWORD cchPropName) PURE;\n    STDMETHOD(GetProp)(THIS_ LPCWSTR pwszPropName, VARIANT* pvarProp) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define\tIDxDiagContainer_QueryInterface(p,a,b)               (p)->lpVtbl->QueryInterface(p,a,b)\n#define\tIDxDiagContainer_AddRef(p)                           (p)->lpVtbl->AddRef(p)\n#define\tIDxDiagContainer_Release(p)                          (p)->lpVtbl->Release(p)\n/*** IDxDiagContainer methods ***/\n#define IDxDiagContainer_GetNumberOfChildContainers(p,a)     (p)->lpVtbl->GetNumberOfChildContainers(p,a)\n#define IDxDiagContainer_EnumChildContainerNames(p,a,b,c)    (p)->lpVtbl->EnumChildContainerNames(p,a,b,c)\n#define IDxDiagContainer_GetChildContainer(p,a,b)            (p)->lpVtbl->GetChildContainer(p,a,b)\n#define IDxDiagContainer_GetNumberOfProps(p,a)               (p)->lpVtbl->GetNumberOfProps(p,a)\n#define IDxDiagContainer_EnumPropNames(p,a,b,c)              (p)->lpVtbl->EnumPropNames(p,a,b,c)\n#define IDxDiagContainer_GetProp(p,a,b)                      (p)->lpVtbl->GetProp(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define\tIDxDiagContainer_QueryInterface(p,a,b)               (p)->QueryInterface(a,b)\n#define\tIDxDiagContainer_AddRef(p)                           (p)->AddRef()\n#define\tIDxDiagContainer_Release(p)                          (p)->Release()\n/*** IDxDiagContainer methods ***/\n#define IDxDiagContainer_GetNumberOfChildContainers(p,a)     (p)->GetNumberOfChildContainers(a)\n#define IDxDiagContainer_EnumChildContainerNames(p,a,b,c)    (p)->EnumChildContainerNames(a,b,c)\n#define IDxDiagContainer_GetChildContainer(p,a,b)            (p)->GetChildContainer(a,b)\n#define IDxDiagContainer_GetNumberOfProps(p,a)               (p)->GetNumberOfProps(a)\n#define IDxDiagContainer_EnumPropNames(p,a,b,c)              (p)->EnumPropNames(a,b,c)\n#define IDxDiagContainer_GetProp(p,a,b)                      (p)->GetProp(a,b)\n#endif\n\n/*****************************************************************************\n * IDxDiagProvider interface\n */\n#define INTERFACE IDxDiagProvider\nDECLARE_INTERFACE_(IDxDiagProvider,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDxDiagProvider methods ***/\n    STDMETHOD(Initialize)(THIS_ DXDIAG_INIT_PARAMS* pParams) PURE;\n    STDMETHOD(GetRootContainer)(THIS_ IDxDiagContainer** ppInstance) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define\tIDxDiagProvider_QueryInterface(p,a,b)                (p)->lpVtbl->QueryInterface(p,a,b)\n#define\tIDxDiagProvider_AddRef(p)                            (p)->lpVtbl->AddRef(p)\n#define\tIDxDiagProvider_Release(p)                           (p)->lpVtbl->Release(p)\n/*** IDxDiagProvider methods ***/\n#define IDxDiagProvider_Initialize(p,a)                      (p)->lpVtbl->Initialize(p,a)\n#define IDxDiagProvider_GetRootContainer(p,a)                (p)->lpVtbl->GetRootContainer(p,a)\n#else\n/*** IUnknown methods ***/\n#define\tIDxDiagProvider_QueryInterface(p,a,b)                (p)->QueryInterface(a,b)\n#define\tIDxDiagProvider_AddRef(p)                            (p)->AddRef()\n#define\tIDxDiagProvider_Release(p)                           (p)->Release()\n/*** IDxDiagProvider methods ***/\n#define IDxDiagProvider_Initialize(p,a)                      (p)->Initialize(a)\n#define IDxDiagProvider_GetRootContainer(p,a)                (p)->GetRootContainer(a)\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/dxerr8.h",
    "content": "/*\n * Copyright (C) 2004 Robert Reif\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DXERR8_H\n#define __WINE_DXERR8_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\nconst char*     WINAPI DXGetErrorString8A(HRESULT hr);\nconst WCHAR*    WINAPI DXGetErrorString8W(HRESULT hr);\n#define DXGetErrorString8 WINELIB_NAME_AW(DXGetErrorString8)\n\nconst char*    WINAPI DXGetErrorDescription8A(HRESULT hr);\nconst WCHAR*   WINAPI DXGetErrorDescription8W(HRESULT hr);\n#define DXGetErrorDescription8 WINELIB_NAME_AW(DXGetErrorDescription8)\n\nHRESULT WINAPI  DXTraceA(const char* strFile, DWORD dwLine, HRESULT hr, const char*  strMsg, BOOL bPopMsgBox);\nHRESULT WINAPI  DXTraceW(const char* strFile, DWORD dwLine, HRESULT hr, const WCHAR* strMsg, BOOL bPopMsgBox);\n#define DXTrace WINELIB_NAME_AW(DXTrace)\n\n#if defined(DEBUG) || defined(_DEBUG)\n#define DXTRACE_MSG(str)                DXTrace(__FILE__, (DWORD)__LINE__, 0,  str, FALSE)\n#define DXTRACE_ERR(str,hr)             DXTrace(__FILE__, (DWORD)__LINE__, hr, str, TRUE)\n#define DXTRACE_ERR_NOMSGBOX(str,hr)    DXTrace(__FILE__, (DWORD)__LINE__, hr, str, FALSE)\n#else\n#define DXTRACE_MSG(str)                __MSABI_LONG(0)\n#define DXTRACE_ERR(str,hr)             (hr)\n#define DXTRACE_ERR_NOMSGBOX(str,hr)    (hr)\n#endif\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif /* __WINE_DXERR8_H */\n"
  },
  {
    "path": "wine/windows/dxerr9.h",
    "content": "/*\n * Copyright (C) 2004 Robert Reif\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DXERR9_H\n#define __WINE_DXERR9_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\nconst char*     WINAPI DXGetErrorString9A(HRESULT hr);\nconst WCHAR*    WINAPI DXGetErrorString9W(HRESULT hr);\n#define DXGetErrorString9 WINELIB_NAME_AW(DXGetErrorString9)\n\nconst char*     WINAPI DXGetErrorDescription9A(HRESULT hr);\nconst WCHAR*    WINAPI DXGetErrorDescription9W(HRESULT hr);\n#define DXGetErrorDescription9 WINELIB_NAME_AW(DXGetErrorDescription9)\n\nHRESULT WINAPI DXTraceA(const char* strFile, DWORD dwLine, HRESULT hr, const char*  strMsg, BOOL bPopMsgBox);\nHRESULT WINAPI DXTraceW(const char* strFile, DWORD dwLine, HRESULT hr, const WCHAR* strMsg, BOOL bPopMsgBox);\n#define DXTrace WINELIB_NAME_AW(DXTrace)\n\n#if defined(DEBUG) || defined(_DEBUG)\n#define DXTRACE_MSG(str)                DXTrace(__FILE__, (DWORD)__LINE__, 0,  str, FALSE)\n#define DXTRACE_ERR(str,hr)             DXTrace(__FILE__, (DWORD)__LINE__, hr, str, TRUE)\n#define DXTRACE_ERR_NOMSGBOX(str,hr)    DXTrace(__FILE__, (DWORD)__LINE__, hr, str, FALSE)\n#else\n#define DXTRACE_MSG(str)                __MSABI_LONG(0)\n#define DXTRACE_ERR(str,hr)             (hr)\n#define DXTRACE_ERR_NOMSGBOX(str,hr)    (hr)\n#endif\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif /* __WINE_DXERR9_H */\n"
  },
  {
    "path": "wine/windows/dxfile.h",
    "content": "/*\n * Copyright 2004 Christian Costa\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DXFILE_H\n#define __WINE_DXFILE_H\n\n#include <objbase.h>\n#include <winnt.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\ntypedef DWORD DXFILEFORMAT;\n\n#define DXFILEFORMAT_BINARY     0\n#define DXFILEFORMAT_TEXT       1\n#define DXFILEFORMAT_COMPRESSED 2\n\ntypedef DWORD DXFILELOADOPTIONS;\n\n#define DXFILELOAD_FROMFILE     __MSABI_LONG(0x00)\n#define DXFILELOAD_FROMRESOURCE __MSABI_LONG(0x01)\n#define DXFILELOAD_FROMMEMORY   __MSABI_LONG(0x02)\n#define DXFILELOAD_FROMSTREAM   __MSABI_LONG(0x04)\n#define DXFILELOAD_FROMURL      __MSABI_LONG(0x08)\n\ntypedef struct _DXFILELOADRESOURCE {\n    HMODULE hModule;\n    LPCSTR /*LPCTSTR*/ lpName;\n    LPCSTR /*LPCTSTR*/ lpType;\n} DXFILELOADRESOURCE, *LPDXFILELOADRESOURCE;\n\ntypedef struct _DXFILELOADMEMORY {\n    LPVOID lpMemory;\n    DWORD dSize;\n} DXFILELOADMEMORY, *LPDXFILELOADMEMORY;\n\ntypedef struct IDirectXFile *LPDIRECTXFILE;\ntypedef struct IDirectXFileEnumObject *LPDIRECTXFILEENUMOBJECT;\ntypedef struct IDirectXFileSaveObject *LPDIRECTXFILESAVEOBJECT;\ntypedef struct IDirectXFileObject *LPDIRECTXFILEOBJECT;\ntypedef struct IDirectXFileData *LPDIRECTXFILEDATA;\ntypedef struct IDirectXFileDataReference *LPDIRECTXFILEDATAREFERENCE;\ntypedef struct IDirectXFileBinary *LPDIRECTXFILEBINARY;\n\nSTDAPI DirectXFileCreate(LPDIRECTXFILE *lplpDirectXFile);\n\n#define INTERFACE IDirectXFile\nDECLARE_INTERFACE_(IDirectXFile,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectXFile methods ***/\n    STDMETHOD(CreateEnumObject) (THIS_ LPVOID, DXFILELOADOPTIONS, LPDIRECTXFILEENUMOBJECT *) PURE;\n    STDMETHOD(CreateSaveObject) (THIS_ LPCSTR, DXFILEFORMAT, LPDIRECTXFILESAVEOBJECT *) PURE;\n    STDMETHOD(RegisterTemplates) (THIS_ LPVOID, DWORD) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n    /*** IUnknown methods ***/\n#define IDirectXFile_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectXFile_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectXFile_Release(p)            (p)->lpVtbl->Release(p)\n    /*** IDirectXFile methods ***/\n#define IDirectXFile_CreateEnumObject(p,a,b,c) (p)->lpVtbl->CreateEnumObject(p,a,b,c)\n#define IDirectXFile_CreateSaveObject(p,a,b,c) (p)->lpVtbl->CreateSaveObject(p,a,b,c)\n#define IDirectXFile_RegisterTemplates(p,a,b)  (p)->lpVtbl->RegisterTemplates(p,a,b)\n#endif\n\n#define INTERFACE IDirectXFileEnumObject\nDECLARE_INTERFACE_(IDirectXFileEnumObject,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectXFileEnumObject methods ***/\n    STDMETHOD(GetNextDataObject)    (THIS_ LPDIRECTXFILEDATA *) PURE;\n    STDMETHOD(GetDataObjectById)    (THIS_ REFGUID, LPDIRECTXFILEDATA *) PURE;\n    STDMETHOD(GetDataObjectByName)  (THIS_ LPCSTR, LPDIRECTXFILEDATA *) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n    /*** IUnknown methods ***/\n#define IDirectXFileEnumObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectXFileEnumObject_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectXFileEnumObject_Release(p)            (p)->lpVtbl->Release(p)\n    /*** IDirectXFileEnumObject methods ***/\n#define IDirectXFileEnumObject_GetNextDataObject(p,a)     (p)->lpVtbl->GetNextDataObject(p,a)\n#define IDirectXFileEnumObject_GetDataObjectById(p,a,b)   (p)->lpVtbl->GetDataObjectById(p,a,b)\n#define IDirectXFileEnumObject_GetDataObjectByName(p,a,b) (p)->lpVtbl->GetDataObjectByName(p,a,b)\n#endif\n\n#define INTERFACE IDirectXFileSaveObject\nDECLARE_INTERFACE_(IDirectXFileSaveObject,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirectXFileSaveObject methods ***/\n    STDMETHOD(SaveTemplates) (THIS_ DWORD, const GUID **) PURE;\n    STDMETHOD(CreateDataObject) (THIS_ REFGUID, LPCSTR, const GUID *, DWORD, LPVOID, LPDIRECTXFILEDATA *) PURE;\n    STDMETHOD(SaveData) (THIS_ LPDIRECTXFILEDATA) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n    /*** IUnknown methods ***/\n#define IDirectXFileSaveObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectXFileSaveObject_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectXFileSaveObject_Release(p)            (p)->lpVtbl->Release(p)\n    /*** IDirectXFileSaveObject methods ***/\n#define IDirectXFileSaveObject_SaveTemplates(p,a,b)            (p)->lpVtbl->SaveTemplates(p,a,b)\n#define IDirectXFileSaveObject_CreateDataObject(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDataObject(p,a,b,c,d,e,f)\n#define IDirectXFileSaveObject_SaveData(p,a)                   (p)->lpVtbl->SaveData(p,a)\n#endif\n\n#define IUNKNOWN_METHODS(kind) \\\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) kind; \\\n    STDMETHOD_(ULONG,AddRef)(THIS) kind; \\\n    STDMETHOD_(ULONG,Release)(THIS) kind\n\n#define IDIRECTXFILEOBJECT_METHODS(kind) \\\n    STDMETHOD(GetName) (THIS_ LPSTR, LPDWORD) kind; \\\n    STDMETHOD(GetId) (THIS_ LPGUID) kind\n\n#define INTERFACE IDirectXFileObject\nDECLARE_INTERFACE_(IDirectXFileObject,IUnknown)\n{\n    IUNKNOWN_METHODS(PURE);\n    IDIRECTXFILEOBJECT_METHODS(PURE);\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n    /*** IUnknown methods ***/\n#define IDirectXFileObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectXFileObject_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectXFileObject_Release(p)            (p)->lpVtbl->Release(p)\n    /*** IDirectXFileObject methods ***/\n#define IDirectXFileObject_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)\n#define IDirectXFileObject_GetId(p,a)     (p)->lpVtbl->GetId(p,a)\n#endif\n\n#define INTERFACE IDirectXFileData\nDECLARE_INTERFACE_(IDirectXFileData,IDirectXFileObject)\n{\n    IUNKNOWN_METHODS(PURE);\n    IDIRECTXFILEOBJECT_METHODS(PURE);\n    /*** IDirectXFileData methods ***/\n    STDMETHOD(GetData) (THIS_ LPCSTR, DWORD *, void **) PURE;\n    STDMETHOD(GetType) (THIS_ const GUID **) PURE;\n    STDMETHOD(GetNextObject) (THIS_ LPDIRECTXFILEOBJECT *) PURE;\n    STDMETHOD(AddDataObject) (THIS_ LPDIRECTXFILEDATA) PURE;\n    STDMETHOD(AddDataReference) (THIS_ LPCSTR, const GUID *) PURE;\n    STDMETHOD(AddBinaryObject) (THIS_ LPCSTR, const GUID *, LPCSTR, LPVOID, DWORD) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n    /*** IUnknown methods ***/\n#define IDirectXFileData_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectXFileData_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectXFileData_Release(p)            (p)->lpVtbl->Release(p)\n    /*** IDirectXFileObject methods ***/\n#define IDirectXFileData_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)\n#define IDirectXFileData_GetId(p,a)     (p)->lpVtbl->GetId(p,a)\n    /*** IDirectXFileData methods ***/\n#define IDirectXFileData_GetData(p,a,b,c)             (p)->lpVtbl->GetData(p,a,b,c)\n#define IDirectXFileData_GetType(p,a)                 (p)->lpVtbl->GetType(p,a)\n#define IDirectXFileData_GetNextObject(p,a)           (p)->lpVtbl->GetNextObject(p,a)\n#define IDirectXFileData_AddDataObject(p,a)           (p)->lpVtbl->AddDataObject(p,a)\n#define IDirectXFileData_AddDataReference(p,a,b)      (p)->lpVtbl->AddDataReference(p,a,b)\n#define IDirectXFileData_AddBinaryObject(p,a,b,c,d,e) (p)->lpVtbl->AddBinaryObject(p,a,b,c,d,e)\n#endif\n\n#define INTERFACE IDirectXFileDataReference\nDECLARE_INTERFACE_(IDirectXFileDataReference,IDirectXFileObject)\n{\n    IUNKNOWN_METHODS(PURE);\n    IDIRECTXFILEOBJECT_METHODS(PURE);\n    /*** IDirectXFileDataReference methods ***/\n    STDMETHOD(Resolve) (THIS_ LPDIRECTXFILEDATA *) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n    /*** IUnknown methods ***/\n#define IDirectXFileDataReference_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectXFileDataReference_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectXFileDataReference_Release(p)            (p)->lpVtbl->Release(p)\n    /*** IDirectXFileObject methods ***/\n#define IDirectXFileDataReference_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)\n#define IDirectXFileDataReference_GetId(p,a)     (p)->lpVtbl->GetId(p,a)\n    /*** IDirectXFileDataReference methods ***/\n#define IDirectXFileDataReference_Resolve(p,a) (p)->lpVtbl->Resolve(p,a)\n#endif\n\n#define INTERFACE IDirectXFileBinary\nDECLARE_INTERFACE_(IDirectXFileBinary,IDirectXFileObject)\n{\n    IUNKNOWN_METHODS(PURE);\n    IDIRECTXFILEOBJECT_METHODS(PURE);\n    /*** IDirectXFileBinary methods ***/\n    STDMETHOD(GetSize)      (THIS_ DWORD *) PURE;\n    STDMETHOD(GetMimeType)  (THIS_ LPCSTR *) PURE;\n    STDMETHOD(Read)         (THIS_ LPVOID, DWORD, LPDWORD) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n    /*** IUnknown methods ***/\n#define IDirectXFileBinary_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectXFileBinary_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirectXFileBinary_Release(p)            (p)->lpVtbl->Release(p)\n    /*** IDirectXFileObject methods ***/\n#define IDirectXFileBinary_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)\n#define IDirectXFileBinary_GetId(p,a)     (p)->lpVtbl->GetId(p,a)\n    /*** IDirectXFileBinary methods ***/\n#define IDirectXFileBinary_GetSize(p,a)     (p)->lpVtbl->GetSize(p,a)\n#define IDirectXFileBinary_GetMimeType(p,a) (p)->lpVtbl->GetMimeType(p,a)\n#define IDirectXFileBinary_Read(p,a,b,c)    (p)->lpVtbl->Read(p,a,b,c)\n#endif\n\n/* DirectXFile Object CLSID */\nDEFINE_GUID(CLSID_CDirectXFile,             0x4516ec43, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);\n\n/* DirectX File Interface GUIDs */\nDEFINE_GUID(IID_IDirectXFile,               0x3d82ab40, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);\nDEFINE_GUID(IID_IDirectXFileEnumObject,     0x3d82ab41, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);\nDEFINE_GUID(IID_IDirectXFileSaveObject,     0x3d82ab42, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);\nDEFINE_GUID(IID_IDirectXFileObject,         0x3d82ab43, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);\nDEFINE_GUID(IID_IDirectXFileData,           0x3d82ab44, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);\nDEFINE_GUID(IID_IDirectXFileDataReference,  0x3d82ab45, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);\nDEFINE_GUID(IID_IDirectXFileBinary,         0x3d82ab46, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);\n\n/* DirectX File Header template's GUID */\nDEFINE_GUID(TID_DXFILEHeader,               0x3d82ab43, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);\n\n/* DirectX File errors */\n#define _FACDD  0x876\n#define MAKE_DDHRESULT( code )  MAKE_HRESULT( 1, _FACDD, code )\n\n#define DXFILE_OK   0\n\n#define DXFILEERR_BADOBJECT                 MAKE_DDHRESULT(850)\n#define DXFILEERR_BADVALUE                  MAKE_DDHRESULT(851)\n#define DXFILEERR_BADTYPE                   MAKE_DDHRESULT(852)\n#define DXFILEERR_BADSTREAMHANDLE           MAKE_DDHRESULT(853)\n#define DXFILEERR_BADALLOC                  MAKE_DDHRESULT(854)\n#define DXFILEERR_NOTFOUND                  MAKE_DDHRESULT(855)\n#define DXFILEERR_NOTDONEYET                MAKE_DDHRESULT(856)\n#define DXFILEERR_FILENOTFOUND              MAKE_DDHRESULT(857)\n#define DXFILEERR_RESOURCENOTFOUND          MAKE_DDHRESULT(858)\n#define DXFILEERR_URLNOTFOUND               MAKE_DDHRESULT(859)\n#define DXFILEERR_BADRESOURCE               MAKE_DDHRESULT(860)\n#define DXFILEERR_BADFILETYPE               MAKE_DDHRESULT(861)\n#define DXFILEERR_BADFILEVERSION            MAKE_DDHRESULT(862)\n#define DXFILEERR_BADFILEFLOATSIZE          MAKE_DDHRESULT(863)\n#define DXFILEERR_BADFILECOMPRESSIONTYPE    MAKE_DDHRESULT(864)\n#define DXFILEERR_BADFILE                   MAKE_DDHRESULT(865)\n#define DXFILEERR_PARSEERROR                MAKE_DDHRESULT(866)\n#define DXFILEERR_NOTEMPLATE                MAKE_DDHRESULT(867)\n#define DXFILEERR_BADARRAYSIZE              MAKE_DDHRESULT(868)\n#define DXFILEERR_BADDATAREFERENCE          MAKE_DDHRESULT(869)\n#define DXFILEERR_INTERNALERROR             MAKE_DDHRESULT(870)\n#define DXFILEERR_NOMOREOBJECTS             MAKE_DDHRESULT(871)\n#define DXFILEERR_BADINTRINSICS             MAKE_DDHRESULT(872)\n#define DXFILEERR_NOMORESTREAMHANDLES       MAKE_DDHRESULT(873)\n#define DXFILEERR_NOMOREDATA                MAKE_DDHRESULT(874)\n#define DXFILEERR_BADCACHEFILE              MAKE_DDHRESULT(875)\n#define DXFILEERR_NOINTERNET                MAKE_DDHRESULT(876)\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif /* __WINE_DXFILE_H */\n"
  },
  {
    "path": "wine/windows/dxgi.idl",
    "content": "/*\n * Copyright 2007 Andras Kovacs\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"dxgitype.idl\";\n\nconst UINT _FACDXGI = 0x87a;\n\ncpp_quote(\"#define MAKE_DXGI_STATUS(x)                         MAKE_HRESULT(0, _FACDXGI, x)\")\ncpp_quote(\"#define MAKE_DXGI_HRESULT(x)                        MAKE_HRESULT(1, _FACDXGI, x)\")\n\ncpp_quote(\"#if 0\")\ntypedef HANDLE HMONITOR;\ntypedef struct _LUID {\n    DWORD LowPart;\n    LONG HighPart;\n} LUID, *PLUID;\ncpp_quote(\"#endif\")\n\ntypedef UINT DXGI_USAGE;\nconst DXGI_USAGE DXGI_USAGE_SHADER_INPUT            = 0x10L;\nconst DXGI_USAGE DXGI_USAGE_RENDER_TARGET_OUTPUT    = 0x20L;\nconst DXGI_USAGE DXGI_USAGE_BACK_BUFFER             = 0x40L;\nconst DXGI_USAGE DXGI_USAGE_SHARED                  = 0x80L;\nconst DXGI_USAGE DXGI_USAGE_READ_ONLY               = 0x100L;\nconst DXGI_USAGE DXGI_USAGE_DISCARD_ON_PRESENT      = 0x200L;\nconst DXGI_USAGE DXGI_USAGE_UNORDERED_ACCESS        = 0x400L;\n\nconst UINT DXGI_ENUM_MODES_INTERLACED               = 1;\nconst UINT DXGI_ENUM_MODES_SCALING                  = 2;\n\nconst UINT DXGI_RESOURCE_PRIORITY_MINIMUM           = 0x28000000;\nconst UINT DXGI_RESOURCE_PRIORITY_LOW               = 0x50000000;\nconst UINT DXGI_RESOURCE_PRIORITY_NORMAL            = 0x78000000;\nconst UINT DXGI_RESOURCE_PRIORITY_HIGH              = 0xa0000000;\nconst UINT DXGI_RESOURCE_PRIORITY_MAXIMUM           = 0xc8000000;\n\nconst UINT DXGI_MAP_READ                            = 0x1;\nconst UINT DXGI_MAP_WRITE                           = 0x2;\nconst UINT DXGI_MAP_DISCARD                         = 0x4;\n\ntypedef enum DXGI_SWAP_EFFECT {\n    DXGI_SWAP_EFFECT_DISCARD    = 0,\n    DXGI_SWAP_EFFECT_SEQUENTIAL = 1,\n    DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL = 3,\n    DXGI_SWAP_EFFECT_FLIP_DISCARD = 4\n} DXGI_SWAP_EFFECT;\n\ntypedef enum DXGI_RESIDENCY {\n    DXGI_RESIDENCY_FULLY_RESIDENT               = 1,\n    DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY    = 2,\n    DXGI_RESIDENCY_EVICTED_TO_DISK              = 3,\n} DXGI_RESIDENCY;\n\ntypedef struct DXGI_SURFACE_DESC {\n    UINT Width;\n    UINT Height;\n    DXGI_FORMAT Format;\n    DXGI_SAMPLE_DESC SampleDesc;\n} DXGI_SURFACE_DESC;\n\ntypedef struct DXGI_MAPPED_RECT {\n    INT Pitch;\n    BYTE *pBits;\n} DXGI_MAPPED_RECT;\n\ntypedef struct DXGI_OUTPUT_DESC {\n    WCHAR DeviceName[32];\n    RECT DesktopCoordinates;\n    BOOL AttachedToDesktop;\n    DXGI_MODE_ROTATION Rotation;\n    HMONITOR Monitor;\n} DXGI_OUTPUT_DESC;\n\ntypedef struct DXGI_FRAME_STATISTICS {\n    UINT PresentCount;\n    UINT PresentRefreshCount;\n    UINT SyncRefreshCount;\n    LARGE_INTEGER SyncQPCTime;\n    LARGE_INTEGER SyncGPUTime;\n} DXGI_FRAME_STATISTICS;\n\ntypedef struct DXGI_ADAPTER_DESC {\n    WCHAR Description[128];\n    UINT VendorId;\n    UINT DeviceId;\n    UINT SubSysId;\n    UINT Revision;\n    SIZE_T DedicatedVideoMemory;\n    SIZE_T DedicatedSystemMemory;\n    SIZE_T SharedSystemMemory;\n    LUID AdapterLuid;\n} DXGI_ADAPTER_DESC;\n\ntypedef enum DXGI_SWAP_CHAIN_FLAG\n{\n    DXGI_SWAP_CHAIN_FLAG_NONPREROTATED                          = 0x0001,\n    DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH                      = 0x0002,\n    DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE                         = 0x0004,\n    DXGI_SWAP_CHAIN_FLAG_RESTRICTED_CONTEXT                     = 0x0008,\n    DXGI_SWAP_CHAIN_FLAG_RESTRICT_SHARED_RESOURCE_DRIVER        = 0x0010,\n    DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY                           = 0x0020,\n    DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT          = 0x0040,\n    DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER                       = 0x0080,\n    DXGI_SWAP_CHAIN_FLAG_FULLSCREEN_VIDEO                       = 0x0100,\n    DXGI_SWAP_CHAIN_FLAG_YUV_VIDEO                              = 0x0200,\n    DXGI_SWAP_CHAIN_FLAG_HW_PROTECTED                           = 0x0400,\n    DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING                          = 0x0800,\n    DXGI_SWAP_CHAIN_FLAG_RESTRICTED_TO_ALL_HOLOGRAPHIC_DISPLAYS = 0x1000,\n} DXGI_SWAP_CHAIN_FLAG;\n\ntypedef struct DXGI_SWAP_CHAIN_DESC {\n    DXGI_MODE_DESC BufferDesc;\n    DXGI_SAMPLE_DESC SampleDesc;\n    DXGI_USAGE BufferUsage;\n    UINT BufferCount;\n    HWND OutputWindow;\n    BOOL Windowed;\n    DXGI_SWAP_EFFECT SwapEffect;\n    UINT Flags;\n} DXGI_SWAP_CHAIN_DESC;\n\ntypedef struct DXGI_SHARED_RESOURCE {\n    HANDLE Handle;\n} DXGI_SHARED_RESOURCE;\n\n[\n    object,\n    local,\n    uuid(aec22fb8-76f3-4639-9be0-28eb43a67a2e)\n]\ninterface IDXGIObject : IUnknown\n{\n    HRESULT SetPrivateData(\n        [in] REFGUID guid,\n        [in] UINT data_size,\n        [in] const void *data\n    );\n    HRESULT SetPrivateDataInterface(\n        [in] REFGUID guid,\n        [in] const IUnknown *object\n    );\n    HRESULT GetPrivateData(\n        [in] REFGUID guid,\n        [in, out] UINT *data_size,\n        [out] void *data\n    );\n    HRESULT GetParent(\n        [in] REFIID riid,\n        [out] void **parent\n    );\n}\n\n[\n    object,\n    local,\n    uuid(3d3e0379-f9de-4d58-bb6c-18d62992f1a6)\n]\ninterface IDXGIDeviceSubObject : IDXGIObject\n{\n    HRESULT GetDevice(\n        [in] REFIID riid,\n        [out] void **device\n    );\n}\n\n[\n    object,\n    uuid(035f3ab4-482e-4e50-b41f-8a7f8bd8960b),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIResource : IDXGIDeviceSubObject\n{\n    HRESULT GetSharedHandle([out] HANDLE *pSharedHandle);\n    HRESULT GetUsage([out] DXGI_USAGE *pUsage);\n    HRESULT SetEvictionPriority([in] UINT EvictionPriority);\n    HRESULT GetEvictionPriority([out, retval] UINT *pEvictionPriority);\n}\n\n[\n    object,\n    uuid(9d8e1289-d7b3-465f-8126-250e349af85d),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIKeyedMutex : IDXGIDeviceSubObject\n{\n    HRESULT AcquireSync([in] UINT64 Key, [in] DWORD dwMilliseconds);\n    HRESULT ReleaseSync([in] UINT64 Key);\n}\n\n[\n    object,\n    local,\n    uuid(cafcb56c-6ac3-4889-bf47-9e23bbd260ec)\n]\ninterface IDXGISurface : IDXGIDeviceSubObject\n{\n    HRESULT GetDesc(\n        [out] DXGI_SURFACE_DESC *desc\n    );\n    HRESULT Map(\n        [out] DXGI_MAPPED_RECT *mapped_rect,\n        [in] UINT flags\n    );\n    HRESULT Unmap(\n    );\n}\n\n[\n    object,\n    local,\n    uuid(4ae63092-6327-4c1b-80ae-bfe12ea32b86)\n]\ninterface IDXGISurface1 : IDXGISurface\n{\n    HRESULT GetDC(\n        [in] BOOL discard,\n        [out] HDC *hdc\n    );\n    HRESULT ReleaseDC(\n        [in] RECT *dirty_rect\n    );\n}\n\n[\n    object,\n    local,\n    uuid(ae02eedb-c735-4690-8d52-5a8dc20213aa)\n]\ninterface IDXGIOutput : IDXGIObject\n{\n    HRESULT GetDesc(\n        [out] DXGI_OUTPUT_DESC *desc\n    );\n    HRESULT GetDisplayModeList(\n        [in] DXGI_FORMAT format,\n        [in] UINT flags,\n        [in, out] UINT *mode_count,\n        [out] DXGI_MODE_DESC *desc\n    );\n    HRESULT FindClosestMatchingMode(\n        [in] const DXGI_MODE_DESC *mode,\n        [out] DXGI_MODE_DESC *closest_match,\n        [in] IUnknown *device\n    );\n    HRESULT WaitForVBlank(\n    );\n    HRESULT TakeOwnership(\n        [in] IUnknown *device,\n        [in] BOOL exclusive\n    );\n    void ReleaseOwnership(\n    );\n    HRESULT GetGammaControlCapabilities(\n        [out] DXGI_GAMMA_CONTROL_CAPABILITIES *gamma_caps\n    );\n    HRESULT SetGammaControl(\n        [in] const DXGI_GAMMA_CONTROL *gamma_control\n    );\n    HRESULT GetGammaControl(\n        [out] DXGI_GAMMA_CONTROL *gamma_control\n    );\n    HRESULT SetDisplaySurface(\n        [in] IDXGISurface *surface\n    );\n    HRESULT GetDisplaySurfaceData(\n        [in] IDXGISurface *surface\n    );\n    HRESULT GetFrameStatistics(\n        [out] DXGI_FRAME_STATISTICS *stats\n    );\n}\n\n[\n    object,\n    local,\n    uuid(2411e7e1-12ac-4ccf-bd14-9798e8534dc0)\n]\ninterface IDXGIAdapter : IDXGIObject\n{\n    HRESULT EnumOutputs(\n        [in] UINT output_idx,\n        [in, out] IDXGIOutput **output\n    );\n    HRESULT GetDesc(\n        [out] DXGI_ADAPTER_DESC *desc\n    );\n    HRESULT CheckInterfaceSupport(\n        [in] REFGUID guid,\n        [out] LARGE_INTEGER *umd_version\n    );\n}\n\ncpp_quote(\"#define DXGI_MAX_SWAP_CHAIN_BUFFERS  (16)\")\n\ncpp_quote(\"#define DXGI_PRESENT_TEST                   __MSABI_LONG(0x00000001U)\")\ncpp_quote(\"#define DXGI_PRESENT_DO_NOT_SEQUENCE        __MSABI_LONG(0x00000002U)\")\ncpp_quote(\"#define DXGI_PRESENT_RESTART                __MSABI_LONG(0x00000004U)\")\ncpp_quote(\"#define DXGI_PRESENT_DO_NOT_WAIT            __MSABI_LONG(0x00000008U)\")\ncpp_quote(\"#define DXGI_PRESENT_STEREO_PREFER_RIGHT    __MSABI_LONG(0x00000010U)\")\ncpp_quote(\"#define DXGI_PRESENT_STEREO_TEMPORARY_MONO  __MSABI_LONG(0x00000020U)\")\ncpp_quote(\"#define DXGI_PRESENT_RESTRICT_TO_OUTPUT     __MSABI_LONG(0x00000040U)\")\ncpp_quote(\"#define DXGI_PRESENT_USE_DURATION           __MSABI_LONG(0x00000100U)\")\ncpp_quote(\"#define DXGI_PRESENT_ALLOW_TEARING          __MSABI_LONG(0x00000200U)\")\n\n[\n    object,\n    local,\n    uuid(310d36a0-d2e7-4c0a-aa04-6a9d23b8886a)\n]\ninterface IDXGISwapChain : IDXGIDeviceSubObject\n{\n    HRESULT Present(\n        [in] UINT sync_interval,\n        [in] UINT flags\n    );\n    HRESULT GetBuffer(\n        [in] UINT buffer_idx,\n        [in] REFIID riid,\n        [in, out] void **surface\n    );\n    HRESULT SetFullscreenState(\n        [in] BOOL fullscreen,\n        [in] IDXGIOutput *target\n    );\n    HRESULT GetFullscreenState(\n        [out] BOOL *fullscreen,\n        [out] IDXGIOutput **target\n    );\n    HRESULT GetDesc(\n        [out] DXGI_SWAP_CHAIN_DESC *desc\n    );\n    HRESULT ResizeBuffers(\n        [in] UINT buffer_count,\n        [in] UINT width,\n        [in] UINT height,\n        [in] DXGI_FORMAT format,\n        [in] UINT flags\n    );\n    HRESULT ResizeTarget(\n        [in] const DXGI_MODE_DESC *target_mode_desc\n    );\n    HRESULT GetContainingOutput(\n        [out] IDXGIOutput **output\n    );\n    HRESULT GetFrameStatistics(\n        [out] DXGI_FRAME_STATISTICS *stats\n    );\n    HRESULT GetLastPresentCount(\n        [out] UINT *last_present_count\n    );\n}\n\ncpp_quote(\"#define DXGI_MWA_NO_WINDOW_CHANGES  0x1\")\ncpp_quote(\"#define DXGI_MWA_NO_ALT_ENTER       0x2\")\ncpp_quote(\"#define DXGI_MWA_NO_PRINT_SCREEN    0x4\")\ncpp_quote(\"#define DXGI_MWA_VALID              0x7\")\n\n[\n    object,\n    local,\n    uuid(7b7166ec-21c7-44ae-b21a-c9ae321ae369)\n]\ninterface IDXGIFactory : IDXGIObject\n{\n    HRESULT EnumAdapters(\n        [in] UINT adapter_idx,\n        [out] IDXGIAdapter **adapter\n    );\n    HRESULT MakeWindowAssociation(\n        [in] HWND window,\n        [in] UINT flags\n    );\n    HRESULT GetWindowAssociation(\n        [in] HWND *window\n    );\n    HRESULT CreateSwapChain(\n        [in] IUnknown *device,\n        [in] DXGI_SWAP_CHAIN_DESC *desc,\n        [out] IDXGISwapChain **swapchain\n    );\n    HRESULT CreateSoftwareAdapter(\n        [in] HMODULE swrast,\n        [out] IDXGIAdapter **adapter\n    );\n}\n\n[local] HRESULT __stdcall CreateDXGIFactory(REFIID riid, void **factory);\n[local] HRESULT __stdcall CreateDXGIFactory1(REFIID riid, void **factory);\n\n[\n    object,\n    local,\n    uuid(54ec77fa-1377-44e6-8c32-88fd5f44c84c)\n]\ninterface IDXGIDevice : IDXGIObject\n{\n    HRESULT GetAdapter(\n        [out] IDXGIAdapter **adapter\n    );\n    HRESULT CreateSurface(\n        [in] const DXGI_SURFACE_DESC *desc,\n        [in] UINT surface_count,\n        [in] DXGI_USAGE usage,\n        [in] const DXGI_SHARED_RESOURCE *shared_resource,\n        [out] IDXGISurface **surface\n    );\n    HRESULT QueryResourceResidency(\n        [in] IUnknown *const *resources,\n        [out] DXGI_RESIDENCY *residency,\n        [in] UINT resource_count\n    );\n    HRESULT SetGPUThreadPriority(\n        [in] INT priority\n    );\n    HRESULT GetGPUThreadPriority(\n        [out] INT *priority\n    );\n}\n\ntypedef enum DXGI_ADAPTER_FLAG {\n    DXGI_ADAPTER_FLAG_NONE         = 0,\n    DXGI_ADAPTER_FLAG_REMOTE       = 1,\n    DXGI_ADAPTER_FLAG_FORCE_DWORD  = 0xFFFFFFFF\n} DXGI_ADAPTER_FLAG;\n\ntypedef struct DXGI_ADAPTER_DESC1 {\n    WCHAR  Description[128];\n    UINT   VendorId;\n    UINT   DeviceId;\n    UINT   SubSysId;\n    UINT   Revision;\n    SIZE_T DedicatedVideoMemory;\n    SIZE_T DedicatedSystemMemory;\n    SIZE_T SharedSystemMemory;\n    LUID   AdapterLuid;\n    UINT   Flags;\n} DXGI_ADAPTER_DESC1;\n\n[\n    object,\n    uuid(29038f61-3839-4626-91fd-086879011a05),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIAdapter1 : IDXGIAdapter\n{\n    HRESULT GetDesc1([out] DXGI_ADAPTER_DESC1 *pDesc);\n}\n\n[\n    object,\n    uuid(77db970f-6276-48ba-ba28-070143b4392c),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIDevice1 : IDXGIDevice\n{\n    HRESULT SetMaximumFrameLatency([in] UINT MaxLatency);\n    HRESULT GetMaximumFrameLatency([out] UINT *pMaxLatency);\n}\n\n[\n    object,\n    uuid(770aae78-f26f-4dba-a829-253c83d1b387),\n    local,\n    pointer_default(unique)\n ]\ninterface IDXGIFactory1 : IDXGIFactory\n{\n    HRESULT EnumAdapters1([in] UINT Adapter, [out] IDXGIAdapter1 **ppAdapter);\n    BOOL IsCurrent();\n}\n"
  },
  {
    "path": "wine/windows/dxgi1_2.idl",
    "content": "/*\n * Copyright 2014 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"dxgi.idl\";\n\nconst UINT DXGI_ENUM_MODES_STEREO = 0x4;\nconst UINT DXGI_ENUM_MODES_DISABLED_STEREO = 0x8;\n\nconst DWORD DXGI_SHARED_RESOURCE_READ = 0x80000000;\nconst DWORD DXGI_SHARED_RESOURCE_WRITE = 0x00000001;\n\ntypedef enum _DXGI_OFFER_RESOURCE_PRIORITY {\n    DXGI_OFFER_RESOURCE_PRIORITY_LOW = 1,\n    DXGI_OFFER_RESOURCE_PRIORITY_NORMAL,\n    DXGI_OFFER_RESOURCE_PRIORITY_HIGH\n} DXGI_OFFER_RESOURCE_PRIORITY;\n\ntypedef enum DXGI_ALPHA_MODE {\n    DXGI_ALPHA_MODE_UNSPECIFIED = 0,\n    DXGI_ALPHA_MODE_PREMULTIPLIED = 1,\n    DXGI_ALPHA_MODE_STRAIGHT = 2,\n    DXGI_ALPHA_MODE_IGNORE = 3,\n    DXGI_ALPHA_MODE_FORCE_DWORD = 0xffffffff\n} DXGI_ALPHA_MODE;\n\ntypedef struct DXGI_OUTDUPL_MOVE_RECT\n{\n    POINT SourcePoint;\n    RECT DestinationRect;\n} DXGI_OUTDUPL_MOVE_RECT;\n\ntypedef struct DXGI_OUTDUPL_DESC\n{\n    DXGI_MODE_DESC ModeDesc;\n    DXGI_MODE_ROTATION Rotation;\n    BOOL DesktopImageInSystemMemory;\n} DXGI_OUTDUPL_DESC;\n\ntypedef struct DXGI_OUTDUPL_POINTER_POSITION\n{\n    POINT Position;\n    BOOL Visible;\n} DXGI_OUTDUPL_POINTER_POSITION;\n\ntypedef enum DXGI_OUTDUPL_POINTER_SHAPE_TYPE\n{\n    DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MONOCHROME = 0x00000001,\n    DXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR = 0x00000002,\n    DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR = 0x00000004\n} DXGI_OUTDUPL_POINTER_SHAPE_TYPE;\n\ntypedef struct DXGI_OUTDUPL_POINTER_SHAPE_INFO\n{\n    UINT Type;\n    UINT Width;\n    UINT Height;\n    UINT Pitch;\n    POINT HotSpot;\n} DXGI_OUTDUPL_POINTER_SHAPE_INFO;\n\ntypedef struct DXGI_OUTDUPL_FRAME_INFO\n{\n    LARGE_INTEGER LastPresentTime;\n    LARGE_INTEGER LastMouseUpdateTime;\n    UINT AccumulatedFrames;\n    BOOL RectsCoalesced;\n    BOOL ProtectedContentMaskedOut;\n    DXGI_OUTDUPL_POINTER_POSITION PointerPosition;\n    UINT TotalMetadataBufferSize;\n    UINT PointerShapeBufferSize;\n} DXGI_OUTDUPL_FRAME_INFO;\n\ntypedef struct DXGI_MODE_DESC1\n{\n    UINT Width;\n    UINT Height;\n    DXGI_RATIONAL RefreshRate;\n    DXGI_FORMAT Format;\n    DXGI_MODE_SCANLINE_ORDER ScanlineOrdering;\n    DXGI_MODE_SCALING Scaling;\n    BOOL Stereo;\n} DXGI_MODE_DESC1;\n\n[\n    object,\n    uuid(191cfac3-a341-470d-b26e-a864f428319c),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIOutputDuplication : IDXGIObject\n{\n    void GetDesc(\n        [out] DXGI_OUTDUPL_DESC *desc\n    );\n\n    HRESULT AcquireNextFrame(\n        [in] UINT timeout_in_milliseconds,\n        [out] DXGI_OUTDUPL_FRAME_INFO *frame_info,\n        [out] IDXGIResource **desktop_resource\n    );\n\n    HRESULT GetFrameDirtyRects(\n        [in] UINT dirty_rects_buffer_size,\n        [out] RECT *dirty_rects_buffer,\n        [out] UINT *dirty_rects_buffer_size_required\n    );\n\n    HRESULT GetFrameMoveRects(\n        [in] UINT move_rects_buffer_size,\n        [out] DXGI_OUTDUPL_MOVE_RECT *move_rect_buffer,\n        [out] UINT *move_rects_buffer_size_required\n    );\n\n    HRESULT GetFramePointerShape(\n        [in] UINT pointer_shape_buffer_size,\n        [out] void *pointer_shape_buffer,\n        [out] UINT *pointer_shape_buffer_size_required,\n        [out] DXGI_OUTDUPL_POINTER_SHAPE_INFO *pointer_shape_info\n    );\n\n    HRESULT MapDesktopSurface(\n        [out] DXGI_MAPPED_RECT *locked_rect\n    );\n\n    HRESULT UnMapDesktopSurface();\n\n    HRESULT ReleaseFrame();\n}\n\n[\n    object,\n    uuid(aba496dd-b617-4cb8-a866-bc44d7eb1fa2),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGISurface2 : IDXGISurface1\n{\n    HRESULT GetResource(\n        [in] REFIID iid,\n        [out] void **parent_resource,\n        [out] UINT *subresource_idx\n    );\n}\n\n[\n    object,\n    uuid(30961379-4609-4a41-998e-54fe567ee0c1),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIResource1 : IDXGIResource\n{\n    HRESULT CreateSubresourceSurface(\n        UINT index,\n        [out] IDXGISurface2 **surface\n    );\n    HRESULT CreateSharedHandle(\n        [in] const SECURITY_ATTRIBUTES *attributes,\n        [in] DWORD access,\n        [in] const WCHAR *name,\n        [out] HANDLE *handle\n    );\n}\n\n[\n    object,\n    uuid(ea9dbf1a-c88e-4486-854a-98aa0138f30c),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIDisplayControl : IUnknown\n{\n    BOOL IsStereoEnabled();\n    void SetStereoEnabled(BOOL enabled);\n}\n\n[\n    object,\n    uuid(05008617-fbfd-4051-a790-144884b4f6a9),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIDevice2 : IDXGIDevice1\n{\n    HRESULT OfferResources(\n            [in] UINT NumResources,\n            [in, size_is(NumResources)] IDXGIResource *const *ppResources,\n            [in] DXGI_OFFER_RESOURCE_PRIORITY Priority);\n\n    HRESULT ReclaimResources(\n            [in] UINT NumResources,\n            [in, size_is(NumResources)] IDXGIResource *const *ppResources,\n            [out, size_is(NumResources)] BOOL *pDiscarded);\n\n    HRESULT EnqueueSetEvent(\n            [in] HANDLE hEvent);\n}\n\ntypedef enum DXGI_SCALING {\n    DXGI_SCALING_STRETCH = 0,\n    DXGI_SCALING_NONE = 1\n} DXGI_SCALING;\n\ntypedef struct DXGI_SWAP_CHAIN_DESC1 {\n    UINT Width;\n    UINT Height;\n    DXGI_FORMAT Format;\n    BOOL Stereo;\n    DXGI_SAMPLE_DESC SampleDesc;\n    DXGI_USAGE BufferUsage;\n    UINT BufferCount;\n    DXGI_SCALING Scaling;\n    DXGI_SWAP_EFFECT SwapEffect;\n    DXGI_ALPHA_MODE AlphaMode;\n    UINT Flags;\n} DXGI_SWAP_CHAIN_DESC1;\n\ntypedef struct DXGI_SWAP_CHAIN_FULLSCREEN_DESC {\n    DXGI_RATIONAL RefreshRate;\n    DXGI_MODE_SCANLINE_ORDER ScanlineOrdering;\n    DXGI_MODE_SCALING Scaling;\n    BOOL Windowed;\n} DXGI_SWAP_CHAIN_FULLSCREEN_DESC;\n\ntypedef struct DXGI_PRESENT_PARAMETERS {\n    UINT DirtyRectsCount;\n    RECT *pDirtyRects;\n    RECT *pScrollRect;\n    POINT *pScrollOffset;\n} DXGI_PRESENT_PARAMETERS;\n\n[\n    object,\n    uuid(790a45f7-0d42-4876-983a-0a55cfe6f4aa),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGISwapChain1 : IDXGISwapChain\n{\n    HRESULT GetDesc1(\n            [out] DXGI_SWAP_CHAIN_DESC1 *pDesc);\n\n    HRESULT GetFullscreenDesc(\n            [out] DXGI_SWAP_CHAIN_FULLSCREEN_DESC *pDesc);\n\n    HRESULT GetHwnd(\n            [out] HWND *pHwnd);\n\n    HRESULT GetCoreWindow(\n            [in] REFIID refiid,\n            [out] void **ppUnk);\n\n    HRESULT Present1(\n            [in] UINT SyncInterval,\n            [in] UINT PresentFlags,\n            [in] const DXGI_PRESENT_PARAMETERS *pPresentParameters);\n\n    BOOL IsTemporaryMonoSupported();\n\n    HRESULT GetRestrictToOutput(\n            [out] IDXGIOutput **ppRestrictToOutput);\n\n    HRESULT SetBackgroundColor(\n            [in] const DXGI_RGBA *pColor);\n\n    HRESULT GetBackgroundColor(\n            [out] DXGI_RGBA *pColor);\n\n    HRESULT SetRotation(\n            [in] DXGI_MODE_ROTATION Rotation);\n\n    HRESULT GetRotation(\n            [out] DXGI_MODE_ROTATION *pRotation);\n}\n\n[\n    object,\n    uuid(50c83a1c-e072-4c48-87b0-3630fa36a6d0),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIFactory2 : IDXGIFactory1\n{\n    BOOL IsWindowedStereoEnabled();\n\n    HRESULT CreateSwapChainForHwnd(\n            [in]  IUnknown *pDevice,\n            [in]  HWND hWnd,\n            [in]  const DXGI_SWAP_CHAIN_DESC1 *pDesc,\n            [in]  const DXGI_SWAP_CHAIN_FULLSCREEN_DESC *pFullscreenDesc,\n            [in]  IDXGIOutput *pRestrictToOutput,\n            [out] IDXGISwapChain1 **ppSwapChain);\n\n    HRESULT CreateSwapChainForCoreWindow(\n            [in]  IUnknown *pDevice,\n            [in]  IUnknown *pWindow,\n            [in]  const DXGI_SWAP_CHAIN_DESC1 *pDesc,\n            [in]  IDXGIOutput *pRestrictToOutput,\n            [out] IDXGISwapChain1 **ppSwapChain);\n\n    HRESULT GetSharedResourceAdapterLuid(\n            [in]  HANDLE hResource,\n            [out] LUID *pLuid);\n\n    HRESULT RegisterOcclusionStatusWindow(\n            [in]  HWND WindowHandle,\n            [in]  UINT wMsg,\n            [out] DWORD *pdwCookie);\n\n    HRESULT RegisterStereoStatusEvent(\n            [in]  HANDLE hEvent,\n            [out] DWORD *pdwCookie);\n\n    void UnregisterStereoStatus(\n            [in]  DWORD dwCookie);\n\n    HRESULT RegisterStereoStatusWindow(\n            [in]  HWND WindowHandle,\n            [in]  UINT wMsg,\n            [out] DWORD *pdwCookie);\n\n    HRESULT RegisterOcclusionStatusEvent(\n            [in]  HANDLE hEvent,\n            [out] DWORD *pdwCookie);\n\n    void UnregisterOcclusionStatus(\n            [in]  DWORD dwCookie);\n\n    HRESULT CreateSwapChainForComposition(\n            [in]  IUnknown *pDevice,\n            [in]  const DXGI_SWAP_CHAIN_DESC1 *pDesc,\n            [in]  IDXGIOutput *pRestrictToOutput,\n            [out] IDXGISwapChain1 **ppSwapChain);\n}\n\ntypedef enum DXGI_GRAPHICS_PREEMPTION_GRANULARITY {\n    DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY,\n    DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY,\n    DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY,\n    DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY,\n    DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY\n} DXGI_GRAPHICS_PREEMPTION_GRANULARITY;\n\ntypedef enum DXGI_COMPUTE_PREEMPTION_GRANULARITY {\n    DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY,\n    DXGI_COMPUTE_PREEMPTION_DISPATCH_BOUNDARY,\n    DXGI_COMPUTE_PREEMPTION_THREAD_GROUP_BOUNDARY,\n    DXGI_COMPUTE_PREEMPTION_THREAD_BOUNDARY,\n    DXGI_COMPUTE_PREEMPTION_INSTRUCTION_BOUNDARY\n} DXGI_COMPUTE_PREEMPTION_GRANULARITY;\n\ntypedef struct DXGI_ADAPTER_DESC2 {\n    WCHAR Description[128];\n    UINT VendorId;\n    UINT DeviceId;\n    UINT SubSysId;\n    UINT Revision;\n    SIZE_T DedicatedVideoMemory;\n    SIZE_T DedicatedSystemMemory;\n    SIZE_T SharedSystemMemory;\n    LUID AdapterLuid;\n    UINT Flags;\n    DXGI_GRAPHICS_PREEMPTION_GRANULARITY GraphicsPreemptionGranularity;\n    DXGI_COMPUTE_PREEMPTION_GRANULARITY ComputePreemptionGranularity;\n} DXGI_ADAPTER_DESC2;\n\n[\n    object,\n    uuid(0aa1ae0a-fa0e-4b84-8644-e05ff8e5acb5),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIAdapter2 : IDXGIAdapter1\n{\n    HRESULT GetDesc2([out] DXGI_ADAPTER_DESC2 *pDesc);\n}\n\n[\n    object,\n    uuid(00cddea8-939b-4b83-a340-a685226666cc),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIOutput1 : IDXGIOutput\n{\n    HRESULT GetDisplayModeList1(\n        [in] DXGI_FORMAT enum_format,\n        [in] UINT flags,\n        [in, out] UINT *num_modes,\n        [out] DXGI_MODE_DESC1 *desc\n    );\n\n    HRESULT FindClosestMatchingMode1(\n        [in] const DXGI_MODE_DESC1 *mode_to_match,\n        [out] DXGI_MODE_DESC1 *closest_match,\n        [in] IUnknown *concerned_device\n    );\n\n    HRESULT GetDisplaySurfaceData1(\n        [in] IDXGIResource *destination\n    );\n\n    HRESULT DuplicateOutput(\n        [in] IUnknown *device,\n        [out] IDXGIOutputDuplication **output_duplication\n    );\n}\n"
  },
  {
    "path": "wine/windows/dxgi1_3.idl",
    "content": "/*\n * Copyright 2017 Ihsan Akmal\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"dxgi1_2.idl\";\n\ntypedef struct DXGI_MATRIX_3X2_F\n{\n    float _11;\n    float _12;\n    float _21;\n    float _22;\n    float _31;\n    float _32;\n} DXGI_MATRIX_3X2_F;\n\ntypedef struct DXGI_DECODE_SWAP_CHAIN_DESC\n{\n    UINT Flags;\n} DXGI_DECODE_SWAP_CHAIN_DESC;\n\ntypedef enum DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS\n{\n    DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_NOMINAL_RANGE = 0x1,\n    DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_BT709 = 0x2,\n    DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_xvYCC = 0x4,\n} DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS;\n\ntypedef enum DXGI_FRAME_PRESENTATION_MODE\n{\n    DXGI_FRAME_PRESENTATION_MODE_COMPOSED = 0,\n    DXGI_FRAME_PRESENTATION_MODE_OVERLAY = 1,\n    DXGI_FRAME_PRESENTATION_MODE_NONE = 2,\n    DXGI_FRAME_PRESENTATION_MODE_COMPOSITION_FAILURE = 3,\n} DXGI_FRAME_PRESENTATION_MODE;\n\ntypedef struct DXGI_FRAME_STATISTICS_MEDIA\n{\n    UINT PresentCount;\n    UINT PresentRefreshCount;\n    UINT SyncRefreshCount;\n    LARGE_INTEGER SyncQPCTime;\n    LARGE_INTEGER SyncGPUTime;\n    DXGI_FRAME_PRESENTATION_MODE CompositionMode;\n    UINT ApprovedPresentDuration;\n} DXGI_FRAME_STATISTICS_MEDIA;\n\ntypedef enum DXGI_OVERLAY_SUPPORT_FLAG\n{\n    DXGI_OVERLAY_SUPPORT_FLAG_DIRECT = 0x1,\n    DXGI_OVERLAY_SUPPORT_FLAG_SCALING = 0x2,\n} DXGI_OVERLAY_SUPPORT_FLAG;\n\n[\n    object,\n    uuid(6007896c-3244-4afd-bf18-a6d3beda5023),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIDevice3 : IDXGIDevice2\n{\n    void Trim();\n}\n\n[\n    object,\n    uuid(a8be2ac4-199f-4946-b331-79599fb98de7),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGISwapChain2 : IDXGISwapChain1\n{\n    HRESULT SetSourceSize(UINT width, UINT height);\n\n    HRESULT GetSourceSize(\n        [out] UINT *width,\n        [out] UINT *height\n    );\n\n    HRESULT SetMaximumFrameLatency(UINT max_latency);\n\n    HRESULT GetMaximumFrameLatency(\n        [out] UINT *max_latency\n    );\n\n    HANDLE  GetFrameLatencyWaitableObject();\n\n    HRESULT SetMatrixTransform(const DXGI_MATRIX_3X2_F *matrix);\n\n    HRESULT GetMatrixTransform(\n        [out] DXGI_MATRIX_3X2_F *matrix\n    );\n}\n\n[\n    object,\n    uuid(595e39d1-2724-4663-99b1-da969de28364),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIOutput2 : IDXGIOutput1\n{\n    BOOL SupportsOverlays();\n}\n\n[\n    object,\n    uuid(25483823-cd46-4c7d-86ca-47aa95b837bd),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIFactory3 : IDXGIFactory2\n{\n    UINT GetCreationFlags();\n}\n\n[\n    object,\n    uuid(2633066b-4514-4c7a-8fd8-12ea98059d18),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIDecodeSwapChain : IUnknown\n{\n    HRESULT PresentBuffer(UINT buffer_to_present, UINT sync_interval, UINT flags);\n\n    HRESULT SetSourceRect(const RECT *rect);\n\n    HRESULT SetTargetRect(const RECT *rect);\n\n    HRESULT SetDestSize(UINT width, UINT height);\n\n    HRESULT GetSourceRect(\n        [out] RECT *rect\n    );\n\n    HRESULT GetTargetRect(\n        [out] RECT *rect\n    );\n\n    HRESULT GetDestSize(\n        [out] UINT *width,\n        [out] UINT *height\n    );\n\n    HRESULT SetColorSpace(DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS colorspace);\n\n    DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS GetColorSpace();\n}\n\n[\n    object,\n    uuid(41e7d1f2-a591-4f7b-a2e5-fa9c843e1c12),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIFactoryMedia : IUnknown\n{\n    HRESULT CreateSwapChainForCompositionSurfaceHandle(\n        [in] IUnknown *device,\n        [in] HANDLE surface,\n        [in] const DXGI_SWAP_CHAIN_DESC1 *desc,\n        [in] IDXGIOutput *restrict_to_output,\n        [out] IDXGISwapChain1 **swapchain\n    );\n\n    HRESULT CreateDecodeSwapChainForCompositionSurfaceHandle(\n        [in] IUnknown *device,\n        [in] HANDLE surface,\n        [in] DXGI_DECODE_SWAP_CHAIN_DESC *desc,\n        [in] IDXGIResource *yuv_decode_buffers,\n        [in] IDXGIOutput *restrict_to_output,\n        [out] IDXGIDecodeSwapChain **swapchain\n    );\n}\n\n[\n    object,\n    uuid(dd95b90b-f05f-4f6a-bd65-25bfb264bd84),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGISwapChainMedia : IUnknown\n{\n    HRESULT GetFrameStatisticsMedia(\n        [out] DXGI_FRAME_STATISTICS_MEDIA *stats\n    );\n\n    HRESULT SetPresentDuration(UINT duration);\n\n    HRESULT CheckPresentDurationSupport(\n        UINT desired_present_duration,\n        [out] UINT *closest_smaller_present_duration,\n        [out] UINT *closest_larger_present_duration\n    );\n}\n\n[\n    object,\n    uuid(8a6bb301-7e7e-41F4-a8e0-5b32f7f99b18),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIOutput3 : IDXGIOutput2\n{\n    HRESULT CheckOverlaySupport(\n        [in] DXGI_FORMAT enum_format,\n        [out] IUnknown *concerned_device,\n        [out] UINT *flags\n    );\n}\n\nconst UINT DXGI_CREATE_FACTORY_DEBUG = 0x1;\n\n[local] HRESULT __stdcall CreateDXGIFactory2(UINT flags, REFIID iid, void **factory);\n\n[local] HRESULT __stdcall DXGIGetDebugInterface1(UINT flags, REFIID iid, void **debug);\n"
  },
  {
    "path": "wine/windows/dxgi1_4.idl",
    "content": "/*\n * Copyright 2017 Ihsan Akmal\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"dxgi1_3.idl\";\n\ntypedef enum DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG\n{\n    DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_PRESENT = 0x1,\n    DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_OVERLAY_PRESENT = 0x2,\n} DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG;\n\ntypedef enum DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG\n{\n    DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG_PRESENT = 0x1,\n} DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG;\n\ntypedef enum DXGI_MEMORY_SEGMENT_GROUP\n{\n    DXGI_MEMORY_SEGMENT_GROUP_LOCAL = 0x0,\n    DXGI_MEMORY_SEGMENT_GROUP_NON_LOCAL = 0x1,\n} DXGI_MEMORY_SEGMENT_GROUP;\n\ntypedef struct DXGI_QUERY_VIDEO_MEMORY_INFO\n{\n    UINT64 Budget;\n    UINT64 CurrentUsage;\n    UINT64 AvailableForReservation;\n    UINT64 CurrentReservation;\n} DXGI_QUERY_VIDEO_MEMORY_INFO;\n\n[\n    object,\n    uuid(94d99bdb-f1f8-4ab0-b236-7da0170edab1),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGISwapChain3 : IDXGISwapChain2\n{\n    UINT GetCurrentBackBufferIndex();\n    HRESULT CheckColorSpaceSupport(\n        [in] DXGI_COLOR_SPACE_TYPE colour_space,\n        [out] UINT *colour_space_support\n    );\n    HRESULT SetColorSpace1(\n        [in] DXGI_COLOR_SPACE_TYPE colour_space\n    );\n    HRESULT ResizeBuffers1(\n        [in] UINT buffer_count,\n        [in] UINT width,\n        [in] UINT height,\n        [in] DXGI_FORMAT format,\n        [in] UINT flags,\n        [in] const UINT *node_mask,\n        [in] IUnknown *const *present_queue\n    );\n}\n\n[\n    object,\n    uuid(dc7dca35-2196-414d-9F53-617884032a60),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIOutput4 : IDXGIOutput3\n{\n    HRESULT CheckOverlayColorSpaceSupport(\n        [in] DXGI_FORMAT format,\n        [in] DXGI_COLOR_SPACE_TYPE colour_space,\n        [in] IUnknown *device,\n        [out] UINT *flags\n    );\n}\n\n[\n    object,\n    uuid(1bc6ea02-ef36-464f-bf0c-21ca39e5168a),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIFactory4 : IDXGIFactory3\n{\n    HRESULT EnumAdapterByLuid(\n        [in] LUID luid,\n        [in] REFIID iid,\n        [out] void **adapter\n    );\n    HRESULT EnumWarpAdapter(\n        [in] REFIID iid,\n        [out] void **adapter\n    );\n}\n\n[\n    object,\n    uuid(645967a4-1392-4310-a798-8053ce3e93fd),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIAdapter3 : IDXGIAdapter2\n{\n    HRESULT RegisterHardwareContentProtectionTeardownStatusEvent(\n        [in] HANDLE event,\n        [out] DWORD *cookie\n    );\n    void UnregisterHardwareContentProtectionTeardownStatus(\n        [in] DWORD cookie\n    );\n    HRESULT QueryVideoMemoryInfo(\n        [in] UINT node_index,\n        [in] DXGI_MEMORY_SEGMENT_GROUP segment_group,\n        [out] DXGI_QUERY_VIDEO_MEMORY_INFO *memory_info\n    );\n    HRESULT SetVideoMemoryReservation(\n        [in] UINT node_index,\n        [in] DXGI_MEMORY_SEGMENT_GROUP segment_group,\n        [in] UINT64 reservation\n    );\n    HRESULT RegisterVideoMemoryBudgetChangeNotificationEvent(\n        [in] HANDLE event,\n        [out] DWORD *cookie\n    );\n    void UnregisterVideoMemoryBudgetChangeNotification(\n        [in] DWORD cookie\n    );\n}\n"
  },
  {
    "path": "wine/windows/dxgi1_5.idl",
    "content": "/*\n * Copyright 2017 Ihsan Akmal\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"dxgi1_4.idl\";\n\ntypedef enum DXGI_OUTDUPL_FLAG\n{\n    DXGI_OUTDUPL_COMPOSITED_UI_CAPTURE_ONLY = 0x1,\n} DXGI_OUTDUPL_FLAG;\n\ntypedef enum DXGI_HDR_METADATA_TYPE\n{\n    DXGI_HDR_METADATA_TYPE_NONE = 0x0,\n    DXGI_HDR_METADATA_TYPE_HDR10 = 0x1,\n} DXGI_HDR_METADATA_TYPE;\n\ntypedef enum _DXGI_OFFER_RESOURCE_FLAGS\n{\n    DXGI_OFFER_RESOURCE_FLAG_ALLOW_DECOMMIT = 0x1,\n} DXGI_OFFER_RESOURCE_FLAGS;\n\ntypedef enum _DXGI_RECLAIM_RESOURCE_RESULTS\n{\n    DXGI_RECLAIM_RESOURCE_RESULT_OK = 0x0,\n    DXGI_RECLAIM_RESOURCE_RESULT_DISCARDED = 0x1,\n    DXGI_RECLAIM_RESOURCE_RESULT_NOT_COMMITTED = 0x2,\n} DXGI_RECLAIM_RESOURCE_RESULTS;\n\ntypedef enum DXGI_FEATURE\n{\n       DXGI_FEATURE_PRESENT_ALLOW_TEARING = 0x0,\n} DXGI_FEATURE;\n\ntypedef struct DXGI_HDR_METADATA_HDR10\n{\n    UINT16 RedPrimary[2];\n    UINT16 GreenPrimary[2];\n    UINT16 BluePrimary[2];\n    UINT16 WhitePoint[2];\n    UINT MaxMasteringLuminance;\n    UINT MinMasteringLuminance;\n    UINT16 MaxContentLightLevel;\n    UINT16 MaxFrameAverageLightLevel;\n} DXGI_HDR_METADATA_HDR10;\n\n[\n    object,\n    uuid(80a07424-ab52-42eb-833c-0c42fd282d98),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIOutput5 : IDXGIOutput4\n{\n    HRESULT DuplicateOutput1(\n        [in] IUnknown *device,\n        [in] UINT flags,\n        [in] UINT format_count,\n        [in] const DXGI_FORMAT *formats,\n        [out] IDXGIOutputDuplication **duplication\n    );\n}\n\n[\n    object,\n    uuid(3d585d5a-bd4a-489e-b1f4-3dbcb6452ffb),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGISwapChain4 : IDXGISwapChain3\n{\n    HRESULT SetHDRMetaData(\n        [in] DXGI_HDR_METADATA_TYPE type,\n        [in] UINT size,\n        [in] void *metadata\n    );\n}\n\n[\n    object,\n    uuid(95b4f95f-d8da-4ca4-9ee6-3b76d5968a10),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIDevice4 : IDXGIDevice3\n{\n    HRESULT OfferResources1(\n        [in] UINT resource_count,\n        [in] IDXGIResource *const *resources,\n        [in] DXGI_OFFER_RESOURCE_PRIORITY priority,\n        [in] UINT flags\n    );\n    HRESULT ReclaimResources1(\n        [in] UINT resource_count,\n        [in] IDXGIResource *const *resources,\n        [out] DXGI_RECLAIM_RESOURCE_RESULTS *results\n    );\n}\n\n[\n    object,\n    uuid(7632e1f5-ee65-4dca-87fd-84cd75f8838d),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIFactory5 : IDXGIFactory4\n{\n    HRESULT CheckFeatureSupport(\n        DXGI_FEATURE feature,\n        [in, out] void *support_data,\n        UINT support_data_size\n    );\n}\n"
  },
  {
    "path": "wine/windows/dxgi1_6.idl",
    "content": "/*\n * Copyright 2017 Ihsan Akmal\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"dxgi1_5.idl\";\n\ntypedef enum DXGI_ADAPTER_FLAG3\n{\n    DXGI_ADAPTER_FLAG3_NONE = 0x0,\n    DXGI_ADAPTER_FLAG3_REMOTE = 0x1,\n    DXGI_ADAPTER_FLAG3_SOFTWARE = 0x2,\n    DXGI_ADAPTER_FLAG3_ACG_COMPATIBLE = 0x4,\n    DXGI_ADAPTER_FLAG3_FORCE_DWORD = 0xffffffff,\n} DXGI_ADAPTER_FLAG3;\n\ntypedef enum DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAGS\n{\n    DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_FULLSCREEN = 0x1,\n    DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_WINDOWED = 0x2,\n    DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_CURSOR_STRETCHED = 0x4,\n} DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAGS;\n\ntypedef struct DXGI_ADAPTER_DESC3\n{\n    WCHAR Description[128];\n    UINT VendorId;\n    UINT DeviceId;\n    UINT SubSysId;\n    UINT Revision;\n    SIZE_T DedicatedVideoMemory;\n    SIZE_T DedicatedSystemMemory;\n    SIZE_T SharedSystemMemory;\n    LUID AdapterLuid;\n    DXGI_ADAPTER_FLAG3 Flags;\n    DXGI_GRAPHICS_PREEMPTION_GRANULARITY GraphicsPreemptionGranularity;\n    DXGI_COMPUTE_PREEMPTION_GRANULARITY ComputePreemptionGranularity;\n} DXGI_ADAPTER_DESC3;\n\ntypedef struct DXGI_OUTPUT_DESC1\n{\n    WCHAR DeviceName[32];\n    RECT DesktopCoordinates;\n    BOOL AttachedToDesktop;\n    DXGI_MODE_ROTATION Rotation;\n    HMONITOR Monitor;\n    UINT BitsPerColor;\n    DXGI_COLOR_SPACE_TYPE ColorSpace;\n    FLOAT RedPrimary[2];\n    FLOAT GreenPrimary[2];\n    FLOAT BluePrimary[2];\n    FLOAT WhitePoint[2];\n    FLOAT MinLuminance;\n    FLOAT MaxLuminance;\n    FLOAT MaxFullFrameLuminance;\n} DXGI_OUTPUT_DESC1;\n\n[\n    object,\n    uuid(3c8d99d1-4fbf-4181-a82c-af66bf7bd24e),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIAdapter4 : IDXGIAdapter3\n{\n    HRESULT GetDesc3(\n        [out] DXGI_ADAPTER_DESC3 *desc\n    );\n}\n\n[\n    object,\n    uuid(068346e8-aaec-4b84-add7-137f513f77a1),\n    local,\n    pointer_default(unique)\n]\ninterface IDXGIOutput6 : IDXGIOutput5\n{\n    HRESULT GetDesc1(\n        [out] DXGI_OUTPUT_DESC1 *desc\n    );\n    HRESULT CheckHardwareCompositionSupport(\n        [out] UINT *flags\n    );\n}\n"
  },
  {
    "path": "wine/windows/dxgicommon.idl",
    "content": "/*\n * Copyright 2017 Ihsan Akmal\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\ncpp_quote(\"#if 0\")\ntypedef unsigned int UINT;\ncpp_quote(\"#endif\")\n\nconst UINT DXGI_STANDARD_MULTISAMPLE_QUALITY_PATTERN = 0xffffffff;\nconst UINT DXGI_CENTER_MULTISAMPLE_QUALITY_PATTERN = 0xfffffffe;\n\ntypedef enum DXGI_COLOR_SPACE_TYPE\n{\n    DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709             = 0x00,\n    DXGI_COLOR_SPACE_RGB_FULL_G10_NONE_P709             = 0x01,\n    DXGI_COLOR_SPACE_RGB_STUDIO_G22_NONE_P709           = 0x02,\n    DXGI_COLOR_SPACE_RGB_STUDIO_G22_NONE_P2020          = 0x03,\n    DXGI_COLOR_SPACE_RESERVED                           = 0x04,\n    DXGI_COLOR_SPACE_YCBCR_FULL_G22_NONE_P709_X601      = 0x05,\n    DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P601         = 0x06,\n    DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P601           = 0x07,\n    DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P709         = 0x08,\n    DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P709           = 0x09,\n    DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P2020        = 0x0a,\n    DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P2020          = 0x0b,\n    DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020          = 0x0c,\n    DXGI_COLOR_SPACE_YCBCR_STUDIO_G2084_LEFT_P2020      = 0x0d,\n    DXGI_COLOR_SPACE_RGB_STUDIO_G2084_NONE_P2020        = 0x0e,\n    DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_TOPLEFT_P2020     = 0x0f,\n    DXGI_COLOR_SPACE_YCBCR_STUDIO_G2084_TOPLEFT_P2020   = 0x10,\n    DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P2020            = 0x11,\n    DXGI_COLOR_SPACE_YCBCR_STUDIO_GHLG_TOPLEFT_P2020    = 0x12,\n    DXGI_COLOR_SPACE_YCBCR_FULL_GHLG_TOPLEFT_P2020      = 0x13,\n    DXGI_COLOR_SPACE_CUSTOM                             = 0xffffffff,\n} DXGI_COLOR_SPACE_TYPE;\n\ntypedef struct DXGI_SAMPLE_DESC\n{\n    UINT Count;\n    UINT Quality;\n} DXGI_SAMPLE_DESC;\n\ntypedef struct DXGI_RATIONAL\n{\n    UINT Numerator;\n    UINT Denominator;\n} DXGI_RATIONAL;\n"
  },
  {
    "path": "wine/windows/dxgiformat.idl",
    "content": "/*\n * Copyright 2016 Józef Kucia for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nconst unsigned int DXGI_FORMAT_DEFINED = 1;\n\ntypedef enum DXGI_FORMAT\n{\n    DXGI_FORMAT_UNKNOWN                     = 0x00,\n    DXGI_FORMAT_R32G32B32A32_TYPELESS       = 0x01,\n    DXGI_FORMAT_R32G32B32A32_FLOAT          = 0x02,\n    DXGI_FORMAT_R32G32B32A32_UINT           = 0x03,\n    DXGI_FORMAT_R32G32B32A32_SINT           = 0x04,\n    DXGI_FORMAT_R32G32B32_TYPELESS          = 0x05,\n    DXGI_FORMAT_R32G32B32_FLOAT             = 0x06,\n    DXGI_FORMAT_R32G32B32_UINT              = 0x07,\n    DXGI_FORMAT_R32G32B32_SINT              = 0x08,\n    DXGI_FORMAT_R16G16B16A16_TYPELESS       = 0x09,\n    DXGI_FORMAT_R16G16B16A16_FLOAT          = 0x0a,\n    DXGI_FORMAT_R16G16B16A16_UNORM          = 0x0b,\n    DXGI_FORMAT_R16G16B16A16_UINT           = 0x0c,\n    DXGI_FORMAT_R16G16B16A16_SNORM          = 0x0d,\n    DXGI_FORMAT_R16G16B16A16_SINT           = 0x0e,\n    DXGI_FORMAT_R32G32_TYPELESS             = 0x0f,\n    DXGI_FORMAT_R32G32_FLOAT                = 0x10,\n    DXGI_FORMAT_R32G32_UINT                 = 0x11,\n    DXGI_FORMAT_R32G32_SINT                 = 0x12,\n    DXGI_FORMAT_R32G8X24_TYPELESS           = 0x13,\n    DXGI_FORMAT_D32_FLOAT_S8X24_UINT        = 0x14,\n    DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS    = 0x15,\n    DXGI_FORMAT_X32_TYPELESS_G8X24_UINT     = 0x16,\n    DXGI_FORMAT_R10G10B10A2_TYPELESS        = 0x17,\n    DXGI_FORMAT_R10G10B10A2_UNORM           = 0x18,\n    DXGI_FORMAT_R10G10B10A2_UINT            = 0x19,\n    DXGI_FORMAT_R11G11B10_FLOAT             = 0x1a,\n    DXGI_FORMAT_R8G8B8A8_TYPELESS           = 0x1b,\n    DXGI_FORMAT_R8G8B8A8_UNORM              = 0x1c,\n    DXGI_FORMAT_R8G8B8A8_UNORM_SRGB         = 0x1d,\n    DXGI_FORMAT_R8G8B8A8_UINT               = 0x1e,\n    DXGI_FORMAT_R8G8B8A8_SNORM              = 0x1f,\n    DXGI_FORMAT_R8G8B8A8_SINT               = 0x20,\n    DXGI_FORMAT_R16G16_TYPELESS             = 0x21,\n    DXGI_FORMAT_R16G16_FLOAT                = 0x22,\n    DXGI_FORMAT_R16G16_UNORM                = 0x23,\n    DXGI_FORMAT_R16G16_UINT                 = 0x24,\n    DXGI_FORMAT_R16G16_SNORM                = 0x25,\n    DXGI_FORMAT_R16G16_SINT                 = 0x26,\n    DXGI_FORMAT_R32_TYPELESS                = 0x27,\n    DXGI_FORMAT_D32_FLOAT                   = 0x28,\n    DXGI_FORMAT_R32_FLOAT                   = 0x29,\n    DXGI_FORMAT_R32_UINT                    = 0x2a,\n    DXGI_FORMAT_R32_SINT                    = 0x2b,\n    DXGI_FORMAT_R24G8_TYPELESS              = 0x2c,\n    DXGI_FORMAT_D24_UNORM_S8_UINT           = 0x2d,\n    DXGI_FORMAT_R24_UNORM_X8_TYPELESS       = 0x2e,\n    DXGI_FORMAT_X24_TYPELESS_G8_UINT        = 0x2f,\n    DXGI_FORMAT_R8G8_TYPELESS               = 0x30,\n    DXGI_FORMAT_R8G8_UNORM                  = 0x31,\n    DXGI_FORMAT_R8G8_UINT                   = 0x32,\n    DXGI_FORMAT_R8G8_SNORM                  = 0x33,\n    DXGI_FORMAT_R8G8_SINT                   = 0x34,\n    DXGI_FORMAT_R16_TYPELESS                = 0x35,\n    DXGI_FORMAT_R16_FLOAT                   = 0x36,\n    DXGI_FORMAT_D16_UNORM                   = 0x37,\n    DXGI_FORMAT_R16_UNORM                   = 0x38,\n    DXGI_FORMAT_R16_UINT                    = 0x39,\n    DXGI_FORMAT_R16_SNORM                   = 0x3a,\n    DXGI_FORMAT_R16_SINT                    = 0x3b,\n    DXGI_FORMAT_R8_TYPELESS                 = 0x3c,\n    DXGI_FORMAT_R8_UNORM                    = 0x3d,\n    DXGI_FORMAT_R8_UINT                     = 0x3e,\n    DXGI_FORMAT_R8_SNORM                    = 0x3f,\n    DXGI_FORMAT_R8_SINT                     = 0x40,\n    DXGI_FORMAT_A8_UNORM                    = 0x41,\n    DXGI_FORMAT_R1_UNORM                    = 0x42,\n    DXGI_FORMAT_R9G9B9E5_SHAREDEXP          = 0x43,\n    DXGI_FORMAT_R8G8_B8G8_UNORM             = 0x44,\n    DXGI_FORMAT_G8R8_G8B8_UNORM             = 0x45,\n    DXGI_FORMAT_BC1_TYPELESS                = 0x46,\n    DXGI_FORMAT_BC1_UNORM                   = 0x47,\n    DXGI_FORMAT_BC1_UNORM_SRGB              = 0x48,\n    DXGI_FORMAT_BC2_TYPELESS                = 0x49,\n    DXGI_FORMAT_BC2_UNORM                   = 0x4a,\n    DXGI_FORMAT_BC2_UNORM_SRGB              = 0x4b,\n    DXGI_FORMAT_BC3_TYPELESS                = 0x4c,\n    DXGI_FORMAT_BC3_UNORM                   = 0x4d,\n    DXGI_FORMAT_BC3_UNORM_SRGB              = 0x4e,\n    DXGI_FORMAT_BC4_TYPELESS                = 0x4f,\n    DXGI_FORMAT_BC4_UNORM                   = 0x50,\n    DXGI_FORMAT_BC4_SNORM                   = 0x51,\n    DXGI_FORMAT_BC5_TYPELESS                = 0x52,\n    DXGI_FORMAT_BC5_UNORM                   = 0x53,\n    DXGI_FORMAT_BC5_SNORM                   = 0x54,\n    DXGI_FORMAT_B5G6R5_UNORM                = 0x55,\n    DXGI_FORMAT_B5G5R5A1_UNORM              = 0x56,\n    DXGI_FORMAT_B8G8R8A8_UNORM              = 0x57,\n    DXGI_FORMAT_B8G8R8X8_UNORM              = 0x58,\n    DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM  = 0x59,\n    DXGI_FORMAT_B8G8R8A8_TYPELESS           = 0x5a,\n    DXGI_FORMAT_B8G8R8A8_UNORM_SRGB         = 0x5b,\n    DXGI_FORMAT_B8G8R8X8_TYPELESS           = 0x5c,\n    DXGI_FORMAT_B8G8R8X8_UNORM_SRGB         = 0x5d,\n    DXGI_FORMAT_BC6H_TYPELESS               = 0x5e,\n    DXGI_FORMAT_BC6H_UF16                   = 0x5f,\n    DXGI_FORMAT_BC6H_SF16                   = 0x60,\n    DXGI_FORMAT_BC7_TYPELESS                = 0x61,\n    DXGI_FORMAT_BC7_UNORM                   = 0x62,\n    DXGI_FORMAT_BC7_UNORM_SRGB              = 0x63,\n    DXGI_FORMAT_AYUV                        = 0x64,\n    DXGI_FORMAT_Y410                        = 0x65,\n    DXGI_FORMAT_Y416                        = 0x66,\n    DXGI_FORMAT_NV12                        = 0x67,\n    DXGI_FORMAT_P010                        = 0x68,\n    DXGI_FORMAT_P016                        = 0x69,\n    DXGI_FORMAT_420_OPAQUE                  = 0x6a,\n    DXGI_FORMAT_YUY2                        = 0x6b,\n    DXGI_FORMAT_Y210                        = 0x6c,\n    DXGI_FORMAT_Y216                        = 0x6d,\n    DXGI_FORMAT_NV11                        = 0x6e,\n    DXGI_FORMAT_AI44                        = 0x6f,\n    DXGI_FORMAT_IA44                        = 0x70,\n    DXGI_FORMAT_P8                          = 0x71,\n    DXGI_FORMAT_A8P8                        = 0x72,\n    DXGI_FORMAT_B4G4R4A4_UNORM              = 0x73,\n\n    DXGI_FORMAT_P208                        = 0x82,\n    DXGI_FORMAT_V208                        = 0x83,\n    DXGI_FORMAT_V408                        = 0x84,\n\n    DXGI_FORMAT_FORCE_UINT                  = 0xffffffff,\n} DXGI_FORMAT;\n"
  },
  {
    "path": "wine/windows/dxgitype.idl",
    "content": "/*\n * Copyright 2007 Andras Kovacs\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"dxgicommon.idl\";\nimport \"dxgiformat.idl\";\n\ncpp_quote(\"#if 0\")\ntypedef unsigned int UINT;\ntypedef long BOOL;\ncpp_quote(\"#endif\")\n\ntypedef enum DXGI_MODE_ROTATION\n{\n    DXGI_MODE_ROTATION_UNSPECIFIED  = 0x0,\n    DXGI_MODE_ROTATION_IDENTITY     = 0x1,\n    DXGI_MODE_ROTATION_ROTATE90     = 0x2,\n    DXGI_MODE_ROTATION_ROTATE180    = 0x3,\n    DXGI_MODE_ROTATION_ROTATE270    = 0x4,\n} DXGI_MODE_ROTATION;\n\ntypedef enum DXGI_MODE_SCANLINE_ORDER\n{\n    DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED        = 0x0,\n    DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE        = 0x1,\n    DXGI_MODE_SCANLINE_ORDER_UPPER_FIELD_FIRST  = 0x2,\n    DXGI_MODE_SCANLINE_ORDER_LOWER_FIELD_FIRST  = 0x3,\n} DXGI_MODE_SCANLINE_ORDER;\n\ntypedef enum DXGI_MODE_SCALING\n{\n    DXGI_MODE_SCALING_UNSPECIFIED   = 0x0,\n    DXGI_MODE_SCALING_CENTERED      = 0x1,\n    DXGI_MODE_SCALING_STRETCHED     = 0x2,\n} DXGI_MODE_SCALING;\n\ncpp_quote(\"#ifndef D3DCOLORVALUE_DEFINED\")\ncpp_quote(\"#define D3DCOLORVALUE_DEFINED\")\ntypedef struct _D3DCOLORVALUE\n{\n    float r;\n    float g;\n    float b;\n    float a;\n} D3DCOLORVALUE;\ncpp_quote(\"#endif\")\ntypedef D3DCOLORVALUE DXGI_RGBA;\n\ntypedef struct DXGI_MODE_DESC\n{\n    UINT Width;\n    UINT Height;\n    DXGI_RATIONAL RefreshRate;\n    DXGI_FORMAT Format;\n    DXGI_MODE_SCANLINE_ORDER ScanlineOrdering;\n    DXGI_MODE_SCALING Scaling;\n} DXGI_MODE_DESC;\n\ntypedef struct DXGI_GAMMA_CONTROL_CAPABILITIES\n{\n    BOOL ScaleAndOffsetSupported;\n    float MaxConvertedValue;\n    float MinConvertedValue;\n    UINT NumGammaControlPoints;\n    float ControlPointPositions[1025];\n} DXGI_GAMMA_CONTROL_CAPABILITIES;\n\ntypedef struct DXGI_RGB\n{\n    float Red;\n    float Green;\n    float Blue;\n} DXGI_RGB;\n\ntypedef struct DXGI_GAMMA_CONTROL\n{\n    DXGI_RGB Scale;\n    DXGI_RGB Offset;\n    DXGI_RGB GammaCurve[1025];\n} DXGI_GAMMA_CONTROL;\n"
  },
  {
    "path": "wine/windows/dxva2api.idl",
    "content": "/*\n * Copyright 2014 Michael Müller for Pipelight\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\n\ncpp_quote(\"#if 0\")\ntypedef DWORD IDirect3DDevice9;\ntypedef DWORD IDirect3DSurface9;\n\ntypedef DWORD D3DFORMAT;\ntypedef DWORD D3DPOOL;\ncpp_quote(\"#endif\")\n\n/* MPEG2 */\ncpp_quote(\"DEFINE_GUID(DXVA2_ModeMPEG2_MoComp, 0xe6a9f44b, 0x61b0,0x4563, 0x9e,0xa4,0x63,0xd2,0xa3,0xc6,0xfe,0x66);\")\ncpp_quote(\"#define DXVA2_ModeMPEG2_MOCOMP      DXVA2_ModeMPEG2_MoComp\")\n\ncpp_quote(\"DEFINE_GUID(DXVA2_ModeMPEG2_IDCT,   0xbf22ad00, 0x03ea,0x4690, 0x80,0x77,0x47,0x33,0x46,0x20,0x9b,0x7e);\")\n\ncpp_quote(\"DEFINE_GUID(DXVA2_ModeMPEG2_VLD,    0xee27417f, 0x5e28,0x4e65, 0xbe,0xea,0x1d,0x26,0xb5,0x08,0xad,0xc9);\")\n\n/* H264 */\ncpp_quote(\"DEFINE_GUID(DXVA2_ModeH264_A,       0x1b81be64, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);\")\ncpp_quote(\"#define DXVA2_ModeH264_MoComp_NoFGT DXVA2_ModeH264_A\")\n\ncpp_quote(\"DEFINE_GUID(DXVA2_ModeH264_B,       0x1b81be65, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);\")\ncpp_quote(\"#define DXVA2_ModeH264_MoComp_FGT   DXVA2_ModeH264_B\")\n\ncpp_quote(\"DEFINE_GUID(DXVA2_ModeH264_C,       0x1b81be66, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);\")\ncpp_quote(\"#define DXVA2_ModeH264_IDCT_NoFGT   DXVA2_ModeH264_C\")\n\ncpp_quote(\"DEFINE_GUID(DXVA2_ModeH264_D,       0x1b81be67, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);\")\ncpp_quote(\"#define DXVA2_ModeH264_IDCT_FGT     DXVA2_ModeH264_D\")\n\ncpp_quote(\"DEFINE_GUID(DXVA2_ModeH264_E,       0x1b81be68, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);\")\ncpp_quote(\"#define DXVA2_ModeH264_VLD_NoFGT    DXVA2_ModeH264_E\")\n\ncpp_quote(\"DEFINE_GUID(DXVA2_ModeH264_F,       0x1b81be69, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);\")\ncpp_quote(\"#define DXVA2_ModeH264_VLD_FGT      DXVA2_ModeH264_F\")\n\n/* WMV8 */\ncpp_quote(\"DEFINE_GUID(DXVA2_ModeWMV8_A,       0x1b81be80, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);\")\ncpp_quote(\"#define DXVA2_ModeWMV8_PostProc     DXVA2_ModeWMV8_A\")\n\ncpp_quote(\"DEFINE_GUID(DXVA2_ModeWMV8_B,       0x1b81be81, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);\")\ncpp_quote(\"#define DXVA2_ModeWMV8_MoComp       DXVA2_ModeWMV8_B\")\n\n/* WMV9 */\ncpp_quote(\"DEFINE_GUID(DXVA2_ModeWMV9_A,       0x1b81be90, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);\")\ncpp_quote(\"#define DXVA2_ModeWMV9_PostProc     DXVA2_ModeWMV9_A\")\n\ncpp_quote(\"DEFINE_GUID(DXVA2_ModeWMV9_B,       0x1b81be91, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);\")\ncpp_quote(\"#define DXVA2_ModeWMV9_MoComp       DXVA2_ModeWMV9_B\")\n\ncpp_quote(\"DEFINE_GUID(DXVA2_ModeWMV9_C,       0x1b81be94, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);\")\ncpp_quote(\"#define DXVA2_ModeWMV9_IDCT         DXVA2_ModeWMV9_C\")\n\n/* VC1 */\ncpp_quote(\"DEFINE_GUID(DXVA2_ModeVC1_A,        0x1b81beA0, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);\")\ncpp_quote(\"#define DXVA2_ModeVC1_PostProc      DXVA2_ModeVC1_A\")\n\ncpp_quote(\"DEFINE_GUID(DXVA2_ModeVC1_B,        0x1b81beA1, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);\")\ncpp_quote(\"#define DXVA2_ModeVC1_MoComp        DXVA2_ModeVC1_B\")\n\ncpp_quote(\"DEFINE_GUID(DXVA2_ModeVC1_C,        0x1b81beA2, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);\")\ncpp_quote(\"#define DXVA2_ModeVC1_IDCT          DXVA2_ModeVC1_C\")\n\ncpp_quote(\"DEFINE_GUID(DXVA2_ModeVC1_D,        0x1b81beA3, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);\")\ncpp_quote(\"#define DXVA2_ModeVC1_VLD           DXVA2_ModeVC1_D\")\n\n/* Encryption */\ncpp_quote(\"DEFINE_GUID(DXVA_NoEncrypt,         0x1b81bed0, 0xa0c7,0x11d3, 0xb9,0x84,0x00,0xc0,0x4f,0x2e,0x73,0xc5);\")\n\ncpp_quote(\"#ifndef REFERENCE_TIME_DEFINED\")\ncpp_quote(\"#define REFERENCE_TIME_DEFINED\")\ntypedef LONGLONG REFERENCE_TIME;\ncpp_quote(\"#endif\")\n\nenum\n{\n    DXVA2_PictureParametersBufferType,\n    DXVA2_MacroBlockControlBufferType,\n    DXVA2_ResidualDifferenceBufferType,\n    DXVA2_DeblockingControlBufferType,\n    DXVA2_InverseQuantizationMatrixBufferType,\n    DXVA2_SliceControlBufferType,\n    DXVA2_BitStreamDateBufferType,\n    DXVA2_MotionVectorBuffer,\n    DXVA2_FilmGrainBuffer\n};\n\nenum\n{\n    DXVA2_VideoDecoderRenderTarget,\n    DXVA2_VideoProcessorRenderTarget,\n    DXVA2_VideoSoftwareRenderTarget\n};\n\ntypedef struct _DXVA2_ExtendedFormat\n{\n    union\n    {\n        struct\n        {\n            UINT SampleFormat           :8;\n            UINT VideoChromaSubsampling :4;\n            UINT NominalRange           :3;\n            UINT VideoTransferMatrix    :3;\n            UINT VideoLighting          :4;\n            UINT VideoPrimaries         :5;\n            UINT VideoTransferFunction  :5;\n        };\n        UINT value;\n    };\n} DXVA2_ExtendedFormat;\n\ntypedef struct _DXVA2_Frequency\n{\n    UINT Numerator;\n    UINT Denominator;\n} DXVA2_Frequency;\n\ntypedef struct _DXVA2_ConfigPictureDecode\n{\n    GUID guidConfigBitstreamEncryption;\n    GUID guidConfigMBcontrolEncryption;\n    GUID guidConfigResidDiffEncryption;\n    UINT ConfigBitstreamRaw;\n    UINT ConfigMBcontrolRasterOrder;\n    UINT ConfigResidDiffHost;\n    UINT ConfigSpatialResid8;\n    UINT ConfigResid8Subtraction;\n    UINT ConfigSpatialHost8or9Clipping;\n    UINT ConfigSpatialResidInterleaved;\n    UINT ConfigIntraResidUnsigned;\n    UINT ConfigResidDiffAccelerator;\n    UINT ConfigHostInverseScan;\n    UINT ConfigSpecificIDCT;\n    UINT Config4GroupedCoefs;\n    UINT ConfigMinRenderTargetBuffCount;\n    USHORT ConfigDecoderSpecific;\n} DXVA2_ConfigPictureDecode;\n\ntypedef struct _DXVA2_VideoDesc\n{\n    UINT SampleWidth;\n    UINT SampleHeight;\n    DXVA2_ExtendedFormat SampleFormat;\n    D3DFORMAT Format;\n    DXVA2_Frequency InputSampleFreq;\n    DXVA2_Frequency OutputFrameFreq;\n    UINT UABProtectionLevel;\n    UINT Reserved;\n} DXVA2_VideoDesc;\n\ntypedef struct _DXVA2_DecodeBufferDesc\n{\n    DWORD CompressedBufferType;\n    UINT BufferIndex;\n    UINT DataOffset;\n    UINT DataSize;\n    UINT FirstMBaddress;\n    UINT NumMBsInBuffer;\n    UINT Width;\n    UINT Height;\n    UINT Stride;\n    UINT ReservedBits;\n    PVOID pvPVPState;\n} DXVA2_DecodeBufferDesc;\n\ntypedef struct _DXVA2_DecodeExtensionData\n{\n    UINT Function;\n    PVOID pPrivateInputData;\n    UINT PrivateInputDataSize;\n    PVOID pPrivateOutputData;\n    UINT PrivateOutputDataSize;\n} DXVA2_DecodeExtensionData;\n\ntypedef struct _DXVA2_DecodeExecuteParams\n{\n    UINT NumCompBuffers;\n    DXVA2_DecodeBufferDesc* pCompressedBuffers;\n    DXVA2_DecodeExtensionData* pExtensionData;\n} DXVA2_DecodeExecuteParams;\n\ntypedef struct _DXVA2_VideoProcessorCaps\n{\n    UINT DeviceCaps;\n    D3DPOOL InputPool;\n    UINT NumForwardRefSamples;\n    UINT NumBackwardRefSamples;\n    UINT Reserved;\n    UINT DeinterlaceTechnology;\n    UINT ProcAmpControlCaps;\n    UINT VideoProcessorOperations;\n    UINT NoiseFilterTechnology;\n    UINT DetailFilterTechnology;\n} DXVA2_VideoProcessorCaps;\n\ntypedef struct _DXVA2_Fixed32\n{\n    union\n    {\n        struct\n        {\n            USHORT Fraction;\n            SHORT Value;\n        };\n        LONG ll;\n    };\n} DXVA2_Fixed32;\n\ntypedef struct _DXVA2_ValueRange\n{\n    DXVA2_Fixed32 MinValue;\n    DXVA2_Fixed32 MaxValue;\n    DXVA2_Fixed32 DefaultValue;\n    DXVA2_Fixed32 StepSize;\n} DXVA2_ValueRange;\n\ntypedef struct _DXVA2_AYUVSample8\n{\n    UCHAR Cr;\n    UCHAR Cb;\n    UCHAR Y;\n    UCHAR Alpha;\n} DXVA2_AYUVSample8;\n\ntypedef struct _DXVA2_AYUVSample16\n{\n    USHORT Cr;\n    USHORT Cb;\n    USHORT Y;\n    USHORT Alpha;\n} DXVA2_AYUVSample16;\n\ntypedef struct _DXVA2_ProcAmpValues\n{\n    DXVA2_Fixed32 Brightness;\n    DXVA2_Fixed32 Contrast;\n    DXVA2_Fixed32 Hue;\n    DXVA2_Fixed32 Saturation;\n} DXVA2_ProcAmpValues;\n\ntypedef struct _DXVA2_FilterValues\n{\n    DXVA2_Fixed32 Level;\n    DXVA2_Fixed32 Threshold;\n    DXVA2_Fixed32 Radius;\n} DXVA2_FilterValues;\n\ntypedef struct _DXVA2_VideoProcessBltParams\n{\n    REFERENCE_TIME TargetFrame;\n    RECT TargetRect;\n    SIZE ConstrictionSize;\n    UINT StreamingFlags;\n    DXVA2_AYUVSample16 BackgroundColor;\n    DXVA2_ExtendedFormat DestFormat;\n    DXVA2_ProcAmpValues ProcAmpValues;\n    DXVA2_Fixed32 Alpha;\n    DXVA2_FilterValues NoiseFilterLuma;\n    DXVA2_FilterValues NoiseFilterChroma;\n    DXVA2_FilterValues DetailFilterLuma;\n    DXVA2_FilterValues DetailFilterChroma;\n    DWORD DestData;\n} DXVA2_VideoProcessBltParams;\n\ntypedef struct _DXVA2_VideoSample\n{\n    REFERENCE_TIME Start;\n    REFERENCE_TIME End;\n    DXVA2_ExtendedFormat SampleFormat;\n    IDirect3DSurface9* SrcSurface;\n    RECT SrcRect;\n    RECT DstRect;\n    DXVA2_AYUVSample8 Pal[16];\n    DXVA2_Fixed32 PlanarAlpha;\n    DWORD SampleData;\n} DXVA2_VideoSample;\n\ntypedef enum\n{\n    DXVA2_SurfaceType_DecoderRenderTarget,\n    DXVA2_SurfaceType_ProcessorRenderTarget,\n    DXVA2_SurfaceType_D3DRenderTargetTexture,\n} DXVA2_SurfaceType;\n\ninterface IDirectXVideoDecoder;\ninterface IDirectXVideoProcessor;\n\n/*****************************************************************************\n * IDirect3DDeviceManager9 interface\n */\n[\n    object,\n    uuid(a0cade0f-06d5-4cf4-a1c7-f3cdd725aa75),\n    local\n]\ninterface IDirect3DDeviceManager9 : IUnknown\n{\n    HRESULT ResetDevice(\n        [in] IDirect3DDevice9* pDevice,\n        [in] UINT resetToken);\n\n    HRESULT OpenDeviceHandle(\n        [out] HANDLE* phDevice);\n\n    HRESULT CloseDeviceHandle(\n        [in] HANDLE hDevice);\n\n    HRESULT TestDevice(\n        [in] HANDLE hDevice);\n\n    HRESULT LockDevice(\n        [in] HANDLE hDevice,\n        [out] IDirect3DDevice9** ppDevice,\n        [in] BOOL fBlock);\n\n    HRESULT UnlockDevice(\n        [in] HANDLE hDevice,\n        [in] BOOL fSaveState);\n\n    HRESULT GetVideoService(\n        [in] HANDLE hDevice,\n        [in] REFIID riid,\n        [out] void** ppService);\n}\n\n/*****************************************************************************\n * IDirectXVideoAccelerationService interface\n */\n[\n    object,\n    uuid(fc51a550-d5e7-11d9-af55-00054e43ff02),\n    local\n]\ninterface IDirectXVideoAccelerationService : IUnknown\n{\n    HRESULT CreateSurface(\n        [in] UINT width,\n        [in] UINT height,\n        [in] UINT backBuffers,\n        [in] D3DFORMAT format,\n        [in] D3DPOOL pool,\n        [in] DWORD usage,\n        [in] DWORD dxvaType,\n        [out] IDirect3DSurface9 **ppSurface,\n        [in, out] HANDLE *pSharedHandle);\n}\n\n/*****************************************************************************\n * IDirectXVideoDecoderService interface\n */\n[\n    object,\n    uuid(fc51a551-d5e7-11d9-af55-00054e43ff02),\n    local\n]\ninterface IDirectXVideoDecoderService : IDirectXVideoAccelerationService\n{\n    HRESULT GetDecoderDeviceGuids(\n        [out] UINT *count,\n        [out] GUID **pGuids);\n\n    HRESULT GetDecoderRenderTargets(\n        [in] REFGUID guid,\n        [out] UINT *pCount,\n        [out] D3DFORMAT **pFormats);\n\n    HRESULT GetDecoderConfigurations(\n        [in] REFGUID guid,\n        [in] const DXVA2_VideoDesc *pVideoDesc,\n        [in] IUnknown *pReserved,\n        [out] UINT *pCount,\n        [out] DXVA2_ConfigPictureDecode **ppConfigs);\n\n    HRESULT CreateVideoDecoder(\n        [in] REFGUID guid,\n        [in] const DXVA2_VideoDesc *pVideoDesc,\n        [in] DXVA2_ConfigPictureDecode *pConfig,\n        [in] IDirect3DSurface9 **ppDecoderRenderTargets,\n        [in] UINT NumSurfaces,\n        [out] IDirectXVideoDecoder **ppDecode);\n}\n\n/*****************************************************************************\n * IDirectXVideoDecoder interface\n */\n[\n    object,\n    uuid(f2b0810a-fd00-43c9-918c-df94e2d8ef7d),\n    local\n]\ninterface IDirectXVideoDecoder : IUnknown\n{\n    HRESULT GetVideoDecoderService(\n        [out] IDirectXVideoDecoderService** ppService);\n\n    HRESULT GetCreationParameters(\n        [out] GUID* pDeviceGuid,\n        [out] DXVA2_VideoDesc* pVideoDesc,\n        [out] DXVA2_ConfigPictureDecode* pConfig,\n        [out] IDirect3DSurface9*** pDecoderRenderTargets,\n        [out] UINT* pNumSurfaces);\n\n    HRESULT GetBuffer(\n        [in] UINT BufferType,\n        [out] void** ppBuffer,\n        [out] UINT* pBufferSize);\n\n    HRESULT ReleaseBuffer(\n        [in] UINT BufferType);\n\n    HRESULT BeginFrame(\n        [in] IDirect3DSurface9* pRenderTarget,\n        [in] void* pvPVPData);\n\n    HRESULT EndFrame(\n        [out] HANDLE* pHandleComplete);\n\n    HRESULT Execute(\n        [in] const DXVA2_DecodeExecuteParams* pExecuteParams);\n}\n\n/*****************************************************************************\n * IDirectXVideoProcessorService interface\n */\n[\n    object,\n    uuid(fc51a552-d5e7-11d9-af55-00054e43ff02),\n    local\n]\ninterface IDirectXVideoProcessorService : IDirectXVideoAccelerationService\n{\n    HRESULT RegisterVideoProcessorSoftwareDevice(\n        [in] void* pCallbacks);\n\n    HRESULT GetVideoProcessorDeviceGuids(\n        [in] const DXVA2_VideoDesc* pVideoDesc,\n        [out] UINT* pCount,\n        [out] GUID** pGuids);\n\n    HRESULT GetVideoProcessorRenderTargets(\n        [in] REFGUID VideoProcDeviceGuid,\n        [in] const DXVA2_VideoDesc* pVideoDesc,\n        [out] UINT* pCount,\n        [out] D3DFORMAT** pFormats);\n\n    HRESULT GetVideoProcessorSubStreamFormats(\n        [in] REFGUID VideoProcDeviceGuid,\n        [in] const DXVA2_VideoDesc* pVideoDesc,\n        [in] D3DFORMAT RenderTargetFormat,\n        [out] UINT* pCount,\n        [out] D3DFORMAT** pFormats);\n\n    HRESULT GetVideoProcessorCaps(\n        [in] REFGUID VideoProcDeviceGuid,\n        [in] const DXVA2_VideoDesc* pVideoDesc,\n        [in] D3DFORMAT RenderTargetFormat,\n        [out] DXVA2_VideoProcessorCaps* pCaps);\n\n    HRESULT GetProcAmpRange(\n        [in] REFGUID VideoProcDeviceGuid,\n        [in] const DXVA2_VideoDesc* pVideoDesc,\n        [in] D3DFORMAT RenderTargetFormat,\n        [in] UINT ProcAmpCap,\n        [out] DXVA2_ValueRange* pRange);\n\n    HRESULT GetFilterPropertyRange(\n        [in] REFGUID VideoProcDeviceGuid,\n        [in] const DXVA2_VideoDesc* pVideoDesc,\n        [in] D3DFORMAT renderTargetFormat,\n        [in] UINT FilterSetting,\n        [out] DXVA2_ValueRange* pRange);\n\n    HRESULT CreateVideoProcessor(\n        [in] REFGUID VideoProcDeviceGuid,\n        [in] const DXVA2_VideoDesc* pVideoDesc,\n        [in] D3DFORMAT RenderTargetFormat,\n        [in] UINT MaxNumSubStreams,\n        [out] IDirectXVideoProcessor** ppVidProcess);\n}\n\n/*****************************************************************************\n * IDirectXVideoProcessor interface\n */\n[\n    object,\n    uuid(8c3a39f0-916e-4690-804f-4c8001355d25),\n    local\n]\ninterface IDirectXVideoProcessor : IUnknown\n{\n    HRESULT GetVideoProcessorService(\n        [out] IDirectXVideoProcessorService** ppService);\n\n    HRESULT GetCreationParameters(\n        [out] GUID* pDeviceGuid,\n        [out] DXVA2_VideoDesc* pVideoDesc,\n        [out] D3DFORMAT* pRenderTargetFormat,\n        [out] UINT* pMaxNumSubStreams);\n\n    HRESULT GetVideoProcessorCaps(\n        [out] DXVA2_VideoProcessorCaps* pCaps);\n\n    HRESULT GetProcAmpRange(\n        [in] UINT ProcAmpCap,\n        [out] DXVA2_ValueRange* pRange);\n\n    HRESULT GetFilterPropertyRange(\n        [in] UINT FilterSetting,\n        [out] DXVA2_ValueRange* pRange);\n\n    HRESULT VideoProcessBlt(\n        [in] IDirect3DSurface9* pRenderTarget,\n        [in] const DXVA2_VideoProcessBltParams* pBltParams,\n        [in] const DXVA2_VideoSample* pSamples,\n        [in] UINT NumSamples,\n        [out] HANDLE* pHandleCompleteIDirect3DDeviceManager9);\n}\n\n/*****************************************************************************\n * IDirectXVideoMemoryConfiguration interface\n */\n[\n    object,\n    uuid(b7f916dd-db3b-49c1-84d7-e45ef99ec726),\n    local\n]\ninterface IDirectXVideoMemoryConfiguration : IUnknown\n{\n    HRESULT GetAvailableSurfaceTypeByIndex(\n        [in] DWORD wTypeIndex,\n        [out] DXVA2_SurfaceType *pdwType);\n\n    HRESULT SetSurfaceType(\n        [in] DXVA2_SurfaceType dwType);\n}\n"
  },
  {
    "path": "wine/windows/dyngraph.idl",
    "content": "/*\n * Copyright (C) 2002 Robert Shearman\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\ninterface IPinConnection;\ninterface IPinFlowControl;\ninterface IGraphConfig;\ninterface IGraphConfigCallback;\n\n[\n    local,\n    object,\n    uuid(4a9a62d3-27d4-403d-91e9-89f540e55534),\n    pointer_default(unique)\n]\ninterface IPinConnection : IUnknown\n{\n    HRESULT DynamicQueryAccept([in] const AM_MEDIA_TYPE *pmt);\n\n    HRESULT NotifyEndOfStream([in] HANDLE hNotifyEvent);\n\n    HRESULT IsEndPin();\n\n    HRESULT DynamicDisconnect();\n}\n\n[\n    local,\n    object,\n    uuid(c56e9858-dbf3-4f6b-8119-384af2060deb),\n    pointer_default(unique)\n]\ninterface IPinFlowControl : IUnknown\n{\n    HRESULT Block([in] DWORD dwBlockFlags, [in] HANDLE hEvent);\n}\n\nenum _AM_PIN_FLOW_CONTROL_BLOCK_FLAGS\n{\n    AM_PIN_FLOW_CONTROL_BLOCK = 0x00000001,\n};\n\ntypedef enum _AM_GRAPH_CONFIG_RECONNECT_FLAGS\n{\n    AM_GRAPH_CONFIG_RECONNECT_DIRECTCONNECT = 0x00000001,\n    AM_GRAPH_CONFIG_RECONNECT_CACHE_REMOVED_FILTERS = 0x00000002,\n    AM_GRAPH_CONFIG_RECONNECT_USE_ONLY_CACHED_FILTERS = 0x00000004\n} AM_GRAPH_CONFIG_RECONNECT_FLAGS;\n\nenum _REM_FILTER_FLAGS\n{\n    REMFILTERF_LEAVECONNECTED = 0x00000001\n};\n\ntypedef enum _AM_FILTER_FLAGS\n{\n     AM_FILTER_FLAGS_REMOVABLE = 0x00000001\n} AM_FILTER_FLAGS;\n\n[\n    local,\n    object,\n    uuid(03A1EB8E-32BF-4245-8502-114D08A9CB88),\n    pointer_default(unique)\n]\ninterface IGraphConfig : IUnknown\n{\n    HRESULT Reconnect(\n        [in] IPin *pOutputPin,\n        [in] IPin *pInputPin,\n        [in] const AM_MEDIA_TYPE *pmtFirstConnection,\n        [in] IBaseFilter *pUsingFilter,\n        [in] HANDLE hAbortEvent,\n        [in] DWORD dwFlags);\n\n    HRESULT Reconfigure(\n        [in] IGraphConfigCallback *pCallback,\n        [in] PVOID pvContext,\n        [in] DWORD dwFlags,\n        [in] HANDLE hAbortEvent);\n\n    HRESULT AddFilterToCache([in] IBaseFilter *pFilter);\n\n    HRESULT EnumCacheFilter([out] IEnumFilters **pEnum);\n\n    HRESULT RemoveFilterFromCache([in]IBaseFilter *pFilter);\n\n    HRESULT GetStartTime([out] REFERENCE_TIME *prtStart);\n\n    HRESULT PushThroughData(\n        [in] IPin *pOutputPin,\n        [in] IPinConnection *pConnection,\n        [in] HANDLE hEventAbort);\n\n    HRESULT SetFilterFlags([in] IBaseFilter *pFilter, [in] DWORD dwFlags);\n\n    HRESULT GetFilterFlags([in] IBaseFilter *pFilter, [out] DWORD *pdwFlags);\n\n    HRESULT RemoveFilterEx([in] IBaseFilter *pFilter, DWORD Flags);\n}\n\n[\n    local,\n    object,\n    uuid(ade0fd60-d19d-11d2-abf6-00a0c905f375),\n    pointer_default(unique)\n]\ninterface IGraphConfigCallback : IUnknown\n{\n    HRESULT Reconfigure(PVOID pvContext, DWORD dwFlags);\n}\n\n[\n    local,\n    object,\n    uuid(DCFBDCF6-0DC2-45f5-9AB2-7C330EA09C29),\n    pointer_default(unique)\n]\ninterface IFilterChain : IUnknown\n{\n    HRESULT StartChain(\n        [in] IBaseFilter *pStartFilter,\n        [in] IBaseFilter *pEndFilter);\n\n    HRESULT PauseChain(\n        [in] IBaseFilter *pStartFilter,\n        [in] IBaseFilter *pEndFilter);\n\n    HRESULT StopChain(\n        [in] IBaseFilter *pStartFilter,\n        [in] IBaseFilter *pEndFilter);\n\n    HRESULT RemoveChain(\n        [in] IBaseFilter *pStartFilter,\n        [in] IBaseFilter *pEndFilter);\n}\n"
  },
  {
    "path": "wine/windows/endpointvolume.idl",
    "content": "/*\n * Copyright (C) 2009 Maarten Lankhorst\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\nimport \"devicetopology.idl\";\n\ntypedef struct AUDIO_VOLUME_NOTIFICATION_DATA\n{\n    GUID guidEventContext;\n    BOOL bMuted;\n    FLOAT fMasterVolume;\n    UINT nChannels;\n    FLOAT afChannelVolumes[1];\n} AUDIO_VOLUME_NOTIFICATION_DATA;\n\ncpp_quote(\"typedef struct AUDIO_VOLUME_NOTIFICATION_DATA *PAUDIO_VOLUME_NOTIFICATION_DATA;\")\n\ncpp_quote(\"#define ENDPOINT_HARDWARE_SUPPORT_VOLUME 0x1\")\ncpp_quote(\"#define ENDPOINT_HARDWARE_SUPPORT_MUTE 0x2\")\ncpp_quote(\"#define ENDPOINT_HARDWARE_SUPPORT_METER 0x4\")\n\ninterface IAudioEndpointVolumeCallback;\ninterface IAudioEndpointVolume;\ninterface IAudioEndpointVolumeEx;\ninterface IAudioMeterInformation;\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(657804fa-d6ad-4496-8a60-352752af4f89),\n    local,\n    object\n]\ninterface IAudioEndpointVolumeCallback : IUnknown\n{\n    HRESULT OnNotify(\n        AUDIO_VOLUME_NOTIFICATION_DATA *pNotify\n    );\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(5cdf2c82-841e-4546-9722-0cf74078229a),\n    local,\n    object\n]\ninterface IAudioEndpointVolume : IUnknown\n{\n    HRESULT RegisterControlChangeNotify(\n        [in] IAudioEndpointVolumeCallback *pNotify\n    );\n    HRESULT UnregisterControlChangeNotify(\n        [in] IAudioEndpointVolumeCallback *pNotify\n    );\n    HRESULT GetChannelCount(\n        [out] UINT *pnChannelCount\n    );\n    HRESULT SetMasterVolumeLevel(\n        [in] FLOAT fLevelDB,\n        [unique,in] LPCGUID pguidEventContext\n    );\n    HRESULT SetMasterVolumeLevelScalar(\n        [in] FLOAT fLevel,\n        [unique,in] LPCGUID pguidEventContext\n    );\n    HRESULT GetMasterVolumeLevel(\n        [out] FLOAT *fLevelDB\n    );\n    HRESULT GetMasterVolumeLevelScalar(\n        [out] FLOAT *fLevel\n    );\n    HRESULT SetChannelVolumeLevel(\n        [in] UINT nChannel,\n        [in] FLOAT fLevelDB,\n        [unique,in] LPCGUID pguidEventContext\n    );\n    HRESULT SetChannelVolumeLevelScalar(\n        [in] UINT nChannel,\n        [in] FLOAT fLevel,\n        [unique,in] LPCGUID pguidEventContext\n    );\n    HRESULT GetChannelVolumeLevel(\n        [in] UINT nChannel,\n        [out] FLOAT *fLevelDB\n    );\n    HRESULT GetChannelVolumeLevelScalar(\n        [in] UINT nChannel,\n        [out] FLOAT *fLevel\n    );\n    HRESULT SetMute(\n        [in] BOOL bMute,\n        [unique,in] LPCGUID pguidEventContext\n    );\n    HRESULT GetMute(\n        [out] BOOL *bMute\n    );\n    HRESULT GetVolumeStepInfo(\n        [out] UINT *pnStep,\n        [out] UINT *pnStepCount\n    );\n    HRESULT VolumeStepUp(\n        [unique,in] LPCGUID pguidEventContext\n    );\n    HRESULT VolumeStepDown(\n        [unique,in] LPCGUID pguidEventContext\n    );\n    HRESULT QueryHardwareSupport(\n        [out] DWORD *pdwHardwareSupportMask\n    );\n    HRESULT GetVolumeRange(\n        [out] FLOAT *pflVolumeMindB,\n        [out] FLOAT *pflVolumeMaxdB,\n        [out] FLOAT *pflVolumeIncrementdB\n    );\n}\n\n[\n    pointer_default(unique),\n    nonextensible,\n    uuid(66e11784-f695-4f28-a505-a7080081a78f),\n    local,\n    object\n]\ninterface IAudioEndpointVolumeEx : IAudioEndpointVolume\n{\n    HRESULT GetVolumeRangeChannel(\n        [in] UINT iChannel,\n        [out] FLOAT *pflVolumeMindB,\n        [out] FLOAT *pflVolumeMaxdB,\n        [out] FLOAT *pflVolumeIncrementdB\n    );\n}\n"
  },
  {
    "path": "wine/windows/errorrep.h",
    "content": "/*\n * errorrep.h - error reporting APIs (implemented in faultrep.dll)\n *\n * Copyright 2007 Google (Mikolaj Zalewski)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_ERRORREP_H\n#define __WINE_ERRORREP_H\n\ntypedef enum tagEFaultRepRetVal\n{\n    frrvOk,\n    frrvOkManifest,\n    frrvOkQueued,\n    frrvOkErr,\n    frrvErrNoDW,\n    frrvErrTimeout,\n    frrvLaunchDebugger,\n    frrvOkHeadless,\n    frrvErrAnotherInstance\n} EFaultRepRetVal;\n\nEFaultRepRetVal WINAPI ReportFault(LPEXCEPTION_POINTERS, DWORD);\n\nBOOL WINAPI AddERExcludedApplicationA(LPCSTR);\nBOOL WINAPI AddERExcludedApplicationW(LPCWSTR);\n#define     AddERExcludedApplication WINELIB_NAME_AW(AddERExcludedApplication)\n\n#endif  /* __WINE_ERORREP_H */\n"
  },
  {
    "path": "wine/windows/errors.h",
    "content": "/*\n * Copyright (C) 2006 Hans Leidekker\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __ERRORS__\n#define __ERRORS__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define AMOVIEAPI\n\n#define VFW_FIRST_CODE      0x200\n#define MAX_ERROR_TEXT_LEN  160\n\n#include <vfwmsgs.h>\n\ntypedef BOOL (WINAPI* AMGETERRORTEXTPROCA)(HRESULT,char*,DWORD);\ntypedef BOOL (WINAPI* AMGETERRORTEXTPROCW)(HRESULT,WCHAR*,DWORD);\nDECL_WINELIB_TYPE_AW(AMGETERRORTEXTPROC)\n\nDWORD WINAPI AMGetErrorTextA(HRESULT,LPSTR,DWORD);\nDWORD WINAPI AMGetErrorTextW(HRESULT,LPWSTR,DWORD);\n#define AMGetErrorText WINELIB_NAME_AW(AMGetErrorText)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __ERRORS__ */\n"
  },
  {
    "path": "wine/windows/errrec.idl",
    "content": "/*\n * Copyright (C) 2013 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    object,\n    uuid(0c733a67-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface IErrorRecords : IUnknown\n{\n\ncpp_quote(\"#define IDENTIFIER_SDK_MASK   0xF0000000\")\ncpp_quote(\"#define IDENTIFIER_SDK_ERROR  0x10000000\")\n\ntypedef struct tagERRORINFO\n{\n    HRESULT hrError;\n    DWORD dwMinor;\n    CLSID clsid;\n    IID iid;\n    DISPID dispid;\n} ERRORINFO;\n\n    [local]\n    HRESULT AddErrorRecord([in] ERRORINFO * pErrorInfo, [in] DWORD dwLookupID, [in] DISPPARAMS * pdispparams,\n        [in] IUnknown * punkCustomError, [in] DWORD dwDynamicErrorID);\n\n    [call_as(AddErrorRecord)]\n    HRESULT RemoteAddErrorRecord([in] ERRORINFO * pErrorInfo, [in] DWORD dwLookupID, [in] DISPPARAMS * pdispparams,\n        [in] IUnknown * punkCustomError, [in] DWORD dwDynamicErrorID, [out] IErrorInfo ** ppErrorInfoRem);\n\n    [local]\n    HRESULT GetBasicErrorInfo([in] ULONG ulRecordNum, [out] ERRORINFO * pErrorInfo);\n\n    [call_as(GetBasicErrorInfo)]\n    HRESULT RemoteGetBasicErrorInfo([in] ULONG ulRecordNum, [out] ERRORINFO * pErrorInfo, [out] IErrorInfo **ppErrorInfoRem);\n\n    [local]\n    HRESULT GetCustomErrorObject([in] ULONG ulRecordNum, [in] REFIID riid, [out] IUnknown ** ppObject);\n\n    [call_as(GetCustomErrorObject)]\n    HRESULT RemoteGetCustomErrorObject([in] ULONG ulRecordNum, [in] REFIID riid, [out] IUnknown ** ppObject,\n        [out] IErrorInfo **ppErrorInfoRem);\n\n    [local]\n    HRESULT GetErrorInfo([in] ULONG ulRecordNum, [in] LCID lcid, [out] IErrorInfo **ppErrorInfo);\n\n    [call_as(GetErrorInfo)]\n    HRESULT RemoteGetErrorInfo([in] ULONG ulRecordNum, [in] LCID lcid, [out] IErrorInfo **ppErrorInfo,\n        [out] IErrorInfo **ppErrorInfoRem);\n\n    [local]\n    HRESULT GetErrorParameters([in] ULONG ulRecordNum, [out] DISPPARAMS * pdispparams);\n\n    [call_as(GetErrorParameters)]\n    HRESULT RemoteGetErrorParameters([in] ULONG ulRecordNum, [out] DISPPARAMS * pdispparams, [out] IErrorInfo ** ppErrorInfoRem);\n\n    [local]\n    HRESULT GetRecordCount([out] ULONG *records);\n\n    [call_as(GetRecordCount)]\n    HRESULT RemoteGetRecordCount([out] ULONG * pcRecords, [out] IErrorInfo **ppErrorInfoRem);\n}\n"
  },
  {
    "path": "wine/windows/evcode.h",
    "content": "/*\n * Copyright (C) 2004 Christian Costa\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_EVCODE_H\n#define __WINE_EVCODE_H\n\n#define EC_SYSTEMBASE                       0x00\n#define EC_USER                             0x8000\n\n#define EC_COMPLETE                         0x01\n#define EC_USERABORT                        0x02\n#define EC_ERRORABORT                       0x03\n#define EC_TIME                             0x04\n#define EC_REPAINT                          0x05\n#define EC_STREAM_ERROR_STOPPED             0x06\n#define EC_STREAM_ERROR_STILLPLAYING        0x07\n#define EC_ERROR_STILLPLAYING               0x08\n#define EC_PALETTE_CHANGED                  0x09\n#define EC_VIDEO_SIZE_CHANGED               0x0A\n#define EC_QUALITY_CHANGE                   0x0B\n#define EC_SHUTTING_DOWN                    0x0C\n#define EC_CLOCK_CHANGED                    0x0D\n#define EC_PAUSED                           0x0E\n#define EC_OPENING_FILE                     0x10\n#define EC_BUFFERING_DATA                   0x11\n#define EC_FULLSCREEN_LOST                  0x12\n#define EC_ACTIVATE                         0x13\n#define EC_NEED_RESTART                     0x14\n#define EC_WINDOW_DESTROYED                 0x15\n#define EC_DISPLAY_CHANGED                  0x16\n#define EC_STARVATION                       0x17\n#define EC_OLE_EVENT                        0x18\n#define EC_NOTIFY_WINDOW                    0x19\n#define EC_STREAM_CONTROL_STOPPED           0x1A\n#define EC_STREAM_CONTROL_STARTED           0x1B\n#define EC_END_OF_SEGMENT                   0x1C\n#define EC_SEGMENT_STARTED                  0x1D\n#define EC_LENGTH_CHANGED                   0x1E\n#define EC_DEVICE_LOST                      0x1F\n#define EC_SAMPLE_NEEDED                    0x20\n#define EC_PROCESSING_LATENCY               0x21\n#define EC_SAMPLE_LATENCY                   0x22\n#define EC_SCRUB_TIME                       0x23\n#define EC_STEP_COMPLETE                    0x24\n\n#define EC_NEW_PIN                          0x20\n#define EC_RENDER_FINISHED                  0x21\n\n#define EC_TIMECODE_AVAILABLE               0x30\n#define EC_EXTDEVICE_MODE_CHANGE            0x31\n#define EC_STATE_CHANGE                     0x32\n\n#define EC_PLEASE_REOPEN                    0x40\n#define EC_STATUS                           0x41\n#define EC_MARKER_HIT                       0x42\n#define EC_LOADSTATUS                       0x43\n#define EC_FILE_CLOSED                      0x44\n#define EC_ERRORABORTEX                     0x45\n#define EC_EOS_SOON                         0x46\n#define EC_CONTENTPROPERTY_CHANGED          0x47\n#define EC_BANDWIDTHCHANGE                  0x48\n#define EC_VIDEOFRAMEREADY                  0x49\n#define EC_GRAPH_CHANGED                    0x50\n#define EC_CLOCK_UNSET                      0x51\n\n#define EC_VMR_RENDERDEVICE_SET             0x53\n#define EC_VMR_SURFACE_FLIPPED              0x54\n#define EC_VMR_RECONNECTION_FAILED          0x55\n#define EC_PREPROCESS_COMPLETE              0x56\n#define EC_CODECAPI_EVENT                   0x57\n\n#define EC_BUILT                           0x300\n#define EC_UNBUILT                         0x301\n\n#define EC_WMT_EVENT_BASE                  0x0251\n#define EC_WMT_INDEX_EVENT                 EC_WMT_EVENT_BASE\n#define EC_WMT_EVENT                       EC_WMT_EVENT_BASE+1\n\n#endif /* __WINE_EVCODE_H */\n"
  },
  {
    "path": "wine/windows/evntprov.h",
    "content": "/*\n * Copyright 2010 Hans Leidekker for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _EVNTPROV_H_\n#define _EVNTPROV_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define EVENT_LEVEL_MIN 0x00\n#define EVENT_LEVEL_MAX 0xff\n\ntypedef ULONGLONG REGHANDLE, *PREGHANDLE;\n\ntypedef struct _EVENT_DATA_DESCRIPTOR\n{\n    ULONGLONG   Ptr;\n    ULONG       Size;\n    ULONG       Reserved;\n} EVENT_DATA_DESCRIPTOR, *PEVENT_DATA_DESCRIPTOR;\n\ntypedef struct _EVENT_DESCRIPTOR\n{\n    USHORT    Id;\n    UCHAR     Version;\n    UCHAR     Channel;\n    UCHAR     Level;\n    UCHAR     Opcode;\n    USHORT    Task;\n    ULONGLONG Keyword;\n} EVENT_DESCRIPTOR;\n\ntypedef       EVENT_DESCRIPTOR *PEVENT_DESCRIPTOR;\ntypedef const EVENT_DESCRIPTOR *PCEVENT_DESCRIPTOR;\n\ntypedef struct _EVENT_FILTER_DESCRIPTOR\n{\n    ULONGLONG   Ptr;\n    ULONG       Size;\n    ULONG       Type;\n\n} EVENT_FILTER_DESCRIPTOR, *PEVENT_FILTER_DESCRIPTOR;\n\ntypedef VOID (NTAPI *PENABLECALLBACK)(LPCGUID,ULONG,UCHAR,ULONGLONG,ULONGLONG,PEVENT_FILTER_DESCRIPTOR,PVOID);\n\ntypedef enum _EVENT_INFO_CLASS\n{\n    EventProviderBinaryTrackInfo = 0,\n    EventProviderSetTraits,\n    EventProviderUseDescriptorType,\n    MaxEventInfo\n} EVENT_INFO_CLASS;\n\nBOOLEAN WINAPI EventEnabled(REGHANDLE, PCEVENT_DESCRIPTOR);\nBOOLEAN WINAPI EventProviderEnabled(REGHANDLE, UCHAR, ULONGLONG);\nULONG WINAPI EventRegister(LPCGUID,PENABLECALLBACK,PVOID,PREGHANDLE);\nULONG WINAPI EventSetInformation(REGHANDLE, EVENT_INFO_CLASS, PVOID, ULONG);\nULONG WINAPI EventUnregister(REGHANDLE);\nULONG WINAPI EventWrite(REGHANDLE,PCEVENT_DESCRIPTOR,ULONG,PEVENT_DATA_DESCRIPTOR);\nULONG WINAPI EventWriteTransfer(REGHANDLE,PCEVENT_DESCRIPTOR,LPCGUID,LPCGUID,ULONG,PEVENT_DATA_DESCRIPTOR);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _EVNTPROV_H_ */\n"
  },
  {
    "path": "wine/windows/evntrace.h",
    "content": "/*\n * Copyright (C) 2005 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _EVNTRACE_\n#define _EVNTRACE_\n\n#include <guiddef.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define EVENT_TRACE_CONTROL_QUERY     0\n#define EVENT_TRACE_CONTROL_STOP      1\n#define EVENT_TRACE_CONTROL_UPDATE    2\n#define EVENT_TRACE_CONTROL_FLUSH     3\n\n#define TRACE_LEVEL_NONE              0\n#define TRACE_LEVEL_CRITICAL          1\n#define TRACE_LEVEL_FATAL             1\n#define TRACE_LEVEL_ERROR             2\n#define TRACE_LEVEL_WARNING           3\n#define TRACE_LEVEL_INFORMATION       4\n#define TRACE_LEVEL_VERBOSE           5\n\n#define EVENT_TRACE_FILE_MODE_NONE             0x00000000\n#define EVENT_TRACE_FILE_MODE_SEQUENTIAL       0x00000001\n#define EVENT_TRACE_FILE_MODE_CIRCULAR         0x00000002\n#define EVENT_TRACE_FILE_MODE_APPEND           0x00000004\n#define EVENT_TRACE_FILE_MODE_NEWFILE          0x00000008\n#define EVENT_TRACE_FILE_MODE_PREALLOCATE      0x00000020\n#define EVENT_TRACE_NONSTOPPABLE_MODE          0x00000040\n#define EVENT_TRACE_SECURE_MODE                0x00000080\n#define EVENT_TRACE_REAL_TIME_MODE             0x00000100\n#define EVENT_TRACE_DELAY_OPEN_FILE_MODE       0x00000200\n#define EVENT_TRACE_BUFFERING_MODE             0x00000400\n#define EVENT_TRACE_PRIVATE_LOGGER_MODE        0x00000800\n#define EVENT_TRACE_ADD_HEADER_MODE            0x00001000\n#define EVENT_TRACE_USE_KBYTES_FOR_SIZE        0x00002000\n#define EVENT_TRACE_USE_GLOBAL_SEQUENCE        0x00004000\n#define EVENT_TRACE_USE_LOCAL_SEQUENCE         0x00008000\n#define EVENT_TRACE_RELOG_MODE                 0x00010000\n#define EVENT_TRACE_PRIVATE_IN_PROC            0x00020000\n#define EVENT_TRACE_MODE_RESERVED              0x00100000\n#define EVENT_TRACE_STOP_ON_HYBRID_SHUTDOWN    0x00400000\n#define EVENT_TRACE_PERSIST_ON_HYBRID_SHUTDOWN 0x00800000\n#define EVENT_TRACE_USE_PAGED_MEMORY           0x01000000\n#define EVENT_TRACE_SYSTEM_LOGGER_MODE         0x02000000\n#define EVENT_TRACE_INDEPENDENT_SESSION_MODE   0x08000000\n#define EVENT_TRACE_NO_PER_PROCESSOR_BUFFERING 0x10000000\n#define EVENT_TRACE_ADDTO_TRIAGE_DUMP          0x80000000\n\nDEFINE_GUID (SystemTraceControlGuid, 0x9e814aad, 0x3204, 0x11d2, 0x9a, 0x82, 0x00, 0x60, 0x08, 0xa8, 0x69, 0x39);\n\ntypedef ULONG64 TRACEHANDLE, *PTRACEHANDLE;\n\nstruct _EVENT_TRACE_LOGFILEA;\nstruct _EVENT_TRACE_LOGFILEW;\n\ntypedef struct _EVENT_TRACE_LOGFILEA EVENT_TRACE_LOGFILEA, *PEVENT_TRACE_LOGFILEA;\ntypedef struct _EVENT_TRACE_LOGFILEW EVENT_TRACE_LOGFILEW, *PEVENT_TRACE_LOGFILEW;\n\ntypedef ULONG (WINAPI * PEVENT_TRACE_BUFFER_CALLBACKA)( PEVENT_TRACE_LOGFILEA );\ntypedef ULONG (WINAPI * PEVENT_TRACE_BUFFER_CALLBACKW)( PEVENT_TRACE_LOGFILEW );\n\ntypedef ULONG (WINAPI * WMIDPREQUEST)( WMIDPREQUESTCODE, PVOID, ULONG*, PVOID );\n\ntypedef struct _TRACE_GUID_REGISTRATION\n{\n    LPCGUID Guid;\n    HANDLE RegHandle;\n} TRACE_GUID_REGISTRATION, *PTRACE_GUID_REGISTRATION;\n\ntypedef struct _TRACE_GUID_PROPERTIES {\n    GUID    Guid;\n    ULONG   GuidType;\n    ULONG   LoggerId;\n    ULONG   EnableLevel;\n    ULONG   EnableFlags;\n    BOOLEAN IsEnable;\n} TRACE_GUID_PROPERTIES, *PTRACE_GUID_PROPERTIES;\n\ntypedef struct _EVENT_TRACE_HEADER\n{\n    USHORT Size;\n    union\n    {\n        USHORT FieldTypeFlags;\n        struct\n        {\n            UCHAR HeaderType;\n            UCHAR MarkerFlags;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME;\n    union\n    {\n        ULONG Version;\n        struct\n        {\n            UCHAR Type;\n            UCHAR Level;\n            USHORT Version;\n        } Class;\n    } DUMMYUNIONNAME1;\n    ULONG ThreadId;\n    ULONG ProcessId;\n    LARGE_INTEGER TimeStamp;\n    union\n    {\n        GUID Guid;\n        ULONGLONG GuidPtr;\n    } DUMMYUNIONNAME2;\n    union\n    {\n        struct\n        {\n            ULONG ClientContext;\n            ULONG Flags;\n        } DUMMYSTRUCTNAME1;\n        struct\n        {\n            ULONG KernelTime;\n            ULONG UserTime;\n        } DUMMYSTRUCTNAME2;\n    } DUMMYUNIONNAME3;\n} EVENT_TRACE_HEADER, *PEVENT_TRACE_HEADER;\n\ntypedef struct _EVENT_TRACE\n{\n    EVENT_TRACE_HEADER Header;\n    ULONG InstanceId;\n    ULONG ParentInstanceId;\n    GUID ParentGuid;\n    PVOID MofData;\n    ULONG MofLength;\n    ULONG ClientContext;\n} EVENT_TRACE, *PEVENT_TRACE;\n\ntypedef VOID (WINAPI * PEVENT_CALLBACK)( PEVENT_TRACE );\n\ntypedef struct _TRACE_LOGFILE_HEADER\n{\n    ULONG BufferSize;\n    union\n    {\n        ULONG Version;\n        struct \n        {\n            UCHAR MajorVersion;\n            UCHAR MinorVersion;\n            UCHAR SubVersion;\n            UCHAR SubMinorVersion;\n        } VersionDetail;\n    } DUMMYUNIONNAME;\n    ULONG ProviderVersion;\n    ULONG NumberOfProcessors;\n    LARGE_INTEGER EndTime;\n    ULONG TimerResolution;\n    ULONG MaximumFileSize;\n    ULONG LogFileMode;\n    ULONG BuffersWritten;\n    union\n    {\n        GUID LogInstanceGuid;\n        struct\n        {\n            ULONG StartBuffers;\n            ULONG PointerSize;\n            ULONG EventsLost;\n            ULONG CpuSpeedInMHZ;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME1;\n    LPWSTR LoggerName;\n    LPWSTR LogFileName;\n    TIME_ZONE_INFORMATION TimeZone;\n    LARGE_INTEGER BootTime;\n    LARGE_INTEGER PerfFreq;\n    LARGE_INTEGER StartTime;\n    ULONG ReservedTime;\n    ULONG BuffersLost;\n} TRACE_LOGFILE_HEADER, *PTRACE_LOGFILE_HEADER;\n\nstruct _EVENT_TRACE_LOGFILEW\n{\n    LPWSTR LogFileName;\n    LPWSTR LoggerName;\n    LONGLONG CurrentTime;\n    ULONG LogFileMode;\n    EVENT_TRACE CurrentEvent;\n    TRACE_LOGFILE_HEADER LogfileHeader;\n    PEVENT_TRACE_BUFFER_CALLBACKW BufferCallback;\n    ULONG BufferSize;\n    ULONG Filled;\n    ULONG EventsLost;\n    PEVENT_CALLBACK EventCallback;\n    PVOID Context;\n};\n\nstruct _EVENT_TRACE_LOGFILEA\n{\n    LPSTR LogFileName;\n    LPSTR LoggerName;\n    LONGLONG CurrentTime;\n    ULONG LogFileMode;\n    EVENT_TRACE CurrentEvent;\n    TRACE_LOGFILE_HEADER LogfileHeader;\n    PEVENT_TRACE_BUFFER_CALLBACKA BufferCallback;\n    ULONG BufferSize;\n    ULONG Filled;\n    ULONG EventsLost;\n    PEVENT_CALLBACK EventCallback;\n    PVOID Context;\n};\n\ntypedef struct _EVENT_TRACE_PROPERTIES\n{\n    WNODE_HEADER Wnode;\n    ULONG BufferSize;\n    ULONG MinimumBuffers;\n    ULONG MaximumBuffers;\n    ULONG MaximumFileSize;\n    ULONG LogFileMode;\n    ULONG FlushTimer;\n    ULONG EnableFlags;\n    LONG AgeLimit;\n    ULONG NumberOfBuffers;\n    ULONG FreeBuffers;\n    ULONG EventsLost;\n    ULONG BuffersWritten;\n    ULONG LogBuffersLost;\n    ULONG RealTimeBuffersLost;\n    HANDLE LoggerThreadId;\n    ULONG LogFileNameOffset;\n    ULONG LoggerNameOffset;\n} EVENT_TRACE_PROPERTIES, *PEVENT_TRACE_PROPERTIES;\n\ntypedef struct _ENABLE_TRACE_PARAMETERS\n{\n    ULONG                            Version;\n    ULONG                            EnableProperty;\n    ULONG                            ControlFlags;\n    GUID                             SourceId;\n    struct _EVENT_FILTER_DESCRIPTOR *EnableFilterDesc;\n    ULONG                            FilterDescCount;\n} ENABLE_TRACE_PARAMETERS, *PENABLE_TRACE_PARAMETERS;\n\ntypedef enum _TRACE_QUERY_INFO_CLASS\n{\n    TraceGuidQueryList,\n    TraceGuidQueryInfo,\n    TraceGuidQueryProcess,\n    TraceStackTracingInfo,\n    TraceSystemTraceEnableFlagsInfo,\n    TraceSampledProfileIntervalInfo,\n    TraceProfileSourceConfigInfo,\n    TraceProfileSourceListInfo,\n    TracePmcEventListInfo,\n    TracePmcCounterListInfo,\n    TraceSetDisallowList,\n    TraceVersionInfo,\n    TraceGroupQueryList,\n    TraceGroupQueryInfo,\n    TraceDisallowListQuery,\n    TraceCompressionInfo,\n    TracePeriodicCaptureStateListInfo,\n    TracePeriodicCaptureStateInfo,\n    TraceProviderBinaryTracking,\n    TraceMaxLoggersQuery,\n    MaxTraceSetInfoClass\n} TRACE_QUERY_INFO_CLASS, TRACE_INFO_CLASS;\n\n#define INVALID_PROCESSTRACE_HANDLE ((TRACEHANDLE)~(ULONG_PTR)0)\n\nULONG WINAPI CloseTrace(TRACEHANDLE);\nULONG WINAPI ControlTraceA(TRACEHANDLE,LPCSTR,PEVENT_TRACE_PROPERTIES,ULONG);\nULONG WINAPI ControlTraceW(TRACEHANDLE,LPCWSTR,PEVENT_TRACE_PROPERTIES,ULONG);\n#define      ControlTrace WINELIB_NAME_AW(ControlTrace)\nULONG WINAPI EnableTrace(ULONG,ULONG,ULONG,LPCGUID,TRACEHANDLE);\nULONG WINAPI EnableTraceEx2(TRACEHANDLE,LPCGUID,ULONG,UCHAR,ULONGLONG,ULONGLONG,ULONG,PENABLE_TRACE_PARAMETERS);\nULONG WINAPI FlushTraceA(TRACEHANDLE,LPCSTR,PEVENT_TRACE_PROPERTIES);\nULONG WINAPI FlushTraceW(TRACEHANDLE,LPCWSTR,PEVENT_TRACE_PROPERTIES);\n#define      FlushTrace WINELIB_NAME_AW(FlushTrace)\nULONG WINAPI GetTraceEnableFlags(TRACEHANDLE);\nUCHAR WINAPI GetTraceEnableLevel(TRACEHANDLE);\nTRACEHANDLE WINAPI GetTraceLoggerHandle(PVOID);\nULONG WINAPI QueryAllTracesA(PEVENT_TRACE_PROPERTIES*,ULONG,PULONG);\nULONG WINAPI QueryAllTracesW(PEVENT_TRACE_PROPERTIES*,ULONG,PULONG);\n#define      QueryAllTraces WINELIB_NAME_AW(QueryAllTraces)\nULONG WINAPI RegisterTraceGuidsA(WMIDPREQUEST,PVOID,LPCGUID,ULONG,PTRACE_GUID_REGISTRATION,LPCSTR,LPCSTR,PTRACEHANDLE);\nULONG WINAPI RegisterTraceGuidsW(WMIDPREQUEST,PVOID,LPCGUID,ULONG,PTRACE_GUID_REGISTRATION,LPCWSTR,LPCWSTR,PTRACEHANDLE);\n#define      RegisterTraceGuids WINELIB_NAME_AW(RegisterTraceGuids)\nULONG WINAPI StartTraceA(PTRACEHANDLE,LPCSTR,PEVENT_TRACE_PROPERTIES);\nULONG WINAPI StartTraceW(PTRACEHANDLE,LPCWSTR,PEVENT_TRACE_PROPERTIES);\n#define      StartTrace WINELIB_NAME_AW(StartTrace)\nULONG WINAPI TraceEvent(TRACEHANDLE,PEVENT_TRACE_HEADER);\nULONG WINAPIV TraceMessage(TRACEHANDLE,ULONG,LPGUID,USHORT,...);\nULONG WINAPI TraceMessageVa(TRACEHANDLE,ULONG,LPGUID,USHORT,__ms_va_list);\nULONG WINAPI UnregisterTraceGuids(TRACEHANDLE);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _EVNTRACE_ */\n"
  },
  {
    "path": "wine/windows/evr.idl",
    "content": "/*\n * COM Classes for evr\n *\n * Copyright 2017 Fabian Maurer\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\nimport \"propidl.idl\";\nimport \"mfidl.idl\";\nimport \"mftransform.idl\";\nimport \"mediaobj.idl\";\nimport \"strmif.idl\";\n\ntypedef enum _MFVP_MESSAGE_TYPE {\n    MFVP_MESSAGE_FLUSH,\n    MFVP_MESSAGE_INVALIDATEMEDIATYPE,\n    MFVP_MESSAGE_PROCESSINPUTNOTIFY,\n    MFVP_MESSAGE_BEGINSTREAMING,\n    MFVP_MESSAGE_ENDSTREAMING,\n    MFVP_MESSAGE_ENDOFSTREAM,\n    MFVP_MESSAGE_STEP,\n    MFVP_MESSAGE_CANCELSTEP,\n} MFVP_MESSAGE_TYPE;\n\n[\n    object,\n    uuid(29aff080-182a-4a5d-af3b-448f3a6346cb),\n    local\n]\ninterface IMFVideoPresenter : IMFClockStateSink\n{\n    HRESULT ProcessMessage(\n        [in] MFVP_MESSAGE_TYPE eMessage,\n        [in] ULONG_PTR ulParam\n    );\n    HRESULT GetCurrentMediaType(\n        [out] IMFVideoMediaType **ppMediaType\n    );\n}\n\n[\n    object,\n    uuid(83e91e85-82c1-4ea7-801d-85dc50b75086),\n    local\n]\ninterface IEVRFilterConfig : IUnknown\n{\n    HRESULT SetNumberOfStreams(\n        [in] DWORD dwMaxStreams\n    );\n    HRESULT GetNumberOfStreams(\n        [out] DWORD *pdwMaxStreams\n    );\n}\n\n[\n    object,\n    uuid(1f6a9f17-e70b-4e24-8ae4-0b2c3ba7a4ae),\n    local\n]\ninterface IMFVideoPositionMapper : IUnknown\n{\n    HRESULT MapOutputCoordinateToInputStream(\n        [in] float xOut,\n        [in] float yOut,\n        [in] DWORD dwOutputStreamIndex,\n        [in] DWORD dwInputStreamIndex,\n        [out] float *pxIn,\n        [out] float *pyIn\n    );\n}\n\n[\n    object,\n    uuid(dfdfd197-a9ca-43d8-b341-6af3503792cd),\n    local\n]\ninterface IMFVideoRenderer : IUnknown\n{\n    HRESULT InitializeRenderer(\n        [in] IMFTransform *pVideoMixer,\n        [in] IMFVideoPresenter *pVideoPresenter\n    );\n}\n"
  },
  {
    "path": "wine/windows/excpt.h",
    "content": "/*\n * Copyright (C) 2002 Peter Hunnisett\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_EXCPT_H\n#define __WINE_EXCPT_H\n\n/*\n * Return values from the actual exception handlers\n */\ntypedef enum _EXCEPTION_DISPOSITION\n{\n  ExceptionContinueExecution,\n  ExceptionContinueSearch,\n  ExceptionNestedException,\n  ExceptionCollidedUnwind\n} EXCEPTION_DISPOSITION;\n\n/*\n * Return values from filters in except() and from UnhandledExceptionFilter\n */\n#define EXCEPTION_EXECUTE_HANDLER        1\n#define EXCEPTION_CONTINUE_SEARCH        0\n#define EXCEPTION_CONTINUE_EXECUTION    -1\n\n\n#if defined(_MSC_VER) && defined(USE_COMPILER_EXCEPTIONS)\n#define GetExceptionCode    _exception_code\n#define GetExceptionInformation (struct _EXCEPTION_POINTERS *)_exception_info\n#define AbnormalTermination _abnormal_termination\n\nunsigned long __cdecl _exception_code(void);\nvoid * __cdecl _exception_info(void);\nint __cdecl _abnormal_termination(void);\n#endif /* defined(_MSC_VER) && defined(USE_COMPILER_EXCEPTIONS) */\n\n#endif /* __WINE_EXCPT_H */\n"
  },
  {
    "path": "wine/windows/exdisp.idl",
    "content": "/*\n * Defines the COM interfaces and APIs related to the IE Web browser\n *\n * Copyright (C) 2001 John R. Sheets (for CodeWeavers)\n * Copyright (C) 2003 Alexandre Julliard\n * Copyright (C) 2004 Jacek Caban\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"ocidl.idl\";\nimport \"docobj.idl\";\n\n#include <olectl.h>\n#include <exdispid.h>\n\n#ifndef __WIDL__\n#define threading(model)\n#define progid(str)\n#define vi_progid(str)\n#endif\n\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef FindText\")\ncpp_quote(\"#endif\")\n\n/*****************************************************************************\n * SHDocVw library\n */\n[\n    uuid(EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B),\n    version(1.1),\n    helpstring(\"Microsoft Internet Controls\")\n]\nlibrary SHDocVw\n{\n\nimportlib(\"stdole2.tlb\");\n\n\n/*****************************************************************************\n * IWebBrowser interface\n */\n[\n    object,\n    oleautomation,\n    uuid(eab22ac1-30c1-11cf-a7eb-0000c05bae0b),\n    hidden,\n    dual\n]\ninterface IWebBrowser : IDispatch\n{\n    typedef enum BrowserNavConstants\n    {\n        navOpenInNewWindow          = 0x00000001,\n        navNoHistory                = 0x00000002,\n        navNoReadFromCache          = 0x00000004,\n        navNoWriteToCache           = 0x00000008,\n        navAllowAutosearch          = 0x00000010,\n        navBrowserBar               = 0x00000020,\n        navHyperlink                = 0x00000040,\n        navEnforceRestricted        = 0x00000080,\n        navNewWindowsManaged        = 0x00000100,\n        navUntrustedForDownload     = 0x00000200,\n        navTrustedForActiveX        = 0x00000400,\n        navOpenInNewTab             = 0x00000800,\n        navOpenInBackgroundTab      = 0x00001000,\n        navKeepWordWheelText        = 0x00002000,\n        navVirtualTab               = 0x00004000,\n        navBlockRedirectsXDomain    = 0x00008000,\n        navOpenNewForegroundTab     = 0x00010000,\n        navTravelLogScreenshot      = 0x00020000,\n        navDeferUnload              = 0x00040000,\n        navSpeculative              = 0x00080000,\n        navSuggestNewWindow         = 0x00100000,\n        navSuggestNewTab            = 0x00200000,\n        navReserved1                = 0x00400000,\n        navHomepageNavigate         = 0x00800000,\n        navRefresh                  = 0x01000000,\n        navHostNavigation           = 0x02000000,\n        navReserved2                = 0x04000000,\n        navReserved3                = 0x08000000,\n        navReserved4                = 0x10000000,\n    } BrowserNavConstants;\n\n    typedef enum RefreshConstants\n    {\n        REFRESH_NORMAL     = 0,\n        REFRESH_IFEXPIRED  = 1,\n        REFRESH_COMPLETELY = 3\n    } RefreshConstants;\n\n    [id(100)] HRESULT GoBack();\n    [id(101)] HRESULT GoForward();\n    [id(102)] HRESULT GoHome();\n    [id(103)] HRESULT GoSearch();\n\n    [id(104)]\n    HRESULT Navigate(\n        [in] BSTR URL,\n        [in, optional] VARIANT *Flags,\n        [in, optional] VARIANT *TargetFrameName,\n        [in, optional] VARIANT *PostData,\n        [in, optional] VARIANT *Headers);\n\n    [id(DISPID_REFRESH)] HRESULT Refresh();\n    [id(105)] HRESULT Refresh2([in, optional] VARIANT *Level);\n    [id(106)] HRESULT Stop();\n    [id(200), propget] HRESULT Application([out, retval] IDispatch** ppDisp);\n    [id(201), propget] HRESULT Parent([out, retval] IDispatch** ppDisp);\n    [id(202), propget] HRESULT Container([out, retval] IDispatch** ppDisp);\n    [id(203), propget] HRESULT Document([out, retval] IDispatch** ppDisp);\n    [id(204), propget] HRESULT TopLevelContainer([out, retval] VARIANT_BOOL* pBool);\n    [id(205), propget] HRESULT Type([out, retval] BSTR* Type);\n    [id(206), propget] HRESULT Left([out, retval] long *pl);\n    [id(206), propput] HRESULT Left([in] long Left);\n    [id(207), propget] HRESULT Top([out, retval] long *pl);\n    [id(207), propput] HRESULT Top([in] long Top);\n    [id(208), propget] HRESULT Width([out, retval] long *pl);\n    [id(208), propput] HRESULT Width([in] long Width);\n    [id(209), propget] HRESULT Height([out, retval] long *pl);\n    [id(209), propput] HRESULT Height([in] long Height);\n    [id(210), propget] HRESULT LocationName([out, retval] BSTR *LocationName);\n    [id(211), propget] HRESULT LocationURL([out, retval] BSTR *LocationURL);\n    [id(212), propget] HRESULT Busy([out, retval] VARIANT_BOOL *pBool);\n}\n\n/*****************************************************************************\n * DWebBrowserEvents dispinterface\n */\n[\n    uuid(eab22ac2-30c1-11CF-a7eb-0000C05bae0b),\n    hidden\n]\ndispinterface DWebBrowserEvents\n{\n    properties:\n    methods:\n    [id(DISPID_BEFORENAVIGATE)]\n    void BeforeNavigate(\n        [in] BSTR URL,\n        long Flags,\n        BSTR TargetFrameName,\n        VARIANT *PostData,\n        BSTR Headers,\n        [in, out] VARIANT_BOOL *Cancel);\n\n    [id(DISPID_NAVIGATECOMPLETE)]\n    void NavigateComplete([in] BSTR URL);\n\n    [id(DISPID_STATUSTEXTCHANGE)]\n    void StatusTextChange([in] BSTR Text);\n\n    [id(DISPID_PROGRESSCHANGE)]\n    void ProgressChange([in] long Progress, [in] long ProgressMax);\n\n    [id(DISPID_DOWNLOADCOMPLETE)]\n    void DownloadComplete();\n\n    [id(DISPID_COMMANDSTATECHANGE)]\n    void CommandStateChange([in] long Command, [in]VARIANT_BOOL Enable);\n\n    [id(DISPID_DOWNLOADBEGIN)]\n    void DownloadBegin();\n\n    [id(DISPID_NEWWINDOW)]\n    void NewWindow(\n        [in] BSTR URL,\n        [in] long Flags,\n        [in] BSTR TargetFrameName,\n        [in] VARIANT *PostData,\n        [in] BSTR Headers,\n        [in,out] VARIANT_BOOL *Processed);\n\n    [id(DISPID_TITLECHANGE)]\n    void TitleChange([in] BSTR Text);\n\n    [id(DISPID_FRAMEBEFORENAVIGATE)]\n    void FrameBeforeNavigate(\n        [in] BSTR URL,\n        long Flags,\n        BSTR TargetFrameName,\n        VARIANT *PostData,\n        BSTR Headers,\n        [in, out]VARIANT_BOOL *Cancel);\n\n    [id(DISPID_FRAMENAVIGATECOMPLETE)]\n    void FrameNavigateComplete([in] BSTR URL);\n\n    [id(DISPID_FRAMENEWWINDOW)]\n    void FrameNewWindow(\n        [in] BSTR URL,\n        [in] long Flags,\n        [in] BSTR TargetFrameName,\n        [in] VARIANT *PostData,\n        [in] BSTR Headers,\n        [in,out] VARIANT_BOOL *Processed);\n\n    [id(DISPID_QUIT)]\n    void Quit([in, out] VARIANT_BOOL *Cancel);\n\n    [id(DISPID_WINDOWMOVE)]\n    void WindowMove();\n\n    [id(DISPID_WINDOWRESIZE)]\n    void WindowResize();\n\n    [id(DISPID_WINDOWACTIVATE)]\n    void WindowActivate();\n\n    [id(DISPID_PROPERTYCHANGE)]\n    void PropertyChange([in] BSTR Property);\n}\n\ntypedef\n[\n    uuid(34a226e0-df30-11cf-89a9-00a0c9054129)\n]\nenum CommandStateChangeConstants {\n    CSC_UPDATECOMMANDS  = -1,\n    CSC_NAVIGATEFORWARD = 1,\n    CSC_NAVIGATEBACK    = 2\n} CommandStateChangeConstants;\n\n/*****************************************************************************\n * IWebBrowserApp interface\n */\n[\n    object,\n    oleautomation,\n    uuid(0002df05-0000-0000-c000-000000000046),\n    hidden,\n    dual\n]\ninterface IWebBrowserApp : IWebBrowser\n{\n    [id(300)] HRESULT Quit();\n    [id(301)] HRESULT ClientToWindow([in,out] int* pcx, [in,out] int* pcy);\n    [id(302)] HRESULT PutProperty([in] BSTR Property, [in] VARIANT vtValue);\n    [id(303)] HRESULT GetProperty([in] BSTR Property, [out, retval] VARIANT *pvtValue);\n    [id(DISPID_VALUE), propget] HRESULT Name([out, retval] BSTR* Name);\n    [id(DISPID_HWND), propget] HRESULT HWND([out, retval] SHANDLE_PTR *pHWND);\n    [id(400), propget] HRESULT FullName([out, retval] BSTR* FullName);\n    [id(401), propget] HRESULT Path([out, retval] BSTR* Path);\n    [id(402), propget] HRESULT Visible([out, retval] VARIANT_BOOL* pBool);\n    [id(402), propput] HRESULT Visible([in] VARIANT_BOOL Value);\n    [id(403), propget] HRESULT StatusBar([out, retval] VARIANT_BOOL* pBool);\n    [id(403), propput] HRESULT StatusBar([in] VARIANT_BOOL Value);\n    [id(404), propget] HRESULT StatusText([out, retval] BSTR *StatusText);\n    [id(404), propput] HRESULT StatusText([in] BSTR StatusText);\n    [id(405), propget] HRESULT ToolBar([out, retval] int * Value);\n    [id(405), propput] HRESULT ToolBar([in] int Value);\n    [id(406), propget] HRESULT MenuBar([out, retval] VARIANT_BOOL *Value);\n    [id(406), propput] HRESULT MenuBar([in] VARIANT_BOOL Value);\n    [id(407), propget] HRESULT FullScreen([out, retval] VARIANT_BOOL *pbFullScreen);\n    [id(407), propput] HRESULT FullScreen([in] VARIANT_BOOL bFullScreen);\n}\n\n/*****************************************************************************\n * IWebBrowser2 interface\n */\n[\n    object,\n    oleautomation,\n    uuid(d30c1661-cdaf-11d0-8a3e-00c04fc9e26e),\n    hidden,\n    dual\n]\ninterface IWebBrowser2 : IWebBrowserApp\n{\n    [id(500)] HRESULT Navigate2(\n        [in] VARIANT *URL,\n        [in, optional] VARIANT *Flags,\n        [in, optional] VARIANT *TargetFrameName,\n        [in, optional] VARIANT *PostData,\n        [in, optional] VARIANT *Headers);\n\n    [id(501)] HRESULT QueryStatusWB(\n        [in] OLECMDID cmdID,\n        [out, retval] OLECMDF *pcmdf);\n\n    [id(502)] HRESULT ExecWB(\n        [in] OLECMDID cmdID,\n        [in] OLECMDEXECOPT cmdexecopt,\n        [in, optional] VARIANT *pvaIn,\n        [out, in, optional] VARIANT *pvaOut);\n\n    [id(503)] HRESULT ShowBrowserBar(\n        [in] VARIANT *pvaClsid,\n        [in, optional] VARIANT *pvarShow,\n        [in, optional] VARIANT *pvarSize);\n\n    [id(DISPID_READYSTATE), propget, bindable]\n    HRESULT ReadyState([out, retval] READYSTATE *plReadyState);\n\n    [id(550), propget] HRESULT Offline([out, retval] VARIANT_BOOL *pbOffline);\n    [id(550), propput] HRESULT Offline([in] VARIANT_BOOL bOffline);\n    [id(551), propget] HRESULT Silent([out, retval] VARIANT_BOOL *pbSilent);\n    [id(551), propput] HRESULT Silent([in] VARIANT_BOOL bSilent);\n    [id(552), propget] HRESULT RegisterAsBrowser([out, retval] VARIANT_BOOL *pbRegister);\n    [id(552), propput] HRESULT RegisterAsBrowser([in] VARIANT_BOOL bRegister);\n    [id(553), propget] HRESULT RegisterAsDropTarget([out, retval] VARIANT_BOOL *pbRegister);\n    [id(553), propput] HRESULT RegisterAsDropTarget([in] VARIANT_BOOL bRegister);\n    [id(554), propget] HRESULT TheaterMode([out, retval] VARIANT_BOOL *pbRegister);\n    [id(554), propput] HRESULT TheaterMode([in] VARIANT_BOOL bRegister);\n    [id(555), propget] HRESULT AddressBar([out, retval] VARIANT_BOOL *Value);\n    [id(555), propput] HRESULT AddressBar([in] VARIANT_BOOL Value);\n    [id(556), propget] HRESULT Resizable([out, retval] VARIANT_BOOL *Value);\n    [id(556), propput] HRESULT Resizable([in] VARIANT_BOOL Value);\n}\n\ntypedef\n[\n    uuid(65507be0-91a8-11d3-a845-009027220e6d)\n]\nenum SecureLockIconConstants {\n    secureLockIconUnsecure          = 0,\n    secureLockIconMixed             = 1,\n    secureLockIconSecureUnknownBits = 2,\n    secureLockIconSecure40Bit       = 3,\n    secureLockIconSecure56Bit       = 4,\n    secureLockIconSecureFortezza    = 5,\n    secureLockIconSecure128Bit      = 6\n} SecureLockIconConstants;\n\n/*****************************************************************************\n * DWebBrowserEvents2 dispinterface\n */\n[\n    uuid(34a715a0-6587-11d0-924a-0020afc7ac4d),\n    hidden\n]\ndispinterface DWebBrowserEvents2\n{\n    properties:\n    methods:\n    [id(DISPID_STATUSTEXTCHANGE)]\n    void StatusTextChange([in] BSTR Text);\n\n    [id(DISPID_PROGRESSCHANGE)]\n    void ProgressChange([in] long Progress, [in] long ProgressMax);\n\n    [id(DISPID_COMMANDSTATECHANGE)]\n    void CommandStateChange([in] long Command, [in] VARIANT_BOOL Enable);\n\n    [id(DISPID_DOWNLOADBEGIN)]\n    void DownloadBegin();\n\n    [id(DISPID_DOWNLOADCOMPLETE)]\n    void DownloadComplete();\n\n    [id(DISPID_TITLECHANGE)]\n    void TitleChange([in] BSTR Text);\n\n    [id(DISPID_PROPERTYCHANGE)]\n    void PropertyChange([in] BSTR szProperty);\n\n    [id(DISPID_BEFORENAVIGATE2)]\n    void BeforeNavigate2(\n        [in] IDispatch *pDisp,\n        [in] VARIANT *URL,\n        [in] VARIANT *Flags,\n        [in] VARIANT *TargetFrameName,\n        [in] VARIANT *PostData,\n        [in] VARIANT *Headers,\n        [in, out] VARIANT_BOOL *Cancel);\n\n    [id(DISPID_NEWWINDOW2)]\n    void NewWindow2([in, out] IDispatch **ppDisp, [in, out] VARIANT_BOOL *Cancel);\n\n    [id(DISPID_NAVIGATECOMPLETE2)]\n    void NavigateComplete2([in] IDispatch *pDisp, [in] VARIANT *URL);\n\n    [id(DISPID_DOCUMENTCOMPLETE)]\n    void DocumentComplete([in] IDispatch *pDisp, [in] VARIANT *URL);\n\n    [id(DISPID_ONQUIT)]\n    void OnQuit();\n\n    [id(DISPID_ONVISIBLE)]\n    void OnVisible([in] VARIANT_BOOL Visible);\n\n    [id(DISPID_ONTOOLBAR)]\n    void OnToolBar([in] VARIANT_BOOL ToolBar);\n\n    [id(DISPID_ONMENUBAR)]\n    void OnMenuBar([in] VARIANT_BOOL MenuBar);\n\n    [id(DISPID_ONSTATUSBAR)]\n    void OnStatusBar([in] VARIANT_BOOL StatusBar);\n\n    [id(DISPID_ONFULLSCREEN)]\n    void OnFullScreen([in] VARIANT_BOOL FullScreen);\n\n    [id(DISPID_ONTHEATERMODE)]\n    void OnTheaterMode([in] VARIANT_BOOL TheaterMode);\n\n    [id(DISPID_WINDOWSETRESIZABLE)]\n    void WindowSetResizable([in] VARIANT_BOOL Resizable);\n\n    [id(DISPID_WINDOWSETLEFT)]\n    void WindowSetLeft([in] long Left);\n\n    [id(DISPID_WINDOWSETTOP)]\n    void WindowSetTop([in] long Top);\n\n    [id(DISPID_WINDOWSETWIDTH)]\n    void WindowSetWidth([in] long Width);\n\n    [id(DISPID_WINDOWSETHEIGHT)]\n    void WindowSetHeight([in] long Height);\n\n    [id(DISPID_WINDOWCLOSING)]\n    void WindowClosing(\n            [in] VARIANT_BOOL IsChildWindow,\n            [in, out] VARIANT_BOOL *Cancel);\n\n    [id(DISPID_CLIENTTOHOSTWINDOW)]\n    void ClientToHostWindow(\n            [in, out] long *CX,\n            [in, out] long *CY);\n\n    [id(DISPID_SETSECURELOCKICON)]\n    void SetSecureLockIcon([in] long SecureLockIcon);\n\n    [id(DISPID_FILEDOWNLOAD)]\n    void FileDownload(\n            [in] VARIANT_BOOL ActiveDocument,\n            [in, out] VARIANT_BOOL *Cancel);\n\n    [id(DISPID_NAVIGATEERROR)]\n    void NavigateError(\n            [in] IDispatch *pDisp,\n            [in] VARIANT *URL,\n            [in] VARIANT *Frame,\n            [in] VARIANT *StatusCode,\n            [in, out] VARIANT_BOOL *Cancel);\n\n    [id(DISPID_PRINTTEMPLATEINSTANTIATION)]\n    void PrintTemplateInstantiation([in] IDispatch *pDisp);\n\n    [id(DISPID_PRINTTEMPLATETEARDOWN)]\n    void PrintTemplateTeardown([in] IDispatch *pDisp);\n\n    [id(DISPID_UPDATEPAGESTATUS)]\n    void UpdatePageStatus(\n            [in] IDispatch *pDisp,\n            [in] VARIANT *nPage,\n            [in] VARIANT *fDone);\n\n    [id(DISPID_PRIVACYIMPACTEDSTATECHANGE)]\n    void PrivacyImpactedStateChange([in] VARIANT_BOOL bImpacted);\n\n    [id(DISPID_NEWWINDOW3)]\n    void NewWindow3(\n            [in, out] IDispatch **ppDisp,\n            [in, out] VARIANT_BOOL *Cancel,\n            [in] DWORD dwFlags,\n            [in] BSTR bstrUrlContext,\n            [in] BSTR bstrUrl);\n\n    [id(DISPID_SETPHISHINGFILTERSTATUS)]\n    void SetPhishingFilterStatus([in] long PhishingFilterStatus);\n\n    [id(DISPID_WINDOWSTATECHANGED)]\n    void WindowStateChanged(\n            [in] DWORD dwWindowStateFlags,\n            [in] DWORD dwValidFlagsMask);\n\n    [id(DISPID_NEWPROCESS)]\n    void NewProcess(\n            [in] long lCauseFlag,\n            [in] IDispatch *pWB2,\n            [in, out] VARIANT_BOOL *Cancel);\n\n    [id(DISPID_THIRDPARTYURLBLOCKED)]\n    void ThirdPartyUrlBlocked(\n            [in] VARIANT *URL,\n            [in] DWORD dwCount);\n\n    [id(DISPID_REDIRECTXDOMAINBLOCKED)]\n    void RedirectXDomainBlocked(\n            [in] IDispatch *pDisp,\n            [in] VARIANT *StartURL,\n            [in] VARIANT *RedirectURL,\n            [in] VARIANT *Frame,\n            [in] VARIANT *StatusCode);\n\n    [id(DISPID_BEFORESCRIPTEXECUTE)]\n    void BeforeScriptExecute([in] IDispatch *pDispWindow);\n\n    [id(DISPID_WEBWORKERSTARTED)]\n    void WebWorkerStarted(\n            [in] DWORD dwUniqueID,\n            [in] BSTR bstrWorkerLabel);\n\n    [id(DISPID_WEBWORKERFINISHED)]\n    void WebWorkerFinished([in] DWORD dwUniqueID);\n}\n\n[\n    helpstring(\"Microsoft Web Browser Version 1\"),\n    threading(apartment),\n    progid(\"Shell.Explorer.1\"),\n    vi_progid(\"Shell.Explorer\"),\n    uuid(eab22ac3-30c1-11cf-a7eb-0000c05bae0b),\n    control\n]\ncoclass WebBrowser_V1\n{\n    interface IWebBrowser2;\n    [default] interface IWebBrowser;\n    [source] dispinterface DWebBrowserEvents2;\n    [default, source] dispinterface DWebBrowserEvents;\n}\n\n[\n    helpstring(\"Microsoft Web Browser\"),\n    threading(apartment),\n    progid(\"Shell.Explorer.2\"),\n    vi_progid(\"Shell.Explorer\"),\n    uuid(8856f961-340a-11d0-a96b-00c04fd705a2),\n    control\n]\ncoclass WebBrowser\n{\n    [default] interface IWebBrowser2;\n    interface IWebBrowser;\n    [default, source] dispinterface DWebBrowserEvents2;\n    [source] dispinterface DWebBrowserEvents;\n}\n\n[\n    helpstring(\"Internet Explorer(Ver 1.0)\"),\n    progid(\"InternetExplorer.Application.1\"),\n    vi_progid(\"InternetExplorer.Application\"),\n    uuid(0002df01-0000-0000-c000-000000000046)\n]\ncoclass InternetExplorer\n{\n    [default] interface IWebBrowser2;\n              interface IWebBrowserApp;\n    [default, source] dispinterface DWebBrowserEvents2;\n    [source]          dispinterface DWebBrowserEvents;\n}\n\n[\n    uuid(C08AFD90-F2A1-11D1-8455-00A0C91F3880),\n    hidden\n]\ncoclass ShellBrowserWindow\n{\n    [default] interface IWebBrowser2;\n    interface IWebBrowserApp;\n    [default, source] dispinterface DWebBrowserEvents2;\n    [source] dispinterface DWebBrowserEvents;\n}\n\ntypedef\n[\n    uuid(f41e6981-28e5-11d0-82b4-00a0c90c29c5)\n]\nenum ShellWindowTypeConstants {\n    SWC_EXPLORER = 0,\n    SWC_BROWSER  = 1,\n    SWC_3RDPARTY = 2,\n    SWC_CALLBACK = 4,\n    SWC_DESKTOP  = 8\n} ShellWindowTypeConstants;\n\ntypedef\n[\n    uuid(7716a370-38Ca-11d0-a48B-00a0c90a8f39)\n]\nenum ShellWindowFindWindowOptions {\n    SWFO_NEEDDISPATCH   = 1,\n    SWFO_INCLUDEPENDING = 2,\n    SWFO_COOKIEPASSED   = 4\n} ShellWindowFindWindowOptions;\n\n[\n    uuid(FE4106E0-399A-11D0-A48C-00A0C90A8F39)\n]\ndispinterface DShellWindowsEvents {\n    properties:\n    methods:\n    [id(DISPID_WINDOWREGISTERED)]\n    void WindowRegistered([in] long lCookie);\n\n    [id(DISPID_WINDOWREVOKED)]\n    void WindowRevoked([in] long lCookie);\n}\n\n[\n    object,\n    oleautomation,\n    uuid(85cb6900-4d95-11cf-960c-0080c7f4ee85),\n    dual\n]\ninterface IShellWindows : IDispatch\n{\n    [propget] HRESULT Count([out, retval] long *Count);\n\n    [id(DISPID_VALUE)]\n    HRESULT Item(\n            [in, optional] VARIANT index,\n            [out, retval] IDispatch **Folder);\n\n    [id(DISPID_NEWENUM)]\n    HRESULT _NewEnum([out, retval] IUnknown **ppunk);\n\n    [hidden] HRESULT Register(\n            [in] IDispatch *pid,\n            [in] long hWnd,\n            [in] int swClass,\n            [out] long *plCookie);\n\n    [hidden] HRESULT RegisterPending(\n            [in] long lThreadId,\n            [in] VARIANT *pvarloc,\n            [in] VARIANT *pvarlocRoot,\n            [in] int swClass,\n            [out] long *plCookie);\n\n    [hidden] HRESULT Revoke([in] long lCookie);\n    [hidden] HRESULT OnNavigate([in] long lCookie, [in] VARIANT *pvarLoc);\n    [hidden] HRESULT OnActivated([in] long lCookie, [in] VARIANT_BOOL fActive);\n    [hidden] HRESULT FindWindowSW(\n            [in] VARIANT *pvarLoc,\n            [in] VARIANT *pvarLocRoot,\n            [in] int swClass,\n            [out] long *phwnd,\n            [in] int swfwOptions,\n            [out, retval] IDispatch **ppdispOut);\n\n    [hidden] HRESULT OnCreated([in] long lCookie, [in] IUnknown *punk);\n    [hidden] HRESULT ProcessAttachDetach([in] VARIANT_BOOL fAttach);\n}\n\n[\n    threading(apartment),\n    uuid(9ba05972-f6a8-11cf-a442-00a0c90a8f39)\n]\ncoclass ShellWindows\n{\n    [default] interface IShellWindows;\n    [default, source] dispinterface DShellWindowsEvents;\n}\n\n[\n    odl,\n    uuid(729fe2f8-1ea8-11d1-8f85-00C04fc2fbe1),\n    dual,\n    oleautomation\n]\ninterface IShellUIHelper : IDispatch {\n    [id(1), hidden] HRESULT ResetFirstBootMode();\n    [id(2), hidden] HRESULT ResetSafeMode();\n    [id(3), hidden] HRESULT RefreshOfflineDesktop();\n\n    [id(4)] HRESULT AddFavorite(\n            [in] BSTR URL,\n            [in, optional] VARIANT* Title);\n\n    [id(5)] HRESULT AddChannel([in] BSTR URL);\n\n    [id(6)] HRESULT AddDesktopComponent(\n            [in] BSTR URL,\n            [in] BSTR Type,\n            [in, optional] VARIANT *Left,\n            [in, optional] VARIANT *Top,\n            [in, optional] VARIANT *Width,\n            [in, optional] VARIANT *Height);\n\n    [id(7)] HRESULT IsSubscribed(\n            [in] BSTR URL,\n            [out, retval] VARIANT_BOOL *pBool);\n\n    [id(8)] HRESULT NavigateAndFind(\n            [in] BSTR URL,\n            [in] BSTR strQuery,\n            [in] VARIANT *varTargetFrame);\n\n    [id(9)] HRESULT ImportExportFavorites(\n            [in] VARIANT_BOOL fImport,\n            [in] BSTR strImpExpPath);\n\n    [id(10)] HRESULT AutoCompleteSaveForm([in, optional] VARIANT *Form);\n\n    [id(11)] HRESULT AutoScan(\n            [in] BSTR strSearch,\n            [in] BSTR strFailureUrl,\n            [in, optional] VARIANT *pvarTargetFrame);\n\n    [id(12), hidden] HRESULT AutoCompleteAttach([in, optional] VARIANT *Reserved);\n\n    [id(13)] HRESULT ShowBrowserUI(\n            [in] BSTR bstrName,\n            [in] VARIANT *pvarIn,\n            [out, retval] VARIANT *pvarOut);\n}\n\n[\n    uuid(a7fe6eda-1932-4281-b881-87b31b8bc52c),\n    oleautomation,\n    dual\n]\ninterface IShellUIHelper2 : IShellUIHelper {\n    [id(DISPID_ADDSEARCHPROVIDER)]\n    HRESULT AddSearchProvider([in] BSTR URL);\n\n    [id(DISPID_RUNONCESHOWN)]\n    HRESULT RunOnceShown();\n\n    [id(DISPID_SKIPRUNONCE)]\n    HRESULT SkipRunOnce();\n\n    [id(DISPID_CUSTOMIZESETTINGS)] HRESULT CustomizeSettings(\n        [in] VARIANT_BOOL fSQM,\n        [in] VARIANT_BOOL fPhishing,\n        [in] BSTR bstrLocale);\n\n    [id(DISPID_SQMENABLED)]\n    HRESULT SqmEnabled([out, retval] VARIANT_BOOL *pfEnabled);\n\n    [id(DISPID_PHISHINGENABLED)]\n    HRESULT PhishingEnabled([out, retval] VARIANT_BOOL *pfEnabled);\n\n    [id(DISPID_BRANDIMAGEURI)]\n    HRESULT BrandImageUri([out, retval] BSTR *pbstrUri);\n\n    [id(DISPID_SKIPTABSWELCOME)]\n    HRESULT SkipTabsWelcome();\n\n    [id(DISPID_DIAGNOSECONNECTION)]\n    HRESULT DiagnoseConnection();\n\n    [id(DISPID_CUSTOMIZECLEARTYPE)]\n    HRESULT CustomizeClearType([in] VARIANT_BOOL fSet);\n\n    [id(DISPID_ISSEARCHPROVIDERINSTALLED)]\n    HRESULT IsSearchProviderInstalled(\n        [in] BSTR URL,\n        [out, retval] DWORD *pdwResult);\n\n    [id(DISPID_ISSEARCHMIGRATED)]\n    HRESULT IsSearchMigrated([out, retval] VARIANT_BOOL *pfMigrated);\n\n    [id(DISPID_DEFAULTSEARCHPROVIDER)]\n    HRESULT DefaultSearchProvider([out, retval] BSTR *pbstrName);\n\n    [id(DISPID_RUNONCEREQUIREDSETTINGSCOMPLETE)]\n    HRESULT RunOnceRequiredSettingsComplete([in] VARIANT_BOOL fComplete);\n\n    [id(DISPID_RUNONCEHASSHOWN)]\n    HRESULT RunOnceHasShown([out, retval] VARIANT_BOOL *pfShown);\n\n    [id(DISPID_SEARCHGUIDEURL)]\n    HRESULT SearchGuideUrl([out, retval] BSTR *pbstrUrl);\n}\n\n[\n    helpstring(\"Microsoft Shell UI Helper\"),\n    threading(apartment),\n    progid(\"Shell.UIHelper.1\"),\n    vi_progid(\"Shell.UIHelper\"),\n    uuid(64ab4bb7-111e-11d1-8f79-00c04fc2fbe1)\n]\ncoclass ShellUIHelper {\n    [default] interface IShellUIHelper2;\n}\n\n[\n    uuid(55136806-b2de-11d1-b9f2-00a0c98bc547)\n]\ndispinterface DShellNameSpaceEvents {\n    properties:\n    methods:\n    [id(1)] void FavoritesSelectionChange(\n            [in] long cItems,\n            [in] long hItem,\n            [in] BSTR strName,\n            [in] BSTR strUrl,\n            [in] long cVisits,\n            [in] BSTR strDate,\n            [in] long fAvailableOffline);\n\n    [id(2)] void SelectionChange();\n    [id(3)] void DoubleClick();\n    [id(4)] void Initialized();\n}\n\n[\n    odl,\n    uuid(55136804-b2de-11d1-b9f2-00a0c98bc547),\n    hidden,\n    dual,\n    oleautomation\n]\ninterface IShellFavoritesNameSpace : IDispatch {\n    [id(1)] HRESULT MoveSelectionUp();\n    [id(2)] HRESULT MoveSelectionDown();\n    [id(3)] HRESULT ResetSort();\n    [id(4)] HRESULT NewFolder();\n    [id(5)] HRESULT Synchronize();\n    [id(6)] HRESULT Import();\n    [id(7)] HRESULT Export();\n    [id(8)] HRESULT InvokeContextMenuCommand([in] BSTR strCommand);\n    [id(9)] HRESULT MoveSelectionTo();\n    [id(10), propget] HRESULT SubscriptionsEnabled([out, retval] VARIANT_BOOL *pBool);\n    [id(11)] HRESULT CreateSubscriptionForSelection([out, retval] VARIANT_BOOL *pBool);\n    [id(12)] HRESULT DeleteSubscriptionForSelection([out, retval] VARIANT_BOOL *pBool);\n    [id(13)] HRESULT SetRoot([in] BSTR bstrFullPath);\n}\n\n[\n    odl,\n    uuid(e572d3c9-37be-4ae2-825d-d521763e3108),\n    hidden,\n    dual,\n    oleautomation\n]\ninterface IShellNameSpace : IShellFavoritesNameSpace {\n    [id(14), propget] HRESULT EnumOptions([out, retval] long* pgrfEnumFlags);\n    [id(14), propput] HRESULT EnumOptions([in] long pgrfEnumFlags);\n\n    [id(15), propget] HRESULT SelectedItem([out, retval] IDispatch **pItem);\n    [id(15), propput] HRESULT SelectedItem([in] IDispatch *pItem);\n\n    [id(16), propget] HRESULT Root([out, retval] VARIANT *pvar);\n    [id(16), propput] HRESULT Root([in] VARIANT pvar);\n\n    [id(17), propget] HRESULT Depth([out, retval] int *piDepth);\n    [id(17), propput] HRESULT Depth([in] int piDepth);\n\n    [id(18), propget] HRESULT Mode([out, retval] unsigned int *puMode);\n    [id(18), propput] HRESULT Mode([in] unsigned int puMode);\n\n    [id(19), propget] HRESULT Flags([out, retval] unsigned long *pdwFlags);\n    [id(19), propput] HRESULT Flags([in] unsigned long pdwFlags);\n\n    [id(20), propput] HRESULT TVFlags([in] unsigned long dwFlags);\n    [id(20), propget] HRESULT TVFlags([out, retval] unsigned long *dwFlags);\n\n    [id(21), propget] HRESULT Columns([out, retval] BSTR *bstrColumns);\n    [id(21), propput] HRESULT Columns([in] BSTR bstrColumns);\n\n    [id(22), propget] HRESULT CountViewTypes([out, retval] int *piTypes);\n\n    [id(23)] HRESULT SetViewType([in] int iType);\n    [id(24)] HRESULT SelectedItems([out, retval] IDispatch **ppid);\n    [id(25)] HRESULT Expand([in] VARIANT var,  int iDepth);\n    [id(26)] HRESULT UnselectAll();\n}\n\n[\n    helpstring(\"Shell Name Space\"),\n    threading(apartment),\n    progid(\"ShellNameSpace.ShellNameSpace.1\"),\n    vi_progid(\"ShellNameSpace.ShellNameSpace\"),\n    uuid(2f2f1f96-2bc1-4b1c-be28-ea3774f4676a)\n]\ncoclass ShellShellNameSpace {\n    [default] interface IShellNameSpace;\n    [default, source] dispinterface DShellNameSpaceEvents;\n}\n\n[\n    helpstring(\"Shell Name Space\"),\n    threading(apartment),\n    progid(\"ShellNameSpace.ShellNameSpace.1\"),\n    vi_progid(\"ShellNameSpace.ShellNameSpace\"),\n    uuid(55136805-b2de-11d1-b9f2-00a0c98bc547)\n]\ncoclass ShellNameSpace {\n    [default] interface IShellNameSpace;\n    [default, source] dispinterface DShellNameSpaceEvents;\n}\n\n[\n    odl,\n    uuid(f3470f24-15fd-11d2-bb2e-00805ff7efca),\n    hidden,\n    dual,\n    oleautomation\n]\ninterface IScriptErrorList : IDispatch {\n    [id(10)] HRESULT advanceError();\n    [id(11)] HRESULT retreatError();\n    [id(12)] HRESULT canAdvanceError([out, retval] long *pfCanAdvance);\n    [id(13)] HRESULT canRetreatError([out, retval] long *pfCanRetreat);\n    [id(14)] HRESULT getErrorLine([out, retval] long *plLine);\n    [id(15)] HRESULT getErrorChar([out, retval] long *plChar);\n    [id(16)] HRESULT getErrorCode([out, retval] long *plCode);\n    [id(17)] HRESULT getErrorMsg([out, retval] BSTR *pstr);\n    [id(18)] HRESULT getErrorUrl([out, retval] BSTR *pstr);\n    [id(23)] HRESULT getAlwaysShowLockState([out, retval] long *pfAlwaysShowLocked);\n    [id(19)] HRESULT getDetailsPaneOpen([out, retval] long *pfDetailsPaneOpen);\n    [id(20)] HRESULT setDetailsPaneOpen(long fDetailsPaneOpen);\n    [id(21)] HRESULT getPerErrorDisplay([out, retval] long *pfPerErrorDisplay);\n    [id(22)] HRESULT setPerErrorDisplay(long fPerErrorDisplay);\n}\n\n[\n    uuid(efd01300-160f-11d2-bb2e-00805ff7efca),\n    hidden,\n    noncreatable\n]\ncoclass CScriptErrorList {\n    [default] interface IScriptErrorList;\n}\n\n[\n    odl,\n    uuid(ba9239a4-3dd5-11d2-bf8b-00c04fb93661),\n    hidden,\n    dual,\n    oleautomation\n]\ninterface ISearch : IDispatch {\n    [propget] HRESULT Title([out, retval] BSTR *pbstrTitle);\n    [propget] HRESULT Id([out, retval] BSTR *pbstrId);\n    [propget] HRESULT URL([out, retval] BSTR *pbstrUrl);\n}\n\n[\n    odl,\n    uuid(47c922a2-3dd5-11d2-bf8b-00c04fb93661),\n    hidden,\n    dual,\n    oleautomation\n]\ninterface ISearches : IDispatch {\n    [propget] HRESULT Count([out, retval] long *plCount);\n    [propget] HRESULT Default([out, retval] BSTR *pbstrDefault);\n\n    HRESULT Item(\n            [in, optional] VARIANT index,\n            [out, retval] ISearch **ppid);\n\n    [id(DISPID_NEWENUM)]\n    HRESULT _NewEnum([out, retval] IUnknown **ppunk);\n}\n\n[\n    odl,\n    uuid(72423e8f-8011-11d2-be79-00a0c9a83da1),\n    hidden,\n    dual,\n    oleautomation\n]\ninterface ISearchAssistantOC : IDispatch {\n    [id(1)] HRESULT AddNextMenuItem([in] BSTR bstrText, [in] long idItem);\n    [id(2)] HRESULT SetDefaultSearchUrl([in] BSTR bstrUrl);\n    [id(3)] HRESULT NavigateToDefaultSearch();\n\n    [id(4)] HRESULT IsRestricted(\n            [in] BSTR bstrGuid,\n            [out, retval] VARIANT_BOOL *pVal);\n\n    [id(5), propget] HRESULT ShellFeaturesEnabled([out, retval] VARIANT_BOOL *pVal);\n    [id(6), propget] HRESULT SearchAssistantDefault([out, retval] VARIANT_BOOL *pVal);\n    [id(7), propget] HRESULT Searches([out, retval] ISearches **ppid);\n    [id(8), propget] HRESULT InWebFolder([out, retval] VARIANT_BOOL *pVal);\n\n    [id(9)] HRESULT PutProperty(\n            [in] VARIANT_BOOL bPerLocale,\n            [in] BSTR bstrName,\n            [in] BSTR bstrValue);\n\n    [id(10)] HRESULT GetProperty(\n            [in] VARIANT_BOOL bPerLocale,\n            [in] BSTR bstrName,\n            [out, retval] BSTR *pbstrValue);\n\n    [id(11), propput] HRESULT EventHandled([in] VARIANT_BOOL rhs);\n    [id(12)] HRESULT ResetNextMenu();\n    [id(13)] HRESULT FindOnWeb();\n    [id(14)] HRESULT FindFilesOrFolders();\n    [id(15)] HRESULT FindComputer();\n    [id(16)] HRESULT FindPrinter();\n    [id(17)] HRESULT FindPeople();\n\n    [id(18)] HRESULT GetSearchAssistantURL(\n            [in] VARIANT_BOOL bSubstitute,\n            [in] VARIANT_BOOL bCustomize,\n            [out, retval] BSTR *pbstrValue);\n\n    [id(19)] HRESULT NotifySearchSettingsChanged();\n\n    [id(20), propput] HRESULT ASProvider([in] BSTR pProvider);\n    [id(20), propget] HRESULT ASProvider([out, retval] BSTR *pProvider);\n\n    [id(21), propput] HRESULT ASSetting([in] int pSetting);\n    [id(21), propget] HRESULT ASSetting([out, retval] int *pSetting);\n\n    [id(22)] HRESULT NETDetectNextNavigate();\n    [id(23)] HRESULT PutFindText([in] BSTR FindText);\n    [id(24), propget] HRESULT Version([out, retval] int *pVersion);\n\n    [id(25)] HRESULT EncodeString(\n            [in] BSTR bstrValue,\n            [in] BSTR bstrCharSet,\n            [in] VARIANT_BOOL bUseUTF8,\n            [out, retval] BSTR* pbstrResult);\n}\n\n[\n    odl,\n    uuid(72423e8f-8011-11d2-be79-00a0c9a83da2),\n    hidden,\n    dual,\n    oleautomation\n]\ninterface ISearchAssistantOC2 : ISearchAssistantOC {\n    [id(26), propget] HRESULT ShowFindPrinter([out, retval] VARIANT_BOOL *pbShowFindPrinter);\n}\n\n[\n    odl,\n    uuid(72423e8f-8011-11d2-be79-00a0c9a83da3),\n    hidden,\n    dual,\n    oleautomation\n]\ninterface ISearchAssistantOC3 : ISearchAssistantOC2 {\n    [id(27), propget] HRESULT SearchCompanionAvailable([out, retval] VARIANT_BOOL *pbAvailable);\n\n    [id(28), propput] HRESULT UseSearchCompanion([in] VARIANT_BOOL pbUseSC);\n    [id(28), propget] HRESULT UseSearchCompanion([out, retval] VARIANT_BOOL *pbUseSC);\n}\n\n[\n    uuid(1611fdda-445b-11d2-85de-00C04fa35c89),\n    hidden\n]\ndispinterface _SearchAssistantEvents {\n    properties:\n    methods:\n    [id(1)] void OnNextMenuSelect([in] long idItem);\n    [id(2)] void OnNewSearch();\n}\n\n[\n    helpstring(\"SearchAssistantOC\"),\n    threading(apartment),\n    progid(\"SearchAssistantOC.SearchAssistantOC.1\"),\n    vi_progid(\"SearchAssistantOC.SearchAssistantOC\"),\n    uuid(2e71fd0f-aab1-42c0-9146-6d2c4edcf07d),\n    hidden\n]\ncoclass ShellSearchAssistantOC {\n    [default] interface ISearchAssistantOC3;\n    [default, source] dispinterface _SearchAssistantEvents;\n}\n\n[\n    threading(apartment),\n    progid(\"SearchAssistantOC.SearchAssistantOC.1\"),\n    vi_progid(\"SearchAssistantOC.SearchAssistantOC\"),\n    uuid(b45ff030-4447-11d2-85de-00C04fa35c89),\n    hidden\n]\ncoclass SearchAssistantOC {\n    [default] interface ISearchAssistantOC3;\n    [default, source] dispinterface _SearchAssistantEvents;\n}\n\n} /* library */\n"
  },
  {
    "path": "wine/windows/exdispid.h",
    "content": "/*\n * Copyright 2004 Jacek Caban\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef EXDISPID_H_\n#define EXDISPID_H_\n\n#define DISPID_BEFORENAVIGATE        100\n#define DISPID_NAVIGATECOMPLETE      101\n#define DISPID_STATUSTEXTCHANGE      102\n#define DISPID_QUIT                  103\n#define DISPID_DOWNLOADCOMPLETE      104\n#define DISPID_COMMANDSTATECHANGE    105\n#define DISPID_DOWNLOADBEGIN         106\n#define DISPID_NEWWINDOW             107\n#define DISPID_PROGRESSCHANGE        108\n#define DISPID_WINDOWMOVE            109\n#define DISPID_WINDOWRESIZE          110\n#define DISPID_WINDOWACTIVATE        111\n#define DISPID_PROPERTYCHANGE        112\n#define DISPID_TITLECHANGE           113\n#define DISPID_TITLEICONCHANGE       114\n\n#define DISPID_FRAMEBEFORENAVIGATE   200\n#define DISPID_FRAMENAVIGATECOMPLETE 201\n\n#define DISPID_FRAMENEWWINDOW        204\n\n#define DISPID_BEFORENAVIGATE2       250\n#define DISPID_NEWWINDOW2            251\n#define DISPID_NAVIGATECOMPLETE2     252\n#define DISPID_ONQUIT                253\n#define DISPID_ONVISIBLE             254\n#define DISPID_ONTOOLBAR             255\n#define DISPID_ONMENUBAR             256\n#define DISPID_ONSTATUSBAR           257\n#define DISPID_ONFULLSCREEN          258\n#define DISPID_DOCUMENTCOMPLETE      259\n#define DISPID_ONTHEATERMODE         260\n#define DISPID_ONADDRESSBAR          261\n#define DISPID_WINDOWSETRESIZABLE    262\n#define DISPID_WINDOWCLOSING         263\n#define DISPID_WINDOWSETLEFT         264\n#define DISPID_WINDOWSETTOP          265\n#define DISPID_WINDOWSETWIDTH        266\n#define DISPID_WINDOWSETHEIGHT       267\n#define DISPID_CLIENTTOHOSTWINDOW    268\n#define DISPID_SETSECURELOCKICON     269\n#define DISPID_FILEDOWNLOAD          270\n#define DISPID_NAVIGATEERROR         271\n#define DISPID_PRIVACYIMPACTEDSTATECHANGE 272\n#define DISPID_NEWWINDOW3                 273\n#define DISPID_VIEWUPDATE                 281\n#define DISPID_SETPHISHINGFILTERSTATUS    282\n#define DISPID_WINDOWSTATECHANGED         283\n#define DISPID_NEWPROCESS                 284\n#define DISPID_THIRDPARTYURLBLOCKED       285\n#define DISPID_REDIRECTXDOMAINBLOCKED     286\n#define DISPID_WEBWORKERSTARTED           288\n#define DISPID_WEBWORKERFINISHED          289\n#define DISPID_BEFORESCRIPTEXECUTE        290\n\n#define DISPID_PRINTTEMPLATEINSTANTIATION 225\n#define DISPID_PRINTTEMPLATETEARDOWN      226\n#define DISPID_UPDATEPAGESTATUS           227\n\n#define DISPID_WINDOWREGISTERED 200\n#define DISPID_WINDOWREVOKED    201\n\n#define DISPID_RESETFIRSTBOOTMODE    1\n#define DISPID_RESETSAFEMODE         2\n#define DISPID_REFRESHOFFLINEDESKTOP 3\n#define DISPID_ADDFAVORITE           4\n#define DISPID_ADDCHANNEL            5\n#define DISPID_ADDDESKTOPCOMPONENT   6\n#define DISPID_ISSUBSCRIBED          7\n#define DISPID_NAVIGATEANDFIND       8\n#define DISPID_IMPORTEXPORTFAVORITES 9\n#define DISPID_AUTOCOMPLETESAVEFORM  10\n#define DISPID_AUTOSCAN              11\n#define DISPID_AUTOCOMPLETEATTACH    12\n#define DISPID_SHOWBROWSERUI         13\n#define DISPID_ADDSEARCHPROVIDER     14\n#define DISPID_RUNONCESHOWN          15\n#define DISPID_SKIPRUNONCE           16\n#define DISPID_CUSTOMIZESETTINGS     17\n#define DISPID_SQMENABLED            18\n#define DISPID_PHISHINGENABLED       19\n#define DISPID_BRANDIMAGEURI         20\n#define DISPID_SKIPTABSWELCOME       21\n#define DISPID_DIAGNOSECONNECTION    22\n#define DISPID_CUSTOMIZECLEARTYPE    23\n#define DISPID_ISSEARCHPROVIDERINSTALLED  24\n#define DISPID_ISSEARCHMIGRATED      25\n#define DISPID_DEFAULTSEARCHPROVIDER 26\n#define DISPID_RUNONCEREQUIREDSETTINGSCOMPLETE  27\n#define DISPID_RUNONCEHASSHOWN       28\n#define DISPID_SEARCHGUIDEURL        29\n#define DISPID_ADDSERVICE            30\n#define DISPID_ISSERVICEINSTALLED    31\n#define DISPID_ADDTOFAVORITESBAR     32\n#define DISPID_BUILDNEWTABPAGE       33\n#define DISPID_SETRECENTLYCLOSEDVISIBLE   34\n#define DISPID_SETACTIVITIESVISIBLE       35\n#define DISPID_CONTENTDISCOVERYRESET      36\n#define DISPID_INPRIVATEFILTERINGENABLED  37\n#define DISPID_SUGGESTEDSITESENABLED      38\n#define DISPID_ENABLESUGGESTEDSITES       39\n#define DISPID_NAVIGATETOSUGGESTEDSITES   40\n#define DISPID_SHOWTABSHELP               41\n#define DISPID_SHOWINPRIVATEHELP          42\n#define DISPID_SHELLUIHELPERLAST          43\n\n#define DISPID_ADVANCEERROR            10\n#define DISPID_RETREATERROR            11\n#define DISPID_CANADVANCEERROR         12\n#define DISPID_CANRETREATERROR         13\n#define DISPID_GETERRORLINE            14\n#define DISPID_GETERRORCHAR            15\n#define DISPID_GETERRORCODE            16\n#define DISPID_GETERRORMSG             17\n#define DISPID_GETERRORURL             18\n#define DISPID_GETDETAILSSTATE         19\n#define DISPID_SETDETAILSSTATE         20\n#define DISPID_GETPERERRSTATE          21\n#define DISPID_SETPERERRSTATE          22\n#define DISPID_GETALWAYSSHOWLOCKSTATE  23\n\n#define DISPID_FAVSELECTIONCHANGE  1\n#define DISPID_SELECTIONCHANGE     2\n#define DISPID_DOUBLECLICK         3\n#define DISPID_INITIALIZED         4\n\n#define DISPID_MOVESELECTIONUP       1\n#define DISPID_MOVESELECTIONDOWN     2\n#define DISPID_RESETSORT             3\n#define DISPID_NEWFOLDER             4\n#define DISPID_SYNCHRONIZE           5\n#define DISPID_IMPORT                6\n#define DISPID_EXPORT                7\n#define DISPID_INVOKECONTEXTMENU     8\n#define DISPID_MOVESELECTIONTO       9\n#define DISPID_SUBSCRIPTIONSENABLED  10\n#define DISPID_CREATESUBSCRIPTION    11\n#define DISPID_DELETESUBSCRIPTION    12\n#define DISPID_SETROOT               13\n#define DISPID_ENUMOPTIONS           14\n#define DISPID_SELECTEDITEM          15\n#define DISPID_ROOT                  16\n#define DISPID_DEPTH                 17\n#define DISPID_MODE                  18\n#define DISPID_FLAGS                 19\n#define DISPID_TVFLAGS               20\n#define DISPID_NSCOLUMNS             21\n#define DISPID_COUNTVIEWTYPES        22\n#define DISPID_SETVIEWTYPE           23\n#define DISPID_SELECTEDITEMS         24\n#define DISPID_EXPAND                25\n#define DISPID_UNSELECTALL           26\n\n#endif /* EXDISPID_H_ */\n"
  },
  {
    "path": "wine/windows/fci.h",
    "content": "/*\n * Copyright (C) 2002 Patrik Stridvall\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_FCI_H\n#define __WINE_FCI_H\n\n#include <basetsd.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n#ifndef _WIN64\n#include <pshpack4.h>\n#endif\n\n#ifndef INCLUDED_TYPES_FCI_FDI\n#define INCLUDED_TYPES_FCI_FDI 1\n\n/***********************************************************************\n * Common FCI/TDI declarations\n */\n\ntypedef ULONG CHECKSUM;\n\ntypedef ULONG UOFF;\ntypedef ULONG COFF;\n\n/**********************************************************************/\n\ntypedef struct {\n    int   erfOper;  /* FCI/FDI error code - see {FCI,FDI}ERROR_XXX for details. */\n    int   erfType;  /* Optional error value filled in by FCI/FDI. */\n    BOOL  fError;   /* TRUE => error present */\n} ERF, *PERF;\n\n/**********************************************************************/\n\n#define CB_MAX_CHUNK         32768U\n#define CB_MAX_DISK          __MSABI_LONG(0x7fffffff)\n#define CB_MAX_FILENAME      256\n#define CB_MAX_CABINET_NAME  256\n#define CB_MAX_CAB_PATH      256\n#define CB_MAX_DISK_NAME     256\n\n/**********************************************************************/\n\ntypedef unsigned short TCOMP;\n\n#define tcompMASK_TYPE          0x000F  /* Mask for compression type */\n#define tcompTYPE_NONE          0x0000  /* No compression */\n#define tcompTYPE_MSZIP         0x0001  /* MSZIP */\n#define tcompTYPE_QUANTUM       0x0002  /* Quantum */\n#define tcompTYPE_LZX           0x0003  /* LZX */\n#define tcompBAD                0x000F  /* Unspecified compression type */\n\n#define tcompMASK_LZX_WINDOW    0x1F00  /* Mask for LZX Compression Memory */\n#define tcompLZX_WINDOW_LO      0x0F00  /* Lowest LZX Memory (15) */\n#define tcompLZX_WINDOW_HI      0x1500  /* Highest LZX Memory (21) */\n#define tcompSHIFT_LZX_WINDOW        8  /* Amount to shift over to get int */\n\n#define tcompMASK_QUANTUM_LEVEL 0x00F0  /* Mask for Quantum Compression Level */\n#define tcompQUANTUM_LEVEL_LO   0x0010  /* Lowest Quantum Level (1) */\n#define tcompQUANTUM_LEVEL_HI   0x0070  /* Highest Quantum Level (7) */\n#define tcompSHIFT_QUANTUM_LEVEL     4  /* Amount to shift over to get int */\n\n#define tcompMASK_QUANTUM_MEM   0x1F00  /* Mask for Quantum Compression Memory */\n#define tcompQUANTUM_MEM_LO     0x0A00  /* Lowest Quantum Memory (10) */\n#define tcompQUANTUM_MEM_HI     0x1500  /* Highest Quantum Memory (21) */\n#define tcompSHIFT_QUANTUM_MEM       8  /* Amount to shift over to get int */\n\n#define tcompMASK_RESERVED      0xE000  /* Reserved bits (high 3 bits) */\n\n/**********************************************************************/\n\n#define CompressionTypeFromTCOMP(tc) \\\n    ((tc) & tcompMASK_TYPE)\n\n#define CompressionLevelFromTCOMP(tc) \\\n    (((tc) & tcompMASK_QUANTUM_LEVEL) >> tcompSHIFT_QUANTUM_LEVEL)\n\n#define CompressionMemoryFromTCOMP(tc) \\\n    (((tc) & tcompMASK_QUANTUM_MEM) >> tcompSHIFT_QUANTUM_MEM)\n\n#define TCOMPfromTypeLevelMemory(t, l, m) \\\n    (((m) << tcompSHIFT_QUANTUM_MEM  ) | \\\n     ((l) << tcompSHIFT_QUANTUM_LEVEL) | \\\n     ( t                             ))\n\n#define LZXCompressionWindowFromTCOMP(tc) \\\n    (((tc) & tcompMASK_LZX_WINDOW) >> tcompSHIFT_LZX_WINDOW)\n\n#define TCOMPfromLZXWindow(w) \\\n    (((w) << tcompSHIFT_LZX_WINDOW) | \\\n     ( tcompTYPE_LZX              ))\n\n#endif /* !defined(INCLUDED_TYPES_FCI_FDI) */\n\n/***********************************************************************\n * FCI declarations\n */\n\ntypedef enum {\n    FCIERR_NONE,\n    FCIERR_OPEN_SRC,\n    FCIERR_READ_SRC,\n    FCIERR_ALLOC_FAIL,\n    FCIERR_TEMP_FILE,\n    FCIERR_BAD_COMPR_TYPE,\n    FCIERR_CAB_FILE,\n    FCIERR_USER_ABORT,\n    FCIERR_MCI_FAIL,\n} FCIERROR;\n\n/**********************************************************************/\n\n#ifndef _A_NAME_IS_UTF\n#define _A_NAME_IS_UTF  0x80\n#endif\n\n#ifndef _A_EXEC\n#define _A_EXEC         0x40\n#endif\n\n/**********************************************************************/\n\ntypedef void *HFCI;\n\n/**********************************************************************/\n\ntypedef struct {\n    ULONG cb;              /* Size available for cabinet on this media */\n    ULONG cbFolderThresh;  /* Threshold for forcing a new Folder */\n\n    UINT  cbReserveCFHeader;     /* Space to reserve in CFHEADER */\n    UINT  cbReserveCFFolder;     /* Space to reserve in CFFOLDER */\n    UINT  cbReserveCFData;       /* Space to reserve in CFDATA */\n    int   iCab;                  /* Sequential numbers for cabinets */\n    int   iDisk;                 /* Disk number */\n#ifndef REMOVE_CHICAGO_M6_HACK\n    int   fFailOnIncompressible; /* TRUE => Fail if a block is incompressible */\n#endif\n\n    USHORT setID; /* Cabinet set ID */\n\n    char szDisk[CB_MAX_DISK_NAME];   /* Current disk name */\n    char szCab[CB_MAX_CABINET_NAME]; /* Current cabinet name */\n    char szCabPath[CB_MAX_CAB_PATH]; /* Path for creating cabinet */\n} CCAB, *PCCAB;\n\n/**********************************************************************/\n\ntypedef void * (__cdecl __WINE_ALLOC_SIZE(1) *PFNFCIALLOC)(ULONG cb);\n#define FNFCIALLOC(fn) void * __cdecl fn(ULONG cb)\n\ntypedef void (__cdecl *PFNFCIFREE)(void *memory);\n#define FNFCIFREE(fn) void __cdecl fn(void *memory)\n\ntypedef INT_PTR (__cdecl *PFNFCIOPEN) (char *pszFile, int oflag, int pmode, int *err, void *pv);\n#define FNFCIOPEN(fn) INT_PTR __cdecl fn(char *pszFile, int oflag, int pmode, int *err, void *pv)\n\ntypedef UINT (__cdecl *PFNFCIREAD) (INT_PTR hf, void *memory, UINT cb, int *err, void *pv);\n#define FNFCIREAD(fn) UINT __cdecl fn(INT_PTR hf, void *memory, UINT cb, int *err, void *pv)\n\ntypedef UINT (__cdecl *PFNFCIWRITE)(INT_PTR hf, void *memory, UINT cb, int *err, void *pv);\n#define FNFCIWRITE(fn) UINT __cdecl fn(INT_PTR hf, void *memory, UINT cb, int *err, void *pv)\n\ntypedef int  (__cdecl *PFNFCICLOSE)(INT_PTR hf, int *err, void *pv);\n#define FNFCICLOSE(fn) int __cdecl fn(INT_PTR hf, int *err, void *pv)\n\ntypedef LONG (__cdecl *PFNFCISEEK) (INT_PTR hf, LONG dist, int seektype, int *err, void *pv);\n#define FNFCISEEK(fn) LONG __cdecl fn(INT_PTR hf, LONG dist, int seektype, int *err, void *pv)\n\ntypedef int  (__cdecl *PFNFCIDELETE) (char *pszFile, int *err, void *pv);\n#define FNFCIDELETE(fn) int __cdecl fn(char *pszFile, int *err, void *pv)\n\ntypedef BOOL (__cdecl *PFNFCIGETNEXTCABINET)(PCCAB pccab, ULONG  cbPrevCab, void *pv);\n#define FNFCIGETNEXTCABINET(fn) BOOL __cdecl fn(PCCAB pccab, \\\n\t\t\t\t\t\tULONG  cbPrevCab, \\\n\t\t\t\t\t\tvoid *pv)\n\ntypedef int (__cdecl *PFNFCIFILEPLACED)(PCCAB pccab,\n\t\t\t\t\tchar *pszFile,\n\t\t\t\t\tLONG  cbFile,\n\t\t\t\t\tBOOL  fContinuation,\n\t\t\t\t\tvoid *pv);\n#define FNFCIFILEPLACED(fn) int __cdecl fn(PCCAB pccab, \\\n\t\t\t\t\t   char *pszFile, \\\n                                           LONG  cbFile, \\\n\t\t\t\t\t   BOOL  fContinuation, \\\n\t\t\t\t\t   void *pv)\n\ntypedef INT_PTR (__cdecl *PFNFCIGETOPENINFO)(char *pszName,\n\t\t\t\t\t     USHORT *pdate,\n\t\t\t\t\t     USHORT *ptime,\n\t\t\t\t\t     USHORT *pattribs,\n\t\t\t\t\t     int *err,\n\t\t\t\t\t     void *pv);\n#define FNFCIGETOPENINFO(fn) INT_PTR __cdecl fn(char *pszName, \\\n\t\t\t\t\t\tUSHORT *pdate, \\\n\t\t\t\t\t\tUSHORT *ptime, \\\n\t\t\t\t\t\tUSHORT *pattribs, \\\n\t\t\t\t\t\tint *err, \\\n\t\t\t\t\t\tvoid *pv)\n\n#define statusFile     0  /* Add File to Folder callback */\n#define statusFolder   1  /* Add Folder to Cabinet callback */\n#define statusCabinet  2  /* Write out a completed cabinet callback */\n\ntypedef LONG (__cdecl *PFNFCISTATUS)(UINT typeStatus,\n\t\t\t\t     ULONG cb1,\n\t\t\t\t     ULONG cb2,\n\t\t\t\t     void *pv);\n#define FNFCISTATUS(fn) LONG __cdecl fn(UINT typeStatus, \\\n\t\t\t\t\tULONG  cb1, \\\n\t\t\t\t\tULONG  cb2, \\\n\t\t\t\t\tvoid *pv)\n\ntypedef BOOL (__cdecl *PFNFCIGETTEMPFILE)(char *pszTempName,\n\t\t\t\t\t  int   cbTempName,\n\t\t\t\t\t  void *pv);\n#define FNFCIGETTEMPFILE(fn) BOOL __cdecl fn(char *pszTempName, \\\n                                             int   cbTempName, \\\n                                             void *pv)\n\n/**********************************************************************/\n\nHFCI __cdecl FCICreate(PERF, PFNFCIFILEPLACED, PFNFCIALLOC, PFNFCIFREE,\n\t\t       PFNFCIOPEN, PFNFCIREAD, PFNFCIWRITE, PFNFCICLOSE,\n\t\t       PFNFCISEEK, PFNFCIDELETE, PFNFCIGETTEMPFILE, PCCAB,\n\t\t       void *);\nBOOL __cdecl FCIAddFile(HFCI, char *, char *, BOOL, PFNFCIGETNEXTCABINET,\n\t\t\tPFNFCISTATUS, PFNFCIGETOPENINFO, TCOMP);\nBOOL __cdecl FCIFlushCabinet(HFCI, BOOL, PFNFCIGETNEXTCABINET, PFNFCISTATUS);\nBOOL __cdecl FCIFlushFolder(HFCI, PFNFCIGETNEXTCABINET, PFNFCISTATUS);\nBOOL __cdecl FCIDestroy(HFCI hfci);\n\n/**********************************************************************/\n\n#ifndef _WIN64\n#include <poppack.h>\n#endif\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif  /* __WINE_FCI_H */\n"
  },
  {
    "path": "wine/windows/fdi.h",
    "content": "/*\n * Copyright (C) 2002 Patrik Stridvall\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_FDI_H\n#define __WINE_FDI_H\n\n#include <basetsd.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n#ifndef _WIN64\n#include <pshpack4.h>\n#endif\n\n#ifndef INCLUDED_TYPES_FCI_FDI\n#define INCLUDED_TYPES_FCI_FDI 1\n\n/***********************************************************************\n * Common FCI/TDI declarations\n */\n\ntypedef ULONG CHECKSUM;\n\ntypedef ULONG UOFF;\ntypedef ULONG COFF;\n\n/**********************************************************************/\n\ntypedef struct {\n    int   erfOper;  /* FCI/FDI error code - see {FCI,FDI}ERROR_XXX for details. */\n    int   erfType;  /* Optional error value filled in by FCI/FDI. */\n    BOOL  fError;   /* TRUE => error present */\n} ERF, *PERF;\n\n/**********************************************************************/\n\n#define CB_MAX_CHUNK         32768U\n#define CB_MAX_DISK          __MSABI_LONG(0x7fffffff)\n#define CB_MAX_FILENAME      256\n#define CB_MAX_CABINET_NAME  256\n#define CB_MAX_CAB_PATH      256\n#define CB_MAX_DISK_NAME     256\n\n/**********************************************************************/\n\ntypedef unsigned short TCOMP;\n\n#define tcompMASK_TYPE          0x000F  /* Mask for compression type */\n#define tcompTYPE_NONE          0x0000  /* No compression */\n#define tcompTYPE_MSZIP         0x0001  /* MSZIP */\n#define tcompTYPE_QUANTUM       0x0002  /* Quantum */\n#define tcompTYPE_LZX           0x0003  /* LZX */\n#define tcompBAD                0x000F  /* Unspecified compression type */\n\n#define tcompMASK_LZX_WINDOW    0x1F00  /* Mask for LZX Compression Memory */\n#define tcompLZX_WINDOW_LO      0x0F00  /* Lowest LZX Memory (15) */\n#define tcompLZX_WINDOW_HI      0x1500  /* Highest LZX Memory (21) */\n#define tcompSHIFT_LZX_WINDOW        8  /* Amount to shift over to get int */\n\n#define tcompMASK_QUANTUM_LEVEL 0x00F0  /* Mask for Quantum Compression Level */\n#define tcompQUANTUM_LEVEL_LO   0x0010  /* Lowest Quantum Level (1) */\n#define tcompQUANTUM_LEVEL_HI   0x0070  /* Highest Quantum Level (7) */\n#define tcompSHIFT_QUANTUM_LEVEL     4  /* Amount to shift over to get int */\n\n#define tcompMASK_QUANTUM_MEM   0x1F00  /* Mask for Quantum Compression Memory */\n#define tcompQUANTUM_MEM_LO     0x0A00  /* Lowest Quantum Memory (10) */\n#define tcompQUANTUM_MEM_HI     0x1500  /* Highest Quantum Memory (21) */\n#define tcompSHIFT_QUANTUM_MEM       8  /* Amount to shift over to get int */\n\n#define tcompMASK_RESERVED      0xE000  /* Reserved bits (high 3 bits) */\n\n/**********************************************************************/\n\n#define CompressionTypeFromTCOMP(tc) \\\n    ((tc) & tcompMASK_TYPE)\n\n#define CompressionLevelFromTCOMP(tc) \\\n    (((tc) & tcompMASK_QUANTUM_LEVEL) >> tcompSHIFT_QUANTUM_LEVEL)\n\n#define CompressionMemoryFromTCOMP(tc) \\\n    (((tc) & tcompMASK_QUANTUM_MEM) >> tcompSHIFT_QUANTUM_MEM)\n\n#define TCOMPfromTypeLevelMemory(t, l, m) \\\n    (((m) << tcompSHIFT_QUANTUM_MEM  ) | \\\n     ((l) << tcompSHIFT_QUANTUM_LEVEL) | \\\n     ( t                             ))\n\n#define LZXCompressionWindowFromTCOMP(tc) \\\n    (((tc) & tcompMASK_LZX_WINDOW) >> tcompSHIFT_LZX_WINDOW)\n\n#define TCOMPfromLZXWindow(w) \\\n    (((w) << tcompSHIFT_LZX_WINDOW) | \\\n     ( tcompTYPE_LZX              ))\n\n#endif /* !defined(INCLUDED_TYPES_FCI_FDI) */\n\n/***********************************************************************\n * FDI declarations\n */\n\ntypedef enum {\n    FDIERROR_NONE,\n    FDIERROR_CABINET_NOT_FOUND,\n    FDIERROR_NOT_A_CABINET,\n    FDIERROR_UNKNOWN_CABINET_VERSION,\n    FDIERROR_CORRUPT_CABINET,\n    FDIERROR_ALLOC_FAIL,\n    FDIERROR_BAD_COMPR_TYPE,\n    FDIERROR_MDI_FAIL,\n    FDIERROR_TARGET_FILE,\n    FDIERROR_RESERVE_MISMATCH,\n    FDIERROR_WRONG_CABINET,\n    FDIERROR_USER_ABORT,\n} FDIERROR;\n\n/**********************************************************************/\n\n#ifndef _A_NAME_IS_UTF\n#define _A_NAME_IS_UTF  0x80\n#endif\n\n#ifndef _A_EXEC\n#define _A_EXEC         0x40\n#endif\n\n/**********************************************************************/\n\ntypedef void *HFDI;\n\n/**********************************************************************/\n\ntypedef struct {\n    LONG    cbCabinet;  /* Total length of cabinet file */\n    USHORT  cFolders;   /* Count of folders in cabinet */\n    USHORT  cFiles;     /* Count of files in cabinet */\n    USHORT  setID;      /* Cabinet set ID */\n    USHORT  iCabinet;   /* Cabinet number in set (0 based) */\n    BOOL    fReserve;   /* TRUE => RESERVE present in cabinet */\n    BOOL    hasprev;    /* TRUE => Cabinet is chained prev */\n    BOOL    hasnext;    /* TRUE => Cabinet is chained next */\n} FDICABINETINFO, *PFDICABINETINFO; /* pfdici */\n\n/**********************************************************************/\n\ntypedef enum {\n    fdidtNEW_CABINET,  /* New cabinet */\n    fdidtNEW_FOLDER,   /* New folder */\n    fdidtDECRYPT,      /* Decrypt a data block */\n} FDIDECRYPTTYPE;\n\n/**********************************************************************/\n\ntypedef struct {\n    FDIDECRYPTTYPE fdidt; /* Command type (selects union below) */\n\n    void *pvUser; /* Decryption context */\n\n    union {\n        struct {                      /* fdidtNEW_CABINET */\n\t    void   *pHeaderReserve;   /* RESERVE section from CFHEADER */\n\t    USHORT  cbHeaderReserve;  /* Size of pHeaderReserve */\n\t    USHORT  setID;            /* Cabinet set ID */\n\t    int     iCabinet;         /* Cabinet number in set (0 based) */\n        } cabinet;\n\n        struct {                      /* fdidtNEW_FOLDER */\n\t    void   *pFolderReserve;   /* RESERVE section from CFFOLDER */\n\t    USHORT  cbFolderReserve;  /* Size of pFolderReserve */\n\t    USHORT  iFolder;          /* Folder number in cabinet (0 based) */\n        } folder;\n\n        struct {                      /* fdidtDECRYPT */\n\t    void   *pDataReserve;     /* RESERVE section from CFDATA */\n\t    USHORT  cbDataReserve;    /* Size of pDataReserve */\n\t    void   *pbData;           /* Data buffer */\n\t    USHORT  cbData;           /* Size of data buffer */\n\t    BOOL    fSplit;           /* TRUE if this is a split data block */\n\t    USHORT  cbPartial;        /* 0 if this is not a split block, or\n\t\t\t\t       * the first piece of a split block;\n                                       * Greater than 0 if this is the\n                                       * second piece of a split block.\n                                       */\n        } decrypt;\n    } DUMMYUNIONNAME;\n} FDIDECRYPT, *PFDIDECRYPT;\n\n/**********************************************************************/\n\ntypedef void * (__cdecl *PFNALLOC)(ULONG cb);\n#define FNALLOC(fn) void * __cdecl fn(ULONG cb)\n\ntypedef void (__cdecl *PFNFREE)(void *pv);\n#define FNFREE(fn) void __cdecl fn(void *pv)\n\ntypedef INT_PTR (__cdecl *PFNOPEN) (char *pszFile, int oflag, int pmode);\n#define FNOPEN(fn) INT_PTR __cdecl fn(char *pszFile, int oflag, int pmode)\n\ntypedef UINT (__cdecl *PFNREAD) (INT_PTR hf, void *pv, UINT cb);\n#define FNREAD(fn) UINT __cdecl fn(INT_PTR hf, void *pv, UINT cb)\n\ntypedef UINT (__cdecl *PFNWRITE)(INT_PTR hf, void *pv, UINT cb);\n#define FNWRITE(fn) UINT __cdecl fn(INT_PTR hf, void *pv, UINT cb)\n\ntypedef int  (__cdecl *PFNCLOSE)(INT_PTR hf);\n#define FNCLOSE(fn) int __cdecl fn(INT_PTR hf)\n\ntypedef LONG (__cdecl *PFNSEEK) (INT_PTR hf, LONG dist, int seektype);\n#define FNSEEK(fn) LONG __cdecl fn(INT_PTR hf, LONG dist, int seektype)\n\ntypedef int (__cdecl *PFNFDIDECRYPT)(PFDIDECRYPT pfdid);\n#define FNFDIDECRYPT(fn) int __cdecl fn(PFDIDECRYPT pfdid)\n\ntypedef struct {\n    LONG  cb;\n    char *psz1;\n    char *psz2;\n    char *psz3;  /* Points to a 256 character buffer */\n    void *pv;    /* Value for client */\n\n    INT_PTR hf;\n\n    USHORT date;\n    USHORT time;\n    USHORT attribs;\n\n    USHORT setID;     /* Cabinet set ID */\n    USHORT iCabinet;  /* Cabinet number (0-based) */\n    USHORT iFolder;   /* Folder number (0-based) */\n\n    FDIERROR fdie;\n} FDINOTIFICATION, *PFDINOTIFICATION;\n\ntypedef enum {\n    fdintCABINET_INFO,     /* General information about cabinet */\n    fdintPARTIAL_FILE,     /* First file in cabinet is continuation */\n    fdintCOPY_FILE,        /* File to be copied */\n    fdintCLOSE_FILE_INFO,  /* Close the file, set relevant info */\n    fdintNEXT_CABINET,     /* File continued to next cabinet */\n    fdintENUMERATE,        /* Enumeration status */\n} FDINOTIFICATIONTYPE;\n\ntypedef INT_PTR (__cdecl *PFNFDINOTIFY)(FDINOTIFICATIONTYPE fdint,\n\t\t\t\t\tPFDINOTIFICATION  pfdin);\n#define FNFDINOTIFY(fn) INT_PTR __cdecl fn(FDINOTIFICATIONTYPE fdint, \\\n\t\t\t\t\t   PFDINOTIFICATION pfdin)\n\n#ifndef _WIN64\n#include <pshpack1.h>\n#endif\n\ntypedef struct {\n    char ach[2];  /* Set to { '*', '\\0' } */\n    LONG cbFile;  /* Required spill file size */\n} FDISPILLFILE, *PFDISPILLFILE;\n\n#ifndef _WIN64\n#include <poppack.h>\n#endif\n\n#define cpuUNKNOWN (-1)  /* FDI does detection */\n#define cpu80286   (0)   /* '286 opcodes only */\n#define cpu80386   (1)   /* '386 opcodes used */\n\n/**********************************************************************/\n\nHFDI __cdecl FDICreate(PFNALLOC, PFNFREE, PFNOPEN, PFNREAD, PFNWRITE,\n\t\t       PFNCLOSE, PFNSEEK, int, PERF);\nBOOL __cdecl FDIIsCabinet(HFDI, INT_PTR, PFDICABINETINFO);\nBOOL __cdecl FDICopy(HFDI, char *, char *, int, PFNFDINOTIFY,\n\t\t     PFNFDIDECRYPT, void *pvUser);\nBOOL __cdecl FDIDestroy(HFDI);\nBOOL __cdecl FDITruncateCabinet(HFDI, char *, USHORT);\n\n/**********************************************************************/\n\n#ifndef _WIN64\n#include <poppack.h>\n#endif\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif  /* __WINE_FDI_H */\n"
  },
  {
    "path": "wine/windows/fileapi.h",
    "content": "/*\n * Copyright 2013 André Hentschel\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_FILEAPI_H\n#define __WINE_FILEAPI_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct _CREATEFILE2_EXTENDED_PARAMETERS {\n    DWORD dwSize;\n    DWORD dwFileAttributes;\n    DWORD dwFileFlags;\n    DWORD dwSecurityQosFlags;\n    LPSECURITY_ATTRIBUTES lpSecurityAttributes;\n    HANDLE hTemplateFile;\n} CREATEFILE2_EXTENDED_PARAMETERS, *PCREATEFILE2_EXTENDED_PARAMETERS, *LPCREATEFILE2_EXTENDED_PARAMETERS;\n\nWINBASEAPI HANDLE WINAPI CreateFile2(LPCWSTR,DWORD,DWORD,DWORD,LPCREATEFILE2_EXTENDED_PARAMETERS);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* __WINE_FILEAPI_H */\n"
  },
  {
    "path": "wine/windows/fltdefs.h",
    "content": "/**\n * This file has no copyright assigned and is placed in the Public Domain.\n * This file is part of the w64 mingw-runtime package.\n * No warranty is given; refer to the file DISCLAIMER.PD within this package.\n */\n#ifndef _FLTDEFS_H\n#define _FLTDEFS_H\n\ntypedef PVOID FILTER_HANDLE,*PFILTER_HANDLE;\ntypedef PVOID INTERFACE_HANDLE,*PINTERFACE_HANDLE;\n\n#ifdef __cplusplus\n#define EXTERNCDECL EXTERN_C\n#else\n#define EXTERNCDECL\n#endif\n\n#define PFAPIENTRY EXTERNCDECL DWORD WINAPI\n\ntypedef enum _GlobalFilter {\n  GF_FRAGMENTS = 2,GF_STRONGHOST = 8,GF_FRAGCACHE = 9\n} GLOBAL_FILTER,*PGLOBAL_FILTER;\n\ntypedef enum _PfForwardAction {\n  PF_ACTION_FORWARD = 0,PF_ACTION_DROP\n} PFFORWARD_ACTION,*PPFFORWARD_ACTION;\n\ntypedef enum _PfAddresType {\n  PF_IPV4,PF_IPV6\n} PFADDRESSTYPE,*PPFADDRESSTYPE;\n\n#define FILTER_PROTO(ProtoId) MAKELONG(MAKEWORD((ProtoId),0x00),0x00000)\n\n#define FILTER_PROTO_ANY FILTER_PROTO(0x00)\n#define FILTER_PROTO_ICMP FILTER_PROTO(0x01)\n#define FILTER_PROTO_TCP FILTER_PROTO(0x06)\n#define FILTER_PROTO_UDP FILTER_PROTO(0x11)\n\n#define FILTER_TCPUDP_PORT_ANY (WORD)0x0000\n\n#define FILTER_ICMP_TYPE_ANY (BYTE)0xff\n#define FILTER_ICMP_CODE_ANY (BYTE)0xff\n\ntypedef struct _PF_FILTER_DESCRIPTOR {\n  DWORD dwFilterFlags;\n  DWORD dwRule;\n  PFADDRESSTYPE pfatType;\n  PBYTE SrcAddr;\n  PBYTE SrcMask;\n  PBYTE DstAddr;\n  PBYTE DstMask;\n  DWORD dwProtocol;\n  DWORD fLateBound;\n  WORD wSrcPort;\n  WORD wDstPort;\n  WORD wSrcPortHighRange;\n  WORD wDstPortHighRange;\n} PF_FILTER_DESCRIPTOR,*PPF_FILTER_DESCRIPTOR;\n\ntypedef struct _PF_FILTER_STATS {\n  DWORD dwNumPacketsFiltered;\n  PF_FILTER_DESCRIPTOR info;\n} PF_FILTER_STATS,*PPF_FILTER_STATS;\n\ntypedef struct _PF_INTERFACE_STATS {\n  PVOID pvDriverContext;\n  DWORD dwFlags;\n  DWORD dwInDrops;\n  DWORD dwOutDrops;\n  PFFORWARD_ACTION eaInAction;\n  PFFORWARD_ACTION eaOutAction;\n  DWORD dwNumInFilters;\n  DWORD dwNumOutFilters;\n  DWORD dwFrag;\n  DWORD dwSpoof;\n  DWORD dwReserved1;\n  DWORD dwReserved2;\n  LARGE_INTEGER liSYN;\n  LARGE_INTEGER liTotalLogged;\n  DWORD dwLostLogEntries;\n  PF_FILTER_STATS FilterInfo[1];\n} PF_INTERFACE_STATS,*PPF_INTERFACE_STATS;\n\n#define FILTERSIZE (sizeof(PF_FILTER_DESCRIPTOR) - (DWORD)(&((PPF_FILTER_DESCRIPTOR)0)->SrcAddr))\n\n#define FD_FLAGS_NOSYN 0x1\n\n#define FD_FLAGS_ALLFLAGS FD_FLAGS_NOSYN\n\n#define LB_SRC_ADDR_USE_SRCADDR_FLAG 0x00000001\n#define LB_SRC_ADDR_USE_DSTADDR_FLAG 0x00000002\n#define LB_DST_ADDR_USE_SRCADDR_FLAG 0x00000004\n#define LB_DST_ADDR_USE_DSTADDR_FLAG 0x00000008\n#define LB_SRC_MASK_LATE_FLAG 0x00000010\n#define LB_DST_MASK_LATE_FLAG 0x00000020\n\ntypedef struct _PF_LATEBIND_INFO {\n  PBYTE SrcAddr;\n  PBYTE DstAddr;\n  PBYTE Mask;\n} PF_LATEBIND_INFO,*PPF_LATEBIND_INFO;\n\ntypedef enum _PfFrameType {\n  PFFT_FILTER = 1,PFFT_FRAG = 2,PFFT_SPOOF = 3\n} PFFRAMETYPE,*PPFFRAMETYPE;\n\ntypedef struct _pfLogFrame {\n  LARGE_INTEGER Timestamp;\n  PFFRAMETYPE pfeTypeOfFrame;\n  DWORD dwTotalSizeUsed;\n  DWORD dwFilterRule;\n  WORD wSizeOfAdditionalData;\n  WORD wSizeOfIpHeader;\n  DWORD dwInterfaceName;\n  DWORD dwIPIndex;\n  BYTE bPacketData[1];\n} PFLOGFRAME,*PPFLOGFRAME;\n\n#define ERROR_BASE 23000\n\n#define PFERROR_NO_PF_INTERFACE (ERROR_BASE + 0)\n#define PFERROR_NO_FILTERS_GIVEN (ERROR_BASE + 1)\n#define PFERROR_BUFFER_TOO_SMALL (ERROR_BASE + 2)\n#define ERROR_IPV6_NOT_IMPLEMENTED (ERROR_BASE + 3)\n\nPFAPIENTRY PfCreateInterface(DWORD dwName,PFFORWARD_ACTION inAction,PFFORWARD_ACTION outAction,BOOL bUseLog,BOOL bMustBeUnique,INTERFACE_HANDLE *ppInterface);\nPFAPIENTRY PfDeleteInterface(INTERFACE_HANDLE pInterface);\nPFAPIENTRY PfAddFiltersToInterface(INTERFACE_HANDLE ih,DWORD cInFilters,PPF_FILTER_DESCRIPTOR pfiltIn,DWORD cOutFilters,PPF_FILTER_DESCRIPTOR pfiltOut,PFILTER_HANDLE pfHandle);\nPFAPIENTRY PfRemoveFiltersFromInterface(INTERFACE_HANDLE ih,DWORD cInFilters,PPF_FILTER_DESCRIPTOR pfiltIn,DWORD cOutFilters,PPF_FILTER_DESCRIPTOR pfiltOut);\nPFAPIENTRY PfRemoveFilterHandles(INTERFACE_HANDLE pInterface,DWORD cFilters,PFILTER_HANDLE pvHandles);\nPFAPIENTRY PfUnBindInterface(INTERFACE_HANDLE pInterface);\nPFAPIENTRY PfBindInterfaceToIndex(INTERFACE_HANDLE pInterface,DWORD dwIndex,PFADDRESSTYPE pfatLinkType,PBYTE LinkIPAddress);\nPFAPIENTRY PfBindInterfaceToIPAddress(INTERFACE_HANDLE pInterface,PFADDRESSTYPE pfatType,PBYTE IPAddress);\nPFAPIENTRY PfRebindFilters(INTERFACE_HANDLE pInterface,PPF_LATEBIND_INFO pLateBindInfo);\nPFAPIENTRY PfAddGlobalFilterToInterface(INTERFACE_HANDLE pInterface,GLOBAL_FILTER gfFilter);\nPFAPIENTRY PfRemoveGlobalFilterFromInterface(INTERFACE_HANDLE pInterface,GLOBAL_FILTER gfFilter);\nPFAPIENTRY PfMakeLog(HANDLE hEvent);\nPFAPIENTRY PfSetLogBuffer(PBYTE pbBuffer,DWORD dwSize,DWORD dwThreshold,DWORD dwEntries,PDWORD pdwLoggedEntries,PDWORD pdwLostEntries,PDWORD pdwSizeUsed);\nPFAPIENTRY PfDeleteLog(VOID);\nPFAPIENTRY PfGetInterfaceStatistics(INTERFACE_HANDLE pInterface,PPF_INTERFACE_STATS ppfStats,PDWORD pdwBufferSize,BOOL fResetCounters);\nPFAPIENTRY PfTestPacket(INTERFACE_HANDLE pInInterface,INTERFACE_HANDLE pOutInterface,DWORD cBytes,PBYTE pbPacket,PPFFORWARD_ACTION ppAction);\n#endif\n"
  },
  {
    "path": "wine/windows/fontsub.h",
    "content": "/*\n * Copyright 2016 Nikolay Sivov for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_FONTSUB_H\n#define __WINE_FONTSUB_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef void *(__cdecl *CFP_ALLOCPROC)(size_t);\ntypedef void *(__cdecl *CFP_REALLOCPROC)(void *, size_t);\ntypedef void (__cdecl *CFP_FREEPROC)(void *);\n\n#define TTFCFP_SUBSET  0\n#define TTFCFP_SUBSET1 1\n#define TTFCFP_DELTA   2\n\n#define TTFCFP_UNICODE_PLATFORMID 0\n#define TTFCFP_APPLE_PLATFORMID   1\n#define TTFCFP_ISO_PLATFORMID     2\n#define TTFCFP_MS_PLATFORMID      3\n\n#define TTFCFP_STD_MAC_CHAR_SET   0\n#define TTFCFP_SYMBOL_CHAR_SET    0\n#define TTFCFP_UNICODE_CHAR_SET   1\n#define TTFCFP_DONT_CARE          0xffff\n\n#define TTFCFP_LANG_KEEP_ALL      0\n\n#define TTFCFP_FLAGS_SUBSET       0x0001\n#define TTFCFP_FLAGS_COMPRESS     0x0002\n#define TTFCFP_FLAGS_TTC          0x0004\n#define TTFCFP_FLAGS_GLYPHLIST    0x0008\n\n#define ERR_GENERIC 1000\n#define ERR_MEM     1005\n\nULONG __cdecl CreateFontPackage(const unsigned char *src, const ULONG src_len, unsigned char **dest,\n    ULONG *dest_len, ULONG *written, const unsigned short flags, const unsigned short face_index,\n    const unsigned short format, const unsigned short lang, const unsigned short platform,\n    const unsigned short encoding, const unsigned short *keep_list, const unsigned short keep_len,\n    CFP_ALLOCPROC allocproc, CFP_REALLOCPROC reallocproc, CFP_FREEPROC freeproc, void *reserved);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/fusion.idl",
    "content": "/*\n * Copyright 2008 James Hawkins\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"objidl.idl\";\n\ninterface IAssemblyCache;\ninterface IAssemblyCacheItem;\ninterface IAssemblyEnum;\ninterface IAssemblyName;\n\ntypedef enum\n{\n    ASM_CACHE_ZAP       = 0x1,\n    ASM_CACHE_GAC       = 0x2,\n    ASM_CACHE_DOWNLOAD  = 0x4,\n    ASM_CACHE_ROOT      = 0x8,\n    ASM_CACHE_ROOT_EX   = 0x80\n} ASM_CACHE_FLAGS;\n\ntypedef enum\n{\n    peNone      = 0x00000000,\n    peMSIL      = 0x00000001,\n    peI386      = 0x00000002,\n    peIA64      = 0x00000003,\n    peAMD64     = 0x00000004,\n    peARM       = 0x00000005,\n    peInvalid   = 0xffffffff\n} PEKIND;\n\ntypedef enum _tagAssemblyComparisonResult\n{\n    ACR_Unknown,\n    ACR_EquivalentFullMatch,\n    ACR_EquivalentWeakNamed,\n    ACR_EquivalentFXUnified,\n    ACR_EquivalentUnified,\n    ACR_NonEquivalentVersion,\n    ACR_NonEquivalent,\n    ACR_EquivalentPartialMatch,\n    ACR_EquivalentPartialWeakNamed,\n    ACR_EquivalentPartialUnified,\n    ACR_EquivalentPartialFXUnified,\n    ACR_NonEquivalentPartialVersion\n} AssemblyComparisonResult;\n\n[\n    local,\n    object,\n    uuid(e707dcde-d1cd-11d2-bab9-00c04f8eceae),\n    pointer_default(unique)\n]\ninterface IAssemblyCache : IUnknown\n{\n    typedef struct _FUSION_INSTALL_REFERENCE_\n    {\n        DWORD cbSize;\n        DWORD dwFlags;\n        GUID guidScheme;\n        LPCWSTR szIdentifier;\n        LPCWSTR szNonCannonicalData;\n    } FUSION_INSTALL_REFERENCE, *LPFUSION_INSTALL_REFERENCE;\n\n    typedef const FUSION_INSTALL_REFERENCE  *LPCFUSION_INSTALL_REFERENCE;\n\n    typedef struct _ASSEMBLY_INFO\n    {\n        ULONG cbAssemblyInfo;\n        DWORD dwAssemblyFlags;\n        ULARGE_INTEGER uliAssemblySizeInKB;\n        LPWSTR pszCurrentAssemblyPathBuf;\n        ULONG cchBuf;\n    } ASSEMBLY_INFO;\n\n    cpp_quote(\"#define IASSEMBLYCACHE_INSTALL_FLAG_REFRESH       0x00000001\")\n    cpp_quote(\"#define IASSEMBLYCACHE_INSTALL_FLAG_FORCE_REFRESH 0x00000002\")\n\n    cpp_quote(\"#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED 1\")\n    cpp_quote(\"#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE 2\")\n    cpp_quote(\"#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED 3\")\n    cpp_quote(\"#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING 4\")\n    cpp_quote(\"#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_HAS_INSTALL_REFERENCES 5\")\n    cpp_quote(\"#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_REFERENCE_NOT_FOUND 6\")\n\n    cpp_quote(\"#define QUERYASMINFO_FLAG_VALIDATE   0x00000001\")\n    cpp_quote(\"#define QUERYASMINFO_FLAG_GETSIZE    0x00000002\")\n\n    cpp_quote(\"#define ASSEMBLYINFO_FLAG_INSTALLED       0x00000001\")\n    cpp_quote(\"#define ASSEMBLYINFO_FLAG_PAYLOADRESIDENT 0x00000002\")\n\n    HRESULT UninstallAssembly(\n        [in] DWORD dwFlags,\n        [in] LPCWSTR pszAssemblyName,\n        [in] LPCFUSION_INSTALL_REFERENCE pRefData,\n        [out, optional] ULONG *pulDisposition);\n\n    HRESULT QueryAssemblyInfo(\n        [in] DWORD dwFlags,\n        [in] LPCWSTR pszAssemblyName,\n        [in, out] ASSEMBLY_INFO *pAsmInfo);\n\n    HRESULT CreateAssemblyCacheItem(\n        [in] DWORD dwFlags,\n        [in] PVOID pvReserved,\n        [out] IAssemblyCacheItem **ppAsmItem,\n        [in, optional] LPCWSTR pszAssemblyName);\n\n    HRESULT CreateAssemblyScavenger([out] IUnknown **ppUnkReserved);\n\n    HRESULT InstallAssembly(\n        [in] DWORD dwFlags,\n        [in] LPCWSTR pszManifestFilePath,\n        [in] LPCFUSION_INSTALL_REFERENCE pRefData);\n}\n\n[\n    local,\n    object,\n    uuid(9e3aaeb4-d1cd-11d2-bab9-00c04f8eceae),\n    pointer_default(unique)\n]\ninterface IAssemblyCacheItem : IUnknown\n{\n    cpp_quote(\"#define STREAM_FORMAT_COMPLIB_MODULE    0\")\n    cpp_quote(\"#define STREAM_FORMAT_COMPLIB_MANIFEST  1\")\n    cpp_quote(\"#define STREAM_FORMAT_WIN32_MODULE      2\")\n    cpp_quote(\"#define STREAM_FORMAT_WIN32_MANIFEST    4\")\n\n    cpp_quote(\"#define IASSEMBLYCACHEITEM_COMMIT_FLAG_REFRESH       0x00000001\")\n    cpp_quote(\"#define IASSEMBLYCACHEITEM_COMMIT_FLAG_FORCE_REFRESH 0x00000002\")\n\n    cpp_quote(\"#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_INSTALLED 1\")\n    cpp_quote(\"#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_REFRESHED 2\")\n    cpp_quote(\"#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_ALREADY_INSTALLED 3\")\n\n    HRESULT CreateStream(\n        [in] DWORD dwFlags,\n        [in] LPCWSTR pszStreamName,\n        [in] DWORD dwFormat,\n        [in] DWORD dwFormatFlags,\n        [out] IStream **ppIStream,\n        [in, optional] ULARGE_INTEGER *puliMaxSize);\n\n    HRESULT Commit(\n        [in] DWORD dwFlags,\n        [out, optional] ULONG *pulDisposition);\n\n    HRESULT AbortItem();\n}\n\n[\n    local,\n    object,\n    uuid(CD193BC0-B4BC-11d2-9833-00C04FC31D2E),\n    pointer_default(unique)\n]\ninterface IAssemblyName: IUnknown\n{\n    typedef [unique] IAssemblyName *LPASSEMBLYNAME;\n\n    typedef enum\n    {\n        CANOF_PARSE_DISPLAY_NAME = 0x1,\n        CANOF_SET_DEFAULT_VALUES = 0x2,\n        CANOF_VERIFY_FRIEND_ASSEMBLYNAME = 0x4,\n        CANOF_PARSE_FRIEND_DISPLAY_NAME = CANOF_PARSE_DISPLAY_NAME |\n                                          CANOF_VERIFY_FRIEND_ASSEMBLYNAME\n    } CREATE_ASM_NAME_OBJ_FLAGS;\n\n    typedef enum\n    {\n        ASM_NAME_PUBLIC_KEY = 0,\n        ASM_NAME_PUBLIC_KEY_TOKEN,\n        ASM_NAME_HASH_VALUE,\n        ASM_NAME_NAME,\n        ASM_NAME_MAJOR_VERSION,\n        ASM_NAME_MINOR_VERSION,\n        ASM_NAME_BUILD_NUMBER,\n        ASM_NAME_REVISION_NUMBER,\n        ASM_NAME_CULTURE,\n        ASM_NAME_PROCESSOR_ID_ARRAY,\n        ASM_NAME_OSINFO_ARRAY,\n        ASM_NAME_HASH_ALGID,\n        ASM_NAME_ALIAS,\n        ASM_NAME_CODEBASE_URL,\n        ASM_NAME_CODEBASE_LASTMOD,\n        ASM_NAME_NULL_PUBLIC_KEY,\n        ASM_NAME_NULL_PUBLIC_KEY_TOKEN,\n        ASM_NAME_CUSTOM,\n        ASM_NAME_NULL_CUSTOM,\n        ASM_NAME_MVID,\n        ASM_NAME_FILE_MAJOR_VERSION,\n        ASM_NAME_FILE_MINOR_VERSION,\n        ASM_NAME_FILE_BUILD_NUMBER,\n        ASM_NAME_FILE_REVISION_NUMBER,\n        ASM_NAME_RETARGET,\n        ASM_NAME_SIGNATURE_BLOB,\n        ASM_NAME_CONFIG_MASK,\n        ASM_NAME_ARCHITECTURE,\n        ASM_NAME_MAX_PARAMS\n    } ASM_NAME;\n\n    typedef enum\n    {\n        ASM_DISPLAYF_VERSION = 0x1,\n        ASM_DISPLAYF_CULTURE = 0x2,\n        ASM_DISPLAYF_PUBLIC_KEY_TOKEN = 0x4,\n        ASM_DISPLAYF_PUBLIC_KEY = 0x8,\n        ASM_DISPLAYF_CUSTOM = 0x10,\n        ASM_DISPLAYF_PROCESSORARCHITECTURE = 0x20,\n        ASM_DISPLAYF_LANGUAGEID = 0x40,\n        ASM_DISPLAYF_RETARGET = 0x80,\n        ASM_DISPLAYF_CONFIG_MASK = 0x100,\n        ASM_DISPLAYF_MVID = 0x200,\n\n        ASM_DISPLAYF_FULL = ASM_DISPLAYF_VERSION |\n                            ASM_DISPLAYF_CULTURE |\n                            ASM_DISPLAYF_PUBLIC_KEY_TOKEN |\n                            ASM_DISPLAYF_RETARGET |\n                            ASM_DISPLAYF_PROCESSORARCHITECTURE,\n    } ASM_DISPLAY_FLAGS;\n\n    typedef enum\n    {\n        ASM_CMPF_NAME               = 0x1,\n        ASM_CMPF_MAJOR_VERSION      = 0x2,\n        ASM_CMPF_MINOR_VERSION      = 0x4,\n        ASM_CMPF_BUILD_NUMBER       = 0x8,\n        ASM_CMPF_REVISION_NUMBER    = 0x10,\n        ASM_CMPF_VERSION = ASM_CMPF_MAJOR_VERSION |\n                           ASM_CMPF_MINOR_VERSION |\n                           ASM_CMPF_BUILD_NUMBER |\n                           ASM_CMPF_REVISION_NUMBER,\n        ASM_CMPF_PUBLIC_KEY_TOKEN   = 0x20,\n        ASM_CMPF_CULTURE            = 0x40,\n        ASM_CMPF_CUSTOM             = 0x80,\n        ASM_CMPF_DEFAULT            = 0x100,\n        ASM_CMPF_RETARGET           = 0x200,\n        ASM_CMPF_ARCHITECTURE       = 0x400,\n        ASM_CMPF_CONFIG_MASK        = 0x800,\n        ASM_CMPF_MVID               = 0x1000,\n        ASM_CMPF_SIGNATURE          = 0x2000,\n        ASM_CMPF_IL_ALL = ASM_CMPF_NAME |\n                          ASM_CMPF_VERSION |\n                          ASM_CMPF_PUBLIC_KEY_TOKEN |\n                          ASM_CMPF_CULTURE,\n        ASM_CMPF_IL_NO_VERSION = ASM_CMPF_NAME |\n                                 ASM_CMPF_PUBLIC_KEY_TOKEN |\n                                 ASM_CMPF_CULTURE\n    } ASM_CMP_FLAGS;\n\n    HRESULT SetProperty(\n        [in] DWORD PropertyId,\n        [in] LPVOID pvProperty,\n        [in] DWORD cbProperty);\n\n    HRESULT GetProperty(\n        [in] DWORD PropertyId,\n        [out] LPVOID pvProperty,\n        [in, out] LPDWORD pcbProperty);\n\n    HRESULT Finalize();\n\n    HRESULT GetDisplayName(\n        [out] LPOLESTR szDisplayName,\n        [in, out] LPDWORD pccDisplayName,\n        [in] DWORD dwDisplayFlags);\n\n    HRESULT Reserved(\n        [in] REFIID refIID,\n        [in] IUnknown *pUnkReserved1,\n        [in] IUnknown *pUnkReserved2,\n        [in] LPCOLESTR szReserved,\n        [in] LONGLONG llReserved,\n        [in] LPVOID pvReserved,\n        [in] DWORD cbReserved,\n        [out] LPVOID *ppReserved);\n\n    HRESULT GetName(\n        [in, out] LPDWORD lpcwBuffer,\n        [out] WCHAR *pwzName);\n\n    HRESULT GetVersion(\n        [out] LPDWORD pdwVersionHi,\n        [out] LPDWORD pdwVersionLow);\n\n    HRESULT IsEqual(\n        [in] IAssemblyName *pName,\n        [in] DWORD dwCmpFlags);\n\n    HRESULT Clone([out] IAssemblyName **pName);\n}\n\n[\n    local,\n    object,\n    uuid(21b8916c-f28e-11d2-a473-00c04f8ef448),\n    pointer_default(unique)\n]\ninterface IAssemblyEnum : IUnknown\n{\n    HRESULT GetNextAssembly(\n        [in] LPVOID pvReserved,\n        [out] IAssemblyName **ppName,\n        [in] DWORD dwFlags);\n\n    HRESULT Reset(void);\n\n    HRESULT Clone([out] IAssemblyEnum **ppEnum);\n}\n\n[\n    local,\n    object,\n    uuid(582dac66-e678-449f-aba6-6faaec8a9394),\n    pointer_default(unique)\n]\ninterface IInstallReferenceItem : IUnknown\n{\n\n}\n\n[\n    local,\n    object,\n    uuid(56b1a988-7c0c-4aa2-8639-c3eb5a90226f),\n    pointer_default(unique)\n]\ninterface IInstallReferenceEnum : IUnknown\n{\n\n}\n\ncpp_quote(\"HRESULT WINAPI ClearDownloadCache(void);\")\ncpp_quote(\"HRESULT WINAPI CompareAssemblyIdentity(LPCWSTR,BOOL,LPCWSTR,BOOL,BOOL*,AssemblyComparisonResult*);\")\ncpp_quote(\"HRESULT WINAPI CreateAssemblyCache(IAssemblyCache**,DWORD);\")\ncpp_quote(\"HRESULT WINAPI CreateAssemblyEnum(IAssemblyEnum**,IUnknown*,IAssemblyName*,DWORD,LPVOID);\")\ncpp_quote(\"HRESULT WINAPI CreateAssemblyNameObject(LPASSEMBLYNAME*,LPCWSTR,DWORD,LPVOID);\")\ncpp_quote(\"HRESULT WINAPI CreateInstallReferenceEnum(IInstallReferenceEnum**,IAssemblyName*,DWORD,LPVOID);\")\ncpp_quote(\"HRESULT WINAPI GetAssemblyIdentityFromFile(LPCWSTR,REFIID,IUnknown**);\")\ncpp_quote(\"HRESULT WINAPI GetCachePath(ASM_CACHE_FLAGS,LPWSTR,PDWORD);\")\n"
  },
  {
    "path": "wine/windows/gameux.idl",
    "content": " /*\n *\tDefines the COM interfaces of Game Explorer\n *\n * Copyright (C) 2008 Alistair Leslie-Hughes\n * Copyright (C) 2010 Mariusz Pluciński\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"shobjidl.idl\";\n\n#ifndef __WIDL__\n#define threading(model)\n#define progid(str)\n#define vi_progid(str)\n#endif\n\n[\n  uuid(4F48A59C-942D-4F3C-83C9-4EFFE84E4959),\n  version(1.0),\n  helpstring(\"gameux public 1.0 Type Library\")\n]\nlibrary gameuxLib\n{\n    importlib(\"stdole2.tlb\");\n\n    cpp_quote(\"#define ID_GDF_XML __GDF_XML\")\n    cpp_quote(\"#define ID_GDF_THUMBNAIL __GDF_THUMBNAIL\")\n    cpp_quote(\"#define ID_ICON_ICO __ICON_ICO\")\n\n    cpp_quote(\"#if defined(__GNUC__)\")\n    cpp_quote(\"#define ID_GDF_XML_STR (const WCHAR[]){'_','_','G','D','F','_','X','M','L',0}\")\n    cpp_quote(\"#define ID_GDF_THUMBNAIL_STR (const WCHAR[]){'_','_','G','D','F','_','T','H','U','M','B','N','A','I','L',0}\")\n    cpp_quote(\"#elif defined(_MSC_VER)\")\n    cpp_quote(\"#define ID_GDF_XML_STR L\\\"__GDF_XML\\\"\")\n    cpp_quote(\"#define ID_GDF_THUMBNAIL_STR L\\\"__GDF_THUMBNAIL\\\"\")\n    cpp_quote(\"#endif\")\n\n    typedef enum\n    {\n        GIS_NOT_INSTALLED  = 1,\n        GIS_CURRENT_USER   = 2,\n        GIS_ALL_USERS      = 3\n    } GAME_INSTALL_SCOPE;\n\n    typedef enum\n    {\n        GAMESTATS_OPEN_OPENORCREATE = 0,\n        GAMESTATS_OPEN_OPENONLY = 1\n    } GAMESTATS_OPEN_TYPE;\n\n    typedef enum\n    {\n        GAMESTATS_OPEN_CREATED = 0,\n        GAMESTATS_OPEN_OPENED = 1\n    } GAMESTATS_OPEN_RESULT;\n\n    [\n      object,\n      uuid(E7B2FB72-D728-49B3-A5F2-18EBF5F1349E)\n    ]\n    interface IGameExplorer : IUnknown\n    {\n        HRESULT AddGame([in] BSTR sGDFBinaryPath,\n                    [in] BSTR sInstallDirectory,\n                    [in] GAME_INSTALL_SCOPE installScope,\n                    [in, out] GUID* pguidInstanceID);\n\n        HRESULT RemoveGame([in] GUID instanceID);\n\n        HRESULT UpdateGame([in] GUID instanceID);\n\n        HRESULT VerifyAccess([in] BSTR sGDFBinaryPath,\n                    [out] BOOL* pHasAccess);\n    };\n\n    [\n      object,\n      uuid(3887C9CA-04A0-42ae-BC4C-5FA6C7721145)\n    ]\n    interface IGameStatistics : IUnknown\n    {\n        HRESULT GetMaxCategoryLength(\n                    [retval, out] UINT* cch);\n\n        HRESULT GetMaxNameLength(\n                    [retval, out] UINT* cch);\n\n        HRESULT GetMaxValueLength(\n                    [retval, out] UINT* cch);\n\n        HRESULT GetMaxCategories(\n                    [retval, out] WORD* pMax);\n\n        HRESULT GetMaxStatsPerCategory(\n                    [retval, out] WORD* pMax);\n\n        HRESULT SetCategoryTitle(\n                    [in] WORD categoryIndex,\n                    [string, in] LPCWSTR title);\n\n        HRESULT GetCategoryTitle(\n                    [in] WORD categoryIndex,\n                    [retval, string, out] LPWSTR* pTitle);\n\n        HRESULT GetStatistic(\n                    [in] WORD categoryIndex,\n                    [in] WORD statIndex,\n                    [string, unique, out, in] LPWSTR* pName,\n                    [string, unique, out, in] LPWSTR* pValue);\n\n        HRESULT SetStatistic(\n                    [in] WORD categoryIndex,\n                    [in] WORD statIndex,\n                    [string, in] LPCWSTR name,\n                    [string, in] LPCWSTR value);\n\n        HRESULT Save(\n                    [in] BOOL trackChanges);\n\n        HRESULT SetLastPlayedCategory(\n                    [in] UINT categoryIndex);\n\n        HRESULT GetLastPlayedCategory(\n                    [retval, out] UINT* pCategoryIndex);\n    };\n\n    [\n      object,\n      uuid(AFF3EA11-E70E-407d-95DD-35E612C41CE2)\n    ]\n    interface IGameStatisticsMgr : IUnknown\n    {\n        HRESULT GetGameStatistics(\n                    [string, in] LPCWSTR GDFBinaryPath,\n                    [in] GAMESTATS_OPEN_TYPE openType,\n                    [out] GAMESTATS_OPEN_RESULT* pOpenResult,\n                    [retval, out] IGameStatistics** ppiStats);\n\n        HRESULT RemoveGameStatistics(\n                    [string, in] LPCWSTR GDFBinaryPath);\n    };\n\n    [\n      object,\n      uuid(86874AA7-A1ED-450d-A7EB-B89E20B2FFF3)\n    ]\n    interface IGameExplorer2 : IUnknown\n    {\n       HRESULT InstallGame(\n                    [string, in] LPCWSTR binaryGDFPath,\n                    [unique, in] LPCWSTR installDirectory,\n                    [in] GAME_INSTALL_SCOPE installScope);\n\n        HRESULT UninstallGame(\n                    [string, in] LPCWSTR binaryGDFPath);\n\n        HRESULT CheckAccess(\n                    [string, in] LPCWSTR binaryGDFPath,\n                    [retval, out] BOOL* pHasAccess);\n\n    }\n\n    [\n      helpstring(\"GameExplorer Class\"),\n      threading(both),\n      progid(\"gameux.GameExplorer.1\"),\n      vi_progid(\"gameux.GameExplorer\"),\n      uuid(9A5EA990-3034-4D6F-9128-01F3C61022BC)\n    ]\n    coclass GameExplorer\n    {\n        [default] interface IGameExplorer;\n    };\n\n    [\n      helpstring(\"GameStatistics Class\"),\n      threading(apartment),\n      progid(\"gameux.GameStatistics.1\"),\n      vi_progid(\"gameux.GameStatistics\"),\n      uuid(DBC85A2C-C0DC-4961-B6E2-D28B62C11AD4)\n    ]\n    coclass GameStatistics\n    {\n        [default] interface IGameStatistics;\n    };\n}\n"
  },
  {
    "path": "wine/windows/gdiplus.h",
    "content": "/*\n * Copyright (C) 2007 Google (Evan Stade)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _GDIPLUS_H\n#define _GDIPLUS_H\n\n#ifdef __cplusplus\n\nnamespace Gdiplus\n{\n    namespace DllExports\n    {\n#include \"gdiplusmem.h\"\n    };\n\n#include \"gdiplusenums.h\"\n#include \"gdiplustypes.h\"\n#include \"gdiplusinit.h\"\n#include \"gdipluspixelformats.h\"\n#include \"gdiplusmetaheader.h\"\n#include \"gdiplusimaging.h\"\n#include \"gdipluscolor.h\"\n#include \"gdipluscolormatrix.h\"\n#include \"gdiplusgpstubs.h\"\n#include \"gdipluseffects.h\"\n\n    namespace DllExports\n    {\n#include \"gdiplusflat.h\"\n    };\n};\n\n#else /* end c++ includes */\n\n#include \"gdiplusmem.h\"\n\n#include \"gdiplusenums.h\"\n#include \"gdiplustypes.h\"\n#include \"gdiplusinit.h\"\n#include \"gdipluspixelformats.h\"\n#include \"gdiplusmetaheader.h\"\n#include \"gdiplusimaging.h\"\n#include \"gdipluscolor.h\"\n#include \"gdipluscolormatrix.h\"\n#include \"gdiplusgpstubs.h\"\n#include \"gdipluseffects.h\"\n\n#include \"gdiplusflat.h\"\n\n#endif /* end c includes */\n\n#endif /* _GDIPLUS_H_ */\n"
  },
  {
    "path": "wine/windows/gdipluscolor.h",
    "content": "/*\n * Copyright (C) 2808 Google (Lei Zhang)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _GDIPLUSCOLOR_H\n#define _GDIPLUSCOLOR_H\n\nenum ColorChannelFlags\n{\n    ColorChannelFlagsC,\n    ColorChannelFlagsM,\n    ColorChannelFlagsY,\n    ColorChannelFlagsK,\n    ColorChannelFlagsLast\n};\n\n#ifdef __cplusplus\n\n/* FIXME: missing the methods. */\nclass Color\n{\nprotected:\n    ARGB Argb;\n};\n\n#else /* end of c++ typedefs */\n\ntypedef struct Color\n{\n    ARGB Argb;\n} Color;\n\ntypedef enum ColorChannelFlags ColorChannelFlags;\n\n#endif  /* end of c typedefs */\n\n#endif  /* _GDIPLUSCOLOR_H */\n"
  },
  {
    "path": "wine/windows/gdipluscolormatrix.h",
    "content": "/*\n * Copyright (C) 2007 Google (Evan Stade)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _GDIPLUSCOLORMATRIX_H\n#define _GDIPLUSCOLORMATRIX_H\n\nstruct ColorMatrix\n{\n    REAL m[5][5];\n};\n\nenum ColorMatrixFlags\n{\n    ColorMatrixFlagsDefault    = 0,\n    ColorMatrixFlagsSkipGrays  = 1,\n    ColorMatrixFlagsAltGray    = 2\n};\n\nenum ColorAdjustType\n{\n    ColorAdjustTypeDefault,\n    ColorAdjustTypeBitmap,\n    ColorAdjustTypeBrush,\n    ColorAdjustTypePen,\n    ColorAdjustTypeText,\n    ColorAdjustTypeCount,\n    ColorAdjustTypeAny\n};\n\nstruct ColorMap\n{\n    Color oldColor;\n    Color newColor;\n};\n\nenum HistogramFormat\n{\n    HistogramFormatARGB,\n    HistogramFormatPARGB,\n    HistogramFormatRGB,\n    HistogramFormatGray,\n    HistogramFormatB,\n    HistogramFormatG,\n    HistogramFormatR,\n    HistogramFormatA,\n};\n\n#ifndef __cplusplus\n\ntypedef enum ColorAdjustType ColorAdjustType;\ntypedef enum ColorMatrixFlags ColorMatrixFlags;\ntypedef enum HistogramFormat HistogramFormat;\ntypedef struct ColorMatrix ColorMatrix;\ntypedef struct ColorMap ColorMap;\n\n#endif  /* end of c typedefs */\n\n#endif  /* _GDIPLUSCOLORMATRIX_H */\n"
  },
  {
    "path": "wine/windows/gdipluseffects.h",
    "content": "/*\n * Copyright (C) 2015 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _GDIPLUSEFFECTS_H\n#define _GDIPLUSEFFECTS_H\n\nDEFINE_GUID(BlurEffectGuid,                   0x633c80a4, 0x1843, 0x482b, 0x9e, 0xf2, 0xbe, 0x28, 0x34, 0xc5, 0xfd, 0xd4);\nDEFINE_GUID(SharpenEffectGuid,                0x63cbf3ee, 0xc526, 0x402c, 0x8f, 0x71, 0x62, 0xc5, 0x40, 0xbf, 0x51, 0x42);\nDEFINE_GUID(ColorMatrixEffectGuid,            0x718f2615, 0x7933, 0x40e3, 0xa5, 0x11, 0x5f, 0x68, 0xfe, 0x14, 0xdd, 0x74);\nDEFINE_GUID(ColorLUTEffectGuid,               0xa7ce72a9, 0x0f7f, 0x40d7, 0xb3, 0xcc, 0xd0, 0xc0, 0x2d, 0x5c, 0x32, 0x12);\nDEFINE_GUID(BrightnessContrastEffectGuid,     0xd3a1dbe1, 0x8ec4, 0x4c17, 0x9f, 0x4c, 0xea, 0x97, 0xad, 0x1c, 0x34, 0x3d);\nDEFINE_GUID(HueSaturationLightnessEffectGuid, 0x8b2dd6c3, 0xeb07, 0x4d87, 0xa5, 0xf0, 0x71, 0x08, 0xe2, 0x6a, 0x9c, 0x5f);\nDEFINE_GUID(LevelsEffectGuid,                 0x99c354ec, 0x2a31, 0x4f3a, 0x8c, 0x34, 0x17, 0xa8, 0x03, 0xb3, 0x3a, 0x25);\nDEFINE_GUID(TintEffectGuid,                   0x1077af00, 0x2848, 0x4441, 0x94, 0x89, 0x44, 0xad, 0x4c, 0x2d, 0x7a, 0x2c);\nDEFINE_GUID(ColorBalanceEffectGuid,           0x537e597d, 0x251e, 0x48da, 0x96, 0x64, 0x29, 0xca, 0x49, 0x6b, 0x70, 0xf8);\nDEFINE_GUID(RedEyeCorrectionEffectGuid,       0x74d29d05, 0x69a4, 0x4266, 0x95, 0x49, 0x3c, 0xc5, 0x28, 0x36, 0xb6, 0x32);\nDEFINE_GUID(ColorCurveEffectGuid,             0xdd6a0022, 0x58e4, 0x4a67, 0x9d, 0x9b, 0xd4, 0x8e, 0xb8, 0x81, 0xa5, 0x3d);\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nGpStatus WINGDIPAPI GdipCreateEffect(const GUID guid, CGpEffect **effect);\nGpStatus WINGDIPAPI GdipDeleteEffect(CGpEffect *effect);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/gdiplusenums.h",
    "content": "/*\n * Copyright (C) 2007 Google (Evan Stade)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _GDIPLUSENUMS_H\n#define _GDIPLUSENUMS_H\n\ntypedef UINT GraphicsState;\ntypedef UINT GraphicsContainer;\n\nenum Unit\n{\n    UnitWorld       = 0,\n    UnitDisplay     = 1,\n    UnitPixel       = 2,\n    UnitPoint       = 3,\n    UnitInch        = 4,\n    UnitDocument    = 5,\n    UnitMillimeter  = 6\n};\n\nenum BrushType\n{\n   BrushTypeSolidColor       = 0,\n   BrushTypeHatchFill        = 1,\n   BrushTypeTextureFill      = 2,\n   BrushTypePathGradient     = 3,\n   BrushTypeLinearGradient   = 4\n};\n\nenum DriverStringOptions\n{\n   DriverStringOptionsCmapLookup      = 1,\n   DriverStringOptionsVertical        = 2,\n   DriverStringOptionsRealizedAdvance = 4,\n   DriverStringOptionsLimitSubpixel   = 8\n};\n\nenum FillMode\n{\n    FillModeAlternate   = 0,\n    FillModeWinding     = 1\n};\n\nenum LineCap\n{\n    LineCapFlat             = 0x00,\n    LineCapSquare           = 0x01,\n    LineCapRound            = 0x02,\n    LineCapTriangle         = 0x03,\n\n    LineCapNoAnchor         = 0x10,\n    LineCapSquareAnchor     = 0x11,\n    LineCapRoundAnchor      = 0x12,\n    LineCapDiamondAnchor    = 0x13,\n    LineCapArrowAnchor      = 0x14,\n\n    LineCapCustom           = 0xff,\n    LineCapAnchorMask       = 0xf0\n};\n\nenum CustomLineCapType\n{\n    CustomLineCapTypeDefault         = 0,\n    CustomLineCapTypeAdjustableArrow = 1\n};\n\nenum PathPointType{\n    PathPointTypeStart          = 0,    /* start of a figure */\n    PathPointTypeLine           = 1,\n    PathPointTypeBezier         = 3,\n    PathPointTypePathTypeMask   = 7,\n    PathPointTypePathDashMode   = 16,   /* not used */\n    PathPointTypePathMarker     = 32,\n    PathPointTypeCloseSubpath   = 128,  /* end of a closed figure */\n    PathPointTypeBezier3        = 3\n};\n\nenum PenType\n{\n   PenTypeSolidColor       = BrushTypeSolidColor,\n   PenTypeHatchFill        = BrushTypeHatchFill,\n   PenTypeTextureFill      = BrushTypeTextureFill,\n   PenTypePathGradient     = BrushTypePathGradient,\n   PenTypeLinearGradient   = BrushTypeLinearGradient,\n   PenTypeUnknown          = -1\n};\n\nenum LineJoin\n{\n    LineJoinMiter           = 0,\n    LineJoinBevel           = 1,\n    LineJoinRound           = 2,\n    LineJoinMiterClipped    = 3\n};\n\nenum QualityMode\n{\n    QualityModeInvalid  = -1,\n    QualityModeDefault  = 0,\n    QualityModeLow      = 1,\n    QualityModeHigh     = 2\n};\n\nenum SmoothingMode\n{\n    SmoothingModeInvalid     = QualityModeInvalid,\n    SmoothingModeDefault     = QualityModeDefault,\n    SmoothingModeHighSpeed   = QualityModeLow,\n    SmoothingModeHighQuality = QualityModeHigh,\n    SmoothingModeNone,\n    SmoothingModeAntiAlias\n};\n\nenum CompositingQuality\n{\n    CompositingQualityInvalid          = QualityModeInvalid,\n    CompositingQualityDefault          = QualityModeDefault,\n    CompositingQualityHighSpeed        = QualityModeLow,\n    CompositingQualityHighQuality      = QualityModeHigh,\n    CompositingQualityGammaCorrected,\n    CompositingQualityAssumeLinear\n};\n\nenum InterpolationMode\n{\n    InterpolationModeInvalid        = QualityModeInvalid,\n    InterpolationModeDefault        = QualityModeDefault,\n    InterpolationModeLowQuality     = QualityModeLow,\n    InterpolationModeHighQuality    = QualityModeHigh,\n    InterpolationModeBilinear,\n    InterpolationModeBicubic,\n    InterpolationModeNearestNeighbor,\n    InterpolationModeHighQualityBilinear,\n    InterpolationModeHighQualityBicubic\n};\n\nenum PenAlignment\n{\n    PenAlignmentCenter   = 0,\n    PenAlignmentInset    = 1\n};\n\nenum PixelOffsetMode\n{\n    PixelOffsetModeInvalid     = QualityModeInvalid,\n    PixelOffsetModeDefault     = QualityModeDefault,\n    PixelOffsetModeHighSpeed   = QualityModeLow,\n    PixelOffsetModeHighQuality = QualityModeHigh,\n    PixelOffsetModeNone,\n    PixelOffsetModeHalf\n};\n\nenum DashCap\n{\n    DashCapFlat     = 0,\n    DashCapRound    = 2,\n    DashCapTriangle = 3\n};\n\nenum DashStyle\n{\n    DashStyleSolid,\n    DashStyleDash,\n    DashStyleDot,\n    DashStyleDashDot,\n    DashStyleDashDotDot,\n    DashStyleCustom\n};\n\nenum MatrixOrder\n{\n    MatrixOrderPrepend = 0,\n    MatrixOrderAppend  = 1\n};\n\nenum ImageType\n{\n    ImageTypeUnknown,\n    ImageTypeBitmap,\n    ImageTypeMetafile\n};\n\nenum WarpMode {\n    WarpModePerspective,\n    WarpModeBilinear\n};\n\nenum WrapMode\n{\n    WrapModeTile,\n    WrapModeTileFlipX,\n    WrapModeTileFlipY,\n    WrapModeTileFlipXY,\n    WrapModeClamp\n};\n\nenum MetafileType\n{\n    MetafileTypeInvalid,\n    MetafileTypeWmf,\n    MetafileTypeWmfPlaceable,\n    MetafileTypeEmf,\n    MetafileTypeEmfPlusOnly,\n    MetafileTypeEmfPlusDual\n};\n\nenum LinearGradientMode\n{\n    LinearGradientModeHorizontal,\n    LinearGradientModeVertical,\n    LinearGradientModeForwardDiagonal,\n    LinearGradientModeBackwardDiagonal\n};\n\nenum EmfType\n{\n    EmfTypeEmfOnly     = MetafileTypeEmf,\n    EmfTypeEmfPlusOnly = MetafileTypeEmfPlusOnly,\n    EmfTypeEmfPlusDual = MetafileTypeEmfPlusDual\n};\n\nenum CompositingMode\n{\n    CompositingModeSourceOver,\n    CompositingModeSourceCopy\n};\n\nenum TextRenderingHint\n{\n    TextRenderingHintSystemDefault = 0,\n    TextRenderingHintSingleBitPerPixelGridFit,\n    TextRenderingHintSingleBitPerPixel,\n    TextRenderingHintAntiAliasGridFit,\n    TextRenderingHintAntiAlias,\n    TextRenderingHintClearTypeGridFit\n};\n\nenum StringAlignment\n{\n    StringAlignmentNear    = 0,\n    StringAlignmentCenter  = 1,\n    StringAlignmentFar     = 2\n};\n\nenum  StringDigitSubstitute\n{\n    StringDigitSubstituteUser        = 0,\n    StringDigitSubstituteNone        = 1,\n    StringDigitSubstituteNational    = 2,\n    StringDigitSubstituteTraditional = 3\n};\n\nenum StringFormatFlags\n{\n    StringFormatFlagsDirectionRightToLeft  = 0x00000001,\n    StringFormatFlagsDirectionVertical     = 0x00000002,\n    StringFormatFlagsNoFitBlackBox         = 0x00000004,\n    StringFormatFlagsDisplayFormatControl  = 0x00000020,\n    StringFormatFlagsNoFontFallback        = 0x00000400,\n    StringFormatFlagsMeasureTrailingSpaces = 0x00000800,\n    StringFormatFlagsNoWrap                = 0x00001000,\n    StringFormatFlagsLineLimit             = 0x00002000,\n    StringFormatFlagsNoClip                = 0x00004000\n};\n\nenum StringTrimming\n{\n    StringTrimmingNone                 = 0,\n    StringTrimmingCharacter            = 1,\n    StringTrimmingWord                 = 2,\n    StringTrimmingEllipsisCharacter    = 3,\n    StringTrimmingEllipsisWord         = 4,\n    StringTrimmingEllipsisPath         = 5\n};\n\nenum FontStyle\n{\n    FontStyleRegular    = 0,\n    FontStyleBold       = 1,\n    FontStyleItalic     = 2,\n    FontStyleBoldItalic = 3,\n    FontStyleUnderline  = 4,\n    FontStyleStrikeout  = 8\n};\n\nenum HotkeyPrefix\n{\n    HotkeyPrefixNone   = 0,\n    HotkeyPrefixShow   = 1,\n    HotkeyPrefixHide   = 2\n};\n\nenum ImageCodecFlags\n{\n    ImageCodecFlagsEncoder          = 1,\n    ImageCodecFlagsDecoder          = 2,\n    ImageCodecFlagsSupportBitmap    = 4,\n    ImageCodecFlagsSupportVector    = 8,\n    ImageCodecFlagsSeekableEncode   = 16,\n    ImageCodecFlagsBlockingDecode   = 32,\n    ImageCodecFlagsBuiltin          = 65536,\n    ImageCodecFlagsSystem           = 131072,\n    ImageCodecFlagsUser             = 262144\n};\n\nenum ImageFlags\n{\n    ImageFlagsNone              = 0,\n    ImageFlagsScalable          = 0x0001,\n    ImageFlagsHasAlpha          = 0x0002,\n    ImageFlagsHasTranslucent    = 0x0004,\n    ImageFlagsPartiallyScalable = 0x0008,\n    ImageFlagsColorSpaceRGB     = 0x0010,\n    ImageFlagsColorSpaceCMYK    = 0x0020,\n    ImageFlagsColorSpaceGRAY    = 0x0040,\n    ImageFlagsColorSpaceYCBCR   = 0x0080,\n    ImageFlagsColorSpaceYCCK    = 0x0100,\n    ImageFlagsHasRealDPI        = 0x1000,\n    ImageFlagsHasRealPixelSize  = 0x2000,\n    ImageFlagsReadOnly          = 0x00010000,\n    ImageFlagsCaching           = 0x00020000\n};\n\nenum CombineMode\n{\n    CombineModeReplace,\n    CombineModeIntersect,\n    CombineModeUnion,\n    CombineModeXor,\n    CombineModeExclude,\n    CombineModeComplement\n};\n\nenum FlushIntention\n{\n    FlushIntentionFlush = 0,\n    FlushIntentionSync  = 1\n};\n\nenum CoordinateSpace\n{\n    CoordinateSpaceWorld,\n    CoordinateSpacePage,\n    CoordinateSpaceDevice\n};\n\nenum GpTestControlEnum\n{\n    TestControlForceBilinear  = 0,\n    TestControlNoICM          = 1,\n    TestControlGetBuildNumber = 2\n};\n\nenum MetafileFrameUnit\n{\n    MetafileFrameUnitPixel      = UnitPixel,\n    MetafileFrameUnitPoint      = UnitPoint,\n    MetafileFrameUnitInch       = UnitInch,\n    MetafileFrameUnitDocument   = UnitDocument,\n    MetafileFrameUnitMillimeter = UnitMillimeter,\n    MetafileFrameUnitGdi\n};\n\nenum HatchStyle\n{\n\tHatchStyleHorizontal = 0,\n\tHatchStyleVertical = 1,\n\tHatchStyleForwardDiagonal = 2,\n\tHatchStyleBackwardDiagonal = 3,\n\tHatchStyleCross = 4,\n\tHatchStyleDiagonalCross = 5,\n\tHatchStyle05Percent = 6,\n\tHatchStyle10Percent = 7,\n\tHatchStyle20Percent = 8,\n\tHatchStyle25Percent = 9,\n\tHatchStyle30Percent = 10,\n\tHatchStyle40Percent = 11,\n\tHatchStyle50Percent = 12,\n\tHatchStyle60Percent = 13,\n\tHatchStyle70Percent = 14,\n\tHatchStyle75Percent = 15,\n\tHatchStyle80Percent = 16,\n\tHatchStyle90Percent = 17,\n\tHatchStyleLightDownwardDiagonal = 18,\n\tHatchStyleLightUpwardDiagonal = 19,\n\tHatchStyleDarkDownwardDiagonal = 20,\n\tHatchStyleDarkUpwardDiagonal = 21,\n\tHatchStyleWideDownwardDiagonal = 22,\n\tHatchStyleWideUpwardDiagonal = 23,\n\tHatchStyleLightVertical = 24,\n\tHatchStyleLightHorizontal = 25,\n\tHatchStyleNarrowVertical = 26,\n\tHatchStyleNarrowHorizontal = 27,\n\tHatchStyleDarkVertical = 28,\n\tHatchStyleDarkHorizontal = 29,\n\tHatchStyleDashedDownwardDiagonal = 30,\n\tHatchStyleDashedUpwardDiagonal = 31,\n\tHatchStyleDashedHorizontal = 32,\n\tHatchStyleDashedVertical = 33,\n\tHatchStyleSmallConfetti = 34,\n\tHatchStyleLargeConfetti = 35,\n\tHatchStyleZigZag = 36,\n\tHatchStyleWave = 37,\n\tHatchStyleDiagonalBrick = 38,\n\tHatchStyleHorizontalBrick = 39,\n\tHatchStyleWeave = 40,\n\tHatchStylePlaid = 41,\n\tHatchStyleDivot = 42,\n\tHatchStyleDottedGrid = 43,\n\tHatchStyleDottedDiamond = 44,\n\tHatchStyleShingle = 45,\n\tHatchStyleTrellis = 46,\n\tHatchStyleSphere = 47,\n\tHatchStyleSmallGrid = 48,\n\tHatchStyleSmallCheckerBoard = 49,\n\tHatchStyleLargeCheckerBoard = 50,\n\tHatchStyleOutlinedDiamond = 51,\n\tHatchStyleSolidDiamond = 52,\n\tHatchStyleTotal = 53,\n\tHatchStyleLargeGrid = HatchStyleCross,\n\tHatchStyleMin = HatchStyleHorizontal,\n\tHatchStyleMax = HatchStyleTotal - 1\n};\n\n#define GDIP_EMFPLUS_RECORD_BASE 0x00004000\n#define GDIP_WMF_RECORD_BASE 0x00010000\n#define GDIP_WMF_RECORD_TO_EMFPLUS(x) ((x)|GDIP_WMF_RECORD_BASE)\n\nenum EmfPlusRecordType {\n    WmfRecordTypeSetBkColor = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETBKCOLOR),\n    WmfRecordTypeSetBkMode = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETBKMODE),\n    WmfRecordTypeSetMapMode = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETMAPMODE),\n    WmfRecordTypeSetROP2 = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETROP2),\n    WmfRecordTypeSetRelAbs = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETRELABS),\n    WmfRecordTypeSetPolyFillMode = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPOLYFILLMODE),\n    WmfRecordTypeSetStretchBltMode = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETSTRETCHBLTMODE),\n    WmfRecordTypeSetTextCharExtra = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTCHAREXTRA),\n    WmfRecordTypeSetTextColor = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTCOLOR),\n    WmfRecordTypeSetTextJustification = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTJUSTIFICATION),\n    WmfRecordTypeSetWindowOrg = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETWINDOWORG),\n    WmfRecordTypeSetWindowExt = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETWINDOWEXT),\n    WmfRecordTypeSetViewportOrg = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETVIEWPORTORG),\n    WmfRecordTypeSetViewportExt = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETVIEWPORTEXT),\n    WmfRecordTypeOffsetWindowOrg = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETWINDOWORG),\n    WmfRecordTypeScaleWindowExt = GDIP_WMF_RECORD_TO_EMFPLUS(META_SCALEWINDOWEXT),\n    WmfRecordTypeOffsetViewportOrg = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETVIEWPORTORG),\n    WmfRecordTypeScaleViewportExt = GDIP_WMF_RECORD_TO_EMFPLUS(META_SCALEVIEWPORTEXT),\n    WmfRecordTypeLineTo = GDIP_WMF_RECORD_TO_EMFPLUS(META_LINETO),\n    WmfRecordTypeMoveTo = GDIP_WMF_RECORD_TO_EMFPLUS(META_MOVETO),\n    WmfRecordTypeExcludeClipRect = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXCLUDECLIPRECT),\n    WmfRecordTypeIntersectClipRect = GDIP_WMF_RECORD_TO_EMFPLUS(META_INTERSECTCLIPRECT),\n    WmfRecordTypeArc = GDIP_WMF_RECORD_TO_EMFPLUS(META_ARC),\n    WmfRecordTypeEllipse = GDIP_WMF_RECORD_TO_EMFPLUS(META_ELLIPSE),\n    WmfRecordTypeFloodFill = GDIP_WMF_RECORD_TO_EMFPLUS(META_FLOODFILL),\n    WmfRecordTypePie = GDIP_WMF_RECORD_TO_EMFPLUS(META_PIE),\n    WmfRecordTypeRectangle = GDIP_WMF_RECORD_TO_EMFPLUS(META_RECTANGLE),\n    WmfRecordTypeRoundRect = GDIP_WMF_RECORD_TO_EMFPLUS(META_ROUNDRECT),\n    WmfRecordTypePatBlt = GDIP_WMF_RECORD_TO_EMFPLUS(META_PATBLT),\n    WmfRecordTypeSaveDC = GDIP_WMF_RECORD_TO_EMFPLUS(META_SAVEDC),\n    WmfRecordTypeSetPixel = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPIXEL),\n    WmfRecordTypeOffsetClipRgn = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETCLIPRGN),\n    WmfRecordTypeTextOut = GDIP_WMF_RECORD_TO_EMFPLUS(META_TEXTOUT),\n    WmfRecordTypeBitBlt = GDIP_WMF_RECORD_TO_EMFPLUS(META_BITBLT),\n    WmfRecordTypeStretchBlt = GDIP_WMF_RECORD_TO_EMFPLUS(META_STRETCHBLT),\n    WmfRecordTypePolygon = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYGON),\n    WmfRecordTypePolyline = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYLINE),\n    WmfRecordTypeEscape = GDIP_WMF_RECORD_TO_EMFPLUS(META_ESCAPE),\n    WmfRecordTypeRestoreDC = GDIP_WMF_RECORD_TO_EMFPLUS(META_RESTOREDC),\n    WmfRecordTypeFillRegion = GDIP_WMF_RECORD_TO_EMFPLUS(META_FILLREGION),\n    WmfRecordTypeFrameRegion = GDIP_WMF_RECORD_TO_EMFPLUS(META_FRAMEREGION),\n    WmfRecordTypeInvertRegion = GDIP_WMF_RECORD_TO_EMFPLUS(META_INVERTREGION),\n    WmfRecordTypePaintRegion = GDIP_WMF_RECORD_TO_EMFPLUS(META_PAINTREGION),\n    WmfRecordTypeSelectClipRegion = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTCLIPREGION),\n    WmfRecordTypeSelectObject = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTOBJECT),\n    WmfRecordTypeSetTextAlign = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTALIGN),\n    WmfRecordTypeDrawText = GDIP_WMF_RECORD_TO_EMFPLUS(0x062F),\n    WmfRecordTypeChord = GDIP_WMF_RECORD_TO_EMFPLUS(META_CHORD),\n    WmfRecordTypeSetMapperFlags = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETMAPPERFLAGS),\n    WmfRecordTypeExtTextOut = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXTTEXTOUT),\n    WmfRecordTypeSetDIBToDev = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETDIBTODEV),\n    WmfRecordTypeSelectPalette = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTPALETTE),\n    WmfRecordTypeRealizePalette = GDIP_WMF_RECORD_TO_EMFPLUS(META_REALIZEPALETTE),\n    WmfRecordTypeAnimatePalette = GDIP_WMF_RECORD_TO_EMFPLUS(META_ANIMATEPALETTE),\n    WmfRecordTypeSetPalEntries = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPALENTRIES),\n    WmfRecordTypePolyPolygon = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYPOLYGON),\n    WmfRecordTypeResizePalette = GDIP_WMF_RECORD_TO_EMFPLUS(META_RESIZEPALETTE),\n    WmfRecordTypeDIBBitBlt = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBBITBLT),\n    WmfRecordTypeDIBStretchBlt = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBSTRETCHBLT),\n    WmfRecordTypeDIBCreatePatternBrush = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBCREATEPATTERNBRUSH),\n    WmfRecordTypeStretchDIB = GDIP_WMF_RECORD_TO_EMFPLUS(META_STRETCHDIB),\n    WmfRecordTypeExtFloodFill = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXTFLOODFILL),\n    WmfRecordTypeSetLayout = GDIP_WMF_RECORD_TO_EMFPLUS(0x0149),\n    WmfRecordTypeResetDC = GDIP_WMF_RECORD_TO_EMFPLUS(0x014C),\n    WmfRecordTypeStartDoc = GDIP_WMF_RECORD_TO_EMFPLUS(0x014D),\n    WmfRecordTypeStartPage = GDIP_WMF_RECORD_TO_EMFPLUS(0x004F),\n    WmfRecordTypeEndPage = GDIP_WMF_RECORD_TO_EMFPLUS(0x0050),\n    WmfRecordTypeAbortDoc = GDIP_WMF_RECORD_TO_EMFPLUS(0x0052),\n    WmfRecordTypeEndDoc = GDIP_WMF_RECORD_TO_EMFPLUS(0x005E),\n    WmfRecordTypeDeleteObject = GDIP_WMF_RECORD_TO_EMFPLUS(META_DELETEOBJECT),\n    WmfRecordTypeCreatePalette = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPALETTE),\n    WmfRecordTypeCreateBrush = GDIP_WMF_RECORD_TO_EMFPLUS(0x00F8),\n    WmfRecordTypeCreatePatternBrush = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPATTERNBRUSH),\n    WmfRecordTypeCreatePenIndirect = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPENINDIRECT),\n    WmfRecordTypeCreateFontIndirect = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEFONTINDIRECT),\n    WmfRecordTypeCreateBrushIndirect = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEBRUSHINDIRECT),\n    WmfRecordTypeCreateBitmapIndirect = GDIP_WMF_RECORD_TO_EMFPLUS(0x02FD),\n    WmfRecordTypeCreateBitmap = GDIP_WMF_RECORD_TO_EMFPLUS(0x06FE),\n    WmfRecordTypeCreateRegion = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEREGION),\n    EmfRecordTypeHeader = EMR_HEADER,\n    EmfRecordTypePolyBezier = EMR_POLYBEZIER,\n    EmfRecordTypePolygon = EMR_POLYGON,\n    EmfRecordTypePolyline = EMR_POLYLINE,\n    EmfRecordTypePolyBezierTo = EMR_POLYBEZIERTO,\n    EmfRecordTypePolyLineTo = EMR_POLYLINETO,\n    EmfRecordTypePolyPolyline = EMR_POLYPOLYLINE,\n    EmfRecordTypePolyPolygon = EMR_POLYPOLYGON,\n    EmfRecordTypeSetWindowExtEx = EMR_SETWINDOWEXTEX,\n    EmfRecordTypeSetWindowOrgEx = EMR_SETWINDOWORGEX,\n    EmfRecordTypeSetViewportExtEx = EMR_SETVIEWPORTEXTEX,\n    EmfRecordTypeSetViewportOrgEx = EMR_SETVIEWPORTORGEX,\n    EmfRecordTypeSetBrushOrgEx = EMR_SETBRUSHORGEX,\n    EmfRecordTypeEOF = EMR_EOF,\n    EmfRecordTypeSetPixelV = EMR_SETPIXELV,\n    EmfRecordTypeSetMapperFlags = EMR_SETMAPPERFLAGS,\n    EmfRecordTypeSetMapMode = EMR_SETMAPMODE,\n    EmfRecordTypeSetBkMode = EMR_SETBKMODE,\n    EmfRecordTypeSetPolyFillMode = EMR_SETPOLYFILLMODE,\n    EmfRecordTypeSetROP2 = EMR_SETROP2,\n    EmfRecordTypeSetStretchBltMode = EMR_SETSTRETCHBLTMODE,\n    EmfRecordTypeSetTextAlign = EMR_SETTEXTALIGN,\n    EmfRecordTypeSetColorAdjustment = EMR_SETCOLORADJUSTMENT,\n    EmfRecordTypeSetTextColor = EMR_SETTEXTCOLOR,\n    EmfRecordTypeSetBkColor = EMR_SETBKCOLOR,\n    EmfRecordTypeOffsetClipRgn = EMR_OFFSETCLIPRGN,\n    EmfRecordTypeMoveToEx = EMR_MOVETOEX,\n    EmfRecordTypeSetMetaRgn = EMR_SETMETARGN,\n    EmfRecordTypeExcludeClipRect = EMR_EXCLUDECLIPRECT,\n    EmfRecordTypeIntersectClipRect = EMR_INTERSECTCLIPRECT,\n    EmfRecordTypeScaleViewportExtEx = EMR_SCALEVIEWPORTEXTEX,\n    EmfRecordTypeScaleWindowExtEx = EMR_SCALEWINDOWEXTEX,\n    EmfRecordTypeSaveDC = EMR_SAVEDC,\n    EmfRecordTypeRestoreDC = EMR_RESTOREDC,\n    EmfRecordTypeSetWorldTransform = EMR_SETWORLDTRANSFORM,\n    EmfRecordTypeModifyWorldTransform = EMR_MODIFYWORLDTRANSFORM,\n    EmfRecordTypeSelectObject = EMR_SELECTOBJECT,\n    EmfRecordTypeCreatePen = EMR_CREATEPEN,\n    EmfRecordTypeCreateBrushIndirect = EMR_CREATEBRUSHINDIRECT,\n    EmfRecordTypeDeleteObject = EMR_DELETEOBJECT,\n    EmfRecordTypeAngleArc = EMR_ANGLEARC,\n    EmfRecordTypeEllipse = EMR_ELLIPSE,\n    EmfRecordTypeRectangle = EMR_RECTANGLE,\n    EmfRecordTypeRoundRect = EMR_ROUNDRECT,\n    EmfRecordTypeArc = EMR_ARC,\n    EmfRecordTypeChord = EMR_CHORD,\n    EmfRecordTypePie = EMR_PIE,\n    EmfRecordTypeSelectPalette = EMR_SELECTPALETTE,\n    EmfRecordTypeCreatePalette = EMR_CREATEPALETTE,\n    EmfRecordTypeSetPaletteEntries = EMR_SETPALETTEENTRIES,\n    EmfRecordTypeResizePalette = EMR_RESIZEPALETTE,\n    EmfRecordTypeRealizePalette = EMR_REALIZEPALETTE,\n    EmfRecordTypeExtFloodFill = EMR_EXTFLOODFILL,\n    EmfRecordTypeLineTo = EMR_LINETO,\n    EmfRecordTypeArcTo = EMR_ARCTO,\n    EmfRecordTypePolyDraw = EMR_POLYDRAW,\n    EmfRecordTypeSetArcDirection = EMR_SETARCDIRECTION,\n    EmfRecordTypeSetMiterLimit = EMR_SETMITERLIMIT,\n    EmfRecordTypeBeginPath = EMR_BEGINPATH,\n    EmfRecordTypeEndPath = EMR_ENDPATH,\n    EmfRecordTypeCloseFigure = EMR_CLOSEFIGURE,\n    EmfRecordTypeFillPath = EMR_FILLPATH,\n    EmfRecordTypeStrokeAndFillPath = EMR_STROKEANDFILLPATH,\n    EmfRecordTypeStrokePath = EMR_STROKEPATH,\n    EmfRecordTypeFlattenPath = EMR_FLATTENPATH,\n    EmfRecordTypeWidenPath = EMR_WIDENPATH,\n    EmfRecordTypeSelectClipPath = EMR_SELECTCLIPPATH,\n    EmfRecordTypeAbortPath = EMR_ABORTPATH,\n    EmfRecordTypeReserved_069 = 69,\n    EmfRecordTypeGdiComment = EMR_GDICOMMENT,\n    EmfRecordTypeFillRgn = EMR_FILLRGN,\n    EmfRecordTypeFrameRgn = EMR_FRAMERGN,\n    EmfRecordTypeInvertRgn = EMR_INVERTRGN,\n    EmfRecordTypePaintRgn = EMR_PAINTRGN,\n    EmfRecordTypeExtSelectClipRgn = EMR_EXTSELECTCLIPRGN,\n    EmfRecordTypeBitBlt = EMR_BITBLT,\n    EmfRecordTypeStretchBlt = EMR_STRETCHBLT,\n    EmfRecordTypeMaskBlt = EMR_MASKBLT,\n    EmfRecordTypePlgBlt = EMR_PLGBLT,\n    EmfRecordTypeSetDIBitsToDevice = 80,\n    EmfRecordTypeStretchDIBits = EMR_STRETCHDIBITS,\n    EmfRecordTypeExtCreateFontIndirect = EMR_EXTCREATEFONTINDIRECTW,\n    EmfRecordTypeExtTextOutA = EMR_EXTTEXTOUTA,\n    EmfRecordTypeExtTextOutW = EMR_EXTTEXTOUTW,\n    EmfRecordTypePolyBezier16 = EMR_POLYBEZIER16,\n    EmfRecordTypePolygon16 = EMR_POLYGON16,\n    EmfRecordTypePolyline16 = EMR_POLYLINE16,\n    EmfRecordTypePolyBezierTo16 = EMR_POLYBEZIERTO16,\n    EmfRecordTypePolylineTo16 = EMR_POLYLINETO16,\n    EmfRecordTypePolyPolyline16 = EMR_POLYPOLYLINE16,\n    EmfRecordTypePolyPolygon16 = EMR_POLYPOLYGON16,\n    EmfRecordTypePolyDraw16 = EMR_POLYDRAW16,\n    EmfRecordTypeCreateMonoBrush = EMR_CREATEMONOBRUSH,\n    EmfRecordTypeCreateDIBPatternBrushPt = EMR_CREATEDIBPATTERNBRUSHPT,\n    EmfRecordTypeExtCreatePen = EMR_EXTCREATEPEN,\n    EmfRecordTypePolyTextOutA = EMR_POLYTEXTOUTA,\n    EmfRecordTypePolyTextOutW = EMR_POLYTEXTOUTW,\n    EmfRecordTypeSetICMMode = 98,\n    EmfRecordTypeCreateColorSpace = 99,\n    EmfRecordTypeSetColorSpace = 100,\n    EmfRecordTypeDeleteColorSpace = 101,\n    EmfRecordTypeGLSRecord = 102,\n    EmfRecordTypeGLSBoundedRecord = 103,\n    EmfRecordTypePixelFormat = 104,\n    EmfRecordTypeDrawEscape = 105,\n    EmfRecordTypeExtEscape = 106,\n    EmfRecordTypeStartDoc = 107,\n    EmfRecordTypeSmallTextOut = 108,\n    EmfRecordTypeForceUFIMapping = 109,\n    EmfRecordTypeNamedEscape = 110,\n    EmfRecordTypeColorCorrectPalette = 111,\n    EmfRecordTypeSetICMProfileA = 112,\n    EmfRecordTypeSetICMProfileW = 113,\n    EmfRecordTypeAlphaBlend = 114,\n    EmfRecordTypeSetLayout = 115,\n    EmfRecordTypeTransparentBlt = 116,\n    EmfRecordTypeReserved_117 = 117,\n    EmfRecordTypeGradientFill = 118,\n    EmfRecordTypeSetLinkedUFIs = 119,\n    EmfRecordTypeSetTextJustification = 120,\n    EmfRecordTypeColorMatchToTargetW = 121,\n    EmfRecordTypeCreateColorSpaceW = 122,\n    EmfRecordTypeMax = 122,\n    EmfRecordTypeMin = 1,\n    EmfPlusRecordTypeInvalid = GDIP_EMFPLUS_RECORD_BASE,\n    EmfPlusRecordTypeHeader,\n    EmfPlusRecordTypeEndOfFile,\n    EmfPlusRecordTypeComment,\n    EmfPlusRecordTypeGetDC,\n    EmfPlusRecordTypeMultiFormatStart,\n    EmfPlusRecordTypeMultiFormatSection,\n    EmfPlusRecordTypeMultiFormatEnd,\n    EmfPlusRecordTypeObject,\n    EmfPlusRecordTypeClear,\n    EmfPlusRecordTypeFillRects,\n    EmfPlusRecordTypeDrawRects,\n    EmfPlusRecordTypeFillPolygon,\n    EmfPlusRecordTypeDrawLines,\n    EmfPlusRecordTypeFillEllipse,\n    EmfPlusRecordTypeDrawEllipse,\n    EmfPlusRecordTypeFillPie,\n    EmfPlusRecordTypeDrawPie,\n    EmfPlusRecordTypeDrawArc,\n    EmfPlusRecordTypeFillRegion,\n    EmfPlusRecordTypeFillPath,\n    EmfPlusRecordTypeDrawPath,\n    EmfPlusRecordTypeFillClosedCurve,\n    EmfPlusRecordTypeDrawClosedCurve,\n    EmfPlusRecordTypeDrawCurve,\n    EmfPlusRecordTypeDrawBeziers,\n    EmfPlusRecordTypeDrawImage,\n    EmfPlusRecordTypeDrawImagePoints,\n    EmfPlusRecordTypeDrawString,\n    EmfPlusRecordTypeSetRenderingOrigin,\n    EmfPlusRecordTypeSetAntiAliasMode,\n    EmfPlusRecordTypeSetTextRenderingHint,\n    EmfPlusRecordTypeSetTextContrast,\n    EmfPlusRecordTypeSetInterpolationMode,\n    EmfPlusRecordTypeSetPixelOffsetMode,\n    EmfPlusRecordTypeSetCompositingMode,\n    EmfPlusRecordTypeSetCompositingQuality,\n    EmfPlusRecordTypeSave,\n    EmfPlusRecordTypeRestore,\n    EmfPlusRecordTypeBeginContainer,\n    EmfPlusRecordTypeBeginContainerNoParams,\n    EmfPlusRecordTypeEndContainer,\n    EmfPlusRecordTypeSetWorldTransform,\n    EmfPlusRecordTypeResetWorldTransform,\n    EmfPlusRecordTypeMultiplyWorldTransform,\n    EmfPlusRecordTypeTranslateWorldTransform,\n    EmfPlusRecordTypeScaleWorldTransform,\n    EmfPlusRecordTypeRotateWorldTransform,\n    EmfPlusRecordTypeSetPageTransform,\n    EmfPlusRecordTypeResetClip,\n    EmfPlusRecordTypeSetClipRect,\n    EmfPlusRecordTypeSetClipPath,\n    EmfPlusRecordTypeSetClipRegion,\n    EmfPlusRecordTypeOffsetClip,\n    EmfPlusRecordTypeDrawDriverString,\n    EmfPlusRecordTypeStrokeFillPath,\n    EmfPlusRecordTypeSerializableObject,\n    EmfPlusRecordTypeSetTSGraphics,\n    EmfPlusRecordTypeSetTSClip,\n    EmfPlusRecordTotal,\n    EmfPlusRecordTypeMax = EmfPlusRecordTotal-1,\n    EmfPlusRecordTypeMin = EmfPlusRecordTypeHeader\n};\n\n#define FlatnessDefault 0.25f\n\n#ifndef __cplusplus\n\ntypedef enum Unit Unit;\ntypedef enum BrushType BrushType;\ntypedef enum DriverStringOptions DriverStringOptions;\ntypedef enum FillMode FillMode;\ntypedef enum LineCap LineCap;\ntypedef enum CustomLineCapType CustomLineCapType;\ntypedef enum PathPointType PathPointType;\ntypedef enum LineJoin LineJoin;\ntypedef enum QualityMode QualityMode;\ntypedef enum SmoothingMode SmoothingMode;\ntypedef enum CompositingQuality CompositingQuality;\ntypedef enum InterpolationMode InterpolationMode;\ntypedef enum PixelOffsetMode PixelOffsetMode;\ntypedef enum DashCap DashCap;\ntypedef enum DashStyle DashStyle;\ntypedef enum MatrixOrder MatrixOrder;\ntypedef enum ImageType ImageType;\ntypedef enum ImageFlags ImageFlags;\ntypedef enum WarpMode WarpMode;\ntypedef enum WrapMode WrapMode;\ntypedef enum MetafileType MetafileType;\ntypedef enum LinearGradientMode LinearGradientMode;\ntypedef enum EmfType EmfType;\ntypedef enum CompositingMode CompositingMode;\ntypedef enum TextRenderingHint TextRenderingHint;\ntypedef enum StringAlignment StringAlignment;\ntypedef enum StringDigitSubstitute StringDigitSubstitute;\ntypedef enum StringTrimming StringTrimming;\ntypedef enum FontStyle FontStyle;\ntypedef enum StringFormatFlags StringFormatFlags;\ntypedef enum HotkeyPrefix HotkeyPrefix;\ntypedef enum PenAlignment PenAlignment;\ntypedef enum PaletteFlags PaletteFlags;\ntypedef enum ImageCodecFlags ImageCodecFlags;\ntypedef enum CombineMode CombineMode;\ntypedef enum FlushIntention FlushIntention;\ntypedef enum CoordinateSpace CoordinateSpace;\ntypedef enum GpTestControlEnum GpTestControlEnum;\ntypedef enum MetafileFrameUnit MetafileFrameUnit;\ntypedef enum PenType PenType;\ntypedef enum HatchStyle HatchStyle;\ntypedef enum EmfPlusRecordType EmfPlusRecordType;\n\n#endif /* end of c typedefs */\n\n#undef GDIP_WMF_RECORD_TO_EMFPLUS\n#define GDIP_WMF_RECORD_TO_EMFPLUS(x) ((EmfPlusRecordType)((x)|GDIP_WMF_RECORD_BASE))\n\n#endif\n"
  },
  {
    "path": "wine/windows/gdiplusflat.h",
    "content": "/*\n * Copyright (C) 2007 Google (Evan Stade)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _FLATAPI_H\n#define _FLATAPI_H\n\n#define WINGDIPAPI __stdcall\n\n#define GDIPCONST const\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* AdjustableArrowCap */\nGpStatus WINGDIPAPI GdipCreateAdjustableArrowCap(REAL,REAL,BOOL,GpAdjustableArrowCap**);\nGpStatus WINGDIPAPI GdipGetAdjustableArrowCapFillState(GpAdjustableArrowCap*,BOOL*);\nGpStatus WINGDIPAPI GdipGetAdjustableArrowCapHeight(GpAdjustableArrowCap*,REAL*);\nGpStatus WINGDIPAPI GdipGetAdjustableArrowCapMiddleInset(GpAdjustableArrowCap*,REAL*);\nGpStatus WINGDIPAPI GdipGetAdjustableArrowCapWidth(GpAdjustableArrowCap*,REAL*);\nGpStatus WINGDIPAPI GdipSetAdjustableArrowCapFillState(GpAdjustableArrowCap*,BOOL);\nGpStatus WINGDIPAPI GdipSetAdjustableArrowCapHeight(GpAdjustableArrowCap*,REAL);\nGpStatus WINGDIPAPI GdipSetAdjustableArrowCapMiddleInset(GpAdjustableArrowCap*,REAL);\nGpStatus WINGDIPAPI GdipSetAdjustableArrowCapWidth(GpAdjustableArrowCap*,REAL);\n\n/* Bitmap */\nGpStatus WINGDIPAPI GdipBitmapApplyEffect(GpBitmap*,CGpEffect*,RECT*,BOOL,VOID**,INT*);\nGpStatus WINGDIPAPI GdipBitmapCreateApplyEffect(GpBitmap**,INT,CGpEffect*,RECT*,RECT*,GpBitmap**,BOOL,VOID**,INT*);\nGpStatus WINGDIPAPI GdipBitmapGetHistogram(GpBitmap*,HistogramFormat,UINT,UINT*,UINT*,UINT*,UINT*);\nGpStatus WINGDIPAPI GdipBitmapGetHistogramSize(HistogramFormat,UINT*);\nGpStatus WINGDIPAPI GdipBitmapGetPixel(GpBitmap*,INT,INT,ARGB*);\nGpStatus WINGDIPAPI GdipBitmapLockBits(GpBitmap*,GDIPCONST GpRect*,UINT,\n    PixelFormat,BitmapData*);\nGpStatus WINGDIPAPI GdipBitmapSetPixel(GpBitmap*,INT,INT,ARGB);\nGpStatus WINGDIPAPI GdipBitmapSetResolution(GpBitmap*,REAL,REAL);\nGpStatus WINGDIPAPI GdipBitmapUnlockBits(GpBitmap*,BitmapData*);\nGpStatus WINGDIPAPI GdipCloneBitmapArea(REAL,REAL,REAL,REAL,PixelFormat,GpBitmap*,GpBitmap**);\nGpStatus WINGDIPAPI GdipCloneBitmapAreaI(INT,INT,INT,INT,PixelFormat,GpBitmap*,GpBitmap**);\nGpStatus WINGDIPAPI GdipCreateBitmapFromFile(GDIPCONST WCHAR*,GpBitmap**);\nGpStatus WINGDIPAPI GdipCreateBitmapFromFileICM(GDIPCONST WCHAR*,GpBitmap**);\nGpStatus WINGDIPAPI GdipCreateBitmapFromGdiDib(GDIPCONST BITMAPINFO*,VOID*,GpBitmap**);\nGpStatus WINGDIPAPI GdipCreateBitmapFromGraphics(INT,INT,GpGraphics*,GpBitmap**);\nGpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP, HPALETTE, GpBitmap**);\nGpStatus WINGDIPAPI GdipCreateBitmapFromHICON(HICON, GpBitmap**);\nGpStatus WINGDIPAPI GdipCreateBitmapFromResource(HINSTANCE,GDIPCONST WCHAR*,GpBitmap**);\nGpStatus WINGDIPAPI GdipCreateBitmapFromScan0(INT,INT,INT,PixelFormat,BYTE*,\n    GpBitmap**);\nGpStatus WINGDIPAPI GdipCreateBitmapFromStream(IStream*,GpBitmap**);\nGpStatus WINGDIPAPI GdipCreateBitmapFromStreamICM(IStream*,GpBitmap**);\nGpStatus WINGDIPAPI GdipCreateHBITMAPFromBitmap(GpBitmap*,HBITMAP*,ARGB);\nGpStatus WINGDIPAPI GdipCreateHICONFromBitmap(GpBitmap*,HICON*);\nGpStatus WINGDIPAPI GdipDeleteEffect(CGpEffect*);\nGpStatus WINGDIPAPI GdipSetEffectParameters(CGpEffect*,const VOID*,const UINT);\n\n/* Brush */\nGpStatus WINGDIPAPI GdipCloneBrush(GpBrush*,GpBrush**);\nGpStatus WINGDIPAPI GdipDeleteBrush(GpBrush*);\nGpStatus WINGDIPAPI GdipGetBrushType(GpBrush*,GpBrushType*);\n\n/* CachedBitmap */\nGpStatus WINGDIPAPI GdipCreateCachedBitmap(GpBitmap*,GpGraphics*,\n    GpCachedBitmap**);\nGpStatus WINGDIPAPI GdipDeleteCachedBitmap(GpCachedBitmap*);\nGpStatus WINGDIPAPI GdipDrawCachedBitmap(GpGraphics*,GpCachedBitmap*,INT,INT);\n\n/* CustomLineCap */\nGpStatus WINGDIPAPI GdipCloneCustomLineCap(GpCustomLineCap*,GpCustomLineCap**);\nGpStatus WINGDIPAPI GdipCreateCustomLineCap(GpPath*,GpPath*,GpLineCap,REAL,\n    GpCustomLineCap**);\nGpStatus WINGDIPAPI GdipDeleteCustomLineCap(GpCustomLineCap*);\nGpStatus WINGDIPAPI GdipGetCustomLineCapBaseCap(GpCustomLineCap*,GpLineCap*);\nGpStatus WINGDIPAPI GdipSetCustomLineCapBaseCap(GpCustomLineCap*,GpLineCap);\nGpStatus WINGDIPAPI GdipGetCustomLineCapBaseInset(GpCustomLineCap*,REAL*);\nGpStatus WINGDIPAPI GdipSetCustomLineCapBaseInset(GpCustomLineCap*,REAL);\nGpStatus WINGDIPAPI GdipSetCustomLineCapStrokeCaps(GpCustomLineCap*,GpLineCap,\n    GpLineCap);\nGpStatus WINGDIPAPI GdipGetCustomLineCapStrokeJoin(GpCustomLineCap*,GpLineJoin*);\nGpStatus WINGDIPAPI GdipSetCustomLineCapStrokeJoin(GpCustomLineCap*,GpLineJoin);\nGpStatus WINGDIPAPI GdipGetCustomLineCapWidthScale(GpCustomLineCap*,REAL*);\nGpStatus WINGDIPAPI GdipSetCustomLineCapWidthScale(GpCustomLineCap*,REAL);\nGpStatus WINGDIPAPI GdipSetCustomLineCapBaseInset(GpCustomLineCap*,REAL);\nGpStatus WINGDIPAPI GdipGetCustomLineCapType(GpCustomLineCap*,CustomLineCapType*);\n\n/* Font */\nGpStatus WINGDIPAPI GdipCloneFont(GpFont*,GpFont**);\nGpStatus WINGDIPAPI GdipCreateFont(GDIPCONST GpFontFamily*, REAL, INT, Unit,\n    GpFont**);\nGpStatus WINGDIPAPI GdipCreateFontFromDC(HDC,GpFont**);\nGpStatus WINGDIPAPI GdipCreateFontFromLogfontA(HDC,GDIPCONST LOGFONTA*,GpFont**);\nGpStatus WINGDIPAPI GdipCreateFontFromLogfontW(HDC,GDIPCONST LOGFONTW*,GpFont**);\nGpStatus WINGDIPAPI GdipDeleteFont(GpFont*);\nGpStatus WINGDIPAPI GdipGetLogFontA(GpFont*,GpGraphics*,LOGFONTA*);\nGpStatus WINGDIPAPI GdipGetLogFontW(GpFont*,GpGraphics*,LOGFONTW*);\nGpStatus WINGDIPAPI GdipGetFamily(GpFont*, GpFontFamily**);\nGpStatus WINGDIPAPI GdipGetFontUnit(GpFont*, Unit*);\nGpStatus WINGDIPAPI GdipGetFontSize(GpFont*, REAL*);\nGpStatus WINGDIPAPI GdipGetFontStyle(GpFont*, INT*);\nGpStatus WINGDIPAPI GdipGetFontHeight(GDIPCONST GpFont*, GDIPCONST GpGraphics*,\n        REAL*);\nGpStatus WINGDIPAPI GdipGetFontHeightGivenDPI(GDIPCONST GpFont*, REAL, REAL*);\n\n/* FontCollection */\nGpStatus WINGDIPAPI GdipNewInstalledFontCollection(GpFontCollection**);\nGpStatus WINGDIPAPI GdipNewPrivateFontCollection(GpFontCollection**);\nGpStatus WINGDIPAPI GdipDeletePrivateFontCollection(GpFontCollection**);\nGpStatus WINGDIPAPI GdipPrivateAddFontFile(GpFontCollection*, GDIPCONST WCHAR*);\nGpStatus WINGDIPAPI GdipPrivateAddMemoryFont(GpFontCollection*,\n        GDIPCONST void*,INT);\nGpStatus WINGDIPAPI GdipGetFontCollectionFamilyCount(GpFontCollection*, INT*);\nGpStatus WINGDIPAPI GdipGetFontCollectionFamilyList(GpFontCollection*, INT,\n        GpFontFamily*[], INT*);\n\n/* FontFamily */\nGpStatus WINGDIPAPI GdipCloneFontFamily(GpFontFamily*, GpFontFamily**);\nGpStatus WINGDIPAPI GdipCreateFontFamilyFromName(GDIPCONST WCHAR*,\n    GpFontCollection*, GpFontFamily**);\nGpStatus WINGDIPAPI GdipDeleteFontFamily(GpFontFamily*);\nGpStatus WINGDIPAPI GdipGetFamilyName(GDIPCONST GpFontFamily*, WCHAR*, LANGID);\nGpStatus WINGDIPAPI GdipGetCellAscent(GDIPCONST GpFontFamily*, INT, UINT16*);\nGpStatus WINGDIPAPI GdipGetCellDescent(GDIPCONST GpFontFamily*, INT, UINT16*);\nGpStatus WINGDIPAPI GdipGetEmHeight(GDIPCONST GpFontFamily*, INT, UINT16*);\nGpStatus WINGDIPAPI GdipGetGenericFontFamilySansSerif(GpFontFamily**);\nGpStatus WINGDIPAPI GdipGetGenericFontFamilySerif(GpFontFamily**);\nGpStatus WINGDIPAPI GdipGetGenericFontFamilyMonospace(GpFontFamily**);\nGpStatus WINGDIPAPI GdipGetLineSpacing(GDIPCONST GpFontFamily*, INT, UINT16*);\nGpStatus WINGDIPAPI GdipIsStyleAvailable(GDIPCONST GpFontFamily *, INT, BOOL*);\n\n/* Graphics */\nGpStatus WINGDIPAPI GdipFlush(GpGraphics*, GpFlushIntention);\nGpStatus WINGDIPAPI GdipBeginContainer(GpGraphics*,GDIPCONST GpRectF*,GDIPCONST GpRectF*,GpUnit,GraphicsContainer*);\nGpStatus WINGDIPAPI GdipBeginContainer2(GpGraphics*,GraphicsContainer*);\nGpStatus WINGDIPAPI GdipBeginContainerI(GpGraphics*,GDIPCONST GpRect*,GDIPCONST GpRect*,GpUnit,GraphicsContainer*);\nGpStatus WINGDIPAPI GdipEndContainer(GpGraphics*,GraphicsContainer);\nGpStatus WINGDIPAPI GdipComment(GpGraphics*,UINT,GDIPCONST BYTE*);\nGpStatus WINGDIPAPI GdipCreateFromHDC(HDC,GpGraphics**);\nGpStatus WINGDIPAPI GdipCreateFromHDC2(HDC,HANDLE,GpGraphics**);\nGpStatus WINGDIPAPI GdipCreateFromHWND(HWND,GpGraphics**);\nGpStatus WINGDIPAPI GdipCreateFromHWNDICM(HWND,GpGraphics**);\nHPALETTE WINGDIPAPI GdipCreateHalftonePalette(void);\nGpStatus WINGDIPAPI GdipDeleteGraphics(GpGraphics *);\nGpStatus WINGDIPAPI GdipDrawArc(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL);\nGpStatus WINGDIPAPI GdipDrawArcI(GpGraphics*,GpPen*,INT,INT,INT,INT,REAL,REAL);\nGpStatus WINGDIPAPI GdipDrawBezier(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL,REAL,REAL);\nGpStatus WINGDIPAPI GdipDrawBezierI(GpGraphics*,GpPen*,INT,INT,INT,INT,INT,INT,INT,INT);\nGpStatus WINGDIPAPI GdipDrawBeziers(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT);\nGpStatus WINGDIPAPI GdipDrawBeziersI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT);\nGpStatus WINGDIPAPI GdipDrawClosedCurve(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT);\nGpStatus WINGDIPAPI GdipDrawClosedCurveI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT);\nGpStatus WINGDIPAPI GdipDrawClosedCurve2(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,REAL);\nGpStatus WINGDIPAPI GdipDrawClosedCurve2I(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT,REAL);\nGpStatus WINGDIPAPI GdipDrawCurve(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT);\nGpStatus WINGDIPAPI GdipDrawCurveI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT);\nGpStatus WINGDIPAPI GdipDrawCurve2(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,REAL);\nGpStatus WINGDIPAPI GdipDrawCurve2I(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT,REAL);\nGpStatus WINGDIPAPI GdipDrawCurve3(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,INT,INT,REAL);\nGpStatus WINGDIPAPI GdipDrawCurve3I(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT,INT,INT,REAL);\nGpStatus WINGDIPAPI GdipDrawDriverString(GpGraphics*,GDIPCONST UINT16*,INT,\n    GDIPCONST GpFont*,GDIPCONST GpBrush*,GDIPCONST PointF*,INT,GDIPCONST GpMatrix*);\nGpStatus WINGDIPAPI GdipDrawEllipse(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL);\nGpStatus WINGDIPAPI GdipDrawEllipseI(GpGraphics*,GpPen*,INT,INT,INT,INT);\nGpStatus WINGDIPAPI GdipDrawImage(GpGraphics*,GpImage*,REAL,REAL);\nGpStatus WINGDIPAPI GdipDrawImageI(GpGraphics*,GpImage*,INT,INT);\nGpStatus WINGDIPAPI GdipDrawImagePointRect(GpGraphics*,GpImage*,REAL,REAL,REAL,REAL,REAL,REAL,GpUnit);\nGpStatus WINGDIPAPI GdipDrawImagePointRectI(GpGraphics*,GpImage*,INT,INT,INT,INT,INT,INT,GpUnit);\nGpStatus WINGDIPAPI GdipDrawImagePoints(GpGraphics*,GpImage*,GDIPCONST GpPointF*,INT);\nGpStatus WINGDIPAPI GdipDrawImagePointsI(GpGraphics*,GpImage*,GDIPCONST GpPoint*,INT);\nGpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics*,GpImage*,\n    GDIPCONST GpPointF*,INT,REAL,REAL,REAL,REAL,GpUnit,\n    GDIPCONST GpImageAttributes*,DrawImageAbort,VOID*);\nGpStatus WINGDIPAPI GdipDrawImagePointsRectI(GpGraphics*,GpImage*,\n    GDIPCONST GpPoint*,INT,INT,INT,INT,INT,GpUnit,\n    GDIPCONST GpImageAttributes*,DrawImageAbort,VOID*);\nGpStatus WINGDIPAPI GdipDrawImageRect(GpGraphics*,GpImage*,REAL,REAL,REAL,REAL);\nGpStatus WINGDIPAPI GdipDrawImageRectI(GpGraphics*,GpImage*,INT,INT,INT,INT);\nGpStatus WINGDIPAPI GdipDrawImageRectRect(GpGraphics*,GpImage*,REAL,REAL,REAL,\n    REAL,REAL,REAL,REAL,REAL,GpUnit,GDIPCONST GpImageAttributes*,DrawImageAbort,\n    VOID*);\nGpStatus WINGDIPAPI GdipDrawImageRectRectI(GpGraphics*,GpImage*,INT,INT,INT,\n    INT,INT,INT,INT,INT,GpUnit,GDIPCONST GpImageAttributes*,DrawImageAbort,\n    VOID*);\nGpStatus WINGDIPAPI GdipDrawLine(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL);\nGpStatus WINGDIPAPI GdipDrawLineI(GpGraphics*,GpPen*,INT,INT,INT,INT);\nGpStatus WINGDIPAPI GdipDrawLines(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT);\nGpStatus WINGDIPAPI GdipDrawLinesI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT);\nGpStatus WINGDIPAPI GdipDrawPath(GpGraphics*,GpPen*,GpPath*);\nGpStatus WINGDIPAPI GdipDrawPie(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL);\nGpStatus WINGDIPAPI GdipDrawPieI(GpGraphics*,GpPen*,INT,INT,INT,INT,REAL,REAL);\nGpStatus WINGDIPAPI GdipDrawPolygon(GpGraphics*,GpPen*,GDIPCONST GpPointF*, INT);\nGpStatus WINGDIPAPI GdipDrawPolygonI(GpGraphics*,GpPen*,GDIPCONST GpPoint*, INT);\nGpStatus WINGDIPAPI GdipDrawRectangle(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL);\nGpStatus WINGDIPAPI GdipDrawRectangleI(GpGraphics*,GpPen*,INT,INT,INT,INT);\nGpStatus WINGDIPAPI GdipDrawRectangles(GpGraphics*,GpPen*,GDIPCONST GpRectF*,INT);\nGpStatus WINGDIPAPI GdipDrawRectanglesI(GpGraphics*,GpPen*,GDIPCONST GpRect*,INT);\nGpStatus WINGDIPAPI GdipDrawString(GpGraphics*,GDIPCONST WCHAR*,INT,\n    GDIPCONST GpFont*,GDIPCONST RectF*, GDIPCONST GpStringFormat*,\n    GDIPCONST GpBrush*);\nGpStatus WINGDIPAPI GdipEnumerateMetafileDestPoint(GpGraphics*,GDIPCONST GpMetafile*,\n    GDIPCONST GpPointF*,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);\nGpStatus WINGDIPAPI GdipEnumerateMetafileDestPointI(GpGraphics*,GDIPCONST GpMetafile*,\n    GDIPCONST GpPoint*,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);\nGpStatus WINGDIPAPI GdipEnumerateMetafileDestRect(GpGraphics*,GDIPCONST GpMetafile*,\n    GDIPCONST GpRectF*,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);\nGpStatus WINGDIPAPI GdipEnumerateMetafileDestRectI(GpGraphics*,GDIPCONST GpMetafile*,\n    GDIPCONST GpRect*,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);\nGpStatus WINGDIPAPI GdipEnumerateMetafileSrcRectDestPoints(GpGraphics*,\n    GDIPCONST GpMetafile*,GDIPCONST GpPointF*,INT,GDIPCONST GpRectF*,Unit,\n    EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);\nGpStatus WINGDIPAPI GdipFillClosedCurve2(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,INT,\n    REAL,GpFillMode);\nGpStatus WINGDIPAPI GdipFillClosedCurve2I(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,INT,\n    REAL,GpFillMode);\nGpStatus WINGDIPAPI GdipFillClosedCurve(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,INT);\nGpStatus WINGDIPAPI GdipFillClosedCurveI(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,INT);\nGpStatus WINGDIPAPI GdipFillEllipse(GpGraphics*,GpBrush*,REAL,REAL,REAL,REAL);\nGpStatus WINGDIPAPI GdipFillEllipseI(GpGraphics*,GpBrush*,INT,INT,INT,INT);\nGpStatus WINGDIPAPI GdipFillPath(GpGraphics*,GpBrush*,GpPath*);\nGpStatus WINGDIPAPI GdipFillPie(GpGraphics*,GpBrush*,REAL,REAL,REAL,REAL,REAL,REAL);\nGpStatus WINGDIPAPI GdipFillPieI(GpGraphics*,GpBrush*,INT,INT,INT,INT,REAL,REAL);\nGpStatus WINGDIPAPI GdipFillPolygon(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,\n    INT,GpFillMode);\nGpStatus WINGDIPAPI GdipFillPolygonI(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,\n    INT,GpFillMode);\nGpStatus WINGDIPAPI GdipFillPolygon2(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,INT);\nGpStatus WINGDIPAPI GdipFillPolygon2I(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,INT);\nGpStatus WINGDIPAPI GdipFillRectangle(GpGraphics*,GpBrush*,REAL,REAL,REAL,REAL);\nGpStatus WINGDIPAPI GdipFillRectangleI(GpGraphics*,GpBrush*,INT,INT,INT,INT);\nGpStatus WINGDIPAPI GdipFillRectangles(GpGraphics*,GpBrush*,GDIPCONST GpRectF*,INT);\nGpStatus WINGDIPAPI GdipFillRectanglesI(GpGraphics*,GpBrush*,GDIPCONST GpRect*,INT);\nGpStatus WINGDIPAPI GdipFillRegion(GpGraphics*,GpBrush*,GpRegion*);\nGpStatus WINGDIPAPI GdipGetClip(GpGraphics*,GpRegion*);\nGpStatus WINGDIPAPI GdipGetClipBounds(GpGraphics*,GpRectF*);\nGpStatus WINGDIPAPI GdipGetClipBoundsI(GpGraphics*,GpRect*);\nGpStatus WINGDIPAPI GdipGetCompositingMode(GpGraphics*,CompositingMode*);\nGpStatus WINGDIPAPI GdipGetCompositingQuality(GpGraphics*,CompositingQuality*);\nGpStatus WINGDIPAPI GdipGetDC(GpGraphics*,HDC*);\nGpStatus WINGDIPAPI GdipGetDpiX(GpGraphics*,REAL*);\nGpStatus WINGDIPAPI GdipGetDpiY(GpGraphics*,REAL*);\nGpStatus WINGDIPAPI GdipGetImageDecoders(UINT,UINT,ImageCodecInfo*);\nGpStatus WINGDIPAPI GdipGetImageDecodersSize(UINT*,UINT*);\nGpStatus WINGDIPAPI GdipGetImageGraphicsContext(GpImage*,GpGraphics**);\nGpStatus WINGDIPAPI GdipGetInterpolationMode(GpGraphics*,InterpolationMode*);\nGpStatus WINGDIPAPI GdipGetNearestColor(GpGraphics*,ARGB*);\nGpStatus WINGDIPAPI GdipGetPageScale(GpGraphics*,REAL*);\nGpStatus WINGDIPAPI GdipGetPageUnit(GpGraphics*,GpUnit*);\nGpStatus WINGDIPAPI GdipGetPixelOffsetMode(GpGraphics*,PixelOffsetMode*);\nGpStatus WINGDIPAPI GdipGetSmoothingMode(GpGraphics*,SmoothingMode*);\nGpStatus WINGDIPAPI GdipGetTextContrast(GpGraphics*,UINT*);\nGpStatus WINGDIPAPI GdipGetTextRenderingHint(GpGraphics*,TextRenderingHint*);\nGpStatus WINGDIPAPI GdipGetWorldTransform(GpGraphics*,GpMatrix*);\nGpStatus WINGDIPAPI GdipGraphicsClear(GpGraphics*,ARGB);\nGpStatus WINGDIPAPI GdipGraphicsSetAbort(GpGraphics*,GdiplusAbort*);\nGpStatus WINGDIPAPI GdipGetVisibleClipBounds(GpGraphics*,GpRectF*);\nGpStatus WINGDIPAPI GdipGetVisibleClipBoundsI(GpGraphics*,GpRect*);\nGpStatus WINGDIPAPI GdipIsClipEmpty(GpGraphics*, BOOL*);\nGpStatus WINGDIPAPI GdipIsVisiblePoint(GpGraphics*,REAL,REAL,BOOL*);\nGpStatus WINGDIPAPI GdipIsVisiblePointI(GpGraphics*,INT,INT,BOOL*);\nGpStatus WINGDIPAPI GdipIsVisibleRect(GpGraphics*,REAL,REAL,REAL,REAL,BOOL*);\nGpStatus WINGDIPAPI GdipIsVisibleRectI(GpGraphics*,INT,INT,INT,INT,BOOL*);\nGpStatus WINGDIPAPI GdipMeasureCharacterRanges(GpGraphics*, GDIPCONST WCHAR*,\n    INT, GDIPCONST GpFont*, GDIPCONST RectF*, GDIPCONST GpStringFormat*, INT,\n    GpRegion**);\nGpStatus WINGDIPAPI GdipMeasureDriverString(GpGraphics*,GDIPCONST UINT16*,INT,\n    GDIPCONST GpFont*,GDIPCONST PointF*,INT,GDIPCONST GpMatrix*,RectF*);\nGpStatus WINGDIPAPI GdipMeasureString(GpGraphics*,GDIPCONST WCHAR*,INT,\n    GDIPCONST GpFont*,GDIPCONST RectF*,GDIPCONST GpStringFormat*,RectF*,INT*,INT*);\nGpStatus WINGDIPAPI GdipMultiplyWorldTransform(GpGraphics*,GDIPCONST GpMatrix*,GpMatrixOrder);\nGpStatus WINGDIPAPI GdipRecordMetafileFileName(GDIPCONST WCHAR*,HDC,EmfType,\n    GDIPCONST GpRectF*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);\nGpStatus WINGDIPAPI GdipRecordMetafileFileNameI(GDIPCONST WCHAR*,HDC,EmfType,\n    GDIPCONST GpRect*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);\nGpStatus WINGDIPAPI GdipRecordMetafileI(HDC,EmfType,GDIPCONST GpRect*,\n    MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);\nGpStatus WINGDIPAPI GdipReleaseDC(GpGraphics*,HDC);\nGpStatus WINGDIPAPI GdipResetClip(GpGraphics*);\nGpStatus WINGDIPAPI GdipResetWorldTransform(GpGraphics*);\nGpStatus WINGDIPAPI GdipRestoreGraphics(GpGraphics*,GraphicsState);\nGpStatus WINGDIPAPI GdipRotateWorldTransform(GpGraphics*,REAL,GpMatrixOrder);\nGpStatus WINGDIPAPI GdipSaveGraphics(GpGraphics*,GraphicsState*);\nGpStatus WINGDIPAPI GdipScaleWorldTransform(GpGraphics*,REAL,REAL,GpMatrixOrder);\nGpStatus WINGDIPAPI GdipSetClipHrgn(GpGraphics*,HRGN,CombineMode);\nGpStatus WINGDIPAPI GdipSetClipGraphics(GpGraphics*,GpGraphics*,CombineMode);\nGpStatus WINGDIPAPI GdipSetClipPath(GpGraphics*,GpPath*,CombineMode);\nGpStatus WINGDIPAPI GdipSetClipRect(GpGraphics*,REAL,REAL,REAL,REAL,CombineMode);\nGpStatus WINGDIPAPI GdipSetClipRectI(GpGraphics*,INT,INT,INT,INT,CombineMode);\nGpStatus WINGDIPAPI GdipSetClipRegion(GpGraphics*,GpRegion*,CombineMode);\nGpStatus WINGDIPAPI GdipSetCompositingMode(GpGraphics*,CompositingMode);\nGpStatus WINGDIPAPI GdipSetCompositingQuality(GpGraphics*,CompositingQuality);\nGpStatus WINGDIPAPI GdipSetInterpolationMode(GpGraphics*,InterpolationMode);\nGpStatus WINGDIPAPI GdipSetPageScale(GpGraphics*,REAL);\nGpStatus WINGDIPAPI GdipSetPageUnit(GpGraphics*,GpUnit);\nGpStatus WINGDIPAPI GdipSetPixelOffsetMode(GpGraphics*,PixelOffsetMode);\nGpStatus WINGDIPAPI GdipSetRenderingOrigin(GpGraphics*,INT,INT);\nGpStatus WINGDIPAPI GdipSetSmoothingMode(GpGraphics*,SmoothingMode);\nGpStatus WINGDIPAPI GdipSetTextContrast(GpGraphics*,UINT);\nGpStatus WINGDIPAPI GdipSetTextRenderingHint(GpGraphics*,TextRenderingHint);\nGpStatus WINGDIPAPI GdipSetWorldTransform(GpGraphics*,GpMatrix*);\nGpStatus WINGDIPAPI GdipTransformPoints(GpGraphics*, GpCoordinateSpace, GpCoordinateSpace,\n                                        GpPointF *, INT);\nGpStatus WINGDIPAPI GdipTransformPointsI(GpGraphics*, GpCoordinateSpace, GpCoordinateSpace,\n                                         GpPoint *, INT);\nGpStatus WINGDIPAPI GdipTranslateClip(GpGraphics*,REAL,REAL);\nGpStatus WINGDIPAPI GdipTranslateClipI(GpGraphics*,INT,INT);\nGpStatus WINGDIPAPI GdipTranslateWorldTransform(GpGraphics*,REAL,REAL,GpMatrixOrder);\n\n/* GraphicsPath */\nGpStatus WINGDIPAPI GdipAddPathArc(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL);\nGpStatus WINGDIPAPI GdipAddPathArcI(GpPath*,INT,INT,INT,INT,REAL,REAL);\nGpStatus WINGDIPAPI GdipAddPathBezier(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL,REAL,REAL);\nGpStatus WINGDIPAPI GdipAddPathBezierI(GpPath*,INT,INT,INT,INT,INT,INT,INT,INT);\nGpStatus WINGDIPAPI GdipAddPathBeziers(GpPath*,GDIPCONST GpPointF*,INT);\nGpStatus WINGDIPAPI GdipAddPathBeziersI(GpPath*,GDIPCONST GpPoint*,INT);\nGpStatus WINGDIPAPI GdipAddPathClosedCurve(GpPath*,GDIPCONST GpPointF*,INT);\nGpStatus WINGDIPAPI GdipAddPathClosedCurveI(GpPath*,GDIPCONST GpPoint*,INT);\nGpStatus WINGDIPAPI GdipAddPathClosedCurve2(GpPath*,GDIPCONST GpPointF*,INT,REAL);\nGpStatus WINGDIPAPI GdipAddPathClosedCurve2I(GpPath*,GDIPCONST GpPoint*,INT,REAL);\nGpStatus WINGDIPAPI GdipAddPathCurve(GpPath*,GDIPCONST GpPointF*,INT);\nGpStatus WINGDIPAPI GdipAddPathCurveI(GpPath*,GDIPCONST GpPoint*,INT);\nGpStatus WINGDIPAPI GdipAddPathCurve2(GpPath*,GDIPCONST GpPointF*,INT,REAL);\nGpStatus WINGDIPAPI GdipAddPathCurve2I(GpPath*,GDIPCONST GpPoint*,INT,REAL);\nGpStatus WINGDIPAPI GdipAddPathCurve3(GpPath*,GDIPCONST GpPointF*,INT,INT,INT,REAL);\nGpStatus WINGDIPAPI GdipAddPathCurve3I(GpPath*,GDIPCONST GpPoint*,INT,INT,INT,REAL);\nGpStatus WINGDIPAPI GdipAddPathEllipse(GpPath*,REAL,REAL,REAL,REAL);\nGpStatus WINGDIPAPI GdipAddPathEllipseI(GpPath*,INT,INT,INT,INT);\nGpStatus WINGDIPAPI GdipAddPathLine(GpPath*,REAL,REAL,REAL,REAL);\nGpStatus WINGDIPAPI GdipAddPathLineI(GpPath*,INT,INT,INT,INT);\nGpStatus WINGDIPAPI GdipAddPathLine2(GpPath*,GDIPCONST GpPointF*,INT);\nGpStatus WINGDIPAPI GdipAddPathLine2I(GpPath*,GDIPCONST GpPoint*,INT);\nGpStatus WINGDIPAPI GdipAddPathPath(GpPath*,GDIPCONST GpPath*,BOOL);\nGpStatus WINGDIPAPI GdipAddPathPie(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL);\nGpStatus WINGDIPAPI GdipAddPathPieI(GpPath*,INT,INT,INT,INT,REAL,REAL);\nGpStatus WINGDIPAPI GdipAddPathPolygon(GpPath*,GDIPCONST GpPointF*,INT);\nGpStatus WINGDIPAPI GdipAddPathPolygonI(GpPath*,GDIPCONST GpPoint*,INT);\nGpStatus WINGDIPAPI GdipAddPathRectangle(GpPath*,REAL,REAL,REAL,REAL);\nGpStatus WINGDIPAPI GdipAddPathRectangleI(GpPath*,INT,INT,INT,INT);\nGpStatus WINGDIPAPI GdipAddPathRectangles(GpPath*,GDIPCONST GpRectF*,INT);\nGpStatus WINGDIPAPI GdipAddPathRectanglesI(GpPath*,GDIPCONST GpRect*,INT);\nGpStatus WINGDIPAPI GdipAddPathString(GpPath*,GDIPCONST WCHAR*,INT,GDIPCONST GpFontFamily*,INT,REAL,GDIPCONST RectF*,GDIPCONST GpStringFormat*);\nGpStatus WINGDIPAPI GdipAddPathStringI(GpPath*,GDIPCONST WCHAR*,INT,GDIPCONST GpFontFamily*,INT,REAL,GDIPCONST Rect*,GDIPCONST GpStringFormat*);\nGpStatus WINGDIPAPI GdipClearPathMarkers(GpPath*);\nGpStatus WINGDIPAPI GdipClonePath(GpPath*,GpPath**);\nGpStatus WINGDIPAPI GdipClosePathFigure(GpPath*);\nGpStatus WINGDIPAPI GdipClosePathFigures(GpPath*);\nGpStatus WINGDIPAPI GdipCreatePath(GpFillMode,GpPath**);\nGpStatus WINGDIPAPI GdipCreatePath2(GDIPCONST GpPointF*,GDIPCONST BYTE*,INT,\n    GpFillMode,GpPath**);\nGpStatus WINGDIPAPI GdipCreatePath2I(GDIPCONST GpPoint*,GDIPCONST BYTE*,INT,GpFillMode,GpPath**);\nGpStatus WINGDIPAPI GdipDeletePath(GpPath*);\nGpStatus WINGDIPAPI GdipFlattenPath(GpPath*,GpMatrix*,REAL);\nGpStatus WINGDIPAPI GdipIsOutlineVisiblePathPoint(GpPath*,REAL,REAL,GpPen*,\n    GpGraphics*,BOOL*);\nGpStatus WINGDIPAPI GdipIsOutlineVisiblePathPointI(GpPath*,INT,INT,GpPen*,\n    GpGraphics*,BOOL*);\nGpStatus WINGDIPAPI GdipIsVisiblePathPoint(GpPath*,REAL,REAL,GpGraphics*,BOOL*);\nGpStatus WINGDIPAPI GdipIsVisiblePathPointI(GpPath*,INT,INT,GpGraphics*,BOOL*);\nGpStatus WINGDIPAPI GdipGetPathData(GpPath*,GpPathData*);\nGpStatus WINGDIPAPI GdipGetPathFillMode(GpPath*,GpFillMode*);\nGpStatus WINGDIPAPI GdipGetPathLastPoint(GpPath*,GpPointF*);\nGpStatus WINGDIPAPI GdipGetPathPoints(GpPath*,GpPointF*,INT);\nGpStatus WINGDIPAPI GdipGetPathPointsI(GpPath*,GpPoint*,INT);\nGpStatus WINGDIPAPI GdipGetPathTypes(GpPath*,BYTE*,INT);\nGpStatus WINGDIPAPI GdipGetPathWorldBounds(GpPath*,GpRectF*,GDIPCONST GpMatrix*,GDIPCONST GpPen*);\nGpStatus WINGDIPAPI GdipGetPathWorldBoundsI(GpPath*,GpRect*,GDIPCONST GpMatrix*,GDIPCONST GpPen*);\nGpStatus WINGDIPAPI GdipGetPointCount(GpPath*,INT*);\nGpStatus WINGDIPAPI GdipResetPath(GpPath*);\nGpStatus WINGDIPAPI GdipReversePath(GpPath*);\nGpStatus WINGDIPAPI GdipSetPathFillMode(GpPath*,GpFillMode);\nGpStatus WINGDIPAPI GdipSetPathMarker(GpPath*);\nGpStatus WINGDIPAPI GdipStartPathFigure(GpPath*);\nGpStatus WINGDIPAPI GdipTransformPath(GpPath*,GpMatrix*);\nGpStatus WINGDIPAPI GdipWarpPath(GpPath*,GpMatrix*,GDIPCONST GpPointF*,INT,REAL,\n    REAL,REAL,REAL,WarpMode,REAL);\nGpStatus WINGDIPAPI GdipWidenPath(GpPath*,GpPen*,GpMatrix*,REAL);\n\n/* HatchBrush */\nGpStatus WINGDIPAPI GdipCreateHatchBrush(GpHatchStyle,ARGB,ARGB,GpHatch**);\nGpStatus WINGDIPAPI GdipGetHatchBackgroundColor(GpHatch*,ARGB*);\nGpStatus WINGDIPAPI GdipGetHatchForegroundColor(GpHatch*,ARGB*);\nGpStatus WINGDIPAPI GdipGetHatchStyle(GpHatch*,GpHatchStyle*);\n\n/* Image */\nGpStatus WINGDIPAPI GdipCloneImage(GpImage*, GpImage**);\nGpStatus WINGDIPAPI GdipCloneImageAttributes(GDIPCONST GpImageAttributes*,GpImageAttributes**);\nGpStatus WINGDIPAPI GdipDisposeImage(GpImage*);\nGpStatus WINGDIPAPI GdipEmfToWmfBits(HENHMETAFILE,UINT,LPBYTE,INT,INT);\nGpStatus WINGDIPAPI GdipFindFirstImageItem(GpImage*,ImageItemData*);\nGpStatus WINGDIPAPI GdipFindNextImageItem(GpImage*,ImageItemData*);\nGpStatus WINGDIPAPI GdipGetAllPropertyItems(GpImage*,UINT,UINT,PropertyItem*);\nGpStatus WINGDIPAPI GdipGetImageBounds(GpImage*,GpRectF*,GpUnit*);\nGpStatus WINGDIPAPI GdipGetImageDimension(GpImage*,REAL*,REAL*);\nGpStatus WINGDIPAPI GdipGetImageFlags(GpImage*,UINT*);\nGpStatus WINGDIPAPI GdipGetImageHeight(GpImage*,UINT*);\nGpStatus WINGDIPAPI GdipGetImageHorizontalResolution(GpImage*,REAL*);\nGpStatus WINGDIPAPI GdipGetImageItemData(GpImage*,ImageItemData*);\nGpStatus WINGDIPAPI GdipGetImagePalette(GpImage*,ColorPalette*,INT);\nGpStatus WINGDIPAPI GdipGetImagePaletteSize(GpImage*,INT*);\nGpStatus WINGDIPAPI GdipGetImagePixelFormat(GpImage*,PixelFormat*);\nGpStatus WINGDIPAPI GdipGetImageRawFormat(GpImage*,GUID*);\nGpStatus WINGDIPAPI GdipGetImageThumbnail(GpImage*,UINT,UINT,GpImage**,GetThumbnailImageAbort,VOID*);\nGpStatus WINGDIPAPI GdipGetImageType(GpImage*,ImageType*);\nGpStatus WINGDIPAPI GdipGetImageVerticalResolution(GpImage*,REAL*);\nGpStatus WINGDIPAPI GdipGetImageWidth(GpImage*,UINT*);\nGpStatus WINGDIPAPI GdipGetPropertyCount(GpImage*,UINT*);\nGpStatus WINGDIPAPI GdipGetPropertyIdList(GpImage*,UINT,PROPID*);\nGpStatus WINGDIPAPI GdipGetPropertyItem(GpImage*,PROPID,UINT,PropertyItem*);\nGpStatus WINGDIPAPI GdipGetPropertyItemSize(GpImage*,PROPID,UINT*);\nGpStatus WINGDIPAPI GdipGetPropertySize(GpImage*,UINT*,UINT*);\nGpStatus WINGDIPAPI GdipImageForceValidation(GpImage*);\nGpStatus WINGDIPAPI GdipImageGetFrameCount(GpImage*,GDIPCONST GUID*,UINT*);\nGpStatus WINGDIPAPI GdipImageGetFrameDimensionsCount(GpImage*,UINT*);\nGpStatus WINGDIPAPI GdipImageGetFrameDimensionsList(GpImage*,GUID*,UINT);\nGpStatus WINGDIPAPI GdipImageRotateFlip(GpImage*,RotateFlipType);\nGpStatus WINGDIPAPI GdipImageSelectActiveFrame(GpImage*,GDIPCONST GUID*,UINT);\nGpStatus WINGDIPAPI GdipImageSetAbort(GpImage*,GdiplusAbort*);\nGpStatus WINGDIPAPI GdipLoadImageFromFile(GDIPCONST WCHAR*,GpImage**);\nGpStatus WINGDIPAPI GdipLoadImageFromFileICM(GDIPCONST WCHAR*,GpImage**);\nGpStatus WINGDIPAPI GdipLoadImageFromStream(IStream*,GpImage**);\nGpStatus WINGDIPAPI GdipLoadImageFromStreamICM(IStream*,GpImage**);\nGpStatus WINGDIPAPI GdipRemovePropertyItem(GpImage*,PROPID);\nGpStatus WINGDIPAPI GdipSaveImageToFile(GpImage*,GDIPCONST WCHAR*,GDIPCONST CLSID*,GDIPCONST EncoderParameters*);\nGpStatus WINGDIPAPI GdipSaveImageToStream(GpImage*,IStream*,\n    GDIPCONST CLSID*,GDIPCONST EncoderParameters*);\nGpStatus WINGDIPAPI GdipSetImagePalette(GpImage*,GDIPCONST ColorPalette*);\nGpStatus WINGDIPAPI GdipSetPropertyItem(GpImage*,GDIPCONST PropertyItem*);\n\n/* ImageAttributes */\nGpStatus WINGDIPAPI GdipCreateImageAttributes(GpImageAttributes**);\nGpStatus WINGDIPAPI GdipDisposeImageAttributes(GpImageAttributes*);\nGpStatus WINGDIPAPI GdipGetImageAttributesAdjustedPalette(GpImageAttributes*,\n    ColorPalette*,ColorAdjustType);\nGpStatus WINGDIPAPI GdipSetImageAttributesCachedBackground(GpImageAttributes*,\n    BOOL);\nGpStatus WINGDIPAPI GdipSetImageAttributesColorKeys(GpImageAttributes*,\n    ColorAdjustType,BOOL,ARGB,ARGB);\nGpStatus WINGDIPAPI GdipSetImageAttributesColorMatrix(GpImageAttributes*,\n    ColorAdjustType,BOOL,GDIPCONST ColorMatrix*,GDIPCONST ColorMatrix*,\n    ColorMatrixFlags);\nGpStatus WINGDIPAPI GdipSetImageAttributesGamma(GpImageAttributes*,\n    ColorAdjustType,BOOL,REAL);\nGpStatus WINGDIPAPI GdipSetImageAttributesNoOp(GpImageAttributes*,\n    ColorAdjustType,BOOL);\nGpStatus WINGDIPAPI GdipSetImageAttributesOutputChannel(GpImageAttributes*,\n    ColorAdjustType,BOOL,ColorChannelFlags);\nGpStatus WINGDIPAPI GdipSetImageAttributesOutputChannelColorProfile(\n    GpImageAttributes*,ColorAdjustType,BOOL,GDIPCONST WCHAR*);\nGpStatus WINGDIPAPI GdipSetImageAttributesRemapTable(GpImageAttributes*,\n    ColorAdjustType,BOOL,UINT,GDIPCONST ColorMap*);\nGpStatus WINGDIPAPI GdipSetImageAttributesThreshold(GpImageAttributes*,\n    ColorAdjustType,BOOL,REAL);\nGpStatus WINGDIPAPI GdipSetImageAttributesToIdentity(GpImageAttributes*,\n    ColorAdjustType);\nGpStatus WINGDIPAPI GdipSetImageAttributesWrapMode(GpImageAttributes*,WrapMode,\n    ARGB,BOOL);\nGpStatus WINGDIPAPI GdipResetImageAttributes(GpImageAttributes*,\n    ColorAdjustType);\n\n/* LinearGradientBrush */\nGpStatus WINGDIPAPI GdipCreateLineBrush(GDIPCONST GpPointF*,GDIPCONST GpPointF*,\n    ARGB,ARGB,GpWrapMode,GpLineGradient**);\nGpStatus WINGDIPAPI GdipCreateLineBrushI(GDIPCONST GpPoint*,GDIPCONST GpPoint*,\n    ARGB,ARGB,GpWrapMode,GpLineGradient**);\nGpStatus WINGDIPAPI GdipCreateLineBrushFromRect(GDIPCONST GpRectF*,ARGB,ARGB,\n    LinearGradientMode,GpWrapMode,GpLineGradient**);\nGpStatus WINGDIPAPI GdipCreateLineBrushFromRectI(GDIPCONST GpRect*,ARGB,ARGB,\n    LinearGradientMode,GpWrapMode,GpLineGradient**);\nGpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngle(GDIPCONST GpRectF*,\n    ARGB,ARGB,REAL,BOOL,GpWrapMode,GpLineGradient**);\nGpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngleI(GDIPCONST GpRect*,\n    ARGB,ARGB,REAL,BOOL,GpWrapMode,GpLineGradient**);\nGpStatus WINGDIPAPI GdipGetLineColors(GpLineGradient*,ARGB*);\nGpStatus WINGDIPAPI GdipGetLineGammaCorrection(GpLineGradient*,BOOL*);\nGpStatus WINGDIPAPI GdipGetLineRect(GpLineGradient*,GpRectF*);\nGpStatus WINGDIPAPI GdipGetLineRectI(GpLineGradient*,GpRect*);\nGpStatus WINGDIPAPI GdipGetLineWrapMode(GpLineGradient*,GpWrapMode*);\nGpStatus WINGDIPAPI GdipSetLineBlend(GpLineGradient*,GDIPCONST REAL*,\n    GDIPCONST REAL*,INT);\nGpStatus WINGDIPAPI GdipGetLineBlend(GpLineGradient*,REAL*,REAL*,INT);\nGpStatus WINGDIPAPI GdipGetLineBlendCount(GpLineGradient*,INT*);\nGpStatus WINGDIPAPI GdipSetLinePresetBlend(GpLineGradient*,GDIPCONST ARGB*,\n    GDIPCONST REAL*,INT);\nGpStatus WINGDIPAPI GdipGetLinePresetBlend(GpLineGradient*,ARGB*,REAL*,INT);\nGpStatus WINGDIPAPI GdipGetLinePresetBlendCount(GpLineGradient*,INT*);\nGpStatus WINGDIPAPI GdipGetLineTransform(GpLineGradient*,GpMatrix*);\nGpStatus WINGDIPAPI GdipMultiplyLineTransform(GpLineGradient*,GDIPCONST GpMatrix*,GpMatrixOrder);\nGpStatus WINGDIPAPI GdipResetLineTransform(GpLineGradient*);\nGpStatus WINGDIPAPI GdipRotateLineTransform(GpLineGradient*,REAL,GpMatrixOrder);\nGpStatus WINGDIPAPI GdipScaleLineTransform(GpLineGradient*,REAL,REAL,\n    GpMatrixOrder);\nGpStatus WINGDIPAPI GdipSetLineColors(GpLineGradient*,ARGB,ARGB);\nGpStatus WINGDIPAPI GdipSetLineGammaCorrection(GpLineGradient*,BOOL);\nGpStatus WINGDIPAPI GdipSetLineSigmaBlend(GpLineGradient*,REAL,REAL);\nGpStatus WINGDIPAPI GdipSetLineTransform(GpLineGradient*,GDIPCONST GpMatrix*);\nGpStatus WINGDIPAPI GdipSetLineLinearBlend(GpLineGradient*,REAL,REAL);\nGpStatus WINGDIPAPI GdipSetLineWrapMode(GpLineGradient*,GpWrapMode);\nGpStatus WINGDIPAPI GdipTranslateLineTransform(GpLineGradient*,REAL,REAL,\n    GpMatrixOrder);\n\n/* Matrix */\nGpStatus WINGDIPAPI GdipCloneMatrix(GpMatrix*,GpMatrix**);\nGpStatus WINGDIPAPI GdipCreateMatrix(GpMatrix**);\nGpStatus WINGDIPAPI GdipCreateMatrix2(REAL,REAL,REAL,REAL,REAL,REAL,GpMatrix**);\nGpStatus WINGDIPAPI GdipCreateMatrix3(GDIPCONST GpRectF *,GDIPCONST GpPointF*,GpMatrix**);\nGpStatus WINGDIPAPI GdipCreateMatrix3I(GDIPCONST GpRect*,GDIPCONST GpPoint*,GpMatrix**);\nGpStatus WINGDIPAPI GdipDeleteMatrix(GpMatrix*);\nGpStatus WINGDIPAPI GdipGetMatrixElements(GDIPCONST GpMatrix*,REAL*);\nGpStatus WINGDIPAPI GdipInvertMatrix(GpMatrix*);\nGpStatus WINGDIPAPI GdipIsMatrixEqual(GDIPCONST GpMatrix*, GDIPCONST GpMatrix*, BOOL*);\nGpStatus WINGDIPAPI GdipIsMatrixIdentity(GDIPCONST GpMatrix*, BOOL*);\nGpStatus WINGDIPAPI GdipIsMatrixInvertible(GDIPCONST GpMatrix*, BOOL*);\nGpStatus WINGDIPAPI GdipMultiplyMatrix(GpMatrix*,GDIPCONST GpMatrix*,GpMatrixOrder);\nGpStatus WINGDIPAPI GdipRotateMatrix(GpMatrix*,REAL,GpMatrixOrder);\nGpStatus WINGDIPAPI GdipShearMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder);\nGpStatus WINGDIPAPI GdipScaleMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder);\nGpStatus WINGDIPAPI GdipSetMatrixElements(GpMatrix*,REAL,REAL,REAL,REAL,REAL,REAL);\nGpStatus WINGDIPAPI GdipTransformMatrixPoints(GpMatrix*,GpPointF*,INT);\nGpStatus WINGDIPAPI GdipTransformMatrixPointsI(GpMatrix*,GpPoint*,INT);\nGpStatus WINGDIPAPI GdipTranslateMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder);\nGpStatus WINGDIPAPI GdipVectorTransformMatrixPoints(GpMatrix*,GpPointF*,INT);\nGpStatus WINGDIPAPI GdipVectorTransformMatrixPointsI(GpMatrix*,GpPoint*,INT);\n\n/* Metafile */\nGpStatus WINGDIPAPI GdipConvertToEmfPlus(const GpGraphics*,GpMetafile*,INT*,\n    EmfType,const WCHAR*,GpMetafile**);\nGpStatus WINGDIPAPI GdipConvertToEmfPlusToFile(const GpGraphics*,GpMetafile*,INT*,const WCHAR*,EmfType,const WCHAR*,GpMetafile**);\nGpStatus WINGDIPAPI GdipConvertToEmfPlusToStream(const GpGraphics*,GpMetafile*,INT*,IStream*,EmfType,const WCHAR*,GpMetafile**);\nGpStatus WINGDIPAPI GdipCreateMetafileFromEmf(HENHMETAFILE,BOOL,GpMetafile**);\nGpStatus WINGDIPAPI GdipCreateMetafileFromWmf(HMETAFILE,BOOL,\n    GDIPCONST WmfPlaceableFileHeader*,GpMetafile**);\nGpStatus WINGDIPAPI GdipCreateMetafileFromWmfFile(GDIPCONST WCHAR*, GDIPCONST WmfPlaceableFileHeader*,\n    GpMetafile**);\nGpStatus WINGDIPAPI GdipCreateMetafileFromFile(GDIPCONST WCHAR*,GpMetafile**);\nGpStatus WINGDIPAPI GdipCreateMetafileFromStream(IStream*,GpMetafile**);\nGpStatus WINGDIPAPI GdipGetHemfFromMetafile(GpMetafile*,HENHMETAFILE*);\nGpStatus WINGDIPAPI GdipPlayMetafileRecord(GDIPCONST GpMetafile*,EmfPlusRecordType,UINT,UINT,GDIPCONST BYTE*);\nGpStatus WINGDIPAPI GdipSetMetafileDownLevelRasterizationLimit(GpMetafile*,UINT);\nGpStatus WINGDIPAPI GdipRecordMetafile(HDC,EmfType,GDIPCONST GpRectF*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);\n\n/* MetafileHeader */\nGpStatus WINGDIPAPI GdipGetMetafileHeaderFromEmf(HENHMETAFILE,MetafileHeader*);\nGpStatus WINGDIPAPI GdipGetMetafileHeaderFromFile(GDIPCONST WCHAR*,MetafileHeader*);\nGpStatus WINGDIPAPI GdipGetMetafileHeaderFromMetafile(GpMetafile*,MetafileHeader*);\nGpStatus WINGDIPAPI GdipGetMetafileHeaderFromStream(IStream*,MetafileHeader*);\nGpStatus WINGDIPAPI GdipGetMetafileHeaderFromWmf(HMETAFILE,GDIPCONST WmfPlaceableFileHeader*,MetafileHeader*);\n\n/* Notification */\nGpStatus WINAPI GdiplusNotificationHook(ULONG_PTR*);\nvoid WINAPI GdiplusNotificationUnhook(ULONG_PTR);\n\n/* PathGradientBrush */\nGpStatus WINGDIPAPI GdipCreatePathGradient(GDIPCONST GpPointF*,INT,GpWrapMode,GpPathGradient**);\nGpStatus WINGDIPAPI GdipCreatePathGradientI(GDIPCONST GpPoint*,INT,GpWrapMode,GpPathGradient**);\nGpStatus WINGDIPAPI GdipCreatePathGradientFromPath(GDIPCONST GpPath*,\n    GpPathGradient**);\nGpStatus WINGDIPAPI GdipGetPathGradientBlend(GpPathGradient*,REAL*,REAL*,INT);\nGpStatus WINGDIPAPI GdipGetPathGradientBlendCount(GpPathGradient*,INT*);\nGpStatus WINGDIPAPI GdipGetPathGradientCenterColor(GpPathGradient*,ARGB*);\nGpStatus WINGDIPAPI GdipGetPathGradientCenterPoint(GpPathGradient*,GpPointF*);\nGpStatus WINGDIPAPI GdipGetPathGradientCenterPointI(GpPathGradient*,GpPoint*);\nGpStatus WINGDIPAPI GdipGetPathGradientFocusScales(GpPathGradient*,REAL*,REAL*);\nGpStatus WINGDIPAPI GdipGetPathGradientGammaCorrection(GpPathGradient*,BOOL*);\nGpStatus WINGDIPAPI GdipGetPathGradientPath(GpPathGradient*,GpPath*);\nGpStatus WINGDIPAPI GdipGetPathGradientPresetBlend(GpPathGradient*,ARGB*,REAL*,INT);\nGpStatus WINGDIPAPI GdipGetPathGradientPresetBlendCount(GpPathGradient*,INT*);\nGpStatus WINGDIPAPI GdipGetPathGradientPointCount(GpPathGradient*,INT*);\nGpStatus WINGDIPAPI GdipSetPathGradientPresetBlend(GpPathGradient*,\n    GDIPCONST ARGB*,GDIPCONST REAL*,INT);\nGpStatus WINGDIPAPI GdipGetPathGradientRect(GpPathGradient*,GpRectF*);\nGpStatus WINGDIPAPI GdipGetPathGradientRectI(GpPathGradient*,GpRect*);\nGpStatus WINGDIPAPI GdipGetPathGradientSurroundColorsWithCount(GpPathGradient*,\n    ARGB*,INT*);\nGpStatus WINGDIPAPI GdipGetPathGradientWrapMode(GpPathGradient*,GpWrapMode*);\nGpStatus WINGDIPAPI GdipSetPathGradientBlend(GpPathGradient*,GDIPCONST REAL*,GDIPCONST REAL*,INT);\nGpStatus WINGDIPAPI GdipSetPathGradientCenterColor(GpPathGradient*,ARGB);\nGpStatus WINGDIPAPI GdipSetPathGradientCenterPoint(GpPathGradient*,GpPointF*);\nGpStatus WINGDIPAPI GdipSetPathGradientCenterPointI(GpPathGradient*,GpPoint*);\nGpStatus WINGDIPAPI GdipSetPathGradientFocusScales(GpPathGradient*,REAL,REAL);\nGpStatus WINGDIPAPI GdipSetPathGradientGammaCorrection(GpPathGradient*,BOOL);\nGpStatus WINGDIPAPI GdipSetPathGradientPath(GpPathGradient*,GDIPCONST GpPath*);\nGpStatus WINGDIPAPI GdipSetPathGradientSigmaBlend(GpPathGradient*,REAL,REAL);\nGpStatus WINGDIPAPI GdipSetPathGradientSurroundColorsWithCount(GpPathGradient*,\n    GDIPCONST ARGB*,INT*);\nGpStatus WINGDIPAPI GdipSetPathGradientWrapMode(GpPathGradient*,GpWrapMode);\nGpStatus WINGDIPAPI GdipGetPathGradientSurroundColorCount(GpPathGradient*,INT*);\n\n/* PathIterator */\nGpStatus WINGDIPAPI GdipCreatePathIter(GpPathIterator**,GpPath*);\nGpStatus WINGDIPAPI GdipDeletePathIter(GpPathIterator*);\nGpStatus WINGDIPAPI GdipPathIterCopyData(GpPathIterator*,INT*,GpPointF*,BYTE*,\n    INT,INT);\nGpStatus WINGDIPAPI GdipPathIterGetCount(GpPathIterator*,INT*);\nGpStatus WINGDIPAPI GdipPathIterGetSubpathCount(GpPathIterator*,INT*);\nGpStatus WINGDIPAPI GdipPathIterEnumerate(GpPathIterator*,INT*,GpPointF*,BYTE*,INT);\nGpStatus WINGDIPAPI GdipPathIterHasCurve(GpPathIterator*,BOOL*);\nGpStatus WINGDIPAPI GdipPathIterIsValid(GpPathIterator*,BOOL*);\nGpStatus WINGDIPAPI GdipPathIterNextMarker(GpPathIterator*,INT*,INT*,INT*);\nGpStatus WINGDIPAPI GdipPathIterNextMarkerPath(GpPathIterator*,INT*,GpPath*);\nGpStatus WINGDIPAPI GdipPathIterNextPathType(GpPathIterator*,INT*,BYTE*,INT*,INT*);\nGpStatus WINGDIPAPI GdipPathIterNextSubpath(GpPathIterator*,INT*,INT*,INT*,BOOL*);\nGpStatus WINGDIPAPI GdipPathIterNextSubpathPath(GpPathIterator*,INT*,GpPath*,BOOL*);\nGpStatus WINGDIPAPI GdipPathIterRewind(GpPathIterator*);\n\n/* Pen */\nGpStatus WINGDIPAPI GdipClonePen(GpPen*,GpPen**);\nGpStatus WINGDIPAPI GdipCreatePen1(ARGB,REAL,GpUnit,GpPen**);\nGpStatus WINGDIPAPI GdipCreatePen2(GpBrush*,REAL,GpUnit,GpPen**);\nGpStatus WINGDIPAPI GdipDeletePen(GpPen*);\nGpStatus WINGDIPAPI GdipGetPenBrushFill(GpPen*,GpBrush**);\nGpStatus WINGDIPAPI GdipGetPenColor(GpPen*,ARGB*);\nGpStatus WINGDIPAPI GdipGetPenCompoundCount(GpPen*,INT*);\nGpStatus WINGDIPAPI GdipGetPenCustomStartCap(GpPen*,GpCustomLineCap**);\nGpStatus WINGDIPAPI GdipGetPenCustomEndCap(GpPen*,GpCustomLineCap**);\nGpStatus WINGDIPAPI GdipGetPenDashArray(GpPen*,REAL*,INT);\nGpStatus WINGDIPAPI GdipGetPenDashCount(GpPen*,INT*);\nGpStatus WINGDIPAPI GdipGetPenDashOffset(GpPen*,REAL*);\nGpStatus WINGDIPAPI GdipGetPenDashStyle(GpPen*,GpDashStyle*);\nGpStatus WINGDIPAPI GdipGetPenMode(GpPen*,GpPenAlignment*);\nGpStatus WINGDIPAPI GdipGetPenTransform(GpPen *, GpMatrix *);\nGpStatus WINGDIPAPI GdipResetPenTransform(GpPen*);\nGpStatus WINGDIPAPI GdipScalePenTransform(GpPen*,REAL,REAL,GpMatrixOrder);\nGpStatus WINGDIPAPI GdipSetPenBrushFill(GpPen*,GpBrush*);\nGpStatus WINGDIPAPI GdipSetPenColor(GpPen*,ARGB);\nGpStatus WINGDIPAPI GdipSetPenCompoundArray(GpPen*,GDIPCONST REAL*,INT);\nGpStatus WINGDIPAPI GdipSetPenCustomEndCap(GpPen*,GpCustomLineCap*);\nGpStatus WINGDIPAPI GdipSetPenCustomStartCap(GpPen*,GpCustomLineCap*);\nGpStatus WINGDIPAPI GdipSetPenDashArray(GpPen*,GDIPCONST REAL*,INT);\nGpStatus WINGDIPAPI GdipSetPenDashCap197819(GpPen*,GpDashCap);\nGpStatus WINGDIPAPI GdipSetPenDashOffset(GpPen*,REAL);\nGpStatus WINGDIPAPI GdipSetPenDashStyle(GpPen*,GpDashStyle);\nGpStatus WINGDIPAPI GdipSetPenEndCap(GpPen*,GpLineCap);\nGpStatus WINGDIPAPI GdipGetPenFillType(GpPen*,GpPenType*);\nGpStatus WINGDIPAPI GdipSetPenLineCap197819(GpPen*,GpLineCap,GpLineCap,GpDashCap);\nGpStatus WINGDIPAPI GdipSetPenLineJoin(GpPen*,GpLineJoin);\nGpStatus WINGDIPAPI GdipSetPenMode(GpPen*,GpPenAlignment);\nGpStatus WINGDIPAPI GdipSetPenMiterLimit(GpPen*,REAL);\nGpStatus WINGDIPAPI GdipSetPenStartCap(GpPen*,GpLineCap);\nGpStatus WINGDIPAPI GdipSetPenTransform(GpPen *, GpMatrix *);\nGpStatus WINGDIPAPI GdipSetPenWidth(GpPen*,REAL);\nGpStatus WINGDIPAPI GdipGetPenDashCap197819(GpPen*,GpDashCap*);\nGpStatus WINGDIPAPI GdipGetPenEndCap(GpPen*,GpLineCap*);\nGpStatus WINGDIPAPI GdipGetPenLineJoin(GpPen*,GpLineJoin*);\nGpStatus WINGDIPAPI GdipGetPenMiterLimit(GpPen*,REAL*);\nGpStatus WINGDIPAPI GdipGetPenStartCap(GpPen*,GpLineCap*);\nGpStatus WINGDIPAPI GdipGetPenUnit(GpPen*,GpUnit*);\nGpStatus WINGDIPAPI GdipGetPenWidth(GpPen*,REAL*);\nGpStatus WINGDIPAPI GdipTranslatePenTransform(GpPen*,REAL,REAL,GpMatrixOrder);\n\n/* Region */\nGpStatus WINGDIPAPI GdipCloneRegion(GpRegion *, GpRegion **);\nGpStatus WINGDIPAPI GdipCombineRegionPath(GpRegion *, GpPath *, CombineMode);\nGpStatus WINGDIPAPI GdipCombineRegionRect(GpRegion *, GDIPCONST GpRectF *, CombineMode);\nGpStatus WINGDIPAPI GdipCombineRegionRectI(GpRegion *, GDIPCONST GpRect *, CombineMode);\nGpStatus WINGDIPAPI GdipCombineRegionRegion(GpRegion *, GpRegion *, CombineMode);\nGpStatus WINGDIPAPI GdipCreateRegion(GpRegion **);\nGpStatus WINGDIPAPI GdipCreateRegionPath(GpPath *, GpRegion **);\nGpStatus WINGDIPAPI GdipCreateRegionRect(GDIPCONST GpRectF *, GpRegion **);\nGpStatus WINGDIPAPI GdipCreateRegionRectI(GDIPCONST GpRect *, GpRegion **);\nGpStatus WINGDIPAPI GdipCreateRegionRgnData(GDIPCONST BYTE *, INT, GpRegion **);\nGpStatus WINGDIPAPI GdipCreateRegionHrgn(HRGN, GpRegion **);\nGpStatus WINGDIPAPI GdipDeleteRegion(GpRegion *);\nGpStatus WINGDIPAPI GdipGetRegionBounds(GpRegion *, GpGraphics *, GpRectF *);\nGpStatus WINGDIPAPI GdipGetRegionBoundsI(GpRegion *, GpGraphics *, GpRect *);\nGpStatus WINGDIPAPI GdipGetRegionData(GpRegion *, BYTE *, UINT, UINT *);\nGpStatus WINGDIPAPI GdipGetRegionDataSize(GpRegion *, UINT *);\nGpStatus WINGDIPAPI GdipGetRegionHRgn(GpRegion *, GpGraphics *, HRGN *);\nGpStatus WINGDIPAPI GdipGetRegionScans(GpRegion *, GpRectF *, INT *, GpMatrix *);\nGpStatus WINGDIPAPI GdipGetRegionScansI(GpRegion *, GpRect *, INT *, GpMatrix *);\nGpStatus WINGDIPAPI GdipGetRegionScansCount(GpRegion *, UINT *, GpMatrix *);\nGpStatus WINGDIPAPI GdipIsEmptyRegion(GpRegion *, GpGraphics *, BOOL *);\nGpStatus WINGDIPAPI GdipIsEqualRegion(GpRegion *, GpRegion *, GpGraphics *, BOOL *);\nGpStatus WINGDIPAPI GdipIsInfiniteRegion(GpRegion *, GpGraphics *, BOOL *);\nGpStatus WINGDIPAPI GdipIsVisibleRegionPoint(GpRegion *, REAL, REAL, GpGraphics *, BOOL *);\nGpStatus WINGDIPAPI GdipIsVisibleRegionPointI(GpRegion *, INT, INT, GpGraphics *, BOOL *);\nGpStatus WINGDIPAPI GdipIsVisibleRegionRect(GpRegion *, REAL, REAL, REAL, REAL, GpGraphics *, BOOL *);\nGpStatus WINGDIPAPI GdipIsVisibleRegionRectI(GpRegion *, INT, INT, INT, INT, GpGraphics *, BOOL *);\nGpStatus WINGDIPAPI GdipSetEmpty(GpRegion *);\nGpStatus WINGDIPAPI GdipSetInfinite(GpRegion *);\nGpStatus WINGDIPAPI GdipTransformRegion(GpRegion *, GpMatrix *);\nGpStatus WINGDIPAPI GdipTranslateRegion(GpRegion *, REAL, REAL);\nGpStatus WINGDIPAPI GdipTranslateRegionI(GpRegion *, INT, INT);\n\n/* SolidBrush */\nGpStatus WINGDIPAPI GdipCreateSolidFill(ARGB,GpSolidFill**);\nGpStatus WINGDIPAPI GdipGetSolidFillColor(GpSolidFill*,ARGB*);\nGpStatus WINGDIPAPI GdipSetSolidFillColor(GpSolidFill*,ARGB);\n\n/* StringFormat */\nGpStatus WINGDIPAPI GdipCloneStringFormat(GDIPCONST GpStringFormat*,GpStringFormat**);\nGpStatus WINGDIPAPI GdipCreateStringFormat(INT,LANGID,GpStringFormat**);\nGpStatus WINGDIPAPI GdipDeleteStringFormat(GpStringFormat*);\nGpStatus WINGDIPAPI GdipGetStringFormatAlign(GpStringFormat*,StringAlignment*);\nGpStatus WINGDIPAPI GdipGetStringFormatDigitSubstitution(GDIPCONST GpStringFormat*,LANGID*,\n        StringDigitSubstitute*);\nGpStatus WINGDIPAPI GdipGetStringFormatFlags(GDIPCONST GpStringFormat*, INT*);\nGpStatus WINGDIPAPI GdipGetStringFormatHotkeyPrefix(GDIPCONST GpStringFormat*,INT*);\nGpStatus WINGDIPAPI GdipGetStringFormatLineAlign(GpStringFormat*,StringAlignment*);\nGpStatus WINGDIPAPI GdipGetStringFormatMeasurableCharacterRangeCount(\n        GDIPCONST GpStringFormat*, INT*);\nGpStatus WINGDIPAPI GdipGetStringFormatTabStopCount(GDIPCONST GpStringFormat*,INT*);\nGpStatus WINGDIPAPI GdipGetStringFormatTabStops(GDIPCONST GpStringFormat*,INT,REAL*,REAL*);\nGpStatus WINGDIPAPI GdipGetStringFormatTrimming(GpStringFormat*,StringTrimming*);\nGpStatus WINGDIPAPI GdipSetStringFormatAlign(GpStringFormat*,StringAlignment);\nGpStatus WINGDIPAPI GdipSetStringFormatDigitSubstitution(GpStringFormat*,LANGID,StringDigitSubstitute);\nGpStatus WINGDIPAPI GdipSetStringFormatHotkeyPrefix(GpStringFormat*,INT);\nGpStatus WINGDIPAPI GdipSetStringFormatLineAlign(GpStringFormat*,StringAlignment);\nGpStatus WINGDIPAPI GdipSetStringFormatMeasurableCharacterRanges(\n        GpStringFormat*, INT, GDIPCONST CharacterRange*);\nGpStatus WINGDIPAPI GdipSetStringFormatTabStops(GpStringFormat*,REAL,INT,GDIPCONST REAL*);\nGpStatus WINGDIPAPI GdipSetStringFormatTrimming(GpStringFormat*,StringTrimming);\nGpStatus WINGDIPAPI GdipSetStringFormatFlags(GpStringFormat*, INT);\nGpStatus WINGDIPAPI GdipStringFormatGetGenericDefault(GpStringFormat **);\nGpStatus WINGDIPAPI GdipStringFormatGetGenericTypographic(GpStringFormat **);\n\n/* Texture */\nGpStatus WINGDIPAPI GdipCreateTexture(GpImage*,GpWrapMode,GpTexture**);\nGpStatus WINGDIPAPI GdipCreateTexture2(GpImage*,GpWrapMode,REAL,REAL,REAL,REAL,GpTexture**);\nGpStatus WINGDIPAPI GdipCreateTexture2I(GpImage*,GpWrapMode,INT,INT,INT,INT,GpTexture**);\nGpStatus WINGDIPAPI GdipCreateTextureIA(GpImage*,GDIPCONST GpImageAttributes*,\n    REAL,REAL,REAL,REAL,GpTexture**);\nGpStatus WINGDIPAPI GdipCreateTextureIAI(GpImage*,GDIPCONST GpImageAttributes*,\n    INT,INT,INT,INT,GpTexture**);\nGpStatus WINGDIPAPI GdipGetTextureTransform(GpTexture*,GpMatrix*);\nGpStatus WINGDIPAPI GdipGetTextureWrapMode(GpTexture*, GpWrapMode*);\nGpStatus WINGDIPAPI GdipMultiplyTextureTransform(GpTexture*,\n    GDIPCONST GpMatrix*,GpMatrixOrder);\nGpStatus WINGDIPAPI GdipResetTextureTransform(GpTexture*);\nGpStatus WINGDIPAPI GdipRotateTextureTransform(GpTexture*,REAL,GpMatrixOrder);\nGpStatus WINGDIPAPI GdipScaleTextureTransform(GpTexture*,REAL,REAL,GpMatrixOrder);\nGpStatus WINGDIPAPI GdipSetTextureTransform(GpTexture *,GDIPCONST GpMatrix*);\nGpStatus WINGDIPAPI GdipSetTextureWrapMode(GpTexture*, GpWrapMode);\nGpStatus WINGDIPAPI GdipTranslateTextureTransform(GpTexture*,REAL,REAL,\n    GpMatrixOrder);\n\n/* Without wrapper methods */\nGpStatus WINGDIPAPI GdipCreateStreamOnFile(GDIPCONST WCHAR*,UINT,IStream**);\nGpStatus WINGDIPAPI GdipGetImageEncodersSize(UINT *numEncoders, UINT *size);\nGpStatus WINGDIPAPI GdipGetImageEncoders(UINT numEncoders, UINT size, ImageCodecInfo *encoders);\nGpStatus WINGDIPAPI GdipTestControl(GpTestControlEnum,void*);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/gdiplusgpstubs.h",
    "content": "/*\n * Copyright (C) 2007 Google (Evan Stade)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _GDIPLUSGPSTUBS_H\n#define _GDIPLUSGPSTUBS_H\n\n#ifdef __cplusplus\n\nclass GpGraphics {};\nclass GpPen {};\nclass GpBrush {};\nclass GpHatch : public GpBrush {};\nclass GpSolidFill : public GpBrush {};\nclass GpPath {};\nclass GpMatrix {};\nclass GpPathIterator {};\nclass GpCustomLineCap {};\nclass GpAdjustableArrowCap : public GpCustomLineCap {};\nclass GpImage {};\nclass GpMetafile : public GpImage {};\nclass GpImageAttributes {};\nclass GpCachedBitmap {};\nclass GpBitmap : public GpImage {};\nclass GpPathGradient : public GpBrush {};\nclass GpLineGradient : public GpBrush {};\nclass GpTexture : public GpBrush {};\nclass GpFont {};\nclass GpFontCollection {};\nclass GpFontFamily {};\nclass GpStringFormat {};\nclass GpRegion {};\nclass CGpEffect {};\n\n#else /* end of c++ declarations */\n\ntypedef struct GpGraphics GpGraphics;\ntypedef struct GpPen GpPen;\ntypedef struct GpBrush GpBrush;\ntypedef struct GpHatch GpHatch;\ntypedef struct GpSolidFill GpSolidFill;\ntypedef struct GpPath GpPath;\ntypedef struct GpMatrix GpMatrix;\ntypedef struct GpPathIterator GpPathIterator;\ntypedef struct GpCustomLineCap GpCustomLineCap;\ntypedef struct GpAdjustableArrowCap GpAdjustableArrowCap;\ntypedef struct GpImage GpImage;\ntypedef struct GpMetafile GpMetafile;\ntypedef struct GpImageAttributes GpImageAttributes;\ntypedef struct GpCachedBitmap GpCachedBitmap;\ntypedef struct GpBitmap GpBitmap;\ntypedef struct GpPathGradient GpPathGradient;\ntypedef struct GpLineGradient GpLineGradient;\ntypedef struct GpTexture GpTexture;\ntypedef struct GpFont GpFont;\ntypedef struct GpFontCollection GpFontCollection;\ntypedef struct GpFontFamily GpFontFamily;\ntypedef struct GpStringFormat GpStringFormat;\ntypedef struct GpRegion GpRegion;\ntypedef struct CGpEffect CGpEffect;\n\n#endif /* end of c declarations */\n\ntypedef Status GpStatus;\ntypedef Unit GpUnit;\ntypedef BrushType GpBrushType;\ntypedef PointF GpPointF;\ntypedef FillMode GpFillMode;\ntypedef PathData GpPathData;\ntypedef LineCap GpLineCap;\ntypedef RectF GpRectF;\ntypedef Rect GpRect;\ntypedef LineJoin GpLineJoin;\ntypedef DashCap GpDashCap;\ntypedef DashStyle GpDashStyle;\ntypedef MatrixOrder GpMatrixOrder;\ntypedef Point GpPoint;\ntypedef WrapMode GpWrapMode;\ntypedef Color GpColor;\ntypedef FlushIntention GpFlushIntention;\ntypedef CoordinateSpace GpCoordinateSpace;\ntypedef PenAlignment GpPenAlignment;\ntypedef PenType GpPenType;\ntypedef HatchStyle GpHatchStyle;\n\n#endif\n"
  },
  {
    "path": "wine/windows/gdiplusimaging.h",
    "content": "/*\n * Copyright (C) 2007 Google (Evan Stade)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _GDIPLUSIMAGING_H\n#define _GDIPLUSIMAGING_H\n\nDEFINE_GUID(ImageFormatUndefined, 0xb96b3ca9, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);\nDEFINE_GUID(ImageFormatMemoryBMP, 0xb96b3caa, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);\nDEFINE_GUID(ImageFormatBMP,       0xb96b3cab, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);\nDEFINE_GUID(ImageFormatEMF,       0xb96b3cac, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);\nDEFINE_GUID(ImageFormatWMF,       0xb96b3cad, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);\nDEFINE_GUID(ImageFormatJPEG,      0xb96b3cae, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);\nDEFINE_GUID(ImageFormatPNG,       0xb96b3caf, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);\nDEFINE_GUID(ImageFormatGIF,       0xb96b3cb0, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);\nDEFINE_GUID(ImageFormatTIFF,      0xb96b3cb1, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);\nDEFINE_GUID(ImageFormatEXIF,      0xb96b3cb2, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);\nDEFINE_GUID(ImageFormatIcon,      0xb96b3cb5, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);\n\nDEFINE_GUID(FrameDimensionTime,       0x6aedbd6d, 0x3fb5, 0x418a, 0x83, 0xa6, 0x7f, 0x45, 0x22, 0x9d, 0xc8, 0x72);\nDEFINE_GUID(FrameDimensionPage,       0x7462dc86, 0x6180, 0x4c7e, 0x8e, 0x3f, 0xee, 0x73, 0x33, 0xa7, 0xa4, 0x83);\nDEFINE_GUID(FrameDimensionResolution, 0x84236f7b, 0x3bd3, 0x428f, 0x8d, 0xab, 0x4e, 0xa1, 0x43, 0x9c, 0xa3, 0x15);\n\nenum ImageLockMode\n{\n    ImageLockModeRead           = 1,\n    ImageLockModeWrite          = 2,\n    ImageLockModeUserInputBuf   = 4\n};\n\nenum RotateFlipType\n{\n    RotateNoneFlipNone = 0,\n    Rotate180FlipXY    = RotateNoneFlipNone,\n\n    Rotate90FlipNone   = 1,\n    Rotate270FlipXY    = Rotate90FlipNone,\n\n    Rotate180FlipNone  = 2,\n    RotateNoneFlipXY   = Rotate180FlipNone,\n\n    Rotate270FlipNone  = 3,\n    Rotate90FlipXY     = Rotate270FlipNone,\n\n    RotateNoneFlipX    = 4,\n    Rotate180FlipY     = RotateNoneFlipX,\n\n    Rotate90FlipX      = 5,\n    Rotate270FlipY     = Rotate90FlipX,\n\n    Rotate180FlipX     = 6,\n    RotateNoneFlipY    = Rotate180FlipX,\n\n    Rotate270FlipX     = 7,\n    Rotate90FlipY      = Rotate270FlipX\n};\n\n#ifdef __cplusplus\nclass EncoderParameter\n{\npublic:\n    GUID    Guid;\n    ULONG   NumberOfValues;\n    ULONG   Type;\n    VOID*   Value;\n};\n\nclass EncoderParameters\n{\npublic:\n    UINT Count;\n    EncoderParameter Parameter[1];\n};\n\nclass ImageCodecInfo\n{\npublic:\n    CLSID Clsid;\n    GUID  FormatID;\n    const WCHAR* CodecName;\n    const WCHAR* DllName;\n    const WCHAR* FormatDescription;\n    const WCHAR* FilenameExtension;\n    const WCHAR* MimeType;\n    DWORD Flags;\n    DWORD Version;\n    DWORD SigCount;\n    DWORD SigSize;\n    const BYTE* SigPattern;\n    const BYTE* SigMask;\n};\n\nclass BitmapData\n{\npublic:\n    UINT Width;\n    UINT Height;\n    INT Stride;\n    Gdiplus::PixelFormat PixelFormat;\n    VOID* Scan0;\n    UINT_PTR Reserved;\n};\n\nclass ImageItemData\n{\npublic:\n    UINT  Size;\n    UINT  Position;\n    VOID* Desc;\n    UINT  DescSize;\n    VOID* Data;\n    UINT  DataSize;\n    UINT  Cookie;\n};\n\nclass PropertyItem\n{\npublic:\n    PROPID id;\n    ULONG  length;\n    WORD   type;\n    VOID*  value;\n};\n\n#else /* end of c++ typedefs */\n\ntypedef enum ImageLockMode ImageLockMode;\ntypedef enum RotateFlipType RotateFlipType;\n\ntypedef struct EncoderParameter\n{\n    GUID Guid;\n    ULONG NumberOfValues;\n    ULONG Type;\n    VOID* Value;\n} EncoderParameter;\n\ntypedef struct EncoderParameters\n{\n    UINT Count;\n    EncoderParameter Parameter[1];\n} EncoderParameters;\n\ntypedef struct ImageCodecInfo\n{\n    CLSID Clsid;\n    GUID  FormatID;\n    const WCHAR* CodecName;\n    const WCHAR* DllName;\n    const WCHAR* FormatDescription;\n    const WCHAR* FilenameExtension;\n    const WCHAR* MimeType;\n    DWORD Flags;\n    DWORD Version;\n    DWORD SigCount;\n    DWORD SigSize;\n    const BYTE* SigPattern;\n    const BYTE* SigMask;\n} ImageCodecInfo;\n\ntypedef struct BitmapData\n{\n    UINT Width;\n    UINT Height;\n    INT Stride;\n    PixelFormat PixelFormat;\n    VOID* Scan0;\n    UINT_PTR Reserved; /* undocumented: stores the lock mode */\n} BitmapData;\n\ntypedef struct ImageItemData\n{\n    UINT  Size;\n    UINT  Position;\n    VOID* Desc;\n    UINT  DescSize;\n    VOID* Data;\n    UINT  DataSize;\n    UINT  Cookie;\n} ImageItemData;\n\ntypedef struct PropertyItem\n{\n    PROPID id;\n    ULONG  length;\n    WORD   type;\n    VOID*  value;\n} PropertyItem;\n\n#endif /* end of c typedefs */\n\n/* property types */\n#define PropertyTagTypeByte       1\n#define PropertyTagTypeASCII      2\n#define PropertyTagTypeShort      3\n#define PropertyTagTypeLong       4\n#define PropertyTagTypeRational   5\n#define PropertyTagTypeUndefined  7\n#define PropertyTagTypeSLONG      9\n#define PropertyTagTypeSRational 10\n\n/* property IDs */\n#define PropertyTagExifIFD                0x8769\n#define PropertyTagGpsIFD                 0x8825\n\n#define PropertyTagNewSubfileType         0x00FE\n#define PropertyTagSubfileType            0x00FF\n#define PropertyTagImageWidth             0x0100\n#define PropertyTagImageHeight            0x0101\n#define PropertyTagBitsPerSample          0x0102\n#define PropertyTagCompression            0x0103\n#define PropertyTagPhotometricInterp      0x0106\n#define PropertyTagThreshHolding          0x0107\n#define PropertyTagCellWidth              0x0108\n#define PropertyTagCellHeight             0x0109\n#define PropertyTagFillOrder              0x010A\n#define PropertyTagDocumentName           0x010D\n#define PropertyTagImageDescription       0x010E\n#define PropertyTagEquipMake              0x010F\n#define PropertyTagEquipModel             0x0110\n#define PropertyTagStripOffsets           0x0111\n#define PropertyTagOrientation            0x0112\n#define PropertyTagSamplesPerPixel        0x0115\n#define PropertyTagRowsPerStrip           0x0116\n#define PropertyTagStripBytesCount        0x0117\n#define PropertyTagMinSampleValue         0x0118\n#define PropertyTagMaxSampleValue         0x0119\n#define PropertyTagXResolution            0x011A\n#define PropertyTagYResolution            0x011B\n#define PropertyTagPlanarConfig           0x011C\n#define PropertyTagPageName               0x011D\n#define PropertyTagXPosition              0x011E\n#define PropertyTagYPosition              0x011F\n#define PropertyTagFreeOffset             0x0120\n#define PropertyTagFreeByteCounts         0x0121\n#define PropertyTagGrayResponseUnit       0x0122\n#define PropertyTagGrayResponseCurve      0x0123\n#define PropertyTagT4Option               0x0124\n#define PropertyTagT6Option               0x0125\n#define PropertyTagResolutionUnit         0x0128\n#define PropertyTagPageNumber             0x0129\n#define PropertyTagTransferFuncition      0x012D\n#define PropertyTagSoftwareUsed           0x0131\n#define PropertyTagDateTime               0x0132\n#define PropertyTagArtist                 0x013B\n#define PropertyTagHostComputer           0x013C\n#define PropertyTagPredictor              0x013D\n#define PropertyTagWhitePoint             0x013E\n#define PropertyTagPrimaryChromaticities  0x013F\n#define PropertyTagColorMap               0x0140\n#define PropertyTagHalftoneHints          0x0141\n#define PropertyTagTileWidth              0x0142\n#define PropertyTagTileLength             0x0143\n#define PropertyTagTileOffset             0x0144\n#define PropertyTagTileByteCounts         0x0145\n#define PropertyTagInkSet                 0x014C\n#define PropertyTagInkNames               0x014D\n#define PropertyTagNumberOfInks           0x014E\n#define PropertyTagDotRange               0x0150\n#define PropertyTagTargetPrinter          0x0151\n#define PropertyTagExtraSamples           0x0152\n#define PropertyTagSampleFormat           0x0153\n#define PropertyTagSMinSampleValue        0x0154\n#define PropertyTagSMaxSampleValue        0x0155\n#define PropertyTagTransferRange          0x0156\n\n#define PropertyTagJPEGProc               0x0200\n#define PropertyTagJPEGInterFormat        0x0201\n#define PropertyTagJPEGInterLength        0x0202\n#define PropertyTagJPEGRestartInterval    0x0203\n#define PropertyTagJPEGLosslessPredictors 0x0205\n#define PropertyTagJPEGPointTransforms    0x0206\n#define PropertyTagJPEGQTables            0x0207\n#define PropertyTagJPEGDCTables           0x0208\n#define PropertyTagJPEGACTables           0x0209\n\n#define PropertyTagYCbCrCoefficients      0x0211\n#define PropertyTagYCbCrSubsampling       0x0212\n#define PropertyTagYCbCrPositioning       0x0213\n#define PropertyTagREFBlackWhite          0x0214\n\n#define PropertyTagICCProfile          0x8773\n\n#define PropertyTagGamma                0x0301\n#define PropertyTagICCProfileDescriptor 0x0302\n#define PropertyTagSRGBRenderingIntent  0x0303\n\n#define PropertyTagImageTitle          0x0320\n#define PropertyTagCopyright           0x8298\n\n#define PropertyTagResolutionXUnit            0x5001\n#define PropertyTagResolutionYUnit            0x5002\n#define PropertyTagResolutionXLengthUnit      0x5003\n#define PropertyTagResolutionYLengthUnit      0x5004\n#define PropertyTagPrintFlags                 0x5005\n#define PropertyTagPrintFlagsVersion          0x5006\n#define PropertyTagPrintFlagsCrop             0x5007\n#define PropertyTagPrintFlagsBleedWidth       0x5008\n#define PropertyTagPrintFlagsBleedWidthScale  0x5009\n#define PropertyTagHalftoneLPI                0x500A\n#define PropertyTagHalftoneLPIUnit            0x500B\n#define PropertyTagHalftoneDegree             0x500C\n#define PropertyTagHalftoneShape              0x500D\n#define PropertyTagHalftoneMisc               0x500E\n#define PropertyTagHalftoneScreen             0x500F\n#define PropertyTagJPEGQuality                0x5010\n#define PropertyTagGridSize                   0x5011\n#define PropertyTagThumbnailFormat            0x5012\n#define PropertyTagThumbnailWidth             0x5013\n#define PropertyTagThumbnailHeight            0x5014\n#define PropertyTagThumbnailColorDepth        0x5015\n#define PropertyTagThumbnailPlanes            0x5016\n#define PropertyTagThumbnailRawBytes          0x5017\n#define PropertyTagThumbnailSize              0x5018\n#define PropertyTagThumbnailCompressedSize    0x5019\n#define PropertyTagColorTransferFunction      0x501A\n#define PropertyTagThumbnailData              0x501B\n\n#define PropertyTagThumbnailImageWidth        0x5020\n#define PropertyTagThumbnailImageHeight       0x5021\n#define PropertyTagThumbnailBitsPerSample     0x5022\n#define PropertyTagThumbnailCompression       0x5023\n#define PropertyTagThumbnailPhotometricInterp 0x5024\n#define PropertyTagThumbnailImageDescription  0x5025\n#define PropertyTagThumbnailEquipMake         0x5026\n#define PropertyTagThumbnailEquipModel        0x5027\n#define PropertyTagThumbnailStripOffsets      0x5028\n#define PropertyTagThumbnailOrientation       0x5029\n#define PropertyTagThumbnailSamplesPerPixel   0x502A\n#define PropertyTagThumbnailRowsPerStrip      0x502B\n#define PropertyTagThumbnailStripBytesCount   0x502C\n#define PropertyTagThumbnailResolutionX       0x502D\n#define PropertyTagThumbnailResolutionY       0x502E\n#define PropertyTagThumbnailPlanarConfig      0x502F\n#define PropertyTagThumbnailResolutionUnit    0x5030\n#define PropertyTagThumbnailTransferFunction  0x5031\n#define PropertyTagThumbnailSoftwareUsed      0x5032\n#define PropertyTagThumbnailDateTime          0x5033\n#define PropertyTagThumbnailArtist            0x5034\n#define PropertyTagThumbnailWhitePoint        0x5035\n#define PropertyTagThumbnailPrimaryChromaticities 0x5036\n#define PropertyTagThumbnailYCbCrCoefficients 0x5037\n#define PropertyTagThumbnailYCbCrSubsampling  0x5038\n#define PropertyTagThumbnailYCbCrPositioning  0x5039\n#define PropertyTagThumbnailRefBlackWhite     0x503A\n#define PropertyTagThumbnailCopyRight         0x503B\n\n#define PropertyTagLuminanceTable    0x5090\n#define PropertyTagChrominanceTable  0x5091\n\n#define PropertyTagFrameDelay        0x5100\n#define PropertyTagLoopCount         0x5101\n#define PropertyTagGlobalPalette     0x5102\n#define PropertyTagIndexBackground   0x5103\n#define PropertyTagIndexTransparent  0x5104\n\n#define PropertyTagPixelUnit         0x5110\n#define PropertyTagPixelPerUnitX     0x5111\n#define PropertyTagPixelPerUnitY     0x5112\n#define PropertyTagPaletteHistogram  0x5113\n\n#define PropertyTagExifExposureTime  0x829A\n#define PropertyTagExifFNumber       0x829D\n\n#define PropertyTagExifExposureProg  0x8822\n#define PropertyTagExifSpectralSense 0x8824\n#define PropertyTagExifISOSpeed      0x8827\n#define PropertyTagExifOECF          0x8828\n\n#define PropertyTagExifVer           0x9000\n#define PropertyTagExifDTOrig        0x9003\n#define PropertyTagExifDTDigitized   0x9004\n\n#define PropertyTagExifCompConfig    0x9101\n#define PropertyTagExifCompBPP       0x9102\n\n#define PropertyTagExifShutterSpeed  0x9201\n#define PropertyTagExifAperture      0x9202\n#define PropertyTagExifBrightness    0x9203\n#define PropertyTagExifExposureBias  0x9204\n#define PropertyTagExifMaxAperture   0x9205\n#define PropertyTagExifSubjectDist   0x9206\n#define PropertyTagExifMeteringMode  0x9207\n#define PropertyTagExifLightSource   0x9208\n#define PropertyTagExifFlash         0x9209\n#define PropertyTagExifFocalLength   0x920A\n#define PropertyTagExifMakerNote     0x927C\n#define PropertyTagExifUserComment   0x9286\n#define PropertyTagExifDTSubsec      0x9290\n#define PropertyTagExifDTOrigSS      0x9291\n#define PropertyTagExifDTDigSS       0x9292\n\n#define PropertyTagExifFPXVer        0xA000\n#define PropertyTagExifColorSpace    0xA001\n#define PropertyTagExifPixXDim       0xA002\n#define PropertyTagExifPixYDim       0xA003\n#define PropertyTagExifRelatedWav    0xA004\n#define PropertyTagExifInterop       0xA005\n#define PropertyTagExifFlashEnergy   0xA20B\n#define PropertyTagExifSpatialFR     0xA20C\n#define PropertyTagExifFocalXRes     0xA20E\n#define PropertyTagExifFocalYRes     0xA20F\n#define PropertyTagExifFocalResUnit  0xA210\n#define PropertyTagExifSubjectLoc    0xA214\n#define PropertyTagExifExposureIndex 0xA215\n#define PropertyTagExifSensingMethod 0xA217\n#define PropertyTagExifFileSource    0xA300\n#define PropertyTagExifSceneType     0xA301\n#define PropertyTagExifCfaPattern    0xA302\n\n#define PropertyTagGpsVer            0x0000\n#define PropertyTagGpsLatitudeRef    0x0001\n#define PropertyTagGpsLatitude       0x0002\n#define PropertyTagGpsLongitudeRef   0x0003\n#define PropertyTagGpsLongitude      0x0004\n#define PropertyTagGpsAltitudeRef    0x0005\n#define PropertyTagGpsAltitude       0x0006\n#define PropertyTagGpsGpsTime        0x0007\n#define PropertyTagGpsGpsSatellites  0x0008\n#define PropertyTagGpsGpsStatus      0x0009\n#define PropertyTagGpsGpsMeasureMode 0x000A\n#define PropertyTagGpsGpsDop         0x000B\n#define PropertyTagGpsSpeedRef       0x000C\n#define PropertyTagGpsSpeed          0x000D\n#define PropertyTagGpsTrackRef       0x000E\n#define PropertyTagGpsTrack          0x000F\n#define PropertyTagGpsImgDirRef      0x0010\n#define PropertyTagGpsImgDir         0x0011\n#define PropertyTagGpsMapDatum       0x0012\n#define PropertyTagGpsDestLatRef     0x0013\n#define PropertyTagGpsDestLat        0x0014\n#define PropertyTagGpsDestLongRef    0x0015\n#define PropertyTagGpsDestLong       0x0016\n#define PropertyTagGpsDestBearRef    0x0017\n#define PropertyTagGpsDestBear       0x0018\n#define PropertyTagGpsDestDistRef    0x0019\n#define PropertyTagGpsDestDist       0x001A\n\n#endif /* _GDIPLUSIMAGING_H */\n"
  },
  {
    "path": "wine/windows/gdiplusinit.h",
    "content": "/*\n * Copyright (C) 2007 Google (Evan Stade)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _GDIPLUSINIT_H\n#define _GDIPLUSINIT_H\n\nenum DebugEventLevel\n{\n    DebugEventLevelFatal,\n    DebugEventLevelWarning\n};\n\ntypedef VOID (WINAPI *DebugEventProc)(enum DebugEventLevel, CHAR *);\ntypedef Status (WINAPI *NotificationHookProc)(ULONG_PTR *);\ntypedef void (WINAPI *NotificationUnhookProc)(ULONG_PTR);\n\nstruct GdiplusStartupInput\n{\n    UINT32 GdiplusVersion;\n    DebugEventProc DebugEventCallback;\n    BOOL SuppressBackgroundThread;\n    BOOL SuppressExternalCodecs;\n\n#ifdef __cplusplus\n    GdiplusStartupInput(DebugEventProc debugEventCallback = NULL,\n        BOOL suppressBackgroundThread = FALSE,\n        BOOL suppressExternalCodecs = FALSE)\n    {\n        GdiplusVersion = 1;\n        DebugEventCallback = debugEventCallback;\n        SuppressBackgroundThread = suppressBackgroundThread;\n        SuppressExternalCodecs = suppressExternalCodecs;\n    }\n#endif\n};\n\nstruct GdiplusStartupOutput\n{\n    NotificationHookProc NotificationHook;\n    NotificationUnhookProc NotificationUnhook;\n};\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nStatus WINAPI GdiplusStartup(ULONG_PTR *, const struct GdiplusStartupInput *, struct GdiplusStartupOutput *);\nvoid WINAPI GdiplusShutdown(ULONG_PTR);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/gdiplusmem.h",
    "content": "/*\n * Copyright (C) 2007 Google (Evan Stade)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _GDIPLUSMEM_H\n#define _GDIPLUSMEM_H\n\n#define WINGDIPAPI __stdcall\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nvoid* WINGDIPAPI GdipAlloc(SIZE_T) __WINE_ALLOC_SIZE(1);\nvoid WINGDIPAPI GdipFree(void*);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/gdiplusmetaheader.h",
    "content": "/*\n * Copyright (C) 2007 Google (Evan Stade)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _GDIPLUSMETAHEADER_H\n#define _GDIPLUSMETAHEADER_H\n\ntypedef struct\n{\n    DWORD   iType;\n    DWORD   nSize;\n    RECTL   rclBounds;\n    RECTL   rclFrame;\n    DWORD   dSignature;\n    DWORD   nVersion;\n    DWORD   nBytes;\n    DWORD   nRecords;\n    WORD    nHandles;\n    WORD    sReserved;\n    DWORD   nDescription;\n    DWORD   offDescription;\n    DWORD   nPalEntries;\n    SIZEL   szlDevice;\n    SIZEL   szlMillimeters;\n} ENHMETAHEADER3;\n\n#include <pshpack2.h>\n\ntypedef struct\n{\n    INT16  Left;\n    INT16  Top;\n    INT16  Right;\n    INT16  Bottom;\n} PWMFRect16;\n\ntypedef struct\n{\n    UINT32     Key;\n    INT16      Hmf;\n    PWMFRect16 BoundingBox;\n    INT16      Inch;\n    UINT32     Reserved;\n    INT16      Checksum;\n} WmfPlaceableFileHeader;\n\n#include <poppack.h>\n\n#define GDIP_EMFPLUSFLAGS_DISPLAY       0x00000001\n\n#ifdef __cplusplus\nclass MetafileHeader\n{\npublic:\n    MetafileType        Type;\n    UINT                Size;\n    UINT                Version;\n    UINT                EmfPlusFlags;\n    REAL                DpiX;\n    REAL                DpiY;\n    INT                 X;\n    INT                 Y;\n    INT                 Width;\n    INT                 Height;\n    union\n    {\n        METAHEADER      WmfHeader;\n        ENHMETAHEADER3  EmfHeader;\n    };\n    INT                 EmfPlusHeaderSize;\n    INT                 LogicalDpiX;\n    INT                 LogicalDpiY;\n\npublic:\n    MetafileType GetType() const { return Type; }\n\n    UINT GetMetafileSize() const { return Size; }\n\n    UINT GetVersion() const { return Version; }\n\n    UINT GetEmfPlusFlags() const { return EmfPlusFlags; }\n\n    REAL GetDpiX() const { return DpiX; }\n\n    REAL GetDpiY() const { return DpiY; }\n\n    VOID GetBounds (OUT Rect *r) const\n    {\n        r->X = X;\n        r->Y = Y;\n        r->Width = Width;\n        r->Height = Height;\n    }\n\n    BOOL IsWmf() const\n    {\n       return ((Type == MetafileTypeWmf) || (Type == MetafileTypeWmfPlaceable));\n    }\n\n    BOOL IsWmfPlaceable() const { return (Type == MetafileTypeWmfPlaceable); }\n\n    BOOL IsEmf() const { return (Type == MetafileTypeEmf); }\n\n    BOOL IsEmfOrEmfPlus() const { return (Type >= MetafileTypeEmf); }\n\n    BOOL IsEmfPlus() const { return (Type >= MetafileTypeEmfPlusOnly); }\n\n    BOOL IsEmfPlusDual() const { return (Type == MetafileTypeEmfPlusDual); }\n\n    BOOL IsEmfPlusOnly() const { return (Type == MetafileTypeEmfPlusOnly); }\n\n    BOOL IsDisplay() const\n    {\n        return IsEmfPlus() && ((EmfPlusFlags & GDIP_EMFPLUSFLAGS_DISPLAY) != 0);\n    }\n\n    const METAHEADER * GetWmfHeader() const\n    {\n        return IsWmf() ? &WmfHeader : NULL;\n    }\n\n    const ENHMETAHEADER3 * GetEmfHeader() const\n    {\n        return IsEmfOrEmfPlus() ? &EmfHeader : NULL;\n    }\n};\n#else /* end of c++ typedefs */\n\ntypedef struct MetafileHeader\n{\n    MetafileType        Type;\n    UINT                Size;\n    UINT                Version;\n    UINT                EmfPlusFlags;\n    REAL                DpiX;\n    REAL                DpiY;\n    INT                 X;\n    INT                 Y;\n    INT                 Width;\n    INT                 Height;\n    union\n    {\n        METAHEADER      WmfHeader;\n        ENHMETAHEADER3  EmfHeader;\n    } DUMMYUNIONNAME;\n    INT                 EmfPlusHeaderSize;\n    INT                 LogicalDpiX;\n    INT                 LogicalDpiY;\n} MetafileHeader;\n\n#endif /* end of c typedefs */\n\n#endif /* _GDIPLUSMETAHEADER_H */\n"
  },
  {
    "path": "wine/windows/gdipluspixelformats.h",
    "content": "/*\n * Copyright (C) 2007 Google (Evan Stade)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _GDIPLUSPIXELFORMATS_H\n#define _GDIPLUSPIXELFORMATS_H\n\ntypedef DWORD ARGB;\ntypedef INT PixelFormat;\n\n#define    PixelFormatIndexed   0x00010000\n#define    PixelFormatGDI       0x00020000\n#define    PixelFormatAlpha     0x00040000\n#define    PixelFormatPAlpha    0x00080000\n#define    PixelFormatExtended  0x00100000\n#define    PixelFormatCanonical 0x00200000\n\n#define    PixelFormatUndefined 0\n#define    PixelFormatDontCare  0\n\n#define    PixelFormat1bppIndexed       (1 | ( 1 << 8) | PixelFormatIndexed | PixelFormatGDI)\n#define    PixelFormat4bppIndexed       (2 | ( 4 << 8) | PixelFormatIndexed | PixelFormatGDI)\n#define    PixelFormat8bppIndexed       (3 | ( 8 << 8) | PixelFormatIndexed | PixelFormatGDI)\n#define    PixelFormat16bppGrayScale    (4 | (16 << 8) | PixelFormatExtended)\n#define    PixelFormat16bppRGB555       (5 | (16 << 8) | PixelFormatGDI)\n#define    PixelFormat16bppRGB565       (6 | (16 << 8) | PixelFormatGDI)\n#define    PixelFormat16bppARGB1555     (7 | (16 << 8) | PixelFormatAlpha | PixelFormatGDI)\n#define    PixelFormat24bppRGB          (8 | (24 << 8) | PixelFormatGDI)\n#define    PixelFormat32bppRGB          (9 | (32 << 8) | PixelFormatGDI)\n#define    PixelFormat32bppARGB         (10 | (32 << 8) | PixelFormatAlpha | PixelFormatGDI | PixelFormatCanonical)\n#define    PixelFormat32bppPARGB        (11 | (32 << 8) | PixelFormatAlpha | PixelFormatPAlpha | PixelFormatGDI)\n#define    PixelFormat48bppRGB          (12 | (48 << 8) | PixelFormatExtended)\n#define    PixelFormat64bppARGB         (13 | (64 << 8) | PixelFormatAlpha  | PixelFormatCanonical | PixelFormatExtended)\n#define    PixelFormat64bppPARGB        (14 | (64 << 8) | PixelFormatAlpha  | PixelFormatPAlpha | PixelFormatExtended)\n#define    PixelFormat32bppCMYK         (15 | (32 << 8))\n#define    PixelFormatMax               16\n\nstatic inline BOOL IsIndexedPixelFormat(PixelFormat format)\n{\n    return (format & PixelFormatIndexed) != 0;\n}\n\nstatic inline BOOL IsAlphaPixelFormat(PixelFormat format)\n{\n    return (format & PixelFormatAlpha) != 0;\n}\n\nstatic inline BOOL IsCanonicalPixelFormat(PixelFormat format)\n{\n    return (format & PixelFormatCanonical) != 0;\n}\n\nstatic inline BOOL IsExtendedPixelFormat(PixelFormat format)\n{\n    return (format & PixelFormatExtended) != 0;\n}\n\nstatic inline UINT GetPixelFormatSize(PixelFormat format)\n{\n    return (format >> 8) & 0xff;\n}\n\nenum PaletteFlags\n{\n    PaletteFlagsHasAlpha        = 1,\n    PaletteFlagsGrayScale       = 2,\n    PaletteFlagsHalftone        = 4\n};\n\n#ifdef __cplusplus\n\nstruct ColorPalette\n{\npublic:\n    UINT Flags;\n    UINT Count;\n    ARGB Entries[1];\n};\n\n#else /* end of c++ typedefs */\n\ntypedef struct ColorPalette\n{\n    UINT Flags;\n    UINT Count;\n    ARGB Entries[1];\n} ColorPalette;\n\n#endif  /* end of c typedefs */\n\ntypedef enum DitherType\n{\n    DitherTypeNone,\n    DitherTypeSolid,\n    DitherTypeOrdered4x4,\n    DitherTypeOrdered8x8,\n    DitherTypeOrdered16x16,\n    DitherTypeSpiral4x4,\n    DitherTypeSpiral8x8,\n    DitherTypeDualSpiral4x4,\n    DitherTypeDualSpiral8x8,\n    DitherTypeErrorDiffusion,\n    DitherTypeMax\n} DitherType;\n\ntypedef enum PaletteType\n{\n    PaletteTypeCustom,\n    PaletteTypeOptimal,\n    PaletteTypeFixedBW,\n    PaletteTypeFixedHalftone8,\n    PaletteTypeFixedHalftone27,\n    PaletteTypeFixedHalftone64,\n    PaletteTypeFixedHalftone125,\n    PaletteTypeFixedHalftone216,\n    PaletteTypeFixedHalftone252,\n    PaletteTypeFixedHalftone256\n} PaletteType;\n\n#endif\n"
  },
  {
    "path": "wine/windows/gdiplustypes.h",
    "content": "/*\n * Copyright (C) 2007 Google (Evan Stade)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _GDIPLUSTYPES_H\n#define _GDIPLUSTYPES_H\n\ntypedef float REAL;\n\nenum Status{\n    Ok                          = 0,\n    GenericError                = 1,\n    InvalidParameter            = 2,\n    OutOfMemory                 = 3,\n    ObjectBusy                  = 4,\n    InsufficientBuffer          = 5,\n    NotImplemented              = 6,\n    Win32Error                  = 7,\n    WrongState                  = 8,\n    Aborted                     = 9,\n    FileNotFound                = 10,\n    ValueOverflow               = 11,\n    AccessDenied                = 12,\n    UnknownImageFormat          = 13,\n    FontFamilyNotFound          = 14,\n    FontStyleNotFound           = 15,\n    NotTrueTypeFont             = 16,\n    UnsupportedGdiplusVersion   = 17,\n    GdiplusNotInitialized       = 18,\n    PropertyNotFound            = 19,\n    PropertyNotSupported        = 20,\n    ProfileNotFound             = 21\n};\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef BOOL (CALLBACK * ImageAbort)(VOID *);\ntypedef ImageAbort DrawImageAbort;\ntypedef ImageAbort GetThumbnailImageAbort;\ntypedef struct GdiplusAbort GdiplusAbort;\n\ntypedef BOOL (CALLBACK * EnumerateMetafileProc)(EmfPlusRecordType,UINT,UINT,const BYTE*,VOID*);\n\n#ifdef __cplusplus\n}\n#endif\n\n\n#ifdef __cplusplus\n\nclass Point\n{\npublic:\n   Point()\n   {\n       X = Y = 0;\n   }\n\n   Point(IN const Point &pt)\n   {\n       X = pt.X;\n       Y = pt.Y;\n   }\n\n   /* FIXME: missing constructor that takes a Size */\n\n   Point(IN INT x, IN INT y)\n   {\n       X = x;\n       Y = y;\n   }\n\n   Point operator+(IN const Point& pt) const\n   {\n       return Point(X + pt.X, Y + pt.Y);\n   }\n\n   Point operator-(IN const Point& pt) const\n   {\n       return Point(X - pt.X, Y - pt.Y);\n   }\n\n   BOOL Equals(IN const Point& pt)\n   {\n       return (X == pt.X) && (Y == pt.Y);\n   }\n\npublic:\n    INT X;\n    INT Y;\n};\n\nclass PointF\n{\npublic:\n   PointF()\n   {\n       X = Y = 0.0f;\n   }\n\n   PointF(IN const PointF &pt)\n   {\n       X = pt.X;\n       Y = pt.Y;\n   }\n\n   /* FIXME: missing constructor that takes a SizeF */\n\n   PointF(IN REAL x, IN REAL y)\n   {\n       X = x;\n       Y = y;\n   }\n\n   PointF operator+(IN const PointF& pt) const\n   {\n       return PointF(X + pt.X, Y + pt.Y);\n   }\n\n   PointF operator-(IN const PointF& pt) const\n   {\n       return PointF(X - pt.X, Y - pt.Y);\n   }\n\n   BOOL Equals(IN const PointF& pt)\n   {\n       return (X == pt.X) && (Y == pt.Y);\n   }\n\npublic:\n    REAL X;\n    REAL Y;\n};\n\nclass PathData\n{\npublic:\n    PathData()\n    {\n        Count = 0;\n        Points = NULL;\n        Types = NULL;\n    }\n\n    ~PathData()\n    {\n        if (Points != NULL)\n        {\n            delete Points;\n        }\n\n        if (Types != NULL)\n        {\n            delete Types;\n        }\n    }\n\nprivate:\n    PathData(const PathData &);\n    PathData& operator=(const PathData &);\n\npublic:\n    INT Count;\n    PointF* Points;\n    BYTE* Types;\n};\n\n/* FIXME: missing the methods. */\nclass RectF\n{\npublic:\n    REAL X;\n    REAL Y;\n    REAL Width;\n    REAL Height;\n};\n\n/* FIXME: missing the methods. */\nclass Rect\n{\npublic:\n    INT X;\n    INT Y;\n    INT Width;\n    INT Height;\n};\n\nclass CharacterRange\n{\npublic:\n    CharacterRange()\n    {\n        First = Length = 0;\n    }\n\n    CharacterRange(INT first, INT length)\n    {\n        First = first;\n        Length = length;\n    }\n\n    CharacterRange& operator=(const CharacterRange& rhs)\n    {\n        First = rhs.First;\n        Length = rhs.Length;\n        return *this;\n    }\npublic:\n    INT First;\n    INT Length;\n};\n\n#else /* end of c++ typedefs */\n\ntypedef struct Point\n{\n    INT X;\n    INT Y;\n} Point;\n\ntypedef struct PointF\n{\n    REAL X;\n    REAL Y;\n} PointF;\n\ntypedef struct PathData\n{\n    INT Count;\n    PointF* Points;\n    BYTE* Types;\n} PathData;\n\ntypedef struct RectF\n{\n    REAL X;\n    REAL Y;\n    REAL Width;\n    REAL Height;\n} RectF;\n\ntypedef struct Rect\n{\n    INT X;\n    INT Y;\n    INT Width;\n    INT Height;\n} Rect;\n\ntypedef struct CharacterRange\n{\n    INT First;\n    INT Length;\n} CharacterRange;\n\ntypedef enum Status Status;\n\n#endif /* end of c typedefs */\n\n#endif\n"
  },
  {
    "path": "wine/windows/guiddef.h",
    "content": "/*\n * Copyright (C) 2000 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef GUID_DEFINED\n#define GUID_DEFINED\n\n#ifdef __WIDL__\ntypedef struct\n{\n    unsigned long  Data1;\n    unsigned short Data2;\n    unsigned short Data3;\n    byte           Data4[ 8 ];\n} GUID;\n#else\ntypedef struct _GUID\n{\n#ifdef _MSC_VER\n    unsigned long  Data1;\n#else\n    unsigned int   Data1;\n#endif\n    unsigned short Data2;\n    unsigned short Data3;\n    unsigned char  Data4[ 8 ];\n} GUID;\n#endif\n\n/* Macros for __uuidof emulation */\n#if defined(__cplusplus) && !defined(_MSC_VER)\n\nextern \"C++\" {\n    template<typename T> const GUID &__wine_uuidof();\n}\n\n#define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)           \\\n    extern \"C++\" {                                                      \\\n    template<> inline const GUID &__wine_uuidof<type>() {               \\\n        static const IID __uuid_inst = {l,w1,w2, {b1,b2,b3,b4,b5,b6,b7,b8}}; \\\n        return __uuid_inst;                                             \\\n    }                                                                   \\\n    template<> inline const GUID &__wine_uuidof<type*>() {              \\\n        return __wine_uuidof<type>();                                   \\\n    }                                                                   \\\n    }\n\n#define __uuidof(type) __wine_uuidof<typeof(type)>()\n\n#else\n\n#define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)\n\n#endif\n\n#endif\n\n#undef DEFINE_GUID\n\n#ifdef INITGUID\n#ifdef __cplusplus\n#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\\n        EXTERN_C const GUID name DECLSPEC_HIDDEN; \\\n        EXTERN_C const GUID name = \\\n\t{ l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }\n#else\n#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\\n        const GUID name DECLSPEC_HIDDEN; \\\n        const GUID name = \\\n\t{ l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }\n#endif\n#else\n#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\\n    EXTERN_C const GUID name DECLSPEC_HIDDEN\n#endif\n\n#define DEFINE_OLEGUID(name, l, w1, w2) \\\n\tDEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46)\n\n#ifndef _GUIDDEF_H_\n#define _GUIDDEF_H_\n\n#ifndef __LPGUID_DEFINED__\n#define __LPGUID_DEFINED__\ntypedef GUID *LPGUID;\n#endif\n\n#ifndef __LPCGUID_DEFINED__\n#define __LPCGUID_DEFINED__\ntypedef const GUID *LPCGUID;\n#endif\n\n#ifndef __IID_DEFINED__\n#define __IID_DEFINED__\n\ntypedef GUID IID,*LPIID;\ntypedef GUID CLSID,*LPCLSID;\ntypedef GUID FMTID,*LPFMTID;\n#define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2)\n#define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2)\n#define IsEqualFMTID(rfmtid1, rfmtid2) IsEqualGUID(rfmtid1, rfmtid2)\n#define IID_NULL   GUID_NULL\n#define CLSID_NULL GUID_NULL\n#define FMTID_NULL GUID_NULL\n\n#ifdef __midl_proxy\n#define __MIDL_CONST\n#else\n#define __MIDL_CONST const\n#endif\n\n#endif /* ndef __IID_DEFINED__ */\n\n#ifdef __cplusplus\n#define REFGUID             const GUID &\n#define REFCLSID            const CLSID &\n#define REFIID              const IID &\n#define REFFMTID            const FMTID &\n#else /* !defined(__cplusplus) */\n#define REFGUID             const GUID* __MIDL_CONST\n#define REFCLSID            const CLSID* __MIDL_CONST\n#define REFIID              const IID* __MIDL_CONST\n#define REFFMTID            const FMTID* __MIDL_CONST\n#endif /* !defined(__cplusplus) */\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n#define IsEqualGUID(rguid1, rguid2) (!memcmp(&(rguid1), &(rguid2), sizeof(GUID)))\n#else /* defined(__cplusplus) && !defined(CINTERFACE) */\n#define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID)))\n#endif /* defined(__cplusplus) && !defined(CINTERFACE) */\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n#include <string.h>\ninline bool operator==(const GUID& guidOne, const GUID& guidOther)\n{\n    return !memcmp(&guidOne,&guidOther,sizeof(GUID));\n}\ninline bool operator!=(const GUID& guidOne, const GUID& guidOther)\n{\n    return !(guidOne == guidOther);\n}\n#endif\n\nextern const IID GUID_NULL;\n\n#endif /* _GUIDDEF_H_ */\n"
  },
  {
    "path": "wine/windows/hidusage.h",
    "content": "/*\n * Copyright (C) 2015 Austin English\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __HIDUSAGE_H\n#define __HIDUSAGE_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef USHORT USAGE, *PUSAGE;\n\n#define HID_USAGE_GENERIC_POINTER             ((USAGE) 0x01)\n#define HID_USAGE_GENERIC_MOUSE               ((USAGE) 0x02)\n#define HID_USAGE_GENERIC_JOYSTICK            ((USAGE) 0x04)\n#define HID_USAGE_GENERIC_GAMEPAD             ((USAGE) 0x05)\n#define HID_USAGE_GENERIC_KEYBOARD            ((USAGE) 0x06)\n#define HID_USAGE_GENERIC_KEYPAD              ((USAGE) 0x07)\n#define HID_USAGE_GENERIC_SYSTEM_CTL          ((USAGE) 0x80)\n#define HID_USAGE_GENERIC_X                   ((USAGE) 0x30)\n#define HID_USAGE_GENERIC_Y                   ((USAGE) 0x31)\n#define HID_USAGE_GENERIC_Z                   ((USAGE) 0x32)\n#define HID_USAGE_GENERIC_RX                  ((USAGE) 0x33)\n#define HID_USAGE_GENERIC_RY                  ((USAGE) 0x34)\n#define HID_USAGE_GENERIC_RZ                  ((USAGE) 0x35)\n#define HID_USAGE_GENERIC_SLIDER              ((USAGE) 0x36)\n#define HID_USAGE_GENERIC_DIAL                ((USAGE) 0x37)\n#define HID_USAGE_GENERIC_WHEEL               ((USAGE) 0x38)\n#define HID_USAGE_GENERIC_HATSWITCH           ((USAGE) 0x39)\n#define HID_USAGE_GENERIC_COUNTED_BUFFER      ((USAGE) 0x3A)\n#define HID_USAGE_GENERIC_BYTE_COUNT          ((USAGE) 0x3B)\n#define HID_USAGE_GENERIC_MOTION_WAKEUP       ((USAGE) 0x3C)\n#define HID_USAGE_GENERIC_VX                  ((USAGE) 0x40)\n#define HID_USAGE_GENERIC_VY                  ((USAGE) 0x41)\n#define HID_USAGE_GENERIC_VZ                  ((USAGE) 0x42)\n#define HID_USAGE_GENERIC_VBRX                ((USAGE) 0x43)\n#define HID_USAGE_GENERIC_VBRY                ((USAGE) 0x44)\n#define HID_USAGE_GENERIC_VBRZ                ((USAGE) 0x45)\n#define HID_USAGE_GENERIC_VNO                 ((USAGE) 0x46)\n#define HID_USAGE_GENERIC_SYSCTL_POWER        ((USAGE) 0x81)\n#define HID_USAGE_GENERIC_SYSCTL_SLEEP        ((USAGE) 0x82)\n#define HID_USAGE_GENERIC_SYSCTL_WAKE         ((USAGE) 0x83)\n#define HID_USAGE_GENERIC_SYSCTL_CONTEXT_MENU ((USAGE) 0x84)\n#define HID_USAGE_GENERIC_SYSCTL_MAIN_MENU    ((USAGE) 0x85)\n#define HID_USAGE_GENERIC_SYSCTL_APP_MENU     ((USAGE) 0x86)\n#define HID_USAGE_GENERIC_SYSCTL_HELP_MENU    ((USAGE) 0x87)\n#define HID_USAGE_GENERIC_SYSCTL_MENU_EXIT    ((USAGE) 0x88)\n#define HID_USAGE_GENERIC_SYSCTL_MENU_SELECT  ((USAGE) 0x89)\n#define HID_USAGE_GENERIC_SYSCTL_MENU_RIGHT   ((USAGE) 0x8A)\n#define HID_USAGE_GENERIC_SYSCTL_MENU_LEFT    ((USAGE) 0x8B)\n#define HID_USAGE_GENERIC_SYSCTL_MENU_UP      ((USAGE) 0x8C)\n#define HID_USAGE_GENERIC_SYSCTL_MENU_DOWN    ((USAGE) 0x8D)\n\n#define HID_USAGE_KEYBOARD_NOEVENT        ((USAGE) 0x00)\n#define HID_USAGE_KEYBOARD_ROLLOVER       ((USAGE) 0x01)\n#define HID_USAGE_KEYBOARD_POSTFAIL       ((USAGE) 0x02)\n#define HID_USAGE_KEYBOARD_UNDEFINED      ((USAGE) 0x03)\n#define HID_USAGE_KEYBOARD_aA             ((USAGE) 0x04)\n#define HID_USAGE_KEYBOARD_zZ             ((USAGE) 0x1D)\n#define HID_USAGE_KEYBOARD_ONE            ((USAGE) 0x1E)\n#define HID_USAGE_KEYBOARD_ZERO           ((USAGE) 0x27)\n#define HID_USAGE_KEYBOARD_LCTRL          ((USAGE) 0xE0)\n#define HID_USAGE_KEYBOARD_LSHFT          ((USAGE) 0xE1)\n#define HID_USAGE_KEYBOARD_LALT           ((USAGE) 0xE2)\n#define HID_USAGE_KEYBOARD_LGUI           ((USAGE) 0xE3)\n#define HID_USAGE_KEYBOARD_RCTRL          ((USAGE) 0xE4)\n#define HID_USAGE_KEYBOARD_RSHFT          ((USAGE) 0xE5)\n#define HID_USAGE_KEYBOARD_RALT           ((USAGE) 0xE6)\n#define HID_USAGE_KEYBOARD_RGUI           ((USAGE) 0xE7)\n#define HID_USAGE_KEYBOARD_SCROLL_LOCK    ((USAGE) 0x47)\n#define HID_USAGE_KEYBOARD_NUM_LOCK       ((USAGE) 0x53)\n#define HID_USAGE_KEYBOARD_CAPS_LOCK      ((USAGE) 0x39)\n#define HID_USAGE_KEYBOARD_F1             ((USAGE) 0x3A)\n#define HID_USAGE_KEYBOARD_F12            ((USAGE) 0x45)\n#define HID_USAGE_KEYBOARD_RETURN         ((USAGE) 0x28)\n#define HID_USAGE_KEYBOARD_ESCAPE         ((USAGE) 0x29)\n#define HID_USAGE_KEYBOARD_DELETE         ((USAGE) 0x2A)\n#define HID_USAGE_KEYBOARD_PRINT_SCREEN   ((USAGE) 0x46)\n\n#define HID_USAGE_LED_NUM_LOCK                  ((USAGE) 0x01)\n#define HID_USAGE_LED_CAPS_LOCK                 ((USAGE) 0x02)\n#define HID_USAGE_LED_SCROLL_LOCK               ((USAGE) 0x03)\n#define HID_USAGE_LED_COMPOSE                   ((USAGE) 0x04)\n#define HID_USAGE_LED_KANA                      ((USAGE) 0x05)\n#define HID_USAGE_LED_POWER                     ((USAGE) 0x06)\n#define HID_USAGE_LED_SHIFT                     ((USAGE) 0x07)\n#define HID_USAGE_LED_DO_NOT_DISTURB            ((USAGE) 0x08)\n#define HID_USAGE_LED_MUTE                      ((USAGE) 0x09)\n#define HID_USAGE_LED_TONE_ENABLE               ((USAGE) 0x0A)\n#define HID_USAGE_LED_HIGH_CUT_FILTER           ((USAGE) 0x0B)\n#define HID_USAGE_LED_LOW_CUT_FILTER            ((USAGE) 0x0C)\n#define HID_USAGE_LED_EQUALIZER_ENABLE          ((USAGE) 0x0D)\n#define HID_USAGE_LED_SOUND_FIELD_ON            ((USAGE) 0x0E)\n#define HID_USAGE_LED_SURROUND_FIELD_ON         ((USAGE) 0x0F)\n#define HID_USAGE_LED_REPEAT                    ((USAGE) 0x10)\n#define HID_USAGE_LED_STEREO                    ((USAGE) 0x11)\n#define HID_USAGE_LED_SAMPLING_RATE_DETECT      ((USAGE) 0x12)\n#define HID_USAGE_LED_SPINNING                  ((USAGE) 0x13)\n#define HID_USAGE_LED_CAV                       ((USAGE) 0x14)\n#define HID_USAGE_LED_CLV                       ((USAGE) 0x15)\n#define HID_USAGE_LED_RECORDING_FORMAT_DET      ((USAGE) 0x16)\n#define HID_USAGE_LED_OFF_HOOK                  ((USAGE) 0x17)\n#define HID_USAGE_LED_RING                      ((USAGE) 0x18)\n#define HID_USAGE_LED_MESSAGE_WAITING           ((USAGE) 0x19)\n#define HID_USAGE_LED_DATA_MODE                 ((USAGE) 0x1A)\n#define HID_USAGE_LED_BATTERY_OPERATION         ((USAGE) 0x1B)\n#define HID_USAGE_LED_BATTERY_OK                ((USAGE) 0x1C)\n#define HID_USAGE_LED_BATTERY_LOW               ((USAGE) 0x1D)\n#define HID_USAGE_LED_SPEAKER                   ((USAGE) 0x1E)\n#define HID_USAGE_LED_HEAD_SET                  ((USAGE) 0x1F)\n#define HID_USAGE_LED_HOLD                      ((USAGE) 0x20)\n#define HID_USAGE_LED_MICROPHONE                ((USAGE) 0x21)\n#define HID_USAGE_LED_COVERAGE                  ((USAGE) 0x22)\n#define HID_USAGE_LED_NIGHT_MODE                ((USAGE) 0x23)\n#define HID_USAGE_LED_SEND_CALLS                ((USAGE) 0x24)\n#define HID_USAGE_LED_CALL_PICKUP               ((USAGE) 0x25)\n#define HID_USAGE_LED_CONFERENCE                ((USAGE) 0x26)\n#define HID_USAGE_LED_STAND_BY                  ((USAGE) 0x27)\n#define HID_USAGE_LED_CAMERA_ON                 ((USAGE) 0x28)\n#define HID_USAGE_LED_CAMERA_OFF                ((USAGE) 0x29)\n#define HID_USAGE_LED_ON_LINE                   ((USAGE) 0x2A)\n#define HID_USAGE_LED_OFF_LINE                  ((USAGE) 0x2B)\n#define HID_USAGE_LED_BUSY                      ((USAGE) 0x2C)\n#define HID_USAGE_LED_READY                     ((USAGE) 0x2D)\n#define HID_USAGE_LED_PAPER_OUT                 ((USAGE) 0x2E)\n#define HID_USAGE_LED_PAPER_JAM                 ((USAGE) 0x2F)\n#define HID_USAGE_LED_REMOTE                    ((USAGE) 0x30)\n#define HID_USAGE_LED_FORWARD                   ((USAGE) 0x31)\n#define HID_USAGE_LED_REVERSE                   ((USAGE) 0x32)\n#define HID_USAGE_LED_STOP                      ((USAGE) 0x33)\n#define HID_USAGE_LED_REWIND                    ((USAGE) 0x34)\n#define HID_USAGE_LED_FAST_FORWARD              ((USAGE) 0x35)\n#define HID_USAGE_LED_PLAY                      ((USAGE) 0x36)\n#define HID_USAGE_LED_PAUSE                     ((USAGE) 0x37)\n#define HID_USAGE_LED_RECORD                    ((USAGE) 0x38)\n#define HID_USAGE_LED_ERROR                     ((USAGE) 0x39)\n#define HID_USAGE_LED_SELECTED_INDICATOR        ((USAGE) 0x3A)\n#define HID_USAGE_LED_IN_USE_INDICATOR          ((USAGE) 0x3B)\n#define HID_USAGE_LED_MULTI_MODE_INDICATOR      ((USAGE) 0x3C)\n#define HID_USAGE_LED_INDICATOR_ON              ((USAGE) 0x3D)\n#define HID_USAGE_LED_INDICATOR_FLASH           ((USAGE) 0x3E)\n#define HID_USAGE_LED_INDICATOR_SLOW_BLINK      ((USAGE) 0x3F)\n#define HID_USAGE_LED_INDICATOR_FAST_BLINK      ((USAGE) 0x40)\n#define HID_USAGE_LED_INDICATOR_OFF             ((USAGE) 0x41)\n#define HID_USAGE_LED_FLASH_ON_TIME             ((USAGE) 0x42)\n#define HID_USAGE_LED_SLOW_BLINK_ON_TIME        ((USAGE) 0x43)\n#define HID_USAGE_LED_SLOW_BLINK_OFF_TIME       ((USAGE) 0x44)\n#define HID_USAGE_LED_FAST_BLINK_ON_TIME        ((USAGE) 0x45)\n#define HID_USAGE_LED_FAST_BLINK_OFF_TIME       ((USAGE) 0x46)\n#define HID_USAGE_LED_INDICATOR_COLOR           ((USAGE) 0x47)\n#define HID_USAGE_LED_RED                       ((USAGE) 0x48)\n#define HID_USAGE_LED_GREEN                     ((USAGE) 0x49)\n#define HID_USAGE_LED_AMBER                     ((USAGE) 0x4A)\n#define HID_USAGE_LED_GENERIC_INDICATOR         ((USAGE) 0x3B)\n\n#define HID_USAGE_PAGE_UNDEFINED          ((USAGE) 0x00)\n#define HID_USAGE_PAGE_GENERIC            ((USAGE) 0x01)\n#define HID_USAGE_PAGE_SIMULATION         ((USAGE) 0x02)\n#define HID_USAGE_PAGE_VR                 ((USAGE) 0x03)\n#define HID_USAGE_PAGE_SPORT              ((USAGE) 0x04)\n#define HID_USAGE_PAGE_GAME               ((USAGE) 0x05)\n#define HID_USAGE_PAGE_KEYBOARD           ((USAGE) 0x07)\n#define HID_USAGE_PAGE_LED                ((USAGE) 0x08)\n#define HID_USAGE_PAGE_BUTTON             ((USAGE) 0x09)\n#define HID_USAGE_PAGE_ORDINAL            ((USAGE) 0x0A)\n#define HID_USAGE_PAGE_TELEPHONY          ((USAGE) 0x0B)\n#define HID_USAGE_PAGE_CONSUMER           ((USAGE) 0x0C)\n#define HID_USAGE_PAGE_DIGITIZER          ((USAGE) 0x0D)\n#define HID_USAGE_PAGE_UNICODE            ((USAGE) 0x10)\n#define HID_USAGE_PAGE_ALPHANUMERIC       ((USAGE) 0x14)\n\n#define HID_USAGE_TELEPHONY_PHONE               ((USAGE) 0x01)\n#define HID_USAGE_TELEPHONY_ANSWERING_MACHINE   ((USAGE) 0x02)\n#define HID_USAGE_TELEPHONY_MESSAGE_CONTROLS    ((USAGE) 0x03)\n#define HID_USAGE_TELEPHONY_HANDSET             ((USAGE) 0x04)\n#define HID_USAGE_TELEPHONY_HEADSET             ((USAGE) 0x05)\n#define HID_USAGE_TELEPHONY_KEYPAD              ((USAGE) 0x06)\n#define HID_USAGE_TELEPHONY_PROGRAMMABLE_BUTTON ((USAGE) 0x07)\n\n#define HID_USAGE_SIMULATION_RUDDER       ((USAGE) 0xBA)\n#define HID_USAGE_SIMULATION_THROTTLE     ((USAGE) 0xBB)\n\n#define HID_USAGE_TELEPHONY_PHONE                ((USAGE) 0x01)\n#define HID_USAGE_TELEPHONY_ANSWERING_MACHINE    ((USAGE) 0x02)\n#define HID_USAGE_TELEPHONY_MESSAGE_CONTROLS     ((USAGE) 0x03)\n#define HID_USAGE_TELEPHONY_HANDSET              ((USAGE) 0x04)\n#define HID_USAGE_TELEPHONY_HEADSET              ((USAGE) 0x05)\n#define HID_USAGE_TELEPHONY_KEYPAD               ((USAGE) 0x06)\n#define HID_USAGE_TELEPHONY_PROGRAMMABLE_BUTTON  ((USAGE) 0x07)\n#define HID_USAGE_TELEPHONY_REDIAL               ((USAGE) 0x24)\n#define HID_USAGE_TELEPHONY_TRANSFER             ((USAGE) 0x25)\n#define HID_USAGE_TELEPHONY_DROP                 ((USAGE) 0x26)\n#define HID_USAGE_TELEPHONY_LINE                 ((USAGE) 0x2A)\n#define HID_USAGE_TELEPHONY_RING_ENABLE          ((USAGE) 0x2D)\n#define HID_USAGE_TELEPHONY_SEND                 ((USAGE) 0x31)\n#define HID_USAGE_TELEPHONY_KEYPAD_0             ((USAGE) 0xB0)\n#define HID_USAGE_TELEPHONY_KEYPAD_D             ((USAGE) 0xBF)\n#define HID_USAGE_TELEPHONY_HOST_AVAILABLE       ((USAGE) 0xF1)\n\n#define HID_USAGE_MS_BTH_HF_DIALNUMBER           ((USAGE) 0x21)\n#define HID_USAGE_MS_BTH_HF_DIALMEMORY           ((USAGE) 0x22)\n\n#define HID_USAGE_CONSUMERCTRL                   ((USAGE) 0x01)\n\n#define HID_USAGE_DIGITIZER_PEN                  ((USAGE) 0x02)\n#define HID_USAGE_DIGITIZER_IN_RANGE             ((USAGE) 0x32)\n#define HID_USAGE_DIGITIZER_TIP_SWITCH           ((USAGE) 0x42)\n#define HID_USAGE_DIGITIZER_BARREL_SWITCH        ((USAGE) 0x44)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __HIDUSAGE_H */\n"
  },
  {
    "path": "wine/windows/highlevelmonitorconfigurationapi.h",
    "content": "/*\n * Copyright 2014 Michael Müller for Pipelight\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_HIGHLEVELMONITORCONFIGURATIONAPI_H\n#define __WINE_HIGHLEVELMONITORCONFIGURATIONAPI_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef enum _MC_COLOR_TEMPERATURE\n{\n    MC_COLOR_TEMPERATURE_UNKNOWN,\n    MC_COLOR_TEMPERATURE_4000K,\n    MC_COLOR_TEMPERATURE_5000K,\n    MC_COLOR_TEMPERATURE_6500K,\n    MC_COLOR_TEMPERATURE_7500K,\n    MC_COLOR_TEMPERATURE_8200K,\n    MC_COLOR_TEMPERATURE_9300K,\n    MC_COLOR_TEMPERATURE_10000K,\n    MC_COLOR_TEMPERATURE_11500K\n} MC_COLOR_TEMPERATURE, *LPMC_COLOR_TEMPERATURE;\n\ntypedef enum _MC_POSITION_TYPE\n{\n    MC_HORIZONTAL_POSITION,\n    MC_VERTICAL_POSITION\n} MC_POSITION_TYPE;\n\ntypedef enum _MC_SIZE_TYPE\n{\n    MC_WIDTH,\n    MC_HEIGHT\n} MC_SIZE_TYPE;\n\ntypedef enum _MC_DRIVE_TYPE\n{\n    MC_RED_DRIVE,\n    MC_GREEN_DRIVE,\n    MC_BLUE_DRIVE\n} MC_DRIVE_TYPE;\n\ntypedef enum _MC_GAIN_TYPE\n{\n    MC_RED_GAIN,\n    MC_GREEN_GAIN,\n    MC_BLUE_GAIN\n} MC_GAIN_TYPE;\n\ntypedef enum _MC_DISPLAY_TECHNOLOGY_TYPE\n{\n    MC_SHADOW_MASK_CATHODE_RAY_TUBE,\n    MC_APERTURE_GRILL_CATHODE_RAY_TUBE,\n    MC_THIN_FILM_TRANSISTOR,\n    MC_LIQUID_CRYSTAL_ON_SILICON,\n    MC_PLASMA,\n    MC_ORGANIC_LIGHT_EMITTING_DIODE,\n    MC_ELECTROLUMINESCENT,\n    MC_MICROELECTROMECHANICAL,\n    MC_FIELD_EMISSION_DEVICE\n} MC_DISPLAY_TECHNOLOGY_TYPE, *LPMC_DISPLAY_TECHNOLOGY_TYPE;\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_HIGHLEVELMONITORCONFIGURATIONAPI_H */\n"
  },
  {
    "path": "wine/windows/hlguids.h",
    "content": "/*\n * Implementation of hyperlinking (hlink.dll)\n *\n * Copyright 2005 Aric Stewart for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_HLGUIDS_H__\n#define __WINE_HLGUIDS_H__\n\nDEFINE_GUID(CLSID_StdHlink,\n    0x79eac9d0, 0xbaf9, 0x11ce, 0x8c, 0x82, 0x00, 0xaa,0x00,0x4b,0xa9,0x0b);\nDEFINE_GUID(CLSID_StdHlinkBrowseContext,\n    0x79eac9d1, 0xbaf9, 0x11ce, 0x8c, 0x82, 0x00, 0xaa,0x00,0x4b,0xa9,0x0b);\nDEFINE_GUID(CLSID_IID_IExtensionServices,\n    0x79eac9cb, 0xbaf9, 0x11ce, 0x8c, 0x82, 0x00, 0xaa,0x00,0x4b,0xa9,0x0b);\n\n#endif\n"
  },
  {
    "path": "wine/windows/hlink.idl",
    "content": "/*\n * Copyright 2005 Jacek Caban\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"urlmon.idl\";\n\ninterface IHlink;\ninterface IHlinkSite;\ninterface IHlinkFrame;\ninterface IHlinkBrowseContext;\n\ncpp_quote(\"HRESULT WINAPI HlinkCreateFromMoniker(IMoniker*, LPCWSTR, LPCWSTR, IHlinkSite*, DWORD, IUnknown*, REFIID, void**);\")\ncpp_quote(\"HRESULT WINAPI HlinkCreateFromString(LPCWSTR, LPCWSTR, LPCWSTR, IHlinkSite*, DWORD, IUnknown*, REFIID, void**);\")\ncpp_quote(\"HRESULT WINAPI HlinkCreateFromData(IDataObject*, IHlinkSite*, DWORD dwSiteData, IUnknown*, REFIID, void**);\")\ncpp_quote(\"HRESULT WINAPI HlinkCreateExtensionServices(LPCWSTR, HWND, LPCWSTR, LPCWSTR, IUnknown*, REFIID, void**);\")\ncpp_quote(\"HRESULT WINAPI HlinkQueryCreateFromData(IDataObject*);\")\ncpp_quote(\"HRESULT WINAPI HlinkClone(IHlink*, REFIID, IHlinkSite*, DWORD, void **);\")\ncpp_quote(\"HRESULT WINAPI HlinkCreateBrowseContext(IUnknown*, REFIID, void **);\")\ncpp_quote(\"HRESULT WINAPI HlinkNavigateToStringReference(LPCWSTR, LPCWSTR, IHlinkSite*, DWORD, IHlinkFrame*, DWORD, LPBC, IBindStatusCallback*, IHlinkBrowseContext*);\")\ncpp_quote(\"HRESULT WINAPI HlinkNavigate(IHlink*, IHlinkFrame*, DWORD, LPBC, IBindStatusCallback*, IHlinkBrowseContext*);\")\ncpp_quote(\"HRESULT WINAPI HlinkOnNavigate(IHlinkFrame*, IHlinkBrowseContext*, DWORD, IMoniker*, LPCWSTR, LPCWSTR, ULONG*);\")\ncpp_quote(\"HRESULT WINAPI HlinkIsShortcut(LPCWSTR);\")\ncpp_quote(\"HRESULT WINAPI HlinkTranslateURL(LPCWSTR,DWORD,LPWSTR*);\")\ncpp_quote(\"HRESULT WINAPI HlinkParseDisplayName(LPBC,LPCWSTR,BOOL,ULONG*,IMoniker**);\")\ncpp_quote(\"HRESULT WINAPI HlinkResolveMonikerForData(LPMONIKER,DWORD,LPBC,ULONG,FORMATETC*,IBindStatusCallback*,LPMONIKER);\")\ncpp_quote(\"HRESULT WINAPI HlinkUpdateStackItem(IHlinkFrame*, IHlinkBrowseContext*, ULONG, IMoniker*, LPCWSTR, LPCWSTR);\")\n\ntypedef enum _HLSR_NOREDEF10 {\n    HLSR_HOME,\n    HLSR_SEARCHPAGE,\n    HLSR_HISTORYFOLDER\n} HLSR;\n\ncpp_quote(\"HRESULT WINAPI HlinkSetSpecialReference(ULONG uReference, LPCWSTR pwzReference);\")\ncpp_quote(\"HRESULT WINAPI HlinkGetSpecialReference(ULONG uReference, LPWSTR *ppwzReference);\")\n\ncpp_quote(\"#define SID_SHlinkFrame IID_IHlinkFrame\")\n\n/*****************************************************************************\n *    IHlink interface\n */\n[\n    object,\n    uuid(79EAC9C3-BAF9-11CE-8C82-00AA004BA90B),\n    pointer_default(unique)\n]\ninterface IHlink: IUnknown\n{\n    typedef [unique] IHlink *LPHLINK;\n\n    typedef enum {\n        HLNF_INTERNALJUMP          = 0x00000001,\n        HLNF_OPENINNEWWINDOW       = 0x00000002,\n        HLNF_NAVIGATINGBACK        = 0x00000004,\n        HLNF_NAVIGATINGFORWARD     = 0x00000008,\n        HLNF_NAVIGATINGTOSTACKITEM = 0x00000010,\n        HLNF_CREATENOHISTORY       = 0x00000020\n    } HLNF;\n\n    typedef enum {\n        HLINKGETREF_DEFAULT  = 0,\n        HLINKGETREF_ABSOLUTE = 1,\n        HLINKGETREF_RELATIVE = 2,\n    } HLINKGETREF;\n\n    typedef enum {\n        HLFNAMEF_DEFAULT          = 0x00000000,\n        HLFNAMEF_TRYCACHE         = 0x00000001,\n        HLFNAMEF_TRYPRETTYTARGET  = 0x00000002,\n        HLFNAMEF_TRYFULLTARGET    = 0x00000004,\n        HLFNAMEF_TRYWIN95SHORTCUT = 0x00000008\n    } HLFNAMEF;\n\n    typedef enum {\n        HLINKMISC_RELATIVE = 0x00000001,\n    } HLINKMISC;\n\n    typedef enum {\n        HLINKSETF_TARGET   = 0x00000001,\n        HLINKSETF_LOCATION = 0x00000002\n    } HLINKSETF;\n\n    HRESULT SetHlinkSite(\n        [in, unique] IHlinkSite *pihlSite,\n        [in] DWORD dwSiteData);\n\n    HRESULT GetHlinkSite(\n        [out] IHlinkSite **ppihlSite,\n        [out] DWORD *pdwSiteData);\n\n    HRESULT SetMonikerReference(\n        [in] DWORD grfHLSETF,\n        [in, unique] IMoniker *pimkTarget,\n        [in, unique] LPCWSTR pwzLocation);\n\n    HRESULT GetMonikerReference(\n        [in]  DWORD dwWhichRef,\n        [out] IMoniker **ppimkTarget,\n        [out] LPWSTR *ppwzLocation);\n\n    HRESULT SetStringReference(\n        [in] DWORD grfHLSETF,\n        [in, unique] LPCWSTR pwzTarget,\n        [in, unique] LPCWSTR pwzLocation);\n\n    HRESULT GetStringReference(\n        [in]  DWORD dwWhichRef,\n        [out] LPWSTR *ppwzTarget,\n        [out] LPWSTR *ppwzLocation);\n\n    HRESULT SetFriendlyName(\n        [in, unique] LPCWSTR pwzFriendlyName);\n\n    HRESULT GetFriendlyName(\n        [in]  DWORD grfHLFNAMEF,\n        [out] LPWSTR *ppwzFriendlyName);\n\n    HRESULT SetTargetFrameName(\n        [in, unique] LPCWSTR pwzTargetFrameName);\n\n    HRESULT GetTargetFrameName(\n        [out] LPWSTR *ppwzTargetFrameName);\n\n    HRESULT GetMiscStatus(\n        [out] DWORD *pdwStatus);\n\n    HRESULT Navigate(\n        [in] DWORD grfHLNF,\n        [in, unique] LPBC pibc,\n        [in, unique] IBindStatusCallback *pibsc,\n        [in, unique] IHlinkBrowseContext *pihlbc);\n\n    HRESULT SetAdditionalParams(\n        [in, unique] LPCWSTR pwzAdditionalParams);\n\n    HRESULT GetAdditionalParams(\n        [out] LPWSTR *ppwzAdditionalParams);\n}\n\n/*****************************************************************************\n *    IHlinkSite interface\n */\n[\n    object,\n    uuid(79EAC9C2-BAF9-11CE-8C82-00AA004BA90B),\n    pointer_default(unique)\n]\ninterface IHlinkSite: IUnknown\n{\n    typedef [unique] IHlinkSite *LPHLINKSITE;\n\n    typedef enum {\n        HLINKWHICHMK_CONTAINER = 1,\n        HLINKWHICHMK_BASE      = 2,\n    } HLINKWHICHMK;\n\n    HRESULT QueryService(\n        [in] DWORD dwSiteData,\n        [in] REFGUID guidService,\n        [in] REFIID riid,\n        [out, iid_is(riid)] IUnknown **ppiunk);\n\n    HRESULT GetMoniker(\n        [in] DWORD dwSiteData,\n        [in] DWORD dwAssign,\n        [in] DWORD dwWhich,\n        [out] IMoniker **ppimk);\n\n    HRESULT ReadyToNavigate(\n        [in] DWORD dwSiteData,\n        [in] DWORD dwReserved);\n\n    HRESULT OnNavigationComplete(\n        [in] DWORD dwSiteData,\n        [in] DWORD dwreserved,\n        [in] HRESULT hrError,\n        [in, unique] LPCWSTR pwzError);\n}\n\n/*****************************************************************************\n *    IEnumHLITEM interface\n */\n[\n    local,\n    object,\n    uuid(79EAC9C6-BAF9-11CE-8C82-00AA004BA90B),\n    pointer_default(unique)\n]\ninterface IEnumHLITEM : IUnknown\n{\n    typedef [unique] IEnumHLITEM *LPENUMHLITEM;\n\n    typedef struct tagHLITEM {\n        ULONG  uHLID;\n        LPWSTR pwzFriendlyName;\n    } HLITEM;\n    typedef [unique] HLITEM *LPHLITEM;\n\n    HRESULT Next(\n        [in]  ULONG celt,\n        [out] HLITEM *rgelt,\n        [out] ULONG *pceltFetched);\n\n    HRESULT Skip(\n        [in] ULONG celt);\n\n    HRESULT Reset();\n\n    HRESULT Clone(\n        [out] IEnumHLITEM **ppienumhlitem);\n}\n\n/*****************************************************************************\n *    IHlinkBrowseContext interface\n */\n[\n    local,\n    object,\n    uuid(79EAC9C7-BAF9-11CE-8C82-00AA004BA90B),\n    pointer_default(unique)\n]\ninterface IHlinkBrowseContext : IUnknown\n{\n    typedef [unique] IHlinkBrowseContext *LPHLINKBROWSECONTEXT;\n\n    enum {\n        HLTB_DOCKEDLEFT    = 0,\n        HLTB_DOCKEDTOP     = 1,\n        HLTB_DOCKEDRIGHT   = 2,\n        HLTB_DOCKEDBOTTOM  = 3,\n        HLTB_FLOATING      = 4\n    };\n\n    typedef struct _tagHLTBINFO {\n        ULONG uDockType;\n        RECT  rcTbPos;\n    } HLTBINFO;\n\n    enum {\n        HLBWIF_HASFRAMEWNDINFO   = 0x00000001,\n        HLBWIF_HASDOCWNDINFO     = 0x00000002,\n        HLBWIF_FRAMEWNDMAXIMIZED = 0x00000004,\n        HLBWIF_DOCWNDMAXIMIZED   = 0x00000008,\n        HLBWIF_HASWEBTOOLBARINFO = 0x00000010,\n        HLBWIF_WEBTOOLBARHIDDEN  = 0x00000020\n    };\n\n    typedef struct _tagHLBWINFO {\n        ULONG    cbSize;\n        DWORD    grfHLBWIF;\n        RECT     rcFramePos;\n        RECT     rcDocPos;\n        HLTBINFO hltbinfo;\n    } HLBWINFO;\n\n    typedef [unique] HLBWINFO *LPHLBWINFO;\n\n    enum {\n        HLID_INVALID     = 0x00000000,\n        HLID_PREVIOUS    = 0xFFFFFFFF,\n        HLID_NEXT        = 0xFFFFFFFE,\n        HLID_CURRENT     = 0xFFFFFFFD,\n        HLID_STACKBOTTOM = 0xFFFFFFFC,\n        HLID_STACKTOP    = 0xFFFFFFFB\n    };\n\n    enum {\n        HLQF_ISVALID   = 0x00000001,\n        HLQF_ISCURRENT = 0x00000002\n    };\n\n    HRESULT Register(\n        [in] DWORD reserved,\n        [in, unique] IUnknown *piunk,\n        [in, unique] IMoniker *pimk,\n        [out] DWORD *pdwRegister);\n\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef GetObject\")\ncpp_quote(\"#endif\")\n\n    HRESULT GetObject(\n        [in, unique] IMoniker *pimk,\n        [in] BOOL fBindIfRootRegistered,\n        [out] IUnknown **ppiunk);\n\n    HRESULT Revoke(\n        [in] DWORD dwRegister);\n\n    HRESULT SetBrowseWindowInfo(\n        [in, unique] HLBWINFO *phlbwi);\n\n    HRESULT GetBrowseWindowInfo(\n        [out] HLBWINFO *phlbwi);\n\n    HRESULT SetInitialHlink(\n        [in, unique] IMoniker * pimkTarget,\n        [in, unique] LPCWSTR pwzLocation,\n        [in, unique] LPCWSTR pwzFriendlyName);\n\n    HRESULT OnNavigateHlink(\n        [in] DWORD grfHLNF,\n        [in, unique] IMoniker *pimkTarget,\n        [in, unique] LPCWSTR pwzLocation,\n        [in, unique] LPCWSTR pwzFriendlyName,\n        [out] ULONG *puHLID);\n\n    HRESULT UpdateHlink(\n        [in] ULONG uHLID,\n        [in, unique] IMoniker *pimkTarget,\n        [in, unique] LPCWSTR pwzLocation,\n        [in, unique] LPCWSTR pwzFriendlyName);\n\n    HRESULT EnumNavigationStack(\n        [in] DWORD dwReserved,\n        [in] DWORD grfHLFNAMEF,\n        [out] IEnumHLITEM **ppienumhlitem);\n\n    HRESULT QueryHlink(\n        [in] DWORD grfHLQF,\n        [in] ULONG uHLID);\n\n    HRESULT GetHlink(\n        [in] ULONG uHLID,\n        [out] IHlink **ppihl);\n\n    HRESULT SetCurrentHlink(\n        [in] ULONG uHLID);\n\n    HRESULT Clone(\n        [in, unique] IUnknown *piunkOuter,\n        [in] REFIID riid,\n        [out, iid_is(riid)] IUnknown **ppiunkObj);\n\n    HRESULT Close(\n        [in] DWORD reserved);\n}\n\n\n/*****************************************************************************\n *    IHlinkTarget interface\n */\n[\n    object,\n    uuid(79EAC9C4-BAF9-11CE-8C82-00AA004BA90B),\n    pointer_default(unique)\n]\ninterface IHlinkTarget : IUnknown\n{\n    typedef [unique] IHlinkTarget *LPHLINKTARGET;\n\n    HRESULT SetBrowseContext(\n        [in, unique] IHlinkBrowseContext *pihlbc);\n\n    HRESULT GetBrowseContext(\n        [out] IHlinkBrowseContext **ppihlbc);\n\n    HRESULT Navigate(\n        [in] DWORD grfHLNF,\n        [in, unique] LPCWSTR pwzJumpLocation);\n\n    HRESULT GetMoniker(\n        [in,unique]  LPCWSTR pwzLocation,\n        [in] DWORD dwAssign,\n        [out] IMoniker **ppimkLocation);\n\n    HRESULT GetFriendlyName(\n        [in,unique]  LPCWSTR pwzLocation,\n        [out] LPWSTR *ppwzFriendlyName);\n}\n\n/*****************************************************************************\n *    IHlinkFrame interface\n */\n[\n    object,\n    uuid(79eac9c5-baf9-11ce-8c82-00aa004ba90b),\n    pointer_default(unique)\n]\n\ninterface IHlinkFrame : IUnknown\n{\n    typedef IHlinkFrame *LPHLINKFRAME;\n\n    HRESULT SetBrowseContext( \n        [in, unique] IHlinkBrowseContext * pihlbc);\n    HRESULT GetBrowseContext( \n        [out] IHlinkBrowseContext ** ppihlbc);\n    HRESULT Navigate( \n        [in] DWORD grfHLNF, \n        [in, unique] LPBC pbc, \n        [in, unique] IBindStatusCallback *pibsc, \n        [in, unique] IHlink *pihlNavigate);\n    HRESULT OnNavigate( \n        [in] DWORD grfHLNF, \n        [in, unique] IMoniker *pimkTarget, \n        [in, unique] LPCWSTR pwzLocation, \n        [in, unique] LPCWSTR pwzFriendlyName, \n        [in] DWORD dwreserved);\n    HRESULT UpdateHlink( \n        [in] ULONG uHLID, \n        [in, unique] IMoniker *pimkTarget, \n        [in, unique] LPCWSTR pwzLocation, \n        [in, unique] LPCWSTR pwzFriendlyName);\n}\n\n/*****************************************************************************\n *    IExtensionServices interface\n */\n[\n    object,\n    uuid(79eac9cb-baf9-11ce-8c82-00aa004ba90b),\n    pointer_default(unique)\n]\n\ninterface IExtensionServices: IUnknown\n{\n    typedef IExtensionServices *LPEXTENSIONSERVICES;\n\n    HRESULT SetAdditionalHeaders(\n        [in] LPCWSTR pwzAdditionalHeaders);\n\n    HRESULT SetAuthenticateData(\n        [in] HWND phwnd,\n        [in] LPCWSTR pwzUsername,\n        [in] LPCWSTR pwzPassword);\n}\n"
  },
  {
    "path": "wine/windows/hstring.idl",
    "content": "/*\n * Copyright (C) 2014 Martin Storsjo\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"wtypes.idl\";\n\ntypedef struct HSTRING__\n{\n    int unused;\n} HSTRING__;\n\ntypedef [wire_marshal(wireBSTR), unique] HSTRING__* HSTRING;\n\ncpp_quote(\"DECLARE_HANDLE(HSTRING_BUFFER);\")\n\ncpp_quote(\"typedef struct HSTRING_HEADER\")\ncpp_quote(\"{\")\ncpp_quote(\"    union\")\ncpp_quote(\"    {\")\ncpp_quote(\"        PVOID Reserved1;\")\ncpp_quote(\"#ifdef _WIN64\")\ncpp_quote(\"        char Reserved2[24];\")\ncpp_quote(\"#else\")\ncpp_quote(\"        char Reserved2[20];\")\ncpp_quote(\"#endif\")\ncpp_quote(\"    } Reserved;\")\ncpp_quote(\"} HSTRING_HEADER;\")\n"
  },
  {
    "path": "wine/windows/htiface.idl",
    "content": "/*\n * Copyright 2006,2011 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"objidl.idl\";\nimport \"oleidl.idl\";\nimport \"urlmon.idl\";\n\ncpp_quote(\"#include <htiframe.h>\")\n\n\n/*****************************************************************************\n *    ITargetFrame interface\n */\n[\n    object,\n    uuid(d5f78c80-5252-11cf-90fa-00aa0042106e),\n    pointer_default(unique)\n]\ninterface ITargetFrame: IUnknown\n{\n    typedef [unique] ITargetFrame *LPTARGETFRAME;\n\n    typedef enum {\n        NAVIGATEFRAME_FL_RECORD                    = 0x01,\n        NAVIGATEFRAME_FL_POST                      = 0x02,\n        NAVIGATEFRAME_FL_NO_DOC_CACHE              = 0x04,\n        NAVIGATEFRAME_FL_NO_IMAGE_CACHE            = 0x08,\n        NAVIGATEFRAME_FL_AUTH_FAIL_CACHE_OK        = 0x10,\n        NAVIGATEFRAME_FL_SENDING_FROM_FORM         = 0x20,\n        NAVIGATEFRAME_FL_REALLY_SENDING_FROM_FORM  = 0x40\n    } NAVIGATEFRAME_FLAGS;\n\n    typedef struct tagNavigateData {\n        ULONG ulTarget;\n        ULONG ulURL;\n        ULONG ulRefURL;\n        ULONG ulPostData;\n        DWORD dwFlags;\n    } NAVIGATEDATA;\n\n    HRESULT SetFrameName([in] LPCWSTR pszFrameName);\n    HRESULT GetFrameName([out] LPWSTR *ppszFrameName);\n    HRESULT GetParentFrame([out] IUnknown **ppunkParent);\n\n    HRESULT FindFrame(\n            [in] LPCWSTR pszTargetName,\n            [in] IUnknown *ppunkContextFrame,\n            [in] DWORD dwFlags,\n            [out] IUnknown **ppunkTargetFrame);\n\n    HRESULT SetFrameSrc([in] LPCWSTR pszFrameSrc);\n    HRESULT GetFrameSrc([out] LPWSTR *ppszFrameSrc);\n    HRESULT GetFramesContainer([out] IOleContainer **ppContainer);\n    HRESULT SetFrameOptions([in] DWORD dwFlags);\n    HRESULT GetFrameOptions([out] DWORD *pdwFlags);\n\n    HRESULT SetFrameMargins(\n            [in] DWORD dwWidth,\n            [in] DWORD dwHeight);\n\n    HRESULT GetFrameMargins(\n            [out] DWORD *pdwWidth,\n            [out] DWORD *pdwHeight);\n\n    HRESULT RemoteNavigate(\n            [in] ULONG cLength,\n            [in, size_is(cLength)] ULONG *pulData);\n\n    HRESULT OnChildFrameActivate([in] IUnknown *pUnkChildFrame);\n    HRESULT OnChildFrameDeactivate([in] IUnknown *pUnkChildFrame);\n}\n\n/*****************************************************************************\n *    ITargetFramePriv interface\n */\n[\n    object,\n    uuid(9216e421-2bf5-11d0-82b4-00a0c90c29c5),\n    pointer_default(unique)\n]\ninterface ITargetFramePriv : IUnknown\n{\n    typedef [unique] ITargetFramePriv *LPTARGETFRAMEPRIV;\n\n    HRESULT FindFrameDownwards(\n            [in] LPCWSTR pszTargetName,\n            [in] DWORD dwFlags,\n            [out] IUnknown **ppunkTargetFrame);\n\n    HRESULT FindFrameInContext(\n            [in] LPCWSTR pszTargetName,\n            [in] IUnknown *punkContextFrame,\n            [in] DWORD dwFlags,\n            [out] IUnknown **ppunkTargetFrame);\n\n    HRESULT OnChildFrameActivate([in] IUnknown *pUnkChildFrame);\n    HRESULT OnChildFrameDeactivate([in] IUnknown *pUnkChildFrame);\n\n    HRESULT NavigateHack(\n            [in] DWORD grfHLNF,\n            [in, unique] LPBC pbc,\n            [in, unique] IBindStatusCallback *pibsc,\n            [in, unique] LPCWSTR pszTargetName,\n            [in] LPCWSTR pszUrl,\n            [in, unique] LPCWSTR pszLocation);\n\n    HRESULT FindBrowserByIndex(\n            [in] DWORD dwID,\n            [out] IUnknown **ppunkBrowser);\n}\n\n/*****************************************************************************\n *    ITargetFramePriv2 interface\n */\n[\n    object,\n    uuid(b2c867e6-69d6-46f2-a611-ded9a4bd7fef),\n    pointer_default(unique)\n]\ninterface ITargetFramePriv2 : ITargetFramePriv\n{\n    typedef [unique] ITargetFramePriv2 *LPTARGETFRAMEPRIV2;\n\n    HRESULT AggregatedNavigation2(\n            [in] DWORD grfHLNF,\n            [in, unique] LPBC pbc,\n            [in, unique] IBindStatusCallback *pibsc,\n            [in, unique] LPCWSTR pszTargetName,\n            [in] IUri *pUri,\n            [in, unique] LPCWSTR pszLocation);\n}\n"
  },
  {
    "path": "wine/windows/htiframe.idl",
    "content": "/*\n * Copyright 2006,2011 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"objidl.idl\";\nimport \"oleidl.idl\";\n\n/*****************************************************************************\n *    ITargetNotify interface\n */\n[\n    object,\n    uuid(863a99a0-21bc-11d0-82b4-00a0c90c29c5),\n    pointer_default(unique)\n]\ninterface ITargetNotify : IUnknown\n{\n    typedef [unique] ITargetNotify *LPTARGETNOTIFY;\n\n    HRESULT OnCreate(\n            [in] IUnknown *pUnkDestination,\n            [in] ULONG cbCookie);\n\n    HRESULT OnReuse([in] IUnknown *pUnkDestination);\n}\n\n/*****************************************************************************\n *    ITargetNotify2 interface\n */\n[\n    object,\n    uuid(3050f6b1-98b5-11cf-bb82-00aa00bdce0b),\n    pointer_default(unique)\n]\ninterface ITargetNotify2 : ITargetNotify\n{\n    typedef [unique] ITargetNotify2 *LPTARGETNOTIFY2;\n\n    HRESULT GetOptionString([in,out] BSTR *pbstrOptions);\n}\n\n/*****************************************************************************\n *    ITargetFrame2 interface\n */\n[\n    object,\n    uuid(86d52e11-94a8-11d0-82af-00c04fd5ae38),\n    pointer_default(unique)\n]\ninterface ITargetFrame2 : IUnknown\n{\n    typedef [unique] ITargetFrame2 *LPTARGETFRAME2;\n\n    typedef enum {\n        FINDFRAME_NONE               = 0,\n        FINDFRAME_JUSTTESTEXISTENCE  = 1,\n        FINDFRAME_INTERNAL           = 0x80000000\n    } FINDFRAME_FLAGS;\n\n    typedef enum {\n        FRAMEOPTIONS_SCROLL_YES   = 0x00000001,\n        FRAMEOPTIONS_SCROLL_NO    = 0x00000002,\n        FRAMEOPTIONS_SCROLL_AUTO  = 0x00000004,\n        FRAMEOPTIONS_NORESIZE     = 0x00000008,\n        FRAMEOPTIONS_NO3DBORDER   = 0x00000010,\n        FRAMEOPTIONS_DESKTOP      = 0x00000020,\n        FRAMEOPTIONS_BROWSERBAND  = 0x00000040\n    } FRAMEOPTIONS_FLAGS;\n\n    HRESULT SetFrameName([in] LPCWSTR pszFrameName);\n\n    HRESULT GetFrameName([out] LPWSTR *ppszFrameName);\n\n    HRESULT GetParentFrame([out] IUnknown **ppunkParent);\n\n    HRESULT SetFrameSrc([in] LPCWSTR pszFrameSrc);\n\n    HRESULT GetFrameSrc([out] LPWSTR *ppszFrameSrc);\n\n    HRESULT GetFramesContainer([out] IOleContainer **ppContainer);\n\n    HRESULT SetFrameOptions([in] DWORD dwFlags);\n\n    HRESULT GetFrameOptions([out] DWORD *pdwFlags);\n\n    HRESULT SetFrameMargins(\n            [in] DWORD dwWidth,\n            [in] DWORD dwHeight);\n\n    HRESULT GetFrameMargins(\n            [out] DWORD *pdwWidth,\n            [out] DWORD *pdwHeight);\n\n    HRESULT FindFrame(\n            [in,unique] LPCWSTR pszTargetName,\n            [in] DWORD dwFlags,\n            [out] IUnknown **ppunkTargetFrame);\n\n    HRESULT GetTargetAlias(\n            [in,unique] LPCWSTR pszTargetName,\n             [out] LPWSTR *ppszTargetAlias);\n}\n\n/*****************************************************************************\n *    ITargetContainer interface\n */\n[\n    object,\n    uuid(7847ec01-2bec-11d0-82b4-00a0c90C29c5),\n    pointer_default(unique)\n]\ninterface ITargetContainer : IUnknown\n{\n    typedef [unique] ITargetContainer *LPTARGETCONTAINER;\n\n    HRESULT GetFrameUrl([out] LPWSTR *ppszFrameSrc);\n\n    HRESULT GetFramesContainer([out] IOleContainer **ppContainer);\n\n}\n"
  },
  {
    "path": "wine/windows/htmlhelp.h",
    "content": "/*\n * Copyright 2004 Jacek Caban\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __HTMLHELP_H__\n#define __HTMLHELP_H__\n\n#define HH_DISPLAY_TOPIC        0x00\n#define HH_HELP_FINDER          0x00\n#define HH_DISPLAY_TOC          0x01\n#define HH_DISPLAY_INDEX        0x02\n#define HH_DISPLAY_SEARCH       0x03\n#define HH_SET_WIN_TYPE         0x04\n#define HH_GET_WIN_TYPE         0x05\n#define HH_GET_WIN_HANDLE       0x06\n#define HH_ENUM_INFO_TYPE       0x07\n#define HH_SET_INFO_TYPE        0x08\n#define HH_SYNC                 0x09\n#define HH_RESERVED1            0x0A\n#define HH_RESERVED2            0x0B\n#define HH_RESERVED3            0x0C\n#define HH_KEYWORD_LOOKUP       0x0D\n#define HH_DISPLAY_TEXT_POPUP   0x0E\n#define HH_HELP_CONTEXT         0x0F\n#define HH_TP_HELP_CONTEXTMENU  0x10\n#define HH_TP_HELP_WM_HELP      0x11\n#define HH_CLOSE_ALL            0x12\n#define HH_ALINK_LOOKUP         0x13\n#define HH_GET_LAST_ERROR       0x14\n#define HH_ENUM_CATEGORY        0x15\n#define HH_ENUM_CATEGORY_IT     0x16\n#define HH_RESET_IT_FILTER      0x17\n#define HH_SET_INCLUSIVE_FILTER 0x18\n#define HH_SET_EXCLUSIVE_FILTER 0x19\n#define HH_INITIALIZE           0x1C\n#define HH_UNINITIALIZE         0x1D\n#define HH_SAFE_DISPLAY_TOPIC   0x20\n#define HH_PRETRANSLATEMESSAGE  0xFD\n#define HH_SET_GLOBAL_PROPERTY  0xFC\n\n#define HHWIN_PROP_TAB_AUTOHIDESHOW  0x00000001\n#define HHWIN_PROP_ONTOP             0x00000002\n#define HHWIN_PROP_NOTITLEBAR        0x00000004\n#define HHWIN_PROP_NODEF_STYLES      0x00000008\n#define HHWIN_PROP_NODEF_EXSTYLES    0x00000010\n#define HHWIN_PROP_TRI_PANE          0x00000020\n#define HHWIN_PROP_NOTB_TEXT         0x00000040\n#define HHWIN_PROP_POST_QUIT         0x00000080\n#define HHWIN_PROP_AUTO_SYNC         0x00000100\n#define HHWIN_PROP_TRACKING          0x00000200\n#define HHWIN_PROP_TAB_SEARCH        0x00000400\n#define HHWIN_PROP_TAB_HISTORY       0x00000800\n#define HHWIN_PROP_TAB_FAVORITES     0x00001000\n#define HHWIN_PROP_CHANGE_TITLE      0x00002000\n#define HHWIN_PROP_NAV_ONLY_WIN      0x00004000\n#define HHWIN_PROP_NO_TOOLBAR        0x00008000\n#define HHWIN_PROP_MENU              0x00010000\n#define HHWIN_PROP_TAB_ADVSEARCH     0x00020000\n#define HHWIN_PROP_USER_POS          0x00040000\n#define HHWIN_PROP_TAB_CUSTOM1       0x00080000\n#define HHWIN_PROP_TAB_CUSTOM2       0x00100000\n#define HHWIN_PROP_TAB_CUSTOM3       0x00200000\n#define HHWIN_PROP_TAB_CUSTOM4       0x00400000\n#define HHWIN_PROP_TAB_CUSTOM5       0x00800000\n#define HHWIN_PROP_TAB_CUSTOM6       0x01000000\n#define HHWIN_PROP_TAB_CUSTOM7       0x02000000\n#define HHWIN_PROP_TAB_CUSTOM8       0x04000000\n#define HHWIN_PROP_TAB_CUSTOM9       0x08000000\n#define HHWIN_TB_MARGIN              0x10000000\n\n#define HHWIN_PARAM_PROPERTIES     0x00000002\n#define HHWIN_PARAM_STYLES         0x00000004\n#define HHWIN_PARAM_EXSTYLES       0x00000008\n#define HHWIN_PARAM_RECT           0x00000010\n#define HHWIN_PARAM_NAV_WIDTH      0x00000020\n#define HHWIN_PARAM_SHOWSTATE      0x00000040\n#define HHWIN_PARAM_INFOTYPES      0x00000080\n#define HHWIN_PARAM_TB_FLAGS       0x00000100\n#define HHWIN_PARAM_EXPANSION      0x00000200\n#define HHWIN_PARAM_TABPOS         0x00000400\n#define HHWIN_PARAM_TABORDER       0x00000800\n#define HHWIN_PARAM_HISTORY_COUNT  0x00001000\n#define HHWIN_PARAM_CUR_TAB        0x00002000\n\n#define HHWIN_BUTTON_EXPAND      0x00000002\n#define HHWIN_BUTTON_BACK        0x00000004\n#define HHWIN_BUTTON_FORWARD     0x00000008\n#define HHWIN_BUTTON_STOP        0x00000010\n#define HHWIN_BUTTON_REFRESH     0x00000020\n#define HHWIN_BUTTON_HOME        0x00000040\n#define HHWIN_BUTTON_BROWSE_FWD  0x00000080\n#define HHWIN_BUTTON_BROWSE_BCK  0x00000100\n#define HHWIN_BUTTON_NOTES       0x00000200\n#define HHWIN_BUTTON_CONTENTS    0x00000400\n#define HHWIN_BUTTON_SYNC        0x00000800\n#define HHWIN_BUTTON_OPTIONS     0x00001000\n#define HHWIN_BUTTON_PRINT       0x00002000\n#define HHWIN_BUTTON_INDEX       0x00004000\n#define HHWIN_BUTTON_SEARCH      0x00008000\n#define HHWIN_BUTTON_HISTORY     0x00010000\n#define HHWIN_BUTTON_FAVORITES   0x00020000\n#define HHWIN_BUTTON_JUMP1       0x00040000\n#define HHWIN_BUTTON_JUMP2       0x00080000\n#define HHWIN_BUTTON_ZOOM        0x00100000\n#define HHWIN_BUTTON_TOC_NEXT    0x00200000\n#define HHWIN_BUTTON_TOC_PREV    0x00400000\n\n#define HHWIN_DEF_BUTTONS  \\\n    (HHWIN_BUTTON_EXPAND | HHWIN_BUTTON_BACK | HHWIN_BUTTON_OPTIONS | HHWIN_BUTTON_PRINT)\n\n#define IDTB_EXPAND       200\n#define IDTB_CONTRACT     201\n#define IDTB_STOP         202\n#define IDTB_REFRESH      203\n#define IDTB_BACK         204\n#define IDTB_HOME         205\n#define IDTB_SYNC         206\n#define IDTB_PRINT        207\n#define IDTB_OPTIONS      208\n#define IDTB_FORWARD      209\n#define IDTB_NOTES        210\n#define IDTB_BROWSE_FWD   211\n#define IDTB_BROWSE_BACK  212\n#define IDTB_CONTENTS     213\n#define IDTB_INDEX        214\n#define IDTB_SEARCH       215\n#define IDTB_HISTORY      216\n#define IDTB_FAVORITES    217\n#define IDTB_JUMP1        218\n#define IDTB_JUMP2        219\n#define IDTB_CUSTOMIZE    221\n#define IDTB_ZOOM         222\n#define IDTB_TOC_NEXT     223\n#define IDTB_TOC_PREV     224\n\n#define HHN_FIRST          (0U-860U)\n#define HHN_LAST           (0U-879U)\n#define HHN_NAVCOMPLETE    HHN_FIRST\n#define HHN_TRACK          (HHN_FIRST-1)\n#define HHN_WINDOW_CREATE  (HHN_FIRST-2)\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct tagHH_NOTIFY {\n    NMHDR hdr;\n    PCSTR pszurl;\n} HH_NOTIFY;\n\ntypedef struct tagHH_POPUPA {\n    int       cbStruct;\n    HINSTANCE hinst;\n    UINT      idString;\n    LPCSTR    pszText;\n    POINT     pt;\n    COLORREF  clrForeground;\n    COLORREF  clrBackground;\n    RECT      rcMargins;\n    LPCSTR    pszFont;\n} HH_POPUPA;\n\ntypedef struct tagHH_POPUPW {\n    int       cbStruct;\n    HINSTANCE hinst;\n    UINT      idString;\n    LPCWSTR   pszText;\n    POINT     pt;\n    COLORREF  clrForeground;\n    COLORREF  clrBackground;\n    RECT      rcMargins;\n    LPCWSTR   pszFont;\n} HH_POPUPW;\n\nDECL_WINELIB_TYPE_AW(HH_POPUP)\n\ntypedef struct tagHH_ALINKA {\n    int    cbStruct;\n    BOOL   fReserved;\n    LPCSTR pszKeywords;\n    LPCSTR pszUrl;\n    LPCSTR pszMsgText;\n    LPCSTR pszMsgTitle;\n    LPCSTR pszWindow;\n    BOOL   fIndexOnFail;\n} HH_ALINKA;\n\ntypedef struct tagHH_ALINKW {\n    int     cbStruct;\n    BOOL    fReserved;\n    LPCWSTR pszKeywords;\n    LPCWSTR pszUrl;\n    LPCWSTR pszMsgText;\n    LPCWSTR pszMsgTitle;\n    LPCWSTR pszWindow;\n    BOOL    fIndexOnFail;\n} HH_ALINKW;\n\nDECL_WINELIB_TYPE_AW(HH_ALINK)\n\nenum {\n    HHWIN_NAVTYPE_TOC,\n    HHWIN_NAVTYPE_INDEX,\n    HHWIN_NAVTYPE_SEARCH,\n    HHWIN_NAVTYPE_FAVORITES,\n    HHWIN_NAVTYPE_HISTORY,\n    HHWIN_NAVTYPE_AUTHOR,\n    HHWIN_NAVTYPE_CUSTOM_FIRST = 11\n};\n\nenum {\n    IT_INCLUSIVE,\n    IT_EXCLUSIVE,\n    IT_HIDDEN\n};\n\ntypedef struct tagHH_ENUM_IT {\n    int    cbStruct;\n    int    iType;\n    LPCSTR pszCatName;\n    LPCSTR pszITName;\n    LPCSTR pszITDescription;\n} HH_ENUM_IT, *PHH_ENUM_IT;\n\ntypedef struct tagHH_ENUM_CAT {\n    int    cbStruct;\n    LPCSTR pszCatName;\n    LPCSTR pszCatDescription;\n} HH_ENUM_CAT, *PHH_ENUM_CAT;\n\ntypedef struct tagHH_SET_INFOTYPE {\n    int    cbStruct;\n    LPCSTR pszCatName;\n    LPCSTR pszInfoTypeName;\n} HH_SET_INFOTYPE;\n\ntypedef DWORD HH_INFOTYPE, *PHH_INFOTYPE;\n\nenum {\n    HHWIN_NAVTAB_TOP,\n    HHWIN_NAVTAB_LEFT,\n    HHWIN_NAVTAB_BOTTOM\n};\n\n#define HH_MAX_TABS 19\n\nenum {\n    HH_TAB_CONTENTS,\n    HH_TAB_INDEX,\n    HH_TAB_SEARCH,\n    HH_TAB_FAVORITES,\n    HH_TAB_HISTORY,\n    HH_TAB_AUTHOR,\n    HH_TAB_CUSTOM_FIRST = 11,\n    HH_TAB_CUSTOM_LAST = HH_MAX_TABS\n};\n\n#define HH_MAX_TABS_CUSTOM        (HH_TAB_CUSTOM_LAST-HH_TAB_CUSTOM_FIRST+1)\n#define HH_FTS_DEFAULT_PROXIMITY  -1\n\ntypedef struct tagHH_FTS_QUERYA {\n    int    cbStruct;\n    BOOL   fUniCodeStrings;\n    LPCSTR pszSearchQuery;\n    LONG   iProximity;\n    BOOL   fStemmedSearch;\n    BOOL   fTitleOnly;\n    BOOL   fExecute;\n    LPCSTR pszWindow;\n} HH_FTS_QUERYA;\n\ntypedef struct tagHH_FTS_QUERYW {\n    int     cbStruct;\n    BOOL    fUniCodeStrings;\n    LPCWSTR pszSearchQuery;\n    LONG    iProximity;\n    BOOL    fStemmedSearch;\n    BOOL    fTitleOnly;\n    BOOL    fExecute;\n    LPCWSTR pszWindow;\n} HH_FTS_QUERYW;\n\nDECL_WINELIB_TYPE_AW(HH_FTS_QUERY)\n\ntypedef struct tagHH_WINTYPEA {\n    int          cbStruct;\n    BOOL         fUniCodeStrings;\n    LPCSTR       pszType;\n    DWORD        fsValidMembers;\n    DWORD        fsWinProperties;\n    LPCSTR       pszCaption;\n    DWORD        dwStyles;\n    DWORD        dwExStyles;\n    RECT         rcWindowPos;\n    int          nShowState;\n    HWND         hwndHelp;\n    HWND         hwndCaller;\n    PHH_INFOTYPE paInfoTypes;\n    HWND         hwndToolBar;\n    HWND         hwndNavigation;\n    HWND         hwndHTML;\n    int          iNavWidth;\n    RECT         rcHTML;\n    LPCSTR       pszToc;\n    LPCSTR       pszIndex;\n    LPCSTR       pszFile;\n    LPCSTR       pszHome;\n    DWORD        fsToolBarFlags;\n    BOOL         fNotExpanded;\n    int          curNavType;\n    int          tabpos;\n    int          idNotify;\n    BYTE         tabOrder[HH_MAX_TABS+1];\n    int          cHistory;\n    LPCSTR       pszJump1;\n    LPCSTR       pszJump2;\n    LPCSTR       pszUrlJump1;\n    LPCSTR       pszUrlJump2;\n    RECT         rcMinSize;\n    int          cbInfoTypes;\n    LPCSTR       pszCustomTabs;\n} HH_WINTYPEA, *PHH_WINTYPEA;\n\ntypedef struct tagHH_WINTYPEW {\n    int          cbStruct;\n    BOOL         fUniCodeStrings;\n    LPCWSTR      pszType;\n    DWORD        fsValidMembers;\n    DWORD        fsWinProperties;\n    LPCWSTR      pszCaption;\n    DWORD        dwStyles;\n    DWORD        dwExStyles;\n    RECT         rcWindowPos;\n    int          nShowState;\n    HWND         hwndHelp;\n    HWND         hwndCaller;\n    PHH_INFOTYPE paInfoTypes;\n    HWND         hwndToolBar;\n    HWND         hwndNavigation;\n    HWND         hwndHTML;\n    int          iNavWidth;\n    RECT         rcHTML;\n    LPCWSTR      pszToc;\n    LPCWSTR      pszIndex;\n    LPCWSTR      pszFile;\n    LPCWSTR      pszHome;\n    DWORD        fsToolBarFlags;\n    BOOL         fNotExpanded;\n    int          curNavType;\n    int          tabpos;\n    int          idNotify;\n    BYTE         tabOrder[HH_MAX_TABS+1];\n    int          cHistory;\n    LPCWSTR      pszJump1;\n    LPCWSTR      pszJump2;\n    LPCWSTR      pszUrlJump1;\n    LPCWSTR      pszUrlJump2;\n    RECT         rcMinSize;\n    int          cbInfoTypes;\n    LPCWSTR      pszCustomTabs;\n} HH_WINTYPEW, *PHH_WINTYPEW;\n\nDECL_WINELIB_TYPE_AW(HH_WINTYPE)\n\nenum {\n    HHACT_TAB_CONTENTS,\n    HHACT_TAB_INDEX,\n    HHACT_TAB_SEARCH,\n    HHACT_TAB_HISTORY,\n    HHACT_TAB_FAVORITES,\n    HHACT_EXPAND,\n    HHACT_CONTRACT,\n    HHACT_BACK,\n    HHACT_FORWARD,\n    HHACT_STOP,\n    HHACT_REFRESH,\n    HHACT_HOME,\n    HHACT_SYNC,\n    HHACT_OPTIONS,\n    HHACT_PRINT,\n    HHACT_HIGHLIGHT,\n    HHACT_CUSTOMIZE,\n    HHACT_JUMP1,\n    HHACT_JUMP2,\n    HHACT_ZOOM,\n    HHACT_TOC_NEXT,\n    HHACT_TOC_PREV,\n    HHACT_NOTES,\n    HHACT_LAST_ENUM\n};\n\ntypedef struct tagHH_NTRACKA {\n    NMHDR        hdr;\n    PCSTR        pszCurUrl;\n    int          idAction;\n    PHH_WINTYPEA phhWinType;\n} HH_NTRACKA;\n\ntypedef struct tagHH_NTRACKW {\n    NMHDR        hdr;\n    PCSTR        pszCurUrl;\n    int          idAction;\n    PHH_WINTYPEW phhWinType;\n} HH_NTRACKW;\n\nDECL_WINELIB_TYPE_AW(HH_NTRACK)\n\nHWND WINAPI HtmlHelpA(HWND,LPCSTR,UINT,DWORD_PTR);\nHWND WINAPI HtmlHelpW(HWND,LPCWSTR,UINT,DWORD_PTR);\n#define HtmlHelp WINELIB_NAME_AW(HtmlHelp)\n\n#define ATOM_HTMLHELP_API_ANSI    (LPTSTR)14\n#define ATOM_HTMLHELP_API_UNICODE (LPTSTR)15\n\ntypedef enum tagHH_GPROPID {\n    HH_GPROPID_SINGLETHREAD     = 1,\n    HH_GPROPID_TOOLBAR_MARGIN   = 2,\n    HH_GPROPID_UI_LANGUAGE      = 3,\n    HH_GPROPID_CURRENT_SUBSET   = 4,\n    HH_GPROPID_CONTENT_LANGUAGE = 5\n} HH_GPROPID;\n\n#ifdef __oaidl_h__\n\ntypedef struct tagHH_GLOBAL_PROPERTY\n{\n    HH_GPROPID  id;\n    VARIANT     var;\n} HH_GLOBAL_PROPERTY ;\n\n#endif /* __oaidl_h__ */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __HTMLHELP_H__ */\n"
  },
  {
    "path": "wine/windows/http.h",
    "content": "/*\n * HTTP Server API definitions\n *\n * Copyright (C) 2009 Andrey Turkin\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_HTTP_H\n#define __WINE_HTTP_H\n\n#include <winsock2.h>\n#include <ws2tcpip.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct _HTTPAPI_VERSION\n{\n    USHORT HttpApiMajorVersion;\n    USHORT HttpApiMinorVersion;\n} HTTPAPI_VERSION, *PHTTPAPI_VERSION;\n\n#define HTTPAPI_VERSION_1 {1,0}\n#define HTTPAPI_VERSION_2 {2,0}\n\n/* HttpInitialize and HttpTerminate flags */\n#define HTTP_INITIALIZE_SERVER 0x00000001\n#define HTTP_INITIALIZE_CONFIG 0x00000002\n\ntypedef enum _HTTP_SERVICE_CONFIG_ID\n{\n    HttpServiceConfigIPListenList,\n    HttpServiceConfigSSLCertInfo,\n    HttpServiceConfigUrlAclInfo,\n    HttpServiceConfigTimeout,\n    HttpServiceConfigMax\n} HTTP_SERVICE_CONFIG_ID, *PHTTP_SERVICE_CONFIG_ID;\n\ntypedef ULONGLONG HTTP_OPAQUE_ID, *PHTTP_OPAQUE_ID;\ntypedef HTTP_OPAQUE_ID HTTP_SERVER_SESSION_ID, *PHTTP_SERVER_SESSION_ID;\ntypedef HTTP_OPAQUE_ID HTTP_URL_GROUP_ID, *PHTTP_URL_GROUP_ID;\n\nULONG WINAPI HttpInitialize(HTTPAPI_VERSION,ULONG,PVOID);\nULONG WINAPI HttpTerminate(ULONG,PVOID);\n\nULONG WINAPI HttpAddUrl(HANDLE,PCWSTR,PVOID);\nULONG WINAPI HttpCreateHttpHandle(PHANDLE,ULONG);\nULONG WINAPI HttpCreateServerSession(HTTPAPI_VERSION,PHTTP_SERVER_SESSION_ID,ULONG);\nULONG WINAPI HttpDeleteServiceConfiguration(HANDLE,HTTP_SERVICE_CONFIG_ID,PVOID,ULONG,LPOVERLAPPED);\nULONG WINAPI HttpQueryServiceConfiguration(HANDLE,HTTP_SERVICE_CONFIG_ID,PVOID,ULONG,PVOID,ULONG,PULONG,LPOVERLAPPED);\nULONG WINAPI HttpSetServiceConfiguration(HANDLE,HTTP_SERVICE_CONFIG_ID,PVOID,ULONG,LPOVERLAPPED);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* __WINE_HTTP_H */\n"
  },
  {
    "path": "wine/windows/httprequest.idl",
    "content": "/*\n * Copyright 2011 Hans Leidekker for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"httprequestid.h\"\n\nimport \"oaidl.idl\";\n\n#ifndef __WIDL__\n#define threading(model)\n#define progid(str)\n#define vi_progid(str)\n#endif\n\n[\n    uuid(662901fc-6951-4854-9eb2-d9a2570f2b2e),\n    helpstring(\"Microsoft WinHTTP Services, version 5.1\"),\n    lcid(0x0000),\n    version(5.1)\n]\nlibrary WinHttp {\n\nimportlib (\"stdole2.tlb\");\n\ntypedef [public] LONG   HTTPREQUEST_PROXY_SETTING;\nconst HTTPREQUEST_PROXY_SETTING HTTPREQUEST_PROXYSETTING_DEFAULT    = 0x00000000;\nconst HTTPREQUEST_PROXY_SETTING HTTPREQUEST_PROXYSETTING_PRECONFIG  = 0x00000000;\nconst HTTPREQUEST_PROXY_SETTING HTTPREQUEST_PROXYSETTING_DIRECT     = 0x00000001;\nconst HTTPREQUEST_PROXY_SETTING HTTPREQUEST_PROXYSETTING_PROXY      = 0x00000002;\n\ntypedef [public] LONG   HTTPREQUEST_SETCREDENTIALS_FLAGS;\nconst HTTPREQUEST_SETCREDENTIALS_FLAGS  HTTPREQUEST_SETCREDENTIALS_FOR_SERVER   = 0x00000000;\nconst HTTPREQUEST_SETCREDENTIALS_FLAGS  HTTPREQUEST_SETCREDENTIALS_FOR_PROXY    = 0x00000001;\n\ntypedef\n[uuid(12782009-fe90-4877-9730-e5e183669b19)]\nenum WinHttpRequestOption\n{\n    WinHttpRequestOption_UserAgentString,\n    WinHttpRequestOption_URL,\n    WinHttpRequestOption_URLCodePage,\n    WinHttpRequestOption_EscapePercentInURL,\n    WinHttpRequestOption_SslErrorIgnoreFlags,\n    WinHttpRequestOption_SelectCertificate,\n    WinHttpRequestOption_EnableRedirects,\n    WinHttpRequestOption_UrlEscapeDisable,\n    WinHttpRequestOption_UrlEscapeDisableQuery,\n    WinHttpRequestOption_SecureProtocols,\n    WinHttpRequestOption_EnableTracing,\n    WinHttpRequestOption_RevertImpersonationOverSsl,\n    WinHttpRequestOption_EnableHttpsToHttpRedirects,\n    WinHttpRequestOption_EnablePassportAuthentication,\n    WinHttpRequestOption_MaxAutomaticRedirects,\n    WinHttpRequestOption_MaxResponseHeaderSize,\n    WinHttpRequestOption_MaxResponseDrainSize,\n    WinHttpRequestOption_EnableHttp1_1,\n    WinHttpRequestOption_EnableCertificateRevocationCheck,\n    WinHttpRequestOption_RejectUserpwd\n} WinHttpRequestOption;\n\ntypedef\n[uuid(9d8a6df8-13de-4b1f-a330-67c719d62514)]\nenum WinHttpRequestAutoLogonPolicy\n{\n    AutoLogonPolicy_Always,\n    AutoLogonPolicy_OnlyIfBypassProxy,\n    AutoLogonPolicy_Never\n} WinHttpRequestAutoLogonPolicy;\n\n[\n    object,\n    uuid(016fe2ec-b2c8-45f8-b23b-39e53a75396b),\n    odl,\n    dual,\n    oleautomation,\n    nonextensible,\n    pointer_default(unique)\n]\ninterface IWinHttpRequest : IDispatch\n{\n    [id(DISPID_HTTPREQUEST_SETPROXY)]\n    HRESULT SetProxy(\n        [in] HTTPREQUEST_PROXY_SETTING proxy_setting,\n        [in, optional] VARIANT proxy_server,\n        [in, optional] VARIANT bypass_list);\n\n    [id(DISPID_HTTPREQUEST_SETCREDENTIALS)]\n    HRESULT SetCredentials(\n        [in] BSTR username,\n        [in] BSTR password,\n        [in] HTTPREQUEST_SETCREDENTIALS_FLAGS flags);\n\n    [id(DISPID_HTTPREQUEST_OPEN)]\n    HRESULT Open(\n        [in] BSTR method,\n        [in] BSTR url,\n        [in, optional] VARIANT async);\n\n    [id(DISPID_HTTPREQUEST_SETREQUESTHEADER)]\n    HRESULT SetRequestHeader(\n        [in] BSTR header,\n        [in] BSTR value);\n\n    [id(DISPID_HTTPREQUEST_GETRESPONSEHEADER)]\n    HRESULT GetResponseHeader(\n        [in] BSTR header,\n        [out, retval] BSTR *value);\n\n    [id(DISPID_HTTPREQUEST_GETALLRESPONSEHEADERS)]\n    HRESULT GetAllResponseHeaders(\n        [out, retval] BSTR *headers);\n\n    [id(DISPID_HTTPREQUEST_SEND)]\n    HRESULT Send(\n        [in, optional] VARIANT body);\n\n    [propget, id(DISPID_HTTPREQUEST_STATUS)]\n    HRESULT Status(\n        [out, retval] LONG *status);\n\n    [propget, id(DISPID_HTTPREQUEST_STATUSTEXT)]\n    HRESULT StatusText(\n        [out, retval] BSTR *status);\n\n    [propget, id(DISPID_HTTPREQUEST_RESPONSETEXT)]\n    HRESULT ResponseText(\n        [out, retval] BSTR *body);\n\n    [propget, id(DISPID_HTTPREQUEST_RESPONSEBODY)]\n    HRESULT ResponseBody(\n        [out, retval] VARIANT *body);\n\n    [propget, id(DISPID_HTTPREQUEST_RESPONSESTREAM)]\n    HRESULT ResponseStream(\n        [out, retval] VARIANT *body);\n\n    [propget, id(DISPID_HTTPREQUEST_OPTION)]\n    HRESULT Option(\n        [in] WinHttpRequestOption option,\n        [out, retval] VARIANT *value);\n\n    [propput, id(DISPID_HTTPREQUEST_OPTION)]\n    HRESULT Option(\n        [in] WinHttpRequestOption option,\n        [in] VARIANT value);\n\n    [id(DISPID_HTTPREQUEST_WAITFORRESPONSE)]\n    HRESULT WaitForResponse(\n        [in, optional] VARIANT timeout,\n        [out, retval] VARIANT_BOOL *succeeded);\n\n    [id(DISPID_HTTPREQUEST_ABORT)]\n    HRESULT Abort();\n\n    [id(DISPID_HTTPREQUEST_SETTIMEOUTS)]\n    HRESULT SetTimeouts(\n        [in] LONG resolve_timeout,\n        [in] LONG connect_timeout,\n        [in] LONG send_timeout,\n        [in] LONG receive_timeout);\n\n    [id(DISPID_HTTPREQUEST_SETCLIENTCERTIFICATE)]\n    HRESULT SetClientCertificate(\n        [in] BSTR certificate);\n\n    [id(DISPID_HTTPREQUEST_SETAUTOLOGONPOLICY)]\n    HRESULT SetAutoLogonPolicy(\n        [in] WinHttpRequestAutoLogonPolicy policy);\n}\n[\n    helpstring(\"WinHttpRequest Component version 5.1\"),\n    threading(apartment),\n    progid(\"WinHttp.WinHttpRequest.5.1\"),\n    uuid(2087c2f4-2cef-4953-a8ab-66779b670495)\n]\ncoclass WinHttpRequest { interface IWinHttpRequest; }\n\n} /* WinHttp */\n"
  },
  {
    "path": "wine/windows/httprequestid.h",
    "content": "/*\n * Copyright 2011 Hans Leidekker for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_HTTPREQUESTID_H\n#define __WINE_HTTPREQUESTID_H\n\n#define DISPID_HTTPREQUEST_BASE                     1\n#define DISPID_HTTPREQUEST_OPEN                     (DISPID_HTTPREQUEST_BASE)\n#define DISPID_HTTPREQUEST_SETREQUESTHEADER         (DISPID_HTTPREQUEST_BASE + 1)\n#define DISPID_HTTPREQUEST_GETRESPONSEHEADER        (DISPID_HTTPREQUEST_BASE + 2)\n#define DISPID_HTTPREQUEST_GETALLRESPONSEHEADERS    (DISPID_HTTPREQUEST_BASE + 3)\n#define DISPID_HTTPREQUEST_SEND                     (DISPID_HTTPREQUEST_BASE + 4)\n#define DISPID_HTTPREQUEST_OPTION                   (DISPID_HTTPREQUEST_BASE + 5)\n#define DISPID_HTTPREQUEST_STATUS                   (DISPID_HTTPREQUEST_BASE + 6)\n#define DISPID_HTTPREQUEST_STATUSTEXT               (DISPID_HTTPREQUEST_BASE + 7)\n#define DISPID_HTTPREQUEST_RESPONSETEXT             (DISPID_HTTPREQUEST_BASE + 8)\n#define DISPID_HTTPREQUEST_RESPONSEBODY             (DISPID_HTTPREQUEST_BASE + 9)\n#define DISPID_HTTPREQUEST_RESPONSESTREAM           (DISPID_HTTPREQUEST_BASE + 10)\n#define DISPID_HTTPREQUEST_ABORT                    (DISPID_HTTPREQUEST_BASE + 11)\n#define DISPID_HTTPREQUEST_SETPROXY                 (DISPID_HTTPREQUEST_BASE + 12)\n#define DISPID_HTTPREQUEST_SETCREDENTIALS           (DISPID_HTTPREQUEST_BASE + 13)\n#define DISPID_HTTPREQUEST_WAITFORRESPONSE          (DISPID_HTTPREQUEST_BASE + 14)\n#define DISPID_HTTPREQUEST_SETTIMEOUTS              (DISPID_HTTPREQUEST_BASE + 15)\n#define DISPID_HTTPREQUEST_SETCLIENTCERTIFICATE     (DISPID_HTTPREQUEST_BASE + 16)\n#define DISPID_HTTPREQUEST_SETAUTOLOGONPOLICY       (DISPID_HTTPREQUEST_BASE + 17)\n\n#endif /* __WINE_HTTPREQUESTID_H */\n"
  },
  {
    "path": "wine/windows/i_cryptasn1tls.h",
    "content": "/*\n * Copyright (C) 2007 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_I_CRYPTASN1TLS_H\n#define __WINE_I_CRYPTASN1TLS_H\n\ntypedef void *ASN1decoding_t;\ntypedef void *ASN1encoding_t;\ntypedef void *ASN1module_t;\ntypedef DWORD HCRYPTASN1MODULE;\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nASN1decoding_t WINAPI I_CryptGetAsn1Decoder(HCRYPTASN1MODULE);\nASN1encoding_t WINAPI I_CryptGetAsn1Encoder(HCRYPTASN1MODULE);\nBOOL        WINAPI I_CryptInstallAsn1Module(ASN1module_t, DWORD, void*);\nBOOL        WINAPI I_CryptUninstallAsn1Module(HCRYPTASN1MODULE);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* __WINE_I_CRYPTASN1TLS_H */\n"
  },
  {
    "path": "wine/windows/iads.idl",
    "content": "/*\n * Copyright 2005 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\n\n#ifndef __WIDL__\n#define threading(model)\n#define progid(str)\n#define vi_progid(str)\n#endif\n\n[\n    helpstring(\"Active DS Type Library\"),\n    uuid(97d25db0-0363-11cf-abc4-02608c9e7553),\n    version(1.0)\n]\nlibrary ActiveDs\n{\n\nimportlib(\"stdole2.tlb\");\n\ntypedef enum\n{\n    ADS_RIGHT_DS_CREATE_CHILD         = 0x00000001,\n    ADS_RIGHT_DS_DELETE_CHILD         = 0x00000002,\n    ADS_RIGHT_ACTRL_DS_LIST           = 0x00000004,\n    ADS_RIGHT_DS_SELF                 = 0x00000008,\n    ADS_RIGHT_DS_READ_PROP            = 0x00000010,\n    ADS_RIGHT_DS_WRITE_PROP           = 0x00000020,\n    ADS_RIGHT_DS_DELETE_TREE          = 0x00000040,\n    ADS_RIGHT_DS_LIST_OBJECT          = 0x00000080,\n    ADS_RIGHT_DS_CONTROL_ACCESS       = 0x00000100,\n\n    ADS_RIGHT_DELETE                  = 0x00010000,\n    ADS_RIGHT_READ_CONTROL            = 0x00020000,\n    ADS_RIGHT_WRITE_DAC               = 0x00040000,\n    ADS_RIGHT_WRITE_OWNER             = 0x00080000,\n    ADS_RIGHT_SYNCHRONIZE             = 0x00100000,\n    ADS_RIGHT_ACCESS_SYSTEM_SECURITY  = 0x00200000,\n\n    ADS_RIGHT_GENERIC_ALL             = 0x10000000,\n    ADS_RIGHT_GENERIC_EXECUTE         = 0x20000000,\n    ADS_RIGHT_GENERIC_WRITE           = 0x40000000,\n    ADS_RIGHT_GENERIC_READ            = 0x80000000\n} ADS_RIGHTS_ENUM;\n\ntypedef enum\n{\n    ADS_SECURE_AUTHENTICATION     = 0x1,\n    ADS_USE_ENCRYPTION            = 0x2,\n    ADS_USE_SSL                   = 0x2,\n    ADS_READONLY_SERVER           = 0x4,\n    ADS_PROMPT_CREDENTIALS        = 0x8,\n    ADS_NO_AUTHENTICATION         = 0x10,\n    ADS_FAST_BIND                 = 0x20,\n    ADS_USE_SIGNING               = 0x40,\n    ADS_USE_SEALING               = 0x80,\n    ADS_USE_DELEGATION            = 0x100,\n    ADS_SERVER_BIND               = 0x200,\n    ADS_NO_REFERRAL_CHASING       = 0x400,\n    ADS_AUTH_RESERVED             = 0x80000000\n} ADS_AUTHENTICATION_ENUM;\n\ntypedef enum\n{\n    ADS_SEARCHPREF_ASYNCHRONOUS,\n    ADS_SEARCHPREF_DEREF_ALIASES,\n    ADS_SEARCHPREF_SIZE_LIMIT,\n    ADS_SEARCHPREF_TIME_LIMIT,\n    ADS_SEARCHPREF_ATTRIBTYPES_ONLY,\n    ADS_SEARCHPREF_SEARCH_SCOPE,\n    ADS_SEARCHPREF_TIMEOUT,\n    ADS_SEARCHPREF_PAGESIZE,\n    ADS_SEARCHPREF_PAGED_TIME_LIMIT,\n    ADS_SEARCHPREF_CHASE_REFERRALS,\n    ADS_SEARCHPREF_SORT_ON,\n    ADS_SEARCHPREF_CACHE_RESULTS,\n    ADS_SEARCHPREF_DIRSYNC,\n    ADS_SEARCHPREF_TOMBSTONE,\n    ADS_SEARCHPREF_VLV,\n    ADS_SEARCHPREF_ATTRIBUTE_QUERY,\n    ADS_SEARCHPREF_SECURITY_MASK,\n    ADS_SEARCHPREF_DIRSYNC_FLAG,\n    ADS_SEARCHPREF_EXTENDED_DN\n} ADS_SEARCHPREF_ENUM;\n\ntypedef ADS_SEARCHPREF_ENUM *PADS_SEARCHPREF_INFO;\n\ntypedef enum\n{\n    ADS_STATUS_S_OK,\n    ADS_STATUS_INVALID_SEARCHPREF,\n    ADS_STATUS_INVALID_SEARCHPREFVALUE\n} ADS_STATUSENUM;\n\ntypedef enum\n{\n    ADSTYPE_INVALID,\n    ADSTYPE_DN_STRING,\n    ADSTYPE_CASE_EXACT_STRING,\n    ADSTYPE_CASE_IGNORE_STRING,\n    ADSTYPE_PRINTABLE_STRING,\n    ADSTYPE_NUMERIC_STRING,\n    ADSTYPE_BOOLEAN,\n    ADSTYPE_INTEGER,\n    ADSTYPE_OCTET_STRING,\n    ADSTYPE_UTC_TIME,\n    ADSTYPE_LARGE_INTEGER,\n    ADSTYPE_PROV_SPECIFIC,\n    ADSTYPE_OBJECT_CLASS,\n    ADSTYPE_CASEIGNORE_LIST,\n    ADSTYPE_OCTET_LIST,\n    ADSTYPE_PATH,\n    ADSTYPE_POSTALADDRESS,\n    ADSTYPE_TIMESTAMP,\n    ADSTYPE_BACKLINK,\n    ADSTYPE_TYPEDNAME,\n    ADSTYPE_HOLD,\n    ADSTYPE_NETADDRESS,\n    ADSTYPE_REPLICAPOINTER,\n    ADSTYPE_FAXNUMBER,\n    ADSTYPE_EMAIL,\n    ADSTYPE_NT_SECURITY_DESCRIPTOR,\n    ADSTYPE_UNKNOWN,\n    ADSTYPE_DN_WITH_BINARY,\n    ADSTYPE_DN_WITH_STRING\n} ADSTYPEENUM;\n\ntypedef enum\n{\n    ADS_PASSWORD_ENCODE_REQUIRE_SSL,\n    ADS_PASSWORD_ENCODE_CLEAR\n} ADS_PASSWORD_ENCODING_ENUM;\n\ntypedef struct _ADS_CASEIGNORE_LIST\n{\n    struct _ADS_CASEIGNORE_LIST *Next;\n    LPWSTR String;\n} ADS_CASEIGNORE_LIST;\n\ntypedef struct _ADS_OCTET_LIST\n{\n    struct _ADS_OCTET_LIST *Next;\n    DWORD Length;\n    BYTE *Data;\n} ADS_OCTET_LIST;\n\ntypedef struct\n{\n    DWORD Type;\n    LPWSTR VolumeName;\n    LPWSTR Path;\n} ADS_PATH, *PADS_PATH;\n\ntypedef struct\n{\n    DWORD WholeSeconds;\n    DWORD EventID;\n} ADS_TIMESTAMP;\n\n\ntypedef ADSTYPEENUM ADSTYPE;\ntypedef LPWSTR ADS_DN_STRING;\ntypedef LPWSTR *PADS_DN_STRING;\ntypedef LPWSTR ADS_CASE_EXACT_STRING;\ntypedef LPWSTR *PADS_CASE_EXACT_STRING;\ntypedef LPWSTR ADS_CASE_IGNORE_STRING;\ntypedef LPWSTR *PADS_CASE_IGNORE_STRING;\ntypedef LPWSTR ADS_PRINTABLE_STRING;\ntypedef LPWSTR *PADS_PRINTABLE_STRING;\ntypedef LPWSTR ADS_NUMERIC_STRING;\ntypedef LPWSTR *PADS_NUMERIC_STRING;\ntypedef DWORD ADS_BOOLEAN;\ntypedef DWORD *LPNDS_BOOLEAN;\ntypedef DWORD ADS_INTEGER;\ntypedef DWORD *PADS_INTEGER;\ntypedef SYSTEMTIME ADS_UTC_TIME;\ntypedef SYSTEMTIME *PADS_UTC_TIME;\ntypedef LARGE_INTEGER ADS_LARGE_INTEGER;\ntypedef LARGE_INTEGER *PADS_LARGE_INTEGER;\ntypedef LPWSTR ADS_OBJECT_CLASS;\ntypedef LPWSTR *PADS_OBJECT_CLASS;\ntypedef struct _ADS_OCTET_LIST *PADS_OCTET_LIST;\ntypedef struct _ADS_CASEIGNORE_LIST *PADS_CASEIGNORE_LIST;\ntypedef ADS_STATUSENUM ADS_STATUS;\ntypedef ADS_SEARCHPREF_ENUM ADS_SEARCHPREF;\ntypedef HANDLE ADS_SEARCH_HANDLE;\ntypedef HANDLE *PADS_SEARCH_HANDLE;\n\n\ntypedef struct\n{\n    DWORD dwLength;\n    BYTE *lpValue;\n} ADS_OCTET_STRING;\n\ntypedef struct\n{\n    DWORD dwLength;\n    BYTE *lpValue;\n} ADS_PROV_SPECIFIC;\n\ntypedef struct\n{\n    LPWSTR PostalAddress[ 6 ];\n} ADS_POSTALADDRESS, *PADS_POSTALADDRESS;\n\ntypedef struct\n{\n    LPWSTR ObjectName;\n    DWORD Level;\n    DWORD Interval;\n} ADS_TYPEDNAME, *PADS_TYPEDNAME;\n\ntypedef struct\n{\n    DWORD RemoteID;\n    LPWSTR ObjectName;\n} ADS_BACKLINK;\n\ntypedef struct\n{\n    LPWSTR ObjectName;\n    DWORD Amount;\n} ADS_HOLD;\n\ntypedef struct\n{\n    DWORD AddressType;\n    DWORD AddressLength;\n    BYTE *Address;\n} ADS_NETADDRESS, *PADS_NETADDRESS;\n\ntypedef struct\n{\n    LPWSTR ServerName;\n    DWORD ReplicaType;\n    DWORD ReplicaNumber;\n    DWORD Count;\n    PADS_NETADDRESS ReplicaAddressHints;\n} ADS_REPLICAPOINTER, *PADS_REPLICAPOINTER;\n\ntypedef struct\n{\n    LPWSTR TelephoneNumber;\n    DWORD NumberOfBits;\n    BYTE *Parameters;\n} ADS_FAXNUMBER, *PADS_FAXNUMBER;\n\n\ntypedef struct\n{\n    LPWSTR Address;\n    DWORD Type;\n} ADS_EMAIL, *PADS_EMAIL;\n\ntypedef struct\n{\n    DWORD dwLength;\n    BYTE *lpValue;\n} ADS_NT_SECURITY_DESCRIPTOR;\n\ntypedef struct\n{\n    DWORD dwLength;\n    BYTE *lpBinaryValue;\n    LPWSTR pszDNString;\n} ADS_DN_WITH_BINARY, *PADS_DN_WITH_BINARY;\n\ntypedef struct\n{\n    LPWSTR pszStringValue;\n    LPWSTR pszDNString;\n} ADS_DN_WITH_STRING, *PADS_DN_WITH_STRING;\n\ntypedef struct _adsvalue\n{\n    ADSTYPE dwType;\n    union\n    {\n        ADS_DN_STRING DNString;\n        ADS_CASE_EXACT_STRING CaseExactString;\n        ADS_CASE_IGNORE_STRING CaseIgnoreString;\n        ADS_PRINTABLE_STRING PrintableString;\n        ADS_NUMERIC_STRING NumericString;\n        ADS_BOOLEAN Boolean;\n        ADS_INTEGER Integer;\n        ADS_OCTET_STRING OctetString;\n        ADS_UTC_TIME UTCTime;\n        ADS_LARGE_INTEGER LargeInteger;\n        ADS_OBJECT_CLASS ClassName;\n        ADS_PROV_SPECIFIC ProviderSpecific;\n        PADS_CASEIGNORE_LIST pCaseIgnoreList;\n        PADS_OCTET_LIST pOctetList;\n        PADS_PATH pPath;\n        PADS_POSTALADDRESS pPostalAddress;\n        ADS_TIMESTAMP Timestamp;\n        ADS_BACKLINK BackLink;\n        PADS_TYPEDNAME pTypedName;\n        ADS_HOLD Hold;\n        PADS_NETADDRESS pNetAddress;\n        PADS_REPLICAPOINTER pReplicaPointer;\n        PADS_FAXNUMBER pFaxNumber;\n        ADS_EMAIL Email;\n        ADS_NT_SECURITY_DESCRIPTOR SecurityDescriptor;\n        PADS_DN_WITH_BINARY pDNWithBinary;\n        PADS_DN_WITH_STRING pDNWithString;\n    };\n} ADSVALUE, *PADSVALUE;\n\ntypedef struct ads_searchpref_info\n{\n    ADS_SEARCHPREF dwSearchPref;\n    ADSVALUE vValue;\n    ADS_STATUS dwStatus;\n} ADS_SEARCHPREF_INFO;\n\ntypedef struct ads_search_column\n{\n    LPWSTR pszAttrName;\n    ADSTYPE dwADsType;\n    PADSVALUE pADsValues;\n    DWORD dwNumValues;\n    HANDLE hReserved;\n} ADS_SEARCH_COLUMN, *PADS_SEARCH_COLUMN;\n\n/*****************************************************************************\n *    IADsContainer interface\n */\n[\n    object,\n    uuid(001677d0-fd16-11ce-abc4-02608c9e7553)\n]\ninterface IADsContainer: IDispatch\n{\n    [propget] HRESULT Count(\n        [out, retval] long *retval);\n    [propget, restricted] HRESULT _NewEnum(\n        [out, retval] IUnknown **retval);\n    [propget] HRESULT Filter(\n        [out, retval] VARIANT *pvFilter);\n    [propput] HRESULT Filter(\n        [in] VARIANT vFilter);\n    [propget] HRESULT Hints(\n        [out, retval] VARIANT *pvHints);\n    [propput] HRESULT Hints(\n        [in] VARIANT vHints);\n    HRESULT GetObject(\n        [in] BSTR bstrClassName,\n        [in] BSTR bstrRelativeName,\n        [out, retval] IDispatch **ppObject);\n    HRESULT Create(\n        [in] BSTR bstrClassName,\n        [in] BSTR bstrRelativeName,\n        [out, retval] IDispatch **ppObject);\n    HRESULT Delete(\n        [in] BSTR bstrClassName,\n        [in] BSTR bstrRelativeName);\n    HRESULT CopyHere(\n        [in] BSTR bstrSourceName,\n        [in] BSTR bstrNewName,\n        [out, retval] IDispatch **ppObject);\n    HRESULT MoveHere(\n        [in] BSTR bstrSourceName,\n        [in] BSTR bstrNewName,\n        [out, retval] IDispatch **ppObject);\n}\n\n/*****************************************************************************\n *    IADs interface\n */\n[\n    odl,\n    uuid(FD8256D0-FD15-11CE-ABC4-02608C9E7553),\n    dual,\n    oleautomation\n]\ninterface IADs : IDispatch\n{\n    [id(0x00000002), propget]\n    HRESULT Name([out, retval] BSTR* retval);\n\n    [id(0x00000003), propget]\n    HRESULT Class([out, retval] BSTR* retval);\n\n    [id(0x00000004), propget]\n    HRESULT GUID([out, retval] BSTR* retval);\n\n    [id(0x00000005), propget]\n    HRESULT ADsPath([out, retval] BSTR* retval);\n\n    [id(0x00000006), propget]\n    HRESULT Parent([out, retval] BSTR* retval);\n\n    [id(0x00000007), propget]\n    HRESULT Schema([out, retval] BSTR* retval);\n\n    [id(0x00000008)]\n    HRESULT GetInfo();\n\n    [id(0x00000009)]\n    HRESULT SetInfo();\n\n    [id(0x0000000a)]\n    HRESULT Get([in] BSTR bstrName, [out, retval] VARIANT* pvProp);\n\n    [id(0x0000000b)]\n    HRESULT Put([in] BSTR bstrName, [in] VARIANT vProp);\n\n    [id(0x0000000c)]\n    HRESULT GetEx([in] BSTR bstrName, [out, retval] VARIANT* pvProp);\n\n    [id(0x0000000d)]\n    HRESULT PutEx([in] long lnControlCode, [in] BSTR bstrName, [in] VARIANT vProp);\n\n    [id(0x0000000e)]\n    HRESULT GetInfoEx( [in] VARIANT vProperties, [in] long lnReserved);\n}\n\n/*****************************************************************************\n *    IADsMembers interface\n */\n[\n    odl,\n    uuid(451A0030-72EC-11CF-B03B-00AA006E0975),\n    dual,\n    oleautomation\n]\ninterface IADsMembers : IDispatch\n{\n    [id(0x00000002), propget]\n    HRESULT Count([out, retval] long* plCount);\n\n    [id(0xfffffffc), propget]\n    HRESULT _NewEnum([out, retval] IUnknown** ppEnumerator);\n\n    [id(0x00000003), propget]\n    HRESULT Filter([out, retval] VARIANT* pvFilter);\n\n    [id(0x00000003), propput]\n    HRESULT Filter([in] VARIANT pvFilter);\n}\n\n/*****************************************************************************\n *    IADsGroup interface\n */\n[\n    odl,\n    uuid(27636B00-410F-11CF-B1FF-02608C9E7553),\n    dual,\n    oleautomation\n]\ninterface IADsGroup : IADs {\n    [id(0x0000000f), propget]\n    HRESULT Description([out, retval] BSTR* retval);\n\n    [id(0x0000000f), propput]\n    HRESULT Description([in] BSTR retval);\n\n    [id(0x00000010)]\n    HRESULT Members([out, retval] IADsMembers** ppMembers);\n\n    [id(0x00000011)]\n    HRESULT IsMember([in] BSTR bstrMember, [out, retval] VARIANT_BOOL* bMember);\n\n    [id(0x00000012)]\n    HRESULT Add([in] BSTR bstrNewItem);\n\n    [id(0x00000013)]\n    HRESULT Remove([in] BSTR bstrItemToBeRemoved);\n}\n\n/*****************************************************************************\n *    IADsUser interface\n */\n[\n    odl,\n    uuid(3E37E320-17E2-11CF-ABC4-02608C9E7553),\n    dual,\n    oleautomation\n]\ninterface IADsUser : IADs\n{\n    [id(0x00000035), propget]\n    HRESULT BadLoginAddress([out, retval] BSTR* retval);\n\n    [id(0x00000036), propget]\n    HRESULT BadLoginCount([out, retval] long* retval);\n\n    [id(0x00000038), propget]\n    HRESULT LastLogin([out, retval] DATE* retval);\n\n    [id(0x00000039), propget]\n    HRESULT LastLogoff([out, retval] DATE* retval);\n\n    [id(0x0000003a), propget]\n    HRESULT LastFailedLogin([out, retval] DATE* retval);\n\n    [id(0x0000003b), propget]\n    HRESULT PasswordLastChanged([out, retval] DATE* retval);\n\n    [id(0x0000000f), propget]\n    HRESULT Description([out, retval] BSTR* retval);\n\n    [id(0x0000000f), propput]\n    HRESULT Description([in] BSTR retval);\n\n    [id(0x00000013), propget]\n    HRESULT Division([out, retval] BSTR* retval);\n\n    [id(0x00000013), propput]\n    HRESULT Division([in] BSTR retval);\n\n    [id(0x0000007a), propget]\n    HRESULT Department([out, retval] BSTR* retval);\n\n    [id(0x0000007a), propput]\n    HRESULT Department([in] BSTR retval);\n\n    [id(0x00000014), propget]\n    HRESULT EmployeeID([out, retval] BSTR* retval);\n\n    [id(0x00000014), propput]\n    HRESULT EmployeeID([in] BSTR retval);\n\n    [id(0x00000017), propget]\n    HRESULT FullName([out, retval] BSTR* retval);\n\n    [id(0x00000017), propput]\n    HRESULT FullName([in] BSTR retval);\n\n    [id(0x00000016), propget]\n    HRESULT FirstName([out, retval] BSTR* retval);\n\n    [id(0x00000016), propput]\n    HRESULT FirstName([in] BSTR retval);\n\n    [id(0x00000019), propget]\n    HRESULT LastName([out, retval] BSTR* retval);\n\n    [id(0x00000019), propput]\n    HRESULT LastName([in] BSTR retval);\n\n    [id(0x0000001b), propget]\n    HRESULT OtherName([out, retval] BSTR* retval);\n\n    [id(0x0000001b), propput]\n    HRESULT OtherName([in] BSTR retval);\n\n    [id(0x00000072), propget]\n    HRESULT NamePrefix([out, retval] BSTR* retval);\n\n    [id(0x00000072), propput]\n    HRESULT NamePrefix([in] BSTR retval);\n\n    [id(0x00000073), propget]\n    HRESULT NameSuffix([out, retval] BSTR* retval);\n\n    [id(0x00000073), propput]\n    HRESULT NameSuffix([in] BSTR retval);\n\n    [id(0x00000024), propget]\n    HRESULT Title([out, retval] BSTR* retval);\n\n    [id(0x00000024), propput]\n    HRESULT Title([in] BSTR retval);\n\n    [id(0x0000001a), propget]\n    HRESULT Manager([out, retval] BSTR* retval);\n\n    [id(0x0000001a), propput]\n    HRESULT Manager([in] BSTR retval);\n\n    [id(0x00000020), propget]\n    HRESULT TelephoneHome([out, retval] VARIANT* retval);\n\n    [id(0x00000020), propput]\n    HRESULT TelephoneHome([in] VARIANT retval);\n\n    [id(0x00000021), propget]\n    HRESULT TelephoneMobile([out, retval] VARIANT* retval);\n\n    [id(0x00000021), propput]\n    HRESULT TelephoneMobile([in] VARIANT retval);\n\n    [id(0x00000022), propget]\n    HRESULT TelephoneNumber([out, retval] VARIANT* retval);\n\n    [id(0x00000022), propput]\n    HRESULT TelephoneNumber([in] VARIANT retval);\n\n    [id(0x00000011), propget]\n    HRESULT TelephonePager([out, retval] VARIANT* retval);\n\n    [id(0x00000011), propput]\n    HRESULT TelephonePager([in] VARIANT retval);\n\n    [id(0x00000010), propget]\n    HRESULT FaxNumber([out, retval] VARIANT* retval);\n\n    [id(0x00000010), propput]\n    HRESULT FaxNumber([in] VARIANT retval);\n\n    [id(0x0000001c), propget]\n    HRESULT OfficeLocations([out, retval] VARIANT* retval);\n\n    [id(0x0000001c), propput]\n    HRESULT OfficeLocations([in] VARIANT retval);\n\n    [id(0x0000001e), propget]\n    HRESULT PostalAddresses([out, retval] VARIANT* retval);\n\n    [id(0x0000001e), propput]\n    HRESULT PostalAddresses([in] VARIANT retval);\n\n    [id(0x0000001f), propget]\n    HRESULT PostalCodes([out, retval] VARIANT* retval);\n\n    [id(0x0000001f), propput]\n    HRESULT PostalCodes([in] VARIANT retval);\n\n    [id(0x00000075), propget]\n    HRESULT SeeAlso([out, retval] VARIANT* retval);\n\n    [id(0x00000075), propput]\n    HRESULT SeeAlso([in] VARIANT retval);\n\n    [id(0x00000025), propget]\n    HRESULT AccountDisabled([out, retval] VARIANT_BOOL* retval);\n\n    [id(0x00000025), propput]\n    HRESULT AccountDisabled([in] VARIANT_BOOL retval);\n\n    [id(0x00000026), propget]\n    HRESULT AccountExpirationDate([out, retval] DATE* retval);\n\n    [id(0x00000026), propput]\n    HRESULT AccountExpirationDate([in] DATE retval);\n\n    [id(0x00000029), propget]\n    HRESULT GraceLoginsAllowed([out, retval] long* retval);\n\n    [id(0x00000029), propput]\n    HRESULT GraceLoginsAllowed([in] long retval);\n\n    [id(0x0000002a), propget]\n    HRESULT GraceLoginsRemaining([out, retval] long* retval);\n\n    [id(0x0000002a), propput]\n    HRESULT GraceLoginsRemaining([in] long retval);\n\n    [id(0x0000002b), propget]\n    HRESULT IsAccountLocked([out, retval] VARIANT_BOOL* retval);\n\n    [id(0x0000002b), propput]\n    HRESULT IsAccountLocked([in] VARIANT_BOOL retval);\n\n    [id(0x0000002d), propget]\n    HRESULT LoginHours([out, retval] VARIANT* retval);\n\n    [id(0x0000002d), propput]\n    HRESULT LoginHours([in] VARIANT retval);\n\n    [id(0x0000002e), propget]\n    HRESULT LoginWorkstations([out, retval] VARIANT* retval);\n\n    [id(0x0000002e), propput]\n    HRESULT LoginWorkstations([in] VARIANT retval);\n\n    [id(0x0000002f), propget]\n    HRESULT MaxLogins([out, retval] long* retval);\n\n    [id(0x0000002f), propput]\n    HRESULT MaxLogins([in] long retval);\n\n    [id(0x00000030), propget]\n    HRESULT MaxStorage([out, retval] long* retval);\n\n    [id(0x00000030), propput]\n    HRESULT MaxStorage([in] long retval);\n\n    [id(0x00000031), propget]\n    HRESULT PasswordExpirationDate([out, retval] DATE* retval);\n\n    [id(0x00000031), propput]\n    HRESULT PasswordExpirationDate([in] DATE retval);\n\n    [id(0x00000032), propget]\n    HRESULT PasswordMinimumLength([out, retval] long* retval);\n\n    [id(0x00000032), propput]\n    HRESULT PasswordMinimumLength([in] long retval);\n\n    [id(0x00000033), propget]\n    HRESULT PasswordRequired([out, retval] VARIANT_BOOL* retval);\n\n    [id(0x00000033), propput]\n    HRESULT PasswordRequired([in] VARIANT_BOOL retval);\n\n    [id(0x00000034), propget]\n    HRESULT RequireUniquePassword([out, retval] VARIANT_BOOL* retval);\n\n    [id(0x00000034), propput]\n    HRESULT RequireUniquePassword([in] VARIANT_BOOL retval);\n\n    [id(0x0000003c), propget]\n    HRESULT EmailAddress([out, retval] BSTR* retval);\n\n    [id(0x0000003c), propput]\n    HRESULT EmailAddress([in] BSTR retval);\n\n    [id(0x0000003d), propget]\n    HRESULT HomeDirectory([out, retval] BSTR* retval);\n\n    [id(0x0000003d), propput]\n    HRESULT HomeDirectory([in] BSTR retval);\n\n    [id(0x0000003e), propget]\n    HRESULT Languages([out, retval] VARIANT* retval);\n\n    [id(0x0000003e), propput]\n    HRESULT Languages([in] VARIANT retval);\n\n    [id(0x0000003f), propget]\n    HRESULT Profile([out, retval] BSTR* retval);\n\n    [id(0x0000003f), propput]\n    HRESULT Profile([in] BSTR retval);\n\n    [id(0x00000040), propget]\n    HRESULT LoginScript([out, retval] BSTR* retval);\n\n    [id(0x00000040), propput]\n    HRESULT LoginScript([in] BSTR retval);\n\n    [id(0x00000041), propget]\n    HRESULT Picture([out, retval] VARIANT* retval);\n\n    [id(0x00000041), propput]\n    HRESULT Picture([in] VARIANT retval);\n\n    [id(0x00000078), propget]\n    HRESULT HomePage([out, retval] BSTR* retval);\n\n    [id(0x00000078), propput]\n    HRESULT HomePage([in] BSTR retval);\n\n    [id(0x00000042)]\n    HRESULT Groups([out, retval] IADsMembers** ppGroups);\n\n    [id(0x00000043)]\n    HRESULT SetPassword([in] BSTR NewPassword);\n\n    [id(0x00000044)]\n    HRESULT ChangePassword([in] BSTR bstrOldPassword, [in] BSTR bstrNewPassword);\n}\n\n/*****************************************************************************\n *    IDirectorySearch interface\n */\n[\n    odl,\n    local,\n    uuid(109BA8EC-92F0-11D0-A790-00C04FD8D5A8)\n]\ninterface IDirectorySearch : IUnknown\n{\n    HRESULT SetSearchPreference([in] PADS_SEARCHPREF_INFO pSearchPrefs, [in] DWORD dwNumPrefs);\n    HRESULT ExecuteSearch([in] LPWSTR pszSearchFilter, [in] LPWSTR* pAttributeNames,\n                    [in] DWORD dwNumberAttributes, [out] PADS_SEARCH_HANDLE phSearchResult);\n    HRESULT AbandonSearch([in] ADS_SEARCH_HANDLE phSearchResult);\n    HRESULT GetFirstRow([in] ADS_SEARCH_HANDLE hSearchResult);\n    HRESULT GetNextRow([in] ADS_SEARCH_HANDLE hSearchResult);\n    HRESULT GetPreviousRow([in] ADS_SEARCH_HANDLE hSearchResult);\n    HRESULT GetNextColumnName([in] ADS_SEARCH_HANDLE hSearchHandle, [out] LPWSTR* ppszColumnName);\n    HRESULT GetColumn( [in] ADS_SEARCH_HANDLE hSearchResult, [in] LPWSTR szColumnName,\n                    [out] PADS_SEARCH_COLUMN pSearchColumn);\n    HRESULT FreeColumn([in] PADS_SEARCH_COLUMN pSearchColumn);\n    HRESULT CloseSearchHandle([in] ADS_SEARCH_HANDLE hSearchResult);\n}\n\n/*****************************************************************************\n *    IADsADSystemInfo interface\n */\n[\n    odl,\n    uuid(5bb11929-afd1-11d2-9cb9-0000f87a369e),\n    dual,\n    oleautomation\n]\ninterface IADsADSystemInfo : IDispatch\n{\n    [id(0x00000002), propget]\n    HRESULT UserName([out, retval] BSTR *retval);\n    [id(0x00000003), propget]\n    HRESULT ComputerName([out, retval] BSTR *retval);\n    [id(0x00000004), propget]\n    HRESULT SiteName([out, retval] BSTR *retval);\n    [id(0x00000005), propget]\n    HRESULT DomainShortName([out, retval] BSTR *retval);\n    [id(0x00000006), propget]\n    HRESULT DomainDNSName([out, retval] BSTR *retval);\n    [id(0x00000007), propget]\n    HRESULT ForestDNSName([out, retval] BSTR *retval);\n    [id(0x00000008), propget]\n    HRESULT PDCRoleOwner([out, retval] BSTR *retval);\n    [id(0x00000009), propget]\n    HRESULT SchemaRoleOwner([out, retval] BSTR *retval);\n    [id(0x0000000a), propget]\n    HRESULT IsNativeMode([out, retval] VARIANT_BOOL *retval);\n    [id(0x0000000b)]\n    HRESULT GetAnyDCName([out, retval] BSTR *retval);\n    [id(0x0000000c)]\n    HRESULT GetDCSiteName([in] BSTR server, [out, retval] BSTR *retval);\n    [id(0x0000000d)]\n    HRESULT RefreshSchemaCache();\n    [id(0x0000000e)]\n    HRESULT GetTrees([out, retval] VARIANT *retval);\n}\n\n[\n    helpstring(\"AD System Info Object\"),\n    uuid(50b6327f-afd1-11d2-9cb9-0000f87a369e),\n    progid(\"ADSystemInfo\"),\n    version(1.0)\n]\ncoclass ADSystemInfo\n{\n    [default] interface IADsADSystemInfo;\n    interface IDispatch;\n}\n\n} /* library */\n"
  },
  {
    "path": "wine/windows/icftypes.idl",
    "content": "/*\n * Types for the ICF api\n *\n * Copyright 2007 Jeff Latimer\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n */\n\nimport \"wtypes.idl\";\n\ntypedef enum NET_FW_PROFILE_TYPE_\n{\n    NET_FW_PROFILE_DOMAIN,\n    NET_FW_PROFILE_STANDARD,\n    NET_FW_PROFILE_CURRENT,\n    NET_FW_PROFILE_TYPE_MAX\n}   NET_FW_PROFILE_TYPE;\n\ntypedef enum NET_FW_PROFILE_TYPE2_\n{\n   NET_FW_PROFILE2_DOMAIN   = 0x0001,\n   NET_FW_PROFILE2_PRIVATE  = 0x0002,\n   NET_FW_PROFILE2_PUBLIC   = 0x0004,\n   NET_FW_PROFILE2_ALL      = 0x7FFFFFFF\n} NET_FW_PROFILE_TYPE2;\n\ntypedef enum NET_FW_IP_VERSION_\n{\n    NET_FW_IP_VERSION_V4,\n    NET_FW_IP_VERSION_V6,\n    NET_FW_IP_VERSION_ANY,\n    NET_FW_IP_VERSION_MAX\n}   NET_FW_IP_VERSION;\n\ntypedef enum NET_FW_POLICY_TYPE_\n{\n    NET_FW_POLICY_GROUP,\n    NET_FW_POLICY_LOCAL,\n    NET_FW_POLICY_EFFECTIVE,\n    NET_FW_POLICY_TYPE_MAX\n}   NET_FW_POLICY_TYPE;\n\ntypedef enum NET_FW_SCOPE_\n{\n    NET_FW_SCOPE_ALL,\n    NET_FW_SCOPE_LOCAL_SUBNET,\n    NET_FW_SCOPE_CUSTOM,\n    NET_FW_SCOPE_MAX\n}   NET_FW_SCOPE;\n\ntypedef enum NET_FW_SERVICE_TYPE_\n{\n    NET_FW_SERVICE_FILE_AND_PRINT,\n    NET_FW_SERVICE_UPNP,\n    NET_FW_SERVICE_REMOTE_DESKTOP,\n    NET_FW_SERVICE_NONE,\n    NET_FW_SERVICE_TYPE_MAX\n}   NET_FW_SERVICE_TYPE;\n\ntypedef enum NET_FW_IP_PROTOCOL_\n{\n    NET_FW_IP_PROTOCOL_TCP =  6,\n    NET_FW_IP_PROTOCOL_UDP = 17\n}   NET_FW_IP_PROTOCOL;\n\ntypedef enum NET_FW_RULE_DIRECTION_\n{\n    NET_FW_RULE_DIR_IN = 1,\n    NET_FW_RULE_DIR_OUT,\n    NET_FW_RULE_DIR_MAX\n} NET_FW_RULE_DIRECTION;\n\ntypedef enum NET_FW_ACTION_\n{\n    NET_FW_ACTION_BLOCK,\n    NET_FW_ACTION_ALLOW,\n    NET_FW_ACTION_MAX\n} NET_FW_ACTION;\n\ntypedef enum NET_FW_MODIFY_STATE_\n{\n    NET_FW_MODIFY_STATE_OK,\n    NET_FW_MODIFY_STATE_GP_OVERRIDE,\n    NET_FW_MODIFY_STATE_INBOUND_BLOCKED\n} NET_FW_MODIFY_STATE;\n"
  },
  {
    "path": "wine/windows/icm.h",
    "content": "/*\n * Copyright 2004 (C) Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_ICM_H\n#define __WINE_ICM_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef HANDLE HPROFILE;\ntypedef HPROFILE *PHPROFILE;\ntypedef HANDLE HTRANSFORM;\n\ntypedef DWORD TAGTYPE, *PTAGTYPE, *LPTAGTYPE;\n\ntypedef char COLOR_NAME[32];\ntypedef COLOR_NAME *PCOLOR_NAME, *LPCOLOR_NAME;\n\ntypedef struct tagNAMED_PROFILE_INFO\n{\n    DWORD       dwFlags;\n    DWORD       dwCount;\n    DWORD       dwCountDevCoordinates;\n    COLOR_NAME  szPrefix;\n    COLOR_NAME  szSuffix;\n} NAMED_PROFILE_INFO, *PNAMED_PROFILE_INFO, *LPNAMED_PROFILE_INFO;\n\n#define MAX_COLOR_CHANNELS  8\n\nstruct GRAYCOLOR\n{\n    WORD    gray;\n};\n\nstruct RGBCOLOR\n{\n    WORD    red;\n    WORD    green;\n    WORD    blue;\n};\n\nstruct CMYKCOLOR\n{\n    WORD    cyan;\n    WORD    magenta;\n    WORD    yellow;\n    WORD    black;\n};\n\nstruct XYZCOLOR\n{\n    WORD    X;\n    WORD    Y;\n    WORD    Z;\n};\n\nstruct YxyCOLOR\n{\n    WORD    Y;\n    WORD    x;\n    WORD    y;\n};\n\nstruct LabCOLOR\n{\n    WORD    L;\n    WORD    a;\n    WORD    b;\n};\n\nstruct GENERIC3CHANNEL\n{\n    WORD    ch1;\n    WORD    ch2;\n    WORD    ch3;\n};\n\nstruct NAMEDCOLOR\n{\n    DWORD   dwIndex;\n};\n\nstruct HiFiCOLOR\n{\n    BYTE    channel[MAX_COLOR_CHANNELS];\n};\n\ntypedef union tagCOLOR\n{\n    struct GRAYCOLOR        gray;\n    struct RGBCOLOR         rgb;\n    struct CMYKCOLOR        cmyk;\n    struct XYZCOLOR         XYZ;\n    struct YxyCOLOR         Yxy;\n    struct LabCOLOR         Lab;\n    struct GENERIC3CHANNEL  gen3ch;\n    struct NAMEDCOLOR       named;\n    struct HiFiCOLOR        hifi;\n    struct\n    {\n        DWORD reserved1;\n        VOID *reserved2;\n    } DUMMYSTRUCTNAME;\n} COLOR, *PCOLOR, *LPCOLOR;\n\ntypedef enum\n{\n    COLOR_GRAY  = 1,\n    COLOR_RGB,\n    COLOR_XYZ,\n    COLOR_Yxy,\n    COLOR_Lab,\n    COLOR_3_CHANNEL,\n    COLOR_CMYK,\n    COLOR_5_CHANNEL,\n    COLOR_6_CHANNEL,\n    COLOR_7_CHANNEL,\n    COLOR_8_CHANNEL,\n    COLOR_NAMED,\n} COLORTYPE, *PCOLORTYPE, *LPCOLORTYPE;\n\ntypedef enum\n{\n    BM_x555RGB     = 0x00,\n    BM_565RGB      = 0x01,\n    BM_RGBTRIPLETS = 0x02,\n    BM_BGRTRIPLETS = 0x04,\n    BM_xRGBQUADS   = 0x08,\n    BM_10b_RGB     = 0x09,\n    BM_16b_RGB     = 0x0a,\n    BM_xBGRQUADS   = 0x10,\n    BM_CMYKQUADS   = 0x20,\n    BM_x555XYZ     = 0x101,\n    BM_x555Yxz,\n    BM_x555Lab,\n    BM_x555G3CH,\n    BM_XYZTRIPLETS = 0x201,\n    BM_YxyTRIPLETS,\n    BM_LabTRIPLETS,\n    BM_G3CHTRIPLETS,\n    BM_5CHANNEL,\n    BM_6CHANNEL,\n    BM_7CHANNEL,\n    BM_8CHANNEL,\n    BM_GRAY,\n    BM_xXYZQUADS   = 0x301,\n    BM_xYxyQUADS,\n    BM_xLabQUADS,\n    BM_xG3CHQUADS,\n    BM_KYMCQUADS,\n    BM_10b_XYZ     = 0x401,\n    BM_10b_Yxy,\n    BM_10b_Lab,\n    BM_10b_G3CH,\n    BM_NAMED_INDEX,\n    BM_16b_XYZ     = 0x501,\n    BM_16b_Yxy,\n    BM_16b_Lab,\n    BM_16b_G3CH,\n    BM_16b_GRAY,\n} BMFORMAT, *PBMFORMAT, *LPBMFORMAT;\n\ntypedef BOOL (CALLBACK *PBMCALLBACKFN)(ULONG,ULONG,LPARAM);\ntypedef PBMCALLBACKFN LPPBMCALLBACKFN;\n\n#define INTENT_PERCEPTUAL               0\n#define INTENT_RELATIVE_COLORIMETRIC    1\n#define INTENT_SATURATION               2\n#define INTENT_ABSOLUTE_COLORIMETRIC    3\n\ntypedef struct tagPROFILEHEADER\n{\n    DWORD phSize;\n    DWORD phCMMType;\n    DWORD phVersion;\n    DWORD phClass;\n    DWORD phDataColorSpace;\n    DWORD phConnectionSpace;\n    DWORD phDateTime[3];\n    DWORD phSignature;\n    DWORD phPlatform;\n    DWORD phProfileFlags;\n    DWORD phManufacturer;\n    DWORD phModel;\n    DWORD phAttributes[2];\n    DWORD phRenderingIntent;\n    CIEXYZ phIlluminant;\n    DWORD phCreator;\n    BYTE phReserved[44];\n} PROFILEHEADER, *PPROFILEHEADER, *LPPROFILEHEADER;\n\ntypedef struct tagPROFILE\n{\n    DWORD dwType;\n    PVOID pProfileData;\n    DWORD cbDataSize;\n} PROFILE, *PPROFILE, *LPPROFILE;\n\n#define ENUM_TYPE_VERSION   0x0300\n\ntypedef struct tagENUMTYPEA\n{\n    DWORD   dwSize;\n    DWORD   dwVersion;\n    DWORD   dwFields;\n    PCSTR   pDeviceName;\n    DWORD   dwMediaType;\n    DWORD   dwDitheringMode;\n    DWORD   dwResolution[2];\n    DWORD   dwCMMType;\n    DWORD   dwClass;\n    DWORD   dwDataColorSpace;\n    DWORD   dwConnectionSpace;\n    DWORD   dwSignature;\n    DWORD   dwPlatform;\n    DWORD   dwProfileFlags;\n    DWORD   dwManufacturer;\n    DWORD   dwModel;\n    DWORD   dwAttributes[2];\n    DWORD   dwRenderingIntent;\n    DWORD   dwCreator;\n    DWORD   dwDeviceClass;\n} ENUMTYPEA, *PENUMTYPEA, *LPENUMTYPEA;\n\ntypedef struct tagENUMTYPEW\n{\n    DWORD   dwSize;\n    DWORD   dwVersion;\n    DWORD   dwFields;\n    PCWSTR  pDeviceName;\n    DWORD   dwMediaType;\n    DWORD   dwDitheringMode;\n    DWORD   dwResolution[2];\n    DWORD   dwCMMType;\n    DWORD   dwClass;\n    DWORD   dwDataColorSpace;\n    DWORD   dwConnectionSpace;\n    DWORD   dwSignature;\n    DWORD   dwPlatform;\n    DWORD   dwProfileFlags;\n    DWORD   dwManufacturer;\n    DWORD   dwModel;\n    DWORD   dwAttributes[2];\n    DWORD   dwRenderingIntent;\n    DWORD   dwCreator;\n    DWORD   dwDeviceClass;\n} ENUMTYPEW, *PENUMTYPEW, *LPENUMTYPEW;\n\n#define ET_DEVICENAME       0x00000001\n#define ET_MEDIATYPE        0x00000002\n#define ET_DITHERMODE       0x00000004\n#define ET_RESOLUTION       0x00000008\n#define ET_CMMTYPE          0x00000010\n#define ET_CLASS            0x00000020\n#define ET_DATACOLORSPACE   0x00000040\n#define ET_CONNECTIONSPACE  0x00000080\n#define ET_SIGNATURE        0x00000100\n#define ET_PLATFORM         0x00000200\n#define ET_PROFILEFLAGS     0x00000400\n#define ET_MANUFACTURER     0x00000800\n#define ET_MODEL            0x00001000\n#define ET_ATTRIBUTES       0x00002000\n#define ET_RENDERINGINTENT  0x00004000\n#define ET_CREATOR          0x00008000\n#define ET_DEVICECLASS      0x00010000\n\nstruct _tagCOLORMATCHSETUPA;\nstruct _tagCOLORMATCHSETUPW;\n\ntypedef BOOL (WINAPI *PCMSCALLBACKA)(struct _tagCOLORMATCHSETUPA*,LPARAM);\ntypedef BOOL (WINAPI *PCMSCALLBACKW)(struct _tagCOLORMATCHSETUPW*,LPARAM);\n\ntypedef struct _tagCOLORMATCHSETUPA\n{\n    DWORD dwSize;\n    DWORD dwVersion;\n    DWORD dwFlags;\n    HWND  hwndOwner;\n    PCSTR pSourceName;\n    PCSTR pDisplayName;\n    PCSTR pPrinterName;\n    DWORD dwRenderIntent;\n    DWORD dwProofingIntent;\n    PSTR  pMonitorProfile;\n    DWORD ccMonitorProfile;\n    PSTR  pPrinterProfile;\n    DWORD ccPrinterProfile;\n    PSTR  pTargetProfile;\n    DWORD ccTargetProfile;\n    DLGPROC lpfnHook;\n    LPARAM lParam;\n    PCMSCALLBACKA lpfnApplyCallback;\n    LPARAM lParamApplyCallback;\n} COLORMATCHSETUPA, *PCOLORMATCHSETUPA, *LPCOLORMATCHSETUPA;\n\ntypedef struct _tagCOLORMATCHSETUPW\n{\n    DWORD dwSize;\n    DWORD dwVersion;\n    DWORD dwFlags;\n    HWND  hwndOwner;\n    PCWSTR pSourceName;\n    PCWSTR pDisplayName;\n    PCWSTR pPrinterName;\n    DWORD dwRenderIntent;\n    DWORD dwProofingIntent;\n    PWSTR  pMonitorProfile;\n    DWORD ccMonitorProfile;\n    PWSTR  pPrinterProfile;\n    DWORD ccPrinterProfile;\n    PWSTR  pTargetProfile;\n    DWORD ccTargetProfile;\n    DLGPROC lpfnHook;\n    LPARAM lParam;\n    PCMSCALLBACKW lpfnApplyCallback;\n    LPARAM lParamApplyCallback;\n} COLORMATCHSETUPW, *PCOLORMATCHSETUPW, *LPCOLORMATCHSETUPW;\n\nBOOL       WINAPI AssociateColorProfileWithDeviceA(PCSTR,PCSTR,PCSTR);\nBOOL       WINAPI AssociateColorProfileWithDeviceW(PCWSTR,PCWSTR,PCWSTR);\n#define    AssociateColorProfileWithDevice WINELIB_NAME_AW(AssociateColorProfileWithDevice)\nBOOL       WINAPI CheckBitmapBits(HTRANSFORM,PVOID,BMFORMAT,DWORD,DWORD,DWORD,PBYTE,PBMCALLBACKFN,LPARAM);\nBOOL       WINAPI CheckColors(HTRANSFORM,PCOLOR,DWORD,COLORTYPE,PBYTE);\nBOOL       WINAPI ConvertColorNameToIndex(HPROFILE,PCOLOR_NAME,PDWORD,DWORD);\nBOOL       WINAPI ConvertIndexToColorName(HPROFILE,PDWORD,PCOLOR_NAME,DWORD);\nBOOL       WINAPI CloseColorProfile(HPROFILE);\nHTRANSFORM WINAPI CreateColorTransformA(LPLOGCOLORSPACEA,HPROFILE,HPROFILE,DWORD);\nHTRANSFORM WINAPI CreateColorTransformW(LPLOGCOLORSPACEW,HPROFILE,HPROFILE,DWORD);\n#define    CreateColorTransform WINELIB_NAME_AW(CreateColorTransform)\nBOOL       WINAPI CreateDeviceLinkProfile(PHPROFILE,DWORD,PDWORD,DWORD,DWORD,PBYTE*,DWORD);\nHTRANSFORM WINAPI CreateMultiProfileTransform(PHPROFILE,DWORD,PDWORD,DWORD,DWORD,DWORD);\nBOOL       WINAPI CreateProfileFromLogColorSpaceA(LPLOGCOLORSPACEA,PBYTE*);\nBOOL       WINAPI CreateProfileFromLogColorSpaceW(LPLOGCOLORSPACEW,PBYTE*);\n#define    CreateProfileFromLogColorSpace WINELIB_NAME_AW(CreateProfileFromLogColorSpace)\nBOOL       WINAPI DeleteColorTransform(HTRANSFORM);\nBOOL       WINAPI DisassociateColorProfileFromDeviceA(PCSTR,PCSTR,PCSTR);\nBOOL       WINAPI DisassociateColorProfileFromDeviceW(PCWSTR,PCWSTR,PCWSTR);\n#define    DisassociateColorProfileFromDevice WINELIB_NAME_AW(DisassociateColorProfileFromDevice)\nBOOL       WINAPI EnumColorProfilesA(PCSTR,PENUMTYPEA,PBYTE,PDWORD,PDWORD);\nBOOL       WINAPI EnumColorProfilesW(PCWSTR,PENUMTYPEW,PBYTE,PDWORD,PDWORD);\n#define    EnumColorProfiles  WINELIB_NAME_AW(EnumColorProfiles)\nDWORD      WINAPI GenerateCopyFilePaths(LPCWSTR,LPCWSTR,LPBYTE,DWORD,LPWSTR,LPDWORD,LPWSTR,LPDWORD,DWORD);\nDWORD      WINAPI GetCMMInfo(HTRANSFORM,DWORD);\nBOOL       WINAPI GetColorDirectoryA(PCSTR,PSTR,PDWORD);\nBOOL       WINAPI GetColorDirectoryW(PCWSTR,PWSTR,PDWORD);\n#define    GetColorDirectory WINELIB_NAME_AW(GetColorDirectory)\nBOOL       WINAPI GetColorProfileElement(HPROFILE,TAGTYPE,DWORD,PDWORD,PVOID,PBOOL);\nBOOL       WINAPI GetColorProfileElementTag(HPROFILE,DWORD,PTAGTYPE);\nBOOL       WINAPI GetColorProfileFromHandle(HPROFILE,PBYTE,PDWORD);\nBOOL       WINAPI GetColorProfileHeader(HPROFILE,PPROFILEHEADER);\nBOOL       WINAPI GetCountColorProfileElements(HPROFILE,PDWORD);\nBOOL       WINAPI GetNamedProfileInfo(HPROFILE,PNAMED_PROFILE_INFO);\nBOOL       WINAPI GetPS2ColorRenderingDictionary(HPROFILE,DWORD,PBYTE,PDWORD,PBOOL);\nBOOL       WINAPI GetPS2ColorRenderingIntent(HPROFILE,DWORD,PBYTE,PDWORD);\nBOOL       WINAPI GetPS2ColorSpaceArray(HPROFILE,DWORD,DWORD,PBYTE,PDWORD,PBOOL);\nBOOL       WINAPI GetStandardColorSpaceProfileA(PCSTR,DWORD,PSTR,PDWORD);\nBOOL       WINAPI GetStandardColorSpaceProfileW(PCWSTR,DWORD,PWSTR,PDWORD);\n#define    GetStandardColorSpaceProfile WINELIB_NAME_AW(GetStandardColorSpaceProfile)\nBOOL       WINAPI InstallColorProfileA(PCSTR,PCSTR);\nBOOL       WINAPI InstallColorProfileW(PCWSTR,PCWSTR);\n#define    InstallColorProfile WINELIB_NAME_AW(InstallColorProfile)\nBOOL       WINAPI IsColorProfileTagPresent(HPROFILE,TAGTYPE,PBOOL);\nBOOL       WINAPI IsColorProfileValid(HPROFILE,PBOOL);\nHPROFILE   WINAPI OpenColorProfileA(PPROFILE,DWORD,DWORD,DWORD);\nHPROFILE   WINAPI OpenColorProfileW(PPROFILE,DWORD,DWORD,DWORD);\n#define    OpenColorProfile WINELIB_NAME_AW(OpenColorProfile)\nBOOL       WINAPI RegisterCMMA(PCSTR,DWORD,PCSTR);\nBOOL       WINAPI RegisterCMMW(PCWSTR,DWORD,PCWSTR);\n#define    RegisterCMM WINELIB_NAME_AW(RegisterCMM)\nBOOL       WINAPI SelectCMM(DWORD id);\nBOOL       WINAPI SetColorProfileElement(HPROFILE,TAGTYPE,DWORD,PDWORD,PVOID);\nBOOL       WINAPI SetColorProfileElementReference(HPROFILE,TAGTYPE,TAGTYPE);\nBOOL       WINAPI SetColorProfileElementSize(HPROFILE,TAGTYPE,DWORD);\nBOOL       WINAPI SetColorProfileHeader(HPROFILE,PPROFILEHEADER);\nBOOL       WINAPI SetStandardColorSpaceProfileA(PCSTR,DWORD,PSTR);\nBOOL       WINAPI SetStandardColorSpaceProfileW(PCWSTR,DWORD,PWSTR);\n#define    SetStandardColorSpaceProfile WINELIB_NAME_AW(SetStandardColorSpaceProfile)\nBOOL       WINAPI SetupColorMatchingA(PCOLORMATCHSETUPA);\nBOOL       WINAPI SetupColorMatchingW(PCOLORMATCHSETUPW);\n#define    SetupColorMatching WINELIB_NAME_AW(SetupColorMatching)\nBOOL       WINAPI SpoolerCopyFileEvent(LPWSTR,LPWSTR,DWORD);\nBOOL       WINAPI TranslateBitmapBits(HTRANSFORM,PVOID,BMFORMAT,DWORD,DWORD,DWORD,PVOID,BMFORMAT,DWORD,PBMCALLBACKFN,ULONG);\nBOOL       WINAPI TranslateColors(HTRANSFORM,PCOLOR,DWORD,COLORTYPE,PCOLOR,COLORTYPE);\nBOOL       WINAPI UninstallColorProfileA(PCSTR,PCSTR,BOOL);\nBOOL       WINAPI UninstallColorProfileW(PCWSTR,PCWSTR,BOOL);\n#define    UninstallColorProfile WINELIB_NAME_AW(UninstallColorProfile)\nBOOL       WINAPI UnregisterCMMA(PCSTR,DWORD);\nBOOL       WINAPI UnregisterCMMW(PCWSTR,DWORD);\n#define    UnregisterCMM WINELIB_NAME_AW(UnregisterCMM)\n\n#define PROFILE_FILENAME    1\n#define PROFILE_MEMBUFFER   2\n\n#define PROFILE_READ        1\n#define PROFILE_READWRITE   2\n\n#define SPACE_XYZ   0x58595A20   /* 'XYZ ' */\n#define SPACE_Lab   0x4C616220   /* 'Lab ' */\n#define SPACE_Luv   0x4C757620   /* 'Luv ' */\n#define SPACE_YCbCr 0x59436272   /* 'YCbr' */\n#define SPACE_Yxy   0x59787920   /* 'Yxy ' */\n#define SPACE_RGB   0x52474220   /* 'RGB ' */\n#define SPACE_GRAY  0x47524159   /* 'GRAY' */\n#define SPACE_HSV   0x48535620   /* 'HSV ' */\n#define SPACE_HLS   0x484C5320   /* 'HLS ' */\n#define SPACE_CMYK  0x434D594B   /* 'CMYK' */\n#define SPACE_CMY   0x434D5920   /* 'CMY ' */\n#define SPACE_2_CHANNEL 0x32434c52   /* '2CLR' */\n#define SPACE_3_CHANNEL 0x33434c52   /* '3CLR' */\n#define SPACE_4_CHANNEL 0x34434c52   /* '4CLR' */\n#define SPACE_5_CHANNEL 0x35434c52   /* '5CLR' */\n#define SPACE_6_CHANNEL 0x36434c52   /* '6CLR' */\n#define SPACE_7_CHANNEL 0x37434c52   /* '7CLR' */\n#define SPACE_8_CHANNEL 0x38434c52   /* '8CLR' */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_ICM_H */\n"
  },
  {
    "path": "wine/windows/icmpapi.h",
    "content": "/*\n * Interface to the ICMP functions.\n *\n * Copyright (C) 1999 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_ICMPAPI_H\n#define __WINE_ICMPAPI_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\nHANDLE WINAPI IcmpCreateFile(\n    VOID\n    );\n\nBOOL WINAPI IcmpCloseHandle(\n    HANDLE  IcmpHandle\n    );\n\nDWORD WINAPI IcmpSendEcho(\n    HANDLE                 IcmpHandle,\n    IPAddr                 DestinationAddress,\n    LPVOID                 RequestData,\n    WORD                   RequestSize,\n    PIP_OPTION_INFORMATION RequestOptions,\n    LPVOID                 ReplyBuffer,\n    DWORD                  ReplySize,\n    DWORD                  Timeout\n    );\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_ICMPAPI_H */\n"
  },
  {
    "path": "wine/windows/idispids.h",
    "content": "/*\n * Copyright (C) 2005 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_IDISPIDS_H__\n#define __WINE_IDISPIDS_H__\n\n#define DISPID_READYSTATE (-525)\n#define DISPID_READYSTATECHANGE (-609)\n#define DISPID_AMBIENT_TRANSFERPRIORITY (-728)\n#define DISPID_AMBIENT_OFFLINEIFNOTCONNECTED (-5501)\n#define DISPID_AMBIENT_SILENT (-5502)\n\n#ifndef DISPID_AMBIENT_CODEPAGE\n#define DISPID_AMBIENT_CODEPAGE (-725)\n#define DISPID_AMBIENT_CHARSET (-727)\n#endif /* DISPID_AMBIENT_CODEPAGE */\n\n#endif /* __WINE_IDISPIDS_H__ */\n"
  },
  {
    "path": "wine/windows/ieautomation.idl",
    "content": "/*\n * Copyright 2017 Zebediah Figura for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"ocidl.idl\";\n\ntypedef\n[\n    uuid(44ec9b57-dcab-4cde-b373-ee94962950e3)\n]\nenum INTERNETEXPLORERCONFIGURATION {\n    INTERNETEXPLORERCONFIGURATION_HOST            = 0x00000001,\n    INTERNETEXPLORERCONFIGURATION_WEB_DRIVER      = 0x00000002,\n    INTERNETEXPLORERCONFIGURATION_WEB_DRIVER_EDGE = 0x00000004,\n} INTERNETEXPLORERCONFIGURATION;\n\n[\n    object,\n    uuid(acc84351-04ff-44f9-b23f-655ed168c6d5),\n    pointer_default(unique)\n]\ninterface IInternetExplorerManager : IUnknown\n{\n    HRESULT CreateObject([in] DWORD config, [in, unique, string] LPCWSTR url, [in] REFIID riid, [out, iid_is(riid)] void **ppv);\n}\n\n[\n    uuid(df4fcc34-067a-4e0a-8352-4a1a5095346e)\n]\ncoclass InternetExplorerManager\n{\n    [default] interface IInternetExplorerManager;\n}\n"
  },
  {
    "path": "wine/windows/iextag.idl",
    "content": "/*\n * Copyright 2011 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\n\n[\n    object,\n    uuid(7e8bc44d-aeff-11d1-89c2-00c04fb6bfc4),\n    dual,\n    pointer_default(unique)\n ]\ninterface IClientCaps : IDispatch\n{\n    [propget, id(1)]\n    HRESULT javaEnabled([out, retval] VARIANT_BOOL *pVal);\n\n    [propget, id(2)]\n    HRESULT cookieEnabled([out, retval] VARIANT_BOOL *pVal);\n\n    [propget, id(3)]\n    HRESULT cpuClass([out, retval] BSTR *p);\n\n    [propget, id(4)]\n    HRESULT systemLanguage([out, retval] BSTR *p);\n\n    [propget, id(6)]\n    HRESULT userLanguage([out, retval] BSTR *p);\n\n    [propget, id(7)]\n    HRESULT platform([out, retval] BSTR *p);\n\n    [propget, id(9)]\n    HRESULT connectionSpeed([out, retval] long *p);\n\n    [propget, id(10)]\n    HRESULT onLine([out, retval] VARIANT_BOOL *p);\n\n    [propget, id(11)]\n    HRESULT colorDepth([out, retval] long *p);\n\n    [propget, id(12)]\n    HRESULT bufferDepth([out, retval] long *p);\n\n    [propget, id(13)]\n    HRESULT width([out, retval] long *p);\n\n    [propget, id(14)]\n    HRESULT height([out, retval] long *p);\n\n    [propget, id(15)]\n    HRESULT availHeight([out, retval] long *p);\n\n    [propget, id(16)]\n    HRESULT availWidth([out, retval] long *p);\n\n    [propget, id(17)]\n    HRESULT connectionType([out, retval] BSTR *p);\n\n    [id(18)]\n    HRESULT isComponentInstalled(\n            [in] BSTR bstrName,\n            [in] BSTR bstrType,\n            [in, defaultvalue(\"\")] BSTR bStrVer,\n            [out, retval] VARIANT_BOOL *p);\n\n    [id(19)]\n    HRESULT getComponentVersion(\n            [in] BSTR bstrName,\n            [in] BSTR bstrType,\n            [out, retval] BSTR *pbstrVer);\n\n    [id(20)]\n    HRESULT compareVersions(\n            [in] BSTR bstrVer1,\n            [in] BSTR bstrVer2,\n            [out, retval] long *p);\n\n    [id(21)]\n    HRESULT addComponentRequest(\n            [in] BSTR bstrName,\n            [in] BSTR bstrType,\n            [in, defaultvalue(\"\")] BSTR bstrVer);\n\n    [id(22)]\n    HRESULT doComponentRequest([out, retval] VARIANT_BOOL *p);\n\n    [id(23)]\n    HRESULT clearComponentRequest();\n}\n\n[\n    uuid(7e8bc440-aeff-11d1-89c2-00c04fb6bfc4),\n    version(1.0)\n]\nlibrary IEXTagLib\n{\n    [\n        uuid(7e8bc44e-aeff-11d1-89c2-00C04fb6bfc4)\n    ]\n    coclass ClientCaps\n    {\n        [default] interface IClientCaps;\n    }\n}\n"
  },
  {
    "path": "wine/windows/ifdef.h",
    "content": "/* WINE ifdef.h\n * Copyright 2010 Juan Lang\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef WINE_IFDEF_H\n#define WINE_IFDEF_H\n\n#include <ipifcons.h>\n\ntypedef ULONG32 NET_IF_OBJECT_ID, *PNET_IF_OBJECT_ID;\ntypedef UINT32 NET_IF_COMPARTMENT_ID, *PNET_IF_COMPARTMENT_ID;\ntypedef GUID NET_IF_NETWORK_GUID, *PNET_IF_NETWORK_GUID;\ntypedef ULONG NET_IFINDEX, *PNET_IFINDEX;\ntypedef NET_IFINDEX IF_INDEX, *PIF_INDEX;\ntypedef UINT16 NET_IFTYPE, *PNET_IFTYPE;\n\n#define NET_IF_OPER_STATUS_DOWN_NOT_AUTHENTICATED   0x00000001\n#define NET_IF_OPER_STATUS_DOWN_NOT_MEDIA_CONNECTED 0x00000002\n#define NET_IF_OPER_STATUS_DORMANT_PAUSED           0x00000004\n#define NET_IF_OPER_STATUS_DORMANT_LOW_POWER        0x00000008\n\n#define NET_IF_COMPARTMENT_ID_UNSPECIFIED 0\n#define NET_IF_COMPARTMENT_ID_PRIMARY     1\n\n#define NET_IF_OID_IF_ALIAS       0x00000001\n#define NET_IF_OID_COMPARTMENT_ID 0x00000002\n#define NET_IF_OID_NETWORK_GUID   0x00000003\n#define NET_IF_OID_IF_ENTRY       0x00000004\n\n#define NET_SET_UNSPECIFIED_NETWORK_GUID(x)\n#define NET_IS_UNSPECIFIED_NETWORK_GUID(x)\n\n#define NET_SITEID_UNSPECIFIED 0\n#define NET_SITEID_MAXUSER     0x07ffffff\n#define NET_SITEID_MAXSYSTEM   0x0fffffff\n\n#define NET_IFINDEX_UNSPECIFIED 0\n#define IFI_UNSPECIFIED         NET_IFINDEX_UNSPECIFIED\n\n#define NET_IFLUID_UNSPECIFIED 0\n\n#define NIIF_HARDWARE_INTERFACE      0x00000001\n#define NIIF_FILTER_INTERFACE        0x00000002\n#define NIIF_NDIS_WDM_INTERFACE      0x00000020\n#define NIIF_NDIS_ENDPOINT_INTERFACE 0x00000040\n#define NIIF_NDIS_ISCSI_INTERFACE    0x00000080\n#define NIIF_WAN_TUNNEL_TYPE_UNKNOWN 0xffffffff\n\n#define NET_BUS_NUMBER_UNKNOWN      0xffffffff\n#define NET_SLOT_NUMBER_UNKNOWN     0xffffffff\n#define NET_FUNCTION_NUMBER_UNKNOWN 0xffffffff\n\n#define IF_MAX_STRING_SIZE 256\n#define IF_MAX_PHYS_ADDRESS_LENGTH 32\n\ntypedef enum _NET_IF_ADMIN_STATUS {\n    NET_IF_ADMIN_STATUS_UP      = 1,\n    NET_IF_ADMIN_STATUS_DOWN    = 2,\n    NET_IF_ADMIN_STATUS_TESTING = 3\n} NET_IF_ADMIN_STATUS, *PNET_IF_ADMIN_STATUS;\n\ntypedef enum _NET_IF_OPER_STATUS {\n    NET_IF_OPER_STATUS_UP               = 1,\n    NET_IF_OPER_STATUS_DOWN             = 2,\n    NET_IF_OPER_STATUS_TESTING          = 3,\n    NET_IF_OPER_STATUS_UNKNOWN          = 4,\n    NET_IF_OPER_STATUS_DORMANT          = 5,\n    NET_IF_OPER_STATUS_NOT_PRESENT      = 6,\n    NET_IF_OPER_STATUS_LOWER_LAYER_DOWN = 7\n} NET_IF_OPER_STATUS, *PNET_IF_OPER_STATUS;\n\ntypedef enum _NET_IF_RCV_ADDRESS_TYPE {\n    NET_IF_RCV_ADDRESS_TYPE_OTHER        = 1,\n    NET_IF_RCV_ADDRESS_TYPE_VOLATILE     = 2,\n    NET_IF_RCV_ADDRESS_TYPE_NON_VOLATILE = 3\n} NET_IF_RCV_ADDRESS_TYPE, *PNET_IF_RCV_ADDRESS_TYPE;\n\ntypedef struct _NET_IF_RCV_ADDRESS_LH {\n    NET_IF_RCV_ADDRESS_TYPE ifRcvAddressType;\n    USHORT                  ifRcvAddressLength;\n    USHORT                  ifRcvAddressOffset;\n} NET_IF_RCV_ADDRESS_LH, *PNET_IF_RCV_ADDRESS_LH;\ntypedef NET_IF_RCV_ADDRESS_LH NET_IF_RCV_ADDRESS;\ntypedef NET_IF_RCV_ADDRESS_LH  *PNET_IF_RCV_ADDRESS;\n\ntypedef union _NET_LUID_LH {\n    ULONG64 Value;\n    struct {\n        ULONG64 Reserved : 24;\n        ULONG64 NetLuidIndex : 24;\n        ULONG64 IfType : 16;\n    } Info;\n} NET_LUID_LH, *PNET_LUID_LH;\ntypedef NET_LUID_LH NET_LUID;\ntypedef NET_LUID *PNET_LUID;\ntypedef NET_LUID IF_LUID;\ntypedef NET_LUID *PIF_LUID;\n\ntypedef enum _NET_IF_ACCESS_TYPE {\n    NET_IF_ACCESS_LOOPBACK             = 1,\n    NET_IF_ACCESS_BROADCAST            = 2,\n    NET_IF_ACCESS_POINT_TO_POINT       = 2,\n    NET_IF_ACCESS_POINT_TO_MULTI_POINT = 4,\n    NET_IF_ACCESS_MAXIMUM              = 5\n} NET_IF_ACCESS_TYPE, *PNET_IF_ACCESS_TYPE;\n\ntypedef enum _NET_IF_DIRECTION_TYPE {\n    NET_IF_DIRECTION_SENDRECEIVE = 0,\n    NET_IF_DIRECTION_SENDONLY    = 1,\n    NET_IF_DIRECTION_RECEIVEONLY = 2,\n    NET_IF_DIRECTION_MAXIMUM     = 3\n} NET_IF_DIRECTION_TYPE, *PNET_IF_DIRECTION_TYPE;\n\ntypedef enum _NET_IF_CONNECTION_TYPE {\n    NET_IF_CONNECTION_DEDICATED = 1,\n    NET_IF_CONNECTION_PASSIVE   = 2,\n    NET_IF_CONNECTION_DEMAND    = 3,\n    NET_IF_CONNECTION_MAXIMUM   = 4,\n} NET_IF_CONNECTION_TYPE, *PNET_IF_CONNECTION_TYPE;\n\ntypedef enum _NET_IF_MEDIA_CONNECT_STATE {\n    MediaConnectStateUnknown      = 0,\n    MediaConnectStateConnected    = 1,\n    MediaConnectStateDisconnected = 2\n} NET_IF_MEDIA_CONNECT_STATE, *PNET_IF_MEDIA_CONNECT_STATE;\n\ntypedef enum _NET_IF_MEDIA_DUPLEX_STATE {\n    MediaDuplexStateUnknown = 0,\n    MediaDuplexStateHalf    = 1,\n    MediaDuplexStateFull    = 2\n} NET_IF_MEDIA_DUPLEX_STATE, *PNET_IF_MEDIA_DUPLEX_STATE;\n\ntypedef struct _NET_PHYSICAL_LOCATION_LH {\n    ULONG BusNumber;\n    ULONG SlotNumber;\n    ULONG FunctionNumber;\n} NET_PHYSICAL_LOCATION_LH, *PNET_PHYSICAL_LOCATION_LH;\ntypedef NET_PHYSICAL_LOCATION_LH NET_PHYSICAL_LOCATION;\ntypedef NET_PHYSICAL_LOCATION *PNET_PHYSICAL_LOCATION;\n\ntypedef struct _IF_COUNTED_STRING_LH {\n    USHORT Length;\n    WCHAR  String[IF_MAX_STRING_SIZE + 1];\n} IF_COUNTED_STRING_LH, *PIF_COUNTED_STRING_LH;\ntypedef IF_COUNTED_STRING_LH IF_COUNTED_STRING;\ntypedef IF_COUNTED_STRING *PIF_COUNTED_STRING;\n\ntypedef struct _IF_PHYSICAL_ADDRESS_LH {\n    USHORT Length;\n    UCHAR  Address[IF_MAX_PHYS_ADDRESS_LENGTH];\n} IF_PHYSICAL_ADDRESS_LH, *PIF_PHYSICAL_ADDRESS_LH;\ntypedef IF_PHYSICAL_ADDRESS_LH IF_PHYSICAL_ADDRESS;\ntypedef IF_PHYSICAL_ADDRESS *PIF_PHYSICAL_ADDRESS;\n\ntypedef enum {\n    TUNNEL_TYPE_NONE    = 0,\n    TUNNEL_TYPE_OTHER   = 1,\n    TUNNEL_TYPE_DIRECT  = 2,\n    TUNNEL_TYPE_6TO4    = 11,\n    TUNNEL_TYPE_ISATAP  = 13,\n    TUNNEL_TYPE_TEREDO  = 14,\n    TUNNEL_TYPE_IPHTTPS = 15,\n} TUNNEL_TYPE;\n\ntypedef enum _IF_ADMINISTRATIVE_STATE {\n    IF_ADMINISTRATIVE_STATE_DISABLED   = 0,\n    IF_ADMINISTRATIVE_STATE_ENABLED    = 1,\n    IF_ADMINISTRATIVE_STATE_DEMANDDIAL = 2\n} IF_ADMINISTRATIVE_STATE, *PIF_ADMINISTRATIVE_STATE;\n\ntypedef enum {\n    IfOperStatusUp = 1,\n    IfOperStatusDown,\n    IfOperStatusTesting,\n    IfOperStatusUnknown,\n    IfOperStatusDormant,\n    IfOperStatusNotPresent,\n    IfOperStatusLowerLayerDown\n} IF_OPER_STATUS;\n\ntypedef struct _NDIS_INTERFACE_INFORMATION {\n    NET_IF_OPER_STATUS         ifOperStatus;\n    ULONG                      ifOperStatusFlags;\n    NET_IF_MEDIA_CONNECT_STATE MediaConnectState;\n    NET_IF_MEDIA_DUPLEX_STATE  MediaDuplexState;\n    ULONG                      ifMtu;\n    BOOLEAN                    ifPromiscuousMode;\n    BOOLEAN                    ifDeviceWakeUpEnable;\n    ULONG64                    XmitLinkSpeed;\n    ULONG64                    RcvLinkSpeed;\n    ULONG64                    ifLastChange;\n    ULONG64                    ifCounterDiscontinuityTime;\n    ULONG64                    ifInUnknownProtos;\n    ULONG64                    ifInDiscards;\n    ULONG64                    ifInErrors;\n    ULONG64                    ifHCInOctets;\n    ULONG64                    ifHCInUcastPkts;\n    ULONG64                    ifHCInMulticastPkts;\n    ULONG64                    ifHCInBroadcastPkts;\n    ULONG64                    ifHCOutOctets;\n    ULONG64                    ifHCOutUcastPkts;\n    ULONG64                    ifHCOutMulticastPkts;\n    ULONG64                    ifHCOutBroadcastPkts;\n    ULONG64                    ifOutErrors;\n    ULONG64                    ifOutDiscards;\n    ULONG64                    ifHCInUcastOctets;\n    ULONG64                    ifHCInMulticastOctets;\n    ULONG64                    ifHCInBroadcastOctets;\n    ULONG64                    ifHCOutUcastOctets;\n    ULONG64                    ifHCOutMulticastOctets;\n    ULONG64                    ifHCOutBroadcastOctets;\n    NET_IF_COMPARTMENT_ID      CompartmentId;\n    ULONG                      SupportedStatistics;\n} NDIS_INTERFACE_INFORMATION, *PNDIS_INTERFACE_INFORMATION;\n\n#endif /* WINE_IFDEF_H*/\n"
  },
  {
    "path": "wine/windows/ifmib.h",
    "content": "/*\n * Copyright (C) 2003 Juan Lang\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __WINE_IFMIB_H\n#define __WINE_IFMIB_H\n\n#include <ifdef.h>\n\ntypedef struct _MIB_IFNUMBER\n{\n    DWORD dwValue;\n} MIB_IFNUMBER, *PMIB_IFNUMBER;\n\n\n/* Interface table */\n\n#define MAX_INTERFACE_NAME_LEN 256\n#define MAXLEN_PHYSADDR 8\n#define MAXLEN_IFDESCR 256\n\ntypedef struct _MIB_IFROW\n{\n    WCHAR wszName[MAX_INTERFACE_NAME_LEN];\n    DWORD dwIndex;\n    DWORD dwType;\n    DWORD dwMtu;\n    DWORD dwSpeed;\n    DWORD dwPhysAddrLen;\n    UCHAR bPhysAddr[MAXLEN_PHYSADDR];\n    DWORD dwAdminStatus;\n    INTERNAL_IF_OPER_STATUS dwOperStatus;\n    DWORD dwLastChange;\n    DWORD dwInOctets;\n    DWORD dwInUcastPkts;\n    DWORD dwInNUcastPkts;\n    DWORD dwInDiscards;\n    DWORD dwInErrors;\n    DWORD dwInUnknownProtos;\n    DWORD dwOutOctets;\n    DWORD dwOutUcastPkts;\n    DWORD dwOutNUcastPkts;\n    DWORD dwOutDiscards;\n    DWORD dwOutErrors;\n    DWORD dwOutQLen;\n    DWORD dwDescrLen;\n    BYTE  bDescr[MAXLEN_IFDESCR];\n} MIB_IFROW, *PMIB_IFROW;\n\ntypedef struct _MIB_IFTABLE\n{\n    DWORD     dwNumEntries;\n    MIB_IFROW table[1];\n} MIB_IFTABLE, *PMIB_IFTABLE;\n\n\n#endif /* __WINE_IFMIB_H */\n"
  },
  {
    "path": "wine/windows/iimgctx.idl",
    "content": "/*\n * Copyright 2015 Nikolay Sivov for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\n\ncpp_quote(\"#define IMGCHG_SIZE     0x0001\")\ncpp_quote(\"#define IMGCHG_VIEW     0x0002\")\ncpp_quote(\"#define IMGCHG_COMPLETE 0x0004\")\ncpp_quote(\"#define IMGCHG_ANIMATE  0x0008\")\ncpp_quote(\"#define IMGCHG_MASK     0x000f\")\n\ncpp_quote(\"#define IMGLOAD_NOTLOADED 0x00100000\")\ncpp_quote(\"#define IMGLOAD_LOADING   0x00200000\")\ncpp_quote(\"#define IMGLOAD_STOPPED   0x00400000\")\ncpp_quote(\"#define IMGLOAD_ERROR     0x00800000\")\ncpp_quote(\"#define IMGLOAD_COMPLETE  0x01000000\")\ncpp_quote(\"#define IMGLOAD_MASK      0x01f00000\")\n\ncpp_quote(\"#define IMGBITS_NONE      0x02000000\")\ncpp_quote(\"#define IMGBITS_PARTIAL   0x04000000\")\ncpp_quote(\"#define IMGBITS_TOTAL     0x08000000\")\ncpp_quote(\"#define IMGBITS_MASK      0x0e000000\")\n\ncpp_quote(\"#define IMGANIM_ANIMATED  0x10000000\")\ncpp_quote(\"#define IMGANIM_MASK      0x10000000\")\n\ncpp_quote(\"#define IMGTRANS_OPAQUE   0x20000000\")\ncpp_quote(\"#define IMGTRANS_MASK     0x20000000\")\n\ncpp_quote(\"#define DWN_COLORMODE     0x0000003f\")\ncpp_quote(\"#define DWN_DOWNLOADONLY  0x00000040\")\ncpp_quote(\"#define DWN_FORCEDITHER   0x00000080\")\ncpp_quote(\"#define DWN_RAWIMAGE      0x00000100\")\ncpp_quote(\"#define DWN_MIRRORIMAGE   0x00000200\")\n\ntypedef void (__stdcall *PFNIMGCTXCALLBACK)(void *, void *);\n\n[\n    local,\n    object,\n    uuid(3050f3d7-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IImgCtx : IUnknown\n{\n    HRESULT Load(LPCWSTR url, DWORD flags);\n    HRESULT SelectChanges(ULONG changeon, ULONG changeoff, BOOL signal);\n    HRESULT SetCallback(PFNIMGCTXCALLBACK fn, void *priv);\n    HRESULT Disconnect();\n    HRESULT GetUpdateRects(RECT *rect, RECT *img, LONG *pcrc);\n    HRESULT GetStateInfo(ULONG *state, SIZE *size, BOOL clear_changes);\n    HRESULT GetPalette(HPALETTE *hpal);\n    HRESULT Draw(HDC hdc, RECT *bounds);\n    HRESULT Tile(HDC hdc, POINT *backorg, RECT *clip, SIZE *size);\n    HRESULT StretchBlt(HDC hdc, int dstX, int dstY, int dstXE, int dstYE, int srcX, int srcY, int srcXE, int srcYE, DWORD rop);\n}\n"
  },
  {
    "path": "wine/windows/imagehlp.h",
    "content": "/*\n * Declarations for IMAGEHLP\n *\n * Copyright (C) 1998 Patrik Stridvall\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_IMAGEHLP_H\n#define __WINE_IMAGEHLP_H\n\n#include <wintrust.h>\n\n/* A set of documentation macros (see also dbghelp.h) */\n#ifndef __deref_out\n# define __deref_out\n#endif\n#ifndef __deref_out_opt\n# define __deref_out_opt\n#endif\n#ifndef __deref_opt_out\n# define __deref_opt_out\n#endif\n#ifndef __in\n# define __in\n#endif\n#ifndef __in_opt\n# define __in_opt\n#endif\n#ifndef __in_bcount\n# define __in_bcount(x)\n#endif\n#ifndef __in_bcount_opt\n# define __in_bcount_opt(x)\n#endif\n#ifndef __in_ecount\n# define __in_ecount(x)\n#endif\n#ifndef __inout\n# define __inout\n#endif\n#ifndef __inout_opt\n# define __inout_opt\n#endif\n#ifndef __inout_bcount\n# define __inout_bcount(x)\n#endif\n#ifndef __inout_ecount\n# define __inout_ecount(x)\n#endif\n#ifndef __out\n# define __out\n#endif\n#ifndef __out_opt\n# define __out_opt\n#endif\n#ifndef __out_bcount\n# define __out_bcount(x)\n#endif\n#ifndef __out_bcount_opt\n# define __out_bcount_opt(x)\n#endif\n#ifndef __out_ecount\n# define __out_ecount(x)\n#endif\n#ifndef __out_ecount_opt\n# define __out_ecount_opt(x)\n#endif\n#ifndef __out_xcount\n# define __out_xcount(x)\n#endif\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n#define IMAGEAPI WINAPI\n#define DBHLPAPI IMAGEAPI\n\n#define API_VERSION_NUMBER 7 \t\t/* 7 is the default */\n\n/***********************************************************************\n * Types\n */\n\ntypedef PVOID DIGEST_HANDLE;\n\n/***********************************************************************\n * Enums/Defines\n */\n\ntypedef enum _IMAGEHLP_STATUS_REASON {\n  BindOutOfMemory,\n  BindRvaToVaFailed,\n  BindNoRoomInImage,\n  BindImportModuleFailed,\n  BindImportProcedureFailed,\n  BindImportModule,\n  BindImportProcedure,\n  BindForwarder,\n  BindForwarderNOT,\n  BindImageModified,\n  BindExpandFileHeaders,\n  BindImageComplete,\n  BindMismatchedSymbols,\n  BindSymbolsNotUpdated\n} IMAGEHLP_STATUS_REASON;\n\n#define BIND_NO_BOUND_IMPORTS  0x00000001\n#define BIND_NO_UPDATE         0x00000002\n#define BIND_ALL_IMAGES        0x00000004\n#define BIND_CACHE_IMPORT_DLLS 0x00000008\n\n#define CERT_PE_IMAGE_DIGEST_DEBUG_INFO      0x01\n#define CERT_PE_IMAGE_DIGEST_RESOURCES       0x02\n#define CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO 0x04\n#define CERT_PE_IMAGE_DIGEST_NON_PE_INFO     0x08\n\n#define CERT_SECTION_TYPE_ANY 0xFF\n\n#define SPLITSYM_REMOVE_PRIVATE    0x00000001\n#define SPLITSYM_EXTRACT_ALL       0x00000002\n#define SPLITSYM_SYMBOLPATH_IS_SRC 0x00000004\n\n#define FRAME_FPO    0\n#define FRAME_TRAP   1\n#define FRAME_TSS    2\n#define FRAME_NONFPO 3\n\n#define CHECKSUM_SUCCESS         0\n#define CHECKSUM_OPEN_FAILURE    1\n#define CHECKSUM_MAP_FAILURE     2\n#define CHECKSUM_MAPVIEW_FAILURE 3\n#define CHECKSUM_UNICODE_FAILURE 4\n\ntypedef enum _ADDRESS_MODE {\n  AddrMode1616,\n  AddrMode1632,\n  AddrModeReal,\n  AddrModeFlat\n} ADDRESS_MODE;\n\n#define SYMOPT_CASE_INSENSITIVE  0x00000001\n#define SYMOPT_UNDNAME           0x00000002\n#define SYMOPT_DEFERRED_LOADS    0x00000004\n#define SYMOPT_NO_CPP            0x00000008\n#define SYMOPT_LOAD_LINES        0x00000010\n#define SYMOPT_OMAP_FIND_NEAREST 0x00000020\n\n#define SYMF_OMAP_GENERATED   0x00000001\n#define SYMF_OMAP_MODIFIED    0x00000002\n/* 0x00000004 has been obsoleted */\n#define SYMF_REGISTER         0x00000008\n#define SYMF_REGREL           0x00000010\n#define SYMF_FRAMEREL         0x00000020\n#define SYMF_PARAMETER        0x00000040\n#define SYMF_LOCAL            0x00000080\n#define SYMF_CONSTANT         0x00000100\n#define SYMF_EXPORT           0x00000200\n#define SYMF_FORWARDER        0x00000400\n#define SYMF_FUNCTION         0x00000800\n\ntypedef enum {\n  SymNone,\n  SymCoff,\n  SymCv,\n  SymPdb,\n  SymExport,\n  SymDeferred,\n  SymSym,\n  SymDia,\n  SymVirtual,\n  NumSymTypes\n} SYM_TYPE;\n\n#define UNDNAME_COMPLETE               0x0000\n#define UNDNAME_NO_LEADING_UNDERSCORES 0x0001\n#define UNDNAME_NO_MS_KEYWORDS         0x0002\n#define UNDNAME_NO_FUNCTION_RETURNS    0x0004\n#define UNDNAME_NO_ALLOCATION_MODEL    0x0008\n#define UNDNAME_NO_ALLOCATION_LANGUAGE 0x0010\n#define UNDNAME_NO_MS_THISTYPE         0x0020\n#define UNDNAME_NO_CV_THISTYPE         0x0040\n#define UNDNAME_NO_THISTYPE            0x0060\n#define UNDNAME_NO_ACCESS_SPECIFIERS   0x0080\n#define UNDNAME_NO_THROW_SIGNATURES    0x0100\n#define UNDNAME_NO_MEMBER_TYPE         0x0200\n#define UNDNAME_NO_RETURN_UDT_MODEL    0x0400\n#define UNDNAME_32_BIT_DECODE          0x0800\n#define UNDNAME_NAME_ONLY              0x1000\n#define UNDNAME_NO_ARGUMENTS           0x2000\n#define UNDNAME_NO_SPECIAL_SYMS        0x4000\n\n#define CBA_DEFERRED_SYMBOL_LOAD_START          0x00000001\n#define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE       0x00000002\n#define CBA_DEFERRED_SYMBOL_LOAD_FAILURE        0x00000003\n#define CBA_SYMBOLS_UNLOADED                    0x00000004\n#define CBA_DUPLICATE_SYMBOL                    0x00000005\n\n/***********************************************************************\n * Structures\n */\n\ntypedef struct _LOADED_IMAGE\n{\n    PSTR                        ModuleName;\n    HANDLE                      hFile;\n    PUCHAR                      MappedAddress;\n    PIMAGE_NT_HEADERS           FileHeader;\n    PIMAGE_SECTION_HEADER       LastRvaSection;\n    ULONG                       NumberOfSections;\n    PIMAGE_SECTION_HEADER       Sections;\n    ULONG                       Characteristics;\n    BOOLEAN                     fSystemImage;\n    BOOLEAN                     fDOSImage;\n    BOOLEAN                     fReadOnly;\n    UCHAR                       Version;\n    LIST_ENTRY                  Links;\n    ULONG                       SizeOfImage;\n} LOADED_IMAGE, *PLOADED_IMAGE;\n\ntypedef struct _API_VERSION {\n  USHORT  MajorVersion;\n  USHORT  MinorVersion;\n  USHORT  Revision;\n  USHORT  Reserved;\n} API_VERSION, *LPAPI_VERSION;\n\ntypedef struct _IMAGE_DEBUG_INFORMATION {\n  LIST_ENTRY List;\n  DWORD        Size;\n  PVOID        MappedBase;\n  USHORT       Machine;\n  USHORT       Characteristics;\n  DWORD        CheckSum;\n  DWORD        ImageBase;\n  DWORD        SizeOfImage;\n\n  DWORD NumberOfSections;\n  PIMAGE_SECTION_HEADER Sections;\n\n  DWORD ExportedNamesSize;\n  PSTR ExportedNames;\n\n  DWORD NumberOfFunctionTableEntries;\n  PIMAGE_FUNCTION_ENTRY FunctionTableEntries;\n  DWORD LowestFunctionStartingAddress;\n  DWORD HighestFunctionEndingAddress;\n\n  DWORD NumberOfFpoTableEntries;\n  PFPO_DATA FpoTableEntries;\n\n  DWORD SizeOfCoffSymbols;\n  PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols;\n\n  DWORD SizeOfCodeViewSymbols;\n  PVOID CodeViewSymbols;\n\n  PSTR ImageFilePath;\n  PSTR ImageFileName;\n  PSTR DebugFilePath;\n\n  DWORD TimeDateStamp;\n\n  BOOL RomImage;\n  PIMAGE_DEBUG_DIRECTORY DebugDirectory;\n  DWORD  NumberOfDebugDirectories;\n\n  DWORD Reserved[3];\n} IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION;\n\ntypedef struct _ADDRESS {\n    DWORD          Offset;\n    WORD           Segment;\n    ADDRESS_MODE Mode;\n} ADDRESS, *LPADDRESS;\n\ntypedef struct _ADDRESS64 {\n    DWORD64        Offset;\n    WORD           Segment;\n    ADDRESS_MODE   Mode;\n} ADDRESS64, *LPADDRESS64;\n\ntypedef struct _KDHELP {\n  DWORD Thread;\n  DWORD ThCallbackStack;\n  DWORD NextCallback;\n  DWORD FramePointer;\n  DWORD KiCallUserMode;\n  DWORD KeUserCallbackDispatcher;\n  DWORD SystemRangeStart;\n} KDHELP, *PKDHELP;\n\ntypedef struct _KDHELP64 {\n    DWORD64 Thread;\n    DWORD   ThCallbackStack;\n    DWORD   ThCallbackBStore;\n    DWORD   NextCallback;\n    DWORD   FramePointer;\n    DWORD64 KiCallUserMode;\n    DWORD64 KeUserCallbackDispatcher;\n    DWORD64 SystemRangeStart;\n    DWORD64 Reserved[8];\n} KDHELP64, *PKDHELP64;\n\ntypedef struct _STACKFRAME {\n  ADDRESS AddrPC;\n  ADDRESS AddrReturn;\n  ADDRESS AddrFrame;\n  ADDRESS AddrStack;\n  PVOID     FuncTableEntry;\n  DWORD     Params[4];\n  BOOL    Far;\n  BOOL    Virtual;\n  DWORD     Reserved[3];\n  KDHELP  KdHelp;\n} STACKFRAME, *LPSTACKFRAME;\n\ntypedef struct _STACKFRAME64 {\n    ADDRESS64 AddrPC;\n    ADDRESS64 AddrReturn;\n    ADDRESS64 AddrFrame;\n    ADDRESS64 AddrStack;\n    ADDRESS64 AddrBStore;\n    PVOID     FuncTableEntry;\n    DWORD64   Params[4];\n    BOOL      Far;\n    BOOL      Virtual;\n    DWORD64   Reserved[3];\n    KDHELP64  KdHelp;\n} STACKFRAME64, *LPSTACKFRAME64;\n\ntypedef struct _SOURCEFILE {\n    DWORD64                     ModBase;\n    PCHAR                       FileName;\n} SOURCEFILE, *PSOURCEFILE;\n\ntypedef struct _SOURCEFILEW\n{\n    DWORD64                     ModBase;\n    PWSTR                       FileName;\n} SOURCEFILEW, *PSOURCEFILEW;\n\ntypedef struct _IMAGEHLP_STACK_FRAME\n{\n  DWORD InstructionOffset;\n  DWORD ReturnOffset;\n  DWORD FrameOffset;\n  DWORD StackOffset;\n  DWORD BackingStoreOffset;\n  DWORD FuncTableEntry;\n  DWORD Params[4];\n  DWORD Reserved[5];\n  DWORD Virtual;\n  DWORD Reserved2;\n} IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME;\n\ntypedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT;\n\ntypedef struct _IMAGEHLP_SYMBOL {\n  DWORD SizeOfStruct;\n  DWORD Address;\n  DWORD Size;\n  DWORD Flags;\n  DWORD MaxNameLength;\n  CHAR  Name[ANYSIZE_ARRAY];\n} IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL;\n\ntypedef struct _IMAGEHLP_SYMBOLW {\n  DWORD SizeOfStruct;\n  DWORD Address;\n  DWORD Size;\n  DWORD Flags;\n  DWORD MaxNameLength;\n  WCHAR Name[ANYSIZE_ARRAY];\n} IMAGEHLP_SYMBOLW, *PIMAGEHLP_SYMBOLW;\n\ntypedef struct _IMAGEHLP_SYMBOL64\n{\n    DWORD                       SizeOfStruct;\n    DWORD64                     Address;\n    DWORD                       Size;\n    DWORD                       Flags;\n    DWORD                       MaxNameLength;\n    CHAR                        Name[1];\n} IMAGEHLP_SYMBOL64, *PIMAGEHLP_SYMBOL64;\n\ntypedef struct _IMAGEHLP_SYMBOLW64\n{\n    DWORD                       SizeOfStruct;\n    DWORD64                     Address;\n    DWORD                       Size;\n    DWORD                       Flags;\n    DWORD                       MaxNameLength;\n    WCHAR                       Name[1];\n} IMAGEHLP_SYMBOLW64, *PIMAGEHLP_SYMBOLW64;\n\ntypedef struct _IMAGEHLP_MODULE {\n  DWORD      SizeOfStruct;\n  DWORD      BaseOfImage;\n  DWORD      ImageSize;\n  DWORD      TimeDateStamp;\n  DWORD      CheckSum;\n  DWORD      NumSyms;\n  SYM_TYPE   SymType;\n  CHAR       ModuleName[32];\n  CHAR       ImageName[256];\n  CHAR       LoadedImageName[256];\n} IMAGEHLP_MODULE, *PIMAGEHLP_MODULE;\n\ntypedef struct _IMAGEHLP_MODULEW {\n  DWORD      SizeOfStruct;\n  DWORD      BaseOfImage;\n  DWORD      ImageSize;\n  DWORD      TimeDateStamp;\n  DWORD      CheckSum;\n  DWORD      NumSyms;\n  SYM_TYPE   SymType;\n  WCHAR      ModuleName[32];\n  WCHAR      ImageName[256];\n  WCHAR      LoadedImageName[256];\n} IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW;\n\ntypedef struct _IMAGEHLP_MODULE64\n{\n    DWORD                       SizeOfStruct;\n    DWORD64                     BaseOfImage;\n    DWORD                       ImageSize;\n    DWORD                       TimeDateStamp;\n    DWORD                       CheckSum;\n    DWORD                       NumSyms;\n    SYM_TYPE                    SymType;\n    CHAR                        ModuleName[32];\n    CHAR                        ImageName[256];\n    CHAR                        LoadedImageName[256];\n    CHAR                        LoadedPdbName[256];\n    DWORD                       CVSig;\n    CHAR                        CVData[MAX_PATH*3];\n    DWORD                       PdbSig;\n    GUID                        PdbSig70;\n    DWORD                       PdbAge;\n    BOOL                        PdbUnmatched;\n    BOOL                        DbgUnmatched;\n    BOOL                        LineNumbers;\n    BOOL                        GlobalSymbols;\n    BOOL                        TypeInfo;\n    BOOL                        SourceIndexed;\n    BOOL                        Publics;\n} IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64;\n\ntypedef struct _IMAGEHLP_MODULEW64\n{\n    DWORD                       SizeOfStruct;\n    DWORD64                     BaseOfImage;\n    DWORD                       ImageSize;\n    DWORD                       TimeDateStamp;\n    DWORD                       CheckSum;\n    DWORD                       NumSyms;\n    SYM_TYPE                    SymType;\n    WCHAR                       ModuleName[32];\n    WCHAR                       ImageName[256];\n    WCHAR                       LoadedImageName[256];\n    WCHAR                       LoadedPdbName[256];\n    DWORD                       CVSig;\n    WCHAR                       CVData[MAX_PATH*3];\n    DWORD                       PdbSig;\n    GUID                        PdbSig70;\n    DWORD                       PdbAge;\n    BOOL                        PdbUnmatched;\n    BOOL                        DbgUnmatched;\n    BOOL                        LineNumbers;\n    BOOL                        GlobalSymbols;\n    BOOL                        TypeInfo;\n    BOOL                        SourceIndexed;\n    BOOL                        Publics;\n} IMAGEHLP_MODULEW64, *PIMAGEHLP_MODULEW64;\n\ntypedef struct _IMAGEHLP_LINE {\n  DWORD SizeOfStruct;\n  PVOID Key;\n  DWORD LineNumber;\n  PCHAR FileName;\n  DWORD Address;\n} IMAGEHLP_LINE, *PIMAGEHLP_LINE;\n\ntypedef struct _IMAGEHLP_LINEW {\n  DWORD SizeOfStruct;\n  PVOID Key;\n  DWORD LineNumber;\n  PWSTR FileName;\n  DWORD Address;\n} IMAGEHLP_LINEW, *PIMAGEHLP_LINEW;\n\ntypedef struct _IMAGEHLP_LINE64 {\n  DWORD SizeOfStruct;\n  PVOID Key;\n  DWORD LineNumber;\n  PCHAR FileName;\n  DWORD64 Address;\n} IMAGEHLP_LINE64, *PIMAGEHLP_LINE64;\n\ntypedef struct _IMAGEHLP_LINEW64 {\n  DWORD SizeOfStruct;\n  PVOID Key;\n  DWORD LineNumber;\n  PWSTR FileName;\n  DWORD64 Address;\n} IMAGEHLP_LINEW64, *PIMAGEHLP_LINEW64;\n\ntypedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD {\n  DWORD   SizeOfStruct;\n  DWORD   BaseOfImage;\n  DWORD   CheckSum;\n  DWORD   TimeDateStamp;\n  CHAR    FileName[MAX_PATH];\n  BOOLEAN Reparse;\n} IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD;\n\ntypedef struct _IMAGEHLP_DUPLICATE_SYMBOL {\n  DWORD              SizeOfStruct;\n  DWORD              NumberOfDups;\n  PIMAGEHLP_SYMBOL Symbol;\n  ULONG              SelectedSymbol;\n} IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL;\n\ntypedef enum _IMAGEHLP_SYMBOL_TYPE_INFO\n{\n    TI_GET_SYMTAG,\n    TI_GET_SYMNAME,\n    TI_GET_LENGTH,\n    TI_GET_TYPE,\n    TI_GET_TYPEID,\n    TI_GET_BASETYPE,\n    TI_GET_ARRAYINDEXTYPEID,\n    TI_FINDCHILDREN,\n    TI_GET_DATAKIND,\n    TI_GET_ADDRESSOFFSET,\n    TI_GET_OFFSET,\n    TI_GET_VALUE,\n    TI_GET_COUNT,\n    TI_GET_CHILDRENCOUNT,\n    TI_GET_BITPOSITION,\n    TI_GET_VIRTUALBASECLASS,\n    TI_GET_VIRTUALTABLESHAPEID,\n    TI_GET_VIRTUALBASEPOINTEROFFSET,\n    TI_GET_CLASSPARENTID,\n    TI_GET_NESTED,\n    TI_GET_SYMINDEX,\n    TI_GET_LEXICALPARENT,\n    TI_GET_ADDRESS,\n    TI_GET_THISADJUST,\n    TI_GET_UDTKIND,\n    TI_IS_EQUIV_TO,\n    TI_GET_CALLING_CONVENTION,\n} IMAGEHLP_SYMBOL_TYPE_INFO;\n\n#define IMAGEHLP_GET_TYPE_INFO_UNCACHED            0x00000001\n#define IMAGEHLP_GET_TYPE_INFO_CHILDREN            0x00000002\ntypedef struct _IMAGEHLP_GET_TYPE_INFO_PARAMS\n{\n    ULONG       SizeOfStruct;\n    ULONG       Flags;\n    ULONG       NumIds;\n    PULONG      TypeIds;\n    ULONG64     TagFilter;\n    ULONG       NumReqs;\n    IMAGEHLP_SYMBOL_TYPE_INFO* ReqKinds;\n    PULONG_PTR  ReqOffsets;\n    PULONG      ReqSizes;\n    ULONG_PTR   ReqStride;\n    ULONG_PTR   BufferSize;\n    PVOID       Buffer;\n    ULONG       EntriesMatched;\n    ULONG       EntriesFilled;\n    ULONG64     TagsFound;\n    ULONG64     AllReqsValid;\n    ULONG       NumReqsValid;\n    PULONG64    ReqsValid;\n} IMAGEHLP_GET_TYPE_INFO_PARAMS, *PIMAGEHLP_GET_TYPE_INFO_PARAMS;\n\n#define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT          1\n#define IMAGEHLP_SYMBOL_INFO_REGISTER              SYMF_REGISTER\n#define IMAGEHLP_SYMBOL_INFO_REGRELATIVE           SYMF_REGREL\n#define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE         SYMF_FRAMEREL\n#define IMAGEHLP_SYMBOL_INFO_PARAMETER             SYMF_PARAMETER\n#define IMAGEHLP_SYMBOL_INFO_LOCAL                 SYMF_LOCAL\n#define IMAGEHLP_SYMBOL_INFO_CONSTANT              SYMF_CONSTANT\n#define IMAGEHLP_SYMBOL_FUNCTION                   SYMF_FUNCTION\n\n#define MAX_SYM_NAME                               2000\n\ntypedef struct _SYMBOL_INFO {\n    ULONG       SizeOfStruct;\n    ULONG       TypeIndex;\n    ULONG64     Reserved[2];\n    ULONG       info;\n    ULONG       Size;\n    ULONG64     ModBase;\n    ULONG       Flags;\n    ULONG64     Value;\n    ULONG64     Address;\n    ULONG       Register;\n    ULONG       Scope;\n    ULONG       Tag;\n    ULONG       NameLen;\n    ULONG       MaxNameLen;\n    CHAR        Name[1];\n} SYMBOL_INFO, *PSYMBOL_INFO;\n\ntypedef struct _SYMBOL_INFOW\n{\n    ULONG       SizeOfStruct;\n    ULONG       TypeIndex;\n    ULONG64     Reserved[2];\n    ULONG       Index;\n    ULONG       Size;\n    ULONG64     ModBase;\n    ULONG       Flags;\n    ULONG64     Value;\n    ULONG64     Address;\n    ULONG       Register;\n    ULONG       Scope;\n    ULONG       Tag;\n    ULONG       NameLen;\n    ULONG       MaxNameLen;\n    WCHAR       Name[1];\n} SYMBOL_INFOW, *PSYMBOL_INFOW;\n\ntypedef struct _SYMBOL_INFO_PACKAGE\n{\n    SYMBOL_INFO si;\n    CHAR        name[MAX_SYM_NAME+1];\n} SYMBOL_INFO_PACKAGE, *PSYMBOL_INFO_PACKAGE;\n\ntypedef struct _SYMBOL_INFO_PACKAGEW\n{\n    SYMBOL_INFOW si;\n    WCHAR        name[MAX_SYM_NAME+1];\n} SYMBOL_INFO_PACKAGEW, *PSYMBOL_INFO_PACKAGEW;\n\n#define DBHHEADER_DEBUGDIRS     0x1\ntypedef struct _MODLOAD_DATA\n{\n    DWORD               ssize;\n    DWORD               ssig;\n    PVOID               data;\n    DWORD               size;\n    DWORD               flags;\n} MODLOAD_DATA, *PMODLOAD_DATA;\n\ntypedef struct _SRCCODEINFO\n{\n    DWORD       SizeOfStruct;\n    PVOID       Key;\n    DWORD64     ModBase;\n    CHAR        Obj[MAX_PATH+1];\n    CHAR        FileName[MAX_PATH+1];\n    DWORD       LineNumber;\n    DWORD64     Address;\n} SRCCODEINFO, *PSRCCODEINFO;\n\ntypedef struct _SRCCODEINFOW\n{\n    DWORD       SizeOfStruct;\n    PVOID       Key;\n    DWORD64     ModBase;\n    WCHAR       Obj[MAX_PATH+1];\n    WCHAR       FileName[MAX_PATH+1];\n    DWORD       LineNumber;\n    DWORD64     Address;\n} SRCCODEINFOW, *PSRCCODEINFOW;\n\n/***********************************************************************\n * Callbacks\n */\n\ntypedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACK)(\n  PCSTR, PVOID\n);\ntypedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACKW)(\n  PCWSTR, PVOID\n);\n\ntypedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(\n  PCSTR ModuleName, ULONG ModuleBase, ULONG ModuleSize,\n  PVOID UserContext\n);\ntypedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK64)(\n  PCSTR, DWORD64, ULONG, PVOID\n);\ntypedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACKW64)(\n  PCWSTR, DWORD64, ULONG, PVOID\n);\n\ntypedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(\n  HANDLE, PCSTR, PVOID\n);\ntypedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACKW)(\n  HANDLE, PCWSTR, PVOID\n);\n\ntypedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACK)(\n  HANDLE, PCSTR, PVOID\n);\ntypedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACKW)(\n  HANDLE, PCWSTR, PVOID\n);\n\ntypedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACK)(\n  PCSTR, PVOID\n);\ntypedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACKW)(\n  PCWSTR, PVOID\n);\n\ntypedef BOOL (CALLBACK *PIMAGEHLP_STATUS_ROUTINE)(\n  IMAGEHLP_STATUS_REASON Reason, PCSTR ImageName, PCSTR DllName,\n  ULONG_PTR Va, ULONG_PTR Parameter\n);\ntypedef BOOL (CALLBACK *PIMAGEHLP_STATUS_ROUTINE32)(\n  IMAGEHLP_STATUS_REASON Reason, PCSTR ImageName, PCSTR DllName,\n  ULONG Va, ULONG_PTR Parameter\n);\ntypedef BOOL (CALLBACK *PIMAGEHLP_STATUS_ROUTINE64)(\n  IMAGEHLP_STATUS_REASON Reason, PCSTR ImageName, PCSTR DllName,\n  ULONG64 Va, ULONG_PTR Parameter\n);\n\ntypedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(\n  PSYMBOL_INFO pSymInfo, ULONG SymbolSize, PVOID UserContext\n);\ntypedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACKW)(\n  PSYMBOL_INFOW pSymInfo, ULONG SymbolSize, PVOID UserContext\n);\n\ntypedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACK)(\n  PSRCCODEINFO, PVOID\n);\ntypedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACKW)(\n  PSRCCODEINFOW, PVOID\n);\n\ntypedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACK)(\n  PSOURCEFILE pSourceFile, PVOID UserContext\n);\ntypedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACKW)(\n  PSOURCEFILEW pSourceFile, PVOID UserContext\n);\n\ntypedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(\n  PCSTR ModuleName, ULONG BaseOfDll, PVOID UserContext\n);\ntypedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK64)(\n  PCSTR, DWORD64, PVOID\n);\ntypedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACKW64)(\n  PCWSTR, DWORD64, PVOID\n);\n\ntypedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(\n  PCSTR, ULONG, ULONG, PVOID\n);\ntypedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)(\n  PCWSTR, ULONG, ULONG, PVOID\n);\ntypedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)(\n  PCSTR, DWORD64, ULONG, PVOID\n);\ntypedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)(\n  PCWSTR, DWORD64, ULONG, PVOID\n);\n\ntypedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)(\n  HANDLE, DWORD, PVOID\n);\ntypedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)(\n  HANDLE, ULONG64, ULONG64\n);\n\ntypedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(\n  HANDLE hProcess, ULONG ActionCode, PVOID CallbackData,\n  PVOID UserContext\n);\ntypedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)(\n  HANDLE, ULONG, ULONG64, ULONG64\n);\n\ntypedef BOOL (CALLBACK *DIGEST_FUNCTION)(\n  DIGEST_HANDLE refdata, PBYTE pData, DWORD dwLength\n);\n\ntypedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE)(\n  HANDLE  hProcess, DWORD lpBaseAddress, PVOID lpBuffer,\n  DWORD nSize, PDWORD lpNumberOfBytesRead\n);\n\ntypedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE64)(\n  HANDLE  hProcess, DWORD64 lpBaseAddress, PVOID lpBuffer,\n  DWORD nSize, LPDWORD lpNumberOfBytesRead\n);\n\ntypedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE)(\n  HANDLE hProcess, DWORD AddrBase\n);\n\ntypedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE64)(\n  HANDLE hProcess, DWORD64 AddrBase\n);\n\ntypedef DWORD (CALLBACK *PGET_MODULE_BASE_ROUTINE)(\n  HANDLE hProcess, DWORD ReturnAddress);\n\ntypedef DWORD (CALLBACK *PGET_MODULE_BASE_ROUTINE64)(\n  HANDLE hProcess, DWORD64 ReturnAddress);\n\ntypedef DWORD (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE)(\n  HANDLE hProcess, HANDLE hThread, LPADDRESS lpaddr\n);\n\ntypedef DWORD (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE64)(\n  HANDLE hProcess, HANDLE hThread, LPADDRESS64 lpaddr\n);\n\n\n/***********************************************************************\n * Functions\n */\n\nBOOL WINAPI BindImage(\n  PCSTR ImageName, PCSTR DllPath, PCSTR SymbolPath\n);\nBOOL WINAPI BindImageEx(\n  DWORD Flags, PCSTR ImageName, PCSTR DllPath, PCSTR SymbolPath,\n  PIMAGEHLP_STATUS_ROUTINE StatusRoutine\n);\nPIMAGE_NT_HEADERS WINAPI CheckSumMappedFile(\n  LPVOID BaseAddress, DWORD FileLength,\n  LPDWORD HeaderSum, LPDWORD CheckSum\n);\nBOOL WINAPI EnumDirTree(\n  HANDLE, PCSTR, PCSTR, PSTR, PENUMDIRTREE_CALLBACK, PVOID\n);\nBOOL WINAPI EnumDirTreeW(\n  HANDLE, PCWSTR, PCWSTR, PWSTR, PENUMDIRTREE_CALLBACKW, PVOID\n);\nBOOL WINAPI EnumerateLoadedModules(\n  HANDLE hProcess,\n  PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback,\n  PVOID UserContext\n);\nBOOL WINAPI EnumerateLoadedModules64(\n  HANDLE, PENUMLOADED_MODULES_CALLBACK64, PVOID\n);\nBOOL WINAPI EnumerateLoadedModulesW64(\n  HANDLE, PENUMLOADED_MODULES_CALLBACKW64, PVOID\n);\nHANDLE WINAPI FindDebugInfoFile(\n  PCSTR FileName, PCSTR SymbolPath, PSTR DebugFilePath\n);\nHANDLE WINAPI FindDebugInfoFileEx(\n  PCSTR, PCSTR, PSTR, PFIND_DEBUG_FILE_CALLBACK, PVOID\n);\nHANDLE WINAPI FindDebugInfoFileExW(\n  PCWSTR, PCWSTR, PWSTR, PFIND_DEBUG_FILE_CALLBACKW, PVOID\n);\nHANDLE WINAPI FindExecutableImage(\n  PCSTR, PCSTR, PSTR\n);\nHANDLE WINAPI FindExecutableImageEx(\n  PCSTR, PCSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID\n);\nHANDLE WINAPI FindExecutableImageExW(\n  PCWSTR, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID\n);\nBOOL WINAPI FindFileInPath(\n  HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD,\n  PSTR, PFINDFILEINPATHCALLBACK, PVOID\n);\nBOOL WINAPI GetImageConfigInformation(\n  PLOADED_IMAGE LoadedImage,\n  PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation\n);\nDWORD WINAPI GetImageUnusedHeaderBytes(\n  PLOADED_IMAGE LoadedImage,\n  LPDWORD SizeUnusedHeaderBytes\n);\nDWORD WINAPI GetTimestampForLoadedLibrary(\n  HMODULE Module\n);\nBOOL WINAPI ImageAddCertificate(\n  HANDLE FileHandle, LPWIN_CERTIFICATE Certificate, PDWORD Index\n);\nPVOID WINAPI ImageDirectoryEntryToData(\n  PVOID Base, BOOLEAN MappedAsImage, USHORT DirectoryEntry, PULONG Size\n);\nBOOL WINAPI ImageEnumerateCertificates(\n  HANDLE FileHandle, WORD TypeFilter, PDWORD CertificateCount,\n  PDWORD Indices, DWORD IndexCount\n);\nBOOL WINAPI ImageGetCertificateData(\n  HANDLE FileHandle, DWORD CertificateIndex,\n  LPWIN_CERTIFICATE Certificate, PDWORD RequiredLength\n);\nBOOL WINAPI ImageGetCertificateHeader(\n  HANDLE FileHandle, DWORD CertificateIndex,\n  LPWIN_CERTIFICATE Certificateheader\n);\nBOOL WINAPI ImageGetDigestStream(\n  HANDLE FileHandle, DWORD DigestLevel,\n  DIGEST_FUNCTION DigestFunction, DIGEST_HANDLE DigestHandle\n);\nPLOADED_IMAGE WINAPI ImageLoad(\n  PCSTR DllName, PCSTR DllPath\n);\nPIMAGE_NT_HEADERS WINAPI ImageNtHeader(\n  PVOID Base\n);\nBOOL WINAPI ImageRemoveCertificate(\n  HANDLE FileHandle, DWORD Index\n);\nPIMAGE_SECTION_HEADER WINAPI ImageRvaToSection(\n  PIMAGE_NT_HEADERS NtHeaders, PVOID Base, ULONG Rva\n);\nPVOID WINAPI ImageRvaToVa(\n  PIMAGE_NT_HEADERS NtHeaders, PVOID Base, ULONG Rva,\n  PIMAGE_SECTION_HEADER *LastRvaSection\n);\nBOOL WINAPI ImageUnload(\n  PLOADED_IMAGE LoadedImage\n);\nLPAPI_VERSION WINAPI ImagehlpApiVersion(\n  void\n);\nLPAPI_VERSION WINAPI ImagehlpApiVersionEx(\n  LPAPI_VERSION AppVersion\n);\nBOOL WINAPI MakeSureDirectoryPathExists(\n  PCSTR DirPath\n);\nBOOL WINAPI MapAndLoad(\n  PCSTR ImageName, PCSTR DllPath, PLOADED_IMAGE LoadedImage,\n  BOOL DotDll, BOOL ReadOnly\n);\nPIMAGE_DEBUG_INFORMATION WINAPI MapDebugInformation(\n  HANDLE FileHandle, PCSTR FileName,\n  PCSTR SymbolPath, ULONG ImageBase\n);\nDWORD WINAPI MapFileAndCheckSumA(\n  PCSTR Filename, PDWORD HeaderSum, PDWORD CheckSum\n);\nDWORD WINAPI MapFileAndCheckSumW(\n  PCWSTR Filename, PDWORD HeaderSum, PDWORD CheckSum\n);\nBOOL WINAPI ReBaseImage(\n  PCSTR CurrentImageName, PCSTR SymbolPath, BOOL fReBase,\n  BOOL fRebaseSysfileOk, BOOL fGoingDown, ULONG CheckImageSize,\n  ULONG *OldImageSize, ULONG_PTR *OldImageBase, ULONG *NewImageSize,\n  ULONG_PTR *NewImageBase, ULONG TimeStamp\n);\nBOOL WINAPI ReBaseImage64(\n  PCSTR CurrentImageName, PCSTR SymbolPath, BOOL fReBase,\n  BOOL fRebaseSysfileOk, BOOL fGoingDown, ULONG CheckImageSize,\n  ULONG *OldImageSize, ULONG64 *OldImageBase, ULONG *NewImageSize,\n  ULONG64 *NewImageBase, ULONG TimeStamp\n);\nBOOL WINAPI RemovePrivateCvSymbolic(\n  PCHAR DebugData, PCHAR *NewDebugData, ULONG *NewDebugSize\n);\nBOOL WINAPI SearchTreeForFile(\n  PCSTR RootPath, PCSTR InputPathName, PSTR OutputPathBuffer\n);\nBOOL WINAPI SearchTreeForFileW(\n  PCWSTR RootPath, PCWSTR InputPathName, PWSTR OutputPathBuffer\n);\nBOOL WINAPI SetImageConfigInformation(\n  PLOADED_IMAGE LoadedImage,\n  PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation\n);\nBOOL WINAPI SplitSymbols(\n  PSTR ImageName, PCSTR SymbolsPath,\n  PSTR SymbolFilePath, ULONG Flags\n);\nBOOL WINAPI StackWalk(\n  DWORD MachineType, HANDLE hProcess, HANDLE hThread,\n  LPSTACKFRAME StackFrame, PVOID ContextRecord,\n  PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine,\n  PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine,\n  PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine,\n  PTRANSLATE_ADDRESS_ROUTINE TranslateAddress\n);\nBOOL WINAPI StackWalk64(\n  DWORD MachineType, HANDLE hProcess, HANDLE hThread,\n  LPSTACKFRAME64 StackFrame, PVOID ContextRecord,\n  PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine,\n  PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine,\n  PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine,\n  PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress\n);\nBOOL WINAPI SymAddSymbol(\n  HANDLE, ULONG64, PCSTR, DWORD64, DWORD, DWORD\n);\nBOOL WINAPI SymAddSymbolW(\n  HANDLE, ULONG64, PCWSTR, DWORD64, DWORD, DWORD\n);\nBOOL WINAPI SymCleanup(\n  HANDLE hProcess\n);\nBOOL WINAPI SymDeleteSymbol(\n  HANDLE, ULONG64, PCSTR, DWORD64, DWORD\n);\nBOOL WINAPI SymDeleteSymbolW(\n  HANDLE, ULONG64, PCWSTR, DWORD64, DWORD\n);\nBOOL WINAPI SymEnumerateModules(\n  HANDLE hProcess, PSYM_ENUMMODULES_CALLBACK EnumModulesCallback,\n  PVOID UserContext\n);\nBOOL WINAPI SymEnumerateModules64(\n  HANDLE, PSYM_ENUMMODULES_CALLBACK64, PVOID\n);\nBOOL WINAPI SymEnumerateModulesW64(\n  HANDLE, PSYM_ENUMMODULES_CALLBACKW64, PVOID\n);\nBOOL WINAPI SymEnumerateSymbols(\n  HANDLE hProcess, DWORD BaseOfDll,\n  PSYM_ENUMSYMBOLS_CALLBACK EnumSymbolsCallback, PVOID UserContext\n);\nBOOL WINAPI SymEnumerateSymbolsW(\n  HANDLE hProcess, DWORD BaseOfDll,\n  PSYM_ENUMSYMBOLS_CALLBACKW EnumSymbolsCallback, PVOID UserContext\n);\nBOOL WINAPI SymEnumerateSymbols64(\n  HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64, PVOID\n);\nBOOL WINAPI SymEnumerateSymbolsW64(\n  HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64W, PVOID\n);\nBOOL WINAPI SymEnumLines(\n  HANDLE, ULONG64, PCSTR, PCSTR, PSYM_ENUMLINES_CALLBACK, PVOID\n);\nBOOL WINAPI SymEnumLinesW(\n  HANDLE, ULONG64, PCWSTR, PCWSTR, PSYM_ENUMLINES_CALLBACKW, PVOID\n);\nBOOL WINAPI SymEnumSourceFiles(\n  HANDLE hProcess, ULONG64 ModBase, PCSTR Mask,\n  PSYM_ENUMSOURCEFILES_CALLBACK cbSrcFiles, PVOID UserContext\n);\nBOOL WINAPI SymEnumSourceFilesW(\n  HANDLE hProcess, ULONG64 ModBase, PCWSTR Mask,\n  PSYM_ENUMSOURCEFILES_CALLBACKW cbSrcFiles, PVOID UserContext\n);\nBOOL WINAPI SymEnumSourceLines(\n  HANDLE, ULONG64, PCSTR, PCSTR, DWORD, DWORD, PSYM_ENUMLINES_CALLBACK, PVOID\n);\nBOOL WINAPI SymEnumSourceLinesW(\n  HANDLE, ULONG64, PCWSTR, PCWSTR, DWORD, DWORD, PSYM_ENUMLINES_CALLBACKW, PVOID\n);\nBOOL WINAPI SymEnumSymbols(\n  HANDLE hProcess, DWORD BaseOfDll, PCSTR Mask, \n  PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, PVOID UserContext\n);\nBOOL WINAPI SymEnumSymbolsW(\n  HANDLE hProcess, DWORD BaseOfDll, PCWSTR Mask,\n  PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback, PVOID UserContext\n);\nBOOL WINAPI SymEnumSymbolsForAddr(\n  HANDLE, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID\n);\nBOOL WINAPI SymEnumSymbolsForAddrW(\n  HANDLE, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID\n);\nBOOL WINAPI SymEnumTypes(\n  HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID\n);\nBOOL WINAPI SymEnumTypesW(\n  HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID\n);\nHANDLE WINAPI SymFindExecutableImage(\n  HANDLE, PCSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID\n);\nHANDLE WINAPI SymFindExecutableImageW(\n  HANDLE, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID\n);\nBOOL WINAPI SymFindFileInPath(\n  HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD,\n  PSTR, PFINDFILEINPATHCALLBACK, PVOID\n);\nBOOL WINAPI SymFindFileInPathW(\n  HANDLE, PCWSTR, PCWSTR, PVOID, DWORD, DWORD, DWORD,\n  PWSTR, PFINDFILEINPATHCALLBACKW, PVOID\n);\nBOOL WINAPI SymFromAddr(\n  HANDLE, DWORD64, DWORD64*, SYMBOL_INFO*\n);\nBOOL WINAPI SymFromAddrW(\n  HANDLE, DWORD64, DWORD64*, SYMBOL_INFOW*\n);\nBOOL WINAPI SymFromIndex(\n  HANDLE, ULONG64, DWORD, PSYMBOL_INFO\n);\nBOOL WINAPI SymFromIndexW(\n  HANDLE, ULONG64, DWORD, PSYMBOL_INFOW\n);\nBOOL WINAPI SymFromName(\n  HANDLE, PCSTR, PSYMBOL_INFO\n);\nBOOL WINAPI SymFromNameW(\n  HANDLE, PCWSTR, PSYMBOL_INFOW\n);\nBOOL WINAPI SymFromToken(\n  HANDLE, DWORD64, DWORD, PSYMBOL_INFO\n);\nBOOL WINAPI SymFromTokenW(\n  HANDLE, DWORD64, DWORD, PSYMBOL_INFOW\n);\nPVOID WINAPI SymFunctionTableAccess(\n  HANDLE hProcess, DWORD AddrBase\n);\nPVOID WINAPI SymFunctionTableAccess64(\n  HANDLE hProcess, DWORD64 AddrBase\n);\nULONG WINAPI SymGetFileLineOffsets64(\n  HANDLE, PCSTR, PCSTR, PDWORD64, ULONG\n);\nPCHAR WINAPI SymGetHomeDirectory(\n  DWORD, PSTR, size_t\n);\nPWSTR WINAPI SymGetHomeDirectoryW(\n  DWORD, PWSTR, size_t\n);\nBOOL WINAPI SymGetLineFromAddr(\n  HANDLE, DWORD, PDWORD, PIMAGEHLP_LINE\n);\nBOOL WINAPI SymGetLineFromAddrW(\n  HANDLE, DWORD, PDWORD, PIMAGEHLP_LINEW\n);\nBOOL WINAPI SymGetLineFromAddr64(\n  HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINE64\n);\nBOOL WINAPI SymGetLineFromAddrW64(\n  HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINEW64\n);\nBOOL WINAPI SymGetLineFromName(\n  HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE\n);\nBOOL WINAPI SymGetLineFromName64(\n  HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE64\n);\nBOOL WINAPI SymGetLineFromNameW64(\n  HANDLE, PCWSTR, PCWSTR, DWORD, PLONG, PIMAGEHLP_LINEW64\n);\nBOOL WINAPI SymGetLineNext(\n  HANDLE, PIMAGEHLP_LINE\n);\nBOOL WINAPI SymGetLineNextW(\n  HANDLE, PIMAGEHLP_LINEW\n);\nBOOL WINAPI SymGetLineNext64(\n  HANDLE, PIMAGEHLP_LINE64\n);\nBOOL WINAPI SymGetLineNextW64(\n  HANDLE, PIMAGEHLP_LINEW64\n);\nBOOL WINAPI SymGetLinePrev(\n  HANDLE, PIMAGEHLP_LINE\n);\nBOOL WINAPI SymGetLinePrevW(\n  HANDLE, PIMAGEHLP_LINEW\n);\nBOOL WINAPI SymGetLinePrev64(\n  HANDLE, PIMAGEHLP_LINE64\n);\nBOOL WINAPI SymGetLinePrevW64(\n  HANDLE, PIMAGEHLP_LINEW64\n);\nDWORD WINAPI SymGetModuleBase(\n  HANDLE hProcess, DWORD dwAddr\n);\nBOOL WINAPI SymGetModuleInfo(\n  HANDLE hProcess, DWORD dwAddr,\n  PIMAGEHLP_MODULE ModuleInfo\n);\nBOOL WINAPI SymGetModuleInfoW(\n  HANDLE, DWORD, PIMAGEHLP_MODULEW\n);\nBOOL WINAPI SymGetModuleInfo64(\n  HANDLE, DWORD64, PIMAGEHLP_MODULE64\n);\nBOOL WINAPI SymGetModuleInfoW64(\n  HANDLE, DWORD64, PIMAGEHLP_MODULEW64\n);\nDWORD WINAPI SymGetOptions(\n  void\n);\nBOOL WINAPI SymGetScope(\n  HANDLE, ULONG64, DWORD, PSYMBOL_INFO\n);\nBOOL WINAPI SymGetScopeW(\n  HANDLE, ULONG64, DWORD, PSYMBOL_INFOW\n);\nBOOL WINAPI SymGetSearchPath(\n  HANDLE hProcess, PSTR szSearchPath, DWORD SearchPathLength\n);\nBOOL WINAPI SymGetSearchPathW(\n  HANDLE hProcess, PWSTR szSearchPath, DWORD SearchPathLength\n);\nBOOL WINAPI SymGetSourceFile(\n  HANDLE, ULONG64, PCSTR, PCSTR, PSTR, DWORD\n);\nBOOL WINAPI SymGetSourceFileW(\n  HANDLE, ULONG64, PCWSTR, PCWSTR, PWSTR, DWORD\n);\nBOOL WINAPI SymGetSourceFileFromToken(\n  HANDLE, PVOID, PCSTR, PSTR, DWORD\n);\nBOOL WINAPI SymGetSourceFileFromTokenW(\n  HANDLE, PVOID, PCWSTR, PWSTR, DWORD\n);\nBOOL WINAPI SymGetSourceFileToken(\n  HANDLE, ULONG64, PCSTR, PVOID*, DWORD*\n);\nBOOL WINAPI SymGetSourceFileTokenW(\n  HANDLE, ULONG64, PCWSTR, PVOID*, DWORD*\n);\nBOOL WINAPI SymGetSourceVarFromToken(\n  HANDLE, PVOID, PCSTR, PCSTR, PSTR, DWORD\n);\nBOOL WINAPI SymGetSourceVarFromTokenW(\n  HANDLE, PVOID, PCWSTR, PCWSTR, PWSTR, DWORD\n);\nBOOL WINAPI SymGetSymFromAddr(\n  HANDLE hProcess, DWORD dwAddr,\n  PDWORD pdwDisplacement, PIMAGEHLP_SYMBOL Symbol\n);\nBOOL WINAPI SymGetSymFromAddr64(\n  HANDLE, DWORD64, PDWORD64, PIMAGEHLP_SYMBOL64\n);\nBOOL WINAPI SymGetSymFromName(\n  HANDLE hProcess, PCSTR Name, PIMAGEHLP_SYMBOL Symbol\n);\nBOOL WINAPI SymGetSymFromName64(\n  HANDLE, PCSTR, PIMAGEHLP_SYMBOL64\n);\nBOOL WINAPI SymGetSymNext(\n  HANDLE hProcess, PIMAGEHLP_SYMBOL Symbol\n);\nBOOL WINAPI SymGetSymNext64(\n  HANDLE, PIMAGEHLP_SYMBOL64\n);\nBOOL WINAPI SymGetSymPrev(\n  HANDLE hProcess, PIMAGEHLP_SYMBOL Symbol\n);\nBOOL WINAPI SymGetSymPrev64(\n  HANDLE, PIMAGEHLP_SYMBOL64\n);\nBOOL WINAPI SymGetTypeFromName(\n  HANDLE, ULONG64, PCSTR, PSYMBOL_INFO\n);\nBOOL WINAPI SymGetTypeFromNameW(\n  HANDLE, ULONG64, PCWSTR, PSYMBOL_INFOW\n);\nBOOL WINAPI SymGetTypeInfo(\n  HANDLE, DWORD64, ULONG, IMAGEHLP_SYMBOL_TYPE_INFO, PVOID\n);\nBOOL WINAPI SymGetTypeInfoEx(\n  HANDLE, DWORD64, PIMAGEHLP_GET_TYPE_INFO_PARAMS\n);\nBOOL WINAPI SymInitialize(\n  HANDLE hProcess, PCSTR UserSearchPath, BOOL fInvadeProcess\n);\nBOOL WINAPI SymInitializeW(\n  HANDLE hProcess, PCWSTR UserSearchPath, BOOL fInvadeProcess\n);\nDWORD WINAPI SymLoadModule(\n  HANDLE hProcess, HANDLE hFile, PCSTR ImageName, PCSTR ModuleName,\n  DWORD BaseOfDll, DWORD SizeOfDll\n);\nDWORD64 WINAPI SymLoadModule64(\n  HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD\n);\nDWORD64 WINAPI SymLoadModuleEx(\n  HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD, PMODLOAD_DATA, DWORD\n);\nDWORD64 WINAPI SymLoadModuleExW(\n  HANDLE, HANDLE, PCWSTR, PCWSTR, DWORD64, DWORD, PMODLOAD_DATA, DWORD\n);\nBOOL WINAPI SymMatchFileName(\n  PCSTR, PCSTR, PSTR*, PSTR*\n);\nBOOL WINAPI SymMatchFileNameW(\n  PCWSTR, PCWSTR, PWSTR*, PWSTR*\n);\nBOOL WINAPI SymMatchString(\n  PCSTR, PCSTR, BOOL\n);\nBOOL WINAPI SymMatchStringA(\n  PCSTR, PCSTR, BOOL\n);\nBOOL WINAPI SymMatchStringW(\n  PCWSTR, PCWSTR, BOOL\n);\nBOOL WINAPI SymRegisterCallback(\n  HANDLE hProcess, PSYMBOL_REGISTERED_CALLBACK CallbackFunction,\n  PVOID UserContext\n);\nBOOL WINAPI SymRegisterCallback64(\n  HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64\n);\nBOOL WINAPI SymRegisterCallbackW64(\n  HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64\n);\nBOOL WINAPI SymRegisterFunctionEntryCallback(\n  HANDLE, PSYMBOL_FUNCENTRY_CALLBACK, PVOID\n);\nBOOL WINAPI SymRegisterFunctionEntryCallback64(\n  HANDLE, PSYMBOL_FUNCENTRY_CALLBACK64, ULONG64\n);\nBOOL WINAPI SymSearch(\n  HANDLE, ULONG64, DWORD, DWORD, PCSTR, DWORD64,\n  PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID, DWORD\n);\nBOOL WINAPI SymSearchW(\n  HANDLE, ULONG64, DWORD, DWORD, PCWSTR, DWORD64,\n  PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID, DWORD\n);\nDWORD WINAPI SymSetContext(\n  HANDLE hProcess, PIMAGEHLP_STACK_FRAME StackFrame, \n  PIMAGEHLP_CONTEXT Context\n);\nPCHAR WINAPI SymSetHomeDirectory(\n  HANDLE, PCSTR\n);\nPWSTR WINAPI SymSetHomeDirectoryW(\n  HANDLE, PCWSTR\n);\nDWORD WINAPI SymSetOptions(\n  DWORD SymOptions\n);\nBOOL WINAPI SymSetParentWindow(\n  HWND\n);\nBOOL WINAPI SymSetSearchPath(\n  HANDLE hProcess, PCSTR szSearchPath\n);\nBOOL WINAPI SymSetSearchPathW(\n  HANDLE hProcess, PCWSTR szSearchPath\n);\nBOOL WINAPI SymUnDName(\n  PIMAGEHLP_SYMBOL sym, PSTR UnDecName, DWORD UnDecNameLength\n);\nBOOL WINAPI SymUnDName64(\n  PIMAGEHLP_SYMBOL64, PSTR, DWORD\n);\nBOOL WINAPI SymUnloadModule(\n  HANDLE hProcess, DWORD BaseOfDll\n);\nBOOL WINAPI TouchFileTimes(\n  HANDLE FileHandle, LPSYSTEMTIME lpSystemTime\n);\nDWORD WINAPI UnDecorateSymbolName(\n  PCSTR DecoratedName, PSTR UnDecoratedName,\n  DWORD UndecoratedLength, DWORD Flags\n);\nDWORD WINAPI UnDecorateSymbolNameW(\n  PCWSTR DecoratedName, PWSTR UnDecoratedName,\n  DWORD UndecoratedLength, DWORD Flags\n);\nBOOL WINAPI UnMapAndLoad(\n  PLOADED_IMAGE LoadedImage\n);\nBOOL WINAPI UnmapDebugInformation(\n  PIMAGE_DEBUG_INFORMATION DebugInfo\n);\nBOOL WINAPI UpdateDebugInfoFile(\n  PCSTR ImageFileName, PCSTR SymbolPath,\n  PSTR DebugFilePath, PIMAGE_NT_HEADERS32 NtHeaders\n);\nBOOL WINAPI UpdateDebugInfoFileEx(\n  PCSTR ImageFileName, PCSTR SymbolPath, PSTR DebugFilePath,\n  PIMAGE_NT_HEADERS32 NtHeaders, DWORD OldChecksum\n);\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif  /* __WINE_IMAGEHLP_H */\n"
  },
  {
    "path": "wine/windows/ime.h",
    "content": "/**\n * This file has no copyright assigned and is placed in the Public Domain.\n * This file is part of the mingw-w64 runtime package.\n * No warranty is given; refer to the file DISCLAIMER.PD within this package.\n */\n\n#ifndef _IME_\n#define _IME_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef _WINDEF_\ntypedef unsigned int UINT;\n#endif\n\n#define IME_MAXPROCESS 32\n\nLRESULT WINAPI SendIMEMessageExA(HWND,LPARAM);\nLRESULT WINAPI SendIMEMessageExW(HWND,LPARAM);\n#define        SendIMEMessageEx WINELIB_NAME_AW(SendIMEMessageEx)\n\ntypedef struct tagIMESTRUCT {\n    UINT fnc;\n    WPARAM wParam;\n    UINT wCount;\n    UINT dchSource;\n    UINT dchDest;\n    LPARAM lParam1;\n    LPARAM lParam2;\n    LPARAM lParam3;\n} IMESTRUCT,*PIMESTRUCT,*NPIMESTRUCT,*LPIMESTRUCT;\n\n#define CP_HWND 0\n#define CP_OPEN 1\n#define CP_DIRECT 2\n#define CP_LEVEL 3\n\n#if !defined(VK_DBE_ALPHANUMERIC)\n#define VK_DBE_ALPHANUMERIC 0x0f0\n#define VK_DBE_KATAKANA 0x0f1\n#define VK_DBE_HIRAGANA 0x0f2\n#define VK_DBE_SBCSCHAR 0x0f3\n#define VK_DBE_DBCSCHAR 0x0f4\n#define VK_DBE_ROMAN 0x0f5\n#define VK_DBE_NOROMAN 0x0f6\n#define VK_DBE_ENTERWORDREGISTERMODE 0x0f7\n#define VK_DBE_ENTERIMECONFIGMODE 0x0f8\n#define VK_DBE_FLUSHSTRING 0x0f9\n#define VK_DBE_CODEINPUT 0x0fa\n#define VK_DBE_NOCODEINPUT 0x0fb\n#define VK_DBE_DETERMINESTRING 0x0fc\n#define VK_DBE_ENTERDLGCONVERSIONMODE 0x0fd\n#endif\n\n#define MCW_DEFAULT 0x00\n#define MCW_RECT 0x01\n#define MCW_WINDOW 0x02\n#define MCW_SCREEN 0x04\n#define MCW_VERTICAL 0x08\n#define MCW_HIDDEN 0x10\n\n#define IME_MODE_ALPHANUMERIC 0x0001\n\n#ifdef KOREA\n#define IME_MODE_SBCSCHAR 0x0002\n#else\n#define IME_MODE_SBCSCHAR 0x0008\n#endif\n\n#define IME_MODE_KATAKANA 0x0002\n#define IME_MODE_HIRAGANA 0x0004\n#define IME_MODE_HANJACONVERT 0x0004\n#define IME_MODE_DBCSCHAR 0x0010\n#define IME_MODE_ROMAN 0x0020\n#define IME_MODE_NOROMAN 0x0040\n#define IME_MODE_CODEINPUT 0x0080\n#define IME_MODE_NOCODEINPUT 0x0100\n\n#define IME_GETIMECAPS 0x03\n#define IME_SETOPEN 0x04\n#define IME_GETOPEN 0x05\n#define IME_GETVERSION 0x07\n#define IME_SETCONVERSIONWINDOW 0x08\n#define IME_MOVEIMEWINDOW IME_SETCONVERSIONWINDOW\n#define IME_SETCONVERSIONMODE 0x10\n\n#define IME_GETCONVERSIONMODE 0x11\n#define IME_SET_MODE 0x12\n#define IME_SENDVKEY 0x13\n#define IME_ENTERWORDREGISTERMODE 0x18\n#define IME_SETCONVERSIONFONTEX 0x19\n\n#define IME_BANJAtoJUNJA 0x13\n#define IME_JUNJAtoBANJA 0x14\n#define IME_JOHABtoKS 0x15\n#define IME_KStoJOHAB 0x16\n\n#define IMEA_INIT 0x01\n#define IMEA_NEXT 0x02\n#define IMEA_PREV 0x03\n\n#define IME_REQUEST_CONVERT 0x01\n#define IME_ENABLE_CONVERT 0x02\n\n#define INTERIM_WINDOW 0x00\n#define MODE_WINDOW 0x01\n#define HANJA_WINDOW 0x02\n\n#define IME_RS_ERROR 0x01\n#define IME_RS_NOIME 0x02\n#define IME_RS_TOOLONG 0x05\n#define IME_RS_ILLEGAL 0x06\n#define IME_RS_NOTFOUND 0x07\n#define IME_RS_NOROOM 0x0a\n#define IME_RS_DISKERROR 0x0e\n#define IME_RS_INVALID 0x11\n#define IME_RS_NEST 0x12\n#define IME_RS_SYSTEMMODAL 0x13\n\n#define WM_IME_REPORT 0x0280\n\n#define IR_STRINGSTART 0x100\n#define IR_STRINGEND 0x101\n#define IR_OPENCONVERT 0x120\n#define IR_CHANGECONVERT 0x121\n#define IR_CLOSECONVERT 0x122\n#define IR_FULLCONVERT 0x123\n#define IR_IMESELECT 0x130\n#define IR_STRING 0x140\n#define IR_DBCSCHAR 0x160\n#define IR_UNDETERMINE 0x170\n#define IR_STRINGEX 0x180\n#define IR_MODEINFO 0x190\n\n#define WM_WNT_CONVERTREQUESTEX 0x0109\n#define WM_CONVERTREQUEST 0x010A\n#define WM_CONVERTRESULT 0x010B\n#define WM_INTERIM 0x010C\n\n#define WM_IMEKEYDOWN 0x290\n#define WM_IMEKEYUP 0x291\n\ntypedef struct tagUNDETERMINESTRUCT {\n    DWORD dwSize;\n    UINT uDefIMESize;\n    UINT uDefIMEPos;\n    UINT uUndetTextLen;\n    UINT uUndetTextPos;\n    UINT uUndetAttrPos;\n    UINT uCursorPos;\n    UINT uDeltaStart;\n    UINT uDetermineTextLen;\n    UINT uDetermineTextPos;\n    UINT uDetermineDelimPos;\n    UINT uYomiTextLen;\n    UINT uYomiTextPos;\n    UINT uYomiDelimPos;\n} UNDETERMINESTRUCT,*PUNDETERMINESTRUCT,*NPUNDETERMINESTRUCT,*LPUNDETERMINESTRUCT;\n\ntypedef struct tagSTRINGEXSTRUCT {\n    DWORD dwSize;\n    UINT uDeterminePos;\n    UINT uDetermineDelimPos;\n    UINT uYomiPos;\n    UINT uYomiDelimPos;\n} STRINGEXSTRUCT,*NPSTRINGEXSTRUCT,*LPSTRINGEXSTRUCT;\n\n#ifdef __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "wine/windows/imm.h",
    "content": "/*\n * Declarations for IMM32\n *\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_IMM_H\n#define __WINE_IMM_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef HANDLE HIMC;\ntypedef HANDLE HIMCC;\n\ntypedef struct tagREGISTERWORDA {\n    LPSTR lpReading;\n    LPSTR lpWord;\n} REGISTERWORDA, *PREGISTERWORDA, *NPREGISTERWORDA, *LPREGISTERWORDA;\n\ntypedef struct tagREGISTERWORDW {\n    LPWSTR lpReading;\n    LPWSTR lpWord;\n} REGISTERWORDW, *PREGISTERWORDW, *NPREGISTERWORDW, *LPREGISTERWORDW;\n\ntypedef int (CALLBACK *REGISTERWORDENUMPROCA)(LPCSTR, DWORD, LPCSTR, LPVOID);\ntypedef int (CALLBACK *REGISTERWORDENUMPROCW)(LPCWSTR, DWORD, LPCWSTR, LPVOID);\n\ntypedef struct tagCANDIDATEFORM\n{\n\t\t\t\tDWORD   dwIndex;\n\t\t\t\tDWORD   dwStyle;\n\t\t\t\tPOINT ptCurrentPos;\n\t\t\t\tRECT  rcArea;\n} CANDIDATEFORM, *LPCANDIDATEFORM;\n\ntypedef struct tagCANDIDATELIST\n{\n\t\t\t\tDWORD dwSize;\n\t\t\t\tDWORD dwStyle;\n\t\t\t\tDWORD dwCount;\n\t\t\t\tDWORD dwSelection;\n\t\t\t\tDWORD dwPageStart;\n\t\t\t\tDWORD dwPageSize;\n\t\t\t\tDWORD dwOffset[1];\n} CANDIDATELIST, *LPCANDIDATELIST;\n\ntypedef struct tagSTYLEBUFA\n{\n\t\t\t\tDWORD dwStyle;\n\t\t\t\tCHAR  szDescription[32];\n} STYLEBUFA, *LPSTYLEBUFA;\n\ntypedef struct tagSTYLEBUFW\n{\n\t\t\t\tDWORD dwStyle;\n\t\t\t\tWCHAR  szDescription[32];\n} STYLEBUFW, *LPSTYLEBUFW;\n\nDECL_WINELIB_TYPE_AW(STYLEBUF)\nDECL_WINELIB_TYPE_AW(LPSTYLEBUF)\n\ntypedef struct tagRECONVERTSTRING\n{\n\tDWORD\tdwSize;\n\tDWORD\tdwVersion;\n\tDWORD\tdwStrLen;\n\tDWORD\tdwStrOffset;\n\tDWORD\tdwCompStrLen;\n\tDWORD\tdwCompStrOffset;\n\tDWORD\tdwTargetStrLen;\n\tDWORD\tdwTargetStrOffset;\n} RECONVERTSTRING, *LPRECONVERTSTRING;\n\n\n#define IMEMENUITEM_STRING_SIZE 80\n\ntypedef struct tagIMEMENUITEMINFOA\n{\n\tUINT\t\tcbSize;\n\tUINT\t\tfType;\n\tUINT\t\tfState;\n\tUINT\t\twID;\n\tHBITMAP\t\thbmpChecked;\n\tHBITMAP\t\thbmpUnchecked;\n\tDWORD\t\tdwItemData;\n\tCHAR\t\tszString[IMEMENUITEM_STRING_SIZE];\n\tHBITMAP\t\thbmpItem;\n} IMEMENUITEMINFOA, *LPIMEMENUITEMINFOA;\n\ntypedef struct tagIMEMENUITEMINFOW\n{\n\tUINT\t\tcbSize;\n\tUINT\t\tfType;\n\tUINT\t\tfState;\n\tUINT\t\twID;\n\tHBITMAP\t\thbmpChecked;\n\tHBITMAP\t\thbmpUnchecked;\n\tDWORD\t\tdwItemData;\n\tWCHAR\t\tszString[IMEMENUITEM_STRING_SIZE];\n\tHBITMAP\t\thbmpItem;\n} IMEMENUITEMINFOW, *LPIMEMENUITEMINFOW;\n\nDECL_WINELIB_TYPE_AW(IMEMENUITEMINFO)\nDECL_WINELIB_TYPE_AW(LPIMEMENUITEMINFO)\n\n\ntypedef struct _tagCOMPOSITIONFORM\n{\n\t\t\t\tDWORD   dwStyle;\n\t\t\t\tPOINT ptCurrentPos;\n\t\t\t\tRECT  rcArea;\n} COMPOSITIONFORM, *LPCOMPOSITIONFORM;\n\ntypedef BOOL (CALLBACK* IMCENUMPROC)(HIMC, LPARAM);\n\ntypedef struct _tagIMECHARPOSITION\n{\n    DWORD dwSize;\n    DWORD dwCharPos;\n    POINT pt;\n    UINT  cLineHeight;\n    RECT  rcDocument;\n} IMECHARPOSITION, *LPIMECHARPOSITION;\n\n/* wParam for WM_IME_CONTROL */\n#define IMC_GETCANDIDATEPOS             0x0007\n#define IMC_SETCANDIDATEPOS             0x0008\n#define IMC_GETCOMPOSITIONFONT          0x0009\n#define IMC_SETCOMPOSITIONFONT          0x000A\n#define IMC_GETCOMPOSITIONWINDOW        0x000B\n#define IMC_SETCOMPOSITIONWINDOW        0x000C\n#define IMC_GETSTATUSWINDOWPOS          0x000F\n#define IMC_SETSTATUSWINDOWPOS          0x0010\n#define IMC_CLOSESTATUSWINDOW           0x0021\n#define IMC_OPENSTATUSWINDOW            0x0022\n\n/*\n * wParam for WM_IME_CONTROL to the soft keyboard\n * dwAction for ImmNotifyIME\n */\n#define NI_OPENCANDIDATE                0x0010\n#define NI_CLOSECANDIDATE               0x0011\n#define NI_SELECTCANDIDATESTR           0x0012\n#define NI_CHANGECANDIDATELIST          0x0013\n#define NI_FINALIZECONVERSIONRESULT     0x0014\n#define NI_COMPOSITIONSTR               0x0015\n#define NI_SETCANDIDATE_PAGESTART       0x0016\n#define NI_SETCANDIDATE_PAGESIZE        0x0017\n#define NI_IMEMENUSELECTED\t\t0x0018\n\n/* lParam for WM_IME_SETCONTEXT */\n#define ISC_SHOWUICANDIDATEWINDOW       0x00000001\n#define ISC_SHOWUICOMPOSITIONWINDOW     0x80000000\n#define ISC_SHOWUIGUIDELINE             0x40000000\n#define ISC_SHOWUIALLCANDIDATEWINDOW    0x0000000F\n#define ISC_SHOWUIALL                   0xC000000F\n\n\n/* dwIndex for ImmNotifyIME/NI_COMPOSITIONSTR */\n#define CPS_COMPLETE                    0x0001\n#define CPS_CONVERT                     0x0002\n#define CPS_REVERT                      0x0003\n#define CPS_CANCEL                      0x0004\n\n\n/* the modifiers of hot key */\n#define MOD_ALT                         0x0001\n#define MOD_CONTROL                     0x0002\n#define MOD_SHIFT                       0x0004\n\n#define MOD_LEFT                        0x8000\n#define MOD_RIGHT                       0x4000\n\n#define MOD_ON_KEYUP                    0x0800\n#define MOD_IGNORE_ALL_MODIFIER         0x0400\n\n\n/* Windows for Simplified Chinese Edition hot key ID from 0x10 - 0x2F */\n#define IME_CHOTKEY_IME_NONIME_TOGGLE           0x10\n#define IME_CHOTKEY_SHAPE_TOGGLE                0x11\n#define IME_CHOTKEY_SYMBOL_TOGGLE               0x12\n\n/* Windows for Japanese Edition hot key ID from 0x30 - 0x4F */\n#define IME_JHOTKEY_CLOSE_OPEN                  0x30\n\n/* Windows for Korean Edition hot key ID from 0x50 - 0x6F */\n#define IME_KHOTKEY_SHAPE_TOGGLE                0x50\n#define IME_KHOTKEY_HANJACONVERT                0x51\n#define IME_KHOTKEY_ENGLISH                     0x52\n/* Windows for Traditional Chinese Edition hot key ID from 0x70 - 0x8F */\n#define IME_THOTKEY_IME_NONIME_TOGGLE           0x70\n#define IME_THOTKEY_SHAPE_TOGGLE                0x71\n#define IME_THOTKEY_SYMBOL_TOGGLE               0x72\n\n/* direct switch hot key ID from 0x100 - 0x11F */\n#define IME_HOTKEY_DSWITCH_FIRST                0x100\n#define IME_HOTKEY_DSWITCH_LAST                 0x11F\n\n/* IME private hot key from 0x200 - 0x21F */\n#define IME_HOTKEY_PRIVATE_FIRST                0x200\n#define IME_ITHOTKEY_RESEND_RESULTSTR           0x200\n#define IME_ITHOTKEY_PREVIOUS_COMPOSITION       0x201\n#define IME_ITHOTKEY_UISTYLE_TOGGLE             0x202\n#define IME_ITHOTKEY_RECONVERTSTRING\t\t0x203\n#define IME_HOTKEY_PRIVATE_LAST                 0x21F\n\n\n/*\n * dwSystemInfoFlags bits\n * parameter of ImmGetCompositionString\n */\n#define GCS_COMPREADSTR                 0x0001\n#define GCS_COMPREADATTR                0x0002\n#define GCS_COMPREADCLAUSE              0x0004\n#define GCS_COMPSTR                     0x0008\n#define GCS_COMPATTR                    0x0010\n#define GCS_COMPCLAUSE                  0x0020\n#define GCS_CURSORPOS                   0x0080\n#define GCS_DELTASTART                  0x0100\n#define GCS_RESULTREADSTR               0x0200\n#define GCS_RESULTREADCLAUSE            0x0400\n#define GCS_RESULTSTR                   0x0800\n#define GCS_RESULTCLAUSE                0x1000\n\n/* style bit flags for WM_IME_COMPOSITION */\n#define CS_INSERTCHAR                   0x2000\n#define CS_NOMOVECARET                  0x4000\n\n\n/*\n * bits of fdwInit of INPUTCONTEXT\n * IME version constants\n */\n#define IMEVER_0310                     0x0003000A\n#define IMEVER_0400                     0x00040000\n\n\n/* IME property bits */\n#define IME_PROP_AT_CARET               0x00010000\n#define IME_PROP_SPECIAL_UI             0x00020000\n#define IME_PROP_CANDLIST_START_FROM_1  0x00040000\n#define IME_PROP_UNICODE                0x00080000\n#define IME_PROP_COMPLETE_ON_UNSELECT\t0x00100000\n\n\n/* IME UICapability bits */\n#define UI_CAP_2700                     0x00000001\n#define UI_CAP_ROT90                    0x00000002\n#define UI_CAP_ROTANY                   0x00000004\n/* ImmSetCompositionString Capability bits */\n#define SCS_CAP_COMPSTR                 0x00000001\n#define SCS_CAP_MAKEREAD                0x00000002\n#define SCS_CAP_SETRECONVERTSTRING\t0x00000004\n\n\n/* IME WM_IME_SELECT inheritance Capability bits */\n#define SELECT_CAP_CONVERSION           0x00000001\n#define SELECT_CAP_SENTENCE             0x00000002\n\n\n/* ID for deIndex of ImmGetGuideLine */\n#define GGL_LEVEL                       0x00000001\n#define GGL_INDEX                       0x00000002\n#define GGL_STRING                      0x00000003\n#define GGL_PRIVATE                     0x00000004\n\n/* ID for dwLevel of GUIDELINE Structure */\n#define GL_LEVEL_NOGUIDELINE            0x00000000\n#define GL_LEVEL_FATAL                  0x00000001\n#define GL_LEVEL_ERROR                  0x00000002\n#define GL_LEVEL_WARNING                0x00000003\n#define GL_LEVEL_INFORMATION            0x00000004\n\n/* ID for dwIndex of GUIDELINE Structure */\n#define GL_ID_UNKNOWN                   0x00000000\n#define GL_ID_NOMODULE                  0x00000001\n#define GL_ID_NODICTIONARY              0x00000010\n#define GL_ID_CANNOTSAVE                0x00000011\n#define GL_ID_NOCONVERT                 0x00000020\n#define GL_ID_TYPINGERROR               0x00000021\n#define GL_ID_TOOMANYSTROKE             0x00000022\n#define GL_ID_READINGCONFLICT           0x00000023\n#define GL_ID_INPUTREADING              0x00000024\n#define GL_ID_INPUTRADICAL              0x00000025\n#define GL_ID_INPUTCODE                 0x00000026\n#define GL_ID_INPUTSYMBOL               0x00000027\n#define GL_ID_CHOOSECANDIDATE           0x00000028\n#define GL_ID_REVERSECONVERSION         0x00000029\n#define GL_ID_PRIVATE_FIRST             0x00008000\n#define GL_ID_PRIVATE_LAST              0x0000FFFF\n\n/* ID for dwIndex of ImmGetProperty */\n#define IGP_GETIMEVERSION               (DWORD)(-4)\n#define IGP_PROPERTY                    0x00000004\n#define IGP_CONVERSION                  0x00000008\n#define IGP_SENTENCE                    0x0000000c\n#define IGP_UI                          0x00000010\n#define IGP_SETCOMPSTR                  0x00000014\n#define IGP_SELECT                      0x00000018\n\n\n/* dwIndex for ImmSetCompositionString API */\n#define SCS_SETSTR          (GCS_COMPREADSTR|GCS_COMPSTR)\n#define SCS_CHANGEATTR      (GCS_COMPREADATTR|GCS_COMPATTR)\n#define SCS_CHANGECLAUSE    (GCS_COMPREADCLAUSE|GCS_COMPCLAUSE)\n#define SCS_SETRECONVERTSTRING\t\t0x00010000\n#define SCS_QUERYRECONVERTSTRING\t0x00020000\n\n/* attribute for COMPOSITIONSTRING Structure */\n#define ATTR_INPUT                      0x00\n#define ATTR_TARGET_CONVERTED           0x01\n#define ATTR_CONVERTED                  0x02\n#define ATTR_TARGET_NOTCONVERTED        0x03\n#define ATTR_INPUT_ERROR                0x04\n#define ATTR_FIXEDCONVERTED\t\t0x05\n\n\n/* bit field for IMC_SETCOMPOSITIONWINDOW, IMC_SETCANDIDATEWINDOW */\n#define CFS_DEFAULT                     0x0000\n#define CFS_RECT                        0x0001\n#define CFS_POINT                       0x0002\n#define CFS_FORCE_POSITION              0x0020\n#define CFS_CANDIDATEPOS                0x0040\n#define CFS_EXCLUDE                     0x0080\n\n/* conversion direction for ImmGetConversionList */\n#define GCL_CONVERSION                  0x0001\n#define GCL_REVERSECONVERSION           0x0002\n#define GCL_REVERSE_LENGTH              0x0003\n\n\n/* bit field for conversion mode */\n#define IME_CMODE_ALPHANUMERIC          0x0000\n#define IME_CMODE_NATIVE                0x0001\n#define IME_CMODE_CHINESE               IME_CMODE_NATIVE\n/* IME_CMODE_HANGEUL is old name of IME_CMODE_HANGUL. It will be gone eventually. */\n#define IME_CMODE_HANGEUL               IME_CMODE_NATIVE\n#define IME_CMODE_HANGUL                IME_CMODE_NATIVE\n#define IME_CMODE_JAPANESE              IME_CMODE_NATIVE\n#define IME_CMODE_KATAKANA              0x0002  /* only effect under IME_CMODE_NATIVE */\n#define IME_CMODE_LANGUAGE              0x0003\n#define IME_CMODE_FULLSHAPE             0x0008\n#define IME_CMODE_ROMAN                 0x0010\n#define IME_CMODE_CHARCODE              0x0020\n#define IME_CMODE_HANJACONVERT          0x0040\n#define IME_CMODE_SOFTKBD               0x0080\n#define IME_CMODE_NOCONVERSION          0x0100\n#define IME_CMODE_EUDC                  0x0200\n#define IME_CMODE_SYMBOL                0x0400\n#define IME_CMODE_FIXED\t\t\t0x0800\n\n\n#define IME_SMODE_NONE                  0x0000\n#define IME_SMODE_PLAURALCLAUSE         0x0001\n#define IME_SMODE_SINGLECONVERT         0x0002\n#define IME_SMODE_AUTOMATIC             0x0004\n#define IME_SMODE_PHRASEPREDICT         0x0008\n#define IME_SMODE_CONVERSATION\t\t0x0010\n\n/* style of candidate */\n#define IME_CAND_UNKNOWN                0x0000\n#define IME_CAND_READ                   0x0001\n#define IME_CAND_CODE                   0x0002\n#define IME_CAND_MEANING                0x0003\n#define IME_CAND_RADICAL                0x0004\n#define IME_CAND_STROKE                 0x0005\n\n\n/* wParam of report message WM_IME_NOTIFY */\n#define IMN_CLOSESTATUSWINDOW           0x0001\n#define IMN_OPENSTATUSWINDOW            0x0002\n#define IMN_CHANGECANDIDATE             0x0003\n#define IMN_CLOSECANDIDATE              0x0004\n#define IMN_OPENCANDIDATE               0x0005\n#define IMN_SETCONVERSIONMODE           0x0006\n#define IMN_SETSENTENCEMODE             0x0007\n#define IMN_SETOPENSTATUS               0x0008\n#define IMN_SETCANDIDATEPOS             0x0009\n#define IMN_SETCOMPOSITIONFONT          0x000A\n#define IMN_SETCOMPOSITIONWINDOW        0x000B\n#define IMN_SETSTATUSWINDOWPOS          0x000C\n#define IMN_GUIDELINE                   0x000D\n#define IMN_PRIVATE                     0x000E\n\n\n/* wParam of report message WM_IME_REQUEST */\n#define IMR_COMPOSITIONWINDOW\t\t0x0001\n#define IMR_CANDIDATEWINDOW\t\t0x0002\n#define IMR_COMPOSITIONFONT\t\t0x0003\n#define IMR_RECONVERTSTRING\t\t0x0004\n#define IMR_CONFIRMRECONVERTSTRING\t0x0005\n#define IMR_QUERYCHARPOSITION\t\t0x0006\n#define IMR_DOCUMENTFEED\t\t0x0007\n\n\n/* error code of ImmGetCompositionString */\n#define IMM_ERROR_NODATA                (-1)\n#define IMM_ERROR_GENERAL               (-2)\n\n\n/* dialog mode of ImmConfigureIME */\n#define IME_CONFIG_GENERAL              1\n#define IME_CONFIG_REGISTERWORD         2\n#define IME_CONFIG_SELECTDICTIONARY     3\n\n/* dialog mode of ImmEscape */\n#define IME_ESC_QUERY_SUPPORT           0x0003\n#define IME_ESC_RESERVED_FIRST          0x0004\n#define IME_ESC_RESERVED_LAST           0x07FF\n#define IME_ESC_PRIVATE_FIRST           0x0800\n#define IME_ESC_PRIVATE_LAST            0x0FFF\n#define IME_ESC_SEQUENCE_TO_INTERNAL    0x1001\n#define IME_ESC_GET_EUDC_DICTIONARY     0x1003\n#define IME_ESC_SET_EUDC_DICTIONARY     0x1004\n#define IME_ESC_MAX_KEY                 0x1005\n#define IME_ESC_IME_NAME                0x1006\n#define IME_ESC_SYNC_HOTKEY             0x1007\n#define IME_ESC_HANJA_MODE              0x1008\n#define IME_ESC_AUTOMATA                0x1009\n#define IME_ESC_PRIVATE_HOTKEY          0x100a\n#define IME_ESC_GETHELPFILENAME\t\t0x100b\n\n\n/* style of word registration */\n#define IME_REGWORD_STYLE_EUDC          0x00000001\n#define IME_REGWORD_STYLE_USER_FIRST    0x80000000\n#define IME_REGWORD_STYLE_USER_LAST     0xFFFFFFFF\n\n\n/* dwFlags for ImmAssociateContextEx */\n#define IACE_CHILDREN\t\t\t0x0001\n#define IACE_DEFAULT\t\t\t0x0010\n#define IACE_IGNORENOCONTEXT\t\t0x0020\n\n/* dwFlags for ImmGetImeMenuItems */\n#define IGIMIF_RIGHTMENU\t\t0x0001\n\n/* dwType for ImmGetImeMenuItems */\n#define IGIMII_CMODE\t\t\t0x0001\n#define IGIMII_SMODE\t\t\t0x0002\n#define IGIMII_CONFIGURE\t\t0x0004\n#define IGIMII_TOOLS\t\t\t0x0008\n#define IGIMII_HELP\t\t\t0x0010\n#define IGIMII_OTHER\t\t\t0x0020\n#define IGIMII_INPUTTOOLS\t\t0x0040\n\n/* fType of IMEMENUITEMINFO structure */\n#define IMFT_RADIOCHECK\t\t\t0x00001\n#define IMFT_SEPARATOR\t\t\t0x00002\n#define IMFT_SUBMENU\t\t\t0x00004\n\n/* fState of IMEMENUITEMINFO structure */\n#define IMFS_GRAYED\t\t\tMFS_GRAYED\n#define IMFS_DISABLED\t\t\tMFS_DISABLED\n#define IMFS_CHECKED\t\t\tMFS_CHECKED\n#define IMFS_HILITE\t\t\tMFS_HILITE\n#define IMFS_ENABLED\t\t\tMFS_ENABLED\n#define IMFS_UNCHECKED\t\t\tMFS_UNCHECKED\n#define IMFS_UNHILITE\t\t\tMFS_UNHILITE\n#define IMFS_DEFAULT\t\t\tMFS_DEFAULT\n\n\n/*\n * type of soft keyboard\n * for Windows Traditional Chinese Edition\n */\n#define SOFTKEYBOARD_TYPE_T1            0x0001\n/* for Windows Simplified Chinese Edition */\n#define SOFTKEYBOARD_TYPE_C1            0x0002\n\n\nHIMC   WINAPI ImmAssociateContext(HWND, HIMC);\nBOOL   WINAPI ImmAssociateContextEx(HWND, HIMC, DWORD);\nBOOL   WINAPI ImmConfigureIMEA(HKL, HWND, DWORD, LPVOID);\nBOOL   WINAPI ImmConfigureIMEW(HKL, HWND, DWORD, LPVOID);\n#define  ImmConfigureIME WINELIB_NAME_AW(ImmConfigureIME)\nHIMC   WINAPI ImmCreateContext(void);\nBOOL   WINAPI ImmDestroyContext(HIMC hIMC);\nBOOL   WINAPI ImmDisableIME(DWORD idThread);\nBOOL   WINAPI ImmDisableLegacyIME(void);\nBOOL   WINAPI ImmEnumInputContext(DWORD, IMCENUMPROC, LPARAM);\nUINT   WINAPI ImmEnumRegisterWordA(HKL, REGISTERWORDENUMPROCA, LPCSTR, DWORD, LPCSTR, LPVOID);\nUINT   WINAPI ImmEnumRegisterWordW(HKL, REGISTERWORDENUMPROCW, LPCWSTR, DWORD, LPCWSTR, LPVOID);\n#define  ImmEnumRegisterWord WINELIB_NAME_AW(ImmEnumRegisterWord)\nLRESULT  WINAPI ImmEscapeA(HKL, HIMC, UINT, LPVOID);\nLRESULT  WINAPI ImmEscapeW(HKL, HIMC, UINT, LPVOID);\n#define  ImmEscape WINELIB_NAME_AW(ImmEscape)\nDWORD    WINAPI ImmGetCandidateListA(HIMC, DWORD, LPCANDIDATELIST, DWORD);\nDWORD    WINAPI ImmGetCandidateListW(HIMC, DWORD, LPCANDIDATELIST, DWORD);\n#define  ImmGetCandidateList WINELIB_NAME_AW(ImmGetCandidateList)\nDWORD    WINAPI ImmGetCandidateListCountA(HIMC, LPDWORD);\nDWORD    WINAPI ImmGetCandidateListCountW(HIMC, LPDWORD);\n#define  ImmGetCandidateListCount WINELIB_NAME_AW(ImmGetCandidateListCount)\nBOOL   WINAPI ImmGetCandidateWindow(HIMC, DWORD, LPCANDIDATEFORM);\n#if defined(_WINGDI_) && !defined(NOGDI)\nBOOL   WINAPI ImmGetCompositionFontA(HIMC, LPLOGFONTA);\nBOOL   WINAPI ImmGetCompositionFontW(HIMC, LPLOGFONTW);\n#define  ImmGetCompositionFont WINELIB_NAME_AW(ImmGetCompositionFont)\nBOOL   WINAPI ImmSetCompositionFontA(HIMC, LPLOGFONTA);\nBOOL   WINAPI ImmSetCompositionFontW(HIMC, LPLOGFONTW);\n#define  ImmSetCompositionFont WINELIB_NAME_AW(ImmSetCompositionFont)\n#endif\nLONG     WINAPI ImmGetCompositionStringA(HIMC, DWORD, LPVOID, DWORD);\nLONG     WINAPI ImmGetCompositionStringW(HIMC, DWORD, LPVOID, DWORD);\n#define  ImmGetCompositionString WINELIB_NAME_AW(ImmGetCompositionString)\nBOOL   WINAPI ImmGetCompositionWindow(HIMC, LPCOMPOSITIONFORM);\nHIMC   WINAPI ImmGetContext(HWND);\nDWORD    WINAPI ImmGetConversionListA(HKL, HIMC, LPCSTR, LPCANDIDATELIST, DWORD, UINT);\nDWORD    WINAPI ImmGetConversionListW(HKL, HIMC, LPCWSTR, LPCANDIDATELIST, DWORD, UINT);\n#define  ImmGetConversionList WINELIB_NAME_AW(ImmGetConversionList)\nBOOL   WINAPI ImmGetConversionStatus(HIMC, LPDWORD, LPDWORD);\nHWND   WINAPI ImmGetDefaultIMEWnd(HWND);\nUINT   WINAPI ImmGetDescriptionA(HKL, LPSTR, UINT);\nUINT   WINAPI ImmGetDescriptionW(HKL, LPWSTR, UINT);\n#define  ImmGetDescription WINELIB_NAME_AW(ImmGetDescription)\nDWORD    WINAPI ImmGetGuideLineA(HIMC, DWORD, LPSTR, DWORD);\nDWORD    WINAPI ImmGetGuideLineW(HIMC, DWORD, LPWSTR, DWORD);\n#define  ImmGetGuideLine WINELIB_NAME_AW(ImmGetGuideLine)\nUINT   WINAPI ImmGetIMEFileNameA(HKL, LPSTR, UINT);\nUINT   WINAPI ImmGetIMEFileNameW(HKL, LPWSTR, UINT);\n#define  ImmGetIMEFileName WINELIB_NAME_AW(ImmGetIMEFileName)\nDWORD  WINAPI ImmGetImeMenuItemsA(HIMC, DWORD, DWORD, LPIMEMENUITEMINFOA, LPIMEMENUITEMINFOA, DWORD);\nDWORD  WINAPI ImmGetImeMenuItemsW(HIMC, DWORD, DWORD, LPIMEMENUITEMINFOW, LPIMEMENUITEMINFOW, DWORD);\n#define ImmGetImeMenuItems  WINELIB_NAME_AW(ImmGetImeMenuItems)\nBOOL   WINAPI ImmGetOpenStatus(HIMC);\nDWORD    WINAPI ImmGetProperty(HKL, DWORD);\nUINT   WINAPI ImmGetRegisterWordStyleA(HKL, UINT, LPSTYLEBUFA);\nUINT   WINAPI ImmGetRegisterWordStyleW(HKL, UINT, LPSTYLEBUFW);\n#define  ImmGetRegisterWordStyle WINELIB_NAME_AW(ImmGetRegisterWordStyle)\nBOOL   WINAPI ImmGetStatusWindowPos(HIMC, LPPOINT);\nUINT   WINAPI ImmGetVirtualKey(HWND);\nHKL    WINAPI ImmInstallIMEA(LPCSTR, LPCSTR);\nHKL    WINAPI ImmInstallIMEW(LPCWSTR, LPCWSTR);\n#define  ImmInstallIME WINELIB_NAME_AW(ImmInstallIME)\nBOOL   WINAPI ImmIsIME(HKL);\nBOOL   WINAPI ImmIsUIMessageA(HWND, UINT, WPARAM, LPARAM);\nBOOL   WINAPI ImmIsUIMessageW(HWND, UINT, WPARAM, LPARAM);\n#define  ImmIsUIMessage WINELIB_NAME_AW(ImmIsUIMessage)\nBOOL   WINAPI ImmNotifyIME(HIMC, DWORD, DWORD, DWORD);\nBOOL   WINAPI ImmProcessKey(HWND, HKL, UINT, LPARAM, DWORD);\nBOOL   WINAPI ImmRegisterWordA(HKL, LPCSTR, DWORD, LPCSTR);\nBOOL   WINAPI ImmRegisterWordW(HKL, LPCWSTR, DWORD, LPCWSTR);\n#define  ImmRegisterWord WINELIB_NAME_AW(ImmRegisterWord)\nBOOL   WINAPI ImmReleaseContext(HWND, HIMC);\nBOOL   WINAPI ImmSetCandidateWindow(HIMC, LPCANDIDATEFORM);\nBOOL   WINAPI ImmSetCompositionStringA(HIMC, DWORD, LPCVOID, DWORD, LPCVOID, DWORD);\nBOOL   WINAPI ImmSetCompositionStringW(HIMC, DWORD, LPCVOID, DWORD, LPCVOID, DWORD);\n#define  ImmSetCompositionString WINELIB_NAME_AW(ImmSetCompositionString)\nBOOL   WINAPI ImmSetCompositionWindow(HIMC, LPCOMPOSITIONFORM);\nBOOL   WINAPI ImmSetConversionStatus(HIMC, DWORD, DWORD);\nBOOL   WINAPI ImmSetOpenStatus(HIMC, BOOL);\nBOOL   WINAPI ImmSetStatusWindowPos(HIMC, LPPOINT);\nBOOL   WINAPI ImmSimulateHotKey(HWND, DWORD);\nBOOL   WINAPI ImmUnregisterWordA(HKL, LPCSTR, DWORD, LPCSTR);\nBOOL   WINAPI ImmUnregisterWordW(HKL, LPCWSTR, DWORD, LPCWSTR);\n#define  ImmUnregisterWord WINELIB_NAME_AW(ImmUnregisterWord)\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* __WINE_IMM_H */\n"
  },
  {
    "path": "wine/windows/imnact.idl",
    "content": "/*\n * Copyright 2006 Robert Shearman for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"objidl.idl\";\n\ninterface IImnAccount;\n\ncpp_quote(\"#ifndef HR_E\")\ncpp_quote(\"#define HR_E(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_INTERNET, n)\")\ncpp_quote(\"#endif\")\ncpp_quote(\"#ifndef HR_S\")\ncpp_quote(\"#define HR_S(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_INTERNET, n)\")\ncpp_quote(\"#endif\")\n\ntypedef enum tagSMTPAUTHTYPE\n{\n    SMTP_AUTH_NONE,\n    SMTP_AUTH_SICILY,\n    SMTP_AUTH_USE_POP3ORIMAP_SETTINGS,\n    SMTP_AUTH_USE_SMTP_SETTINGS,\n} SMTPAUTHTYPE;\n\nconst SHORT CCHMAX_ORG_NAME = 256;\nconst SHORT CCHMAX_DISPLAY_NAME = 256;\nconst SHORT CCHMAX_ACCOUNT_NAME = 256;\nconst SHORT CCHMAX_SERVER_NAME = 256;\nconst SHORT CCHMAX_PASSWORD = 256;\nconst SHORT CCHMAX_USERNAME = 256;\nconst SHORT CCHMAX_EMAIL_ADDRESS = 256;\nconst SHORT CCHMAX_CONNECTOID = 256;\nconst SHORT CCHMAX_SEARCH_BASE = 256;\nconst SHORT CCHMAX_ROOT_FOLDER = 256;\nconst SHORT CCHMAX_SIGNATURE = 16;\nconst SHORT CCHMAX_SERVICE = 256;\n\n[\n    object,\n    uuid(0A06BD31-166F-11D0-81B9-00C04FD85AB4),\n    pointer_default(unique)\n]\ninterface IImnAdviseAccount : IUnknown\n{\n    typedef enum\n    {\n        ACCT_NEWS,\n        ACCT_MAIL,\n        ACCT_DIR_SERV,\n        ACCT_LAST\n    } ACCTTYPE;\n\n    typedef struct tagAccountContext\n    {\n        ACCTTYPE AcctType;\n        LPSTR pszAccountID;\n        LPSTR pszOldName;\n        DWORD dwServerType;\n    } ACTX;\n\n    HRESULT AdviseAccount(\n        [in]    DWORD dwAdviseType,\n        [in]    ACTX *pAcctCtx);\n}\n\n[\n    object,\n    uuid(8D0AED11-1638-11D0-81B9-00C04FD85AB4),\n    pointer_default(unique)\n]\ninterface IImnAdviseMigrateServer : IUnknown\n{\n    HRESULT MigrateServer(\n        [in]    DWORD dwSrvType,\n        [in]    IImnAccount *pAccount);\n}\n\n[\n    object,\n    uuid(FD465483-1384-11D0-ABBD-0020AFDFD10A),\n    pointer_default(unique)\n]\ninterface IImnEnumAccounts : IUnknown\n{\n    HRESULT GetCount(\n        [out]   ULONG *pcItems);\n\n    HRESULT SortByAccountName();\n\n    HRESULT GetNext(\n        [out]   IImnAccount **ppAccount);\n\n    HRESULT Reset();\n}\n\n[\n    object,\n    uuid(FD465481-1384-11D0-ABBD-0020AFDFD10A),\n    pointer_default(unique)\n]\ninterface IImnAccountManager : IUnknown\n{\n    typedef struct tagACCTLISTINFO\n    {\n        DWORD cbSize;\n        ACCTTYPE AcctTypeInit;\n        DWORD dwAcctFlags;\n        DWORD dwFlags;\n    } ACCTLISTINFO;\n\n    HRESULT Init(\n        [in]    IImnAdviseMigrateServer *pAdviseMigrateServer);\n\n    HRESULT CreateAccountObject(\n        [in]    ACCTTYPE AcctType,\n        [out]   IImnAccount **ppAccount);\n\n    HRESULT Enumerate(\n        [in]    DWORD dwSrvTypes,\n        [out]   IImnEnumAccounts **ppEnumAccounts);\n\n    HRESULT GetAccountCount(\n        [in]    ACCTTYPE AcctType,\n        [out]   ULONG *pcServers);\n\n    HRESULT FindAccount(\n        [in]    DWORD dwPropTag,\n        [in]    LPCSTR pszSearchData,\n        [out]   IImnAccount **ppAccount);\n\n    HRESULT GetDefaultAccountName(\n        [in]    ACCTTYPE AcctType,\n        [in,ref] LPSTR pszAccount,\n        [in]    ULONG cchMax);\n\n    HRESULT ProcessNotification(\n        [in]    UINT uMsg,\n        [in]    WPARAM wParam,\n        [in]    LPARAM lParam);\n\n    HRESULT ValidateDefaultSendAccount();\n\n    HRESULT AccountListDialog(\n        [in]    HWND hwnd,\n        [in]    ACCTLISTINFO *pinfo);\n\n    HRESULT Advise(\n        [in]    IImnAdviseAccount *pAdviseAccount,\n        [out]   DWORD *pdwConnection);\n\n    HRESULT Unadvise(\n        [in]    DWORD dwConnection);\n\n    HRESULT GetUniqueAccountName(\n        [in]    LPSTR szName,\n        [in]    UINT cch);\n\n    HRESULT InitEx(\n        [in]    IImnAdviseMigrateServer *pAdviseMigrateServer,\n        [in]    DWORD dwFlags);\n}\n\n[\n    object,\n    uuid(C43DFC6F-62BB-11D2-A727-00C04F79E7C8),\n    pointer_default(unique)\n]\ninterface IImnAccountManager2 : IImnAccountManager\n{\n    HRESULT InitUser(\n        [in]    IImnAdviseMigrateServer *pAdviseMigrateServer,\n        [in]    REFGUID rguidID,\n        [in]    DWORD dwFlags);\n\n    HRESULT GetIncompleteAccount(\n        [in]    ACCTTYPE AcctType,\n        [in,ref] LPSTR pszAccountId,\n        [in]    ULONG cchMax);\n\n    HRESULT SetIncompleteAccount(\n        [in]    ACCTTYPE AcctType,\n        [in]    LPCSTR pszAccountId);\n}\n\n[\n    object,\n    uuid(FD465484-1384-11D0-ABBD-0020AFDFD10A),\n    pointer_default(unique)\n]\ninterface IPropertyContainer : IUnknown\n{\n    typedef enum\n    {\n        TYPE_ERROR = 1000,\n        TYPE_DWORD,\n        TYPE_LONG,\n        TYPE_WORD,\n        TYPE_SHORT,\n        TYPE_BYTE,\n        TYPE_CHAR,\n        TYPE_FILETIME,\n        TYPE_STRING,\n        TYPE_BINARY,\n        TYPE_FLAGS,\n        TYPE_STREAM,\n        TYPE_WSTRING,\n        TYPE_BOOL,\n        TYPE_PASS,\n        TYPE_LAST\n    } PROPTYPE;\n\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef GetProp\")\ncpp_quote(\"#undef SetProp\")\ncpp_quote(\"#endif\")\n\n    HRESULT GetProp(\n        [in]    DWORD dwPropTag,\n        [in,size_is(*pcb),ref] BYTE *pb,\n        [in]    ULONG *pcb);\n\n    HRESULT GetPropDw(\n        [in]    DWORD dwPropTag,\n        [out]   DWORD *pdw);\n\n    HRESULT GetPropSz(\n        [in]    DWORD dwPropTag,\n        [in,ref] LPSTR psz,\n        [in]    ULONG cchMax);\n\n    HRESULT SetProp(\n        [in]    DWORD dwPropTag,\n        [in,size_is(cb)] BYTE *pb,\n        [in]    ULONG cb);\n\n    HRESULT SetPropDw(\n        [in]    DWORD dwPropTag,\n        [in]    DWORD dw);\n\n    HRESULT SetPropSz(\n        [in]    DWORD dwPropTag,\n        [in]    LPSTR psz);\n}\n\n[\n    object,\n    uuid(FD465482-1384-11D0-ABBD-0020AFDFD10A),\n    pointer_default(unique)\n]\ninterface IImnAccount : IPropertyContainer\n{\n    HRESULT Exist();\n\n    HRESULT SetAsDefault();\n\n    HRESULT Delete();\n\n    HRESULT SaveChanges();\n\n    HRESULT GetAccountType(\n        [out]   ACCTTYPE *pAcctType);\n\n    HRESULT GetServerTypes(\n        [out]   DWORD *pdwSrvTypes);\n\n    HRESULT ShowProperties(\n        [in]    HWND hwnd,\n        [in]    DWORD dwFlags);\n\n    HRESULT ValidateProperty(\n        [in]    DWORD dwPropTag,\n        [in,size_is(cb)] BYTE *pb,\n        [in]    ULONG cb);\n\n    HRESULT DoWizard(\n        [in]    HWND hwnd,\n        [in]    DWORD dwFlags);\n\n    HRESULT DoImportWizard(\n        [in]    HWND hwnd,\n        [in]    CLSID clsid,\n        [in]    DWORD dwFlags);\n}\n\ncpp_quote(\"HRESULT WINAPI HrCreateAccountManager(IImnAccountManager **ppAccountManager);\")\ncpp_quote(\"HRESULT WINAPI ValidEmailAddress(LPSTR lpAddress);\")\n"
  },
  {
    "path": "wine/windows/imnxport.idl",
    "content": "/*\n * Copyright 2006 Robert Shearman for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"imnact.idl\";\n\ninterface IInternetTransport;\ninterface ISMTPTransport;\ninterface IPOP3Transport;\ninterface IIMAPTransport;\n\n/* CLSIDs */\n\ncpp_quote(\"DEFINE_GUID(CLSID_IInternetMessageUrl, 0xca30cc91, 0xb1b3, 0x11d0, 0x85, 0xd0, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);\")\ncpp_quote(\"DEFINE_GUID(CLSID_ISMTPTransport, 0xfd853ce6, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);\")\ncpp_quote(\"DEFINE_GUID(CLSID_ISMTPTransport2, 0xdf2c7eC, 0x3435, 0x11d0, 0x81, 0xd0, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);\")\ncpp_quote(\"DEFINE_GUID(CLSID_IPOP3Transport, 0xfd853ce7, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);\")\ncpp_quote(\"DEFINE_GUID(CLSID_INNTPTransport, 0xfd853ce8, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);\")\ncpp_quote(\"DEFINE_GUID(CLSID_IRASTransport, 0xfd853ce9, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);\")\ncpp_quote(\"DEFINE_GUID(CLSID_IRangeList, 0xfd853cea, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);\")\ncpp_quote(\"DEFINE_GUID(CLSID_IIMAPTransport, 0xfd853ceb, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);\")\ncpp_quote(\"DEFINE_GUID(CLSID_IHTTPMailTransport, 0x5a580c11, 0xe5eb, 0x11d1, 0xa8, 0x6e, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);\")\ncpp_quote(\"DEFINE_GUID(CLSID_IPropFindRequest, 0xbb847b8a, 0x054a, 0x11d2, 0xa8, 0x94, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);\")\ncpp_quote(\"DEFINE_GUID(CLSID_IPropPatchRequest, 0xea678830, 0x235d, 0x11d2, 0xa8, 0xb6, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);\")\n\n/* Error Codes */\n\ncpp_quote(\"#ifndef HR_E\")\ncpp_quote(\"#define HR_E(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_INTERNET, n)\")\ncpp_quote(\"#endif\")\ncpp_quote(\"#ifndef HR_S\")\ncpp_quote(\"#define HR_S(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_INTERNET, n)\")\ncpp_quote(\"#endif\")\n\n/* General Error Codes */\ncpp_quote(\"#define IXP_E_LOAD_SICILY_FAILED     HR_E(0xCC00)\")\ncpp_quote(\"#define IXP_E_INVALID_CERT_CN        HR_E(0xCC01)\")\ncpp_quote(\"#define IXP_E_INVALID_CERT_DATE      HR_E(0xCC02)\")\ncpp_quote(\"#define IXP_E_ALREADY_CONNECTED      HR_E(0xCC03)\")\ncpp_quote(\"#define IXP_E_CONN                   HR_E(0xCC04)\")\ncpp_quote(\"#define IXP_E_NOT_CONNECTED          HR_E(0xCC05)\")\ncpp_quote(\"#define IXP_E_CONN_SEND              HR_E(0xCC06)\")\ncpp_quote(\"#define IXP_E_WOULD_BLOCK            HR_E(0xCC07)\")\ncpp_quote(\"#define IXP_E_INVALID_STATE          HR_E(0xCC08)\")\ncpp_quote(\"#define IXP_E_CONN_RECV              HR_E(0xCC09)\")\ncpp_quote(\"#define IXP_E_INCOMPLETE             HR_E(0xCC0A)\")\ncpp_quote(\"#define IXP_E_BUSY                   HR_E(0xCC0B)\")\ncpp_quote(\"#define IXP_E_NOT_INIT               HR_E(0xCC0C)\")\ncpp_quote(\"#define IXP_E_CANT_FIND_HOST         HR_E(0xCC0D)\")\ncpp_quote(\"#define IXP_E_FAILED_TO_CONNECT      HR_E(0xCC0E)\")\ncpp_quote(\"#define IXP_E_CONNECTION_DROPPED     HR_E(0xCC0F)\")\ncpp_quote(\"#define IXP_E_INVALID_ADDRESS        HR_E(0xCC10)\")\ncpp_quote(\"#define IXP_E_INVALID_ADDRESS_LIST   HR_E(0xCC11)\")\ncpp_quote(\"#define IXP_E_SOCKET_READ_ERROR      HR_E(0xCC12)\")\ncpp_quote(\"#define IXP_E_SOCKET_WRITE_ERROR     HR_E(0xCC13)\")\ncpp_quote(\"#define IXP_E_SCOKET_INIT_ERROR      HR_E(0xCC14)\")\ncpp_quote(\"#define IXP_E_SOCKET_CONNECT_ERROR   HR_E(0xCC15)\")\ncpp_quote(\"#define IXP_E_INVALID_ACCOUNT        HR_E(0xCC16)\")\ncpp_quote(\"#define IXP_E_USER_CANCEL            HR_E(0xCC17)\")\ncpp_quote(\"#define IXP_E_SICILY_LOGON_FAILED    HR_E(0xCC18)\")\ncpp_quote(\"#define IXP_E_TIMEOUT                HR_E(0xCC19)\")\ncpp_quote(\"#define IXP_E_SECURE_CONNECT_FAILED  HR_E(0xCC1A)\")\n\n/* SMTP Failure Statuses */\ncpp_quote(\"#define IXP_E_SMTP_RESPONSE_ERROR            HR_E(0xCC60)\")\ncpp_quote(\"#define IXP_E_SMTP_UNKNOWN_RESPONSE_CODE     HR_E(0xCC61)\")\ncpp_quote(\"#define IXP_E_SMTP_500_SYNTAX_ERROR          HR_E(0xCC62)\")\ncpp_quote(\"#define IXP_E_SMTP_501_PARAM_SYNTAX          HR_E(0xCC63)\")\ncpp_quote(\"#define IXP_E_SMTP_502_COMMAND_NOTIMPL       HR_E(0xCC64)\")\ncpp_quote(\"#define IXP_E_SMTP_503_COMMAND_SEQ           HR_E(0xCC65)\")\ncpp_quote(\"#define IXP_E_SMTP_504_COMMAND_PARAM_NOTIMPL HR_E(0xCC66)\")\ncpp_quote(\"#define IXP_E_SMTP_421_NOT_AVAILABLE         HR_E(0xCC67)\")\ncpp_quote(\"#define IXP_E_SMTP_450_MAILBOX_BUSY          HR_E(0xCC68)\")\ncpp_quote(\"#define IXP_E_SMTP_550_MAILBOX_NOT_FOUND     HR_E(0xCC69)\")\ncpp_quote(\"#define IXP_E_SMTP_451_ERROR_PROCESSING      HR_E(0xCC6A)\")\ncpp_quote(\"#define IXP_E_SMTP_551_USER_NOT_LOCAL        HR_E(0xCC6B)\")\ncpp_quote(\"#define IXP_E_SMTP_452_NO_SYSTEM_STORAGE     HR_E(0xCC6C)\")\ncpp_quote(\"#define IXP_E_SMTP_552_STORAGE_OVERFLOW      HR_E(0xCC6D)\")\ncpp_quote(\"#define IXP_E_SMTP_553_MAILBOX_NAME_SYNTAX   HR_E(0xCC6E)\")\ncpp_quote(\"#define IXP_E_SMTP_554_TRANSACT_FAILED       HR_E(0xCC6F)\")\n\n/* SMTP Success Statuses */\ncpp_quote(\"#define IXP_E_SMTP_211_SYSTEM_STATUS         HR_S(0xCC70)\")\ncpp_quote(\"#define IXP_E_SMTP_214_HELP_MESSAGE          HR_S(0xCC71)\")\ncpp_quote(\"#define IXP_E_SMTP_220_READY                 HR_S(0xCC72)\")\ncpp_quote(\"#define IXP_E_SMTP_221_CLOSING               HR_S(0xCC73)\")\ncpp_quote(\"#define IXP_E_SMTP_250_MAIL_ACTION_OKAY      HR_S(0xCC74)\")\ncpp_quote(\"#define IXP_E_SMTP_251_FORWARDING_MAIL       HR_S(0xCC75)\")\ncpp_quote(\"#define IXP_E_SMTP_354_START_MAIL_INPUT      HR_S(0xCC76)\")\ncpp_quote(\"#define IXP_E_SMTP_CONTINUE                  HR_S(0xCC77)\")\ncpp_quote(\"#define IXP_E_SMTP_334_AUTH_READY_RESPONSE   HR_S(0xCC78)\")\ncpp_quote(\"#define IXP_E_SMTP_245_AUTH_SUCCESS          HR_S(0xCC79)\")\n\n/* More SMTP Failure Statuses */\ncpp_quote(\"#define IXP_E_SMTP_REJECTED_SENDER           HR_E(0xCC78)\")\ncpp_quote(\"#define IXP_E_SMTP_REJECTED_RECIPIENTS       HR_E(0xCC79)\")\ncpp_quote(\"#define IXP_E_SMTP_NO_SENDER                 HR_E(0xCC7A)\")\ncpp_quote(\"#define IXP_E_SMTP_NO_RECIPIENTS             HR_E(0xCC7B)\")\ncpp_quote(\"#define IXP_E_SMTP_530_STARTTLS_REQUIRED     HR_E(0xCC7C)\")\ncpp_quote(\"#define IXP_E_SMTP_NO_STARTTLS_SUPPORT       HR_E(0xCC7D)\")\ncpp_quote(\"#define IXP_E_SMTP_NO_DSN_SUPPORT            HR_E(0xCC7E)\")\ncpp_quote(\"#define IXP_E_SMTP_454_STARTTLS_FAILED       HR_E(0xCC7F)\")\n\nconst SHORT CCHMAX_DOMAIN = 256;\nconst SHORT CCHMAX_PHONE_NUMBER = 128;\n\nconst DWORD DEFAULT_IMAP_PORT = 143;\nconst DWORD DEFAULT_POP3_PORT = 110;\nconst DWORD DEFAULT_SMTP_PORT = 25;\nconst DWORD DEFAULT_NNTP_PORT = 119;\n\ntypedef enum tagINETADDRTYPE\n{\n    ADDR_TO,\n    ADDR_FROM,\n    ADDR_DSN_NEVER = 16,\n    ADDR_DSN_SUCCESS = 32,\n    ADDR_DSN_FAILURE = 64,\n    ADDR_DSN_DELAY = 128\n} INETADDRTYPE;\n\nconst DWORD ADDR_TOFROM_MASK = 0x1;\nconst DWORD ADDR_DSN_MASK = 0xf0;\n\ntypedef enum tagDSNRET\n{\n    DSNRET_DEFAULT,\n    DSNRET_HDRS,\n    DSNRET_FULL,\n} DSNRET;\n\ntypedef struct tagINETADDR\n{\n    INETADDRTYPE addrtype;\n    CHAR szEmail[CCHMAX_EMAIL_ADDRESS];\n} INETADDR, *LPINETADDR;\n\ntypedef struct tagINETADDRLIST\n{\n    ULONG cAddress;\n    LPINETADDR prgAddress;\n} INETADDRLIST, *LPINETADDRLIST;\n\ntypedef enum tagRASCONNTYPE\n{\n    RAS_CONNECT_LAN,\n    RAS_CONNECT_MANUAL,\n    RAS_CONNECT_RAS\n} RASCONNTYPE;\n\ntypedef enum tagHTTPMAILPROPTYPE\n{\n    HTTPMAIL_PROP_INVALID,\n    HTTPMAIL_PROP_ADBAR,\n    HTTPMAIL_PROP_CONTACTS,\n    HTTPMAIL_PROP_INBOX,\n    HTTPMAIL_PROP_OUTBOX,\n    HTTPMAIL_PROP_SENDMSG,\n    HTTPMAIL_PROP_SENTITEMS,\n    HTTPMAIL_PROP_DELETEDITEMS,\n    HTTPMAIL_PROP_DRAFTS,\n    HTTPMAIL_PROP_MSGFOLDERROOT,\n    HTTPMAIL_PROP_SIG,\n    HTTPMAIL_PROP_LAST\n} HTTPMAILPROPTYPE;\n\ntypedef enum tagHTTPMAILSPECIALFOLDER\n{\n    HTTPMAIL_SF_NONE,\n    HTTPMAIL_SF_UNRECOGNIZED,\n    HTTPMAIL_SF_INBOX,\n    HTTPMAIL_SF_DELETEDITEMS,\n    HTTPMAIL_SF_DRAFTS,\n    HTTPMAIL_SF_OUTBOX,\n    HTTPMAIL_SF_SENTITEMS,\n    HTTPMAIL_SF_CONTACTS,\n    HTTPMAIL_SF_CALENDAR,\n    HTTPMAIL_SF_MSNPROMO,\n    HTTPMAIL_SF_LAST\n} HTTPMAILSPECIALFOLDER;\n\ntypedef enum tagHTTPMAILCONTACTTYPE\n{\n    HTTPMAIL_CT_CONTACT,\n    HTTPMAIL_CT_GROUP,\n    HTTPMAIL_CT_LAST\n} HTTPMAILCONTACTTYPE;\n\nconst DWORD DAVNAMESPACE_UNKNOWN = 0xFFFFFFFF;\nconst DWORD DAVNAMESPACE_DAV = 0;\nconst DWORD DAVNAMESPACE_HOTMAIL = 1;\nconst DWORD DAVNAMESPACE_HTTPMAIL = 2;\nconst DWORD DAVNAMESPACE_MAIL = 3;\nconst DWORD DAVNAMESPACE_CONTACTS = 4;\n\ncpp_quote(\"#define ISF_SMTP_USEIPFORHELO        0x01\")\ncpp_quote(\"#define ISF_ALWAYSPROMPTFORPASSWORD  0x02\")\n/* for SMTP - send EHLO and use STARTTLS if available: */\ncpp_quote(\"#define ISF_SSLONSAMEPORT            0x04\")\ncpp_quote(\"#define ISF_QUERYDSNSUPPORT          0x08\")\n/* for SMTP - send EHLO and use AUTH if available: */\ncpp_quote(\"#define ISF_QUERYAUTHSUPPORT         0x10\")\n\ntypedef struct INETSERVER\n{\n    CHAR szAccount[CCHMAX_ACCOUNT_NAME];\n    CHAR szUserName[CCHMAX_USERNAME];\n    CHAR szPassword[CCHMAX_PASSWORD];\n    CHAR szServerName[CCHMAX_SERVER_NAME];\n    CHAR szConnectoid[CCHMAX_CONNECTOID];\n    RASCONNTYPE rasconntype;\n    DWORD dwPort;\n    BOOL fSSL;\n    BOOL fTrySicily;\n    DWORD dwTimeout;\n    DWORD dwFlags;\n} INETSERVER, *LPINETSERVER;\n\ntypedef enum tagIXPTYPE\n{\n    IXP_NNTP,\n    IXP_SMTP,\n    IXP_POP3,\n    IXP_IMAP,\n    IXP_RAS,\n    IXP_HTTPMail\n} IXPTYPE;\n\ntypedef enum tagIXPSTATUS\n{\n    IXP_FINDINGHOST,\n    IXP_CONNECTING,\n    IXP_SECURING,\n    IXP_CONNECTED,\n    IXP_AUTHORIZING,\n    IXP_AUTHRETRY,\n    IXP_AUTHORIZED,\n    IXP_DISCONNECTING,\n    IXP_DISCONNECTED,\n    IXP_LAST\n} IXPSTATUS;\n\nconst DWORD DEPTH_INFINITY = 0xFFFFFFFE;\n\ntypedef DWORD MEMBERINFOFLAGS;\n\nconst MEMBERINFOFLAGS HTTP_MEMBERINFO_COMMONPROPS = 0x0;\nconst MEMBERINFOFLAGS HTTP_MEMBERINFO_FOLDERPROPS = 0x1;\nconst MEMBERINFOFLAGS HTTP_MEMBERINFO_MESSAGEPROPS = 0x2;\nconst MEMBERINFOFLAGS HTTP_MEMBERINFO_ALLPROPS = HTTP_MEMBERINFO_FOLDERPROPS | HTTP_MEMBERINFO_MESSAGEPROPS;\n\ntypedef DWORD IMAP_MSGFLAGS;\n\nconst IMAP_MSGFLAGS IMAP_MSG_NOFLAGS = 0x00;\nconst IMAP_MSGFLAGS IMAP_MSG_ANSWERED = 0x01;\nconst IMAP_MSGFLAGS IMAP_MSG_FLAGGED = 0x02;\nconst IMAP_MSGFLAGS IMAP_MSG_DELETED = 0x04;\nconst IMAP_MSGFLAGS IMAP_MSG_SEEN = 0x08;\nconst IMAP_MSGFLAGS IMAP_MSG_DRAFT = 0x10;\nconst IMAP_MSGFLAGS IMAP_MSG_ALLFLAGS = 0x1f;\n\n[\n    object,\n    uuid(CA30F3FF-C9AC-11D1-9A3A-00C04FA309D4),\n    local\n]\ninterface ITransportCallbackService : IUnknown\n{\n    HRESULT GetParentWindow(\n        [in]    DWORD dwReserved,\n        [out]   HWND *phwndParent);\n\n    HRESULT GetAccount(\n        [out]   LPDWORD pdwServerType,\n        [out]   IImnAccount **ppAccount);\n}\n\n[\n    object,\n    uuid(0DF2C7E1-3435-11D0-81D0-00C04FD85AB4),\n    local\n]\ninterface ITransportCallback : IUnknown\n{\n    typedef struct tagIXPRESULT\n    {\n        HRESULT hrResult;\n        LPSTR pszResponse;\n        UINT uiServerError;\n        HRESULT hrServerError;\n        DWORD dwSocketError;\n        LPSTR pszProblem;\n    } IXPRESULT, *LPIXPRESULT;\n\n    typedef enum tagCMDTYPE\n    {\n        CMD_SEND,\n        CMD_RESP\n    } CMDTYPE;\n\n    HRESULT OnTimeout(\n        [in,out]    DWORD *pdwTimeout,\n        [in]        IInternetTransport *pTransport);\n\n    HRESULT OnLogonPrompt(\n        [in,out]    LPINETSERVER pInetServer,\n        [in]        IInternetTransport *pTransport);\n\n    INT OnPrompt(\n        [in]    HRESULT hrError,\n        [in]    LPCSTR pszText,\n        [in]    LPCSTR pszCaption,\n        [in]    UINT uType,\n        [in]    IInternetTransport *pTransport);\n\n    HRESULT OnStatus(\n        [in]    IXPSTATUS ixpstatus,\n        [in]    IInternetTransport *pTransport);\n\n    HRESULT OnError(\n        [in]    IXPSTATUS ixpstatus,\n        [in]    LPIXPRESULT pResult,\n        [in]    IInternetTransport *pTransport);\n\n    HRESULT OnCommand(\n        [in]    CMDTYPE cmdtype,\n        [in]    LPSTR pszLine,\n        [in]    HRESULT hrResponse,\n        [in]    IInternetTransport *pTransport);\n}\n\n[\n    object,\n    uuid(1F636C01-364E-11D0-81D3-00C04FD85AB4),\n    local\n]\ninterface IInternetTransport : IUnknown\n{\n    const boolean iitAUTHENTICATE = TRUE;\n    const boolean iitDONT_AUTHENTICATe = FALSE;\n    const boolean iitENABLE_ONCOMMAND = TRUE;\n    const boolean iitDISABLE_ONCOMMAND = FALSE;\n\n    typedef enum tagIXPISSTATE\n    {\n        IXP_IS_CONNECTED,\n        IXP_IS_BUSY,\n        IXP_IS_READY,\n        IXP_IS_AUTHENTICATED\n    } IXPISSTATE;\n\n    HRESULT GetServerInfo(\n        [in,out]    LPINETSERVER pInetServer);\n\n    IXPTYPE GetIXPType();\n\n    HRESULT IsState(\n        [in]    IXPISSTATE isstate);\n\n    HRESULT InetServerFromAccount(\n        [in]        IImnAccount *pAccount,\n        [in,out]    LPINETSERVER pInetServer);\n\n    HRESULT Connect(\n        [in]    LPINETSERVER pInetServer,\n        [in]    boolean fAuthenticate,\n        [in]    boolean fCommandLogging);\n\n    HRESULT HandsOffCallback();\n\n    HRESULT Disconnect();\n\n    HRESULT DropConnection();\n\n    HRESULT GetStatus(\n        [out]   IXPSTATUS *pCurrentStatus);\n}\n\n[\n    object,\n    uuid(1F636C02-364E-11D0-81D3-00C04FD85AB4),\n    local\n]\ninterface ISMTPCallback : ITransportCallback\n{\n    typedef enum tagSMTPCOMMAND\n    {\n        SMTP_NONE,\n        SMTP_BANNER,\n        SMTP_CONNECTED,\n        SMTP_SEND_MESSAGE,\n        SMTP_AUTH,\n        SMTP_EHLO,\n        SMTP_HELO,\n        SMTP_MAIL,\n        SMTP_RCPT,\n        SMTP_RSET,\n        SMTP_QUIT,\n        SMTP_DATA,\n        SMTP_DOT,\n        SMTP_SEND_STREAM,\n        SMTP_CUSTOM\n    } SMTPCOMMAND;\n\n    typedef struct tagSMTPSTREAM\n    {\n        DWORD cbIncrement;\n        DWORD cbCurrent;\n        DWORD cbTotal;\n    } SMTPSTREAM, *LPSMTPSTREAM;\n\n    typedef struct tagSMTPRESPONSE\n    {\n        SMTPCOMMAND command;\n        BOOL fDone;\n        IXPRESULT rIxpResult;\n        ISMTPTransport *pTransport;\n\n        [switch_type(SMTPCOMMAND), switch_is(command)]\n        union\n        {\n        [case(SMTP_SEND_STREAM)]    SMTPSTREAM rStreamInfo;\n        [default];\n        };\n    } SMTPRESPONSE, *LPSMTPRESPONSE;\n\n    HRESULT OnResponse(\n        [in] LPSMTPRESPONSE pResponse);\n}\n\n[\n    object,\n    uuid(0DF2C7E2-3435-11D0-81D0-00C04FD85AB4),\n    local\n]\ninterface ISMTPTransport : IInternetTransport\n{\n    typedef struct tagSMTPMESSAGE\n    {\n        ULONG cbSize;\n        LPSTREAM pstmMsg;\n        INETADDRLIST rAddressList;\n    } SMTPMESSAGE, *LPSMTPMESSAGE;\n\n    HRESULT InitNew(\n        [in]    LPSTR pszLogFilePath,\n        [in]    ISMTPCallback *pCallback);\n\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef SendMessage\")\ncpp_quote(\"#endif\")\n\n    HRESULT SendMessage(\n        [in]    LPSMTPMESSAGE pMessage);\n\n    HRESULT CommandMAIL(\n        [in]    LPSTR pszEmailFrom);\n\n    HRESULT CommandRCPT(\n        [in]    LPSTR pszEmailTo);\n\n    HRESULT CommandEHLO();\n\n    HRESULT CommandHELO();\n\n    HRESULT CommandAUTH(\n        [in]    LPSTR pszAuthType);\n\n    HRESULT CommandQUIT();\n\n    HRESULT CommandRSET();\n\n    HRESULT CommandDATA();\n\n    HRESULT CommandDOT();\n\n    HRESULT SendDataStream(\n        [in]    IStream *pStream,\n        [in]    ULONG cbSize);\n}\n\n[\n    object,\n    uuid(0DF2C7EC-3435-11D0-81D0-00C04FD85AB4),\n    local\n]\ninterface ISMTPTransport2 : ISMTPTransport\n{\n    typedef struct tagSMTPMESSAGE2\n    {\n        SMTPMESSAGE smtpMsg;\n        LPSTR pszDSNENVID;\n        DSNRET dsnRet;\n        DWORD dwReserved;\n        DWORD dwReserved2;\n    } SMTPMESSAGE2, *LPSMTPMESSAGE2;\n\n    HRESULT SetWindow();\n\n    HRESULT ResetWindow();\n\n    HRESULT SendMessage2(\n        [in]    LPSMTPMESSAGE2 pMessage);\n\n    HRESULT CommandRCPT2(\n        [in]    LPSTR pszEmailTo,\n        [in]    INETADDRTYPE atDSN);\n}\n\n/* FIXME: IDAVNamespaceArbiter, IPropPatchRequest, IPropFindRequest, IPropFindMultiResponse, IPropFindResponse, IHTTPMailCallback, IHTTPMailTransport */\n\n[\n    object,\n    uuid(0DF2C7E3-3435-11D0-81D0-00C04FD85AB4),\n    local\n]\ninterface IPOP3Callback : ITransportCallback\n{\n    typedef enum tagPOP3COMMAND\n    {\n        POP3_NONE,\n        POP3_BANNER,\n        POP3_CONNECTED,\n        POP3_USER,\n        POP3_PASS,\n        POP3_AUTH,\n        POP3_UIDL,\n        POP3_STAT,\n        POP3_LIST,\n        POP3_DELE,\n        POP3_RETR,\n        POP3_TOP,\n        POP3_NOOP,\n        POP3_QUIT,\n        POP3_RSET,\n        POP3_CUSTOM\n    } POP3COMMAND;\n\n    typedef struct tagPOP3RETR\n    {\n        BOOL fHeader;\n        BOOL fBody;\n        DWORD dwPopId;\n        DWORD cbSoFar;\n        LPSTR pszLines;\n        ULONG cbLines;\n    } POP3RETR, *LPPOP3RETR;\n\n    typedef struct tagPOP3TOP\n    {\n        BOOL fHeader;\n        BOOL fBody;\n        DWORD dwPopId;\n        DWORD cPreviewLines;\n        DWORD cbSoFar;\n        LPSTR pszLines;\n        ULONG cbLines;\n    } POP3TOP, *LPPOP3TOP;\n\n    typedef struct tagPOP3LIST\n    {\n        DWORD dwPopId;\n        DWORD cbSize;\n    } POP3LIST, *LPPOP3LIST;\n\n    typedef struct tagPOP3UIDL\n    {\n        DWORD dwPopId;\n        LPSTR pszUidl;\n    } POP3UIDL, *LPPOP3UIDL;\n\n    typedef struct tagPOP3STAT\n    {\n        DWORD cMessages;\n        DWORD cbMessages;\n    } POP3STAT, *LPPOP3STAT;\n\n    typedef struct tagPOP3RESPONSE\n    {\n        POP3COMMAND command;\n        BOOL fDone;\n        IXPRESULT rIxpResult;\n        IPOP3Transport *pTransport;\n        BOOL fValidInfo;\n        [switch_type(POP3COMMAND), switch_is(command)]\n        union\n        {\n        [case(POP3_UIDL)] POP3UIDL rUidlInfo;\n        [case(POP3_STAT)] POP3STAT rStatInfo;\n        [case(POP3_LIST)] POP3LIST rListInfo;\n        [case(POP3_DELE)] DWORD dwPopId;\n        [case(POP3_RETR)] POP3RETR rRetrInfo;\n        [case(POP3_TOP)]  POP3TOP rTopInfo;\n        [default];\n        };\n    } POP3RESPONSE, *LPPOP3RESPONSE;\n\n    HRESULT OnResponse(\n        [in]    LPPOP3RESPONSE pResponse);\n}\n\n[\n    object,\n    uuid(0DF2C7E4-3435-11D0-81D0-00C04FD85AB4),\n    local\n]\ninterface IPOP3Transport : IInternetTransport\n{\n    typedef enum tagPOP3CMDTYPE\n    {\n        POP3CMD_GET_POPID,\n        POP3CMD_GET_MARKED,\n        POP3CMD_GET_ALL\n    } POP3CMDTYPE;\n\n    typedef enum tagPOP3MARKTYPE\n    {\n        POP3_MARK_FOR_TOP = 0x01,\n        POP3_MARK_FOR_RETR = 0x02,\n        POP3_MARK_FOR_DELE = 0x04,\n        POP3_MARK_FOR_UIDL = 0x08,\n        POP3_MARK_FOR_LIST = 0x10\n    } POP3MARKTYPE;\n\n    HRESULT InitNew(\n        [in]    LPSTR pszLogFilePath,\n        [in]    IPOP3Callback *pCallback);\n\n    HRESULT MarkItem(\n        [in]    POP3MARKTYPE marktype,\n        [in]    DWORD dwPopId,\n        [in]    boolean fMarked);\n\n    HRESULT CommandAUTH(\n        [in]    LPSTR pszAuthType);\n\n    HRESULT CommandUSER(\n        [in]    LPSTR pszUserName);\n\n    HRESULT CommandPASS(\n        [in]    LPSTR pszPassword);\n\n    HRESULT CommandLIST(\n        [in]    POP3CMDTYPE cmdtype,\n        [in]    DWORD dwPopId);\n\n    HRESULT CommandTOP(\n        [in]    POP3CMDTYPE cmdtype,\n        [in]    DWORD dwPopId,\n        [in]    DWORD cPreviewLines);\n\n    HRESULT CommandQUIT();\n\n    HRESULT CommandSTAT();\n\n    HRESULT CommandNOOP();\n\n    HRESULT CommandRSET();\n\n    HRESULT CommandUIDL(\n        [in]    POP3CMDTYPE cmdtype,\n        [in]    DWORD dwPopId);\n\n    HRESULT CommandDELE(\n        [in]    POP3CMDTYPE cmdtype,\n        [in]    DWORD dwPopId);\n\n    HRESULT CommandRETR(\n        [in]    POP3CMDTYPE cmdtype,\n        [in]    DWORD dwPopId);\n}\n\n/* FIXME: INNTPCallback, INNTPTransport */\n\n[\n    object,\n    uuid(8C438160-4EF6-11d0-874F-00AA00530EE9),\n    local,\n]\ninterface IRangeList : IUnknown\n{\n    const ULONG RL_RANGE_ERROR = ((ULONG)-1);\n    const ULONG RL_LAST_MESSAGE = ((ULONG)-1);\n\n    HRESULT Clear();\n\n    HRESULT IsInRange(\n        [in]    const ULONG value);\n\n    HRESULT Min(\n        [out]   ULONG *pulMin);\n\n    HRESULT Max(\n        [out]   ULONG *pulMax);\n\n    HRESULT Save(\n        [out]   byte **ppbDestination,\n        [out]   ULONG *pulSizeOfDestination);\n\n    HRESULT Load(\n        [in, size_is(ulSizeOfSource)]   byte *pbSource,\n        [in]    const ULONG ulSizeOfSource);\n\n    HRESULT AddRange(\n        [in]    const ULONG low,\n        [in]    const ULONG high);\n\n    HRESULT AddSingleValue(\n        [in]    const ULONG value);\n\n    HRESULT AddRangeList(\n        [in]    const IRangeList *prl);\n\n    HRESULT DeleteRange(\n        [in]    const ULONG low,\n        [in]    const ULONG high);\n\n    HRESULT DeleteSingleValue(\n        [in]    const ULONG value);\n\n    HRESULT DeleteRangeList(\n        [in]    const IRangeList *prl);\n\n    HRESULT MinOfRange(\n        [in]    const ULONG value,\n        [out]   ULONG *pulMinOfRange);\n\n    HRESULT MaxOfRange(\n        [in]    const ULONG value,\n        [out]   ULONG *pulMaxOfRange);\n\n    HRESULT RangeToIMAPString(\n        [out]   LPSTR *ppszDestination,\n        [out]   LPDWORD pdwLengthOfDestination);\n\n    HRESULT Next(\n        [in]    const ULONG current,\n        [out]   ULONG *pulNext);\n\n    HRESULT Prev(\n        [in]    const ULONG current,\n        [out]   ULONG *pulPrev);\n\n    HRESULT Cardinality(\n        [out]   ULONG *pulCardinality);\n\n    HRESULT CardinalityFrom(\n        [in]    const ULONG ulStartPoint,\n        [out]   ULONG *pulCardinalityFrom);\n}\n\n[\n    object,\n    uuid(E9E9D8A3-4EDD-11d0-874F-00AA00530EE9),\n    local\n]\ninterface IIMAPCallback : ITransportCallback\n{\n    typedef DWORD IMAP_MBOXFLAGS;\n    const IMAP_MBOXFLAGS IMAP_MBOX_NOFLAGS = 0x0;\n    const IMAP_MBOXFLAGS IMAP_MBOX_MARKED = 0x1;\n    const IMAP_MBOXFLAGS IMAP_MBOX_NOINFERIORS = 0x2;\n    const IMAP_MBOXFLAGS IMAP_MBOX_NOSELECT = 0x4;\n    const IMAP_MBOXFLAGS IMAP_MBOX_UNMARKED = 0x8;\n    const IMAP_MBOXFLAGS IMAP_MBOX_ALLFLAGS = 0xf;\n\n    typedef enum tagIMAP_RESPONSE_TYPE\n    {\n        irtERROR_NOTIFICATION,\n        irtCOMMAND_COMPLETION,\n        irtSERVER_ALERT,\n        irtPARSE_ERROR,\n        irtMAILBOX_UPDATE,\n        irtDELETED_MSG,\n        irtFETCH_BODY,\n        irtUPDATE_MSG,\n        irtAPPLICABLE_FLAGS,\n        irtPERMANENT_FLAGS,\n        irtUIDVALIDITY,\n        irtREADWRITE_STATUS,\n        irtTRYCREATE,\n        irtSEARCH,\n        irtMAILBOX_LISTING,\n        irtMAILBOX_STATUS,\n        irtAPPEND_PROGRESS,\n        irtUPDATE_MSG_EX\n    } IMAP_RESPONSE_TYPE;\n\n    typedef struct tagFETCH_BODY_PART\n    {\n        DWORD dwMsgSeqNum;\n        LPSTR pszBodyTag;\n        DWORD dwTotalBytes;\n        DWORD dwSizeOfData;\n        DWORD dwOffset;\n        BOOL fDone;\n        LPSTR pszData;\n        LPARAM lpFetchCookie1;\n        LPARAM lpFetchCookie2;\n    } FETCH_BODY_PART;\n\n    typedef struct tagFETCH_CMD_RESULTS\n    {\n        DWORD dwMsgSeqNum;\n        BOOL bMsgFlags;\n        IMAP_MSGFLAGS mfMsgFlags;\n        BOOL bRFC822Size;\n        DWORD dwRFC822Size;\n        BOOL bUID;\n        DWORD dwUID;\n        BOOL bInternalDate;\n        FILETIME ftInternalDate;\n        LPARAM lpFetchCookie1;\n        LPARAM lpFetchCookie2;\n    } FETCH_CMD_RESULTS;\n\n    typedef struct tagIMAPADDR\n    {\n        LPSTR pszName;\n        LPSTR pszADL;\n        LPSTR pszMailbox;\n        LPSTR pszHost;\n        struct tagIMAPADDR *pNext;\n    } IMAPADDR;\n\n    typedef struct tagFETCH_CMD_RESULTS_EX\n    {\n        DWORD dwMsgSeqNum;\n        BOOL bMsgFlags;\n        IMAP_MSGFLAGS mfMsgFlags;\n        BOOL bRFC822Size;\n        DWORD dwRFC822Size;\n        BOOL bUID;\n        DWORD dwUID;\n        BOOL bInternalDate;\n        FILETIME ftInternalDate;\n        LPARAM lpFetchCookie1;\n        LPARAM lpFetchCookie2;\n        BOOL bEnvelope;\n        FILETIME ftENVDate;\n        LPSTR pszENVSubject;\n        IMAPADDR *piaENVFrom;\n        IMAPADDR *piaENVSender;\n        IMAPADDR *piaENVReplyTo;\n        IMAPADDR *piaENVTo;\n        IMAPADDR *piaENVCc;\n        IMAPADDR *piaENVBcc;\n        LPSTR pszENVInReplyTo;\n        LPSTR pszENVMessageID;\n        DWORD dwReserved1;\n        DWORD dwReserved2;\n        DWORD dwReserved3;\n    } FETCH_CMD_RESULTS_EX;\n\n    typedef struct tagMBOX_MSGCOUNT\n    {\n        BOOL bGotExistsResponse;\n        DWORD dwExists;\n        BOOL bGotRecentResponse;\n        DWORD dwRecent;\n        BOOL bGotUnseenResponse;\n        DWORD dwUnseen;\n    } MBOX_MSGCOUNT;\n\n    typedef struct tagIMAP_LISTLSUB_RESPONSE\n    {\n        LPSTR pszMailboxName;\n        IMAP_MBOXFLAGS imfMboxFlags;\n        char cHierarchyChar;\n    } IMAP_LISTLSUB_RESPONSE;\n\n    typedef struct tagIMAP_STATUS_RESPONSE\n    {\n        LPSTR pszMailboxName;\n        BOOL fMessages;\n        DWORD dwMessages;\n        BOOL fRecent;\n        DWORD dwRecent;\n        BOOL fUIDNext;\n        DWORD dwUIDNext;\n        BOOL fUIDValidity;\n        DWORD dwUIDValidity;\n        BOOL fUnseen;\n        DWORD dwUnseen;\n    } IMAP_STATUS_RESPONSE;\n\n    typedef struct tagAPPEND_PROGRESS\n    {\n        DWORD dwUploaded;\n        DWORD dwTotal;\n    } APPEND_PROGRESS;\n\n    typedef [switch_type(IMAP_RESPONSE_TYPE)] union tagIMAP_RESPONSE_DATA\n    {\n        [case (irtMAILBOX_UPDATE)] MBOX_MSGCOUNT *pmcMsgCount;\n        [case (irtDELETED_MSG)] DWORD dwDeletedMsgSeqNum;\n        [case (irtFETCH_BODY)] FETCH_BODY_PART *pFetchBodyPart;\n        [case (irtUPDATE_MSG)] FETCH_CMD_RESULTS *pFetchResults;\n        [case (irtAPPLICABLE_FLAGS, irtPERMANENT_FLAGS)] IMAP_MSGFLAGS imfImapMessageFlags;\n        [case (irtUIDVALIDITY)] DWORD dwUIDValidity;\n        [case (irtREADWRITE_STATUS)] BOOL bReadWrite;\n        [case (irtSEARCH)] IRangeList *prlSearchResults;\n        [case (irtMAILBOX_LISTING)] IMAP_LISTLSUB_RESPONSE illrdMailboxListing;\n        [case (irtMAILBOX_STATUS)] IMAP_STATUS_RESPONSE *pisrStatusResponse;\n        [case (irtAPPEND_PROGRESS)] APPEND_PROGRESS *papAppendProgress;\n        [case (irtUPDATE_MSG_EX)] FETCH_CMD_RESULTS_EX *pFetchResultsEx;\n    } IMAP_RESPONSE_DATA;\n\n    typedef struct tagIMAP_RESPONSE\n    {\n        WPARAM wParam;\n        LPARAM lParam;\n        HRESULT hrResult;\n        LPSTR lpszResponseText;\n        IMAP_RESPONSE_TYPE irtResponseType;\n        [switch_is(irtResponseType)] IMAP_RESPONSE_DATA irdResponseData;\n    } IMAP_RESPONSE;\n\n    HRESULT OnResponse([in] const IMAP_RESPONSE *pirIMAPResponse);\n}\n\n[\nobject,\nuuid(E9E9D8A8-4EDD-11d0-874F-00AA00530EE9),\nlocal,\n]\ninterface IIMAPTransport : IInternetTransport\n{\n    const DWORD IMAP_CAPABILITY_IMAP4 = 0x1;\n    const DWORD IMAP_CAPABILITY_IMAP4rev1 = 0x2;\n    const DWORD IMAP_CAPABILITY_IDLE = 0x4;\n    const DWORD IMAP_CAPABILITY_ALLFLAGS = 0x7;\n\n    HRESULT InitNew(\n        [in]    LPSTR pszLogFilePath,\n        [in]    IIMAPCallback *pCBHandler);\n\n    HRESULT NewIRangeList(\n        [out]   IRangeList **pprlNewRangeList);\n\n    HRESULT Capability(\n        [out]   DWORD *pdwCapabilityFlags);\n\n    HRESULT Select(\n        [in]    WPARAM wParam,\n        [in]    LPARAM lParam,\n        [in]    IIMAPCallback *pCBHandler,\n        [in]    LPSTR lpszMailboxName);\n\n    HRESULT Examine(\n        [in]    WPARAM wParam,\n        [in]    LPARAM lParam,\n        [in]    IIMAPCallback *pCBHandler,\n        [in]    LPSTR lpszMailboxName);\n\n    HRESULT Create(\n        [in]    WPARAM wParam,\n        [in]    LPARAM lParam,\n        [in]    IIMAPCallback *pCBHandler,\n        [in]    LPSTR lpszMailboxName);\n\n    HRESULT Delete(\n        [in]    WPARAM wParam,\n        [in]    LPARAM lParam,\n        [in]    IIMAPCallback *pCBHandler,\n        [in]    LPSTR lpszMailboxName);\n\n    HRESULT Rename(\n        [in]    WPARAM wParam,\n        [in]    LPARAM lParam,\n        [in]    IIMAPCallback *pCBHandler,\n        [in]    LPSTR lpszMailboxName,\n        [in]    LPSTR lpszNewMailboxName);\n\n    HRESULT Subscribe(\n        [in]    WPARAM wParam,\n        [in]    LPARAM lParam,\n        [in]    IIMAPCallback *pCBHandler,\n        [in]    LPSTR lpszMailboxName);\n\n    HRESULT Unsubscribe(\n        [in]    WPARAM wParam,\n        [in]    LPARAM lParam,\n        [in]    IIMAPCallback *pCBHandler,\n        [in]    LPSTR lpszMailboxName);\n\n    HRESULT List(\n        [in]    WPARAM wParam,\n        [in]    LPARAM lParam,\n        [in]    IIMAPCallback *pCBHandler,\n        [in]    LPSTR lpszMailboxNameReference,\n        [in]    LPSTR lpszMailboxNamePattern);\n\n    HRESULT Lsub(\n        [in]    WPARAM wParam,\n        [in]    LPARAM lParam,\n        [in]    IIMAPCallback *pCBHandler,\n        [in]    LPSTR lpszMailboxNameReference,\n        [in]    LPSTR lpszMailboxNamePattern);\n\n    HRESULT Append(\n        [in]    WPARAM wParam,\n        [in]    LPARAM lParam,\n        [in]    IIMAPCallback *pCBHandler,\n        [in]    LPSTR lpszMailboxName,\n        [in]    LPSTR lpszMessageFlags,\n        [in]    FILETIME ftMessageDateTime,\n        [in]    LPSTREAM lpstmMessageToSave);\n\n    HRESULT Close(\n        [in]    WPARAM wParam,\n        [in]    LPARAM lParam,\n        [in]    IIMAPCallback *pCBHandler);\n\n    HRESULT Expunge(\n        [in]    WPARAM wParam,\n        [in]    LPARAM lParam,\n        [in]    IIMAPCallback *pCBHandler);\n\n    HRESULT Search(\n        [in]    WPARAM wParam,\n        [in]    LPARAM lParam,\n        [in]    IIMAPCallback *pCBHandler,\n        [in]    LPSTR lpszSearchCriteria,\n        [in]    boolean bReturnUIDs,\n        [in]    IRangeList *pMsgRange,\n        [in]    boolean bUIDRangeList);\n\n    HRESULT Fetch(\n        [in]    WPARAM wParam,\n        [in]    LPARAM lParam,\n        [in]    IIMAPCallback *pCBHandler,\n        [in]    IRangeList *pMsgRange,\n        [in]    boolean bUIDMsgRange,\n        [in]    LPSTR lpszFetchArgs);\n\n    HRESULT Store(\n        [in]    WPARAM wParam,\n        [in]    LPARAM lParam,\n        [in]    IIMAPCallback *pCBHandler,\n        [in]    IRangeList *pMsgRange,\n        [in]    boolean bUIDRangeList,\n        [in]    LPSTR lpszStoreArgs);\n\n    HRESULT Copy(\n        [in]    WPARAM wParam,\n        [in]    LPARAM lParam,\n        [in]    IIMAPCallback *pCBHandler,\n        [in]    IRangeList *pMsgRange,\n        [in]    boolean bUIDRangeList,\n        [in]    LPSTR lpszMailboxName);\n\n    HRESULT Noop(\n        [in]    WPARAM wParam,\n        [in]    LPARAM lParam,\n        [in]    IIMAPCallback *pCBHandler);\n\n    HRESULT ResizeMsgSeqNumTable(\n        [in]    DWORD dwSizeOfMbox);\n\n    HRESULT UpdateSeqNumToUID(\n        [in]    DWORD dwMsgSeqNum,\n        [in]    DWORD dwUID);\n\n    HRESULT RemoveSequenceNum(\n        [in]    DWORD dwDeletedMsgSeqNum);\n\n    HRESULT MsgSeqNumToUID(\n        [in]    DWORD dwMsgSeqNum,\n        [out]   DWORD *pdwUID);\n\n    HRESULT GetMsgSeqNumToUIDArray(\n        [out]   DWORD **ppdwMsgSeqNumToUIDArray,\n        [out]   DWORD *pdwNumberOfElements);\n\n    HRESULT GetHighestMsgSeqNum(\n        [out]   DWORD *pdwHighestMSN);\n\n    HRESULT ResetMsgSeqNumToUID();\n\n    HRESULT SetDefaultCBHandler(\n        [in]    IIMAPCallback *pCBHandler);\n\n    HRESULT Status(\n        [in]    WPARAM wParam,\n        [in]    LPARAM lParam,\n        [in]    IIMAPCallback *pCBHandler,\n        [in]    LPSTR pszMailboxName,\n        [in]    LPSTR pszStatusCmdArgs);\n}\n\n#if 0\ncpp_quote(\"HRESULT WINAPI CreateRASTransport(IRASTransport **ppTransport);\")\ncpp_quote(\"HRESULT WINAPI CreateNNTPTransport(INNTPTransport **ppTransport);\")\ncpp_quote(\"HRESULT WINAPI CreateIMAPTransport2(IIMAPTransport2 **ppTransport);\")\n#endif\ncpp_quote(\"HRESULT WINAPI CreateRangeList(IRangeList **ppRangeList);\")\ncpp_quote(\"HRESULT WINAPI CreateSMTPTransport(ISMTPTransport **ppTransport);\")\ncpp_quote(\"HRESULT WINAPI CreatePOP3Transport(IPOP3Transport **ppTransport);\")\ncpp_quote(\"HRESULT WINAPI CreateIMAPTransport(IIMAPTransport **ppTransport);\")\n"
  },
  {
    "path": "wine/windows/in6addr.h",
    "content": "/*\n * Copyright (C) 2009 Jeff Latimer\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __IN6ADDR__\n#define __IN6ADDR__\n\n#ifdef USE_WS_PREFIX\n#define WS(x)    WS_##x\n#else\n#define WS(x)    x\n#endif\n\ntypedef struct WS(in6_addr) {\n    union {\n        UCHAR  Byte[16];\n        USHORT Word[8];\n    } u;\n} IN6_ADDR, *PIN6_ADDR, *LPIN6_ADDR;\n\n#define in_addr6    WS(in6_addr)\n\n#ifdef USE_WS_PREFIX\n#define WS__S6_un   u\n#define WS__S6_u8   Byte\n#define WS_s6_addr  WS__S6_un.WS__S6_u8\n#else\n#define _S6_un      u\n#define _S6_u8      Byte\n#define s6_addr     _S6_un._S6_u8\n#endif\n\n#define s6_bytes    u.Byte\n#define s6_words    u.Word\n\n#undef WS\n\n#endif /* __IN6ADDR__ */\n"
  },
  {
    "path": "wine/windows/inaddr.h",
    "content": "/*\n * Copyright 2010 Detlef Riekenberg\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n */\n\n#ifndef __INADDR_H__\n#define __INADDR_H__\n\n#ifdef USE_WS_PREFIX\n#define WS(x)    WS_##x\n#else\n#define WS(x)    x\n#endif\n\ntypedef struct WS(in_addr)\n{\n    union {\n        struct {\n            UCHAR s_b1,s_b2,s_b3,s_b4;\n        } S_un_b;\n        struct {\n            USHORT s_w1,s_w2;\n        } S_un_w;\n        ULONG S_addr;\n    } S_un;\n} IN_ADDR, *PIN_ADDR, *LPIN_ADDR;\n\n#undef WS\n\n#ifndef USE_WS_PREFIX\n#define s_addr  S_un.S_addr\n#define s_net   S_un.S_un_b.s_b1\n#define s_host  S_un.S_un_b.s_b2\n#define s_lh    S_un.S_un_b.s_b3\n#define s_impno S_un.S_un_b.s_b4\n#define s_imp   S_un.S_un_w.s_w2\n#else\n#define WS_s_addr  S_un.S_addr\n#define WS_s_net   S_un.S_un_b.s_b1\n#define WS_s_host  S_un.S_un_b.s_b2\n#define WS_s_lh    S_un.S_un_b.s_b3\n#define WS_s_impno S_un.S_un_b.s_b4\n#define WS_s_imp   S_un.S_un_w.s_w2\n#endif  /* USE_WS_PREFIX */\n\n#endif /* __INADDR_H__ */\n"
  },
  {
    "path": "wine/windows/indexsrv.idl",
    "content": "/*\n * Copyright 2006 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\n/* FIXME: import \"filter.idl\"; */\n\n/*\n * widl doesn't like the declaration of PFNFILLTEXTBUFFER, so work around it...\n * Not sure that function pointers are even legal in idl.\n */\ncpp_quote(\"struct tagTEXT_SOURCE;\")\ncpp_quote(\"typedef HRESULT (WINAPI *PFNFILLTEXTBUFFER)(struct tagTEXT_SOURCE *pTextSource);\")\ncpp_quote(\"#if 0\")\ntypedef void* PFNFILLTEXTBUFFER;\ncpp_quote(\"#endif\")\n\ntypedef struct tagTEXT_SOURCE\n{\n    PFNFILLTEXTBUFFER pfnFillTextBuffer;\n    const WCHAR *awcBuffer;\n    ULONG iEnd;\n    ULONG iCur;\n} TEXT_SOURCE;\n\ntypedef enum tagWORDREP_BREAK_TYPE\n{\n    WORDREP_BREAK_EOW = 0,\n    WORDREP_BREAK_EOS = 1,\n    WORDREP_BREAK_EOP = 2,\n    WORDREP_BREAK_EOC = 3\n} WORDREP_BREAK_TYPE;\n\n\n/*****************************************************************************\n *    IWordSink interface\n */\n[\n    uuid(cc907054-c058-101a-b554-08002b33b0e6),\n    object,\n    local\n]\ninterface IWordSink : IUnknown\n{\n    HRESULT PutWord(\n              [in] ULONG cwc,\n              [size_is(cwcSrcLen)][in] const WCHAR *pwcInBuf,\n              [in] ULONG cwcSrcLen,\n              [in] ULONG cwcSrcPos);\n    HRESULT PutAltWord(\n              [in] ULONG cwc,\n              [size_is(cwcSrcLen)][in] const WCHAR *pwcInBuf,\n              [in] ULONG cwcSrcLen,\n              [in] ULONG cwcSrcPos);\n    HRESULT StartAltPhrase(void);\n    HRESULT EndAltPhrase(void);\n    HRESULT PutBreak(\n              [in] WORDREP_BREAK_TYPE breakType);\n}\n\n/*****************************************************************************\n *    IPhraseSink interface\n */\n[\n    uuid(cc906ff0-c058-101a-b554-08002b33b0e6),\n    object,\n    local\n]\ninterface IPhraseSink: IUnknown\n{\n    HRESULT PutSmallPhrase(\n              [size_is(cwcNoun)][in] const WCHAR *pwcNoun,\n              [in] ULONG cwcNoun,\n              [size_is(cwcModifier)][in] const WCHAR *pwcModifier,\n              [in] ULONG cwcModifier,\n              [in] ULONG ulAttachmentType);\n    HRESULT PutPhrase(\n              [size_is(cwcPhrase)][in] const WCHAR *pwcPhrase,\n              [in] ULONG cwcPhrase);\n}\n\n/*****************************************************************************\n *    IWordBreaker interface\n */\n[\n    uuid(d53552c8-77e3-101a-b552-08002b33b0e6),\n    object,\n    local\n]\ninterface IWordBreaker: IUnknown\n{\n    HRESULT Init(\n              [in] BOOL fQuery,\n              [in] ULONG ulMaxTokenSize,\n              [out] BOOL *pfLicense);\n    HRESULT BreakText(\n              [in] TEXT_SOURCE *pTextSource,\n              [in] IWordSink *pWordSink,\n              [in] IPhraseSink *pPhraseSink);\n    HRESULT ComposePhrase(\n              [size_is(cwcNoun)][in] const WCHAR *pwcNoun,\n              [in] ULONG cwcNoun,\n              [size_is(cwcModifier)][in] const WCHAR *pwcModifier,\n              [in] ULONG cwcModifier,\n              [in] ULONG ulAttachmentType,\n              [size_is(*pcwcPhrase)][out] WCHAR *pwcPhrase,\n              [out][in] ULONG *pcwcPhrase);\n    HRESULT GetLicenseToUse(\n              [string][out] const WCHAR **ppwcsLicense);\n}\n"
  },
  {
    "path": "wine/windows/initguid.h",
    "content": "/*\n * Defines a minimum set of macros create GUID's to keep the size\n * small\n *\n * This file should be included into \"only GUID definition *.h\" like\n * shlguid.h\n *\n * Copyright (C) 1999 Juergen Schmied\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#define INITGUID\n#include <guiddef.h>\n"
  },
  {
    "path": "wine/windows/inputscope.idl",
    "content": "/**\n * This file has no copyright assigned and is placed in the Public Domain.\n * This file is part of the mingw-w64 runtime package.\n * No warranty is given.\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\n\ntypedef enum {\n    IS_DEFAULT                       = 0,\n    IS_URL                           = 1,\n    IS_FILE_FULLFILEPATH             = 2,\n    IS_FILE_FILENAME                 = 3,\n    IS_EMAIL_USERNAME                = 4,\n    IS_EMAIL_SMTPEMAILADDRESS        = 5,\n    IS_LOGINNAME                     = 6,\n    IS_PERSONALNAME_FULLNAME         = 7,\n    IS_PERSONALNAME_PREFIX           = 8,\n    IS_PERSONALNAME_GIVENNAME        = 9,\n    IS_PERSONALNAME_MIDDLENAME       = 10,\n    IS_PERSONALNAME_SURNAME          = 11,\n    IS_PERSONALNAME_SUFFIX           = 12,\n    IS_ADDRESS_FULLPOSTALADDRESS     = 13,\n    IS_ADDRESS_POSTALCODE            = 14,\n    IS_ADDRESS_STREET                = 15,\n    IS_ADDRESS_STATEORPROVINCE       = 16,\n    IS_ADDRESS_CITY                  = 17,\n    IS_ADDRESS_COUNTRYNAME           = 18,\n    IS_ADDRESS_COUNTRYSHORTNAME      = 19,\n    IS_CURRENCY_AMOUNTANDSYMBOL      = 20,\n    IS_CURRENCY_AMOUNT               = 21,\n    IS_DATE_FULLDATE                 = 22,\n    IS_DATE_MONTH                    = 23,\n    IS_DATE_DAY                      = 24,\n    IS_DATE_YEAR                     = 25,\n    IS_DATE_MONTHNAME                = 26,\n    IS_DATE_DAYNAME                  = 27,\n    IS_DIGITS                        = 28,\n    IS_NUMBER                        = 29,\n    IS_ONECHAR                       = 30,\n    IS_PASSWORD                      = 31,\n    IS_TELEPHONE_FULLTELEPHONENUMBER = 32,\n    IS_TELEPHONE_COUNTRYCODE         = 33,\n    IS_TELEPHONE_AREACODE            = 34,\n    IS_TELEPHONE_LOCALNUMBER         = 35,\n    IS_TIME_FULLTIME                 = 36,\n    IS_TIME_HOUR                     = 37,\n    IS_TIME_MINORSEC                 = 38,\n    IS_NUMBER_FULLWIDTH              = 39,\n    IS_ALPHANUMERIC_HALFWIDTH        = 40,\n    IS_ALPHANUMERIC_FULLWIDTH        = 41,\n    IS_CURRENCY_CHINESE              = 42,\n    IS_BOPOMOFO                      = 43,\n    IS_HIRAGANA                      = 44,\n    IS_KATAKANA_HALFWIDTH            = 45,\n    IS_KATAKANA_FULLWIDTH            = 46,\n    IS_HANJA                         = 47,\n    IS_HANGUL_HALFWIDTH              = 48,\n    IS_HANGUL_FULLWIDTH              = 49,\n    IS_SEARCH                        = 50,\n    IS_FORMULA                       = 51,\n    IS_SEARCH_INCREMENTAL            = 52,\n    IS_CHINESE_HALFWIDTH             = 53,\n    IS_CHINESE_FULLWIDTH             = 54,\n    IS_NATIVE_SCRIPT                 = 55,\n\n    IS_PHRASELIST        = -1,\n    IS_REGULAREXPRESSION = -2,\n    IS_SRGS              = -3,\n    IS_XML               = -4,\n    IS_ENUMSTRING        = -5\n} InputScope;\n\ncpp_quote(\"HRESULT WINAPI SetInputScope(HWND hwnd,InputScope inputscope);\")\ncpp_quote(\"HRESULT WINAPI SetInputScopes(HWND hwnd,const InputScope *pInputScopes,UINT cInputScopes,WCHAR **ppszPhraseList,UINT cPhrases,WCHAR *pszRegExp,WCHAR *pszSRGS);\")\ncpp_quote(\"HRESULT WINAPI SetInputScopeXML(HWND hwnd,WCHAR *pszXML);\")\n\ncpp_quote(\"DEFINE_GUID(GUID_PROP_INPUTSCOPE,0x1713dd5a,0x68e7,0x4a5b,0x9a,0xf6,0x59,0x2a,0x59,0x5c,0x77,0x8d);\")\n\n[\n    object,\n    uuid(fde1eaee-6924-4cdf-91e7-da38cff5559d),\n    pointer_default(unique)\n]\ninterface ITfInputScope : IUnknown\n{\n    HRESULT GetInputScopes([out, size_is(,*pcCount)] InputScope **pprgInputScopes, [out] UINT *pcCount);\n    HRESULT GetPhrase([out, size_is(,*pcCount)] BSTR **ppbstrPhrases, [out] UINT *pcCount);\n    HRESULT GetRegularExpression([out] BSTR *pbstrRegExp);\n    HRESULT GetSRGS([out] BSTR *pbstrSRGS);\n    HRESULT GetXML([out] BSTR *pbstrXML);\n}\n"
  },
  {
    "path": "wine/windows/inseng.idl",
    "content": "/*\n * Copyright 2015 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WIDL__\n#define threading(model)\n#endif\n\ncpp_quote(\"#if 0\")\nimport \"unknwn.idl\";\ncpp_quote(\"#endif\")\n\ninterface IStream;\n\n/* FIXME: Add full declarations. */\ninterface ICifComponent;\ninterface IEnumCifComponents;\ninterface ICifGroup;\ninterface IEnumCifGroups;\ninterface ICifMode;\ninterface IEnumCifModes;\n\ntypedef struct {\n    DWORD cbSize;\n    DWORD dwInstallSize;\n    DWORD dwWinDriveSize;\n    DWORD dwDownloadSize;\n    DWORD dwDependancySize;\n    DWORD dwInstallDriveReq;\n    DWORD dwWinDriveReq;\n    DWORD dwDownloadDriveReq;\n    char chWinDrive;\n    char chInstallDrive;\n    char chDownloadDrive;\n    DWORD dwTotalDownloadSize;\n} COMPONENT_SIZES;\n\n[\n    uuid(6e449688-c509-11cf-aafa-00aa00b6015c),\n    local\n]\ninterface ICifFile : IUnknown\n{\n    HRESULT EnumComponents(IEnumCifComponents **enum_components, DWORD filter, void *pv);\n    HRESULT FindComponent(const char *id, ICifComponent **p);\n    HRESULT EnumGroups(IEnumCifGroups **enum_groups, DWORD filter, void *pv);\n    HRESULT FindGroup(const char *id, ICifGroup **p);\n    HRESULT EnumModes(IEnumCifModes **cuf_modes, DWORD filter, void *pv);\n    HRESULT FindMode(const char *id, ICifMode **p);\n    HRESULT GetDescription(char *desc, DWORD size);\n    HRESULT GetDetDlls(char **dlls, DWORD size);\n}\n\n[\n    uuid(6e449685-c509-11cf-aafa-00aa00b6015c),\n    local\n]\ninterface IInstallEngineCallback : IUnknown\n{\n   HRESULT OnEngineStatusChange(DWORD status, DWORD substatus);\n   HRESULT OnStartInstall(DWORD dl_size, DWORD install_size);\n   HRESULT OnStartComponent(const char *id, DWORD dl_size, DWORD install_size, const char *string);\n   HRESULT OnComponentProgress(const char *id, DWORD phrase, const char *string,\n           const char *msg_string, ULONG progress, ULONG max);\n   HRESULT OnStopComponent(const char *id, HRESULT error, DWORD phrase, const char *string, DWORD status);\n   HRESULT OnStopInstall(HRESULT error, const char *error_string, DWORD status);\n   HRESULT OnEngineProblem(DWORD problem, LPDWORD action);\n}\n\n[\n    uuid(6e449684-c509-11cf-aafa-00aa00b6015c),\n    local\n]\ninterface IInstallEngine : IUnknown\n{\n   HRESULT GetEngineStatus(DWORD *status);\n   HRESULT SetCifFile(const char *cab_name, const char *cif_name);\n   HRESULT DownloadComponents(DWORD flags);\n   HRESULT InstallComponents(DWORD flags);\n   HRESULT EnumInstallIDs(UINT index, char **id);\n   HRESULT EnumDownloadIDs(UINT index, char **id);\n   HRESULT IsComponentInstalled(const char *id, DWORD *status);\n   HRESULT RegisterInstallEngineCallback(IInstallEngineCallback *callback);\n   HRESULT UnregisterInstallEngineCallback();\n   HRESULT SetAction(const char *id, DWORD action, DWORD priority);\n   HRESULT GetSizes(const char *id, COMPONENT_SIZES *sizes);\n   HRESULT LaunchExtraCommand(const char *inf_name, const char *section);\n   HRESULT GetDisplayName(const char *id, const char *name);\n   HRESULT SetBaseUrl(const char *base_name);\n   HRESULT SetDownloadDir(const char *download_dir);\n   HRESULT SetInstallDrive(char drive);\n   HRESULT SetInstallOptions(DWORD flags);\n   HRESULT SetHWND(HWND hwnd);\n   HRESULT SetIStream(IStream *stream);\n   HRESULT Abort(DWORD flags);\n   HRESULT Suspend();\n   HRESULT Resume();\n}\n\n[\n    uuid(6e449689-c509-11cf-aafa-00aa00b6015c),\n    local\n]\ninterface IInstallEngine2 : IInstallEngine\n{\n    HRESULT SetLocalCif(const char *cif);\n    HRESULT GetICifFile(ICifFile **cif_file);\n}\n\n[\n    helpstring(\"Microsoft Active Setup Engine\"),\n    threading(apartment),\n    uuid(6e449686-c509-11cf-aafa-00aa00b6015c)\n]\ncoclass InstallEngine { }\n\n[\n    helpstring(\"Download Site Manager\"),\n    threading(apartment),\n    uuid(bfc880f1-7484-11d0-8309-00aa00b6015c)\n]\ncoclass DownloadSiteMgr { }\n"
  },
  {
    "path": "wine/windows/inspectable.idl",
    "content": "/*\n * Copyright 2015 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"wtypes.idl\";\nimport \"unknwn.idl\";\nimport \"hstring.idl\";\n\ntypedef [v1_enum] enum TrustLevel {\n    BaseTrust,\n    PartialTrust,\n    FullTrust\n} TrustLevel;\n\n[\n  object,\n  uuid(af86e2e0-b12d-4c6a-9c5a-d7aa65101e90),\n  pointer_default(unique)\n]\ninterface IInspectable : IUnknown\n{\n    HRESULT GetIids([out] ULONG *iidCount, [out, size_is(,*iidCount)] IID **iids);\n    HRESULT GetRuntimeClassName([out] HSTRING *className);\n    HRESULT GetTrustLevel([out] TrustLevel *trustLevel);\n}\n\ntypedef [unique] IInspectable *LPINSPECTABLE;\n"
  },
  {
    "path": "wine/windows/interactioncontext.h",
    "content": "/*\n * Copyright 2018 Józef Kucia\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef INTERACTION_CONTEXT_H\n#define INTERACTION_CONTEXT_H\n\n#include <windows.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\nDECLARE_HANDLE(HINTERACTIONCONTEXT);\n\ntypedef enum INTERACTION_CONTEXT_PROPERTY\n{\n    INTERACTION_CONTEXT_PROPERTY_MEASUREMENT_UNITS = 1,\n    INTERACTION_CONTEXT_PROPERTY_INTERACTION_UI_FEEDBACK = 2,\n    INTERACTION_CONTEXT_PROPERTY_FILTER_POINTERS = 3,\n    INTERACTION_CONTEXT_PROPERTY_MAX = 0xffffffff,\n} INTERACTION_CONTEXT_PROPERTY;\n\ntypedef enum INTERACTION_ID\n{\n    INTERACTION_ID_NONE = 0,\n    INTERACTION_ID_MANIPULATION = 1,\n    INTERACTION_ID_TAP = 2,\n    INTERACTION_ID_SECONDARY_TAP = 3,\n    INTERACTION_ID_HOLD = 4,\n    INTERACTION_ID_DRAG = 5,\n    INTERACTION_ID_CROSS_SLIDE = 6,\n    INTERACTION_ID_MAX = 0xffffffff,\n} INTERACTION_ID;\n\ntypedef enum INTERACTION_FLAGS\n{\n    INTERACTION_FLAG_NONE    = 0x00000000,\n    INTERACTION_FLAG_BEGIN   = 0x00000001,\n    INTERACTION_FLAG_END     = 0x00000002,\n    INTERACTION_FLAG_CANCEL  = 0x00000004,\n    INTERACTION_FLAG_INERTIA = 0x00000008,\n    INTERACTION_FLAG_MAX     = 0xffffffff,\n} INTERACTION_FLAGS;\n\ntypedef enum INTERACTION_CONFIGURATION_FLAGS\n{\n    INTERACTION_CONFIGURATION_FLAG_NONE                             = 0x00000000,\n\n    INTERACTION_CONFIGURATION_FLAG_MANIPULATION                     = 0x00000001,\n    INTERACTION_CONFIGURATION_FLAG_MANIPULATION_TRANSLATION_X       = 0x00000002,\n    INTERACTION_CONFIGURATION_FLAG_MANIPULATION_TRANSLATION_Y       = 0x00000004,\n    INTERACTION_CONFIGURATION_FLAG_MANIPULATION_ROTATION            = 0x00000008,\n    INTERACTION_CONFIGURATION_FLAG_MANIPULATION_SCALING             = 0x00000010,\n    INTERACTION_CONFIGURATION_FLAG_MANIPULATION_TRANSLATION_INERTIA = 0x00000020,\n    INTERACTION_CONFIGURATION_FLAG_MANIPULATION_ROTATION_INERTIA    = 0x00000040,\n    INTERACTION_CONFIGURATION_FLAG_MANIPULATION_SCALING_INERTIA     = 0x00000080,\n    INTERACTION_CONFIGURATION_FLAG_MANIPULATION_RAILS_X             = 0x00000100,\n    INTERACTION_CONFIGURATION_FLAG_MANIPULATION_RAILS_Y             = 0x00000200,\n    INTERACTION_CONFIGURATION_FLAG_MANIPULATION_EXACT               = 0x00000400,\n\n    INTERACTION_CONFIGURATION_FLAG_TAP                              = 0x00000001,\n    INTERACTION_CONFIGURATION_FLAG_TAP_DOUBLE                       = 0x00000002,\n\n    INTERACTION_CONFIGURATION_FLAG_SECONDARY_TAP                    = 0x00000001,\n\n    INTERACTION_CONFIGURATION_FLAG_HOLD                             = 0x00000001,\n    INTERACTION_CONFIGURATION_FLAG_HOLD_MOUSE                       = 0x00000002,\n\n    INTERACTION_CONFIGURATION_FLAG_DRAG                             = 0x00000001,\n\n    INTERACTION_CONFIGURATION_FLAG_CROSS_SLIDE                      = 0x00000001,\n    INTERACTION_CONFIGURATION_FLAG_CROSS_SLIDE_HORIZONTAL           = 0x00000002,\n    INTERACTION_CONFIGURATION_FLAG_CROSS_SLIDE_SELECT               = 0x00000004,\n    INTERACTION_CONFIGURATION_FLAG_CROSS_SLIDE_SPEED_BUMP           = 0x00000008,\n    INTERACTION_CONFIGURATION_FLAG_CROSS_SLIDE_REARRANGE            = 0x00000010,\n    INTERACTION_CONFIGURATION_FLAG_CROSS_SLIDE_EXACT                = 0x00000020,\n\n    INTERACTION_CONFIGURATION_FLAG_MAX                              = 0xffffffff,\n} INTERACTION_CONFIGURATION_FLAGS;\n\ntypedef struct INTERACTION_CONTEXT_CONFIGURATION\n{\n    INTERACTION_ID interactionId;\n    INTERACTION_CONFIGURATION_FLAGS enable;\n\n} INTERACTION_CONTEXT_CONFIGURATION;\n\ntypedef struct MANIPULATION_TRANSFORM\n{\n    float translationX;\n    float translationY;\n    float scale;\n    float expansion;\n    float rotation;\n} MANIPULATION_TRANSFORM;\n\ntypedef struct MANIPULATION_VELOCITY\n{\n    float velocityX;\n    float velocityY;\n    float velocityExapnsion;\n    float velocityAngular;\n} MANIPULATION_VELOCITY;\n\ntypedef enum MANIPULATION_RAILS_STATE\n{\n    MANIPULATION_RAILS_STATE_UNDECIDED = 0,\n    MANIPULATION_RAILS_STATE_FREE = 1,\n    MANIPULATION_RAILS_STATE_RAILED = 2,\n    MANIPULATION_RAILS_STATE_MAX = 0xffffffff,\n} MANIPULATION_RAILS_STATE;\n\ntypedef struct INTERACTION_ARGUMENTS_MANIPULATION\n{\n    MANIPULATION_TRANSFORM delta;\n    MANIPULATION_TRANSFORM cumulative;\n    MANIPULATION_VELOCITY veolcity;\n    MANIPULATION_RAILS_STATE railsState;\n} INTERACTION_ARGUMENTS_MANIPULATION;\n\ntypedef struct INTERACTION_ARGUMENTS_TAP\n{\n    UINT32 count;\n} INTERACTION_ARGUMENTS_TAP;\n\ntypedef enum CROSS_SLIDE_FLAGS\n{\n    CROSS_SLIDE_FLAGS_NONE       = 0x00000000,\n    CROSS_SLIDE_FLAGS_SELECT     = 0x00000001,\n    CROSS_SLIDE_FLAGS_SPEED_BUMP = 0x00000002,\n    CROSS_SLIDE_FLAGS_REARRANGE  = 0x00000004,\n    CROSS_SLIDE_FLAGS_MAX        = 0xffffffff,\n} CROSS_SLIDE_FLAGS;\n\ntypedef struct INTERACTION_ARGUMENTS_CROSS_SLIDE\n{\n    CROSS_SLIDE_FLAGS flags;\n} INTERACTION_ARGUMENTS_CROSS_SLIDE;\n\ntypedef struct INTERACTION_CONTEXT_OUTPUT\n{\n    INTERACTION_ID interactionId;\n    INTERACTION_FLAGS interactionFlags;\n    POINTER_INPUT_TYPE inputType;\n    float x;\n    float y;\n    union\n    {\n        INTERACTION_ARGUMENTS_MANIPULATION manipulation;\n        INTERACTION_ARGUMENTS_TAP tap;\n        INTERACTION_ARGUMENTS_CROSS_SLIDE crossSlide;\n    } arguments;\n} INTERACTION_CONTEXT_OUTPUT;\n\ntypedef void (CALLBACK *INTERACTION_CONTEXT_OUTPUT_CALLBACK)(void *data,\n        const INTERACTION_CONTEXT_OUTPUT *output);\n\nHRESULT WINAPI CreateInteractionContext(HINTERACTIONCONTEXT *context);\nHRESULT WINAPI DestroyInteractionContext(HINTERACTIONCONTEXT context);\n\nHRESULT WINAPI ProcessInertiaInteractionContext(HINTERACTIONCONTEXT context);\n\nHRESULT WINAPI RegisterOutputCallbackInteractionContext(HINTERACTIONCONTEXT context,\n        INTERACTION_CONTEXT_OUTPUT_CALLBACK callback, void *data);\n\nHRESULT WINAPI GetInteractionConfigurationInteractionContext(HINTERACTIONCONTEXT context,\n        UINT32 count, INTERACTION_CONTEXT_CONFIGURATION *configuration);\nHRESULT WINAPI SetInteractionConfigurationInteractionContext(HINTERACTIONCONTEXT context,\n        UINT32 count, const INTERACTION_CONTEXT_CONFIGURATION *configuration);\n\nHRESULT WINAPI GetPropertyInteractionContext(HINTERACTIONCONTEXT context,\n        INTERACTION_CONTEXT_PROPERTY proerty, UINT32 *value);\nHRESULT WINAPI SetPropertyInteractionContext(HINTERACTIONCONTEXT context,\n        INTERACTION_CONTEXT_PROPERTY property, UINT32 value);\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif\n"
  },
  {
    "path": "wine/windows/intshcut.h",
    "content": "/*\n * Copyright (C) 2007 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_INTSHCUT_H\n#define __WINE_INTSHCUT_H\n\n#include <isguids.h>\n\n#define INTSHCUTAPI\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define E_FLAGS MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x1000)\n#define IS_E_EXEC_FAILED MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x2002)\n#define URL_E_INVALID_SYNTAX MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x1001)\n#define URL_E_UNREGISTERED_PROTOCOL MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x1002)\n\ntypedef enum iurl_seturl_flags {\n    IURL_SETURL_FL_GUESS_PROTOCOL=1,\n    IURL_SETURL_FL_USE_DEFAULT_PROTOCOL,\n    ALL_IURL_SETURL_FLAGS=(IURL_SETURL_FL_GUESS_PROTOCOL|IURL_SETURL_FL_USE_DEFAULT_PROTOCOL)\n} IURL_SETURL_FLAGS;\n\ntypedef enum iurl_invokecommand_flags {\n    IURL_INVOKECOMMAND_FL_ALLOW_UI=1,\n    IURL_INVOKECOMMAND_FL_USE_DEFAULT_VERB,\n    ALL_IURL_INVOKECOMMAND_FLAGS=(IURL_INVOKECOMMAND_FL_ALLOW_UI|IURL_INVOKECOMMAND_FL_USE_DEFAULT_VERB)\n} IURL_INVOKECOMMAND_FLAGS;\n\ntypedef struct urlinvokecommandinfoA {\n    DWORD dwcbSize;\n    DWORD dwFlags;\n    HWND hwndParent;\n    LPCSTR pcszVerb;\n} URLINVOKECOMMANDINFOA, *PURLINVOKECOMMANDINFOA;\ntypedef const URLINVOKECOMMANDINFOA CURLINVOKECOMMANDINFOA;\ntypedef const URLINVOKECOMMANDINFOA *PCURLINVOKECOMMANDINFOA;\n\ntypedef struct urlinvokecommandinfoW {\n    DWORD dwcbSize;\n    DWORD dwFlags;\n    HWND hwndParent;\n    LPCWSTR pcszVerb;\n} URLINVOKECOMMANDINFOW, *PURLINVOKECOMMANDINFOW;\ntypedef const URLINVOKECOMMANDINFOW CURLINVOKECOMMANDINFOW;\ntypedef const URLINVOKECOMMANDINFOW *PCURLINVOKECOMMANDINFOW;\n\n#define INTERFACE IUniformResourceLocatorA\nDECLARE_INTERFACE_(IUniformResourceLocatorA,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, VOID **ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IUniformResourceLocatorA methods ***/\n    STDMETHOD(SetURL)(THIS_ LPCSTR pcszURL, DWORD dwInFlags) PURE;\n    STDMETHOD(GetURL)(THIS_ LPSTR *ppszURL) PURE;\n    STDMETHOD(InvokeCommand)(THIS_ PURLINVOKECOMMANDINFOA pURLCommandInfo) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE IUniformResourceLocatorW\nDECLARE_INTERFACE_(IUniformResourceLocatorW,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, VOID **ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IUniformResourceLocatorW methods ***/\n    STDMETHOD(SetURL)(THIS_ LPCWSTR pcszURL, DWORD dwInFlags) PURE;\n    STDMETHOD(GetURL)(THIS_ LPWSTR *ppszURL) PURE;\n    STDMETHOD(InvokeCommand)(THIS_ PURLINVOKECOMMANDINFOW pURLCommandInfo) PURE;\n};\n#undef INTERFACE\n\nDECL_WINELIB_TYPE_AW(URLINVOKECOMMANDINFO)\nDECL_WINELIB_TYPE_AW(PURLINVOKECOMMANDINFO)\nDECL_WINELIB_TYPE_AW(CURLINVOKECOMMANDINFO)\nDECL_WINELIB_TYPE_AW(PCURLINVOKECOMMANDINFO)\n\n\ntypedef enum translateurl_in_flags {\n    TRANSLATEURL_FL_GUESS_PROTOCOL=1,\n    TRANSLATEURL_FL_USE_DEFAULT_PROTOCOL\n} TRANSLATEURL_IN_FLAGS;\n\nHRESULT WINAPI TranslateURLA(LPCSTR, DWORD, LPSTR *);\nHRESULT WINAPI TranslateURLW(LPCWSTR, DWORD, LPWSTR *);\n#define TranslateURL WINELIB_NAME_AW(TranslateURL)\n\nBOOL    WINAPI InetIsOffline(DWORD);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* __WINE_INTSHCUT_H */\n"
  },
  {
    "path": "wine/windows/ipexport.h",
    "content": "/*\n * Defines the types and macros used by the ICMP API, see icmpapi.h.\n *\n * Copyright (C) 1999 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_IPEXPORT_H\n#define __WINE_IPEXPORT_H\n\n#include <in6addr.h>\n#include <inaddr.h>\n\ntypedef ULONG IPAddr;\ntypedef ULONG IPMask;\ntypedef ULONG IP_STATUS;\n\nstruct ip_option_information\n{\n    unsigned char  Ttl;\n    unsigned char  Tos;\n    unsigned char  Flags;\n    unsigned char  OptionsSize;\n    unsigned char* OptionsData;\n};\n\n#define IP_FLAG_DF      0x2\n\n#define IP_OPT_EOL      0\n#define IP_OPT_NOP      1\n#define IP_OPT_SECURITY 0x82\n#define IP_OPT_LSRR     0x83\n#define IP_OPT_SSRR     0x89\n#define IP_OPT_RR       0x7\n#define IP_OPT_TS       0x44\n#define IP_OPT_SID      0x88\n\n#define MAX_OPT_SIZE    40\n\n\nstruct icmp_echo_reply\n{\n    IPAddr                       Address;\n    ULONG                        Status;\n    ULONG                        RoundTripTime;\n    unsigned short               DataSize;\n    unsigned short               Reserved;\n    void*                        Data;\n    struct ip_option_information Options;\n};\n\ntypedef struct ip_option_information IP_OPTION_INFORMATION, *PIP_OPTION_INFORMATION;\n\ntypedef struct icmp_echo_reply ICMP_ECHO_REPLY, *PICMP_ECHO_REPLY;\n\n\n#define IP_STATUS_BASE              11000\n\n#define IP_SUCCESS                  0\n#define IP_BUF_TOO_SMALL            (IP_STATUS_BASE + 1)\n#define IP_DEST_NET_UNREACHABLE     (IP_STATUS_BASE + 2)\n#define IP_DEST_HOST_UNREACHABLE    (IP_STATUS_BASE + 3)\n#define IP_DEST_PROT_UNREACHABLE    (IP_STATUS_BASE + 4)\n#define IP_DEST_PORT_UNREACHABLE    (IP_STATUS_BASE + 5)\n#define IP_NO_RESOURCES             (IP_STATUS_BASE + 6)\n#define IP_BAD_OPTION               (IP_STATUS_BASE + 7)\n#define IP_HW_ERROR                 (IP_STATUS_BASE + 8)\n#define IP_PACKET_TOO_BIG           (IP_STATUS_BASE + 9)\n#define IP_REQ_TIMED_OUT            (IP_STATUS_BASE + 10)\n#define IP_BAD_REQ                  (IP_STATUS_BASE + 11)\n#define IP_BAD_ROUTE                (IP_STATUS_BASE + 12)\n#define IP_TTL_EXPIRED_TRANSIT      (IP_STATUS_BASE + 13)\n#define IP_TTL_EXPIRED_REASSEM      (IP_STATUS_BASE + 14)\n#define IP_PARAM_PROBLEM            (IP_STATUS_BASE + 15)\n#define IP_SOURCE_QUENCH            (IP_STATUS_BASE + 16)\n#define IP_OPTION_TOO_BIG           (IP_STATUS_BASE + 17)\n#define IP_BAD_DESTINATION          (IP_STATUS_BASE + 18)\n\n#define IP_ADDR_DELETED             (IP_STATUS_BASE + 19)\n#define IP_SPEC_MTU_CHANGE          (IP_STATUS_BASE + 20)\n#define IP_MTU_CHANGE               (IP_STATUS_BASE + 21)\n#define IP_UNLOAD                   (IP_STATUS_BASE + 22)\n\n#define IP_GENERAL_FAILURE          (IP_STATUS_BASE + 50)\n#define MAX_IP_STATUS               IP_GENERAL_FAILURE\n#define IP_PENDING                  (IP_STATUS_BASE + 255)\n\n\n#define MAX_ADAPTER_NAME 128\n\ntypedef struct _IP_ADAPTER_INDEX_MAP {\n  ULONG Index;\n  WCHAR Name[MAX_ADAPTER_NAME];\n} IP_ADAPTER_INDEX_MAP, *PIP_ADAPTER_INDEX_MAP;\n\ntypedef struct _IP_INTERFACE_INFO {\n  LONG                 NumAdapters;\n  IP_ADAPTER_INDEX_MAP Adapter[1];\n} IP_INTERFACE_INFO,*PIP_INTERFACE_INFO;\n\ntypedef struct _IP_UNIDIRECTIONAL_ADAPTER_ADDRESS {\n  ULONG  NumAdapters;\n  IPAddr Address[1];\n} IP_UNIDIRECTIONAL_ADAPTER_ADDRESS, *PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS;\n\n#endif /* __WINE_IPEXPORT_H */\n"
  },
  {
    "path": "wine/windows/iphlpapi.h",
    "content": "/* WINE iphlpapi.h\n * Copyright (C) 2003 Juan Lang\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef WINE_IPHLPAPI_H__\n#define WINE_IPHLPAPI_H__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include <iprtrmib.h>\n#include <ipexport.h>\n#include <iptypes.h>\n\nDWORD WINAPI GetExtendedTcpTable(PVOID pTcpTable, PDWORD pdwSize, BOOL bOrder,\n ULONG ulAf, TCP_TABLE_CLASS TableClass, ULONG Reserved);\n\nDWORD WINAPI GetExtendedUdpTable(PVOID pUdpTable, PDWORD pdwSize, BOOL bOrder,\n ULONG ulAf, UDP_TABLE_CLASS TableClass, ULONG Reserved);\n\nDWORD WINAPI GetNumberOfInterfaces(PDWORD pdwNumIf);\n\nDWORD WINAPI GetIfEntry(PMIB_IFROW pIfRow);\n\nDWORD WINAPI GetIfTable(PMIB_IFTABLE pIfTable, PULONG pdwSize, BOOL bOrder);\n\nDWORD WINAPI GetIpAddrTable(PMIB_IPADDRTABLE pIpAddrTable, PULONG pdwSize,\n BOOL bOrder);\n\nDWORD WINAPI GetIpNetTable(PMIB_IPNETTABLE pIpNetTable, PULONG pdwSize,\n BOOL bOrder);\n\nDWORD WINAPI GetIpForwardTable(PMIB_IPFORWARDTABLE pIpForwardTable,\n PULONG pdwSize, BOOL bOrder);\n\nDWORD WINAPI GetTcpTable(PMIB_TCPTABLE pTcpTable, PDWORD pdwSize, BOOL bOrder);\n\nDWORD WINAPI GetUdpTable(PMIB_UDPTABLE pUdpTable, PDWORD pdwSize, BOOL bOrder);\n\nDWORD WINAPI GetUdp6Table(PMIB_UDP6TABLE pUdpTable, PDWORD pdwSize, BOOL bOrder);\n\nDWORD WINAPI GetIpStatistics(PMIB_IPSTATS pStats);\n\nDWORD WINAPI GetIpStatisticsEx(PMIB_IPSTATS pStats, DWORD dwFamily);\n\nDWORD WINAPI GetIcmpStatistics(PMIB_ICMP pStats);\n\nDWORD WINAPI GetTcpStatistics(PMIB_TCPSTATS pStats);\n\nDWORD WINAPI GetTcpStatisticsEx(PMIB_TCPSTATS pStats, DWORD dwFamily);\n\nDWORD WINAPI GetUdpStatistics(PMIB_UDPSTATS pStats);\n\nDWORD WINAPI GetUdpStatisticsEx(PMIB_UDPSTATS pStats, DWORD dwFamily);\n\nDWORD WINAPI SetIfEntry(PMIB_IFROW pIfRow);\n\nDWORD WINAPI CreateIpForwardEntry(PMIB_IPFORWARDROW pRoute);\n\nDWORD WINAPI SetIpForwardEntry(PMIB_IPFORWARDROW pRoute);\n\nDWORD WINAPI DeleteIpForwardEntry(PMIB_IPFORWARDROW pRoute);\n\nDWORD WINAPI SetIpStatistics(PMIB_IPSTATS pIpStats);\n\nDWORD WINAPI SetIpTTL(UINT nTTL);\n\nDWORD WINAPI CreateIpNetEntry(PMIB_IPNETROW pArpEntry);\n\nDWORD WINAPI SetIpNetEntry(PMIB_IPNETROW pArpEntry);\n\nDWORD WINAPI DeleteIpNetEntry(PMIB_IPNETROW pArpEntry);\n\nDWORD WINAPI FlushIpNetTable(DWORD dwIfIndex);\n\nDWORD WINAPI CreateProxyArpEntry(DWORD dwAddress, DWORD dwMask,\n DWORD dwIfIndex);\n\nDWORD WINAPI DeleteProxyArpEntry(DWORD dwAddress, DWORD dwMask,\n DWORD dwIfIndex);\n\nDWORD WINAPI SetTcpEntry(PMIB_TCPROW pTcpRow);\n\nDWORD WINAPI GetInterfaceInfo(PIP_INTERFACE_INFO pIfTable, PULONG dwOutBufLen);\n\nDWORD WINAPI GetUniDirectionalAdapterInfo(\n PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS pIPIfInfo, PULONG dwOutBufLen);\n\nDWORD WINAPI GetBestInterface(IPAddr dwDestAddr, PDWORD pdwBestIfIndex);\n\n#ifdef __WINE_WINSOCKAPI_STDLIB_H\nDWORD WINAPI GetBestInterfaceEx(\n#ifdef USE_WS_PREFIX\n    struct WS_sockaddr *pDestAddr,\n#else\n    struct sockaddr *pDestAddr,\n#endif\n    PDWORD pdwBestIfIndex);\n#endif\n\nDWORD WINAPI GetBestRoute(DWORD dwDestAddr, DWORD dwSourceAddr,\n PMIB_IPFORWARDROW   pBestRoute);\n\nDWORD WINAPI NotifyAddrChange(PHANDLE Handle, LPOVERLAPPED overlapped);\n\nDWORD WINAPI NotifyRouteChange(PHANDLE Handle, LPOVERLAPPED overlapped);\n\nBOOL WINAPI CancelIPChangeNotify(LPOVERLAPPED overlapped);\n\nDWORD WINAPI GetAdapterIndex(IN LPWSTR AdapterName, OUT PULONG IfIndex);\n\nDWORD WINAPI AddIPAddress(IPAddr Address, IPMask IpMask, DWORD IfIndex,\n PULONG NTEContext, PULONG NTEInstance);\n\nDWORD WINAPI DeleteIPAddress(ULONG NTEContext);\n\nDWORD WINAPI GetNetworkParams(PFIXED_INFO pFixedInfo, PULONG pOutBufLen);\n\nDWORD WINAPI GetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen);\n\nDWORD WINAPI GetPerAdapterInfo(ULONG IfIndex,\n PIP_PER_ADAPTER_INFO pPerAdapterInfo, PULONG pOutBufLen);\n\nDWORD WINAPI IpReleaseAddress(PIP_ADAPTER_INDEX_MAP AdapterInfo);\n\nDWORD WINAPI IpRenewAddress(PIP_ADAPTER_INDEX_MAP AdapterInfo);\n\nDWORD WINAPI SendARP(IPAddr DestIP, IPAddr SrcIP, PULONG pMacAddr,\n PULONG  PhyAddrLen);\n\nBOOL WINAPI GetRTTAndHopCount(IPAddr DestIpAddress, PULONG HopCount,\n ULONG  MaxHops, PULONG RTT);\n\nDWORD WINAPI GetFriendlyIfIndex(DWORD IfIndex);\n\nDWORD WINAPI EnableRouter(HANDLE* pHandle, OVERLAPPED* pOverlapped);\n\nDWORD WINAPI UnenableRouter(OVERLAPPED* pOverlapped, LPDWORD lpdwEnableCount);\n\n#ifdef _WINSOCK2API_\nULONG WINAPI GetAdaptersAddresses(ULONG family, ULONG flags, PVOID reserved,\n                                  PIP_ADAPTER_ADDRESSES aa, PULONG buflen);\n#endif\n\nDWORD WINAPI AllocateAndGetUdpTableFromStack(PMIB_UDPTABLE *ppUdpTable, BOOL bOrder, HANDLE heap, DWORD flags);\nDWORD WINAPI AllocateAndGetTcpTableFromStack(PMIB_TCPTABLE *ppTcpTable, BOOL bOrder, HANDLE heap, DWORD flags);\nDWORD WINAPI AllocateAndGetIpNetTableFromStack(PMIB_IPNETTABLE *ppIpNetTable, BOOL bOrder, HANDLE heap, DWORD flags);\nDWORD WINAPI AllocateAndGetIpForwardTableFromStack(PMIB_IPFORWARDTABLE *ppIpForwardTable, BOOL bOrder, HANDLE heap, DWORD flags);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* WINE_IPHLPAPI_H__ */\n"
  },
  {
    "path": "wine/windows/ipifcons.h",
    "content": "/* WINE ipifcons.h\n * Copyright (C) 2003 Juan Lang\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef WINE_IPIFCONS_H__\n#define WINE_IPIFCONS_H__\n\n#define IF_TYPE_OTHER                            1\n#define IF_TYPE_REGULAR_1822                     2\n#define IF_TYPE_HDH_1822                         3\n#define IF_TYPE_DDN_X25                          4\n#define IF_TYPE_RFC877_X25                       5\n#define IF_TYPE_ETHERNET_CSMACD                  6\n#define IF_TYPE_IS088023_CSMACD                  7\n#define IF_TYPE_ISO88024_TOKENBUS                8\n#define IF_TYPE_ISO88025_TOKENRING               9\n#define IF_TYPE_ISO88026_MAN                     10\n#define IF_TYPE_STARLAN                          11\n#define IF_TYPE_PROTEON_10MBIT                   12\n#define IF_TYPE_PROTEON_80MBIT                   13\n#define IF_TYPE_HYPERCHANNEL                     14\n#define IF_TYPE_FDDI                             15\n#define IF_TYPE_LAP_B                            16\n#define IF_TYPE_SDLC                             17\n#define IF_TYPE_DS1                              18\n#define IF_TYPE_E1                               19\n#define IF_TYPE_BASIC_ISDN                       20\n#define IF_TYPE_PRIMARY_ISDN                     21\n#define IF_TYPE_PROP_POINT2POINT_SERIAL          22\n#define IF_TYPE_PPP                              23\n#define IF_TYPE_SOFTWARE_LOOPBACK                24\n#define IF_TYPE_EON                              25\n#define IF_TYPE_ETHERNET_3MBIT                   26\n#define IF_TYPE_NSIP                             27\n#define IF_TYPE_SLIP                             28\n#define IF_TYPE_ULTRA                            29\n#define IF_TYPE_DS3                              30\n#define IF_TYPE_SIP                              31\n#define IF_TYPE_FRAMERELAY                       32\n#define IF_TYPE_RS232                            33\n#define IF_TYPE_PARA                             34\n#define IF_TYPE_ARCNET                           35\n#define IF_TYPE_ARCNET_PLUS                      36\n#define IF_TYPE_ATM                              37\n#define IF_TYPE_MIO_X25                          38\n#define IF_TYPE_SONET                            39\n#define IF_TYPE_X25_PLE                          40\n#define IF_TYPE_ISO88022_LLC                     41\n#define IF_TYPE_LOCALTALK                        42\n#define IF_TYPE_SMDS_DXI                         43\n#define IF_TYPE_FRAMERELAY_SERVICE               44\n#define IF_TYPE_V35                              45\n#define IF_TYPE_HSSI                             46\n#define IF_TYPE_HIPPI                            47\n#define IF_TYPE_MODEM                            48\n#define IF_TYPE_AAL5                             49\n#define IF_TYPE_SONET_PATH                       50\n#define IF_TYPE_SONET_VT                         51\n#define IF_TYPE_SMDS_ICIP                        52\n#define IF_TYPE_PROP_VIRTUAL                     53\n#define IF_TYPE_PROP_MULTIPLEXOR                 54\n#define IF_TYPE_IEEE80212                        55\n#define IF_TYPE_FIBRECHANNEL                     56\n#define IF_TYPE_HIPPIINTERFACE                   57\n#define IF_TYPE_FRAMERELAY_INTERCONNECT          58\n#define IF_TYPE_AFLANE_8023                      59\n#define IF_TYPE_AFLANE_8025                      60\n#define IF_TYPE_CCTEMUL                          61\n#define IF_TYPE_FASTETHER                        62\n#define IF_TYPE_ISDN                             63\n#define IF_TYPE_V11                              64\n#define IF_TYPE_V36                              65\n#define IF_TYPE_G703_64K                         66\n#define IF_TYPE_G703_2MB                         67\n#define IF_TYPE_QLLC                             68\n#define IF_TYPE_FASTETHER_FX                     69\n#define IF_TYPE_CHANNEL                          70\n#define IF_TYPE_IEEE80211                        71\n#define IF_TYPE_IBM370PARCHAN                    72\n#define IF_TYPE_ESCON                            73\n#define IF_TYPE_DLSW                             74\n#define IF_TYPE_ISDN_S                           75\n#define IF_TYPE_ISDN_U                           76\n#define IF_TYPE_LAP_D                            77\n#define IF_TYPE_IPSWITCH                         78\n#define IF_TYPE_RSRB                             79\n#define IF_TYPE_ATM_LOGICAL                      80\n#define IF_TYPE_DS0                              81\n#define IF_TYPE_DS0_BUNDLE                       82\n#define IF_TYPE_BSC                              83\n#define IF_TYPE_ASYNC                            84\n#define IF_TYPE_CNR                              85\n#define IF_TYPE_ISO88025R_DTR                    86\n#define IF_TYPE_EPLRS                            87\n#define IF_TYPE_ARAP                             88\n#define IF_TYPE_PROP_CNLS                        89\n#define IF_TYPE_HOSTPAD                          90\n#define IF_TYPE_TERMPAD                          91\n#define IF_TYPE_FRAMERELAY_MPI                   92\n#define IF_TYPE_X213                             93\n#define IF_TYPE_ADSL                             94\n#define IF_TYPE_RADSL                            95\n#define IF_TYPE_SDSL                             96\n#define IF_TYPE_VDSL                             97\n#define IF_TYPE_ISO88025_CRFPRINT                98\n#define IF_TYPE_MYRINET                          99\n#define IF_TYPE_VOICE_EM                         100\n#define IF_TYPE_VOICE_FXO                        101\n#define IF_TYPE_VOICE_FXS                        102\n#define IF_TYPE_VOICE_ENCAP                      103\n#define IF_TYPE_VOICE_OVERIP                     104\n#define IF_TYPE_ATM_DXI                          105\n#define IF_TYPE_ATM_FUNI                         106\n#define IF_TYPE_ATM_IMA                          107\n#define IF_TYPE_PPPMULTILINKBUNDLE               108\n#define IF_TYPE_IPOVER_CDLC                      109\n#define IF_TYPE_IPOVER_CLAW                      110\n#define IF_TYPE_STACKTOSTACK                     111\n#define IF_TYPE_VIRTUALIPADDRESS                 112\n#define IF_TYPE_MPC                              113\n#define IF_TYPE_IPOVER_ATM                       114\n#define IF_TYPE_ISO88025_FIBER                   115\n#define IF_TYPE_TDLC                             116\n#define IF_TYPE_GIGABITETHERNET                  117\n#define IF_TYPE_HDLC                             118\n#define IF_TYPE_LAP_F                            119\n#define IF_TYPE_V37                              120\n#define IF_TYPE_X25_MLP                          121\n#define IF_TYPE_X25_HUNTGROUP                    122\n#define IF_TYPE_TRANSPHDLC                       123\n#define IF_TYPE_INTERLEAVE                       124\n#define IF_TYPE_FAST                             125\n#define IF_TYPE_IP                               126\n#define IF_TYPE_DOCSCABLE_MACLAYER               127\n#define IF_TYPE_DOCSCABLE_DOWNSTREAM             128\n#define IF_TYPE_DOCSCABLE_UPSTREAM               129\n#define IF_TYPE_A12MPPSWITCH                     130\n#define IF_TYPE_TUNNEL                           131\n#define IF_TYPE_COFFEE                           132\n#define IF_TYPE_CES                              133\n#define IF_TYPE_ATM_SUBINTERFACE                 134\n#define IF_TYPE_L2_VLAN                          135\n#define IF_TYPE_L3_IPVLAN                        136\n#define IF_TYPE_L3_IPXVLAN                       137\n#define IF_TYPE_DIGITALPOWERLINE                 138\n#define IF_TYPE_MEDIAMAILOVERIP                  139\n#define IF_TYPE_DTM                              140\n#define IF_TYPE_DCN                              141\n#define IF_TYPE_IPFORWARD                        142\n#define IF_TYPE_MSDSL                            143\n#define IF_TYPE_IEEE1394                         144\n#define IF_TYPE_IF_GSN                           145\n#define IF_TYPE_DVBRCC_MACLAYER                  146\n#define IF_TYPE_DVBRCC_DOWNSTREAM                147\n#define IF_TYPE_DVBRCC_UPSTREAM                  148\n#define IF_TYPE_ATM_VIRTUAL                      149\n#define IF_TYPE_MPLS_TUNNEL                      150\n#define IF_TYPE_SRP                              151\n#define IF_TYPE_VOICEOVERATM                     152\n#define IF_TYPE_VOICEOVERFRAMERELAY              153\n#define IF_TYPE_IDSL                             154\n#define IF_TYPE_COMPOSITELINK                    155\n#define IF_TYPE_SS7_SIGLINK                      156\n#define IF_TYPE_PROP_WIRELESS_P2P                157\n#define IF_TYPE_FR_FORWARD                       158\n#define IF_TYPE_RFC1483                          159\n#define IF_TYPE_USB                              160\n#define IF_TYPE_IEEE8023AD_LAG                   161\n#define IF_TYPE_BGP_POLICY_ACCOUNTING            162\n#define IF_TYPE_FRF16_MFR_BUNDLE                 163\n#define IF_TYPE_H323_GATEKEEPER                  164\n#define IF_TYPE_H323_PROXY                       165\n#define IF_TYPE_MPLS                             166\n#define IF_TYPE_MF_SIGLINK                       167\n#define IF_TYPE_HDSL2                            168\n#define IF_TYPE_SHDSL                            169\n#define IF_TYPE_DS1_FDL                          170\n#define IF_TYPE_POS                              171\n#define IF_TYPE_DVB_ASI_IN                       172\n#define IF_TYPE_DVB_ASI_OUT                      173\n#define IF_TYPE_PLC                              175\n#define IF_TYPE_NFAS                             175\n#define IF_TYPE_TR008                            176\n#define IF_TYPE_GR303_RDT                        177\n#define IF_TYPE_GR303_IDT                        178\n#define IF_TYPE_ISUP                             179\n#define IF_TYPE_PROP_DOCS_WIRELESS_MACLAYER      180\n#define IF_TYPE_PROP_DOCS_WIRELESS_DOWNSTREAM    181\n#define IF_TYPE_PROP_DOCS_WIRELESS_UPSTREAM      182\n#define IF_TYPE_HIPERLAN2                        183\n#define IF_TYPE_PROP_BWA_P2MP                    184\n#define IF_TYPE_SONET_OVERHEAD_CHANNEL           185\n#define IF_TYPE_DIGITAL_WRAPPER_OVERHEAD_CHANNEL 186\n#define IF_TYPE_AAL2                             187\n#define IF_TYPE_RADIO_MAC                        188\n#define IF_TYPE_ATM_RADIO                        189\n#define IF_TYPE_IMT                              190\n#define IF_TYPE_MVL                              191\n#define IF_TYPE_REACH_DSL                        192\n#define IF_TYPE_FR_DLCI_ENDPT                    193\n#define IF_TYPE_ATM_VCI_ENDPT                    194\n#define IF_TYPE_OPTICAL_CHANNEL                  195\n#define IF_TYPE_OPTICAL_TRANSPORT                196\n#define IF_TYPE_IEEE80216_WANN                   237\n#define IF_TYPE_WWANPP                           243\n#define IF_TYPE_WWANPP2                          244\n#define MAX_IF_TYPE                              244\n\n#define MIB_IF_TYPE_OTHER               1\n#define MIB_IF_TYPE_ETHERNET            6\n#define MIB_IF_TYPE_TOKENRING           9\n#define MIB_IF_TYPE_FDDI                15\n#define MIB_IF_TYPE_PPP                 23\n#define MIB_IF_TYPE_LOOPBACK            24\n#define MIB_IF_TYPE_SLIP                28\n\ntypedef ULONG IFTYPE;\n\n#define MIB_IF_ADMIN_STATUS_UP          1\n#define MIB_IF_ADMIN_STATUS_DOWN        2\n#define MIB_IF_ADMIN_STATUS_TESTING     3\n\ntypedef enum _INTERNAL_IF_OPER_STATUS\n{\n    MIB_IF_OPER_STATUS_NON_OPERATIONAL = 0,\n    MIB_IF_OPER_STATUS_UNREACHABLE = 1,\n    MIB_IF_OPER_STATUS_DISCONNECTED = 2,\n    MIB_IF_OPER_STATUS_CONNECTING = 3,\n    MIB_IF_OPER_STATUS_CONNECTED = 4,\n    MIB_IF_OPER_STATUS_OPERATIONAL = 5,\n} INTERNAL_IF_OPER_STATUS;\n\n#endif /* WINE_IPIFCONS_H__ */\n"
  },
  {
    "path": "wine/windows/ipmib.h",
    "content": "/*\n * Copyright (C) 2003 Juan Lang\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __WINE_IPMIB_H\n#define __WINE_IPMIB_H\n\n#include <ifmib.h>\n#include <nldef.h>\n\n/* Flags used in the wType field from MIB_IPADDRROW */\n\n#define MIB_IPADDR_PRIMARY 0x0001\n#define MIB_IPADDR_DYNAMIC 0x0004\n#define MIB_IPADDR_DISCONNECTED 0x0008\n#define MIB_IPADDR_DELETED 0x0040\n#define MIB_IPADDR_TRANSIENT 0x0080\n\n/* IPADDR table */\n\ntypedef struct _MIB_IPADDRROW\n{\n    DWORD          dwAddr;\n    IF_INDEX       dwIndex;\n    DWORD          dwMask;\n    DWORD          dwBCastAddr;\n    DWORD          dwReasmSize;\n    unsigned short unused1;\n    unsigned short wType;\n} MIB_IPADDRROW, *PMIB_IPADDRROW;\n\ntypedef struct _MIB_IPADDRTABLE\n{\n    DWORD         dwNumEntries;\n    MIB_IPADDRROW table[1];\n} MIB_IPADDRTABLE, *PMIB_IPADDRTABLE;\n\n\n/* IPFORWARD table */\n\ntypedef struct _MIB_IPFORWARDNUMBER\n{\n    DWORD dwValue;\n} MIB_IPFORWARDNUMBER, *PMIB_IPFORWARDNUMBER;\n\ntypedef enum\n{\n    MIB_IPROUTE_TYPE_OTHER = 1,\n    MIB_IPROUTE_TYPE_INVALID = 2,\n    MIB_IPROUTE_TYPE_DIRECT = 3,\n    MIB_IPROUTE_TYPE_INDIRECT = 4,\n} MIB_IPFORWARD_TYPE;\n\ntypedef NL_ROUTE_PROTOCOL MIB_IPFORWARD_PROTO;\n\ntypedef struct _MIB_IPFORWARDROW\n{\n    DWORD    dwForwardDest;\n    DWORD    dwForwardMask;\n    DWORD    dwForwardPolicy;\n    DWORD    dwForwardNextHop;\n    IF_INDEX dwForwardIfIndex;\n    union\n    {\n        DWORD              dwForwardType;\n        MIB_IPFORWARD_TYPE ForwardType;\n    } DUMMYUNIONNAME1;\n    union\n    {\n        DWORD               dwForwardProto;\n        MIB_IPFORWARD_PROTO ForwardProto;\n    } DUMMYUNIONNAME2;\n    DWORD    dwForwardAge;\n    DWORD    dwForwardNextHopAS;\n    DWORD    dwForwardMetric1;\n    DWORD    dwForwardMetric2;\n    DWORD    dwForwardMetric3;\n    DWORD    dwForwardMetric4;\n    DWORD    dwForwardMetric5;\n} MIB_IPFORWARDROW, *PMIB_IPFORWARDROW;\n\ntypedef struct _MIB_IPFORWARDTABLE\n{\n    DWORD            dwNumEntries;\n    MIB_IPFORWARDROW table[1];\n} MIB_IPFORWARDTABLE, *PMIB_IPFORWARDTABLE;\n\n\n/* IPNET table */\n\ntypedef enum\n{\n    MIB_IPNET_TYPE_OTHER = 1,\n    MIB_IPNET_TYPE_INVALID = 2,\n    MIB_IPNET_TYPE_DYNAMIC = 3,\n    MIB_IPNET_TYPE_STATIC = 4,\n} MIB_IPNET_TYPE;\n\ntypedef struct _MIB_IPNETROW\n{\n    DWORD dwIndex;\n    DWORD dwPhysAddrLen;\n    BYTE  bPhysAddr[MAXLEN_PHYSADDR];\n    DWORD dwAddr;\n    union\n    {\n        DWORD          dwType;\n        MIB_IPNET_TYPE Type;\n    } DUMMYUNIONNAME;\n} MIB_IPNETROW, *PMIB_IPNETROW;\n\ntypedef struct _MIB_IPNETTABLE\n{\n    DWORD        dwNumEntries;\n    MIB_IPNETROW table[1];\n} MIB_IPNETTABLE, *PMIB_IPNETTABLE;\n\n\n/* IP statistics */\n\ntypedef enum\n{\n    MIB_IP_FORWARDING = 1,\n    MIB_IP_NOT_FORWARDING = 2,\n} MIB_IPSTATS_FORWARDING, *PMIB_IPSTATS_FORWARDING;\n\ntypedef struct _MIB_IPSTATS\n{\n    union\n    {\n        DWORD                  dwForwarding;\n        MIB_IPSTATS_FORWARDING Forwarding;\n    } DUMMYUNIONNAME;\n    DWORD dwDefaultTTL;\n    DWORD dwInReceives;\n    DWORD dwInHdrErrors;\n    DWORD dwInAddrErrors;\n    DWORD dwForwDatagrams;\n    DWORD dwInUnknownProtos;\n    DWORD dwInDiscards;\n    DWORD dwInDelivers;\n    DWORD dwOutRequests;\n    DWORD dwRoutingDiscards;\n    DWORD dwOutDiscards;\n    DWORD dwOutNoRoutes;\n    DWORD dwReasmTimeout;\n    DWORD dwReasmReqds;\n    DWORD dwReasmOks;\n    DWORD dwReasmFails;\n    DWORD dwFragOks;\n    DWORD dwFragFails;\n    DWORD dwFragCreates;\n    DWORD dwNumIf;\n    DWORD dwNumAddr;\n    DWORD dwNumRoutes;\n} MIB_IPSTATS, *PMIB_IPSTATS;\n\n\n/* ICMP statistics */\n\ntypedef struct _MIBICMPSTATS\n{\n    DWORD dwMsgs;\n    DWORD dwErrors;\n    DWORD dwDestUnreachs;\n    DWORD dwTimeExcds;\n    DWORD dwParmProbs;\n    DWORD dwSrcQuenchs;\n    DWORD dwRedirects;\n    DWORD dwEchos;\n    DWORD dwEchoReps;\n    DWORD dwTimestamps;\n    DWORD dwTimestampReps;\n    DWORD dwAddrMasks;\n    DWORD dwAddrMaskReps;\n} MIBICMPSTATS, *PMIBICMPSTATS;\n\ntypedef struct _MIBICMPINFO\n{\n    MIBICMPSTATS icmpInStats;\n    MIBICMPSTATS icmpOutStats;\n} MIBICMPINFO;\n\ntypedef struct _MIB_ICMP\n{\n    MIBICMPINFO stats;\n} MIB_ICMP, *PMIB_ICMP;\n\ntypedef enum\n{\n    ICMP4_ECHO_REPLY        =  0,\n    ICMP4_DST_UNREACH       =  3,\n    ICMP4_SOURCE_QUENCH     =  4,\n    ICMP4_REDIRECT          =  5,\n    ICMP4_ECHO_REQUEST      =  8,\n    ICMP4_ROUTER_ADVERT     =  9,\n    ICMP4_ROUTER_SOLICIT    = 10,\n    ICMP4_TIME_EXCEEDED     = 11,\n    ICMP4_PARAM_PROB        = 12,\n    ICMP4_TIMESTAMP_REQUEST = 13,\n    ICMP4_TIMESTAMP_REPLY   = 14,\n    ICMP4_MASK_REQUEST      = 17,\n    ICMP4_MASK_REPLY        = 18,\n} ICMP4_TYPE, *PICMP4_TYPE;\n\ntypedef enum\n{\n    ICMP6_DST_UNREACH          =   1,\n    ICMP6_PACKET_TOO_BIG       =   2,\n    ICMP6_TIME_EXCEEDED        =   3,\n    ICMP6_PARAM_PROB           =   4,\n    ICMP6_ECHO_REQUEST         = 128,\n    ICMP6_ECHO_REPLY           = 129,\n    ICMP6_MEMBERSHIP_QUERY     = 130,\n    ICMP6_MEMBERSHIP_REPORT    = 131,\n    ICMP6_MEMBERSHIP_REDUCTION = 132,\n    ND_ROUTER_SOLICIT          = 133,\n    ND_ROUTER_ADVERT           = 134,\n    ND_NEIGHBOR_SOLICIT        = 135,\n    ND_NEIGHBOR_ADVERT         = 136,\n    ND_REDIRECT                = 137,\n    ICMP6_V2_MEMBERSHIP_REPORT = 143,\n} ICMP6_TYPE, *PICMP6_TYPE;\n\ntypedef struct _MIBICMPSTATS_EX\n{\n    DWORD dwMsgs;\n    DWORD dwErrors;\n    DWORD rgdwTypeCount[256];\n} MIBICMPSTATS_EX, *PMIBICMPSTATS_EX;\n\ntypedef struct _MIB_ICMP_EX\n{\n  MIBICMPSTATS_EX icmpInStats;\n  MIBICMPSTATS_EX icmpOutStats;\n} MIB_ICMP_EX, *PMIB_ICMP_EX;\n\n#endif /* __WINE_IPMIB_H */\n"
  },
  {
    "path": "wine/windows/iprtrmib.h",
    "content": "/* WINE iprtrmib.h\n * Copyright (C) 2003 Juan Lang\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef WINE_IPRTRMIB_H__\n#define WINE_IPRTRMIB_H__\n\n#include <mprapi.h>\n#include <ipifcons.h>\n\n#include <ipmib.h>\n#include <tcpmib.h>\n#include <udpmib.h>\n\ntypedef enum _TCP_TABLE_CLASS\n{\n    TCP_TABLE_BASIC_LISTENER,\n    TCP_TABLE_BASIC_CONNECTIONS,\n    TCP_TABLE_BASIC_ALL,\n    TCP_TABLE_OWNER_PID_LISTENER,\n    TCP_TABLE_OWNER_PID_CONNECTIONS,\n    TCP_TABLE_OWNER_PID_ALL,\n    TCP_TABLE_OWNER_MODULE_LISTENER,\n    TCP_TABLE_OWNER_MODULE_CONNECTIONS,\n    TCP_TABLE_OWNER_MODULE_ALL\n} TCP_TABLE_CLASS, *PTCP_TABLE_CLASS;\n\ntypedef enum _UDP_TABLE_CLASS\n{\n    UDP_TABLE_BASIC,\n    UDP_TABLE_OWNER_PID,\n    UDP_TABLE_OWNER_MODULE\n} UDP_TABLE_CLASS, *PUDP_TABLE_CLASS;\n\n#endif /* WINE_IPRTRMIB_H__ */\n"
  },
  {
    "path": "wine/windows/iptypes.h",
    "content": "/* WINE iptypes.h\n * Copyright (C) 2003 Juan Lang\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef WINE_IPTYPES_H_\n#define WINE_IPTYPES_H_\n\n#include <time.h>\n#include <ifdef.h>\n#include <nldef.h>\n\n#define MAX_ADAPTER_DESCRIPTION_LENGTH  128\n#define MAX_ADAPTER_NAME_LENGTH         256\n#define MAX_ADAPTER_ADDRESS_LENGTH      8\n#define MAX_HOSTNAME_LEN                128\n#define MAX_DOMAIN_NAME_LEN             128\n#define MAX_SCOPE_ID_LEN                256\n#define MAX_DHCPV6_DUID_LENGTH          130\n#define MAX_DNS_SUFFIX_STRING_LENGTH    256\n\n#define BROADCAST_NODETYPE              1\n#define PEER_TO_PEER_NODETYPE           2\n#define MIXED_NODETYPE                  4\n#define HYBRID_NODETYPE                 8\n\ntypedef struct {\n    char String[4 * 4];\n} IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING;\n\ntypedef struct _IP_ADDR_STRING {\n    struct _IP_ADDR_STRING* Next;\n    IP_ADDRESS_STRING IpAddress;\n    IP_MASK_STRING IpMask;\n    DWORD Context;\n} IP_ADDR_STRING, *PIP_ADDR_STRING;\n\ntypedef struct _IP_ADAPTER_INFO {\n    struct _IP_ADAPTER_INFO* Next;\n    DWORD ComboIndex;\n    char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];\n    char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];\n    UINT AddressLength;\n    BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];\n    DWORD Index;\n    UINT Type;\n    UINT DhcpEnabled;\n    PIP_ADDR_STRING CurrentIpAddress;\n    IP_ADDR_STRING IpAddressList;\n    IP_ADDR_STRING GatewayList;\n    IP_ADDR_STRING DhcpServer;\n    BOOL HaveWins;\n    IP_ADDR_STRING PrimaryWinsServer;\n    IP_ADDR_STRING SecondaryWinsServer;\n    time_t LeaseObtained;\n    time_t LeaseExpires;\n} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;\n\ntypedef struct _IP_PER_ADAPTER_INFO {\n    UINT AutoconfigEnabled;\n    UINT AutoconfigActive;\n    PIP_ADDR_STRING CurrentDnsServer;\n    IP_ADDR_STRING DnsServerList;\n} IP_PER_ADAPTER_INFO, *PIP_PER_ADAPTER_INFO;\n\ntypedef struct {\n    char HostName[MAX_HOSTNAME_LEN + 4] ;\n    char DomainName[MAX_DOMAIN_NAME_LEN + 4];\n    PIP_ADDR_STRING CurrentDnsServer;\n    IP_ADDR_STRING DnsServerList;\n    UINT NodeType;\n    char ScopeId[MAX_SCOPE_ID_LEN + 4];\n    UINT EnableRouting;\n    UINT EnableProxy;\n    UINT EnableDns;\n} FIXED_INFO, *PFIXED_INFO;\n\ntypedef NL_PREFIX_ORIGIN IP_PREFIX_ORIGIN;\ntypedef NL_SUFFIX_ORIGIN IP_SUFFIX_ORIGIN;\ntypedef NL_DAD_STATE IP_DAD_STATE;\n\n#ifdef _WINSOCK2API_\n\ntypedef struct _IP_ADAPTER_UNICAST_ADDRESS_LH {\n    union {\n        struct {\n            ULONG Length;\n            DWORD Flags;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME;\n    struct _IP_ADAPTER_UNICAST_ADDRESS_LH   *Next;\n    SOCKET_ADDRESS                          Address;\n    IP_PREFIX_ORIGIN                        PrefixOrigin;\n    IP_SUFFIX_ORIGIN                        SuffixOrigin;\n    IP_DAD_STATE                            DadState;\n    ULONG                                   ValidLifetime;\n    ULONG                                   PreferredLifetime;\n    ULONG                                   LeaseLifetime;\n    UINT8                                   OnLinkPrefixLength;\n} IP_ADAPTER_UNICAST_ADDRESS_LH, *PIP_ADAPTER_UNICAST_ADDRESS_LH;\n\ntypedef struct _IP_ADAPTER_UNICAST_ADDRESS_XP {\n    union {\n        struct {\n            ULONG Length;\n            DWORD Flags;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME;\n    struct _IP_ADAPTER_UNICAST_ADDRESS_XP   *Next;\n    SOCKET_ADDRESS                          Address;\n    IP_PREFIX_ORIGIN                        PrefixOrigin;\n    IP_SUFFIX_ORIGIN                        SuffixOrigin;\n    IP_DAD_STATE                            DadState;\n    ULONG                                   ValidLifetime;\n    ULONG                                   PreferredLifetime;\n    ULONG                                   LeaseLifetime;\n} IP_ADAPTER_UNICAST_ADDRESS_XP, *PIP_ADAPTER_UNICAST_ADDRESS_XP;\n\ntypedef IP_ADAPTER_UNICAST_ADDRESS_LH IP_ADAPTER_UNICAST_ADDRESS;\ntypedef IP_ADAPTER_UNICAST_ADDRESS_LH *PIP_ADAPTER_UNICAST_ADDRESS;\n\ntypedef struct _IP_ADAPTER_ANYCAST_ADDRESS {\n    union {\n        ULONGLONG Alignment;\n        struct {\n            ULONG Length;\n            DWORD Flags;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME;\n    struct _IP_ADAPTER_ANYCAST_ADDRESS *Next;\n    SOCKET_ADDRESS                      Address;\n} IP_ADAPTER_ANYCAST_ADDRESS, *PIP_ADAPTER_ANYCAST_ADDRESS;\n\ntypedef struct _IP_ADAPTER_MULTICAST_ADDRESS {\n    union {\n        ULONGLONG Alignment;\n        struct {\n            ULONG Length;\n            DWORD Flags;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME;\n    struct _IP_ADAPTER_MULTICAST_ADDRESS *Next;\n    SOCKET_ADDRESS                       Address;\n} IP_ADAPTER_MULTICAST_ADDRESS, *PIP_ADAPTER_MULTICAST_ADDRESS;\n\ntypedef struct _IP_ADAPTER_DNS_SERVER_ADDRESS {\n    union {\n        ULONGLONG Alignment;\n        struct {\n            ULONG Length;\n            DWORD Reserved;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME;\n    struct _IP_ADAPTER_DNS_SERVER_ADDRESS *Next;\n    SOCKET_ADDRESS                         Address;\n} IP_ADAPTER_DNS_SERVER_ADDRESS, *PIP_ADAPTER_DNS_SERVER_ADDRESS;\n\ntypedef struct _IP_ADAPTER_PREFIX {\n    union {\n        ULONGLONG Alignment;\n        struct {\n            ULONG Length;\n            DWORD Flags;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME;\n    struct _IP_ADAPTER_PREFIX *Next;\n    SOCKET_ADDRESS             Address;\n    ULONG                      PrefixLength;\n} IP_ADAPTER_PREFIX, *PIP_ADAPTER_PREFIX;\n\ntypedef struct _IP_ADAPTER_WINS_SERVER_ADDRESS_LH {\n    union {\n        ULONGLONG Alignment;\n        struct {\n            ULONG Length;\n            DWORD Reserved;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME;\n    struct _IP_ADAPTER_WINS_SERVER_ADDRESS_LH *Next;\n    SOCKET_ADDRESS Address;\n} IP_ADAPTER_WINS_SERVER_ADDRESS_LH, *PIP_ADAPTER_WINS_SERVER_ADDRESS_LH;\ntypedef IP_ADAPTER_WINS_SERVER_ADDRESS_LH IP_ADAPTER_WINS_SERVER_ADDRESS;\ntypedef IP_ADAPTER_WINS_SERVER_ADDRESS_LH *PIP_ADAPTER_WINS_SERVER_ADDRESS;\n\ntypedef struct _IP_ADAPTER_GATEWAY_ADDRESS_LH {\n    union {\n        ULONGLONG Alignment;\n        struct {\n            ULONG Length;\n            DWORD Reserved;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME;\n    struct _IP_ADAPTER_GATEWAY_ADDRESS_LH *Next;\n    SOCKET_ADDRESS Address;\n} IP_ADAPTER_GATEWAY_ADDRESS_LH, *PIP_ADAPTER_GATEWAY_ADDRESS_LH;\ntypedef IP_ADAPTER_GATEWAY_ADDRESS_LH IP_ADAPTER_GATEWAY_ADDRESS;\ntypedef IP_ADAPTER_GATEWAY_ADDRESS_LH *PIP_ADAPTER_GATEWAY_ADDRESS;\n\ntypedef struct _IP_ADAPTER_DNS_SUFFIX {\n    struct _IP_ADAPTER_DNS_SUFFIX *Next;\n    WCHAR String[MAX_DNS_SUFFIX_STRING_LENGTH];\n} IP_ADAPTER_DNS_SUFFIX, *PIP_ADAPTER_DNS_SUFFIX;\n\n#define IP_ADAPTER_DDNS_ENABLED               0x1\n#define IP_ADAPTER_REGISTER_ADAPTER_SUFFIX    0x2\n#define IP_ADAPTER_DHCP_ENABLED               0x4\n#define IP_ADAPTER_RECEIVE_ONLY               0x8\n#define IP_ADAPTER_NO_MULTICAST               0x10\n#define IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG 0x20\n#define IP_ADAPTER_NETBIOS_OVER_TCPIP_ENABLED 0x40\n#define IP_ADAPTER_IPV4_ENABLED               0x80\n#define IP_ADAPTER_IPV6_ENABLED               0x100\n#define IP_ADAPTER_IPV6_MANAGE_ADDRESS_CONFIG 0x200\n\ntypedef struct _IP_ADAPTER_ADDRESSES_LH {\n    union {\n        ULONGLONG Alignment;\n        struct {\n            ULONG Length;\n            DWORD IfIndex;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME;\n    struct _IP_ADAPTER_ADDRESSES_LH *Next;\n    PCHAR                           AdapterName;\n    PIP_ADAPTER_UNICAST_ADDRESS     FirstUnicastAddress;\n    PIP_ADAPTER_ANYCAST_ADDRESS     FirstAnycastAddress;\n    PIP_ADAPTER_MULTICAST_ADDRESS   FirstMulticastAddress;\n    PIP_ADAPTER_DNS_SERVER_ADDRESS  FirstDnsServerAddress;\n    PWCHAR                          DnsSuffix;\n    PWCHAR                          Description;\n    PWCHAR                          FriendlyName;\n    BYTE                            PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];\n    DWORD                           PhysicalAddressLength;\n    union {\n        DWORD                       Flags;\n        struct {\n            DWORD                   DdnsEnabled : 1;\n            DWORD                   RegisterAdapterSuffix : 1;\n            DWORD                   Dhcpv4Enabled : 1;\n            DWORD                   ReceiveOnly : 1;\n            DWORD                   NoMulticast : 1;\n            DWORD                   Ipv6OtherStatefulConfig : 1;\n            DWORD                   NetbiosOverTcpipEnabled : 1;\n            DWORD                   Ipv4Enabled : 1;\n            DWORD                   Ipv6Enabled : 1;\n            DWORD                   Ipv6ManagedAddressConfigurationSupported : 1;\n        } DUMMYSTRUCTNAME1;\n    } DUMMYUNIONNAME1;\n    DWORD                           Mtu;\n    DWORD                           IfType;\n    IF_OPER_STATUS                  OperStatus;\n    DWORD                           Ipv6IfIndex;\n    DWORD                           ZoneIndices[16];\n    PIP_ADAPTER_PREFIX              FirstPrefix;\n    ULONG64                         TransmitLinkSpeed;\n    ULONG64                         ReceiveLinkSpeed;\n    PIP_ADAPTER_WINS_SERVER_ADDRESS_LH FirstWinsServerAddress;\n    PIP_ADAPTER_GATEWAY_ADDRESS_LH  FirstGatewayAddress;\n    ULONG                           Ipv4Metric;\n    ULONG                           Ipv6Metric;\n    IF_LUID                         Luid;\n    SOCKET_ADDRESS                  Dhcpv4Server;\n    NET_IF_COMPARTMENT_ID           CompartmentId;\n    NET_IF_NETWORK_GUID             NetworkGuid;\n    NET_IF_CONNECTION_TYPE          ConnectionType;\n    TUNNEL_TYPE                     TunnelType;\n    SOCKET_ADDRESS                  Dhcpv6Server;\n    BYTE                            Dhcpv6ClientDuid[MAX_DHCPV6_DUID_LENGTH];\n    ULONG                           Dhcpv6ClientDuidLength;\n    ULONG                           Dhcpv6Iaid;\n    PIP_ADAPTER_DNS_SUFFIX          FirstDnsSuffix;\n} IP_ADAPTER_ADDRESSES_LH, *PIP_ADAPTER_ADDRESSES_LH;\n\ntypedef struct _IP_ADAPTER_ADDRESSES_XP {\n    union {\n        ULONGLONG Alignment;\n        struct {\n            ULONG Length;\n            DWORD IfIndex;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME;\n    struct _IP_ADAPTER_ADDRESSES_XP *Next;\n    PCHAR                           AdapterName;\n    PIP_ADAPTER_UNICAST_ADDRESS     FirstUnicastAddress;\n    PIP_ADAPTER_ANYCAST_ADDRESS     FirstAnycastAddress;\n    PIP_ADAPTER_MULTICAST_ADDRESS   FirstMulticastAddress;\n    PIP_ADAPTER_DNS_SERVER_ADDRESS  FirstDnsServerAddress;\n    PWCHAR                          DnsSuffix;\n    PWCHAR                          Description;\n    PWCHAR                          FriendlyName;\n    BYTE                            PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];\n    DWORD                           PhysicalAddressLength;\n    DWORD                           Flags;\n    DWORD                           Mtu;\n    DWORD                           IfType;\n    IF_OPER_STATUS                  OperStatus;\n    DWORD                           Ipv6IfIndex;\n    DWORD                           ZoneIndices[16];\n    PIP_ADAPTER_PREFIX              FirstPrefix;\n} IP_ADAPTER_ADDRESSES_XP, *PIP_ADAPTER_ADDRESSES_XP;\n\ntypedef IP_ADAPTER_ADDRESSES_LH IP_ADAPTER_ADDRESSES;\ntypedef IP_ADAPTER_ADDRESSES_LH *PIP_ADAPTER_ADDRESSES;\n\n#define GAA_FLAG_SKIP_UNICAST                0x00000001\n#define GAA_FLAG_SKIP_ANYCAST                0x00000002\n#define GAA_FLAG_SKIP_MULTICAST              0x00000004\n#define GAA_FLAG_SKIP_DNS_SERVER             0x00000008\n#define GAA_FLAG_INCLUDE_PREFIX              0x00000010\n#define GAA_FLAG_SKIP_FRIENDLY_NAME          0x00000020\n#define GAA_FLAG_INCLUDE_WINS_INFO           0x00000040\n#define GAA_FLAG_INCLUDE_ALL_GATEWAYS        0x00000080\n#define GAA_FLAG_INCLUDE_ALL_INTERFACES      0x00000100\n#define GAA_FLAG_INCLUDE_ALL_COMPARTMENTS    0x00000200\n#define GAA_FLAG_INCLUDE_TUNNEL_BINDINGORDER 0x00000400\n\n#endif /* _WINSOCK2API_ */\n\n#endif /* WINE_IPTYPES_H_*/\n"
  },
  {
    "path": "wine/windows/isguids.h",
    "content": "/*\n * Copyright 2007 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _ISGUIDS_H_\n#define _ISGUIDS_H_\n\nDEFINE_GUID(CLSID_InternetShortcut, 0xfbf23b40,0xe3f0,0x101b,0x84,0x88,0x00,0xaa,0x00,0x3e,0x56,0xf8);\n\nDEFINE_GUID(IID_IUniformResourceLocatorA, 0xfbf23b80,0xe3f0,0x101b,0x84,0x88,0x00,0xaa,0x00,0x3e,0x56,0xf8);\nDEFINE_GUID(IID_IUniformResourceLocatorW, 0xcabb0da0,0xda57,0x11cf,0x99,0x74,0x00,0x20,0xaf,0xd7,0x97,0x62);\n#define IID_IUniformResourceLocator WINELIB_NAME_AW(IID_IUniformResourceLocator)\n\n#endif\n"
  },
  {
    "path": "wine/windows/knownfolders.h",
    "content": "/*\n * Copyright 2010 Hans Leidekker for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_KNOWNFOLDERS_H\n#define __WINE_KNOWNFOLDERS_H\n\n#ifdef DEFINE_KNOWN_FOLDER\n#undef DEFINE_KNOWN_FOLDER\n#endif\n\n#ifdef INITGUID\n#ifdef __cplusplus\n#define DEFINE_KNOWN_FOLDER(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\\n        EXTERN_C const GUID name DECLSPEC_HIDDEN; \\\n        EXTERN_C const GUID name = \\\n    { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }\n#else\n#define DEFINE_KNOWN_FOLDER(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\\n        const GUID name DECLSPEC_HIDDEN; \\\n        const GUID name = \\\n    { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }\n#endif\n#else\n#define DEFINE_KNOWN_FOLDER(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\\n    EXTERN_C const GUID name DECLSPEC_HIDDEN\n#endif\n\nDEFINE_KNOWN_FOLDER(FOLDERID_AddNewPrograms,        0xde61d971, 0x5ebc, 0x4f02, 0xa3, 0xa9, 0x6c, 0x82, 0x89, 0x5e, 0x5c, 0x04);\nDEFINE_KNOWN_FOLDER(FOLDERID_AdminTools,            0x724ef170, 0xa42d, 0x4fef, 0x9f, 0x26, 0xb6, 0x0e, 0x84, 0x6f, 0xba, 0x4f);\nDEFINE_KNOWN_FOLDER(FOLDERID_AppUpdates,            0xa305ce99, 0xf527, 0x492b, 0x8b, 0x1a, 0x7e, 0x76, 0xfa, 0x98, 0xd6, 0xe4);\nDEFINE_KNOWN_FOLDER(FOLDERID_CDBurning,             0x9e52ab10, 0xf80d, 0x49df, 0xac, 0xb8, 0x43, 0x30, 0xf5, 0x68, 0x78, 0x55);\nDEFINE_KNOWN_FOLDER(FOLDERID_ChangeRemovePrograms,  0xdf7266ac, 0x9274, 0x4867, 0x8d, 0x55, 0x3b, 0xd6, 0x61, 0xde, 0x87, 0x2d);\nDEFINE_KNOWN_FOLDER(FOLDERID_CommonAdminTools,      0xd0384e7d, 0xbac3, 0x4797, 0x8f, 0x14, 0xcb, 0xa2, 0x29, 0xb3, 0x92, 0xb5);\nDEFINE_KNOWN_FOLDER(FOLDERID_CommonOEMLinks,        0xc1bae2d0, 0x10df, 0x4334, 0xbe, 0xdd, 0x7a, 0xa2, 0x0b, 0x22, 0x7a, 0x9d);\nDEFINE_KNOWN_FOLDER(FOLDERID_CommonPrograms,        0x0139d44e, 0x6afe, 0x49f2, 0x86, 0x90, 0x3d, 0xaf, 0xca, 0xe6, 0xff, 0xb8);\nDEFINE_KNOWN_FOLDER(FOLDERID_CommonStartMenu,       0xa4115719, 0xd62e, 0x491d, 0xaa, 0x7c, 0xe7, 0x4b, 0x8b, 0xe3, 0xb0, 0x67);\nDEFINE_KNOWN_FOLDER(FOLDERID_CommonStartup,         0x82a5ea35, 0xd9cd, 0x47c5, 0x96, 0x29, 0xe1, 0x5d, 0x2f, 0x71, 0x4e, 0x6e);\nDEFINE_KNOWN_FOLDER(FOLDERID_CommonTemplates,       0xb94237e7, 0x57ac, 0x4347, 0x91, 0x51, 0xb0, 0x8c, 0x6c, 0x32, 0xd1, 0xf7);\nDEFINE_KNOWN_FOLDER(FOLDERID_ComputerFolder,        0x0ac0837c, 0xbbf8, 0x452a, 0x85, 0x0d, 0x79, 0xd0, 0x8e, 0x66, 0x7c, 0xa7);\nDEFINE_KNOWN_FOLDER(FOLDERID_ConflictFolder,        0x4bfefb45, 0x347d, 0x4006, 0xa5, 0xbe, 0xac, 0x0c, 0xb0, 0x56, 0x71, 0x92);\nDEFINE_KNOWN_FOLDER(FOLDERID_ConnectionsFolder,     0x6f0cd92b, 0x2e97, 0x45d1, 0x88, 0xff, 0xb0, 0xd1, 0x86, 0xb8, 0xde, 0xdd);\nDEFINE_KNOWN_FOLDER(FOLDERID_Contacts,              0x56784854, 0xc6cb, 0x462b, 0x81, 0x69, 0x88, 0xe3, 0x50, 0xac, 0xb8, 0x82);\nDEFINE_KNOWN_FOLDER(FOLDERID_ControlPanelFolder,    0x82a74aeb, 0xaeb4, 0x465c, 0xa0, 0x14, 0xd0, 0x97, 0xee, 0x34, 0x6d, 0x63);\nDEFINE_KNOWN_FOLDER(FOLDERID_Cookies,               0x2b0f765d, 0xc0e9, 0x4171, 0x90, 0x8e, 0x08, 0xa6, 0x11, 0xb8, 0x4f, 0xf6);\nDEFINE_KNOWN_FOLDER(FOLDERID_Desktop,               0xb4bfcc3a, 0xdb2c, 0x424c, 0xb0, 0x29, 0x7f, 0xe9, 0x9a, 0x87, 0xc6, 0x41);\nDEFINE_KNOWN_FOLDER(FOLDERID_DeviceMetadataStore,   0x5ce4a5e9, 0xe4eb, 0x479d, 0xb8, 0x9f, 0x13, 0x0c, 0x02, 0x88, 0x61, 0x55);\nDEFINE_KNOWN_FOLDER(FOLDERID_Documents,             0xfdd39ad0, 0x238f, 0x46af, 0xad, 0xb4, 0x6c, 0x85, 0x48, 0x03, 0x69, 0xc7);\nDEFINE_KNOWN_FOLDER(FOLDERID_DocumentsLibrary,      0x7b0db17d, 0x9cd2, 0x4a93, 0x97, 0x33, 0x46, 0xcc, 0x89, 0x02, 0x2e, 0x7c);\nDEFINE_KNOWN_FOLDER(FOLDERID_Downloads,             0x374de290, 0x123f, 0x4565, 0x91, 0x64, 0x39, 0xc4, 0x92, 0x5e, 0x46, 0x7b);\nDEFINE_KNOWN_FOLDER(FOLDERID_Favorites,             0x1777f761, 0x68ad, 0x4d8a, 0x87, 0xbd, 0x30, 0xb7, 0x59, 0xfa, 0x33, 0xdd);\nDEFINE_KNOWN_FOLDER(FOLDERID_Fonts,                 0xfd228cb7, 0xae11, 0x4ae3, 0x86, 0x4c, 0x16, 0xf3, 0x91, 0x0a, 0xb8, 0xfe);\nDEFINE_KNOWN_FOLDER(FOLDERID_Games,                 0xcac52c1a, 0xb53d, 0x4edc, 0x92, 0xd7, 0x6b, 0x2e, 0x8a, 0xc1, 0x94, 0x34);\nDEFINE_KNOWN_FOLDER(FOLDERID_GameTasks,             0x054fae61, 0x4dd8, 0x4787, 0x80, 0xb6, 0x09, 0x02, 0x20, 0xc4, 0xb7, 0x00);\nDEFINE_KNOWN_FOLDER(FOLDERID_History,               0xd9dc8a3b, 0xb784, 0x432e, 0xa7, 0x81, 0x5a, 0x11, 0x30, 0xa7, 0x59, 0x63);\nDEFINE_KNOWN_FOLDER(FOLDERID_HomeGroup,             0x52528a6b, 0xb9e3, 0x4add, 0xb6, 0x0d, 0x58, 0x8c, 0x2d, 0xba, 0x84, 0x2d);\nDEFINE_KNOWN_FOLDER(FOLDERID_ImplicitAppShortcuts,  0xbcb5256f, 0x79f6, 0x4cee, 0xb7, 0x25, 0xdc, 0x34, 0xe4, 0x02, 0xfd, 0x46);\nDEFINE_KNOWN_FOLDER(FOLDERID_InternetCache,         0x352481e8, 0x33be, 0x4251, 0xba, 0x85, 0x60, 0x07, 0xca, 0xed, 0xcf, 0x9d);\nDEFINE_KNOWN_FOLDER(FOLDERID_InternetFolder,        0x4d9f7874, 0x4e0c, 0x4904, 0x96, 0x7b, 0x40, 0xb0, 0xd2, 0x0c, 0x3e, 0x4b);\nDEFINE_KNOWN_FOLDER(FOLDERID_Libraries,             0x1b3ea5dc, 0xb587, 0x4786, 0xb4, 0xef, 0xbd, 0x1d, 0xc3, 0x32, 0xae, 0xae);\nDEFINE_KNOWN_FOLDER(FOLDERID_Links,                 0xbfb9d5e0, 0xc6a9, 0x404c, 0xb2, 0xb2, 0xae, 0x6d, 0xb6, 0xaf, 0x49, 0x68);\nDEFINE_KNOWN_FOLDER(FOLDERID_LocalAppData,          0xf1b32785, 0x6fba, 0x4fcf, 0x9d, 0x55, 0x7b, 0x8e, 0x7f, 0x15, 0x70, 0x91);\nDEFINE_KNOWN_FOLDER(FOLDERID_LocalAppDataLow,       0xa520a1a4, 0x1780, 0x4ff6, 0xbd, 0x18, 0x16, 0x73, 0x43, 0xc5, 0xaf, 0x16);\nDEFINE_KNOWN_FOLDER(FOLDERID_LocalizedResourcesDir, 0x2a00375e, 0x224c, 0x49de, 0xb8, 0xd1, 0x44, 0x0d, 0xf7, 0xef, 0x3d, 0xdc);\nDEFINE_KNOWN_FOLDER(FOLDERID_Music,                 0x4bd8d571, 0x6d19, 0x48d3, 0xbe, 0x97, 0x42, 0x22, 0x20, 0x08, 0x0e, 0x43);\nDEFINE_KNOWN_FOLDER(FOLDERID_MusicLibrary,          0x2112ab0a, 0xc86a, 0x4ffe, 0xa3, 0x68, 0x0d, 0xe9, 0x6e, 0x47, 0x01, 0x2e);\nDEFINE_KNOWN_FOLDER(FOLDERID_NetHood,               0xc5abbf53, 0xe17f, 0x4121, 0x89, 0x00, 0x86, 0x62, 0x6f, 0xc2, 0xc9, 0x73);\nDEFINE_KNOWN_FOLDER(FOLDERID_NetworkFolder,         0xd20beec4, 0x5ca8, 0x4905, 0xae, 0x3b, 0xbf, 0x25, 0x1e, 0xa0, 0x9b, 0x53);\nDEFINE_KNOWN_FOLDER(FOLDERID_OriginalImages,        0x2c36c0aa, 0x5812, 0x4b87, 0xbf, 0xd0, 0x4c, 0xd0, 0xdf, 0xb1, 0x9b, 0x39);\nDEFINE_KNOWN_FOLDER(FOLDERID_PhotoAlbums,           0x69d2cf90, 0xfc33, 0x4fb7, 0x9a, 0x0c, 0xeb, 0xb0, 0xf0, 0xfc, 0xb4, 0x3c);\nDEFINE_KNOWN_FOLDER(FOLDERID_Pictures,              0x33e28130, 0x4e1e, 0x4676, 0x83, 0x5a, 0x98, 0x39, 0x5c, 0x3b, 0xc3, 0xbb);\nDEFINE_KNOWN_FOLDER(FOLDERID_PicturesLibrary,       0xa990ae9f, 0xa03b, 0x4e80, 0x94, 0xbc, 0x99, 0x12, 0xd7, 0x50, 0x41, 0x04);\nDEFINE_KNOWN_FOLDER(FOLDERID_Playlists,             0xde92c1c7, 0x837f, 0x4f69, 0xa3, 0xbb, 0x86, 0xe6, 0x31, 0x20, 0x4a, 0x23);\nDEFINE_KNOWN_FOLDER(FOLDERID_PrintersFolder,        0x76fc4e2d, 0xd6ad, 0x4519, 0xa6, 0x63, 0x37, 0xbd, 0x56, 0x06, 0x81, 0x85);\nDEFINE_KNOWN_FOLDER(FOLDERID_PrintHood,             0x9274bd8d, 0xcfd1, 0x41c3, 0xb3, 0x5e, 0xb1, 0x3f, 0x55, 0xa7, 0x58, 0xf4);\nDEFINE_KNOWN_FOLDER(FOLDERID_Profile,               0x5e6c858f, 0x0e22, 0x4760, 0x9a, 0xfe, 0xea, 0x33, 0x17, 0xb6, 0x71, 0x73);\nDEFINE_KNOWN_FOLDER(FOLDERID_ProgramData,           0x62ab5d82, 0xfdc1, 0x4dc3, 0xa9, 0xdd, 0x07, 0x0d, 0x1d, 0x49, 0x5d, 0x97);\nDEFINE_KNOWN_FOLDER(FOLDERID_ProgramFiles,          0x905e63b6, 0xc1bf, 0x494e, 0xb2, 0x9c, 0x65, 0xb7, 0x32, 0xd3, 0xd2, 0x1a);\nDEFINE_KNOWN_FOLDER(FOLDERID_ProgramFilesCommon,    0xf7f1ed05, 0x9f6d, 0x47a2, 0xaa, 0xae, 0x29, 0xd3, 0x17, 0xc6, 0xf0, 0x66);\nDEFINE_KNOWN_FOLDER(FOLDERID_ProgramFilesCommonX64, 0x6365d5a7, 0x0f0d, 0x45e5, 0x87, 0xf6, 0x0d, 0xa5, 0x6b, 0x6a, 0x4f, 0x7d);\nDEFINE_KNOWN_FOLDER(FOLDERID_ProgramFilesCommonX86, 0xde974d24, 0xd9c6, 0x4d3e, 0xbf, 0x91, 0xf4, 0x45, 0x51, 0x20, 0xb9, 0x17);\nDEFINE_KNOWN_FOLDER(FOLDERID_ProgramFilesX64,       0x6d809377, 0x6af0, 0x444b, 0x89, 0x57, 0xa3, 0x77, 0x3f, 0x02, 0x20, 0x0e);\nDEFINE_KNOWN_FOLDER(FOLDERID_ProgramFilesX86,       0x7c5a40ef, 0xa0fb, 0x4bfc, 0x87, 0x4a, 0xc0, 0xf2, 0xe0, 0xb9, 0xfa, 0x8e);\nDEFINE_KNOWN_FOLDER(FOLDERID_Programs,              0xa77f5d77, 0x2e2b, 0x44c3, 0xa6, 0xa2, 0xab, 0xa6, 0x01, 0x05, 0x4a, 0x51);\nDEFINE_KNOWN_FOLDER(FOLDERID_Public,                0xdfdf76a2, 0xc82a, 0x4d63, 0x90, 0x6a, 0x56, 0x44, 0xac, 0x45, 0x73, 0x85);\nDEFINE_KNOWN_FOLDER(FOLDERID_PublicDesktop,         0xc4aa340d, 0xf20f, 0x4863, 0xaf, 0xef, 0xf8, 0x7e, 0xf2, 0xe6, 0xba, 0x25);\nDEFINE_KNOWN_FOLDER(FOLDERID_PublicDocuments,       0xed4824af, 0xdce4, 0x45a8, 0x81, 0xe2, 0xfc, 0x79, 0x65, 0x08, 0x36, 0x34);\nDEFINE_KNOWN_FOLDER(FOLDERID_PublicDownloads,       0x3d644c9b, 0x1fb8, 0x4f30, 0x9b, 0x45, 0xf6, 0x70, 0x23, 0x5f, 0x79, 0xc0);\nDEFINE_KNOWN_FOLDER(FOLDERID_PublicGameTasks,       0xdebf2536, 0xe1a8, 0x4c59, 0xb6, 0xa2, 0x41, 0x45, 0x86, 0x47, 0x6a, 0xea);\nDEFINE_KNOWN_FOLDER(FOLDERID_PublicLibraries,       0x48daf80b, 0xe6cf, 0x4f4e, 0xb8, 0x00, 0x0e, 0x69, 0xd8, 0x4e, 0xe3, 0x84);\nDEFINE_KNOWN_FOLDER(FOLDERID_PublicMusic,           0x3214fab5, 0x9757, 0x4298, 0xbb, 0x61, 0x92, 0xa9, 0xde, 0xaa, 0x44, 0xff);\nDEFINE_KNOWN_FOLDER(FOLDERID_PublicPictures,        0xb6ebfb86, 0x6907, 0x413c, 0x9a, 0xf7, 0x4f, 0xc2, 0xab, 0xf0, 0x7c, 0xc5);\nDEFINE_KNOWN_FOLDER(FOLDERID_PublicRingtones,       0xe555ab60, 0x153b, 0x4d17, 0x9f, 0x04, 0xa5, 0xfe, 0x99, 0xfc, 0x15, 0xec);\nDEFINE_KNOWN_FOLDER(FOLDERID_PublicVideos,          0x2400183a, 0x6185, 0x49fb, 0xa2, 0xd8, 0x4a, 0x39, 0x2a, 0x60, 0x2b, 0xa3);\nDEFINE_KNOWN_FOLDER(FOLDERID_QuickLaunch,           0x52a4f021, 0x7b75, 0x48a9, 0x9f, 0x6b, 0x4b, 0x87, 0xa2, 0x10, 0xbc, 0x8f);\nDEFINE_KNOWN_FOLDER(FOLDERID_Recent,                0xae50c081, 0xebd2, 0x438a, 0x86, 0x55, 0x8a, 0x09, 0x2e, 0x34, 0x98, 0x7a);\nDEFINE_KNOWN_FOLDER(FOLDERID_RecordedTV,            0xbd85e001, 0x112e, 0x431e, 0x98, 0x3b, 0x7b, 0x15, 0xac, 0x09, 0xff, 0xf1);\nDEFINE_KNOWN_FOLDER(FOLDERID_RecordedTVLibrary,     0x1a6fdba2, 0xf42d, 0x4358, 0xa7, 0x98, 0xb7, 0x4d, 0x74, 0x59, 0x26, 0xc5);\nDEFINE_KNOWN_FOLDER(FOLDERID_RecycleBinFolder,      0xb7534046, 0x3ecb, 0x4c18, 0xbe, 0x4e, 0x64, 0xcd, 0x4c, 0xb7, 0xd6, 0xac);\nDEFINE_KNOWN_FOLDER(FOLDERID_ResourceDir,           0x8ad10c31, 0x2adb, 0x4296, 0xa8, 0xf7, 0xe4, 0x70, 0x12, 0x32, 0xc9, 0x72);\nDEFINE_KNOWN_FOLDER(FOLDERID_Ringtones,             0xc870044b, 0xf49e, 0x4126, 0xa9, 0xc3, 0xb5, 0x2a, 0x1f, 0xf4, 0x11, 0xe8);\nDEFINE_KNOWN_FOLDER(FOLDERID_RoamingAppData,        0x3eb685db, 0x65f9, 0x4cf6, 0xa0, 0x3a, 0xe3, 0xef, 0x65, 0x72, 0x9f, 0x3d);\nDEFINE_KNOWN_FOLDER(FOLDERID_SampleMusic,           0xb250c668, 0xf57d, 0x4ee1, 0xa6, 0x3c, 0x29, 0x0e, 0xe7, 0xd1, 0xaa, 0x1f);\nDEFINE_KNOWN_FOLDER(FOLDERID_SamplePictures,        0xc4900540, 0x2379, 0x4c75, 0x84, 0x4b, 0x64, 0xe6, 0xfa, 0xf8, 0x71, 0x6b);\nDEFINE_KNOWN_FOLDER(FOLDERID_SamplePlaylists,       0x15ca69b3, 0x30ee, 0x49c1, 0xac, 0xe1, 0x6b, 0x5e, 0xc3, 0x72, 0xaf, 0xb5);\nDEFINE_KNOWN_FOLDER(FOLDERID_SampleVideos,          0x859ead94, 0x2e85, 0x48ad, 0xa7, 0x1a, 0x09, 0x69, 0xcb, 0x56, 0xa6, 0xcd);\nDEFINE_KNOWN_FOLDER(FOLDERID_SavedGames,            0x4c5c32ff, 0xbb9d, 0x43b0, 0xb5, 0xb4, 0x2d, 0x72, 0xe5, 0x4e, 0xaa, 0xa4);\nDEFINE_KNOWN_FOLDER(FOLDERID_SavedSearches,         0x7d1d3a04, 0xdebb, 0x4115, 0x95, 0xcf, 0x2f, 0x29, 0xda, 0x29, 0x20, 0xda);\nDEFINE_KNOWN_FOLDER(FOLDERID_SEARCH_CSC,            0xee32e446, 0x31ca, 0x4aba, 0x81, 0x4f, 0xa5, 0xeb, 0xd2, 0xfd, 0x6d, 0x5e);\nDEFINE_KNOWN_FOLDER(FOLDERID_SearchHome,            0x190337d1, 0xb8ca, 0x4121, 0xa6, 0x39, 0x6d, 0x47, 0x2d, 0x16, 0x97, 0x2a);\nDEFINE_KNOWN_FOLDER(FOLDERID_SEARCH_MAPI,           0x98ec0e18, 0x2098, 0x4d44, 0x86, 0x44, 0x66, 0x97, 0x93, 0x15, 0xa2, 0x81);\nDEFINE_KNOWN_FOLDER(FOLDERID_SendTo,                0x8983036c, 0x27c0, 0x404b, 0x8f, 0x08, 0x10, 0x2d, 0x10, 0xdc, 0xfd, 0x74);\nDEFINE_KNOWN_FOLDER(FOLDERID_SidebarDefaultParts,   0x7b396e54, 0x9ec5, 0x4300, 0xbe, 0x0a, 0x24, 0x82, 0xeb, 0xae, 0x1a, 0x26);\nDEFINE_KNOWN_FOLDER(FOLDERID_SidebarParts,          0xa75d362e, 0x50fc, 0x4fb7, 0xac, 0x2c, 0xa8, 0xbe, 0xaa, 0x31, 0x44, 0x93);\nDEFINE_KNOWN_FOLDER(FOLDERID_StartMenu,             0x625b53c3, 0xab48, 0x4ec1, 0xba, 0x1f, 0xa1, 0xef, 0x41, 0x46, 0xfc, 0x19);\nDEFINE_KNOWN_FOLDER(FOLDERID_Startup,               0xb97d20bb, 0xf46a, 0x4c97, 0xba, 0x10, 0x5e, 0x36, 0x08, 0x43, 0x08, 0x54);\nDEFINE_KNOWN_FOLDER(FOLDERID_SyncManagerFolder,     0x43668bf8, 0xc14e, 0x49b2, 0x97, 0xc9, 0x74, 0x77, 0x84, 0xd7, 0x84, 0xb7);\nDEFINE_KNOWN_FOLDER(FOLDERID_SyncResultsFolder,     0x289a9a43, 0xbe44, 0x4057, 0xa4, 0x1b, 0x58, 0x7a, 0x76, 0xd7, 0xe7, 0xf9);\nDEFINE_KNOWN_FOLDER(FOLDERID_SyncSetupFolder,       0x0f214138, 0xb1d3, 0x4a90, 0xbb, 0xa9, 0x27, 0xcb, 0xc0, 0xc5, 0x38, 0x9a);\nDEFINE_KNOWN_FOLDER(FOLDERID_System,                0x1ac14e77, 0x02e7, 0x4e5d, 0xb7, 0x44, 0x2e, 0xb1, 0xae, 0x51, 0x98, 0xb7);\nDEFINE_KNOWN_FOLDER(FOLDERID_SystemX86,             0xd65231b0, 0xb2f1, 0x4857, 0xa4, 0xce, 0xa8, 0xe7, 0xc6, 0xea, 0x7d, 0x27);\nDEFINE_KNOWN_FOLDER(FOLDERID_Templates,             0xa63293e8, 0x664e, 0x48db, 0xa0, 0x79, 0xdf, 0x75, 0x9e, 0x05, 0x09, 0xf7);\nDEFINE_KNOWN_FOLDER(FOLDERID_UserPinned,            0x9e3995ab, 0x1f9c, 0x4f13, 0xb8, 0x27, 0x48, 0xb2, 0x4b, 0x6c, 0x71, 0x74);\nDEFINE_KNOWN_FOLDER(FOLDERID_UserProfiles,          0x0762d272, 0xc50a, 0x4bb0, 0xa3, 0x82, 0x69, 0x7d, 0xcd, 0x72, 0x9b, 0x80);\nDEFINE_KNOWN_FOLDER(FOLDERID_UserProgramFiles,      0x5cd7aee2, 0x2219, 0x4a67, 0xb8, 0x5d, 0x6c, 0x9c, 0xe1, 0x56, 0x60, 0xcb);\nDEFINE_KNOWN_FOLDER(FOLDERID_UserProgramFilesCommon, 0xbcbd3057, 0xca5c, 0x4622, 0xb4, 0x2d, 0xbc, 0x56, 0xdb, 0x0a, 0xe5, 0x16);\nDEFINE_KNOWN_FOLDER(FOLDERID_UsersFiles,            0xf3ce0f7c, 0x4901, 0x4acc, 0x86, 0x48, 0xd5, 0xd4, 0x4b, 0x04, 0xef, 0x8f);\nDEFINE_KNOWN_FOLDER(FOLDERID_UsersLibraries,        0xa302545d, 0xdeff, 0x464b, 0xab, 0xe8, 0x61, 0xc8, 0x64, 0x8d, 0x93, 0x9b);\nDEFINE_KNOWN_FOLDER(FOLDERID_Videos,                0x18989b1d, 0x99b5, 0x455b, 0x84, 0x1c, 0xab, 0x7c, 0x74, 0xe4, 0xdd, 0xfc);\nDEFINE_KNOWN_FOLDER(FOLDERID_VideosLibrary,         0x491e922f, 0x5643, 0x4af4, 0xa7, 0xeb, 0x4e, 0x7a, 0x13, 0x8d, 0x81, 0x74);\nDEFINE_KNOWN_FOLDER(FOLDERID_Windows,               0xf38bf404, 0x1d43, 0x42f2, 0x93, 0x05, 0x67, 0xde, 0x0b, 0x28, 0xfc, 0x23);\n\n#endif  /* __WINE_KNOWNFOLDERS_H */\n"
  },
  {
    "path": "wine/windows/ks.h",
    "content": "/*\n * Copyright (C) 2004 Robert Reif\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _KS_\n#define _KS_\n\ntypedef union tagKSIDENTIFIER\n{\n    struct\n    {\n        GUID Set;\n        ULONG Id;\n        ULONG Flags;\n    } DUMMYSTRUCTNAME;\n    LONGLONG Alignment;\n} KSIDENTIFIER;\n\ntypedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY, KSMETHOD, *PKSMETHOD, KSEVENT, *PKSEVENT;\n\ntypedef enum\n{\n    KSPIN_DATAFLOW_IN = 1,\n    KSPIN_DATAFLOW_OUT\n} KSPIN_DATAFLOW, *PKSPIN_DATAFLOW;\n\n#define KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION 0\n#define KSDATAFORMAT_BIT_ATTRIBUTES 1\n#define KSDATAFORMAT_TEMPORAL_COMPRESSION (1 << 0)\n#define KSDATAFORMAT_ATTRIBUTES 1 (1 << 1)\n\n#define KSDATARANGE_BIT_ATTRIBUTES 1\n#define KSDATARANGE_BIT_REQUIRED_ATTRIBUTES 2\n#define KSDATARANGE_ATTRIBUTES (1 << 1)\n#define KSDATARANGE_REQUIRED_ATTRIBUTES (1 << 2)\n\ntypedef union unionKSDATAFORMAT\n{\n    struct\n    {\n        ULONG FormatSize;\n        ULONG Flags;\n        ULONG SampleSize;\n        ULONG Reserved;\n        GUID MajorFormat;\n        GUID SubFormat;\n        GUID Specifier;\n    } DUMMYSTRUCTNAME;\n    LONGLONG Alignment;\n} KSDATAFORMAT, *PKSDATAFORMAT, KSDATARANGE, *PKSDATARANGE;\n\n#endif  /* _KS_ */\n"
  },
  {
    "path": "wine/windows/ksguid.h",
    "content": "/*\n * Copyright (C) 2004 Robert Reif\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#define INITGUID\n#include <guiddef.h>\n"
  },
  {
    "path": "wine/windows/ksmedia.h",
    "content": "/*\n * Copyright (C) 2004 Robert Reif\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _KS_\n#error must include ks.h before ksmedia.h\n#endif\n\n#ifndef _KSMEDIA_\n#define _KSMEDIA_\n\nDEFINE_GUID(KSDATAFORMAT_TYPE_AUDIO, 0x73647561, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);\n\nDEFINE_GUID(KSDATAFORMAT_SUBTYPE_PCM, 0x00000001, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);\nDEFINE_GUID(KSDATAFORMAT_SUBTYPE_IEEE_FLOAT, 0x00000003, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);\nDEFINE_GUID(KSDATAFORMAT_SUBTYPE_MULAW, 0x00000007, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);\nDEFINE_GUID(KSDATAFORMAT_SUBTYPE_ALAW, 0x00000006, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);\n\n#define KSAUDIO_SPEAKER_DIRECTOUT 0\n#define KSAUDIO_SPEAKER_MONO SPEAKER_FRONT_CENTER\n#define KSAUDIO_SPEAKER_STEREO (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT)\n#define KSAUDIO_SPEAKER_QUAD (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT)\n#define KSAUDIO_SPEAKER_SURROUND (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_BACK_CENTER)\n#define KSAUDIO_SPEAKER_5POINT1 (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT)\n/* 5:1 SIDE or BACK is not distinguished, only 0x3F shall be used (BACK) */\n#define KSAUDIO_SPEAKER_5POINT1_SURROUND (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | SPEAKER_SIDE_LEFT | SPEAKER_SIDE_RIGHT)\n#define KSAUDIO_SPEAKER_7POINT1 (KSAUDIO_SPEAKER_5POINT1 | SPEAKER_FRONT_LEFT_OF_CENTER | SPEAKER_FRONT_RIGHT_OF_CENTER)\n/* 7:1 home theater 0x63F */\n#define KSAUDIO_SPEAKER_7POINT1_SURROUND (KSAUDIO_SPEAKER_5POINT1 | SPEAKER_SIDE_LEFT | SPEAKER_SIDE_RIGHT)\n\n#ifndef REFERENCE_TIME_DEFINED\n#define REFERENCE_TIME_DEFINED\ntypedef LONGLONG REFERENCE_TIME;\n#endif\n\ntypedef enum\n{\n    eConnTypeUnknown = 0,\n    eConnType3Point5mm,\n    eConnTypeQuarter,\n    eConnTypeAtapiInternal,\n    eConnTypeRCA,\n    eConnTypeOptical,\n    eConnTypeOtherDigital,\n    eConnTypeOtherAnalog,\n    eConnTypeMultichannelAnalogDIN,\n    eConnTypeXlrProfessional,\n    eConnTypeRJ11Modem,\n    eConnTypeCombination\n} EPcxConnectionType;\n\ntypedef enum\n{\n    eGeoLocRear = 1,\n    eGeoLocFront,\n    eGeoLocLeft,\n    eGeoLocRight,\n    eGeoLocTop,\n    eGeoLocBottom,\n    eGeoLocRearPanel,\n    eGeoLocRiser,\n    eGeoLocInsideMobileLid,\n    eGeoLocDrivebay,\n    eGeoLocHDMI,\n    eGeoLocOutsideMobileLid,\n    eGeoLocATAPI,\n    eGeoLocReserved5,\n    eGeoLocReserved6\n} EPcxGeoLocation;\n\ntypedef enum\n{\n    eGenLocPrimaryBox = 0,\n    eGenLocInternal,\n    eGenLocSeparate,\n    eGenLocOther\n} EPcxGenLocation;\n\ntypedef enum\n{\n    ePortConnJack = 0,\n    ePortConnIntegratedDevice,\n    ePortConnBothIntegratedAndJack,\n    ePortConnUnknown\n} EPxcPortConnection;\n\ntypedef struct\n{\n    DWORD ChannelMapping;\n    COLORREF Color;\n    EPcxConnectionType ConnectionType;\n    EPcxGeoLocation GeoLocation;\n    EPcxGenLocation GenLocation;\n    EPxcPortConnection PortConnection;\n    BOOL IsConnected;\n} KSJACK_DESCRIPTION;\n\ntypedef KSJACK_DESCRIPTION *PKSJACK_DESCRIPTION;\n\ntypedef enum\n{\n    KSJACK_SINK_CONNECTIONTYPE_HDMI = 0,\n    KSJACK_SINK_CONNECTIONTYPE_DISPLAYPORT\n} KSJACK_SINK_CONNECTIONTYPE;\n\n#define MAX_SINK_DESCRIPTION_NAME_LENGTH 32\n\ntypedef struct _tagKSJACK_SINK_INFORMATION\n{\n    KSJACK_SINK_CONNECTIONTYPE ConnType;\n    WORD ManufacturerId;\n    WORD ProductId;\n    WORD AudioLatency;\n    BOOL HDCPCapable;\n    BOOL AICapable;\n    UCHAR SinkDescriptionLength;\n    WCHAR SinkDescription[MAX_SINK_DESCRIPTION_NAME_LENGTH];\n    LUID PortId;\n} KSJACK_SINK_INFORMATION;\n\n#define JACKDESC2_PRESENCE_DETECT_CAPABILITY 0x1\n#define JACKDESC2_DYNAMIC_FORMAT_CHANGE_CAPABILITY 0x2\n\ntypedef struct _tagKSJACK_DESCRIPTION2\n{\n    DWORD DeviceStateInfo;\n    DWORD JackCapabilities;\n} KSJACK_DESCRIPTION2;\n\ntypedef struct _tagKSJACK_DESCRIPTION2 *PKSJACK_DESCRIPTION2;\n\n#endif  /* _KSMEDIA_ */\n"
  },
  {
    "path": "wine/windows/ksuuids.h",
    "content": "/*\n * Copyright (C) 2014 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nOUR_GUID_ENTRY(AM_INTERFACESETID_Standard,                  0x1a8766a0, 0x62ce, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00)\nOUR_GUID_ENTRY(AM_KSCATEGORY_AUDIO,                         0x6994ad04, 0x93ef, 0x11d0, 0xa3, 0xcc, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96)\nOUR_GUID_ENTRY(AM_KSCATEGORY_CAPTURE,                       0x65e8773d, 0x8f56, 0x11d0, 0xa3, 0xb9, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96)\nOUR_GUID_ENTRY(AM_KSCATEGORY_CROSSBAR,                      0xa799a801, 0xa46d, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0x24, 0x01, 0xdc, 0xd4)\nOUR_GUID_ENTRY(AM_KSCATEGORY_DATACOMPRESSOR,                0x1e84c900, 0x7e70, 0x11d0, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00)\nOUR_GUID_ENTRY(AM_KSCATEGORY_RENDER,                        0x65e8773e, 0x8f56, 0x11d0, 0xa3, 0xb9, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96)\nOUR_GUID_ENTRY(AM_KSCATEGORY_SPLITTER,                      0x0a4252a0, 0x7e70, 0x11d0, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00)\nOUR_GUID_ENTRY(AM_KSCATEGORY_TVAUDIO,                       0xa799a802, 0xa46d, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0x24, 0x01, 0xdc, 0xd4)\nOUR_GUID_ENTRY(AM_KSCATEGORY_TVTUNER,                       0xa799a800, 0xa46d, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0x24, 0x01, 0xdc, 0xd4)\nOUR_GUID_ENTRY(AM_KSCATEGORY_VBICODEC,                      0x07dad660, 0x22f1, 0x11d1, 0xa9, 0xf4, 0x00, 0xc0, 0x4f, 0xbb, 0xde, 0x8f)\nOUR_GUID_ENTRY(AM_KSCATEGORY_VBICODEC_MI,                   0x9c24a977, 0x0951, 0x451a, 0x80, 0x06, 0x0e, 0x49, 0xbd, 0x28, 0xcd, 0x5f)\nOUR_GUID_ENTRY(AM_KSCATEGORY_VIDEO,                         0x6994ad05, 0x93ef, 0x11d0, 0xa3, 0xcc, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96)\nOUR_GUID_ENTRY(AM_KSPROPSETID_AC3,                          0xbfabe720, 0x6e1f, 0x11d0, 0xbc, 0xf2, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00)\nOUR_GUID_ENTRY(AM_KSPROPSETID_CopyProt,                     0x0e8a0a40, 0x6aef, 0x11d0, 0x9e, 0xd0, 0x00, 0xa0, 0x24, 0xca, 0x19, 0xb3)\nOUR_GUID_ENTRY(AM_KSPROPSETID_DVD_RateChange,               0x3577eb09, 0x9582, 0x477f, 0xb2, 0x9c, 0xb0, 0xc4, 0x52, 0xa4, 0xff, 0x9a)\nOUR_GUID_ENTRY(AM_KSPROPSETID_DvdKaraoke,                   0xae4720ae, 0xaa71, 0x42d8, 0xb8, 0x2a, 0xff, 0xfd, 0xf5, 0x8b, 0x76, 0xfd)\nOUR_GUID_ENTRY(AM_KSPROPSETID_DvdSubPic,                    0xac390460, 0x43af, 0x11d0, 0xbd, 0x6a, 0x00, 0x35, 0x05, 0xc1, 0x03, 0xa9)\nOUR_GUID_ENTRY(AM_KSPROPSETID_FrameStep,                    0xc830acbd, 0xab07, 0x492f, 0x88, 0x52, 0x45, 0xb6, 0x98, 0x7c, 0x29, 0x79)\nOUR_GUID_ENTRY(AM_KSPROPSETID_MPEG4_MediaType_Attributes,   0xff6c4bfa, 0x07a9, 0x4c7b, 0xa2, 0x37, 0x67, 0x2f, 0x9d, 0x68, 0x06, 0x5f)\nOUR_GUID_ENTRY(AM_KSPROPSETID_TSRateChange,                 0xa503c5c0, 0x1d1d, 0x11d1, 0xad, 0x80, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00)\nOUR_GUID_ENTRY(FORMAT_DVD_LPCMAudio,                        0xe06d80e6, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea)\nOUR_GUID_ENTRY(FORMAT_DolbyAC3,                             0xe06d80e4, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea)\nOUR_GUID_ENTRY(FORMAT_Image,                                0x692fa379, 0xd3e8, 0x4651, 0xb5, 0xb4, 0x0b, 0x94, 0xb0, 0x13, 0xee, 0xaf)\nOUR_GUID_ENTRY(FORMAT_JPEGImage,                            0x692fa379, 0xd3e8, 0x4651, 0xb5, 0xb4, 0x0b, 0x94, 0xb0, 0x13, 0xee, 0xaf)\nOUR_GUID_ENTRY(FORMAT_MPEG2Audio,                           0xe06d80e5, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea)\nOUR_GUID_ENTRY(FORMAT_MPEG2Video,                           0xe06d80e3, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea)\nOUR_GUID_ENTRY(FORMAT_MPEG2_VIDEO,                          0xe06d80e3, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea)\nOUR_GUID_ENTRY(FORMAT_UVCH264Video,                         0x2017be05, 0x6629, 0x4248, 0xaa, 0xed, 0x7e, 0x1a, 0x47, 0xbc, 0x9b, 0x9c)\nOUR_GUID_ENTRY(FORMAT_VIDEOINFO2,                           0xf72a76a0, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)\nOUR_GUID_ENTRY(IID_IKsDataTypeHandler,                      0x5ffbaa02, 0x49a3, 0x11d0, 0x9f, 0x36, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1)\nOUR_GUID_ENTRY(IID_IKsInterfaceHandler,                     0xd3abc7e0, 0x9a61, 0x11d0, 0xa4, 0x0d, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96)\nOUR_GUID_ENTRY(IID_IKsPin,                                  0xb61178d1, 0xa2d9, 0x11cf, 0x9e, 0x53, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1)\nOUR_GUID_ENTRY(IID_IKsPinFactory,                           0xcd5ebe6b, 0x8b6e, 0x11d1, 0x8a, 0xe0, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96)\nOUR_GUID_ENTRY(MEDIASUBTYPE_ATSC_SI,                        0xb3c7397c, 0xd303, 0x414d, 0xb3, 0x3c, 0x4e, 0xd2, 0xc9, 0xd2, 0x97, 0x33)\nOUR_GUID_ENTRY(MEDIASUBTYPE_DOLBY_AC3,                      0xe06d802c, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea)\nOUR_GUID_ENTRY(MEDIASUBTYPE_DTS,                            0xe06d8033, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea)\nOUR_GUID_ENTRY(MEDIASUBTYPE_DVB_SI,                         0xe9dd31a3, 0x221d, 0x4adb, 0x85, 0x32, 0x9a, 0xf3, 0x09, 0xc1, 0xa4, 0x08)\nOUR_GUID_ENTRY(MEDIASUBTYPE_DVD_LPCM_AUDIO,                 0xe06d8032, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea)\nOUR_GUID_ENTRY(MEDIASUBTYPE_DVD_NAVIGATION_DSI,             0xe06d8030, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea)\nOUR_GUID_ENTRY(MEDIASUBTYPE_DVD_NAVIGATION_PCI,             0xe06d802f, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea)\nOUR_GUID_ENTRY(MEDIASUBTYPE_DVD_NAVIGATION_PROVIDER,        0xe06d8031, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea)\nOUR_GUID_ENTRY(MEDIASUBTYPE_DVD_SUBPICTURE,                 0xe06d802d, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea)\nOUR_GUID_ENTRY(MEDIASUBTYPE_ISDB_SI,                        0xe89ad298, 0x3601, 0x4b06, 0xaa, 0xec, 0x9d, 0xde, 0xed, 0xcc, 0x5b, 0xd0)\nOUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2DATA,                      0xc892e55b, 0x252d, 0x42b5, 0xa3, 0x16, 0xd9, 0x97, 0xe7, 0xa5, 0xd9, 0x95)\nOUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_AUDIO,                    0xe06d802b, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea)\nOUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_PBDA_TRANSPORT_PROCESSED, 0xaf748dd4, 0x0d80, 0x11db, 0x97, 0x05, 0x00, 0x50, 0x56, 0xc0, 0x00, 0x08)\nOUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_PBDA_TRANSPORT_RAW,       0x0d7aed42, 0xcb9a, 0x11db, 0x97, 0x05, 0x00, 0x50, 0x56, 0xc0, 0x00, 0x08)\nOUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_PROGRAM,                  0xe06d8022, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea)\nOUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_TRANSPORT,                0xe06d8023, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea)\nOUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_TRANSPORT_STRIDE,         0x138aa9a4, 0x1ee2, 0x4c5b, 0x98, 0x8e, 0x19, 0xab, 0xfd, 0xbc, 0x8a, 0x11)\nOUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_UDCR_TRANSPORT,           0x18bec4ea, 0x4676, 0x450e, 0xb4, 0x78, 0x0c, 0xd8, 0x4c, 0x54, 0xb3, 0x27)\nOUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_VERSIONED_TABLES,         0x1ed988b0, 0x3ffc, 0x4523, 0x87, 0x25, 0x34, 0x7b, 0xee, 0xc1, 0xa8, 0xa0)\nOUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_VIDEO,                    0xe06d8026, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea)\nOUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_WMDRM_TRANSPORT,          0x18bec4ea, 0x4676, 0x450e, 0xb4, 0x78, 0x0c, 0xd8, 0x4c, 0x54, 0xb3, 0x27)\nOUR_GUID_ENTRY(MEDIASUBTYPE_SDDS,                           0xe06d8034, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea)\nOUR_GUID_ENTRY(MEDIASUBTYPE_TIF_SI,                         0xec232eb2, 0xcb96, 0x4191, 0xb2, 0x26, 0x0e, 0xa1, 0x29, 0xf3, 0x82, 0x50)\nOUR_GUID_ENTRY(MEDIATYPE_DVD_ENCRYPTED_PACK,                0xed0b916a, 0x044d, 0x11d1, 0xaa, 0x78, 0x00, 0xc0, 0x4f, 0xc3, 0x1d, 0x60)\nOUR_GUID_ENTRY(MEDIATYPE_DVD_NAVIGATION,                    0xe06d802e, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea)\nOUR_GUID_ENTRY(MEDIATYPE_MPEG2_PACK,                        0x36523b13, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a)\nOUR_GUID_ENTRY(MEDIATYPE_MPEG2_PES,                         0xe06d8020, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea)\nOUR_GUID_ENTRY(MEDIATYPE_MPEG2_SECTIONS,                    0x455f176c, 0x4b06, 0x47ce, 0x9a, 0xef, 0x8c, 0xae, 0xf7, 0x3d, 0xf7, 0xb5)\n/* FIXME: conflicts with devicetopology.h */\n/* OUR_GUID_ENTRY(IID_IKsControl,                              0x28f54685, 0x06fd, 0x11d2, 0xb2, 0x7a, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96) */\n"
  },
  {
    "path": "wine/windows/libloaderapi.h",
    "content": "/*\n * Copyright (C) 2017 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _APISETLIBLOADER_\n#define _APISETLIBLOADER_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef void *DLL_DIRECTORY_COOKIE, **PDLL_DIRECTORY_COOKIE;\n\nWINBASEAPI DLL_DIRECTORY_COOKIE WINAPI AddDllDirectory(const WCHAR *);\nWINBASEAPI BOOL WINAPI RemoveDllDirectory(DLL_DIRECTORY_COOKIE);\nWINBASEAPI BOOL WINAPI SetDefaultDllDirectories(DWORD);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* _APISETLIBLOADER_ */\n"
  },
  {
    "path": "wine/windows/lm.h",
    "content": "/*\n * Copyright 2002 Andriy Palamarchuk\n *\n * General lm header which includes other lm headers.\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_LM_H\n#define __WINE_LM_H\n\n#include <lmcons.h>\n#include <lmerr.h>\n#include <lmshare.h>\n#include <lmaccess.h>\n#include <lmserver.h>\n#include <lmwksta.h>\n#include <lmapibuf.h>\n#include <lmstats.h>\n#include <lmjoin.h>\n#include <lmmsg.h>\n#include <lmuse.h>\n/* FIXME: #include <lmalert.h> */\n/* FIXME: #include <lmremutl.h> */\n/* FIXME: #include <lmrepl.h> */\n/* FIXME: #include <lmsvc.h> */\n/* FIXME: #include <lmerrlog.h> */\n/* FIXME: #include <lmconfig.h> */\n/* FIXME: #include <lmaudit.h> */\n\n/* The following are obsolete headers */\n#include <lmbrowsr.h>\n\n#endif\n"
  },
  {
    "path": "wine/windows/lmaccess.h",
    "content": "/*\n * Copyright 2002 Andriy Palamarchuk\n *\n * User information Net API.\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_LMACCESS_H\n#define __WINE_LMACCESS_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include <lmcons.h>\n\n#define ACCESS_NONE     0x0000\n#define ACCESS_READ     0x0001\n#define ACCESS_WRITE    0x0002\n#define ACCESS_CREATE   0x0004\n#define ACCESS_EXEC     0x0008\n#define ACCESS_DELETE   0x0010\n#define ACCESS_ATRIB    0x0020\n#define ACCESS_PERM     0x0040\n#define ACCESS_GROUP    0x8000\n#define ACCESS_ALL      (ACCESS_READ|ACCESS_WRITE|ACCESS_CREATE|ACCESS_EXEC|ACCESS_DELETE|ACCESS_ATRIB|ACCESS_PERM)\n\n#define UF_SCRIPT                               0x000001\n#define UF_ACCOUNTDISABLE                       0x000002\n#define UF_HOMEDIR_REQUIRED                     0x000008\n#define UF_LOCKOUT                              0x000010\n#define UF_PASSWD_NOTREQD                       0x000020\n#define UF_PASSWD_CANT_CHANGE                   0x000040\n#define UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED      0x000080\n#define UF_TEMP_DUPLICATE_ACCOUNT               0x000100\n#define UF_NORMAL_ACCOUNT                       0x000200\n#define UF_INTERDOMAIN_TRUST_ACCOUNT            0x000800\n#define UF_WORKSTATION_TRUST_ACCOUNT            0x001000\n#define UF_SERVER_TRUST_ACCOUNT                 0x002000\n#define UF_DONT_EXPIRE_PASSWD                   0x010000\n#define UF_MNS_LOGON_ACCOUNT                    0x020000\n#define UF_SMARTCARD_REQUIRED                   0x040000\n#define UF_TRUSTED_FOR_DELEGATION               0x080000\n#define UF_NOT_DELEGATED                        0x100000\n#define UF_USE_DES_KEY_ONLY                     0x200000\n#define UF_DONT_REQUIRE_PREAUTH                 0x400000\n#define UF_PASSWORD_EXPIRED                     0x800000\n\n\n#define UF_MACHINE_ACCOUNT_MASK ( \\\n    UF_INTERDOMAIN_TRUST_ACCOUNT | \\\n    UF_WORKSTATION_TRUST_ACCOUNT | \\\n    UF_SERVER_TRUST_ACCOUNT)\n\n#define UF_ACCOUNT_TYPE_MASK ( \\\n    UF_TEMP_DUPLICATE_ACCOUNT | \\\n    UF_NORMAL_ACCOUNT | \\\n    UF_INTERDOMAIN_TRUST_ACCOUNT | \\\n    UF_WORKSTATION_TRUST_ACCOUNT | \\\n    UF_SERVER_TRUST_ACCOUNT)\n\n#define UF_SETTABLE_BITS ( \\\n    UF_SCRIPT | \\\n    UF_ACCOUNTDISABLE | \\\n    UF_LOCKOUT | \\\n    UF_HOMEDIR_REQUIRED  | \\\n    UF_PASSWD_NOTREQD | \\\n    UF_PASSWD_CANT_CHANGE | \\\n    UF_ACCOUNT_TYPE_MASK | \\\n    UF_DONT_EXPIRE_PASSWD | \\\n    UF_MNS_LOGON_ACCOUNT |\\\n    UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED |\\\n    UF_SMARTCARD_REQUIRED | \\\n    UF_TRUSTED_FOR_DELEGATION | \\\n    UF_NOT_DELEGATED | \\\n    UF_USE_DES_KEY_ONLY  | \\\n    UF_DONT_REQUIRE_PREAUTH |\\\n    UF_PASSWORD_EXPIRED)\n\n#if defined(__GNUC__)\n# define GROUP_SPECIALGRP_USERS (const WCHAR []){ 'U','S','E','R','S',0 }\n#elif defined(_MSC_VER)\n# define GROUP_SPECIALGRP_USERS         L\"USERS\"\n#else\nstatic const WCHAR GROUP_SPECIALGRP_USERS[] = { 'U','S','E','R','S',0 };\n#endif\n\n#if defined(__GNUC__)\n# define GROUP_SPECIALGRP_ADMINS (const WCHAR []){ 'A','D','M','I','N','S',0 }\n#elif defined(_MSC_VER)\n# define GROUP_SPECIALGRP_ADMINS        L\"ADMINS\"\n#else\nstatic const WCHAR GROUP_SPECIALGRP_ADMINS[] = { 'A','D','M','I','N','S',0 };\n#endif\n\n#if defined(__GNUC__)\n# define GROUP_SPECIALGRP_GUESTS  (const WCHAR []){ 'G','U','E','S','T','S',0 }\n#elif defined(_MSC_VER)\n# define GROUP_SPECIALGRP_GUESTS        L\"GUESTS\"\n#else\nstatic const WCHAR GROUP_SPECIALGRP_GUESTS[] = { 'G','U','E','S','T','S',0 };\n#endif\n\n#if defined(__GNUC__)\n# define GROUP_SPECIALGRP_LOCAL (const WCHAR []){ 'L','O','C','A','L',0 }\n#elif defined(_MSC_VER)\n# define GROUP_SPECIALGRP_LOCAL         L\"LOCAL\"\n#else\nstatic const WCHAR GROUP_SPECIALGRP_LOCAL[] = { 'L','O','C','A','L',0 };\n#endif\n\n#ifndef WINE_NTSTATUS_DECLARED\n#define WINE_NTSTATUS_DECLARED\ntypedef LONG NTSTATUS;\n#endif\n#ifndef WINE_PNTSTATUS_DECLARED\n#define WINE_PNTSTATUS_DECLARED\ntypedef NTSTATUS *PNTSTATUS;\n#endif\n\n/* NetGetUserInfo structures */\ntypedef struct _USER_INFO_0 {\n    LPWSTR usri0_name;\n} USER_INFO_0, *PUSER_INFO_0, *LPUSER_INFO_0;\n\ntypedef struct _USER_INFO_1 {\n    LPWSTR usri1_name;\n    LPWSTR usri1_password;\n    DWORD usri1_password_age;\n    DWORD usri1_priv;\n    LPWSTR usri1_home_dir;\n    LPWSTR usri1_comment;\n    DWORD usri1_flags;\n    LPWSTR usri1_script_path;\n} USER_INFO_1, *PUSER_INFO_1, *LPUSER_INFO_1;\n\ntypedef struct _USER_INFO_2 {\n    LPWSTR usri2_name;\n    LPWSTR usri2_password;\n    DWORD usri2_password_age;\n    DWORD usri2_priv;\n    LPWSTR usri2_home_dir;\n    LPWSTR usri2_comment;\n    DWORD usri2_flags;\n    LPWSTR usri2_script_path;\n    DWORD usri2_auth_flags;\n    LPWSTR usri2_full_name;\n    LPWSTR usri2_usr_comment;\n    LPWSTR usri2_parms;\n    LPWSTR usri2_workstations;\n    DWORD usri2_last_logon;\n    DWORD usri2_last_logoff;\n    DWORD usri2_acct_expires;\n    DWORD usri2_max_storage;\n    DWORD usri2_units_per_week;\n    PBYTE usri2_logon_hours;\n    DWORD usri2_bad_pw_count;\n    DWORD usri2_num_logons;\n    LPWSTR usri2_logon_server;\n    DWORD usri2_country_code;\n    DWORD usri2_code_page;\n} USER_INFO_2, *PUSER_INFO_2, *LPUSER_INFO_2;\n\ntypedef struct _USER_INFO_3 {\n    LPWSTR usri3_name;\n    LPWSTR usri3_password;\n    DWORD usri3_password_age;\n    DWORD usri3_priv;\n    LPWSTR usri3_home_dir;\n    LPWSTR usri3_comment;\n    DWORD usri3_flags;\n    LPWSTR usri3_script_path;\n    DWORD usri3_auth_flags;\n    LPWSTR usri3_full_name;\n    LPWSTR usri3_usr_comment;\n    LPWSTR usri3_parms;\n    LPWSTR usri3_workstations;\n    DWORD usri3_last_logon;\n    DWORD usri3_last_logoff;\n    DWORD usri3_acct_expires;\n    DWORD usri3_max_storage;\n    DWORD usri3_units_per_week;\n    PBYTE usri3_logon_hours;\n    DWORD usri3_bad_pw_count;\n    DWORD usri3_num_logons;\n    LPWSTR usri3_logon_server;\n    DWORD usri3_country_code;\n    DWORD usri3_code_page;\n    DWORD usri3_user_id;\n    DWORD usri3_primary_group_id;\n    LPWSTR usri3_profile;\n    LPWSTR usri3_home_dir_drive;\n    DWORD usri3_password_expired;\n} USER_INFO_3, *PUSER_INFO_3, *LPUSER_INFO_3;\n\ntypedef struct _USER_INFO_4 {\n    LPWSTR usri4_name;\n    LPWSTR usri4_password;\n    DWORD usri4_password_age;\n    DWORD usri4_priv;\n    LPWSTR usri4_home_dir;\n    LPWSTR usri4_comment;\n    DWORD usri4_flags;\n    LPWSTR usri4_script_path;\n    DWORD usri4_auth_flags;\n    LPWSTR usri4_full_name;\n    LPWSTR usri4_usr_comment;\n    LPWSTR usri4_parms;\n    LPWSTR usri4_workstations;\n    DWORD usri4_last_logon;\n    DWORD usri4_last_logoff;\n    DWORD usri4_acct_expires;\n    DWORD usri4_max_storage;\n    DWORD usri4_units_per_week;\n    PBYTE usri4_logon_hours;\n    DWORD usri4_bad_pw_count;\n    DWORD usri4_num_logons;\n    LPWSTR usri4_logon_server;\n    DWORD usri4_country_code;\n    DWORD usri4_code_page;\n    PSID usri4_user_sid;\n    DWORD usri4_primary_group_id;\n    LPWSTR usri4_profile;\n    LPWSTR usri4_home_dir_drive;\n    DWORD usri4_password_expired;\n} USER_INFO_4, *PUSER_INFO_4, *LPUSER_INFO_4;\n\ntypedef struct _USER_INFO_10 {\n    LPWSTR usri10_name;\n    LPWSTR usri10_comment;\n    LPWSTR usri10_usr_comment;\n    LPWSTR usri10_full_name;\n} USER_INFO_10, *PUSER_INFO_10, *LPUSER_INFO_10;\n\ntypedef struct _USER_INFO_11 {\n    LPWSTR usri11_name;\n    LPWSTR usri11_comment;\n    LPWSTR usri11_usr_comment;\n    LPWSTR usri11_full_name;\n    DWORD usri11_priv;\n    DWORD usri11_auth_flags;\n    DWORD usri11_password_age;\n    LPWSTR usri11_home_dir;\n    LPWSTR usri11_parms;\n    DWORD usri11_last_logon;\n    DWORD usri11_last_logoff;\n    DWORD usri11_bad_pw_count;\n    DWORD usri11_num_logons;\n    LPWSTR usri11_logon_server;\n    DWORD usri11_country_code;\n    LPWSTR usri11_workstations;\n    DWORD usri11_max_storage;\n    DWORD usri11_units_per_week;\n    PBYTE usri11_logon_hours;\n    DWORD usri11_code_page;\n} USER_INFO_11, *PUSER_INFO_11, *LPUSER_INFO_11;\n\ntypedef struct _USER_INFO_20 {\n    LPWSTR usri20_name;\n    LPWSTR usri20_full_name;\n    LPWSTR usri20_comment;\n    DWORD usri20_flags;\n    DWORD usri20_user_id;\n} USER_INFO_20, *PUSER_INFO_20, *LPUSER_INFO_20;\n\ntypedef struct _USER_INFO_23 {\n    LPWSTR usri23_name;\n    LPWSTR usri23_full_name;\n    LPWSTR usri23_comment;\n    DWORD usri23_flags;\n    PSID usri23_user_sid;\n} USER_INFO_23, *PUSER_INFO_23, *LPUSER_INFO_23;\n\ntypedef struct _USER_INFO_1003 {\n    LPWSTR  usri1003_password;\n} USER_INFO_1003, *PUSER_INFO_1003, *LPUSER_INFO_1003;\n\ntypedef struct _USER_INFO_1005 {\n    DWORD   usri1005_priv;\n} USER_INFO_1005, *PUSER_INFO_1005, *LPUSER_INFO_1005;\n\ntypedef struct _USER_INFO_1006 {\n    LPWSTR  usri1006_home_dir;\n} USER_INFO_1006, *PUSER_INFO_1006, *LPUSER_INFO_1006;\n\ntypedef struct _USER_INFO_1007 {\n    LPWSTR  usri1007_comment;\n} USER_INFO_1007, *PUSER_INFO_1007, *LPUSER_INFO_1007;\n\ntypedef struct _USER_INFO_1008 {\n    DWORD   usri1008_flags;\n} USER_INFO_1008, *PUSER_INFO_1008, *LPUSER_INFO_1008;\n\ntypedef struct _USER_INFO_1009 {\n    LPWSTR  usri1009_script_path;\n} USER_INFO_1009, *PUSER_INFO_1009, *LPUSER_INFO_1009;\n\ntypedef struct _USER_INFO_1010 {\n    DWORD   usri1010_auth_flags;\n} USER_INFO_1010, *PUSER_INFO_1010, *LPUSER_INFO_1010;\n\ntypedef struct _USER_INFO_1011 {\n    LPWSTR  usri1011_full_name;\n} USER_INFO_1011, *PUSER_INFO_1011, *LPUSER_INFO_1011;\n\ntypedef struct _USER_INFO_1012 {\n    LPWSTR  usri1012_usr_comment;\n} USER_INFO_1012, *PUSER_INFO_1012, *LPUSER_INFO_1012;\n\ntypedef struct _USER_INFO_1013 {\n    LPWSTR  usri1013_parms;\n} USER_INFO_1013, *PUSER_INFO_1013, *LPUSER_INFO_1013;\n\ntypedef struct _USER_INFO_1014 {\n    LPWSTR  usri1014_workstations;\n} USER_INFO_1014, *PUSER_INFO_1014, *LPUSER_INFO_1014;\n\ntypedef struct _USER_INFO_1017 {\n    DWORD   usri1017_acct_expires;\n} USER_INFO_1017, *PUSER_INFO_1017, *LPUSER_INFO_1017;\n\ntypedef struct _USER_INFO_1018 {\n    DWORD   usri1018_max_storage;\n} USER_INFO_1018, *PUSER_INFO_1018, *LPUSER_INFO_1018;\n\ntypedef struct _USER_INFO_1020 {\n    DWORD   usri1020_units_per_week;\n    LPBYTE  usri1020_logon_hours;\n} USER_INFO_1020, *PUSER_INFO_1020, *LPUSER_INFO_1020;\n\ntypedef struct _USER_INFO_1023 {\n    LPWSTR  usri1023_logon_server;\n} USER_INFO_1023, *PUSER_INFO_1023, *LPUSER_INFO_1023;\n\ntypedef struct _USER_INFO_1024 {\n    DWORD   usri1024_country_code;\n} USER_INFO_1024, *PUSER_INFO_1024, *LPUSER_INFO_1024;\n\ntypedef struct _USER_INFO_1025 {\n    DWORD   usri1025_code_page;\n} USER_INFO_1025, *PUSER_INFO_1025, *LPUSER_INFO_1025;\n\ntypedef struct _USER_INFO_1051 {\n    DWORD   usri1051_primary_group_id;\n} USER_INFO_1051, *PUSER_INFO_1051, *LPUSER_INFO_1051;\n\ntypedef struct _USER_INFO_1052 {\n    LPWSTR  usri1052_profile;\n} USER_INFO_1052, *PUSER_INFO_1052, *LPUSER_INFO_1052;\n\ntypedef struct _USER_INFO_1053 {\n    LPWSTR  usri1053_home_dir_drive;\n} USER_INFO_1053, *PUSER_INFO_1053, *LPUSER_INFO_1053;\n\ntypedef struct _USER_MODALS_INFO_0 {\n    DWORD usrmod0_min_passwd_len;\n    DWORD usrmod0_max_passwd_age;\n    DWORD usrmod0_min_passwd_age;\n    DWORD usrmod0_force_logoff;\n    DWORD usrmod0_password_hist_len;\n} USER_MODALS_INFO_0, *PUSER_MODALS_INFO_0, *LPUSER_MODALS_INFO_0;\n\ntypedef struct _USER_MODALS_INFO_1 {\n    DWORD usrmod1_role;\n    LPWSTR usrmod1_primary;\n} USER_MODALS_INFO_1, *PUSER_MODALS_INFO_1, *LPUSER_MODALS_INFO_1;\n\ntypedef struct _USER_MODALS_INFO_2 {\n    LPWSTR usrmod2_domain_name;\n    PSID usrmod2_domain_id;\n} USER_MODALS_INFO_2, *PUSER_MODALS_INFO_2, *LPUSER_MODALS_INFO_2;\n\ntypedef struct _USER_MODALS_INFO_3 {\n    DWORD usrmod3_lockout_duration;\n    DWORD usrmod3_lockout_observation_window;\n    DWORD usrmod3_lockout_threshold;\n} USER_MODALS_INFO_3, *PUSER_MODALS_INFO_3, *LPUSER_MODALS_INFO_3;\n\ntypedef struct _NET_DISPLAY_USER {\n    LPWSTR usri1_name;\n    LPWSTR usri1_comment;\n    DWORD usri1_flags;\n    LPWSTR usri1_full_name;\n    DWORD usri1_user_id;\n    DWORD usri1_next_index;\n} NET_DISPLAY_USER, *PNET_DISPLAY_USER;\n\ntypedef struct _NET_DISPLAY_MACHINE {\n    LPWSTR usri2_name;\n    LPWSTR usri2_comment;\n    DWORD usri2_flags;\n    DWORD usri2_user_id;\n    DWORD usri2_next_index;\n} NET_DISPLAY_MACHINE, *PNET_DISPLAY_MACHINE;\n\ntypedef struct _NET_DISPLAY_GROUP {\n    LPWSTR grpi3_name;\n    LPWSTR grpi3_comment;\n    DWORD grpi3_group_id;\n    DWORD grpi3_attributes;\n    DWORD grpi3_next_index;\n} NET_DISPLAY_GROUP, *PNET_DISPLAY_GROUP;\n\ntypedef struct _LOCALGROUP_INFO_0 {\n    LPWSTR lgrpi0_name;\n} LOCALGROUP_INFO_0, *PLOCALGROUP_INFO_0, *LPLOCALGROUP_INFO_0;\n\ntypedef struct _LOCALGROUP_INFO_1 {\n    LPWSTR lgrpi1_name;\n    LPWSTR lgrpi1_comment;\n} LOCALGROUP_INFO_1, *PLOCALGROUP_INFO_1, *LPLOCALGROUP_INFO_1;\n\ntypedef struct _LOCALGROUP_INFO_1002 {\n    LPWSTR lgrpi1002_comment;\n} LOCALGROUP_INFO_1002, *PLOCALGROUP_INFO_1002, *LPLOCALGROUP_INFO_1002;\n\ntypedef struct _LOCALGROUP_MEMBERS_INFO_0 {\n    PSID lgrmi0_sid;\n} LOCALGROUP_MEMBERS_INFO_0, *PLOCALGROUP_MEMBERS_INFO_0, *LPLOCALGROUP_MEMBERS_INFO_0;\n\ntypedef struct _LOCALGROUP_MEMBERS_INFO_1 {\n    PSID lgrmi1_sid;\n    SID_NAME_USE lgrmi1_sidusage;\n    LPWSTR lgrmi1_name;\n} LOCALGROUP_MEMBERS_INFO_1, *PLOCALGROUP_MEMBERS_INFO_1, *LPLOCALGROUP_MEMBERS_INFO_1;\n\ntypedef struct _LOCALGROUP_MEMBERS_INFO_2 {\n    PSID lgrmi2_sid;\n    SID_NAME_USE lgrmi2_sidusage;\n    LPWSTR lgrmi2_domainandname;\n} LOCALGROUP_MEMBERS_INFO_2, *PLOCALGROUP_MEMBERS_INFO_2, *LPLOCALGROUP_MEMBERS_INFO_2;\n\ntypedef struct _LOCALGROUP_MEMBERS_INFO_3 {\n    LPWSTR lgrmi3_domainandname;\n} LOCALGROUP_MEMBERS_INFO_3, *PLOCALGROUP_MEMBERS_INFO_3, *LPLOCALGROUP_MEMBERS_INFO_3;\n\ntypedef struct _LOCALGROUP_USERS_INFO_0 {\n    LPWSTR lgrui0_name;\n} LOCALGROUP_USERS_INFO_0, *PLOCALGROUP_USERS_INFO_0, *LPLOCALGROUP_USERS_INFO_0;\n\n#define USER_PRIV_GUEST   0\n#define USER_PRIV_USER    1\n#define USER_PRIV_ADMIN   2\n#define USER_PRIV_MASK    3\n\n#define LOCALGROUP_NAME_PARMNUM         1\n#define LOCALGROUP_COMMENT_PARMNUM      2\n\nNET_API_STATUS WINAPI NetGetDCName(LPCWSTR,LPCWSTR,LPBYTE*);\nNET_API_STATUS WINAPI NetGroupEnum(LPCWSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);\nNET_API_STATUS WINAPI NetLocalGroupAdd(LPCWSTR,DWORD,LPBYTE,LPDWORD);\nNET_API_STATUS WINAPI NetLocalGroupAddMember(LPCWSTR,LPCWSTR,PSID);\nNET_API_STATUS WINAPI NetLocalGroupAddMembers(LPCWSTR,LPCWSTR,DWORD,LPBYTE,DWORD);\nNET_API_STATUS WINAPI NetLocalGroupDel(LPCWSTR,LPCWSTR);\nNET_API_STATUS WINAPI NetLocalGroupDelMember(LPCWSTR,LPCWSTR,PSID);\nNET_API_STATUS WINAPI NetLocalGroupDelMembers(LPCWSTR,LPCWSTR,DWORD,LPBYTE,DWORD);\nNET_API_STATUS WINAPI NetLocalGroupEnum(LPCWSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,PDWORD_PTR);\nNET_API_STATUS WINAPI NetLocalGroupGetInfo(LPCWSTR,LPCWSTR,DWORD,LPBYTE*);\nNET_API_STATUS WINAPI NetLocalGroupGetMembers(LPCWSTR,LPCWSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,PDWORD_PTR);\nNET_API_STATUS WINAPI NetLocalGroupSetInfo(LPCWSTR,LPCWSTR,DWORD,LPBYTE,LPDWORD);\nNET_API_STATUS WINAPI NetLocalGroupSetMembers(LPCWSTR,LPCWSTR,DWORD,LPBYTE,DWORD);\nNET_API_STATUS WINAPI NetQueryDisplayInformation(LPCWSTR,DWORD,DWORD,DWORD,DWORD,LPDWORD,PVOID*);\nNET_API_STATUS WINAPI NetUserAdd(LPCWSTR,DWORD,LPBYTE,LPDWORD);\nNET_API_STATUS WINAPI NetUserChangePassword(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);\nNET_API_STATUS WINAPI NetUserDel(LPCWSTR,LPCWSTR);\nNET_API_STATUS WINAPI NetUserEnum(LPCWSTR,DWORD,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);\nNET_API_STATUS WINAPI NetUserGetInfo(LPCWSTR,LPCWSTR,DWORD,LPBYTE*);\nNET_API_STATUS WINAPI NetUserGetGroups(LPCWSTR,LPCWSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD);\nNET_API_STATUS WINAPI NetUserGetLocalGroups(LPCWSTR,LPCWSTR,DWORD,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD);\nNET_API_STATUS WINAPI NetUserModalsGet(LPCWSTR,DWORD,LPBYTE*);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/lmapibuf.h",
    "content": "/*\n * Copyright 2002 Andriy Palamarchuk\n *\n * Net API buffer calls\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_LMAPIBUF_H\n#define __WINE_LMAPIBUF_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Buffer functions */\nNET_API_STATUS WINAPI NetApiBufferAllocate(DWORD ByteCount, LPVOID* Buffer);\nNET_API_STATUS WINAPI NetApiBufferFree(LPVOID Buffer);\nNET_API_STATUS WINAPI NetApiBufferReallocate(LPVOID OldBuffer, DWORD NewByteCount,\n                                             LPVOID* NewBuffer);\nNET_API_STATUS WINAPI NetApiBufferSize(LPVOID Buffer, LPDWORD ByteCount);\nNET_API_STATUS WINAPI NetapipBufferAllocate(DWORD ByteCount, LPVOID* Buffer);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/lmat.h",
    "content": "/*\n * Schedule Service Functions\n *\n * Copyright (C) 2011 Louis Lenders\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_LMAT_H\n#define __WINE_LMAT_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define JOB_RUN_PERIODICALLY 0x01\n#define JOB_EXEC_ERROR       0x02\n#define JOB_RUNS_TODAY       0x04\n#define JOB_ADD_CURRENT_DATE 0x08\n#define JOB_NONINTERACTIVE   0x10\n\n#define JOB_INPUT_FLAGS (JOB_RUN_PERIODICALLY | JOB_ADD_CURRENT_DATE | JOB_NONINTERACTIVE)\n#define JOB_OUTPUT_FLAGS (JOB_RUN_PERIODICALLY | JOB_EXEC_ERROR | JOB_RUNS_TODAY | JOB_NONINTERACTIVE)\n\ntypedef struct _AT_INFO\n{\n    DWORD_PTR JobTime;\n    DWORD DaysOfMonth;\n    UCHAR DaysOfWeek;\n    UCHAR Flags;\n    LPWSTR Command;\n} AT_INFO, *PAT_INFO, *LPAT_INFO;\n\ntypedef struct _AT_ENUM\n{\n    DWORD JobId;\n    DWORD_PTR JobTime;\n    DWORD DaysOfMonth;\n    UCHAR DaysOfWeek;\n    UCHAR Flags;\n    LPWSTR Command;\n} AT_ENUM, *PAT_ENUM, *LPAT_ENUM;\n\nNET_API_STATUS WINAPI NetScheduleJobAdd(LPCWSTR,LPBYTE,LPDWORD);\nNET_API_STATUS WINAPI NetScheduleJobDel(LPCWSTR,DWORD,DWORD);\nNET_API_STATUS WINAPI NetScheduleJobEnum(LPCWSTR,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_LMAT_H */\n"
  },
  {
    "path": "wine/windows/lmbrowsr.h",
    "content": "/*\n * Copyright 2002 Andriy Palamarchuk\n *\n * Browser NET API calls\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_LMBROWSR_H\n#define __WINE_LMBROWSR_H\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct _BROWSER_EMULATED_DOMAIN {\n    LPWSTR DomainName;\n    LPWSTR EmulatedServerName;\n    DWORD Role;\n} BROWSER_EMULATED_DOMAIN, *PBROWSER_EMULATED_DOMAIN;\n\nNET_API_STATUS WINAPI I_BrowserSetNetlogonState(\n    LPWSTR ServerName, LPWSTR DomainName, LPWSTR EmulatedServerName,\n    DWORD Role);\n\nNET_API_STATUS WINAPI I_BrowserQueryEmulatedDomains(\n    LPWSTR ServerName, PBROWSER_EMULATED_DOMAIN *EmulatedDomains,\n    LPDWORD EntriesRead);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/lmcons.h",
    "content": "/*\n * Copyright (C) 1999 Rein Klazes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_LMCONS_H\n#define __WINE_LMCONS_H\n\n/* Types */\n\n#define NET_API_STATUS          DWORD\n#define API_RET_TYPE            NET_API_STATUS\n#define NET_API_FUNCTION        WINAPI\n\n#define MAX_PREFERRED_LENGTH            ((DWORD) -1)\n\n/* Lan manager API defines */\n\n#define UNLEN       256\n#define LM20_UNLEN  20\n#define GNLEN       UNLEN\n#define LM20_GNLEN  LM20_UNLEN\n#define PWLEN       256\n#define LM20_PWLEN  14\n#define SHPWLEN     8\n#define CNLEN       15\n#define LM20_CNLEN  CNLEN\n#define DNLEN       CNLEN\n#define LM20_DNLEN  DNLEN\n#define UNCLEN      (CNLEN+2)\n#define LM20_UNCLEN (LM20_CNLEN+2)\n#define NNLEN       80\n#define LM20_NNLEN  12\n#define RMLEN       (UNCLEN+1+NNLEN)\n#define LM20_RMLEN  (LM20_UNCLEN+1+LM20_NNLEN)\n#define SNLEN       80\n#define LM20_SNLEN  15\n#define STXTLEN     256\n#define LM20_STXTLEN 63\n#define PATHLEN     256\n#define LM20_PATHLEN 256\n#define DEVLEN      80\n#define LM20_DEVLEN 8\n#define EVLEN       16\n#define CLTYPE_LEN  12\n\n/* platform IDs */\n#define PLATFORM_ID_DOS 300\n#define PLATFORM_ID_OS2 400\n#define PLATFORM_ID_NT  500\n#define PLATFORM_ID_OSF 600\n#define PLATFORM_ID_VMS 700\n\n#define LMSTR LPWSTR\n#define LMCSTR LPCWSTR\n\n#endif\n"
  },
  {
    "path": "wine/windows/lmerr.h",
    "content": "/*\n * Copyright 2002 Andriy Palamarchuk\n *\n * NERR error codes.\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_LMERR_H\n#define __WINE_LMERR_H\n\n#include <winerror.h>\n\n#define NERR_Success    0\n\n#define NERR_BASE                         2100\n\n#define NERR_NetNotStarted                (NERR_BASE + 2)\n#define NERR_UnknownServer                (NERR_BASE + 3)\n#define NERR_ShareMem                     (NERR_BASE + 4)\n#define NERR_NoNetworkResource            (NERR_BASE + 5)\n#define NERR_RemoteOnly                   (NERR_BASE + 6)\n#define NERR_DevNotRedirected             (NERR_BASE + 7)\n#define NERR_ServerNotStarted             (NERR_BASE + 14)\n#define NERR_ItemNotFound                 (NERR_BASE + 15)\n#define NERR_UnknownDevDir                (NERR_BASE + 16)\n#define NERR_RedirectedPath               (NERR_BASE + 17)\n#define NERR_DuplicateShare               (NERR_BASE + 18)\n#define NERR_NoRoom                       (NERR_BASE + 19)\n#define NERR_TooManyItems                 (NERR_BASE + 21)\n#define NERR_InvalidMaxUsers              (NERR_BASE + 22)\n#define NERR_BufTooSmall                  (NERR_BASE + 23)\n#define NERR_RemoteErr                    (NERR_BASE + 27)\n#define NERR_LanmanIniError               (NERR_BASE + 31)\n#define NERR_NetworkError                 (NERR_BASE + 36)\n#define NERR_WkstaInconsistentState       (NERR_BASE + 37)\n#define NERR_WkstaNotStarted              (NERR_BASE + 38)\n#define NERR_BrowserNotStarted            (NERR_BASE + 39)\n#define NERR_InternalError                (NERR_BASE + 40)\n#define NERR_BadTransactConfig            (NERR_BASE + 41)\n#define NERR_InvalidAPI                   (NERR_BASE + 42)\n#define NERR_BadEventName                 (NERR_BASE + 43)\n#define NERR_DupNameReboot                (NERR_BASE + 44)\n#define NERR_CfgCompNotFound              (NERR_BASE + 46)\n#define NERR_CfgParamNotFound             (NERR_BASE + 47)\n#define NERR_LineTooLong                  (NERR_BASE + 49)\n#define NERR_QNotFound                    (NERR_BASE + 50)\n#define NERR_JobNotFound                  (NERR_BASE + 51)\n#define NERR_DestNotFound                 (NERR_BASE + 52)\n#define NERR_DestExists                   (NERR_BASE + 53)\n#define NERR_QExists                      (NERR_BASE + 54)\n#define NERR_QNoRoom                      (NERR_BASE + 55)\n#define NERR_JobNoRoom                    (NERR_BASE + 56)\n#define NERR_DestNoRoom                   (NERR_BASE + 57)\n#define NERR_DestIdle                     (NERR_BASE + 58)\n#define NERR_DestInvalidOp                (NERR_BASE + 59)\n#define NERR_ProcNoRespond                (NERR_BASE + 60)\n#define NERR_SpoolerNotLoaded             (NERR_BASE + 61)\n#define NERR_DestInvalidState             (NERR_BASE + 62)\n#define NERR_QInvalidState                (NERR_BASE + 63)\n#define NERR_JobInvalidState              (NERR_BASE + 64)\n#define NERR_SpoolNoMemory                (NERR_BASE + 65)\n#define NERR_DriverNotFound               (NERR_BASE + 66)\n#define NERR_DataTypeInvalid              (NERR_BASE + 67)\n#define NERR_ProcNotFound                 (NERR_BASE + 68)\n#define NERR_ServiceTableLocked           (NERR_BASE + 80)\n#define NERR_ServiceTableFull             (NERR_BASE + 81)\n#define NERR_ServiceInstalled             (NERR_BASE + 82)\n#define NERR_ServiceEntryLocked           (NERR_BASE + 83)\n#define NERR_ServiceNotInstalled          (NERR_BASE + 84)\n#define NERR_BadServiceName               (NERR_BASE + 85)\n#define NERR_ServiceCtlTimeout            (NERR_BASE + 86)\n#define NERR_ServiceCtlBusy               (NERR_BASE + 87)\n#define NERR_BadServiceProgName           (NERR_BASE + 88)\n#define NERR_ServiceNotCtrl               (NERR_BASE + 89)\n#define NERR_ServiceKillProc              (NERR_BASE + 90)\n#define NERR_ServiceCtlNotValid           (NERR_BASE + 91)\n#define NERR_NotInDispatchTbl             (NERR_BASE + 92)\n#define NERR_BadControlRecv               (NERR_BASE + 93)\n#define NERR_ServiceNotStarting           (NERR_BASE + 94)\n#define NERR_AlreadyLoggedOn              (NERR_BASE + 100)\n#define NERR_NotLoggedOn                  (NERR_BASE + 101)\n#define NERR_BadUsername                  (NERR_BASE + 102)\n#define NERR_BadPassword                  (NERR_BASE + 103)\n#define NERR_UnableToAddName_W            (NERR_BASE + 104)\n#define NERR_UnableToAddName_F            (NERR_BASE + 105)\n#define NERR_UnableToDelName_W            (NERR_BASE + 106)\n#define NERR_UnableToDelName_F            (NERR_BASE + 107)\n#define NERR_LogonsPaused                 (NERR_BASE + 109)\n#define NERR_LogonServerConflict          (NERR_BASE + 110)\n#define NERR_LogonNoUserPath              (NERR_BASE + 111)\n#define NERR_LogonScriptError             (NERR_BASE + 112)\n#define NERR_StandaloneLogon              (NERR_BASE + 114)\n#define NERR_LogonServerNotFound          (NERR_BASE + 115)\n#define NERR_LogonDomainExists            (NERR_BASE + 116)\n#define NERR_NonValidatedLogon            (NERR_BASE + 117)\n#define NERR_ACFNotFound                  (NERR_BASE + 119)\n#define NERR_GroupNotFound                (NERR_BASE + 120)\n#define NERR_UserNotFound                 (NERR_BASE + 121)\n#define NERR_ResourceNotFound             (NERR_BASE + 122)\n#define NERR_GroupExists                  (NERR_BASE + 123)\n#define NERR_UserExists                   (NERR_BASE + 124)\n#define NERR_ResourceExists               (NERR_BASE + 125)\n#define NERR_NotPrimary                   (NERR_BASE + 126)\n#define NERR_ACFNotLoaded                 (NERR_BASE + 127)\n#define NERR_ACFNoRoom                    (NERR_BASE + 128)\n#define NERR_ACFFileIOFail                (NERR_BASE + 129)\n#define NERR_ACFTooManyLists              (NERR_BASE + 130)\n#define NERR_UserLogon                    (NERR_BASE + 131)\n#define NERR_ACFNoParent                  (NERR_BASE + 132)\n#define NERR_CanNotGrowSegment            (NERR_BASE + 133)\n#define NERR_SpeGroupOp                   (NERR_BASE + 134)\n#define NERR_NotInCache                   (NERR_BASE + 135)\n#define NERR_UserInGroup                  (NERR_BASE + 136)\n#define NERR_UserNotInGroup               (NERR_BASE + 137)\n#define NERR_AccountUndefined             (NERR_BASE + 138)\n#define NERR_AccountExpired               (NERR_BASE + 139)\n#define NERR_InvalidWorkstation           (NERR_BASE + 140)\n#define NERR_InvalidLogonHours            (NERR_BASE + 141)\n#define NERR_PasswordExpired              (NERR_BASE + 142)\n#define NERR_PasswordCantChange           (NERR_BASE + 143)\n#define NERR_PasswordHistConflict         (NERR_BASE + 144)\n#define NERR_PasswordTooShort             (NERR_BASE + 145)\n#define NERR_PasswordTooRecent            (NERR_BASE + 146)\n#define NERR_InvalidDatabase              (NERR_BASE + 147)\n#define NERR_DatabaseUpToDate             (NERR_BASE + 148)\n#define NERR_SyncRequired                 (NERR_BASE + 149)\n#define NERR_UseNotFound                  (NERR_BASE + 150)\n#define NERR_BadAsgType                   (NERR_BASE + 151)\n#define NERR_DeviceIsShared               (NERR_BASE + 152)\n#define NERR_NoComputerName               (NERR_BASE + 170)\n#define NERR_MsgAlreadyStarted            (NERR_BASE + 171)\n#define NERR_MsgInitFailed                (NERR_BASE + 172)\n#define NERR_NameNotFound                 (NERR_BASE + 173)\n#define NERR_AlreadyForwarded             (NERR_BASE + 174)\n#define NERR_AddForwarded                 (NERR_BASE + 175)\n#define NERR_AlreadyExists                (NERR_BASE + 176)\n#define NERR_TooManyNames                 (NERR_BASE + 177)\n#define NERR_DelComputerName              (NERR_BASE + 178)\n#define NERR_LocalForward                 (NERR_BASE + 179)\n#define NERR_GrpMsgProcessor              (NERR_BASE + 180)\n#define NERR_PausedRemote                 (NERR_BASE + 181)\n#define NERR_BadReceive                   (NERR_BASE + 182)\n#define NERR_NameInUse                    (NERR_BASE + 183)\n#define NERR_MsgNotStarted                (NERR_BASE + 184)\n#define NERR_NotLocalName                 (NERR_BASE + 185)\n#define NERR_NoForwardName                (NERR_BASE + 186)\n#define NERR_RemoteFull                   (NERR_BASE + 187)\n#define NERR_NameNotForwarded             (NERR_BASE + 188)\n#define NERR_TruncatedBroadcast           (NERR_BASE + 189)\n#define NERR_InvalidDevice                (NERR_BASE + 194)\n#define NERR_WriteFault                   (NERR_BASE + 195)\n#define NERR_DuplicateName                (NERR_BASE + 197)\n#define NERR_DeleteLater                  (NERR_BASE + 198)\n#define NERR_IncompleteDel                (NERR_BASE + 199)\n#define NERR_MultipleNets                 (NERR_BASE + 200)\n#define NERR_NetNameNotFound              (NERR_BASE + 210)\n#define NERR_DeviceNotShared              (NERR_BASE + 211)\n#define NERR_ClientNameNotFound           (NERR_BASE + 212)\n#define NERR_FileIdNotFound               (NERR_BASE + 214)\n#define NERR_ExecFailure                  (NERR_BASE + 215)\n#define NERR_TmpFile                      (NERR_BASE + 216)\n#define NERR_TooMuchData                  (NERR_BASE + 217)\n#define NERR_DeviceShareConflict          (NERR_BASE + 218)\n#define NERR_BrowserTableIncomplete       (NERR_BASE + 219)\n#define NERR_NotLocalDomain               (NERR_BASE + 220)\n#define NERR_IsDfsShare                   (NERR_BASE + 221)\n#define NERR_DevInvalidOpCode             (NERR_BASE + 231)\n#define NERR_DevNotFound                  (NERR_BASE + 232)\n#define NERR_DevNotOpen                   (NERR_BASE + 233)\n#define NERR_BadQueueDevString            (NERR_BASE + 234)\n#define NERR_BadQueuePriority             (NERR_BASE + 235)\n#define NERR_NoCommDevs                   (NERR_BASE + 237)\n#define NERR_QueueNotFound                (NERR_BASE + 238)\n#define NERR_BadDevString                 (NERR_BASE + 240)\n#define NERR_BadDev                       (NERR_BASE + 241)\n#define NERR_InUseBySpooler               (NERR_BASE + 242)\n#define NERR_CommDevInUse                 (NERR_BASE + 243)\n#define NERR_InvalidComputer              (NERR_BASE + 251)\n#define NERR_MaxLenExceeded               (NERR_BASE + 254)\n#define NERR_BadComponent                 (NERR_BASE + 256)\n#define NERR_CantType                     (NERR_BASE + 257)\n#define NERR_TooManyEntries               (NERR_BASE + 262)\n#define NERR_ProfileFileTooBig            (NERR_BASE + 270)\n#define NERR_ProfileOffset                (NERR_BASE + 271)\n#define NERR_ProfileCleanup               (NERR_BASE + 272)\n#define NERR_ProfileUnknownCmd            (NERR_BASE + 273)\n#define NERR_ProfileLoadErr               (NERR_BASE + 274)\n#define NERR_ProfileSaveErr               (NERR_BASE + 275)\n#define NERR_LogOverflow                  (NERR_BASE + 277)\n#define NERR_LogFileChanged               (NERR_BASE + 278)\n#define NERR_LogFileCorrupt               (NERR_BASE + 279)\n#define NERR_SourceIsDir                  (NERR_BASE + 280)\n#define NERR_BadSource                    (NERR_BASE + 281)\n#define NERR_BadDest                      (NERR_BASE + 282)\n#define NERR_DifferentServers             (NERR_BASE + 283)\n#define NERR_RunSrvPaused                 (NERR_BASE + 285)\n#define NERR_ErrCommRunSrv                (NERR_BASE + 289)\n#define NERR_ErrorExecingGhost            (NERR_BASE + 291)\n#define NERR_ShareNotFound                (NERR_BASE + 292)\n#define NERR_InvalidLana                  (NERR_BASE + 300)\n#define NERR_OpenFiles                    (NERR_BASE + 301)\n#define NERR_ActiveConns                  (NERR_BASE + 302)\n#define NERR_BadPasswordCore              (NERR_BASE + 303)\n#define NERR_DevInUse                     (NERR_BASE + 304)\n#define NERR_LocalDrive                   (NERR_BASE + 305)\n#define NERR_AlertExists                  (NERR_BASE + 330)\n#define NERR_TooManyAlerts                (NERR_BASE + 331)\n#define NERR_NoSuchAlert                  (NERR_BASE + 332)\n#define NERR_BadRecipient                 (NERR_BASE + 333)\n#define NERR_AcctLimitExceeded            (NERR_BASE + 334)\n#define NERR_InvalidLogSeek               (NERR_BASE + 340)\n#define NERR_BadUasConfig                 (NERR_BASE + 350)\n#define NERR_InvalidUASOp                 (NERR_BASE + 351)\n#define NERR_LastAdmin                    (NERR_BASE + 352)\n#define NERR_DCNotFound                   (NERR_BASE + 353)\n#define NERR_LogonTrackingError           (NERR_BASE + 354)\n#define NERR_NetlogonNotStarted           (NERR_BASE + 355)\n#define NERR_CanNotGrowUASFile            (NERR_BASE + 356)\n#define NERR_TimeDiffAtDC                 (NERR_BASE + 357)\n#define NERR_PasswordMismatch             (NERR_BASE + 358)\n#define NERR_NoSuchServer                 (NERR_BASE + 360)\n#define NERR_NoSuchSession                (NERR_BASE + 361)\n#define NERR_NoSuchConnection             (NERR_BASE + 362)\n#define NERR_TooManyServers               (NERR_BASE + 363)\n#define NERR_TooManySessions              (NERR_BASE + 364)\n#define NERR_TooManyConnections           (NERR_BASE + 365)\n#define NERR_TooManyFiles                 (NERR_BASE + 366)\n#define NERR_NoAlternateServers           (NERR_BASE + 367)\n#define NERR_TryDownLevel                 (NERR_BASE + 370)\n#define NERR_UPSDriverNotStarted          (NERR_BASE + 380)\n#define NERR_UPSInvalidConfig             (NERR_BASE + 381)\n#define NERR_UPSInvalidCommPort           (NERR_BASE + 382)\n#define NERR_UPSSignalAsserted            (NERR_BASE + 383)\n#define NERR_UPSShutdownFailed            (NERR_BASE + 384)\n#define NERR_BadDosRetCode                (NERR_BASE + 400)\n#define NERR_ProgNeedsExtraMem            (NERR_BASE + 401)\n#define NERR_BadDosFunction               (NERR_BASE + 402)\n#define NERR_RemoteBootFailed             (NERR_BASE + 403)\n#define NERR_BadFileCheckSum              (NERR_BASE + 404)\n#define NERR_NoRplBootSystem              (NERR_BASE + 405)\n#define NERR_RplLoadrNetBiosErr           (NERR_BASE + 406)\n#define NERR_RplLoadrDiskErr              (NERR_BASE + 407)\n#define NERR_ImageParamErr                (NERR_BASE + 408)\n#define NERR_TooManyImageParams           (NERR_BASE + 409)\n#define NERR_NonDosFloppyUsed             (NERR_BASE + 410)\n#define NERR_RplBootRestart               (NERR_BASE + 411)\n#define NERR_RplSrvrCallFailed            (NERR_BASE + 412)\n#define NERR_CantConnectRplSrvr           (NERR_BASE + 413)\n#define NERR_CantOpenImageFile            (NERR_BASE + 414)\n#define NERR_CallingRplSrvr               (NERR_BASE + 415)\n#define NERR_StartingRplBoot              (NERR_BASE + 416)\n#define NERR_RplBootServiceTerm           (NERR_BASE + 417)\n#define NERR_RplBootStartFailed           (NERR_BASE + 418)\n#define NERR_RPL_CONNECTED                (NERR_BASE + 419)\n#define NERR_BrowserConfiguredToNotRun    (NERR_BASE + 450)\n#define NERR_RplNoAdaptersStarted         (NERR_BASE + 510)\n#define NERR_RplBadRegistry               (NERR_BASE + 511)\n#define NERR_RplBadDatabase               (NERR_BASE + 512)\n#define NERR_RplRplfilesShare             (NERR_BASE + 513)\n#define NERR_RplNotRplServer              (NERR_BASE + 514)\n#define NERR_RplCannotEnum                (NERR_BASE + 515)\n#define NERR_RplWkstaInfoCorrupted        (NERR_BASE + 516)\n#define NERR_RplWkstaNotFound             (NERR_BASE + 517)\n#define NERR_RplWkstaNameUnavailable      (NERR_BASE + 518)\n#define NERR_RplProfileInfoCorrupted      (NERR_BASE + 519)\n#define NERR_RplProfileNotFound           (NERR_BASE + 520)\n#define NERR_RplProfileNameUnavailable    (NERR_BASE + 521)\n#define NERR_RplProfileNotEmpty           (NERR_BASE + 522)\n#define NERR_RplConfigInfoCorrupted       (NERR_BASE + 523)\n#define NERR_RplConfigNotFound            (NERR_BASE + 524)\n#define NERR_RplAdapterInfoCorrupted      (NERR_BASE + 525)\n#define NERR_RplInternal                  (NERR_BASE + 526)\n#define NERR_RplVendorInfoCorrupted       (NERR_BASE + 527)\n#define NERR_RplBootInfoCorrupted         (NERR_BASE + 528)\n#define NERR_RplWkstaNeedsUserAcct        (NERR_BASE + 529)\n#define NERR_RplNeedsRPLUSERAcct          (NERR_BASE + 530)\n#define NERR_RplBootNotFound              (NERR_BASE + 531)\n#define NERR_RplIncompatibleProfile       (NERR_BASE + 532)\n#define NERR_RplAdapterNameUnavailable    (NERR_BASE + 533)\n#define NERR_RplConfigNotEmpty            (NERR_BASE + 534)\n#define NERR_RplBootInUse                 (NERR_BASE + 535)\n#define NERR_RplBackupDatabase            (NERR_BASE + 536)\n#define NERR_RplAdapterNotFound           (NERR_BASE + 537)\n#define NERR_RplVendorNotFound            (NERR_BASE + 538)\n#define NERR_RplVendorNameUnavailable     (NERR_BASE + 539)\n#define NERR_RplBootNameUnavailable       (NERR_BASE + 540)\n#define NERR_RplConfigNameUnavailable     (NERR_BASE + 541)\n#define NERR_DfsInternalCorruption        (NERR_BASE + 560)\n#define NERR_DfsVolumeDataCorrupt         (NERR_BASE + 561)\n#define NERR_DfsNoSuchVolume              (NERR_BASE + 562)\n#define NERR_DfsVolumeAlreadyExists       (NERR_BASE + 563)\n#define NERR_DfsAlreadyShared             (NERR_BASE + 564)\n#define NERR_DfsNoSuchShare               (NERR_BASE + 565)\n#define NERR_DfsNotALeafVolume            (NERR_BASE + 566)\n#define NERR_DfsLeafVolume                (NERR_BASE + 567)\n#define NERR_DfsVolumeHasMultipleServers  (NERR_BASE + 568)\n#define NERR_DfsCantCreateJunctionPoint   (NERR_BASE + 569)\n#define NERR_DfsServerNotDfsAware         (NERR_BASE + 570)\n#define NERR_DfsBadRenamePath             (NERR_BASE + 571)\n#define NERR_DfsVolumeIsOffline           (NERR_BASE + 572)\n#define NERR_DfsInternalError             (NERR_BASE + 590)\n\n#define MAX_NERR                          (NERR_BASE + 899)\n\n#endif\n"
  },
  {
    "path": "wine/windows/lmjoin.h",
    "content": "/*\n * Copyright 2005 Ulrich Czekalla (For CodeWeavers)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_LMJOIN_H\n#define __WINE_LMJOIN_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef enum tagNETSETUP_JOIN_STATUS\n{\n    NetSetupUnknownStatus = 0,\n    NetSetupUnjoined,\n    NetSetupWorkgroupName,\n    NetSetupDomainName\n} NETSETUP_JOIN_STATUS, *PNETSETUP_JOIN_STATUS;\n\nNET_API_STATUS NET_API_FUNCTION NetGetJoinInformation(\n    LPCWSTR Server,\n    LPWSTR *Name,\n    PNETSETUP_JOIN_STATUS type);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/lmmsg.h",
    "content": "/*\n * Copyright (C) 2006 Robert Reif\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef _LMMSG_\n#define _LMMSG_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define MSGNAME_NOT_FORWARDED   0x00\n#define MSGNAME_FORWARDED_TO    0x04\n#define MSGNAME_FORWARDED_FROM  0x10\n\ntypedef struct _MSG_INFO_0\n{\n    LPWSTR msgi0_name;\n} MSG_INFO_0, *PMSG_INFO_0, *LPMSG_INFO_0;\n\ntypedef struct _MSG_INFO_1\n{\n    LPWSTR msgi1_name;\n    DWORD msgi1_forward_flag;\n    LPWSTR msgi1_forward;\n} MSG_INFO_1, *PMSG_INFO_1, *LPMSG_INFO_1;\n\nNET_API_STATUS NET_API_FUNCTION NetMessageBufferSend(LPCWSTR,LPCWSTR,LPCWSTR,LPBYTE,DWORD);\nNET_API_STATUS NET_API_FUNCTION NetMessageNameAdd(LPCWSTR,LPCWSTR);\nNET_API_STATUS NET_API_FUNCTION NetMessageNameDel(LPCWSTR,LPCWSTR);\nNET_API_STATUS NET_API_FUNCTION NetMessageNameEnum(LPCWSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);\nNET_API_STATUS NET_API_FUNCTION NetMessageNameGetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE*);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/lmserver.h",
    "content": "/*\n * Copyright (C) 2003 Juan Lang\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef _LMSERVER_\n#define _LMSERVER_\n\n#include <winsvc.h>\n#include <lmcons.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct _SERVER_INFO_100 {\n    DWORD sv100_platform_id;\n    LMSTR sv100_name;\n} SERVER_INFO_100, *PSERVER_INFO_100, *LPSERVER_INFO_100;\n\ntypedef struct _SERVER_INFO_101 {\n    DWORD sv101_platform_id;\n    LMSTR sv101_name;\n    DWORD sv101_version_major;\n    DWORD sv101_version_minor;\n    DWORD sv101_type;\n    LMSTR sv101_comment;\n} SERVER_INFO_101, *PSERVER_INFO_101, *LPSERVER_INFO_101;\n\nNET_API_STATUS WINAPI NetServerEnum(LMCSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,DWORD,LMCSTR,LPDWORD);\nNET_API_STATUS WINAPI NetServerEnumEx(LMCSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,DWORD,LMCSTR,LMCSTR);\nNET_API_STATUS WINAPI NetServerGetInfo(LMSTR,DWORD,LPBYTE*);\nBOOL WINAPI SetServiceBits(SERVICE_STATUS_HANDLE,DWORD,BOOL,BOOL);\n\n#define SV_TYPE_WORKSTATION       0x00000001\n#define SV_TYPE_SERVER            0x00000002\n#define SV_TYPE_SQLSERVER         0x00000004\n#define SV_TYPE_DOMAIN_CTRL       0x00000008\n#define SV_TYPE_DOMAIN_BAKCTRL    0x00000010\n#define SV_TYPE_TIME_SOURCE       0x00000020\n#define SV_TYPE_AFP               0x00000040\n#define SV_TYPE_NOVELL            0x00000080\n#define SV_TYPE_DOMAIN_MEMBER     0x00000100\n#define SV_TYPE_PRINTQ_SERVER     0x00000200\n#define SV_TYPE_DIALIN_SERVER     0x00000400\n#define SV_TYPE_XENIX_SERVER      0x00000800\n#define SV_TYPE_SERVER_UNIX       SV_TYPE_XENIX_SERVER\n#define SV_TYPE_NT                0x00001000\n#define SV_TYPE_WFW               0x00002000\n#define SV_TYPE_SERVER_MFPN       0x00004000\n#define SV_TYPE_SERVER_NT         0x00008000\n#define SV_TYPE_POTENTIAL_BROWSER 0x00010000\n#define SV_TYPE_BACKUP_BROWSER    0x00020000\n#define SV_TYPE_MASTER_BROWSER    0x00040000\n#define SV_TYPE_DOMAIN_MASTER     0x00080000\n#define SV_TYPE_SERVER_OSF        0x00100000\n#define SV_TYPE_SERVER_VMS        0x00200000\n#define SV_TYPE_WINDOWS           0x00400000\n#define SV_TYPE_DFS               0x00800000\n#define SV_TYPE_CLUSTER_NT        0x01000000\n#define SV_TYPE_TERMINALSERVER    0x02000000\n#define SV_TYPE_CLUSTER_VS_NT     0x04000000\n#define SV_TYPE_DCE               0x10000000\n#define SV_TYPE_ALTERNATE_XPORT   0x20000000\n#define SV_TYPE_LOCAL_LIST_ONLY   0x40000000\n#define SV_TYPE_DOMAIN_ENUM       0x80000000\n#define SV_TYPE_ALL               0xFFFFFFFF\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* ndef _LMSERVER_ */\n"
  },
  {
    "path": "wine/windows/lmshare.h",
    "content": "/*\n * Copyright (C) 2003 Juan Lang\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef _LMSHARE_H\n#define _LMSHARE_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include <lmcons.h>\n\ntypedef struct _SHARE_INFO_0 {\n    LMSTR shi0_netname;\n} SHARE_INFO_0, *PSHARE_INFO_0, *LPSHARE_INFO_0;\n\ntypedef struct _SHARE_INFO_1 {\n    LMSTR shi1_netname;\n    DWORD shi1_type;\n    LMSTR shi1_remark;\n} SHARE_INFO_1, *PSHARE_INFO_1, *LPSHARE_INFO_1;\n\ntypedef struct _SHARE_INFO_2 {\n    LMSTR shi2_netname;\n    DWORD shi2_type;\n    LMSTR shi2_remark;\n    DWORD shi2_permissions;\n    DWORD shi2_max_uses;\n    DWORD shi2_current_uses;\n    LMSTR shi2_path;\n    LMSTR shi2_passwd;\n} SHARE_INFO_2, *PSHARE_INFO_2, *LPSHARE_INFO_2;\n\ntypedef struct _SHARE_INFO_502 {\n    LMSTR shi502_netname;\n    DWORD shi502_type;\n    LMSTR shi502_remark;\n    DWORD shi502_permissions;\n    DWORD shi502_max_uses;\n    DWORD shi502_current_uses;\n    LMSTR shi502_path;\n    LMSTR shi502_passwd;\n    DWORD shi502_reserved;\n    PSECURITY_DESCRIPTOR shi502_security_descriptor;\n} SHARE_INFO_502, *PSHARE_INFO_502, *LPSHARE_INFO_502;\n\nNET_API_STATUS WINAPI NetShareAdd(LMSTR,DWORD,LPBYTE,LPDWORD);\nNET_API_STATUS WINAPI NetShareCheck(LMSTR,LMSTR,LPDWORD);\nNET_API_STATUS WINAPI NetShareDel(LMSTR,LMSTR,DWORD);\nNET_API_STATUS WINAPI NetShareDelEx(LMSTR,DWORD,LPBYTE);\nNET_API_STATUS WINAPI NetShareDelSticky(LMSTR,LMSTR,DWORD);\nNET_API_STATUS WINAPI NetShareEnum(LMSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);\nNET_API_STATUS WINAPI NetShareEnumSticky(LMSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);\nNET_API_STATUS WINAPI NetShareGetInfo(LMSTR,LMSTR,DWORD,LPBYTE*);\nNET_API_STATUS WINAPI NetShareSetInfo(LMSTR,LMSTR,DWORD,LPBYTE,LPDWORD);\n\n#define STYPE_DISKTREE 0\n#define STYPE_PRINTQ   1\n#define STYPE_DEVICE   2\n#define STYPE_IPC      3\n#define STYPE_SPECIAL  0x80000000\n\nNET_API_STATUS WINAPI NetSessionDel(LMSTR,LMSTR,LMSTR);\nNET_API_STATUS WINAPI NetSessionEnum(LMSTR,LMSTR,LMSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);\nNET_API_STATUS WINAPI NetSessionGetInfo(LMSTR,LMSTR,LMSTR,DWORD,LPBYTE*);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* ndef _LMSHARE_H */\n"
  },
  {
    "path": "wine/windows/lmstats.h",
    "content": "/*\n * Copyright 2003 Geoff Thorpe\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_LMSTATS_H\n#define __WINE_LMSTATS_H\n\n#include <lmcons.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct _STAT_WORKSTATION_0 {\n    LARGE_INTEGER StatisticsStartTime;\n    LARGE_INTEGER BytesReceived;\n    LARGE_INTEGER SmbsReceived;\n    LARGE_INTEGER PagingReadBytesRequested;\n    LARGE_INTEGER NonPagingReadBytesRequested;\n    LARGE_INTEGER CacheReadBytesRequested;\n    LARGE_INTEGER NetworkReadBytesRequested;\n    LARGE_INTEGER BytesTransmitted;\n    LARGE_INTEGER SmbsTransmitted;\n    LARGE_INTEGER PagingWriteBytesRequested;\n    LARGE_INTEGER NonPagingWriteBytesRequested;\n    LARGE_INTEGER CacheWriteBytesRequested;\n    LARGE_INTEGER NetworkWriteBytesRequested;\n    DWORD InitiallyFailedOperations;\n    DWORD FailedCompletionOperations;\n    DWORD ReadOperations;\n    DWORD RandomReadOperations;\n    DWORD ReadSmbs;\n    DWORD LargeReadSmbs;\n    DWORD SmallReadSmbs;\n    DWORD WriteOperations;\n    DWORD RandomWriteOperations;\n    DWORD WriteSmbs;\n    DWORD LargeWriteSmbs;\n    DWORD SmallWriteSmbs;\n    DWORD RawReadsDenied;\n    DWORD RawWritesDenied;\n    DWORD NetworkErrors;\n    DWORD Sessions;\n    DWORD FailedSessions;\n    DWORD Reconnects;\n    DWORD CoreConnects;\n    DWORD Lanman20Connects;\n    DWORD Lanman21Connects;\n    DWORD LanmanNtConnects;\n    DWORD ServerDisconnects;\n    DWORD HungSessions;\n    DWORD UseCount;\n    DWORD FailedUseCount;\n    DWORD CurrentCommands;\n} STAT_WORKSTATION_0, *PSTAT_WORKSTATION_0, *LPSTAT_WORKSTATION_0;\n\ntypedef struct _STAT_SERVER_0 {\n    DWORD sts0_start;\n    DWORD sts0_fopens;\n    DWORD sts0_devopens;\n    DWORD sts0_jobsqueued;\n    DWORD sts0_sopens;\n    DWORD sts0_stimedout;\n    DWORD sts0_serrorout;\n    DWORD sts0_pwerrors;\n    DWORD sts0_permerrors;\n    DWORD sts0_syserrors;\n    DWORD sts0_bytessent_low;\n    DWORD sts0_bytessent_high;\n    DWORD sts0_bytesrcvd_low;\n    DWORD sts0_bytesrcvd_high;\n    DWORD sts0_avresponse;\n    DWORD sts0_reqbufneed;\n    DWORD sts0_bigbufneed;\n} STAT_SERVER_0, *PSTAT_SERVER_0, *LPSTAT_SERVER_0;\n\nNET_API_STATUS WINAPI NetStatisticsGet(LPWSTR server, LPWSTR service, DWORD level,\n                                       DWORD options, LPBYTE *bufptr);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/lmuse.h",
    "content": "/*\n * Copyright (C) 2007 Tim Schwartz\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef _LMUSE_H\n#define _LMUSE_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include \"lmcons.h\"\n#include \"lmuseflg.h\"\n\n\n#define USE_LOCAL_PARMNUM          1\n#define USE_REMOTE_PARMNUM         2\n#define USE_PASSWORD_PARMNUM       3\n#define USE_ASGTYPE_PARMNUM        4\n#define USE_USERNAME_PARMNUM       5\n#define USE_DOMAINNAME_PARMNUM     6\n\n#define USE_OK                     0\n#define USE_PAUSED                 1\n#define USE_SESSLOST               2\n#define USE_DISCONN                USE_SESSLOST\n#define USE_NETERR                 3\n#define USE_CONN                   4\n#define USE_RECONN                 5\n\n#define USE_WILDCARD               ((DWORD)-1)\n#define USE_DISKDEV                0\n#define USE_SPOOLDEV               1\n#define USE_CHARDEV                2\n#define USE_IPC                    3\n\ntypedef struct _USE_INFO_1\n{\n    LMSTR ui1_local;\n    LMSTR ui1_remote;\n    LMSTR ui1_password;\n    DWORD ui1_status;\n    DWORD ui1_asg_type;\n    DWORD ui1_refcount;\n    DWORD ui1_usecount;\n} USE_INFO_1, *PUSE_INFO_1, *LPUSE_INFO_1;\n\ntypedef struct _USE_INFO_2\n{\n    LMSTR ui2_local;\n    LMSTR ui2_remote;\n    LMSTR ui2_password;\n    DWORD ui2_status;\n    DWORD ui2_asg_type;\n    DWORD ui2_refcount;\n    DWORD ui2_usecount;\n    LMSTR ui2_username;\n    LMSTR ui2_domainname;\n} USE_INFO_2, *PUSE_INFO_2, *LPUSE_INFO_2;\n\nNET_API_STATUS WINAPI NetUseAdd(LMSTR,DWORD,LPBYTE,LPDWORD);\nNET_API_STATUS WINAPI NetUseDel(LMSTR,LMSTR,DWORD);\nNET_API_STATUS WINAPI NetUseEnum(LMSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);\nNET_API_STATUS WINAPI NetUseGetInfo(LMSTR,LMSTR,DWORD,LPBYTE*);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _LMUSE_H */\n"
  },
  {
    "path": "wine/windows/lmuseflg.h",
    "content": "/*\n * Copyright (C) 2007 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_LMUSEFLG_H\n#define __WINE_LMUSEFLG_H\n\n#define USE_NOFORCE           0\n#define USE_FORCE             1\n#define USE_LOTS_OF_FORCE     2\n\n#endif  /* __WINE_LMUSEFLG_H */\n"
  },
  {
    "path": "wine/windows/lmwksta.h",
    "content": "/*\n * Copyright 2002 Andriy Palamarchuk\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_LMWKSTA_H\n#define __WINE_LMWKSTA_H\n\n#include <lmcons.h>\n#include <lmuseflg.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct _WKSTA_TRANSPORT_INFO_0 {\n  DWORD wkti0_quality_of_service;\n  DWORD wkti0_number_of_vcs;\n  LMSTR wkti0_transport_name;\n  LMSTR wkti0_transport_address;\n  BOOL wkti0_wan_ish;\n} WKSTA_TRANSPORT_INFO_0, *PWKSTA_TRANSPORT_INFO_0, *LPWKSTA_TRANSPORT_INFO_0;\n\ntypedef struct _WKSTA_USER_INFO_0 {\n    LMSTR  wkui0_username;\n} WKSTA_USER_INFO_0, *PWKSTA_USER_INFO_0, *LPWKSTA_USER_INFO_0;\n\ntypedef struct _WKSTA_USER_INFO_1 {\n    LMSTR  wkui1_username;\n    LMSTR  wkui1_logon_domain;\n    LMSTR  wkui1_oth_domains;\n    LMSTR  wkui1_logon_server;\n} WKSTA_USER_INFO_1, *PWKSTA_USER_INFO_1, *LPWKSTA_USER_INFO_1;\n\ntypedef struct _WKSTA_USER_INFO_1101 {\n    LMSTR  wkui1101_oth_domains;\n} WKSTA_USER_INFO_1101, *PWKSTA_USER_INFO_1101, *LPWKSTA_USER_INFO_1101;\n\ntypedef struct _WKSTA_INFO_100 {\n    DWORD   wki100_platform_id;\n    LMSTR   wki100_computername;\n    LMSTR   wki100_langroup;\n    DWORD   wki100_ver_major;\n    DWORD   wki100_ver_minor;\n} WKSTA_INFO_100, *PWKSTA_INFO_100, *LPWKSTA_INFO_100;\n\ntypedef struct _WKSTA_INFO_101 {\n    DWORD   wki101_platform_id;\n    LMSTR   wki101_computername;\n    LMSTR   wki101_langroup;\n    DWORD   wki101_ver_major;\n    DWORD   wki101_ver_minor;\n    LMSTR   wki101_lanroot;\n} WKSTA_INFO_101, *PWKSTA_INFO_101, *LPWKSTA_INFO_101;\n\ntypedef struct _WKSTA_INFO_102 {\n    DWORD   wki102_platform_id;\n    LMSTR   wki102_computername;\n    LMSTR   wki102_langroup;\n    DWORD   wki102_ver_major;\n    DWORD   wki102_ver_minor;\n    LMSTR   wki102_lanroot;\n    DWORD   wki102_logged_on_users;\n} WKSTA_INFO_102, *PWKSTA_INFO_102, *LPWKSTA_INFO_102;\n\n/* workstation */\nNET_API_STATUS WINAPI NetWkstaGetInfo(LMSTR,DWORD,LPBYTE*);\nNET_API_STATUS WINAPI NetWkstaSetInfo(LMSTR,DWORD,LPBYTE,LPDWORD);\nNET_API_STATUS WINAPI NetWkstaTransportAdd(LMSTR,DWORD,LPBYTE,LPDWORD);\nNET_API_STATUS WINAPI NetWkstaTransportDel(LMSTR,LMSTR,DWORD);\nNET_API_STATUS WINAPI NetWkstaTransportEnum(LMSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);\nNET_API_STATUS WINAPI NetWkstaUserGetInfo(LMSTR,DWORD,LPBYTE*);\nNET_API_STATUS WINAPI NetWkstaUserSetInfo(LMSTR,DWORD,LPBYTE,LPDWORD);\nNET_API_STATUS WINAPI NetWkstaUserEnum(LMSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/loadperf.h",
    "content": "/*\n * Copyright (C) 2009 Andrey Turkin\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_LOADPERF_H\n#define __WINE_LOADPERF_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nDWORD WINAPI InstallPerfDllA(LPCSTR, LPCSTR, ULONG_PTR);\nDWORD WINAPI InstallPerfDllW(LPCWSTR, LPCWSTR, ULONG_PTR);\n#define      InstallPerfDll WINELIB_NAME_AW(InstallPerfDll)\n\nDWORD WINAPI LoadPerfCounterTextStringsA(LPCSTR, BOOL);\nDWORD WINAPI LoadPerfCounterTextStringsW(LPCWSTR, BOOL);\n#define      LoadPerfCounterTextStrings WINELIB_NAME_AW(LoadPerfCounterTextStrings)\n\nDWORD WINAPI UnloadPerfCounterTextStringsA(LPCSTR, BOOL);\nDWORD WINAPI UnloadPerfCounterTextStringsW(LPCWSTR, BOOL);\n#define      UnloadPerfCounterTextStrings WINELIB_NAME_AW(UnloadPerfCounterTextStrings)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_LOADPERF_H */\n"
  },
  {
    "path": "wine/windows/lowlevelmonitorconfigurationapi.h",
    "content": "/*\n * Copyright 2014 Michael Müller for Pipelight\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_LOWLEVELMONITORCONFIGURATIONAPI_H\n#define __WINE_LOWLEVELMONITORCONFIGURATIONAPI_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct _MC_TIMING_REPORT\n{\n    BYTE bTimingStatusByte;\n    DWORD dwHorizontalFrequencyInHZ;\n    DWORD dwVerticalFrequencyInHZ;\n} MC_TIMING_REPORT, *LPMC_TIMING_REPORT;\n\ntypedef enum _MC_VCP_CODE_TYPE\n{\n    MC_MOMENTARY,\n    MC_SET_PARAMETER\n} MC_VCP_CODE_TYPE, *LPMC_VCP_CODE_TYPE;\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_LOWLEVELMONITORCONFIGURATIONAPI_H */\n"
  },
  {
    "path": "wine/windows/lzexpand.h",
    "content": "/* Includefile for the decompression library, lzexpand\n *\n * Copyright 1996 Marcus Meissner\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_LZEXPAND_H\n#define __WINE_LZEXPAND_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n#define LZERROR_BADINHANDLE\t-1\t/* -1 */\n#define LZERROR_BADOUTHANDLE\t-2\t/* -2 */\n#define LZERROR_READ\t\t-3\t/* -3 */\n#define LZERROR_WRITE\t\t-4\t/* -4 */\n#define LZERROR_GLOBALLOC\t-5\t/* -5 */\n#define LZERROR_GLOBLOCK\t-6\t/* -6 */\n#define LZERROR_BADVALUE\t-7\t/* -7 */\n#define LZERROR_UNKNOWNALG\t-8\t/* -8 */\n\nVOID        WINAPI LZDone(void);\nLONG        WINAPI CopyLZFile(HFILE,HFILE);\nHFILE       WINAPI LZOpenFileA(LPSTR,LPOFSTRUCT,WORD);\nHFILE       WINAPI LZOpenFileW(LPWSTR,LPOFSTRUCT,WORD);\n#define     LZOpenFile WINELIB_NAME_AW(LZOpenFile)\nINT         WINAPI LZRead(INT,LPSTR,INT);\nINT         WINAPI LZStart(void);\nvoid        WINAPI LZClose(HFILE);\nLONG        WINAPI LZCopy(HFILE,HFILE);\nHFILE       WINAPI LZInit(HFILE);\nLONG        WINAPI LZSeek(HFILE,LONG,INT);\nINT         WINAPI GetExpandedNameA(LPSTR,LPSTR);\nINT         WINAPI GetExpandedNameW(LPWSTR,LPWSTR);\n#define     GetExpandedName WINELIB_NAME_AW(GetExpandedName)\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif  /* __WINE_LZEXPAND_H */\n"
  },
  {
    "path": "wine/windows/mapi.h",
    "content": "/*\n * Copyright (C) 2000 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef MAPI_H\n#define MAPI_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Some types */\n\n#ifndef __LHANDLE\n#define __LHANDLE\ntypedef ULONG_PTR               LHANDLE, *LPLHANDLE;\n#endif\n#define lhSessionNull           ((LHANDLE)0)\n\n#ifndef WINE_FLAGS_DEFINED\n#define WINE_FLAGS_DEFINED\ntypedef ULONG                   FLAGS;\n#endif\ntypedef ULONG                  *LPULONG;\n\ntypedef struct\n{\n    ULONG ulReserved;\n    ULONG flFlags;\n    ULONG nPosition;\n    LPSTR lpszPathName;\n    LPSTR lpszFileName;\n    LPVOID lpFileType;\n} MapiFileDesc, *lpMapiFileDesc;\n\ntypedef struct\n{\n    ULONG ulReserved;\n    ULONG flFlags;\n    ULONG nPosition;\n    PWSTR lpszPathName;\n    PWSTR lpszFileName;\n    PVOID lpFileType;\n} MapiFileDescW, *lpMapiFileDescW;\n\n#ifndef MAPI_ORIG\n#define MAPI_ORIG   0\n#define MAPI_TO     1\n#define MAPI_CC     2\n#define MAPI_BCC    3\n#endif\n\ntypedef struct\n{\n    ULONG ulReserved;\n    ULONG ulRecipClass;\n    LPSTR lpszName;\n    LPSTR lpszAddress;\n    ULONG ulEIDSize;\n    LPVOID lpEntryID;\n} MapiRecipDesc, *lpMapiRecipDesc;\n\ntypedef struct\n{\n    ULONG ulReserved;\n    ULONG ulRecipClass;\n    PWSTR lpszName;\n    PWSTR lpszAddress;\n    ULONG ulEIDSize;\n    PVOID lpEntryID;\n} MapiRecipDescW, *lpMapiRecipDescW;\n\ntypedef struct\n{\n    ULONG ulReserved;\n    LPSTR lpszSubject;\n    LPSTR lpszNoteText;\n    LPSTR lpszMessageType;\n    LPSTR lpszDateReceived;\n    LPSTR lpszConversationID;\n    FLAGS flFlags;\n    lpMapiRecipDesc lpOriginator;\n    ULONG nRecipCount;\n    lpMapiRecipDesc lpRecips;\n    ULONG nFileCount;\n    lpMapiFileDesc lpFiles;\n} MapiMessage, *lpMapiMessage;\n\ntypedef struct\n{\n    ULONG ulReserved;\n    PWSTR lpszSubject;\n    PWSTR lpszNoteText;\n    PWSTR lpszMessageType;\n    PWSTR lpszDateReceived;\n    PWSTR lpszConversationID;\n    FLAGS flFlags;\n    lpMapiRecipDescW lpOriginator;\n    ULONG nRecipCount;\n    lpMapiRecipDescW lpRecips;\n    ULONG nFileCount;\n    lpMapiFileDescW lpFiles;\n} MapiMessageW, *lpMapiMessageW;\n\n/* Error codes */\n\n#ifndef SUCCESS_SUCCESS\n#define SUCCESS_SUCCESS                 0\n#endif\n\n#define MAPI_USER_ABORT                 1\n#define MAPI_E_USER_ABORT               MAPI_USER_ABORT\n#define MAPI_E_FAILURE                  2\n#define MAPI_E_LOGON_FAILURE            3\n#define MAPI_E_LOGIN_FAILURE            MAPI_E_LOGON_FAILURE\n#define MAPI_E_DISK_FULL                4\n#define MAPI_E_INSUFFICIENT_MEMORY      5\n#define MAPI_E_ACCESS_DENIED            6\n#define MAPI_E_TOO_MANY_SESSIONS        8\n#define MAPI_E_TOO_MANY_FILES           9\n#define MAPI_E_TOO_MANY_RECIPIENTS      10\n#define MAPI_E_ATTACHMENT_NOT_FOUND     11\n#define MAPI_E_ATTACHMENT_OPEN_FAILURE  12\n#define MAPI_E_ATTACHMENT_WRITE_FAILURE 13\n#define MAPI_E_UNKNOWN_RECIPIENT        14\n#define MAPI_E_BAD_RECIPTYPE            15\n#define MAPI_E_NO_MESSAGES              16\n#define MAPI_E_INVALID_MESSAGE          17\n#define MAPI_E_TEXT_TOO_LARGE           18\n#define MAPI_E_INVALID_SESSION          19\n#define MAPI_E_TYPE_NOT_SUPPORTED       20\n#define MAPI_E_AMBIGUOUS_RECIPIENT      21\n#define MAPI_E_AMBIG_RECIP              MAPI_E_AMBIGUOUS_RECIPIENT\n#define MAPI_E_MESSAGE_IN_USE           22\n#define MAPI_E_NETWORK_FAILURE          23\n#define MAPI_E_INVALID_EDITFIELDS       24\n#define MAPI_E_INVALID_RECIPS           25\n#define MAPI_E_NOT_SUPPORTED            26\n#define MAPI_E_UNICODE_NOT_SUPPORTED    27\n\n\n/* MAPILogon */\n\n#ifndef MAPI_LOGON_UI\n#define MAPI_LOGON_UI           0x00000001\n#endif\n#ifndef MAPI_NEW_SESSION\n#define MAPI_NEW_SESSION        0x00000002\n#endif\n#ifndef MAPI_EXTENDED\n#define MAPI_EXTENDED           0x00000020\n#endif\n#ifndef MAPI_FORCE_DOWNLOAD\n#define MAPI_FORCE_DOWNLOAD     0x00001000\n#endif\n#ifndef MAPI_PASSWORD_UI\n#define MAPI_PASSWORD_UI        0x00020000\n#endif\n\n\n/* MAPISendMail */\n\n#define MAPI_DIALOG             0x00000008\n\n/* MAPISendMailW */\n\n#define MAPI_FORCE_UNICODE      0x00040000\n\n\n/* API typedefs and prototypes */\n\ntypedef ULONG (WINAPI MAPIADDRESS)(LHANDLE,ULONG_PTR,LPSTR,ULONG,LPSTR,ULONG,lpMapiRecipDesc,FLAGS,ULONG,LPULONG,lpMapiRecipDesc*);\ntypedef MAPIADDRESS *LPMAPIADDRESS;\nMAPIADDRESS MAPIAddress;\n\ntypedef ULONG (WINAPI MAPIDELETEMAIL)(LHANDLE,ULONG_PTR,LPSTR,FLAGS,ULONG);\ntypedef MAPIDELETEMAIL *LPMAPIDELETEMAIL;\nMAPIDELETEMAIL MAPIDeleteMail;\n\ntypedef ULONG (WINAPI MAPIDETAILS)(LHANDLE,ULONG_PTR,lpMapiRecipDesc,FLAGS,ULONG);\ntypedef MAPIDETAILS *LPMAPIDETAILS;\nMAPIDETAILS MAPIDetails;\n\ntypedef ULONG (WINAPI MAPIFINDNEXT)(LHANDLE,ULONG_PTR,LPSTR,LPSTR,FLAGS,ULONG,LPSTR);\ntypedef MAPIFINDNEXT *LPMAPIFINDNEXT;\nMAPIFINDNEXT MAPIFindNext;\n\n#ifndef MAPIFREEBUFFER_DEFINED\n#define MAPIFREEBUFFER_DEFINED\ntypedef ULONG (WINAPI MAPIFREEBUFFER)(LPVOID);\ntypedef MAPIFREEBUFFER *LPMAPIFREEBUFFER;\nMAPIFREEBUFFER MAPIFreeBuffer;\n#endif\n\ntypedef ULONG (WINAPI MAPILOGOFF)(LHANDLE,ULONG_PTR,FLAGS,ULONG);\ntypedef MAPILOGOFF *LPMAPILOGOFF;\nMAPILOGOFF MAPILogoff;\n\ntypedef ULONG (WINAPI MAPILOGON)(ULONG_PTR,LPSTR,LPSTR,FLAGS,ULONG,LPLHANDLE);\ntypedef MAPILOGON *LPMAPILOGON;\nMAPILOGON MAPILogon;\n\ntypedef ULONG (WINAPI MAPIREADMAIL)(LHANDLE,ULONG_PTR,LPSTR,FLAGS,ULONG,lpMapiMessage);\ntypedef MAPIREADMAIL *LPMAPIREADMAIL;\nMAPIREADMAIL MAPIReadMail;\n\ntypedef ULONG (WINAPI MAPIRESOLVENAME)(LHANDLE,ULONG_PTR,LPSTR,FLAGS,ULONG,lpMapiRecipDesc*);\ntypedef MAPIRESOLVENAME *LPMAPIRESOLVENAME;\nMAPIRESOLVENAME MAPIResolveName;\n\ntypedef ULONG (WINAPI MAPISAVEMAIL)(LHANDLE,ULONG_PTR,lpMapiMessage,FLAGS,ULONG,LPSTR);\ntypedef MAPISAVEMAIL *LPMAPISAVEMAIL;\nMAPISAVEMAIL MAPISaveMail;\n\ntypedef ULONG (WINAPI MAPISENDDOCUMENTS)(ULONG_PTR,LPSTR,LPSTR,LPSTR,ULONG);\ntypedef MAPISENDDOCUMENTS *LPMAPISENDDOCUMENTS;\nMAPISENDDOCUMENTS MAPISendDocuments;\n\ntypedef ULONG (WINAPI MAPISENDMAIL)(LHANDLE,ULONG_PTR,lpMapiMessage,FLAGS,ULONG);\ntypedef MAPISENDMAIL *LPMAPISENDMAIL;\nMAPISENDMAIL MAPISendMail;\n\ntypedef ULONG (WINAPI MAPISENDMAILW)(LHANDLE,ULONG_PTR,lpMapiMessageW,FLAGS,ULONG);\ntypedef MAPISENDMAILW *LPMAPISENDMAILW;\nMAPISENDMAILW MAPISendMailW;\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* MAPI_H */\n"
  },
  {
    "path": "wine/windows/mapicode.h",
    "content": "/*\n * Status codes returned by MAPI\n *\n * Copyright (C) 2002 Aric Stewart\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef MAPICODE_H\n#define MAPICODE_H\n\n#include <winerror.h>\n\n#define MAKE_MAPI_SCODE(sev,fac,code) \\\n    ((SCODE)(((ULONG)(sev)<<31)|((ULONG)(fac)<<16)|((ULONG)(code))))\n\n#define MAKE_MAPI_E(e) (MAKE_MAPI_SCODE(1,FACILITY_ITF,(e)))\n#define MAKE_MAPI_S(e) (MAKE_MAPI_SCODE(0,FACILITY_ITF,(e)))\n\n#ifndef SUCCESS_SUCCESS\n#define SUCCESS_SUCCESS     __MSABI_LONG(0)\n#endif\n\n/* Errors */\n#define MAPI_E_ACCOUNT_DISABLED            ((SCODE)0x80040124)\n#define MAPI_E_AMBIGUOUS_RECIP             ((SCODE)0x80040700)\n#define MAPI_E_BAD_CHARWIDTH               ((SCODE)0x80040103)\n#define MAPI_E_BAD_COLUMN                  ((SCODE)0x80040118)\n#define MAPI_E_BAD_VALUE                   ((SCODE)0x80040301)\n#define MAPI_E_BUSY                        ((SCODE)0x8004010B)\n#define MAPI_E_CALL_FAILED                 E_FAIL\n#define MAPI_E_CANCEL                      ((SCODE)0x80040501)\n#define MAPI_E_COLLISION                   ((SCODE)0x80040604)\n#define MAPI_E_COMPUTED                    ((SCODE)0x8004011A)\n#define MAPI_E_CORRUPT_DATA                ((SCODE)0x8004011B)\n#define MAPI_E_CORRUPT_STORE               ((SCODE)0x80040600)\n#define MAPI_E_DECLINE_COPY                ((SCODE)0x80040306)\n#define MAPI_E_DISK_ERROR                  ((SCODE)0x80040116)\n#define MAPI_E_END_OF_SESSION              ((SCODE)0x80040200)\n#define MAPI_E_EXTENDED_ERROR              ((SCODE)0x80040119)\n#define MAPI_E_FAILONEPROVIDER             ((SCODE)0x8004011D)\n#define MAPI_E_FOLDER_CYCLE                ((SCODE)0x8004060B)\n#define MAPI_E_HAS_FOLDERS                 ((SCODE)0x80040609)\n#define MAPI_E_HAS_MESSAGES                ((SCODE)0x8004060A)\n#define MAPI_E_INTERFACE_NOT_SUPPORTED     E_NOINTERFACE\n#define MAPI_E_INVALID_ACCESS_TIME         ((SCODE)0x80040123)\n#define MAPI_E_INVALID_BOOKMARK            ((SCODE)0x80040405)\n#define MAPI_E_INVALID_ENTRYID             ((SCODE)0x80040107)\n#define MAPI_E_INVALID_OBJECT              ((SCODE)0x80040108)\n#define MAPI_E_INVALID_PARAMETER           E_INVALIDARG\n#define MAPI_E_INVALID_TYPE                ((SCODE)0x80040302)\n#define MAPI_E_INVALID_WORKSTATION_ACCOUNT ((SCODE)0x80040122)\n#define MAPI_E_LOGON_FAILED                ((SCODE)0x80040111)\n#define MAPI_E_MISSING_REQUIRED_COLUMN     ((SCODE)0x80040202)\n#define MAPI_E_NETWORK_ERROR               ((SCODE)0x80040115)\n#define MAPI_E_NO_ACCESS                   E_ACCESSDENIED\n#define MAPI_E_NON_STANDARD                ((SCODE)0x80040606)\n#define MAPI_E_NO_RECIPIENTS               ((SCODE)0x80040607)\n#define MAPI_E_NO_SUPPORT                  ((SCODE)0x80040102)\n#define MAPI_E_NO_SUPPRESS                 ((SCODE)0x80040602)\n#define MAPI_E_NOT_ENOUGH_DISK             ((SCODE)0x8004010D)\n#define MAPI_E_NOT_ENOUGH_MEMORY           E_OUTOFMEMORY\n#define MAPI_E_NOT_ENOUGH_RESOURCES        ((SCODE)0x8004010E)\n#define MAPI_E_NOT_FOUND                   ((SCODE)0x8004010F)\n#define MAPI_E_NOT_INITIALIZED             ((SCODE)0x80040605)\n#define MAPI_E_NOT_IN_QUEUE                ((SCODE)0x80040601)\n#define MAPI_E_NOT_ME                      ((SCODE)0x80040502)\n#define MAPI_E_OBJECT_CHANGED              ((SCODE)0x80040109)\n#define MAPI_E_OBJECT_DELETED              ((SCODE)0x8004010A)\n#define MAPI_E_PASSWORD_CHANGE_REQUIRED    ((SCODE)0x80040120)\n#define MAPI_E_PASSWORD_EXPIRED            ((SCODE)0x80040121)\n#define MAPI_E_SESSION_LIMIT               ((SCODE)0x80040112)\n#define MAPI_E_STRING_TOO_LONG             ((SCODE)0x80040105)\n#define MAPI_E_SUBMITTED                   ((SCODE)0x80040608)\n#define MAPI_E_TABLE_EMPTY                 ((SCODE)0x80040402)\n#define MAPI_E_TABLE_TOO_BIG               ((SCODE)0x80040403)\n#define MAPI_E_TIMEOUT                     ((SCODE)0x80040401)\n#define MAPI_E_TOO_BIG                     ((SCODE)0x80040305)\n#define MAPI_E_TOO_COMPLEX                 ((SCODE)0x80040117)\n#define MAPI_E_TYPE_NO_SUPPORT             ((SCODE)0x80040303)\n#define MAPI_E_UNABLE_TO_ABORT             ((SCODE)0x80040114)\n#define MAPI_E_UNABLE_TO_COMPLETE          ((SCODE)0x80040400)\n#define MAPI_E_UNCONFIGURED                ((SCODE)0x8004011C)\n#define MAPI_E_UNEXPECTED_ID               ((SCODE)0x80040307)\n#define MAPI_E_UNEXPECTED_TYPE             ((SCODE)0x80040304)\n#define MAPI_E_UNKNOWN_CPID                ((SCODE)0x8004011E)\n#define MAPI_E_UNKNOWN_ENTRYID             ((SCODE)0x80040201)\n#define MAPI_E_UNKNOWN_FLAGS               ((SCODE)0x80040106)\n#define MAPI_E_UNKNOWN_LCID                ((SCODE)0x8004011F)\n#define MAPI_E_USER_CANCEL                 ((SCODE)0x80040113)\n#define MAPI_E_VERSION                     ((SCODE)0x80040110)\n#define MAPI_E_WAIT                        ((SCODE)0x80040500)\n\n/* Warnings */\n#define MAPI_W_APPROX_COUNT                ((SCODE)0x00040482)\n#define MAPI_W_CANCEL_MESSAGE              ((SCODE)0x00040580)\n#define MAPI_W_ERRORS_RETURNED             ((SCODE)0x00040380)\n#define MAPI_W_NO_SERVICE                  ((SCODE)0x00040203)\n#define MAPI_W_PARTIAL_COMPLETION          ((SCODE)0x00040680)\n#define MAPI_W_POSITION_CHANGED            ((SCODE)0x00040481)\n\n#endif /* MAPICODE_H */\n"
  },
  {
    "path": "wine/windows/mapidefs.h",
    "content": "/*\n * Copyright (C) 1998 Justin Bradford\n * Copyright (c) 2009 Owen Rudge for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef MAPIDEFS_H\n#define MAPIDEFS_H\n\n#include <windows.h>\n#include <winerror.h>\n#include <objbase.h>\n#include <stddef.h>\n\n/* Some types from other headers */\n#ifndef __LHANDLE\n#define __LHANDLE\ntypedef ULONG_PTR LHANDLE, *LPLHANDLE;\n#endif\n\n#ifndef _tagCY_DEFINED\n#define _tagCY_DEFINED\ntypedef union tagCY\n{\n    struct\n    {\n#ifdef WORDS_BIGENDIAN\n        LONG  Hi;\n        ULONG Lo;\n#else\n        ULONG Lo;\n        LONG  Hi;\n#endif\n    } DUMMYSTRUCTNAME;\n    LONGLONG int64;\n} CY;\ntypedef CY CURRENCY;\n#endif /* _tagCY_DEFINED */\n\n\n#ifndef _FILETIME_\n#define _FILETIME_\ntypedef struct _FILETIME\n{\n#ifdef WORDS_BIGENDIAN\n    DWORD dwHighDateTime;\n    DWORD dwLowDateTime;\n#else\n    DWORD dwLowDateTime;\n    DWORD dwHighDateTime;\n#endif\n} FILETIME, *PFILETIME, *LPFILETIME;\n#endif\n\n/* Memory allocation routines */\ntypedef SCODE (WINAPI ALLOCATEBUFFER)(ULONG,LPVOID*);\ntypedef SCODE (WINAPI ALLOCATEMORE)(ULONG,LPVOID,LPVOID*);\ntypedef ULONG (WINAPI FREEBUFFER)(LPVOID);\n\ntypedef ALLOCATEBUFFER *LPALLOCATEBUFFER;\ntypedef ALLOCATEMORE *LPALLOCATEMORE;\ntypedef FREEBUFFER *LPFREEBUFFER;\n\n/* MAPI exposed interfaces */\ntypedef const IID *LPCIID;\n\ntypedef struct IAddrBook IAddrBook;\ntypedef IAddrBook *LPADRBOOK;\ntypedef struct IABContainer IABContainer;\ntypedef IABContainer *LPABCONT;\ntypedef struct IAttach *LPATTACH;\ntypedef struct IDistList IDistList;\ntypedef IDistList *LPDISTLIST;\ntypedef struct IMailUser IMailUser;\ntypedef IMailUser *LPMAILUSER;\ntypedef struct IMAPIAdviseSink *LPMAPIADVISESINK;\ntypedef struct IMAPIContainer *LPMAPICONTAINER;\ntypedef struct IMAPIFolder *LPMAPIFOLDER;\ntypedef struct IMAPIProgress IMAPIProgress;\ntypedef IMAPIProgress *LPMAPIPROGRESS;\ntypedef struct IMAPIStatus IMAPIStatus;\ntypedef IMAPIStatus *LPMAPISTATUS;\ntypedef struct IMessage *LPMESSAGE;\ntypedef struct IProfSect IProfSect;\ntypedef IProfSect *LPPROFSECT;\ntypedef struct IProviderAdmin IProviderAdmin;\ntypedef IProviderAdmin *LPPROVIDERADMIN;\n\n#ifndef MAPI_DIM\n# define MAPI_DIM 1 /* Default to one dimension for variable length arrays */\n#endif\n\n/* Flags for abFlags[0] */\n#define MAPI_NOTRESERVED 0x08\n#define MAPI_NOW         0x10\n#define MAPI_THISSESSION 0x20\n#define MAPI_NOTRECIP    0x40\n#define MAPI_SHORTTERM   0x80\n\n/* Flags for abFlags[1]  */\n#define MAPI_COMPOUND    0x80\n\ntypedef struct _ENTRYID\n{\n    BYTE abFlags[4];\n    BYTE ab[MAPI_DIM];\n} ENTRYID, *LPENTRYID;\n\n/* MAPI GUID's */\ntypedef struct _MAPIUID\n{\n    BYTE ab[sizeof(GUID)];\n} MAPIUID, *LPMAPIUID;\n\n#define IsEqualMAPIUID(pl,pr) (!memcmp((pl),(pr),sizeof(MAPIUID)))\n\n#define MAPI_ONE_OFF_UID { 0x81,0x2b,0x1f,0xa4,0xbe,0xa3,0x10,0x19,0x9d,0x6e, \\\n                           0x00,0xdd,0x01,0x0f,0x54,0x02 }\n#define MAPI_ONE_OFF_UNICODE      0x8000\n#define MAPI_ONE_OFF_NO_RICH_INFO 0x0001\n\n/* Object types */\n#define MAPI_STORE    1U\n#define MAPI_ADDRBOOK 2U\n#define MAPI_FOLDER   3U\n#define MAPI_ABCONT   4U\n#define MAPI_MESSAGE  5U\n#define MAPI_MAILUSER 6U\n#define MAPI_ATTACH   7U\n#define MAPI_DISTLIST 8U\n#define MAPI_PROFSECT 9U\n#define MAPI_STATUS   10U\n#define MAPI_SESSION  11U\n#define MAPI_FORMINFO 12U\n\n/* Flags for various calls */\n#define MAPI_MODIFY                   0x00000001U /* Object can be modified */\n#define MAPI_CREATE                   0x00000002U /* Object can be created */\n#define MAPI_ACCESS_MODIFY            MAPI_MODIFY /* Want write access */\n#define MAPI_ACCESS_READ              0x00000002U /* Want read access */\n#define MAPI_ACCESS_DELETE            0x00000004U /* Want delete access */\n#define MAPI_ACCESS_CREATE_HIERARCHY  0x00000008U\n#define MAPI_ACCESS_CREATE_CONTENTS   0x00000010U\n#define MAPI_ACCESS_CREATE_ASSOCIATED 0x00000020U\n#define MAPI_USE_DEFAULT              0x00000040U\n#define MAPI_UNICODE                  0x80000000U /* Strings in this call are Unicode */\n\n#if defined (UNICODE) || defined (__WINESRC__)\n#define fMapiUnicode MAPI_UNICODE\n#else\n#define fMapiUnicode 0U\n#endif\n\n/* IMAPISession::OpenMessageStore() flags */\n#define MDB_NO_DIALOG           0x00000001\n\n/* Types of message receivers */\n#ifndef MAPI_ORIG\n#define MAPI_ORIG      0          /* The original author */\n#define MAPI_TO        1          /* The primary message receiver */\n#define MAPI_CC        2          /* A carbon copy receiver */\n#define MAPI_BCC       3          /* A blind carbon copy receiver */\n#define MAPI_P1        0x10000000 /* A message resend */\n#define MAPI_SUBMITTED 0x80000000 /* This message has already been sent */\n#endif\n\n#ifndef cchProfileNameMax\n#define cchProfileNameMax 64 /* Maximum length of a profile name */\n#define cchProfilePassMax 64 /* Maximum length of a profile password */\n#endif\n\n/* Properties: These are the contents of cells in MAPI tables, as well as the\n * values returned when object properties are queried.\n */\n\n/* Property types */\n#define PT_UNSPECIFIED 0U\n#define PT_NULL        1U\n#define PT_I2          2U\n#define PT_SHORT       PT_I2\n#define PT_LONG        3U\n#define PT_I4          PT_LONG\n#define PT_R4          4U\n#define PT_FLOAT       PT_R4\n#define PT_DOUBLE      5U\n#define PT_R8          PT_DOUBLE\n#define PT_CURRENCY    6U\n#define PT_APPTIME     7U\n#define PT_ERROR       10U\n#define PT_BOOLEAN     11U\n#define PT_OBJECT      13U\n#define PT_I8          20U\n#define PT_LONGLONG    PT_I8\n#define PT_STRING8     30U\n#define PT_UNICODE     31U\n#define PT_SYSTIME     64U\n#define PT_CLSID       72U\n#define PT_BINARY      258U\n\n#define MV_FLAG     0x1000 /* This property type is multi-valued (an array) */\n#define MV_INSTANCE 0x2000\n#define MVI_FLAG    (MV_FLAG|MV_INSTANCE)\n#define MVI_PROP(t) ((t)|MVI_FLAG)\n\n#ifndef WINE_NO_UNICODE_MACROS\n# ifdef UNICODE\n# define PT_TSTRING      PT_UNICODE\n# define PT_MV_TSTRING   (MV_FLAG|PT_UNICODE)\n# define LPSZ            lpszW\n# define LPPSZ           lppszW\n# define MVSZ            MVszW\n# else\n# define PT_TSTRING      PT_STRING8\n# define PT_MV_TSTRING   (MV_FLAG|PT_STRING8)\n# define LPSZ            lpszA\n# define LPPSZ           lppszA\n# define MVSZ            MVszA\n# endif\n#endif\n\n#define PROP_TYPE_MASK  0xFFFFU\n#define PROP_TYPE(t)    ((t) & PROP_TYPE_MASK)\n#define PROP_ID(t)      ((t) >> 16)\n#define PROP_TAG(t,id)  (((id) << 16) | t)\n#define PROP_ID_NULL    0\n#define PROP_ID_INVALID 0xFFFF\n#define PR_NULL         PROP_TAG(PT_NULL, PROP_ID_NULL)\n\n#define CHANGE_PROP_TYPE(t,typ) ((0xFFFF0000 & t) | typ)\n\n/* Multi-valued property types */\n#define PT_MV_I2       (MV_FLAG|PT_I2)\n#define PT_MV_SHORT    PT_MV_I2\n#define PT_MV_LONG     (MV_FLAG|PT_LONG)\n#define PT_MV_I4       PT_MV_LONG\n#define PT_MV_R4       (MV_FLAG|PT_R4)\n#define PT_MV_FLOAT    PT_MV_R4\n#define PT_MV_DOUBLE   (MV_FLAG|PT_DOUBLE)\n#define PT_MV_R8       PT_MV_DOUBLE\n#define PT_MV_CURRENCY (MV_FLAG|PT_CURRENCY)\n#define PT_MV_APPTIME  (MV_FLAG|PT_APPTIME)\n#define PT_MV_SYSTIME  (MV_FLAG|PT_SYSTIME)\n#define PT_MV_STRING8  (MV_FLAG|PT_STRING8)\n#define PT_MV_BINARY   (MV_FLAG|PT_BINARY)\n#define PT_MV_UNICODE  (MV_FLAG|PT_UNICODE)\n#define PT_MV_CLSID    (MV_FLAG|PT_CLSID)\n#define PT_MV_I8       (MV_FLAG|PT_I8)\n#define PT_MV_LONGLONG PT_MV_I8\n\n\n/* The property tag structure. This describes a list of columns */\ntypedef struct _SPropTagArray\n{\n    ULONG cValues;              /* Number of elements in aulPropTag */\n    ULONG aulPropTag[MAPI_DIM]; /* Property tags */\n} SPropTagArray, *LPSPropTagArray;\n\n#define CbNewSPropTagArray(c) (offsetof(SPropTagArray,aulPropTag)+(c)*sizeof(ULONG))\n#define CbSPropTagArray(p)    CbNewSPropTagArray((p)->cValues)\n#define SizedSPropTagArray(n,id) \\\n    struct _SPropTagArray_##id { ULONG cValues; ULONG aulPropTag[n]; } id\n\n/* Multi-valued PT_APPTIME property value */\ntypedef struct _SAppTimeArray\n{\n    ULONG   cValues; /* Number of doubles in lpat */\n    double *lpat;    /* Pointer to double array of length cValues */\n} SAppTimeArray;\n\n/* PT_BINARY property value */\ntypedef struct _SBinary\n{\n    ULONG  cb;  /* Number of bytes in lpb */\n    LPBYTE lpb; /* Pointer to byte array of length cb */\n} SBinary, *LPSBinary;\n\n/* Multi-valued PT_BINARY property value */\ntypedef struct _SBinaryArray\n{\n    ULONG    cValues; /* Number of SBinarys in lpbin */\n    SBinary *lpbin;   /* Pointer to SBinary array of length cValues */\n} SBinaryArray;\n\ntypedef SBinaryArray ENTRYLIST, *LPENTRYLIST;\n\n/* Multi-valued PT_CY property value */\ntypedef struct _SCurrencyArray\n{\n    ULONG  cValues; /* Number of CYs in lpcu */\n    CY    *lpcur;   /* Pointer to CY array of length cValues */\n} SCurrencyArray;\n\n/* Multi-valued PT_SYSTIME property value */\ntypedef struct _SDateTimeArray\n{\n    ULONG     cValues; /* Number of FILETIMEs in lpft */\n    FILETIME *lpft;    /* Pointer to FILETIME array of length cValues */\n} SDateTimeArray;\n\n/* Multi-valued PT_DOUBLE property value */\ntypedef struct _SDoubleArray\n{\n    ULONG   cValues; /* Number of doubles in lpdbl */\n    double *lpdbl;   /* Pointer to double array of length cValues */\n} SDoubleArray;\n\n/* Multi-valued PT_CLSID property value */\ntypedef struct _SGuidArray\n{\n    ULONG cValues; /* Number of GUIDs in lpguid */\n    GUID *lpguid;  /* Pointer to GUID array of length cValues */\n} SGuidArray;\n\n/* Multi-valued PT_LONGLONG property value */\ntypedef struct _SLargeIntegerArray\n{\n    ULONG          cValues; /* Number of long64s in lpli */\n    LARGE_INTEGER *lpli;    /* Pointer to long64 array of length cValues */\n} SLargeIntegerArray;\n\n/* Multi-valued PT_LONG property value */\ntypedef struct _SLongArray\n{\n    ULONG  cValues; /* Number of longs in lpl */\n    LONG  *lpl;     /* Pointer to long array of length cValues */\n} SLongArray;\n\n/* Multi-valued PT_STRING8 property value */\ntypedef struct _SLPSTRArray\n{\n    ULONG  cValues; /* Number of Ascii strings in lppszA */\n    LPSTR *lppszA;  /* Pointer to Ascii string array of length cValues */\n} SLPSTRArray;\n\n/* Multi-valued PT_FLOAT property value */\ntypedef struct _SRealArray\n{\n    ULONG cValues; /* Number of floats in lpflt */\n    float *lpflt;  /* Pointer to float array of length cValues */\n} SRealArray;\n\n/* Multi-valued PT_SHORT property value */\ntypedef struct _SShortArray\n{\n    ULONG      cValues; /* Number of shorts in lpb */\n    short int *lpi;     /* Pointer to short array of length cValues */\n} SShortArray;\n\n/* Multi-valued PT_UNICODE property value */\ntypedef struct _SWStringArray\n{\n    ULONG   cValues; /* Number of Unicode strings in lppszW */\n    LPWSTR *lppszW;  /* Pointer to Unicode string array of length cValues */\n} SWStringArray;\n\n/* A property value */\ntypedef union _PV\n{\n    short int          i;\n    LONG               l;\n    ULONG              ul;\n    float              flt;\n    double             dbl;\n    unsigned short     b;\n    CY                 cur;\n    double             at;\n    FILETIME           ft;\n    LPSTR              lpszA;\n    SBinary            bin;\n    LPWSTR             lpszW;\n    LPGUID             lpguid;\n    LARGE_INTEGER      li;\n    SShortArray        MVi;\n    SLongArray         MVl;\n    SRealArray         MVflt;\n    SDoubleArray       MVdbl;\n    SCurrencyArray     MVcur;\n    SAppTimeArray      MVat;\n    SDateTimeArray     MVft;\n    SBinaryArray       MVbin;\n    SLPSTRArray        MVszA;\n    SWStringArray      MVszW;\n    SGuidArray         MVguid;\n    SLargeIntegerArray MVli;\n    SCODE              err;\n    LONG               x;\n} __UPV;\n\n/* Property value structure. This is essentially a mini-Variant */\ntypedef struct _SPropValue\n{\n    ULONG     ulPropTag;  /* The property type */\n    ULONG     dwAlignPad; /* Alignment, treat as reserved */\n    union _PV Value;      /* The property value */\n} SPropValue, *LPSPropValue;\n\n/* Structure describing a table row (a collection of property values) */\ntypedef struct _SRow\n{\n    ULONG        ulAdrEntryPad; /* Padding, treat as reserved */\n    ULONG        cValues;       /* Count of property values in lpProbs */\n    LPSPropValue lpProps;       /* Pointer to an array of property values of length cValues */\n} SRow, *LPSRow;\n\n/* Structure describing a set of table rows */\ntypedef struct _SRowSet\n{\n    ULONG cRows;          /* Count of rows in aRow */\n    SRow  aRow[MAPI_DIM]; /* Array of rows of length cRows */\n} SRowSet, *LPSRowSet;\n\n#define CbNewSRowSet(c) (offsetof(SRowSet,aRow)+(c)*sizeof(SRow))\n#define CbSRowSet(p)    CbNewSRowSet((p)->cRows)\n#define SizedSRowSet(n,id) \\\n    struct _SRowSet_##id { ULONG cRows; SRow aRow[n]; } id\n\n/* Structure describing a problem with a property */\ntypedef struct _SPropProblem\n{\n    ULONG ulIndex;   /* Index of the property */\n    ULONG ulPropTag; /* Property tag of the property */\n    SCODE scode;     /* Error code of the problem */\n} SPropProblem, *LPSPropProblem;\n\n/* A collection of property problems */\ntypedef struct _SPropProblemArray\n{\n    ULONG        cProblem;           /* Number of problems in aProblem */\n    SPropProblem aProblem[MAPI_DIM]; /* Array of problems of length cProblem */\n} SPropProblemArray, *LPSPropProblemArray;\n\n/* FPropContainsProp flags */\n#define FL_FULLSTRING     ((ULONG)0x00000) /* Exact string match */\n#define FL_SUBSTRING      ((ULONG)0x00001) /* Substring match */\n#define FL_PREFIX         ((ULONG)0x00002) /* Prefix match */\n#define FL_IGNORECASE     ((ULONG)0x10000) /* Case insensitive */\n#define FL_IGNORENONSPACE ((ULONG)0x20000) /* Ignore non spacing characters */\n#define FL_LOOSE          ((ULONG)0x40000) /* Try very hard to match */\n\n\n/* Table types returned by IMAPITable_GetStatus() */\n#define TBLTYPE_SNAPSHOT 0U /* Table is fixed at creation time and contents do not change */\n#define TBLTYPE_KEYSET   1U /* Table has a fixed number of rows, but row values may change */\n#define TBLTYPE_DYNAMIC  2U /* Table values and the number of rows may change */\n\n/* Table status returned by IMAPITable_GetStatus() */\n#define TBLSTAT_COMPLETE       0U  /* All operations have completed (normal status) */\n#define TBLSTAT_QCHANGED       7U  /* Table data has changed as expected */\n#define TBLSTAT_SORTING        9U  /* Table is being asynchronously sorted */\n#define TBLSTAT_SORT_ERROR     10U /* An error occurred while sorting the table */\n#define TBLSTAT_SETTING_COLS   11U /* Table columns are being asynchronously changed */\n#define TBLSTAT_SETCOL_ERROR   13U /* An error occurred during column changing */\n#define TBLSTAT_RESTRICTING    14U /* Table rows are being asynchronously restricted */\n#define TBLSTAT_RESTRICT_ERROR 15U /* An error occurred during row restriction */\n\n/* Flags for IMAPITable operations that can be asynchronous */\n#define TBL_NOWAIT 1U         /* Perform the operation asynchronously */\n#define TBL_BATCH  2U         /* Perform the operation when the results are needed */\n#define TBL_ASYNC  TBL_NOWAIT /* Synonym for TBL_NOWAIT */\n\n/* Flags for IMAPITable_FindRow() */\n#define DIR_BACKWARD 1U /* Read rows backwards from the start bookmark */\n\n/* Table bookmarks */\ntypedef ULONG BOOKMARK;\n\n#define BOOKMARK_BEGINNING ((BOOKMARK)0) /* The first row */\n#define BOOKMARK_CURRENT   ((BOOKMARK)1) /* The current table row */\n#define BOOKMARK_END       ((BOOKMARK)2) /* The last row */\n\n/* Row restrictions */\ntypedef struct _SRestriction* LPSRestriction;\n\ntypedef struct _SAndRestriction\n{\n    ULONG          cRes;\n    LPSRestriction lpRes;\n} SAndRestriction;\n\ntypedef struct _SBitMaskRestriction\n{\n    ULONG relBMR;\n    ULONG ulPropTag;\n    ULONG ulMask;\n} SBitMaskRestriction;\n\ntypedef struct _SCommentRestriction\n{\n    ULONG          cValues;\n    LPSRestriction lpRes;\n    LPSPropValue   lpProp;\n} SCommentRestriction;\n\n#define RELOP_LT 0U\n#define RELOP_LE 1U\n#define RELOP_GT 2U\n#define RELOP_GE 3U\n#define RELOP_EQ 4U\n#define RELOP_NE 5U\n#define RELOP_RE 6U\n\ntypedef struct _SComparePropsRestriction\n{\n    ULONG relop;\n    ULONG ulPropTag1;\n    ULONG ulPropTag2;\n} SComparePropsRestriction;\n\ntypedef struct _SContentRestriction\n{\n    ULONG        ulFuzzyLevel;\n    ULONG        ulPropTag;\n    LPSPropValue lpProp;\n} SContentRestriction;\n\ntypedef struct _SExistRestriction\n{\n    ULONG ulReserved1;\n    ULONG ulPropTag;\n    ULONG ulReserved2;\n} SExistRestriction;\n\ntypedef struct _SNotRestriction\n{\n    ULONG          ulReserved;\n    LPSRestriction lpRes;\n} SNotRestriction;\n\ntypedef struct _SOrRestriction\n{\n    ULONG          cRes;\n    LPSRestriction lpRes;\n} SOrRestriction;\n\ntypedef struct _SPropertyRestriction\n{\n    ULONG        relop;\n    ULONG        ulPropTag;\n    LPSPropValue lpProp;\n} SPropertyRestriction;\n\ntypedef struct _SSizeRestriction\n{\n    ULONG relop;\n    ULONG ulPropTag;\n    ULONG cb;\n} SSizeRestriction;\n\ntypedef struct _SSubRestriction\n{\n    ULONG          ulSubObject;\n    LPSRestriction lpRes;\n} SSubRestriction;\n\n/* Restriction types */\n#define RES_AND            0U\n#define RES_OR             1U\n#define RES_NOT            2U\n#define RES_CONTENT        3U\n#define RES_PROPERTY       4U\n#define RES_COMPAREPROPS   5U\n#define RES_BITMASK        6U\n#define RES_SIZE           7U\n#define RES_EXIST          8U\n#define RES_SUBRESTRICTION 9U\n#define RES_COMMENT        10U\n\ntypedef struct _SRestriction\n{\n    ULONG rt;\n    union\n    {\n        SAndRestriction          resAnd;\n        SBitMaskRestriction      resBitMask;\n        SCommentRestriction      resComment;\n        SComparePropsRestriction resCompareProps;\n        SContentRestriction      resContent;\n        SExistRestriction        resExist;\n        SNotRestriction          resNot;\n        SOrRestriction           resOr;\n        SPropertyRestriction     resProperty;\n        SSizeRestriction         resSize;\n        SSubRestriction          resSub;\n    } res;\n} SRestriction;\n\n/* Errors */\ntypedef struct _MAPIERROR\n{\n    ULONG  ulVersion;       /* Mapi version */\n#if defined (UNICODE) || defined (__WINESRC__)\n    LPWSTR lpszError;       /* Error and component strings. These are Ascii */\n    LPWSTR lpszComponent;   /* unless the MAPI_UNICODE flag is passed in */\n#else\n    LPSTR  lpszError;\n    LPSTR  lpszComponent;\n#endif\n    ULONG  ulLowLevelError;\n    ULONG  ulContext;\n} MAPIERROR, *LPMAPIERROR;\n\n/* Sorting */\n#define TABLE_SORT_ASCEND  0U\n#define TABLE_SORT_DESCEND 1U\n#define TABLE_SORT_COMBINE 2U\n\ntypedef struct _SSortOrder\n{\n    ULONG ulPropTag;\n    ULONG ulOrder;\n} SSortOrder, *LPSSortOrder;\n\ntypedef struct _SSortOrderSet\n{\n    ULONG      cSorts;\n    ULONG      cCategories;\n    ULONG      cExpanded;\n    SSortOrder aSort[MAPI_DIM];\n} SSortOrderSet, * LPSSortOrderSet;\n\n#define MNID_ID     0\n#define MNID_STRING 1\n\ntypedef struct _MAPINAMEID\n{\n    LPGUID lpguid;\n    ULONG ulKind;\n    union\n    {\n        LONG lID;\n        LPWSTR lpwstrName;\n    } Kind;\n} MAPINAMEID, *LPMAPINAMEID;\n\n/* Desired notification types (bitflags) */\n#define fnevCriticalError        ((ULONG)0x00000001)\n#define fnevNewMail              ((ULONG)0x00000002)\n#define fnevObjectCreated        ((ULONG)0x00000004)\n#define fnevObjectDeleted        ((ULONG)0x00000008)\n#define fnevObjectModified       ((ULONG)0x00000010)\n#define fnevObjectMoved          ((ULONG)0x00000020)\n#define fnevObjectCopied         ((ULONG)0x00000040)\n#define fnevSearchComplete       ((ULONG)0x00000080)\n#define fnevTableModified        ((ULONG)0x00000100)\n#define fnevStatusObjectModified ((ULONG)0x00000200)\n#define fnevReservedForMapi      ((ULONG)0x40000000)\n#define fnevExtended             ((ULONG)0x80000000)\n\n/* Type of notification event */\n#define TABLE_CHANGED       1U\n#define TABLE_ERROR         2U\n#define TABLE_ROW_ADDED     3U\n#define TABLE_ROW_DELETED   4U\n#define TABLE_ROW_MODIFIED  5U\n#define TABLE_SORT_DONE     6U\n#define TABLE_RESTRICT_DONE 7U\n#define TABLE_SETCOL_DONE   8U\n#define TABLE_RELOAD        9U\n\n/* fnevCriticalError notification */\ntypedef struct _ERROR_NOTIFICATION\n{\n    ULONG       cbEntryID;\n    LPENTRYID   lpEntryID;\n    SCODE       scode;\n    ULONG       ulFlags;\n    LPMAPIERROR lpMAPIError;\n} ERROR_NOTIFICATION;\n\n/* fnevNewMail notification */\ntypedef struct _NEWMAIL_NOTIFICATION\n{\n    ULONG     cbEntryID;\n    LPENTRYID lpEntryID;\n    ULONG     cbParentID;\n    LPENTRYID lpParentID;\n    ULONG     ulFlags;\n#if defined (UNICODE) || defined (__WINESRC__)\n    LPWSTR    lpszMessageClass;\n#else\n    LPSTR     lpszMessageClass;\n#endif\n    ULONG     ulMessageFlags;\n} NEWMAIL_NOTIFICATION;\n\n/* fnevObjectCreated/Deleted/Modified/Moved/Copied notification */\ntypedef struct _OBJECT_NOTIFICATION\n{\n    ULONG           cbEntryID;\n    LPENTRYID       lpEntryID;\n    ULONG           ulObjType;\n    ULONG           cbParentID;\n    LPENTRYID       lpParentID;\n    ULONG           cbOldID;\n    LPENTRYID       lpOldID;\n    ULONG           cbOldParentID;\n    LPENTRYID       lpOldParentID;\n    LPSPropTagArray lpPropTagArray;\n} OBJECT_NOTIFICATION;\n\n/* fnevTableModified notification */\ntypedef struct _TABLE_NOTIFICATION\n{\n    ULONG      ulTableEvent;\n    HRESULT    hResult;\n    SPropValue propIndex;\n    SPropValue propPrior;\n    SRow       row;\n    ULONG      ulPad;\n} TABLE_NOTIFICATION;\n\n/* fnevExtended notification */\ntypedef struct _EXTENDED_NOTIFICATION\n{\n    ULONG  ulEvent;\n    ULONG  cb;\n    LPBYTE pbEventParameters;\n} EXTENDED_NOTIFICATION;\n\n/* fnevStatusObjectModified notification */\ntypedef struct\n{\n    ULONG        cbEntryID;\n    LPENTRYID    lpEntryID;\n    ULONG        cValues;\n    LPSPropValue lpPropVals;\n} STATUS_OBJECT_NOTIFICATION;\n\n/* The notification structure passed to advise sinks */\ntypedef struct _NOTIFICATION\n{\n    ULONG ulEventType;\n    ULONG ulAlignPad;\n    union\n    {\n        ERROR_NOTIFICATION         err;\n        NEWMAIL_NOTIFICATION       newmail;\n        OBJECT_NOTIFICATION        obj;\n        TABLE_NOTIFICATION         tab;\n        EXTENDED_NOTIFICATION      ext;\n        STATUS_OBJECT_NOTIFICATION statobj;\n    } info;\n} NOTIFICATION, *LPNOTIFICATION;\n\ntypedef LONG (WINAPI NOTIFCALLBACK)(LPVOID,ULONG,LPNOTIFICATION);\ntypedef NOTIFCALLBACK *LPNOTIFCALLBACK;\n\n/* IMAPIContainer::OpenEntry flags */\n#define MAPI_BEST_ACCESS    0x00000010\n\n/*****************************************************************************\n * IMAPITable interface\n *\n * This is the read-only 'view' over an I(MAPI)TableData object.\n */\n#define INTERFACE IMAPITable\nDECLARE_INTERFACE_(IMAPITable,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IMAPITable methods ***/\n    STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppError) PURE;\n    STDMETHOD(Advise)(THIS_ ULONG ulMask, LPMAPIADVISESINK lpSink, ULONG *lpCxn) PURE;\n    STDMETHOD(Unadvise)(THIS_ ULONG ulCxn) PURE;\n    STDMETHOD(GetStatus)(THIS_ ULONG *lpStatus, ULONG *lpType) PURE;\n    STDMETHOD(SetColumns)(THIS_ LPSPropTagArray lpProps, ULONG ulFlags) PURE;\n    STDMETHOD(QueryColumns)(THIS_ ULONG ulFlags, LPSPropTagArray *lpCols) PURE;\n    STDMETHOD(GetRowCount)(THIS_ ULONG ulFlags, ULONG *lpCount) PURE;\n    STDMETHOD(SeekRow)(THIS_ BOOKMARK lpStart, LONG lRows, LONG *lpSeeked) PURE;\n    STDMETHOD(SeekRowApprox)(THIS_ ULONG ulNum, ULONG ulDenom) PURE;\n    STDMETHOD(QueryPosition)(THIS_ ULONG *lpRow, ULONG *lpNum, ULONG *lpDenom) PURE;\n    STDMETHOD(FindRow)(THIS_ LPSRestriction lpRestrict, BOOKMARK lpOrigin, ULONG ulFlags) PURE;\n    STDMETHOD(Restrict)(THIS_ LPSRestriction lpRestrict, ULONG ulFlags) PURE;\n    STDMETHOD(CreateBookmark)(THIS_ BOOKMARK *lppPos) PURE;\n    STDMETHOD(FreeBookmark)(THIS_ BOOKMARK lpPos) PURE;\n    STDMETHOD(SortTable)(THIS_ LPSSortOrderSet lpSortOpts, ULONG ulFlags) PURE;\n    STDMETHOD(QuerySortOrder)(THIS_ LPSSortOrderSet *lppSortOpts) PURE;\n    STDMETHOD(QueryRows)(THIS_ LONG lRows, ULONG ulFlags, LPSRowSet *lppRows) PURE;\n    STDMETHOD(Abort) (THIS) PURE;\n    STDMETHOD(ExpandRow)(THIS_ ULONG cbKey, LPBYTE lpKey, ULONG ulRows,\n                         ULONG ulFlags, LPSRowSet *lppRows, ULONG *lpMore) PURE;\n    STDMETHOD(CollapseRow)(THIS_ ULONG cbKey, LPBYTE lpKey, ULONG ulFlags, ULONG *lpRows) PURE;\n    STDMETHOD(WaitForCompletion)(THIS_ ULONG ulFlags, ULONG ulTime, ULONG *lpState) PURE;\n    STDMETHOD(GetCollapseState)(THIS_ ULONG ulFlags, ULONG cbKey, LPBYTE lpKey,\n                                ULONG *lpStateLen, LPBYTE *lpState) PURE;\n    STDMETHOD(SetCollapseState)(THIS_ ULONG ulFlags, ULONG ulLen,\n                                LPBYTE lpStart, BOOKMARK *lppWhere) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n        /*** IUnknown methods ***/\n#define IMAPITable_QueryInterface(p,a,b)         (p)->lpVtbl->QueryInterface(p,a,b)\n#define IMAPITable_AddRef(p)                     (p)->lpVtbl->AddRef(p)\n#define IMAPITable_Release(p)                    (p)->lpVtbl->Release(p)\n        /*** IMAPITable methods ***/\n#define IMAPITable_GetLastError(p,a,b,c)         (p)->lpVtbl->GetLastError(p,a,b,c)\n#define IMAPITable_Advise(p,a,b,c)               (p)->lpVtbl->Advise(p,a,b,c)\n#define IMAPITable_Unadvise(p,a)                 (p)->lpVtbl->Unadvise(p,a)\n#define IMAPITable_GetStatus(p,a,b)              (p)->lpVtbl->GetStatus(p,a,b)\n#define IMAPITable_SetColumns(p,a,b)             (p)->lpVtbl->SetColumns(p,a,b)\n#define IMAPITable_QueryColumns(p,a,b)           (p)->lpVtbl->QueryColumns(p,a,b)\n#define IMAPITable_GetRowCount(p,a,b)            (p)->lpVtbl->GetRowCount(p,a,b)\n#define IMAPITable_SeekRow(p,a,b)                (p)->lpVtbl->SeekRow(p,a,b)\n#define IMAPITable_SeekRowApprox(p,a,b)          (p)->lpVtbl->SeekRowApprox(p,a,b)\n#define IMAPITable_QueryPosition(p,a,b)          (p)->lpVtbl->QueryPosition(p,a,b)\n#define IMAPITable_FindRow(p,a,b,c)              (p)->lpVtbl->FindRow(p,a,b,c)\n#define IMAPITable_Restrict(p,a,b)               (p)->lpVtbl->Recstrict(p,a,b)\n#define IMAPITable_CreateBookmark(p,a)           (p)->lpVtbl->CreateBookmark(p,a)\n#define IMAPITable_FreeBookmark(p,a)             (p)->lpVtbl->FreeBookmark(p,a)\n#define IMAPITable_SortTable(p,a,b)              (p)->lpVtbl->SortTable(p,a,b)\n#define IMAPITable_QuerySortOrder(p,a)           (p)->lpVtbl->QuerySortOrder(p,a)\n#define IMAPITable_QueryRows(p,a,b,c)            (p)->lpVtbl->QueryRows(p,a,b,c)\n#define IMAPITable_Abort(p)                      (p)->lpVtbl->Abort(p)\n#define IMAPITable_ExpandRow(p,a,b,c,d,e,f)      (p)->lpVtbl->ExpandRow(p,a,b,c,d,e,f)\n#define IMAPITable_CollapseRow(p,a,b,c,d)        (p)->lpVtbl->CollapseRow(p,a,b,c,d)\n#define IMAPITable_WaitForCompletion(p,a,b,c)    (p)->lpVtbl->WaitForCompletion(p,a,b,c)\n#define IMAPITable_GetCollapseState(p,a,b,c,d,e) (p)->lpVtbl->GetCollapseState(p,a,b,c,d,e)\n#define IMAPITable_SetCollapseState(p,a,b,c,d)   (p)->lpVtbl->SetCollapseState(p,a,b,c,d)\n#endif\n\ntypedef IMAPITable *LPMAPITABLE;\n\n/*****************************************************************************\n * IMAPIAdviseSink interface\n */\n#define INTERFACE IMAPIAdviseSink\nDECLARE_INTERFACE_(IMAPIAdviseSink,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IMAPIAdviseSink methods ***/\n    STDMETHOD(OnNotify)(THIS_ ULONG NumNotif, LPNOTIFICATION lpNotif) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n        /*** IUnknown methods ***/\n#define IMAPIAdviseSink_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IMAPIAdviseSink_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IMAPIAdviseSink_Release(p)            (p)->lpVtbl->Release(p)\n        /*** IMAPIAdviseSink methods ***/\n#define IMAPIAdviseSink_OnNotify(p,a,b)       (p)->lpVtbl->OnNotify(p,a,b)\n#endif\n\n/*****************************************************************************\n * IMAPIProp interface\n */\n#define INTERFACE IMAPIProp\nDECLARE_INTERFACE_(IMAPIProp,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IMAPIProp methods ***/\n    STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;\n    STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;\n    STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;\n    STDMETHOD(GetPropList)(THIS_ ULONG  ulFlags, LPSPropTagArray *lppPropTagArray) PURE;\n    STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;\n    STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;\n    STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;\n    STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,\n                      LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,\n                      LPSPropProblemArray *lppProbs) PURE;\n    STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,\n                         LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;\n    STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,\n                               LPMAPINAMEID **lpppNames) PURE;\n    STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n        /*** IUnknown methods ***/\n#define IMAPIProp_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IMAPIProp_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IMAPIProp_Release(p)                   (p)->lpVtbl->Release(p)\n        /*** IMAPIProp methods ***/\n#define IMAPIProp_GetLastError(p,a,b,c)        (p)->lpVtbl->GetLastError(p,a,b,c)\n#define IMAPIProp_SaveChanges(p,a)             (p)->lpVtbl->SaveChanges(p,a)\n#define IMAPIProp_GetProps(p,a,b,c,d)          (p)->lpVtbl->GetProps(p,a,b,c,d)\n#define IMAPIProp_GetPropList(p,a,b)           (p)->lpVtbl->GetPropList(p,a,b)\n#define IMAPIProp_OpenProperty(p,a,b,c,d,e)    (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)\n#define IMAPIProp_SetProps(p,a,b,c)            (p)->lpVtbl->SetProps(p,a,b,c)\n#define IMAPIProp_DeleteProps(p,a,b)           (p)->lpVtbl->DeleteProps(p,a,b)\n#define IMAPIProp_CopyTo(p,a,b,c,d,e,f,g,h,i)  (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)\n#define IMAPIProp_CopyProps(p,a,b,c,d,e,f,g)   (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)\n#define IMAPIProp_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)\n#define IMAPIProp_GetIDsFromNames(p,a,b,c,d)   (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)\n#endif\n\ntypedef IMAPIProp *LPMAPIPROP;\n\n#define KEEP_OPEN_READONLY      (0x00000001U)\n#define KEEP_OPEN_READWRITE     (0x00000002U)\n#define FORCE_SAVE              (0x00000004U)\n\n/*****************************************************************************\n * IMsgStore interface\n */\n#define INTERFACE IMsgStore\nDECLARE_INTERFACE_(IMsgStore,IMAPIProp)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IMAPIProp methods ***/\n    STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;\n    STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;\n    STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;\n    STDMETHOD(GetPropList)(THIS_ ULONG  ulFlags, LPSPropTagArray *lppPropTagArray) PURE;\n    STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;\n    STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;\n    STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;\n    STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,\n                      LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,\n                      LPSPropProblemArray *lppProbs) PURE;\n    STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,\n                         LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;\n    STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,\n                               LPMAPINAMEID **lpppNames) PURE;\n    STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;\n    /*** IMsgStore methods ***/\n    STDMETHOD(Advise)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulEventMask, LPMAPIADVISESINK lpAdviseSink,\n                      ULONG * lpulConnection) PURE;\n    STDMETHOD(Unadvise)(THIS_ ULONG ulConnection) PURE;\n    STDMETHOD(CompareEntryIDs)(THIS_ ULONG cbEntryID1, LPENTRYID lpEntryID1, ULONG cbEntryID2, LPENTRYID lpEntryID2,\n                ULONG ulFlags, ULONG * lpulResult) PURE;\n    STDMETHOD(OpenEntry)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, LPCIID lpInterface, ULONG ulFlags, ULONG *lpulObjType,\n                LPUNKNOWN *lppUnk) PURE;\n    STDMETHOD(SetReceiveFolder)(THIS_ LPSTR lpszMessageClass, ULONG ulFlags, ULONG cbEntryID, LPENTRYID lpEntryID) PURE;\n    STDMETHOD(GetReceiveFolder)(THIS_ LPSTR lpszMessageClass, ULONG ulFlags, ULONG * lpcbEntryID, LPENTRYID *lppEntryID,\n                LPSTR *lppszExplicitClass) PURE;\n    STDMETHOD(GetReceiveFolderTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE;\n    STDMETHOD(StoreLogoff)(THIS_ ULONG * lpulFlags) PURE;\n    STDMETHOD(AbortSubmit)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulFlags) PURE;\n    STDMETHOD(GetOutgoingQueue)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE;\n    STDMETHOD(SetLockState)(THIS_ LPMESSAGE lpMessage, ULONG ulLockState) PURE;\n    STDMETHOD(FinishedMsg)(THIS_ ULONG ulFlags, ULONG cbEntryID, LPENTRYID lpEntryID) PURE;\n    STDMETHOD(NotifyNewMail)(THIS_ LPNOTIFICATION lpNotification) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n        /*** IUnknown methods ***/\n#define IMsgStore_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IMsgStore_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IMsgStore_Release(p)                   (p)->lpVtbl->Release(p)\n        /*** IMAPIProp methods ***/\n#define IMsgStore_GetLastError(p,a,b,c)        (p)->lpVtbl->GetLastError(p,a,b,c)\n#define IMsgStore_SaveChanges(p,a)             (p)->lpVtbl->SaveChanges(p,a)\n#define IMsgStore_GetProps(p,a,b,c,d)          (p)->lpVtbl->GetProps(p,a,b,c,d)\n#define IMsgStore_GetPropList(p,a,b)           (p)->lpVtbl->GetPropList(p,a,b)\n#define IMsgStore_OpenProperty(p,a,b,c,d,e)    (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)\n#define IMsgStore_SetProps(p,a,b,c)            (p)->lpVtbl->SetProps(p,a,b,c)\n#define IMsgStore_DeleteProps(p,a,b)           (p)->lpVtbl->DeleteProps(p,a,b)\n#define IMsgStore_CopyTo(p,a,b,c,d,e,f,g,h,i)  (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)\n#define IMsgStore_CopyProps(p,a,b,c,d,e,f,g)   (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)\n#define IMsgStore_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)\n#define IMsgStore_GetIDsFromNames(p,a,b,c,d)   (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)\n        /*** IMsgStore methods ***/\n#define IMsgStore_Advise(p,a,b,c,d,e)            (p)->lpVtbl->Advise(p,a,b,c,d,e)\n#define IMsgStore_Unadvise(p,a)                  (p)->lpVtbl->Unadvise(p,a)\n#define IMsgStore_CompareEntryIDs(p,a,b,c,d,e,f) (p)->lpVtbl->CompareEntryIDs(p,a,b,c,d,e,f)\n#define IMsgStore_OpenEntry(p,a,b,c,d,e,f)       (p)->lpVtbl->OpenEntry(p,a,b,c,d,e,f)\n#define IMsgStore_SetReceiveFolder(p,a,b,c,d)    (p)->lpVtbl->SetReceiveFolder(p,a,b,c,d)\n#define IMsgStore_GetReceiveFolder(p,a,b,c,d,e)  (p)->lpVtbl->GetReceiveFolder(p,a,b,c,d,e)\n#define IMsgStore_GetReceiveFolderTable(p,a,b)   (p)->lpVtbl->GetReceiveFolderTable(p,a,b)\n#define IMsgStore_StoreLogoff(p,a)               (p)->lpVtbl->StoreLogoff(p,a)\n#define IMsgStore_AbortSubmit(p,a,b,c)           (p)->lpVtbl->AbortSubmit(p,a,b,c)\n#define IMsgStore_GetOutgoingQueue(p,a,b)        (p)->lpVtbl->GetOutgoingQueue(p,a,b)\n#define IMsgStore_SetLockState(p,a,b)            (p)->lpVtbl->SetLockState(p,a,b)\n#define IMsgStore_FinishedMsg(p,a,b,c)           (p)->lpVtbl->FinishedMsg(p,a,b,c)\n#define IMsgStore_NotifyNewMail(p,a)             (p)->lpVtbl->NotifyNewMail(p,a)\n\n#endif\n\ntypedef IMsgStore *LPMDB;\n\n/*****************************************************************************\n * IMAPIContainer interface\n */\n#define INTERFACE IMAPIContainer\nDECLARE_INTERFACE_(IMAPIContainer,IMAPIProp)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IMAPIProp methods ***/\n    STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;\n    STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;\n    STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;\n    STDMETHOD(GetPropList)(THIS_ ULONG  ulFlags, LPSPropTagArray *lppPropTagArray) PURE;\n    STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;\n    STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;\n    STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;\n    STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,\n                      LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,\n                      LPSPropProblemArray *lppProbs) PURE;\n    STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,\n                         LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;\n    STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,\n                               LPMAPINAMEID **lpppNames) PURE;\n    STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;\n    /*** IMAPIContainer methods ***/\n    STDMETHOD(GetContentsTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE;\n    STDMETHOD(GetHierarchyTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE;\n    STDMETHOD(OpenEntry)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, LPCIID lpInterface, ULONG ulFlags,\n                         ULONG * lpulObjType, LPUNKNOWN * lppUnk) PURE;\n    STDMETHOD(SetSearchCriteria)(THIS_ LPSRestriction lpRestriction, LPENTRYLIST lpContainerList, ULONG ulSearchFlags) PURE;\n    STDMETHOD(GetSearchCriteria)(THIS_ ULONG ulFlags, LPSRestriction * lppRestriction, LPENTRYLIST * lppContainerList,\n                                 ULONG * lpulSearchState) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n        /*** IUnknown methods ***/\n#define IMAPIContainer_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IMAPIContainer_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IMAPIContainer_Release(p)                   (p)->lpVtbl->Release(p)\n        /*** IMAPIProp methods ***/\n#define IMAPIContainer_GetLastError(p,a,b,c)        (p)->lpVtbl->GetLastError(p,a,b,c)\n#define IMAPIContainer_SaveChanges(p,a)             (p)->lpVtbl->SaveChanges(p,a)\n#define IMAPIContainer_GetProps(p,a,b,c,d)          (p)->lpVtbl->GetProps(p,a,b,c,d)\n#define IMAPIContainer_GetPropList(p,a,b)           (p)->lpVtbl->GetPropList(p,a,b)\n#define IMAPIContainer_OpenProperty(p,a,b,c,d,e)    (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)\n#define IMAPIContainer_SetProps(p,a,b,c)            (p)->lpVtbl->SetProps(p,a,b,c)\n#define IMAPIContainer_DeleteProps(p,a,b)           (p)->lpVtbl->DeleteProps(p,a,b)\n#define IMAPIContainer_CopyTo(p,a,b,c,d,e,f,g,h,i)  (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)\n#define IMAPIContainer_CopyProps(p,a,b,c,d,e,f,g)   (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)\n#define IMAPIContainer_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)\n#define IMAPIContainer_GetIDsFromNames(p,a,b,c,d)   (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)\n        /*** IMAPIContainer methods ***/\n#define IMAPIContainer_GetContentsTable(p,a,b)      (p)->lpVtbl->GetContentsTable(p,a,b)\n#define IMAPIContainer_GetHierarchyTable(p,a,b)     (p)->lpVtbl->GetHierarchyTable(p,a,b)\n#define IMAPIContainer_OpenEntry(p,a,b,c,d,e,f)     (p)->lpVtbl->OpenEntry(p,a,b,c,d,e,f)\n#define IMAPIContainer_SetSearchCriteria(p,a,b,c)   (p)->lpVtbl->SetSearchCriteria(p,a,b,c)\n#define IMAPIContainer_GetSearchCriteria(p,a,b,c,d) (p)->lpVtbl->GetSearchCriteria(p,a,b,c,d)\n\n#endif\n\n/*****************************************************************************\n * IMAPIFolder interface\n */\n#define INTERFACE IMAPIFolder\nDECLARE_INTERFACE_(IMAPIFolder,IMAPIContainer)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IMAPIProp methods ***/\n    STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;\n    STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;\n    STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;\n    STDMETHOD(GetPropList)(THIS_ ULONG  ulFlags, LPSPropTagArray *lppPropTagArray) PURE;\n    STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;\n    STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;\n    STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;\n    STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,\n                      LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,\n                      LPSPropProblemArray *lppProbs) PURE;\n    STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,\n                         LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;\n    STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,\n                               LPMAPINAMEID **lpppNames) PURE;\n    STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;\n    /*** IMAPIContainer methods ***/\n    STDMETHOD(GetContentsTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE;\n    STDMETHOD(GetHierarchyTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE;\n    STDMETHOD(OpenEntry)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, LPCIID lpInterface, ULONG ulFlags,\n                         ULONG * lpulObjType, LPUNKNOWN * lppUnk) PURE;\n    STDMETHOD(SetSearchCriteria)(THIS_ LPSRestriction lpRestriction, LPENTRYLIST lpContainerList, ULONG ulSearchFlags) PURE;\n    STDMETHOD(GetSearchCriteria)(THIS_ ULONG ulFlags, LPSRestriction * lppRestriction, LPENTRYLIST * lppContainerList,\n                                 ULONG * lpulSearchState) PURE;\n    /*** IMAPIFolder methods ***/\n    STDMETHOD(CreateMessage)(THIS_ LPCIID lpInterface, ULONG ulFlags, LPMESSAGE *lppMessage) PURE;\n    STDMETHOD(CopyMessages)(THIS_ LPENTRYLIST lpMsgList, LPCIID lpInterface, LPVOID lpDestFolder, ULONG ulUIParam,\n                            LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE;\n    STDMETHOD(DeleteMessages)(THIS_ LPENTRYLIST lpMsgList, ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE;\n    STDMETHOD(CreateFolder)(THIS_ ULONG ulFolderType, LPSTR lpszFolderName, LPSTR lpszFolderComment, LPCIID lpInterface,\n                            ULONG ulFlags, LPMAPIFOLDER lppFolder) PURE;\n    STDMETHOD(CopyFolder)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, LPCIID lpInterface, LPVOID lpDestFolder,\n                          LPSTR lpszNewFolderName, ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE;\n    STDMETHOD(DeleteFolder)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulUIParam, LPMAPIPROGRESS lpProgress,\n                            ULONG ulFlags) PURE;\n    STDMETHOD(SetReadFlags)(THIS_ LPENTRYLIST lpMsgList, ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE;\n    STDMETHOD(GetMessageStatus)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulFlags, ULONG * lpulMessageStatus) PURE;\n    STDMETHOD(SetMessageStatus)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulNewStatus,\n                                ULONG ulNewStatusMask, ULONG * lpulOldStatus) PURE;\n    STDMETHOD(SaveContentsSort)(THIS_ LPSSortOrderSet lpSortCriteria, ULONG ulFlags) PURE;\n    STDMETHOD(EmptyFolder) (THIS_ ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n        /*** IUnknown methods ***/\n#define IMAPIFolder_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IMAPIFolder_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IMAPIFolder_Release(p)                   (p)->lpVtbl->Release(p)\n        /*** IMAPIProp methods ***/\n#define IMAPIFolder_GetLastError(p,a,b,c)        (p)->lpVtbl->GetLastError(p,a,b,c)\n#define IMAPIFolder_SaveChanges(p,a)             (p)->lpVtbl->SaveChanges(p,a)\n#define IMAPIFolder_GetProps(p,a,b,c,d)          (p)->lpVtbl->GetProps(p,a,b,c,d)\n#define IMAPIFolder_GetPropList(p,a,b)           (p)->lpVtbl->GetPropList(p,a,b)\n#define IMAPIFolder_OpenProperty(p,a,b,c,d,e)    (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)\n#define IMAPIFolder_SetProps(p,a,b,c)            (p)->lpVtbl->SetProps(p,a,b,c)\n#define IMAPIFolder_DeleteProps(p,a,b)           (p)->lpVtbl->DeleteProps(p,a,b)\n#define IMAPIFolder_CopyTo(p,a,b,c,d,e,f,g,h,i)  (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)\n#define IMAPIFolder_CopyProps(p,a,b,c,d,e,f,g)   (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)\n#define IMAPIFolder_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)\n#define IMAPIFolder_GetIDsFromNames(p,a,b,c,d)   (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)\n        /*** IMAPIContainer methods ***/\n#define IMAPIFolder_GetContentsTable(p,a,b)      (p)->lpVtbl->GetContentsTable(p,a,b)\n#define IMAPIFolder_GetHierarchyTable(p,a,b)     (p)->lpVtbl->GetHierarchyTable(p,a,b)\n#define IMAPIFolder_OpenEntry(p,a,b,c,d,e,f)     (p)->lpVtbl->OpenEntry(p,a,b,c,d,e,f)\n#define IMAPIFolder_SetSearchCriteria(p,a,b,c)   (p)->lpVtbl->SetSearchCriteria(p,a,b,c)\n#define IMAPIFolder_GetSearchCriteria(p,a,b,c,d) (p)->lpVtbl->GetSearchCriteria(p,a,b,c,d)\n        /*** IMAPIFolder methods ***/\n#define IMAPIFolder_CreateMessage(p,a,b,c)        (p)->lpVtbl->CreateMessage(p,a,b,c)\n#define IMAPIFolder_CopyMessages(p,a,b,c,d,e,f)   (p)->lpVtbl->CopyMessages(p,a,b,c,d,e,f)\n#define IMAPIFolder_DeleteMessages(p,a,b,c,d)     (p)->lpVtbl->DeleteMessages(p,a,b,c,d)\n#define IMAPIFolder_CreateFolder(p,a,b,c,d,e,f)   (p)->lpVtbl->CreateFolder(p,a,b,c,d,e,f)\n#define IMAPIFolder_CopyFolder(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CopyFolder(p,a,b,c,d,e,f,g,h)\n#define IMAPIFolder_DeleteFolder(p,a,b,c,d,e)     (p)->lpVtbl->CreateFolder(p,a,b,c,d,e)\n#define IMAPIFolder_SetReadFlags(p,a,b,c,d)       (p)->lpVtbl->SetReadFlags(p,a,b,c,d)\n#define IMAPIFolder_GetMessageStatus(p,a,b,c,d)   (p)->lpVtbl->GetMessageStatus(p,a,b,c,d)\n#define IMAPIFolder_SetMessageStatus(p,a,b,c,d,e) (p)->lpVtbl->SetMessageStatus(p,a,b,c,d,e)\n#define IMAPIFolder_SaveContentsSort(p,a,b)       (p)->lpVtbl->SaveContentsSort(p,a,b)\n#define IMAPIFolder_EmptyFolder(p,a,b,c)          (p)->lpVtbl->EmptyFolder(p,a,b,c)\n\n#endif\n\ntypedef struct\n{\n    ULONG cb;\n    BYTE  abEntry[MAPI_DIM];\n} FLATENTRY, *LPFLATENTRY;\n\ntypedef struct\n{\n    ULONG cEntries;\n    ULONG cbEntries;\n    BYTE  abEntries[MAPI_DIM];\n} FLATENTRYLIST, *LPFLATENTRYLIST;\n\ntypedef struct\n{\n    ULONG cb;\n    BYTE  ab[MAPI_DIM];\n} MTSID, *LPMTSID;\n\ntypedef struct\n{\n    ULONG cMTSIDs;\n    ULONG cbMTSIDs;\n    BYTE  abMTSIDs[MAPI_DIM];\n} FLATMTSIDLIST, *LPFLATMTSIDLIST;\n\ntypedef struct _ADRENTRY\n{\n    ULONG        ulReserved1;\n    ULONG        cValues;\n    LPSPropValue rgPropVals;\n} ADRENTRY, *LPADRENTRY;\n\ntypedef struct _ADRLIST\n{\n    ULONG    cEntries;\n    ADRENTRY aEntries[MAPI_DIM];\n} ADRLIST, *LPADRLIST;\n\n/*****************************************************************************\n * IMessage interface\n */\n#define INTERFACE IMessage\nDECLARE_INTERFACE_(IMessage,IMAPIProp)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IMAPIProp methods ***/\n    STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;\n    STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;\n    STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;\n    STDMETHOD(GetPropList)(THIS_ ULONG  ulFlags, LPSPropTagArray *lppPropTagArray) PURE;\n    STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;\n    STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;\n    STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;\n    STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,\n                      LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,\n                      LPSPropProblemArray *lppProbs) PURE;\n    STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,\n                         LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;\n    STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,\n                               LPMAPINAMEID **lpppNames) PURE;\n    STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;\n    /*** IMessage methods ***/\n    STDMETHOD(GetAttachmentTable)(THIS_ ULONG ulFlags, LPMAPITABLE *lppTable) PURE;\n    STDMETHOD(OpenAttach)(THIS_ ULONG ulAttachmentNum, LPCIID lpInterface, ULONG ulFlags, LPATTACH *lppAttach) PURE;\n    STDMETHOD(CreateAttach)(THIS_ LPCIID lpInterface, ULONG ulFlags, ULONG *lpulAttachmentNum, LPATTACH *lppAttach) PURE;\n    STDMETHOD(DeleteAttach)(THIS_ ULONG ulAttachmentNum, ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE;\n    STDMETHOD(GetRecipientTable)(THIS_ ULONG ulFlags, LPMAPITABLE *lppTable) PURE;\n    STDMETHOD(ModifyRecipients)(THIS_ ULONG ulFlags, LPADRLIST lpMods) PURE;\n    STDMETHOD(SubmitMessage)(THIS_ ULONG ulFlags) PURE;\n    STDMETHOD(SetReadFlag)(THIS_ ULONG ulFlags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n        /*** IUnknown methods ***/\n#define IMessage_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IMessage_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IMessage_Release(p)                   (p)->lpVtbl->Release(p)\n        /*** IMAPIProp methods ***/\n#define IMessage_GetLastError(p,a,b,c)        (p)->lpVtbl->GetLastError(p,a,b,c)\n#define IMessage_SaveChanges(p,a)             (p)->lpVtbl->SaveChanges(p,a)\n#define IMessage_GetProps(p,a,b,c,d)          (p)->lpVtbl->GetProps(p,a,b,c,d)\n#define IMessage_GetPropList(p,a,b)           (p)->lpVtbl->GetPropList(p,a,b)\n#define IMessage_OpenProperty(p,a,b,c,d,e)    (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)\n#define IMessage_SetProps(p,a,b,c)            (p)->lpVtbl->SetProps(p,a,b,c)\n#define IMessage_DeleteProps(p,a,b)           (p)->lpVtbl->DeleteProps(p,a,b)\n#define IMessage_CopyTo(p,a,b,c,d,e,f,g,h,i)  (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)\n#define IMessage_CopyProps(p,a,b,c,d,e,f,g)   (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)\n#define IMessage_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)\n#define IMessage_GetIDsFromNames(p,a,b,c,d)   (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)\n        /*** IMessage methods ***/\n#define IMessage_GetAttachmentTable(p,a,b)    (p)->lpVtbl->GetAttachmentTable(p,a,b)\n#define IMessage_OpenAttach(p,a,b,c,d)        (p)->lpVtbl->OpenAttach(p,a,b,c,d)\n#define IMessage_CreateAttach(p,a,b,c,d)      (p)->lpVtbl->CreateAttach(p,a,b,c,d)\n#define IMessage_DeleteAttach(p,a,b,c,d)      (p)->lpVtbl->DeleteAttach(p,a,b,c,d)\n#define IMessage_GetRecipientTable(p,a,b)     (p)->lpVtbl->GetRecipientTable(p,a,b)\n#define IMessage_ModifyRecipients(p,a,b)      (p)->lpVtbl->ModifyRecipients(p,a,b)\n#define IMessage_SubmitMessage(p,a)           (p)->lpVtbl->SubmitMessage(p,a)\n#define IMessage_SetReadFlag(p,a)             (p)->lpVtbl->SetReadFlag(p,a)\n\n#endif\n\n/* Message flags (PR_MESSAGE_FLAGS) */\n\n#define MSGFLAG_READ         0x00000001U\n#define MSGFLAG_UNMODIFIED   0x00000002U\n#define MSGFLAG_SUBMIT       0x00000004U\n#define MSGFLAG_UNSENT       0x00000008U\n#define MSGFLAG_HASATTACH    0x00000010U\n#define MSGFLAG_FROMME       0x00000020U\n\n/*****************************************************************************\n * IAttach interface\n */\n#define INTERFACE IAttach\nDECLARE_INTERFACE_(IAttach,IMAPIProp)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IMAPIProp methods ***/\n    STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;\n    STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;\n    STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;\n    STDMETHOD(GetPropList)(THIS_ ULONG  ulFlags, LPSPropTagArray *lppPropTagArray) PURE;\n    STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;\n    STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;\n    STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;\n    STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,\n                      LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,\n                      LPSPropProblemArray *lppProbs) PURE;\n    STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,\n                         LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;\n    STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,\n                               LPMAPINAMEID **lpppNames) PURE;\n    STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n        /*** IUnknown methods ***/\n#define IAttach_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IAttach_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IAttach_Release(p)                   (p)->lpVtbl->Release(p)\n        /*** IMAPIProp methods ***/\n#define IAttach_GetLastError(p,a,b,c)        (p)->lpVtbl->GetLastError(p,a,b,c)\n#define IAttach_SaveChanges(p,a)             (p)->lpVtbl->SaveChanges(p,a)\n#define IAttach_GetProps(p,a,b,c,d)          (p)->lpVtbl->GetProps(p,a,b,c,d)\n#define IAttach_GetPropList(p,a,b)           (p)->lpVtbl->GetPropList(p,a,b)\n#define IAttach_OpenProperty(p,a,b,c,d,e)    (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)\n#define IAttach_SetProps(p,a,b,c)            (p)->lpVtbl->SetProps(p,a,b,c)\n#define IAttach_DeleteProps(p,a,b)           (p)->lpVtbl->DeleteProps(p,a,b)\n#define IAttach_CopyTo(p,a,b,c,d,e,f,g,h,i)  (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)\n#define IAttach_CopyProps(p,a,b,c,d,e,f,g)   (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)\n#define IAttach_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)\n#define IAttach_GetIDsFromNames(p,a,b,c,d)   (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)\n#endif\n\n/* Attachment flags */\n\n#define NO_ATTACHMENT        0x00000000U\n#define ATTACH_BY_VALUE      0x00000001U\n\n#endif /*MAPIDEFS_H*/\n"
  },
  {
    "path": "wine/windows/mapiform.h",
    "content": "/*\n * Copyright (C) 1998 Justin Bradford\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef MAPIFORM_H\n#define MAPIFORM_H\n\n#include <mapidefs.h>\n#include <mapicode.h>\n#include <mapiguid.h>\n#include <mapitags.h>\n\n\ntypedef ULONG HFRMREG;\n#define HFRMREG_DEFAULT            0\n#define HFRMREG_LOCAL              1\n#define HFRMREG_PERSONAL           2\n#define HFRMREG_FOLDER             3\n\ntypedef const char **LPPCSTR;\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nHRESULT     WINAPI MAPIOpenLocalFormContainer(LPVOID*);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* MAPIFORM_H */\n"
  },
  {
    "path": "wine/windows/mapiguid.h",
    "content": "/*\n * Copyright 2004 Jon Griffiths\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef MAPIGUID_H\n#define MAPIGUID_H\n\n#define DEFINE_MAPIGUID(n,l,w1,w2) DEFINE_OLEGUID(n,l,w1,w2)\n\nDEFINE_MAPIGUID(IID_IABContainer,0x2030D,0,0);\nDEFINE_MAPIGUID(IID_IABLogon,0x20314,0,0);\nDEFINE_MAPIGUID(IID_IABProvider,0x20311,0,0);\nDEFINE_MAPIGUID(IID_IAddrBook,0x20309,0,0);\nDEFINE_MAPIGUID(IID_IAttachment,0x20308,0,0);\nDEFINE_MAPIGUID(IID_IDistList,0x2030E,0,0);\nDEFINE_MAPIGUID(IID_IEnumMAPIFormProp,0x20323,0,0);\nDEFINE_MAPIGUID(IID_IMailUser,0x2030A,0,0);\nDEFINE_MAPIGUID(IID_IMAPIAdviseSink,0x20302,0,0);\nDEFINE_MAPIGUID(IID_IMAPIContainer,0x2030B,0,0);\nDEFINE_MAPIGUID(IID_IMAPIControl,0x2031B,0,0);\nDEFINE_MAPIGUID(IID_IMAPIFolder,0x2030C,0,0);\nDEFINE_MAPIGUID(IID_IMAPIForm,0x20327,0,0);\nDEFINE_MAPIGUID(IID_IMAPIFormAdviseSink,0x2032F,0,0);\nDEFINE_MAPIGUID(IID_IMAPIFormContainer,0x2032E,0,0);\nDEFINE_MAPIGUID(IID_IMAPIFormFactory,0x20350,0,0);\nDEFINE_MAPIGUID(IID_IMAPIFormInfo,0x20324,0,0);\nDEFINE_MAPIGUID(IID_IMAPIFormMgr,0x20322,0,0);\nDEFINE_MAPIGUID(IID_IMAPIFormProp,0x2032D,0,0);\nDEFINE_MAPIGUID(IID_IMAPIMessageSite,0x20370,0,0);\nDEFINE_MAPIGUID(IID_IMAPIProgress,0x2031F,0,0);\nDEFINE_MAPIGUID(IID_IMAPIProp,0x20303,0,0);\nDEFINE_MAPIGUID(IID_IMAPIPropData,0x2031A,0,0);\nDEFINE_MAPIGUID(IID_IMAPISession,0x20300,0,0);\nDEFINE_MAPIGUID(IID_IMAPISpoolerInit,0x20317,0,0);\nDEFINE_MAPIGUID(IID_IMAPISpoolerService,0x2031E,0,0);\nDEFINE_MAPIGUID(IID_IMAPISpoolerSession,0x20318,0,0);\nDEFINE_MAPIGUID(IID_IMAPIStatus,0x20305,0,0);\nDEFINE_MAPIGUID(IID_IMAPISup,0x2030F,0,0);\nDEFINE_MAPIGUID(IID_IMAPITable,0x20301,0,0);\nDEFINE_MAPIGUID(IID_IMAPITableData,0x20316,0,0);\nDEFINE_MAPIGUID(IID_IMAPIViewAdviseSink,0x2032B,0,0);\nDEFINE_MAPIGUID(IID_IMAPIViewContext,0x20321,0,0);\nDEFINE_MAPIGUID(IID_IMessage,0x20307,0,0);\nDEFINE_MAPIGUID(IID_IMsgServiceAdmin,0x2031D,0,0);\nDEFINE_MAPIGUID(IID_IMsgStore,0x20306,0,0);\nDEFINE_MAPIGUID(IID_IMSLogon,0x20313,0,0);\nDEFINE_MAPIGUID(IID_IMSProvider,0x20310,0,0);\nDEFINE_MAPIGUID(IID_IPersistMessage,0x2032A,0,0);\nDEFINE_MAPIGUID(IID_IProfAdmin,0x2031C,0,0);\nDEFINE_MAPIGUID(IID_IProfSect,0x20304,0,0);\nDEFINE_MAPIGUID(IID_IProviderAdmin,0x20325,0,0);\nDEFINE_MAPIGUID(IID_ISpoolerHook,0x20320,0,0);\nDEFINE_MAPIGUID(IID_IStreamDocfile,0x2032C,0,0);\nDEFINE_MAPIGUID(IID_IStreamTnef,0x20330,0,0);\nDEFINE_MAPIGUID(IID_ITNEF,0x20319,0,0);\nDEFINE_MAPIGUID(IID_IXPLogon,0x20315,0,0);\nDEFINE_MAPIGUID(IID_IXPProvider,0x20312,0,0);\nDEFINE_MAPIGUID(MUID_PROFILE_INSTANCE,0x20385,0,0);\nDEFINE_MAPIGUID(PS_MAPI,0x20328,0,0);\nDEFINE_MAPIGUID(PS_PUBLIC_STRINGS,0x20329,0,0);\nDEFINE_MAPIGUID(PS_ROUTING_ADDRTYPE,0x20381,0,0);\nDEFINE_MAPIGUID(PS_ROUTING_DISPLAY_NAME,0x20382,0,0);\nDEFINE_MAPIGUID(PS_ROUTING_EMAIL_ADDRESSES,0x20380,0,0);\nDEFINE_MAPIGUID(PS_ROUTING_ENTRYID,0x20383,0,0);\nDEFINE_MAPIGUID(PS_ROUTING_SEARCH_KEY,0x20384,0,0);\n\n#endif/* MAPIGUID_H */\n"
  },
  {
    "path": "wine/windows/mapitags.h",
    "content": "/*\n * MAPI property tag declarations\n *\n * Copyright 2004 Jon Griffiths\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef MAPITAGS_H\n#define MAPITAGS_H\n\n#define FIsTransmittable(t) (PROP_ID(t) < 0x0E00 || PROP_ID(t) >= 0x8000 || \\\n (PROP_ID(t) >= 0x1000 && PROP_ID(t) < 0x6000) || \\\n (PROP_ID(t) >= 0x6800 && PROP_ID(t) < 0x7C00))\n\n#define PR_ACKNOWLEDGEMENT_MODE PROP_TAG(PT_I4,0x01)\n#define PR_ALTERNATE_RECIPIENT_ALLOWED PROP_TAG(PT_BOOLEAN,0x02)\n#define PR_AUTHORIZING_USERS PROP_TAG(PT_BINARY,0x03)\n/* Comment on an automatically forwarded message */\n#define PR_AUTO_FORWARD_COMMENT_W PROP_TAG(PT_UNICODE,0x04)\n#define PR_AUTO_FORWARD_COMMENT_A PROP_TAG(PT_STRING8,0x04)\n#define PR_AUTO_FORWARD_COMMENT   WINELIB_NAME_AW(PR_AUTO_FORWARD_COMMENT_)\n/* Whether a message has been automatically forwarded */\n#define PR_AUTO_FORWARDED PROP_TAG(PT_BOOLEAN,0x05)\n#define PR_CONTENT_CONFIDENTIALITY_ALGORITHM_ID PROP_TAG(PT_BINARY,0x06)\n#define PR_CONTENT_CORRELATOR PROP_TAG(PT_BINARY,0x07)\n#define PR_CONTENT_IDENTIFIER_W PROP_TAG(PT_UNICODE,0x08)\n#define PR_CONTENT_IDENTIFIER_A PROP_TAG(PT_STRING8,0x08)\n#define PR_CONTENT_IDENTIFIER   WINELIB_NAME_AW(PR_CONTENT_IDENTIFIER_)\n/* MIME content length */\n#define PR_CONTENT_LENGTH PROP_TAG(PT_I4,0x09)\n#define PR_CONTENT_RETURN_REQUESTED PROP_TAG(PT_BOOLEAN,0x0A)\n#define PR_CONVERSATION_KEY PROP_TAG(PT_BINARY,0x0B)\n#define PR_CONVERSION_EITS PROP_TAG(PT_BINARY,0x0C)\n#define PR_CONVERSION_WITH_LOSS_PROHIBITED PROP_TAG(PT_BOOLEAN,0x0D)\n#define PR_CONVERTED_EITS PROP_TAG(PT_BINARY,0x0E)\n/* Time to deliver for delayed delivery messages */\n#define PR_DEFERRED_DELIVERY_TIME PROP_TAG(PT_SYSTIME,0x0F)\n#define PR_DELIVER_TIME PROP_TAG(PT_SYSTIME,0x10)\n/* Reason a message was discarded */\n#define PR_DISCARD_REASON PROP_TAG(PT_I4,0x11)\n#define PR_DISCLOSURE_OF_RECIPIENTS PROP_TAG(PT_BOOLEAN,0x12)\n#define PR_DL_EXPANSION_HISTORY PROP_TAG(PT_BINARY,0x13)\n#define PR_DL_EXPANSION_PROHIBITED PROP_TAG(PT_BOOLEAN,0x14)\n#define PR_EXPIRY_TIME PROP_TAG(PT_SYSTIME,0x15)\n#define PR_IMPLICIT_CONVERSION_PROHIBITED PROP_TAG(PT_BOOLEAN,0x16)\n/* Message importance */\n#define PR_IMPORTANCE PROP_TAG(PT_I4,0x17)\n#define PR_IPM_ID PROP_TAG(PT_BINARY,0x18)\n#define PR_LATEST_DELIVERY_TIME PROP_TAG(PT_SYSTIME,0x19)\n#define PR_MESSAGE_CLASS_W PROP_TAG(PT_UNICODE,0x1A)\n#define PR_MESSAGE_CLASS_A PROP_TAG(PT_STRING8,0x1A)\n#define PR_MESSAGE_CLASS   WINELIB_NAME_AW(PR_MESSAGE_CLASS_)\n#define PR_MESSAGE_DELIVERY_ID PROP_TAG(PT_BINARY,0x1B)\n#define PR_MESSAGE_SECURITY_LABEL PROP_TAG(PT_BINARY,0x1E)\n#define PR_OBSOLETED_IPMS PROP_TAG(PT_BINARY,0x1F)\n/* Person a message was originally for */\n#define PR_ORIGINALLY_INTENDED_RECIPIENT_NAME PROP_TAG(PT_BINARY,0x20)\n#define PR_ORIGINAL_EITS PROP_TAG(PT_BINARY,0x21)\n#define PR_ORIGINATOR_CERTIFICATE PROP_TAG(PT_BINARY,0x22)\n#define PR_ORIGINATOR_DELIVERY_REPORT_REQUESTED PROP_TAG(PT_BOOLEAN,0x23)\n/* Address of the message sender */\n#define PR_ORIGINATOR_RETURN_ADDRESS PROP_TAG(PT_BINARY,0x24)\n#define PR_PARENT_KEY PROP_TAG(PT_BINARY,0x25)\n#define PR_PRIORITY PROP_TAG(PT_I4,0x26)\n#define PR_ORIGIN_CHECK PROP_TAG(PT_BINARY,0x27)\n#define PR_PROOF_OF_SUBMISSION_REQUESTED PROP_TAG(PT_BOOLEAN,0x28)\n/* Whether a read receipt is desired */\n#define PR_READ_RECEIPT_REQUESTED PROP_TAG(PT_BOOLEAN,0x29)\n/* Time a message was received */\n#define PR_RECEIPT_TIME PROP_TAG(PT_SYSTIME,0x2A)\n#define PR_RECIPIENT_REASSIGNMENT_PROHIBITED PROP_TAG(PT_BOOLEAN,0x2B)\n#define PR_REDIRECTION_HISTORY PROP_TAG(PT_BINARY,0x2C)\n#define PR_RELATED_IPMS PROP_TAG(PT_BINARY,0x2D)\n/* Sensitivity of the original message */\n#define PR_ORIGINAL_SENSITIVITY PROP_TAG(PT_I4,0x2E)\n#define PR_LANGUAGES_W PROP_TAG(PT_UNICODE,0x2F)\n#define PR_LANGUAGES_A PROP_TAG(PT_STRING8,0x2F)\n#define PR_LANGUAGES   WINELIB_NAME_AW(PR_LANGUAGES_)\n#define PR_REPLY_TIME PROP_TAG(PT_SYSTIME,0x30)\n#define PR_REPORT_TAG PROP_TAG(PT_BINARY,0x31)\n#define PR_REPORT_TIME PROP_TAG(PT_SYSTIME,0x32)\n#define PR_RETURNED_IPM PROP_TAG(PT_BOOLEAN,0x33)\n#define PR_SECURITY PROP_TAG(PT_I4,0x34)\n#define PR_INCOMPLETE_COPY PROP_TAG(PT_BOOLEAN,0x35)\n#define PR_SENSITIVITY PROP_TAG(PT_I4,0x36)\n/* The message subject */\n#define PR_SUBJECT_W PROP_TAG(PT_UNICODE,0x37)\n#define PR_SUBJECT_A PROP_TAG(PT_STRING8,0x37)\n#define PR_SUBJECT   WINELIB_NAME_AW(PR_SUBJECT_)\n#define PR_SUBJECT_IPM PROP_TAG(PT_BINARY,0x38)\n#define PR_CLIENT_SUBMIT_TIME PROP_TAG(PT_SYSTIME,0x39)\n#define PR_REPORT_NAME_W PROP_TAG(PT_UNICODE,0x3A)\n#define PR_REPORT_NAME_A PROP_TAG(PT_STRING8,0x3A)\n#define PR_REPORT_NAME   WINELIB_NAME_AW(PR_REPORT_NAME_)\n#define PR_SENT_REPRESENTING_SEARCH_KEY PROP_TAG(PT_BINARY,0x3B)\n#define PR_X400_CONTENT_TYPE PROP_TAG(PT_BINARY,0x3C)\n#define PR_SUBJECT_PREFIX_W PROP_TAG(PT_UNICODE,0x3D)\n#define PR_SUBJECT_PREFIX_A PROP_TAG(PT_STRING8,0x3D)\n#define PR_SUBJECT_PREFIX   WINELIB_NAME_AW(PR_SUBJECT_PREFIX_)\n#define PR_NON_RECEIPT_REASON PROP_TAG(PT_I4,0x3E)\n#define PR_RECEIVED_BY_ENTRYID PROP_TAG(PT_BINARY,0x3F)\n/* Received by: entry */\n#define PR_RECEIVED_BY_NAME_W PROP_TAG(PT_UNICODE,0x40)\n#define PR_RECEIVED_BY_NAME_A PROP_TAG(PT_STRING8,0x40)\n#define PR_RECEIVED_BY_NAME   WINELIB_NAME_AW(PR_RECEIVED_BY_NAME_)\n#define PR_SENT_REPRESENTING_ENTRYID PROP_TAG(PT_BINARY,0x41)\n#define PR_SENT_REPRESENTING_NAME_W PROP_TAG(PT_UNICODE,0x42)\n#define PR_SENT_REPRESENTING_NAME_A PROP_TAG(PT_STRING8,0x42)\n#define PR_SENT_REPRESENTING_NAME   WINELIB_NAME_AW(PR_SENT_REPRESENTING_NAME_)\n#define PR_RCVD_REPRESENTING_ENTRYID PROP_TAG(PT_BINARY,0x43)\n#define PR_RCVD_REPRESENTING_NAME_W PROP_TAG(PT_UNICODE,0x44)\n#define PR_RCVD_REPRESENTING_NAME_A PROP_TAG(PT_STRING8,0x44)\n#define PR_RCVD_REPRESENTING_NAME   WINELIB_NAME_AW(PR_RCVD_REPRESENTING_NAME_)\n#define PR_REPORT_ENTRYID PROP_TAG(PT_BINARY,0x45)\n#define PR_READ_RECEIPT_ENTRYID PROP_TAG(PT_BINARY,0x46)\n#define PR_MESSAGE_SUBMISSION_ID PROP_TAG(PT_BINARY,0x47)\n#define PR_PROVIDER_SUBMIT_TIME PROP_TAG(PT_SYSTIME,0x48)\n/* Subject of the original message */\n#define PR_ORIGINAL_SUBJECT_W PROP_TAG(PT_UNICODE,0x49)\n#define PR_ORIGINAL_SUBJECT_A PROP_TAG(PT_STRING8,0x49)\n#define PR_ORIGINAL_SUBJECT   WINELIB_NAME_AW(PR_ORIGINAL_SUBJECT_)\n#define PR_DISC_VAL PROP_TAG(PT_BOOLEAN,0x4A)\n#define PR_ORIG_MESSAGE_CLASS_W PROP_TAG(PT_UNICODE,0x4B)\n#define PR_ORIG_MESSAGE_CLASS_A PROP_TAG(PT_STRING8,0x4B)\n#define PR_ORIG_MESSAGE_CLASS   WINELIB_NAME_AW(PR_ORIG_MESSAGE_CLASS_)\n#define PR_ORIGINAL_AUTHOR_ENTRYID PROP_TAG(PT_BINARY,0x4C)\n/* Author of the original message */\n#define PR_ORIGINAL_AUTHOR_NAME_W PROP_TAG(PT_UNICODE,0x4D)\n#define PR_ORIGINAL_AUTHOR_NAME_A PROP_TAG(PT_STRING8,0x4D)\n#define PR_ORIGINAL_AUTHOR_NAME   WINELIB_NAME_AW(PR_ORIGINAL_AUTHOR_NAME_)\n/* Time the original message was submitted */\n#define PR_ORIGINAL_SUBMIT_TIME PROP_TAG(PT_SYSTIME,0x4E)\n#define PR_REPLY_RECIPIENT_ENTRIES PROP_TAG(PT_BINARY,0x4F)\n#define PR_REPLY_RECIPIENT_NAMES_W PROP_TAG(PT_UNICODE,0x50)\n#define PR_REPLY_RECIPIENT_NAMES_A PROP_TAG(PT_STRING8,0x50)\n#define PR_REPLY_RECIPIENT_NAMES   WINELIB_NAME_AW(PR_REPLY_RECIPIENT_NAMES_)\n#define PR_RECEIVED_BY_SEARCH_KEY PROP_TAG(PT_BINARY,0x51)\n#define PR_RCVD_REPRESENTING_SEARCH_KEY PROP_TAG(PT_BINARY,0x52)\n#define PR_READ_RECEIPT_SEARCH_KEY PROP_TAG(PT_BINARY,0x53)\n#define PR_REPORT_SEARCH_KEY PROP_TAG(PT_BINARY,0x54)\n#define PR_ORIGINAL_DELIVERY_TIME PROP_TAG(PT_SYSTIME,0x55)\n#define PR_ORIGINAL_AUTHOR_SEARCH_KEY PROP_TAG(PT_BINARY,0x56)\n#define PR_MESSAGE_TO_ME PROP_TAG(PT_BOOLEAN,0x57)\n#define PR_MESSAGE_CC_ME PROP_TAG(PT_BOOLEAN,0x58)\n#define PR_MESSAGE_RECIP_ME PROP_TAG(PT_BOOLEAN,0x59)\n/* Sender of the original message */\n#define PR_ORIGINAL_SENDER_NAME_W PROP_TAG(PT_UNICODE,0x5A)\n#define PR_ORIGINAL_SENDER_NAME_A PROP_TAG(PT_STRING8,0x5A)\n#define PR_ORIGINAL_SENDER_NAME   WINELIB_NAME_AW(PR_ORIGINAL_SENDER_NAME_)\n#define PR_ORIGINAL_SENDER_ENTRYID PROP_TAG(PT_BINARY,0x5B)\n#define PR_ORIGINAL_SENDER_SEARCH_KEY PROP_TAG(PT_BINARY,0x5C)\n#define PR_ORIGINAL_SENT_REPRESENTING_NAME_W PROP_TAG(PT_UNICODE,0x5D)\n#define PR_ORIGINAL_SENT_REPRESENTING_NAME_A PROP_TAG(PT_STRING8,0x5D)\n#define PR_ORIGINAL_SENT_REPRESENTING_NAME   WINELIB_NAME_AW(PR_ORIGINAL_SENT_REPRESENTING_NAME_)\n#define PR_ORIGINAL_SENT_REPRESENTING_ENTRYID PROP_TAG(PT_BINARY,0x5E)\n#define PR_ORIGINAL_SENT_REPRESENTING_SEARCH_KEY PROP_TAG(PT_BINARY,0x5F)\n#define PR_START_DATE PROP_TAG(PT_SYSTIME,0x60)\n#define PR_END_DATE PROP_TAG(PT_SYSTIME,0x61)\n#define PR_OWNER_APPT_ID PROP_TAG(PT_I4,0x62)\n/* Whether a response to the message is desired */\n#define PR_RESPONSE_REQUESTED PROP_TAG(PT_BOOLEAN,0x63)\n#define PR_SENT_REPRESENTING_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x64)\n#define PR_SENT_REPRESENTING_ADDRTYPE_A PROP_TAG(PT_STRING8,0x64)\n#define PR_SENT_REPRESENTING_ADDRTYPE   WINELIB_NAME_AW(PR_SENT_REPRESENTING_ADDRTYPE_)\n#define PR_SENT_REPRESENTING_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x65)\n#define PR_SENT_REPRESENTING_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x65)\n#define PR_SENT_REPRESENTING_EMAIL_ADDRESS   WINELIB_NAME_AW(PR_SENT_REPRESENTING_EMAIL_ADDRESS_)\n#define PR_ORIGINAL_SENDER_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x66)\n#define PR_ORIGINAL_SENDER_ADDRTYPE_A PROP_TAG(PT_STRING8,0x66)\n#define PR_ORIGINAL_SENDER_ADDRTYPE   WINELIB_NAME_AW(PR_ORIGINAL_SENDER_ADDRTYPE_)\n/* Email of the original message sender */\n#define PR_ORIGINAL_SENDER_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x67)\n#define PR_ORIGINAL_SENDER_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x67)\n#define PR_ORIGINAL_SENDER_EMAIL_ADDRESS   WINELIB_NAME_AW(PR_ORIGINAL_SENDER_EMAIL_ADDRESS_)\n#define PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x68)\n#define PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE_A PROP_TAG(PT_STRING8,0x68)\n#define PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE   WINELIB_NAME_AW(PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE_)\n#define PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x69)\n#define PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x69)\n#define PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS   WINELIB_NAME_AW(PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS_)\n#define PR_CONVERSATION_TOPIC_W PROP_TAG(PT_UNICODE,0x70)\n#define PR_CONVERSATION_TOPIC_A PROP_TAG(PT_STRING8,0x70)\n#define PR_CONVERSATION_TOPIC   WINELIB_NAME_AW(PR_CONVERSATION_TOPIC_)\n#define PR_CONVERSATION_INDEX PROP_TAG(PT_BINARY,0x71)\n#define PR_ORIGINAL_DISPLAY_BCC_W PROP_TAG(PT_UNICODE,0x72)\n#define PR_ORIGINAL_DISPLAY_BCC_A PROP_TAG(PT_STRING8,0x72)\n#define PR_ORIGINAL_DISPLAY_BCC   WINELIB_NAME_AW(PR_ORIGINAL_DISPLAY_BCC_)\n#define PR_ORIGINAL_DISPLAY_CC_W PROP_TAG(PT_UNICODE,0x73)\n#define PR_ORIGINAL_DISPLAY_CC_A PROP_TAG(PT_STRING8,0x73)\n#define PR_ORIGINAL_DISPLAY_CC   WINELIB_NAME_AW(PR_ORIGINAL_DISPLAY_CC_)\n#define PR_ORIGINAL_DISPLAY_TO_W PROP_TAG(PT_UNICODE,0x74)\n#define PR_ORIGINAL_DISPLAY_TO_A PROP_TAG(PT_STRING8,0x74)\n#define PR_ORIGINAL_DISPLAY_TO   WINELIB_NAME_AW(PR_ORIGINAL_DISPLAY_TO_)\n#define PR_RECEIVED_BY_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x75)\n#define PR_RECEIVED_BY_ADDRTYPE_A PROP_TAG(PT_STRING8,0x75)\n#define PR_RECEIVED_BY_ADDRTYPE   WINELIB_NAME_AW(PR_RECEIVED_BY_ADDRTYPE_)\n#define PR_RECEIVED_BY_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x76)\n#define PR_RECEIVED_BY_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x76)\n#define PR_RECEIVED_BY_EMAIL_ADDRESS   WINELIB_NAME_AW(PR_RECEIVED_BY_EMAIL_ADDRESS_)\n#define PR_RCVD_REPRESENTING_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x77)\n#define PR_RCVD_REPRESENTING_ADDRTYPE_A PROP_TAG(PT_STRING8,0x77)\n#define PR_RCVD_REPRESENTING_ADDRTYPE   WINELIB_NAME_AW(PR_RCVD_REPRESENTING_ADDRTYPE_)\n#define PR_RCVD_REPRESENTING_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x78)\n#define PR_RCVD_REPRESENTING_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x78)\n#define PR_RCVD_REPRESENTING_EMAIL_ADDRESS   WINELIB_NAME_AW(PR_RCVD_REPRESENTING_EMAIL_ADDRESS_)\n#define PR_ORIGINAL_AUTHOR_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x79)\n#define PR_ORIGINAL_AUTHOR_ADDRTYPE_A PROP_TAG(PT_STRING8,0x79)\n#define PR_ORIGINAL_AUTHOR_ADDRTYPE   WINELIB_NAME_AW(PR_ORIGINAL_AUTHOR_ADDRTYPE_)\n#define PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x7A)\n#define PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x7A)\n#define PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS   WINELIB_NAME_AW(PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS_)\n#define PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x7B)\n#define PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE_A PROP_TAG(PT_STRING8,0x7B)\n#define PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE   WINELIB_NAME_AW(PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE_)\n#define PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x7C)\n#define PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x7C)\n#define PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS   WINELIB_NAME_AW(PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS_)\n#define PR_TRANSPORT_MESSAGE_HEADERS_W PROP_TAG(PT_UNICODE,0x7D)\n#define PR_TRANSPORT_MESSAGE_HEADERS_A PROP_TAG(PT_STRING8,0x7D)\n#define PR_TRANSPORT_MESSAGE_HEADERS   WINELIB_NAME_AW(PR_TRANSPORT_MESSAGE_HEADERS_)\n#define PR_DELEGATION PROP_TAG(PT_BINARY,0x7E)\n#define PR_TNEF_CORRELATION_KEY PROP_TAG(PT_BINARY,0x7F)\n#define PR_BODY_W PROP_TAG(PT_UNICODE,0x1000)\n#define PR_BODY_A PROP_TAG(PT_STRING8,0x1000)\n#define PR_BODY   WINELIB_NAME_AW(PR_BODY_)\n#define PR_REPORT_TEXT_W PROP_TAG(PT_UNICODE,0x1001)\n#define PR_REPORT_TEXT_A PROP_TAG(PT_STRING8,0x1001)\n#define PR_REPORT_TEXT   WINELIB_NAME_AW(PR_REPORT_TEXT_)\n#define PR_ORIGINATOR_AND_DL_EXPANSION_HISTORY PROP_TAG(PT_BINARY,0x1002)\n#define PR_REPORTING_DL_NAME PROP_TAG(PT_BINARY,0x1003)\n#define PR_REPORTING_MTA_CERTIFICATE PROP_TAG(PT_BINARY,0x1004)\n#define PR_RTF_SYNC_BODY_CRC PROP_TAG(PT_I4,0x1006)\n#define PR_RTF_SYNC_BODY_COUNT PROP_TAG(PT_I4,0x1007)\n#define PR_RTF_SYNC_BODY_TAG_W PROP_TAG(PT_UNICODE,0x1008)\n#define PR_RTF_SYNC_BODY_TAG_A PROP_TAG(PT_STRING8,0x1008)\n#define PR_RTF_SYNC_BODY_TAG   WINELIB_NAME_AW(PR_RTF_SYNC_BODY_TAG_)\n#define PR_RTF_COMPRESSED PROP_TAG(PT_BINARY,0x1009)\n#define PR_RTF_SYNC_PREFIX_COUNT PROP_TAG(PT_I4,0x1010)\n#define PR_RTF_SYNC_TRAILING_COUNT PROP_TAG(PT_I4,0x1011)\n#define PR_ORIGINALLY_INTENDED_RECIP_ENTRYID PROP_TAG(PT_BINARY,0x1012)\n#define PR_CONTENT_INTEGRITY_CHECK PROP_TAG(PT_BINARY,0x0C00)\n#define PR_EXPLICIT_CONVERSION PROP_TAG(PT_I4,0x0C01)\n#define PR_IPM_RETURN_REQUESTED PROP_TAG(PT_BOOLEAN,0x0C02)\n#define PR_MESSAGE_TOKEN PROP_TAG(PT_BINARY,0x0C03)\n#define PR_NDR_REASON_CODE PROP_TAG(PT_I4,0x0C04)\n#define PR_NDR_DIAG_CODE PROP_TAG(PT_I4,0x0C05)\n#define PR_NON_RECEIPT_NOTIFICATION_REQUESTED PROP_TAG(PT_BOOLEAN,0x0C06)\n#define PR_DELIVERY_POINT PROP_TAG(PT_I4,0x0C07)\n#define PR_ORIGINATOR_NON_DELIVERY_REPORT_REQUESTED PROP_TAG(PT_BOOLEAN,0x0C08)\n#define PR_ORIGINATOR_REQUESTED_ALTERNATE_RECIPIENT PROP_TAG(PT_BINARY,0x0C09)\n#define PR_PHYSICAL_DELIVERY_BUREAU_FAX_DELIVERY PROP_TAG(PT_BOOLEAN,0x0C0A)\n#define PR_PHYSICAL_DELIVERY_MODE PROP_TAG(PT_I4,0x0C0B)\n#define PR_PHYSICAL_DELIVERY_REPORT_REQUEST PROP_TAG(PT_I4,0x0C0C)\n#define PR_PHYSICAL_FORWARDING_ADDRESS PROP_TAG(PT_BINARY,0x0C0D)\n#define PR_PHYSICAL_FORWARDING_ADDRESS_REQUESTED PROP_TAG(PT_BOOLEAN,0x0C0E)\n#define PR_PHYSICAL_FORWARDING_PROHIBITED PROP_TAG(PT_BOOLEAN,0x0C0F)\n#define PR_PHYSICAL_RENDITION_ATTRIBUTES PROP_TAG(PT_BINARY,0x0C10)\n#define PR_PROOF_OF_DELIVERY PROP_TAG(PT_BINARY,0x0C11)\n#define PR_PROOF_OF_DELIVERY_REQUESTED PROP_TAG(PT_BOOLEAN,0x0C12)\n#define PR_RECIPIENT_CERTIFICATE PROP_TAG(PT_BINARY,0x0C13)\n#define PR_RECIPIENT_NUMBER_FOR_ADVICE_W PROP_TAG(PT_UNICODE,0x0C14)\n#define PR_RECIPIENT_NUMBER_FOR_ADVICE_A PROP_TAG(PT_STRING8,0x0C14)\n#define PR_RECIPIENT_NUMBER_FOR_ADVICE   WINELIB_NAME_AW(PR_RECIPIENT_NUMBER_FOR_ADVICE_)\n#define PR_RECIPIENT_TYPE PROP_TAG(PT_I4,0x0C15)\n#define PR_REGISTERED_MAIL_TYPE PROP_TAG(PT_I4,0x0C16)\n#define PR_REPLY_REQUESTED PROP_TAG(PT_BOOLEAN,0x0C17)\n#define PR_REQUESTED_DELIVERY_METHOD PROP_TAG(PT_I4,0x0C18)\n#define PR_SENDER_ENTRYID PROP_TAG(PT_BINARY,0x0C19)\n#define PR_SENDER_NAME_W PROP_TAG(PT_UNICODE,0x0C1A)\n#define PR_SENDER_NAME_A PROP_TAG(PT_STRING8,0x0C1A)\n#define PR_SENDER_NAME   WINELIB_NAME_AW(PR_SENDER_NAME_)\n#define PR_SUPPLEMENTARY_INFO_W PROP_TAG(PT_UNICODE,0x0C1B)\n#define PR_SUPPLEMENTARY_INFO_A PROP_TAG(PT_STRING8,0x0C1B)\n#define PR_SUPPLEMENTARY_INFO   WINELIB_NAME_AW(PR_SUPPLEMENTARY_INFO_)\n#define PR_TYPE_OF_MTS_USER PROP_TAG(PT_I4,0x0C1C)\n#define PR_SENDER_SEARCH_KEY PROP_TAG(PT_BINARY,0x0C1D)\n#define PR_SENDER_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x0C1E)\n#define PR_SENDER_ADDRTYPE_A PROP_TAG(PT_STRING8,0x0C1E)\n#define PR_SENDER_ADDRTYPE   WINELIB_NAME_AW(PR_SENDER_ADDRTYPE_)\n#define PR_SENDER_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x0C1F)\n#define PR_SENDER_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x0C1F)\n#define PR_SENDER_EMAIL_ADDRESS   WINELIB_NAME_AW(PR_SENDER_EMAIL_ADDRESS_)\n#define PR_CURRENT_VERSION PROP_TAG(PT_I8,0x0E00)\n#define PR_DELETE_AFTER_SUBMIT PROP_TAG(PT_BOOLEAN,0x0E01)\n#define PR_DISPLAY_BCC_W PROP_TAG(PT_UNICODE,0x0E02)\n#define PR_DISPLAY_BCC_A PROP_TAG(PT_STRING8,0x0E02)\n#define PR_DISPLAY_BCC   WINELIB_NAME_AW(PR_DISPLAY_BCC_)\n#define PR_DISPLAY_CC_W PROP_TAG(PT_UNICODE,0x0E03)\n#define PR_DISPLAY_CC_A PROP_TAG(PT_STRING8,0x0E03)\n#define PR_DISPLAY_CC   WINELIB_NAME_AW(PR_DISPLAY_CC_)\n#define PR_DISPLAY_TO_W PROP_TAG(PT_UNICODE,0x0E04)\n#define PR_DISPLAY_TO_A PROP_TAG(PT_STRING8,0x0E04)\n#define PR_DISPLAY_TO   WINELIB_NAME_AW(PR_DISPLAY_TO_)\n#define PR_PARENT_DISPLAY_W PROP_TAG(PT_UNICODE,0x0E05)\n#define PR_PARENT_DISPLAY_A PROP_TAG(PT_STRING8,0x0E05)\n#define PR_PARENT_DISPLAY   WINELIB_NAME_AW(PR_PARENT_DISPLAY_)\n#define PR_MESSAGE_DELIVERY_TIME PROP_TAG(PT_SYSTIME,0x0E06)\n#define PR_MESSAGE_FLAGS PROP_TAG(PT_I4,0x0E07)\n#define PR_MESSAGE_SIZE PROP_TAG(PT_I4,0x0E08)\n#define PR_PARENT_ENTRYID PROP_TAG(PT_BINARY,0x0E09)\n#define PR_SENTMAIL_ENTRYID PROP_TAG(PT_BINARY,0x0E0A)\n#define PR_CORRELATE PROP_TAG(PT_BOOLEAN,0x0E0C)\n#define PR_CORRELATE_MTSID PROP_TAG(PT_BINARY,0x0E0D)\n#define PR_DISCRETE_VALUES PROP_TAG(PT_BOOLEAN,0x0E0E)\n#define PR_RESPONSIBILITY PROP_TAG(PT_BOOLEAN,0x0E0F)\n#define PR_SPOOLER_STATUS PROP_TAG(PT_I4,0x0E10)\n#define PR_TRANSPORT_STATUS PROP_TAG(PT_I4,0x0E11)\n#define PR_MESSAGE_RECIPIENTS PROP_TAG(PT_OBJECT,0x0E12)\n#define PR_MESSAGE_ATTACHMENTS PROP_TAG(PT_OBJECT,0x0E13)\n#define PR_SUBMIT_FLAGS PROP_TAG(PT_I4,0x0E14)\n#define PR_RECIPIENT_STATUS PROP_TAG(PT_I4,0x0E15)\n#define PR_TRANSPORT_KEY PROP_TAG(PT_I4,0x0E16)\n#define PR_MSG_STATUS PROP_TAG(PT_I4,0x0E17)\n#define PR_MESSAGE_DOWNLOAD_TIME PROP_TAG(PT_I4,0x0E18)\n#define PR_CREATION_VERSION PROP_TAG(PT_I8,0x0E19)\n#define PR_MODIFY_VERSION PROP_TAG(PT_I8,0x0E1A)\n#define PR_HASATTACH PROP_TAG(PT_BOOLEAN,0x0E1B)\n#define PR_BODY_CRC PROP_TAG(PT_I4, 0x0E1C)\n#define PR_NORMALIZED_SUBJECT_W PROP_TAG(PT_UNICODE,0x0E1D)\n#define PR_NORMALIZED_SUBJECT_A PROP_TAG(PT_STRING8,0x0E1D)\n#define PR_NORMALIZED_SUBJECT   WINELIB_NAME_AW(PR_NORMALIZED_SUBJECT_)\n#define PR_RTF_IN_SYNC PROP_TAG(PT_BOOLEAN,0x0E1F)\n#define PR_ATTACH_SIZE PROP_TAG(PT_I4,0x0E20)\n#define PR_ATTACH_NUM PROP_TAG(PT_I4,0x0E21)\n#define PR_PREPROCESS PROP_TAG(PT_BOOLEAN,0x0E22)\n#define PR_ORIGINATING_MTA_CERTIFICATE PROP_TAG(PT_BINARY,0x0E25)\n#define PR_PROOF_OF_SUBMISSION PROP_TAG(PT_BINARY,0x0E26)\n/* A unique identifier for editing the properties of a MAPI object */\n#define PR_ENTRYID PROP_TAG(PT_BINARY,0x0FFF)\n/* The type of an object */\n#define PR_OBJECT_TYPE PROP_TAG(PT_I4,0x0FFE)\n#define PR_ICON PROP_TAG(PT_BINARY,0x0FFD)\n#define PR_MINI_ICON PROP_TAG(PT_BINARY,0x0FFC)\n#define PR_STORE_ENTRYID PROP_TAG(PT_BINARY,0x0FFB)\n#define PR_STORE_RECORD_KEY PROP_TAG(PT_BINARY,0x0FFA)\n/* Binary identifier for an individual object */\n#define PR_RECORD_KEY PROP_TAG(PT_BINARY,0x0FF9)\n#define PR_MAPPING_SIGNATURE PROP_TAG(PT_BINARY,0x0FF8)\n#define PR_ACCESS_LEVEL PROP_TAG(PT_I4,0x0FF7)\n/* The primary key of a column in a table */\n#define PR_INSTANCE_KEY PROP_TAG(PT_BINARY,0x0FF6)\n#define PR_ROW_TYPE PROP_TAG(PT_I4,0x0FF5)\n#define PR_ACCESS PROP_TAG(PT_I4,0x0FF4)\n#define PR_ROWID PROP_TAG(PT_I4,0x3000)\n/* The name to display for a given MAPI object */\n#define PR_DISPLAY_NAME_W PROP_TAG(PT_UNICODE,0x3001)\n#define PR_DISPLAY_NAME_A PROP_TAG(PT_STRING8,0x3001)\n#define PR_DISPLAY_NAME   WINELIB_NAME_AW(PR_DISPLAY_NAME_)\n#define PR_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x3002)\n#define PR_ADDRTYPE_A PROP_TAG(PT_STRING8,0x3002)\n#define PR_ADDRTYPE   WINELIB_NAME_AW(PR_ADDRTYPE_)\n/* An email address */\n#define PR_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x3003)\n#define PR_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x3003)\n#define PR_EMAIL_ADDRESS   WINELIB_NAME_AW(PR_EMAIL_ADDRESS_)\n/* A comment field */\n#define PR_COMMENT_W PROP_TAG(PT_UNICODE,0x3004)\n#define PR_COMMENT_A PROP_TAG(PT_STRING8,0x3004)\n#define PR_COMMENT   WINELIB_NAME_AW(PR_COMMENT_)\n#define PR_DEPTH PROP_TAG(PT_I4,0x3005)\n/* Provider-defined display name for a service provider */\n#define PR_PROVIDER_DISPLAY_W PROP_TAG(PT_UNICODE,0x3006)\n#define PR_PROVIDER_DISPLAY_A PROP_TAG(PT_STRING8,0x3006)\n#define PR_PROVIDER_DISPLAY   WINELIB_NAME_AW(PR_PROVIDER_DISPLAY_)\n/* The time an object was created */\n#define PR_CREATION_TIME PROP_TAG(PT_SYSTIME,0x3007)\n/* The time an object was last modified */\n#define PR_LAST_MODIFICATION_TIME PROP_TAG(PT_SYSTIME,0x3008)\n/* Flags describing a service provider, message service, or status object */\n#define PR_RESOURCE_FLAGS PROP_TAG(PT_I4,0x3009)\n/* The name of a provider dll, minus any \"32\" suffix and \".dll\" */\n#define PR_PROVIDER_DLL_NAME_W PROP_TAG(PT_UNICODE,0x300A)\n#define PR_PROVIDER_DLL_NAME_A PROP_TAG(PT_STRING8,0x300A)\n#define PR_PROVIDER_DLL_NAME   WINELIB_NAME_AW(PR_PROVIDER_DLL_NAME_)\n#define PR_SEARCH_KEY PROP_TAG(PT_BINARY,0x300B)\n#define PR_PROVIDER_UID PROP_TAG(PT_BINARY,0x300C)\n#define PR_PROVIDER_ORDINAL PROP_TAG(PT_I4,0x300D)\n#define PR_FORM_VERSION_W PROP_TAG(PT_UNICODE,0x3301)\n#define PR_FORM_VERSION_A PROP_TAG(PT_STRING8,0x3301)\n#define PR_FORM_VERSION   WINELIB_NAME_AW(PR_FORM_VERSION_)\n#define PR_FORM_CLSID PROP_TAG(PT_CLSID,0x3302)\n#define PR_FORM_CONTACT_NAME_W PROP_TAG(PT_UNICODE,0x3303)\n#define PR_FORM_CONTACT_NAME_A PROP_TAG(PT_STRING8,0x3303)\n#define PR_FORM_CONTACT_NAME   WINELIB_NAME_AW(PR_FORM_CONTACT_NAME_)\n#define PR_FORM_CATEGORY_W PROP_TAG(PT_UNICODE,0x3304)\n#define PR_FORM_CATEGORY_A PROP_TAG(PT_STRING8,0x3304)\n#define PR_FORM_CATEGORY   WINELIB_NAME_AW(PR_FORM_CATEGORY_)\n#define PR_FORM_CATEGORY_SUB_W PROP_TAG(PT_UNICODE,0x3305)\n#define PR_FORM_CATEGORY_SUB_A PROP_TAG(PT_STRING8,0x3305)\n#define PR_FORM_CATEGORY_SUB   WINELIB_NAME_AW(PR_FORM_CATEGORY_SUB_)\n#define PR_FORM_HOST_MAP PROP_TAG(PT_MV_LONG,0x3306)\n#define PR_FORM_HIDDEN PROP_TAG(PT_BOOLEAN,0x3307)\n#define PR_FORM_DESIGNER_NAME_W PROP_TAG(PT_UNICODE,0x3308)\n#define PR_FORM_DESIGNER_NAME_A PROP_TAG(PT_STRING8,0x3308)\n#define PR_FORM_DESIGNER_NAME   WINELIB_NAME_AW(PR_FORM_DESIGNER_NAME_)\n#define PR_FORM_DESIGNER_GUID PROP_TAG(PT_CLSID,0x3309)\n#define PR_FORM_MESSAGE_BEHAVIOR PROP_TAG(PT_I4,0x330A)\n/* Is this row the default message store? */\n#define PR_DEFAULT_STORE PROP_TAG(PT_BOOLEAN,0x3400)\n#define PR_STORE_SUPPORT_MASK PROP_TAG(PT_I4,0x340D)\n#define PR_STORE_STATE PROP_TAG(PT_I4,0x340E)\n#define PR_IPM_SUBTREE_SEARCH_KEY PROP_TAG(PT_BINARY,0x3410)\n#define PR_IPM_OUTBOX_SEARCH_KEY PROP_TAG(PT_BINARY,0x3411)\n#define PR_IPM_WASTEBASKET_SEARCH_KEY PROP_TAG(PT_BINARY,0x3412)\n#define PR_IPM_SENTMAIL_SEARCH_KEY PROP_TAG(PT_BINARY,0x3413)\n/* Provider-defined message store type */\n#define PR_MDB_PROVIDER PROP_TAG(PT_BINARY,0x3414)\n#define PR_RECEIVE_FOLDER_SETTINGS PROP_TAG(PT_OBJECT,0x3415)\n#define PR_VALID_FOLDER_MASK PROP_TAG(PT_I4,0x35DF)\n#define PR_IPM_SUBTREE_ENTRYID PROP_TAG(PT_BINARY,0x35E0)\n#define PR_IPM_OUTBOX_ENTRYID PROP_TAG(PT_BINARY,0x35E2)\n#define PR_IPM_WASTEBASKET_ENTRYID PROP_TAG(PT_BINARY,0x35E3)\n#define PR_IPM_SENTMAIL_ENTRYID PROP_TAG(PT_BINARY,0x35E4)\n#define PR_VIEWS_ENTRYID PROP_TAG(PT_BINARY,0x35E5)\n#define PR_COMMON_VIEWS_ENTRYID PROP_TAG(PT_BINARY,0x35E6)\n#define PR_FINDER_ENTRYID PROP_TAG(PT_BINARY,0x35E7)\n#define PR_CONTAINER_FLAGS PROP_TAG(PT_I4,0x3600)\n#define PR_FOLDER_TYPE PROP_TAG(PT_I4,0x3601)\n#define PR_CONTENT_COUNT PROP_TAG(PT_I4,0x3602)\n#define PR_CONTENT_UNREAD PROP_TAG(PT_I4,0x3603)\n#define PR_CREATE_TEMPLATES PROP_TAG(PT_OBJECT,0x3604)\n#define PR_DETAILS_TABLE PROP_TAG(PT_OBJECT,0x3605)\n#define PR_SEARCH PROP_TAG(PT_OBJECT,0x3607)\n#define PR_SELECTABLE PROP_TAG(PT_BOOLEAN,0x3609)\n#define PR_SUBFOLDERS PROP_TAG(PT_BOOLEAN,0x360A)\n#define PR_STATUS PROP_TAG(PT_I4,0x360B)\n#define PR_ANR_W PROP_TAG(PT_UNICODE,0x360C)\n#define PR_ANR_A PROP_TAG(PT_STRING8,0x360C)\n#define PR_ANR   WINELIB_NAME_AW(PR_ANR_)\n#define PR_CONTENTS_SORT_ORDER PROP_TAG(PT_MV_LONG,0x360D)\n#define PR_CONTAINER_HIERARCHY PROP_TAG(PT_OBJECT,0x360E)\n#define PR_CONTAINER_CONTENTS PROP_TAG(PT_OBJECT,0x360F)\n#define PR_FOLDER_ASSOCIATED_CONTENTS PROP_TAG(PT_OBJECT,0x3610)\n#define PR_DEF_CREATE_DL PROP_TAG(PT_BINARY,0x3611)\n#define PR_DEF_CREATE_MAILUSER PROP_TAG(PT_BINARY,0x3612)\n#define PR_CONTAINER_CLASS_W PROP_TAG(PT_UNICODE,0x3613)\n#define PR_CONTAINER_CLASS_A PROP_TAG(PT_STRING8,0x3613)\n#define PR_CONTAINER_CLASS   WINELIB_NAME_AW(PR_CONTAINER_CLASS_)\n#define PR_CONTAINER_MODIFY_VERSION PROP_TAG(PT_I8,0x3614)\n#define PR_AB_PROVIDER_ID PROP_TAG(PT_BINARY,0x3615)\n#define PR_DEFAULT_VIEW_ENTRYID PROP_TAG(PT_BINARY,0x3616)\n#define PR_ASSOC_CONTENT_COUNT PROP_TAG(PT_I4,0x3617)\n#define PR_IPM_DRAFTS_ENTRYID PROP_TAG(PT_BINARY,0x36D7)\n#define PR_ATTACHMENT_X400_PARAMETERS PROP_TAG(PT_BINARY,0x3700)\n#define PR_ATTACH_DATA_OBJ PROP_TAG(PT_OBJECT,0x3701)\n#define PR_ATTACH_DATA_BIN PROP_TAG(PT_BINARY,0x3701)\n#define PR_ATTACH_ENCODING PROP_TAG(PT_BINARY,0x3702)\n#define PR_ATTACH_EXTENSION_W PROP_TAG(PT_UNICODE,0x3703)\n#define PR_ATTACH_EXTENSION_A PROP_TAG(PT_STRING8,0x3703)\n#define PR_ATTACH_EXTENSION   WINELIB_NAME_AW(PR_ATTACH_EXTENSION_)\n#define PR_ATTACH_FILENAME_W PROP_TAG(PT_UNICODE,0x3704)\n#define PR_ATTACH_FILENAME_A PROP_TAG(PT_STRING8,0x3704)\n#define PR_ATTACH_FILENAME   WINELIB_NAME_AW(PR_ATTACH_FILENAME_)\n#define PR_ATTACH_METHOD PROP_TAG(PT_I4,0x3705)\n#define PR_ATTACH_LONG_FILENAME_W PROP_TAG(PT_UNICODE,0x3707)\n#define PR_ATTACH_LONG_FILENAME_A PROP_TAG(PT_STRING8,0x3707)\n#define PR_ATTACH_LONG_FILENAME   WINELIB_NAME_AW(PR_ATTACH_LONG_FILENAME_)\n#define PR_ATTACH_PATHNAME_W PROP_TAG(PT_UNICODE,0x3708)\n#define PR_ATTACH_PATHNAME_A PROP_TAG(PT_STRING8,0x3708)\n#define PR_ATTACH_PATHNAME   WINELIB_NAME_AW(PR_ATTACH_PATHNAME_)\n#define PR_ATTACH_RENDERING PROP_TAG(PT_BINARY, 0x3709)\n#define PR_ATTACH_TAG PROP_TAG(PT_BINARY,0x370A)\n#define PR_RENDERING_POSITION PROP_TAG(PT_I4,0x370B)\n#define PR_ATTACH_TRANSPORT_NAME_W PROP_TAG(PT_UNICODE,0x370C)\n#define PR_ATTACH_TRANSPORT_NAME_A PROP_TAG(PT_STRING8,0x370C)\n#define PR_ATTACH_TRANSPORT_NAME   WINELIB_NAME_AW(PR_ATTACH_TRANSPORT_NAME_)\n#define PR_ATTACH_LONG_PATHNAME_W PROP_TAG(PT_UNICODE,0x370D)\n#define PR_ATTACH_LONG_PATHNAME_A PROP_TAG(PT_STRING8,0x370D)\n#define PR_ATTACH_LONG_PATHNAME   WINELIB_NAME_AW(PR_ATTACH_LONG_PATHNAME_)\n#define PR_ATTACH_MIME_TAG_W PROP_TAG(PT_UNICODE,0x370E)\n#define PR_ATTACH_MIME_TAG_A PROP_TAG(PT_STRING8,0x370E)\n#define PR_ATTACH_MIME_TAG   WINELIB_NAME_AW(PR_ATTACH_MIME_TAG_)\n#define PR_ATTACH_ADDITIONAL_INFO PROP_TAG(PT_BINARY,0x370F)\n#define PR_DISPLAY_TYPE PROP_TAG(PT_I4,0x3900)\n#define PR_TEMPLATEID PROP_TAG(PT_BINARY,0x3902)\n#define PR_PRIMARY_CAPABILITY PROP_TAG(PT_BINARY,0x3904)\n#define PR_7BIT_DISPLAY_NAME PROP_TAG(PT_STRING8,0x39FF)\n#define PR_ACCOUNT_W PROP_TAG(PT_UNICODE,0x3A00)\n#define PR_ACCOUNT_A PROP_TAG(PT_STRING8,0x3A00)\n#define PR_ACCOUNT   WINELIB_NAME_AW(PR_ACCOUNT_)\n#define PR_ALTERNATE_RECIPIENT PROP_TAG(PT_BINARY,0x3A01)\n#define PR_CALLBACK_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A02)\n#define PR_CALLBACK_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A02)\n#define PR_CALLBACK_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_CALLBACK_TELEPHONE_NUMBER_)\n#define PR_CONVERSION_PROHIBITED PROP_TAG(PT_BOOLEAN,0x3A03)\n#define PR_DISCLOSE_RECIPIENTS PROP_TAG(PT_BOOLEAN,0x3A04)\n#define PR_GENERATION_W PROP_TAG(PT_UNICODE,0x3A05)\n#define PR_GENERATION_A PROP_TAG(PT_STRING8,0x3A05)\n#define PR_GENERATION   WINELIB_NAME_AW(PR_GENERATION_)\n#define PR_GIVEN_NAME_W PROP_TAG(PT_UNICODE,0x3A06)\n#define PR_GIVEN_NAME_A PROP_TAG(PT_STRING8,0x3A06)\n#define PR_GIVEN_NAME   WINELIB_NAME_AW(PR_GIVEN_NAME_)\n#define PR_GOVERNMENT_ID_NUMBER_W PROP_TAG(PT_UNICODE,0x3A07)\n#define PR_GOVERNMENT_ID_NUMBER_A PROP_TAG(PT_STRING8,0x3A07)\n#define PR_GOVERNMENT_ID_NUMBER   WINELIB_NAME_AW(PR_GOVERNMENT_ID_NUMBER_)\n#define PR_BUSINESS_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A08)\n#define PR_BUSINESS_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A08)\n#define PR_BUSINESS_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_BUSINESS_TELEPHONE_NUMBER_)\n#define PR_OFFICE_TELEPHONE_NUMBER_W PR_BUSINESS_TELEPHONE_NUMBER_W\n#define PR_OFFICE_TELEPHONE_NUMBER_A PR_BUSINESS_TELEPHONE_NUMBER_A\n#define PR_OFFICE_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_OFFICE_TELEPHONE_NUMBER_)\n#define PR_HOME_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A09)\n#define PR_HOME_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A09)\n#define PR_HOME_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_HOME_TELEPHONE_NUMBER_)\n#define PR_INITIALS_W PROP_TAG(PT_UNICODE,0x3A0A)\n#define PR_INITIALS_A PROP_TAG(PT_STRING8,0x3A0A)\n#define PR_INITIALS   WINELIB_NAME_AW(PR_INITIALS_)\n#define PR_KEYWORD_W PROP_TAG(PT_UNICODE,0x3A0B)\n#define PR_KEYWORD_A PROP_TAG(PT_STRING8,0x3A0B)\n#define PR_KEYWORD   WINELIB_NAME_AW(PR_KEYWORD_)\n#define PR_LANGUAGE_W PROP_TAG(PT_UNICODE,0x3A0C)\n#define PR_LANGUAGE_A PROP_TAG(PT_STRING8,0x3A0C)\n#define PR_LANGUAGE   WINELIB_NAME_AW(PR_LANGUAGE_)\n#define PR_LOCATION_W PROP_TAG(PT_UNICODE,0x3A0D)\n#define PR_LOCATION_A PROP_TAG(PT_STRING8,0x3A0D)\n#define PR_LOCATION   WINELIB_NAME_AW(PR_LOCATION_)\n#define PR_MAIL_PERMISSION PROP_TAG(PT_BOOLEAN,0x3A0E)\n#define PR_MHS_COMMON_NAME_W PROP_TAG(PT_UNICODE,0x3A0F)\n#define PR_MHS_COMMON_NAME_A PROP_TAG(PT_STRING8,0x3A0F)\n#define PR_MHS_COMMON_NAME   WINELIB_NAME_AW(PR_MHS_COMMON_NAME_)\n#define PR_ORGANIZATIONAL_ID_NUMBER_W PROP_TAG(PT_UNICODE,0x3A10)\n#define PR_ORGANIZATIONAL_ID_NUMBER_A PROP_TAG(PT_STRING8,0x3A10)\n#define PR_ORGANIZATIONAL_ID_NUMBER   WINELIB_NAME_AW(PR_ORGANIZATIONAL_ID_NUMBER_)\n#define PR_SURNAME_W PROP_TAG(PT_UNICODE,0x3A11)\n#define PR_SURNAME_A PROP_TAG(PT_STRING8,0x3A11)\n#define PR_SURNAME   WINELIB_NAME_AW(PR_SURNAME_)\n#define PR_ORIGINAL_ENTRYID PROP_TAG(PT_BINARY,0x3A12)\n#define PR_ORIGINAL_DISPLAY_NAME_W PROP_TAG(PT_UNICODE,0x3A13)\n#define PR_ORIGINAL_DISPLAY_NAME_A PROP_TAG(PT_STRING8,0x3A13)\n#define PR_ORIGINAL_DISPLAY_NAME   WINELIB_NAME_AW(PR_ORIGINAL_DISPLAY_NAME_)\n#define PR_ORIGINAL_SEARCH_KEY PROP_TAG(PT_BINARY,0x3A14)\n#define PR_POSTAL_ADDRESS_W PROP_TAG(PT_UNICODE,0x3A15)\n#define PR_POSTAL_ADDRESS_A PROP_TAG(PT_STRING8,0x3A15)\n#define PR_POSTAL_ADDRESS   WINELIB_NAME_AW(PR_POSTAL_ADDRESS_)\n#define PR_COMPANY_NAME_W PROP_TAG(PT_UNICODE,0x3A16)\n#define PR_COMPANY_NAME_A PROP_TAG(PT_STRING8,0x3A16)\n#define PR_COMPANY_NAME   WINELIB_NAME_AW(PR_COMPANY_NAME_)\n#define PR_TITLE_W PROP_TAG(PT_UNICODE,0x3A17)\n#define PR_TITLE_A PROP_TAG(PT_STRING8,0x3A17)\n#define PR_TITLE   WINELIB_NAME_AW(PR_TITLE_)\n#define PR_DEPARTMENT_NAME_W PROP_TAG(PT_UNICODE,0x3A18)\n#define PR_DEPARTMENT_NAME_A PROP_TAG(PT_STRING8,0x3A18)\n#define PR_DEPARTMENT_NAME   WINELIB_NAME_AW(PR_DEPARTMENT_NAME_)\n#define PR_OFFICE_LOCATION_W PROP_TAG(PT_UNICODE,0x3A19)\n#define PR_OFFICE_LOCATION_A PROP_TAG(PT_STRING8,0x3A19)\n#define PR_OFFICE_LOCATION   WINELIB_NAME_AW(PR_OFFICE_LOCATION_)\n#define PR_PRIMARY_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A1A)\n#define PR_PRIMARY_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A1A)\n#define PR_PRIMARY_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_PRIMARY_TELEPHONE_NUMBER_)\n#define PR_BUSINESS2_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A1B)\n#define PR_BUSINESS2_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A1B)\n#define PR_BUSINESS2_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_BUSINESS2_TELEPHONE_NUMBER_)\n#define PR_OFFICE2_TELEPHONE_NUMBER_W PR_BUSINESS2_TELEPHONE_NUMBER_W\n#define PR_OFFICE2_TELEPHONE_NUMBER_A PR_BUSINESS2_TELEPHONE_NUMBER_A\n#define PR_OFFICE2_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_OFFICE2_TELEPHONE_NUMBER_)\n#define PR_MOBILE_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A1C)\n#define PR_MOBILE_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A1C)\n#define PR_MOBILE_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_MOBILE_TELEPHONE_NUMBER_)\n#define PR_CELLULAR_TELEPHONE_NUMBER_W PR_MOBILE_TELEPHONE_NUMBER_W\n#define PR_CELLULAR_TELEPHONE_NUMBER_A PR_MOBILE_TELEPHONE_NUMBER_A\n#define PR_CELLULAR_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_CELLULAR_TELEPHONE_NUMBER_)\n#define PR_RADIO_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A1D)\n#define PR_RADIO_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A1D)\n#define PR_RADIO_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_RADIO_TELEPHONE_NUMBER_)\n#define PR_CAR_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A1E)\n#define PR_CAR_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A1E)\n#define PR_CAR_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_CAR_TELEPHONE_NUMBER_)\n#define PR_OTHER_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A1F)\n#define PR_OTHER_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A1F)\n#define PR_OTHER_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_OTHER_TELEPHONE_NUMBER_)\n#define PR_TRANSMITABLE_DISPLAY_NAME_W PROP_TAG(PT_UNICODE,0x3A20)\n#define PR_TRANSMITABLE_DISPLAY_NAME_A PROP_TAG(PT_STRING8,0x3A20)\n#define PR_TRANSMITABLE_DISPLAY_NAME   WINELIB_NAME_AW(PR_TRANSMITABLE_DISPLAY_NAME_)\n#define PR_PAGER_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A21)\n#define PR_PAGER_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A21)\n#define PR_PAGER_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_PAGER_TELEPHONE_NUMBER_)\n#define PR_BEEPER_TELEPHONE_NUMBER_W PR_PAGER_TELEPHONE_NUMBER_W\n#define PR_BEEPER_TELEPHONE_NUMBER_A PR_PAGER_TELEPHONE_NUMBER_A\n#define PR_BEEPER_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_BEEPER_TELEPHONE_NUMBER_)\n#define PR_USER_CERTIFICATE PROP_TAG(PT_BINARY,0x3A22)\n#define PR_PRIMARY_FAX_NUMBER_W PROP_TAG(PT_UNICODE,0x3A23)\n#define PR_PRIMARY_FAX_NUMBER_A PROP_TAG(PT_STRING8,0x3A23)\n#define PR_PRIMARY_FAX_NUMBER   WINELIB_NAME_AW(PR_PRIMARY_FAX_NUMBER_)\n#define PR_BUSINESS_FAX_NUMBER_W PROP_TAG(PT_UNICODE,0x3A24)\n#define PR_BUSINESS_FAX_NUMBER_A PROP_TAG(PT_STRING8,0x3A24)\n#define PR_BUSINESS_FAX_NUMBER   WINELIB_NAME_AW(PR_BUSINESS_FAX_NUMBER_)\n#define PR_HOME_FAX_NUMBER_W PROP_TAG(PT_UNICODE,0x3A25)\n#define PR_HOME_FAX_NUMBER_A PROP_TAG(PT_STRING8,0x3A25)\n#define PR_HOME_FAX_NUMBER   WINELIB_NAME_AW(PR_HOME_FAX_NUMBER_)\n#define PR_COUNTRY_W PROP_TAG(PT_UNICODE,0x3A26)\n#define PR_COUNTRY_A PROP_TAG(PT_STRING8,0x3A26)\n#define PR_COUNTRY   WINELIB_NAME_AW(PR_COUNTRY_)\n#define PR_BUSINESS_ADDRESS_COUNTRY_W PR_COUNTRY_W\n#define PR_BUSINESS_ADDRESS_COUNTRY_A PR_COUNTRY_A\n#define PR_BUSINESS_ADDRESS_COUNTRY   WINELIB_NAME_AW(PR_BUSINESS_ADDRESS_COUNTRY_)\n#define PR_LOCALITY_W PROP_TAG(PT_UNICODE,0x3A27)\n#define PR_LOCALITY_A PROP_TAG(PT_STRING8,0x3A27)\n#define PR_LOCALITY   WINELIB_NAME_AW(PR_LOCALITY_)\n#define PR_BUSINESS_ADDRESS_CITY_W PR_LOCALITY_W\n#define PR_BUSINESS_ADDRESS_CITY_A PR_LOCALITY_A\n#define PR_BUSINESS_ADDRESS_CITY   WINELIB_NAME_AW(PR_BUSINESS_ADDRESS_CITY_)\n#define PR_STATE_OR_PROVINCE_W PROP_TAG(PT_UNICODE,0x3A28)\n#define PR_STATE_OR_PROVINCE_A PROP_TAG(PT_STRING8,0x3A28)\n#define PR_STATE_OR_PROVINCE   WINELIB_NAME_AW(PR_STATE_OR_PROVINCE_)\n#define PR_BUSINESS_ADDRESS_STATE_OR_PROVINCE_W PR_STATE_OR_PROVINCE_W\n#define PR_BUSINESS_ADDRESS_STATE_OR_PROVINCE_A PR_STATE_OR_PROVINCE_A\n#define PR_BUSINESS_ADDRESS_STATE_OR_PROVINCE   WINELIB_NAME_AW(PR_BUSINESS_ADDRESS_STATE_OR_PROVINCE_)\n#define PR_STREET_ADDRESS_W PROP_TAG(PT_UNICODE,0x3A29)\n#define PR_STREET_ADDRESS_A PROP_TAG(PT_STRING8,0x3A29)\n#define PR_STREET_ADDRESS   WINELIB_NAME_AW(PR_STREET_ADDRESS_)\n#define PR_BUSINESS_ADDRESS_STREET_W PR_STREET_ADDRESS_W\n#define PR_BUSINESS_ADDRESS_STREET_A PR_STREET_ADDRESS_A\n#define PR_BUSINESS_ADDRESS_STREET   WINELIB_NAME_AW(PR_BUSINESS_ADDRESS_STREET_)\n#define PR_POSTAL_CODE_W PROP_TAG(PT_UNICODE,0x3A2A)\n#define PR_POSTAL_CODE_A PROP_TAG(PT_STRING8,0x3A2A)\n#define PR_POSTAL_CODE   WINELIB_NAME_AW(PR_POSTAL_CODE_)\n#define PR_BUSINESS_ADDRESS_POSTAL_CODE_W PR_POSTAL_CODE_W\n#define PR_BUSINESS_ADDRESS_POSTAL_CODE_A PR_POSTAL_CODE_A\n#define PR_BUSINESS_ADDRESS_POSTAL_CODE   WINELIB_NAME_AW(PR_BUSINESS_ADDRESS_POSTAL_CODE_)\n#define PR_POST_OFFICE_BOX_W PROP_TAG(PT_UNICODE,0x3A2B)\n#define PR_POST_OFFICE_BOX_A PROP_TAG(PT_STRING8,0x3A2B)\n#define PR_POST_OFFICE_BOX   WINELIB_NAME_AW(PR_POST_OFFICE_BOX_)\n#define PR_BUSINESS_ADDRESS_POST_OFFICE_BOX_W PR_POST_OFFICE_BOX_W\n#define PR_BUSINESS_ADDRESS_POST_OFFICE_BOX_A PR_POST_OFFICE_BOX_A\n#define PR_BUSINESS_ADDRESS_POST_OFFICE_BOX   WINELIB_NAME_AW(PR_BUSINESS_ADDRESS_POST_OFFICE_BOX_)\n#define PR_TELEX_NUMBER_W PROP_TAG(PT_UNICODE,0x3A2C)\n#define PR_TELEX_NUMBER_A PROP_TAG(PT_STRING8,0x3A2C)\n#define PR_TELEX_NUMBER   WINELIB_NAME_AW(PR_TELEX_NUMBER_)\n#define PR_ISDN_NUMBER_W PROP_TAG(PT_UNICODE,0x3A2D)\n#define PR_ISDN_NUMBER_A PROP_TAG(PT_STRING8,0x3A2D)\n#define PR_ISDN_NUMBER   WINELIB_NAME_AW(PR_ISDN_NUMBER_)\n#define PR_ASSISTANT_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A2E)\n#define PR_ASSISTANT_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A2E)\n#define PR_ASSISTANT_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_ASSISTANT_TELEPHONE_NUMBER_)\n#define PR_HOME2_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A2F)\n#define PR_HOME2_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A2F)\n#define PR_HOME2_TELEPHONE_NUMBER   WINELIB_NAME_AW(PR_HOME2_TELEPHONE_NUMBER_)\n#define PR_ASSISTANT_W PROP_TAG(PT_UNICODE,0x3A30)\n#define PR_ASSISTANT_A PROP_TAG(PT_STRING8,0x3A30)\n#define PR_ASSISTANT   WINELIB_NAME_AW(PR_ASSISTANT_)\n#define PR_SEND_RICH_INFO PROP_TAG(PT_BOOLEAN,0x3A40)\n#define PR_WEDDING_ANNIVERSARY PROP_TAG(PT_SYSTIME,0x3A41)\n#define PR_BIRTHDAY PROP_TAG(PT_SYSTIME,0x3A42)\n#define PR_HOBBIES_W PROP_TAG(PT_UNICODE,0x3A43)\n#define PR_HOBBIES_A PROP_TAG(PT_STRING8,0x3A43)\n#define PR_HOBBIES   WINELIB_NAME_AW(PR_HOBBIES_)\n#define PR_MIDDLE_NAME_W PROP_TAG(PT_UNICODE,0x3A44)\n#define PR_MIDDLE_NAME_A PROP_TAG(PT_STRING8,0x3A44)\n#define PR_MIDDLE_NAME   WINELIB_NAME_AW(PR_MIDDLE_NAME_)\n#define PR_DISPLAY_NAME_PREFIX_W PROP_TAG(PT_UNICODE,0x3A45)\n#define PR_DISPLAY_NAME_PREFIX_A PROP_TAG(PT_STRING8,0x3A45)\n#define PR_DISPLAY_NAME_PREFIX   WINELIB_NAME_AW(PR_DISPLAY_NAME_PREFIX_)\n#define PR_PROFESSION_W PROP_TAG(PT_UNICODE,0x3A46)\n#define PR_PROFESSION_A PROP_TAG(PT_STRING8,0x3A46)\n#define PR_PROFESSION   WINELIB_NAME_AW(PR_PROFESSION_)\n#define PR_PREFERRED_BY_NAME_W PROP_TAG(PT_UNICODE,0x3A47)\n#define PR_PREFERRED_BY_NAME_A PROP_TAG(PT_STRING8,0x3A47)\n#define PR_PREFERRED_BY_NAME   WINELIB_NAME_AW(PR_PREFERRED_BY_NAME_)\n#define PR_SPOUSE_NAME_W PROP_TAG(PT_UNICODE,0x3A48)\n#define PR_SPOUSE_NAME_A PROP_TAG(PT_STRING8,0x3A48)\n#define PR_SPOUSE_NAME   WINELIB_NAME_AW(PR_SPOUSE_NAME_)\n#define PR_COMPUTER_NETWORK_NAME_W PROP_TAG(PT_UNICODE,0x3A49)\n#define PR_COMPUTER_NETWORK_NAME_A PROP_TAG(PT_STRING8,0x3A49)\n#define PR_COMPUTER_NETWORK_NAME   WINELIB_NAME_AW(PR_COMPUTER_NETWORK_NAME_)\n#define PR_CUSTOMER_ID_W PROP_TAG(PT_UNICODE,0x3A4A)\n#define PR_CUSTOMER_ID_A PROP_TAG(PT_STRING8,0x3A4A)\n#define PR_CUSTOMER_ID   WINELIB_NAME_AW(PR_CUSTOMER_ID_)\n#define PR_TTYTDD_PHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A4B)\n#define PR_TTYTDD_PHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A4B)\n#define PR_TTYTDD_PHONE_NUMBER   WINELIB_NAME_AW(PR_TTYTDD_PHONE_NUMBER_)\n#define PR_FTP_SITE_W PROP_TAG(PT_UNICODE,0x3A4C)\n#define PR_FTP_SITE_A PROP_TAG(PT_STRING8,0x3A4C)\n#define PR_FTP_SITE   WINELIB_NAME_AW(PR_FTP_SITE_)\n#define PR_GENDER PROP_TAG(PT_I2,0x3A4D)\n#define PR_MANAGER_NAME_W PROP_TAG(PT_UNICODE,0x3A4E)\n#define PR_MANAGER_NAME_A PROP_TAG(PT_STRING8,0x3A4E)\n#define PR_MANAGER_NAME   WINELIB_NAME_AW(PR_MANAGER_NAME_)\n#define PR_NICKNAME_W PROP_TAG(PT_UNICODE,0x3A4F)\n#define PR_NICKNAME_A PROP_TAG(PT_STRING8,0x3A4F)\n#define PR_NICKNAME   WINELIB_NAME_AW(PR_NICKNAME_)\n#define PR_PERSONAL_HOME_PAGE_W PROP_TAG(PT_UNICODE,0x3A50)\n#define PR_PERSONAL_HOME_PAGE_A PROP_TAG(PT_STRING8,0x3A50)\n#define PR_PERSONAL_HOME_PAGE   WINELIB_NAME_AW(PR_PERSONAL_HOME_PAGE_)\n#define PR_BUSINESS_HOME_PAGE_W PROP_TAG(PT_UNICODE,0x3A51)\n#define PR_BUSINESS_HOME_PAGE_A PROP_TAG(PT_STRING8,0x3A51)\n#define PR_BUSINESS_HOME_PAGE   WINELIB_NAME_AW(PR_BUSINESS_HOME_PAGE_)\n#define PR_CONTACT_VERSION PROP_TAG(PT_CLSID,0x3A52)\n#define PR_CONTACT_ENTRYIDS PROP_TAG(PT_MV_BINARY,0x3A53)\n#define PR_CONTACT_ADDRTYPES_W PROP_TAG(PT_MV_UNICODE,0x3A54)\n#define PR_CONTACT_ADDRTYPES_A PROP_TAG(PT_MV_STRING8,0x3A54)\n#define PR_CONTACT_ADDRTYPES   WINELIB_NAME_AW(PR_CONTACT_ADDRTYPES_)\n#define PR_CONTACT_DEFAULT_ADDRESS_INDEX PROP_TAG(PT_I4,0x3A55)\n#define PR_CONTACT_EMAIL_ADDRESSES_W PROP_TAG(PT_MV_UNICODE,0x3A56)\n#define PR_CONTACT_EMAIL_ADDRESSES_A PROP_TAG(PT_MV_STRING8,0x3A56)\n#define PR_CONTACT_EMAIL_ADDRESSES   WINELIB_NAME_AW(PR_CONTACT_EMAIL_ADDRESSES_)\n#define PR_COMPANY_MAIN_PHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A57)\n#define PR_COMPANY_MAIN_PHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A57)\n#define PR_COMPANY_MAIN_PHONE_NUMBER   WINELIB_NAME_AW(PR_COMPANY_MAIN_PHONE_NUMBER_)\n#define PR_CHILDRENS_NAMES_W PROP_TAG(PT_MV_UNICODE,0x3A58)\n#define PR_CHILDRENS_NAMES_A PROP_TAG(PT_MV_STRING8,0x3A58)\n#define PR_CHILDRENS_NAMES   WINELIB_NAME_AW(PR_CHILDRENS_NAMES_)\n#define PR_HOME_ADDRESS_CITY_W PROP_TAG(PT_UNICODE,0x3A59)\n#define PR_HOME_ADDRESS_CITY_A PROP_TAG(PT_STRING8,0x3A59)\n#define PR_HOME_ADDRESS_CITY   WINELIB_NAME_AW(PR_HOME_ADDRESS_CITY_)\n#define PR_HOME_ADDRESS_COUNTRY_W PROP_TAG(PT_UNICODE,0x3A5A)\n#define PR_HOME_ADDRESS_COUNTRY_A PROP_TAG(PT_STRING8,0x3A5A)\n#define PR_HOME_ADDRESS_COUNTRY   WINELIB_NAME_AW(PR_HOME_ADDRESS_COUNTRY_)\n#define PR_HOME_ADDRESS_POSTAL_CODE_W PROP_TAG(PT_UNICODE,0x3A5B)\n#define PR_HOME_ADDRESS_POSTAL_CODE_A PROP_TAG(PT_STRING8,0x3A5B)\n#define PR_HOME_ADDRESS_POSTAL_CODE   WINELIB_NAME_AW(PR_HOME_ADDRESS_POSTAL_CODE_)\n#define PR_HOME_ADDRESS_STATE_OR_PROVINCE_W PROP_TAG(PT_UNICODE,0x3A5C)\n#define PR_HOME_ADDRESS_STATE_OR_PROVINCE_A PROP_TAG(PT_STRING8,0x3A5C)\n#define PR_HOME_ADDRESS_STATE_OR_PROVINCE   WINELIB_NAME_AW(PR_HOME_ADDRESS_STATE_OR_PROVINCE_)\n#define PR_HOME_ADDRESS_STREET_W PROP_TAG(PT_UNICODE,0x3A5D)\n#define PR_HOME_ADDRESS_STREET_A PROP_TAG(PT_STRING8,0x3A5D)\n#define PR_HOME_ADDRESS_STREET   WINELIB_NAME_AW(PR_HOME_ADDRESS_STREET_)\n#define PR_HOME_ADDRESS_POST_OFFICE_BOX_W PROP_TAG(PT_UNICODE,0x3A5E)\n#define PR_HOME_ADDRESS_POST_OFFICE_BOX_A PROP_TAG(PT_STRING8,0x3A5E)\n#define PR_HOME_ADDRESS_POST_OFFICE_BOX   WINELIB_NAME_AW(PR_HOME_ADDRESS_POST_OFFICE_BOX_)\n#define PR_OTHER_ADDRESS_CITY_W PROP_TAG(PT_UNICODE,0x3A5F)\n#define PR_OTHER_ADDRESS_CITY_A PROP_TAG(PT_STRING8,0x3A5F)\n#define PR_OTHER_ADDRESS_CITY   WINELIB_NAME_AW(PR_OTHER_ADDRESS_CITY_)\n#define PR_OTHER_ADDRESS_COUNTRY_W PROP_TAG(PT_UNICODE,0x3A60)\n#define PR_OTHER_ADDRESS_COUNTRY_A PROP_TAG(PT_STRING8,0x3A60)\n#define PR_OTHER_ADDRESS_COUNTRY   WINELIB_NAME_AW(PR_OTHER_ADDRESS_COUNTRY_)\n#define PR_OTHER_ADDRESS_POSTAL_CODE_W PROP_TAG(PT_UNICODE,0x3A61)\n#define PR_OTHER_ADDRESS_POSTAL_CODE_A PROP_TAG(PT_STRING8,0x3A61)\n#define PR_OTHER_ADDRESS_POSTAL_CODE   WINELIB_NAME_AW(PR_OTHER_ADDRESS_POSTAL_CODE_)\n#define PR_OTHER_ADDRESS_STATE_OR_PROVINCE_W PROP_TAG(PT_UNICODE,0x3A62)\n#define PR_OTHER_ADDRESS_STATE_OR_PROVINCE_A PROP_TAG(PT_STRING8,0x3A62)\n#define PR_OTHER_ADDRESS_STATE_OR_PROVINCE   WINELIB_NAME_AW(PR_OTHER_ADDRESS_STATE_OR_PROVINCE_)\n#define PR_OTHER_ADDRESS_STREET_W PROP_TAG(PT_UNICODE,0x3A63)\n#define PR_OTHER_ADDRESS_STREET_A PROP_TAG(PT_STRING8,0x3A63)\n#define PR_OTHER_ADDRESS_STREET   WINELIB_NAME_AW(PR_OTHER_ADDRESS_STREET_)\n#define PR_OTHER_ADDRESS_POST_OFFICE_BOX_W PROP_TAG(PT_UNICODE,0x3A64)\n#define PR_OTHER_ADDRESS_POST_OFFICE_BOX_A PROP_TAG(PT_STRING8,0x3A64)\n#define PR_OTHER_ADDRESS_POST_OFFICE_BOX   WINELIB_NAME_AW(PR_OTHER_ADDRESS_POST_OFFICE_BOX_)\n#define PR_STORE_PROVIDERS PROP_TAG(PT_BINARY,0x3D00)\n#define PR_AB_PROVIDERS PROP_TAG(PT_BINARY,0x3D01)\n#define PR_TRANSPORT_PROVIDERS PROP_TAG(PT_BINARY,0x3D02)\n#define PR_DEFAULT_PROFILE PROP_TAG(PT_BOOLEAN,0x3D04)\n#define PR_AB_SEARCH_PATH PROP_TAG(PT_MV_BINARY,0x3D05)\n#define PR_AB_DEFAULT_DIR PROP_TAG(PT_BINARY,0x3D06)\n#define PR_AB_DEFAULT_PAB PROP_TAG(PT_BINARY,0x3D07)\n#define PR_FILTERING_HOOKS PROP_TAG(PT_BINARY, 0x3D08)\n#define PR_SERVICE_NAME_W PROP_TAG(PT_UNICODE,0x3D09)\n#define PR_SERVICE_NAME_A PROP_TAG(PT_STRING8,0x3D09)\n#define PR_SERVICE_NAME   WINELIB_NAME_AW(PR_SERVICE_NAME_)\n#define PR_SERVICE_DLL_NAME_W PROP_TAG(PT_UNICODE,0x3D0A)\n#define PR_SERVICE_DLL_NAME_A PROP_TAG(PT_STRING8,0x3D0A)\n#define PR_SERVICE_DLL_NAME   WINELIB_NAME_AW(PR_SERVICE_DLL_NAME_)\n#define PR_SERVICE_ENTRY_NAME PROP_TAG(PT_STRING8,0x3D0B)\n#define PR_SERVICE_UID PROP_TAG(PT_BINARY,0x3D0C)\n#define PR_SERVICE_EXTRA_UIDS PROP_TAG(PT_BINARY,0x3D0D)\n#define PR_SERVICES PROP_TAG(PT_BINARY,0x3D0E)\n#define PR_SERVICE_SUPPORT_FILES_W PROP_TAG(PT_MV_UNICODE,0x3D0F)\n#define PR_SERVICE_SUPPORT_FILES_A PROP_TAG(PT_MV_STRING8,0x3D0F)\n#define PR_SERVICE_SUPPORT_FILES   WINELIB_NAME_AW(PR_SERVICE_SUPPORT_FILES_)\n#define PR_SERVICE_DELETE_FILES_W PROP_TAG(PT_MV_UNICODE,0x3D10)\n#define PR_SERVICE_DELETE_FILES_A PROP_TAG(PT_MV_STRING8,0x3D10)\n#define PR_SERVICE_DELETE_FILES   WINELIB_NAME_AW(PR_SERVICE_DELETE_FILES_)\n#define PR_AB_SEARCH_PATH_UPDATE PROP_TAG(PT_BINARY,0x3D11)\n#define PR_PROFILE_NAME_A PROP_TAG(PT_STRING8,0x3D12)\n#define PR_PROFILE_NAME_W PROP_TAG(PT_UNICODE,0x3D12)\n#define PR_PROFILE_NAME   WINELIB_NAME_AW(PR_PROFILE_NAME_)\n#define PR_IDENTITY_DISPLAY_W PROP_TAG(PT_UNICODE,0x3E00)\n#define PR_IDENTITY_DISPLAY_A PROP_TAG(PT_STRING8,0x3E00)\n#define PR_IDENTITY_DISPLAY   WINELIB_NAME_AW(PR_IDENTITY_DISPLAY_)\n#define PR_IDENTITY_ENTRYID PROP_TAG(PT_BINARY,0x3E01)\n#define PR_RESOURCE_METHODS PROP_TAG(PT_I4,0x3E02)\n/* Service provider type */\n#define PR_RESOURCE_TYPE PROP_TAG(PT_I4,0x3E03)\n#define PR_STATUS_CODE PROP_TAG(PT_I4,0x3E04)\n#define PR_IDENTITY_SEARCH_KEY PROP_TAG(PT_BINARY,0x3E05)\n#define PR_OWN_STORE_ENTRYID PROP_TAG(PT_BINARY,0x3E06)\n#define PR_RESOURCE_PATH_W PROP_TAG(PT_UNICODE,0x3E07)\n#define PR_RESOURCE_PATH_A PROP_TAG(PT_STRING8,0x3E07)\n#define PR_RESOURCE_PATH   WINELIB_NAME_AW(PR_RESOURCE_PATH_)\n#define PR_STATUS_STRING_W PROP_TAG(PT_UNICODE,0x3E08)\n#define PR_STATUS_STRING_A PROP_TAG(PT_STRING8,0x3E08)\n#define PR_STATUS_STRING   WINELIB_NAME_AW(PR_STATUS_STRING_)\n#define PR_X400_DEFERRED_DELIVERY_CANCEL PROP_TAG(PT_BOOLEAN,0x3E09)\n#define PR_HEADER_FOLDER_ENTRYID PROP_TAG(PT_BINARY,0x3E0A)\n#define PR_REMOTE_PROGRESS PROP_TAG(PT_I4,0x3E0B)\n#define PR_REMOTE_PROGRESS_TEXT_W PROP_TAG(PT_UNICODE,0x3E0C)\n#define PR_REMOTE_PROGRESS_TEXT_A PROP_TAG(PT_STRING8,0x3E0C)\n#define PR_REMOTE_PROGRESS_TEXT   WINELIB_NAME_AW(PR_REMOTE_PROGRESS_TEXT_)\n#define PR_REMOTE_VALIDATE_OK PROP_TAG(PT_BOOLEAN,0x3E0D)\n#define PR_CONTROL_FLAGS PROP_TAG(PT_I4,0x3F00)\n#define PR_CONTROL_STRUCTURE PROP_TAG(PT_BINARY,0x3F01)\n#define PR_CONTROL_TYPE PROP_TAG(PT_I4,0x3F02)\n#define PR_DELTAX PROP_TAG(PT_I4,0x3F03)\n#define PR_DELTAY PROP_TAG(PT_I4,0x3F04)\n#define PR_XPOS PROP_TAG(PT_I4,0x3F05)\n#define PR_YPOS PROP_TAG(PT_I4,0x3F06)\n#define PR_CONTROL_ID PROP_TAG(PT_BINARY,0x3F07)\n#define PR_INITIAL_DETAILS_PANE PROP_TAG(PT_I4,0x3F08)\n\n#define PROP_ID_SECURE_MIN 0x67F0\n#define PROP_ID_SECURE_MAX 0x67FF\n\n#endif /* MAPITAGS_H */\n"
  },
  {
    "path": "wine/windows/mapiutil.h",
    "content": "/*\n * Copyright 2004 Jon Griffiths\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef MAPIUTIL_H_\n#define MAPIUTIL_H_\n\n#include <mapix.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define TAD_ALL_ROWS 1 /* Delete all rows */\n\nLPMALLOC WINAPI MAPIGetDefaultMalloc(void);\n\n#define SOF_UNIQUEFILENAME 0x80000000U /* Create a unique (temporary) filename */\n\n#if defined (UNICODE) || defined (__WINESRC__)\ntypedef HRESULT (WINAPI * LPOPENSTREAMONFILE)(LPALLOCATEBUFFER,LPFREEBUFFER,\n                                              ULONG,LPWSTR,LPWSTR,LPSTREAM*);\nHRESULT WINAPI OpenStreamOnFile(LPALLOCATEBUFFER,LPFREEBUFFER,\n                                ULONG,LPWSTR,LPWSTR,LPSTREAM*);\n#else\ntypedef HRESULT (WINAPI * LPOPENSTREAMONFILE)(LPALLOCATEBUFFER,LPFREEBUFFER,\n                                              ULONG,LPSTR,LPSTR,LPSTREAM*);\nHRESULT WINAPI OpenStreamOnFile(LPALLOCATEBUFFER,LPFREEBUFFER,\n                                ULONG,LPSTR,LPSTR,LPSTREAM*);\n#endif\n#define OPENSTREAMONFILE \"OpenStreamOnFile\"\n\nBOOL WINAPI FEqualNames(LPMAPINAMEID,LPMAPINAMEID);\n\ntypedef struct IPropData *LPPROPDATA;\n\n#define IPROP_READONLY  0x00001U\n#define IPROP_READWRITE 0x00002U\n#define IPROP_CLEAN     0x10000U\n#define IPROP_DIRTY     0x20000U\n\nSCODE WINAPI CreateIProp(LPCIID,ALLOCATEBUFFER*,ALLOCATEMORE*,FREEBUFFER*,\n                         LPVOID,LPPROPDATA*);\nSCODE WINAPI PropCopyMore(LPSPropValue,LPSPropValue,ALLOCATEMORE*,LPVOID);\nULONG WINAPI UlPropSize(LPSPropValue);\nVOID  WINAPI GetInstance(LPSPropValue,LPSPropValue,ULONG);\nBOOL  WINAPI FPropContainsProp(LPSPropValue,LPSPropValue,ULONG);\nBOOL  WINAPI FPropCompareProp(LPSPropValue,ULONG,LPSPropValue);\nLONG  WINAPI LPropCompareProp(LPSPropValue,LPSPropValue);\n\nHRESULT WINAPI HrAddColumns(LPMAPITABLE,LPSPropTagArray,LPALLOCATEBUFFER,LPFREEBUFFER);\nHRESULT WINAPI HrAddColumnsEx(LPMAPITABLE,LPSPropTagArray,LPALLOCATEBUFFER,\n                              LPFREEBUFFER,void (*)(LPSPropTagArray));\nHRESULT WINAPI HrAllocAdviseSink(LPNOTIFCALLBACK,LPVOID,LPMAPIADVISESINK*);\nHRESULT WINAPI HrThisThreadAdviseSink(LPMAPIADVISESINK,LPMAPIADVISESINK*);\nHRESULT WINAPI HrDispatchNotifications (ULONG);\n\nULONG WINAPI UlAddRef(void*);\nULONG WINAPI UlRelease(void*);\n\nHRESULT WINAPI HrGetOneProp(LPMAPIPROP,ULONG,LPSPropValue*);\nHRESULT WINAPI HrSetOneProp(LPMAPIPROP,LPSPropValue);\nBOOL    WINAPI FPropExists(LPMAPIPROP,ULONG);\nvoid    WINAPI FreePadrlist(LPADRLIST);\nvoid    WINAPI FreeProws(LPSRowSet);\nHRESULT WINAPI HrQueryAllRows(LPMAPITABLE,LPSPropTagArray,LPSRestriction,\n                              LPSSortOrderSet,LONG,LPSRowSet*);\nLPSPropValue WINAPI PpropFindProp(LPSPropValue,ULONG,ULONG);\n\n#if defined (UNICODE) || defined (__WINESRC__)\nBOOL   WINAPI FBinFromHex(LPWSTR,LPBYTE);\nSCODE  WINAPI ScBinFromHexBounded(LPWSTR,LPBYTE,ULONG);\nvoid   WINAPI HexFromBin(LPBYTE,int,LPWSTR);\nULONG  WINAPI UlFromSzHex(LPCWSTR);\nLPWSTR WINAPI SzFindCh(LPCWSTR,USHORT);\nLPWSTR WINAPI SzFindLastCh(LPCWSTR,USHORT);\nLPWSTR WINAPI SzFindSz(LPCWSTR,LPCWSTR);\nUINT   WINAPI UFromSz(LPCSTR);\n#else\nBOOL  WINAPI FBinFromHex(LPSTR,LPBYTE);\nSCODE WINAPI ScBinFromHexBounded(LPSTR,LPBYTE,ULONG);\nvoid  WINAPI HexFromBin(LPBYTE,int,LPSTR);\nULONG WINAPI UlFromSzHex(LPCSTR);\nLPSTR WINAPI SzFindCh(LPCSTR,USHORT);\nLPSTR WINAPI SzFindLastCh(LPCSTR,USHORT);\nLPSTR WINAPI SzFindSz(LPCSTR,LPCSTR);\nUINT  WINAPI UFromSz(LPCSTR);\n#endif\n\nSCODE WINAPI ScInitMapiUtil(ULONG);\nvoid  WINAPI DeinitMapiUtil(void);\n\n#define szHrDispatchNotifications \"_HrDispatchNotifications@4\"\n#define szScCreateConversationIndex \"_ScCreateConversationIndex@16\"\n\ntypedef HRESULT (WINAPI DISPATCHNOTIFICATIONS)(ULONG);\ntypedef DISPATCHNOTIFICATIONS *LPDISPATCHNOTIFICATIONS;\ntypedef SCODE (WINAPI CREATECONVERSATIONINDEX)(ULONG,LPBYTE,ULONG*,LPBYTE*);\ntypedef CREATECONVERSATIONINDEX *LPCREATECONVERSATIONINDEX;\n\ntypedef struct ITableData *LPTABLEDATA;\n\ntypedef void (WINAPI CALLERRELEASE)(ULONG,LPTABLEDATA,LPMAPITABLE);\n\n/*****************************************************************************\n * ITableData interface\n *\n * The underlying table data structure for IMAPITable.\n */\n#define INTERFACE ITableData\nDECLARE_INTERFACE_(ITableData,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** ITableData methods ***/\n    STDMETHOD(HrGetView)(THIS_ LPSSortOrderSet lpSort, CALLERRELEASE *lpRel,\n                         ULONG ulData, LPMAPITABLE *lppTable) PURE;\n    STDMETHOD(HrModifyRow)(THIS_ LPSRow lpRow) PURE;\n    STDMETHOD(HrDeleteRow)(THIS_ LPSPropValue lpKey) PURE;\n    STDMETHOD(HrQueryRow)(THIS_ LPSPropValue lpKey, LPSRow *lppRow, ULONG *lpRowNum) PURE;\n    STDMETHOD(HrEnumRow)(THIS_ ULONG ulRowNum, LPSRow *lppRow) PURE;\n    STDMETHOD(HrNotify)(THIS_ ULONG ulFlags, ULONG cValues, LPSPropValue lpValues) PURE;\n    STDMETHOD(HrInsertRow)(THIS_ ULONG ulRow, LPSRow lpRow) PURE;\n    STDMETHOD(HrModifyRows)(THIS_ ULONG ulFlags, LPSRowSet lpRows) PURE;\n    STDMETHOD(HrDeleteRows)(THIS_ ULONG ulFlags, LPSRowSet lpRows, ULONG *lpCount) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n        /*** IUnknown methods ***/\n#define ITableData_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define ITableData_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define ITableData_Release(p)            (p)->lpVtbl->Release(p)\n        /*** ITableData methods ***/\n#define ITableData_HrGetView(p,a,b,c,d)  (p)->lpVtbl->HrGetView(p,a,b,c,d)\n#define ITableData_HrModifyRow(p,a)      (p)->lpVtbl->HrModifyRow(p,a)\n#define ITableData_HrDeleteRow(p,a)      (p)->lpVtbl->HrDeleteRow(p,a)\n#define ITableData_HrQueryRow(p,a,b,c)   (p)->lpVtbl->HrQueryRow(p,a,b,c)\n#define ITableData_HrEnumRow(p,a,b)      (p)->lpVtbl->HrEnumRow(p,a,b)\n#define ITableData_HrNotify(p,a,b,c)     (p)->lpVtbl->HrNotify(p,a,b,c)\n#define ITableData_HrInsertRow(p,a,b)    (p)->lpVtbl->HrInsertRow(p,a,b)\n#define ITableData_HrModifyRows(p,a,b)   (p)->lpVtbl->HrModifyRows(p,a,b)\n#define ITableData_HrDeleteRows(p,a,b,c) (p)->lpVtbl->HrDeleteRows(p,a,b,c)\n#endif\n\nSCODE WINAPI CreateTable(LPCIID,ALLOCATEBUFFER*,ALLOCATEMORE*,FREEBUFFER*,\n                         LPVOID,ULONG,ULONG,LPSPropTagArray,LPTABLEDATA*);\n\nSCODE WINAPI ScCountNotifications(int,LPNOTIFICATION,ULONG*);\nSCODE WINAPI ScCountProps(int,LPSPropValue,ULONG*);\nSCODE WINAPI ScCopyNotifications(int,LPNOTIFICATION,LPVOID,ULONG*);\nSCODE WINAPI ScCopyProps(int,LPSPropValue,LPVOID,ULONG*);\nSCODE WINAPI ScDupPropset(int,LPSPropValue,LPALLOCATEBUFFER,LPSPropValue*);\nSCODE WINAPI ScRelocNotifications(int,LPNOTIFICATION,LPVOID,LPVOID,ULONG*);\nSCODE WINAPI ScRelocProps(int,LPSPropValue,LPVOID,LPVOID,ULONG*);\n\nLPSPropValue WINAPI LpValFindProp(ULONG,ULONG,LPSPropValue);\n\nstatic inline FILETIME FtAddFt(FILETIME ftLeft, FILETIME ftRight)\n{\n    LONG64 *pl = (LONG64*)&ftLeft, *pr = (LONG64*)&ftRight;\n    union { FILETIME ft; LONG64 ll; } ftmap;    \n    ftmap.ll = *pl + *pr;\n    return ftmap.ft;\n}\n\nstatic inline FILETIME FtSubFt(FILETIME ftLeft, FILETIME ftRight)\n{\n    LONG64 *pl = (LONG64*)&ftLeft, *pr = (LONG64*)&ftRight;\n    union { FILETIME ft; LONG64 ll; } ftmap;    \n    ftmap.ll = *pl - *pr;\n    return ftmap.ft;\n}\n\nstatic inline FILETIME FtNegFt(FILETIME ftLeft)\n{\n    LONG64 *p = (LONG64*)&ftLeft;\n    union { FILETIME ft; LONG64 ll; } ftmap;    \n    ftmap.ll = -*p;\n    return ftmap.ft;\n}\n\nstatic inline FILETIME FtMulDw(DWORD dwLeft, FILETIME ftRight)\n{\n    LONG64 l = (LONG64)dwLeft, *pr = (LONG64*)&ftRight;\n    union { FILETIME ft; LONG64 ll; } ftmap;    \n    ftmap.ll = l * (*pr);\n    return ftmap.ft;\n}\n\nstatic inline FILETIME FtMulDwDw(DWORD dwLeft, DWORD dwRight)\n{\n    LONG64 l = (LONG64)dwLeft, r = (LONG64)dwRight;\n    union { FILETIME ft; LONG64 ll; } ftmap;    \n    ftmap.ll = l * r;\n    return ftmap.ft;\n}\n\n/*****************************************************************************\n * IPropData interface\n *\n */\n#define INTERFACE IPropData\nDECLARE_INTERFACE_(IPropData,IMAPIProp)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IMAPIProp methods ***/\n    STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;\n    STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;\n    STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;\n    STDMETHOD(GetPropList)(THIS_ ULONG  ulFlags, LPSPropTagArray *lppPropTagArray) PURE;\n    STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;\n    STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;\n    STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;\n    STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,\n                      LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,\n                      LPSPropProblemArray *lppProbs) PURE;\n    STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,\n                         LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;\n    STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,\n                               LPMAPINAMEID **lpppNames) PURE;\n    STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;\n    /*** IPropData methods ***/\n    STDMETHOD(HrSetObjAccess)(THIS_ ULONG ulAccess) PURE;\n    STDMETHOD(HrSetPropAccess)(THIS_ LPSPropTagArray lpPropTags, ULONG *lpAccess) PURE;\n    STDMETHOD(HrGetPropAccess)(THIS_ LPSPropTagArray *lppPropTags, ULONG **lppAccess) PURE;\n    STDMETHOD(HrAddObjProps)(THIS_ LPSPropTagArray lppPropTags, LPSPropProblemArray *lppProbs) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n        /*** IUnknown methods ***/\n#define IPropData_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IPropData_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IPropData_Release(p)                   (p)->lpVtbl->Release(p)\n        /*** IMAPIProp methods ***/\n#define IPropData_GetLastError(p,a,b,c)        (p)->lpVtbl->GetLastError(p,a,b,c)        \n#define IPropData_SaveChanges(p,a)             (p)->lpVtbl->SaveChanges(p,a)             \n#define IPropData_GetProps(p,a,b,c,d)          (p)->lpVtbl->GetProps(p,a,b,c,d)          \n#define IPropData_GetPropList(p,a,b)           (p)->lpVtbl->GetPropList(p,a,b)           \n#define IPropData_OpenProperty(p,a,b,c,d,e)    (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)    \n#define IPropData_SetProps(p,a,b,c)            (p)->lpVtbl->SetProps(p,a,b,c)            \n#define IPropData_DeleteProps(p,a,b)           (p)->lpVtbl->DeleteProps(p,a,b)           \n#define IPropData_CopyTo(p,a,b,c,d,e,f,g,h,i)  (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)  \n#define IPropData_CopyProps(p,a,b,c,d,e,f,g)   (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)   \n#define IPropData_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e) \n#define IPropData_GetIDsFromNames(p,a,b,c,d)   (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)   \n#define IPropData_HrSetObjAccess(p,a)          (p)->lpVtbl->HrSetObjAccess(p,a)\n#define IPropData_HrSetPropAccess(p,a,b)       (p)->lpVtbl->HrSetPropAccess(p,a,b)\n#define IPropData_HrGetPropAccess(p,a,b)       (p)->lpVtbl->HrGetPropAccess(p,a,b)\n#define IPropData_HrAddObjProps(p,a,b)         (p)->lpVtbl->HrAddObjProps(p,a,b)\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* MAPIUTIL_H_ */\n"
  },
  {
    "path": "wine/windows/mapival.h",
    "content": "/*\n * Copyright 2004 Jon Griffiths\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef MAPIVAL_H\n#define MAPIVAL_H\n\n#include <mapiutil.h>\n#include <stddef.h>\n#include <stdarg.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nBOOL  WINAPI FBadRglpszW(LPWSTR*,ULONG);\nBOOL  WINAPI FBadRowSet(LPSRowSet);\nBOOL  WINAPI FBadRglpNameID(LPMAPINAMEID*,ULONG);\nBOOL  WINAPI FBadEntryList(LPENTRYLIST);\nULONG WINAPI FBadRestriction(LPSRestriction);\nULONG WINAPI FBadPropTag(ULONG);\nULONG WINAPI FBadRow(LPSRow);\nULONG WINAPI FBadProp(LPSPropValue);\nULONG WINAPI FBadSortOrderSet(LPSSortOrderSet);\nULONG WINAPI FBadColumnSet(LPSPropTagArray);\n\n#define FBadRgPropVal(p,n) FAILED(ScCountProps((n),(p),NULL))\n#define FBadPropVal(p)     FBadRgPropVal(1,(p))\n#define FBadAdrList(p)     FBadRowSet((LPSRowSet)(p))\n\n#define BAD_STANDARD_OBJ(a,b,c,d)         FALSE\n#define FBadUnknown(a)                    FALSE\n#define FBadQueryInterface(a,b,c)         FALSE\n#define FBadAddRef(a)                     FALSE\n#define FBadRelease(a)                    FALSE\n#define FBadGetLastError(a,b,c,d)         FALSE\n#define FBadSaveChanges(a,b)              FALSE\n#define FBadGetProps(a,b,c,d)             FALSE\n#define FBadGetPropList(a,b)              FALSE\n#define FBadOpenProperty(a,b,c,d,e,f)     FALSE\n#define FBadSetProps(a,b,c,d)             FALSE\n#define FBadDeleteProps(a,b,c)            FALSE\n#define FBadCopyTo(a,b,c,d,e,f,g,h,i,j)   FALSE\n#define FBadCopyProps(a,b,c,d,e,f,g,h)    FALSE\n#define FBadGetNamesFromIDs(a,b,c,d,e,f)  FALSE\n#define FBadGetIDsFromNames(a,b,c,d,e)    FALSE\n\n#define ValidateParms(x)   do { } while(0)\n#define UlValidateParms(x) do { } while(0)\n#define CheckParms(x)      do { } while(0)\n\n#define ValidateParameters1(a,b) do { } while(0)\n#define ValidateParameters2(a,b,c) do { } while(0)\n#define ValidateParameters3(a,b,c,d) do { } while(0)\n#define ValidateParameters4(a,b,c,d,e) do { } while(0)\n#define ValidateParameters5(a,b,c,d,e,f) do { } while(0)\n#define ValidateParameters6(a,b,c,d,e,f,g) do { } while(0)\n#define ValidateParameters7(a,b,c,d,e,f,g,h) do { } while(0)\n#define ValidateParameters8(a,b,c,d,e,f,g,h,i) do { } while(0)\n#define ValidateParameters9(a,b,c,d,e,f,g,h,i,j) do { } while(0)\n#define ValidateParameters10(a,b,c,d,e,f,g,h,i,j,k) do { } while(0)\n#define ValidateParameters11(a,b,c,d,e,f,g,h,i,j,k,l) do { } while(0)\n#define ValidateParameters12(a,b,c,d,e,f,g,h,i,j,k,l,m) do { } while(0)\n#define ValidateParameters13(a,b,c,d,e,f,g,h,i,j,k,l,m,n) do { } while(0)\n#define ValidateParameters14(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) do { } while(0)\n#define ValidateParameters15(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) do { } while(0)\n#define ValidateParameters16(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q) do { } while(0)\n\n#define UlValidateParameters1(a,b) do { } while(0)\n#define UlValidateParameters2(a,b,c) do { } while(0)\n#define UlValidateParameters3(a,b,c,d) do { } while(0)\n#define UlValidateParameters4(a,b,c,d,e) do { } while(0)\n#define UlValidateParameters5(a,b,c,d,e,f) do { } while(0)\n#define UlValidateParameters6(a,b,c,d,e,f,g) do { } while(0)\n#define UlValidateParameters7(a,b,c,d,e,f,g,h) do { } while(0)\n#define UlValidateParameters8(a,b,c,d,e,f,g,h,i) do { } while(0)\n#define UlValidateParameters9(a,b,c,d,e,f,g,h,i,j) do { } while(0)\n#define UlValidateParameters10(a,b,c,d,e,f,g,h,i,j,k) do { } while(0)\n#define UlValidateParameters11(a,b,c,d,e,f,g,h,i,j,k,l) do { } while(0)\n#define UlValidateParameters12(a,b,c,d,e,f,g,h,i,j,k,l,m) do { } while(0)\n#define UlValidateParameters13(a,b,c,d,e,f,g,h,i,j,k,l,m,n) do { } while(0)\n#define UlValidateParameters14(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) do { } while(0)\n#define UlValidateParameters15(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) do { } while(0)\n#define UlValidateParameters16(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q) do { } while(0)\n\n#define CheckParameters1(a,b) do { } while(0)\n#define CheckParameters2(a,b,c) do { } while(0)\n#define CheckParameters3(a,b,c,d) do { } while(0)\n#define CheckParameters4(a,b,c,d,e) do { } while(0)\n#define CheckParameters5(a,b,c,d,e,f) do { } while(0)\n#define CheckParameters6(a,b,c,d,e,f,g) do { } while(0)\n#define CheckParameters7(a,b,c,d,e,f,g,h) do { } while(0)\n#define CheckParameters8(a,b,c,d,e,f,g,h,i) do { } while(0)\n#define CheckParameters9(a,b,c,d,e,f,g,h,i,j) do { } while(0)\n#define CheckParameters10(a,b,c,d,e,f,g,h,i,j,k) do { } while(0)\n#define CheckParameters11(a,b,c,d,e,f,g,h,i,j,k,l) do { } while(0)\n#define CheckParameters12(a,b,c,d,e,f,g,h,i,j,k,l,m) do { } while(0)\n#define CheckParameters13(a,b,c,d,e,f,g,h,i,j,k,l,m,n) do { } while(0)\n#define CheckParameters14(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) do { } while(0)\n#define CheckParameters15(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) do { } while(0)\n#define CheckParameters16(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q) do { } while(0)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* MAPIVAL_H */\n"
  },
  {
    "path": "wine/windows/mapix.h",
    "content": "/*\n * Copyright 2004 Jon Griffiths\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef MAPIX_H\n#define MAPIX_H\n\n#include <mapidefs.h>\n#include <mapicode.h>\n#include <mapiguid.h>\n#include <mapitags.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct IProfAdmin IProfAdmin;\ntypedef IProfAdmin *LPPROFADMIN;\ntypedef struct IMsgServiceAdmin IMsgServiceAdmin;\ntypedef IMsgServiceAdmin *LPSERVICEADMIN;\ntypedef struct IMAPISession *LPMAPISESSION;\n\n#ifndef WINE_FLAGS_DEFINED\n#define WINE_FLAGS_DEFINED\ntypedef ULONG                   FLAGS;\n#endif\n\n/* Flags for MAPILogon and MAPILogonEx */\n#ifndef MAPI_LOGON_UI\n#define MAPI_LOGON_UI           0x00000001\n#endif\n#ifndef MAPI_NEW_SESSION\n#define MAPI_NEW_SESSION        0x00000002\n#endif\n#define MAPI_ALLOW_OTHERS       0x00000008\n#define MAPI_EXPLICIT_PROFILE   0x00000010\n#ifndef MAPI_EXTENDED\n#define MAPI_EXTENDED           0x00000020\n#endif\n#ifndef MAPI_FORCE_DOWNLOAD\n#define MAPI_FORCE_DOWNLOAD     0x00001000\n#endif\n#ifndef MAPI_PASSWORD_UI\n#define MAPI_PASSWORD_UI        0x00020000\n#endif\n#define MAPI_SERVICE_UI_ALWAYS  0x00002000\n#define MAPI_NO_MAIL            0x00008000\n#define MAPI_NT_SERVICE         0x00010000\n#define MAPI_TIMEOUT_SHORT      0x00100000\n\n#define MAPI_SIMPLE_DEFAULT  (MAPI_LOGON_UI|MAPI_ALLOW_OTHERS|MAPI_FORCE_DOWNLOAD)\n#define MAPI_SIMPLE_EXPLICIT (MAPI_NEW_SESSION|MAPI_EXPLICIT_PROFILE|MAPI_FORCE_DOWNLOAD)\n\n#define MAPI_MULTITHREAD_NOTIFICATIONS  0x00000001\n#define MAPI_NO_COINIT                  0x00000008\n\ntypedef struct tagMAPIINIT_0\n{\n    ULONG ulVersion;\n    ULONG ulFlags;\n} MAPIINIT_0, *LPMAPIINIT_0;\n\ntypedef MAPIINIT_0 MAPIINIT, *LPMAPIINIT;\n\n#define MAPI_INIT_VERSION 0U\n\ntypedef HRESULT (WINAPI MAPIINITIALIZE)(void*);\ntypedef MAPIINITIALIZE *LPMAPIINITIALIZE;\nMAPIINITIALIZE MAPIInitialize;\n\ntypedef void (WINAPI MAPIUNINITIALIZE)(void);\ntypedef MAPIUNINITIALIZE *LPMAPIUNINITIALIZE;\nMAPIUNINITIALIZE MAPIUninitialize;\n\n#if defined (UNICODE) || defined (__WINESRC__)\ntypedef HRESULT (STDMETHODCALLTYPE MAPILOGONEX)(ULONG_PTR,LPWSTR,LPWSTR,ULONG,LPMAPISESSION*);\n#else\ntypedef HRESULT (STDMETHODCALLTYPE MAPILOGONEX)(ULONG_PTR,LPSTR,LPSTR,ULONG,LPMAPISESSION *);\n#endif\ntypedef MAPILOGONEX *LPMAPILOGONEX;\nMAPILOGONEX MAPILogonEx;\n\ntypedef SCODE (WINAPI MAPIALLOCATEBUFFER)(ULONG,LPVOID*);\ntypedef MAPIALLOCATEBUFFER *LPMAPIALLOCATEBUFFER;\nMAPIALLOCATEBUFFER MAPIAllocateBuffer;\n\ntypedef SCODE (WINAPI MAPIALLOCATEMORE)(ULONG,LPVOID,LPVOID*);\ntypedef MAPIALLOCATEMORE *LPMAPIALLOCATEMORE;\nMAPIALLOCATEMORE MAPIAllocateMore;\n\n#ifndef MAPIFREEBUFFER_DEFINED\n#define MAPIFREEBUFFER_DEFINED\ntypedef ULONG (WINAPI MAPIFREEBUFFER)(LPVOID);\ntypedef MAPIFREEBUFFER *LPMAPIFREEBUFFER;\nMAPIFREEBUFFER MAPIFreeBuffer;\n#endif\n\ntypedef HRESULT (WINAPI MAPIADMINPROFILES)(ULONG,LPPROFADMIN*);\ntypedef MAPIADMINPROFILES *LPMAPIADMINPROFILES;\nMAPIADMINPROFILES MAPIAdminProfiles;\n\n/*****************************************************************************\n * IMAPISession interface\n */\n#define INTERFACE IMAPISession\nDECLARE_INTERFACE_(IMAPISession,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IMAPISession methods ***/\n    STDMETHOD(GetLastError)(THIS_ HRESULT hResult, ULONG ulFlags, LPMAPIERROR *lppMAPIError) PURE;\n    STDMETHOD(GetMsgStoresTable)(THIS_ ULONG ulFlags, LPMAPITABLE *lppTable) PURE;\n    STDMETHOD(OpenMsgStore)(THIS_ ULONG_PTR ulUIParam, ULONG cbId,\n                            LPENTRYID lpId, LPCIID lpIFace, ULONG ulFlags, LPMDB *lppMDB) PURE;\n    STDMETHOD(OpenAddressBook)(THIS_ ULONG_PTR ulUIParam, LPCIID iid, ULONG ulFlags, LPADRBOOK *lppAdrBook) PURE;\n    STDMETHOD(OpenProfileSection)(THIS_ LPMAPIUID lpUID, LPCIID iid, ULONG ulFlags, LPPROFSECT *lppProf) PURE;\n    STDMETHOD(GetStatusTable)(THIS_ ULONG ulFlags, LPMAPITABLE *lppTable) PURE;\n    STDMETHOD(OpenEntry)(THIS_ ULONG cbId, LPENTRYID lpId, LPCIID iid,\n                         ULONG ulFlags, ULONG *lpType, LPUNKNOWN *lppUnk) PURE;\n    STDMETHOD(CompareEntryIDs)(THIS_ ULONG cbLID, LPENTRYID lpLID, ULONG cbRID,\n                               LPENTRYID lpRID, ULONG ulFlags, ULONG *lpRes) PURE;\n    STDMETHOD(Advise)(THIS_ ULONG cbId, LPENTRYID lpId, ULONG ulMask,\n                      LPMAPIADVISESINK lpSink, ULONG *lpCxn) PURE;\n    STDMETHOD(Unadvise)(THIS_ ULONG ulConnection) PURE;\n    STDMETHOD(MessageOptions)(THIS_ ULONG_PTR ulUIParam, ULONG ulFlags, LPSTR lpszAddr, LPMESSAGE lpMsg) PURE;\n    STDMETHOD(QueryDefaultMessageOpt)(THIS_ LPSTR lpszAddr, ULONG ulFlags,\n                                      ULONG *lpcVals, LPSPropValue *lppOpts) PURE;\n    STDMETHOD(EnumAdrTypes)(THIS_ ULONG ulFlags, ULONG *lpcTypes, LPSTR **lpppszTypes) PURE;\n    STDMETHOD(QueryIdentity)(THIS_ ULONG *lpcbId, LPENTRYID *lppEntryID) PURE;\n    STDMETHOD(Logoff)(THIS_ ULONG_PTR ulUIParam, ULONG ulFlags, ULONG ulReserved) PURE;\n    STDMETHOD(SetDefaultStore)(THIS_ ULONG ulFlags, ULONG cbId, LPENTRYID lpId) PURE;\n    STDMETHOD(AdminServices)(THIS_ ULONG ulFlags, LPSERVICEADMIN *lppAdmin) PURE;\n    STDMETHOD(ShowForm)(THIS_ ULONG_PTR ulUIParam, LPMDB lpStore,\n                        LPMAPIFOLDER lpParent, LPCIID iid, ULONG ulToken,\n                        LPMESSAGE lpSent, ULONG ulFlags, ULONG ulStatus,\n                        ULONG ulMsgFlags, ULONG ulAccess, LPSTR lpszClass) PURE;\n    STDMETHOD(PrepareForm)(THIS_ LPCIID lpIFace, LPMESSAGE lpMsg, ULONG *lpToken) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n        /*** IUnknown methods ***/\n#define IMAPISession_QueryInterface(p,a,b)          (p)->lpVtbl->QueryInterface(p,a,b)\n#define IMAPISession_AddRef(p)                      (p)->lpVtbl->AddRef(p)\n#define IMAPISession_Release(p)                     (p)->lpVtbl->Release(p)\n        /*** IMAPISession methods ***/\n#define IMAPISession_GetLastError(p,a,b,c)          (p)->lpVtbl->GetLastError(p,a,b,c)\n#define IMAPISession_GetMsgStoresTable(p,a,b)       (p)->lpVtbl->GetMsgStoresTable(p,a,b)\n#define IMAPISession_OpenMsgStore(p,a,b,c,d,e,f)    (p)->lpVtbl->OpenMsgStore(p,a,b,c,d,e,f)\n#define IMAPISession_OpenAddressBook(p,a,b,c,d)     (p)->lpVtbl->OpenAddressBook(p,a,b,c,d)\n#define IMAPISession_OpenProfileSection(p,a,b,c,d)  (p)->lpVtbl->OpenProfileSection(p,a,b,c,d)\n#define IMAPISession_GetStatusTable(p,a,b)          (p)->lpVtbl->GetStatusTable(p,a,b)\n#define IMAPISession_OpenEntry(p,a,b,c,d,e,f)       (p)->lpVtbl->OpenEntry(p,a,b,c,d,e,f)\n#define IMAPISession_CompareEntryIDs(p,a,b,c,d,e,f) (p)->lpVtbl->CompareEntryIDs(p,a,b,c,d,e,f)\n#define IMAPISession_Advise(p,a,b,c,d,e)            (p)->lpVtbl->Advise(p,a,b,c,d,e)\n#define IMAPISession_Unadvise(p,a)                  (p)->lpVtbl->Unadvise(p,a)\n#define IMAPISession_MessageOptions(p,a,b,c,d)      (p)->lpVtbl->MessageOptions)(p,a,b,c,d)\n#define IMAPISession_QueryDefaultMessageOpt(p,a,b,c,d) \\\n                                                    (p)->lpVtbl->QueryDefaultMessageOpt(p,a,b,c,d)\n#define IMAPISession_EnumAdrTypes(p,a,b,c)          (p)->lpVtbl->EnumAdrTypes(p,a,b,c)\n#define IMAPISession_QueryIdentity(p,a,b)           (p)->lpVtbl->QueryIdentity(p,a,b)\n#define IMAPISession_Logoff(p,a,b,c)                (p)->lpVtbl->Logoff(p,a,b,c)\n#define IMAPISession_SetDefaultStore(p,a,b,c)       (p)->lpVtbl->SetDefaultStore(p,a,b,c)\n#define IMAPISession_AdminServices(p,a,b)           (p)->lpVtbl->AdminServices(p,a,b)\n#define IMAPISession_ShowForm(p,a,b,c,d,e,f,g,h,i,j,k) \\\n                                                    (p)->lpVtbl->ShowForm(p,a,b,c,d,e,f,g,h,i,j,k)\n#define IMAPISession_PrepareForm(p,a,b,c)           (p)->lpVtbl->PrepareForm(p,a,b,c)\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* MAPIX_H */\n"
  },
  {
    "path": "wine/windows/mciavi.h",
    "content": "/*\n * Copyright (C) 2001 Eric Pouech\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#define MCI_MCIAVI_PLAY_WINDOW          __MSABI_LONG(0x01000000)\n#define MCI_MCIAVI_PLAY_FULLSCREEN      __MSABI_LONG(0x02000000)\n#define MCI_MCIAVI_PLAY_FULLBY2         __MSABI_LONG(0x04000000)\n\n#define MCI_AVI_STATUS_FRAMES_SKIPPED   __MSABI_LONG(0x8001)\n\n#define MCI_AVI_STATUS_LAST_PLAY_SPEED  __MSABI_LONG(0x8002)\n\n#define MCI_AVI_STATUS_AUDIO_BREAKS     __MSABI_LONG(0x8003)\n\n#define MCI_AVI_SETVIDEO_DRAW_PROCEDURE __MSABI_LONG(0x8000)\n\n#define MCI_AVI_SETVIDEO_PALETTE_COLOR  __MSABI_LONG(0x8100)\n\n#define MCI_AVI_SETVIDEO_PALETTE_HALFTONE __MSABI_LONG(0x0000FFFF)\n\n#define MCIERR_AVI_OLDAVIFORMAT\t\t(MCIERR_CUSTOM_DRIVER_BASE + 100)\n#define MCIERR_AVI_NOTINTERLEAVED\t(MCIERR_CUSTOM_DRIVER_BASE + 101)\n#define MCIERR_AVI_NODISPDIB\t\t(MCIERR_CUSTOM_DRIVER_BASE + 102)\n#define MCIERR_AVI_CANTPLAYFULLSCREEN\t(MCIERR_CUSTOM_DRIVER_BASE + 103)\n#define MCIERR_AVI_TOOBIGFORVGA\t\t(MCIERR_CUSTOM_DRIVER_BASE + 104)\n#define MCIERR_AVI_NOCOMPRESSOR         (MCIERR_CUSTOM_DRIVER_BASE + 105)\n#define MCIERR_AVI_DISPLAYERROR         (MCIERR_CUSTOM_DRIVER_BASE + 106)\n#define MCIERR_AVI_AUDIOERROR\t\t(MCIERR_CUSTOM_DRIVER_BASE + 107)\n#define MCIERR_AVI_BADPALETTE\t\t(MCIERR_CUSTOM_DRIVER_BASE + 108)\n"
  },
  {
    "path": "wine/windows/mcx.h",
    "content": "/*\n * Copyright (C) 2000 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_MCX_H\n#define __WINE_MCX_H\n\ntypedef struct tagMODEMDEVCAPS {\n       DWORD dwActualSize;\n       DWORD dwRequiredSize;\n       DWORD dwDevSpecificOffset;\n       DWORD dwDevSpecificSize;\n       DWORD dwModemProviderVersion;\n       DWORD dwModemManufacturerOffset;\n       DWORD dwModemManufacturerSize;\n       DWORD dwModemModelOffset;\n       DWORD dwModemModelSize;\n       DWORD dwModemVersionOffset;\n       DWORD dwModemVersionSize;\n       DWORD dwDialOptions;\n       DWORD dwCallSetupFailTimer;\n       DWORD dwInactivityTimeout;\n       DWORD dwSpeakerVolume;\n       DWORD dwSpeakerMode;\n       DWORD dwModemoptions;\n       DWORD dwMaxDTERate;\n       DWORD dwMaxDCERate;\n       BYTE  abVariablePortion[1];\n} MODEMDEVCAPS, *LPMODEMDEVCAPS;\n\ntypedef struct tagMODEMSETTINGS {\n       DWORD dwActualSize;\n       DWORD dwRequiredSize;\n       DWORD dwDevSpecificOffset;\n       DWORD dwDevSpecificSize;\n       DWORD dwCallSetupFailTimer;\n       DWORD dwInactivityTimeout;\n       DWORD dwSpeakerVolume;\n       DWORD dwSpeakerMode;\n       DWORD dwPreferredModemOptions;\n       DWORD dwNegotiatedModemOptions;\n       DWORD dwNegotiatedDCERate;\n       BYTE  abVariablePortion[1];\n} MODEMSETTINGS, *LPMODEMSETTINGS;\n\n#endif  /* __WINE_MCX_H */\n"
  },
  {
    "path": "wine/windows/mediaerr.h",
    "content": "/*\n * Copyright (C) 2002 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _MEDIAERR_H_\n#define _MEDIAERR_H_\n\n#define DMO_E_INVALIDSTREAMINDEX   0x80040201\n#define DMO_E_INVALIDTYPE          0x80040202\n#define DMO_E_TYPE_NOT_SET         0x80040203\n#define DMO_E_NOTACCEPTING         0x80040204\n#define DMO_E_TYPE_NOT_ACCEPTED    0x80040205\n#define DMO_E_NO_MORE_ITEMS        0x80040206\n\n#endif /* _MEDIAERR_H_ */\n"
  },
  {
    "path": "wine/windows/mediaobj.idl",
    "content": "/*\n * Copyright (C) 2002 Alexandre Julliard\n * Copyright (C) 2004 Vincent Béron\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\nimport \"objidl.idl\";\nimport \"strmif.idl\";\n\ninterface IDMOQualityControl;\ninterface IDMOVideoOutputOptimizations;\n\ntypedef struct _DMOMediaType\n{\n    GUID majortype;\n    GUID subtype;\n    BOOL bFixedSizeSamples;\n    BOOL bTemporalCompression;\n    ULONG lSampleSize;\n    GUID formattype;\n    IUnknown *pUnk;\n    ULONG cbFormat;\n    BYTE *pbFormat;\n} DMO_MEDIA_TYPE;\n\n/*****************************************************************************\n * IEnumDMO interface\n */\n[\n    object,\n    uuid(2C3CD98A-2BFA-4A53-9C27-5249BA64BA0F),\n    pointer_default(unique)\n]\ninterface IEnumDMO : IUnknown\n{\n    [local]\n    HRESULT Next(\n        [in] DWORD cItemsToFetch,\n        [out] CLSID *pCLSID,\n        [out] WCHAR **Names,\n        [out] DWORD *pcItemsFetched\n    );\n\n    HRESULT Skip(\n        [in] DWORD cItemsToSkip\n    );\n\n    HRESULT Reset();\n\n    HRESULT Clone(\n        [out] IEnumDMO **ppEnum\n    );\n}\n\n/*****************************************************************************\n * IMediaBuffer interface\n */\n[\n    object,\n    uuid(59eff8b9-938c-4a26-82f2-95cb84cdc837),\n    local\n]\ninterface IMediaBuffer : IUnknown\n{\n    HRESULT SetLength(\n       DWORD cbLength\n    );\n\n    HRESULT GetMaxLength(\n       [out] DWORD *pcbMaxLength\n    );\n\n    HRESULT GetBufferAndLength(\n       [out] BYTE **ppBuffer,\n       [out] DWORD *pcbLength\n    );\n}\n\ntypedef struct _DMO_OUTPUT_DATA_BUFFER {\n    IMediaBuffer *pBuffer;\n    DWORD dwStatus;\n    REFERENCE_TIME rtTimestamp;\n    REFERENCE_TIME rtTimelength;\n} DMO_OUTPUT_DATA_BUFFER, *PDMO_OUTPUT_DATA_BUFFER;\n\nenum _DMO_INPLACE_PROCESS_FLAGS {\n    DMO_INPLACE_NORMAL = 0x00000000,\n    DMO_INPLACE_ZERO   = 0x00000001\n};\n\nenum _DMO_SET_TYPE_FLAGS {\n    DMO_SET_TYPEF_TEST_ONLY = 0x00000001,\n    DMO_SET_TYPEF_CLEAR     = 0x00000002,\n};\n\nenum _DMO_OUTPUT_DATA_BUFFERF_FLAGS {\n    DMO_OUTPUT_DATA_BUFFERF_SYNCPOINT   = 0x00000001,\n    DMO_OUTPUT_DATA_BUFFERF_TIME        = 0x00000002,\n    DMO_OUTPUT_DATA_BUFFERF_TIMELENGTH  = 0x00000004,\n    DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE  = 0x01000000,\n};\n\n/*****************************************************************************\n * IMediaObject interface\n */\n[\n    object,\n    uuid(d8ad0f58-5494-4102-97c5-ec798e59bcf4),\n    local\n]\ninterface IMediaObject : IUnknown\n{\n    HRESULT GetStreamCount(\n        [out] DWORD *pcInputStreams,\n        [out] DWORD *pcOutputStreams\n    );\n\n    HRESULT GetInputStreamInfo(\n        DWORD dwInputStreamIndex,\n        [out] DWORD *pdwFlags\n    );\n\n    HRESULT GetOutputStreamInfo(\n        DWORD dwOutputStreamIndex,\n        [out] DWORD *pdwFlags\n    );\n\n    HRESULT GetInputType(\n        DWORD dwInputStreamIndex,\n        DWORD dwTypeIndex,\n        [out] DMO_MEDIA_TYPE *pmt\n    );\n\n    HRESULT GetOutputType(\n        DWORD dwOutputStreamIndex,\n        DWORD dwTypeIndex,\n        [out] DMO_MEDIA_TYPE *pmt\n    );\n\n    HRESULT SetInputType(\n        DWORD dwInputStreamIndex,\n        [in] const DMO_MEDIA_TYPE *pmt,\n        DWORD dwFlags\n    );\n\n    HRESULT SetOutputType(\n        DWORD dwOutputStreamIndex,\n        [in] const DMO_MEDIA_TYPE *pmt,\n        DWORD dwFlags\n    );\n\n    HRESULT GetInputCurrentType(\n        DWORD dwInputStreamIndex,\n        [out] DMO_MEDIA_TYPE *pmt\n    );\n\n    HRESULT GetOutputCurrentType(\n        DWORD dwOutputStreamIndex,\n        [out] DMO_MEDIA_TYPE *pmt\n    );\n\n    HRESULT GetInputSizeInfo(\n        DWORD dwInputStreamIndex,\n        [out] DWORD *pcbSize,\n        [out] DWORD *pcbMaxLookahead,\n        [out] DWORD *pcbAlignment\n    );\n\n    HRESULT GetOutputSizeInfo(\n        DWORD dwOutputStreamIndex,\n        [out] DWORD *pcbSize,\n        [out] DWORD *pcbAlignment\n    );\n\n    HRESULT GetInputMaxLatency(\n        DWORD dwInputStreamIndex,\n        [out] REFERENCE_TIME *prtMaxLatency\n    );\n\n    HRESULT SetInputMaxLatency(\n        DWORD dwInputStreamIndex,\n        REFERENCE_TIME rtMaxLatency\n    );\n\n    HRESULT Flush();\n\n    HRESULT Discontinuity(DWORD dwInputStreamIndex);\n\n    HRESULT AllocateStreamingResources();\n\n    HRESULT FreeStreamingResources();\n\n    HRESULT GetInputStatus(\n        DWORD dwInputStreamIndex,\n        [out] DWORD *dwFlags\n    );\n\n    HRESULT ProcessInput(\n        DWORD dwInputStreamIndex,\n        IMediaBuffer *pBuffer,\n        DWORD dwFlags,\n        REFERENCE_TIME rtTimestamp,\n        REFERENCE_TIME rtTimelength\n    );\n\n    HRESULT ProcessOutput(\n        DWORD dwFlags,\n        DWORD cOutputBufferCount,\n        [in,out] DMO_OUTPUT_DATA_BUFFER *pOutputBuffers,\n        [out] DWORD *pdwStatus\n    );\n\n    HRESULT Lock(LONG bLock);\n}\n\n/*****************************************************************************\n * IMediaObjectInPlace interface\n */\n\n[\n    object,\n    uuid(651b9ad0-0fc7-4aa9-9538-d89931010741),\n    local\n]\ninterface IMediaObjectInPlace : IUnknown {\n    HRESULT Process(\n        [in] ULONG ulSize,\n        [in,out] BYTE* pData,\n        [in] REFERENCE_TIME refTimeStart,\n        [in] DWORD dwFlags\n    );\n\n    HRESULT Clone(\n        [out] IMediaObjectInPlace **ppMediaObject\n    );\n\n    HRESULT GetLatency(\n        [out] REFERENCE_TIME *pLatencyTime\n    );\n}\n"
  },
  {
    "path": "wine/windows/metahost.idl",
    "content": "/*\n * Copyright 2010 Vincent Povirk for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"mscoree.idl\";\n\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef LoadLibrary\")\ncpp_quote(\"#endif\")\n\ntypedef enum\n{\n    METAHOST_POLICY_HIGHCOMPAT              = 0,\n    METAHOST_POLICY_APPLY_UPGRADE_POLICY    = 0x08,\n    METAHOST_POLICY_EMULATE_EXE_LAUNCH      = 0x10,\n    METAHOST_POLICY_SHOW_ERROR_DIALOG       = 0x20,\n    METAHOST_POLICY_USE_PROCESS_IMAGE_PATH  = 0x40,\n    METAHOST_POLICY_ENSURE_SKU_SUPPORTED    = 0x80\n} METAHOST_POLICY_FLAGS;\n\ntypedef enum\n{\n    CLR_DEBUGGING_MANAGED_EVENT_PENDING     = 1\n} CLR_DEBUGGING_PROCESS_FLAGS;\n\ntypedef struct _CLR_DEBUGGING_VERSION\n{\n    WORD wStructVersion;\n    WORD wMajor;\n    WORD wMinor;\n    WORD wBuild;\n    WORD wRevision;\n} CLR_DEBUGGING_VERSION;\n\n[\n    object,\n    local,\n    uuid(bd39d1d2-ba2f-486a-89b0-b4b0cb466891)\n]\ninterface ICLRRuntimeInfo : IUnknown\n{\n    HRESULT GetVersionString(\n        [out, size_is(*pcchBuffer)] LPWSTR pwzBuffer,\n        [in, out] DWORD *pcchBuffer);\n\n    HRESULT GetRuntimeDirectory(\n        [out, size_is(*pcchBuffer)] LPWSTR pwzBuffer,\n        [in, out] DWORD *pcchBuffer);\n\n    HRESULT IsLoaded(\n        [in] HANDLE hndProcess,\n        [out, retval] BOOL *pbLoaded);\n\n    HRESULT LoadErrorString(\n        [in] UINT iResourceID,\n        [out, size_is(*pcchBuffer)] LPWSTR pwzBuffer,\n        [in, out] DWORD *pcchBuffer,\n        [in] LONG iLocaleid);\n\n    HRESULT LoadLibrary(\n        [in] LPCWSTR pwzDllName,\n        [out, retval] HMODULE *phndModule);\n\n    HRESULT GetProcAddress(\n        [in] LPCSTR pszProcName,\n        [out, retval] LPVOID *ppProc);\n\n    HRESULT GetInterface(\n        [in] REFCLSID rclsid,\n        [in] REFIID riid,\n        [out, iid_is(riid), retval] LPVOID *ppUnk);\n\n    HRESULT IsLoadable(\n        [out, retval] BOOL *pbLoadable);\n\n    HRESULT SetDefaultStartupFlags(\n        [in] DWORD dwStartupFlags,\n        [in] LPCWSTR pwzHostConfigFile);\n\n    HRESULT GetDefaultStartupFlags(\n        [out] DWORD *pdwStartupFlags,\n        [out, size_is(*pcchHostConfigFile)] LPWSTR pwzHostConfigFile,\n        [in, out] DWORD *pcchHostConfigFile);\n\n    HRESULT BindAsLegacyV2Runtime();\n\n    HRESULT IsStarted(\n        [out] BOOL *pbStarted,\n        [out] DWORD *pdwStartupFlags);\n}\n\ntypedef HRESULT (__stdcall *CallbackThreadSetFnPtr)();\ntypedef HRESULT (__stdcall *CallbackThreadUnsetFnPtr)();\n\ntypedef void (__stdcall *RuntimeLoadedCallbackFnPtr)(\n    ICLRRuntimeInfo *pRuntimeInfo,\n    CallbackThreadSetFnPtr pfnCallbackThreadSet,\n    CallbackThreadUnsetFnPtr pfnCallbackThreadUnset);\n\ncpp_quote(\"DEFINE_GUID(CLSID_CLRDebuggingLegacy, 0xDF8395B5,0xA4BA,0x450b,0xA7,0x7C,0xA9,0xA4,0x77,0x62,0xC5,0x20);\")\ncpp_quote(\"DEFINE_GUID(CLSID_CLRMetaHost, 0x9280188d,0x0e8e,0x4867,0xb3,0x0c,0x7f,0xa8,0x38,0x84,0xe8,0xde);\")\n\n[\n    object,\n    local,\n    uuid(d332db9e-b9b3-4125-8207-a14884f53216)\n]\ninterface ICLRMetaHost : IUnknown\n{\n    HRESULT GetRuntime(\n        [in] LPCWSTR pwzVersion,\n        [in] REFIID iid,\n        [out, iid_is(iid), retval] LPVOID *ppRuntime);\n\n    HRESULT GetVersionFromFile(\n        [in] LPCWSTR pwzFilePath,\n        [out, size_is(*pcchBuffer)] LPWSTR pwzBuffer,\n        [in, out] DWORD *pcchBuffer);\n\n    HRESULT EnumerateInstalledRuntimes(\n        [out, retval] IEnumUnknown **ppEnumerator);\n\n    HRESULT EnumerateLoadedRuntimes(\n        [in] HANDLE hndProcess,\n        [out, retval] IEnumUnknown **ppEnumerator);\n\n    HRESULT RequestRuntimeLoadedNotification(\n        [in] RuntimeLoadedCallbackFnPtr pCallbackFunction);\n\n    HRESULT QueryLegacyV2RuntimeBinding(\n        [in] REFIID riid,\n        [out, iid_is(riid), retval] LPVOID *ppUnk);\n\n    HRESULT ExitProcess(\n        [in] INT32 iExitCode);\n}\n\n[\n    object,\n    local,\n    uuid(e2190695-77b2-492e-8e14-c4b3a7fdd593)\n]\ninterface ICLRMetaHostPolicy : IUnknown\n{\n    HRESULT GetRequestedRuntime([in] METAHOST_POLICY_FLAGS dwPolicyFlags,\n        [in] LPCWSTR pwzBinary, [in] IStream *pCfgStream,\n        [in, out] LPWSTR pwzVersion, [in, out] DWORD *pcchVersion,\n        [out] LPWSTR pwzImageVersion, [out, in] DWORD *pcchImageVersion,\n        [out] DWORD *pdwConfigFlags, [in] REFIID riid, [retval, out] LPVOID *ppRuntime);\n}\n\n[\n    uuid(2ebcd49a-1b47-4a61-b13a-4a03701e594b)\n]\ncoclass CLRMetaHostPolicy\n{\n    [default] interface ICLRMetaHostPolicy;\n}\n\n[\n    object,\n    local,\n    uuid(3151c08d-4d09-4f9b-8838-2880bf18fe51)\n]\ninterface ICLRDebuggingLibraryProvider : IUnknown\n{\n    HRESULT ProvideLibrary([in] const WCHAR *pwszFileName,\n            [in] DWORD dwTimestamp, [in] DWORD dwSizeOfImage,\n            [out] HMODULE *phModule);\n}\n\n[\n    object,\n    local,\n    uuid(d28f3c5a-9634-4206-a509-477552eefb10)\n]\ninterface ICLRDebugging : IUnknown\n{\n    HRESULT OpenVirtualProcess([in] ULONG64 moduleBaseAddress,\n            [in] IUnknown *pDataTarget, [in] ICLRDebuggingLibraryProvider *pLibraryProvider,\n            [in] CLR_DEBUGGING_VERSION *pMaxDebuggerSupportedVersion,\n            [in] REFIID riidProcess, [out] IUnknown **ppProcess,\n            [out, in] CLR_DEBUGGING_VERSION *pVersion,\n            [out] CLR_DEBUGGING_PROCESS_FLAGS *pdwFlags);\n\n    HRESULT CanUnloadNow(HMODULE hModule);\n}\n\ncpp_quote(\"HRESULT WINAPI CLRCreateInstance(REFCLSID clsid, REFIID riid, LPVOID *ppInterface);\")\n"
  },
  {
    "path": "wine/windows/mfapi.h",
    "content": "/*\n * Copyright (C) 2015 Austin English\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_MFAPI_H\n#define __WINE_MFAPI_H\n\n#include <mfobjects.h>\n#include <mmreg.h>\n#include <avrt.h>\n\n#if !defined(MF_VERSION)\n/* Default to Windows XP */\n#define MF_SDK_VERSION 0x0001\n#define MF_API_VERSION 0x0070\n#define MF_VERSION (MF_SDK_VERSION << 16 | MF_API_VERSION)\n#endif\n\n#define MFSTARTUP_NOSOCKET 0x1\n#define MFSTARTUP_LITE     (MFSTARTUP_NOSOCKET)\n#define MFSTARTUP_FULL     0\n\n#ifndef MAKEFOURCC\n#define MAKEFOURCC(ch0, ch1, ch2, ch3)  \\\n    ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |  \\\n    ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))\n#endif\n\n#define DEFINE_MEDIATYPE_GUID(name, format) \\\n    DEFINE_GUID(name, format, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);\n\n#ifndef DIRECT3D_VERSION\n#define D3DFMT_X8R8G8B8     22\n#endif\n\nDEFINE_MEDIATYPE_GUID(MFVideoFormat_WMV3,      MAKEFOURCC('W','M','V','3'));\nDEFINE_MEDIATYPE_GUID(MFVideoFormat_RGB32,     D3DFMT_X8R8G8B8);\n\n\nDEFINE_GUID(MF_MT_AVG_BITRATE,         0x20332624, 0xfb0d, 0x4d9e, 0xbd, 0x0d, 0xcb, 0xf6, 0x78, 0x6c, 0x10, 0x2e);\nDEFINE_GUID(MF_MT_FRAME_RATE,          0xc459a2e8, 0x3d2c, 0x4e44, 0xb1, 0x32, 0xfe, 0xe5, 0x15, 0x6c, 0x7b, 0xb0);\nDEFINE_GUID(MF_MT_FRAME_SIZE,          0x1652c33d, 0xd6b2, 0x4012, 0xb8, 0x34, 0x72, 0x03, 0x08, 0x49, 0xa3, 0x7d);\nDEFINE_GUID(MF_MT_INTERLACE_MODE,      0xe2724bb8, 0xe676, 0x4806, 0xb4, 0xb2, 0xa8, 0xd6, 0xef, 0xb4, 0x4c, 0xcd);\nDEFINE_GUID(MF_MT_MAJOR_TYPE,          0x48eba18e, 0xf8c9, 0x4687, 0xbf, 0x11, 0x0a, 0x74, 0xc9, 0xf9, 0x6a, 0x8f);\nDEFINE_GUID(MF_MT_PIXEL_ASPECT_RATIO,  0xc6376a1e, 0x8d0a, 0x4027, 0xbe, 0x45, 0x6d, 0x9a, 0x0a, 0xd3, 0x9b, 0xb6);\nDEFINE_GUID(MF_MT_SUBTYPE,             0xf7e34c9a, 0x42e8, 0x4714, 0xb7, 0x4b, 0xcb, 0x29, 0xd7, 0x2c, 0x35, 0xe5);\n\nDEFINE_GUID(MFMediaType_Video,         0x73646976, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);\n\ntypedef unsigned __int64 MFWORKITEM_KEY;\n\nHRESULT WINAPI MFCancelWorkItem(MFWORKITEM_KEY key);\nHRESULT WINAPI MFCopyImage(BYTE *dest, LONG deststride, const BYTE *src, LONG srcstride, DWORD width, DWORD lines);\nHRESULT WINAPI MFCreateAttributes(IMFAttributes **attributes, UINT32 size);\nHRESULT WINAPI MFCreateEventQueue(IMFMediaEventQueue **queue);\nHRESULT WINAPI MFCreateMediaType(IMFMediaType **type);\nHRESULT WINAPI MFCreateSample(IMFSample **sample);\nHRESULT WINAPI MFCreateMemoryBuffer(DWORD max_length, IMFMediaBuffer **buffer);\nHRESULT WINAPI MFGetTimerPeriodicity(DWORD *periodicity);\nHRESULT WINAPI MFTEnum(GUID category, UINT32 flags, MFT_REGISTER_TYPE_INFO *input_type,\n                       MFT_REGISTER_TYPE_INFO *output_type, IMFAttributes *attributes,\n                       CLSID **pclsids, UINT32 *pcount);\nHRESULT WINAPI MFTEnumEx(GUID category, UINT32 flags, const MFT_REGISTER_TYPE_INFO *input_type,\n                         const MFT_REGISTER_TYPE_INFO *output_type, IMFActivate ***activate,\n                         UINT32 *pcount);\nHRESULT WINAPI MFLockPlatform(void);\nHRESULT WINAPI MFTRegister(CLSID clsid, GUID category, LPWSTR name, UINT32 flags, UINT32 cinput,\n                           MFT_REGISTER_TYPE_INFO *input_types, UINT32 coutput,\n                           MFT_REGISTER_TYPE_INFO *output_types, IMFAttributes *attributes);\nHRESULT WINAPI MFTRegisterLocal(IClassFactory *factory, REFGUID category, LPCWSTR name,\n                           UINT32 flags, UINT32 cinput, const MFT_REGISTER_TYPE_INFO *input_types,\n                           UINT32 coutput, const MFT_REGISTER_TYPE_INFO* output_types);\nHRESULT WINAPI MFShutdown(void);\nHRESULT WINAPI MFStartup(ULONG version, DWORD flags);\nHRESULT WINAPI MFUnlockPlatform(void);\nHRESULT WINAPI MFTUnregister(CLSID clsid);\nHRESULT WINAPI MFTUnregisterLocal(IClassFactory *factory);\nHRESULT WINAPI MFGetPluginControl(IMFPluginControl**);\n\n#endif /* __WINE_MFAPI_H */\n"
  },
  {
    "path": "wine/windows/mferror.h",
    "content": "/*\n * Copyright (C) 2014 Sebastian Lackner\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_MFERROR_H\n#define __WINE_MFERROR_H\n\n#define MF_E_PLATFORM_NOT_INITIALIZED       _HRESULT_TYPEDEF_(0xc00d36b0)\n#define MF_E_BUFFERTOOSMALL                 _HRESULT_TYPEDEF_(0xc00d36b1)\n#define MF_E_INVALIDREQUEST                 _HRESULT_TYPEDEF_(0xc00d36b2)\n#define MF_E_INVALIDSTREAMNUMBER            _HRESULT_TYPEDEF_(0xc00d36b3)\n#define MF_E_INVALIDMEDIATYPE               _HRESULT_TYPEDEF_(0xc00d36b4)\n#define MF_E_NOTACCEPTING                   _HRESULT_TYPEDEF_(0xc00d36b5)\n#define MF_E_NOT_INITIALIZED                _HRESULT_TYPEDEF_(0xc00d36b6)\n#define MF_E_UNSUPPORTED_REPRESENTATION     _HRESULT_TYPEDEF_(0xc00d36b7)\n#define MF_E_NO_MORE_TYPES                  _HRESULT_TYPEDEF_(0xc00d36b9)\n#define MF_E_UNSUPPORTED_SERVICE            _HRESULT_TYPEDEF_(0xc00d36ba)\n#define MF_E_UNEXPECTED                     _HRESULT_TYPEDEF_(0xc00d36bb)\n#define MF_E_INVALIDNAME                    _HRESULT_TYPEDEF_(0xc00d36bc)\n#define MF_E_INVALIDTYPE                    _HRESULT_TYPEDEF_(0xc00d36bd)\n#define MF_E_INVALID_FILE_FORMAT            _HRESULT_TYPEDEF_(0xc00d36be)\n#define MF_E_INVALIDINDEX                   _HRESULT_TYPEDEF_(0xc00d36bf)\n#define MF_E_INVALID_TIMESTAMP              _HRESULT_TYPEDEF_(0xc00d36c0)\n#define MF_E_UNSUPPORTED_SCHEME             _HRESULT_TYPEDEF_(0xc00d36c3)\n#define MF_E_UNSUPPORTED_BYTESTREAM_TYPE    _HRESULT_TYPEDEF_(0xc00d36c4)\n#define MF_E_UNSUPPORTED_TIME_FORMAT        _HRESULT_TYPEDEF_(0xc00d36c5)\n#define MF_E_NO_SAMPLE_TIMESTAMP            _HRESULT_TYPEDEF_(0xc00d36c8)\n#define MF_E_NO_SAMPLE_DURATION             _HRESULT_TYPEDEF_(0xc00d36c9)\n#define MF_E_INVALID_STREAM_DATA            _HRESULT_TYPEDEF_(0xc00d36cb)\n#define MF_E_RT_UNAVAILABLE                 _HRESULT_TYPEDEF_(0xc00d36cf)\n#define MF_E_UNSUPPORTED_RATE               _HRESULT_TYPEDEF_(0xc00d36d0)\n#define MF_E_THINNING_UNSUPPORTED           _HRESULT_TYPEDEF_(0xc00d36d1)\n#define MF_E_REVERSE_UNSUPPORTED            _HRESULT_TYPEDEF_(0xc00d36d2)\n#define MF_E_UNSUPPORTED_RATE_TRANSITION    _HRESULT_TYPEDEF_(0xc00d36d3)\n#define MF_E_RATE_CHANGE_PREEMPTED          _HRESULT_TYPEDEF_(0xc00d36d4)\n#define MF_E_NOT_FOUND                      _HRESULT_TYPEDEF_(0xc00d36d5)\n#define MF_E_NOT_AVAILABLE                  _HRESULT_TYPEDEF_(0xc00d36d6)\n#define MF_E_NO_CLOCK                       _HRESULT_TYPEDEF_(0xc00d36d7)\n#define MF_S_MULTIPLE_BEGIN                 _HRESULT_TYPEDEF_(0x000d36d8)\n#define MF_E_MULTIPLE_BEGIN                 _HRESULT_TYPEDEF_(0xc00d36d9)\n#define MF_E_MULTIPLE_SUBSCRIBERS           _HRESULT_TYPEDEF_(0xc00d36da)\n#define MF_E_TIMER_ORPHANED                 _HRESULT_TYPEDEF_(0xc00d36db)\n#define MF_E_STATE_TRANSITION_PENDING       _HRESULT_TYPEDEF_(0xc00d36dc)\n#define MF_E_UNSUPPORTED_STATE_TRANSITION   _HRESULT_TYPEDEF_(0xc00d36dd)\n#define MF_E_UNRECOVERABLE_ERROR_OCCURRED   _HRESULT_TYPEDEF_(0xc00d36de)\n#define MF_E_SAMPLE_HAS_TOO_MANY_BUFFERS    _HRESULT_TYPEDEF_(0xc00d36df)\n#define MF_E_SAMPLE_NOT_WRITABLE            _HRESULT_TYPEDEF_(0xc00d36e0)\n#define MF_E_INVALID_KEY                    _HRESULT_TYPEDEF_(0xc00d36e2)\n#define MF_E_BAD_STARTUP_VERSION            _HRESULT_TYPEDEF_(0xc00d36e3)\n#define MF_E_UNSUPPORTED_CAPTION            _HRESULT_TYPEDEF_(0xc00d36e4)\n#define MF_E_INVALID_POSITION               _HRESULT_TYPEDEF_(0xc00d36e5)\n#define MF_E_ATTRIBUTENOTFOUND              _HRESULT_TYPEDEF_(0xc00d36e6)\n#define MF_E_PROPERTY_TYPE_NOT_ALLOWED      _HRESULT_TYPEDEF_(0xc00d36e7)\n\n#define MF_E_TOPO_INVALID_OPTIONAL_NODE             _HRESULT_TYPEDEF_(0xc00d520e)\n#define MF_E_TOPO_CANNOT_FIND_DECRYPTOR             _HRESULT_TYPEDEF_(0xc00d5211)\n#define MF_E_TOPO_CODEC_NOT_FOUND                   _HRESULT_TYPEDEF_(0xc00d5212)\n#define MF_E_TOPO_CANNOT_CONNECT                    _HRESULT_TYPEDEF_(0xc00d5213)\n#define MF_E_TOPO_UNSUPPORTED                       _HRESULT_TYPEDEF_(0xc00d5214)\n#define MF_E_TOPO_INVALID_TIME_ATTRIBUTES           _HRESULT_TYPEDEF_(0xc00d5215)\n#define MF_E_TOPO_LOOPS_IN_TOPOLOGY                 _HRESULT_TYPEDEF_(0xC00d5216)\n#define MF_E_TOPO_MISSING_PRESENTATION_DESCRIPTOR   _HRESULT_TYPEDEF_(0xc00d5217)\n#define MF_E_TOPO_MISSING_STREAM_DESCRIPTOR         _HRESULT_TYPEDEF_(0xc00d5218)\n#define MF_E_TOPO_STREAM_DESCRIPTOR_NOT_SELECTED    _HRESULT_TYPEDEF_(0xc00d5219)\n#define MF_E_TOPO_MISSING_SOURCE                    _HRESULT_TYPEDEF_(0xc00d521a)\n#define MF_E_TOPO_SINK_ACTIVATES_UNSUPPORTED        _HRESULT_TYPEDEF_(0xc00d521b)\n\n#endif  /* __WINE_MFERROR_H */\n"
  },
  {
    "path": "wine/windows/mfidl.idl",
    "content": "/*\n * Copyright 2016 Michael Müller\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"mfobjects.idl\";\nimport \"mftransform.idl\";\n\ntypedef unsigned __int64 TOPOID;\ntypedef LONGLONG  MFTIME;\n\ntypedef enum MF_TOPOLOGY_TYPE\n{\n    MF_TOPOLOGY_OUTPUT_NODE,\n    MF_TOPOLOGY_SOURCESTREAM_NODE,\n    MF_TOPOLOGY_TRANSFORM_NODE,\n    MF_TOPOLOGY_TEE_NODE,\n    MF_TOPOLOGY_MAX = 0xffffffff\n} MF_TOPOLOGY_TYPE;\n\ntypedef enum _MFCLOCK_STATE\n{\n    MFCLOCK_STATE_INVALID,\n    MFCLOCK_STATE_RUNNING,\n    MFCLOCK_STATE_STOPPED,\n    MFCLOCK_STATE_PAUSED\n} MFCLOCK_STATE;\n\ntypedef enum MF_OBJECT_TYPE\n{\n    MF_OBJECT_MEDIASOURCE,\n    MF_OBJECT_BYTESTREAM,\n    MF_OBJECT_INVALID\n} MF_OBJECT_TYPE;\n\ntypedef struct _MFCLOCK_PROPERTIES\n{\n    unsigned __int64 qwCorrelationRate;\n    GUID             guidClockId;\n    DWORD            dwClockFlags;\n    unsigned __int64 qwClockFrequency;\n    DWORD            dwClockTolerance;\n    DWORD            dwClockJitter;\n} MFCLOCK_PROPERTIES;\n\n[\n    object,\n    uuid(2eb1e945-18b8-4139-9b1a-d5d584818530),\n]\ninterface IMFClock : IUnknown\n{\n    HRESULT GetClockCharacteristics([out] DWORD *characteristics);\n    HRESULT GetCorrelatedTime([in] DWORD reserved, [out] LONGLONG *clock_time, [out] MFTIME *system_time);\n    HRESULT GetContinuityKey([out] DWORD *key);\n    HRESULT GetState([in] DWORD reserved, [out] MFCLOCK_STATE *state);\n    HRESULT GetProperties([out] MFCLOCK_PROPERTIES *props);\n}\n\n[\n    object,\n    uuid(83cf873a-f6da-4bc8-823f-bacfd55dc430),\n]\ninterface IMFTopologyNode : IMFAttributes\n{\n    HRESULT SetObject([in] IUnknown *object);\n    HRESULT GetObject([out] IUnknown **object);\n    HRESULT GetNodeType([out] MF_TOPOLOGY_TYPE *type);\n    HRESULT GetTopoNodeID([out] TOPOID *id);\n    HRESULT SetTopoNodeID([in] TOPOID id);\n    HRESULT GetInputCount([out] DWORD *count);\n    HRESULT GetOutputCount([out] DWORD *count);\n    [local] HRESULT ConnectOutput([in] DWORD output_index, [in] IMFTopologyNode *node, [in] DWORD input_index);\n    [local] HRESULT DisconnectOutput([in] DWORD index);\n    HRESULT GetInput([in] DWORD input_index, [out] IMFTopologyNode **node, [out] DWORD *output_index);\n    HRESULT GetOutput([in] DWORD output_index, [out] IMFTopologyNode **node, [out] DWORD *input_index);\n    [local] HRESULT SetOutputPrefType([in] DWORD index, [in] IMFMediaType *type);\n    [local] HRESULT GetOutputPrefType([in] DWORD output_index, [out] IMFMediaType **type);\n    [call_as(GetOutputPrefType)] HRESULT RemoteGetOutputPrefType([in] DWORD index, [out] DWORD *length,\n                                                                 [out, size_is(, *length)] BYTE **data);\n    [local] HRESULT SetInputPrefType([in] DWORD index, [in] IMFMediaType *type);\n    [local] HRESULT GetInputPrefType([in] DWORD index, [out] IMFMediaType **type);\n    [call_as(GetInputPrefType)] HRESULT RemoteGetInputPrefType([in] DWORD index, [out] DWORD *length,\n                                                               [out, size_is(, *length)] BYTE **data);\n    HRESULT CloneFrom([in] IMFTopologyNode *node);\n}\n\n[\n    object,\n    uuid(83cf873a-f6da-4bc8-823f-bacfd55dc433),\n]\ninterface IMFTopology : IMFAttributes\n{\n    HRESULT GetTopologyID([out] TOPOID *id);\n    [local] HRESULT AddNode([in] IMFTopologyNode *node);\n    [local] HRESULT RemoveNode([in] IMFTopologyNode *node);\n    HRESULT GetNodeCount([out] WORD *nodes);\n    HRESULT GetNode([in] WORD index, [out] IMFTopologyNode **node);\n    [local] HRESULT Clear();\n    HRESULT CloneFrom([in] IMFTopology *topology);\n    HRESULT GetNodeByID([in] TOPOID id, [out] IMFTopologyNode **node);\n    HRESULT GetSourceNodeCollection([out] IMFCollection **collection);\n    HRESULT GetOutputNodeCollection([out] IMFCollection **collection);\n}\n\n[\n    object,\n    uuid(90377834-21d0-4dee-8214-ba2e3e6c1127),\n]\ninterface IMFMediaSession : IMFMediaEventGenerator\n{\n    HRESULT SetTopology([in] DWORD flags, [in] IMFTopology *topology);\n    HRESULT ClearTopologies();\n    HRESULT Start([in, unique] const GUID *format, [in, unique] const PROPVARIANT *start);\n    HRESULT Pause();\n    HRESULT Stop();\n    HRESULT Close();\n    HRESULT Shutdown();\n    HRESULT GetClock([out] IMFClock **clock);\n    HRESULT GetSessionCapabilities([out] DWORD *caps);\n    HRESULT GetFullTopology([in] DWORD flags, [in] TOPOID id, [out] IMFTopology **topology);\n}\n\n[\n    object,\n    uuid(fbe5a32d-a497-4b61-bb85-97b1a848a6e3)\n]\ninterface IMFSourceResolver : IUnknown\n{\n    [local] HRESULT CreateObjectFromURL([in] const WCHAR *url, [in] DWORD flags, [in] IPropertyStore *props,\n            [out] MF_OBJECT_TYPE *obj_type, [out] IUnknown **object);\n    [local] HRESULT CreateObjectFromByteStream([in] IMFByteStream *stream, [in] const WCHAR *url, [in] DWORD flags,\n            [in] IPropertyStore *props, [out] MF_OBJECT_TYPE *obj_type, [out] IUnknown **object);\n    [local] HRESULT BeginCreateObjectFromURL([in] const WCHAR *url, [in] DWORD flags, [in] IPropertyStore *props,\n            [out] IUnknown **cancel_cookie, [in] IMFAsyncCallback *callback, [in] IUnknown *unk_state);\n    [call_as(BeginCreateObjectFromURL)] HRESULT RemoteBeginCreateObjectFromURL([in, string] const WCHAR *url,\n            [in] DWORD flags, [in] IPropertyStore *props, [in] IMFRemoteAsyncCallback *callback);\n    [local] HRESULT EndCreateObjectFromURL([in] IMFAsyncResult *result, [out] MF_OBJECT_TYPE *obj_type,\n            [out] IUnknown **object);\n    [call_as(EndCreateObjectFromURL)] HRESULT RemoteEndCreateObjectFromURL([in] IUnknown *result,\n            [out] MF_OBJECT_TYPE *obj_type, [out] IUnknown **object);\n    [local] HRESULT BeginCreateObjectFromByteStream([in] IMFByteStream *stream, [in] const WCHAR *url,\n            [in] DWORD flags, [in] IPropertyStore *props, [out] IUnknown **cancel_cookie,\n            [in] IMFAsyncCallback *callback, [in] IUnknown *unk_state);\n    [call_as(BeginCreateObjectFromByteStream)] HRESULT RemoteBeginCreateObjectFromByteStream([in] IMFByteStream *stream,\n            [in, unique] const WCHAR *url, [in] DWORD flags, [in, unique] IPropertyStore *props,\n            [in] IMFRemoteAsyncCallback *callback);\n    [local] HRESULT EndCreateObjectFromByteStream([in] IMFAsyncResult *result, [out] MF_OBJECT_TYPE *obj_type,\n            [out] IUnknown **object);\n    [call_as(EndCreateObjectFromByteStream)] HRESULT RemoteEndCreateObjectFromByteStream([in] IUnknown *result,\n            [out] MF_OBJECT_TYPE *obj_type, [out] IUnknown **object);\n    [local] HRESULT CanceObjectCreation([in] IUnknown *cancel_cookie);\n}\n\n[\n    object,\n    uuid(e93dcf6c-4b07-4e1e-8123-aa16ed6eadf5)\n]\ninterface IMFMediaTypeHandler : IUnknown\n{\n    [local]\n    HRESULT IsMediaTypeSupported([in] IMFMediaType *in_type, [out] IMFMediaType **out_type);\n\n    [call_as(IsMediaTypeSupported)]\n    HRESULT RemoteIsMediaTypeSupported([in, size_is(size)] BYTE *data, [in] DWORD size,\n        [out, size_is(, *match_count)] BYTE **match, [out] DWORD *match_count);\n\n    HRESULT GetMediaTypeCount([out] DWORD *count);\n\n    [local]\n    HRESULT GetMediaTypeByIndex([in] DWORD index, [out] IMFMediaType **type);\n\n    [call_as(GetMediaTypeByIndex)]\n    HRESULT RemoteGetMediaTypeByIndex([in] DWORD index, [out, size_is(, *count)] BYTE **data,\n        [out] DWORD *count);\n\n    [local]\n    HRESULT SetCurrentMediaType([in] IMFMediaType *type);\n\n    [call_as(SetCurrentMediaType)]\n    HRESULT RemoteSetCurrentMediaType([in, size_is(count)] BYTE *data, [in] DWORD count);\n\n    [local]\n    HRESULT GetCurrentMediaType([out] IMFMediaType **type);\n\n    [call_as(GetCurrentMediaType)]\n    HRESULT RemoteGetCurrentMediaType([out, size_is(, *count)] BYTE **data, [out] DWORD *count);\n\n    HRESULT GetMajorType([out] GUID *type);\n}\n\n[\n    object,\n    uuid(56c03d9c-9dbb-45f5-ab4b-d80f47c05938)\n]\ninterface IMFStreamDescriptor : IMFAttributes\n{\n    HRESULT GetStreamIdentifier([out] DWORD *identifier);\n\n    HRESULT GetMediaTypeHandler([out] IMFMediaTypeHandler **handler);\n}\n\n[\n    object,\n    uuid(f6696e82-74f7-4f3d-a178-8a5e09c3659f)\n]\ninterface IMFClockStateSink : IUnknown\n{\n    HRESULT OnClockStart(\n        [in] MFTIME hnsSystemTime,\n        [in] LONGLONG llClockStartOffset\n    );\n    HRESULT OnClockStop(\n        [in] MFTIME hnssSystemTime\n    );\n    HRESULT OnClockPause(\n        [in] MFTIME hnsSystemTime\n    );\n    HRESULT OnClockRestart(\n        [in] MFTIME hnsSystemTime\n    );\n    HRESULT OnClockSetRate(\n        [in] MFTIME hnsSystemTime,\n        [in] float flRate\n    );\n}\n\n[\n    object,\n    uuid(fa993888-4383-415a-a930-dd472a8cf6f7)\n]\ninterface IMFGetService : IUnknown\n{\n    HRESULT GetService(\n        [in] REFGUID guidService,\n        [in] REFIID riid,\n        [out, iid_is(riid)] LPVOID *ppvObject\n    );\n}\n\ncpp_quote(\"HRESULT WINAPI MFCreateMediaSession(IMFAttributes *config, IMFMediaSession **session);\")\ncpp_quote(\"HRESULT WINAPI MFCreateMFByteStreamOnStream(IStream *stream, IMFByteStream **bytestream);\" )\ncpp_quote(\"HRESULT WINAPI MFCreateSourceResolver(IMFSourceResolver **resolver);\")\ncpp_quote(\"HRESULT WINAPI MFCreateStreamDescriptor(DWORD identifier, DWORD cMediaTypes,\")\ncpp_quote(\"     IMFMediaType **types, IMFStreamDescriptor **descriptor);\")\ncpp_quote(\"HRESULT WINAPI MFCreateTopology(IMFTopology **topology);\")\ncpp_quote(\"HRESULT WINAPI MFGetSupportedMimeTypes(PROPVARIANT *array);\")\ncpp_quote(\"HRESULT WINAPI MFGetService(IUnknown *object, REFGUID service, REFIID iid, void **obj);\")\n"
  },
  {
    "path": "wine/windows/mfobjects.idl",
    "content": "/*\n * Copyright 2015 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\nimport \"propsys.idl\";\nimport \"mediaobj.idl\";\n\ncpp_quote(\"#include <mmreg.h>\")\n#include <mmreg.h>\n\ntypedef ULONGLONG QWORD;\n\ntypedef enum _MF_ATTRIBUTE_TYPE {\n    MF_ATTRIBUTE_UINT32     = VT_UI4,\n    MF_ATTRIBUTE_UINT64     = VT_UI8,\n    MF_ATTRIBUTE_DOUBLE     = VT_R8,\n    MF_ATTRIBUTE_GUID       = VT_CLSID,\n    MF_ATTRIBUTE_STRING     = VT_LPWSTR,\n    MF_ATTRIBUTE_BLOB       = VT_VECTOR | VT_UI1,\n    MF_ATTRIBUTE_IUNKNOWN   = VT_UNKNOWN\n} MF_ATTRIBUTE_TYPE;\n\ntypedef enum _MF_ATTRIBUTES_MATCH_TYPE {\n    MF_ATTRIBUTES_MATCH_OUR_ITEMS      = 0,\n    MF_ATTRIBUTES_MATCH_THEIR_ITEMS    = 1,\n    MF_ATTRIBUTES_MATCH_ALL_ITEMS      = 2,\n    MF_ATTRIBUTES_MATCH_INTERSECTION   = 3,\n    MF_ATTRIBUTES_MATCH_SMALLER        = 4\n} MF_ATTRIBUTES_MATCH_TYPE;\n\n[\n    object,\n    uuid(2cd2d921-c447-44a7-a13c-4adabfc247e3)\n]\ninterface IMFAttributes : IUnknown\n{\n    HRESULT GetItem(REFGUID guidKey, [in, out, ptr] PROPVARIANT *pValue);\n    HRESULT GetItemType(REFGUID guidKey, [out] MF_ATTRIBUTE_TYPE *pType);\n    HRESULT CompareItem(REFGUID guidKey, REFPROPVARIANT Value, [out] BOOL *pbResult);\n    HRESULT Compare(IMFAttributes *pTheirs, MF_ATTRIBUTES_MATCH_TYPE MatchType, [out] BOOL *pbResult);\n    HRESULT GetUINT32(REFGUID guidKey, [out] UINT32 *punValue);\n    HRESULT GetUINT64(REFGUID guidKey, [out] UINT64 *punValue);\n    HRESULT GetDouble(REFGUID guidKey, [out] double *pfValue);\n    HRESULT GetGUID(REFGUID guidKey, [out] GUID *pguidValue);\n    HRESULT GetStringLength(REFGUID guidKey, [out] UINT32 *pcchLength);\n    HRESULT GetString(REFGUID guidKey, [out, size_is(cchBufSize)] LPWSTR pwszValue, UINT32 cchBufSize,\n            [in, out, ptr] UINT32 *pcchLength);\n    HRESULT GetAllocatedString(REFGUID guidKey, [out, size_is(,*pcchLength+1)] LPWSTR *ppwszValue,\n            [out] UINT32 *pcchLength);\n    HRESULT GetBlobSize(REFGUID guidKey, [out] UINT32 *pcbBlobSize);\n    HRESULT GetBlob(REFGUID guidKey, [out, size_is(cbBufSize)] UINT8 *pBuf, UINT32 cbBufSize,\n            [in, out, ptr] UINT32 *pcbBlobSize);\n    HRESULT GetAllocatedBlob(REFGUID guidKey, [out, size_is(,*pcbSize)] UINT8 **ppBuf, [out] UINT32 *pcbSize);\n    HRESULT GetUnknown(REFGUID guidKey, REFIID riid, [out, iid_is(riid)] LPVOID *ppv);\n    HRESULT SetItem(REFGUID guidKey, REFPROPVARIANT Value);\n    HRESULT DeleteItem(REFGUID guidKey);\n    HRESULT DeleteAllItems();\n    HRESULT SetUINT32(REFGUID guidKey, UINT32  unValue);\n    HRESULT SetUINT64(REFGUID guidKey, UINT64  unValue);\n    HRESULT SetDouble(REFGUID guidKey, double fValue);\n    HRESULT SetGUID(REFGUID guidKey, REFGUID guidValue);\n    HRESULT SetString(REFGUID guidKey, [in, string] LPCWSTR wszValue);\n    HRESULT SetBlob(REFGUID guidKey, [in, size_is(cbBufSize)] const UINT8* pBuf, UINT32 cbBufSize);\n    HRESULT SetUnknown(REFGUID guidKey, [in] IUnknown *pUnknown);\n    HRESULT LockStore();\n    HRESULT UnlockStore();\n    HRESULT GetCount([out] UINT32 *pcItems);\n    HRESULT GetItemByIndex(UINT32 unIndex, [out] GUID *pguidKey, [in, out, ptr] PROPVARIANT *pValue);\n    HRESULT CopyAllItems([in] IMFAttributes *pDest);\n}\n\nenum MF_ATTRIBUTE_SERIALIZE_OPTIONS {\n    MF_ATTRIBUTE_SERIALIZE_UNKNOWN_BYREF = 0x00000001\n};\n\n[\n    object,\n    uuid(045fa593-8799-42b8-bc8d-8968c6453507),\n    local\n]\ninterface IMFMediaBuffer : IUnknown\n{\n    HRESULT Lock([out] BYTE **ppbBuffer, [out] DWORD *pcbMaxLength, [out] DWORD *pcbCurrentLength);\n    HRESULT Unlock();\n    HRESULT GetCurrentLength([out] DWORD *pcbCurrentLength);\n    HRESULT SetCurrentLength([in] DWORD cbCurrentLength);\n    HRESULT GetMaxLength([out] DWORD *pcbMaxLength);\n}\n\n[\n    object,\n    uuid(c40a00f2-b93a-4d80-ae8c-5a1c634f58e4),\n    local\n]\ninterface IMFSample : IMFAttributes\n{\n    HRESULT GetSampleFlags([out] DWORD *pdwSampleFlags);\n    HRESULT SetSampleFlags([in] DWORD dwSampleFlags);\n    HRESULT GetSampleTime([out] LONGLONG *phnsSampleTime);\n    HRESULT SetSampleTime([in] LONGLONG hnsSampleTime);\n    HRESULT GetSampleDuration([out] LONGLONG *phnsSampleDuration);\n    HRESULT SetSampleDuration([in] LONGLONG hnsSampleDuration);\n    HRESULT GetBufferCount([out] DWORD *pdwBufferCount);\n    HRESULT GetBufferByIndex([in] DWORD dwIndex, [out] IMFMediaBuffer **ppBuffer);\n    HRESULT ConvertToContiguousBuffer([out] IMFMediaBuffer **ppBuffer);\n    HRESULT AddBuffer([in] IMFMediaBuffer *pBuffer);\n    HRESULT RemoveBufferByIndex([in] DWORD dwIndex);\n    HRESULT RemoveAllBuffers();\n    HRESULT GetTotalLength([out] DWORD *pcbTotalLength);\n    HRESULT CopyToBuffer([in] IMFMediaBuffer *pBuffer);\n}\n\n[\n    object,\n    uuid(7dc9d5f9-9ed9-44ec-9bbf-0600bb589fbb),\n    local\n]\ninterface IMF2DBuffer : IUnknown\n{\n    HRESULT Lock2D([out] BYTE **pbScanline0, [out] LONG *plPitch);\n    HRESULT Unlock2D();\n    HRESULT GetScanline0AndPitch([out] BYTE **pbScanline0, [out] LONG *plPitch);\n    HRESULT IsContiguousFormat([out] BOOL *pfIsContiguous);\n    HRESULT GetContiguousLength([out] DWORD *pcbLength);\n    HRESULT ContiguousCopyTo([out, size_is(cbDestBuffer)] BYTE *pbDestBuffer, [in] DWORD cbDestBuffer);\n    HRESULT ContiguousCopyFrom([in, size_is(cbSrcBuffer)] const BYTE *pbSrcBuffer, [in] DWORD cbSrcBuffer);\n}\n\n[\n    object,\n    uuid(44ae0fa8-ea31-4109-8d2e-4cae4997c555),\n    local\n]\ninterface IMFMediaType : IMFAttributes\n{\n    HRESULT GetMajorType([out] GUID *pguidMajorType);\n    HRESULT IsCompressedFormat([out] BOOL *pfCompressed);\n    HRESULT IsEqual([in] IMFMediaType *pIMediaType, [out] DWORD *pdwFlags);\n    HRESULT GetRepresentation([in] GUID guidRepresentation, [out] LPVOID *ppvRepresentation);\n    HRESULT FreeRepresentation([in] GUID guidRepresentation, [in] LPVOID pvRepresentation);\n}\n\ncpp_quote(\"#define MF_MEDIATYPE_EQUAL_MAJOR_TYPES          0x00000001\")\ncpp_quote(\"#define MF_MEDIATYPE_EQUAL_FORMAT_TYPES         0x00000002\")\ncpp_quote(\"#define MF_MEDIATYPE_EQUAL_FORMAT_DATA          0x00000004\")\ncpp_quote(\"#define MF_MEDIATYPE_EQUAL_FORMAT_USER_DATA     0x00000008\")\n\n[\n    object,\n    uuid(26a0adc3-ce26-4672-9304-69552edd3faf),\n    local\n]\ninterface IMFAudioMediaType : IMFMediaType\n{\n    const WAVEFORMATEX *GetAudioFormat();\n}\n\ntypedef struct {\n    GUID guidMajorType;\n    GUID guidSubtype;\n} MFT_REGISTER_TYPE_INFO;\n\ntypedef enum _MFVideoFlags {\n    MFVideoFlag_PAD_TO_Mask             = 0x00000003,\n    MFVideoFlag_PAD_TO_None             = 0,\n    MFVideoFlag_PAD_TO_4x3              = 0x00000001,\n    MFVideoFlag_PAD_TO_16x9             = 0x00000002,\n    MFVideoFlag_SrcContentHintMask      = 0x0000001c,\n    MFVideoFlag_SrcContentHintNone      = 0,\n    MFVideoFlag_SrcContentHint16x9      = 0x00000004,\n    MFVideoFlag_SrcContentHint235_1     = 0x00000008,\n    MFVideoFlag_AnalogProtected         = 0x00000020,\n    MFVideoFlag_DigitallyProtected      = 0x00000040,\n    MFVideoFlag_ProgressiveContent      = 0x00000080,\n    MFVideoFlag_FieldRepeatCountMask    = 0x00000700,\n    MFVideoFlag_FieldRepeatCountShift   = 8,\n    MFVideoFlag_ProgressiveSeqReset     = 0x00000800,\n    MFVideoFlag_PanScanEnabled          = 0x00020000,\n    MFVideoFlag_LowerFieldFirst         = 0x00040000,\n    MFVideoFlag_BottomUpLinearRep       = 0x00080000,\n    MFVideoFlags_DXVASurface            = 0x00100000,\n    MFVideoFlags_RenderTargetSurface    = 0x00400000,\n    MFVideoFlags_ForceQWORD             = 0x7fffffff\n} MFVideoFlags;\n\ntypedef struct _MFRatio {\n    DWORD Numerator;\n    DWORD Denominator;\n} MFRatio;\n\ntypedef struct _MFOffset {\n    WORD  fract;\n    short value;\n} MFOffset;\n\ntypedef struct _MFVideoArea {\n    MFOffset OffsetX;\n    MFOffset OffsetY;\n    SIZE     Area;\n} MFVideoArea;\n\ntypedef enum _MFVideoChromaSubsampling {\n    MFVideoChromaSubsampling_Unknown                        = 0,\n    MFVideoChromaSubsampling_ProgressiveChroma              = 0x8,\n    MFVideoChromaSubsampling_Horizontally_Cosited           = 0x4,\n    MFVideoChromaSubsampling_Vertically_Cosited             = 0x2,\n    MFVideoChromaSubsampling_Vertically_AlignedChromaPlanes = 0x1,\n    MFVideoChromaSubsampling_MPEG2\n        = MFVideoChromaSubsampling_Horizontally_Cosited\n        | MFVideoChromaSubsampling_Vertically_AlignedChromaPlanes,\n    MFVideoChromaSubsampling_MPEG1\n        = MFVideoChromaSubsampling_Vertically_AlignedChromaPlanes,\n    MFVideoChromaSubsampling_DV_PAL\n        = MFVideoChromaSubsampling_Horizontally_Cosited\n        | MFVideoChromaSubsampling_Vertically_Cosited,\n    MFVideoChromaSubsampling_Cosited\n        = MFVideoChromaSubsampling_Horizontally_Cosited\n        | MFVideoChromaSubsampling_Vertically_Cosited\n        | MFVideoChromaSubsampling_Vertically_AlignedChromaPlanes,\n    MFVideoChromaSubsampling_Last        = MFVideoChromaSubsampling_Cosited + 1,\n    MFVideoChromaSubsampling_ForceDWORD  = 0x7fffffff\n} MFVideoChromaSubsampling;\n\ntypedef enum _MFVideoInterlaceMode {\n    MFVideoInterlace_Unknown                     = 0,\n    MFVideoInterlace_Progressive                 = 2,\n    MFVideoInterlace_FieldInterleavedUpperFirst  = 3,\n    MFVideoInterlace_FieldInterleavedLowerFirst  = 4,\n    MFVideoInterlace_FieldSingleUpper            = 5,\n    MFVideoInterlace_FieldSingleLower            = 6,\n    MFVideoInterlace_MixedInterlaceOrProgressive = 7,\n    MFVideoInterlace_Last,\n    MFVideoInterlace_ForceDWORD                  = 0x7fffffff\n} MFVideoInterlaceMode;\n\ntypedef enum _MFVideoTransferFunction {\n    MFVideoTransFunc_Unknown      = 0,\n    MFVideoTransFunc_10           = 1,\n    MFVideoTransFunc_18           = 2,\n    MFVideoTransFunc_20           = 3,\n    MFVideoTransFunc_22           = 4,\n    MFVideoTransFunc_709          = 5,\n    MFVideoTransFunc_240M         = 6,\n    MFVideoTransFunc_sRGB         = 7,\n    MFVideoTransFunc_28           = 8,\n    MFVideoTransFunc_Log_100      = 9,\n    MFVideoTransFunc_Log_316      = 10,\n    MFVideoTransFunc_709_sym      = 11,\n    MFVideoTransFunc_Last,\n    MFVideoTransFunc_ForceDWORD   = 0x7fffffff\n} MFVideoTransferFunction;\n\ntypedef enum _MFVideoTransferMatrix {\n    MFVideoTransferMatrix_Unknown      = 0,\n    MFVideoTransferMatrix_BT709        = 1,\n    MFVideoTransferMatrix_BT601        = 2,\n    MFVideoTransferMatrix_SMPTE240M    = 3,\n    MFVideoTransferMatrix_Last,\n    MFVideoTransferMatrix_ForceDWORD   = 0x7fffffff\n} MFVideoTransferMatrix;\n\ntypedef enum _MFVideoPrimaries {\n    MFVideoPrimaries_Unknown         = 0,\n    MFVideoPrimaries_reserved        = 1,\n    MFVideoPrimaries_BT709           = 2,\n    MFVideoPrimaries_BT470_2_SysM    = 3,\n    MFVideoPrimaries_BT470_2_SysBG   = 4,\n    MFVideoPrimaries_SMPTE170M       = 5,\n    MFVideoPrimaries_SMPTE240M       = 6,\n    MFVideoPrimaries_EBU3213         = 7,\n    MFVideoPrimaries_SMPTE_C         = 8,\n    MFVideoPrimaries_Last,\n    MFVideoPrimaries_ForceDWORD      = 0x7fffffff\n} MFVideoPrimaries;\n\ntypedef enum _MFVideoLighting {\n  MFVideoLighting_Unknown      = 0,\n  MFVideoLighting_bright       = 1,\n  MFVideoLighting_office       = 2,\n  MFVideoLighting_dim          = 3,\n  MFVideoLighting_dark         = 4,\n  MFVideoLighting_Last,\n  MFVideoLighting_ForceDWORD   = 0x7fffffff\n} MFVideoLighting;\n\ntypedef enum _MFNominalRange {\n    MFNominalRange_Unknown   = 0,\n    MFNominalRange_Normal    = 1,\n    MFNominalRange_Wide      = 2,\n    MFNominalRange_0_255     = 1,\n    MFNominalRange_16_235    = 2,\n    MFNominalRange_48_208    = 3,\n    MFNominalRange_64_127    = 4\n} MFNominalRange;\n\ntypedef struct _MFVideoInfo {\n    DWORD                    dwWidth;\n    DWORD                    dwHeight;\n    MFRatio                  PixelAspectRatio;\n    MFVideoChromaSubsampling SourceChromaSubsampling;\n    MFVideoInterlaceMode     InterlaceMode;\n    MFVideoTransferFunction  TransferFunction;\n    MFVideoPrimaries         ColorPrimaries;\n    MFVideoTransferMatrix    TransferMatrix;\n    MFVideoLighting          SourceLighting;\n    MFRatio                  FramesPerSecond;\n    MFNominalRange           NominalRange;\n    MFVideoArea              GeometricAperture;\n    MFVideoArea              MinimumDisplayAperture;\n    MFVideoArea              PanScanAperture;\n    unsigned __int64         VideoFlags;\n} MFVideoInfo;\n\ntypedef struct _MFVideoCompressedInfo {\n    LONGLONG AvgBitrate;\n    LONGLONG AvgBitErrorRate;\n    DWORD    MaxKeyFrameSpacing;\n} MFVideoCompressedInfo;\n\ntypedef struct _MFARGB {\n    BYTE rgbBlue;\n    BYTE rgbGreen;\n    BYTE rgbRed;\n    BYTE rgbAlpha;\n} MFARGB;\n\ntypedef struct __MFAYUVSample {\n    BYTE bCrValue;\n    BYTE bCbValue;\n    BYTE bYValue;\n    BYTE bSampleAlpha8;\n} MFAYUVSample;\n\ntypedef union _MFPaletteEntry {\n    MFARGB       ARGB;\n    MFAYUVSample AYCbCr;\n} MFPaletteEntry;\n\ntypedef struct _MFVideoSurfaceInfo {\n    DWORD          Format;\n    DWORD          PaletteEntries;\n    MFPaletteEntry Palette[];\n} MFVideoSurfaceInfo;\n\ntypedef struct _MFVIDEOFORMAT {\n    DWORD                 dwSize;\n    MFVideoInfo           videoInfo;\n    GUID                  guidFormat;\n    MFVideoCompressedInfo compressedInfo;\n    MFVideoSurfaceInfo    surfaceInfo;\n} MFVIDEOFORMAT;\n\ntypedef enum _MFStandardVideoFormat {\n  MFStdVideoFormat_reserved       = 0,\n  MFStdVideoFormat_NTSC,\n  MFStdVideoFormat_PAL,\n  MFStdVideoFormat_DVD_NTSC,\n  MFStdVideoFormat_DVD_PAL,\n  MFStdVideoFormat_DV_PAL,\n  MFStdVideoFormat_DV_NTSC,\n  MFStdVideoFormat_ATSC_SD480i,\n  MFStdVideoFormat_ATSC_HD1080i,\n  MFStdVideoFormat_ATSC_HD720p\n} MFStandardVideoFormat;\n\n[\n    object,\n    uuid(b99f381f-a8f9-47a2-a5af-ca3a225a3890),\n    local\n]\ninterface IMFVideoMediaType : IMFMediaType\n{\n    const MFVIDEOFORMAT *GetVideoFormat();\n\n    HRESULT GetVideoRepresentation([in] GUID guidRepresentation, [out] LPVOID *ppvRepresentation,\n            [in] LONG lStride);\n}\n\n[\n    object,\n    uuid(ac6b7889-0740-4d51-8619-905994a55cc6)\n]\ninterface IMFAsyncResult : IUnknown\n{\n    HRESULT GetState([out] IUnknown **ppunkState);\n    HRESULT GetStatus();\n    HRESULT SetStatus([in] HRESULT hrStatus);\n    HRESULT GetObject([out] IUnknown **ppObject);\n    [local] IUnknown *GetStateNoAddRef();\n}\n\n[\n    object,\n    uuid(a27003cf-2354-4f2a-8d6a-ab7cff15437e),\n]\ninterface IMFAsyncCallback : IUnknown\n{\n    HRESULT GetParameters([out] DWORD *pdwFlags, [out] DWORD *pdwQueue);\n    HRESULT Invoke([in] IMFAsyncResult *pAsyncResult);\n}\n\n[\n    object,\n    uuid(a27003d0-2354-4f2a-8d6a-ab7cff15437e),\n]\ninterface IMFRemoteAsyncCallback : IUnknown\n{\n    HRESULT Invoke([in] HRESULT hr, [in] IUnknown *pRemoteResult);\n}\n\ncpp_quote(\"#define MFASYNC_FAST_IO_PROCESSING_CALLBACK  0x0001\")\ncpp_quote(\"#define MFASYNC_SIGNAL_CALLBACK              0x0002\" )\n\ncpp_quote(\"#define MFASYNC_CALLBACK_QUEUE_UNDEFINED      0x00000000\")\ncpp_quote(\"#define MFASYNC_CALLBACK_QUEUE_STANDARD       0x00000001\")\ncpp_quote(\"#define MFASYNC_CALLBACK_QUEUE_RT             0x00000002\")\ncpp_quote(\"#define MFASYNC_CALLBACK_QUEUE_IO             0x00000003\")\ncpp_quote(\"#define MFASYNC_CALLBACK_QUEUE_TIMER          0x00000004\")\ncpp_quote(\"#define MFASYNC_CALLBACK_QUEUE_LONG_FUNCTION  0x00000007\")\ncpp_quote(\"#define MFASYNC_CALLBACK_QUEUE_PRIVATE_MASK   0xffff0000\")\ncpp_quote(\"#define MFASYNC_CALLBACK_QUEUE_ALL            0xffffffff\")\n\ntypedef DWORD MediaEventType;\n\n[\n    object,\n    uuid(df598932-f10c-4e39-bba2-c308f101daa3)\n]\ninterface IMFMediaEvent : IMFAttributes\n{\n    HRESULT GetType([out] MediaEventType *pmet);\n    HRESULT GetExtendedType([out] GUID *pguidExtendedType);\n    HRESULT GetStatus([out] HRESULT *phrStatus);\n    HRESULT GetValue([out] PROPVARIANT *pvValue);\n}\n\n[\n    object,\n    uuid(2cd0bd52-bcd5-4b89-b62c-eadc0c031e7d)\n]\ninterface IMFMediaEventGenerator : IUnknown\n{\n    HRESULT GetEvent([in] DWORD dwFlags, [out] IMFMediaEvent **ppEvent);\n\n    [local] HRESULT BeginGetEvent([in] IMFAsyncCallback *pCallback, [in] IUnknown *punkState);\n    [call_as(BeginGetEvent)] HRESULT RemoteBeginGetEvent([in] IMFRemoteAsyncCallback *pCallback);\n\n    [local] HRESULT EndGetEvent([in] IMFAsyncResult *pResult, [out] IMFMediaEvent **ppEvent);\n    [call_as(EndGetEvent)] HRESULT RemoteEndGetEvent([in] IUnknown *pResult, [out] DWORD *pcbEvent,\n                                   [out, size_is(,*pcbEvent)] BYTE **ppbEvent);\n\n    HRESULT QueueEvent([in] MediaEventType met, [in] REFGUID guidExtendedType, [in] HRESULT hrStatus,\n            [in, unique] const PROPVARIANT *pvValue);\n}\n\ntypedef enum _MFBYTESTREAM_SEEK_ORIGIN {\n    msoBegin,\n    msoCurrent\n} MFBYTESTREAM_SEEK_ORIGIN;\n\n[\n    object,\n    uuid(ad4c1b00-4bf7-422f-9175-756693d9130d),\n]\ninterface IMFByteStream : IUnknown\n{\n    HRESULT GetCapabilities([out] DWORD *pdwCapabilities);\n    HRESULT GetLength([out] QWORD *pqwLength);\n    HRESULT SetLength([in] QWORD qwLength);\n    HRESULT GetCurrentPosition([out] QWORD *pqwPosition);\n    HRESULT SetCurrentPosition([in] QWORD qwPosition);\n    HRESULT IsEndOfStream([out] BOOL *pfEndOfStream);\n\n    [local] HRESULT Read([in] BYTE* pb, [in] ULONG cb, [out] ULONG *pcbRead);\n    [local] HRESULT BeginRead([in] BYTE *pb, [in] ULONG cb, [in] IMFAsyncCallback *pCallback, [in] IUnknown *punkState);\n    [local] HRESULT EndRead([in] IMFAsyncResult *pResult, [out] ULONG *pcbRead);\n    [local] HRESULT Write([in] const BYTE *pb, [in] ULONG cb, [out] ULONG *pcbWritten);\n    [local] HRESULT BeginWrite([in] const BYTE *pb, [in] ULONG cb, [in] IMFAsyncCallback *pCallback, [in] IUnknown *punkState);\n    [local] HRESULT EndWrite([in] IMFAsyncResult *pResult, [out] ULONG *pcbWritten);\n    [local] HRESULT Seek([in] MFBYTESTREAM_SEEK_ORIGIN SeekOrigin, [in] LONGLONG llSeekOffset, [in] DWORD dwSeekFlags,\n                    [out] QWORD *pqwCurrentPosition);\n\n    HRESULT Flush();\n    HRESULT Close();\n}\n\ncpp_quote(\"#define MFBYTESTREAM_IS_READABLE                0x00000001\")\ncpp_quote(\"#define MFBYTESTREAM_IS_WRITABLE                0x00000002\")\ncpp_quote(\"#define MFBYTESTREAM_IS_SEEKABLE                0x00000004\")\ncpp_quote(\"#define MFBYTESTREAM_IS_REMOTE                  0x00000008\")\ncpp_quote(\"#define MFBYTESTREAM_IS_DIRECTORY               0x00000080\")\ncpp_quote(\"#define MFBYTESTREAM_HAS_SLOW_SEEK              0x00000100\")\ncpp_quote(\"#define MFBYTESTREAM_IS_PARTIALLY_DOWNLOADED    0x00000200\")\ncpp_quote(\"#define MFBYTESTREAM_SHARE_WRITE                0x00000400\")\n\ncpp_quote(\"#define MFBYTESTREAM_SEEK_FLAG_CANCEL_PENDING_IO  0x00000001\")\n\ncpp_quote(\"EXTERN_GUID(MF_BYTESTREAM_ORIGIN_NAME,        0xfc358288,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);\")\ncpp_quote(\"EXTERN_GUID(MF_BYTESTREAM_CONTENT_TYPE,       0xfc358289,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);\")\ncpp_quote(\"EXTERN_GUID(MF_BYTESTREAM_DURATION,           0xfc35828a,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);\")\ncpp_quote(\"EXTERN_GUID(MF_BYTESTREAM_LAST_MODIFIED_TIME, 0xfc35828b,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);\")\ncpp_quote(\"EXTERN_GUID(MF_BYTESTREAM_IFO_FILE_URI,       0xfc35828c,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);\")\ncpp_quote(\"EXTERN_GUID(MF_BYTESTREAM_DLNA_PROFILE_ID,    0xfc35828d,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);\")\n\ntypedef enum MF_FILE_ACCESSMODE {\n    MF_ACCESSMODE_READ      = 1,\n    MF_ACCESSMODE_WRITE     = 2,\n    MF_ACCESSMODE_READWRITE = 3\n} MF_FILE_ACCESSMODE;\n\ntypedef enum  {\n    MF_OPENMODE_FAIL_IF_NOT_EXIST   = 0,\n    MF_OPENMODE_FAIL_IF_EXIST       = 1,\n    MF_OPENMODE_RESET_IF_EXIST      = 2,\n    MF_OPENMODE_APPEND_IF_EXIST     = 3,\n    MF_OPENMODE_DELETE_IF_EXIST     = 4\n} MF_FILE_OPENMODE;\n\ntypedef enum  {\n    MF_FILEFLAGS_NONE                  = 0x00000000,\n    MF_FILEFLAGS_NOBUFFERING           = 0x00000001,\n    MF_FILEFLAGS_ALLOW_WRITE_SHARING   = 0x00000002\n} MF_FILE_FLAGS;\n\n[\n    object,\n    uuid(5bc8a76b-869a-46a3-9b03-fa218a66aebe)\n]\ninterface IMFCollection : IUnknown\n{\n    HRESULT GetElementCount([out] DWORD *pcElements);\n    HRESULT GetElement([in] DWORD dwElementIndex, [out] IUnknown **ppUnkElement);\n    HRESULT AddElement([in] IUnknown *pUnkElement);\n    HRESULT RemoveElement([in] DWORD dwElementIndex, [out] IUnknown **ppUnkElement);\n    HRESULT InsertElementAt([in] DWORD dwIndex, [in] IUnknown *pUnknown);\n    HRESULT RemoveAllElements();\n}\n\n[\n    object,\n    uuid(7fee9e9a-4a89-47a6-899c-b6a53a70fb67),\n    pointer_default(unique)\n]\ninterface IMFActivate : IMFAttributes\n{\n    HRESULT ActivateObject([in] REFIID riid, [out, iid_is(riid), retval] void **ppv);\n    HRESULT ShutdownObject();\n    HRESULT DetachObject();\n}\n\ntypedef enum _MF_Plugin_Type {\n    MF_Plugin_Type_MFT           = 0,\n    MF_Plugin_Type_MediaSource   = 1\n} MF_Plugin_Type;\n\n[\n    object,\n    local,\n    uuid(5c6c44bf-1db6-435b-9249-e8cd10fdec96),\n    pointer_default(unique)\n]\ninterface IMFPluginControl : IUnknown\n{\n   HRESULT GetPreferredClsid(DWORD pluginType, LPCWSTR selector, CLSID *clsid);\n   HRESULT GetPreferredClsidByIndex(DWORD pluginType, DWORD index, LPWSTR *selector, CLSID *clsid);\n   HRESULT SetPreferredClsid(DWORD pluginType, LPCWSTR selector, const CLSID *clsid);\n   HRESULT IsDisabled(DWORD pluginType, REFCLSID clsid);\n   HRESULT GetDisabledByIndex(DWORD pluginType, DWORD index, CLSID *clsid);\n   HRESULT SetDisabled(DWORD pluginType, REFCLSID clsid, BOOL disabled);\n}\n\n[\n    object,\n    uuid(36f846fc-2256-48b6-b58e-e2b638316581),\n    local\n]\ninterface IMFMediaEventQueue : IUnknown\n{\n    HRESULT GetEvent([in] DWORD flags, [out] IMFMediaEvent **event);\n    HRESULT BeginGetEvent([in] IMFAsyncCallback *callback, [in] IUnknown *state);\n    HRESULT EndGetEvent([in] IMFAsyncResult *result, [out] IMFMediaEvent **event);\n    HRESULT QueueEvent([in] IMFMediaEvent *event);\n    HRESULT QueueEventParamVar([in] MediaEventType met, [in] REFGUID type,\n        [in] HRESULT status, [in, unique] const PROPVARIANT *value);\n    HRESULT QueueEventParamUnk([in] MediaEventType met, [in] REFGUID type,\n        [in] HRESULT status, [in, unique] IUnknown *unk);\n    HRESULT Shutdown();\n}\n"
  },
  {
    "path": "wine/windows/mfreadwrite.idl",
    "content": "/*\n * Copyright (C) 2017 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"mfobjects.idl\";\nimport \"mftransform.idl\";\n\nenum\n{\n    MF_SOURCE_READER_INVALID_STREAM_INDEX = 0xffffffff,\n    MF_SOURCE_READER_ALL_STREAMS          = 0xfffffffe,\n    MF_SOURCE_READER_ANY_STREAM           = 0xfffffffe,\n    MF_SOURCE_READER_FIRST_AUDIO_STREAM   = 0xfffffffd,\n    MF_SOURCE_READER_FIRST_VIDEO_STREAM   = 0xfffffffc,\n    MF_SOURCE_READER_MEDIASOURCE          = 0xffffffff,\n    MF_SOURCE_READER_CURRENT_TYPE_INDEX   = 0xffffffff\n};\n\ntypedef enum MF_SOURCE_READER_FLAG\n{\n    MF_SOURCE_READERF_ERROR                   = 0x001,\n    MF_SOURCE_READERF_ENDOFSTREAM             = 0x002,\n    MF_SOURCE_READERF_NEWSTREAM               = 0x004,\n    MF_SOURCE_READERF_NATIVEMEDIATYPECHANGED  = 0x010,\n    MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED = 0x020,\n    MF_SOURCE_READERF_STREAMTICK              = 0x100,\n    MF_SOURCE_READERF_ALLEFFECTSREMOVED       = 0x200\n} MF_SOURCE_READER_FLAG;\n\ntypedef struct _MF_SINK_WRITER_STATISTICS\n{\n    DWORD    cb;\n    LONGLONG llLastTimestampReceived;\n    LONGLONG llLastTimestampEncoded;\n    LONGLONG llLastTimestampProcessed;\n    LONGLONG llLastStreamTickReceived;\n    LONGLONG llLastSinkSampleRequest;\n    QWORD    qwNumSamplesReceived;\n    QWORD    qwNumSamplesEncoded;\n    QWORD    qwNumSamplesProcessed;\n    QWORD    qwNumStreamTicksReceived;\n    DWORD    dwByteCountQueued;\n    QWORD    qwByteCountProcessed;\n    DWORD    dwNumOutstandingSinkSampleRequests;\n    DWORD    dwAverageSampleRateReceived;\n    DWORD    dwAverageSampleRateEncoded;\n    DWORD    dwAverageSampleRateProcessed;\n} MF_SINK_WRITER_STATISTICS;\n\ncpp_quote(\"EXTERN_GUID(CLSID_MFReadWriteClassFactory,           0x48e2ed0f, 0x98c2, 0x4a37, 0xbe, 0xd5, 0x16, 0x63, 0x12, 0xdd, 0xd8, 0x3f);\")\ncpp_quote(\"EXTERN_GUID(CLSID_MFSourceReader,                    0x1777133c, 0x0881, 0x411b, 0xa5, 0x77, 0xad, 0x54, 0x5f, 0x07, 0x14, 0xc4);\")\ncpp_quote(\"EXTERN_GUID(CLSID_MFSinkWriter,                      0xa3bbfb17, 0x8273, 0x4e52, 0x9e, 0x0e, 0x97, 0x39, 0xdc, 0x88, 0x79, 0x90);\")\n\ncpp_quote(\"EXTERN_GUID(MF_SINK_WRITER_ASYNC_CALLBACK,           0x48cb183e, 0x7b0b, 0x46f4, 0x82, 0x2e, 0x5e, 0x1d, 0x2d, 0xda, 0x43, 0x54);\")\ncpp_quote(\"EXTERN_GUID(MF_SINK_WRITER_DISABLE_THROTTLING,       0x08b845d8, 0x2b74, 0x4afe, 0x9d, 0x53, 0xbe, 0x16, 0xd2, 0xd5, 0xae, 0x4f);\")\ncpp_quote(\"EXTERN_GUID(MF_SINK_WRITER_D3D_MANAGER,              0xec822da2, 0xe1e9, 0x4b29, 0xa0, 0xd8, 0x56, 0x3c, 0x71, 0x9f, 0x52, 0x69);\")\ncpp_quote(\"EXTERN_GUID(MF_SINK_WRITER_ENCODER_CONFIG,           0xad91cd04, 0xa7cc, 0x4ac7, 0x99, 0xb6, 0xa5, 0x7b, 0x9a, 0x4a, 0x7c, 0x70);\")\n\ncpp_quote(\"EXTERN_GUID(MF_READWRITE_DISABLE_CONVERTERS,         0x98d5b065, 0x1374, 0x4847, 0x8d, 0x5d, 0x31, 0x52, 0x0f, 0xee, 0x71, 0x56);\")\ncpp_quote(\"EXTERN_GUID(MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS, 0xa634a91c, 0x822b, 0x41b9, 0xa4, 0x94, 0x4d, 0xe4, 0x64, 0x36, 0x12, 0xb0);\")\ncpp_quote(\"EXTERN_GUID(MF_READWRITE_MMCSS_CLASS,                0x39384300, 0xd0eb, 0x40b1, 0x87, 0xa0, 0x33, 0x18, 0x87, 0x1b, 0x5a, 0x53);\")\ncpp_quote(\"EXTERN_GUID(MF_READWRITE_MMCSS_PRIORITY,             0x43ad19ce, 0xf33f, 0x4ba9, 0xa5, 0x80, 0xe4, 0xcd, 0x12, 0xf2, 0xd1, 0x44);\")\ncpp_quote(\"EXTERN_GUID(MF_READWRITE_MMCSS_CLASS_AUDIO,          0x430847da, 0x0890, 0x4b0e, 0x93, 0x8c, 0x05, 0x43, 0x32, 0xc5, 0x47, 0xe1);\")\ncpp_quote(\"EXTERN_GUID(MF_READWRITE_MMCSS_PRIORITY_AUDIO,       0x273db885, 0x2de2, 0x4db2, 0xa6, 0xa7, 0xfd, 0xb6, 0x6f, 0xb4, 0x0b, 0x61);\")\ncpp_quote(\"EXTERN_GUID(MF_READWRITE_D3D_OPTIONAL,               0x216479d9, 0x3071, 0x42ca, 0xbb, 0x6c, 0x4c, 0x22, 0x10, 0x2e, 0x1d, 0x18);\")\n\ninterface IMFMediaSource;\n\n[\n    object,\n    uuid(70ae66f2-c809-4e4f-8915-bdcb406b7993),\n    local\n]\ninterface IMFSourceReader : IUnknown\n{\n    HRESULT GetStreamSelection([in] DWORD index, [out] BOOL *selected);\n    HRESULT SetStreamSelection([in] DWORD index, [in] BOOL selected);\n    HRESULT GetNativeMediaType([in] DWORD index, [in] DWORD typeindex, [out] IMFMediaType **type);\n    HRESULT GetCurrentMediaType([in] DWORD index, [out] IMFMediaType **type);\n    HRESULT SetCurrentMediaType([in] DWORD index, [in, out] DWORD *reserved, [in] IMFMediaType *type);\n    HRESULT SetCurrentPosition([in] REFGUID format, [in] REFPROPVARIANT position);\n    HRESULT ReadSample([in] DWORD index, [in] DWORD flags, [out] DWORD *actualindex, [out] DWORD *sampleflags,\n                       [out] LONGLONG *timestamp, [out] IMFSample **sample);\n    HRESULT Flush([in] DWORD index);\n    HRESULT GetServiceForStream([in] DWORD index, [in] REFGUID service, [in] REFIID riid, [out] void **object);\n    HRESULT GetPresentationAttribute([in] DWORD index, [in] REFGUID guid, [out] PROPVARIANT *attr);\n}\n\n[\n    object,\n    uuid(3137f1cd-fe5e-4805-a5d8-fb477448cb3d),\n    local\n]\ninterface IMFSinkWriter : IUnknown\n{\n    HRESULT AddStream([in] IMFMediaType *type, [out] DWORD *index);\n    HRESULT SetInputMediaType([in] DWORD index, [in] IMFMediaType *type, [in] IMFAttributes *parameters);\n    HRESULT BeginWriting(void);\n    HRESULT WriteSample([in] DWORD index, [in] IMFSample *sample);\n    HRESULT SendStreamTick([in] DWORD index, [in] LONGLONG timestamp);\n    HRESULT PlaceMarker([in] DWORD index, [in] void *context);\n    HRESULT NotifyEndOfSegment([in] DWORD index);\n    HRESULT Flush([in] DWORD index);\n    HRESULT Finalize(void);\n    HRESULT GetServiceForStream([in] DWORD index, [in] REFGUID service, [in] REFIID riid, [out] void **object);\n    HRESULT GetStatistics([in] DWORD index, [out] MF_SINK_WRITER_STATISTICS *stats);\n}\n\n[\n    object,\n    uuid(588d72ab-5Bc1-496a-8714-b70617141b25),\n    local\n]\ninterface IMFSinkWriterEx : IMFSinkWriter\n{\n    HRESULT GetTransformForStream([in] DWORD index, [in] DWORD tindex, [out] GUID *category,\n                                  [out] IMFTransform **transform);\n}\n\n[\n    object,\n    uuid(e7fe2e12-661c-40da-92f9-4f002ab67627),\n    local\n]\ninterface IMFReadWriteClassFactory : IUnknown\n{\n    HRESULT CreateInstanceFromURL([in] REFCLSID clsid, [in] LPCWSTR url, [in] IMFAttributes *attributes,\n                                  [in] REFIID riid, [out, iid_is(riid)] void **object );\n\n    HRESULT CreateInstanceFromObject([in] REFCLSID clsid, [in] IUnknown *unk, [in] IMFAttributes *attributes,\n                                     [in] REFIID riid, [out, iid_is(riid)] void **object );\n}\n\ncpp_quote( \"HRESULT WINAPI MFCreateSourceReaderFromByteStream(IMFByteStream *stream, IMFAttributes *attributes,\" )\ncpp_quote( \"                                                  IMFSourceReader **reader);\" )\ncpp_quote( \"HRESULT WINAPI MFCreateSourceReaderFromMediaSource(IMFMediaSource *source, IMFAttributes *attributes,\" )\ncpp_quote( \"                                                   IMFSourceReader **reader);\" )\n"
  },
  {
    "path": "wine/windows/mftransform.idl",
    "content": "/*\n * Copyright 2017 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"mfobjects.idl\";\n\ntypedef struct _MFT_INPUT_STREAM_INFO\n{\n    LONGLONG hnsMaxLatency;\n    DWORD    dwFlags;\n    DWORD    cbSize;\n    DWORD    cbMaxLookahead;\n    DWORD    cbAlignment;\n} MFT_INPUT_STREAM_INFO;\n\ntypedef struct _MFT_OUTPUT_STREAM_INFO\n{\n    DWORD dwFlags;\n    DWORD cbSize;\n    DWORD cbAlignment;\n} MFT_OUTPUT_STREAM_INFO;\n\ntypedef struct _MFT_OUTPUT_DATA_BUFFER\n{\n    DWORD         dwStreamID;\n    IMFSample     *pSample;\n    DWORD         dwStatus;\n    IMFCollection *pEvents;\n} MFT_OUTPUT_DATA_BUFFER, *PMFT_OUTPUT_DATA_BUFFER;\n\ntypedef enum _MFT_MESSAGE_TYPE\n{\n    MFT_MESSAGE_COMMAND_FLUSH          = 0x00000000,\n    MFT_MESSAGE_COMMAND_DRAIN          = 0x00000001,\n    MFT_MESSAGE_SET_D3D_MANAGER        = 0x00000002,\n    MFT_MESSAGE_DROP_SAMPLES           = 0x00000003,\n    MFT_MESSAGE_COMMAND_TICK           = 0x00000004,\n    MFT_MESSAGE_NOTIFY_BEGIN_STREAMING = 0x10000000,\n    MFT_MESSAGE_NOTIFY_END_STREAMING   = 0x10000001,\n    MFT_MESSAGE_NOTIFY_END_OF_STREAM   = 0x10000002,\n    MFT_MESSAGE_NOTIFY_START_OF_STREAM = 0x10000003,\n    MFT_MESSAGE_COMMAND_MARKER         = 0x20000000\n} MFT_MESSAGE_TYPE;\n\n[\n    object,\n    uuid(bf94c121-5b05-4e6f-8000-ba598961414d)\n]\ninterface IMFTransform : IUnknown\n{\n    HRESULT GetStreamLimits([out] DWORD *input_minimum, [out] DWORD *input_maximum, [out] DWORD *output_minimum,\n                            [out] DWORD *output_maximum);\n\n    HRESULT GetStreamCount([out] DWORD *inputs,  [out] DWORD *outputs);\n\n    HRESULT GetStreamIDs([in] DWORD input_size, [out,size_is(input_size)] DWORD *inputs,\n                         [in] DWORD output_size, [out,size_is(output_size)] DWORD *outputs);\n\n    HRESULT GetInputStreamInfo([in] DWORD id, [out] MFT_INPUT_STREAM_INFO *info);\n\n    HRESULT GetOutputStreamInfo([in] DWORD id, [out] MFT_OUTPUT_STREAM_INFO *info);\n\n    HRESULT GetAttributes([out] IMFAttributes **attributes);\n\n    HRESULT GetInputStreamAttributes([in] DWORD id, [out] IMFAttributes **attributes);\n\n    HRESULT GetOutputStreamAttributes([in] DWORD id, [out] IMFAttributes **attributes);\n\n    HRESULT DeleteInputStream([in] DWORD id);\n\n    HRESULT AddInputStreams([in] DWORD streams, [in] DWORD *ids);\n\n    HRESULT GetInputAvailableType([in] DWORD id, [in] DWORD index, [out] IMFMediaType **type);\n\n    HRESULT GetOutputAvailableType([in] DWORD id, [in] DWORD index, [out] IMFMediaType **type);\n\n    HRESULT SetInputType(DWORD id, [in] IMFMediaType *type, [in] DWORD flags);\n\n    HRESULT SetOutputType(DWORD id, [in] IMFMediaType *type, [in] DWORD flags);\n\n    HRESULT GetInputCurrentType([in] DWORD id, [out] IMFMediaType **type);\n\n    HRESULT GetOutputCurrentType([in] DWORD id, [out] IMFMediaType **type);\n\n    HRESULT GetInputStatus([in] DWORD id, [out] DWORD *flags);\n\n    HRESULT GetOutputStatus([out] DWORD *flags);\n\n    HRESULT SetOutputBounds([in] LONGLONG lower, [in] LONGLONG upper);\n\n    HRESULT ProcessEvent([in] DWORD id, [in] IMFMediaEvent *event);\n\n    HRESULT ProcessMessage([in] MFT_MESSAGE_TYPE message, [in] ULONG_PTR param);\n\n    [local] HRESULT ProcessInput([in] DWORD id, [in] IMFSample *sample, [in] DWORD flags);\n\n    [local] HRESULT ProcessOutput([in] DWORD flags, [in] DWORD count, [in,out,size_is(count)] MFT_OUTPUT_DATA_BUFFER *samples,\n                                  [out] DWORD *status);\n}\n"
  },
  {
    "path": "wine/windows/midles.h",
    "content": "/*\n * NDR Serialization Services\n *\n * Copyright (c) 2007 Robert Shearman for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_MIDLES_H__\n#define __WINE_MIDLES_H__\n\n#include <rpcndr.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef enum\n{\n    MES_ENCODE,\n    MES_DECODE,\n    MES_ENCODE_NDR64\n} MIDL_ES_CODE;\n\ntypedef enum\n{\n    MES_INCREMENTAL_HANDLE,\n    MES_FIXED_BUFFER_HANDLE,\n    MES_DYNAMIC_BUFFER_HANDLE\n} MIDL_ES_HANDLE_STYLE;\n\ntypedef void (__RPC_USER * MIDL_ES_ALLOC)(void *,char **,unsigned int *);\ntypedef void (__RPC_USER * MIDL_ES_WRITE)(void *,char *,unsigned int);\ntypedef void (__RPC_USER * MIDL_ES_READ)(void *,char **,unsigned int *);\n\ntypedef struct _MIDL_ES_MESSAGE\n{\n    MIDL_STUB_MESSAGE       StubMsg;\n    MIDL_ES_CODE            Operation;\n    void                   *UserState;\n    ULONG                   MesVersion : 8;\n    ULONG                   HandleStyle : 8;\n    ULONG                   HandleFlags : 8;\n    ULONG                   Reserve : 8;\n    MIDL_ES_ALLOC           Alloc;\n    MIDL_ES_WRITE           Write;\n    MIDL_ES_READ            Read;\n    unsigned char          *Buffer;\n    ULONG                   BufferSize;\n    unsigned char         **pDynBuffer;\n    ULONG                  *pEncodedSize;\n    RPC_SYNTAX_IDENTIFIER   InterfaceId;\n    ULONG                   ProcNumber;\n    ULONG                   AlienDataRep;\n    ULONG                   IncrDataSize;\n    ULONG                   ByteCount;\n} MIDL_ES_MESSAGE, *PMIDL_ES_MESSAGE;\n\ntypedef PMIDL_ES_MESSAGE MIDL_ES_HANDLE;\n\ntypedef struct _MIDL_TYPE_PICKLING_INFO\n{\n    ULONG       Version;\n    ULONG       Flags;\n    UINT_PTR    Reserved[3];\n} MIDL_TYPE_PICKLING_INFO, *PMIDL_TYPE_PICKLING_INFO;\n\nRPC_STATUS RPC_ENTRY\n MesEncodeIncrementalHandleCreate(void *,MIDL_ES_ALLOC,MIDL_ES_WRITE,handle_t *);\nRPC_STATUS RPC_ENTRY\n MesDecodeIncrementalHandleCreate(void *,MIDL_ES_READ,handle_t *);\nRPC_STATUS RPC_ENTRY\n MesIncrementalHandleReset(handle_t,void *,MIDL_ES_ALLOC,MIDL_ES_WRITE,MIDL_ES_READ,MIDL_ES_CODE);\n\nRPC_STATUS RPC_ENTRY\n MesEncodeFixedBufferHandleCreate(char *,ULONG,ULONG *,handle_t *);\nRPC_STATUS RPC_ENTRY\n MesEncodeDynBufferHandleCreate(char **,ULONG *,handle_t *);\nRPC_STATUS RPC_ENTRY\n MesDecodeBufferHandleCreate(char *,ULONG,handle_t *);\nRPC_STATUS RPC_ENTRY\n MesBufferHandleReset(handle_t,ULONG,MIDL_ES_CODE,char **,ULONG,ULONG *);\n\nRPC_STATUS RPC_ENTRY\n MesHandleFree(handle_t);\n\nRPC_STATUS RPC_ENTRY\n MesInqProcEncodingId(handle_t,PRPC_SYNTAX_IDENTIFIER,ULONG *);\n\nSIZE_T RPC_ENTRY\n NdrMesSimpleTypeAlignSize(handle_t);\nvoid RPC_ENTRY\n NdrMesSimpleTypeDecode(handle_t,void *,short);\nvoid RPC_ENTRY\n NdrMesSimpleTypeEncode(handle_t,const MIDL_STUB_DESC *,const void *,short);\n\nSIZE_T RPC_ENTRY\n NdrMesTypeAlignSize(handle_t,const MIDL_STUB_DESC *,PFORMAT_STRING,const void *);\nvoid RPC_ENTRY\n NdrMesTypeEncode(handle_t,const MIDL_STUB_DESC *,PFORMAT_STRING,const void *);\nvoid RPC_ENTRY\n NdrMesTypeDecode(handle_t,const MIDL_STUB_DESC *,PFORMAT_STRING,void *);\n\nSIZE_T RPC_ENTRY\n NdrMesTypeAlignSize2(handle_t,const MIDL_TYPE_PICKLING_INFO *,const MIDL_STUB_DESC *,PFORMAT_STRING,const void *);\nvoid RPC_ENTRY\n NdrMesTypeEncode2(handle_t,const MIDL_TYPE_PICKLING_INFO *,const MIDL_STUB_DESC *,PFORMAT_STRING,const void *);\nvoid RPC_ENTRY\n NdrMesTypeDecode2(handle_t,const MIDL_TYPE_PICKLING_INFO *,const MIDL_STUB_DESC *,PFORMAT_STRING,void *);\nvoid RPC_ENTRY\n NdrMesTypeFree2(handle_t,const MIDL_TYPE_PICKLING_INFO *,const MIDL_STUB_DESC *,PFORMAT_STRING,void *);\n\nvoid RPC_VAR_ENTRY\n NdrMesProcEncodeDecode(handle_t,const MIDL_STUB_DESC *,PFORMAT_STRING,...);\nCLIENT_CALL_RETURN RPC_VAR_ENTRY\n NdrMesProcEncodeDeocde2(handle_t,const MIDL_STUB_DESC *,PFORMAT_STRING,...);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_MIDLES_H__ */\n"
  },
  {
    "path": "wine/windows/mimeinfo.idl",
    "content": "/*\n * Copyright (C) 2005 Vijay Kiran Kamuju\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"objidl.idl\";\n\n[\n  local,\n  object,\n  uuid(f77459a0-bf9a-11cf-ba4e-00c04fd70816),\n  pointer_default(unique)\n]\ninterface IMimeInfo : IUnknown\n{\n    typedef [unique] IMimeInfo *LPMIMEINFO;\n\n    HRESULT GetMimeCLSIDMapping( [out] UINT      *pcTypes,\n                                 [out] LPCSTR  * *ppszTypes,\n                                 [out] CLSID   * *ppclsID );\n}\n\ncpp_quote(\"#define SID_IMimeInfo IID_IMimeInfo\")\n"
  },
  {
    "path": "wine/windows/mimeole.idl",
    "content": "/*\n * Copyright 2007 Robert Shearman for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"ocidl.idl\";\nimport \"objidl.idl\";\nimport \"propidl.idl\";\n\n#define DECLARE_HANDLE(name) typedef void *name\n\ninterface IMimeMessageCallback;\ninterface IMimeEnumAddressTypes;\ninterface IMimeMessageParts;\ninterface IMimeMessageTree;\ninterface IMimeBody;\ninterface IMimeEnumProperties;\n\ncpp_quote(\"DEFINE_GUID(CLSID_IMimeBody,      0xfd853cdb, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);\")\ncpp_quote(\"DEFINE_GUID(CLSID_IMimeAllocator, 0xfd853cdd, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);\")\ncpp_quote(\"DEFINE_GUID(CLSID_IMimeMessage,   0xfd853ce3, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);\")\ncpp_quote(\"DEFINE_GUID(CLSID_IMimeSecurity,  0xfd853cde, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);\")\ncpp_quote(\"DEFINE_GUID(CLSID_IVirtualStream, 0xfd853cdf, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);\")\ncpp_quote(\"DEFINE_GUID(CLSID_IMimeHtmlProtocol,0x5300401,0xbcbc, 0x11d0, 0x85, 0xe3, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);\")\ncpp_quote(\"DEFINE_GUID(CLSID_MimeEdit,       0x1c82ead9, 0x508e, 0x11d1, 0x8d, 0xcf, 0x0, 0xc0, 0x4f, 0xb9, 0x51, 0xf9);\")\n\ncpp_quote(\"#define MIME_E_REG_CREATE_KEY         0x800cce01\")\ncpp_quote(\"#define MIME_E_REG_QUERY_INFO         0x800cce02\")\ncpp_quote(\"#define MIME_E_INVALID_ENCTYPE        0x800cce03\")\ncpp_quote(\"#define MIME_E_BOUNDARY_MISMATCH      0x800cce04\")\ncpp_quote(\"#define MIME_E_NOT_FOUND              0x800cce05\")\ncpp_quote(\"#define MIME_E_NO_DATA                0x800cce05\")\ncpp_quote(\"#define MIME_E_BUFFER_TOO_SMALL       0x800cce06\")\ncpp_quote(\"#define MIME_E_INVALID_ITEM_FLAGS     0x800cce07\")\ncpp_quote(\"#define MIME_E_ONE_LINE_ITEME         0x800cce08\")\ncpp_quote(\"#define MIME_E_INVALID_HANDLE         0x800cce09\")\ncpp_quote(\"#define MIME_E_CHARSET_TRANSLATE      0x800cce0a\")\ncpp_quote(\"#define MIME_E_NOT_INITIALIZED        0x800cce0b\")\n\ncpp_quote(\"#define MIME_E_INVALID_OPTION_VALUE   0x800cce1f\")\ncpp_quote(\"#define MIME_E_INVALID_OPTION_ID      0x800cce20\")\ncpp_quote(\"#define MIME_E_INVALID_HEADER_NAME    0x800cce21\")\ncpp_quote(\"#define MIME_E_NOT_BOUND              0x800cce22\")\ncpp_quote(\"#define MIME_E_MAX_SIZE_TOO_SMALL     0x800cce23\")\ncpp_quote(\"#define MIME_E_MULTIPART_HAS_CHILDREN 0x800cce25\")\ncpp_quote(\"#define MIME_E_INVALID_PROP_FLAGS     0x800cce26\")\ncpp_quote(\"#define MIME_E_INVALID_ADDRESS_TYPE   0x800cce27\")\ncpp_quote(\"#define MIME_E_INVALID_OBJECT_IID     0x800cce28\")\ncpp_quote(\"#define MIME_E_MLANG_DLL_NOT_FOUND    0x800cce29\")\ncpp_quote(\"#define MIME_E_ROOT_NOT_EMPTY         0x800cce2a\")\ncpp_quote(\"#define MIME_E_MLANG_BAD_DLL          0x800cce2b\")\ncpp_quote(\"#define MIME_E_REG_OPEN_KEY           0x800cce2c\")\ncpp_quote(\"#define MIME_E_INVALID_INET_DATE      0x800cce2d\")\ncpp_quote(\"#define MIME_E_INVALID_BODYTYPE       0x800cce2e\")\ncpp_quote(\"#define MIME_E_INVALID_DELETE_TYPE    0x800cce2f\")\ncpp_quote(\"#define MIME_E_OPTION_HAS_NO_VALUE    0x800cce30\")\ncpp_quote(\"#define MIME_E_INVALID_CHARSET_TYPE   0x800cce31\")\n\ncpp_quote(\"#define MIME_E_INVALID_TEXT_TYPE      0x800cce38\")\n\ncpp_quote(\"#define MIME_E_SECURITY_NOOP          0x800cceb1\")\ncpp_quote(\"#define MIME_S_SECURITY_NOOP          0x000cceb1\")\n\ncpp_quote(\"typedef enum tagMIMEPROPID {\")\ncpp_quote(\"    PID_HDR_NEWSGROUP  = 2,\")\ncpp_quote(\"    PID_HDR_NEWSGROUPS = 3,\")\ncpp_quote(\"    PID_HDR_REFS       = 4,\")\ncpp_quote(\"    PID_HDR_SUBJECT    = 5,\")\ncpp_quote(\"    PID_HDR_FROM       = 6,\")\ncpp_quote(\"    PID_HDR_MESSAGEID  = 7,\")\ncpp_quote(\"    PID_HDR_RETURNPATH = 8,\")\ncpp_quote(\"    PID_HDR_RR         = 9,\")\ncpp_quote(\"    PID_HDR_RETRCPTO   = 10,\")\ncpp_quote(\"    PID_HDR_APPARTO    = 11,\")\ncpp_quote(\"    PID_HDR_DATE       = 12,\")\ncpp_quote(\"    PID_HDR_RECEIVED   = 13,\")\ncpp_quote(\"    PID_HDR_REPLYTO    = 14,\")\ncpp_quote(\"    PID_HDR_XMAILER    = 15,\")\ncpp_quote(\"    PID_HDR_BCC        = 16,\")\ncpp_quote(\"    PID_HDR_MIMEVER    = 17,\")\ncpp_quote(\"    PID_HDR_CNTTYPE    = 18,\")\ncpp_quote(\"    PID_HDR_CNTXFER    = 19,\")\ncpp_quote(\"    PID_HDR_CNTID      = 20,\")\ncpp_quote(\"    PID_HDR_CNTDESC    = 21,\")\ncpp_quote(\"    PID_HDR_CNTDISP    = 22,\")\ncpp_quote(\"    PID_HDR_CNTBASE    = 23,\")\ncpp_quote(\"    PID_HDR_CNTLOC     = 24,\")\ncpp_quote(\"    PID_HDR_TO         = 25,\")\ncpp_quote(\"    PID_HDR_PATH       = 26,\")\ncpp_quote(\"    PID_HDR_FOLLOWUPTO = 27,\")\ncpp_quote(\"    PID_HDR_EXPIRES    = 28,\")\ncpp_quote(\"    PID_HDR_CC         = 29,\")\ncpp_quote(\"    PID_HDR_CONTROL    = 30,\")\ncpp_quote(\"    PID_HDR_DISTRIB    = 31,\")\ncpp_quote(\"    PID_HDR_KEYWORDS   = 32,\")\ncpp_quote(\"    PID_HDR_SUMMARY    = 33,\")\ncpp_quote(\"    PID_HDR_APPROVED   = 34,\")\ncpp_quote(\"    PID_HDR_LINES      = 35,\")\ncpp_quote(\"    PID_HDR_XREF       = 36,\")\ncpp_quote(\"    PID_HDR_ORG        = 37,\")\ncpp_quote(\"    PID_HDR_XNEWSRDR   = 38,\")\ncpp_quote(\"    PID_HDR_XPRI       = 39,\")\ncpp_quote(\"    PID_HDR_XMSPRI     = 40,\")\ncpp_quote(\"    PID_PAR_FILENAME   = 41,\")\ncpp_quote(\"    PID_PAR_BOUNDARY   = 42,\")\ncpp_quote(\"    PID_PAR_CHARSET    = 43,\")\ncpp_quote(\"    PID_PAR_NAME       = 44,\")\ncpp_quote(\"    PID_ATT_FILENAME   = 45,\")\ncpp_quote(\"    PID_ATT_GENFNAME   = 46,\")\ncpp_quote(\"    PID_ATT_PRITYPE    = 47,\")\ncpp_quote(\"    PID_ATT_SUBTYPE    = 48,\")\ncpp_quote(\"    PID_ATT_NORMSUBJ   = 49,\")\ncpp_quote(\"    PID_ATT_ILLEGAL    = 50,\")\ncpp_quote(\"    PID_ATT_RENDERED   = 51,\")\ncpp_quote(\"    PID_ATT_SENTTIME   = 52,\")\ncpp_quote(\"    PID_ATT_RECVTIME   = 53,\")\ncpp_quote(\"    PID_ATT_PRIORITY   = 54,\")\ncpp_quote(\"    PID_HDR_COMMENT    = 55,\")\ncpp_quote(\"    PID_HDR_ENCODING   = 56,\")\ncpp_quote(\"    PID_HDR_ENCRYPTED  = 57,\")\ncpp_quote(\"    PID_HDR_OFFSETS    = 58,\")\ncpp_quote(\"    PID_HDR_XUNSENT    = 59,\")\ncpp_quote(\"    PID_HDR_ARTICLEID  = 60,\")\ncpp_quote(\"    PID_HDR_SENDER     = 61,\")\ncpp_quote(\"    PID_ATT_SERVER     = 62,\")\ncpp_quote(\"    PID_ATT_ACCOUNT    = 63,\")\ncpp_quote(\"    PID_ATT_UIDL       = 64,\")\ncpp_quote(\"    PID_ATT_STOREMSGID = 65,\")\ncpp_quote(\"    PID_ATT_USERNAME   = 66,\")\ncpp_quote(\"    PID_ATT_FORWARDTO  = 67,\")\ncpp_quote(\"    PID_ATT_STOREFOLDERID = 68,\")\ncpp_quote(\"    PID_ATT_GHOSTED       = 69,\")\ncpp_quote(\"    PID_ATT_UNCACHEDSIZE  = 70,\")\ncpp_quote(\"    PID_ATT_COMBINED      = 71,\")\ncpp_quote(\"    PID_ATT_AUTOINLINED   = 72,\")\ncpp_quote(\"    PID_HDR_DISP_NOTIFICATION_TO = 73,\")\ncpp_quote(\"    PID_PAR_REPLYTYPE     = 74,\")\ncpp_quote(\"    PID_PAR_FORMAT        = 75,\")\ncpp_quote(\"    PID_ATT_FORMAT        = 76,\")\ncpp_quote(\"    PID_HDR_INREPLYTO     = 77,\")\ncpp_quote(\"    PID_ATT_ACCOUNTNAME   = 78,\")\ncpp_quote(\"    PID_LAST              = 79,\")\ncpp_quote(\"} MIMEPROPID;\")\n\ncpp_quote(\"#define ISPIDSTR(_name)               (((DWORD_PTR)(_name) >> 16) == 0)\")\ncpp_quote(\"#define STRTOPID(_name)               ((DWORD)((DWORD_PTR)((LPCSTR)(_name))))\")\ncpp_quote(\"#define PIDTOSTR(_id)                 ((LPCSTR)((DWORD_PTR)(_id)))\")\n\ncpp_quote(\"#define TYPEDID_ID(_typedid)          (((ULONG)(_typedid))>>16)\")\ncpp_quote(\"#define TYPEDID_MASK                  ((ULONG)0xffff)\")\ncpp_quote(\"#define TYPEDID_TYPE(t)               ((VARTYPE)((t) & TYPEDID_MASK))\")\n\ncpp_quote(\"#define OID_ALLOW_8BIT_HEADER         (0x00010000 | VT_BOOL)\")\ncpp_quote(\"#define OID_CBMAX_HEADER_LINE         (0x00020000 | VT_UI4)\")\ncpp_quote(\"#define OID_SAVE_FORMAT               (0x00030000 | VT_UI4)\")\ncpp_quote(\"#define OID_WRAP_BODY_TEXT            (0x00040000 | VT_BOOL)\")\ncpp_quote(\"#define OID_CBMAX_BODY_LINE           (0x00050000 | VT_UI4)\")\ncpp_quote(\"#define OID_TRANSMIT_BODY_ENCODING    (0x00060000 | VT_UI4)\")\ncpp_quote(\"#define OID_TRANSMIT_TEXT_ENCODING    (0x00070000 | VT_UI4)\")\ncpp_quote(\"#define OID_GENERATE_MESSAGE_ID       (0x00080000 | VT_BOOL)\")\ncpp_quote(\"#define OID_HIDE_TNEF_ATTACHMENTS     (0x000e0000 | VT_BOOL)\")\ncpp_quote(\"#define OID_CLEANUP_TREE_ON_SAVE      (0x000f0000 | VT_BOOL)\")\ncpp_quote(\"#define OID_BODY_REMOVE_NBSP          (0x00140000 | VT_BOOL)\")\ncpp_quote(\"#define OID_DEFAULT_BODY_CHARSET      (0x00150000 | VT_UI4)\")\ncpp_quote(\"#define OID_DEFAULT_HEADER_CHARSET    (0x00160000 | VT_UI4)\")\ncpp_quote(\"#define OID_DBCS_ESCAPE_IS_8BIT       (0x00170000 | VT_BOOL)\")\ncpp_quote(\"#define OID_SECURITY_TYPE             (0x00180000 | VT_UI4)\")\ncpp_quote(\"#define OID_SECURITY_HWND_OWNER       (0x00320000 | VT_UI4)\")\ncpp_quote(\"#define OID_HEADER_RELOAD_TYPE        (0x00370000 | VT_UI4)\")\ncpp_quote(\"#define OID_CAN_INLINE_TEXT_BODIES    (0x00380000 | VT_BOOL)\")\ncpp_quote(\"#define OID_SHOW_MACBINARY            (0x00390000 | VT_BOOL)\")\ncpp_quote(\"#define OID_SAVEBODY_KEEPBOUNDARY     (0x00400000 | VT_BOOL)\")\n\ncpp_quote(\"#define OID_SECURITY_2KEY_CERT_BAG    (0x00590000 | VT_VECTOR | VT_UI4)\")\ncpp_quote(\"#define OID_SECURITY_2KEY_CERT_BAG_64 (0x00590000 | VT_VECTOR | VT_UI8)\")\n\n[\n    uuid(e4b28371-83b0-11d0-8259-00c04fd85ab4),\n    version(1.0)\n]\nlibrary MIMEOLE\n{\n    importlib(\"stdole2.tlb\");\n\n    DECLARE_HANDLE(HCHARSET);\n    DECLARE_HANDLE(HBODY);\n    DECLARE_HANDLE(HHEADERROW);\n\n    typedef HCHARSET *LPHCHARSET;\n    typedef HBODY *LPHBODY;\n    typedef HHEADERROW *LPHHEADERROW;\n    typedef DWORD TYPEDID;\n    typedef const PROPVARIANT *LPCPROPVARIANT;\n    typedef const BLOB *LPCBLOB;\n\n    typedef enum tagRELOADTYPE\n    {\n        RELOAD_HEADER_NONE,\n        RELOAD_HEADER_RESET,\n        RELOAD_HEADER_APPEND,\n        RELOAD_HEADER_REPLACE,\n    } RELOADTYPE;\n\n    typedef enum tagMIMESAVETYPE\n    {\n        SAVE_RFC822,\n        SAVE_RFC1521,\n    } MIMESAVETYPE;\n\n    typedef enum tagCSETAPPLYTYPE\n    {\n        CSET_APPLY_UNTAGGED,\n        CSET_APPLY_ALL,\n        CSET_APPLY_TAG_ALL,\n    } CSETAPPLYTYPE;\n\n    typedef enum tagENCODINGTYPE\n    {\n        IET_BINARY,\n        IET_BASE64,\n        IET_UUENCODE,\n        IET_QP,\n        IET_7BIT,\n        IET_8BIT,\n        IET_INETCSET,\n        IET_UNICODE,\n        IET_RFC1522,\n        IET_ENCODED,\n        IET_CURRENT,\n        IET_UNKNOWN,\n        IET_BINHEX40,\n        IET_LAST\n    } ENCODINGTYPE;\n\n    const SHORT IET_DECODED = IET_BINARY;\n\n    const SHORT CCHMAX_HEADER_LINE = 1000;\n\n    [\n        uuid(c5588349-7f86-11d0-8252-00c04fd85ab4),\n        object\n    ]\n    interface IMimeInternational : IUnknown\n    {\n        typedef [unique] IMimeInternational *LPMIMEINTERNATIONAL;\n        typedef DWORD CODEPAGEID;\n\n        const CODEPAGEID CP_USASCII = 1252;\n        const CODEPAGEID CP_UNICODE = 1200;\n        const CODEPAGEID CP_JAUTODETECT = 50932;\n        const CODEPAGEID CP_KAUTODETECT = 50949;\n        const CODEPAGEID CP_ISO2022JPESC = 50221;\n        const CODEPAGEID CP_ISO2022JPSIO = 50222;\n\n        const SHORT CCHMAX_CSET_NAME = 128;\n        const SHORT CCHMAX_LANG_NAME = 128;\n        const SHORT CCHMAX_FACE_NAME = 128;\n\n        typedef struct tagINETCSETINFO\n        {\n            CHAR        szName[CCHMAX_CSET_NAME];\n            HCHARSET    hCharset;\n            CODEPAGEID  cpiWindows;\n            CODEPAGEID  cpiInternet;\n            DWORD       dwReserved1;\n        } INETCSETINFO, *LPINETCSETINFO;\n\n        typedef enum tagINETLANGMASK\n        {\n            ILM_FAMILY          = 0x01,\n            ILM_NAME            = 0x02,\n            ILM_BODYCSET        = 0x04,\n            ILM_HEADERCSET      = 0x08,\n            ILM_WEBCSET         = 0x10,\n            ILM_FIXEDFONT       = 0x20,\n            ILM_VARIABLEFONT    = 0x40,\n        } INETLANGMASK;\n\n        typedef struct tagCODEPAGEINFO\n        {\n            DWORD dwMask;\n            CODEPAGEID cpiCodePage;\n            BOOL fIsValidCodePage;\n            ULONG ulMaxCharSize;\n            BOOL fInternetCP;\n            CODEPAGEID cpiFamily;\n            CHAR szName[CCHMAX_LANG_NAME];\n            CHAR szBodyCset[CCHMAX_CSET_NAME];\n            CHAR szHeaderCset[CCHMAX_CSET_NAME];\n            CHAR szWebCset[CCHMAX_CSET_NAME];\n            CHAR szFixedFont[CCHMAX_FACE_NAME];\n            CHAR szVariableFont[CCHMAX_FACE_NAME];\n            ENCODINGTYPE ietNewsDefault;\n            ENCODINGTYPE ietMailDefault;\n            DWORD dwReserved1;\n        } CODEPAGEINFO, *LPCODEPAGEINFO;\n\n        typedef struct tagRFC1522INFO\n        {\n            BOOL fRfc1522Allowed;\n            BOOL fRfc1522Used;\n            BOOL fAllow8bit;\n            HCHARSET hRfc1522Cset;\n        } RFC1522INFO, *LPRFC1522INFO;\n\n        typedef enum tagCHARSETTYPE\n        {\n            CHARSET_BODY,\n            CHARSET_HEADER,\n            CHARSET_WEB,\n        } CHARSETTYPE;\n\n\n        HRESULT SetDefaultCharset(\n            [in]        HCHARSET hCharset);\n        HRESULT GetDefaultCharset(\n            [out]       LPHCHARSET phCharset);\n        HRESULT GetCodePageCharset(\n            [in]        CODEPAGEID cpiCodePage,\n            [in]        CHARSETTYPE ctCsetType,\n            [out]       LPHCHARSET phCharset);\n        HRESULT FindCharset(\n            [in]        LPCSTR pszCharset,\n            [out]       LPHCHARSET phCharset);\n        HRESULT GetCharsetInfo(\n            [in]        HCHARSET hCharset,\n            [in, out]   LPINETCSETINFO pCsetInfo);\n        HRESULT GetCodePageInfo(\n            [in]        CODEPAGEID cpiCodePage,\n            [in, out]   LPCODEPAGEINFO pCodePageInfo);\n        HRESULT CanConvertCodePages(\n            [in]        CODEPAGEID cpiSource,\n            [in]        CODEPAGEID cpiDest);\n        HRESULT DecodeHeader(\n            [in]        HCHARSET hCharset,\n            [in]        LPCSTR pszData,\n            [in, out]   LPPROPVARIANT pDecoded,\n            [in, out]   LPRFC1522INFO pRfc1522Info);\n        HRESULT EncodeHeader(\n            [in]        HCHARSET hCharset,\n            [in]        LPPROPVARIANT pData,\n            [out]       LPSTR *ppszEncoded,\n            [in, out]   LPRFC1522INFO pRfc1522Info);\n        HRESULT ConvertBuffer(\n            [in]        CODEPAGEID cpiSource,\n            [in]        CODEPAGEID cpiDest,\n            [in]        LPBLOB pIn,\n            [in, out]   LPBLOB pOut,\n            [out]       ULONG *pcbRead);\n        HRESULT ConvertString(\n            [in]        CODEPAGEID cpiSource,\n            [in]        CODEPAGEID cpiDest,\n            [in]        LPPROPVARIANT pIn,\n            [in, out]   LPPROPVARIANT pOut);\n        HRESULT MLANG_ConvertInetReset(void);\n        HRESULT MLANG_ConvertInetString(\n            [in]        CODEPAGEID cpiSource,\n            [in]        CODEPAGEID cpiDest,\n            [in]        LPCSTR pSource,\n            [in]        int *pnSizeOfSource,\n            [in,out,unique]  LPSTR pDestination,\n            [in]        int *pnDstSize);\n        HRESULT Rfc1522Decode(\n            [in]        LPCSTR pszValue,\n            [in,ref]    LPSTR pszCharset,\n            [in]        ULONG cchmax,\n            [out]       LPSTR *ppszDecoded);\n        HRESULT Rfc1522Encode(\n            [in]        LPCSTR pszValue,\n            [in]        HCHARSET hCharset,\n            [out]       LPSTR *ppszEncoded);\n    }\n\n    [\n        uuid(c5588353-7f86-11d0-8252-00c04fd85ab4),\n        object\n    ]\n    interface IMimeSecurity : IUnknown\n    {\n        typedef [unique] IMimeSecurity *LPMIMESECURITY;\n\n        cpp_quote(\"#ifdef __WINE_WINCRYPT_H\")\n        cpp_quote(\"typedef PCCERT_CONTEXT PCX509CERT;\")\n        cpp_quote(\"#else\")\n        typedef const void *PCX509CERT;\n        typedef void *HCERTSTORE;\n        cpp_quote(\"#endif\")\n\n        typedef BLOB THUMBBLOB;\n        typedef void *HCAPICERTSTORE;\n\n        cpp_quote(\"#define MST_NONE             0x00000000\")\n        cpp_quote(\"#define MST_THIS_SIGN        0x00000001\")\n        cpp_quote(\"#define MST_THIS_ENCRYPT     0x00000002\")\n        cpp_quote(\"#define MST_BLOB_FLAG        0x00000004\")\n        cpp_quote(\"#define MST_THIS_BLOBSIGN    (MST_BLOB_FLAG | MST_THIS_SIGN)\")\n        cpp_quote(\"#define MST_CHILD_SIGN       0x00000100\")\n        cpp_quote(\"#define MST_CHILD_ENCRYPT    0x00000200\")\n        cpp_quote(\"#define MST_SUBMSG_SIGN      0x00001000\")\n        cpp_quote(\"#define MST_SUBMSG_ENCRYPT   0x00002000\")\n        cpp_quote(\"#define MST_RECEIPT_REQUEST  0x00010000\")\n        cpp_quote(\"#define MST_CLASS_SMIME_V1   0x00000000\")\n        cpp_quote(\"#define MST_CLASS_PGP        0x01000000\")\n\n        typedef enum tagCERTSTATE\n        {\n            CERTIFICATE_OK,\n            CERTIFICATE_NOT_PRESENT,\n            CERTIFICATE_EXPIRED,\n            CERTIFICATE_CHAIN_TOO_LONG,\n            CERTIFICATE_MISSING_ISSUER,\n            CERTIFICATE_CRL_LISTED,\n            CERTIFICATE_NOT_TRUSTED,\n            CERTIFICATE_INVALID,\n            CERTIFICATE_ERROR,\n            CERTIFICATE_NOPRINT,\n            CERTIFICATE_UNKNOWN\n        } CERTSTATE;\n\n        typedef enum tagCERTNAMETYPE\n        {\n            SIMPLE,\n            OID,\n            X500,\n        } CERTNAMETYPE;\n\n        typedef enum tagCERTDATAID\n        {\n            CDID_EMAIL,\n            CDID_MAX\n        } CERTDATAID;\n\n        typedef struct tagX509CERTRESULT\n        {\n            DWORD       cEntries;\n            CERTSTATE  *rgcs;\n            PCX509CERT *rgpCert;\n        } X509CERTRESULT, *PX509CERTRESULT;\n        typedef const X509CERTRESULT *PCX509CERTRESULT;\n\n        HRESULT InitNew(void);\n\n        HRESULT CheckInit(void);\n\n        HRESULT EncodeMessage(\n            [in]    IMimeMessageTree */*const*/ pTree,\n            [in]    DWORD dwFlags);\n\n        HRESULT EncodeBody(\n            [in]    IMimeMessageTree */*const*/ pTree,\n            [in]    HBODY hEncodeRoot,\n            [in]    DWORD dwFlags);\n\n        HRESULT DecodeMessage(\n            [in]    IMimeMessageTree */*const*/ pTree,\n            [in]    DWORD dwFlags);\n\n        HRESULT DecodeBody(\n            [in]    IMimeMessageTree */*const*/ pTree,\n            [in]    HBODY hDecodeRoot,\n            [in]    DWORD dwFlags);\n\n        HRESULT EnumCertificates(\n            [in]    HCAPICERTSTORE hc,\n            [in]    DWORD dwUsage,\n            [in]    PCX509CERT pPrev,\n            [out]   PCX509CERT *ppCert);\n\n        HRESULT GetCertificateName(\n            [in]    const PCX509CERT pX509Cert,\n            [in]    const CERTNAMETYPE cn,\n            [out]   LPSTR *ppszName);\n\n        HRESULT GetMessageType(\n            [in]    const HWND hwndParent,\n            [in]    IMimeBody */*const*/ pBody,\n            [out]   DWORD */*const*/ pdwSecType);\n\n        HRESULT GetCertData(\n            [in]        const PCX509CERT pX509Cert,\n            [in]        const CERTDATAID dataid,\n            [out, ref]  LPPROPVARIANT pValue);\n    }\n\n    [\n        uuid(fd853cd1-7f86-11d0-8252-00c04fd85ab4),\n        object\n    ]\n    interface IMimeHeaderTable : IPersistStream\n    {\n        /* FIXME: fill this in */\n    }\n\n    [\n        uuid(fd853cec-7f86-11d0-8252-00c04fd85ab4),\n        object\n    ]\n    interface IMimePropertySchema : IUnknown\n    {\n        typedef [unique] IMimePropertySchema *LPMIMEPROPERTYSCHEMA;\n\n        typedef enum tagMIMEPROPFLAGS\n        {\n            MPF_INETCSET            = 0x01,\n            MPF_RFC1522             = 0x02,\n            MPF_ADDRESS             = 0x04,\n            MPF_HASPARAMS           = 0x08,\n            MPF_MIME                = 0x10,\n            MPF_READONLY            = 0x20\n        } MIMEPROPFLAGS;\n\n        HRESULT RegisterProperty(\n                [in]  const char *name,\n                [in]  DWORD      flags,\n                [in]  DWORD      rownumber,\n                [in]  VARTYPE    vtdefault,\n                [out] DWORD      *propid);\n\n        HRESULT ModifyProperty(\n                [in] const char  *name,\n                [in] DWORD       flags,\n                [in] DWORD       rownumber,\n                [in] VARTYPE     vtdefault);\n\n        HRESULT GetPropertyId(\n                [in]  const char *name,\n                [out] DWORD      *propid);\n\n        HRESULT GetPropertyName(\n                [in]  DWORD      propid,\n                [out] char       **name);\n\n        HRESULT RegisterAddressType(\n                [in]  const char *name,\n                [out] DWORD      *adrtype);\n    }\n\n    [\n        uuid(fd853cd3-7f86-11d0-8252-00c04fd85ab4),\n        object\n    ]\n    interface IMimePropertySet : IPersistStreamInit\n    {\n        typedef [unique] IMimePropertySet *LPMIMEPROPERTYSET;\n\n        cpp_quote(\"#define PDF_ENCODED              0x00000001\")\n        cpp_quote(\"#define PDF_NAMEINDATA           0x00000002\")\n        cpp_quote(\"#define PDF_HEADERFORMAT        (0x00000004 | PDF_ENCODED)\")\n        cpp_quote(\"#define PDF_NOCOMMENTS           0x00000008\")\n        cpp_quote(\"#define PDF_SAVENOENCODE         0x00000010\")\n        cpp_quote(\"#define PDF_VECTOR               0x00000020\")\n\n        typedef struct tagMIMEPARAMINFO\n        {\n            LPSTR           pszName;\n            LPSTR           pszData;\n        } MIMEPARAMINFO, *LPMIMEPARAMINFO;\n\n        typedef enum tagPROPINFOMASK\n        {\n            PIM_CHARSET           = 0x01,\n            PIM_ENCODINGTYPE      = 0x02,\n            PIM_ROWNUMBER         = 0x04,\n            PIM_FLAGS             = 0x08,\n            PIM_PROPID            = 0x10,\n            PIM_VALUES            = 0x20,\n            PIM_VTDEFAULT         = 0x40,\n            PIM_VTCURRENT         = 0x80\n        } PROPINFOMASK;\n\n        typedef struct tagMIMEPROPINFO\n        {\n            DWORD           dwMask;\n            HCHARSET        hCharset;\n            ENCODINGTYPE    ietEncoding;\n            DWORD           dwRowNumber;\n            DWORD           dwFlags;\n            DWORD           dwPropId;\n            DWORD           cValues;\n            VARTYPE         vtDefault;\n            VARTYPE         vtCurrent;\n        } MIMEPROPINFO, *LPMIMEPROPINFO;\n        typedef const MIMEPROPINFO *LPCMIMEPROPINFO;\n\n        HRESULT GetPropInfo(\n            [in]        LPCSTR               pszName,\n            [in,out]    LPMIMEPROPINFO       pInfo);\n\n        HRESULT SetPropInfo(\n            [in]        LPCSTR               pszName,\n            [in]        LPCMIMEPROPINFO      pInfo);\n\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef GetProp\")\ncpp_quote(\"#undef SetProp\")\ncpp_quote(\"#undef EnumProps\")\ncpp_quote(\"#endif\")\n        HRESULT GetProp(\n            [in]        LPCSTR               pszName,\n            [in]        DWORD                dwFlags,\n            [in,out]    LPPROPVARIANT        pValue);\n\n        HRESULT SetProp(\n            [in]        LPCSTR               pszName,\n            [in]        DWORD                dwFlags,\n            [in]        LPCPROPVARIANT       pValue);\n\n        HRESULT AppendProp(\n            [in]        LPCSTR               pszName,\n            [in]        DWORD                dwFlags,\n            [in]        LPPROPVARIANT        pValue);\n\n        HRESULT DeleteProp(\n            [in]        LPCSTR               pszName);\n\n        HRESULT CopyProps(\n            [in]        ULONG                cNames,\n            [in,unique] LPCSTR               *prgszName,\n            [in]        IMimePropertySet     *pPropertySet);\n\n        HRESULT MoveProps(\n            [in]        ULONG                cNames,\n            [in]        LPCSTR               *prgszName,\n            [in]        IMimePropertySet     *pPropertySet);\n\n        HRESULT DeleteExcept(\n            [in]        ULONG                cNames,\n            [in]        LPCSTR               *prgszName);\n\n        HRESULT QueryProp(\n            [in]        LPCSTR               pszName,\n            [in]        LPCSTR               pszCriteria,\n            [in]        boolean              fSubString,\n            [in]        boolean              fCaseSensitive);\n\n        HRESULT GetCharset(\n            [out]       LPHCHARSET           phCharset);\n\n        HRESULT SetCharset(\n            [in]        HCHARSET             hCharset,\n            [in]        CSETAPPLYTYPE        applytype);\n\n        HRESULT GetParameters(\n            [in]        LPCSTR               pszName,\n            [out]       ULONG                *pcParams,\n            [out]       LPMIMEPARAMINFO      *pprgParam);\n\n        HRESULT IsContentType(\n            [in]        LPCSTR               pszPriType,\n            [in,unique] LPCSTR               pszSubType);\n\n        HRESULT BindToObject(\n            [in]        REFIID               riid,\n            [out,iid_is(riid)] void          **ppvObject);\n\n        HRESULT Clone(\n            [out]       IMimePropertySet     **ppPropertySet);\n\n        HRESULT SetOption(\n            [in]        const TYPEDID        oid,\n            [in]        LPCPROPVARIANT       pValue);\n\n        HRESULT GetOption(\n            [in]        const TYPEDID        oid,\n            [in,out]    LPPROPVARIANT        pValue);\n\n        cpp_quote(\"#define EPF_NONAME 0x00000001\")\n\n        HRESULT EnumProps(\n            [in]        DWORD                dwFlags,\n            [out]       IMimeEnumProperties  **ppEnum);\n\n    }\n\n    [\n        uuid(c558834a-7f86-11d0-8252-00c04fd85ab4),\n        object\n    ]\n    interface IMimeAddressTable : IUnknown\n    {\n        typedef [unique] IMimeAddressTable *LPMIMEADDRESSTABLE;\n\n        DECLARE_HANDLE(HADDRESS);\n        typedef HADDRESS *LPHADDRESS;\n        typedef DWORD IADDRESSTYPE;\n\n        typedef enum tagADDRESSFORMAT\n        {\n            AFT_DISPLAY_FRIENDLY,\n            AFT_DISPLAY_EMAIL,\n            AFT_DISPLAY_BOTH,\n            AFT_RFC822_DECODED,\n            AFT_RFC822_ENCODED,\n            AFT_RFC822_TRANSMIT,\n        } ADDRESSFORMAT;\n\n        cpp_quote(\"#define IAT_UNKNOWN              0x00000000\")\n        cpp_quote(\"#define IAT_FROM                 0x00000001\")\n        cpp_quote(\"#define IAT_SENDER               0x00000002\")\n        cpp_quote(\"#define IAT_TO                   0x00000004\")\n        cpp_quote(\"#define IAT_CC                   0x00000008\")\n        cpp_quote(\"#define IAT_BCC                  0x00000010\")\n        cpp_quote(\"#define IAT_REPLYTO              0x00000020\")\n        cpp_quote(\"#define IAT_RETURNPATH           0x00000040\")\n        cpp_quote(\"#define IAT_RETRCPTTO            0x00000080\")\n        cpp_quote(\"#define IAT_RR                   0x00000100\")\n        cpp_quote(\"#define IAT_APPARTO              0x00000200\")\n        cpp_quote(\"#define IAT_DISP_NOTIFICATION_TO 0x00000400\")\n        cpp_quote(\"#define IAT_ALL                  0xffffffff\")\n        cpp_quote(\"#define IAT_KNOWN                (IAT_FROM | IAT_TO | IAT_CC | IAT_BCC | IAT_REPLYTO | IAT_SENDER)\")\n        cpp_quote(\"#define IAT_RECIPS               (IAT_TO | IAT_CC | IAT_BCC)\")\n\n        typedef struct tagADDRESSPROPS\n        {\n            DWORD           dwProps;\n            HADDRESS        hAddress;\n            ENCODINGTYPE    ietFriendly;\n            HCHARSET        hCharset;\n            DWORD           dwAdrType;\n            LPSTR           pszFriendly;\n            LPWSTR          pwszReserved;\n            LPSTR           pszEmail;\n            CERTSTATE       certstate;\n            THUMBBLOB       tbSigning;\n            THUMBBLOB       tbEncryption;\n            DWORD           dwCookie;\n            DWORD           dwReserved1;\n            DWORD           dwReserved2;\n        } ADDRESSPROPS, *LPADDRESSPROPS;\n\n        cpp_quote(\"#define IAP_CHARSET              0x00000001\")\n        cpp_quote(\"#define IAP_HANDLE               0x00000002\")\n        cpp_quote(\"#define IAP_ADRTYPE              0x00000004\")\n        cpp_quote(\"#define IAP_FRIENDLY             0x00000008\")\n        cpp_quote(\"#define IAP_EMAIL                0x00000020\")\n        cpp_quote(\"#define IAP_CERTSTATE            0x00000100\")\n        cpp_quote(\"#define IAP_SIGNING_PRINT        0x00000200\")\n        cpp_quote(\"#define IAP_ENCRYPTION_PRINT     0x00000400\")\n        cpp_quote(\"#define IAP_ENCODING             0x00000800\")\n        cpp_quote(\"#define IAP_COOKIE               0x00001000\")\n        cpp_quote(\"#define IAP_FRIENDLYW            0x00002000\")\n        cpp_quote(\"#define IAP_ALL                  0xffffffff\")\n\n        typedef struct tagADDRESSLIST\n        {\n            ULONG           cAdrs;\n            LPADDRESSPROPS  prgAdr;\n        } ADDRESSLIST, *LPADDRESSLIST;\n\n        HRESULT Append(\n                [in]        DWORD                   addrtype,\n                [in]        ENCODINGTYPE            encoding,\n                [in]        const char              *friendly,\n                [in,unique] const char              *email,\n                [in,out,unique] HADDRESS            *address);\n\n        HRESULT Insert(\n                [in]        ADDRESSPROPS            *addressprop,\n                [in,out,unique] HADDRESS            *address);\n\n        HRESULT SetProps(\n                [in]        HADDRESS                address,\n                [in]        ADDRESSPROPS            *addressprop);\n\n        HRESULT GetProps(\n                [in]        HADDRESS                address,\n                [in]        ADDRESSPROPS            *addressprop);\n\n        HRESULT GetSender(\n                [in,out]    ADDRESSPROPS            *addressprop);\n\n        HRESULT CountTypes(\n                [in]        DWORD                   addrtype,\n                [out]       ULONG                   *count);\n\n        HRESULT GetTypes(\n                [in]        DWORD                   addrtype,\n                [in]        DWORD                   dwProps,\n                [in,out]    ADDRESSLIST             *list);\n\n        HRESULT EnumTypes(\n                [in]        DWORD                   addrtype,\n                [in]        DWORD                   props,\n                [out]       IMimeEnumAddressTypes   **types);\n\n        HRESULT Delete(\n                [in]        HADDRESS                hAddress);\n\n        HRESULT DeleteTypes(\n                [in]        DWORD                   addrtype);\n\n        HRESULT GetFormat(\n                [in]        DWORD                   addrtype,\n                [in]        ADDRESSFORMAT           addrformat,\n                [out]       char                    **format);\n\n        HRESULT AppendRfc822(\n                [in]        DWORD                   addrtype,\n                [in]        ENCODINGTYPE            encoding,\n                [in]        const char              *rfcaddr);\n\n        HRESULT ParseRfc822(\n                [in]        DWORD                   addrtype,\n                [in]        ENCODINGTYPE            encoding,\n                [in]        const char              *rfcaddr,\n                [in,out]    ADDRESSLIST             *list);\n\n        HRESULT Clone(\n                [out]       IMimeAddressTable       **table);\n\n        HRESULT BindToObject(\n                [in]        REFIID                  riid,\n                [out, iid_is(riid)] void            **obj);\n    }\n\n    [\n        uuid(ee519f11-851a-11d0-8252-00c04fd85ab4),\n        object\n    ]\n    interface IMimeWebDocument : IUnknown\n    {\n        /* FIXME: fill this in */\n    }\n\n    [\n        uuid(c558834c-7f86-11d0-8252-00c04fd85ab4),\n        object\n    ]\n    interface IMimeBody : IMimePropertySet\n    {\n        typedef [unique] IMimeBody *LPMIMEBODY;\n\n        typedef enum tagIMSGBODYTYPE\n        {\n            IBT_SECURE,\n            IBT_ATTACHMENT,\n            IBT_EMPTY,\n            IBT_CSETTAGGED,\n            IBT_AUTOATTACH,\n        } IMSGBODYTYPE;\n\n        typedef struct tagBODYOFFSETS\n        {\n            DWORD cbBoundaryStart;\n            DWORD cbHeaderStart;\n            DWORD cbBodyStart;\n            DWORD cbBodyEnd;\n        } BODYOFFSETS, *LPBODYOFFSETS;\n\n        typedef struct tagTRANSMITINFO\n        {\n            ENCODINGTYPE ietCurrent;\n            ENCODINGTYPE ietXmitMime;\n            ENCODINGTYPE ietXmit822;\n            ULONG cbLongestLine;\n            ULONG cExtended;\n            ULONG ulPercentExt;\n            ULONG cbSize;\n            ULONG cLines;\n        } TRANSMITINFO, *LPTRANSMITINFO;\n\n        HRESULT IsType(\n            [in]        IMSGBODYTYPE     bodytype);\n\n        HRESULT SetDisplayName(\n            [in]        LPCSTR           pszDisplay);\n\n        HRESULT GetDisplayName(\n            [out]       LPSTR            *ppszDisplay);\n\n        HRESULT GetOffsets(\n            [out]       LPBODYOFFSETS     pOffsets);\n\n        HRESULT GetCurrentEncoding(\n            [out]       ENCODINGTYPE     *pietEncoding);\n\n        HRESULT SetCurrentEncoding(\n            [in]        ENCODINGTYPE     ietEncoding);\n\n        HRESULT GetEstimatedSize(\n            [in]        ENCODINGTYPE     ietEncoding,\n            [out]       ULONG            *pcbSize);\n\n        HRESULT GetDataHere(\n            [in]        ENCODINGTYPE     ietEncoding,\n            [in]        IStream          *pStream);\n\n        HRESULT GetData(\n            [in]        ENCODINGTYPE     ietEncoding,\n            [out]       IStream          **ppStream);\n\n        HRESULT SetData(\n            [in]        ENCODINGTYPE     ietEncoding,\n            [in,unique] LPCSTR           pszPriType,\n            [in,unique] LPCSTR           pszSubType,\n            [in]        REFIID           riid,\n            [in,iid_is(riid)]  LPVOID    pvObject);\n\n        HRESULT EmptyData(void);\n\n        HRESULT CopyTo(\n            [in]        IMimeBody        *pBody);\n\n        HRESULT GetTransmitInfo(\n            [in,out]    LPTRANSMITINFO   pTransmitInfo);\n\n        HRESULT SaveToFile(\n            [in]        ENCODINGTYPE     ietEncoding,\n            [in]        LPCSTR           pszFilePath);\n\n        HRESULT GetHandle(\n           [out]        LPHBODY          phBody);\n\n    }\n\n    [\n        uuid(fd853cd4-7f86-11d0-8252-00c04fd85ab4),\n        object\n    ]\n    interface IMimeMessageTree : IPersistStreamInit\n    {\n        typedef [unique] IMimeMessageTree *LPMIMEMESSAGETREE;\n\n        const HBODY HBODY_ROOT = (HBODY)-1;\n\n        typedef enum tagBODYLOCATION\n        {\n            IBL_ROOT,\n            IBL_PARENT,\n            IBL_FIRST,\n            IBL_LAST,\n            IBL_NEXT,\n            IBL_PREVIOUS,\n        } BODYLOCATION;\n\n        typedef struct tagFINDBODY\n        {\n            LPSTR pszPriType;\n            LPSTR pszSubType;\n            DWORD dwReserved;\n        } FINDBODY, *LPFINDBODY;\n\n        HRESULT GetMessageSource(\n            [out]       IStream **ppStream,\n            [in]        DWORD dwFlags);\n\n        HRESULT GetMessageSize(\n            [out]       ULONG *pcbSize,\n            [in]        DWORD dwFlags);\n\n        HRESULT LoadOffsetTable(\n            [in]        IStream *pStream);\n\n        HRESULT SaveOffsetTable(\n            [in]        IStream *pStream,\n            [in]        DWORD dwFlags);\n\n        HRESULT GetFlags(\n            [out]       DWORD *pdwFlags);\n\n        HRESULT Commit(\n            [in]        DWORD dwFlags);\n\n        HRESULT HandsOffStorage();\n\n        HRESULT BindToObject(\n            [in]        const HBODY hBody,\n            [in]        REFIID riid,\n            [out, iid_is(riid)] void **ppvObject);\n\n        HRESULT SaveBody(\n            [in]        HBODY hBody,\n            [in]        DWORD dwFlags,\n            [in]        IStream *pStream);\n\n        HRESULT InsertBody(\n            [in]        BODYLOCATION location,\n            [in]        HBODY hPivot,\n            [out]       LPHBODY phBody);\n\n        HRESULT GetBody(\n            [in]        BODYLOCATION location,\n            [in]        HBODY hPivot,\n            [out]       LPHBODY phBody);\n\n        HRESULT DeleteBody(\n            [in]        HBODY hBody,\n            [in]        DWORD dwFlags);\n\n        HRESULT MoveBody(\n            [in]        HBODY hBody,\n            [in]        BODYLOCATION location);\n\n        HRESULT CountBodies(\n            [in]        HBODY hParent,\n            [in]        boolean fRecurse,\n            [out]       ULONG *pcBodies);\n\n        HRESULT FindFirst(\n            [in, out]   LPFINDBODY pFindBody,\n            [out]       LPHBODY phBody);\n\n        HRESULT FindNext(\n            [in, out]   LPFINDBODY pFindBody,\n            [out]       LPHBODY phBody);\n\n        HRESULT ResolveURL(\n            [in]        HBODY hRelated,\n            [in]        LPCSTR pszBase,\n            [in]        LPCSTR pszURL,\n            [in]        DWORD dwFlags,\n            [out]       LPHBODY phBody);\n\n        HRESULT ToMultipart(\n            [in]        HBODY hBody,\n            [in]        LPCSTR pszSubType,\n            [out]       LPHBODY phMultipart);\n\n        HRESULT GetBodyOffsets(\n            [in]        HBODY hBody,\n            [in, out]   LPBODYOFFSETS pOffsets);\n\n        HRESULT GetCharset(\n            [out]       LPHCHARSET phCharset);\n\n        HRESULT SetCharset(\n            [in]        HCHARSET hCharset,\n            [in]        CSETAPPLYTYPE applytype);\n\n        HRESULT IsBodyType(\n            [in]        HBODY hBody,\n            [in]        IMSGBODYTYPE bodytype);\n\n        HRESULT IsContentType(\n            [in]        HBODY hBody,\n            [in]        LPCSTR pszPriType,\n            [in]        LPCSTR pszSubType);\n\n        HRESULT QueryBodyProp(\n            [in]        HBODY hBody,\n            [in]        LPCSTR pszName,\n            [in]        LPCSTR pszCriteria,\n            [in]        boolean fSubString,\n            [in]        boolean fCaseSensitive);\n\n        HRESULT GetBodyProp(\n            [in]        HBODY hBody,\n            [in]        LPCSTR pszName,\n            [in]        DWORD dwFlags,\n            [in, out]   LPPROPVARIANT pValue);\n\n        HRESULT SetBodyProp(\n            [in]        HBODY hBody,\n            [in]        LPCSTR pszName,\n            [in]        DWORD dwFlags,\n            [in]        LPCPROPVARIANT pValue);\n\n        HRESULT DeleteBodyProp(\n            [in]        HBODY hBody,\n            [in]        LPCSTR pszName);\n\n        HRESULT SetOption(\n            [in]        const TYPEDID oid,\n            [in]        LPCPROPVARIANT pValue);\n\n        HRESULT GetOption(\n            [in]        const TYPEDID oid,\n            [in, out]   LPPROPVARIANT pValue);\n    }\n\n    [\n        uuid(fd853cd5-7f86-11d0-8252-00c04fd85ab4),\n        object\n    ]\n    interface IMimeMessage : IMimeMessageTree\n    {\n        typedef [unique] IMimeMessage *LPMIMEMESSAGE;\n\n        typedef DWORD TEXTTYPE;\n\n        typedef enum tagIMSGFLAGS\n        {\n            IMF_ATTACHMENTS     = 0x00000001,\n            IMF_MULTIPART       = 0x00000002,\n            IMF_SUBMULTIPART    = 0x00000004,\n            IMF_MIME            = 0x00000008,\n            IMF_HTML            = 0x00000010,\n            IMF_PLAIN           = 0x00000020,\n            IMF_PARTIAL         = 0x00000040,\n            IMF_SIGNED          = 0x00000080,\n            IMF_ENCRYPTED       = 0x00000100,\n            IMF_TNEF            = 0x00000200,\n            IMF_MHTML           = 0x00000400,\n            IMF_SECURE          = 0x00000800,\n            IMF_TEXT            = 0x00001000,\n            IMF_CSETTAGGED      = 0x00002000,\n            IMF_NEWS            = 0x00004000,\n            IMF_VOICEMAIL       = 0x00008000,\n            IMF_HASVCARD        = 0x00010000,\n            IMF_RFC1154         = 0x00020000,\n        } IMSGFLAGS;\n\n        typedef enum tagIMSGPRIORITY\n        {\n            IMSG_PRI_LOW    = 5,\n            IMSG_PRI_NORMAL = 3,\n            IMSG_PRI_HIGH   = 1,\n        } IMSGPRIORITY;\n\n        cpp_quote(\"#define WPF_HTML             0x00000001\")\n        cpp_quote(\"#define WPF_AUTOINLINE       0x00000002\")\n        cpp_quote(\"#define WPF_SLIDESHOW        0x00000004\")\n        cpp_quote(\"#define WPF_ATTACHLINKS      0x00000008\")\n        cpp_quote(\"#define WPF_IMAGESONLY       0x00000010\")\n        cpp_quote(\"#define WPF_NOMETACHARSET    0x00000020\")\n\n        typedef struct tagWEPAGEOPTIONS\n        {\n            DWORD cbSize;\n            DWORD dwFlags;\n            DWORD dwDelay;\n            WCHAR wchQuote;\n        } WEBPAGEOPTIONS, *LPWEBPAGEOPTIONS;\n\n        cpp_quote(\"#define TXT_PLAIN       1\")\n        cpp_quote(\"#define TXT_HTML        2\")\n\n        HRESULT CreateWebPage(\n            [in]        IStream *pRootStm,\n            [in]        LPWEBPAGEOPTIONS pOptions,\n            [in]        IMimeMessageCallback *pCallback,\n            [out]       IMoniker **ppMoniker);\n\n        HRESULT GetProp(\n            [in]        LPCSTR pszName,\n            [in]        DWORD dwFlags,\n            [in,out]    LPPROPVARIANT pValue);\n\n        HRESULT SetProp(\n            [in]        LPCSTR pszName,\n            [in]        DWORD dwFlags,\n            [in]        LPCPROPVARIANT pValue);\n\n        HRESULT DeleteProp(\n            [in]        LPCSTR pszName);\n\n        HRESULT QueryProp(\n            [in]        LPCSTR pszName,\n            [in]        LPCSTR pszCriteria,\n            [in]        boolean fSubString,\n            [in]        boolean fCaseSensitive);\n\n        HRESULT GetTextBody(\n            [in]        DWORD dwTxtType,\n            [in]        ENCODINGTYPE ietEncoding,\n            [out]       IStream **pStream,\n            [out]       LPHBODY phBody);\n\n        HRESULT SetTextBody(\n            [in]        DWORD dwTxtType,\n            [in]        ENCODINGTYPE ietEncoding,\n            [in]        HBODY hAlternative,\n            [in]        IStream *pStream,\n            [out]       LPHBODY phBody);\n\n        HRESULT AttachObject(\n            [in]        REFIID riid,\n            [in, iid_is(riid)] void *pvObject,\n            [out]       LPHBODY phBody);\n\n        HRESULT AttachFile(\n            [in]        LPCSTR pszFilePath,\n            [in]        IStream *pstmFile,\n            [out]       LPHBODY phBody);\n\n        HRESULT AttachURL(\n            [in]        LPCSTR pszBase,\n            [in]        LPCSTR pszURL,\n            [in]        DWORD dwFlags,\n            [in]        IStream *pstmURL,\n            [out]       LPSTR *ppszCIDURL,\n            [out]       LPHBODY phBody);\n\n        HRESULT GetAttachments(\n            [out]       ULONG *pcAttach,\n            [out]       LPHBODY *pprghAttach);\n\n        HRESULT GetAddressTable(\n            [out]       IMimeAddressTable **ppTable);\n\n        HRESULT GetSender(\n            [in, out]   LPADDRESSPROPS pAddress);\n\n        HRESULT GetAddressTypes(\n            [in]        DWORD dwAdrTypes,\n            [in]        DWORD dwProps,\n            [in, out]   LPADDRESSLIST pList);\n\n        HRESULT GetAddressFormat(\n            [in]        DWORD dwAdrTypes,\n            [in]        ADDRESSFORMAT format,\n            [out]       LPSTR *ppszFormat);\n\n        HRESULT EnumAddressTypes(\n            [in]        DWORD dwAdrTypes,\n            [in]        DWORD dwProps,\n            [out]       IMimeEnumAddressTypes **ppEnum);\n\n        HRESULT SplitMessage(\n            [in]        ULONG cbMaxPart,\n            [out]       IMimeMessageParts **ppParts);\n\n        HRESULT GetRootMoniker(\n            [out]       IMoniker **ppMoniker);\n    }\n\n    [\n        uuid(761aa741-7bda-11d1-8aa9-00c04fb951f3),\n        object\n    ]\n    interface IMimeMessageCallback : IUnknown\n    {\n        HRESULT OnWebPageSplitter(\n            [in]       DWORD cInlined,\n            [in]       IStream *ppStream);\n    }\n\n    [\n        uuid(de4ad8da-555f-11d1-8dd0-00c04fb951f9),\n        object\n    ]\n    interface IPersistMime : IPersist\n    {\n        /* FIXME: fill this in */\n    }\n\n    [\n        uuid(c558834f-7f86-11d0-8252-00c04fd85ab4),\n        object\n    ]\n    interface IMimeMessageParts : IUnknown\n    {\n        /* FIXME: fill this in */\n    }\n\n    [\n        uuid(c558834d-7f86-11d0-8252-00c04fd85ab4),\n        object\n    ]\n    interface IMimeEnumHeaderRows : IUnknown\n    {\n        typedef struct tagENUMHEADERROW\n        {\n            HHEADERROW   hRow;\n            LPSTR        pszHeader;\n            LPSTR        pszData;\n            ULONG        cchData;\n            DWORD_PTR    dwReserved;\n        } ENUMHEADERROW, *LPENUMHEADERROW;\n\n        /* FIXME: fill this in */\n    }\n\n    [\n        uuid(fd853cee-7f86-11d0-8252-00c04fd85ab4),\n        object\n    ]\n    interface IMimeEnumProperties : IUnknown\n    {\n        typedef [unique] IMimeEnumProperties *LPMIMEENUMPROPERTIES;\n\n        typedef struct tagENUMPROPERTY\n        {\n            LPSTR       pszName;\n            HHEADERROW  hRow;\n            DWORD       dwPropId;\n        } ENUMPROPERTY, *LPENUMPROPERTY;\n\n        HRESULT Next(\n            [in]      ULONG cFetch,\n            [in, out] LPENUMPROPERTY prgProp,\n            [out]     ULONG *pcFetched);\n\n        HRESULT Skip(\n            [in]      ULONG cItems);\n\n        HRESULT Reset(void);\n\n        HRESULT Clone(\n            [out]      IMimeEnumProperties **ppEnum);\n\n        HRESULT Count(\n            [out]      ULONG *pcItems);\n\n    }\n\n    [\n        uuid(c5588354-7f86-11d0-8252-00c04fd85ab4),\n        object\n    ]\n    interface IMimeEnumAddressTypes : IUnknown\n    {\n        /* FIXME: fill this in */\n    }\n\n    [\n        uuid(c5588350-7f86-11d0-8252-00c04fd85ab4),\n        object\n    ]\n    interface IMimeEnumMessageParts : IUnknown\n    {\n        /* FIXME: fill this in */\n    }\n\n    [\n        uuid(64577981-86d7-11d1-bdfc-00c04fa31009),\n        object\n    ]\n    interface IHashTable : IUnknown\n    {\n        /* FIXME: fill this in */\n    }\n\n    [\n        uuid(c5588351-7f86-11d0-8252-00c04fd85ab4),\n        object\n    ]\n    interface IMimeAllocator : IMalloc\n    {\n        typedef [unique] IMimeAllocator *LPMIMEALLOCATOR;\n\n        HRESULT FreeParamInfoArray(\n            [in] ULONG            cParams,\n            [in] LPMIMEPARAMINFO  prgParam,\n            [in] boolean          fFreeArray);\n\n        HRESULT FreeAddressList(\n            [in,out] LPADDRESSLIST pList);\n\n        HRESULT FreeAddressProps(\n            [in,out] LPADDRESSPROPS pAddress);\n\n        HRESULT ReleaseObjects(\n            [in] ULONG            cObjects,\n            [in] IUnknown         **prgpUnknown,\n            [in] boolean          fFreeArray);\n\n        HRESULT FreeEnumHeaderRowArray(\n            [in] ULONG            cRows,\n            [in] LPENUMHEADERROW  prgRow,\n            [in] boolean          fFreeArray);\n\n        HRESULT FreeEnumPropertyArray(\n            [in] ULONG            cProps,\n            [in] LPENUMPROPERTY   prgProp,\n            [in] boolean          fFreeArray);\n\n        HRESULT FreeThumbprint(\n            [in] THUMBBLOB         *pthumbprint);\n\n        HRESULT PropVariantClear(\n            [in] LPPROPVARIANT     pProp);\n\n    }\n\n    [\n        uuid(feceaffd-c441-11d1-960e-00c04fbd7c09),\n        object\n    ]\n    interface IMimeObjResolver : IUnknown\n    {\n        /* FIXME: fill this in */\n    }\n\n    [\n        uuid(b0d17fc2-7bc4-11d1-bdfa-00c04fa31009),\n        object\n    ]\n    interface IFontCache : IUnknown\n    {\n        /* FIXME: fill this in */\n    }\n\n    [\n        uuid(b0d17fc5-7bc4-11d1-bdfa-00c04fa31009),\n        object\n    ]\n    interface IFontCacheNotify : IUnknown\n    {\n        /* FIXME: fill this in */\n    }\n\n    [\n        uuid(70183210-7b36-11d2-8c12-00c04fa31009),\n        object\n    ]\n    interface IMimeEditTag : IUnknown\n    {\n        /* FIXME: fill this in */\n    }\n\n    [\n        uuid(d09ee528-7b38-11d2-8c12-00c04fa31009),\n        object\n    ]\n    interface IMimeEditTagCollection : IUnknown\n    {\n        /* FIXME: fill this in */\n    }\n\n    [\n         uuid(ba715ae0-a740-11d2-8b22-0080c76b34c6),\n         local\n    ]\n    interface IMimeSecurityCallback : IUnknown\n    {\n        /* FIXME: fill this in */\n\n        cpp_quote(\"#define CMS_RECIPIENT_INFO_TYPE_UNKNOWN                0\")\n        cpp_quote(\"#define CMS_RECIPIENT_INFO_TYPE_KEYTRANS               1\")\n        cpp_quote(\"#define CMS_RECIPIENT_INFO_TYPE_KEYAGREE               2\")\n        cpp_quote(\"#define CMS_RECIPIENT_INFO_TYPE_MAIL_LIST              3\")\n\n        cpp_quote(\"#define CMS_RECIPIENT_INFO_PUBKEY_CERTIFICATE          0\")\n        cpp_quote(\"#define CMS_RECIPIENT_INFO_PUBKEY_KEYTRANS             1\")\n        cpp_quote(\"#define CMS_RECIPIENT_INFO_PUBKEY_PROVIDER             2\")\n        cpp_quote(\"#define CMS_RECIPIENT_INFO_PUBKEY_EPHEMERAL_KEYAGREE   3\")\n        cpp_quote(\"#define CMS_RECIPIENT_INFO_PUBKEY_STATIC_KEYAGREE      4\")\n\n        cpp_quote(\"#define CMS_RECIPIENT_INFO_KEYID_CERTIFICATE           0\")\n        cpp_quote(\"#define CMS_RECIPIENT_INFO_KEYID_ISSUERSERIAL          1\")\n        cpp_quote(\"#define CMS_RECIPIENT_INFO_KEYID_KEY_ID                2\")\n\n    }\n}\n\ncpp_quote(\"#ifdef __cplusplus\")\ncpp_quote(\" extern \\\"C\\\" {\")\ncpp_quote(\"#endif\")\n\ncpp_quote(\"\")\ncpp_quote(\"HRESULT WINAPI MimeOleSetCompatMode(DWORD);\")\ncpp_quote(\"HRESULT WINAPI MimeOleContentTypeFromUrl(LPCSTR,LPCSTR,LPSTR*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleParseMhtmlUrl(LPSTR,LPSTR*,LPSTR*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleObjectFromUrl(LPCSTR,BOOL,REFIID,LPVOID*,IUnknown**);\")\ncpp_quote(\"HRESULT WINAPI MimeOleObjectFromMoniker(BINDF,IMoniker*,IBindCtx*,REFIID,LPVOID*,IMoniker**);\")\ncpp_quote(\"HRESULT WINAPI MimeOleCombineURL(LPCSTR,ULONG,LPCSTR,ULONG,BOOL,LPSTR*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleGetSubjectFileName(IMimePropertySet*,ULONG*,ULONG*,LPSTR,ULONG);\")\ncpp_quote(\"HRESULT WINAPI MimeOleCreateWebDocument(LPCSTR,LPCSTR,IMimeWebDocument**);\")\ncpp_quote(\"HRESULT WINAPI MimeOleGetRelatedSection(IMimeMessageTree*,boolean,LPHBODY,boolean*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleGetMixedSection(IMimeMessageTree*,boolean,LPHBODY,boolean*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleGetAlternativeSection(IMimeMessageTree*,LPHBODY,boolean*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleGenerateCID(LPSTR,ULONG,boolean);\")\ncpp_quote(\"HRESULT WINAPI MimeOleGenerateMID(LPSTR,ULONG,boolean);\")\ncpp_quote(\"HRESULT WINAPI MimeOleCreateByteStream(IStream**);\")\ncpp_quote(\"HRESULT WINAPI MimeOlGetPropertySchema(IMimePropertySchema**);\")\ncpp_quote(\"HRESULT WINAPI MimeOleQueryString(LPCSTR,LPCSTR,boolean,boolean);\")\ncpp_quote(\"HRESULT WINAPI MimeOleGetPropA(IMimePropertySet*,LPCSTR,DWORD,LPSTR*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleSetPropA(IMimePropertySet*,LPCSTR,DWORD,LPCSTR);\")\ncpp_quote(\"HRESULT WINAPI MimeOleGetPropW(IMimePropertySet*,LPCSTR,DWORD,LPWSTR*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleSetPropW(IMimePropertySet*,LPCSTR,DWORD,LPCWSTR);\")\ncpp_quote(\"HRESULT WINAPI MimeOleGetBodyPropA(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPSTR*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleSetBodyPropA(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPCSTR);\")\ncpp_quote(\"HRESULT WINAPI MimeOleGetBodyPropW(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPWSTR*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleSetBodyPropW(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPCWSTR);\")\ncpp_quote(\"HRESULT WINAPI MimeOleCreateHeaderTable(IMimeHeaderTable**);\")\ncpp_quote(\"HRESULT WINAPI MimeOleVariantFree(LPPROPVARIANT);\")\ncpp_quote(\"HRESULT WINAPI MimeOleVariantCopy(LPPROPVARIANT,LPPROPVARIANT);\")\ncpp_quote(\"HRESULT WINAPI MimeOleGetExtClassId(LPCSTR,LPCLSID);\")\ncpp_quote(\"HRESULT WINAPI MimeOleEncodeHeader(HCHARSET,LPPROPVARIANT,LPSTR*,LPRFC1522INFO);\")\ncpp_quote(\"HRESULT WINAPI MimeOleDecodeHeader(HCHARSET,LPCSTR,LPPROPVARIANT,LPRFC1522INFO);\")\ncpp_quote(\"HRESULT WINAPI MimeOleRfc1522Decode(LPCSTR,LPSTR,ULONG,LPSTR*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleRfc1522Encode(LPCSTR,HCHARSET,LPSTR*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleGetInternat(IMimeInternational**);\")\ncpp_quote(\"HRESULT WINAPI MimeOleFindCharset(LPCSTR,LPHCHARSET);\")\ncpp_quote(\"HRESULT WINAPI MimeOleGetCharsetInfo(HCHARSET,LPINETCSETINFO);\")\ncpp_quote(\"HRESULT WINAPI MimeOleGetCodePageInfo(HCHARSET,LPCODEPAGEINFO);\")\ncpp_quote(\"HRESULT WINAPI MimeOleGetDefaultCharset(LPHCHARSET);\")\ncpp_quote(\"HRESULT WINAPI MimeOleSetDefaultCharset(HCHARSET);\")\ncpp_quote(\"HRESULT WINAPI MimeOleGetCodePageCharset(CODEPAGEID,CHARSETTYPE,LPHCHARSET);\")\ncpp_quote(\"HRESULT WINAPI MimeOleCreateVirtualStream(IStream**);\")\ncpp_quote(\"HRESULT WINAPI MimeOleOpenFileStream(LPCSTR,DWORD,DWORD,IStream**);\")\ncpp_quote(\"HRESULT WINAPI MimeOleIsTnefStream(IStream*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleGenerateFileName(LPCSTR,LPCSTR,LPCSTR,LPSTR*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleGetFileExtension(LPCSTR,LPSTR,ULONG);\")\ncpp_quote(\"HRESULT WINAPI MimeOleCreateSecurity(IMimeSecurity**);\")\ncpp_quote(\"HRESULT WINAPI MimeOleInetDateToFileTime(LPCSTR,LPFILETIME);\")\ncpp_quote(\"HRESULT WINAPI MimeOleFileTimeToInetDate(LPFILETIME,LPSTR,ULONG);\")\ncpp_quote(\"HRESULT WINAPI MimeOleCreateMessageParts(IMimeMessageParts**);\")\ncpp_quote(\"HRESULT WINAPI MimeOleGetAllocator(IMimeAllocator**);\")\ncpp_quote(\"HRESULT WINAPI MimeOleParseRfc822Address(DWORD,ENCODINGTYPE,LPCSTR,LPADDRESSLIST);\")\ncpp_quote(\"HRESULT WINAPI MimeOleCreateMessage(IUnknown*,IMimeMessage**);\")\ncpp_quote(\"HRESULT WINAPI MimeOleMergePartialHeaders(IStream*,IStream*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleEscapeString(CODEPAGEID,LPCSTR,LPSTR*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleGetExtContentType(LPCSTR,LPSTR*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleGetContentTypeExt(LPCSTR,LPSTR*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleGetFileInfo(LPSTR,LPSTR*,LPSTR*,LPSTR*,LPSTR*,LPSTR*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleCreateBody(IMimeBody**);\")\ncpp_quote(\"HRESULT WINAPI MimeOleCreatePropertySet(IUnknown*,IMimePropertySet**);\")\ncpp_quote(\"HRESULT WINAPI MimeOleCreateMessageTree(IUnknown*,IMimeMessageTree**);\")\ncpp_quote(\"HRESULT WINAPI MimeOleGetCertsFromThumbprints(THUMBBLOB*,X509CERTRESULT*,const HCERTSTORE*,DWORD);\")\ncpp_quote(\"HRESULT WINAPI MimeOleSplitMessage(IMimeMessage*,ULONG,IMimeMessageParts**);\")\ncpp_quote(\"HRESULT WINAPI MimeOleClearDirtyTree(IMimeMessageTree*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleConvertEnrichedToHTML(CODEPAGEID,IStream*,IStream*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleSMimeCapsToDlg(LPBYTE,DWORD,DWORD,PCX509CERT*,HWND,DWORD,DWORD,DWORD);\")\ncpp_quote(\"HRESULT WINAPI MimeOleSMimeCapsFromDlg(HWND,DWORD,DWORD,DWORD,LPBYTE,DWORD*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleSMimeCapInit(LPBYTE,DWORD,LPVOID*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleSMimeCapAddSMimeCap(LPBYTE,DWORD,LPVOID);\")\ncpp_quote(\"HRESULT WINAPI MimeOleSMimeCapAddCert(LPBYTE,DWORD,BOOL,LPVOID);\")\ncpp_quote(\"HRESULT WINAPI MimeOleSMimeCapGetEncAlg(LPVOID,LPBYTE,DWORD*,DWORD*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleSMimeCapGetHashAlg(LPVOID,LPBYTE,DWORD*,DWORD*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleSMimeCapRelease(LPVOID);\")\ncpp_quote(\"HRESULT WINAPI MimeOleAlgNameFromSMimeap(LPBYTE,DWORD,LPCSTR*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleAlgStrengthFromSMimeCap(LPBYTE,DWORD,BOOL,DWORD*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleSMimeCapsFull(LPVOID,BOOL,BOOL,LPBYTE,DWORD*);\")\ncpp_quote(\"HRESULT WINAPI MimeOleCreateHashTable(DWORD,BOOL,IHashTable**);\")\ncpp_quote(\"HRESULT WINAPI MimeOleStripHeaders(IMimeMessage*,HBODY,LPCSTR,LPCSTR,IStream**);\")\n\ncpp_quote(\"HRESULT WINAPI MimeEditViewSource(HWND,IMimeMessage*);\")\ncpp_quote(\"HRESULT WINAPI MimeEditIsSafeToRun(HWND,LPCSTR);\")\ncpp_quote(\"HRESULT WINAPI MimeEditVerifyTrust(HWND,LPCSTR,LPCSTR);\")\ncpp_quote(\"HRESULT WINAPI MimeEditCreateMimeDocument(IUnknown*,IMimeMessage*,DWORD,IMimeMessage**);\")\ncpp_quote(\"HRESULT WINAPI MimeEditGetBackgroundImageUrl(IUnknown*,BSTR*);\")\ncpp_quote(\"HRESULT WINAPI MimeEditDocumentFromStream(IStream*,REFIID,void**);\")\n\ncpp_quote(\"HRESULT WINAPI MimeOleGetPropertySchema(IMimePropertySchema**);\")\ncpp_quote(\"HRESULT WINAPI MimeGetAddressFormatW(REFIID,void*,DWORD,ADDRESSFORMAT,WCHAR**);\")\ncpp_quote(\"#ifdef __cplusplus\")\ncpp_quote(\"}\")\ncpp_quote(\"#endif\")\n"
  },
  {
    "path": "wine/windows/minmax.h",
    "content": "/*\n * min/max macros\n *\n * Copyright 2001 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_MINMAX_H\n#define __WINE_MINMAX_H\n\n#ifndef max\n#define max(a,b)   (((a) > (b)) ? (a) : (b))\n#endif\n#ifndef min\n#define min(a,b)   (((a) < (b)) ? (a) : (b))\n#endif\n\n#endif /* __WINE_MINMAX_H */\n"
  },
  {
    "path": "wine/windows/mlang.idl",
    "content": "/*\n * Copyright (C) 2004 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"unknwn.idl\";\n#endif\n\ninterface IStream;\n\ncpp_quote(\"#define CPIOD_PEEK          0x40000000\")\ncpp_quote(\"#define CPIOD_FORCE_PROMPT  0x80000000\")\n\n[\n  object,\n  uuid(359f3443-bd4a-11d0-b188-00aa0038c969),\n  pointer_default(unique)\n]\ninterface IMLangCodePages : IUnknown\n{\n    HRESULT GetCharCodePages(      \n        [in] WCHAR chSrc,\n        [out] DWORD *pdwCodePages);\n    HRESULT GetStrCodePages(      \n        [in, size_is(cchSrc)] const WCHAR *pszSrc,\n        [in] LONG cchSrc,\n        [in] DWORD dwPriorityCodePages,\n        [out] DWORD *pdwCodePages,\n        [out] LONG *pcchCodePages);\n    HRESULT CodePageToCodePages(      \n        [in] UINT uCodePage,\n        [out] DWORD *pdwCodePages);\n    HRESULT CodePagesToCodePage(      \n        [in] DWORD dwCodePages,\n        [in] UINT uDefaultCodePage,\n        [out] UINT *puCodePage);\n}\n\n[\n  object,\n  uuid(359f3441-bd4a-11d0-b188-00aa0038c969),\n  pointer_default(unique)\n]\ninterface IMLangFontLink : IMLangCodePages\n{\n    HRESULT GetFontCodePages(\n        [in] HDC hDC,\n        [in] HFONT hFont,\n        [out] DWORD *pdwCodePages );\n\n    HRESULT MapFont(      \n        [in] HDC hDC,\n        [in] DWORD dwCodePages,\n        [in] HFONT hSrcFont,\n        [out] HFONT *phDestFont);\n\n    HRESULT ReleaseFont(      \n        [in] HFONT hFont);\n\n    HRESULT ResetFontMapping();\n}\n\n[\n  object,\n  uuid(ae5f1430-388b-11d2-8380-00c04f8f5da1),\n  pointer_default(unique)\n]\ninterface IEnumScript : IUnknown\n{\n    const USHORT MAX_SCRIPT_NAME = 48;\n    const USHORT MAX_MIMEFACE_NAME = 32;\n\n    typedef BYTE SCRIPT_ID;\n    typedef __int64 SCRIPT_IDS;\n\n    typedef enum tagSCRIPTCONTF\n    {\n        sidDefault = 0,\n        sidMerge = sidDefault + 1,\n        sidAsciiSym = sidMerge + 1,\n        sidAsciiLatin = sidAsciiSym + 1,\n        sidLatin = sidAsciiLatin + 1,\n        sidGreek = sidLatin + 1,\n        sidCyrillic = sidGreek + 1,\n        sidArmenian = sidCyrillic + 1,\n        sidHebrew = sidArmenian + 1,\n        sidArabic = sidHebrew + 1,\n        sidDevanagari = sidArabic + 1,\n        sidBengali = sidDevanagari + 1,\n        sidGurmukhi = sidBengali + 1,\n        sidGujarati = sidGurmukhi + 1,\n        sidOriya = sidGujarati + 1,\n        sidTamil = sidOriya + 1,\n        sidTelugu = sidTamil + 1,\n        sidKannada = sidTelugu + 1,\n        sidMalayalam = sidKannada + 1,\n        sidThai = sidMalayalam + 1,\n        sidLao = sidThai + 1,\n        sidTibetan = sidLao + 1,\n        sidGeorgian = sidTibetan + 1,\n        sidHangul = sidGeorgian + 1,\n        sidKana = sidHangul + 1,\n        sidBopomofo = sidKana + 1,\n        sidHan = sidBopomofo + 1,\n        sidEthiopic = sidHan + 1,\n        sidCanSyllabic = sidEthiopic + 1,\n        sidCherokee = sidCanSyllabic + 1,\n        sidYi = sidCherokee + 1,\n        sidBraille = sidYi + 1,\n        sidRunic = sidBraille + 1,\n        sidOgham = sidRunic + 1,\n        sidSinhala = sidOgham + 1,\n        sidSyriac = sidSinhala + 1,\n        sidBurmese = sidSyriac + 1,\n        sidKhmer = sidBurmese + 1,\n        sidThaana = sidKhmer + 1,\n        sidMongolian = sidThaana + 1,\n        sidUserDefined = sidMongolian + 1,\n        sidLim = sidUserDefined + 1,\n        sidFEFirst = sidHangul,\n        sidFELast = sidHan\n    } SCRIPTCONTF;\n\n    typedef enum tagSCRIPTFONTCONTF\n    {\n        SCRIPTCONTF_FIXED_FONT = 0x1,\n        SCRIPTCONTF_PROPORTIONAL_FONT = 0x2,\n        SCRIPTCONTF_SCRIPT_USER = 0x10000,\n        SCRIPTCONTF_SCRIPT_HIDE = 0x20000,\n        SCRIPTCONTF_SCRIPT_SYSTEM = 0x40000\n    } SCRIPTFONTCONTF;\n\n    typedef struct tagSCRIPFONTINFO\n    {\n        SCRIPT_IDS scripts;\n        WCHAR wszFont[MAX_MIMEFACE_NAME];\n    } SCRIPTFONTINFO, *PSCRIPTFONTINFO;\n\n    typedef struct tagSCRIPTINFO {\n        SCRIPT_ID ScriptId;\n        UINT uiCodePage;\n        WCHAR wszDescription[MAX_SCRIPT_NAME];\n        WCHAR wszFixedWidthFont[MAX_MIMEFACE_NAME];\n        WCHAR wszProportionalFont[MAX_MIMEFACE_NAME];\n    } SCRIPTINFO, *PSCRIPTINFO;\n\n    HRESULT Clone( \n        [out] IEnumScript **ppEnum);\n\n    HRESULT Next(      \n        [in] ULONG celt,\n        [out] PSCRIPTINFO rgelt,\n        [out] ULONG *pceltFetched);\n\n    HRESULT Reset();\n\n    HRESULT Skip(      \n        [in] ULONG celt);\n}\n\n[\n  object,\n  uuid(dccfc162-2b38-11d2-b7ec-00c04f8f5d9a),\n  pointer_default(unique)\n]\ninterface IMLangFontLink2 : IMLangCodePages\n{\n    typedef struct tagUNICODERANGE\n    {\n        WCHAR wcFrom;\n        WCHAR wcTo;\n    } UNICODERANGE;\n\n    typedef [unique] IMLangFontLink2 *PMLANGFONTLINK2;\n\n    HRESULT GetFontCodePages(\n        [in] HDC hDC,\n        [in] HFONT hFont,\n        [out] DWORD *pdwCodePages );\n\n    HRESULT ReleaseFont(\n        [in] HFONT hFont);\n\n    HRESULT ResetFontMapping();\n\n    HRESULT MapFont(\n        [in] HDC hDC,\n        [in] DWORD dwCodePages,\n        [in] WCHAR chSrc,\n        [out] HFONT *pFont);\n\n    HRESULT GetFontUnicodeRanges(\n        [in] HDC hDC,\n        [in,out] UINT *puiRanges,\n        [out] UNICODERANGE* pUranges);\n\n    HRESULT GetScriptFontInfo(\n        [in] SCRIPT_ID sid,\n        [in] DWORD dwFlags,\n        [in,out] UINT *puiFonts,\n        [out] SCRIPTFONTINFO* pScriptFont);\n\n    HRESULT CodePageToScriptID(\n        [in] UINT uiCodePage,\n        [out] SCRIPT_ID *pSid);\n}\n\n[\n object,\n uuid(c04d65ce-b70d-11d0-b188-00aa0038c969),\n pointer_default(unique)\n]\ninterface IMLangString : IUnknown\n{\n#ifdef NEWMLSTR\n    HRESULT LockMLStr(\n        [in] LONG lPos,\n        [in] DWORD dwFlags,\n        [out] DWORD* pdwCookie,\n        [out] LONG* plActualPos,\n        [out] LONG* plActualLen);\n\n    HRESULT UnlockMLStr(\n        [in] DWORD dwCookie);\n#else\n    HRESULT Sync(\n        [in] BOOL fNoAccess);\n#endif\n    HRESULT GetLength(\n        [out, retval] LONG* plLen);\n    HRESULT SetMLStr(\n        [in] LONG lDestPos,\n        [in] LONG lDestLen,\n        [in] IUnknown *pSrcMLStr,\n        [in] LONG lSrcPos,\n        [in] LONG lSrcLen);\n#ifdef NEWMLSTR\n    HRESULT RegisterAttr(\n        [in] IUnknown *pUnk,\n        [out] DWORD* pdwCookie);\n    HRESULT UnregisterAttr(\n        [in] DWORD dwCookie);\n    HRESULT EnumAttr(\n        [out] IEnumUnknown **ppEnumUnk);\n    HRESULT FindAttr(\n        [in] REFIID riid,\n        [in] LPARAM lParam,\n        [out] IUnknown **ppUnk);\n#else\n    HRESULT GetMLStr(\n        [in] LONG lSrcPos,\n        [in] LONG lSrcLen,\n        [in] IUnknown *pUnkOuter,\n        [in] DWORD dwClsContext,\n        [in] const IID* piid,\n        [out] IUnknown** ppDestMLStr,\n        [out] LONG* plDestPos,\n        [out] LONG* plDestLen);\n#endif\n}\n\n[\n object,\n uuid(f5be2ee1-bfd7-11d0-b188-00aa0038c969),\n pointer_default(unique)\n]\ninterface IMLangLineBreakConsole : IUnknown\n{\n    HRESULT BreakLineML(\n        [in] IMLangString* pSrcMLStr,\n        [in] LONG lSrcPos,\n        [in] LONG lSrcLen,\n        [in] LONG cMinColumns,\n        [in] LONG cMaxColumns,\n        [out] LONG* plLineLen,\n        [out] LONG* plSkipLen);\n\n    HRESULT BreakLineW(\n        [in] LCID locale,\n        [in, size_is(cchSrc)] const WCHAR* pszSrc,\n        [in] LONG cchSrc,\n        [in] LONG cMaxColumns,\n        [out] LONG* pcchLine,\n        [out] LONG* pcchSkip );\n\n    HRESULT BreakLineA(\n        [in] LCID locale,\n        [in] UINT uCodePage,\n        [in, size_is(cchSrc)] const CHAR* pszSrc,\n        [in] LONG cchSrc,\n        [in] LONG cMaxColumns,\n        [out] LONG* pcchLine,\n        [out] LONG* pcchSkip);\n}\n\n[\n  object,\n  uuid(275c23e3-3747-11d0-9fea-00aa003f8646),\n  pointer_default(unique)\n]\ninterface IEnumCodePage : IUnknown\n{\n    const USHORT MAX_MIMECP_NAME = 64;\n    const USHORT MAX_MIMECSET_NAME = 50;\n\n    typedef enum tagMIMECONTF\n    {\n        MIMECONTF_MAILNEWS = 0x00000001,\n        MIMECONTF_BROWSER = 0x00000002,\n        MIMECONTF_MINIMAL = 0x00000004,\n        MIMECONTF_IMPORT = 0x00000008,\n        MIMECONTF_SAVABLE_MAILNEWS = 0x00000100,\n        MIMECONTF_SAVABLE_BROWSER = 0x00000200,\n        MIMECONTF_EXPORT = 0x00000400,\n        MIMECONTF_PRIVCONVERTER = 0x00010000,\n        MIMECONTF_VALID = 0x00020000,\n        MIMECONTF_VALID_NLS = 0x00040000,\n        MIMECONTF_MIME_IE4 = 0x10000000,\n        MIMECONTF_MIME_LATEST = 0x20000000,\n        MIMECONTF_MIME_REGISTRY = 0x40000000\n    } MIMECONTF;\n\n    typedef struct tagMIMECPINFO {\n        DWORD dwFlags;\n        UINT uiCodePage;\n        UINT uiFamilyCodePage;\n        WCHAR wszDescription[MAX_MIMECP_NAME];\n        WCHAR wszWebCharset[MAX_MIMECSET_NAME];\n        WCHAR wszHeaderCharset[MAX_MIMECSET_NAME];\n        WCHAR wszBodyCharset[MAX_MIMECSET_NAME];\n        WCHAR wszFixedWidthFont[MAX_MIMEFACE_NAME];\n        WCHAR wszProportionalFont[MAX_MIMEFACE_NAME];\n        BYTE bGDICharset;\n    } MIMECPINFO, *PMIMECPINFO;\n\n    typedef struct tagMIMECSETINFO\n    {\n        UINT uiCodePage;\n        UINT uiInternetEncoding;\n        WCHAR wszCharset[MAX_MIMECSET_NAME];\n    } MIMECSETINFO, *PMIMECSETINFO;\n\n    HRESULT Clone( \n        [out] IEnumCodePage **ppEnum);\n\n    HRESULT Next(      \n        [in] ULONG celt,\n        [out] PMIMECPINFO rgelt,\n        [out] ULONG *pceltFetched);\n\n    HRESULT Reset();\n\n    HRESULT Skip(      \n        [in] ULONG celt);\n}\n\n[\n  object,\n  uuid(d66d6f98-cdaa-11d0-b822-00c04fc9b31f),\n  pointer_default(unique)\n]\ninterface IMLangConvertCharset : IUnknown\n{\n    typedef enum tagMLCONVCHARF\n    {\n        MLCONVCHARF_AUTODETECT      = 1,\n        MLCONVCHARF_ENTITIZE        = 2,\n        MLCONVCHARF_NCR_ENTITIZE    = 2,\n        MLCONVCHARF_NAME_ENTITIZE   = 4,\n        MLCONVCHARF_USEDEFCHAR      = 8,\n        MLCONVCHARF_NOBESTFITCHARS  = 16,\n        MLCONVCHARF_DETECTJPN       = 32\n    } MLCONVCHAR;\n\n    typedef enum tagMLCPF\n    {\n        MLDETECTF_MAILNEWS              = 0x0001,\n        MLDETECTF_BROWSER               = 0x0002,\n        MLDETECTF_VALID                 = 0x0004,\n        MLDETECTF_VALID_NLS             = 0x0008,\n        MLDETECTF_PRESERVE_ORDER        = 0x0010,\n        MLDETECTF_PREFERRED_ONLY        = 0x0020,\n        MLDETECTF_FILTER_SPECIALCHAR    = 0x0040,\n        MLDETECTF_EURO_UTF8             = 0x0080\n    } MLCP;\n\n    HRESULT Initialize(      \n        [in] UINT uiSrcCodePage,\n        [in] UINT uiDstCodePage,\n        [in] DWORD dwProperty);\n\n    HRESULT GetSourceCodePage(      \n        [out] UINT *puiSrcCodePage);\n\n    HRESULT GetDestinationCodePage(      \n        [out] UINT *puiDstCodePage);\n\n    HRESULT GetProperty(      \n        [out] DWORD *pdwProperty);\n\n    HRESULT DoConversion(      \n        [in] BYTE *pSrcStr,\n        [in,out] UINT *pcSrcSize,\n        [in] BYTE *pDstStr,\n        [in,out] UINT *pcDstSize);\n\n    HRESULT DoConversionToUnicode(      \n        [in] CHAR *pSrcStr,\n        [in,out] UINT *pcSrcSize,\n        [in] WCHAR *pDstStr,\n        [in,out] UINT *pcDstSize);\n\n    HRESULT DoConversionFromUnicode(      \n        [in] WCHAR *pSrcStr,\n        [in,out] UINT *pcSrcSize,\n        [in] CHAR *pDstStr,\n        [in,out] UINT *pcDstSize);\n}\n\n[\n    uuid(d66d6f99-cdaa-11d0-b822-00c04fc9b31f)\n]\ncoclass CMLangConvertCharset\n{\n    [default] interface IMLangConvertCharset;\n}\n\n[\n  object,\n  uuid(3dc39d1d-c030-11d0-b81b-00c04fc9b31f),\n  pointer_default(unique)\n]\ninterface IEnumRfc1766 : IUnknown\n{\n    const USHORT MAX_RFC1766_NAME = 6;\n    const USHORT MAX_LOCALE_NAME = 32;\n\n    typedef struct tagRFC1766INFO\n    {\n        LCID lcid;\n        WCHAR wszRfc1766[MAX_RFC1766_NAME];\n        WCHAR wszLocaleName[MAX_LOCALE_NAME];\n    } RFC1766INFO, *PRFC1766INFO;\n\n    HRESULT Clone( \n        [out] IEnumRfc1766 **ppEnum);\n\n    HRESULT Next(      \n        [in] ULONG celt,\n        [out] PRFC1766INFO rgelt,\n        [out] ULONG *pceltFetched);\n\n    HRESULT Reset();\n\n    HRESULT Skip(      \n        [in] ULONG celt);\n}\n\n[\n  object,\n  uuid(275c23e1-3747-11d0-9fea-00aa003f8646),\n  pointer_default(unique)\n]\ninterface IMultiLanguage : IUnknown\n{\n    HRESULT GetNumberOfCodePageInfo(      \n        [out] UINT *pcCodePage);\n\n    HRESULT GetCodePageInfo(      \n        [in] UINT uiCodePage,\n        [out] PMIMECPINFO pCodePageInfo);\n\n    HRESULT GetFamilyCodePage(      \n        [in] UINT uiCodePage,\n        [out] UINT *puiFamilyCodePage);\n\n    HRESULT EnumCodePages(      \n        [in] DWORD grfFlags,\n        [out] IEnumCodePage **ppEnumCodePage);\n\n    HRESULT GetCharsetInfo(      \n        [in] BSTR Charset,\n        [in] PMIMECSETINFO pCharsetInfo);\n\n    HRESULT IsConvertible(      \n        [in] DWORD dwSrcEncoding,\n        [in] DWORD dwDstEncoding);\n\n    HRESULT ConvertString(      \n        [in,out] DWORD *pdwMode,\n        [in] DWORD dwSrcEncoding,\n        [in] DWORD dwDstEncoding,\n        [in] BYTE *pSrcStr,\n        [in,out] UINT *pcSrcSize,\n        [in] BYTE *pDstStr,\n        [in,out] UINT *pcDstSize);\n\n    HRESULT ConvertStringToUnicode(      \n        [in,out] DWORD *pdwMode,\n        [in] DWORD dwEncoding,\n        [in] CHAR *pSrcStr,\n        [in,out] UINT *pcSrcSize,\n        [in] WCHAR *pDstStr,\n        [in,out] UINT *pcDstSize);\n\n    HRESULT ConvertStringFromUnicode(      \n        [in,out] DWORD *pdwMode,\n        [in] DWORD dwEncoding,\n        [in] WCHAR *pSrcStr,\n        [in,out] UINT *pcSrcSize,\n        [in] CHAR *pDstStr,\n        [in,out] UINT *pcDstSize);\n\n    HRESULT ConvertStringReset();\n\n    HRESULT GetRfc1766FromLcid(      \n        [in] LCID Locale,\n        [out] BSTR *pbstrRfc1766);\n\n    HRESULT GetLcidFromRfc1766(      \n        [out] LCID *pLocale,\n        [in] BSTR bstrRfc1766);\n\n    HRESULT EnumRfc1766(      \n        [out] IEnumRfc1766 **ppEnumRfc1766);\n\n    HRESULT GetRfc1766Info(      \n        [in] LCID Locale,\n        [out] PRFC1766INFO pRfc1766Info);\n\n    HRESULT CreateConvertCharset(      \n        [in] UINT uiSrcCodePage,\n        [in] UINT uiDstCodePage,\n        [in] DWORD dwProperty,\n        [out] IMLangConvertCharset **ppMLangConvertCharset);\n\n}\n\n[\n  object,\n  uuid(dccfc164-2b38-11d2-b7ec-00c04f8f5d9a),\n  pointer_default(unique)\n]\ninterface IMultiLanguage2 : IUnknown\n{\n    typedef struct tagDetectEncodingInfo\n    {\n        UINT nLangID;\n        UINT nCodePage;\n        INT nDocPercent;\n        INT nConfidence;\n    } DetectEncodingInfo, *pDetectEncodingInfo;\n\n    HRESULT GetNumberOfCodePageInfo(      \n        [out] UINT *pcCodePage);\n\n    HRESULT GetCodePageInfo(      \n        [in] UINT uiCodePage,\n        [in] LANGID LangId,\n        [out] PMIMECPINFO pCodePageInfo);\n\n    HRESULT GetFamilyCodePage(      \n        [in] UINT uiCodePage,\n        [out] UINT *puiFamilyCodePage);\n\n    HRESULT EnumCodePages(      \n        [in] DWORD grfFlags,\n        [in] LANGID LangId,\n        [out] IEnumCodePage **ppEnumCodePage);\n\n    HRESULT GetCharsetInfo(      \n        [in] BSTR Charset,\n        [in] PMIMECSETINFO pCharsetInfo);\n\n    HRESULT IsConvertible(      \n        [in] DWORD dwSrcEncoding,\n        [in] DWORD dwDstEncoding);\n\n    HRESULT ConvertString(      \n        [in,out] DWORD *pdwMode,\n        [in] DWORD dwSrcEncoding,\n        [in] DWORD dwDstEncoding,\n        [in] BYTE *pSrcStr,\n        [in,out] UINT *pcSrcSize,\n        [in] BYTE *pDstStr,\n        [in,out] UINT *pcDstSize);\n\n    HRESULT ConvertStringToUnicode(      \n        [in,out] DWORD *pdwMode,\n        [in] DWORD dwEncoding,\n        [in] CHAR *pSrcStr,\n        [in,out] UINT *pcSrcSize,\n        [in] WCHAR *pDstStr,\n        [in,out] UINT *pcDstSize);\n\n    HRESULT ConvertStringFromUnicode(      \n        [in,out] DWORD *pdwMode,\n        [in] DWORD dwEncoding,\n        [in] WCHAR *pSrcStr,\n        [in,out] UINT *pcSrcSize,\n        [in] CHAR *pDstStr,\n        [in,out] UINT *pcDstSize);\n\n    HRESULT ConvertStringReset();\n\n    HRESULT GetRfc1766FromLcid(      \n        [in] LCID Locale,\n        [out] BSTR *pbstrRfc1766);\n\n    HRESULT GetLcidFromRfc1766(      \n        [out] LCID *pLocale,\n        [in] BSTR bstrRfc1766);\n\n    HRESULT EnumRfc1766(      \n        [in] LANGID LangId,\n        [out] IEnumRfc1766 **ppEnumRfc1766);\n\n    HRESULT GetRfc1766Info(      \n        [in] LCID Locale,\n        [in] LANGID LangId,\n        [out] PRFC1766INFO pRfc1766Info);\n\n    HRESULT CreateConvertCharset(      \n        [in] UINT uiSrcCodePage,\n        [in] UINT uiDstCodePage,\n        [in] DWORD dwProperty,\n        [out] IMLangConvertCharset **ppMLangConvertCharset);\n\n    HRESULT ConvertStringInIStream(      \n        [in,out] DWORD *pdwMode,\n        [in] DWORD dwFlag,\n        [in] WCHAR *lpFallBack,\n        [in] DWORD dwSrcEncoding,\n        [in] DWORD dwDstEncoding,\n        [in] IStream *pstmIn,\n        [in] IStream *pstmOut);\n\n    HRESULT ConvertStringToUnicodeEx(      \n        [in,out] DWORD *pdwMode,\n        [in] DWORD dwEncoding,\n        [in] CHAR *pSrcStr,\n        [in,out] UINT *pcSrcSize,\n        [in] WCHAR *pDstStr,\n        [in,out] UINT *pcDstSize,\n        [in] DWORD dwFlag,\n        [in] WCHAR *lpFallBack);\n\n    HRESULT ConvertStringFromUnicodeEx(\n        [in,out] DWORD *pdwMode,\n        [in] DWORD dwEncoding,\n        [in] WCHAR *pSrcStr,\n        [in,out] UINT *pcSrcSize,\n        [in] CHAR *pDstStr,\n        [in,out] UINT *pcDstSize,\n        [in] DWORD dwFlag,\n        [in] WCHAR *lpFallBack);\n\n    HRESULT DetectCodepageInIStream(      \n        [in] DWORD dwFlag,\n        [in] DWORD dwPrefWinCodePage,\n        [in] IStream *pstmIn,\n        [in,out] DetectEncodingInfo *lpEncoding,\n        [in,out] INT *pnScores);\n\n    HRESULT DetectInputCodepage(      \n        [in] DWORD dwFlag,\n        [in] DWORD dwPrefWinCodePage,\n        [in] CHAR *pSrcStr,\n        [in,out] INT *pcSrcSize,\n        [in,out] DetectEncodingInfo *lpEncoding,\n        [in,out] INT *pnScores);\n\n    HRESULT ValidateCodePage(\n        [in] UINT uiCodePage,\n        [in] HWND hwnd);\n\n    HRESULT GetCodePageDescription(      \n        [in] UINT uiCodePage,\n        [in] LCID lcid,\n        [in,out,size_is(cchWideChar)] LPWSTR lpWideCharStr,\n        [in] int cchWideChar);\n\n    HRESULT IsCodePageInstallable(\n        [in] UINT uiCodePage);\n\n    HRESULT SetMimeDBSource(      \n        [in] MIMECONTF dwSource);\n\n    HRESULT GetNumberOfScripts(      \n        [out] UINT *pnScripts);\n\n    HRESULT EnumScripts(      \n        [in] DWORD dwFlags,\n        [in] LANGID LangId,\n        [out] IEnumScript **ppEnumScript);\n\n    HRESULT ValidateCodePageEx( /* undocumented on MSDN */\n        [in] UINT uiCodePage,\n        [in] HWND hwnd,\n        [in] DWORD dwfIODControl);\n}\n\n[\n    object,\n    uuid(4e5868ab-b157-4623-9acc-6a1d9caebe04),\n    pointer_default(unique)\n]\ninterface IMultiLanguage3 : IMultiLanguage2\n{\n    typedef [unique] IMultiLanguage3 *LPMULTILANGUAGE3;\n    HRESULT DetectOutboundCodePage(\n        [in] DWORD dwFlags,\n        [in] LPCWSTR lpWideCharStr,\n        [in] UINT cchWideChar,\n        [in] UINT *puiPreferredCodePages,\n        [in] UINT nPreferredCodePages,\n        [in] UINT *puiDetectedCodePages,\n        [in, out] UINT *pnDetectedCodePages,\n        [in] WCHAR *lpSpecialChar);\n\n    HRESULT DetectOutboundCodePageInIStream(\n        [in] DWORD dwFlags,\n        [in] IStream *pStrIn,\n        [in] UINT *puiPreferredCodePages,\n        [in] UINT nPreferredCodePages,\n        [in] UINT *puiDetectedCodePages,\n        [in, out] UINT *pnDetectedCodePages,\n        [in] WCHAR *lpSpecialChar);\n}\n\n[\n    uuid(275C23E2-3747-11d0-9FEA-00AA003f8646)\n]\ncoclass CMultiLanguage\n{\n    [default] interface IMultiLanguage;\n    interface IMLangCodePages;\n    interface IMLangFontLink;\n    /* interface IMLangLineBreakConsole; */\n    interface IMLangFontLink2;\n}\n\ncpp_quote(\"STDAPI LcidToRfc1766A(LCID, LPSTR, INT);\")\ncpp_quote(\"STDAPI LcidToRfc1766W(LCID, LPWSTR, INT);\")\ncpp_quote(\"#define LcidToRfc1766 WINELIB_NAME_AW(LcidToRfc1766)\")\n\ncpp_quote(\"STDAPI Rfc1766ToLcidA(LCID *, LPCSTR);\")\ncpp_quote(\"STDAPI Rfc1766ToLcidW(LCID *, LPCWSTR);\")\ncpp_quote(\"#define Rfc1766ToLcid WINELIB_NAME_AW(Rfc1766ToLcid)\")\n\ncpp_quote(\"STDAPI GetGlobalFontLinkObject(void **unknown);\")\ncpp_quote(\"STDAPI IsConvertINetStringAvailable(DWORD, DWORD);\")\ncpp_quote(\"STDAPI ConvertINetString(LPDWORD, DWORD, DWORD, LPCSTR, LPINT, LPSTR, LPINT);\")\ncpp_quote(\"STDAPI ConvertINetMultiByteToUnicode(LPDWORD, DWORD, LPCSTR, LPINT, LPWSTR, LPINT);\")\ncpp_quote(\"STDAPI ConvertINetUnicodeToMultiByte(LPDWORD, DWORD, LPCWSTR, LPINT, LPSTR, LPINT);\")\n"
  },
  {
    "path": "wine/windows/mmc.idl",
    "content": "/*\n *\n * Copyright 2011 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"basetsd.h\";\nimport \"oaidl.idl\";\n\n#ifndef __WIDL__\n#define threading(model)\n#define progid(str)\n#define vi_progid(str)\n#endif\n\n[\n    uuid(A8D2C5FE-CDCB-4B9D-BDE5-A27343FF54BC),\n]\ninterface IMMCVersionInfo : IUnknown\n{\n   HRESULT GetMMCVersion([out] long * pVersionMajor, [out] long * pVersionMinor);\n}\n\n\n[\n   uuid(9EECDD85-B715-4188-8A72-61159ABDB8C4),\n   version(1.0),\n]\nlibrary MMCVersionLib\n{\n   importlib(\"stdole2.tlb\");\n\n   [\n      helpstring(\"MMCVersionInfo 1.0 Object\"),\n      uuid(D6FEDB1D-CF21-4BD9-AF3B-C5468E9C6684),\n      threading(apartment),\n      progid(\"NODEMGR.MMCVersionInfo.1\"),\n      vi_progid(\"NODEMGR.MMCVersionInfo\")\n   ]\n   coclass MMCVersionInfo\n   {\n       [default] interface IMMCVersionInfo;\n   }\n\n}\n"
  },
  {
    "path": "wine/windows/mmddk.h",
    "content": "/*\n * Copyright 1998, Luiz Otavio L. Zorzella\n *           1999, Eric Pouech\n *\n * Purpose:   multimedia declarations (external to WINMM & MMSYSTEM DLLs\n *                                     for other DLLs (MCI, drivers...))\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __MMDDK_H\n#define __MMDDK_H\n\n#include <mmsystem.h>\n#include <winbase.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define MAX_MIDIINDRV \t(16)\n/* For now I'm making 16 the maximum number of midi devices one can\n * have. This should be more than enough for everybody. But as a purist,\n * I intend to make it unbounded in the future, as soon as I figure\n * a good way to do so.\n */\n#define MAX_MIDIOUTDRV \t(16)\n\n/* ==================================\n *   Multimedia DDK compatible part\n * ================================== */\n\n#include <pshpack1.h>\n\n#define DRVM_INIT\t\t100\n#define DRVM_EXIT\t\t101\n#define DRVM_DISABLE\t\t102\n#define DRVM_ENABLE\t\t103\n\n/* messages that have IOCTL format\n *    dw1 = NULL or handle\n *    dw2 = NULL or ptr to DRVM_IOCTL_DATA\n *    return is MMRESULT\n */\n#define DRVM_IOCTL\t\t0x100\n#define DRVM_ADD_THRU\t\t(DRVM_IOCTL+1)\n#define DRVM_REMOVE_THRU\t(DRVM_IOCTL+2)\n#define DRVM_IOCTL_LAST\t\t(DRVM_IOCTL+5)\ntypedef struct {\n    DWORD  dwSize; \t/* size of this structure */\n    DWORD  dwCmd;  \t/* IOCTL command code, 0x80000000 and above reserved for system */\n} DRVM_IOCTL_DATA, *LPDRVM_IOCTL_DATA;\n\n/* command code ranges for dwCmd field of DRVM_IOCTL message\n * - codes from 0 to 0x7FFFFFFF are user defined\n * - codes from 0x80000000 to 0xFFFFFFFF are reserved for future definition by microsoft\n */\n#define DRVM_IOCTL_CMD_USER   __MSABI_LONG(0x00000000)\n#define DRVM_IOCTL_CMD_SYSTEM __MSABI_LONG(0x80000000)\n\n#define DRVM_MAPPER\t\t\t0x2000\n#define DRVM_USER\t\t\t0x4000\n#define DRVM_MAPPER_STATUS\t\t(DRVM_MAPPER+0)\n#define DRVM_MAPPER_RECONFIGURE \t(DRVM_MAPPER+1)\n#define DRVM_MAPPER_PREFERRED_GET\t(DRVM_MAPPER+21)\n#define DRVM_MAPPER_CONSOLEVOICECOM_GET\t(DRVM_MAPPER+23)\n\n#define DRV_QUERYDRVENTRY\t\t(DRV_RESERVED + 1)\n#define DRV_QUERYDEVNODE\t\t(DRV_RESERVED + 2)\n#define DRV_QUERYNAME\t\t\t(DRV_RESERVED + 3)\n#define DRV_QUERYDRIVERIDS\t\t(DRV_RESERVED + 4)\n#define DRV_QUERYMAPPABLE\t\t(DRV_RESERVED + 5)\n#define DRV_QUERYMODULE\t\t\t(DRV_RESERVED + 9)\n#define DRV_PNPINSTALL\t\t\t(DRV_RESERVED + 11)\n#define DRV_QUERYDEVICEINTERFACE\t(DRV_RESERVED + 12)\n#define DRV_QUERYDEVICEINTERFACESIZE\t(DRV_RESERVED + 13)\n#define DRV_QUERYSTRINGID\t\t(DRV_RESERVED + 14)\n#define DRV_QUERYSTRINGIDSIZE\t\t(DRV_RESERVED + 15)\n#define DRV_QUERYIDFROMSTRINGID\t\t(DRV_RESERVED + 16)\n#define DRV_QUERYFUNCTIONINSTANCEID\t(DRV_RESERVED + 17)\n#define DRV_QUERYFUNCTIONINSTANCEIDSIZE\t(DRV_RESERVED + 18)\n\n#define DRVM_MAPPER_PREFERRED_FLAGS_PREFERREDONLY   0x00000001\n\n#define WODM_INIT\t\tDRVM_INIT\n#define WODM_GETNUMDEVS\t\t 3\n#define WODM_GETDEVCAPS\t\t 4\n#define WODM_OPEN\t\t 5\n#define WODM_CLOSE\t\t 6\n#define WODM_PREPARE\t\t 7\n#define WODM_UNPREPARE\t\t 8\n#define WODM_WRITE\t\t 9\n#define WODM_PAUSE\t\t10\n#define WODM_RESTART\t\t11\n#define WODM_RESET\t\t12\n#define WODM_GETPOS\t\t13\n#define WODM_GETPITCH\t\t14\n#define WODM_SETPITCH\t\t15\n#define WODM_GETVOLUME\t\t16\n#define WODM_SETVOLUME\t\t17\n#define WODM_GETPLAYBACKRATE\t18\n#define WODM_SETPLAYBACKRATE\t19\n#define WODM_BREAKLOOP\t\t20\n#define WODM_PREFERRED\t\t21\n\n#define WODM_MAPPER_STATUS      (DRVM_MAPPER_STATUS + 0)\n#define WAVEOUT_MAPPER_STATUS_DEVICE    0\n#define WAVEOUT_MAPPER_STATUS_MAPPED    1\n#define WAVEOUT_MAPPER_STATUS_FORMAT    2\n\n#define WODM_BUSY\t\t21\n\n#define WIDM_INIT\t\tDRVM_INIT\n#define WIDM_GETNUMDEVS\t\t50\n#define WIDM_GETDEVCAPS\t\t51\n#define WIDM_OPEN\t\t52\n#define WIDM_CLOSE\t\t53\n#define WIDM_PREPARE\t\t54\n#define WIDM_UNPREPARE\t\t55\n#define WIDM_ADDBUFFER\t\t56\n#define WIDM_START\t\t57\n#define WIDM_STOP\t\t58\n#define WIDM_RESET\t\t59\n#define WIDM_GETPOS\t\t60\n#define WIDM_PREFERRED\t\t61\n#define WIDM_MAPPER_STATUS      (DRVM_MAPPER_STATUS + 0)\n#define WAVEIN_MAPPER_STATUS_DEVICE     0\n#define WAVEIN_MAPPER_STATUS_MAPPED     1\n#define WAVEIN_MAPPER_STATUS_FORMAT     2\n\n#define MODM_INIT\t\tDRVM_INIT\n#define MODM_GETNUMDEVS\t\t1\n#define MODM_GETDEVCAPS\t\t2\n#define MODM_OPEN\t\t3\n#define MODM_CLOSE\t\t4\n#define MODM_PREPARE\t\t5\n#define MODM_UNPREPARE\t\t6\n#define MODM_DATA\t\t7\n#define MODM_LONGDATA\t\t8\n#define MODM_RESET          \t9\n#define MODM_GETVOLUME\t\t10\n#define MODM_SETVOLUME\t\t11\n#define MODM_CACHEPATCHES\t12\n#define MODM_CACHEDRUMPATCHES\t13\n\n#define MIDM_INIT\t\tDRVM_INIT\n#define MIDM_GETNUMDEVS  \t53\n#define MIDM_GETDEVCAPS  \t54\n#define MIDM_OPEN        \t55\n#define MIDM_CLOSE       \t56\n#define MIDM_PREPARE     \t57\n#define MIDM_UNPREPARE   \t58\n#define MIDM_ADDBUFFER   \t59\n#define MIDM_START       \t60\n#define MIDM_STOP        \t61\n#define MIDM_RESET       \t62\n\n\n#define AUXM_INIT             \tDRVM_INIT\n#define AUXDM_GETNUMDEVS    \t3\n#define AUXDM_GETDEVCAPS    \t4\n#define AUXDM_GETVOLUME     \t5\n#define AUXDM_SETVOLUME     \t6\n\n#define MXDM_INIT\t\tDRVM_INIT\n#define MXDM_USER               DRVM_USER\n#define MXDM_MAPPER             DRVM_MAPPER\n\n#define\tMXDM_GETNUMDEVS\t\t1\n#define\tMXDM_GETDEVCAPS\t\t2\n#define\tMXDM_OPEN\t\t3\n#define\tMXDM_CLOSE\t\t4\n#define\tMXDM_GETLINEINFO\t5\n#define\tMXDM_GETLINECONTROLS\t6\n#define\tMXDM_GETCONTROLDETAILS\t7\n#define\tMXDM_SETCONTROLDETAILS\t8\n\n/* pre-defined joystick types */\n#define JOY_HW_NONE\t\t\t0\n#define JOY_HW_CUSTOM\t\t\t1\n#define JOY_HW_2A_2B_GENERIC\t\t2\n#define JOY_HW_2A_4B_GENERIC\t\t3\n#define JOY_HW_2B_GAMEPAD\t\t4\n#define JOY_HW_2B_FLIGHTYOKE\t\t5\n#define JOY_HW_2B_FLIGHTYOKETHROTTLE\t6\n#define JOY_HW_3A_2B_GENERIC\t\t7\n#define JOY_HW_3A_4B_GENERIC\t\t8\n#define JOY_HW_4B_GAMEPAD\t\t9\n#define JOY_HW_4B_FLIGHTYOKE\t\t10\n#define JOY_HW_4B_FLIGHTYOKETHROTTLE\t11\n#define JOY_HW_LASTENTRY\t\t12\n\n/* calibration flags */\n#define JOY_ISCAL_XY            __MSABI_LONG(0x00000001)    /* XY are calibrated */\n#define JOY_ISCAL_Z             __MSABI_LONG(0x00000002)    /* Z is calibrated */\n#define JOY_ISCAL_R             __MSABI_LONG(0x00000004)    /* R is calibrated */\n#define JOY_ISCAL_U             __MSABI_LONG(0x00000008)    /* U is calibrated */\n#define JOY_ISCAL_V             __MSABI_LONG(0x00000010)    /* V is calibrated */\n#define JOY_ISCAL_POV           __MSABI_LONG(0x00000020)    /* POV is calibrated */\n\n/* point of view constants */\n#define JOY_POV_NUMDIRS          4\n#define JOY_POVVAL_FORWARD       0\n#define JOY_POVVAL_BACKWARD      1\n#define JOY_POVVAL_LEFT          2\n#define JOY_POVVAL_RIGHT         3\n\n/* Specific settings for joystick hardware */\n#define JOY_HWS_HASZ            __MSABI_LONG(0x00000001)    /* has Z info? */\n#define JOY_HWS_HASPOV          __MSABI_LONG(0x00000002)    /* point of view hat present */\n#define JOY_HWS_POVISBUTTONCOMBOS __MSABI_LONG(0x00000004)  /* pov done through combo of buttons */\n#define JOY_HWS_POVISPOLL       __MSABI_LONG(0x00000008)    /* pov done through polling */\n#define JOY_HWS_ISYOKE          __MSABI_LONG(0x00000010)    /* joystick is a flight yoke */\n#define JOY_HWS_ISGAMEPAD       __MSABI_LONG(0x00000020)    /* joystick is a game pad */\n#define JOY_HWS_ISCARCTRL       __MSABI_LONG(0x00000040)    /* joystick is a car controller */\n/* X defaults to J1 X axis */\n#define JOY_HWS_XISJ1Y          __MSABI_LONG(0x00000080)    /* X is on J1 Y axis */\n#define JOY_HWS_XISJ2X          __MSABI_LONG(0x00000100)    /* X is on J2 X axis */\n#define JOY_HWS_XISJ2Y          __MSABI_LONG(0x00000200)    /* X is on J2 Y axis */\n/* Y defaults to J1 Y axis */\n#define JOY_HWS_YISJ1X          __MSABI_LONG(0x00000400)    /* Y is on J1 X axis */\n#define JOY_HWS_YISJ2X          __MSABI_LONG(0x00000800)    /* Y is on J2 X axis */\n#define JOY_HWS_YISJ2Y          __MSABI_LONG(0x00001000)    /* Y is on J2 Y axis */\n/* Z defaults to J2 Y axis */\n#define JOY_HWS_ZISJ1X          __MSABI_LONG(0x00002000)    /* Z is on J1 X axis */\n#define JOY_HWS_ZISJ1Y          __MSABI_LONG(0x00004000)    /* Z is on J1 Y axis */\n#define JOY_HWS_ZISJ2X          __MSABI_LONG(0x00008000)    /* Z is on J2 X axis */\n/* POV defaults to J2 Y axis, if it is not button based */\n#define JOY_HWS_POVISJ1X        __MSABI_LONG(0x00010000)    /* pov done through J1 X axis */\n#define JOY_HWS_POVISJ1Y        __MSABI_LONG(0x00020000)    /* pov done through J1 Y axis */\n#define JOY_HWS_POVISJ2X        __MSABI_LONG(0x00040000)    /* pov done through J2 X axis */\n/* R defaults to J2 X axis */\n#define JOY_HWS_HASR            __MSABI_LONG(0x00080000)    /* has R (4th axis) info */\n#define JOY_HWS_RISJ1X          __MSABI_LONG(0x00100000)    /* R done through J1 X axis */\n#define JOY_HWS_RISJ1Y          __MSABI_LONG(0x00200000)    /* R done through J1 Y axis */\n#define JOY_HWS_RISJ2Y          __MSABI_LONG(0x00400000)    /* R done through J2 X axis */\n/* U & V for future hardware */\n#define JOY_HWS_HASU            __MSABI_LONG(0x00800000)    /* has U (5th axis) info */\n#define JOY_HWS_HASV            __MSABI_LONG(0x01000000)    /* has V (6th axis) info */\n\n/* Usage settings */\n#define JOY_US_HASRUDDER        __MSABI_LONG(0x00000001)    /* joystick configured with rudder */\n#define JOY_US_PRESENT          __MSABI_LONG(0x00000002)    /* is joystick actually present? */\n#define JOY_US_ISOEM            __MSABI_LONG(0x00000004)    /* joystick is an OEM defined type */\n\n\n/* struct for storing x,y, z, and rudder values */\ntypedef struct joypos_tag {\n    DWORD\tdwX;\n    DWORD\tdwY;\n    DWORD\tdwZ;\n    DWORD\tdwR;\n    DWORD\tdwU;\n    DWORD\tdwV;\n} JOYPOS, *LPJOYPOS;\n\n/* struct for storing ranges */\ntypedef struct joyrange_tag {\n    JOYPOS\tjpMin;\n    JOYPOS\tjpMax;\n    JOYPOS\tjpCenter;\n} JOYRANGE,*LPJOYRANGE;\n\ntypedef struct joyreguservalues_tag {\n    DWORD\tdwTimeOut;\t/* value at which to timeout joystick polling */\n    JOYRANGE\tjrvRanges;\t/* range of values app wants returned for axes */\n    JOYPOS\tjpDeadZone;\t/* area around center to be considered\n    \t\t\t\t   as \"dead\". specified as a percentage\n\t\t\t\t   (0-100). Only X & Y handled by system driver */\n} JOYREGUSERVALUES, *LPJOYREGUSERVALUES;\n\ntypedef struct joyreghwsettings_tag {\n    DWORD\tdwFlags;\n    DWORD\tdwNumButtons;\t\t/* number of buttons */\n} JOYREGHWSETTINGS, *LPJOYHWSETTINGS;\n\n/* range of values returned by the hardware (filled in by calibration) */\ntypedef struct joyreghwvalues_tag {\n    JOYRANGE\tjrvHardware;\t\t/* values returned by hardware */\n    DWORD\tdwPOVValues[JOY_POV_NUMDIRS];/* POV values returned by hardware */\n    DWORD\tdwCalFlags;\t\t/* what has been calibrated */\n} JOYREGHWVALUES, *LPJOYREGHWVALUES;\n\n/* hardware configuration */\ntypedef struct joyreghwconfig_tag {\n    JOYREGHWSETTINGS\thws;\t\t/* hardware settings */\n    DWORD\t\tdwUsageSettings;/* usage settings */\n    JOYREGHWVALUES\thwv;\t\t/* values returned by hardware */\n    DWORD\t\tdwType;\t\t/* type of joystick */\n    DWORD\t\tdwReserved;\t/* reserved for OEM drivers */\n} JOYREGHWCONFIG, *LPJOYREGHWCONFIG;\n\n/* joystick calibration info structure */\ntypedef struct joycalibrate_tag {\n    UINT    wXbase;\n    UINT    wXdelta;\n    UINT    wYbase;\n    UINT    wYdelta;\n    UINT    wZbase;\n    UINT    wZdelta;\n} JOYCALIBRATE;\ntypedef JOYCALIBRATE *LPJOYCALIBRATE;\n\n/* prototype for joystick message function */\ntypedef UINT (CALLBACK * JOYDEVMSGPROC)(DWORD dwID, UINT uMessage, LPARAM lParam1, LPARAM lParam2);\ntypedef JOYDEVMSGPROC *LPJOYDEVMSGPROC;\n\n/* messages sent to joystick driver's DriverProc() function */\n#define JDD_GETNUMDEVS          (DRV_RESERVED + 0x0001)\n#define JDD_GETDEVCAPS          (DRV_RESERVED + 0x0002)\n#define JDD_GETPOS              (DRV_RESERVED + 0x0101)\n#define JDD_SETCALIBRATION      (DRV_RESERVED + 0x0102)\n#define JDD_CONFIGCHANGED       (DRV_RESERVED + 0x0103)\n#define JDD_GETPOSEX            (DRV_RESERVED + 0x0104)\n\n#define MCI_MAX_DEVICE_TYPE_LENGTH 80\n\n#define MCI_FALSE                       (MCI_STRING_OFFSET + 19)\n#define MCI_TRUE                        (MCI_STRING_OFFSET + 20)\n\n#define MCI_FORMAT_RETURN_BASE          MCI_FORMAT_MILLISECONDS_S\n#define MCI_FORMAT_MILLISECONDS_S       (MCI_STRING_OFFSET + 21)\n#define MCI_FORMAT_HMS_S                (MCI_STRING_OFFSET + 22)\n#define MCI_FORMAT_MSF_S                (MCI_STRING_OFFSET + 23)\n#define MCI_FORMAT_FRAMES_S             (MCI_STRING_OFFSET + 24)\n#define MCI_FORMAT_SMPTE_24_S           (MCI_STRING_OFFSET + 25)\n#define MCI_FORMAT_SMPTE_25_S           (MCI_STRING_OFFSET + 26)\n#define MCI_FORMAT_SMPTE_30_S           (MCI_STRING_OFFSET + 27)\n#define MCI_FORMAT_SMPTE_30DROP_S       (MCI_STRING_OFFSET + 28)\n#define MCI_FORMAT_BYTES_S              (MCI_STRING_OFFSET + 29)\n#define MCI_FORMAT_SAMPLES_S            (MCI_STRING_OFFSET + 30)\n#define MCI_FORMAT_TMSF_S               (MCI_STRING_OFFSET + 31)\n\n#define MCI_VD_FORMAT_TRACK_S           (MCI_VD_OFFSET + 5)\n\n#define WAVE_FORMAT_PCM_S               (MCI_WAVE_OFFSET + 0)\n#define WAVE_MAPPER_S                   (MCI_WAVE_OFFSET + 1)\n\n#define MCI_SEQ_MAPPER_S                (MCI_SEQ_OFFSET + 5)\n#define MCI_SEQ_FILE_S                  (MCI_SEQ_OFFSET + 6)\n#define MCI_SEQ_MIDI_S                  (MCI_SEQ_OFFSET + 7)\n#define MCI_SEQ_SMPTE_S                 (MCI_SEQ_OFFSET + 8)\n#define MCI_SEQ_FORMAT_SONGPTR_S        (MCI_SEQ_OFFSET + 9)\n#define MCI_SEQ_NONE_S                  (MCI_SEQ_OFFSET + 10)\n#define MIDIMAPPER_S                    (MCI_SEQ_OFFSET + 11)\n\n#define MCI_RESOURCE_RETURNED       0x00010000  /* resource ID */\n#define MCI_COLONIZED3_RETURN       0x00020000  /* colonized ID, 3 bytes data */\n#define MCI_COLONIZED4_RETURN       0x00040000  /* colonized ID, 4 bytes data */\n#define MCI_INTEGER_RETURNED        0x00080000  /* integer conversion needed */\n#define MCI_RESOURCE_DRIVER         0x00100000  /* driver owns returned resource */\n\n#define MCI_NO_COMMAND_TABLE    0xFFFF\n\n#define MCI_COMMAND_HEAD        0\n#define MCI_STRING              1\n#define MCI_INTEGER             2\n#define MCI_END_COMMAND         3\n#define MCI_RETURN              4\n#define MCI_FLAG                5\n#define MCI_END_COMMAND_LIST    6\n#define MCI_RECT                7\n#define MCI_CONSTANT            8\n#define MCI_END_CONSTANT        9\n#define MCI_HWND                10\n#define MCI_HPAL                11\n#define MCI_HDC                 12\n\n#ifdef _WIN64\n#define MCI_INTEGER64           13\n#endif /* _WIN64 */\n\n#define MAKEMCIRESOURCE(wRet, wRes) MAKELRESULT((wRet), (wRes))\n\ntypedef struct {\n\tHWAVE\t\t\thWave;\n\tLPWAVEFORMATEX\t\tlpFormat;\n\tDWORD_PTR\t\tdwCallback;\n\tDWORD_PTR\t\tdwInstance;\n\tUINT\t\t\tuMappedDeviceID;\n\tDWORD_PTR\t\tdnDevNode;\n} WAVEOPENDESC, *LPWAVEOPENDESC;\n\ntypedef struct {\n        DWORD  \t\t\tdwStreamID;\n        WORD   \t\t\twDeviceID;\n} MIDIOPENSTRMID;\n\ntypedef struct {\n\tHMIDI\t\t\thMidi;\n\tDWORD_PTR\t\tdwCallback;\n\tDWORD_PTR\t\tdwInstance;\n\tDWORD_PTR\t\tdnDevNode;\n        DWORD          \t\tcIds;\n        MIDIOPENSTRMID \t\trgIds;\n} MIDIOPENDESC, *LPMIDIOPENDESC;\n\ntypedef struct tMIXEROPENDESC\n{\n\tHMIXEROBJ\t\thmx;\n        LPVOID\t\t\tpReserved0;\n\tDWORD_PTR\t\tdwCallback;\n\tDWORD_PTR\t\tdwInstance;\n\tDWORD_PTR\t\tdnDevNode;\n} MIXEROPENDESC, *LPMIXEROPENDESC;\n\ntypedef struct {\n\tUINT\t\t\twDeviceID;\t\t/* device ID */\n\tLPSTR\t\t\tlpstrParams;\t\t/* parameter string for entry in SYSTEM.INI */\n\tUINT\t\t\twCustomCommandTable;\t/* custom command table (0xFFFF if none) * filled in by the driver */\n\tUINT\t\t\twType;\t\t\t/* driver type (filled in by the driver) */\n} MCI_OPEN_DRIVER_PARMSA, *LPMCI_OPEN_DRIVER_PARMSA;\n\ntypedef struct {\n\tUINT\t\t\twDeviceID;\t\t/* device ID */\n\tLPWSTR\t\t\tlpstrParams;\t\t/* parameter string for entry in SYSTEM.INI */\n\tUINT\t\t\twCustomCommandTable;\t/* custom command table (0xFFFF if none) * filled in by the driver */\n\tUINT\t\t\twType;\t\t\t/* driver type (filled in by the driver) */\n} MCI_OPEN_DRIVER_PARMSW, *LPMCI_OPEN_DRIVER_PARMSW;\nDECL_WINELIB_TYPE_AW(MCI_OPEN_DRIVER_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_OPEN_DRIVER_PARMS)\n\nDWORD_PTR\t\tWINAPI\tmciGetDriverData(UINT uDeviceID);\nBOOL\t\t\tWINAPI\tmciSetDriverData(UINT uDeviceID, DWORD_PTR dwData);\nUINT\t\t\tWINAPI\tmciDriverYield(UINT uDeviceID);\nBOOL\t\t\tWINAPI\tmciDriverNotify(HWND hwndCallback, UINT uDeviceID,\n\t\t\t\t\t\tUINT uStatus);\nUINT\t\t\tWINAPI\tmciLoadCommandResource(HINSTANCE hInstance,\n\t\t\t\t\t       LPCWSTR lpResName, UINT uType);\nBOOL\t\t\tWINAPI\tmciFreeCommandResource(UINT uTable);\n\n#define DCB_NULL\t\t0x0000\n#define DCB_WINDOW\t\t0x0001\t\t\t/* dwCallback is a HWND */\n#define DCB_TASK\t\t0x0002\t\t\t/* dwCallback is a HTASK */\n#define DCB_FUNCTION\t\t0x0003\t\t\t/* dwCallback is a FARPROC */\n#define DCB_EVENT\t\t0x0005\t\t\t/* dwCallback is an EVENT Handler */\n#define DCB_TYPEMASK\t\t0x0007\n#define DCB_NOSWITCH\t\t0x0008\t\t\t/* don't switch stacks for callback */\n\nBOOL WINAPI DriverCallback(DWORD_PTR dwCallBack, DWORD uFlags, HDRVR hDev,\n                           DWORD wMsg, DWORD_PTR dwUser, DWORD_PTR dwParam1, DWORD_PTR dwParam2);\n\ntypedef VOID (*LPTASKCALLBACK)(DWORD_PTR dwInst);\n\n#define TASKERR_NOTASKSUPPORT 1\n#define TASKERR_OUTOFMEMORY   2\nUINT     WINAPI mmTaskCreate(LPTASKCALLBACK, HANDLE*, DWORD_PTR);\nVOID     WINAPI mmTaskBlock(DWORD);\nBOOL     WINAPI mmTaskSignal(DWORD);\nVOID     WINAPI mmTaskYield(VOID);\nDWORD    WINAPI mmGetCurrentTask(VOID);\n\n#include <poppack.h>\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __MMDDK_H */\n"
  },
  {
    "path": "wine/windows/mmdeviceapi.idl",
    "content": "/*\n * Copyright (C) 2009 Maarten Lankhorst\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\nimport \"propsys.idl\";\n\ncpp_quote(\"#ifndef E_NOTFOUND\")\ncpp_quote(\"#define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND)\")\ncpp_quote(\"#endif\")\ncpp_quote(\"#ifndef E_UNSUPPORTED_TYPE\")\ncpp_quote(\"#define E_UNSUPPORTED_TYPE HRESULT_FROM_WIN32(ERROR_UNSUPPORTED_TYPE)\")\ncpp_quote(\"#endif\")\n\n\ncpp_quote(\"#define DEVICE_STATE_ACTIVE 0x1\")\ncpp_quote(\"#define DEVICE_STATE_DISABLED 0x2\")\ncpp_quote(\"#define DEVICE_STATE_NOTPRESENT 0x4\")\ncpp_quote(\"#define DEVICE_STATE_UNPLUGGED 0x8\")\ncpp_quote(\"#define DEVICE_STATEMASK_ALL 0xf\")\n\n/* Generic PKEY_AudioEndPoint ID for grepping: {1da5d803-d492-4edd-8c23-e0c0ffee7f0e} */\ncpp_quote(\"DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_FormFactor,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,0);\")\ncpp_quote(\"DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_ControlPanelPageProvider,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,1);\")\ncpp_quote(\"DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Association,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,2);\")\ncpp_quote(\"DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_PhysicalSpeakers,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,3);\")\ncpp_quote(\"DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_GUID,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,4);\")\ncpp_quote(\"DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Disable_SysFx,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,5);\")\n\ncpp_quote(\"#define ENDPOINT_SYSFX_ENABLED 0\")\ncpp_quote(\"#define ENDPOINT_SYSFX_DISABLED 1\")\n\ncpp_quote(\"DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_FullRangeSpeakers,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,6);\")\ncpp_quote(\"DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Supports_EventDriven_Mode,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,7);\")\ncpp_quote(\"DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_JackSubType,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,8);\")\n\ncpp_quote(\"DEFINE_PROPERTYKEY(PKEY_AudioEngine_DeviceFormat,0xf19f064d,0x082c,0x4e27,0xbc,0x73,0x68,0x82,0xa1,0xbb,0x8e,0x4c,0);\")\ncpp_quote(\"DEFINE_PROPERTYKEY(PKEY_AudioEngine_OEMFormat,0xe4870e26,0x3cc5,0x4cd2,0xba,0x46,0xca,0x0a,0x9a,0x70,0xed,0x04,3);\")\n\ntypedef struct tagDIRECTX_AUDIO_ACTIVATION_PARAMS\n{\n    DWORD cbDirectXAudioActivationParams;\n    GUID guidAudioSession;\n    DWORD dwAudioStreamFlags;\n} DIRECTX_AUDIO_ACTIVATION_PARAMS, *PDIRECTX_AUDIO_ACTIVATION_PARAMS;\n\ntypedef enum _EDataFlow\n{\n    eRender,\n    eCapture,\n    eAll,\n    EDataFlow_enum_count\n} EDataFlow;\n\ntypedef enum _ERole\n{\n    eConsole,\n    eMultimedia,\n    eCommunications,\n    ERole_enum_count\n} ERole;\n\ntypedef enum _EndpointFormFactor\n{\n    RemoteNetworkDevice,\n    Speakers,\n    LineLevel,\n    Headphones,\n    Microphone,\n    Headset,\n    Handset,\n    UnknownDigitalPassthrough,\n    SPDIF,\n    DigitalAudioDisplayDevice,\n    UnknownFormFactor,\n    EndpointFormFactor_enum_count\n} EndpointFormFactor;\n\ncpp_quote(\"#define HDMI DigitalAudioDisplayDevice\")\n\n[\n    object,\n    local,\n    uuid(7991eec9-7e89-4d85-8390-6c703cec60c0),\n    nonextensible,\n    pointer_default(unique)\n]\ninterface IMMNotificationClient : IUnknown\n{\n    [id(1)] HRESULT OnDeviceStateChanged(\n        [in] LPCWSTR pwstrDeviceId,\n        [in] DWORD dwNewState\n    );\n    [id(2)] HRESULT OnDeviceAdded(\n        [in] LPCWSTR pwstrDeviceId\n    );\n    [id(3)] HRESULT OnDeviceRemoved(\n        [in] LPCWSTR pwstrDeviceId\n    );\n    [id(4)] HRESULT OnDefaultDeviceChanged(\n        [in] EDataFlow flow,\n        [in] ERole role,\n        [in] LPCWSTR pwstrDeviceId\n    );\n    [id(5)] HRESULT OnPropertyValueChanged(\n        [in] LPCWSTR pwstrDeviceId,\n        [in] const PROPERTYKEY key\n    );\n}\n\n[\n    object,\n    local,\n    uuid(d666063f-1587-4e43-81f1-b948e807363f),\n    nonextensible,\n    pointer_default(unique)\n]\ninterface IMMDevice : IUnknown\n{\n    [id(1)] HRESULT Activate(\n        [in] REFIID iid,\n        [in] DWORD dwClsCtx,\n        [in,unique] PROPVARIANT *pActivationParams,\n        [out,iid_is(iid)] void **ppv\n    );\n    [id(2)] HRESULT OpenPropertyStore(\n        [in] DWORD stgmAccess,\n        [out] IPropertyStore **ppProperties\n    );\n    [id(3)] HRESULT GetId(\n        [out] LPWSTR *ppstrId\n    );\n    [id(4)] HRESULT GetState(\n        [out] DWORD *pdwState\n    );\n}\n\n[\n    object,\n    local,\n    uuid(0bd7a1be-7a1a-44db-8397-cc5392387b5e),\n    nonextensible,\n    pointer_default(unique)\n]\ninterface IMMDeviceCollection : IUnknown\n{\n    [id(1)] HRESULT GetCount(\n        [out] UINT *pcDevices\n    );\n    [id(2)] HRESULT Item(\n        [in] UINT nDevice,\n        [out] IMMDevice **ppdevice\n    );\n}\n\n[\n    object,\n    local,\n    uuid(1be09788-6894-4089-8586-9a2a6c265ac5),\n    nonextensible,\n    pointer_default(unique)\n]\ninterface IMMEndpoint : IUnknown\n{\n    [id(1)] HRESULT GetDataFlow(\n        [out] EDataFlow *pDataFlow\n    );\n}\n\n[\n    object,\n    local,\n    uuid(a95664d2-9614-4f35-a746-de8db63617e6),\n    nonextensible,\n    pointer_default(unique)\n]\ninterface IMMDeviceEnumerator : IUnknown\n{\n    [id(1)] HRESULT EnumAudioEndpoints(\n        [in] EDataFlow dataFlow,\n        [in] DWORD dwStateMask,\n        [out] IMMDeviceCollection **ppDevices\n    );\n    [id(2)] HRESULT GetDefaultAudioEndpoint(\n        [in] EDataFlow dataFlow,\n        [in] ERole role,\n        [out] IMMDevice **ppEndpoint\n    );\n    [id(3)] HRESULT GetDevice(\n        [in] LPCWSTR pwstrId,\n        [out] IMMDevice **ppDevice\n    );\n    [id(4)] HRESULT RegisterEndpointNotificationCallback(\n        [in] IMMNotificationClient *pClient\n    );\n    [id(5)] HRESULT UnregisterEndpointNotificationCallback(\n        [in] IMMNotificationClient *pClient\n    );\n}\n\n[\n    object,\n    local,\n    uuid(3b0d0ea4-d0a9-4b0e-935b-09516746fac0),\n    nonextensible,\n    pointer_default(unique)\n]\ninterface IMMDeviceActivator : IUnknown\n{\n    [id(1)] HRESULT Activate(\n        [in] REFIID iid,\n        [in] IMMDevice *pDevice,\n        [in] PROPVARIANT *pActivationParams,\n        [out,iid_is(iid)] void **ppv\n    );\n}\n\ntypedef struct _AudioExtensionParams\n{\n    LPARAM AddPageParam;\n    IMMDevice *pEndPoint;\n    IMMDevice *pPnpInterface;\n    IMMDevice *pPnpDevnode;\n} AudioExtensionParams;\n\n[\n    uuid(2fdaafa3-7523-4f66-9957-9d5e7fe698f6),\n    version(1.0)\n]\nlibrary MMDeviceAPILib\n{\n    [ uuid(bcde0395-e52f-467c-8e3d-c4579291692e) ] coclass MMDeviceEnumerator\n    {\n        [default] interface IMMDeviceEnumerator;\n    }\n}\n"
  },
  {
    "path": "wine/windows/mmreg.h",
    "content": "/*\n * Declarations for MultiMedia-REGistration\n *\n * Copyright (C) 1999 Eric Pouech\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WIDL__\n\n#ifndef __WINE_MMREG_H\n#define __WINE_MMREG_H\n\n#include <pshpack1.h>\n\n/***********************************************************************\n * Defines/Enums\n */\n\n#ifndef _ACM_WAVEFILTER\n#define _ACM_WAVEFILTER\n\n#define WAVE_FILTER_UNKNOWN     0x0000\n#define WAVE_FILTER_DEVELOPMENT 0xFFFF\n\ntypedef struct _WAVEFILTER {\n  DWORD   cbStruct;\n  DWORD   dwFilterTag;\n  DWORD   fdwFilter;\n  DWORD   dwReserved[5];\n} WAVEFILTER, *PWAVEFILTER, *NPWAVEFILTER, *LPWAVEFILTER;\n#endif /* _ACM_WAVEFILTER */\n\n#ifndef WAVE_FILTER_VOLUME\n#define WAVE_FILTER_VOLUME      0x0001\n\ntypedef struct _WAVEFILTER_VOLUME {\n   WAVEFILTER      wfltr;\n   DWORD           dwVolume;\n} VOLUMEWAVEFILTER, *PVOLUMEWAVEFILTER, *NPVOLUMEWAVEFILTER, *LPVOLUMEWAVEFILTER;\n#endif  /* WAVE_FILTER_VOLUME */\n\n#ifndef WAVE_FILTER_ECHO\n#define WAVE_FILTER_ECHO        0x0002\n\ntypedef struct WAVEFILTER_ECHO {\n   WAVEFILTER      wfltr;\n   DWORD           dwVolume;\n   DWORD           dwDelay;\n} ECHOWAVEFILTER, *PECHOWAVEFILTER, *NPECHOWAVEFILTER, *LPECHOWAVEFILTER;\n#endif  /* WAVEFILTER_ECHO */\n\n#ifndef _WAVEFORMATEX_\n#define _WAVEFORMATEX_\ntypedef struct _WAVEFORMATEX {\n  WORD   wFormatTag;\n  WORD   nChannels;\n  DWORD  nSamplesPerSec;\n  DWORD  nAvgBytesPerSec;\n  WORD   nBlockAlign;\n  WORD   wBitsPerSample;\n  WORD   cbSize;\n} WAVEFORMATEX, *PWAVEFORMATEX, *NPWAVEFORMATEX, *LPWAVEFORMATEX;\n#endif /* _WAVEFORMATEX_ */\n\n/* WAVE form wFormatTag IDs */\n#define  WAVE_FORMAT_UNKNOWN\t\t\t0x0000\t/*  Microsoft Corporation  */\n#define  WAVE_FORMAT_ADPCM\t\t\t0x0002\t/*  Microsoft Corporation  */\n#define  WAVE_FORMAT_IEEE_FLOAT\t\t\t0x0003\t/*  Microsoft Corporation  */\n#define  WAVE_FORMAT_IBM_CVSD\t\t\t0x0005\t/*  IBM Corporation  */\n#define  WAVE_FORMAT_ALAW\t\t\t0x0006\t/*  Microsoft Corporation  */\n#define  WAVE_FORMAT_MULAW\t\t\t0x0007\t/*  Microsoft Corporation  */\n#define  WAVE_FORMAT_OKI_ADPCM\t\t\t0x0010\t/*  OKI  */\n#define  WAVE_FORMAT_DVI_ADPCM\t\t\t0x0011\t/*  Intel Corporation  */\n#define  WAVE_FORMAT_IMA_ADPCM\t\t\t(WAVE_FORMAT_DVI_ADPCM)\t/*  Intel Corporation  */\n#define  WAVE_FORMAT_MEDIASPACE_ADPCM\t\t0x0012\t/*  Videologic  */\n#define  WAVE_FORMAT_SIERRA_ADPCM\t\t0x0013\t/*  Sierra Semiconductor Corp  */\n#define  WAVE_FORMAT_G723_ADPCM\t\t\t0x0014\t/*  Antex Electronics Corporation  */\n#define  WAVE_FORMAT_DIGISTD\t\t\t0x0015\t/*  DSP Solutions, Inc.  */\n#define  WAVE_FORMAT_DIGIFIX\t\t\t0x0016\t/*  DSP Solutions, Inc.  */\n#define  WAVE_FORMAT_DIALOGIC_OKI_ADPCM\t\t0x0017\t/*  Dialogic Corporation  */\n#define  WAVE_FORMAT_YAMAHA_ADPCM\t\t0x0020\t/*  Yamaha Corporation of America  */\n#define  WAVE_FORMAT_SONARC\t\t\t0x0021\t/*  Speech Compression  */\n#define  WAVE_FORMAT_DSPGROUP_TRUESPEECH\t0x0022\t/*  DSP Group, Inc  */\n#define  WAVE_FORMAT_ECHOSC1\t\t\t0x0023\t/*  Echo Speech Corporation  */\n#define  WAVE_FORMAT_AUDIOFILE_AF36\t\t0x0024\t/*    */\n#define  WAVE_FORMAT_APTX\t\t\t0x0025\t/*  Audio Processing Technology  */\n#define  WAVE_FORMAT_AUDIOFILE_AF10\t\t0x0026\t/*    */\n#define  WAVE_FORMAT_DOLBY_AC2\t\t\t0x0030\t/*  Dolby Laboratories  */\n#define  WAVE_FORMAT_GSM610\t\t\t0x0031\t/*  Microsoft Corporation  */\n#define  WAVE_FORMAT_ANTEX_ADPCME\t\t0x0033\t/*  Antex Electronics Corporation  */\n#define  WAVE_FORMAT_CONTROL_RES_VQLPC\t\t0x0034\t/*  Control Resources Limited  */\n#define  WAVE_FORMAT_DIGIREAL\t\t\t0x0035\t/*  DSP Solutions, Inc.  */\n#define  WAVE_FORMAT_DIGIADPCM\t\t\t0x0036\t/*  DSP Solutions, Inc.  */\n#define  WAVE_FORMAT_CONTROL_RES_CR10\t\t0x0037\t/*  Control Resources Limited  */\n#define  WAVE_FORMAT_NMS_VBXADPCM\t\t0x0038\t/*  Natural MicroSystems  */\n#define  WAVE_FORMAT_G721_ADPCM\t\t\t0x0040\t/*  Antex Electronics Corporation  */\n#define  WAVE_FORMAT_MPEG\t\t\t0x0050\t/*  Microsoft Corporation  */\n#define  WAVE_FORMAT_MPEGLAYER3\t\t\t0x0055\n#define  WAVE_FORMAT_MSRT24\t\t\t0x0082  /*  Microsoft Corporation */\n#define  WAVE_FORMAT_CREATIVE_ADPCM\t\t0x0200\t/*  Creative Labs, Inc  */\n#define  WAVE_FORMAT_CREATIVE_FASTSPEECH8\t0x0202\t/*  Creative Labs, Inc  */\n#define  WAVE_FORMAT_CREATIVE_FASTSPEECH10\t0x0203\t/*  Creative Labs, Inc  */\n#define  WAVE_FORMAT_FM_TOWNS_SND\t\t0x0300\t/*  Fujitsu Corp.  */\n#define  WAVE_FORMAT_OLIGSM\t\t\t0x1000\t/*  Ing C. Olivetti & C., S.p.A.  */\n#define  WAVE_FORMAT_OLIADPCM\t\t\t0x1001\t/*  Ing C. Olivetti & C., S.p.A.  */\n#define  WAVE_FORMAT_OLICELP\t\t\t0x1002\t/*  Ing C. Olivetti & C., S.p.A.  */\n#define  WAVE_FORMAT_OLISBC\t\t\t0x1003\t/*  Ing C. Olivetti & C., S.p.A.  */\n#define  WAVE_FORMAT_OLIOPR\t\t\t0x1004\t/*  Ing C. Olivetti & C., S.p.A.  */\n\n#ifndef MM_MICROSOFT\n#define MM_MICROSOFT 0x01\n#endif\n#define MM_MSFT_ACM_MSADPCM 0x21\n#define MM_MSFT_ACM_IMAADPCM 0x22\n#define MM_MSFT_ACM_GSM610 0x24\n#define MM_MSFT_ACM_G711 0x25\n#define MM_MSFT_ACM_PCM 0x26\n\n#define MM_FRAUNHOFER_IIS 0xAC\n#define MM_FHGIIS_MPEGLAYER3_DECODE 0x09\n#define MM_FHGIIS_MPEGLAYER3_PROFESSIONAL 0x0d\n\n#if !defined(WAVE_FORMAT_EXTENSIBLE)\n#define  WAVE_FORMAT_EXTENSIBLE\t\t\t0xFFFE  /* Microsoft */\n#endif\n\n#define WAVE_FORMAT_DEVELOPMENT         \t(0xFFFF)\n\ntypedef struct adpcmcoef_tag {\n\tshort   iCoef1;\n\tshort   iCoef2;\n} ADPCMCOEFSET;\ntypedef ADPCMCOEFSET *PADPCMCOEFSET,\n\t*NPADPCMCOEFSET, *LPADPCMCOEFSET;\n\ntypedef struct adpcmwaveformat_tag {\n\tWAVEFORMATEX    wfx;\n\tWORD            wSamplesPerBlock;\n\tWORD            wNumCoef;\n\t/* FIXME: this should be aCoef[0] */\n\tADPCMCOEFSET    aCoef[1];\n} ADPCMWAVEFORMAT;\ntypedef ADPCMWAVEFORMAT *PADPCMWAVEFORMAT,\n\t*NPADPCMWAVEFORMAT, *LPADPCMWAVEFORMAT;\n\ntypedef struct dvi_adpcmwaveformat_tag {\n\tWAVEFORMATEX    wfx;\n\tWORD            wSamplesPerBlock;\n} DVIADPCMWAVEFORMAT;\ntypedef DVIADPCMWAVEFORMAT *PDVIADPCMWAVEFORMAT,\n\t*NPDVIADPCMWAVEFORMAT, *LPDVIADPCMWAVEFORMAT;\n\ntypedef struct ima_adpcmwaveformat_tag {\n\tWAVEFORMATEX    wfx;\n\tWORD            wSamplesPerBlock;\n} IMAADPCMWAVEFORMAT;\ntypedef IMAADPCMWAVEFORMAT *PIMAADPCMWAVEFORMAT, *NPIMAADPCMWAVEFORMAT,\n\t*LPIMAADPCMWAVEFORMAT;\n\ntypedef struct mediaspace_adpcmwaveformat_tag {\n\tWAVEFORMATEX    wfx;\n\tWORD            wRevision;\n} MEDIASPACEADPCMWAVEFORMAT;\ntypedef MEDIASPACEADPCMWAVEFORMAT *PMEDIASPACEADPCMWAVEFORMAT,\n\t*NPMEDIASPACEADPCMWAVEFORMAT, *LPMEDIASPACEADPCMWAVEFORMAT;\n\ntypedef struct sierra_adpcmwaveformat_tag {\n\tWAVEFORMATEX    wfx;\n\tWORD            wRevision;\n} SIERRAADPCMWAVEFORMAT;\ntypedef SIERRAADPCMWAVEFORMAT *PSIERRAADPCMWAVEFORMAT,\n\t*NPSIERRAADPCMWAVEFORMAT, *LPSIERRAADPCMWAVEFORMAT;\n\ntypedef struct g723_adpcmwaveformat_tag {\n\tWAVEFORMATEX    wfx;\n\tWORD            cbExtraSize;\n\tWORD            nAuxBlockSize;\n} G723_ADPCMWAVEFORMAT;\ntypedef G723_ADPCMWAVEFORMAT *PG723_ADPCMWAVEFORMAT,\n\t*NPG723_ADPCMWAVEFORMAT, *LPG723_ADPCMWAVEFORMAT;\n\ntypedef struct digistdwaveformat_tag {\n\tWAVEFORMATEX    wfx;\n} DIGISTDWAVEFORMAT;\ntypedef DIGISTDWAVEFORMAT *PDIGISTDWAVEFORMAT,\n\t*NPDIGISTDWAVEFORMAT, *LPDIGISTDWAVEFORMAT;\n\ntypedef struct digifixwaveformat_tag {\n\tWAVEFORMATEX    wfx;\n} DIGIFIXWAVEFORMAT;\ntypedef DIGIFIXWAVEFORMAT *PDIGIFIXWAVEFORMAT,\n\t*NPDIGIFIXWAVEFORMAT, *LPDIGIFIXWAVEFORMAT;\n\ntypedef struct creative_fastspeechformat_tag {\n\tWAVEFORMATEX    ewf;\n} DIALOGICOKIADPCMWAVEFORMAT;\ntypedef DIALOGICOKIADPCMWAVEFORMAT *PDIALOGICOKIADPCMWAVEFORMAT,\n\t*NPDIALOGICOKIADPCMWAVEFORMAT, *LPDIALOGICOKIADPCMWAVEFORMAT;\n\ntypedef struct yamaha_adpmcwaveformat_tag {\n\tWAVEFORMATEX    wfx;\n} YAMAHA_ADPCMWAVEFORMAT;\ntypedef YAMAHA_ADPCMWAVEFORMAT *PYAMAHA_ADPCMWAVEFORMAT,\n\t*NPYAMAHA_ADPCMWAVEFORMAT, *LPYAMAHA_ADPCMWAVEFORMAT;\n\ntypedef struct sonarcwaveformat_tag {\n\tWAVEFORMATEX    wfx;\n\tWORD            wCompType;\n} SONARCWAVEFORMAT;\ntypedef SONARCWAVEFORMAT *PSONARCWAVEFORMAT,\n\t*NPSONARCWAVEFORMAT,*LPSONARCWAVEFORMAT;\n\ntypedef struct truespeechwaveformat_tag {\n\tWAVEFORMATEX    wfx;\n\tWORD            wRevision;\n\tWORD            nSamplesPerBlock;\n\tBYTE            abReserved[28];\n} TRUESPEECHWAVEFORMAT;\ntypedef TRUESPEECHWAVEFORMAT *PTRUESPEECHWAVEFORMAT,\n\t*NPTRUESPEECHWAVEFORMAT, *LPTRUESPEECHWAVEFORMAT;\n\ntypedef struct echosc1waveformat_tag {\n\tWAVEFORMATEX    wfx;\n} ECHOSC1WAVEFORMAT;\ntypedef ECHOSC1WAVEFORMAT *PECHOSC1WAVEFORMAT,\n\t*NPECHOSC1WAVEFORMAT, *LPECHOSC1WAVEFORMAT;\n\ntypedef struct audiofile_af36waveformat_tag {\n\tWAVEFORMATEX    wfx;\n} AUDIOFILE_AF36WAVEFORMAT;\ntypedef AUDIOFILE_AF36WAVEFORMAT *PAUDIOFILE_AF36WAVEFORMAT,\n\t*NPAUDIOFILE_AF36WAVEFORMAT, *LPAUDIOFILE_AF36WAVEFORMAT;\n\ntypedef struct aptxwaveformat_tag {\n\tWAVEFORMATEX    wfx;\n} APTXWAVEFORMAT;\ntypedef APTXWAVEFORMAT *PAPTXWAVEFORMAT,\n\t*NPAPTXWAVEFORMAT, *LPAPTXWAVEFORMAT;\n\ntypedef struct audiofile_af10waveformat_tag {\n\tWAVEFORMATEX    wfx;\n} AUDIOFILE_AF10WAVEFORMAT;\ntypedef AUDIOFILE_AF10WAVEFORMAT *PAUDIOFILE_AF10WAVEFORMAT,\n\t*NPAUDIOFILE_AF10WAVEFORMAT,  *LPAUDIOFILE_AF10WAVEFORMAT;\n\ntypedef struct dolbyac2waveformat_tag {\n\tWAVEFORMATEX    wfx;\n\tWORD            nAuxBitsCode;\n} DOLBYAC2WAVEFORMAT;\n\ntypedef struct gsm610waveformat_tag {\n\tWAVEFORMATEX    wfx;\n\tWORD            wSamplesPerBlock;\n} GSM610WAVEFORMAT;\ntypedef GSM610WAVEFORMAT *PGSM610WAVEFORMAT,\n\t*NPGSM610WAVEFORMAT, *LPGSM610WAVEFORMAT;\n\ntypedef struct adpcmewaveformat_tag {\n\tWAVEFORMATEX    wfx;\n\tWORD            wSamplesPerBlock;\n} ADPCMEWAVEFORMAT;\ntypedef ADPCMEWAVEFORMAT *PADPCMEWAVEFORMAT,\n\t*NPADPCMEWAVEFORMAT, *LPADPCMEWAVEFORMAT;\n\ntypedef struct contres_vqlpcwaveformat_tag {\n\tWAVEFORMATEX    wfx;\n\tWORD            wSamplesPerBlock;\n} CONTRESVQLPCWAVEFORMAT;\ntypedef CONTRESVQLPCWAVEFORMAT *PCONTRESVQLPCWAVEFORMAT,\n\t*NPCONTRESVQLPCWAVEFORMAT, *LPCONTRESVQLPCWAVEFORMAT;\n\ntypedef struct digirealwaveformat_tag {\n\tWAVEFORMATEX    wfx;\n\tWORD            wSamplesPerBlock;\n} DIGIREALWAVEFORMAT;\ntypedef DIGIREALWAVEFORMAT *PDIGIREALWAVEFORMAT,\n\t*NPDIGIREALWAVEFORMAT, *LPDIGIREALWAVEFORMAT;\n\ntypedef struct digiadpcmmwaveformat_tag {\n\tWAVEFORMATEX    wfx;\n\tWORD            wSamplesPerBlock;\n} DIGIADPCMWAVEFORMAT;\ntypedef DIGIADPCMWAVEFORMAT *PDIGIADPCMWAVEFORMAT,\n\t*NPDIGIADPCMWAVEFORMAT, *LPDIGIADPCMWAVEFORMAT;\n\ntypedef struct contres_cr10waveformat_tag {\n\tWAVEFORMATEX    wfx;\n\tWORD            wSamplesPerBlock;\n} CONTRESCR10WAVEFORMAT;\ntypedef CONTRESCR10WAVEFORMAT *PCONTRESCR10WAVEFORMAT,\n\t*NPCONTRESCR10WAVEFORMAT, *LPCONTRESCR10WAVEFORMAT;\n\ntypedef struct nms_vbxadpcmmwaveformat_tag {\n\tWAVEFORMATEX    wfx;\n\tWORD            wSamplesPerBlock;\n} NMS_VBXADPCMWAVEFORMAT;\ntypedef NMS_VBXADPCMWAVEFORMAT *PNMS_VBXADPCMWAVEFORMAT,\n\t*NPNMS_VBXADPCMWAVEFORMAT, *LPNMS_VBXADPCMWAVEFORMAT;\n\ntypedef struct g721_adpcmwaveformat_tag {\n\tWAVEFORMATEX    wfx;\n\tWORD            nAuxBlockSize;\n} G721_ADPCMWAVEFORMAT;\ntypedef G721_ADPCMWAVEFORMAT *PG721_ADPCMWAVEFORMAT,\n\t*NG721_ADPCMWAVEFORMAT, *LPG721_ADPCMWAVEFORMAT;\n\ntypedef struct creative_adpcmwaveformat_tag {\n\tWAVEFORMATEX    wfx;\n\tWORD            wRevision;\n} CREATIVEADPCMWAVEFORMAT;\ntypedef CREATIVEADPCMWAVEFORMAT *PCREATIVEADPCMWAVEFORMAT,\n\t*NPCREATIVEADPCMWAVEFORMAT, *LPCREATIVEADPCMWAVEFORMAT;\n\ntypedef struct creative_fastspeech8format_tag {\n\tWAVEFORMATEX    wfx;\n\tWORD wRevision;\n} CREATIVEFASTSPEECH8WAVEFORMAT;\ntypedef CREATIVEFASTSPEECH8WAVEFORMAT *PCREATIVEFASTSPEECH8WAVEFORMAT,\n\t*NPCREATIVEFASTSPEECH8WAVEFORMAT, *LPCREATIVEFASTSPEECH8WAVEFORMAT;\n\ntypedef struct creative_fastspeech10format_tag {\n\tWAVEFORMATEX    wfx;\n\tWORD wRevision;\n} CREATIVEFASTSPEECH10WAVEFORMAT;\ntypedef CREATIVEFASTSPEECH10WAVEFORMAT *PCREATIVEFASTSPEECH10WAVEFORMAT,\n\t*NPCREATIVEFASTSPEECH10WAVEFORMAT, *LPCREATIVEFASTSPEECH10WAVEFORMAT;\n\ntypedef struct fmtowns_snd_waveformat_tag {\n\tWAVEFORMATEX    wfx;\n\tWORD            wRevision;\n} FMTOWNS_SND_WAVEFORMAT;\ntypedef FMTOWNS_SND_WAVEFORMAT *PFMTOWNS_SND_WAVEFORMAT,\n\t*NPFMTOWNS_SND_WAVEFORMAT, *LPFMTOWNS_SND_WAVEFORMAT;\n\ntypedef struct oligsmwaveformat_tag {\n\tWAVEFORMATEX    wfx;\n} OLIGSMWAVEFORMAT;\ntypedef OLIGSMWAVEFORMAT *POLIGSMWAVEFORMAT,\n\t*NPOLIGSMWAVEFORMAT, *LPOLIGSMWAVEFORMAT;\n\ntypedef struct oliadpcmwaveformat_tag {\n\tWAVEFORMATEX    wfx;\n} OLIADPCMWAVEFORMAT;\ntypedef OLIADPCMWAVEFORMAT *POLIADPCMWAVEFORMAT,\n\t*NPOLIADPCMWAVEFORMAT, *LPOLIADPCMWAVEFORMAT;\n\ntypedef struct olicelpwaveformat_tag {\n\tWAVEFORMATEX    wfx;\n} OLICELPWAVEFORMAT;\ntypedef OLICELPWAVEFORMAT *POLICELPWAVEFORMAT,\n\t*NPOLICELPWAVEFORMAT, *LPOLICELPWAVEFORMAT;\n\ntypedef struct olisbcwaveformat_tag {\n\tWAVEFORMATEX    wfx;\n} OLISBCWAVEFORMAT;\ntypedef OLISBCWAVEFORMAT *POLISBCWAVEFORMAT,\n\t*NPOLISBCWAVEFORMAT, *LPOLISBCWAVEFORMAT;\n\ntypedef struct olioprwaveformat_tag {\n\tWAVEFORMATEX    wfx;\n} OLIOPRWAVEFORMAT;\ntypedef OLIOPRWAVEFORMAT *POLIOPRWAVEFORMAT,\n\t*NPOLIOPRWAVEFORMAT, *LPOLIOPRWAVEFORMAT;\n\ntypedef struct csimaadpcmwaveformat_tag {\n\tWAVEFORMATEX    wfx;\n} CSIMAADPCMWAVEFORMAT;\ntypedef CSIMAADPCMWAVEFORMAT *PCSIMAADPCMWAVEFORMAT,\n\t*NPCSIMAADPCMWAVEFORMAT, *LPCSIMAADPCMWAVEFORMAT;\n\ntypedef struct mpeg1waveformat_tag {\n\tWAVEFORMATEX\twfx;\n\tWORD\t\tfwHeadLayer;\n\tDWORD\t\tdwHeadBitrate;\n\tWORD\t\tfwHeadMode;\n\tWORD\t\tfwHeadModeExt;\n\tWORD\t\twHeadEmphasis;\n\tWORD\t\tfwHeadFlags;\n\tDWORD\t\tdwPTSLow;\n\tDWORD\t\tdwPTSHigh;\n} MPEG1WAVEFORMAT,* PMPEG1WAVEFORMAT;\n\n#define\tACM_MPEG_LAYER1\t\t0x0001\n#define\tACM_MPEG_LAYER2\t\t0x0002\n#define\tACM_MPEG_LAYER3\t\t0x0004\n\n#define\tACM_MPEG_STEREO\t\t0x0001\n#define\tACM_MPEG_JOINTSTEREO\t0x0002\n#define\tACM_MPEG_DUALCHANNEL\t0x0004\n#define\tACM_MPEG_SINGLECHANNEL\t0x0008\n#define\tACM_MPEG_PRIVATEBIT\t0x0001\n#define\tACM_MPEG_COPYRIGHT\t0x0002\n#define\tACM_MPEG_ORIGINALHOME\t0x0004\n#define\tACM_MPEG_PROTECTIONBIT\t0x0008\n#define\tACM_MPEG_ID_MPEG1\t0x0010\n\ntypedef struct mpeglayer3waveformat_tag {\n\tWAVEFORMATEX\twfx;\n\tWORD\t\twID;\n\tDWORD\t\tfdwFlags;\n\tWORD\t\tnBlockSize;\n\tWORD\t\tnFramesPerBlock;\n\tWORD\t\tnCodecDelay;\n} MPEGLAYER3WAVEFORMAT;\n\n#define MPEGLAYER3_WFX_EXTRA_BYTES   12\n\n#define MPEGLAYER3_ID_UNKNOWN           0\n#define MPEGLAYER3_ID_MPEG\t\t1\n#define MPEGLAYER3_ID_CONSTANTFRAMESIZE\t2\n\n#define MPEGLAYER3_FLAG_PADDING_ISO\t0x00000000\n#define MPEGLAYER3_FLAG_PADDING_ON\t0x00000001\n#define MPEGLAYER3_FLAG_PADDING_OFF\t0x00000002\n\n#ifdef GUID_DEFINED\n\n#ifndef _WAVEFORMATEXTENSIBLE_\n#define _WAVEFORMATEXTENSIBLE_\ntypedef struct {\n    WAVEFORMATEX    Format;\n    union {\n        WORD        wValidBitsPerSample;\n        WORD        wSamplesPerBlock;\n        WORD        wReserved;\n    } Samples;\n    DWORD           dwChannelMask;\n    GUID            SubFormat;\n} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;\n#endif /* _WAVEFORMATEXTENSIBLE_ */\n\n#endif /* GUID_DEFINED */\n\ntypedef WAVEFORMATEXTENSIBLE    WAVEFORMATPCMEX;\ntypedef WAVEFORMATPCMEX*        PWAVEFORMATPCMEX;\ntypedef WAVEFORMATPCMEX*        NPWAVEFORMATPCMEX;\ntypedef WAVEFORMATPCMEX*        LPWAVEFORMATPCMEX;\n\ntypedef WAVEFORMATEXTENSIBLE    WAVEFORMATIEEEFLOATEX;\ntypedef WAVEFORMATIEEEFLOATEX*  PWAVEFORMATIEEEFLOATEX;\ntypedef WAVEFORMATIEEEFLOATEX*  NPWAVEFORMATIEEEFLOATEX;\ntypedef WAVEFORMATIEEEFLOATEX*  LPWAVEFORMATIEEEFLOATEX;\n\n#ifndef _SPEAKER_POSITIONS_\n#define _SPEAKER_POSITIONS_\n\n#define SPEAKER_FRONT_LEFT              0x00000001\n#define SPEAKER_FRONT_RIGHT             0x00000002\n#define SPEAKER_FRONT_CENTER            0x00000004\n#define SPEAKER_LOW_FREQUENCY           0x00000008\n#define SPEAKER_BACK_LEFT               0x00000010\n#define SPEAKER_BACK_RIGHT              0x00000020\n#define SPEAKER_FRONT_LEFT_OF_CENTER    0x00000040\n#define SPEAKER_FRONT_RIGHT_OF_CENTER   0x00000080\n#define SPEAKER_BACK_CENTER             0x00000100\n#define SPEAKER_SIDE_LEFT               0x00000200\n#define SPEAKER_SIDE_RIGHT              0x00000400\n#define SPEAKER_TOP_CENTER              0x00000800\n#define SPEAKER_TOP_FRONT_LEFT          0x00001000\n#define SPEAKER_TOP_FRONT_CENTER        0x00002000\n#define SPEAKER_TOP_FRONT_RIGHT         0x00004000\n#define SPEAKER_TOP_BACK_LEFT           0x00008000\n#define SPEAKER_TOP_BACK_CENTER         0x00010000\n#define SPEAKER_TOP_BACK_RIGHT          0x00020000\n#define SPEAKER_RESERVED                0x7FFC0000\n#define SPEAKER_ALL                     0x80000000\n\n#endif /* _SPEAKER_POSITIONS_ */\n\n\n/* DIB stuff */\n\n#ifndef BI_BITFIELDS\n#define BI_BITFIELDS     3\n#endif\n\n#ifndef QUERYDIBSUPPORT\n#define\tQUERYDIBSUPPORT\t\t3073\n#define\tQDI_SETDIBITS\t\t1\n#define\tQDI_GETDIBITS\t\t2\n#define\tQDI_DIBTOSCREEN\t\t4\n#define\tQDI_STRETCHDIB\t\t8\n#endif\n\n#ifndef NOBITMAP\ntypedef struct tagEXBMINFOHEADER {\n    BITMAPINFOHEADER bmi;\n    DWORD biExtDataOffset;\n} EXBMINFOHEADER;\n#endif\n\n\n/* Video stuff */\n\n#ifndef NONEWIC\n\n#ifndef ICTYPE_VIDEO\n#define ICTYPE_VIDEO\t\tmmioFOURCC('v', 'i', 'd', 'c')\n#define ICTYPE_AUDIO\t\tmmioFOURCC('a', 'u', 'd', 'c')\n#endif\n\n#endif\n\n#include <poppack.h>\n\n#endif /* __WINE_MMREG_H */\n\n#else /* __WIDL__ */\n\ncpp_quote(\"#if 0\")\n#pragma pack(push, 1)\n\ntypedef struct tWAVEFORMATEX {\n    WORD wFormatTag;\n    WORD nChannels;\n    DWORD nSamplesPerSec;\n    DWORD nAvgBytesPerSec;\n    WORD nBlockAlign;\n    WORD wBitsPerSample;\n    WORD cbSize;\n    [size_is(cbSize)] BYTE pExtraBytes[];\n} WAVEFORMATEX, *PWAVEFORMATEX, *NPWAVEFORMATEX, *LPWAVEFORMATEX;\n\ntypedef struct {\n    WORD wFormatTag;\n    WORD nChannels;\n    DWORD nSamplesPerSec;\n    DWORD nAvgBytesPerSec;\n    WORD nBlockAlign;\n    WORD wBitsPerSample;\n    WORD cbSize;\n    WORD wValidBitsPerSample;\n    DWORD dwChannelMask;\n    GUID SubFormat;\n} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;\n\n#pragma pack(pop)\ncpp_quote(\"#endif\")\n\n#endif /* __WIDL__ */\n"
  },
  {
    "path": "wine/windows/mmstream.idl",
    "content": "/*\n * Copyright 2004 Christian Costa\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\n\ncpp_quote(\"#define MS_ERROR_CODE(x)                  MAKE_HRESULT(1, FACILITY_ITF, (x) + 0x400)\")\ncpp_quote(\"#define MS_SUCCESS_CODE(x)                MAKE_HRESULT(0, FACILITY_ITF, x)\")\ncpp_quote(\"#define MS_S_PENDING                      MS_SUCCESS_CODE(1)\")\ncpp_quote(\"#define MS_S_NOUPDATE                     MS_SUCCESS_CODE(2)\")\ncpp_quote(\"#define MS_S_ENDOFSTREAM                  MS_SUCCESS_CODE(3)\")\n\ncpp_quote(\"#define MS_E_SAMPLEALLOC                  MS_ERROR_CODE(1)\")\ncpp_quote(\"#define MS_E_PURPOSEID                    MS_ERROR_CODE(2)\")\ncpp_quote(\"#define MS_E_NOSTREAM                     MS_ERROR_CODE(3)\")\ncpp_quote(\"#define MS_E_NOSEEKING                    MS_ERROR_CODE(4)\")\ncpp_quote(\"#define MS_E_INCOMPATIBLE                 MS_ERROR_CODE(5)\")\ncpp_quote(\"#define MS_E_BUSY                         MS_ERROR_CODE(6)\")\ncpp_quote(\"#define MS_E_NOTINIT                      MS_ERROR_CODE(7)\")\ncpp_quote(\"#define MS_E_SOURCEALREADYDEFINED         MS_ERROR_CODE(8)\")\ncpp_quote(\"#define MS_E_INVALIDSTREAMTYPE            MS_ERROR_CODE(9)\")\ncpp_quote(\"#define MS_E_NOTRUNNING                   MS_ERROR_CODE(10)\")\n\ncpp_quote(\"DEFINE_GUID(MSPID_PrimaryVideo,  0xa35ff56a, 0x9fda, 0x11d0, 0x8f, 0xdf, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0x9d);\")\ncpp_quote(\"DEFINE_GUID(MSPID_PrimaryAudio,  0xa35ff56b, 0x9fda, 0x11d0, 0x8f, 0xdf, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0x9d);\")\n\ncpp_quote(\"#if 0\")\ntypedef void* PAPCFUNC;\ncpp_quote(\"#endif\")\n\ntypedef LONGLONG STREAM_TIME;\n\ntypedef GUID MSPID;\ntypedef REFGUID REFMSPID;\n\ntypedef enum {\n\tSTREAMTYPE_READ         = 0,\n\tSTREAMTYPE_WRITE        = 1,\n\tSTREAMTYPE_TRANSFORM    = 2\n} STREAM_TYPE;\n\ntypedef enum {\n\tSTREAMSTATE_STOP        = 0,\n\tSTREAMSTATE_RUN         = 1\n} STREAM_STATE;\n\n\ntypedef enum {\n\tCOMPSTAT_NOUPDATEOK                             = 0x00000001,\n\tCOMPSTAT_WAIT                                   = 0x00000002,\n\tCOMPSTAT_ABORT                                  = 0x00000004\n} COMPLETION_STATUS_FLAGS;\n\nenum {\n\tMMSSF_HASCLOCK                                  = 0x00000001,\n\tMMSSF_SUPPORTSEEK                               = 0x00000002,\n\tMMSSF_ASYNCHRONOUS                              = 0x00000004\n};\n\nenum {\n\tSSUPDATE_ASYNC                                  = 0x00000001,\n\tSSUPDATE_CONTINUOUS                             = 0x00000002\n};\n\ninterface IMultiMediaStream;\ninterface IMediaStream;\ninterface IStreamSample;\n\n\n[\nobject,\nlocal,\nuuid(B502D1BC-9A57-11d0-8FDE-00C04FD9189D),\npointer_default(unique)\n]\ninterface IMultiMediaStream : IUnknown {\n\n\tHRESULT GetInformation(\n\t\t[out, optional] DWORD *pdwFlags,\n\t\t[out, optional] STREAM_TYPE *pStreamType);\n\n\tHRESULT GetMediaStream(\n\t\t[in] REFMSPID idPurpose,\n\t\t[out] IMediaStream **ppMediaStream);\n\n\tHRESULT EnumMediaStreams(\n\t\t[in] long Index,\n\t\t[out] IMediaStream **ppMediaStream);\n\n\tHRESULT GetState(\n\t\t[out] STREAM_STATE *pCurrentState);\n\n\tHRESULT SetState(\n\t\t[in] STREAM_STATE NewState);\n\n\tHRESULT GetTime(\n\t\t[out] STREAM_TIME *pCurrentTime);\n\n\tHRESULT GetDuration(\n\t\t[out] STREAM_TIME *pDuration);\n\n\tHRESULT Seek(\n\t\t[in] STREAM_TIME SeekTime);\n\n\tHRESULT GetEndOfStreamEventHandle(\n\t\t[out] HANDLE *phEOS);\n}\n\n\n[\nobject,\nuuid(B502D1BD-9A57-11d0-8FDE-00C04FD9189D),\npointer_default(unique)\n]\ninterface IMediaStream : IUnknown {\n\t\n\tHRESULT GetMultiMediaStream(\n\t\t[out] IMultiMediaStream **ppMultiMediaStream);\n\n\tHRESULT GetInformation(\n\t\t[out, optional] MSPID *pPurposeId,\n\t\t[out, optional] STREAM_TYPE *pType);\n\n\tHRESULT SetSameFormat(\n\t\t[in] IMediaStream *pStreamThatHasDesiredFormat,\n\t\t[in] DWORD dwFlags);\n\n\tHRESULT AllocateSample(\n\t\t[in]  DWORD dwFlags,\n\t\t[out] IStreamSample **ppSample);\n\n\tHRESULT CreateSharedSample(\n\t\t[in]  IStreamSample *pExistingSample,\n\t\t[in]  DWORD dwFlags,\n\t\t[out] IStreamSample **ppNewSample);\n\n\tHRESULT SendEndOfStream(DWORD dwFlags);\n}\n\n\n[\nobject,\nlocal,\nuuid(B502D1BE-9A57-11d0-8FDE-00C04FD9189D),\npointer_default(unique)\n]\ninterface IStreamSample : IUnknown {\n\t\n\tHRESULT GetMediaStream(\n\t\t[in] IMediaStream **ppMediaStream);\n\n\tHRESULT GetSampleTimes(\n\t\t[out, optional] STREAM_TIME * pStartTime,\n\t\t[out, optional] STREAM_TIME * pEndTime,\n\t\t[out, optional] STREAM_TIME * pCurrentTime);\n\n\tHRESULT SetSampleTimes(\n\t\t[in, optional] const STREAM_TIME *pStartTime,\n\t\t[in, optional] const STREAM_TIME *pEndTime);\n\n\tHRESULT Update(\n\t\t[in] DWORD dwFlags,\n\t\t[in, optional] HANDLE hEvent,\n\t\t[in, optional] PAPCFUNC pfnAPC,\n\t\t[in, optional] DWORD dwAPCData);\n\n\tHRESULT CompletionStatus(\n\t\t[in] DWORD dwFlags,\n\t\t[in, optional] DWORD dwMilliseconds);\n}\n"
  },
  {
    "path": "wine/windows/mmsystem.h",
    "content": "/*\n * MMSYSTEM - Multimedia Wine Extension ... :-)\n *\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_MMSYSTEM_H\n#define __WINE_MMSYSTEM_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef LPSTR\t\tHPSTR;          /* a huge version of LPSTR */\ntypedef LPCSTR\t\tHPCSTR;         /* a huge version of LPCSTR */\ntypedef UINT*           LPUINT;\n\nDECLARE_HANDLE(HDRVR);\nDECLARE_HANDLE(HWAVE);\nDECLARE_HANDLE(HWAVEIN);\nDECLARE_HANDLE(HWAVEOUT);\nDECLARE_HANDLE(HMIDI);\nDECLARE_HANDLE(HMIDIIN);\nDECLARE_HANDLE(HMIDIOUT);\nDECLARE_HANDLE(HMIDISTRM);\nDECLARE_HANDLE(HMIXER);\nDECLARE_HANDLE(HMIXEROBJ);\nDECLARE_HANDLE(HMMIO);\n\ntypedef HMIDI *LPHMIDI;\ntypedef HMIDIIN *LPHMIDIIN;\ntypedef HMIDIOUT *LPHMIDIOUT;\ntypedef HMIDISTRM *LPHMIDISTRM;\ntypedef HMIXER *LPHMIXER;\ntypedef HMIXEROBJ *LPHMIXEROBJ;\ntypedef HWAVEIN *LPHWAVEIN;\ntypedef HWAVEOUT *LPHWAVEOUT;\n\n#include <pshpack1.h>\n\ntypedef LRESULT (CALLBACK *DRIVERPROC)(DWORD_PTR,HDRVR,UINT,LPARAM,LPARAM);\n\n#define MAXWAVEDRIVERS\t10\n#define MAXMIDIDRIVERS\t10\n#define MAXAUXDRIVERS\t10\n#define MAXMCIDRIVERS\t32\n#define MAXMIXERDRIVERS\t10\n\n#define MAXPNAMELEN      32     /* max product name length (including NULL) */\n#define MAXERRORLENGTH   256    /* max error text length (including NULL) */\n#define MAX_JOYSTICKOEMVXDNAME\t260\n\n#ifndef _MCIERROR_\n#define _MCIERROR_\ntypedef DWORD   MCIERROR;\n#endif\ntypedef UINT\tMMVERSION;\n#ifndef _MCIDEVICEID_\n#define _MCIDEVICEID_\ntypedef UINT\tMCIDEVICEID;\n#endif\ntypedef\tUINT\tMMRESULT;\n\ntypedef struct mmtime_tag {\n    UINT    wType;\n    union {\n\tDWORD ms;\n\tDWORD sample;\n\tDWORD cb;\n        DWORD ticks;\n\tstruct {\n\t    BYTE hour;\n\t    BYTE min;\n\t    BYTE sec;\n\t    BYTE frame;\n\t    BYTE fps;\n\t    BYTE dummy;\n\t    BYTE pad[2];\n\t} smpte;\n\tstruct {\n\t    DWORD songptrpos;\n\t} midi;\n    } u;\n} MMTIME, *PMMTIME, *LPMMTIME;\n\n#define TIME_MS         0x0001  /* time in milliseconds */\n#define TIME_SAMPLES    0x0002  /* number of wave samples */\n#define TIME_BYTES      0x0004  /* current byte offset */\n#define TIME_SMPTE      0x0008  /* SMPTE time */\n#define TIME_MIDI       0x0010  /* MIDI time */\n#define TIME_TICKS\t0x0020  /* MIDI ticks */\n\n#define MM_JOY1MOVE         0x3A0           /* joystick */\n#define MM_JOY2MOVE         0x3A1\n#define MM_JOY1ZMOVE        0x3A2\n#define MM_JOY2ZMOVE        0x3A3\n#define MM_JOY1BUTTONDOWN   0x3B5\n#define MM_JOY2BUTTONDOWN   0x3B6\n#define MM_JOY1BUTTONUP     0x3B7\n#define MM_JOY2BUTTONUP     0x3B8\n\n#define MM_MCINOTIFY        0x3B9           /* MCI */\n\n#define MM_WOM_OPEN         0x3BB           /* waveform output */\n#define MM_WOM_CLOSE        0x3BC\n#define MM_WOM_DONE         0x3BD\n\n#define MM_WIM_OPEN         0x3BE           /* waveform input */\n#define MM_WIM_CLOSE        0x3BF\n#define MM_WIM_DATA         0x3C0\n\n#define MM_MIM_OPEN         0x3C1           /* MIDI input */\n#define MM_MIM_CLOSE        0x3C2\n#define MM_MIM_DATA         0x3C3\n#define MM_MIM_LONGDATA     0x3C4\n#define MM_MIM_ERROR        0x3C5\n#define MM_MIM_LONGERROR    0x3C6\n\n#define MM_MOM_OPEN         0x3C7           /* MIDI output */\n#define MM_MOM_CLOSE        0x3C8\n#define MM_MOM_DONE         0x3C9\n#define MM_MOM_POSITIONCB   0x3CA\n\n#define MM_MIM_MOREDATA     0x3CC\n\n#define MM_MIXM_LINE_CHANGE 0x3D0\n#define MM_MIXM_CONTROL_CHANGE 0x3D1\n\n#define MMSYSERR_BASE          0\n#define WAVERR_BASE            32\n#define MIDIERR_BASE           64\n#define TIMERR_BASE            96\n#define JOYERR_BASE            160\n#define MCIERR_BASE            256\n\n#define MCI_STRING_OFFSET      512\n#define MCI_VD_OFFSET          1024\n#define MCI_CD_OFFSET          1088\n#define MCI_WAVE_OFFSET        1152\n#define MCI_SEQ_OFFSET         1216\n\n#define MMSYSERR_NOERROR      0\n#define MMSYSERR_ERROR        (MMSYSERR_BASE + 1)\n#define MMSYSERR_BADDEVICEID  (MMSYSERR_BASE + 2)\n#define MMSYSERR_NOTENABLED   (MMSYSERR_BASE + 3)\n#define MMSYSERR_ALLOCATED    (MMSYSERR_BASE + 4)\n#define MMSYSERR_INVALHANDLE  (MMSYSERR_BASE + 5)\n#define MMSYSERR_NODRIVER     (MMSYSERR_BASE + 6)\n#define MMSYSERR_NOMEM        (MMSYSERR_BASE + 7)\n#define MMSYSERR_NOTSUPPORTED (MMSYSERR_BASE + 8)\n#define MMSYSERR_BADERRNUM    (MMSYSERR_BASE + 9)\n#define MMSYSERR_INVALFLAG    (MMSYSERR_BASE + 10)\n#define MMSYSERR_INVALPARAM   (MMSYSERR_BASE + 11)\n#define MMSYSERR_HANDLEBUSY   (MMSYSERR_BASE + 12)\n#define MMSYSERR_INVALIDALIAS (MMSYSERR_BASE + 13)\n#define MMSYSERR_BADDB        (MMSYSERR_BASE + 14)\n#define MMSYSERR_KEYNOTFOUND  (MMSYSERR_BASE + 15)\n#define MMSYSERR_READERROR    (MMSYSERR_BASE + 16)\n#define MMSYSERR_WRITEERROR   (MMSYSERR_BASE + 17)\n#define MMSYSERR_DELETEERROR  (MMSYSERR_BASE + 18)\n#define MMSYSERR_VALNOTFOUND  (MMSYSERR_BASE + 19)\n#define MMSYSERR_NODRIVERCB   (MMSYSERR_BASE + 20)\n#define MMSYSERR_MOREDATA     (MMSYSERR_BASE + 21)\n#define MMSYSERR_LASTERROR    (MMSYSERR_BASE + 21)\n\n#define CALLBACK_TYPEMASK       __MSABI_LONG(0x00070000)      /* callback type mask */\n#define CALLBACK_NULL           __MSABI_LONG(0x00000000)      /* no callback */\n#define CALLBACK_WINDOW         __MSABI_LONG(0x00010000)      /* dwCallback is a HWND */\n#define CALLBACK_TASK           __MSABI_LONG(0x00020000)      /* dwCallback is a HTASK */\n#define CALLBACK_THREAD\t\t(CALLBACK_TASK)\t/* dwCallback is a thread ID */\n#define CALLBACK_FUNCTION       __MSABI_LONG(0x00030000)      /* dwCallback is a FARPROC */\n#define CALLBACK_EVENT          __MSABI_LONG(0x00050000)      /* dwCallback is an EVENT Handler */\n\n#define DRV_LOAD                0x0001\n#define DRV_ENABLE              0x0002\n#define DRV_OPEN                0x0003\n#define DRV_CLOSE               0x0004\n#define DRV_DISABLE             0x0005\n#define DRV_FREE                0x0006\n#define DRV_CONFIGURE           0x0007\n#define DRV_QUERYCONFIGURE      0x0008\n#define DRV_INSTALL             0x0009\n#define DRV_REMOVE              0x000A\n#define DRV_EXITSESSION         0x000B\n#define DRV_EXITAPPLICATION     0x000C\n#define DRV_POWER               0x000F\n\n#define DRV_RESERVED            0x0800\n#define DRV_MCI_FIRST           DRV_RESERVED\n#define DRV_MCI_LAST            (0xFFF + DRV_MCI_FIRST)\n#define DRV_USER                0x4000\n\n#define DRVCNF_CANCEL           0x0000\n#define DRVCNF_OK               0x0001\n#define DRVCNF_RESTART \t\t0x0002\n\n#define DRVEA_NORMALEXIT  \t0x0001\n#define DRVEA_ABNORMALEXIT \t0x0002\n\n#define DRV_SUCCESS\t\t0x0001\n#define DRV_FAILURE\t\t0x0000\n\n#define GND_FIRSTINSTANCEONLY \t0x00000001\n\n#define GND_FORWARD  \t\t0x00000000\n#define GND_REVERSE    \t\t0x00000002\n\ntypedef struct tagDRVCONFIGINFO {\n    DWORD   \t\t\tdwDCISize;\n    LPCWSTR  \t\t\tlpszDCISectionName;\n    LPCWSTR  \t\t\tlpszDCIAliasName;\n} DRVCONFIGINFO, *LPDRVCONFIGINFO;\n\n\nLRESULT WINAPI DefDriverProc(DWORD_PTR,HDRVR,UINT,LPARAM,LPARAM);\n/* this sounds odd, but it's the way it is. OpenDriverA even disappeared\n * from latest SDK\n */\nHDRVR \tWINAPI OpenDriverA(LPCSTR szDriverName, LPCSTR szSectionName,\n\t\t\t   LPARAM lParam2);\nHDRVR \tWINAPI OpenDriver(LPCWSTR szDriverName, LPCWSTR szSectionName,\n                          LPARAM lParam2);\nLRESULT WINAPI CloseDriver(HDRVR hDriver, LPARAM lParam1, LPARAM lParam2);\nLRESULT WINAPI SendDriverMessage(HDRVR hDriver, UINT message,\n\t\t\t\t LPARAM lParam1, LPARAM lParam2);\nHMODULE WINAPI GetDriverModuleHandle(HDRVR hDriver);\n\nDWORD\tWINAPI GetDriverFlags(HDRVR hDriver);\n\ntypedef void (CALLBACK *LPDRVCALLBACK)(HDRVR,UINT,DWORD_PTR,DWORD_PTR,DWORD_PTR);\n\n#ifndef MM_MICROSOFT\n#define MM_MICROSOFT            1       /* Microsoft Corp. */\n#endif\n\n#define MM_MIDI_MAPPER          1       /* MIDI Mapper */\n#define MM_WAVE_MAPPER          2       /* Wave Mapper */\n\n#define MM_SNDBLST_MIDIOUT      3       /* Sound Blaster MIDI output port */\n#define MM_SNDBLST_MIDIIN       4       /* Sound Blaster MIDI input port  */\n#define MM_SNDBLST_SYNTH        5       /* Sound Blaster internal synthesizer */\n#define MM_SNDBLST_WAVEOUT      6       /* Sound Blaster waveform output */\n#define MM_SNDBLST_WAVEIN       7       /* Sound Blaster waveform input */\n\n#define MM_ADLIB                9       /* Ad Lib-compatible synthesizer */\n\n#define MM_MPU401_MIDIOUT       10      /* MPU401-compatible MIDI output port */\n#define MM_MPU401_MIDIIN        11      /* MPU401-compatible MIDI input port */\n\n#define MM_PC_JOYSTICK          12      /* Joystick adapter */\n\n#define MM_CREATIVE_SBP16_WAVEOUT   104 \n\nUINT \t\tWINAPI \tmmsystemGetVersion(void);\nBOOL \t\tWINAPI\tsndPlaySoundA(LPCSTR lpszSound, UINT fuSound);\nBOOL \t\tWINAPI\tsndPlaySoundW(LPCWSTR lpszSound, UINT fuSound);\n#define \t\tsndPlaySound WINELIB_NAME_AW(sndPlaySound)\nBOOL \t\tWINAPI \tPlaySoundA(LPCSTR pszSound, HMODULE hmod, DWORD fdwSound);\nBOOL \t\tWINAPI \tPlaySoundW(LPCWSTR pszSound, HMODULE hmod, DWORD fdwSound);\n#define \t\tPlaySound WINELIB_NAME_AW(PlaySound)\n\n#define SND_SYNC            \t0x0000  /* play synchronously (default) */\n#define SND_ASYNC           \t0x0001  /* play asynchronously */\n#define SND_NODEFAULT       \t0x0002  /* don't use default sound */\n#define SND_MEMORY          \t0x0004  /* lpszSoundName points to a memory file */\n#define SND_LOOP            \t0x0008  /* loop the sound until next sndPlaySound */\n#define SND_NOSTOP          \t0x0010  /* don't stop any currently playing sound */\n\n#define SND_NOWAIT              __MSABI_LONG(0x00002000) /* don't wait if the driver is busy */\n#define SND_ALIAS               __MSABI_LONG(0x00010000) /* name is a registry alias */\n#define SND_ALIAS_ID            __MSABI_LONG(0x00110000) /* alias is a predefined ID */\n#define SND_FILENAME            __MSABI_LONG(0x00020000) /* name is file name */\n#define SND_RESOURCE            __MSABI_LONG(0x00040004) /* name is resource name or atom */\n#define SND_PURGE               __MSABI_LONG(0x00000040) /* purge all sounds */\n#define SND_APPLICATION         __MSABI_LONG(0x00000080) /* look for application specific association */\n\n#define SND_ALIAS_START         0\n\n#define sndAlias(ch0, ch1)              (SND_ALIAS_START + ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8)))\n\n#define SND_ALIAS_SYSTEMASTERISK        sndAlias('S', '*')\n#define SND_ALIAS_SYSTEMQUESTION        sndAlias('S', '?')\n#define SND_ALIAS_SYSTEMHAND            sndAlias('S', 'H')\n#define SND_ALIAS_SYSTEMEXIT            sndAlias('S', 'E')\n#define SND_ALIAS_SYSTEMSTART           sndAlias('S', 'S')\n#define SND_ALIAS_SYSTEMWELCOME         sndAlias('S', 'W')\n#define SND_ALIAS_SYSTEMEXCLAMATION     sndAlias('S', '!')\n#define SND_ALIAS_SYSTEMDEFAULT         sndAlias('S', 'D')\n\n/* waveform audio error return values */\n#define WAVERR_BADFORMAT      (WAVERR_BASE + 0)    /* unsupported wave format */\n#define WAVERR_STILLPLAYING   (WAVERR_BASE + 1)    /* still something playing */\n#define WAVERR_UNPREPARED     (WAVERR_BASE + 2)    /* header not prepared */\n#define WAVERR_SYNC           (WAVERR_BASE + 3)    /* device is synchronous */\n#define WAVERR_LASTERROR      (WAVERR_BASE + 3)    /* last error in range */\n\ntypedef LPDRVCALLBACK LPWAVECALLBACK;\n\n#define WOM_OPEN        MM_WOM_OPEN\n#define WOM_CLOSE       MM_WOM_CLOSE\n#define WOM_DONE        MM_WOM_DONE\n#define WIM_OPEN        MM_WIM_OPEN\n#define WIM_CLOSE       MM_WIM_CLOSE\n#define WIM_DATA        MM_WIM_DATA\n\n#define WAVE_MAPPER     (-1)\n\n#define  WAVE_FORMAT_QUERY     \t\t0x0001\n#define  WAVE_ALLOWSYNC        \t\t0x0002\n#define  WAVE_MAPPED               \t0x0004\n#define  WAVE_FORMAT_DIRECT        \t0x0008\n#define  WAVE_FORMAT_DIRECT_QUERY  \t(WAVE_FORMAT_QUERY | WAVE_FORMAT_DIRECT)\n\ntypedef struct wavehdr_tag {\n    LPSTR       lpData;\n    DWORD       dwBufferLength;\n    DWORD       dwBytesRecorded;\n    DWORD_PTR   dwUser;\n    DWORD       dwFlags;\n    DWORD       dwLoops;\n    struct wavehdr_tag *lpNext;\n    DWORD_PTR   reserved;\n} WAVEHDR, *PWAVEHDR, *NPWAVEHDR, *LPWAVEHDR;\n\n#define WHDR_DONE       0x00000001\n#define WHDR_PREPARED   0x00000002\n#define WHDR_BEGINLOOP  0x00000004\n#define WHDR_ENDLOOP    0x00000008\n#define WHDR_INQUEUE    0x00000010\n\ntypedef struct tagWAVEOUTCAPSA {\n    WORD\twMid;\n    WORD\twPid;\n    MMVERSION\tvDriverVersion;\n    CHAR\tszPname[MAXPNAMELEN];\n    DWORD\tdwFormats;\n    WORD\twChannels;\n    WORD\twReserved1;\n    DWORD\tdwSupport;\n} WAVEOUTCAPSA, *LPWAVEOUTCAPSA;\n\ntypedef struct tagWAVEOUTCAPSW {\n    WORD\twMid;\n    WORD\twPid;\n    MMVERSION\tvDriverVersion;\n    WCHAR\tszPname[MAXPNAMELEN];\n    DWORD\tdwFormats;\n    WORD\twChannels;\n    WORD\twReserved1;\n    DWORD\tdwSupport;\n} WAVEOUTCAPSW, *LPWAVEOUTCAPSW;\nDECL_WINELIB_TYPE_AW(WAVEOUTCAPS)\nDECL_WINELIB_TYPE_AW(LPWAVEOUTCAPS)\n\ntypedef struct tagWAVEOUTCAPS2A {\n    WORD\twMid;\n    WORD\twPid;\n    MMVERSION\tvDriverVersion;\n    CHAR\tszPname[MAXPNAMELEN];\n    DWORD\tdwFormats;\n    WORD\twChannels;\n    WORD\twReserved1;\n    DWORD\tdwSupport;\n    GUID\tManufacturerGuid;\n    GUID\tProductGuid;\n    GUID\tNameGuid;\n} WAVEOUTCAPS2A, *LPWAVEOUTCAPS2A;\n\ntypedef struct tagWAVEOUTCAPS2W {\n    WORD\twMid;\n    WORD\twPid;\n    MMVERSION\tvDriverVersion;\n    WCHAR\tszPname[MAXPNAMELEN];\n    DWORD\tdwFormats;\n    WORD\twChannels;\n    WORD\twReserved1;\n    DWORD\tdwSupport;\n    GUID\tManufacturerGuid;\n    GUID\tProductGuid;\n    GUID\tNameGuid;\n} WAVEOUTCAPS2W, *LPWAVEOUTCAPS2W;\nDECL_WINELIB_TYPE_AW(WAVEOUTCAPS2)\nDECL_WINELIB_TYPE_AW(LPWAVEOUTCAPS2)\n\n#define WAVECAPS_PITCH          0x0001   /* supports pitch control */\n#define WAVECAPS_PLAYBACKRATE   0x0002   /* supports playback rate control */\n#define WAVECAPS_VOLUME         0x0004   /* supports volume control */\n#define WAVECAPS_LRVOLUME       0x0008   /* separate left-right volume control */\n#define WAVECAPS_SYNC           0x0010\t /* driver is synchronous and playing is blocking */\n#define WAVECAPS_SAMPLEACCURATE 0x0020\t /* position is sample accurate */\n#define WAVECAPS_DIRECTSOUND\t0x0040   /* ? */\n\ntypedef struct tagWAVEINCAPSA {\n    WORD\twMid;\n    WORD\twPid;\n    MMVERSION\tvDriverVersion;\n    CHAR\tszPname[MAXPNAMELEN];\n    DWORD\tdwFormats;\n    WORD\twChannels;\n    WORD\twReserved1;\n} WAVEINCAPSA, *LPWAVEINCAPSA;\ntypedef struct tagWAVEINCAPSW {\n    WORD\twMid;\n    WORD\twPid;\n    MMVERSION\tvDriverVersion;\n    WCHAR\tszPname[MAXPNAMELEN];\n    DWORD\tdwFormats;\n    WORD\twChannels;\n    WORD\twReserved1;\n} WAVEINCAPSW, *LPWAVEINCAPSW;\nDECL_WINELIB_TYPE_AW(WAVEINCAPS)\nDECL_WINELIB_TYPE_AW(LPWAVEINCAPS)\n\ntypedef struct tagWAVEINCAPS2A {\n    WORD\twMid;\n    WORD\twPid;\n    MMVERSION\tvDriverVersion;\n    CHAR\tszPname[MAXPNAMELEN];\n    DWORD\tdwFormats;\n    WORD\twChannels;\n    WORD\twReserved1;\n    GUID\tManufacturerGuid;\n    GUID\tProductGuid;\n    GUID\tNameGuid;\n} WAVEINCAPS2A, *LPWAVEINCAPS2A;\ntypedef struct tagWAVEINCAPS2W {\n    WORD\twMid;\n    WORD\twPid;\n    MMVERSION\tvDriverVersion;\n    WCHAR\tszPname[MAXPNAMELEN];\n    DWORD\tdwFormats;\n    WORD\twChannels;\n    WORD\twReserved1;\n    GUID\tManufacturerGuid;\n    GUID\tProductGuid;\n    GUID\tNameGuid;\n} WAVEINCAPS2W, *LPWAVEINCAPS2W;\nDECL_WINELIB_TYPE_AW(WAVEINCAPS2)\nDECL_WINELIB_TYPE_AW(LPWAVEINCAPS2)\n\n#define WAVE_INVALIDFORMAT     0x00000000    /* invalid format */\n#define WAVE_FORMAT_1M08       0x00000001    /* 11.025 kHz, Mono,   8-bit  */\n#define WAVE_FORMAT_1S08       0x00000002    /* 11.025 kHz, Stereo, 8-bit  */\n#define WAVE_FORMAT_1M16       0x00000004    /* 11.025 kHz, Mono,   16-bit */\n#define WAVE_FORMAT_1S16       0x00000008    /* 11.025 kHz, Stereo, 16-bit */\n#define WAVE_FORMAT_2M08       0x00000010    /* 22.05  kHz, Mono,   8-bit  */\n#define WAVE_FORMAT_2S08       0x00000020    /* 22.05  kHz, Stereo, 8-bit  */\n#define WAVE_FORMAT_2M16       0x00000040    /* 22.05  kHz, Mono,   16-bit */\n#define WAVE_FORMAT_2S16       0x00000080    /* 22.05  kHz, Stereo, 16-bit */\n#define WAVE_FORMAT_4M08       0x00000100    /* 44.1   kHz, Mono,   8-bit  */\n#define WAVE_FORMAT_4S08       0x00000200    /* 44.1   kHz, Stereo, 8-bit  */\n#define WAVE_FORMAT_4M16       0x00000400    /* 44.1   kHz, Mono,   16-bit */\n#define WAVE_FORMAT_4S16       0x00000800    /* 44.1   kHz, Stereo, 16-bit */\n#define WAVE_FORMAT_48M08      0x00001000    /* 48     kHz, Mono,   8-bit  */\n#define WAVE_FORMAT_48S08      0x00002000    /* 48     kHz, Stereo, 8-bit  */\n#define WAVE_FORMAT_48M16      0x00004000    /* 48     kHz, Mono,   16-bit */\n#define WAVE_FORMAT_48S16      0x00008000    /* 48     kHz, Stereo, 16-bit */\n#define WAVE_FORMAT_96M08      0x00010000    /* 96     kHz, Mono,   8-bit  */\n#define WAVE_FORMAT_96S08      0x00020000    /* 96     kHz, Stereo, 8-bit  */\n#define WAVE_FORMAT_96M16      0x00040000    /* 96     kHz, Mono,   16-bit */\n#define WAVE_FORMAT_96S16      0x00080000    /* 96     kHz, Stereo, 16-bit */\n\n/* General format structure common to all formats, same for Win16 and Win32 */\ntypedef struct waveformat_tag {\n    WORD\twFormatTag;\n    WORD\tnChannels;\n    DWORD\tnSamplesPerSec;\n    DWORD\tnAvgBytesPerSec;\n    WORD\tnBlockAlign;\n} WAVEFORMAT, *LPWAVEFORMAT;\n\n#define WAVE_FORMAT_PCM     1\n\ntypedef struct pcmwaveformat_tag {\n    WAVEFORMAT\twf;\n    WORD\twBitsPerSample;\n} PCMWAVEFORMAT, *LPPCMWAVEFORMAT;\n\n#ifndef _WAVEFORMATEX_\n#define _WAVEFORMATEX_\n/* ditto same for Win16 / Win32 */\ntypedef struct tWAVEFORMATEX {\n    WORD\twFormatTag;\n    WORD\tnChannels;\n    DWORD\tnSamplesPerSec;\n    DWORD\tnAvgBytesPerSec;\n    WORD\tnBlockAlign;\n    WORD\twBitsPerSample;\n    WORD\tcbSize;\n} WAVEFORMATEX, *LPWAVEFORMATEX, *NPWAVEFORMATEX, *PWAVEFORMATEX;\n#endif\ntypedef const WAVEFORMATEX *LPCWAVEFORMATEX;\n\nUINT \t\tWINAPI \twaveOutGetNumDevs(void);\nUINT           WINAPI  waveOutGetDevCapsA(UINT_PTR,LPWAVEOUTCAPSA,UINT);\nUINT           WINAPI  waveOutGetDevCapsW(UINT_PTR,LPWAVEOUTCAPSW,UINT);\n#define \t\twaveOutGetDevCaps WINELIB_NAME_AW(waveOutGetDevCaps)\nUINT \t\tWINAPI\twaveOutGetVolume(HWAVEOUT,DWORD*);\nUINT \t\tWINAPI \twaveOutSetVolume(HWAVEOUT,DWORD);\nUINT \t\tWINAPI \twaveOutGetErrorTextA(UINT,LPSTR,UINT);\nUINT \t\tWINAPI \twaveOutGetErrorTextW(UINT,LPWSTR,UINT);\n#define \t    \twaveOutGetErrorText WINELIB_NAME_AW(waveOutGetErrorText)\nMMRESULT        WINAPI  waveOutOpen(HWAVEOUT*,UINT,LPCWAVEFORMATEX,DWORD_PTR,DWORD_PTR,DWORD);\nUINT \t\tWINAPI \twaveOutClose(HWAVEOUT);\nUINT \t\tWINAPI \twaveOutPrepareHeader(HWAVEOUT,WAVEHDR*,UINT);\nUINT \t\tWINAPI \twaveOutUnprepareHeader(HWAVEOUT,WAVEHDR*,UINT);\nUINT \t\tWINAPI \twaveOutWrite(HWAVEOUT,WAVEHDR*,UINT);\nUINT \t\tWINAPI \twaveOutPause(HWAVEOUT);\nUINT \t\tWINAPI \twaveOutRestart(HWAVEOUT);\nUINT \t\tWINAPI \twaveOutReset(HWAVEOUT);\nUINT \t\tWINAPI \twaveOutBreakLoop(HWAVEOUT);\nUINT \t\tWINAPI \twaveOutGetPosition(HWAVEOUT,LPMMTIME,UINT);\nUINT \t\tWINAPI \twaveOutGetPitch(HWAVEOUT,DWORD*);\nUINT \t\tWINAPI \twaveOutSetPitch(HWAVEOUT,DWORD);\nUINT \t\tWINAPI \twaveOutGetPlaybackRate(HWAVEOUT,DWORD*);\nUINT \t\tWINAPI \twaveOutSetPlaybackRate(HWAVEOUT,DWORD);\nUINT \t\tWINAPI \twaveOutGetID(HWAVEOUT,UINT*);\nUINT           WINAPI  waveOutMessage(HWAVEOUT,UINT,DWORD_PTR,DWORD_PTR);\nUINT \t\tWINAPI \twaveInGetNumDevs(void);\nUINT           WINAPI  waveInGetDevCapsA(UINT_PTR,LPWAVEINCAPSA,UINT);\nUINT           WINAPI  waveInGetDevCapsW(UINT_PTR,LPWAVEINCAPSW,UINT);\n#define \t\twaveInGetDevCaps WINELIB_NAME_AW(waveInGetDevCaps)\nUINT \t\tWINAPI \twaveInGetErrorTextA(UINT,LPSTR,UINT);\nUINT \t\tWINAPI \twaveInGetErrorTextW(UINT,LPWSTR,UINT);\n#define \t\twaveInGetErrorText WINELIB_NAME_AW(waveInGetErrorText)\nMMRESULT        WINAPI  waveInOpen(HWAVEIN*,UINT,LPCWAVEFORMATEX,DWORD_PTR,DWORD_PTR,DWORD);\nUINT \t\tWINAPI  waveInClose(HWAVEIN);\nUINT \t\tWINAPI  waveInPrepareHeader(HWAVEIN,WAVEHDR*,UINT);\nUINT \t\tWINAPI  waveInUnprepareHeader(HWAVEIN,WAVEHDR*,UINT);\nUINT \t\tWINAPI  waveInAddBuffer(HWAVEIN,WAVEHDR*,UINT);\nUINT \t\tWINAPI  waveInStart(HWAVEIN);\nUINT \t\tWINAPI  waveInStop(HWAVEIN);\nUINT \t\tWINAPI  waveInReset(HWAVEIN);\nUINT \t\tWINAPI  waveInGetPosition(HWAVEIN,LPMMTIME,UINT);\nUINT \t\tWINAPI  waveInGetID(HWAVEIN,UINT*);\nUINT           WINAPI  waveInMessage(HWAVEIN,UINT,DWORD_PTR,DWORD_PTR);\n\n#define MIDIERR_UNPREPARED    (MIDIERR_BASE + 0)\n#define MIDIERR_STILLPLAYING  (MIDIERR_BASE + 1)\n#define MIDIERR_NOMAP         (MIDIERR_BASE + 2)\n#define MIDIERR_NOTREADY      (MIDIERR_BASE + 3)\n#define MIDIERR_NODEVICE      (MIDIERR_BASE + 4)\n#define MIDIERR_INVALIDSETUP  (MIDIERR_BASE + 5)\n#define MIDIERR_BADOPENMODE   (MIDIERR_BASE + 6)\n#define MIDIERR_DONT_CONTINUE (MIDIERR_BASE + 7)\n#define MIDIERR_LASTERROR     (MIDIERR_BASE + 7)\n\ntypedef LPDRVCALLBACK LPMIDICALLBACK;\n#define MIDIPATCHSIZE   128\ntypedef WORD PATCHARRAY[MIDIPATCHSIZE];\ntypedef WORD *LPPATCHARRAY;\ntypedef WORD KEYARRAY[MIDIPATCHSIZE];\ntypedef WORD *LPKEYARRAY;\n\n#define MIM_OPEN        MM_MIM_OPEN\n#define MIM_CLOSE       MM_MIM_CLOSE\n#define MIM_DATA        MM_MIM_DATA\n#define MIM_LONGDATA    MM_MIM_LONGDATA\n#define MIM_ERROR       MM_MIM_ERROR\n#define MIM_LONGERROR   MM_MIM_LONGERROR\n#define MIM_MOREDATA\tMM_MIM_MOREDATA\n\n#define MOM_OPEN        MM_MOM_OPEN\n#define MOM_CLOSE       MM_MOM_CLOSE\n#define MOM_DONE        MM_MOM_DONE\n#define MOM_POSITIONCB\tMM_MOM_POSITIONCB\n\n/* device ID for MIDI mapper */\n\n#define MIDIMAPPER     (-1)\n#define MIDI_MAPPER    (-1)\n\n/* Only on Win95 and up */\n#define MIDI_IO_STATUS __MSABI_LONG(0x00000020)\n\n/* flags for wFlags parm of\n\tmidiOutCachePatches(),\n\tmidiOutCacheDrumPatches() */\n#define MIDI_CACHE_ALL      1\n#define MIDI_CACHE_BESTFIT  2\n#define MIDI_CACHE_QUERY    3\n#define MIDI_UNCACHE        4\n\ntypedef struct tagMIDIOUTCAPSA {\n    WORD\twMid;\n    WORD\twPid;\n    MMVERSION\tvDriverVersion;\n    CHAR\tszPname[MAXPNAMELEN];\n    WORD\twTechnology;\n    WORD\twVoices;\n    WORD\twNotes;\n    WORD\twChannelMask;\n    DWORD\tdwSupport;\n} MIDIOUTCAPSA, *LPMIDIOUTCAPSA;\n\ntypedef struct tagMIDIOUTCAPSW {\n    WORD\twMid;\n    WORD\twPid;\n    MMVERSION\tvDriverVersion;\n    WCHAR\tszPname[MAXPNAMELEN];\n    WORD\twTechnology;\n    WORD\twVoices;\n    WORD\twNotes;\n    WORD\twChannelMask;\n    DWORD\tdwSupport;\n} MIDIOUTCAPSW, *LPMIDIOUTCAPSW;\n\nDECL_WINELIB_TYPE_AW(MIDIOUTCAPS)\nDECL_WINELIB_TYPE_AW(LPMIDIOUTCAPS)\n\ntypedef struct tagMIDIOUTCAPS2A {\n    WORD\twMid;\n    WORD\twPid;\n    MMVERSION\tvDriverVersion;\n    CHAR\tszPname[MAXPNAMELEN];\n    WORD\twTechnology;\n    WORD\twVoices;\n    WORD\twNotes;\n    WORD\twChannelMask;\n    DWORD\tdwSupport;\n    GUID\tManufacturerGuid;\n    GUID\tProductGuid;\n    GUID\tNameGuid;\n} MIDIOUTCAPS2A, *LPMIDIOUTCAPS2A;\n\ntypedef struct tagMIDIOUTCAPS2W {\n    WORD\twMid;\n    WORD\twPid;\n    MMVERSION\tvDriverVersion;\n    WCHAR\tszPname[MAXPNAMELEN];\n    WORD\twTechnology;\n    WORD\twVoices;\n    WORD\twNotes;\n    WORD\twChannelMask;\n    DWORD\tdwSupport;\n    GUID\tManufacturerGuid;\n    GUID\tProductGuid;\n    GUID\tNameGuid;\n} MIDIOUTCAPS2W, *LPMIDIOUTCAPS2W;\n\nDECL_WINELIB_TYPE_AW(MIDIOUTCAPS2)\nDECL_WINELIB_TYPE_AW(LPMIDIOUTCAPS2)\n\n#define MOD_MIDIPORT    1  /* output port */\n#define MOD_SYNTH       2  /* generic internal synth */\n#define MOD_SQSYNTH     3  /* square wave internal synth */\n#define MOD_FMSYNTH     4  /* FM internal synth */\n#define MOD_MAPPER      5  /* MIDI mapper */\n#define MOD_WAVETABLE   6  /* hardware wavetable internal synth */\n#define MOD_SWSYNTH     7  /* software synth */\n\n#define MIDICAPS_VOLUME\t\t0x0001  /* supports volume control */\n#define MIDICAPS_LRVOLUME\t0x0002  /* separate left-right volume control */\n#define MIDICAPS_CACHE\t\t0x0004\n#define MIDICAPS_STREAM\t\t0x0008  /* capable of supporting stream buffer */\n\ntypedef struct tagMIDIINCAPSA {\n    WORD\twMid;\n    WORD\twPid;\n    MMVERSION\tvDriverVersion;\n    CHAR\tszPname[MAXPNAMELEN];\n    DWORD\tdwSupport;\n} MIDIINCAPSA, *LPMIDIINCAPSA;\n\ntypedef struct tagMIDIINCAPSW {\n    WORD\twMid;\n    WORD\twPid;\n    MMVERSION\tvDriverVersion;\n    WCHAR\tszPname[MAXPNAMELEN];\n    DWORD\tdwSupport;\n} MIDIINCAPSW, *LPMIDIINCAPSW;\n\nDECL_WINELIB_TYPE_AW(MIDIINCAPS)\nDECL_WINELIB_TYPE_AW(LPMIDIINCAPS)\n\ntypedef struct tagMIDIINCAPS2A {\n    WORD\twMid;\n    WORD\twPid;\n    MMVERSION\tvDriverVersion;\n    CHAR\tszPname[MAXPNAMELEN];\n    DWORD\tdwSupport;\n    GUID\tManufacturerGuid;\n    GUID\tProductGuid;\n    GUID\tNameGuid;\n} MIDIINCAPS2A, *LPMIDIINCAPS2A;\n\ntypedef struct tagMIDIINCAPS2W {\n    WORD\twMid;\n    WORD\twPid;\n    MMVERSION\tvDriverVersion;\n    WCHAR\tszPname[MAXPNAMELEN];\n    DWORD\tdwSupport;\n    GUID\tManufacturerGuid;\n    GUID\tProductGuid;\n    GUID\tNameGuid;\n} MIDIINCAPS2W, *LPMIDIINCAPS2W;\n\nDECL_WINELIB_TYPE_AW(MIDIINCAPS2)\nDECL_WINELIB_TYPE_AW(LPMIDIINCAPS2)\n\n/* It seems that Win32 has a slightly different structure than Win 16.\n * sigh....\n */\ntypedef struct midihdr_tag {\n    LPSTR\tlpData;\n    DWORD\tdwBufferLength;\n    DWORD\tdwBytesRecorded;\n    DWORD_PTR\tdwUser;\n    DWORD\tdwFlags;\n    struct midihdr_tag *lpNext;\n    DWORD_PTR\treserved;\n    /* Win 32 extended the structure with these 2 fields */\n    DWORD\tdwOffset;\n    DWORD_PTR\tdwReserved[8];\n} MIDIHDR, *LPMIDIHDR;\n\n#define MHDR_DONE       0x00000001       /* done bit */\n#define MHDR_PREPARED   0x00000002       /* set if header prepared */\n#define MHDR_INQUEUE    0x00000004       /* reserved for driver */\n#define MHDR_ISSTRM\t0x00000008\t /* data is sent by Stream functions */\n\ntypedef struct midiproptempo_tag {\n    DWORD\t\tcbStruct;\n    DWORD\t\tdwTempo;\n} MIDIPROPTEMPO, *LPMIDIPROPTEMPO;\n\ntypedef struct midiproptimediv_tag {\n    DWORD\t\tcbStruct;\n    DWORD\t\tdwTimeDiv;\n} MIDIPROPTIMEDIV, *LPMIDIPROPTIMEDIV;\n\n#define MIDIPROP_GET\t\t0x40000000\n#define MIDIPROP_SET\t\t0x80000000\n#define MIDIPROP_TEMPO\t\t0x00000002\n#define MIDIPROP_TIMEDIV\t0x00000001\n\ntypedef struct midievent_tag {\n    DWORD dwDeltaTime;\t/* Time, in MIDI ticks, between the previous\n\t\t\t * event and the current event. */\n    DWORD dwStreamID;\t/* Reserved; must be zero. */\n    DWORD dwEvent;  \t/* event => see MEVT_XXX macros */\n    DWORD dwParms[1];\t/* extra pmts to dwEvent if F_LONG is set */\n} MIDIEVENT, *LPMIDIEVENT;\n\n#define MEVT_EVENTTYPE(x) ((BYTE) (((x)>>24)&0xFF))\n#define MEVT_EVENTPARM(x) ((DWORD) ((x)&0x00FFFFFF))\n\n#define MEVT_F_CALLBACK __MSABI_LONG(0x40000000)\n#define MEVT_F_LONG     __MSABI_LONG(0x80000000)\n#define MEVT_F_SHORT    __MSABI_LONG(0x00000000)\n#define\tMEVT_COMMENT\t((BYTE)0x82)\n#define\tMEVT_LONGMSG\t((BYTE)0x80)\n#define\tMEVT_NOP\t((BYTE)0x02)\n#define\tMEVT_SHORTMSG\t((BYTE)0x00)\n#define\tMEVT_TEMPO\t((BYTE)0x01)\n#define\tMEVT_VERSION\t((BYTE)0x84)\n\nUINT\t\tWINAPI\tmidiOutGetNumDevs(void);\nUINT           WINAPI  midiOutGetDevCapsA(UINT_PTR,LPMIDIOUTCAPSA,UINT);\nUINT           WINAPI  midiOutGetDevCapsW(UINT_PTR,LPMIDIOUTCAPSW,UINT);\n#define \t\tmidiOutGetDevCaps WINELIB_NAME_AW(midiOutGetDevCaps)\nUINT\t\tWINAPI\tmidiOutGetVolume(HMIDIOUT,DWORD*);\nUINT\t\tWINAPI\tmidiOutSetVolume(HMIDIOUT,DWORD);\nUINT\t\tWINAPI\tmidiOutGetErrorTextA(UINT,LPSTR,UINT);\nUINT\t\tWINAPI\tmidiOutGetErrorTextW(UINT,LPWSTR,UINT);\n#define \t\tmidiOutGetErrorText WINELIB_NAME_AW(midiOutGetErrorText)\nMMRESULT        WINAPI  midiOutOpen(LPHMIDIOUT,UINT,DWORD_PTR,DWORD_PTR,DWORD);\nUINT\t\tWINAPI\tmidiOutClose(HMIDIOUT);\nUINT\t\tWINAPI\tmidiOutPrepareHeader(HMIDIOUT,MIDIHDR*,UINT);\nUINT\t\tWINAPI\tmidiOutUnprepareHeader(HMIDIOUT,MIDIHDR*,UINT);\nUINT\t\tWINAPI\tmidiOutShortMsg(HMIDIOUT,DWORD);\nUINT\t\tWINAPI\tmidiOutLongMsg(HMIDIOUT,MIDIHDR*,UINT);\nUINT\t\tWINAPI\tmidiOutReset(HMIDIOUT);\nUINT\t\tWINAPI\tmidiOutCachePatches(HMIDIOUT,UINT,WORD*,UINT);\nUINT\t\tWINAPI\tmidiOutCacheDrumPatches(HMIDIOUT,UINT,WORD*,UINT);\nUINT\t\tWINAPI\tmidiOutGetID(HMIDIOUT,UINT*);\nUINT           WINAPI  midiOutMessage(HMIDIOUT,UINT,DWORD_PTR,DWORD_PTR);\n\nUINT\t\tWINAPI\tmidiInGetNumDevs(void);\nUINT           WINAPI  midiInGetDevCapsA(UINT_PTR,LPMIDIINCAPSA,UINT);\nUINT           WINAPI  midiInGetDevCapsW(UINT_PTR,LPMIDIINCAPSW,UINT);\n#define \t\tmidiInGetDevCaps WINELIB_NAME_AW(midiInGetDevCaps)\nUINT\t\tWINAPI\tmidiInGetErrorTextA(UINT,LPSTR,UINT);\nUINT\t\tWINAPI\tmidiInGetErrorTextW(UINT,LPWSTR,UINT);\n#define \t\tmidiInGetErrorText WINELIB_NAME_AW(midiInGetErrorText)\nMMRESULT        WINAPI  midiInOpen(LPHMIDIIN,UINT,DWORD_PTR,DWORD_PTR,DWORD);\nUINT\t\tWINAPI\tmidiInClose(HMIDIIN);\nUINT\t\tWINAPI\tmidiInPrepareHeader(HMIDIIN,MIDIHDR*,UINT);\nUINT\t\tWINAPI\tmidiInUnprepareHeader(HMIDIIN,MIDIHDR*,UINT);\nUINT\t\tWINAPI\tmidiInAddBuffer(HMIDIIN,MIDIHDR*,UINT);\nUINT\t\tWINAPI\tmidiInStart(HMIDIIN);\nUINT\t\tWINAPI\tmidiInStop(HMIDIIN);\nUINT\t\tWINAPI\tmidiInReset(HMIDIIN);\nUINT\t\tWINAPI\tmidiInGetID(HMIDIIN,UINT*);\nUINT           WINAPI  midiInMessage(HMIDIIN,UINT,DWORD_PTR,DWORD_PTR);\nMMRESULT\tWINAPI\tmidiStreamClose(HMIDISTRM hms);\nMMRESULT       WINAPI  midiStreamOpen(LPHMIDISTRM,LPUINT,DWORD,DWORD_PTR,DWORD_PTR,DWORD);\nMMRESULT\tWINAPI\tmidiStreamOut(HMIDISTRM hms, LPMIDIHDR lpMidiHdr, UINT cbMidiHdr);\nMMRESULT\tWINAPI\tmidiStreamPause(HMIDISTRM hms);\nMMRESULT\tWINAPI\tmidiStreamPosition(HMIDISTRM hms, LPMMTIME lpmmt, UINT cbmmt);\nMMRESULT\tWINAPI\tmidiStreamProperty(HMIDISTRM hms, LPBYTE lpPropData, DWORD dwProperty);\nMMRESULT\tWINAPI\tmidiStreamRestart(HMIDISTRM hms);\nMMRESULT\tWINAPI\tmidiStreamStop(HMIDISTRM hms);\n\n#define AUX_MAPPER     (-1)\n\ntypedef struct tagAUXCAPSA {\n    WORD\twMid;\n    WORD\twPid;\n    MMVERSION\tvDriverVersion;\n    CHAR\tszPname[MAXPNAMELEN];\n    WORD\twTechnology;\n    WORD\twReserved1;\n    DWORD\tdwSupport;\n} AUXCAPSA, *LPAUXCAPSA;\n\ntypedef struct tagAUXCAPSW {\n    WORD\twMid;\n    WORD\twPid;\n    MMVERSION\tvDriverVersion;\n    WCHAR\tszPname[MAXPNAMELEN];\n    WORD\twTechnology;\n    WORD\twReserved1;\n    DWORD\tdwSupport;\n} AUXCAPSW, *LPAUXCAPSW;\n\nDECL_WINELIB_TYPE_AW(AUXCAPS)\nDECL_WINELIB_TYPE_AW(LPAUXCAPS)\n\ntypedef struct tagAUXCAPS2A {\n    WORD\twMid;\n    WORD\twPid;\n    MMVERSION\tvDriverVersion;\n    CHAR\tszPname[MAXPNAMELEN];\n    WORD\twTechnology;\n    WORD\twReserved1;\n    DWORD\tdwSupport;\n    GUID\tManufacturerGuid;\n    GUID\tProductGuid;\n    GUID\tNameGuid;\n} AUXCAPS2A, *LPAUXCAPS2A;\n\ntypedef struct tagAUXCAPS2W {\n    WORD\twMid;\n    WORD\twPid;\n    MMVERSION\tvDriverVersion;\n    WCHAR\tszPname[MAXPNAMELEN];\n    WORD\twTechnology;\n    WORD\twReserved1;\n    DWORD\tdwSupport;\n    GUID\tManufacturerGuid;\n    GUID\tProductGuid;\n    GUID\tNameGuid;\n} AUXCAPS2W, *LPAUXCAPS2W;\n\nDECL_WINELIB_TYPE_AW(AUXCAPS2)\nDECL_WINELIB_TYPE_AW(LPAUXCAPS2)\n\n#define AUXCAPS_CDAUDIO    1       /* audio from internal CD-ROM drive */\n#define AUXCAPS_AUXIN      2       /* audio from auxiliary input jacks */\n\n#define AUXCAPS_VOLUME          0x0001  /* supports volume control */\n#define AUXCAPS_LRVOLUME        0x0002  /* separate left-right volume control */\n\nUINT\t\tWINAPI\tauxGetNumDevs(void);\nUINT           WINAPI  auxGetDevCapsA(UINT_PTR,LPAUXCAPSA,UINT);\nUINT           WINAPI  auxGetDevCapsW(UINT_PTR,LPAUXCAPSW,UINT);\n#define \t\tauxGetDevCaps WINELIB_NAME_AW(auxGetDevCaps)\nUINT\t\tWINAPI\tauxSetVolume(UINT,DWORD);\nUINT\t\tWINAPI\tauxGetVolume(UINT,LPDWORD);\nUINT           WINAPI  auxOutMessage(UINT,UINT,DWORD_PTR,DWORD_PTR);\n\n#define TIMERR_NOERROR        (0)                  /* no error */\n#define TIMERR_NOCANDO        (TIMERR_BASE+1)      /* request not completed */\n#define TIMERR_STRUCT         (TIMERR_BASE+33)     /* time struct size */\n\ntypedef void (CALLBACK *LPTIMECALLBACK)(UINT,UINT,DWORD_PTR,DWORD_PTR,DWORD_PTR);\n\n#define TIME_ONESHOT\t\t\t0x0000\t/* program timer for single event */\n#define TIME_PERIODIC\t\t\t0x0001\t/* program for continuous periodic event */\n#define TIME_CALLBACK_FUNCTION\t\t0x0000\t/* callback is function */\n#define TIME_CALLBACK_EVENT_SET\t\t0x0010\t/* callback is event - use SetEvent */\n#define TIME_CALLBACK_EVENT_PULSE \t0x0020\t/* callback is event - use PulseEvent */\n#define TIME_KILL_SYNCHRONOUS           0x0100\n\ntypedef struct timecaps_tag {\n    UINT\twPeriodMin;\n    UINT\twPeriodMax;\n} TIMECAPS, *LPTIMECAPS;\n\n\nMMRESULT\tWINAPI\ttimeGetSystemTime(LPMMTIME,UINT);\nDWORD\t\tWINAPI\ttimeGetTime(void);\t/* same for win32/win16 */\nMMRESULT       WINAPI  timeSetEvent(UINT,UINT,LPTIMECALLBACK,DWORD_PTR,UINT);\nMMRESULT\tWINAPI\ttimeKillEvent(UINT);\nMMRESULT\tWINAPI\ttimeGetDevCaps(LPTIMECAPS,UINT);\nMMRESULT\tWINAPI\ttimeBeginPeriod(UINT);\nMMRESULT\tWINAPI\ttimeEndPeriod(UINT);\n\n#define JOYERR_NOERROR        (0)                  /* no error */\n#define JOYERR_PARMS          (JOYERR_BASE+5)      /* bad parameters */\n#define JOYERR_NOCANDO        (JOYERR_BASE+6)      /* request not completed */\n#define JOYERR_UNPLUGGED      (JOYERR_BASE+7)      /* joystick is unplugged */\n\n/* JOYINFO, JOYINFOEX, MM_JOY* */\n#define JOY_BUTTON1         \t0x0001\n#define JOY_BUTTON2         \t0x0002\n#define JOY_BUTTON3         \t0x0004\n#define JOY_BUTTON4         \t0x0008\n#define JOY_BUTTON1CHG      \t0x0100\n#define JOY_BUTTON2CHG      \t0x0200\n#define JOY_BUTTON3CHG      \t0x0400\n#define JOY_BUTTON4CHG      \t0x0800\n\n#define JOYSTICKID1         \t0\n#define JOYSTICKID2         \t1\n\n/* JOYCAPS.wCaps */\n#define JOYCAPS_HASZ\t\t0x0001\n#define JOYCAPS_HASR\t\t0x0002\n#define JOYCAPS_HASU\t\t0x0004\n#define JOYCAPS_HASV\t\t0x0008\n#define JOYCAPS_HASPOV\t\t0x0010\n#define JOYCAPS_POV4DIR\t\t0x0020\n#define JOYCAPS_POVCTS\t\t0x0040\n\n/* JOYINFOEX stuff */\n#define JOY_POVCENTERED\t\t(WORD) -1\n#define JOY_POVFORWARD\t\t0\n#define JOY_POVRIGHT\t\t9000\n#define JOY_POVBACKWARD\t\t18000\n#define JOY_POVLEFT\t\t27000\n\n#define JOY_RETURNX\t\t0x00000001\n#define JOY_RETURNY\t\t0x00000002\n#define JOY_RETURNZ\t\t0x00000004\n#define JOY_RETURNR\t\t0x00000008\n#define JOY_RETURNU\t\t0x00000010\n#define JOY_RETURNV\t\t0x00000020\n#define JOY_RETURNPOV\t\t0x00000040\n#define JOY_RETURNBUTTONS\t0x00000080\n#define JOY_RETURNRAWDATA\t0x00000100\n#define JOY_RETURNPOVCTS\t0x00000200\n#define JOY_RETURNCENTERED\t0x00000400\n#define JOY_USEDEADZONE\t\t0x00000800\n#define JOY_RETURNALL\t\t(JOY_RETURNX | JOY_RETURNY | JOY_RETURNZ | \\\n\t\t\t\t JOY_RETURNR | JOY_RETURNU | JOY_RETURNV | \\\n\t\t\t\t JOY_RETURNPOV | JOY_RETURNBUTTONS)\n#define JOY_CAL_READALWAYS\t0x00010000\n#define JOY_CAL_READXYONLY\t0x00020000\n#define JOY_CAL_READ3\t\t0x00040000\n#define JOY_CAL_READ4\t\t0x00080000\n#define JOY_CAL_READXONLY\t0x00100000\n#define JOY_CAL_READYONLY\t0x00200000\n#define JOY_CAL_READ5\t\t0x00400000\n#define JOY_CAL_READ6\t\t0x00800000\n#define JOY_CAL_READZONLY\t0x01000000\n#define JOY_CAL_READRONLY\t0x02000000\n#define JOY_CAL_READUONLY\t0x04000000\n#define JOY_CAL_READVONLY\t0x08000000\n\ntypedef struct tagJOYCAPSA {\n    WORD wMid;\n    WORD wPid;\n    CHAR szPname[MAXPNAMELEN];\n    UINT wXmin;\n    UINT wXmax;\n    UINT wYmin;\n    UINT wYmax;\n    UINT wZmin;\n    UINT wZmax;\n    UINT wNumButtons;\n    UINT wPeriodMin;\n    UINT wPeriodMax;\n    UINT wRmin;\n    UINT wRmax;\n    UINT wUmin;\n    UINT wUmax;\n    UINT wVmin;\n    UINT wVmax;\n    UINT wCaps;\n    UINT wMaxAxes;\n    UINT wNumAxes;\n    UINT wMaxButtons;\n    CHAR szRegKey[MAXPNAMELEN];\n    CHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME];\n} JOYCAPSA, *LPJOYCAPSA;\n\ntypedef struct tagJOYCAPSW {\n    WORD wMid;\n    WORD wPid;\n    WCHAR szPname[MAXPNAMELEN];\n    UINT wXmin;\n    UINT wXmax;\n    UINT wYmin;\n    UINT wYmax;\n    UINT wZmin;\n    UINT wZmax;\n    UINT wNumButtons;\n    UINT wPeriodMin;\n    UINT wPeriodMax;\n    UINT wRmin;\n    UINT wRmax;\n    UINT wUmin;\n    UINT wUmax;\n    UINT wVmin;\n    UINT wVmax;\n    UINT wCaps;\n    UINT wMaxAxes;\n    UINT wNumAxes;\n    UINT wMaxButtons;\n    WCHAR szRegKey[MAXPNAMELEN];\n    WCHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME];\n} JOYCAPSW, *LPJOYCAPSW;\nDECL_WINELIB_TYPE_AW(JOYCAPS)\nDECL_WINELIB_TYPE_AW(LPJOYCAPS)\n\ntypedef struct tagJOYCAPS2A {\n    WORD wMid;\n    WORD wPid;\n    CHAR szPname[MAXPNAMELEN];\n    UINT wXmin;\n    UINT wXmax;\n    UINT wYmin;\n    UINT wYmax;\n    UINT wZmin;\n    UINT wZmax;\n    UINT wNumButtons;\n    UINT wPeriodMin;\n    UINT wPeriodMax;\n    UINT wRmin;\n    UINT wRmax;\n    UINT wUmin;\n    UINT wUmax;\n    UINT wVmin;\n    UINT wVmax;\n    UINT wCaps;\n    UINT wMaxAxes;\n    UINT wNumAxes;\n    UINT wMaxButtons;\n    CHAR szRegKey[MAXPNAMELEN];\n    CHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME];\n    GUID ManufacturerGuid;\n    GUID ProductGuid;\n    GUID NameGuid;\n} JOYCAPS2A, *LPJOYCAPS2A;\n\ntypedef struct tagJOYCAPS2W {\n    WORD wMid;\n    WORD wPid;\n    WCHAR szPname[MAXPNAMELEN];\n    UINT wXmin;\n    UINT wXmax;\n    UINT wYmin;\n    UINT wYmax;\n    UINT wZmin;\n    UINT wZmax;\n    UINT wNumButtons;\n    UINT wPeriodMin;\n    UINT wPeriodMax;\n    UINT wRmin;\n    UINT wRmax;\n    UINT wUmin;\n    UINT wUmax;\n    UINT wVmin;\n    UINT wVmax;\n    UINT wCaps;\n    UINT wMaxAxes;\n    UINT wNumAxes;\n    UINT wMaxButtons;\n    WCHAR szRegKey[MAXPNAMELEN];\n    WCHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME];\n    GUID ManufacturerGuid;\n    GUID ProductGuid;\n    GUID NameGuid;\n} JOYCAPS2W, *LPJOYCAPS2W;\nDECL_WINELIB_TYPE_AW(JOYCAPS2)\nDECL_WINELIB_TYPE_AW(LPJOYCAPS2)\n\ntypedef struct joyinfo_tag {\n    UINT wXpos;\n    UINT wYpos;\n    UINT wZpos;\n    UINT wButtons;\n} JOYINFO, *LPJOYINFO;\n\ntypedef struct joyinfoex_tag {\n    DWORD\tdwSize;\n    DWORD\tdwFlags;\n    DWORD\tdwXpos;\n    DWORD\tdwYpos;\n    DWORD\tdwZpos;\n    DWORD\tdwRpos;\n    DWORD\tdwUpos;\n    DWORD\tdwVpos;\n    DWORD\tdwButtons;\n    DWORD\tdwButtonNumber;\n    DWORD\tdwPOV;\n    DWORD\tdwReserved1;\n    DWORD\tdwReserved2;\n} JOYINFOEX,*LPJOYINFOEX;\n\n\nMMRESULT       WINAPI  joyGetDevCapsA(UINT_PTR,LPJOYCAPSA,UINT);\nMMRESULT       WINAPI  joyGetDevCapsW(UINT_PTR,LPJOYCAPSW,UINT);\n#define joyGetDevCaps WINELIB_NAME_AW(joyGetDevCaps)\nUINT\t\tWINAPI\tjoyGetNumDevs(void);\nMMRESULT\tWINAPI\tjoyGetPos(UINT,LPJOYINFO);\nMMRESULT\tWINAPI\tjoyGetPosEx(UINT,LPJOYINFOEX);\nMMRESULT\tWINAPI\tjoyGetThreshold(UINT,UINT*);\nMMRESULT\tWINAPI\tjoyReleaseCapture(UINT);\nMMRESULT\tWINAPI\tjoySetCapture(HWND,UINT,UINT,BOOL);\nMMRESULT\tWINAPI\tjoySetThreshold(UINT,UINT);\n\n#define\tMIXERR_BASE\t\t1024\n#define\tMIXERR_INVALLINE\t(MIXERR_BASE + 0)\n#define MIXERR_INVALCONTROL\t(MIXERR_BASE + 1)\n#define MIXERR_INVALVALUE\t(MIXERR_BASE + 2)\n#define MIXERR_LASTERROR\t(MIXERR_BASE + 2)\n\ntypedef struct tagMIXERCAPSA {\n\tWORD\t\twMid;\n\tWORD\t\twPid;\n\tMMVERSION\tvDriverVersion;\n\tCHAR\t\tszPname[MAXPNAMELEN];\n\tDWORD\t\tfdwSupport;\n\tDWORD\t\tcDestinations;\n} MIXERCAPSA,*LPMIXERCAPSA;\n\ntypedef struct tagMIXERCAPSW {\n\tWORD\t\twMid;\n\tWORD\t\twPid;\n\tMMVERSION\tvDriverVersion;\n\tWCHAR\t\tszPname[MAXPNAMELEN];\n\tDWORD\t\tfdwSupport;\n\tDWORD\t\tcDestinations;\n} MIXERCAPSW,*LPMIXERCAPSW;\n\nDECL_WINELIB_TYPE_AW(MIXERCAPS)\nDECL_WINELIB_TYPE_AW(LPMIXERCAPS)\n\ntypedef struct tagMIXERCAPS2A {\n\tWORD\t\twMid;\n\tWORD\t\twPid;\n\tMMVERSION\tvDriverVersion;\n\tCHAR\t\tszPname[MAXPNAMELEN];\n\tDWORD\t\tfdwSupport;\n\tDWORD\t\tcDestinations;\n\tGUID\t\tManufacturerGuid;\n\tGUID\t\tProductGuid;\n\tGUID\t\tNameGuid;\n} MIXERCAPS2A,*LPMIXERCAPS2A;\n\ntypedef struct tagMIXERCAPS2W {\n\tWORD\t\twMid;\n\tWORD\t\twPid;\n\tMMVERSION\tvDriverVersion;\n\tWCHAR\t\tszPname[MAXPNAMELEN];\n\tDWORD\t\tfdwSupport;\n\tDWORD\t\tcDestinations;\n\tGUID\t\tManufacturerGuid;\n\tGUID\t\tProductGuid;\n\tGUID\t\tNameGuid;\n} MIXERCAPS2W,*LPMIXERCAPS2W;\n\nDECL_WINELIB_TYPE_AW(MIXERCAPS2)\nDECL_WINELIB_TYPE_AW(LPMIXERCAPS2)\n\n#define MIXER_SHORT_NAME_CHARS\t\t16\n#define MIXER_LONG_NAME_CHARS\t\t64\n\n/*  MIXERLINE.fdwLine */\n#define\tMIXERLINE_LINEF_ACTIVE\t\t0x00000001\n#define\tMIXERLINE_LINEF_DISCONNECTED\t0x00008000\n#define\tMIXERLINE_LINEF_SOURCE\t\t0x80000000\n\n/* Mixer flags */\n#define MIXER_OBJECTF_HANDLE    __MSABI_LONG(0x80000000)\n#define MIXER_OBJECTF_MIXER     __MSABI_LONG(0x00000000)\n#define MIXER_OBJECTF_HMIXER\t(MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIXER)\n#define MIXER_OBJECTF_WAVEOUT   __MSABI_LONG(0x10000000)\n#define MIXER_OBJECTF_HWAVEOUT\t(MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_WAVEOUT)\n#define MIXER_OBJECTF_WAVEIN    __MSABI_LONG(0x20000000)\n#define MIXER_OBJECTF_HWAVEIN\t(MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_WAVEIN)\n#define MIXER_OBJECTF_MIDIOUT   __MSABI_LONG(0x30000000)\n#define MIXER_OBJECTF_HMIDIOUT\t(MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIDIOUT)\n#define MIXER_OBJECTF_MIDIIN    __MSABI_LONG(0x40000000)\n#define MIXER_OBJECTF_HMIDIIN\t(MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIDIIN)\n#define MIXER_OBJECTF_AUX       __MSABI_LONG(0x50000000)\n\n/*  MIXERLINE.dwComponentType */\n/*  component types for destinations and sources */\n#define MIXERLINE_COMPONENTTYPE_DST_FIRST       __MSABI_LONG(0x00000000)\n#define\tMIXERLINE_COMPONENTTYPE_DST_UNDEFINED\t(MIXERLINE_COMPONENTTYPE_DST_FIRST + 0)\n#define\tMIXERLINE_COMPONENTTYPE_DST_DIGITAL\t(MIXERLINE_COMPONENTTYPE_DST_FIRST + 1)\n#define\tMIXERLINE_COMPONENTTYPE_DST_LINE\t(MIXERLINE_COMPONENTTYPE_DST_FIRST + 2)\n#define\tMIXERLINE_COMPONENTTYPE_DST_MONITOR\t(MIXERLINE_COMPONENTTYPE_DST_FIRST + 3)\n#define\tMIXERLINE_COMPONENTTYPE_DST_SPEAKERS\t(MIXERLINE_COMPONENTTYPE_DST_FIRST + 4)\n#define\tMIXERLINE_COMPONENTTYPE_DST_HEADPHONES\t(MIXERLINE_COMPONENTTYPE_DST_FIRST + 5)\n#define\tMIXERLINE_COMPONENTTYPE_DST_TELEPHONE\t(MIXERLINE_COMPONENTTYPE_DST_FIRST + 6)\n#define\tMIXERLINE_COMPONENTTYPE_DST_WAVEIN\t(MIXERLINE_COMPONENTTYPE_DST_FIRST + 7)\n#define\tMIXERLINE_COMPONENTTYPE_DST_VOICEIN\t(MIXERLINE_COMPONENTTYPE_DST_FIRST + 8)\n#define\tMIXERLINE_COMPONENTTYPE_DST_LAST\t(MIXERLINE_COMPONENTTYPE_DST_FIRST + 8)\n\n#define MIXERLINE_COMPONENTTYPE_SRC_FIRST       __MSABI_LONG(0x00001000)\n#define\tMIXERLINE_COMPONENTTYPE_SRC_UNDEFINED\t(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 0)\n#define\tMIXERLINE_COMPONENTTYPE_SRC_DIGITAL\t(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 1)\n#define\tMIXERLINE_COMPONENTTYPE_SRC_LINE\t(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 2)\n#define\tMIXERLINE_COMPONENTTYPE_SRC_MICROPHONE\t(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 3)\n#define\tMIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER\t(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 4)\n#define\tMIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC\t(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 5)\n#define\tMIXERLINE_COMPONENTTYPE_SRC_TELEPHONE\t(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 6)\n#define\tMIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER\t(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 7)\n#define\tMIXERLINE_COMPONENTTYPE_SRC_WAVEOUT\t(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 8)\n#define\tMIXERLINE_COMPONENTTYPE_SRC_AUXILIARY\t(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 9)\n#define\tMIXERLINE_COMPONENTTYPE_SRC_ANALOG\t(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10)\n#define\tMIXERLINE_COMPONENTTYPE_SRC_LAST\t(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10)\n\n/*  MIXERLINE.Target.dwType */\n#define\tMIXERLINE_TARGETTYPE_UNDEFINED\t0\n#define\tMIXERLINE_TARGETTYPE_WAVEOUT\t1\n#define\tMIXERLINE_TARGETTYPE_WAVEIN\t2\n#define\tMIXERLINE_TARGETTYPE_MIDIOUT\t3\n#define\tMIXERLINE_TARGETTYPE_MIDIIN\t4\n#define MIXERLINE_TARGETTYPE_AUX\t5\n\ntypedef struct tagMIXERLINEA {\n    DWORD\tcbStruct;\n    DWORD\tdwDestination;\n    DWORD\tdwSource;\n    DWORD\tdwLineID;\n    DWORD\tfdwLine;\n    DWORD_PTR\tdwUser;\n    DWORD\tdwComponentType;\n    DWORD\tcChannels;\n    DWORD\tcConnections;\n    DWORD\tcControls;\n    CHAR\tszShortName[MIXER_SHORT_NAME_CHARS];\n    CHAR\tszName[MIXER_LONG_NAME_CHARS];\n    struct {\n\tDWORD\tdwType;\n\tDWORD\tdwDeviceID;\n\tWORD\twMid;\n\tWORD\twPid;\n\tMMVERSION\tvDriverVersion;\n\tCHAR\tszPname[MAXPNAMELEN];\n    } Target;\n} MIXERLINEA, *LPMIXERLINEA;\n\ntypedef struct tagMIXERLINEW {\n    DWORD\tcbStruct;\n    DWORD\tdwDestination;\n    DWORD\tdwSource;\n    DWORD\tdwLineID;\n    DWORD\tfdwLine;\n    DWORD_PTR\tdwUser;\n    DWORD\tdwComponentType;\n    DWORD\tcChannels;\n    DWORD\tcConnections;\n    DWORD\tcControls;\n    WCHAR\tszShortName[MIXER_SHORT_NAME_CHARS];\n    WCHAR\tszName[MIXER_LONG_NAME_CHARS];\n    struct {\n\tDWORD\tdwType;\n\tDWORD\tdwDeviceID;\n\tWORD\twMid;\n\tWORD\twPid;\n\tMMVERSION\tvDriverVersion;\n\tWCHAR\tszPname[MAXPNAMELEN];\n    } Target;\n} MIXERLINEW, *LPMIXERLINEW;\n\nDECL_WINELIB_TYPE_AW(MIXERLINE)\nDECL_WINELIB_TYPE_AW(LPMIXERLINE)\n\n/*  MIXERCONTROL.fdwControl */\n#define MIXERCONTROL_CONTROLF_UNIFORM           __MSABI_LONG(0x00000001)\n#define MIXERCONTROL_CONTROLF_MULTIPLE          __MSABI_LONG(0x00000002)\n#define MIXERCONTROL_CONTROLF_DISABLED          __MSABI_LONG(0x80000000)\n\n/*  MIXERCONTROL_CONTROLTYPE_xxx building block defines */\n#define MIXERCONTROL_CT_CLASS_MASK              __MSABI_LONG(0xF0000000)\n#define MIXERCONTROL_CT_CLASS_CUSTOM            __MSABI_LONG(0x00000000)\n#define MIXERCONTROL_CT_CLASS_METER             __MSABI_LONG(0x10000000)\n#define MIXERCONTROL_CT_CLASS_SWITCH            __MSABI_LONG(0x20000000)\n#define MIXERCONTROL_CT_CLASS_NUMBER            __MSABI_LONG(0x30000000)\n#define MIXERCONTROL_CT_CLASS_SLIDER            __MSABI_LONG(0x40000000)\n#define MIXERCONTROL_CT_CLASS_FADER             __MSABI_LONG(0x50000000)\n#define MIXERCONTROL_CT_CLASS_TIME              __MSABI_LONG(0x60000000)\n#define MIXERCONTROL_CT_CLASS_LIST              __MSABI_LONG(0x70000000)\n\n#define MIXERCONTROL_CT_SUBCLASS_MASK           __MSABI_LONG(0x0F000000)\n\n#define MIXERCONTROL_CT_SC_SWITCH_BOOLEAN       __MSABI_LONG(0x00000000)\n#define MIXERCONTROL_CT_SC_SWITCH_BUTTON        __MSABI_LONG(0x01000000)\n\n#define MIXERCONTROL_CT_SC_METER_POLLED         __MSABI_LONG(0x00000000)\n\n#define MIXERCONTROL_CT_SC_TIME_MICROSECS       __MSABI_LONG(0x00000000)\n#define MIXERCONTROL_CT_SC_TIME_MILLISECS       __MSABI_LONG(0x01000000)\n\n#define MIXERCONTROL_CT_SC_LIST_SINGLE          __MSABI_LONG(0x00000000)\n#define MIXERCONTROL_CT_SC_LIST_MULTIPLE        __MSABI_LONG(0x01000000)\n\n#define MIXERCONTROL_CT_UNITS_MASK              __MSABI_LONG(0x00FF0000)\n#define MIXERCONTROL_CT_UNITS_CUSTOM            __MSABI_LONG(0x00000000)\n#define MIXERCONTROL_CT_UNITS_BOOLEAN           __MSABI_LONG(0x00010000)\n#define MIXERCONTROL_CT_UNITS_SIGNED            __MSABI_LONG(0x00020000)\n#define MIXERCONTROL_CT_UNITS_UNSIGNED          __MSABI_LONG(0x00030000)\n#define MIXERCONTROL_CT_UNITS_DECIBELS          __MSABI_LONG(0x00040000) /* in 10ths */\n#define MIXERCONTROL_CT_UNITS_PERCENT           __MSABI_LONG(0x00050000) /* in 10ths */\n\n/*  Commonly used control types for specifying MIXERCONTROL.dwControlType */\n#define MIXERCONTROL_CONTROLTYPE_CUSTOM\t\t(MIXERCONTROL_CT_CLASS_CUSTOM | MIXERCONTROL_CT_UNITS_CUSTOM)\n#define MIXERCONTROL_CONTROLTYPE_BOOLEANMETER\t(MIXERCONTROL_CT_CLASS_METER | MIXERCONTROL_CT_SC_METER_POLLED | MIXERCONTROL_CT_UNITS_BOOLEAN)\n#define MIXERCONTROL_CONTROLTYPE_SIGNEDMETER\t(MIXERCONTROL_CT_CLASS_METER | MIXERCONTROL_CT_SC_METER_POLLED | MIXERCONTROL_CT_UNITS_SIGNED)\n#define MIXERCONTROL_CONTROLTYPE_PEAKMETER\t(MIXERCONTROL_CONTROLTYPE_SIGNEDMETER + 1)\n#define MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER\t(MIXERCONTROL_CT_CLASS_METER | MIXERCONTROL_CT_SC_METER_POLLED | MIXERCONTROL_CT_UNITS_UNSIGNED)\n#define MIXERCONTROL_CONTROLTYPE_BOOLEAN\t(MIXERCONTROL_CT_CLASS_SWITCH | MIXERCONTROL_CT_SC_SWITCH_BOOLEAN | MIXERCONTROL_CT_UNITS_BOOLEAN)\n#define MIXERCONTROL_CONTROLTYPE_ONOFF\t\t(MIXERCONTROL_CONTROLTYPE_BOOLEAN + 1)\n#define MIXERCONTROL_CONTROLTYPE_MUTE\t\t(MIXERCONTROL_CONTROLTYPE_BOOLEAN + 2)\n#define MIXERCONTROL_CONTROLTYPE_MONO\t\t(MIXERCONTROL_CONTROLTYPE_BOOLEAN + 3)\n#define MIXERCONTROL_CONTROLTYPE_LOUDNESS\t(MIXERCONTROL_CONTROLTYPE_BOOLEAN + 4)\n#define MIXERCONTROL_CONTROLTYPE_STEREOENH\t(MIXERCONTROL_CONTROLTYPE_BOOLEAN + 5)\n#define MIXERCONTROL_CONTROLTYPE_BASS_BOOST     (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 0x00002277)\n#define MIXERCONTROL_CONTROLTYPE_BUTTON\t\t(MIXERCONTROL_CT_CLASS_SWITCH | MIXERCONTROL_CT_SC_SWITCH_BUTTON | MIXERCONTROL_CT_UNITS_BOOLEAN)\n#define MIXERCONTROL_CONTROLTYPE_DECIBELS\t(MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_DECIBELS)\n#define MIXERCONTROL_CONTROLTYPE_SIGNED\t\t(MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_SIGNED)\n#define MIXERCONTROL_CONTROLTYPE_UNSIGNED\t(MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_UNSIGNED)\n#define MIXERCONTROL_CONTROLTYPE_PERCENT\t(MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_PERCENT)\n#define MIXERCONTROL_CONTROLTYPE_SLIDER\t\t(MIXERCONTROL_CT_CLASS_SLIDER | MIXERCONTROL_CT_UNITS_SIGNED)\n#define MIXERCONTROL_CONTROLTYPE_PAN\t\t(MIXERCONTROL_CONTROLTYPE_SLIDER + 1)\n#define MIXERCONTROL_CONTROLTYPE_QSOUNDPAN\t(MIXERCONTROL_CONTROLTYPE_SLIDER + 2)\n#define MIXERCONTROL_CONTROLTYPE_FADER\t\t(MIXERCONTROL_CT_CLASS_FADER | MIXERCONTROL_CT_UNITS_UNSIGNED)\n#define MIXERCONTROL_CONTROLTYPE_VOLUME\t\t(MIXERCONTROL_CONTROLTYPE_FADER + 1)\n#define MIXERCONTROL_CONTROLTYPE_BASS\t\t(MIXERCONTROL_CONTROLTYPE_FADER + 2)\n#define MIXERCONTROL_CONTROLTYPE_TREBLE\t\t(MIXERCONTROL_CONTROLTYPE_FADER + 3)\n#define MIXERCONTROL_CONTROLTYPE_EQUALIZER\t(MIXERCONTROL_CONTROLTYPE_FADER + 4)\n#define MIXERCONTROL_CONTROLTYPE_SINGLESELECT\t(MIXERCONTROL_CT_CLASS_LIST | MIXERCONTROL_CT_SC_LIST_SINGLE | MIXERCONTROL_CT_UNITS_BOOLEAN)\n#define MIXERCONTROL_CONTROLTYPE_MUX\t\t(MIXERCONTROL_CONTROLTYPE_SINGLESELECT + 1)\n#define MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT\t(MIXERCONTROL_CT_CLASS_LIST | MIXERCONTROL_CT_SC_LIST_MULTIPLE | MIXERCONTROL_CT_UNITS_BOOLEAN)\n#define MIXERCONTROL_CONTROLTYPE_MIXER\t\t(MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT + 1)\n#define MIXERCONTROL_CONTROLTYPE_MICROTIME\t(MIXERCONTROL_CT_CLASS_TIME | MIXERCONTROL_CT_SC_TIME_MICROSECS | MIXERCONTROL_CT_UNITS_UNSIGNED)\n#define MIXERCONTROL_CONTROLTYPE_MILLITIME\t(MIXERCONTROL_CT_CLASS_TIME | MIXERCONTROL_CT_SC_TIME_MILLISECS | MIXERCONTROL_CT_UNITS_UNSIGNED)\n\n\ntypedef struct tagMIXERCONTROLA {\n    DWORD\t\tcbStruct;\n    DWORD\t\tdwControlID;\n    DWORD\t\tdwControlType;\n    DWORD\t\tfdwControl;\n    DWORD\t\tcMultipleItems;\n    CHAR\t\tszShortName[MIXER_SHORT_NAME_CHARS];\n    CHAR\t\tszName[MIXER_LONG_NAME_CHARS];\n    union {\n\tstruct {\n\t    LONG\tlMinimum;\n\t    LONG\tlMaximum;\n\t} DUMMYSTRUCTNAME;\n\tstruct {\n\t    DWORD\tdwMinimum;\n\t    DWORD\tdwMaximum;\n\t} DUMMYSTRUCTNAME1;\n\tDWORD       \tdwReserved[6];\n    } Bounds;\n    union {\n\tDWORD\t\tcSteps;\n\tDWORD\t\tcbCustomData;\n\tDWORD\t\tdwReserved[6];\n    } Metrics;\n} MIXERCONTROLA, *LPMIXERCONTROLA;\n\ntypedef struct MIXERCONTROLW {\n    DWORD\t\tcbStruct;\n    DWORD\t\tdwControlID;\n    DWORD\t\tdwControlType;\n    DWORD\t\tfdwControl;\n    DWORD\t\tcMultipleItems;\n    WCHAR\t\tszShortName[MIXER_SHORT_NAME_CHARS];\n    WCHAR\t\tszName[MIXER_LONG_NAME_CHARS];\n    union {\n\tstruct {\n\t    LONG\tlMinimum;\n\t    LONG\tlMaximum;\n\t} DUMMYSTRUCTNAME;\n\tstruct {\n\t    DWORD\tdwMinimum;\n\t    DWORD\tdwMaximum;\n\t} DUMMYSTRUCTNAME1;\n\tDWORD       \tdwReserved[6];\n    } Bounds;\n    union {\n\tDWORD\t\tcSteps;\n\tDWORD\t\tcbCustomData;\n\tDWORD\t\tdwReserved[6];\n    } Metrics;\n} MIXERCONTROLW, *LPMIXERCONTROLW;\n\nDECL_WINELIB_TYPE_AW(MIXERCONTROL)\nDECL_WINELIB_TYPE_AW(LPMIXERCONTROL)\n\ntypedef struct tagMIXERLINECONTROLSA {\n    DWORD\tcbStruct;\n    DWORD\tdwLineID;\n    union {\n\tDWORD\tdwControlID;\n\tDWORD\tdwControlType;\n    } DUMMYUNIONNAME;\n    DWORD\tcControls;\n    DWORD\tcbmxctrl;\n    LPMIXERCONTROLA\tpamxctrl;\n} MIXERLINECONTROLSA, *LPMIXERLINECONTROLSA;\n\ntypedef struct tagMIXERLINECONTROLSW {\n    DWORD\tcbStruct;\n    DWORD\tdwLineID;\n    union {\n\tDWORD\tdwControlID;\n\tDWORD\tdwControlType;\n    } DUMMYUNIONNAME;\n    DWORD\tcControls;\n    DWORD\tcbmxctrl;\n    LPMIXERCONTROLW\tpamxctrl;\n} MIXERLINECONTROLSW, *LPMIXERLINECONTROLSW;\n\nDECL_WINELIB_TYPE_AW(MIXERLINECONTROLS)\nDECL_WINELIB_TYPE_AW(LPMIXERLINECONTROLS)\n\ntypedef struct tMIXERCONTROLDETAILS {\n    DWORD\tcbStruct;\n    DWORD\tdwControlID;\n    DWORD\tcChannels;\n    union {\n        HWND\thwndOwner;\n        DWORD\tcMultipleItems;\n    } DUMMYUNIONNAME;\n    DWORD\tcbDetails;\n    LPVOID\tpaDetails;\n} MIXERCONTROLDETAILS,*LPMIXERCONTROLDETAILS;\n\ntypedef struct tagMIXERCONTROLDETAILS_LISTTEXTA {\n    DWORD\tdwParam1;\n    DWORD\tdwParam2;\n    CHAR\tszName[MIXER_LONG_NAME_CHARS];\n} MIXERCONTROLDETAILS_LISTTEXTA,*LPMIXERCONTROLDETAILS_LISTTEXTA;\n\ntypedef struct tagMIXERCONTROLDETAILS_LISTTEXTW {\n    DWORD\tdwParam1;\n    DWORD\tdwParam2;\n    WCHAR\tszName[MIXER_LONG_NAME_CHARS];\n} MIXERCONTROLDETAILS_LISTTEXTW,*LPMIXERCONTROLDETAILS_LISTTEXTW;\n\nDECL_WINELIB_TYPE_AW(MIXERCONTROLDETAILS_LISTTEXT)\nDECL_WINELIB_TYPE_AW(LPMIXERCONTROLDETAILS_LISTTEXT)\n\n/*  MIXER_GETCONTROLDETAILSF_VALUE */\ntypedef struct {\n\tLONG\tfValue;\n} MIXERCONTROLDETAILS_BOOLEAN,*LPMIXERCONTROLDETAILS_BOOLEAN;\n\ntypedef struct {\n\tLONG\tlValue;\n} MIXERCONTROLDETAILS_SIGNED,*LPMIXERCONTROLDETAILS_SIGNED;\n\ntypedef struct {\n\tDWORD\tdwValue;\n} MIXERCONTROLDETAILS_UNSIGNED,*LPMIXERCONTROLDETAILS_UNSIGNED;\n\n/* bits passed to mixerGetLineInfo.fdwInfo */\n#define MIXER_GETLINEINFOF_DESTINATION          __MSABI_LONG(0x00000000)\n#define MIXER_GETLINEINFOF_SOURCE               __MSABI_LONG(0x00000001)\n#define MIXER_GETLINEINFOF_LINEID               __MSABI_LONG(0x00000002)\n#define MIXER_GETLINEINFOF_COMPONENTTYPE        __MSABI_LONG(0x00000003)\n#define MIXER_GETLINEINFOF_TARGETTYPE           __MSABI_LONG(0x00000004)\n#define MIXER_GETLINEINFOF_QUERYMASK            __MSABI_LONG(0x0000000F)\n\n/* bitmask passed to mixerGetLineControl */\n#define MIXER_GETLINECONTROLSF_ALL              __MSABI_LONG(0x00000000)\n#define MIXER_GETLINECONTROLSF_ONEBYID          __MSABI_LONG(0x00000001)\n#define MIXER_GETLINECONTROLSF_ONEBYTYPE        __MSABI_LONG(0x00000002)\n#define MIXER_GETLINECONTROLSF_QUERYMASK        __MSABI_LONG(0x0000000F)\n\n/* bitmask passed to mixerGetControlDetails */\n#define MIXER_GETCONTROLDETAILSF_VALUE          __MSABI_LONG(0x00000000)\n#define MIXER_GETCONTROLDETAILSF_LISTTEXT       __MSABI_LONG(0x00000001)\n#define MIXER_GETCONTROLDETAILSF_QUERYMASK      __MSABI_LONG(0x0000000F)\n\n/* bitmask passed to mixerSetControlDetails */\n#define MIXER_SETCONTROLDETAILSF_VALUE          __MSABI_LONG(0x00000000)\n#define MIXER_SETCONTROLDETAILSF_CUSTOM         __MSABI_LONG(0x00000001)\n#define MIXER_SETCONTROLDETAILSF_QUERYMASK      __MSABI_LONG(0x0000000F)\n\nUINT\t\tWINAPI\tmixerGetNumDevs(void);\nUINT           WINAPI  mixerOpen(LPHMIXER,UINT,DWORD_PTR,DWORD_PTR,DWORD);\nUINT\t\tWINAPI\tmixerClose(HMIXER);\nDWORD           WINAPI  mixerMessage(HMIXER,UINT,DWORD_PTR,DWORD_PTR);\nUINT           WINAPI  mixerGetDevCapsA(UINT_PTR,LPMIXERCAPSA,UINT);\nUINT           WINAPI  mixerGetDevCapsW(UINT_PTR,LPMIXERCAPSW,UINT);\n#define \t\tmixerGetDevCaps WINELIB_NAME_AW(mixerGetDevCaps)\nUINT\t\tWINAPI\tmixerGetLineInfoA(HMIXEROBJ,LPMIXERLINEA,DWORD);\nUINT\t\tWINAPI\tmixerGetLineInfoW(HMIXEROBJ,LPMIXERLINEW,DWORD);\n#define \t\tmixerGetLineInfo WINELIB_NAME_AW(mixerGetLineInfo)\nUINT\t\tWINAPI\tmixerGetID(HMIXEROBJ,LPUINT,DWORD);\nUINT\t\tWINAPI\tmixerGetLineControlsA(HMIXEROBJ,LPMIXERLINECONTROLSA,DWORD);\nUINT\t\tWINAPI\tmixerGetLineControlsW(HMIXEROBJ,LPMIXERLINECONTROLSW,DWORD);\n#define \t\tmixerGetLineControls WINELIB_NAME_AW(mixerGetLineControls)\nUINT\t\tWINAPI\tmixerGetControlDetailsA(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD);\nUINT\t\tWINAPI\tmixerGetControlDetailsW(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD);\n#define \t\tmixerGetControlDetails WINELIB_NAME_AW(mixerGetControlDetails)\nUINT\t\tWINAPI\tmixerSetControlDetails(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD);\n\n#define MMIOERR_BASE            256\n#define MMIOERR_FILENOTFOUND    (MMIOERR_BASE + 1)  /* file not found */\n#define MMIOERR_OUTOFMEMORY     (MMIOERR_BASE + 2)  /* out of memory */\n#define MMIOERR_CANNOTOPEN      (MMIOERR_BASE + 3)  /* cannot open */\n#define MMIOERR_CANNOTCLOSE     (MMIOERR_BASE + 4)  /* cannot close */\n#define MMIOERR_CANNOTREAD      (MMIOERR_BASE + 5)  /* cannot read */\n#define MMIOERR_CANNOTWRITE     (MMIOERR_BASE + 6)  /* cannot write */\n#define MMIOERR_CANNOTSEEK      (MMIOERR_BASE + 7)  /* cannot seek */\n#define MMIOERR_CANNOTEXPAND    (MMIOERR_BASE + 8)  /* cannot expand file */\n#define MMIOERR_CHUNKNOTFOUND   (MMIOERR_BASE + 9)  /* chunk not found */\n#define MMIOERR_UNBUFFERED      (MMIOERR_BASE + 10) /* file is unbuffered */\n#define MMIOERR_PATHNOTFOUND     (MMIOERR_BASE + 11)\n#define MMIOERR_ACCESSDENIED     (MMIOERR_BASE + 12)\n#define MMIOERR_SHARINGVIOLATION (MMIOERR_BASE + 13)\n#define MMIOERR_NETWORKERROR     (MMIOERR_BASE + 14)\n#define MMIOERR_TOOMANYOPENFILES (MMIOERR_BASE + 15)\n#define MMIOERR_INVALIDFILE      (MMIOERR_BASE + 16)\n\n#define CFSEPCHAR       '+'             /* compound file name separator char. */\n\ntypedef DWORD           FOURCC;         /* a four character code */\ntypedef LRESULT (CALLBACK *LPMMIOPROC)  (LPSTR lpmmioinfo, UINT uMessage,\n\t\t\t\t\t LPARAM lParam1, LPARAM lParam2);\n\ntypedef struct _MMIOINFO {\n        DWORD\t\tdwFlags;\n        FOURCC\t\tfccIOProc;\n        LPMMIOPROC\tpIOProc;\n        UINT\t\twErrorRet;\n        HTASK\t\thTask;\n        /* fields maintained by MMIO functions during buffered I/O */\n        LONG\t\tcchBuffer;\n        HPSTR\t\tpchBuffer;\n        HPSTR\t\tpchNext;\n        HPSTR\t\tpchEndRead;\n        HPSTR\t\tpchEndWrite;\n        LONG\t\tlBufOffset;\n        /* fields maintained by I/O procedure */\n        LONG\t\tlDiskOffset;\n        DWORD\t\tadwInfo[3];\n        /* other fields maintained by MMIO */\n        DWORD\t\tdwReserved1;\n        DWORD\t\tdwReserved2;\n        HMMIO\t\thmmio;\n} MMIOINFO, *PMMIOINFO, *LPMMIOINFO;\n\n\ntypedef struct _MMCKINFO\n{\n        FOURCC          ckid;           /* chunk ID */\n        DWORD           cksize;         /* chunk size */\n        FOURCC          fccType;        /* form type or list type */\n        DWORD           dwDataOffset;   /* offset of data portion of chunk */\n        DWORD           dwFlags;        /* flags used by MMIO functions */\n} MMCKINFO, *LPMMCKINFO;\n\n#define MMIO_RWMODE     0x00000003      /* open file for reading/writing/both */\n#define MMIO_SHAREMODE  0x00000070      /* file sharing mode number */\n\n#define MMIO_CREATE     0x00001000      /* create new file (or truncate file) */\n#define MMIO_PARSE      0x00000100      /* parse new file returning path */\n#define MMIO_DELETE     0x00000200      /* create new file (or truncate file) */\n#define MMIO_EXIST      0x00004000      /* checks for existence of file */\n#define MMIO_ALLOCBUF   0x00010000      /* mmioOpen() should allocate a buffer */\n#define MMIO_GETTEMP    0x00020000      /* mmioOpen() should retrieve temp name */\n\n#define MMIO_DIRTY      0x10000000      /* I/O buffer is dirty */\n\n#define MMIO_READ       0x00000000      /* open file for reading only */\n#define MMIO_WRITE      0x00000001      /* open file for writing only */\n#define MMIO_READWRITE  0x00000002      /* open file for reading and writing */\n\n#define MMIO_COMPAT     0x00000000      /* compatibility mode */\n#define MMIO_EXCLUSIVE  0x00000010      /* exclusive-access mode */\n#define MMIO_DENYWRITE  0x00000020      /* deny writing to other processes */\n#define MMIO_DENYREAD   0x00000030      /* deny reading to other processes */\n#define MMIO_DENYNONE   0x00000040      /* deny nothing to other processes */\n\n#define MMIO_FHOPEN             0x0010  /* mmioClose: keep file handle open */\n#define MMIO_EMPTYBUF           0x0010  /* mmioFlush: empty the I/O buffer */\n#define MMIO_TOUPPER            0x0010  /* mmioStringToFOURCC: to u-case */\n#define MMIO_INSTALLPROC    0x00010000  /* mmioInstallIOProc: install MMIOProc */\n#define MMIO_GLOBALPROC     0x10000000  /* mmioInstallIOProc: install globally */\n#define MMIO_REMOVEPROC     0x00020000  /* mmioInstallIOProc: remove MMIOProc */\n#define MMIO_FINDPROC       0x00040000  /* mmioInstallIOProc: find an MMIOProc */\n#define MMIO_FINDCHUNK          0x0010  /* mmioDescend: find a chunk by ID */\n#define MMIO_FINDRIFF           0x0020  /* mmioDescend: find a LIST chunk */\n#define MMIO_FINDLIST           0x0040  /* mmioDescend: find a RIFF chunk */\n#define MMIO_CREATERIFF         0x0020  /* mmioCreateChunk: make a LIST chunk */\n#define MMIO_CREATELIST         0x0040  /* mmioCreateChunk: make a RIFF chunk */\n\n#ifndef SEEK_SET\n#define SEEK_SET   0\n#define SEEK_CUR   1\n#define SEEK_END   2\n#endif  /* SEEK_SET */\n\n#define MMIOM_READ      MMIO_READ       /* read */\n#define MMIOM_WRITE    MMIO_WRITE       /* write */\n#define MMIOM_SEEK              2       /* seek to a new position in file */\n#define MMIOM_OPEN              3       /* open file */\n#define MMIOM_CLOSE             4       /* close file */\n#define MMIOM_WRITEFLUSH        5       /* write and flush */\n\n#define MMIOM_RENAME            6       /* rename specified file */\n\n#define MMIOM_USER         0x8000       /* beginning of user-defined messages */\n\n#define FOURCC_RIFF     mmioFOURCC('R', 'I', 'F', 'F')\n#define FOURCC_LIST     mmioFOURCC('L', 'I', 'S', 'T')\n\n#define FOURCC_DOS      mmioFOURCC('D', 'O', 'S', ' ')\n#define FOURCC_MEM      mmioFOURCC('M', 'E', 'M', ' ')\n\n#define MMIO_DEFAULTBUFFER      8192    /* default buffer size */\n\n#define mmioFOURCC( ch0, ch1, ch2, ch3 )                                \\\n                ( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) |    \\\n                ( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) )\n\nLPMMIOPROC \tWINAPI \tmmioInstallIOProcA(FOURCC,LPMMIOPROC,DWORD);\nLPMMIOPROC \tWINAPI \tmmioInstallIOProcW(FOURCC,LPMMIOPROC,DWORD);\n#define      \t\tmmioInstallIOProc WINELIB_NAME_AW(mmioInstallIOProc)\n\nFOURCC \t\tWINAPI\tmmioStringToFOURCCA(LPCSTR,UINT);\nFOURCC \t\tWINAPI\tmmioStringToFOURCCW(LPCWSTR,UINT);\n#define \t\tmmioStringToFOURCC WINELIB_NAME_AW(mmioStringToFOURCC)\nHMMIO\t\tWINAPI\tmmioOpenA(LPSTR,MMIOINFO*,DWORD);\nHMMIO\t\tWINAPI\tmmioOpenW(LPWSTR,MMIOINFO*,DWORD);\n#define\t\t\tmmioOpen WINELIB_NAME_AW(mmioOpen)\n\nMMRESULT\tWINAPI\tmmioRenameA(LPCSTR szFileName, LPCSTR szNewFileName,\n\t\t\t\t    const MMIOINFO * lpmmioinfo, DWORD dwRenameFlags);\nMMRESULT\tWINAPI\tmmioRenameW(LPCWSTR szFileName, LPCWSTR szNewFileName,\n\t\t\t\t    const MMIOINFO * lpmmioinfo, DWORD dwRenameFlags);\n#define \t\tmmioRename WINELIB_NAME_AW(mmioRename)\n\nMMRESULT \tWINAPI\tmmioClose(HMMIO,UINT);\nLONG \t\tWINAPI\tmmioRead(HMMIO,HPSTR,LONG);\nLONG \t\tWINAPI\tmmioWrite(HMMIO,HPCSTR,LONG);\nLONG \t\tWINAPI\tmmioSeek(HMMIO,LONG,INT);\nMMRESULT \tWINAPI\tmmioGetInfo(HMMIO,MMIOINFO*,UINT);\nMMRESULT \tWINAPI\tmmioSetInfo(HMMIO,const MMIOINFO*,UINT);\nMMRESULT\tWINAPI\tmmioSetBuffer(HMMIO,LPSTR,LONG,UINT);\nMMRESULT\tWINAPI\tmmioFlush(HMMIO,UINT);\nMMRESULT\tWINAPI\tmmioAdvance(HMMIO,MMIOINFO*,UINT);\nLRESULT\t\tWINAPI\tmmioSendMessage(HMMIO,UINT,LPARAM,LPARAM);\nMMRESULT\tWINAPI\tmmioDescend(HMMIO,MMCKINFO*,const MMCKINFO*,UINT);\nMMRESULT\tWINAPI\tmmioAscend(HMMIO,MMCKINFO*,UINT);\nMMRESULT\tWINAPI\tmmioCreateChunk(HMMIO,MMCKINFO*,UINT);\n\ntypedef UINT (CALLBACK *YIELDPROC)(MCIDEVICEID,DWORD);\n\nBOOL            WINAPI  mciExecute(LPCSTR);\nDWORD           WINAPI  mciSendCommandA(MCIDEVICEID,UINT,DWORD_PTR,DWORD_PTR);\nDWORD           WINAPI  mciSendCommandW(MCIDEVICEID,UINT,DWORD_PTR,DWORD_PTR);\n#define \t\tmciSendCommand WINELIB_NAME_AW(mciSendCommand)\nDWORD\t\tWINAPI\tmciSendStringA(LPCSTR,LPSTR,UINT,HWND);\nDWORD\t\tWINAPI\tmciSendStringW(LPCWSTR,LPWSTR,UINT,HWND);\n#define \t\tmciSendString WINELIB_NAME_AW(mciSendString)\nMCIDEVICEID\tWINAPI\tmciGetDeviceIDA(LPCSTR);\nMCIDEVICEID\tWINAPI\tmciGetDeviceIDW(LPCWSTR);\n#define \t\tmciGetDeviceID WINELIB_NAME_AW(mciGetDeviceID)\nMCIDEVICEID     WINAPI  mciGetDeviceIDFromElementIDA(DWORD,LPCSTR);\nMCIDEVICEID     WINAPI  mciGetDeviceIDFromElementIDW(DWORD,LPCWSTR);\n#define                 mciGetDeviceIDFromElementID WINELIB_NAME_AW(mciGetDeviceIDFromElementID)\nBOOL            WINAPI  mciGetErrorStringA(MCIERROR,LPSTR,UINT);\nBOOL            WINAPI  mciGetErrorStringW(MCIERROR,LPWSTR,UINT);\n#define \t\tmciGetErrorString WINELIB_NAME_AW(mciGetErrorString)\nBOOL            WINAPI  mciSetYieldProc(MCIDEVICEID,YIELDPROC,DWORD);\nHTASK           WINAPI  mciGetCreatorTask(MCIDEVICEID);\nYIELDPROC       WINAPI  mciGetYieldProc(MCIDEVICEID,DWORD*);\n\n#define MCIERR_INVALID_DEVICE_ID        (MCIERR_BASE + 1)\n#define MCIERR_UNRECOGNIZED_KEYWORD     (MCIERR_BASE + 3)\n#define MCIERR_UNRECOGNIZED_COMMAND     (MCIERR_BASE + 5)\n#define MCIERR_HARDWARE                 (MCIERR_BASE + 6)\n#define MCIERR_INVALID_DEVICE_NAME      (MCIERR_BASE + 7)\n#define MCIERR_OUT_OF_MEMORY            (MCIERR_BASE + 8)\n#define MCIERR_DEVICE_OPEN              (MCIERR_BASE + 9)\n#define MCIERR_CANNOT_LOAD_DRIVER       (MCIERR_BASE + 10)\n#define MCIERR_MISSING_COMMAND_STRING   (MCIERR_BASE + 11)\n#define MCIERR_PARAM_OVERFLOW           (MCIERR_BASE + 12)\n#define MCIERR_MISSING_STRING_ARGUMENT  (MCIERR_BASE + 13)\n#define MCIERR_BAD_INTEGER              (MCIERR_BASE + 14)\n#define MCIERR_PARSER_INTERNAL          (MCIERR_BASE + 15)\n#define MCIERR_DRIVER_INTERNAL          (MCIERR_BASE + 16)\n#define MCIERR_MISSING_PARAMETER        (MCIERR_BASE + 17)\n#define MCIERR_UNSUPPORTED_FUNCTION     (MCIERR_BASE + 18)\n#define MCIERR_FILE_NOT_FOUND           (MCIERR_BASE + 19)\n#define MCIERR_DEVICE_NOT_READY         (MCIERR_BASE + 20)\n#define MCIERR_INTERNAL                 (MCIERR_BASE + 21)\n#define MCIERR_DRIVER                   (MCIERR_BASE + 22)\n#define MCIERR_CANNOT_USE_ALL           (MCIERR_BASE + 23)\n#define MCIERR_MULTIPLE                 (MCIERR_BASE + 24)\n#define MCIERR_EXTENSION_NOT_FOUND      (MCIERR_BASE + 25)\n#define MCIERR_OUTOFRANGE               (MCIERR_BASE + 26)\n#define MCIERR_FLAGS_NOT_COMPATIBLE     (MCIERR_BASE + 28)\n#define MCIERR_FILE_NOT_SAVED           (MCIERR_BASE + 30)\n#define MCIERR_DEVICE_TYPE_REQUIRED     (MCIERR_BASE + 31)\n#define MCIERR_DEVICE_LOCKED            (MCIERR_BASE + 32)\n#define MCIERR_DUPLICATE_ALIAS          (MCIERR_BASE + 33)\n#define MCIERR_BAD_CONSTANT             (MCIERR_BASE + 34)\n#define MCIERR_MUST_USE_SHAREABLE       (MCIERR_BASE + 35)\n#define MCIERR_MISSING_DEVICE_NAME      (MCIERR_BASE + 36)\n#define MCIERR_BAD_TIME_FORMAT          (MCIERR_BASE + 37)\n#define MCIERR_NO_CLOSING_QUOTE         (MCIERR_BASE + 38)\n#define MCIERR_DUPLICATE_FLAGS          (MCIERR_BASE + 39)\n#define MCIERR_INVALID_FILE             (MCIERR_BASE + 40)\n#define MCIERR_NULL_PARAMETER_BLOCK     (MCIERR_BASE + 41)\n#define MCIERR_UNNAMED_RESOURCE         (MCIERR_BASE + 42)\n#define MCIERR_NEW_REQUIRES_ALIAS       (MCIERR_BASE + 43)\n#define MCIERR_NOTIFY_ON_AUTO_OPEN      (MCIERR_BASE + 44)\n#define MCIERR_NO_ELEMENT_ALLOWED       (MCIERR_BASE + 45)\n#define MCIERR_NONAPPLICABLE_FUNCTION   (MCIERR_BASE + 46)\n#define MCIERR_ILLEGAL_FOR_AUTO_OPEN    (MCIERR_BASE + 47)\n#define MCIERR_FILENAME_REQUIRED        (MCIERR_BASE + 48)\n#define MCIERR_EXTRA_CHARACTERS         (MCIERR_BASE + 49)\n#define MCIERR_DEVICE_NOT_INSTALLED     (MCIERR_BASE + 50)\n#define MCIERR_GET_CD                   (MCIERR_BASE + 51)\n#define MCIERR_SET_CD                   (MCIERR_BASE + 52)\n#define MCIERR_SET_DRIVE                (MCIERR_BASE + 53)\n#define MCIERR_DEVICE_LENGTH            (MCIERR_BASE + 54)\n#define MCIERR_DEVICE_ORD_LENGTH        (MCIERR_BASE + 55)\n#define MCIERR_NO_INTEGER               (MCIERR_BASE + 56)\n\n#define MCIERR_WAVE_OUTPUTSINUSE        (MCIERR_BASE + 64)\n#define MCIERR_WAVE_SETOUTPUTINUSE      (MCIERR_BASE + 65)\n#define MCIERR_WAVE_INPUTSINUSE         (MCIERR_BASE + 66)\n#define MCIERR_WAVE_SETINPUTINUSE       (MCIERR_BASE + 67)\n#define MCIERR_WAVE_OUTPUTUNSPECIFIED   (MCIERR_BASE + 68)\n#define MCIERR_WAVE_INPUTUNSPECIFIED    (MCIERR_BASE + 69)\n#define MCIERR_WAVE_OUTPUTSUNSUITABLE   (MCIERR_BASE + 70)\n#define MCIERR_WAVE_SETOUTPUTUNSUITABLE (MCIERR_BASE + 71)\n#define MCIERR_WAVE_INPUTSUNSUITABLE    (MCIERR_BASE + 72)\n#define MCIERR_WAVE_SETINPUTUNSUITABLE  (MCIERR_BASE + 73)\n\n#define MCIERR_SEQ_DIV_INCOMPATIBLE     (MCIERR_BASE + 80)\n#define MCIERR_SEQ_PORT_INUSE           (MCIERR_BASE + 81)\n#define MCIERR_SEQ_PORT_NONEXISTENT     (MCIERR_BASE + 82)\n#define MCIERR_SEQ_PORT_MAPNODEVICE     (MCIERR_BASE + 83)\n#define MCIERR_SEQ_PORT_MISCERROR       (MCIERR_BASE + 84)\n#define MCIERR_SEQ_TIMER                (MCIERR_BASE + 85)\n#define MCIERR_SEQ_PORTUNSPECIFIED      (MCIERR_BASE + 86)\n#define MCIERR_SEQ_NOMIDIPRESENT        (MCIERR_BASE + 87)\n\n#define MCIERR_NO_WINDOW                (MCIERR_BASE + 90)\n#define MCIERR_CREATEWINDOW             (MCIERR_BASE + 91)\n#define MCIERR_FILE_READ                (MCIERR_BASE + 92)\n#define MCIERR_FILE_WRITE               (MCIERR_BASE + 93)\n\n#define MCIERR_NO_IDENTITY\t\t(MCIERR_BASE + 94)\n\n#define MCIERR_CUSTOM_DRIVER_BASE       (MCIERR_BASE + 256)\n\n#define MCI_OPEN_DRIVER\t\t\t0x0801\n#define MCI_CLOSE_DRIVER\t\t0x0802\n#define MCI_OPEN\t\t\t0x0803\n#define MCI_CLOSE\t\t\t0x0804\n#define MCI_ESCAPE                      0x0805\n#define MCI_PLAY                        0x0806\n#define MCI_SEEK                        0x0807\n#define MCI_STOP                        0x0808\n#define MCI_PAUSE                       0x0809\n#define MCI_INFO                        0x080A\n#define MCI_GETDEVCAPS                  0x080B\n#define MCI_SPIN                        0x080C\n#define MCI_SET                         0x080D\n#define MCI_STEP                        0x080E\n#define MCI_RECORD                      0x080F\n#define MCI_SYSINFO                     0x0810\n#define MCI_BREAK                       0x0811\n#define MCI_SOUND                       0x0812\n#define MCI_SAVE                        0x0813\n#define MCI_STATUS                      0x0814\n#define MCI_CUE                         0x0830\n#define MCI_REALIZE                     0x0840\n#define MCI_WINDOW                      0x0841\n#define MCI_PUT                         0x0842\n#define MCI_WHERE                       0x0843\n#define MCI_FREEZE                      0x0844\n#define MCI_UNFREEZE                    0x0845\n#define MCI_LOAD                        0x0850\n#define MCI_CUT                         0x0851\n#define MCI_COPY                        0x0852\n#define MCI_PASTE                       0x0853\n#define MCI_UPDATE                      0x0854\n#define MCI_RESUME                      0x0855\n#define MCI_DELETE                      0x0856\n\n#define MCI_USER_MESSAGES               (0x400 + DRV_MCI_FIRST)\n\n#define MCI_ALL_DEVICE_ID               0xFFFFFFFF\n\n#define MCI_DEVTYPE_VCR                 (MCI_STRING_OFFSET + 1)\n#define MCI_DEVTYPE_VIDEODISC           (MCI_STRING_OFFSET + 2)\n#define MCI_DEVTYPE_OVERLAY             (MCI_STRING_OFFSET + 3)\n#define MCI_DEVTYPE_CD_AUDIO            (MCI_STRING_OFFSET + 4)\n#define MCI_DEVTYPE_DAT                 (MCI_STRING_OFFSET + 5)\n#define MCI_DEVTYPE_SCANNER             (MCI_STRING_OFFSET + 6)\n#define MCI_DEVTYPE_ANIMATION           (MCI_STRING_OFFSET + 7)\n#define MCI_DEVTYPE_DIGITAL_VIDEO       (MCI_STRING_OFFSET + 8)\n#define MCI_DEVTYPE_OTHER               (MCI_STRING_OFFSET + 9)\n#define MCI_DEVTYPE_WAVEFORM_AUDIO      (MCI_STRING_OFFSET + 10)\n#define MCI_DEVTYPE_SEQUENCER           (MCI_STRING_OFFSET + 11)\n\n#define MCI_DEVTYPE_FIRST               MCI_DEVTYPE_VCR\n#define MCI_DEVTYPE_LAST                MCI_DEVTYPE_SEQUENCER\n\n#define MCI_MODE_NOT_READY              (MCI_STRING_OFFSET + 12)\n#define MCI_MODE_STOP                   (MCI_STRING_OFFSET + 13)\n#define MCI_MODE_PLAY                   (MCI_STRING_OFFSET + 14)\n#define MCI_MODE_RECORD                 (MCI_STRING_OFFSET + 15)\n#define MCI_MODE_SEEK                   (MCI_STRING_OFFSET + 16)\n#define MCI_MODE_PAUSE                  (MCI_STRING_OFFSET + 17)\n#define MCI_MODE_OPEN                   (MCI_STRING_OFFSET + 18)\n\n#define MCI_FORMAT_MILLISECONDS         0\n#define MCI_FORMAT_HMS                  1\n#define MCI_FORMAT_MSF                  2\n#define MCI_FORMAT_FRAMES               3\n#define MCI_FORMAT_SMPTE_24             4\n#define MCI_FORMAT_SMPTE_25             5\n#define MCI_FORMAT_SMPTE_30             6\n#define MCI_FORMAT_SMPTE_30DROP         7\n#define MCI_FORMAT_BYTES                8\n#define MCI_FORMAT_SAMPLES              9\n#define MCI_FORMAT_TMSF                 10\n\n#define MCI_MSF_MINUTE(msf)             ((BYTE)(msf))\n#define MCI_MSF_SECOND(msf)             ((BYTE)(((WORD)(msf)) >> 8))\n#define MCI_MSF_FRAME(msf)              ((BYTE)((msf)>>16))\n\n#define MCI_MAKE_MSF(m, s, f)           ((DWORD)(((BYTE)(m) | \\\n                                                  ((WORD)(s)<<8)) | \\\n                                                 (((DWORD)(BYTE)(f))<<16)))\n\n#define MCI_TMSF_TRACK(tmsf)            ((BYTE)(tmsf))\n#define MCI_TMSF_MINUTE(tmsf)           ((BYTE)(((WORD)(tmsf)) >> 8))\n#define MCI_TMSF_SECOND(tmsf)           ((BYTE)((tmsf)>>16))\n#define MCI_TMSF_FRAME(tmsf)            ((BYTE)((tmsf)>>24))\n\n#define MCI_MAKE_TMSF(t, m, s, f)       ((DWORD)(((BYTE)(t) | \\\n                                                  ((WORD)(m)<<8)) | \\\n                                                 (((DWORD)(BYTE)(s) | \\\n                                                   ((WORD)(f)<<8))<<16)))\n\n#define MCI_HMS_HOUR(hms)               ((BYTE)(hms))\n#define MCI_HMS_MINUTE(hms)             ((BYTE)(((WORD)(hms)) >> 8))\n#define MCI_HMS_SECOND(hms)             ((BYTE)((hms)>>16))\n\n#define MCI_MAKE_HMS(h, m, s)           ((DWORD)(((BYTE)(h) | \\\n                                                  ((WORD)(m)<<8)) | \\\n                                                 (((DWORD)(BYTE)(s))<<16)))\n\n#define MCI_NOTIFY_SUCCESSFUL           0x0001\n#define MCI_NOTIFY_SUPERSEDED           0x0002\n#define MCI_NOTIFY_ABORTED              0x0004\n#define MCI_NOTIFY_FAILURE              0x0008\n\n#define MCI_NOTIFY                      __MSABI_LONG(0x00000001)\n#define MCI_WAIT                        __MSABI_LONG(0x00000002)\n#define MCI_FROM                        __MSABI_LONG(0x00000004)\n#define MCI_TO                          __MSABI_LONG(0x00000008)\n#define MCI_TRACK                       __MSABI_LONG(0x00000010)\n\n#define MCI_OPEN_SHAREABLE              __MSABI_LONG(0x00000100)\n#define MCI_OPEN_ELEMENT                __MSABI_LONG(0x00000200)\n#define MCI_OPEN_ALIAS                  __MSABI_LONG(0x00000400)\n#define MCI_OPEN_ELEMENT_ID             __MSABI_LONG(0x00000800)\n#define MCI_OPEN_TYPE_ID                __MSABI_LONG(0x00001000)\n#define MCI_OPEN_TYPE                   __MSABI_LONG(0x00002000)\n\n#define MCI_SEEK_TO_START               __MSABI_LONG(0x00000100)\n#define MCI_SEEK_TO_END                 __MSABI_LONG(0x00000200)\n\n#define MCI_STATUS_ITEM                 __MSABI_LONG(0x00000100)\n#define MCI_STATUS_START                __MSABI_LONG(0x00000200)\n\n#define MCI_STATUS_LENGTH               __MSABI_LONG(0x00000001)\n#define MCI_STATUS_POSITION             __MSABI_LONG(0x00000002)\n#define MCI_STATUS_NUMBER_OF_TRACKS     __MSABI_LONG(0x00000003)\n#define MCI_STATUS_MODE                 __MSABI_LONG(0x00000004)\n#define MCI_STATUS_MEDIA_PRESENT        __MSABI_LONG(0x00000005)\n#define MCI_STATUS_TIME_FORMAT          __MSABI_LONG(0x00000006)\n#define MCI_STATUS_READY                __MSABI_LONG(0x00000007)\n#define MCI_STATUS_CURRENT_TRACK        __MSABI_LONG(0x00000008)\n\n#define MCI_INFO_PRODUCT                __MSABI_LONG(0x00000100)\n#define MCI_INFO_FILE                   __MSABI_LONG(0x00000200)\n#define MCI_INFO_MEDIA_UPC              __MSABI_LONG(0x00000400)\n#define MCI_INFO_MEDIA_IDENTITY         __MSABI_LONG(0x00000800)\n#define MCI_INFO_NAME                   __MSABI_LONG(0x00001000)\n#define MCI_INFO_COPYRIGHT              __MSABI_LONG(0x00002000)\n\n#define MCI_GETDEVCAPS_ITEM             __MSABI_LONG(0x00000100)\n\n#define MCI_GETDEVCAPS_CAN_RECORD       __MSABI_LONG(0x00000001)\n#define MCI_GETDEVCAPS_HAS_AUDIO        __MSABI_LONG(0x00000002)\n#define MCI_GETDEVCAPS_HAS_VIDEO        __MSABI_LONG(0x00000003)\n#define MCI_GETDEVCAPS_DEVICE_TYPE      __MSABI_LONG(0x00000004)\n#define MCI_GETDEVCAPS_USES_FILES       __MSABI_LONG(0x00000005)\n#define MCI_GETDEVCAPS_COMPOUND_DEVICE  __MSABI_LONG(0x00000006)\n#define MCI_GETDEVCAPS_CAN_EJECT        __MSABI_LONG(0x00000007)\n#define MCI_GETDEVCAPS_CAN_PLAY         __MSABI_LONG(0x00000008)\n#define MCI_GETDEVCAPS_CAN_SAVE         __MSABI_LONG(0x00000009)\n\n#define MCI_SYSINFO_QUANTITY            __MSABI_LONG(0x00000100)\n#define MCI_SYSINFO_OPEN                __MSABI_LONG(0x00000200)\n#define MCI_SYSINFO_NAME                __MSABI_LONG(0x00000400)\n#define MCI_SYSINFO_INSTALLNAME         __MSABI_LONG(0x00000800)\n\n#define MCI_SET_DOOR_OPEN               __MSABI_LONG(0x00000100)\n#define MCI_SET_DOOR_CLOSED             __MSABI_LONG(0x00000200)\n#define MCI_SET_TIME_FORMAT             __MSABI_LONG(0x00000400)\n#define MCI_SET_AUDIO                   __MSABI_LONG(0x00000800)\n#define MCI_SET_VIDEO                   __MSABI_LONG(0x00001000)\n#define MCI_SET_ON                      __MSABI_LONG(0x00002000)\n#define MCI_SET_OFF                     __MSABI_LONG(0x00004000)\n\n#define MCI_SET_AUDIO_ALL               __MSABI_LONG(0x00000000)\n#define MCI_SET_AUDIO_LEFT              __MSABI_LONG(0x00000001)\n#define MCI_SET_AUDIO_RIGHT             __MSABI_LONG(0x00000002)\n\n#define MCI_BREAK_KEY                   __MSABI_LONG(0x00000100)\n#define MCI_BREAK_HWND                  __MSABI_LONG(0x00000200)\n#define MCI_BREAK_OFF                   __MSABI_LONG(0x00000400)\n\n#define MCI_RECORD_INSERT               __MSABI_LONG(0x00000100)\n#define MCI_RECORD_OVERWRITE            __MSABI_LONG(0x00000200)\n\n#define MCI_SOUND_NAME                  __MSABI_LONG(0x00000100)\n\n#define MCI_SAVE_FILE                   __MSABI_LONG(0x00000100)\n\n#define MCI_LOAD_FILE                   __MSABI_LONG(0x00000100)\n\ntypedef struct tagMCI_GENERIC_PARMS {\n       DWORD_PTR dwCallback;\n} MCI_GENERIC_PARMS, *LPMCI_GENERIC_PARMS;\n\ntypedef struct tagMCI_OPEN_PARMSA {\n       DWORD_PTR       dwCallback;\n\tMCIDEVICEID\twDeviceID;\n\tLPCSTR\t\tlpstrDeviceType;\n\tLPCSTR\t\tlpstrElementName;\n\tLPCSTR\t\tlpstrAlias;\n} MCI_OPEN_PARMSA, *LPMCI_OPEN_PARMSA;\n\ntypedef struct tagMCI_OPEN_PARMSW {\n       DWORD_PTR       dwCallback;\n\tMCIDEVICEID\twDeviceID;\n\tLPCWSTR\t\tlpstrDeviceType;\n\tLPCWSTR\t\tlpstrElementName;\n\tLPCWSTR\t\tlpstrAlias;\n} MCI_OPEN_PARMSW, *LPMCI_OPEN_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_OPEN_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_OPEN_PARMS)\n\ntypedef struct tagMCI_PLAY_PARMS{\n       DWORD_PTR dwCallback;\n\tDWORD   dwFrom;\n\tDWORD   dwTo;\n} MCI_PLAY_PARMS, *LPMCI_PLAY_PARMS;\n\ntypedef struct tagMCI_SEEK_PARMS {\n       DWORD_PTR dwCallback;\n\tDWORD   dwTo;\n} MCI_SEEK_PARMS, *LPMCI_SEEK_PARMS;\n\ntypedef struct tagMCI_STATUS_PARMS {\n       DWORD_PTR dwCallback;\n       DWORD_PTR dwReturn;\n\tDWORD   dwItem;\n\tDWORD   dwTrack;\n} MCI_STATUS_PARMS, *LPMCI_STATUS_PARMS;\n\ntypedef struct tagMCI_INFO_PARMSA {\n    DWORD_PTR   dwCallback;\n    LPSTR       lpstrReturn;\n    DWORD       dwRetSize;\n} MCI_INFO_PARMSA, *LPMCI_INFO_PARMSA;\n\ntypedef struct tagMCI_INFO_PARMSW {\n    DWORD_PTR   dwCallback;\n    LPWSTR      lpstrReturn;\n    DWORD       dwRetSize;\n} MCI_INFO_PARMSW, *LPMCI_INFO_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_INFO_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_INFO_PARMS)\n\ntypedef struct tagMCI_GETDEVCAPS_PARMS {\n       DWORD_PTR dwCallback;\n\tDWORD   dwReturn;\n\tDWORD   dwItem;\n} MCI_GETDEVCAPS_PARMS, *LPMCI_GETDEVCAPS_PARMS;\n\ntypedef struct tagMCI_SYSINFO_PARMSA {\n    DWORD_PTR   dwCallback;\n    LPSTR\tlpstrReturn;\n    DWORD\tdwRetSize;\n    DWORD\tdwNumber;\n    UINT\twDeviceType;\n} MCI_SYSINFO_PARMSA, *LPMCI_SYSINFO_PARMSA;\n\ntypedef struct tagMCI_SYSINFO_PARMSW {\n    DWORD_PTR   dwCallback;\n    LPWSTR\tlpstrReturn;\n    DWORD\tdwRetSize;\n    DWORD\tdwNumber;\n    UINT\twDeviceType;\n} MCI_SYSINFO_PARMSW, *LPMCI_SYSINFO_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_SYSINFO_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_SYSINFO_PARMS)\n\ntypedef struct tagMCI_SET_PARMS {\n       DWORD_PTR dwCallback;\n\tDWORD   dwTimeFormat;\n\tDWORD   dwAudio;\n} MCI_SET_PARMS, *LPMCI_SET_PARMS;\n\ntypedef struct tagMCI_BREAK_PARMS {\n       DWORD_PTR dwCallback;\n\tINT\tnVirtKey;\n\tHWND\thwndBreak;\n} MCI_BREAK_PARMS, *LPMCI_BREAK_PARMS;\n\n\ntypedef struct tagMCI_SOUND_PARMSA {\n    DWORD_PTR   dwCallback;\n    LPCSTR      lpstrSoundName;\n} MCI_SOUND_PARMSA, *LPMCI_SOUND_PARMSA;\n\ntypedef struct tagMCI_SOUND_PARMSW {\n    DWORD_PTR   dwCallback;\n    LPCWSTR     lpstrSoundName;\n} MCI_SOUND_PARMSW, *LPMCI_SOUND_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_SOUND_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_SOUND_PARMS)\n\ntypedef struct tagMCI_SAVE_PARMSA {\n    DWORD_PTR dwCallback;\n    LPCSTR  lpfilename;\n} MCI_SAVE_PARMSA, *LPMCI_SAVE_PARMSA;\n\ntypedef struct tagMCI_SAVE_PARMSW {\n    DWORD_PTR dwCallback;\n    LPCWSTR  lpfilename;\n} MCI_SAVE_PARMSW, *LPMCI_SAVE_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_SAVE_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_SAVE_PARMS)\n\ntypedef struct tagMCI_LOAD_PARMSA {\n       DWORD_PTR dwCallback;\n\tLPCSTR\tlpfilename;\n} MCI_LOAD_PARMSA, *LPMCI_LOAD_PARMSA;\n\ntypedef struct tagMCI_LOAD_PARMSW {\n       DWORD_PTR dwCallback;\n\tLPCWSTR\tlpfilename;\n} MCI_LOAD_PARMSW, *LPMCI_LOAD_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_LOAD_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_LOAD_PARMS)\n\ntypedef struct tagMCI_RECORD_PARMS {\n       DWORD_PTR dwCallback;\n\tDWORD   dwFrom;\n\tDWORD   dwTo;\n} MCI_RECORD_PARMS, *LPMCI_RECORD_PARMS;\n\n#define MCI_CDA_STATUS_TYPE_TRACK \t0x00004001\n\n#define MCI_CDA_TRACK_AUDIO\t\t(MCI_CD_OFFSET + 0)\n#define MCI_CDA_TRACK_OTHER\t\t(MCI_CD_OFFSET + 1)\n\n#define MCI_VD_MODE_PARK                (MCI_VD_OFFSET + 1)\n\n#define MCI_VD_MEDIA_CLV                (MCI_VD_OFFSET + 2)\n#define MCI_VD_MEDIA_CAV                (MCI_VD_OFFSET + 3)\n#define MCI_VD_MEDIA_OTHER              (MCI_VD_OFFSET + 4)\n\n#define MCI_VD_FORMAT_TRACK             0x4001\n\n#define MCI_VD_PLAY_REVERSE             __MSABI_LONG(0x00010000)\n#define MCI_VD_PLAY_FAST                __MSABI_LONG(0x00020000)\n#define MCI_VD_PLAY_SPEED               __MSABI_LONG(0x00040000)\n#define MCI_VD_PLAY_SCAN                __MSABI_LONG(0x00080000)\n#define MCI_VD_PLAY_SLOW                __MSABI_LONG(0x00100000)\n\n#define MCI_VD_SEEK_REVERSE             __MSABI_LONG(0x00010000)\n\n#define MCI_VD_STATUS_SPEED             __MSABI_LONG(0x00004002)\n#define MCI_VD_STATUS_FORWARD           __MSABI_LONG(0x00004003)\n#define MCI_VD_STATUS_MEDIA_TYPE        __MSABI_LONG(0x00004004)\n#define MCI_VD_STATUS_SIDE              __MSABI_LONG(0x00004005)\n#define MCI_VD_STATUS_DISC_SIZE         __MSABI_LONG(0x00004006)\n\n#define MCI_VD_GETDEVCAPS_CLV           __MSABI_LONG(0x00010000)\n#define MCI_VD_GETDEVCAPS_CAV           __MSABI_LONG(0x00020000)\n\n#define MCI_VD_SPIN_UP                  __MSABI_LONG(0x00010000)\n#define MCI_VD_SPIN_DOWN                __MSABI_LONG(0x00020000)\n\n#define MCI_VD_GETDEVCAPS_CAN_REVERSE   __MSABI_LONG(0x00004002)\n#define MCI_VD_GETDEVCAPS_FAST_RATE     __MSABI_LONG(0x00004003)\n#define MCI_VD_GETDEVCAPS_SLOW_RATE     __MSABI_LONG(0x00004004)\n#define MCI_VD_GETDEVCAPS_NORMAL_RATE   __MSABI_LONG(0x00004005)\n\n#define MCI_VD_STEP_FRAMES              __MSABI_LONG(0x00010000)\n#define MCI_VD_STEP_REVERSE             __MSABI_LONG(0x00020000)\n\n#define MCI_VD_ESCAPE_STRING            __MSABI_LONG(0x00000100)\n\ntypedef struct tagMCI_VD_PLAY_PARMS {\n       DWORD_PTR dwCallback;\n\tDWORD   dwFrom;\n\tDWORD   dwTo;\n\tDWORD   dwSpeed;\n} MCI_VD_PLAY_PARMS, *LPMCI_VD_PLAY_PARMS;\n\ntypedef struct tagMCI_VD_STEP_PARMS {\n       DWORD_PTR dwCallback;\n\tDWORD   dwFrames;\n} MCI_VD_STEP_PARMS, *LPMCI_VD_STEP_PARMS;\n\ntypedef struct tagMCI_VD_ESCAPE_PARMSA {\n       DWORD_PTR dwCallback;\n\tLPCSTR\tlpstrCommand;\n} MCI_VD_ESCAPE_PARMSA, *LPMCI_VD_ESCAPE_PARMSA;\n\ntypedef struct tagMCI_VD_ESCAPE_PARMSW {\n       DWORD_PTR dwCallback;\n\tLPCWSTR\tlpstrCommand;\n} MCI_VD_ESCAPE_PARMSW, *LPMCI_VD_ESCAPE_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_VD_ESCAPE_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_VD_ESCAPE_PARMS)\n\n#define MCI_WAVE_OPEN_BUFFER            __MSABI_LONG(0x00010000)\n\n#define MCI_WAVE_SET_FORMATTAG          __MSABI_LONG(0x00010000)\n#define MCI_WAVE_SET_CHANNELS           __MSABI_LONG(0x00020000)\n#define MCI_WAVE_SET_SAMPLESPERSEC      __MSABI_LONG(0x00040000)\n#define MCI_WAVE_SET_AVGBYTESPERSEC     __MSABI_LONG(0x00080000)\n#define MCI_WAVE_SET_BLOCKALIGN         __MSABI_LONG(0x00100000)\n#define MCI_WAVE_SET_BITSPERSAMPLE      __MSABI_LONG(0x00200000)\n\n#define MCI_WAVE_INPUT                  __MSABI_LONG(0x00400000)\n#define MCI_WAVE_OUTPUT                 __MSABI_LONG(0x00800000)\n\n#define MCI_WAVE_STATUS_FORMATTAG       __MSABI_LONG(0x00004001)\n#define MCI_WAVE_STATUS_CHANNELS        __MSABI_LONG(0x00004002)\n#define MCI_WAVE_STATUS_SAMPLESPERSEC   __MSABI_LONG(0x00004003)\n#define MCI_WAVE_STATUS_AVGBYTESPERSEC  __MSABI_LONG(0x00004004)\n#define MCI_WAVE_STATUS_BLOCKALIGN      __MSABI_LONG(0x00004005)\n#define MCI_WAVE_STATUS_BITSPERSAMPLE   __MSABI_LONG(0x00004006)\n#define MCI_WAVE_STATUS_LEVEL           __MSABI_LONG(0x00004007)\n\n#define MCI_WAVE_SET_ANYINPUT           __MSABI_LONG(0x04000000)\n#define MCI_WAVE_SET_ANYOUTPUT          __MSABI_LONG(0x08000000)\n\n#define MCI_WAVE_GETDEVCAPS_INPUTS      __MSABI_LONG(0x00004001)\n#define MCI_WAVE_GETDEVCAPS_OUTPUTS     __MSABI_LONG(0x00004002)\n\ntypedef struct tagMCI_WAVE_OPEN_PARMSA {\n       DWORD_PTR       dwCallback;\n\tMCIDEVICEID\twDeviceID;\n\tLPCSTR\t\tlpstrDeviceType;\n\tLPCSTR\t\tlpstrElementName;\n\tLPCSTR\t\tlpstrAlias;\n\tDWORD   \tdwBufferSeconds;\n} MCI_WAVE_OPEN_PARMSA, *LPMCI_WAVE_OPEN_PARMSA;\n\ntypedef struct tagMCI_WAVE_OPEN_PARMSW {\n       DWORD_PTR       dwCallback;\n\tMCIDEVICEID\twDeviceID;\n\tLPCWSTR\t\tlpstrDeviceType;\n\tLPCWSTR\t\tlpstrElementName;\n\tLPCWSTR\t\tlpstrAlias;\n\tDWORD   \tdwBufferSeconds;\n} MCI_WAVE_OPEN_PARMSW, *LPMCI_WAVE_OPEN_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_WAVE_OPEN_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_WAVE_OPEN_PARMS)\n\ntypedef struct tagMCI_WAVE_DELETE_PARMS {\n       DWORD_PTR dwCallback;\n\tDWORD   dwFrom;\n\tDWORD   dwTo;\n} MCI_WAVE_DELETE_PARMS, *LPMCI_WAVE_DELETE_PARMS;\n\ntypedef struct tagMCI_WAVE_SET_PARMS {\n       DWORD_PTR dwCallback;\n\tDWORD\tdwTimeFormat;\n\tDWORD\tdwAudio;\n\tUINT\twInput;\n\tUINT\twOutput;\n\tUINT\twFormatTag;\n\tUINT\tnChannels;\n\tDWORD\tnSamplesPerSec;\n\tDWORD\tnAvgBytesPerSec;\n\tUINT\tnBlockAlign;\n\tUINT\twBitsPerSample;\n} MCI_WAVE_SET_PARMS, * LPMCI_WAVE_SET_PARMS;\n\n\n#define     MCI_SEQ_DIV_PPQN            (0 + MCI_SEQ_OFFSET)\n#define     MCI_SEQ_DIV_SMPTE_24        (1 + MCI_SEQ_OFFSET)\n#define     MCI_SEQ_DIV_SMPTE_25        (2 + MCI_SEQ_OFFSET)\n#define     MCI_SEQ_DIV_SMPTE_30DROP    (3 + MCI_SEQ_OFFSET)\n#define     MCI_SEQ_DIV_SMPTE_30        (4 + MCI_SEQ_OFFSET)\n\n#define     MCI_SEQ_FORMAT_SONGPTR      0x4001\n#define     MCI_SEQ_FILE                0x4002\n#define     MCI_SEQ_MIDI                0x4003\n#define     MCI_SEQ_SMPTE               0x4004\n#define     MCI_SEQ_NONE                65533\n\n#define MCI_SEQ_STATUS_TEMPO            __MSABI_LONG(0x00004002)\n#define MCI_SEQ_STATUS_PORT             __MSABI_LONG(0x00004003)\n#define MCI_SEQ_STATUS_SLAVE            __MSABI_LONG(0x00004007)\n#define MCI_SEQ_STATUS_MASTER           __MSABI_LONG(0x00004008)\n#define MCI_SEQ_STATUS_OFFSET           __MSABI_LONG(0x00004009)\n#define MCI_SEQ_STATUS_DIVTYPE          __MSABI_LONG(0x0000400A)\n\n#define MCI_SEQ_SET_TEMPO               __MSABI_LONG(0x00010000)\n#define MCI_SEQ_SET_PORT                __MSABI_LONG(0x00020000)\n#define MCI_SEQ_SET_SLAVE               __MSABI_LONG(0x00040000)\n#define MCI_SEQ_SET_MASTER              __MSABI_LONG(0x00080000)\n#define MCI_SEQ_SET_OFFSET              __MSABI_LONG(0x01000000)\n\ntypedef struct tagMCI_SEQ_SET_PARMS {\n       DWORD_PTR dwCallback;\n\tDWORD   dwTimeFormat;\n\tDWORD   dwAudio;\n\tDWORD   dwTempo;\n\tDWORD   dwPort;\n\tDWORD   dwSlave;\n\tDWORD   dwMaster;\n\tDWORD   dwOffset;\n} MCI_SEQ_SET_PARMS, *LPMCI_SEQ_SET_PARMS;\n\n#define MCI_ANIM_OPEN_WS                __MSABI_LONG(0x00010000)\n#define MCI_ANIM_OPEN_PARENT            __MSABI_LONG(0x00020000)\n#define MCI_ANIM_OPEN_NOSTATIC          __MSABI_LONG(0x00040000)\n\n#define MCI_ANIM_PLAY_SPEED             __MSABI_LONG(0x00010000)\n#define MCI_ANIM_PLAY_REVERSE           __MSABI_LONG(0x00020000)\n#define MCI_ANIM_PLAY_FAST              __MSABI_LONG(0x00040000)\n#define MCI_ANIM_PLAY_SLOW              __MSABI_LONG(0x00080000)\n#define MCI_ANIM_PLAY_SCAN              __MSABI_LONG(0x00100000)\n\n#define MCI_ANIM_STEP_REVERSE           __MSABI_LONG(0x00010000)\n#define MCI_ANIM_STEP_FRAMES            __MSABI_LONG(0x00020000)\n\n#define MCI_ANIM_STATUS_SPEED           __MSABI_LONG(0x00004001)\n#define MCI_ANIM_STATUS_FORWARD         __MSABI_LONG(0x00004002)\n#define MCI_ANIM_STATUS_HWND            __MSABI_LONG(0x00004003)\n#define MCI_ANIM_STATUS_HPAL            __MSABI_LONG(0x00004004)\n#define MCI_ANIM_STATUS_STRETCH         __MSABI_LONG(0x00004005)\n\n#define MCI_ANIM_INFO_TEXT              __MSABI_LONG(0x00010000)\n\n#define MCI_ANIM_GETDEVCAPS_CAN_REVERSE __MSABI_LONG(0x00004001)\n#define MCI_ANIM_GETDEVCAPS_FAST_RATE   __MSABI_LONG(0x00004002)\n#define MCI_ANIM_GETDEVCAPS_SLOW_RATE   __MSABI_LONG(0x00004003)\n#define MCI_ANIM_GETDEVCAPS_NORMAL_RATE __MSABI_LONG(0x00004004)\n#define MCI_ANIM_GETDEVCAPS_PALETTES    __MSABI_LONG(0x00004006)\n#define MCI_ANIM_GETDEVCAPS_CAN_STRETCH __MSABI_LONG(0x00004007)\n#define MCI_ANIM_GETDEVCAPS_MAX_WINDOWS __MSABI_LONG(0x00004008)\n\n#define MCI_ANIM_REALIZE_NORM           __MSABI_LONG(0x00010000)\n#define MCI_ANIM_REALIZE_BKGD           __MSABI_LONG(0x00020000)\n\n#define MCI_ANIM_WINDOW_HWND            __MSABI_LONG(0x00010000)\n#define MCI_ANIM_WINDOW_STATE           __MSABI_LONG(0x00040000)\n#define MCI_ANIM_WINDOW_TEXT            __MSABI_LONG(0x00080000)\n#define MCI_ANIM_WINDOW_ENABLE_STRETCH  __MSABI_LONG(0x00100000)\n#define MCI_ANIM_WINDOW_DISABLE_STRETCH __MSABI_LONG(0x00200000)\n\n#define MCI_ANIM_WINDOW_DEFAULT         __MSABI_LONG(0x00000000)\n\n#define MCI_ANIM_RECT                   __MSABI_LONG(0x00010000)\n#define MCI_ANIM_PUT_SOURCE             __MSABI_LONG(0x00020000)\n#define MCI_ANIM_PUT_DESTINATION        __MSABI_LONG(0x00040000)\n\n#define MCI_ANIM_WHERE_SOURCE           __MSABI_LONG(0x00020000)\n#define MCI_ANIM_WHERE_DESTINATION      __MSABI_LONG(0x00040000)\n\n#define MCI_ANIM_UPDATE_HDC             __MSABI_LONG(0x00020000)\n\ntypedef struct tagMCI_ANIM_OPEN_PARMSA {\n       DWORD_PTR       dwCallback;\n\tMCIDEVICEID\twDeviceID;\n\tLPCSTR\t\tlpstrDeviceType;\n\tLPCSTR\t\tlpstrElementName;\n\tLPCSTR\t\tlpstrAlias;\n\tDWORD\t\tdwStyle;\n\tHWND\t\thWndParent;\n} MCI_ANIM_OPEN_PARMSA, *LPMCI_ANIM_OPEN_PARMSA;\n\ntypedef struct tagMCI_ANIM_OPEN_PARMSW {\n       DWORD_PTR       dwCallback;\n\tMCIDEVICEID\twDeviceID;\n\tLPCWSTR\t\tlpstrDeviceType;\n\tLPCWSTR\t\tlpstrElementName;\n\tLPCWSTR\t\tlpstrAlias;\n\tDWORD\t\tdwStyle;\n\tHWND\t\thWndParent;\n} MCI_ANIM_OPEN_PARMSW, *LPMCI_ANIM_OPEN_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_ANIM_OPEN_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_ANIM_OPEN_PARMS)\n\ntypedef struct tagMCI_ANIM_PLAY_PARMS {\n       DWORD_PTR dwCallback;\n\tDWORD   dwFrom;\n\tDWORD   dwTo;\n\tDWORD   dwSpeed;\n} MCI_ANIM_PLAY_PARMS, *LPMCI_ANIM_PLAY_PARMS;\n\ntypedef struct tagMCI_ANIM_STEP_PARMS {\n       DWORD_PTR dwCallback;\n\tDWORD   dwFrames;\n} MCI_ANIM_STEP_PARMS, *LPMCI_ANIM_STEP_PARMS;\n\ntypedef struct tagMCI_ANIM_WINDOW_PARMSA {\n       DWORD_PTR dwCallback;\n\tHWND\thWnd;\n\tUINT\tnCmdShow;\n\tLPCSTR\tlpstrText;\n} MCI_ANIM_WINDOW_PARMSA, *LPMCI_ANIM_WINDOW_PARMSA;\n\ntypedef struct tagMCI_ANIM_WINDOW_PARMSW {\n       DWORD_PTR dwCallback;\n\tHWND\thWnd;\n\tUINT\tnCmdShow;\n\tLPCWSTR\tlpstrText;\n} MCI_ANIM_WINDOW_PARMSW, *LPMCI_ANIM_WINDOW_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_ANIM_WINDOW_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_ANIM_WINDOW_PARMS)\n\ntypedef struct tagMCI_ANIM_RECT_PARMS {\n       DWORD_PTR dwCallback;\n#ifdef MCI_USE_OFFEXT\n\tPOINT\tptOffset;\n\tPOINT\tptExtent;\n#else   /* ifdef MCI_USE_OFFEXT */\n\tRECT\trc;\n#endif  /* ifdef MCI_USE_OFFEXT */\n} MCI_ANIM_RECT_PARMS, *LPMCI_ANIM_RECT_PARMS;\n\n\ntypedef struct tagMCI_ANIM_UPDATE_PARMS {\n       DWORD_PTR dwCallback;\n\tRECT  rc;\n\tHDC   hDC;\n} MCI_ANIM_UPDATE_PARMS, *LPMCI_ANIM_UPDATE_PARMS;\n\n\n#define MCI_OVLY_OPEN_WS                __MSABI_LONG(0x00010000)\n#define MCI_OVLY_OPEN_PARENT            __MSABI_LONG(0x00020000)\n\n#define MCI_OVLY_STATUS_HWND            __MSABI_LONG(0x00004001)\n#define MCI_OVLY_STATUS_STRETCH         __MSABI_LONG(0x00004002)\n\n#define MCI_OVLY_INFO_TEXT              __MSABI_LONG(0x00010000)\n\n#define MCI_OVLY_GETDEVCAPS_CAN_STRETCH __MSABI_LONG(0x00004001)\n#define MCI_OVLY_GETDEVCAPS_CAN_FREEZE  __MSABI_LONG(0x00004002)\n#define MCI_OVLY_GETDEVCAPS_MAX_WINDOWS __MSABI_LONG(0x00004003)\n\n#define MCI_OVLY_WINDOW_HWND            __MSABI_LONG(0x00010000)\n#define MCI_OVLY_WINDOW_STATE           __MSABI_LONG(0x00040000)\n#define MCI_OVLY_WINDOW_TEXT            __MSABI_LONG(0x00080000)\n#define MCI_OVLY_WINDOW_ENABLE_STRETCH  __MSABI_LONG(0x00100000)\n#define MCI_OVLY_WINDOW_DISABLE_STRETCH __MSABI_LONG(0x00200000)\n\n#define MCI_OVLY_WINDOW_DEFAULT         __MSABI_LONG(0x00000000)\n\n#define MCI_OVLY_RECT                   __MSABI_LONG(0x00010000)\n#define MCI_OVLY_PUT_SOURCE             __MSABI_LONG(0x00020000)\n#define MCI_OVLY_PUT_DESTINATION        __MSABI_LONG(0x00040000)\n#define MCI_OVLY_PUT_FRAME              __MSABI_LONG(0x00080000)\n#define MCI_OVLY_PUT_VIDEO              __MSABI_LONG(0x00100000)\n\n#define MCI_OVLY_WHERE_SOURCE           __MSABI_LONG(0x00020000)\n#define MCI_OVLY_WHERE_DESTINATION      __MSABI_LONG(0x00040000)\n#define MCI_OVLY_WHERE_FRAME            __MSABI_LONG(0x00080000)\n#define MCI_OVLY_WHERE_VIDEO            __MSABI_LONG(0x00100000)\n\ntypedef struct tagMCI_OVLY_OPEN_PARMSA {\n       DWORD_PTR       dwCallback;\n\tMCIDEVICEID\twDeviceID;\n\tLPCSTR\t\tlpstrDeviceType;\n\tLPCSTR\t\tlpstrElementName;\n\tLPCSTR\t\tlpstrAlias;\n\tDWORD\t\tdwStyle;\n\tHWND\t\thWndParent;\n} MCI_OVLY_OPEN_PARMSA, *LPMCI_OVLY_OPEN_PARMSA;\n\ntypedef struct tagMCI_OVLY_OPEN_PARMSW {\n       DWORD_PTR       dwCallback;\n\tMCIDEVICEID\twDeviceID;\n\tLPCWSTR\t\tlpstrDeviceType;\n\tLPCWSTR\t\tlpstrElementName;\n\tLPCWSTR\t\tlpstrAlias;\n\tDWORD\t\tdwStyle;\n\tHWND\t\thWndParent;\n} MCI_OVLY_OPEN_PARMSW, *LPMCI_OVLY_OPEN_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_OVLY_OPEN_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_OVLY_OPEN_PARMS)\n\ntypedef struct tagMCI_OVLY_WINDOW_PARMSA {\n       DWORD_PTR dwCallback;\n\tHWND\thWnd;\n\tUINT\tnCmdShow;\n\tLPCSTR\tlpstrText;\n} MCI_OVLY_WINDOW_PARMSA, *LPMCI_OVLY_WINDOW_PARMSA;\n\ntypedef struct tagMCI_OVLY_WINDOW_PARMSW {\n       DWORD_PTR dwCallback;\n\tHWND\thWnd;\n\tUINT\tnCmdShow;\n\tLPCWSTR\tlpstrText;\n} MCI_OVLY_WINDOW_PARMSW, *LPMCI_OVLY_WINDOW_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_OVLY_WINDOW_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_OVLY_WINDOW_PARMS)\n\ntypedef struct tagMCI_OVLY_RECT_PARMS {\n       DWORD_PTR dwCallback;\n#ifdef MCI_USE_OFFEXT\n\tPOINT ptOffset;\n\tPOINT ptExtent;\n#else   /* ifdef MCI_USE_OFFEXT */\n\tRECT  rc;\n#endif  /* ifdef MCI_USE_OFFEXT */\n} MCI_OVLY_RECT_PARMS, *LPMCI_OVLY_RECT_PARMS;\n\n\ntypedef struct tagMCI_OVLY_SAVE_PARMSA {\n       DWORD_PTR dwCallback;\n\tLPCSTR  lpfilename;\n\tRECT  rc;\n} MCI_OVLY_SAVE_PARMSA, *LPMCI_OVLY_SAVE_PARMSA;\n\ntypedef struct tagMCI_OVLY_SAVE_PARMSW {\n       DWORD_PTR dwCallback;\n\tLPCWSTR  lpfilename;\n\tRECT  rc;\n} MCI_OVLY_SAVE_PARMSW, *LPMCI_OVLY_SAVE_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_OVLY_SAVE_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_OVLY_SAVE_PARMS)\n\ntypedef struct tagMCI_OVLY_LOAD_PARMSA {\n       DWORD_PTR dwCallback;\n\tLPCSTR\tlpfilename;\n\tRECT\trc;\n} MCI_OVLY_LOAD_PARMSA, *LPMCI_OVLY_LOAD_PARMSA;\n\ntypedef struct tagMCI_OVLY_LOAD_PARMSW {\n       DWORD_PTR dwCallback;\n\tLPCWSTR\tlpfilename;\n\tRECT\trc;\n} MCI_OVLY_LOAD_PARMSW, *LPMCI_OVLY_LOAD_PARMSW;\n\nDECL_WINELIB_TYPE_AW(MCI_OVLY_LOAD_PARMS)\nDECL_WINELIB_TYPE_AW(LPMCI_OVLY_LOAD_PARMS)\n\n#ifndef NEWTRANSPARENT\n#define NEWTRANSPARENT 3\n#define QUERYROPSUPPORT 40\n#endif\n\n#define SELECTDIB 41\n#define DIBINDEX(n) MAKELONG((n),0x10FF)\n\n#ifndef SC_SCREENSAVE\n#define SC_SCREENSAVE 0xf140\n#endif\n\n#include <poppack.h>\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_MMSYSTEM_H */\n"
  },
  {
    "path": "wine/windows/mprapi.h",
    "content": "/*\n * Copyright (C) 2006 Dmitry Timoshkov\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_MPRAPI_H\n#define __WINE_MPRAPI_H\n\n#include <lmcons.h>\n#include <ras.h>\n#include <in6addr.h>\n#include <wincrypt.h>\n\n#define MAX_DEVICE_NAME                 128\n#define MAX_DEVICETYPE_NAME              16\n#define MAX_INTERFACE_NAME_LEN          256\n#define MAX_MEDIA_NAME                   16\n#define MAX_PHONE_NUMBER_LEN            128\n#define MAX_PORT_NAME                    16\n#define MAX_TRANSPORT_NAME_LEN           40\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nBOOL APIENTRY MprAdminIsServiceRunning(LPWSTR);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_MPRAPI_H */\n"
  },
  {
    "path": "wine/windows/mprerror.h",
    "content": "/*\n * This file has no copyright assigned and is placed in the Public Domain.\n * This file is part of the w64 mingw-runtime package.\n * No warranty is given:\n * The w64 mingw-runtime package and its code is distributed in the hope that it\n * will be useful but WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESSED OR\n * IMPLIED ARE HEREBY DISCLAIMED. This includes but is not limited to\n * warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n */\n\n#ifndef _MPRERROR_H_\n#define _MPRERROR_H_\n\n#define ROUTEBASE 900\n#define SUCCESS 0\n\n#define ERROR_ROUTER_STOPPED (ROUTEBASE+0)\n#define ERROR_ALREADY_CONNECTED (ROUTEBASE+1)\n#define ERROR_UNKNOWN_PROTOCOL_ID (ROUTEBASE+2)\n#define ERROR_DDM_NOT_RUNNING (ROUTEBASE+3)\n#define ERROR_INTERFACE_ALREADY_EXISTS (ROUTEBASE+4)\n#define ERROR_NO_SUCH_INTERFACE (ROUTEBASE+5)\n#define ERROR_INTERFACE_NOT_CONNECTED (ROUTEBASE+6)\n#define ERROR_PROTOCOL_STOP_PENDING (ROUTEBASE+7)\n#define ERROR_INTERFACE_CONNECTED (ROUTEBASE+8)\n#define ERROR_NO_INTERFACE_CREDENTIALS_SET (ROUTEBASE+9)\n#define ERROR_ALREADY_CONNECTING (ROUTEBASE+10)\n#define ERROR_UPDATE_IN_PROGRESS (ROUTEBASE+11)\n#define ERROR_INTERFACE_CONFIGURATION (ROUTEBASE+12)\n#define ERROR_NOT_CLIENT_PORT (ROUTEBASE+13)\n#define ERROR_NOT_ROUTER_PORT (ROUTEBASE+14)\n#define ERROR_CLIENT_INTERFACE_ALREADY_EXISTS (ROUTEBASE+15)\n#define ERROR_INTERFACE_DISABLED (ROUTEBASE+16)\n#define ERROR_AUTH_PROTOCOL_REJECTED (ROUTEBASE+17)\n#define ERROR_NO_AUTH_PROTOCOL_AVAILABLE (ROUTEBASE+18)\n#define ERROR_PEER_REFUSED_AUTH (ROUTEBASE+19)\n#define ERROR_REMOTE_NO_DIALIN_PERMISSION (ROUTEBASE+20)\n#define ERROR_REMOTE_PASSWD_EXPIRED (ROUTEBASE+21)\n#define ERROR_REMOTE_ACCT_DISABLED (ROUTEBASE+22)\n#define ERROR_REMOTE_RESTRICTED_LOGON_HOURS (ROUTEBASE+23)\n#define ERROR_REMOTE_AUTHENTICATION_FAILURE (ROUTEBASE+24)\n#define ERROR_INTERFACE_HAS_NO_DEVICES (ROUTEBASE+25)\n#define ERROR_IDLE_DISCONNECTED (ROUTEBASE+26)\n#define ERROR_INTERFACE_UNREACHABLE (ROUTEBASE+27)\n#define ERROR_SERVICE_IS_PAUSED (ROUTEBASE+28)\n#define ERROR_INTERFACE_DISCONNECTED (ROUTEBASE+29)\n#define ERROR_AUTH_SERVER_TIMEOUT (ROUTEBASE+30)\n#define ERROR_PORT_LIMIT_REACHED (ROUTEBASE+31)\n#define ERROR_PPP_SESSION_TIMEOUT (ROUTEBASE+32)\n#define ERROR_MAX_LAN_INTERFACE_LIMIT (ROUTEBASE+33)\n#define ERROR_MAX_WAN_INTERFACE_LIMIT (ROUTEBASE+34)\n#define ERROR_MAX_CLIENT_INTERFACE_LIMIT (ROUTEBASE+35)\n#define ERROR_BAP_DISCONNECTED (ROUTEBASE+36)\n#define ERROR_USER_LIMIT (ROUTEBASE+37)\n#define ERROR_NO_RADIUS_SERVERS (ROUTEBASE+38)\n#define ERROR_INVALID_RADIUS_RESPONSE (ROUTEBASE+39)\n#define ERROR_DIALIN_HOURS_RESTRICTION (ROUTEBASE+40)\n#define ERROR_ALLOWED_PORT_TYPE_RESTRICTION (ROUTEBASE+41)\n#define ERROR_AUTH_PROTOCOL_RESTRICTION (ROUTEBASE+42)\n#define ERROR_BAP_REQUIRED (ROUTEBASE+43)\n#define ERROR_DIALOUT_HOURS_RESTRICTION (ROUTEBASE+44)\n#define ERROR_ROUTER_CONFIG_INCOMPATIBLE (ROUTEBASE+45)\n#define WARNING_NO_MD5_MIGRATION (ROUTEBASE+46)\n#define ERROR_PROTOCOL_ALREADY_INSTALLED (ROUTEBASE+48)\n#define ERROR_INVALID_SIGNATURE_LENGTH (ROUTEBASE+49)\n#define ERROR_INVALID_SIGNATURE (ROUTEBASE+50)\n#define ERROR_NO_SIGNATURE (ROUTEBASE+51)\n#define ERROR_INVALID_PACKET_LENGTH_OR_ID (ROUTEBASE+52)\n#define ERROR_INVALID_ATTRIBUTE_LENGTH (ROUTEBASE+53)\n#define ERROR_INVALID_PACKET (ROUTEBASE+54)\n#define ERROR_AUTHENTICATOR_MISMATCH (ROUTEBASE+55)\n#define ROUTEBASEEND (ROUTEBASE+56)\n\n#endif\n"
  },
  {
    "path": "wine/windows/msacm.h",
    "content": "/*\n * Declarations for MSACM\n *\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_MSACM_H\n#define __WINE_MSACM_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n#include <pshpack1.h>\n\n#define ACMAPI              WINAPI\n\n/***********************************************************************\n * Defines/Enums\n */\n#define ACMERR_BASE        512\n#define ACMERR_NOTPOSSIBLE (ACMERR_BASE + 0)\n#define ACMERR_BUSY        (ACMERR_BASE + 1)\n#define ACMERR_UNPREPARED  (ACMERR_BASE + 2)\n#define ACMERR_CANCELED    (ACMERR_BASE + 3)\n\n#define MM_ACM_OPEN  MM_STREAM_OPEN\n#define MM_ACM_CLOSE MM_STREAM_CLOSE\n#define MM_ACM_DONE  MM_STREAM_DONE\n\n#define ACM_DRIVERADDF_NAME       __MSABI_LONG(0x00000001)\n#define ACM_DRIVERADDF_FUNCTION   __MSABI_LONG(0x00000003)\n#define ACM_DRIVERADDF_NOTIFYHWND __MSABI_LONG(0x00000004)\n#define ACM_DRIVERADDF_TYPEMASK   __MSABI_LONG(0x00000007)\n#define ACM_DRIVERADDF_LOCAL      __MSABI_LONG(0x00000000)\n#define ACM_DRIVERADDF_GLOBAL     __MSABI_LONG(0x00000008)\n\n#define ACMDRIVERDETAILS_SHORTNAME_CHARS  32\n#define ACMDRIVERDETAILS_LONGNAME_CHARS  128\n#define ACMDRIVERDETAILS_COPYRIGHT_CHARS  80\n#define ACMDRIVERDETAILS_LICENSING_CHARS 128\n#define ACMDRIVERDETAILS_FEATURES_CHARS  512\n\n#define ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC mmioFOURCC('a', 'u', 'd', 'c')\n#define ACMDRIVERDETAILS_FCCCOMP_UNDEFINED  mmioFOURCC('\\0', '\\0', '\\0', '\\0')\n\n#define ACMDRIVERDETAILS_SUPPORTF_CODEC     __MSABI_LONG(0x00000001)\n#define ACMDRIVERDETAILS_SUPPORTF_CONVERTER __MSABI_LONG(0x00000002)\n#define ACMDRIVERDETAILS_SUPPORTF_FILTER    __MSABI_LONG(0x00000004)\n#define ACMDRIVERDETAILS_SUPPORTF_HARDWARE  __MSABI_LONG(0x00000008)\n#define ACMDRIVERDETAILS_SUPPORTF_ASYNC     __MSABI_LONG(0x00000010)\n#define ACMDRIVERDETAILS_SUPPORTF_LOCAL     __MSABI_LONG(0x40000000)\n#define ACMDRIVERDETAILS_SUPPORTF_DISABLED  __MSABI_LONG(0x80000000)\n\n#define ACM_DRIVERENUMF_NOLOCAL  __MSABI_LONG(0x40000000)\n#define ACM_DRIVERENUMF_DISABLED __MSABI_LONG(0x80000000)\n\n#define ACM_DRIVERPRIORITYF_ENABLE    __MSABI_LONG(0x00000001)\n#define ACM_DRIVERPRIORITYF_DISABLE   __MSABI_LONG(0x00000002)\n#define ACM_DRIVERPRIORITYF_ABLEMASK  __MSABI_LONG(0x00000003)\n#define ACM_DRIVERPRIORITYF_BEGIN     __MSABI_LONG(0x00010000)\n#define ACM_DRIVERPRIORITYF_END       __MSABI_LONG(0x00020000)\n#define ACM_DRIVERPRIORITYF_DEFERMASK __MSABI_LONG(0x00030000)\n\n#define MM_ACM_FILTERCHOOSE 0x8000\n\n#define FILTERCHOOSE_MESSAGE          0\n#define FILTERCHOOSE_FILTERTAG_VERIFY (FILTERCHOOSE_MESSAGE+0)\n#define FILTERCHOOSE_FILTER_VERIFY    (FILTERCHOOSE_MESSAGE+1)\n#define FILTERCHOOSE_CUSTOM_VERIFY    (FILTERCHOOSE_MESSAGE+2)\n\n#define ACMFILTERCHOOSE_STYLEF_SHOWHELP             __MSABI_LONG(0x00000004)\n#define ACMFILTERCHOOSE_STYLEF_ENABLEHOOK           __MSABI_LONG(0x00000008)\n#define ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATE       __MSABI_LONG(0x00000010)\n#define ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATEHANDLE __MSABI_LONG(0x00000020)\n#define ACMFILTERCHOOSE_STYLEF_INITTOFILTERSTRUCT   __MSABI_LONG(0x00000040)\n#define ACMFILTERCHOOSE_STYLEF_CONTEXTHELP          __MSABI_LONG(0x00000080)\n\n#define ACMFILTERDETAILS_FILTER_CHARS 128\n\n#define ACM_FILTERDETAILSF_INDEX     __MSABI_LONG(0x00000000)\n#define ACM_FILTERDETAILSF_FILTER    __MSABI_LONG(0x00000001)\n#define ACM_FILTERDETAILSF_QUERYMASK __MSABI_LONG(0x0000000F)\n\n#define ACMFILTERTAGDETAILS_FILTERTAG_CHARS 48\n\n#define ACM_FILTERTAGDETAILSF_INDEX       __MSABI_LONG(0x00000000)\n#define ACM_FILTERTAGDETAILSF_FILTERTAG   __MSABI_LONG(0x00000001)\n#define ACM_FILTERTAGDETAILSF_LARGESTSIZE __MSABI_LONG(0x00000002)\n#define ACM_FILTERTAGDETAILSF_QUERYMASK   __MSABI_LONG(0x0000000F)\n\n#define ACM_FILTERENUMF_DWFILTERTAG __MSABI_LONG(0x00010000)\n\n#define ACMHELPMSGSTRINGA       \"acmchoose_help\"\n#if defined(__GNUC__)\n# define ACMHELPMSGSTRINGW (const WCHAR []){ 'a','c','m', \\\n  'c','h','o','o','s','e','_','h','e','l','p',0 }\n#elif defined(_MSC_VER)\n# define ACMHELPMSGSTRINGW      L\"acmchoose_help\"\n#else\nstatic const WCHAR ACMHELPMSGSTRINGW[] = { 'a','c','m',\n  'c','h','o','o','s','e','_','h','e','l','p',0 };\n#endif\n#define ACMHELPMSGSTRING WINELIB_NAME_AW(ACMHELPMSGSTRING)\n\n#define ACMHELPMSGCONTEXTMENUA  \"acmchoose_contextmenu\"\n#if defined(__GNUC__)\n# define ACMHELPMSGCONTEXTMENUW (const WCHAR []){ 'a','c','m', \\\n  'c','h','o','o','s','e','_','c','o','n','t','e','x','t','m','e','n','u',0 }\n#elif defined(_MSC_VER)\n# define ACMHELPMSGCONTEXTMENUW L\"acmchoose_contextmenu\"\n#else\nstatic const WCHAR ACMHELPMSGCONTEXTMENUW[] = { 'a','c','m',\n  'c','h','o','o','s','e','_','c','o','n','t','e','x','t','m','e','n','u',0 };\n#endif\n#define ACMHELPMSGCONTEXTMENU WINELIB_NAME_AW(ACMHELPMSGCONTEXTMENU)\n\n#define ACMHELPMSGCONTEXTHELPA  \"acmchoose_contexthelp\"\n#if defined(__GNUC__)\n# define ACMHELPMSGCONTEXTHELPW (const WCHAR []){ 'a','c','m', \\\n  'c','h','o','o','s','e','_','c','o','n','t','e','x','t','h','e','l','p',0 }\n#elif defined(_MSC_VER)\n# define ACMHELPMSGCONTEXTHELPW L\"acmchoose_contexthelp\"\n#else\nstatic const WCHAR ACMHELPMSGCONTEXTHELPW[] = { 'a','c','m',\n  'c','h','o','o','s','e','_','c','o','n','t','e','x','t','h','e','l','p',0 };\n#endif\n#define ACMHELPMSGCONTEXTHELP WINELIB_NAME_AW(ACMHELPMSGCONTEXTHELP)\n\n#define MM_ACM_FORMATCHOOSE 0x8000\n\n#define FORMATCHOOSE_MESSAGE          0\n#define FORMATCHOOSE_FORMATTAG_VERIFY (FORMATCHOOSE_MESSAGE+0)\n#define FORMATCHOOSE_FORMAT_VERIFY    (FORMATCHOOSE_MESSAGE+1)\n#define FORMATCHOOSE_CUSTOM_VERIFY    (FORMATCHOOSE_MESSAGE+2)\n\n#define ACMFORMATCHOOSE_STYLEF_SHOWHELP             __MSABI_LONG(0x00000004)\n#define ACMFORMATCHOOSE_STYLEF_ENABLEHOOK           __MSABI_LONG(0x00000008)\n#define ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATE       __MSABI_LONG(0x00000010)\n#define ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE __MSABI_LONG(0x00000020)\n#define ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT      __MSABI_LONG(0x00000040)\n#define ACMFORMATCHOOSE_STYLEF_CONTEXTHELP          __MSABI_LONG(0x00000080)\n\n#define ACMFORMATDETAILS_FORMAT_CHARS   128\n\n#define ACM_FORMATDETAILSF_INDEX     __MSABI_LONG(0x00000000)\n#define ACM_FORMATDETAILSF_FORMAT    __MSABI_LONG(0x00000001)\n#define ACM_FORMATDETAILSF_QUERYMASK __MSABI_LONG(0x0000000F)\n\n#define ACM_FORMATENUMF_WFORMATTAG     __MSABI_LONG(0x00010000)\n#define ACM_FORMATENUMF_NCHANNELS      __MSABI_LONG(0x00020000)\n#define ACM_FORMATENUMF_NSAMPLESPERSEC __MSABI_LONG(0x00040000)\n#define ACM_FORMATENUMF_WBITSPERSAMPLE __MSABI_LONG(0x00080000)\n#define ACM_FORMATENUMF_CONVERT        __MSABI_LONG(0x00100000)\n#define ACM_FORMATENUMF_SUGGEST        __MSABI_LONG(0x00200000)\n#define ACM_FORMATENUMF_HARDWARE       __MSABI_LONG(0x00400000)\n#define ACM_FORMATENUMF_INPUT          __MSABI_LONG(0x00800000)\n#define ACM_FORMATENUMF_OUTPUT         __MSABI_LONG(0x01000000)\n\n#define ACM_FORMATSUGGESTF_WFORMATTAG     __MSABI_LONG(0x00010000)\n#define ACM_FORMATSUGGESTF_NCHANNELS      __MSABI_LONG(0x00020000)\n#define ACM_FORMATSUGGESTF_NSAMPLESPERSEC __MSABI_LONG(0x00040000)\n#define ACM_FORMATSUGGESTF_WBITSPERSAMPLE __MSABI_LONG(0x00080000)\n#define ACM_FORMATSUGGESTF_TYPEMASK       __MSABI_LONG(0x00FF0000)\n\n#define ACMFORMATTAGDETAILS_FORMATTAG_CHARS 48\n\n#define ACM_FORMATTAGDETAILSF_INDEX       __MSABI_LONG(0x00000000)\n#define ACM_FORMATTAGDETAILSF_FORMATTAG   __MSABI_LONG(0x00000001)\n#define ACM_FORMATTAGDETAILSF_LARGESTSIZE __MSABI_LONG(0x00000002)\n#define ACM_FORMATTAGDETAILSF_QUERYMASK   __MSABI_LONG(0x0000000F)\n\n#define ACM_METRIC_COUNT_DRIVERS            1\n#define ACM_METRIC_COUNT_CODECS             2\n#define ACM_METRIC_COUNT_CONVERTERS         3\n#define ACM_METRIC_COUNT_FILTERS            4\n#define ACM_METRIC_COUNT_DISABLED           5\n#define ACM_METRIC_COUNT_HARDWARE           6\n#define ACM_METRIC_COUNT_LOCAL_DRIVERS     20\n#define ACM_METRIC_COUNT_LOCAL_CODECS      21\n#define ACM_METRIC_COUNT_LOCAL_CONVERTERS  22\n#define ACM_METRIC_COUNT_LOCAL_FILTERS     23\n#define ACM_METRIC_COUNT_LOCAL_DISABLED    24\n#define ACM_METRIC_HARDWARE_WAVE_INPUT     30\n#define ACM_METRIC_HARDWARE_WAVE_OUTPUT    31\n#define ACM_METRIC_MAX_SIZE_FORMAT         50\n#define ACM_METRIC_MAX_SIZE_FILTER         51\n#define ACM_METRIC_DRIVER_SUPPORT         100\n#define ACM_METRIC_DRIVER_PRIORITY        101\n\n#define ACM_STREAMCONVERTF_BLOCKALIGN 0x00000004\n#define ACM_STREAMCONVERTF_START      0x00000010\n#define ACM_STREAMCONVERTF_END        0x00000020\n\n#define ACMSTREAMHEADER_STATUSF_DONE     __MSABI_LONG(0x00010000)\n#define ACMSTREAMHEADER_STATUSF_PREPARED __MSABI_LONG(0x00020000)\n#define ACMSTREAMHEADER_STATUSF_INQUEUE  __MSABI_LONG(0x00100000)\n\n#define ACM_STREAMOPENF_QUERY       0x00000001\n#define ACM_STREAMOPENF_ASYNC       0x00000002\n#define ACM_STREAMOPENF_NONREALTIME 0x00000004\n\n#define ACM_STREAMSIZEF_SOURCE      __MSABI_LONG(0x00000000)\n#define ACM_STREAMSIZEF_DESTINATION __MSABI_LONG(0x00000001)\n#define ACM_STREAMSIZEF_QUERYMASK   __MSABI_LONG(0x0000000F)\n\n#define ACMDM_USER                  (DRV_USER + 0x0000)\n#define ACMDM_RESERVED_LOW          (DRV_USER + 0x2000)\n#define ACMDM_RESERVED_HIGH         (DRV_USER + 0x2FFF)\n\n#define ACMDM_BASE                  ACMDM_RESERVED_LOW\n\n#define ACMDM_DRIVER_ABOUT          (ACMDM_BASE + 11)\n\n/* handles */\n\nDECLARE_HANDLE(HACMDRIVERID);\nDECLARE_HANDLE(HACMDRIVER);\nDECLARE_HANDLE(HACMSTREAM);\nDECLARE_HANDLE(HACMOBJ);\ntypedef HACMDRIVERID *PHACMDRIVERID, *LPHACMDRIVERID;\ntypedef HACMDRIVER   *PHACMDRIVER, *LPHACMDRIVER;\ntypedef HACMSTREAM   *PHACMSTREAM, *LPHACMSTREAM;\ntypedef HACMOBJ      *PHACMOBJ, *LPHACMOBJ;\n\n/***********************************************************************\n * Callbacks\n */\n\ntypedef BOOL (CALLBACK *ACMDRIVERENUMCB)(\n  HACMDRIVERID hadid, DWORD_PTR dwInstance, DWORD fdwSupport\n);\n\ntypedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROCA)(\n  HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam\n);\n\ntypedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROCW)(\n  HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam\n);\n#define\tACMFILTERCHOOSEHOOKPROC WINELIB_NAME_AW(ACMFILTERCHOOSEHOOKPROC)\n\ntypedef UINT (CALLBACK *ACMFORMATCHOOSEHOOKPROCA)(\n  HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam\n);\n\ntypedef UINT (CALLBACK *ACMFORMATCHOOSEHOOKPROCW)(\n  HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam\n);\n#define\tACMFORMATCHOOSEHOOKPROC WINELIB_NAME_AW(ACMFORMATCHOOSEHOOKPROC)\n\n/***********************************************************************\n * Structures\n */\n\ntypedef struct _ACMDRIVERDETAILSA\n{\n  DWORD    cbStruct;\n\n  FOURCC   fccType;\n  FOURCC   fccComp;\n\n  WORD     wMid;\n  WORD     wPid;\n\n  DWORD    vdwACM;\n  DWORD    vdwDriver;\n\n  DWORD    fdwSupport;\n  DWORD    cFormatTags;\n  DWORD    cFilterTags;\n\n  HICON  hicon;\n\n  CHAR     szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];\n  CHAR     szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];\n  CHAR     szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];\n  CHAR     szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];\n  CHAR     szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];\n} ACMDRIVERDETAILSA, *PACMDRIVERDETAILSA, *LPACMDRIVERDETAILSA;\n\ntypedef struct _ACMDRIVERDETAILSW\n{\n  DWORD    cbStruct;\n\n  FOURCC   fccType;\n  FOURCC   fccComp;\n\n  WORD     wMid;\n  WORD     wPid;\n\n  DWORD    vdwACM;\n  DWORD    vdwDriver;\n\n  DWORD    fdwSupport;\n  DWORD    cFormatTags;\n  DWORD    cFilterTags;\n\n  HICON  hicon;\n\n  WCHAR    szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];\n  WCHAR    szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];\n  WCHAR    szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];\n  WCHAR    szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];\n  WCHAR    szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];\n} ACMDRIVERDETAILSW, *PACMDRIVERDETAILSW, *LPACMDRIVERDETAILSW;\n\nDECL_WINELIB_TYPE_AW(ACMDRIVERDETAILS)\nDECL_WINELIB_TYPE_AW(PACMDRIVERDETAILS)\nDECL_WINELIB_TYPE_AW(LPACMDRIVERDETAILS)\n\ntypedef struct _ACMFILTERCHOOSEA\n{\n  DWORD         cbStruct;\n  DWORD         fdwStyle;\n\n  HWND        hwndOwner;\n\n  PWAVEFILTER   pwfltr;\n  DWORD         cbwfltr;\n\n  LPCSTR        pszTitle;\n\n  CHAR          szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];\n  CHAR          szFilter[ACMFILTERDETAILS_FILTER_CHARS];\n  LPSTR         pszName;\n  DWORD         cchName;\n\n  DWORD         fdwEnum;\n  PWAVEFILTER   pwfltrEnum;\n\n  HINSTANCE   hInstance;\n  LPCSTR        pszTemplateName;\n  LPARAM        lCustData;\n  ACMFILTERCHOOSEHOOKPROCA pfnHook;\n} ACMFILTERCHOOSEA, *PACMFILTERCHOOSEA, *LPACMFILTERCHOOSEA;\n\ntypedef struct _ACMFILTERCHOOSEW\n{\n  DWORD         cbStruct;\n  DWORD         fdwStyle;\n\n  HWND        hwndOwner;\n\n  PWAVEFILTER   pwfltr;\n  DWORD         cbwfltr;\n\n  LPCWSTR       pszTitle;\n\n  WCHAR         szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];\n  WCHAR         szFilter[ACMFILTERDETAILS_FILTER_CHARS];\n  LPWSTR        pszName;\n  DWORD         cchName;\n\n  DWORD         fdwEnum;\n  PWAVEFILTER   pwfltrEnum;\n\n  HINSTANCE   hInstance;\n  LPCWSTR       pszTemplateName;\n  LPARAM        lCustData;\n  ACMFILTERCHOOSEHOOKPROCW pfnHook;\n} ACMFILTERCHOOSEW, *PACMFILTERCHOOSEW, *LPACMFILTERCHOOSEW;\n\nDECL_WINELIB_TYPE_AW(ACMFILTERCHOOSE)\nDECL_WINELIB_TYPE_AW(PACMFILTERCHOOSE)\nDECL_WINELIB_TYPE_AW(LPACMFILTERCHOOSE)\n\ntypedef struct _ACMFILTERDETAILSA\n{\n  DWORD           cbStruct;\n  DWORD           dwFilterIndex;\n  DWORD           dwFilterTag;\n  DWORD           fdwSupport;\n  PWAVEFILTER     pwfltr;\n  DWORD           cbwfltr;\n  CHAR            szFilter[ACMFILTERDETAILS_FILTER_CHARS];\n} ACMFILTERDETAILSA, *PACMFILTERDETAILSA, *LPACMFILTERDETAILSA;\n\ntypedef struct _ACMFILTERDETAILSW\n{\n  DWORD          cbStruct;\n  DWORD          dwFilterIndex;\n  DWORD          dwFilterTag;\n  DWORD          fdwSupport;\n  PWAVEFILTER    pwfltr;\n  DWORD          cbwfltr;\n  WCHAR          szFilter[ACMFILTERDETAILS_FILTER_CHARS];\n} ACMFILTERDETAILSW, *PACMFILTERDETAILSW, *LPACMFILTERDETAILSW;\n\nDECL_WINELIB_TYPE_AW(ACMFILTERDETAILS)\nDECL_WINELIB_TYPE_AW(PACMFILTERDETAILS)\nDECL_WINELIB_TYPE_AW(LPACMFILTERDETAILS)\n\ntypedef struct _ACMFILTERTAGDETAILSA\n{\n  DWORD cbStruct;\n  DWORD dwFilterTagIndex;\n  DWORD dwFilterTag;\n  DWORD cbFilterSize;\n  DWORD fdwSupport;\n  DWORD cStandardFilters;\n  CHAR  szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];\n} ACMFILTERTAGDETAILSA, *PACMFILTERTAGDETAILSA, *LPACMFILTERTAGDETAILSA;\n\ntypedef struct _ACMFILTERTAGDETAILSW\n{\n  DWORD cbStruct;\n  DWORD dwFilterTagIndex;\n  DWORD dwFilterTag;\n  DWORD cbFilterSize;\n  DWORD fdwSupport;\n  DWORD cStandardFilters;\n  WCHAR szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];\n} ACMFILTERTAGDETAILSW, *PACMFILTERTAGDETAILSW, *LPACMFILTERTAGDETAILSW;\n\nDECL_WINELIB_TYPE_AW(ACMFILTERTAGDETAILS)\nDECL_WINELIB_TYPE_AW(PACMFILTERTAGDETAILS)\nDECL_WINELIB_TYPE_AW(LPACMFILTERTAGDETAILS)\n\ntypedef struct _ACMFORMATCHOOSEA\n{\n  DWORD           cbStruct;\n  DWORD           fdwStyle;\n\n  HWND          hwndOwner;\n\n  PWAVEFORMATEX   pwfx;\n  DWORD           cbwfx;\n  LPCSTR          pszTitle;\n\n  CHAR            szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];\n  CHAR            szFormat[ACMFORMATDETAILS_FORMAT_CHARS];\n\n  LPSTR           pszName;\n  DWORD           cchName;\n\n  DWORD           fdwEnum;\n  PWAVEFORMATEX   pwfxEnum;\n\n  HINSTANCE     hInstance;\n  LPCSTR          pszTemplateName;\n  LPARAM          lCustData;\n  ACMFORMATCHOOSEHOOKPROCA pfnHook;\n} ACMFORMATCHOOSEA, *PACMFORMATCHOOSEA, *LPACMFORMATCHOOSEA;\n\ntypedef struct _ACMFORMATCHOOSEW\n{\n  DWORD           cbStruct;\n  DWORD           fdwStyle;\n\n  HWND          hwndOwner;\n\n  PWAVEFORMATEX   pwfx;\n  DWORD           cbwfx;\n  LPCWSTR         pszTitle;\n\n  WCHAR           szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];\n  WCHAR           szFormat[ACMFORMATDETAILS_FORMAT_CHARS];\n\n  LPWSTR          pszName;\n  DWORD           cchName;\n\n  DWORD           fdwEnum;\n  LPWAVEFORMATEX  pwfxEnum;\n\n  HINSTANCE     hInstance;\n  LPCWSTR         pszTemplateName;\n  LPARAM          lCustData;\n  ACMFORMATCHOOSEHOOKPROCW pfnHook;\n} ACMFORMATCHOOSEW, *PACMFORMATCHOOSEW, *LPACMFORMATCHOOSEW;\n\nDECL_WINELIB_TYPE_AW(ACMFORMATCHOOSE)\nDECL_WINELIB_TYPE_AW(PACMFORMATCHOOSE)\nDECL_WINELIB_TYPE_AW(LPACMFORMATCHOOSE)\n\ntypedef struct _ACMFORMATDETAILSA\n{\n  DWORD           cbStruct;\n  DWORD           dwFormatIndex;\n  DWORD           dwFormatTag;\n  DWORD           fdwSupport;\n  PWAVEFORMATEX   pwfx;\n  DWORD           cbwfx;\n  CHAR            szFormat[ACMFORMATDETAILS_FORMAT_CHARS];\n} ACMFORMATDETAILSA, *PACMFORMATDETAILSA, *LPACMFORMATDETAILSA;\n\ntypedef struct _ACMFORMATDETAILSW\n{\n    DWORD           cbStruct;\n    DWORD           dwFormatIndex;\n    DWORD           dwFormatTag;\n    DWORD           fdwSupport;\n    PWAVEFORMATEX   pwfx;\n    DWORD           cbwfx;\n    WCHAR           szFormat[ACMFORMATDETAILS_FORMAT_CHARS];\n} ACMFORMATDETAILSW, *PACMFORMATDETAILSW, *LPACMFORMATDETAILSW;\n\nDECL_WINELIB_TYPE_AW(ACMFORMATDETAILS)\nDECL_WINELIB_TYPE_AW(PACMFORMATDETAILS)\nDECL_WINELIB_TYPE_AW(LPACMFORMATDETAILS)\n\ntypedef struct _ACMFORMATTAGDETAILSA\n{\n  DWORD cbStruct;\n  DWORD dwFormatTagIndex;\n  DWORD dwFormatTag;\n  DWORD cbFormatSize;\n  DWORD fdwSupport;\n  DWORD cStandardFormats;\n  CHAR  szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];\n} ACMFORMATTAGDETAILSA, *PACMFORMATTAGDETAILSA, *LPACMFORMATTAGDETAILSA;\n\ntypedef struct _ACMFORMATTAGDETAILSW\n{\n  DWORD cbStruct;\n  DWORD dwFormatTagIndex;\n  DWORD dwFormatTag;\n  DWORD cbFormatSize;\n  DWORD fdwSupport;\n  DWORD cStandardFormats;\n  WCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];\n} ACMFORMATTAGDETAILSW, *PACMFORMATTAGDETAILSW, *LPACMFORMATTAGDETAILSW;\n\nDECL_WINELIB_TYPE_AW(ACMFORMATTAGDETAILS)\nDECL_WINELIB_TYPE_AW(PACMFORMATTAGDETAILS)\nDECL_WINELIB_TYPE_AW(LPACMFORMATTAGDETAILS)\n\n#ifdef _WIN64\n#  define _ACMSTREAMHEADERRESERVE 15\n#else\n#  define _ACMSTREAMHEADERRESERVE 10\n#endif\n\ntypedef struct _ACMSTREAMHEADER\n{\n  DWORD     cbStruct;\n  DWORD     fdwStatus;\n  DWORD_PTR dwUser;\n  LPBYTE    pbSrc;\n  DWORD     cbSrcLength;\n  DWORD     cbSrcLengthUsed;\n  DWORD_PTR dwSrcUser;\n  LPBYTE    pbDst;\n  DWORD     cbDstLength;\n  DWORD     cbDstLengthUsed;\n  DWORD_PTR dwDstUser;\n  DWORD     dwReservedDriver[_ACMSTREAMHEADERRESERVE];\n} ACMSTREAMHEADER, *PACMSTREAMHEADER, *LPACMSTREAMHEADER;\n\n#undef _ACMSTREAMHEADERRESERVE\n\n/***********************************************************************\n * Callbacks 2\n */\n\ntypedef BOOL (CALLBACK *ACMFILTERENUMCBA)(\n  HACMDRIVERID hadid, PACMFILTERDETAILSA pafd,\n  DWORD_PTR dwInstance, DWORD fdwSupport\n);\n\ntypedef BOOL (CALLBACK *ACMFILTERENUMCBW)(\n  HACMDRIVERID hadid, PACMFILTERDETAILSW pafd,\n  DWORD_PTR dwInstance, DWORD fdwSupport\n);\n\n#define ACMFILTERENUMCB WINELIB_NAME_AW(ACMFILTERENUMCB)\n\ntypedef BOOL (CALLBACK *ACMFILTERTAGENUMCBA)(\n  HACMDRIVERID hadid, PACMFILTERTAGDETAILSA paftd,\n  DWORD_PTR dwInstance, DWORD fdwSupport\n);\n\ntypedef BOOL (CALLBACK *ACMFILTERTAGENUMCBW)(\n  HACMDRIVERID hadid, PACMFILTERTAGDETAILSW paftd,\n  DWORD_PTR dwInstance, DWORD fdwSupport\n);\n\n#define ACMFILTERTAGENUMCB WINELIB_NAME_AW(ACMFILTERTAGENUMCB)\n\ntypedef BOOL (CALLBACK *ACMFORMATENUMCBA)(\n  HACMDRIVERID hadid, PACMFORMATDETAILSA pafd,\n  DWORD_PTR dwInstance, DWORD fdwSupport\n);\n\ntypedef BOOL (CALLBACK *ACMFORMATENUMCBW)(\n  HACMDRIVERID hadid, PACMFORMATDETAILSW pafd,\n  DWORD_PTR dwInstance, DWORD fdwSupport\n);\n\n#define ACMFORMATENUMCB WINELIB_NAME_AW(ACMFORMATENUMCB)\n\ntypedef BOOL (CALLBACK *ACMFORMATTAGENUMCBA)(\n  HACMDRIVERID hadid, PACMFORMATTAGDETAILSA paftd,\n  DWORD_PTR dwInstance, DWORD fdwSupport\n);\n\ntypedef BOOL (CALLBACK *ACMFORMATTAGENUMCBW)(\n  HACMDRIVERID hadid, PACMFORMATTAGDETAILSW paftd,\n  DWORD_PTR dwInstance, DWORD fdwSupport\n);\n\n#define ACMFORMATTAGENUMCB WINELIB_NAME_AW(ACMFORMATTAGENUMCB)\n\n/***********************************************************************\n * Functions - Win32\n */\n\nMMRESULT WINAPI acmDriverAddA(\n  PHACMDRIVERID phadid, HINSTANCE hinstModule,\n  LPARAM lParam, DWORD dwPriority, DWORD fdwAdd\n);\nMMRESULT WINAPI acmDriverAddW(\n  PHACMDRIVERID phadid, HINSTANCE hinstModule,\n  LPARAM lParam, DWORD dwPriority, DWORD fdwAdd\n);\n#define acmDriverAdd WINELIB_NAME_AW(acmDriverAdd)\n\nMMRESULT WINAPI acmDriverClose(\n  HACMDRIVER had, DWORD fdwClose\n);\nMMRESULT WINAPI acmDriverDetailsA(\n  HACMDRIVERID hadid, PACMDRIVERDETAILSA padd, DWORD fdwDetails\n);\nMMRESULT WINAPI acmDriverDetailsW(\n  HACMDRIVERID hadid, PACMDRIVERDETAILSW padd, DWORD fdwDetails\n);\n#define acmDriverDetails WINELIB_NAME_AW(acmDriverDetails)\n\nMMRESULT WINAPI acmDriverEnum(\n  ACMDRIVERENUMCB fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum\n);\nMMRESULT WINAPI acmDriverID(\n  HACMOBJ hao, PHACMDRIVERID phadid, DWORD fdwDriverID\n);\nLRESULT WINAPI acmDriverMessage(\n  HACMDRIVER had, UINT uMsg, LPARAM lParam1, LPARAM lParam2\n);\nMMRESULT WINAPI acmDriverOpen(\n  PHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpen\n);\nMMRESULT WINAPI acmDriverPriority(\n  HACMDRIVERID hadid, DWORD dwPriority, DWORD fdwPriority\n);\nMMRESULT WINAPI acmDriverRemove(\n  HACMDRIVERID hadid, DWORD fdwRemove\n);\nMMRESULT WINAPI acmFilterChooseA(\n  PACMFILTERCHOOSEA pafltrc\n);\nMMRESULT WINAPI acmFilterChooseW(\n  PACMFILTERCHOOSEW pafltrc\n);\n#define acmFilterChoose WINELIB_NAME_AW(acmFilterChoose)\n\nMMRESULT WINAPI acmFilterDetailsA(\n  HACMDRIVER had, PACMFILTERDETAILSA pafd, DWORD fdwDetails\n);\nMMRESULT WINAPI acmFilterDetailsW(\n  HACMDRIVER had, PACMFILTERDETAILSW pafd, DWORD fdwDetails\n);\n#define acmFilterDetails WINELIB_NAME_AW(acmFilterDetails)\n\nMMRESULT WINAPI acmFilterEnumA(\n  HACMDRIVER had, PACMFILTERDETAILSA pafd,\n  ACMFILTERENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum\n);\nMMRESULT WINAPI acmFilterEnumW(\n  HACMDRIVER had, PACMFILTERDETAILSW pafd,\n  ACMFILTERENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum\n);\n#define acmFilterEnum WINELIB_NAME_AW(acmFilterEnum)\n\nMMRESULT WINAPI acmFilterTagDetailsA(\n  HACMDRIVER had, PACMFILTERTAGDETAILSA paftd, DWORD fdwDetails\n);\nMMRESULT WINAPI acmFilterTagDetailsW(\n  HACMDRIVER had, PACMFILTERTAGDETAILSW paftd, DWORD fdwDetails\n);\n#define acmFilterTagDetails WINELIB_NAME_AW(acmFilterTagDetails)\n\nMMRESULT WINAPI acmFilterTagEnumA(\n  HACMDRIVER had, PACMFILTERTAGDETAILSA paftd,\n  ACMFILTERTAGENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum\n);\nMMRESULT WINAPI acmFilterTagEnumW(\n  HACMDRIVER had, PACMFILTERTAGDETAILSW paftd,\n  ACMFILTERTAGENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum\n);\n#define acmFilterTagEnum WINELIB_NAME_AW(acmFilterTagEnum)\n\nMMRESULT WINAPI acmFormatChooseA(\n  PACMFORMATCHOOSEA pafmtc\n);\nMMRESULT WINAPI acmFormatChooseW(\n  PACMFORMATCHOOSEW pafmtc\n);\n#define acmFormatChoose WINELIB_NAME_AW(acmFormatChoose)\n\nMMRESULT WINAPI acmFormatDetailsA(\n  HACMDRIVER had, PACMFORMATDETAILSA pafd, DWORD fdwDetails\n);\nMMRESULT WINAPI acmFormatDetailsW(\n  HACMDRIVER had, PACMFORMATDETAILSW pafd, DWORD fdwDetails\n);\n#define acmFormatDetails WINELIB_NAME_AW(acmFormatDetails)\n\nMMRESULT WINAPI acmFormatEnumA(\n  HACMDRIVER had, PACMFORMATDETAILSA pafd,\n  ACMFORMATENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum\n);\nMMRESULT WINAPI acmFormatEnumW(\n  HACMDRIVER had, PACMFORMATDETAILSW pafd,\n  ACMFORMATENUMCBW fnCallback, DWORD_PTR dwInstance,  DWORD fdwEnum\n);\n#define acmFormatEnum WINELIB_NAME_AW(acmFormatEnum)\n\nMMRESULT WINAPI acmFormatSuggest(\n  HACMDRIVER had, PWAVEFORMATEX pwfxSrc, PWAVEFORMATEX pwfxDst,\n  DWORD cbwfxDst, DWORD fdwSuggest\n);\nMMRESULT WINAPI acmFormatTagDetailsA(\n  HACMDRIVER had, PACMFORMATTAGDETAILSA paftd, DWORD fdwDetails\n);\nMMRESULT WINAPI acmFormatTagDetailsW(\n  HACMDRIVER had, PACMFORMATTAGDETAILSW paftd, DWORD fdwDetails\n);\n#define acmFormatTagDetails WINELIB_NAME_AW(acmFormatTagDetails)\n\nMMRESULT WINAPI acmFormatTagEnumA(\n  HACMDRIVER had, PACMFORMATTAGDETAILSA paftd,\n  ACMFORMATTAGENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum\n);\nMMRESULT WINAPI acmFormatTagEnumW(\n  HACMDRIVER had, PACMFORMATTAGDETAILSW paftd,\n  ACMFORMATTAGENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum\n);\n#define acmFormatTagEnum WINELIB_NAME_AW(acmFormatTagEnum)\n\nDWORD WINAPI acmGetVersion(void\n);\nMMRESULT WINAPI acmMetrics(\n  HACMOBJ hao, UINT  uMetric, LPVOID  pMetric\n);\nMMRESULT WINAPI acmStreamClose(\n  HACMSTREAM has, DWORD fdwClose\n);\nMMRESULT WINAPI acmStreamConvert(\n  HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwConvert\n);\nMMRESULT WINAPI acmStreamMessage(\n  HACMSTREAM has, UINT uMsg, LPARAM lParam1, LPARAM lParam2\n);\nMMRESULT WINAPI acmStreamOpen(\n  PHACMSTREAM phas, HACMDRIVER had, PWAVEFORMATEX pwfxSrc,\n  PWAVEFORMATEX pwfxDst, PWAVEFILTER pwfltr, DWORD_PTR dwCallback,\n  DWORD_PTR dwInstance, DWORD fdwOpen\n);\nMMRESULT WINAPI acmStreamPrepareHeader(\n  HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwPrepare\n);\nMMRESULT WINAPI acmStreamReset(\n  HACMSTREAM has, DWORD fdwReset\n);\nMMRESULT WINAPI acmStreamSize(\n  HACMSTREAM has, DWORD cbInput,\n  LPDWORD pdwOutputBytes, DWORD fdwSize\n);\nMMRESULT WINAPI acmStreamUnprepareHeader(\n  HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwUnprepare\n);\n\n#include <poppack.h>\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif  /* __WINE_MSACM_H */\n"
  },
  {
    "path": "wine/windows/msacmdlg.h",
    "content": "/*\n * definitions for MSACM dialog boxes\n *\n * Copyright (C) 2001 Eric Pouech\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#define DLG_ACMFORMATCHOOSE_ID              70\n#define IDD_ACMFORMATCHOOSE_BTN_HELP        9\n#define IDD_ACMFORMATCHOOSE_CMB_CUSTOM      100\n#define IDD_ACMFORMATCHOOSE_CMB_FORMATTAG   101\n#define IDD_ACMFORMATCHOOSE_CMB_FORMAT      102\n#define IDD_ACMFORMATCHOOSE_BTN_SETNAME     103\n#define IDD_ACMFORMATCHOOSE_BTN_DELNAME     104\n\n#define DLG_ACMFILTERCHOOSE_ID              71\n#define IDD_ACMFILTERCHOOSE_BTN_HELP        9\n#define IDD_ACMFILTERCHOOSE_CMB_CUSTOM      100\n#define IDD_ACMFILTERCHOOSE_CMB_FILTERTAG   101\n#define IDD_ACMFILTERCHOOSE_CMB_FILTER      102\n#define IDD_ACMFILTERCHOOSE_BTN_SETNAME     103\n#define IDD_ACMFILTERCHOOSE_BTN_DELNAME     104\n\n"
  },
  {
    "path": "wine/windows/msacmdrv.h",
    "content": "/*\n * Declarations for MSACM driver\n *\n * Copyright 1998 Patrik Stridvall\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_MSACMDRV_H\n#define __WINE_MSACMDRV_H\n\n#include <stdarg.h>\n\n#include <windef.h>\n#include <winbase.h>\n#include <mmsystem.h>\n#include <mmreg.h>\n#include <msacm.h>\n\n/***********************************************************************\n * Types\n */\n\n/***********************************************************************\n * Defines/Enums\n */\n\n#define MAKE_ACM_VERSION(mjr, mnr, bld) \\\n  (((LONG)(mjr)<<24) | ((LONG)(mnr)<<16) | ((LONG)bld))\n\n#define ACMDRVOPENDESC_SECTIONNAME_CHARS\n\n#define ACMDM_DRIVER_NOTIFY             (ACMDM_BASE + 1)\n#define ACMDM_DRIVER_DETAILS            (ACMDM_BASE + 10)\n#define ACMDM_DRIVER_ABOUT              (ACMDM_BASE + 11)\n\n#define ACMDM_HARDWARE_WAVE_CAPS_INPUT  (ACMDM_BASE + 20)\n#define ACMDM_HARDWARE_WAVE_CAPS_OUTPUT (ACMDM_BASE + 21)\n\n#define ACMDM_FORMATTAG_DETAILS         (ACMDM_BASE + 25)\n#define ACMDM_FORMAT_DETAILS            (ACMDM_BASE + 26)\n#define ACMDM_FORMAT_SUGGEST            (ACMDM_BASE + 27)\n\n#define ACMDM_FILTERTAG_DETAILS         (ACMDM_BASE + 50)\n#define ACMDM_FILTER_DETAILS            (ACMDM_BASE + 51)\n\n#define ACMDM_STREAM_OPEN               (ACMDM_BASE + 76)\n#define ACMDM_STREAM_CLOSE              (ACMDM_BASE + 77)\n#define ACMDM_STREAM_SIZE               (ACMDM_BASE + 78)\n#define ACMDM_STREAM_CONVERT            (ACMDM_BASE + 79)\n#define ACMDM_STREAM_RESET              (ACMDM_BASE + 80)\n#define ACMDM_STREAM_PREPARE            (ACMDM_BASE + 81)\n#define ACMDM_STREAM_UNPREPARE          (ACMDM_BASE + 82)\n#define ACMDM_STREAM_UPDATE             (ACMDM_BASE + 83)\n\n/***********************************************************************\n * Structures\n */\n\ntypedef struct _ACMDRVOPENDESCA\n{\n  DWORD  cbStruct;\n  FOURCC fccType;\n  FOURCC fccComp;\n  DWORD  dwVersion;\n  DWORD  dwFlags;\n  DWORD  dwError;\n  LPCSTR pszSectionName;\n  LPCSTR pszAliasName;\n  DWORD  dnDevNode;\n} ACMDRVOPENDESCA, *PACMDRVOPENDESCA;\n\ntypedef struct _ACMDRVOPENDESCW\n{\n  DWORD   cbStruct;\n  FOURCC  fccType;\n  FOURCC  fccComp;\n  DWORD   dwVersion;\n  DWORD   dwFlags;\n  DWORD   dwError;\n  LPCWSTR pszSectionName;\n  LPCWSTR pszAliasName;\n  DWORD   dnDevNode;\n} ACMDRVOPENDESCW, *PACMDRVOPENDESCW;\n\ntypedef struct _ACMDRVSTREAMINSTANCE\n{\n  DWORD           cbStruct;\n  PWAVEFORMATEX   pwfxSrc;\n  PWAVEFORMATEX   pwfxDst;\n  PWAVEFILTER     pwfltr;\n  DWORD_PTR       dwCallback;\n  DWORD_PTR       dwInstance;\n  DWORD           fdwOpen;\n  DWORD           fdwDriver;\n  DWORD_PTR       dwDriver;\n  HACMSTREAM    has;\n} ACMDRVSTREAMINSTANCE, *PACMDRVSTREAMINSTANCE;\n\ntypedef struct _ACMDRVSTREAMHEADER *PACMDRVSTREAMHEADER;\n#include <pshpack1.h>\ntypedef struct _ACMDRVSTREAMHEADER {\n  DWORD                cbStruct;\n  DWORD                fdwStatus;\n  DWORD_PTR            dwUser;\n  LPBYTE               pbSrc;\n  DWORD                cbSrcLength;\n  DWORD                cbSrcLengthUsed;\n  DWORD_PTR            dwSrcUser;\n  LPBYTE               pbDst;\n  DWORD                cbDstLength;\n  DWORD                cbDstLengthUsed;\n  DWORD_PTR            dwDstUser;\n\n  DWORD                fdwConvert;\n  PACMDRVSTREAMHEADER *padshNext;\n  DWORD                fdwDriver;\n  DWORD_PTR            dwDriver;\n\n  /* Internal fields for ACM */\n  DWORD                fdwPrepared;\n  DWORD_PTR            dwPrepared;\n  LPBYTE               pbPreparedSrc;\n  DWORD                cbPreparedSrcLength;\n  LPBYTE               pbPreparedDst;\n  DWORD                cbPreparedDstLength;\n} ACMDRVSTREAMHEADER;\n#include <poppack.h>\n\ntypedef struct _ACMDRVSTREAMSIZE\n{\n  DWORD cbStruct;\n  DWORD fdwSize;\n  DWORD cbSrcLength;\n  DWORD cbDstLength;\n} ACMDRVSTREAMSIZE, *PACMDRVSTREAMSIZE;\n\ntypedef struct _ACMDRVFORMATSUGGEST\n{\n  DWORD           cbStruct;\n  DWORD           fdwSuggest;\n  PWAVEFORMATEX   pwfxSrc;\n  DWORD           cbwfxSrc;\n  PWAVEFORMATEX   pwfxDst;\n  DWORD           cbwfxDst;\n} ACMDRVFORMATSUGGEST, *PACMDRVFORMATSUGGEST;\n\n#endif  /* __WINE_MSACMDRV_H */\n"
  },
  {
    "path": "wine/windows/msasn1.h",
    "content": "/*\n * Copyright (C) 2015 Austin English\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __MS_ASN1_H__\n#define __MS_ASN1_H__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef char ASN1char_t;\ntypedef signed char ASN1int8_t;\ntypedef unsigned char ASN1uint8_t;\ntypedef unsigned short ASN1uint16_t;\ntypedef signed short ASN1int16_t;\ntypedef ULONG ASN1uint32_t;\ntypedef LONG ASN1int32_t;\n\ntypedef ASN1uint16_t ASN1char16_t;\ntypedef ASN1uint32_t ASN1char32_t;\n\ntypedef ASN1char_t *ASN1ztcharstring_t;\ntypedef ASN1char16_t *ASN1ztchar16string_t;\ntypedef ASN1char32_t *ASN1ztchar32string_t;\ntypedef ASN1int32_t ASN1enum_t;\ntypedef ASN1uint8_t ASN1octet_t;\ntypedef ASN1uint8_t ASN1bool_t;\ntypedef ASN1uint16_t ASN1choice_t;\ntypedef ASN1uint32_t ASN1magic_t;\ntypedef ASN1ztcharstring_t ASN1objectdescriptor_t;\n\ntypedef void (WINAPI *ASN1FreeFun_t)(void *data);\ntypedef void (WINAPI *ASN1GenericFun_t)(void);\n\ntypedef struct ASN1encoding_s *ASN1encoding_t;\ntypedef struct ASN1decoding_s *ASN1decoding_t;\ntypedef ASN1int32_t (WINAPI *ASN1PerEncFun_t)(ASN1encoding_t enc,void *data);\ntypedef ASN1int32_t (WINAPI *ASN1PerDecFun_t)(ASN1decoding_t enc,void *data);\n\ntypedef struct tagASN1PerFunArr_t {\n  const ASN1PerEncFun_t *apfnEncoder;\n  const ASN1PerDecFun_t *apfnDecoder;\n} ASN1PerFunArr_t;\n\ntypedef ASN1int32_t (WINAPI *ASN1BerEncFun_t)(ASN1encoding_t enc,ASN1uint32_t tag,void *data);\ntypedef ASN1int32_t (WINAPI *ASN1BerDecFun_t)(ASN1decoding_t enc,ASN1uint32_t tag,void *data);\n\ntypedef struct tagASN1BerFunArr_t {\n  const ASN1BerEncFun_t *apfnEncoder;\n  const ASN1BerDecFun_t *apfnDecoder;\n} ASN1BerFunArr_t;\n\ntypedef struct tagASN1bitstring_t\n{\n  ASN1uint32_t length;\n  ASN1octet_t *value;\n} ASN1bitstring_t;\n\ntypedef enum tagASN1blocktype_e\n{\n  ASN1_DER_SET_OF_BLOCK,\n} ASN1blocktype_e;\n\ntypedef struct tagASN1charstring_t\n{\n  ASN1uint32_t length;\n  ASN1char_t *value;\n} ASN1charstring_t;\n\ntypedef struct tagASN1char16string_t\n{\n  ASN1uint32_t length;\n  ASN1char16_t *value;\n} ASN1char16string_t;\n\ntypedef struct tagASN1char32string_t\n{\n  ASN1uint32_t length;\n  ASN1char32_t *value;\n} ASN1char32string_t;\n\ntypedef struct tagASN1encodedOID_t\n{\n  ASN1uint16_t length;\n  ASN1octet_t  *value;\n} ASN1encodedOID_t;\n\ntypedef enum {\n  ASN1_PER_RULE_ALIGNED = 0x0001,ASN1_PER_RULE_UNALIGNED = 0x0002,ASN1_PER_RULE = ASN1_PER_RULE_ALIGNED | ASN1_PER_RULE_UNALIGNED,\n  ASN1_BER_RULE_BER = 0x0100,ASN1_BER_RULE_CER = 0x0200,ASN1_BER_RULE_DER = 0x0400,\n  ASN1_BER_RULE = ASN1_BER_RULE_BER | ASN1_BER_RULE_CER | ASN1_BER_RULE_DER\n} ASN1encodingrule_e;\n\ntypedef enum tagASN1error_e\n{\n  ASN1_SUCCESS = 0,\n  ASN1_ERR_INTERNAL = -1001,\n  ASN1_ERR_EOD = -1002,\n  ASN1_ERR_CORRUPT = -1003,\n  ASN1_ERR_LARGE = -1004,\n  ASN1_ERR_CONSTRAINT = -1005,\n  ASN1_ERR_MEMORY = -1006,\n  ASN1_ERR_OVERFLOW = -1007,\n  ASN1_ERR_BADPDU = -1008,\n  ASN1_ERR_BADARGS = -1009,\n  ASN1_ERR_BADREAL = -1010,\n  ASN1_ERR_BADTAG = -1011,\n  ASN1_ERR_CHOICE = -1012,\n  ASN1_ERR_RULE = -1013,\n  ASN1_ERR_UTF8 = -1014,\n  ASN1_ERR_PDU_TYPE = -1051,\n  ASN1_ERR_NYI = -1052,\n  ASN1_WRN_EXTENDED = 1001,\n  ASN1_WRN_NOEOD = 1002,\n} ASN1error_e;\n\ntypedef struct tagASN1generalizedtime_t\n{\n  ASN1uint16_t year;\n  ASN1uint8_t  month;\n  ASN1uint8_t  day;\n  ASN1uint8_t  hour;\n  ASN1uint8_t  minute;\n  ASN1uint8_t  second;\n  ASN1uint16_t millisecond;\n  ASN1bool_t   universal;\n  ASN1int16_t  diff;\n} ASN1generalizedtime_t;\n\ntypedef struct tagASN1intx_t\n{\n  ASN1uint32_t length;\n  ASN1octet_t *value;\n} ASN1intx_t;\n\ntypedef struct tagASN1module_t {\n  ASN1magic_t nModuleName;\n  ASN1encodingrule_e eRule;\n  ASN1uint32_t dwFlags;\n  ASN1uint32_t cPDUs;\n  const ASN1FreeFun_t *apfnFreeMemory;\n  const ASN1uint32_t *acbStructSize;\n  union {\n    ASN1PerFunArr_t PER;\n    ASN1BerFunArr_t BER;\n  };\n} *ASN1module_t;\n\ntypedef struct ASN1objectidentifier_s\n{\n  struct ASN1objectidentifier_s *next;\n  ASN1uint32_t value;\n} *ASN1objectidentifier_t;\n\ntypedef struct tagASN1objectidentifier2_t\n{\n  ASN1uint16_t count;\n  ASN1uint32_t value[16];\n} ASN1objectidentifier2_t;\n\ntypedef struct tagASN1octetstring_t\n{\n  ASN1uint32_t length;\n  ASN1octet_t *value;\n} ASN1octetstring_t;\n\ntypedef struct tagASN1open_t\n{\n  ASN1uint32_t    length;\n  union\n  {\n    void  *encoded;\n    void  *value;\n  };\n} ASN1open_t;\n\ntypedef enum tagASN1option_e\n{\n  ASN1OPT_CHANGE_RULE = 0x101,\n  ASN1OPT_GET_RULE = 0x201,\n  ASN1OPT_NOT_REUSE_BUFFER = 0x301,\n  ASN1OPT_REWIND_BUFFER = 0x302,\n  ASN1OPT_SET_DECODED_BUFFER = 0x501,\n  ASN1OPT_DEL_DECODED_BUFFER = 0x502,\n  ASN1OPT_GET_DECODED_BUFFER_SIZE = 0x601,\n} ASN1option_e;\n\ntypedef struct tagASN1optionparam_t {\n  ASN1option_e eOption;\n  union\n  {\n    ASN1encodingrule_e eRule;\n    ASN1uint32_t cbRequiredDecodedBufSize;\n    struct\n    {\n      ASN1octet_t* pbBuf;\n      ASN1uint32_t cbBufSize;\n    } Buffer;\n  };\n} ASN1optionparam_t, ASN1optionparam_s;\n\ntypedef struct tagASN1utctime_t\n{\n  ASN1uint8_t year;\n  ASN1uint8_t month;\n  ASN1uint8_t day;\n  ASN1uint8_t hour;\n  ASN1uint8_t minute;\n  ASN1uint8_t second;\n  ASN1bool_t  universal;\n  ASN1int16_t diff;\n} ASN1utctime_t;\n\ntypedef struct tagASN1wstring_t\n{\n  ASN1uint32_t length;\n  WCHAR *value;\n} ASN1wstring_t;\n\nvoid         WINAPI ASN1_CloseDecoder(ASN1decoding_t);\nvoid         WINAPI ASN1_CloseEncoder(ASN1encoding_t);\nvoid         WINAPI ASN1_CloseEncoder2(ASN1encoding_t);\nvoid         WINAPI ASN1_CloseModule(ASN1module_t);\nASN1error_e  WINAPI ASN1_CreateDecoder(ASN1module_t, ASN1decoding_t*,ASN1octet_t*, ASN1uint32_t, ASN1decoding_t);\nASN1error_e  WINAPI ASN1_CreateEncoder(ASN1module_t, ASN1encoding_t*, ASN1octet_t*, ASN1uint32_t, ASN1encoding_t);\nASN1module_t WINAPI ASN1_CreateModule(ASN1uint32_t,ASN1encodingrule_e,ASN1uint32_t,ASN1uint32_t,const ASN1GenericFun_t [],const ASN1GenericFun_t [],const ASN1FreeFun_t [],const ASN1uint32_t [],ASN1magic_t);\nASN1error_e  WINAPI ASN1_Decode(ASN1decoding_t, void** , ASN1uint32_t, ASN1uint32_t, ASN1octet_t*, ASN1uint32_t);\nASN1error_e  WINAPI ASN1_Encode(ASN1encoding_t, void*, ASN1uint32_t, ASN1uint32_t, ASN1octet_t*, ASN1uint32_t);\nvoid         WINAPI ASN1_FreeDecoded(ASN1decoding_t, void*, ASN1uint32_t);\nvoid         WINAPI ASN1_FreeEncoded(ASN1encoding_t, void*);\nASN1error_e  WINAPI ASN1_GetDecoderOption(ASN1decoding_t, ASN1optionparam_t*);\nASN1error_e  WINAPI ASN1_GetEncoderOption(ASN1encoding_t, ASN1optionparam_t*);\nASN1error_e  WINAPI ASN1_SetDecoderOption(ASN1decoding_t, ASN1optionparam_t*);\nASN1error_e  WINAPI ASN1_SetEncoderOption(ASN1encoding_t, ASN1optionparam_t*);\nint          WINAPI ASN1bitstring_cmp(ASN1bitstring_t*,ASN1bitstring_t*);\nvoid         WINAPI ASN1bitstring_free(ASN1bitstring_t*);\nint          WINAPI ASN1char16string_cmp(ASN1char16string_t*,ASN1char16string_t*);\nvoid         WINAPI ASN1char16string_free(ASN1char16string_t*);\nint          WINAPI ASN1char32string_cmp(ASN1char32string_t*,ASN1char32string_t*);\nvoid         WINAPI ASN1char32string_free(ASN1char32string_t*);\nint          WINAPI ASN1charstring_cmp(ASN1charstring_t*,ASN1charstring_t*);\nvoid         WINAPI ASN1charstring_free(ASN1charstring_t*);\nLPVOID       WINAPI ASN1DecAlloc(ASN1decoding_t,ASN1uint32_t);\nLPVOID       WINAPI ASN1DecRealloc(ASN1decoding_t,LPVOID,ASN1uint32_t);\nASN1error_e  WINAPI ASN1DecSetError(ASN1decoding_t,ASN1error_e);\nASN1error_e  WINAPI ASN1EncSetError(ASN1encoding_t,ASN1error_e);\nvoid         WINAPI ASN1Free(LPVOID);\nint          WINAPI ASN1generalizedtime_cmp(ASN1generalizedtime_t*,ASN1generalizedtime_t*);\nint          WINAPI ASN1intx_cmp(ASN1intx_t*,ASN1intx_t*);\nvoid         WINAPI ASN1intx_free(ASN1intx_t*);\nvoid         WINAPI ASN1intx_setuint32(ASN1intx_t*,ASN1uint32_t);\nASN1uint32_t WINAPI ASN1intx_uoctets(ASN1intx_t*);\nASN1int32_t  WINAPI ASN1intx2int32(ASN1intx_t*);\nASN1uint32_t WINAPI ASN1intx2uint32(ASN1intx_t*);\nint          WINAPI ASN1intxisuint32(ASN1intx_t*);\nint          WINAPI ASN1objectidentifier_cmp(ASN1objectidentifier_t*,ASN1objectidentifier_t*);\nvoid         WINAPI ASN1objectidentifier_free(ASN1objectidentifier_t*);\nint          WINAPI ASN1objectidentifier2_cmp(ASN1objectidentifier2_t*,ASN1objectidentifier2_t*);\nint          WINAPI ASN1octetstring_cmp(ASN1octetstring_t*,ASN1octetstring_t*);\nvoid         WINAPI ASN1octetstring_free(ASN1octetstring_t*);\nint          WINAPI ASN1open_cmp(ASN1open_t*,ASN1open_t*);\nvoid         WINAPI ASN1open_free(ASN1open_t*);\nASN1uint32_t WINAPI ASN1uint32_uoctets(ASN1uint32_t);\nvoid         WINAPI ASN1utf8string_free(ASN1wstring_t*);\nint          WINAPI ASN1utctime_cmp(ASN1utctime_t*,ASN1utctime_t*);\nint          WINAPI ASN1ztchar16string_cmp(ASN1ztchar16string_t*,ASN1ztchar16string_t*);\nvoid         WINAPI ASN1ztchar16string_free(ASN1ztchar16string_t*);\nvoid         WINAPI ASN1ztchar32string_free(ASN1ztchar32string_t*);\nint          WINAPI ASN1ztcharstring_cmp(ASN1ztcharstring_t*,ASN1ztcharstring_t*);\nvoid         WINAPI ASN1ztcharstring_free(ASN1charstring_t*);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __MS_ASN1_H__ */\n"
  },
  {
    "path": "wine/windows/mscat.h",
    "content": "/*\n * Copyright (C) 2004 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_MSCAT_H\n#define __WINE_MSCAT_H\n\n#include <mssip.h>\n\ntypedef HANDLE HCATADMIN;\ntypedef HANDLE HCATINFO;\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define CRYPTCAT_OPEN_CREATENEW             0x00000001\n#define CRYPTCAT_OPEN_ALWAYS                0x00000002\n#define CRYPTCAT_OPEN_EXISTING              0x00000004\n#define CRYPTCAT_OPEN_EXCLUDE_PAGE_HASHES   0x00010000\n#define CRYPTCAT_OPEN_INCLUDE_PAGE_HASHES   0x00020000\n#define CRYPTCAT_OPEN_VERIFYSIGHASH         0x10000000\n#define CRYPTCAT_OPEN_NO_CONTENT_HCRYPTMSG  0x20000000\n#define CRYPTCAT_OPEN_SORTED                0x40000000\n#define CRYPTCAT_OPEN_FLAGS_MASK            0xffff0000\n\n#define CRYPTCAT_E_AREA_HEADER              0x00000000\n#define CRYPTCAT_E_AREA_MEMBER              0x00010000\n#define CRYPTCAT_E_AREA_ATTRIBUTE           0x00020000\n\n#define CRYPTCAT_E_CDF_UNSUPPORTED          0x00000001\n#define CRYPTCAT_E_CDF_DUPLICATE            0x00000002\n#define CRYPTCAT_E_CDF_TAGNOTFOUND          0x00000004\n\n#define CRYPTCAT_E_CDF_MEMBER_FILE_PATH     0x00010001\n#define CRYPTCAT_E_CDF_MEMBER_INDIRECTDATA  0x00010002\n#define CRYPTCAT_E_CDF_MEMBER_FILENOTFOUND  0x00010004\n\n#define CRYPTCAT_E_CDF_BAD_GUID_CONV        0x00020001\n#define CRYPTCAT_E_CDF_ATTR_TOOFEWVALUES    0x00020002\n#define CRYPTCAT_E_CDF_ATTR_TYPECOMBO       0x00020004\n\n#include <pshpack8.h>\n\ntypedef struct CRYPTCATATTRIBUTE_\n{\n    DWORD cbStruct;\n    LPWSTR pwszReferenceTag;\n    DWORD dwAttrTypeAndAction;\n    DWORD cbValue;\n    BYTE *pbValue;\n    DWORD dwReserved;\n} CRYPTCATATTRIBUTE;\n\ntypedef struct CRYPTCATMEMBER_\n{\n    DWORD cbStruct;\n    LPWSTR pwszReferenceTag;\n    LPWSTR pwszFileName;\n    GUID gSubjectType;\n    DWORD fdwMemberFlags;\n    struct SIP_INDIRECT_DATA_* pIndirectData;\n    DWORD dwCertVersion;\n    DWORD dwReserved;\n    HANDLE hReserved;\n    CRYPT_ATTR_BLOB sEncodedIndirectData;\n    CRYPT_ATTR_BLOB sEncodedMemberInfo;\n} CRYPTCATMEMBER;\n\ntypedef struct CATALOG_INFO_\n{\n    DWORD cbStruct;\n    WCHAR wszCatalogFile[MAX_PATH];\n} CATALOG_INFO;\n\ntypedef struct CRYPTCATCDF_\n{\n    DWORD cbStruct;\n    HANDLE hFile;\n    DWORD dwCurFilePos;\n    DWORD dwLastMemberOffset;\n    BOOL fEOF;\n    LPWSTR pwszResultDir;\n    HANDLE hCATStore;\n} CRYPTCATCDF;\n\n#include <poppack.h>\n\ntypedef void (WINAPI *PFN_CDF_PARSE_ERROR_CALLBACK)(DWORD, DWORD, WCHAR *);\n\nBOOL      WINAPI CryptCATAdminAcquireContext(HCATADMIN*,const GUID*,DWORD);\nBOOL      WINAPI CryptCATAdminAcquireContext2(HCATADMIN*,const GUID*,const WCHAR*,const CERT_STRONG_SIGN_PARA*,DWORD);\nHCATINFO  WINAPI CryptCATAdminAddCatalog(HCATADMIN,PWSTR,PWSTR,DWORD);\nBOOL      WINAPI CryptCATAdminCalcHashFromFileHandle(HANDLE,DWORD*,BYTE*,DWORD);\nBOOL      WINAPI CryptCATAdminCalcHashFromFileHandle2(HCATADMIN,HANDLE,DWORD*,BYTE*,DWORD);\nHCATINFO  WINAPI CryptCATAdminEnumCatalogFromHash(HCATADMIN,BYTE*,DWORD,DWORD,HCATINFO*);\nBOOL      WINAPI CryptCATAdminReleaseCatalogContext(HCATADMIN,HCATINFO,DWORD);\nBOOL      WINAPI CryptCATAdminReleaseContext(HCATADMIN,DWORD);\nBOOL      WINAPI CryptCATAdminRemoveCatalog(HCATADMIN,LPCWSTR,DWORD);\nBOOL      WINAPI CryptCATAdminResolveCatalogPath(HCATADMIN, WCHAR *, CATALOG_INFO *, DWORD);\nBOOL      WINAPI CryptCATCatalogInfoFromContext(HCATINFO, CATALOG_INFO *, DWORD);\nBOOL      WINAPI CryptCATCDFClose(CRYPTCATCDF *);\nCRYPTCATATTRIBUTE * WINAPI CryptCATCDFEnumCatAttributes(CRYPTCATCDF *, CRYPTCATATTRIBUTE *,\n                                                        PFN_CDF_PARSE_ERROR_CALLBACK);\nLPWSTR              WINAPI CryptCATCDFEnumMembersByCDFTagEx(CRYPTCATCDF *, LPWSTR,\n                                                            PFN_CDF_PARSE_ERROR_CALLBACK,\n                                                            CRYPTCATMEMBER **, BOOL, LPVOID);\nCRYPTCATCDF       * WINAPI CryptCATCDFOpen(LPWSTR, PFN_CDF_PARSE_ERROR_CALLBACK);\nBOOL                WINAPI CryptCATClose(HANDLE);\nCRYPTCATATTRIBUTE * WINAPI CryptCATEnumerateAttr(HANDLE, CRYPTCATMEMBER *, CRYPTCATATTRIBUTE *);\nCRYPTCATATTRIBUTE * WINAPI CryptCATEnumerateCatAttr(HANDLE, CRYPTCATATTRIBUTE *);\nCRYPTCATMEMBER    * WINAPI CryptCATEnumerateMember(HANDLE,CRYPTCATMEMBER *);\nCRYPTCATATTRIBUTE * WINAPI CryptCATGetAttrInfo(HANDLE, CRYPTCATMEMBER *, LPWSTR);\nCRYPTCATATTRIBUTE * WINAPI CryptCATGetCatAttrInfo(HANDLE, LPWSTR);\nCRYPTCATMEMBER    * WINAPI CryptCATGetMemberInfo(HANDLE, LPWSTR);\nHANDLE    WINAPI CryptCATOpen(LPWSTR,DWORD,HCRYPTPROV,DWORD,DWORD);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/mscoree.idl",
    "content": "/*\n * Copyright (C) 2007 Francois Gouget\n * Copyright (C) 2008 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\ncpp_quote(\"/* FIXME: #include <gcghost.h> */\")\ncpp_quote(\"/* FIXME: #include <ivalidator.h> */\")\n\ncpp_quote(\"HRESULT     WINAPI CorBindToRuntimeHost(LPCWSTR,LPCWSTR,LPCWSTR,VOID*,DWORD,REFCLSID,REFIID,LPVOID*);\")\ncpp_quote(\"void        WINAPI CorExitProcess(int);\")\ncpp_quote(\"HRESULT     WINAPI GetCORSystemDirectory(LPWSTR,DWORD,DWORD*);\")\ncpp_quote(\"HRESULT     WINAPI GetCORVersion(LPWSTR,DWORD,DWORD*);\")\ncpp_quote(\"HRESULT     WINAPI GetRequestedRuntimeInfo(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,DWORD,LPWSTR,DWORD,DWORD*,LPWSTR,DWORD,DWORD*);\")\ncpp_quote(\"HRESULT     WINAPI LoadLibraryShim(LPCWSTR,LPCWSTR,LPVOID,HMODULE*);\")\ncpp_quote(\"#ifdef WINE_STRICT_PROTOTYPES\")\ncpp_quote(\"typedef HRESULT (__stdcall *FLockClrVersionCallback)(void);\")\ncpp_quote(\"#else\")\ncpp_quote(\"typedef HRESULT (__stdcall *FLockClrVersionCallback)();\")\ncpp_quote(\"#endif\")\ncpp_quote(\"HRESULT     WINAPI LockClrVersion(FLockClrVersionCallback,FLockClrVersionCallback*,FLockClrVersionCallback*);\")\n\ntypedef void* HDOMAINENUM;\n\ntypedef enum RUNTIME_INFO_FLAGS {\n    RUNTIME_INFO_UPGRADE_VERSION = 0x1,\n    RUNTIME_INFO_REQUEST_IA64 = 0x2,\n    RUNTIME_INFO_REQUEST_AMD64 = 0x4,\n    RUNTIME_INFO_REQUEST_X86 = 0x8,\n    RUNTIME_INFO_DONT_RETURN_DIRECTORY = 0x10,\n    RUNTIME_INFO_DONT_RETURN_VERSION = 0x20,\n    RUNTIME_INFO_DONT_SHOW_ERROR_DIALOG = 0x40\n} RUNTIME_INFO_FLAGS;\n\ntypedef HRESULT (__stdcall *FExecuteInAppDomainCallback)([in] void* cookie);\n\n[\n    uuid(F31D1788-C397-4725-87A5-6AF3472C2791),\n    version(1.0),\n    object,\n    local\n]\ninterface IGCThreadControl : IUnknown\n{\n    HRESULT ThreadIsBlockingForSuspension();\n\n    HRESULT SuspensionStarting();\n\n    HRESULT SuspensionEnding(DWORD generation);\n}\n\n[\n    uuid(5513D564-8374-4cb9-AED9-0083F4160A1D),\n    version(1.1),\n    local,\n    object\n]\ninterface IGCHostControl : IUnknown\n{\n    HRESULT RequestVirtualMemLimit([in] SIZE_T nMaxVirtualMemMB,\n                                   [in, out] SIZE_T* nNewMaxVirtualMemMB);\n}\n\n[\n    uuid(23D86786-0BB5-4774-8FB5-E3522ADD6246),\n    version(1.0),\n    local,\n    object\n]\ninterface IDebuggerThreadControl : IUnknown\n{\n    HRESULT ThreadIsBlockingForDebugger();\n\n    HRESULT ReleaseAllRuntimeThreads();\n\n    HRESULT StartBlockingForDebugger(DWORD dwUnused);\n}\n\n[\n    uuid(5C2B07A5-1E98-11d3-872F-00C04F79ED0D),\n    version(1.0),\n    local,\n    object\n]\ninterface ICorConfiguration : IUnknown\n{\n    HRESULT SetGCThreadControl([in] IGCThreadControl* GCThreadControl);\n\n    HRESULT SetGCHostControl([in] IGCHostControl* GCHostControl);\n\n    HRESULT SetDebuggerThreadControl([in] IDebuggerThreadControl* debuggerThreadControl);\n\n    HRESULT AddDebuggerSpecialThread([in] DWORD specialThreadId);\n}\n\n[\n    uuid(9065597E-D1A1-4fb2-B6BA-7E1FCE230F61),\n    version(1.0),\n    local\n]\ninterface ICLRControl : IUnknown\n{\n    HRESULT GetCLRManager([in] REFIID riid, [out] void **ppObject);\n\n        HRESULT SetAppDomainManagerType([in] LPCWSTR appDomainManagerAssembly,\n                          [in] LPCWSTR appDomainManagerType);\n}\n\n[\n    uuid(02CA073C-7079-4860-880A-C2F7A449C991),\n    version(1.0),\n    local\n]\ninterface IHostControl : IUnknown\n{\n    HRESULT GetHostManager( [in] REFIID riid, [out] void **ppObject);\n\n    HRESULT SetAppDomainManager([in] DWORD appDomainID,\n                            [in] IUnknown* appDomainManager);\n}\n\ncpp_quote(\"DEFINE_GUID(CLSID_CorRuntimeHost, 0xcb2f6723,0xab3a,0x11d2,0x9c,0x40,0x00,0xc0,0x4f,0xa3,0x0a,0x3e);\")\n\n[\n    uuid(CB2F6722-AB3A-11d2-9C40-00C04FA30A3E),\n    version(1.0),\n    local,\n    object\n]\ninterface ICorRuntimeHost : IUnknown\n{\n    HRESULT CreateLogicalThreadState();\n    HRESULT DeleteLogicalThreadState();\n    HRESULT SwitchInLogicalThreadState([in] DWORD *fiberCookie);\n\n    HRESULT SwitchOutLogicalThreadState([out] DWORD **fiberCookie);\n\n    HRESULT LocksHeldByLogicalThread( [out] DWORD *pCount );\n\n    HRESULT MapFile([in] HANDLE hFile, [out] HMODULE* mapAddress);\n\n    HRESULT GetConfiguration([out] ICorConfiguration** pConfiguration);\n\n    HRESULT Start();\n\n    HRESULT Stop();\n\n    HRESULT CreateDomain([in] LPCWSTR friendlyName,\n                         [in] IUnknown* identityArray,\n                         [out] IUnknown** appDomain);\n\n    HRESULT GetDefaultDomain([out] IUnknown** pAppDomain);\n\n    HRESULT EnumDomains([out] HDOMAINENUM *hEnum);\n\n    HRESULT NextDomain([in] HDOMAINENUM hEnum, [out] IUnknown** appDomain);\n\n    HRESULT CloseEnum([in] HDOMAINENUM hEnum);\n\n    HRESULT CreateDomainEx([in] LPCWSTR friendlyName,\n                           [in] IUnknown* setup,\n                           [in] IUnknown* evidence,\n                           [out] IUnknown** appDomain);\n\n    HRESULT CreateDomainSetup([out] IUnknown** appDomainSetup);\n\n    HRESULT CreateEvidence([out] IUnknown** evidence);\n\n    HRESULT UnloadDomain([in] IUnknown* appDomain);\n\n    HRESULT CurrentDomain([out] IUnknown** appDomain);\n}\n\ncpp_quote(\"DEFINE_GUID(CLSID_CLRRuntimeHost, 0x90f1a06e,0x7712,0x4762,0x86,0xb5,0x7a,0x5e,0xba,0x6b,0xdb,0x02);\")\n\n[\n    uuid(90f1a06c-7712-4762-86b5-7a5eba6bdb02),\n    local,\n    object\n]\ninterface ICLRRuntimeHost : IUnknown\n{\n    HRESULT Start();\n\n    HRESULT Stop();\n\n    HRESULT SetHostControl([in] IHostControl *pHostControl);\n\n    HRESULT GetCLRControl([out] ICLRControl **pCLRControl);\n\n    HRESULT UnloadAppDomain([in] DWORD dwAppDomainId,\n                            [in] BOOL fWaitUntilDone);\n\n    HRESULT ExecuteInAppDomain([in] DWORD dwAppDomainId,\n                               [in] FExecuteInAppDomainCallback pCallback,\n                               [in] void *cookie);\n\n    HRESULT GetCurrentAppDomainId([out] DWORD *pdwAppDomainId);\n\n    HRESULT ExecuteApplication([in] LPCWSTR pwzAppFullName,\n                               [in] DWORD dwManifestPaths,\n                               [in] LPCWSTR *ppwzManifestPaths,\n                               [in] DWORD dwActivationData,\n                               [in] LPCWSTR *ppwzActivationData,\n                               [out] int *pReturnValue);\n\n    HRESULT ExecuteInDefaultAppDomain([in] LPCWSTR pwzAssemblyPath,\n                                      [in] LPCWSTR pwzTypeName,\n                                      [in] LPCWSTR pwzMethodName,\n                                      [in] LPCWSTR pwzArgument,\n                                      [out] DWORD *pReturnValue);\n}\n\n[\n    uuid(C3FCC19E-A970-11d2-8B5A-00A0C9B7C9C4),\n    local,\n    object\n]\ninterface IManagedObject : IUnknown\n{\n    HRESULT GetSerializedBuffer([out] BSTR *pBSTR);\n\n    HRESULT GetObjectIdentity([out] BSTR *pBSTRGUID,\n                              [out] int *AppDomainID,\n                             [out] int *pCCW);\n}\n"
  },
  {
    "path": "wine/windows/msctf.idl",
    "content": "/*\n * Copyright 2008 Aric Stewart, CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"oaidl.idl\";\nimport \"comcat.idl\";\nimport \"textstor.idl\";\nimport \"ctfutb.idl\";\n#endif\n\ncpp_quote(\"#define TF_E_STACKFULL MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0501)\")\ncpp_quote(\"#define TF_E_DISCONNECTED    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0504)\")\ncpp_quote(\"#define TF_E_ALREADY_EXISTS  MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0506)\")\ncpp_quote(\"#define TF_E_NOLOCK          MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0201)\")\n\ncpp_quote(\"HRESULT WINAPI TF_CreateThreadMgr(ITfThreadMgr **pptim);\")\ncpp_quote(\"HRESULT WINAPI TF_GetThreadMgr(ITfThreadMgr **pptim);\")\ncpp_quote(\"HRESULT WINAPI TF_CreateInputProcessorProfiles(ITfInputProcessorProfiles **ppipr);\")\ncpp_quote(\"HRESULT WINAPI TF_CreateLangBarMgr(ITfLangBarMgr **pppbm);\")\ncpp_quote(\"HRESULT WINAPI TF_CreateLangBarItemMgr(ITfLangBarItemMgr **pplbim);\")\ncpp_quote(\"HRESULT WINAPI TF_InvalidAssemblyListCacheIfExist(void);\")\n\ncpp_quote(\"EXTERN_C const GUID GUID_PROP_TEXTOWNER;\")\ncpp_quote(\"DEFINE_GUID(GUID_PROP_ATTRIBUTE,0x34b45670,0x7526,0x11d2,0xa1,0x47,0x00,0x10,0x5a,0x27,0x99,0xb5);\")\ncpp_quote(\"EXTERN_C const GUID GUID_PROP_LANGID;\")\ncpp_quote(\"EXTERN_C const GUID GUID_PROP_READING;\")\ncpp_quote(\"EXTERN_C const GUID GUID_PROP_COMPOSING;\")\n\ncpp_quote(\"EXTERN_C const CLSID CLSID_TF_ThreadMgr;\")\ncpp_quote(\"EXTERN_C const CLSID CLSID_TF_InputProcessorProfiles;\")\ncpp_quote(\"EXTERN_C const CLSID CLSID_TF_LangBarMgr;\")\ncpp_quote(\"EXTERN_C const CLSID CLSID_TF_CategoryMgr;\")\ncpp_quote(\"EXTERN_C const CLSID CLSID_TF_DisplayAttributeMgr;\")\n\n/* GUIDs for Compartments */\ncpp_quote(\"EXTERN_C const GUID GUID_COMPARTMENT_KEYBOARD_DISABLED;\")\ncpp_quote(\"EXTERN_C const GUID GUID_COMPARTMENT_KEYBOARD_OPENCLOSE;\")\ncpp_quote(\"EXTERN_C const GUID GUID_COMPARTMENT_HANDWRITING_OPENCLOSE;\")\ncpp_quote(\"EXTERN_C const GUID GUID_COMPARTMENT_SPEECH_DISABLED;\")\ncpp_quote(\"EXTERN_C const GUID GUID_COMPARTMENT_SPEECH_OPENCLOSE;\")\ncpp_quote(\"EXTERN_C const GUID GUID_COMPARTMENT_SPEECH_GLOBALSTATE;\")\ncpp_quote(\"EXTERN_C const GUID GUID_COMPARTMENT_PERSISTMENUENABLED;\")\ncpp_quote(\"EXTERN_C const GUID GUID_COMPARTMENT_EMPTYCONTEXT;\")\ncpp_quote(\"EXTERN_C const GUID GUID_COMPARTMENT_TIPUISTATUS;\")\n\n/* GUIDs for Categories */\ncpp_quote(\"EXTERN_C const GUID GUID_TFCAT_TIP_KEYBOARD;\")\ncpp_quote(\"EXTERN_C const GUID GUID_TFCAT_TIP_SPEECH;\")\ncpp_quote(\"EXTERN_C const GUID GUID_TFCAT_TIP_HANDWRITING;\")\ncpp_quote(\"EXTERN_C const GUID GUID_TFCAT_DISPLAYATTRIBUTEPROVIDER;\")\n\ntypedef [uuid(7213778c-7bb0-4270-b050-6189ee594e97)]  DWORD TfEditCookie;\ntypedef [uuid(de403c21-89fd-4f85-8b87-64584d063fbc)] DWORD TfClientId;\ntypedef [uuid(88a9c478-f3ec-4763-8345-cd9250443f8d)] DWORD TfGuidAtom;\n\ncpp_quote(\"#define TF_MOD_ALT                   0x0001\")\ncpp_quote(\"#define TF_MOD_CONTROL               0x0002\")\ncpp_quote(\"#define TF_MOD_SHIFT                 0x0004\")\ncpp_quote(\"#define TF_MOD_RALT                  0x0008\")\ncpp_quote(\"#define TF_MOD_RCONTROL              0x0010\")\ncpp_quote(\"#define TF_MOD_RSHIFT                0x0020\")\ncpp_quote(\"#define TF_MOD_LALT                  0x0040\")\ncpp_quote(\"#define TF_MOD_LCONTROL              0x0080\")\ncpp_quote(\"#define TF_MOD_LSHIFT                0x0100\")\ncpp_quote(\"#define TF_MOD_ON_KEYUP              0x0200\")\ncpp_quote(\"#define TF_MOD_IGNORE_ALL_MODIFIER   0x0400\")\n\ncpp_quote(\"#define TF_PROFILETYPE_INPUTPROCESSOR  0x0001\")\ncpp_quote(\"#define TF_PROFILETYPE_KEYBOARDLAYOUT  0x0002\")\n\ncpp_quote(\"#define TF_IPSINK_FLAG_ACTIVE 0x0001\")\n\ninterface ITfDocumentMgr;\ninterface ITfContext;\ninterface IEnumTfDocumentMgrs;\ninterface IEnumTfContexts;\ninterface ITfCompartmentMgr;\ninterface ITfEditSession;\ninterface ITfRange;\ninterface ITfProperty;\ninterface ITfReadOnlyProperty;\ninterface IEnumTfLanguageProfiles;\ninterface ITfCompositionView;\ninterface ITfKeyEventSink;\ninterface ITfPersistentPropertyLoaderACP;\ninterface ITfRangeACP;\n\ncpp_quote(\"#if 0\")\ntypedef [uuid(4f5d560f-5ab5-4dde-8c4d-404592857ab0)] UINT_PTR HKL;\ncpp_quote(\"#endif\")\n\ntypedef [uuid(e26d9e1d-691e-4f29-90d7-338dcf1f8cef)] struct TF_PERSISTENT_PROPERTY_HEADER_ACP\n{\n    GUID guidType;\n    LONG ichStart;\n    LONG cch;\n    ULONG cb;\n    DWORD dwPrivate;\n    CLSID clsidTIP;\n} TF_PERSISTENT_PROPERTY_HEADER_ACP;\n\ntypedef [uuid(e1b5808d-1e46-4c19-84dc-68c5f5978cc8)] struct TF_LANGUAGEPROFILE\n{\n    CLSID clsid;\n    LANGID langid;\n    GUID catid;\n    BOOL fActive;\n    GUID guidProfile;\n} TF_LANGUAGEPROFILE;\n\ntypedef [uuid(77c12f95-b783-450d-879f-1cd2362c6521)] struct TF_PRESERVEDKEY\n{\n    UINT uVKey;\n    UINT uModifiers;\n} TF_PRESERVEDKEY;\n\ntypedef [uuid(5a886226-ae9a-489b-b991-2b1e25ee59a9)]  enum { TF_ANCHOR_START = 0, TF_ANCHOR_END = 1 } TfAnchor;\n\n[\n    object,\n    uuid(101d6610-0990-11d3-8df0-00105a2799b5),\n    pointer_default(unique)\n]\ninterface ITfFunctionProvider : IUnknown\n{\n    HRESULT GetType(\n        [out] GUID *guid);\n\n    HRESULT GetDescription(\n        [out] BSTR *desc);\n\n    HRESULT GetFunction(\n        [in] REFGUID guid,\n        [in] REFIID riid,\n        [out, iid_is(riid)] IUnknown **func);\n}\n\n[\n    object,\n    uuid(e4b24db0-0990-11d3-8df0-00105a2799b5),\n    pointer_default(unique)\n]\ninterface IEnumTfFunctionProviders : IUnknown\n{\n    HRESULT Clone(\n        [out] IEnumTfFunctionProviders **ret);\n\n    HRESULT Next(\n        [in] ULONG count,\n        [out, size_is(count), length_is(*fetched)] ITfFunctionProvider **prov,\n        [out] ULONG *fetched);\n\n    HRESULT Reset();\n\n    HRESULT Skip(\n        [in] ULONG count);\n}\n\n[\n    object,\n    uuid(aa80e801-2021-11d2-93e0-0060b067b86e),\n    pointer_default(unique)\n]\ninterface ITfThreadMgr: IUnknown\n{\n    HRESULT Activate(\n        [out] TfClientId *ptid);\n\n    HRESULT Deactivate();\n\n    HRESULT CreateDocumentMgr(\n        [out] ITfDocumentMgr **ppdim);\n\n    HRESULT EnumDocumentMgrs(\n        [out] IEnumTfDocumentMgrs **ppEnum);\n\n    HRESULT GetFocus(\n        [out] ITfDocumentMgr **ppdimFocus);\n\n    HRESULT SetFocus(\n        [in] ITfDocumentMgr *pdimFocus);\n\n    HRESULT AssociateFocus(\n        [in] HWND hwnd,\n        [in, unique] ITfDocumentMgr *pdimNew,\n        [out] ITfDocumentMgr **ppdimPrev);\n\n    HRESULT IsThreadFocus(\n        [out] BOOL *pfThreadFocus);\n\n    HRESULT GetFunctionProvider(\n        [in] REFCLSID clsid,\n        [out] ITfFunctionProvider **ppFuncProv);\n\n    HRESULT EnumFunctionProviders(\n        [out] IEnumTfFunctionProviders **ppEnum);\n\n    HRESULT GetGlobalCompartment(\n        [out] ITfCompartmentMgr **ppCompMgr);\n}\n\n[\n    object,\n    uuid(3e90ade3-7594-4cb0-bb58-69628f5f458c),\n    pointer_default(unique)\n]\ninterface ITfThreadMgrEx : ITfThreadMgr\n{\n    HRESULT ActivateEx(\n        [out] TfClientId *id,\n        [in] DWORD flags);\n    HRESULT GetActiveFlags(\n        [out] DWORD *flags);\n}\n\n[\n    object,\n    uuid(d7540241-f9a1-4364-befc-dbcd2c4395b7),\n    pointer_default(unique)\n]\ninterface ITfCompositionView : IUnknown\n{\n    HRESULT GetOwnerClsid([out] CLSID *pclsid);\n\n    HRESULT GetRange([out] ITfRange **ppRange);\n}\n\n[\n    object,\n    uuid(aa80e7f4-2021-11d2-93e0-0060b067b86e),\n    pointer_default(unique)\n]\ninterface ITfDocumentMgr: IUnknown\n{\n    HRESULT CreateContext(\n        [in] TfClientId tidOwner,\n        [in] DWORD dwFlags,\n        [in, unique] IUnknown *punk,\n        [out] ITfContext **ppic,\n        [out] TfEditCookie *pecTextStore);\n\n    HRESULT Push(\n        [in] ITfContext *pic);\n\n    const DWORD TF_POPF_ALL = 0x0001;\n\n    HRESULT Pop(\n        [in] DWORD dwFlags);\n\n    HRESULT GetTop(\n        [out] ITfContext **ppic);\n\n    HRESULT GetBase(\n        [out] ITfContext **ppic);\n\n    HRESULT EnumContexts(\n        [out] IEnumTfContexts **ppEnum);\n}\n\n[\n    object,\n    uuid(2433bf8e-0f9b-435c-ba2c-180611978c30),\n    pointer_default(unique)\n]\ninterface ITfContextView : IUnknown\n{\n    HRESULT GetRangeFromPoint(\n        [in] TfEditCookie cookie,\n        [in] const POINT *pt,\n        [in] DWORD flags,\n        [out] ITfRange **range);\n\n    HRESULT GetTextExt(\n        [in] TfEditCookie cookie,\n        [in] ITfRange *range,\n        [out] RECT *rect,\n        [out] BOOL *clipped);\n\n    HRESULT GetScreenExt(\n        [out] RECT *rect);\n\n    HRESULT GetWnd(\n        [out] HWND *hwnd);\n}\n\n[\n    object,\n    uuid(f0c0f8dd-cf38-44e1-bb0f-68cf0d551c78),\n    pointer_default(unique)\n]\ninterface IEnumTfContextViews : IUnknown\n{\n    HRESULT Clone(\n        [out] IEnumTfContextViews **ret);\n\n    HRESULT Next(\n        [in] ULONG count,\n        [out, size_is(count), length_is(*fetched)] ITfContextView **views,\n        [out] ULONG *fetched);\n\n    HRESULT Reset();\n\n    HRESULT Skip(\n        [in] ULONG count);\n}\n\n[\n    object,\n    uuid(19188cb0-aca9-11d2-afc5-00105a2799b5),\n    pointer_default(unique)\n]\ninterface IEnumTfProperties : IUnknown\n{\n    HRESULT Clone(\n        [out] IEnumTfProperties **ret);\n\n    HRESULT Next(\n        [in] ULONG count,\n        [out, size_is(count), length_is(*fetched)] ITfProperty **props,\n        [out] ULONG *fetched);\n\n    HRESULT Reset();\n\n    HRESULT Skip(\n        [in] ULONG count);\n}\n\n[\n    object,\n    uuid(463a506d-6992-49d2-9b88-93d55e70bb16),\n    pointer_default(unique)\n]\ninterface ITfRangeBackup : IUnknown\n{\n    HRESULT Restore(\n        [in] TfEditCookie cookie,\n        [in] ITfRange *range);\n}\n\n[\n    object,\n    uuid(aa80e901-2021-11d2-93e0-0060b067b86e),\n    pointer_default(unique)\n]\ninterface ITextStoreACPServices : IUnknown\n{\n    HRESULT Serialize(\n        [in] ITfProperty *prop,\n        [in] ITfRange *range,\n        [out] TF_PERSISTENT_PROPERTY_HEADER_ACP *header,\n        [in] IStream *stream);\n\n    HRESULT Unserialize(\n        [in] ITfProperty *prop,\n        [in] const TF_PERSISTENT_PROPERTY_HEADER_ACP *header,\n        [in] IStream *stream,\n        [in] ITfPersistentPropertyLoaderACP *loader);\n\n    HRESULT ForceLoadProperty(\n        [in] ITfProperty *prop);\n\n    HRESULT CreateRange(\n        [in] LONG start,\n        [in] LONG end,\n        [out] ITfRangeACP **range);\n}\n\n[\n    object,\n    uuid(aa80e7fd-2021-11d2-93e0-0060b067b86e),\n    pointer_default(unique)\n]\ninterface ITfContext : IUnknown\n{\n    const DWORD TF_ES_ASYNCDONTCARE = 0x0;\n    const DWORD TF_ES_SYNC          = 0x1;\n    const DWORD TF_ES_READ          = 0x2;\n    const DWORD TF_ES_READWRITE     = 0x6;\n    const DWORD TF_ES_ASYNC         = 0x8;\n\n    HRESULT RequestEditSession(\n        [in] TfClientId tid,\n        [in] ITfEditSession *pes,\n        [in] DWORD dwFlags,\n        [out] HRESULT *phrSession);\n\n    HRESULT InWriteSession(\n        [in] TfClientId tid,\n        [out] BOOL *pfWriteSession);\n\n    typedef [uuid(1690be9b-d3e9-49f6-8d8b-51b905af4c43)] enum { TF_AE_NONE, TF_AE_START, TF_AE_END } TfActiveSelEnd;\n\n    typedef [uuid(36ae42a4-6989-4bdc-b48a-6137b7bf2e42)] struct TF_SELECTIONSTYLE\n    {\n        TfActiveSelEnd ase;\n        BOOL fInterimChar;\n    } TF_SELECTIONSTYLE;\n\n    typedef [uuid(75eb22f2-b0bf-46a8-8006-975a3b6efcf1)] struct TF_SELECTION\n    {\n        ITfRange *range;\n        TF_SELECTIONSTYLE style;\n    } TF_SELECTION;\n\n    const ULONG TF_DEFAULT_SELECTION =  TS_DEFAULT_SELECTION;\n\n    HRESULT GetSelection(\n        [in] TfEditCookie ec,\n        [in] ULONG ulIndex,\n        [in] ULONG ulCount,\n        [out, size_is(ulCount), length_is(*pcFetched)] TF_SELECTION *pSelection,\n        [out] ULONG *pcFetched);\n\n    HRESULT SetSelection(\n        [in] TfEditCookie ec,\n        [in] ULONG ulCount,\n        [in, size_is(ulCount)] const TF_SELECTION *pSelection);\n\n    HRESULT GetStart(\n        [in] TfEditCookie ec,\n        [out] ITfRange **ppStart);\n\n    HRESULT GetEnd(\n        [in] TfEditCookie ec,\n        [out] ITfRange **ppEnd);\n\n    typedef [uuid(bc7d979a-846a-444d-afef-0a9bfa82b961)] TS_STATUS TF_STATUS;\n    const DWORD TF_SD_READONLY    = TS_SD_READONLY;\n    const DWORD TF_SD_LOADING     = TS_SD_LOADING;\n    const DWORD TF_SS_DISJOINTSEL = TS_SS_DISJOINTSEL;\n    const DWORD TF_SS_REGIONS     = TS_SS_REGIONS;\n    const DWORD TF_SS_TRANSITORY  = TS_SS_TRANSITORY;\n\n\n    HRESULT GetActiveView(\n        [out] ITfContextView **ppView);\n\n    HRESULT EnumViews(\n        [out] IEnumTfContextViews **ppEnum);\n\n    HRESULT GetStatus(\n        [out] TF_STATUS *pdcs);\n\n    HRESULT GetProperty(\n        [in] REFGUID guidProp,\n        [out] ITfProperty **ppProp);\n\n    HRESULT GetAppProperty(\n        [in] REFGUID guidProp,\n        [out] ITfReadOnlyProperty **ppProp);\n\n    HRESULT TrackProperties(\n        [in, size_is(cProp)] const GUID **prgProp,\n        [in] ULONG cProp,\n        [in, size_is(cAppProp)] const GUID **prgAppProp,\n        [in] ULONG cAppProp,\n        [out] ITfReadOnlyProperty **ppProperty);\n\n    HRESULT EnumProperties(\n        [out] IEnumTfProperties **ppEnum);\n\n    HRESULT GetDocumentMgr(\n        [out] ITfDocumentMgr **ppDm);\n\n    HRESULT CreateRangeBackup(\n        [in] TfEditCookie ec,\n        [in] ITfRange *pRange,\n        [out] ITfRangeBackup **ppBackup);\n}\n\nconst DWORD TF_INVALID_COOKIE = 0xffffffff;\n\n[\n  object,\n  uuid(4ea48a35-60ae-446f-8fd6-e6a8d82459f7),\n  pointer_default(unique)\n]\ninterface ITfSource : IUnknown\n{\n    HRESULT AdviseSink(\n        [in] REFIID riid,\n        [in, iid_is(riid)] IUnknown *punk,\n        [out] DWORD *pdwCookie);\n\n    HRESULT UnadviseSink(\n        [in] DWORD dwCookie);\n}\n\n[\n  object,\n  local,\n  uuid(1F02B6C5-7842-4EE6-8A0B-9A24183A95CA),\n  pointer_default(unique)\n]\ninterface ITfInputProcessorProfiles : IUnknown\n{\n    HRESULT Register(\n        [in] REFCLSID rclsid);\n\n    HRESULT Unregister(\n        [in] REFCLSID rclsid);\n\n    HRESULT AddLanguageProfile(\n        [in] REFCLSID rclsid,\n        [in] LANGID langid,\n        [in] REFGUID guidProfile,\n        [in, size_is(cchDesc)] const WCHAR *pchDesc,\n        [in] ULONG cchDesc,\n        [in, size_is(cchFile)] const WCHAR *pchIconFile,\n        [in] ULONG cchFile,\n        [in] ULONG uIconIndex);\n\n    HRESULT RemoveLanguageProfile(\n        [in] REFCLSID rclsid,\n        [in] LANGID langid,\n        [in] REFGUID guidProfile);\n\n    HRESULT EnumInputProcessorInfo(\n        [out] IEnumGUID **ppEnum);\n\n    HRESULT GetDefaultLanguageProfile(\n        [in] LANGID langid,\n        [in] REFGUID catid,\n        [out] CLSID *pclsid,\n        [out] GUID *pguidProfile);\n\n    HRESULT SetDefaultLanguageProfile(\n        [in] LANGID langid,\n        [in] REFCLSID rclsid,\n        [in] REFGUID guidProfiles);\n\n    HRESULT ActivateLanguageProfile(\n        [in] REFCLSID rclsid,\n        [in] LANGID langid,\n        [in] REFGUID guidProfiles);\n\n    HRESULT GetActiveLanguageProfile(\n        [in] REFCLSID rclsid,\n        [out] LANGID *plangid,\n        [out] GUID *pguidProfile);\n\n    HRESULT GetLanguageProfileDescription(\n        [in] REFCLSID rclsid,\n        [in] LANGID langid,\n        [in] REFGUID guidProfile,\n        [out] BSTR *pbstrProfile);\n\n    HRESULT GetCurrentLanguage(\n        [out] LANGID *plangid);\n\n    HRESULT ChangeCurrentLanguage(\n        [in] LANGID langid);\n\n    HRESULT GetLanguageList(\n        [out] LANGID **ppLangId,\n        [out] ULONG *pulCount);\n\n    HRESULT EnumLanguageProfiles(\n        [in] LANGID langid,\n        [out] IEnumTfLanguageProfiles **ppEnum);\n\n    HRESULT EnableLanguageProfile(\n        [in] REFCLSID rclsid,\n        [in] LANGID langid,\n        [in] REFGUID guidProfile,\n        [in] BOOL fEnable);\n\n    HRESULT IsEnabledLanguageProfile(\n        [in] REFCLSID rclsid,\n        [in] LANGID langid,\n        [in] REFGUID guidProfile,\n        [out] BOOL *pfEnable);\n\n    HRESULT EnableLanguageProfileByDefault(\n        [in] REFCLSID rclsid,\n        [in] LANGID langid,\n        [in] REFGUID guidProfile,\n        [in] BOOL fEnable);\n\n    HRESULT SubstituteKeyboardLayout(\n        [in] REFCLSID rclsid,\n        [in] LANGID langid,\n        [in] REFGUID guidProfile,\n        [in] HKL hKL);\n}\n\ntypedef [uuid(44d2825a-10e5-43b2-877f-6cb2f43b7e7e)]\nstruct TF_INPUTPROCESSORPROFILE {\n    DWORD dwProfileType;\n    LANGID langid;\n    CLSID clsid;\n    GUID guidProfile;\n    GUID catid;\n    HKL hklSubstitute;\n    DWORD dwCaps;\n    HKL hkl;\n    DWORD dwFlags;\n} TF_INPUTPROCESSORPROFILE;\n\n[\n    object,\n    uuid(71c6e74d-0f28-11d8-a82a-00065b84435c),\n    pointer_default(unique)\n]\ninterface IEnumTfInputProcessorProfiles : IUnknown\n{\n    HRESULT Clone(\n        [out] IEnumTfInputProcessorProfiles **ppEnum);\n\n    HRESULT Next(\n        [in] ULONG ulCount,\n        [out, size_is(ulCount), length_is(*pcFetch)] TF_INPUTPROCESSORPROFILE *pProfile,\n        [out] ULONG *pcFetch);\n\n    HRESULT Reset();\n\n    HRESULT Skip(\n        [in] ULONG ulCount);\n}\n\n[\n    object,\n    uuid(71c6e74c-0f28-11d8-a82a-00065b84435c),\n    pointer_default(unique)\n]\ninterface ITfInputProcessorProfileMgr : IUnknown\n{\n    HRESULT ActivateProfile(\n        [in] DWORD dwProfileType,\n        [in] LANGID langid,\n        [in] REFCLSID clsid,\n        [in] REFGUID guidProfile,\n        [in] HKL hkl,\n        [in] DWORD dwFlags);\n\n    HRESULT DeactivateProfile(\n        [in] DWORD dwProfileType,\n        [in] LANGID langid,\n        [in] REFCLSID clsid,\n        [in] REFGUID guidProfile,\n        [in] HKL hkl,\n        [in] DWORD dwFlags);\n\n    HRESULT GetProfile(\n        [in] DWORD dwProfileType,\n        [in] LANGID langid,\n        [in] REFCLSID clsid,\n        [in] REFGUID guidProfile,\n        [in] HKL hkl,\n        [out] TF_INPUTPROCESSORPROFILE *pProfile);\n\n\n    HRESULT EnumProfiles(\n        [in] LANGID langid,\n        [out] IEnumTfInputProcessorProfiles **ppEnum);\n\n    HRESULT ReleaseInputProcessor(\n        [in] REFCLSID rclsid,\n        [in] DWORD dwFlags);\n\n    HRESULT RegisterProfile(\n        [in] REFCLSID rclsid,\n        [in] LANGID langid,\n        [in] REFGUID guidProfile,\n        [in, size_is(cchDesc)] const WCHAR *pchDesc,\n        [in] ULONG cchDesc,\n        [in, size_is(cchFile)] const WCHAR *pchIconFile,\n        [in] ULONG cchFile,\n        [in] ULONG uIconIndex,\n        [in] HKL hklsubstitute,\n        [in] DWORD dwPreferredLayout,\n        [in] BOOL bEnabledByDefault,\n        [in] DWORD dwFlags);\n\n    HRESULT UnregisterProfile(\n        [in] REFCLSID rclsid,\n        [in] LANGID langid,\n        [in] REFGUID guidProfile,\n        [in] DWORD dwFlags);\n\n    HRESULT GetActiveProfile(\n        [in] REFGUID catid,\n        [out] TF_INPUTPROCESSORPROFILE *pProfile);\n}\n\ntypedef [uuid(c4cc07f1-80cc-4a7b-bc54-98512782cbe3)]\nenum {\n    TF_LS_NONE      = 0,\n    TF_LS_SOLID     = 1,\n    TF_LS_DOT       = 2,\n    TF_LS_DASH      = 3,\n    TF_LS_SQUIGGLE  = 4\n} TF_DA_LINESTYLE;\n\ntypedef [uuid(d9b92e21-084a-401b-9c64-1e6dad91a1ab)]\nenum {\n    TF_CT_NONE      = 0,\n    TF_CT_SYSCOLOR  = 1,\n    TF_CT_COLORREF  = 2\n} TF_DA_COLORTYPE;\n\ntypedef [uuid(90d0cb5e-6520-4a0f-b47c-c39bd955f0d6)]\nstruct TF_DA_COLOR {\n    TF_DA_COLORTYPE type;\n    [switch_type(TF_DA_COLORTYPE), switch_is(type)]\n    union {\n        [case(TF_CT_SYSCOLOR)] int nIndex;\n        [case(TF_CT_COLORREF)] COLORREF cr;\n    };\n} TF_DA_COLOR;\n\ntypedef [uuid(33d2fe4b-6c24-4f67-8d75-3bc1819e4126)]\nenum {\n    TF_ATTR_INPUT                = 0,\n    TF_ATTR_TARGET_CONVERTED     = 1,\n    TF_ATTR_CONVERTED            = 2,\n    TF_ATTR_TARGET_NOTCONVERTED  = 3,\n    TF_ATTR_INPUT_ERROR          = 4,\n    TF_ATTR_FIXEDCONVERTED       = 5,\n    TF_ATTR_OTHER                = -1\n} TF_DA_ATTR_INFO;\n\ntypedef [uuid(1bf1c305-419b-4182-a4d2-9bfadc3f021f)]\nstruct TF_DISPLAYATTRIBUTE {\n    TF_DA_COLOR      crText;\n    TF_DA_COLOR      crBk;\n    TF_DA_LINESTYLE  lsStyle;\n    BOOL             fBoldLine;\n    TF_DA_COLOR      crLine;\n    TF_DA_ATTR_INFO  bAttr;\n} TF_DISPLAYATTRIBUTE;\n\n[\n    object,\n    uuid(70528852-2f26-4aea-8c96-215150578932),\n    pointer_default(unique)\n]\ninterface ITfDisplayAttributeInfo : IUnknown\n{\n    HRESULT GetGUID([out] GUID *pguid);\n\n    HRESULT GetDescription([out] BSTR *pbstrDesc);\n\n    HRESULT GetAttributeInfo([out] TF_DISPLAYATTRIBUTE *pda);\n\n    HRESULT SetAttributeInfo([in] const TF_DISPLAYATTRIBUTE *pda);\n\n    HRESULT Reset();\n}\n\n[\n    object,\n    uuid(7cef04d7-cb75-4e80-a7ab-5f5bc7d332de),\n    pointer_default(unique)\n]\ninterface IEnumTfDisplayAttributeInfo : IUnknown\n{\n    HRESULT Clone([out] IEnumTfDisplayAttributeInfo **ppEnum);\n\n    HRESULT Next(\n            [in] ULONG ulCount,\n            [out, size_is(ulCount), length_is(*pcFetched)] ITfDisplayAttributeInfo **rgInfo,\n            [out] ULONG *pcFetched);\n\n    HRESULT Reset();\n\n    HRESULT Skip([in] ULONG ulCount);\n}\n\n[\n    object,\n    local,\n    uuid(8ded7393-5db1-475c-9e71-a39111b0ff67),\n    pointer_default(unique)\n]\ninterface ITfDisplayAttributeMgr : IUnknown\n{\n    HRESULT OnUpdateInfo();\n\n    HRESULT EnumDisplayAttributeInfo([out] IEnumTfDisplayAttributeInfo **ppEnum);\n\n    HRESULT GetDisplayAttributeInfo(\n            [in] REFGUID guid,\n            [out] ITfDisplayAttributeInfo **ppInfo,\n            [out] CLSID *pclsidOwner);\n\n}\n\n[\n  object,\n  local,\n  uuid(c3acefb5-f69d-4905-938f-fcadcf4be830),\n  pointer_default(unique)\n]\ninterface ITfCategoryMgr : IUnknown\n{\n    HRESULT RegisterCategory([in] REFCLSID rclsid,\n                             [in] REFGUID rcatid,\n                             [in] REFGUID rguid);\n\n    HRESULT UnregisterCategory([in] REFCLSID rclsid,\n                               [in] REFGUID rcatid,\n                               [in] REFGUID rguid);\n\n    HRESULT EnumCategoriesInItem([in] REFGUID rguid,\n                                 [out] IEnumGUID **ppEnum);\n\n    HRESULT EnumItemsInCategory([in] REFGUID rcatid,\n                                [out] IEnumGUID **ppEnum);\n\n    HRESULT FindClosestCategory([in] REFGUID rguid,\n                                [out] GUID *pcatid,\n                                [in, size_is(ulCount)] const GUID **ppcatidList,\n                                [in] ULONG ulCount);\n\n    HRESULT RegisterGUIDDescription([in] REFCLSID rclsid,\n                                    [in] REFGUID rguid,\n                                    [in, size_is(cch)] const WCHAR *pchDesc,\n                                    [in] ULONG cch);\n\n    HRESULT UnregisterGUIDDescription([in] REFCLSID rclsid,\n                                      [in] REFGUID rguid);\n\n    HRESULT GetGUIDDescription([in] REFGUID rguid,\n                               [out] BSTR *pbstrDesc);\n\n    HRESULT RegisterGUIDDWORD([in] REFCLSID rclsid,\n                              [in] REFGUID rguid,\n                              [in] DWORD dw);\n\n    HRESULT UnregisterGUIDDWORD([in] REFCLSID rclsid,\n                                [in] REFGUID rguid);\n\n    HRESULT GetGUIDDWORD([in] REFGUID rguid,\n                         [out] DWORD *pdw);\n\n    HRESULT RegisterGUID([in] REFGUID rguid,\n                         [out] TfGuidAtom *pguidatom);\n\n    HRESULT GetGUID([in] TfGuidAtom guidatom,\n                    [out] GUID *pguid);\n\n    HRESULT IsEqualTfGuidAtom([in] TfGuidAtom guidatom,\n                              [in] REFGUID rguid,\n                              [out] BOOL *pfEqual);\n}\n\n[\n    object,\n    uuid(f99d3f40-8e32-11d2-bf46-00105a2799b5),\n    pointer_default(unique)\n]\ninterface IEnumTfRanges : IUnknown\n{\n    HRESULT Clone([out] IEnumTfRanges **ppEnum);\n\n    HRESULT Next(\n            [in] ULONG ulCount,\n            [out, size_is(ulCount), length_is(*pcFetched)] ITfRange **ppRange,\n            [out] ULONG *pcFetched);\n\n    HRESULT Reset();\n\n    HRESULT Skip(ULONG ulCount);\n}\n\n[\n    object,\n    uuid(42d4d099-7c1a-4a89-b836-6c6f22160df0),\n    pointer_default(unique)\n]\ninterface ITfEditRecord : IUnknown\n{\n    const DWORD TF_GTP_INCL_TEXT = 0x1;\n\n    HRESULT GetSelectionStatus(\n        [out] BOOL *changed);\n\n    HRESULT GetTextAndPropertyUpdates(\n        [in] DWORD flags,\n        [in, size_is(count)] const GUID **props,\n        [in] ULONG count,\n        [out] IEnumTfRanges **ret);\n}\n\n[\n  object,\n  uuid(8127d409-ccd3-4683-967a-b43d5b482bf7),\n  pointer_default(unique)\n]\ninterface ITfTextEditSink : IUnknown\n{\n    HRESULT OnEndEdit(\n        [in] ITfContext *pic,\n        [in] TfEditCookie ecReadOnly,\n        [in] ITfEditRecord *pEditRecord);\n}\n\n[\n    object,\n    uuid(5F20AA40-B57A-4F34-96AB-3576F377CC79),\n    pointer_default(unique)\n]\ninterface ITfContextOwnerCompositionSink : IUnknown\n{\n    HRESULT OnStartComposition(\n        [in] ITfCompositionView *pComposition,\n        [out] BOOL *pfOk);\n\n    HRESULT OnUpdateComposition(\n        [in] ITfCompositionView *pComposition,\n        [in] ITfRange *pRangeNew);\n\n    HRESULT OnEndComposition(\n        [in] ITfCompositionView *pComposition);\n}\n\n[\n    object,\n    uuid(b246cb75-a93e-4652-bf8c-b3fe0cfd7e57),\n    pointer_default(unique)\n]\ninterface ITfActiveLanguageProfileNotifySink : IUnknown\n{\n    HRESULT OnActivated(\n        [in] REFCLSID clsid,\n        [in] REFGUID guidProfile,\n        [in] BOOL fActivated);\n}\n\n[\n  object,\n  uuid(3d61bf11-ac5f-42c8-a4cb-931bcc28c744),\n  pointer_default(unique)\n]\ninterface IEnumTfLanguageProfiles : IUnknown\n{\n    HRESULT Clone(\n        [out] IEnumTfLanguageProfiles **ppEnum);\n\n    HRESULT Next(\n        [in] ULONG ulCount,\n        [out, size_is(ulCount), length_is(*pcFetch)] TF_LANGUAGEPROFILE *pProfile,\n        [out] ULONG *pcFetch);\n\n    HRESULT Reset();\n\n    HRESULT Skip(\n        [in] ULONG ulCount);\n}\n\n[\n  object,\n  local,\n  uuid(aa80e7f7-2021-11d2-93e0-0060b067b86e),\n  pointer_default(unique)\n]\ninterface ITfTextInputProcessor : IUnknown\n{\n    HRESULT Activate(\n        [in] ITfThreadMgr *ptim,\n        [in] TfClientId tid);\n\n    HRESULT Deactivate();\n}\n\n[\n  object,\n  uuid(aa80e80e-2021-11d2-93e0-0060b067b86e),\n  pointer_default(unique)\n]\ninterface ITfThreadMgrEventSink : IUnknown\n{\n    HRESULT OnInitDocumentMgr(\n        [in] ITfDocumentMgr *pdim);\n\n    HRESULT OnUninitDocumentMgr(\n        [in] ITfDocumentMgr *pdim);\n\n    HRESULT OnSetFocus(\n        [in] ITfDocumentMgr *pdimFocus,\n        [in] ITfDocumentMgr *pdimPrevFocus);\n\n    HRESULT OnPushContext(\n        [in] ITfContext *pic);\n\n    HRESULT OnPopContext(\n        [in] ITfContext *pic);\n}\n\n[\n  object,\n  local,\n  uuid(aa80e7f0-2021-11d2-93e0-0060b067b86e),\n  pointer_default(unique)\n]\ninterface ITfKeystrokeMgr : IUnknown\n{\n    HRESULT AdviseKeyEventSink(\n        [in] TfClientId tid,\n        [in] ITfKeyEventSink *pSink,\n        [in] BOOL fForeground);\n\n    HRESULT UnadviseKeyEventSink(\n        [in] TfClientId tid);\n\n    HRESULT GetForeground(\n        [out] CLSID *pclsid);\n\n    HRESULT TestKeyDown(\n        [in] WPARAM wParam,\n        [in] LPARAM lParam,\n        [out] BOOL *pfEaten);\n\n    HRESULT TestKeyUp(\n        [in] WPARAM wParam,\n        [in] LPARAM lParam,\n        [out] BOOL *pfEaten);\n\n    HRESULT KeyDown(\n        [in] WPARAM wParam,\n        [in] LPARAM lParam,\n        [out] BOOL *pfEaten);\n\n    HRESULT KeyUp(\n        [in] WPARAM wParam,\n        [in] LPARAM lParam,\n        [out] BOOL *pfEaten);\n\n    HRESULT GetPreservedKey(\n        [in] ITfContext *pic,\n        [in] const TF_PRESERVEDKEY *pprekey,\n        [out] GUID *pguid);\n\n    HRESULT IsPreservedKey(\n        [in] REFGUID rguid,\n        [in] const TF_PRESERVEDKEY *pprekey,\n        [out] BOOL *pfRegistered);\n\n    HRESULT PreserveKey(\n        [in] TfClientId tid,\n        [in] REFGUID rguid,\n        [in] const TF_PRESERVEDKEY *prekey,\n        [in, size_is(cchDesc)] const WCHAR *pchDesc,\n        [in] ULONG cchDesc);\n\n    HRESULT UnpreserveKey(\n        [in] REFGUID rguid,\n        [in] const TF_PRESERVEDKEY *pprekey);\n\n    HRESULT SetPreservedKeyDescription(\n        [in] REFGUID rguid,\n        [in, size_is(cchDesc)] const WCHAR *pchDesc,\n        [in] ULONG cchDesc);\n\n    HRESULT GetPreservedKeyDescription(\n        [in] REFGUID rguid,\n        [out] BSTR *pbstrDesc);\n\n    HRESULT SimulatePreservedKey(\n        [in] ITfContext *pic,\n        [in] REFGUID rguid,\n        [out] BOOL *pfEaten);\n}\n\n[\n  object,\n  local,\n  uuid(aa80e7f5-2021-11d2-93e0-0060b067b86e),\n  pointer_default(unique)\n]\ninterface ITfKeyEventSink : IUnknown\n{\n    HRESULT OnSetFocus(\n        [in] BOOL fForeground);\n\n    HRESULT OnTestKeyDown(\n        [in] ITfContext *pic,\n        [in] WPARAM wParam,\n        [in] LPARAM lParam,\n        [out] BOOL *pfEaten);\n\n    HRESULT OnTestKeyUp(\n        [in] ITfContext *pic,\n        [in] WPARAM wParam,\n        [in] LPARAM lParam,\n        [out] BOOL *pfEaten);\n\n    HRESULT OnKeyDown(\n        [in] ITfContext *pic,\n        [in] WPARAM wParam,\n        [in] LPARAM lParam,\n        [out] BOOL *pfEaten);\n\n    HRESULT OnKeyUp(\n        [in] ITfContext *pic,\n        [in] WPARAM wParam,\n        [in] LPARAM lParam,\n        [out] BOOL *pfEaten);\n\n    HRESULT OnPreservedKey(\n        [in] ITfContext *pic,\n        [in] REFGUID rguid,\n        [out] BOOL *pfEaten);\n}\n\n[\n  object,\n  local,\n  uuid(1cd4c13b-1c36-4191-a70a-7f3e611f367d),\n  pointer_default(unique)\n]\ninterface ITfKeyTraceEventSink : IUnknown\n{\n    HRESULT OnKeyTraceDown(\n        [in] WPARAM wParam,\n        [in] LPARAM lParam);\n\n    HRESULT OnKeyTraceUp(\n        [in] WPARAM wParam,\n        [in] LPARAM lParam);\n}\n\n[\n  object,\n  local,\n  uuid(8f1b8ad8-0b6b-4874-90c5-bd76011e8f7c),\n  pointer_default(unique)\n]\ninterface ITfMessagePump : IUnknown\n{\n    HRESULT PeekMessageA(\n        [out] LPMSG pMsg,\n        [in] HWND hwnd,\n        [in] UINT wMsgFilterMin,\n        [in] UINT wMsgFilterMax,\n        [in] UINT wRemoveMsg,\n        [out] BOOL *pfResult);\n\n    HRESULT GetMessageA(\n        [out] LPMSG pMsg,\n        [in] HWND hwnd,\n        [in] UINT wMsgFilterMin,\n        [in] UINT wMsgFilterMax,\n        [out] BOOL *pfResult);\n\n    HRESULT PeekMessageW(\n        [out] LPMSG pMsg,\n        [in] HWND hwnd,\n        [in] UINT wMsgFilterMin,\n        [in] UINT wMsgFilterMax,\n        [in] UINT wRemoveMsg,\n        [out] BOOL *pfResult);\n\n    HRESULT GetMessageW(\n        [out] LPMSG pMsg,\n        [in] HWND hwnd,\n        [in] UINT wMsgFilterMin,\n        [in] UINT wMsgFilterMax,\n        [out] BOOL *pfResult);\n}\n\n[\n  object,\n  local,\n  uuid(d60a7b49-1b9f-4be2-b702-47e9dc05dec3),\n  pointer_default(unique)\n]\ninterface ITfClientId : IUnknown\n{\n    HRESULT GetClientId(\n        [in] REFCLSID rclsid,\n        [out] TfClientId *ptid);\n}\n\n[\n  object,\n  uuid(43c9fe15-f494-4c17-9de2-b8a4ac350aa8),\n  pointer_default(unique)\n]\ninterface ITfLanguageProfileNotifySink : IUnknown\n{\n    HRESULT OnLanguageChange(\n        [in] LANGID langid,\n        [out] BOOL *pfAccept);\n\n    HRESULT OnLanguageChanged();\n}\n\n[\n  object,\n  uuid(aa80e803-2021-11d2-93e0-0060b067b86e),\n  pointer_default(unique)\n]\ninterface ITfEditSession : IUnknown\n{\n    HRESULT DoEditSession(\n        [in] TfEditCookie ec);\n}\n\n[\n  object,\n  uuid(aa80e7ff-2021-11d2-93e0-0060b067b86e),\n  pointer_default(unique)\n]\ninterface ITfRange : IUnknown\n{\n    const WCHAR TF_CHAR_EMBEDDED     = TS_CHAR_EMBEDDED;\n\n    typedef [uuid(cf610f06-2882-46f6-abe5-298568b664c4)] enum { TF_GRAVITY_BACKWARD = 0, TF_GRAVITY_FORWARD = 1 } TfGravity;\n\n    typedef [uuid(1e512533-bbdc-4530-9a8e-a1dc0af67468)] enum { TF_SD_BACKWARD = 0, TF_SD_FORWARD = 1 } TfShiftDir;\n\n    const DWORD TF_HF_OBJECT         = 1;\n    const DWORD TF_TF_MOVESTART      = 1;\n    const DWORD TF_TF_IGNOREEND      = 2;\n    const DWORD TF_ST_CORRECTION     = 1;\n    const DWORD TF_IE_CORRECTION     = 1;\n\n    typedef [uuid(49930d51-7d93-448c-a48c-fea5dac192b1)] struct  TF_HALTCOND\n    {\n        ITfRange *pHaltRange;\n        TfAnchor aHaltPos;\n        DWORD dwFlags;\n    } TF_HALTCOND;\n\n    HRESULT GetText(\n        [in] TfEditCookie ec,\n        [in] DWORD dwFlags,\n        [out, size_is(cchMax), length_is(*pcch)] WCHAR *pchText,\n        [in] ULONG cchMax,\n        [out] ULONG *pcch);\n\n    HRESULT SetText(\n        [in] TfEditCookie ec,\n        [in] DWORD dwFlags,\n        [in, size_is(cch), unique] const WCHAR *pchText,\n        [in] LONG cch);\n\n    HRESULT GetFormattedText(\n        [in] TfEditCookie ec,\n        [out] IDataObject **ppDataObject);\n\n    HRESULT GetEmbedded(\n        [in] TfEditCookie ec,\n        [in] REFGUID rguidService,\n        [in] REFIID riid,\n        [out, iid_is(riid)] IUnknown **ppunk);\n\n    HRESULT InsertEmbedded(\n        [in] TfEditCookie ec,\n        [in] DWORD dwFlags,\n        [in] IDataObject *pDataObject);\n\n    HRESULT ShiftStart(\n        [in] TfEditCookie ec,\n        [in] LONG cchReq,\n        [out] LONG *pcch,\n        [in, unique] const TF_HALTCOND *pHalt);\n\n    HRESULT ShiftEnd(\n        [in] TfEditCookie ec,\n        [in] LONG cchReq,\n        [out] LONG *pcch,\n        [in, unique] const TF_HALTCOND *pHalt);\n\n    HRESULT ShiftStartToRange(\n        [in] TfEditCookie ec,\n        [in] ITfRange *pRange,\n        [in] TfAnchor aPos);\n\n    HRESULT ShiftEndToRange(\n        [in] TfEditCookie ec,\n        [in] ITfRange *pRange,\n        [in] TfAnchor aPos);\n\n    HRESULT ShiftStartRegion(\n        [in] TfEditCookie ec,\n        [in] TfShiftDir dir,\n        [out] BOOL *pfNoRegion);\n\n    HRESULT ShiftEndRegion(\n        [in] TfEditCookie ec,\n        [in] TfShiftDir dir,\n        [out] BOOL *pfNoRegion);\n\n    HRESULT IsEmpty(\n        [in] TfEditCookie ec,\n        [out] BOOL *pfEmpty);\n\n    HRESULT Collapse(\n        [in] TfEditCookie ec,\n        [in] TfAnchor aPos);\n\n    HRESULT IsEqualStart(\n        [in] TfEditCookie ec,\n        [in] ITfRange *pWith,\n        [in] TfAnchor aPos,\n        [out] BOOL *pfEqual);\n\n    HRESULT IsEqualEnd(\n        [in] TfEditCookie ec,\n        [in] ITfRange *pWith,\n        [in] TfAnchor aPos,\n        [out] BOOL *pfEqual);\n\n    HRESULT CompareStart(\n        [in] TfEditCookie ec,\n        [in] ITfRange *pWith,\n        [in] TfAnchor aPos,\n        [out] LONG *plResult);\n\n    HRESULT CompareEnd(\n        [in] TfEditCookie ec,\n        [in] ITfRange *pWith,\n        [in] TfAnchor aPos,\n        [out] LONG *plResult);\n\n    HRESULT AdjustForInsert(\n        [in] TfEditCookie ec,\n        [in] ULONG cchInsert,\n        [out] BOOL *pfInsertOk);\n\n    HRESULT GetGravity(\n        [out] TfGravity *pgStart,\n        [out] TfGravity *pgEnd);\n\n    HRESULT SetGravity(\n        [in] TfEditCookie ec,\n        [in] TfGravity gStart,\n        [in] TfGravity gEnd);\n\n    HRESULT Clone(\n        [out] ITfRange **ppClone);\n\n    HRESULT GetContext(\n        [out] ITfContext **ppContext);\n}\n\n[\n    object,\n    uuid(057a6296-029b-4154-b79a-0d461d4ea94c),\n    pointer_default(unique)\n]\ninterface ITfRangeACP : ITfRange\n{\n    HRESULT GetExtent([out] LONG *pacpAnchor,\n                      [out] LONG *pcch);\n\n    HRESULT SetExtent([in] LONG acpAnchor,\n                      [in] LONG cch);\n}\n\n[\n    object,\n    uuid(55ce16ba-3014-41c1-9ceb-fade1446ac6c),\n    pointer_default(unique)\n]\ninterface ITfInsertAtSelection : IUnknown\n{\n    const DWORD TF_IAS_NOQUERY   = 0x1;\n    const DWORD TF_IAS_QUERYONLY = 0x2;\n    const DWORD TF_IAS_NO_DEFAULT_COMPOSITION = 0x80000000;\n\n    HRESULT InsertTextAtSelection(\n        [in] TfEditCookie ec,\n        [in] DWORD dwFlags,\n        [in, size_is(cch)] const WCHAR *pchText,\n        [in] LONG cch,\n        [out] ITfRange **ppRange);\n\n    HRESULT InsertEmbeddedAtSelection(\n        [in] TfEditCookie ec,\n        [in] DWORD dwFlags,\n        [in] IDataObject *pDataObject,\n        [out] ITfRange **ppRange);\n}\n\n[\n    object,\n    uuid(6834b120-88cb-11d2-bf45-00105a2799b5),\n    pointer_default(unique)\n]\ninterface ITfPropertyStore : IUnknown\n{\n    const DWORD TF_TU_CORRECTION = 0x1;\n\n    HRESULT GetType([out] GUID *pguid);\n\n    HRESULT GetDataType([out] DWORD *pdwReserved);\n\n    HRESULT GetData([out] VARIANT *pvarValue);\n\n    HRESULT OnTextUpdated(\n            [in] DWORD dwFlags,\n            [in] ITfRange *pRangeNew,\n            [out] BOOL *pfAccept);\n\n    HRESULT Shrink(\n            [in] ITfRange *pRangeNew,\n            [out] BOOL *pfFree);\n\n    HRESULT Divide(\n            [in] ITfRange *pRangeThis,\n            [in] ITfRange *pRangeNew,\n            [out] ITfPropertyStore **ppPropStore);\n\n    HRESULT Clone(\n            [out] ITfPropertyStore **pPropStore);\n\n    HRESULT GetPropertyRangeCreator(\n            [out] CLSID *pclsid);\n\n    HRESULT Serialize(\n            [in] IStream *pStream,\n            [out] ULONG *pcb);\n}\n\n[\n    object,\n    uuid(5efd22Ba-7838-46cb-88e2-cadb14124f8f),\n    pointer_default(unique)\n]\ninterface IEnumITfCompositionView : IUnknown\n{\n    HRESULT Clone([out] IEnumITfCompositionView **ppEnum);\n\n    HRESULT Next(\n            [in] ULONG ulCount,\n            [out, size_is(ulCount), length_is(*pcFetched)] ITfCompositionView **rgCompositionView,\n            [out] ULONG *pcFetched);\n\n    HRESULT Reset();\n\n    HRESULT Skip([in] ULONG ulCount);\n}\n\n[\n    object,\n    uuid(20168d64-5a8f-4a5a-b7bd-cfa29f4D0fd9),\n    pointer_default(unique)\n]\ninterface ITfComposition : IUnknown\n{\n    HRESULT GetRange([out] ITfRange **ppRange);\n\n    HRESULT ShiftStart(\n            [in] TfEditCookie ecWrite,\n            [in] ITfRange *pNewStart);\n\n    HRESULT ShiftEnd(\n            [in] TfEditCookie ecWrite,\n            [in] ITfRange *pNewEnd);\n\n    HRESULT EndComposition([in] TfEditCookie ecWrite);\n}\n\n[\n    object,\n    uuid(a781718c-579a-4b15-a280-32b8577acc5e),\n    pointer_default(unique)\n]\ninterface ITfCompositionSink : IUnknown\n{\n    HRESULT OnCompositionTerminated(\n            [in] TfEditCookie ecWrite,\n            [in] ITfComposition *pComposition);\n}\n\n[\n    object,\n    uuid(d40C8aae-aC92-4fc7-9a11-0ee0e23aa39b),\n    pointer_default(unique)\n]\ninterface ITfContextComposition : IUnknown\n{\n    HRESULT StartComposition(\n            [in] TfEditCookie ecWrite,\n            [in] ITfRange *pCompositionRange,\n            [in] ITfCompositionSink *pSink,\n            [out] ITfComposition **ppComposition);\n\n    HRESULT EnumCompositions([out] IEnumITfCompositionView **ppEnum);\n\n    HRESULT FindComposition(\n            [in] TfEditCookie ecRead,\n            [in] ITfRange *pTestRange,\n            [out] IEnumITfCompositionView **ppEnum);\n\n    HRESULT TakeOwnership(\n            [in] TfEditCookie ecWrite,\n            [in] ITfCompositionView *pComposition,\n            [in] ITfCompositionSink *pSink,\n            [out] ITfComposition **ppComposition);\n}\n\n[\n    object,\n    uuid(86462810-593b-4916-9764-19c08e9ce110),\n    pointer_default(unique)\n]\ninterface ITfContextOwnerCompositionServices : ITfContextComposition\n{\n    HRESULT TerminateComposition([in] ITfCompositionView *pComposition);\n}\n\n[\n    object,\n    uuid(4ef89150-0807-11d3-8df0-00105a2799b5),\n    pointer_default(unique)\n]\ninterface ITfPersistentPropertyLoaderACP : IUnknown\n{\n    HRESULT LoadProperty(\n            [in] const TF_PERSISTENT_PROPERTY_HEADER_ACP *pHdr,\n            [out] IStream **ppStream);\n}\n\n[\n    object,\n    uuid(b23eb630-3e1c-11d3-a745-0050040ab407),\n    pointer_default(unique)\n]\ninterface ITfContextOwnerServices : IUnknown\n{\n    HRESULT OnLayoutChange();\n\n    HRESULT OnStatusChange([in] DWORD dwFlags);\n\n    HRESULT OnAttributeChange([in] REFGUID rguidAttribute);\n\n    HRESULT Serialize(\n            [in] ITfProperty *pProp,\n            [in] ITfRange *pRange,\n            [out] TF_PERSISTENT_PROPERTY_HEADER_ACP *pHdr,\n            [in] IStream *pStream);\n\n    HRESULT Unserialize(\n            [in] ITfProperty *pProp,\n            [in] const TF_PERSISTENT_PROPERTY_HEADER_ACP *pHdr,\n            [in] IStream *pStream,\n            [in] ITfPersistentPropertyLoaderACP *pLoader);\n\n    HRESULT ForceLoadProperty([in] ITfProperty *pProp);\n\n    HRESULT CreateRange(\n            [in] LONG acpStart,\n            [in] LONG acpEnd,\n            [out] ITfRangeACP **ppRange);\n}\n\n[\n    object,\n    uuid(17d49a3d-f8b8-4b2f-b254-52319dd64c53),\n    pointer_default(unique)\n]\ninterface ITfReadOnlyProperty : IUnknown\n{\n    HRESULT GetType([out] GUID *pguid);\n\n    HRESULT EnumRanges(\n            [in] TfEditCookie ec,\n            [out] IEnumTfRanges **ppEnum,\n            [in] ITfRange *pTargetRange);\n\n    HRESULT GetValue(\n            [in] TfEditCookie ec,\n            [in] ITfRange *pRange,\n            [out] VARIANT *pvarValue);\n\n    HRESULT GetContext([out] ITfContext **ppContext);\n}\n\n[\n    object,\n    uuid(e2449660-9542-11d2-bf46-00105a2799b5),\n    pointer_default(unique)\n]\ninterface ITfProperty : ITfReadOnlyProperty\n{\n    HRESULT FindRange(\n            [in] TfEditCookie ec,\n            [in] ITfRange *pRange,\n            [out] ITfRange **ppRange,\n            [in] TfAnchor aPos);\n\n    HRESULT SetValueStore(\n            [in] TfEditCookie ec,\n            [in] ITfRange *pRange,\n            [in] ITfPropertyStore *pPropStore);\n\n    HRESULT SetValue(\n            [in] TfEditCookie ec,\n            [in] ITfRange *pRange,\n            [in] const VARIANT *pvarValue);\n\n    HRESULT Clear(\n            [in] TfEditCookie ec,\n            [in] ITfRange *pRange);\n}\n\n[\n  object,\n  uuid(bb08f7a9-607a-4384-8623-056892b64371),\n  pointer_default(unique)\n]\ninterface ITfCompartment : IUnknown\n{\n    HRESULT SetValue(\n        [in] TfClientId tid,\n        [in] const VARIANT *pvarValue);\n\n    HRESULT GetValue(\n        [out] VARIANT *pvarValue);\n}\n\n[\n  object,\n  uuid(7dcf57ac-18ad-438b-824d-979bffb74b7c),\n  pointer_default(unique)\n]\ninterface ITfCompartmentMgr : IUnknown\n{\n    HRESULT GetCompartment(\n        [in] REFGUID rguid,\n        [out] ITfCompartment **ppcomp);\n\n    HRESULT ClearCompartment(\n        [in] TfClientId tid,\n        [in] REFGUID rguid);\n\n    HRESULT EnumCompartments(\n        [out] IEnumGUID **ppEnum);\n}\n\n[\n  object,\n  uuid(743abd5f-f26d-48df-8cc5-238492419b64),\n  pointer_default(unique)\n]\ninterface ITfCompartmentEventSink : IUnknown\n{\n    HRESULT OnChange(\n        [in] REFGUID rguid);\n}\n\n[\n  object,\n  uuid(8f1a7ea6-1654-4502-a86e-b2902344d507),\n  pointer_default(unique)\n]\ninterface IEnumTfContexts : IUnknown\n{\n    HRESULT Clone(\n        [out] IEnumTfContexts **ppEnum);\n\n    HRESULT Next(\n        [in] ULONG ulCount,\n        [out, size_is(ulCount), length_is(*pcFetched)] ITfContext **rgContext,\n        [out] ULONG *pcFetched);\n\n    HRESULT Reset();\n\n    HRESULT Skip(\n        [in] ULONG ulCount);\n}\n\n[\n  object,\n  uuid(aa80e808-2021-11d2-93e0-0060b067b86e),\n  pointer_default(unique)\n]\ninterface IEnumTfDocumentMgrs : IUnknown\n{\n    HRESULT Clone(\n        [out] IEnumTfDocumentMgrs **ppEnum);\n\n    HRESULT Next(\n        [in] ULONG ulCount,\n        [out, size_is(ulCount), length_is(*pcFetched)] ITfDocumentMgr **rgDocumentMgr,\n        [out] ULONG *pcFetched);\n\n    HRESULT Reset();\n\n    HRESULT Skip(\n        [in] ULONG ulCount);\n}\n\n[\n    object,\n    local,\n    uuid(ea1ea137-19df-11d7-a6d2-00065b84435c),\n    pointer_default(unique)\n]\ninterface ITfUIElement : IUnknown\n{\n    HRESULT GetDescription(\n        [out] BSTR *description);\n\n    HRESULT GetGUID(\n        [out] GUID *guid);\n\n    HRESULT Show(\n        [in] BOOL show);\n\n    HRESULT IsShown(\n        [out] BOOL *show);\n}\n\n[\n    object,\n    local,\n    uuid(887aa91e-acba-4931-84da-3c5208cf543f),\n    pointer_default(unique)\n]\ninterface IEnumTfUIElements : IUnknown\n{\n    HRESULT Clone(\n        [out] IEnumTfUIElements **enum_elements);\n\n    HRESULT Next(\n        [in] ULONG count,\n        [out, size_is(count), length_is(fetched)] ITfUIElement **element,\n        [out] ULONG fetched);\n\n    HRESULT Reset();\n\n    HRESULT Skip(\n        [in] ULONG count);\n}\n\n[\n    object,\n    local,\n    uuid(ea1ea135-19df-11d7-a6d2-00065b84435c),\n    pointer_default(unique)\n]\ninterface ITfUIElementMgr : IUnknown\n{\n    HRESULT BeginUIElement(\n        [in] ITfUIElement *element,\n        [in, out] BOOL *show,\n        [out] DWORD *id);\n\n    HRESULT UpdateUIElement(\n        [in] DWORD id);\n\n    HRESULT EndUIElement(\n        [in] DWORD id);\n\n    HRESULT GetUIElement(\n        [in] DWORD id,\n        [out] ITfUIElement **element);\n\n    HRESULT EnumUIElements(\n        [out] IEnumTfUIElements **enum_elements);\n}\n\n[\n  object,\n  uuid(73131f9c-56a9-49dd-b0ee-d046633f7528),\n  pointer_default(unique)\n]\ninterface ITfSourceSingle : IUnknown\n{\n    HRESULT AdviseSingleSink(\n        [in] TfClientId tid,\n        [in] REFIID riid,\n        [in, iid_is(riid)] IUnknown *punk);\n\n    HRESULT UnadviseSingleSink(\n        [in] TfClientId tid,\n        [in] REFIID riid);\n}\n\n[\n  object,\n  local,\n  uuid(c0f1db0c-3a20-405c-a303-96b6010a885f),\n  pointer_default(unique)\n]\ninterface ITfThreadFocusSink : IUnknown\n{\n    HRESULT OnSetThreadFocus();\n\n    HRESULT OnKillThreadFocus();\n}\n\n[\n  object,\n  uuid(71c6e74e-0f28-11d8-a82a-00065b84435c),\n  pointer_default(unique)\n]\ninterface ITfInputProcessorProfileActivationSink : IUnknown\n{\n    HRESULT OnActivated(\n        [in] DWORD dwProfileType,\n        [in] LANGID langid,\n        [in] REFCLSID clsid,\n        [in] REFGUID catid,\n        [in] REFGUID guidProfile,\n        [in] HKL hkl,\n        [in] DWORD dwFlags);\n}\n\n[\n    object,\n    local,\n    uuid(a1adaaa2-3a24-449d-ac96-5183e7f5c217),\n    pointer_default(unique)\n]\ninterface ITfMouseSink : IUnknown\n{\n    HRESULT OnMouseEvent(\n        [in] ULONG uEdge,\n        [in] ULONG uQuadrant,\n        [in] DWORD dwBtnStatus,\n        [out] BOOL *pfEaten);\n}\n\n[\n    object,\n    uuid(09d146cd-a544-4132-925b-7afa8ef322d0),\n    pointer_default(unique)\n]\ninterface ITfMouseTracker : IUnknown\n{\n    HRESULT AdviseMouseSink(\n        [in] ITfRange *range,\n        [in] ITfMouseSink *pSink,\n        [out] DWORD *pdwCookie);\n\n    HRESULT UnadviseMouseSink([in] DWORD dwCookie);\n}\n\n[\n    object,\n    uuid(3bdd78e2-c16e-47fd-b883-ce6facc1a208),\n    pointer_default(unique)\n]\ninterface ITfMouseTrackerACP : IUnknown\n{\n    HRESULT AdviseMouseSink(\n        [in] ITfRangeACP *range,\n        [in] ITfMouseSink *pSink,\n        [out] DWORD *pdwCookie);\n\n    HRESULT UnadviseMouseSink([in] DWORD dwCookie);\n}\n\n[\n    object,\n    local,\n    uuid(a615096f-1c57-4813-8a15-55ee6e5a839c),\n    pointer_default(unique)\n]\ninterface ITfTransitoryExtensionSink : IUnknown\n{\n    HRESULT OnTransitoryExtensionUpdated(\n        [in] ITfContext *pic,\n        [in] TfEditCookie ecReadOnly,\n        [in] ITfRange *pResultRange,\n        [in] ITfRange *pCompositionRange,\n        [out] BOOL *pfDeleteResultRange);\n}\n"
  },
  {
    "path": "wine/windows/msdadc.idl",
    "content": "/*\n * Copyright 2009 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"oledb.idl\";\n\n[\n    object,\n    pointer_default(unique),\n    uuid(0c733a8d-2a1c-11ce-ade5-00aa0044773d)\n]\ninterface IDataConvert : IUnknown\n{\n    typedef DWORD DBDATACONVERT;\n\n    enum DBDATACONVERTENUM\n    {\n        DBDATACONVERT_DEFAULT = 0,\n        DBDATACONVERT_SETDATABEHAVIOR = 1,\n        DBDATACONVERT_LENGTHFROMNTS = 2,\n        DBDATACONVERT_DSTISFIXEDLENGTH = 4,\n        DBDATACONVERT_DECIMALSCALE = 8\n    };\n\n    [local] HRESULT DataConvert([in] DBTYPE wSrcType,\n                                [in] DBTYPE wDstType,\n                                [in] DBLENGTH cbSrcLength,\n                                [in, out] DBLENGTH *pcbDstLength,\n                                [in] void *pSrc,\n                                [out] void *pDst,\n                                [in] DBLENGTH cbDstMaxLength,\n                                [in] DBSTATUS dbsSrcStatus,\n                                [out] DBSTATUS *pdbsDstStatus,\n                                [in] BYTE bPrecision,\n                                [in] BYTE bScale,\n                                [in] DBDATACONVERT dwFlags);\n\n\n    HRESULT CanConvert([in] DBTYPE wSrcType,\n                       [in] DBTYPE wDstType);\n\n\n    [local] HRESULT GetConversionSize([in] DBTYPE wSrcType,\n                                      [in] DBTYPE wDstType,\n                                      [in] DBLENGTH *pcbSrcLength,\n                                      [out] DBLENGTH *pcbDstLength,\n                                      [in, size_is(*pcbSrcLength)] void *pSrc);\n}\n\n[\n    object,\n    pointer_default(unique),\n    uuid(0c733a9c-2a1c-11ce-ade5-00aa0044773d)\n]\ninterface IDCInfo : IUnknown\n{\n    typedef DWORD DCINFOTYPE;\n\n    enum DCINFOTYPEENUM\n    {\n        DCINFOTYPE_VERSION = 1\n    };\n\n    typedef struct tagDCINFO\n    {\n        DCINFOTYPE eInfoType;\n        VARIANT vData;\n    } DCINFO;\n\n    HRESULT GetInfo([in] ULONG cInfo,\n                    [in, size_is(cInfo)] DCINFOTYPE rgeInfoType[],\n                    [out, size_is(cInfo)] DCINFO **prgInfo);\n\n    HRESULT SetInfo([in] ULONG cInfo,\n                    [in, size_is(cInfo)] DCINFO prgInfo[]);\n}\n"
  },
  {
    "path": "wine/windows/msdaguid.h",
    "content": "/*\n * Copyright 2009 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_MSDAGUID_H\n#define __WINE_MSDAGUID_H\n\nDEFINE_GUID(CLSID_EXTENDEDERRORINFO,       0xc8b522cf, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);\nDEFINE_GUID(CLSID_OLEDB_ENUMERATOR,        0xc8b522d0, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);\nDEFINE_GUID(CLSID_OLEDB_CONVERSIONLIBRARY, 0xc8b522d1, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);\nDEFINE_GUID(CLSID_OLEDB_ROWPOSITIONLIBRARY,0x2048eee6, 0x7fa2, 0x11d0, 0x9e, 0x6a, 0x00, 0xa0, 0xc9, 0x13, 0x8c, 0x29);\n\n#endif /*__WINE_MSDAGUID_H */\n"
  },
  {
    "path": "wine/windows/msdasc.idl",
    "content": "/*\n * Copyright (C) 2012 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"oledb.idl\";\n\n#if !defined(progid) && !defined(__WIDL__)\n#define threading(model)\n#define progid(str)\n#define vi_progid(str)\n#endif\n\ntypedef LONG_PTR COMPATIBLE_LONG;\n\n[\n    uuid(2206CEB0-19C1-11D1-89E0-00C04FD7A829),\n    version(1.0)\n]\nlibrary MSDASC\n{\n    importlib(\"stdole2.tlb\");\n\n    typedef DWORD DBPROMPTOPTIONS;\n\n    typedef enum tagDBPROMPTOPTIONSENUM\n    {\n        DBPROMPTOPTIONS_NONE                        = 0x00,\n        DBPROMPTOPTIONS_WIZARDSHEET                 = 0x01,\n        DBPROMPTOPTIONS_PROPERTYSHEET               = 0x02,\n        DBPROMPTOPTIONS_BROWSEONLY                  = 0x08,\n        DBPROMPTOPTIONS_DISABLE_PROVIDER_SELECTION  = 0x10,\n        DBPROMPTOPTIONS_DISABLESAVEPASSWORD         = 0x20\n    } DBPROMPTOPTIONSENUM;\n\n    [\n      odl,\n      uuid(2206CCB2-19C1-11D1-89E0-00C04FD7A829),\n      helpstring(\"OLE DB Service Component Automation Interface\"),\n      dual,\n      oleautomation\n    ]\n    interface IDataSourceLocator : IDispatch\n    {\n        [id(0x60020000), propget]\n        HRESULT hWnd([out, retval] COMPATIBLE_LONG* phwndParent);\n\n        [id(0x60020000), propput]\n        HRESULT hWnd([in] COMPATIBLE_LONG hwndParent);\n\n        [id(0x60020002), helpstring(\"PromptNew\")]\n        HRESULT PromptNew([out, retval] IDispatch** ppADOConnection);\n\n        [id(0x60020003), helpstring(\"PromptEdit\")]\n        HRESULT PromptEdit([in, out] IDispatch** ppADOConnection, [out, retval] VARIANT_BOOL* pbSuccess);\n    }\n\n    [\n      odl,\n      uuid(2206CCB0-19C1-11D1-89E0-00C04FD7A829),\n      restricted\n    ]\n    interface IDBPromptInitialize : IUnknown\n    {\n        HRESULT _stdcall PromptDataSource([in] IUnknown* pUnkOuter, [in] HWND hWndParent,\n            [in] DBPROMPTOPTIONS dwPromptOptions, [in] ULONG cSourceTypeFilter,\n            [in] DBSOURCETYPE* rgSourceTypeFilter, [in] LPWSTR pwszszzProviderFilter,\n            [in] GUID* riid, [in, out] IUnknown** ppDataSource);\n\n        HRESULT _stdcall PromptFileName([in] HWND hWndParent, [in] ULONG dwPromptOptions,\n            [in] LPWSTR pwszInitialDirectory, [in] LPWSTR pwszInitialFile, [out] LPWSTR* ppwszSelectedFile);\n    }\n\n    [\n      uuid(2206CCB1-19C1-11D1-89E0-00C04FD7A829),\n    ]\n    interface IDataInitialize : IUnknown\n    {\n        HRESULT GetDataSource([in] IUnknown* pUnkOuter, [in]  DWORD dwClsCtx,\n                        [in] LPWSTR pwszInitializationString, [in] REFIID riid,\n                        [in, out] IUnknown** ppDataSource);\n\n        HRESULT GetInitializationString([in] IUnknown* pDataSource, [in] boolean fIncludePassword,\n                        [out] LPWSTR* ppwszInitString);\n\n        HRESULT CreateDBInstance([in] REFCLSID clsidProvider, [in] IUnknown* pUnkOuter,\n                        [in] DWORD dwClsCtx, [in] LPWSTR pwszReserved,\n                        [in] REFIID riid, [out] IUnknown** ppDataSource);\n\n        [local]\n        HRESULT CreateDBInstanceEx([in] REFCLSID clsidProvider,  [in] IUnknown* pUnkOuter,\n                        [in] DWORD dwClsCtx, [in] LPWSTR pwszReserved,  [in] COSERVERINFO* pServerInfo,\n                        [in] DWORD cmq,  [in, out, size_is(cmq)] MULTI_QI *results);\n\n        [call_as(CreateDBInstanceEx)]\n        HRESULT RemoteCreateDBInstanceEx([in] REFCLSID clsidProvider,  [in] IUnknown* pUnkOuter,\n                        [in] DWORD dwClsCtx, [in] LPWSTR pwszReserved,  [in] COSERVERINFO* pServerInfo,\n                        [in] DWORD cmq,  [in, size_is(cmq)] const IID **iids, [out, size_is(cmq)] IUnknown **ifs,\n                        [out, size_is(cmq)] HRESULT *hr);\n\n        HRESULT LoadStringFromStorage([in] LPWSTR pwszFileName, [out] LPWSTR* ppwszInitializationString);\n\n        HRESULT WriteStringToStorage([in] LPWSTR pwszFileName,  [in] LPWSTR pwszInitializationString,\n                        [in] DWORD dwCreationDisposition);\n    }\n\n    [\n      uuid(2206CDB0-19C1-11D1-89E0-00C04FD7A829),\n      threading(both),\n      progid(\"MSDASC.MSDAINITIALIZE.1\"),\n      vi_progid(\"MSDASC.MSDAINITIALIZE\"),\n    ]\n    coclass MSDAINITIALIZE\n    {\n        [default] interface IDataInitialize;\n    }\n\n    [\n      uuid(2206CDB2-19C1-11D1-89E0-00C04FD7A829),\n      threading(both),\n      progid(\"DataLinks\")\n    ]\n    coclass DataLinks\n    {\n        [default] interface IDataSourceLocator;\n        interface IDBPromptInitialize;\n        interface IDataInitialize;\n    }\n}\n"
  },
  {
    "path": "wine/windows/mshtmcid.h",
    "content": "/*\n * Copyright 2006 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __mshtmcid_h__\n#define __mshtmcid_h__\n\n#define IDM_UNKNOWN                 0\n#define IDM_ALIGNBOTTOM             1\n#define IDM_ALIGNHORIZONTALCENTERS  2\n#define IDM_ALIGNLEFT               3\n#define IDM_ALIGNRIGHT              4\n#define IDM_ALIGNTOGRID             5\n#define IDM_ALIGNTOP                6\n#define IDM_ALIGNVERTICALCENTERS    7\n#define IDM_ARRANGEBOTTOM           8\n#define IDM_ARRANGERIGHT            9\n#define IDM_BRINGFORWARD            10\n#define IDM_BRINGTOFRONT            11\n#define IDM_CENTERHORIZONTALLY      12\n#define IDM_CENTERVERTICALLY        13\n#define IDM_CODE                    14\n#define IDM_COPY                    15\n#define IDM_CUT                     16\n#define IDM_DELETE                  17\n#define IDM_FONTNAME                18\n#define IDM_FONTSIZE                19\n#define IDM_GROUP                   20\n#define IDM_HORIZSPACECONCATENATE   21\n#define IDM_HORIZSPACEDECREASE      22\n#define IDM_HORIZSPACEINCREASE      23\n#define IDM_HORIZSPACEMAKEEQUAL     24\n#define IDM_INSERTOBJECT            25\n#define IDM_PASTE                   26\n#define IDM_PRINT                   27\n#define IDM_PROPERTIES              28\n#define IDM_REDO                    29\n#define IDM_MULTILEVELREDO          30\n#define IDM_SELECTALL               31\n#define IDM_SENDBACKWARD            32\n#define IDM_SENDTOBACK              33\n#define IDM_SHOWTABLE               34\n#define IDM_SIZETOCONTROL           35\n#define IDM_SIZETOCONTROLHEIGHT     36\n#define IDM_SIZETOCONTROLWIDTH      37\n#define IDM_SIZETOFIT               38\n#define IDM_SIZETOGRID              39\n#define IDM_SNAPTOGRID              40\n#define IDM_TABORDER                41\n#define IDM_TOOLBOX                 42\n#define IDM_UNDO                    43\n#define IDM_MULTILEVELUNDO          44\n#define IDM_UNGROUP                 45\n#define IDM_VERTSPACECONCATENATE    46\n#define IDM_VERTSPACEDECREASE       47\n#define IDM_VERTSPACEINCREASE       48\n#define IDM_VERTSPACEMAKEEQUAL      49\n#define IDM_JUSTIFYFULL             50\n#define IDM_ZOOMPERCENT             50\n#define IDM_BACKCOLOR               51\n#define IDM_BOLD                    52\n#define IDM_BORDERCOLOR             53\n#define IDM_FLAT                    54\n#define IDM_FORECOLOR               55\n#define IDM_ITALIC                  56\n#define IDM_JUSTIFYCENTER           57\n#define IDM_JUSTIFYGENERAL          58\n#define IDM_JUSTIFYLEFT             59\n#define IDM_JUSTIFYRIGHT            60\n#define IDM_RAISED                  61\n#define IDM_SUNKEN                  62\n#define IDM_UNDERLINE               63\n#define IDM_CHISELED                64\n#define IDM_ETCHED                  65\n#define IDM_SHADOWED                66\n#define IDM_FIND                    67\n#define IDM_GETZOOM                 68\n#define IDM_SHOWGRID                69\n#define IDM_SAVE                    70\n#define IDM_SAVEAS                  71\n#define IDM_OBJECTVERBLIST0         72\n#define IDM_OBJECTVERBLIST1         73\n#define IDM_OBJECTVERBLIST2         74\n#define IDM_OBJECTVERBLIST3         75\n#define IDM_OBJECTVERBLIST4         76\n#define IDM_OBJECTVERBLIST5         77\n#define IDM_OBJECTVERBLIST6         78\n#define IDM_OBJECTVERBLIST7         79\n#define IDM_OBJECTVERBLIST8         80\n#define IDM_OBJECTVERBLIST9         81\n\n#define IDM_OBJECTVERBLISTLAST      IDM_OBJECTVERBLIST9\n\n#define IDM_CONVERTOBJECT           82\n#define IDM_CUSTOMCONTROL           83\n#define IDM_CUSTOMIZEITEM           84\n#define IDM_RENAME                  85\n#define IDM_IMPORT                  86\n#define IDM_NEWPAGE                 87\n#define IDM_MOVE                    88\n#define IDM_CANCEL                  89\n#define IDM_FONT                    90\n#define IDM_STRIKETHROUGH           91\n#define IDM_DELETEWORD              92\n#define IDM_EXECPRINT               93\n#define IDM_JUSTIFYNONE             94\n#define IDM_TRISTATEBOLD            95\n#define IDM_TRISTATEITALIC          96\n#define IDM_TRISTATEUNDERLINE       97\n\n#define IDM_OPEN                          2000\n#define IDM_NEW                           2001\n#define IDM_SAVECOPYAS                    2002\n#define IDM_PRINTPREVIEW                  2003\n#define IDM_PAGESETUP                     2004\n#define IDM_SPELL                         2005\n#define IDM_PASTESPECIAL                  2006\n#define IDM_CLEARSELECTION                2007\n#define IDM_FOLLOW_ANCHOR                 2008\n\n#define IDM_SHOWPRINT                     2010\n#define IDM_SHOWPAGESETUP                 2011\n\n#define IDM_INSINPUTIMAGE                 2114\n#define IDM_INSINPUTBUTTON                2115\n#define IDM_INSINPUTRESET                 2116\n#define IDM_INSINPUTSUBMIT                2117\n#define IDM_INSINPUTUPLOAD                2118\n#define IDM_INSFIELDSET                   2119\n#define IDM_PASTEINSERT                   2120\n#define IDM_REPLACE                       2121\n#define IDM_EDITSOURCE                    2122\n#define IDM_BOOKMARK                      2123\n#define IDM_HYPERLINK                     2124\n#define IDM_UNLINK                        2125\n#define IDM_BROWSEMODE                    2126\n#define IDM_EDITMODE                      2127\n#define IDM_UNBOOKMARK                    2128\n\n#define IDM_TOOLBARS                      2130\n#define IDM_STATUSBAR                     2131\n#define IDM_FORMATMARK                    2132\n#define IDM_TEXTONLY                      2133\n\n#define IDM_OPTIONS                       2135\n#define IDM_FOLLOWLINKC                   2136\n#define IDM_FOLLOWLINKN                   2137\n#define IDM_STOP                          2138\n#define IDM_VIEWSOURCE                    2139\n#define IDM_ZOOMPOPUP                     2140\n#define IDM_BASELINEFONT1                 2141\n#define IDM_BASELINEFONT2                 2142\n#define IDM_BASELINEFONT3                 2143\n#define IDM_BASELINEFONT4                 2144\n#define IDM_BASELINEFONT5                 2145\n\n#define IDM_HORIZONTALLINE                2150\n#define IDM_LINEBREAKNORMAL               2151\n#define IDM_LINEBREAKLEFT                 2152\n#define IDM_LINEBREAKRIGHT                2153\n#define IDM_LINEBREAKBOTH                 2154\n#define IDM_NONBREAK                      2155\n#define IDM_SPECIALCHAR                   2156\n#define IDM_HTMLSOURCE                    2157\n#define IDM_IFRAME                        2158\n#define IDM_HTMLCONTAIN                   2159\n\n#define IDM_TEXTBOX                       2161\n#define IDM_TEXTAREA                      2162\n#define IDM_CHECKBOX                      2163\n#define IDM_RADIOBUTTON                   2164\n#define IDM_DROPDOWNBOX                   2165\n#define IDM_LISTBOX                       2166\n#define IDM_BUTTON                        2167\n#define IDM_IMAGE                         2168\n#define IDM_OBJECT                        2169\n#define IDM_1D                            2170\n#define IDM_IMAGEMAP                      2171\n#define IDM_FILE                          2172\n#define IDM_COMMENT                       2173\n#define IDM_SCRIPT                        2174\n#define IDM_JAVAAPPLET                    2175\n#define IDM_PLUGIN                        2176\n#define IDM_PAGEBREAK                     2177\n#define IDM_HTMLAREA                      2178\n\n#define IDM_PARAGRAPH                     2180\n#define IDM_FORM                          2181\n#define IDM_MARQUEE                       2182\n#define IDM_LIST                          2183\n#define IDM_ORDERLIST                     2184\n#define IDM_UNORDERLIST                   2185\n#define IDM_INDENT                        2186\n#define IDM_OUTDENT                       2187\n#define IDM_PREFORMATTED                  2188\n#define IDM_ADDRESS                       2189\n#define IDM_BLINK                         2190\n#define IDM_DIV                           2191\n\n#define IDM_TABLEINSERT                   2200\n#define IDM_RCINSERT                      2201\n#define IDM_CELLINSERT                    2202\n#define IDM_CAPTIONINSERT                 2203\n#define IDM_CELLMERGE                     2204\n#define IDM_CELLSPLIT                     2205\n#define IDM_CELLSELECT                    2206\n#define IDM_ROWSELECT                     2207\n#define IDM_COLUMNSELECT                  2208\n#define IDM_TABLESELECT                   2209\n#define IDM_TABLEPROPERTIES               2210\n#define IDM_CELLPROPERTIES                2211\n#define IDM_ROWINSERT                     2212\n#define IDM_COLUMNINSERT                  2213\n\n#define IDM_HELP_CONTENT                  2220\n#define IDM_HELP_ABOUT                    2221\n#define IDM_HELP_README                   2222\n\n#define IDM_REMOVEFORMAT                  2230\n#define IDM_PAGEINFO                      2231\n#define IDM_TELETYPE                      2232\n#define IDM_GETBLOCKFMTS                  2233\n#define IDM_BLOCKFMT                      2234\n#define IDM_SHOWHIDE_CODE                 2235\n#define IDM_TABLE                         2236\n#define IDM_COPYFORMAT                    2237\n#define IDM_PASTEFORMAT                   2238\n#define IDM_GOTO                          2239\n#define IDM_CHANGEFONT                    2240\n#define IDM_CHANGEFONTSIZE                2241\n\n#define IDM_CHANGECASE                    2246\n#define IDM_SUBSCRIPT                     2247\n#define IDM_SUPERSCRIPT                   2248\n#define IDM_SHOWSPECIALCHAR               2249\n#define IDM_CENTERALIGNPARA               2250\n#define IDM_LEFTALIGNPARA                 2251\n#define IDM_RIGHTALIGNPARA                2252\n#define IDM_REMOVEPARAFORMAT              2253\n#define IDM_APPLYNORMAL                   2254\n#define IDM_APPLYHEADING1                 2255\n#define IDM_APPLYHEADING2                 2256\n#define IDM_APPLYHEADING3                 2257\n\n#define IDM_DOCPROPERTIES                 2260\n#define IDM_ADDFAVORITES                  2261\n#define IDM_COPYSHORTCUT                  2262\n#define IDM_SAVEBACKGROUND                2263\n#define IDM_SETWALLPAPER                  2264\n#define IDM_COPYBACKGROUND                2265\n#define IDM_CREATESHORTCUT                2266\n#define IDM_PAGE                          2267\n#define IDM_SAVETARGET                    2268\n#define IDM_SHOWPICTURE                   2269\n#define IDM_SAVEPICTURE                   2270\n#define IDM_DYNSRCPLAY                    2271\n#define IDM_DYNSRCSTOP                    2272\n#define IDM_PRINTTARGET                   2273\n#define IDM_IMGARTPLAY                    2274\n#define IDM_IMGARTSTOP                    2275\n#define IDM_IMGARTREWIND                  2276\n#define IDM_PRINTQUERYJOBSPENDING         2277\n#define IDM_SETDESKTOPITEM                2278\n\n#define IDM_CONTEXTMENU                   2280\n\n#define IDM_GOBACKWARD                    2282\n#define IDM_GOFORWARD                     2283\n#define IDM_PRESTOP                       2284\n\n#define IDM_MP_MYPICS                     2287\n#define IDM_MP_EMAILPICTURE               2288\n#define IDM_MP_PRINTPICTURE               2289\n#define IDM_CREATELINK                    2290\n#define IDM_COPYCONTENT                   2291\n#define IDM_LANGUAGE                      2292\n \n#define IDM_GETPRINTTEMPLATE              2295\n#define IDM_SETPRINTTEMPLATE              2296\n#define IDM_TEMPLATE_PAGESETUP            2298\n\n#define IDM_REFRESH                       2300\n#define IDM_STOPDOWNLOAD                  2301\n#define IDM_ENABLE_INTERACTION            2302\n\n#define IDM_LAUNCHDEBUGGER                2310\n#define IDM_BREAKATNEXT                   2311\n#define IDM_INSINPUTHIDDEN                2312\n#define IDM_INSINPUTPASSWORD              2313\n#define IDM_OVERWRITE                     2314\n#define IDM_PARSECOMPLETE                 2315\n#define IDM_HTMLEDITMODE                  2316\n#define IDM_REGISTRYREFRESH               2317\n#define IDM_COMPOSESETTINGS               2318\n\n#define IDM_SHOWMISCTAGS                  2320\n#define IDM_SHOWALIGNEDSITETAGS           2321\n#define IDM_SHOWSCRIPTTAGS                2322\n#define IDM_SHOWSTYLETAGS                 2323\n#define IDM_SHOWCOMMENTTAGS               2324\n#define IDM_SHOWAREATAGS                  2325\n#define IDM_SHOWUNKNOWNTAGS               2326\n#define IDM_SHOWALLTAGS                   2327\n#define IDM_SHOWZEROBORDERATDESIGNTIME    2328\n#define IDM_AUTODETECT                    2329\n#define IDM_SCRIPTDEBUGGER                2330\n#define IDM_GETBYTESDOWNLOADED            2331\n#define IDM_NOACTIVATENORMALOLECONTROLS   2332\n#define IDM_NOACTIVATEDESIGNTIMECONTROLS  2333\n#define IDM_NOACTIVATEJAVAAPPLETS         2334\n#define IDM_NOFIXUPURLSONPASTE            2335\n#define IDM_EMPTYGLYPHTABLE               2336\n#define IDM_ADDTOGLYPHTABLE               2337\n#define IDM_REMOVEFROMGLYPHTABLE          2338\n#define IDM_REPLACEGLYPHCONTENTS          2339\n#define IDM_SHOWWBRTAGS                   2340\n#define IDM_PERSISTSTREAMSYNC             2341\n#define IDM_SETDIRTY                      2342\n#define IDM_RUNURLSCRIPT                  2343\n\n#ifdef IE5_ZOOM\n#define IDM_ZOOMRATIO                     2344\n#define IDM_GETZOOMNUMERATOR              2345\n#define IDM_GETZOOMDENOMINATOR            2346\n#endif\n\n#define IDM_DIRLTR                        2350\n#define IDM_DIRRTL                        2351\n#define IDM_BLOCKDIRLTR                   2352\n#define IDM_BLOCKDIRRTL                   2353\n#define IDM_INLINEDIRLTR                  2354\n#define IDM_INLINEDIRRTL                  2355\n#define IDM_ISTRUSTEDDLG                  2356\n#define IDM_INSERTSPAN                    2357\n#define IDM_LOCALIZEEDITOR                2358\n\n#define IDM_SAVEPRETRANSFORMSOURCE        2370\n#define IDM_VIEWPRETRANSFORMSOURCE        2371\n\n#define IDM_SCROLL_HERE                   2380\n#define IDM_SCROLL_TOP                    2381\n#define IDM_SCROLL_BOTTOM                 2382\n#define IDM_SCROLL_PAGEUP                 2383\n#define IDM_SCROLL_PAGEDOWN               2384\n#define IDM_SCROLL_UP                     2385\n#define IDM_SCROLL_DOWN                   2386\n#define IDM_SCROLL_LEFTEDGE               2387\n#define IDM_SCROLL_RIGHTEDGE              2388\n#define IDM_SCROLL_PAGELEFT               2389\n#define IDM_SCROLL_PAGERIGHT              2390\n#define IDM_SCROLL_LEFT                   2391\n#define IDM_SCROLL_RIGHT                  2392\n#define IDM_MULTIPLESELECTION             2393\n#define IDM_2D_POSITION                   2394\n#define IDM_2D_ELEMENT                    2395\n#define IDM_1D_ELEMENT                    2396\n#define IDM_ABSOLUTE_POSITION             2397\n#define IDM_LIVERESIZE                    2398\n#define IDM_ATOMICSELECTION               2399\n#define IDM_AUTOURLDETECT_MODE            2400\n#define IDM_IE50_PASTE                    2401\n#define IDM_IE50_PASTE_MODE               2402\n#define IDM_GETIPRINT                     2403\n#define IDM_DISABLE_EDITFOCUS_UI          2404\n#define IDM_RESPECTVISIBILITY_INDESIGN    2405\n#define IDM_CSSEDITING_LEVEL              2406\n#define IDM_UI_OUTDENT                    2407\n#define IDM_UPDATEPAGESTATUS              2408\n#define IDM_IME_ENABLE_RECONVERSION       2409\n#define IDM_KEEPSELECTION                 2410\n#define IDM_UNLOADDOCUMENT                2411\n\n#define IDM_OVERRIDE_CURSOR               2420\n\n#define IDM_PEERHITTESTSAMEINEDIT         2423\n\n#define IDM_TRUSTAPPCACHE                 2425\n\n#define IDM_BACKGROUNDIMAGECACHE          2430\n\n#define IDM_MIMECSET__FIRST_  3609\n#define IDM_MIMECSET__LAST__  3699\n\n#define IDM_MENUEXT_FIRST__  3700\n#define IDM_MENUEXT_LAST__   3732\n#define IDM_MENUEXT_COUNT    3733\n\n#define IDM_DEFAULTBLOCK  6046\n\n#define IDM_NEW_TOPLEVELWINDOW  7050\n\n#define IDM_PRESERVEUNDOALWAYS    6049\n#define IDM_PERSISTDEFAULTVALUES  7100\n#define IDM_PROTECTMETATAGS       7101\n\n#define IDM_GETFRAMEZONE  6037\n\n#define IDM_FIRE_PRINTTEMPLATEUP    15000\n#define IDM_FIRE_PRINTTEMPLATEDOWN  15001\n#define IDM_SETPRINTHANDLES         15002\n\n#define CMD_ZOOM_PAGEWIDTH  -1\n#define CMD_ZOOM_ONEPAGE    -2\n#define CMD_ZOOM_TWOPAGES   -3\n#define CMD_ZOOM_SELECTION  -4\n#define CMD_ZOOM_FIT -5\n\n#define IDM_CONTEXT  1\n#define IDM_HWND     2\n\n#endif\n"
  },
  {
    "path": "wine/windows/mshtmdid.h",
    "content": "/*\n * Copyright 2004,2006 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __MSHTMDID_H__\n#define __MSHTMDID_H__\n\n#define DISPID_NORMAL_FIRST     1000\n#define DISPID_IE8_NORMAL_FIRST (DISPID_NORMAL_FIRST+150)\n\n#define DISPID_OMDOCUMENT       DISPID_NORMAL_FIRST\n#define DISPID_DATATRANSFER     DISPID_NORMAL_FIRST\n#define DISPID_ANCHOR           DISPID_NORMAL_FIRST\n#define DISPID_BLOCK            DISPID_NORMAL_FIRST\n#define DISPID_BR               DISPID_NORMAL_FIRST\n#define DISPID_BGSOUND          DISPID_NORMAL_FIRST\n#define DISPID_DD               DISPID_NORMAL_FIRST\n#define DISPID_DIR              DISPID_NORMAL_FIRST\n#define DISPID_DIV              DISPID_NORMAL_FIRST\n#define DISPID_DL               DISPID_NORMAL_FIRST\n#define DISPID_DT               DISPID_NORMAL_FIRST\n#define DISPID_EFONT            DISPID_NORMAL_FIRST\n#define DISPID_FORM             DISPID_NORMAL_FIRST\n#define DISPID_HEADER           DISPID_NORMAL_FIRST\n#define DISPID_HEDELEMS         DISPID_NORMAL_FIRST\n#define DISPID_HR               DISPID_NORMAL_FIRST\n#define DISPID_LABEL            DISPID_NORMAL_FIRST\n#define DISPID_LI               DISPID_NORMAL_FIRST\n#define DISPID_IMGBASE          DISPID_NORMAL_FIRST\n#define DISPID_MENU             DISPID_NORMAL_FIRST\n#define DISPID_OL               DISPID_NORMAL_FIRST\n#define DISPID_PARA             DISPID_NORMAL_FIRST\n#define DISPID_SELECT           DISPID_NORMAL_FIRST\n#define DISPID_SELECTOBJ        DISPID_NORMAL_FIRST\n#define DISPID_TABLE            DISPID_NORMAL_FIRST\n#define DISPID_TEXTSITE         DISPID_NORMAL_FIRST\n#define DISPID_UL               DISPID_NORMAL_FIRST\n#define DISPID_PHRASE           DISPID_NORMAL_FIRST\n#define DISPID_UNKNOWNPDL       DISPID_NORMAL_FIRST\n#define DISPID_COMMENTPDL       DISPID_NORMAL_FIRST\n#define DISPID_RANGE            DISPID_NORMAL_FIRST\n#define DISPID_SELECTION        DISPID_NORMAL_FIRST\n#define DISPID_OPTION           DISPID_NORMAL_FIRST\n#define DISPID_RANGE            DISPID_NORMAL_FIRST\n#define DISPID_SELECTION        DISPID_NORMAL_FIRST\n#define DISPID_OPTION           DISPID_NORMAL_FIRST\n#define DISPID_RANGE            DISPID_NORMAL_FIRST\n#define DISPID_SELECTION        DISPID_NORMAL_FIRST\n#define DISPID_OPTION           DISPID_NORMAL_FIRST\n#define DISPID_RANGE            DISPID_NORMAL_FIRST\n#define DISPID_SELECTION        DISPID_NORMAL_FIRST\n#define DISPID_OPTION           DISPID_NORMAL_FIRST\n#define DISPID_RANGE            DISPID_NORMAL_FIRST\n#define DISPID_SELECTION        DISPID_NORMAL_FIRST\n#define DISPID_OPTION           DISPID_NORMAL_FIRST\n#define DISPID_MAP              DISPID_NORMAL_FIRST\n#define DISPID_AREA             DISPID_NORMAL_FIRST\n#define DISPID_PARAM            DISPID_NORMAL_FIRST\n#define DISPID_TABLESECTION     DISPID_NORMAL_FIRST\n#define DISPID_TABLEROW         DISPID_NORMAL_FIRST\n#define DISPID_TABLECOL         DISPID_NORMAL_FIRST\n#define DISPID_SCRIPT           DISPID_NORMAL_FIRST\n#define DISPID_STYLESHEET       DISPID_NORMAL_FIRST\n#define DISPID_STYLERULE        DISPID_NORMAL_FIRST\n#define DISPID_STYLEPAGE        DISPID_NORMAL_FIRST\n#define DISPID_STYLESHEETS_COL  DISPID_NORMAL_FIRST\n#define DISPID_STYLERULES_COL   DISPID_NORMAL_FIRST\n#define DISPID_STYLEPAGES_COL   DISPID_NORMAL_FIRST\n#define DISPID_MIMETYPES_COL    DISPID_NORMAL_FIRST\n#define DISPID_PLUGINS_COL      DISPID_NORMAL_FIRST\n#define DISPID_2D               DISPID_NORMAL_FIRST\n#define DISPID_OMWINDOW         DISPID_NORMAL_FIRST\n#define DISPID_EVENTOBJ         DISPID_NORMAL_FIRST\n#define DISPID_OLESITE          DISPID_NORMAL_FIRST\n#define DISPID_FRAMESET         DISPID_NORMAL_FIRST\n#define DISPID_LINK             DISPID_NORMAL_FIRST\n#define DISPID_STYLEELEMENT     DISPID_NORMAL_FIRST\n#define DISPID_FILTERS          DISPID_NORMAL_FIRST\n#define DISPID_TABLESECTION     DISPID_NORMAL_FIRST\n#define DISPID_OMRECT           DISPID_NORMAL_FIRST\n#define DISPID_OMDOCUMENT       DISPID_NORMAL_FIRST\n#define DISPID_SCREEN           DISPID_NORMAL_FIRST\n#define DISPID_DOMATTRIBUTE     DISPID_NORMAL_FIRST\n#define DISPID_DOMTEXTNODE      DISPID_NORMAL_FIRST\n#define DISPID_GENERIC          DISPID_NORMAL_FIRST\n#define DISPID_URN_COLL         DISPID_NORMAL_FIRST\n#define DISPID_NAMESPACE_COLLECTION               DISPID_NORMAL_FIRST\n#define DISPID_NAMESPACE                          DISPID_NORMAL_FIRST\n#define DISPID_TAGNAMES_COLLECTION                DISPID_NORMAL_FIRST\n#define DISPID_XMLHTTPREQUEST                     DISPID_NORMAL_FIRST\n#define DISPID_DOCUMENTCOMPATIBLEINFO_COLLECTION  DISPID_NORMAL_FIRST\n#define DISPID_DOCUMENTCOMPATIBLEINFO             DISPID_NORMAL_FIRST\n#define DISPID_XDOMAINREQUEST   DISPID_NORMAL_FIRST\n#define DISPID_DOMSTORAGEITEM   DISPID_NORMAL_FIRST\n#define DISPID_DOMSTORAGE       DISPID_NORMAL_FIRST\n#define DISPID_DOMSTORAGELIST   DISPID_NORMAL_FIRST\n#define DISPID_RULESAPPLIED     DISPID_NORMAL_FIRST\n#define DISPID_RULESAPPLIED_COLLECTION            DISPID_NORMAL_FIRST\n#define DISPID_STYLESHEETRULESAPPLIED_COLLECTION  DISPID_NORMAL_FIRST\n#define DISPID_PROCESSINGINSTRUCTION              DISPID_NORMAL_FIRST\n#define DISPID_PERFORMANCE                        DISPID_NORMAL_FIRST\n#define DISPID_PERFORMANCENAVIGATION              DISPID_NORMAL_FIRST\n#define DISPID_PERFORMANCETIMING                  DISPID_NORMAL_FIRST\n#define DISPID_HTMLSELECTION    DISPID_NORMAL_FIRST\n#define DISPID_DOMRANGE         DISPID_NORMAL_FIRST\n#define DISPID_MEDIA            DISPID_NORMAL_FIRST\n#define DISPID_STYLEMEDIA       DISPID_NORMAL_FIRST\n\n#define DISPID_DOMEVENT                           DISPID_NORMAL_FIRST\n#define DISPID_DOMUIEVENT                         (DISPID_DOMEVENT+25)\n#define DISPID_DOMMOUSEEVENT                      (DISPID_DOMUIEVENT+25)\n#define DISPID_DOMMOUSEWHEELEVENT                 (DISPID_DOMMOUSEEVENT+25)\n#define DISPID_DOMWHEELEVENT                      (DISPID_DOMMOUSEWHEELEVENT+25)\n#define DISPID_DOMTEXTEVENT                       (DISPID_DOMWHEELEVENT+25)\n#define DISPID_DOMKEYBOARDEVENT                   (DISPID_DOMTEXTEVENT+25)\n#define DISPID_DOMCOMPOSITIONEVENT                (DISPID_DOMKEYBOARDEVENT+25)\n#define DISPID_DOMCUSTOMEVENT                     (DISPID_DOMCOMPOSITIONEVENT+25)\n#define DISPID_DOMMUTATIONEVENT                   (DISPID_DOMCUSTOMEVENT+25)\n#define DISPID_DOMFOCUSEVENT                      (DISPID_DOMMUTATIONEVENT+25)\n#define DISPID_SVGZOOMEVENT                       (DISPID_DOMFOCUSEVENT+25)\n#define DISPID_DOMSITEMODEEVENT                   (DISPID_SVGZOOMEVENT+25)\n#define DISPID_DOMMESSAGEEVENT                    (DISPID_DOMSITEMODEEVENT+25)\n#define DISPID_DOMSTORAGEEVENT                    (DISPID_DOMMESSAGEEVENT+25)\n#define DISPID_DOMBEFOREUNLOADEVENT               (DISPID_DOMSTORAGEEVENT+25)\n#define DISPID_DOMDRAGEVENT                       (DISPID_DOMBEFOREUNLOADEVENT+25)\n\n#define DISPID_DOMIMPLEMENTATION  DISPID_NORMAL_FIRST\n#define DISPID_DOCUMENTCOMPATIBLEINFO  DISPID_NORMAL_FIRST\n#define DISPID_DOCUMENTCOMPATIBLEINFOCOLLECTION  DISPID_NORMAL_FIRST\n\n#define DISPID_IE8_ANCHOR        DISPID_IE8_NORMAL_FIRST\n#define DISPID_IE8_AREA          DISPID_IE8_NORMAL_FIRST\n#define DISPID_IE8_BASE          DISPID_IE8_NORMAL_FIRST\n#define DISPID_IE8_BODY          DISPID_IE8_NORMAL_FIRST\n#define DISPID_IE8_FORM          DISPID_IE8_NORMAL_FIRST\n#define DISPID_IE8_HEAD          DISPID_IE8_NORMAL_FIRST\n#define DISPID_IE8_IMG           DISPID_IE8_NORMAL_FIRST\n#define DISPID_IE8_INPUT         DISPID_IE8_NORMAL_FIRST\n#define DISPID_IE8_LINK          DISPID_IE8_NORMAL_FIRST\n#define DISPID_IE8_MOD           DISPID_IE8_NORMAL_FIRST\n#define DISPID_IE8_SCRIPT        DISPID_IE8_NORMAL_FIRST\n#define DISPID_IE8_ATTR          DISPID_IE8_NORMAL_FIRST\n#define DISPID_IE8_NAMEDNODEMAP  DISPID_IE8_NORMAL_FIRST\n#define DISPID_IE8_COLLECTION    DISPID_IE8_NORMAL_FIRST\n#define DISPID_IE8_PARAM         DISPID_IE8_NORMAL_FIRST\n#define DISPID_IE8_EMBED         DISPID_IE8_NORMAL_FIRST\n#define DISPID_IE8_BLOCK         DISPID_IE8_NORMAL_FIRST\n#define DISPID_IE8_META          DISPID_IE8_NORMAL_FIRST\n#define DISPID_IE8_STYLE         DISPID_IE8_NORMAL_FIRST\n#define DISPID_IE8_SELECT        DISPID_IE8_NORMAL_FIRST\n\n#define DISPID_IE8_ELEMENTBASE  (DISPID_ELEMENT+200)\n#define DISPID_IE8_ELEMENTMAX   (DISPID_SITE-1)\n#define DISPID_IE8_ELEMENT      DISPID_IE8_ELEMENTBASE\n\n#define DISPID_IE8_FRAMESITEBASE  (DISPID_FRAMESITE+1120)\n#define DISPID_IE8_FRAMEMAX       (WEBOC_DISPIDBASE-1)\n#define DISPID_IE8_FRAME          DISPID_IE8_FRAMESITEBASE\n#define DISPID_IE8_IFRAME         DISPID_IE8_FRAMESITEBASE\n\n#define DISPID_IE8_OBJECTBASE  (DISPID_OBJECT+30)\n#define DISPID_IE8_OBJECTMAX   (DISPID_STYLE-1)\n#define DISPID_IE8_OBJECT      DISPID_IE8_OBJECTBASE\n\n#define DISPID_IE9_ELEMENTBASE  (DISPID_IE8_ELEMENTMAX  + 10)\n#define DISPID_IE9_ELEMENTMAX   (DISPID_IE9_ELEMENTBASE + 35)\n#define DISPID_IE9_ELEMENT      DISPID_IE9_ELEMENTBASE\n\n#define DISPID_COLLECTION      (DISPID_NORMAL_FIRST+500)\n#define DISPID_OPTIONS_COL     (DISPID_NORMAL_FIRST+500)\n#define DISPID_IMG             (DISPID_IMGBASE+1000)\n#define DISPID_INPUTIMAGE      (DISPID_IMGBASE+1000)\n#define DISPID_INPUT           (DISPID_TEXTSITE+1000)\n#define DISPID_TABLECELL       (DISPID_TEXTSITE+1000)\n#define DISPID_1D              (DISPID_TEXTSITE+1000)\n#define DISPID_BODY            (DISPID_TEXTSITE+1000)\n#define DISPID_INPUTTEXTBASE   (DISPID_INPUT+1000)\n#define DISPID_INPUTTEXT       (DISPID_INPUTTEXTBASE+1000)\n#define DISPID_TEXTAREA        (DISPID_INPUTTEXT+1000)\n#define DISPID_MARQUEE         (DISPID_TEXTAREA+1000)\n#define DISPID_RICHTEXT        (DISPID_MARQUEE+1000)\n#define DISPID_BUTTON          (DISPID_RICHTEXT+1000)\n\n#define DISPID_XOBJ_MIN       0x80010000\n#define DISPID_XOBJ_MAX       0x8001FFFF\n#define DISPID_XOBJ_BASE      DISPID_XOBJ_MIN\n#define DISPID_HTMLOBJECT     (DISPID_XOBJ_BASE+500)\n#define DISPID_ELEMENT        (DISPID_HTMLOBJECT+500)\n#define DISPID_SITE           (DISPID_ELEMENT+1000)\n#define DISPID_OBJECT         (DISPID_SITE+1000)\n#define DISPID_STYLE          (DISPID_OBJECT+1000)\n#define DISPID_BASE_STYLE     (DISPID_STYLE+500)\n#define DISPID_ATTRS          (DISPID_BASE_STYLE+500)\n#define DISPID_EVENTS         (DISPID_ATTRS+1000)\n#define DISPID_XOBJ_EXPANDO   (DISPID_EVENTS+1000)\n#define DISPID_XOBJ_ORDINAL   (DISPID_XOBJ_EXPANDO+1000)\n#define DISPID_RADIO          (DISPID_CHECKBOX+1000)\n#define DISPID_FRAMESITE      (DISPID_SITE+1000)\n#define DISPID_FRAME          (DISPID_FRAMESITE+1000)\n#define DISPID_IFRAME         (DISPID_FRAMESITE+1000)\n\n#define DISPID_WINDOW      1\n#define DISPID_HISTORY     1\n#define DISPID_LOCATION    1\n#define DISPID_NAVIGATOR   1\n\n#define STDPROPID_XOBJ_NAME              (DISPID_XOBJ_BASE+0)\n#define STDPROPID_XOBJ_INDEX             (DISPID_XOBJ_BASE+1)\n#define STDPROPID_XOBJ_BASEHREF          (DISPID_XOBJ_BASE+2)\n#define STDPROPID_XOBJ_LEFT              (DISPID_XOBJ_BASE+3)\n#define STDPROPID_XOBJ_TOP               (DISPID_XOBJ_BASE+4)\n#define STDPROPID_XOBJ_WIDTH             (DISPID_XOBJ_BASE+5)\n#define STDPROPID_XOBJ_HEIGHT            (DISPID_XOBJ_BASE+6)\n#define STDPROPID_XOBJ_VISIBLE           (DISPID_XOBJ_BASE+7)\n#define STDPROPID_XOBJ_PARENT            (DISPID_XOBJ_BASE+8)\n#define STDPROPID_XOBJ_DRAGMODE          (DISPID_XOBJ_BASE+9)\n#define STDPROPID_XOBJ_DRAGICON          (DISPID_XOBJ_BASE+10)\n#define STDPROPID_XOBJ_TAG               (DISPID_XOBJ_BASE+11)\n#define STDPROPID_XOBJ_TABSTOP           (DISPID_XOBJ_BASE+14)\n#define STDPROPID_XOBJ_TABINDEX          (DISPID_XOBJ_BASE+15)\n#define STDPROPID_XOBJ_HELPCONTEXTID     (DISPID_XOBJ_BASE+50)\n#define STDPROPID_XOBJ_DEFAULT           (DISPID_XOBJ_BASE+55)\n#define STDPROPID_XOBJ_CANCEL            (DISPID_XOBJ_BASE+56)\n#define STDPROPID_XOBJ_LEFTNORUN         (DISPID_XOBJ_BASE+57)\n#define STDPROPID_XOBJ_TOPNORUN          (DISPID_XOBJ_BASE+58)\n#define STDPROPID_XOBJ_ALIGNPERSIST      (DISPID_XOBJ_BASE+60)\n#define STDPROPID_XOBJ_LINKTIMEOUT       (DISPID_XOBJ_BASE+61)\n#define STDPROPID_XOBJ_LINKTOPIC         (DISPID_XOBJ_BASE+62)\n#define STDPROPID_XOBJ_LINKITEM          (DISPID_XOBJ_BASE+63)\n#define STDPROPID_XOBJ_LINKMODE          (DISPID_XOBJ_BASE+64)\n#define STDPROPID_XOBJ_DATACHANGED       (DISPID_XOBJ_BASE+65)\n#define STDPROPID_XOBJ_DATAFIELD         (DISPID_XOBJ_BASE+66)\n#define STDPROPID_XOBJ_DATASOURCE        (DISPID_XOBJ_BASE+67)\n#define STDPROPID_XOBJ_WHATSTHISHELPID   (DISPID_XOBJ_BASE+68)\n#define STDPROPID_XOBJ_CONTROLTIPTEXT    (DISPID_XOBJ_BASE+69)\n#define STDPROPID_XOBJ_STATUSBARTEXT     (DISPID_XOBJ_BASE+70)\n#define STDPROPID_XOBJ_APPLICATION       (DISPID_XOBJ_BASE+71)\n#define STDPROPID_XOBJ_BLOCKALIGN        (DISPID_XOBJ_BASE+72)\n#define STDPROPID_XOBJ_CONTROLALIGN      (DISPID_XOBJ_BASE+73)\n#define STDPROPID_XOBJ_STYLE             (DISPID_XOBJ_BASE+74)\n#define STDPROPID_XOBJ_COUNT             (DISPID_XOBJ_BASE+75)\n#define STDPROPID_XOBJ_DISABLED          (DISPID_XOBJ_BASE+76)\n#define STDPROPID_XOBJ_RIGHT             (DISPID_XOBJ_BASE+77)\n#define STDPROPID_XOBJ_BOTTOM            (DISPID_XOBJ_BASE+78)\n\n#define STDDISPID_XOBJ_ONBLUR             (DISPID_XOBJ_BASE+0)\n#define STDDISPID_XOBJ_ONFOCUS            (DISPID_XOBJ_BASE+1)\n#define STDDISPID_XOBJ_BEFOREUPDATE       (DISPID_XOBJ_BASE+4)\n#define STDDISPID_XOBJ_AFTERUPDATE        (DISPID_XOBJ_BASE+5)\n#define STDDISPID_XOBJ_ONROWEXIT          (DISPID_XOBJ_BASE+6)\n#define STDDISPID_XOBJ_ONROWENTER         (DISPID_XOBJ_BASE+7)\n#define STDDISPID_XOBJ_ONMOUSEOVER        (DISPID_XOBJ_BASE+8)\n#define STDDISPID_XOBJ_ONMOUSEOUT         (DISPID_XOBJ_BASE+9)\n#define STDDISPID_XOBJ_ONHELP             (DISPID_XOBJ_BASE+10)\n#define STDDISPID_XOBJ_ONDRAGSTART        (DISPID_XOBJ_BASE+11)\n#define STDDISPID_XOBJ_ONSELECTSTART      (DISPID_XOBJ_BASE+12)\n#define STDDISPID_XOBJ_ERRORUPDATE        (DISPID_XOBJ_BASE+13)\n#define STDDISPID_XOBJ_ONDATASETCHANGED   (DISPID_XOBJ_BASE+14)\n#define STDDISPID_XOBJ_ONDATAAVAILABLE    (DISPID_XOBJ_BASE+15)\n#define STDDISPID_XOBJ_ONDATASETCOMPLETE  (DISPID_XOBJ_BASE+16)\n#define STDDISPID_XOBJ_ONFILTER           (DISPID_XOBJ_BASE+17)\n#define STDDISPID_XOBJ_ONLOSECAPTURE      (DISPID_XOBJ_BASE+18)\n#define STDDISPID_XOBJ_ONPROPERTYCHANGE   (DISPID_XOBJ_BASE+19)\n#define STDDISPID_XOBJ_ONDRAG             (DISPID_XOBJ_BASE+20)\n#define STDDISPID_XOBJ_ONDRAGEND          (DISPID_XOBJ_BASE+21)\n#define STDDISPID_XOBJ_ONDRAGENTER        (DISPID_XOBJ_BASE+22)\n#define STDDISPID_XOBJ_ONDRAGOVER         (DISPID_XOBJ_BASE+23)\n#define STDDISPID_XOBJ_ONDRAGLEAVE        (DISPID_XOBJ_BASE+24)\n#define STDDISPID_XOBJ_ONDROP             (DISPID_XOBJ_BASE+25)\n#define STDDISPID_XOBJ_ONCUT              (DISPID_XOBJ_BASE+26)\n#define STDDISPID_XOBJ_ONCOPY             (DISPID_XOBJ_BASE+27)\n#define STDDISPID_XOBJ_ONPASTE            (DISPID_XOBJ_BASE+28)\n#define STDDISPID_XOBJ_ONBEFORECUT        (DISPID_XOBJ_BASE+29)\n#define STDDISPID_XOBJ_ONBEFORECOPY       (DISPID_XOBJ_BASE+30)\n#define STDDISPID_XOBJ_ONBEFOREPASTE      (DISPID_XOBJ_BASE+31)\n#define STDDISPID_XOBJ_ONROWSDELETE       (DISPID_XOBJ_BASE+32)\n#define STDDISPID_XOBJ_ONROWSINSERTED     (DISPID_XOBJ_BASE+33)\n#define STDDISPID_XOBJ_ONCELLCHANGE       (DISPID_XOBJ_BASE+34)\n\n#define DISPID_A_FIRST                       DISPID_ATTRS\n#define DISPID_A_BACKGROUNDIMAGE             (DISPID_A_FIRST+1)\n#define DISPID_A_COLOR                       (DISPID_A_FIRST+2)\n#define DISPID_A_TEXTTRANSFORM               (DISPID_A_FIRST+4)\n#define DISPID_A_NOWRAP                      (DISPID_A_FIRST+5)\n#define DISPID_A_LINEHEIGHT                  (DISPID_A_FIRST+6)\n#define DISPID_A_TEXTINDENT                  (DISPID_A_FIRST+7)\n#define DISPID_A_LETTERSPACING               (DISPID_A_FIRST+8)\n#define DISPID_A_LANG                        (DISPID_A_FIRST+9)\n#define DISPID_A_OVERFLOW                    (DISPID_A_FIRST+10)\n#define DISPID_A_PADDING                     (DISPID_A_FIRST+11)\n#define DISPID_A_PADDINGTOP                  (DISPID_A_FIRST+12)\n#define DISPID_A_PADDINGRIGHT                (DISPID_A_FIRST+13)\n#define DISPID_A_PADDINGBOTTOM               (DISPID_A_FIRST+14)\n#define DISPID_A_PADDINGLEFT                 (DISPID_A_FIRST+15)\n#define DISPID_A_CLEAR                       (DISPID_A_FIRST+16)\n#define DISPID_A_LISTTYPE                    (DISPID_A_FIRST+17)\n#define DISPID_A_FONTFACE                    (DISPID_A_FIRST+18)\n#define DISPID_A_FONTSIZE                    (DISPID_A_FIRST+19)\n#define DISPID_A_TEXTDECORATIONLINETHROUGH   (DISPID_A_FIRST+20)\n#define DISPID_A_TEXTDECORATIONUNDERLINE     (DISPID_A_FIRST+21)\n#define DISPID_A_TEXTDECORATIONBLINK         (DISPID_A_FIRST+22)\n#define DISPID_A_TEXTDECORATIONNONE          (DISPID_A_FIRST+23)\n#define DISPID_A_FONTSTYLE                   (DISPID_A_FIRST+24)\n#define DISPID_A_FONTVARIANT                 (DISPID_A_FIRST+25)\n#define DISPID_A_BASEFONT                    (DISPID_A_FIRST+26)\n#define DISPID_A_FONTWEIGHT                  (DISPID_A_FIRST+27)\n#define DISPID_A_TABLEBORDERCOLOR            (DISPID_A_FIRST+28)\n#define DISPID_A_TABLEBORDERCOLORLIGHT       (DISPID_A_FIRST+29)\n#define DISPID_A_TABLEBORDERCOLORDARK        (DISPID_A_FIRST+30)\n#define DISPID_A_TABLEVALIGN                 (DISPID_A_FIRST+31)\n#define DISPID_A_BACKGROUND                  (DISPID_A_FIRST+32)\n#define DISPID_A_BACKGROUNDPOSX              (DISPID_A_FIRST+33)\n#define DISPID_A_BACKGROUNDPOSY              (DISPID_A_FIRST+34)\n#define DISPID_A_TEXTDECORATION              (DISPID_A_FIRST+35)\n#define DISPID_A_MARGIN                      (DISPID_A_FIRST+36)\n#define DISPID_A_MARGINTOP                   (DISPID_A_FIRST+37)\n#define DISPID_A_MARGINRIGHT                 (DISPID_A_FIRST+38)\n#define DISPID_A_MARGINBOTTOM                (DISPID_A_FIRST+39)\n#define DISPID_A_MARGINLEFT                  (DISPID_A_FIRST+40)\n#define DISPID_A_FONT                        (DISPID_A_FIRST+41)\n#define DISPID_A_FONTSIZEKEYWORD             (DISPID_A_FIRST+42)\n#define DISPID_A_FONTSIZECOMBINE             (DISPID_A_FIRST+43)\n#define DISPID_A_BACKGROUNDREPEAT            (DISPID_A_FIRST+44)\n#define DISPID_A_BACKGROUNDATTACHMENT        (DISPID_A_FIRST+45)\n#define DISPID_A_BACKGROUNDPOSITION          (DISPID_A_FIRST+46)\n#define DISPID_A_WORDSPACING                 (DISPID_A_FIRST+47)\n#define DISPID_A_VERTICALALIGN               (DISPID_A_FIRST+48)\n#define DISPID_A_BORDER                      (DISPID_A_FIRST+49)\n#define DISPID_A_BORDERTOP                   (DISPID_A_FIRST+50)\n#define DISPID_A_BORDERRIGHT                 (DISPID_A_FIRST+51)\n#define DISPID_A_BORDERBOTTOM                (DISPID_A_FIRST+52)\n#define DISPID_A_BORDERLEFT                  (DISPID_A_FIRST+53)\n#define DISPID_A_BORDERCOLOR                 (DISPID_A_FIRST+54)\n#define DISPID_A_BORDERTOPCOLOR              (DISPID_A_FIRST+55)\n#define DISPID_A_BORDERRIGHTCOLOR            (DISPID_A_FIRST+56)\n#define DISPID_A_BORDERBOTTOMCOLOR           (DISPID_A_FIRST+57)\n#define DISPID_A_BORDERLEFTCOLOR             (DISPID_A_FIRST+58)\n#define DISPID_A_BORDERWIDTH                 (DISPID_A_FIRST+59)\n#define DISPID_A_BORDERTOPWIDTH              (DISPID_A_FIRST+60)\n#define DISPID_A_BORDERRIGHTWIDTH            (DISPID_A_FIRST+61)\n#define DISPID_A_BORDERBOTTOMWIDTH           (DISPID_A_FIRST+62)\n#define DISPID_A_BORDERLEFTWIDTH             (DISPID_A_FIRST+63)\n#define DISPID_A_BORDERSTYLE                 (DISPID_A_FIRST+64)\n#define DISPID_A_BORDERTOPSTYLE              (DISPID_A_FIRST+65)\n#define DISPID_A_BORDERRIGHTSTYLE            (DISPID_A_FIRST+66)\n#define DISPID_A_BORDERBOTTOMSTYLE           (DISPID_A_FIRST+67)\n#define DISPID_A_BORDERLEFTSTYLE             (DISPID_A_FIRST+68)\n#define DISPID_A_TEXTDECORATIONOVERLINE      (DISPID_A_FIRST+69)\n#define DISPID_A_FLOAT                       (DISPID_A_FIRST+70)\n#define DISPID_A_DISPLAY                     (DISPID_A_FIRST+71)\n#define DISPID_A_LISTSTYLETYPE               (DISPID_A_FIRST+72)\n#define DISPID_A_LISTSTYLEPOSITION           (DISPID_A_FIRST+73)\n#define DISPID_A_LISTSTYLEIMAGE              (DISPID_A_FIRST+74)\n#define DISPID_A_LISTSTYLE                   (DISPID_A_FIRST+75)\n#define DISPID_A_WHITESPACE                  (DISPID_A_FIRST+76)\n#define DISPID_A_PAGEBREAKBEFORE             (DISPID_A_FIRST+77)\n#define DISPID_A_PAGEBREAKAFTER              (DISPID_A_FIRST+78)\n#define DISPID_A_SCROLL                      (DISPID_A_FIRST+79)\n#define DISPID_A_VISIBILITY                  (DISPID_A_FIRST+80)\n#define DISPID_A_HIDDEN                      (DISPID_A_FIRST+81)\n#define DISPID_A_FILTER                      (DISPID_A_FIRST+82)\n#define DISPID_DEFAULTVALUE                  (DISPID_A_FIRST+83)\n#define DISPID_A_BORDERCOLLAPSE              (DISPID_A_FIRST+84)\n#define DISPID_A_POSITION                    (DISPID_A_FIRST+90)\n#define DISPID_A_ZINDEX                      (DISPID_A_FIRST+91)\n#define DISPID_A_CLIP                        (DISPID_A_FIRST+92)\n#define DISPID_A_CLIPRECTTOP                 (DISPID_A_FIRST+93)\n#define DISPID_A_CLIPRECTRIGHT               (DISPID_A_FIRST+94)\n#define DISPID_A_CLIPRECTBOTTOM              (DISPID_A_FIRST+95)\n#define DISPID_A_CLIPRECTLEFT                (DISPID_A_FIRST+96)\n#define DISPID_A_FONTFACESRC                 (DISPID_A_FIRST+97)\n#define DISPID_A_TABLELAYOUT                 (DISPID_A_FIRST+98)\n#define DISPID_A_STYLETEXT                   (DISPID_A_FIRST+99)\n#define DISPID_A_LANGUAGE                    (DISPID_A_FIRST+100)\n#define DISPID_A_VALUE                       (DISPID_A_FIRST+101)\n#define DISPID_A_CURSOR                      (DISPID_A_FIRST+102)\n#define DISPID_A_EVENTSINK                   (DISPID_A_FIRST+103)\n#define DISPID_A_PROPNOTIFYSINK              (DISPID_A_FIRST+104)\n#define DISPID_A_ROWSETNOTIFYSINK            (DISPID_A_FIRST+105)\n#define DISPID_INTERNAL_INLINESTYLEAA        (DISPID_A_FIRST+106)\n#define DISPID_INTERNAL_CSTYLEPTRCACHE       (DISPID_A_FIRST+107)\n#define DISPID_INTERNAL_CRUNTIMESTYLEPTRCACHE  (DISPID_A_FIRST+108)\n#define DISPID_INTERNAL_INVOKECONTEXT        (DISPID_A_FIRST+109)\n#define DISPID_A_BGURLIMGCTXCACHEINDEX       (DISPID_A_FIRST+110)\n#define DISPID_A_LIURLIMGCTXCACHEINDEX       (DISPID_A_FIRST+111)\n#define DISPID_A_ROWSETASYNCHNOTIFYSINK      (DISPID_A_FIRST+112)\n#define DISPID_INTERNAL_FILTERPTRCACHE       (DISPID_A_FIRST+113)\n#define DISPID_A_ROWPOSITIONCHANGESINK       (DISPID_A_FIRST+114)\n#define DISPID_A_BEHAVIOR                    (DISPID_A_FIRST+115)\n#define DISPID_A_READYSTATE                  (DISPID_A_FIRST+116)\n#define DISPID_A_DIR                         (DISPID_A_FIRST+117)\n#define DISPID_A_UNICODEBIDI                 (DISPID_A_FIRST+118)\n#define DISPID_A_DIRECTION                   (DISPID_A_FIRST+119)\n#define DISPID_A_IMEMODE                     (DISPID_A_FIRST+120)\n#define DISPID_A_RUBYALIGN                   (DISPID_A_FIRST+121)\n#define DISPID_A_RUBYPOSITION                (DISPID_A_FIRST+122)\n#define DISPID_A_RUBYOVERHANG                (DISPID_A_FIRST+123)\n#define DISPID_INTERNAL_ONBEHAVIOR_CONTENTREADY   (DISPID_A_FIRST+124)\n#define DISPID_INTERNAL_ONBEHAVIOR_DOCUMENTREADY  (DISPID_A_FIRST+125)\n#define DISPID_INTERNAL_CDOMCHILDRENPTRCACHE (DISPID_A_FIRST+126)\n#define DISPID_A_LAYOUTGRIDCHAR              (DISPID_A_FIRST+127)\n#define DISPID_A_LAYOUTGRIDLINE              (DISPID_A_FIRST+128)\n#define DISPID_A_LAYOUTGRIDMODE              (DISPID_A_FIRST+129)\n#define DISPID_A_LAYOUTGRIDTYPE              (DISPID_A_FIRST+130)\n#define DISPID_A_LAYOUTGRID                  (DISPID_A_FIRST+131)\n#define DISPID_A_TEXTAUTOSPACE               (DISPID_A_FIRST+132)\n#define DISPID_A_LINEBREAK                   (DISPID_A_FIRST+133)\n#define DISPID_A_WORDBREAK                   (DISPID_A_FIRST+134)\n#define DISPID_A_TEXTJUSTIFY                 (DISPID_A_FIRST+135)\n#define DISPID_A_TEXTJUSTIFYTRIM             (DISPID_A_FIRST+136)\n#define DISPID_A_TEXTKASHIDA                 (DISPID_A_FIRST+137)\n#define DISPID_A_OVERFLOWX                   (DISPID_A_FIRST+139)\n#define DISPID_A_OVERFLOWY                   (DISPID_A_FIRST+140)\n#define DISPID_A_HTCDISPATCHITEM_VALUE       (DISPID_A_FIRST+141)\n#define DISPID_A_DOCFRAGMENT                 (DISPID_A_FIRST+142)\n#define DISPID_A_HTCDD_ELEMENT               (DISPID_A_FIRST+143)\n#define DISPID_A_HTCDD_CREATEEVENTOBJECT     (DISPID_A_FIRST+144)\n#define DISPID_A_URNATOM                     (DISPID_A_FIRST+145)\n#define DISPID_A_UNIQUEPEERNUMBER            (DISPID_A_FIRST+146)\n#define DISPID_A_ACCELERATOR                 (DISPID_A_FIRST+147)\n#define DISPID_INTERNAL_ONBEHAVIOR_APPLYSTYLE       (DISPID_A_FIRST+148)\n#define DISPID_INTERNAL_RUNTIMESTYLEAA              (DISPID_A_FIRST+149)\n#define DISPID_A_HTCDISPATCHITEM_VALUE_SCRIPTSONLY  (DISPID_A_FIRST+150)\n#define DISPID_A_EXTENDEDTAGDESC             (DISPID_A_FIRST+151)\n#define DISPID_A_ROTATE                      (DISPID_A_FIRST+152)\n#define DISPID_A_ZOOM                        (DISPID_A_FIRST+153)\n#define DISPID_A_HTCDD_PROTECTEDELEMENT      (DISPID_A_FIRST+154)\n#define DISPID_A_LAYOUTFLOW                  (DISPID_A_FIRST+155)\n#define DISPID_A_HTCDD_ISMARKUPSHARED        (DISPID_A_FIRST+157)\n#define DISPID_A_WORDWRAP                    (DISPID_A_FIRST+158)\n#define DISPID_A_TEXTUNDERLINEPOSITION       (DISPID_A_FIRST+159)\n#define DISPID_A_HASLAYOUT                   (DISPID_A_FIRST+160)\n#define DISPID_A_MEDIA                       (DISPID_A_FIRST+161)\n#define DISPID_A_EDITABLE                    (DISPID_A_FIRST+162)\n#define DISPID_A_HIDEFOCUS                   (DISPID_A_FIRST+163)\n#define DISPID_INTERNAL_LAYOUTRECTREGISTRYPTRCACHE  (DISPID_A_FIRST+164)\n#define DISPID_A_HTCDD_DEFAULTS              (DISPID_A_FIRST+165)\n#define DISPID_A_TEXTLINETHROUGHSTYLE        (DISPID_A_FIRST+166)\n#define DISPID_A_TEXTUNDERLINESTYLE          (DISPID_A_FIRST+167)\n#define DISPID_A_TEXTEFFECT                  (DISPID_A_FIRST+168)\n#define DISPID_A_TEXTBACKGROUNDCOLOR         (DISPID_A_FIRST+169)\n#define DISPID_A_RENDERINGPRIORITY           (DISPID_A_FIRST+170)\n#define DISPID_INTERNAL_DWNPOSTPTRCACHE      (DISPID_A_FIRST+171)\n#define DISPID_INTERNAL_CODEPAGESETTINGSPTRCACHE  (DISPID_A_FIRST+172)\n#define DISPID_INTERNAL_DWNDOCPTRCACHE       (DISPID_A_FIRST+173)\n#define DISPID_INTERNAL_DATABINDTASKPTRCACHE (DISPID_A_FIRST+174)\n#define DISPID_INTERNAL_URLLOCATIONCACHE     (DISPID_A_FIRST+175)\n#define DISPID_INTERNAL_ARYELEMENTRELEASENOTIFYPTRCACHE  (DISPID_A_FIRST+176)\n#define DISPID_INTERNAL_PEERFACTORYURLMAPPTRCACHE        (DISPID_A_FIRST+177)\n#define DISPID_INTERNAL_STMDIRTYPTRCACHE     (DISPID_A_FIRST+178)\n#define DISPID_INTERNAL_COMPUTEFORMATSTATECACHE  (DISPID_A_FIRST+179)\n#define DISPID_A_SCROLLBARBASECOLOR          (DISPID_A_FIRST+180)\n#define DISPID_A_SCROLLBARFACECOLOR          (DISPID_A_FIRST+181)\n#define DISPID_A_SCROLLBAR3DLIGHTCOLOR       (DISPID_A_FIRST+182)\n#define DISPID_A_SCROLLBARSHADOWCOLOR        (DISPID_A_FIRST+183)\n#define DISPID_A_SCROLLBARHIGHLIGHTCOLOR     (DISPID_A_FIRST+184)\n#define DISPID_A_SCROLLBARDARKSHADOWCOLOR    (DISPID_A_FIRST+185)\n#define DISPID_A_SCROLLBARARROWCOLOR         (DISPID_A_FIRST+186)\n#define DISPID_INTERNAL_ONBEHAVIOR_CONTENTSAVE  (DISPID_A_FIRST+187)\n#define DISPID_A_DEFAULTTEXTSELECTION        (DISPID_A_FIRST+188)\n#define DISPID_A_TEXTDECORATIONCOLOR         (DISPID_A_FIRST+189)\n#define DISPID_A_TEXTCOLOR                   (DISPID_A_FIRST+190)\n#define DISPID_A_STYLETEXTDECORATION         (DISPID_A_FIRST+191)\n#define DISPID_A_WRITINGMODE                 (DISPID_A_FIRST+192)\n#define DISPID_INTERNAL_MEDIA_REFERENCE      (DISPID_A_FIRST+193)\n#define DISPID_INTERNAL_GENERICCOMPLUSREF    (DISPID_A_FIRST+194)\n#define DISPID_INTERNAL_FOCUSITEMS           (DISPID_A_FIRST+195)\n#define DISPID_A_SCROLLBARTRACKCOLOR         (DISPID_A_FIRST+196)\n#define DISPID_INTERNAL_DWNHEADERCACHE       (DISPID_A_FIRST+197)\n#define DISPID_A_FROZEN                      (DISPID_A_FIRST+198)\n#define DISPID_A_VIEWINHERITSTYLE            (DISPID_A_FIRST+199)\n#define DISPID_INTERNAL_FRAMESCOLLECTION     (DISPID_A_FIRST+200)\n#define DISPID_A_BGURLIMGCTXCACHEINDEX_FLINE (DISPID_A_FIRST+201)\n#define DISPID_A_BGURLIMGCTXCACHEINDEX_FLETTER  (DISPID_A_FIRST+202)\n#define DISPID_A_TEXTALIGNLAST               (DISPID_A_FIRST+203)\n#define DISPID_A_TEXTKASHIDASPACE            (DISPID_A_FIRST+204)\n#define DISPID_INTERNAL_FONTHISTORYINDEX     (DISPID_A_FIRST+205)\n#define DISPID_A_ALLOWTRANSPARENCY           (DISPID_A_FIRST+206)\n#define DISPID_INTERNAL_URLSEARCHCACHE       (DISPID_A_FIRST+207)\n#define DISPID_A_ISBLOCK                     (DISPID_A_FIRST+208)\n#define DISPID_A_TEXTOVERFLOW                (DISPID_A_FIRST+209)\n#define DISPID_INTERNAL_CATTRIBUTECOLLPTRCACHE  (DISPID_A_FIRST+210)\n#define DISPID_A_MINHEIGHT                   (DISPID_A_FIRST+211)\n#define DISPID_INTERNAL_INVOKECONTEXTDOCUMENT   (DISPID_A_FIRST+212)\n#define DISPID_A_INTERPOLATION               (DISPID_A_FIRST+213)\n#define DISPID_A_MAXHEIGHT                   (DISPID_A_FIRST+214)\n#define DISPID_A_MINWIDTH                    (DISPID_A_FIRST+215)\n#define DISPID_A_MAXWIDTH                    (DISPID_A_FIRST+216)\n#define DISPID_INTERNAL_ARYOBJECTRELEASECLEANUPPTRCACHE  (DISPID_A_FIRST+217)\n#define DISPID_A_CONTENT                     (DISPID_A_FIRST+218)\n#define DISPID_A_CAPTIONSIDE                 (DISPID_A_FIRST+219)\n#define DISPID_A_COUNTERINCREMENT            (DISPID_A_FIRST+220)\n#define DISPID_A_COUNTERRESET                (DISPID_A_FIRST+221)\n#define DISPID_A_OUTLINE                     (DISPID_A_FIRST+222)\n#define DISPID_A_OUTLINEWIDTH                (DISPID_A_FIRST+223)\n#define DISPID_A_OUTLINESTYLE                (DISPID_A_FIRST+224)\n#define DISPID_A_OUTLINECOLOR                (DISPID_A_FIRST+225)\n#define DISPID_A_BOXSIZING                   (DISPID_A_FIRST+226)\n#define DISPID_A_BORDERSPACING               (DISPID_A_FIRST+227)\n#define DISPID_A_ORPHANS                     (DISPID_A_FIRST+228)\n#define DISPID_A_WIDOWS                      (DISPID_A_FIRST+229)\n#define DISPID_A_PAGEBREAKINSIDE             (DISPID_A_FIRST+230)\n#define DISPID_A_MS_BEHAVIOR                 (DISPID_A_FIRST+231)\n#define DISPID_A_MS_SCROLLBARBASECOLOR       (DISPID_A_FIRST+232)\n#define DISPID_A_MS_SCROLLBARFACECOLOR       (DISPID_A_FIRST+233)\n#define DISPID_A_MS_SCROLLBAR3DLIGHTCOLOR    (DISPID_A_FIRST+234)\n#define DISPID_A_MS_SCROLLBARSHADOWCOLOR     (DISPID_A_FIRST+235)\n#define DISPID_A_MS_SCROLLBARHIGHLIGHTCOLOR  (DISPID_A_FIRST+236)\n#define DISPID_A_MS_SCROLLBARDARKSHADOWCOLOR (DISPID_A_FIRST+237)\n#define DISPID_A_MS_SCROLLBARARROWCOLOR      (DISPID_A_FIRST+238)\n#define DISPID_A_MS_SCROLLBARTRACKCOLOR      (DISPID_A_FIRST+239)\n#define DISPID_A_MS_TEXTALIGNLAST            (DISPID_A_FIRST+240)\n#define DISPID_A_MS_TEXTOVERFLOW             (DISPID_A_FIRST+241)\n#define DISPID_A_MS_TEXTUNDERLINEPOSITION    (DISPID_A_FIRST+242)\n#define DISPID_A_MS_WRITINGMODE              (DISPID_A_FIRST+243)\n#define DISPID_A_MS_IMEMODE                  (DISPID_A_FIRST+244)\n#define DISPID_A_MS_BACKGROUNDPOSX           (DISPID_A_FIRST+245)\n#define DISPID_A_MS_BACKGROUNDPOSY           (DISPID_A_FIRST+246)\n#define DISPID_A_MS_ACCELERATOR              (DISPID_A_FIRST+247)\n#define DISPID_A_MS_LAYOUTFLOW               (DISPID_A_FIRST+248)\n#define DISPID_A_MS_ZOOM                     (DISPID_A_FIRST+249)\n#define DISPID_A_EMPTYCELLS                  (DISPID_A_FIRST+250)\n#define DISPID_A_MS_BLOCKPROGRESSION         (DISPID_A_FIRST+251)\n#define DISPID_A_QUOTES                      (DISPID_A_FIRST+252)\n#define DISPID_INTERNAL_BGURLIMGCTXCACHEINDEX_GCBEFORE   (DISPID_A_FIRST+253)\n#define DISPID_INTERNAL_BGURLIMGCTXCACHEINDEX_GCAFTER    (DISPID_A_FIRST+254)\n#define DISPID_INTERNAL_BGURLIMGCTXCACHEINDEX_URLBEFORE  (DISPID_A_FIRST+255)\n#define DISPID_INTERNAL_BGURLIMGCTXCACHEINDEX_URLAFTER   (DISPID_A_FIRST+256)\n#define DISPID_AAHEADER                      (DISPID_A_FIRST+257)\n#define DISPID_INTERNAL_GETTERSETTERCOLLECTION           (DISPID_A_FIRST+258)\n#define DISPID_A_MS_LAYOUTGRIDCHAR           (DISPID_A_FIRST+259)\n#define DISPID_A_MS_LAYOUTGRIDLINE           (DISPID_A_FIRST+260)\n#define DISPID_A_MS_LAYOUTGRIDMODE           (DISPID_A_FIRST+261)\n#define DISPID_A_MS_LAYOUTGRIDTYPE           (DISPID_A_FIRST+262)\n#define DISPID_A_MS_LAYOUTGRID               (DISPID_A_FIRST+263)\n#define DISPID_A_MS_LINEBREAK                (DISPID_A_FIRST+264)\n#define DISPID_A_MS_FILTER                   (DISPID_A_FIRST+265)\n#define DISPID_A_MS_OVERFLOWX                (DISPID_A_FIRST+266)\n#define DISPID_A_MS_OVERFLOWY                (DISPID_A_FIRST+267)\n#define DISPID_A_MS_TEXTAUTOSPACE            (DISPID_A_FIRST+268)\n#define DISPID_A_MS_TEXTJUSTIFY              (DISPID_A_FIRST+269)\n#define DISPID_A_MS_TEXTKASHIDASPACE         (DISPID_A_FIRST+270)\n#define DISPID_A_MS_WORDBREAK                (DISPID_A_FIRST+271)\n#define DISPID_A_MS_WORDWRAP                 (DISPID_A_FIRST+272)\n#define DISPID_INTERNAL_URIBEFOREREDIRECT    (DISPID_A_FIRST+273)\n#define DISPID_A_ALIGNMENTBASELINE           (DISPID_A_FIRST+278)\n#define DISPID_A_BASELINESHIFT               (DISPID_A_FIRST+279)\n#define DISPID_A_DOMINANTBASELINE            (DISPID_A_FIRST+280)\n#define DISPID_A_FONTSIZEADJUST              (DISPID_A_FIRST+281)\n#define DISPID_A_FONTSTRETCH                 (DISPID_A_FIRST+282)\n#define DISPID_A_OPACITY                     (DISPID_A_FIRST+283)\n#define DISPID_A_CLIPPATH                    (DISPID_A_FIRST+284)\n#define DISPID_A_CLIPRULE                    (DISPID_A_FIRST+285)\n#define DISPID_A_FILL                        (DISPID_A_FIRST+286)\n#define DISPID_A_FILLOPACITY                 (DISPID_A_FIRST+287)\n#define DISPID_A_FILLRULE                    (DISPID_A_FIRST+288)\n#define DISPID_A_KERNING                     (DISPID_A_FIRST+289)\n#define DISPID_A_MARKER                      (DISPID_A_FIRST+290)\n#define DISPID_A_MARKEREND                   (DISPID_A_FIRST+291)\n#define DISPID_A_MARKERMID                   (DISPID_A_FIRST+292)\n#define DISPID_A_MARKERSTART                 (DISPID_A_FIRST+293)\n#define DISPID_A_MASK                        (DISPID_A_FIRST+294)\n#define DISPID_A_POINTEREVENTS               (DISPID_A_FIRST+295)\n#define DISPID_A_STOPCOLOR                   (DISPID_A_FIRST+296)\n#define DISPID_A_STOPOPACITY                 (DISPID_A_FIRST+297)\n#define DISPID_A_STROKE                      (DISPID_A_FIRST+298)\n#define DISPID_A_STROKEDASHARRAY             (DISPID_A_FIRST+299)\n#define DISPID_A_STROKEDASHOFFSET            (DISPID_A_FIRST+300)\n#define DISPID_A_STROKELINECAP               (DISPID_A_FIRST+301)\n#define DISPID_A_STROKELINEJOIN              (DISPID_A_FIRST+302)\n#define DISPID_A_STROKEMITERLIMIT            (DISPID_A_FIRST+303)\n#define DISPID_A_STROKEOPACITY               (DISPID_A_FIRST+304)\n#define DISPID_A_STROKEWIDTH                 (DISPID_A_FIRST+305)\n#define DISPID_A_TEXTANCHOR                  (DISPID_A_FIRST+306)\n#define DISPID_A_GLYPHORIENTATIONHORIZONTAL  (DISPID_A_FIRST+307)\n#define DISPID_A_GLYPHORIENTATIONVERTICAL    (DISPID_A_FIRST+308)\n#define DISPID_A_CSSFLOAT                    (DISPID_A_FIRST+309)\n#define DISPID_A_BORDERRADIUS                (DISPID_A_FIRST+310)\n#define DISPID_A_BORDERTOPLEFTRADIUS         (DISPID_A_FIRST+311)\n#define DISPID_A_BORDERTOPRIGHTRADIUS        (DISPID_A_FIRST+312)\n#define DISPID_A_BORDERBOTTOMRIGHTRADIUS     (DISPID_A_FIRST+313)\n#define DISPID_A_BORDERBOTTOMLEFTRADIUS      (DISPID_A_FIRST+314)\n#define DISPID_A_MS_TRANSFORM                (DISPID_A_FIRST+315)\n#define DISPID_A_IE9_BACKGROUNDCLIP          (DISPID_A_FIRST+316)\n#define DISPID_A_IE9_BACKGROUNDORIGIN        (DISPID_A_FIRST+317)\n#define DISPID_A_IE9_BACKGROUNDSIZE          (DISPID_A_FIRST+318)\n#define DISPID_A_IE9_BOXSHADOW               (DISPID_A_FIRST+319)\n#define DISPID_A_MS_TRANSFORMORIGIN          (DISPID_A_FIRST+325)\n#define DISPID_A_MS_TRANSFORMORIGINX         (DISPID_A_FIRST+326)\n#define DISPID_A_MS_TRANSFORMORIGINY         (DISPID_A_FIRST+327)\n#define DISPID_A_MS_TEXTSIZEADJUST           (DISPID_A_FIRST+328)\n#define DISPID_A_MS_TRANSITIONPROPERTY       (DISPID_A_FIRST+330)\n#define DISPID_A_MS_TRANSITIONDURATION       (DISPID_A_FIRST+331)\n#define DISPID_A_MS_TRANSITIONTIMINGFUNCTION (DISPID_A_FIRST+332)\n#define DISPID_A_MS_TRANSITIONDELAY          (DISPID_A_FIRST+333)\n#define DISPID_A_MS_TRANSITION               (DISPID_A_FIRST+334)\n#define DISPID_A_COLUMNS                     (DISPID_A_FIRST+335)\n#define DISPID_A_COLUMNCOUNT                 (DISPID_A_FIRST+336)\n#define DISPID_A_COLUMNWIDTH                 (DISPID_A_FIRST+337)\n#define DISPID_A_COLUMNGAP                   (DISPID_A_FIRST+338)\n#define DISPID_A_COLUMNFILL                  (DISPID_A_FIRST+339)\n#define DISPID_A_COLUMNSPAN                  (DISPID_A_FIRST+340)\n#define DISPID_A_COLUMNRULE                  (DISPID_A_FIRST+341)\n#define DISPID_A_COLUMNRULESTYLE             (DISPID_A_FIRST+342)\n#define DISPID_A_COLUMNRULEWIDTH             (DISPID_A_FIRST+343)\n#define DISPID_A_COLUMNRULECOLOR             (DISPID_A_FIRST+344)\n#define DISPID_A_BREAKBEFORE                 (DISPID_A_FIRST+345)\n#define DISPID_A_BREAKAFTER                  (DISPID_A_FIRST+346)\n#define DISPID_A_BREAKINSIDE                 (DISPID_A_FIRST+347)\n#define DISPID_A_MS_TRANSFORMORIGINZ         (DISPID_A_FIRST+348)\n#define DISPID_A_MS_PERSPECTIVE              (DISPID_A_FIRST+349)\n#define DISPID_A_MS_PERSPECTIVEORIGIN        (DISPID_A_FIRST+350)\n#define DISPID_A_MS_PERSPECTIVEORIGINX       (DISPID_A_FIRST+351)\n#define DISPID_A_MS_PERSPECTIVEORIGINY       (DISPID_A_FIRST+352)\n#define DISPID_A_MS_TRANSFORMSTYLE           (DISPID_A_FIRST+353)\n#define DISPID_A_MS_BACKFACEVISIBILITY       (DISPID_A_FIRST+354)\n#define DISPID_A_MS_SCROLLCHAINING           (DISPID_A_FIRST+355)\n#define DISPID_A_MS_CONTENTZOOMING           (DISPID_A_FIRST+356)\n#define DISPID_A_MS_CONTENTZOOMSNAPTYPE      (DISPID_A_FIRST+357)\n#define DISPID_A_MS_SCROLLRAILS              (DISPID_A_FIRST+358)\n#define DISPID_A_MS_CONTENTZOOMCHAINING      (DISPID_A_FIRST+359)\n#define DISPID_A_MS_SCROLLSNAPTYPE           (DISPID_A_FIRST+360)\n#define DISPID_A_MS_CONTENTZOOMLIMIT         (DISPID_A_FIRST+361)\n#define DISPID_A_MS_CONTENTZOOMSNAP          (DISPID_A_FIRST+362)\n#define DISPID_A_MS_CONTENTZOOMSNAPPOINTS    (DISPID_A_FIRST+363)\n#define DISPID_A_MS_CONTENTZOOMFACTOR        (DISPID_A_FIRST+364)\n#define DISPID_A_MS_CONTENTZOOMLIMITMIN      (DISPID_A_FIRST+365)\n#define DISPID_A_MS_CONTENTZOOMLIMITMAX      (DISPID_A_FIRST+366)\n#define DISPID_A_MS_SCROLLSNAPX              (DISPID_A_FIRST+367)\n#define DISPID_A_MS_SCROLLSNAPY              (DISPID_A_FIRST+368)\n#define DISPID_A_MS_SCROLLSNAPPOINTSX        (DISPID_A_FIRST+369)\n#define DISPID_A_MS_SCROLLSNAPPOINTSY        (DISPID_A_FIRST+370)\n#define DISPID_A_SPELLCHECK                  (DISPID_A_FIRST+371)\n#define DISPID_A_MS_GRIDCOLUMN               (DISPID_A_FIRST+372)\n#define DISPID_A_MS_GRIDCOLUMNALIGN          (DISPID_A_FIRST+373)\n#define DISPID_A_MS_GRIDCOLUMNS              (DISPID_A_FIRST+374)\n#define DISPID_A_MS_GRIDCOLUMNSPAN           (DISPID_A_FIRST+375)\n#define DISPID_A_MS_GRIDROW                  (DISPID_A_FIRST+377)\n#define DISPID_A_MS_GRIDROWALIGN             (DISPID_A_FIRST+378)\n#define DISPID_A_MS_GRIDROWS                 (DISPID_A_FIRST+379)\n#define DISPID_A_MS_GRIDROWSPAN              (DISPID_A_FIRST+380)\n#define DISPID_A_MS_ANIMATIONNAME            (DISPID_A_FIRST+381)\n#define DISPID_A_MS_ANIMATIONDURATION        (DISPID_A_FIRST+382)\n#define DISPID_A_MS_ANIMATIONTIMINGFUNCTION  (DISPID_A_FIRST+383)\n#define DISPID_A_MS_ANIMATIONDELAY           (DISPID_A_FIRST+384)\n#define DISPID_A_MS_ANIMATIONDIRECTION       (DISPID_A_FIRST+385)\n#define DISPID_A_MS_ANIMATIONPLAYSTATE       (DISPID_A_FIRST+386)\n#define DISPID_A_MS_ANIMATIONITERATIONCOUNT  (DISPID_A_FIRST+387)\n#define DISPID_A_MS_ANIMATION                (DISPID_A_FIRST+388)\n#define DISPID_A_MS_ANIMATIONFILLMODE        (DISPID_A_FIRST+389)\n#define DISPID_A_FLOODCOLOR                  (DISPID_A_FIRST+390)\n#define DISPID_A_FLOODOPACITY                (DISPID_A_FIRST+391)\n#define DISPID_A_COLORINTERPOLATIONFILTERS   (DISPID_A_FIRST+392)\n#define DISPID_A_LIGHTINGCOLOR               (DISPID_A_FIRST+393)\n#define DISPID_A_MS_SCROLLLIMITXMIN          (DISPID_A_FIRST+394)\n#define DISPID_A_MS_SCROLLLIMITYMIN          (DISPID_A_FIRST+395)\n#define DISPID_A_MS_SCROLLLIMITXMAX          (DISPID_A_FIRST+396)\n#define DISPID_A_MS_SCROLLLIMITYMAX          (DISPID_A_FIRST+397)\n#define DISPID_A_MS_SCROLLLIMIT              (DISPID_A_FIRST+398)\n#define DISPID_A_MS_OVERFLOWSTYLE            (DISPID_A_FIRST+399)\n#define DISPID_A_TEXTSHADOW                  (DISPID_A_FIRST+400)\n#define DISPID_A_MS_WRAPTHROUGH              (DISPID_A_FIRST+401)\n#define DISPID_A_MS_FLOWFROM                 (DISPID_A_FIRST+402)\n#define DISPID_A_MS_FLOWINTO                 (DISPID_A_FIRST+403)\n#define DISPID_A_MS_HYPHENS                  (DISPID_A_FIRST+404)\n#define DISPID_A_MS_HYPHENATE_LIMIT_ZONE     (DISPID_A_FIRST+405)\n#define DISPID_A_MS_HYPHENATE_LIMIT_CHARS    (DISPID_A_FIRST+406)\n#define DISPID_A_MS_HYPHENATE_LIMIT_LINES    (DISPID_A_FIRST+407)\n#define DISPID_A_DRAGGABLE                   (DISPID_A_FIRST+408)\n#define DISPID_A_MS_HIGHCONTRASTADJUST       (DISPID_A_FIRST+409)\n#define DISPID_A_ENABLEBACKGROUND            (DISPID_A_FIRST+410)\n#define DISPID_A_MS_WRAPMARGIN               (DISPID_A_FIRST+411)\n#define DISPID_A_MS_WRAPFLOW                 (DISPID_A_FIRST+413)\n#define DISPID_A_MS_FONTFEATURESETTINGS      (DISPID_A_FIRST+414)\n#define DISPID_A_MS_USERSELECT               (DISPID_A_FIRST+415)\n#define DISPID_A_MS_TOUCHACTION              (DISPID_A_FIRST+416)\n#define DISPID_A_CLASSLIST                   (DISPID_A_FIRST+417)\n#define DISPID_A_MS_SCROLLTRANSLATION        (DISPID_A_FIRST+418)\n#define DISPID_A_MS_FLEX                     (DISPID_A_FIRST+419)\n#define DISPID_A_MS_FLEXPOSITIVE             (DISPID_A_FIRST+420)\n#define DISPID_A_MS_FLEXNEGATIVE             (DISPID_A_FIRST+421)\n#define DISPID_A_MS_FLEXPREFERREDSIZE        (DISPID_A_FIRST+422)\n#define DISPID_A_MS_FLEXFLOW                 (DISPID_A_FIRST+423)\n#define DISPID_A_MS_FLEXDIRECTION            (DISPID_A_FIRST+424)\n#define DISPID_A_MS_FLEXWRAP                 (DISPID_A_FIRST+425)\n#define DISPID_A_MS_FLEXALIGN                (DISPID_A_FIRST+426)\n#define DISPID_A_MS_FLEXITEMALIGN            (DISPID_A_FIRST+427)\n#define DISPID_A_MS_FLEXPACK                 (DISPID_A_FIRST+428)\n#define DISPID_A_MS_FLEXLINEPACK             (DISPID_A_FIRST+429)\n#define DISPID_A_MS_FLEXORDER                (DISPID_A_FIRST+430)\n#define DISPID_A_TRANSFORM                   (DISPID_A_FIRST+431)\n#define DISPID_A_TRANSFORMORIGIN             (DISPID_A_FIRST+432)\n#define DISPID_A_TRANSITIONPROPERTY          (DISPID_A_FIRST+433)\n#define DISPID_A_TRANSITIONDURATION          (DISPID_A_FIRST+434)\n#define DISPID_A_TRANSITIONTIMINGFUNCTION    (DISPID_A_FIRST+435)\n#define DISPID_A_TRANSITIONDELAY             (DISPID_A_FIRST+436)\n#define DISPID_A_TRANSITION                  (DISPID_A_FIRST+437)\n#define DISPID_A_PERSPECTIVE                 (DISPID_A_FIRST+438)\n#define DISPID_A_PERSPECTIVEORIGIN           (DISPID_A_FIRST+439)\n#define DISPID_A_TRANSFORMSTYLE              (DISPID_A_FIRST+440)\n#define DISPID_A_BACKFACEVISIBILITY          (DISPID_A_FIRST+441)\n#define DISPID_A_ANIMATIONNAME               (DISPID_A_FIRST+442)\n#define DISPID_A_ANIMATIONDURATION           (DISPID_A_FIRST+443)\n#define DISPID_A_ANIMATIONTIMINGFUNCTION     (DISPID_A_FIRST+444)\n#define DISPID_A_ANIMATIONDELAY              (DISPID_A_FIRST+445)\n#define DISPID_A_ANIMATIONDIRECTION          (DISPID_A_FIRST+446)\n#define DISPID_A_ANIMATIONPLAYSTATE          (DISPID_A_FIRST+447)\n#define DISPID_A_ANIMATIONITERATIONCOUNT     (DISPID_A_FIRST+448)\n#define DISPID_A_ANIMATION                   (DISPID_A_FIRST+449)\n#define DISPID_A_ANIMATIONFILLMODE           (DISPID_A_FIRST+450)\n#define DISPID_A_FONTFEATURESETTINGS         (DISPID_A_FIRST+451)\n#define DISPID_A_TRANSFORMORIGINX            (DISPID_A_FIRST+452)\n#define DISPID_A_TRANSFORMORIGINY            (DISPID_A_FIRST+453)\n#define DISPID_A_TRANSFORMORIGINZ            (DISPID_A_FIRST+454)\n#define DISPID_A_PERSPECTIVEORIGINX          (DISPID_A_FIRST+456)\n#define DISPID_A_PERSPECTIVEORIGINY          (DISPID_A_FIRST+457)\n#define DISPID_A_MS_TOUCHSELECT              (DISPID_A_FIRST+458)\n\n#define DISPID_WINDOWOBJECT          (-5500)\n#define DISPID_LOCATIONOBJECT        (-5506)\n#define DISPID_HISTORYOBJECT         (-5507)\n#define DISPID_NAVIGATOROBJECT       (-5508)\n#define DISPID_SECURITYCTX           (-5511)\n#define DISPID_AMBIENT_DLCONTROL     (-5512)\n#define DISPID_AMBIENT_USERAGENT     (-5513)\n#define DISPID_SECURITYDOMAIN        (-5514)\n\n#define DLCTL_DLIMAGES               0x00000010\n#define DLCTL_VIDEOS                 0x00000020\n#define DLCTL_BGSOUNDS               0x00000040\n#define DLCTL_NO_SCRIPTS             0x00000080\n#define DLCTL_NO_JAVA                0x00000100\n#define DLCTL_NO_RUNACTIVEXCTLS      0x00000200\n#define DLCTL_NO_DLACTIVEXCTLS       0x00000400\n#define DLCTL_DOWNLOADONLY           0x00000800\n#define DLCTL_NO_FRAMEDOWNLOAD       0x00001000\n#define DLCTL_RESYNCHRONIZE          0x00002000\n#define DLCTL_PRAGMA_NO_CACHE        0x00004000\n#define DLCTL_FORCEOFFLINE           0x10000000\n#define DLCTL_NO_CLIENTPULL          0x20000000\n#define DLCTL_SILENT                 0x40000000\n#define DLCTL_OFFLINEIFNOTCONNECTED  0x80000000\n#define DLCTL_OFFLINE                DLCTL_OFFLINEIFNOTCONNECTED\n\n/* events */\n#define DISPID_EVPROP_ONMOUSEOVER          (DISPID_EVENTS+0)\n#define DISPID_EVPROP_ONMOUSEOUT           (DISPID_EVENTS+1)\n#define DISPID_EVPROP_ONMOUSEDOWN          (DISPID_EVENTS+2)\n#define DISPID_EVPROP_ONMOUSEUP            (DISPID_EVENTS+3)\n#define DISPID_EVPROP_ONMOUSEMOVE          (DISPID_EVENTS+4)\n#define DISPID_EVPROP_ONKEYDOWN            (DISPID_EVENTS+5)\n#define DISPID_EVPROP_ONKEYUP              (DISPID_EVENTS+6)\n#define DISPID_EVPROP_ONKEYPRESS           (DISPID_EVENTS+7)\n#define DISPID_EVPROP_ONCLICK              (DISPID_EVENTS+8)\n#define DISPID_EVPROP_ONDBLCLICK           (DISPID_EVENTS+9)\n#define DISPID_EVPROP_ONSELECT             (DISPID_EVENTS+10)\n#define DISPID_EVPROP_ONSUBMIT             (DISPID_EVENTS+11)\n#define DISPID_EVPROP_ONRESET              (DISPID_EVENTS+12)\n#define DISPID_EVPROP_ONHELP               (DISPID_EVENTS+13)\n#define DISPID_EVPROP_ONFOCUS              (DISPID_EVENTS+14)\n#define DISPID_EVPROP_ONBLUR               (DISPID_EVENTS+15)\n#define DISPID_EVPROP_ONROWEXIT            (DISPID_EVENTS+18)\n#define DISPID_EVPROP_ONROWENTER           (DISPID_EVENTS+19)\n#define DISPID_EVPROP_ONBOUNCE             (DISPID_EVENTS+20)\n#define DISPID_EVPROP_ONBEFOREUPDATE       (DISPID_EVENTS+21)\n#define DISPID_EVPROP_ONAFTERUPDATE        (DISPID_EVENTS+22)\n#define DISPID_EVPROP_ONBEFOREDRAGOVER     (DISPID_EVENTS+23)\n#define DISPID_EVPROP_ONBEFOREDROPORPASTE  (DISPID_EVENTS+24)\n#define DISPID_EVPROP_ONREADYSTATECHANGE   (DISPID_EVENTS+25)\n#define DISPID_EVPROP_ONFINISH             (DISPID_EVENTS+26)\n#define DISPID_EVPROP_ONSTART              (DISPID_EVENTS+27)\n#define DISPID_EVPROP_ONABORT              (DISPID_EVENTS+28)\n#define DISPID_EVPROP_ONERROR              (DISPID_EVENTS+29)\n#define DISPID_EVPROP_ONCHANGE             (DISPID_EVENTS+30)\n#define DISPID_EVPROP_ONSCROLL             (DISPID_EVENTS+31)\n#define DISPID_EVPROP_ONLOAD               (DISPID_EVENTS+32)\n#define DISPID_EVPROP_ONUNLOAD             (DISPID_EVENTS+33)\n#define DISPID_EVPROP_ONLAYOUT             (DISPID_EVENTS+34)\n#define DISPID_EVPROP_ONDRAGSTART          (DISPID_EVENTS+35)\n#define DISPID_EVPROP_ONRESIZE             (DISPID_EVENTS+36)\n#define DISPID_EVPROP_ONSELECTSTART        (DISPID_EVENTS+37)\n#define DISPID_EVPROP_ONERRORUPDATE        (DISPID_EVENTS+38)\n#define DISPID_EVPROP_ONBEFOREUNLOAD       (DISPID_EVENTS+39)\n#define DISPID_EVPROP_ONDATASETCHANGED     (DISPID_EVENTS+40)\n#define DISPID_EVPROP_ONDATAAVAILABLE      (DISPID_EVENTS+41)\n#define DISPID_EVPROP_ONDATASETCOMPLETE    (DISPID_EVENTS+42)\n#define DISPID_EVPROP_ONFILTER             (DISPID_EVENTS+43)\n#define DISPID_EVPROP_ONCHANGEFOCUS        (DISPID_EVENTS+44)\n#define DISPID_EVPROP_ONCHANGEBLUR         (DISPID_EVENTS+45)\n#define DISPID_EVPROP_ONLOSECAPTURE        (DISPID_EVENTS+46)\n#define DISPID_EVPROP_ONPROPERTYCHANGE     (DISPID_EVENTS+47)\n#define DISPID_EVPROP_ONPERSISTSAVE        (DISPID_EVENTS+48)\n#define DISPID_EVPROP_ONDRAG               (DISPID_EVENTS+49)\n#define DISPID_EVPROP_ONDRAGEND            (DISPID_EVENTS+50)\n#define DISPID_EVPROP_ONDRAGENTER          (DISPID_EVENTS+51)\n#define DISPID_EVPROP_ONDRAGOVER           (DISPID_EVENTS+52)\n#define DISPID_EVPROP_ONDRAGLEAVE          (DISPID_EVENTS+53)\n#define DISPID_EVPROP_ONDROP               (DISPID_EVENTS+54)\n#define DISPID_EVPROP_ONCUT                (DISPID_EVENTS+55)\n#define DISPID_EVPROP_ONCOPY               (DISPID_EVENTS+56)\n#define DISPID_EVPROP_ONPASTE              (DISPID_EVENTS+57)\n#define DISPID_EVPROP_ONBEFORECUT          (DISPID_EVENTS+58)\n#define DISPID_EVPROP_ONBEFORECOPY         (DISPID_EVENTS+59)\n#define DISPID_EVPROP_ONBEFOREPASTE        (DISPID_EVENTS+60)\n#define DISPID_EVPROP_ONPERSISTLOAD        (DISPID_EVENTS+61)\n#define DISPID_EVPROP_ONROWSDELETE         (DISPID_EVENTS+62)\n#define DISPID_EVPROP_ONROWSINSERTED       (DISPID_EVENTS+63)\n#define DISPID_EVPROP_ONCELLCHANGE         (DISPID_EVENTS+64)\n#define DISPID_EVPROP_ONCONTEXTMENU        (DISPID_EVENTS+65)\n#define DISPID_EVPROP_ONBEFOREPRINT        (DISPID_EVENTS+66)\n#define DISPID_EVPROP_ONAFTERPRINT         (DISPID_EVENTS+67)\n#define DISPID_EVPROP_ONSTOP               (DISPID_EVENTS+68)\n#define DISPID_EVPROP_ONBEFOREEDITFOCUS    (DISPID_EVENTS+69)\n#define DISPID_EVPROP_ONATTACHEVENT        (DISPID_EVENTS+70)\n#define DISPID_EVPROP_ONMOUSEHOVER         (DISPID_EVENTS+71)\n#define DISPID_EVPROP_ONCONTENTREADY       (DISPID_EVENTS+72)\n#define DISPID_EVPROP_ONLAYOUTCOMPLETE     (DISPID_EVENTS+73)\n#define DISPID_EVPROP_ONPAGE               (DISPID_EVENTS+74)\n#define DISPID_EVPROP_ONLINKEDOVERFLOW     (DISPID_EVENTS+75)\n#define DISPID_EVPROP_ONMOUSEWHEEL         (DISPID_EVENTS+76)\n#define DISPID_EVPROP_ONBEFOREDEACTIVATE   (DISPID_EVENTS+77)\n#define DISPID_EVPROP_ONMOVE               (DISPID_EVENTS+78)\n#define DISPID_EVPROP_ONCONTROLSELECT      (DISPID_EVENTS+79)\n#define DISPID_EVPROP_ONSELECTIONCHANGE    (DISPID_EVENTS+80)\n#define DISPID_EVPROP_ONMOVESTART          (DISPID_EVENTS+81)\n#define DISPID_EVPROP_ONMOVEEND            (DISPID_EVENTS+82)\n#define DISPID_EVPROP_ONRESIZESTART        (DISPID_EVENTS+83)\n#define DISPID_EVPROP_ONRESIZEEND          (DISPID_EVENTS+84)\n#define DISPID_EVPROP_ONMOUSEENTER         (DISPID_EVENTS+85)\n#define DISPID_EVPROP_ONMOUSELEAVE         (DISPID_EVENTS+86)\n#define DISPID_EVPROP_ONACTIVATE           (DISPID_EVENTS+87)\n#define DISPID_EVPROP_ONDEACTIVATE         (DISPID_EVENTS+88)\n#define DISPID_EVPROP_ONMULTILAYOUTCLEANUP (DISPID_EVENTS+89)\n#define DISPID_EVPROP_ONBEFOREACTIVATE     (DISPID_EVENTS+90)\n#define DISPID_EVPROP_ONFOCUSIN            (DISPID_EVENTS+91)\n#define DISPID_EVPROP_ONFOCUSOUT           (DISPID_EVENTS+92)\n#define DISPID_EVPROP_ONVALUECHANGE        (DISPID_EVENTS+93)\n#define DISPID_EVPROP_ONSELECTADD          (DISPID_EVENTS+94)\n#define DISPID_EVPROP_ONSELECTREMOV        (DISPID_EVENTS+95)\n#define DISPID_EVPROP_ONSELECTWITHI        (DISPID_EVENTS+96)\n#define DISPID_EVPROP_ONSYSTEMSCROLLINGSTART   (DISPID_EVENTS+97)\n#define DISPID_EVPROP_ONSYSTEMSCROLLINGEND     (DISPID_EVENTS+98)\n#define DISPID_EVPROP_ONOBJECTCONTENTSCROLLED  (DISPID_EVENTS+99)\n#define DISPID_EVPROP_ONSTORAGE            (DISPID_EVENTS+100)\n#define DISPID_EVPROP_ONSTORAGECOMMIT      (DISPID_EVENTS+101)\n#define DISPID_EVPROP_ONSHOW               (DISPID_EVENTS+102)\n#define DISPID_EVPROP_ONHIDE               (DISPID_EVENTS+103)\n#define DISPID_EVPROP_ONALERT              (DISPID_EVENTS+104)\n#define DISPID_EVPROP_ONPOPUPMENUSTART     (DISPID_EVENTS+105)\n#define DISPID_EVPROP_ONPOPUPMENUEND       (DISPID_EVENTS+106)\n#define DISPID_EVPROP_ONONLINE             (DISPID_EVENTS+107)\n#define DISPID_EVPROP_ONOFFLINE            (DISPID_EVENTS+108)\n#define DISPID_EVPROP_ONHASHCHANGE         (DISPID_EVENTS+109)\n#define DISPID_EVPROP_ONMESSAGE            (DISPID_EVENTS+110)\n#define DISPID_EVPROP_ONDOMMUTATION        (DISPID_EVENTS+111)\n#define DISPID_EVPROP_TIMEOUT              (DISPID_EVENTS+112)\n#define DISPID_EVPROP_WHEEL                (DISPID_EVENTS+113)\n#define DISPID_EVPROP_SVGLOAD              (DISPID_EVENTS+114)\n#define DISPID_EVPROP_SVGUNLOAD            (DISPID_EVENTS+115)\n#define DISPID_EVPROP_SVGABORT             (DISPID_EVENTS+116)\n#define DISPID_EVPROP_SVGERROR             (DISPID_EVENTS+117)\n#define DISPID_EVPROP_SVGRESIZE            (DISPID_EVENTS+118)\n#define DISPID_EVPROP_SVGSCROLL            (DISPID_EVENTS+119)\n#define DISPID_EVPROP_SVGZOOM              (DISPID_EVENTS+120)\n#define DISPID_EVPROP_ONMSTHUMBNAILCLICK   (DISPID_EVENTS+121)\n#define DISPID_EVPROP_COMPOSITIONSTART     (DISPID_EVENTS+122)\n#define DISPID_EVPROP_COMPOSITIONUPDATE    (DISPID_EVENTS+123)\n#define DISPID_EVPROP_COMPOSITIONEND       (DISPID_EVENTS+124)\n#define DISPID_EVPROP_DOMATTRMODIFIED      (DISPID_EVENTS+125)\n#define DISPID_EVPROP_DOMCONTENTLOADED     (DISPID_EVENTS+126)\n#define DISPID_EVPROP_INPUT                (DISPID_EVENTS+127)\n#define DISPID_EVPROP_DOMCHARDATAMODIFIE   (DISPID_EVENTS+128)\n#define DISPID_EVPROP_TEXTINPUT            (DISPID_EVENTS+129)\n#define DISPID_EVPROP_ONMSSITEMODEJUMPLISTITEMREMOVED  (DISPID_EVENTS+130)\n#define DISPID_EVPROP_DOMNODEINSERTED      (DISPID_EVENTS+131)\n#define DISPID_EVPROP_DOMNODEREMOVED       (DISPID_EVENTS+132)\n#define DISPID_EVPROP_DOMSUBTREEMODIFIED   (DISPID_EVENTS+133)\n#define DISPID_EVPROP_CANPLAY              (DISPID_EVENTS+134)\n#define DISPID_EVPROP_CANPLAYTHROUGH       (DISPID_EVENTS+135)\n#define DISPID_EVPROP_DURATIONCHANGE       (DISPID_EVENTS+136)\n#define DISPID_EVPROP_EMPTIED              (DISPID_EVENTS+137)\n#define DISPID_EVPROP_ENDED                (DISPID_EVENTS+138)\n#define DISPID_EVPROP_LOADEDDATA           (DISPID_EVENTS+139)\n#define DISPID_EVPROP_LOADEDMETADATA       (DISPID_EVENTS+140)\n#define DISPID_EVPROP_LOADSTART            (DISPID_EVENTS+141)\n#define DISPID_EVPROP_PAUSE                (DISPID_EVENTS+142)\n#define DISPID_EVPROP_PLAY                 (DISPID_EVENTS+143)\n#define DISPID_EVPROP_PLAYING              (DISPID_EVENTS+144)\n#define DISPID_EVPROP_PROGRESS             (DISPID_EVENTS+145)\n#define DISPID_EVPROP_RATECHANGE           (DISPID_EVENTS+146)\n#define DISPID_EVPROP_SEEKED               (DISPID_EVENTS+147)\n#define DISPID_EVPROP_SEEKING              (DISPID_EVENTS+148)\n#define DISPID_EVPROP_STALLED              (DISPID_EVENTS+149)\n#define DISPID_EVPROP_SUSPEND              (DISPID_EVENTS+150)\n#define DISPID_EVPROP_TIMEUPDATE           (DISPID_EVENTS+151)\n#define DISPID_EVPROP_VOLUMECHANGE         (DISPID_EVENTS+152)\n#define DISPID_EVPROP_WAITING              (DISPID_EVENTS+153)\n#define DISPID_EVPROP_ONMSPOINTERDOWN      (DISPID_EVENTS+154)\n#define DISPID_EVPROP_ONMSPOINTERMOVE      (DISPID_EVENTS+155)\n#define DISPID_EVPROP_ONMSPOINTERUP        (DISPID_EVENTS+156)\n#define DISPID_EVPROP_ONMSPOINTEROVER      (DISPID_EVENTS+157)\n#define DISPID_EVPROP_ONMSPOINTEROUT       (DISPID_EVENTS+158)\n#define DISPID_EVPROP_ONMSPOINTERCANCEL    (DISPID_EVENTS+159)\n#define DISPID_EVPROP_ONMSPOINTERHOVER     (DISPID_EVENTS+160)\n#define DISPID_EVPROP_MSCONNECT            (DISPID_EVENTS+161)\n#define DISPID_EVPROP_MSDISCONNECT         (DISPID_EVENTS+162)\n#define DISPID_EVPROP_ONMSGESTURESTART     (DISPID_EVENTS+163)\n#define DISPID_EVPROP_ONMSGESTURECHANGE    (DISPID_EVENTS+164)\n#define DISPID_EVPROP_ONMSGESTUREEND       (DISPID_EVENTS+165)\n#define DISPID_EVPROP_ONMSGESTUREHOLD      (DISPID_EVENTS+166)\n#define DISPID_EVPROP_ONMSGESTURETAP       (DISPID_EVENTS+167)\n#define DISPID_EVPROP_ONMSGESTUREDOUBLETAP (DISPID_EVENTS+168)\n#define DISPID_EVPROP_ONMSINERTIASTART     (DISPID_EVENTS+169)\n#define DISPID_EVPROP_ONMSLOSTPOINTERCAPTURE  (DISPID_EVENTS+170)\n#define DISPID_EVPROP_ONMSGOTPOINTERCAPTURE   (DISPID_EVENTS+171)\n#define DISPID_EVPROP_ONMSCONTENTZOOM      (DISPID_EVENTS+172)\n#define DISPID_EVPROP_ONTRANSITIONSTART    (DISPID_EVENTS+173)\n#define DISPID_EVPROP_ONTRANSITIONEND      (DISPID_EVENTS+174)\n#define DISPID_EVPROP_ONANIMATIONSTART     (DISPID_EVENTS+175)\n#define DISPID_EVPROP_ONANIMATIONEND       (DISPID_EVENTS+176)\n#define DISPID_EVPROP_ONANIMATIONITERATION (DISPID_EVENTS+177)\n#define DISPID_EVPROP_ONMSMANIPULATIONSTATECHANGED  (DISPID_EVENTS+178)\n#define DISPID_EVPROP_ONOPEN               (DISPID_EVENTS+179)\n#define DISPID_EVPROP_ONCLOSE              (DISPID_EVENTS+180)\n#define DISPID_EVPROP_CHECKING             (DISPID_EVENTS+181)\n#define DISPID_EVPROP_NOUPDATE             (DISPID_EVENTS+182)\n#define DISPID_EVPROP_DOWNLOADING          (DISPID_EVENTS+183)\n#define DISPID_EVPROP_UPDATEREADY          (DISPID_EVENTS+184)\n#define DISPID_EVPROP_CACHED               (DISPID_EVENTS+185)\n#define DISPID_EVPROP_OBSOLETE             (DISPID_EVENTS+186)\n#define DISPID_EVPROP_LOADEND              (DISPID_EVENTS+187)\n#define DISPID_EVPROP_INVALID              (DISPID_EVENTS+188)\n#define DISPID_EVPROP_ONSUCCESS            (DISPID_EVENTS+189)\n#define DISPID_EVPROP_ONBLOCKED            (DISPID_EVENTS+190)\n#define DISPID_EVPROP_ONCOMPLETE           (DISPID_EVENTS+191)\n#define DISPID_EVPROP_ONPOPSTATE           (DISPID_EVENTS+192)\n#define DISPID_EVPROP_ONCUECHANGE          (DISPID_EVENTS+193)\n#define DISPID_EVPROP_ONENTER              (DISPID_EVENTS+194)\n#define DISPID_EVPROP_ONEXIT               (DISPID_EVENTS+195)\n#define DISPID_EVPROP_VISIBILITYCHANGE     (DISPID_EVENTS+196)\n#define DISPID_EVPROP_ONMSREGIONUPDATE     (DISPID_EVENTS+197)\n#define DISPID_EVPROP_ONUPGRADENEEDED      (DISPID_EVENTS+198)\n#define DISPID_EVPROP_ONMSVIDEOFORMATCHANGED  (DISPID_EVENTS+199)\n#define DISPID_EVPROP_ADDTRACK             (DISPID_EVENTS+200)\n#define DISPID_EVPROP_ONMSVIDEOFRAMESTEPCOMPLETED  (DISPID_EVENTS+201)\n#define DISPID_EVPROP_ONMSHOLDVISUAL       (DISPID_EVENTS+202)\n#define DISPID_EVPROP_ONMSVIDEOOPTIMALLAYOUTCHANGED (DISPID_EVENTS+203)\n#define DISPID_EVPROP_ONMSFULLSCREENCHANGE (DISPID_EVENTS+204)\n#define DISPID_EVPROP_ONMSFULLSCREENERROR  (DISPID_EVENTS+205)\n#define DISPID_EVPROP_MSELEMENTRESIZE      (DISPID_EVENTS+206)\n#define DISPID_EVPROP_ONSOURCEOPEN         (DISPID_EVENTS+207)\n#define DISPID_EVPROP_ONSOURCECLOSE        (DISPID_EVENTS+208)\n#define DISPID_EVPROP_ONSOURCEENDED        (DISPID_EVENTS+209)\n#define DISPID_EVPROP_ONADDSOURCEBUFFER    (DISPID_EVENTS+210)\n#define DISPID_EVPROP_ONREMOVESOURCEBUFFER (DISPID_EVENTS+211)\n#define DISPID_EVPROP_ONMSNEEDKEY          (DISPID_EVENTS+212)\n#define DISPID_EVPROP_ONMSKEYMESSAGE       (DISPID_EVENTS+213)\n#define DISPID_EVPROP_ONMSKEYERROR         (DISPID_EVENTS+214)\n#define DISPID_EVPROP_ONMSKEYADDED         (DISPID_EVENTS+215)\n#define DISPID_EVPROP_MSHTMLWEBVIEW_ONDOMCONTENTLOADED                (DISPID_EVENTS+216)\n#define DISPID_EVPROP_MSHTMLWEBVIEW_ONCONTENTLOADING                  (DISPID_EVENTS+217)\n#define DISPID_EVPROP_MSHTMLWEBVIEW_ONNAVIGATIONSTARTING              (DISPID_EVENTS+218)\n#define DISPID_EVPROP_MSHTMLWEBVIEW_ONNAVIGATIONCOMPLETED             (DISPID_EVENTS+219)\n#define DISPID_EVPROP_MSHTMLWEBVIEW_ONFRAMEDOMCONTENTLOADED           (DISPID_EVENTS+220)\n#define DISPID_EVPROP_MSHTMLWEBVIEW_ONFRAMECONTENTLOADING             (DISPID_EVENTS+221)\n#define DISPID_EVPROP_MSHTMLWEBVIEW_ONFRAMENAVIGATIONSTARTING         (DISPID_EVENTS+222)\n#define DISPID_EVPROP_MSHTMLWEBVIEW_ONFRAMENAVIGATIONCOMPLETED        (DISPID_EVENTS+223)\n#define DISPID_EVPROP_MSHTMLWEBVIEW_ONSCRIPTNOTIFY                    (DISPID_EVENTS+224)\n#define DISPID_EVPROP_MSHTMLWEBVIEW_ONUNVIEWABLECONTENT               (DISPID_EVENTS+225)\n#define DISPID_EVPROP_MSHTMLWEBVIEW_ONUNSAFECONTENTWARNINGDISPLAYING  (DISPID_EVENTS+226)\n#define DISPID_EVPROP_MSHTMLWEBVIEW_ONLONGRUNNINGSCRIPTDETECTED       (DISPID_EVENTS+227)\n#define DISPID_EVPROP_WEBGLCONTEXTLOST     (DISPID_EVENTS+228)\n#define DISPID_EVPROP_WEBGLCONTEXTRESTORED (DISPID_EVENTS+229)\n#define DISPID_EVPROP_ONUPDATESTART        (DISPID_EVENTS+230)\n#define DISPID_EVPROP_ONUPDATE             (DISPID_EVENTS+231)\n#define DISPID_EVPROP_ONUPDATEEND          (DISPID_EVENTS+232)\n#define DISPID_EVPROP_ONMSPOINTERENTER     (DISPID_EVENTS+233)\n#define DISPID_EVPROP_ONMSPOINTERLEAVE     (DISPID_EVENTS+234)\n#define DISPID_EVPROP_ONMSSITEPINNED       (DISPID_EVENTS+235)\n#define DISPID_EVPROP_MSORIENTATIONCHANGE  (DISPID_EVENTS+236)\n#define DISPID_EVPROP_ONDEVICEORIENTATION  (DISPID_EVENTS+237)\n#define DISPID_EVPROP_ONDEVICEMOTION       (DISPID_EVENTS+238)\n#define DISPID_EVPROP_ONPAGESHOW           (DISPID_EVENTS+239)\n#define DISPID_EVPROP_ONPAGEHIDE           (DISPID_EVENTS+240)\n#define DISPID_EVPROP_ONMSCANDIDATEWINDOWSHOW    (DISPID_EVENTS+241)\n#define DISPID_EVPROP_ONMSCANDIDATEWINDOWUPDATE  (DISPID_EVENTS+242)\n#define DISPID_EVPROP_ONMSCANDIDATEWINDOWHIDE    (DISPID_EVENTS+243)\n#define DISPID_EVPROP_HTML5ONREADYSTATECHANGE    (DISPID_EVENTS+244)\n#define DISPID_EVPROP_REMOVETRACK                (DISPID_EVENTS+245)\n#define DISPID_EVPROP_ONCOMPASSNEEDSCALIBRATION  (DISPID_EVENTS+246)\n#define DISPID_EVPROP_MSHTMLWEBVIEW_ONCONTAINSFULLSCREENELEMENTCHANGED  (DISPID_EVENTS+247)\n#define DISPID_EVPROP_ONTOUCHSTART               (DISPID_EVENTS+248)\n#define DISPID_EVPROP_ONTOUCHEND                 (DISPID_EVENTS+249)\n#define DISPID_EVPROP_ONTOUCHMOVE                (DISPID_EVENTS+250)\n#define DISPID_EVPROP_ONTOUCHCANCEL              (DISPID_EVENTS+251)\n#define DISPID_EVPROP_ONWEBKITTRANSITIONEND      (DISPID_EVENTS+252)\n#define DISPID_EVPROP_ONWEBKITANIMATIONSTART     (DISPID_EVENTS+253)\n#define DISPID_EVPROP_ONWEBKITANIMATIONEND       (DISPID_EVENTS+254)\n#define DISPID_EVPROP_ONWEBKITANIMATIONITERATION (DISPID_EVENTS+255)\n#define DISPID_EVPROP_WEBGLCONTEXTCREATIONERROR  (DISPID_EVENTS+256)\n#define DISPID_EVPROP_ONDOMFOCUSIN               (DISPID_EVENTS+257)\n#define DISPID_EVPROP_ONDOMFOCUSOUT              (DISPID_EVENTS+258)\n#define DISPID_EVPROP_ORIENTATIONCHANGE          (DISPID_EVENTS+259)\n#define DISPID_EVPROPS_COUNT                     260\n\n#define DISPID_EVMETH_ONMOUSEOVER           STDDISPID_XOBJ_ONMOUSEOVER\n#define DISPID_EVMETH_ONMOUSEOUT            STDDISPID_XOBJ_ONMOUSEOUT\n#define DISPID_EVMETH_ONMOUSEDOWN           DISPID_MOUSEDOWN\n#define DISPID_EVMETH_ONMOUSEUP             DISPID_MOUSEUP\n#define DISPID_EVMETH_ONMOUSEMOVE           DISPID_MOUSEMOVE\n#define DISPID_EVMETH_ONKEYDOWN             DISPID_KEYDOWN\n#define DISPID_EVMETH_ONKEYUP               DISPID_KEYUP\n#define DISPID_EVMETH_ONKEYPRESS            DISPID_KEYPRESS\n#define DISPID_EVMETH_ONCLICK               DISPID_CLICK\n#define DISPID_EVMETH_ONDBLCLICK            DISPID_DBLCLICK\n#define DISPID_EVMETH_ONSELECT              DISPID_ONSELECT\n#define DISPID_EVMETH_ONSUBMIT              DISPID_ONSUBMIT\n#define DISPID_EVMETH_ONRESET               DISPID_ONRESET\n#define DISPID_EVMETH_ONHELP                STDDISPID_XOBJ_ONHELP\n#define DISPID_EVMETH_ONFOCUS               STDDISPID_XOBJ_ONFOCUS\n#define DISPID_EVMETH_ONBLUR                STDDISPID_XOBJ_ONBLUR\n#define DISPID_EVMETH_ONROWEXIT             STDDISPID_XOBJ_ONROWEXIT\n#define DISPID_EVMETH_ONROWENTER            STDDISPID_XOBJ_ONROWENTER\n#define DISPID_EVMETH_ONBOUNCE              DISPID_ONBOUNCE\n#define DISPID_EVMETH_ONBEFOREUPDATE        STDDISPID_XOBJ_BEFOREUPDATE\n#define DISPID_EVMETH_ONAFTERUPDATE         STDDISPID_XOBJ_AFTERUPDATE\n#define DISPID_EVMETH_ONBEFOREDRAGOVER      EVENTID_CommonCtrlEvent_BeforeDragOver\n#define DISPID_EVMETH_ONBEFOREDROPORPASTE   EVENTID_CommonCtrlEvent_BeforeDropOrPaste\n#define DISPID_EVMETH_ONREADYSTATECHANGE    DISPID_READYSTATECHANGE\n#define DISPID_EVMETH_ONFINISH              DISPID_ONFINISH\n#define DISPID_EVMETH_ONSTART               DISPID_ONSTART\n#define DISPID_EVMETH_ONABORT               DISPID_ONABORT\n#define DISPID_EVMETH_ONERROR               DISPID_ONERROR\n#define DISPID_EVMETH_ONCHANGE              DISPID_ONCHANGE\n#define DISPID_EVMETH_ONSCROLL              DISPID_ONSCROLL\n#define DISPID_EVMETH_ONLOAD                DISPID_ONLOAD\n#define DISPID_EVMETH_ONUNLOAD              DISPID_ONUNLOAD\n#define DISPID_EVMETH_ONLAYOUT              DISPID_ONLAYOUT\n#define DISPID_EVMETH_ONDRAGSTART           STDDISPID_XOBJ_ONDRAGSTART\n#define DISPID_EVMETH_ONRESIZE              DISPID_ONRESIZE\n#define DISPID_EVMETH_ONSELECTSTART         STDDISPID_XOBJ_ONSELECTSTART\n#define DISPID_EVMETH_ONERRORUPDATE         STDDISPID_XOBJ_ERRORUPDATE\n#define DISPID_EVMETH_ONBEFOREUNLOAD        DISPID_ONBEFOREUNLOAD\n#define DISPID_EVMETH_ONDATASETCHANGED      STDDISPID_XOBJ_ONDATASETCHANGED\n#define DISPID_EVMETH_ONDATAAVAILABLE       STDDISPID_XOBJ_ONDATAAVAILABLE\n#define DISPID_EVMETH_ONDATASETCOMPLETE     STDDISPID_XOBJ_ONDATASETCOMPLETE\n#define DISPID_EVMETH_ONFILTER              STDDISPID_XOBJ_ONFILTER\n#define DISPID_EVMETH_ONCHANGEFOCUS         DISPID_ONCHANGEFOCUS\n#define DISPID_EVMETH_ONCHANGEBLUR          DISPID_ONCHANGEBLUR\n#define DISPID_EVMETH_ONLOSECAPTURE         STDDISPID_XOBJ_ONLOSECAPTURE\n#define DISPID_EVMETH_ONPROPERTYCHANGE      STDDISPID_XOBJ_ONPROPERTYCHANGE\n#define DISPID_EVMETH_ONPERSISTSAVE         DISPID_ONPERSISTSAVE\n#define DISPID_EVMETH_ONDRAG                STDDISPID_XOBJ_ONDRAG\n#define DISPID_EVMETH_ONDRAGEND             STDDISPID_XOBJ_ONDRAGEND\n#define DISPID_EVMETH_ONDRAGENTER           STDDISPID_XOBJ_ONDRAGENTER\n#define DISPID_EVMETH_ONDRAGOVER            STDDISPID_XOBJ_ONDRAGOVER\n#define DISPID_EVMETH_ONDRAGLEAVE           STDDISPID_XOBJ_ONDRAGLEAVE\n#define DISPID_EVMETH_ONDROP                STDDISPID_XOBJ_ONDROP\n#define DISPID_EVMETH_ONCUT                 STDDISPID_XOBJ_ONCUT\n#define DISPID_EVMETH_ONCOPY                STDDISPID_XOBJ_ONCOPY\n#define DISPID_EVMETH_ONPASTE               STDDISPID_XOBJ_ONPASTE\n#define DISPID_EVMETH_ONBEFORECUT           STDDISPID_XOBJ_ONBEFORECUT\n#define DISPID_EVMETH_ONBEFORECOPY          STDDISPID_XOBJ_ONBEFORECOPY\n#define DISPID_EVMETH_ONBEFOREPASTE         STDDISPID_XOBJ_ONBEFOREPASTE\n#define DISPID_EVMETH_ONPERSISTLOAD         DISPID_ONPERSISTLOAD\n#define DISPID_EVMETH_ONROWSDELETE          STDDISPID_XOBJ_ONROWSDELETE\n#define DISPID_EVMETH_ONROWSINSERTED        STDDISPID_XOBJ_ONROWSINSERTED\n#define DISPID_EVMETH_ONCELLCHANGE          STDDISPID_XOBJ_ONCELLCHANGE\n#define DISPID_EVMETH_ONCONTEXTMENU         DISPID_ONCONTEXTMENU\n#define DISPID_EVMETH_ONBEFOREPRINT         DISPID_ONBEFOREPRINT\n#define DISPID_EVMETH_ONAFTERPRINT          DISPID_ONAFTERPRINT\n#define DISPID_EVMETH_ONSTOP                DISPID_ONSTOP\n#define DISPID_EVMETH_ONBEFOREEDITFOCUS     DISPID_ONBEFOREEDITFOCUS\n#define DISPID_EVMETH_ONMOUSEHOVER          DISPID_ONMOUSEHOVER\n#define DISPID_EVMETH_ONCONTENTREADY        DISPID_ONCONTENTREADY\n#define DISPID_EVMETH_ONLAYOUTCOMPLETE      DISPID_ONLAYOUTCOMPLETE\n#define DISPID_EVMETH_ONPAGE                DISPID_ONPAGE\n#define DISPID_EVMETH_ONLINKEDOVERFLOW      DISPID_ONLINKEDOVERFLOW\n#define DISPID_EVMETH_ONMOUSEWHEEL          DISPID_ONMOUSEWHEEL\n#define DISPID_EVMETH_ONBEFOREDEACTIVATE    DISPID_ONBEFOREDEACTIVATE\n#define DISPID_EVMETH_ONMOVE                DISPID_ONMOVE\n#define DISPID_EVMETH_ONCONTROLSELECT       DISPID_ONCONTROLSELECT\n#define DISPID_EVMETH_ONSELECTIONCHANGE     DISPID_ONSELECTIONCHANGE\n#define DISPID_EVMETH_ONMOVESTART           DISPID_ONMOVESTART\n#define DISPID_EVMETH_ONMOVEEND             DISPID_ONMOVEEND\n#define DISPID_EVMETH_ONRESIZESTART         DISPID_ONRESIZESTART\n#define DISPID_EVMETH_ONRESIZEEND           DISPID_ONRESIZEEND\n#define DISPID_EVMETH_ONMOUSEENTER          DISPID_ONMOUSEENTER\n#define DISPID_EVMETH_ONMOUSELEAVE          DISPID_ONMOUSELEAVE\n#define DISPID_EVMETH_ONACTIVATE            DISPID_ONACTIVATE\n#define DISPID_EVMETH_ONDEACTIVATE          DISPID_ONDEACTIVATE\n#define DISPID_EVMETH_ONMULTILAYOUTCLEANUP  DISPID_ONMULTILAYOUTCLEANUP\n#define DISPID_EVMETH_ONBEFOREACTIVATE      DISPID_ONBEFOREACTIVATE\n#define DISPID_EVMETH_ONFOCUSIN             DISPID_ONFOCUSIN\n#define DISPID_EVMETH_ONFOCUSOUT            DISPID_ONFOCUSOUT\n#define DISPID_EVMETH_ONSTORAGE             DISPID_ONSTORAGE\n#define DISPID_EVMETH_ONSTORAGECOMMIT       DISPID_ONSTORAGECOMMIT\n#define DISPID_EVMETH_ONMESSAGE             DISPID_ONMESSAGE\n\n#define DISPID_ONABORT               (DISPID_NORMAL_FIRST)\n#define DISPID_ONCHANGE              (DISPID_NORMAL_FIRST+1)\n#define DISPID_ONERROR               (DISPID_NORMAL_FIRST+2)\n#define DISPID_ONLOAD                (DISPID_NORMAL_FIRST+3)\n#define DISPID_ONSELECT              (DISPID_NORMAL_FIRST+6)\n#define DISPID_ONSUBMIT              (DISPID_NORMAL_FIRST+7)\n#define DISPID_ONUNLOAD              (DISPID_NORMAL_FIRST+8)\n#define DISPID_ONBOUNCE              (DISPID_NORMAL_FIRST+9)\n#define DISPID_ONFINISH              (DISPID_NORMAL_FIRST+10)\n#define DISPID_ONSTART               (DISPID_NORMAL_FIRST+11)\n#define DISPID_ONLAYOUT              (DISPID_NORMAL_FIRST+13)\n#define DISPID_ONSCROLL              (DISPID_NORMAL_FIRST+14)\n#define DISPID_ONRESET               (DISPID_NORMAL_FIRST+15)\n#define DISPID_ONRESIZE              (DISPID_NORMAL_FIRST+16)\n#define DISPID_ONBEFOREUNLOAD        (DISPID_NORMAL_FIRST+17)\n#define DISPID_ONCHANGEFOCUS         (DISPID_NORMAL_FIRST+18)\n#define DISPID_ONCHANGEBLUR          (DISPID_NORMAL_FIRST+19)\n#define DISPID_ONPERSIST             (DISPID_NORMAL_FIRST+20)\n#define DISPID_ONPERSISTSAVE         (DISPID_NORMAL_FIRST+21)\n#define DISPID_ONPERSISTLOAD         (DISPID_NORMAL_FIRST+22)\n#define DISPID_ONCONTEXTMENU         (DISPID_NORMAL_FIRST+23)\n#define DISPID_ONBEFOREPRINT         (DISPID_NORMAL_FIRST+24)\n#define DISPID_ONAFTERPRINT          (DISPID_NORMAL_FIRST+25)\n#define DISPID_ONSTOP                (DISPID_NORMAL_FIRST+26)\n#define DISPID_ONBEFOREEDITFOCUS     (DISPID_NORMAL_FIRST+27)\n#define DISPID_ONMOUSEHOVER          (DISPID_NORMAL_FIRST+28)\n#define DISPID_ONCONTENTREADY        (DISPID_NORMAL_FIRST+29)\n#define DISPID_ONLAYOUTCOMPLETE      (DISPID_NORMAL_FIRST+30)\n#define DISPID_ONPAGE                (DISPID_NORMAL_FIRST+31)\n#define DISPID_ONLINKEDOVERFLOW      (DISPID_NORMAL_FIRST+32)\n#define DISPID_ONMOUSEWHEEL          (DISPID_NORMAL_FIRST+33)\n#define DISPID_ONBEFOREDEACTIVATE    (DISPID_NORMAL_FIRST+34)\n#define DISPID_ONMOVE                (DISPID_NORMAL_FIRST+35)\n#define DISPID_ONCONTROLSELECT       (DISPID_NORMAL_FIRST+36)\n#define DISPID_ONSELECTIONCHANGE     (DISPID_NORMAL_FIRST+37)\n#define DISPID_ONMOVESTART           (DISPID_NORMAL_FIRST+38)\n#define DISPID_ONMOVEEND             (DISPID_NORMAL_FIRST+39)\n#define DISPID_ONRESIZESTART         (DISPID_NORMAL_FIRST+40)\n#define DISPID_ONRESIZEEND           (DISPID_NORMAL_FIRST+41)\n#define DISPID_ONMOUSEENTER          (DISPID_NORMAL_FIRST+42)\n#define DISPID_ONMOUSELEAVE          (DISPID_NORMAL_FIRST+43)\n#define DISPID_ONACTIVATE            (DISPID_NORMAL_FIRST+44)\n#define DISPID_ONDEACTIVATE          (DISPID_NORMAL_FIRST+45)\n#define DISPID_ONMULTILAYOUTCLEANUP  (DISPID_NORMAL_FIRST+46)\n#define DISPID_ONBEFOREACTIVATE      (DISPID_NORMAL_FIRST+47)\n#define DISPID_ONFOCUSIN             (DISPID_NORMAL_FIRST+48)\n#define DISPID_ONFOCUSOUT            (DISPID_NORMAL_FIRST+49)\n#define DISPID_ONVALUECHANGE         (DISPID_NORMAL_FIRST+50)\n#define DISPID_ONSELECTADD           (DISPID_NORMAL_FIRST+51)\n#define DISPID_ONSELECTREMOVE        (DISPID_NORMAL_FIRST+52)\n#define DISPID_ONSELECTWITHIN        (DISPID_NORMAL_FIRST+53)\n#define DISPID_ONSYSTEMSCROLLINGSTART    (DISPID_NORMAL_FIRST+54)\n#define DISPID_ONSYSTEMSCROLLINGEND      (DISPID_NORMAL_FIRST+55)\n#define DISPID_ONOBJECTCONTENTSCROLLED   (DISPID_NORMAL_FIRST+56)\n#define DISPID_ONSTORAGE             (DISPID_NORMAL_FIRST+57)\n#define DISPID_ONSTORAGECOMMIT       (DISPID_NORMAL_FIRST+58)\n#define DISPID_ONSHOW                (DISPID_NORMAL_FIRST+59)\n#define DISPID_ONHIDE                (DISPID_NORMAL_FIRST+60)\n#define DISPID_ONALERT               (DISPID_NORMAL_FIRST+61)\n#define DISPID_ONPOPUPMENUSTART      (DISPID_NORMAL_FIRST+62)\n#define DISPID_ONPOPUPMENUEND        (DISPID_NORMAL_FIRST+63)\n#define DISPID_ONONLINE              (DISPID_NORMAL_FIRST+64)\n#define DISPID_ONOFFLINE             (DISPID_NORMAL_FIRST+65)\n#define DISPID_ONHASHCHANGE          (DISPID_NORMAL_FIRST+66)\n#define DISPID_ONMESSAGE             (DISPID_NORMAL_FIRST+67)\n#define DISPID_ONDOMMUTATION         (DISPID_NORMAL_FIRST+68)\n#define DISPID_SVGLOAD               (DISPID_NORMAL_FIRST+69)\n#define DISPID_SVGUNLOAD             (DISPID_NORMAL_FIRST+70)\n#define DISPID_SVGABORT              (DISPID_NORMAL_FIRST+71)\n#define DISPID_SVGERROR              (DISPID_NORMAL_FIRST+72)\n#define DISPID_SVGRESIZE             (DISPID_NORMAL_FIRST+73)\n#define DISPID_SVGSCROLL             (DISPID_NORMAL_FIRST+74)\n#define DISPID_SVGZOOM               (DISPID_NORMAL_FIRST+75)\n#define DISPID_MSPOINTERDOWN         (DISPID_NORMAL_FIRST+76)\n#define DISPID_MSPOINTERMOVE         (DISPID_NORMAL_FIRST+77)\n#define DISPID_MSPOINTERUP           (DISPID_NORMAL_FIRST+78)\n#define DISPID_MSPOINTEROVER         (DISPID_NORMAL_FIRST+79)\n#define DISPID_MSPOINTEROUT          (DISPID_NORMAL_FIRST+80)\n#define DISPID_MSPOINTERCANCEL       (DISPID_NORMAL_FIRST+81)\n#define DISPID_MSPOINTERHOVER        (DISPID_NORMAL_FIRST+82)\n#define DISPID_MSGESTURESTART        (DISPID_NORMAL_FIRST+83)\n#define DISPID_MSGESTURECHANGE       (DISPID_NORMAL_FIRST+84)\n#define DISPID_MSGESTUREEND          (DISPID_NORMAL_FIRST+85)\n#define DISPID_MSGESTUREHOLD         (DISPID_NORMAL_FIRST+86)\n#define DISPID_MSGESTURETAP          (DISPID_NORMAL_FIRST+87)\n#define DISPID_MSGESTUREDOUBLETAP    (DISPID_NORMAL_FIRST+88)\n#define DISPID_MSINERTIASTART        (DISPID_NORMAL_FIRST+89)\n#define DISPID_MSLOSTPOINTERCAPTURE  (DISPID_NORMAL_FIRST+90)\n#define DISPID_MSGOTPOINTERCAPTURE   (DISPID_NORMAL_FIRST+91)\n#define DISPID_MSTRANSITIONSTART     (DISPID_NORMAL_FIRST+92)\n#define DISPID_MSTRANSITIONEND       (DISPID_NORMAL_FIRST+93)\n#define DISPID_MSANIMATIONSTART      (DISPID_NORMAL_FIRST+94)\n#define DISPID_MSANIMATIONEND        (DISPID_NORMAL_FIRST+95)\n#define DISPID_MSANIMATIONITERATION  (DISPID_NORMAL_FIRST+96)\n#define DISPID_MSGESTUREINIT         (DISPID_NORMAL_FIRST+97)\n#define DISPID_MSMANIPULATIONSTATECHANGED    (DISPID_NORMAL_FIRST+98)\n#define DISPID_ONOPEN                (DISPID_NORMAL_FIRST+99)\n#define DISPID_ONCLOSE               (DISPID_NORMAL_FIRST+100)\n#define DISPID_MSPOINTERENTER        (DISPID_NORMAL_FIRST+101)\n#define DISPID_MSPOINTERLEAVE        (DISPID_NORMAL_FIRST+102)\n#define DISPID_MSORIENTATIONCHANGE   (DISPID_NORMAL_FIRST+103)\n#define DISPID_ONDEVICEORIENTATION   (DISPID_NORMAL_FIRST+104)\n#define DISPID_ONDEVICEMOTION        (DISPID_NORMAL_FIRST+105)\n#define DISPID_ONPAGESHOW            (DISPID_NORMAL_FIRST+106)\n#define DISPID_ONPAGEHIDE            (DISPID_NORMAL_FIRST+107)\n#define DISPID_ONCOMPASSNEEDSCALIBRATION (DISPID_NORMAL_FIRST+108)\n\n/* HTMLDocumentEvents */\n#define DISPID_HTMLDOCUMENTEVENTS_ONHELP              DISPID_EVMETH_ONHELP\n#define DISPID_HTMLDOCUMENTEVENTS_ONCLICK             DISPID_EVMETH_ONCLICK\n#define DISPID_HTMLDOCUMENTEVENTS_ONDBLCLICK          DISPID_EVMETH_ONDBLCLICK\n#define DISPID_HTMLDOCUMENTEVENTS_ONKEYDOWN           DISPID_EVMETH_ONKEYDOWN\n#define DISPID_HTMLDOCUMENTEVENTS_ONKEYUP             DISPID_EVMETH_ONKEYUP\n#define DISPID_HTMLDOCUMENTEVENTS_ONKEYPRESS          DISPID_EVMETH_ONKEYPRESS\n#define DISPID_HTMLDOCUMENTEVENTS_ONMOUSEDOWN         DISPID_EVMETH_ONMOUSEDOWN\n#define DISPID_HTMLDOCUMENTEVENTS_ONMOUSEMOVE         DISPID_EVMETH_ONMOUSEMOVE\n#define DISPID_HTMLDOCUMENTEVENTS_ONMOUSEUP           DISPID_EVMETH_ONMOUSEUP\n#define DISPID_HTMLDOCUMENTEVENTS_ONMOUSEOUT          DISPID_EVMETH_ONMOUSEOUT\n#define DISPID_HTMLDOCUMENTEVENTS_ONMOUSEOVER         DISPID_EVMETH_ONMOUSEOVER\n#define DISPID_HTMLDOCUMENTEVENTS_ONREADYSTATECHANGE  DISPID_EVMETH_ONREADYSTATECHANGE\n#define DISPID_HTMLDOCUMENTEVENTS_ONBEFOREUPDATE      DISPID_EVMETH_ONBEFOREUPDATE\n#define DISPID_HTMLDOCUMENTEVENTS_ONAFTERUPDATE       DISPID_EVMETH_ONAFTERUPDATE\n#define DISPID_HTMLDOCUMENTEVENTS_ONROWEXIT           DISPID_EVMETH_ONROWEXIT\n#define DISPID_HTMLDOCUMENTEVENTS_ONROWENTER          DISPID_EVMETH_ONROWENTER\n#define DISPID_HTMLDOCUMENTEVENTS_ONDRAGSTART         DISPID_EVMETH_ONDRAGSTART\n#define DISPID_HTMLDOCUMENTEVENTS_ONSELECTSTART       DISPID_EVMETH_ONSELECTSTART\n#define DISPID_HTMLDOCUMENTEVENTS_ONERRORUPDATE       DISPID_EVMETH_ONERRORUPDATE\n#define DISPID_HTMLDOCUMENTEVENTS_ONCONTEXTMENU       DISPID_EVMETH_ONCONTEXTMENU\n#define DISPID_HTMLDOCUMENTEVENTS_ONSTOP              DISPID_EVMETH_ONSTOP\n#define DISPID_HTMLDOCUMENTEVENTS_ONROWSDELETE        DISPID_EVMETH_ONROWSDELETE\n#define DISPID_HTMLDOCUMENTEVENTS_ONROWSINSERTED      DISPID_EVMETH_ONROWSINSERTED\n#define DISPID_HTMLDOCUMENTEVENTS_ONCELLCHANGE        DISPID_EVMETH_ONCELLCHANGE\n#define DISPID_HTMLDOCUMENTEVENTS_ONPROPERTYCHANGE    DISPID_EVMETH_ONPROPERTYCHANGE\n#define DISPID_HTMLDOCUMENTEVENTS_ONDATASETCHANGED    DISPID_EVMETH_ONDATASETCHANGED\n#define DISPID_HTMLDOCUMENTEVENTS_ONDATAAVAILABLE     DISPID_EVMETH_ONDATAAVAILABLE\n#define DISPID_HTMLDOCUMENTEVENTS_ONDATASETCOMPLETE   DISPID_EVMETH_ONDATASETCOMPLETE\n#define DISPID_HTMLDOCUMENTEVENTS_ONBEFOREEDITFOCUS   DISPID_EVMETH_ONBEFOREEDITFOCUS\n#define DISPID_HTMLDOCUMENTEVENTS_ONSELECTIONCHANGE   DISPID_EVMETH_ONSELECTIONCHANGE\n#define DISPID_HTMLDOCUMENTEVENTS_ONCONTROLSELECT     DISPID_EVMETH_ONCONTROLSELECT\n#define DISPID_HTMLDOCUMENTEVENTS_ONMOUSEWHEEL        DISPID_EVMETH_ONMOUSEWHEEL\n#define DISPID_HTMLDOCUMENTEVENTS_ONFOCUSIN           DISPID_EVMETH_ONFOCUSIN\n#define DISPID_HTMLDOCUMENTEVENTS_ONFOCUSOUT          DISPID_EVMETH_ONFOCUSOUT\n#define DISPID_HTMLDOCUMENTEVENTS_ONACTIVATE          DISPID_EVMETH_ONACTIVATE\n#define DISPID_HTMLDOCUMENTEVENTS_ONDEACTIVATE        DISPID_EVMETH_ONDEACTIVATE\n#define DISPID_HTMLDOCUMENTEVENTS_ONBEFOREACTIVATE    DISPID_EVMETH_ONBEFOREACTIVATE\n#define DISPID_HTMLDOCUMENTEVENTS_ONBEFOREDEACTIVATE  DISPID_EVMETH_ONBEFOREDEACTIVATE\n\n/* HTMLDocumentEvents2 */\n#define DISPID_HTMLDOCUMENTEVENTS2_ONHELP              DISPID_EVMETH_ONHELP\n#define DISPID_HTMLDOCUMENTEVENTS2_ONCLICK             DISPID_EVMETH_ONCLICK\n#define DISPID_HTMLDOCUMENTEVENTS2_ONDBLCLICK          DISPID_EVMETH_ONDBLCLICK\n#define DISPID_HTMLDOCUMENTEVENTS2_ONKEYDOWN           DISPID_EVMETH_ONKEYDOWN\n#define DISPID_HTMLDOCUMENTEVENTS2_ONKEYUP             DISPID_EVMETH_ONKEYUP\n#define DISPID_HTMLDOCUMENTEVENTS2_ONKEYPRESS          DISPID_EVMETH_ONKEYPRESS\n#define DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEDOWN         DISPID_EVMETH_ONMOUSEDOWN\n#define DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEMOVE         DISPID_EVMETH_ONMOUSEMOVE\n#define DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEUP           DISPID_EVMETH_ONMOUSEUP\n#define DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOUT          DISPID_EVMETH_ONMOUSEOUT\n#define DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOVER         DISPID_EVMETH_ONMOUSEOVER\n#define DISPID_HTMLDOCUMENTEVENTS2_ONREADYSTATECHANGE  DISPID_EVMETH_ONREADYSTATECHANGE\n#define DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREUPDATE      DISPID_EVMETH_ONBEFOREUPDATE\n#define DISPID_HTMLDOCUMENTEVENTS2_ONAFTERUPDATE       DISPID_EVMETH_ONAFTERUPDATE\n#define DISPID_HTMLDOCUMENTEVENTS2_ONROWEXIT           DISPID_EVMETH_ONROWEXIT\n#define DISPID_HTMLDOCUMENTEVENTS2_ONROWENTER          DISPID_EVMETH_ONROWENTER\n#define DISPID_HTMLDOCUMENTEVENTS2_ONDRAGSTART         DISPID_EVMETH_ONDRAGSTART\n#define DISPID_HTMLDOCUMENTEVENTS2_ONSELECTSTART       DISPID_EVMETH_ONSELECTSTART\n#define DISPID_HTMLDOCUMENTEVENTS2_ONERRORUPDATE       DISPID_EVMETH_ONERRORUPDATE\n#define DISPID_HTMLDOCUMENTEVENTS2_ONCONTEXTMENU       DISPID_EVMETH_ONCONTEXTMENU\n#define DISPID_HTMLDOCUMENTEVENTS2_ONSTOP              DISPID_EVMETH_ONSTOP\n#define DISPID_HTMLDOCUMENTEVENTS2_ONROWSDELETE        DISPID_EVMETH_ONROWSDELETE\n#define DISPID_HTMLDOCUMENTEVENTS2_ONROWSINSERTED      DISPID_EVMETH_ONROWSINSERTED\n#define DISPID_HTMLDOCUMENTEVENTS2_ONCELLCHANGE        DISPID_EVMETH_ONCELLCHANGE\n#define DISPID_HTMLDOCUMENTEVENTS2_ONPROPERTYCHANGE    DISPID_EVMETH_ONPROPERTYCHANGE\n#define DISPID_HTMLDOCUMENTEVENTS2_ONDATASETCHANGED    DISPID_EVMETH_ONDATASETCHANGED\n#define DISPID_HTMLDOCUMENTEVENTS2_ONDATAAVAILABLE     DISPID_EVMETH_ONDATAAVAILABLE\n#define DISPID_HTMLDOCUMENTEVENTS2_ONDATASETCOMPLETE   DISPID_EVMETH_ONDATASETCOMPLETE\n#define DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREEDITFOCUS   DISPID_EVMETH_ONBEFOREEDITFOCUS\n#define DISPID_HTMLDOCUMENTEVENTS2_ONSELECTIONCHANGE   DISPID_EVMETH_ONSELECTIONCHANGE\n#define DISPID_HTMLDOCUMENTEVENTS2_ONCONTROLSELECT     DISPID_EVMETH_ONCONTROLSELECT\n#define DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEWHEEL        DISPID_EVMETH_ONMOUSEWHEEL\n#define DISPID_HTMLDOCUMENTEVENTS2_ONFOCUSIN           DISPID_EVMETH_ONFOCUSIN\n#define DISPID_HTMLDOCUMENTEVENTS2_ONFOCUSOUT          DISPID_EVMETH_ONFOCUSOUT\n#define DISPID_HTMLDOCUMENTEVENTS2_ONACTIVATE          DISPID_EVMETH_ONACTIVATE\n#define DISPID_HTMLDOCUMENTEVENTS2_ONDEACTIVATE        DISPID_EVMETH_ONDEACTIVATE\n#define DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREACTIVATE    DISPID_EVMETH_ONBEFOREACTIVATE\n#define DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREDEACTIVATE  DISPID_EVMETH_ONBEFOREDEACTIVATE\n\n/* IHTMLDocument */\n#define DISPID_IHTMLDOCUMENT_SCRIPT    (DISPID_OMDOCUMENT+1)\n\n/* IHTMLDocument2 */\n#define DISPID_IHTMLDOCUMENT2_ALL                     (DISPID_OMDOCUMENT+3)\n#define DISPID_IHTMLDOCUMENT2_BODY                    (DISPID_OMDOCUMENT+4)\n#define DISPID_IHTMLDOCUMENT2_ACTIVEELEMENT           (DISPID_OMDOCUMENT+5)\n#define DISPID_IHTMLDOCUMENT2_APPLETS                 (DISPID_OMDOCUMENT+8)\n#define DISPID_IHTMLDOCUMENT2_ANCHORS                 (DISPID_OMDOCUMENT+7)\n#define DISPID_IHTMLDOCUMENT2_LINKS                   (DISPID_OMDOCUMENT+9)\n#define DISPID_IHTMLDOCUMENT2_FORMS                   (DISPID_OMDOCUMENT+10)\n#define DISPID_IHTMLDOCUMENT2_IMAGES                  (DISPID_OMDOCUMENT+11)\n#define DISPID_IHTMLDOCUMENT2_TITLE                   (DISPID_OMDOCUMENT+12)\n#define DISPID_IHTMLDOCUMENT2_SCRIPTS                 (DISPID_OMDOCUMENT+13)\n#define DISPID_IHTMLDOCUMENT2_DESIGNMODE              (DISPID_OMDOCUMENT+14)\n#define DISPID_IHTMLDOCUMENT2_EMBEDS                  (DISPID_OMDOCUMENT+15)\n#define DISPID_IHTMLDOCUMENT2_SELECTION               (DISPID_OMDOCUMENT+17)\n#define DISPID_IHTMLDOCUMENT2_READYSTATE              (DISPID_OMDOCUMENT+18)\n#define DISPID_IHTMLDOCUMENT2_FRAMES                  (DISPID_OMDOCUMENT+19)\n#define DISPID_IHTMLDOCUMENT2_PLUGINS                 (DISPID_OMDOCUMENT+21)\n#define DISPID_IHTMLDOCUMENT2_ALINKCOLOR              (DISPID_OMDOCUMENT+22)\n#define DISPID_IHTMLDOCUMENT2_VLINKCOLOR              (DISPID_OMDOCUMENT+23)\n#define DISPID_IHTMLDOCUMENT2_LINKCOLOR               (DISPID_OMDOCUMENT+24)\n#define DISPID_IHTMLDOCUMENT2_URL                     (DISPID_OMDOCUMENT+25)\n#define DISPID_IHTMLDOCUMENT2_LOCATION                (DISPID_OMDOCUMENT+26)\n#define DISPID_IHTMLDOCUMENT2_REFERRER                (DISPID_OMDOCUMENT+27)\n#define DISPID_IHTMLDOCUMENT2_LASTMODIFIED            (DISPID_OMDOCUMENT+28)\n#define DISPID_IHTMLDOCUMENT2_DOMAIN                  (DISPID_OMDOCUMENT+29)\n#define DISPID_IHTMLDOCUMENT2_COOKIE                  (DISPID_OMDOCUMENT+30)\n#define DISPID_IHTMLDOCUMENT2_EXPANDO                 (DISPID_OMDOCUMENT+31)\n#define DISPID_IHTMLDOCUMENT2_CHARSET                 (DISPID_OMDOCUMENT+32)\n#define DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET          (DISPID_OMDOCUMENT+33)\n#define DISPID_IHTMLDOCUMENT2_PARENTWINDOW            (DISPID_OMDOCUMENT+34)\n#define DISPID_IHTMLDOCUMENT2_MIMETYPE                (DISPID_OMDOCUMENT+41)\n#define DISPID_IHTMLDOCUMENT2_FILESIZE                (DISPID_OMDOCUMENT+42)\n#define DISPID_IHTMLDOCUMENT2_FILECREATEDDATE         (DISPID_OMDOCUMENT+43)\n#define DISPID_IHTMLDOCUMENT2_FILEMODIFIEDDATE        (DISPID_OMDOCUMENT+44)\n#define DISPID_IHTMLDOCUMENT2_FILEUPDATEDDATE         (DISPID_OMDOCUMENT+45)\n#define DISPID_IHTMLDOCUMENT2_SECURITY                (DISPID_OMDOCUMENT+46)\n#define DISPID_IHTMLDOCUMENT2_PROTOCOL                (DISPID_OMDOCUMENT+47)\n#define DISPID_IHTMLDOCUMENT2_NAMEPROP                (DISPID_OMDOCUMENT+48)\n#define DISPID_IHTMLDOCUMENT2_WRITE                   (DISPID_OMDOCUMENT+54)\n#define DISPID_IHTMLDOCUMENT2_WRITELN                 (DISPID_OMDOCUMENT+55)\n#define DISPID_IHTMLDOCUMENT2_OPEN                    (DISPID_OMDOCUMENT+56)\n#define DISPID_IHTMLDOCUMENT2_CLOSE                   (DISPID_OMDOCUMENT+57)\n#define DISPID_IHTMLDOCUMENT2_CLEAR                   (DISPID_OMDOCUMENT+58)\n#define DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSUPPORTED   (DISPID_OMDOCUMENT+59)\n#define DISPID_IHTMLDOCUMENT2_QUERYCOMMANDENABLED     (DISPID_OMDOCUMENT+60)\n#define DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSTATE       (DISPID_OMDOCUMENT+61)\n#define DISPID_IHTMLDOCUMENT2_QUERYCOMMANDINDETERM    (DISPID_OMDOCUMENT+62)\n#define DISPID_IHTMLDOCUMENT2_QUERYCOMMANDTEXT        (DISPID_OMDOCUMENT+63)\n#define DISPID_IHTMLDOCUMENT2_QUERYCOMMANDVALUE       (DISPID_OMDOCUMENT+64)\n#define DISPID_IHTMLDOCUMENT2_EXECCOMMAND             (DISPID_OMDOCUMENT+65)\n#define DISPID_IHTMLDOCUMENT2_EXECCOMMANDSHOWHELP     (DISPID_OMDOCUMENT+66)\n#define DISPID_IHTMLDOCUMENT2_CREATEELEMENT           (DISPID_OMDOCUMENT+67)\n#define DISPID_IHTMLDOCUMENT2_ELEMENTFROMPOINT        (DISPID_OMDOCUMENT+68)\n#define DISPID_IHTMLDOCUMENT2_STYLESHEETS             (DISPID_OMDOCUMENT+69)\n#define DISPID_IHTMLDOCUMENT2_TOSTRING                (DISPID_OMDOCUMENT+70)\n#define DISPID_IHTMLDOCUMENT2_CREATESTYLESHEET        (DISPID_OMDOCUMENT+71)\n#define DISPID_IHTMLDOCUMENT2_ONHELP                  DISPID_EVPROP_ONHELP\n#define DISPID_IHTMLDOCUMENT2_ONCLICK                 DISPID_EVPROP_ONCLICK\n#define DISPID_IHTMLDOCUMENT2_ONDBLCLICK              DISPID_EVPROP_ONDBLCLICK\n#define DISPID_IHTMLDOCUMENT2_ONKEYUP                 DISPID_EVPROP_ONKEYUP\n#define DISPID_IHTMLDOCUMENT2_ONKEYDOWN               DISPID_EVPROP_ONKEYDOWN\n#define DISPID_IHTMLDOCUMENT2_ONKEYPRESS              DISPID_EVPROP_ONKEYPRESS\n#define DISPID_IHTMLDOCUMENT2_ONMOUSEUP               DISPID_EVPROP_ONMOUSEUP\n#define DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN             DISPID_EVPROP_ONMOUSEDOWN\n#define DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE             DISPID_EVPROP_ONMOUSEMOVE\n#define DISPID_IHTMLDOCUMENT2_ONMOUSEOUT              DISPID_EVPROP_ONMOUSEOUT\n#define DISPID_IHTMLDOCUMENT2_ONMOUSEOVER             DISPID_EVPROP_ONMOUSEOVER\n#define DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE      DISPID_EVPROP_ONREADYSTATECHANGE\n#define DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE           DISPID_EVPROP_ONAFTERUPDATE\n#define DISPID_IHTMLDOCUMENT2_ONROWEXIT               DISPID_EVPROP_ONROWEXIT\n#define DISPID_IHTMLDOCUMENT2_ONROWENTER              DISPID_EVPROP_ONROWENTER\n#define DISPID_IHTMLDOCUMENT2_ONDRAGSTART             DISPID_EVPROP_ONDRAGSTART\n#define DISPID_IHTMLDOCUMENT2_ONSELECTSTART           DISPID_EVPROP_ONSELECTSTART\n#define DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE          DISPID_EVPROP_ONBEFOREUPDATE\n#define DISPID_IHTMLDOCUMENT2_ONERRORUPDATE           DISPID_EVPROP_ONERRORUPDATE\n#define DISPID_IHTMLDOCUMENT2_BGCOLOR                 DISPID_BACKCOLOR\n#define DISPID_IHTMLDOCUMENT2_FGCOLOR                 DISPID_A_COLOR\n\n/* IHTMLDocument3 */\n#define DISPID_IHTMLDOCUMENT3_RELEASECAPTURE          DISPID_OMDOCUMENT+72\n#define DISPID_IHTMLDOCUMENT3_RECALC                  DISPID_OMDOCUMENT+73\n#define DISPID_IHTMLDOCUMENT3_CREATETEXTNODE          DISPID_OMDOCUMENT+74\n#define DISPID_IHTMLDOCUMENT3_DOCUMENTELEMENT         DISPID_OMDOCUMENT+75\n#define DISPID_IHTMLDOCUMENT3_UNIQUEID                DISPID_OMDOCUMENT+77\n#define DISPID_IHTMLDOCUMENT3_ATTACHEVENT             DISPID_HTMLOBJECT+7\n#define DISPID_IHTMLDOCUMENT3_DETACHEVENT             DISPID_HTMLOBJECT+8\n#define DISPID_IHTMLDOCUMENT3_ONROWSDELETE            DISPID_EVPROP_ONROWSDELETE\n#define DISPID_IHTMLDOCUMENT3_ONROWSINSERTED          DISPID_EVPROP_ONROWSINSERTED\n#define DISPID_IHTMLDOCUMENT3_ONCELLCHANGE            DISPID_EVPROP_ONCELLCHANGE\n#define DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED        DISPID_EVPROP_ONDATASETCHANGED\n#define DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE         DISPID_EVPROP_ONDATAAVAILABLE\n#define DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE       DISPID_EVPROP_ONDATASETCOMPLETE\n#define DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE        DISPID_EVPROP_ONPROPERTYCHANGE\n#define DISPID_IHTMLDOCUMENT3_DIR                     DISPID_A_DIR\n#define DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU           DISPID_EVPROP_ONCONTEXTMENU\n#define DISPID_IHTMLDOCUMENT3_ONSTOP                  DISPID_EVPROP_ONSTOP\n#define DISPID_IHTMLDOCUMENT3_CREATEDOCUMENTFRAGMENT  DISPID_OMDOCUMENT+76\n#define DISPID_IHTMLDOCUMENT3_PARENTDOCUMENT          DISPID_OMDOCUMENT+78\n#define DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD          DISPID_OMDOCUMENT+79\n#define DISPID_IHTMLDOCUMENT3_BASEURL                 DISPID_OMDOCUMENT+80\n#define DISPID_IHTMLDOCUMENT3_CHILDNODES              DISPID_ELEMENT+49\n#define DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS      DISPID_OMDOCUMENT+82\n#define DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS       DISPID_EVPROP_ONBEFOREEDITFOCUS\n#define DISPID_IHTMLDOCUMENT3_GETELEMENTSBYNAME       DISPID_OMDOCUMENT+86\n#define DISPID_IHTMLDOCUMENT3_GETELEMENTBYID          DISPID_OMDOCUMENT+88\n#define DISPID_IHTMLDOCUMENT3_GETELEMENTSBYTAGNAME    DISPID_OMDOCUMENT+87\n\n\n/* IHTMLDocument4 */\n#define DISPID_IHTMLDOCUMENT4_FOCUS                  DISPID_OMDOCUMENT+89\n#define DISPID_IHTMLDOCUMENT4_HASFOCUS               DISPID_OMDOCUMENT+90\n#define DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE      DISPID_EVPROP_ONSELECTIONCHANGE\n#define DISPID_IHTMLDOCUMENT4_NAMESPACES             DISPID_OMDOCUMENT+91\n#define DISPID_IHTMLDOCUMENT4_CREATEDOCUMENTFROMURL  DISPID_OMDOCUMENT+92\n#define DISPID_IHTMLDOCUMENT4_MEDIA                  DISPID_OMDOCUMENT+93\n#define DISPID_IHTMLDOCUMENT4_CREATEEVENTOBJECT      DISPID_OMDOCUMENT+94\n#define DISPID_IHTMLDOCUMENT4_FIREEVENT              DISPID_OMDOCUMENT+95\n#define DISPID_IHTMLDOCUMENT4_CREATERENDERSTYLE      DISPID_OMDOCUMENT+96\n#define DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT        DISPID_EVPROP_ONCONTROLSELECT\n#define DISPID_IHTMLDOCUMENT4_URLUNENCODED           DISPID_OMDOCUMENT+97\n\n/* IHTMLDocument5 */\n#define DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL        DISPID_EVPROP_ONMOUSEWHEEL\n#define DISPID_IHTMLDOCUMENT5_DOCTYPE             DISPID_OMDOCUMENT+98\n#define DISPID_IHTMLDOCUMENT5_IMPLEMENTATION      DISPID_OMDOCUMENT+99\n#define DISPID_IHTMLDOCUMENT5_CREATEATTRIBUTE     DISPID_OMDOCUMENT+100\n#define DISPID_IHTMLDOCUMENT5_CREATECOMMENT       DISPID_OMDOCUMENT+101\n#define DISPID_IHTMLDOCUMENT5_ONFOCUSIN           DISPID_EVPROP_ONFOCUSIN\n#define DISPID_IHTMLDOCUMENT5_ONFOCUSOUT          DISPID_EVPROP_ONFOCUSOUT\n#define DISPID_IHTMLDOCUMENT5_ONACTIVATE          DISPID_EVPROP_ONACTIVATE\n#define DISPID_IHTMLDOCUMENT5_ONDEACTIVATE        DISPID_EVPROP_ONDEACTIVATE\n#define DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE    DISPID_EVPROP_ONBEFOREACTIVATE\n#define DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE  DISPID_EVPROP_ONBEFOREDEACTIVATE\n#define DISPID_IHTMLDOCUMENT5_COMPATMODE          DISPID_OMDOCUMENT+102\n\n/* IHTMLDocument6 */\n#define DISPID_IHTMLDOCUMENT6_COMPATIBLE          DISPID_OMDOCUMENT+103\n#define DISPID_IHTMLDOCUMENT6_DOCUMENTMODE        DISPID_OMDOCUMENT+104\n#define DISPID_IHTMLDOCUMENT6_ONSTORAGE           DISPID_EVPROP_ONSTORAGE\n#define DISPID_IHTMLDOCUMENT6_ONSTORAGECOMMIT     DISPID_EVPROP_ONSTORAGECOMMIT\n#define DISPID_IHTMLDOCUMENT6_IE8_GETELEMENTBYID  DISPID_OMDOCUMENT+107\n#define DISPID_IHTMLDOCUMENT6_UPDATESETTINGS      DISPID_OMDOCUMENT+109\n\n/* IHTMLDocument7 */\n#define DISPID_IHTMLDOCUMENT7_DEFAULTVIEW                      DISPID_OMDOCUMENT+110\n#define DISPID_IHTMLDOCUMENT7_CREATECDATASECTION               DISPID_OMDOCUMENT+123\n#define DISPID_IHTMLDOCUMENT7_GETSELECTION                     DISPID_OMDOCUMENT+112\n#define DISPID_IHTMLDOCUMENT7_GETELEMENTSBYTAGNAMENS           DISPID_OMDOCUMENT+113\n#define DISPID_IHTMLDOCUMENT7_CREATEELEMENTNS                  DISPID_OMDOCUMENT+114\n#define DISPID_IHTMLDOCUMENT7_CREATEATTRIBUTENS                DISPID_OMDOCUMENT+115\n#define DISPID_IHTMLDOCUMENT7_ONMSTHUMBNAILCLICK               DISPID_EVPROP_ONMSTHUMBNAILCLICK\n#define DISPID_IHTMLDOCUMENT7_CHARACTERSET                     DISPID_OMDOCUMENT+117\n#define DISPID_IHTMLDOCUMENT7_IE9_CREATEELEMENT                DISPID_OMDOCUMENT+118\n#define DISPID_IHTMLDOCUMENT7_IE9_CREATEATTRIBUTE              DISPID_OMDOCUMENT+119\n#define DISPID_IHTMLDOCUMENT7_GETELEMENTSBYCLASSNAME           DISPID_OMDOCUMENT+120\n#define DISPID_IHTMLDOCUMENT7_CREATEPROCESSINGINSTRUCTION      DISPID_OMDOCUMENT+124\n#define DISPID_IHTMLDOCUMENT7_ADOPTNODE                        DISPID_OMDOCUMENT+125\n#define DISPID_IHTMLDOCUMENT7_ONMSSITEMODEJUMPLISTITEMREMOVED  DISPID_EVPROP_ONMSSITEMODEJUMPLISTITEMREMOVED\n#define DISPID_IHTMLDOCUMENT7_IE9_ALL                          DISPID_OMDOCUMENT+126\n#define DISPID_IHTMLDOCUMENT7_INPUTENCODING                    DISPID_OMDOCUMENT+127\n#define DISPID_IHTMLDOCUMENT7_XMLENCODING                      DISPID_OMDOCUMENT+128\n#define DISPID_IHTMLDOCUMENT7_XMLSTANDALONE                    DISPID_OMDOCUMENT+129\n#define DISPID_IHTMLDOCUMENT7_XMLVERSION                       DISPID_OMDOCUMENT+130\n#define DISPID_IHTMLDOCUMENT7_HASATTRIBUTES                    DISPID_OMDOCUMENT+132\n#define DISPID_IHTMLDOCUMENT7_ONABORT                          DISPID_EVPROP_ONABORT\n#define DISPID_IHTMLDOCUMENT7_ONBLUR                           DISPID_EVPROP_ONBLUR\n#define DISPID_IHTMLDOCUMENT7_ONCANPLAY                        DISPID_EVPROP_CANPLAY\n#define DISPID_IHTMLDOCUMENT7_ONCANPLAYTHROUGH                 DISPID_EVPROP_CANPLAYTHROUGH\n#define DISPID_IHTMLDOCUMENT7_ONCHANGE                         DISPID_EVPROP_ONCHANGE\n#define DISPID_IHTMLDOCUMENT7_ONDRAG                           DISPID_EVPROP_ONDRAG\n#define DISPID_IHTMLDOCUMENT7_ONDRAGEND                        DISPID_EVPROP_ONDRAGEND\n#define DISPID_IHTMLDOCUMENT7_ONDRAGENTER                      DISPID_EVPROP_ONDRAGENTER\n#define DISPID_IHTMLDOCUMENT7_ONDRAGLEAVE                      DISPID_EVPROP_ONDRAGLEAVE\n#define DISPID_IHTMLDOCUMENT7_ONDRAGOVER                       DISPID_EVPROP_ONDRAGOVER\n#define DISPID_IHTMLDOCUMENT7_ONDROP                           DISPID_EVPROP_ONDROP\n#define DISPID_IHTMLDOCUMENT7_ONDURATIONCHANGE                 DISPID_EVPROP_DURATIONCHANGE\n#define DISPID_IHTMLDOCUMENT7_ONEMPTIED                        DISPID_EVPROP_EMPTIED\n#define DISPID_IHTMLDOCUMENT7_ONENDED                          DISPID_EVPROP_ENDED\n#define DISPID_IHTMLDOCUMENT7_ONERROR                          DISPID_EVPROP_ONERROR\n#define DISPID_IHTMLDOCUMENT7_ONFOCUS                          DISPID_EVPROP_ONFOCUS\n#define DISPID_IHTMLDOCUMENT7_ONINPUT                          DISPID_EVPROP_INPUT\n#define DISPID_IHTMLDOCUMENT7_ONLOAD                           DISPID_EVPROP_ONLOAD\n#define DISPID_IHTMLDOCUMENT7_ONLOADEDDATA                     DISPID_EVPROP_LOADEDDATA\n#define DISPID_IHTMLDOCUMENT7_ONLOADEDMETADATA                 DISPID_EVPROP_LOADEDMETADATA\n#define DISPID_IHTMLDOCUMENT7_ONLOADSTART                      DISPID_EVPROP_LOADSTART\n#define DISPID_IHTMLDOCUMENT7_ONPAUSE                          DISPID_EVPROP_PAUSE\n#define DISPID_IHTMLDOCUMENT7_ONPLAY                           DISPID_EVPROP_PLAY\n#define DISPID_IHTMLDOCUMENT7_ONPLAYING                        DISPID_EVPROP_PLAYING\n#define DISPID_IHTMLDOCUMENT7_ONPROGRESS                       DISPID_EVPROP_PROGRESS\n#define DISPID_IHTMLDOCUMENT7_ONRATECHANGE                     DISPID_EVPROP_RATECHANGE\n#define DISPID_IHTMLDOCUMENT7_ONRESET                          DISPID_EVPROP_ONRESET\n#define DISPID_IHTMLDOCUMENT7_ONSCROLL                         DISPID_EVPROP_ONSCROLL\n#define DISPID_IHTMLDOCUMENT7_ONSEEKED                         DISPID_EVPROP_SEEKED\n#define DISPID_IHTMLDOCUMENT7_ONSEEKING                        DISPID_EVPROP_SEEKING\n#define DISPID_IHTMLDOCUMENT7_ONSELECT                         DISPID_EVPROP_ONSELECT\n#define DISPID_IHTMLDOCUMENT7_ONSTALLED                        DISPID_EVPROP_STALLED\n#define DISPID_IHTMLDOCUMENT7_ONSUBMIT                         DISPID_EVPROP_ONSUBMIT\n#define DISPID_IHTMLDOCUMENT7_ONSUSPEND                        DISPID_EVPROP_SUSPEND\n#define DISPID_IHTMLDOCUMENT7_ONTIMEUPDATE                     DISPID_EVPROP_TIMEUPDATE\n#define DISPID_IHTMLDOCUMENT7_ONVOLUMECHANGE                   DISPID_EVPROP_VOLUMECHANGE\n#define DISPID_IHTMLDOCUMENT7_ONWAITING                        DISPID_EVPROP_WAITING\n#define DISPID_IHTMLDOCUMENT7_NORMALIZE                        DISPID_OMDOCUMENT+134\n#define DISPID_IHTMLDOCUMENT7_IMPORTNODE                       DISPID_OMDOCUMENT+135\n#define DISPID_IHTMLDOCUMENT7_IE9_PARENTWINDOW                 DISPID_OMDOCUMENT+136\n#define DISPID_IHTMLDOCUMENT7_IE9_BODY                         DISPID_OMDOCUMENT+137\n#define DISPID_IHTMLDOCUMENT7_HEAD                             DISPID_OMDOCUMENT+138\n\n/* IHTMLDocument8 */\n#define DISPID_IHTMLDOCUMENT8_ONMSCONTENTZOOM                  DISPID_EVPROP_ONMSCONTENTZOOM\n#define DISPID_IHTMLDOCUMENT8_ONMSPOINTERDOWN                  DISPID_EVPROP_ONMSPOINTERDOWN\n#define DISPID_IHTMLDOCUMENT8_ONMSPOINTERMOVE                  DISPID_EVPROP_ONMSPOINTERMOVE\n#define DISPID_IHTMLDOCUMENT8_ONMSPOINTERUP                    DISPID_EVPROP_ONMSPOINTERUP\n#define DISPID_IHTMLDOCUMENT8_ONMSPOINTEROVER                  DISPID_EVPROP_ONMSPOINTEROVER\n#define DISPID_IHTMLDOCUMENT8_ONMSPOINTEROUT                   DISPID_EVPROP_ONMSPOINTEROUT\n#define DISPID_IHTMLDOCUMENT8_ONMSPOINTERCANCEL                DISPID_EVPROP_ONMSPOINTERCANCEL\n#define DISPID_IHTMLDOCUMENT8_ONMSPOINTERHOVER                 DISPID_EVPROP_ONMSPOINTERHOVER\n#define DISPID_IHTMLDOCUMENT8_ONMSGESTURESTART                 DISPID_EVPROP_ONMSGESTURESTART\n#define DISPID_IHTMLDOCUMENT8_ONMSGESTURECHANGE                DISPID_EVPROP_ONMSGESTURECHANGE\n#define DISPID_IHTMLDOCUMENT8_ONMSGESTUREEND                   DISPID_EVPROP_ONMSGESTUREEND\n#define DISPID_IHTMLDOCUMENT8_ONMSGESTUREHOLD                  DISPID_EVPROP_ONMSGESTUREHOLD\n#define DISPID_IHTMLDOCUMENT8_ONMSGESTURETAP                   DISPID_EVPROP_ONMSGESTURETAP\n#define DISPID_IHTMLDOCUMENT8_ONMSGESTUREDOUBLETAP             DISPID_EVPROP_ONMSGESTUREDOUBLETAP\n#define DISPID_IHTMLDOCUMENT8_ONMSINERTIASTART                 DISPID_EVPROP_ONMSINERTIASTART\n#define DISPID_IHTMLDOCUMENT8_ELEMENTSFROMPOINT                DISPID_OMDOCUMENT+139\n#define DISPID_IHTMLDOCUMENT8_ELEMENTSFROMRECT                 DISPID_OMDOCUMENT+140\n#define DISPID_IHTMLDOCUMENT8_ONMSMANIPULATIONSTATECHANGED     DISPID_EVPROP_ONMSMANIPULATIONSTATECHANGED\n#define DISPID_IHTMLDOCUMENT8_MSCAPSLOCKWARNINGOFF             DISPID_OMDOCUMENT+141\n\n/* DWebBridgeEvents */\n#define DISPID_DWEBBRIDGEEVENTS_ONSCRIPTLETEVENT   1\n#define DISPID_DWEBBRIDGEEVENTS_ONREADYSTATECHANGE DISPID_HTMLDOCUMENTEVENTS_ONREADYSTATECHANGE\n#define DISPID_DWEBBRIDGEEVENTS_ONCLICK            DISPID_HTMLDOCUMENTEVENTS_ONCLICK\n#define DISPID_DWEBBRIDGEEVENTS_ONDBLCLICK         DISPID_HTMLDOCUMENTEVENTS_ONDBLCLICK\n#define DISPID_DWEBBRIDGEEVENTS_ONKEYDOWN          DISPID_HTMLDOCUMENTEVENTS_ONKEYDOWN\n#define DISPID_DWEBBRIDGEEVENTS_ONKEYUP            DISPID_HTMLDOCUMENTEVENTS_ONKEYUP\n#define DISPID_DWEBBRIDGEEVENTS_ONKEYPRESS         DISPID_HTMLDOCUMENTEVENTS_ONKEYPRESS\n#define DISPID_DWEBBRIDGEEVENTS_ONMOUSEDOWN        DISPID_HTMLDOCUMENTEVENTS_ONMOUSEDOWN\n#define DISPID_DWEBBRIDGEEVENTS_ONMOUSEMOVE        DISPID_HTMLDOCUMENTEVENTS_ONMOUSEMOVE\n#define DISPID_DWEBBRIDGEEVENTS_ONMOUSEUP          DISPID_HTMLDOCUMENTEVENTS_ONMOUSEUP\n\n/* IWebBridge */\n#define DISPID_IWEBBRIDGE_URL                     1\n#define DISPID_IWEBBRIDGE_SCROLLBAR               2\n#define DISPID_IWEBBRIDGE_EMBED                   3\n#define DISPID_IWEBBRIDGE_EVENT                   DISPID_IHTMLWINDOW2_EVENT\n#define DISPID_IWEBBRIDGE_READYSTATE              DISPID_READYSTATE\n#define DISPID_IWEBBRIDGE_ABOUTBOX                DISPID_ABOUTBOX\n\n/* IHTMLEmbedElement */\n#define DISPID_IHTMLEMBEDELEMENT_HIDDEN       DISPID_OBJECT+10\n#define DISPID_IHTMLEMBEDELEMENT_PALETTE      DISPID_OBJECT+4\n#define DISPID_IHTMLEMBEDELEMENT_PLUGINSPAGE  DISPID_OBJECT+5\n#define DISPID_IHTMLEMBEDELEMENT_SRC          DISPID_OBJECT+6\n#define DISPID_IHTMLEMBEDELEMENT_UNITS        DISPID_OBJECT+8\n#define DISPID_IHTMLEMBEDELEMENT_NAME         STDPROPID_XOBJ_NAME\n#define DISPID_IHTMLEMBEDELEMENT_WIDTH        STDPROPID_XOBJ_WIDTH\n#define DISPID_IHTMLEMBEDELEMENT_HEIGHT       STDPROPID_XOBJ_HEIGHT\n\n/* IHTMLEmbedElement2 */\n#define DISPID_IHTMLEMBEDELEMENT2_IE8_SRC          DISPID_IE8_EMBED\n#define DISPID_IHTMLEMBEDELEMENT2_IE8_PLUGINSPAGE  DISPID_IE8_EMBED+1\n\n/* IHTMLElementCollection */\n#define DISPID_IHTMLELEMENTCOLLECTION_LENGTH     DISPID_COLLECTION\n#define DISPID_IHTMLELEMENTCOLLECTION_TOSTRING   (DISPID_COLLECTION+1)\n#define DISPID_IHTMLELEMENTCOLLECTION_TAGS       (DISPID_COLLECTION+2)\n#define DISPID_IHTMLELEMENTCOLLECTION__NEWENUM   DISPID_NEWENUM\n#define DISPID_IHTMLELEMENTCOLLECTION_ITEM       DISPID_VALUE\n\n/* IHTMLElementCollection2 */\n#define DISPID_IHTMLELEMENTCOLLECTION2_URNS  DISPID_COLLECTION+5\n\n/* IHTMLElementCollection3 */\n#define DISPID_IHTMLELEMENTCOLLECTION3_NAMEDITEM  DISPID_COLLECTION+6\n\n\n/* IHTMLAttributeCollection */\n#define DISPID_IHTMLATTRIBUTECOLLECTION_LENGTH      DISPID_COLLECTION\n#define DISPID_IHTMLATTRIBUTECOLLECTION__NEWENUM    DISPID_NEWENUM\n#define DISPID_IHTMLATTRIBUTECOLLECTION_ITEM        DISPID_VALUE\n\n/* IHTMLAttributeCollection2 */\n#define DISPID_IHTMLATTRIBUTECOLLECTION2_GETNAMEDITEM       DISPID_COLLECTION+1\n#define DISPID_IHTMLATTRIBUTECOLLECTION2_SETNAMEDITEM       DISPID_COLLECTION+2\n#define DISPID_IHTMLATTRIBUTECOLLECTION2_REMOVENAMEDITEM    DISPID_COLLECTION+3\n\n/* IHTMLAttributeCollection3 */\n#define DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_GETNAMEDITEM     DISPID_IE8_NAMEDNODEMAP\n#define DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_SETNAMEDITEM     DISPID_IE8_NAMEDNODEMAP+1\n#define DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_REMOVENAMEDITEM  DISPID_IE8_NAMEDNODEMAP+2\n#define DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_ITEM             DISPID_IE8_NAMEDNODEMAP+4\n#define DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_LENGTH           DISPID_IE8_NAMEDNODEMAP+3\n\n/* IHTMLDOMChildrenCollection */\n#define DISPID_IHTMLDOMCHILDRENCOLLECTION_LENGTH    DISPID_COLLECTION\n#define DISPID_IHTMLDOMCHILDRENCOLLECTION__NEWENUM  DISPID_NEWENUM\n#define DISPID_IHTMLDOMCHILDRENCOLLECTION_ITEM      DISPID_VALUE\n\n/* HTMLElementEvents */\n#define DISPID_HTMLELEMENTEVENTS_ONHELP             DISPID_EVMETH_ONHELP\n#define DISPID_HTMLELEMENTEVENTS_ONCLICK            DISPID_EVMETH_ONCLICK\n#define DISPID_HTMLELEMENTEVENTS_ONDBLCLICK         DISPID_EVMETH_ONDBLCLICK\n#define DISPID_HTMLELEMENTEVENTS_ONKEYPRESS         DISPID_EVMETH_ONKEYPRESS\n#define DISPID_HTMLELEMENTEVENTS_ONKEYDOWN          DISPID_EVMETH_ONKEYDOWN\n#define DISPID_HTMLELEMENTEVENTS_ONKEYUP            DISPID_EVMETH_ONKEYUP\n#define DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT         DISPID_EVMETH_ONMOUSEOUT\n#define DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER        DISPID_EVMETH_ONMOUSEOVER\n#define DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE        DISPID_EVMETH_ONMOUSEMOVE\n#define DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN        DISPID_EVMETH_ONMOUSEDOWN\n#define DISPID_HTMLELEMENTEVENTS_ONMOUSEUP          DISPID_EVMETH_ONMOUSEUP\n#define DISPID_HTMLELEMENTEVENTS_ONSELECTSTART      DISPID_EVMETH_ONSELECTSTART\n#define DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE     DISPID_EVMETH_ONFILTER\n#define DISPID_HTMLELEMENTEVENTS_ONDRAGSTART        DISPID_EVMETH_ONDRAGSTART\n#define DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE     DISPID_EVMETH_ONBEFOREUPDATE\n#define DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE      DISPID_EVMETH_ONAFTERUPDATE\n#define DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE      DISPID_EVMETH_ONERRORUPDATE\n#define DISPID_HTMLELEMENTEVENTS_ONROWEXIT          DISPID_EVMETH_ONROWEXIT\n#define DISPID_HTMLELEMENTEVENTS_ONROWENTER         DISPID_EVMETH_ONROWENTER\n#define DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED   DISPID_EVMETH_ONDATASETCHANGED\n#define DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE    DISPID_EVMETH_ONDATAAVAILABLE\n#define DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE  DISPID_EVMETH_ONDATASETCOMPLETE\n#define DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE      DISPID_EVMETH_ONLOSECAPTURE\n#define DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE   DISPID_EVMETH_ONPROPERTYCHANGE\n#define DISPID_HTMLELEMENTEVENTS_ONSCROLL           DISPID_EVMETH_ONSCROLL\n#define DISPID_HTMLELEMENTEVENTS_ONFOCUS            DISPID_EVMETH_ONFOCUS\n#define DISPID_HTMLELEMENTEVENTS_ONBLUR             DISPID_EVMETH_ONBLUR\n#define DISPID_HTMLELEMENTEVENTS_ONRESIZE           DISPID_EVMETH_ONRESIZE\n#define DISPID_HTMLELEMENTEVENTS_ONDRAG             DISPID_EVMETH_ONDRAG\n#define DISPID_HTMLELEMENTEVENTS_ONDRAGEND          DISPID_EVMETH_ONDRAGEND\n#define DISPID_HTMLELEMENTEVENTS_ONDRAGENTER        DISPID_EVMETH_ONDRAGENTER\n#define DISPID_HTMLELEMENTEVENTS_ONDRAGOVER         DISPID_EVMETH_ONDRAGOVER\n#define DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE        DISPID_EVMETH_ONDRAGLEAVE\n#define DISPID_HTMLELEMENTEVENTS_ONDROP             DISPID_EVMETH_ONDROP\n#define DISPID_HTMLELEMENTEVENTS_ONBEFORECUT        DISPID_EVMETH_ONBEFORECUT\n#define DISPID_HTMLELEMENTEVENTS_ONCUT              DISPID_EVMETH_ONCUT\n#define DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY       DISPID_EVMETH_ONBEFORECOPY\n#define DISPID_HTMLELEMENTEVENTS_ONCOPY             DISPID_EVMETH_ONCOPY\n#define DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE      DISPID_EVMETH_ONBEFOREPASTE\n#define DISPID_HTMLELEMENTEVENTS_ONPASTE            DISPID_EVMETH_ONPASTE\n#define DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU      DISPID_EVMETH_ONCONTEXTMENU\n#define DISPID_HTMLELEMENTEVENTS_ONROWSDELETE       DISPID_EVMETH_ONROWSDELETE\n#define DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED     DISPID_EVMETH_ONROWSINSERTED\n#define DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE       DISPID_EVMETH_ONCELLCHANGE\n#define DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE DISPID_EVMETH_ONREADYSTATECHANGE\n#define DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS  DISPID_EVMETH_ONBEFOREEDITFOCUS\n#define DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE   DISPID_EVMETH_ONLAYOUTCOMPLETE\n#define DISPID_HTMLELEMENTEVENTS_ONPAGE             DISPID_EVMETH_ONPAGE\n#define DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE DISPID_EVMETH_ONBEFOREDEACTIVATE\n#define DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE   DISPID_EVMETH_ONBEFOREACTIVATE\n#define DISPID_HTMLELEMENTEVENTS_ONMOVE             DISPID_EVMETH_ONMOVE\n#define DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT    DISPID_EVMETH_ONCONTROLSELECT\n#define DISPID_HTMLELEMENTEVENTS_ONMOVESTART        DISPID_EVMETH_ONMOVESTART\n#define DISPID_HTMLELEMENTEVENTS_ONMOVEEND          DISPID_EVMETH_ONMOVEEND\n#define DISPID_HTMLELEMENTEVENTS_ONRESIZESTART      DISPID_EVMETH_ONRESIZESTART\n#define DISPID_HTMLELEMENTEVENTS_ONRESIZEEND        DISPID_EVMETH_ONRESIZEEND\n#define DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER       DISPID_EVMETH_ONMOUSEENTER\n#define DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE       DISPID_EVMETH_ONMOUSELEAVE\n#define DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL       DISPID_EVMETH_ONMOUSEWHEEL\n#define DISPID_HTMLELEMENTEVENTS_ONACTIVATE         DISPID_EVMETH_ONACTIVATE\n#define DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE       DISPID_EVMETH_ONDEACTIVATE\n#define DISPID_HTMLELEMENTEVENTS_ONFOCUSIN          DISPID_EVMETH_ONFOCUSIN\n#define DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT         DISPID_EVMETH_ONFOCUSOUT\n\n/* HTMLElementEvents2 */\n\n#define DISPID_HTMLELEMENTEVENTS2_ONHELP            DISPID_EVMETH_ONHELP\n#define DISPID_HTMLELEMENTEVENTS2_ONCLICK           DISPID_EVMETH_ONCLICK\n#define DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK        DISPID_EVMETH_ONDBLCLICK\n#define DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS        DISPID_EVMETH_ONKEYPRESS\n#define DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN         DISPID_EVMETH_ONKEYDOWN\n#define DISPID_HTMLELEMENTEVENTS2_ONKEYUP           DISPID_EVMETH_ONKEYUP\n#define DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT        DISPID_EVMETH_ONMOUSEOUT\n#define DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER       DISPID_EVMETH_ONMOUSEOVER\n#define DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE       DISPID_EVMETH_ONMOUSEMOVE\n#define DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN       DISPID_EVMETH_ONMOUSEDOWN\n#define DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP         DISPID_EVMETH_ONMOUSEUP\n#define DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART     DISPID_EVMETH_ONSELECTSTART\n#define DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE    DISPID_EVMETH_ONFILTER\n#define DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART       DISPID_EVMETH_ONDRAGSTART\n#define DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE    DISPID_EVMETH_ONBEFOREUPDATE\n#define DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE     DISPID_EVMETH_ONAFTERUPDATE\n#define DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE     DISPID_EVMETH_ONERRORUPDATE\n#define DISPID_HTMLELEMENTEVENTS2_ONROWEXIT         DISPID_EVMETH_ONROWEXIT\n#define DISPID_HTMLELEMENTEVENTS2_ONROWENTER        DISPID_EVMETH_ONROWENTER\n#define DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED  DISPID_EVMETH_ONDATASETCHANGED\n#define DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE   DISPID_EVMETH_ONDATAAVAILABLE\n#define DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE DISPID_EVMETH_ONDATASETCOMPLETE\n#define DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE     DISPID_EVMETH_ONLOSECAPTURE\n#define DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE  DISPID_EVMETH_ONPROPERTYCHANGE\n#define DISPID_HTMLELEMENTEVENTS2_ONSCROLL          DISPID_EVMETH_ONSCROLL\n#define DISPID_HTMLELEMENTEVENTS2_ONFOCUS           DISPID_EVMETH_ONFOCUS\n#define DISPID_HTMLELEMENTEVENTS2_ONBLUR            DISPID_EVMETH_ONBLUR\n#define DISPID_HTMLELEMENTEVENTS2_ONRESIZE          DISPID_EVMETH_ONRESIZE\n#define DISPID_HTMLELEMENTEVENTS2_ONDRAG            DISPID_EVMETH_ONDRAG\n#define DISPID_HTMLELEMENTEVENTS2_ONDRAGEND         DISPID_EVMETH_ONDRAGEND\n#define DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER       DISPID_EVMETH_ONDRAGENTER\n#define DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER        DISPID_EVMETH_ONDRAGOVER\n#define DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE       DISPID_EVMETH_ONDRAGLEAVE\n#define DISPID_HTMLELEMENTEVENTS2_ONDROP            DISPID_EVMETH_ONDROP\n#define DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT       DISPID_EVMETH_ONBEFORECUT\n#define DISPID_HTMLELEMENTEVENTS2_ONCUT             DISPID_EVMETH_ONCUT\n#define DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY      DISPID_EVMETH_ONBEFORECOPY\n#define DISPID_HTMLELEMENTEVENTS2_ONCOPY            DISPID_EVMETH_ONCOPY\n#define DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE     DISPID_EVMETH_ONBEFOREPASTE\n#define DISPID_HTMLELEMENTEVENTS2_ONPASTE           DISPID_EVMETH_ONPASTE\n#define DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU     DISPID_EVMETH_ONCONTEXTMENU\n#define DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE      DISPID_EVMETH_ONROWSDELETE\n#define DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED    DISPID_EVMETH_ONROWSINSERTED\n#define DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE      DISPID_EVMETH_ONCELLCHANGE\n#define DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE DISPID_EVMETH_ONREADYSTATECHANGE\n#define DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE  DISPID_EVMETH_ONLAYOUTCOMPLETE\n#define DISPID_HTMLELEMENTEVENTS2_ONPAGE            DISPID_EVMETH_ONPAGE\n#define DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER      DISPID_EVMETH_ONMOUSEENTER\n#define DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE      DISPID_EVMETH_ONMOUSELEAVE\n#define DISPID_HTMLELEMENTEVENTS2_ONACTIVATE        DISPID_EVMETH_ONACTIVATE\n#define DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE      DISPID_EVMETH_ONDEACTIVATE\n#define DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE DISPID_EVMETH_ONBEFOREDEACTIVATE\n#define DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE  DISPID_EVMETH_ONBEFOREACTIVATE\n#define DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN         DISPID_EVMETH_ONFOCUSIN\n#define DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT        DISPID_EVMETH_ONFOCUSOUT\n#define DISPID_HTMLELEMENTEVENTS2_ONMOVE            DISPID_EVMETH_ONMOVE\n#define DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT   DISPID_EVMETH_ONCONTROLSELECT\n#define DISPID_HTMLELEMENTEVENTS2_ONMOVESTART       DISPID_EVMETH_ONMOVESTART\n#define DISPID_HTMLELEMENTEVENTS2_ONMOVEEND         DISPID_EVMETH_ONMOVEEND\n#define DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART     DISPID_EVMETH_ONRESIZESTART\n#define DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND       DISPID_EVMETH_ONRESIZEEND\n#define DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL      DISPID_EVMETH_ONMOUSEWHEEL\n\n/* IHTMLElement */\n#define DISPID_IHTMLELEMENT_SETATTRIBUTE         (DISPID_HTMLOBJECT+1)\n#define DISPID_IHTMLELEMENT_GETATTRIBUTE         (DISPID_HTMLOBJECT+2)\n#define DISPID_IHTMLELEMENT_REMOVEATTRIBUTE      (DISPID_HTMLOBJECT+3)\n#define DISPID_IHTMLELEMENT_CLASSNAME            (DISPID_ELEMENT+1)\n#define DISPID_IHTMLELEMENT_ID                   (DISPID_ELEMENT+2)\n#define DISPID_IHTMLELEMENT_TAGNAME              (DISPID_ELEMENT+4)\n#define DISPID_IHTMLELEMENT_OFFSETLEFT           (DISPID_ELEMENT+8)\n#define DISPID_IHTMLELEMENT_OFFSETTOP            (DISPID_ELEMENT+9)\n#define DISPID_IHTMLELEMENT_OFFSETWIDTH          (DISPID_ELEMENT+10)\n#define DISPID_IHTMLELEMENT_OFFSETHEIGHT         (DISPID_ELEMENT+11)\n#define DISPID_IHTMLELEMENT_OFFSETPARENT         (DISPID_ELEMENT+12)\n#define DISPID_IHTMLELEMENT_DOCUMENT             (DISPID_ELEMENT+18)\n#define DISPID_IHTMLELEMENT_SCROLLINTOVIEW       (DISPID_ELEMENT+19)\n#define DISPID_IHTMLELEMENT_CONTAINS             (DISPID_ELEMENT+20)\n#define DISPID_IHTMLELEMENT_SOURCEINDEX          (DISPID_ELEMENT+24)\n#define DISPID_IHTMLELEMENT_RECORDNUMBER         (DISPID_ELEMENT+25)\n#define DISPID_IHTMLELEMENT_INNERHTML            (DISPID_ELEMENT+26)\n#define DISPID_IHTMLELEMENT_INNERTEXT            (DISPID_ELEMENT+27)\n#define DISPID_IHTMLELEMENT_OUTERHTML            (DISPID_ELEMENT+28)\n#define DISPID_IHTMLELEMENT_OUTERTEXT            (DISPID_ELEMENT+29)\n#define DISPID_IHTMLELEMENT_INSERTADJACENTHTML   (DISPID_ELEMENT+30)\n#define DISPID_IHTMLELEMENT_INSERTADJACENTTEXT   (DISPID_ELEMENT+31)\n#define DISPID_IHTMLELEMENT_PARENTTEXTEDIT       (DISPID_ELEMENT+32)\n#define DISPID_IHTMLELEMENT_ISTEXTEDIT           (DISPID_ELEMENT+34)\n#define DISPID_IHTMLELEMENT_CLICK                (DISPID_ELEMENT+33)\n#define DISPID_IHTMLELEMENT_FILTERS              (DISPID_ELEMENT+35)\n#define DISPID_IHTMLELEMENT_TOSTRING             (DISPID_ELEMENT+36)\n#define DISPID_IHTMLELEMENT_CHILDREN             (DISPID_ELEMENT+37)\n#define DISPID_IHTMLELEMENT_ALL                  (DISPID_ELEMENT+38)\n#define DISPID_IHTMLELEMENT_PARENTELEMENT        STDPROPID_XOBJ_PARENT\n#define DISPID_IHTMLELEMENT_STYLE                STDPROPID_XOBJ_STYLE\n#define DISPID_IHTMLELEMENT_ONHELP               DISPID_EVPROP_ONHELP\n#define DISPID_IHTMLELEMENT_ONCLICK              DISPID_EVPROP_ONCLICK\n#define DISPID_IHTMLELEMENT_ONDBLCLICK           DISPID_EVPROP_ONDBLCLICK\n#define DISPID_IHTMLELEMENT_ONKEYDOWN            DISPID_EVPROP_ONKEYDOWN\n#define DISPID_IHTMLELEMENT_ONKEYUP              DISPID_EVPROP_ONKEYUP\n#define DISPID_IHTMLELEMENT_ONKEYPRESS           DISPID_EVPROP_ONKEYPRESS\n#define DISPID_IHTMLELEMENT_ONMOUSEOUT           DISPID_EVPROP_ONMOUSEOUT\n#define DISPID_IHTMLELEMENT_ONMOUSEOVER          DISPID_EVPROP_ONMOUSEOVER\n#define DISPID_IHTMLELEMENT_ONMOUSEMOVE          DISPID_EVPROP_ONMOUSEMOVE\n#define DISPID_IHTMLELEMENT_ONMOUSEDOWN          DISPID_EVPROP_ONMOUSEDOWN\n#define DISPID_IHTMLELEMENT_ONMOUSEUP            DISPID_EVPROP_ONMOUSEUP\n#define DISPID_IHTMLELEMENT_TITLE                STDPROPID_XOBJ_CONTROLTIPTEXT\n#define DISPID_IHTMLELEMENT_LANGUAGE             DISPID_A_LANGUAGE\n#define DISPID_IHTMLELEMENT_ONSELECTSTART        DISPID_EVPROP_ONSELECTSTART\n#define DISPID_IHTMLELEMENT_LANG                 DISPID_A_LANG\n#define DISPID_IHTMLELEMENT_ONDRAGSTART          DISPID_EVPROP_ONDRAGSTART\n#define DISPID_IHTMLELEMENT_ONBEFOREUPDATE       DISPID_EVPROP_ONBEFOREUPDATE\n#define DISPID_IHTMLELEMENT_ONAFTERUPDATE        DISPID_EVPROP_ONAFTERUPDATE\n#define DISPID_IHTMLELEMENT_ONERRORUPDATE        DISPID_EVPROP_ONERRORUPDATE\n#define DISPID_IHTMLELEMENT_ONROWEXIT            DISPID_EVPROP_ONROWEXIT\n#define DISPID_IHTMLELEMENT_ONROWENTER           DISPID_EVPROP_ONROWENTER\n#define DISPID_IHTMLELEMENT_ONDATASETCHANGED     DISPID_EVPROP_ONDATASETCHANGED\n#define DISPID_IHTMLELEMENT_ONDATAAVAILABLE      DISPID_EVPROP_ONDATAAVAILABLE\n#define DISPID_IHTMLELEMENT_ONDATASETCOMPLETE    DISPID_EVPROP_ONDATASETCOMPLETE\n#define DISPID_IHTMLELEMENT_ONFILTERCHANGE       DISPID_EVPROP_ONFILTER\n\n/* IHTMLElement2 */\n#define DISPID_IHTMLELEMENT2_SCOPENAME              DISPID_ELEMENT+39\n#define DISPID_IHTMLELEMENT2_SETCAPTURE             DISPID_ELEMENT+40\n#define DISPID_IHTMLELEMENT2_RELEASECAPTURE         DISPID_ELEMENT+41\n#define DISPID_IHTMLELEMENT2_ONLOSECAPTURE          DISPID_EVPROP_ONLOSECAPTURE\n#define DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT     DISPID_ELEMENT+42\n#define DISPID_IHTMLELEMENT2_DOSCROLL               DISPID_ELEMENT+43\n#define DISPID_IHTMLELEMENT2_ONSCROLL               DISPID_EVPROP_ONSCROLL\n#define DISPID_IHTMLELEMENT2_ONDRAG                 DISPID_EVPROP_ONDRAG\n#define DISPID_IHTMLELEMENT2_ONDRAGEND              DISPID_EVPROP_ONDRAGEND\n#define DISPID_IHTMLELEMENT2_ONDRAGENTER            DISPID_EVPROP_ONDRAGENTER\n#define DISPID_IHTMLELEMENT2_ONDRAGOVER             DISPID_EVPROP_ONDRAGOVER\n#define DISPID_IHTMLELEMENT2_ONDRAGLEAVE            DISPID_EVPROP_ONDRAGLEAVE\n#define DISPID_IHTMLELEMENT2_ONDROP                 DISPID_EVPROP_ONDROP\n#define DISPID_IHTMLELEMENT2_ONBEFORECUT            DISPID_EVPROP_ONBEFORECUT\n#define DISPID_IHTMLELEMENT2_ONCUT                  DISPID_EVPROP_ONCUT\n#define DISPID_IHTMLELEMENT2_ONBEFORECOPY           DISPID_EVPROP_ONBEFORECOPY\n#define DISPID_IHTMLELEMENT2_ONCOPY                 DISPID_EVPROP_ONCOPY\n#define DISPID_IHTMLELEMENT2_ONBEFOREPASTE          DISPID_EVPROP_ONBEFOREPASTE\n#define DISPID_IHTMLELEMENT2_ONPASTE                DISPID_EVPROP_ONPASTE\n#define DISPID_IHTMLELEMENT2_CURRENTSTYLE           DISPID_ELEMENT+7\n#define DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE       DISPID_EVPROP_ONPROPERTYCHANGE\n#define DISPID_IHTMLELEMENT2_GETCLIENTRECTS         DISPID_ELEMENT+44\n#define DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT  DISPID_ELEMENT+45\n#define DISPID_IHTMLELEMENT2_SETEXPRESSION          DISPID_HTMLOBJECT+4\n#define DISPID_IHTMLELEMENT2_GETEXPRESSION          DISPID_HTMLOBJECT+5\n#define DISPID_IHTMLELEMENT2_REMOVEEXPRESSION       DISPID_HTMLOBJECT+6\n#define DISPID_IHTMLELEMENT2_TABINDEX               STDPROPID_XOBJ_TABINDEX\n#define DISPID_IHTMLELEMENT2_FOCUS                  DISPID_SITE\n#define DISPID_IHTMLELEMENT2_ACCESSKEY              DISPID_SITE+5\n#define DISPID_IHTMLELEMENT2_ONBLUR                 DISPID_EVPROP_ONBLUR\n#define DISPID_IHTMLELEMENT2_ONFOCUS                DISPID_EVPROP_ONFOCUS\n#define DISPID_IHTMLELEMENT2_ONRESIZE               DISPID_EVPROP_ONRESIZE\n#define DISPID_IHTMLELEMENT2_BLUR                   DISPID_SITE+2\n#define DISPID_IHTMLELEMENT2_ADDFILTER              DISPID_SITE+17\n#define DISPID_IHTMLELEMENT2_REMOVEFILTER           DISPID_SITE+18\n#define DISPID_IHTMLELEMENT2_CLIENTHEIGHT           DISPID_SITE+19\n#define DISPID_IHTMLELEMENT2_CLIENTWIDTH            DISPID_SITE+20\n#define DISPID_IHTMLELEMENT2_CLIENTTOP              DISPID_SITE+21\n#define DISPID_IHTMLELEMENT2_CLIENTLEFT             DISPID_SITE+22\n#define DISPID_IHTMLELEMENT2_ATTACHEVENT            DISPID_HTMLOBJECT+7\n#define DISPID_IHTMLELEMENT2_DETACHEVENT            DISPID_HTMLOBJECT+8\n#define DISPID_IHTMLELEMENT2_READYSTATE             DISPID_A_READYSTATE\n#define DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE     DISPID_EVPROP_ONREADYSTATECHANGE\n#define DISPID_IHTMLELEMENT2_ONROWSDELETE           DISPID_EVPROP_ONROWSDELETE\n#define DISPID_IHTMLELEMENT2_ONROWSINSERTED         DISPID_EVPROP_ONROWSINSERTED\n#define DISPID_IHTMLELEMENT2_ONCELLCHANGE           DISPID_EVPROP_ONCELLCHANGE\n#define DISPID_IHTMLELEMENT2_DIR                    DISPID_A_DIR\n#define DISPID_IHTMLELEMENT2_CREATECONTROLRANGE     DISPID_ELEMENT+56\n#define DISPID_IHTMLELEMENT2_SCROLLHEIGHT           DISPID_ELEMENT+57\n#define DISPID_IHTMLELEMENT2_SCROLLWIDTH            DISPID_ELEMENT+58\n#define DISPID_IHTMLELEMENT2_SCROLLTOP              DISPID_ELEMENT+59\n#define DISPID_IHTMLELEMENT2_SCROLLLEFT             DISPID_ELEMENT+60\n#define DISPID_IHTMLELEMENT2_CLEARATTRIBUTES        DISPID_ELEMENT+62\n#define DISPID_IHTMLELEMENT2_MERGEATTRIBUTES        DISPID_ELEMENT+63\n#define DISPID_IHTMLELEMENT2_ONCONTEXTMENU          DISPID_EVPROP_ONCONTEXTMENU\n#define DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT  DISPID_ELEMENT+69\n#define DISPID_IHTMLELEMENT2_APPLYELEMENT           DISPID_ELEMENT+65\n#define DISPID_IHTMLELEMENT2_GETADJACENTTEXT        DISPID_ELEMENT+70\n#define DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT    DISPID_ELEMENT+71\n#define DISPID_IHTMLELEMENT2_CANHAVECHILDREN        DISPID_ELEMENT+72\n#define DISPID_IHTMLELEMENT2_ADDBEHAVIOR            DISPID_ELEMENT+80\n#define DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR         DISPID_ELEMENT+81\n#define DISPID_IHTMLELEMENT2_RUNTIMESTYLE           DISPID_ELEMENT+64\n#define DISPID_IHTMLELEMENT2_BEHAVIORURNS           DISPID_ELEMENT+82\n#define DISPID_IHTMLELEMENT2_TAGURN                 DISPID_ELEMENT+83\n#define DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS      DISPID_EVPROP_ONBEFOREEDITFOCUS\n#define DISPID_IHTMLELEMENT2_READYSTATEVALUE        DISPID_ELEMENT+84\n#define DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME   DISPID_ELEMENT+85\n\n/* IHTMLElement3 */\n#define DISPID_IHTMLELEMENT3_MERGEATTRIBUTES     DISPID_ELEMENT+96\n#define DISPID_IHTMLELEMENT3_ISMULTILINE         DISPID_ELEMENT+97\n#define DISPID_IHTMLELEMENT3_CANHAVEHTML         DISPID_ELEMENT+98\n#define DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE    DISPID_EVPROP_ONLAYOUTCOMPLETE\n#define DISPID_IHTMLELEMENT3_ONPAGE              DISPID_EVPROP_ONPAGE\n#define DISPID_IHTMLELEMENT3_INFLATEBLOCK        DISPID_ELEMENT+100\n#define DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE  DISPID_EVPROP_ONBEFOREDEACTIVATE\n#define DISPID_IHTMLELEMENT3_SETACTIVE           DISPID_ELEMENT+101\n#define DISPID_IHTMLELEMENT3_CONTENTEDITABLE     DISPID_A_EDITABLE\n#define DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE   DISPID_ELEMENT+102\n#define DISPID_IHTMLELEMENT3_HIDEFOCUS           DISPID_A_HIDEFOCUS\n#define DISPID_IHTMLELEMENT3_DISABLED            STDPROPID_XOBJ_DISABLED\n#define DISPID_IHTMLELEMENT3_ISDISABLED          DISPID_ELEMENT+105\n#define DISPID_IHTMLELEMENT3_ONMOVE              DISPID_EVPROP_ONMOVE\n#define DISPID_IHTMLELEMENT3_ONCONTROLSELECT     DISPID_EVPROP_ONCONTROLSELECT\n#define DISPID_IHTMLELEMENT3_FIREEVENT           DISPID_ELEMENT+106\n#define DISPID_IHTMLELEMENT3_ONRESIZESTART       DISPID_EVPROP_ONRESIZESTART\n#define DISPID_IHTMLELEMENT3_ONRESIZEEND         DISPID_EVPROP_ONRESIZEEND\n#define DISPID_IHTMLELEMENT3_ONMOVESTART         DISPID_EVPROP_ONMOVESTART\n#define DISPID_IHTMLELEMENT3_ONMOVEEND           DISPID_EVPROP_ONMOVEEND\n#define DISPID_IHTMLELEMENT3_ONMOUSEENTER        DISPID_EVPROP_ONMOUSEENTER\n#define DISPID_IHTMLELEMENT3_ONMOUSELEAVE        DISPID_EVPROP_ONMOUSELEAVE\n#define DISPID_IHTMLELEMENT3_ONACTIVATE          DISPID_EVPROP_ONACTIVATE\n#define DISPID_IHTMLELEMENT3_ONDEACTIVATE        DISPID_EVPROP_ONDEACTIVATE\n#define DISPID_IHTMLELEMENT3_DRAGDROP            DISPID_ELEMENT+107\n#define DISPID_IHTMLELEMENT3_GLYPHMODE           DISPID_ELEMENT+108\n\n/* IHTMLElement4 */\n#define DISPID_IHTMLELEMENT4_ONMOUSEWHEEL         DISPID_EVPROP_ONMOUSEWHEEL\n#define DISPID_IHTMLELEMENT4_NORMALIZE            DISPID_ELEMENT+112\n#define DISPID_IHTMLELEMENT4_GETATTRIBUTENODE     DISPID_ELEMENT+109\n#define DISPID_IHTMLELEMENT4_SETATTRIBUTENODE     DISPID_ELEMENT+110\n#define DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE  DISPID_ELEMENT+111\n#define DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE     DISPID_EVPROP_ONBEFOREACTIVATE\n#define DISPID_IHTMLELEMENT4_ONFOCUSIN            DISPID_EVPROP_ONFOCUSIN\n#define DISPID_IHTMLELEMENT4_ONFOCUSOUT           DISPID_EVPROP_ONFOCUSOUT\n\n/* IElementSelector */\n#define DISPID_IELEMENTSELECTOR_QUERYSELECTOR     DISPID_ELEMENT+114\n#define DISPID_IELEMENTSELECTOR_QUERYSELECTORALL  DISPID_ELEMENT+115\n\n/* IHTMLElement5 */\n#define DISPID_IHTMLELEMENT5_IE8_GETATTRIBUTENODE     DISPID_IE8_ELEMENT\n#define DISPID_IHTMLELEMENT5_IE8_SETATTRIBUTENODE     DISPID_IE8_ELEMENT+1\n#define DISPID_IHTMLELEMENT5_IE8_REMOVEATTRIBUTENODE  DISPID_IE8_ELEMENT+2\n#define DISPID_IHTMLELEMENT5_HASATTRIBUTE             DISPID_IE8_ELEMENT+3\n#define DISPID_IHTMLELEMENT5_ROLE                     DISPID_IE8_ELEMENT+4\n#define DISPID_IHTMLELEMENT5_ARIABUSY                 DISPID_IE8_ELEMENT+5\n#define DISPID_IHTMLELEMENT5_ARIACHECKED              DISPID_IE8_ELEMENT+6\n#define DISPID_IHTMLELEMENT5_ARIADISABLED             DISPID_IE8_ELEMENT+7\n#define DISPID_IHTMLELEMENT5_ARIAEXPANDED             DISPID_IE8_ELEMENT+8\n#define DISPID_IHTMLELEMENT5_ARIAHASPOPUP             DISPID_IE8_ELEMENT+9\n#define DISPID_IHTMLELEMENT5_ARIAHIDDEN               DISPID_IE8_ELEMENT+10\n#define DISPID_IHTMLELEMENT5_ARIAINVALID              DISPID_IE8_ELEMENT+11\n#define DISPID_IHTMLELEMENT5_ARIAMULTISELECTABLE      DISPID_IE8_ELEMENT+12\n#define DISPID_IHTMLELEMENT5_ARIAPRESSED              DISPID_IE8_ELEMENT+13\n#define DISPID_IHTMLELEMENT5_ARIAREADONLY             DISPID_IE8_ELEMENT+14\n#define DISPID_IHTMLELEMENT5_ARIAREQUIRED             DISPID_IE8_ELEMENT+15\n#define DISPID_IHTMLELEMENT5_ARIASECRET               DISPID_IE8_ELEMENT+16\n#define DISPID_IHTMLELEMENT5_ARIASELECTED             DISPID_IE8_ELEMENT+17\n#define DISPID_IHTMLELEMENT5_IE8_GETATTRIBUTE         DISPID_IE8_ELEMENT+18\n#define DISPID_IHTMLELEMENT5_IE8_SETATTRIBUTE         DISPID_IE8_ELEMENT+19\n#define DISPID_IHTMLELEMENT5_IE8_REMOVEATTRIBUTE      DISPID_IE8_ELEMENT+20\n#define DISPID_IHTMLELEMENT5_IE8_ATTRIBUTES           DISPID_IE8_ELEMENT+21\n#define DISPID_IHTMLELEMENT5_ARIAVALUENOW             DISPID_IE8_ELEMENT+22\n#define DISPID_IHTMLELEMENT5_ARIAPOSINSET             DISPID_IE8_ELEMENT+23\n#define DISPID_IHTMLELEMENT5_ARIASETSIZE              DISPID_IE8_ELEMENT+24\n#define DISPID_IHTMLELEMENT5_ARIALEVEL                DISPID_IE8_ELEMENT+25\n#define DISPID_IHTMLELEMENT5_ARIAVALUEMIN             DISPID_IE8_ELEMENT+26\n#define DISPID_IHTMLELEMENT5_ARIAVALUEMAX             DISPID_IE8_ELEMENT+27\n#define DISPID_IHTMLELEMENT5_ARIACONTROLS             DISPID_IE8_ELEMENT+28\n#define DISPID_IHTMLELEMENT5_ARIADESCRIBEDBY          DISPID_IE8_ELEMENT+29\n#define DISPID_IHTMLELEMENT5_ARIAFLOWTO               DISPID_IE8_ELEMENT+30\n#define DISPID_IHTMLELEMENT5_ARIALABELLEDBY           DISPID_IE8_ELEMENT+31\n#define DISPID_IHTMLELEMENT5_ARIAACTIVEDESCENDANT     DISPID_IE8_ELEMENT+32\n#define DISPID_IHTMLELEMENT5_ARIAOWNS                 DISPID_IE8_ELEMENT+33\n#define DISPID_IHTMLELEMENT5_HASATTRIBUTES            DISPID_IE8_ELEMENT+34\n#define DISPID_IHTMLELEMENT5_ARIALIVE                 DISPID_IE8_ELEMENT+35\n#define DISPID_IHTMLELEMENT5_ARIARELEVANT             DISPID_IE8_ELEMENT+36\n\n/* IHTMLElement6 */\n#define DISPID_IHTMLELEMENT6_GETATTRIBUTENS           DISPID_IE9_ELEMENT+3\n#define DISPID_IHTMLELEMENT6_SETATTRIBUTENS           DISPID_IE9_ELEMENT+4\n#define DISPID_IHTMLELEMENT6_REMOVEATTRIBUTENS        DISPID_IE9_ELEMENT+5\n#define DISPID_IHTMLELEMENT6_GETATTRIBUTENODENS       DISPID_IE9_ELEMENT\n#define DISPID_IHTMLELEMENT6_SETATTRIBUTENODENS       DISPID_IE9_ELEMENT+1\n#define DISPID_IHTMLELEMENT6_HASATTRIBUTENS           DISPID_IE9_ELEMENT+2\n#define DISPID_IHTMLELEMENT6_IE9_GETATTRIBUTE         DISPID_IE9_ELEMENT+10\n#define DISPID_IHTMLELEMENT6_IE9_SETATTRIBUTE         DISPID_IE9_ELEMENT+11\n#define DISPID_IHTMLELEMENT6_IE9_REMOVEATTRIBUTE      DISPID_IE9_ELEMENT+12\n#define DISPID_IHTMLELEMENT6_IE9_GETATTRIBUTENODE     DISPID_IE9_ELEMENT+6\n#define DISPID_IHTMLELEMENT6_IE9_SETATTRIBUTENODE     DISPID_IE9_ELEMENT+7\n#define DISPID_IHTMLELEMENT6_IE9_REMOVEATTRIBUTENODE  DISPID_IE9_ELEMENT+8\n#define DISPID_IHTMLELEMENT6_IE9_HASATTRIBUTE         DISPID_IE9_ELEMENT+9\n#define DISPID_IHTMLELEMENT6_GETELEMENTSBYTAGNAMENS   DISPID_IE9_ELEMENT+13\n#define DISPID_IHTMLELEMENT6_IE9_TAGNAME              DISPID_IE9_ELEMENT+15\n#define DISPID_IHTMLELEMENT6_IE9_NODENAME             DISPID_IE9_ELEMENT+16\n#define DISPID_IHTMLELEMENT6_GETELEMENTSBYCLASSNAME   DISPID_IE9_ELEMENT+17\n#define DISPID_IHTMLELEMENT6_MSMATCHESSELECTOR        DISPID_IE9_ELEMENT+28\n#define DISPID_IHTMLELEMENT6_ONABORT                  DISPID_EVPROP_ONABORT\n#define DISPID_IHTMLELEMENT6_ONCANPLAY                DISPID_EVPROP_CANPLAY\n#define DISPID_IHTMLELEMENT6_ONCANPLAYTHROUGH         DISPID_EVPROP_CANPLAYTHROUGH\n#define DISPID_IHTMLELEMENT6_ONCHANGE                 DISPID_EVPROP_ONCHANGE\n#define DISPID_IHTMLELEMENT6_ONDURATIONCHANGE         DISPID_EVPROP_DURATIONCHANGE\n#define DISPID_IHTMLELEMENT6_ONEMPTIED                DISPID_EVPROP_EMPTIED\n#define DISPID_IHTMLELEMENT6_ONENDED                  DISPID_EVPROP_ENDED\n#define DISPID_IHTMLELEMENT6_ONERROR                  DISPID_EVPROP_ONERROR\n#define DISPID_IHTMLELEMENT6_ONINPUT                  DISPID_EVPROP_INPUT\n#define DISPID_IHTMLELEMENT6_ONLOAD                   DISPID_EVPROP_ONLOAD\n#define DISPID_IHTMLELEMENT6_ONLOADEDDATA             DISPID_EVPROP_LOADEDDATA\n#define DISPID_IHTMLELEMENT6_ONLOADEDMETADATA         DISPID_EVPROP_LOADEDMETADATA\n#define DISPID_IHTMLELEMENT6_ONLOADSTART              DISPID_EVPROP_LOADSTART\n#define DISPID_IHTMLELEMENT6_ONPAUSE                  DISPID_EVPROP_PAUSE\n#define DISPID_IHTMLELEMENT6_ONPLAY                   DISPID_EVPROP_PLAY\n#define DISPID_IHTMLELEMENT6_ONPLAYING                DISPID_EVPROP_PLAYING\n#define DISPID_IHTMLELEMENT6_ONPROGRESS               DISPID_EVPROP_PROGRESS\n#define DISPID_IHTMLELEMENT6_ONRATECHANGE             DISPID_EVPROP_RATECHANGE\n#define DISPID_IHTMLELEMENT6_ONRESET                  DISPID_EVPROP_ONRESET\n#define DISPID_IHTMLELEMENT6_ONSEEKED                 DISPID_EVPROP_SEEKED\n#define DISPID_IHTMLELEMENT6_ONSEEKING                DISPID_EVPROP_SEEKING\n#define DISPID_IHTMLELEMENT6_ONSELECT                 DISPID_EVPROP_ONSELECT\n#define DISPID_IHTMLELEMENT6_ONSTALLED                DISPID_EVPROP_STALLED\n#define DISPID_IHTMLELEMENT6_ONSUBMIT                 DISPID_EVPROP_ONSUBMIT\n#define DISPID_IHTMLELEMENT6_ONSUSPEND                DISPID_EVPROP_SUSPEND\n#define DISPID_IHTMLELEMENT6_ONTIMEUPDATE             DISPID_EVPROP_TIMEUPDATE\n#define DISPID_IHTMLELEMENT6_ONVOLUMECHANGE           DISPID_EVPROP_VOLUMECHANGE\n#define DISPID_IHTMLELEMENT6_ONWAITING                DISPID_EVPROP_WAITING\n#define DISPID_IHTMLELEMENT6_IE9_HASATTRIBUTES        DISPID_IE9_ELEMENT+29\n\n/* IElementTraversal */\n#define DISPID_IELEMENTTRAVERSAL_FIRSTELEMENTCHILD      DISPID_IE9_ELEMENT+22\n#define DISPID_IELEMENTTRAVERSAL_LASTELEMENTCHILD       DISPID_IE9_ELEMENT+23\n#define DISPID_IELEMENTTRAVERSAL_PREVIOUSELEMENTSIBLING DISPID_IE9_ELEMENT+24\n#define DISPID_IELEMENTTRAVERSAL_NEXTELEMENTSIBLING     DISPID_IE9_ELEMENT+25\n#define DISPID_IELEMENTTRAVERSAL_CHILDELEMENTCOUNT      DISPID_IE9_ELEMENT+26\n\n/* IHTMLGenericElement */\n#define DISPID_IHTMLGENERICELEMENT_RECORDSET       DISPID_GENERIC+1\n#define DISPID_IHTMLGENERICELEMENT_NAMEDRECORDSET  DISPID_GENERIC+2\n\n/* IHTMLUniqueName */\n#define DISPID_IHTMLUNIQUENAME_UNIQUENUMBER  DISPID_ELEMENT+54\n#define DISPID_IHTMLUNIQUENAME_UNIQUEID      DISPID_ELEMENT+55\n\n/* IHTMLDatabinding */\n#define DISPID_IHTMLDATABINDING_DATAFLD       DISPID_ELEMENT+21\n#define DISPID_IHTMLDATABINDING_DATASRC       DISPID_ELEMENT+22\n#define DISPID_IHTMLDATABINDING_DATAFORMATAS  DISPID_ELEMENT+23\n\n/* IHTMLDOMConstructor */\n#define DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR   DISPID_HTMLOBJECT+9\n#define DISPID_IHTMLDOMCONSTRUCTOR_LOOKUPGETTER\n#define DISPID_IHTMLDOMCONSTRUCTOR_LOOKUPSETTER\n#define DISPID_IHTMLDOMCONSTRUCTOR_DEFINEGETTER\n#define DISPID_IHTMLDOMCONSTRUCTOR_DEFINESETTER\n\n/* IHTMLCSSStyleDeclaration */\n#define DISPID_IHTMLCSSSTYLEDECLARATION_LENGTH                     DISPID_BASE_STYLE+1\n#define DISPID_IHTMLCSSSTYLEDECLARATION_PARENTRULE                 DISPID_BASE_STYLE+2\n#define DISPID_IHTMLCSSSTYLEDECLARATION_GETPROPERTYVALUE           DISPID_BASE_STYLE+3\n#define DISPID_IHTMLCSSSTYLEDECLARATION_GETPROPERTYPRIORITY        DISPID_BASE_STYLE+4\n#define DISPID_IHTMLCSSSTYLEDECLARATION_REMOVEPROPERTY             DISPID_BASE_STYLE+5\n#define DISPID_IHTMLCSSSTYLEDECLARATION_SETPROPERTY                DISPID_BASE_STYLE+6\n#define DISPID_IHTMLCSSSTYLEDECLARATION_ITEM                       DISPID_VALUE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_FONTFAMILY                 DISPID_A_FONTFACE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_FONTSTYLE                  DISPID_A_FONTSTYLE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_FONTVARIANT                DISPID_A_FONTVARIANT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_FONTWEIGHT                 DISPID_A_FONTWEIGHT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_FONTSIZE                   DISPID_A_FONTSIZE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_FONT                       DISPID_A_FONT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_COLOR                      DISPID_A_COLOR\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUND                 DISPID_A_BACKGROUND\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDCOLOR            DISPID_BACKCOLOR\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDIMAGE            DISPID_A_BACKGROUNDIMAGE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDREPEAT           DISPID_A_BACKGROUNDREPEAT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDATTACHMENT       DISPID_A_BACKGROUNDATTACHMENT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDPOSITION         DISPID_A_BACKGROUNDPOSITION\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDPOSITIONX        DISPID_A_BACKGROUNDPOSX\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDPOSITIONY        DISPID_A_BACKGROUNDPOSY\n#define DISPID_IHTMLCSSSTYLEDECLARATION_WORDSPACING                DISPID_A_WORDSPACING\n#define DISPID_IHTMLCSSSTYLEDECLARATION_LETTERSPACING              DISPID_A_LETTERSPACING\n#define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTDECORATION             DISPID_A_TEXTDECORATION\n#define DISPID_IHTMLCSSSTYLEDECLARATION_VERTICALALIGN              DISPID_A_VERTICALALIGN\n#define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTTRANSFORM              DISPID_A_TEXTTRANSFORM\n#define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTALIGN                  STDPROPID_XOBJ_BLOCKALIGN\n#define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTINDENT                 DISPID_A_TEXTINDENT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_LINEHEIGHT                 DISPID_A_LINEHEIGHT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_MARGINTOP                  DISPID_A_MARGINTOP\n#define DISPID_IHTMLCSSSTYLEDECLARATION_MARGINRIGHT                DISPID_A_MARGINRIGHT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_MARGINBOTTOM               DISPID_A_MARGINBOTTOM\n#define DISPID_IHTMLCSSSTYLEDECLARATION_MARGINLEFT                 DISPID_A_MARGINLEFT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_MARGIN                     DISPID_A_MARGIN\n#define DISPID_IHTMLCSSSTYLEDECLARATION_PADDINGTOP                 DISPID_A_PADDINGTOP\n#define DISPID_IHTMLCSSSTYLEDECLARATION_PADDINGRIGHT               DISPID_A_PADDINGRIGHT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_PADDINGBOTTOM              DISPID_A_PADDINGBOTTOM\n#define DISPID_IHTMLCSSSTYLEDECLARATION_PADDINGLEFT                DISPID_A_PADDINGLEFT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_PADDING                    DISPID_A_PADDING\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDER                     DISPID_A_BORDER\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOP                  DISPID_A_BORDERTOP\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRIGHT                DISPID_A_BORDERRIGHT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOM               DISPID_A_BORDERBOTTOM\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERLEFT                 DISPID_A_BORDERLEFT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERCOLOR                DISPID_A_BORDERCOLOR\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPCOLOR             DISPID_A_BORDERTOPCOLOR\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRIGHTCOLOR           DISPID_A_BORDERRIGHTCOLOR\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMCOLOR          DISPID_A_BORDERBOTTOMCOLOR\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERLEFTCOLOR            DISPID_A_BORDERLEFTCOLOR\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERWIDTH                DISPID_A_BORDERWIDTH\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPWIDTH             DISPID_A_BORDERTOPWIDTH\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRIGHTWIDTH           DISPID_A_BORDERRIGHTWIDTH\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMWIDTH          DISPID_A_BORDERBOTTOMWIDTH\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERLEFTWIDTH            DISPID_A_BORDERLEFTWIDTH\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERSTYLE                DISPID_A_BORDERSTYLE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPSTYLE             DISPID_A_BORDERTOPSTYLE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRIGHTSTYLE           DISPID_A_BORDERRIGHTSTYLE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMSTYLE          DISPID_A_BORDERBOTTOMSTYLE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERLEFTSTYLE            DISPID_A_BORDERLEFTSTYLE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_WIDTH                      STDPROPID_XOBJ_WIDTH\n#define DISPID_IHTMLCSSSTYLEDECLARATION_HEIGHT                     STDPROPID_XOBJ_HEIGHT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_STYLEFLOAT                 DISPID_A_FLOAT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_CLEAR                      DISPID_A_CLEAR\n#define DISPID_IHTMLCSSSTYLEDECLARATION_DISPLAY                    DISPID_A_DISPLAY\n#define DISPID_IHTMLCSSSTYLEDECLARATION_VISIBILITY                 DISPID_A_VISIBILITY\n#define DISPID_IHTMLCSSSTYLEDECLARATION_LISTSTYLETYPE              DISPID_A_LISTSTYLETYPE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_LISTSTYLEPOSITION          DISPID_A_LISTSTYLEPOSITION\n#define DISPID_IHTMLCSSSTYLEDECLARATION_LISTSTYLEIMAGE             DISPID_A_LISTSTYLEIMAGE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_LISTSTYLE                  DISPID_A_LISTSTYLE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_WHITESPACE                 DISPID_A_WHITESPACE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_TOP                        STDPROPID_XOBJ_TOP\n#define DISPID_IHTMLCSSSTYLEDECLARATION_LEFT                       STDPROPID_XOBJ_LEFT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_ZINDEX                     DISPID_A_ZINDEX\n#define DISPID_IHTMLCSSSTYLEDECLARATION_OVERFLOW                   DISPID_A_OVERFLOW\n#define DISPID_IHTMLCSSSTYLEDECLARATION_PAGEBREAKBEFORE            DISPID_A_PAGEBREAKBEFORE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_PAGEBREAKAFTER             DISPID_A_PAGEBREAKAFTER\n#define DISPID_IHTMLCSSSTYLEDECLARATION_CSSTEXT                    DISPID_A_STYLETEXT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_CURSOR                     DISPID_A_CURSOR\n#define DISPID_IHTMLCSSSTYLEDECLARATION_CLIP                       DISPID_A_CLIP\n#define DISPID_IHTMLCSSSTYLEDECLARATION_FILTER                     DISPID_A_FILTER\n#define DISPID_IHTMLCSSSTYLEDECLARATION_TABLELAYOUT                DISPID_A_TABLELAYOUT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERCOLLAPSE             DISPID_A_BORDERCOLLAPSE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_DIRECTION                  DISPID_A_DIRECTION\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BEHAVIOR                   DISPID_A_BEHAVIOR\n#define DISPID_IHTMLCSSSTYLEDECLARATION_POSITION                   DISPID_A_POSITION\n#define DISPID_IHTMLCSSSTYLEDECLARATION_UNICODEBIDI                DISPID_A_UNICODEBIDI\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BOTTOM                     STDPROPID_XOBJ_BOTTOM\n#define DISPID_IHTMLCSSSTYLEDECLARATION_RIGHT                      STDPROPID_XOBJ_RIGHT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_IMEMODE                    DISPID_A_IMEMODE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_RUBYALIGN                  DISPID_A_RUBYALIGN\n#define DISPID_IHTMLCSSSTYLEDECLARATION_RUBYPOSITION               DISPID_A_RUBYPOSITION\n#define DISPID_IHTMLCSSSTYLEDECLARATION_RUBYOVERHANG               DISPID_A_RUBYOVERHANG\n#define DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRIDCHAR             DISPID_A_LAYOUTGRIDCHAR\n#define DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRIDLINE             DISPID_A_LAYOUTGRIDLINE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRIDMODE             DISPID_A_LAYOUTGRIDMODE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRIDTYPE             DISPID_A_LAYOUTGRIDTYPE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRID                 DISPID_A_LAYOUTGRID\n#define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTAUTOSPACE              DISPID_A_TEXTAUTOSPACE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_WORDBREAK                  DISPID_A_WORDBREAK\n#define DISPID_IHTMLCSSSTYLEDECLARATION_LINEBREAK                  DISPID_A_LINEBREAK\n#define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTJUSTIFY                DISPID_A_TEXTJUSTIFY\n#define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTJUSTIFYTRIM            DISPID_A_TEXTJUSTIFYTRIM\n#define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTKASHIDA                DISPID_A_TEXTKASHIDA\n#define DISPID_IHTMLCSSSTYLEDECLARATION_OVERFLOWX                  DISPID_A_OVERFLOWX\n#define DISPID_IHTMLCSSSTYLEDECLARATION_OVERFLOWY                  DISPID_A_OVERFLOWY\n#define DISPID_IHTMLCSSSTYLEDECLARATION_ACCELERATOR                DISPID_A_ACCELERATOR\n#define DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTFLOW                 DISPID_A_LAYOUTFLOW\n#define DISPID_IHTMLCSSSTYLEDECLARATION_ZOOM                       DISPID_A_ZOOM\n#define DISPID_IHTMLCSSSTYLEDECLARATION_WORDWRAP                   DISPID_A_WORDWRAP\n#define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTUNDERLINEPOSITION      DISPID_A_TEXTUNDERLINEPOSITION\n#define DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARBASECOLOR         DISPID_A_SCROLLBARBASECOLOR\n#define DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARFACECOLOR         DISPID_A_SCROLLBARFACECOLOR\n#define DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBAR3DLIGHTCOLOR      DISPID_A_SCROLLBAR3DLIGHTCOLOR\n#define DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARSHADOWCOLOR       DISPID_A_SCROLLBARSHADOWCOLOR\n#define DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARHIGHLIGHTCOLOR    DISPID_A_SCROLLBARHIGHLIGHTCOLOR\n#define DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARDARKSHADOWCOLOR   DISPID_A_SCROLLBARDARKSHADOWCOLOR\n#define DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARARROWCOLOR        DISPID_A_SCROLLBARARROWCOLOR\n#define DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARTRACKCOLOR        DISPID_A_SCROLLBARTRACKCOLOR\n#define DISPID_IHTMLCSSSTYLEDECLARATION_WRITINGMODE                DISPID_A_WRITINGMODE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTALIGNLAST              DISPID_A_TEXTALIGNLAST\n#define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTKASHIDASPACE           DISPID_A_TEXTKASHIDASPACE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTOVERFLOW               DISPID_A_TEXTOVERFLOW\n#define DISPID_IHTMLCSSSTYLEDECLARATION_MINHEIGHT                  DISPID_A_MINHEIGHT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_MSINTERPOLATIONMODE        DISPID_A_INTERPOLATION\n#define DISPID_IHTMLCSSSTYLEDECLARATION_MAXHEIGHT                  DISPID_A_MAXHEIGHT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_MINWIDTH                   DISPID_A_MINWIDTH\n#define DISPID_IHTMLCSSSTYLEDECLARATION_MAXWIDTH                   DISPID_A_MAXWIDTH\n#define DISPID_IHTMLCSSSTYLEDECLARATION_CONTENT                    DISPID_A_CONTENT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_CAPTIONSIDE                DISPID_A_CAPTIONSIDE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_COUNTERINCREMENT           DISPID_A_COUNTERINCREMENT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_COUNTERRESET               DISPID_A_COUNTERRESET\n#define DISPID_IHTMLCSSSTYLEDECLARATION_OUTLINE                    DISPID_A_OUTLINE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_OUTLINEWIDTH               DISPID_A_OUTLINEWIDTH\n#define DISPID_IHTMLCSSSTYLEDECLARATION_OUTLINESTYLE               DISPID_A_OUTLINESTYLE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_OUTLINECOLOR               DISPID_A_OUTLINECOLOR\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BOXSIZING                  DISPID_A_BOXSIZING\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERSPACING              DISPID_A_BORDERSPACING\n#define DISPID_IHTMLCSSSTYLEDECLARATION_ORPHANS                    DISPID_A_ORPHANS\n#define DISPID_IHTMLCSSSTYLEDECLARATION_WIDOWS                     DISPID_A_WIDOWS\n#define DISPID_IHTMLCSSSTYLEDECLARATION_PAGEBREAKINSIDE            DISPID_A_PAGEBREAKINSIDE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_EMPTYCELLS                 DISPID_A_EMPTYCELLS\n#define DISPID_IHTMLCSSSTYLEDECLARATION_MSBLOCKPROGRESSION         DISPID_A_MS_BLOCKPROGRESSION\n#define DISPID_IHTMLCSSSTYLEDECLARATION_QUOTES                     DISPID_A_QUOTES\n#define DISPID_IHTMLCSSSTYLEDECLARATION_ALIGNMENTBASELINE          DISPID_A_ALIGNMENTBASELINE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BASELINESHIFT              DISPID_A_BASELINESHIFT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_DOMINANTBASELINE           DISPID_A_DOMINANTBASELINE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_FONTSIZEADJUST             DISPID_A_FONTSIZEADJUST\n#define DISPID_IHTMLCSSSTYLEDECLARATION_FONTSTRETCH                DISPID_A_FONTSTRETCH\n#define DISPID_IHTMLCSSSTYLEDECLARATION_OPACITY                    DISPID_A_OPACITY\n#define DISPID_IHTMLCSSSTYLEDECLARATION_CLIPPATH                   DISPID_A_CLIPPATH\n#define DISPID_IHTMLCSSSTYLEDECLARATION_CLIPRULE                   DISPID_A_CLIPRULE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_FILL                       DISPID_A_FILL\n#define DISPID_IHTMLCSSSTYLEDECLARATION_FILLOPACITY                DISPID_A_FILLOPACITY\n#define DISPID_IHTMLCSSSTYLEDECLARATION_FILLRULE                   DISPID_A_FILLRULE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_KERNING                    DISPID_A_KERNING\n#define DISPID_IHTMLCSSSTYLEDECLARATION_MARKER                     DISPID_A_MARKER\n#define DISPID_IHTMLCSSSTYLEDECLARATION_MARKEREND                  DISPID_A_MARKEREND\n#define DISPID_IHTMLCSSSTYLEDECLARATION_MARKERMID                  DISPID_A_MARKERMID\n#define DISPID_IHTMLCSSSTYLEDECLARATION_MARKERSTART                DISPID_A_MARKERSTART\n#define DISPID_IHTMLCSSSTYLEDECLARATION_MASK                       DISPID_A_MASK\n#define DISPID_IHTMLCSSSTYLEDECLARATION_POINTEREVENTS              DISPID_A_POINTEREVENTS\n#define DISPID_IHTMLCSSSTYLEDECLARATION_STOPCOLOR                  DISPID_A_STOPCOLOR\n#define DISPID_IHTMLCSSSTYLEDECLARATION_STOPOPACITY                DISPID_A_STOPOPACITY\n#define DISPID_IHTMLCSSSTYLEDECLARATION_STROKE                     DISPID_A_STROKE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_STROKEDASHARRAY            DISPID_A_STROKEDASHARRAY\n#define DISPID_IHTMLCSSSTYLEDECLARATION_STROKEDASHOFFSET           DISPID_A_STROKEDASHOFFSET\n#define DISPID_IHTMLCSSSTYLEDECLARATION_STROKELINECAP              DISPID_A_STROKELINECAP\n#define DISPID_IHTMLCSSSTYLEDECLARATION_STROKELINEJOIN             DISPID_A_STROKELINEJOIN\n#define DISPID_IHTMLCSSSTYLEDECLARATION_STROKEMITERLIMIT           DISPID_A_STROKEMITERLIMIT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_STROKEOPACITY              DISPID_A_STROKEOPACITY\n#define DISPID_IHTMLCSSSTYLEDECLARATION_STROKEWIDTH                DISPID_A_STROKEWIDTH\n#define DISPID_IHTMLCSSSTYLEDECLARATION_TEXTANCHOR                 DISPID_A_TEXTANCHOR\n#define DISPID_IHTMLCSSSTYLEDECLARATION_GLYPHORIENTATIONHORIZONTAL DISPID_A_GLYPHORIENTATIONHORIZONTAL\n#define DISPID_IHTMLCSSSTYLEDECLARATION_GLYPHORIENTATIONVERTICAL   DISPID_A_GLYPHORIENTATIONVERTICAL\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRADIUS               DISPID_A_BORDERRADIUS\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPLEFTRADIUS        DISPID_A_BORDERTOPLEFTRADIUS\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPRIGHTRADIUS       DISPID_A_BORDERTOPRIGHTRADIUS\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMRIGHTRADIUS    DISPID_A_BORDERBOTTOMRIGHTRADIUS\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMLEFTRADIUS     DISPID_A_BORDERBOTTOMLEFTRADIUS\n#define DISPID_IHTMLCSSSTYLEDECLARATION_CLIPTOP                    DISPID_A_CLIPRECTTOP\n#define DISPID_IHTMLCSSSTYLEDECLARATION_CLIPRIGHT                  DISPID_A_CLIPRECTRIGHT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_CLIPBOTTOM                 DISPID_A_CLIPRECTBOTTOM\n#define DISPID_IHTMLCSSSTYLEDECLARATION_CLIPLEFT                   DISPID_A_CLIPRECTLEFT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_CSSFLOAT                   DISPID_A_CSSFLOAT\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDCLIP             DISPID_A_IE9_BACKGROUNDCLIP\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDORIGIN           DISPID_A_IE9_BACKGROUNDORIGIN\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDSIZE             DISPID_A_IE9_BACKGROUNDSIZE\n#define DISPID_IHTMLCSSSTYLEDECLARATION_BOXSHADOW                  DISPID_A_IE9_BOXSHADOW\n#define DISPID_IHTMLCSSSTYLEDECLARATION_MSTRANSFORM                DISPID_A_MS_TRANSFORM\n#define DISPID_IHTMLCSSSTYLEDECLARATION_MSTRANSFORMORIGIN          DISPID_A_MS_TRANSFORMORIGIN\n\n/* IHTMLCSSStyleDeclaration2 */\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLCHAINING          DISPID_A_MS_SCROLLCHAINING\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMING          DISPID_A_MS_CONTENTZOOMING\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMSNAPTYPE     DISPID_A_MS_CONTENTZOOMSNAPTYPE\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLRAILS             DISPID_A_MS_SCROLLRAILS\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMCHAINING     DISPID_A_MS_CONTENTZOOMCHAINING\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPTYPE          DISPID_A_MS_SCROLLSNAPTYPE\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMLIMIT        DISPID_A_MS_CONTENTZOOMLIMIT\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMSNAP         DISPID_A_MS_CONTENTZOOMSNAP\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMSNAPPOINTS   DISPID_A_MS_CONTENTZOOMSNAPPOINTS\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMLIMITMIN     DISPID_A_MS_CONTENTZOOMLIMITMIN\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMLIMITMAX     DISPID_A_MS_CONTENTZOOMLIMITMAX\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPX             DISPID_A_MS_SCROLLSNAPX\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPY             DISPID_A_MS_SCROLLSNAPY\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPPOINTSX       DISPID_A_MS_SCROLLSNAPPOINTSX\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPPOINTSY       DISPID_A_MS_SCROLLSNAPPOINTSY\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDCOLUMN              DISPID_A_MS_GRIDCOLUMN\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDCOLUMNALIGN         DISPID_A_MS_GRIDCOLUMNALIGN\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDCOLUMNS             DISPID_A_MS_GRIDCOLUMNS\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDCOLUMNSPAN          DISPID_A_MS_GRIDCOLUMNSPAN\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDROW                 DISPID_A_MS_GRIDROW\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDROWALIGN            DISPID_A_MS_GRIDROWALIGN\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDROWS                DISPID_A_MS_GRIDROWS\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDROWSPAN             DISPID_A_MS_GRIDROWSPAN\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSWRAPTHROUGH             DISPID_A_MS_WRAPTHROUGH\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSWRAPMARGIN              DISPID_A_MS_WRAPMARGIN\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSWRAPFLOW                DISPID_A_MS_WRAPFLOW\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONNAME           DISPID_A_MS_ANIMATIONNAME\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONDURATION       DISPID_A_MS_ANIMATIONDURATION\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONTIMINGFUNCTION DISPID_A_MS_ANIMATIONTIMINGFUNCTION\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONDELAY          DISPID_A_MS_ANIMATIONDELAY\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONDIRECTION      DISPID_A_MS_ANIMATIONDIRECTION\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONPLAYSTATE      DISPID_A_MS_ANIMATIONPLAYSTATE\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONITERATIONCOUNT DISPID_A_MS_ANIMATIONITERATIONCOUNT\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATION               DISPID_A_MS_ANIMATION\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONFILLMODE       DISPID_A_MS_ANIMATIONFILLMODE\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_COLORINTERPOLATIONFILTERS DISPID_A_COLORINTERPOLATIONFILTERS\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNCOUNT               DISPID_A_COLUMNCOUNT\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNWIDTH               DISPID_A_COLUMNWIDTH\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNGAP                 DISPID_A_COLUMNGAP\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNFILL                DISPID_A_COLUMNFILL\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNSPAN                DISPID_A_COLUMNSPAN\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNS                   DISPID_A_COLUMNS\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNRULE                DISPID_A_COLUMNRULE\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNRULECOLOR           DISPID_A_COLUMNRULECOLOR\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNRULESTYLE           DISPID_A_COLUMNRULESTYLE\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNRULEWIDTH           DISPID_A_COLUMNRULEWIDTH\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_BREAKBEFORE               DISPID_A_BREAKBEFORE\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_BREAKAFTER                DISPID_A_BREAKAFTER\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_BREAKINSIDE               DISPID_A_BREAKINSIDE\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_FLOODCOLOR                DISPID_A_FLOODCOLOR\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_FLOODOPACITY              DISPID_A_FLOODOPACITY\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_LIGHTINGCOLOR             DISPID_A_LIGHTINGCOLOR\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMITXMIN         DISPID_A_MS_SCROLLLIMITXMIN\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMITYMIN         DISPID_A_MS_SCROLLLIMITYMIN\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMITXMAX         DISPID_A_MS_SCROLLLIMITXMAX\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMITYMAX         DISPID_A_MS_SCROLLLIMITYMAX\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMIT             DISPID_A_MS_SCROLLLIMIT\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_TEXTSHADOW                DISPID_A_TEXTSHADOW\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLOWFROM                DISPID_A_MS_FLOWFROM\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLOWINTO                DISPID_A_MS_FLOWINTO\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSHYPHENS                 DISPID_A_MS_HYPHENS\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSHYPHENATELIMITZONE      DISPID_A_MS_HYPHENATE_LIMIT_ZONE\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSHYPHENATELIMITCHARS     DISPID_A_MS_HYPHENATE_LIMIT_CHARS\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSHYPHENATELIMITLINES     DISPID_A_MS_HYPHENATE_LIMIT_LINES\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSHIGHCONTRASTADJUST      DISPID_A_MS_HIGHCONTRASTADJUST\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_ENABLEBACKGROUND          DISPID_A_ENABLEBACKGROUND\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFONTFEATURESETTINGS     DISPID_A_MS_FONTFEATURESETTINGS\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSUSERSELECT              DISPID_A_MS_USERSELECT\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSOVERFLOWSTYLE           DISPID_A_MS_OVERFLOWSTYLE\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSFORMSTYLE          DISPID_A_MS_TRANSFORMSTYLE\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSBACKFACEVISIBILITY      DISPID_A_MS_BACKFACEVISIBILITY\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSPERSPECTIVE             DISPID_A_MS_PERSPECTIVE\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSPERSPECTIVEORIGIN       DISPID_A_MS_PERSPECTIVEORIGIN\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITIONPROPERTY      DISPID_A_MS_TRANSITIONPROPERTY\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITIONDURATION      DISPID_A_MS_TRANSITIONDURATION\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITIONTIMINGFUNCTION DISPID_A_MS_TRANSITIONTIMINGFUNCTION\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITIONDELAY         DISPID_A_MS_TRANSITIONDELAY\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITION              DISPID_A_MS_TRANSITION\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSTOUCHACTION             DISPID_A_MS_TOUCHACTION\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLTRANSLATION       DISPID_A_MS_SCROLLTRANSLATION\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEX                    DISPID_A_MS_FLEX\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXPOSITIVE            DISPID_A_MS_FLEXPOSITIVE\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXNEGATIVE            DISPID_A_MS_FLEXNEGATIVE\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXPREFERREDSIZE       DISPID_A_MS_FLEXPREFERREDSIZE\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXFLOW                DISPID_A_MS_FLEXFLOW\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXDIRECTION           DISPID_A_MS_FLEXDIRECTION\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXWRAP                DISPID_A_MS_FLEXWRAP\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXALIGN               DISPID_A_MS_FLEXALIGN\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXITEMALIGN           DISPID_A_MS_FLEXITEMALIGN\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXPACK                DISPID_A_MS_FLEXPACK\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXLINEPACK            DISPID_A_MS_FLEXLINEPACK\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXORDER               DISPID_A_MS_FLEXORDER\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_MSTOUCHSELECT             DISPID_A_MS_TOUCHSELECT\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSFORM                 DISPID_A_TRANSFORM\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSFORMORIGIN           DISPID_A_TRANSFORMORIGIN\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSFORMSTYLE            DISPID_A_TRANSFORMSTYLE\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_BACKFACEVISIBILITY        DISPID_A_BACKFACEVISIBILITY\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_PERSPECTIVE               DISPID_A_PERSPECTIVE\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_PERSPECTIVEORIGIN         DISPID_A_PERSPECTIVEORIGIN\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITIONPROPERTY        DISPID_A_TRANSITIONPROPERTY\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITIONDURATION        DISPID_A_TRANSITIONDURATION\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITIONTIMINGFUNCTION  DISPID_A_TRANSITIONTIMINGFUNCTION\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITIONDELAY           DISPID_A_TRANSITIONDELAY\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITION                DISPID_A_TRANSITION\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_FONTFEATURESETTINGS       DISPID_A_FONTFEATURESETTINGS\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONNAME             DISPID_A_ANIMATIONNAME\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONDURATION         DISPID_A_ANIMATIONDURATION\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONTIMINGFUNCTION   DISPID_A_ANIMATIONTIMINGFUNCTION\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONDELAY            DISPID_A_ANIMATIONDELAY\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONDIRECTION        DISPID_A_ANIMATIONDIRECTION\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONPLAYSTATE        DISPID_A_ANIMATIONPLAYSTATE\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONITERATIONCOUNT   DISPID_A_ANIMATIONITERATIONCOUNT\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATION                 DISPID_A_ANIMATION\n#define DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONFILLMODE         DISPID_A_ANIMATIONFILLMODE\n\n/* IHTMLStyle */\n#define DISPID_IHTMLSTYLE_PIXELTOP                    DISPID_STYLE\n#define DISPID_IHTMLSTYLE_PIXELLEFT                   (DISPID_STYLE+1)\n#define DISPID_IHTMLSTYLE_PIXELWIDTH                  (DISPID_STYLE+2)\n#define DISPID_IHTMLSTYLE_PIXELHEIGHT                 (DISPID_STYLE+3)\n#define DISPID_IHTMLSTYLE_POSTOP                      (DISPID_STYLE+4)\n#define DISPID_IHTMLSTYLE_POSLEFT                     (DISPID_STYLE+5)\n#define DISPID_IHTMLSTYLE_POSWIDTH                    (DISPID_STYLE+6)\n#define DISPID_IHTMLSTYLE_POSHEIGHT                   (DISPID_STYLE+7)\n#define DISPID_IHTMLSTYLE_TOSTRING                    (DISPID_STYLE+8)\n#define DISPID_IHTMLSTYLE_SETATTRIBUTE                (DISPID_HTMLOBJECT+1)\n#define DISPID_IHTMLSTYLE_GETATTRIBUTE                (DISPID_HTMLOBJECT+2)\n#define DISPID_IHTMLSTYLE_REMOVEATTRIBUTE             (DISPID_HTMLOBJECT+3)\n#define DISPID_IHTMLSTYLE_FONTFAMILY                  DISPID_A_FONTFACE\n#define DISPID_IHTMLSTYLE_FONTSTYLE                   DISPID_A_FONTSTYLE\n#define DISPID_IHTMLSTYLE_FONTVARIANT                 DISPID_A_FONTVARIANT\n#define DISPID_IHTMLSTYLE_FONTWEIGHT                  DISPID_A_FONTWEIGHT\n#define DISPID_IHTMLSTYLE_FONTSIZE                    DISPID_A_FONTSIZE\n#define DISPID_IHTMLSTYLE_FONT                        DISPID_A_FONT\n#define DISPID_IHTMLSTYLE_COLOR                       DISPID_A_COLOR\n#define DISPID_IHTMLSTYLE_BACKGROUND                  DISPID_A_BACKGROUND\n#define DISPID_IHTMLSTYLE_BACKGROUNDIMAGE             DISPID_A_BACKGROUNDIMAGE\n#define DISPID_IHTMLSTYLE_BACKGROUNDREPEAT            DISPID_A_BACKGROUNDREPEAT\n#define DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT        DISPID_A_BACKGROUNDATTACHMENT\n#define DISPID_IHTMLSTYLE_BACKGROUNDPOSITION          DISPID_A_BACKGROUNDPOSITION\n#define DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX         DISPID_A_BACKGROUNDPOSX\n#define DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY         DISPID_A_BACKGROUNDPOSY\n#define DISPID_IHTMLSTYLE_WORDSPACING                 DISPID_A_WORDSPACING\n#define DISPID_IHTMLSTYLE_LETTERSPACING               DISPID_A_LETTERSPACING\n#define DISPID_IHTMLSTYLE_TEXTDECORATION              DISPID_A_TEXTDECORATION\n#define DISPID_IHTMLSTYLE_TEXTDECORATIONNONE          DISPID_A_TEXTDECORATIONNONE\n#define DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE     DISPID_A_TEXTDECORATIONUNDERLINE\n#define DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE      DISPID_A_TEXTDECORATIONOVERLINE\n#define DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH   DISPID_A_TEXTDECORATIONLINETHROUGH\n#define DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK         DISPID_A_TEXTDECORATIONBLINK\n#define DISPID_IHTMLSTYLE_VERTICALALIGN               DISPID_A_VERTICALALIGN\n#define DISPID_IHTMLSTYLE_TEXTTRANSFORM               DISPID_A_TEXTTRANSFORM\n#define DISPID_IHTMLSTYLE_TEXTINDENT                  DISPID_A_TEXTINDENT\n#define DISPID_IHTMLSTYLE_LINEHEIGHT                  DISPID_A_LINEHEIGHT\n#define DISPID_IHTMLSTYLE_MARGINTOP                   DISPID_A_MARGINTOP\n#define DISPID_IHTMLSTYLE_MARGINRIGHT                 DISPID_A_MARGINRIGHT\n#define DISPID_IHTMLSTYLE_MARGINBOTTOM                DISPID_A_MARGINBOTTOM\n#define DISPID_IHTMLSTYLE_MARGINLEFT                  DISPID_A_MARGINLEFT\n#define DISPID_IHTMLSTYLE_MARGIN                      DISPID_A_MARGIN\n#define DISPID_IHTMLSTYLE_PADDINGTOP                  DISPID_A_PADDINGTOP\n#define DISPID_IHTMLSTYLE_PADDINGRIGHT                DISPID_A_PADDINGRIGHT\n#define DISPID_IHTMLSTYLE_PADDINGBOTTOM               DISPID_A_PADDINGBOTTOM\n#define DISPID_IHTMLSTYLE_PADDINGLEFT                 DISPID_A_PADDINGLEFT\n#define DISPID_IHTMLSTYLE_PADDING                     DISPID_A_PADDING\n#define DISPID_IHTMLSTYLE_BORDER                      DISPID_A_BORDER\n#define DISPID_IHTMLSTYLE_BORDERTOP                   DISPID_A_BORDERTOP\n#define DISPID_IHTMLSTYLE_BORDERRIGHT                 DISPID_A_BORDERRIGHT\n#define DISPID_IHTMLSTYLE_BORDERBOTTOM                DISPID_A_BORDERBOTTOM\n#define DISPID_IHTMLSTYLE_BORDERLEFT                  DISPID_A_BORDERLEFT\n#define DISPID_IHTMLSTYLE_BORDERCOLOR                 DISPID_A_BORDERCOLOR\n#define DISPID_IHTMLSTYLE_BORDERTOPCOLOR              DISPID_A_BORDERTOPCOLOR\n#define DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR            DISPID_A_BORDERRIGHTCOLOR\n#define DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR           DISPID_A_BORDERBOTTOMCOLOR\n#define DISPID_IHTMLSTYLE_BORDERLEFTCOLOR             DISPID_A_BORDERLEFTCOLOR\n#define DISPID_IHTMLSTYLE_BORDERWIDTH                 DISPID_A_BORDERWIDTH\n#define DISPID_IHTMLSTYLE_BORDERTOPWIDTH              DISPID_A_BORDERTOPWIDTH\n#define DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH            DISPID_A_BORDERRIGHTWIDTH\n#define DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH           DISPID_A_BORDERBOTTOMWIDTH\n#define DISPID_IHTMLSTYLE_BORDERLEFTWIDTH             DISPID_A_BORDERLEFTWIDTH\n#define DISPID_IHTMLSTYLE_BORDERSTYLE                 DISPID_A_BORDERSTYLE\n#define DISPID_IHTMLSTYLE_BORDERTOPSTYLE              DISPID_A_BORDERTOPSTYLE\n#define DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE            DISPID_A_BORDERRIGHTSTYLE\n#define DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE           DISPID_A_BORDERBOTTOMSTYLE\n#define DISPID_IHTMLSTYLE_BORDERLEFTSTYLE             DISPID_A_BORDERLEFTSTYLE\n#define DISPID_IHTMLSTYLE_STYLEFLOAT                  DISPID_A_FLOAT\n#define DISPID_IHTMLSTYLE_CLEAR                       DISPID_A_CLEAR\n#define DISPID_IHTMLSTYLE_DISPLAY                     DISPID_A_DISPLAY\n#define DISPID_IHTMLSTYLE_VISIBILITY                  DISPID_A_VISIBILITY\n#define DISPID_IHTMLSTYLE_LISTSTYLETYPE               DISPID_A_LISTSTYLETYPE\n#define DISPID_IHTMLSTYLE_LISTSTYLEPOSITION           DISPID_A_LISTSTYLEPOSITION\n#define DISPID_IHTMLSTYLE_LISTSTYLEIMAGE              DISPID_A_LISTSTYLEIMAGE\n#define DISPID_IHTMLSTYLE_LISTSTYLE                   DISPID_A_LISTSTYLE\n#define DISPID_IHTMLSTYLE_WHITESPACE                  DISPID_A_WHITESPACE\n#define DISPID_IHTMLSTYLE_POSITION                    DISPID_A_POSITION\n#define DISPID_IHTMLSTYLE_ZINDEX                      DISPID_A_ZINDEX\n#define DISPID_IHTMLSTYLE_OVERFLOW                    DISPID_A_OVERFLOW\n#define DISPID_IHTMLSTYLE_PAGEBREAKBEFORE             DISPID_A_PAGEBREAKBEFORE\n#define DISPID_IHTMLSTYLE_PAGEBREAKAFTER              DISPID_A_PAGEBREAKAFTER\n#define DISPID_IHTMLSTYLE_CSSTEXT                     DISPID_A_STYLETEXT\n#define DISPID_IHTMLSTYLE_CURSOR                      DISPID_A_CURSOR\n#define DISPID_IHTMLSTYLE_CLIP                        DISPID_A_CLIP\n#define DISPID_IHTMLSTYLE_FILTER                      DISPID_A_FILTER\n#define DISPID_IHTMLSTYLE_WIDTH                       STDPROPID_XOBJ_WIDTH\n#define DISPID_IHTMLSTYLE_HEIGHT                      STDPROPID_XOBJ_HEIGHT\n#define DISPID_IHTMLSTYLE_TOP                         STDPROPID_XOBJ_TOP\n#define DISPID_IHTMLSTYLE_LEFT                        STDPROPID_XOBJ_LEFT\n#define DISPID_IHTMLSTYLE_TEXTALIGN                   STDPROPID_XOBJ_BLOCKALIGN\n#define DISPID_IHTMLSTYLE_BACKGROUNDCOLOR             DISPID_BACKCOLOR\n\n/* IHTMLStyle2 */\n#define DISPID_IHTMLSTYLE2_TABLELAYOUT       DISPID_A_TABLELAYOUT\n#define DISPID_IHTMLSTYLE2_BORDERCOLLAPSE    DISPID_A_BORDERCOLLAPSE\n#define DISPID_IHTMLSTYLE2_DIRECTION         DISPID_A_DIRECTION\n#define DISPID_IHTMLSTYLE2_BEHAVIOR          DISPID_A_BEHAVIOR\n#define DISPID_IHTMLSTYLE2_SETEXPRESSION     DISPID_HTMLOBJECT+4\n#define DISPID_IHTMLSTYLE2_GETEXPRESSION     DISPID_HTMLOBJECT+5\n#define DISPID_IHTMLSTYLE2_REMOVEEXPRESSION  DISPID_HTMLOBJECT+6\n#define DISPID_IHTMLSTYLE2_POSITION          DISPID_A_POSITION\n#define DISPID_IHTMLSTYLE2_UNICODEBIDI       DISPID_A_UNICODEBIDI\n#define DISPID_IHTMLSTYLE2_BOTTOM            STDPROPID_XOBJ_BOTTOM\n#define DISPID_IHTMLSTYLE2_RIGHT             STDPROPID_XOBJ_RIGHT\n#define DISPID_IHTMLSTYLE2_PIXELBOTTOM       DISPID_STYLE+9\n#define DISPID_IHTMLSTYLE2_PIXELRIGHT        DISPID_STYLE+10\n#define DISPID_IHTMLSTYLE2_POSBOTTOM         DISPID_STYLE+11\n#define DISPID_IHTMLSTYLE2_POSRIGHT          DISPID_STYLE+12\n#define DISPID_IHTMLSTYLE2_IMEMODE           DISPID_A_IMEMODE\n#define DISPID_IHTMLSTYLE2_RUBYALIGN         DISPID_A_RUBYALIGN\n#define DISPID_IHTMLSTYLE2_RUBYPOSITION      DISPID_A_RUBYPOSITION\n#define DISPID_IHTMLSTYLE2_RUBYOVERHANG      DISPID_A_RUBYOVERHANG\n#define DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR    DISPID_A_LAYOUTGRIDCHAR\n#define DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE    DISPID_A_LAYOUTGRIDLINE\n#define DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE    DISPID_A_LAYOUTGRIDMODE\n#define DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE    DISPID_A_LAYOUTGRIDTYPE\n#define DISPID_IHTMLSTYLE2_LAYOUTGRID        DISPID_A_LAYOUTGRID\n#define DISPID_IHTMLSTYLE2_WORDBREAK         DISPID_A_WORDBREAK\n#define DISPID_IHTMLSTYLE2_LINEBREAK         DISPID_A_LINEBREAK\n#define DISPID_IHTMLSTYLE2_TEXTJUSTIFY       DISPID_A_TEXTJUSTIFY\n#define DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM   DISPID_A_TEXTJUSTIFYTRIM\n#define DISPID_IHTMLSTYLE2_TEXTKASHIDA       DISPID_A_TEXTKASHIDA\n#define DISPID_IHTMLSTYLE2_TEXTAUTOSPACE     DISPID_A_TEXTAUTOSPACE\n#define DISPID_IHTMLSTYLE2_OVERFLOWX         DISPID_A_OVERFLOWX\n#define DISPID_IHTMLSTYLE2_OVERFLOWY         DISPID_A_OVERFLOWY\n#define DISPID_IHTMLSTYLE2_ACCELERATOR       DISPID_A_ACCELERATOR\n\n/* IHTMLStyle3 */\n#define DISPID_IHTMLSTYLE3_LAYOUTFLOW                DISPID_A_LAYOUTFLOW\n#define DISPID_IHTMLSTYLE3_ZOOM                      DISPID_A_ZOOM\n#define DISPID_IHTMLSTYLE3_WORDWRAP                  DISPID_A_WORDWRAP\n#define DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION     DISPID_A_TEXTUNDERLINEPOSITION\n#define DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR        DISPID_A_SCROLLBARBASECOLOR\n#define DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR        DISPID_A_SCROLLBARFACECOLOR\n#define DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR     DISPID_A_SCROLLBAR3DLIGHTCOLOR\n#define DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR      DISPID_A_SCROLLBARSHADOWCOLOR\n#define DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR   DISPID_A_SCROLLBARHIGHLIGHTCOLOR\n#define DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR  DISPID_A_SCROLLBARDARKSHADOWCOLOR\n#define DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR       DISPID_A_SCROLLBARARROWCOLOR\n#define DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR       DISPID_A_SCROLLBARTRACKCOLOR\n#define DISPID_IHTMLSTYLE3_WRITINGMODE               DISPID_A_WRITINGMODE\n#define DISPID_IHTMLSTYLE3_TEXTALIGNLAST             DISPID_A_TEXTALIGNLAST\n#define DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE          DISPID_A_TEXTKASHIDASPACE\n\n/* IHTMLStyle4 */\n#define DISPID_IHTMLSTYLE4_TEXTOVERFLOW  DISPID_A_TEXTOVERFLOW\n#define DISPID_IHTMLSTYLE4_MINHEIGHT     DISPID_A_MINHEIGHT\n\n/* IHTMLStyle5 */\n#define DISPID_IHTMLSTYLE5_MSINTERPOLATIONMODE  DISPID_A_INTERPOLATION\n#define DISPID_IHTMLSTYLE5_MAXHEIGHT            DISPID_A_MAXHEIGHT\n#define DISPID_IHTMLSTYLE5_MINWIDTH             DISPID_A_MINWIDTH\n#define DISPID_IHTMLSTYLE5_MAXWIDTH             DISPID_A_MAXWIDTH\n\n/* IHTMLStyle6 */\n#define DISPID_IHTMLSTYLE6_CONTENT             DISPID_A_CONTENT\n#define DISPID_IHTMLSTYLE6_CAPTIONSIDE         DISPID_A_CAPTIONSIDE\n#define DISPID_IHTMLSTYLE6_COUNTERINCREMENT    DISPID_A_COUNTERINCREMENT\n#define DISPID_IHTMLSTYLE6_COUNTERRESET        DISPID_A_COUNTERRESET\n#define DISPID_IHTMLSTYLE6_OUTLINE             DISPID_A_OUTLINE\n#define DISPID_IHTMLSTYLE6_OUTLINEWIDTH        DISPID_A_OUTLINEWIDTH\n#define DISPID_IHTMLSTYLE6_OUTLINESTYLE        DISPID_A_OUTLINESTYLE\n#define DISPID_IHTMLSTYLE6_OUTLINECOLOR        DISPID_A_OUTLINECOLOR\n#define DISPID_IHTMLSTYLE6_BOXSIZING           DISPID_A_BOXSIZING\n#define DISPID_IHTMLSTYLE6_BORDERSPACING       DISPID_A_BORDERSPACING\n#define DISPID_IHTMLSTYLE6_ORPHANS             DISPID_A_ORPHANS\n#define DISPID_IHTMLSTYLE6_WIDOWS              DISPID_A_WIDOWS\n#define DISPID_IHTMLSTYLE6_PAGEBREAKINSIDE     DISPID_A_PAGEBREAKINSIDE\n#define DISPID_IHTMLSTYLE6_EMPTYCELLS          DISPID_A_EMPTYCELLS\n#define DISPID_IHTMLSTYLE6_MSBLOCKPROGRESSION  DISPID_A_MS_BLOCKPROGRESSION\n#define DISPID_IHTMLSTYLE6_QUOTES              DISPID_A_QUOTES\n\n/* IHTMLFiltersCollection */\n#define DISPID_IHTMLFILTERSCOLLECTION_LENGTH     (DISPID_FILTERS+1)\n#define DISPID_IHTMLFILTERSCOLLECTION__NEWENUM   DISPID_NEWENUM\n#define DISPID_IHTMLFILTERSCOLLECTION_ITEM       DISPID_VALUE\n\n/* IHTMLSelectionObject */\n#define DISPID_IHTMLSELECTIONOBJECT_CREATERANGE   (DISPID_SELECTOBJ+1)\n#define DISPID_IHTMLSELECTIONOBJECT_EMPTY         (DISPID_SELECTOBJ+2)\n#define DISPID_IHTMLSELECTIONOBJECT_CLEAR         (DISPID_SELECTOBJ+3)\n#define DISPID_IHTMLSELECTIONOBJECT_TYPE          (DISPID_SELECTOBJ+4)\n\n/* IHTMLSelectionObject2 */\n#define DISPID_IHTMLSELECTIONOBJECT2_CREATERANGECOLLECTION  DISPID_SELECTOBJ+5\n#define DISPID_IHTMLSELECTIONOBJECT2_TYPEDETAIL             DISPID_SELECTOBJ+6\n\n/* IHTMLSelection */\n#define DISPID_IHTMLSELECTION_ANCHORNODE          DISPID_HTMLSELECTION+1\n#define DISPID_IHTMLSELECTION_ANCHOROFFSET        DISPID_HTMLSELECTION+2\n#define DISPID_IHTMLSELECTION_FOCUSNODE           DISPID_HTMLSELECTION+3\n#define DISPID_IHTMLSELECTION_FOCUSOFFSET         DISPID_HTMLSELECTION+4\n#define DISPID_IHTMLSELECTION_ISCOLLAPSED         DISPID_HTMLSELECTION+5\n#define DISPID_IHTMLSELECTION_COLLAPSE            DISPID_HTMLSELECTION+6\n#define DISPID_IHTMLSELECTION_COLLAPSETOSTART     DISPID_HTMLSELECTION+7\n#define DISPID_IHTMLSELECTION_COLLAPSETOEND       DISPID_HTMLSELECTION+8\n#define DISPID_IHTMLSELECTION_SELECTALLCHILDREN   DISPID_HTMLSELECTION+9\n#define DISPID_IHTMLSELECTION_DELETEFROMDOCUMENT  DISPID_HTMLSELECTION+10\n#define DISPID_IHTMLSELECTION_RANGECOUNT          DISPID_HTMLSELECTION+11\n#define DISPID_IHTMLSELECTION_GETRANGEAT          DISPID_HTMLSELECTION+12\n#define DISPID_IHTMLSELECTION_ADDRANGE            DISPID_HTMLSELECTION+13\n#define DISPID_IHTMLSELECTION_REMOVERANGE         DISPID_HTMLSELECTION+14\n#define DISPID_IHTMLSELECTION_REMOVEALLRANGES     DISPID_HTMLSELECTION+15\n#define DISPID_IHTMLSELECTION_TOSTRING            DISPID_HTMLSELECTION+16\n\n/* IHTMLFramesCollection2 */\n#define DISPID_IHTMLFRAMESCOLLECTION2_ITEM     0\n#define DISPID_IHTMLFRAMESCOLLECTION2_LENGTH   1001\n\n/* IHTMLLocation */\n#define DISPID_IHTMLLOCATION_HOST       (DISPID_LOCATION+1)\n#define DISPID_IHTMLLOCATION_HOSTNAME   (DISPID_LOCATION+2)\n#define DISPID_IHTMLLOCATION_PORT       (DISPID_LOCATION+3)\n#define DISPID_IHTMLLOCATION_PATHNAME   (DISPID_LOCATION+4)\n#define DISPID_IHTMLLOCATION_SEARCH     (DISPID_LOCATION+5)\n#define DISPID_IHTMLLOCATION_HASH       (DISPID_LOCATION+6)\n#define DISPID_IHTMLLOCATION_RELOAD     (DISPID_LOCATION+7)\n#define DISPID_IHTMLLOCATION_REPLACE    (DISPID_LOCATION+8)\n#define DISPID_IHTMLLOCATION_ASSIGN     (DISPID_LOCATION+9)\n#define DISPID_IHTMLLOCATION_TOSTRING   (DISPID_LOCATION+10)\n#define DISPID_IHTMLLOCATION_HREF       DISPID_VALUE\n#define DISPID_IHTMLLOCATION_PROTOCOL   DISPID_LOCATION\n\n/* IHTMLBookmarkCollection */\n#define DISPID_IHTMLBOOKMARKCOLLECTION_LENGTH    DISPID_OPTIONS_COL+1\n#define DISPID_IHTMLBOOKMARKCOLLECTION__NEWENUM  DISPID_NEWENUM\n#define DISPID_IHTMLBOOKMARKCOLLECTION_ITEM      DISPID_VALUE\n\n/* HTMLWindowEvents */\n#define DISPID_HTMLWINDOWEVENTS_ONLOAD           DISPID_EVMETH_ONLOAD\n#define DISPID_HTMLWINDOWEVENTS_ONUNLOAD         DISPID_EVMETH_ONUNLOAD\n#define DISPID_HTMLWINDOWEVENTS_ONHELP           DISPID_EVMETH_ONHELP\n#define DISPID_HTMLWINDOWEVENTS_ONFOCUS          DISPID_EVMETH_ONFOCUS\n#define DISPID_HTMLWINDOWEVENTS_ONBLUR           DISPID_EVMETH_ONBLUR\n#define DISPID_HTMLWINDOWEVENTS_ONERROR          DISPID_EVMETH_ONERROR\n#define DISPID_HTMLWINDOWEVENTS_ONRESIZE         DISPID_EVMETH_ONRESIZE\n#define DISPID_HTMLWINDOWEVENTS_ONSCROLL         DISPID_EVMETH_ONSCROLL\n#define DISPID_HTMLWINDOWEVENTS_ONBEFOREUNLOAD   DISPID_EVMETH_ONBEFOREUNLOAD\n#define DISPID_HTMLWINDOWEVENTS_ONBEFOREPRINT    DISPID_EVMETH_ONBEFOREPRINT\n#define DISPID_HTMLWINDOWEVENTS_ONAFTERPRINT     DISPID_EVMETH_ONAFTERPRINT\n\n/* HTMLWindowEvents2 */\n#define DISPID_HTMLWINDOWEVENTS2_ONLOAD          DISPID_EVMETH_ONLOAD\n#define DISPID_HTMLWINDOWEVENTS2_ONUNLOAD        DISPID_EVMETH_ONUNLOAD\n#define DISPID_HTMLWINDOWEVENTS2_ONHELP          DISPID_EVMETH_ONHELP\n#define DISPID_HTMLWINDOWEVENTS2_ONFOCUS         DISPID_EVMETH_ONFOCUS\n#define DISPID_HTMLWINDOWEVENTS2_ONBLUR          DISPID_EVMETH_ONBLUR\n#define DISPID_HTMLWINDOWEVENTS2_ONERROR         DISPID_EVMETH_ONERROR\n#define DISPID_HTMLWINDOWEVENTS2_ONRESIZE        DISPID_EVMETH_ONRESIZE\n#define DISPID_HTMLWINDOWEVENTS2_ONSCROLL        DISPID_EVMETH_ONSCROLL\n#define DISPID_HTMLWINDOWEVENTS2_ONBEFOREUNLOAD  DISPID_EVMETH_ONBEFOREUNLOAD\n#define DISPID_HTMLWINDOWEVENTS2_ONBEFOREPRINT   DISPID_EVMETH_ONBEFOREPRINT\n#define DISPID_HTMLWINDOWEVENTS2_ONAFTERPRINT    DISPID_EVMETH_ONAFTERPRINT\n\n/* IHTMLWindow2 */\n#define DISPID_IHTMLWINDOW2_HISTORY              2\n#define DISPID_IHTMLWINDOW2_CLOSE                3\n#define DISPID_IHTMLWINDOW2_OPENER               4\n#define DISPID_IHTMLWINDOW2_NAVIGATOR            5\n#define DISPID_IHTMLWINDOW2_MOVETO               6\n#define DISPID_IHTMLWINDOW2_MOVEBY               7\n#define DISPID_IHTMLWINDOW2_RESIZETO             9\n#define DISPID_IHTMLWINDOW2_RESIZEBY             8\n#define DISPID_IHTMLWINDOW2_NAME                 11\n#define DISPID_IHTMLWINDOW2_PARENT               12\n#define DISPID_IHTMLWINDOW2_OPEN                 13\n#define DISPID_IHTMLWINDOW2_LOCATION             14\n#define DISPID_IHTMLWINDOW2_SELF                 20\n#define DISPID_IHTMLWINDOW2_TOP                  21\n#define DISPID_IHTMLWINDOW2_WINDOW               22\n#define DISPID_IHTMLWINDOW2_CLOSED               23\n#define DISPID_IHTMLWINDOW2_NAVIGATE             25\n#define DISPID_IHTMLWINDOW2_FRAMES               1100\n#define DISPID_IHTMLWINDOW2_DEFAULTSTATUS        1101\n#define DISPID_IHTMLWINDOW2_STATUS               1102\n#define DISPID_IHTMLWINDOW2_SETTIMEOUT           1172\n#define DISPID_IHTMLWINDOW2_CLEARTIMEOUT         1104\n#define DISPID_IHTMLWINDOW2_ALERT                1105\n#define DISPID_IHTMLWINDOW2_CONFIRM              1110\n#define DISPID_IHTMLWINDOW2_PROMPT               1111\n#define DISPID_IHTMLWINDOW2_IMAGE                1125\n#define DISPID_IHTMLWINDOW2_DOCUMENT             1151\n#define DISPID_IHTMLWINDOW2_EVENT                1152\n#define DISPID_IHTMLWINDOW2__NEWENUM             1153\n#define DISPID_IHTMLWINDOW2_SHOWMODALDIALOG      1154\n#define DISPID_IHTMLWINDOW2_SHOWHELP             1155\n#define DISPID_IHTMLWINDOW2_SCREEN               1156\n#define DISPID_IHTMLWINDOW2_OPTION               1157\n#define DISPID_IHTMLWINDOW2_FOCUS                1158\n#define DISPID_IHTMLWINDOW2_BLUR                 1159\n#define DISPID_IHTMLWINDOW2_SCROLL               1160\n#define DISPID_IHTMLWINDOW2_CLIENTINFORMATION    1161\n#define DISPID_IHTMLWINDOW2_SETINTERVAL          1173\n#define DISPID_IHTMLWINDOW2_CLEARINTERVAL        1163\n#define DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING   1164\n#define DISPID_IHTMLWINDOW2_EXECSCRIPT           1165\n#define DISPID_IHTMLWINDOW2_TOSTRING             1166\n#define DISPID_IHTMLWINDOW2_SCROLLBY             1167\n#define DISPID_IHTMLWINDOW2_SCROLLTO             1168\n#define DISPID_IHTMLWINDOW2_EXTERNAL             1169\n#define DISPID_IHTMLWINDOW2_ONFOCUS              DISPID_EVPROP_ONFOCUS\n#define DISPID_IHTMLWINDOW2_ONBLUR               DISPID_EVPROP_ONBLUR\n#define DISPID_IHTMLWINDOW2_ONLOAD               DISPID_EVPROP_ONLOAD\n#define DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD       DISPID_EVPROP_ONBEFOREUNLOAD\n#define DISPID_IHTMLWINDOW2_ONUNLOAD             DISPID_EVPROP_ONUNLOAD\n#define DISPID_IHTMLWINDOW2_ONHELP               DISPID_EVPROP_ONHELP\n#define DISPID_IHTMLWINDOW2_ONERROR              DISPID_EVPROP_ONERROR\n#define DISPID_IHTMLWINDOW2_ONRESIZE             DISPID_EVPROP_ONRESIZE\n#define DISPID_IHTMLWINDOW2_ONSCROLL             DISPID_EVPROP_ONSCROLL\n\n/* IHTMLWindow3 */\n#define DISPID_IHTMLWINDOW3_SCREENLEFT          1170\n#define DISPID_IHTMLWINDOW3_SCREENTOP           1171\n#define DISPID_IHTMLWINDOW3_ATTACHEVENT         DISPID_HTMLOBJECT+7\n#define DISPID_IHTMLWINDOW3_DETACHEVENT         DISPID_HTMLOBJECT+8\n#define DISPID_IHTMLWINDOW3_SETTIMEOUT          1103\n#define DISPID_IHTMLWINDOW3_SETINTERVAL         1162\n#define DISPID_IHTMLWINDOW3_PRINT               1174\n#define DISPID_IHTMLWINDOW3_ONBEFOREPRINT       DISPID_EVPROP_ONBEFOREPRINT\n#define DISPID_IHTMLWINDOW3_ONAFTERPRINT        DISPID_EVPROP_ONAFTERPRINT\n#define DISPID_IHTMLWINDOW3_CLIPBOARDDATA       1175\n#define DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG  1176\n\n/* IHTMLWindow4 */\n#define DISPID_IHTMLWINDOW4_CREATEPOPUP   1180\n#define DISPID_IHTMLWINDOW4_FRAMEELEMENT  1181\n\n/* IHTMLWindow5 */\n#define DISPID_IHTMLWINDOW5_XMLHTTPREQUEST 1190\n\n/* IHTMLWindow6 */\n#define DISPID_IHTMLWINDOW6_XDOMAINREQUEST           1191\n#define DISPID_IHTMLWINDOW6_SESSIONSTORAGE           1192\n#define DISPID_IHTMLWINDOW6_LOCALSTORAGE             1193\n#define DISPID_IHTMLWINDOW6_ONHASHCHANGE             DISPID_EVPROP_ONHASHCHANGE\n#define DISPID_IHTMLWINDOW6_MAXCONNECTIONSPERSERVER  1194\n#define DISPID_IHTMLWINDOW6_POSTMESSAGE              1196\n#define DISPID_IHTMLWINDOW6_TOSTATICHTML             1197\n#define DISPID_IHTMLWINDOW6_ONMESSAGE                DISPID_EVPROP_ONMESSAGE\n#define DISPID_IHTMLWINDOW6_MSWRITEPROFILERMARK      1198\n\n/* IHTMLWindow7 */\n#define DISPID_IHTMLWINDOW7_GETSELECTION             1199\n#define DISPID_IHTMLWINDOW7_GETCOMPUTEDSTYLE         1200\n#define DISPID_IHTMLWINDOW7_STYLEMEDIA               1202\n#define DISPID_IHTMLWINDOW7_PERFORMANCE              1203\n#define DISPID_IHTMLWINDOW7_INNERWIDTH               1204\n#define DISPID_IHTMLWINDOW7_INNERHEIGHT              1205\n#define DISPID_IHTMLWINDOW7_PAGEXOFFSET              1206\n#define DISPID_IHTMLWINDOW7_PAGEYOFFSET              1207\n#define DISPID_IHTMLWINDOW7_SCREENX                  1208\n#define DISPID_IHTMLWINDOW7_SCREENY                  1209\n#define DISPID_IHTMLWINDOW7_OUTERWIDTH               1210\n#define DISPID_IHTMLWINDOW7_OUTERHEIGHT              1211\n#define DISPID_IHTMLWINDOW7_ONABORT                  DISPID_EVPROP_ONABORT\n#define DISPID_IHTMLWINDOW7_ONCANPLAY                DISPID_EVPROP_CANPLAY\n#define DISPID_IHTMLWINDOW7_ONCANPLAYTHROUGH         DISPID_EVPROP_CANPLAYTHROUGH\n#define DISPID_IHTMLWINDOW7_ONCHANGE                 DISPID_EVPROP_ONCHANGE\n#define DISPID_IHTMLWINDOW7_ONCLICK                  DISPID_EVPROP_ONCLICK\n#define DISPID_IHTMLWINDOW7_ONCONTEXTMENU            DISPID_EVPROP_ONCONTEXTMENU\n#define DISPID_IHTMLWINDOW7_ONDBLCLICK               DISPID_EVPROP_ONDBLCLICK\n#define DISPID_IHTMLWINDOW7_ONDRAG                   DISPID_EVPROP_ONDRAG\n#define DISPID_IHTMLWINDOW7_ONDRAGEND                DISPID_EVPROP_ONDRAGEND\n#define DISPID_IHTMLWINDOW7_ONDRAGENTER              DISPID_EVPROP_ONDRAGENTER\n#define DISPID_IHTMLWINDOW7_ONDRAGLEAVE              DISPID_EVPROP_ONDRAGLEAVE\n#define DISPID_IHTMLWINDOW7_ONDRAGOVER               DISPID_EVPROP_ONDRAGOVER\n#define DISPID_IHTMLWINDOW7_ONDRAGSTART              DISPID_EVPROP_ONDRAGSTART\n#define DISPID_IHTMLWINDOW7_ONDROP                   DISPID_EVPROP_ONDROP\n#define DISPID_IHTMLWINDOW7_ONDURATIONCHANGE         DISPID_EVPROP_DURATIONCHANGE\n#define DISPID_IHTMLWINDOW7_ONFOCUSIN                DISPID_EVPROP_ONFOCUSIN\n#define DISPID_IHTMLWINDOW7_ONFOCUSOUT               DISPID_EVPROP_ONFOCUSOUT\n#define DISPID_IHTMLWINDOW7_ONINPUT                  DISPID_EVPROP_INPUT\n#define DISPID_IHTMLWINDOW7_ONEMPTIED                DISPID_EVPROP_EMPTIED\n#define DISPID_IHTMLWINDOW7_ONENDED                  DISPID_EVPROP_ENDED\n#define DISPID_IHTMLWINDOW7_ONKEYDOWN                DISPID_EVPROP_ONKEYDOWN\n#define DISPID_IHTMLWINDOW7_ONKEYPRESS               DISPID_EVPROP_ONKEYPRESS\n#define DISPID_IHTMLWINDOW7_ONKEYUP                  DISPID_EVPROP_ONKEYUP\n#define DISPID_IHTMLWINDOW7_ONLOADEDDATA             DISPID_EVPROP_LOADEDDATA\n#define DISPID_IHTMLWINDOW7_ONLOADEDMETADATA         DISPID_EVPROP_LOADEDMETADATA\n#define DISPID_IHTMLWINDOW7_ONLOADSTART              DISPID_EVPROP_LOADSTART\n#define DISPID_IHTMLWINDOW7_ONMOUSEDOWN              DISPID_EVPROP_ONMOUSEDOWN\n#define DISPID_IHTMLWINDOW7_ONMOUSEENTER             DISPID_EVPROP_ONMOUSEENTER\n#define DISPID_IHTMLWINDOW7_ONMOUSELEAVE             DISPID_EVPROP_ONMOUSELEAVE\n#define DISPID_IHTMLWINDOW7_ONMOUSEMOVE              DISPID_EVPROP_ONMOUSEMOVE\n#define DISPID_IHTMLWINDOW7_ONMOUSEOUT               DISPID_EVPROP_ONMOUSEOUT\n#define DISPID_IHTMLWINDOW7_ONMOUSEOVER              DISPID_EVPROP_ONMOUSEOVER\n#define DISPID_IHTMLWINDOW7_ONMOUSEUP                DISPID_EVPROP_ONMOUSEUP\n#define DISPID_IHTMLWINDOW7_ONMOUSEWHEEL             DISPID_EVPROP_ONMOUSEWHEEL\n#define DISPID_IHTMLWINDOW7_ONOFFLINE                DISPID_EVPROP_ONOFFLINE\n#define DISPID_IHTMLWINDOW7_ONONLINE                 DISPID_EVPROP_ONONLINE\n#define DISPID_IHTMLWINDOW7_ONPROGRESS               DISPID_EVPROP_PROGRESS\n#define DISPID_IHTMLWINDOW7_ONRATECHANGE             DISPID_EVPROP_RATECHANGE\n#define DISPID_IHTMLWINDOW7_ONREADYSTATECHANGE       DISPID_EVPROP_ONREADYSTATECHANGE\n#define DISPID_IHTMLWINDOW7_ONRESET                  DISPID_EVPROP_ONRESET\n#define DISPID_IHTMLWINDOW7_ONSEEKED                 DISPID_EVPROP_SEEKED\n#define DISPID_IHTMLWINDOW7_ONSEEKING                DISPID_EVPROP_SEEKING\n#define DISPID_IHTMLWINDOW7_ONSELECT                 DISPID_EVPROP_ONSELECT\n#define DISPID_IHTMLWINDOW7_ONSTALLED                DISPID_EVPROP_STALLED\n#define DISPID_IHTMLWINDOW7_ONSTORAGE                DISPID_EVPROP_ONSTORAGE\n#define DISPID_IHTMLWINDOW7_ONSUBMIT                 DISPID_EVPROP_ONSUBMIT\n#define DISPID_IHTMLWINDOW7_ONSUSPEND                DISPID_EVPROP_SUSPEND\n#define DISPID_IHTMLWINDOW7_ONTIMEUPDATE             DISPID_EVPROP_TIMEUPDATE\n#define DISPID_IHTMLWINDOW7_ONPAUSE                  DISPID_EVPROP_PAUSE\n#define DISPID_IHTMLWINDOW7_ONPLAY                   DISPID_EVPROP_PLAY\n#define DISPID_IHTMLWINDOW7_ONPLAYING                DISPID_EVPROP_PLAYING\n#define DISPID_IHTMLWINDOW7_ONVOLUMECHANGE           DISPID_EVPROP_VOLUMECHANGE\n#define DISPID_IHTMLWINDOW7_ONWAITING                DISPID_EVPROP_WAITING\n\n/* IHTMLImageElementFactory */\n#define DISPID_IHTMLIMAGEELEMENTFACTORY_CREATE                    DISPID_VALUE\n\n/* IHTMLImgElement */\n#define DISPID_IHTMLIMGELEMENT_BORDER             (DISPID_IMGBASE+4)\n#define DISPID_IHTMLIMGELEMENT_VSPACE             (DISPID_IMGBASE+5)\n#define DISPID_IHTMLIMGELEMENT_HSPACE             (DISPID_IMGBASE+6)\n#define DISPID_IHTMLIMGELEMENT_ALT                (DISPID_IMGBASE+2)\n#define DISPID_IHTMLIMGELEMENT_SRC                (DISPID_IMGBASE+3)\n#define DISPID_IHTMLIMGELEMENT_LOWSRC             (DISPID_IMGBASE+7)\n#define DISPID_IHTMLIMGELEMENT_VRML               (DISPID_IMGBASE+8)\n#define DISPID_IHTMLIMGELEMENT_DYNSRC             (DISPID_IMGBASE+9)\n#define DISPID_IHTMLIMGELEMENT_READYSTATE         (DISPID_IMGBASE+12)\n#define DISPID_IHTMLIMGELEMENT_COMPLETE           (DISPID_IMGBASE+10)\n#define DISPID_IHTMLIMGELEMENT_LOOP               (DISPID_IMGBASE+11)\n#define DISPID_IHTMLIMGELEMENT_ISMAP              (DISPID_IMG+2)\n#define DISPID_IHTMLIMGELEMENT_USEMAP             (DISPID_IMG+8)\n#define DISPID_IHTMLIMGELEMENT_MIMETYPE           (DISPID_IMG+10)\n#define DISPID_IHTMLIMGELEMENT_FILESIZE           (DISPID_IMG+11)\n#define DISPID_IHTMLIMGELEMENT_FILECREATEDDATE    (DISPID_IMG+12)\n#define DISPID_IHTMLIMGELEMENT_FILEMODIFIEDDATE   (DISPID_IMG+13)\n#define DISPID_IHTMLIMGELEMENT_FILEUPDATEDDATE    (DISPID_IMG+14)\n#define DISPID_IHTMLIMGELEMENT_PROTOCOL           (DISPID_IMG+15)\n#define DISPID_IHTMLIMGELEMENT_HREF               (DISPID_IMG+16)\n#define DISPID_IHTMLIMGELEMENT_NAMEPROP           (DISPID_IMG+17)\n#define DISPID_IHTMLIMGELEMENT_ALIGN              STDPROPID_XOBJ_CONTROLALIGN\n#define DISPID_IHTMLIMGELEMENT_ONLOAD             DISPID_EVPROP_ONLOAD\n#define DISPID_IHTMLIMGELEMENT_ONERROR            DISPID_EVPROP_ONERROR\n#define DISPID_IHTMLIMGELEMENT_ONABORT            DISPID_EVPROP_ONABORT\n#define DISPID_IHTMLIMGELEMENT_NAME               STDPROPID_XOBJ_NAME\n#define DISPID_IHTMLIMGELEMENT_WIDTH              STDPROPID_XOBJ_WIDTH\n#define DISPID_IHTMLIMGELEMENT_HEIGHT             STDPROPID_XOBJ_HEIGHT\n#define DISPID_IHTMLIMGELEMENT_START              DISPID_IMGBASE+13\n\n/* IHTMLImgElement2 */\n#define DISPID_IHTMLIMGELEMENT2_LONGDESC  DISPID_IMG+19\n\n/* IHTMLXMLHttpRequest */\n#define DISPID_IHTMLXMLHTTPREQUEST_READYSTATE             DISPID_XMLHTTPREQUEST+2\n#define DISPID_IHTMLXMLHTTPREQUEST_RESPONSEBODY           DISPID_XMLHTTPREQUEST+3\n#define DISPID_IHTMLXMLHTTPREQUEST_RESPONSETEXT           DISPID_XMLHTTPREQUEST+4\n#define DISPID_IHTMLXMLHTTPREQUEST_RESPONSEXML            DISPID_XMLHTTPREQUEST+5\n#define DISPID_IHTMLXMLHTTPREQUEST_STATUS                 DISPID_XMLHTTPREQUEST+6\n#define DISPID_IHTMLXMLHTTPREQUEST_STATUSTEXT             DISPID_XMLHTTPREQUEST+7\n#define DISPID_IHTMLXMLHTTPREQUEST_ONREADYSTATECHANGE     DISPID_EVPROP_ONREADYSTATECHANGE\n#define DISPID_IHTMLXMLHTTPREQUEST_ABORT                  DISPID_XMLHTTPREQUEST+9\n#define DISPID_IHTMLXMLHTTPREQUEST_OPEN                   DISPID_XMLHTTPREQUEST+10\n#define DISPID_IHTMLXMLHTTPREQUEST_SEND                   DISPID_XMLHTTPREQUEST+11\n#define DISPID_IHTMLXMLHTTPREQUEST_GETALLRESPONSEHEADERS  DISPID_XMLHTTPREQUEST+12\n#define DISPID_IHTMLXMLHTTPREQUEST_GETRESPONSEHEADER      DISPID_XMLHTTPREQUEST+13\n#define DISPID_IHTMLXMLHTTPREQUEST_SETREQUESTHEADER       DISPID_XMLHTTPREQUEST+14\n\n/* IHTMLXMLHttpRequest2 */\n#define DISPID_IHTMLXMLHTTPREQUEST2_TIMEOUT    DISPID_XMLHTTPREQUEST+15\n#define DISPID_IHTMLXMLHTTPREQUEST2_ONTIMEOUT  DISPID_EVPROP_TIMEOUT\n\n/* IHTMLXMLHttpRequestFactory */\n#define DISPID_IHTMLXMLHTTPREQUESTFACTORY_CREATE  DISPID_VALUE\n\n/* HTMLXMLHttpRequestEvents */\n#define DISPID_HTMLXMLHTTPREQUESTEVENTS_ONTIMEOUT           DISPID_XMLHTTPREQUEST+16\n#define DISPID_HTMLXMLHTTPREQUESTEVENTS_ONREADYSTATECHANGE  DISPID_XMLHTTPREQUEST+8\n\n/* IOmHistory */\n#define DISPID_IOMHISTORY_LENGTH    DISPID_HISTORY\n#define DISPID_IOMHISTORY_BACK      (DISPID_HISTORY+1)\n#define DISPID_IOMHISTORY_FORWARD   (DISPID_HISTORY+2)\n#define DISPID_IOMHISTORY_GO        (DISPID_HISTORY+3)\n\n/* IOmNavigator */\n#define DISPID_IOMNAVIGATOR_APPCODENAME       DISPID_NAVIGATOR\n#define DISPID_IOMNAVIGATOR_APPNAME           (DISPID_NAVIGATOR+1)\n#define DISPID_IOMNAVIGATOR_APPVERSION        (DISPID_NAVIGATOR+2)\n#define DISPID_IOMNAVIGATOR_USERAGENT         (DISPID_NAVIGATOR+3)\n#define DISPID_IOMNAVIGATOR_JAVAENABLED       (DISPID_NAVIGATOR+4)\n#define DISPID_IOMNAVIGATOR_TAINTENABLED      (DISPID_NAVIGATOR+5)\n#define DISPID_IOMNAVIGATOR_MIMETYPES         (DISPID_NAVIGATOR+6)\n#define DISPID_IOMNAVIGATOR_PLUGINS           (DISPID_NAVIGATOR+7)\n#define DISPID_IOMNAVIGATOR_COOKIEENABLED     (DISPID_NAVIGATOR+8)\n#define DISPID_IOMNAVIGATOR_OPSPROFILE        (DISPID_NAVIGATOR+9)\n#define DISPID_IOMNAVIGATOR_TOSTRING          (DISPID_NAVIGATOR+10)\n#define DISPID_IOMNAVIGATOR_CPUCLASS          (DISPID_NAVIGATOR+11)\n#define DISPID_IOMNAVIGATOR_SYSTEMLANGUAGE    (DISPID_NAVIGATOR+12)\n#define DISPID_IOMNAVIGATOR_BROWSERLANGUAGE   (DISPID_NAVIGATOR+13)\n#define DISPID_IOMNAVIGATOR_USERLANGUAGE      (DISPID_NAVIGATOR+14)\n#define DISPID_IOMNAVIGATOR_PLATFORM          (DISPID_NAVIGATOR+15)\n#define DISPID_IOMNAVIGATOR_APPMINORVERSION   (DISPID_NAVIGATOR+16)\n#define DISPID_IOMNAVIGATOR_CONNECTIONSPEED   (DISPID_NAVIGATOR+17)\n#define DISPID_IOMNAVIGATOR_ONLINE            (DISPID_NAVIGATOR+18)\n#define DISPID_IOMNAVIGATOR_USERPROFILE       (DISPID_NAVIGATOR+19)\n\n/* IHTMLMimeTypesCollection */\n#define DISPID_IHTMLMIMETYPESCOLLECTION_LENGTH   1\n\n/* IHTMLPluginsCollection */\n#define DISPID_IHTMLPLUGINSCOLLECTION_LENGTH    1\n#define DISPID_IHTMLPLUGINSCOLLECTION_REFRESH   2\n\n/* IHTMLOpsProfile */\n#define DISPID_IHTMLOPSPROFILE_ADDREQUEST       1\n#define DISPID_IHTMLOPSPROFILE_CLEARREQUEST     2\n#define DISPID_IHTMLOPSPROFILE_DOREQUEST        3\n#define DISPID_IHTMLOPSPROFILE_GETATTRIBUTE     4\n#define DISPID_IHTMLOPSPROFILE_SETATTRIBUTE     5\n#define DISPID_IHTMLOPSPROFILE_COMMITCHANGES    6\n#define DISPID_IHTMLOPSPROFILE_ADDREADREQUEST   7\n#define DISPID_IHTMLOPSPROFILE_DOREADREQUEST    8\n#define DISPID_IHTMLOPSPROFILE_DOWRITEREQUEST   9\n\n/* IHTMLDataTransfer */\n#define DISPID_IHTMLDATATRANSFER_SETDATA        DISPID_DATATRANSFER+1\n#define DISPID_IHTMLDATATRANSFER_GETDATA        DISPID_DATATRANSFER+2\n#define DISPID_IHTMLDATATRANSFER_CLEARDATA      DISPID_DATATRANSFER+3\n#define DISPID_IHTMLDATATRANSFER_DROPEFFECT     DISPID_DATATRANSFER+4\n#define DISPID_IHTMLDATATRANSFER_EFFECTALLOWED  DISPID_DATATRANSFER+5\n\n/* IHTMLEventObj */\n#define DISPID_IHTMLEVENTOBJ_SRCELEMENT     (DISPID_EVENTOBJ+1)\n#define DISPID_IHTMLEVENTOBJ_ALTKEY         (DISPID_EVENTOBJ+2)\n#define DISPID_IHTMLEVENTOBJ_CTRLKEY        (DISPID_EVENTOBJ+3)\n#define DISPID_IHTMLEVENTOBJ_SHIFTKEY       (DISPID_EVENTOBJ+4)\n#define DISPID_IHTMLEVENTOBJ_X              (DISPID_EVENTOBJ+5)\n#define DISPID_IHTMLEVENTOBJ_Y              (DISPID_EVENTOBJ+6)\n#define DISPID_IHTMLEVENTOBJ_RETURNVALUE    (DISPID_EVENTOBJ+7)\n#define DISPID_IHTMLEVENTOBJ_CANCELBUBBLE   (DISPID_EVENTOBJ+8)\n#define DISPID_IHTMLEVENTOBJ_FROMELEMENT    (DISPID_EVENTOBJ+9)\n#define DISPID_IHTMLEVENTOBJ_TOELEMENT      (DISPID_EVENTOBJ+10)\n#define DISPID_IHTMLEVENTOBJ_KEYCODE        (DISPID_EVENTOBJ+11)\n#define DISPID_IHTMLEVENTOBJ_BUTTON         (DISPID_EVENTOBJ+12)\n#define DISPID_IHTMLEVENTOBJ_TYPE           (DISPID_EVENTOBJ+13)\n#define DISPID_IHTMLEVENTOBJ_QUALIFIER      (DISPID_EVENTOBJ+14)\n#define DISPID_IHTMLEVENTOBJ_REASON         (DISPID_EVENTOBJ+15)\n#define DISPID_IHTMLEVENTOBJ_CLIENTX        (DISPID_EVENTOBJ+20)\n#define DISPID_IHTMLEVENTOBJ_CLIENTY        (DISPID_EVENTOBJ+21)\n#define DISPID_IHTMLEVENTOBJ_OFFSETX        (DISPID_EVENTOBJ+22)\n#define DISPID_IHTMLEVENTOBJ_OFFSETY        (DISPID_EVENTOBJ+23)\n#define DISPID_IHTMLEVENTOBJ_SCREENX        (DISPID_EVENTOBJ+24)\n#define DISPID_IHTMLEVENTOBJ_SCREENY        (DISPID_EVENTOBJ+25)\n#define DISPID_IHTMLEVENTOBJ_SRCFILTER      (DISPID_EVENTOBJ+26)\n\n/* IHTMLEventObj2 */\n#define DISPID_IHTMLEVENTOBJ2_SETATTRIBUTE     DISPID_HTMLOBJECT+1\n#define DISPID_IHTMLEVENTOBJ2_GETATTRIBUTE     DISPID_HTMLOBJECT+2\n#define DISPID_IHTMLEVENTOBJ2_REMOVEATTRIBUTE  DISPID_HTMLOBJECT+3\n#define DISPID_IHTMLEVENTOBJ2_PROPERTYNAME     DISPID_EVENTOBJ+27\n#define DISPID_IHTMLEVENTOBJ2_BOOKMARKS        DISPID_EVENTOBJ+31\n#define DISPID_IHTMLEVENTOBJ2_RECORDSET        DISPID_EVENTOBJ+32\n#define DISPID_IHTMLEVENTOBJ2_DATAFLD          DISPID_EVENTOBJ+33\n#define DISPID_IHTMLEVENTOBJ2_BOUNDELEMENTS    DISPID_EVENTOBJ+34\n#define DISPID_IHTMLEVENTOBJ2_REPEAT           DISPID_EVENTOBJ+35\n#define DISPID_IHTMLEVENTOBJ2_SRCURN           DISPID_EVENTOBJ+36\n#define DISPID_IHTMLEVENTOBJ2_SRCELEMENT       DISPID_EVENTOBJ+1\n#define DISPID_IHTMLEVENTOBJ2_ALTKEY           DISPID_EVENTOBJ+2\n#define DISPID_IHTMLEVENTOBJ2_CTRLKEY          DISPID_EVENTOBJ+3\n#define DISPID_IHTMLEVENTOBJ2_SHIFTKEY         DISPID_EVENTOBJ+4\n#define DISPID_IHTMLEVENTOBJ2_FROMELEMENT      DISPID_EVENTOBJ+9\n#define DISPID_IHTMLEVENTOBJ2_TOELEMENT        DISPID_EVENTOBJ+10\n#define DISPID_IHTMLEVENTOBJ2_BUTTON           DISPID_EVENTOBJ+12\n#define DISPID_IHTMLEVENTOBJ2_TYPE             DISPID_EVENTOBJ+13\n#define DISPID_IHTMLEVENTOBJ2_QUALIFIER        DISPID_EVENTOBJ+14\n#define DISPID_IHTMLEVENTOBJ2_REASON           DISPID_EVENTOBJ+15\n#define DISPID_IHTMLEVENTOBJ2_X                DISPID_EVENTOBJ+5\n#define DISPID_IHTMLEVENTOBJ2_Y                DISPID_EVENTOBJ+6\n#define DISPID_IHTMLEVENTOBJ2_CLIENTX          DISPID_EVENTOBJ+20\n#define DISPID_IHTMLEVENTOBJ2_CLIENTY          DISPID_EVENTOBJ+21\n#define DISPID_IHTMLEVENTOBJ2_OFFSETX          DISPID_EVENTOBJ+22\n#define DISPID_IHTMLEVENTOBJ2_OFFSETY          DISPID_EVENTOBJ+23\n#define DISPID_IHTMLEVENTOBJ2_SCREENX          DISPID_EVENTOBJ+24\n#define DISPID_IHTMLEVENTOBJ2_SCREENY          DISPID_EVENTOBJ+25\n#define DISPID_IHTMLEVENTOBJ2_SRCFILTER        DISPID_EVENTOBJ+26\n#define DISPID_IHTMLEVENTOBJ2_DATATRANSFER     DISPID_EVENTOBJ+37\n\n/* IHTMLEventObj3 */\n#define DISPID_IHTMLEVENTOBJ3_CONTENTOVERFLOW       DISPID_EVENTOBJ+38\n#define DISPID_IHTMLEVENTOBJ3_SHIFTLEFT             DISPID_EVENTOBJ+39\n#define DISPID_IHTMLEVENTOBJ3_ALTLEFT               DISPID_EVENTOBJ+40\n#define DISPID_IHTMLEVENTOBJ3_CTRLLEFT              DISPID_EVENTOBJ+41\n#define DISPID_IHTMLEVENTOBJ3_IMECOMPOSITIONCHANGE  DISPID_EVENTOBJ+42\n#define DISPID_IHTMLEVENTOBJ3_IMENOTIFYCOMMAND      DISPID_EVENTOBJ+43\n#define DISPID_IHTMLEVENTOBJ3_IMENOTIFYDATA         DISPID_EVENTOBJ+44\n#define DISPID_IHTMLEVENTOBJ3_IMEREQUEST            DISPID_EVENTOBJ+46\n#define DISPID_IHTMLEVENTOBJ3_IMEREQUESTDATA        DISPID_EVENTOBJ+47\n#define DISPID_IHTMLEVENTOBJ3_KEYBOARDLAYOUT        DISPID_EVENTOBJ+45\n#define DISPID_IHTMLEVENTOBJ3_BEHAVIORCOOKIE        DISPID_EVENTOBJ+48\n#define DISPID_IHTMLEVENTOBJ3_BEHAVIORPART          DISPID_EVENTOBJ+49\n#define DISPID_IHTMLEVENTOBJ3_NEXTPAGE              DISPID_EVENTOBJ+50\n\n/* IHTMLEventObj4 */\n#define DISPID_IHTMLEVENTOBJ4_WHEELDELTA  DISPID_EVENTOBJ+51\n\n/* IHTMLStyleMedia */\n#define DISPID_IHTMLSTYLEMEDIA_TYPE         DISPID_STYLEMEDIA+1\n#define DISPID_IHTMLSTYLEMEDIA_MATCHMEDIUM  DISPID_STYLEMEDIA+2\n\n/* IHTMLScreen */\n#define DISPID_IHTMLSCREEN_COLORDEPTH             (DISPID_SCREEN+1)\n#define DISPID_IHTMLSCREEN_BUFFERDEPTH            (DISPID_SCREEN+2)\n#define DISPID_IHTMLSCREEN_WIDTH                  (DISPID_SCREEN+3)\n#define DISPID_IHTMLSCREEN_HEIGHT                 (DISPID_SCREEN+4)\n#define DISPID_IHTMLSCREEN_UPDATEINTERVAL         (DISPID_SCREEN+5)\n#define DISPID_IHTMLSCREEN_AVAILHEIGHT            (DISPID_SCREEN+6)\n#define DISPID_IHTMLSCREEN_AVAILWIDTH             (DISPID_SCREEN+7)\n#define DISPID_IHTMLSCREEN_FONTSMOOTHINGENABLED   (DISPID_SCREEN+8)\n\n/* IHTMLScreen2 */\n#define DISPID_IHTMLSCREEN2_LOGICALXDPI  DISPID_SCREEN+9\n#define DISPID_IHTMLSCREEN2_LOGICALYDPI  DISPID_SCREEN+10\n#define DISPID_IHTMLSCREEN2_DEVICEXDPI   DISPID_SCREEN+11\n#define DISPID_IHTMLSCREEN2_DEVICEYDPI   DISPID_SCREEN+12\n\n/* IHTMLScreen3 */\n#define DISPID_IHTMLSCREEN3_SYSTEMXDPI  DISPID_SCREEN+13\n#define DISPID_IHTMLSCREEN3_SYSTEMYDPI  DISPID_SCREEN+14\n\n/* IHTMLOptionElementFactory */\n#define DISPID_IHTMLOPTIONELEMENTFACTORY_CREATE   DISPID_VALUE\n\n/* IHTMLOptionElement */\n#define DISPID_IHTMLOPTIONELEMENT_SELECTED          (DISPID_OPTION+1)\n#define DISPID_IHTMLOPTIONELEMENT_VALUE             (DISPID_OPTION+2)\n#define DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED   (DISPID_OPTION+3)\n#define DISPID_IHTMLOPTIONELEMENT_INDEX             (DISPID_OPTION+5)\n#define DISPID_IHTMLOPTIONELEMENT_TEXT              (DISPID_OPTION+4)\n#define DISPID_IHTMLOPTIONELEMENT_FORM              (DISPID_OPTION+6)\n\n/* IHTMLOptionElement3 */\n#define DISPID_IHTMLOPTIONELEMENT3_LABEL  DISPID_OPTION+7\n\n/* IHTMLFormElement */\n#define DISPID_IHTMLFORMELEMENT_ACTION     (DISPID_FORM+1)\n#define DISPID_IHTMLFORMELEMENT_DIR        (DISPID_FORM+2)\n#define DISPID_IHTMLFORMELEMENT_ENCODING   (DISPID_FORM+3)\n#define DISPID_IHTMLFORMELEMENT_METHOD     (DISPID_FORM+4)\n#define DISPID_IHTMLFORMELEMENT_ELEMENTS   (DISPID_FORM+5)\n#define DISPID_IHTMLFORMELEMENT_TARGET     (DISPID_FORM+6)\n#define DISPID_IHTMLFORMELEMENT_SUBMIT     (DISPID_FORM+9)\n#define DISPID_IHTMLFORMELEMENT_RESET      (DISPID_FORM+10)\n#define DISPID_IHTMLFORMELEMENT_TAGS       (DISPID_COLLECTION+2)\n#define DISPID_IHTMLFORMELEMENT_NAME       STDPROPID_XOBJ_NAME\n#define DISPID_IHTMLFORMELEMENT_ONSUBMIT   DISPID_EVPROP_ONSUBMIT\n#define DISPID_IHTMLFORMELEMENT_ONRESET    DISPID_EVPROP_ONRESET\n#define DISPID_IHTMLFORMELEMENT_LENGTH     DISPID_COLLECTION\n#define DISPID_IHTMLFORMELEMENT__NEWENUM   DISPID_NEWENUM\n#define DISPID_IHTMLFORMELEMENT_ITEM       DISPID_VALUE\n\n/* HTMLFormElementEvents */\n#define DISPID_HTMLFORMELEMENTEVENTS_ONSUBMIT  DISPID_EVMETH_ONSUBMIT\n#define DISPID_HTMLFORMELEMENTEVENTS_ONRESET   DISPID_EVMETH_ONRESET\n\n/* HTMLFormElementEvents2 */\n#define DISPID_HTMLFORMELEMENTEVENTS2_ONSUBMIT  DISPID_EVMETH_ONSUBMIT\n#define DISPID_HTMLFORMELEMENTEVENTS2_ONRESET   DISPID_EVMETH_ONRESET\n\n/* IHTMLStyleSheetsCollection */\n#define DISPID_IHTMLSTYLESHEETSCOLLECTION_LENGTH     (DISPID_STYLESHEETS_COL+1)\n#define DISPID_IHTMLSTYLESHEETSCOLLECTION__NEWENUM   DISPID_NEWENUM\n#define DISPID_IHTMLSTYLESHEETSCOLLECTION_ITEM       DISPID_VALUE\n\n/* IHTMLStyleSheet */\n#define DISPID_IHTMLSTYLESHEET_TITLE              (DISPID_STYLESHEET+1)\n#define DISPID_IHTMLSTYLESHEET_PARENTSTYLESHEET   (DISPID_STYLESHEET+2)\n#define DISPID_IHTMLSTYLESHEET_OWNINGELEMENT      (DISPID_STYLESHEET+3)\n#define DISPID_IHTMLSTYLESHEET_READONLY           (DISPID_STYLESHEET+4)\n#define DISPID_IHTMLSTYLESHEET_IMPORTS            (DISPID_STYLESHEET+5)\n#define DISPID_IHTMLSTYLESHEET_HREF               (DISPID_STYLESHEET+6)\n#define DISPID_IHTMLSTYLESHEET_TYPE               (DISPID_STYLESHEET+7)\n#define DISPID_IHTMLSTYLESHEET_ID                 (DISPID_STYLESHEET+8)\n#define DISPID_IHTMLSTYLESHEET_ADDIMPORT          (DISPID_STYLESHEET+9)\n#define DISPID_IHTMLSTYLESHEET_ADDRULE            (DISPID_STYLESHEET+10)\n#define DISPID_IHTMLSTYLESHEET_REMOVEIMPORT       (DISPID_STYLESHEET+11)\n#define DISPID_IHTMLSTYLESHEET_REMOVERULE         (DISPID_STYLESHEET+12)\n#define DISPID_IHTMLSTYLESHEET_MEDIA              (DISPID_STYLESHEET+13)\n#define DISPID_IHTMLSTYLESHEET_CSSTEXT            (DISPID_STYLESHEET+14)\n#define DISPID_IHTMLSTYLESHEET_RULES              (DISPID_STYLESHEET+15)\n#define DISPID_IHTMLSTYLESHEET_DISABLED           STDPROPID_XOBJ_DISABLED\n\n/* IHTMLStyleSheet2 */\n#define DISPID_IHTMLSTYLESHEET2_PAGES             (DISPID_STYLESHEET+16)\n#define DISPID_IHTMLSTYLESHEET2_ADDPAGERULE       (DISPID_STYLESHEET+17)\n\n/* IHTMLStyleSheetRulesCollection */\n#define DISPID_IHTMLSTYLESHEETRULESCOLLECTION_LENGTH   (DISPID_STYLERULES_COL+1)\n#define DISPID_IHTMLSTYLESHEETRULESCOLLECTION_ITEM     DISPID_VALUE\n\n/* IHTMLStyleSheetPage */\n#define DISPID_IHTMLSTYLESHEETPAGE_SELECTOR       (DISPID_STYLEPAGE+1)\n#define DISPID_IHTMLSTYLESHEETPAGE_PSEUDOCLASS    (DISPID_STYLEPAGE+2)\n\n/* IHTMLStyleSheetPagesCollection */\n#define DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_LENGTH      (DISPID_STYLEPAGES_COL+1)\n#define DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_ITEM        DISPID_VALUE\n\n/* IHTMLStyleSheetRule */\n#define DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT   (DISPID_STYLERULE+1)\n#define DISPID_IHTMLSTYLESHEETRULE_READONLY       (DISPID_STYLERULE+2)\n#define DISPID_IHTMLSTYLESHEETRULE_STYLE          STDPROPID_XOBJ_STYLE\n\n/* IHTMLRuleStyle */\n#define DISPID_IHTMLRULESTYLE_SETATTRIBUTE                (DISPID_HTMLOBJECT+1)\n#define DISPID_IHTMLRULESTYLE_GETATTRIBUTE                (DISPID_HTMLOBJECT+2)\n#define DISPID_IHTMLRULESTYLE_REMOVEATTRIBUTE             (DISPID_HTMLOBJECT+3)\n#define DISPID_IHTMLRULESTYLE_FONTFAMILY                  DISPID_A_FONTFACE\n#define DISPID_IHTMLRULESTYLE_FONTSTYLE                   DISPID_A_FONTSTYLE\n#define DISPID_IHTMLRULESTYLE_FONTVARIANT                 DISPID_A_FONTVARIANT\n#define DISPID_IHTMLRULESTYLE_FONTWEIGHT                  DISPID_A_FONTWEIGHT\n#define DISPID_IHTMLRULESTYLE_FONTSIZE                    DISPID_A_FONTSIZE\n#define DISPID_IHTMLRULESTYLE_FONT                        DISPID_A_FONT\n#define DISPID_IHTMLRULESTYLE_COLOR                       DISPID_A_COLOR\n#define DISPID_IHTMLRULESTYLE_BACKGROUND                  DISPID_A_BACKGROUND\n#define DISPID_IHTMLRULESTYLE_BACKGROUNDIMAGE             DISPID_A_BACKGROUNDIMAGE\n#define DISPID_IHTMLRULESTYLE_BACKGROUNDREPEAT            DISPID_A_BACKGROUNDREPEAT\n#define DISPID_IHTMLRULESTYLE_BACKGROUNDATTACHMENT        DISPID_A_BACKGROUNDATTACHMENT\n#define DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITION          DISPID_A_BACKGROUNDPOSITION\n#define DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONX         DISPID_A_BACKGROUNDPOSX\n#define DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONY         DISPID_A_BACKGROUNDPOSY\n#define DISPID_IHTMLRULESTYLE_WORDSPACING                 DISPID_A_WORDSPACING\n#define DISPID_IHTMLRULESTYLE_LETTERSPACING               DISPID_A_LETTERSPACING\n#define DISPID_IHTMLRULESTYLE_TEXTDECORATION              DISPID_A_TEXTDECORATION\n#define DISPID_IHTMLRULESTYLE_TEXTDECORATIONNONE          DISPID_A_TEXTDECORATIONNONE\n#define DISPID_IHTMLRULESTYLE_TEXTDECORATIONUNDERLINE     DISPID_A_TEXTDECORATIONUNDERLINE\n#define DISPID_IHTMLRULESTYLE_TEXTDECORATIONOVERLINE      DISPID_A_TEXTDECORATIONOVERLINE\n#define DISPID_IHTMLRULESTYLE_TEXTDECORATIONLINETHROUGH   DISPID_A_TEXTDECORATIONLINETHROUGH\n#define DISPID_IHTMLRULESTYLE_TEXTDECORATIONBLINK         DISPID_A_TEXTDECORATIONBLINK\n#define DISPID_IHTMLRULESTYLE_VERTICALALIGN               DISPID_A_VERTICALALIGN\n#define DISPID_IHTMLRULESTYLE_TEXTTRANSFORM               DISPID_A_TEXTTRANSFORM\n#define DISPID_IHTMLRULESTYLE_TEXTINDENT                  DISPID_A_TEXTINDENT\n#define DISPID_IHTMLRULESTYLE_LINEHEIGHT                  DISPID_A_LINEHEIGHT\n#define DISPID_IHTMLRULESTYLE_MARGINTOP                   DISPID_A_MARGINTOP\n#define DISPID_IHTMLRULESTYLE_MARGINRIGHT                 DISPID_A_MARGINRIGHT\n#define DISPID_IHTMLRULESTYLE_MARGINBOTTOM                DISPID_A_MARGINBOTTOM\n#define DISPID_IHTMLRULESTYLE_MARGINLEFT                  DISPID_A_MARGINLEFT\n#define DISPID_IHTMLRULESTYLE_MARGIN                      DISPID_A_MARGIN\n#define DISPID_IHTMLRULESTYLE_PADDINGTOP                  DISPID_A_PADDINGTOP\n#define DISPID_IHTMLRULESTYLE_PADDINGRIGHT                DISPID_A_PADDINGRIGHT\n#define DISPID_IHTMLRULESTYLE_PADDINGBOTTOM               DISPID_A_PADDINGBOTTOM\n#define DISPID_IHTMLRULESTYLE_PADDINGLEFT                 DISPID_A_PADDINGLEFT\n#define DISPID_IHTMLRULESTYLE_PADDING                     DISPID_A_PADDING\n#define DISPID_IHTMLRULESTYLE_BORDER                      DISPID_A_BORDER\n#define DISPID_IHTMLRULESTYLE_BORDERTOP                   DISPID_A_BORDERTOP\n#define DISPID_IHTMLRULESTYLE_BORDERRIGHT                 DISPID_A_BORDERRIGHT\n#define DISPID_IHTMLRULESTYLE_BORDERBOTTOM                DISPID_A_BORDERBOTTOM\n#define DISPID_IHTMLRULESTYLE_BORDERLEFT                  DISPID_A_BORDERLEFT\n#define DISPID_IHTMLRULESTYLE_BORDERCOLOR                 DISPID_A_BORDERCOLOR\n#define DISPID_IHTMLRULESTYLE_BORDERTOPCOLOR              DISPID_A_BORDERTOPCOLOR\n#define DISPID_IHTMLRULESTYLE_BORDERRIGHTCOLOR            DISPID_A_BORDERRIGHTCOLOR\n#define DISPID_IHTMLRULESTYLE_BORDERBOTTOMCOLOR           DISPID_A_BORDERBOTTOMCOLOR\n#define DISPID_IHTMLRULESTYLE_BORDERLEFTCOLOR             DISPID_A_BORDERLEFTCOLOR\n#define DISPID_IHTMLRULESTYLE_BORDERWIDTH                 DISPID_A_BORDERWIDTH\n#define DISPID_IHTMLRULESTYLE_BORDERTOPWIDTH              DISPID_A_BORDERTOPWIDTH\n#define DISPID_IHTMLRULESTYLE_BORDERRIGHTWIDTH            DISPID_A_BORDERRIGHTWIDTH\n#define DISPID_IHTMLRULESTYLE_BORDERBOTTOMWIDTH           DISPID_A_BORDERBOTTOMWIDTH\n#define DISPID_IHTMLRULESTYLE_BORDERLEFTWIDTH             DISPID_A_BORDERLEFTWIDTH\n#define DISPID_IHTMLRULESTYLE_BORDERSTYLE                 DISPID_A_BORDERSTYLE\n#define DISPID_IHTMLRULESTYLE_BORDERTOPSTYLE              DISPID_A_BORDERTOPSTYLE\n#define DISPID_IHTMLRULESTYLE_BORDERRIGHTSTYLE            DISPID_A_BORDERRIGHTSTYLE\n#define DISPID_IHTMLRULESTYLE_BORDERBOTTOMSTYLE           DISPID_A_BORDERBOTTOMSTYLE\n#define DISPID_IHTMLRULESTYLE_BORDERLEFTSTYLE             DISPID_A_BORDERLEFTSTYLE\n#define DISPID_IHTMLRULESTYLE_STYLEFLOAT                  DISPID_A_FLOAT\n#define DISPID_IHTMLRULESTYLE_CLEAR                       DISPID_A_CLEAR\n#define DISPID_IHTMLRULESTYLE_DISPLAY                     DISPID_A_DISPLAY\n#define DISPID_IHTMLRULESTYLE_VISIBILITY                  DISPID_A_VISIBILITY\n#define DISPID_IHTMLRULESTYLE_LISTSTYLETYPE               DISPID_A_LISTSTYLETYPE\n#define DISPID_IHTMLRULESTYLE_LISTSTYLEPOSITION           DISPID_A_LISTSTYLEPOSITION\n#define DISPID_IHTMLRULESTYLE_LISTSTYLEIMAGE              DISPID_A_LISTSTYLEIMAGE\n#define DISPID_IHTMLRULESTYLE_LISTSTYLE                   DISPID_A_LISTSTYLE\n#define DISPID_IHTMLRULESTYLE_WHITESPACE                  DISPID_A_WHITESPACE\n#define DISPID_IHTMLRULESTYLE_POSITION                    DISPID_A_POSITION\n#define DISPID_IHTMLRULESTYLE_ZINDEX                      DISPID_A_ZINDEX\n#define DISPID_IHTMLRULESTYLE_OVERFLOW                    DISPID_A_OVERFLOW\n#define DISPID_IHTMLRULESTYLE_PAGEBREAKBEFORE             DISPID_A_PAGEBREAKBEFORE\n#define DISPID_IHTMLRULESTYLE_PAGEBREAKAFTER              DISPID_A_PAGEBREAKAFTER\n#define DISPID_IHTMLRULESTYLE_CSSTEXT                     DISPID_A_STYLETEXT\n#define DISPID_IHTMLRULESTYLE_CURSOR                      DISPID_A_CURSOR\n#define DISPID_IHTMLRULESTYLE_CLIP                        DISPID_A_CLIP\n#define DISPID_IHTMLRULESTYLE_FILTER                      DISPID_A_FILTER\n#define DISPID_IHTMLRULESTYLE_TOP                         STDPROPID_XOBJ_TOP\n#define DISPID_IHTMLRULESTYLE_LEFT                        STDPROPID_XOBJ_LEFT\n#define DISPID_IHTMLRULESTYLE_WIDTH                       STDPROPID_XOBJ_WIDTH\n#define DISPID_IHTMLRULESTYLE_HEIGHT                      STDPROPID_XOBJ_HEIGHT\n#define DISPID_IHTMLRULESTYLE_TEXTALIGN                   STDPROPID_XOBJ_BLOCKALIGN\n#define DISPID_IHTMLRULESTYLE_BACKGROUNDCOLOR             DISPID_BACKCOLOR\n\n/* IHTMLDOMNode */\n#define DISPID_IHTMLDOMNODE_NODETYPE           DISPID_ELEMENT+46\n#define DISPID_IHTMLDOMNODE_PARENTNODE         DISPID_ELEMENT+47\n#define DISPID_IHTMLDOMNODE_HASCHILDNODES      DISPID_ELEMENT+48\n#define DISPID_IHTMLDOMNODE_CHILDNODES         DISPID_ELEMENT+49\n#define DISPID_IHTMLDOMNODE_ATTRIBUTES         DISPID_ELEMENT+50\n#define DISPID_IHTMLDOMNODE_INSERTBEFORE       DISPID_ELEMENT+51\n#define DISPID_IHTMLDOMNODE_REMOVECHILD        DISPID_ELEMENT+52\n#define DISPID_IHTMLDOMNODE_REPLACECHILD       DISPID_ELEMENT+53\n#define DISPID_IHTMLDOMNODE_CLONENODE          DISPID_ELEMENT+61\n#define DISPID_IHTMLDOMNODE_REMOVENODE         DISPID_ELEMENT+66\n#define DISPID_IHTMLDOMNODE_SWAPNODE           DISPID_ELEMENT+68\n#define DISPID_IHTMLDOMNODE_REPLACENODE        DISPID_ELEMENT+67\n#define DISPID_IHTMLDOMNODE_APPENDCHILD        DISPID_ELEMENT+73\n#define DISPID_IHTMLDOMNODE_NODENAME           DISPID_ELEMENT+74\n#define DISPID_IHTMLDOMNODE_NODEVALUE          DISPID_ELEMENT+75\n#define DISPID_IHTMLDOMNODE_FIRSTCHILD         DISPID_ELEMENT+76\n#define DISPID_IHTMLDOMNODE_LASTCHILD          DISPID_ELEMENT+77\n#define DISPID_IHTMLDOMNODE_PREVIOUSSIBLING    DISPID_ELEMENT+78\n#define DISPID_IHTMLDOMNODE_NEXTSIBLING        DISPID_ELEMENT+79\n\n/* IHTMLDOMNode3 */\n#define DISPID_IHTMLDOMNODE3_PREFIX                   DISPID_ELEMENT+120\n#define DISPID_IHTMLDOMNODE3_LOCALNAME                DISPID_ELEMENT+118\n#define DISPID_IHTMLDOMNODE3_NAMESPACEURI             DISPID_ELEMENT+119\n#define DISPID_IHTMLDOMNODE3_TEXTCONTENT              DISPID_ELEMENT+127\n#define DISPID_IHTMLDOMNODE3_ISEQUALNODE              DISPID_ELEMENT+121\n#define DISPID_IHTMLDOMNODE3_LOOKUPNAMESPACEURI       DISPID_ELEMENT+122\n#define DISPID_IHTMLDOMNODE3_LOOKUPPREFIX             DISPID_ELEMENT+123\n#define DISPID_IHTMLDOMNODE3_ISDEFAULTNAMESPACE       DISPID_ELEMENT+124\n#define DISPID_IHTMLDOMNODE3_IE9_APPENDCHILD          DISPID_IE9_ELEMENT+18\n#define DISPID_IHTMLDOMNODE3_IE9_INSERTBEFORE         DISPID_IE9_ELEMENT+19\n#define DISPID_IHTMLDOMNODE3_IE9_REMOVECHILD          DISPID_IE9_ELEMENT+20\n#define DISPID_IHTMLDOMNODE3_IE9_REPLACECHILD         DISPID_IE9_ELEMENT+21\n#define DISPID_IHTMLDOMNODE3_ISSAMENODE               DISPID_ELEMENT+125\n#define DISPID_IHTMLDOMNODE3_COMPAREDOCUMENTPOSITION  DISPID_ELEMENT+126\n#define DISPID_IHTMLDOMNODE3_ISSUPPORTED              DISPID_IE9_ELEMENT+27\n\n/* IHTMLLinkElement */\n#define DISPID_IHTMLLINKELEMENT_HREF                DISPID_HEDELEMS+5\n#define DISPID_IHTMLLINKELEMENT_REL                 DISPID_HEDELEMS+6\n#define DISPID_IHTMLLINKELEMENT_REV                 DISPID_HEDELEMS+7\n#define DISPID_IHTMLLINKELEMENT_TYPE                DISPID_HEDELEMS+8\n#define DISPID_IHTMLLINKELEMENT_READYSTATE          DISPID_A_READYSTATE\n#define DISPID_IHTMLLINKELEMENT_ONREADYSTATECHANGE  DISPID_EVPROP_ONREADYSTATECHANGE\n#define DISPID_IHTMLLINKELEMENT_ONLOAD              DISPID_EVPROP_ONLOAD\n#define DISPID_IHTMLLINKELEMENT_ONERROR             DISPID_EVPROP_ONERROR\n#define DISPID_IHTMLLINKELEMENT_STYLESHEET          DISPID_HEDELEMS+14\n#define DISPID_IHTMLLINKELEMENT_DISABLED            STDPROPID_XOBJ_DISABLED\n#define DISPID_IHTMLLINKELEMENT_MEDIA               DISPID_HEDELEMS+16\n\n/* IHTMLLinkElement2 */\n#define DISPID_IHTMLLINKELEMENT2_TARGET  DISPID_HEDELEMS+17\n\n/* IHTMLLinkElement3 */\n#define DISPID_IHTMLLINKELEMENT3_CHARSET   DISPID_HEDELEMS+18\n#define DISPID_IHTMLLINKELEMENT3_HREFLANG  DISPID_HEDELEMS+19\n\n/* IHTMLLinkElement4 */\n#define DISPID_IHTMLLINKELEMENT4_IE8_HREF  DISPID_IE8_LINK\n\n/* IHTMLDOMNode2 */\n#define DISPID_IHTMLDOMNODE2_OWNERDOCUMENT     DISPID_ELEMENT+113\n\n/* IHTMLDOMTextNode */\n#define DISPID_IHTMLDOMTEXTNODE_DATA       DISPID_DOMTEXTNODE\n#define DISPID_IHTMLDOMTEXTNODE_TOSTRING   DISPID_DOMTEXTNODE+1\n#define DISPID_IHTMLDOMTEXTNODE_LENGTH     DISPID_DOMTEXTNODE+2\n#define DISPID_IHTMLDOMTEXTNODE_SPLITTEXT  DISPID_DOMTEXTNODE+3\n\n/* IHTMLDOMTextNode2 */\n#define DISPID_IHTMLDOMTEXTNODE2_SUBSTRINGDATA  DISPID_DOMTEXTNODE+4\n#define DISPID_IHTMLDOMTEXTNODE2_APPENDDATA     DISPID_DOMTEXTNODE+5\n#define DISPID_IHTMLDOMTEXTNODE2_INSERTDATA     DISPID_DOMTEXTNODE+6\n#define DISPID_IHTMLDOMTEXTNODE2_DELETEDATA     DISPID_DOMTEXTNODE+7\n#define DISPID_IHTMLDOMTEXTNODE2_REPLACEDATA    DISPID_DOMTEXTNODE+8\n\n/* IHTMLRenderStyle */\n#define DISPID_IHTMLRENDERSTYLE_TEXTLINETHROUGHSTYLE  DISPID_A_TEXTLINETHROUGHSTYLE\n#define DISPID_IHTMLRENDERSTYLE_TEXTUNDERLINESTYLE    DISPID_A_TEXTUNDERLINESTYLE\n#define DISPID_IHTMLRENDERSTYLE_TEXTEFFECT            DISPID_A_TEXTEFFECT\n#define DISPID_IHTMLRENDERSTYLE_TEXTCOLOR             DISPID_A_TEXTCOLOR\n#define DISPID_IHTMLRENDERSTYLE_TEXTBACKGROUNDCOLOR   DISPID_A_TEXTBACKGROUNDCOLOR\n#define DISPID_IHTMLRENDERSTYLE_TEXTDECORATIONCOLOR   DISPID_A_TEXTDECORATIONCOLOR\n#define DISPID_IHTMLRENDERSTYLE_RENDERINGPRIORITY     DISPID_A_RENDERINGPRIORITY\n#define DISPID_IHTMLRENDERSTYLE_DEFAULTTEXTSELECTION  DISPID_A_DEFAULTTEXTSELECTION\n#define DISPID_IHTMLRENDERSTYLE_TEXTDECORATION        DISPID_A_STYLETEXTDECORATION\n\n/* IHTMLDOMImplementation */\n#define DISPID_IHTMLDOMIMPLEMENTATION_HASFEATURE  DISPID_DOMIMPLEMENTATION\n\n/* IHTMLDOMAttribute */\n#define DISPID_IHTMLDOMATTRIBUTE_NODENAME   DISPID_DOMATTRIBUTE\n#define DISPID_IHTMLDOMATTRIBUTE_NODEVALUE  DISPID_DOMATTRIBUTE+2\n#define DISPID_IHTMLDOMATTRIBUTE_SPECIFIED  DISPID_DOMATTRIBUTE+1\n\n/* IHTMLDOMAttribute2 */\n#define DISPID_IHTMLDOMATTRIBUTE2_NAME             DISPID_DOMATTRIBUTE+3\n#define DISPID_IHTMLDOMATTRIBUTE2_VALUE            DISPID_DOMATTRIBUTE+4\n#define DISPID_IHTMLDOMATTRIBUTE2_EXPANDO          DISPID_DOMATTRIBUTE+5\n#define DISPID_IHTMLDOMATTRIBUTE2_NODETYPE         DISPID_DOMATTRIBUTE+6\n#define DISPID_IHTMLDOMATTRIBUTE2_PARENTNODE       DISPID_DOMATTRIBUTE+7\n#define DISPID_IHTMLDOMATTRIBUTE2_CHILDNODES       DISPID_DOMATTRIBUTE+8\n#define DISPID_IHTMLDOMATTRIBUTE2_FIRSTCHILD       DISPID_DOMATTRIBUTE+9\n#define DISPID_IHTMLDOMATTRIBUTE2_LASTCHILD        DISPID_DOMATTRIBUTE+10\n#define DISPID_IHTMLDOMATTRIBUTE2_PREVIOUSSIBLING  DISPID_DOMATTRIBUTE+11\n#define DISPID_IHTMLDOMATTRIBUTE2_NEXTSIBLING      DISPID_DOMATTRIBUTE+12\n#define DISPID_IHTMLDOMATTRIBUTE2_ATTRIBUTES       DISPID_DOMATTRIBUTE+13\n#define DISPID_IHTMLDOMATTRIBUTE2_OWNERDOCUMENT    DISPID_DOMATTRIBUTE+14\n#define DISPID_IHTMLDOMATTRIBUTE2_INSERTBEFORE     DISPID_DOMATTRIBUTE+15\n#define DISPID_IHTMLDOMATTRIBUTE2_REPLACECHILD     DISPID_DOMATTRIBUTE+16\n#define DISPID_IHTMLDOMATTRIBUTE2_REMOVECHILD      DISPID_DOMATTRIBUTE+17\n#define DISPID_IHTMLDOMATTRIBUTE2_APPENDCHILD      DISPID_DOMATTRIBUTE+18\n#define DISPID_IHTMLDOMATTRIBUTE2_HASCHILDNODES    DISPID_DOMATTRIBUTE+19\n#define DISPID_IHTMLDOMATTRIBUTE2_CLONENODE        DISPID_DOMATTRIBUTE+20\n\n/* IHTMLDOMAttribute3 */\n#define DISPID_IHTMLDOMATTRIBUTE3_IE8_NODEVALUE  DISPID_IE8_ATTR+3\n#define DISPID_IHTMLDOMATTRIBUTE3_IE8_VALUE      DISPID_IE8_ATTR+4\n#define DISPID_IHTMLDOMATTRIBUTE3_IE8_SPECIFIED  DISPID_IE8_ATTR\n#define DISPID_IHTMLDOMATTRIBUTE3_OWNERELEMENT   DISPID_IE8_ATTR+1\n\n/* IHTMLDocumentCompatibleInfo */\n#define DISPID_IHTMLDOCUMENTCOMPATIBLEINFO_USERAGENT  DISPID_DOCUMENTCOMPATIBLEINFO\n#define DISPID_IHTMLDOCUMENTCOMPATIBLEINFO_VERSION    DISPID_DOCUMENTCOMPATIBLEINFO+1\n\n/* IHTMLDocumentCompatibleInfoCollection */\n#define DISPID_IHTMLDOCUMENTCOMPATIBLEINFOCOLLECTION_ITEM    DISPID_DOCUMENTCOMPATIBLEINFOCOLLECTION\n#define DISPID_IHTMLDOCUMENTCOMPATIBLEINFOCOLLECTION_LENGTH  DISPID_DOCUMENTCOMPATIBLEINFOCOLLECTION+1\n\n/* IHTMLBodyElement */\n#define DISPID_IHTMLBODYELEMENT_BACKGROUND        DISPID_A_BACKGROUNDIMAGE\n#define DISPID_IHTMLBODYELEMENT_BGPROPERTIES      DISPID_A_BACKGROUNDATTACHMENT\n#define DISPID_IHTMLBODYELEMENT_LEFTMARGIN        DISPID_A_MARGINLEFT\n#define DISPID_IHTMLBODYELEMENT_TOPMARGIN         DISPID_A_MARGINTOP\n#define DISPID_IHTMLBODYELEMENT_RIGHTMARGIN       DISPID_A_MARGINRIGHT\n#define DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN      DISPID_A_MARGINBOTTOM\n#define DISPID_IHTMLBODYELEMENT_NOWRAP            DISPID_A_NOWRAP\n#define DISPID_IHTMLBODYELEMENT_BGCOLOR           DISPID_BACKCOLOR\n#define DISPID_IHTMLBODYELEMENT_TEXT              DISPID_A_COLOR\n#define DISPID_IHTMLBODYELEMENT_LINK              DISPID_BODY+10\n#define DISPID_IHTMLBODYELEMENT_VLINK             DISPID_BODY+12\n#define DISPID_IHTMLBODYELEMENT_ALINK             DISPID_BODY+11\n#define DISPID_IHTMLBODYELEMENT_ONLOAD            DISPID_EVPROP_ONLOAD\n#define DISPID_IHTMLBODYELEMENT_ONUNLOAD          DISPID_EVPROP_ONUNLOAD\n#define DISPID_IHTMLBODYELEMENT_SCROLL            DISPID_A_SCROLL\n#define DISPID_IHTMLBODYELEMENT_ONSELECT          DISPID_EVPROP_ONSELECT\n#define DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD    DISPID_EVPROP_ONBEFOREUNLOAD\n#define DISPID_IHTMLBODYELEMENT_CREATETEXTRANGE   DISPID_BODY+13\n\n/* IHTMLBodyElement2 */\n#define DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT   DISPID_EVPROP_ONBEFOREPRINT\n#define DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT    DISPID_EVPROP_ONAFTERPRINT\n\n/* IHTMLAnchorElement */\n#define DISPID_IHTMLANCHORELEMENT_HREF          DISPID_VALUE\n#define DISPID_IHTMLANCHORELEMENT_TARGET        DISPID_ANCHOR+3\n#define DISPID_IHTMLANCHORELEMENT_REL           DISPID_ANCHOR+5\n#define DISPID_IHTMLANCHORELEMENT_REV           DISPID_ANCHOR+6\n#define DISPID_IHTMLANCHORELEMENT_URN           DISPID_ANCHOR+7\n#define DISPID_IHTMLANCHORELEMENT_METHODS       DISPID_ANCHOR+8\n#define DISPID_IHTMLANCHORELEMENT_NAME          STDPROPID_XOBJ_NAME\n#define DISPID_IHTMLANCHORELEMENT_HOST          DISPID_ANCHOR+12\n#define DISPID_IHTMLANCHORELEMENT_HOSTNAME      DISPID_ANCHOR+13\n#define DISPID_IHTMLANCHORELEMENT_PATHNAME      DISPID_ANCHOR+14\n#define DISPID_IHTMLANCHORELEMENT_PORT          DISPID_ANCHOR+15\n#define DISPID_IHTMLANCHORELEMENT_PROTOCOL      DISPID_ANCHOR+16\n#define DISPID_IHTMLANCHORELEMENT_SEARCH        DISPID_ANCHOR+17\n#define DISPID_IHTMLANCHORELEMENT_HASH          DISPID_ANCHOR+18\n#define DISPID_IHTMLANCHORELEMENT_ONBLUR        DISPID_EVPROP_ONBLUR\n#define DISPID_IHTMLANCHORELEMENT_ONFOCUS       DISPID_EVPROP_ONFOCUS\n#define DISPID_IHTMLANCHORELEMENT_ACCESSKEY     DISPID_SITE+5\n#define DISPID_IHTMLANCHORELEMENT_PROTOCOLLONG  DISPID_ANCHOR+31\n#define DISPID_IHTMLANCHORELEMENT_MIMETYPE      DISPID_ANCHOR+30\n#define DISPID_IHTMLANCHORELEMENT_NAMEPROP      DISPID_ANCHOR+32\n#define DISPID_IHTMLANCHORELEMENT_TABINDEX      STDPROPID_XOBJ_TABINDEX\n#define DISPID_IHTMLANCHORELEMENT_FOCUS         DISPID_SITE+0\n#define DISPID_IHTMLANCHORELEMENT_BLUR          DISPID_SITE+2\n\n/* IHTMLAnchorElement2 */\n#define DISPID_IHTMLANCHORELEMENT2_CHARSET   DISPID_ANCHOR+23\n#define DISPID_IHTMLANCHORELEMENT2_COORDS    DISPID_ANCHOR+24\n#define DISPID_IHTMLANCHORELEMENT2_HREFLANG  DISPID_ANCHOR+25\n#define DISPID_IHTMLANCHORELEMENT2_SHAPE     DISPID_ANCHOR+26\n#define DISPID_IHTMLANCHORELEMENT2_TYPE      DISPID_ANCHOR+27\n\n/* IHTMLAnchorElement3 */\n#define DISPID_IHTMLANCHORELEMENT3_IE8_SHAPE   DISPID_IE8_ANCHOR+1\n#define DISPID_IHTMLANCHORELEMENT3_IE8_COORDS  DISPID_IE8_ANCHOR+2\n#define DISPID_IHTMLANCHORELEMENT3_IE8_HREF    DISPID_IE8_ANCHOR+3\n\n/* IHTMLAreaElement */\n#define DISPID_IHTMLAREAELEMENT_SHAPE     DISPID_AREA+1\n#define DISPID_IHTMLAREAELEMENT_COORDS    DISPID_AREA+2\n#define DISPID_IHTMLAREAELEMENT_HREF      DISPID_VALUE\n#define DISPID_IHTMLAREAELEMENT_TARGET    DISPID_AREA+4\n#define DISPID_IHTMLAREAELEMENT_ALT       DISPID_AREA+5\n#define DISPID_IHTMLAREAELEMENT_NOHREF    DISPID_AREA+6\n#define DISPID_IHTMLAREAELEMENT_HOST      DISPID_AREA+7\n#define DISPID_IHTMLAREAELEMENT_HOSTNAME  DISPID_AREA+8\n#define DISPID_IHTMLAREAELEMENT_PATHNAME  DISPID_AREA+9\n#define DISPID_IHTMLAREAELEMENT_PORT      DISPID_AREA+10\n#define DISPID_IHTMLAREAELEMENT_PROTOCOL  DISPID_AREA+11\n#define DISPID_IHTMLAREAELEMENT_SEARCH    DISPID_AREA+12\n#define DISPID_IHTMLAREAELEMENT_HASH      DISPID_AREA+13\n#define DISPID_IHTMLAREAELEMENT_ONBLUR    DISPID_EVPROP_ONBLUR\n#define DISPID_IHTMLAREAELEMENT_ONFOCUS   DISPID_EVPROP_ONFOCUS\n#define DISPID_IHTMLAREAELEMENT_TABINDEX  STDPROPID_XOBJ_TABINDEX\n#define DISPID_IHTMLAREAELEMENT_FOCUS     DISPID_SITE+0\n#define DISPID_IHTMLAREAELEMENT_BLUR      DISPID_SITE+2\n\n/* IHTMLAreaElement2 */\n#define DISPID_IHTMLAREAELEMENT2_IE8_SHAPE   DISPID_IE8_AREA+1\n#define DISPID_IHTMLAREAELEMENT2_IE8_COORDS  DISPID_IE8_AREA+2\n#define DISPID_IHTMLAREAELEMENT2_IE8_HREF    DISPID_IE8_AREA+3\n\n/* IHTMLLabelElement */\n#define DISPID_IHTMLLABELELEMENT_HTMLFOR    DISPID_LABEL\n#define DISPID_IHTMLLABELELEMENT_ACCESSKEY  DISPID_SITE+5\n\n/* IHTMLLabelElement2 */\n#define DISPID_IHTMLLABELELEMENT2_FORM  DISPID_LABEL+2\n\n/* IHTMLTxtRange */\n#define DISPID_IHTMLTXTRANGE_HTMLTEXT                DISPID_RANGE+3\n#define DISPID_IHTMLTXTRANGE_TEXT                    DISPID_RANGE+4\n#define DISPID_IHTMLTXTRANGE_PARENTELEMENT           DISPID_RANGE+6\n#define DISPID_IHTMLTXTRANGE_DUPLICATE               DISPID_RANGE+8\n#define DISPID_IHTMLTXTRANGE_INRANGE                 DISPID_RANGE+10\n#define DISPID_IHTMLTXTRANGE_ISEQUAL                 DISPID_RANGE+11\n#define DISPID_IHTMLTXTRANGE_SCROLLINTOVIEW          DISPID_RANGE+12\n#define DISPID_IHTMLTXTRANGE_COLLAPSE                DISPID_RANGE+13\n#define DISPID_IHTMLTXTRANGE_EXPAND                  DISPID_RANGE+14\n#define DISPID_IHTMLTXTRANGE_MOVE                    DISPID_RANGE+15\n#define DISPID_IHTMLTXTRANGE_MOVESTART               DISPID_RANGE+16\n#define DISPID_IHTMLTXTRANGE_MOVEEND                 DISPID_RANGE+17\n#define DISPID_IHTMLTXTRANGE_SELECT                  DISPID_RANGE+24\n#define DISPID_IHTMLTXTRANGE_PASTEHTML               DISPID_RANGE+26\n#define DISPID_IHTMLTXTRANGE_MOVETOELEMENTTEXT       DISPID_RANGE+1\n#define DISPID_IHTMLTXTRANGE_SETENDPOINT             DISPID_RANGE+25\n#define DISPID_IHTMLTXTRANGE_COMPAREENDPOINTS        DISPID_RANGE+18\n#define DISPID_IHTMLTXTRANGE_FINDTEXT                DISPID_RANGE+19\n#define DISPID_IHTMLTXTRANGE_MOVETOPOINT             DISPID_RANGE+20\n#define DISPID_IHTMLTXTRANGE_GETBOOKMARK             DISPID_RANGE+21\n#define DISPID_IHTMLTXTRANGE_MOVETOBOOKMARK          DISPID_RANGE+9\n#define DISPID_IHTMLTXTRANGE_QUERYCOMMANDSUPPORTED   DISPID_RANGE+27\n#define DISPID_IHTMLTXTRANGE_QUERYCOMMANDENABLED     DISPID_RANGE+28\n#define DISPID_IHTMLTXTRANGE_QUERYCOMMANDSTATE       DISPID_RANGE+29\n#define DISPID_IHTMLTXTRANGE_QUERYCOMMANDINDETERM    DISPID_RANGE+30\n#define DISPID_IHTMLTXTRANGE_QUERYCOMMANDTEXT        DISPID_RANGE+31\n#define DISPID_IHTMLTXTRANGE_QUERYCOMMANDVALUE       DISPID_RANGE+32\n#define DISPID_IHTMLTXTRANGE_EXECCOMMAND             DISPID_RANGE+33\n#define DISPID_IHTMLTXTRANGE_EXECCOMMANDSHOWHELP     DISPID_RANGE+34\n\n/* IHTMLTextAreaElement */\n#define DISPID_IHTMLTEXTAREAELEMENT_TYPE             DISPID_INPUT\n#define DISPID_IHTMLTEXTAREAELEMENT_VALUE            DISPID_A_VALUE\n#define DISPID_IHTMLTEXTAREAELEMENT_NAME             STDPROPID_XOBJ_NAME\n#define DISPID_IHTMLTEXTAREAELEMENT_STATUS           DISPID_INPUT+1\n#define DISPID_IHTMLTEXTAREAELEMENT_DISABLED         STDPROPID_XOBJ_DISABLED\n#define DISPID_IHTMLTEXTAREAELEMENT_FORM             DISPID_SITE+4\n#define DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE     DISPID_DEFAULTVALUE\n#define DISPID_IHTMLTEXTAREAELEMENT_SELECT           DISPID_RICHTEXT+5\n#define DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE         DISPID_EVPROP_ONCHANGE\n#define DISPID_IHTMLTEXTAREAELEMENT_ONSELECT         DISPID_EVPROP_ONSELECT\n#define DISPID_IHTMLTEXTAREAELEMENT_READONLY         DISPID_RICHTEXT+4\n#define DISPID_IHTMLTEXTAREAELEMENT_ROWS             DISPID_RICHTEXT+1\n#define DISPID_IHTMLTEXTAREAELEMENT_COLS             DISPID_RICHTEXT+2\n#define DISPID_IHTMLTEXTAREAELEMENT_WRAP             DISPID_RICHTEXT+3\n#define DISPID_IHTMLTEXTAREAELEMENT_CREATETEXTRANGE  DISPID_RICHTEXT+6\n\n/* IHTMLDOMRange */\n#define DISPID_IHTMLDOMRANGE_STARTCONTAINER           DISPID_DOMRANGE+1\n#define DISPID_IHTMLDOMRANGE_STARTOFFSET              DISPID_DOMRANGE+2\n#define DISPID_IHTMLDOMRANGE_ENDCONTAINER             DISPID_DOMRANGE+3\n#define DISPID_IHTMLDOMRANGE_ENDOFFSET                DISPID_DOMRANGE+4\n#define DISPID_IHTMLDOMRANGE_COLLAPSED                DISPID_DOMRANGE+5\n#define DISPID_IHTMLDOMRANGE_COMMONANCESTORCONTAINER  DISPID_DOMRANGE+6\n#define DISPID_IHTMLDOMRANGE_SETSTART                 DISPID_DOMRANGE+7\n#define DISPID_IHTMLDOMRANGE_SETEND                   DISPID_DOMRANGE+8\n#define DISPID_IHTMLDOMRANGE_SETSTARTBEFORE           DISPID_DOMRANGE+9\n#define DISPID_IHTMLDOMRANGE_SETSTARTAFTER            DISPID_DOMRANGE+10\n#define DISPID_IHTMLDOMRANGE_SETENDBEFORE             DISPID_DOMRANGE+11\n#define DISPID_IHTMLDOMRANGE_SETENDAFTER              DISPID_DOMRANGE+12\n#define DISPID_IHTMLDOMRANGE_COLLAPSE                 DISPID_DOMRANGE+13\n#define DISPID_IHTMLDOMRANGE_SELECTNODE               DISPID_DOMRANGE+14\n#define DISPID_IHTMLDOMRANGE_SELECTNODECONTENTS       DISPID_DOMRANGE+15\n#define DISPID_IHTMLDOMRANGE_COMPAREBOUNDARYPOINTS    DISPID_DOMRANGE+16\n#define DISPID_IHTMLDOMRANGE_DELETECONTENTS           DISPID_DOMRANGE+17\n#define DISPID_IHTMLDOMRANGE_EXTRACTCONTENTS          DISPID_DOMRANGE+18\n#define DISPID_IHTMLDOMRANGE_CLONECONTENTS            DISPID_DOMRANGE+19\n#define DISPID_IHTMLDOMRANGE_INSERTNODE               DISPID_DOMRANGE+20\n#define DISPID_IHTMLDOMRANGE_SURROUNDCONTENTS         DISPID_DOMRANGE+21\n#define DISPID_IHTMLDOMRANGE_CLONERANGE               DISPID_DOMRANGE+22\n#define DISPID_IHTMLDOMRANGE_TOSTRING                 DISPID_DOMRANGE+23\n#define DISPID_IHTMLDOMRANGE_DETACH                   DISPID_DOMRANGE+24\n#define DISPID_IHTMLDOMRANGE_GETCLIENTRECTS           DISPID_DOMRANGE+25\n#define DISPID_IHTMLDOMRANGE_GETBOUNDINGCLIENTRECT    DISPID_DOMRANGE+26\n\n/* IHTMLButtonElement */\n#define DISPID_IHTMLBUTTONELEMENT_TYPE             DISPID_INPUT\n#define DISPID_IHTMLBUTTONELEMENT_VALUE            DISPID_A_VALUE\n#define DISPID_IHTMLBUTTONELEMENT_NAME             STDPROPID_XOBJ_NAME\n#define DISPID_IHTMLBUTTONELEMENT_STATUS           DISPID_BUTTON+1\n#define DISPID_IHTMLBUTTONELEMENT_DISABLED         STDPROPID_XOBJ_DISABLED\n#define DISPID_IHTMLBUTTONELEMENT_FORM             DISPID_SITE+4\n#define DISPID_IHTMLBUTTONELEMENT_CREATETEXTRANGE  DISPID_BUTTON+2\n\n/* IHTMLInputElement */\n#define DISPID_IHTMLINPUTELEMENT_TYPE             DISPID_INPUT\n#define DISPID_IHTMLINPUTELEMENT_VALUE            DISPID_A_VALUE\n#define DISPID_IHTMLINPUTELEMENT_NAME             STDPROPID_XOBJ_NAME\n#define DISPID_IHTMLINPUTELEMENT_STATUS           DISPID_INPUT+1\n#define DISPID_IHTMLINPUTELEMENT_DISABLED         STDPROPID_XOBJ_DISABLED\n#define DISPID_IHTMLINPUTELEMENT_FORM             DISPID_SITE+4\n#define DISPID_IHTMLINPUTELEMENT_SIZE             DISPID_INPUT+2\n#define DISPID_IHTMLINPUTELEMENT_MAXLENGTH        DISPID_INPUT+3\n#define DISPID_IHTMLINPUTELEMENT_SELECT           DISPID_INPUT+4\n#define DISPID_IHTMLINPUTELEMENT_ONCHANGE         DISPID_EVPROP_ONCHANGE\n#define DISPID_IHTMLINPUTELEMENT_ONSELECT         DISPID_EVPROP_ONSELECT\n#define DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE     DISPID_DEFAULTVALUE\n#define DISPID_IHTMLINPUTELEMENT_READONLY         DISPID_INPUT+5\n#define DISPID_IHTMLINPUTELEMENT_CREATETEXTRANGE  DISPID_INPUT+6\n#define DISPID_IHTMLINPUTELEMENT_INDETERMINATE    DISPID_INPUT+7\n#define DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED   DISPID_INPUT+8\n#define DISPID_IHTMLINPUTELEMENT_CHECKED          DISPID_INPUT+9\n#define DISPID_IHTMLINPUTELEMENT_BORDER           DISPID_INPUT+12\n#define DISPID_IHTMLINPUTELEMENT_VSPACE           DISPID_INPUT+13\n#define DISPID_IHTMLINPUTELEMENT_HSPACE           DISPID_INPUT+14\n#define DISPID_IHTMLINPUTELEMENT_ALT              DISPID_INPUT+10\n#define DISPID_IHTMLINPUTELEMENT_SRC              DISPID_INPUT+11\n#define DISPID_IHTMLINPUTELEMENT_LOWSRC           DISPID_INPUT+15\n#define DISPID_IHTMLINPUTELEMENT_VRML             DISPID_INPUT+16\n#define DISPID_IHTMLINPUTELEMENT_DYNSRC           DISPID_INPUT+17\n#define DISPID_IHTMLINPUTELEMENT_READYSTATE       DISPID_A_READYSTATE\n#define DISPID_IHTMLINPUTELEMENT_COMPLETE         DISPID_INPUT+18\n#define DISPID_IHTMLINPUTELEMENT_LOOP             DISPID_INPUT+19\n#define DISPID_IHTMLINPUTELEMENT_ALIGN            STDPROPID_XOBJ_CONTROLALIGN\n#define DISPID_IHTMLINPUTELEMENT_ONLOAD           DISPID_EVPROP_ONLOAD\n#define DISPID_IHTMLINPUTELEMENT_ONERROR          DISPID_EVPROP_ONERROR\n#define DISPID_IHTMLINPUTELEMENT_ONABORT          DISPID_EVPROP_ONABORT\n#define DISPID_IHTMLINPUTELEMENT_WIDTH            STDPROPID_XOBJ_WIDTH\n#define DISPID_IHTMLINPUTELEMENT_HEIGHT           STDPROPID_XOBJ_HEIGHT\n#define DISPID_IHTMLINPUTELEMENT_START            DISPID_INPUT+20\n\n/* IHTMLInputElement2 */\n#define DISPID_IHTMLINPUTELEMENT2_ACCEPT  DISPID_INPUT+22\n#define DISPID_IHTMLINPUTELEMENT2_USEMAP  DISPID_INPUT+23\n\n/* IHTMLInputTextElement */\n#define DISPID_IHTMLINPUTTEXTELEMENT_TYPE             DISPID_INPUT\n#define DISPID_IHTMLINPUTTEXTELEMENT_VALUE            DISPID_A_VALUE\n#define DISPID_IHTMLINPUTTEXTELEMENT_NAME             STDPROPID_XOBJ_NAME\n#define DISPID_IHTMLINPUTTEXTELEMENT_STATUS           DISPID_INPUT+21\n#define DISPID_IHTMLINPUTTEXTELEMENT_DISABLED         STDPROPID_XOBJ_DISABLED\n#define DISPID_IHTMLINPUTTEXTELEMENT_FORM             DISPID_SITE+4\n#define DISPID_IHTMLINPUTTEXTELEMENT_DEFAULTVALUE     DISPID_DEFAULTVALUE\n#define DISPID_IHTMLINPUTTEXTELEMENT_SIZE             DISPID_INPUT+2\n#define DISPID_IHTMLINPUTTEXTELEMENT_MAXLENGTH        DISPID_INPUT+3\n#define DISPID_IHTMLINPUTTEXTELEMENT_SELECT           DISPID_INPUT+4\n#define DISPID_IHTMLINPUTTEXTELEMENT_ONCHANGE         DISPID_EVPROP_ONCHANGE\n#define DISPID_IHTMLINPUTTEXTELEMENT_ONSELECT         DISPID_EVPROP_ONSELECT\n#define DISPID_IHTMLINPUTTEXTELEMENT_READONLY         DISPID_INPUT+5\n#define DISPID_IHTMLINPUTTEXTELEMENT_CREATETEXTRANGE  DISPID_INPUT+6\n\n/* IHTMLInputTextElement2 */\n#define DISPID_IHTMLINPUTTEXTELEMENT2_SELECTIONSTART     DISPID_INPUT+25\n#define DISPID_IHTMLINPUTTEXTELEMENT2_SELECTIONEND       DISPID_INPUT+26\n#define DISPID_IHTMLINPUTTEXTELEMENT2_SETSELECTIONRANGE  DISPID_INPUT+27\n\n/* IHTMLSelectElement */\n#define DISPID_IHTMLSELECTELEMENT_SIZE           DISPID_SELECT+2\n#define DISPID_IHTMLSELECTELEMENT_MULTIPLE       DISPID_SELECT+3\n#define DISPID_IHTMLSELECTELEMENT_NAME           STDPROPID_XOBJ_NAME\n#define DISPID_IHTMLSELECTELEMENT_OPTIONS        DISPID_SELECT+5\n#define DISPID_IHTMLSELECTELEMENT_ONCHANGE       DISPID_EVPROP_ONCHANGE\n#define DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX  DISPID_SELECT+10\n#define DISPID_IHTMLSELECTELEMENT_TYPE           DISPID_SELECT+12\n#define DISPID_IHTMLSELECTELEMENT_VALUE          DISPID_SELECT+11\n#define DISPID_IHTMLSELECTELEMENT_DISABLED       STDPROPID_XOBJ_DISABLED\n#define DISPID_IHTMLSELECTELEMENT_FORM           DISPID_SITE+4\n#define DISPID_IHTMLSELECTELEMENT_ADD            DISPID_COLLECTION+3\n#define DISPID_IHTMLSELECTELEMENT_REMOVE         DISPID_COLLECTION+4\n#define DISPID_IHTMLSELECTELEMENT_LENGTH         DISPID_COLLECTION\n#define DISPID_IHTMLSELECTELEMENT__NEWENUM       DISPID_NEWENUM\n#define DISPID_IHTMLSELECTELEMENT_ITEM           DISPID_VALUE\n#define DISPID_IHTMLSELECTELEMENT_TAGS           DISPID_COLLECTION+2\n\n/* IHTMLSelectElement2 */\n#define DISPID_IHTMLSELECTELEMENT2_URNS  DISPID_COLLECTION+5\n\n/* IHTMLSelectElement4 */\n#define DISPID_IHTMLSELECTELEMENT4_NAMEDITEM  DISPID_COLLECTION+6\n\n/* IHTMLHtmlElement */\n#define DISPID_IHTMLHTMLELEMENT_VERSION  DISPID_HEDELEMS+1\n\n/* IHTMLHeadElement */\n#define DISPID_IHTMLHEADELEMENT_PROFILE  DISPID_HEDELEMS+1\n\n/* IHTMLHeadElement2 */\n#define DISPID_IHTMLHEADELEMENT2_IE8_PROFILE  DISPID_IE8_HEAD\n\n/* IHTMLTitleElement */\n#define DISPID_IHTMLTITLEELEMENT_TEXT  DISPID_A_VALUE\n\n/* IHTMLMetaElement */\n#define DISPID_IHTMLMETAELEMENT_HTTPEQUIV  DISPID_HEDELEMS+1\n#define DISPID_IHTMLMETAELEMENT_CONTENT    DISPID_HEDELEMS+2\n#define DISPID_IHTMLMETAELEMENT_NAME       STDPROPID_XOBJ_NAME\n#define DISPID_IHTMLMETAELEMENT_URL        DISPID_HEDELEMS+3\n#define DISPID_IHTMLMETAELEMENT_CHARSET    DISPID_HEDELEMS+13\n\n/* IHTMLMetaElement2 */\n#define DISPID_IHTMLMETAELEMENT2_SCHEME  DISPID_HEDELEMS+20\n\n/* IHTMLMetaElement3 */\n#define DISPID_IHTMLMETAELEMENT3_IE8_URL  DISPID_IE8_META\n\n/* IHTMLRect */\n#define DISPID_IHTMLRECT_LEFT    DISPID_OMRECT+1\n#define DISPID_IHTMLRECT_TOP     DISPID_OMRECT+2\n#define DISPID_IHTMLRECT_RIGHT   DISPID_OMRECT+3\n#define DISPID_IHTMLRECT_BOTTOM  DISPID_OMRECT+4\n\n/* IHTMLRectCollection */\n#define DISPID_IHTMLRECTCOLLECTION_LENGTH    DISPID_COLLECTION\n#define DISPID_IHTMLRECTCOLLECTION__NEWENUM  DISPID_NEWENUM\n#define DISPID_IHTMLRECTCOLLECTION_ITEM      DISPID_VALUE\n\n/* IHTMLCurrentStyle */\n#define DISPID_IHTMLCURRENTSTYLE_POSITION              DISPID_A_POSITION\n#define DISPID_IHTMLCURRENTSTYLE_STYLEFLOAT            DISPID_A_FLOAT\n#define DISPID_IHTMLCURRENTSTYLE_COLOR                 DISPID_A_COLOR\n#define DISPID_IHTMLCURRENTSTYLE_BACKGROUNDCOLOR       DISPID_BACKCOLOR\n#define DISPID_IHTMLCURRENTSTYLE_FONTFAMILY            DISPID_A_FONTFACE\n#define DISPID_IHTMLCURRENTSTYLE_FONTSTYLE             DISPID_A_FONTSTYLE\n#define DISPID_IHTMLCURRENTSTYLE_FONTVARIANT           DISPID_A_FONTVARIANT\n#define DISPID_IHTMLCURRENTSTYLE_FONTWEIGHT            DISPID_A_FONTWEIGHT\n#define DISPID_IHTMLCURRENTSTYLE_FONTSIZE              DISPID_A_FONTSIZE\n#define DISPID_IHTMLCURRENTSTYLE_BACKGROUNDIMAGE       DISPID_A_BACKGROUNDIMAGE\n#define DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONX   DISPID_A_BACKGROUNDPOSX\n#define DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONY   DISPID_A_BACKGROUNDPOSY\n#define DISPID_IHTMLCURRENTSTYLE_BACKGROUNDREPEAT      DISPID_A_BACKGROUNDREPEAT\n#define DISPID_IHTMLCURRENTSTYLE_BORDERLEFTCOLOR       DISPID_A_BORDERLEFTCOLOR\n#define DISPID_IHTMLCURRENTSTYLE_BORDERTOPCOLOR        DISPID_A_BORDERTOPCOLOR\n#define DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTCOLOR      DISPID_A_BORDERRIGHTCOLOR\n#define DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMCOLOR     DISPID_A_BORDERBOTTOMCOLOR\n#define DISPID_IHTMLCURRENTSTYLE_BORDERTOPSTYLE        DISPID_A_BORDERTOPSTYLE\n#define DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTSTYLE      DISPID_A_BORDERRIGHTSTYLE\n#define DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMSTYLE     DISPID_A_BORDERBOTTOMSTYLE\n#define DISPID_IHTMLCURRENTSTYLE_BORDERLEFTSTYLE       DISPID_A_BORDERLEFTSTYLE\n#define DISPID_IHTMLCURRENTSTYLE_BORDERTOPWIDTH        DISPID_A_BORDERTOPWIDTH\n#define DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTWIDTH      DISPID_A_BORDERRIGHTWIDTH\n#define DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMWIDTH     DISPID_A_BORDERBOTTOMWIDTH\n#define DISPID_IHTMLCURRENTSTYLE_BORDERLEFTWIDTH       DISPID_A_BORDERLEFTWIDTH\n#define DISPID_IHTMLCURRENTSTYLE_LEFT                  STDPROPID_XOBJ_LEFT\n#define DISPID_IHTMLCURRENTSTYLE_TOP                   STDPROPID_XOBJ_TOP\n#define DISPID_IHTMLCURRENTSTYLE_WIDTH                 STDPROPID_XOBJ_WIDTH\n#define DISPID_IHTMLCURRENTSTYLE_HEIGHT                STDPROPID_XOBJ_HEIGHT\n#define DISPID_IHTMLCURRENTSTYLE_PADDINGLEFT           DISPID_A_PADDINGLEFT\n#define DISPID_IHTMLCURRENTSTYLE_PADDINGTOP            DISPID_A_PADDINGTOP\n#define DISPID_IHTMLCURRENTSTYLE_PADDINGRIGHT          DISPID_A_PADDINGRIGHT\n#define DISPID_IHTMLCURRENTSTYLE_PADDINGBOTTOM         DISPID_A_PADDINGBOTTOM\n#define DISPID_IHTMLCURRENTSTYLE_TEXTALIGN             STDPROPID_XOBJ_BLOCKALIGN\n#define DISPID_IHTMLCURRENTSTYLE_TEXTDECORATION        DISPID_A_TEXTDECORATION\n#define DISPID_IHTMLCURRENTSTYLE_DISPLAY               DISPID_A_DISPLAY\n#define DISPID_IHTMLCURRENTSTYLE_VISIBILITY            DISPID_A_VISIBILITY\n#define DISPID_IHTMLCURRENTSTYLE_ZINDEX                DISPID_A_ZINDEX\n#define DISPID_IHTMLCURRENTSTYLE_LETTERSPACING         DISPID_A_LETTERSPACING\n#define DISPID_IHTMLCURRENTSTYLE_LINEHEIGHT            DISPID_A_LINEHEIGHT\n#define DISPID_IHTMLCURRENTSTYLE_TEXTINDENT            DISPID_A_TEXTINDENT\n#define DISPID_IHTMLCURRENTSTYLE_VERTICALALIGN         DISPID_A_VERTICALALIGN\n#define DISPID_IHTMLCURRENTSTYLE_BACKGROUNDATTACHMENT  DISPID_A_BACKGROUNDATTACHMENT\n#define DISPID_IHTMLCURRENTSTYLE_MARGINTOP             DISPID_A_MARGINTOP\n#define DISPID_IHTMLCURRENTSTYLE_MARGINRIGHT           DISPID_A_MARGINRIGHT\n#define DISPID_IHTMLCURRENTSTYLE_MARGINBOTTOM          DISPID_A_MARGINBOTTOM\n#define DISPID_IHTMLCURRENTSTYLE_MARGINLEFT            DISPID_A_MARGINLEFT\n#define DISPID_IHTMLCURRENTSTYLE_CLEAR                 DISPID_A_CLEAR\n#define DISPID_IHTMLCURRENTSTYLE_LISTSTYLETYPE         DISPID_A_LISTSTYLETYPE\n#define DISPID_IHTMLCURRENTSTYLE_LISTSTYLEPOSITION     DISPID_A_LISTSTYLEPOSITION\n#define DISPID_IHTMLCURRENTSTYLE_LISTSTYLEIMAGE        DISPID_A_LISTSTYLEIMAGE\n#define DISPID_IHTMLCURRENTSTYLE_CLIPTOP               DISPID_A_CLIPRECTTOP\n#define DISPID_IHTMLCURRENTSTYLE_CLIPRIGHT             DISPID_A_CLIPRECTRIGHT\n#define DISPID_IHTMLCURRENTSTYLE_CLIPBOTTOM            DISPID_A_CLIPRECTBOTTOM\n#define DISPID_IHTMLCURRENTSTYLE_CLIPLEFT              DISPID_A_CLIPRECTLEFT\n#define DISPID_IHTMLCURRENTSTYLE_OVERFLOW              DISPID_A_OVERFLOW\n#define DISPID_IHTMLCURRENTSTYLE_PAGEBREAKBEFORE       DISPID_A_PAGEBREAKBEFORE\n#define DISPID_IHTMLCURRENTSTYLE_PAGEBREAKAFTER        DISPID_A_PAGEBREAKAFTER\n#define DISPID_IHTMLCURRENTSTYLE_CURSOR                DISPID_A_CURSOR\n#define DISPID_IHTMLCURRENTSTYLE_TABLELAYOUT           DISPID_A_TABLELAYOUT\n#define DISPID_IHTMLCURRENTSTYLE_BORDERCOLLAPSE        DISPID_A_BORDERCOLLAPSE\n#define DISPID_IHTMLCURRENTSTYLE_DIRECTION             DISPID_A_DIRECTION\n#define DISPID_IHTMLCURRENTSTYLE_BEHAVIOR              DISPID_A_BEHAVIOR\n#define DISPID_IHTMLCURRENTSTYLE_GETATTRIBUTE          DISPID_HTMLOBJECT+2\n#define DISPID_IHTMLCURRENTSTYLE_UNICODEBIDI           DISPID_A_UNICODEBIDI\n#define DISPID_IHTMLCURRENTSTYLE_RIGHT                 STDPROPID_XOBJ_RIGHT\n#define DISPID_IHTMLCURRENTSTYLE_BOTTOM                STDPROPID_XOBJ_BOTTOM\n#define DISPID_IHTMLCURRENTSTYLE_IMEMODE               DISPID_A_IMEMODE\n#define DISPID_IHTMLCURRENTSTYLE_RUBYALIGN             DISPID_A_RUBYALIGN\n#define DISPID_IHTMLCURRENTSTYLE_RUBYPOSITION          DISPID_A_RUBYPOSITION\n#define DISPID_IHTMLCURRENTSTYLE_RUBYOVERHANG          DISPID_A_RUBYOVERHANG\n#define DISPID_IHTMLCURRENTSTYLE_TEXTAUTOSPACE         DISPID_A_TEXTAUTOSPACE\n#define DISPID_IHTMLCURRENTSTYLE_LINEBREAK             DISPID_A_LINEBREAK\n#define DISPID_IHTMLCURRENTSTYLE_WORDBREAK             DISPID_A_WORDBREAK\n#define DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFY           DISPID_A_TEXTJUSTIFY\n#define DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFYTRIM       DISPID_A_TEXTJUSTIFYTRIM\n#define DISPID_IHTMLCURRENTSTYLE_TEXTKASHIDA           DISPID_A_TEXTKASHIDA\n#define DISPID_IHTMLCURRENTSTYLE_BLOCKDIRECTION        DISPID_A_DIR\n#define DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDCHAR        DISPID_A_LAYOUTGRIDCHAR\n#define DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDLINE        DISPID_A_LAYOUTGRIDLINE\n#define DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDMODE        DISPID_A_LAYOUTGRIDMODE\n#define DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDTYPE        DISPID_A_LAYOUTGRIDTYPE\n#define DISPID_IHTMLCURRENTSTYLE_BORDERSTYLE           DISPID_A_BORDERSTYLE\n#define DISPID_IHTMLCURRENTSTYLE_BORDERCOLOR           DISPID_A_BORDERCOLOR\n#define DISPID_IHTMLCURRENTSTYLE_BORDERWIDTH           DISPID_A_BORDERWIDTH\n#define DISPID_IHTMLCURRENTSTYLE_PADDING               DISPID_A_PADDING\n#define DISPID_IHTMLCURRENTSTYLE_MARGIN                DISPID_A_MARGIN\n#define DISPID_IHTMLCURRENTSTYLE_ACCELERATOR           DISPID_A_ACCELERATOR\n#define DISPID_IHTMLCURRENTSTYLE_OVERFLOWX             DISPID_A_OVERFLOWX\n#define DISPID_IHTMLCURRENTSTYLE_OVERFLOWY             DISPID_A_OVERFLOWY\n#define DISPID_IHTMLCURRENTSTYLE_TEXTTRANSFORM         DISPID_A_TEXTTRANSFORM\n\n/* IHTMLCurrentStyle2 */\n#define DISPID_IHTMLCURRENTSTYLE2_LAYOUTFLOW                DISPID_A_LAYOUTFLOW\n#define DISPID_IHTMLCURRENTSTYLE2_WORDWRAP                  DISPID_A_WORDWRAP\n#define DISPID_IHTMLCURRENTSTYLE2_TEXTUNDERLINEPOSITION     DISPID_A_TEXTUNDERLINEPOSITION\n#define DISPID_IHTMLCURRENTSTYLE2_HASLAYOUT                 DISPID_A_HASLAYOUT\n#define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARBASECOLOR        DISPID_A_SCROLLBARBASECOLOR\n#define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARFACECOLOR        DISPID_A_SCROLLBARFACECOLOR\n#define DISPID_IHTMLCURRENTSTYLE2_SCROLLBAR3DLIGHTCOLOR     DISPID_A_SCROLLBAR3DLIGHTCOLOR\n#define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARSHADOWCOLOR      DISPID_A_SCROLLBARSHADOWCOLOR\n#define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARHIGHLIGHTCOLOR   DISPID_A_SCROLLBARHIGHLIGHTCOLOR\n#define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARDARKSHADOWCOLOR  DISPID_A_SCROLLBARDARKSHADOWCOLOR\n#define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARARROWCOLOR       DISPID_A_SCROLLBARARROWCOLOR\n#define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARTRACKCOLOR       DISPID_A_SCROLLBARTRACKCOLOR\n#define DISPID_IHTMLCURRENTSTYLE2_WRITINGMODE               DISPID_A_WRITINGMODE\n#define DISPID_IHTMLCURRENTSTYLE2_ZOOM                      DISPID_A_ZOOM\n#define DISPID_IHTMLCURRENTSTYLE2_FILTER                    DISPID_A_FILTER\n#define DISPID_IHTMLCURRENTSTYLE2_TEXTALIGNLAST             DISPID_A_TEXTALIGNLAST\n#define DISPID_IHTMLCURRENTSTYLE2_TEXTKASHIDASPACE          DISPID_A_TEXTKASHIDASPACE\n#define DISPID_IHTMLCURRENTSTYLE2_ISBLOCK                   DISPID_A_ISBLOCK\n\n/* IHTMLCurrentStyle3 */\n#define DISPID_IHTMLCURRENTSTYLE3_TEXTOVERFLOW  DISPID_A_TEXTOVERFLOW\n#define DISPID_IHTMLCURRENTSTYLE3_MINHEIGHT     DISPID_A_MINHEIGHT\n#define DISPID_IHTMLCURRENTSTYLE3_WORDSPACING   DISPID_A_WORDSPACING\n#define DISPID_IHTMLCURRENTSTYLE3_WHITESPACE    DISPID_A_WHITESPACE\n\n/* IHTMLCurrentStyle4 */\n#define DISPID_IHTMLCURRENTSTYLE4_MSINTERPOLATIONMODE       DISPID_A_INTERPOLATION\n#define DISPID_IHTMLCURRENTSTYLE4_MAXHEIGHT                 DISPID_A_MAXHEIGHT\n#define DISPID_IHTMLCURRENTSTYLE4_MINWIDTH                  DISPID_A_MINWIDTH\n#define DISPID_IHTMLCURRENTSTYLE4_MAXWIDTH                  DISPID_A_MAXWIDTH\n\n/* HTMLTextContainerEvents2 */\n#define DISPID_HTMLTEXTCONTAINEREVENTS2_ONCHANGE       DISPID_EVMETH_ONCHANGE\n#define DISPID_HTMLTEXTCONTAINEREVENTS2_ONSELECT       DISPID_EVMETH_ONSELECT\n\n/* HTMLTextContainerEvents */\n#define DISPID_HTMLTEXTCONTAINEREVENTS_ONCHANGE        DISPID_EVMETH_ONCHANGE\n#define DISPID_HTMLTEXTCONTAINEREVENTS_ONSELECT        DISPID_EVMETH_ONSELECT\n\n/* IHTMLTextContainer */\n#define DISPID_IHTMLTEXTCONTAINER_CREATECONTROLRANGE  DISPID_TEXTSITE+1\n#define DISPID_IHTMLTEXTCONTAINER_SCROLLHEIGHT        DISPID_TEXTSITE+2\n#define DISPID_IHTMLTEXTCONTAINER_SCROLLWIDTH         DISPID_TEXTSITE+3\n#define DISPID_IHTMLTEXTCONTAINER_SCROLLTOP           DISPID_TEXTSITE+4\n#define DISPID_IHTMLTEXTCONTAINER_SCROLLLEFT          DISPID_TEXTSITE+5\n#define DISPID_IHTMLTEXTCONTAINER_ONSCROLL            DISPID_EVPROP_ONSCROLL\n\n/* IHTMLTableCaption */\n#define DISPID_IHTMLTABLECAPTION_ALIGN   STDPROPID_XOBJ_BLOCKALIGN\n#define DISPID_IHTMLTABLECAPTION_VALIGN  DISPID_A_TABLEVALIGN\n\n /* IHTMLCommentElement */\n#define DISPID_IHTMLCOMMENTELEMENT_TEXT    DISPID_COMMENTPDL+1\n#define DISPID_IHTMLCOMMENTELEMENT_ATOMIC  DISPID_COMMENTPDL+2\n\n /* IHTMLCommentElement2 */\n#define DISPID_IHTMLCOMMENTELEMENT2_DATA           DISPID_COMMENTPDL+3\n#define DISPID_IHTMLCOMMENTELEMENT2_LENGTH         DISPID_COMMENTPDL+4\n#define DISPID_IHTMLCOMMENTELEMENT2_SUBSTRINGDATA  DISPID_COMMENTPDL+5\n#define DISPID_IHTMLCOMMENTELEMENT2_APPENDDATA     DISPID_COMMENTPDL+6\n#define DISPID_IHTMLCOMMENTELEMENT2_INSERTDATA     DISPID_COMMENTPDL+7\n#define DISPID_IHTMLCOMMENTELEMENT2_DELETEDATA     DISPID_COMMENTPDL+8\n#define DISPID_IHTMLCOMMENTELEMENT2_REPLACEDATA    DISPID_COMMENTPDL+9\n\n/* IHTMLTable */\n#define DISPID_IHTMLTABLE_COLS                DISPID_TABLE+1\n#define DISPID_IHTMLTABLE_BORDER              DISPID_TABLE+2\n#define DISPID_IHTMLTABLE_FRAME               DISPID_TABLE+4\n#define DISPID_IHTMLTABLE_RULES               DISPID_TABLE+3\n#define DISPID_IHTMLTABLE_CELLSPACING         DISPID_TABLE+5\n#define DISPID_IHTMLTABLE_CELLPADDING         DISPID_TABLE+6\n#define DISPID_IHTMLTABLE_BACKGROUND          DISPID_A_BACKGROUNDIMAGE\n#define DISPID_IHTMLTABLE_BGCOLOR             DISPID_BACKCOLOR\n#define DISPID_IHTMLTABLE_BORDERCOLOR         DISPID_A_TABLEBORDERCOLOR\n#define DISPID_IHTMLTABLE_BORDERCOLORLIGHT    DISPID_A_TABLEBORDERCOLORLIGHT\n#define DISPID_IHTMLTABLE_BORDERCOLORDARK     DISPID_A_TABLEBORDERCOLORDARK\n#define DISPID_IHTMLTABLE_ALIGN               STDPROPID_XOBJ_CONTROLALIGN\n#define DISPID_IHTMLTABLE_REFRESH             DISPID_TABLE+15\n#define DISPID_IHTMLTABLE_ROWS                DISPID_TABLE+16\n#define DISPID_IHTMLTABLE_WIDTH               STDPROPID_XOBJ_WIDTH\n#define DISPID_IHTMLTABLE_HEIGHT              STDPROPID_XOBJ_HEIGHT\n#define DISPID_IHTMLTABLE_DATAPAGESIZE        DISPID_TABLE+17\n#define DISPID_IHTMLTABLE_NEXTPAGE            DISPID_TABLE+18\n#define DISPID_IHTMLTABLE_PREVIOUSPAGE        DISPID_TABLE+19\n#define DISPID_IHTMLTABLE_THEAD               DISPID_TABLE+20\n#define DISPID_IHTMLTABLE_TFOOT               DISPID_TABLE+21\n#define DISPID_IHTMLTABLE_TBODIES             DISPID_TABLE+24\n#define DISPID_IHTMLTABLE_CAPTION             DISPID_TABLE+25\n#define DISPID_IHTMLTABLE_CREATETHEAD         DISPID_TABLE+26\n#define DISPID_IHTMLTABLE_DELETETHEAD         DISPID_TABLE+27\n#define DISPID_IHTMLTABLE_CREATETFOOT         DISPID_TABLE+28\n#define DISPID_IHTMLTABLE_DELETETFOOT         DISPID_TABLE+29\n#define DISPID_IHTMLTABLE_CREATECAPTION       DISPID_TABLE+30\n#define DISPID_IHTMLTABLE_DELETECAPTION       DISPID_TABLE+31\n#define DISPID_IHTMLTABLE_INSERTROW           DISPID_TABLE+32\n#define DISPID_IHTMLTABLE_DELETEROW           DISPID_TABLE+33\n#define DISPID_IHTMLTABLE_READYSTATE          DISPID_A_READYSTATE\n#define DISPID_IHTMLTABLE_ONREADYSTATECHANGE  DISPID_EVPROP_ONREADYSTATECHANGE\n\n/* IHTMLTable2 */\n#define DISPID_IHTMLTABLE2_FIRSTPAGE  DISPID_TABLE+35\n#define DISPID_IHTMLTABLE2_LASTPAGE   DISPID_TABLE+36\n#define DISPID_IHTMLTABLE2_CELLS      DISPID_TABLE+37\n#define DISPID_IHTMLTABLE2_MOVEROW    DISPID_TABLE+38\n\n/* IHTMLTable3 */\n#define DISPID_IHTMLTABLE3_SUMMARY  DISPID_TABLE+39\n\n/* IHTMLTableSection */\n#define DISPID_IHTMLTABLESECTION_ALIGN      STDPROPID_XOBJ_BLOCKALIGN\n#define DISPID_IHTMLTABLESECTION_VALIGN     DISPID_A_TABLEVALIGN\n#define DISPID_IHTMLTABLESECTION_BGCOLOR    DISPID_BACKCOLOR\n#define DISPID_IHTMLTABLESECTION_ROWS       DISPID_TABLESECTION\n#define DISPID_IHTMLTABLESECTION_INSERTROW  DISPID_TABLESECTION+1\n#define DISPID_IHTMLTABLESECTION_DELETEROW  DISPID_TABLESECTION+2\n\n/* IHTMLTableRow */\n#define DISPID_IHTMLTABLEROW_ALIGN             STDPROPID_XOBJ_BLOCKALIGN\n#define DISPID_IHTMLTABLEROW_VALIGN            DISPID_A_TABLEVALIGN\n#define DISPID_IHTMLTABLEROW_BGCOLOR           DISPID_BACKCOLOR\n#define DISPID_IHTMLTABLEROW_BORDERCOLOR       DISPID_A_TABLEBORDERCOLOR\n#define DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT  DISPID_A_TABLEBORDERCOLORLIGHT\n#define DISPID_IHTMLTABLEROW_BORDERCOLORDARK   DISPID_A_TABLEBORDERCOLORDARK\n#define DISPID_IHTMLTABLEROW_ROWINDEX          DISPID_TABLEROW\n#define DISPID_IHTMLTABLEROW_SECTIONROWINDEX   DISPID_TABLEROW+1\n#define DISPID_IHTMLTABLEROW_CELLS             DISPID_TABLEROW+2\n#define DISPID_IHTMLTABLEROW_INSERTCELL        DISPID_TABLEROW+3\n#define DISPID_IHTMLTABLEROW_DELETECELL        DISPID_TABLEROW+4\n\n/* IHTMLTableRow2 */\n#define DISPID_IHTMLTABLEROW2_HEIGHT  STDPROPID_XOBJ_HEIGHT\n\n/* IHTMLTableRow3 */\n#define DISPID_IHTMLTABLEROW3_CH     DISPID_TABLEROW+9\n#define DISPID_IHTMLTABLEROW3_CHOFF  DISPID_TABLEROW+10\n\n/* IHTMLTableCell */\n#define DISPID_IHTMLTABLECELL_ROWSPAN           DISPID_TABLECELL+1\n#define DISPID_IHTMLTABLECELL_COLSPAN           DISPID_TABLECELL+2\n#define DISPID_IHTMLTABLECELL_ALIGN             STDPROPID_XOBJ_BLOCKALIGN\n#define DISPID_IHTMLTABLECELL_VALIGN            DISPID_A_TABLEVALIGN\n#define DISPID_IHTMLTABLECELL_BGCOLOR           DISPID_BACKCOLOR\n#define DISPID_IHTMLTABLECELL_NOWRAP            DISPID_A_NOWRAP\n#define DISPID_IHTMLTABLECELL_BACKGROUND        DISPID_A_BACKGROUNDIMAGE\n#define DISPID_IHTMLTABLECELL_BORDERCOLOR       DISPID_A_TABLEBORDERCOLOR\n#define DISPID_IHTMLTABLECELL_BORDERCOLORLIGHT  DISPID_A_TABLEBORDERCOLORLIGHT\n#define DISPID_IHTMLTABLECELL_BORDERCOLORDARK   DISPID_A_TABLEBORDERCOLORDARK\n#define DISPID_IHTMLTABLECELL_WIDTH             STDPROPID_XOBJ_WIDTH\n#define DISPID_IHTMLTABLECELL_HEIGHT            STDPROPID_XOBJ_HEIGHT\n#define DISPID_IHTMLTABLECELL_CELLINDEX         DISPID_TABLECELL+3\n\n/* IHTMLTableCell2 */\n#define DISPID_IHTMLTABLECELL2_ABBR     DISPID_TABLECELL+4\n#define DISPID_IHTMLTABLECELL2_AXIS     DISPID_TABLECELL+5\n#define DISPID_IHTMLTABLECELL2_CH       DISPID_TABLECELL+6\n#define DISPID_IHTMLTABLECELL2_CHOFF    DISPID_TABLECELL+7\n#define DISPID_IHTMLTABLECELL2_HEADERS  DISPID_TABLECELL+8\n#define DISPID_IHTMLTABLECELL2_SCOPE    DISPID_TABLECELL+9\n\n/* IHTMLTableCell3 */\n#define DISPID_IHTMLTABLECELL3_IE9_CH     DISPID_TABLECELL+10\n#define DISPID_IHTMLTABLECELL3_IE9_CHOFF  DISPID_TABLECELL+11\n\n/* IHTMLScriptElement */\n#define DISPID_IHTMLSCRIPTELEMENT_SRC         DISPID_SCRIPT+1\n#define DISPID_IHTMLSCRIPTELEMENT_HTMLFOR     DISPID_SCRIPT+4\n#define DISPID_IHTMLSCRIPTELEMENT_EVENT       DISPID_SCRIPT+5\n#define DISPID_IHTMLSCRIPTELEMENT_TEXT        DISPID_SCRIPT+6\n#define DISPID_IHTMLSCRIPTELEMENT_DEFER       DISPID_SCRIPT+7\n#define DISPID_IHTMLSCRIPTELEMENT_READYSTATE  DISPID_A_READYSTATE\n#define DISPID_IHTMLSCRIPTELEMENT_ONERROR     DISPID_EVPROP_ONERROR\n#define DISPID_IHTMLSCRIPTELEMENT_TYPE        DISPID_SCRIPT+9\n\n/* IHTMLScriptElement2 */\n#define DISPID_IHTMLSCRIPTELEMENT2_CHARSET  DISPID_SCRIPT+10\n\n/* IHTMLScriptElement3 */\n#define DISPID_IHTMLSCRIPTELEMENT3_IE8_SRC  DISPID_IE8_SCRIPT\n\n/* IHTMLDivElement */\n#define DISPID_IHTMLDIVELEMENT_ALIGN   STDPROPID_XOBJ_BLOCKALIGN\n#define DISPID_IHTMLDIVELEMENT_NOWRAP  DISPID_A_NOWRAP\n\n/* IHTMLObjectElement */\n#define DISPID_IHTMLOBJECTELEMENT_OBJECT              DISPID_OBJECT+1\n#define DISPID_IHTMLOBJECTELEMENT_CLASSID             DISPID_OBJECT+2\n#define DISPID_IHTMLOBJECTELEMENT_DATA                DISPID_OBJECT+3\n#define DISPID_IHTMLOBJECTELEMENT_RECORDSET           DISPID_OBJECT+5\n#define DISPID_IHTMLOBJECTELEMENT_ALIGN               STDPROPID_XOBJ_CONTROLALIGN\n#define DISPID_IHTMLOBJECTELEMENT_NAME                STDPROPID_XOBJ_NAME\n#define DISPID_IHTMLOBJECTELEMENT_CODEBASE            DISPID_OBJECT+6\n#define DISPID_IHTMLOBJECTELEMENT_CODETYPE            DISPID_OBJECT+7\n#define DISPID_IHTMLOBJECTELEMENT_CODE                DISPID_OBJECT+8\n#define DISPID_IHTMLOBJECTELEMENT_BASEHREF            STDPROPID_XOBJ_BASEHREF\n#define DISPID_IHTMLOBJECTELEMENT_TYPE                DISPID_OBJECT+9\n#define DISPID_IHTMLOBJECTELEMENT_FORM                DISPID_SITE+4\n#define DISPID_IHTMLOBJECTELEMENT_WIDTH               STDPROPID_XOBJ_WIDTH\n#define DISPID_IHTMLOBJECTELEMENT_HEIGHT              STDPROPID_XOBJ_HEIGHT\n#define DISPID_IHTMLOBJECTELEMENT_READYSTATE          DISPID_OBJECT+10\n#define DISPID_IHTMLOBJECTELEMENT_ONREADYSTATECHANGE  DISPID_EVPROP_ONREADYSTATECHANGE\n#define DISPID_IHTMLOBJECTELEMENT_ONERROR             DISPID_EVPROP_ONERROR\n#define DISPID_IHTMLOBJECTELEMENT_ALTHTML             DISPID_OBJECT+11\n#define DISPID_IHTMLOBJECTELEMENT_VSPACE              DISPID_OBJECT+12\n#define DISPID_IHTMLOBJECTELEMENT_HSPACE              DISPID_OBJECT+13\n\n/* IHTMLObjectElement2 */\n#define DISPID_IHTMLOBJECTELEMENT2_NAMEDRECORDSET  DISPID_OBJECT+14\n#define DISPID_IHTMLOBJECTELEMENT2_CLASSID         DISPID_OBJECT+2\n#define DISPID_IHTMLOBJECTELEMENT2_DATA            DISPID_OBJECT+3\n\n/* IHTMLObjectElement3 */\n#define DISPID_IHTMLOBJECTELEMENT3_ARCHIVE  DISPID_OBJECT+15\n#define DISPID_IHTMLOBJECTELEMENT3_ALT      DISPID_OBJECT+16\n#define DISPID_IHTMLOBJECTELEMENT3_DECLARE  DISPID_OBJECT+17\n#define DISPID_IHTMLOBJECTELEMENT3_STANDBY  DISPID_OBJECT+18\n#define DISPID_IHTMLOBJECTELEMENT3_BORDER   DISPID_OBJECT+19\n#define DISPID_IHTMLOBJECTELEMENT3_USEMAP   DISPID_OBJECT+20\n\n/* IHTMLObjectElement4 */\n#define DISPID_IHTMLOBJECTELEMENT4_CONTENTDOCUMENT  DISPID_IE8_OBJECT\n#define DISPID_IHTMLOBJECTELEMENT4_IE8_CODEBASE     DISPID_IE8_OBJECT+1\n#define DISPID_IHTMLOBJECTELEMENT4_IE8_DATA         DISPID_IE8_OBJECT+2\n\n/* IHTMLParamElement */\n#define DISPID_IHTMLPARAMELEMENT_NAME       DISPID_PARAM+1\n#define DISPID_IHTMLPARAMELEMENT_VALUE      DISPID_PARAM+2\n#define DISPID_IHTMLPARAMELEMENT_TYPE       DISPID_PARAM+3\n#define DISPID_IHTMLPARAMELEMENT_VALUETYPE  DISPID_PARAM+4\n\n/* IHTMLParamElement2 */\n#define DISPID_IHTMLPARAMELEMENT2_NAME           DISPID_PARAM+1\n#define DISPID_IHTMLPARAMELEMENT2_TYPE           DISPID_PARAM+3\n#define DISPID_IHTMLPARAMELEMENT2_VALUE          DISPID_PARAM+2\n#define DISPID_IHTMLPARAMELEMENT2_IE8_VALUETYPE  DISPID_IE8_PARAM\n\n/* IHTMLFrameBase */\n#define DISPID_IHTMLFRAMEBASE_SRC           DISPID_FRAMESITE+0\n#define DISPID_IHTMLFRAMEBASE_NAME          STDPROPID_XOBJ_NAME\n#define DISPID_IHTMLFRAMEBASE_BORDER        DISPID_FRAMESITE+2\n#define DISPID_IHTMLFRAMEBASE_FRAMEBORDER   DISPID_FRAMESITE+3\n#define DISPID_IHTMLFRAMEBASE_FRAMESPACING  DISPID_FRAMESITE+4\n#define DISPID_IHTMLFRAMEBASE_MARGINWIDTH   DISPID_FRAMESITE+5\n#define DISPID_IHTMLFRAMEBASE_MARGINHEIGHT  DISPID_FRAMESITE+6\n#define DISPID_IHTMLFRAMEBASE_NORESIZE      DISPID_FRAMESITE+7\n#define DISPID_IHTMLFRAMEBASE_SCROLLING     DISPID_FRAMESITE+8\n\n/* IHTMLFrameBase2 */\n#define DISPID_IHTMLFRAMEBASE2_CONTENTWINDOW       DISPID_FRAMESITE+9\n#define DISPID_IHTMLFRAMEBASE2_ONLOAD              DISPID_EVPROP_ONLOAD\n#define DISPID_IHTMLFRAMEBASE2_ONREADYSTATECHANGE  DISPID_EVPROP_ONREADYSTATECHANGE\n#define DISPID_IHTMLFRAMEBASE2_READYSTATE          DISPID_A_READYSTATE\n#define DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY   DISPID_A_ALLOWTRANSPARENCY\n\n/* IHTMLFrameBase3 */\n#define DISPID_IHTMLFRAMEBASE3_LONGDESC  DISPID_FRAMESITE+10\n\n/* IHTMLFrameElement */\n#define DISPID_IHTMLFRAMEELEMENT_BORDERCOLOR  DISPID_FRAME+1\n\n/* IHTMLFrameElement2 */\n#define DISPID_IHTMLFRAMEELEMENT2_HEIGHT  STDPROPID_XOBJ_HEIGHT\n#define DISPID_IHTMLFRAMEELEMENT2_WIDTH   STDPROPID_XOBJ_WIDTH\n\n/* IHTMLFrameElement3 */\n#define DISPID_IHTMLFRAMEELEMENT3_CONTENTDOCUMENT  DISPID_IE8_FRAME\n#define DISPID_IHTMLFRAMEELEMENT3_IE8_SRC          DISPID_IE8_FRAME+1\n#define DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC     DISPID_IE8_FRAME+2\n#define DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER  DISPID_IE8_FRAME+3\n\n/* IHTMLIFrameElement */\n#define DISPID_IHTMLIFRAMEELEMENT_VSPACE  DISPID_IFRAME+1\n#define DISPID_IHTMLIFRAMEELEMENT_HSPACE  DISPID_IFRAME+2\n#define DISPID_IHTMLIFRAMEELEMENT_ALIGN   STDPROPID_XOBJ_CONTROLALIGN\n\n/* IHTMLIFrameElement2 */\n#define DISPID_IHTMLIFRAMEELEMENT2_HEIGHT  STDPROPID_XOBJ_HEIGHT\n#define DISPID_IHTMLIFRAMEELEMENT2_WIDTH   STDPROPID_XOBJ_WIDTH\n\n/* IHTMLIFrameElement3 */\n#define DISPID_IHTMLIFRAMEELEMENT3_CONTENTDOCUMENT  DISPID_IE8_IFRAME\n#define DISPID_IHTMLIFRAMEELEMENT3_IE8_SRC          DISPID_IE8_IFRAME+1\n#define DISPID_IHTMLIFRAMEELEMENT3_IE8_LONGDESC     DISPID_IE8_IFRAME+2\n#define DISPID_IHTMLIFRAMEELEMENT3_IE8_FRAMEBORDER  DISPID_IE8_IFRAME+3\n\n/* IHTMLStyleElement */\n#define DISPID_IHTMLSTYLEELEMENT_TYPE                DISPID_STYLEELEMENT+2\n#define DISPID_IHTMLSTYLEELEMENT_READYSTATE          DISPID_A_READYSTATE\n#define DISPID_IHTMLSTYLEELEMENT_ONREADYSTATECHANGE  DISPID_EVPROP_ONREADYSTATECHANGE\n#define DISPID_IHTMLSTYLEELEMENT_ONLOAD              DISPID_EVPROP_ONLOAD\n#define DISPID_IHTMLSTYLEELEMENT_ONERROR             DISPID_EVPROP_ONERROR\n#define DISPID_IHTMLSTYLEELEMENT_STYLESHEET          DISPID_STYLEELEMENT+4\n#define DISPID_IHTMLSTYLEELEMENT_DISABLED            STDPROPID_XOBJ_DISABLED\n#define DISPID_IHTMLSTYLEELEMENT_MEDIA               DISPID_STYLEELEMENT+6\n\n/* IHTMLStorage */\n#define DISPID_IHTMLSTORAGE_LENGTH          DISPID_DOMSTORAGE+1\n#define DISPID_IHTMLSTORAGE_REMAININGSPACE  DISPID_DOMSTORAGE+2\n#define DISPID_IHTMLSTORAGE_KEY             DISPID_DOMSTORAGE+6\n#define DISPID_IHTMLSTORAGE_GETITEM         DISPID_DOMSTORAGE+3\n#define DISPID_IHTMLSTORAGE_SETITEM         DISPID_DOMSTORAGE+4\n#define DISPID_IHTMLSTORAGE_REMOVEITEM      DISPID_DOMSTORAGE+5\n#define DISPID_IHTMLSTORAGE_CLEAR           DISPID_DOMSTORAGE+7\n\n/* IHTMLDOMConstructorCollection */\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_ATTR                        DISPID_WINDOW+8001+DomConstructorAttr\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_BEHAVIORURNSCOLLECTION      DISPID_WINDOW+8001+DomConstructorBehaviorUrnsCollection\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_BOOKMARKCOLLECTION          DISPID_WINDOW+8001+DomConstructorBookmarkCollection\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_COMPATIBLEINFO              DISPID_WINDOW+8001+DomConstructorCompatibleInfo\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_COMPATIBLEINFOCOLLECTION    DISPID_WINDOW+8001+DomConstructorCompatibleInfoCollection\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CONTROLRANGECOLLECTION      DISPID_WINDOW+8001+DomConstructorControlRangeCollection\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSCURRENTSTYLEDECLARATION  DISPID_WINDOW+8001+DomConstructorCSSCurrentStyleDeclaration\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSRULELIST                 DISPID_WINDOW+8001+DomConstructorCSSRuleList\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSRULESTYLEDECLARATION     DISPID_WINDOW+8001+DomConstructorCSSRuleStyleDeclaration\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLEDECLARATION         DISPID_WINDOW+8001+DomConstructorCSSStyleDeclaration\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLERULE                DISPID_WINDOW+8001+DomConstructorCSSStyleRule\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLESHEET               DISPID_WINDOW+8001+DomConstructorCSSStyleSheet\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_DATATRANSFER                DISPID_WINDOW+8001+DomConstructorDataTransfer\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_DOMIMPLEMENTATION           DISPID_WINDOW+8001+DomConstructorDOMImplementation\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_ELEMENT                     DISPID_WINDOW+8001+DomConstructorElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_EVENT                       DISPID_WINDOW+8001+DomConstructorEvent\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HISTORY                     DISPID_WINDOW+8001+DomConstructorHistory\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTCELEMENTBEHAVIORDEFAULTS  DISPID_WINDOW+8001+DomConstructorHTCElementBehaviorDefaults\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLANCHORELEMENT           DISPID_WINDOW+8001+DomConstructorHTMLAnchorElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLAREAELEMENT             DISPID_WINDOW+8001+DomConstructorHTMLAreaElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLAREASCOLLECTION         DISPID_WINDOW+8001+DomConstructorHTMLAreasCollection\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBASEELEMENT             DISPID_WINDOW+8001+DomConstructorHTMLBaseElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBASEFONTELEMENT         DISPID_WINDOW+8001+DomConstructorHTMLBaseFontElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBGSOUNDELEMENT          DISPID_WINDOW+8001+DomConstructorHTMLBGSoundElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBLOCKELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLBlockElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBODYELEMENT             DISPID_WINDOW+8001+DomConstructorHTMLBodyElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBRELEMENT               DISPID_WINDOW+8001+DomConstructorHTMLBRElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBUTTONELEMENT           DISPID_WINDOW+8001+DomConstructorHTMLButtonElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLCOLLECTION              DISPID_WINDOW+8001+DomConstructorHTMLCollection\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLCOMMENTELEMENT          DISPID_WINDOW+8001+DomConstructorHTMLCommentElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDDELEMENT               DISPID_WINDOW+8001+DomConstructorHTMLDDElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDIVELEMENT              DISPID_WINDOW+8001+DomConstructorHTMLDivElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDOCUMENT                DISPID_WINDOW+8001+DomConstructorHTMLDocument\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDLISTELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLDListElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDTELEMENT               DISPID_WINDOW+8001+DomConstructorHTMLDTElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLEMBEDELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLEmbedElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFIELDSETELEMENT         DISPID_WINDOW+8001+DomConstructorHTMLFieldSetElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFONTELEMENT             DISPID_WINDOW+8001+DomConstructorHTMLFontElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFORMELEMENT             DISPID_WINDOW+8001+DomConstructorHTMLFormElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFRAMEELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLFrameElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFRAMESETELEMENT         DISPID_WINDOW+8001+DomConstructorHTMLFrameSetElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLGENERICELEMENT          DISPID_WINDOW+8001+DomConstructorHTMLGenericElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHEADELEMENT             DISPID_WINDOW+8001+DomConstructorHTMLHeadElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHEADINGELEMENT          DISPID_WINDOW+8001+DomConstructorHTMLHeadingElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHRELEMENT               DISPID_WINDOW+8001+DomConstructorHTMLHRElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHTMLELEMENT             DISPID_WINDOW+8001+DomConstructorHTMLHtmlElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLIFRAMEELEMENT           DISPID_WINDOW+8001+DomConstructorHTMLIFrameElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLIMAGEELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLImageElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLINPUTELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLInputElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLISINDEXELEMENT          DISPID_WINDOW+8001+DomConstructorHTMLIsIndexElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLABELELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLLabelElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLEGENDELEMENT           DISPID_WINDOW+8001+DomConstructorHTMLLegendElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLIELEMENT               DISPID_WINDOW+8001+DomConstructorHTMLLIElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLINKELEMENT             DISPID_WINDOW+8001+DomConstructorHTMLLinkElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMAPELEMENT              DISPID_WINDOW+8001+DomConstructorHTMLMapElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMARQUEEELEMENT          DISPID_WINDOW+8001+DomConstructorHTMLMarqueeElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMETAELEMENT             DISPID_WINDOW+8001+DomConstructorHTMLMetaElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMODELESSDIALOG          DISPID_WINDOW+8001+DomConstructorHTMLModelessDialog\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNAMESPACEINFO           DISPID_WINDOW+8001+DomConstructorHTMLNamespaceInfo\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNAMESPACEINFOCOLLECTION DISPID_WINDOW+8001+DomConstructorHTMLNamespaceInfoCollection\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNEXTIDELEMENT           DISPID_WINDOW+8001+DomConstructorHTMLNextIdElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNOSHOWELEMENT           DISPID_WINDOW+8001+DomConstructorHTMLNoShowElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOBJECTELEMENT           DISPID_WINDOW+8001+DomConstructorHTMLObjectElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOLISTELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLOListElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOPTIONELEMENT           DISPID_WINDOW+8001+DomConstructorHTMLOptionElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPARAGRAPHELEMENT        DISPID_WINDOW+8001+DomConstructorHTMLParagraphElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPARAMELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLParamElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPHRASEELEMENT           DISPID_WINDOW+8001+DomConstructorHTMLPhraseElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPLUGINSCOLLECTION       DISPID_WINDOW+8001+DomConstructorHTMLPluginsCollection\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPOPUP                   DISPID_WINDOW+8001+DomConstructorHTMLPopup\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSCRIPTELEMENT           DISPID_WINDOW+8001+DomConstructorHTMLScriptElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSELECTELEMENT           DISPID_WINDOW+8001+DomConstructorHTMLSelectElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSPANELEMENT             DISPID_WINDOW+8001+DomConstructorHTMLSpanElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSTYLEELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLStyleElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECAPTIONELEMENT     DISPID_WINDOW+8001+DomConstructorHTMLTableCaptionElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECELLELEMENT        DISPID_WINDOW+8001+DomConstructorHTMLTableCellElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECOLELEMENT         DISPID_WINDOW+8001+DomConstructorHTMLTableColElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLEELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLTableElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLEROWELEMENT         DISPID_WINDOW+8001+DomConstructorHTMLTableRowElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLESECTIONELEMENT     DISPID_WINDOW+8001+DomConstructorHTMLTableSectionElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTEXTAREAELEMENT         DISPID_WINDOW+8001+DomConstructorHTMLTextAreaElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTEXTELEMENT             DISPID_WINDOW+8001+DomConstructorHTMLTextElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTITLEELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLTitleElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLULISTELEMENT            DISPID_WINDOW+8001+DomConstructorHTMLUListElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLUNKNOWNELEMENT          DISPID_WINDOW+8001+DomConstructorHTMLUnknownElement\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_IMAGE                       DISPID_WINDOW+8001+DomConstructorImage\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_LOCATION                    DISPID_WINDOW+8001+DomConstructorLocation\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NAMEDNODEMAP                DISPID_WINDOW+8001+DomConstructorNamedNodeMap\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NAVIGATOR                   DISPID_WINDOW+8001+DomConstructorNavigator\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NODELIST                    DISPID_WINDOW+8001+DomConstructorNodeList\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_OPTION                      DISPID_WINDOW+8001+DomConstructorOption\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_SCREEN                      DISPID_WINDOW+8001+DomConstructorScreen\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_SELECTION                   DISPID_WINDOW+8001+DomConstructorSelection\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STATICNODELIST              DISPID_WINDOW+8001+DomConstructorStaticNodeList\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STORAGE                     DISPID_WINDOW+8001+DomConstructorStorage\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETLIST              DISPID_WINDOW+8001+DomConstructorStyleSheetList\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETPAGE              DISPID_WINDOW+8001+DomConstructorStyleSheetPage\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETPAGELIST          DISPID_WINDOW+8001+DomConstructorStyleSheetPageList\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXT                        DISPID_WINDOW+8001+DomConstructorText\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRANGE                   DISPID_WINDOW+8001+DomConstructorTextRange\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRANGECOLLECTION         DISPID_WINDOW+8001+DomConstructorTextRangeCollection\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRECTANGLE               DISPID_WINDOW+8001+DomConstructorTextRectangle\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRECTANGLELIST           DISPID_WINDOW+8001+DomConstructorTextRectangleList\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_WINDOW                      DISPID_WINDOW+8001+DomConstructorWindow\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_XDOMAINREQUEST              DISPID_WINDOW+8001+DomConstructorXDomainRequest\n#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_XMLHTTPREQUEST              DISPID_WINDOW+8001+DomConstructorXMLHttpRequest\n\n/* IEventTarget */\n#define DISPID_IEVENTTARGET_ADDEVENTLISTENER     DISPID_HTMLOBJECT+10\n#define DISPID_IEVENTTARGET_REMOVEEVENTLISTENER  DISPID_HTMLOBJECT+11\n#define DISPID_IEVENTTARGET_DISPATCHEVENT        DISPID_HTMLOBJECT+12\n\n/* IDOMEvent */\n#define DISPID_IDOMEVENT_BUBBLES                   DISPID_DOMEVENT+1\n#define DISPID_IDOMEVENT_CANCELABLE                DISPID_DOMEVENT+2\n#define DISPID_IDOMEVENT_CURRENTTARGET             DISPID_DOMEVENT+3\n#define DISPID_IDOMEVENT_DEFAULTPREVENTED          DISPID_DOMEVENT+4\n#define DISPID_IDOMEVENT_EVENTPHASE                DISPID_DOMEVENT+5\n#define DISPID_IDOMEVENT_TARGET                    DISPID_DOMEVENT+6\n#define DISPID_IDOMEVENT_TIMESTAMP                 DISPID_DOMEVENT+7\n#define DISPID_IDOMEVENT_TYPE                      DISPID_DOMEVENT+8\n#define DISPID_IDOMEVENT_INITEVENT                 DISPID_DOMEVENT+9\n#define DISPID_IDOMEVENT_PREVENTDEFAULT            DISPID_DOMEVENT+10\n#define DISPID_IDOMEVENT_STOPPROPAGATION           DISPID_DOMEVENT+11\n#define DISPID_IDOMEVENT_STOPIMMEDIATEPROPAGATION  DISPID_DOMEVENT+12\n#define DISPID_IDOMEVENT_ISTRUSTED                 DISPID_DOMEVENT+13\n#define DISPID_IDOMEVENT_CANCELBUBBLE              DISPID_DOMEVENT+14\n#define DISPID_IDOMEVENT_SRCELEMENT                DISPID_DOMEVENT+15\n\n/* IDOMUIEvent */\n#define DISPID_IDOMUIEVENT_VIEW         DISPID_DOMUIEVENT+1\n#define DISPID_IDOMUIEVENT_DETAIL       DISPID_DOMUIEVENT+2\n#define DISPID_IDOMUIEVENT_INITUIEVENT  DISPID_DOMUIEVENT+3\n\n/* IDOMMouseEvent */\n#define DISPID_IDOMMOUSEEVENT_SCREENX           DISPID_DOMMOUSEEVENT+1\n#define DISPID_IDOMMOUSEEVENT_SCREENY           DISPID_DOMMOUSEEVENT+2\n#define DISPID_IDOMMOUSEEVENT_CLIENTX           DISPID_DOMMOUSEEVENT+3\n#define DISPID_IDOMMOUSEEVENT_CLIENTY           DISPID_DOMMOUSEEVENT+4\n#define DISPID_IDOMMOUSEEVENT_CTRLKEY           DISPID_DOMMOUSEEVENT+5\n#define DISPID_IDOMMOUSEEVENT_SHIFTKEY          DISPID_DOMMOUSEEVENT+6\n#define DISPID_IDOMMOUSEEVENT_ALTKEY            DISPID_DOMMOUSEEVENT+7\n#define DISPID_IDOMMOUSEEVENT_METAKEY           DISPID_DOMMOUSEEVENT+8\n#define DISPID_IDOMMOUSEEVENT_BUTTON            DISPID_DOMMOUSEEVENT+9\n#define DISPID_IDOMMOUSEEVENT_RELATEDTARGET     DISPID_DOMMOUSEEVENT+10\n#define DISPID_IDOMMOUSEEVENT_INITMOUSEEVENT    DISPID_DOMMOUSEEVENT+11\n#define DISPID_IDOMMOUSEEVENT_GETMODIFIERSTATE  DISPID_DOMMOUSEEVENT+12\n#define DISPID_IDOMMOUSEEVENT_BUTTONS           DISPID_DOMMOUSEEVENT+13\n#define DISPID_IDOMMOUSEEVENT_FROMELEMENT       DISPID_DOMMOUSEEVENT+14\n#define DISPID_IDOMMOUSEEVENT_TOELEMENT         DISPID_DOMMOUSEEVENT+15\n#define DISPID_IDOMMOUSEEVENT_X                 DISPID_DOMMOUSEEVENT+16\n#define DISPID_IDOMMOUSEEVENT_Y                 DISPID_DOMMOUSEEVENT+17\n#define DISPID_IDOMMOUSEEVENT_OFFSETX           DISPID_DOMMOUSEEVENT+18\n#define DISPID_IDOMMOUSEEVENT_OFFSETY           DISPID_DOMMOUSEEVENT+19\n#define DISPID_IDOMMOUSEEVENT_PAGEX             DISPID_DOMMOUSEEVENT+20\n#define DISPID_IDOMMOUSEEVENT_PAGEY             DISPID_DOMMOUSEEVENT+21\n#define DISPID_IDOMMOUSEEVENT_LAYERX            DISPID_DOMMOUSEEVENT+22\n#define DISPID_IDOMMOUSEEVENT_LAYERY            DISPID_DOMMOUSEEVENT+23\n#define DISPID_IDOMMOUSEEVENT_WHICH             DISPID_DOMMOUSEEVENT+24\n\n/* IDOMKeyboardEvent */\n#define DISPID_IDOMKEYBOARDEVENT_KEY                DISPID_DOMKEYBOARDEVENT+1\n#define DISPID_IDOMKEYBOARDEVENT_LOCATION           DISPID_DOMKEYBOARDEVENT+2\n#define DISPID_IDOMKEYBOARDEVENT_CTRLKEY            DISPID_DOMKEYBOARDEVENT+3\n#define DISPID_IDOMKEYBOARDEVENT_SHIFTKEY           DISPID_DOMKEYBOARDEVENT+4\n#define DISPID_IDOMKEYBOARDEVENT_ALTKEY             DISPID_DOMKEYBOARDEVENT+5\n#define DISPID_IDOMKEYBOARDEVENT_METAKEY            DISPID_DOMKEYBOARDEVENT+6\n#define DISPID_IDOMKEYBOARDEVENT_REPEAT             DISPID_DOMKEYBOARDEVENT+7\n#define DISPID_IDOMKEYBOARDEVENT_GETMODIFIERSTATE   DISPID_DOMKEYBOARDEVENT+8\n#define DISPID_IDOMKEYBOARDEVENT_INITKEYBOARDEVENT  DISPID_DOMKEYBOARDEVENT+9\n#define DISPID_IDOMKEYBOARDEVENT_KEYCODE            DISPID_DOMKEYBOARDEVENT+10\n#define DISPID_IDOMKEYBOARDEVENT_CHARCODE           DISPID_DOMKEYBOARDEVENT+11\n#define DISPID_IDOMKEYBOARDEVENT_WHICH              DISPID_DOMKEYBOARDEVENT+12\n#define DISPID_IDOMKEYBOARDEVENT_IE9_CHAR           DISPID_DOMKEYBOARDEVENT+13\n#define DISPID_IDOMKEYBOARDEVENT_LOCALE             DISPID_DOMKEYBOARDEVENT+14\n\n/* IDOMMessageEvent */\n#define DISPID_IDOMMESSAGEEVENT_DATA              DISPID_DOMMESSAGEEVENT+1\n#define DISPID_IDOMMESSAGEEVENT_ORIGIN            DISPID_DOMMESSAGEEVENT+2\n#define DISPID_IDOMMESSAGEEVENT_SOURCE            DISPID_DOMMESSAGEEVENT+3\n#define DISPID_IDOMMESSAGEEVENT_INITMESSAGEEVENT  DISPID_DOMMESSAGEEVENT+4\n\n/* IHTMLControlElement */\n#define DISPID_IHTMLCONTROLELEMENT_TABINDEX        STDPROPID_XOBJ_TABINDEX\n#define DISPID_IHTMLCONTROLELEMENT_FOCUS           (DISPID_SITE+0)\n#define DISPID_IHTMLCONTROLELEMENT_ACCESSKEY       (DISPID_SITE+5)\n#define DISPID_IHTMLCONTROLELEMENT_ONBLUR          DISPID_EVPROP_ONBLUR\n#define DISPID_IHTMLCONTROLELEMENT_ONFOCUS         DISPID_EVPROP_ONFOCUS\n#define DISPID_IHTMLCONTROLELEMENT_ONRESIZE        DISPID_EVPROP_ONRESIZE\n#define DISPID_IHTMLCONTROLELEMENT_BLUR            (DISPID_SITE+2)\n#define DISPID_IHTMLCONTROLELEMENT_ADDFILTER       (DISPID_SITE+17)\n#define DISPID_IHTMLCONTROLELEMENT_REMOVEFILTER    (DISPID_SITE+18)\n#define DISPID_IHTMLCONTROLELEMENT_CLIENTHEIGHT    (DISPID_SITE+19)\n#define DISPID_IHTMLCONTROLELEMENT_CLIENTWIDTH     (DISPID_SITE+20)\n#define DISPID_IHTMLCONTROLELEMENT_CLIENTTOP       (DISPID_SITE+21)\n#define DISPID_IHTMLCONTROLELEMENT_CLIENTLEFT      (DISPID_SITE+22)\n\n/* IDOMProcessingInstruction */\n#define DISPID_IDOMPROCESSINGINSTRUCTION_TARGET  DISPID_PROCESSINGINSTRUCTION\n#define DISPID_IDOMPROCESSINGINSTRUCTION_DATA    DISPID_PROCESSINGINSTRUCTION+1\n\n/* IHTMLPerformanceNavigation */\n#define DISPID_IHTMLPERFORMANCENAVIGATION_TYPE           DISPID_PERFORMANCENAVIGATION\n#define DISPID_IHTMLPERFORMANCENAVIGATION_REDIRECTCOUNT  DISPID_PERFORMANCENAVIGATION+1\n#define DISPID_IHTMLPERFORMANCENAVIGATION_TOSTRING       DISPID_PERFORMANCENAVIGATION+2\n#define DISPID_IHTMLPERFORMANCENAVIGATION_TOJSON         DISPID_PERFORMANCENAVIGATION+3\n\n/* IHTMLPerformanceTiming */\n#define DISPID_IHTMLPERFORMANCETIMING_NAVIGATIONSTART             DISPID_PERFORMANCETIMING\n#define DISPID_IHTMLPERFORMANCETIMING_UNLOADEVENTSTART            DISPID_PERFORMANCETIMING+1\n#define DISPID_IHTMLPERFORMANCETIMING_UNLOADEVENTEND              DISPID_PERFORMANCETIMING+2\n#define DISPID_IHTMLPERFORMANCETIMING_REDIRECTSTART               DISPID_PERFORMANCETIMING+3\n#define DISPID_IHTMLPERFORMANCETIMING_REDIRECTEND                 DISPID_PERFORMANCETIMING+4\n#define DISPID_IHTMLPERFORMANCETIMING_FETCHSTART                  DISPID_PERFORMANCETIMING+5\n#define DISPID_IHTMLPERFORMANCETIMING_DOMAINLOOKUPSTART           DISPID_PERFORMANCETIMING+6\n#define DISPID_IHTMLPERFORMANCETIMING_DOMAINLOOKUPEND             DISPID_PERFORMANCETIMING+7\n#define DISPID_IHTMLPERFORMANCETIMING_CONNECTSTART                DISPID_PERFORMANCETIMING+8\n#define DISPID_IHTMLPERFORMANCETIMING_CONNECTEND                  DISPID_PERFORMANCETIMING+9\n#define DISPID_IHTMLPERFORMANCETIMING_REQUESTSTART                DISPID_PERFORMANCETIMING+10\n#define DISPID_IHTMLPERFORMANCETIMING_RESPONSESTART               DISPID_PERFORMANCETIMING+11\n#define DISPID_IHTMLPERFORMANCETIMING_RESPONSEEND                 DISPID_PERFORMANCETIMING+12\n#define DISPID_IHTMLPERFORMANCETIMING_DOMLOADING                  DISPID_PERFORMANCETIMING+13\n#define DISPID_IHTMLPERFORMANCETIMING_DOMINTERACTIVE              DISPID_PERFORMANCETIMING+14\n#define DISPID_IHTMLPERFORMANCETIMING_DOMCONTENTLOADEDEVENTSTART  DISPID_PERFORMANCETIMING+15\n#define DISPID_IHTMLPERFORMANCETIMING_DOMCONTENTLOADEDEVENTEND    DISPID_PERFORMANCETIMING+16\n#define DISPID_IHTMLPERFORMANCETIMING_DOMCOMPLETE                 DISPID_PERFORMANCETIMING+17\n#define DISPID_IHTMLPERFORMANCETIMING_LOADEVENTSTART              DISPID_PERFORMANCETIMING+18\n#define DISPID_IHTMLPERFORMANCETIMING_LOADEVENTEND                DISPID_PERFORMANCETIMING+19\n#define DISPID_IHTMLPERFORMANCETIMING_MSFIRSTPAINT                DISPID_PERFORMANCETIMING+20\n#define DISPID_IHTMLPERFORMANCETIMING_TOSTRING                    DISPID_PERFORMANCETIMING+21\n#define DISPID_IHTMLPERFORMANCETIMING_TOJSON                      DISPID_PERFORMANCETIMING+22\n\n/* IHTMLPerformance */\n#define DISPID_IHTMLPERFORMANCE_NAVIGATION  DISPID_PERFORMANCE\n#define DISPID_IHTMLPERFORMANCE_TIMING      DISPID_PERFORMANCE+1\n#define DISPID_IHTMLPERFORMANCE_TOSTRING    DISPID_PERFORMANCE+2\n#define DISPID_IHTMLPERFORMANCE_TOJSON      DISPID_PERFORMANCE+3\n\n/* IDocumentEvent */\n#define DISPID_IDOCUMENTEVENT_CREATEEVENT          DISPID_OMDOCUMENT+108\n\n/* IDocumentSelector */\n#define DISPID_IDOCUMENTSELECTOR_QUERYSELECTOR     DISPID_OMDOCUMENT+105\n#define DISPID_IDOCUMENTSELECTOR_QUERYSELECTORALL  DISPID_OMDOCUMENT+106\n\n#endif /* __MSHTMDID_H__ */\n"
  },
  {
    "path": "wine/windows/mshtmhst.idl",
    "content": "/*\n * Copyright 2005 Jacek Caban\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"ocidl.idl\";\nimport \"objidl.idl\";\nimport \"oleidl.idl\";\nimport \"oaidl.idl\";\nimport \"docobj.idl\";\n\ncpp_quote(\"#define CONTEXT_MENU_DEFAULT     0\")\ncpp_quote(\"#define CONTEXT_MENU_IMAGE       1\")\ncpp_quote(\"#define CONTEXT_MENU_CONTROL     2\")\ncpp_quote(\"#define CONTEXT_MENU_TABLE       3\")\ncpp_quote(\"#define CONTEXT_MENU_TEXTSELECT  4\")\ncpp_quote(\"#define CONTEXT_MENU_ANCHOR      5\")\ncpp_quote(\"#define CONTEXT_MENU_UNKNOWN     6\")\ncpp_quote(\"#define CONTEXT_MENU_IMGDYNSRC   7\")\ncpp_quote(\"#define CONTEXT_MENU_IMGART      8\")\ncpp_quote(\"#define CONTEXT_MENU_DEBUG       9\")\ncpp_quote(\"#define CONTEXT_MENU_VSCROLL    10\")\ncpp_quote(\"#define CONTEXT_MENU_HSCROLL    11\")\n\ncpp_quote(\"#define MENUEXT_SHOWDIALOG 1\")\n\ncpp_quote(\"#define DOCHOSTUIFLAG_BROWSER (DOCHOSTUIFLAG_DISABLE_HELP_MENU|DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE)\")\n\ncpp_quote(\"#define HTMLDLG_NOUI            0x0010\")\ncpp_quote(\"#define HTMLDLG_MODAL           0x0020\")\ncpp_quote(\"#define HTMLDLG_MODELESS        0x0040\")\ncpp_quote(\"#define HTMLDLG_PRINT_TEMPLATE  0x0080\")\ncpp_quote(\"#define HTMLDLG_VERIFY          0x0100\")\n\ncpp_quote(\"#define PRINT_DONTBOTHERUSER     0x0001\")\ncpp_quote(\"#define PRINT_WAITFORCOMPLETION  0x0002\")\n\ncpp_quote(\"DEFINE_GUID(CGID_MSHTML, 0xde4ba900,0x59ca,0x11cf,0x95,0x92,0x44,0x45,0x53,0x54,0x00,0x00);\")\ncpp_quote(\"#define CMDSETID_Forms3 CGID_MSHTML\")\n\ncpp_quote(\"#if defined(__GNUC__)\")\ncpp_quote(\"#define SZ_HTML_CLIENTSITE_OBJECTPARAM (const WCHAR[]) {'{','d','4','d','b','6','8','5','0','-','5','3','8','5','-','1','1','d','0','-','8','9','e','9','-','0','0','a','0','c','9','0','a','9','0','a','c','}',0}\")\ncpp_quote(\"#elif defined(_MSC_VER)\")\ncpp_quote(\"#define SZ_HTML_CLIENTSITE_OBJECTPARAM L\\\"{d4db6850-5385-11d0-89e9-00a0c90a90ac}\\\"\")\ncpp_quote(\"#else\")\ncpp_quote(\"static const WCHAR SZ_HTML_CLIENTSITE_OBJECTPARAM[] = {'{','d','4','d','b','6','8','5','0','-','5','3','8','5','-','1','1','d','0','-','8','9','e','9','-','0','0','a','0','c','9','0','a','9','0','a','c','}',0};\")\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#ifndef __IHTMLWindow2_FWD_DEFINED__\")\ncpp_quote(\"#define __IHTMLWindow2_FWD_DEFINED__\")\ncpp_quote(\"typedef interface IHTMLWindow2 IHTMLWindow2;\")\ncpp_quote(\"#endif\")\n\n/*****************************************************************************\n *    IHostDialogHelper interface\n */\n[\n    object,\n    uuid(53DEC138-A51E-11d2-861E-00C04FA35C89),\n    pointer_default(unique),\n    local\n]\ninterface IHostDialogHelper : IUnknown\n{\n    HRESULT ShowHTMLDialog(\n        HWND hwndParent,\n        IMoniker *pMk,\n        VARIANT *pvarArgIn,\n        WCHAR *pchOptions,\n        VARIANT *pvarArgOut,\n        IUnknown *punkHost);\n}\n\n/*****************************************************************************\n *    HostDialogHelper coclass\n */\n[\n    uuid(429AF92C-A51F-11d2-861E-00C04FA35C89)\n]\ncoclass HostDialogHelper\n{\n    [default] interface IHostDialogHelper;\n}\n\n/*****************************************************************************\n *    IDocHostUIHandler interface\n */\n\ntypedef enum tagDOCHOSTUITYPE {\n    DOCHOSTUITYPE_BROWSE = 0,\n    DOCHOSTUITYPE_AUTHOR = 1\n} DOCHOSTUITYPE;\n\ntypedef enum tagDOCHOSTUIDBLCLK\n{\n    DOCHOSTUIDBLCLK_DEFAULT         = 0,\n    DOCHOSTUIDBLCLK_SHOWPROPERTIES  = 1,\n    DOCHOSTUIDBLCLK_SHOWCODE        = 2\n} DOCHOSTUIDBLCLK;\n\ntypedef enum tagDOCHOSTUIFLAG\n{\n    DOCHOSTUIFLAG_DIALOG                         = 0x00000001,\n    DOCHOSTUIFLAG_DISABLE_HELP_MENU              = 0x00000002,\n    DOCHOSTUIFLAG_NO3DBORDER                     = 0x00000004,\n    DOCHOSTUIFLAG_SCROLL_NO                      = 0x00000008,\n    DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE        = 0x00000010,\n    DOCHOSTUIFLAG_OPENNEWWIN                     = 0x00000020,\n    DOCHOSTUIFLAG_DISABLE_OFFSCREEN              = 0x00000040,\n    DOCHOSTUIFLAG_FLAT_SCROLLBAR                 = 0x00000080,\n    DOCHOSTUIFLAG_DIV_BLOCKDEFAULT               = 0x00000100,\n    DOCHOSTUIFLAG_ACTIVATE_CLIENTHIT_ONLY        = 0x00000200,\n    DOCHOSTUIFLAG_OVERRIDEBEHAVIORFACTORY        = 0x00000400,\n    DOCHOSTUIFLAG_CODEPAGELINKEDFONTS            = 0x00000800,\n    DOCHOSTUIFLAG_URL_ENCODING_DISABLE_UTF8      = 0x00001000,\n    DOCHOSTUIFLAG_URL_ENCODING_ENABLE_UTF8       = 0x00002000,\n    DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE      = 0x00004000,\n    DOCHOSTUIFLAG_ENABLE_INPLACE_NAVIGATION      = 0x00010000,\n    DOCHOSTUIFLAG_IME_ENABLE_RECONVERSION        = 0x00020000,\n    DOCHOSTUIFLAG_THEME                          = 0x00040000,\n    DOCHOSTUIFLAG_NOTHEME                        = 0x00080000,\n    DOCHOSTUIFLAG_NOPICS                         = 0x00100000,\n    DOCHOSTUIFLAG_NO3DOUTERBORDER                = 0x00200000,\n    DOCHOSTUIFLAG_DISABLE_EDIT_NS_FIXUP          = 0x00400000,\n    DOCHOSTUIFLAG_LOCAL_MACHINE_ACCESS_CHECK     = 0x00800000,\n    DOCHOSTUIFLAG_DISABLE_UNTRUSTEDPROTOCOL      = 0x01000000,\n    DOCHOSTUIFLAG_HOST_NAVIGATES                 = 0x02000000,\n    DOCHOSTUIFLAG_ENABLE_REDIRECT_NOTIFICATION   = 0x04000000,\n    DOCHOSTUIFLAG_USE_WINDOWLESS_SELECTCONTROL   = 0x08000000,\n    DOCHOSTUIFLAG_USE_WINDOWED_SELECTCONTROL     = 0x10000000,\n    DOCHOSTUIFLAG_ENABLE_ACTIVEX_INACTIVATE_MODE = 0x20000000,\n    DOCHOSTUIFLAG_DPI_AWARE                      = 0x40000000\n} DOCHOSTUIFLAG;\n\n[\n    object,\n    uuid(BD3F23C0-D43E-11CF-893B-00AA00BDCE1A),\n    pointer_default(unique),\n    local\n]\ninterface IDocHostUIHandler : IUnknown\n{\n    typedef struct _DOCHOSTUIINFO\n    {\n        ULONG cbSize;\n        DWORD dwFlags;\n        DWORD dwDoubleClick;\n        OLECHAR *pchHostCss;\n        OLECHAR *pchHostNS;\n    } DOCHOSTUIINFO;\n\n    HRESULT ShowContextMenu(\n        [in] DWORD dwID, \n        [in] POINT *ppt, \n        [in] IUnknown *pcmdtReserved,  \n        [in] IDispatch *pdispReserved);\n\n    HRESULT GetHostInfo([in, out] DOCHOSTUIINFO *pInfo);\n\n    HRESULT ShowUI(\n        [in] DWORD dwID,\n        [in] IOleInPlaceActiveObject *pActiveObject,\n        [in] IOleCommandTarget *pCommandTarget,\n        [in] IOleInPlaceFrame *pFrame,\n        [in] IOleInPlaceUIWindow *pDoc);\n\n    HRESULT HideUI();\n\n    HRESULT UpdateUI();\n\n    HRESULT EnableModeless([in] BOOL fEnable);\n\n    HRESULT OnDocWindowActivate([in] BOOL fActivate);\n\n    HRESULT OnFrameWindowActivate([in] BOOL fActivate);\n\n    HRESULT ResizeBorder(\n        [in] LPCRECT prcBorder,\n        [in] IOleInPlaceUIWindow *pUIWindow,\n        [in] BOOL fRameWindow);\n\n    HRESULT TranslateAccelerator(\n        [in] LPMSG lpMsg,\n        [in] const GUID *pguidCmdGroup, \n        [in] DWORD nCmdID);\n\n    HRESULT GetOptionKeyPath(\n        [out] LPOLESTR *pchKey,\n        [in] DWORD dw);\n\n    HRESULT GetDropTarget(\n        [in] IDropTarget *pDropTarget, \n        [out] IDropTarget **ppDropTarget);\n\n    HRESULT GetExternal([out] IDispatch **ppDispatch);\n\n    HRESULT TranslateUrl(\n        [in] DWORD dwTranslate,\n        [in] OLECHAR *pchURLIn,\n        [out] OLECHAR **ppchURLOut);\n\n    HRESULT FilterDataObject(\n        [in] IDataObject *pDO,\n        [out] IDataObject **ppDORet);\n}\n\ncpp_quote(\"DEFINE_GUID(CGID_DocHostCommandHandler,0xf38bc242,0xb950,0x11d1,0x89,0x18,0x00,0xc0,0x4f,0xc2,0xc8,0x36);\")\n\n[\n    object,\n    uuid(3050F6D0-98b5-11CF-BB82-00AA00BDCE0B),\n    pointer_default(unique),\n    local\n]\ninterface IDocHostUIHandler2 : IDocHostUIHandler\n{\n    HRESULT GetOverrideKeyPath(\n        [out] LPOLESTR *pchKey,\n        [in] DWORD dw);\n}\n\n/*****************************************************************************\n *    ICustomDoc interface\n */\n[\n    object,\n    uuid(3050f3f0-98b5-11cf-bb82-00aa00bdce0b),\n    pointer_default(unique),\n    local\n]\ninterface ICustomDoc : IUnknown\n{\n    HRESULT SetUIHandler([in] IDocHostUIHandler *pUIHandler);\n}\n\n/*****************************************************************************\n *    IDocHostShowUI interface\n */\n[\n    object,\n    uuid(c4d244b0-d43e-11cf-893b-00aa00bdce1a),\n    pointer_default(unique),\n    local\n]\ninterface IDocHostShowUI : IUnknown\n{\n    HRESULT ShowMessage(\n        [in] HWND hwnd,\n        [in] LPOLESTR lpstrText,\n        [in] LPOLESTR lpstrCaption,\n        [in] DWORD dwType,\n        [in] LPOLESTR lpstrHelpFile,\n        [in] DWORD dwHelpContext,\n        [out] LRESULT *plResult);\n\n    HRESULT ShowHelp(\n        [in] HWND hwnd,\n        [in] LPOLESTR pszHelpFile,\n        [in] UINT uCommand,\n        [in] DWORD dwData,\n        [in] POINT ptMouse,\n        [out] IDispatch *pDispatchObjectHit);\n}\n\n/*****************************************************************************\n *    IClassFactoryEx interface\n */\n\ncpp_quote(\"#define IClassFactory3 IClassFactoryEx\")\ncpp_quote(\"#define IID_IClassFactory3 IID_IClassFactoryEx\")\n\n[\n    object,\n    uuid(342D1EA0-AE25-11D1-89C5-006008C3FBFC),\n    pointer_default(unique),\n    local\n]\ninterface IClassFactoryEx : IClassFactory\n{\n    HRESULT CreateInstanceWithContext(\n        IUnknown *punkContext,\n        IUnknown *punkOuter,\n        REFIID riid,\n        [out] void **ppv);\n}\n\ncpp_quote(\"typedef HRESULT WINAPI SHOWHTMLDIALOGFN(HWND,IMoniker*,VARIANT*,WCHAR*,VARIANT*);\")\ncpp_quote(\"typedef HRESULT WINAPI SHOWHTMLDIALOGEXFN(HWND,IMoniker*,DWORD,VARIANT*,WCHAR*,VARIANT*);\")\ncpp_quote(\"typedef HRESULT WINAPI SHOWMODELESSHTMLDIALOGFN(HWND,IMoniker*,VARIANT*,VARIANT*,IHTMLWindow2**);\")\n\ncpp_quote(\"EXTERN_C HRESULT WINAPI ShowHTMLDialog(HWND,IMoniker*,VARIANT*,WCHAR*,VARIANT*);\")\ncpp_quote(\"EXTERN_C HRESULT WINAPI ShowHTMLDialogEx(HWND,IMoniker*,DWORD,VARIANT*,WCHAR*,VARIANT*);\")\ncpp_quote(\"EXTERN_C HRESULT WINAPI ShowModelessHTMLDialog(HWND,IMoniker*,VARIANT*,VARIANT*,IHTMLWindow2**);\")\ncpp_quote(\"EXTERN_C HRESULT WINAPI RunHTMLApplication(HINSTANCE,HINSTANCE,LPSTR,int);\")\ncpp_quote(\"EXTERN_C HRESULT WINAPI CreateHTMLPropertyPage(IMoniker*,IPropertyPage**);\")\n"
  },
  {
    "path": "wine/windows/mshtml.idl",
    "content": "/*\n * Copyright 2004-2010 Jacek Caban for CodeWeavers\n * Copyright 2008      Konstantin Kondratyuk (Etersoft)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <mshtmdid.h>\n#include <mshtmcid.h>\n#include <olectl.h>\n\nimport \"ocidl.idl\";\nimport \"dimm.idl\";\nimport \"shtypes.idl\";\nimport \"dispex.idl\";\n\n#ifndef __WIDL__\n#define progid(str)\n#define vi_progid(str)\n#endif\n\ncpp_quote(\"#include <olectl.h>\")\n\ncpp_quote(\"DEFINE_GUID(CLSID_MHTMLDocument,     0x3050f3d9,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);\")\n\ncpp_quote(\"DEFINE_GUID(SID_SEditCommandTarget,  0x3050f4b5,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);\")\ncpp_quote(\"DEFINE_GUID(SID_SHTMLEditHost,       0x3050f6a0,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);\")\ncpp_quote(\"DEFINE_GUID(SID_SHTMLEditServices,   0x3050f7f9,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);\")\ncpp_quote(\"#define SID_SHTMLWindow IID_IHTMLWindow2\")\ncpp_quote(\"#define SID_SElementBehaviorFactory IID_IElementBehaviorFactory\")\n\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef FindText\")\ncpp_quote(\"#endif\")\n\ntypedef enum {\n    POINTER_GRAVITY_Left,\n    POINTER_GRAVITY_Right,\n    POINTER_GRAVITY_Max = 2147483647\n} POINTER_GRAVITY;\n\ntypedef enum {\n    CONTEXT_TYPE_None,\n    CONTEXT_TYPE_Text,\n    CONTEXT_TYPE_EnterScope,\n    CONTEXT_TYPE_ExitScope,\n    CONTEXT_TYPE_NoScope,\n    MARKUP_CONTEXT_TYPE_Max = 2147483647\n} MARKUP_CONTEXT_TYPE;\n\ntypedef enum {\n    ELEM_ADJ_BeforeBegin,\n    ELEM_ADJ_AfterBegin,\n    ELEM_ADJ_BeforeEnd,\n    ELEM_ADJ_AfterEnd,\n    ELEMENT_ADJACENCY_Max = 2147483647\n} ELEMENT_ADJACENCY;\n\ntypedef enum {\n    MOVEUNIT_PREVCHAR,\n    MOVEUNIT_NEXTCHAR,\n    MOVEUNIT_PREVCLUSTERBEG,\n    MOVEUNIT_NEXTCLUSTERBEG,\n    MOVEUNIT_PREVCLUSTEREND,\n    MOVEUNIT_NEXTCLUSTEREND,\n    MOVEUNIT_PREVWORDBEG,\n    MOVEUNIT_NEXTWORDBEG,\n    MOVEUNIT_PREVWORDEND,\n    MOVEUNIT_NEXTWORDEND,\n    MOVEUNIT_PREVPROOFWORD,\n    MOVEUNIT_NEXTPROOFWORD,\n    MOVEUNIT_NEXTURLBEG,\n    MOVEUNIT_PREVURLBEG,\n    MOVEUNIT_NEXTURLEND,\n    MOVEUNIT_PREVURLEND,\n    MOVEUNIT_PREVSENTENCE,\n    MOVEUNIT_NEXTSENTENCE,\n    MOVEUNIT_PREVBLOCK,\n    MOVEUNIT_NEXTBLOCK,\n    MOVEUNIT_ACTION_Max = 2147483647\n} MOVEUNIT_ACTION;\n\ntypedef enum _SELECTION_TYPE {\n    SELECTION_TYPE_None,\n    SELECTION_TYPE_Caret,\n    SELECTION_TYPE_Text,\n    SELECTION_TYPE_Control,\n    SELECTION_TYPE_Max = 2147483647\n} SELECTION_TYPE;\n\n[\n    version(4.0),\n    uuid(3050F1C5-98B5-11CF-BB82-00AA00BDCE0B)\n]\nlibrary MSHTML\n{\n\nimportlib(\"stdole2.tlb\");\n\ntypedef enum _DomConstructor {\n    DomConstructorObject                      = 0,\n    DomConstructorAttr                        = 1,\n    DomConstructorBehaviorUrnsCollection      = 2,\n    DomConstructorBookmarkCollection          = 3,\n    DomConstructorCompatibleInfo              = 4,\n    DomConstructorCompatibleInfoCollection    = 5,\n    DomConstructorControlRangeCollection      = 6,\n    DomConstructorCSSCurrentStyleDeclaration  = 7,\n    DomConstructorCSSRuleList                 = 8,\n    DomConstructorCSSRuleStyleDeclaration     = 9,\n    DomConstructorCSSStyleDeclaration         = 10,\n    DomConstructorCSSStyleRule                = 11,\n    DomConstructorCSSStyleSheet               = 12,\n    DomConstructorDataTransfer                = 13,\n    DomConstructorDOMImplementation           = 14,\n    DomConstructorElement                     = 15,\n    DomConstructorEvent                       = 16,\n    DomConstructorHistory                     = 17,\n    DomConstructorHTCElementBehaviorDefaults  = 18,\n    DomConstructorHTMLAnchorElement           = 19,\n    DomConstructorHTMLAreaElement             = 20,\n    DomConstructorHTMLAreasCollection         = 21,\n    DomConstructorHTMLBaseElement             = 22,\n    DomConstructorHTMLBaseFontElement         = 23,\n    DomConstructorHTMLBGSoundElement          = 24,\n    DomConstructorHTMLBlockElement            = 25,\n    DomConstructorHTMLBodyElement             = 26,\n    DomConstructorHTMLBRElement               = 27,\n    DomConstructorHTMLButtonElement           = 28,\n    DomConstructorHTMLCollection              = 29,\n    DomConstructorHTMLCommentElement          = 30,\n    DomConstructorHTMLDDElement               = 31,\n    DomConstructorHTMLDivElement              = 32,\n    DomConstructorHTMLDocument                = 33,\n    DomConstructorHTMLDListElement            = 34,\n    DomConstructorHTMLDTElement               = 35,\n    DomConstructorHTMLEmbedElement            = 36,\n    DomConstructorHTMLFieldSetElement         = 37,\n    DomConstructorHTMLFontElement             = 38,\n    DomConstructorHTMLFormElement             = 39,\n    DomConstructorHTMLFrameElement            = 40,\n    DomConstructorHTMLFrameSetElement         = 41,\n    DomConstructorHTMLGenericElement          = 42,\n    DomConstructorHTMLHeadElement             = 43,\n    DomConstructorHTMLHeadingElement          = 44,\n    DomConstructorHTMLHRElement               = 45,\n    DomConstructorHTMLHtmlElement             = 46,\n    DomConstructorHTMLIFrameElement           = 47,\n    DomConstructorHTMLImageElement            = 48,\n    DomConstructorHTMLInputElement            = 49,\n    DomConstructorHTMLIsIndexElement          = 50,\n    DomConstructorHTMLLabelElement            = 51,\n    DomConstructorHTMLLegendElement           = 52,\n    DomConstructorHTMLLIElement               = 53,\n    DomConstructorHTMLLinkElement             = 54,\n    DomConstructorHTMLMapElement              = 55,\n    DomConstructorHTMLMarqueeElement          = 56,\n    DomConstructorHTMLMetaElement             = 57,\n    DomConstructorHTMLModelessDialog          = 58,\n    DomConstructorHTMLNamespaceInfo           = 59,\n    DomConstructorHTMLNamespaceInfoCollection = 60,\n    DomConstructorHTMLNextIdElement           = 61,\n    DomConstructorHTMLNoShowElement           = 62,\n    DomConstructorHTMLObjectElement           = 63,\n    DomConstructorHTMLOListElement            = 64,\n    DomConstructorHTMLOptionElement           = 65,\n    DomConstructorHTMLParagraphElement        = 66,\n    DomConstructorHTMLParamElement            = 67,\n    DomConstructorHTMLPhraseElement           = 68,\n    DomConstructorHTMLPluginsCollection       = 69,\n    DomConstructorHTMLPopup                   = 70,\n    DomConstructorHTMLScriptElement           = 71,\n    DomConstructorHTMLSelectElement           = 72,\n    DomConstructorHTMLSpanElement             = 73,\n    DomConstructorHTMLStyleElement            = 74,\n    DomConstructorHTMLTableCaptionElement     = 75,\n    DomConstructorHTMLTableCellElement        = 76,\n    DomConstructorHTMLTableColElement         = 77,\n    DomConstructorHTMLTableElement            = 78,\n    DomConstructorHTMLTableRowElement         = 79,\n    DomConstructorHTMLTableSectionElement     = 80,\n    DomConstructorHTMLTextAreaElement         = 81,\n    DomConstructorHTMLTextElement             = 82,\n    DomConstructorHTMLTitleElement            = 83,\n    DomConstructorHTMLUListElement            = 84,\n    DomConstructorHTMLUnknownElement          = 85,\n    DomConstructorImage                       = 86,\n    DomConstructorLocation                    = 87,\n    DomConstructorNamedNodeMap                = 88,\n    DomConstructorNavigator                   = 89,\n    DomConstructorNodeList                    = 90,\n    DomConstructorOption                      = 91,\n    DomConstructorScreen                      = 92,\n    DomConstructorSelection                   = 93,\n    DomConstructorStaticNodeList              = 94,\n    DomConstructorStorage                     = 95,\n    DomConstructorStyleSheetList              = 96,\n    DomConstructorStyleSheetPage              = 97,\n    DomConstructorStyleSheetPageList          = 98,\n    DomConstructorText                        = 99,\n    DomConstructorTextRange                   = 100,\n    DomConstructorTextRangeCollection         = 101,\n    DomConstructorTextRectangle               = 102,\n    DomConstructorTextRectangleList           = 103,\n    DomConstructorWindow                      = 104,\n    DomConstructorXDomainRequest              = 105,\n    DomConstructorXMLHttpRequest              = 106,\n    DomConstructorMax                         = 107,\n    DomConstructor_Max                        = 2147483647L\n} DomConstructor;\n\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3051049b-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLDOMConstructor : IDispatch\n{\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]\n    HRESULT constructor([retval, out] IDispatch* * p);\n\n    HRESULT LookupGetter([in] BSTR propname, [retval, out] VARIANT* ppDispHandler);\n\n    HRESULT LookupSetter([in] BSTR propname, [retval, out] VARIANT* ppDispHandler);\n\n    HRESULT DefineGetter([in] BSTR propname, [in] VARIANT* pdispHandler);\n\n    HRESULT DefineSetter([in] BSTR propname, [in] VARIANT* pdispHandler);\n}\n\n#define WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL                     \\\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]       \\\n    IDispatch *constructor()\n\ninterface IHTMLDocument2;\ninterface IHTMLElement2;\ninterface IHTMLStyleSheetsCollection;\ninterface IHTMLFrameBase;\ninterface IHTMLStorage;\ninterface IDOMEvent;\n\n/*****************************************************************************\n *    IHTMLCSSStyleDeclaration interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(30510740-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLCSSStyleDeclaration : IDispatch\n{\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LENGTH)]\n    HRESULT length([out, retval] long *p);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_PARENTRULE)]\n    HRESULT parentRule([out, retval] VARIANT *p);\n\n    [id(DISPID_IHTMLCSSSTYLEDECLARATION_GETPROPERTYVALUE)]\n    HRESULT getPropertyValue(\n            [in] BSTR bstrPropertyName,\n            [out, retval] BSTR *pbstrPropertyValue);\n\n    [id(DISPID_IHTMLCSSSTYLEDECLARATION_GETPROPERTYPRIORITY)]\n    HRESULT getPropertyPriority(\n            [in] BSTR bstrPropertyName,\n            [out, retval] BSTR *pbstrPropertyPriority);\n\n    [id(DISPID_IHTMLCSSSTYLEDECLARATION_REMOVEPROPERTY)]\n    HRESULT removeProperty(\n            [in] BSTR bstrPropertyName,\n            [out, retval] BSTR *pbstrPropertyValue);\n\n    [id(DISPID_IHTMLCSSSTYLEDECLARATION_SETPROPERTY)]\n    HRESULT setProperty(\n            [in] BSTR bstrPropertyName,\n            [in] VARIANT *pvarPropertyValue,\n            [in, defaultvalue(NULL)] VARIANT *pvarPropertyPriority);\n\n    [id(DISPID_IHTMLCSSSTYLEDECLARATION_ITEM)]\n    HRESULT item(\n            [in] long index,\n            [out, retval] BSTR *pbstrPropertyName);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTFAMILY), displaybind, bindable]\n    HRESULT fontFamily([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTFAMILY), displaybind, bindable]\n    HRESULT fontFamily([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTSTYLE), displaybind, bindable]\n    HRESULT fontStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTSTYLE), displaybind, bindable]\n    HRESULT fontStyle([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTVARIANT), displaybind, bindable]\n    HRESULT fontVariant([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTVARIANT), displaybind, bindable]\n    HRESULT fontVariant([retval, out] BSTR * p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTWEIGHT), displaybind, bindable]\n    HRESULT fontWeight([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTWEIGHT), displaybind, bindable]\n    HRESULT fontWeight([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTSIZE), displaybind, bindable]\n    HRESULT fontSize([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTSIZE), displaybind, bindable]\n    HRESULT fontSize([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONT), displaybind, bindable, nonbrowsable]\n    HRESULT font([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONT), displaybind, bindable, nonbrowsable]\n    HRESULT font([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_COLOR), displaybind, bindable]\n    HRESULT color([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_COLOR), displaybind, bindable]\n    HRESULT color([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUND), displaybind, bindable, nonbrowsable]\n    HRESULT background([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUND), displaybind, bindable, nonbrowsable]\n    HRESULT background([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDCOLOR), displaybind, bindable]\n    HRESULT backgroundColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDCOLOR), displaybind, bindable]\n    HRESULT backgroundColor([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDIMAGE), displaybind, bindable]\n    HRESULT backgroundImage([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDIMAGE), displaybind, bindable]\n    HRESULT backgroundImage([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDREPEAT), displaybind, bindable]\n    HRESULT backgroundRepeat([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDREPEAT), displaybind, bindable]\n    HRESULT backgroundRepeat([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDATTACHMENT), displaybind, bindable]\n    HRESULT backgroundAttachment([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDATTACHMENT), displaybind, bindable]\n    HRESULT backgroundAttachment([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDPOSITION), displaybind, bindable]\n    HRESULT backgroundPosition([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDPOSITION), displaybind, bindable]\n    HRESULT backgroundPosition([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDPOSITIONX), displaybind, bindable]\n    HRESULT backgroundPositionX([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDPOSITIONX), displaybind, bindable]\n    HRESULT backgroundPositionX([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDPOSITIONY), displaybind, bindable]\n    HRESULT backgroundPositionY([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDPOSITIONY), displaybind, bindable]\n    HRESULT backgroundPositionY([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_WORDSPACING), displaybind, bindable]\n    HRESULT wordSpacing([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_WORDSPACING), displaybind, bindable]\n    HRESULT wordSpacing([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LETTERSPACING), displaybind, bindable]\n    HRESULT letterSpacing([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LETTERSPACING), displaybind, bindable]\n    HRESULT letterSpacing([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTDECORATION), displaybind, bindable]\n    HRESULT textDecoration([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTDECORATION), displaybind, bindable]\n    HRESULT textDecoration([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_VERTICALALIGN), displaybind, bindable]\n    HRESULT verticalAlign([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_VERTICALALIGN), displaybind, bindable]\n    HRESULT verticalAlign([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTTRANSFORM), displaybind, bindable]\n    HRESULT textTransform([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTTRANSFORM), displaybind, bindable]\n    HRESULT textTransform([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTALIGN), displaybind, bindable]\n    HRESULT textAlign([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTALIGN), displaybind, bindable]\n    HRESULT textAlign([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTINDENT), displaybind, bindable]\n    HRESULT textIndent([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTINDENT), displaybind, bindable]\n    HRESULT textIndent([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LINEHEIGHT), displaybind, bindable]\n    HRESULT lineHeight([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LINEHEIGHT), displaybind, bindable]\n    HRESULT lineHeight([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARGINTOP), displaybind, bindable]\n    HRESULT marginTop([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARGINTOP), displaybind, bindable]\n    HRESULT marginTop([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARGINRIGHT), displaybind, bindable]\n    HRESULT marginRight([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARGINRIGHT), displaybind, bindable]\n    HRESULT marginRight([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARGINBOTTOM), displaybind, bindable]\n    HRESULT marginBottom([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARGINBOTTOM), displaybind, bindable]\n    HRESULT marginBottom([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARGINLEFT), displaybind, bindable]\n    HRESULT marginLeft([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARGINLEFT), displaybind, bindable]\n    HRESULT marginLeft([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARGIN), displaybind, bindable, nonbrowsable]\n    HRESULT margin([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARGIN), displaybind, bindable, nonbrowsable]\n    HRESULT margin([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_PADDINGTOP), displaybind, bindable]\n    HRESULT paddingTop([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_PADDINGTOP), displaybind, bindable]\n    HRESULT paddingTop([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_PADDINGRIGHT), displaybind, bindable]\n    HRESULT paddingRight([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_PADDINGRIGHT), displaybind, bindable]\n    HRESULT paddingRight([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_PADDINGBOTTOM), displaybind, bindable]\n    HRESULT paddingBottom([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_PADDINGBOTTOM), displaybind, bindable]\n    HRESULT paddingBottom([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_PADDINGLEFT), displaybind, bindable]\n    HRESULT paddingLeft([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_PADDINGLEFT), displaybind, bindable]\n    HRESULT paddingLeft([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_PADDING), displaybind, bindable, nonbrowsable]\n    HRESULT padding([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_PADDING), displaybind, bindable, nonbrowsable]\n    HRESULT padding([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDER), displaybind, bindable, nonbrowsable]\n    HRESULT border([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDER), displaybind, bindable, nonbrowsable]\n    HRESULT border([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOP), displaybind, bindable]\n    HRESULT borderTop([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOP), displaybind, bindable]\n    HRESULT borderTop([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRIGHT), displaybind, bindable]\n    HRESULT borderRight([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRIGHT), displaybind, bindable]\n    HRESULT borderRight([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOM), displaybind, bindable]\n    HRESULT borderBottom([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOM), displaybind, bindable]\n    HRESULT borderBottom([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERLEFT), displaybind, bindable]\n    HRESULT borderLeft([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERLEFT), displaybind, bindable]\n    HRESULT borderLeft([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERCOLOR), displaybind, bindable]\n    HRESULT borderColor([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERCOLOR), displaybind, bindable]\n    HRESULT borderColor([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPCOLOR), displaybind, bindable]\n    HRESULT borderTopColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPCOLOR), displaybind, bindable]\n    HRESULT borderTopColor([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRIGHTCOLOR), displaybind, bindable]\n    HRESULT borderRightColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRIGHTCOLOR), displaybind, bindable]\n    HRESULT borderRightColor([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMCOLOR), displaybind, bindable]\n    HRESULT borderBottomColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMCOLOR), displaybind, bindable]\n    HRESULT borderBottomColor([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERLEFTCOLOR), displaybind, bindable]\n    HRESULT borderLeftColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERLEFTCOLOR), displaybind, bindable]\n    HRESULT borderLeftColor([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERWIDTH), displaybind, bindable]\n    HRESULT borderWidth([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERWIDTH), displaybind, bindable]\n    HRESULT borderWidth([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPWIDTH), displaybind, bindable]\n    HRESULT borderTopWidth([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPWIDTH), displaybind, bindable]\n    HRESULT borderTopWidth([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRIGHTWIDTH), displaybind, bindable]\n    HRESULT borderRightWidth([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRIGHTWIDTH), displaybind, bindable]\n    HRESULT borderRightWidth([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMWIDTH), displaybind, bindable]\n    HRESULT borderBottomWidth([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMWIDTH), displaybind, bindable]\n    HRESULT borderBottomWidth([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERLEFTWIDTH), displaybind, bindable]\n    HRESULT borderLeftWidth([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERLEFTWIDTH), displaybind, bindable]\n    HRESULT borderLeftWidth([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERSTYLE), displaybind, bindable]\n    HRESULT borderStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERSTYLE), displaybind, bindable]\n    HRESULT borderStyle([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPSTYLE), displaybind, bindable]\n    HRESULT borderTopStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPSTYLE), displaybind, bindable]\n    HRESULT borderTopStyle([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRIGHTSTYLE), displaybind, bindable]\n    HRESULT borderRightStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRIGHTSTYLE), displaybind, bindable]\n    HRESULT borderRightStyle([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMSTYLE), displaybind, bindable]\n    HRESULT borderBottomStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMSTYLE), displaybind, bindable]\n    HRESULT borderBottomStyle([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERLEFTSTYLE), displaybind, bindable]\n    HRESULT borderLeftStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERLEFTSTYLE), displaybind, bindable]\n    HRESULT borderLeftStyle([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_WIDTH), displaybind, bindable]\n    HRESULT width([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_WIDTH), displaybind, bindable]\n    HRESULT width([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_HEIGHT), displaybind, bindable]\n    HRESULT height([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_HEIGHT), displaybind, bindable]\n    HRESULT height([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_STYLEFLOAT), displaybind, bindable]\n    HRESULT styleFloat([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_STYLEFLOAT), displaybind, bindable]\n    HRESULT styleFloat([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLEAR), displaybind, bindable]\n    HRESULT clear([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLEAR), displaybind, bindable]\n    HRESULT clear([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_DISPLAY), displaybind, bindable]\n    HRESULT display([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_DISPLAY), displaybind, bindable]\n    HRESULT display([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_VISIBILITY), displaybind, bindable]\n    HRESULT visibility([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_VISIBILITY), displaybind, bindable]\n    HRESULT visibility([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LISTSTYLETYPE), displaybind, bindable]\n    HRESULT listStyleType([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LISTSTYLETYPE), displaybind, bindable]\n    HRESULT listStyleType([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LISTSTYLEPOSITION), displaybind, bindable]\n    HRESULT listStylePosition([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LISTSTYLEPOSITION), displaybind, bindable]\n    HRESULT listStylePosition([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LISTSTYLEIMAGE), displaybind, bindable]\n    HRESULT listStyleImage([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LISTSTYLEIMAGE), displaybind, bindable]\n    HRESULT listStyleImage([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LISTSTYLE), displaybind, bindable, nonbrowsable]\n    HRESULT listStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LISTSTYLE), displaybind, bindable, nonbrowsable]\n    HRESULT listStyle([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_WHITESPACE), displaybind, bindable]\n    HRESULT whiteSpace([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_WHITESPACE), displaybind, bindable]\n    HRESULT whiteSpace([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TOP), displaybind, bindable]\n    HRESULT top([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TOP), displaybind, bindable]\n    HRESULT top([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LEFT), displaybind, bindable]\n    HRESULT left([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LEFT), displaybind, bindable]\n    HRESULT left([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_ZINDEX), displaybind, bindable]\n    HRESULT zIndex([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_ZINDEX), displaybind, bindable]\n    HRESULT zIndex([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_OVERFLOW), displaybind, bindable]\n    HRESULT overflow([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_OVERFLOW), displaybind, bindable]\n    HRESULT overflow([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_PAGEBREAKBEFORE), displaybind, bindable]\n    HRESULT pageBreakBefore([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_PAGEBREAKBEFORE), displaybind, bindable]\n    HRESULT pageBreakBefore([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_PAGEBREAKAFTER), displaybind, bindable]\n    HRESULT pageBreakAfter([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_PAGEBREAKAFTER), displaybind, bindable]\n    HRESULT pageBreakAfter([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_CSSTEXT), displaybind, bindable, nonbrowsable]\n    HRESULT cssText([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CSSTEXT), displaybind, bindable, nonbrowsable]\n    HRESULT cssText([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_CURSOR), displaybind, bindable]\n    HRESULT cursor([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CURSOR), displaybind, bindable]\n    HRESULT cursor([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIP), displaybind, bindable]\n    HRESULT clip([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIP), displaybind, bindable]\n    HRESULT clip([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_FILTER), displaybind, bindable]\n    HRESULT filter([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_FILTER), displaybind, bindable]\n    HRESULT filter([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TABLELAYOUT), displaybind, bindable]\n    HRESULT tableLayout([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TABLELAYOUT), displaybind, bindable]\n    HRESULT tableLayout([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERCOLLAPSE), displaybind, bindable]\n    HRESULT borderCollapse([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERCOLLAPSE), displaybind, bindable]\n    HRESULT borderCollapse([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_DIRECTION), displaybind, bindable]\n    HRESULT direction([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_DIRECTION), displaybind, bindable]\n    HRESULT direction([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BEHAVIOR), displaybind, bindable]\n    HRESULT behavior([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BEHAVIOR), displaybind, bindable]\n    HRESULT behavior([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_POSITION), displaybind, bindable]\n    HRESULT position([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_POSITION), displaybind, bindable]\n    HRESULT position([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_UNICODEBIDI), displaybind, bindable]\n    HRESULT unicodeBidi([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_UNICODEBIDI), displaybind, bindable]\n    HRESULT unicodeBidi([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BOTTOM), displaybind, bindable]\n    HRESULT bottom([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BOTTOM), displaybind, bindable]\n    HRESULT bottom([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_RIGHT), displaybind, bindable]\n    HRESULT right([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_RIGHT), displaybind, bindable]\n    HRESULT right([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_IMEMODE), displaybind, bindable]\n    HRESULT imeMode([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_IMEMODE), displaybind, bindable]\n    HRESULT imeMode([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_RUBYALIGN), displaybind, bindable]\n    HRESULT rubyAlign([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_RUBYALIGN), displaybind, bindable]\n    HRESULT rubyAlign([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_RUBYPOSITION), displaybind, bindable]\n    HRESULT rubyPosition([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_RUBYPOSITION), displaybind, bindable]\n    HRESULT rubyPosition([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_RUBYOVERHANG), displaybind, bindable]\n    HRESULT rubyOverhang([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_RUBYOVERHANG), displaybind, bindable]\n    HRESULT rubyOverhang([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRIDCHAR), displaybind, bindable]\n    HRESULT layoutGridChar([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRIDCHAR), displaybind, bindable]\n    HRESULT layoutGridChar([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRIDLINE), displaybind, bindable]\n    HRESULT layoutGridLine([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRIDLINE), displaybind, bindable]\n    HRESULT layoutGridLine([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRIDMODE), displaybind, bindable]\n    HRESULT layoutGridMode([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRIDMODE), displaybind, bindable]\n    HRESULT layoutGridMode([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRIDTYPE), displaybind, bindable]\n    HRESULT layoutGridType([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRIDTYPE), displaybind, bindable]\n    HRESULT layoutGridType([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRID), displaybind, bindable, nonbrowsable]\n    HRESULT layoutGrid([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTGRID), displaybind, bindable, nonbrowsable]\n    HRESULT layoutGrid([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTAUTOSPACE), displaybind, bindable]\n    HRESULT textAutospace([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTAUTOSPACE), displaybind, bindable]\n    HRESULT textAutospace([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_WORDBREAK), displaybind, bindable]\n    HRESULT wordBreak([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_WORDBREAK), displaybind, bindable]\n    HRESULT wordBreak([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LINEBREAK), displaybind, bindable]\n    HRESULT lineBreak([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LINEBREAK), displaybind, bindable]\n    HRESULT lineBreak([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTJUSTIFY), displaybind, bindable]\n    HRESULT textJustify([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTJUSTIFY), displaybind, bindable]\n    HRESULT textJustify([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTJUSTIFYTRIM), displaybind, bindable]\n    HRESULT textJustifyTrim([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTJUSTIFYTRIM), displaybind, bindable]\n    HRESULT textJustifyTrim([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTKASHIDA), displaybind, bindable]\n    HRESULT textKashida([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTKASHIDA), displaybind, bindable]\n    HRESULT textKashida([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_OVERFLOWX), displaybind, bindable]\n    HRESULT overflowX([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_OVERFLOWX), displaybind, bindable]\n    HRESULT overflowX([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_OVERFLOWY), displaybind, bindable]\n    HRESULT overflowY([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_OVERFLOWY), displaybind, bindable]\n    HRESULT overflowY([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_ACCELERATOR), displaybind, bindable]\n    HRESULT accelerator([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_ACCELERATOR), displaybind, bindable]\n    HRESULT accelerator([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTFLOW), displaybind, bindable]\n    HRESULT layoutFlow([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_LAYOUTFLOW), displaybind, bindable]\n    HRESULT layoutFlow([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_ZOOM), displaybind, bindable]\n    HRESULT zoom([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_ZOOM), displaybind, bindable]\n    HRESULT zoom([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_WORDWRAP), displaybind, bindable]\n    HRESULT wordWrap([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_WORDWRAP), displaybind, bindable]\n    HRESULT wordWrap([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTUNDERLINEPOSITION), displaybind, bindable]\n    HRESULT textUnderlinePosition([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTUNDERLINEPOSITION), displaybind, bindable]\n    HRESULT textUnderlinePosition([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARBASECOLOR), displaybind, bindable]\n    HRESULT scrollbarBaseColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARBASECOLOR), displaybind, bindable]\n    HRESULT scrollbarBaseColor([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARFACECOLOR), displaybind, bindable]\n    HRESULT scrollbarFaceColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARFACECOLOR), displaybind, bindable]\n    HRESULT scrollbarFaceColor([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]\n    HRESULT scrollbar3dLightColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]\n    HRESULT scrollbar3dLightColor([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARSHADOWCOLOR), displaybind, bindable]\n    HRESULT scrollbarShadowColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARSHADOWCOLOR), displaybind, bindable]\n    HRESULT scrollbarShadowColor([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]\n    HRESULT scrollbarHighlightColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]\n    HRESULT scrollbarHighlightColor([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]\n    HRESULT scrollbarDarkShadowColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]\n    HRESULT scrollbarDarkShadowColor([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARARROWCOLOR), displaybind, bindable]\n    HRESULT scrollbarArrowColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARARROWCOLOR), displaybind, bindable]\n    HRESULT scrollbarArrowColor([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARTRACKCOLOR), displaybind, bindable]\n    HRESULT scrollbarTrackColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_SCROLLBARTRACKCOLOR), displaybind, bindable]\n    HRESULT scrollbarTrackColor([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_WRITINGMODE), displaybind, bindable]\n    HRESULT writingMode([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_WRITINGMODE), displaybind, bindable]\n    HRESULT writingMode([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTALIGNLAST), displaybind, bindable]\n    HRESULT textAlignLast([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTALIGNLAST), displaybind, bindable]\n    HRESULT textAlignLast([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTKASHIDASPACE), displaybind, bindable]\n    HRESULT textKashidaSpace([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTKASHIDASPACE), displaybind, bindable]\n    HRESULT textKashidaSpace([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTOVERFLOW), displaybind, bindable]\n    HRESULT textOverflow([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTOVERFLOW), displaybind, bindable]\n    HRESULT textOverflow([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MINHEIGHT), displaybind, bindable]\n    HRESULT minHeight([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MINHEIGHT), displaybind, bindable]\n    HRESULT minHeight([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MSINTERPOLATIONMODE), displaybind, bindable]\n    HRESULT msInterpolationMode([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MSINTERPOLATIONMODE), displaybind, bindable]\n    HRESULT msInterpolationMode([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MAXHEIGHT), displaybind, bindable]\n    HRESULT maxHeight([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MAXHEIGHT), displaybind, bindable]\n    HRESULT maxHeight([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MINWIDTH), displaybind, bindable]\n    HRESULT minWidth([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MINWIDTH), displaybind, bindable]\n    HRESULT minWidth([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MAXWIDTH), displaybind, bindable]\n    HRESULT maxWidth([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MAXWIDTH), displaybind, bindable]\n    HRESULT maxWidth([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_CONTENT), displaybind, bindable]\n    HRESULT content([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CONTENT), displaybind, bindable]\n    HRESULT content([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_CAPTIONSIDE), displaybind, bindable]\n    HRESULT captionSide([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CAPTIONSIDE), displaybind, bindable]\n    HRESULT captionSide([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_COUNTERINCREMENT), displaybind, bindable]\n    HRESULT counterIncrement([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_COUNTERINCREMENT), displaybind, bindable]\n    HRESULT counterIncrement([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_COUNTERRESET), displaybind, bindable]\n    HRESULT counterReset([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_COUNTERRESET), displaybind, bindable]\n    HRESULT counterReset([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_OUTLINE), displaybind, bindable]\n    HRESULT outline([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_OUTLINE), displaybind, bindable]\n    HRESULT outline([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_OUTLINEWIDTH), displaybind, bindable]\n    HRESULT outlineWidth([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_OUTLINEWIDTH), displaybind, bindable]\n    HRESULT outlineWidth([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_OUTLINESTYLE), displaybind, bindable]\n    HRESULT outlineStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_OUTLINESTYLE), displaybind, bindable]\n    HRESULT outlineStyle([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_OUTLINECOLOR), displaybind, bindable]\n    HRESULT outlineColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_OUTLINECOLOR), displaybind, bindable]\n    HRESULT outlineColor([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BOXSIZING), displaybind, bindable]\n    HRESULT boxSizing([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BOXSIZING), displaybind, bindable]\n    HRESULT boxSizing([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERSPACING), displaybind, bindable]\n    HRESULT borderSpacing([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERSPACING), displaybind, bindable]\n    HRESULT borderSpacing([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_ORPHANS), displaybind, bindable]\n    HRESULT orphans([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_ORPHANS), displaybind, bindable]\n    HRESULT orphans([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_WIDOWS), displaybind, bindable]\n    HRESULT widows([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_WIDOWS), displaybind, bindable]\n    HRESULT widows([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_PAGEBREAKINSIDE), displaybind, bindable]\n    HRESULT pageBreakInside([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_PAGEBREAKINSIDE), displaybind, bindable]\n    HRESULT pageBreakInside([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_EMPTYCELLS), displaybind, bindable]\n    HRESULT emptyCells([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_EMPTYCELLS), displaybind, bindable]\n    HRESULT emptyCells([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MSBLOCKPROGRESSION), displaybind, bindable]\n    HRESULT msBlockProgression([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MSBLOCKPROGRESSION), displaybind, bindable]\n    HRESULT msBlockProgression([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_QUOTES), displaybind, bindable]\n    HRESULT quotes([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_QUOTES), displaybind, bindable]\n    HRESULT quotes([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_ALIGNMENTBASELINE), displaybind, bindable]\n    HRESULT alignmentBaseline([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_ALIGNMENTBASELINE), displaybind, bindable]\n    HRESULT alignmentBaseline([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BASELINESHIFT), displaybind, bindable]\n    HRESULT baselineShift([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BASELINESHIFT), displaybind, bindable]\n    HRESULT baselineShift([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_DOMINANTBASELINE), displaybind, bindable]\n    HRESULT dominantBaseline([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_DOMINANTBASELINE), displaybind, bindable]\n    HRESULT dominantBaseline([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTSIZEADJUST), displaybind, bindable]\n    HRESULT fontSizeAdjust([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTSIZEADJUST), displaybind, bindable]\n    HRESULT fontSizeAdjust([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTSTRETCH), displaybind, bindable]\n    HRESULT fontStretch([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_FONTSTRETCH), displaybind, bindable]\n    HRESULT fontStretch([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_OPACITY), displaybind, bindable]\n    HRESULT opacity([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_OPACITY), displaybind, bindable]\n    HRESULT opacity([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIPPATH), displaybind, bindable]\n    HRESULT clipPath([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIPPATH), displaybind, bindable]\n    HRESULT clipPath([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIPRULE), displaybind, bindable]\n    HRESULT clipRule([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIPRULE), displaybind, bindable]\n    HRESULT clipRule([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_FILL), displaybind, bindable]\n    HRESULT fill([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_FILL), displaybind, bindable]\n    HRESULT fill([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_FILLOPACITY), displaybind, bindable]\n    HRESULT fillOpacity([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_FILLOPACITY), displaybind, bindable]\n    HRESULT fillOpacity([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_FILLRULE), displaybind, bindable]\n    HRESULT fillRule([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_FILLRULE), displaybind, bindable]\n    HRESULT fillRule([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_KERNING), displaybind, bindable]\n    HRESULT kerning([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_KERNING), displaybind, bindable]\n    HRESULT kerning([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARKER), displaybind, bindable]\n    HRESULT marker([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARKER), displaybind, bindable]\n    HRESULT marker([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARKEREND), displaybind, bindable]\n    HRESULT markerEnd([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARKEREND), displaybind, bindable]\n    HRESULT markerEnd([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARKERMID), displaybind, bindable]\n    HRESULT markerMid([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARKERMID), displaybind, bindable]\n    HRESULT markerMid([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARKERSTART), displaybind, bindable]\n    HRESULT markerStart([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MARKERSTART), displaybind, bindable]\n    HRESULT markerStart([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MASK), displaybind, bindable]\n    HRESULT mask([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MASK), displaybind, bindable]\n    HRESULT mask([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_POINTEREVENTS), displaybind, bindable]\n    HRESULT pointerEvents([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_POINTEREVENTS), displaybind, bindable]\n    HRESULT pointerEvents([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_STOPCOLOR), displaybind, bindable]\n    HRESULT stopColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_STOPCOLOR), displaybind, bindable]\n    HRESULT stopColor([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_STOPOPACITY), displaybind, bindable]\n    HRESULT stopOpacity([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_STOPOPACITY), displaybind, bindable]\n    HRESULT stopOpacity([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKE), displaybind, bindable]\n    HRESULT stroke([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKE), displaybind, bindable]\n    HRESULT stroke([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKEDASHARRAY), displaybind, bindable]\n    HRESULT strokeDasharray([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKEDASHARRAY), displaybind, bindable]\n    HRESULT strokeDasharray([out, retval] BSTR * p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKEDASHOFFSET), displaybind, bindable]\n    HRESULT strokeDashoffset([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKEDASHOFFSET), displaybind, bindable]\n    HRESULT strokeDashoffset([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKELINECAP), displaybind, bindable]\n    HRESULT strokeLinecap([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKELINECAP), displaybind, bindable]\n    HRESULT strokeLinecap([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKELINEJOIN), displaybind, bindable]\n    HRESULT strokeLinejoin([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKELINEJOIN), displaybind, bindable]\n    HRESULT strokeLinejoin([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKEMITERLIMIT), displaybind, bindable]\n    HRESULT strokeMiterlimit([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKEMITERLIMIT), displaybind, bindable]\n    HRESULT strokeMiterlimit([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKEOPACITY), displaybind, bindable]\n    HRESULT strokeOpacity([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKEOPACITY), displaybind, bindable]\n    HRESULT strokeOpacity([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKEWIDTH), displaybind, bindable]\n    HRESULT strokeWidth([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_STROKEWIDTH), displaybind, bindable]\n    HRESULT strokeWidth([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTANCHOR), displaybind, bindable]\n    HRESULT textAnchor([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_TEXTANCHOR), displaybind, bindable]\n    HRESULT textAnchor([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_GLYPHORIENTATIONHORIZONTAL), displaybind, bindable]\n    HRESULT glyphOrientationHorizontal([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_GLYPHORIENTATIONHORIZONTAL), displaybind, bindable]\n    HRESULT glyphOrientationHorizontal([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_GLYPHORIENTATIONVERTICAL), displaybind, bindable]\n    HRESULT glyphOrientationVertical([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_GLYPHORIENTATIONVERTICAL), displaybind, bindable]\n    HRESULT glyphOrientationVertical([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRADIUS), displaybind, bindable]\n    HRESULT borderRadius([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERRADIUS), displaybind, bindable]\n    HRESULT borderRadius([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPLEFTRADIUS), displaybind, bindable]\n    HRESULT borderTopLeftRadius([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPLEFTRADIUS), displaybind, bindable]\n    HRESULT borderTopLeftRadius([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPRIGHTRADIUS), displaybind, bindable]\n    HRESULT borderTopRightRadius([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERTOPRIGHTRADIUS), displaybind, bindable]\n    HRESULT borderTopRightRadius([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMRIGHTRADIUS), displaybind, bindable]\n    HRESULT borderBottomRightRadius([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMRIGHTRADIUS), displaybind, bindable]\n    HRESULT borderBottomRightRadius([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMLEFTRADIUS), displaybind, bindable]\n    HRESULT borderBottomLeftRadius([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BORDERBOTTOMLEFTRADIUS), displaybind, bindable]\n    HRESULT borderBottomLeftRadius([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIPTOP), displaybind, bindable, hidden]\n    HRESULT clipTop([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIPTOP), displaybind, bindable, hidden]\n    HRESULT clipTop([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIPRIGHT), displaybind, bindable, hidden]\n    HRESULT clipRight([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIPRIGHT), displaybind, bindable, hidden]\n    HRESULT clipRight([out, retval] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIPBOTTOM), displaybind, bindable, hidden]\n    HRESULT clipBottom([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIPLEFT), displaybind, bindable, hidden]\n    HRESULT clipLeft([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CLIPLEFT), displaybind, bindable, hidden]\n    HRESULT clipLeft([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_CSSFLOAT), displaybind, bindable]\n    HRESULT cssFloat([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_CSSFLOAT), displaybind, bindable]\n    HRESULT cssFloat([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDCLIP), displaybind, bindable]\n    HRESULT backgroundClip([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDCLIP), displaybind, bindable]\n    HRESULT backgroundClip([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDORIGIN), displaybind, bindable]\n    HRESULT backgroundOrigin([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDORIGIN), displaybind, bindable]\n    HRESULT backgroundOrigin([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDSIZE), displaybind, bindable]\n    HRESULT backgroundSize([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BACKGROUNDSIZE), displaybind, bindable]\n    HRESULT backgroundSize([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_BOXSHADOW), displaybind, bindable]\n    HRESULT boxShadow([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_BOXSHADOW), displaybind, bindable]\n    HRESULT boxShadow([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MSTRANSFORM), displaybind, bindable]\n    HRESULT msTransform([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MSTRANSFORM), displaybind, bindable]\n    HRESULT msTransform([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION_MSTRANSFORMORIGIN), displaybind, bindable]\n    HRESULT msTransformOrigin([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION_MSTRANSFORMORIGIN), displaybind, bindable]\n    HRESULT msTransformOrigin([out, retval] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLCSSStyleDeclaration2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(305107d1-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLCSSStyleDeclaration2 : IDispatch\n{\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLCHAINING), displaybind, bindable]\n    HRESULT msScrollChaining([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLCHAINING), displaybind, bindable]\n    HRESULT msScrollChaining([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMING), displaybind, bindable]\n    HRESULT msContentZooming([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMING), displaybind, bindable]\n    HRESULT msContentZooming([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMSNAPTYPE), displaybind, bindable]\n    HRESULT msContentZoomSnapType([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMSNAPTYPE), displaybind, bindable]\n    HRESULT msContentZoomSnapType([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLRAILS), displaybind, bindable]\n    HRESULT msScrollRails([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLRAILS), displaybind, bindable]\n    HRESULT msScrollRails([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMCHAINING), displaybind, bindable]\n    HRESULT msContentZoomChaining([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMCHAINING), displaybind, bindable]\n    HRESULT msContentZoomChaining([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPTYPE), displaybind, bindable]\n    HRESULT msScrollSnapType([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPTYPE), displaybind, bindable]\n    HRESULT msScrollSnapType([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMLIMIT), displaybind, bindable]\n    HRESULT msContentZoomLimit([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMLIMIT), displaybind, bindable]\n    HRESULT msContentZoomLimit([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMSNAP), displaybind, bindable]\n    HRESULT msContentZoomSnap([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMSNAP), displaybind, bindable]\n    HRESULT msContentZoomSnap([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMSNAPPOINTS), displaybind, bindable]\n    HRESULT msContentZoomSnapPoints([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMSNAPPOINTS), displaybind, bindable]\n    HRESULT msContentZoomSnapPoints([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMLIMITMIN), displaybind, bindable]\n    HRESULT msContentZoomLimitMin([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMLIMITMIN), displaybind, bindable]\n    HRESULT msContentZoomLimitMin([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMLIMITMAX), displaybind, bindable]\n    HRESULT msContentZoomLimitMax([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSCONTENTZOOMLIMITMAX), displaybind, bindable]\n    HRESULT msContentZoomLimitMax([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPX), displaybind, bindable]\n    HRESULT msScrollSnapX([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPX), displaybind, bindable]\n    HRESULT msScrollSnapX([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPY), displaybind, bindable]\n    HRESULT msScrollSnapY([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPY), displaybind, bindable]\n    HRESULT msScrollSnapY([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPPOINTSX), displaybind, bindable]\n    HRESULT msScrollSnapPointsX([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPPOINTSX), displaybind, bindable]\n    HRESULT msScrollSnapPointsX([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPPOINTSY), displaybind, bindable]\n    HRESULT msScrollSnapPointsY([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLSNAPPOINTSY), displaybind, bindable]\n    HRESULT msScrollSnapPointsY([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDCOLUMN), displaybind, bindable]\n    HRESULT msGridColumn([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDCOLUMN), displaybind, bindable]\n    HRESULT msGridColumn([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDCOLUMNALIGN), displaybind, bindable]\n    HRESULT msGridColumnAlign([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDCOLUMNALIGN), displaybind, bindable]\n    HRESULT msGridColumnAlign([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDCOLUMNS), displaybind, bindable]\n    HRESULT msGridColumns([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDCOLUMNS), displaybind, bindable]\n    HRESULT msGridColumns([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDCOLUMNSPAN), displaybind, bindable]\n    HRESULT msGridColumnSpan([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDCOLUMNSPAN), displaybind, bindable]\n    HRESULT msGridColumnSpan([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDROW), displaybind, bindable]\n    HRESULT msGridRow([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDROW), displaybind, bindable]\n    HRESULT msGridRow([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDROWALIGN), displaybind, bindable]\n    HRESULT msGridRowAlign([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDROWALIGN), displaybind, bindable]\n    HRESULT msGridRowAlign([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDROWS), displaybind, bindable]\n    HRESULT msGridRows([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDROWS), displaybind, bindable]\n    HRESULT msGridRows([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDROWSPAN), displaybind, bindable]\n    HRESULT msGridRowSpan([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSGRIDROWSPAN), displaybind, bindable]\n    HRESULT msGridRowSpan([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSWRAPTHROUGH), displaybind, bindable]\n    HRESULT msWrapThrough([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSWRAPTHROUGH), displaybind, bindable]\n    HRESULT msWrapThrough([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSWRAPMARGIN), displaybind, bindable]\n    HRESULT msWrapMargin([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSWRAPMARGIN), displaybind, bindable]\n    HRESULT msWrapMargin([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSWRAPFLOW), displaybind, bindable]\n    HRESULT msWrapFlow([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSWRAPFLOW), displaybind, bindable]\n    HRESULT msWrapFlow([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONNAME), displaybind, bindable]\n    HRESULT msAnimationName([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONNAME), displaybind, bindable]\n    HRESULT msAnimationName([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONDURATION), displaybind, bindable]\n    HRESULT msAnimationDuration([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONDURATION), displaybind, bindable]\n    HRESULT msAnimationDuration([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONTIMINGFUNCTION), displaybind, bindable]\n    HRESULT msAnimationTimingFunction([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONTIMINGFUNCTION), displaybind, bindable]\n    HRESULT msAnimationTimingFunction([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONDELAY), displaybind, bindable]\n    HRESULT msAnimationDelay([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONDELAY), displaybind, bindable]\n    HRESULT msAnimationDelay([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONDIRECTION), displaybind, bindable]\n    HRESULT msAnimationDirection([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONDIRECTION), displaybind, bindable]\n    HRESULT msAnimationDirection([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONPLAYSTATE), displaybind, bindable]\n    HRESULT msAnimationPlayState([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONPLAYSTATE), displaybind, bindable]\n    HRESULT msAnimationPlayState([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONITERATIONCOUNT), displaybind, bindable]\n    HRESULT msAnimationIterationCount([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONITERATIONCOUNT), displaybind, bindable]\n    HRESULT msAnimationIterationCount([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATION), displaybind, bindable]\n    HRESULT msAnimation([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATION), displaybind, bindable]\n    HRESULT msAnimation([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONFILLMODE), displaybind, bindable]\n    HRESULT msAnimationFillMode([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSANIMATIONFILLMODE), displaybind, bindable]\n    HRESULT msAnimationFillMode([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLORINTERPOLATIONFILTERS), displaybind, bindable]\n    HRESULT colorInterpolationFilters([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLORINTERPOLATIONFILTERS), displaybind, bindable]\n    HRESULT colorInterpolationFilters([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNCOUNT), displaybind, bindable]\n    HRESULT columnCount([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNCOUNT), displaybind, bindable]\n    HRESULT columnCount([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNWIDTH), displaybind, bindable]\n    HRESULT columnWidth([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNWIDTH), displaybind, bindable]\n    HRESULT columnWidth([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNGAP), displaybind, bindable]\n    HRESULT columnGap([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNGAP), displaybind, bindable]\n    HRESULT columnGap([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNFILL), displaybind, bindable]\n    HRESULT columnFill([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNFILL), displaybind, bindable]\n    HRESULT columnFill([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNSPAN), displaybind, bindable]\n    HRESULT columnSpan([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNSPAN), displaybind, bindable]\n    HRESULT columnSpan([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNS), displaybind, bindable, nonbrowsable]\n    HRESULT columns([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNS), displaybind, bindable, nonbrowsable]\n    HRESULT columns([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNRULE), displaybind, bindable]\n    HRESULT columnRule([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNRULE), displaybind, bindable]\n    HRESULT columnRule([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNRULECOLOR), displaybind, bindable]\n    HRESULT columnRuleColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNRULECOLOR), displaybind, bindable]\n    HRESULT columnRuleColor([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNRULESTYLE), displaybind, bindable]\n    HRESULT columnRuleStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNRULESTYLE), displaybind, bindable]\n    HRESULT columnRuleStyle([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNRULEWIDTH), displaybind, bindable]\n    HRESULT columnRuleWidth([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_COLUMNRULEWIDTH), displaybind, bindable]\n    HRESULT columnRuleWidth([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_BREAKBEFORE), displaybind, bindable]\n    HRESULT breakBefore([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_BREAKBEFORE), displaybind, bindable]\n    HRESULT breakBefore([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_BREAKAFTER), displaybind, bindable]\n    HRESULT breakAfter([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_BREAKAFTER), displaybind, bindable]\n    HRESULT breakAfter([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_BREAKINSIDE), displaybind, bindable]\n    HRESULT breakInside([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_BREAKINSIDE), displaybind, bindable]\n    HRESULT breakInside([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_FLOODCOLOR), displaybind, bindable]\n    HRESULT floodColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_FLOODCOLOR), displaybind, bindable]\n    HRESULT floodColor([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_FLOODOPACITY), displaybind, bindable]\n    HRESULT floodOpacity([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_FLOODOPACITY), displaybind, bindable]\n    HRESULT floodOpacity([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_LIGHTINGCOLOR), displaybind, bindable]\n    HRESULT lightingColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_LIGHTINGCOLOR), displaybind, bindable]\n    HRESULT lightingColor([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMITXMIN), displaybind, bindable]\n    HRESULT msScrollLimitXMin([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMITXMIN), displaybind, bindable]\n    HRESULT msScrollLimitXMin([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMITYMIN), displaybind, bindable]\n    HRESULT msScrollLimitYMin([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMITYMIN), displaybind, bindable]\n    HRESULT msScrollLimitYMin([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMITXMAX), displaybind, bindable]\n    HRESULT msScrollLimitXMax([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMITXMAX), displaybind, bindable]\n    HRESULT msScrollLimitXMax([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMITYMAX), displaybind, bindable]\n    HRESULT msScrollLimitYMax([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMITYMAX), displaybind, bindable]\n    HRESULT msScrollLimitYMax([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMIT), displaybind, bindable]\n    HRESULT msScrollLimit([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLLIMIT), displaybind, bindable]\n    HRESULT msScrollLimit([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TEXTSHADOW), displaybind, bindable]\n    HRESULT textShadow([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TEXTSHADOW), displaybind, bindable]\n    HRESULT textShadow([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLOWFROM), displaybind, bindable]\n    HRESULT msFlowFrom([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLOWFROM), displaybind, bindable]\n    HRESULT msFlowFrom([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLOWINTO), displaybind, bindable]\n    HRESULT msFlowInto([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLOWINTO), displaybind, bindable]\n    HRESULT msFlowInto([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSHYPHENS), displaybind, bindable]\n    HRESULT msHyphens([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSHYPHENS), displaybind, bindable]\n    HRESULT msHyphens([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSHYPHENATELIMITZONE), displaybind, bindable]\n    HRESULT msHyphenateLimitZone([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSHYPHENATELIMITZONE), displaybind, bindable]\n    HRESULT msHyphenateLimitZone([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSHYPHENATELIMITCHARS), displaybind, bindable]\n    HRESULT msHyphenateLimitChars([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSHYPHENATELIMITCHARS), displaybind, bindable]\n    HRESULT msHyphenateLimitChars([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSHYPHENATELIMITLINES), displaybind, bindable]\n    HRESULT msHyphenateLimitLines([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSHYPHENATELIMITLINES), displaybind, bindable]\n    HRESULT msHyphenateLimitLines([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSHIGHCONTRASTADJUST), displaybind, bindable]\n    HRESULT msHighContrastAdjust([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSHIGHCONTRASTADJUST), displaybind, bindable]\n    HRESULT msHighContrastAdjust([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ENABLEBACKGROUND), displaybind, bindable]\n    HRESULT enableBackground([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ENABLEBACKGROUND), displaybind, bindable]\n    HRESULT enableBackground([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFONTFEATURESETTINGS), displaybind, bindable]\n    HRESULT msFontFeatureSettings([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFONTFEATURESETTINGS), displaybind, bindable]\n    HRESULT msFontFeatureSettings([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSUSERSELECT), displaybind, bindable]\n    HRESULT msUserSelect([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSUSERSELECT), displaybind, bindable]\n    HRESULT msUserSelect([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSOVERFLOWSTYLE), displaybind, bindable]\n    HRESULT msOverflowStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSOVERFLOWSTYLE), displaybind, bindable]\n    HRESULT msOverflowStyle([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSFORMSTYLE), displaybind, bindable]\n    HRESULT msTransformStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSFORMSTYLE), displaybind, bindable]\n    HRESULT msTransformStyle([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSBACKFACEVISIBILITY), displaybind, bindable]\n    HRESULT msBackfaceVisibility([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSBACKFACEVISIBILITY), displaybind, bindable]\n    HRESULT msBackfaceVisibility([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSPERSPECTIVE), displaybind, bindable]\n    HRESULT msPerspective([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSPERSPECTIVE), displaybind, bindable]\n    HRESULT msPerspective([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSPERSPECTIVEORIGIN), displaybind, bindable]\n    HRESULT msPerspectiveOrigin([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSPERSPECTIVEORIGIN), displaybind, bindable]\n    HRESULT msPerspectiveOrigin([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITIONPROPERTY), displaybind, bindable]\n    HRESULT msTransitionProperty([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITIONPROPERTY), displaybind, bindable]\n    HRESULT msTransitionProperty([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITIONDURATION), displaybind, bindable]\n    HRESULT msTransitionDuration([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITIONDURATION), displaybind, bindable]\n    HRESULT msTransitionDuration([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITIONTIMINGFUNCTION), displaybind, bindable]\n    HRESULT msTransitionTimingFunction([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITIONTIMINGFUNCTION), displaybind, bindable]\n    HRESULT msTransitionTimingFunction([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITIONDELAY), displaybind, bindable]\n    HRESULT msTransitionDelay([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITIONDELAY), displaybind, bindable]\n    HRESULT msTransitionDelay([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITION), displaybind, bindable]\n    HRESULT msTransition([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITION), displaybind, bindable]\n    HRESULT msTransition([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTOUCHACTION), displaybind, bindable]\n    HRESULT msTouchAction([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTOUCHACTION), displaybind, bindable]\n    HRESULT msTouchAction([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLTRANSLATION), displaybind, bindable]\n    HRESULT msScrollTranslation([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSSCROLLTRANSLATION), displaybind, bindable]\n    HRESULT msScrollTranslation([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEX), displaybind, bindable]\n    HRESULT msFlex([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEX), displaybind, bindable]\n    HRESULT msFlex([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXPOSITIVE), displaybind, bindable]\n    HRESULT msFlexPositive([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXPOSITIVE), displaybind, bindable]\n    HRESULT msFlexPositive([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXNEGATIVE), displaybind, bindable]\n    HRESULT msFlexNegative([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXNEGATIVE), displaybind, bindable]\n    HRESULT msFlexNegative([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXPREFERREDSIZE), displaybind, bindable]\n    HRESULT msFlexPreferredSize([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXPREFERREDSIZE), displaybind, bindable]\n    HRESULT msFlexPreferredSize([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXFLOW), displaybind, bindable]\n    HRESULT msFlexFlow([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXFLOW), displaybind, bindable]\n    HRESULT msFlexFlow([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXDIRECTION), displaybind, bindable]\n    HRESULT msFlexDirection([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXDIRECTION), displaybind, bindable]\n    HRESULT msFlexDirection([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXWRAP), displaybind, bindable]\n    HRESULT msFlexWrap([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXWRAP), displaybind, bindable]\n    HRESULT msFlexWrap([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXALIGN), displaybind, bindable]\n    HRESULT msFlexAlign([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXALIGN), displaybind, bindable]\n    HRESULT msFlexAlign([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXITEMALIGN), displaybind, bindable]\n    HRESULT msFlexItemAlign([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXITEMALIGN), displaybind, bindable]\n    HRESULT msFlexItemAlign([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXPACK), displaybind, bindable]\n    HRESULT msFlexPack([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXPACK), displaybind, bindable]\n    HRESULT msFlexPack([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXLINEPACK), displaybind, bindable]\n    HRESULT msFlexLinePack([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXLINEPACK), displaybind, bindable]\n    HRESULT msFlexLinePack([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXORDER), displaybind, bindable]\n    HRESULT msFlexOrder([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSFLEXORDER), displaybind, bindable]\n    HRESULT msFlexOrder([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTOUCHSELECT), displaybind, bindable]\n    HRESULT msTouchSelect([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_MSTOUCHSELECT), displaybind, bindable]\n    HRESULT msTouchSelect([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSFORM), displaybind, bindable]\n    HRESULT transform([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSFORM), displaybind, bindable]\n    HRESULT transform([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSFORMORIGIN), displaybind, bindable]\n    HRESULT transformOrigin([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSFORMORIGIN), displaybind, bindable]\n    HRESULT transformOrigin([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSFORMSTYLE), displaybind, bindable]\n    HRESULT transformStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSFORMSTYLE), displaybind, bindable]\n    HRESULT transformStyle([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_BACKFACEVISIBILITY), displaybind, bindable]\n    HRESULT backfaceVisibility([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_BACKFACEVISIBILITY), displaybind, bindable]\n    HRESULT backfaceVisibility([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_PERSPECTIVE), displaybind, bindable]\n    HRESULT perspective([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_PERSPECTIVE), displaybind, bindable]\n    HRESULT perspective([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_PERSPECTIVEORIGIN), displaybind, bindable]\n    HRESULT perspectiveOrigin([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_PERSPECTIVEORIGIN), displaybind, bindable]\n    HRESULT perspectiveOrigin([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITIONPROPERTY), displaybind, bindable]\n    HRESULT transitionProperty([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITIONPROPERTY), displaybind, bindable]\n    HRESULT transitionProperty([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITIONDURATION), displaybind, bindable]\n    HRESULT transitionDuration([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITIONDURATION), displaybind, bindable]\n    HRESULT transitionDuration([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITIONTIMINGFUNCTION), displaybind, bindable]\n    HRESULT transitionTimingFunction([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITIONTIMINGFUNCTION), displaybind, bindable]\n    HRESULT transitionTimingFunction([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITIONDELAY), displaybind, bindable]\n    HRESULT transitionDelay([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITIONDELAY), displaybind, bindable]\n    HRESULT transitionDelay([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITION), displaybind, bindable]\n    HRESULT transition([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_TRANSITION), displaybind, bindable]\n    HRESULT transition([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_FONTFEATURESETTINGS), displaybind, bindable]\n    HRESULT fontFeatureSettings([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_FONTFEATURESETTINGS), displaybind, bindable]\n    HRESULT fontFeatureSettings([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONNAME), displaybind, bindable]\n    HRESULT animationName([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONNAME), displaybind, bindable]\n    HRESULT animationName([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONDURATION), displaybind, bindable]\n    HRESULT animationDuration([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONDURATION), displaybind, bindable]\n    HRESULT animationDuration([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONTIMINGFUNCTION), displaybind, bindable]\n    HRESULT animationTimingFunction([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONTIMINGFUNCTION), displaybind, bindable]\n    HRESULT animationTimingFunction([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONDELAY), displaybind, bindable]\n    HRESULT animationDelay([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONDELAY), displaybind, bindable]\n    HRESULT animationDelay([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONDIRECTION), displaybind, bindable]\n    HRESULT animationDirection([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONDIRECTION), displaybind, bindable]\n    HRESULT animationDirection([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONPLAYSTATE), displaybind, bindable]\n    HRESULT animationPlayState([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONPLAYSTATE), displaybind, bindable]\n    HRESULT animationPlayState([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONITERATIONCOUNT), displaybind, bindable]\n    HRESULT animationIterationCount([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONITERATIONCOUNT), displaybind, bindable]\n    HRESULT animationIterationCount([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATION), displaybind, bindable]\n    HRESULT animation([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATION), displaybind, bindable]\n    HRESULT animation([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONFILLMODE), displaybind, bindable]\n    HRESULT animationFillMode([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATIONFILLMODE), displaybind, bindable]\n    HRESULT animationFillMode([out, retval] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLFiltersCollection interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050F3EE-98B5-11Cf-BB82-00AA00BDCE0B)\n]\ninterface IHTMLFiltersCollection : IDispatch\n{\n    [propget, id(DISPID_IHTMLFILTERSCOLLECTION_LENGTH)]\n    HRESULT length([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLFILTERSCOLLECTION__NEWENUM)]\n    HRESULT _newEnum([retval, out] IUnknown **p);\n\n    [id(DISPID_IHTMLFILTERSCOLLECTION_ITEM)]\n    HRESULT item(\n        [in] VARIANT *pvarIndex,\n        [retval, out] VARIANT *pvarResult);\n}\n\n/*****************************************************************************\n *    IHTMLStyle interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050F25E-98B5-11CF-BB82-00AA00BDCE0B)\n]\ninterface IHTMLStyle : IDispatch\n{\n    [propput, id(DISPID_IHTMLSTYLE_FONTFAMILY), bindable, displaybind]\n    HRESULT fontFamily([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_FONTFAMILY), bindable, displaybind]\n    HRESULT fontFamily([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_FONTSTYLE), bindable, displaybind]\n    HRESULT fontStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_FONTSTYLE), bindable, displaybind]\n    HRESULT fontStyle([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_FONTVARIANT), bindable, displaybind]\n    HRESULT fontVariant([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_FONTVARIANT), bindable, displaybind]\n    HRESULT fontVariant([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_FONTWEIGHT), bindable, displaybind]\n    HRESULT fontWeight([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_FONTWEIGHT), bindable, displaybind]\n    HRESULT fontWeight([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_FONTSIZE), bindable, displaybind]\n    HRESULT fontSize([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_FONTSIZE), bindable, displaybind]\n    HRESULT fontSize([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_FONT), bindable, displaybind]\n    HRESULT font([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_FONT), bindable, displaybind]\n    HRESULT font([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_COLOR), bindable, displaybind]\n    HRESULT color([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_COLOR), bindable, displaybind]\n    HRESULT color([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BACKGROUND), bindable, displaybind]\n    HRESULT background([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BACKGROUND), bindable, displaybind]\n    HRESULT background([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), bindable, displaybind]\n    HRESULT backgroundColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), bindable, displaybind]\n    HRESULT backgroundColor([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), bindable, displaybind]\n    HRESULT backgroundImage([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), bindable, displaybind]\n    HRESULT backgroundImage([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), bindable, displaybind]\n    HRESULT backgroundRepeat([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), bindable, displaybind]\n    HRESULT backgroundRepeat([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), bindable, displaybind]\n    HRESULT backgroundAttachment([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), bindable, displaybind]\n    HRESULT backgroundAttachment([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), bindable, displaybind]\n    HRESULT backgroundPosition([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), bindable, displaybind]\n    HRESULT backgroundPosition([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), bindable, displaybind]\n    HRESULT backgroundPositionX([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), bindable, displaybind]\n    HRESULT backgroundPositionX([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), bindable, displaybind]\n    HRESULT backgroundPositionY([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), bindable, displaybind]\n    HRESULT backgroundPositionY([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_WORDSPACING), bindable, displaybind]\n    HRESULT wordSpacing([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_WORDSPACING), bindable, displaybind]\n    HRESULT wordSpacing([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_LETTERSPACING), bindable, displaybind]\n    HRESULT letterSpacing([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_LETTERSPACING), bindable, displaybind]\n    HRESULT letterSpacing([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATION), bindable, displaybind]\n    HRESULT textDecoration([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATION), bindable, displaybind]\n    HRESULT textDecoration([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), bindable, displaybind]\n    HRESULT textDecorationNone([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), bindable, displaybind]\n    HRESULT textDecorationNone([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), bindable, displaybind]\n    HRESULT textDecorationUnderline([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), bindable, displaybind]\n    HRESULT textDecorationUnderline([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), bindable, displaybind]\n    HRESULT textDecorationOverline([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), bindable, displaybind]\n    HRESULT textDecorationOverline([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), bindable, displaybind]\n    HRESULT textDecorationLineThrough([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), bindable, displaybind]\n    HRESULT textDecorationLineThrough([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), bindable, displaybind]\n    HRESULT textDecorationBlink([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), bindable, displaybind]\n    HRESULT textDecorationBlink([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_VERTICALALIGN), bindable, displaybind]\n    HRESULT verticalAlign([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_VERTICALALIGN), bindable, displaybind]\n    HRESULT verticalAlign([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), bindable, displaybind]\n    HRESULT textTransform([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), bindable, displaybind]\n    HRESULT textTransform([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_TEXTALIGN), bindable, displaybind]\n    HRESULT textAlign([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_TEXTALIGN), bindable, displaybind]\n    HRESULT textAlign([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_TEXTINDENT), bindable, displaybind]\n    HRESULT textIndent([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_TEXTINDENT), bindable, displaybind]\n    HRESULT textIndent([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_LINEHEIGHT), bindable, displaybind]\n    HRESULT lineHeight([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_LINEHEIGHT), bindable, displaybind]\n    HRESULT lineHeight([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_MARGINTOP), bindable, displaybind]\n    HRESULT marginTop([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_MARGINTOP), bindable, displaybind]\n    HRESULT marginTop([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_MARGINRIGHT), bindable, displaybind]\n    HRESULT marginRight([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_MARGINRIGHT), bindable, displaybind]\n    HRESULT marginRight([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), bindable, displaybind]\n    HRESULT marginBottom([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), bindable, displaybind]\n    HRESULT marginBottom([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_MARGINLEFT), bindable, displaybind]\n    HRESULT marginLeft([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_MARGINLEFT), bindable, displaybind]\n    HRESULT marginLeft([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_MARGIN), bindable, displaybind]\n    HRESULT margin([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_MARGIN), bindable, displaybind]\n    HRESULT margin([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_PADDINGTOP), bindable, displaybind]\n    HRESULT paddingTop([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_PADDINGTOP), bindable, displaybind]\n    HRESULT paddingTop([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), bindable, displaybind]\n    HRESULT paddingRight([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), bindable, displaybind]\n    HRESULT paddingRight([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), bindable, displaybind]\n    HRESULT paddingBottom([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), bindable, displaybind]\n    HRESULT paddingBottom([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_PADDINGLEFT), bindable, displaybind]\n    HRESULT paddingLeft([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_PADDINGLEFT), bindable, displaybind]\n    HRESULT paddingLeft([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_PADDING), bindable, displaybind]\n    HRESULT padding([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_PADDING), bindable, displaybind]\n    HRESULT padding([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDER), bindable, displaybind]\n    HRESULT border([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDER), bindable, displaybind]\n    HRESULT border([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERTOP), bindable, displaybind]\n    HRESULT borderTop([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERTOP), bindable, displaybind]\n    HRESULT borderTop([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHT), bindable, displaybind]\n    HRESULT borderRight([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHT), bindable, displaybind]\n    HRESULT borderRight([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), bindable, displaybind]\n    HRESULT borderBottom([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), bindable, displaybind]\n    HRESULT borderBottom([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFT), bindable, displaybind]\n    HRESULT borderLeft([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFT), bindable, displaybind]\n    HRESULT borderLeft([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERCOLOR), bindable, displaybind]\n    HRESULT borderColor([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERCOLOR), bindable, displaybind]\n    HRESULT borderColor([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), bindable, displaybind]\n    HRESULT borderTopColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), bindable, displaybind]\n    HRESULT borderTopColor([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), bindable, displaybind]\n    HRESULT borderRightColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), bindable, displaybind]\n    HRESULT borderRightColor([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), bindable, displaybind]\n    HRESULT borderBottomColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), bindable, displaybind]\n    HRESULT borderBottomColor([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), bindable, displaybind]\n    HRESULT borderLeftColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), bindable, displaybind]\n    HRESULT borderLeftColor([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERWIDTH), bindable, displaybind]\n    HRESULT borderWidth([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERWIDTH), bindable, displaybind]\n    HRESULT borderWidth([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), bindable, displaybind]\n    HRESULT borderTopWidth([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), bindable, displaybind]\n    HRESULT borderTopWidth([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), bindable, displaybind]\n    HRESULT borderRightWidth([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), bindable, displaybind]\n    HRESULT borderRightWidth([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), bindable, displaybind]\n    HRESULT borderBottomWidth([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), bindable, displaybind]\n    HRESULT borderBottomWidth([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), bindable, displaybind]\n    HRESULT borderLeftWidth([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), bindable, displaybind]\n    HRESULT borderLeftWidth([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERSTYLE), bindable, displaybind]\n    HRESULT borderStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERSTYLE), bindable, displaybind]\n    HRESULT borderStyle([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), bindable, displaybind]\n    HRESULT borderTopStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), bindable, displaybind]\n    HRESULT borderTopStyle([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), bindable, displaybind]\n    HRESULT borderRightStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), bindable, displaybind]\n    HRESULT borderRightStyle([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), bindable, displaybind]\n    HRESULT borderBottomStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), bindable, displaybind]\n    HRESULT borderBottomStyle([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), bindable, displaybind]\n    HRESULT borderLeftStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), bindable, displaybind]\n    HRESULT borderLeftStyle([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_WIDTH), bindable, displaybind]\n    HRESULT width([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_WIDTH), bindable, displaybind]\n    HRESULT width([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_HEIGHT), bindable, displaybind]\n    HRESULT height([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_HEIGHT), bindable, displaybind]\n    HRESULT height([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_STYLEFLOAT), bindable, displaybind]\n    HRESULT styleFloat([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_STYLEFLOAT), bindable, displaybind]\n    HRESULT styleFloat([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_CLEAR), bindable, displaybind]\n    HRESULT clear([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_CLEAR), bindable, displaybind]\n    HRESULT clear([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_DISPLAY), bindable, displaybind]\n    HRESULT display([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_DISPLAY), bindable, displaybind]\n    HRESULT display([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_VISIBILITY), bindable, displaybind]\n    HRESULT visibility([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_VISIBILITY), bindable, displaybind]\n    HRESULT visibility([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), bindable, displaybind]\n    HRESULT listStyleType([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), bindable, displaybind]\n    HRESULT listStyleType([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), bindable, displaybind]\n    HRESULT listStylePosition([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), bindable, displaybind]\n    HRESULT listStylePosition([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), bindable, displaybind]\n    HRESULT listStyleImage([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), bindable, displaybind]\n    HRESULT listStyleImage([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLE), bindable, displaybind]\n    HRESULT listStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLE), bindable, displaybind]\n    HRESULT listStyle([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_WHITESPACE), bindable, displaybind]\n    HRESULT whiteSpace([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_WHITESPACE), bindable, displaybind]\n    HRESULT whiteSpace([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_TOP), bindable, displaybind]\n    HRESULT top([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_TOP), bindable, displaybind]\n    HRESULT top([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_LEFT), bindable, displaybind]\n    HRESULT left([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_LEFT), bindable, displaybind]\n    HRESULT left([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLSTYLE_POSITION), bindable, displaybind]\n    HRESULT position([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_ZINDEX), bindable, displaybind]\n    HRESULT zIndex([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_ZINDEX), bindable, displaybind]\n    HRESULT zIndex([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_OVERFLOW), bindable, displaybind]\n    HRESULT overflow([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_OVERFLOW), bindable, displaybind]\n    HRESULT overflow([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), bindable, displaybind]\n    HRESULT pageBreakBefore([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), bindable, displaybind]\n    HRESULT pageBreakBefore([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), bindable, displaybind]\n    HRESULT pageBreakAfter([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), bindable, displaybind]\n    HRESULT pageBreakAfter([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_CSSTEXT), bindable, displaybind]\n    HRESULT cssText([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_CSSTEXT), bindable, displaybind]\n    HRESULT cssText([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_PIXELTOP), bindable, displaybind, hidden]\n    HRESULT pixelTop([in] LONG v);\n\n    [propget, id(DISPID_IHTMLSTYLE_PIXELTOP), bindable, displaybind, hidden]\n    HRESULT pixelTop([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_PIXELLEFT), bindable, displaybind, hidden]\n    HRESULT pixelLeft([in] LONG v);\n\n    [propget, id(DISPID_IHTMLSTYLE_PIXELLEFT), bindable, displaybind, hidden]\n    HRESULT pixelLeft([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_PIXELWIDTH), bindable, displaybind, hidden]\n    HRESULT pixelWidth([in] LONG v);\n\n    [propget, id(DISPID_IHTMLSTYLE_PIXELWIDTH), bindable, displaybind, hidden]\n    HRESULT pixelWidth([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), bindable, displaybind, hidden]\n    HRESULT pixelHeight([in] LONG v);\n\n    [propget, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), bindable, displaybind, hidden]\n    HRESULT pixelHeight([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_POSTOP), bindable, displaybind]\n    HRESULT posTop([in] float v);\n\n    [propget, id(DISPID_IHTMLSTYLE_POSTOP), bindable, displaybind]\n    HRESULT posTop([retval, out] float *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_POSLEFT), bindable, displaybind]\n    HRESULT posLeft([in] float v);\n\n    [propget, id(DISPID_IHTMLSTYLE_POSLEFT), bindable, displaybind]\n    HRESULT posLeft([retval, out] float *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_POSWIDTH), bindable, displaybind]\n    HRESULT posWidth([in] float v);\n\n    [propget, id(DISPID_IHTMLSTYLE_POSWIDTH), bindable, displaybind]\n    HRESULT posWidth([retval, out] float *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_POSHEIGHT), bindable, displaybind]\n    HRESULT posHeight([in] float v);\n\n    [propget, id(DISPID_IHTMLSTYLE_POSHEIGHT), bindable, displaybind]\n    HRESULT posHeight([retval, out] float *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_CURSOR), bindable, displaybind]\n    HRESULT cursor([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_CURSOR), bindable, displaybind]\n    HRESULT cursor([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_CLIP), bindable, displaybind]\n    HRESULT clip([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_CLIP), bindable, displaybind]\n    HRESULT clip([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE_FILTER), bindable, displaybind]\n    HRESULT filter([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_FILTER), bindable, displaybind]\n    HRESULT filter([retval, out] BSTR *p);\n\n    [id(DISPID_IHTMLSTYLE_SETATTRIBUTE)]\n    HRESULT setAttribute(\n        [in] BSTR strAttributeName,\n        [in] VARIANT AttributeValue,\n        [defaultvalue(1), in] LONG lFlags);\n\n    [id(DISPID_IHTMLSTYLE_GETATTRIBUTE)]\n    HRESULT getAttribute(\n        [in] BSTR strAttributeName,\n        [defaultvalue(0), in] LONG lFlags,\n        [retval, out] VARIANT *AttributeValue);\n\n    [id(DISPID_IHTMLSTYLE_REMOVEATTRIBUTE)]\n    HRESULT removeAttribute(\n        [in] BSTR strAttributeName,\n        [defaultvalue(1), in]\n        LONG lFlags,\n        [retval, out] VARIANT_BOOL *pfSuccess);\n\n    [id(DISPID_IHTMLSTYLE_TOSTRING)]\n    HRESULT toString([retval, out] BSTR *String);\n}\n\n/*****************************************************************************\n *    IHTMLStyle2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f4a2-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLStyle2 : IDispatch\n{\n    [propput, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable]\n    HRESULT tableLayout([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable]\n    HRESULT tableLayout([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable]\n    HRESULT borderCollapse([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable]\n    HRESULT borderCollapse([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable]\n    HRESULT direction([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable]\n    HRESULT direction([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable]\n    HRESULT behavior([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable]\n    HRESULT behavior([out, retval] BSTR *p);\n\n    [id(DISPID_IHTMLSTYLE2_SETEXPRESSION)]\n    HRESULT setExpression(\n            [in] BSTR propname,\n            [in] BSTR expression,\n            [in, defaultvalue(\"\")] BSTR language);\n\n    [id(DISPID_IHTMLSTYLE2_GETEXPRESSION)]\n    HRESULT getExpression(\n            [in] BSTR propname,\n            [out, retval] VARIANT *expression);\n\n    [id(DISPID_IHTMLSTYLE2_REMOVEEXPRESSION)]\n    HRESULT removeExpression(\n            [in] BSTR propname,\n            [out, retval] VARIANT_BOOL *pfSuccess);\n\n    [propput, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable]\n    HRESULT position([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable]\n    HRESULT position([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable]\n    HRESULT unicodeBidi([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable]\n    HRESULT unicodeBidi([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable]\n    HRESULT bottom([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable]\n    HRESULT bottom([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable]\n    HRESULT right([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable]\n    HRESULT right([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden]\n    HRESULT pixelBottom([in] LONG v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden]\n    HRESULT pixelBottom([out, retval] LONG *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden]\n    HRESULT pixelRight([in] LONG v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden]\n    HRESULT pixelRight([out, retval] LONG *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable]\n    HRESULT posBottom([in] float v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable]\n    HRESULT posBottom([out, retval] float *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable]\n    HRESULT posRight([in] float v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable]\n    HRESULT posRight([out, retval] float *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable]\n    HRESULT imeMode([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable]\n    HRESULT imeMode([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable]\n    HRESULT rubyAlign([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable]\n    HRESULT rubyAlign([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable]\n    HRESULT rubyPosition([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable]\n    HRESULT rubyPosition([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable]\n    HRESULT rubyOverhang([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable]\n    HRESULT rubyOverhang([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable]\n    HRESULT layoutGridChar([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable]\n    HRESULT layoutGridChar([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable]\n    HRESULT layoutGridLine([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable]\n    HRESULT layoutGridLine([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable]\n    HRESULT layoutGridMode([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable]\n    HRESULT layoutGridMode([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable]\n    HRESULT layoutGridType([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable]\n    HRESULT layoutGridType([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable]\n    HRESULT layoutGrid([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable]\n    HRESULT layoutGrid([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable]\n    HRESULT wordBreak([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable]\n    HRESULT wordBreak([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable]\n    HRESULT lineBreak([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable]\n    HRESULT lineBreak([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable]\n    HRESULT textJustify([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable]\n    HRESULT textJustify([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable]\n    HRESULT textJustifyTrim([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable]\n    HRESULT textJustifyTrim([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable]\n    HRESULT textKashida([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable]\n    HRESULT textKashida([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable]\n    HRESULT textAutospace([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable]\n    HRESULT textAutospace([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable]\n    HRESULT overflowX([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable]\n    HRESULT overflowX([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable]\n    HRESULT overflowY([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable]\n    HRESULT overflowY([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable]\n    HRESULT accelerator([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable]\n    HRESULT accelerator([out, retval] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLRuleStyle interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050F3CF-98B5-11CF-BB82-00AA00BDCE0B)\n]\ninterface IHTMLRuleStyle : IDispatch\n{\n    [propput, id(DISPID_IHTMLRULESTYLE_FONTFAMILY), bindable, displaybind]\n    HRESULT fontFamily([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_FONTFAMILY), bindable, displaybind]\n    HRESULT fontFamily([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_FONTSTYLE), bindable, displaybind]\n    HRESULT fontStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_FONTSTYLE), bindable, displaybind]\n    HRESULT fontStyle([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_FONTVARIANT), bindable, displaybind]\n    HRESULT fontVariant([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_FONTVARIANT), bindable, displaybind]\n    HRESULT fontVariant([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_FONTWEIGHT), bindable, displaybind]\n    HRESULT fontWeight([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_FONTWEIGHT), bindable, displaybind]\n    HRESULT fontWeight([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_FONTSIZE), bindable, displaybind]\n    HRESULT fontSize([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_FONTSIZE), bindable, displaybind]\n    HRESULT fontSize([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_FONT), bindable, displaybind]\n    HRESULT font([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_FONT), bindable, displaybind]\n    HRESULT font([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_COLOR), bindable, displaybind]\n    HRESULT color([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_COLOR), bindable, displaybind]\n    HRESULT color([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUND), bindable, displaybind]\n    HRESULT background([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUND), bindable, displaybind]\n    HRESULT background([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDCOLOR), bindable, displaybind]\n    HRESULT backgroundColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDCOLOR), bindable, displaybind]\n    HRESULT backgroundColor([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDIMAGE), bindable, displaybind]\n    HRESULT backgroundImage([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDIMAGE), bindable, displaybind]\n    HRESULT backgroundImage([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDREPEAT), bindable, displaybind]\n    HRESULT backgroundRepeat([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDREPEAT), bindable, displaybind]\n    HRESULT backgroundRepeat([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDATTACHMENT), bindable, displaybind]\n    HRESULT backgroundAttachment([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDATTACHMENT), bindable, displaybind]\n    HRESULT backgroundAttachment([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITION), bindable, displaybind]\n    HRESULT backgroundPosition([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITION), bindable, displaybind]\n    HRESULT backgroundPosition([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONX), bindable, displaybind]\n    HRESULT backgroundPositionX([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONX), bindable, displaybind]\n    HRESULT backgroundPositionX([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONY), bindable, displaybind]\n    HRESULT backgroundPositionY([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONY), bindable, displaybind]\n    HRESULT backgroundPositionY([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_WORDSPACING), bindable, displaybind]\n    HRESULT wordSpacing([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_WORDSPACING), bindable, displaybind]\n    HRESULT wordSpacing([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_LETTERSPACING), bindable, displaybind]\n    HRESULT letterSpacing([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_LETTERSPACING), bindable, displaybind]\n    HRESULT letterSpacing([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATION), bindable, displaybind]\n    HRESULT textDecoration([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATION), bindable, displaybind]\n    HRESULT textDecoration([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONNONE), bindable, displaybind]\n    HRESULT textDecorationNone([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONNONE), bindable, displaybind]\n    HRESULT textDecorationNone([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONUNDERLINE), bindable, displaybind]\n    HRESULT textDecorationUnderline([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONUNDERLINE), bindable, displaybind]\n    HRESULT textDecorationUnderline([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONOVERLINE), bindable, displaybind]\n    HRESULT textDecorationOverline([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONOVERLINE), bindable, displaybind]\n    HRESULT textDecorationOverline([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONLINETHROUGH), bindable, displaybind]\n    HRESULT textDecorationLineThrough([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONLINETHROUGH), bindable, displaybind]\n    HRESULT textDecorationLineThrough([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONBLINK), bindable, displaybind]\n    HRESULT textDecorationBlink([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONBLINK), bindable, displaybind]\n    HRESULT textDecorationBlink([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_VERTICALALIGN), bindable, displaybind]\n    HRESULT verticalAlign([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_VERTICALALIGN), bindable, displaybind]\n    HRESULT verticalAlign([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_TEXTTRANSFORM), bindable, displaybind]\n    HRESULT textTransform([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_TEXTTRANSFORM), bindable, displaybind]\n    HRESULT textTransform([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_TEXTALIGN), bindable, displaybind]\n    HRESULT textAlign([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_TEXTALIGN), bindable, displaybind]\n    HRESULT textAlign([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_TEXTINDENT), bindable, displaybind]\n    HRESULT textIndent([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_TEXTINDENT), bindable, displaybind]\n    HRESULT textIndent([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_LINEHEIGHT), bindable, displaybind]\n    HRESULT lineHeight([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_LINEHEIGHT), bindable, displaybind]\n    HRESULT lineHeight([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_MARGINTOP), bindable, displaybind]\n    HRESULT marginTop([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_MARGINTOP), bindable, displaybind]\n    HRESULT marginTop([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_MARGINRIGHT), bindable, displaybind]\n    HRESULT marginRight([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_MARGINRIGHT), bindable, displaybind]\n    HRESULT marginRight([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_MARGINBOTTOM), bindable, displaybind]\n    HRESULT marginBottom([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_MARGINBOTTOM), bindable, displaybind]\n    HRESULT marginBottom([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_MARGINLEFT), bindable, displaybind]\n    HRESULT marginLeft([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_MARGINLEFT), bindable, displaybind]\n    HRESULT marginLeft([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_MARGIN), bindable, displaybind]\n    HRESULT margin([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_MARGIN), bindable, displaybind]\n    HRESULT margin([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_PADDINGTOP), bindable, displaybind]\n    HRESULT paddingTop([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_PADDINGTOP), bindable, displaybind]\n    HRESULT paddingTop([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_PADDINGRIGHT), bindable, displaybind]\n    HRESULT paddingRight([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_PADDINGRIGHT), bindable, displaybind]\n    HRESULT paddingRight([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_PADDINGBOTTOM), bindable, displaybind]\n    HRESULT paddingBottom([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_PADDINGBOTTOM), bindable, displaybind]\n    HRESULT paddingBottom([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_PADDINGLEFT), bindable, displaybind]\n    HRESULT paddingLeft([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_PADDINGLEFT), bindable, displaybind]\n    HRESULT paddingLeft([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_PADDING), bindable, displaybind]\n    HRESULT padding([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_PADDING), bindable, displaybind]\n    HRESULT padding([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BORDER), bindable, displaybind]\n    HRESULT border([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BORDER), bindable, displaybind]\n    HRESULT border([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BORDERTOP), bindable, displaybind]\n    HRESULT borderTop([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BORDERTOP), bindable, displaybind]\n    HRESULT borderTop([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BORDERRIGHT), bindable, displaybind]\n    HRESULT borderRight([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BORDERRIGHT), bindable, displaybind]\n    HRESULT borderRight([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOM), bindable, displaybind]\n    HRESULT borderBottom([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOM), bindable, displaybind]\n    HRESULT borderBottom([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BORDERLEFT), bindable, displaybind]\n    HRESULT borderLeft([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BORDERLEFT), bindable, displaybind]\n    HRESULT borderLeft([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BORDERCOLOR), bindable, displaybind]\n    HRESULT borderColor([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BORDERCOLOR), bindable, displaybind]\n    HRESULT borderColor([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BORDERTOPCOLOR), bindable, displaybind]\n    HRESULT borderTopColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BORDERTOPCOLOR), bindable, displaybind]\n    HRESULT borderTopColor([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTCOLOR), bindable, displaybind]\n    HRESULT borderRightColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTCOLOR), bindable, displaybind]\n    HRESULT borderRightColor([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMCOLOR), bindable, displaybind]\n    HRESULT borderBottomColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMCOLOR), bindable, displaybind]\n    HRESULT borderBottomColor([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BORDERLEFTCOLOR), bindable, displaybind]\n    HRESULT borderLeftColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BORDERLEFTCOLOR), bindable, displaybind]\n    HRESULT borderLeftColor([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BORDERWIDTH), bindable, displaybind]\n    HRESULT borderWidth([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BORDERWIDTH), bindable, displaybind]\n    HRESULT borderWidth([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BORDERTOPWIDTH), bindable, displaybind]\n    HRESULT borderTopWidth([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BORDERTOPWIDTH), bindable, displaybind]\n    HRESULT borderTopWidth([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTWIDTH), bindable, displaybind]\n    HRESULT borderRightWidth([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTWIDTH), bindable, displaybind]\n    HRESULT borderRightWidth([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMWIDTH), bindable, displaybind]\n    HRESULT borderBottomWidth([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMWIDTH), bindable, displaybind]\n    HRESULT borderBottomWidth([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BORDERLEFTWIDTH), bindable, displaybind]\n    HRESULT borderLeftWidth([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BORDERLEFTWIDTH), bindable, displaybind]\n    HRESULT borderLeftWidth([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BORDERSTYLE), bindable, displaybind]\n    HRESULT borderStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BORDERSTYLE), bindable, displaybind]\n    HRESULT borderStyle([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BORDERTOPSTYLE), bindable, displaybind]\n    HRESULT borderTopStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BORDERTOPSTYLE), bindable, displaybind]\n    HRESULT borderTopStyle([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTSTYLE), bindable, displaybind]\n    HRESULT borderRightStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTSTYLE), bindable, displaybind]\n    HRESULT borderRightStyle([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMSTYLE), bindable, displaybind]\n    HRESULT borderBottomStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMSTYLE), bindable, displaybind]\n    HRESULT borderBottomStyle([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_BORDERLEFTSTYLE), bindable, displaybind]\n    HRESULT borderLeftStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_BORDERLEFTSTYLE), bindable, displaybind]\n    HRESULT borderLeftStyle([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_WIDTH), bindable, displaybind]\n    HRESULT width([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_WIDTH), bindable, displaybind]\n    HRESULT width([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_HEIGHT), bindable, displaybind]\n    HRESULT height([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_HEIGHT), bindable, displaybind]\n    HRESULT height([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_STYLEFLOAT), bindable, displaybind]\n    HRESULT styleFloat([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_STYLEFLOAT), bindable, displaybind]\n    HRESULT styleFloat([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_CLEAR), bindable, displaybind]\n    HRESULT clear([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_CLEAR), bindable, displaybind]\n    HRESULT clear([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_DISPLAY), bindable, displaybind]\n    HRESULT display([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_DISPLAY), bindable, displaybind]\n    HRESULT display([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_VISIBILITY), bindable, displaybind]\n    HRESULT visibility([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_VISIBILITY), bindable, displaybind]\n    HRESULT visibility([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_LISTSTYLETYPE), bindable, displaybind]\n    HRESULT listStyleType([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_LISTSTYLETYPE), bindable, displaybind]\n    HRESULT listStyleType([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_LISTSTYLEPOSITION), bindable, displaybind]\n    HRESULT listStylePosition([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_LISTSTYLEPOSITION), bindable, displaybind]\n    HRESULT listStylePosition([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_LISTSTYLEIMAGE), bindable, displaybind]\n    HRESULT listStyleImage([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_LISTSTYLEIMAGE), bindable, displaybind]\n    HRESULT listStyleImage([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_LISTSTYLE), bindable, displaybind]\n    HRESULT listStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_LISTSTYLE), bindable, displaybind]\n    HRESULT listStyle([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_WHITESPACE), bindable, displaybind]\n    HRESULT whiteSpace([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_WHITESPACE), bindable, displaybind]\n    HRESULT whiteSpace([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_TOP), bindable, displaybind]\n    HRESULT top([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_TOP), bindable, displaybind]\n    HRESULT top([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_LEFT), bindable, displaybind]\n    HRESULT left([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_LEFT), bindable, displaybind]\n    HRESULT left([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_POSITION), bindable, displaybind]\n    HRESULT position([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_ZINDEX), bindable, displaybind]\n    HRESULT zIndex([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_ZINDEX), bindable, displaybind]\n    HRESULT zIndex([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_OVERFLOW), bindable, displaybind]\n    HRESULT overflow([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_OVERFLOW), bindable, displaybind]\n    HRESULT overflow([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_PAGEBREAKBEFORE), bindable, displaybind]\n    HRESULT pageBreakBefore([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_PAGEBREAKBEFORE), bindable, displaybind]\n    HRESULT pageBreakBefore([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_PAGEBREAKAFTER), bindable, displaybind]\n    HRESULT pageBreakAfter([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_PAGEBREAKAFTER), bindable, displaybind]\n    HRESULT pageBreakAfter([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_CSSTEXT), bindable, displaybind]\n    HRESULT cssText([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_CSSTEXT), bindable, displaybind]\n    HRESULT cssText([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_CURSOR), bindable, displaybind]\n    HRESULT cursor([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_CURSOR), bindable, displaybind]\n    HRESULT cursor([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_CLIP), bindable, displaybind]\n    HRESULT clip([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_CLIP), bindable, displaybind]\n    HRESULT clip([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRULESTYLE_FILTER), bindable, displaybind]\n    HRESULT filter([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRULESTYLE_FILTER), bindable, displaybind]\n    HRESULT filter([retval, out] BSTR *p);\n\n    [id(DISPID_IHTMLRULESTYLE_SETATTRIBUTE)]\n    HRESULT setAttribute(\n        [in] BSTR strAttributeName,\n        [in] VARIANT AttributeValue,\n        [defaultvalue(1), in] LONG lFlags);\n\n    [id(DISPID_IHTMLRULESTYLE_GETATTRIBUTE)]\n    HRESULT getAttribute(\n        [in] BSTR strAttributeName,\n        [defaultvalue(0), in] LONG lFlags,\n        [retval, out] VARIANT *AttributeValue);\n\n    [id(DISPID_IHTMLRULESTYLE_REMOVEATTRIBUTE)]\n    HRESULT removeAttribute(\n        [in] BSTR strAttributeName,\n        [defaultvalue(1), in] LONG lFlags,\n        [retval, out] VARIANT_BOOL *pfSuccess);\n}\n\n/*****************************************************************************\n *    DispHTMLStyle dispinterface\n */\n[\n    hidden,\n    uuid(3050f55a-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLStyle\n{\nproperties:\nmethods:\n    [propput, id(DISPID_IHTMLSTYLE_FONTFAMILY), displaybind, bindable]\n    void fontFamily(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_FONTFAMILY), displaybind, bindable]\n    BSTR fontFamily();\n\n    [propput, id(DISPID_IHTMLSTYLE_FONTSTYLE), displaybind, bindable]\n    void fontStyle(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_FONTSTYLE), displaybind, bindable]\n    BSTR fontStyle();\n\n    [propput, id(DISPID_IHTMLSTYLE_FONTVARIANT), displaybind, bindable]\n    void fontVariant(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_FONTVARIANT), displaybind, bindable]\n    BSTR fontVariant();\n\n    [propput, id(DISPID_IHTMLSTYLE_FONTWEIGHT), displaybind, bindable]\n    void fontWeight(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_FONTWEIGHT), displaybind, bindable]\n    BSTR fontWeight();\n\n    [propput, id(DISPID_IHTMLSTYLE_FONTSIZE), displaybind, bindable]\n    void fontSize(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_FONTSIZE), displaybind, bindable]\n    VARIANT fontSize();\n\n    [propput, id(DISPID_IHTMLSTYLE_FONT), displaybind, bindable, nonbrowsable]\n    void font(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_FONT), displaybind, bindable, nonbrowsable]\n    BSTR font();\n\n    [propput, id(DISPID_IHTMLSTYLE_COLOR), displaybind, bindable]\n    void color(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_COLOR), displaybind, bindable]\n    VARIANT color();\n\n    [propput, id(DISPID_IHTMLSTYLE_BACKGROUND), displaybind, bindable, nonbrowsable]\n    void background(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BACKGROUND), displaybind, bindable, nonbrowsable]\n    BSTR background();\n\n    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), displaybind, bindable]\n    void backgroundColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), displaybind, bindable]\n    VARIANT backgroundColor();\n\n    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), displaybind, bindable]\n    void backgroundImage(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), displaybind, bindable]\n    BSTR backgroundImage();\n\n    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), displaybind, bindable]\n    void backgroundRepeat(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), displaybind, bindable]\n    BSTR backgroundRepeat();\n\n    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable]\n    void backgroundAttachment(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable]\n    BSTR backgroundAttachment();\n\n    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), displaybind, bindable, nonbrowsable]\n    void backgroundPosition(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), displaybind, bindable, nonbrowsable]\n    BSTR backgroundPosition();\n\n    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable]\n    void backgroundPositionX(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable]\n    VARIANT backgroundPositionX();\n\n    [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable]\n    void backgroundPositionY(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable]\n    VARIANT backgroundPositionY();\n\n    [propput, id(DISPID_IHTMLSTYLE_WORDSPACING), displaybind, bindable]\n    void wordSpacing(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_WORDSPACING), displaybind, bindable]\n    VARIANT wordSpacing();\n\n    [propput, id(DISPID_IHTMLSTYLE_LETTERSPACING), displaybind, bindable]\n    void letterSpacing(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_LETTERSPACING), displaybind, bindable]\n    VARIANT letterSpacing();\n\n    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATION), displaybind, bindable]\n    void textDecoration(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATION), displaybind, bindable]\n    BSTR textDecoration();\n\n    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), displaybind, bindable]\n    void textDecorationNone(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), displaybind, bindable]\n    VARIANT_BOOL textDecorationNone();\n\n    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), displaybind, bindable]\n    void textDecorationUnderline(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), displaybind, bindable]\n    VARIANT_BOOL textDecorationUnderline();\n\n    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), displaybind, bindable]\n    void textDecorationOverline(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), displaybind, bindable]\n    VARIANT_BOOL textDecorationOverline();\n\n    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), displaybind, bindable]\n    void textDecorationLineThrough(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), displaybind, bindable]\n    VARIANT_BOOL textDecorationLineThrough();\n\n    [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), displaybind, bindable]\n    void textDecorationBlink(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), displaybind, bindable]\n    VARIANT_BOOL textDecorationBlink();\n\n    [propput, id(DISPID_IHTMLSTYLE_VERTICALALIGN), displaybind, bindable]\n    void verticalAlign(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_VERTICALALIGN), displaybind, bindable]\n    VARIANT verticalAlign();\n\n    [propput, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), displaybind, bindable]\n    void textTransform(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), displaybind, bindable]\n    BSTR textTransform();\n\n    [propput, id(DISPID_IHTMLSTYLE_TEXTALIGN), displaybind, bindable]\n    void textAlign(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_TEXTALIGN), displaybind, bindable]\n    BSTR textAlign();\n\n    [propput, id(DISPID_IHTMLSTYLE_TEXTINDENT), displaybind, bindable]\n    void textIndent(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_TEXTINDENT), displaybind, bindable]\n    VARIANT textIndent();\n\n    [propput, id(DISPID_IHTMLSTYLE_LINEHEIGHT), displaybind, bindable]\n    void lineHeight(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_LINEHEIGHT), displaybind, bindable]\n    VARIANT lineHeight();\n\n    [propput, id(DISPID_IHTMLSTYLE_MARGINTOP), displaybind, bindable]\n    void marginTop(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_MARGINTOP), displaybind, bindable]\n    VARIANT marginTop();\n\n    [propput, id(DISPID_IHTMLSTYLE_MARGINRIGHT), displaybind, bindable]\n    void marginRight(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_MARGINRIGHT), displaybind, bindable]\n    VARIANT marginRight();\n\n    [propput, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), displaybind, bindable]\n    void marginBottom(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), displaybind, bindable]\n    VARIANT marginBottom();\n\n    [propput, id(DISPID_IHTMLSTYLE_MARGINLEFT), displaybind, bindable]\n    void marginLeft(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_MARGINLEFT), displaybind, bindable]\n    VARIANT marginLeft();\n\n    [propput, id(DISPID_IHTMLSTYLE_MARGIN), displaybind, bindable, nonbrowsable]\n    void margin(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_MARGIN), displaybind, bindable, nonbrowsable]\n    BSTR margin();\n\n    [propput, id(DISPID_IHTMLSTYLE_PADDINGTOP), displaybind, bindable]\n    void paddingTop(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_PADDINGTOP), displaybind, bindable]\n    VARIANT paddingTop();\n\n    [propput, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), displaybind, bindable]\n    void paddingRight(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), displaybind, bindable]\n    VARIANT paddingRight();\n\n    [propput, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), displaybind, bindable]\n    void paddingBottom(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), displaybind, bindable]\n    VARIANT paddingBottom();\n\n    [propput, id(DISPID_IHTMLSTYLE_PADDINGLEFT), displaybind, bindable]\n    void paddingLeft(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_PADDINGLEFT), displaybind, bindable]\n    VARIANT paddingLeft();\n\n    [propput, id(DISPID_IHTMLSTYLE_PADDING), displaybind, bindable, nonbrowsable]\n    void padding(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_PADDING), displaybind, bindable, nonbrowsable]\n    BSTR padding();\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDER), displaybind, bindable, nonbrowsable]\n    void border(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDER), displaybind, bindable, nonbrowsable]\n    BSTR border();\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERTOP), displaybind, bindable]\n    void borderTop(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERTOP), displaybind, bindable]\n    BSTR borderTop();\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHT), displaybind, bindable]\n    void borderRight(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHT), displaybind, bindable]\n    BSTR borderRight();\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), displaybind, bindable]\n    void borderBottom(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), displaybind, bindable]\n    BSTR borderBottom();\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFT), displaybind, bindable]\n    void borderLeft(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFT), displaybind, bindable]\n    BSTR borderLeft();\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERCOLOR), displaybind, bindable]\n    void borderColor(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERCOLOR), displaybind, bindable]\n    BSTR borderColor();\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), displaybind, bindable]\n    void borderTopColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), displaybind, bindable]\n    VARIANT borderTopColor();\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), displaybind, bindable]\n    void borderRightColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), displaybind, bindable]\n    VARIANT borderRightColor();\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable]\n    void borderBottomColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable]\n    VARIANT borderBottomColor();\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), displaybind, bindable]\n    void borderLeftColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), displaybind, bindable]\n    VARIANT borderLeftColor();\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERWIDTH), displaybind, bindable]\n    void borderWidth(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERWIDTH), displaybind, bindable]\n    BSTR borderWidth();\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), displaybind, bindable]\n    void borderTopWidth(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), displaybind, bindable]\n    VARIANT borderTopWidth();\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), displaybind, bindable]\n    void borderRightWidth(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), displaybind, bindable]\n    VARIANT borderRightWidth();\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable]\n    void borderBottomWidth(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable]\n    VARIANT borderBottomWidth();\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), displaybind, bindable]\n    void borderLeftWidth(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), displaybind, bindable]\n    VARIANT borderLeftWidth();\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERSTYLE), displaybind, bindable]\n    void borderStyle(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERSTYLE), displaybind, bindable]\n    BSTR borderStyle();\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), displaybind, bindable]\n    void borderTopStyle(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), displaybind, bindable]\n    BSTR borderTopStyle();\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), displaybind, bindable]\n    void borderRightStyle(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), displaybind, bindable]\n    BSTR borderRightStyle();\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable]\n    void borderBottomStyle(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable]\n    BSTR borderBottomStyle();\n\n    [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), displaybind, bindable]\n    void borderLeftStyle(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), displaybind, bindable]\n    BSTR borderLeftStyle();\n\n    [propput, id(DISPID_IHTMLSTYLE_WIDTH), displaybind, bindable]\n    void width(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_WIDTH), displaybind, bindable]\n    VARIANT width();\n\n    [propput, id(DISPID_IHTMLSTYLE_HEIGHT), displaybind, bindable]\n    void height(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_HEIGHT), displaybind, bindable]\n    VARIANT height();\n\n    [propput, id(DISPID_IHTMLSTYLE_STYLEFLOAT), displaybind, bindable]\n    void styleFloat(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_STYLEFLOAT), displaybind, bindable]\n    BSTR styleFloat();\n\n    [propput, id(DISPID_IHTMLSTYLE_CLEAR), displaybind, bindable]\n    void clear(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_CLEAR), displaybind, bindable]\n    BSTR clear();\n\n    [propput, id(DISPID_IHTMLSTYLE_DISPLAY), displaybind, bindable]\n    void display(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_DISPLAY), displaybind, bindable]\n    BSTR display();\n\n    [propput, id(DISPID_IHTMLSTYLE_VISIBILITY), displaybind, bindable]\n    void visibility(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_VISIBILITY), displaybind, bindable]\n    BSTR visibility();\n\n    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), displaybind, bindable]\n    void listStyleType(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), displaybind, bindable]\n    BSTR listStyleType();\n\n    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), displaybind, bindable]\n    void listStylePosition(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), displaybind, bindable]\n    BSTR listStylePosition();\n\n    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), displaybind, bindable]\n    void listStyleImage(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), displaybind, bindable]\n    BSTR listStyleImage();\n\n    [propput, id(DISPID_IHTMLSTYLE_LISTSTYLE), displaybind, bindable, nonbrowsable]\n    void listStyle(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_LISTSTYLE), displaybind, bindable, nonbrowsable]\n    BSTR listStyle();\n\n    [propput, id(DISPID_IHTMLSTYLE_WHITESPACE), displaybind, bindable]\n    void whiteSpace(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_WHITESPACE), displaybind, bindable]\n    BSTR whiteSpace();\n\n    [propput, id(DISPID_IHTMLSTYLE_TOP), displaybind, bindable]\n    void top(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_TOP), displaybind, bindable]\n    VARIANT top();\n\n    [propput, id(DISPID_IHTMLSTYLE_LEFT), displaybind, bindable]\n    void left(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_LEFT), displaybind, bindable]\n    VARIANT left();\n\n    [propput, id(DISPID_IHTMLSTYLE_ZINDEX), displaybind, bindable]\n    void zIndex(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE_ZINDEX), displaybind, bindable]\n    VARIANT zIndex();\n\n    [propput, id(DISPID_IHTMLSTYLE_OVERFLOW), displaybind, bindable]\n    void overflow(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_OVERFLOW), displaybind, bindable]\n    BSTR overflow();\n\n    [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), displaybind, bindable]\n    void pageBreakBefore(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), displaybind, bindable]\n    BSTR pageBreakBefore();\n\n    [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), displaybind, bindable]\n    void pageBreakAfter(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), displaybind, bindable]\n    BSTR pageBreakAfter();\n\n    [propput, id(DISPID_IHTMLSTYLE_CSSTEXT), displaybind, bindable, nonbrowsable]\n    void cssText(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_CSSTEXT), displaybind, bindable, nonbrowsable]\n    BSTR cssText();\n\n    [propput, id(DISPID_IHTMLSTYLE_PIXELTOP), displaybind, bindable, hidden]\n    void pixelTop(LONG v);\n\n    [propget, id(DISPID_IHTMLSTYLE_PIXELTOP), displaybind, bindable, hidden]\n    LONG pixelTop();\n\n    [propput, id(DISPID_IHTMLSTYLE_PIXELLEFT), displaybind, bindable, hidden]\n    void pixelLeft(LONG v);\n\n    [propget, id(DISPID_IHTMLSTYLE_PIXELLEFT), displaybind, bindable, hidden]\n    LONG pixelLeft();\n\n    [propput, id(DISPID_IHTMLSTYLE_PIXELWIDTH), displaybind, bindable, hidden]\n    void pixelWidth(LONG v);\n\n    [propget, id(DISPID_IHTMLSTYLE_PIXELWIDTH), displaybind, bindable, hidden]\n    LONG pixelWidth();\n\n    [propput, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), displaybind, bindable, hidden]\n    void pixelHeight(LONG v);\n\n    [propget, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), displaybind, bindable, hidden]\n    LONG pixelHeight();\n\n    [propput, id(DISPID_IHTMLSTYLE_POSTOP), displaybind, bindable]\n    void posTop(float v);\n\n    [propget, id(DISPID_IHTMLSTYLE_POSTOP), displaybind, bindable]\n    float posTop();\n\n    [propput, id(DISPID_IHTMLSTYLE_POSLEFT), displaybind, bindable]\n    void posLeft(float v);\n\n    [propget, id(DISPID_IHTMLSTYLE_POSLEFT), displaybind, bindable]\n    float posLeft();\n\n    [propput, id(DISPID_IHTMLSTYLE_POSWIDTH), displaybind, bindable]\n    void posWidth(float v);\n\n    [propget, id(DISPID_IHTMLSTYLE_POSWIDTH), displaybind, bindable]\n    float posWidth();\n\n    [propput, id(DISPID_IHTMLSTYLE_POSHEIGHT), displaybind, bindable]\n    void posHeight(float v);\n\n    [propget, id(DISPID_IHTMLSTYLE_POSHEIGHT), displaybind, bindable]\n    float posHeight();\n\n    [propput, id(DISPID_IHTMLSTYLE_CURSOR), displaybind, bindable]\n    void cursor(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_CURSOR), displaybind, bindable]\n    BSTR cursor();\n\n    [propput, id(DISPID_IHTMLSTYLE_CLIP), displaybind, bindable]\n    void clip(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_CLIP), displaybind, bindable]\n    BSTR clip();\n\n    [propput, id(DISPID_IHTMLSTYLE_FILTER), displaybind, bindable]\n    void filter(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE_FILTER), displaybind, bindable]\n    BSTR filter();\n\n    [id(DISPID_IHTMLSTYLE_SETATTRIBUTE)]\n    void setAttribute(\n            [in] BSTR strAttributeName,\n            [in] VARIANT AttributeValue,\n            [in, defaultvalue(1)] LONG lFlags);\n\n    [id(DISPID_IHTMLSTYLE_GETATTRIBUTE)]\n    VARIANT getAttribute(\n            [in] BSTR strAttributeName,\n            [in, defaultvalue(0)] LONG lFlags);\n\n    [id(DISPID_IHTMLSTYLE_REMOVEATTRIBUTE)]\n    VARIANT_BOOL removeAttribute(\n            [in] BSTR strAttributeName,\n            [in, defaultvalue(1)] LONG lFlags);\n\n    [id(DISPID_IHTMLSTYLE_TOSTRING)]\n    BSTR toString();\n\n    [propput, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable]\n    void tableLayout(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable]\n    BSTR tableLayout();\n\n    [propput, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable]\n    void borderCollapse(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable]\n    BSTR borderCollapse();\n\n    [propput, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable]\n    void direction(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable]\n    BSTR direction();\n\n    [propput, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable]\n    void behavior(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable]\n    BSTR behavior();\n\n    [id(DISPID_IHTMLSTYLE2_SETEXPRESSION)]\n    void setExpression(\n            [in] BSTR propname,\n            [in] BSTR expression,\n            [in, defaultvalue(\"\")] BSTR language);\n\n    [id(DISPID_IHTMLSTYLE2_GETEXPRESSION)]\n    VARIANT getExpression([in] BSTR propname);\n\n    [id(DISPID_IHTMLSTYLE2_REMOVEEXPRESSION)]\n    VARIANT_BOOL removeExpression([in] BSTR propname);\n\n    [propput, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable]\n    void position(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable]\n    BSTR position();\n\n    [propput, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable]\n    void unicodeBidi(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable]\n    BSTR unicodeBidi();\n\n    [propput, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable]\n    void bottom(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable]\n    VARIANT bottom();\n\n    [propput, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable]\n    void right(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable]\n    VARIANT right();\n\n    [propput, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden]\n    void pixelBottom(LONG v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden]\n    LONG pixelBottom();\n\n    [propput, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden]\n    void pixelRight(LONG v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden]\n    LONG pixelRight();\n\n    [propput, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable]\n    void posBottom(float v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable]\n    float posBottom();\n\n    [propput, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable]\n    void posRight(float v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable]\n    float posRight();\n\n    [propput, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable]\n    void imeMode(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable]\n    BSTR imeMode();\n\n    [propput, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable]\n    void rubyAlign(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable]\n    BSTR rubyAlign();\n\n    [propput, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable]\n    void rubyPosition(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable]\n    BSTR rubyPosition();\n\n    [propput, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable]\n    void rubyOverhang(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable]\n    BSTR rubyOverhang();\n\n    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable]\n    void layoutGridChar(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable]\n    VARIANT layoutGridChar();\n\n    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable]\n    void layoutGridLine(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable]\n    VARIANT layoutGridLine();\n\n    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable]\n    void layoutGridMode(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable]\n    BSTR layoutGridMode();\n\n    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable]\n    void layoutGridType(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable]\n    BSTR layoutGridType();\n\n    [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable]\n    void layoutGrid(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable]\n    BSTR layoutGrid();\n\n    [propput, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable]\n    void wordBreak(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable]\n    BSTR wordBreak();\n\n    [propput, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable]\n    void lineBreak(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable]\n    BSTR lineBreak();\n\n    [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable]\n    void textJustify(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable]\n    BSTR textJustify();\n\n    [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable]\n    void textJustifyTrim(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable]\n    BSTR textJustifyTrim();\n\n    [propput, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable]\n    void textKashida(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable]\n    VARIANT textKashida();\n\n    [propput, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable]\n    void textAutospace(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable]\n    BSTR textAutospace();\n\n    [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable]\n    void overflowX(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable]\n    BSTR overflowX();\n\n    [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable]\n    void overflowY(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable]\n    BSTR overflowY();\n\n    [propput, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable]\n    void accelerator(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable]\n    BSTR accelerator();\n\n    [propput, id(DISPID_IHTMLSTYLE3_LAYOUTFLOW), displaybind, bindable]\n    void layoutFlow(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_LAYOUTFLOW), displaybind, bindable]\n    BSTR layoutFlow();\n\n    [propput, id(DISPID_IHTMLSTYLE3_ZOOM), displaybind, bindable]\n    void zoom(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_ZOOM), displaybind, bindable]\n    VARIANT zoom();\n\n    [propput, id(DISPID_IHTMLSTYLE3_WORDWRAP), displaybind, bindable]\n    void wordWrap(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_WORDWRAP), displaybind, bindable]\n    BSTR wordWrap();\n\n    [propput, id(DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION), displaybind, bindable]\n    void textUnderlinePosition(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION), displaybind, bindable]\n    BSTR textUnderlinePosition();\n\n    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR), displaybind, bindable]\n    void scrollbarBaseColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR), displaybind, bindable]\n    VARIANT scrollbarBaseColor();\n\n    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR), displaybind, bindable]\n    void scrollbarFaceColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR), displaybind, bindable]\n    VARIANT scrollbarFaceColor();\n\n    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]\n    void scrollbar3dLightColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]\n    VARIANT scrollbar3dLightColor();\n\n    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR), displaybind, bindable]\n    void scrollbarShadowColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR), displaybind, bindable]\n    VARIANT scrollbarShadowColor();\n\n    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]\n    void scrollbarHighlightColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]\n    VARIANT scrollbarHighlightColor();\n\n    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]\n    void scrollbarDarkShadowColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]\n    VARIANT scrollbarDarkShadowColor();\n\n    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR), displaybind, bindable]\n    void scrollbarArrowColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR), displaybind, bindable]\n    VARIANT scrollbarArrowColor();\n\n    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR), displaybind, bindable]\n    void scrollbarTrackColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR), displaybind, bindable]\n    VARIANT scrollbarTrackColor();\n\n    [propput, id(DISPID_IHTMLSTYLE3_WRITINGMODE), displaybind, bindable]\n    void writingMode(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_WRITINGMODE), displaybind, bindable]\n    BSTR writingMode();\n\n    [propput, id(DISPID_IHTMLSTYLE3_TEXTALIGNLAST), displaybind, bindable]\n    void textAlignLast(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_TEXTALIGNLAST), displaybind, bindable]\n    BSTR textAlignLast();\n\n    [propput, id(DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE), displaybind, bindable]\n    void textKashidaSpace(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE), displaybind, bindable]\n    VARIANT textKashidaSpace();\n\n    [propput, id(DISPID_IHTMLSTYLE4_TEXTOVERFLOW), displaybind, bindable]\n    void textOverflow(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE4_TEXTOVERFLOW), displaybind, bindable]\n    BSTR textOverflow();\n\n    [propput, id(DISPID_IHTMLSTYLE4_MINHEIGHT), displaybind, bindable]\n    void minHeight(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE4_MINHEIGHT), displaybind, bindable]\n    VARIANT minHeight();\n\n    [propput, id(DISPID_IHTMLSTYLE5_MSINTERPOLATIONMODE), displaybind, bindable]\n    void msInterpolationMode(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE5_MSINTERPOLATIONMODE), displaybind, bindable]\n    BSTR msInterpolationMode();\n\n    [propput, id(DISPID_IHTMLSTYLE5_MAXHEIGHT), displaybind, bindable]\n    void maxHeight(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE5_MAXHEIGHT), displaybind, bindable]\n    VARIANT maxHeight();\n\n    [propput, id(DISPID_IHTMLSTYLE5_MINWIDTH), displaybind, bindable]\n    void minWidth(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE5_MINWIDTH), displaybind, bindable]\n    VARIANT minWidth();\n\n    [propput, id(DISPID_IHTMLSTYLE5_MAXWIDTH), displaybind, bindable]\n    void maxWidth(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE5_MAXWIDTH), displaybind, bindable]\n    VARIANT maxWidth();\n\n    [propput, id(DISPID_IHTMLSTYLE6_CONTENT), displaybind, bindable]\n    void content(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_CONTENT), displaybind, bindable]\n    BSTR content();\n\n    [propput, id(DISPID_IHTMLSTYLE6_CAPTIONSIDE), displaybind, bindable]\n    void captionSide(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_CAPTIONSIDE), displaybind, bindable]\n    BSTR captionSide();\n\n    [propput, id(DISPID_IHTMLSTYLE6_COUNTERINCREMENT), displaybind, bindable]\n    void counterIncrement(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_COUNTERINCREMENT), displaybind, bindable]\n    BSTR counterIncrement();\n\n    [propput, id(DISPID_IHTMLSTYLE6_COUNTERRESET), displaybind, bindable]\n    void counterReset(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_COUNTERRESET), displaybind, bindable]\n    BSTR counterReset();\n\n    [propput, id(DISPID_IHTMLSTYLE6_OUTLINE), displaybind, bindable]\n    void outline(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_OUTLINE), displaybind, bindable]\n    BSTR outline();\n\n    [propput, id(DISPID_IHTMLSTYLE6_OUTLINEWIDTH), displaybind, bindable]\n    void outlineWidth(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_OUTLINEWIDTH), displaybind, bindable]\n    VARIANT outlineWidth();\n\n    [propput, id(DISPID_IHTMLSTYLE6_OUTLINESTYLE), displaybind, bindable]\n    void outlineStyle(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_OUTLINESTYLE), displaybind, bindable]\n    BSTR outlineStyle();\n\n    [propput, id(DISPID_IHTMLSTYLE6_OUTLINECOLOR), displaybind, bindable]\n    void outlineColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_OUTLINECOLOR), displaybind, bindable]\n    VARIANT outlineColor();\n\n    [propput, id(DISPID_IHTMLSTYLE6_BOXSIZING), displaybind, bindable]\n    void boxSizing(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_BOXSIZING), displaybind, bindable]\n    BSTR boxSizing();\n\n    [propput, id(DISPID_IHTMLSTYLE6_BORDERSPACING), displaybind, bindable]\n    void borderSpacing(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_BORDERSPACING), displaybind, bindable]\n    BSTR borderSpacing();\n\n    [propput, id(DISPID_IHTMLSTYLE6_ORPHANS), displaybind, bindable]\n    void orphans(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_ORPHANS), displaybind, bindable]\n    VARIANT orphans();\n\n    [propput, id(DISPID_IHTMLSTYLE6_WIDOWS), displaybind, bindable]\n    void widows(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_WIDOWS), displaybind, bindable]\n    VARIANT widows();\n\n    [propput, id(DISPID_IHTMLSTYLE6_PAGEBREAKINSIDE), displaybind, bindable]\n    void pageBreakInside(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_PAGEBREAKINSIDE), displaybind, bindable]\n    BSTR pageBreakInside();\n\n    [propput, id(DISPID_IHTMLSTYLE6_EMPTYCELLS), displaybind, bindable]\n    void emptyCells(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_EMPTYCELLS), displaybind, bindable]\n    BSTR emptyCells();\n\n    [propput, id(DISPID_IHTMLSTYLE6_MSBLOCKPROGRESSION), displaybind, bindable]\n    void msBlockProgression(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_MSBLOCKPROGRESSION), displaybind, bindable]\n    BSTR msBlockProgression();\n\n    [propput, id(DISPID_IHTMLSTYLE6_QUOTES), displaybind, bindable]\n    void quotes(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_QUOTES), displaybind, bindable]\n    BSTR quotes();\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]\n    IDispatch *constructor();\n}\n\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f656-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLStyle3 : IDispatch\n{\n    [propput, id(DISPID_IHTMLSTYLE3_LAYOUTFLOW), displaybind, bindable]\n    HRESULT layoutFlow([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_LAYOUTFLOW), displaybind, bindable]\n    HRESULT layoutFlow([retval, out] BSTR * p);\n\n    [propput, id(DISPID_IHTMLSTYLE3_ZOOM), displaybind, bindable]\n    HRESULT zoom([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_ZOOM), displaybind, bindable]\n    HRESULT zoom([retval, out] VARIANT * p);\n\n    [propput, id(DISPID_IHTMLSTYLE3_WORDWRAP), displaybind, bindable]\n    HRESULT wordWrap([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_WORDWRAP), displaybind, bindable]\n    HRESULT wordWrap([retval, out] BSTR * p);\n\n    [propput, id(DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION), displaybind, bindable]\n    HRESULT textUnderlinePosition([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION), displaybind, bindable]\n    HRESULT textUnderlinePosition([retval, out] BSTR * p);\n\n    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR), displaybind, bindable]\n    HRESULT scrollbarBaseColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR), displaybind, bindable]\n    HRESULT scrollbarBaseColor([retval, out] VARIANT * p);\n\n    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR), displaybind, bindable]\n    HRESULT scrollbarFaceColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR), displaybind, bindable]\n    HRESULT scrollbarFaceColor([retval, out] VARIANT * p);\n\n    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]\n    HRESULT scrollbar3dLightColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]\n    HRESULT scrollbar3dLightColor([retval, out] VARIANT * p);\n\n    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR), displaybind, bindable]\n    HRESULT scrollbarShadowColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR), displaybind, bindable]\n    HRESULT scrollbarShadowColor([retval, out] VARIANT * p);\n\n    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]\n    HRESULT scrollbarHighlightColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]\n    HRESULT scrollbarHighlightColor([retval, out] VARIANT * p);\n\n    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]\n    HRESULT scrollbarDarkShadowColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]\n    HRESULT scrollbarDarkShadowColor([retval, out] VARIANT * p);\n\n    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR), displaybind, bindable]\n    HRESULT scrollbarArrowColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR), displaybind, bindable]\n    HRESULT scrollbarArrowColor([retval, out] VARIANT * p);\n\n    [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR), displaybind, bindable]\n    HRESULT scrollbarTrackColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR), displaybind, bindable]\n    HRESULT scrollbarTrackColor([retval, out] VARIANT * p);\n\n    [propput, id(DISPID_IHTMLSTYLE3_WRITINGMODE), displaybind, bindable]\n    HRESULT writingMode([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_WRITINGMODE), displaybind, bindable]\n    HRESULT writingMode([retval, out] BSTR * p);\n\n    [propput, id(DISPID_IHTMLSTYLE3_TEXTALIGNLAST), displaybind, bindable]\n    HRESULT textAlignLast([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_TEXTALIGNLAST), displaybind, bindable]\n    HRESULT textAlignLast([retval, out] BSTR * p);\n\n    [propput, id(DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE), displaybind, bindable]\n    HRESULT textKashidaSpace([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE), displaybind, bindable]\n    HRESULT textKashidaSpace([retval, out] VARIANT * p);\n}\n\n/*****************************************************************************\n *    IHTMLSytyle4 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f816-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLStyle4 : IDispatch\n{\n    [propput, id(DISPID_IHTMLSTYLE4_TEXTOVERFLOW), displaybind, bindable]\n    HRESULT textOverflow([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE4_TEXTOVERFLOW), displaybind, bindable]\n    HRESULT textOverflow([retval, out] BSTR * p);\n\n    [propput, id(DISPID_IHTMLSTYLE4_MINHEIGHT), displaybind, bindable]\n    HRESULT minHeight([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE4_MINHEIGHT), displaybind, bindable]\n    HRESULT minHeight([retval, out] VARIANT * p);\n}\n\n/*****************************************************************************\n *    IHTMLSytyle5 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f33a-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLStyle5 : IDispatch\n{\n    [propput, id(DISPID_IHTMLSTYLE5_MSINTERPOLATIONMODE), displaybind, bindable]\n    HRESULT msInterpolationMode([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE5_MSINTERPOLATIONMODE), displaybind, bindable]\n    HRESULT msInterpolationMode([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE5_MAXHEIGHT), displaybind, bindable]\n    HRESULT maxHeight([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE5_MAXHEIGHT), displaybind, bindable]\n    HRESULT maxHeight([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE5_MINWIDTH), displaybind, bindable]\n    HRESULT minWidth([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE5_MINWIDTH), displaybind, bindable]\n    HRESULT minWidth([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE5_MAXWIDTH), displaybind, bindable]\n    HRESULT maxWidth([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE5_MAXWIDTH), displaybind, bindable]\n    HRESULT maxWidth([out, retval] VARIANT *p);\n}\n\n/*****************************************************************************\n *    IHTMLSytyle6 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(30510480-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLStyle6 : IDispatch\n{\n    [propput, id(DISPID_IHTMLSTYLE6_CONTENT), displaybind, bindable]\n    HRESULT content([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_CONTENT), displaybind, bindable]\n    HRESULT content([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE6_CAPTIONSIDE), displaybind, bindable]\n    HRESULT captionSide([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_CAPTIONSIDE), displaybind, bindable]\n    HRESULT captionSide([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE6_COUNTERINCREMENT), displaybind, bindable]\n    HRESULT counterIncrement([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_COUNTERINCREMENT), displaybind, bindable]\n    HRESULT counterIncrement([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE6_COUNTERRESET), displaybind, bindable]\n    HRESULT counterReset([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_COUNTERRESET), displaybind, bindable]\n    HRESULT counterReset([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE6_OUTLINE), displaybind, bindable]\n    HRESULT outline([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_OUTLINE), displaybind, bindable]\n    HRESULT outline([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE6_OUTLINEWIDTH), displaybind, bindable]\n    HRESULT outlineWidth([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_OUTLINEWIDTH), displaybind, bindable]\n    HRESULT outlineWidth([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE6_OUTLINESTYLE), displaybind, bindable]\n    HRESULT outlineStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_OUTLINESTYLE), displaybind, bindable]\n    HRESULT outlineStyle([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE6_OUTLINECOLOR), displaybind, bindable]\n    HRESULT outlineColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_OUTLINECOLOR), displaybind, bindable]\n    HRESULT outlineColor([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE6_BOXSIZING), displaybind, bindable]\n    HRESULT boxSizing([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_BOXSIZING), displaybind, bindable]\n    HRESULT boxSizing([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE6_BORDERSPACING), displaybind, bindable]\n    HRESULT borderSpacing([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_BORDERSPACING), displaybind, bindable]\n    HRESULT borderSpacing([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE6_ORPHANS), displaybind, bindable]\n    HRESULT orphans([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_ORPHANS), displaybind, bindable]\n    HRESULT orphans([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE6_WIDOWS), displaybind, bindable]\n    HRESULT widows([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_WIDOWS), displaybind, bindable]\n    HRESULT widows([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLE6_PAGEBREAKINSIDE), displaybind, bindable]\n    HRESULT pageBreakInside([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_PAGEBREAKINSIDE), displaybind, bindable]\n    HRESULT pageBreakInside([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE6_EMPTYCELLS), displaybind, bindable]\n    HRESULT emptyCells([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_EMPTYCELLS), displaybind, bindable]\n    HRESULT emptyCells([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE6_MSBLOCKPROGRESSION), displaybind, bindable]\n    HRESULT msBlockProgression([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_MSBLOCKPROGRESSION), displaybind, bindable]\n    HRESULT msBlockProgression([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLE6_QUOTES), displaybind, bindable]\n    HRESULT quotes([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLE6_QUOTES), displaybind, bindable]\n    HRESULT quotes([out, retval] BSTR *p);\n}\n\n[\n    noncreatable,\n    uuid(3050f285-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLStyle\n{\n    [default] dispinterface DispHTMLStyle;\n    interface IHTMLStyle;\n    interface IHTMLStyle2;\n    interface IHTMLStyle3;\n    interface IHTMLStyle4;\n    interface IHTMLStyle5;\n    interface IHTMLStyle6;\n}\n\n/*****************************************************************************\n *    IHTMLRenderStyle interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f6ae-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLRenderStyle : IDispatch\n{\n    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTLINETHROUGHSTYLE), displaybind, bindable]\n    HRESULT textLineThroughStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTLINETHROUGHSTYLE), displaybind, bindable]\n    HRESULT textLineThroughStyle([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTUNDERLINESTYLE), displaybind, bindable]\n    HRESULT textUnderlineStyle([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTUNDERLINESTYLE), displaybind, bindable]\n    HRESULT textUnderlineStyle([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTEFFECT), displaybind, bindable]\n    HRESULT textEffect([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTEFFECT), displaybind, bindable]\n    HRESULT textEffect([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTCOLOR), displaybind, bindable]\n    HRESULT textColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTCOLOR), displaybind, bindable]\n    HRESULT textColor([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTBACKGROUNDCOLOR), displaybind, bindable]\n    HRESULT textBackgroundColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTBACKGROUNDCOLOR), displaybind, bindable]\n    HRESULT textBackgroundColor([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTDECORATIONCOLOR), displaybind, bindable]\n    HRESULT textDecorationColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTDECORATIONCOLOR), displaybind, bindable]\n    HRESULT textDecorationColor([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLRENDERSTYLE_RENDERINGPRIORITY), displaybind, bindable]\n    HRESULT renderingPriority([in] LONG v);\n\n    [propget, id(DISPID_IHTMLRENDERSTYLE_RENDERINGPRIORITY), displaybind, bindable]\n    HRESULT renderingPriority([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLRENDERSTYLE_DEFAULTTEXTSELECTION), displaybind, bindable]\n    HRESULT defaultTextSelection([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRENDERSTYLE_DEFAULTTEXTSELECTION), displaybind, bindable]\n    HRESULT defaultTextSelection([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTDECORATION), displaybind, bindable]\n    HRESULT textDecoration([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTDECORATION), displaybind, bindable]\n    HRESULT textDecoration([retval, out] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLCurrentStyle interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f3db-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLCurrentStyle : IDispatch\n{\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_POSITION), displaybind, bindable]\n    HRESULT position([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_STYLEFLOAT), displaybind, bindable]\n    HRESULT styleFloat([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_COLOR), displaybind, bindable]\n    HRESULT color([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDCOLOR), displaybind, bindable]\n    HRESULT backgroundColor([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTFAMILY), displaybind, bindable]\n    HRESULT fontFamily([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTSTYLE), displaybind, bindable]\n    HRESULT fontStyle([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTVARIANT), displaybind, bindable, hidden]\n    HRESULT fontVariant([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTWEIGHT), displaybind, bindable]\n    HRESULT fontWeight([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTSIZE), displaybind, bindable]\n    HRESULT fontSize([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDIMAGE), displaybind, bindable]\n    HRESULT backgroundImage([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable]\n    HRESULT backgroundPositionX([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable]\n    HRESULT backgroundPositionY([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDREPEAT), displaybind, bindable]\n    HRESULT backgroundRepeat([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTCOLOR), displaybind, bindable]\n    HRESULT borderLeftColor([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPCOLOR), displaybind, bindable]\n    HRESULT borderTopColor([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTCOLOR), displaybind, bindable]\n    HRESULT borderRightColor([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable]\n    HRESULT borderBottomColor([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPSTYLE), displaybind, bindable]\n    HRESULT borderTopStyle([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTSTYLE), displaybind, bindable]\n    HRESULT borderRightStyle([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable]\n    HRESULT borderBottomStyle([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTSTYLE), displaybind, bindable]\n    HRESULT borderLeftStyle([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPWIDTH), displaybind, bindable]\n    HRESULT borderTopWidth([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTWIDTH), displaybind, bindable]\n    HRESULT borderRightWidth([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable]\n    HRESULT borderBottomWidth([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTWIDTH), displaybind, bindable]\n    HRESULT borderLeftWidth([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_LEFT), displaybind, bindable]\n    HRESULT left([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_TOP), displaybind, bindable]\n    HRESULT top([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_WIDTH), displaybind, bindable]\n    HRESULT width([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_HEIGHT), displaybind, bindable]\n    HRESULT height([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGLEFT), displaybind, bindable]\n    HRESULT paddingLeft([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGTOP), displaybind, bindable]\n    HRESULT paddingTop([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGRIGHT), displaybind, bindable]\n    HRESULT paddingRight([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGBOTTOM), displaybind, bindable]\n    HRESULT paddingBottom([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTALIGN), displaybind, bindable]\n    HRESULT textAlign([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTDECORATION), displaybind, bindable]\n    HRESULT textDecoration([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_DISPLAY), displaybind, bindable]\n    HRESULT display([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_VISIBILITY), displaybind, bindable]\n    HRESULT visibility([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_ZINDEX), displaybind, bindable]\n    HRESULT zIndex([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_LETTERSPACING), displaybind, bindable]\n    HRESULT letterSpacing([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_LINEHEIGHT), displaybind, bindable]\n    HRESULT lineHeight([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTINDENT), displaybind, bindable]\n    HRESULT textIndent([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_VERTICALALIGN), displaybind, bindable]\n    HRESULT verticalAlign([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable]\n    HRESULT backgroundAttachment([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINTOP), displaybind, bindable]\n    HRESULT marginTop([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINRIGHT), displaybind, bindable]\n    HRESULT marginRight([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINBOTTOM), displaybind, bindable]\n    HRESULT marginBottom([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINLEFT), displaybind, bindable]\n    HRESULT marginLeft([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLEAR), displaybind, bindable]\n    HRESULT clear([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLETYPE), displaybind, bindable]\n    HRESULT listStyleType([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLEPOSITION), displaybind, bindable]\n    HRESULT listStylePosition([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLEIMAGE), displaybind, bindable]\n    HRESULT listStyleImage([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPTOP), displaybind, bindable]\n    HRESULT clipTop([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPRIGHT), displaybind, bindable]\n    HRESULT clipRight([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPBOTTOM), displaybind, bindable]\n    HRESULT clipBottom([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPLEFT), displaybind, bindable]\n    HRESULT clipLeft([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOW), displaybind, bindable]\n    HRESULT overflow([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_PAGEBREAKBEFORE), displaybind, bindable]\n    HRESULT pageBreakBefore([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_PAGEBREAKAFTER), displaybind, bindable]\n    HRESULT pageBreakAfter([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_CURSOR), displaybind, bindable]\n    HRESULT cursor([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_TABLELAYOUT), displaybind, bindable]\n    HRESULT tableLayout([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERCOLLAPSE), displaybind, bindable]\n    HRESULT borderCollapse([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_DIRECTION), displaybind, bindable]\n    HRESULT direction([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BEHAVIOR), displaybind, bindable]\n    HRESULT behavior([retval, out] BSTR *p);\n\n    [id(DISPID_IHTMLCURRENTSTYLE_GETATTRIBUTE)]\n    HRESULT getAttribute(\n        [in] BSTR strAttributeName,\n        [defaultvalue(0), in] LONG lFlags,\n        [retval, out] VARIANT *AttributeValue);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_UNICODEBIDI), displaybind, bindable]\n    HRESULT unicodeBidi([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_RIGHT), displaybind, bindable]\n    HRESULT right([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BOTTOM), displaybind, bindable]\n    HRESULT bottom([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_IMEMODE), displaybind, bindable]\n    HRESULT imeMode([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYALIGN), displaybind, bindable]\n    HRESULT rubyAlign([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYPOSITION), displaybind, bindable]\n    HRESULT rubyPosition([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYOVERHANG), displaybind, bindable]\n    HRESULT rubyOverhang([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTAUTOSPACE), displaybind, bindable]\n    HRESULT textAutospace([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_LINEBREAK), displaybind, bindable]\n    HRESULT lineBreak([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_WORDBREAK), displaybind, bindable]\n    HRESULT wordBreak([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFY), displaybind, bindable]\n    HRESULT textJustify([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFYTRIM), displaybind, bindable]\n    HRESULT textJustifyTrim([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTKASHIDA), displaybind, bindable]\n    HRESULT textKashida([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BLOCKDIRECTION), displaybind, bindable]\n    HRESULT blockDirection([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDCHAR), displaybind, bindable]\n    HRESULT layoutGridChar([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDLINE), displaybind, bindable]\n    HRESULT layoutGridLine([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDMODE), displaybind, bindable]\n    HRESULT layoutGridMode([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDTYPE), displaybind, bindable]\n    HRESULT layoutGridType([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERSTYLE), displaybind, bindable]\n    HRESULT borderStyle([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERCOLOR), displaybind, bindable]\n    HRESULT borderColor([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERWIDTH), displaybind, bindable]\n    HRESULT borderWidth([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDING), displaybind, bindable]\n    HRESULT padding([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGIN), displaybind, bindable]\n    HRESULT margin([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_ACCELERATOR), displaybind, bindable]\n    HRESULT accelerator([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOWX), displaybind, bindable]\n    HRESULT overflowX([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOWY), displaybind, bindable]\n    HRESULT overflowY([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTTRANSFORM), displaybind, bindable]\n    HRESULT textTransform([retval, out] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLCurrentStyle2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f658-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLCurrentStyle2 : IDispatch\n{\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_LAYOUTFLOW), displaybind, bindable]\n    HRESULT layoutFlow([retval, out] BSTR * p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_WORDWRAP), displaybind, bindable]\n    HRESULT wordWrap([retval, out] BSTR * p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTUNDERLINEPOSITION), displaybind, bindable]\n    HRESULT textUnderlinePosition([retval, out] BSTR * p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_HASLAYOUT), displaybind, bindable]\n    HRESULT hasLayout([retval, out] VARIANT_BOOL * p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARBASECOLOR), displaybind, bindable]\n    HRESULT scrollbarBaseColor([retval, out] VARIANT * p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARFACECOLOR), displaybind, bindable]\n    HRESULT scrollbarFaceColor([retval, out] VARIANT * p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]\n    HRESULT scrollbar3dLightColor([retval, out] VARIANT * p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARSHADOWCOLOR), displaybind, bindable]\n    HRESULT scrollbarShadowColor([retval, out] VARIANT * p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]\n    HRESULT scrollbarHighlightColor([retval, out] VARIANT * p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]\n    HRESULT scrollbarDarkShadowColor([retval, out] VARIANT * p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARARROWCOLOR), displaybind, bindable]\n    HRESULT scrollbarArrowColor([retval, out] VARIANT * p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARTRACKCOLOR), displaybind, bindable]\n    HRESULT scrollbarTrackColor([retval, out] VARIANT * p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_WRITINGMODE), displaybind, bindable]\n    HRESULT writingMode([retval, out] BSTR * p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_ZOOM), displaybind, bindable]\n    HRESULT zoom([retval, out] VARIANT * p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_FILTER), displaybind, bindable]\n    HRESULT filter([retval, out] BSTR * p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTALIGNLAST), displaybind, bindable]\n    HRESULT textAlignLast([retval, out] BSTR * p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTKASHIDASPACE), displaybind, bindable]\n    HRESULT textKashidaSpace([retval, out] VARIANT * p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_ISBLOCK), displaybind, bindable, hidden, restricted, nonbrowsable]\n    HRESULT isBlock([retval, out] VARIANT_BOOL * p);\n}\n\n/*****************************************************************************\n *    IHTMLCurrentStyle3 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f818-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLCurrentStyle3 : IDispatch\n{\n    [propget, id(DISPID_IHTMLCURRENTSTYLE3_TEXTOVERFLOW), displaybind, bindable]\n    HRESULT textOverflow([retval, out] BSTR * p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE3_MINHEIGHT), displaybind, bindable]\n    HRESULT minHeight([retval, out] VARIANT * p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE3_WORDSPACING), displaybind, bindable]\n    HRESULT wordSpacing([retval, out] VARIANT * p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE3_WHITESPACE), displaybind, bindable]\n    HRESULT whiteSpace([retval, out] BSTR * p);\n}\n\n/*****************************************************************************\n *    IHTMLCurrentStyle4 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f33b-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLCurrentStyle4 : IDispatch\n{\n    [propget, id(DISPID_IHTMLCURRENTSTYLE4_MSINTERPOLATIONMODE), displaybind, bindable]\n    HRESULT msInterpolationMode([retval, out] BSTR * p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE4_MAXHEIGHT), displaybind, bindable]\n    HRESULT maxHeight([retval, out] VARIANT * p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE4_MINWIDTH), displaybind, bindable]\n    HRESULT minWidth([retval, out] VARIANT * p);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE4_MAXWIDTH), displaybind, bindable]\n    HRESULT maxWidth([retval, out] VARIANT * p);\n}\n\n/*****************************************************************************\n *    DispHTMLCurrentStyle dispinterface\n */\n[\n    hidden,\n    uuid(3050f557-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLCurrentStyle\n{\nproperties:\nmethods:\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_POSITION), displaybind, bindable]\n    BSTR position();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_STYLEFLOAT), displaybind, bindable]\n    BSTR styleFloat();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_COLOR), displaybind, bindable]\n    VARIANT color();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDCOLOR), displaybind, bindable]\n    VARIANT backgroundColor();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTFAMILY), displaybind, bindable]\n    BSTR fontFamily();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTSTYLE), displaybind, bindable]\n    BSTR fontStyle();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTVARIANT), displaybind, bindable, hidden]\n    BSTR fontVariant();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTWEIGHT), displaybind, bindable]\n    VARIANT fontWeight();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTSIZE), displaybind, bindable]\n    VARIANT fontSize();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDIMAGE), displaybind, bindable]\n    BSTR backgroundImage();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable]\n    VARIANT backgroundPositionX();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable]\n    VARIANT backgroundPositionY();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDREPEAT), displaybind, bindable]\n    BSTR backgroundRepeat();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTCOLOR), displaybind, bindable]\n    VARIANT borderLeftColor();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPCOLOR), displaybind, bindable]\n    VARIANT borderTopColor();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTCOLOR), displaybind, bindable]\n    VARIANT borderRightColor();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable]\n    VARIANT borderBottomColor();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPSTYLE), displaybind, bindable]\n    BSTR borderTopStyle();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTSTYLE), displaybind, bindable]\n    BSTR borderRightStyle();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable]\n    BSTR borderBottomStyle();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTSTYLE), displaybind, bindable]\n    BSTR borderLeftStyle();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPWIDTH), displaybind, bindable]\n    VARIANT borderTopWidth();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTWIDTH), displaybind, bindable]\n    VARIANT borderRightWidth();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable]\n    VARIANT borderBottomWidth();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTWIDTH), displaybind, bindable]\n    VARIANT borderLeftWidth();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_LEFT), displaybind, bindable]\n    VARIANT left();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_TOP), displaybind, bindable]\n    VARIANT top();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_WIDTH), displaybind, bindable]\n    VARIANT width();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_HEIGHT), displaybind, bindable]\n    VARIANT height();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGLEFT), displaybind, bindable]\n    VARIANT paddingLeft();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGTOP), displaybind, bindable]\n    VARIANT paddingTop();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGRIGHT), displaybind, bindable]\n    VARIANT paddingRight();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGBOTTOM), displaybind, bindable]\n    VARIANT paddingBottom();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTALIGN), displaybind, bindable]\n    BSTR textAlign();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTDECORATION), displaybind, bindable]\n    BSTR textDecoration();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_DISPLAY), displaybind, bindable]\n    BSTR display();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_VISIBILITY), displaybind, bindable]\n    BSTR visibility();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_ZINDEX), displaybind, bindable]\n    VARIANT zIndex();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_LETTERSPACING), displaybind, bindable]\n    VARIANT letterSpacing();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_LINEHEIGHT), displaybind, bindable]\n    VARIANT lineHeight();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTINDENT), displaybind, bindable]\n    VARIANT textIndent();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_VERTICALALIGN), displaybind, bindable]\n    VARIANT verticalAlign();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable]\n    BSTR backgroundAttachment();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINTOP), displaybind, bindable]\n    VARIANT marginTop();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINRIGHT), displaybind, bindable]\n    VARIANT marginRight();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINBOTTOM), displaybind, bindable]\n    VARIANT marginBottom();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINLEFT), displaybind, bindable]\n    VARIANT marginLeft();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLEAR), displaybind, bindable]\n    BSTR clear();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLETYPE), displaybind, bindable]\n    BSTR listStyleType();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLEPOSITION), displaybind, bindable]\n    BSTR listStylePosition();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLEIMAGE), displaybind, bindable]\n    BSTR listStyleImage();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPTOP), displaybind, bindable]\n    VARIANT clipTop();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPRIGHT), displaybind, bindable]\n    VARIANT clipRight();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPBOTTOM), displaybind, bindable]\n    VARIANT clipBottom();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPLEFT), displaybind, bindable]\n    VARIANT clipLeft();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOW), displaybind, bindable]\n    BSTR overflow();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_PAGEBREAKBEFORE), displaybind, bindable]\n    BSTR pageBreakBefore();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_PAGEBREAKAFTER), displaybind, bindable]\n    BSTR pageBreakAfter();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_CURSOR), displaybind, bindable]\n    BSTR cursor();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_TABLELAYOUT), displaybind, bindable]\n    BSTR tableLayout();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERCOLLAPSE), displaybind, bindable]\n    BSTR borderCollapse();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_DIRECTION), displaybind, bindable]\n    BSTR direction();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BEHAVIOR), displaybind, bindable]\n    BSTR behavior();\n\n    [id(DISPID_IHTMLCURRENTSTYLE_GETATTRIBUTE)]\n    VARIANT getAttribute(\n            [in] BSTR strAttributeName,\n            [in, defaultvalue(0)] LONG lFlags);\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_UNICODEBIDI), displaybind, bindable]\n    BSTR unicodeBidi();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_RIGHT), displaybind, bindable]\n    VARIANT right();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BOTTOM), displaybind, bindable]\n    VARIANT bottom();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_IMEMODE), displaybind, bindable]\n    BSTR imeMode();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYALIGN), displaybind, bindable]\n    BSTR rubyAlign();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYPOSITION), displaybind, bindable]\n    BSTR rubyPosition();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYOVERHANG), displaybind, bindable]\n    BSTR rubyOverhang();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTAUTOSPACE), displaybind, bindable]\n    BSTR textAutospace();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_LINEBREAK), displaybind, bindable]\n    BSTR lineBreak();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_WORDBREAK), displaybind, bindable]\n    BSTR wordBreak();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFY), displaybind, bindable]\n    BSTR textJustify();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFYTRIM), displaybind, bindable]\n    BSTR textJustifyTrim();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTKASHIDA), displaybind, bindable]\n    VARIANT textKashida();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BLOCKDIRECTION), displaybind, bindable]\n    BSTR blockDirection();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDCHAR), displaybind, bindable]\n    VARIANT layoutGridChar();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDLINE), displaybind, bindable]\n    VARIANT layoutGridLine();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDMODE), displaybind, bindable]\n    BSTR layoutGridMode();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDTYPE), displaybind, bindable]\n    BSTR layoutGridType();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERSTYLE), displaybind, bindable]\n    BSTR borderStyle();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERCOLOR), displaybind, bindable]\n    BSTR borderColor();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERWIDTH), displaybind, bindable]\n    BSTR borderWidth();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDING), displaybind, bindable]\n    BSTR padding();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGIN), displaybind, bindable]\n    BSTR margin();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_ACCELERATOR), displaybind, bindable]\n    BSTR accelerator();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOWX), displaybind, bindable]\n    BSTR overflowX();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOWY), displaybind, bindable]\n    BSTR overflowY();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTTRANSFORM), displaybind, bindable]\n    BSTR textTransform();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_LAYOUTFLOW), displaybind, bindable]\n    BSTR layoutFlow();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_WORDWRAP), displaybind, bindable]\n    BSTR wordWrap();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTUNDERLINEPOSITION), displaybind, bindable]\n    BSTR textUnderlinePosition();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_HASLAYOUT), displaybind, bindable]\n    VARIANT_BOOL hasLayout();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARBASECOLOR), displaybind, bindable]\n    VARIANT scrollbarBaseColor();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARFACECOLOR), displaybind, bindable]\n    VARIANT scrollbarFaceColor();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]\n    VARIANT scrollbar3dLightColor();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARSHADOWCOLOR), displaybind, bindable]\n    VARIANT scrollbarShadowColor();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]\n    VARIANT scrollbarHighlightColor();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]\n    VARIANT scrollbarDarkShadowColor();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARARROWCOLOR), displaybind, bindable]\n    VARIANT scrollbarArrowColor();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARTRACKCOLOR), displaybind, bindable]\n    VARIANT scrollbarTrackColor();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_WRITINGMODE), displaybind, bindable]\n    BSTR writingMode();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_ZOOM), displaybind, bindable]\n    VARIANT zoom();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_FILTER), displaybind, bindable]\n    BSTR filter();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTALIGNLAST), displaybind, bindable]\n    BSTR textAlignLast();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTKASHIDASPACE), displaybind, bindable]\n    VARIANT textKashidaSpace();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE2_ISBLOCK), displaybind, bindable, hidden, restricted, nonbrowsable]\n    VARIANT_BOOL isBlock();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE3_TEXTOVERFLOW), displaybind, bindable]\n    BSTR textOverflow();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE3_MINHEIGHT), displaybind, bindable]\n    VARIANT minHeight();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE3_WORDSPACING), displaybind, bindable]\n    VARIANT wordSpacing();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE3_WHITESPACE), displaybind, bindable]\n    BSTR whiteSpace();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE4_MSINTERPOLATIONMODE), displaybind, bindable]\n    BSTR msInterpolationMode();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE4_MAXHEIGHT), displaybind, bindable]\n    VARIANT maxHeight();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE4_MINWIDTH), displaybind, bindable]\n    VARIANT minWidth();\n\n    [propget, id(DISPID_IHTMLCURRENTSTYLE4_MAXWIDTH), displaybind, bindable]\n    VARIANT maxWidth();\n}\n\n[\n    noncreatable,\n    uuid(3050f3dc-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLCurrentStyle\n{\n    [default] dispinterface DispHTMLCurrentStyle;\n    interface IHTMLCurrentStyle;\n    interface IHTMLCurrentStyle2;\n    interface IHTMLCurrentStyle3;\n    interface IHTMLCurrentStyle4;\n}\n\n/*****************************************************************************\n *    IHTMLRect interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f4a3-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLRect : IDispatch\n{\n    [propput, id(DISPID_IHTMLRECT_LEFT)]\n    HRESULT left([in] LONG v);\n\n    [propget, id(DISPID_IHTMLRECT_LEFT)]\n    HRESULT left([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLRECT_TOP)]\n    HRESULT top([in] LONG v);\n\n    [propget, id(DISPID_IHTMLRECT_TOP)]\n    HRESULT top([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLRECT_RIGHT)]\n    HRESULT right([in] LONG v);\n\n    [propget, id(DISPID_IHTMLRECT_RIGHT)]\n    HRESULT right([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLRECT_BOTTOM)]\n    HRESULT bottom([in] LONG v);\n\n    [propget, id(DISPID_IHTMLRECT_BOTTOM)]\n    HRESULT bottom([retval, out] LONG *p);\n}\n\n/*****************************************************************************\n *    IHTMLRectCollection interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f4a4-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLRectCollection : IDispatch\n{\n    [propget, id(DISPID_IHTMLRECTCOLLECTION_LENGTH)]\n    HRESULT length([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLRECTCOLLECTION__NEWENUM), hidden, restricted]\n    HRESULT _newEnum([retval, out] IUnknown **p);\n\n    [id(DISPID_IHTMLRECTCOLLECTION_ITEM)]\n    HRESULT item(\n        [in] VARIANT *pvarIndex,\n        [retval, out] VARIANT *pvarResult);\n}\n\n/*****************************************************************************\n *    IHTMLDOMNode interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f5da-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLDOMNode : IDispatch\n{\n    [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)]\n    HRESULT nodeType([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)]\n    HRESULT parentNode([retval, out] IHTMLDOMNode **p);\n\n    [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)]\n    HRESULT hasChildNodes([retval, out] VARIANT_BOOL *fChildren);\n\n    [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)]\n    HRESULT childNodes([retval, out] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)]\n    HRESULT attributes([retval, out] IDispatch **p);\n\n    [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)]\n    HRESULT insertBefore(\n        [in] IHTMLDOMNode *newChild,\n        [optional, in] VARIANT refChild,\n        [retval, out] IHTMLDOMNode **node);\n\n    [id(DISPID_IHTMLDOMNODE_REMOVECHILD)]\n    HRESULT removeChild(\n        [in] IHTMLDOMNode *oldChild,\n        [retval, out] IHTMLDOMNode **node);\n\n    [id(DISPID_IHTMLDOMNODE_REPLACECHILD)]\n    HRESULT replaceChild(\n        [in] IHTMLDOMNode *newChild,\n        [in] IHTMLDOMNode *oldChild,\n        [retval, out] IHTMLDOMNode **node);\n\n    [id(DISPID_IHTMLDOMNODE_CLONENODE)]\n    HRESULT cloneNode(\n        [in] VARIANT_BOOL fDeep,\n        [retval, out] IHTMLDOMNode **clonedNode);\n\n    [id(DISPID_IHTMLDOMNODE_REMOVENODE)]\n    HRESULT removeNode(\n        [defaultvalue(0), in] VARIANT_BOOL fDeep,\n        [retval, out] IHTMLDOMNode **removed);\n\n    [id(DISPID_IHTMLDOMNODE_SWAPNODE)]\n    HRESULT swapNode(\n        [in] IHTMLDOMNode *otherNode,\n        [retval, out] IHTMLDOMNode **swappedNode);\n\n    [id(DISPID_IHTMLDOMNODE_REPLACENODE)]\n    HRESULT replaceNode(\n        [in] IHTMLDOMNode *replacement,\n        [retval, out] IHTMLDOMNode **replaced);\n\n    [id(DISPID_IHTMLDOMNODE_APPENDCHILD)]\n    HRESULT appendChild(\n        [in] IHTMLDOMNode *newChild,\n        [retval, out] IHTMLDOMNode **node);\n\n    [propget, id(DISPID_IHTMLDOMNODE_NODENAME)]\n    HRESULT nodeName([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)]\n    HRESULT nodeValue([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)]\n    HRESULT nodeValue([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)]\n    HRESULT firstChild([retval, out] IHTMLDOMNode **p);\n\n    [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)]\n    HRESULT lastChild([retval, out] IHTMLDOMNode **p);\n\n    [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)]\n    HRESULT previousSibling([retval, out] IHTMLDOMNode **p);\n\n    [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)]\n    HRESULT nextSibling([retval, out] IHTMLDOMNode **p);\n}\n\n#define WINE_IHTMLDOMNODE_DISPINTERFACE_DECL                            \\\n    [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)]                         \\\n    LONG nodeType();                                                    \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)]                       \\\n    IHTMLDOMNode* parentNode();                                         \\\n                                                                        \\\n    [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)]                             \\\n    VARIANT_BOOL hasChildNodes();                                       \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)]                       \\\n    IDispatch* childNodes();                                            \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)]                       \\\n    IDispatch* attributes();                                            \\\n                                                                        \\\n    [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)]                              \\\n    IHTMLDOMNode* insertBefore(                                         \\\n            [in] IHTMLDOMNode* newChild,                                \\\n            [optional, in] VARIANT refChild);                           \\\n                                                                        \\\n    [id(DISPID_IHTMLDOMNODE_REMOVECHILD)]                               \\\n    IHTMLDOMNode* removeChild([in] IHTMLDOMNode* oldChild);             \\\n                                                                        \\\n    [id(DISPID_IHTMLDOMNODE_REPLACECHILD)]                              \\\n    IHTMLDOMNode* replaceChild(                                         \\\n        [in] IHTMLDOMNode* newChild,                                    \\\n        [in] IHTMLDOMNode* oldChild);                                   \\\n                                                                        \\\n    [id(DISPID_IHTMLDOMNODE_CLONENODE)]                                 \\\n    IHTMLDOMNode* cloneNode([in] VARIANT_BOOL fDeep);                   \\\n                                                                        \\\n    [id(DISPID_IHTMLDOMNODE_REMOVENODE)]                                \\\n    IHTMLDOMNode* removeNode([defaultvalue(0), in] VARIANT_BOOL fDeep); \\\n                                                                        \\\n    [id(DISPID_IHTMLDOMNODE_SWAPNODE)]                                  \\\n    IHTMLDOMNode* swapNode([in] IHTMLDOMNode* otherNode);               \\\n                                                                        \\\n    [id(DISPID_IHTMLDOMNODE_REPLACENODE)]                               \\\n    IHTMLDOMNode* replaceNode([in] IHTMLDOMNode* replacement);          \\\n                                                                        \\\n    [id(DISPID_IHTMLDOMNODE_APPENDCHILD)]                               \\\n    IHTMLDOMNode* appendChild([in] IHTMLDOMNode* newChild);             \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLDOMNODE_NODENAME)]                         \\\n    BSTR nodeName();                                                    \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)]                        \\\n    void nodeValue(VARIANT v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)]                        \\\n    VARIANT nodeValue();                                                \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)]                       \\\n    IHTMLDOMNode* firstChild();                                         \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)]                        \\\n    IHTMLDOMNode* lastChild();                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)]                  \\\n    IHTMLDOMNode* previousSibling();                                    \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)]                      \\\n    IHTMLDOMNode* nextSibling()\n\n/*****************************************************************************\n *    IHTMLDOMNode2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f80b-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLDOMNode2 : IDispatch\n{\n    [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)]\n    HRESULT ownerDocument([retval, out] IDispatch **p);\n}\n\n#define WINE_IHTMLDOMNODE2_DISPINTERFACE_DECL           \\\n    [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)]   \\\n    IDispatch *ownerDocument()\n\n#define WINE_HTMLDOMNODE_DISPINTERFACE_DECL     \\\n    WINE_IHTMLDOMNODE_DISPINTERFACE_DECL;       \\\n    WINE_IHTMLDOMNODE2_DISPINTERFACE_DECL\n\n/*****************************************************************************\n *    IHTMLDOMNode3 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(305106e0-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLDOMNode3 : IDispatch\n{\n    [propput, id(DISPID_IHTMLDOMNODE3_PREFIX)]\n    HRESULT prefix([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOMNODE3_PREFIX)]\n    HRESULT prefix([out, retval] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLDOMNODE3_LOCALNAME)]\n    HRESULT localName([out, retval] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLDOMNODE3_NAMESPACEURI)]\n    HRESULT namespaceURI([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOMNODE3_TEXTCONTENT)]\n    HRESULT textContent([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOMNODE3_TEXTCONTENT)]\n    HRESULT textContent([out, retval] VARIANT *p);\n\n    [id(DISPID_IHTMLDOMNODE3_ISEQUALNODE)]\n    HRESULT isEqualNode(\n        [in] IHTMLDOMNode3 *otherNode,\n        [out, retval] VARIANT_BOOL *isEqual);\n\n    [id(DISPID_IHTMLDOMNODE3_LOOKUPNAMESPACEURI)]\n    HRESULT lookupNamespaceURI(\n        [in] VARIANT *pvarPrefix,\n        [out, retval] VARIANT *pvarNamespaceURI);\n\n    [id(DISPID_IHTMLDOMNODE3_LOOKUPPREFIX)]\n    HRESULT lookupPrefix(\n       [in] VARIANT *pvarNamespaceURI,\n       [out, retval] VARIANT *pvarPrefix);\n\n    [id(DISPID_IHTMLDOMNODE3_ISDEFAULTNAMESPACE)]\n    HRESULT isDefaultNamespace(\n        [in] VARIANT *pvarNamespace,\n        [out, retval] VARIANT_BOOL *pfDefaultNamespace);\n\n    [id(DISPID_IHTMLDOMNODE3_IE9_APPENDCHILD)]\n    HRESULT appendChild(\n        [in] IHTMLDOMNode *newChild,\n        [out, retval] IHTMLDOMNode **node);\n\n    [id(DISPID_IHTMLDOMNODE3_IE9_INSERTBEFORE)]\n    HRESULT insertBefore(\n        [in] IHTMLDOMNode *newChild,\n        [in, optional] VARIANT refChild,\n        [out, retval] IHTMLDOMNode **node);\n\n    [id(DISPID_IHTMLDOMNODE3_IE9_REMOVECHILD)]\n    HRESULT removeChild(\n        [in] IHTMLDOMNode *oldChild,\n        [out, retval] IHTMLDOMNode **node);\n\n    [id(DISPID_IHTMLDOMNODE3_IE9_REPLACECHILD)]\n    HRESULT replaceChild(\n        [in] IHTMLDOMNode *newChild,\n        [in] IHTMLDOMNode *oldChild,\n        [out, retval] IHTMLDOMNode **node);\n\n    [id(DISPID_IHTMLDOMNODE3_ISSAMENODE)]\n    HRESULT isSameNode(\n        [in] IHTMLDOMNode3 *otherNode,\n        [out, retval] VARIANT_BOOL *isSame);\n\n    [id(DISPID_IHTMLDOMNODE3_COMPAREDOCUMENTPOSITION)]\n    HRESULT compareDocumentPosition(\n        [in] IHTMLDOMNode *otherNode,\n        [out, retval] USHORT *flags);\n\n    [id(DISPID_IHTMLDOMNODE3_ISSUPPORTED)]\n    HRESULT isSupported(\n        [in] BSTR feature,\n        [in] VARIANT version,\n        [out, retval] VARIANT_BOOL *pfisSupported);\n}\n\n/*****************************************************************************\n *    IHTMLDOMAttribute interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f4b0-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLDOMAttribute : IDispatch\n{\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE_NODENAME)]\n    HRESULT nodeName([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLDOMATTRIBUTE_NODEVALUE)]\n    HRESULT nodeValue([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE_NODEVALUE)]\n    HRESULT nodeValue([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE_SPECIFIED)]\n    HRESULT specified([retval, out] VARIANT_BOOL *p);\n}\n\n/*****************************************************************************\n *    IHTMLDOMAttribute2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f810-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLDOMAttribute2 : IDispatch\n{\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NAME)]\n    HRESULT name([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLDOMATTRIBUTE2_VALUE)]\n    HRESULT value([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_VALUE)]\n    HRESULT value([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_EXPANDO)]\n    HRESULT expando([retval, out] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NODETYPE)]\n    HRESULT nodeType([retval, out] long *p);\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_PARENTNODE)]\n    HRESULT parentNode([retval, out] IHTMLDOMNode **p);\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_CHILDNODES)]\n    HRESULT childNodes([retval, out] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_FIRSTCHILD)]\n    HRESULT firstChild([retval, out] IHTMLDOMNode **p);\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_LASTCHILD)]\n    HRESULT lastChild([retval, out] IHTMLDOMNode **p);\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_PREVIOUSSIBLING)]\n    HRESULT previousSibling([retval, out] IHTMLDOMNode **p);\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NEXTSIBLING)]\n    HRESULT nextSibling([retval, out] IHTMLDOMNode **p);\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_ATTRIBUTES)]\n    HRESULT attributes([retval, out] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_OWNERDOCUMENT)]\n    HRESULT ownerDocument([retval, out] IDispatch **p);\n\n    [id(DISPID_IHTMLDOMATTRIBUTE2_INSERTBEFORE)]\n    HRESULT insertBefore(\n            [in] IHTMLDOMNode *newChild,\n            [optional, in] VARIANT refChild,\n            [retval, out] IHTMLDOMNode **node);\n\n    [id(DISPID_IHTMLDOMATTRIBUTE2_REPLACECHILD)]\n    HRESULT replaceChild(\n            [in] IHTMLDOMNode *newChild,\n            [in] IHTMLDOMNode *oldChild,\n            [retval, out] IHTMLDOMNode **node);\n\n    [id(DISPID_IHTMLDOMATTRIBUTE2_REMOVECHILD)]\n    HRESULT removeChild(\n            [in] IHTMLDOMNode *oldChild,\n            [retval, out] IHTMLDOMNode **node);\n\n    [id(DISPID_IHTMLDOMATTRIBUTE2_APPENDCHILD)]\n    HRESULT appendChild(\n            [in] IHTMLDOMNode *newChild,\n            [retval, out] IHTMLDOMNode **node);\n\n    [id(DISPID_IHTMLDOMATTRIBUTE2_HASCHILDNODES)]\n    HRESULT hasChildNodes([retval, out] VARIANT_BOOL *fChildren);\n\n    [id(DISPID_IHTMLDOMATTRIBUTE2_CLONENODE)]\n    HRESULT cloneNode(\n            [in] VARIANT_BOOL fDeep,\n            [retval, out] IHTMLDOMAttribute **clonedNode);\n}\n\n/*****************************************************************************\n *    IHTMLDOMTextNode interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f4b1-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLDOMTextNode : IDispatch\n{\n    [propput, id(DISPID_IHTMLDOMTEXTNODE_DATA)]\n    HRESULT data([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLDOMTEXTNODE_DATA)]\n    HRESULT data([out, retval] BSTR *p);\n\n    [id(DISPID_IHTMLDOMTEXTNODE_TOSTRING)]\n    HRESULT toString([out, retval] BSTR *String);\n\n    [propget, id(DISPID_IHTMLDOMTEXTNODE_LENGTH)]\n    HRESULT length([out, retval] LONG *p);\n\n    [id(DISPID_IHTMLDOMTEXTNODE_SPLITTEXT)]\n    HRESULT splitText(\n            [in] LONG offset,\n            [out, retval] IHTMLDOMNode **pRetNode);\n}\n\n/*****************************************************************************\n *    IHTMLDOMTextNode2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f809-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLDOMTextNode2 : IDispatch\n{\n    [id(DISPID_IHTMLDOMTEXTNODE2_SUBSTRINGDATA)]\n    HRESULT substringData([in] LONG offset,[in] LONG Count,[retval, out] BSTR* pbstrsubString);\n\n    [id(DISPID_IHTMLDOMTEXTNODE2_APPENDDATA)]\n    HRESULT appendData([in] BSTR bstrstring);\n\n    [id(DISPID_IHTMLDOMTEXTNODE2_INSERTDATA)]\n    HRESULT insertData([in] LONG offset,[in] BSTR bstrstring);\n\n    [id(DISPID_IHTMLDOMTEXTNODE2_DELETEDATA)]\n    HRESULT deleteData([in] LONG offset,[in] LONG Count);\n\n    [id(DISPID_IHTMLDOMTEXTNODE2_REPLACEDATA)]\n    HRESULT replaceData([in] LONG offset,[in] LONG Count,[in] BSTR bstrstring);\n}\n\n[\n    noncreatable,\n    uuid(3050f4ba-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLDOMTextNode\n{\n    [default]           dispinterface DispHTMLDOMTextNode;\n                        interface IHTMLDOMTextNode;\n                        interface IHTMLDOMTextNode2;\n                        interface IHTMLDOMNode;\n                        interface IHTMLDOMNode2;\n}\n\n/*****************************************************************************\n *    IHTMLDOMImplementation interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f80d-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLDOMImplementation : IDispatch\n{\n    [id(DISPID_IHTMLDOMIMPLEMENTATION_HASFEATURE)]\n    HRESULT hasFeature(\n        [in] BSTR bstrfeature,\n        [optional, in] VARIANT version,\n        [retval, out] VARIANT_BOOL *pfHasFeature);\n}\n\n/*****************************************************************************\n *    DispHTMLDOMAttribute dispinterface\n */\n[\n    hidden,\n    uuid(3050f564-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLDOMAttribute\n{\n properties:\n    methods:\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE_NODENAME)]\n    BSTR nodeName();\n\n    [propput, id(DISPID_IHTMLDOMATTRIBUTE_NODEVALUE)]\n    void nodeValue(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE_NODEVALUE)]\n    VARIANT nodeValue();\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE_SPECIFIED)]\n    VARIANT_BOOL specified();\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NAME)]\n    BSTR name();\n\n    [propput, id(DISPID_IHTMLDOMATTRIBUTE2_VALUE)]\n    void value(BSTR v);\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_VALUE)]\n    BSTR value();\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_EXPANDO)]\n    VARIANT_BOOL expando();\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NODETYPE)]\n    long nodeType();\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_PARENTNODE)]\n    IHTMLDOMNode *parentNode();\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_CHILDNODES)]\n    IDispatch *childNodes();\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_FIRSTCHILD)]\n    IHTMLDOMNode *firstChild();\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_LASTCHILD)]\n    IHTMLDOMNode *lastChild();\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_PREVIOUSSIBLING)]\n    IHTMLDOMNode *previousSibling();\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NEXTSIBLING)]\n    IHTMLDOMNode *nextSibling();\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_ATTRIBUTES)]\n    IDispatch *attributes();\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE2_OWNERDOCUMENT)]\n    IDispatch *ownerDocument();\n\n    [id(DISPID_IHTMLDOMATTRIBUTE2_INSERTBEFORE)]\n    IHTMLDOMNode *insertBefore(\n            [in] IHTMLDOMNode *newChild,\n            [optional, in] VARIANT refChild);\n\n    [id(DISPID_IHTMLDOMATTRIBUTE2_REPLACECHILD)]\n    IHTMLDOMNode *replaceChild(\n            [in] IHTMLDOMNode *newChild,\n            [in] IHTMLDOMNode *oldChild);\n\n    [id(DISPID_IHTMLDOMATTRIBUTE2_REMOVECHILD)]\n    IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild);\n\n    [id(DISPID_IHTMLDOMATTRIBUTE2_APPENDCHILD)]\n    IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild);\n\n    [id(DISPID_IHTMLDOMATTRIBUTE2_HASCHILDNODES)]\n    VARIANT_BOOL hasChildNodes();\n\n    [id(DISPID_IHTMLDOMATTRIBUTE2_CLONENODE)]\n    IHTMLDOMAttribute *cloneNode([in] VARIANT_BOOL fDeep);\n\n    [propput, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_NODEVALUE)]\n    void ie8_nodeValue(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_NODEVALUE)]\n    VARIANT ie8_nodeValue();\n\n    [propput, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_VALUE)]\n    void ie8_value(BSTR v);\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_VALUE)]\n    BSTR ie8_value();\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_SPECIFIED)]\n    VARIANT_BOOL ie8_specified();\n\n    [propget, id(DISPID_IHTMLDOMATTRIBUTE3_OWNERELEMENT)]\n    IHTMLElement2 *ownerElement();\n\n    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;\n}\n\n/*****************************************************************************\n *    IHTMLDocumentCompatibleInfo interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3051041a-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLDocumentCompatibleInfo : IDispatch\n{\n    [propget, id(DISPID_IHTMLDOCUMENTCOMPATIBLEINFO_USERAGENT)]\n    HRESULT userAgent([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLDOCUMENTCOMPATIBLEINFO_VERSION)]\n    HRESULT version([retval, out] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLDocumentCompatibleInfoCollection interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(30510418-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLDocumentCompatibleInfoCollection : IDispatch\n{\n    [propget, id(DISPID_IHTMLDOCUMENTCOMPATIBLEINFOCOLLECTION_LENGTH)]\n    HRESULT length([retval, out] long *p);\n\n    [id(DISPID_IHTMLDOCUMENTCOMPATIBLEINFOCOLLECTION_ITEM)]\n    HRESULT item([in] long i, [retval, out]IHTMLDocumentCompatibleInfo **p);\n}\n\n/*****************************************************************************\n *    DispHTMLDOMTextNode dispinterface\n */\n[\n    hidden,\n    uuid(3050f565-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLDOMTextNode\n{\nproperties:\nmethods:\n    [propput, id(DISPID_IHTMLDOMTEXTNODE_DATA)]\n    void data(BSTR v);\n\n    [propget, id(DISPID_IHTMLDOMTEXTNODE_DATA)]\n    BSTR data();\n\n    [id(DISPID_IHTMLDOMTEXTNODE_TOSTRING)]\n    BSTR toString();\n\n    [propget, id(DISPID_IHTMLDOMTEXTNODE_LENGTH)]\n    LONG length();\n\n    [id(DISPID_IHTMLDOMTEXTNODE_SPLITTEXT)]\n    IHTMLDOMNode *splitText([in] LONG offset);\n\n    [id(DISPID_IHTMLDOMTEXTNODE2_SUBSTRINGDATA)]\n    BSTR substringData(\n            [in] LONG offset,\n            [in] LONG Count);\n\n    [id(DISPID_IHTMLDOMTEXTNODE2_APPENDDATA)]\n    void appendData([in] BSTR bstrstring);\n\n    [id(DISPID_IHTMLDOMTEXTNODE2_INSERTDATA)]\n    void insertData(\n            [in] LONG offset,\n            [in] BSTR bstrstring);\n\n    [id(DISPID_IHTMLDOMTEXTNODE2_DELETEDATA)]\n    void deleteData(\n            [in] LONG offset,\n            [in] LONG Count);\n\n    [id(DISPID_IHTMLDOMTEXTNODE2_REPLACEDATA)]\n    void replaceData(\n            [in] LONG offset,\n            [in] LONG Count,\n            [in] BSTR bstrstring);\n\n    WINE_HTMLDOMNODE_DISPINTERFACE_DECL;\n}\n\n/*****************************************************************************\n *    IHTMLAttributeCollection interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f4c3-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLAttributeCollection : IDispatch\n{\n    [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION_LENGTH)]\n    HRESULT length(\n            [retval, out] long *p);\n\n    [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION__NEWENUM), hidden, restricted]\n    HRESULT _newEnum(\n            [retval, out] IUnknown **p);\n\n    [id(DISPID_IHTMLATTRIBUTECOLLECTION_ITEM)]\n    HRESULT item(\n            [optional, in] VARIANT *name,\n            [retval, out] IDispatch **pdisp);\n}\n\n/*****************************************************************************\n *    IHTMLAttributeCollection2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f80a-98b5-11cf-bb82-00aa00bdce0b)\n    ]\ninterface IHTMLAttributeCollection2 : IDispatch\n{\n    [id(DISPID_IHTMLATTRIBUTECOLLECTION2_GETNAMEDITEM)]\n    HRESULT getNamedItem(\n            [in] BSTR bstrName,\n            [retval, out] IHTMLDOMAttribute **newretNode);\n\n    [id(DISPID_IHTMLATTRIBUTECOLLECTION2_SETNAMEDITEM)]\n    HRESULT setNamedItem(\n            [in] IHTMLDOMAttribute *ppNode,\n            [retval, out] IHTMLDOMAttribute **newretNode);\n\n    [id(DISPID_IHTMLATTRIBUTECOLLECTION2_REMOVENAMEDITEM)]\n    HRESULT removeNamedItem(\n            [in] BSTR bstrName,\n            [retval, out] IHTMLDOMAttribute **newretNode);\n}\n\n/*****************************************************************************\n *    IHTMLAttributeCollection3 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(30510469-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLAttributeCollection3 : IDispatch\n{\n    [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_GETNAMEDITEM)]\n    HRESULT getNamedItem(\n            [in] BSTR bstrName,\n            [retval, out] IHTMLDOMAttribute **ppNodeOut);\n\n    [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_SETNAMEDITEM)]\n    HRESULT setNamedItem(\n            [in] IHTMLDOMAttribute *pNodeIn,\n            [retval, out] IHTMLDOMAttribute **ppNodeOut);\n\n    [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_REMOVENAMEDITEM)]\n    HRESULT removeNamedItem(\n            [in] BSTR bstrName,\n            [retval, out] IHTMLDOMAttribute **ppNodeOut);\n\n    [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_ITEM)]\n    HRESULT item(\n            [in] long index,\n            [retval, out] IHTMLDOMAttribute **ppNodeOut);\n\n    [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_LENGTH)]\n    HRESULT length([retval, out] long *p);\n}\n\n/*****************************************************************************\n *    DispHTMLAttributeCollection dispinterface\n */\n[\n    hidden,\n    uuid(3050f56c-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLAttributeCollection\n{\nproperties:\nmethods:\n    [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION_LENGTH)]\n    long length();\n\n    [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION__NEWENUM), hidden, restricted]\n    IUnknown *_newEnum();\n\n    [id(DISPID_IHTMLATTRIBUTECOLLECTION_ITEM)]\n    IDispatch *item([optional, in] VARIANT *name);\n\n    [id(DISPID_IHTMLATTRIBUTECOLLECTION2_GETNAMEDITEM)]\n    IHTMLDOMAttribute *getNamedItem([in] BSTR bstrName);\n\n    [id(DISPID_IHTMLATTRIBUTECOLLECTION2_SETNAMEDITEM)]\n    IHTMLDOMAttribute *setNamedItem([in] IHTMLDOMAttribute *ppNode);\n\n    [id(DISPID_IHTMLATTRIBUTECOLLECTION2_REMOVENAMEDITEM)]\n    IHTMLDOMAttribute *removeNamedItem([in] BSTR bstrName);\n\n    [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_GETNAMEDITEM)]\n    IHTMLDOMAttribute *ie8_getNamedItem([in] BSTR bstrName);\n\n    [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_SETNAMEDITEM)]\n    IHTMLDOMAttribute *ie8_setNamedItem([in] IHTMLDOMAttribute *pNodeIn);\n\n    [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_REMOVENAMEDITEM)]\n    IHTMLDOMAttribute *ie8_removeNamedItem([in] BSTR bstrName);\n\n    [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_ITEM)]\n    IHTMLDOMAttribute *ie8_item([in] long index);\n\n    [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_LENGTH)]\n    long ie8_length();\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]\n    IDispatch *constructor();\n}\n\n/*****************************************************************************\n *    IHTMLDOMChildrenCollection interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f5ab-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLDOMChildrenCollection : IDispatch\n{\n    [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION_LENGTH)]\n    HRESULT length([out, retval] LONG *p);\n\n    [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION__NEWENUM), hidden, restricted]\n    HRESULT _newEnum([out, retval] IUnknown **p);\n\n    [id(DISPID_IHTMLDOMCHILDRENCOLLECTION_ITEM)]\n    HRESULT item(\n            [in] LONG index,\n            [out, retval] IDispatch **ppItem);\n}\n\n/*****************************************************************************\n *    DispDOMChildrenCollection dispinterface\n */\n[\n    hidden,\n    uuid(3050f577-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispDOMChildrenCollection\n{\nproperties:\nmethods:\n    [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION_LENGTH)]\n    LONG length();\n\n    [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION__NEWENUM), hidden, restricted]\n    IUnknown *_newEnum();\n\n    [id(DISPID_IHTMLDOMCHILDRENCOLLECTION_ITEM)]\n    IDispatch *item([in] LONG index);\n}\n\ninterface IHTMLElementCollection;\n\n/*****************************************************************************\n *    IHTMLElement interface\n */\n[\n    odl,\n    dual,\n    oleautomation,\n    uuid(3050f1FF-98B5-11CF-BB82-00AA00BDCE0B)\n]\ninterface IHTMLElement : IDispatch\n{\n    [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)]\n    HRESULT setAttribute(\n        [in] BSTR strAttributeName,\n        [in] VARIANT AttributeValue,\n        [defaultvalue(1), in] LONG lFlags);\n\n    [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)]\n    HRESULT getAttribute(\n        [in] BSTR strAttributeName,\n        [defaultvalue(0), in] LONG lFlags,\n        [retval, out] VARIANT *AttributeValue);\n\n    [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)]\n    HRESULT removeAttribute(\n        [in] BSTR strAttributeName,\n        [defaultvalue(1), in] LONG lFlags,\n        [retval, out] VARIANT_BOOL *pfSuccess);\n\n    [propput, id(DISPID_IHTMLELEMENT_CLASSNAME)]\n    HRESULT className([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLELEMENT_CLASSNAME)]\n    HRESULT className([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_ID)]\n    HRESULT id([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLELEMENT_ID)]\n    HRESULT id([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLELEMENT_TAGNAME)]\n    HRESULT tagName([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)]\n    HRESULT parentElement([retval, out] IHTMLElement **p);\n\n    [propget, id(DISPID_IHTMLELEMENT_STYLE)]\n    HRESULT style([retval, out] IHTMLStyle **p);\n\n    [propput, id(DISPID_IHTMLELEMENT_ONHELP)]\n    HRESULT onhelp([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT_ONHELP)]\n    HRESULT onhelp([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_ONCLICK)]\n    HRESULT onclick([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT_ONCLICK)]\n    HRESULT onclick([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK)]\n    HRESULT ondblclick([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK)]\n    HRESULT ondblclick([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN)]\n    HRESULT onkeydown([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN)]\n    HRESULT onkeydown([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_ONKEYUP)]\n    HRESULT onkeyup([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT_ONKEYUP)]\n    HRESULT onkeyup([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS)]\n    HRESULT onkeypress([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS)]\n    HRESULT onkeypress([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT)]\n    HRESULT onmouseout([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT)]\n    HRESULT onmouseout([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER)]\n    HRESULT onmouseover([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER)]\n    HRESULT onmouseover([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE)]\n    HRESULT onmousemove([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE)]\n    HRESULT onmousemove([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN)]\n    HRESULT onmousedown([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN)]\n    HRESULT onmousedown([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP)]\n    HRESULT onmouseup([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP)]\n    HRESULT onmouseup([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)]\n    HRESULT document([retval, out] IDispatch **p);\n\n    [propput, id(DISPID_IHTMLELEMENT_TITLE)]\n    HRESULT title([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLELEMENT_TITLE)]\n    HRESULT title([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_LANGUAGE)]\n    HRESULT language([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLELEMENT_LANGUAGE)]\n    HRESULT language([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART)]\n    HRESULT onselectstart([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART)]\n    HRESULT onselectstart([retval, out] VARIANT *p);\n\n    [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)]\n    HRESULT scrollIntoView([optional, in] VARIANT varargStart);\n\n    [id(DISPID_IHTMLELEMENT_CONTAINS)]\n    HRESULT contains(\n        [in] IHTMLElement *pChild,\n        [retval, out] VARIANT_BOOL *pfResult);\n\n    [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX)]\n    HRESULT sourceIndex([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)]\n    HRESULT recordNumber([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_LANG)]\n    HRESULT lang([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLELEMENT_LANG)]\n    HRESULT lang([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)]\n    HRESULT offsetLeft([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)]\n    HRESULT offsetTop([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)]\n    HRESULT offsetWidth([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)]\n    HRESULT offsetHeight([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)]\n    HRESULT offsetParent([retval, out] IHTMLElement **p);\n\n    [propput, id(DISPID_IHTMLELEMENT_INNERHTML)]\n    HRESULT innerHTML([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLELEMENT_INNERHTML)]\n    HRESULT innerHTML([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)]\n    HRESULT innerText([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)]\n    HRESULT innerText([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)]\n    HRESULT outerHTML([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)]\n    HRESULT outerHTML([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)]\n    HRESULT outerText([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)]\n    HRESULT outerText([retval, out] BSTR *p);\n\n    [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)]\n    HRESULT insertAdjacentHTML([in] BSTR where, [in] BSTR html);\n\n    [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)]\n    HRESULT insertAdjacentText([in] BSTR where, [in] BSTR text);\n\n    [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)]\n    HRESULT parentTextEdit([retval, out] IHTMLElement **p);\n\n    [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)]\n    HRESULT isTextEdit([retval, out] VARIANT_BOOL *p);\n\n    [id(DISPID_IHTMLELEMENT_CLICK)]\n    HRESULT click();\n\n    [propget, id(DISPID_IHTMLELEMENT_FILTERS)]\n    HRESULT filters([retval, out] IHTMLFiltersCollection **p);\n\n    [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART)]\n    HRESULT ondragstart([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART)]\n    HRESULT ondragstart([retval, out] VARIANT *p);\n\n    [id(DISPID_IHTMLELEMENT_TOSTRING)]\n    HRESULT toString([retval, out] BSTR *String);\n\n    [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE)]\n    HRESULT onbeforeupdate([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE)]\n    HRESULT onbeforeupdate([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE)]\n    HRESULT onafterupdate([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE)]\n    HRESULT onafterupdate([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE)]\n    HRESULT onerrorupdate([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE)]\n    HRESULT onerrorupdate([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT)]\n    HRESULT onrowexit([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT)]\n    HRESULT onrowexit([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_ONROWENTER)]\n    HRESULT onrowenter([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT_ONROWENTER)]\n    HRESULT onrowenter([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED)]\n    HRESULT ondatasetchanged([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED)]\n    HRESULT ondatasetchanged([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE)]\n    HRESULT ondataavailable([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE)]\n    HRESULT ondataavailable([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE)]\n    HRESULT ondatasetcomplete([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE)]\n    HRESULT ondatasetcomplete([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE)]\n    HRESULT onfilterchange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE)]\n    HRESULT onfilterchange([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLELEMENT_CHILDREN)]\n    HRESULT children([retval, out] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLELEMENT_ALL)]\n    HRESULT all([retval, out] IDispatch **p);\n}\n\n#define WINE_IHTMLELEMENT_DISPINTERFACE_DECL                            \\\n    [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)]                              \\\n    void setAttribute(                                                  \\\n        [in] BSTR strAttributeName,                                     \\\n        [in] VARIANT AttValue,                                          \\\n        [defaultvalue(1), in] LONG lFlags);                             \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)]                              \\\n    VARIANT getAttribute(                                               \\\n        [in] BSTR strAttributeName,                                     \\\n        [defaultvalue(0), in] LONG lFlags);                             \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)]                           \\\n    VARIANT_BOOL removeAttribute(                                       \\\n        [in] BSTR strAttributeName,                                     \\\n        [defaultvalue(1), in] LONG lFlags);                             \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]              \\\n    void className(BSTR v);                                             \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable]              \\\n    BSTR className();                                                   \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_ID), bindable]                     \\\n    void id(BSTR v);                                                    \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ID), bindable]                     \\\n    BSTR id();                                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_TAGNAME)]                          \\\n    BSTR tagName();                                                     \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)]                    \\\n    IHTMLElement *parentElement();                                      \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_STYLE), nonbrowsable]              \\\n    IHTMLStyle *style();                                                \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]    \\\n    void onhelp(VARIANT v);                                             \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable]    \\\n    VARIANT onhelp();                                                   \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]   \\\n    void onclick(VARIANT v);                                            \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable]   \\\n    VARIANT onclick();                                                  \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]\\\n    void ondblclick(VARIANT v);                                         \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]\\\n    VARIANT ondblclick();                                               \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable] \\\n    void onkeydown(VARIANT v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable] \\\n    VARIANT onkeydown();                                                \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]   \\\n    void onkeyup(VARIANT v);                                            \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable]   \\\n    VARIANT onkeyup();                                                  \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]\\\n    void onkeypress(VARIANT v);                                         \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]\\\n    VARIANT onkeypress();                                               \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]\\\n    void onmouseout(VARIANT v);                                         \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]\\\n    VARIANT onmouseout();                                               \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable] \\\n    void onmouseover(VARIANT v);                                        \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable] \\\n    VARIANT onmouseover();                                              \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable] \\\n    void onmousemove(VARIANT v);                                        \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable] \\\n    VARIANT onmousemove();                                              \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable] \\\n    void onmousedown(VARIANT v);                                        \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable] \\\n    VARIANT onmousedown();                                              \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable] \\\n    void onmouseup(VARIANT v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable] \\\n    VARIANT onmouseup();                                                \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)] IDispatch* document();  \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]     \\\n    void title(BSTR v);                                                 \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable]     \\\n    BSTR title();                                                       \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]  \\\n    void language(BSTR v);                                              \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable]  \\\n    BSTR language();                                                    \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable] \\\n    void onselectstart(VARIANT v);                                      \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable] \\\n    VARIANT onselectstart();                                            \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)]                            \\\n    void scrollIntoView([optional, in] VARIANT varargStart);            \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT_CONTAINS)]                                  \\\n    VARIANT_BOOL contains([in] IHTMLElement* pChild);                   \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX), bindable]            \\\n    LONG sourceIndex();                                                 \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)]                     \\\n    VARIANT recordNumber();                                             \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_LANG)]                             \\\n    void lang(BSTR v);                                                  \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_LANG)]                             \\\n    BSTR lang();                                                        \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)]                       \\\n    LONG offsetLeft();                                                  \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)]                        \\\n    LONG offsetTop();                                                   \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)]                      \\\n    LONG offsetWidth();                                                 \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)]                     \\\n    LONG offsetHeight();                                                \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)]                     \\\n    IHTMLElement* offsetParent();                                       \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_INNERHTML)]                        \\\n    void innerHTML(BSTR v);                                             \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_INNERHTML)]                        \\\n    BSTR innerHTML();                                                   \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)]                        \\\n    void innerText(BSTR v);                                             \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)]                        \\\n    BSTR innerText();                                                   \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)]                        \\\n    void outerHTML(BSTR v);                                             \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)]                        \\\n    BSTR outerHTML();                                                   \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)]                        \\\n    void outerText(BSTR v);                                             \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)]                        \\\n    BSTR outerText();                                                   \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)]                        \\\n    void insertAdjacentHTML(                                            \\\n        [in] BSTR where,                                                \\\n        [in] BSTR html);                                                \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)]                        \\\n    void insertAdjacentText(                                            \\\n        [in] BSTR where,                                                \\\n        [in] BSTR text);                                                \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)]                   \\\n    IHTMLElement* parentTextEdit();                                     \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)]                       \\\n    VARIANT_BOOL isTextEdit();                                          \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT_CLICK)]                                     \\\n    void click();                                                       \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_FILTERS)]                          \\\n    IHTMLFiltersCollection* filters();                                  \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable] \\\n    void ondragstart(VARIANT v);                                        \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable] \\\n    VARIANT ondragstart();                                              \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT_TOSTRING)]                                  \\\n    BSTR toString();                                                    \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable] \\\n    void onbeforeupdate(VARIANT v);                                     \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable] \\\n    VARIANT onbeforeupdate();                                           \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable] \\\n    void onafterupdate(VARIANT v);                                      \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable] \\\n    VARIANT onafterupdate();                                            \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable] \\\n    void onerrorupdate(VARIANT v);                                      \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable] \\\n    VARIANT onerrorupdate();                                            \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable] \\\n    void onrowexit(VARIANT v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable] \\\n    VARIANT onrowexit();                                                \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable] \\\n    void onrowenter(VARIANT v);                                         \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable] \\\n    VARIANT onrowenter();                                               \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable] \\\n    void ondatasetchanged(VARIANT v);                                   \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable] \\\n    VARIANT ondatasetchanged();                                         \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable] \\\n    void ondataavailable(VARIANT v);                                    \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable] \\\n    VARIANT ondataavailable();                                          \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable] \\\n    void ondatasetcomplete(VARIANT v);                                  \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable] \\\n    VARIANT ondatasetcomplete();                                        \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable] \\\n    void onfilterchange(VARIANT v);                                     \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable] \\\n    VARIANT onfilterchange();                                           \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_CHILDREN)]                         \\\n    IDispatch* children();                                              \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT_ALL)]                              \\\n    IDispatch* all()\n\n/*****************************************************************************\n *    IHTMLElement2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f434-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLElement2 : IDispatch\n{\n    [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)]\n    HRESULT scopeName([retval, out] BSTR *p);\n\n    [id(DISPID_IHTMLELEMENT2_SETCAPTURE)]\n    HRESULT setCapture([defaultvalue(-1), in] VARIANT_BOOL containerCapture);\n\n    [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)]\n    HRESULT releaseCapture();\n\n    [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]\n    HRESULT onlosecapture([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]\n    HRESULT onlosecapture([retval, out] VARIANT *p);\n\n    [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)]\n    HRESULT componentFromPoint(\n        [in] LONG x,\n        [in] LONG y,\n        [retval, out] BSTR *component);\n\n    [id(DISPID_IHTMLELEMENT2_DOSCROLL)]\n    HRESULT doScroll([optional, in] VARIANT component);\n\n    [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]\n    HRESULT onscroll([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]\n    HRESULT onscroll([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]\n    HRESULT ondrag([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]\n    HRESULT ondrag([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]\n    HRESULT ondragend([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]\n    HRESULT ondragend([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]\n    HRESULT ondragenter([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]\n    HRESULT ondragenter([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]\n    HRESULT ondragover([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]\n    HRESULT ondragover([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]\n    HRESULT ondragleave([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]\n    HRESULT ondragleave([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]\n    HRESULT ondrop([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]\n    HRESULT ondrop([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]\n    HRESULT onbeforecut([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]\n    HRESULT onbeforecut([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]\n    HRESULT oncut([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]\n    HRESULT oncut([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]\n    HRESULT onbeforecopy([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]\n    HRESULT onbeforecopy([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]\n    HRESULT oncopy([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]\n    HRESULT oncopy([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]\n    HRESULT onbeforepaste([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]\n    HRESULT onbeforepaste([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]\n    HRESULT onpaste([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]\n    HRESULT onpaste([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable]\n    HRESULT currentStyle([retval, out] IHTMLCurrentStyle **p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]\n    HRESULT onpropertychange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]\n    HRESULT onpropertychange([retval, out] VARIANT *p);\n\n    [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)]\n    HRESULT getClientRects([retval, out] IHTMLRectCollection **pRectCol);\n\n    [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)]\n    HRESULT getBoundingClientRect([retval, out] IHTMLRect **pRect);\n\n    [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)]\n    HRESULT setExpression(\n        [in] BSTR propname,\n        [in] BSTR expression,\n        [defaultvalue(\"\"), in] BSTR language);\n\n    [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)]\n    HRESULT getExpression(\n        [in] BSTR propname,\n        [retval, out] VARIANT *expression);\n\n    [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)]\n    HRESULT removeExpression(\n        [in] BSTR propname,\n        [retval, out] VARIANT_BOOL *pfSuccess);\n\n    [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]\n    HRESULT tabIndex([in] short v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]\n    HRESULT tabIndex([retval, out] short *p);\n\n    [id(DISPID_IHTMLELEMENT2_FOCUS)]\n    HRESULT focus();\n\n    [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]\n    HRESULT accessKey([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]\n    HRESULT accessKey([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]\n    HRESULT onblur([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]\n    HRESULT onblur([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]\n    HRESULT onfocus([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]\n    HRESULT onfocus([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]\n    HRESULT onresize([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]\n    HRESULT onresize([retval, out] VARIANT *p);\n\n    [id(DISPID_IHTMLELEMENT2_BLUR)]\n    HRESULT blur();\n\n    [id(DISPID_IHTMLELEMENT2_ADDFILTER)]\n    HRESULT addFilter([in] IUnknown *pUnk);\n\n    [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)]\n    HRESULT removeFilter([in] IUnknown *pUnk);\n\n    [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable]\n    HRESULT clientHeight([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable]\n    HRESULT clientWidth([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable]\n    HRESULT clientTop([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable]\n    HRESULT clientLeft([retval, out] LONG *p);\n\n    [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)]\n    HRESULT attachEvent(\n        [in] BSTR event,\n        [in] IDispatch *pDisp,\n        [retval, out] VARIANT_BOOL *pfResult);\n\n    [id(DISPID_IHTMLELEMENT2_DETACHEVENT)]\n    HRESULT detachEvent(\n        [in] BSTR event,\n        [in] IDispatch *pDisp);\n\n    [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)]\n    HRESULT readyState([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]\n    HRESULT onreadystatechange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]\n    HRESULT onreadystatechange([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]\n    HRESULT onrowsdelete([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]\n    HRESULT onrowsdelete([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]\n    HRESULT onrowsinserted([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]\n    HRESULT onrowsinserted([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]\n    HRESULT oncellchange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]\n    HRESULT oncellchange([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]\n    HRESULT dir([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]\n    HRESULT dir([retval, out] BSTR *p);\n\n    [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)]\n    HRESULT createControlRange([retval, out] IDispatch **range);\n\n    [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable]\n    HRESULT scrollHeight([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable]\n    HRESULT scrollWidth([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]\n    HRESULT scrollTop([in] LONG v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]\n    HRESULT scrollTop([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]\n    HRESULT scrollLeft([in] LONG v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]\n    HRESULT scrollLeft([retval, out] LONG *p);\n\n    [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)]\n    HRESULT clearAttributes();\n\n    [id(DISPID_IHTMLELEMENT2_MERGEATTRIBUTES)]\n    HRESULT mergeAttributes([in] IHTMLElement *mergeThis);\n\n    [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]\n    HRESULT oncontextmenu([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]\n    HRESULT oncontextmenu([retval, out] VARIANT *p);\n\n    [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)]\n    HRESULT insertAdjacentElement(\n        [in] BSTR where,\n        [in] IHTMLElement *insertedElement,\n        [retval, out] IHTMLElement **inserted);\n\n    [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)]\n    HRESULT applyElement(\n        [in] IHTMLElement *apply,\n        [in] BSTR where,\n        [retval, out] IHTMLElement **applied);\n\n    [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)]\n    HRESULT getAdjacentText(\n        [in] BSTR where,\n        [retval, out] BSTR *text);\n\n    [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)]\n    HRESULT replaceAdjacentText(\n        [in] BSTR where,\n        [in] BSTR newText,\n        [retval, out] BSTR *oldText);\n\n    [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)]\n    HRESULT canHaveChildren([retval, out] VARIANT_BOOL *p);\n\n    [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)]\n    HRESULT addBehavior(\n        [in] BSTR bstrUrl,\n        [optional, in] VARIANT *pvarFactory,\n        [retval, out] LONG *pCookie);\n\n    [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)]\n    HRESULT removeBehavior(\n        [in] LONG cookie,\n        [retval, out] VARIANT_BOOL *pfResult);\n\n    [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable]\n    HRESULT runtimeStyle([retval, out] IHTMLStyle **p);\n\n    [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)]\n    HRESULT behaviorUrns([retval, out] IDispatch **p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_TAGURN)]\n    HRESULT tagUrn([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_TAGURN)]\n    HRESULT tagUrn([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]\n    HRESULT onbeforeeditfocus([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]\n    HRESULT onbeforeeditfocus([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted]\n    HRESULT readyStateValue([retval, out] LONG *p);\n\n    [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)]\n    HRESULT getElementsByTagName(\n        [in] BSTR v,\n        [retval, out] IHTMLElementCollection **pelColl);\n}\n\n#define WINE_IHTMLELEMENT2_DISPINTERFACE_DECL                           \\\n    [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)]                       \\\n    BSTR scopeName();                                                   \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT2_SETCAPTURE)]                               \\\n    void setCapture([defaultvalue(-1), in] VARIANT_BOOL containerCapture); \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)]                           \\\n    void releaseCapture();                                              \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] \\\n    void onlosecapture(VARIANT v);                                      \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] \\\n    VARIANT onlosecapture();                                            \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)]                       \\\n    BSTR componentFromPoint([in] LONG x,[in] LONG y);                   \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT2_DOSCROLL)]                                 \\\n    void doScroll([optional, in] VARIANT component);                    \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] \\\n    void onscroll(VARIANT v);                                           \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] \\\n    VARIANT onscroll();                                                 \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]   \\\n    void ondrag(VARIANT v);                                             \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]   \\\n    VARIANT ondrag();                                                   \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] \\\n    void ondragend(VARIANT v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] \\\n    VARIANT ondragend();                                                \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] \\\n    void ondragenter(VARIANT v);                                        \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] \\\n    VARIANT ondragenter();                                              \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] \\\n    void ondragover(VARIANT v);                                         \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] \\\n    VARIANT ondragover();                                               \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] \\\n    void ondragleave(VARIANT v);                                        \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] \\\n    VARIANT ondragleave();                                              \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]   \\\n    void ondrop(VARIANT v);                                             \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]   \\\n    VARIANT ondrop();                                                   \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] \\\n    void onbeforecut(VARIANT v);                                        \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] \\\n    VARIANT onbeforecut();                                              \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]    \\\n    void oncut(VARIANT v);                                              \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]    \\\n    VARIANT oncut();                                                    \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] \\\n    void onbeforecopy(VARIANT v);                                       \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] \\\n    VARIANT onbeforecopy();                                             \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]   \\\n    void oncopy(VARIANT v);                                             \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]   \\\n    VARIANT oncopy();                                                   \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] \\\n    void onbeforepaste(VARIANT v);                                      \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] \\\n    VARIANT onbeforepaste();                                            \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]  \\\n    void onpaste(VARIANT v);                                            \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]  \\\n    VARIANT onpaste();                                                  \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable]      \\\n    IHTMLCurrentStyle* currentStyle();                                  \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] \\\n    void onpropertychange(VARIANT v);                                   \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] \\\n    VARIANT onpropertychange();                                         \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)]                           \\\n    IHTMLRectCollection* getClientRects();                              \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)]                    \\\n    IHTMLRect* getBoundingClientRect();                                 \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)]                            \\\n    void setExpression(                                                 \\\n        [in] BSTR propname,                                             \\\n        [in] BSTR expr,                                                 \\\n        [defaultvalue(\"\"), in] BSTR lang);                              \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)]                            \\\n    VARIANT getExpression([in] BSTR propname);                          \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)]                         \\\n    VARIANT_BOOL removeExpression([in] BSTR propname);                  \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] \\\n    void tabIndex(short v);                                             \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] \\\n    short tabIndex();                                                   \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT2_FOCUS)]                                    \\\n    void focus();                                                       \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]\\\n    void accessKey(BSTR v);                                             \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]\\\n    BSTR accessKey();                                                   \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]   \\\n    void onblur(VARIANT v);                                             \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]   \\\n    VARIANT onblur();                                                   \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]  \\\n    void onfocus(VARIANT v);                                            \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]  \\\n    VARIANT onfocus();                                                  \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] \\\n    void onresize(VARIANT v);                                           \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] \\\n    VARIANT onresize();                                                 \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT2_BLUR)]                                     \\\n    void blur();                                                        \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT2_ADDFILTER)]                                \\\n    void addFilter([in] IUnknown* pUnk);                                \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)]                             \\\n    void removeFilter([in] IUnknown* pUnk);                             \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable] \\\n    LONG clientHeight();                                                \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable] \\\n    LONG clientWidth();                                                 \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable] \\\n    LONG clientTop();                                                   \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable] \\\n    LONG clientLeft();                                                  \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)]                              \\\n    VARIANT_BOOL attachEvent(                                           \\\n            [in] BSTR event,                                            \\\n            [in] IDispatch* pDisp);                                     \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT2_DETACHEVENT)]                              \\\n    void detachEvent(                                                   \\\n            [in] BSTR event,                                            \\\n            [in] IDispatch* pDisp);                                     \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)] VARIANT readyState(); \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] \\\n    void onreadystatechange(VARIANT v);                                 \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] \\\n    VARIANT onreadystatechange();                                       \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] \\\n    void onrowsdelete(VARIANT v);                                       \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] \\\n    VARIANT onrowsdelete();                                             \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] \\\n    void onrowsinserted(VARIANT v);                                     \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] \\\n    VARIANT onrowsinserted();                                           \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] \\\n    void oncellchange(VARIANT v);                                       \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] \\\n    VARIANT oncellchange();                                             \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]      \\\n    void dir(BSTR v);                                                   \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]      \\\n    BSTR dir();                                                         \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)]                       \\\n    IDispatch* createControlRange();                                    \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable] \\\n    LONG scrollHeight();                                                \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable] \\\n    LONG scrollWidth();                                                 \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]\\\n    void scrollTop(LONG v);                                             \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]\\\n    LONG scrollTop();                                                   \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] \\\n    void scrollLeft(LONG v);                                            \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] \\\n    LONG scrollLeft();                                                  \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)]                          \\\n    void clearAttributes();                                             \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] \\\n    void oncontextmenu(VARIANT v);                                      \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] \\\n    VARIANT oncontextmenu();                                            \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)]                    \\\n    IHTMLElement* insertAdjacentElement(                                \\\n        [in] BSTR where,                                                \\\n        [in] IHTMLElement* insertedElement);                            \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)]                             \\\n    IHTMLElement* applyElement([in] IHTMLElement* apply,[in] BSTR where); \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)]                          \\\n    BSTR getAdjacentText([in] BSTR where);                              \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)]                      \\\n    BSTR replaceAdjacentText([in] BSTR where,[in] BSTR newText);        \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)]                 \\\n    VARIANT_BOOL canHaveChildren();                                     \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)]                              \\\n    LONG addBehavior([in] BSTR bstrUrl,[optional, in] VARIANT* pvarFactory); \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)]                           \\\n    VARIANT_BOOL removeBehavior([in] LONG cookie);                      \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable]      \\\n    IHTMLStyle* runtimeStyle();                                         \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)]                    \\\n    IDispatch* behaviorUrns();                                          \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_TAGURN)]                          \\\n    void tagUrn(BSTR v);                                                \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_TAGURN)]                          \\\n    BSTR tagUrn();                                                      \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] \\\n    void onbeforeeditfocus(VARIANT v);                                  \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] \\\n    VARIANT onbeforeeditfocus();                                        \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted] \\\n    LONG readyStateValue();                                             \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)]                     \\\n    IHTMLElementCollection* getElementsByTagName([in] BSTR v)\n\n/*****************************************************************************\n *    IHTMLElement3 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f673-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLElement3 : IDispatch\n{\n    [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)] HRESULT mergeAttributes([in]\n    IHTMLElement* mergeThis,[optional, in] VARIANT* pvarFlags);\n\n    [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)]\n    HRESULT isMultiLine([retval, out] VARIANT_BOOL * p);\n\n    [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)]\n    HRESULT canHaveHTML([retval, out] VARIANT_BOOL * p);\n\n    [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]\n    HRESULT onlayoutcomplete([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]\n    HRESULT onlayoutcomplete([retval, out] VARIANT * p);\n\n    [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]\n    HRESULT onpage([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]\n    HRESULT onpage([retval, out] VARIANT * p);\n\n    [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]\n    HRESULT inflateBlock([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]\n    HRESULT inflateBlock([retval, out] VARIANT_BOOL * p);\n\n    [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]\n    HRESULT onbeforedeactivate([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]\n    HRESULT onbeforedeactivate([retval, out] VARIANT * p);\n\n    [id(DISPID_IHTMLELEMENT3_SETACTIVE)] HRESULT setActive();\n\n    [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]\n    HRESULT contentEditable([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]\n    HRESULT contentEditable([retval, out] BSTR * p);\n\n    [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)]\n    HRESULT isContentEditable([retval, out] VARIANT_BOOL * p);\n\n    [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]\n    HRESULT hideFocus([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]\n    HRESULT hideFocus([retval, out] VARIANT_BOOL * p);\n\n    [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]\n    HRESULT disabled([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]\n    HRESULT disabled([retval, out] VARIANT_BOOL * p);\n\n    [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)]\n    HRESULT isDisabled([retval, out] VARIANT_BOOL * p);\n\n    [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]\n    HRESULT onmove([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]\n    HRESULT onmove([retval, out] VARIANT * p);\n\n    [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]\n    HRESULT oncontrolselect([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]\n    HRESULT oncontrolselect([retval, out] VARIANT * p);\n\n    [id(DISPID_IHTMLELEMENT3_FIREEVENT)]\n    HRESULT fireEvent(\n        [in] BSTR bstrEventName,\n        [optional, in] VARIANT* pvarEventObject,\n        [retval, out] VARIANT_BOOL* pfCancelled);\n\n    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]\n    HRESULT onresizestart([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]\n    HRESULT onresizestart([retval, out] VARIANT * p);\n\n    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]\n    HRESULT onresizeend([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]\n    HRESULT onresizeend([retval, out] VARIANT * p);\n\n    [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]\n    HRESULT onmovestart([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]\n    HRESULT onmovestart([retval, out] VARIANT * p);\n\n    [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]\n    HRESULT onmoveend([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]\n    HRESULT onmoveend([retval, out] VARIANT * p);\n\n    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]\n    HRESULT onmouseenter([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]\n    HRESULT onmouseenter([retval, out] VARIANT * p);\n\n    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]\n    HRESULT onmouseleave([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]\n    HRESULT onmouseleave([retval, out] VARIANT * p);\n\n    [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]\n    HRESULT onactivate([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]\n    HRESULT onactivate([retval, out] VARIANT * p);\n\n    [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]\n    HRESULT ondeactivate([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]\n    HRESULT ondeactivate([retval, out] VARIANT * p);\n\n    [id(DISPID_IHTMLELEMENT3_DRAGDROP)] HRESULT dragDrop([retval, out]\n    VARIANT_BOOL* pfRet);\n\n    [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable]\n    HRESULT glyphMode([retval, out] LONG * p);\n}\n\n#define WINE_IHTMLELEMENT3_DISPINTERFACE_DECL                           \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)]                          \\\n    void mergeAttributes(                                               \\\n            [in] IHTMLElement* mergeThis,                               \\\n            [optional, in] VARIANT* pvarFlags);                         \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)]                     \\\n    VARIANT_BOOL isMultiLine();                                         \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)]                     \\\n    VARIANT_BOOL canHaveHTML();                                         \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] \\\n    void onlayoutcomplete(VARIANT v);                                   \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] \\\n    VARIANT onlayoutcomplete();                                         \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]   \\\n    void onpage(VARIANT v);                                             \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]   \\\n    VARIANT onpage();                                                   \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] \\\n    void inflateBlock(VARIANT_BOOL v);                                  \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] \\\n    VARIANT_BOOL inflateBlock();                                        \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] \\\n    void onbeforedeactivate(VARIANT v);                                 \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] \\\n    VARIANT onbeforedeactivate();                                       \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT3_SETACTIVE)]                                \\\n    void setActive();                                                   \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] \\\n    void contentEditable(BSTR v);                                       \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] \\\n    BSTR contentEditable();                                             \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)]               \\\n    VARIANT_BOOL isContentEditable();                                   \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]\\\n    void hideFocus(VARIANT_BOOL v);                                     \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]\\\n    VARIANT_BOOL hideFocus();                                           \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] \\\n    void disabled(VARIANT_BOOL v);                                      \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] \\\n    VARIANT_BOOL disabled();                                            \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)]                      \\\n    VARIANT_BOOL isDisabled();                                          \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]   \\\n    void onmove(VARIANT v);                                             \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]   \\\n    VARIANT onmove();                                                   \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] \\\n    void oncontrolselect(VARIANT v);                                    \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] \\\n    VARIANT oncontrolselect();                                          \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT3_FIREEVENT)]                                \\\n    VARIANT_BOOL fireEvent(                                             \\\n        [in] BSTR bstrEventName,                                        \\\n        [optional, in] VARIANT* pvarEventObject);                       \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] \\\n    void onresizestart(VARIANT v);                                      \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] \\\n    VARIANT onresizestart();                                            \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] \\\n    void onresizeend(VARIANT v);                                        \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] \\\n    VARIANT onresizeend();                                              \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] \\\n    void onmovestart(VARIANT v);                                        \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] \\\n    VARIANT onmovestart();                                              \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]\\\n    void onmoveend(VARIANT v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]\\\n    VARIANT onmoveend();                                                \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] \\\n    void onmouseenter(VARIANT v);                                       \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] \\\n    VARIANT onmouseenter();                                             \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] \\\n    void onmouseleave(VARIANT v);                                       \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] \\\n    VARIANT onmouseleave();                                             \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] \\\n    void onactivate(VARIANT v);                                         \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] \\\n    VARIANT onactivate();                                               \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] \\\n    void ondeactivate(VARIANT v);                                       \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] \\\n    VARIANT ondeactivate();                                             \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT3_DRAGDROP)]                                 \\\n    VARIANT_BOOL dragDrop();                                            \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable] \\\n    LONG glyphMode()\n\n/*****************************************************************************\n *    IHTMLElement4 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f80f-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLElement4 : IDispatch\n{\n    [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]\n    HRESULT onmousewheel([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]\n    HRESULT onmousewheel([retval, out] VARIANT * p);\n\n    [id(DISPID_IHTMLELEMENT4_NORMALIZE)]\n    HRESULT normalize();\n\n    [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)]\n    HRESULT getAttributeNode([in] BSTR bstrname,\n        [retval, out] IHTMLDOMAttribute** ppAttribute);\n\n    [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)]\n    HRESULT setAttributeNode(\n        [in] IHTMLDOMAttribute* pattr,\n        [retval, out] IHTMLDOMAttribute** ppretAttribute);\n\n    [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)]\n    HRESULT removeAttributeNode(\n        [in] IHTMLDOMAttribute* pattr,\n        [retval, out] IHTMLDOMAttribute** ppretAttribute);\n\n    [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]\n    HRESULT onbeforeactivate([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]\n    HRESULT onbeforeactivate([retval, out] VARIANT * p);\n\n    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]\n    HRESULT onfocusin([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]\n    HRESULT onfocusin([retval, out] VARIANT * p);\n\n    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]\n    HRESULT onfocusout([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]\n    HRESULT onfocusout([retval, out] VARIANT * p);\n}\n\n#define WINE_IHTMLELEMENT4_DISPINTERFACE_DECL                           \\\n    [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] \\\n    void onmousewheel(VARIANT v);                                       \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] \\\n    VARIANT onmousewheel();                                             \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT4_NORMALIZE)]                                \\\n    void normalize();                                                   \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)]                         \\\n    IHTMLDOMAttribute* getAttributeNode([in] BSTR bstrname);            \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)]                         \\\n    IHTMLDOMAttribute* setAttributeNode([in] IHTMLDOMAttribute* pattr); \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)]                      \\\n    IHTMLDOMAttribute* removeAttributeNode([in] IHTMLDOMAttribute* pattr); \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] \\\n    void onbeforeactivate(VARIANT v);                                   \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] \\\n    VARIANT onbeforeactivate();                                         \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]\\\n    void onfocusin(VARIANT v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]\\\n    VARIANT onfocusin();                                                \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] \\\n    void onfocusout(VARIANT v);                                         \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] \\\n    VARIANT onfocusout()\n\n/*****************************************************************************\n *    IHTMLElement6 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(305106f8-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLElement6 : IDispatch\n{\n    [id(DISPID_IHTMLELEMENT6_GETATTRIBUTENS)]\n    HRESULT getAttributeNS(\n        [in] VARIANT *pvarNS,\n        [in] BSTR strAttributeName,\n        [out, retval] VARIANT *AttributeValue);\n\n    [id(DISPID_IHTMLELEMENT6_SETATTRIBUTENS)]\n    HRESULT setAttributeNS(\n        [in] VARIANT *pvarNS,\n        [in] BSTR strAttributeName,\n        [in] VARIANT *pvarAttributeValue);\n\n    [id(DISPID_IHTMLELEMENT6_REMOVEATTRIBUTENS)]\n    HRESULT removeAttributeNS(\n        [in] VARIANT *pvarNS,\n        [in] BSTR strAttributeName);\n\n    [id(DISPID_IHTMLELEMENT6_GETATTRIBUTENODENS)]\n    HRESULT getAttributeNodeNS(\n        [in] VARIANT *pvarNS,\n        [in] BSTR bstrname,\n        [out, retval] IHTMLDOMAttribute2 **ppretAttribute);\n\n    [id(DISPID_IHTMLELEMENT6_SETATTRIBUTENODENS)]\n    HRESULT setAttributeNodeNS(\n        [in] IHTMLDOMAttribute2 *pattr,\n        [out, retval] IHTMLDOMAttribute2 **ppretAttribute);\n\n    [id(DISPID_IHTMLELEMENT6_HASATTRIBUTENS)]\n    HRESULT hasAttributeNS(\n        [in] VARIANT *pvarNS,\n        [in] BSTR name,\n        [out, retval] VARIANT_BOOL *pfHasAttribute);\n\n    [id(DISPID_IHTMLELEMENT6_IE9_GETATTRIBUTE)]\n    HRESULT getAttribute(\n        [in] BSTR strAttributeName,\n        [out, retval] VARIANT *AttributeValue);\n\n    [id(DISPID_IHTMLELEMENT6_IE9_SETATTRIBUTE)]\n    HRESULT setAttribute(\n        [in] BSTR strAttributeName,\n        [in] VARIANT *pvarAttributeValue);\n\n    [id(DISPID_IHTMLELEMENT6_IE9_REMOVEATTRIBUTE)]\n    HRESULT removeAttribute(\n        [in] BSTR strAttributeName);\n\n    [id(DISPID_IHTMLELEMENT6_IE9_GETATTRIBUTENODE)]\n    HRESULT getAttributeNode(\n        [in] BSTR strAttributeName,\n        [out, retval] IHTMLDOMAttribute2 **ppretAttribute);\n\n    [id(DISPID_IHTMLELEMENT6_IE9_SETATTRIBUTENODE)]\n    HRESULT setAttributeNode(\n        [in] IHTMLDOMAttribute2 *pattr,\n        [out, retval] IHTMLDOMAttribute2 **ppretAttribute);\n\n    [id(DISPID_IHTMLELEMENT6_IE9_REMOVEATTRIBUTENODE)]\n    HRESULT removeAttributeNode(\n        [in] IHTMLDOMAttribute2 *pattr,\n        [out, retval] IHTMLDOMAttribute2 **ppretAttribute);\n\n    [id(DISPID_IHTMLELEMENT6_IE9_HASATTRIBUTE)]\n    HRESULT hasAttribute(\n        [in] BSTR name,\n        [out, retval] VARIANT_BOOL *pfHasAttribute);\n\n    [id(DISPID_IHTMLELEMENT6_GETELEMENTSBYTAGNAMENS)]\n    HRESULT getElementsByTagNameNS(\n        [in] VARIANT *varNS,\n        [in] BSTR bstrLocalName,\n        [out, retval] IHTMLElementCollection **pelColl);\n\n    [propget, id(DISPID_IHTMLELEMENT6_IE9_TAGNAME)]\n    HRESULT tagName([out, retval] BSTR *p);\n\n    [propget, id(DISPID_IHTMLELEMENT6_IE9_NODENAME)]\n    HRESULT nodeName([out, retval] BSTR *p);\n\n    [id(DISPID_IHTMLELEMENT6_GETELEMENTSBYCLASSNAME)]\n    HRESULT getElementsByClassName(\n        [in] BSTR v,\n        [out, retval] IHTMLElementCollection **pel);\n\n    [id(DISPID_IHTMLELEMENT6_MSMATCHESSELECTOR)]\n    HRESULT msMatchesSelector(\n        [in] BSTR v,\n        [out, retval] VARIANT_BOOL *pfMatches);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONABORT), displaybind, bindable]\n    HRESULT onabort([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONABORT), displaybind, bindable]\n    HRESULT onabort([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONCANPLAY), displaybind, bindable, hidden]\n    HRESULT oncanplay([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONCANPLAY), displaybind, bindable, hidden]\n    HRESULT oncanplay([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONCANPLAYTHROUGH), displaybind, bindable, hidden]\n    HRESULT oncanplaythrough([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONCANPLAYTHROUGH), displaybind, bindable, hidden]\n    HRESULT oncanplaythrough([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONCHANGE), displaybind, bindable]\n    HRESULT onchange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONCHANGE), displaybind, bindable]\n    HRESULT onchange([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONDURATIONCHANGE), displaybind, bindable, hidden]\n    HRESULT ondurationchange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONDURATIONCHANGE), displaybind, bindable, hidden]\n    HRESULT ondurationchange([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONEMPTIED), displaybind, bindable, hidden]\n    HRESULT onemptied([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONEMPTIED), displaybind, bindable, hidden]\n    HRESULT onemptied([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONENDED), displaybind, bindable, hidden]\n    HRESULT onended([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONENDED), displaybind, bindable, hidden]\n    HRESULT onended([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONERROR), displaybind, bindable]\n    HRESULT onerror([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONERROR), displaybind, bindable]\n    HRESULT onerror([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONINPUT), displaybind, bindable, hidden]\n    HRESULT oninput([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONINPUT), displaybind, bindable, hidden]\n    HRESULT oninput([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONLOAD), displaybind, bindable]\n    HRESULT onload([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONLOAD), displaybind, bindable]\n    HRESULT onload([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONLOADEDDATA), displaybind, bindable, hidden]\n    HRESULT onloadeddata([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONLOADEDDATA), displaybind, bindable, hidden]\n    HRESULT onloadeddata([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONLOADEDMETADATA), displaybind, bindable, hidden]\n    HRESULT onloadedmetadata([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONLOADEDMETADATA), displaybind, bindable, hidden]\n    HRESULT onloadedmetadata([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONLOADSTART), displaybind, bindable, hidden]\n    HRESULT onloadstart([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONLOADSTART), displaybind, bindable, hidden]\n    HRESULT onloadstart([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONPAUSE), displaybind, bindable, hidden]\n    HRESULT onpause([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONPAUSE), displaybind, bindable, hidden]\n    HRESULT onpause([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONPLAY), displaybind, bindable, hidden]\n    HRESULT onplay([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONPLAY), displaybind, bindable, hidden]\n    HRESULT onplay([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONPLAYING), displaybind, bindable, hidden]\n    HRESULT onplaying([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONPLAYING), displaybind, bindable, hidden]\n    HRESULT onplaying([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONPROGRESS), displaybind, bindable, hidden]\n    HRESULT onprogress([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONPROGRESS), displaybind, bindable, hidden]\n    HRESULT onprogress([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONRATECHANGE), displaybind, bindable, hidden]\n    HRESULT onratechange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONRATECHANGE), displaybind, bindable, hidden]\n    HRESULT onratechange([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONRESET), displaybind, bindable]\n    HRESULT onreset([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONRESET), displaybind, bindable]\n    HRESULT onreset([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONSEEKED), displaybind, bindable, hidden]\n    HRESULT onseeked([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONSEEKED), displaybind, bindable, hidden]\n    HRESULT onseeked([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONSEEKING), displaybind, bindable, hidden]\n    HRESULT onseeking([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONSEEKING), displaybind, bindable, hidden]\n    HRESULT onseeking([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONSELECT), displaybind, bindable]\n    HRESULT onselect([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONSELECT), displaybind, bindable]\n    HRESULT onselect([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONSTALLED), displaybind, bindable, hidden]\n    HRESULT onstalled([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONSTALLED), displaybind, bindable, hidden]\n    HRESULT onstalled([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONSUBMIT), displaybind, bindable]\n    HRESULT onsubmit([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONSUBMIT), displaybind, bindable]\n    HRESULT onsubmit([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONSUSPEND), displaybind, bindable, hidden]\n    HRESULT onsuspend([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONSUSPEND), displaybind, bindable, hidden]\n    HRESULT onsuspend([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONTIMEUPDATE), displaybind, bindable, hidden]\n    HRESULT ontimeupdate([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONTIMEUPDATE), displaybind, bindable, hidden]\n    HRESULT ontimeupdate([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONVOLUMECHANGE), displaybind, bindable, hidden]\n    HRESULT onvolumechange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONVOLUMECHANGE), displaybind, bindable, hidden]\n    HRESULT onvolumechange([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLELEMENT6_ONWAITING), displaybind, bindable, hidden]\n    HRESULT onwaiting([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLELEMENT6_ONWAITING), displaybind, bindable, hidden]\n    HRESULT onwaiting([out, retval] VARIANT *p);\n\n    [id(DISPID_IHTMLELEMENT6_IE9_HASATTRIBUTES)]\n    HRESULT hasAttributes([out, retval] VARIANT_BOOL *pfHasAttributes);\n}\n\n#define WINE_IHTMLELEMENT6_DISPINTERFACE_DECL                           \\\n    [id(DISPID_IHTMLELEMENT6_GETATTRIBUTENS)]                           \\\n    VARIANT getAttributeNS(                                             \\\n        [in] VARIANT *pvarNS,                                           \\\n        [in] BSTR strAttributeName);                                    \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT6_SETATTRIBUTENS)]                           \\\n    void setAttributeNS(                                                \\\n        [in] VARIANT *pvarNS,                                           \\\n        [in] BSTR strAttributeName,                                     \\\n        [in] VARIANT *pvarAttributeValue);                              \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT6_REMOVEATTRIBUTENS)]                        \\\n    void removeAttributeNS(                                             \\\n        [in] VARIANT *pvarNS,                                           \\\n        [in] BSTR strAttributeName);                                    \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT6_GETATTRIBUTENODENS)]                       \\\n    IHTMLDOMAttribute2 *getAttributeNodeNS(                             \\\n        [in] VARIANT *pvarNS,                                           \\\n        [in] BSTR bstrname);                                            \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT6_SETATTRIBUTENODENS)]                       \\\n    IHTMLDOMAttribute2 *setAttributeNodeNS([in] IHTMLDOMAttribute2 *pattr); \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT6_HASATTRIBUTENS)]                           \\\n    VARIANT_BOOL hasAttributeNS(                                        \\\n        [in] VARIANT *pvarNS,                                           \\\n        [in] BSTR name);                                                \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT6_IE9_GETATTRIBUTE)]                         \\\n    VARIANT ie9_getAttribute([in] BSTR strAttributeName);               \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT6_IE9_SETATTRIBUTE)]                         \\\n    void ie9_setAttribute(                                              \\\n        [in] BSTR strAttributeName,                                     \\\n        [in] VARIANT *pvarAttributeValue);                              \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT6_IE9_REMOVEATTRIBUTE)]                      \\\n    void ie9_removeAttribute([in] BSTR strAttributeName);               \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT6_IE9_GETATTRIBUTENODE)]                     \\\n    IHTMLDOMAttribute2 *ie9_getAttributeNode([in] BSTR strAttributeName); \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT6_IE9_SETATTRIBUTENODE)]                     \\\n    IHTMLDOMAttribute2 *ie9_setAttributeNode([in] IHTMLDOMAttribute2 *pattr); \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT6_IE9_REMOVEATTRIBUTENODE)]                  \\\n    IHTMLDOMAttribute2 *ie9_removeAttributeNode([in] IHTMLDOMAttribute2 *pattr); \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT6_IE9_HASATTRIBUTE)]                         \\\n    VARIANT_BOOL ie9_hasAttribute([in] BSTR name);                      \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT6_GETELEMENTSBYTAGNAMENS)]                   \\\n    IHTMLElementCollection *getElementsByTagNameNS(                     \\\n        [in] VARIANT *varNS,                                            \\\n        [in] BSTR bstrLocalName);                                       \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_IE9_TAGNAME)]                     \\\n    BSTR ie9_tagName();                                                 \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_IE9_NODENAME)]                    \\\n    BSTR ie9_nodeName();                                                \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT6_GETELEMENTSBYCLASSNAME)]                   \\\n    IHTMLElementCollection *getElementsByClassName([in] BSTR v);        \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT6_MSMATCHESSELECTOR)]                        \\\n    VARIANT_BOOL msMatchesSelector([in] BSTR v);                        \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONABORT), displaybind, bindable]  \\\n    void onabort(VARIANT v);                                            \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONABORT), displaybind, bindable]  \\\n    VARIANT onabort();                                                  \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONCANPLAY), displaybind, bindable, hidden] \\\n    void oncanplay(VARIANT v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONCANPLAY), displaybind, bindable, hidden] \\\n    VARIANT oncanplay();                                                \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONCANPLAYTHROUGH), displaybind, bindable, hidden] \\\n    void oncanplaythrough(VARIANT v);                                   \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONCANPLAYTHROUGH), displaybind, bindable, hidden] \\\n    VARIANT oncanplaythrough();                                         \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONCHANGE), displaybind, bindable] \\\n    void onchange(VARIANT v);                                           \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONCHANGE), displaybind, bindable] \\\n    VARIANT onchange();                                                 \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONDURATIONCHANGE), displaybind, bindable, hidden] \\\n    void ondurationchange(VARIANT v);                                   \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONDURATIONCHANGE), displaybind, bindable, hidden] \\\n    VARIANT ondurationchange();                                         \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONEMPTIED), displaybind, bindable, hidden] \\\n    void onemptied(VARIANT v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONEMPTIED), displaybind, bindable, hidden] \\\n    VARIANT onemptied();                                                \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONENDED), displaybind, bindable, hidden] \\\n    void onended(VARIANT v);                                            \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONENDED), displaybind, bindable, hidden] \\\n    VARIANT onended();                                                  \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONERROR), displaybind, bindable]  \\\n    void onerror(VARIANT v);                                            \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONERROR), displaybind, bindable]  \\\n    VARIANT onerror();                                                  \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONINPUT), displaybind, bindable, hidden] \\\n    void oninput(VARIANT v);                                            \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONINPUT), displaybind, bindable, hidden] \\\n    VARIANT oninput();                                                  \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONLOAD), displaybind, bindable]   \\\n    void onload(VARIANT v);                                             \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONLOAD), displaybind, bindable]   \\\n    VARIANT onload();                                                   \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONLOADEDDATA), displaybind, bindable, hidden] \\\n    void onloadeddata(VARIANT v);                                       \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONLOADEDDATA), displaybind, bindable, hidden] \\\n    VARIANT onloadeddata();                                             \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONLOADEDMETADATA), displaybind, bindable, hidden] \\\n    void onloadedmetadata(VARIANT v);                                   \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONLOADEDMETADATA), displaybind, bindable, hidden] \\\n    VARIANT onloadedmetadata();                                         \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONLOADSTART), displaybind, bindable, hidden] \\\n    void onloadstart(VARIANT v);                                        \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONLOADSTART), displaybind, bindable, hidden] \\\n    VARIANT onloadstart();                                              \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONPAUSE), displaybind, bindable, hidden] \\\n    void onpause(VARIANT v);                                            \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONPAUSE), displaybind, bindable, hidden] \\\n    VARIANT onpause();                                                  \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONPLAY), displaybind, bindable, hidden] \\\n    void onplay(VARIANT v);                                             \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONPLAY), displaybind, bindable, hidden] \\\n    VARIANT onplay();                                                   \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONPLAYING), displaybind, bindable, hidden] \\\n    void onplaying(VARIANT v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONPLAYING), displaybind, bindable, hidden] \\\n    VARIANT onplaying();                                                \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONPROGRESS), displaybind, bindable, hidden] \\\n    void onprogress(VARIANT v);                                         \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONPROGRESS), displaybind, bindable, hidden] \\\n    VARIANT onprogress();                                               \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONRATECHANGE), displaybind, bindable, hidden] \\\n    void onratechange(VARIANT v);                                       \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONRATECHANGE), displaybind, bindable, hidden] \\\n    VARIANT onratechange();                                             \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONRESET), displaybind, bindable]  \\\n    void onreset(VARIANT v);                                            \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONRESET), displaybind, bindable]  \\\n    VARIANT onreset();                                                  \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONSEEKED), displaybind, bindable, hidden] \\\n    void onseeked(VARIANT v);                                           \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONSEEKED), displaybind, bindable, hidden] \\\n    VARIANT onseeked();                                                 \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONSEEKING), displaybind, bindable, hidden] \\\n    void onseeking(VARIANT v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONSEEKING), displaybind, bindable, hidden] \\\n    VARIANT onseeking();                                                \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONSELECT), displaybind, bindable] \\\n    void onselect(VARIANT v);                                           \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONSELECT), displaybind, bindable] \\\n    VARIANT onselect();                                                 \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONSTALLED), displaybind, bindable, hidden] \\\n    void onstalled(VARIANT v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONSTALLED), displaybind, bindable, hidden] \\\n    VARIANT onstalled();                                                \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONSUBMIT), displaybind, bindable] \\\n    void onsubmit(VARIANT v);                                           \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONSUBMIT), displaybind, bindable] \\\n    VARIANT onsubmit();                                                 \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONSUSPEND), displaybind, bindable, hidden] \\\n    void onsuspend(VARIANT v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONSUSPEND), displaybind, bindable, hidden] \\\n    VARIANT onsuspend();                                                \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONTIMEUPDATE), displaybind, bindable, hidden] \\\n    void ontimeupdate(VARIANT v);                                       \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONTIMEUPDATE), displaybind, bindable, hidden] \\\n    VARIANT ontimeupdate();                                             \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONVOLUMECHANGE), displaybind, bindable, hidden] \\\n    void onvolumechange(VARIANT v);                                     \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONVOLUMECHANGE), displaybind, bindable, hidden] \\\n    VARIANT onvolumechange();                                           \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT6_ONWAITING), displaybind, bindable, hidden] \\\n    void onwaiting(VARIANT v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT6_ONWAITING), displaybind, bindable, hidden] \\\n    VARIANT onwaiting();                                                \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT6_IE9_HASATTRIBUTES)]                        \\\n    VARIANT_BOOL ie9_hasAttributes()\n\n/*****************************************************************************\n *    IElementTraversal interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(30510736-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IElementTraversal : IDispatch\n{\n    [propget, id(DISPID_IELEMENTTRAVERSAL_FIRSTELEMENTCHILD)]\n    HRESULT firstElementChild([retval, out] IHTMLElement **p);\n    [propget, id(DISPID_IELEMENTTRAVERSAL_LASTELEMENTCHILD)]\n    HRESULT lastElementChild([retval, out] IHTMLElement **p);\n    [propget, id(DISPID_IELEMENTTRAVERSAL_PREVIOUSELEMENTSIBLING)]\n    HRESULT previousElementSibling([retval, out] IHTMLElement **p);\n    [propget, id(DISPID_IELEMENTTRAVERSAL_NEXTELEMENTSIBLING)]\n    HRESULT nextElementSibling([retval, out] IHTMLElement **p);\n    [propget, id(DISPID_IELEMENTTRAVERSAL_CHILDELEMENTCOUNT)]\n    HRESULT childElementCount([retval, out] long *p);\n}\n\n/*****************************************************************************\n *    IElementSelector interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(30510463-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IElementSelector : IDispatch\n{\n    [id(DISPID_IELEMENTSELECTOR_QUERYSELECTOR)]\n    HRESULT querySelector(\n        [in] BSTR v,\n        [out, retval] IHTMLElement **pel);\n\n    [id(DISPID_IELEMENTSELECTOR_QUERYSELECTORALL)]\n    HRESULT querySelectorAll(\n        [in] BSTR v,\n        [out, retval] IHTMLDOMChildrenCollection **pel);\n}\n\n#define WINE_IELEMENTSELECTOR_DISPINTERFACE_DECL                \\\n    [id(DISPID_IELEMENTSELECTOR_QUERYSELECTOR)]                 \\\n    IHTMLElement *querySelector([in] BSTR v);                   \\\n                                                                \\\n    [id(DISPID_IELEMENTSELECTOR_QUERYSELECTORALL)]              \\\n    IHTMLDOMChildrenCollection *querySelectorAll([in] BSTR v)\n\n/*****************************************************************************\n *    IHTMLUniqueName interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f4d0-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLUniqueName : IDispatch\n{\n    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden]\n    HRESULT uniqueNumber([retval, out] LONG * p);\n\n    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden]\n    HRESULT uniqueID([retval, out] BSTR * p);\n}\n\n#define WINE_IHTMLUNIQUENAME_DISPINTERFACE_DECL                 \\\n    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden]  \\\n    LONG uniqueNumber();                                        \\\n                                                                \\\n    [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden]      \\\n    BSTR uniqueID()\n\n#define WINE_IHTMLELEMENT5_DISPINTERFACE_DECL                           \\\n    [id(DISPID_IHTMLELEMENT5_IE8_GETATTRIBUTENODE)]                     \\\n    IHTMLDOMAttribute2 *ie8_getAttributeNode([in] BSTR bstrname);       \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT5_IE8_SETATTRIBUTENODE)]                     \\\n    IHTMLDOMAttribute2 *ie8_setAttributeNode([in] IHTMLDOMAttribute2 *pattr); \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT5_IE8_REMOVEATTRIBUTENODE)]                  \\\n    IHTMLDOMAttribute2 *ie8_removeAttributeNode([in] IHTMLDOMAttribute2 *pattr); \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT5_HASATTRIBUTE)]                             \\\n    VARIANT_BOOL hasAttribute([in] BSTR name);                          \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ROLE), displaybind, bindable]     \\\n    void role(BSTR v);                                                  \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ROLE), displaybind, bindable]     \\\n    BSTR role();                                                        \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIABUSY), displaybind, bindable] \\\n    void ariaBusy(BSTR v);                                              \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIABUSY), displaybind, bindable] \\\n    BSTR ariaBusy();                                                    \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIACHECKED), displaybind, bindable] \\\n    void ariaChecked(BSTR v);                                           \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIACHECKED), displaybind, bindable] \\\n    BSTR ariaChecked();                                                 \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIADISABLED), displaybind, bindable] \\\n    void ariaDisabled(BSTR v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIADISABLED), displaybind, bindable] \\\n    BSTR ariaDisabled();                                                \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIAEXPANDED), displaybind, bindable] \\\n    void ariaExpanded(BSTR v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIAEXPANDED), displaybind, bindable] \\\n    BSTR ariaExpanded();                                                \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIAHASPOPUP), displaybind, bindable]\\\n    void ariaHaspopup(BSTR v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIAHASPOPUP), displaybind, bindable] \\\n    BSTR ariaHaspopup();                                                \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIAHIDDEN), displaybind, bindable] \\\n    void ariaHidden(BSTR v);                                            \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIAHIDDEN), displaybind, bindable] \\\n    BSTR ariaHidden();                                                  \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIAINVALID), displaybind, bindable] \\\n    void ariaInvalid(BSTR v);                                           \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIAINVALID), displaybind, bindable] \\\n    BSTR ariaInvalid();                                                 \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIAMULTISELECTABLE), displaybind, bindable] \\\n    void ariaMultiselectable(BSTR v);                                   \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIAMULTISELECTABLE), displaybind, bindable] \\\n    BSTR ariaMultiselectable();                                         \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIAPRESSED), displaybind, bindable] \\\n    void ariaPressed(BSTR v);                                           \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIAPRESSED), displaybind, bindable] \\\n    BSTR ariaPressed();                                                 \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIAREADONLY), displaybind, bindable] \\\n    void ariaReadonly(BSTR v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIAREADONLY), displaybind, bindable] \\\n    BSTR ariaReadonly();                                                \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIAREQUIRED), displaybind, bindable] \\\n    void ariaRequired(BSTR v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIAREQUIRED), displaybind, bindable] \\\n    BSTR ariaRequired();                                                \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIASECRET), displaybind, bindable] \\\n    void ariaSecret(BSTR v);                                            \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIASECRET), displaybind, bindable] \\\n    BSTR ariaSecret();                                                  \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIASELECTED), displaybind, bindable] \\\n    void ariaSelected(BSTR v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIASELECTED), displaybind, bindable] \\\n    BSTR ariaSelected();                                                \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT5_IE8_GETATTRIBUTE)]                         \\\n    VARIANT ie8_getAttribute([in] BSTR strAttributeName);               \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT5_IE8_SETATTRIBUTE)]                         \\\n    void ie8_setAttribute([in] BSTR strAttributeName,[in] VARIANT AttributeValue); \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT5_IE8_REMOVEATTRIBUTE)]                      \\\n    VARIANT_BOOL ie8_removeAttribute([in] BSTR strAttributeName);       \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_IE8_ATTRIBUTES)]                  \\\n    IHTMLAttributeCollection3 *ie8_attributes();                        \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIAVALUENOW), displaybind, bindable] \\\n    void ariaValuenow(BSTR v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIAVALUENOW), displaybind, bindable] \\\n    BSTR ariaValuenow();                                                \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIAPOSINSET), displaybind, bindable] \\\n    void ariaPosinset(short v);                                         \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIAPOSINSET), displaybind, bindable] \\\n    short ariaPosinset();                                               \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIASETSIZE), displaybind, bindable] \\\n    void ariaSetsize(short v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIASETSIZE), displaybind, bindable] \\\n    short ariaSetsize();                                                \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIALEVEL), displaybind, bindable]\\\n    void ariaLevel(short v);                                            \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIALEVEL), displaybind, bindable]\\\n    short ariaLevel();                                                  \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIAVALUEMIN), displaybind, bindable] \\\n    void ariaValuemin(BSTR v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIAVALUEMIN), displaybind, bindable] \\\n    BSTR ariaValuemin();                                                \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIAVALUEMAX), displaybind, bindable] \\\n    void ariaValuemax(BSTR v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIAVALUEMAX), displaybind, bindable] \\\n    BSTR ariaValuemax();                                                \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIACONTROLS), displaybind, bindable] \\\n    void ariaControls(BSTR v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIACONTROLS), displaybind, bindable] \\\n    BSTR ariaControls();                                                \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIADESCRIBEDBY), displaybind, bindable] \\\n    void ariaDescribedby(BSTR v);                                       \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIADESCRIBEDBY), displaybind, bindable] \\\n    BSTR ariaDescribedby();                                             \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIAFLOWTO), displaybind, bindable] \\\n    void ariaFlowto(BSTR v);                                            \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIAFLOWTO), displaybind, bindable] \\\n    BSTR ariaFlowto();                                                  \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIALABELLEDBY), displaybind, bindable] \\\n    void ariaLabelledby(BSTR v);                                        \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIALABELLEDBY), displaybind, bindable] \\\n    BSTR ariaLabelledby();                                              \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIAACTIVEDESCENDANT), displaybind, bindable] \\\n    void ariaActivedescendant(BSTR v);                                  \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIAACTIVEDESCENDANT), displaybind, bindable] \\\n    BSTR ariaActivedescendant();                                        \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIAOWNS), displaybind, bindable] \\\n    void ariaOwns(BSTR v);                                              \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIAOWNS), displaybind, bindable] \\\n    BSTR ariaOwns();                                                    \\\n                                                                        \\\n    [id(DISPID_IHTMLELEMENT5_HASATTRIBUTES)]                            \\\n    VARIANT_BOOL hasAttributes();                                       \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIALIVE), displaybind, bindable] \\\n    void ariaLive(BSTR v);                                              \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIALIVE), displaybind, bindable] \\\n    BSTR ariaLive();                                                    \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLELEMENT5_ARIARELEVANT), displaybind, bindable] \\\n    void ariaRelevant(BSTR v);                                          \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLELEMENT5_ARIARELEVANT), displaybind, bindable] \\\n    BSTR ariaRelevant()\n\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f3f2-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLDatabinding : IDispatch\n{\n    [propput, id(DISPID_IHTMLDATABINDING_DATAFLD)]\n    HRESULT dataFld([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLDATABINDING_DATAFLD)]\n    HRESULT dataFld([retval, out] BSTR * p);\n\n    [propput, id(DISPID_IHTMLDATABINDING_DATASRC)]\n    HRESULT dataSrc([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLDATABINDING_DATASRC)]\n    HRESULT dataSrc([retval, out] BSTR * p);\n\n    [propput, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)]\n    HRESULT dataFormatAs([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)]\n    HRESULT dataFormatAs([retval, out] BSTR * p);\n}\n\n#define WINE_IHTMLDATABINDING_DISPINTERFACE_DECL        \\\n    [propput, id(DISPID_IHTMLDATABINDING_DATAFLD)]      \\\n    void dataFld(BSTR v);                               \\\n                                                        \\\n    [propget, id(DISPID_IHTMLDATABINDING_DATAFLD)]      \\\n    BSTR dataFld();                                     \\\n                                                        \\\n    [propput, id(DISPID_IHTMLDATABINDING_DATASRC)]      \\\n    void dataSrc(BSTR v);                               \\\n                                                        \\\n    [propget, id(DISPID_IHTMLDATABINDING_DATASRC)]      \\\n    BSTR dataSrc();                                     \\\n                                                        \\\n    [propput, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)] \\\n    void dataFormatAs(BSTR v);                          \\\n                                                        \\\n    [propget, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)] \\\n    BSTR dataFormatAs()\n\n#define WINE_HTMLELEMENT_INTERFACES             \\\n    interface IHTMLElement;                     \\\n    interface IHTMLElement2;                    \\\n    interface IHTMLElement3;                    \\\n    interface IHTMLElement4;                    \\\n    interface IHTMLUniqueName;                  \\\n    interface IHTMLDOMNode;                     \\\n    interface IHTMLDOMNode2;                    \\\n /* interface IHTMLElement5; */                 \\\n    interface IHTMLElement6;                    \\\n    interface IHTMLDOMConstructor               \\\n /* interface IHTMLElement7 */\n\n#define WINE_HTMLELEMENT_DISPINTERFACE_DECL     \\\n    WINE_IHTMLELEMENT_DISPINTERFACE_DECL;       \\\n    WINE_IHTMLELEMENT2_DISPINTERFACE_DECL;      \\\n    WINE_IHTMLELEMENT3_DISPINTERFACE_DECL;      \\\n    WINE_IHTMLELEMENT4_DISPINTERFACE_DECL;      \\\n    WINE_IHTMLUNIQUENAME_DISPINTERFACE_DECL;    \\\n    WINE_HTMLDOMNODE_DISPINTERFACE_DECL;        \\\n    WINE_IHTMLELEMENT5_DISPINTERFACE_DECL;      \\\n    WINE_IHTMLELEMENT6_DISPINTERFACE_DECL;      \\\n    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL\n\n#define WINE_HTMLDATAELEMENT_INTERFACES         \\\n    interface IHTMLElement;                     \\\n    interface IHTMLElement2;                    \\\n    interface IHTMLElement3;                    \\\n    interface IHTMLElement4;                    \\\n    interface IHTMLUniqueName;                  \\\n    interface IHTMLDOMNode;                     \\\n    interface IHTMLDOMNode2;                    \\\n    interface IHTMLDatabinding;                 \\\n /* interface IHTMLElement5; */                 \\\n    interface IHTMLElement6;                    \\\n    interface IElementSelector;                 \\\n    interface IHTMLDOMConstructor               \\\n /* interface IHTMLElement7 */\n\n#define WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL \\\n    WINE_IHTMLELEMENT_DISPINTERFACE_DECL;       \\\n    WINE_IHTMLELEMENT2_DISPINTERFACE_DECL;      \\\n    WINE_IHTMLELEMENT3_DISPINTERFACE_DECL;      \\\n    WINE_IHTMLELEMENT4_DISPINTERFACE_DECL;      \\\n    WINE_IHTMLUNIQUENAME_DISPINTERFACE_DECL;    \\\n    WINE_HTMLDOMNODE_DISPINTERFACE_DECL;        \\\n    WINE_IHTMLDATABINDING_DISPINTERFACE_DECL;   \\\n    WINE_IHTMLELEMENT5_DISPINTERFACE_DECL;      \\\n    WINE_IHTMLELEMENT6_DISPINTERFACE_DECL;      \\\n    WINE_IELEMENTSELECTOR_DISPINTERFACE_DECL;   \\\n    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL\n\n/*****************************************************************************\n *    IHTMLGenericElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f4b7-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLGenericElement : IDispatch\n{\n    [propget, id(DISPID_IHTMLGENERICELEMENT_RECORDSET), hidden]\n    HRESULT recordset([out, retval] IDispatch **p);\n\n    [id(DISPID_IHTMLGENERICELEMENT_NAMEDRECORDSET)]\n    HRESULT namedRecordset(\n            [in] BSTR dataMember,\n            [in, optional] VARIANT *hierarchy,\n            [out, retval] IDispatch **ppRecordset);\n}\n\n/*****************************************************************************\n *    DispHTMLGenericElement dispinterface\n */\n[\n    hidden,\n    uuid(3050f563-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLGenericElement\n{\nproperties:\nmethods:\n    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;\n\n    [propget, id(DISPID_IHTMLGENERICELEMENT_RECORDSET), hidden]\n    IDispatch *recordset();\n\n    [id(DISPID_IHTMLGENERICELEMENT_NAMEDRECORDSET)]\n    IDispatch *namedRecordset(\n            [in] BSTR dataMember,\n            [in, optional] VARIANT *hierarchy);\n}\n\n/*****************************************************************************\n *    HTMLGenericElement coclass\n */\n[\n    noncreatable,\n    uuid(3050f4b8-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLGenericElement\n{\n    [default]         dispinterface DispHTMLGenericElement;\n    [source, default] dispinterface HTMLElementEvents;\n    [source]          dispinterface HTMLElementEvents2;\n    WINE_HTMLELEMENT_INTERFACES;\n    interface IHTMLGenericElement;\n}\n\n/*****************************************************************************\n *    IHTMLStyleSheetRule interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050F357-98B5-11CF-BB82-00AA00BDCE0B)\n]\ninterface IHTMLStyleSheetRule : IDispatch\n{\n    [propput, id(DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT)]\n    HRESULT selectorText([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT)]\n    HRESULT selectorText([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLSTYLESHEETRULE_STYLE)]\n    HRESULT style([retval, out] IHTMLRuleStyle **p);\n\n    [propget, id(DISPID_IHTMLSTYLESHEETRULE_READONLY)]\n    HRESULT readOnly([retval, out] VARIANT_BOOL *p);\n}\n\n[\n    hidden,\n    uuid(3050f50e-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLStyleSheetRule\n{\nproperties:\nmethods:\n    [propput, id(DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT)]\n    void selectorText(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT)]\n    BSTR selectorText();\n\n    [propget, id(DISPID_IHTMLSTYLESHEETRULE_STYLE), nonbrowsable]\n    IHTMLRuleStyle* style();\n\n    [propget, id(DISPID_IHTMLSTYLESHEETRULE_READONLY)]\n    VARIANT_BOOL readOnly();\n\n    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;\n}\n\n[\n    noncreatable,\n    uuid(3050f3ce-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLStyleSheetRule\n{\n    [default]           dispinterface DispHTMLStyleSheetRule;\n                        interface IHTMLStyleSheetRule;\n                        interface IHTMLDOMConstructor;\n}\n\n/*****************************************************************************\n *    IHTMLStyleSheetRulesCollection interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050F2E5-98B5-11Cf-BB82-00AA00BDCE0B)\n]\ninterface IHTMLStyleSheetRulesCollection : IDispatch\n{\n    [propget, id(DISPID_IHTMLSTYLESHEETRULESCOLLECTION_LENGTH)]\n    HRESULT length([retval, out] LONG *p);\n\n    [id(DISPID_IHTMLSTYLESHEETRULESCOLLECTION_ITEM)]\n    HRESULT item(\n        [in] LONG index,\n        [retval, out] IHTMLStyleSheetRule **ppHTMLStyleSheetRule);\n}\n\n[\n    hidden,\n    uuid(3050f52f-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLStyleSheetRulesCollection\n{\nproperties:\nmethods:\n    [propget, id(DISPID_IHTMLSTYLESHEETRULESCOLLECTION_LENGTH)]\n    long length();\n\n    [id(DISPID_IHTMLSTYLESHEETRULESCOLLECTION_ITEM)]\n    IHTMLStyleSheetRule* item([in] long index);\n\n    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;\n}\n\n[\n    noncreatable,\n    uuid(3050f3cd-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLStyleSheetRulesCollection\n{\n    [default]           dispinterface DispHTMLStyleSheetRulesCollection;\n                        interface IHTMLStyleSheetRulesCollection;\n                        interface IHTMLDOMConstructor;\n}\n\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f7ee-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLStyleSheetPage : IDispatch\n{\n    [propget, id(DISPID_IHTMLSTYLESHEETPAGE_SELECTOR)]\n    HRESULT selector([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLSTYLESHEETPAGE_PSEUDOCLASS)]\n    HRESULT pseudoClass([retval, out] BSTR *p);\n}\n\n[\n    hidden,\n    uuid(3050f540-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLStyleSheetPage\n{\nproperties:\nmethods:\n    [propget, id(DISPID_IHTMLSTYLESHEETPAGE_SELECTOR)]\n    BSTR selector();\n\n    [propget, id(DISPID_IHTMLSTYLESHEETPAGE_PSEUDOCLASS)]\n    BSTR pseudoClass();\n\n    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;\n}\n[\n    noncreatable,\n    uuid(3050f7ef-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLStyleSheetPage\n{\n    [default]           dispinterface DispHTMLStyleSheetPage;\n                        interface IHTMLStyleSheetPage;\n                        interface IHTMLDOMConstructor;\n}\n\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f7f0-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLStyleSheetPagesCollection : IDispatch\n{\n    [propget, id(DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_LENGTH)]\n    HRESULT length([retval, out] LONG *p);\n\n    [id(DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_ITEM)]\n    HRESULT item(\n        [in] LONG index,\n        [retval, out] IHTMLStyleSheetPage **ppHTMLStyleSheetPage);\n}\n\n[\n    hidden,\n    uuid(3050f543-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLStyleSheetPagesCollection\n{\nproperties:\nmethods:\n    [propget, id(DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_LENGTH)]\n    long length();\n\n    [id(DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_ITEM)]\n    IHTMLStyleSheetPage* item([in] long index);\n\n    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;\n}\n\n[\n    noncreatable,\n    uuid(3050f7f1-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLStyleSheetPagesCollection\n{\n    [default]           dispinterface DispHTMLStyleSheetPagesCollection;\n                        interface IHTMLStyleSheetPagesCollection;\n                        interface IHTMLDOMConstructor;\n}\n\n/*****************************************************************************\n *    IHTMLStyleSheet interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050F2E3-98B5-11CF-BB82-00AA00BDCE0B)\n]\ninterface IHTMLStyleSheet : IDispatch\n{\n    [propput, id(DISPID_IHTMLSTYLESHEET_TITLE)]\n    HRESULT title([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLESHEET_TITLE)]\n    HRESULT title([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLSTYLESHEET_PARENTSTYLESHEET)]\n    HRESULT parentStyleSheet([retval, out] IHTMLStyleSheet **p);\n\n    [propget, id(DISPID_IHTMLSTYLESHEET_OWNINGELEMENT)]\n    HRESULT owningElement([retval, out] IHTMLElement **p);\n\n    [propput, id(DISPID_IHTMLSTYLESHEET_DISABLED)]\n    HRESULT disabled([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLSTYLESHEET_DISABLED)]\n    HRESULT disabled([retval, out] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IHTMLSTYLESHEET_READONLY)]\n    HRESULT readOnly([retval, out] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IHTMLSTYLESHEET_IMPORTS)]\n    HRESULT imports([retval, out] IHTMLStyleSheetsCollection **p);\n\n    [propput, id(DISPID_IHTMLSTYLESHEET_HREF)]\n    HRESULT href([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLESHEET_HREF)]\n    HRESULT href([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLSTYLESHEET_TYPE)]\n    HRESULT type([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLSTYLESHEET_ID)]\n    HRESULT id([retval, out] BSTR *p);\n\n    [id(DISPID_IHTMLSTYLESHEET_ADDIMPORT)]\n    HRESULT addImport(\n        [in] BSTR bstrURL,\n        [defaultvalue(-1), in] LONG lIndex,\n        [retval, out] LONG *plIndex);\n\n    [id(DISPID_IHTMLSTYLESHEET_ADDRULE)]\n    HRESULT addRule(\n        [in] BSTR bstrSelector,\n        [in] BSTR bstrStyle,\n        [defaultvalue(-1), in] LONG lIndex,\n        [retval, out] LONG *plNewIndex);\n\n    [id(DISPID_IHTMLSTYLESHEET_REMOVEIMPORT)]\n    HRESULT removeImport([in] LONG lIndex);\n\n    [id(DISPID_IHTMLSTYLESHEET_REMOVERULE)]\n    HRESULT removeRule([in] LONG lIndex);\n\n    [propput, id(DISPID_IHTMLSTYLESHEET_MEDIA)]\n    HRESULT media([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLESHEET_MEDIA)]\n    HRESULT media([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLESHEET_CSSTEXT)]\n    HRESULT cssText([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLESHEET_CSSTEXT)]\n    HRESULT cssText([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLSTYLESHEET_RULES)]\n    HRESULT rules([retval, out] IHTMLStyleSheetRulesCollection **p);\n}\n\n/*****************************************************************************\n *    IHTMLStyleSheet2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f3d1-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLStyleSheet2 : IDispatch\n{\n    [propget, id(DISPID_IHTMLSTYLESHEET2_PAGES)]\n    HRESULT pages([retval, out] IHTMLStyleSheetPagesCollection **p);\n\n    [id(DISPID_IHTMLSTYLESHEET2_ADDPAGERULE)]\n    HRESULT addPageRule(\n        [in] BSTR bstrSelector,\n        [in] BSTR bstrStyle,\n        [defaultvalue(-1), in] LONG lIndex,\n        [retval, out] LONG *plNewIndex);\n}\n\n[\n    hidden,\n    uuid(3050f58d-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLStyleSheet\n{\nproperties:\nmethods:\n    [propput, id(DISPID_IHTMLSTYLESHEET_TITLE)]\n    void title(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLESHEET_TITLE)]\n    BSTR title();\n\n    [propget, id(DISPID_IHTMLSTYLESHEET_PARENTSTYLESHEET)]\n    IHTMLStyleSheet* parentStyleSheet();\n\n    [propget, id(DISPID_IHTMLSTYLESHEET_OWNINGELEMENT)]\n    IHTMLElement* owningElement();\n\n    [propput, id(DISPID_IHTMLSTYLESHEET_DISABLED)]\n    void disabled(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLSTYLESHEET_DISABLED)]\n    VARIANT_BOOL disabled();\n\n    [propget, id(DISPID_IHTMLSTYLESHEET_READONLY)]\n    VARIANT_BOOL readOnly();\n\n    [propget, id(DISPID_IHTMLSTYLESHEET_IMPORTS)]\n    IHTMLStyleSheetsCollection* imports();\n\n    [propput, id(DISPID_IHTMLSTYLESHEET_HREF)]\n    void href(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLESHEET_HREF)]\n    BSTR href();\n\n    [propget, id(DISPID_IHTMLSTYLESHEET_TYPE)]\n    BSTR type();\n\n    [propget, id(DISPID_IHTMLSTYLESHEET_ID)]\n    BSTR id();\n\n    [id(DISPID_IHTMLSTYLESHEET_ADDIMPORT)]\n    LONG addImport(\n        [in] BSTR bstrURL,\n        [defaultvalue(-1), in] LONG lIndex);\n\n    [id(DISPID_IHTMLSTYLESHEET_ADDRULE)]\n    LONG addRule(\n        [in] BSTR bstrSelector,\n        [in] BSTR bstrStyle,\n        [defaultvalue(-1), in] LONG lIndex);\n\n    [id(DISPID_IHTMLSTYLESHEET_REMOVEIMPORT)]\n    void removeImport([in] LONG lIndex);\n\n    [id(DISPID_IHTMLSTYLESHEET_REMOVERULE)]\n    void removeRule([in] LONG lIndex);\n\n    [propput, id(DISPID_IHTMLSTYLESHEET_MEDIA)]\n    void media(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLESHEET_MEDIA)]\n    BSTR media();\n\n    [propput, id(DISPID_IHTMLSTYLESHEET_CSSTEXT)]\n    void cssText(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLESHEET_CSSTEXT)]\n    BSTR cssText();\n\n    [propget, id(DISPID_IHTMLSTYLESHEET_RULES)]\n    IHTMLStyleSheetRulesCollection* rules();\n\n    [propget, id(DISPID_IHTMLSTYLESHEET2_PAGES)]\n    IHTMLStyleSheetPagesCollection* pages();\n\n    [id(DISPID_IHTMLSTYLESHEET2_ADDPAGERULE)]\n    LONG addPageRule(\n        [in] BSTR bstrSelector,\n        [in] BSTR bstrStyle,\n        [defaultvalue(-1), in] LONG lIndex);\n}\n\n[\n    noncreatable,\n    uuid(3050f2e4-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLStyleSheet\n{\n    [default]           dispinterface DispHTMLStyleSheet;\n                        interface IHTMLStyleSheet;\n                        interface IHTMLStyleSheet2;\n}\n\n/*****************************************************************************\n *    IHTMLStyleSheetsCollection interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050F37E-98B5-11CF-BB82-00AA00BDCE0B)\n]\ninterface IHTMLStyleSheetsCollection : IDispatch\n{\n    [propget, id(DISPID_IHTMLSTYLESHEETSCOLLECTION_LENGTH)]\n    HRESULT length([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLSTYLESHEETSCOLLECTION__NEWENUM)]\n    HRESULT _newEnum([retval, out] IUnknown **p);\n\n    [id(DISPID_IHTMLSTYLESHEETSCOLLECTION_ITEM)]\n    HRESULT item(\n        [in] VARIANT *pvarIndex,\n        [retval, out] VARIANT *pvarResult);\n}\n\n/*****************************************************************************\n *    DispHTMLStyleSheetsCollection dispinterface\n */\n[\n    hidden,\n    uuid(3050f547-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLStyleSheetsCollection\n{\nproperties:\nmethods:\n    [propget, id(DISPID_IHTMLSTYLESHEETSCOLLECTION_LENGTH)]\n    long length();\n\n    [propget, id(DISPID_IHTMLSTYLESHEETSCOLLECTION__NEWENUM), hidden, restricted]\n    IUnknown *_newEnum();\n\n    [id(DISPID_IHTMLSTYLESHEETSCOLLECTION_ITEM)]\n    VARIANT item([in] VARIANT *pvarIndex);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]\n    IDispatch *constructor();\n}\n\n/*****************************************************************************\n *    IHTMLLinkElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f205-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLLinkElement : IDispatch\n{\n    [propput, id(DISPID_IHTMLLINKELEMENT_HREF), displaybind, bindable]\n    HRESULT href([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT_HREF), displaybind, bindable]\n    HRESULT href([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLLINKELEMENT_REL), displaybind, bindable]\n    HRESULT rel([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT_REL), displaybind, bindable]\n    HRESULT rel([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLLINKELEMENT_REV), displaybind, bindable]\n    HRESULT rev([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT_REV), displaybind, bindable]\n    HRESULT rev([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLLINKELEMENT_TYPE), displaybind, bindable]\n    HRESULT type([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT_TYPE), displaybind, bindable]\n    HRESULT type([out, retval] BSTR *p);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT_READYSTATE)]\n    HRESULT readyState([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLLINKELEMENT_ONREADYSTATECHANGE), displaybind, bindable]\n    HRESULT onreadystatechange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT_ONREADYSTATECHANGE), displaybind, bindable]\n    HRESULT onreadystatechange([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLLINKELEMENT_ONLOAD), displaybind, bindable]\n    HRESULT onload([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT_ONLOAD), displaybind, bindable]\n    HRESULT onload([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLLINKELEMENT_ONERROR), displaybind, bindable]\n    HRESULT onerror([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT_ONERROR), displaybind, bindable]\n    HRESULT onerror([out, retval] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT_STYLESHEET)]\n    HRESULT styleSheet([out, retval] IHTMLStyleSheet **p);\n\n    [propput, id(DISPID_IHTMLLINKELEMENT_DISABLED), displaybind, bindable]\n    HRESULT disabled([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT_DISABLED), displaybind, bindable]\n    HRESULT disabled([out, retval] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLLINKELEMENT_MEDIA), displaybind, bindable]\n    HRESULT media([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT_MEDIA), displaybind, bindable]\n    HRESULT media([out, retval] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLLinkElement2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f4e5-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLLinkElement2 : IDispatch\n{\n    [propput, id(DISPID_IHTMLLINKELEMENT2_TARGET), displaybind, bindable]\n    HRESULT target([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT2_TARGET), displaybind, bindable]\n    HRESULT target([out, retval] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLLinkElement3 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f81e-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLLinkElement3 : IDispatch\n{\n    [propput, id(DISPID_IHTMLLINKELEMENT3_CHARSET), displaybind, bindable]\n    HRESULT charset([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT3_CHARSET), displaybind, bindable]\n    HRESULT charset([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLLINKELEMENT3_HREFLANG), displaybind, bindable]\n    HRESULT hreflang([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT3_HREFLANG), displaybind, bindable]\n    HRESULT hreflang([out, retval] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLLinkElement4 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3051043a-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLLinkElement4 : IDispatch\n{\n    [propput, id(DISPID_IHTMLLINKELEMENT4_IE8_HREF)]\n    HRESULT href([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT4_IE8_HREF)]\n    HRESULT href([retval, out] BSTR * p);\n}\n\n/*****************************************************************************\n *    DispHTMLLinkElement dispinterface\n */\n[\n    hidden,\n    uuid(3050f524-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLLinkElement\n{\nproperties:\nmethods:\n    WINE_HTMLELEMENT_DISPINTERFACE_DECL;\n\n    [propput, id(DISPID_IHTMLLINKELEMENT_HREF), displaybind, bindable]\n    void href(BSTR v);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT_HREF), displaybind, bindable]\n    BSTR href();\n\n    [propput, id(DISPID_IHTMLLINKELEMENT_REL), displaybind, bindable]\n    void rel(BSTR v);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT_REL), displaybind, bindable]\n    BSTR rel();\n\n    [propput, id(DISPID_IHTMLLINKELEMENT_REV), displaybind, bindable]\n    void rev(BSTR v);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT_REV), displaybind, bindable]\n    BSTR rev();\n\n    [propput, id(DISPID_IHTMLLINKELEMENT_TYPE), displaybind, bindable]\n    void type(BSTR v);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT_TYPE), displaybind, bindable]\n    BSTR type();\n\n    [propput, id(DISPID_IHTMLLINKELEMENT_ONLOAD), displaybind, bindable]\n    void onload(VARIANT v);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT_ONLOAD), displaybind, bindable]\n    VARIANT onload();\n\n    [propput, id(DISPID_IHTMLLINKELEMENT_ONERROR), displaybind, bindable]\n    void onerror(VARIANT v);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT_ONERROR), displaybind, bindable]\n    VARIANT onerror();\n\n    [propget, id(DISPID_IHTMLLINKELEMENT_STYLESHEET)]\n    IHTMLStyleSheet *styleSheet();\n\n    [propput, id(DISPID_IHTMLLINKELEMENT_MEDIA), displaybind, bindable]\n    void media(BSTR v);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT_MEDIA), displaybind, bindable]\n    BSTR media();\n\n    [propput, id(DISPID_IHTMLLINKELEMENT2_TARGET), displaybind, bindable]\n    void target(BSTR v);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT2_TARGET), displaybind, bindable]\n    BSTR target();\n\n    [propput, id(DISPID_IHTMLLINKELEMENT3_CHARSET), displaybind, bindable]\n    void charset(BSTR v);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT3_CHARSET), displaybind, bindable]\n    BSTR charset();\n\n    [propput, id(DISPID_IHTMLLINKELEMENT3_HREFLANG), displaybind, bindable]\n    void hreflang(BSTR v);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT3_HREFLANG), displaybind, bindable]\n    BSTR hreflang();\n\n    [propput, id(DISPID_IHTMLLINKELEMENT4_IE8_HREF)]\n    void ie8_href(BSTR v);\n\n    [propget, id(DISPID_IHTMLLINKELEMENT4_IE8_HREF)]\n    BSTR ie8_href();\n}\n\n/*****************************************************************************\n *    HTMLLinkElement coclass\n */\n[\n    noncreatable,\n    uuid(3050f277-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLLinkElement\n{\n    [default]         dispinterface DispHTMLLinkElement;\n /* [source, default] dispinterface HTMLLinkElementEvents; */\n /* [source]          dispinterface HTMLLinkElementEvents2; */\n    WINE_HTMLELEMENT_INTERFACES;\n    interface IHTMLLinkElement;\n    interface IHTMLLinkElement2;\n    interface IHTMLLinkElement3;\n    interface IHTMLLinkElement4;\n /* interface IHTMLLinkElement5; */\n}\n\n/*****************************************************************************\n *    IHTMLTxtRange interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f220-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLTxtRange : IDispatch\n{\n    [propget, id(DISPID_IHTMLTXTRANGE_HTMLTEXT)]\n    HRESULT htmlText([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLTXTRANGE_TEXT)]\n    HRESULT text([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLTXTRANGE_TEXT)]\n    HRESULT text([retval, out] BSTR *p);\n\n    [id(DISPID_IHTMLTXTRANGE_PARENTELEMENT)]\n    HRESULT parentElement([retval, out] IHTMLElement **parent);\n\n    [id(DISPID_IHTMLTXTRANGE_DUPLICATE)]\n    HRESULT duplicate([retval, out] IHTMLTxtRange **Duplicate);\n\n    [id(DISPID_IHTMLTXTRANGE_INRANGE)]\n    HRESULT inRange(\n        [in] IHTMLTxtRange *Range,\n        [retval, out] VARIANT_BOOL *InRange);\n\n    [id(DISPID_IHTMLTXTRANGE_ISEQUAL)]\n    HRESULT isEqual(\n        [in] IHTMLTxtRange *Range,\n        [retval, out] VARIANT_BOOL *IsEqual);\n\n    [id(DISPID_IHTMLTXTRANGE_SCROLLINTOVIEW)]\n    HRESULT scrollIntoView([defaultvalue(-1), in] VARIANT_BOOL fStart);\n\n    [id(DISPID_IHTMLTXTRANGE_COLLAPSE)]\n    HRESULT collapse([defaultvalue(-1), in] VARIANT_BOOL Start);\n\n    [id(DISPID_IHTMLTXTRANGE_EXPAND)]\n    HRESULT expand(\n        [in] BSTR Unit,\n        [retval, out] VARIANT_BOOL *Success);\n\n    [id(DISPID_IHTMLTXTRANGE_MOVE)]\n    HRESULT move(\n        [in] BSTR Unit,\n        [defaultvalue(1), in] LONG Count,\n        [retval, out] LONG *ActualCount);\n\n    [id(DISPID_IHTMLTXTRANGE_MOVESTART)]\n    HRESULT moveStart(\n        [in] BSTR Unit,\n        [defaultvalue(1), in] LONG Count,\n        [retval, out] LONG *ActualCount);\n\n    [id(DISPID_IHTMLTXTRANGE_MOVEEND)]\n    HRESULT moveEnd(\n        [in] BSTR Unit,\n        [defaultvalue(1), in] LONG Count,\n        [retval, out] LONG *ActualCount);\n\n    [id(DISPID_IHTMLTXTRANGE_SELECT)]\n    HRESULT select();\n\n    [id(DISPID_IHTMLTXTRANGE_PASTEHTML)]\n    HRESULT pasteHTML([in] BSTR html);\n\n    [id(DISPID_IHTMLTXTRANGE_MOVETOELEMENTTEXT)]\n    HRESULT moveToElementText([in] IHTMLElement *element);\n\n    [id(DISPID_IHTMLTXTRANGE_SETENDPOINT)]\n    HRESULT setEndPoint(\n        [in] BSTR how,\n        [in] IHTMLTxtRange *SourceRange);\n\n    [id(DISPID_IHTMLTXTRANGE_COMPAREENDPOINTS)]\n    HRESULT compareEndPoints(\n        [in] BSTR how,\n        [in] IHTMLTxtRange *SourceRange,\n        [retval, out] LONG *ret);\n\n    [id(DISPID_IHTMLTXTRANGE_FINDTEXT)]\n    HRESULT findText(\n        [in] BSTR String,\n        [defaultvalue(1073741823), in] LONG count,\n        [defaultvalue(0), in] LONG Flags,\n        [retval, out] VARIANT_BOOL *Success);\n\n    [id(DISPID_IHTMLTXTRANGE_MOVETOPOINT)]\n    HRESULT moveToPoint(\n        [in] LONG x,\n        [in] LONG y);\n\n    [id(DISPID_IHTMLTXTRANGE_GETBOOKMARK)]\n    HRESULT getBookmark([retval, out] BSTR *Boolmark);\n\n    [id(DISPID_IHTMLTXTRANGE_MOVETOBOOKMARK)]\n    HRESULT moveToBookmark(\n        [in] BSTR Bookmark,\n        [retval, out] VARIANT_BOOL *Success);\n\n    [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDSUPPORTED)]\n    HRESULT queryCommandSupported(\n        [in] BSTR cmdID,\n        [retval, out] VARIANT_BOOL *pfRet);\n\n    [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDENABLED)]\n    HRESULT queryCommandEnabled(\n        [in] BSTR cmdID,\n        [retval, out] VARIANT_BOOL *pfRet);\n\n    [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDSTATE)]\n    HRESULT queryCommandState(\n        [in] BSTR cmdID,\n        [retval, out] VARIANT_BOOL *pfRet);\n\n    [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDINDETERM)]\n    HRESULT queryCommandIndeterm(\n        [in] BSTR cmdID,\n        [retval, out] VARIANT_BOOL *pfRet);\n\n    [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDTEXT)]\n    HRESULT queryCommandText(\n        [in] BSTR cmdID,\n        [retval, out] BSTR *pcmdText);\n\n    [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDVALUE)]\n    HRESULT queryCommandValue(\n        [in] BSTR cmdID,\n        [retval, out] VARIANT *pcmdValue);\n\n    [id(DISPID_IHTMLTXTRANGE_EXECCOMMAND)]\n    HRESULT execCommand(\n        [in] BSTR cmdID,\n        [defaultvalue(0), in] VARIANT_BOOL showUI,\n        [optional, in] VARIANT value,\n        [retval, out] VARIANT_BOOL *pfRet);\n\n    [id(DISPID_IHTMLTXTRANGE_EXECCOMMANDSHOWHELP)]\n    HRESULT execCommandShowHelp(\n        [in] BSTR cmdID,\n        [retval, out] VARIANT_BOOL *pfRet);\n}\n\n/*****************************************************************************\n *    IHTMLDOMRange interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(305104ae-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLDOMRange : IDispatch\n{\n    [propget, id(DISPID_IHTMLDOMRANGE_STARTCONTAINER)]\n    HRESULT startContainer([out, retval] IHTMLDOMNode **p);\n\n    [propget, id(DISPID_IHTMLDOMRANGE_STARTOFFSET)]\n    HRESULT startOffset([out, retval] long *p);\n\n    [propget, id(DISPID_IHTMLDOMRANGE_ENDCONTAINER)]\n    HRESULT endContainer([out, retval] IHTMLDOMNode **p);\n\n    [propget, id(DISPID_IHTMLDOMRANGE_ENDOFFSET)]\n    HRESULT endOffset([out, retval] long *p);\n\n    [propget, id(DISPID_IHTMLDOMRANGE_COLLAPSED)]\n    HRESULT collapsed([out, retval] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IHTMLDOMRANGE_COMMONANCESTORCONTAINER)]\n    HRESULT commonAncestorContainer([out, retval] IHTMLDOMNode **p);\n\n    [id(DISPID_IHTMLDOMRANGE_SETSTART)]\n    HRESULT setStart(\n        [in] IDispatch *refNode,\n        [in] long offset);\n\n    [id(DISPID_IHTMLDOMRANGE_SETEND)] HRESULT\n    setEnd(\n        [in] IDispatch *refNode,\n        [in] long offset);\n\n    [id(DISPID_IHTMLDOMRANGE_SETSTARTBEFORE)]\n    HRESULT setStartBefore([in] IDispatch* refNode);\n\n    [id(DISPID_IHTMLDOMRANGE_SETSTARTAFTER)]\n    HRESULT setStartAfter([in] IDispatch *refNode);\n\n    [id(DISPID_IHTMLDOMRANGE_SETENDBEFORE)]\n    HRESULT setEndBefore([in] IDispatch *refNode);\n\n    [id(DISPID_IHTMLDOMRANGE_SETENDAFTER)]\n    HRESULT setEndAfter([in] IDispatch *refNode);\n\n    [id(DISPID_IHTMLDOMRANGE_COLLAPSE)]\n    HRESULT collapse([in] VARIANT_BOOL toStart);\n\n    [id(DISPID_IHTMLDOMRANGE_SELECTNODE)]\n    HRESULT selectNode([in] IDispatch *refNode);\n\n    [id(DISPID_IHTMLDOMRANGE_SELECTNODECONTENTS)]\n    HRESULT selectNodeContents([in] IDispatch *refNode);\n\n    [id(DISPID_IHTMLDOMRANGE_COMPAREBOUNDARYPOINTS)]\n    HRESULT compareBoundaryPoints(\n        [in] short how,\n        [in] IDispatch *sourceRange,\n        [out, retval] long *compareResult);\n\n    [id(DISPID_IHTMLDOMRANGE_DELETECONTENTS)]\n    HRESULT deleteContents();\n\n    [id(DISPID_IHTMLDOMRANGE_EXTRACTCONTENTS)]\n    HRESULT extractContents([out, retval] IDispatch **ppDocumentFragment);\n\n    [id(DISPID_IHTMLDOMRANGE_CLONECONTENTS)]\n    HRESULT cloneContents([out, retval] IDispatch **ppDocumentFragment);\n\n    [id(DISPID_IHTMLDOMRANGE_INSERTNODE)]\n    HRESULT insertNode([in] IDispatch *newNode);\n\n    [id(DISPID_IHTMLDOMRANGE_SURROUNDCONTENTS)]\n    HRESULT surroundContents([in] IDispatch *newParent);\n\n    [id(DISPID_IHTMLDOMRANGE_CLONERANGE)]\n    HRESULT cloneRange([out, retval] IHTMLDOMRange **ppClonedRange);\n\n    [id(DISPID_IHTMLDOMRANGE_TOSTRING)]\n    HRESULT toString([out, retval] BSTR *pRangeString);\n\n    [id(DISPID_IHTMLDOMRANGE_DETACH)]\n    HRESULT detach();\n\n    [id(DISPID_IHTMLDOMRANGE_GETCLIENTRECTS)]\n    HRESULT getClientRects([out, retval] IHTMLRectCollection **ppRectCol);\n\n    [id(DISPID_IHTMLDOMRANGE_GETBOUNDINGCLIENTRECT)]\n    HRESULT getBoundingClientRect([out, retval] IHTMLRect **ppRect);\n}\n\n[\n    noncreatable,\n    uuid(3050f37f-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLStyleSheetsCollection\n{\n    [default]           interface IHTMLStyleSheetsCollection;\n}\n\n/*****************************************************************************\n *    IHTMLFormElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050F1F7-98B5-11CF-BB82-00AA00BDCE0B)\n]\ninterface IHTMLFormElement : IDispatch\n{\n    [propput, id(DISPID_IHTMLFORMELEMENT_ACTION)]\n    HRESULT action([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLFORMELEMENT_ACTION)]\n    HRESULT action([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLFORMELEMENT_DIR)]\n    HRESULT dir([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLFORMELEMENT_DIR)]\n    HRESULT dir([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLFORMELEMENT_ENCODING)]\n    HRESULT encoding([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLFORMELEMENT_ENCODING)]\n    HRESULT encoding([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLFORMELEMENT_METHOD)]\n    HRESULT method([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLFORMELEMENT_METHOD)]\n    HRESULT method([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLFORMELEMENT_ELEMENTS)]\n    HRESULT elements([retval, out] IDispatch **p);\n\n    [propput, id(DISPID_IHTMLFORMELEMENT_TARGET)]\n    HRESULT target([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLFORMELEMENT_TARGET)]\n    HRESULT target([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLFORMELEMENT_NAME)]\n    HRESULT name([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLFORMELEMENT_NAME)]\n    HRESULT name([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLFORMELEMENT_ONSUBMIT)]\n    HRESULT onsubmit([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLFORMELEMENT_ONSUBMIT)]\n    HRESULT onsubmit([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLFORMELEMENT_ONRESET)]\n    HRESULT onreset([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLFORMELEMENT_ONRESET)]\n    HRESULT onreset([retval, out] VARIANT *p);\n\n    [id(DISPID_IHTMLFORMELEMENT_SUBMIT)]\n    HRESULT submit();\n\n    [id(DISPID_IHTMLFORMELEMENT_RESET)]\n    HRESULT reset();\n\n    [propput, id(DISPID_IHTMLFORMELEMENT_LENGTH)]\n    HRESULT length([in] LONG v);\n\n    [propget, id(DISPID_IHTMLFORMELEMENT_LENGTH)]\n    HRESULT length([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLFORMELEMENT__NEWENUM)]\n    HRESULT _newEnum([retval, out] IUnknown **p);\n\n    [id(DISPID_IHTMLFORMELEMENT_ITEM)]\n    HRESULT item(\n        [optional, in] VARIANT name,\n        [optional, in] VARIANT index,\n        [retval, out] IDispatch **pdisp);\n\n    [id(DISPID_IHTMLFORMELEMENT_TAGS)]\n    HRESULT tags(\n        [in] VARIANT tagName,\n        [retval, out] IDispatch **pdisp);\n}\n\n/*****************************************************************************\n *    DispHTMLFormElement dispinterface\n */\n[\n    hidden,\n    uuid(3050F510-98B5-11CF-BB82-00AA00BDCE0B)\n]\ndispinterface DispHTMLFormElement\n{\nproperties:\nmethods:\n    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;\n\n    [propput, id(DISPID_IHTMLFORMELEMENT_ACTION)]\n    void action(BSTR v);\n\n    [propget, id(DISPID_IHTMLFORMELEMENT_ACTION)]\n    BSTR action();\n\n    [propput, id(DISPID_IHTMLFORMELEMENT_ENCODING)]\n    void encoding(BSTR v);\n\n    [propget, id(DISPID_IHTMLFORMELEMENT_ENCODING)]\n    BSTR encoding();\n\n    [propput, id(DISPID_IHTMLFORMELEMENT_METHOD)]\n    void method(BSTR v);\n\n    [propget, id(DISPID_IHTMLFORMELEMENT_METHOD)]\n    BSTR method();\n\n    [propget, id(DISPID_IHTMLFORMELEMENT_ELEMENTS)]\n    IDispatch *elements();\n\n    [propput, id(DISPID_IHTMLFORMELEMENT_TARGET)]\n    void target(BSTR v);\n\n    [propget, id(DISPID_IHTMLFORMELEMENT_TARGET)]\n    BSTR target();\n\n    [propput, id(DISPID_IHTMLFORMELEMENT_NAME)]\n    void name(BSTR v);\n\n    [propget, id(DISPID_IHTMLFORMELEMENT_NAME)]\n    BSTR name();\n\n    [propput, id(DISPID_IHTMLFORMELEMENT_ONSUBMIT)]\n    void onsubmit(VARIANT v);\n\n    [propget, id(DISPID_IHTMLFORMELEMENT_ONSUBMIT)]\n    VARIANT onsubmit();\n\n    [propput, id(DISPID_IHTMLFORMELEMENT_ONRESET)]\n    void onreset(VARIANT v);\n\n    [propget, id(DISPID_IHTMLFORMELEMENT_ONRESET)]\n    VARIANT onreset();\n\n    [id(DISPID_IHTMLFORMELEMENT_SUBMIT)]\n    void submit();\n\n    [id(DISPID_IHTMLFORMELEMENT_RESET)]\n    void reset();\n\n    [propput, id(DISPID_IHTMLFORMELEMENT_LENGTH)]\n    void length(long v);\n\n    [propget, id(DISPID_IHTMLFORMELEMENT_LENGTH)]\n    long length();\n\n    [propget, id(DISPID_IHTMLFORMELEMENT__NEWENUM), hidden, restricted]\n    IUnknown *_newEnum();\n\n    [id(DISPID_IHTMLFORMELEMENT_ITEM)]\n    IDispatch *item(VARIANT name, VARIANT index);\n\n    [id(DISPID_IHTMLFORMELEMENT_TAGS)]\n    IDispatch *tags(VARIANT tagName);\n}\n\n[\n    hidden,\n    uuid(3050F364-98B5-11CF-BB82-00AA00BDCE0B)\n]\ndispinterface HTMLFormElementEvents\n{\nproperties:\nmethods:\n    [id(DISPID_HTMLELEMENTEVENTS_ONHELP)]\n    VARIANT_BOOL onhelp();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONCLICK)]\n    VARIANT_BOOL onclick();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDBLCLICK)]\n    VARIANT_BOOL ondblclick();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONKEYPRESS)]\n    VARIANT_BOOL onkeypress();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONKEYDOWN)]\n    void onkeydown();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONKEYUP)]\n    void onkeyup();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT)]\n    void onmouseout();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER)]\n    void onmouseover();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE)]\n    void onmousemove();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN)]\n    void onmousedown();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP)]\n    void onmouseup();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONSELECTSTART)]\n    VARIANT_BOOL onselectstart();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE)]\n    void onfilterchange();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART)]\n    VARIANT_BOOL ondragstart();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE)]\n    VARIANT_BOOL onbeforeupdate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE)]\n    void onafterupdate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE)]\n    VARIANT_BOOL onerrorupdate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONROWEXIT)]\n    VARIANT_BOOL onrowexit();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONROWENTER)]\n    void onrowenter();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED)]\n    void ondatasetchanged();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE)]\n    void ondataavailable();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE)]\n    void ondatasetcomplete();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE)]\n    void onlosecapture();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE)]\n    void onpropertychange();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONSCROLL)]\n    void onscroll();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUS)]\n    void onfocus();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBLUR)]\n    void onblur();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZE)]\n    void onresize();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDRAG)]\n    VARIANT_BOOL ondrag();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGEND)]\n    void ondragend();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGENTER)]\n    VARIANT_BOOL ondragenter();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGOVER)]\n    VARIANT_BOOL ondragover();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE)]\n    void ondragleave();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDROP)]\n    VARIANT_BOOL ondrop();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECUT)]\n    VARIANT_BOOL onbeforecut();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONCUT)]\n    VARIANT_BOOL oncut();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY)]\n    VARIANT_BOOL onbeforecopy();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONCOPY)]\n    VARIANT_BOOL oncopy();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE)]\n    VARIANT_BOOL onbeforepaste();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONPASTE)]\n    VARIANT_BOOL onpaste();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU)]\n    VARIANT_BOOL oncontextmenu();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONROWSDELETE)]\n    void onrowsdelete();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED)]\n    void onrowsinserted();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE)]\n    void oncellchange();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE)]\n    void onreadystatechange();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS)]\n    void onbeforeeditfocus();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE)]\n    void onlayoutcomplete();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONPAGE)]\n    void onpage();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE)]\n    VARIANT_BOOL onbeforedeactivate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE)]\n    VARIANT_BOOL onbeforeactivate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOVE)]\n    void onmove();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT)]\n    VARIANT_BOOL oncontrolselect();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOVESTART)]\n    VARIANT_BOOL onmovestart();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOVEEND)]\n    void onmoveend();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZESTART)]\n    VARIANT_BOOL onresizestart();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZEEND)]\n    void onresizeend();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER)]\n    void onmouseenter();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE)]\n    void onmouseleave();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL)]\n    VARIANT_BOOL onmousewheel();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONACTIVATE)]\n    void onactivate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE)]\n    void ondeactivate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSIN)]\n    void onfocusin();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT)]\n    void onfocusout();\n\n    [id(DISPID_HTMLFORMELEMENTEVENTS_ONSUBMIT)]\n    VARIANT_BOOL onsubmit();\n\n    [id(DISPID_HTMLFORMELEMENTEVENTS_ONRESET)]\n    VARIANT_BOOL onreset();\n}\n\ninterface IHTMLEventObj;\n\n[\n    hidden,\n    uuid(3050F614-98B5-11CF-BB82-00AA00BDCE0B)\n]\ndispinterface HTMLFormElementEvents2\n{\nproperties:\nmethods:\n    [id(DISPID_HTMLELEMENTEVENTS2_ONHELP)]\n    VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONCLICK)]\n    VARIANT_BOOL onclick([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK)]\n    VARIANT_BOOL ondblclick([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS)]\n    VARIANT_BOOL onkeypress([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN)]\n    void onkeydown([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYUP)]\n    void onkeyup([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT)]\n    void onmouseout([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER)]\n    void onmouseover([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE)]\n    void onmousemove([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN)]\n    void onmousedown([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP)]\n    void onmouseup([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART)]\n    VARIANT_BOOL onselectstart([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE)]\n    void onfilterchange([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART)]\n    VARIANT_BOOL ondragstart([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE)]\n    VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE)]\n    void onafterupdate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE)]\n    VARIANT_BOOL onerrorupdate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONROWEXIT)]\n    VARIANT_BOOL onrowexit([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONROWENTER)]\n    void onrowenter([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED)]\n    void ondatasetchanged([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE)]\n    void ondataavailable([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE)]\n    void ondatasetcomplete([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE)]\n    void onlosecapture([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE)]\n    void onpropertychange([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONSCROLL)]\n    void onscroll([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUS)]\n    void onfocus([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBLUR)]\n    void onblur([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZE)]\n    void onresize([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAG)]\n    VARIANT_BOOL ondrag([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGEND)]\n    void ondragend([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER)]\n    VARIANT_BOOL ondragenter([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER)]\n    VARIANT_BOOL ondragover([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE)]\n    void ondragleave([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDROP)]\n    VARIANT_BOOL ondrop([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT)]\n    VARIANT_BOOL onbeforecut([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONCUT)]\n    VARIANT_BOOL oncut([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY)]\n    VARIANT_BOOL onbeforecopy([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONCOPY)]\n    VARIANT_BOOL oncopy([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE)]\n    VARIANT_BOOL onbeforepaste([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONPASTE)]\n    VARIANT_BOOL onpaste([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU)]\n    VARIANT_BOOL oncontextmenu([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE)]\n    void onrowsdelete([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED)]\n    void onrowsinserted([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE)]\n    void oncellchange([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE)]\n    void onreadystatechange([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE)]\n    void onlayoutcomplete([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONPAGE)]\n    void onpage([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER)]\n    void onmouseenter([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE)]\n    void onmouseleave([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONACTIVATE)]\n    void onactivate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE)]\n    void ondeactivate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE)]\n    VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE)]\n    VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN)]\n    void onfocusin([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT)]\n    void onfocusout([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVE)]\n    void onmove([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT)]\n    VARIANT_BOOL oncontrolselect([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVESTART)]\n    VARIANT_BOOL onmovestart([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVEEND)]\n    void onmoveend([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART)]\n    VARIANT_BOOL onresizestart([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND)]\n    void onresizeend([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL)]\n    VARIANT_BOOL onmousewheel([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLFORMELEMENTEVENTS2_ONSUBMIT)]\n    VARIANT_BOOL onsubmit([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLFORMELEMENTEVENTS2_ONRESET)]\n    VARIANT_BOOL onreset([in] IHTMLEventObj* pEvtObj);\n}\n\n[\n    noncreatable,\n    uuid(3050F251-98B5-11CF-BB82-00AA00BDCE0B)\n]\ncoclass HTMLFormElement\n{\n    [default]           dispinterface DispHTMLFormElement;\n    [source, default]   dispinterface HTMLFormElementEvents;\n    [source]            dispinterface HTMLFormElementEvents2;\n    WINE_HTMLELEMENT_INTERFACES;\n    interface IHTMLFormElement;\n /* interface IHTMLFormElement2; */\n /* interface IHTMLFormElement3; */\n /* interface IHTMLSubmitData; */\n /* interface IHTMLFormElement4; */\n}\n\n/*****************************************************************************\n *    IHTMLTextContainer interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f230-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLTextContainer : IDispatch\n{\n    [id(DISPID_IHTMLTEXTCONTAINER_CREATECONTROLRANGE)]\n    HRESULT createControlRange([retval, out] IDispatch **range);\n\n    [propget, id(DISPID_IHTMLTEXTCONTAINER_SCROLLHEIGHT), displaybind, bindable]\n    HRESULT scrollHeight([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLTEXTCONTAINER_SCROLLWIDTH), displaybind, bindable]\n    HRESULT scrollWidth([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLTEXTCONTAINER_SCROLLTOP), displaybind, bindable]\n    HRESULT scrollTop([in] LONG v);\n\n    [propget, id(DISPID_IHTMLTEXTCONTAINER_SCROLLTOP), displaybind, bindable]\n    HRESULT scrollTop([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLTEXTCONTAINER_SCROLLLEFT), displaybind, bindable]\n    HRESULT scrollLeft([in] LONG v);\n\n    [propget, id(DISPID_IHTMLTEXTCONTAINER_SCROLLLEFT), displaybind, bindable]\n    HRESULT scrollLeft([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLTEXTCONTAINER_ONSCROLL), displaybind, bindable]\n    HRESULT onscroll([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTEXTCONTAINER_ONSCROLL), displaybind, bindable]\n    HRESULT onscroll([retval, out] VARIANT *p);\n}\n\n/*****************************************************************************\n *    IHTMLImgElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050F240-98B5-11CF-BB82-00AA00BDCE0B)\n]\ninterface IHTMLImgElement : IDispatch\n{\n    [propput, id(DISPID_IHTMLIMGELEMENT_ISMAP)]\n    HRESULT isMap([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_ISMAP)]\n    HRESULT isMap([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_USEMAP)]\n    HRESULT useMap([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_USEMAP)]\n    HRESULT useMap([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_MIMETYPE)]\n    HRESULT mimeType([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_FILESIZE)]\n    HRESULT fileSize([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_FILECREATEDDATE)]\n    HRESULT fileCreatedDate([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_FILEMODIFIEDDATE)]\n    HRESULT fileModifiedDate([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_FILEUPDATEDDATE)]\n    HRESULT fileUpdatedDate([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_PROTOCOL)]\n    HRESULT protocol([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_HREF)]\n    HRESULT href([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_NAMEPROP)]\n    HRESULT nameProp([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_BORDER)]\n    HRESULT border([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_BORDER)]\n    HRESULT border([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_VSPACE)]\n    HRESULT vspace([in] LONG v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_VSPACE)]\n    HRESULT vspace([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_HSPACE)]\n    HRESULT hspace([in] LONG v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_HSPACE)]\n    HRESULT hspace([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_ALT)]\n    HRESULT alt([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_ALT)]\n    HRESULT alt([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_SRC)]\n    HRESULT src([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_SRC)]\n    HRESULT src([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_LOWSRC)]\n    HRESULT lowsrc([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_LOWSRC)]\n    HRESULT lowsrc([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_VRML)]\n    HRESULT vrml([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_VRML)]\n    HRESULT vrml([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_DYNSRC)]\n    HRESULT dynsrc([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_DYNSRC)]\n    HRESULT dynsrc([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_READYSTATE)]\n    HRESULT readyState([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_COMPLETE)]\n    HRESULT complete([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_LOOP)]\n    HRESULT loop([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_LOOP)]\n    HRESULT loop([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_ALIGN)]\n    HRESULT align([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_ALIGN)]\n    HRESULT align([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_ONLOAD)]\n    HRESULT onload([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_ONLOAD)]\n    HRESULT onload([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_ONERROR)]\n    HRESULT onerror([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_ONERROR)]\n    HRESULT onerror([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_ONABORT)]\n    HRESULT onabort([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_ONABORT)]\n    HRESULT onabort([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_NAME)]\n    HRESULT name([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_NAME)]\n    HRESULT name([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_WIDTH)]\n    HRESULT width([in] LONG v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_WIDTH)]\n    HRESULT width([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_HEIGHT)]\n    HRESULT height([in] LONG v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_HEIGHT)]\n    HRESULT height([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_START)]\n    HRESULT start([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_START)]\n    HRESULT start([retval, out] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLImageElementFactory interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050F38E-98B5-11CF-BB82-00AA00BDCE0B)\n]\ninterface IHTMLImageElementFactory : IDispatch\n{\n    [id(DISPID_IHTMLIMAGEELEMENTFACTORY_CREATE)]\n    HRESULT create(\n        [optional, in] VARIANT width,\n        [optional, in] VARIANT height,\n        [retval, out]  IHTMLImgElement **elem);\n}\n\n/*****************************************************************************\n *    DispHTMLImg interface\n */\n[\n    hidden,\n    uuid(3050f51c-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLImg\n{\nproperties:\nmethods:\n    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_ISMAP), displaybind, bindable]\n    void isMap(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_ISMAP), displaybind, bindable]\n    VARIANT_BOOL isMap();\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_USEMAP), displaybind, bindable]\n    void useMap(BSTR v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_USEMAP), displaybind, bindable]\n    BSTR useMap();\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_MIMETYPE)]\n    BSTR mimeType();\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_FILESIZE)]\n    BSTR fileSize();\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_FILECREATEDDATE)]\n    BSTR fileCreatedDate();\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_FILEMODIFIEDDATE)]\n    BSTR fileModifiedDate();\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_FILEUPDATEDDATE)]\n    BSTR fileUpdatedDate();\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_PROTOCOL)]\n    BSTR protocol();\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_HREF)]\n    BSTR href();\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_NAMEPROP)]\n    BSTR nameProp();\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_BORDER), displaybind, bindable]\n    void border(VARIANT v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_BORDER), displaybind, bindable]\n    VARIANT border();\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_VSPACE), displaybind, bindable]\n    void vspace(LONG v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_VSPACE), displaybind, bindable]\n    LONG vspace();\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_HSPACE), displaybind, bindable]\n    void hspace(LONG v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_HSPACE), displaybind, bindable]\n    LONG hspace();\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_ALT), displaybind, bindable]\n    void alt(BSTR v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_ALT), displaybind, bindable]\n    BSTR alt();\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_SRC), displaybind, bindable]\n    void src(BSTR v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_SRC), displaybind, bindable]\n    BSTR src();\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_LOWSRC), displaybind, bindable]\n    void lowsrc(BSTR v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_LOWSRC), displaybind, bindable]\n    BSTR lowsrc();\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_VRML), displaybind, bindable]\n    void vrml(BSTR v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_VRML), displaybind, bindable]\n    BSTR vrml();\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_DYNSRC), displaybind, bindable]\n    void dynsrc(BSTR v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_DYNSRC), displaybind, bindable]\n    BSTR dynsrc();\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_COMPLETE)]\n    VARIANT_BOOL complete();\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_LOOP), displaybind, bindable]\n    void loop(VARIANT v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_LOOP), displaybind, bindable]\n    VARIANT loop();\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_ALIGN), displaybind, bindable]\n    void align(BSTR v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_ALIGN), displaybind, bindable]\n    BSTR align();\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_ONLOAD), displaybind, bindable]\n    void onload(VARIANT v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_ONLOAD), displaybind, bindable]\n    VARIANT onload();\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_ONERROR), displaybind, bindable]\n    void onerror(VARIANT v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_ONERROR), displaybind, bindable]\n    VARIANT onerror();\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_ONABORT), displaybind, bindable]\n    void onabort(VARIANT v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_ONABORT), displaybind, bindable]\n    VARIANT onabort();\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_NAME), displaybind, bindable]\n    void name(BSTR v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_NAME), displaybind, bindable]\n    BSTR name();\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_WIDTH)]\n    void width(LONG v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_WIDTH)]\n    LONG width();\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_HEIGHT)]\n    void height(LONG v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_HEIGHT)]\n    LONG height();\n\n    [propput, id(DISPID_IHTMLIMGELEMENT_START), displaybind, bindable]\n    void start(BSTR v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT_START), displaybind, bindable]\n    BSTR start();\n\n    [propput, id(DISPID_IHTMLIMGELEMENT2_LONGDESC), displaybind, bindable]\n    void longDesc(BSTR v);\n\n    [propget, id(DISPID_IHTMLIMGELEMENT2_LONGDESC), displaybind, bindable]\n    BSTR longDesc();\n}\n\n/*****************************************************************************\n *    HTMLImg coclass\n */\n[\n    noncreatable,\n    uuid(3050f241-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLImg\n{\n    [default]         dispinterface DispHTMLImg;\n /* [source, default] dispinterface HTMLImgEvents; */\n /* [source]          dispinterface HTMLImgEvents2; */\n    WINE_HTMLDATAELEMENT_INTERFACES;\n    interface IHTMLControlElement;\n    interface IHTMLImgElement;\n /* interface IHTMLImgElement2; */\n /* interface IHTMLImgElement3; */\n /* interface IHTMLImgElement4; */\n /* interface IHTMLMSImgElement; */\n}\n\n/*****************************************************************************\n *    IHTMLXMLHttpRequest interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3051040a-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLXMLHttpRequest : IDispatch\n{\n    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_READYSTATE)]\n    HRESULT readyState([out, retval] long *p);\n\n    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSEBODY)]\n    HRESULT responseBody([out, retval] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSETEXT)]\n    HRESULT responseText([out, retval] BSTR *p);\n\n    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSEXML)]\n    HRESULT responseXML([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_STATUS)]\n    HRESULT status([out, retval] long *p);\n\n    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_STATUSTEXT)]\n    HRESULT statusText([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLXMLHTTPREQUEST_ONREADYSTATECHANGE), displaybind, bindable]\n    HRESULT onreadystatechange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_ONREADYSTATECHANGE), displaybind, bindable]\n    HRESULT onreadystatechange([out, retval] VARIANT *p);\n\n    [id(DISPID_IHTMLXMLHTTPREQUEST_ABORT)] HRESULT abort();\n\n    [id(DISPID_IHTMLXMLHTTPREQUEST_OPEN)]\n    HRESULT open(\n            [in] BSTR bstrMethod,\n            [in] BSTR bstrUrl,\n            [in] VARIANT varAsync,\n            [in, optional] VARIANT varUser,\n            [in, optional] VARIANT varPassword);\n\n    [id(DISPID_IHTMLXMLHTTPREQUEST_SEND)]\n    HRESULT send([in, optional] VARIANT varBody);\n\n    [id(DISPID_IHTMLXMLHTTPREQUEST_GETALLRESPONSEHEADERS)]\n    HRESULT getAllResponseHeaders([out, retval] BSTR *p);\n\n    [id(DISPID_IHTMLXMLHTTPREQUEST_GETRESPONSEHEADER)]\n    HRESULT getResponseHeader(\n            [in] BSTR bstrHeader,\n            [out, retval] BSTR *p);\n\n    [id(DISPID_IHTMLXMLHTTPREQUEST_SETREQUESTHEADER)]\n    HRESULT setRequestHeader(\n            [in] BSTR bstrHeader,\n            [in] BSTR bstrValue);\n}\n\n/*****************************************************************************\n *    IHTMLXMLHttpRequest2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(30510482-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLXMLHttpRequest2 : IDispatch\n{\n    [propput, id(DISPID_IHTMLXMLHTTPREQUEST2_TIMEOUT)]\n    HRESULT timeout([in] long v);\n\n    [propget, id(DISPID_IHTMLXMLHTTPREQUEST2_TIMEOUT)]\n    HRESULT timeout([out, retval] long *p);\n\n    [propput, id(DISPID_IHTMLXMLHTTPREQUEST2_ONTIMEOUT), displaybind, bindable]\n    HRESULT ontimeout([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLXMLHTTPREQUEST2_ONTIMEOUT), displaybind, bindable]\n    HRESULT ontimeout([out, retval] VARIANT *p);\n}\n\n/*****************************************************************************\n *    IHTMLXMLHttpRequestFactory interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3051040c-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLXMLHttpRequestFactory : IDispatch\n{\n    [id(DISPID_IHTMLXMLHTTPREQUESTFACTORY_CREATE)]\n    HRESULT create([out, retval] IHTMLXMLHttpRequest **p);\n}\n\n/*****************************************************************************\n *    DispHTMLXMLHttpRequest dispinterface\n */\n[\n    hidden,\n    uuid(3050f596-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLXMLHttpRequest\n{\nproperties:\nmethods:\n    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_READYSTATE)]\n    long readyState();\n\n    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSEBODY)]\n    VARIANT responseBody();\n\n    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSETEXT)]\n    BSTR responseText();\n\n    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSEXML)]\n    IDispatch *responseXML();\n\n    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_STATUS)]\n    long status();\n\n    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_STATUSTEXT)]\n    BSTR statusText();\n\n    [propput, id(DISPID_IHTMLXMLHTTPREQUEST_ONREADYSTATECHANGE), displaybind, bindable]\n    void onreadystatechange(VARIANT v);\n\n    [propget, id(DISPID_IHTMLXMLHTTPREQUEST_ONREADYSTATECHANGE), displaybind, bindable]\n    VARIANT onreadystatechange();\n\n    [id(DISPID_IHTMLXMLHTTPREQUEST_ABORT)]\n    void abort();\n\n    [id(DISPID_IHTMLXMLHTTPREQUEST_OPEN)]\n    void open(\n            [in] BSTR bstrMethod,\n            [in] BSTR bstrUrl,\n            [in] VARIANT varAsync,\n            [in, optional] VARIANT varUser,\n            [in, optional] VARIANT varPassword);\n\n    [id(DISPID_IHTMLXMLHTTPREQUEST_SEND)]\n    void send([in, optional] VARIANT varBody);\n\n    [id(DISPID_IHTMLXMLHTTPREQUEST_GETALLRESPONSEHEADERS)]\n    BSTR getAllResponseHeaders();\n\n    [id(DISPID_IHTMLXMLHTTPREQUEST_GETRESPONSEHEADER)]\n    BSTR getResponseHeader([in] BSTR bstrHeader);\n\n    [id(DISPID_IHTMLXMLHTTPREQUEST_SETREQUESTHEADER)]\n    void setRequestHeader(\n            [in] BSTR bstrHeader,\n            [in] BSTR bstrValue);\n\n    [propput, id(DISPID_IHTMLXMLHTTPREQUEST2_TIMEOUT)]\n    void timeout(long v);\n\n    [propget, id(DISPID_IHTMLXMLHTTPREQUEST2_TIMEOUT)]\n    long timeout();\n\n    [propput, id(DISPID_IHTMLXMLHTTPREQUEST2_ONTIMEOUT), displaybind, bindable]\n    void ontimeout(VARIANT v);\n\n    [propget, id(DISPID_IHTMLXMLHTTPREQUEST2_ONTIMEOUT), displaybind, bindable]\n    VARIANT ontimeout();\n\n    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;\n\n\n    [id(DISPID_IEVENTTARGET_ADDEVENTLISTENER)]\n    void addEventListener(\n            [in] BSTR type,\n            [in] IDispatch *listener,\n            [in] VARIANT_BOOL useCapture);\n\n    [id(DISPID_IEVENTTARGET_REMOVEEVENTLISTENER)]\n    void removeEventListener(\n            [in] BSTR type,\n            [in] IDispatch *listener,\n            [in] VARIANT_BOOL useCapture);\n\n    [id(DISPID_IEVENTTARGET_DISPATCHEVENT)]\n    VARIANT_BOOL dispatchEvent([in] IDOMEvent *evt);\n}\n\n/*****************************************************************************\n *    HTMLXMLHttpRequest\n */\n[\n    noncreatable,\n    uuid(3051040b-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLXMLHttpRequest\n{\n    [default]         dispinterface DispHTMLXMLHttpRequest;\n /* [source, default] dispinterface HTMLXMLHttpRequestEvents; */\n    interface IHTMLXMLHttpRequest;\n    interface IHTMLXMLHttpRequest2;\n    interface IHTMLDOMConstructor;\n    interface IEventTarget;\n}\n\n/*****************************************************************************\n *    IHTMLControlElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f4e9-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLControlElement : IDispatch\n{\n    [propput, id(DISPID_IHTMLCONTROLELEMENT_TABINDEX), displaybind, bindable]\n    HRESULT tabIndex([in] short v);\n\n    [propget, id(DISPID_IHTMLCONTROLELEMENT_TABINDEX), displaybind, bindable]\n    HRESULT tabIndex([retval, out] short * p);\n\n    [id(DISPID_IHTMLCONTROLELEMENT_FOCUS)]\n    HRESULT focus();\n\n    [propput, id(DISPID_IHTMLCONTROLELEMENT_ACCESSKEY), displaybind, bindable]\n    HRESULT accessKey([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCONTROLELEMENT_ACCESSKEY), displaybind, bindable]\n    HRESULT accessKey([retval, out] BSTR * p);\n\n    [propput, id(DISPID_IHTMLCONTROLELEMENT_ONBLUR), displaybind, bindable]\n    HRESULT onblur([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCONTROLELEMENT_ONBLUR), displaybind, bindable]\n    HRESULT onblur([retval, out] VARIANT * p);\n\n    [propput, id(DISPID_IHTMLCONTROLELEMENT_ONFOCUS), displaybind, bindable]\n    HRESULT onfocus([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCONTROLELEMENT_ONFOCUS), displaybind, bindable]\n    HRESULT onfocus([retval, out] VARIANT * p);\n\n    [propput, id(DISPID_IHTMLCONTROLELEMENT_ONRESIZE), displaybind, bindable]\n    HRESULT onresize([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLCONTROLELEMENT_ONRESIZE), displaybind, bindable]\n    HRESULT onresize([retval, out] VARIANT * p);\n\n    [id(DISPID_IHTMLCONTROLELEMENT_BLUR)]\n    HRESULT blur();\n\n    [id(DISPID_IHTMLCONTROLELEMENT_ADDFILTER)]\n    HRESULT addFilter([in] IUnknown* pUnk);\n\n    [id(DISPID_IHTMLCONTROLELEMENT_REMOVEFILTER)]\n    HRESULT removeFilter([in] IUnknown* pUnk);\n\n    [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTHEIGHT), displaybind, bindable]\n    HRESULT clientHeight([retval, out] LONG * p);\n\n    [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTWIDTH), displaybind, bindable]\n    HRESULT clientWidth([retval, out] LONG * p);\n\n    [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTTOP), displaybind, bindable]\n    HRESULT clientTop([retval, out] LONG * p);\n\n    [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTLEFT), displaybind, bindable]\n    HRESULT clientLeft([retval, out] LONG * p);\n}\n\n/*****************************************************************************\n *    IHTMLBodyElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f1d8-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLBodyElement : IDispatch\n{\n    [propput, id(DISPID_IHTMLBODYELEMENT_BACKGROUND), displaybind, bindable]\n    HRESULT background([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_BACKGROUND), displaybind, bindable]\n    HRESULT background([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_BGPROPERTIES), displaybind, bindable]\n    HRESULT bgProperties([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_BGPROPERTIES), displaybind, bindable]\n    HRESULT bgProperties([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_LEFTMARGIN), displaybind, bindable]\n    HRESULT leftMargin([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_LEFTMARGIN), displaybind, bindable]\n    HRESULT leftMargin([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_TOPMARGIN), displaybind, bindable]\n    HRESULT topMargin([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_TOPMARGIN), displaybind, bindable]\n    HRESULT topMargin([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_RIGHTMARGIN), displaybind, bindable]\n    HRESULT rightMargin([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_RIGHTMARGIN), displaybind, bindable]\n    HRESULT rightMargin([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN), displaybind, bindable]\n    HRESULT bottomMargin([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN), displaybind, bindable]\n    HRESULT bottomMargin([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_NOWRAP), displaybind, bindable]\n    HRESULT noWrap([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_NOWRAP), displaybind, bindable]\n    HRESULT noWrap([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_BGCOLOR), displaybind, bindable]\n    HRESULT bgColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_BGCOLOR), displaybind, bindable]\n    HRESULT bgColor([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_TEXT), displaybind, bindable]\n    HRESULT text([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_TEXT), displaybind, bindable]\n    HRESULT text([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_LINK), displaybind, bindable]\n    HRESULT link([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_LINK), displaybind, bindable]\n    HRESULT link([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_VLINK), displaybind, bindable]\n    HRESULT vLink([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_VLINK), displaybind, bindable]\n    HRESULT vLink([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_ALINK), displaybind, bindable]\n    HRESULT aLink([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_ALINK), displaybind, bindable]\n    HRESULT aLink([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_ONLOAD), displaybind, bindable]\n    HRESULT onload([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_ONLOAD), displaybind, bindable]\n    HRESULT onload([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_ONUNLOAD), displaybind, bindable]\n    HRESULT onunload([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_ONUNLOAD), displaybind, bindable]\n    HRESULT onunload([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_SCROLL), displaybind, bindable]\n    HRESULT scroll([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_SCROLL), displaybind, bindable]\n    HRESULT scroll([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_ONSELECT), displaybind, bindable]\n    HRESULT onselect([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_ONSELECT), displaybind, bindable]\n    HRESULT onselect([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD), displaybind, bindable]\n    HRESULT onbeforeunload([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD), displaybind, bindable]\n    HRESULT onbeforeunload([retval, out] VARIANT *p);\n\n    [id(DISPID_IHTMLBODYELEMENT_CREATETEXTRANGE)]\n    HRESULT createTextRange([retval, out] IHTMLTxtRange **range);\n}\n\n/*****************************************************************************\n *    IHTMLBodyElement2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f5c5-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLBodyElement2 : IDispatch\n{\n    [propput, id(DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT), displaybind, bindable]\n    HRESULT onbeforeprint([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT), displaybind, bindable]\n    HRESULT onbeforeprint([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable]\n    HRESULT onafterprint([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable]\n    HRESULT onafterprint([retval, out] VARIANT *p);\n}\n\n[\n    hidden,\n    uuid(3050f507-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLBody\n{\nproperties:\nmethods:\n    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_BACKGROUND), displaybind, bindable]\n    void background(BSTR v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_BACKGROUND), displaybind, bindable]\n    BSTR background();\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_BGPROPERTIES), displaybind, bindable]\n    void bgProperties(BSTR v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_BGPROPERTIES), displaybind, bindable]\n    BSTR bgProperties();\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_LEFTMARGIN), displaybind, bindable]\n    void leftMargin(VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_LEFTMARGIN), displaybind, bindable]\n    VARIANT leftMargin();\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_TOPMARGIN), displaybind, bindable]\n    void topMargin(VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_TOPMARGIN), displaybind, bindable]\n    VARIANT topMargin();\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_RIGHTMARGIN), displaybind, bindable]\n    void rightMargin(VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_RIGHTMARGIN), displaybind, bindable]\n    VARIANT rightMargin();\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN), displaybind, bindable]\n    void bottomMargin(VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN), displaybind, bindable]\n    VARIANT bottomMargin();\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_NOWRAP), displaybind, bindable]\n    void noWrap(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_NOWRAP), displaybind, bindable]\n    VARIANT_BOOL noWrap();\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_BGCOLOR), displaybind, bindable]\n    void bgColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_BGCOLOR), displaybind, bindable]\n    VARIANT bgColor();\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_TEXT), displaybind, bindable]\n    void text(VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_TEXT), displaybind, bindable]\n    VARIANT text();\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_LINK), displaybind, bindable]\n    void link(VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_LINK), displaybind, bindable]\n    VARIANT link();\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_VLINK), displaybind, bindable]\n    void vLink(VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_VLINK), displaybind, bindable]\n    VARIANT vLink();\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_ALINK), displaybind, bindable]\n    void aLink(VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_ALINK), displaybind, bindable]\n    VARIANT aLink();\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_ONLOAD), displaybind, bindable]\n    void onload(VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_ONLOAD), displaybind, bindable]\n    VARIANT onload();\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_ONUNLOAD), displaybind, bindable]\n    void onunload(VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_ONUNLOAD), displaybind, bindable]\n    VARIANT onunload();\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_SCROLL), displaybind, bindable]\n    void scroll(BSTR v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_SCROLL), displaybind, bindable]\n    BSTR scroll();\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_ONSELECT), displaybind, bindable]\n    void onselect(VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_ONSELECT), displaybind, bindable]\n    VARIANT onselect();\n\n    [propput, id(DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD), displaybind, bindable]\n    void onbeforeunload(VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD), displaybind, bindable]\n    VARIANT onbeforeunload();\n\n    [id(DISPID_IHTMLBODYELEMENT_CREATETEXTRANGE)]\n    IHTMLTxtRange* createTextRange();\n\n    [propput, id(DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT), displaybind, bindable]\n    void onbeforeprint(VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT), displaybind, bindable]\n    VARIANT onbeforeprint();\n\n    [propput, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable]\n    void onafterprint(VARIANT v);\n\n    [propget, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable]\n    VARIANT onafterprint();\n}\n\n[\n    uuid(3050f24a-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLBody\n{\n    [default]           dispinterface DispHTMLBody;\n    [source, default]   dispinterface HTMLTextContainerEvents;\n    [source]            dispinterface HTMLTextContainerEvents2;\n    WINE_HTMLELEMENT_INTERFACES;\n    interface IHTMLControlElement;\n    interface IHTMLTextContainer;\n    interface IHTMLBodyElement;\n    interface IHTMLBodyElement2;\n /* interface IHTMLBodyElement3; */\n /* interface IHTMLBodyElement4; */\n /* interface IHTMLBodyElement5; */\n}\n\n/*****************************************************************************\n *    IHTMLAnchorElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f1da-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLAnchorElement : IDispatch\n{\n    [propput, id(DISPID_IHTMLANCHORELEMENT_HREF), displaybind, bindable]\n    HRESULT href([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_HREF), displaybind, bindable]\n    HRESULT href([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_TARGET), displaybind, bindable]\n    HRESULT target([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_TARGET), displaybind, bindable]\n    HRESULT target([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_REL), displaybind, bindable]\n    HRESULT rel([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_REL), displaybind, bindable]\n    HRESULT rel([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_REV), displaybind, bindable]\n    HRESULT rev([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_REV), displaybind, bindable]\n    HRESULT rev([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_URN), displaybind, bindable]\n    HRESULT urn([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_URN), displaybind, bindable]\n    HRESULT urn([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_METHODS), displaybind, bindable]\n    HRESULT Methods([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_METHODS), displaybind, bindable]\n    HRESULT Methods([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_NAME), displaybind, bindable]\n    HRESULT name([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_NAME), displaybind, bindable]\n    HRESULT name([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_HOST)]\n    HRESULT host([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_HOST)]\n    HRESULT host([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_HOSTNAME)]\n    HRESULT hostname([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_HOSTNAME)]\n    HRESULT hostname([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_PATHNAME)]\n    HRESULT pathname([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_PATHNAME)]\n    HRESULT pathname([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_PORT)]\n    HRESULT port([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_PORT)]\n    HRESULT port([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_PROTOCOL)]\n    HRESULT protocol([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_PROTOCOL)]\n    HRESULT protocol([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_SEARCH)]\n    HRESULT search([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_SEARCH)]\n    HRESULT search([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_HASH)]\n    HRESULT hash([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_HASH)]\n    HRESULT hash([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_ONBLUR), displaybind, bindable]\n    HRESULT onblur([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_ONBLUR), displaybind, bindable]\n    HRESULT onblur([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_ONFOCUS), displaybind, bindable]\n    HRESULT onfocus([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_ONFOCUS), displaybind, bindable]\n    HRESULT onfocus([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_ACCESSKEY), displaybind, bindable]\n    HRESULT accessKey([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_ACCESSKEY), displaybind, bindable]\n    HRESULT accessKey([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_PROTOCOLLONG)]\n    HRESULT protocolLong([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_MIMETYPE)]\n    HRESULT mimeType([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_NAMEPROP)]\n    HRESULT nameProp([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_TABINDEX), displaybind, bindable]\n    HRESULT tabIndex([in] short v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_TABINDEX), displaybind, bindable]\n    HRESULT tabIndex([retval, out] short *p);\n\n    [id(DISPID_IHTMLANCHORELEMENT_FOCUS)]\n    HRESULT focus();\n\n    [id(DISPID_IHTMLANCHORELEMENT_BLUR)]\n    HRESULT blur();\n}\n\n/*****************************************************************************\n *    DispHTMLAnchorElement dispinterface\n */\n[\n    hidden,\n    uuid(3050f502-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLAnchorElement\n{\nproperties:\nmethods:\n    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_HREF), displaybind, bindable]\n    void href(BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_HREF), displaybind, bindable]\n    BSTR href();\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_TARGET), displaybind, bindable]\n    void target(BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_TARGET), displaybind, bindable]\n    BSTR target();\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_REL), displaybind, bindable]\n    void rel(BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_REL), displaybind, bindable]\n    BSTR rel();\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_REV), displaybind, bindable]\n    void rev(BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_REV), displaybind, bindable]\n    BSTR rev();\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_URN), displaybind, bindable]\n    void urn(BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_URN), displaybind, bindable]\n    BSTR urn();\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_METHODS), displaybind, bindable]\n    void Methods(BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_METHODS), displaybind, bindable]\n    BSTR Methods();\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_NAME), displaybind, bindable]\n    void name(BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_NAME), displaybind, bindable]\n    BSTR name();\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_HOST)]\n    void host(BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_HOST)]\n    BSTR host();\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_HOSTNAME)]\n    void hostname(BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_HOSTNAME)]\n    BSTR hostname();\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_PATHNAME)]\n    void pathname(BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_PATHNAME)]\n    BSTR pathname();\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_PORT)]\n    void port(BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_PORT)]\n    BSTR port();\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_PROTOCOL)]\n    void protocol(BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_PROTOCOL)]\n    BSTR protocol();\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_SEARCH)]\n    void search(BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_SEARCH)]\n    BSTR search();\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT_HASH)]\n    void hash(BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_HASH)]\n    BSTR hash();\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_PROTOCOLLONG)]\n    BSTR protocolLong();\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_MIMETYPE)]\n    BSTR mimeType();\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT_NAMEPROP)]\n    BSTR nameProp();\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT2_CHARSET), displaybind, bindable]\n    void charset(BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT2_CHARSET), displaybind, bindable]\n    BSTR charset();\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT2_COORDS), displaybind, bindable]\n    void coords(BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT2_COORDS), displaybind, bindable]\n    BSTR coords();\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT2_HREFLANG), displaybind, bindable]\n    void hreflang(BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT2_HREFLANG), displaybind, bindable]\n    BSTR hreflang();\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT2_SHAPE), displaybind, bindable]\n    void shape(BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT2_SHAPE), displaybind, bindable]\n    BSTR shape();\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT2_TYPE), displaybind, bindable]\n    void type(BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT2_TYPE), displaybind, bindable]\n    BSTR type();\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT3_IE8_SHAPE)]\n    void ie8_shape(BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT3_IE8_SHAPE)]\n    BSTR ie8_shape();\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT3_IE8_COORDS)]\n    void ie8_coords(BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT3_IE8_COORDS)]\n    BSTR ie8_coords();\n\n    [propput, id(DISPID_IHTMLANCHORELEMENT3_IE8_HREF)]\n    void ie8_href(BSTR v);\n\n    [propget, id(DISPID_IHTMLANCHORELEMENT3_IE8_HREF)]\n    BSTR ie8_href();\n}\n\n/*****************************************************************************\n *    HTMLAnchorElement coclass\n */\n[\n    noncreatable,\n    uuid(3050f248-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLAnchorElement\n{\n    [default]         dispinterface DispHTMLAnchorElement;\n /* [source, default] dispinterface HTMLAnchorEvents; */\n /* [source]          dispinterface HTMLAnchorEvents2; */\n    WINE_HTMLDATAELEMENT_INTERFACES;\n    interface IHTMLAnchorElement;\n /* interface IHTMLAnchorElement2; */\n /* interface IHTMLAnchorElement3; */\n}\n\n/*****************************************************************************\n *    IHTMLAreaElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f265-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLAreaElement : IDispatch\n{\n    [propput, id(DISPID_IHTMLAREAELEMENT_SHAPE)]\n    HRESULT shape([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_SHAPE)]\n    HRESULT shape([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_COORDS)]\n    HRESULT coords([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_COORDS)]\n    HRESULT coords([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_HREF)]\n    HRESULT href([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_HREF)]\n    HRESULT href([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_TARGET)]\n    HRESULT target([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_TARGET)]\n    HRESULT target([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_ALT)]\n    HRESULT alt([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_ALT)]\n    HRESULT alt([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_NOHREF)]\n    HRESULT noHref([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_NOHREF)]\n    HRESULT noHref([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_HOST)]\n    HRESULT host([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_HOST)]\n    HRESULT host([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_HOSTNAME)]\n    HRESULT hostname([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_HOSTNAME)]\n    HRESULT hostname([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_PATHNAME)]\n    HRESULT pathname([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_PATHNAME)]\n    HRESULT pathname([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_PORT)]\n    HRESULT port([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_PORT)]\n    HRESULT port([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_PROTOCOL)]\n    HRESULT protocol([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_PROTOCOL)]\n    HRESULT protocol([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_SEARCH)]\n    HRESULT search([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_SEARCH)]\n    HRESULT search([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_HASH)]\n    HRESULT hash([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_HASH)]\n    HRESULT hash([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_ONBLUR), displaybind, bindable]\n    HRESULT onblur([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_ONBLUR), displaybind, bindable]\n    HRESULT onblur([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_ONFOCUS), displaybind, bindable]\n    HRESULT onfocus([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_ONFOCUS), displaybind, bindable]\n    HRESULT onfocus([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_TABINDEX), displaybind, bindable]\n    HRESULT tabIndex([in] short v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_TABINDEX), displaybind, bindable]\n    HRESULT tabIndex([retval, out] short *p);\n\n    [id(DISPID_IHTMLAREAELEMENT_FOCUS)]\n    HRESULT focus();\n\n    [id(DISPID_IHTMLAREAELEMENT_BLUR)]\n    HRESULT blur();\n}\n\n/*****************************************************************************\n *    DispHTMLAreaElement dispinterface\n */\n[\n    hidden,\n    uuid(3050f503-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLAreaElement\n{\nproperties:\nmethods:\n    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]\n    IDispatch* constructor();\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_SHAPE)]\n    void shape(BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_SHAPE)]\n    BSTR shape();\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_COORDS)]\n    void coords(BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_COORDS)]\n    BSTR coords();\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_HREF)]\n    void href(BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_HREF)]\n    BSTR href();\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_TARGET)]\n    void target(BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_TARGET)]\n    BSTR target();\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_ALT)]\n    void alt(BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_ALT)]\n    BSTR alt();\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_NOHREF)]\n    void noHref(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_NOHREF)]\n    VARIANT_BOOL noHref();\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_HOST)]\n    void host(BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_HOST)]\n    BSTR host();\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_HOSTNAME)]\n    void hostname(BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_HOSTNAME)]\n    BSTR hostname();\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_PATHNAME)]\n    void pathname(BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_PATHNAME)]\n    BSTR pathname();\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_PORT)]\n    void port(BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_PORT)]\n    BSTR port();\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_PROTOCOL)]\n    void protocol(BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_PROTOCOL)]\n    BSTR protocol();\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_SEARCH)]\n    void search(BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_SEARCH)]\n    BSTR search();\n\n    [propput, id(DISPID_IHTMLAREAELEMENT_HASH)]\n    void hash(BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT_HASH)]\n    BSTR hash();\n\n    [propput, id(DISPID_IHTMLAREAELEMENT2_IE8_SHAPE)]\n    void ie8_shape(BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT2_IE8_SHAPE)]\n    BSTR ie8_shape();\n\n    [propput, id(DISPID_IHTMLAREAELEMENT2_IE8_COORDS)]\n    void ie8_coords(BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT2_IE8_COORDS)]\n    BSTR ie8_coords();\n\n    [propput, id(DISPID_IHTMLAREAELEMENT2_IE8_HREF)]\n    void ie8_href(BSTR v);\n\n    [propget, id(DISPID_IHTMLAREAELEMENT2_IE8_HREF)]\n    BSTR ie8_href();\n}\n\n/*****************************************************************************\n *    HTMLAreaElement coclass\n */\n[\n    noncreatable,\n    uuid(3050f283-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLAreaElement\n{\n    [default]         dispinterface DispHTMLAreaElement;\n /* [source, default] dispinterface HTMLAreaEvents; */\n /* [source]          dispinterface HTMLAreaEvents2; */\n    WINE_HTMLELEMENT_INTERFACES;\n    interface IHTMLAreaElement;\n /* interface IHTMLAreaElement2; */\n}\n\n/*****************************************************************************\n *    IHTMLLabelElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f32a-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLLabelElement : IDispatch\n{\n    [propput, id(DISPID_IHTMLLABELELEMENT_HTMLFOR), displaybind, bindable]\n    HRESULT htmlFor([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLLABELELEMENT_HTMLFOR), displaybind, bindable]\n    HRESULT htmlFor([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLLABELELEMENT_ACCESSKEY), displaybind, bindable]\n    HRESULT accessKey([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLLABELELEMENT_ACCESSKEY), displaybind, bindable]\n    HRESULT accessKey([out, retval] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLLabelElement2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f832-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLLabelElement2 : IDispatch\n{\n    [propget, id(DISPID_IHTMLLABELELEMENT2_FORM)]\n    HRESULT form([out, retval] IHTMLFormElement **p);\n}\n\n/*****************************************************************************\n *    DispHTMLLabelElement dispinterface\n */\n[\n    hidden,\n    uuid(3050f522-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLLabelElement\n{\nproperties:\nmethods:\n    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;\n\n    [propput, id(DISPID_IHTMLLABELELEMENT_HTMLFOR), displaybind, bindable]\n    void htmlFor(BSTR v);\n\n    [propget, id(DISPID_IHTMLLABELELEMENT_HTMLFOR), displaybind, bindable]\n    BSTR htmlFor();\n\n    [propget, id(DISPID_IHTMLLABELELEMENT2_FORM)]\n    IHTMLFormElement *form();\n}\n\n/*****************************************************************************\n *    HTMLLabelElement coclass\n */\n[\n    noncreatable,\n    uuid(3050f32b-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLLabelElement\n{\n    [default]         dispinterface DispHTMLLabelElement;\n /* [source, default] dispinterface HTMLLabelEvents; */\n /* [source]          dispinterface HTMLLabelEvents2; */\n    WINE_HTMLDATAELEMENT_INTERFACES;\n    interface IHTMLLabelElement;\n    interface IHTMLLabelElement2;\n}\n\n/*****************************************************************************\n *    IHTMLElementCollection interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050F21F-98B5-11CF-BB82-00AA00BDCE0B)\n]\ninterface IHTMLElementCollection : IDispatch\n{\n    [id(DISPID_IHTMLELEMENTCOLLECTION_TOSTRING)]\n    HRESULT toString([retval, out] BSTR *String);\n\n    [propput, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)]\n    HRESULT length([in] LONG v);\n\n    [propget, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)]\n    HRESULT length([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLELEMENTCOLLECTION__NEWENUM)]\n    HRESULT _newEnum([retval, out] IUnknown **p);\n\n    [id(DISPID_IHTMLELEMENTCOLLECTION_ITEM)]\n    HRESULT item(\n        [optional, in] VARIANT name,\n        [optional, in] VARIANT index,\n        [retval,  out] IDispatch **pdisp);\n\n    [id(DISPID_IHTMLELEMENTCOLLECTION_TAGS)]\n    HRESULT tags(\n        [in] VARIANT tagName,\n        [retval, out] IDispatch **pdisp);\n}\n\n/*****************************************************************************\n *    DispHTMLElementCollection dispinterface\n */\n[\n    hidden,\n    uuid(3050f56b-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLElementCollection\n{\nproperties:\nmethods:\n    [id(DISPID_IHTMLELEMENTCOLLECTION_TOSTRING)]\n    BSTR toString();\n\n    [propput, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)]\n    void length(LONG v);\n\n    [propget, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)]\n    LONG length();\n\n    [propget, id(DISPID_IHTMLELEMENTCOLLECTION__NEWENUM), hidden, restricted]\n    IUnknown *_newEnum();\n\n    [id(DISPID_IHTMLELEMENTCOLLECTION_ITEM)]\n    IDispatch *item(\n            [in, optional] VARIANT name,\n            [in, optional] VARIANT index);\n\n    [id(DISPID_IHTMLELEMENTCOLLECTION_TAGS)]\n    IDispatch *tags(\n            [in] VARIANT tagName);\n\n    [id(DISPID_IHTMLELEMENTCOLLECTION2_URNS)]\n    IDispatch *urns([in] VARIANT urn);\n\n    [id(DISPID_IHTMLELEMENTCOLLECTION3_NAMEDITEM)]\n    IDispatch *namedItem([in] BSTR name);\n}\n\n/*****************************************************************************\n *    IHTMLSelectElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f244-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLSelectElement : IDispatch\n{\n    [propput, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable]\n    HRESULT size([in] LONG v);\n\n    [propget, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable]\n    HRESULT size([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable]\n    HRESULT multiple([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable]\n    HRESULT multiple([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable]\n    HRESULT name([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable]\n    HRESULT name([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLSELECTELEMENT_OPTIONS)]\n    HRESULT options([retval, out] IDispatch **p);\n\n    [propput, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable]\n    HRESULT onchange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable]\n    HRESULT onchange([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)]\n    HRESULT selectedIndex([in] LONG v);\n\n    [propget, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)]\n    HRESULT selectedIndex([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLSELECTELEMENT_TYPE), displaybind, bindable]\n    HRESULT type([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable]\n    HRESULT value([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable]\n    HRESULT value([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSELECTELEMENT_DISABLED), displaybind, bindable]\n    HRESULT disabled([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLSELECTELEMENT_DISABLED), displaybind, bindable]\n    HRESULT disabled([retval, out] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IHTMLSELECTELEMENT_FORM)]\n    HRESULT form([retval, out] IHTMLFormElement **p);\n\n    [id(DISPID_IHTMLSELECTELEMENT_ADD)]\n    HRESULT add(\n        [in] IHTMLElement *element,\n        [optional, in] VARIANT before);\n\n    [id(DISPID_IHTMLSELECTELEMENT_REMOVE)]\n    HRESULT remove([defaultvalue(-1), in] LONG index);\n\n    [propput, id(DISPID_IHTMLSELECTELEMENT_LENGTH)]\n    HRESULT length([in] LONG v);\n\n    [propget, id(DISPID_IHTMLSELECTELEMENT_LENGTH)]\n    HRESULT length([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLSELECTELEMENT__NEWENUM), hidden, restricted]\n    HRESULT _newEnum([retval, out] IUnknown **p);\n\n    [id(DISPID_IHTMLSELECTELEMENT_ITEM)]\n    HRESULT item(\n        [optional, in] VARIANT name,\n        [optional, in] VARIANT index,\n        [retval, out] IDispatch **pdisp);\n\n    [id(DISPID_IHTMLSELECTELEMENT_TAGS)]\n    HRESULT tags(\n        [in] VARIANT tagName,\n        [retval, out] IDispatch **pdisp);\n}\n\n/*****************************************************************************\n *    DispHTMLSelectElement dispinterface\n */\n[\n    hidden,\n    uuid(3050f531-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLSelectElement\n{\nproperties:\nmethods:\n    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;\n\n    [propput, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable]\n    void size(LONG v);\n\n    [propget, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable]\n    LONG size();\n\n    [propput, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable]\n    void multiple(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable]\n    VARIANT_BOOL multiple();\n\n    [propput, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable]\n    void name(BSTR v);\n\n    [propget, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable]\n    BSTR name();\n\n    [propget, id(DISPID_IHTMLSELECTELEMENT_OPTIONS)]\n    IDispatch *options();\n\n    [propput, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable]\n    void onchange(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable]\n    VARIANT onchange();\n\n    [propput, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)]\n    void selectedIndex(LONG v);\n\n    [propget, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)]\n    LONG selectedIndex();\n\n    [propget, id(DISPID_IHTMLSELECTELEMENT_TYPE), displaybind, bindable]\n    BSTR type();\n\n    [propput, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable]\n    void value(BSTR v);\n\n    [propget, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable]\n    BSTR value();\n\n    [propget, id(DISPID_IHTMLSELECTELEMENT_FORM)]\n    IHTMLFormElement *form();\n\n    [id(DISPID_IHTMLSELECTELEMENT_ADD)]\n    void add(\n            [in] IHTMLElement *element,\n            [in, optional] VARIANT before);\n\n    [id(DISPID_IHTMLSELECTELEMENT_REMOVE)]\n    void remove([in, defaultvalue(-1)] LONG index);\n\n    [propput, id(DISPID_IHTMLSELECTELEMENT_LENGTH)]\n    void length(LONG v);\n\n    [propget, id(DISPID_IHTMLSELECTELEMENT_LENGTH)]\n    LONG length();\n\n    [propget, id(DISPID_IHTMLSELECTELEMENT__NEWENUM), hidden, restricted]\n    IUnknown *_newEnum();\n\n    [id(DISPID_IHTMLSELECTELEMENT_ITEM)]\n    IDispatch *item(\n            [in, optional] VARIANT name,\n            [in, optional] VARIANT index);\n\n    [id(DISPID_IHTMLSELECTELEMENT_TAGS)]\n    IDispatch *tags([in] VARIANT tagName);\n\n    [id(DISPID_IHTMLSELECTELEMENT2_URNS)]\n    IDispatch *urns([in] VARIANT urn);\n\n    [id(DISPID_IHTMLSELECTELEMENT4_NAMEDITEM)]\n    IDispatch *namedItem([in] BSTR name);\n}\n\n/*****************************************************************************\n *    HTMLSelectElement coclass\n */\n[\n    noncreatable,\n    uuid(3050f245-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLSelectElement\n{\n    [default]         dispinterface DispHTMLSelectElement;\n /* [source, default] dispinterface HTMLSelectElementEvents; */\n /* [source]          dispinterface HTMLSelectElementEvents2; */\n    WINE_HTMLDATAELEMENT_INTERFACES;\n    interface IHTMLControlElement;\n    interface IHTMLSelectElement;\n /* interface IHTMLSelectElement2; */\n /* interface IHTMLSelectElement4; */\n /* interface IHTMLSelectElement5; */\n /* interface IHTMLSelectElement6; */\n}\n\n/*****************************************************************************\n *    IHTMLSelectionObject interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050F25A-98B5-11CF-BB82-00AA00BDCE0B)\n]\ninterface IHTMLSelectionObject : IDispatch\n{\n    [id(DISPID_IHTMLSELECTIONOBJECT_CREATERANGE)]\n    HRESULT createRange([retval, out] IDispatch **range);\n\n    [id(DISPID_IHTMLSELECTIONOBJECT_EMPTY)]\n    HRESULT empty();\n\n    [id(DISPID_IHTMLSELECTIONOBJECT_CLEAR)]\n    HRESULT clear();\n\n    [propget, id(DISPID_IHTMLSELECTIONOBJECT_TYPE)]\n    HRESULT type([retval, out] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLSelectionObject2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f7ec-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLSelectionObject2 : IDispatch\n{\n    [id(DISPID_IHTMLSELECTIONOBJECT2_CREATERANGECOLLECTION)]\n    HRESULT createRangeCollection([out, retval] IDispatch **rangeCollection);\n\n    [propget, id(DISPID_IHTMLSELECTIONOBJECT2_TYPEDETAIL)]\n    HRESULT typeDetail([out, retval] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLSelection interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(305104b6-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLSelection : IDispatch\n{\n    [propget, id(DISPID_IHTMLSELECTION_ANCHORNODE)]\n    HRESULT anchorNode([out, retval] IHTMLDOMNode **p);\n\n    [propget, id(DISPID_IHTMLSELECTION_ANCHOROFFSET)]\n    HRESULT anchorOffset([out, retval] long *p);\n\n    [propget, id(DISPID_IHTMLSELECTION_FOCUSNODE)]\n    HRESULT focusNode([out, retval] IHTMLDOMNode **p);\n\n    [propget, id(DISPID_IHTMLSELECTION_FOCUSOFFSET)]\n    HRESULT focusOffset([out, retval] long *p);\n\n    [propget, id(DISPID_IHTMLSELECTION_ISCOLLAPSED)]\n    HRESULT isCollapsed([out, retval] VARIANT_BOOL *p);\n\n    [id(DISPID_IHTMLSELECTION_COLLAPSE)]\n    HRESULT collapse(\n        [in] IDispatch *parentNode,\n        [in] long offset);\n\n    [id(DISPID_IHTMLSELECTION_COLLAPSETOSTART)]\n    HRESULT collapseToStart();\n\n    [id(DISPID_IHTMLSELECTION_COLLAPSETOEND)]\n    HRESULT collapseToEnd();\n\n    [id(DISPID_IHTMLSELECTION_SELECTALLCHILDREN)]\n    HRESULT selectAllChildren([in] IDispatch *parentNode);\n\n    [id(DISPID_IHTMLSELECTION_DELETEFROMDOCUMENT)]\n    HRESULT deleteFromDocument();\n\n    [propget, id(DISPID_IHTMLSELECTION_RANGECOUNT)]\n    HRESULT rangeCount([out, retval] long *p);\n\n    [id(DISPID_IHTMLSELECTION_GETRANGEAT)]\n    HRESULT getRangeAt(\n        [in] long index,\n        [out, retval] IHTMLDOMRange **ppRange);\n\n    [id(DISPID_IHTMLSELECTION_ADDRANGE)]\n    HRESULT addRange([in] IDispatch *range);\n\n    [id(DISPID_IHTMLSELECTION_REMOVERANGE)]\n    HRESULT removeRange([in] IDispatch *range);\n\n    [id(DISPID_IHTMLSELECTION_REMOVEALLRANGES)]\n    HRESULT removeAllRanges();\n\n    [id(DISPID_IHTMLSELECTION_TOSTRING)]\n    HRESULT toString([out, retval] BSTR *pSelectionString);\n}\n\n/*****************************************************************************\n *    IHTMLOptionElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050F211-98B5-11CF-BB82-00AA00BDCE0B)\n]\ninterface IHTMLOptionElement : IDispatch\n{\n    [propput, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)]\n    HRESULT selected([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)]\n    HRESULT selected([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLOPTIONELEMENT_VALUE)]\n    HRESULT value([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLOPTIONELEMENT_VALUE)]\n    HRESULT value([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)]\n    HRESULT defaultSelected([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)]\n    HRESULT defaultSelected([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLOPTIONELEMENT_INDEX)]\n    HRESULT index([in] LONG v);\n\n    [propget, id(DISPID_IHTMLOPTIONELEMENT_INDEX)]\n    HRESULT index([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLOPTIONELEMENT_TEXT)]\n    HRESULT text([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLOPTIONELEMENT_TEXT)]\n    HRESULT text([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLOPTIONELEMENT_FORM)]\n    HRESULT form([retval, out] IHTMLFormElement **p);\n}\n\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f820-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLOptionElement3 : IDispatch\n{\n    [propput, id(DISPID_IHTMLOPTIONELEMENT3_LABEL), displaybind, bindable]\n    HRESULT label([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLOPTIONELEMENT3_LABEL), displaybind, bindable]\n    HRESULT label([retval, out] BSTR * p);\n}\n\n/*****************************************************************************\n *    IHTMLOptionElementFactory interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050F38C-98B5-11Cf-BB82-00AA00BDCE0B)\n]\ninterface IHTMLOptionElementFactory : IDispatch\n{\n    [id(DISPID_IHTMLOPTIONELEMENTFACTORY_CREATE)]\n    HRESULT create(\n        [optional, in] VARIANT text,\n        [optional, in] VARIANT value,\n        [optional, in] VARIANT defaultselected,\n        [optional, in] VARIANT selected,\n        [retval, out] IHTMLOptionElement **optelem);\n}\n\n/*****************************************************************************\n *    DispHTMLOptionElement dispinterface\n */\n[\n    hidden,\n    uuid(3050f52b-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLOptionElement\n{\nproperties:\nmethods:\n    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;\n\n    [propput, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)]\n    void selected(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)]\n    VARIANT_BOOL selected();\n\n    [propput, id(DISPID_IHTMLOPTIONELEMENT_VALUE)]\n    void value(BSTR v);\n\n    [propget, id(DISPID_IHTMLOPTIONELEMENT_VALUE)]\n    BSTR value();\n\n    [propput, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)]\n    void defaultSelected(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)]\n    VARIANT_BOOL defaultSelected();\n\n    [propput, id(DISPID_IHTMLOPTIONELEMENT_INDEX)]\n    void index(LONG v);\n\n    [propget, id(DISPID_IHTMLOPTIONELEMENT_INDEX)]\n    LONG index();\n\n    [propput, id(DISPID_IHTMLOPTIONELEMENT_TEXT)]\n    void text(BSTR v);\n\n    [propget, id(DISPID_IHTMLOPTIONELEMENT_TEXT)]\n    BSTR text();\n\n    [propget, id(DISPID_IHTMLOPTIONELEMENT_FORM)]\n    IHTMLFormElement *form();\n\n    [propput, id(DISPID_IHTMLOPTIONELEMENT3_LABEL), displaybind, bindable]\n    void label(BSTR v);\n\n    [propget, id(DISPID_IHTMLOPTIONELEMENT3_LABEL), displaybind, bindable]\n    BSTR label();\n}\n\n[\n    noncreatable,\n    uuid(3050f24d-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLOptionElement\n{\n    [default]           dispinterface DispHTMLOptionElement;\n    [source, default]   dispinterface HTMLElementEvents;\n    [source]            dispinterface HTMLElementEvents2;\n    WINE_HTMLDATAELEMENT_INTERFACES;\n    interface IHTMLOptionElement;\n    interface IHTMLOptionElement3;\n /* interface IHTMLOptionElement4; */\n}\n\n/*****************************************************************************\n *    IHTMLInputElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f5d2-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLInputElement : IDispatch\n{\n    [propput, id(DISPID_IHTMLINPUTELEMENT_TYPE)]\n    HRESULT type([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_TYPE)]\n    HRESULT type([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable]\n    HRESULT value([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable]\n    HRESULT value([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable]\n    HRESULT name([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable]\n    HRESULT name([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_STATUS)]\n    HRESULT status([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_STATUS)]\n    HRESULT status([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_DISABLED), displaybind, bindable]\n    HRESULT disabled([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_DISABLED), displaybind, bindable]\n    HRESULT disabled([retval, out] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_FORM)]\n    HRESULT form([retval, out] IHTMLFormElement **p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable]\n    HRESULT size([in] LONG v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable]\n    HRESULT size([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable]\n    HRESULT maxLength([in] LONG v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable]\n    HRESULT maxLength([retval, out] LONG *p);\n\n    [id(DISPID_IHTMLINPUTELEMENT_SELECT)]\n    HRESULT select();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable]\n    HRESULT onchange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable]\n    HRESULT onchange([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable]\n    HRESULT onselect([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable]\n    HRESULT onselect([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]\n    HRESULT defaultValue([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]\n    HRESULT defaultValue([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable]\n    HRESULT readOnly([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable]\n    HRESULT readOnly([retval, out] VARIANT_BOOL *p);\n\n    [id(DISPID_IHTMLINPUTELEMENT_CREATETEXTRANGE)]\n    HRESULT createTextRange([retval, out] IHTMLTxtRange **range);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable]\n    HRESULT indeterminate([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable]\n    HRESULT indeterminate([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable]\n    HRESULT defaultChecked([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable]\n    HRESULT defaultChecked([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable]\n    HRESULT checked([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable]\n    HRESULT checked([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable]\n    HRESULT border([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable]\n    HRESULT border([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable]\n    HRESULT vspace([in] LONG v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable]\n    HRESULT vspace([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable]\n    HRESULT hspace([in] LONG v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable]\n    HRESULT hspace([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable]\n    HRESULT alt([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable]\n    HRESULT alt([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable]\n    HRESULT src([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable]\n    HRESULT src([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable]\n    HRESULT lowsrc([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable]\n    HRESULT lowsrc([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable]\n    HRESULT vrml([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable]\n    HRESULT vrml([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable]\n    HRESULT dynsrc([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable]\n    HRESULT dynsrc([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_READYSTATE)]\n    HRESULT readyState([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_COMPLETE)]\n    HRESULT complete([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable]\n    HRESULT loop([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable]\n    HRESULT loop([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable]\n    HRESULT align([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable]\n    HRESULT align([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable]\n    HRESULT onload([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable]\n    HRESULT onload([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable]\n    HRESULT onerror([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable]\n    HRESULT onerror([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable]\n    HRESULT onabort([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable]\n    HRESULT onabort([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_WIDTH)]\n    HRESULT width([in] LONG v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_WIDTH)]\n    HRESULT width([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)]\n    HRESULT height([in] LONG v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)]\n    HRESULT height([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable]\n    HRESULT start([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable]\n    HRESULT start([retval, out] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLInputTextElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f2a6-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLInputTextElement : IDispatch\n{\n    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_TYPE)]\n    HRESULT type([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_VALUE), displaybind, bindable]\n    HRESULT value([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_VALUE), displaybind, bindable]\n    HRESULT value([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_NAME), displaybind, bindable]\n    HRESULT name([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_NAME), displaybind, bindable]\n    HRESULT name([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_STATUS)]\n    HRESULT status([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_STATUS)]\n    HRESULT status([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_DISABLED), displaybind, bindable]\n    HRESULT disabled([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_DISABLED), displaybind, bindable]\n    HRESULT disabled([retval, out] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_FORM)]\n    HRESULT form([retval, out] IHTMLFormElement **p);\n\n    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]\n    HRESULT defaultValue([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]\n    HRESULT defaultValue([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_SIZE), displaybind, bindable]\n    HRESULT size([in] LONG v);\n\n    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_SIZE), displaybind, bindable]\n    HRESULT size([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_MAXLENGTH), displaybind, bindable]\n    HRESULT maxLength([in] LONG v);\n\n    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_MAXLENGTH), displaybind, bindable]\n    HRESULT maxLength([retval, out] LONG *p);\n\n    [id(DISPID_IHTMLINPUTTEXTELEMENT_SELECT)]\n    HRESULT select();\n\n    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_ONCHANGE), displaybind, bindable]\n    HRESULT onchange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_ONCHANGE), displaybind, bindable]\n    HRESULT onchange([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_ONSELECT), displaybind, bindable]\n    HRESULT onselect([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_ONSELECT), displaybind, bindable]\n    HRESULT onselect([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_READONLY), displaybind, bindable]\n    HRESULT readOnly([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_READONLY), displaybind, bindable]\n    HRESULT readOnly([retval, out] VARIANT_BOOL *p);\n\n    [id(DISPID_IHTMLINPUTTEXTELEMENT_CREATETEXTRANGE)]\n    HRESULT createTextRange([retval, out] IHTMLTxtRange **range);\n}\n\n/*****************************************************************************\n *    IHTMLInputTextElement2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f2d2-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLInputTextElement2 : IDispatch\n{\n    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT2_SELECTIONSTART)]\n    HRESULT selectionStart([in] long v);\n\n    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT2_SELECTIONSTART)]\n    HRESULT selectionStart([out, retval] long *p);\n\n    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT2_SELECTIONEND)]\n    HRESULT selectionEnd([in] long v);\n\n    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT2_SELECTIONEND)]\n    HRESULT selectionEnd([out, retval] long *p);\n\n    [id(DISPID_IHTMLINPUTTEXTELEMENT2_SETSELECTIONRANGE)]\n    HRESULT setSelectionRange([in] long start, [in] long end);\n}\n\n[\n    hidden,\n    uuid(3050f57d-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLInputElement\n{\nproperties:\nmethods:\n    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_TYPE)]\n    void type(BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_TYPE)]\n    BSTR type();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable]\n    void value(BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable]\n    BSTR value();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable]\n    void name(BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable]\n    BSTR name();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_STATUS)]\n    void status(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_STATUS)]\n    VARIANT_BOOL status();\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_FORM)]\n    IHTMLFormElement *form();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable]\n    void size(LONG v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable]\n    LONG size();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable]\n    void maxLength(LONG v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable]\n    LONG maxLength();\n\n    [id(DISPID_IHTMLINPUTELEMENT_SELECT)]\n    void select();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable]\n    void onchange(VARIANT v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable]\n    VARIANT onchange();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable]\n    void onselect(VARIANT v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable]\n    VARIANT onselect();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]\n    void defaultValue(BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]\n    BSTR defaultValue();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable]\n    void readOnly(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable]\n    VARIANT_BOOL readOnly();\n\n    [id(DISPID_IHTMLINPUTELEMENT_CREATETEXTRANGE)]\n    IHTMLTxtRange *createTextRange();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable]\n    void indeterminate(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable]\n    VARIANT_BOOL indeterminate();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable]\n    void defaultChecked(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable]\n    VARIANT_BOOL defaultChecked();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable]\n    void checked(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable]\n    VARIANT_BOOL checked();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable]\n    void border(VARIANT v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable]\n    VARIANT border();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable]\n    void vspace(LONG v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable]\n    LONG vspace();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable]\n    void hspace(LONG v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable]\n    LONG hspace();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable]\n    void alt(BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable]\n    BSTR alt();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable]\n    void src(BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable]\n    BSTR src();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable]\n    void lowsrc(BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable]\n    BSTR lowsrc();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable]\n    void vrml(BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable]\n    BSTR vrml();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable]\n    void dynsrc(BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable]\n    BSTR dynsrc();\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_COMPLETE)]\n    VARIANT_BOOL complete();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable]\n    void loop(VARIANT v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable]\n    VARIANT loop();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable]\n    void align(BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable]\n    BSTR align();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable]\n    void onload(VARIANT v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable]\n    VARIANT onload();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable]\n    void onerror(VARIANT v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable]\n    VARIANT onerror();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable]\n    void onabort(VARIANT v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable]\n    VARIANT onabort();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_WIDTH)]\n    void width(LONG v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_WIDTH)]\n    LONG width();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)]\n    void height(LONG v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)]\n    LONG height();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable]\n    void start(BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable]\n    BSTR start();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT2_ACCEPT), displaybind, bindable]\n    void accept(BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT2_ACCEPT), displaybind, bindable]\n    BSTR accept();\n\n    [propput, id(DISPID_IHTMLINPUTELEMENT2_USEMAP), displaybind, bindable]\n    void useMap(BSTR v);\n\n    [propget, id(DISPID_IHTMLINPUTELEMENT2_USEMAP), displaybind, bindable]\n    BSTR useMap();\n\n    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT2_SELECTIONSTART)]\n    void selectionStart(long v);\n\n    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT2_SELECTIONSTART)]\n    long selectionStart();\n\n    [propput, id(DISPID_IHTMLINPUTTEXTELEMENT2_SELECTIONEND)]\n    void selectionEnd(long v);\n\n    [propget, id(DISPID_IHTMLINPUTTEXTELEMENT2_SELECTIONEND)]\n    long selectionEnd();\n\n    [id(DISPID_IHTMLINPUTTEXTELEMENT2_SETSELECTIONRANGE)]\n    void setSelectionRange([in] long start, [in] long end);\n}\n\n/*****************************************************************************\n *    HTMLInputElement coclass\n */\n[\n    noncreatable,\n    uuid(3050f5d8-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLInputElement\n{\n    [default]         dispinterface DispHTMLInputElement;\n /* [source, default] dispinterface HTMLInputTextElementEvents; */\n /* [source]          dispinterface HTMLInputTextElementEvents2; */\n /* [source]          dispinterface HTMLOptionButtonElementEvents; */\n /* [source]          dispinterface HTMLButtonElementEvents; */\n    WINE_HTMLDATAELEMENT_INTERFACES;\n    interface IHTMLControlElement;\n    interface IHTMLInputElement;\n /* interface IHTMLInputElement2; */\n    interface IHTMLInputTextElement;\n    interface IHTMLInputTextElement2;\n /* interface IHTMLInputHiddenElement; */\n /* interface IHTMLInputButtonElement; */\n /* interface IHTMLInputFileElement; */\n /* interface IHTMLOptionButtonElement; */\n /* interface IHTMLInputImage; */\n /* interface IHTMLInputElement3; */\n /* interface IHTMLInputRangeElement; */\n}\n\n/*****************************************************************************\n *    IHTMLTextAreaElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f2aa-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLTextAreaElement : IDispatch\n{\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_TYPE)]\n    HRESULT type([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_VALUE), displaybind, bindable]\n    HRESULT value([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_VALUE), displaybind, bindable]\n    HRESULT value([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_NAME), displaybind, bindable]\n    HRESULT name([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_NAME), displaybind, bindable]\n    HRESULT name([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_STATUS)]\n    HRESULT status([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_STATUS)]\n    HRESULT status([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_DISABLED), displaybind, bindable]\n    HRESULT disabled([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_DISABLED), displaybind, bindable]\n    HRESULT disabled([retval, out] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_FORM)]\n    HRESULT form([retval, out] IHTMLFormElement **p);\n\n    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]\n    HRESULT defaultValue([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]\n    HRESULT defaultValue([retval, out] BSTR *p);\n\n    [id(DISPID_IHTMLTEXTAREAELEMENT_SELECT)]\n    HRESULT select();\n\n    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE), displaybind, bindable]\n    HRESULT onchange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE), displaybind, bindable]\n    HRESULT onchange([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ONSELECT), displaybind, bindable]\n    HRESULT onselect([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ONSELECT), displaybind, bindable]\n    HRESULT onselect([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_READONLY), displaybind, bindable]\n    HRESULT readOnly([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_READONLY), displaybind, bindable]\n    HRESULT readOnly([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ROWS), displaybind, bindable]\n    HRESULT rows([in] LONG v);\n\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ROWS), displaybind, bindable]\n    HRESULT rows([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_COLS), displaybind, bindable]\n    HRESULT cols([in] LONG v);\n\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_COLS), displaybind, bindable]\n    HRESULT cols([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_WRAP), displaybind, bindable]\n    HRESULT wrap([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_WRAP), displaybind, bindable]\n    HRESULT wrap([retval, out] BSTR *p);\n\n    [id(DISPID_IHTMLTEXTAREAELEMENT_CREATETEXTRANGE)]\n    HRESULT createTextRange([retval, out] IHTMLTxtRange **range);\n}\n\n/*****************************************************************************\n *    DispHTMLTextAreaElement dispinterface\n */\n[\n    hidden,\n    uuid(3050f521-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLTextAreaElement\n{\nproperties:\nmethods:\n    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;\n\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_TYPE)]\n    BSTR type();\n\n    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_VALUE), displaybind, bindable]\n    void value(BSTR v);\n\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_VALUE), displaybind, bindable]\n    BSTR value();\n\n    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_NAME), displaybind, bindable]\n    void name(BSTR v);\n\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_NAME), displaybind, bindable]\n    BSTR name();\n\n    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_STATUS)]\n    void status(VARIANT v);\n\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_STATUS)]\n    VARIANT status();\n\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_FORM)]\n    IHTMLFormElement *form();\n\n    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]\n    void defaultValue(BSTR v);\n\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]\n    BSTR defaultValue();\n\n    [id(DISPID_IHTMLTEXTAREAELEMENT_SELECT)]\n    void select();\n\n    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE), displaybind, bindable]\n    void onchange(VARIANT v);\n\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE), displaybind, bindable]\n    VARIANT onchange();\n\n    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ONSELECT), displaybind, bindable]\n    void onselect(VARIANT v);\n\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ONSELECT), displaybind, bindable]\n    VARIANT onselect();\n\n    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_READONLY), displaybind, bindable]\n    void readOnly(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_READONLY), displaybind, bindable]\n    VARIANT_BOOL readOnly();\n\n    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ROWS), displaybind, bindable]\n    void rows(LONG v);\n\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ROWS), displaybind, bindable]\n    LONG rows();\n\n    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_COLS), displaybind, bindable]\n    void cols(LONG v);\n\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_COLS), displaybind, bindable]\n    LONG cols();\n\n    [propput, id(DISPID_IHTMLTEXTAREAELEMENT_WRAP), displaybind, bindable]\n    void wrap(BSTR v);\n\n    [propget, id(DISPID_IHTMLTEXTAREAELEMENT_WRAP), displaybind, bindable]\n    BSTR wrap();\n\n    [id(DISPID_IHTMLTEXTAREAELEMENT_CREATETEXTRANGE)]\n    IHTMLTxtRange *createTextRange();\n}\n\n/*****************************************************************************\n *    HTMLTextAreaElement coclass\n */\n[\n    noncreatable,\n    uuid(3050f2ac-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLTextAreaElement\n{\n    [default]         dispinterface DispHTMLTextAreaElement;\n /* [source, default] dispinterface HTMLInputTextElementEvents; */\n /* [source]          dispinterface HTMLInputTextElementEvents2; */\n    [source]          dispinterface HTMLTextContainerEvents;\n    [source]          dispinterface HTMLTextContainerEvents2;\n    WINE_HTMLDATAELEMENT_INTERFACES;\n    interface IHTMLControlElement;\n    interface IHTMLTextContainer;\n    interface IHTMLTextAreaElement;\n /* interface IHTMLTextAreaElement2; */\n}\n\n/*****************************************************************************\n *    IHTMLButtonElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f2bb-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLButtonElement : IDispatch\n{\n    [propget, id(DISPID_IHTMLBUTTONELEMENT_TYPE)]\n    HRESULT type([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLBUTTONELEMENT_VALUE), displaybind, bindable]\n    HRESULT value([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLBUTTONELEMENT_VALUE), displaybind, bindable]\n    HRESULT value([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLBUTTONELEMENT_NAME), displaybind, bindable]\n    HRESULT name([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLBUTTONELEMENT_NAME), displaybind, bindable]\n    HRESULT name([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLBUTTONELEMENT_STATUS)]\n    HRESULT status([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLBUTTONELEMENT_STATUS)]\n    HRESULT status([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLBUTTONELEMENT_DISABLED), displaybind, bindable]\n    HRESULT disabled([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLBUTTONELEMENT_DISABLED), displaybind, bindable]\n    HRESULT disabled([out, retval] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IHTMLBUTTONELEMENT_FORM)]\n    HRESULT form([out, retval] IHTMLFormElement **p);\n\n    [id(DISPID_IHTMLBUTTONELEMENT_CREATETEXTRANGE)]\n    HRESULT createTextRange([out, retval] IHTMLTxtRange **range);\n}\n\n/*****************************************************************************\n *    DispHTMLButtonElement dispinterface\n */\n[\n    hidden,\n    uuid(3050f51f-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLButtonElement\n{\nproperties:\nmethods:\n    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;\n\n    [propget, id(DISPID_IHTMLBUTTONELEMENT_TYPE)]\n    BSTR type();\n\n    [propput, id(DISPID_IHTMLBUTTONELEMENT_VALUE), displaybind, bindable]\n    void value(BSTR v);\n\n    [propget, id(DISPID_IHTMLBUTTONELEMENT_VALUE), displaybind, bindable]\n    BSTR value();\n\n    [propput, id(DISPID_IHTMLBUTTONELEMENT_NAME), displaybind, bindable]\n    void name(BSTR v);\n\n    [propget, id(DISPID_IHTMLBUTTONELEMENT_NAME), displaybind, bindable]\n    BSTR name();\n\n    [propput, id(DISPID_IHTMLBUTTONELEMENT_STATUS)]\n    void status(VARIANT v);\n\n    [propget, id(DISPID_IHTMLBUTTONELEMENT_STATUS)]\n    VARIANT status();\n\n    [propget, id(DISPID_IHTMLBUTTONELEMENT_FORM)]\n    IHTMLFormElement *form();\n\n    [id(DISPID_IHTMLBUTTONELEMENT_CREATETEXTRANGE)]\n    IHTMLTxtRange *createTextRange();\n}\n\n/*****************************************************************************\n *    HTMLButtonElement coclass\n */\n[\n    noncreatable,\n    uuid(3050f2c6-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLButtonElement\n{\n    [default]         dispinterface DispHTMLButtonElement;\n /* [source, default] dispinterface HTMLButtonElementEvents; */\n /* [source]          dispinterface HTMLButtonElementEvents2; */\n    WINE_HTMLDATAELEMENT_INTERFACES;\n    interface IHTMLControlElement;\n    interface IHTMLTextContainer;\n    interface IHTMLButtonElement;\n /* interface IHTMLButtonElement2; */\n}\n\n/*****************************************************************************\n *    IHTMLHtmlElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f81c-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLHtmlElement : IDispatch\n{\n    [propput, id(DISPID_IHTMLHTMLELEMENT_VERSION), displaybind, bindable]\n    HRESULT version([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLHTMLELEMENT_VERSION), displaybind, bindable]\n    HRESULT version([out, retval] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLHeadElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f81d-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLHeadElement : IDispatch\n{\n    [propput, id(DISPID_IHTMLHEADELEMENT_PROFILE), displaybind, bindable]\n    HRESULT profile([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLHEADELEMENT_PROFILE), displaybind, bindable]\n    HRESULT profile([retval, out] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLHeadElement2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3051042f-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLHeadElement2 : IDispatch\n{\n    [propput, id(DISPID_IHTMLHEADELEMENT2_IE8_PROFILE), displaybind, bindable]\n    HRESULT profile([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLHEADELEMENT2_IE8_PROFILE), displaybind, bindable]\n    HRESULT profile([retval, out] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLTitleElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f322-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLTitleElement : IDispatch\n{\n    [propput, id(DISPID_IHTMLTITLEELEMENT_TEXT), bindable]\n    HRESULT text([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLTITLEELEMENT_TEXT), bindable]\n    HRESULT text([retval, out] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLMetaElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f203-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLMetaElement : IDispatch\n{\n    [propput, id(DISPID_IHTMLMETAELEMENT_HTTPEQUIV), displaybind, bindable]\n    HRESULT httpEquiv([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLMETAELEMENT_HTTPEQUIV), displaybind, bindable]\n    HRESULT httpEquiv([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLMETAELEMENT_CONTENT), displaybind, bindable]\n    HRESULT content([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLMETAELEMENT_CONTENT), displaybind, bindable]\n    HRESULT content([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLMETAELEMENT_NAME), displaybind, bindable]\n    HRESULT name([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLMETAELEMENT_NAME), displaybind, bindable]\n    HRESULT name([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLMETAELEMENT_URL), displaybind, bindable]\n    HRESULT url([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLMETAELEMENT_URL), displaybind, bindable]\n    HRESULT url([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLMETAELEMENT_CHARSET), displaybind, bindable]\n    HRESULT charset([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLMETAELEMENT_CHARSET), displaybind, bindable]\n    HRESULT charset([out, retval] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLMetaElement2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f81f-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLMetaElement2 : IDispatch\n{\n    [propput, id(DISPID_IHTMLMETAELEMENT2_SCHEME), displaybind, bindable]\n    HRESULT scheme([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLMETAELEMENT2_SCHEME), displaybind, bindable]\n    HRESULT scheme([out, retval] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLMetaElement3 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(30510495-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLMetaElement3 : IDispatch\n{\n    [propput, id(DISPID_IHTMLMETAELEMENT3_IE8_URL)]\n    HRESULT url([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLMETAELEMENT3_IE8_URL)]\n    HRESULT url([out, retval] BSTR *p);\n}\n\n/*****************************************************************************\n *    DispHTMLHtmlElement interface\n */\n[\n    hidden,\n    uuid(3050f560-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLHtmlElement\n{\nproperties:\nmethods:\n    WINE_HTMLELEMENT_DISPINTERFACE_DECL;\n\n    [propput, id(DISPID_IHTMLHTMLELEMENT_VERSION), displaybind, bindable]\n    void version(BSTR v);\n\n    [propget, id(DISPID_IHTMLHTMLELEMENT_VERSION), displaybind, bindable]\n    BSTR version();\n}\n\n/*****************************************************************************\n *    HTMLHtmlElement coclass\n */\n[\n    noncreatable,\n    uuid(3050f491-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLHtmlElement\n{\n    [default]         dispinterface DispHTMLHtmlElement;\n    [source, default] dispinterface HTMLElementEvents;\n    [source]          dispinterface HTMLElementEvents2;\n    WINE_HTMLELEMENT_INTERFACES;\n    interface IHTMLHtmlElement;\n}\n\n/*****************************************************************************\n *    DispHTMLHeadElement interface\n */\n[\n    hidden,\n    uuid(3050f561-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLHeadElement\n{\nproperties:\nmethods:\n    WINE_HTMLELEMENT_DISPINTERFACE_DECL;\n\n    [propput, id(DISPID_IHTMLHEADELEMENT_PROFILE), displaybind, bindable]\n    void profile(BSTR v);\n\n    [propget, id(DISPID_IHTMLHEADELEMENT_PROFILE), displaybind, bindable]\n    BSTR profile();\n\n    [propput, id(DISPID_IHTMLHEADELEMENT2_IE8_PROFILE), displaybind, bindable]\n    void ie8_profile(BSTR v);\n\n    [propget, id(DISPID_IHTMLHEADELEMENT2_IE8_PROFILE), displaybind, bindable]\n    BSTR ie8_profile();\n}\n\n/*****************************************************************************\n *    HTMLHeadElement coclass\n */\n[\n    noncreatable,\n    uuid(3050f493-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLHeadElement\n{\n    [default]         dispinterface DispHTMLHeadElement;\n    [source, default] dispinterface HTMLElementEvents;\n    [source]          dispinterface HTMLElementEvents2;\n    WINE_HTMLELEMENT_INTERFACES;\n    interface IHTMLHeadElement;\n    interface IHTMLHeadElement2;\n}\n\n/*****************************************************************************\n *    DispHTMLTitleElement interface\n */\n[\n    hidden,\n    uuid(3050f516-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLTitleElement\n{\nproperties:\nmethods:\n    WINE_HTMLELEMENT_DISPINTERFACE_DECL;\n\n    [propput, id(DISPID_IHTMLTITLEELEMENT_TEXT), bindable]\n    void text(BSTR v);\n\n    [propget, id(DISPID_IHTMLTITLEELEMENT_TEXT), bindable]\n    BSTR text();\n}\n\n/*****************************************************************************\n *    HTMLTitleElement coclass\n */\n[\n    noncreatable,\n    uuid(3050f284-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLTitleElement\n{\n    [default]         dispinterface DispHTMLTitleElement;\n    [source, default] dispinterface HTMLElementEvents;\n    [source]          dispinterface HTMLElementEvents2;\n    WINE_HTMLELEMENT_INTERFACES;\n    interface IHTMLTitleElement;\n}\n\n/*****************************************************************************\n *    DispHTMLMetaElement dispinterface\n */\n[\n    hidden,\n    uuid(3050f517-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLMetaElement\n{\nproperties:\nmethods:\n    WINE_HTMLELEMENT_DISPINTERFACE_DECL;\n\n    [propput, id(DISPID_IHTMLMETAELEMENT_HTTPEQUIV), displaybind, bindable]\n    void httpEquiv(BSTR v);\n\n    [propget, id(DISPID_IHTMLMETAELEMENT_HTTPEQUIV), displaybind, bindable]\n    BSTR httpEquiv();\n\n    [propput, id(DISPID_IHTMLMETAELEMENT_CONTENT), displaybind, bindable]\n    void content(BSTR v);\n\n    [propget, id(DISPID_IHTMLMETAELEMENT_CONTENT), displaybind, bindable]\n    BSTR content();\n\n    [propput, id(DISPID_IHTMLMETAELEMENT_NAME), displaybind, bindable]\n    void name(BSTR v);\n\n    [propget, id(DISPID_IHTMLMETAELEMENT_NAME), displaybind, bindable]\n    BSTR name();\n\n    [propput, id(DISPID_IHTMLMETAELEMENT_URL), displaybind, bindable]\n    void url(BSTR v);\n\n    [propget, id(DISPID_IHTMLMETAELEMENT_URL), displaybind, bindable]\n    BSTR url();\n\n    [propput, id(DISPID_IHTMLMETAELEMENT_CHARSET), displaybind, bindable]\n    void charset(BSTR v);\n\n    [propget, id(DISPID_IHTMLMETAELEMENT_CHARSET), displaybind, bindable]\n    BSTR charset();\n\n    [propput, id(DISPID_IHTMLMETAELEMENT2_SCHEME), displaybind, bindable]\n    void scheme(BSTR v);\n\n    [propget, id(DISPID_IHTMLMETAELEMENT2_SCHEME), displaybind, bindable]\n    BSTR scheme();\n\n    [propput, id(DISPID_IHTMLMETAELEMENT3_IE8_URL)]\n    void ie8_url(BSTR v);\n\n    [propget, id(DISPID_IHTMLMETAELEMENT3_IE8_URL)]\n    BSTR ie8_url();\n}\n\n/*****************************************************************************\n *    HTMLMetaElement coclass\n */\n[\n    noncreatable,\n    uuid(3050f275-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLMetaElement\n{\n    [default]         dispinterface DispHTMLMetaElement;\n    [source, default] dispinterface HTMLElementEvents;\n    [source]          dispinterface HTMLElementEvents2;\n    WINE_HTMLELEMENT_INTERFACES;\n    interface IHTMLMetaElement;\n    interface IHTMLMetaElement2;\n    interface IHTMLMetaElement3;\n}\n\n/*****************************************************************************\n *    DispHTMLUnknownElement dispinterface\n */\n[\n    hidden,\n    uuid(3050f539-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLUnknownElement\n{\nproperties:\nmethods:\n    WINE_HTMLELEMENT_DISPINTERFACE_DECL;\n}\n\n/*****************************************************************************\n *    HTMLUnknownElement coclass\n */\n[\n    noncreatable,\n    uuid(3050f268-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLUnknownElement\n{\n    [default]         dispinterface DispHTMLUnknownElement;\n    [source, default] dispinterface HTMLElementEvents;\n    [source]          dispinterface HTMLElementEvents2;\n    WINE_HTMLELEMENT_INTERFACES;\n /* interface IHTMLUnknownElement; */\n}\n\n/*****************************************************************************\n *    IOmHistory interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(FECEAAA2-8405-11CF-8BA1-00AA00476DA6)\n]\ninterface IOmHistory : IDispatch\n{\n    [propget, id(DISPID_IOMHISTORY_LENGTH)]\n    HRESULT length([retval, out] short *p);\n\n    [id(DISPID_IOMHISTORY_BACK)]\n    HRESULT back([optional, in] VARIANT *pvargdistance);\n\n    [id(DISPID_IOMHISTORY_FORWARD)]\n    HRESULT forward([optional, in] VARIANT *pvargdistance);\n\n    [id(DISPID_IOMHISTORY_GO)]\n    HRESULT go([optional, in] VARIANT *pvargdistance);\n}\n\n[\n    noncreatable,\n    uuid(FECEAAA3-8405-11cf-8BA1-00AA00476DA6)\n]\ncoclass HTMLHistory\n{\n    [default]           interface IOmHistory;\n}\n\n/*****************************************************************************\n *    IHTMLMimeTypesCollection interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050F3FC-98B5-11CF-BB82-00AA00BDCE0B)\n]\ninterface IHTMLMimeTypesCollection : IDispatch\n{\n    [propget, id(DISPID_IHTMLMIMETYPESCOLLECTION_LENGTH)]\n    HRESULT length([retval, out] LONG *p);\n}\n\n[\n    noncreatable,\n    uuid(3050f3fe-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass CMimeTypes\n{\n    [default]           interface IHTMLMimeTypesCollection;\n}\n\n/*****************************************************************************\n *    IHTMLPluginsCollection interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050F3FD-98B5-11CF-BB82-00AA00BDCE0B)\n]\ninterface IHTMLPluginsCollection : IDispatch\n{\n    [propget, id(DISPID_IHTMLPLUGINSCOLLECTION_LENGTH)]\n    HRESULT length([retval, out] LONG *p);\n\n    [id(DISPID_IHTMLPLUGINSCOLLECTION_REFRESH)]\n    HRESULT refresh([defaultvalue(0), in] VARIANT_BOOL reload);\n}\n\n[\n    hidden,\n    uuid(3050f54a-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispCPlugins\n{\n properties:\nmethods:\n    [propget, id(DISPID_IHTMLPLUGINSCOLLECTION_LENGTH)]\n    long length();\n\n    [id(DISPID_IHTMLPLUGINSCOLLECTION_REFRESH)]\n    void refresh([defaultvalue(0), in] VARIANT_BOOL reload);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]\n    IDispatch *constructor();\n}\n\n[\n    noncreatable,\n    uuid(3050f3ff-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass CPlugins\n{\n    [default]  dispinterface DispCPlugins;\n               interface IHTMLPluginsCollection;\n               interface IHTMLDOMConstructor;\n}\n\n/*****************************************************************************\n *    IHTMLOpsProfile interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050F401-98B5-11CF-BB82-00AA00BDCE0B)\n]\ninterface IHTMLOpsProfile : IDispatch\n{\n    [id(DISPID_IHTMLOPSPROFILE_ADDREQUEST)]\n    HRESULT addRequest(\n        [in] BSTR name,\n        [optional, in] VARIANT reserved,\n        [retval, out] VARIANT_BOOL *success);\n\n    [id(DISPID_IHTMLOPSPROFILE_CLEARREQUEST)]\n    HRESULT clearRequest();\n\n    [id(DISPID_IHTMLOPSPROFILE_DOREQUEST)]\n    HRESULT doRequest(\n        [in] VARIANT usage,\n        [optional, in] VARIANT fname,\n        [optional, in] VARIANT domain,\n        [optional, in] VARIANT path,\n        [optional, in] VARIANT expire,\n        [optional, in] VARIANT reserved);\n\n    [id(DISPID_IHTMLOPSPROFILE_GETATTRIBUTE)]\n    HRESULT getAttribute(\n        [in] BSTR name,\n        [retval, out] BSTR *value);\n\n    [id(DISPID_IHTMLOPSPROFILE_SETATTRIBUTE)]\n    HRESULT setAttribute(\n        [in] BSTR name,\n        [in] BSTR value,\n        [optional, in] VARIANT prefs,\n        [retval, out] VARIANT_BOOL *success);\n\n    [id(DISPID_IHTMLOPSPROFILE_COMMITCHANGES)]\n    HRESULT commitChanges([retval, out] VARIANT_BOOL *success);\n\n    [id(DISPID_IHTMLOPSPROFILE_ADDREADREQUEST)]\n    HRESULT addReadRequest(\n        [in] BSTR name,\n        [optional, in] VARIANT reserved,\n        [retval, out] VARIANT_BOOL *success);\n\n    [id(DISPID_IHTMLOPSPROFILE_DOREADREQUEST)]\n    HRESULT doReadRequest(\n        [in] VARIANT usage,\n        [optional, in] VARIANT fname,\n        [optional, in] VARIANT domain,\n        [optional, in] VARIANT path,\n        [optional, in] VARIANT expire,\n        [optional, in] VARIANT reserved);\n\n    [id(DISPID_IHTMLOPSPROFILE_DOWRITEREQUEST)]\n    HRESULT doWriteRequest([retval, out] VARIANT_BOOL *success);\n}\n\n[\n    noncreatable,\n    uuid(3050f402-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass COpsProfile\n{\n    [default]           interface IHTMLOpsProfile;\n}\n\n/*****************************************************************************\n *    IOmNavigator interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(FECEAAA5-8405-11CF-8BA1-00AA00476DA6)\n]\ninterface IOmNavigator : IDispatch\n{\n    [propget, id(DISPID_IOMNAVIGATOR_APPCODENAME)]\n    HRESULT appCodeName([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IOMNAVIGATOR_APPNAME)]\n    HRESULT appName([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IOMNAVIGATOR_APPVERSION)]\n    HRESULT appVersion([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IOMNAVIGATOR_USERAGENT)]\n    HRESULT userAgent([retval, out] BSTR *p);\n\n    [id(DISPID_IOMNAVIGATOR_JAVAENABLED)]\n    HRESULT javaEnabled([retval, out] VARIANT_BOOL *enabled);\n\n    [id(DISPID_IOMNAVIGATOR_TAINTENABLED)]\n    HRESULT taintEnabled([retval, out] VARIANT_BOOL *enabled);\n\n    [propget, id(DISPID_IOMNAVIGATOR_MIMETYPES)]\n    HRESULT mimeTypes([retval, out] IHTMLMimeTypesCollection **p);\n\n    [propget, id(DISPID_IOMNAVIGATOR_PLUGINS)]\n    HRESULT plugins([retval, out] IHTMLPluginsCollection **p);\n\n    [propget, id(DISPID_IOMNAVIGATOR_COOKIEENABLED)]\n    HRESULT cookieEnabled([retval, out] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IOMNAVIGATOR_OPSPROFILE)]\n    HRESULT opsProfile([retval, out] IHTMLOpsProfile **p);\n\n    [id(DISPID_IOMNAVIGATOR_TOSTRING)]\n    HRESULT toString([retval, out] BSTR *String);\n\n    [propget, id(DISPID_IOMNAVIGATOR_CPUCLASS)]\n    HRESULT cpuClass([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IOMNAVIGATOR_SYSTEMLANGUAGE)]\n    HRESULT systemLanguage([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IOMNAVIGATOR_BROWSERLANGUAGE), hidden]\n    HRESULT browserLanguage([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IOMNAVIGATOR_USERLANGUAGE)]\n    HRESULT userLanguage([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IOMNAVIGATOR_PLATFORM)]\n    HRESULT platform([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IOMNAVIGATOR_APPMINORVERSION)]\n    HRESULT appMinorVersion([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IOMNAVIGATOR_CONNECTIONSPEED), hidden]\n    HRESULT connectionSpeed([retval, out] LONG *p);\n\n    [propget, id(DISPID_IOMNAVIGATOR_ONLINE)]\n    HRESULT onLine([retval, out] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IOMNAVIGATOR_USERPROFILE)]\n    HRESULT userProfile([retval, out] IHTMLOpsProfile **p);\n}\n\n/*****************************************************************************\n *    DispHTMLNavigator dispinterface\n */\n[\n    hidden,\n    uuid(3050f54c-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLNavigator\n{\nproperties:\nmethods:\n    [propget, id(DISPID_IOMNAVIGATOR_APPCODENAME)]\n    BSTR appCodeName();\n\n    [propget, id(DISPID_IOMNAVIGATOR_APPNAME)]\n    BSTR appName();\n\n    [propget, id(DISPID_IOMNAVIGATOR_APPVERSION)]\n    BSTR appVersion();\n\n    [propget, id(DISPID_IOMNAVIGATOR_USERAGENT)]\n    BSTR userAgent();\n\n    [id(DISPID_IOMNAVIGATOR_JAVAENABLED)]\n    VARIANT_BOOL javaEnabled();\n\n    [id(DISPID_IOMNAVIGATOR_TAINTENABLED)]\n    VARIANT_BOOL taintEnabled();\n\n    [propget, id(DISPID_IOMNAVIGATOR_MIMETYPES)]\n    IHTMLMimeTypesCollection *mimeTypes();\n\n    [propget, id(DISPID_IOMNAVIGATOR_PLUGINS)]\n    IHTMLPluginsCollection *plugins();\n\n    [propget, id(DISPID_IOMNAVIGATOR_COOKIEENABLED)]\n    VARIANT_BOOL cookieEnabled();\n\n    [propget, id(DISPID_IOMNAVIGATOR_OPSPROFILE)]\n    IHTMLOpsProfile *opsProfile();\n\n    [id(DISPID_IOMNAVIGATOR_TOSTRING)]\n    BSTR toString();\n\n    [propget, id(DISPID_IOMNAVIGATOR_CPUCLASS)]\n    BSTR cpuClass();\n\n    [propget, id(DISPID_IOMNAVIGATOR_SYSTEMLANGUAGE)]\n    BSTR systemLanguage();\n\n    [propget, id(DISPID_IOMNAVIGATOR_BROWSERLANGUAGE), hidden]\n    BSTR browserLanguage();\n\n    [propget, id(DISPID_IOMNAVIGATOR_USERLANGUAGE)]\n    BSTR userLanguage();\n\n    [propget, id(DISPID_IOMNAVIGATOR_PLATFORM)]\n    BSTR platform();\n\n    [propget, id(DISPID_IOMNAVIGATOR_APPMINORVERSION)]\n    BSTR appMinorVersion();\n\n    [propget, id(DISPID_IOMNAVIGATOR_CONNECTIONSPEED), hidden]\n    LONG connectionSpeed();\n\n    [propget, id(DISPID_IOMNAVIGATOR_ONLINE)]\n    VARIANT_BOOL onLine();\n\n    [propget, id(DISPID_IOMNAVIGATOR_USERPROFILE)]\n    IHTMLOpsProfile *userProfile();\n\n    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;\n}\n\n[\n    noncreatable,\n    uuid(FECEAAA6-8405-11cf-8BA1-00AA00476DA6)\n]\ncoclass HTMLNavigator\n{\n    [default]  dispinterface DispHTMLNavigator;\n               interface IOmNavigator;\n}\n\n/*****************************************************************************\n *    IHTMLLocation interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(163BB1E0-6E00-11cf-837A-48DC04C10000)\n]\ninterface IHTMLLocation : IDispatch\n{\n    [propput, id(DISPID_IHTMLLOCATION_HREF)]\n    HRESULT href([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLLOCATION_HREF)]\n    HRESULT href([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLLOCATION_PROTOCOL)]\n    HRESULT protocol([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLLOCATION_PROTOCOL)]\n    HRESULT protocol([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLLOCATION_HOST)]\n    HRESULT host([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLLOCATION_HOST)]\n    HRESULT host([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLLOCATION_HOSTNAME)]\n    HRESULT hostname([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLLOCATION_HOSTNAME)]\n    HRESULT hostname([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLLOCATION_PORT)]\n    HRESULT port([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLLOCATION_PORT)]\n    HRESULT port([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLLOCATION_PATHNAME)]\n    HRESULT pathname([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLLOCATION_PATHNAME)]\n    HRESULT pathname([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLLOCATION_SEARCH)]\n    HRESULT search([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLLOCATION_SEARCH)]\n    HRESULT search([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLLOCATION_HASH)]\n    HRESULT hash([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLLOCATION_HASH)]\n    HRESULT hash([retval, out] BSTR *p);\n\n    [id(DISPID_IHTMLLOCATION_RELOAD)]\n    HRESULT reload([defaultvalue(0), in] VARIANT_BOOL flag);\n\n    [id(DISPID_IHTMLLOCATION_REPLACE)]\n    HRESULT replace([in] BSTR bstr);\n\n    [id(DISPID_IHTMLLOCATION_ASSIGN)]\n    HRESULT assign([in] BSTR bstr);\n\n    [id(DISPID_IHTMLLOCATION_TOSTRING)]\n    HRESULT toString([retval, out] BSTR *String);\n}\n\n/*****************************************************************************\n *    DispHTMLHistory dispinterface\n */\n[\n    hidden,\n    uuid(3050f549-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLHistory\n{\nproperties:\nmethods:\n    [propget, id(DISPID_IOMHISTORY_LENGTH)]\n    short length();\n\n    [id(DISPID_IOMHISTORY_BACK)]\n    void back([optional, in] VARIANT *pvargdistance);\n\n    [id(DISPID_IOMHISTORY_FORWARD)]\n    void forward([optional, in] VARIANT *pvargdistance);\n\n    [id(DISPID_IOMHISTORY_GO)]\n    void go([optional, in] VARIANT *pvargdistance);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]\n    IDispatch *constructor();\n}\n\n/*****************************************************************************\n *    DispHTMLLocation dispinterface\n */\n[\n    hidden,\n    uuid(3050f54e-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLLocation\n{\nproperties:\nmethods:\n    [propput, id(DISPID_IHTMLLOCATION_HREF)]\n    void href(BSTR v);\n\n    [propget, id(DISPID_IHTMLLOCATION_HREF)]\n    BSTR href();\n\n    [propput, id(DISPID_IHTMLLOCATION_PROTOCOL)]\n    void protocol(BSTR v);\n\n    [propget, id(DISPID_IHTMLLOCATION_PROTOCOL)]\n    BSTR protocol();\n\n    [propput, id(DISPID_IHTMLLOCATION_HOST)]\n    void host(BSTR v);\n\n    [propget, id(DISPID_IHTMLLOCATION_HOST)]\n    BSTR host();\n\n    [propput, id(DISPID_IHTMLLOCATION_HOSTNAME)]\n    void hostname(BSTR v);\n\n    [propget, id(DISPID_IHTMLLOCATION_HOSTNAME)]\n    BSTR hostname();\n\n    [propput, id(DISPID_IHTMLLOCATION_PORT)]\n    void port(BSTR v);\n\n    [propget, id(DISPID_IHTMLLOCATION_PORT)]\n    BSTR port();\n\n    [propput, id(DISPID_IHTMLLOCATION_PATHNAME)]\n    void pathname(BSTR v);\n\n    [propget, id(DISPID_IHTMLLOCATION_PATHNAME)]\n    BSTR pathname();\n\n    [propput, id(DISPID_IHTMLLOCATION_SEARCH)]\n    void search(BSTR v);\n\n    [propget, id(DISPID_IHTMLLOCATION_SEARCH)]\n    BSTR search();\n\n    [propput, id(DISPID_IHTMLLOCATION_HASH)]\n    void hash(BSTR v);\n\n    [propget, id(DISPID_IHTMLLOCATION_HASH)]\n    BSTR hash();\n\n    [id(DISPID_IHTMLLOCATION_RELOAD)]\n    void reload([in, defaultvalue(0)] VARIANT_BOOL flag);\n\n    [id(DISPID_IHTMLLOCATION_REPLACE)]\n    void replace([in] BSTR bstr);\n\n    [id(DISPID_IHTMLLOCATION_ASSIGN)]\n    void assign([in] BSTR bstr);\n\n    [id(DISPID_IHTMLLOCATION_TOSTRING)]\n    BSTR toString();\n\n    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;\n}\n\n[\n    noncreatable,\n    uuid(163BB1E1-6E00-11cf-837A-48DC04C10000)\n]\ncoclass HTMLLocation\n{\n    [default]  dispinterface DispHTMLLocation;\n               interface IHTMLLocation;\n}\n\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f4ce-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLBookmarkCollection : IDispatch\n{\n    [propget, id(DISPID_IHTMLBOOKMARKCOLLECTION_LENGTH), hidden]\n    HRESULT length([out, retval] LONG *p);\n\n    [propget, id(DISPID_IHTMLBOOKMARKCOLLECTION__NEWENUM), hidden, restricted]\n    HRESULT _newEnum([out, retval] IUnknown **p);\n\n    [id(DISPID_IHTMLBOOKMARKCOLLECTION_ITEM)]\n    HRESULT item(\n            [in] LONG index,\n            [out, retval] VARIANT *pVarBookmark);\n}\n\n/*****************************************************************************\n *    IHTMLDataTransfer interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f4b3-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLDataTransfer : IDispatch\n{\n    [id(DISPID_IHTMLDATATRANSFER_SETDATA)]\n    HRESULT setData(\n            [in] BSTR format,\n            [in] VARIANT *data,\n            [out, retval] VARIANT_BOOL *pret);\n\n    [id(DISPID_IHTMLDATATRANSFER_GETDATA)]\n    HRESULT getData(\n            [in] BSTR format,\n            [out, retval] VARIANT *pvarRet);\n\n    [id(DISPID_IHTMLDATATRANSFER_CLEARDATA)]\n    HRESULT clearData(\n            [in] BSTR format,\n            [out, retval] VARIANT_BOOL *pret);\n\n    [propput, id(DISPID_IHTMLDATATRANSFER_DROPEFFECT)]\n    HRESULT dropEffect([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLDATATRANSFER_DROPEFFECT)]\n    HRESULT dropEffect([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLDATATRANSFER_EFFECTALLOWED)]\n    HRESULT effectAllowed([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLDATATRANSFER_EFFECTALLOWED)]\n    HRESULT effectAllowed([out, retval] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLEventObj interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050F32D-98B5-11CF-BB82-00AA00BDCE0B)\n]\ninterface IHTMLEventObj : IDispatch\n{\n    [propget, id(DISPID_IHTMLEVENTOBJ_SRCELEMENT)]\n    HRESULT srcElement([retval, out] IHTMLElement **p);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ_ALTKEY)]\n    HRESULT altKey([retval, out] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ_CTRLKEY)]\n    HRESULT ctrlKey([retval, out] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ_SHIFTKEY)]\n    HRESULT shiftKey([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLEVENTOBJ_RETURNVALUE)]\n    HRESULT returnValue([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ_RETURNVALUE)]\n    HRESULT returnValue([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLEVENTOBJ_CANCELBUBBLE)]\n    HRESULT cancelBubble([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ_CANCELBUBBLE)]\n    HRESULT cancelBubble([retval, out] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ_FROMELEMENT)]\n    HRESULT fromElement([retval, out] IHTMLElement **p);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ_TOELEMENT)]\n    HRESULT toElement([retval, out] IHTMLElement **p);\n\n    [propput, id(DISPID_IHTMLEVENTOBJ_KEYCODE)]\n    HRESULT keyCode([in] LONG v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ_KEYCODE)]\n    HRESULT keyCode([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ_BUTTON)]\n    HRESULT button([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ_TYPE)]\n    HRESULT type([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ_QUALIFIER)]\n    HRESULT qualifier([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ_REASON)]\n    HRESULT reason([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ_X)]\n    HRESULT x([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ_Y)]\n    HRESULT y([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ_CLIENTX)]\n    HRESULT clientX([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ_CLIENTY)]\n    HRESULT clientY([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ_OFFSETX)]\n    HRESULT offsetX([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ_OFFSETY)]\n    HRESULT offsetY([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ_SCREENX)]\n    HRESULT screenX([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ_SCREENY)]\n    HRESULT screenY([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ_SRCFILTER)]\n    HRESULT srcFilter([retval, out] IDispatch **p);\n}\n\n/*****************************************************************************\n *    DispCEventObj dispinterface\n */\n[\n    hidden,\n    uuid(3050f558-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispCEventObj\n{\nproperties:\nmethods:\n    [propput, id(DISPID_IHTMLEVENTOBJ_RETURNVALUE)]\n    void returnValue(VARIANT v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ_RETURNVALUE)]\n    VARIANT returnValue();\n\n    [propput, id(DISPID_IHTMLEVENTOBJ_CANCELBUBBLE)]\n    void cancelBubble(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ_CANCELBUBBLE)]\n    VARIANT_BOOL cancelBubble();\n\n    [propput, id(DISPID_IHTMLEVENTOBJ_KEYCODE)]\n    void keyCode(LONG v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ_KEYCODE)]\n    LONG keyCode();\n\n    [id(DISPID_IHTMLEVENTOBJ2_SETATTRIBUTE)]\n    void setAttribute(\n            [in] BSTR strAttributeName,\n            [in] VARIANT AttributeValue,\n            [in, defaultvalue(1)] LONG lFlags);\n\n    [id(DISPID_IHTMLEVENTOBJ2_GETATTRIBUTE)]\n    VARIANT getAttribute(\n            [in] BSTR strAttributeName,\n            [in, defaultvalue(0)] LONG lFlags);\n\n    [id(DISPID_IHTMLEVENTOBJ2_REMOVEATTRIBUTE)]\n    VARIANT_BOOL removeAttribute(\n            [in] BSTR strAttributeName,\n            [in, defaultvalue(1)] LONG lFlags);\n\n    [propput, id(DISPID_IHTMLEVENTOBJ2_PROPERTYNAME)]\n    void propertyName(BSTR v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_PROPERTYNAME)]\n    BSTR propertyName();\n\n    [propputref, id(DISPID_IHTMLEVENTOBJ2_BOOKMARKS)]\n    void bookmarks(IHTMLBookmarkCollection *v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_BOOKMARKS)]\n    IHTMLBookmarkCollection *bookmarks();\n\n    [propputref, id(DISPID_IHTMLEVENTOBJ2_RECORDSET)]\n    void recordset(IDispatch *v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_RECORDSET)]\n    IDispatch *recordset();\n\n    [propput, id(DISPID_IHTMLEVENTOBJ2_DATAFLD)]\n    void dataFld(BSTR v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_DATAFLD)]\n    BSTR dataFld();\n\n    [propputref, id(DISPID_IHTMLEVENTOBJ2_BOUNDELEMENTS)]\n    void boundElements(IHTMLElementCollection *v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_BOUNDELEMENTS)]\n    IHTMLElementCollection *boundElements();\n\n    [propput, id(DISPID_IHTMLEVENTOBJ2_REPEAT)]\n    void repeat(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_REPEAT)]\n    VARIANT_BOOL repeat();\n\n    [propput, id(DISPID_IHTMLEVENTOBJ2_SRCURN)]\n    void srcUrn(BSTR v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_SRCURN)]\n    BSTR srcUrn();\n\n    [propputref, id(DISPID_IHTMLEVENTOBJ2_SRCELEMENT)]\n    void srcElement(IHTMLElement *v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_SRCELEMENT)]\n    IHTMLElement *srcElement();\n\n    [propput, id(DISPID_IHTMLEVENTOBJ2_ALTKEY)]\n    void altKey(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_ALTKEY)]\n    VARIANT_BOOL altKey();\n\n    [propput, id(DISPID_IHTMLEVENTOBJ2_CTRLKEY)]\n    void ctrlKey(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_CTRLKEY)]\n    VARIANT_BOOL ctrlKey();\n\n    [propput, id(DISPID_IHTMLEVENTOBJ2_SHIFTKEY)]\n    void shiftKey(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_SHIFTKEY)]\n    VARIANT_BOOL shiftKey();\n\n    [propputref, id(DISPID_IHTMLEVENTOBJ2_FROMELEMENT)]\n    void fromElement(IHTMLElement *v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_FROMELEMENT)]\n    IHTMLElement *fromElement();\n\n    [propputref, id(DISPID_IHTMLEVENTOBJ2_TOELEMENT)]\n    void toElement(IHTMLElement *v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_TOELEMENT)]\n    IHTMLElement *toElement();\n\n    [propput, id(DISPID_IHTMLEVENTOBJ2_BUTTON)]\n    void button(LONG v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_BUTTON)]\n    LONG button();\n\n    [propput, id(DISPID_IHTMLEVENTOBJ2_TYPE)]\n    void type(BSTR v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_TYPE)]\n    BSTR type();\n\n    [propput, id(DISPID_IHTMLEVENTOBJ2_QUALIFIER)]\n    void qualifier(BSTR v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_QUALIFIER)]\n    BSTR qualifier();\n\n    [propput, id(DISPID_IHTMLEVENTOBJ2_REASON)]\n    void reason(LONG v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_REASON)]\n    LONG reason();\n\n    [propput, id(DISPID_IHTMLEVENTOBJ2_X)]\n    void x(LONG v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_X)]\n    LONG x();\n\n    [propput, id(DISPID_IHTMLEVENTOBJ2_Y)]\n    void y(LONG v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_Y)]\n    LONG y();\n\n    [propput, id(DISPID_IHTMLEVENTOBJ2_CLIENTX)]\n    void clientX(LONG v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_CLIENTX)]\n    LONG clientX();\n\n    [propput, id(DISPID_IHTMLEVENTOBJ2_CLIENTY)]\n    void clientY(LONG v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_CLIENTY)]\n    LONG clientY();\n    [propput, id(DISPID_IHTMLEVENTOBJ2_OFFSETX)]\n    void offsetX(LONG v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_OFFSETX)]\n    LONG offsetX();\n\n    [propput, id(DISPID_IHTMLEVENTOBJ2_OFFSETY)]\n    void offsetY(LONG v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_OFFSETY)]\n    LONG offsetY();\n\n    [propput, id(DISPID_IHTMLEVENTOBJ2_SCREENX)]\n    void screenX(LONG v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_SCREENX)]\n    LONG screenX();\n\n    [propput, id(DISPID_IHTMLEVENTOBJ2_SCREENY)]\n    void screenY(LONG v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_SCREENY)]\n    LONG screenY();\n\n    [propputref, id(DISPID_IHTMLEVENTOBJ2_SRCFILTER)]\n    void srcFilter(IDispatch *v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_SRCFILTER)]\n    IDispatch *srcFilter();\n\n    [propget, id(DISPID_IHTMLEVENTOBJ2_DATATRANSFER)]\n    IHTMLDataTransfer *dataTransfer();\n\n    [propget, id(DISPID_IHTMLEVENTOBJ3_CONTENTOVERFLOW)]\n    VARIANT_BOOL contentOverflow();\n\n    [propput, id(DISPID_IHTMLEVENTOBJ3_SHIFTLEFT)]\n    void shiftLeft(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ3_SHIFTLEFT)]\n    VARIANT_BOOL shiftLeft();\n\n    [propput, id(DISPID_IHTMLEVENTOBJ3_ALTLEFT)]\n    void altLeft(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ3_ALTLEFT)]\n    VARIANT_BOOL altLeft();\n\n    [propput, id(DISPID_IHTMLEVENTOBJ3_CTRLLEFT)]\n    void ctrlLeft(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLEVENTOBJ3_CTRLLEFT)]\n    VARIANT_BOOL ctrlLeft();\n\n    [propget, id(DISPID_IHTMLEVENTOBJ3_IMECOMPOSITIONCHANGE), hidden, restricted, nonbrowsable]\n    LONG_PTR imeCompositionChange();\n\n    [propget, id(DISPID_IHTMLEVENTOBJ3_IMENOTIFYCOMMAND), hidden, restricted, nonbrowsable]\n    LONG_PTR imeNotifyCommand();\n\n    [propget, id(DISPID_IHTMLEVENTOBJ3_IMENOTIFYDATA), hidden, restricted, nonbrowsable]\n    LONG_PTR imeNotifyData();\n\n    [propget, id(DISPID_IHTMLEVENTOBJ3_IMEREQUEST), hidden, restricted, nonbrowsable]\n    LONG_PTR imeRequest();\n\n    [propget, id(DISPID_IHTMLEVENTOBJ3_IMEREQUESTDATA), hidden, restricted, nonbrowsable]\n    LONG_PTR imeRequestData();\n\n    [propget, id(DISPID_IHTMLEVENTOBJ3_KEYBOARDLAYOUT), hidden, restricted, nonbrowsable]\n    LONG_PTR keyboardLayout();\n\n    [propget, id(DISPID_IHTMLEVENTOBJ3_BEHAVIORCOOKIE)]\n    LONG behaviorCookie();\n\n    [propget, id(DISPID_IHTMLEVENTOBJ3_BEHAVIORPART)]\n    LONG behaviorPart();\n\n    [propget, id(DISPID_IHTMLEVENTOBJ3_NEXTPAGE)]\n    BSTR nextPage();\n\n    [propget, id(DISPID_IHTMLEVENTOBJ4_WHEELDELTA)]\n    LONG wheelDelta();\n}\n\n/*****************************************************************************\n *    IHTMLStyleMedia interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3051074b-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLStyleMedia : IDispatch\n{\n    [propget, id(DISPID_IHTMLSTYLEMEDIA_TYPE)]\n    HRESULT type([out, retval] BSTR *p);\n\n    [id(DISPID_IHTMLSTYLEMEDIA_MATCHMEDIUM)]\n    HRESULT matchMedium(\n            [in] BSTR mediaQuery,\n            [out, retval] VARIANT_BOOL *matches);\n}\n\n/*****************************************************************************\n *    IHTMLFramesCollection2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(332C4426-26CB-11D0-B483-00C04FD90119)\n]\ninterface IHTMLFramesCollection2 : IDispatch\n{\n    [id(DISPID_IHTMLFRAMESCOLLECTION2_ITEM)]\n    HRESULT item(\n        [in] VARIANT *pvarIndex,\n        [retval, out] VARIANT *pvarResult);\n\n    [propget, id(DISPID_IHTMLFRAMESCOLLECTION2_LENGTH)]\n    HRESULT length([retval, out] LONG *p);\n}\n\n/*****************************************************************************\n *    IHTMLScreen interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f35C-98B5-11CF-BB82-00AA00BDCE0B)\n]\ninterface IHTMLScreen : IDispatch\n{\n    [propget, id(DISPID_IHTMLSCREEN_COLORDEPTH)]\n    HRESULT colorDepth([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLSCREEN_BUFFERDEPTH)]\n    HRESULT bufferDepth([in] LONG v);\n\n    [propget, id(DISPID_IHTMLSCREEN_BUFFERDEPTH)]\n    HRESULT bufferDepth([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLSCREEN_WIDTH)]\n    HRESULT width([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLSCREEN_HEIGHT)]\n    HRESULT height([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLSCREEN_UPDATEINTERVAL)]\n    HRESULT updateInterval([in] LONG v);\n\n    [propget, id(DISPID_IHTMLSCREEN_UPDATEINTERVAL)]\n    HRESULT updateInterval([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLSCREEN_AVAILHEIGHT)]\n    HRESULT availHeight([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLSCREEN_AVAILWIDTH)]\n    HRESULT availWidth([retval, out] LONG *p);\n\n    [propget, id(DISPID_IHTMLSCREEN_FONTSMOOTHINGENABLED)]\n    HRESULT fontSmoothingEnabled([retval, out] VARIANT_BOOL *p);\n}\n\n/*****************************************************************************\n *    IHTMLWindow2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(332C4427-26CB-11D0-B483-00C04FD90119)\n]\ninterface IHTMLWindow2 : IHTMLFramesCollection2\n{\n    [propget, id(DISPID_IHTMLWINDOW2_FRAMES)]\n    HRESULT frames([retval, out] IHTMLFramesCollection2 **p);\n\n    [propput, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]\n    HRESULT defaultStatus([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]\n    HRESULT defaultStatus([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLWINDOW2_STATUS)]\n    HRESULT status([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_STATUS)]\n    HRESULT status([retval, out] BSTR *p);\n\n    [id(DISPID_IHTMLWINDOW2_SETTIMEOUT)]\n    HRESULT setTimeout(\n        [in] BSTR expression,\n        [in] LONG msec,\n        [optional, in] VARIANT *language,\n        [retval, out] LONG *timerID);\n\n    [id(DISPID_IHTMLWINDOW2_CLEARTIMEOUT)]\n    HRESULT clearTimeout([in] LONG timerID);\n\n    [id(DISPID_IHTMLWINDOW2_ALERT)]\n    HRESULT alert([defaultvalue(\"\"), in] BSTR message);\n\n    [id(DISPID_IHTMLWINDOW2_CONFIRM)]\n    HRESULT confirm(\n        [defaultvalue(\"\"), in] BSTR message,\n        [retval, out] VARIANT_BOOL *confirmed);\n\n    [id(DISPID_IHTMLWINDOW2_PROMPT)]\n    HRESULT prompt(\n        [defaultvalue(\"\"), in] BSTR message,\n        [defaultvalue(\"undefined\"), in] BSTR defstr,\n        [retval, out] VARIANT *textdata);\n\n    [propget, id(DISPID_IHTMLWINDOW2_IMAGE)]\n    HRESULT Image([retval, out] IHTMLImageElementFactory **p);\n\n    [propget, id(DISPID_IHTMLWINDOW2_LOCATION)]\n    HRESULT location([retval, out] IHTMLLocation **p);\n\n    [propget, id(DISPID_IHTMLWINDOW2_HISTORY)]\n    HRESULT history([retval, out] IOmHistory **p);\n\n    [id(DISPID_IHTMLWINDOW2_CLOSE)]\n    HRESULT close();\n\n    [propput, id(DISPID_IHTMLWINDOW2_OPENER)]\n    HRESULT opener([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_OPENER)]\n    HRESULT opener([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLWINDOW2_NAVIGATOR)]\n    HRESULT navigator([retval, out] IOmNavigator **p);\n\n    [propput, id(DISPID_IHTMLWINDOW2_NAME)]\n    HRESULT name([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_NAME)]\n    HRESULT name([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLWINDOW2_PARENT)]\n    HRESULT parent([retval, out] IHTMLWindow2 **p);\n\n    [id(DISPID_IHTMLWINDOW2_OPEN)]\n    HRESULT open(\n        [defaultvalue(\"\"), in] BSTR url,\n        [defaultvalue(\"\"), in] BSTR name,\n        [defaultvalue(\"\"), in] BSTR features,\n        [defaultvalue(0), in] VARIANT_BOOL replace,\n        [retval, out] IHTMLWindow2 **pomWindowResult);\n\n    [propget, id(DISPID_IHTMLWINDOW2_SELF)]\n    HRESULT self([retval, out] IHTMLWindow2 **p);\n\n    [propget, id(DISPID_IHTMLWINDOW2_TOP)]\n    HRESULT top([retval, out] IHTMLWindow2 **p);\n\n    [propget, id(DISPID_IHTMLWINDOW2_WINDOW)]\n    HRESULT window([retval, out] IHTMLWindow2 **p);\n\n    [id(DISPID_IHTMLWINDOW2_NAVIGATE)]\n    HRESULT navigate([in] BSTR url);\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONFOCUS)]\n    HRESULT onfocus([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONFOCUS)]\n    HRESULT onfocus([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONBLUR)]\n    HRESULT onblur([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONBLUR)]\n    HRESULT onblur([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONLOAD)]\n    HRESULT onload([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONLOAD)]\n    HRESULT onload([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD)]\n    HRESULT onbeforeunload([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD)]\n    HRESULT onbeforeunload([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONUNLOAD)]\n    HRESULT onunload([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONUNLOAD)]\n    HRESULT onunload([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONHELP)]\n    HRESULT onhelp([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONHELP)]\n    HRESULT onhelp([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONERROR)]\n    HRESULT onerror([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONERROR)]\n    HRESULT onerror([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONRESIZE)]\n    HRESULT onresize([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONRESIZE)]\n    HRESULT onresize([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONSCROLL)]\n    HRESULT onscroll([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONSCROLL)]\n    HRESULT onscroll([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLWINDOW2_DOCUMENT)]\n    HRESULT document([retval, out] IHTMLDocument2 **p);\n\n    [propget, id(DISPID_IHTMLWINDOW2_EVENT)]\n    HRESULT event([retval, out] IHTMLEventObj **p);\n\n    [propget, id(DISPID_IHTMLWINDOW2__NEWENUM)]\n    HRESULT _newEnum([retval, out] IUnknown **p);\n\n    [id(DISPID_IHTMLWINDOW2_SHOWMODALDIALOG)]\n    HRESULT showModalDialog(\n        [in] BSTR dialog,\n        [optional, in] VARIANT *varArgIn,\n        [optional, in] VARIANT *varOptions,\n        [retval, out] VARIANT *varArgOut);\n\n    [id(DISPID_IHTMLWINDOW2_SHOWHELP)]\n    HRESULT showHelp(\n        [in] BSTR helpURL,\n        [optional, in] VARIANT helpArg,\n        [defaultvalue(\"\"), in] BSTR features);\n\n    [propget, id(DISPID_IHTMLWINDOW2_SCREEN)]\n    HRESULT screen([retval, out] IHTMLScreen **p);\n\n    [propget, id(DISPID_IHTMLWINDOW2_OPTION)]\n    HRESULT Option([retval, out] IHTMLOptionElementFactory **p);\n\n    [id(DISPID_IHTMLWINDOW2_FOCUS)]\n    HRESULT focus();\n\n    [propget, id(DISPID_IHTMLWINDOW2_CLOSED)]\n    HRESULT closed([retval, out] VARIANT_BOOL *p);\n\n    [id(DISPID_IHTMLWINDOW2_BLUR)]\n    HRESULT blur();\n\n    [id(DISPID_IHTMLWINDOW2_SCROLL)]\n    HRESULT scroll([in] LONG x, [in] LONG y);\n\n    [propget, id(DISPID_IHTMLWINDOW2_CLIENTINFORMATION)]\n    HRESULT clientInformation([retval, out] IOmNavigator **p);\n\n    [id(DISPID_IHTMLWINDOW2_SETINTERVAL)]\n    HRESULT setInterval([\n        in] BSTR expression,\n        [in] LONG msec,\n        [optional, in] VARIANT *language,\n        [retval, out] LONG *timerID);\n\n    [id(DISPID_IHTMLWINDOW2_CLEARINTERVAL)]\n    HRESULT clearInterval([in] LONG timerID);\n\n    [propput, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]\n    HRESULT offscreenBuffering([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]\n    HRESULT offscreenBuffering([retval, out] VARIANT *p);\n\n    [id(DISPID_IHTMLWINDOW2_EXECSCRIPT)]\n    HRESULT execScript(\n        [in] BSTR scode,\n        [defaultvalue(\"JScript\"), in] BSTR language,\n        [retval, out] VARIANT *pvarRet);\n\n    [id(DISPID_IHTMLWINDOW2_TOSTRING)]\n    HRESULT toString([retval, out] BSTR *String);\n\n    [id(DISPID_IHTMLWINDOW2_SCROLLBY)]\n    HRESULT scrollBy([in] LONG x, [in] LONG y);\n\n    [id(DISPID_IHTMLWINDOW2_SCROLLTO)]\n    HRESULT scrollTo([in] LONG x, [in] LONG y);\n\n    [id(DISPID_IHTMLWINDOW2_MOVETO)]\n    HRESULT moveTo([in] LONG x, [in] LONG y);\n\n    [id(DISPID_IHTMLWINDOW2_MOVEBY)]\n    HRESULT moveBy([in] LONG x, [in] LONG y);\n\n    [id(DISPID_IHTMLWINDOW2_RESIZETO)]\n    HRESULT resizeTo([in] LONG x, [in] LONG y);\n\n    [id(DISPID_IHTMLWINDOW2_RESIZEBY)]\n    HRESULT resizeBy([in] LONG x, [in] LONG y);\n\n    [propget, id(DISPID_IHTMLWINDOW2_EXTERNAL)]\n    HRESULT external([retval, out] IDispatch **p);\n}\n\n/*****************************************************************************\n *    IHTMLWindow3 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f4ae-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLWindow3 : IDispatch\n{\n    [propget, id(DISPID_IHTMLWINDOW3_SCREENLEFT)]\n    HRESULT screenLeft([out, retval] LONG *p);\n\n    [propget, id(DISPID_IHTMLWINDOW3_SCREENTOP)]\n    HRESULT screenTop([out, retval] LONG *p);\n\n    [id(DISPID_IHTMLWINDOW3_ATTACHEVENT)]\n    HRESULT attachEvent(\n            [in] BSTR event,\n            [in] IDispatch *pDisp,\n            [out, retval] VARIANT_BOOL *pfResult);\n\n    [id(DISPID_IHTMLWINDOW3_DETACHEVENT)]\n    HRESULT detachEvent(\n            [in] BSTR event,\n            [in] IDispatch *pDisp);\n\n    [id(DISPID_IHTMLWINDOW3_SETTIMEOUT)]\n    HRESULT setTimeout(\n            [in] VARIANT *expression,\n            [in] LONG msec,\n            [in, optional] VARIANT *language,\n            [out, retval] LONG *timerID);\n\n    [id(DISPID_IHTMLWINDOW3_SETINTERVAL)]\n    HRESULT setInterval(\n            [in] VARIANT *expression,\n            [in] LONG msec,\n            [in, optional] VARIANT *language,\n            [out, retval] LONG *timerID);\n\n    [id(DISPID_IHTMLWINDOW3_PRINT)]\n    HRESULT print();\n\n    [propput, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]\n    HRESULT onbeforeprint([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]\n    HRESULT onbeforeprint([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]\n    HRESULT onafterprint([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]\n    HRESULT onafterprint([out, retval] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLWINDOW3_CLIPBOARDDATA)]\n    HRESULT clipboardData([out, retval] IHTMLDataTransfer **p);\n\n    [id(DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG)]\n    HRESULT showModelessDialog(\n            [in, defaultvalue(\"\")] BSTR url,\n            [in, optional] VARIANT *varArgIn,\n            [in, optional] VARIANT *options,\n            [out, retval] IHTMLWindow2 **pDialog);\n}\n\n/*****************************************************************************\n *    IHTMLWindow4 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f6cf-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLWindow4 : IDispatch\n{\n    [id(DISPID_IHTMLWINDOW4_CREATEPOPUP)]\n    HRESULT createPopup([optional, in] VARIANT* varArgIn,\n                        [retval, out] IDispatch** ppPopup);\n\n    [propget, id(DISPID_IHTMLWINDOW4_FRAMEELEMENT)]\n    HRESULT frameElement([retval, out] IHTMLFrameBase* * p);\n}\n\n/*****************************************************************************\n *    IHTMLWindow5 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3051040e-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLWindow5 : IDispatch\n{\n    [propput, id(DISPID_IHTMLWINDOW5_XMLHTTPREQUEST)]\n    HRESULT XMLHttpRequest([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW5_XMLHTTPREQUEST)]\n    HRESULT XMLHttpRequest([retval, out] VARIANT * p);\n}\n\n/*****************************************************************************\n *    IHTMLWindow6 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(30510453-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLWindow6 : IDispatch\n{\n    [propput, id(DISPID_IHTMLWINDOW6_XDOMAINREQUEST)]\n    HRESULT XDomainRequest([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW6_XDOMAINREQUEST)]\n    HRESULT XDomainRequest([out, retval] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLWINDOW6_SESSIONSTORAGE)]\n    HRESULT sessionStorage([out, retval] IHTMLStorage **p);\n\n    [propget, id(DISPID_IHTMLWINDOW6_LOCALSTORAGE)]\n    HRESULT localStorage([out, retval] IHTMLStorage **p);\n\n    [propput, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable]\n    HRESULT onhashchange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable]\n    HRESULT onhashchange([out, retval] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLWINDOW6_MAXCONNECTIONSPERSERVER)]\n    HRESULT maxConnectionsPerServer([out, retval] long *p);\n\n    [id(DISPID_IHTMLWINDOW6_POSTMESSAGE)]\n    HRESULT postMessage(\n            [in] BSTR msg,\n            [in, optional] VARIANT targetOrigin);\n\n    [id(DISPID_IHTMLWINDOW6_TOSTATICHTML)]\n    HRESULT toStaticHTML(\n            [in] BSTR bstrHTML,\n            [out, retval] BSTR *pbstrStaticHTML);\n\n    [propput, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable]\n    HRESULT onmessage([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable]\n    HRESULT onmessage([out, retval] VARIANT *p);\n\n    [id(DISPID_IHTMLWINDOW6_MSWRITEPROFILERMARK)]\n    HRESULT msWriteProfilerMark([in] BSTR bstrProfilerMarkName);\n}\n\n/*****************************************************************************\n *    IHTMLWindow7 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(305104b7-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLWindow7 : IDispatch\n{\n    [id(DISPID_IHTMLWINDOW7_GETSELECTION)]\n    HRESULT getSelection([out, retval] IHTMLSelection **ppIHTMLSelection);\n\n    [id(DISPID_IHTMLWINDOW7_GETCOMPUTEDSTYLE)]\n    HRESULT getComputedStyle(\n            [in] IHTMLDOMNode* varArgIn,\n            [in, defaultvalue(\"\")] BSTR bstrPseudoElt,\n            [out, retval] IHTMLCSSStyleDeclaration **ppComputedStyle);\n\n    [propget, id(DISPID_IHTMLWINDOW7_STYLEMEDIA)]\n    HRESULT styleMedia([out, retval] IHTMLStyleMedia **p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_PERFORMANCE)]\n    HRESULT performance([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_PERFORMANCE)]\n    HRESULT performance([out, retval] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLWINDOW7_INNERWIDTH)]\n    HRESULT innerWidth([out, retval] long *p);\n\n    [propget, id(DISPID_IHTMLWINDOW7_INNERHEIGHT)]\n    HRESULT innerHeight([out, retval] long *p);\n\n    [propget, id(DISPID_IHTMLWINDOW7_PAGEXOFFSET)]\n    HRESULT pageXOffset([out, retval] long *p);\n\n    [propget, id(DISPID_IHTMLWINDOW7_PAGEYOFFSET)]\n    HRESULT pageYOffset([out, retval] long *p);\n\n    [propget, id(DISPID_IHTMLWINDOW7_SCREENX)]\n    HRESULT screenX([out, retval] long *p);\n\n    [propget, id(DISPID_IHTMLWINDOW7_SCREENY)]\n    HRESULT screenY([out, retval] long *p);\n\n    [propget, id(DISPID_IHTMLWINDOW7_OUTERWIDTH)]\n    HRESULT outerWidth([out, retval] long *p);\n\n    [propget, id(DISPID_IHTMLWINDOW7_OUTERHEIGHT)]\n    HRESULT outerHeight([out, retval] long *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONABORT), displaybind, bindable]\n    HRESULT onabort([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONABORT), displaybind, bindable]\n    HRESULT onabort([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONCANPLAY), displaybind, bindable]\n    HRESULT oncanplay([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONCANPLAY), displaybind, bindable]\n    HRESULT oncanplay([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONCANPLAYTHROUGH), displaybind, bindable]\n    HRESULT oncanplaythrough([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONCANPLAYTHROUGH), displaybind, bindable]\n    HRESULT oncanplaythrough([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONCHANGE), displaybind, bindable]\n    HRESULT onchange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONCHANGE), displaybind, bindable]\n    HRESULT onchange([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONCLICK), displaybind, bindable]\n    HRESULT onclick([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONCLICK), displaybind, bindable]\n    HRESULT onclick([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONCONTEXTMENU), displaybind, bindable]\n    HRESULT oncontextmenu([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONCONTEXTMENU), displaybind, bindable]\n    HRESULT oncontextmenu([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDBLCLICK), displaybind, bindable]\n    HRESULT ondblclick([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDBLCLICK), displaybind, bindable]\n    HRESULT ondblclick([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDRAG), displaybind, bindable]\n    HRESULT ondrag([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDRAG), displaybind, bindable]\n    HRESULT ondrag([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDRAGEND), displaybind, bindable]\n    HRESULT ondragend([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDRAGEND), displaybind, bindable]\n    HRESULT ondragend([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDRAGENTER), displaybind, bindable]\n    HRESULT ondragenter([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDRAGENTER), displaybind, bindable]\n    HRESULT ondragenter([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDRAGLEAVE), displaybind, bindable]\n    HRESULT ondragleave([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDRAGLEAVE), displaybind, bindable]\n    HRESULT ondragleave([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDRAGOVER), displaybind, bindable]\n    HRESULT ondragover([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDRAGOVER), displaybind, bindable]\n    HRESULT ondragover([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDRAGSTART), displaybind, bindable]\n    HRESULT ondragstart([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDRAGSTART), displaybind, bindable]\n    HRESULT ondragstart([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDROP), displaybind, bindable]\n    HRESULT ondrop([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDROP), displaybind, bindable]\n    HRESULT ondrop([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDURATIONCHANGE), displaybind, bindable]\n    HRESULT ondurationchange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDURATIONCHANGE), displaybind, bindable]\n    HRESULT ondurationchange([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONFOCUSIN), displaybind, bindable]\n    HRESULT onfocusin([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONFOCUSIN), displaybind, bindable]\n    HRESULT onfocusin([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONFOCUSOUT), displaybind, bindable]\n    HRESULT onfocusout([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONFOCUSOUT), displaybind, bindable]\n    HRESULT onfocusout([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONINPUT), displaybind, bindable]\n    HRESULT oninput([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONINPUT), displaybind, bindable]\n    HRESULT oninput([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONEMPTIED), displaybind, bindable]\n    HRESULT onemptied([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONEMPTIED), displaybind, bindable]\n    HRESULT onemptied([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONENDED), displaybind, bindable]\n    HRESULT onended([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONENDED), displaybind, bindable]\n    HRESULT onended([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONKEYDOWN), displaybind, bindable]\n    HRESULT onkeydown([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONKEYDOWN), displaybind, bindable]\n    HRESULT onkeydown([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONKEYPRESS), displaybind, bindable]\n    HRESULT onkeypress([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONKEYPRESS), displaybind, bindable]\n    HRESULT onkeypress([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONKEYUP), displaybind, bindable]\n    HRESULT onkeyup([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONKEYUP), displaybind, bindable]\n    HRESULT onkeyup([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONLOADEDDATA), displaybind, bindable]\n    HRESULT onloadeddata([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONLOADEDDATA), displaybind, bindable]\n    HRESULT onloadeddata([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONLOADEDMETADATA), displaybind, bindable]\n    HRESULT onloadedmetadata([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONLOADEDMETADATA), displaybind, bindable]\n    HRESULT onloadedmetadata([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONLOADSTART), displaybind, bindable]\n    HRESULT onloadstart([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONLOADSTART), displaybind, bindable]\n    HRESULT onloadstart([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEDOWN), displaybind, bindable]\n    HRESULT onmousedown([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEDOWN), displaybind, bindable]\n    HRESULT onmousedown([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEENTER), displaybind, bindable]\n    HRESULT onmouseenter([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEENTER), displaybind, bindable]\n    HRESULT onmouseenter([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONMOUSELEAVE), displaybind, bindable]\n    HRESULT onmouseleave([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONMOUSELEAVE), displaybind, bindable]\n    HRESULT onmouseleave([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEMOVE), displaybind, bindable]\n    HRESULT onmousemove([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEMOVE), displaybind, bindable]\n    HRESULT onmousemove([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEOUT), displaybind, bindable]\n    HRESULT onmouseout([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEOUT), displaybind, bindable]\n    HRESULT onmouseout([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEOVER), displaybind, bindable]\n    HRESULT onmouseover([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEOVER), displaybind, bindable]\n    HRESULT onmouseover([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEUP), displaybind, bindable]\n    HRESULT onmouseup([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEUP), displaybind, bindable]\n    HRESULT onmouseup([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEWHEEL), displaybind, bindable]\n    HRESULT onmousewheel([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEWHEEL), displaybind, bindable]\n    HRESULT onmousewheel([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONOFFLINE), displaybind, bindable]\n    HRESULT onoffline([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONOFFLINE), displaybind, bindable]\n    HRESULT onoffline([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONONLINE), displaybind, bindable]\n    HRESULT ononline([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONONLINE), displaybind, bindable]\n    HRESULT ononline([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONPROGRESS), displaybind, bindable]\n    HRESULT onprogress([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONPROGRESS), displaybind, bindable]\n    HRESULT onprogress([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONRATECHANGE), displaybind, bindable]\n    HRESULT onratechange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONRATECHANGE), displaybind, bindable]\n    HRESULT onratechange([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONREADYSTATECHANGE), displaybind, bindable]\n    HRESULT onreadystatechange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONREADYSTATECHANGE), displaybind, bindable]\n    HRESULT onreadystatechange([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONRESET), displaybind, bindable]\n    HRESULT onreset([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONRESET), displaybind, bindable]\n    HRESULT onreset([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONSEEKED), displaybind, bindable]\n    HRESULT onseeked([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONSEEKED), displaybind, bindable]\n    HRESULT onseeked([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONSEEKING), displaybind, bindable]\n    HRESULT onseeking([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONSEEKING), displaybind, bindable]\n    HRESULT onseeking([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONSELECT), displaybind, bindable]\n    HRESULT onselect([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONSELECT), displaybind, bindable]\n    HRESULT onselect([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONSTALLED), displaybind, bindable]\n    HRESULT onstalled([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONSTALLED), displaybind, bindable]\n    HRESULT onstalled([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONSTORAGE), displaybind, bindable]\n    HRESULT onstorage([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONSTORAGE), displaybind, bindable]\n    HRESULT onstorage([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONSUBMIT), displaybind, bindable]\n    HRESULT onsubmit([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONSUBMIT), displaybind, bindable]\n    HRESULT onsubmit([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONSUSPEND), displaybind, bindable]\n    HRESULT onsuspend([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONSUSPEND), displaybind, bindable]\n    HRESULT onsuspend([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONTIMEUPDATE), displaybind, bindable]\n    HRESULT ontimeupdate([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONTIMEUPDATE), displaybind, bindable]\n    HRESULT ontimeupdate([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONPAUSE), displaybind, bindable]\n    HRESULT onpause([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONPAUSE), displaybind, bindable]\n    HRESULT onpause([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONPLAY), displaybind, bindable]\n    HRESULT onplay([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONPLAY), displaybind, bindable]\n    HRESULT onplay([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONPLAYING), displaybind, bindable]\n    HRESULT onplaying([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONPLAYING), displaybind, bindable]\n    HRESULT onplaying([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONVOLUMECHANGE), displaybind, bindable]\n    HRESULT onvolumechange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONVOLUMECHANGE), displaybind, bindable]\n    HRESULT onvolumechange([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONWAITING), displaybind, bindable]\n    HRESULT onwaiting([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONWAITING), displaybind, bindable]\n    HRESULT onwaiting([out, retval] VARIANT *p);\n}\n\n/*****************************************************************************\n *    DispHTMLScreen dispinterface\n */\n[\n    hidden,\n    uuid(3050f591-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLScreen\n{\nproperties:\nmethods:\n    [propget, id(DISPID_IHTMLSCREEN_COLORDEPTH)]\n    long colorDepth();\n\n    [propput, id(DISPID_IHTMLSCREEN_BUFFERDEPTH)]\n    void bufferDepth(long v);\n\n    [propget, id(DISPID_IHTMLSCREEN_BUFFERDEPTH)]\n    long bufferDepth();\n\n    [propget, id(DISPID_IHTMLSCREEN_WIDTH)]\n    long width();\n\n    [propget, id(DISPID_IHTMLSCREEN_HEIGHT)]\n    long height();\n\n    [propput, id(DISPID_IHTMLSCREEN_UPDATEINTERVAL)]\n    void updateInterval(long v);\n\n    [propget, id(DISPID_IHTMLSCREEN_UPDATEINTERVAL)]\n    long updateInterval();\n\n    [propget, id(DISPID_IHTMLSCREEN_AVAILHEIGHT)]\n    long availHeight();\n\n    [propget, id(DISPID_IHTMLSCREEN_AVAILWIDTH)]\n    long availWidth();\n\n    [propget, id(DISPID_IHTMLSCREEN_FONTSMOOTHINGENABLED)]\n    VARIANT_BOOL fontSmoothingEnabled();\n\n    [propget, id(DISPID_IHTMLSCREEN2_LOGICALXDPI)]\n    long logicalXDPI();\n\n    [propget, id(DISPID_IHTMLSCREEN2_LOGICALYDPI)]\n    long logicalYDPI();\n\n    [propget, id(DISPID_IHTMLSCREEN2_DEVICEXDPI)]\n    long deviceXDPI();\n\n    [propget, id(DISPID_IHTMLSCREEN2_DEVICEYDPI)]\n    long deviceYDPI();\n\n    [propget, id(DISPID_IHTMLSCREEN3_SYSTEMXDPI)]\n    long systemXDPI();\n\n    [propget, id(DISPID_IHTMLSCREEN3_SYSTEMYDPI)]\n    long systemYDPI();\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]\n    IDispatch *constructor();\n}\n\n/*****************************************************************************\n *    DispHTMLWindow2 dispinterface\n */\n[\n    hidden,\n    uuid(3050f55d-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLWindow2\n{\nproperties:\nmethods:\n    [id(DISPID_IHTMLFRAMESCOLLECTION2_ITEM)]\n    VARIANT item([in] VARIANT *pvarIndex);\n\n    [propget, id(DISPID_IHTMLFRAMESCOLLECTION2_LENGTH)]\n    LONG length();\n\n    [propget, id(DISPID_IHTMLWINDOW2_FRAMES)]\n    IHTMLFramesCollection2 *frames();\n\n    [propput, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]\n    void defaultStatus(BSTR v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]\n    BSTR defaultStatus();\n\n    [propput, id(DISPID_IHTMLWINDOW2_STATUS)]\n    void status(BSTR v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_STATUS)]\n    BSTR status();\n\n    [id(DISPID_IHTMLWINDOW2_CLEARTIMEOUT)]\n    void clearTimeout([in] LONG timerID);\n\n    [id(DISPID_IHTMLWINDOW2_ALERT)]\n    void alert([in, defaultvalue(\"\")] BSTR message);\n\n    [id(DISPID_IHTMLWINDOW2_CONFIRM)]\n    VARIANT_BOOL confirm([in, defaultvalue(\"\")] BSTR message);\n\n    [id(DISPID_IHTMLWINDOW2_PROMPT)]\n    VARIANT prompt(\n            [in, defaultvalue(\"\")] BSTR message,\n            [in, defaultvalue(\"undefined\")] BSTR defstr);\n\n    [propget, id(DISPID_IHTMLWINDOW2_IMAGE)]\n    IHTMLImageElementFactory *Image();\n\n    [propget, id(DISPID_IHTMLWINDOW2_LOCATION)]\n    IHTMLLocation *location();\n\n    [propget, id(DISPID_IHTMLWINDOW2_HISTORY)]\n    IOmHistory *history();\n\n    [id(DISPID_IHTMLWINDOW2_CLOSE)]\n    void close();\n\n    [propput, id(DISPID_IHTMLWINDOW2_OPENER)]\n    void opener(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_OPENER)]\n    VARIANT opener();\n\n    [propget, id(DISPID_IHTMLWINDOW2_NAVIGATOR)]\n    IOmNavigator *navigator();\n\n    [propput, id(DISPID_IHTMLWINDOW2_NAME)]\n    void name(BSTR v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_NAME)]\n    BSTR name();\n\n    [propget, id(DISPID_IHTMLWINDOW2_PARENT)]\n    IHTMLWindow2 *parent();\n\n    [id(DISPID_IHTMLWINDOW2_OPEN)]\n    IHTMLWindow2 *open(\n            [in, defaultvalue(\"\")] BSTR url,\n            [in, defaultvalue(\"\")] BSTR name,\n            [in, defaultvalue(\"\")] BSTR features,\n            [in, defaultvalue(0)]  VARIANT_BOOL replace);\n\n    [propget, id(DISPID_IHTMLWINDOW2_SELF)]\n    IHTMLWindow2 *self();\n\n    [propget, id(DISPID_IHTMLWINDOW2_TOP)]\n    IHTMLWindow2 *top();\n\n    [propget, id(DISPID_IHTMLWINDOW2_WINDOW)]\n    IHTMLWindow2 *window();\n\n    [id(DISPID_IHTMLWINDOW2_NAVIGATE)]\n    void navigate([in] BSTR url);\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONFOCUS), displaybind, bindable]\n    void onfocus(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONFOCUS), displaybind, bindable]\n    VARIANT onfocus();\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONBLUR), displaybind, bindable]\n    void onblur(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONBLUR), displaybind, bindable]\n    VARIANT onblur();\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONLOAD), displaybind, bindable]\n    VARIANT onload();\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD), displaybind, bindable]\n    void onbeforeunload(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD), displaybind, bindable]\n    VARIANT onbeforeunload();\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONUNLOAD), displaybind, bindable]\n    void onunload(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONUNLOAD), displaybind, bindable]\n    VARIANT onunload();\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONHELP), displaybind, bindable]\n    void onhelp(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONHELP), displaybind, bindable]\n    VARIANT onhelp();\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONERROR), displaybind, bindable]\n    void onerror(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONERROR), displaybind, bindable]\n    VARIANT onerror();\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONRESIZE), displaybind, bindable]\n    void onresize(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONRESIZE), displaybind, bindable]\n    VARIANT onresize();\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONSCROLL), displaybind, bindable]\n    void onscroll(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONSCROLL), displaybind, bindable]\n    VARIANT onscroll();\n\n    [propget, id(DISPID_IHTMLWINDOW2_DOCUMENT), source]\n    IHTMLDocument2 *document();\n\n    [propget, id(DISPID_IHTMLWINDOW2_EVENT)]\n    IHTMLEventObj *event();\n\n    [propget, id(DISPID_IHTMLWINDOW2__NEWENUM), hidden, restricted]\n    IUnknown *_newEnum();\n\n    [id(DISPID_IHTMLWINDOW2_SHOWMODALDIALOG)]\n    VARIANT showModalDialog(\n            [in] BSTR dialog,\n            [in, optional] VARIANT *varArgIn,\n            [in, optional] VARIANT *varOptions);\n\n    [id(DISPID_IHTMLWINDOW2_SHOWHELP)]\n    void showHelp(\n            [in] BSTR helpURL,\n            [in, optional] VARIANT helpArg,\n            [in, defaultvalue(\"\")] BSTR features);\n\n    [propget, id(DISPID_IHTMLWINDOW2_SCREEN)]\n    IHTMLScreen *screen();\n\n    [propget, id(DISPID_IHTMLWINDOW2_OPTION)]\n    IHTMLOptionElementFactory *Option();\n\n    [id(DISPID_IHTMLWINDOW2_FOCUS)]\n    void focus();\n\n    [propget, id(DISPID_IHTMLWINDOW2_CLOSED)]\n    VARIANT_BOOL closed();\n\n    [id(DISPID_IHTMLWINDOW2_BLUR)]\n    void blur();\n\n    [id(DISPID_IHTMLWINDOW2_SCROLL)]\n    void scroll([in] LONG x, [in] LONG y);\n\n    [propget, id(DISPID_IHTMLWINDOW2_CLIENTINFORMATION)]\n    IOmNavigator *clientInformation();\n\n    [id(DISPID_IHTMLWINDOW2_CLEARINTERVAL)]\n    void clearInterval([in] LONG timerID);\n\n    [propput, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]\n    void offscreenBuffering(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]\n    VARIANT offscreenBuffering();\n\n    [id(DISPID_IHTMLWINDOW2_EXECSCRIPT)]\n    VARIANT execScript(\n            [in] BSTR _code,\n            [in, defaultvalue(\"JScript\")] BSTR language);\n\n    [id(DISPID_IHTMLWINDOW2_TOSTRING)]\n    BSTR toString();\n\n    [id(DISPID_IHTMLWINDOW2_SCROLLBY)]\n    void scrollBy([in] LONG x, [in] LONG y);\n\n    [id(DISPID_IHTMLWINDOW2_SCROLLTO)]\n    void scrollTo([in] LONG x, [in] LONG y);\n\n    [id(DISPID_IHTMLWINDOW2_MOVETO)]\n    void moveTo([in] LONG x, [in] LONG y);\n\n    [id(DISPID_IHTMLWINDOW2_MOVEBY)]\n    void moveBy([in] LONG x, [in] LONG y);\n\n    [id(DISPID_IHTMLWINDOW2_RESIZETO)]\n    void resizeTo([in] LONG x, [in] LONG y);\n\n    [id(DISPID_IHTMLWINDOW2_RESIZEBY)]\n    void resizeBy([in] LONG x, [in] LONG y);\n\n    [propget, id(DISPID_IHTMLWINDOW2_EXTERNAL)]\n    IDispatch *external();\n\n    [propget, id(DISPID_IHTMLWINDOW3_SCREENLEFT)]\n    LONG screenLeft();\n\n    [propget, id(DISPID_IHTMLWINDOW3_SCREENTOP)]\n    LONG screenTop();\n\n    [id(DISPID_IHTMLWINDOW3_ATTACHEVENT)]\n    VARIANT_BOOL attachEvent(\n             [in] BSTR event,\n             [in] IDispatch *pDisp);\n\n    [id(DISPID_IHTMLWINDOW3_DETACHEVENT)]\n    void detachEvent(\n            [in] BSTR event,\n            [in] IDispatch *pDisp);\n\n    [id(DISPID_IHTMLWINDOW3_SETTIMEOUT)]\n    LONG setTimeout(\n            [in] VARIANT *expression,\n            [in] LONG msec,\n            [in, optional] VARIANT *language);\n\n    [id(DISPID_IHTMLWINDOW3_SETINTERVAL)]\n    LONG setInterval(\n            [in] VARIANT *expression,\n            [in] LONG msec,\n            [in, optional] VARIANT *language);\n\n    [id(DISPID_IHTMLWINDOW3_PRINT)]\n    void print();\n\n    [propput, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]\n    void onbeforeprint(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]\n    VARIANT onbeforeprint();\n\n    [propput, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]\n    void onafterprint(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]\n    VARIANT onafterprint();\n\n    [propget, id(DISPID_IHTMLWINDOW3_CLIPBOARDDATA)]\n    IHTMLDataTransfer *clipboardData();\n\n    [id(DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG)]\n    IHTMLWindow2 *showModelessDialog(\n            [in, defaultvalue(\"\")] BSTR url,\n            [in, optional] VARIANT *varArgIn,\n            [in, optional] VARIANT *options);\n\n    [id(DISPID_IHTMLWINDOW4_CREATEPOPUP)]\n    IDispatch *createPopup([in, optional] VARIANT *varArgIn);\n\n    [propget, id(DISPID_IHTMLWINDOW4_FRAMEELEMENT)]\n    IHTMLFrameBase *frameElement();\n\n    [propget, id(DISPID_IHTMLWINDOW6_SESSIONSTORAGE)]\n    IHTMLStorage *sessionStorage();\n\n    [propget, id(DISPID_IHTMLWINDOW6_LOCALSTORAGE)]\n    IHTMLStorage *localStorage();\n\n    [propput, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable]\n    void onhashchange(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable]\n    VARIANT onhashchange();\n\n    [propget, id(DISPID_IHTMLWINDOW6_MAXCONNECTIONSPERSERVER)]\n    long maxConnectionsPerServer();\n\n    [id(DISPID_IHTMLWINDOW6_POSTMESSAGE)]\n    void postMessage(\n            [in] BSTR msg,\n            [in, optional] VARIANT targetOrigin);\n\n    [id(DISPID_IHTMLWINDOW6_TOSTATICHTML)]\n    BSTR toStaticHTML([in] BSTR bstrHTML);\n\n    [propput, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable]\n    void onmessage(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable]\n    VARIANT onmessage();\n\n    [id(DISPID_IHTMLWINDOW6_MSWRITEPROFILERMARK)]\n    void msWriteProfilerMark([in] BSTR bstrProfilerMarkName);\n\n    [id(DISPID_IHTMLWINDOW7_GETSELECTION)]\n    IHTMLSelection *getSelection();\n\n    [id(DISPID_IHTMLWINDOW7_GETCOMPUTEDSTYLE)]\n    IHTMLCSSStyleDeclaration *getComputedStyle(\n            [in] IHTMLDOMNode *varArgIn,\n            [in, defaultvalue(\"\")] BSTR bstrPseudoElt);\n\n    [propget, id(DISPID_IHTMLWINDOW7_STYLEMEDIA)]\n    IHTMLStyleMedia *styleMedia();\n\n    [propput, id(DISPID_IHTMLWINDOW7_PERFORMANCE)]\n    void performance(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_PERFORMANCE)]\n    VARIANT performance();\n\n    [propget, id(DISPID_IHTMLWINDOW7_INNERWIDTH)]\n    long innerWidth();\n\n    [propget, id(DISPID_IHTMLWINDOW7_INNERHEIGHT)]\n    long innerHeight();\n\n    [propget, id(DISPID_IHTMLWINDOW7_PAGEXOFFSET)]\n    long pageXOffset();\n\n    [propget, id(DISPID_IHTMLWINDOW7_PAGEYOFFSET)]\n    long pageYOffset();\n\n    [propget, id(DISPID_IHTMLWINDOW7_SCREENX)]\n    long screenX();\n\n    [propget, id(DISPID_IHTMLWINDOW7_SCREENY)]\n    long screenY();\n\n    [propget, id(DISPID_IHTMLWINDOW7_OUTERWIDTH)]\n    long outerWidth();\n\n    [propget, id(DISPID_IHTMLWINDOW7_OUTERHEIGHT)]\n    long outerHeight();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONABORT), displaybind, bindable]\n    void onabort(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONABORT), displaybind, bindable]\n    VARIANT onabort();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONCANPLAY), displaybind, bindable]\n    void oncanplay(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONCANPLAY), displaybind, bindable]\n    VARIANT oncanplay();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONCANPLAYTHROUGH), displaybind, bindable]\n    void oncanplaythrough(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONCANPLAYTHROUGH), displaybind, bindable]\n    VARIANT oncanplaythrough();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONCHANGE), displaybind, bindable]\n    void onchange(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONCHANGE), displaybind, bindable]\n    VARIANT onchange();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONCLICK), displaybind, bindable]\n    void onclick(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONCLICK), displaybind, bindable]\n    VARIANT onclick();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONCONTEXTMENU), displaybind, bindable]\n    void oncontextmenu(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONCONTEXTMENU), displaybind, bindable]\n    VARIANT oncontextmenu();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDBLCLICK), displaybind, bindable]\n    void ondblclick(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDBLCLICK), displaybind, bindable]\n    VARIANT ondblclick();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDRAG), displaybind, bindable]\n    void ondrag(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDRAG), displaybind, bindable]\n    VARIANT ondrag();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDRAGEND), displaybind, bindable]\n    void ondragend(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDRAGEND), displaybind, bindable]\n    VARIANT ondragend();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDRAGENTER), displaybind, bindable]\n    void ondragenter(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDRAGENTER), displaybind, bindable]\n    VARIANT ondragenter();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDRAGLEAVE), displaybind, bindable]\n    void ondragleave(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDRAGLEAVE), displaybind, bindable]\n    VARIANT ondragleave();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDRAGOVER), displaybind, bindable]\n    void ondragover(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDRAGOVER), displaybind, bindable]\n    VARIANT ondragover();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDRAGSTART), displaybind, bindable]\n    void ondragstart(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDRAGSTART), displaybind, bindable]\n    VARIANT ondragstart();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDROP), displaybind, bindable]\n    void ondrop(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDROP), displaybind, bindable]\n    VARIANT ondrop();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDURATIONCHANGE), displaybind, bindable]\n    void ondurationchange(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDURATIONCHANGE), displaybind, bindable]\n    VARIANT ondurationchange();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONFOCUSIN), displaybind, bindable]\n    void onfocusin(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONFOCUSIN), displaybind, bindable]\n    VARIANT onfocusin();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONFOCUSOUT), displaybind, bindable]\n    void onfocusout(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONFOCUSOUT), displaybind, bindable]\n    VARIANT onfocusout();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONINPUT), displaybind, bindable]\n    void oninput(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONINPUT), displaybind, bindable]\n    VARIANT oninput();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONEMPTIED), displaybind, bindable]\n    void onemptied(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONEMPTIED), displaybind, bindable]\n    VARIANT onemptied();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONENDED), displaybind, bindable]\n    void onended(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONENDED), displaybind, bindable]\n    VARIANT onended();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONKEYDOWN), displaybind, bindable]\n    void onkeydown(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONKEYDOWN), displaybind, bindable]\n    VARIANT onkeydown();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONKEYPRESS), displaybind, bindable]\n    void onkeypress(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONKEYPRESS), displaybind, bindable]\n    VARIANT onkeypress();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONKEYUP), displaybind, bindable]\n    void onkeyup(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONKEYUP), displaybind, bindable]\n    VARIANT onkeyup();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONLOADEDDATA), displaybind, bindable]\n    void onloadeddata(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONLOADEDDATA), displaybind, bindable]\n    VARIANT onloadeddata();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONLOADEDMETADATA), displaybind, bindable]\n    void onloadedmetadata(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONLOADEDMETADATA), displaybind, bindable]\n    VARIANT onloadedmetadata();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONLOADSTART), displaybind, bindable]\n    void onloadstart(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONLOADSTART), displaybind, bindable]\n    VARIANT onloadstart();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEDOWN), displaybind, bindable]\n    void onmousedown(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEDOWN), displaybind, bindable]\n    VARIANT onmousedown();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEENTER), displaybind, bindable]\n    void onmouseenter(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEENTER), displaybind, bindable]\n    VARIANT onmouseenter();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONMOUSELEAVE), displaybind, bindable]\n    void onmouseleave(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONMOUSELEAVE), displaybind, bindable]\n    VARIANT onmouseleave();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEMOVE), displaybind, bindable]\n    void onmousemove(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEMOVE), displaybind, bindable]\n    VARIANT onmousemove();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEOUT), displaybind, bindable]\n    void onmouseout(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEOUT), displaybind, bindable]\n    VARIANT onmouseout();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEOVER), displaybind, bindable]\n    void onmouseover(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEOVER), displaybind, bindable]\n    VARIANT onmouseover();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEUP), displaybind, bindable]\n    void onmouseup(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEUP), displaybind, bindable]\n    VARIANT onmouseup();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEWHEEL), displaybind, bindable]\n    void onmousewheel(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEWHEEL), displaybind, bindable]\n    VARIANT onmousewheel();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONOFFLINE), displaybind, bindable]\n    void onoffline(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONOFFLINE), displaybind, bindable]\n    VARIANT onoffline();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONONLINE), displaybind, bindable]\n    void ononline(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONONLINE), displaybind, bindable]\n    VARIANT ononline();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONPROGRESS), displaybind, bindable]\n    void onprogress(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONPROGRESS), displaybind, bindable]\n    VARIANT onprogress();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONRATECHANGE), displaybind, bindable]\n    void onratechange(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONRATECHANGE), displaybind, bindable]\n    VARIANT onratechange();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONREADYSTATECHANGE), displaybind, bindable]\n    void onreadystatechange(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONREADYSTATECHANGE), displaybind, bindable]\n    VARIANT onreadystatechange();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONRESET), displaybind, bindable]\n    void onreset(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONRESET), displaybind, bindable]\n    VARIANT onreset();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONSEEKED), displaybind, bindable]\n    void onseeked(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONSEEKED), displaybind, bindable]\n    VARIANT onseeked();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONSEEKING), displaybind, bindable]\n    void onseeking(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONSEEKING), displaybind, bindable]\n    VARIANT onseeking();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONSELECT), displaybind, bindable]\n    void onselect(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONSELECT), displaybind, bindable]\n    VARIANT onselect();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONSTALLED), displaybind, bindable]\n    void onstalled(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONSTALLED), displaybind, bindable]\n    VARIANT onstalled();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONSTORAGE), displaybind, bindable]\n    void onstorage(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONSTORAGE), displaybind, bindable]\n    VARIANT onstorage();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONSUBMIT), displaybind, bindable]\n    void onsubmit(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONSUBMIT), displaybind, bindable]\n    VARIANT onsubmit();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONSUSPEND), displaybind, bindable]\n    void onsuspend(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONSUSPEND), displaybind, bindable]\n    VARIANT onsuspend();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONTIMEUPDATE), displaybind, bindable]\n    void ontimeupdate(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONTIMEUPDATE), displaybind, bindable]\n    VARIANT ontimeupdate();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONPAUSE), displaybind, bindable]\n    void onpause(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONPAUSE), displaybind, bindable]\n    VARIANT onpause();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONPLAY), displaybind, bindable]\n    void onplay(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONPLAY), displaybind, bindable]\n    VARIANT onplay();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONPLAYING), displaybind, bindable]\n    void onplaying(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONPLAYING), displaybind, bindable]\n    VARIANT onplaying();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONVOLUMECHANGE), displaybind, bindable]\n    void onvolumechange(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONVOLUMECHANGE), displaybind, bindable]\n    VARIANT onvolumechange();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONWAITING), displaybind, bindable]\n    void onwaiting(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONWAITING), displaybind, bindable]\n    VARIANT onwaiting();\n\n    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;\n}\n\n/*****************************************************************************\n *    HTMLWindow2 coclass\n */\n[\n    noncreatable,\n    uuid(d48a6ec6-6a4a-11cf-94a7-444553540000)\n]\ncoclass HTMLWindow2\n{\n    [default]         dispinterface DispHTMLWindow2;\n    [source, default] dispinterface HTMLWindowEvents;\n    [source]          dispinterface HTMLWindowEvents2;\n /* [source]          dispinterface HTMLWindowEvents3; */\n    interface IHTMLWindow2;\n    interface IHTMLWindow3;\n    interface IHTMLWindow4;\n    interface IHTMLWindow5;\n    interface IHTMLWindow6;\n    interface IHTMLWindow7;\n /* interface IHTMLWindow8; */\n    interface IHTMLDOMConstructor;\n    interface IEventTarget;\n}\n\n/*****************************************************************************\n *    DispHTMLWindowProxy dispinterface\n */\n[\n    hidden,\n    uuid(3050f55e-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLWindowProxy\n{\nproperties:\nmethods:\n    [id(DISPID_IHTMLFRAMESCOLLECTION2_ITEM)]\n    VARIANT item([in] VARIANT* pvarIndex);\n\n    [propget, id(DISPID_IHTMLFRAMESCOLLECTION2_LENGTH)]\n    LONG length();\n\n    [propget, id(DISPID_IHTMLWINDOW2_FRAMES)]\n    IHTMLFramesCollection2* frames();\n\n    [propput, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]\n    void defaultStatus(BSTR v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]\n    BSTR defaultStatus();\n\n    [propput, id(DISPID_IHTMLWINDOW2_STATUS)]\n    void status(BSTR v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_STATUS)]\n    BSTR status();\n\n    [id(DISPID_IHTMLWINDOW2_CLEARTIMEOUT)]\n    void clearTimeout([in] LONG timerID);\n\n    [id(DISPID_IHTMLWINDOW2_ALERT)]\n    void alert([defaultvalue(\"\"), in] BSTR message);\n\n    [id(DISPID_IHTMLWINDOW2_CONFIRM)]\n    VARIANT_BOOL confirm([defaultvalue(\"\"), in] BSTR message);\n\n    [id(DISPID_IHTMLWINDOW2_PROMPT)]\n    VARIANT prompt([defaultvalue(\"\"), in] BSTR message,\n                   [defaultvalue(\"undefined\"), in] BSTR defstr);\n\n    [propget, id(DISPID_IHTMLWINDOW2_IMAGE)]\n    IHTMLImageElementFactory* Image();\n\n    [propget, id(DISPID_IHTMLWINDOW2_LOCATION)]\n    IHTMLLocation* location();\n\n    [propget, id(DISPID_IHTMLWINDOW2_HISTORY)]\n    IOmHistory* history();\n\n    [id(DISPID_IHTMLWINDOW2_CLOSE)]\n    void close();\n\n    [propput, id(DISPID_IHTMLWINDOW2_OPENER)]\n    void opener(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_OPENER)]\n    VARIANT opener();\n\n    [propget, id(DISPID_IHTMLWINDOW2_NAVIGATOR)]\n    IOmNavigator* navigator();\n\n    [propput, id(DISPID_IHTMLWINDOW2_NAME)]\n    void name(BSTR v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_NAME)]\n    BSTR name();\n\n    [propget, id(DISPID_IHTMLWINDOW2_PARENT)]\n    IHTMLWindow2* parent();\n\n    [id(DISPID_IHTMLWINDOW2_OPEN)]\n    IHTMLWindow2* open([defaultvalue(\"\"), in] BSTR url,\n                       [defaultvalue(\"\"), in] BSTR name,\n                       [defaultvalue(\"\"), in] BSTR features,\n                       [defaultvalue(0), in] VARIANT_BOOL replace);\n\n    [propget, id(DISPID_IHTMLWINDOW2_SELF)]\n    IHTMLWindow2* self();\n\n    [propget, id(DISPID_IHTMLWINDOW2_TOP)]\n    IHTMLWindow2* top();\n\n    [propget, id(DISPID_IHTMLWINDOW2_WINDOW)]\n    IHTMLWindow2* window();\n\n    [id(DISPID_IHTMLWINDOW2_NAVIGATE)]\n    void navigate([in] BSTR url);\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONFOCUS), displaybind, bindable]\n    void onfocus(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONFOCUS), displaybind, bindable]\n    VARIANT onfocus();\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONBLUR), displaybind, bindable]\n    void onblur(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONBLUR), displaybind, bindable]\n    VARIANT onblur();\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONLOAD), displaybind, bindable]\n    void onload(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONLOAD), displaybind, bindable]\n    VARIANT onload();\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD), displaybind, bindable]\n    void onbeforeunload(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD), displaybind, bindable]\n    VARIANT onbeforeunload();\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONUNLOAD), displaybind, bindable]\n    void onunload(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONUNLOAD), displaybind, bindable]\n    VARIANT onunload();\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONHELP), displaybind, bindable]\n    void onhelp(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONHELP), displaybind, bindable]\n    VARIANT onhelp();\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONERROR), displaybind, bindable]\n    void onerror(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONERROR), displaybind, bindable]\n    VARIANT onerror();\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONRESIZE), displaybind, bindable]\n    void onresize(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONRESIZE), displaybind, bindable]\n    VARIANT onresize();\n\n    [propput, id(DISPID_IHTMLWINDOW2_ONSCROLL), displaybind, bindable]\n    void onscroll(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_ONSCROLL), displaybind, bindable]\n    VARIANT onscroll();\n\n    [propget, id(DISPID_IHTMLWINDOW2_DOCUMENT), source]\n    IHTMLDocument2* document();\n\n    [propget, id(DISPID_IHTMLWINDOW2_EVENT)]\n    IHTMLEventObj* event();\n\n    [propget, id(DISPID_IHTMLWINDOW2__NEWENUM), hidden, restricted]\n    IUnknown* _newEnum();\n\n    [id(DISPID_IHTMLWINDOW2_SHOWMODALDIALOG)]\n    VARIANT showModalDialog([in] BSTR dialog,\n                            [optional, in] VARIANT* varArgIn,\n                            [optional, in] VARIANT* varOptions);\n\n    [id(DISPID_IHTMLWINDOW2_SHOWHELP)]\n    void showHelp([in] BSTR helpURL,\n                  [optional, in] VARIANT helpArg,\n                  [defaultvalue(\"\"), in] BSTR features);\n\n    [propget, id(DISPID_IHTMLWINDOW2_SCREEN)]\n    IHTMLScreen* screen();\n\n    [propget, id(DISPID_IHTMLWINDOW2_OPTION)]\n    IHTMLOptionElementFactory* Option();\n\n    [id(DISPID_IHTMLWINDOW2_FOCUS)]\n    void focus();\n\n    [propget, id(DISPID_IHTMLWINDOW2_CLOSED)]\n    VARIANT_BOOL closed();\n\n    [id(DISPID_IHTMLWINDOW2_BLUR)]\n    void blur();\n\n    [id(DISPID_IHTMLWINDOW2_SCROLL)]\n    void scroll([in] LONG x,\n                [in] LONG y);\n\n    [propget, id(DISPID_IHTMLWINDOW2_CLIENTINFORMATION)]\n    IOmNavigator* clientInformation();\n\n    [id(DISPID_IHTMLWINDOW2_CLEARINTERVAL)]\n    void clearInterval([in] LONG timerID);\n\n    [propput, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]\n    void offscreenBuffering(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]\n    VARIANT offscreenBuffering();\n\n    [id(DISPID_IHTMLWINDOW2_EXECSCRIPT)]\n    VARIANT execScript([in] BSTR code,\n                       [defaultvalue(\"JScript\"), in] BSTR language);\n\n    [id(DISPID_IHTMLWINDOW2_TOSTRING)]\n    BSTR toString();\n\n    [id(DISPID_IHTMLWINDOW2_SCROLLBY)]\n    void scrollBy([in] LONG x,\n                  [in] LONG y);\n\n    [id(DISPID_IHTMLWINDOW2_SCROLLTO)]\n    void scrollTo([in] LONG x,\n                  [in] LONG y);\n\n    [id(DISPID_IHTMLWINDOW2_MOVETO)]\n    void moveTo([in] LONG x,\n                [in] LONG y);\n\n    [id(DISPID_IHTMLWINDOW2_MOVEBY)]\n    void moveBy([in] LONG x,\n                [in] LONG y);\n\n    [id(DISPID_IHTMLWINDOW2_RESIZETO)]\n    void resizeTo([in] LONG x,\n                  [in] LONG y);\n\n    [id(DISPID_IHTMLWINDOW2_RESIZEBY)]\n    void resizeBy([in] LONG x,\n                  [in] LONG y);\n\n    [propget, id(DISPID_IHTMLWINDOW2_EXTERNAL)]\n    IDispatch* external();\n\n    [propget, id(DISPID_IHTMLWINDOW3_SCREENLEFT)]\n    LONG screenLeft();\n\n    [propget, id(DISPID_IHTMLWINDOW3_SCREENTOP)]\n    LONG screenTop();\n\n    [id(DISPID_IHTMLWINDOW3_ATTACHEVENT)]\n    VARIANT_BOOL attachEvent([in] BSTR event,\n                             [in] IDispatch* pDisp);\n\n    [id(DISPID_IHTMLWINDOW3_DETACHEVENT)]\n    void detachEvent([in] BSTR event,\n                     [in] IDispatch* pDisp);\n\n    [id(DISPID_IHTMLWINDOW3_SETTIMEOUT)]\n    LONG setTimeout([in] VARIANT* expression,\n                    [in] LONG msec,\n                    [optional, in] VARIANT* language);\n\n    [id(DISPID_IHTMLWINDOW3_SETINTERVAL)]\n    LONG setInterval([in] VARIANT* expression,\n                     [in] LONG msec,\n                     [optional, in] VARIANT* language);\n\n    [id(DISPID_IHTMLWINDOW3_PRINT)]\n    void print();\n\n    [propput, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]\n    void onbeforeprint(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]\n    VARIANT onbeforeprint();\n\n    [propput, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]\n    void onafterprint(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]\n    VARIANT onafterprint();\n\n    [propget, id(DISPID_IHTMLWINDOW3_CLIPBOARDDATA)]\n    IHTMLDataTransfer* clipboardData();\n\n    [id(DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG)]\n    IHTMLWindow2* showModelessDialog([defaultvalue(\"\"), in] BSTR url,\n                                     [optional, in] VARIANT* varArgIn,\n                                     [optional, in] VARIANT* options);\n\n    [id(DISPID_IHTMLWINDOW4_CREATEPOPUP)]\n    IDispatch* createPopup([optional, in] VARIANT* varArgIn);\n\n    [propget, id(DISPID_IHTMLWINDOW4_FRAMEELEMENT)]\n    IHTMLFrameBase* frameElement();\n\n    [propput, id(DISPID_IHTMLWINDOW5_XMLHTTPREQUEST)]\n    void XMLHttpRequest(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW5_XMLHTTPREQUEST)]\n    VARIANT XMLHttpRequest();\n\n    [propget, id(DISPID_IHTMLWINDOW6_SESSIONSTORAGE)]\n    IHTMLStorage *sessionStorage();\n\n    [propget, id(DISPID_IHTMLWINDOW6_LOCALSTORAGE)]\n    IHTMLStorage *localStorage();\n\n    [propput, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable]\n    void onhashchange(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable]\n    VARIANT onhashchange();\n\n    [propget, id(DISPID_IHTMLWINDOW6_MAXCONNECTIONSPERSERVER)]\n    long maxConnectionsPerServer();\n\n    [id(DISPID_IHTMLWINDOW6_POSTMESSAGE)]\n    void postMessage(\n            [in] BSTR msg,\n            [in, optional] VARIANT targetOrigin);\n\n    [id(DISPID_IHTMLWINDOW6_TOSTATICHTML)]\n    BSTR toStaticHTML([in] BSTR bstrHTML);\n\n    [propput, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable]\n    void onmessage(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable]\n    VARIANT onmessage();\n\n    [id(DISPID_IHTMLWINDOW6_MSWRITEPROFILERMARK)]\n    void msWriteProfilerMark([in] BSTR bstrProfilerMarkName);\n\n    [id(DISPID_IHTMLWINDOW7_GETSELECTION)]\n    IHTMLSelection *getSelection();\n\n    [id(DISPID_IHTMLWINDOW7_GETCOMPUTEDSTYLE)]\n    IHTMLCSSStyleDeclaration *getComputedStyle(\n            [in] IHTMLDOMNode *varArgIn,\n            [in, defaultvalue(\"\")] BSTR bstrPseudoElt);\n\n    [propget, id(DISPID_IHTMLWINDOW7_STYLEMEDIA)]\n    IHTMLStyleMedia *styleMedia();\n\n    [propput, id(DISPID_IHTMLWINDOW7_PERFORMANCE)]\n    void performance(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_PERFORMANCE)]\n    VARIANT performance();\n\n    [propget, id(DISPID_IHTMLWINDOW7_INNERWIDTH)]\n    long innerWidth();\n\n    [propget, id(DISPID_IHTMLWINDOW7_INNERHEIGHT)]\n    long innerHeight();\n\n    [propget, id(DISPID_IHTMLWINDOW7_PAGEXOFFSET)]\n    long pageXOffset();\n\n    [propget, id(DISPID_IHTMLWINDOW7_PAGEYOFFSET)]\n    long pageYOffset();\n\n    [propget, id(DISPID_IHTMLWINDOW7_SCREENX)]\n    long screenX();\n\n    [propget, id(DISPID_IHTMLWINDOW7_SCREENY)]\n    long screenY();\n\n    [propget, id(DISPID_IHTMLWINDOW7_OUTERWIDTH)]\n    long outerWidth();\n\n    [propget, id(DISPID_IHTMLWINDOW7_OUTERHEIGHT)]\n    long outerHeight();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONABORT), displaybind, bindable]\n    void onabort(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONABORT), displaybind, bindable]\n    VARIANT onabort();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONCANPLAY), displaybind, bindable]\n    void oncanplay(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONCANPLAY), displaybind, bindable]\n    VARIANT oncanplay();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONCANPLAYTHROUGH), displaybind, bindable]\n    void oncanplaythrough(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONCANPLAYTHROUGH), displaybind, bindable]\n    VARIANT oncanplaythrough();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONCHANGE), displaybind, bindable]\n    void onchange(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONCHANGE), displaybind, bindable]\n    VARIANT onchange();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONCLICK), displaybind, bindable]\n    void onclick(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONCLICK), displaybind, bindable]\n    VARIANT onclick();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONCONTEXTMENU), displaybind, bindable]\n    void oncontextmenu(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONCONTEXTMENU), displaybind, bindable]\n    VARIANT oncontextmenu();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDBLCLICK), displaybind, bindable]\n    void ondblclick(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDBLCLICK), displaybind, bindable]\n    VARIANT ondblclick();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDRAG), displaybind, bindable]\n    void ondrag(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDRAG), displaybind, bindable]\n    VARIANT ondrag();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDRAGEND), displaybind, bindable]\n    void ondragend(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDRAGEND), displaybind, bindable]\n    VARIANT ondragend();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDRAGENTER), displaybind, bindable]\n    void ondragenter(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDRAGENTER), displaybind, bindable]\n    VARIANT ondragenter();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDRAGLEAVE), displaybind, bindable]\n    void ondragleave(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDRAGLEAVE), displaybind, bindable]\n    VARIANT ondragleave();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDRAGOVER), displaybind, bindable]\n    void ondragover(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDRAGOVER), displaybind, bindable]\n    VARIANT ondragover();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDRAGSTART), displaybind, bindable]\n    void ondragstart(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDRAGSTART), displaybind, bindable]\n    VARIANT ondragstart();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDROP), displaybind, bindable]\n    void ondrop(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDROP), displaybind, bindable]\n    VARIANT ondrop();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONDURATIONCHANGE), displaybind, bindable]\n    void ondurationchange(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONDURATIONCHANGE), displaybind, bindable]\n    VARIANT ondurationchange();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONFOCUSIN), displaybind, bindable]\n    void onfocusin(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONFOCUSIN), displaybind, bindable]\n    VARIANT onfocusin();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONFOCUSOUT), displaybind, bindable]\n    void onfocusout(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONFOCUSOUT), displaybind, bindable]\n    VARIANT onfocusout();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONINPUT), displaybind, bindable]\n    void oninput(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONINPUT), displaybind, bindable]\n    VARIANT oninput();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONEMPTIED), displaybind, bindable]\n    void onemptied(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONEMPTIED), displaybind, bindable]\n    VARIANT onemptied();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONENDED), displaybind, bindable]\n    void onended(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONENDED), displaybind, bindable]\n    VARIANT onended();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONKEYDOWN), displaybind, bindable]\n    void onkeydown(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONKEYDOWN), displaybind, bindable]\n    VARIANT onkeydown();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONKEYPRESS), displaybind, bindable]\n    void onkeypress(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONKEYPRESS), displaybind, bindable]\n    VARIANT onkeypress();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONKEYUP), displaybind, bindable]\n    void onkeyup(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONKEYUP), displaybind, bindable]\n    VARIANT onkeyup();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONLOADEDDATA), displaybind, bindable]\n    void onloadeddata(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONLOADEDDATA), displaybind, bindable]\n    VARIANT onloadeddata();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONLOADEDMETADATA), displaybind, bindable]\n    void onloadedmetadata(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONLOADEDMETADATA), displaybind, bindable]\n    VARIANT onloadedmetadata();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONLOADSTART), displaybind, bindable]\n    void onloadstart(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONLOADSTART), displaybind, bindable]\n    VARIANT onloadstart();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEDOWN), displaybind, bindable]\n    void onmousedown(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEDOWN), displaybind, bindable]\n    VARIANT onmousedown();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEENTER), displaybind, bindable]\n    void onmouseenter(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEENTER), displaybind, bindable]\n    VARIANT onmouseenter();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONMOUSELEAVE), displaybind, bindable]\n    void onmouseleave(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONMOUSELEAVE), displaybind, bindable]\n    VARIANT onmouseleave();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEMOVE), displaybind, bindable]\n    void onmousemove(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEMOVE), displaybind, bindable]\n    VARIANT onmousemove();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEOUT), displaybind, bindable]\n    void onmouseout(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEOUT), displaybind, bindable]\n    VARIANT onmouseout();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEOVER), displaybind, bindable]\n    void onmouseover(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEOVER), displaybind, bindable]\n    VARIANT onmouseover();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEUP), displaybind, bindable]\n    void onmouseup(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEUP), displaybind, bindable]\n    VARIANT onmouseup();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONMOUSEWHEEL), displaybind, bindable]\n    void onmousewheel(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONMOUSEWHEEL), displaybind, bindable]\n    VARIANT onmousewheel();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONOFFLINE), displaybind, bindable]\n    void onoffline(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONOFFLINE), displaybind, bindable]\n    VARIANT onoffline();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONONLINE), displaybind, bindable]\n    void ononline(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONONLINE), displaybind, bindable]\n    VARIANT ononline();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONPROGRESS), displaybind, bindable]\n    void onprogress(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONPROGRESS), displaybind, bindable]\n    VARIANT onprogress();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONRATECHANGE), displaybind, bindable]\n    void onratechange(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONRATECHANGE), displaybind, bindable]\n    VARIANT onratechange();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONREADYSTATECHANGE), displaybind, bindable]\n    void onreadystatechange(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONREADYSTATECHANGE), displaybind, bindable]\n    VARIANT onreadystatechange();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONRESET), displaybind, bindable]\n    void onreset(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONRESET), displaybind, bindable]\n    VARIANT onreset();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONSEEKED), displaybind, bindable]\n    void onseeked(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONSEEKED), displaybind, bindable]\n    VARIANT onseeked();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONSEEKING), displaybind, bindable]\n    void onseeking(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONSEEKING), displaybind, bindable]\n    VARIANT onseeking();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONSELECT), displaybind, bindable]\n    void onselect(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONSELECT), displaybind, bindable]\n    VARIANT onselect();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONSTALLED), displaybind, bindable]\n    void onstalled(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONSTALLED), displaybind, bindable]\n    VARIANT onstalled();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONSTORAGE), displaybind, bindable]\n    void onstorage(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONSTORAGE), displaybind, bindable]\n    VARIANT onstorage();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONSUBMIT), displaybind, bindable]\n    void onsubmit(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONSUBMIT), displaybind, bindable]\n    VARIANT onsubmit();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONSUSPEND), displaybind, bindable]\n    void onsuspend(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONSUSPEND), displaybind, bindable]\n    VARIANT onsuspend();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONTIMEUPDATE), displaybind, bindable]\n    void ontimeupdate(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONTIMEUPDATE), displaybind, bindable]\n    VARIANT ontimeupdate();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONPAUSE), displaybind, bindable]\n    void onpause(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONPAUSE), displaybind, bindable]\n    VARIANT onpause();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONPLAY), displaybind, bindable]\n    void onplay(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONPLAY), displaybind, bindable]\n    VARIANT onplay();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONPLAYING), displaybind, bindable]\n    void onplaying(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONPLAYING), displaybind, bindable]\n    VARIANT onplaying();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONVOLUMECHANGE), displaybind, bindable]\n    void onvolumechange(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONVOLUMECHANGE), displaybind, bindable]\n    VARIANT onvolumechange();\n\n    [propput, id(DISPID_IHTMLWINDOW7_ONWAITING), displaybind, bindable]\n    void onwaiting(VARIANT v);\n\n    [propget, id(DISPID_IHTMLWINDOW7_ONWAITING), displaybind, bindable]\n    VARIANT onwaiting();\n\n    WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;\n}\n\n/*****************************************************************************\n *    HTMLWindowEvents interface\n */\n[\n    hidden,\n    uuid(96A0A4E0-D062-11cf-94B6-00AA0060275C)\n]\ndispinterface HTMLWindowEvents\n{\nproperties:\nmethods:\n    [id(DISPID_HTMLWINDOWEVENTS_ONLOAD)]\n    void onload();\n\n    [id(DISPID_HTMLWINDOWEVENTS_ONUNLOAD)]\n    void onunload();\n\n    [id(DISPID_HTMLWINDOWEVENTS_ONHELP)]\n    VARIANT_BOOL onhelp();\n\n    [id(DISPID_HTMLWINDOWEVENTS_ONFOCUS)]\n    void onfocus();\n\n    [id(DISPID_HTMLWINDOWEVENTS_ONBLUR)]\n    void onblur();\n\n    [id(DISPID_HTMLWINDOWEVENTS_ONERROR)]\n    void onerror([in] BSTR description,\n                 [in] BSTR url,\n                 [in] LONG line);\n\n    [id(DISPID_HTMLWINDOWEVENTS_ONRESIZE)]\n    void onresize();\n\n    [id(DISPID_HTMLWINDOWEVENTS_ONSCROLL)]\n    void onscroll();\n\n    [id(DISPID_HTMLWINDOWEVENTS_ONBEFOREUNLOAD)]\n    void onbeforeunload();\n\n    [id(DISPID_HTMLWINDOWEVENTS_ONBEFOREPRINT)]\n    void onbeforeprint();\n\n    [id(DISPID_HTMLWINDOWEVENTS_ONAFTERPRINT)]\n    void onafterprint();\n}\n\n/*****************************************************************************\n *    HTMLWindowEvents2 interface\n */\n[\n    hidden,\n    uuid(3050f625-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface HTMLWindowEvents2\n{\nproperties:\nmethods:\n    [id(DISPID_HTMLWINDOWEVENTS2_ONLOAD)]\n    void onload([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLWINDOWEVENTS2_ONUNLOAD)]\n    void onunload([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLWINDOWEVENTS2_ONHELP)]\n    VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLWINDOWEVENTS2_ONFOCUS)]\n    void onfocus([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLWINDOWEVENTS2_ONBLUR)]\n    void onblur([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLWINDOWEVENTS2_ONERROR)]\n    void onerror([in] BSTR description,\n                 [in] BSTR url,\n                 [in] LONG line);\n\n    [id(DISPID_HTMLWINDOWEVENTS2_ONRESIZE)]\n    void onresize([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLWINDOWEVENTS2_ONSCROLL)]\n    void onscroll([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLWINDOWEVENTS2_ONBEFOREUNLOAD)]\n    void onbeforeunload([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLWINDOWEVENTS2_ONBEFOREPRINT)]\n    void onbeforeprint([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLWINDOWEVENTS2_ONAFTERPRINT)]\n    void onafterprint([in] IHTMLEventObj* pEvtObj);\n}\n\n/*****************************************************************************\n *    HTMLWindowProxy class\n */\n[\n    uuid(3050f391-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLWindowProxy\n{\n    [default]           dispinterface DispHTMLWindowProxy;\n    [source, default]   dispinterface HTMLWindowEvents;\n    [source]            dispinterface HTMLWindowEvents2;\n                        interface IHTMLWindow2;\n                        interface IHTMLWindow3;\n                        interface IHTMLWindow4;\n                        interface IHTMLWindow5;\n}\n\n/*****************************************************************************\n *    HTMLDocumentEvents2 interface\n */\n[\n    hidden,\n    uuid(3050f613-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface HTMLDocumentEvents2\n{\n    properties:\n    methods:\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONHELP)]\n    VARIANT_BOOL onhelp([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONCLICK)]\n    VARIANT_BOOL onclick([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONDBLCLICK)]\n    VARIANT_BOOL ondblclick([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONKEYDOWN)]\n    void onkeydown([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONKEYUP)]\n    void onkeyup([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONKEYPRESS)]\n    VARIANT_BOOL onkeypress([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEDOWN)]\n    void onmousedown([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEMOVE)]\n    void onmousemove([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEUP)]\n    void onmouseup([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOUT)]\n    void onmouseout([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOVER)]\n    void onmouseover([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONREADYSTATECHANGE)]\n    void onreadystatechange([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREUPDATE)]\n    VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONAFTERUPDATE)]\n    void onafterupdate([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONROWEXIT)]\n    VARIANT_BOOL onrowexit([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONROWENTER)]\n    void onrowenter([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONDRAGSTART)]\n    VARIANT_BOOL ondragstart([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONSELECTSTART)]\n    VARIANT_BOOL onselectstart([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONERRORUPDATE)]\n    VARIANT_BOOL onerrorupdate([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONCONTEXTMENU)]\n    VARIANT_BOOL oncontextmenu([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONSTOP)]\n    VARIANT_BOOL onstop([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONROWSDELETE)]\n    void onrowsdelete([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONROWSINSERTED)]\n    void onrowsinserted([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONCELLCHANGE)]\n    void oncellchange([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONPROPERTYCHANGE)]\n    void onpropertychange([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONDATASETCHANGED)]\n    void ondatasetchanged([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONDATAAVAILABLE)]\n    void ondataavailable([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONDATASETCOMPLETE)]\n    void ondatasetcomplete([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREEDITFOCUS)]\n    void onbeforeeditfocus([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONSELECTIONCHANGE)]\n    void onselectionchange([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONCONTROLSELECT)]\n    VARIANT_BOOL oncontrolselect([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEWHEEL)]\n    VARIANT_BOOL onmousewheel([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONFOCUSIN)]\n    void onfocusin([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONFOCUSOUT)]\n    void onfocusout([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONACTIVATE)]\n    void onactivate([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONDEACTIVATE)]\n    void ondeactivate([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREACTIVATE)]\n    VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj *pEvtObj);\n\n    [id(DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREDEACTIVATE)]\n    VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj *pEvtObj);\n}\n\n/*****************************************************************************\n *    HTMLDocumentEvents interface\n */\n[\n    hidden,\n    uuid(3050f260-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface HTMLDocumentEvents\n{\n    properties:\n    methods:\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONHELP)]\n    VARIANT_BOOL onhelp();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONCLICK)]\n    VARIANT_BOOL onclick();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONDBLCLICK)]\n    VARIANT_BOOL ondblclick();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONKEYDOWN)]\n    void onkeydown();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONKEYUP)]\n    void onkeyup();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONKEYPRESS)]\n    VARIANT_BOOL onkeypress();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEDOWN)]\n    void onmousedown();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEMOVE)]\n    void onmousemove();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEUP)]\n    void onmouseup();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEOUT)]\n    void onmouseout();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEOVER)]\n    void onmouseover();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONREADYSTATECHANGE)]\n    void onreadystatechange();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONBEFOREUPDATE)]\n    VARIANT_BOOL onbeforeupdate();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONAFTERUPDATE)]\n    void onafterupdate();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONROWEXIT)]\n    VARIANT_BOOL onrowexit();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONROWENTER)]\n    void onrowenter();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONDRAGSTART)]\n    VARIANT_BOOL ondragstart();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONSELECTSTART)]\n    VARIANT_BOOL onselectstart();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONERRORUPDATE)]\n    VARIANT_BOOL onerrorupdate();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONCONTEXTMENU)]\n    VARIANT_BOOL oncontextmenu();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONSTOP)]\n    VARIANT_BOOL onstop();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONROWSDELETE)]\n    void onrowsdelete();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONROWSINSERTED)]\n    void onrowsinserted();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONCELLCHANGE)]\n    void oncellchange();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONPROPERTYCHANGE)]\n    void onpropertychange();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONDATASETCHANGED)]\n    void ondatasetchanged();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONDATAAVAILABLE)]\n    void ondataavailable();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONDATASETCOMPLETE)]\n    void ondatasetcomplete();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONBEFOREEDITFOCUS)]\n    void onbeforeeditfocus();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONSELECTIONCHANGE)]\n    void onselectionchange();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONCONTROLSELECT)]\n    VARIANT_BOOL oncontrolselect();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEWHEEL)]\n    VARIANT_BOOL onmousewheel();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONFOCUSIN)]\n    void onfocusin();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONFOCUSOUT)]\n    void onfocusout();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONACTIVATE)]\n    void onactivate();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONDEACTIVATE)]\n    void ondeactivate();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONBEFOREACTIVATE)]\n    VARIANT_BOOL onbeforeactivate();\n\n    [id(DISPID_HTMLDOCUMENTEVENTS_ONBEFOREDEACTIVATE)]\n    VARIANT_BOOL onbeforedeactivate();\n}\n\n/*****************************************************************************\n *    HTMLTextContainerEvents interface\n */\n[\n    hidden,\n    uuid(1ff6aa72-5842-11cf-a707-00aa00c0098d)\n]\ndispinterface HTMLTextContainerEvents\n{\nproperties:\n\nmethods:\n    [id(DISPID_HTMLELEMENTEVENTS_ONHELP)]\n    VARIANT_BOOL onhelp();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONCLICK)]\n    VARIANT_BOOL onclick();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDBLCLICK)]\n    VARIANT_BOOL ondblclick();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONKEYPRESS)]\n    VARIANT_BOOL onkeypress();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONKEYDOWN)]\n    void onkeydown();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONKEYUP)]\n    void onkeyup();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT)]\n    void onmouseout();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER)]\n    void onmouseover();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE)]\n    void onmousemove();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN)]\n    void onmousedown();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP)]\n    void onmouseup();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONSELECTSTART)]\n    VARIANT_BOOL onselectstart();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE)]\n    void onfilterchange();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART)]\n    VARIANT_BOOL ondragstart();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE)]\n    VARIANT_BOOL onbeforeupdate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE)]\n    void onafterupdate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE)]\n    VARIANT_BOOL onerrorupdate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONROWEXIT)]\n    VARIANT_BOOL onrowexit();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONROWENTER)]\n    void onrowenter();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED)]\n    void ondatasetchanged();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE)]\n    void ondataavailable();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE)]\n    void ondatasetcomplete();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE)]\n    void onlosecapture();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE)]\n    void onpropertychange();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONSCROLL)]\n    void onscroll();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUS)]\n    void onfocus();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBLUR)]\n    void onblur();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZE)]\n    void onresize();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDRAG)]\n    VARIANT_BOOL ondrag();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGEND)]\n    void ondragend();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGENTER)]\n    VARIANT_BOOL ondragenter();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGOVER)]\n    VARIANT_BOOL ondragover();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE)]\n    void ondragleave();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDROP)]\n    VARIANT_BOOL ondrop();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECUT)]\n    VARIANT_BOOL onbeforecut();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONCUT)]\n    VARIANT_BOOL oncut();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY)]\n    VARIANT_BOOL onbeforecopy();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONCOPY)]\n    VARIANT_BOOL oncopy();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE)]\n    VARIANT_BOOL onbeforepaste();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONPASTE)]\n    VARIANT_BOOL onpaste();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU)]\n    VARIANT_BOOL oncontextmenu();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONROWSDELETE)]\n    void onrowsdelete();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED)]\n    void onrowsinserted();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE)]\n    void oncellchange();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE)]\n    void onreadystatechange();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS)]\n    void onbeforeeditfocus();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE)]\n    void onlayoutcomplete();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONPAGE)]\n    void onpage();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE)]\n    VARIANT_BOOL onbeforedeactivate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE)]\n    VARIANT_BOOL onbeforeactivate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOVE)]\n    void onmove();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT)]\n    VARIANT_BOOL oncontrolselect();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOVESTART)]\n    VARIANT_BOOL onmovestart();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOVEEND)]\n    void onmoveend();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZESTART)]\n    VARIANT_BOOL onresizestart();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZEEND)]\n    void onresizeend();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER)]\n    void onmouseenter();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE)]\n    void onmouseleave();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL)]\n    VARIANT_BOOL onmousewheel();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONACTIVATE)]\n    void onactivate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE)]\n    void ondeactivate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSIN)]\n    void onfocusin();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT)]\n    void onfocusout();\n\n    [id(DISPID_HTMLTEXTCONTAINEREVENTS_ONCHANGE)]\n    void onchange();\n\n    [id(DISPID_HTMLTEXTCONTAINEREVENTS_ONSELECT)]\n    void onselect();\n}\n\n/*****************************************************************************\n *    HTMLTextContainerEvents2 interface\n */\n[\n    hidden,\n    uuid(3050f624-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface HTMLTextContainerEvents2\n{\nproperties:\nmethods:\n    [id(DISPID_HTMLELEMENTEVENTS2_ONHELP)]\n    VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONCLICK)]\n    VARIANT_BOOL onclick([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK)]\n    VARIANT_BOOL ondblclick([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS)]\n    VARIANT_BOOL onkeypress([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN)]\n    void onkeydown([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYUP)]\n    void onkeyup([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT)]\n    void onmouseout([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER)]\n    void onmouseover([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE)]\n    void onmousemove([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN)]\n    void onmousedown([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP)]\n    void onmouseup([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART)]\n    VARIANT_BOOL onselectstart([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE)]\n    void onfilterchange([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART)]\n    VARIANT_BOOL ondragstart([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE)]\n    VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE)]\n    void onafterupdate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE)]\n    VARIANT_BOOL onerrorupdate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONROWEXIT)]\n    VARIANT_BOOL onrowexit([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONROWENTER)]\n    void onrowenter([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED)]\n    void ondatasetchanged([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE)]\n    void ondataavailable([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE)]\n    void ondatasetcomplete([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE)]\n    void onlosecapture([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE)]\n    void onpropertychange([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONSCROLL)]\n    void onscroll([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUS)]\n    void onfocus([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBLUR)]\n    void onblur([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZE)]\n    void onresize([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAG)]\n    VARIANT_BOOL ondrag([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGEND)]\n    void ondragend([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER)]\n    VARIANT_BOOL ondragenter([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER)]\n    VARIANT_BOOL ondragover([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE)]\n    void ondragleave([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDROP)]\n    VARIANT_BOOL ondrop([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT)]\n    VARIANT_BOOL onbeforecut([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONCUT)]\n    VARIANT_BOOL oncut([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY)]\n    VARIANT_BOOL onbeforecopy([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONCOPY)]\n    VARIANT_BOOL oncopy([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE)]\n    VARIANT_BOOL onbeforepaste([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONPASTE)]\n    VARIANT_BOOL onpaste([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU)]\n    VARIANT_BOOL oncontextmenu([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE)]\n    void onrowsdelete([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED)]\n    void onrowsinserted([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE)]\n    void oncellchange([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE)]\n    void onreadystatechange([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE)]\n    void onlayoutcomplete([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONPAGE)]\n    void onpage([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER)]\n    void onmouseenter([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE)]\n    void onmouseleave([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONACTIVATE)]\n    void onactivate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE)]\n    void ondeactivate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE)]\n    VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE)]\n    VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN)]\n    void onfocusin([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT)]\n    void onfocusout([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVE)]\n    void onmove([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT)]\n    VARIANT_BOOL oncontrolselect([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVESTART)]\n    VARIANT_BOOL onmovestart([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVEEND)]\n    void onmoveend([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART)]\n    VARIANT_BOOL onresizestart([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND)]\n    void onresizeend([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL)]\n    VARIANT_BOOL onmousewheel([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLTEXTCONTAINEREVENTS2_ONCHANGE)]\n    void onchange([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLTEXTCONTAINEREVENTS2_ONSELECT)]\n    void onselect([in] IHTMLEventObj* pEvtObj);\n}\n\n/*****************************************************************************\n *    IDOMProcessingInstruction interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(30510742-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IDOMProcessingInstruction : IDispatch\n{\n    [propget, id(DISPID_IDOMPROCESSINGINSTRUCTION_TARGET)]\n    HRESULT target([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IDOMPROCESSINGINSTRUCTION_DATA)]\n    HRESULT data([in] BSTR v);\n\n    [propget, id(DISPID_IDOMPROCESSINGINSTRUCTION_DATA)]\n    HRESULT data([out, retval] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLPerformanceNavigation interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(30510750-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLPerformanceNavigation : IDispatch\n{\n    [propget, id(DISPID_IHTMLPERFORMANCENAVIGATION_TYPE)]\n    HRESULT type([out, retval] ULONG *p);\n\n    [propget, id(DISPID_IHTMLPERFORMANCENAVIGATION_REDIRECTCOUNT)]\n    HRESULT redirectCount([out, retval] ULONG *p);\n\n    [id(DISPID_IHTMLPERFORMANCENAVIGATION_TOSTRING)]\n    HRESULT toString([out, retval] BSTR *string);\n\n    [id(DISPID_IHTMLPERFORMANCENAVIGATION_TOJSON)]\n    HRESULT toJSON([out, retval] VARIANT *pVar);\n}\n\n/*****************************************************************************\n *    IHTMLPerformanceTiming interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(30510752-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLPerformanceTiming : IDispatch\n{\n    [propget, id(DISPID_IHTMLPERFORMANCETIMING_NAVIGATIONSTART)]\n    HRESULT navigationStart([out, retval] ULONGLONG *p);\n\n    [propget, id(DISPID_IHTMLPERFORMANCETIMING_UNLOADEVENTSTART)]\n    HRESULT unloadEventStart([out, retval] ULONGLONG *p);\n\n    [propget, id(DISPID_IHTMLPERFORMANCETIMING_UNLOADEVENTEND)]\n    HRESULT unloadEventEnd([out, retval] ULONGLONG *p);\n\n    [propget, id(DISPID_IHTMLPERFORMANCETIMING_REDIRECTSTART)]\n    HRESULT redirectStart([out, retval] ULONGLONG *p);\n\n    [propget, id(DISPID_IHTMLPERFORMANCETIMING_REDIRECTEND)]\n    HRESULT redirectEnd([out, retval] ULONGLONG *p);\n\n    [propget, id(DISPID_IHTMLPERFORMANCETIMING_FETCHSTART)]\n    HRESULT fetchStart([out, retval] ULONGLONG *p);\n\n    [propget, id(DISPID_IHTMLPERFORMANCETIMING_DOMAINLOOKUPSTART)]\n    HRESULT domainLookupStart([out, retval] ULONGLONG *p);\n\n    [propget, id(DISPID_IHTMLPERFORMANCETIMING_DOMAINLOOKUPEND)]\n    HRESULT domainLookupEnd([out, retval] ULONGLONG *p);\n\n    [propget, id(DISPID_IHTMLPERFORMANCETIMING_CONNECTSTART)]\n    HRESULT connectStart([out, retval] ULONGLONG *p);\n\n    [propget, id(DISPID_IHTMLPERFORMANCETIMING_CONNECTEND)]\n    HRESULT connectEnd([out, retval] ULONGLONG *p);\n\n    [propget, id(DISPID_IHTMLPERFORMANCETIMING_REQUESTSTART)]\n    HRESULT requestStart([out, retval] ULONGLONG *p);\n\n    [propget, id(DISPID_IHTMLPERFORMANCETIMING_RESPONSESTART)]\n    HRESULT responseStart([out, retval] ULONGLONG *p);\n\n    [propget, id(DISPID_IHTMLPERFORMANCETIMING_RESPONSEEND)]\n    HRESULT responseEnd([out, retval] ULONGLONG *p);\n\n    [propget, id(DISPID_IHTMLPERFORMANCETIMING_DOMLOADING)]\n    HRESULT domLoading([out, retval] ULONGLONG *p);\n\n    [propget, id(DISPID_IHTMLPERFORMANCETIMING_DOMINTERACTIVE)]\n    HRESULT domInteractive([out, retval] ULONGLONG *p);\n\n    [propget, id(DISPID_IHTMLPERFORMANCETIMING_DOMCONTENTLOADEDEVENTSTART)]\n    HRESULT domContentLoadedEventStart([out, retval] ULONGLONG *p);\n\n    [propget, id(DISPID_IHTMLPERFORMANCETIMING_DOMCONTENTLOADEDEVENTEND)]\n    HRESULT domContentLoadedEventEnd([out, retval] ULONGLONG *p);\n\n    [propget, id(DISPID_IHTMLPERFORMANCETIMING_DOMCOMPLETE)]\n    HRESULT domComplete([out, retval] ULONGLONG *p);\n\n    [propget, id(DISPID_IHTMLPERFORMANCETIMING_LOADEVENTSTART)]\n    HRESULT loadEventStart([out, retval] ULONGLONG *p);\n\n    [propget, id(DISPID_IHTMLPERFORMANCETIMING_LOADEVENTEND)]\n    HRESULT loadEventEnd([out, retval] ULONGLONG *p);\n\n    [propget, id(DISPID_IHTMLPERFORMANCETIMING_MSFIRSTPAINT)]\n    HRESULT msFirstPaint([out, retval] ULONGLONG *p);\n\n    [id(DISPID_IHTMLPERFORMANCETIMING_TOSTRING)]\n    HRESULT toString([out, retval] BSTR *string);\n\n    [id(DISPID_IHTMLPERFORMANCETIMING_TOJSON)]\n    HRESULT toJSON([out, retval] VARIANT *pVar);\n}\n\n/*****************************************************************************\n *    IHTMLPerformance interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3051074e-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLPerformance : IDispatch\n{\n    [propget, id(DISPID_IHTMLPERFORMANCE_NAVIGATION)]\n    HRESULT navigation([out, retval] IHTMLPerformanceNavigation **p);\n\n    [propget, id(DISPID_IHTMLPERFORMANCE_TIMING)]\n    HRESULT timing([out, retval] IHTMLPerformanceTiming **p);\n\n    [id(DISPID_IHTMLPERFORMANCE_TOSTRING)]\n    HRESULT toString([out, retval] BSTR *string);\n\n    [id(DISPID_IHTMLPERFORMANCE_TOJSON)]\n    HRESULT toJSON([out, retval] VARIANT *pVar);\n}\n\n/*****************************************************************************\n *    IHTMLDocument interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(626FC520-A41E-11CF-A731-00A0C9082637)\n]\ninterface IHTMLDocument : IDispatch\n{\n    [propget, id(DISPID_IHTMLDOCUMENT_SCRIPT)]\n    HRESULT Script([retval, out] IDispatch **p);\n}\n\n/*****************************************************************************\n *    IHTMLDocument2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(332C4425-26CB-11D0-B483-00C04FD90119)\n]\ninterface IHTMLDocument2 : IHTMLDocument\n{\n    [propget, id(DISPID_IHTMLDOCUMENT2_ALL)]\n    HRESULT all([retval, out] IHTMLElementCollection **p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_BODY)]\n    HRESULT body([retval, out] IHTMLElement **p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ACTIVEELEMENT)]\n    HRESULT activeElement([retval, out] IHTMLElement **p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_IMAGES)]\n    HRESULT images([retval, out] IHTMLElementCollection **p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_APPLETS)]\n    HRESULT applets([retval, out] IHTMLElementCollection **p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_LINKS)]\n    HRESULT links([retval, out] IHTMLElementCollection **p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_FORMS)]\n    HRESULT forms([retval, out] IHTMLElementCollection **p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ANCHORS)]\n    HRESULT anchors([retval, out] IHTMLElementCollection **p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_TITLE)]\n    HRESULT title([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_TITLE)]\n    HRESULT title([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_SCRIPTS)]\n    HRESULT scripts([retval, out] IHTMLElementCollection **p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_DESIGNMODE)]\n    HRESULT designMode([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_DESIGNMODE)]\n    HRESULT designMode([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_SELECTION)]\n    HRESULT selection([retval, out] IHTMLSelectionObject **p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_READYSTATE)]\n     HRESULT readyState([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_FRAMES)]\n    HRESULT frames([retval, out] IHTMLFramesCollection2 **p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_EMBEDS)]\n    HRESULT embeds([retval, out] IHTMLElementCollection **p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_PLUGINS)]\n    HRESULT plugins([retval, out] IHTMLElementCollection **p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ALINKCOLOR)]\n    HRESULT alinkColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ALINKCOLOR)]\n    HRESULT alinkColor([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_BGCOLOR)]\n    HRESULT bgColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_BGCOLOR)]\n    HRESULT bgColor([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_FGCOLOR)]\n    HRESULT fgColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_FGCOLOR)]\n    HRESULT fgColor([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_LINKCOLOR)]\n    HRESULT linkColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_LINKCOLOR)]\n    HRESULT linkColor([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_VLINKCOLOR)]\n    HRESULT vlinkColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_VLINKCOLOR)]\n    HRESULT vlinkColor([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_REFERRER)]\n    HRESULT referrer([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_LOCATION)]\n    HRESULT location([retval, out] IHTMLLocation **p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_LASTMODIFIED)]\n    HRESULT lastModified([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_URL)]\n    HRESULT URL([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_URL)]\n    HRESULT URL([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_DOMAIN)]\n    HRESULT domain([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_DOMAIN)]\n    HRESULT domain([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_COOKIE)]\n    HRESULT cookie([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_COOKIE)]\n    HRESULT cookie([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_EXPANDO)]\n    HRESULT expando([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_EXPANDO)]\n    HRESULT expando([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_CHARSET)]\n     HRESULT charset([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_CHARSET)]\n    HRESULT charset([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET)]\n    HRESULT defaultCharset([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET)]\n    HRESULT defaultCharset([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_MIMETYPE)]\n    HRESULT mimeType([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_FILESIZE)]\n    HRESULT fileSize([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_FILECREATEDDATE)]\n    HRESULT fileCreatedDate([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_FILEMODIFIEDDATE)]\n    HRESULT fileModifiedDate([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_FILEUPDATEDDATE)]\n    HRESULT fileUpdatedDate([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_SECURITY)]\n    HRESULT security([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_PROTOCOL)]\n    HRESULT protocol([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_NAMEPROP)]\n     HRESULT nameProp([retval, out] BSTR *p);\n\n    [vararg, id(DISPID_IHTMLDOCUMENT2_WRITE)]\n    HRESULT write([in] SAFEARRAY(VARIANT) psarray);\n\n    [vararg, id(DISPID_IHTMLDOCUMENT2_WRITELN)]\n    HRESULT writeln([in] SAFEARRAY(VARIANT) psarray);\n\n    [id(DISPID_IHTMLDOCUMENT2_OPEN)]\n    HRESULT open(\n        [defaultvalue(\"text/html\"), in] BSTR url,\n        [optional, in] VARIANT name,\n        [optional, in] VARIANT features,\n        [optional, in] VARIANT replace,\n        [retval, out]  IDispatch **pomWindowResult);\n\n    [id(DISPID_IHTMLDOCUMENT2_CLOSE)]\n    HRESULT close();\n\n    [id(DISPID_IHTMLDOCUMENT2_CLEAR)]\n    HRESULT clear();\n\n    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSUPPORTED)]\n    HRESULT queryCommandSupported(\n        [in] BSTR cmdID,\n        [retval, out] VARIANT_BOOL *pfRet);\n\n    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDENABLED)]\n    HRESULT queryCommandEnabled(\n        [in] BSTR cmdID,\n        [retval, out] VARIANT_BOOL *pfRet);\n\n    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSTATE)]\n    HRESULT queryCommandState(\n        [in] BSTR cmdID,\n        [retval, out] VARIANT_BOOL *pfRet);\n\n    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDINDETERM)]\n    HRESULT queryCommandIndeterm(\n        [in] BSTR cmdID,\n        [retval, out] VARIANT_BOOL *pfRet);\n\n    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDTEXT)]\n    HRESULT queryCommandText(\n        [in] BSTR cmdID,\n        [retval, out] BSTR *pcmdText);\n\n    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDVALUE)]\n    HRESULT queryCommandValue(\n        [in] BSTR cmdID,\n        [retval, out] VARIANT *pcmdValue);\n\n    [id(DISPID_IHTMLDOCUMENT2_EXECCOMMAND)]\n    HRESULT execCommand(\n        [in] BSTR cmdID,\n        [defaultvalue(0), in] VARIANT_BOOL showUI,\n        [optional, in] VARIANT value,\n        [retval, out] VARIANT_BOOL *pfRet);\n\n    [id(DISPID_IHTMLDOCUMENT2_EXECCOMMANDSHOWHELP)]\n    HRESULT execCommandShowHelp(\n        [in] BSTR cmdID,\n        [retval, out] VARIANT_BOOL *pfRet);\n\n    [id(DISPID_IHTMLDOCUMENT2_CREATEELEMENT)]\n     HRESULT createElement(\n        [in] BSTR eTag,\n        [retval, out] IHTMLElement **newElem);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONHELP)]\n    HRESULT onhelp([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONHELP)]\n    HRESULT onhelp([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONCLICK)]\n    HRESULT onclick([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONCLICK)]\n    HRESULT onclick([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONDBLCLICK)]\n    HRESULT ondblclick([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONDBLCLICK)]\n    HRESULT ondblclick([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYUP)]\n    HRESULT onkeyup([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYUP)]\n    HRESULT onkeyup([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYDOWN)]\n    HRESULT onkeydown([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYDOWN)]\n    HRESULT onkeydown([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYPRESS)]\n     HRESULT onkeypress([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYPRESS)]\n    HRESULT onkeypress([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEUP)]\n    HRESULT onmouseup([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEUP)]\n    HRESULT onmouseup([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN)]\n    HRESULT onmousedown([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN)]\n    HRESULT onmousedown([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE)]\n    HRESULT onmousemove([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE)]\n    HRESULT onmousemove([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOUT)]\n    HRESULT onmouseout([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOUT)]\n    HRESULT onmouseout([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOVER)]\n    HRESULT onmouseover([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOVER)]\n    HRESULT onmouseover([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE)]\n    HRESULT onreadystatechange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE)]\n    HRESULT onreadystatechange([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE)]\n    HRESULT onafterupdate([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE)]\n    HRESULT onafterupdate([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONROWEXIT)]\n    HRESULT onrowexit([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONROWEXIT)]\n    HRESULT onrowexit([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONROWENTER)]\n    HRESULT onrowenter([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONROWENTER)]\n    HRESULT onrowenter([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONDRAGSTART)]\n    HRESULT ondragstart([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONDRAGSTART)]\n    HRESULT ondragstart([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONSELECTSTART)]\n    HRESULT onselectstart([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONSELECTSTART)]\n    HRESULT onselectstart([retval, out] VARIANT *p);\n\n    [id(DISPID_IHTMLDOCUMENT2_ELEMENTFROMPOINT)]\n    HRESULT elementFromPoint(\n        [in] LONG x,\n        [in] LONG y,\n        [retval, out] IHTMLElement **elementHit);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_PARENTWINDOW)]\n    HRESULT parentWindow([retval, out] IHTMLWindow2 **p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_STYLESHEETS)]\n    HRESULT styleSheets([retval, out] IHTMLStyleSheetsCollection **p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE)]\n    HRESULT onbeforeupdate([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE)]\n    HRESULT onbeforeupdate([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONERRORUPDATE)]\n    HRESULT onerrorupdate([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONERRORUPDATE)]\n    HRESULT onerrorupdate([retval, out] VARIANT *p);\n\n    [id(DISPID_IHTMLDOCUMENT2_TOSTRING)]\n    HRESULT toString([retval, out] BSTR *String);\n\n    [id(DISPID_IHTMLDOCUMENT2_CREATESTYLESHEET)]\n    HRESULT createStyleSheet(\n        [defaultvalue(\"\"), in] BSTR bstrHref,\n        [defaultvalue(-1), in] LONG lIndex,\n        [retval, out] IHTMLStyleSheet **ppnewStyleSheet);\n}\n\n/*****************************************************************************\n *    IHTMLDocument3 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f485-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLDocument3 : IDispatch\n{\n    [id(DISPID_IHTMLDOCUMENT3_RELEASECAPTURE)]\n    HRESULT releaseCapture();\n\n    [id(DISPID_IHTMLDOCUMENT3_RECALC)]\n    HRESULT recalc([defaultvalue(0), in] VARIANT_BOOL fForce);\n\n    [id(DISPID_IHTMLDOCUMENT3_CREATETEXTNODE)]\n    HRESULT createTextNode(\n        [in] BSTR text,\n        [retval, out] IHTMLDOMNode **newTextNode);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_DOCUMENTELEMENT)]\n    HRESULT documentElement([retval, out] IHTMLElement **p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_UNIQUEID), hidden]\n    HRESULT uniqueID([retval, out] BSTR *p);\n\n    [id(DISPID_IHTMLDOCUMENT3_ATTACHEVENT)]\n    HRESULT attachEvent(\n        [in] BSTR event,\n        [in] IDispatch* pDisp,\n        [retval, out] VARIANT_BOOL *pfResult);\n\n    [id(DISPID_IHTMLDOCUMENT3_DETACHEVENT)]\n    HRESULT detachEvent(\n        [in] BSTR event,\n        [in] IDispatch *pDisp);\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE), displaybind, bindable]\n    HRESULT onrowsdelete([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE), displaybind, bindable]\n    HRESULT onrowsdelete([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED), displaybind, bindable]\n    HRESULT onrowsinserted([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED), displaybind, bindable]\n    HRESULT onrowsinserted([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE), displaybind, bindable]\n    HRESULT oncellchange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE), displaybind, bindable]\n    HRESULT oncellchange([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED), displaybind, bindable]\n    HRESULT ondatasetchanged([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED), displaybind, bindable]\n    HRESULT ondatasetchanged([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE), displaybind, bindable]\n    HRESULT ondataavailable([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE), displaybind, bindable]\n    HRESULT ondataavailable([retval, out] VARIANT * p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE), displaybind, bindable]\n    HRESULT ondatasetcomplete([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE), displaybind, bindable]\n    HRESULT ondatasetcomplete([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE), displaybind, bindable]\n    HRESULT onpropertychange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE), displaybind, bindable]\n    HRESULT onpropertychange([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_DIR)]\n    HRESULT dir([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_DIR)]\n    HRESULT dir([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU), displaybind, bindable]\n    HRESULT oncontextmenu([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU), displaybind, bindable]\n    HRESULT oncontextmenu([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_ONSTOP), displaybind, bindable]\n    HRESULT onstop([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_ONSTOP), displaybind, bindable]\n    HRESULT onstop([retval, out] VARIANT *p);\n\n    [id(DISPID_IHTMLDOCUMENT3_CREATEDOCUMENTFRAGMENT)]\n    HRESULT createDocumentFragment([retval, out] IHTMLDocument2 **pNewDoc);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_PARENTDOCUMENT), hidden, restricted]\n    HRESULT parentDocument([retval, out] IHTMLDocument2 **p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted]\n    HRESULT enableDownload([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted]\n    HRESULT enableDownload([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted]\n    HRESULT baseUrl([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted]\n    HRESULT baseUrl([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_CHILDNODES)]\n    HRESULT childNodes([retval, out] IDispatch **p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted]\n    HRESULT inheritStyleSheets([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted]\n    HRESULT inheritStyleSheets([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS), displaybind, bindable]\n    HRESULT onbeforeeditfocus([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS), displaybind, bindable]\n    HRESULT onbeforeeditfocus([retval, out] VARIANT *p);\n\n    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYNAME)]\n    HRESULT getElementsByName(\n        [in] BSTR v,\n        [retval, out] IHTMLElementCollection **pelColl);\n\n    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTBYID)]\n    HRESULT getElementById(\n        [in] BSTR v,\n        [retval, out] IHTMLElement **pel);\n\n    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYTAGNAME)]\n    HRESULT getElementsByTagName(\n        [in] BSTR v,\n        [retval, out] IHTMLElementCollection **pelColl);\n}\n\n/*****************************************************************************\n *    IHTMLDocument4 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f69a-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLDocument4 : IDispatch\n{\n    [id(DISPID_IHTMLDOCUMENT4_FOCUS)]\n    HRESULT focus();\n\n    [id(DISPID_IHTMLDOCUMENT4_HASFOCUS)]\n    HRESULT hasFocus([retval, out] VARIANT_BOOL *pfFocus);\n\n    [propput, id(DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE), displaybind, bindable]\n    HRESULT onselectionchange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE), displaybind, bindable]\n    HRESULT onselectionchange([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT4_NAMESPACES)]\n    HRESULT namespaces([retval, out] IDispatch **p);\n\n    [id(DISPID_IHTMLDOCUMENT4_CREATEDOCUMENTFROMURL)]\n    HRESULT createDocumentFromUrl(\n        [in] BSTR bstrUrl,\n        [in] BSTR bstrOptions,\n        [retval, out] IHTMLDocument2 **newDoc);\n\n    [propput, id(DISPID_IHTMLDOCUMENT4_MEDIA)]\n    HRESULT media([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT4_MEDIA)]\n    HRESULT media([retval, out] BSTR *p);\n\n    [id(DISPID_IHTMLDOCUMENT4_CREATEEVENTOBJECT)]\n    HRESULT createEventObject(\n        [optional, in] VARIANT *pvarEventObject,\n        [retval, out] IHTMLEventObj **ppEventObj);\n\n    [id(DISPID_IHTMLDOCUMENT4_FIREEVENT)]\n    HRESULT fireEvent(\n        [in] BSTR bstrEventName,\n        [optional, in] VARIANT *pvarEventObject,\n        [retval, out] VARIANT_BOOL *pfCancelled);\n\n    [id(DISPID_IHTMLDOCUMENT4_CREATERENDERSTYLE)]\n    HRESULT createRenderStyle(\n        [in] BSTR v,\n        [retval, out] IHTMLRenderStyle **ppIHTMLRenderStyle);\n\n    [propput, id(DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT), displaybind, bindable]\n    HRESULT oncontrolselect([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT), displaybind, bindable]\n    HRESULT oncontrolselect([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT4_URLUNENCODED)]\n    HRESULT URLUnencoded([retval, out] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLDocument5 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f80c-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLDocument5 : IDispatch\n{\n    [propput, id(DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL), displaybind, bindable]\n    HRESULT onmousewheel([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL), displaybind, bindable]\n    HRESULT onmousewheel([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT5_DOCTYPE)]\n    HRESULT doctype([retval, out] IHTMLDOMNode **p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT5_IMPLEMENTATION)]\n    HRESULT implementation([retval, out] IHTMLDOMImplementation **p);\n\n    [id(DISPID_IHTMLDOCUMENT5_CREATEATTRIBUTE)]\n    HRESULT createAttribute(\n        [in] BSTR bstrattrName,\n        [retval, out] IHTMLDOMAttribute **ppattribute);\n\n    [id(DISPID_IHTMLDOCUMENT5_CREATECOMMENT)]\n    HRESULT createComment(\n        [in] BSTR bstrdata,\n        [retval, out] IHTMLDOMNode **ppRetNode);\n\n    [propput, id(DISPID_IHTMLDOCUMENT5_ONFOCUSIN), displaybind, bindable]\n    HRESULT onfocusin([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT5_ONFOCUSIN), displaybind, bindable]\n    HRESULT onfocusin([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT5_ONFOCUSOUT), displaybind, bindable]\n    HRESULT onfocusout([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT5_ONFOCUSOUT), displaybind, bindable]\n    HRESULT onfocusout([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT5_ONACTIVATE), displaybind, bindable]\n    HRESULT onactivate([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT5_ONACTIVATE), displaybind, bindable]\n    HRESULT onactivate([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT5_ONDEACTIVATE), displaybind, bindable]\n    HRESULT ondeactivate([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT5_ONDEACTIVATE), displaybind, bindable]\n    HRESULT ondeactivate([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE), displaybind, bindable]\n    HRESULT onbeforeactivate([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE), displaybind, bindable]\n    HRESULT onbeforeactivate([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE), displaybind, bindable]\n    HRESULT onbeforedeactivate([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE), displaybind, bindable]\n    HRESULT onbeforedeactivate([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT5_COMPATMODE)]\n    HRESULT compatMode([retval, out] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLDocument6 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(30510417-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLDocument6 : IDispatch\n{\n    [propget, id(DISPID_IHTMLDOCUMENT6_COMPATIBLE)]\n    HRESULT compatible([retval, out] IHTMLDocumentCompatibleInfoCollection **p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT6_DOCUMENTMODE)]\n    HRESULT documentMode([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT6_ONSTORAGE), displaybind, bindable]\n    HRESULT onstorage([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT6_ONSTORAGE), displaybind, bindable]\n    HRESULT onstorage([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT6_ONSTORAGECOMMIT), displaybind, bindable]\n    HRESULT onstoragecommit([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT6_ONSTORAGECOMMIT), displaybind, bindable]\n    HRESULT onstoragecommit([retval, out] VARIANT *p);\n\n    [id(DISPID_IHTMLDOCUMENT6_IE8_GETELEMENTBYID)]\n    HRESULT getElementById(\n        [in] BSTR bstrId,\n        [retval, out] IHTMLElement2 **p);\n\n    [id(DISPID_IHTMLDOCUMENT6_UPDATESETTINGS)]\n    HRESULT updateSettings();\n}\n\n/*****************************************************************************\n *    IHTMLDocument7 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(305104b8-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLDocument7 : IDispatch\n{\n    [propget, id(DISPID_IHTMLDOCUMENT7_DEFAULTVIEW)]\n    HRESULT defaultView([out, retval] IHTMLWindow2 **p);\n\n    [id(DISPID_IHTMLDOCUMENT7_CREATECDATASECTION)]\n    HRESULT createCDATASection(\n        [in] BSTR text,\n        [out, retval] IHTMLDOMNode **newCDATASectionNode);\n\n    [id(DISPID_IHTMLDOCUMENT7_GETSELECTION)]\n    HRESULT getSelection([out, retval] IHTMLSelection **ppIHTMLSelection);\n\n    [id(DISPID_IHTMLDOCUMENT7_GETELEMENTSBYTAGNAMENS)]\n    HRESULT getElementsByTagNameNS(\n        [in] VARIANT *pvarNS,\n        [in] BSTR bstrLocalName,\n        [out, retval] IHTMLElementCollection **pelColl);\n\n    [id(DISPID_IHTMLDOCUMENT7_CREATEELEMENTNS)]\n    HRESULT createElementNS(\n        [in] VARIANT *pvarNS,\n        [in] BSTR bstrTag,\n        [out, retval] IHTMLElement **newElem);\n\n    [id(DISPID_IHTMLDOCUMENT7_CREATEATTRIBUTENS)]\n    HRESULT createAttributeNS(\n        [in] VARIANT *pvarNS,\n        [in] BSTR bstrAttrName,\n        [out, retval] IHTMLDOMAttribute **ppAttribute);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONMSTHUMBNAILCLICK), displaybind, bindable]\n    HRESULT onmsthumbnailclick([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONMSTHUMBNAILCLICK), displaybind, bindable]\n    HRESULT onmsthumbnailclick([out, retval] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_CHARACTERSET)]\n    HRESULT characterSet([out, retval] BSTR *p);\n\n    [id(DISPID_IHTMLDOCUMENT7_IE9_CREATEELEMENT)]\n    HRESULT createElement(\n        [in] BSTR bstrTag,\n        [out, retval] IHTMLElement **newElem);\n\n    [id(DISPID_IHTMLDOCUMENT7_IE9_CREATEATTRIBUTE)]\n    HRESULT createAttribute(\n        [in] BSTR bstrAttrName,\n        [out, retval] IHTMLDOMAttribute **ppAttribute);\n\n    [id(DISPID_IHTMLDOCUMENT7_GETELEMENTSBYCLASSNAME)]\n    HRESULT getElementsByClassName(\n        [in] BSTR v,\n        [out, retval] IHTMLElementCollection **pel);\n\n    [id(DISPID_IHTMLDOCUMENT7_CREATEPROCESSINGINSTRUCTION)]\n    HRESULT createProcessingInstruction(\n        [in] BSTR bstrTarget,\n        [in] BSTR bstrData,\n        [out, retval] IDOMProcessingInstruction **newProcessingInstruction);\n\n    [id(DISPID_IHTMLDOCUMENT7_ADOPTNODE)]\n    HRESULT adoptNode(\n        [in] IHTMLDOMNode *pNodeSource,\n        [out, retval] IHTMLDOMNode3 **ppNodeDest);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONMSSITEMODEJUMPLISTITEMREMOVED), displaybind, bindable]\n    HRESULT onmssitemodejumplistitemremoved([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONMSSITEMODEJUMPLISTITEMREMOVED), displaybind, bindable]\n    HRESULT onmssitemodejumplistitemremoved([out, retval] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_IE9_ALL)]\n    HRESULT all([out, retval] IHTMLElementCollection **p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_INPUTENCODING)]\n    HRESULT inputEncoding([out, retval] BSTR *p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_XMLENCODING)]\n    HRESULT xmlEncoding([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_XMLSTANDALONE)]\n    HRESULT xmlStandalone([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_XMLSTANDALONE)]\n    HRESULT xmlStandalone([out, retval] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_XMLVERSION)]\n    HRESULT xmlVersion([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_XMLVERSION)]\n    HRESULT xmlVersion([out, retval] BSTR *p);\n\n    [id(DISPID_IHTMLDOCUMENT7_HASATTRIBUTES)]\n    HRESULT hasAttributes([out, retval] VARIANT_BOOL *pfHasAttributes);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONABORT), displaybind, bindable]\n    HRESULT onabort([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONABORT), displaybind, bindable]\n    HRESULT onabort([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONBLUR), displaybind, bindable]\n    HRESULT onblur([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONBLUR), displaybind, bindable]\n    HRESULT onblur([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONCANPLAY), displaybind, bindable]\n    HRESULT oncanplay([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONCANPLAY), displaybind, bindable]\n    HRESULT oncanplay([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONCANPLAYTHROUGH), displaybind, bindable]\n    HRESULT oncanplaythrough([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONCANPLAYTHROUGH), displaybind, bindable]\n    HRESULT oncanplaythrough([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONCHANGE), displaybind, bindable]\n    HRESULT onchange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONCHANGE), displaybind, bindable]\n    HRESULT onchange([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONDRAG), displaybind, bindable]\n    HRESULT ondrag([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONDRAG), displaybind, bindable]\n    HRESULT ondrag([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONDRAGEND), displaybind, bindable]\n    HRESULT ondragend([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONDRAGEND), displaybind, bindable]\n    HRESULT ondragend([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONDRAGENTER), displaybind, bindable]\n    HRESULT ondragenter([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONDRAGENTER), displaybind, bindable]\n    HRESULT ondragenter([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONDRAGLEAVE), displaybind, bindable]\n    HRESULT ondragleave([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONDRAGLEAVE), displaybind, bindable]\n    HRESULT ondragleave([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONDRAGOVER), displaybind, bindable]\n    HRESULT ondragover([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONDRAGOVER), displaybind, bindable]\n    HRESULT ondragover([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONDROP), displaybind, bindable]\n    HRESULT ondrop([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONDROP), displaybind, bindable]\n    HRESULT ondrop([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONDURATIONCHANGE), displaybind, bindable]\n    HRESULT ondurationchange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONDURATIONCHANGE), displaybind, bindable]\n    HRESULT ondurationchange([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONEMPTIED), displaybind, bindable]\n    HRESULT onemptied([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONEMPTIED), displaybind, bindable]\n    HRESULT onemptied([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONENDED), displaybind, bindable]\n    HRESULT onended([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONENDED), displaybind, bindable]\n    HRESULT onended([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONERROR), displaybind, bindable]\n    HRESULT onerror([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONERROR), displaybind, bindable]\n    HRESULT onerror([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONFOCUS), displaybind, bindable]\n    HRESULT onfocus([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONFOCUS), displaybind, bindable]\n    HRESULT onfocus([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONINPUT), displaybind, bindable]\n    HRESULT oninput([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONINPUT), displaybind, bindable]\n    HRESULT oninput([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONLOAD), displaybind, bindable]\n    HRESULT onload([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONLOAD), displaybind, bindable]\n    HRESULT onload([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONLOADEDDATA), displaybind, bindable]\n    HRESULT onloadeddata([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONLOADEDDATA), displaybind, bindable]\n    HRESULT onloadeddata([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONLOADEDMETADATA), displaybind, bindable]\n    HRESULT onloadedmetadata([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONLOADEDMETADATA), displaybind, bindable]\n    HRESULT onloadedmetadata([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONLOADSTART), displaybind, bindable]\n    HRESULT onloadstart([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONLOADSTART), displaybind, bindable]\n    HRESULT onloadstart([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONPAUSE), displaybind, bindable]\n    HRESULT onpause([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONPAUSE), displaybind, bindable]\n    HRESULT onpause([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONPLAY), displaybind, bindable]\n    HRESULT onplay([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONPLAY), displaybind, bindable]\n    HRESULT onplay([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONPLAYING), displaybind, bindable]\n    HRESULT onplaying([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONPLAYING), displaybind, bindable]\n    HRESULT onplaying([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONPROGRESS), displaybind, bindable]\n    HRESULT onprogress([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONPROGRESS), displaybind, bindable]\n    HRESULT onprogress([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONRATECHANGE), displaybind, bindable]\n    HRESULT onratechange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONRATECHANGE), displaybind, bindable]\n    HRESULT onratechange([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONRESET), displaybind, bindable]\n    HRESULT onreset([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONRESET), displaybind, bindable]\n    HRESULT onreset([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONSCROLL), displaybind, bindable]\n    HRESULT onscroll([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONSCROLL), displaybind, bindable]\n    HRESULT onscroll([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONSEEKED), displaybind, bindable]\n    HRESULT onseeked([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONSEEKED), displaybind, bindable]\n    HRESULT onseeked([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONSEEKING), displaybind, bindable]\n    HRESULT onseeking([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONSEEKING), displaybind, bindable]\n    HRESULT onseeking([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONSELECT), displaybind, bindable]\n    HRESULT onselect([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONSELECT), displaybind, bindable]\n    HRESULT onselect([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONSTALLED), displaybind, bindable]\n    HRESULT onstalled([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONSTALLED), displaybind, bindable]\n    HRESULT onstalled([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONSUBMIT), displaybind, bindable]\n    HRESULT onsubmit([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONSUBMIT), displaybind, bindable]\n    HRESULT onsubmit([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONSUSPEND), displaybind, bindable]\n    HRESULT onsuspend([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONSUSPEND), displaybind, bindable]\n    HRESULT onsuspend([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONTIMEUPDATE), displaybind, bindable]\n    HRESULT ontimeupdate([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONTIMEUPDATE), displaybind, bindable]\n    HRESULT ontimeupdate([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONVOLUMECHANGE), displaybind, bindable]\n    HRESULT onvolumechange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONVOLUMECHANGE), displaybind, bindable]\n    HRESULT onvolumechange([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT7_ONWAITING), displaybind, bindable]\n    HRESULT onwaiting([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_ONWAITING), displaybind, bindable]\n    HRESULT onwaiting([out, retval] VARIANT *p);\n\n    [id(DISPID_IHTMLDOCUMENT7_NORMALIZE)]\n    HRESULT normalize();\n\n    [id(DISPID_IHTMLDOCUMENT7_IMPORTNODE)]\n    HRESULT importNode(\n        [in] IHTMLDOMNode *pNodeSource,\n        [in] VARIANT_BOOL fDeep,\n        [out, retval] IHTMLDOMNode3 **ppNodeDest);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_IE9_PARENTWINDOW)]\n    HRESULT parentWindow([out, retval] IHTMLWindow2 **p);\n\n    [propputref, id(DISPID_IHTMLDOCUMENT7_IE9_BODY)]\n    HRESULT body([in] IHTMLElement *v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_IE9_BODY)]\n    HRESULT body([out, retval] IHTMLElement **p);\n\n    [propget, id(DISPID_IHTMLDOCUMENT7_HEAD)]\n    HRESULT head([out, retval] IHTMLElement **p);\n}\n\n/*****************************************************************************\n *    IHTMLDocument8 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(305107d0-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLDocument8 : IDispatch\n{\n    [propput, id(DISPID_IHTMLDOCUMENT8_ONMSCONTENTZOOM), displaybind, bindable]\n    HRESULT onmscontentzoom([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT8_ONMSCONTENTZOOM), displaybind, bindable]\n    HRESULT onmscontentzoom([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTERDOWN), displaybind, bindable]\n    HRESULT onmspointerdown([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTERDOWN), displaybind, bindable]\n    HRESULT onmspointerdown([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTERMOVE), displaybind, bindable]\n    HRESULT onmspointermove([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTERMOVE), displaybind, bindable]\n    HRESULT onmspointermove([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTERUP), displaybind, bindable]\n    HRESULT onmspointerup([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTERUP), displaybind, bindable]\n    HRESULT onmspointerup([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTEROVER), displaybind, bindable]\n    HRESULT onmspointerover([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTEROVER), displaybind, bindable]\n    HRESULT onmspointerover([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTEROUT), displaybind, bindable]\n    HRESULT onmspointerout([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTEROUT), displaybind, bindable]\n    HRESULT onmspointerout([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTERCANCEL), displaybind, bindable]\n    HRESULT onmspointercancel([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTERCANCEL), displaybind, bindable]\n    HRESULT onmspointercancel([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTERHOVER), displaybind, bindable]\n    HRESULT onmspointerhover([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT8_ONMSPOINTERHOVER), displaybind, bindable]\n    HRESULT onmspointerhover([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT8_ONMSGESTURESTART), displaybind, bindable]\n    HRESULT onmsgesturestart([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT8_ONMSGESTURESTART), displaybind, bindable]\n    HRESULT onmsgesturestart([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT8_ONMSGESTURECHANGE), displaybind, bindable]\n    HRESULT onmsgesturechange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT8_ONMSGESTURECHANGE), displaybind, bindable]\n    HRESULT onmsgesturechange([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT8_ONMSGESTUREEND), displaybind, bindable]\n    HRESULT onmsgestureend([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT8_ONMSGESTUREEND), displaybind, bindable]\n    HRESULT onmsgestureend([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT8_ONMSGESTUREHOLD), displaybind, bindable]\n    HRESULT onmsgesturehold([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT8_ONMSGESTUREHOLD), displaybind, bindable]\n    HRESULT onmsgesturehold([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT8_ONMSGESTURETAP), displaybind, bindable]\n    HRESULT onmsgesturetap([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT8_ONMSGESTURETAP), displaybind, bindable]\n    HRESULT onmsgesturetap([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT8_ONMSGESTUREDOUBLETAP), displaybind, bindable]\n    HRESULT onmsgesturedoubletap([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT8_ONMSGESTUREDOUBLETAP), displaybind, bindable]\n    HRESULT onmsgesturedoubletap([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT8_ONMSINERTIASTART), displaybind, bindable]\n    HRESULT onmsinertiastart([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT8_ONMSINERTIASTART), displaybind, bindable]\n    HRESULT onmsinertiastart([out, retval] VARIANT *p);\n\n    [id(DISPID_IHTMLDOCUMENT8_ELEMENTSFROMPOINT)]\n    HRESULT elementsFromPoint(\n            [in] float x,\n            [in] float y,\n            [out, retval] IHTMLDOMChildrenCollection **elementsHit);\n\n    [id(DISPID_IHTMLDOCUMENT8_ELEMENTSFROMRECT)]\n    HRESULT elementsFromRect(\n            [in] float left,\n            [in] float top,\n            [in] float width,\n            [in] float height,\n            [out, retval] IHTMLDOMChildrenCollection **elementsHit);\n\n    [propput, id(DISPID_IHTMLDOCUMENT8_ONMSMANIPULATIONSTATECHANGED), displaybind, bindable]\n    HRESULT onmsmanipulationstatechanged([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT8_ONMSMANIPULATIONSTATECHANGED), displaybind, bindable]\n    HRESULT onmsmanipulationstatechanged([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLDOCUMENT8_MSCAPSLOCKWARNINGOFF)]\n    HRESULT msCapsLockWarningOff([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT8_MSCAPSLOCKWARNINGOFF)]\n    HRESULT msCapsLockWarningOff([out, retval] VARIANT_BOOL *p);\n}\n\n/*****************************************************************************\n *    IDocumentEvent interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(305104bc-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IDocumentEvent : IDispatch\n{\n    [id(DISPID_IDOCUMENTEVENT_CREATEEVENT)]\n    HRESULT createEvent([in] BSTR eventType, [out, retval] IDOMEvent **ppEvent);\n}\n\n/*****************************************************************************\n *    IDocumentSelector interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(30510462-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IDocumentSelector : IDispatch\n{\n    [id(DISPID_IDOCUMENTSELECTOR_QUERYSELECTOR)]\n    HRESULT querySelector(\n        [in] BSTR v,\n        [out, retval] IHTMLElement **pel);\n\n    [id(DISPID_IDOCUMENTSELECTOR_QUERYSELECTORALL)]\n    HRESULT querySelectorAll(\n        [in] BSTR v,\n        [out, retval] IHTMLDOMChildrenCollection **pel);\n}\n\n/*****************************************************************************\n *    DispHTMLDocument dispinterface\n */\n[\n    hidden,\n    uuid(3050f55f-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLDocument\n{\nproperties:\nmethods:\n    [propget, id(DISPID_IHTMLDOCUMENT_SCRIPT), hidden, nonbrowsable]\n    IDispatch *Script();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ALL)]\n    IHTMLElementCollection *all();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_BODY)]\n    IHTMLElement *body();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ACTIVEELEMENT)]\n    IHTMLElement *activeElement();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_IMAGES)]\n    IHTMLElementCollection *images();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_APPLETS)]\n    IHTMLElementCollection *applets();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_LINKS)]\n    IHTMLElementCollection *links();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_FORMS)]\n    IHTMLElementCollection *forms();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ANCHORS)]\n    IHTMLElementCollection *anchors();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_TITLE)]\n    void title(BSTR v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_TITLE)]\n    BSTR title();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_SCRIPTS)]\n    IHTMLElementCollection *scripts();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_DESIGNMODE), hidden]\n    void designMode(BSTR v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_DESIGNMODE), hidden]\n    BSTR designMode();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_SELECTION)]\n    IHTMLSelectionObject *selection();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_READYSTATE), bindable]\n    BSTR readyState();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_FRAMES)]\n    IHTMLFramesCollection2 *frames();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_EMBEDS)]\n    IHTMLElementCollection *embeds();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_PLUGINS)]\n    IHTMLElementCollection *plugins();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ALINKCOLOR)]\n    void alinkColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ALINKCOLOR)]\n    VARIANT alinkColor();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_BGCOLOR)]\n    void bgColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_BGCOLOR)]\n    VARIANT bgColor();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_FGCOLOR)]\n    void fgColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_FGCOLOR)]\n    VARIANT fgColor();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_LINKCOLOR)]\n    void linkColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_LINKCOLOR)]\n    VARIANT linkColor();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_VLINKCOLOR)]\n    void vlinkColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_VLINKCOLOR)]\n    VARIANT vlinkColor();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_REFERRER)]\n    BSTR referrer();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_LOCATION)]\n    IHTMLLocation *location();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_LASTMODIFIED)]\n    BSTR lastModified();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_URL)]\n    void URL(BSTR v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_URL)]\n    BSTR URL();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_DOMAIN)]\n    void domain(BSTR v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_DOMAIN)]\n    BSTR domain();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_COOKIE)]\n    void cookie(BSTR v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_COOKIE)]\n    BSTR cookie();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_EXPANDO), bindable, hidden]\n    void expando(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_EXPANDO), bindable, hidden]\n    VARIANT_BOOL expando();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_CHARSET), hidden]\n    void charset(BSTR v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_CHARSET), hidden]\n    BSTR charset();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET)]\n    void defaultCharset(BSTR v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET)]\n    BSTR defaultCharset();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_MIMETYPE)]\n    BSTR mimeType();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_FILESIZE)]\n    BSTR fileSize();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_FILECREATEDDATE)]\n    BSTR fileCreatedDate();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_FILEMODIFIEDDATE)]\n    BSTR fileModifiedDate();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_FILEUPDATEDDATE)]\n    BSTR fileUpdatedDate();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_SECURITY)]\n    BSTR security();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_PROTOCOL)]\n    BSTR protocol();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_NAMEPROP)]\n    BSTR nameProp();\n\n    [vararg, id(DISPID_IHTMLDOCUMENT2_WRITE)]\n    void write([in] SAFEARRAY(VARIANT) psarray);\n\n    [vararg, id(DISPID_IHTMLDOCUMENT2_WRITELN)]\n    void writeln([in] SAFEARRAY(VARIANT) psarray);\n\n    [id(DISPID_IHTMLDOCUMENT2_OPEN)]\n    IDispatch *open(\n        [defaultvalue(\"text/html\"), in] BSTR url,\n        [optional, in] VARIANT name,\n        [optional, in] VARIANT features,\n        [optional, in] VARIANT replace);\n\n    [id(DISPID_IHTMLDOCUMENT2_CLOSE)]\n    void close();\n\n    [id(DISPID_IHTMLDOCUMENT2_CLEAR)]\n    void clear();\n\n    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSUPPORTED)]\n    VARIANT_BOOL queryCommandSupported([in] BSTR cmdID);\n\n    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDENABLED)]\n    VARIANT_BOOL queryCommandEnabled([in] BSTR cmdID);\n\n    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSTATE)]\n    VARIANT_BOOL queryCommandState([in] BSTR cmdID);\n\n    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDINDETERM)]\n    VARIANT_BOOL queryCommandIndeterm([in] BSTR cmdID);\n\n    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDTEXT)]\n    BSTR queryCommandText([in] BSTR cmdID);\n\n    [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDVALUE)]\n    VARIANT queryCommandValue([in] BSTR cmdID);\n\n    [id(DISPID_IHTMLDOCUMENT2_EXECCOMMAND)]\n    VARIANT_BOOL execCommand(\n        [in] BSTR cmdID,\n        [defaultvalue(0), in] VARIANT_BOOL showUI,\n        [optional, in] VARIANT value);\n\n    [id(DISPID_IHTMLDOCUMENT2_EXECCOMMANDSHOWHELP)]\n    VARIANT_BOOL execCommandShowHelp([in] BSTR cmdID);\n\n    [id(DISPID_IHTMLDOCUMENT2_CREATEELEMENT)]\n    IHTMLElement *createElement([in] BSTR eTag);\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONHELP), displaybind, bindable]\n    void onhelp(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONHELP), displaybind, bindable]\n    VARIANT onhelp();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONCLICK), displaybind, bindable]\n    void onclick(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONCLICK), displaybind, bindable]\n    VARIANT onclick();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONDBLCLICK), displaybind, bindable]\n    void ondblclick(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONDBLCLICK), displaybind, bindable]\n    VARIANT ondblclick();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYUP), displaybind, bindable]\n    void onkeyup(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYUP), displaybind, bindable]\n    VARIANT onkeyup();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYDOWN), displaybind, bindable]\n    void onkeydown(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYDOWN), displaybind, bindable]\n    VARIANT onkeydown();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYPRESS), displaybind, bindable]\n    void onkeypress(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYPRESS), displaybind, bindable]\n    VARIANT onkeypress();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEUP), displaybind, bindable]\n    void onmouseup(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEUP), displaybind, bindable]\n    VARIANT onmouseup();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN), displaybind, bindable]\n    void onmousedown(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN), displaybind, bindable]\n    VARIANT onmousedown();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE), displaybind, bindable]\n    void onmousemove(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE), displaybind, bindable]\n    VARIANT onmousemove();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOUT), displaybind, bindable]\n    void onmouseout(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOUT), displaybind, bindable]\n    VARIANT onmouseout();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOVER), displaybind, bindable]\n    void onmouseover(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOVER), displaybind, bindable]\n    VARIANT onmouseover();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE), displaybind, bindable]\n    void onreadystatechange(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE), displaybind, bindable]\n    VARIANT onreadystatechange();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE), displaybind, bindable]\n    void onafterupdate(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE), displaybind, bindable]\n    VARIANT onafterupdate();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONROWEXIT), displaybind, bindable]\n    void onrowexit(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONROWEXIT), displaybind, bindable]\n    VARIANT onrowexit();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONROWENTER), displaybind, bindable]\n    void onrowenter(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONROWENTER), displaybind, bindable]\n    VARIANT onrowenter();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONDRAGSTART), displaybind, bindable]\n    void ondragstart(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONDRAGSTART), displaybind, bindable]\n    VARIANT ondragstart();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONSELECTSTART), displaybind, bindable]\n    void onselectstart(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONSELECTSTART), displaybind, bindable]\n    VARIANT onselectstart();\n\n    [id(DISPID_IHTMLDOCUMENT2_ELEMENTFROMPOINT)]\n    IHTMLElement *elementFromPoint(\n        [in] LONG x,\n        [in] LONG y);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_PARENTWINDOW)]\n    IHTMLWindow2 *parentWindow();\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_STYLESHEETS)]\n    IHTMLStyleSheetsCollection *styleSheets();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE), displaybind, bindable]\n    void onbeforeupdate(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE), displaybind, bindable]\n    VARIANT onbeforeupdate();\n\n    [propput, id(DISPID_IHTMLDOCUMENT2_ONERRORUPDATE), displaybind, bindable]\n    void onerrorupdate(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT2_ONERRORUPDATE), displaybind, bindable]\n    VARIANT onerrorupdate();\n\n    [id(DISPID_IHTMLDOCUMENT2_TOSTRING)]\n    BSTR toString();\n\n    [id(DISPID_IHTMLDOCUMENT2_CREATESTYLESHEET)]\n    IHTMLStyleSheet *createStyleSheet(\n        [defaultvalue(\"\"), in] BSTR bstrHref,\n        [defaultvalue(-1), in] LONG lIndex);\n\n    [id(DISPID_IHTMLDOCUMENT3_RELEASECAPTURE)]\n    void releaseCapture();\n\n    [id(DISPID_IHTMLDOCUMENT3_RECALC)]\n    void recalc([defaultvalue(0), in] VARIANT_BOOL fForce);\n\n    [id(DISPID_IHTMLDOCUMENT3_CREATETEXTNODE)]\n    IHTMLDOMNode *createTextNode([in] BSTR text);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_DOCUMENTELEMENT)]\n    IHTMLElement *documentElement();\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_UNIQUEID), hidden]\n    BSTR uniqueID();\n\n    [id(DISPID_IHTMLDOCUMENT3_ATTACHEVENT)]\n    VARIANT_BOOL attachEvent(\n        [in] BSTR event,\n        [in] IDispatch *pDisp);\n\n    [id(DISPID_IHTMLDOCUMENT3_DETACHEVENT)]\n    void detachEvent(\n        [in] BSTR event,\n        [in] IDispatch *pDisp);\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE), displaybind, bindable]\n    void onrowsdelete(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE), displaybind, bindable]\n    VARIANT onrowsdelete();\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED), displaybind, bindable]\n    void onrowsinserted(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED), displaybind, bindable]\n    VARIANT onrowsinserted();\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE), displaybind, bindable]\n    void oncellchange(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE), displaybind, bindable]\n    VARIANT oncellchange();\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED), displaybind, bindable]\n    void ondatasetchanged(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED), displaybind, bindable]\n    VARIANT ondatasetchanged();\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE), displaybind, bindable]\n    void ondataavailable(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE), displaybind, bindable]\n    VARIANT ondataavailable();\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE), displaybind, bindable]\n    void ondatasetcomplete(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE), displaybind, bindable]\n    VARIANT ondatasetcomplete();\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE), displaybind, bindable]\n    void onpropertychange(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE), displaybind, bindable]\n    VARIANT onpropertychange();\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_DIR)]\n    void dir(BSTR v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_DIR)]\n    BSTR dir();\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU), displaybind, bindable]\n    void oncontextmenu(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU), displaybind, bindable]\n    VARIANT oncontextmenu();\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_ONSTOP), displaybind, bindable]\n    void onstop(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_ONSTOP), displaybind, bindable]\n    VARIANT onstop();\n\n    [id(DISPID_IHTMLDOCUMENT3_CREATEDOCUMENTFRAGMENT)]\n    IHTMLDocument2 *createDocumentFragment();\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_PARENTDOCUMENT), hidden, restricted]\n    IHTMLDocument2 *parentDocument();\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted]\n    void enableDownload(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted]\n    VARIANT_BOOL enableDownload();\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted]\n    void baseUrl(BSTR v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted]\n    BSTR baseUrl();\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted]\n    void inheritStyleSheets(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted]\n    VARIANT_BOOL inheritStyleSheets();\n\n    [propput, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS), displaybind, bindable]\n    void onbeforeeditfocus(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS), displaybind, bindable]\n    VARIANT onbeforeeditfocus();\n\n    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYNAME)]\n    IHTMLElementCollection *getElementsByName([in] BSTR v);\n\n    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTBYID)]\n    IHTMLElement *getElementById([in] BSTR v);\n\n    [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYTAGNAME)]\n    IHTMLElementCollection *getElementsByTagName([in] BSTR v);\n\n    [id(DISPID_IHTMLDOCUMENT4_FOCUS)]\n    void focus();\n\n    [id(DISPID_IHTMLDOCUMENT4_HASFOCUS)]\n    VARIANT_BOOL hasFocus();\n\n    [propput, id(DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE), displaybind, bindable]\n    void onselectionchange(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE), displaybind, bindable]\n    VARIANT onselectionchange();\n\n    [propget, id(DISPID_IHTMLDOCUMENT4_NAMESPACES)]\n    IDispatch *namespaces();\n\n    [id(DISPID_IHTMLDOCUMENT4_CREATEDOCUMENTFROMURL)]\n    IHTMLDocument2 *createDocumentFromUrl(\n        [in] BSTR bstrUrl,\n        [in] BSTR bstrOptions);\n\n    [propput, id(DISPID_IHTMLDOCUMENT4_MEDIA)]\n    void media(BSTR v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT4_MEDIA)]\n    BSTR media();\n\n    [id(DISPID_IHTMLDOCUMENT4_CREATEEVENTOBJECT)]\n    IHTMLEventObj *createEventObject([optional, in] VARIANT *pvarEventObject);\n\n    [id(DISPID_IHTMLDOCUMENT4_FIREEVENT)]\n    VARIANT_BOOL fireEvent(\n        [in] BSTR bstrEventName,\n        [optional, in] VARIANT *pvarEventObject);\n\n    [id(DISPID_IHTMLDOCUMENT4_CREATERENDERSTYLE)]\n    IHTMLRenderStyle *createRenderStyle([in] BSTR v);\n\n    [propput, id(DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT), displaybind, bindable]\n    void oncontrolselect(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT), displaybind, bindable]\n    VARIANT oncontrolselect();\n\n    [propget, id(DISPID_IHTMLDOCUMENT4_URLUNENCODED)]\n    BSTR URLUnencoded();\n\n    [propput, id(DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL), displaybind, bindable]\n    void onmousewheel(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL), displaybind, bindable]\n    VARIANT onmousewheel();\n\n    [propget, id(DISPID_IHTMLDOCUMENT5_DOCTYPE)]\n    IHTMLDOMNode *doctype();\n\n    [propget, id(DISPID_IHTMLDOCUMENT5_IMPLEMENTATION)]\n    IHTMLDOMImplementation *implementation();\n\n    [id(DISPID_IHTMLDOCUMENT5_CREATEATTRIBUTE)]\n    IHTMLDOMAttribute *createAttribute([in] BSTR bstrattrName);\n\n    [id(DISPID_IHTMLDOCUMENT5_CREATECOMMENT)]\n    IHTMLDOMNode *createComment([in] BSTR bstrdata);\n\n    [propput, id(DISPID_IHTMLDOCUMENT5_ONFOCUSIN), displaybind, bindable]\n    void onfocusin(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT5_ONFOCUSIN), displaybind, bindable]\n    VARIANT onfocusin();\n\n    [propput, id(DISPID_IHTMLDOCUMENT5_ONFOCUSOUT), displaybind, bindable]\n    void onfocusout(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT5_ONFOCUSOUT), displaybind, bindable]\n    VARIANT onfocusout();\n\n    [propput, id(DISPID_IHTMLDOCUMENT5_ONACTIVATE), displaybind, bindable]\n    void onactivate(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT5_ONACTIVATE), displaybind, bindable]\n    VARIANT onactivate();\n\n    [propput, id(DISPID_IHTMLDOCUMENT5_ONDEACTIVATE), displaybind, bindable]\n    void ondeactivate(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT5_ONDEACTIVATE), displaybind, bindable]\n    VARIANT ondeactivate();\n\n    [propput, id(DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE), displaybind, bindable]\n    void onbeforeactivate(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE), displaybind, bindable]\n    VARIANT onbeforeactivate();\n\n    [propput, id(DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE), displaybind, bindable]\n    void onbeforedeactivate(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE), displaybind, bindable]\n    VARIANT onbeforedeactivate();\n\n    [propget, id(DISPID_IHTMLDOCUMENT5_COMPATMODE)]\n    BSTR compatMode();\n\n    [propget, id(DISPID_IHTMLDOCUMENT6_COMPATIBLE)]\n    IHTMLDocumentCompatibleInfoCollection *compatible();\n\n    [propget, id(DISPID_IHTMLDOCUMENT6_DOCUMENTMODE)]\n    VARIANT documentMode();\n\n    [propput, id(DISPID_IHTMLDOCUMENT6_ONSTORAGE), displaybind, bindable]\n    void onstorage(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT6_ONSTORAGE), displaybind, bindable]\n    VARIANT onstorage();\n\n    [propput, id(DISPID_IHTMLDOCUMENT6_ONSTORAGECOMMIT), displaybind, bindable]\n    void onstoragecommit(VARIANT v);\n\n    [propget, id(DISPID_IHTMLDOCUMENT6_ONSTORAGECOMMIT), displaybind, bindable]\n    VARIANT onstoragecommit();\n\n    [id(DISPID_IHTMLDOCUMENT6_IE8_GETELEMENTBYID)]\n    IHTMLElement2 *ie8_getElementById([in] BSTR bstrId);\n\n    [id(DISPID_IHTMLDOCUMENT6_UPDATESETTINGS)]\n    void updateSettings();\n\n    WINE_HTMLDOMNODE_DISPINTERFACE_DECL;\n\n    [id(DISPID_IDOCUMENTSELECTOR_QUERYSELECTOR)]\n    IHTMLElement *querySelector([in] BSTR v);\n\n    [id(DISPID_IDOCUMENTSELECTOR_QUERYSELECTORALL)]\n    IHTMLDOMChildrenCollection *querySelectorAll([in] BSTR v);\n}\n\n/*****************************************************************************\n *    HTMLDocument coclass\n */\n[\n    uuid(25336920-03F9-11cf-8FD0-00AA00686F13)\n]\ncoclass HTMLDocument\n{\n    [default]         dispinterface DispHTMLDocument;\n    [source, default] dispinterface HTMLDocumentEvents;\n    [source]          dispinterface HTMLDocumentEvents2;\n                      interface IHTMLDocument2;\n                      interface IHTMLDocument3;\n                      interface IHTMLDocument4;\n                      interface IHTMLDocument5;\n                      interface IHTMLDocument6;\n                      interface IHTMLDOMNode;\n                      interface IHTMLDOMNode2;\n                      interface IDocumentEvent;\n}\n\n/*****************************************************************************\n *    DWebBridgeEvents dispinterface\n */\n[\n    hidden,\n    uuid(a6d897ff-0a95-11d1-b0ba-006008166e11)\n]\ndispinterface DWebBridgeEvents\n{\nproperties:\nmethods:\n    [id(DISPID_DWEBBRIDGEEVENTS_ONSCRIPTLETEVENT)]\n    void onscriptletevent([in] BSTR name,[in] VARIANT eventData);\n\n    [id(DISPID_DWEBBRIDGEEVENTS_ONREADYSTATECHANGE)]\n    void onreadystatechange();\n\n    [id(DISPID_DWEBBRIDGEEVENTS_ONCLICK)]\n    VARIANT_BOOL onclick();\n\n    [id(DISPID_DWEBBRIDGEEVENTS_ONDBLCLICK)]\n    VARIANT_BOOL ondblclick();\n\n    [id(DISPID_DWEBBRIDGEEVENTS_ONKEYDOWN)]\n    void onkeydown();\n\n    [id(DISPID_DWEBBRIDGEEVENTS_ONKEYUP)]\n    void onkeyup();\n\n    [id(DISPID_DWEBBRIDGEEVENTS_ONKEYPRESS)]\n    VARIANT_BOOL onkeypress();\n\n    [id(DISPID_DWEBBRIDGEEVENTS_ONMOUSEDOWN)]\n    void onmousedown();\n\n    [id(DISPID_DWEBBRIDGEEVENTS_ONMOUSEMOVE)]\n    void onmousemove();\n\n    [id(DISPID_DWEBBRIDGEEVENTS_ONMOUSEUP)]\n    void onmouseup();\n}\n\n/*****************************************************************************\n *    IWebBridge interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(ae24fdad-03c6-11d1-8b76-0080c744f389)\n]\ninterface IWebBridge : IDispatch\n{\n    [propput, id(DISPID_IWEBBRIDGE_URL)]\n    HRESULT URL([in] BSTR v);\n\n    [propget, id(DISPID_IWEBBRIDGE_URL)]\n    HRESULT URL([retval, out] BSTR * p);\n\n    [propput, id(DISPID_IWEBBRIDGE_SCROLLBAR)]\n    HRESULT Scrollbar([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IWEBBRIDGE_SCROLLBAR)]\n    HRESULT Scrollbar([retval, out] VARIANT_BOOL * p);\n\n    [propput, id(DISPID_IWEBBRIDGE_EMBED)]\n    HRESULT embed([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IWEBBRIDGE_EMBED)]\n    HRESULT embed([retval, out] VARIANT_BOOL * p);\n\n    [propget, id(DISPID_IWEBBRIDGE_EVENT)]\n    HRESULT event([retval, out] IDispatch* * p);\n\n    [propget, id(DISPID_IWEBBRIDGE_READYSTATE)]\n    HRESULT readyState([retval, out] long * p);\n\n    [id(DISPID_IWEBBRIDGE_ABOUTBOX)]\n    HRESULT AboutBox();\n}\n\n/*****************************************************************************\n *    Scriptlet coclass\n */\n[\n    control,\n    helpstring(\"Microsoft Scriptlet Component\"),\n    progid(\"ScriptBridge.ScriptBridge.1\"),\n    vi_progid(\"ScriptBridge.ScriptBridge\"),\n    uuid(ae24fdae-03c6-11d1-8b76-0080c744f389)\n]\ncoclass Scriptlet\n{\n    [default]           interface IWebBridge;\n    [source, default]   dispinterface DWebBridgeEvents;\n}\n\n/*****************************************************************************\n *    IHTMLEmbedElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f25f-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLEmbedElement : IDispatch\n{\n    [propput, id(DISPID_IHTMLEMBEDELEMENT_HIDDEN)]\n    HRESULT hidden([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLEMBEDELEMENT_HIDDEN)]\n    HRESULT hidden([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLEMBEDELEMENT_PALETTE)]\n    HRESULT palette([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLEMBEDELEMENT_PLUGINSPAGE)]\n    HRESULT pluginspage([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLEMBEDELEMENT_SRC)]\n    HRESULT src([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLEMBEDELEMENT_SRC)]\n    HRESULT src([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLEMBEDELEMENT_UNITS)]\n    HRESULT units([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLEMBEDELEMENT_UNITS)]\n    HRESULT units([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLEMBEDELEMENT_NAME), displaybind, bindable]\n    HRESULT name([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLEMBEDELEMENT_NAME), displaybind, bindable]\n    HRESULT name([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLEMBEDELEMENT_WIDTH)]\n    HRESULT width([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLEMBEDELEMENT_WIDTH)]\n    HRESULT width([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLEMBEDELEMENT_HEIGHT)]\n    HRESULT height([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLEMBEDELEMENT_HEIGHT)]\n    HRESULT height([retval, out] VARIANT *p);\n}\n\n/*****************************************************************************\n *    DispHTMLEmbedElement dispinterface\n */\n[\n    hidden,\n    uuid(3050f52e-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLEmbed\n{\nproperties:\nmethods:\n    WINE_HTMLELEMENT_DISPINTERFACE_DECL;\n\n    [propput, id(DISPID_IHTMLEMBEDELEMENT_HIDDEN)]\n    void hidden(BSTR v);\n\n    [propget, id(DISPID_IHTMLEMBEDELEMENT_HIDDEN)]\n    BSTR hidden();\n\n    [propget, id(DISPID_IHTMLEMBEDELEMENT_PALETTE)]\n    BSTR palette();\n\n    [propget, id(DISPID_IHTMLEMBEDELEMENT_PLUGINSPAGE)]\n    BSTR pluginspage();\n\n    [propput, id(DISPID_IHTMLEMBEDELEMENT_SRC)]\n    void src(BSTR v);\n\n    [propget, id(DISPID_IHTMLEMBEDELEMENT_SRC)]\n    BSTR src();\n\n    [propput, id(DISPID_IHTMLEMBEDELEMENT_UNITS)]\n    void units(BSTR v);\n\n    [propget, id(DISPID_IHTMLEMBEDELEMENT_UNITS)]\n    BSTR units();\n\n    [propput, id(DISPID_IHTMLEMBEDELEMENT_NAME), displaybind, bindable]\n    void name(BSTR v);\n\n    [propget, id(DISPID_IHTMLEMBEDELEMENT_NAME), displaybind, bindable]\n    BSTR name();\n\n    [propput, id(DISPID_IHTMLEMBEDELEMENT_WIDTH)]\n    void width(VARIANT v);\n\n    [propget, id(DISPID_IHTMLEMBEDELEMENT_WIDTH)]\n    VARIANT width();\n\n    [propput, id(DISPID_IHTMLEMBEDELEMENT_HEIGHT)]\n    void height(VARIANT v);\n\n    [propget, id(DISPID_IHTMLEMBEDELEMENT_HEIGHT)]\n    VARIANT height();\n\n    [propput, id(DISPID_IHTMLEMBEDELEMENT2_IE8_SRC)]\n    void ie8_src(BSTR v);\n\n    [propget, id(DISPID_IHTMLEMBEDELEMENT2_IE8_SRC)]\n    BSTR ie8_src();\n\n    [propget, id(DISPID_IHTMLEMBEDELEMENT2_IE8_PLUGINSPAGE)]\n    BSTR ie8_pluginspage();\n}\n\n/*****************************************************************************\n *    HTMLEmbed coclass\n */\n[\n    noncreatable,\n    uuid(3050f25d-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLEmbed\n{\n    [default]         dispinterface DispHTMLEmbed;\n /* [source, default] dispinterface HTMLControlElementEvents; */\n /* [source]          dispinterface HTMLControlElementEvents2; */\n    WINE_HTMLELEMENT_INTERFACES;\n    interface IHTMLControlElement;\n    interface IHTMLEmbedElement;\n /* interface IHTMLEmbedElement2; */\n /* interface IGetSVGDocument; */\n}\n\n/*****************************************************************************\n *    IHTMLCommentElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f20c-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLCommentElement : IDispatch\n{\n    [propput, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable]\n    HRESULT text([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable]\n    HRESULT text([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable]\n    HRESULT atomic([in] LONG v);\n\n    [propget, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable]\n    HRESULT atomic([out, retval] LONG *p);\n}\n\n/*****************************************************************************\n *    IHTMLCommentElement2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f813-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLCommentElement2 : IDispatch\n{\n    [propput, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)]\n    HRESULT data([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)]\n    HRESULT data([out, retval] BSTR *p);\n\n    [propget, id(DISPID_IHTMLCOMMENTELEMENT2_LENGTH)]\n    HRESULT length([out, retval] LONG *p);\n\n    [id(DISPID_IHTMLCOMMENTELEMENT2_SUBSTRINGDATA)]\n    HRESULT substringData(\n            [in] LONG offset,\n            [in] LONG Count,\n            [out, retval] BSTR *pbstrsubString);\n\n    [id(DISPID_IHTMLCOMMENTELEMENT2_APPENDDATA)]\n    HRESULT appendData([in] BSTR bstrstring);\n\n    [id(DISPID_IHTMLCOMMENTELEMENT2_INSERTDATA)]\n    HRESULT insertData(\n            [in] LONG offset,\n            [in] BSTR bstrstring);\n\n    [id(DISPID_IHTMLCOMMENTELEMENT2_DELETEDATA)]\n    HRESULT deleteData(\n            [in] LONG offset,\n            [in] LONG Count);\n\n    [id(DISPID_IHTMLCOMMENTELEMENT2_REPLACEDATA)]\n    HRESULT replaceData(\n            [in] LONG offset,\n            [in] LONG Count,\n            [in] BSTR bstrstring);\n}\n\n/*****************************************************************************\n *    DispHTMLCommentElement dispinterface\n */\n[\n    hidden,\n    uuid(3050f50a-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLCommentElement\n{\nproperties:\nmethods:\n    WINE_HTMLELEMENT_DISPINTERFACE_DECL;\n\n    [propput, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable]\n    void text(BSTR v);\n\n    [propget, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable]\n    BSTR text();\n\n    [propput, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable]\n    void atomic(LONG v);\n\n    [propget, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable]\n    LONG atomic();\n\n    [propput, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)]\n    void data(BSTR v);\n\n    [propget, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)]\n    BSTR data();\n\n    [propget, id(DISPID_IHTMLCOMMENTELEMENT2_LENGTH)]\n    LONG length();\n\n    [id(DISPID_IHTMLCOMMENTELEMENT2_SUBSTRINGDATA)]\n    BSTR substringData(\n            [in] LONG offset,\n            [in] LONG Count);\n\n    [id(DISPID_IHTMLCOMMENTELEMENT2_APPENDDATA)]\n    void appendData([in] BSTR bstrstring);\n\n    [id(DISPID_IHTMLCOMMENTELEMENT2_INSERTDATA)]\n     void insertData(\n            [in] LONG offset,\n            [in] BSTR bstrstring);\n\n    [id(DISPID_IHTMLCOMMENTELEMENT2_DELETEDATA)]\n    void deleteData(\n            [in] LONG offset,\n            [in] LONG Count);\n\n    [id(DISPID_IHTMLCOMMENTELEMENT2_REPLACEDATA)]\n    void replaceData(\n            [in] LONG offset,\n            [in] LONG Count,\n            [in] BSTR bstrstring);\n}\n\n[\n    hidden,\n    uuid(3050f60f-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface HTMLElementEvents2\n{\nproperties:\nmethods:\n    [id(DISPID_HTMLELEMENTEVENTS2_ONHELP)]\n    VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONCLICK)]\n    VARIANT_BOOL onclick([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK)]\n    VARIANT_BOOL ondblclick([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS)]\n    VARIANT_BOOL onkeypress([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN)]\n    void onkeydown([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYUP)]\n    void onkeyup([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT)]\n    void onmouseout([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER)]\n    void onmouseover([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE)]\n    void onmousemove([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN)]\n    void onmousedown([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP)]\n    void onmouseup([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART)]\n    VARIANT_BOOL onselectstart([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE)]\n    void onfilterchange([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART)]\n    VARIANT_BOOL ondragstart([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE)]\n    VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE)]\n    void onafterupdate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE)]\n    VARIANT_BOOL onerrorupdate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONROWEXIT)]\n    VARIANT_BOOL onrowexit([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONROWENTER)]\n    void onrowenter([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED)]\n    void ondatasetchanged([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE)]\n    void ondataavailable([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE)]\n    void ondatasetcomplete([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE)]\n    void onlosecapture([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE)]\n    void onpropertychange([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONSCROLL)]\n    void onscroll([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUS)]\n    void onfocus([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBLUR)]\n    void onblur([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZE)]\n    void onresize([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAG)]\n    VARIANT_BOOL ondrag([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGEND)]\n    void ondragend([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER)]\n    VARIANT_BOOL ondragenter([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER)]\n    VARIANT_BOOL ondragover([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE)]\n    void ondragleave([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDROP)]\n    VARIANT_BOOL ondrop([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT)]\n    VARIANT_BOOL onbeforecut([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONCUT)]\n    VARIANT_BOOL oncut([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY)]\n    VARIANT_BOOL onbeforecopy([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONCOPY)]\n    VARIANT_BOOL oncopy([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE)]\n    VARIANT_BOOL onbeforepaste([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONPASTE)]\n    VARIANT_BOOL onpaste([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU)]\n    VARIANT_BOOL oncontextmenu([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE)]\n    void onrowsdelete([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED)]\n    void onrowsinserted([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE)]\n    void oncellchange([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE)]\n    void onreadystatechange([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE)]\n    void onlayoutcomplete([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONPAGE)]\n    void onpage([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER)]\n    void onmouseenter([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE)]\n    void onmouseleave([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONACTIVATE)]\n    void onactivate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE)]\n    void ondeactivate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE)]\n    VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE)]\n    VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN)]\n    void onfocusin([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT)]\n    void onfocusout([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVE)]\n    void onmove([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT)]\n    VARIANT_BOOL oncontrolselect([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVESTART)]\n    VARIANT_BOOL onmovestart([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVEEND)]\n    void onmoveend([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART)]\n    VARIANT_BOOL onresizestart([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND)]\n    void onresizeend([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL)]\n    VARIANT_BOOL onmousewheel([in] IHTMLEventObj* pEvtObj);\n}\n\n[\n    hidden,\n    uuid(3050f33c-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface HTMLElementEvents\n{\nproperties:\nmethods:\n    [id(DISPID_HTMLELEMENTEVENTS_ONHELP)]\n    VARIANT_BOOL onhelp();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONCLICK)]\n    VARIANT_BOOL onclick();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDBLCLICK)]\n    VARIANT_BOOL ondblclick();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONKEYPRESS)]\n    VARIANT_BOOL onkeypress();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONKEYDOWN)]\n    void onkeydown();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONKEYUP)]\n    void onkeyup();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT)]\n    void onmouseout();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER)]\n    void onmouseover();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE)]\n    void onmousemove();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN)]\n    void onmousedown();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP)]\n    void onmouseup();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONSELECTSTART)]\n    VARIANT_BOOL onselectstart();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE)]\n    void onfilterchange();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART)]\n    VARIANT_BOOL ondragstart();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE)]\n    VARIANT_BOOL onbeforeupdate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE)]\n    void onafterupdate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE)]\n    VARIANT_BOOL onerrorupdate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONROWEXIT)]\n    VARIANT_BOOL onrowexit();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONROWENTER)]\n    void onrowenter();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED)]\n    void ondatasetchanged();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE)]\n    void ondataavailable();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE)]\n    void ondatasetcomplete();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE)]\n    void onlosecapture();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE)]\n    void onpropertychange();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONSCROLL)]\n    void onscroll();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUS)]\n    void onfocus();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBLUR)]\n    void onblur();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZE)]\n    void onresize();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDRAG)]\n    VARIANT_BOOL ondrag();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGEND)]\n    void ondragend();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGENTER)]\n    VARIANT_BOOL ondragenter();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGOVER)]\n    VARIANT_BOOL ondragover();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE)]\n    void ondragleave();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDROP)]\n    VARIANT_BOOL ondrop();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECUT)]\n    VARIANT_BOOL onbeforecut();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONCUT)]\n    VARIANT_BOOL oncut();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY)]\n    VARIANT_BOOL onbeforecopy();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONCOPY)]\n    VARIANT_BOOL oncopy();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE)]\n    VARIANT_BOOL onbeforepaste();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONPASTE)]\n    VARIANT_BOOL onpaste();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU)]\n    VARIANT_BOOL oncontextmenu();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONROWSDELETE)]\n    void onrowsdelete();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED)]\n    void onrowsinserted();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE)]\n    void oncellchange();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE)]\n    void onreadystatechange();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS)]\n    void onbeforeeditfocus();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE)]\n    void onlayoutcomplete();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONPAGE)]\n    void onpage();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE)]\n    VARIANT_BOOL onbeforedeactivate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE)]\n    VARIANT_BOOL onbeforeactivate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOVE)]\n    void onmove();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT)]\n    VARIANT_BOOL oncontrolselect();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOVESTART)]\n    VARIANT_BOOL onmovestart();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOVEEND)]\n    void onmoveend();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZESTART)]\n    VARIANT_BOOL onresizestart();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZEEND)]\n    void onresizeend();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER)]\n    void onmouseenter();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE)]\n    void onmouseleave();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL)]\n    VARIANT_BOOL onmousewheel();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONACTIVATE)]\n    void onactivate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE)]\n    void ondeactivate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSIN)]\n    void onfocusin();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT)]\n    void onfocusout();\n}\n\n[\n    noncreatable,\n    uuid(3050f317-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLCommentElement\n{\n    [default]           dispinterface DispHTMLCommentElement;\n    [source, default]   dispinterface HTMLElementEvents;\n    [source]            dispinterface HTMLElementEvents2;\n    WINE_HTMLELEMENT_INTERFACES;\n    interface IHTMLCommentElement;\n    interface IHTMLCommentElement2;\n /* interface IHTMLCommentElement3; */\n}\n\n/*****************************************************************************\n *    HTMLTableEvents dispinterface\n */\n[\n    hidden,\n    uuid(3050f407-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface HTMLTableEvents\n{\nproperties:\nmethods:\n    [id(DISPID_HTMLELEMENTEVENTS_ONHELP)]\n    VARIANT_BOOL onhelp();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONCLICK)]\n    VARIANT_BOOL onclick();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDBLCLICK)]\n    VARIANT_BOOL ondblclick();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONKEYPRESS)]\n    VARIANT_BOOL onkeypress();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONKEYDOWN)]\n    void onkeydown();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONKEYUP)]\n    void onkeyup();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT)]\n    void onmouseout();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER)]\n    void onmouseover();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE)]\n    void onmousemove();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN)]\n    void onmousedown();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP)]\n    void onmouseup();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONSELECTSTART)]\n    VARIANT_BOOL onselectstart();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE)]\n    void onfilterchange();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART)]\n    VARIANT_BOOL ondragstart();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE)]\n    VARIANT_BOOL onbeforeupdate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE)]\n    void onafterupdate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE)]\n    VARIANT_BOOL onerrorupdate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONROWEXIT)]\n    VARIANT_BOOL onrowexit();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONROWENTER)]\n    void onrowenter();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED)]\n    void ondatasetchanged();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE)]\n    void ondataavailable();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE)]\n    void ondatasetcomplete();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE)]\n    void onlosecapture();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE)]\n    void onpropertychange();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONSCROLL)]\n    void onscroll();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUS)]\n    void onfocus();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBLUR)]\n    void onblur();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZE)]\n    void onresize();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDRAG)]\n    VARIANT_BOOL ondrag();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGEND)]\n    void ondragend();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGENTER)]\n    VARIANT_BOOL ondragenter();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGOVER)]\n    VARIANT_BOOL ondragover();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE)]\n    void ondragleave();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDROP)]\n    VARIANT_BOOL ondrop();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECUT)]\n    VARIANT_BOOL onbeforecut();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONCUT)]\n    VARIANT_BOOL oncut();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY)]\n    VARIANT_BOOL onbeforecopy();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONCOPY)]\n    VARIANT_BOOL oncopy();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE)]\n    VARIANT_BOOL onbeforepaste();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONPASTE)]\n    VARIANT_BOOL onpaste();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU)]\n    VARIANT_BOOL oncontextmenu();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONROWSDELETE)]\n    void onrowsdelete();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED)]\n    void onrowsinserted();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE)]\n    void oncellchange();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE)]\n    void onreadystatechange();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS)]\n    void onbeforeeditfocus();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE)]\n    void onlayoutcomplete();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONPAGE)]\n    void onpage();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE)]\n    VARIANT_BOOL onbeforedeactivate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE)]\n    VARIANT_BOOL onbeforeactivate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOVE)]\n    void onmove();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT)]\n    VARIANT_BOOL oncontrolselect();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOVESTART)]\n    VARIANT_BOOL onmovestart();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOVEEND)]\n    void onmoveend();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZESTART)]\n    VARIANT_BOOL onresizestart();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONRESIZEEND)]\n    void onresizeend();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER)]\n    void onmouseenter();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE)]\n    void onmouseleave();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL)]\n    VARIANT_BOOL onmousewheel();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONACTIVATE)]\n    void onactivate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE)]\n    void ondeactivate();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSIN)]\n    void onfocusin();\n\n    [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT)]\n    void onfocusout();\n}\n\n[\n    hidden,\n    uuid(3050f623-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface HTMLTableEvents2\n{\nproperties:\nmethods:\n    [id(DISPID_HTMLELEMENTEVENTS2_ONHELP)]\n    VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONCLICK)]\n    VARIANT_BOOL onclick([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK)]\n    VARIANT_BOOL ondblclick([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS)]\n    VARIANT_BOOL onkeypress([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN)]\n    void onkeydown([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONKEYUP)]\n    void onkeyup([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT)]\n    void onmouseout([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER)]\n    void onmouseover([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE)]\n    void onmousemove([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN)]\n    void onmousedown([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP)]\n    void onmouseup([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART)]\n    VARIANT_BOOL onselectstart([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE)]\n    void onfilterchange([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART)]\n    VARIANT_BOOL ondragstart([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE)]\n    VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE)]\n    void onafterupdate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE)]\n    VARIANT_BOOL onerrorupdate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONROWEXIT)]\n    VARIANT_BOOL onrowexit([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONROWENTER)]\n    void onrowenter([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED)]\n    void ondatasetchanged([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE)]\n    void ondataavailable([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE)]\n    void ondatasetcomplete([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE)]\n    void onlosecapture([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE)]\n    void onpropertychange([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONSCROLL)]\n    void onscroll([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUS)]\n    void onfocus([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBLUR)]\n    void onblur([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZE)]\n    void onresize([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAG)]\n    VARIANT_BOOL ondrag([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGEND)]\n    void ondragend([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER)]\n    VARIANT_BOOL ondragenter([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER)]\n    VARIANT_BOOL ondragover([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE)]\n    void ondragleave([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDROP)]\n    VARIANT_BOOL ondrop([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT)]\n    VARIANT_BOOL onbeforecut([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONCUT)]\n    VARIANT_BOOL oncut([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY)]\n    VARIANT_BOOL onbeforecopy([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONCOPY)]\n    VARIANT_BOOL oncopy([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE)]\n    VARIANT_BOOL onbeforepaste([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONPASTE)]\n    VARIANT_BOOL onpaste([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU)]\n    VARIANT_BOOL oncontextmenu([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE)]\n    void onrowsdelete([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED)]\n    void onrowsinserted([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE)]\n    void oncellchange([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE)]\n    void onreadystatechange([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE)]\n    void onlayoutcomplete([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONPAGE)]\n    void onpage([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER)]\n    void onmouseenter([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE)]\n    void onmouseleave([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONACTIVATE)]\n    void onactivate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE)]\n    void ondeactivate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE)]\n    VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE)]\n    VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN)]\n    void onfocusin([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT)]\n    void onfocusout([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVE)]\n    void onmove([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT)]\n    VARIANT_BOOL oncontrolselect([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVESTART)]\n    VARIANT_BOOL onmovestart([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOVEEND)]\n    void onmoveend([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART)]\n    VARIANT_BOOL onresizestart([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND)]\n    void onresizeend([in] IHTMLEventObj* pEvtObj);\n\n    [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL)]\n    VARIANT_BOOL onmousewheel([in] IHTMLEventObj* pEvtObj);\n}\n\n/*****************************************************************************\n *    IHTMLTableCaption interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f2eb-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLTableCaption : IDispatch\n{\n    [propput, id(DISPID_IHTMLTABLECAPTION_ALIGN)]\n    HRESULT align([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLECAPTION_ALIGN)]\n    HRESULT align([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLTABLECAPTION_VALIGN)]\n    HRESULT vAlign([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLECAPTION_VALIGN)]\n    HRESULT vAlign([retval, out] BSTR *p);\n}\n\ninterface IHTMLTableSection;\n\n/*****************************************************************************\n *    IHTMLTable interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f21e-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLTable : IDispatch\n{\n    [propput, id(DISPID_IHTMLTABLE_COLS)]\n    HRESULT cols([in] LONG v);\n\n    [propget, id(DISPID_IHTMLTABLE_COLS)]\n    HRESULT cols([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLTABLE_BORDER)]\n    HRESULT border([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLE_BORDER)]\n    HRESULT border([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLTABLE_FRAME)]\n    HRESULT frame([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLE_FRAME)]\n    HRESULT frame([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLTABLE_RULES)]\n    HRESULT rules([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLE_RULES)]\n    HRESULT rules([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLTABLE_CELLSPACING)]\n    HRESULT cellSpacing([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLE_CELLSPACING)]\n    HRESULT cellSpacing([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLTABLE_CELLPADDING)]\n    HRESULT cellPadding([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLE_CELLPADDING)]\n    HRESULT cellPadding([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLTABLE_BACKGROUND)]\n    HRESULT background([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLE_BACKGROUND)]\n    HRESULT background([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLTABLE_BGCOLOR)]\n    HRESULT bgColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLE_BGCOLOR)]\n    HRESULT bgColor([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLTABLE_BORDERCOLOR)]\n    HRESULT borderColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLE_BORDERCOLOR)]\n    HRESULT borderColor([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLTABLE_BORDERCOLORLIGHT)]\n    HRESULT borderColorLight([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLE_BORDERCOLORLIGHT)]\n    HRESULT borderColorLight([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLTABLE_BORDERCOLORDARK)]\n    HRESULT borderColorDark([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLE_BORDERCOLORDARK)]\n    HRESULT borderColorDark([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLTABLE_ALIGN)]\n    HRESULT align([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLE_ALIGN)]\n    HRESULT align([retval, out] BSTR * p);\n\n    [id(DISPID_IHTMLTABLE_REFRESH)]\n    HRESULT refresh();\n\n    [propget, id(DISPID_IHTMLTABLE_ROWS)]\n    HRESULT rows([retval, out] IHTMLElementCollection **p);\n\n    [propput, id(DISPID_IHTMLTABLE_WIDTH)]\n    HRESULT width([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLE_WIDTH)]\n    HRESULT width([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLTABLE_HEIGHT)]\n    HRESULT height([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLE_HEIGHT)]\n    HRESULT height([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLTABLE_DATAPAGESIZE)]\n    HRESULT dataPageSize([in] LONG v);\n\n    [propget, id(DISPID_IHTMLTABLE_DATAPAGESIZE)]\n    HRESULT dataPageSize([retval, out] LONG *p);\n\n    [id(DISPID_IHTMLTABLE_NEXTPAGE)]\n    HRESULT nextPage();\n\n    [id(DISPID_IHTMLTABLE_PREVIOUSPAGE)]\n    HRESULT previousPage();\n\n    [propget, id(DISPID_IHTMLTABLE_THEAD)]\n    HRESULT tHead([retval, out] IHTMLTableSection **p);\n\n    [propget, id(DISPID_IHTMLTABLE_TFOOT)]\n    HRESULT tFoot([retval, out] IHTMLTableSection **p);\n\n    [propget, id(DISPID_IHTMLTABLE_TBODIES)]\n    HRESULT tBodies([retval, out] IHTMLElementCollection **p);\n\n    [propget, id(DISPID_IHTMLTABLE_CAPTION)]\n    HRESULT caption([retval, out] IHTMLTableCaption **p);\n\n    [id(DISPID_IHTMLTABLE_CREATETHEAD)]\n    HRESULT createTHead([retval, out] IDispatch **head);\n\n    [id(DISPID_IHTMLTABLE_DELETETHEAD)]\n    HRESULT deleteTHead();\n\n    [id(DISPID_IHTMLTABLE_CREATETFOOT)]\n    HRESULT createTFoot([retval, out] IDispatch **foot);\n\n    [id(DISPID_IHTMLTABLE_DELETETFOOT)]\n    HRESULT deleteTFoot();\n\n    [id(DISPID_IHTMLTABLE_CREATECAPTION)]\n    HRESULT createCaption([retval, out] IHTMLTableCaption **caption);\n\n    [id(DISPID_IHTMLTABLE_DELETECAPTION)]\n    HRESULT deleteCaption();\n\n    [id(DISPID_IHTMLTABLE_INSERTROW)]\n    HRESULT insertRow(\n            [defaultvalue(-1), in] LONG index,\n            [retval, out] IDispatch **row);\n\n    [id(DISPID_IHTMLTABLE_DELETEROW)]\n    HRESULT deleteRow([defaultvalue(-1), in] LONG index);\n\n    [propget, id(DISPID_IHTMLTABLE_READYSTATE)]\n    HRESULT readyState([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLTABLE_ONREADYSTATECHANGE), displaybind, bindable]\n    HRESULT onreadystatechange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLE_ONREADYSTATECHANGE), displaybind, bindable]\n    HRESULT onreadystatechange([retval, out] VARIANT *p);\n}\n\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f4ad-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLTable2 : IDispatch\n{\n    [id(DISPID_IHTMLTABLE2_FIRSTPAGE)]\n    HRESULT firstPage();\n\n    [id(DISPID_IHTMLTABLE2_LASTPAGE)]\n    HRESULT lastPage();\n\n    [propget, id(DISPID_IHTMLTABLE2_CELLS)]\n    HRESULT cells([retval, out] IHTMLElementCollection* * p);\n\n    [id(DISPID_IHTMLTABLE2_MOVEROW)]\n    HRESULT moveRow([defaultvalue(-1), in] LONG indexFrom,\n        [defaultvalue(-1), in] LONG indexTo,\n        [retval, out] IDispatch** row);\n}\n\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f829-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLTable3 : IDispatch\n{\n    [propput, id(DISPID_IHTMLTABLE3_SUMMARY), displaybind, bindable]\n    HRESULT summary([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLE3_SUMMARY), displaybind, bindable]\n    HRESULT summary([retval, out] BSTR * p);\n}\n\n[\n    noncreatable,\n    uuid(3050f26b-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLTable\n{\n    [default]           dispinterface DispHTMLTable;\n    [source, default]   dispinterface HTMLTableEvents;\n    [source]            dispinterface HTMLTableEvents2;\n    WINE_HTMLDATAELEMENT_INTERFACES;\n    interface IHTMLControlElement;\n    interface IHTMLTable;\n    interface IHTMLTable2;\n    interface IHTMLTable3;\n /* interface IHTMLTable4; */\n}\n\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f23b-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLTableSection : IDispatch\n{\n    [propput, id(DISPID_IHTMLTABLESECTION_ALIGN)]\n    HRESULT align([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLESECTION_ALIGN)]\n    HRESULT align([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLTABLESECTION_VALIGN)]\n    HRESULT vAlign([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLESECTION_VALIGN)]\n    HRESULT vAlign([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLTABLESECTION_BGCOLOR)]\n    HRESULT bgColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLESECTION_BGCOLOR)]\n    HRESULT bgColor([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLTABLESECTION_ROWS)]\n    HRESULT rows([retval, out] IHTMLElementCollection **p);\n\n    [id(DISPID_IHTMLTABLESECTION_INSERTROW)]\n    HRESULT insertRow(\n            [defaultvalue(-1), in] LONG index,\n            [retval, out] IDispatch **row);\n\n    [id(DISPID_IHTMLTABLESECTION_DELETEROW)]\n    HRESULT deleteRow([defaultvalue(-1), in] LONG index);\n}\n\n/*****************************************************************************\n *    IHTMLTableRow interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f23c-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLTableRow : IDispatch\n{\n    [propput, id(DISPID_IHTMLTABLEROW_ALIGN)]\n    HRESULT align([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLEROW_ALIGN)]\n    HRESULT align([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLTABLEROW_VALIGN)]\n    HRESULT vAlign([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLEROW_VALIGN)]\n    HRESULT vAlign([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLTABLEROW_BGCOLOR)]\n    HRESULT bgColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLEROW_BGCOLOR)]\n    HRESULT bgColor([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLOR)]\n    HRESULT borderColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLOR)]\n    HRESULT borderColor([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT)]\n    HRESULT borderColorLight([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT)]\n    HRESULT borderColorLight([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLORDARK)]\n    HRESULT borderColorDark([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLORDARK)]\n    HRESULT borderColorDark([out, retval] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLTABLEROW_ROWINDEX)]\n    HRESULT rowIndex([out, retval] LONG *p);\n\n    [propget, id(DISPID_IHTMLTABLEROW_SECTIONROWINDEX)]\n    HRESULT sectionRowIndex([out, retval] LONG *p);\n\n    [propget, id(DISPID_IHTMLTABLEROW_CELLS)]\n    HRESULT cells([out, retval] IHTMLElementCollection **p);\n\n    [id(DISPID_IHTMLTABLEROW_INSERTCELL)]\n    HRESULT insertCell(\n            [in, defaultvalue(-1)] LONG index,\n            [out, retval] IDispatch **row);\n\n    [id(DISPID_IHTMLTABLEROW_DELETECELL)]\n    HRESULT deleteCell([in, defaultvalue(-1)] LONG index);\n}\n\n/*****************************************************************************\n *    IHTMLTableCell interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f23d-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLTableCell : IDispatch\n{\n    [propput, id(DISPID_IHTMLTABLECELL_ROWSPAN)]\n    HRESULT rowSpan([in] long v);\n\n    [propget, id(DISPID_IHTMLTABLECELL_ROWSPAN)]\n    HRESULT rowSpan([retval, out] long *p);\n\n    [propput, id(DISPID_IHTMLTABLECELL_COLSPAN)]\n    HRESULT colSpan([in] long v);\n\n    [propget, id(DISPID_IHTMLTABLECELL_COLSPAN)]\n    HRESULT colSpan([retval, out] long *p);\n\n    [propput, id(DISPID_IHTMLTABLECELL_ALIGN)]\n    HRESULT align([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLECELL_ALIGN)]\n    HRESULT align([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLTABLECELL_VALIGN)]\n    HRESULT vAlign([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLECELL_VALIGN)]\n    HRESULT vAlign([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLTABLECELL_BGCOLOR)]\n    HRESULT bgColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLECELL_BGCOLOR)]\n    HRESULT bgColor([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLTABLECELL_NOWRAP)]\n    HRESULT noWrap([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLTABLECELL_NOWRAP)]\n    HRESULT noWrap([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLTABLECELL_BACKGROUND)]\n    HRESULT background([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLECELL_BACKGROUND)]\n    HRESULT background([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLOR)]\n    HRESULT borderColor([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLOR)]\n    HRESULT borderColor([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLORLIGHT)]\n    HRESULT borderColorLight([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLORLIGHT)]\n    HRESULT borderColorLight([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLORDARK)]\n    HRESULT borderColorDark([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLORDARK)]\n    HRESULT borderColorDark([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLTABLECELL_WIDTH)]\n    HRESULT width([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLECELL_WIDTH)]\n    HRESULT width([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLTABLECELL_HEIGHT)]\n    HRESULT height([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLECELL_HEIGHT)]\n    HRESULT height([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLTABLECELL_CELLINDEX)]\n    HRESULT cellIndex([retval, out] long *p);\n}\n\n/*****************************************************************************\n *    DispHTMLTable dispinterface\n */\n[\n    hidden,\n    uuid(3050f532-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLTable\n{\nproperties:\nmethods:\n    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;\n\n    [propput, id(DISPID_IHTMLTABLE_COLS)]\n    void cols(LONG v);\n\n    [propget, id(DISPID_IHTMLTABLE_COLS)]\n    LONG cols();\n\n    [propput, id(DISPID_IHTMLTABLE_BORDER)]\n    void border(VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLE_BORDER)]\n    VARIANT border();\n\n    [propput, id(DISPID_IHTMLTABLE_FRAME)]\n    void frame(BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLE_FRAME)]\n    BSTR frame();\n\n    [propput, id(DISPID_IHTMLTABLE_RULES)]\n    void rules(BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLE_RULES)]\n    BSTR rules();\n\n    [propput, id(DISPID_IHTMLTABLE_CELLSPACING)]\n    void cellSpacing(VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLE_CELLSPACING)]\n    VARIANT cellSpacing();\n\n    [propput, id(DISPID_IHTMLTABLE_CELLPADDING)]\n    void cellPadding(VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLE_CELLPADDING)]\n    VARIANT cellPadding();\n\n    [propput, id(DISPID_IHTMLTABLE_BACKGROUND)]\n    void background(BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLE_BACKGROUND)]\n    BSTR background();\n\n    [propput, id(DISPID_IHTMLTABLE_BGCOLOR)]\n    void bgColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLE_BGCOLOR)]\n    VARIANT bgColor();\n\n    [propput, id(DISPID_IHTMLTABLE_BORDERCOLOR)]\n    void borderColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLE_BORDERCOLOR)]\n    VARIANT borderColor();\n\n    [propput, id(DISPID_IHTMLTABLE_BORDERCOLORLIGHT)]\n    void borderColorLight(VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLE_BORDERCOLORLIGHT)]\n    VARIANT borderColorLight();\n\n    [propput, id(DISPID_IHTMLTABLE_BORDERCOLORDARK)]\n    void borderColorDark(VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLE_BORDERCOLORDARK)]\n    VARIANT borderColorDark();\n\n    [propput, id(DISPID_IHTMLTABLE_ALIGN)]\n    void align(BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLE_ALIGN)]\n    BSTR align();\n\n    [id(DISPID_IHTMLTABLE_REFRESH)]\n    void refresh();\n\n    [propget, id(DISPID_IHTMLTABLE_ROWS)]\n    IHTMLElementCollection *rows();\n\n    [propput, id(DISPID_IHTMLTABLE_WIDTH)]\n    void width(VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLE_WIDTH)]\n    VARIANT width();\n\n    [propput, id(DISPID_IHTMLTABLE_HEIGHT)]\n    void height(VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLE_HEIGHT)]\n    VARIANT height();\n\n    [propput, id(DISPID_IHTMLTABLE_DATAPAGESIZE)]\n    void dataPageSize(LONG v);\n\n    [propget, id(DISPID_IHTMLTABLE_DATAPAGESIZE)]\n    LONG dataPageSize();\n\n    [id(DISPID_IHTMLTABLE_NEXTPAGE)]\n    void nextPage();\n\n    [id(DISPID_IHTMLTABLE_PREVIOUSPAGE)]\n    void previousPage();\n\n    [propget, id(DISPID_IHTMLTABLE_THEAD)]\n    IHTMLTableSection *tHead();\n\n    [propget, id(DISPID_IHTMLTABLE_TFOOT)]\n    IHTMLTableSection *tFoot();\n\n    [propget, id(DISPID_IHTMLTABLE_TBODIES)]\n    IHTMLElementCollection *tBodies();\n\n    [propget, id(DISPID_IHTMLTABLE_CAPTION)]\n    IHTMLTableCaption *caption();\n\n    [id(DISPID_IHTMLTABLE_CREATETHEAD)]\n    IDispatch *createTHead();\n\n    [id(DISPID_IHTMLTABLE_DELETETHEAD)]\n    void deleteTHead();\n\n    [id(DISPID_IHTMLTABLE_CREATETFOOT)]\n    IDispatch *createTFoot();\n\n    [id(DISPID_IHTMLTABLE_DELETETFOOT)]\n    void deleteTFoot();\n\n    [id(DISPID_IHTMLTABLE_CREATECAPTION)]\n    IHTMLTableCaption *createCaption();\n\n    [id(DISPID_IHTMLTABLE_DELETECAPTION)]\n    void deleteCaption();\n\n    [id(DISPID_IHTMLTABLE_INSERTROW)]\n    IDispatch *insertRow([in, defaultvalue(-1)] LONG index);\n\n    [id(DISPID_IHTMLTABLE_DELETEROW)]\n    void deleteRow([in, defaultvalue(-1)] LONG index);\n\n    [id(DISPID_IHTMLTABLE2_FIRSTPAGE)]\n    void firstPage();\n\n    [id(DISPID_IHTMLTABLE2_LASTPAGE)]\n    void lastPage();\n\n    [propget, id(DISPID_IHTMLTABLE2_CELLS)]\n    IHTMLElementCollection *cells();\n\n    [id(DISPID_IHTMLTABLE2_MOVEROW)]\n    IDispatch *moveRow(\n            [in, defaultvalue(-1)] LONG indexFrom,\n            [in, defaultvalue(-1)] LONG indexTo);\n\n    [propput, id(DISPID_IHTMLTABLE3_SUMMARY), displaybind, bindable]\n    void summary(BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLE3_SUMMARY), displaybind, bindable]\n    BSTR summary();\n}\n\n/*****************************************************************************\n *    DispHTMLTableRow dispinterface\n */\n[\n    hidden,\n    uuid(3050f535-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLTableRow\n{\nproperties:\nmethods:\n    WINE_HTMLELEMENT_DISPINTERFACE_DECL;\n\n    [propput, id(DISPID_IHTMLTABLEROW_ALIGN)]\n    void align(BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLEROW_ALIGN)]\n    BSTR align();\n\n    [propput, id(DISPID_IHTMLTABLEROW_VALIGN)]\n    void vAlign(BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLEROW_VALIGN)]\n    BSTR vAlign();\n\n    [propput, id(DISPID_IHTMLTABLEROW_BGCOLOR)]\n    void bgColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLEROW_BGCOLOR)]\n    VARIANT bgColor();\n\n    [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLOR)]\n    void borderColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLOR)]\n    VARIANT borderColor();\n\n    [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT)]\n    void borderColorLight(VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT)]\n    VARIANT borderColorLight();\n\n    [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLORDARK)]\n    void borderColorDark(VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLORDARK)]\n    VARIANT borderColorDark();\n\n    [propget, id(DISPID_IHTMLTABLEROW_ROWINDEX)]\n    LONG rowIndex();\n\n    [propget, id(DISPID_IHTMLTABLEROW_SECTIONROWINDEX)]\n    LONG sectionRowIndex();\n\n    [propget, id(DISPID_IHTMLTABLEROW_CELLS)]\n    IHTMLElementCollection *cells();\n\n    [id(DISPID_IHTMLTABLEROW_INSERTCELL)]\n    IDispatch *insertCell([in, defaultvalue(-1)] LONG index);\n\n    [id(DISPID_IHTMLTABLEROW_DELETECELL)]\n    void deleteCell([in, defaultvalue(-1)] LONG index);\n\n    [propput, id(DISPID_IHTMLTABLEROW2_HEIGHT)]\n    void height(VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLEROW2_HEIGHT)]\n    VARIANT height();\n\n    [propput, id(DISPID_IHTMLTABLEROW3_CH), displaybind, bindable]\n    void ch(BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLEROW3_CH), displaybind, bindable]\n    BSTR ch();\n\n    [propput, id(DISPID_IHTMLTABLEROW3_CHOFF), displaybind, bindable]\n    void chOff(BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLEROW3_CHOFF), displaybind, bindable]\n    BSTR chOff();\n}\n\n/*****************************************************************************\n *    HTMLTableRow coclass\n */\n[\n    noncreatable,\n    uuid(3050f26d-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLTableRow\n{\n    [default]         dispinterface DispHTMLTableRow;\n /* [source, default] dispinterface HTMLControlElementEvents; */\n /* [source]          dispinterface HTMLControlElementEvents2; */\n    WINE_HTMLELEMENT_INTERFACES;\n    interface IHTMLTableRow;\n /* interface IHTMLTableRowMetrics; */\n /* interface IHTMLTableRow2; */\n /* interface IHTMLTableRow3; */\n /* interface IHTMLTableRow4; */\n}\n\n/*****************************************************************************\n *    DispHTMLTableCell dispinterface\n */\n[\n    hidden,\n    uuid(3050f536-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLTableCell\n{\nproperties:\nmethods:\n    WINE_HTMLELEMENT_DISPINTERFACE_DECL;\n\n    [propput, id(DISPID_IHTMLTABLECELL_ROWSPAN)]\n    void rowSpan(long v);\n\n    [propget, id(DISPID_IHTMLTABLECELL_ROWSPAN)]\n    long rowSpan();\n\n    [propput, id(DISPID_IHTMLTABLECELL_COLSPAN)]\n    void colSpan(long v);\n\n    [propget, id(DISPID_IHTMLTABLECELL_COLSPAN)]\n    long colSpan();\n\n    [propput, id(DISPID_IHTMLTABLECELL_ALIGN)]\n    void align(BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLECELL_ALIGN)]\n    BSTR align();\n\n    [propput, id(DISPID_IHTMLTABLECELL_VALIGN)]\n    void vAlign(BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLECELL_VALIGN)]\n    BSTR vAlign();\n\n    [propput, id(DISPID_IHTMLTABLECELL_BGCOLOR)]\n    void bgColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLECELL_BGCOLOR)]\n    VARIANT bgColor();\n\n    [propput, id(DISPID_IHTMLTABLECELL_NOWRAP)]\n    void noWrap(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLTABLECELL_NOWRAP)]\n    VARIANT_BOOL noWrap();\n\n    [propput, id(DISPID_IHTMLTABLECELL_BACKGROUND)]\n    void background(BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLECELL_BACKGROUND)]\n    BSTR background();\n\n    [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLOR)]\n    void borderColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLOR)]\n    VARIANT borderColor();\n\n    [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLORLIGHT)]\n    void borderColorLight(VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLORLIGHT)]\n    VARIANT borderColorLight();\n\n    [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLORDARK)]\n    void borderColorDark(VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLORDARK)]\n    VARIANT borderColorDark();\n\n    [propput, id(DISPID_IHTMLTABLECELL_WIDTH)]\n    void width(VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLECELL_WIDTH)]\n    VARIANT width();\n\n    [propput, id(DISPID_IHTMLTABLECELL_HEIGHT)]\n    void height(VARIANT v);\n\n    [propget, id(DISPID_IHTMLTABLECELL_HEIGHT)]\n    VARIANT height();\n\n    [propget, id(DISPID_IHTMLTABLECELL_CELLINDEX)]\n    long cellIndex();\n\n    [propput, id(DISPID_IHTMLTABLECELL2_ABBR), displaybind, bindable]\n    void abbr(BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLECELL2_ABBR), displaybind, bindable]\n    BSTR abbr();\n\n    [propput, id(DISPID_IHTMLTABLECELL2_AXIS), displaybind, bindable]\n    void axis(BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLECELL2_AXIS), displaybind, bindable]\n    BSTR axis();\n\n    [propput, id(DISPID_IHTMLTABLECELL2_CH), displaybind, bindable]\n    void ch(BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLECELL2_CH), displaybind, bindable]\n    BSTR ch();\n\n    [propput, id(DISPID_IHTMLTABLECELL2_CHOFF), displaybind, bindable]\n    void chOff(BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLECELL2_CHOFF), displaybind, bindable]\n    BSTR chOff();\n\n    [propput, id(DISPID_IHTMLTABLECELL2_HEADERS), displaybind, bindable]\n    void headers(BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLECELL2_HEADERS), displaybind, bindable]\n    BSTR headers();\n\n    [propput, id(DISPID_IHTMLTABLECELL2_SCOPE), displaybind, bindable]\n    void scope(BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLECELL2_SCOPE), displaybind, bindable]\n    BSTR scope();\n\n    [propput, id(DISPID_IHTMLTABLECELL3_IE9_CH), displaybind, bindable]\n    void ie9_ch(BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLECELL3_IE9_CH), displaybind, bindable]\n    BSTR ie9_ch();\n\n    [propput, id(DISPID_IHTMLTABLECELL3_IE9_CHOFF), displaybind, bindable]\n    void ie9_chOff(BSTR v);\n\n    [propget, id(DISPID_IHTMLTABLECELL3_IE9_CHOFF), displaybind, bindable]\n    BSTR ie9_chOff();\n}\n\n/*****************************************************************************\n *    HTMLTableCell coclass\n */\n[\n    noncreatable,\n    uuid(3050f246-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLTableCell\n{\n    [default]         dispinterface DispHTMLTableCell;\n    [source, default] dispinterface HTMLTextContainerEvents;\n    [source]          dispinterface HTMLTextContainerEvents2;\n    WINE_HTMLELEMENT_INTERFACES;\n    interface IHTMLControlElement;\n    interface IHTMLTextContainer;\n    interface IHTMLTableCell;\n /* interface IHTMLTableCell2; */\n /* interface IHTMLTableCell3; */\n}\n\n/*****************************************************************************\n *    IHTMLScriptElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f28b-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLScriptElement : IDispatch\n{\n    [propput, id(DISPID_IHTMLSCRIPTELEMENT_SRC), displaybind, bindable]\n    HRESULT src([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSCRIPTELEMENT_SRC), displaybind, bindable]\n    HRESULT src([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSCRIPTELEMENT_HTMLFOR), displaybind, bindable]\n    HRESULT htmlFor([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSCRIPTELEMENT_HTMLFOR), displaybind, bindable]\n    HRESULT htmlFor([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSCRIPTELEMENT_EVENT), displaybind, bindable]\n    HRESULT event([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSCRIPTELEMENT_EVENT), displaybind, bindable]\n    HRESULT event([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSCRIPTELEMENT_TEXT), displaybind, bindable]\n    HRESULT text([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSCRIPTELEMENT_TEXT), displaybind, bindable]\n    HRESULT text([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSCRIPTELEMENT_DEFER), displaybind, bindable]\n    HRESULT defer([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLSCRIPTELEMENT_DEFER), displaybind, bindable]\n    HRESULT defer([retval, out] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IHTMLSCRIPTELEMENT_READYSTATE)]\n    HRESULT readyState([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSCRIPTELEMENT_ONERROR), displaybind, bindable]\n    HRESULT onerror([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSCRIPTELEMENT_ONERROR), displaybind, bindable]\n    HRESULT onerror([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSCRIPTELEMENT_TYPE), displaybind, bindable]\n    HRESULT type([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSCRIPTELEMENT_TYPE), displaybind, bindable]\n    HRESULT type([retval, out] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLScriptElement2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f828-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLScriptElement2 : IDispatch\n{\n    [propput, id(DISPID_IHTMLSCRIPTELEMENT2_CHARSET), displaybind, bindable]\n    HRESULT charset([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSCRIPTELEMENT2_CHARSET), displaybind, bindable]\n    HRESULT charset([retval, out] BSTR *p);\n}\n\n/*****************************************************************************\n *    DispHTMLScriptElement dispinterface\n */\n[\n    hidden,\n    uuid(3050f530-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLScriptElement\n{\nproperties:\nmethods:\n    WINE_HTMLELEMENT_DISPINTERFACE_DECL;\n\n    [propput, id(DISPID_IHTMLSCRIPTELEMENT_SRC), displaybind, bindable]\n    void src(BSTR v);\n\n    [propget, id(DISPID_IHTMLSCRIPTELEMENT_SRC), displaybind, bindable]\n    BSTR src();\n\n    [propput, id(DISPID_IHTMLSCRIPTELEMENT_HTMLFOR), displaybind, bindable]\n    void htmlFor(BSTR v);\n\n    [propget, id(DISPID_IHTMLSCRIPTELEMENT_HTMLFOR), displaybind, bindable]\n    BSTR htmlFor();\n\n    [propput, id(DISPID_IHTMLSCRIPTELEMENT_EVENT), displaybind, bindable]\n    void event(BSTR v);\n\n    [propget, id(DISPID_IHTMLSCRIPTELEMENT_EVENT), displaybind, bindable]\n    BSTR event();\n\n    [propput, id(DISPID_IHTMLSCRIPTELEMENT_TEXT), displaybind, bindable]\n    void text(BSTR v);\n\n    [propget, id(DISPID_IHTMLSCRIPTELEMENT_TEXT), displaybind, bindable]\n    BSTR text();\n\n    [propput, id(DISPID_IHTMLSCRIPTELEMENT_DEFER), displaybind, bindable]\n    void defer(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLSCRIPTELEMENT_DEFER), displaybind, bindable]\n    VARIANT_BOOL defer();\n\n    [propput, id(DISPID_IHTMLSCRIPTELEMENT_ONERROR), displaybind, bindable]\n    void onerror(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSCRIPTELEMENT_ONERROR), displaybind, bindable]\n    VARIANT onerror();\n\n    [propput, id(DISPID_IHTMLSCRIPTELEMENT_TYPE), displaybind, bindable]\n    void type(BSTR v);\n\n    [propget, id(DISPID_IHTMLSCRIPTELEMENT_TYPE), displaybind, bindable]\n    BSTR type();\n\n    [propput, id(DISPID_IHTMLSCRIPTELEMENT2_CHARSET), displaybind, bindable]\n    void charset(BSTR v);\n\n    [propget, id(DISPID_IHTMLSCRIPTELEMENT2_CHARSET), displaybind, bindable]\n    BSTR charset();\n\n    [propput, id(DISPID_IHTMLSCRIPTELEMENT3_IE8_SRC)]\n    void ie8_src(BSTR v);\n\n    [propget, id(DISPID_IHTMLSCRIPTELEMENT3_IE8_SRC)]\n    BSTR ie8_src();\n}\n\n/*****************************************************************************\n *    HTMLScriptElement coclass\n */\n[\n    noncreatable,\n    uuid(3050f28c-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLScriptElement\n{\n    [default]         dispinterface DispHTMLScriptElement;\n /* [source, default] dispinterface HTMLScriptEvents; */\n /* [source]          dispinterface HTMLScriptEvents2; */\n    WINE_HTMLELEMENT_INTERFACES;\n    interface IHTMLScriptElement;\n    interface IHTMLScriptElement2;\n /* interface IHTMLScriptElement3; */\n /* interface IHTMLScriptElement4; */\n}\n\n/*****************************************************************************\n *    IHTMLObjectElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f24f-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLObjectElement : IDispatch\n{\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_OBJECT), hidden]\n    HRESULT object([retval, out] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_CLASSID), hidden]\n    HRESULT classid([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_DATA), hidden]\n    HRESULT data([retval, out] BSTR *p);\n\n    [propputref, id(DISPID_IHTMLOBJECTELEMENT_RECORDSET), hidden]\n    HRESULT recordset([in] IDispatch *v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_RECORDSET), hidden]\n    HRESULT recordset([retval, out] IDispatch **p);\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_ALIGN), displaybind, bindable]\n    HRESULT align([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_ALIGN), displaybind, bindable]\n    HRESULT align([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_NAME), displaybind, bindable]\n    HRESULT name([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_NAME), displaybind, bindable]\n    HRESULT name([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_CODEBASE), displaybind, bindable]\n    HRESULT codeBase([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_CODEBASE), displaybind, bindable]\n    HRESULT codeBase([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_CODETYPE), displaybind, bindable]\n    HRESULT codeType([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_CODETYPE), displaybind, bindable]\n    HRESULT codeType([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_CODE), displaybind, bindable]\n    HRESULT code([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_CODE), displaybind, bindable]\n    HRESULT code([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_BASEHREF)]\n    HRESULT BaseHref([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_TYPE), displaybind, bindable]\n    HRESULT type([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_TYPE), displaybind, bindable]\n    HRESULT type([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_FORM)]\n    HRESULT form([retval, out] IHTMLFormElement **p);\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_WIDTH)]\n    HRESULT width([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_WIDTH)]\n    HRESULT width([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_HEIGHT)]\n    HRESULT height([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_HEIGHT)]\n    HRESULT height([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_READYSTATE), hidden]\n    HRESULT readyState([retval, out] long *p);\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_ONREADYSTATECHANGE), displaybind, bindable]\n    HRESULT onreadystatechange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_ONREADYSTATECHANGE), displaybind, bindable]\n    HRESULT onreadystatechange([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_ONERROR), displaybind, bindable]\n    HRESULT onerror([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_ONERROR), displaybind, bindable]\n    HRESULT onerror([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_ALTHTML)]\n    HRESULT altHtml([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_ALTHTML)]\n    HRESULT altHtml([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_VSPACE)]\n    HRESULT vspace([in] long v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_VSPACE)]\n    HRESULT vspace([retval, out] long *p);\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_HSPACE)]\n    HRESULT hspace([in] long v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_HSPACE)]\n    HRESULT hspace([retval, out] long *p);\n}\n\n/*****************************************************************************\n *    IHTMLObjectElement2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f4cd-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLObjectElement2 : IDispatch\n{\n    [id(DISPID_IHTMLOBJECTELEMENT2_NAMEDRECORDSET)]\n    HRESULT namedRecordset(\n            [in] BSTR dataMember,\n            [in, optional] VARIANT *hierarchy,\n            [out, retval] IDispatch **ppRecordset);\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT2_CLASSID), hidden]\n    HRESULT classid([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT2_CLASSID), hidden]\n    HRESULT classid([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT2_DATA), hidden]\n    HRESULT data([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT2_DATA), hidden]\n    HRESULT data([out, retval] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLDivElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f200-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLDivElement : IDispatch\n{\n    [propput, id(DISPID_IHTMLDIVELEMENT_ALIGN), displaybind, bindable]\n    HRESULT align([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLDIVELEMENT_ALIGN), displaybind, bindable]\n    HRESULT align([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLDIVELEMENT_NOWRAP), displaybind, bindable]\n    HRESULT noWrap([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLDIVELEMENT_NOWRAP), displaybind, bindable]\n    HRESULT noWrap([out, retval] VARIANT_BOOL *p);\n}\n\n/*****************************************************************************\n *    DispHTMLDivElement dispinterface\n */\n[\n    hidden,\n    uuid(3050f50c-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLDivElement\n{\nproperties:\nmethods:\n    WINE_HTMLELEMENT_DISPINTERFACE_DECL;\n\n    [propput, id(DISPID_IHTMLDIVELEMENT_ALIGN), displaybind, bindable]\n    void align(BSTR v);\n\n    [propget, id(DISPID_IHTMLDIVELEMENT_ALIGN), displaybind, bindable]\n    BSTR align();\n\n    [propput, id(DISPID_IHTMLDIVELEMENT_NOWRAP), displaybind, bindable]\n    void noWrap(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLDIVELEMENT_NOWRAP), displaybind, bindable]\n    VARIANT_BOOL noWrap();\n}\n\n/*****************************************************************************\n *    IHTMLParamElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f83d-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLParamElement : IDispatch\n{\n    [propput, id(DISPID_IHTMLPARAMELEMENT_NAME), displaybind, bindable]\n    HRESULT name([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLPARAMELEMENT_NAME), displaybind, bindable]\n    HRESULT name([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLPARAMELEMENT_VALUE), displaybind, bindable]\n    HRESULT value([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLPARAMELEMENT_VALUE), displaybind, bindable]\n    HRESULT value([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLPARAMELEMENT_TYPE), displaybind, bindable]\n    HRESULT type([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLPARAMELEMENT_TYPE), displaybind, bindable]\n    HRESULT type([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLPARAMELEMENT_VALUETYPE), displaybind, bindable]\n    HRESULT valueType([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLPARAMELEMENT_VALUETYPE), displaybind, bindable]\n    HRESULT valueType([retval, out] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLParamElement2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(30510444-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLParamElement2 : IDispatch\n{\n    [propput, id(DISPID_IHTMLPARAMELEMENT2_NAME), displaybind, bindable]\n    HRESULT name([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLPARAMELEMENT2_NAME), displaybind, bindable]\n    HRESULT name([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLPARAMELEMENT2_TYPE), displaybind, bindable]\n    HRESULT type([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLPARAMELEMENT2_TYPE), displaybind, bindable]\n    HRESULT type([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLPARAMELEMENT2_VALUE), displaybind, bindable]\n    HRESULT value([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLPARAMELEMENT2_VALUE), displaybind, bindable]\n    HRESULT value([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLPARAMELEMENT2_IE8_VALUETYPE)]\n    HRESULT valueType([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLPARAMELEMENT2_IE8_VALUETYPE)]\n    HRESULT valueType([retval, out] BSTR *p);\n}\n\n/*****************************************************************************\n *    DispHTMLObjectElement dispinterface\n */\n[\n    hidden,\n    uuid(3050f529-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLObjectElement\n{\nproperties:\nmethods:\n    WINE_HTMLELEMENT_DISPINTERFACE_DECL;\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_OBJECT), hidden]\n    IDispatch *object();\n\n    [propputref, id(DISPID_IHTMLOBJECTELEMENT_RECORDSET), hidden]\n    void recordset(IDispatch *v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_RECORDSET), hidden]\n    IDispatch *recordset();\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_ALIGN), displaybind, bindable]\n    void align(BSTR v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_ALIGN), displaybind, bindable]\n    BSTR align();\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_NAME), displaybind, bindable]\n    void name(BSTR v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_NAME), displaybind, bindable]\n    BSTR name();\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_CODEBASE), displaybind, bindable]\n    void codeBase(BSTR v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_CODEBASE), displaybind, bindable]\n    BSTR codeBase();\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_CODETYPE), displaybind, bindable]\n    void codeType(BSTR v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_CODETYPE), displaybind, bindable]\n    BSTR codeType();\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_CODE), displaybind, bindable]\n    void code(BSTR v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_CODE), displaybind, bindable]\n    BSTR code();\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_BASEHREF)]\n    BSTR BaseHref();\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_TYPE), displaybind, bindable]\n    void type(BSTR v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_TYPE), displaybind, bindable]\n    BSTR type();\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_FORM)]\n    IHTMLFormElement *form();\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_WIDTH)]\n    void width(VARIANT v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_WIDTH)]\n    VARIANT width();\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_HEIGHT)]\n    void height(VARIANT v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_HEIGHT)]\n    VARIANT height();\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_ONERROR), displaybind, bindable]\n    void onerror(VARIANT v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_ONERROR), displaybind, bindable]\n    VARIANT onerror();\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_ALTHTML)]\n    void altHtml(BSTR v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_ALTHTML)]\n    BSTR altHtml();\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_VSPACE)]\n    void vspace(long v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_VSPACE)]\n    long vspace();\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT_HSPACE)]\n    void hspace(long v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT_HSPACE)]\n    long hspace();\n\n    [id(DISPID_IHTMLOBJECTELEMENT2_NAMEDRECORDSET)]\n    IDispatch *namedRecordset(\n            [in] BSTR dataMember,\n            [optional, in] VARIANT *hierarchy);\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT2_CLASSID), hidden]\n    void classid(BSTR v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT2_CLASSID), hidden]\n    BSTR classid();\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT2_DATA), hidden]\n    void data(BSTR v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT2_DATA), hidden]\n    BSTR data();\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT3_ARCHIVE), displaybind, bindable]\n    void archive(BSTR v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT3_ARCHIVE), displaybind, bindable]\n    BSTR archive();\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT3_ALT), displaybind, bindable]\n    void alt(BSTR v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT3_ALT), displaybind, bindable]\n    BSTR alt();\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT3_DECLARE), displaybind, bindable]\n    void declare(VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT3_DECLARE), displaybind, bindable]\n    VARIANT_BOOL declare();\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT3_STANDBY), displaybind, bindable]\n    void standby(BSTR v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT3_STANDBY), displaybind, bindable]\n    BSTR standby();\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT3_BORDER)]\n    void border(VARIANT v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT3_BORDER)]\n    VARIANT border();\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT3_USEMAP), displaybind, bindable]\n    void useMap(BSTR v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT3_USEMAP), displaybind, bindable]\n    BSTR useMap();\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT4_CONTENTDOCUMENT)]\n    IDispatch *contentDocument();\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT4_IE8_CODEBASE)]\n    void ie8_codeBase(BSTR v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT4_IE8_CODEBASE)]\n    BSTR ie8_codeBase();\n\n    [propput, id(DISPID_IHTMLOBJECTELEMENT4_IE8_DATA)]\n    void ie8_data(BSTR v);\n\n    [propget, id(DISPID_IHTMLOBJECTELEMENT4_IE8_DATA)]\n    BSTR ie8_data();\n}\n\n/*****************************************************************************\n *    HTMLObjectElement coclass\n */\n[\n    noncreatable,\n    uuid(3050f24e-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLObjectElement\n{\n    [default]         dispinterface DispHTMLObjectElement;\n /* [source, default] dispinterface HTMLObjectElementEvents; */\n /* [source]          dispinterface HTMLObjectElementEvents2; */\n    WINE_HTMLDATAELEMENT_INTERFACES;\n    interface IHTMLControlElement;\n    interface IHTMLObjectElement;\n    interface IHTMLObjectElement2;\n /* interface IHTMLObjectElement3; */\n /* interface IHTMLObjectElement4; */\n /* interface IGetSVGDocument; */\n /* interface IHTMLObjectElement5; */\n}\n\n/*****************************************************************************\n *    DispHTMLParamElement dispinterface\n */\n[\n    hidden,\n    uuid(3050f590-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLParamElement\n{\nproperties:\nmethods:\n    WINE_HTMLELEMENT_DISPINTERFACE_DECL;\n\n    [propput, id(DISPID_IHTMLPARAMELEMENT_NAME), displaybind, bindable]\n    void name(BSTR v);\n\n    [propget, id(DISPID_IHTMLPARAMELEMENT_NAME), displaybind, bindable]\n    BSTR name();\n\n    [propput, id(DISPID_IHTMLPARAMELEMENT_VALUE), displaybind, bindable]\n    void value(BSTR v);\n\n    [propget, id(DISPID_IHTMLPARAMELEMENT_VALUE), displaybind, bindable]\n    BSTR value();\n\n    [propput, id(DISPID_IHTMLPARAMELEMENT_TYPE), displaybind, bindable]\n    void type(BSTR v);\n\n    [propget, id(DISPID_IHTMLPARAMELEMENT_TYPE), displaybind, bindable]\n    BSTR type();\n\n    [propput, id(DISPID_IHTMLPARAMELEMENT_VALUETYPE), displaybind, bindable]\n    void valueType(BSTR v);\n\n    [propget, id(DISPID_IHTMLPARAMELEMENT_VALUETYPE), displaybind, bindable]\n    BSTR valueType();\n\n    [propput, id(DISPID_IHTMLPARAMELEMENT2_IE8_VALUETYPE)]\n    void ie8_valueType(BSTR v);\n\n    [propget, id(DISPID_IHTMLPARAMELEMENT2_IE8_VALUETYPE)]\n    BSTR ie8_valueType();\n}\n\n/*****************************************************************************\n *    IHTMLFrameBase interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f311-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLFrameBase : IDispatch\n{\n    [propput, id(DISPID_IHTMLFRAMEBASE_SRC)]\n    HRESULT src([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLFRAMEBASE_SRC)]\n    HRESULT src([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLFRAMEBASE_NAME)]\n    HRESULT name([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLFRAMEBASE_NAME)]\n    HRESULT name([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLFRAMEBASE_BORDER)]\n    HRESULT border([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLFRAMEBASE_BORDER)]\n    HRESULT border([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)]\n    HRESULT frameBorder([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)]\n    HRESULT frameBorder([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)]\n    HRESULT frameSpacing([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)]\n    HRESULT frameSpacing([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)]\n    HRESULT marginWidth([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)]\n    HRESULT marginWidth([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)]\n    HRESULT marginHeight([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)]\n    HRESULT marginHeight([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLFRAMEBASE_NORESIZE)]\n    HRESULT noResize([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLFRAMEBASE_NORESIZE)]\n    HRESULT noResize([out, retval] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLFRAMEBASE_SCROLLING)]\n    HRESULT scrolling([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLFRAMEBASE_SCROLLING)]\n    HRESULT scrolling([out, retval] BSTR *p);\n}\n\n#define WINE_IHTMLFRAMEBASE_DISPINTERFACE_DECL          \\\n    [propput, id(DISPID_IHTMLFRAMEBASE_SRC)]            \\\n    void src(BSTR v);                                   \\\n                                                        \\\n    [propget, id(DISPID_IHTMLFRAMEBASE_SRC)]            \\\n    BSTR src();                                         \\\n                                                        \\\n    [propput, id(DISPID_IHTMLFRAMEBASE_NAME)]           \\\n    void name(BSTR v);                                  \\\n                                                        \\\n    [propget, id(DISPID_IHTMLFRAMEBASE_NAME)]           \\\n    BSTR name();                                        \\\n                                                        \\\n    [propput, id(DISPID_IHTMLFRAMEBASE_BORDER)]         \\\n    void border(VARIANT v);                             \\\n                                                        \\\n    [propget, id(DISPID_IHTMLFRAMEBASE_BORDER)]         \\\n    VARIANT border();                                   \\\n                                                        \\\n    [propput, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)]    \\\n    void frameBorder(BSTR v);                           \\\n                                                        \\\n    [propget, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)]    \\\n    BSTR frameBorder();                                 \\\n                                                        \\\n    [propput, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)]   \\\n    void frameSpacing(VARIANT v);                       \\\n                                                        \\\n    [propget, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)]   \\\n    VARIANT frameSpacing();                             \\\n                                                        \\\n    [propput, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)]    \\\n    void marginWidth(VARIANT v);                        \\\n                                                        \\\n    [propget, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)]    \\\n    VARIANT marginWidth();                              \\\n                                                        \\\n    [propput, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)]   \\\n    void marginHeight(VARIANT v);                       \\\n                                                        \\\n    [propget, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)]   \\\n    VARIANT marginHeight();                             \\\n                                                        \\\n    [propput, id(DISPID_IHTMLFRAMEBASE_NORESIZE)]       \\\n    void noResize(VARIANT_BOOL v);                      \\\n                                                        \\\n    [propget, id(DISPID_IHTMLFRAMEBASE_NORESIZE)]       \\\n    VARIANT_BOOL noResize();                            \\\n                                                        \\\n    [propput, id(DISPID_IHTMLFRAMEBASE_SCROLLING)]      \\\n    void scrolling(BSTR v);                             \\\n                                                        \\\n    [propget, id(DISPID_IHTMLFRAMEBASE_SCROLLING)]      \\\n    BSTR scrolling()\n\n/*****************************************************************************\n *    IHTMLFrameBase2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f6db-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLFrameBase2 : IDispatch\n{\n    [propget, id(DISPID_IHTMLFRAMEBASE2_CONTENTWINDOW)]\n    HRESULT contentWindow([retval, out] IHTMLWindow2 **p);\n\n    [propput, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable]\n    HRESULT onload([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable]\n    HRESULT onload([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLFRAMEBASE2_ONREADYSTATECHANGE), displaybind, bindable]\n    HRESULT onreadystatechange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLFRAMEBASE2_ONREADYSTATECHANGE), displaybind, bindable]\n    HRESULT onreadystatechange([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLFRAMEBASE2_READYSTATE)]\n    HRESULT readyState([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)]\n    HRESULT allowTransparency([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)]\n    HRESULT allowTransparency([retval, out] VARIANT_BOOL *p);\n}\n\n#define WINE_IHTMLFRAMEBASE2_DISPINTERFACE_DECL                         \\\n    [propget, id(DISPID_IHTMLFRAMEBASE2_CONTENTWINDOW)]                 \\\n    IHTMLWindow2 *contentWindow();                                      \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable] \\\n    void onload(VARIANT v);                                             \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable] \\\n    VARIANT onload();                                                   \\\n                                                                        \\\n    [propput, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)]             \\\n    void allowTransparency(VARIANT_BOOL v);                             \\\n                                                                        \\\n    [propget, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)]             \\\n    VARIANT_BOOL allowTransparency()\n\n#define WINE_IHTMLFRAMEBASE3_DISPINTERFACE_DECL                           \\\n    [propput, id(DISPID_IHTMLFRAMEBASE3_LONGDESC), displaybind, bindable] \\\n    void longDesc(BSTR v);                                                \\\n                                                                          \\\n    [propget, id(DISPID_IHTMLFRAMEBASE3_LONGDESC), displaybind, bindable] \\\n    BSTR longDesc()\n\n\n#define WINE_HTMLFRAMEBASE_DISPINTERFACE_DECL \\\n    WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;  \\\n    WINE_IHTMLFRAMEBASE_DISPINTERFACE_DECL;   \\\n    WINE_IHTMLFRAMEBASE2_DISPINTERFACE_DECL;  \\\n    WINE_IHTMLFRAMEBASE3_DISPINTERFACE_DECL\n\n/*****************************************************************************\n *    IHTMLFrameElement3 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3051042d-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLFrameElement3 : IDispatch\n{\n    [propget, id(DISPID_IHTMLFRAMEELEMENT3_CONTENTDOCUMENT)]\n    HRESULT contentDocument([out, retval] IDispatch **p);\n\n    [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_SRC)]\n    HRESULT src([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_SRC)]\n    HRESULT src([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC)]\n    HRESULT longDesc([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC)]\n    HRESULT longDesc([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER)]\n    HRESULT frameBorder([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER)]\n    HRESULT frameBorder([out, retval] BSTR * p);\n}\n\n/*****************************************************************************\n *    DispHTMLFrameElement dispinterface\n */\n[\n    hidden,\n    uuid(3050f513-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLFrameElement\n{\nproperties:\nmethods:\n    WINE_HTMLFRAMEBASE_DISPINTERFACE_DECL;\n\n    [propput, id(DISPID_IHTMLFRAMEELEMENT_BORDERCOLOR)]\n    void borderColor(VARIANT v);\n\n    [propget, id(DISPID_IHTMLFRAMEELEMENT_BORDERCOLOR)]\n    VARIANT borderColor();\n\n    [propput, id(DISPID_IHTMLFRAMEELEMENT2_HEIGHT)]\n    void height(VARIANT v);\n\n    [propget, id(DISPID_IHTMLFRAMEELEMENT2_HEIGHT)]\n    VARIANT height();\n\n    [propput, id(DISPID_IHTMLFRAMEELEMENT2_WIDTH)]\n    void width(VARIANT v);\n\n    [propget, id(DISPID_IHTMLFRAMEELEMENT2_WIDTH)]\n    VARIANT width();\n\n    [propget, id(DISPID_IHTMLFRAMEELEMENT3_CONTENTDOCUMENT)]\n    IDispatch *contentDocument();\n\n    [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_SRC)]\n    void ie8_src(BSTR v);\n\n    [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_SRC)]\n    BSTR ie8_src();\n\n    [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC)]\n    void ie8_longDesc(BSTR v);\n\n    [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC)]\n    BSTR ie8_longDesc();\n\n    [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER)]\n    void ie8_frameBorder(BSTR v);\n\n    [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER)]\n    BSTR ie8_frameBorder();\n}\n\n/*****************************************************************************\n *    HTMLFrameElement coclass\n */\n[\n    noncreatable,\n    uuid(3050f314-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLFrameElement\n{\n    [default]         dispinterface DispHTMLFrameElement;\n /* [source, default] dispinterface HTMLControlElementEvents; */\n /* [source]          dispinterface HTMLControlElementEvents2; */\n    WINE_HTMLDATAELEMENT_INTERFACES;\n    interface IHTMLControlElement;\n    interface IHTMLFrameBase;\n    interface IHTMLFrameBase2;\n /* interface IHTMLFrameBase3; */\n /* interface IHTMLFrameElement; */\n /* interface IHTMLFrameElement2; */\n    interface IHTMLFrameElement3;\n /* interface IGetSVGDocument; */\n}\n\n/*****************************************************************************\n *    IHTMLIFrameElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f315-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLIFrameElement : IDispatch\n{\n    [propput, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)]\n    HRESULT vspace([in] LONG v);\n\n    [propget, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)]\n    HRESULT vspace([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)]\n    HRESULT hspace([in] LONG v);\n\n    [propget, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)]\n    HRESULT hspace([retval, out] LONG *p);\n\n    [propput, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable]\n    HRESULT align([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable]\n    HRESULT align([retval, out] BSTR *p);\n}\n\n/*****************************************************************************\n *    IHTMLIFrameElement2 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f4e6-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLIFrameElement2 : IDispatch\n{\n    [propput, id(DISPID_IHTMLIFRAMEELEMENT2_HEIGHT)]\n    HRESULT height([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLIFRAMEELEMENT2_HEIGHT)]\n    HRESULT height([out, retval] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLIFRAMEELEMENT2_WIDTH)]\n    HRESULT width([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLIFRAMEELEMENT2_WIDTH)]\n    HRESULT width([out, retval] VARIANT *p);\n}\n\n/*****************************************************************************\n *    IHTMLIFrameElement3 interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(30510433-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLIFrameElement3 : IDispatch\n{\n    [propget, id(DISPID_IHTMLIFRAMEELEMENT3_CONTENTDOCUMENT)]\n    HRESULT contentDocument([out, retval] IDispatch **p);\n\n    [propput, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_SRC)]\n    HRESULT src([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_SRC)]\n    HRESULT src([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_LONGDESC)]\n    HRESULT longDesc([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_LONGDESC)]\n    HRESULT longDesc([out, retval] BSTR *p);\n\n    [propput, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_FRAMEBORDER)]\n    HRESULT frameBorder([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_FRAMEBORDER)]\n    HRESULT frameBorder([out, retval] BSTR *p);\n}\n\n/*****************************************************************************\n *    DispHTMLIFrame dispinterface\n */\n[\n    hidden,\n    uuid(3050f51b-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLIFrame\n{\nproperties:\nmethods:\n    WINE_HTMLFRAMEBASE_DISPINTERFACE_DECL;\n\n    [propput, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)]\n    void vspace(LONG v);\n\n    [propget, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)]\n    LONG vspace();\n\n    [propput, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)]\n    void hspace(LONG v);\n\n    [propget, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)]\n    LONG hspace();\n\n    [propput, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable]\n    void align(BSTR v);\n\n    [propget, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable]\n    BSTR align();\n\n    [propput, id(DISPID_IHTMLIFRAMEELEMENT2_HEIGHT)]\n    void height(VARIANT v);\n\n    [propget, id(DISPID_IHTMLIFRAMEELEMENT2_HEIGHT)]\n    VARIANT height();\n\n    [propput, id(DISPID_IHTMLIFRAMEELEMENT2_WIDTH)]\n    void width(VARIANT v);\n\n    [propget, id(DISPID_IHTMLIFRAMEELEMENT2_WIDTH)]\n    VARIANT width();\n\n    [propget, id(DISPID_IHTMLIFRAMEELEMENT3_CONTENTDOCUMENT)]\n    IDispatch *contentDocument();\n\n    [propput, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_SRC)]\n    void ie8_src(BSTR v);\n\n    [propget, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_SRC)]\n    BSTR ie8_src();\n\n    [propput, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_LONGDESC)]\n    void ie8_longDesc(BSTR v);\n\n    [propget, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_LONGDESC)]\n    BSTR ie8_longDesc();\n\n    [propput, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_FRAMEBORDER)]\n    void ie8_frameBorder(BSTR v);\n\n    [propget, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_FRAMEBORDER)]\n    BSTR ie8_frameBorder();\n}\n\n/*****************************************************************************\n *    HTMLIFrame coclass\n */\n[\n    noncreatable,\n    uuid(3050f316-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLIFrame\n{\n    [default]         dispinterface DispHTMLIFrame;\n /* [source, default] dispinterface HTMLControlElementEvents; */\n /* [source]          dispinterface HTMLControlElementEvents2; */\n    WINE_HTMLDATAELEMENT_INTERFACES;\n    interface IHTMLControlElement;\n    interface IHTMLFrameBase;\n    interface IHTMLFrameBase2;\n /* interface IHTMLFrameBase3; */\n    interface IHTMLIFrameElement;\n    interface IHTMLIFrameElement2;\n    interface IHTMLIFrameElement3;\n /* interface IGetSVGDocument; */\n}\n\n/*****************************************************************************\n *    IHTMLStyleElement interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3050f375-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLStyleElement : IDispatch\n{\n    [propput, id(DISPID_IHTMLSTYLEELEMENT_TYPE), displaybind, bindable]\n    HRESULT type([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLEELEMENT_TYPE), displaybind, bindable]\n    HRESULT type([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IHTMLSTYLEELEMENT_READYSTATE)]\n    HRESULT readyState([retval, out] BSTR *p);\n\n    [propput, id(DISPID_IHTMLSTYLEELEMENT_ONREADYSTATECHANGE), displaybind, bindable]\n    HRESULT onreadystatechange([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLEELEMENT_ONREADYSTATECHANGE), displaybind, bindable]\n    HRESULT onreadystatechange([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLEELEMENT_ONLOAD), displaybind, bindable]\n    HRESULT onload([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLEELEMENT_ONLOAD), displaybind, bindable]\n    HRESULT onload([retval, out] VARIANT *p);\n\n    [propput, id(DISPID_IHTMLSTYLEELEMENT_ONERROR), displaybind, bindable]\n    HRESULT onerror([in] VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLEELEMENT_ONERROR), displaybind, bindable]\n    HRESULT onerror([retval, out] VARIANT *p);\n\n    [propget, id(DISPID_IHTMLSTYLEELEMENT_STYLESHEET)]\n    HRESULT styleSheet([retval, out] IHTMLStyleSheet **p);\n\n    [propput, id(DISPID_IHTMLSTYLEELEMENT_DISABLED), displaybind, bindable]\n    HRESULT disabled([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IHTMLSTYLEELEMENT_DISABLED), displaybind, bindable]\n    HRESULT disabled([retval, out] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IHTMLSTYLEELEMENT_MEDIA), displaybind, bindable]\n    HRESULT media([in] BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLEELEMENT_MEDIA), displaybind, bindable]\n    HRESULT media([retval, out] BSTR *p);\n}\n\n/*****************************************************************************\n *    DispHTMLStyleElement dispinterface\n */\n[\n    hidden,\n    uuid(3050f511-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispHTMLStyleElement\n{\nproperties:\nmethods:\n    WINE_HTMLELEMENT_DISPINTERFACE_DECL;\n\n    [propput, id(DISPID_IHTMLSTYLEELEMENT_TYPE), displaybind, bindable]\n    void type(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLEELEMENT_TYPE), displaybind, bindable]\n    BSTR type();\n\n    [propput, id(DISPID_IHTMLSTYLEELEMENT_ONLOAD), displaybind, bindable]\n    void onload(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLEELEMENT_ONLOAD), displaybind, bindable]\n    VARIANT onload();\n\n    [propput, id(DISPID_IHTMLSTYLEELEMENT_ONERROR), displaybind, bindable]\n    void onerror(VARIANT v);\n\n    [propget, id(DISPID_IHTMLSTYLEELEMENT_ONERROR), displaybind, bindable]\n    VARIANT onerror();\n\n    [propget, id(DISPID_IHTMLSTYLEELEMENT_STYLESHEET)]\n    IHTMLStyleSheet *styleSheet();\n\n    [propput, id(DISPID_IHTMLSTYLEELEMENT_MEDIA), displaybind, bindable]\n    void media(BSTR v);\n\n    [propget, id(DISPID_IHTMLSTYLEELEMENT_MEDIA), displaybind, bindable]\n    BSTR media();\n}\n\n/*****************************************************************************\n *    HTMLStyleElement coclass\n */\n[\n    noncreatable,\n    uuid(3050f37d-98b5-11cf-bb82-00aa00bdce0b)\n]\ncoclass HTMLStyleElement\n{\n    [default]         dispinterface DispHTMLStyleElement;\n /* [source, default] dispinterface HTMLStyleElementEvents; */\n /* [source]          dispinterface HTMLStyleElementEvents2; */\n    WINE_HTMLELEMENT_INTERFACES;\n    interface IHTMLStyleElement;\n /* interface IHTMLStyleElement2; */\n}\n\n/*****************************************************************************\n *    IHTMLStorage interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(30510474-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLStorage : IDispatch\n{\n    [propget, id(DISPID_IHTMLSTORAGE_LENGTH), hidden]\n    HRESULT length([out, retval] long *p);\n\n    [propget, id(DISPID_IHTMLSTORAGE_REMAININGSPACE), hidden]\n    HRESULT remainingSpace([out, retval] long *p);\n\n    [id(DISPID_IHTMLSTORAGE_KEY)]\n    HRESULT key(\n            [in] long lIndex,\n            [out, retval] BSTR *);\n\n    [id(DISPID_IHTMLSTORAGE_GETITEM)]\n    HRESULT getItem(\n            [in] BSTR bstrKey,\n            [out, retval] VARIANT *);\n\n    [id(DISPID_IHTMLSTORAGE_SETITEM)]\n    HRESULT setItem(\n            [in] BSTR bstrKey,\n            [in] BSTR bstrValue);\n\n    [id(DISPID_IHTMLSTORAGE_REMOVEITEM)]\n    HRESULT removeItem([in] BSTR bstrKey);\n\n    [id(DISPID_IHTMLSTORAGE_CLEAR)]\n    HRESULT clear();\n}\n\n/*****************************************************************************\n *    IDOMEventTarget interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(305104b9-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IEventTarget : IDispatch\n{\n    [id(DISPID_IEVENTTARGET_ADDEVENTLISTENER)]\n    HRESULT addEventListener(\n            [in] BSTR type,\n            [in] IDispatch *listener,\n            [in] VARIANT_BOOL useCapture);\n\n    [id(DISPID_IEVENTTARGET_REMOVEEVENTLISTENER)]\n    HRESULT removeEventListener(\n            [in] BSTR type,\n            [in] IDispatch *listener,\n            [in] VARIANT_BOOL useCapture);\n\n    [id(DISPID_IEVENTTARGET_DISPATCHEVENT)]\n    HRESULT dispatchEvent(\n            [in] IDOMEvent *evt,\n            [out, retval] VARIANT_BOOL *pfResult);\n}\n\ntypedef enum _DOM_EVENT_PHASE\n{\n    DEP_CAPTURING_PHASE = 1,\n    DEP_AT_TARGET       = 2,\n    DEP_BUBBLING_PHASE  = 3,\n    DOM_EVENT_PHASE_Max = 0x7fffffff\n} DOM_EVENT_PHASE;\n\n/*****************************************************************************\n *    IDOMEvent interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(305104ba-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IDOMEvent : IDispatch\n{\n    [propget, id(DISPID_IDOMEVENT_BUBBLES)]\n    HRESULT bubbles([out, retval] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IDOMEVENT_CANCELABLE)]\n    HRESULT cancelable([out, retval] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IDOMEVENT_CURRENTTARGET)]\n    HRESULT currentTarget([out, retval] IEventTarget **p);\n\n    [propget, id(DISPID_IDOMEVENT_DEFAULTPREVENTED)]\n    HRESULT defaultPrevented([out, retval] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IDOMEVENT_EVENTPHASE)]\n    HRESULT eventPhase([out, retval] USHORT *p);\n\n    [propget, id(DISPID_IDOMEVENT_TARGET)]\n    HRESULT target([out, retval] IEventTarget **p);\n\n    [propget, id(DISPID_IDOMEVENT_TIMESTAMP)]\n    HRESULT timeStamp([out, retval] ULONGLONG *p);\n\n    [propget, id(DISPID_IDOMEVENT_TYPE)]\n    HRESULT type([out, retval] BSTR *p);\n\n    [id(DISPID_IDOMEVENT_INITEVENT)]\n    HRESULT initEvent(\n            [in] BSTR eventType,\n            [in] VARIANT_BOOL canBubble,\n            [in] VARIANT_BOOL cancelable);\n\n    [id(DISPID_IDOMEVENT_PREVENTDEFAULT)]\n    HRESULT preventDefault();\n\n    [id(DISPID_IDOMEVENT_STOPPROPAGATION)]\n    HRESULT stopPropagation();\n\n    [id(DISPID_IDOMEVENT_STOPIMMEDIATEPROPAGATION)]\n    HRESULT stopImmediatePropagation();\n\n    [propget, id(DISPID_IDOMEVENT_ISTRUSTED)]\n    HRESULT isTrusted([out, retval] VARIANT_BOOL *p);\n\n    [propput, id(DISPID_IDOMEVENT_CANCELBUBBLE)]\n    HRESULT cancelBubble([in] VARIANT_BOOL v);\n\n    [propget, id(DISPID_IDOMEVENT_CANCELBUBBLE)]\n    HRESULT cancelBubble([out, retval] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IDOMEVENT_SRCELEMENT)]\n    HRESULT srcElement([out, retval] IHTMLElement **p);\n}\n\n/*****************************************************************************\n *    DispDOMEvent dispinterface\n */\n[\n    hidden,\n    uuid(3050f5a2-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispDOMEvent\n{\nproperties:\nmethods:\n#define WINE_IDOMEVENT_DISPINTERFACE_DECL                  \\\n    [propget, id(DISPID_IDOMEVENT_BUBBLES)]                \\\n    VARIANT_BOOL bubbles();                                \\\n                                                           \\\n    [propget, id(DISPID_IDOMEVENT_CANCELABLE)]             \\\n    VARIANT_BOOL cancelable();                             \\\n                                                           \\\n    [propget, id(DISPID_IDOMEVENT_CURRENTTARGET)]          \\\n    IEventTarget *currentTarget();                         \\\n                                                           \\\n    [propget, id(DISPID_IDOMEVENT_DEFAULTPREVENTED)]       \\\n    VARIANT_BOOL defaultPrevented();                       \\\n                                                           \\\n    [propget, id(DISPID_IDOMEVENT_EVENTPHASE)]             \\\n    USHORT eventPhase();                                   \\\n                                                           \\\n    [propget, id(DISPID_IDOMEVENT_TARGET)]                 \\\n    IEventTarget *target();                                \\\n                                                           \\\n    [propget, id(DISPID_IDOMEVENT_TIMESTAMP)]              \\\n    ULONGLONG timeStamp();                                 \\\n                                                           \\\n    [propget, id(DISPID_IDOMEVENT_TYPE)]                   \\\n    BSTR type();                                           \\\n                                                           \\\n    [id(DISPID_IDOMEVENT_INITEVENT)]                       \\\n    void initEvent(                                        \\\n            [in] BSTR eventType,                           \\\n            [in] VARIANT_BOOL canBubble,                   \\\n            [in] VARIANT_BOOL cancelable);                 \\\n                                                           \\\n    [id(DISPID_IDOMEVENT_PREVENTDEFAULT)]                  \\\n    void preventDefault();                                 \\\n                                                           \\\n    [id(DISPID_IDOMEVENT_STOPPROPAGATION)]                 \\\n    void stopPropagation();                                \\\n                                                           \\\n    [id(DISPID_IDOMEVENT_STOPIMMEDIATEPROPAGATION)]        \\\n    void stopImmediatePropagation();                       \\\n                                                           \\\n    [propget, id(DISPID_IDOMEVENT_ISTRUSTED)]              \\\n    VARIANT_BOOL isTrusted();                              \\\n                                                           \\\n    [propput, id(DISPID_IDOMEVENT_CANCELBUBBLE)]           \\\n    void cancelBubble(VARIANT_BOOL v);                     \\\n                                                           \\\n    [propget, id(DISPID_IDOMEVENT_CANCELBUBBLE)]           \\\n    VARIANT_BOOL cancelBubble();                           \\\n                                                           \\\n    [propget, id(DISPID_IDOMEVENT_SRCELEMENT)]             \\\n    IHTMLElement *srcElement()\n\n    WINE_IDOMEVENT_DISPINTERFACE_DECL;\n}\n\n/*****************************************************************************\n *    IDOMUIEvent interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(305106ca-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IDOMUIEvent : IDispatch\n{\n    [propget, id(DISPID_IDOMUIEVENT_VIEW)]\n    HRESULT view([out, retval] IHTMLWindow2 **p);\n\n    [propget, id(DISPID_IDOMUIEVENT_DETAIL)]\n    HRESULT detail([out, retval] long *p);\n\n    [id(DISPID_IDOMUIEVENT_INITUIEVENT)]\n    HRESULT initUIEvent(\n        [in] BSTR eventType,\n        [in] VARIANT_BOOL canBubble,\n        [in] VARIANT_BOOL cancelable,\n        [in] IHTMLWindow2 *view,\n        [in] long detail);\n}\n\n/*****************************************************************************\n *    DispDOMUIEvent dispinterface\n */\n[\n    hidden,\n    uuid(30590072-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispDOMUIEvent\n{\nproperties:\nmethods:\n#define WINE_IDOMUIEVENT_DISPINTERFACE_DECL                \\\n    [propget, id(DISPID_IDOMUIEVENT_VIEW)]                 \\\n    IHTMLWindow2 *view();                                  \\\n                                                           \\\n    [propget, id(DISPID_IDOMUIEVENT_DETAIL)]               \\\n    long detail();                                         \\\n                                                           \\\n    [id(DISPID_IDOMUIEVENT_INITUIEVENT)]                   \\\n    void initUIEvent(                                      \\\n            [in] BSTR eventType,                           \\\n            [in] VARIANT_BOOL canBubble,                   \\\n            [in] VARIANT_BOOL cancelable,                  \\\n            [in] IHTMLWindow2 *view,                       \\\n            [in] long detail)\n\n    WINE_IDOMEVENT_DISPINTERFACE_DECL;\n    WINE_IDOMUIEVENT_DISPINTERFACE_DECL;\n}\n\n/*****************************************************************************\n *    IDOMMouseEvent interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(305106ce-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IDOMMouseEvent : IDispatch\n{\n    [propget, id(DISPID_IDOMMOUSEEVENT_SCREENX)]\n    HRESULT screenX([out, retval] long *p);\n\n    [propget, id(DISPID_IDOMMOUSEEVENT_SCREENY)]\n    HRESULT screenY([out, retval] long *p);\n\n    [propget, id(DISPID_IDOMMOUSEEVENT_CLIENTX)]\n    HRESULT clientX([out, retval] long *p);\n\n    [propget, id(DISPID_IDOMMOUSEEVENT_CLIENTY)]\n    HRESULT clientY([out, retval] long *p);\n\n    [propget, id(DISPID_IDOMMOUSEEVENT_CTRLKEY)]\n    HRESULT ctrlKey([out, retval] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IDOMMOUSEEVENT_SHIFTKEY)]\n    HRESULT shiftKey([out, retval] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IDOMMOUSEEVENT_ALTKEY)]\n    HRESULT altKey([out, retval] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IDOMMOUSEEVENT_METAKEY)]\n    HRESULT metaKey([out, retval] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IDOMMOUSEEVENT_BUTTON)]\n    HRESULT button([out, retval] USHORT *p);\n\n    [propget, id(DISPID_IDOMMOUSEEVENT_RELATEDTARGET)]\n    HRESULT relatedTarget([out, retval] IEventTarget **p);\n\n    [id(DISPID_IDOMMOUSEEVENT_INITMOUSEEVENT)]\n    HRESULT initMouseEvent(\n            [in] BSTR eventType,\n            [in] VARIANT_BOOL canBubble,\n            [in] VARIANT_BOOL cancelable,\n            [in] IHTMLWindow2 *viewArg,\n            [in] long detailArg,\n            [in] long screenXArg,\n            [in] long screenYArg,\n            [in] long clientXArg,\n            [in] long clientYArg,\n            [in] VARIANT_BOOL ctrlKeyArg,\n            [in] VARIANT_BOOL altKeyArg,\n            [in] VARIANT_BOOL shiftKeyArg,\n            [in] VARIANT_BOOL metaKeyArg,\n            [in] USHORT buttonArg,\n            [in] IEventTarget *relatedTargetArg);\n\n    [id(DISPID_IDOMMOUSEEVENT_GETMODIFIERSTATE)]\n    HRESULT getModifierState(\n            [in] BSTR keyArg,\n            [out, retval] VARIANT_BOOL *activated);\n\n    [propget, id(DISPID_IDOMMOUSEEVENT_BUTTONS)]\n    HRESULT buttons([out, retval] USHORT *p);\n\n    [propget, id(DISPID_IDOMMOUSEEVENT_FROMELEMENT)]\n    HRESULT fromElement([out, retval] IHTMLElement **p);\n\n    [propget, id(DISPID_IDOMMOUSEEVENT_TOELEMENT)]\n    HRESULT toElement([out, retval] IHTMLElement **p);\n\n    [propget, id(DISPID_IDOMMOUSEEVENT_X)]\n    HRESULT x([out, retval] long *p);\n\n    [propget, id(DISPID_IDOMMOUSEEVENT_Y)]\n    HRESULT y([out, retval] long *p);\n\n    [propget, id(DISPID_IDOMMOUSEEVENT_OFFSETX)]\n    HRESULT offsetX([out, retval] long *p);\n\n    [propget, id(DISPID_IDOMMOUSEEVENT_OFFSETY)]\n    HRESULT offsetY([out, retval] long *p);\n\n    [propget, id(DISPID_IDOMMOUSEEVENT_PAGEX)]\n    HRESULT pageX([out, retval] long *p);\n\n    [propget, id(DISPID_IDOMMOUSEEVENT_PAGEY)]\n    HRESULT pageY([out, retval] long *p);\n\n    [propget, id(DISPID_IDOMMOUSEEVENT_LAYERX)]\n    HRESULT layerX([out, retval] long *p);\n\n    [propget, id(DISPID_IDOMMOUSEEVENT_LAYERY)]\n    HRESULT layerY([out, retval] long *p);\n\n    [propget, id(DISPID_IDOMMOUSEEVENT_WHICH)]\n    HRESULT which([out, retval] USHORT *p);\n}\n\n/*****************************************************************************\n *    DispDOMMouseEvent dispinterface\n */\n[\n    hidden,\n    uuid(30590073-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispDOMMouseEvent\n{\nproperties:\nmethods:\n#define WINE_IDOMMOUSEEVENT_DISPINTERFACE_DECL             \\\n    [propget, id(DISPID_IDOMMOUSEEVENT_SCREENX)]           \\\n    long screenX();                                        \\\n                                                           \\\n    [propget, id(DISPID_IDOMMOUSEEVENT_SCREENY)]           \\\n    long screenY();                                        \\\n                                                           \\\n    [propget, id(DISPID_IDOMMOUSEEVENT_CLIENTX)]           \\\n    long clientX();                                        \\\n                                                           \\\n    [propget, id(DISPID_IDOMMOUSEEVENT_CLIENTY)]           \\\n    long clientY();                                        \\\n                                                           \\\n    [propget, id(DISPID_IDOMMOUSEEVENT_CTRLKEY)]           \\\n    VARIANT_BOOL ctrlKey();                                \\\n                                                           \\\n    [propget, id(DISPID_IDOMMOUSEEVENT_SHIFTKEY)]          \\\n    VARIANT_BOOL shiftKey();                               \\\n                                                           \\\n    [propget, id(DISPID_IDOMMOUSEEVENT_ALTKEY)]            \\\n    VARIANT_BOOL altKey();                                 \\\n                                                           \\\n    [propget, id(DISPID_IDOMMOUSEEVENT_METAKEY)]           \\\n    VARIANT_BOOL metaKey();                                \\\n                                                           \\\n    [propget, id(DISPID_IDOMMOUSEEVENT_BUTTON)]            \\\n    USHORT button();                                       \\\n                                                           \\\n    [propget, id(DISPID_IDOMMOUSEEVENT_RELATEDTARGET)]     \\\n    IEventTarget *relatedTarget();                         \\\n                                                           \\\n    [id(DISPID_IDOMMOUSEEVENT_INITMOUSEEVENT)]             \\\n    void initMouseEvent(                                   \\\n            [in] BSTR eventType,                           \\\n            [in] VARIANT_BOOL canBubble,                   \\\n            [in] VARIANT_BOOL cancelable,                  \\\n            [in] IHTMLWindow2 *viewArg,                    \\\n            [in] long detailArg,                           \\\n            [in] long screenXArg,                          \\\n            [in] long screenYArg,                          \\\n            [in] long clientXArg,                          \\\n            [in] long clientYArg,                          \\\n            [in] VARIANT_BOOL ctrlKeyArg,                  \\\n            [in] VARIANT_BOOL altKeyArg,                   \\\n            [in] VARIANT_BOOL shiftKeyArg,                 \\\n            [in] VARIANT_BOOL metaKeyArg,                  \\\n            [in] USHORT buttonArg,                         \\\n            [in] IEventTarget *relatedTargetArg);          \\\n                                                           \\\n    [id(DISPID_IDOMMOUSEEVENT_GETMODIFIERSTATE)]           \\\n    VARIANT_BOOL getModifierState([in] BSTR keyArg);       \\\n                                                           \\\n    [propget, id(DISPID_IDOMMOUSEEVENT_BUTTONS)]           \\\n    USHORT buttons();                                      \\\n                                                           \\\n    [propget, id(DISPID_IDOMMOUSEEVENT_FROMELEMENT)]       \\\n    IHTMLElement *fromElement();                           \\\n                                                           \\\n    [propget, id(DISPID_IDOMMOUSEEVENT_TOELEMENT)]         \\\n    IHTMLElement *toElement();                             \\\n                                                           \\\n    [propget, id(DISPID_IDOMMOUSEEVENT_X)]                 \\\n    long x();                                              \\\n                                                           \\\n    [propget, id(DISPID_IDOMMOUSEEVENT_Y)]                 \\\n    long y();                                              \\\n                                                           \\\n    [propget, id(DISPID_IDOMMOUSEEVENT_OFFSETX)]           \\\n    long offsetX();                                        \\\n                                                           \\\n    [propget, id(DISPID_IDOMMOUSEEVENT_OFFSETY)]           \\\n    long offsetY();                                        \\\n                                                           \\\n    [propget, id(DISPID_IDOMMOUSEEVENT_PAGEX)]             \\\n    long pageX();                                          \\\n                                                           \\\n    [propget, id(DISPID_IDOMMOUSEEVENT_PAGEY)]             \\\n    long pageY();                                          \\\n                                                           \\\n    [propget, id(DISPID_IDOMMOUSEEVENT_LAYERX)]            \\\n    long layerX();                                         \\\n                                                           \\\n    [propget, id(DISPID_IDOMMOUSEEVENT_LAYERY)]            \\\n    long layerY();                                         \\\n                                                           \\\n    [propget, id(DISPID_IDOMMOUSEEVENT_WHICH)]             \\\n    USHORT which()\n\n    WINE_IDOMEVENT_DISPINTERFACE_DECL;\n    WINE_IDOMUIEVENT_DISPINTERFACE_DECL;\n    WINE_IDOMMOUSEEVENT_DISPINTERFACE_DECL;\n}\n\n/*****************************************************************************\n *    IDOMKeyboardEvent interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(305106d6-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IDOMKeyboardEvent : IDispatch\n{\n    [propget, id(DISPID_IDOMKEYBOARDEVENT_KEY)]\n    HRESULT key([retval, out] BSTR *p);\n\n    [propget, id(DISPID_IDOMKEYBOARDEVENT_LOCATION)]\n    HRESULT location([out, retval] ULONG *p);\n\n    [propget, id(DISPID_IDOMKEYBOARDEVENT_CTRLKEY)]\n    HRESULT ctrlKey([out, retval] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IDOMKEYBOARDEVENT_SHIFTKEY)]\n    HRESULT shiftKey([out, retval] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IDOMKEYBOARDEVENT_ALTKEY)]\n    HRESULT altKey([out, retval] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IDOMKEYBOARDEVENT_METAKEY)]\n    HRESULT metaKey([out, retval] VARIANT_BOOL *p);\n\n    [propget, id(DISPID_IDOMKEYBOARDEVENT_REPEAT)]\n    HRESULT repeat([out, retval] VARIANT_BOOL *p);\n\n    [id(DISPID_IDOMKEYBOARDEVENT_GETMODIFIERSTATE)]\n    HRESULT getModifierState(\n            [in] BSTR keyArg,\n            [out, retval] VARIANT_BOOL *state);\n\n    [id(DISPID_IDOMKEYBOARDEVENT_INITKEYBOARDEVENT)]\n    HRESULT initKeyboardEvent(\n            [in] BSTR eventType,\n            [in] VARIANT_BOOL canBubble,\n            [in] VARIANT_BOOL cancelable,\n            [in] IHTMLWindow2 *viewArg,\n            [in] BSTR keyArg,\n            [in] ULONG locationArg,\n            [in] BSTR modifiersListArg,\n            [in] VARIANT_BOOL repeat,\n            [in] BSTR locale);\n\n    [propget, id(DISPID_IDOMKEYBOARDEVENT_KEYCODE)]\n    HRESULT keyCode([out, retval] long *p);\n\n    [propget, id(DISPID_IDOMKEYBOARDEVENT_CHARCODE)]\n    HRESULT charCode([out, retval] long *p);\n\n    [propget, id(DISPID_IDOMKEYBOARDEVENT_WHICH)]\n    HRESULT which([out, retval] long *p);\n\n    [propget, id(DISPID_IDOMKEYBOARDEVENT_IE9_CHAR)]\n    HRESULT ie9_char([out, retval] VARIANT *p);\n\n    [propget, id(DISPID_IDOMKEYBOARDEVENT_LOCALE)]\n    HRESULT locale([out, retval] BSTR *p);\n}\n\n/*****************************************************************************\n *    DispDOMKeyboardEvent dispinterface\n */\n[\n    hidden,\n    uuid(30590077-98b5-11cf-bb82-00aa00bdce0b)\n]\ndispinterface DispDOMKeyboardEvent\n{\nproperties:\nmethods:\n    WINE_IDOMEVENT_DISPINTERFACE_DECL;\n    WINE_IDOMUIEVENT_DISPINTERFACE_DECL;\n\n    [propget, id(DISPID_IDOMKEYBOARDEVENT_KEY)]\n    BSTR key();\n\n    [propget, id(DISPID_IDOMKEYBOARDEVENT_LOCATION)]\n    ULONG location();\n\n    [propget, id(DISPID_IDOMKEYBOARDEVENT_CTRLKEY)]\n    VARIANT_BOOL ctrlKey();\n\n    [propget, id(DISPID_IDOMKEYBOARDEVENT_SHIFTKEY)]\n    VARIANT_BOOL shiftKey();\n\n    [propget, id(DISPID_IDOMKEYBOARDEVENT_ALTKEY)]\n    VARIANT_BOOL altKey();\n\n    [propget, id(DISPID_IDOMKEYBOARDEVENT_METAKEY)]\n    VARIANT_BOOL metaKey();\n\n    [propget, id(DISPID_IDOMKEYBOARDEVENT_REPEAT)]\n    VARIANT_BOOL repeat();\n\n    [id(DISPID_IDOMKEYBOARDEVENT_GETMODIFIERSTATE)]\n    VARIANT_BOOL getModifierState([in] BSTR keyArg);\n\n    [id(DISPID_IDOMKEYBOARDEVENT_INITKEYBOARDEVENT)]\n    void initKeyboardEvent(\n            [in] BSTR eventType,\n            [in] VARIANT_BOOL canBubble,\n            [in] VARIANT_BOOL cancelable,\n            [in] IHTMLWindow2 *viewArg,\n            [in] BSTR keyArg,\n            [in] ULONG locationArg,\n            [in] BSTR modifiersListArg,\n            [in] VARIANT_BOOL repeat,\n            [in] BSTR locale);\n\n    [propget, id(DISPID_IDOMKEYBOARDEVENT_KEYCODE)]\n    long keyCode();\n\n    [propget, id(DISPID_IDOMKEYBOARDEVENT_CHARCODE)]\n    long charCode();\n\n    [propget, id(DISPID_IDOMKEYBOARDEVENT_WHICH)]\n    long which();\n\n    [propget, id(DISPID_IDOMKEYBOARDEVENT_IE9_CHAR)]\n    VARIANT ie9_char();\n\n    [propget, id(DISPID_IDOMKEYBOARDEVENT_LOCALE)]\n    BSTR locale();\n}\n\n/*****************************************************************************\n *    IDOMMessageEvent interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(30510720-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IDOMMessageEvent : IDispatch\n{\n    [propget, id(DISPID_IDOMMESSAGEEVENT_DATA)]\n    HRESULT data([out, retval] BSTR *p);\n\n    [propget, id(DISPID_IDOMMESSAGEEVENT_ORIGIN)]\n    HRESULT origin([out, retval] BSTR *p);\n\n    [propget, id(DISPID_IDOMMESSAGEEVENT_SOURCE)]\n    HRESULT source([out, retval] IHTMLWindow2 **p);\n\n    [id(DISPID_IDOMMESSAGEEVENT_INITMESSAGEEVENT)]\n    HRESULT initMessageEvent(\n            [in] BSTR eventType,\n            [in] VARIANT_BOOL canBubble,\n            [in] VARIANT_BOOL cancelable,\n            [in] BSTR data,\n            [in] BSTR origin,\n            [in] BSTR lastEventId,\n            [in] IHTMLWindow2 *source);\n}\n\n/*****************************************************************************\n *    IMarkupContainer interface\n */\n[\n    object,\n    pointer_default(unique),\n    uuid(3050f5f9-98b5-11cf-bb82-00aa00bdce0B)\n]\ninterface IMarkupContainer : IUnknown\n{\n    HRESULT OwningDoc([out] IHTMLDocument2 **ppDoc);\n}\n\n/*****************************************************************************\n *    IMarkupPointer interface\n */\n[\n    object,\n    pointer_default(unique),\n    uuid(3050f49f-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IMarkupPointer : IUnknown\n{\n    HRESULT OwningDoc([out] IHTMLDocument2 **ppDoc);\n\n    HRESULT Gravity([out] POINTER_GRAVITY *pGravity);\n\n    HRESULT SetGravity([in] POINTER_GRAVITY Gravity);\n\n    HRESULT Cling([out] BOOL *pfCling);\n\n    HRESULT SetCling([in] BOOL fCLing);\n\n    HRESULT UnPosition();\n\n    HRESULT IsPositioned([out] BOOL *pfPositioned);\n\n    HRESULT GetContainer([out] IMarkupContainer **ppContainer);\n\n    HRESULT MoveAdjacentToElement(\n        [in] IHTMLElement *pElement,\n        [in] ELEMENT_ADJACENCY eAdj);\n\n    HRESULT MoveToPointer([in] IMarkupPointer *pPointer);\n\n    HRESULT MoveToContainer(\n        [in] IMarkupContainer *pContainer,\n        [in] BOOL fAtStart);\n\n    HRESULT Left(\n        [in] BOOL fMove,\n        [out] MARKUP_CONTEXT_TYPE *pContext,\n        [out] IHTMLElement **ppElement,\n        [in, out] LONG *pcch,\n        [out, size_is(*pcch)] OLECHAR *pchText);\n\n    HRESULT Right(\n        [in] BOOL fMove,\n        [out] MARKUP_CONTEXT_TYPE *pContext,\n        [out] IHTMLElement **ppElement,\n        [in, out] LONG *pcch,\n        [out, size_is(*pcch)] OLECHAR *pchText);\n\n    HRESULT CurrentScope([out] IHTMLElement **ppElemCurrent);\n\n    HRESULT IsLeftOf(\n        [in] IMarkupPointer *pPointerThat,\n        [out] BOOL *pfResult);\n\n    HRESULT IsLeftOfOrEqualTo(\n        [in] IMarkupPointer *pPointerThat,\n        [out] BOOL *pfResult);\n\n    HRESULT IsRightOf(\n        [in] IMarkupPointer *pPointerThat,\n        [out] BOOL *pfResult);\n\n    HRESULT IsRightOfOrEqualTo(\n        [in] IMarkupPointer *pPointerThat,\n        [out] BOOL *pfResult);\n\n    HRESULT IsEqualTo(\n        [in] IMarkupPointer *pPointerThat,\n        [out] BOOL *pfAreEqual);\n\n    HRESULT MoveUnit([in] MOVEUNIT_ACTION muAction);\n\n    HRESULT FindText(\n        [in] OLECHAR *pchFindText,\n        [in] DWORD dwFlags,\n        [in] IMarkupPointer *pIEndMatch,\n        [in] IMarkupPointer *pIEndSearch);\n}\n\n/*****************************************************************************\n *    IHTMLDOMConstructorCollection interface\n */\n[\n    odl,\n    oleautomation,\n    dual,\n    uuid(3051049c-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLDOMConstructorCollection : IDispatch\n{\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_ATTR)]\n    HRESULT Attr([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_BEHAVIORURNSCOLLECTION)]\n    HRESULT BehaviorUrnsCollection([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_BOOKMARKCOLLECTION)]\n    HRESULT BookmarkCollection([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_COMPATIBLEINFO)]\n    HRESULT CompatibleInfo([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_COMPATIBLEINFOCOLLECTION)]\n    HRESULT CompatibleInfoCollection([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CONTROLRANGECOLLECTION)]\n    HRESULT ControlRangeCollection([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSCURRENTSTYLEDECLARATION)]\n    HRESULT CSSCurrentStyleDeclaration([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSRULELIST)]\n    HRESULT CSSRuleList([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSRULESTYLEDECLARATION)]\n    HRESULT CSSRuleStyleDeclaration([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLEDECLARATION)]\n    HRESULT CSSStyleDeclaration([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLERULE)]\n    HRESULT CSSStyleRule([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLESHEET)]\n    HRESULT CSSStyleSheet([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_DATATRANSFER)]\n    HRESULT DataTransfer([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_DOMIMPLEMENTATION)]\n    HRESULT DOMImplementation([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_ELEMENT)]\n    HRESULT Element([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_EVENT)]\n    HRESULT Event([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HISTORY)]\n    HRESULT History([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTCELEMENTBEHAVIORDEFAULTS)]\n    HRESULT HTCElementBehaviorDefaults([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLANCHORELEMENT)]\n    HRESULT HTMLAnchorElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLAREAELEMENT)]\n    HRESULT HTMLAreaElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLAREASCOLLECTION)]\n    HRESULT HTMLAreasCollection([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBASEELEMENT)]\n    HRESULT HTMLBaseElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBASEFONTELEMENT)]\n    HRESULT HTMLBaseFontElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBGSOUNDELEMENT)]\n    HRESULT HTMLBGSoundElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBLOCKELEMENT)]\n    HRESULT HTMLBlockElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBODYELEMENT)]\n    HRESULT HTMLBodyElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBRELEMENT)]\n    HRESULT HTMLBRElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBUTTONELEMENT)]\n    HRESULT HTMLButtonElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLCOLLECTION)]\n    HRESULT HTMLCollection([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLCOMMENTELEMENT)]\n    HRESULT HTMLCommentElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDDELEMENT)]\n    HRESULT HTMLDDElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDIVELEMENT)]\n    HRESULT HTMLDivElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDOCUMENT)]\n    HRESULT HTMLDocument([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDLISTELEMENT)]\n    HRESULT HTMLDListElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDTELEMENT)]\n    HRESULT HTMLDTElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLEMBEDELEMENT)]\n    HRESULT HTMLEmbedElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFIELDSETELEMENT)]\n    HRESULT HTMLFieldSetElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFONTELEMENT)]\n    HRESULT HTMLFontElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFORMELEMENT)]\n    HRESULT HTMLFormElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFRAMEELEMENT)]\n    HRESULT HTMLFrameElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFRAMESETELEMENT)]\n    HRESULT HTMLFrameSetElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLGENERICELEMENT)]\n    HRESULT HTMLGenericElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHEADELEMENT)]\n    HRESULT HTMLHeadElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHEADINGELEMENT)]\n    HRESULT HTMLHeadingElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHRELEMENT)]\n    HRESULT HTMLHRElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHTMLELEMENT)]\n    HRESULT HTMLHtmlElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLIFRAMEELEMENT)]\n    HRESULT HTMLIFrameElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLIMAGEELEMENT)]\n    HRESULT HTMLImageElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLINPUTELEMENT)]\n    HRESULT HTMLInputElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLISINDEXELEMENT)]\n    HRESULT HTMLIsIndexElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLABELELEMENT)]\n    HRESULT HTMLLabelElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLEGENDELEMENT)]\n    HRESULT HTMLLegendElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLIELEMENT)]\n    HRESULT HTMLLIElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLINKELEMENT)]\n    HRESULT HTMLLinkElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMAPELEMENT)]\n    HRESULT HTMLMapElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMARQUEEELEMENT)]\n    HRESULT HTMLMarqueeElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMETAELEMENT)]\n    HRESULT HTMLMetaElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMODELESSDIALOG)]\n    HRESULT HTMLModelessDialog([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNAMESPACEINFO)]\n    HRESULT HTMLNamespaceInfo([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNAMESPACEINFOCOLLECTION)]\n    HRESULT HTMLNamespaceInfoCollection([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNEXTIDELEMENT)]\n    HRESULT HTMLNextIdElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNOSHOWELEMENT)]\n    HRESULT HTMLNoShowElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOBJECTELEMENT)]\n    HRESULT HTMLObjectElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOLISTELEMENT)]\n    HRESULT HTMLOListElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOPTIONELEMENT)]\n    HRESULT HTMLOptionElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPARAGRAPHELEMENT)]\n    HRESULT HTMLParagraphElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPARAMELEMENT)]\n    HRESULT HTMLParamElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPHRASEELEMENT)]\n    HRESULT HTMLPhraseElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPLUGINSCOLLECTION)]\n    HRESULT HTMLPluginsCollection([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPOPUP)]\n    HRESULT HTMLPopup([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSCRIPTELEMENT)]\n    HRESULT HTMLScriptElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSELECTELEMENT)]\n    HRESULT HTMLSelectElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSPANELEMENT)]\n    HRESULT HTMLSpanElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSTYLEELEMENT)]\n    HRESULT HTMLStyleElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECAPTIONELEMENT)]\n    HRESULT HTMLTableCaptionElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECELLELEMENT)]\n    HRESULT HTMLTableCellElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECOLELEMENT)]\n    HRESULT HTMLTableColElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLEELEMENT)]\n    HRESULT HTMLTableElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLEROWELEMENT)]\n    HRESULT HTMLTableRowElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLESECTIONELEMENT)]\n    HRESULT HTMLTableSectionElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTEXTAREAELEMENT)]\n    HRESULT HTMLTextAreaElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTEXTELEMENT)]\n    HRESULT HTMLTextElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTITLEELEMENT)]\n    HRESULT HTMLTitleElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLULISTELEMENT)]\n    HRESULT HTMLUListElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLUNKNOWNELEMENT)]\n    HRESULT HTMLUnknownElement([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_IMAGE)]\n    HRESULT Image([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_LOCATION)]\n    HRESULT Location([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NAMEDNODEMAP)]\n    HRESULT NamedNodeMap([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NAVIGATOR)]\n    HRESULT Navigator([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NODELIST)]\n    HRESULT NodeList([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_OPTION)]\n    HRESULT Option([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_SCREEN)]\n    HRESULT Screen([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_SELECTION)]\n    HRESULT Selection([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STATICNODELIST)]\n    HRESULT StaticNodeList([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STORAGE)]\n    HRESULT Storage([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETLIST)]\n    HRESULT StyleSheetList([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETPAGE)]\n    HRESULT StyleSheetPage([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETPAGELIST)]\n    HRESULT StyleSheetPageList([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXT)]\n    HRESULT Text([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRANGE)]\n    HRESULT TextRange([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRANGECOLLECTION)]\n    HRESULT TextRangeCollection([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRECTANGLE)]\n    HRESULT TextRectangle([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRECTANGLELIST)]\n    HRESULT TextRectangleList([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_WINDOW)]\n    HRESULT Window([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_XDOMAINREQUEST)]\n    HRESULT XDomainRequest([out, retval] IDispatch **p);\n\n    [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_XMLHTTPREQUEST)]\n    HRESULT XMLHttpRequest([out, retval] IDispatch **p);\n}\n\n/*****************************************************************************\n *    IXMLGenericParse interface\n */\n[\n    object,\n    pointer_default(unique),\n    uuid(E4E23071-4D07-11d2-AE76-0080C73BC199)\n]\ninterface IXMLGenericParse : IUnknown\n{\n    HRESULT SetGenericParse(\n        [in] VARIANT_BOOL fDoGeneric);\n}\n\n/*****************************************************************************\n *    ISegment interface\n */\n[\n    object,\n    pointer_default(unique),\n    uuid(3050f683-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface ISegment : IUnknown\n{\n    HRESULT GetPointers(\n        [in] IMarkupPointer *pIStart,\n        [in] IMarkupPointer *pIEnd);\n}\n\n/*****************************************************************************\n *    IElementSegment interface\n */\n[\n    object,\n    pointer_default(unique),\n    uuid(3050f68f-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IElementSegment : ISegment\n{\n    HRESULT GetElement([out] IHTMLElement **ppIElement);\n\n    HRESULT SetPrimary([in] BOOL fPrimary);\n\n    HRESULT IsPrimary([out] BOOL *pfPrimary);\n}\n\n/*****************************************************************************\n *    ISelectionServicesListener interface\n */\n[\n    object,\n    pointer_default(unique),\n    uuid(3050f699-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface ISelectionServicesListener : IUnknown\n{\n    HRESULT BeginSelectionUndo();\n\n    HRESULT EndSelectionUndo();\n\n    HRESULT OnSelectedElementExit(\n        [in] IMarkupPointer *pIElementStart,\n        [in] IMarkupPointer *pIElementEnd,\n        [in] IMarkupPointer *pIElementContentStart,\n        [in] IMarkupPointer *pIElementContentEnd);\n\n    HRESULT OnChangeType(\n        [in] SELECTION_TYPE eType,\n        [in] ISelectionServicesListener *pIListener);\n\n    HRESULT GetTypeDetail([out] BSTR *pTypeDetail);\n}\n\n/*****************************************************************************\n *    ISelectionServices interface\n */\n[\n    object,\n    pointer_default(unique),\n    uuid(3050f684-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface ISelectionServices : IUnknown\n{\n    HRESULT SetSelectionType(\n        [in] SELECTION_TYPE eType,\n        [in] ISelectionServicesListener *pIListener);\n\n    HRESULT GetMarkupContainer([out] IMarkupContainer **ppIContainer);\n\n    HRESULT AddSegment(\n        [in] IMarkupPointer *pIStart,\n        [in] IMarkupPointer *pIEnd,\n        [out] ISegment **ppISegmentAdded);\n\n    HRESULT AddElementSegment(\n        [in] IHTMLElement *pIElement,\n        [out] IElementSegment **ppISegmentAdded);\n\n    HRESULT RemoveSegment([in] ISegment *pISegment);\n\n    HRESULT GetSelectionServicesListener([out] ISelectionServicesListener **ppISelectionServicesListener);\n}\n\n/*****************************************************************************\n *    IHTMLEditDesigner interface\n */\n[\n    object,\n    pointer_default(unique),\n    uuid(3050f662-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLEditDesigner : IUnknown\n{\n    HRESULT PreHandleEvent(\n        [in] DISPID inEvtDispId,\n        [in] IHTMLEventObj *pIEventObj);\n\n    HRESULT PostHandleEvent(\n        [in] DISPID inEvtDispId,\n        [in] IHTMLEventObj *pIEventObj);\n\n    HRESULT TranslateAccelerator(\n        [in] DISPID inEvtDispId,\n        [in] IHTMLEventObj *pIEventObj);\n\n    HRESULT PostEditorEventNotify(\n        [in] DISPID inEvtDispId,\n        [in] IHTMLEventObj *pIEventObj);\n}\n\n/*****************************************************************************\n *    IHTMLEditServices interface\n */\n[\n    object,\n    pointer_default(unique),\n    uuid(3050f663-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IHTMLEditServices : IUnknown\n{\n    HRESULT AddDesigner([in] IHTMLEditDesigner *pIDesigner);\n\n    HRESULT RemoveDesigner([in] IHTMLEditDesigner *pIDesigner);\n\n    HRESULT GetSelectionServices(\n        [in] IMarkupContainer *pIContainer,\n        [out] ISelectionServices **ppSelSvc);\n\n    HRESULT MoveToSelectionAnchor([in] IMarkupPointer *pIStartAnchor);\n\n    HRESULT MoveToSelectionEnd([in] IMarkupPointer *pIEndAnchor);\n\n    HRESULT SelectRange(\n        [in] IMarkupPointer* pStart,\n        [in] IMarkupPointer* pEnd,\n        [in] SELECTION_TYPE eType);\n}\n\n/*****************************************************************************\n *    IElementBehaviorSite interface\n */\n[\n    odl,\n    uuid(3050F427-98B5-11CF-BB82-00AA00BDCE0B)\n]\ninterface IElementBehaviorSite : IUnknown {\n    HRESULT GetElement([out, retval] IHTMLElement **ppElement);\n    HRESULT RegisterNotification([in] long lEvent);\n}\n\n/*****************************************************************************\n *    IElementBehavior interface\n */\n[\n    odl,\n    uuid(3050F425-98B5-11CF-BB82-00AA00BDCE0B)\n]\ninterface IElementBehavior : IUnknown {\n    HRESULT Init([in] IElementBehaviorSite *pBehaviorSite);\n    HRESULT Notify([in] long lEvent,  [in, out] VARIANT *pVar);\n    HRESULT Detach();\n}\n\n/*****************************************************************************\n *    IElementBehaviorFactory interface\n */\n[\n    odl,\n    uuid(3050f429-98b5-11cf-bb82-00aa00bdce0b)\n]\ninterface IElementBehaviorFactory : IUnknown\n{\n    HRESULT FindBehavior(\n        [in] BSTR bstrBehavior,\n        [in] BSTR bstrBehaviorUrl,\n        [in] IElementBehaviorSite *pSite,\n        [out] IElementBehavior **ppBehavior);\n}\n\n} /* library MSHTML */\n\ninterface IOleCommandTarget;\n\n/*****************************************************************************\n *    IHTMLPrivateWindow interface\n */\n[\n    object,\n    uuid(3050f6dc-98b5-11cf-bb82-00aa00bdce0b),\n    local\n]\ninterface IHTMLPrivateWindow : IUnknown\n{\n    HRESULT SuperNavigate(BSTR url, BSTR arg2, BSTR arg3, BSTR arg4, VARIANT *post_data, VARIANT *headers, ULONG flags);\n    HRESULT GetPendingUrl(BSTR *url);\n    HRESULT SetPICSTarget(IOleCommandTarget *cmdtrg);\n    HRESULT PICSComplete(int arg);\n    HRESULT FindWindowByName(LPCWSTR name, IHTMLWindow2 **ret);\n    HRESULT GetAddressBarUrl(BSTR *url);\n}\n\n/*****************************************************************************\n *    IWebBrowserPriv interface\n */\n[\n    object,\n    uuid(3050f804-98b5-11cf-bb82-00aa00bdce0b),\n    local\n]\ninterface IWebBrowserPriv : IUnknown\n{\n    HRESULT NavigateWithBindCtx(VARIANT *uri, VARIANT *flags, VARIANT *target_frame, VARIANT *post_data,\n            VARIANT *headers, IBindCtx *bind_ctx, LPOLESTR url_fragment);\n    HRESULT OnClose();\n}\n\n/*****************************************************************************\n *    IWebBrowserPriv2IE8 interface\n */\n[\n    object,\n    uuid(3ed72303-6ffc-4214-ba90-faf1862dec8a),\n    local\n]\ninterface IWebBrowserPriv2IE8 : IUnknown\n{\n  HRESULT NavigateWithBindCtx2(IUri *uri, VARIANT *flags, VARIANT *target_frame, VARIANT *post_data,\n          VARIANT *headers, IBindCtx *bind_ctx, LPOLESTR url_fragment);\n  HRESULT SetBrowserFrameOptions(DWORD opt1, DWORD opt2);\n  HRESULT DetachConnectionPoints();\n  HRESULT GetProcessId(DWORD *pid);\n  HRESULT CompatAttachEditEvents();\n  HRESULT HandleOpenOptions(IUnknown *obj, BSTR bstr, int options);\n  HRESULT SetSearchTerm(BSTR term);\n  HRESULT GetSearchTerm(BSTR *term);\n  HRESULT GetCurrentDocument(IDispatch** doc);\n}\n\n/*****************************************************************************\n *    IWebBrowserPriv2IE9 interface\n */\n[\n    object,\n    uuid(3ed72303-6ffc-4214-ba90-faf1862dec8a),\n    local\n]\ninterface IWebBrowserPriv2IE9 : IUnknown\n{\n    HRESULT NavigateWithBindCtx2(IUri *uri, VARIANT *flags, VARIANT *target_frame, VARIANT *post_data,\n            VARIANT *headers, IBindCtx *bind_ctx, LPOLESTR url_fragment, DWORD unused);\n    /* Probably more */\n}\n"
  },
  {
    "path": "wine/windows/msi.h",
    "content": "/*\n * Copyright (C) 2002,2003 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_MSI_H\n#define __WINE_MSI_H\n\n#ifndef _MSI_NO_CRYPTO\n#include <wincrypt.h>\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef ULONG MSIHANDLE;\n\ntypedef enum tagINSTALLSTATE\n{\n    INSTALLSTATE_NOTUSED = -7,\n    INSTALLSTATE_BADCONFIG = -6,\n    INSTALLSTATE_INCOMPLETE = -5,\n    INSTALLSTATE_SOURCEABSENT = -4,\n    INSTALLSTATE_MOREDATA = -3,\n    INSTALLSTATE_INVALIDARG = -2,\n    INSTALLSTATE_UNKNOWN = -1,\n    INSTALLSTATE_BROKEN = 0,\n    INSTALLSTATE_ADVERTISED = 1,\n    INSTALLSTATE_ABSENT = 2,\n    INSTALLSTATE_LOCAL = 3,\n    INSTALLSTATE_SOURCE = 4,\n    INSTALLSTATE_DEFAULT = 5\n} INSTALLSTATE;\n\ntypedef enum tagMSIPATCHSTATE\n{\n    MSIPATCHSTATE_INVALID = 0,\n    MSIPATCHSTATE_APPLIED = 1,\n    MSIPATCHSTATE_SUPERSEDED = 2,\n    MSIPATCHSTATE_OBSOLETED = 4,\n    MSIPATCHSTATE_REGISTERED = 8,\n    MSIPATCHSTATE_ALL = (MSIPATCHSTATE_APPLIED | MSIPATCHSTATE_SUPERSEDED |\n                         MSIPATCHSTATE_OBSOLETED | MSIPATCHSTATE_REGISTERED)\n} MSIPATCHSTATE;\n\ntypedef enum tagINSTALLUILEVEL\n{\n    INSTALLUILEVEL_NOCHANGE = 0,\n    INSTALLUILEVEL_DEFAULT = 1,\n    INSTALLUILEVEL_NONE = 2,\n    INSTALLUILEVEL_BASIC = 3,\n    INSTALLUILEVEL_REDUCED = 4,\n    INSTALLUILEVEL_FULL = 5,\n    INSTALLUILEVEL_HIDECANCEL = 0x20,\n    INSTALLUILEVEL_PROGRESSONLY = 0x40,\n    INSTALLUILEVEL_ENDDIALOG = 0x80,\n    INSTALLUILEVEL_SOURCERESONLY = 0x100\n} INSTALLUILEVEL;\n\ntypedef enum tagUSERINFOSTATE\n{\n    USERINFOSTATE_MOREDATA = -3,\n    USERINFOSTATE_INVALIDARG = -2,\n    USERINFOSTATE_UNKNOWN = -1,\n    USERINFOSTATE_ABSENT = 0,\n    USERINFOSTATE_PRESENT = 1,\n} USERINFOSTATE;\n\ntypedef enum tagINSTALLLEVEL\n{\n    INSTALLLEVEL_DEFAULT = 0,\n    INSTALLLEVEL_MINIMUM = 1,\n    INSTALLLEVEL_MAXIMUM = 0xFFFF\n} INSTALLLEVEL;\n\ntypedef enum tagINSTALLMESSAGE\n{\n    INSTALLMESSAGE_FATALEXIT = 0,\n    INSTALLMESSAGE_ERROR = 0x01000000,\n    INSTALLMESSAGE_WARNING = 0x02000000,\n    INSTALLMESSAGE_USER = 0x03000000,\n    INSTALLMESSAGE_INFO = 0x04000000,\n    INSTALLMESSAGE_FILESINUSE = 0x05000000,\n    INSTALLMESSAGE_RESOLVESOURCE = 0x06000000,\n    INSTALLMESSAGE_OUTOFDISKSPACE = 0x07000000,\n    INSTALLMESSAGE_ACTIONSTART = 0x08000000,\n    INSTALLMESSAGE_ACTIONDATA = 0x09000000,\n    INSTALLMESSAGE_PROGRESS = 0x0a000000,\n    INSTALLMESSAGE_COMMONDATA = 0x0b000000,\n    INSTALLMESSAGE_INITIALIZE = 0x0c000000,\n    INSTALLMESSAGE_TERMINATE = 0x0d000000,\n    INSTALLMESSAGE_SHOWDIALOG = 0x0e000000,\n    INSTALLMESSAGE_RMFILESINUSE = 0x19000000,\n    INSTALLMESSAGE_INSTALLSTART = 0x1A000000,\n    INSTALLMESSAGE_INSTALLEND = 0x1B000000,\n} INSTALLMESSAGE;\n\ntypedef enum tagREINSTALLMODE\n{\n    REINSTALLMODE_REPAIR = 0x00000001,\n    REINSTALLMODE_FILEMISSING = 0x00000002,\n    REINSTALLMODE_FILEOLDERVERSION = 0x00000004,\n    REINSTALLMODE_FILEEQUALVERSION = 0x00000008,\n    REINSTALLMODE_FILEEXACT = 0x00000010,\n    REINSTALLMODE_FILEVERIFY = 0x00000020,\n    REINSTALLMODE_FILEREPLACE = 0x00000040,\n    REINSTALLMODE_MACHINEDATA = 0x00000080,\n    REINSTALLMODE_USERDATA = 0x00000100,\n    REINSTALLMODE_SHORTCUT = 0x00000200,\n    REINSTALLMODE_PACKAGE = 0x00000400\n} REINSTALLMODE;\n\ntypedef enum tagINSTALLLOGMODE\n{\n    INSTALLLOGMODE_FATALEXIT      = (1 << (INSTALLMESSAGE_FATALEXIT >> 24)),\n    INSTALLLOGMODE_ERROR          = (1 << (INSTALLMESSAGE_ERROR >> 24)),\n    INSTALLLOGMODE_WARNING        = (1 << (INSTALLMESSAGE_WARNING >> 24)),\n    INSTALLLOGMODE_USER           = (1 << (INSTALLMESSAGE_USER >> 24)),\n    INSTALLLOGMODE_INFO           = (1 << (INSTALLMESSAGE_INFO >> 24)),\n    INSTALLLOGMODE_FILESINUSE     = (1 << (INSTALLMESSAGE_FILESINUSE >> 24)),\n    INSTALLLOGMODE_RESOLVESOURCE  = (1 << (INSTALLMESSAGE_RESOLVESOURCE >> 24)),\n    INSTALLLOGMODE_OUTOFDISKSPACE = (1 << (INSTALLMESSAGE_OUTOFDISKSPACE >> 24)),\n    INSTALLLOGMODE_ACTIONSTART    = (1 << (INSTALLMESSAGE_ACTIONSTART >> 24)),\n    INSTALLLOGMODE_ACTIONDATA     = (1 << (INSTALLMESSAGE_ACTIONDATA >> 24)),\n    INSTALLLOGMODE_PROGRESS       = (1 << (INSTALLMESSAGE_PROGRESS >> 24)),\n    INSTALLLOGMODE_PROPERTYDUMP   = (1 << (INSTALLMESSAGE_PROGRESS >> 24)),\n    INSTALLLOGMODE_COMMONDATA     = (1 << (INSTALLMESSAGE_COMMONDATA >> 24)),\n    INSTALLLOGMODE_INITIALIZE     = (1 << (INSTALLMESSAGE_INITIALIZE >> 24)),\n    INSTALLLOGMODE_VERBOSE        = (1 << (INSTALLMESSAGE_INITIALIZE >> 24)),\n    INSTALLLOGMODE_TERMINATE      = (1 << (INSTALLMESSAGE_TERMINATE >> 24)),\n    INSTALLLOGMODE_EXTRADEBUG     = (1 << (INSTALLMESSAGE_TERMINATE >> 24)),\n    INSTALLLOGMODE_SHOWDIALOG     = (1 << (INSTALLMESSAGE_SHOWDIALOG >> 24)),\n    INSTALLLOGMODE_RMFILESINUSE   = (1 << (INSTALLMESSAGE_RMFILESINUSE >> 24)),\n    INSTALLLOGMODE_INSTALLSTART   = (1 << (INSTALLMESSAGE_INSTALLSTART >> 24)),\n    INSTALLLOGMODE_INSTALLEND     = (1 << (INSTALLMESSAGE_INSTALLEND >> 24)),\n} INSTALLLOGMODE;\n\ntypedef enum tagINSTALLLOGATTRIBUTES\n{\n    INSTALLLOGATTRIBUTES_APPEND = 0x00000001,\n    INSTALLLOGATTRIBUTES_FLUSHEACHLINE = 0x00000002\n} INSTALLLOGATTRIBUTES;\n\ntypedef enum tagINSTALLMODE\n{\n    INSTALLMODE_NODETECTION_ANY     = -4,\n    INSTALLMODE_NOSOURCERESOLUTION  = -3,\n    INSTALLMODE_NODETECTION         = -2,\n    INSTALLMODE_EXISTING            = -1,\n    INSTALLMODE_DEFAULT             = 0\n} INSTALLMODE;\n\ntypedef enum tagADVERTISEFLAGS\n{\n    ADVERTISEFLAGS_MACHINEASSIGN = 0,\n    ADVERTISEFLAGS_USERASSIGN = 1\n} ADVERTISEFLAGS;\n\ntypedef enum tagSCRIPTFLAGS\n{\n    SCRIPTFLAGS_CACHEINFO = 1,\n    SCRIPTFLAGS_SHORTCUTS = 4,\n    SCRIPTFLAGS_MACHINEASSIGN = 8,\n    SCRIPTFLAGS_REGDATA_APPINFO = 0x10,\n    SCRIPTFLAGS_REGDATA_CNFGINFO = 0x20,\n    SCRIPTFLAGS_VALIDATE_TRANSFORMS_LIST = 0x40,\n    SCRIPTFLAGS_REGDATA_CLASSINFO = 0x80,\n    SCRIPTFLAGS_REGDATA_EXTENSIONINFO = 0x100,\n} SCRIPTFLAGS;\n\ntypedef enum tagINSTALLTYPE\n{\n    INSTALLTYPE_DEFAULT = 0,\n    INSTALLTYPE_NETWORK_IMAGE = 1,\n    INSTALLTYPE_SINGLE_INSTANCE = 2,\n} INSTALLTYPE;\n\ntypedef enum tagMSIINSTALLCONTEXT\n{\n    MSIINSTALLCONTEXT_FIRSTVISIBLE  =   0,\n    MSIINSTALLCONTEXT_NONE          =   0,\n    MSIINSTALLCONTEXT_USERMANAGED   =   1,\n    MSIINSTALLCONTEXT_USERUNMANAGED =   2,\n    MSIINSTALLCONTEXT_MACHINE       =   4,\n    MSIINSTALLCONTEXT_ALL           = (MSIINSTALLCONTEXT_USERMANAGED | MSIINSTALLCONTEXT_USERUNMANAGED | MSIINSTALLCONTEXT_MACHINE),\n    MSIINSTALLCONTEXT_ALLUSERMANAGED=   8,\n} MSIINSTALLCONTEXT;\n\ntypedef enum tagMSISOURCETYPE\n{\n    MSISOURCETYPE_UNKNOWN = __MSABI_LONG(0x00000000),\n    MSISOURCETYPE_NETWORK = __MSABI_LONG(0x00000001),\n    MSISOURCETYPE_URL     = __MSABI_LONG(0x00000002),\n    MSISOURCETYPE_MEDIA   = __MSABI_LONG(0x00000004)\n} MSISOURCETYPE;\n\ntypedef enum tagMSICODE\n{\n    MSICODE_PRODUCT = __MSABI_LONG(0x00000000),\n    MSICODE_PATCH   = __MSABI_LONG(0x40000000)\n} MSICODE;\n\ntypedef enum tagINSTALLFEATUREATTRIBUTE\n{\n    INSTALLFEATUREATTRIBUTE_FAVORLOCAL             = 1 << 0,\n    INSTALLFEATUREATTRIBUTE_FAVORSOURCE            = 1 << 1,\n    INSTALLFEATUREATTRIBUTE_FOLLOWPARENT           = 1 << 2,\n    INSTALLFEATUREATTRIBUTE_FAVORADVERTISE         = 1 << 3,\n    INSTALLFEATUREATTRIBUTE_DISALLOWADVERTISE      = 1 << 4,\n    INSTALLFEATUREATTRIBUTE_NOUNSUPPORTEDADVERTISE = 1 << 5\n} INSTALLFEATUREATTRIBUTE;\n\ntypedef struct _MSIFILEHASHINFO {\n    ULONG dwFileHashInfoSize;\n    ULONG dwData[4];\n} MSIFILEHASHINFO, *PMSIFILEHASHINFO;\n\ntypedef enum tagMSIPATCHDATATYPE\n{\n    MSIPATCH_DATATYPE_PATCHFILE = 0,\n    MSIPATCH_DATATYPE_XMLPATH = 1,\n    MSIPATCH_DATATYPE_XMLBLOB = 2,\n} MSIPATCHDATATYPE, *PMSIPATCHDATATYPE;\n\ntypedef struct tagMSIPATCHSEQUENCEINFOA\n{\n    LPCSTR szPatchData;\n    MSIPATCHDATATYPE ePatchDataType;\n    DWORD dwOrder;\n    UINT uStatus;\n} MSIPATCHSEQUENCEINFOA, *PMSIPATCHSEQUENCEINFOA;\n\ntypedef struct tagMSIPATCHSEQUENCEINFOW\n{\n    LPCWSTR szPatchData;\n    MSIPATCHDATATYPE ePatchDataType;\n    DWORD dwOrder;\n    UINT uStatus;\n} MSIPATCHSEQUENCEINFOW, *PMSIPATCHSEQUENCEINFOW;\n\n#define MAX_FEATURE_CHARS 38\n\n#define ERROR_PATCH_TARGET_NOT_FOUND        1642\n\n/* Strings defined in msi.h */\n/* Advertised Information */\n\n#define INSTALLPROPERTY_PACKAGENAMEA \"PackageName\"\nstatic const WCHAR INSTALLPROPERTY_PACKAGENAMEW[] = {'P','a','c','k','a','g','e','N','a','m','e',0};\n#define INSTALLPROPERTY_PACKAGENAME WINELIB_NAME_AW(INSTALLPROPERTY_PACKAGENAME)\n\n#define INSTALLPROPERTY_TRANSFORMSA \"Transforms\"\nstatic const WCHAR INSTALLPROPERTY_TRANSFORMSW[] = {'T','r','a','n','s','f','o','r','m','s',0};\n#define INSTALLPROPERTY_TRANSFORMS WINELIB_NAME_AW(INSTALLPROPERTY_TRANSFORMS)\n\n#define INSTALLPROPERTY_LANGUAGEA \"Language\"\nstatic const WCHAR INSTALLPROPERTY_LANGUAGEW[] = {'L','a','n','g','u','a','g','e',0};\n#define INSTALLPROPERTY_LANGUAGE WINELIB_NAME_AW(INSTALLPROPERTY_LANGUAGE)\n\n#define INSTALLPROPERTY_PRODUCTNAMEA \"ProductName\"\nstatic const WCHAR INSTALLPROPERTY_PRODUCTNAMEW[] = {'P','r','o','d','u','c','t','N','a','m','e',0};\n#define INSTALLPROPERTY_PRODUCTNAME WINELIB_NAME_AW(INSTALLPROPERTY_PRODUCTNAME)\n\n#define INSTALLPROPERTY_ASSIGNMENTTYPEA \"AssignmentType\"\nstatic const WCHAR INSTALLPROPERTY_ASSIGNMENTTYPEW[] = {'A','s','s','i','g','n','m','e','n','t','T','y','p','e',0};\n#define INSTALLPROPERTY_ASSIGNMENTTYPE WINELIB_NAME_AW(INSTALLPROPERTY_ASSIGNMENTTYPE)\n\n#define INSTALLPROPERTY_PACKAGECODEA \"PackageCode\"\nstatic const WCHAR INSTALLPROPERTY_PACKAGECODEW[] = {'P','a','c','k','a','g','e','C','o','d','e',0};\n#define INSTALLPROPERTY_PACKAGECODE WINELIB_NAME_AW(INSTALLPROPERTY_PACKAGECODE)\n\n#define INSTALLPROPERTY_VERSIONA \"Version\"\nstatic const WCHAR INSTALLPROPERTY_VERSIONW[]= {'V','e','r','s','i','o','n',0};\n#define INSTALLPROPERTY_VERSION WINELIB_NAME_AW(INSTALLPROPERTY_VERSION)\n\n/* MSI version 1.1 and above */\n\n#define INSTALLPROPERTY_PRODUCTICONA \"ProductIcon\"\nstatic const WCHAR INSTALLPROPERTY_PRODUCTICONW[]  = {'P','r','o','d','u','c','t','I','c','o','n',0};\n#define INSTALLPROPERTY_PRODUCTICON WINELIB_NAME_AW(INSTALLPROPERTY_PRODUCTICON)\n\n/* MSI version 1.5 and above */\n#define INSTALLPROPERTY_INSTANCETYPEA \"InstanceType\"\nstatic const WCHAR INSTALLPROPERTY_INSTANCETYPEW[] = {'I','n','s','t','a','n','c','e','T','y','p','e',0};\n#define INSTALLPROPERTY_INSTANCETYPE WINELIB_NAME_AW(INSTALLPROPERTY_INSTANCETYPE)\n\n/* MSI version 3 and above */\n#define INSTALLPROPERTY_AUTHORIZED_LUA_APPA \"AuthorizedLUAApp\"\nstatic const WCHAR INSTALLPROPERTY_AUTHORIZED_LUA_APPW[] = {'A','u','t','h','o','r','i','z','e','d','L','U','A','A','p','p',0};\n#define INSTALLPROPERTY_AUTHORIZED_LUA_APP WINELIB_NAME_AW(INSTALLPROPERTY_AUTHORIZED_LUA_APP)\n\n\n/* Installed Information */\n#define INSTALLPROPERTY_INSTALLEDPRODUCTNAMEA \"InstalledProductName\"\nstatic const WCHAR INSTALLPROPERTY_INSTALLEDPRODUCTNAMEW[] = {'I','n','s','t','a','l','l','e','d','P','r','o','d','u','c','t','N','a','m','e',0};\n#define INSTALLPROPERTY_INSTALLEDPRODUCTNAME WINELIB_NAME_AW(INSTALLPROPERTY_INSTALLEDPRODUCTNAME)\n\n#define INSTALLPROPERTY_VERSIONSTRINGA \"VersionString\"\nstatic const WCHAR INSTALLPROPERTY_VERSIONSTRINGW[] = {'V','e','r','s','i','o','n','S','t','r','i','n','g',0};\n#define INSTALLPROPERTY_VERSIONSTRING WINELIB_NAME_AW(INSTALLPROPERTY_VERSIONSTRING)\n\n#define INSTALLPROPERTY_HELPLINKA \"HelpLink\"\nstatic const WCHAR INSTALLPROPERTY_HELPLINKW[] = {'H','e','l','p','L','i','n','k',0};\n#define INSTALLPROPERTY_HELPLINK WINELIB_NAME_AW(INSTALLPROPERTY_HELPLINK)\n\n#define INSTALLPROPERTY_HELPTELEPHONEA \"HelpTelephone\"\nstatic const WCHAR INSTALLPROPERTY_HELPTELEPHONEW[] = {'H','e','l','p','T','e','l','e','p','h','o','n','e',0};\n#define INSTALLPROPERTY_HELPTELEPHONE WINELIB_NAME_AW(INSTALLPROPERTY_HELPTELEPHONE)\n\n#define INSTALLPROPERTY_INSTALLLOCATIONA \"InstallLocation\"\nstatic const WCHAR INSTALLPROPERTY_INSTALLLOCATIONW[] = {'I','n','s','t','a','l','l','L','o','c','a','t','i','o','n',0};\n#define INSTALLPROPERTY_INSTALLLOCATION WINELIB_NAME_AW(INSTALLPROPERTY_INSTALLLOCATION)\n\n#define INSTALLPROPERTY_INSTALLSOURCEA \"InstallSource\"\nstatic const WCHAR INSTALLPROPERTY_INSTALLSOURCEW[] = {'I','n','s','t','a','l','l','S','o','u','r','c','e',0};\n#define INSTALLPROPERTY_INSTALLSOURCE WINELIB_NAME_AW(INSTALLPROPERTY_INSTALLSOURCE)\n\n#define INSTALLPROPERTY_INSTALLDATEA \"InstallDate\"\nstatic const WCHAR INSTALLPROPERTY_INSTALLDATEW[] = {'I','n','s','t','a','l','l','D','a','t','e',0};\n#define INSTALLPROPERTY_INSTALLDATE WINELIB_NAME_AW(INSTALLPROPERTY_INSTALLDATE)\n\n#define INSTALLPROPERTY_PUBLISHERA \"Publisher\"\nstatic const WCHAR INSTALLPROPERTY_PUBLISHERW[] ={'P','u','b','l','i','s','h','e','r',0};\n#define INSTALLPROPERTY_PUBLISHER WINELIB_NAME_AW(INSTALLPROPERTY_PUBLISHER)\n\n#define INSTALLPROPERTY_LOCALPACKAGEA \"LocalPackage\"\nstatic const WCHAR INSTALLPROPERTY_LOCALPACKAGEW[] = {'L','o','c','a','l','P','a','c','k','a','g','e',0};\n#define INSTALLPROPERTY_LOCALPACKAGE WINELIB_NAME_AW(INSTALLPROPERTY_LOCALPACKAGE)\n\n#define INSTALLPROPERTY_URLINFOABOUTA \"URLInfoAbout\"\nstatic const WCHAR INSTALLPROPERTY_URLINFOABOUTW[] = {'U','R','L','I','n','f','o','A','b','o','u','t',0};\n#define INSTALLPROPERTY_URLINFOABOUT WINELIB_NAME_AW(INSTALLPROPERTY_URLINFOABOUT)\n\n#define INSTALLPROPERTY_URLUPDATEINFOA \"URLUpdateInfo\"\nstatic const WCHAR INSTALLPROPERTY_URLUPDATEINFOW[] = {'U','R','L','U','p','d','a','t','e','I','n','f','o',0};\n#define INSTALLPROPERTY_URLUPDATEINFO WINELIB_NAME_AW(INSTALLPROPERTY_URLUPDATEINFO)\n\n#define INSTALLPROPERTY_VERSIONMINORA \"VersionMinor\"\nstatic const WCHAR INSTALLPROPERTY_VERSIONMINORW[] = {'V','e','r','s','i','o','n','M','i','n','o','r',0};\n#define INSTALLPROPERTY_VERSIONMINOR WINELIB_NAME_AW(INSTALLPROPERTY_VERSIONMINOR)\n\n#define INSTALLPROPERTY_VERSIONMAJORA \"VersionMajor\"\nstatic const WCHAR INSTALLPROPERTY_VERSIONMAJORW[] = {'V','e','r','s','i','o','n','M','a','j','o','r',0};\n#define INSTALLPROPERTY_VERSIONMAJOR WINELIB_NAME_AW(INSTALLPROPERTY_VERSIONMAJOR)\n\n#define INSTALLPROPERTY_PRODUCTIDA \"ProductID\"\nstatic const WCHAR INSTALLPROPERTY_PRODUCTIDW[] = {'P','r','o','d','u','c','t','I','D',0};\n#define INSTALLPROPERTY_PRODUCTID WINELIB_NAME_AW(INSTALLPROPERTY_PRODUCTID)\n\n#define INSTALLPROPERTY_REGCOMPANYA \"RegCompany\"\nstatic const WCHAR INSTALLPROPERTY_REGCOMPANYW[] = {'R','e','g','C','o','m','p','a','n','y',0};\n#define INSTALLPROPERTY_REGCOMPANY WINELIB_NAME_AW(INSTALLPROPERTY_REGCOMPANY)\n\n#define INSTALLPROPERTY_REGOWNERA \"RegOwner\"\nstatic const WCHAR INSTALLPROPERTY_REGOWNERW[] = {'R','e','g','O','w','n','e','r',0};\n#define INSTALLPROPERTY_REGOWNER WINELIB_NAME_AW(INSTALLPROPERTY_REGOWNER)\n\n/* MSI Version 3.0 and greater */\n#define INSTALLPROPERTY_UNINSTALLABLEA \"Uninstallable\"\nstatic const WCHAR INSTALLPROPERTY_UNINSTALLABLEW[] = {'U','n','i','n','s','t','a','l','l','a','b','l','e',0};\n#define INSTALLPROPERTY_UNINSTALLABLE WINELIB_NAME_AW(INSTALLPROPERTY_UNINSTALLABLE)\n\n#define INSTALLPROPERTY_PRODUCTSTATEA \"State\"\nstatic const WCHAR INSTALLPROPERTY_PRODUCTSTATEW[] = {'S','t','a','t','e',0};\n#define INSTALLPROPERTY_PRODUCTSTATE WINELIB_NAME_AW(INSTALLPROPERTY_PRODUCTSTATE)\n\n#define INSTALLPROPERTY_PATCHSTATEA \"State\"\nstatic const WCHAR INSTALLPROPERTY_PATCHSTATEW[] ={'S','t','a','t','e',0};\n#define INSTALLPROPERTY_PATCHSTATE WINELIB_NAME_AW(INSTALLPROPERTY_PATCHSTATE)\n\n#define INSTALLPROPERTY_PATCHTYPEA \"PatchType\"\nstatic const WCHAR INSTALLPROPERTY_PATCHTYPEW[] = {'P','a','t','c','h','T','y','p','e',0};\n#define INSTALLPROPERTY_PATCHTYPE WINELIB_NAME_AW(INSTALLPROPERTY_PATCHTYPE)\n\n#define INSTALLPROPERTY_LUAENABLEDA \"LUAEnabled\"\nstatic const WCHAR INSTALLPROPERTY_LUAENABLEDW[] = {'L','U','A','E','n','a','b','l','e','d',0};\n#define INSTALLPROPERTY_LUAENABLED WINELIB_NAME_AW(INSTALLPROPERTY_LUAENABLED)\n\n#define INSTALLPROPERTY_DISPLAYNAMEA \"DisplayName\"\nstatic const WCHAR INSTALLPROPERTY_DISPLAYNAMEW[] = {'D','i','s','p','l','a','y','N','a','m','e',0};\n#define INSTALLPROPERTY_DISPLAYNAME WINELIB_NAME_AW(INSTALLPROPERTY_DISPLAYNAME)\n\n#define INSTALLPROPERTY_MOREINFOURLA \"MoreInfoURL\"\nstatic const WCHAR INSTALLPROPERTY_MOREINFOURLW[] = {'M','o','r','e','I','n','f','o','U','R','L',0};\n#define INSTALLPROPERTY_MOREINFOURL WINELIB_NAME_AW(INSTALLPROPERTY_MOREINFOURL)\n\n/* Source List Info */\n#define INSTALLPROPERTY_LASTUSEDSOURCEA \"LastUsedSource\"\nstatic const WCHAR INSTALLPROPERTY_LASTUSEDSOURCEW[] = {'L','a','s','t','U','s','e','d','S','o','u','r','c','e',0};\n#define INSTALLPROPERTY_LASTUSEDSOURCE WINELIB_NAME_AW(INSTALLPROPERTY_LASTUSEDSOURCE)\n\n#define INSTALLPROPERTY_LASTUSEDTYPEA \"LastUsedType\"\nstatic const WCHAR INSTALLPROPERTY_LASTUSEDTYPEW[] = {'L','a','s','t','U','s','e','d','T','y','p','e',0};\n#define INSTALLPROPERTY_LASTUSEDTYPE WINELIB_NAME_AW(INSTALLPROPERTY_LASTUSEDTYPE)\n\n#define INSTALLPROPERTY_MEDIAPACKAGEPATHA \"MediaPackagePath\"\nstatic const WCHAR INSTALLPROPERTY_MEDIAPACKAGEPATHW[] = {'M','e','d','i','a','P','a','c','k','a','g','e','P','a','t','h',0};\n#define INSTALLPROPERTY_MEDIAPACKAGEPATH WINELIB_NAME_AW(INSTALLPROPERTY_MEDIAPACKAGEPATH)\n\n#define INSTALLPROPERTY_DISKPROMPTA \"DiskPrompt\"\nstatic const WCHAR INSTALLPROPERTY_DISKPROMPTW[] = {'D','i','s','k','P','r','o','m','p','t',0};\n#define INSTALLPROPERTY_DISKPROMPT WINELIB_NAME_AW(INSTALLPROPERTY_DISKPROMPT)\n\ntypedef INT (CALLBACK *INSTALLUI_HANDLERA)(LPVOID, UINT, LPCSTR);\ntypedef INT (CALLBACK *INSTALLUI_HANDLERW)(LPVOID, UINT, LPCWSTR);\ntypedef INT (CALLBACK *INSTALLUI_HANDLER_RECORD)(LPVOID, UINT, MSIHANDLE);\ntypedef INSTALLUI_HANDLER_RECORD* PINSTALLUI_HANDLER_RECORD;\n\nUINT WINAPI MsiAdvertiseProductA(LPCSTR, LPCSTR, LPCSTR, LANGID);\nUINT WINAPI MsiAdvertiseProductW(LPCWSTR, LPCWSTR, LPCWSTR, LANGID);\n#define     MsiAdvertiseProduct WINELIB_NAME_AW(MsiAdvertiseProduct)\n\nUINT WINAPI MsiAdvertiseProductExA(LPCSTR, LPCSTR, LPCSTR, LANGID, DWORD, DWORD);\nUINT WINAPI MsiAdvertiseProductExW(LPCWSTR, LPCWSTR, LPCWSTR, LANGID, DWORD, DWORD);\n#define     MsiAdvertiseProductEx WINELIB_NAME_AW(MsiAdvertiseProductEx)\n\nUINT WINAPI MsiInstallProductA(LPCSTR, LPCSTR);\nUINT WINAPI MsiInstallProductW(LPCWSTR, LPCWSTR);\n#define     MsiInstallProduct WINELIB_NAME_AW(MsiInstallProduct)\n\nUINT WINAPI MsiReinstallProductA(LPCSTR, DWORD);\nUINT WINAPI MsiReinstallProductW(LPCWSTR, DWORD);\n#define     MsiReinstallProduct WINELIB_NAME_AW(MsiReinstallProduct)\n\nUINT WINAPI MsiApplyPatchA(LPCSTR, LPCSTR, INSTALLTYPE, LPCSTR);\nUINT WINAPI MsiApplyPatchW(LPCWSTR, LPCWSTR, INSTALLTYPE, LPCWSTR);\n#define     MsiApplyPatch WINELIB_NAME_AW(MsiApplyPatch)\n\nUINT WINAPI MsiEnumComponentCostsA(MSIHANDLE, LPCSTR, DWORD, INSTALLSTATE, LPSTR, LPDWORD, LPINT, LPINT);\nUINT WINAPI MsiEnumComponentCostsW(MSIHANDLE, LPCWSTR, DWORD, INSTALLSTATE, LPWSTR, LPDWORD, LPINT, LPINT);\n#define     MsiEnumComponentCosts WINELIB_NAME_AW(MsiEnumComponentCosts)\n\nUINT WINAPI MsiEnumProductsA(DWORD, LPSTR);\nUINT WINAPI MsiEnumProductsW(DWORD, LPWSTR);\n#define     MsiEnumProducts WINELIB_NAME_AW(MsiEnumProducts)\n\nUINT WINAPI MsiEnumProductsExA(LPCSTR, LPCSTR, DWORD, DWORD, CHAR[39], MSIINSTALLCONTEXT*, LPSTR, LPDWORD);\nUINT WINAPI MsiEnumProductsExW(LPCWSTR, LPCWSTR, DWORD, DWORD, WCHAR[39], MSIINSTALLCONTEXT*, LPWSTR, LPDWORD);\n#define     MsiEnumProductsEx WINELIB_NAME_AW(MsiEnumProductsEx)\n\nUINT WINAPI MsiEnumFeaturesA(LPCSTR, DWORD, LPSTR, LPSTR);\nUINT WINAPI MsiEnumFeaturesW(LPCWSTR, DWORD, LPWSTR, LPWSTR);\n#define     MsiEnumFeatures WINELIB_NAME_AW(MsiEnumFeatures)\n\nUINT WINAPI MsiEnumComponentsA(DWORD, LPSTR);\nUINT WINAPI MsiEnumComponentsW(DWORD, LPWSTR);\n#define     MsiEnumComponents WINELIB_NAME_AW(MsiEnumComponents)\n\nUINT WINAPI MsiEnumComponentsExA(LPCSTR, DWORD, DWORD, CHAR[39],\n                                 MSIINSTALLCONTEXT *, LPSTR, LPDWORD);\nUINT WINAPI MsiEnumComponentsExW(LPCWSTR, DWORD, DWORD, WCHAR[39],\n                                 MSIINSTALLCONTEXT *, LPWSTR, LPDWORD);\n#define     MsiEnumComponentsEx WINELIB_NAME_AW(MsiEnumComponentsEx)\n\nUINT WINAPI MsiEnumClientsA(LPCSTR, DWORD, LPSTR);\nUINT WINAPI MsiEnumClientsW(LPCWSTR, DWORD, LPWSTR);\n#define     MsiEnumClients WINELIB_NAME_AW(MsiEnumClients)\n\nUINT WINAPI MsiEnumClientsExA(LPCSTR, LPCSTR, DWORD, DWORD, CHAR*, MSIINSTALLCONTEXT*, LPSTR, LPDWORD);\nUINT WINAPI MsiEnumClientsExW(LPCWSTR, LPCWSTR, DWORD, DWORD, WCHAR*, MSIINSTALLCONTEXT*, LPWSTR, LPDWORD);\n#define     MsiEnumClientsEx WINELIB_NAME_AW(MsiEnumClientsEx)\n\nUINT WINAPI MsiOpenPackageA(LPCSTR, MSIHANDLE*);\nUINT WINAPI MsiOpenPackageW(LPCWSTR, MSIHANDLE*);\n#define     MsiOpenPackage WINELIB_NAME_AW(MsiOpenPackage)\n\nUINT WINAPI MsiOpenPackageExA(LPCSTR, DWORD, MSIHANDLE*);\nUINT WINAPI MsiOpenPackageExW(LPCWSTR, DWORD, MSIHANDLE*);\n#define     MsiOpenPackageEx WINELIB_NAME_AW(MsiOpenPackageEx)\n\nUINT WINAPI MsiOpenProductA(LPCSTR, MSIHANDLE*);\nUINT WINAPI MsiOpenProductW(LPCWSTR, MSIHANDLE*);\n#define     MsiOpenProduct WINELIB_NAME_AW(MsiOpenProduct)\n\nUINT WINAPI MsiGetProductPropertyA(MSIHANDLE,LPCSTR,LPSTR,LPDWORD);\nUINT WINAPI MsiGetProductPropertyW(MSIHANDLE,LPCWSTR,LPWSTR,LPDWORD);\n#define     MsiGetProductProperty WINELIB_NAME_AW(MsiGetProductProperty)\n\nUINT WINAPI MsiVerifyPackageA(LPCSTR);\nUINT WINAPI MsiVerifyPackageW(LPCWSTR);\n#define     MsiVerifyPackage WINELIB_NAME_AW(MsiVerifyPackage)\n\nUINT WINAPI MsiQueryComponentStateA(LPCSTR,LPCSTR,MSIINSTALLCONTEXT,LPCSTR,INSTALLSTATE*);\nUINT WINAPI MsiQueryComponentStateW(LPCWSTR,LPCWSTR,MSIINSTALLCONTEXT,LPCWSTR,INSTALLSTATE*);\n#define     MsiQueryComponentState WINELIB_NAME_AW(MsiQueryComponentState)\n\nINSTALLSTATE WINAPI MsiQueryProductStateA(LPCSTR);\nINSTALLSTATE WINAPI MsiQueryProductStateW(LPCWSTR);\n#define      MsiQueryProductState WINELIB_NAME_AW(MsiQueryProductState)\n\nUINT WINAPI MsiConfigureProductA(LPCSTR, int, INSTALLSTATE);\nUINT WINAPI MsiConfigureProductW(LPCWSTR, int, INSTALLSTATE);\n#define     MsiConfigureProduct WINELIB_NAME_AW(MsiConfigureProduct)\n\nUINT WINAPI MsiConfigureProductExA(LPCSTR, int, INSTALLSTATE, LPCSTR);\nUINT WINAPI MsiConfigureProductExW(LPCWSTR, int, INSTALLSTATE, LPCWSTR);\n#define     MsiConfigureProductEx WINELIB_NAME_AW(MsiConfigureProductEx)\n\nUINT WINAPI MsiConfigureFeatureA(LPCSTR, LPCSTR, INSTALLSTATE);\nUINT WINAPI MsiConfigureFeatureW(LPCWSTR, LPCWSTR, INSTALLSTATE);\n#define     MsiConfigureFeature WINELIB_NAME_AW(MsiConfigureFeature)\n\nUINT WINAPI MsiGetProductCodeA(LPCSTR, LPSTR);\nUINT WINAPI MsiGetProductCodeW(LPCWSTR, LPWSTR);\n#define     MsiGetProductCode WINELIB_NAME_AW(MsiGetProductCode)\n\nUINT WINAPI MsiGetProductInfoA(LPCSTR, LPCSTR, LPSTR, LPDWORD);\nUINT WINAPI MsiGetProductInfoW(LPCWSTR, LPCWSTR, LPWSTR, LPDWORD);\n#define     MsiGetProductInfo WINELIB_NAME_AW(MsiGetProductInfo)\n\nUINT WINAPI MsiGetProductInfoExA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, LPCSTR, LPSTR, LPDWORD);\nUINT WINAPI MsiGetProductInfoExW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, LPCWSTR, LPWSTR, LPDWORD);\n#define     MsiGetProductInfoEx WINELIB_NAME_AW(MsiGetProductInfoEx)\n\nUINT WINAPI MsiGetPatchFileListA(LPCSTR, LPCSTR, LPDWORD, MSIHANDLE**);\nUINT WINAPI MsiGetPatchFileListW(LPCWSTR, LPCWSTR, LPDWORD, MSIHANDLE**);\n#define     MsiGetPatchFileList WINELIB_NAME_AW(MsiGetPatchFileList)\n\nUINT WINAPI MsiGetPatchInfoExA(LPCSTR, LPCSTR, LPCSTR, MSIINSTALLCONTEXT, LPCSTR, LPSTR, LPDWORD);\nUINT WINAPI MsiGetPatchInfoExW(LPCWSTR, LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, LPCWSTR, LPWSTR, LPDWORD);\n#define     MsiGetPatchInfoEx WINELIB_NAME_AW(MsiGetPatchInfoEx)\n\nUINT WINAPI MsiGetPatchInfoA(LPCSTR, LPCSTR, LPSTR, LPDWORD);\nUINT WINAPI MsiGetPatchInfoW(LPCWSTR, LPCWSTR, LPWSTR, LPDWORD);\n#define     MsiGetPatchInfo WINELIB_NAME_AW(MsiGetPatchInfo)\n\nUINT WINAPI MsiEnableLogA(DWORD, LPCSTR, DWORD);\nUINT WINAPI MsiEnableLogW(DWORD, LPCWSTR, DWORD);\n#define     MsiEnableLog WINELIB_NAME_AW(MsiEnableLog)\n\nINSTALLUI_HANDLERA WINAPI MsiSetExternalUIA(INSTALLUI_HANDLERA, DWORD, LPVOID);\nINSTALLUI_HANDLERW WINAPI MsiSetExternalUIW(INSTALLUI_HANDLERW, DWORD, LPVOID);\n#define MsiSetExternalUI WINELIB_NAME_AW(MsiSetExternalUI)\n\nINSTALLSTATE WINAPI MsiGetComponentPathA(LPCSTR, LPCSTR, LPSTR, LPDWORD);\nINSTALLSTATE WINAPI MsiGetComponentPathW(LPCWSTR, LPCWSTR, LPWSTR, LPDWORD);\n#define MsiGetComponentPath WINELIB_NAME_AW(MsiGetComponentPath)\n\nINSTALLSTATE WINAPI MsiGetComponentPathExA(LPCSTR, LPCSTR, LPCSTR, MSIINSTALLCONTEXT, LPSTR, LPDWORD);\nINSTALLSTATE WINAPI MsiGetComponentPathExW(LPCWSTR, LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, LPWSTR, LPDWORD);\n#define MsiGetComponentPathEx WINELIB_NAME_AW(MsiGetComponentPathEx)\n\nINSTALLSTATE WINAPI MsiQueryFeatureStateA(LPCSTR, LPCSTR);\nINSTALLSTATE WINAPI MsiQueryFeatureStateW(LPCWSTR, LPCWSTR);\n#define MsiQueryFeatureState WINELIB_NAME_AW(MsiQueryFeatureState)\n\nUINT WINAPI MsiQueryFeatureStateExA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, LPCSTR, INSTALLSTATE*);\nUINT WINAPI MsiQueryFeatureStateExW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, LPCWSTR, INSTALLSTATE*);\n#define     MsiQueryFeatureStateEx WINELIB_NAME_AW(MsiQueryFeatureStateEx)\n\nUINT WINAPI MsiGetFeatureInfoA(MSIHANDLE, LPCSTR, LPDWORD, LPSTR, LPDWORD, LPSTR, LPDWORD);\nUINT WINAPI MsiGetFeatureInfoW(MSIHANDLE, LPCWSTR, LPDWORD, LPWSTR, LPDWORD, LPWSTR, LPDWORD);\n#define MsiGetFeatureInfo WINELIB_NAME_AW(MsiGetFeatureInfo)\n\nUINT WINAPI MsiGetFeatureUsageA(LPCSTR, LPCSTR, LPDWORD, LPWORD);\nUINT WINAPI MsiGetFeatureUsageW(LPCWSTR, LPCWSTR, LPDWORD, LPWORD);\n#define MsiGetFeatureUsage WINELIB_NAME_AW(MsiGetFeatureUsage)\n\nUINT WINAPI MsiEnumRelatedProductsA(LPCSTR, DWORD, DWORD, LPSTR);\nUINT WINAPI MsiEnumRelatedProductsW(LPCWSTR, DWORD, DWORD, LPWSTR);\n#define MsiEnumRelatedProducts WINELIB_NAME_AW(MsiEnumRelatedProducts)\n\nUINT WINAPI MsiProvideAssemblyA(LPCSTR, LPCSTR, DWORD, DWORD, LPSTR, LPDWORD);\nUINT WINAPI MsiProvideAssemblyW(LPCWSTR, LPCWSTR, DWORD, DWORD, LPWSTR, LPDWORD);\n#define MsiProvideAssembly WINELIB_NAME_AW(MsiProvideAssembly)\n\nUINT WINAPI MsiEnumComponentQualifiersA(LPCSTR, DWORD, LPSTR, LPDWORD, LPSTR, LPDWORD);\nUINT WINAPI MsiEnumComponentQualifiersW(LPCWSTR, DWORD, LPWSTR, LPDWORD, LPWSTR, LPDWORD);\n#define MsiEnumComponentQualifiers WINELIB_NAME_AW(MsiEnumComponentQualifiers)\n\nUINT WINAPI MsiGetFileVersionA(LPCSTR, LPSTR, LPDWORD, LPSTR, LPDWORD);\nUINT WINAPI MsiGetFileVersionW(LPCWSTR, LPWSTR, LPDWORD, LPWSTR, LPDWORD);\n#define MsiGetFileVersion WINELIB_NAME_AW(MsiGetFileVersion)\n\nUINT WINAPI MsiMessageBoxA(HWND, LPCSTR, LPCSTR, UINT, WORD, DWORD);\nUINT WINAPI MsiMessageBoxW(HWND, LPCWSTR, LPCWSTR, UINT, WORD, DWORD);\n#define MsiMessageBox WINELIB_NAME_AW(MsiMessageBox)\n\nUINT WINAPI MsiProvideQualifiedComponentExA(LPCSTR, LPCSTR, DWORD, LPCSTR, DWORD, DWORD, LPSTR, LPDWORD);\nUINT WINAPI MsiProvideQualifiedComponentExW(LPCWSTR, LPCWSTR, DWORD, LPCWSTR, DWORD, DWORD, LPWSTR, LPDWORD);\n#define MsiProvideQualifiedComponentEx WINELIB_NAME_AW(MsiProvideQualifiedComponentEx)\n\nUINT WINAPI MsiProvideQualifiedComponentA(LPCSTR, LPCSTR, DWORD, LPSTR, LPDWORD);\nUINT WINAPI MsiProvideQualifiedComponentW(LPCWSTR, LPCWSTR, DWORD, LPWSTR, LPDWORD);\n#define MsiProvideQualifiedComponent WINELIB_NAME_AW(MsiProvideQualifiedComponent)\n\nUSERINFOSTATE WINAPI MsiGetUserInfoA(LPCSTR, LPSTR, LPDWORD, LPSTR, LPDWORD, LPSTR, LPDWORD);\nUSERINFOSTATE WINAPI MsiGetUserInfoW(LPCWSTR, LPWSTR, LPDWORD, LPWSTR, LPDWORD, LPWSTR, LPDWORD);\n#define MsiGetUserInfo WINELIB_NAME_AW(MsiGetUserInfo)\n\nUINT WINAPI MsiProvidedComponentA(LPCSTR, LPCSTR, LPCSTR, DWORD, LPSTR, LPDWORD);\nUINT WINAPI MsiProvideComponentW(LPCWSTR, LPCWSTR, LPCWSTR, DWORD, LPWSTR, LPDWORD);\n#define MsiProvideComponent WINELIB_NAME_AW(MsiProvideComponent)\n\nUINT WINAPI MsiCollectUserInfoA(LPCSTR);\nUINT WINAPI MsiCollectUserInfoW(LPCWSTR);\n#define MsiCollectUserInfo WINELIB_NAME_AW(MsiCollectUserInfo)\n\nUINT WINAPI MsiReinstallFeatureA(LPCSTR, LPCSTR, DWORD);\nUINT WINAPI MsiReinstallFeatureW(LPCWSTR, LPCWSTR, DWORD);\n#define MsiReinstallFeature WINELIB_NAME_AW(MsiReinstallFeature)\n\nUINT WINAPI MsiGetShortcutTargetA(LPCSTR, LPSTR, LPSTR, LPSTR);\nUINT WINAPI MsiGetShortcutTargetW(LPCWSTR, LPWSTR, LPWSTR, LPWSTR);\n#define MsiGetShortcutTarget WINELIB_NAME_AW(MsiGetShortcutTarget)\n\nINSTALLSTATE WINAPI MsiUseFeatureW(LPCWSTR, LPCWSTR);\nINSTALLSTATE WINAPI MsiUseFeatureA(LPCSTR, LPCSTR);\n#define MsiUseFeature WINELIB_NAME_AW(MsiUseFeature)\n\nINSTALLSTATE WINAPI MsiUseFeatureExW(LPCWSTR, LPCWSTR, DWORD, DWORD);\nINSTALLSTATE WINAPI MsiUseFeatureExA(LPCSTR, LPCSTR, DWORD, DWORD);\n#define MsiUseFeatureEx WINELIB_NAME_AW(MsiUseFeatureEx)\n\nHRESULT WINAPI MsiGetFileSignatureInformationA(LPCSTR, DWORD, PCCERT_CONTEXT*, LPBYTE, LPDWORD);\nHRESULT WINAPI MsiGetFileSignatureInformationW(LPCWSTR, DWORD, PCCERT_CONTEXT*, LPBYTE, LPDWORD);\n#define MsiGetFileSignatureInformation WINELIB_NAME_AW(MsiGetFileSignatureInformation)\n\nINSTALLSTATE WINAPI MsiLocateComponentA(LPCSTR, LPSTR, LPDWORD);\nINSTALLSTATE WINAPI MsiLocateComponentW(LPCWSTR, LPWSTR, LPDWORD);\n#define  MsiLocateComponent WINELIB_NAME_AW(MsiLocateComponent)\n\nUINT WINAPI MsiSourceListAddSourceA(LPCSTR, LPCSTR, DWORD, LPCSTR);\nUINT WINAPI MsiSourceListAddSourceW(LPCWSTR, LPCWSTR, DWORD, LPCWSTR);\n#define     MsiSourceListAddSource WINELIB_NAME_AW(MsiSourceListAddSource)\n\nUINT WINAPI MsiSourceListEnumMediaDisksA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPDWORD,\n                                         LPSTR, LPDWORD, LPSTR, LPDWORD);\nUINT WINAPI MsiSourceListEnumMediaDisksW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPDWORD,\n                                         LPWSTR, LPDWORD, LPWSTR, LPDWORD);\n#define     MsiSourceListEnumMediaDisks WINELIB_NAME_AW(MsiSourceListEnumMediaDisks)\n\nUINT WINAPI MsiSourceListEnumSourcesA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPSTR, LPDWORD);\nUINT WINAPI MsiSourceListEnumSourcesW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPWSTR, LPDWORD);\n#define     MsiSourceListEnumSources WINELIB_NAME_AW(MsiSourceListEnumSources)\n\nUINT WINAPI MsiSourceListClearSourceA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR);\nUINT WINAPI MsiSourceListClearSourceW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, LPCWSTR);\n#define     MsiSourceListClearSource WINELIB_NAME_AW(MsiSourceListClearSource)\n\nUINT WINAPI MsiSourceListClearAllA(LPCSTR, LPCSTR, DWORD);\nUINT WINAPI MsiSourceListClearAllW(LPCWSTR, LPCWSTR, DWORD);\n#define     MsiSourceListClearAll WINELIB_NAME_AW(MsiSourceListClearAll)\n\nUINT WINAPI MsiSourceListGetInfoA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR, LPSTR, LPDWORD);\nUINT WINAPI MsiSourceListGetInfoW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, LPCWSTR, LPWSTR, LPDWORD);\n#define     MsiSourceListGetInfo WINELIB_NAME_AW(MsiSourceListGetInfo)\n\nUINT WINAPI MsiSourceListSetInfoA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR, LPCSTR);\nUINT WINAPI MsiSourceListSetInfoW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, LPCWSTR, LPCWSTR);\n#define     MsiSourceListSetInfo WINELIB_NAME_AW(MsiSourceListSetInfo)\n\nUINT WINAPI MsiSourceListAddSourceExA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR, DWORD);\nUINT WINAPI MsiSourceListAddSourceExW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, LPCWSTR, DWORD);\n#define     MsiSourceListAddSourceEx WINELIB_NAME_AW(MsiSourceListAddSourceEx)\n\nUINT WINAPI MsiSourceListAddMediaDiskA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPCSTR, LPCSTR);\nUINT WINAPI MsiSourceListAddMediaDiskW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPCWSTR, LPCWSTR);\n#define     MsiSourceListAddMediaDisk WINELIB_NAME_AW(MsiSourceListAddMediaDisk)\n\nUINT WINAPI MsiEnumPatchesA(LPCSTR, DWORD, LPSTR, LPSTR, LPDWORD);\nUINT WINAPI MsiEnumPatchesW(LPCWSTR, DWORD, LPWSTR, LPWSTR, LPDWORD);\n#define     MsiEnumPatches WINELIB_NAME_AW(MsiEnumPatches)\n\nUINT WINAPI MsiEnumPatchesExA(LPCSTR, LPCSTR, DWORD, DWORD, DWORD, LPSTR, LPSTR,\n                              MSIINSTALLCONTEXT*, LPSTR, LPDWORD);\nUINT WINAPI MsiEnumPatchesExW(LPCWSTR, LPCWSTR, DWORD, DWORD, DWORD, LPWSTR, LPWSTR,\n                              MSIINSTALLCONTEXT*, LPWSTR, LPDWORD);\n#define     MsiEnumPatchesEx WINELIB_NAME_AW(MsiEnumPatchesEx)\n\nUINT WINAPI MsiGetFileHashA(LPCSTR, DWORD, PMSIFILEHASHINFO);\nUINT WINAPI MsiGetFileHashW(LPCWSTR, DWORD, PMSIFILEHASHINFO);\n#define     MsiGetFileHash WINELIB_NAME_AW(MsiGetFileHash)\n\nUINT WINAPI MsiAdvertiseScriptA(LPCSTR, DWORD, PHKEY, BOOL);\nUINT WINAPI MsiAdvertiseScriptW(LPCWSTR, DWORD, PHKEY, BOOL);\n#define     MsiAdvertiseScript WINELIB_NAME_AW(MsiAdvertiseScript)\n\nUINT WINAPI MsiIsProductElevatedA(LPCSTR, BOOL *);\nUINT WINAPI MsiIsProductElevatedW(LPCWSTR, BOOL *);\n#define     MsiIsProductElevated WINELIB_NAME_AW(MsiIsProductElevated)\n\nUINT WINAPI MsiDatabaseMergeA(MSIHANDLE, MSIHANDLE, LPCSTR);\nUINT WINAPI MsiDatabaseMergeW(MSIHANDLE, MSIHANDLE, LPCWSTR);\n#define     MsiDatabaseMerge WINELIB_NAME_AW(MsiDatabaseMerge)\n\nUINT WINAPI MsiInstallMissingComponentA(LPCSTR, LPCSTR, INSTALLSTATE);\nUINT WINAPI MsiInstallMissingComponentW(LPCWSTR, LPCWSTR, INSTALLSTATE);\n#define     MsiInstallMissingComponent WINELIB_NAME_AW(MsiInstallMissingComponent)\n\nUINT WINAPI MsiDetermineApplicablePatchesA(LPCSTR, DWORD, PMSIPATCHSEQUENCEINFOA);\nUINT WINAPI MsiDetermineApplicablePatchesW(LPCWSTR, DWORD, PMSIPATCHSEQUENCEINFOW);\n#define     MsiDetermineApplicablePatches WINELIB_NAME_AW(MsiDetermineApplicablePatches)\n\nUINT WINAPI MsiDeterminePatchSequenceA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, PMSIPATCHSEQUENCEINFOA);\nUINT WINAPI MsiDeterminePatchSequenceW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, PMSIPATCHSEQUENCEINFOW);\n#define     MsiDeterminePatchSequence WINELIB_NAME_AW(MsiDeterminePatchSequence)\n\nUINT WINAPI MsiApplyMultiplePatchesA(LPCSTR, LPCSTR, LPCSTR);\nUINT WINAPI MsiApplyMultiplePatchesW(LPCWSTR, LPCWSTR, LPCWSTR);\n#define     MsiApplyMultiplePatches WINELIB_NAME_AW(MsiApplyMultiplePatches)\n\nUINT WINAPI MsiBeginTransactionA(LPCSTR, DWORD, MSIHANDLE *, HANDLE *);\nUINT WINAPI MsiBeginTransactionW(LPCWSTR, DWORD, MSIHANDLE *, HANDLE *);\n#define     MsiBeginTransaction WINELIB_NAME_AW(MsiBeginTransaction)\n\nUINT WINAPI MsiJoinTransaction(MSIHANDLE, DWORD, HANDLE *);\nUINT WINAPI MsiEndTransaction(DWORD);\n\n/* Non Unicode */\nUINT WINAPI MsiCloseHandle(MSIHANDLE);\nUINT WINAPI MsiCloseAllHandles(void);\nINSTALLUILEVEL WINAPI MsiSetInternalUI(INSTALLUILEVEL, HWND*);\nUINT WINAPI MsiSetExternalUIRecord(INSTALLUI_HANDLER_RECORD, DWORD, LPVOID, PINSTALLUI_HANDLER_RECORD);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_MSI_H */\n"
  },
  {
    "path": "wine/windows/msidefs.h",
    "content": "/*\n * Copyright (C) 2005 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_MSIDEFS_H\n#define __WINE_MSIDEFS_H\n\nenum msidbUpgradeAttributes {\n    msidbUpgradeAttributesMigrateFeatures = 0x0000001,\n    msidbUpgradeAttributesOnlyDetect = 0x00000002,\n    msidbUpgradeAttributesIgnoreRemoveFailure = 0x00000004,\n    msidbUpgradeAttributesVersionMinInclusive = 0x00000100,\n    msidbUpgradeAttributesVersionMaxInclusive = 0x00000200,\n    msidbUpgradeAttributesLanguagesExclusive = 0x00000400\n};\n\nenum msidbFileAttributes {\n    msidbFileAttributesReadOnly = 0x00000001,\n    msidbFileAttributesHidden = 0x00000002,\n    msidbFileAttributesSystem = 0x00000004,\n    msidbFileAttributesVital = 0x00000200,\n    msidbFileAttributesChecksum = 0x00000400,\n    msidbFileAttributesPatchAdded = 0x00001000,\n    msidbFileAttributesNoncompressed = 0x00002000,\n    msidbFileAttributesCompressed = 0x00004000\n};\n\nenum msidbPatchAttributes {\n    msidbPatchAttributesNonVital = 0x00000001\n};\n\nenum msidbDialogAttributes {\n    msidbDialogAttributesVisible = 0x00000001,\n    msidbDialogAttributesModal = 0x00000002,\n    msidbDialogAttributesMinimize = 0x00000004,\n    msidbDialogAttributesSysModal = 0x00000008,\n    msidbDialogAttributesKeepModeless = 0x00000010,\n    msidbDialogAttributesTrackDiskSpace = 0x00000020,\n    msidbDialogAttributesUseCustomPalette = 0x00000040,\n    msidbDialogAttributesRTLRO = 0x00000080,\n    msidbDialogAttributesRightAligned = 0x00000100,\n    msidbDialogAttributesLeftScroll = 0x00000200,\n    msidbDialogAttributesBidi = 0x00000380,\n    msidbDialogAttributesError = 0x00010000\n};\n\nenum msidbControlAttributes {\n    msidbControlAttributesVisible = 0x00000001,\n    msidbControlAttributesEnabled = 0x00000002,\n    msidbControlAttributesSunken = 0x00000004,\n    msidbControlAttributesIndirect = 0x00000008,\n    msidbControlAttributesInteger = 0x00000010,\n    msidbControlAttributesRTLRO = 0x00000020,\n    msidbControlAttributesRightAligned = 0x00000040,\n    msidbControlAttributesLeftScroll = 0x00000080,\n    msidbControlAttributesBiDi = 0x000000c0,\n\n    msidbControlAttributesTransparent = 0x00010000,\n    msidbControlAttributesNoPrefix = 0x00020000,\n    msidbControlAttributesNoWrap = 0x00040000,\n    msidbControlAttributesFormatSize = 0x00080000,\n    msidbControlAttributesUsersLanguage = 0x00100000,\n\n    msidbControlAttributesMultiline = 0x00010000,\n    msidbControlAttributesPasswordInput = 0x00200000,\n\n    msidbControlAttributesProgress95 = 0x00010000,\n\n    msidbControlAttributesRemovableVolume = 0x00010000,\n    msidbControlAttributesFixedVolume = 0x00020000,\n    msidbControlAttributesRemoteVolume = 0x00040000,\n    msidbControlAttributesCDROMVolume = 0x00080000,\n    msidbControlAttributesRAMdiskVolume = 0x00100000,\n    msidbControlAttributesFloppyVolume = 0x00200000,\n    msidbControlShowRollbackCost = 0x00400000,\n\n    msidbControlAttributesSorted = 0x00010000,\n    msidbControlAttributesComboList = 0x00020000,\n\n    msidbControlAttributesImageHandle = 0x00010000,\n    msidbControlAttributesPushLike = 0x00020000,\n    msidbControlAttributesBitmap = 0x00040000,\n    msidbControlAttributesIcon = 0x00080000,\n    msidbControlAttributesFixedSize = 0x00100000,\n    msidbControlAttributesIconSize16 = 0x00200000,\n    msidbControlAttributesIconSize32 = 0x00400000,\n    msidbControlAttributesIconSize48 = 0x00600000,\n\n    msidbControlAttributesHasBorder = 0x01000000,\n};\n\nenum msidbTextStyleStyleBits\n{\n    msidbTextStyleStyleBitsBold = 0x00000001,\n    msidbTextStyleStyleBitsItalic = 0x00000002,\n    msidbTextStyleStyleBitsUnderline = 0x00000004,\n    msidbTextStyleStyleBitsStrike = 0x00000008,\n};\n\nenum msidbCustomActionType\n{\n    msidbCustomActionTypeDll = 0x00000001,\n    msidbCustomActionTypeExe = 0x00000002,\n    msidbCustomActionTypeTextData = 0x00000003,\n    msidbCustomActionTypeJScript = 0x00000005,\n    msidbCustomActionTypeVBScript = 0x00000006,\n    msidbCustomActionTypeInstall = 0x00000007,\n\n    msidbCustomActionTypeBinaryData = 0x00000000,\n    msidbCustomActionTypeSourceFile = 0x00000010,\n    msidbCustomActionTypeDirectory = 0x00000020,\n    msidbCustomActionTypeProperty = 0x00000030,\n\n    msidbCustomActionTypeContinue = 0x00000040,\n    msidbCustomActionTypeAsync = 0x00000080,\n\n    msidbCustomActionTypeFirstSequence = 0x00000100,\n    msidbCustomActionTypeOncePerProcess = 0x00000200,\n    msidbCustomActionTypeClientRepeat = 0x00000300,\n    msidbCustomActionTypeInScript = 0x00000400,\n\n    msidbCustomActionTypeRollback = 0x00000100,\n    msidbCustomActionTypeCommit = 0x00000200,\n\n    msidbCustomActionTypeNoImpersonate = 0x00000800,\n    msidbCustomActionTypeTSAware = 0x00004000,\n\n    msidbCustomActionType64BitScript = 0x00001000,\n    msidbCustomActionTypeHideTarget = 0x00002000\n};\n\nenum msidbFeatureAttributes\n{\n    msidbFeatureAttributesFavorLocal = 0x00000000,\n    msidbFeatureAttributesFavorSource = 0x00000001,\n    msidbFeatureAttributesFollowParent = 0x00000002,\n    msidbFeatureAttributesFavorAdvertise = 0x00000004,\n    msidbFeatureAttributesDisallowAdvertise = 0x00000008,\n    msidbFeatureAttributesUIDisallowAbsent = 0x00000010,\n    msidbFeatureAttributesNoUnsupportedAdvertise = 0x00000020\n};\n\nenum msidbComponentAttributes\n{\n    msidbComponentAttributesLocalOnly = 0x00000000,\n    msidbComponentAttributesSourceOnly = 0x00000001,\n    msidbComponentAttributesOptional = 0x00000002,\n    msidbComponentAttributesRegistryKeyPath = 0x00000004,\n    msidbComponentAttributesSharedDllRefCount = 0x00000008,\n    msidbComponentAttributesPermanent = 0x00000010,\n    msidbComponentAttributesODBCDataSource = 0x00000020,\n    msidbComponentAttributesTransitive = 0x00000040,\n    msidbComponentAttributesNeverOverwrite = 0x00000080,\n    msidbComponentAttributes64bit = 0x00000100\n};\n\nenum msidbODBCDataSourceRegistration\n{\n    msidbODBCDataSourceRegistrationPerMachine = 0x00000000,\n    msidbODBCDataSourceRegistrationPerUser = 0x00000001\n};\n\nenum msidbRegistryRoot\n{\n    msidbRegistryRootClassesRoot = 0,\n    msidbRegistryRootCurrentUser = 1,\n    msidbRegistryRootLocalMachine = 2,\n    msidbRegistryRootUsers = 3,\n};\n\nenum msidbLocatorType\n{\n    msidbLocatorTypeDirectory = 0x000,\n    msidbLocatorTypeFileName = 0x001,\n    msidbLocatorTypeRawValue = 0x002,\n    msidbLocatorType64bit = 0x010,\n};\n\nenum msidbServiceControlEvent\n{\n    msidbServiceControlEventStart = 0x00000001,\n    msidbServiceControlEventStop = 0x00000002,\n    msidbServiceControlEventDelete = 0x00000008,\n    msidbServiceControlEventUninstallStart = 0x00000010,\n    msidbServiceControlEventUninstallStop = 0x00000020,\n    msidbServiceControlEventUninstallDelete = 0x00000080,\n};\n\nenum msidbServiceInstallErrorControl\n{\n    msidbServiceInstallErrorControlVital = 0x00008000\n};\n\nenum msidbMoveFileOptions\n{\n    msidbMoveFileOptionsMove = 0x00000001,\n};\n\nenum msidbAssemblyAttributes\n{\n    msidbAssemblyAttributesURT = 0x00000000,\n    msidbAssemblyAttributesWin32 = 0x00000001,\n};\n\nenum msidbSumInfoSourceType\n{\n    msidbSumInfoSourceTypeSFN = 0x00000001,\n    msidbSumInfoSourceTypeCompressed = 0x00000002,\n    msidbSumInfoSourceTypeAdminImage = 0x00000004,\n    msidbSumInfoSourceTypeLUAPackage = 0x00000008,\n};\n\nenum msidbRemoveFileInstallMode\n{\n    msidbRemoveFileInstallModeOnInstall = 0x00000001,\n    msidbRemoveFileInstallModeOnRemove = 0x00000002,\n    msidbRemoveFileInstallModeOnBoth = 0x00000003,\n};\n\nenum\n{\n    msidbIniFileActionAddLine    = 0x00000000,\n    msidbIniFileActionCreateLine = 0x00000001,\n    msidbIniFileActionRemoveLine = 0x00000002,\n    msidbIniFileActionAddTag     = 0x00000003,\n    msidbIniFileActionRemoveTag  = 0x00000004\n};\n\n/*\n * Windows SDK braindamage alert\n *\n * PID_DICTIONARY and PID_CODEPAGE are defined by propidl.h too\n * PID_SECURITY is defined in propidl.h with a different value!\n * So these need to be undefined first.\n */\n#ifdef PID_DICTIONARY\n#undef PID_DICTIONARY\n#endif\n\n#ifdef PID_CODEPAGE\n#undef PID_CODEPAGE\n#endif\n\n#ifdef PID_SECURITY\n#undef PID_SECURITY\n#endif\n\n#define PID_DICTIONARY 0\n#define PID_CODEPAGE 1\n#define PID_TITLE 2\n#define PID_SUBJECT 3\n#define PID_AUTHOR 4\n#define PID_KEYWORDS 5\n#define PID_COMMENTS 6\n#define PID_TEMPLATE 7\n#define PID_LASTAUTHOR 8\n#define PID_REVNUMBER 9\n#define PID_EDITTIME 10\n#define PID_LASTPRINTED 11\n#define PID_CREATE_DTM 12\n#define PID_LASTSAVE_DTM 13\n#define PID_PAGECOUNT 14\n#define PID_WORDCOUNT 15\n#define PID_CHARCOUNT 16\n#define PID_THUMBNAIL 17\n#define PID_APPNAME 18\n#define PID_SECURITY 19\n#define PID_MSIVERSION PID_PAGECOUNT\n#define PID_MSISOURCE PID_WORDCOUNT\n#define PID_MSIRESTRICT PID_CHARCOUNT\n\n#endif /* __WINE_MSIDEFS_H */\n"
  },
  {
    "path": "wine/windows/msident.idl",
    "content": "/*\n * Copyright 2012 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"unknwn.idl\";\nimport \"ocidl.idl\";\nimport \"oleidl.idl\";\nimport \"oaidl.idl\";\n#endif\n\ncpp_quote(\"#define E_IDENTITIES_DISABLED       _HRESULT_TYPEDEF_(0x80007110)\")\ncpp_quote(\"#define S_IDENTITIES_DISABLED       _HRESULT_TYPEDEF_(0x00007110)\")\ncpp_quote(\"#define E_NO_CURRENT_IDENTITY       _HRESULT_TYPEDEF_(0x80007111)\")\ncpp_quote(\"#define E_USER_CANCELLED            _HRESULT_TYPEDEF_(0x80007112)\")\ncpp_quote(\"#define E_PROCESS_CANCELLED_SWITCH  _HRESULT_TYPEDEF_(0x80007113)\")\ncpp_quote(\"#define E_IDENTITY_NOT_FOUND        _HRESULT_TYPEDEF_(0x80007114)\")\ncpp_quote(\"#define E_IDENTITY_EXISTS           _HRESULT_TYPEDEF_(0x80007115)\")\ncpp_quote(\"#define E_IDENTITY_CHANGING         _HRESULT_TYPEDEF_(0x80007116)\")\n\n[\n    uuid(a9ae6c8e-1d1b-11d2-b21a-00c04fa357fa),\n]\ninterface IUserIdentity : IUnknown\n{\n    HRESULT GetCookie([out] GUID *puidCookie);\n\n    HRESULT GetName(\n            [in] WCHAR *pszName,\n            [in] ULONG ulBuffSize);\n\n    [local]\n    HRESULT OpenIdentityRegKey(\n            [in]DWORD dwDesiredAccess,\n            [out] HKEY *phKey);\n\n    HRESULT GetIdentityFolder(\n            [in] DWORD dwFlags,\n            [in] WCHAR *pszPath,\n            [in] ULONG ulBuffSize);\n\ncpp_quote(\"#define GIF_ROAMING_FOLDER     0x0001\")\ncpp_quote(\"#define GIF_NON_ROAMING_FOLDER 0x0002\")\n}\n\n[\n    uuid(a9ae6c8f-1d1b-11d2-b21a-00c04fa357fa),\n    odl\n]\ninterface IEnumUserIdentity : IUnknown\n{\n    HRESULT Next(\n            [in] ULONG celt,\n            [out, size_is(celt), length_is(*pceltFetched)] IUnknown **rgelt,\n            [out] ULONG *pceltFetched);\n\n    HRESULT Skip([in] ULONG celt);\n    HRESULT Reset();\n    HRESULT Clone([out] IEnumUserIdentity **ppenum);\n    HRESULT GetCount([out] ULONG *pnCount);\n}\n\n[\n    uuid(a9ae6c90-1d1b-11d2-b21a-00c04fa357fa)\n]\ninterface IUserIdentityManager : IUnknown\n{\n    HRESULT EnumIdentities([out] IEnumUserIdentity **ppEnumUser);\n    HRESULT ManageIdentities([in] HWND hwndParent, [in] DWORD dwFlags);\n\ncpp_quote(\"#define UIMI_CREATE_NEW_IDENTITY 0x0001\")\n    HRESULT Logon([in] HWND hwndParent, [in] DWORD dwFlags, [out] IUserIdentity **ppIdentity);\n\ncpp_quote(\"#define UIL_FORCE_UI 0x80000001\")\n    HRESULT Logoff([in] HWND hwndParent);\n\n    HRESULT GetIdentityByCookie([in] GUID *uidCookie, [out] IUserIdentity **ppIdentity);\n}\n\ncpp_quote(\"DEFINE_GUID(CLSID_UserIdentityManager, 0xa9ae6c91,0x1d1b,0x11d2,0xb2,0x1a,0x00,0xc0,0x4f,0xa3,0x57,0xfa);\")\n"
  },
  {
    "path": "wine/windows/msinkaut.idl",
    "content": "/* Copyright (C) 2007 C John Klehm\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\n\n[\n    uuid(7D868ACD-1A5D-4A47-A247-F39741353012),\n    version(1.0)\n]\nlibrary MSINKAUTLib\n{\n    importlib(\"stdole2.tlb\");\n\n    typedef float single;\n\n    typedef enum InkBoundingBoxMode {\n        IBBM_Default = 0,\n        IBBM_NoCurveFit = 1,\n        IBBM_CurveFit = 2,\n        IBBM_PointsOnly = 3,\n        IBBM_Union = 4\n    } InkBoundingBoxMode;\n\n    typedef enum InkExtractFlags {\n        IEF_CopyFromOriginal = 0x0,\n        IEF_RemoveFromOriginal = 0x1,\n        IEF_Default = IEF_RemoveFromOriginal\n    } InkExtractFlags;\n\n    typedef enum InkPersistenceFormat {\n        IPF_InkSerializeFormat = 0,\n        IPF_Base64InkSerializedFormat = 1,\n        IPF_GIF = 2,\n        IPF_Base64GIF = 3\n    } InkPersistenceFormat;\n\n    typedef enum InkPersistenceCompressionMode\n    {\n        IPCM_Default = 0,\n        IPCM_MaximumCompression = 1,\n        IPCM_NoCompression = 2\n    } InkPersistenceCompressionMode;\n\n    typedef enum InkPenTip {\n        IPT_Ball = 0,\n        IPT_Rectangle = 1\n    } InkPenTip;\n\n    typedef enum InkRasterOperation {\n        IRO_Black = 1,\n        IRO_NotMergePen,\n        IRO_MaskNotPen,\n        IRO_NotCopyPen,\n        IRO_MaskPenNot,\n        IRO_Not,\n        IRO_XOrPen,\n        IRO_NotMaskPen,\n        IRO_MaskPen,\n        IRO_NotXOrPen,\n        IRO_NoOperation,\n        IRO_MergeNotPen,\n        IRO_CopyPen,\n        IRO_MergePenNot,\n        IRO_MergePen,\n        IRO_White\n    } InkRasterOperation;\n\n    typedef enum InkClipboardModes {\n        ICB_Copy = 0,\n        ICB_Cut = 0x1,\n        ICB_DelayedCopy = 0x20,\n        ICB_ExtractOnly = 0x30,\n        ICB_Default = ICB_Copy\n    } InkClipboardModes;\n\n    typedef enum InkClipboardFormats {\n        ICF_None = 0,\n        ICF_InkSerializedFormat = 0x1,\n        ICF_SketchInk = 0x2,\n        ICF_TextInk = 0x6,\n        ICF_EnhancedMetafile = 0x8,\n        ICF_Metafile = 0x20,\n        ICF_Bitmap = 0x40,\n        ICF_PasteMask = 0x7,\n        ICF_CopyMask = 0x7f,\n        ICF_Default = ICF_CopyMask\n    } InkClipboardFormats;\n\n    typedef enum InkRecognitionConfidence\n    {\n        IRC_Strong = 0,\n        IRC_Intermediate = 1,\n        IRC_Poor = 2\n    } InkRecognitionConfidence;\n\n    [\n        odl,\n        uuid(DB489209-B7C3-411D-90F6-1548CFFF271E),\n        dual,\n        oleautomation\n    ]\n    interface IInkExtendedProperty : IDispatch {\n        [id(0x00000001), propget] HRESULT Guid([out, retval] BSTR* Guid);\n        [id(0x00000002), propget] HRESULT Data([out, retval] VARIANT* Data);\n        [id(0x00000002), propput] HRESULT Data([in] VARIANT Data);\n    }\n\n    [\n        odl,\n        uuid(89F2A8BE-95A9-4530-8B8F-88E971E3E25F),\n        dual,\n        oleautomation\n    ]\n    interface IInkExtendedProperties : IDispatch {\n        HRESULT Count([out, retval] long* Count);\n        HRESULT _NewEnum([out, retval] IUnknown** _NewEnum);\n        HRESULT Item(\n            [in] VARIANT Identifier,\n            [out, retval] IInkExtendedProperty** Item);\n        HRESULT Add(\n            [in] BSTR Guid,\n            [in] VARIANT Data,\n            [out, retval] IInkExtendedProperty** InkExtendedProperty);\n        HRESULT Remove([in] VARIANT Identifier);\n        HRESULT Clear();\n        HRESULT DoesPropertyExist(\n            [in] BSTR Guid,\n            [out, retval] VARIANT_BOOL* DoesPropertyExist);\n    }\n\n    [\n        odl,\n        uuid(BF519B75-0A15-4623-ADC9-C00D436A8092),\n        dual,\n        oleautomation\n    ]\n    interface IInkDrawingAttributes : IDispatch {\n        [id(0x00000002), propget] HRESULT Color(\n            [out, retval] long* CurrentColor);\n        [id(0x00000002), propput] HRESULT Color([in] long CurrentColor);\n        [id(0x00000003), propget] HRESULT Width(\n            [out, retval] single* CurrentWidth);\n        [id(0x00000003), propput] HRESULT Width([in] single CurrentWidth);\n        [id(0x00000001), propget] HRESULT Height(\n            [out, retval] single* CurrentHeight);\n        [id(0x00000001), propput] HRESULT Height([in] single CurrentHeight);\n        [id(0x00000004), propget] HRESULT FitToCurve(\n            [out, retval] VARIANT_BOOL* Flag);\n        [id(0x00000004), propput] HRESULT FitToCurve([in] VARIANT_BOOL Flag);\n        [id(0x00000005), propget] HRESULT IgnorePressure(\n            [out, retval] VARIANT_BOOL* Flag);\n        [id(0x00000005), propput] HRESULT IgnorePressure(\n            [in] VARIANT_BOOL Flag);\n        [id(0x00000006), propget] HRESULT AntiAliased(\n            [out, retval] VARIANT_BOOL* Flag);\n        [id(0x00000006), propput] HRESULT AntiAliased([in] VARIANT_BOOL Flag);\n        [id(0x00000007), propget] HRESULT Transparency(\n            [out, retval] long* CurrentTransparency);\n        [id(0x00000007), propput] HRESULT Transparency(\n            [in] long CurrentTransparency);\n        [id(0x00000008), propget] HRESULT RasterOperation(\n            [out, retval] InkRasterOperation* CurrentRasterOperation);\n        [id(0x00000008), propput] HRESULT RasterOperation(\n            [in] InkRasterOperation CurrentRasterOperation);\n        [id(0x00000009), propget] HRESULT PenTip(\n            [out, retval] InkPenTip* CurrentPenTip);\n        [id(0x00000009), propput] HRESULT PenTip([in] InkPenTip CurrentPenTip);\n        [id(0x0000000b), propget] HRESULT ExtendedProperties(\n            [out, retval] IInkExtendedProperties** Properties);\n        [id(0x0000000a)]          HRESULT Clone(\n            [out, retval] IInkDrawingAttributes** DrawingAttributes);\n    }\n\ncpp_quote(\"#ifndef _WINGDI_\")\n/* already defined in wingdi.h but needed for WIDL */\n    typedef struct tagXFORM {\n        single eM11;\n        single eM12;\n        single eM21;\n        single eM22;\n        single eDx;\n        single eDy;\n    } XFORM;\ncpp_quote(\"#endif /* _WINGDI_ */\")\n\n    [\n        odl,\n        uuid(615F1D43-8703-4565-88E2-8201D2ECD7B7),\n        dual,\n        oleautomation\n    ]\n    interface IInkTransform : IDispatch {\n        [id(0x00000001)] HRESULT Reset();\n        [id(0x00000002)] HRESULT Translate(\n            [in] single HorizontalComponent,\n            [in] single VerticalComponent);\n        [id(0x00000003)] HRESULT Rotate(\n            [in] single Degrees,\n            [in, defaultvalue(0)] single x,\n            [in, defaultvalue(0)] single y);\n        [id(0x00000004)] HRESULT Reflect(\n            [in] VARIANT_BOOL Horizontally,\n            [in] VARIANT_BOOL Vertically);\n        [id(0x00000005)] HRESULT Shear(\n            [in] single HorizontalComponent,\n            [in] single VerticalComponent);\n        [id(0x00000006)] HRESULT ScaleTransform(\n            [in] single HorizontalMultiplier,\n            [in] single VerticalMultiplier);\n        [id(0x0000000d)] HRESULT GetTransform(\n            [out] single* eM11,\n            [out] single* eM12,\n            [out] single* eM21,\n            [out] single* eM22,\n            [out] single* eDx,\n            [out] single* eDy);\n        [id(0x0000000e)] HRESULT SetTransform(\n            [in] single eM11,\n            [in] single eM12,\n            [in] single eM21,\n            [in] single eM22,\n            [in] single eDx,\n            [in] single eDy);\n        [id(0x00000007), propget, hidden] HRESULT eM11(\n            [out, retval] single* Value);\n        [id(0x00000007), propput, hidden] HRESULT eM11([in] single Value);\n        [id(0x00000008), propget, hidden] HRESULT eM12(\n            [out, retval] single* Value);\n        [id(0x00000008), propput, hidden] HRESULT eM12([in] single Value);\n        [id(0x00000009), propget, hidden] HRESULT eM21(\n            [out, retval] single* Value);\n        [id(0x00000009), propput, hidden] HRESULT eM21([in] single Value);\n        [id(0x0000000a), propget, hidden] HRESULT eM22(\n            [out, retval] single* Value);\n        [id(0x0000000a), propput, hidden] HRESULT eM22([in] single Value);\n        [id(0x0000000b), propget, hidden] HRESULT eDx(\n            [out, retval] single* Value);\n        [id(0x0000000b), propput, hidden] HRESULT eDx([in] single Value);\n        [id(0x0000000c), propget, hidden] HRESULT eDy(\n            [out, retval] single* Value);\n        [id(0x0000000c), propput, hidden] HRESULT eDy([in] single Value);\n        [id(0x0000000f), propget, hidden] HRESULT Data(\n            [out, retval] XFORM* XFORM);\n        [id(0x0000000f), propput, hidden] HRESULT Data([in] XFORM XFORM);\n    }\n\n    interface IInkDisp;\n\n    [\n        odl,\n        uuid(9794FF82-6071-4717-8A8B-6AC7C64A686E),\n        dual,\n        oleautomation\n    ]\n    interface IInkRectangle\n    {\n        [id(1), propget] HRESULT Top([out, retval] long* Units);\n        [id(1), propput] HRESULT Top([in] long Units);\n        [id(2), propget] HRESULT Left([out, retval] long* Units);\n        [id(2), propput] HRESULT Left([in] long Units);\n        [id(3), propget] HRESULT Bottom([out, retval] long* Units);\n        [id(3), propput] HRESULT Bottom([in] long Units);\n        [id(4), propget] HRESULT Right([out, retval] long* Units);\n        [id(4), propput] HRESULT Right([in] long Units);\n        [id(7), propget] HRESULT Data([out, retval] RECT* Rect);\n        [id(7), propput] HRESULT Data([in] RECT Rect);\n        [id(5)] HRESULT GetRectangle(\n            [out] long* Top,\n            [out] long* Left,\n            [out] long* Bottom,\n            [out] long* Right);\n        [id(6)] HRESULT SetRectangle(\n            [in] long Top,\n            [in] long Left,\n            [in] long Bottom,\n            [in] long Right);\n    }\n\n    interface IInkStrokes;\n\n    typedef enum {\n        TPMU_Default,\n        TPMU_Inches,\n        TPMU_Centimeters,\n        TPMU_Degrees,\n        TPMU_Radians,\n        TPMU_Seconds,\n        TPMU_Pounds,\n        TPMU_Grams\n    } TabletPropertyMetricUnit;\n\n    [\n        odl,\n        uuid(43242FEA-91D1-4A72-963E-FBB91829CFA2),\n        dual,\n        oleautomation\n    ]\n    interface IInkStrokeDisp : IDispatch {\n        [id(0x00000002), propget]    HRESULT Id([out, retval] long* Id);\n        [id(0x0000000d), propget]    HRESULT BezierPoints(\n            [out, retval] VARIANT* Points);\n        [id(0x00000004), propget]    HRESULT DrawingAttributes(\n            [out, retval] IInkDrawingAttributes** DrawAttrs);\n        [id(0x00000004), propputref] HRESULT DrawingAttributes(\n            [in] IInkDrawingAttributes* DrawAttrs);\n        [id(0x0000000c), propget]    HRESULT Ink([out, retval] IInkDisp** Ink);\n        [id(0x0000000b), propget]    HRESULT ExtendedProperties(\n            [out, retval] IInkExtendedProperties** Properties);\n        [id(0x0000000e), propget]    HRESULT PolylineCusps(\n            [out, retval] VARIANT* Cusps);\n        [id(0x0000000f), propget]    HRESULT BezierCusps(\n            [out, retval] VARIANT* Cusps);\n        [id(0x00000010), propget]    HRESULT SelfIntersections(\n            [out, retval] VARIANT* Intersections);\n        [id(0x00000011), propget]    HRESULT PacketCount(\n            [out, retval] long* plCount);\n        [id(0x00000012), propget]    HRESULT PacketSize(\n            [out, retval] long* plSize);\n        [id(0x00000013), propget]    HRESULT PacketDescription(\n            [out, retval] VARIANT* PacketDescription);\n        [id(0x00000014), propget]    HRESULT Deleted(\n            [out, retval] VARIANT_BOOL* Deleted);\n        [id(0x00000003)]             HRESULT GetBoundingBox(\n            [in, defaultvalue(0)] InkBoundingBoxMode BoundingBoxMode,\n            [out, retval] IInkRectangle** Rectangle);\n        [id(0x00000005)]             HRESULT FindIntersections(\n            [in] IInkStrokes* Strokes,\n            [out, retval] VARIANT* Intersections);\n        [id(0x00000006)]             HRESULT GetRectangleIntersections(\n            [in] IInkRectangle* Rectangle,\n            [out, retval] VARIANT* Intersections);\n        [id(0x00000007)]             HRESULT Clip(\n            [in] IInkRectangle* Rectangle);\n        [id(0x00000008)]             HRESULT HitTestCircle(\n            [in] long x,\n            [in] long y,\n            [in] single radius,\n            [out, retval] VARIANT_BOOL* Intersects);\n        [id(0x00000009)]             HRESULT NearestPoint(\n            [in] long x,\n            [in] long y,\n            [in, out, defaultvalue(0)] single* Distance,\n            [out, retval] single* Point);\n        [id(0x0000000a)]             HRESULT Split(\n            [in] single SplitAt,\n            [out, retval] IInkStrokeDisp** NewStroke);\n        [id(0x00000015)]             HRESULT GetPacketDescriptionPropertyMetrics(\n            [in] BSTR propertyName,\n            [out] long* Minimum,\n            [out] long* Maximum,\n            [out] TabletPropertyMetricUnit* Units,\n            [out] single* Resolution);\n        [id(0x00000016)]             HRESULT GetPoints(\n            [in, defaultvalue(0)] long Index,\n            [in, defaultvalue(-1)] long Count,\n            [out, retval] VARIANT* Points);\n        [id(0x00000017)]             HRESULT SetPoints(\n            [in] VARIANT Points,\n            [in, defaultvalue(0)] long Index,\n            [in, defaultvalue(-1)] long Count,\n            [out, retval] long* NumberOfPointsSet);\n        [id(0x00000018)]             HRESULT GetPacketData(\n            [in, defaultvalue(0)] long Index,\n            [in, defaultvalue(-1)] long Count,\n            [out, retval] VARIANT* PacketData);\n        [id(0x00000019)]             HRESULT GetPacketValuesByProperty(\n            [in] BSTR propertyName,\n            [in, defaultvalue(0)] long Index,\n            [in, defaultvalue(-1)] long Count,\n            [out, retval] VARIANT* PacketValues);\n        [id(0x0000001a)]             HRESULT SetPacketValuesByProperty(\n            [in] BSTR bstrPropertyName,\n            [in] VARIANT PacketValues,\n            [in, defaultvalue(0)] long Index,\n            [in, defaultvalue(-1)] long Count,\n            [out, retval] long* NumberOfPacketsSet);\n        [id(0x0000001b)]             HRESULT GetFlattenedBezierPoints(\n            [in, defaultvalue(0)] long FittingError,\n            [out, retval] VARIANT* FlattenedBezierPoints);\n        [id(0x0000001d)]             HRESULT Transform(\n            [in] IInkTransform* Transform,\n            [in, defaultvalue(0)] VARIANT_BOOL ApplyOnPenWidth);\n        [id(0x0000001c)]             HRESULT ScaleToRectangle(\n            [in] IInkRectangle* Rectangle);\n        [id(0x0000001e)]             HRESULT Move(\n            [in] single HorizontalComponent,\n            [in] single VerticalComponent);\n        [id(0x0000001f)]             HRESULT Rotate(\n            [in] single Degrees,\n            [in, defaultvalue(0)] single x,\n            [in, defaultvalue(0)] single y);\n        [id(0x00000020)]             HRESULT Shear(\n            [in] single HorizontalMultiplier,\n            [in] single VerticalMultiplier);\n        [id(0x00000021)]             HRESULT ScaleTransform(\n            [in] single HorizontalMultiplier,\n            [in] single VerticalMultiplier);\n    }\n\n    interface IInkRecognitionResult;\n\n    [\n        odl,\n        uuid(F1F4C9D8-590A-4963-B3AE-1935671BB6F3),\n        dual,\n        oleautomation\n    ]\n    interface IInkStrokes : IDispatch {\n        [propget]                   HRESULT Count(\n            [out, retval] long *Count);\n        [propget, restricted]       HRESULT _NewEnum(\n            [out, retval] IUnknown **_NewEnum);\n        [propget]                   HRESULT Ink(\n            [out, retval] IInkDisp **Ink);\n        [propget]                   HRESULT RecognitionResult(\n            [out, retval] IInkRecognitionResult **RecognitionResult);\n        HRESULT ToString(\n            [out, retval] BSTR *ToString);\n        HRESULT Item(\n            [in] long Index,\n            [out, retval] IInkStrokeDisp **Stroke);\n        HRESULT Add(\n            [in] IInkStrokeDisp *InkStroke);\n        HRESULT AddStrokes(\n            [in] IInkStrokes *InkStrokes);\n        HRESULT Remove(\n            [in] IInkStrokeDisp *InkStroke);\n        HRESULT RemoveStrokes(\n            [in] IInkStrokes *InkStrokes);\n        HRESULT ModifyDrawingAttributes(\n            [in] IInkDrawingAttributes *DrawAttrs);\n        HRESULT GetBoundingBox(\n            [in] InkBoundingBoxMode BoundingBoxMode,\n            [out, retval] IInkRectangle **BoundingBox);\n        HRESULT Transform(\n            [in] IInkTransform *Transform,\n            [in] VARIANT_BOOL ApplyOnPenWidth);\n        HRESULT ScaleToRectangle(\n            [in] IInkRectangle *Rectangle);\n        HRESULT Move(\n            [in] float HorizontalComponent,\n            [in] float VerticalComponent);\n        HRESULT Rotate(\n            [in] float Degrees,\n            [in] float x,\n            [in] float y);\n        HRESULT Shear(\n            [in] float HorizontalMultiplier,\n            [in] float VerticalMultiplier);\n        HRESULT ScaleTransform(\n            [in] float HorizontalMultiplier,\n            [in] float VerticalMultiplier);\n        HRESULT Clip(\n            [in] IInkRectangle *Rectangle);\n        HRESULT RemoveRecognitionResult();\n    }\n\n    [\n        odl,\n        uuid(7E23A88F-C30E-420f-9BDB-28902543F0C1),\n        dual,\n        oleautomation\n    ]\n    interface IInkCustomStrokes : IDispatch {\n        [propget]               HRESULT Count(\n            [out, retval] long *Count);\n        [propget]               HRESULT _NewEnum(\n            [out, retval] IUnknown **_NewEnum);\n        HRESULT Item(\n            [in] VARIANT Identifier,\n            [out, retval] IInkStrokes **Strokes);\n        HRESULT Add(\n            [in] BSTR Name,\n            [in] IInkStrokes *Strokes);\n        HRESULT Remove(\n            [in] VARIANT Identifier);\n        HRESULT Clear();\n    }\n\n    interface IInkRecognitionAlternate;\n    interface IInkRecognitionAlternates;\n\n    [\n        odl,\n        uuid(3BC129A8-86CD-45ad-BDE8-E0D32D61C16D),\n        dual,\n        oleautomation\n    ]\n    interface IInkRecognitionResult : IDispatch {\n        [propget]               HRESULT TopString(\n            [out, retval] BSTR *TopString);\n        [propget]               HRESULT TopAlternate(\n            [out, retval] IInkRecognitionAlternate **TopAlternate);\n        [propget]               HRESULT TopConfidence(\n            [out, retval] InkRecognitionConfidence *TopConfidence);\n        [propget]               HRESULT Strokes(\n            [out, retval] IInkStrokes **Strokes);\n        HRESULT AlternatesFromSelection(\n            [in] long selectionStart,\n            [in] long selectionLength,\n            [in] long maximumAlternates,\n            [out, retval] IInkRecognitionAlternates **AlternatesFromSelection);\n        HRESULT ModifyTopAlternate(\n            [in] IInkRecognitionAlternate *Alternate);\n        HRESULT SetResultOnStrokes();\n    }\n\n    [\n        odl,\n        uuid(B7E660AD-77E4-429b-ADDA-873780D1FC4A),\n        dual,\n        oleautomation\n    ]\n    interface IInkRecognitionAlternate : IDispatch {\n        [propget]               HRESULT String(\n            [out, retval] BSTR *RecoString);\n        [propget]               HRESULT Confidence(\n            [out, retval] InkRecognitionConfidence *Confidence);\n        [propget]               HRESULT Baseline(\n            [out, retval] VARIANT *Baseline);\n        [propget]               HRESULT Midline(\n            [out, retval] VARIANT *Midline);\n        [propget]               HRESULT Ascender(\n            [out, retval] VARIANT *Ascender);\n        [propget]               HRESULT Descender(\n            [out, retval] VARIANT *Descender);\n        [propget]               HRESULT LineNumber(\n            [out, retval] long *LineNumber);\n        [propget]               HRESULT Strokes(\n            [out, retval] IInkStrokes **Strokes);\n        [propget]               HRESULT LineAlternates(\n            [out, retval] IInkRecognitionAlternates **LineAlternates);\n        [propget]               HRESULT ConfidenceAlternates(\n            [out, retval] IInkRecognitionAlternates **ConfidenceAlternates);\n        HRESULT GetStrokesFromStrokeRanges(\n            [in] IInkStrokes *Stroke,\n            [out, retval] IInkStrokes **GetStrokesFromTextRange);\n        HRESULT GetStrokesFromTextRange(\n            [in, out] long *selectionStart,\n            [in, out] long *selectionLength,\n            [out, retval] IInkStrokes **GetStrokesFromTextRange);\n        HRESULT GetTextRangeFromStrokes(\n            [in] IInkStrokes *Strokes,\n            [in, out] long *selectionStart,\n            [in, out] long *selectionLength);\n        HRESULT AlternatesWithConstantPropertyValues(\n            [in] BSTR PropertyType,\n            [out, retval] IInkRecognitionAlternates **AlternatesWithConstantPropertyValues);\n        HRESULT GetPropertyValue(\n            [in] BSTR PropertyType,\n            [out, retval] VARIANT *PropertyValue);\n    }\n\n    [\n        odl,\n        uuid(286A167F-9F19-4c61-9D53-4F07BE622B84),\n        dual,\n        oleautomation\n    ]\n    interface IInkRecognitionAlternates : IDispatch {\n    [propget]                   HRESULT Count(\n        [out, retval] long *Count);\n    [propget, restricted]       HRESULT _NewEnum(\n        [out, retval] IUnknown **_NewEnum);\n    [propget]                   HRESULT Strokes(\n        [out, retval] IInkStrokes **Strokes);\n    HRESULT Item(\n        [in] long Index,\n        [out, retval] IInkRecognitionAlternate **InkRecoAlternate);\n    }\n\n    [\n        odl,\n        uuid(9D398FA0-C4E2-4fcd-9973-975CAAF47EA6),\n        dual,\n        oleautomation\n    ]\n    interface IInkDisp : IDispatch {\n        [propget]               HRESULT Strokes(\n            [out, retval] IInkStrokes **Strokes);\n        [propget]               HRESULT ExtendedProperties(\n            [out, retval] IInkExtendedProperties **Properties);\n        [propget]               HRESULT Dirty(\n            [out, retval] VARIANT_BOOL *Dirty);\n        [propput]               HRESULT Dirty(\n            [in] VARIANT_BOOL Dirty);\n        [propget]               HRESULT CustomStrokes(\n            [out, retval] IInkCustomStrokes **CustomStrokes);\n        HRESULT GetBoundingBox(\n            [in] InkBoundingBoxMode BoundingBoxMode,\n            [out] IInkRectangle **Rectangle);\n        HRESULT DeleteStrokes(\n            [in, unique] IInkStrokes *Strokes);\n        HRESULT DeleteStroke(\n            [in] IInkStrokeDisp *Stroke);\n        HRESULT ExtractStrokes(\n            [in] IInkStrokes *Strokes,\n            [in] InkExtractFlags ExtractFlags,\n            [out, retval] IInkDisp **ExtractedInk);\n        HRESULT ExtractWithRectangle(\n            [in] IInkRectangle *Rectangle,\n            [in] InkExtractFlags ExtractFlags,\n            [out, retval] IInkDisp **ExtractedInk);\n        HRESULT Clip(\n            [in] IInkRectangle *Rectangle);\n        HRESULT Clone(\n            [out, retval] IInkDisp **NewInk);\n        HRESULT HitTestCircle(\n            [in] long X,\n            [in] long Y,\n            [in] float radius,\n            [out, retval] IInkStrokes **Strokes);\n        HRESULT HitTestWithRectangle(\n            [in] IInkRectangle *SelectionRectangle,\n            [in] float IntersectPercent,\n            [out, retval] IInkStrokes **Strokes);\n        HRESULT HitTestWithLasso(\n            [in] VARIANT Points,\n            [in] float IntersectPercent,\n            [in, out, unique] VARIANT *LassoPoints,\n            [out, retval] IInkStrokes **Strokes);\n        HRESULT NearestPoint(\n            [in] long X,\n            [in] long Y,\n            [in, out] float *PointOnStroke,\n            [in, out] float *DistanceFromPacket,\n            [out, retval] IInkStrokeDisp **Stroke);\n        HRESULT CreateStrokes(\n            [in] VARIANT StrokeIds,\n            [out, retval] IInkStrokes **Strokes);\n        HRESULT AddStrokesAtRectangle(\n            [in] IInkStrokes *SourceStrokes,\n            [in] IInkRectangle *TargetRectangle);\n        HRESULT Save(\n            [in] InkPersistenceFormat PersistenceFormat,\n            [in] InkPersistenceCompressionMode CompressionMode,\n            [out, retval] VARIANT *Data);\n        HRESULT Load(\n            [in] VARIANT Data);\n        HRESULT CreateStroke(\n            [in] VARIANT PacketData,\n            [in] VARIANT PacketDescription,\n            [out, retval] IInkStrokeDisp **Stroke);\n        HRESULT ClipboardCopyWithRectangle(\n            [in] IInkRectangle *Rectangle,\n            [in] InkClipboardFormats ClipboardFormats,\n            [in] InkClipboardModes ClipboardModes,\n            [out, retval] IDataObject **DataObject);\n        HRESULT ClipboardCopy(\n            [in] IInkStrokes *strokes,\n            [in] InkClipboardFormats ClipboardFormats,\n            [in] InkClipboardModes ClipboardModes,\n            [out, retval] IDataObject **DataObject);\n        HRESULT CanPaste(\n            [in] IDataObject *DataObject,\n            [out, retval] VARIANT_BOOL *CanPaste);\n        HRESULT ClipboardPaste(\n            [in] long x,\n            [in] long y,\n            [in, unique] IDataObject *DataObject,\n            [out, retval] IInkStrokes **Strokes);\n    }\n\n    [\n        odl,\n        uuid(E6257A9C-B511-4F4C-A8B0-A7DBC9506B83),\n        dual,\n        oleautomation\n    ]\n    interface IInkRenderer : IDispatch {\n        HRESULT GetViewTransform([in] IInkTransform* ViewTransform);\n        HRESULT SetViewTransform([in] IInkTransform* ViewTransform);\n        HRESULT GetObjectTransform([in] IInkTransform* ObjectTransform);\n        HRESULT SetObjectTransform([in] IInkTransform* ObjectTransform);\n        HRESULT Draw(\n            [in] long hDC,\n            [in] IInkStrokes* Strokes);\n        HRESULT DrawStroke(\n            [in] long hDC,\n            [in] IInkStrokeDisp* Stroke,\n            [in, defaultvalue(0)]\n            IInkDrawingAttributes* DrawingAttributes);\n        HRESULT PixelToInkSpace(\n            [in] long hDC,\n            [in, out] long* x,\n            [in, out] long* y);\n        HRESULT InkSpaceToPixel(\n            [in] long hdcDisplay,\n            [in, out] long* x,\n            [in, out] long* y);\n        HRESULT PixelToInkSpaceFromPoints(\n            [in] long hDC,\n            [in, out] VARIANT* Points);\n        HRESULT InkSpaceToPixelFromPoints(\n            [in] long hDC,\n            [in, out] VARIANT* Points);\n        HRESULT Measure(\n            [in] IInkStrokes* Strokes,\n            [out, retval] IInkRectangle** Rectangle);\n        HRESULT MeasureStroke(\n            [in] IInkStrokeDisp* Stroke,\n            [in, defaultvalue(0)] IInkDrawingAttributes* DrawingAttributes,\n            [out, retval] IInkRectangle** Rectangle);\n        HRESULT Move(\n            [in] single HorizontalComponent,\n            [in] single VerticalComponent);\n        HRESULT Rotate(\n            [in] single Degrees,\n            [in, defaultvalue(0)] single x,\n            [in, defaultvalue(0)] single y);\n        HRESULT ScaleTransform(\n            [in] single HorizontalMultiplier,\n            [in] single VerticalMultiplier,\n            [in, defaultvalue(-1)] VARIANT_BOOL ApplyOnPenWidth);\n    }\n\n    typedef enum {\n        ICM_InkOnly,\n        ICM_GestureOnly,\n        ICM_InkAndGesture\n    } InkCollectionMode;\n\n    typedef enum {\n        IMP_Default,\n        IMP_Arrow,\n        IMP_Crosshair,\n        IMP_Ibeam,\n        IMP_SizeNESW,\n        IMP_SizeNS,\n        IMP_SizeNWSE,\n        IMP_SizeWE,\n        IMP_UpArrow,\n        IMP_Hourglass,\n        IMP_NoDrop,\n        IMP_ArrowHourglass,\n        IMP_ArrowQuestion,\n        IMP_SizeAll,\n        IMP_Hand,\n        IMP_Custom = 99\n    } InkMousePointer;\n\n    typedef enum {\n        THWC_Integrated = 1,\n        THWC_CursorMustTouch = 2,\n        THWC_HardProximity = 4,\n        THWC_CursorsHavePhysicalIds = 8\n    } TabletHardwareCapabilities;\n\n    [\n        odl,\n        uuid(2DE25EAA-6EF8-42D5-AEE9-185BC81B912D),\n        dual,\n        oleautomation\n    ]\n    interface IInkTablet : IDispatch {\n        [propget] HRESULT Name([out, retval] BSTR* Name);\n        [propget] HRESULT PlugAndPlayId([out, retval] BSTR* Id);\n        [propget] HRESULT MaximumInputRectangle([out, retval] IInkRectangle** Rectangle);\n        [propget] HRESULT HardwareCapabilities(\n            [out, retval] TabletHardwareCapabilities* Capabilities);\n        HRESULT IsPacketPropertySupported(\n            [in] BSTR packetPropertyName,\n            [out, retval] VARIANT_BOOL* Supported);\n        HRESULT GetPropertyMetrics(\n            [in] BSTR propertyName,\n            [out] long* Minimum,\n            [out] long* Maximum,\n            [out] TabletPropertyMetricUnit* Units,\n            [out] single* Resolution);\n    }\n\n    typedef enum {\n        ICBS_Unavailable,\n        ICBS_Up,\n        ICBS_Down\n    } InkCursorButtonState;\n\n    [\n        odl,\n        uuid(85EF9417-1D59-49B2-A13C-702C85430894),\n        dual,\n        oleautomation\n    ]\n    interface IInkCursorButton : IDispatch {\n        [propget] HRESULT Name([out, retval] BSTR* Name);\n        [propget] HRESULT Id([out, retval] BSTR* Id);\n        [propget] HRESULT State([out, retval] InkCursorButtonState* CurrentState);\n    }\n\n    [\n        odl,\n        uuid(3671CC40-B624-4671-9FA0-DB119D952D54),\n        dual,\n        oleautomation\n    ]\n    interface IInkCursorButtons : IDispatch {\n        [propget] HRESULT Count([out, retval] long* Count);\n        [propget] HRESULT _NewEnum([out, retval] IUnknown** _NewEnum);\n        HRESULT Item(\n            [in] VARIANT Identifier,\n            [out, retval] IInkCursorButton** Button);\n    }\n\n    [\n        odl,\n        uuid(AD30C630-40C5-4350-8405-9C71012FC558),\n        dual,\n        oleautomation\n    ]\n    interface IInkCursor : IDispatch {\n        [id(0x00000000), propget]    HRESULT Name([out, retval] BSTR* Name);\n        [id(0x00000001), propget]    HRESULT Id([out, retval] long* Id);\n        [id(0x00000004), propget]    HRESULT Inverted(\n            [out, retval] VARIANT_BOOL* Status);\n        [id(0x00000002), propget]    HRESULT DrawingAttributes(\n            [out, retval] IInkDrawingAttributes** Attributes);\n        [id(0x00000002), propputref] HRESULT DrawingAttributes(\n            [in] IInkDrawingAttributes* Attributes);\n        [id(0x00000005), propget]    HRESULT Tablet(\n            [out, retval] IInkTablet** Tablet);\n        [id(0x00000003), propget]    HRESULT Buttons(\n            [out, retval] IInkCursorButtons** Buttons);\n    }\n\n    [\n        odl,\n        uuid(A248C1AC-C698-4E06-9E5C-D57F77C7E647),\n        dual,\n        oleautomation\n    ]\n    interface IInkCursors : IDispatch {\n        [propget] HRESULT Count([out, retval] long* Count);\n        [propget] HRESULT _NewEnum([out, retval] IUnknown** _NewEnum);\n        HRESULT Item(\n            [in] long Index,\n            [out, retval] IInkCursor** Cursor);\n    }\n\n    typedef enum {\n        IAG_AllGestures = 0,\n        IAG_NoGesture = 61440,\n        IAG_Scratchout = 61441,\n        IAG_Triangle = 61442,\n        IAG_Square = 61443,\n        IAG_Star = 61444,\n        IAG_Check = 61445,\n        IAG_Curlicue = 61456,\n        IAG_DoubleCurlicue = 61457,\n        IAG_Circle = 61472,\n        IAG_DoubleCircle = 61473,\n        IAG_SemiCircleLeft = 61480,\n        IAG_SemiCircleRight = 61481,\n        IAG_ChevronUp = 61488,\n        IAG_ChevronDown = 61489,\n        IAG_ChevronLeft = 61490,\n        IAG_ChevronRight = 61491,\n        IAG_ArrowUp = 61496,\n        IAG_ArrowDown = 61497,\n        IAG_ArrowLeft = 61498,\n        IAG_ArrowRight = 61499,\n        IAG_Up = 61528,\n        IAG_Down = 61529,\n        IAG_Left = 61530,\n        IAG_Right = 61531,\n        IAG_UpDown = 61536,\n        IAG_DownUp = 61537,\n        IAG_LeftRight = 61538,\n        IAG_RightLeft = 61539,\n        IAG_UpLeftLong = 61540,\n        IAG_UpRightLong = 61541,\n        IAG_DownLeftLong = 61542,\n        IAG_DownRightLong = 61543,\n        IAG_UpLeft = 61544,\n        IAG_UpRight = 61545,\n        IAG_DownLeft = 61546,\n        IAG_DownRight = 61547,\n        IAG_LeftUp = 61548,\n        IAG_LeftDown = 61549,\n        IAG_RightUp = 61550,\n        IAG_RightDown = 61551,\n        IAG_Exclamation = 61604,\n        IAG_Tap = 61680,\n        IAG_DoubleTap = 61681\n    } InkApplicationGesture;\n\n    typedef enum {\n        ICEI_DefaultEvents = -1,\n        ICEI_CursorDown = 0,\n        ICEI_Stroke,\n        ICEI_NewPackets,\n        ICEI_NewInAirPackets,\n        ICEI_CursorButtonDown,\n        ICEI_CursorButtonUp,\n        ICEI_CursorInRange,\n        ICEI_CursorOutOfRange,\n        ICEI_SystemGesture,\n        ICEI_TabletAdded,\n        ICEI_TabletRemoved,\n        ICEI_MouseDown,\n        ICEI_MouseMove,\n        ICEI_MouseUp,\n        ICEI_MouseWheel,\n        ICEI_DblClick,\n        ICEI_AllEvents\n    } InkCollectorEventInterest;\n\n    [\n        odl,\n        uuid(F0F060B5-8B1F-4A7C-89EC-880692588A4F),\n        dual,\n        oleautomation\n    ]\n    interface IInkCollector : IDispatch {\n        [id(0x00000002), propget]    HRESULT hWnd(\n            [out, retval] long* CurrentWindow);\n        [id(0x00000002), propput]    HRESULT hWnd([in] long CurrentWindow);\n        [id(0x00000001), propget]    HRESULT Enabled(\n            [out, retval] VARIANT_BOOL* Collecting);\n        [id(0x00000001), propput]    HRESULT Enabled(\n            [in] VARIANT_BOOL Collecting);\n        [id(0x00000005), propget]    HRESULT DefaultDrawingAttributes(\n            [out, retval] IInkDrawingAttributes** CurrentAttributes);\n        [id(0x00000005), propputref] HRESULT DefaultDrawingAttributes(\n            [in] IInkDrawingAttributes* CurrentAttributes);\n        [id(0x00000006), propget]    HRESULT Renderer(\n            [out, retval] IInkRenderer** CurrentInkRenderer);\n        [id(0x00000006), propputref] HRESULT Renderer(\n            [in] IInkRenderer* CurrentInkRenderer);\n        [id(0x00000007), propget]    HRESULT Ink([out, retval] IInkDisp** Ink);\n        [id(0x00000007), propputref] HRESULT Ink([in] IInkDisp* Ink);\n        [id(0x00000008), propget]    HRESULT AutoRedraw(\n            [out, retval] VARIANT_BOOL* AutoRedraw);\n        [id(0x00000008), propput]    HRESULT AutoRedraw(\n            [in] VARIANT_BOOL AutoRedraw);\n        [id(0x00000009), propget]    HRESULT CollectingInk(\n            [out, retval] VARIANT_BOOL* Collecting);\n        [id(0x0000001c), propget]    HRESULT CollectionMode(\n            [out, retval] InkCollectionMode* Mode);\n        [id(0x0000001c), propput]    HRESULT CollectionMode(\n            [in] InkCollectionMode Mode);\n        [id(0x0000001f), propget]    HRESULT DynamicRendering(\n            [out, retval] VARIANT_BOOL* Enabled);\n        [id(0x0000001f), propput]    HRESULT DynamicRendering(\n            [in] VARIANT_BOOL Enabled);\n        [id(0x00000020), propget]    HRESULT DesiredPacketDescription(\n            [out, retval] VARIANT* PacketGuids);\n        [id(0x00000020), propput]    HRESULT DesiredPacketDescription(\n            [in] VARIANT PacketGuids);\n        [id(0x00000023), propget]    HRESULT MouseIcon(\n            [out, retval] IPictureDisp** MouseIcon);\n        [id(0x00000023), propput]    HRESULT MouseIcon(\n            [in] IPictureDisp* MouseIcon);\n        [id(0x00000023), propputref] HRESULT MouseIcon(\n            [in] IPictureDisp* MouseIcon);\n        [id(0x00000024), propget]    HRESULT MousePointer(\n            [out, retval] InkMousePointer* MousePointer);\n        [id(0x00000024), propput]    HRESULT MousePointer(\n            [in] InkMousePointer MousePointer);\n        [id(0x00000014), propget]    HRESULT Cursors(\n            [out, retval] IInkCursors** Cursors);\n        [id(0x00000015), propget]    HRESULT MarginX(\n            [out, retval] long* MarginX);\n        [id(0x00000015), propput]    HRESULT MarginX([in] long MarginX);\n        [id(0x00000016), propget]    HRESULT MarginY(\n            [out, retval] long* MarginY);\n        [id(0x00000016), propput]    HRESULT MarginY([in] long MarginY);\n        [id(0x00000019), propget]    HRESULT Tablet(\n            [out, retval] IInkTablet** SingleTablet);\n        [id(0x00000026), propget]    HRESULT SupportHighContrastInk(\n            [out, retval] VARIANT_BOOL* Support);\n        [id(0x00000026), propput]    HRESULT SupportHighContrastInk(\n            [in] VARIANT_BOOL Support);\n        [id(0x0000001d)]             HRESULT SetGestureStatus(\n            [in] InkApplicationGesture Gesture,\n            [in] VARIANT_BOOL Listen);\n        [id(0x0000001e)]             HRESULT GetGestureStatus(\n            [in] InkApplicationGesture Gesture,\n            [out, retval] VARIANT_BOOL* Listening);\n        [id(0x00000018)]             HRESULT GetWindowInputRectangle(\n            [in, out] IInkRectangle** WindowInputRectangle);\n        [id(0x00000017)]             HRESULT SetWindowInputRectangle(\n            [in] IInkRectangle* WindowInputRectangle);\n        [id(0x0000001a)]             HRESULT SetAllTabletsMode(\n            [in, defaultvalue(-1)] VARIANT_BOOL UseMouseForInput);\n        [id(0x0000001b)]             HRESULT SetSingleTabletIntegratedMode(\n            [in] IInkTablet* Tablet);\n        [id(0x0000000b)]             HRESULT GetEventInterest(\n            [in] InkCollectorEventInterest EventId,\n            [out, retval] VARIANT_BOOL* Listen);\n        [id(0x0000000a)]             HRESULT SetEventInterest(\n            [in] InkCollectorEventInterest EventId,\n            [in] VARIANT_BOOL Listen);\n    }\n}\n"
  },
  {
    "path": "wine/windows/msiquery.h",
    "content": "/*\n * Copyright (C) 2002,2003 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_MSIQUERY_H\n#define __WINE_MSIQUERY_H\n\n#include <msi.h>\n\ntypedef enum tagMSICONDITION\n{\n    MSICONDITION_FALSE = 0,\n    MSICONDITION_TRUE  = 1,\n    MSICONDITION_NONE  = 2,\n    MSICONDITION_ERROR = 3,\n} MSICONDITION;\n\n#define MSI_NULL_INTEGER 0x80000000\n\ntypedef enum tagMSICOLINFO\n{\n    MSICOLINFO_NAMES = 0,\n    MSICOLINFO_TYPES = 1\n} MSICOLINFO;\n\ntypedef enum tagMSICOSTTREE\n{\n    MSICOSTTREE_SELFONLY = 0,\n    MSICOSTTREE_CHILDREN = 1,\n    MSICOSTTREE_PARENTS  = 2,\n    MSICOSTTREE_PRODUCT  = 3,\n} MSICOSTTREE;\n\ntypedef enum tagMSIMODIFY\n{\n    MSIMODIFY_SEEK = -1,\n    MSIMODIFY_REFRESH = 0,\n    MSIMODIFY_INSERT = 1,\n    MSIMODIFY_UPDATE = 2,\n    MSIMODIFY_ASSIGN = 3,\n    MSIMODIFY_REPLACE = 4,\n    MSIMODIFY_MERGE = 5,\n    MSIMODIFY_DELETE = 6,\n    MSIMODIFY_INSERT_TEMPORARY = 7,\n    MSIMODIFY_VALIDATE = 8,\n    MSIMODIFY_VALIDATE_NEW = 9,\n    MSIMODIFY_VALIDATE_FIELD = 10,\n    MSIMODIFY_VALIDATE_DELETE = 11\n} MSIMODIFY;\n\n#ifndef WINE_NO_UNICODE_MACROS\n#define MSIDBOPEN_READONLY (LPCTSTR)0\n#define MSIDBOPEN_TRANSACT (LPCTSTR)1\n#define MSIDBOPEN_DIRECT   (LPCTSTR)2\n#define MSIDBOPEN_CREATE   (LPCTSTR)3\n#define MSIDBOPEN_CREATEDIRECT (LPCTSTR)4\n#else\n#define MSIDBOPEN_READONLY (LPCWSTR)0\n#define MSIDBOPEN_TRANSACT (LPCWSTR)1\n#define MSIDBOPEN_DIRECT   (LPCWSTR)2\n#define MSIDBOPEN_CREATE   (LPCWSTR)3\n#define MSIDBOPEN_CREATEDIRECT (LPCWSTR)4\n#endif\n\n#define MSIDBOPEN_PATCHFILE 32 / sizeof(*MSIDBOPEN_READONLY)\n\ntypedef enum tagMSIRUNMODE\n{\n    MSIRUNMODE_ADMIN = 0,\n    MSIRUNMODE_ADVERTISE = 1,\n    MSIRUNMODE_MAINTENANCE = 2,\n    MSIRUNMODE_ROLLBACKENABLED = 3,\n    MSIRUNMODE_LOGENABLED = 4,\n    MSIRUNMODE_OPERATIONS = 5,\n    MSIRUNMODE_REBOOTATEND = 6,\n    MSIRUNMODE_REBOOTNOW = 7,\n    MSIRUNMODE_CABINET = 8,\n    MSIRUNMODE_SOURCESHORTNAMES = 9,\n    MSIRUNMODE_TARGETSHORTNAMES = 10,\n    MSIRUNMODE_RESERVED11 = 11,\n    MSIRUNMODE_WINDOWS9X = 12,\n    MSIRUNMODE_ZAWENABLED = 13,\n    MSIRUNMODE_RESERVED14 = 14,\n    MSIRUNMODE_RESERVED15 = 15,\n    MSIRUNMODE_SCHEDULED = 16,\n    MSIRUNMODE_ROLLBACK = 17,\n    MSIRUNMODE_COMMIT = 18\n} MSIRUNMODE;\n\ntypedef enum tagMSIDBERROR\n{\n    MSIDBERROR_INVALIDARG = -3,\n    MSIDBERROR_MOREDATA = -2,\n    MSIDBERROR_FUNCTIONERROR = -1,\n    MSIDBERROR_NOERROR = 0,\n    MSIDBERROR_DUPLICATEKEY = 1,\n    MSIDBERROR_REQUIRED = 2,\n    MSIDBERROR_BADLINK = 3,\n    MSIDBERROR_OVERFLOW = 4,\n    MSIDBERROR_UNDERFLOW = 5,\n    MSIDBERROR_NOTINSET = 6,\n    MSIDBERROR_BADVERSION = 7,\n    MSIDBERROR_BADCASE = 8,\n    MSIDBERROR_BADGUID = 9,\n    MSIDBERROR_BADWILDCARD = 10,\n    MSIDBERROR_BADIDENTIFIER = 11,\n    MSIDBERROR_BADLANGUAGE = 12,\n    MSIDBERROR_BADFILENAME = 13,\n    MSIDBERROR_BADPATH = 14,\n    MSIDBERROR_BADCONDITION = 15,\n    MSIDBERROR_BADFORMATTED = 16,\n    MSIDBERROR_BADTEMPLATE = 17,\n    MSIDBERROR_BADDEFAULTDIR = 18,\n    MSIDBERROR_BADREGPATH = 19,\n    MSIDBERROR_BADCUSTOMSOURCE = 20,\n    MSIDBERROR_BADPROPERTY = 21,\n    MSIDBERROR_MISSINGDATA = 22,\n    MSIDBERROR_BADCATEGORY = 23,\n    MSIDBERROR_BADKEYTABLE = 24,\n    MSIDBERROR_BADMAXMINVALUES = 25,\n    MSIDBERROR_BADCABINET = 26,\n    MSIDBERROR_BADSHORTCUT= 27,\n    MSIDBERROR_STRINGOVERFLOW = 28,\n    MSIDBERROR_BADLOCALIZEATTRIB = 29\n} MSIDBERROR; \n\ntypedef enum tagMSIDBSTATE\n{\n    MSIDBSTATE_ERROR = -1,\n    MSIDBSTATE_READ = 0,\n    MSIDBSTATE_WRITE = 1\n} MSIDBSTATE;\n\ntypedef enum tagMSITRANSFORM_VALIDATE\n{\n    MSITRANSFORM_VALIDATE_LANGUAGE                   = 0x00000001,\n    MSITRANSFORM_VALIDATE_PRODUCT                    = 0x00000002,\n    MSITRANSFORM_VALIDATE_PLATFORM                   = 0x00000004,\n    MSITRANSFORM_VALIDATE_MAJORVERSION               = 0x00000008,\n    MSITRANSFORM_VALIDATE_MINORVERSION               = 0x00000010,\n    MSITRANSFORM_VALIDATE_UPDATEVERSION              = 0x00000020,\n    MSITRANSFORM_VALIDATE_NEWLESSBASEVERSION         = 0x00000040,\n    MSITRANSFORM_VALIDATE_NEWLESSEQUALBASEVERSION    = 0x00000080,\n    MSITRANSFORM_VALIDATE_NEWEQUALBASEVERSION        = 0x00000100,\n    MSITRANSFORM_VALIDATE_NEWGREATEREQUALBASEVERSION = 0x00000200,\n    MSITRANSFORM_VALIDATE_NEWGREATERBASEVERSION      = 0x00000400,\n    MSITRANSFORM_VALIDATE_UPGRADECODE                = 0x00000800\n} MSITRANSFORM_VALIDATE;\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* view manipulation */\nUINT WINAPI MsiViewFetch(MSIHANDLE,MSIHANDLE*);\nUINT WINAPI MsiViewExecute(MSIHANDLE,MSIHANDLE);\nUINT WINAPI MsiViewClose(MSIHANDLE);\nUINT WINAPI MsiDatabaseOpenViewA(MSIHANDLE,LPCSTR,MSIHANDLE*);\nUINT WINAPI MsiDatabaseOpenViewW(MSIHANDLE,LPCWSTR,MSIHANDLE*);\n#define     MsiDatabaseOpenView WINELIB_NAME_AW(MsiDatabaseOpenView)\nMSIDBERROR WINAPI MsiViewGetErrorA(MSIHANDLE,LPSTR,LPDWORD);\nMSIDBERROR WINAPI MsiViewGetErrorW(MSIHANDLE,LPWSTR,LPDWORD);\n#define     MsiViewGetError WINELIB_NAME_AW(MsiViewGetError)\n\nMSIDBSTATE WINAPI MsiGetDatabaseState(MSIHANDLE);\n\n/* record manipulation */\nMSIHANDLE WINAPI MsiCreateRecord(UINT);\nUINT WINAPI MsiRecordClearData(MSIHANDLE);\nUINT WINAPI MsiRecordSetInteger(MSIHANDLE,UINT,int);\nUINT WINAPI MsiRecordSetStringA(MSIHANDLE,UINT,LPCSTR);\nUINT WINAPI MsiRecordSetStringW(MSIHANDLE,UINT,LPCWSTR);\n#define     MsiRecordSetString WINELIB_NAME_AW(MsiRecordSetString)\nUINT WINAPI MsiRecordGetStringA(MSIHANDLE,UINT,LPSTR,LPDWORD);\nUINT WINAPI MsiRecordGetStringW(MSIHANDLE,UINT,LPWSTR,LPDWORD);\n#define     MsiRecordGetString WINELIB_NAME_AW(MsiRecordGetString)\nUINT WINAPI MsiRecordGetFieldCount(MSIHANDLE);\nint WINAPI MsiRecordGetInteger(MSIHANDLE,UINT);\nUINT WINAPI MsiRecordDataSize(MSIHANDLE,UINT);\nBOOL WINAPI MsiRecordIsNull(MSIHANDLE,UINT);\nUINT WINAPI MsiFormatRecordA(MSIHANDLE,MSIHANDLE,LPSTR,LPDWORD);\nUINT WINAPI MsiFormatRecordW(MSIHANDLE,MSIHANDLE,LPWSTR,LPDWORD);\n#define     MsiFormatRecord WINELIB_NAME_AW(MsiFormatRecord)\nUINT WINAPI MsiRecordSetStreamA(MSIHANDLE,UINT,LPCSTR);\nUINT WINAPI MsiRecordSetStreamW(MSIHANDLE,UINT,LPCWSTR);\n#define     MsiRecordSetStream WINELIB_NAME_AW(MsiRecordSetStream)\nUINT WINAPI MsiRecordReadStream(MSIHANDLE,UINT,char*,LPDWORD);\n\nUINT WINAPI MsiDatabaseGetPrimaryKeysA(MSIHANDLE,LPCSTR,MSIHANDLE*);\nUINT WINAPI MsiDatabaseGetPrimaryKeysW(MSIHANDLE,LPCWSTR,MSIHANDLE*);\n#define     MsiDatabaseGetPrimaryKeys WINELIB_NAME_AW(MsiDatabaseGetPrimaryKeys)\n\n/* installing */\nUINT WINAPI MsiDoActionA(MSIHANDLE,LPCSTR );\nUINT WINAPI MsiDoActionW(MSIHANDLE,LPCWSTR );\n#define     MsiDoAction WINELIB_NAME_AW(MsiDoAction)\n\n/* database transforms */\nUINT WINAPI MsiDatabaseApplyTransformA(MSIHANDLE,LPCSTR,int);\nUINT WINAPI MsiDatabaseApplyTransformW(MSIHANDLE,LPCWSTR,int);\n#define     MsiDatabaseApplyTransform WINELIB_NAME_AW(MsiDatabaseApplyTransform)\nUINT WINAPI MsiDatabaseGenerateTransformA(MSIHANDLE,MSIHANDLE,LPCSTR,int,int);\nUINT WINAPI MsiDatabaseGenerateTransformW(MSIHANDLE,MSIHANDLE,LPCWSTR,int,int);\n#define     MsiDatabaseGenerateTransform WINELIB_NAME_AW(MsiDatabaseGenerateTransform)\n\nUINT WINAPI MsiDatabaseCommit(MSIHANDLE);\n\n/* install state */\nUINT WINAPI MsiGetFeatureStateA(MSIHANDLE,LPCSTR,INSTALLSTATE*,INSTALLSTATE*);\nUINT WINAPI MsiGetFeatureStateW(MSIHANDLE,LPCWSTR,INSTALLSTATE*,INSTALLSTATE*);\n#define     MsiGetFeatureState WINELIB_NAME_AW(MsiGetFeatureState)\nUINT WINAPI MsiGetFeatureValidStatesA(MSIHANDLE,LPCSTR,LPDWORD);\nUINT WINAPI MsiGetFeatureValidStatesW(MSIHANDLE,LPCWSTR,LPDWORD);\n#define     MsiGetFeatureValidStates WINELIB_NAME_AW(MsiGetFeatureValidStates)\nUINT WINAPI MsiSetComponentStateA(MSIHANDLE,LPCSTR,INSTALLSTATE);\nUINT WINAPI MsiSetComponentStateW(MSIHANDLE,LPCWSTR,INSTALLSTATE);\n#define     MsiSetComponentState WINELIB_NAME_AW(MsiSetComponentState)\nUINT WINAPI MsiGetComponentStateA(MSIHANDLE,LPCSTR,INSTALLSTATE*,INSTALLSTATE*);\nUINT WINAPI MsiGetComponentStateW(MSIHANDLE,LPCWSTR,INSTALLSTATE*,INSTALLSTATE*);\n#define     MsiGetComponentState WINELIB_NAME_AW(MsiGetComponentState)\n\nMSICONDITION WINAPI MsiEvaluateConditionA(MSIHANDLE,LPCSTR);\nMSICONDITION WINAPI MsiEvaluateConditionW(MSIHANDLE,LPCWSTR);\n#define     MsiEvaluateCondition WINELIB_NAME_AW(MsiEvaluateCondition)\n\n/* property functions */\nUINT WINAPI MsiGetPropertyA(MSIHANDLE, LPCSTR, LPSTR, LPDWORD);\nUINT WINAPI MsiGetPropertyW(MSIHANDLE, LPCWSTR, LPWSTR, LPDWORD);\n#define     MsiGetProperty WINELIB_NAME_AW(MsiGetProperty)\n\nUINT WINAPI MsiSetPropertyA(MSIHANDLE, LPCSTR, LPCSTR);\nUINT WINAPI MsiSetPropertyW(MSIHANDLE, LPCWSTR, LPCWSTR);\n#define     MsiSetProperty WINELIB_NAME_AW(MsiSetProperty)\n\nUINT WINAPI MsiGetTargetPathA(MSIHANDLE,LPCSTR,LPSTR,LPDWORD);\nUINT WINAPI MsiGetTargetPathW(MSIHANDLE,LPCWSTR,LPWSTR,LPDWORD);\n#define     MsiGetTargetPath WINELIB_NAME_AW(MsiGetTargetPath)\n\nUINT WINAPI MsiSetTargetPathA(MSIHANDLE, LPCSTR, LPCSTR);\nUINT WINAPI MsiSetTargetPathW(MSIHANDLE, LPCWSTR, LPCWSTR);\n#define     MsiSetTargetPath WINELIB_NAME_AW(MsiSetTargetPath)\n\nUINT WINAPI MsiGetSourcePathA(MSIHANDLE,LPCSTR,LPSTR,LPDWORD);\nUINT WINAPI MsiGetSourcePathW(MSIHANDLE,LPCWSTR,LPWSTR,LPDWORD);\n#define     MsiGetSourcePath WINELIB_NAME_AW(MsiGetSourcePath)\n\nMSIHANDLE WINAPI MsiGetActiveDatabase(MSIHANDLE);\n\nUINT WINAPI MsiViewGetColumnInfo(MSIHANDLE, MSICOLINFO, MSIHANDLE*);\nINT WINAPI MsiProcessMessage(MSIHANDLE, INSTALLMESSAGE, MSIHANDLE);\n\nUINT WINAPI MsiSetFeatureAttributesA(MSIHANDLE, LPCSTR, DWORD);\nUINT WINAPI MsiSetFeatureAttributesW(MSIHANDLE, LPCWSTR, DWORD);\n#define     MsiSetFeatureAttributes WINELIB_NAME_AW(MsiSetFeatureAttributes)\n\nUINT WINAPI MsiSetFeatureStateA(MSIHANDLE, LPCSTR, INSTALLSTATE);\nUINT WINAPI MsiSetFeatureStateW(MSIHANDLE, LPCWSTR, INSTALLSTATE);\n#define     MsiSetFeatureState WINELIB_NAME_AW(MsiSetFeatureState)\n\nUINT WINAPI MsiPreviewDialogA(MSIHANDLE, LPCSTR);\nUINT WINAPI MsiPreviewDialogW(MSIHANDLE, LPCWSTR);\n#define     MsiPreviewDialog WINELIB_NAME_AW(MsiPreviewDialog)\n\nUINT WINAPI MsiPreviewBillboardA(MSIHANDLE, LPCSTR, LPCSTR);\nUINT WINAPI MsiPreviewBillboardW(MSIHANDLE, LPCWSTR, LPCWSTR);\n#define     MsiPreviewBillboard WINELIB_NAME_AW(MsiPreviewBillboard)\n\nUINT WINAPI MsiCreateTransformSummaryInfoA(MSIHANDLE, MSIHANDLE, LPCSTR, int, int);\nUINT WINAPI MsiCreateTransformSummaryInfoW(MSIHANDLE, MSIHANDLE, LPCWSTR, int, int);\n#define     MsiCreateTransformSummaryInfo WINELIB_NAME_AW(MsiCreateTransformSummaryInfo)\n\nUINT WINAPI MsiGetSummaryInformationA(MSIHANDLE, LPCSTR, UINT, MSIHANDLE *);\nUINT WINAPI MsiGetSummaryInformationW(MSIHANDLE, LPCWSTR, UINT, MSIHANDLE *);\n#define     MsiGetSummaryInformation WINELIB_NAME_AW(MsiGetSummaryInformation)\n\nUINT WINAPI MsiSummaryInfoGetPropertyA(MSIHANDLE,UINT,PUINT,LPINT,FILETIME*,LPSTR,LPDWORD);\nUINT WINAPI MsiSummaryInfoGetPropertyW(MSIHANDLE,UINT,PUINT,LPINT,FILETIME*,LPWSTR,LPDWORD);\n#define     MsiSummaryInfoGetProperty WINELIB_NAME_AW(MsiSummaryInfoGetProperty)\n\nUINT WINAPI MsiSummaryInfoSetPropertyA(MSIHANDLE, UINT, UINT, INT, FILETIME*, LPCSTR);\nUINT WINAPI MsiSummaryInfoSetPropertyW(MSIHANDLE, UINT, UINT, INT, FILETIME*, LPCWSTR);\n#define     MsiSummaryInfoSetProperty WINELIB_NAME_AW(MsiSummaryInfoSetProperty)\n\nUINT WINAPI MsiDatabaseExportA(MSIHANDLE, LPCSTR, LPCSTR, LPCSTR);\nUINT WINAPI MsiDatabaseExportW(MSIHANDLE, LPCWSTR, LPCWSTR, LPCWSTR);\n#define     MsiDatabaseExport WINELIB_NAME_AW(MsiDatabaseExport)\n\nUINT WINAPI MsiDatabaseImportA(MSIHANDLE, LPCSTR, LPCSTR);\nUINT WINAPI MsiDatabaseImportW(MSIHANDLE, LPCWSTR, LPCWSTR);\n#define     MsiDatabaseImport WINELIB_NAME_AW(MsiDatabaseImport)\n\nUINT WINAPI MsiOpenDatabaseW(LPCWSTR, LPCWSTR, MSIHANDLE*);\nUINT WINAPI MsiOpenDatabaseA(LPCSTR, LPCSTR, MSIHANDLE*);\n#define     MsiOpenDatabase WINELIB_NAME_AW(MsiOpenDatabase)\n\nMSICONDITION WINAPI MsiDatabaseIsTablePersistentA(MSIHANDLE, LPCSTR);\nMSICONDITION WINAPI MsiDatabaseIsTablePersistentW(MSIHANDLE, LPCWSTR);\n#define     MsiDatabaseIsTablePersistent WINELIB_NAME_AW(MsiDatabaseIsTablePersistent)\n\nUINT WINAPI MsiSequenceA(MSIHANDLE, LPCSTR, INT);\nUINT WINAPI MsiSequenceW(MSIHANDLE, LPCWSTR, INT);\n#define     MsiSequence WINELIB_NAME_AW(MsiSequence)\n\nUINT WINAPI MsiSummaryInfoPersist(MSIHANDLE);\nUINT WINAPI MsiSummaryInfoGetPropertyCount(MSIHANDLE,PUINT);\n\nUINT WINAPI MsiEnableUIPreview(MSIHANDLE, MSIHANDLE*);\nBOOL WINAPI MsiGetMode(MSIHANDLE, MSIRUNMODE);\nUINT WINAPI MsiSetMode(MSIHANDLE, MSIRUNMODE, BOOL);\n\nUINT WINAPI MsiViewModify(MSIHANDLE, MSIMODIFY, MSIHANDLE);\n\nUINT WINAPI MsiGetFeatureCostA(MSIHANDLE, LPCSTR, MSICOSTTREE, INSTALLSTATE, LPINT);\nUINT WINAPI MsiGetFeatureCostW(MSIHANDLE, LPCWSTR, MSICOSTTREE, INSTALLSTATE, LPINT);\n#define     MsiGetFeatureCost WINELIB_NAME_AW(MsiGetFeatureCost)\n\nLANGID WINAPI MsiGetLanguage(MSIHANDLE);\n\nUINT WINAPI MsiSetInstallLevel(MSIHANDLE, int);\n\nMSIHANDLE WINAPI MsiGetLastErrorRecord(void);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_MSIQUERY_H */\n"
  },
  {
    "path": "wine/windows/msopc.idl",
    "content": "/*\n * Copyright 2018 Nikolay Sivov for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\nimport \"ocidl.idl\";\n\n#include \"opcbase.idl\"\n#include \"opcobjectmodel.idl\"\n#include \"opcparturi.idl\"\n\n#ifndef __WIDL__\n#define threading(model)\n#endif\n\ninterface IOpcUri;\ninterface IOpcPartUri;\ninterface IOpcPackage;\ninterface IOpcDigitalSignatureManager;\n\n[\n    object,\n    uuid(6d0b4446-cd73-4ab3-94f4-8ccdf6116154),\n    pointer_default(ref)\n]\ninterface IOpcFactory : IUnknown\n{\n    HRESULT CreatePackageRootUri(\n        [out, retval] IOpcUri **uri\n    );\n\n    HRESULT CreatePartUri(\n        [in, string] LPCWSTR uri,\n        [out, retval] IOpcPartUri **part_uri\n    );\n\n    [local]\n    HRESULT CreateStreamOnFile(\n        [in, string] LPCWSTR filename,\n        [in] OPC_STREAM_IO_MODE io_mode,\n        [in, unique] SECURITY_ATTRIBUTES *sa,\n        [in] DWORD flags,\n        [out, retval] IStream **stream\n    );\n\n    HRESULT CreatePackage(\n        [out, retval] IOpcPackage **package\n    );\n\n    HRESULT ReadPackageFromStream(\n        [in] IStream *stream,\n        [in] OPC_READ_FLAGS flags,\n        [out, retval] IOpcPackage **package\n    );\n\n    HRESULT WritePackageToStream(\n        [in] IOpcPackage *package,\n        [in] OPC_WRITE_FLAGS flags,\n        [in] IStream *stream\n    );\n\n    HRESULT CreateDigitalSignatureManager(\n        [in] IOpcPackage *package,\n        [out, retval] IOpcDigitalSignatureManager **signature_manager\n    );\n}\n\n[\n    threading(both),\n    uuid(6b2d6Ba0-9f3e-4f27-920b-313cc426a39e)\n]\ncoclass OpcFactory\n{\n    interface IOpcFactory;\n};\n"
  },
  {
    "path": "wine/windows/mssip.h",
    "content": "/*\n * Copyright (C) 2002 Patrik Stridvall\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_MSSIP_H\n#define __WINE_MSSIP_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n/**********************************************************************/\n\ntypedef CRYPT_HASH_BLOB CRYPT_DIGEST_DATA;\n\n/**********************************************************************/\n\n#define MSSIP_FLAGS_PROHIBIT_RESIZE_ON_CREATE 0x00010000\n#define MSSIP_FLAGS_USE_CATALOG               0x00020000\n\n#define SPC_INC_PE_RESOURCES_FLAG         0x80\n#define SPC_INC_PE_DEBUG_INFO_FLAG        0x40\n#define SPC_INC_PE_IMPORT_ADDR_TABLE_FLAG 0x20\n\n#define MSSIP_ADDINFO_NONE      0\n#define MSSIP_ADDINFO_FLAT      1\n#define MSSIP_ADDINFO_CATMEMBER 2\n#define MSSIP_ADDINFO_BLOB      3\n#define MSSIP_ADDINFO_NONMSSIP  500\n\n#define SIP_MAX_MAGIC_NUMBER 4\n\n/**********************************************************************/\n\n#include <pshpack8.h>\ntypedef struct SIP_SUBJECTINFO_ {\n    DWORD cbSize;\n    GUID *pgSubjectType;\n    HANDLE hFile;\n    LPCWSTR pwsFileName;\n    LPCWSTR pwsDisplayName;\n\n    DWORD dwReserved1;\n    DWORD dwIntVersion;\n\n    HCRYPTPROV hProv;\n    CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm;\n    DWORD dwFlags;\n    DWORD dwEncodingType;\n    DWORD dwReserved2;\n    DWORD fdwCAPISettings;\n    DWORD fdwSecuritySettings;\n    DWORD dwIndex;\n\n    DWORD dwUnionChoice;\n    union {\n      struct MS_ADDINFO_FLAT_          *psFlat;\n      struct MS_ADDINFO_CATALOGMEMBER_ *psCatMember;\n      struct MS_ADDINFO_BLOB_          *psBlob;\n    } DUMMYUNIONNAME;\n\n    LPVOID pClientData;\n} SIP_SUBJECTINFO, *LPSIP_SUBJECTINFO;\n#include <poppack.h>\n\n#include <pshpack8.h>\ntypedef struct MS_ADDINFO_FLAT_ {\n  DWORD cbStruct;\n\n  struct SIP_INDIRECT_DATA_ *pIndirectData;\n} MS_ADDINFO_FLAT, *PMS_ADDINFO_FLAT;\n#include <poppack.h>\n\n#include <pshpack8.h>\ntypedef struct MS_ADDINFO_CATALOGMEMBER_ {\n  DWORD cbStruct;\n\n  struct CRYPTCATSTORE_  *pStore;\n  struct CRYPTCATMEMBER_ *pMember;\n} MS_ADDINFO_CATALOGMEMBER, *PMS_ADDINFO_CATALOGMEMBER;\n#include <poppack.h>\n\n#include <pshpack8.h>\ntypedef struct MS_ADDINFO_BLOB_ {\n  DWORD cbStruct;\n\n  DWORD cbMemObject;\n  BYTE *pbMemObject;\n\n  DWORD cbMemSignedMsg;\n  BYTE *pbMemSignedMsg;\n} MS_ADDINFO_BLOB, *PMS_ADDINFO_BLOB;\n#include <poppack.h>\n\n#include <pshpack8.h>\ntypedef struct SIP_INDIRECT_DATA_ {\n  CRYPT_ATTRIBUTE_TYPE_VALUE Data;\n  CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm;\n  CRYPT_HASH_BLOB            Digest;\n} SIP_INDIRECT_DATA, *PSIP_INDIRECT_DATA;\n#include <poppack.h>\n\ntypedef BOOL (WINAPI * pCryptSIPGetSignedDataMsg)(SIP_SUBJECTINFO *,DWORD *,DWORD,DWORD *,BYTE *);\ntypedef BOOL (WINAPI * pCryptSIPPutSignedDataMsg)(SIP_SUBJECTINFO *,DWORD,DWORD *,DWORD,BYTE *);\ntypedef BOOL (WINAPI * pCryptSIPCreateIndirectData)(SIP_SUBJECTINFO *,DWORD *,SIP_INDIRECT_DATA *);\ntypedef BOOL (WINAPI * pCryptSIPVerifyIndirectData)(SIP_SUBJECTINFO *,SIP_INDIRECT_DATA *);\ntypedef BOOL (WINAPI * pCryptSIPRemoveSignedDataMsg)(SIP_SUBJECTINFO *,DWORD);\n\n#include <pshpack8.h>\ntypedef struct SIP_DISPATCH_INFO_ {\n  DWORD cbSize;\n\n  HANDLE hSIP;\n\n  pCryptSIPGetSignedDataMsg    pfGet;\n  pCryptSIPPutSignedDataMsg    pfPut;\n  pCryptSIPCreateIndirectData  pfCreate;\n  pCryptSIPVerifyIndirectData  pfVerify;\n  pCryptSIPRemoveSignedDataMsg pfRemove;\n} SIP_DISPATCH_INFO, *LPSIP_DISPATCH_INFO;\n#include <poppack.h>\n\ntypedef BOOL (WINAPI *pfnIsFileSupported)(HANDLE,GUID *);\ntypedef BOOL (WINAPI *pfnIsFileSupportedName)(WCHAR *,GUID *);\n\n#include <pshpack8.h>\ntypedef struct SIP_ADD_NEWPROVIDER_\n{\n  DWORD cbStruct;\n\n  GUID  *pgSubject;\n\n  WCHAR *pwszDLLFileName;\n  WCHAR *pwszMagicNumber;\n\n  WCHAR *pwszIsFunctionName;\n\n  WCHAR *pwszGetFuncName;\n  WCHAR *pwszPutFuncName;\n  WCHAR *pwszCreateFuncName;\n  WCHAR *pwszVerifyFuncName;\n  WCHAR *pwszRemoveFuncName;\n\n  WCHAR *pwszIsFunctionNameFmt2;\n\n  /* NTDDI_VERSION >= NTDDI_WIN8 */\n  WCHAR *pwszGetCapFuncName;\n} SIP_ADD_NEWPROVIDER, *PSIP_ADD_NEWPROVIDER;\n#include <poppack.h>\n\n/**********************************************************************/\n\nBOOL WINAPI CryptSIPGetSignedDataMsg(SIP_SUBJECTINFO *,DWORD *,DWORD,DWORD *,BYTE *);\nBOOL WINAPI CryptSIPPutSignedDataMsg(SIP_SUBJECTINFO *,DWORD,DWORD *,DWORD,BYTE *);\nBOOL WINAPI CryptSIPCreateIndirectData(SIP_SUBJECTINFO *,DWORD *,SIP_INDIRECT_DATA *);\nBOOL WINAPI CryptSIPVerifyIndirectData(SIP_SUBJECTINFO *,SIP_INDIRECT_DATA *);\nBOOL WINAPI CryptSIPRemoveSignedDataMsg(SIP_SUBJECTINFO *,DWORD);\n\nBOOL WINAPI CryptSIPLoad(const GUID *,DWORD,SIP_DISPATCH_INFO *);\nBOOL WINAPI CryptSIPRetrieveSubjectGuid(LPCWSTR,HANDLE,GUID *);\nBOOL WINAPI CryptSIPRetrieveSubjectGuidForCatalogFile(LPCWSTR,HANDLE,GUID *);\nBOOL WINAPI CryptSIPAddProvider(SIP_ADD_NEWPROVIDER *);\nBOOL WINAPI CryptSIPRemoveProvider(GUID *);\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif  /* __WINE_MSSIP_H */\n"
  },
  {
    "path": "wine/windows/msstkppg.h",
    "content": "/*\n * Copyright (C) 2017 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _MS_STOCK_PROP_PAGES_H_\n#define _MS_STOCK_PROP_PAGES_H_\n\nDEFINE_GUID(CLSID_StockColorPage,   0x7ebdaae1, 0x8120, 0x11cf, 0x89, 0x9f, 0x0, 0xaa, 0x0, 0x68, 0x8b, 0x10);\nDEFINE_GUID(CLSID_StockFontPage,    0x7ebdaae0, 0x8120, 0x11cf, 0x89, 0x9f, 0x0, 0xaa, 0x0, 0x68, 0x8b, 0x10);\nDEFINE_GUID(CLSID_StockPicturePage, 0x7ebdaae2, 0x8120, 0x11cf, 0x89, 0x9f, 0x0, 0xaa, 0x0, 0x68, 0x8b, 0x10);\n\n#endif\n"
  },
  {
    "path": "wine/windows/mstask.idl",
    "content": "/*\n * Task Scheduler Service interface\n *\n * Copyright (C) 2008 Google (Roy Shea)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n */\n\nimport \"oaidl.idl\";\nimport \"oleidl.idl\";\n\n#ifndef __WIDL__\n#define threading(model)\n#define progid(str)\n#define vi_progid(str)\n#endif\n\ncpp_quote(\"#define TASK_SUNDAY 0x1\")\ncpp_quote(\"#define TASK_MONDAY 0x2\")\ncpp_quote(\"#define TASK_TUESDAY 0x4\")\ncpp_quote(\"#define TASK_WEDNESDAY 0x8\")\ncpp_quote(\"#define TASK_THURSDAY 0x10\")\ncpp_quote(\"#define TASK_FRIDAY 0x20\")\ncpp_quote(\"#define TASK_SATURDAY 0x40\")\n\ncpp_quote(\"#define TASK_FIRST_WEEK 1\")\ncpp_quote(\"#define TASK_SECOND_WEEK 2\")\ncpp_quote(\"#define TASK_THIRD_WEEK 3\")\ncpp_quote(\"#define TASK_FOURTH_WEEK 4\")\ncpp_quote(\"#define TASK_LAST_WEEK 5\")\n\ncpp_quote(\"#define TASK_JANUARY 0x1\")\ncpp_quote(\"#define TASK_FEBRUARY 0x2\")\ncpp_quote(\"#define TASK_MARCH 0x4\")\ncpp_quote(\"#define TASK_APRIL 0x8\")\ncpp_quote(\"#define TASK_MAY 0x10\")\ncpp_quote(\"#define TASK_JUNE 0x20\")\ncpp_quote(\"#define TASK_JULY 0x40\")\ncpp_quote(\"#define TASK_AUGUST 0x80\")\ncpp_quote(\"#define TASK_SEPTEMBER 0x100\")\ncpp_quote(\"#define TASK_OCTOBER 0x200\")\ncpp_quote(\"#define TASK_NOVEMBER 0x400\")\ncpp_quote(\"#define TASK_DECEMBER 0x800\")\n\ncpp_quote(\"#define TASK_FLAG_INTERACTIVE 0x0001\")\ncpp_quote(\"#define TASK_FLAG_DELETE_WHEN_DONE 0x0002\")\ncpp_quote(\"#define TASK_FLAG_DISABLED 0x0004\")\ncpp_quote(\"#define TASK_FLAG_START_ONLY_IF_IDLE 0x0010\")\ncpp_quote(\"#define TASK_FLAG_KILL_ON_IDLE_END 0x0020\")\ncpp_quote(\"#define TASK_FLAG_DONT_START_IF_ON_BATTERIES 0x0040\")\ncpp_quote(\"#define TASK_FLAG_KILL_IF_GOING_ON_BATTERIES 0x0080\")\ncpp_quote(\"#define TASK_FLAG_RUN_ONLY_IF_DOCKED 0x0100\")\ncpp_quote(\"#define TASK_FLAG_HIDDEN 0x0200\")\ncpp_quote(\"#define TASK_FLAG_RUN_IF_CONNECTED_TO_INTERNET 0x0400\")\ncpp_quote(\"#define TASK_FLAG_RESTART_ON_IDLE_RESUME 0x0800\")\ncpp_quote(\"#define TASK_FLAG_SYSTEM_REQUIRED 0x1000\")\ncpp_quote(\"#define TASK_FLAG_RUN_ONLY_IF_LOGGED_ON 0x2000\")\n\ncpp_quote(\"#define TASK_TRIGGER_FLAG_HAS_END_DATE 0x1\")\ncpp_quote(\"#define TASK_TRIGGER_FLAG_KILL_AT_DURATION_END 0x2\")\ncpp_quote(\"#define TASK_TRIGGER_FLAG_DISABLED 0x4\")\n\n[\n    local,\n    object,\n    uuid(148BD528-A2AB-11CE-B11F-00AA00530503),\n    pointer_default(unique)\n]\ninterface IEnumWorkItems : IUnknown\n{\n    HRESULT Next(\n            [in]   ULONG celt,\n            [out]  LPWSTR **rgpwszNames,\n            [out]  ULONG *pceltFetched);\n\n    HRESULT Skip(\n            [in]  ULONG celt);\n\n    HRESULT Reset();\n\n    HRESULT Clone(\n            [out]  IEnumWorkItems **ppEnumWorkItems);\n}\n\ncpp_quote(\"#ifndef _HPROPSHEETPAGE_DEFINED\")\ntypedef struct _PSP *HPROPSHEETPAGE;\ncpp_quote(\"#define _HPROPSHEETPAGE_DEFINED\")\ncpp_quote(\"#endif\")\n\n[\n    local,\n    object,\n    uuid(4086658a-cbbb-11cf-b604-00c04fd8d565),\n    pointer_default(unique)\n]\ninterface IProvideTaskPage : IUnknown\n{\n    typedef enum _TASKPAGE {\n        TASKPAGE_TASK       = 0,\n        TASKPAGE_SCHEDULE   = 1,\n        TASKPAGE_SETTINGS   = 2\n    } TASKPAGE;\n\n    HRESULT GetPage(\n            [in]   TASKPAGE tpType,\n            [in]   BOOL fPersistChanges,\n            [out]  HPROPSHEETPAGE *phPage);\n}\n\n[\n    local,\n    object,\n    uuid(148BD52B-A2AB-11CE-B11F-00AA00530503),\n    pointer_default(unique)\n]\ninterface ITaskTrigger : IUnknown\n{\n    typedef enum _TASK_TRIGGER_TYPE {\n        TASK_TIME_TRIGGER_ONCE              = 0,\n        TASK_TIME_TRIGGER_DAILY             = 1,\n        TASK_TIME_TRIGGER_WEEKLY            = 2,\n        TASK_TIME_TRIGGER_MONTHLYDATE       = 3,\n        TASK_TIME_TRIGGER_MONTHLYDOW        = 4,\n        TASK_EVENT_TRIGGER_ON_IDLE          = 5,\n        TASK_EVENT_TRIGGER_AT_SYSTEMSTART   = 6,\n        TASK_EVENT_TRIGGER_AT_LOGON         = 7\n    } TASK_TRIGGER_TYPE, *PTASK_TRIGGER_TYPE;\n\n    typedef struct _DAILY {\n        WORD DaysInterval;\n    } DAILY;\n\n    typedef struct _WEEKLY {\n        WORD WeeksInterval;\n        WORD rgfDaysOfTheWeek;\n    } WEEKLY;\n\n    typedef struct _MONTHLYDATE {\n        DWORD rgfDays;\n        WORD rgfMonths;\n    } MONTHLYDATE;\n\n    typedef struct _MONTHLYDOW {\n        WORD wWhichWeek;\n        WORD rgfDaysOfTheWeek;\n        WORD rgfMonths;\n    } MONTHLYDOW;\n\n    typedef union _TRIGGER_TYPE_UNION {\n        DAILY Daily;\n        WEEKLY Weekly;\n        MONTHLYDATE MonthlyDate;\n        MONTHLYDOW MonthlyDOW;\n    } TRIGGER_TYPE_UNION;\n\n    typedef struct _TASK_TRIGGER {\n        WORD cbTriggerSize;\n        WORD Reserved1;\n        WORD wBeginYear;\n        WORD wBeginMonth;\n        WORD wBeginDay;\n        WORD wEndYear;\n        WORD wEndMonth;\n        WORD wEndDay;\n        WORD wStartHour;\n        WORD wStartMinute;\n        DWORD MinutesDuration;\n        DWORD MinutesInterval;\n        DWORD rgFlags;\n        TASK_TRIGGER_TYPE TriggerType;\n        TRIGGER_TYPE_UNION Type;\n        WORD Reserved2;\n        WORD wRandomMinutesInterval;\n    } TASK_TRIGGER, *PTASK_TRIGGER;\n\n    HRESULT SetTrigger(\n            [in]  const PTASK_TRIGGER pTrigger);\n\n    HRESULT GetTrigger(\n            [out]  PTASK_TRIGGER pTrigger);\n\n    HRESULT GetTriggerString(\n            [out]  LPWSTR *ppwszTrigger);\n}\n\n[\n    local,\n    object,\n    uuid(a6b952f0-a4b1-11d0-997d-00aa006887ec),\n    pointer_default(unique)\n]\ninterface IScheduledWorkItem : IUnknown\n{\n    HRESULT CreateTrigger(\n            [out]  WORD *piNewTrigger,\n            [out]  ITaskTrigger **ppTrigger);\n\n    HRESULT DeleteTrigger(\n            [in]  WORD iTrigger);\n\n    HRESULT GetTriggerCount(\n            [out]  WORD *plCount);\n\n    HRESULT GetTrigger(\n            [in]   WORD iTrigger,\n            [out]  ITaskTrigger **ppTrigger);\n\n    HRESULT GetTriggerString(\n            [in]   WORD iTrigger,\n            [out]  LPWSTR *ppwszTrigger);\n\n    HRESULT GetRunTimes(\n            [in]       const LPSYSTEMTIME pstBegin,\n            [in]       const LPSYSTEMTIME pstEnd,\n            [in, out]  WORD *pCount,\n            [out]      LPSYSTEMTIME *rgstTaskTimes);\n\n    HRESULT GetNextRunTime(\n            [out]  SYSTEMTIME *pstNextRun);\n\n    HRESULT SetIdleWait(\n            [in]  WORD wIdleMinutes,\n            [in]  WORD wDeadlineMinutes);\n\n    HRESULT GetIdleWait(\n            [out]  WORD *pwIdleMinutes,\n            [out]  WORD *pwDeadlineMinutes);\n\n    HRESULT Run();\n\n    HRESULT Terminate();\n\n    HRESULT EditWorkItem(\n            [in]  HWND hParent,\n            [in]  DWORD dwReserved);\n\n    HRESULT GetMostRecentRunTime(\n            [out]  SYSTEMTIME *pstLastRun);\n\n    HRESULT GetStatus(\n            [out]  HRESULT *phrStatus);\n\n    HRESULT GetExitCode(\n            [out]  DWORD *pdwExitCode);\n\n    HRESULT SetComment(\n            [in]  LPCWSTR pwszComment);\n\n    HRESULT GetComment(\n            [out]  LPWSTR *ppwszComment);\n\n    HRESULT SetCreator(\n            LPCWSTR pwszCreator);\n\n    HRESULT GetCreator(\n            [out]  LPWSTR *ppwszCreator);\n\n    HRESULT SetWorkItemData(\n            [in]  WORD cBytes,\n            [in]  BYTE rgbData[]);\n\n    HRESULT GetWorkItemData(\n            [out]  WORD *pcBytes,\n            [out]  BYTE **ppBytes);\n\n    HRESULT SetErrorRetryCount(\n            WORD wRetryCount);\n\n    HRESULT GetErrorRetryCount(\n            [out]  WORD *pwRetryCount);\n\n    HRESULT SetErrorRetryInterval(\n            WORD wRetryInterval);\n\n    HRESULT GetErrorRetryInterval(\n            [out]  WORD *pwRetryInterval);\n\n    HRESULT SetFlags(\n            DWORD dwFlags);\n\n    HRESULT GetFlags(\n            [out]  DWORD *pdwFlags);\n\n    HRESULT SetAccountInformation(\n            [in]  LPCWSTR pwszAccountName,\n            [in]  LPCWSTR pwszPassword);\n\n    HRESULT GetAccountInformation(\n            [out]  LPWSTR *ppwszAccountName);\n}\n\n[\n    local,\n    object,\n    uuid(148BD524-A2AB-11CE-B11F-00AA00530503),\n    pointer_default(unique)\n]\ninterface ITask : IScheduledWorkItem\n{\n    HRESULT SetApplicationName(\n            [in]  LPCWSTR pwszApplicationName);\n\n    HRESULT GetApplicationName(\n            [out]  LPWSTR *ppwszApplicationName);\n\n    HRESULT SetParameters(\n            [in]  LPCWSTR pwszParameters);\n\n    HRESULT GetParameters(\n            [out]  LPWSTR *ppwszParameters);\n\n    HRESULT SetWorkingDirectory(\n            [in]  LPCWSTR pwszWorkingDirectory);\n\n    HRESULT GetWorkingDirectory(\n            [in]  LPWSTR *ppwszWorkingDirectory);\n\n    HRESULT SetPriority(\n            [in]  DWORD dwPriority);\n\n    HRESULT GetPriority(\n            [out]  DWORD *pdwPriority);\n\n    HRESULT SetTaskFlags(\n            [in]  DWORD dwFlags);\n\n    HRESULT GetTaskFlags(\n            [out]  DWORD *pdwFlags);\n\n    HRESULT SetMaxRunTime(\n            [in]  DWORD dwMaxRunTime);\n\n    HRESULT GetMaxRunTime(\n            [out]  DWORD *pdwMaxRunTime);\n}\n\n[\n    local,\n    object,\n    uuid(148BD527-A2AB-11CE-B11F-00AA00530503),\n    pointer_default(unique)\n]\ninterface ITaskScheduler : IUnknown\n{\n    HRESULT SetTargetComputer(\n            [in]  LPCWSTR pwszComputer);\n\n    HRESULT GetTargetComputer(\n            [out]  LPWSTR *ppwszComputer);\n\n    HRESULT Enum(\n            [out]  IEnumWorkItems **ppEnumTasks);\n\n    HRESULT Activate(\n            [in]   LPCWSTR pwszName,\n            [in]   REFIID riid,\n            [out]  IUnknown **ppunk);\n\n    HRESULT Delete(\n            [in]  LPCWSTR pwszName);\n\n    HRESULT NewWorkItem(\n            [in]   LPCWSTR pwszTaskName,\n            [in]   REFCLSID rclsid,\n            [in]   REFIID riid,\n            [out]  IUnknown **ppunk);\n\n    HRESULT AddWorkItem(\n            [in]  LPCWSTR pwszTaskName,\n            [in]  IScheduledWorkItem *pWorkItem);\n\n    HRESULT IsOfType(\n            [in]  LPCWSTR pwszName,\n            [in]  REFIID riid);\n}\n\n[\n    threading(both),\n    uuid(148BD52A-A2AB-11CE-B11F-00AA00530503)\n]\ncoclass CTaskScheduler\n{\n    [default] interface ITaskScheduler;\n}\n\n\n[\n    threading(both),\n    uuid(148BD520-A2AB-11CE-B11F-00AA00530503)\n]\ncoclass CTask\n{\n    [default] interface ITask;\n}\n"
  },
  {
    "path": "wine/windows/mstcpip.h",
    "content": "/*\n * Copyright 2008 Hans Leidekker for CodeWeavers.\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __WINE_MSTCPIP_H\n#define __WINE_MSTCPIP_H\n\n#include <nldef.h>\n\nstruct tcp_keepalive\n{\n    ULONG onoff;\n    ULONG keepalivetime;\n    ULONG keepaliveinterval;\n};\n\n#ifndef USE_WS_PREFIX\n\n#define SIO_RCVALL            _WSAIOW(IOC_VENDOR, 1)\n#define SIO_RCVALL_MCAST      _WSAIOW(IOC_VENDOR, 2)\n#define SIO_RCVALL_IGMPMCAST  _WSAIOW(IOC_VENDOR, 3)\n#define SIO_KEEPALIVE_VALS    _WSAIOW(IOC_VENDOR, 4)\n#define SIO_ABSORB_RTRALERT   _WSAIOW(IOC_VENDOR, 5)\n#define SIO_UCAST_IF          _WSAIOW(IOC_VENDOR, 6)\n#define SIO_LIMIT_BROADCASTS  _WSAIOW(IOC_VENDOR, 7)\n#define SIO_INDEX_BIND        _WSAIOW(IOC_VENDOR, 8)\n#define SIO_INDEX_MCASTIF     _WSAIOW(IOC_VENDOR, 9)\n#define SIO_INDEX_ADD_MCAST   _WSAIOW(IOC_VENDOR, 10)\n#define SIO_INDEX_DEL_MCAST   _WSAIOW(IOC_VENDOR, 11)\n\n#define RCVALL_OFF             0\n#define RCVALL_ON              1\n#define RCVALL_SOCKETLEVELONLY 2\n\n#else\n\n#define WS_SIO_RCVALL            _WSAIOW(WS_IOC_VENDOR, 1)\n#define WS_SIO_RCVALL_MCAST      _WSAIOW(WS_IOC_VENDOR, 2)\n#define WS_SIO_RCVALL_IGMPMCAST  _WSAIOW(WS_IOC_VENDOR, 3)\n#define WS_SIO_KEEPALIVE_VALS    _WSAIOW(WS_IOC_VENDOR, 4)\n#define WS_SIO_ABSORB_RTRALERT   _WSAIOW(WS_IOC_VENDOR, 5)\n#define WS_SIO_UCAST_IF          _WSAIOW(WS_IOC_VENDOR, 6)\n#define WS_SIO_LIMIT_BROADCASTS  _WSAIOW(WS_IOC_VENDOR, 7)\n#define WS_SIO_INDEX_BIND        _WSAIOW(WS_IOC_VENDOR, 8)\n#define WS_SIO_INDEX_MCASTIF     _WSAIOW(WS_IOC_VENDOR, 9)\n#define WS_SIO_INDEX_ADD_MCAST   _WSAIOW(WS_IOC_VENDOR, 10)\n#define WS_SIO_INDEX_DEL_MCAST   _WSAIOW(WS_IOC_VENDOR, 11)\n\n#define WS_RCVALL_OFF             0\n#define WS_RCVALL_ON              1\n#define WS_RCVALL_SOCKETLEVELONLY 2\n\n#endif /* USE_WS_PREFIX */\n\n#endif /* __WINE_MSTCPIP_H */\n"
  },
  {
    "path": "wine/windows/mswsock.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef _MSWSOCK_\n#define _MSWSOCK_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n#ifdef USE_WS_PREFIX\n#define WS(x)    WS_##x\n#else\n#define WS(x)    x\n#endif\n\n#ifndef USE_WS_PREFIX\n#define SO_CONNDATA        0x7000\n#define SO_CONNOPT         0x7001\n#define SO_DISCDATA        0x7002\n#define SO_DISCOPT         0x7003\n#define SO_CONNDATALEN     0x7004\n#define SO_CONNOPTLEN      0x7005\n#define SO_DISCDATALEN     0x7006\n#define SO_DISCOPTLEN      0x7007\n#else\n#define WS_SO_CONNDATA     0x7000\n#define WS_SO_CONNOPT      0x7001\n#define WS_SO_DISCDATA     0x7002\n#define WS_SO_DISCOPT      0x7003\n#define WS_SO_CONNDATALEN  0x7004\n#define WS_SO_CONNOPTLEN   0x7005\n#define WS_SO_DISCDATALEN  0x7006\n#define WS_SO_DISCOPTLEN   0x7007\n#endif\n\n#ifndef USE_WS_PREFIX\n#define SO_OPENTYPE     0x7008\n#else\n#define WS_SO_OPENTYPE  0x7008\n#endif\n\n#ifndef USE_WS_PREFIX\n#define SO_SYNCHRONOUS_ALERT       0x10\n#define SO_SYNCHRONOUS_NONALERT    0x20\n#else\n#define WS_SO_SYNCHRONOUS_ALERT    0x10\n#define WS_SO_SYNCHRONOUS_NONALERT 0x20\n#endif\n\n#ifndef USE_WS_PREFIX\n#define SO_MAXDG                      0x7009\n#define SO_MAXPATHDG                  0x700A\n#define SO_UPDATE_ACCEPT_CONTEXT      0x700B\n#define SO_CONNECT_TIME               0x700C\n#define SO_UPDATE_CONNECT_CONTEXT     0x7010\n#else\n#define WS_SO_MAXDG                   0x7009\n#define WS_SO_MAXPATHDG               0x700A\n#define WS_SO_UPDATE_ACCEPT_CONTEXT   0x700B\n#define WS_SO_CONNECT_TIME            0x700C\n#define WS_SO_UPDATE_CONNECT_CONTEXT  0x7010\n#endif\n\n#ifndef USE_WS_PREFIX\n#define TCP_BSDURGENT              0x7000\n#else\n#define WS_TCP_BSDURGENT              0x7000\n#endif\n\n#ifndef USE_WS_PREFIX\n#define SIO_UDP_CONNRESET _WSAIOW(IOC_VENDOR,12)\n#define SIO_SET_COMPATIBILITY_MODE _WSAIOW(IOC_VENDOR,300)\n#else\n#define WS_SIO_UDP_CONNRESET _WSAIOW(WS_IOC_VENDOR,12)\n#define WS_SIO_SET_COMPATIBILITY_MODE _WSAIOW(WS_IOC_VENDOR,300)\n#endif\n\n#define DE_REUSE_SOCKET TF_REUSE_SOCKET\n\n#ifndef USE_WS_PREFIX\n#define MSG_TRUNC   0x0100\n#define MSG_CTRUNC  0x0200\n#define MSG_BCAST   0x0400\n#define MSG_MCAST   0x0800\n#else\n#define WS_MSG_TRUNC   0x0100\n#define WS_MSG_CTRUNC  0x0200\n#define WS_MSG_BCAST   0x0400\n#define WS_MSG_MCAST   0x0800\n#endif\n\n#define TF_DISCONNECT          0x01\n#define TF_REUSE_SOCKET        0x02\n#define TF_WRITE_BEHIND        0x04\n#define TF_USE_DEFAULT_WORKER  0x00\n#define TF_USE_SYSTEM_THREAD   0x10\n#define TF_USE_KERNEL_APC      0x20\n\n#define TP_DISCONNECT           TF_DISCONNECT\n#define TP_REUSE_SOCKET         TF_REUSE_SOCKET\n#define TP_USE_DEFAULT_WORKER   TF_USE_DEFAULT_WORKER\n#define TP_USE_SYSTEM_THREAD    TF_USE_SYSTEM_THREAD\n#define TP_USE_KERNEL_APC       TF_USE_KERNEL_APC\n\n#define TP_ELEMENT_MEMORY   1\n#define TP_ELEMENT_FILE     2\n#define TP_ELEMENT_EOP      4\n\n#define WSAID_ACCEPTEX \\\n\t{0xb5367df1,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}\n#define WSAID_CONNECTEX \\\n\t{0x25a207b9,0xddf3,0x4660,{0x8e,0xe9,0x76,0xe5,0x8c,0x74,0x06,0x3e}}\n#define WSAID_DISCONNECTEX \\\n\t{0x7fda2e11,0x8630,0x436f,{0xa0,0x31,0xf5,0x36,0xa6,0xee,0xc1,0x57}}\n#define WSAID_GETACCEPTEXSOCKADDRS \\\n\t{0xb5367df2,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}\n#define WSAID_TRANSMITFILE \\\n\t{0xb5367df0,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}\n#define WSAID_TRANSMITPACKETS \\\n\t{0xd9689da0,0x1f90,0x11d3,{0x99,0x71,0x00,0xc0,0x4f,0x68,0xc8,0x76}}\n#define WSAID_WSARECVMSG \\\n\t{0xf689d7c8,0x6f1f,0x436b,{0x8a,0x53,0xe5,0x4f,0xe3,0x51,0xc3,0x22}}\n#define WSAID_WSASENDMSG \\\n\t{0xa441e712,0x754f,0x43ca,{0x84,0xa7,0x0d,0xee,0x44,0xcf,0x60,0x6d}}\n\ntypedef struct _TRANSMIT_FILE_BUFFERS {\n    LPVOID  Head;\n    DWORD   HeadLength;\n    LPVOID  Tail;\n    DWORD   TailLength;\n} TRANSMIT_FILE_BUFFERS, *PTRANSMIT_FILE_BUFFERS, *LPTRANSMIT_FILE_BUFFERS;\n\ntypedef struct _TRANSMIT_PACKETS_ELEMENT {\n    ULONG  dwElFlags;\n    ULONG  cLength;\n    union {\n      struct {\n\tLARGE_INTEGER  nFileOffset;\n\tHANDLE         hFile;\n      } DUMMYSTRUCTNAME;\n      PVOID  pBuffer;\n    } DUMMYUNIONNAME;\n} TRANSMIT_PACKETS_ELEMENT, *PTRANSMIT_PACKETS_ELEMENT, *LPTRANSMIT_PACKETS_ELEMENT;\n\ntypedef struct _WSACMSGHDR {\n    SIZE_T      cmsg_len;\n    INT         cmsg_level;\n    INT         cmsg_type;\n    /* followed by UCHAR cmsg_data[] */\n} WSACMSGHDR, *PWSACMSGHDR, *LPWSACMSGHDR;\n\ntypedef enum _NLA_BLOB_DATA_TYPE {\n    NLA_RAW_DATA,\n    NLA_INTERFACE,       /* interface name, type and speed */\n    NLA_802_1X_LOCATION, /* wireless network info */\n    NLA_CONNECTIVITY,    /* status on network connectivity */\n    NLA_ICS              /* internet connection sharing */\n} NLA_BLOB_DATA_TYPE;\n\ntypedef enum _NLA_CONNECTIVITY_TYPE {\n    NLA_NETWORK_AD_HOC,  /* private network */\n    NLA_NETWORK_MANAGED, /* network managed by domain */\n    NLA_NETWORK_UNMANAGED,\n    NLA_NETWORK_UNKNOWN\n} NLA_CONNECTIVITY_TYPE;\n\ntypedef enum _NLA_INTERNET {\n    NLA_INTERNET_UNKNOWN, /* can't determine if connected or not */\n    NLA_INTERNET_NO,      /* not connected to internet */\n    NLA_INTERNET_YES      /* connected to internet */\n} NLA_INTERNET;\n\n/* this structure is returned in the lpBlob field during calls to WSALookupServiceNext */\ntypedef struct _NLA_BLOB {\n    /* the header defines the size of the current record and if there is a next record */\n    struct {\n        NLA_BLOB_DATA_TYPE type;\n        DWORD dwSize;\n        DWORD nextOffset; /* if it's zero there are no more blobs */\n    } header;\n\n    /* the following union interpretation depends on the header.type value\n     * from the struct above.\n     * the header.dwSize will be the size of all data, specially useful when\n     * the last struct field is size [1] */\n    union {\n        /* NLA_RAW_DATA */\n        CHAR rawData[1];\n\n        /* NLA_INTERFACE */\n        struct {\n            DWORD dwType;\n            DWORD dwSpeed;\n            CHAR adapterName[1];\n        } interfaceData;\n\n        /* NLA_802_1X_LOCATION */\n        struct {\n            CHAR information[1];\n        } locationData;\n\n        /* NLA_CONNECTIVITY */\n        struct {\n            NLA_CONNECTIVITY_TYPE type;\n            NLA_INTERNET internet;\n        } connectivity;\n\n        /* NLA_ICS */\n        struct {\n            struct {\n                DWORD speed;\n                DWORD type;\n                DWORD state;\n                WCHAR machineName[256];\n                WCHAR sharedAdapterName[256];\n            } remote;\n        } ICS;\n    } data;\n} NLA_BLOB, *PNLA_BLOB;\n\ntypedef BOOL (WINAPI * LPFN_ACCEPTEX)(SOCKET, SOCKET, PVOID, DWORD, DWORD, DWORD, LPDWORD, LPOVERLAPPED);\ntypedef BOOL (WINAPI * LPFN_CONNECTEX)(SOCKET, const struct WS(sockaddr) *, int, PVOID, DWORD, LPDWORD, LPOVERLAPPED);\ntypedef BOOL (WINAPI * LPFN_DISCONNECTEX)(SOCKET, LPOVERLAPPED, DWORD, DWORD);\ntypedef VOID (WINAPI * LPFN_GETACCEPTEXSOCKADDRS)(PVOID, DWORD, DWORD, DWORD, struct WS(sockaddr) **, LPINT, struct WS(sockaddr) **, LPINT);\ntypedef BOOL (WINAPI * LPFN_TRANSMITFILE)(SOCKET, HANDLE, DWORD, DWORD, LPOVERLAPPED, LPTRANSMIT_FILE_BUFFERS, DWORD);\ntypedef BOOL (WINAPI * LPFN_TRANSMITPACKETS)(SOCKET, LPTRANSMIT_PACKETS_ELEMENT, DWORD, DWORD, LPOVERLAPPED, DWORD);\ntypedef INT  (WINAPI * LPFN_WSARECVMSG)(SOCKET, LPWSAMSG, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);\ntypedef INT  (WINAPI * LPFN_WSASENDMSG)(SOCKET, LPWSAMSG, DWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);\n\nBOOL WINAPI AcceptEx(SOCKET, SOCKET, PVOID, DWORD, DWORD, DWORD, LPDWORD, LPOVERLAPPED);\nVOID WINAPI GetAcceptExSockaddrs(PVOID, DWORD, DWORD, DWORD, struct WS(sockaddr) **, LPINT, struct WS(sockaddr) **, LPINT);\nBOOL WINAPI TransmitFile(SOCKET, HANDLE, DWORD, DWORD, LPOVERLAPPED, LPTRANSMIT_FILE_BUFFERS, DWORD);\nINT  WINAPI WSARecvEx(SOCKET, char *, INT, INT *);\n\n#ifdef __cplusplus\n}\n#endif\n\n#undef WS\n\n#endif /* _MSWSOCK_ */\n"
  },
  {
    "path": "wine/windows/msxml.idl",
    "content": "/*\n * Copyright (C) 2005 Mike McCormack\n * Copyright (C) 2005 Vijay Kiran Kamuju\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <msxmldid.h>\n#include <msxml2did.h>\n#include <idispids.h>\n\n#ifndef DO_NO_IMPORTS\nimport \"unknwn.idl\";\nimport \"wtypes.idl\";\nimport \"objidl.idl\";\nimport \"oaidl.idl\";\n#endif\n\n[\n    uuid(d63e0ce2-a0a2-11d0-9c02-00c04fc99c8e),\n    version(2.0),\n    helpstring(\"Microsoft XML, v2.0\")\n]\nlibrary MSXML\n{\n\nimportlib(\"stdole2.tlb\");\n\n#include <xmldom.idl>\n#include <xmldso.idl>\n\n[\nlocal,\nobject,\nodl,\ndual,\noleautomation,\nuuid(65725580-9b5d-11d0-9bfe-00c04fc99c8e)\n]\ninterface IXMLElementCollection : IDispatch\n{\n    [propput, id(DISPID_XMLELEMENTCOLLECTION_LENGTH)]\n    HRESULT length( [in] LONG v );\n\n    [propget, id(DISPID_XMLELEMENTCOLLECTION_LENGTH)]\n    HRESULT length( [retval, out] LONG *p );\n\n    [propget, id(DISPID_XMLELEMENTCOLLECTION_NEWENUM)]\n    HRESULT _newEnum( [retval, out] IUnknown ** ppUnk );\n\n    [id(DISPID_XMLELEMENTCOLLECTION_ITEM)]\n    HRESULT item(\n            [optional, in] VARIANT var1,\n            [optional, in] VARIANT var2,\n            [retval, out] IDispatch ** ppDisp );\n}\n\n[\nlocal,\nobject,\nuuid(3f7f31ac-e15f-11d0-9c25-00c04fc99c8e)\n]\ninterface IXMLElement : IDispatch\n{\n    [propget, id(DISPID_XMLELEMENT_TAGNAME)]\n    HRESULT tagName( [retval, out] BSTR *p);\n\n    [propput, id(DISPID_XMLELEMENT_TAGNAME)]\n    HRESULT tagName( [in] BSTR p );\n\n    [propget, id(DISPID_XMLELEMENT_PARENT)]\n    HRESULT parent( [retval, out] IXMLElement **parent );\n\n    [id(DISPID_XMLELEMENT_SETATTRIBUTE)]\n    HRESULT setAttribute(\n            [in] BSTR strPropertyName,\n            [in] VARIANT PropertyValue );\n\n    [id(DISPID_XMLELEMENT_GETATTRIBUTE)]\n    HRESULT getAttribute(\n            [in] BSTR strPropertyName,\n            [retval, out] VARIANT *PropertyValue );\n\n    [id(DISPID_XMLELEMENT_REMOVEATTRIBUTE)]\n    HRESULT removeAttribute(\n            [in] BSTR strPropertyName );\n\n    [propget, id(DISPID_XMLELEMENT_CHILDREN)]\n    HRESULT children( [retval, out] IXMLElementCollection **p );\n\n    [propget, id(DISPID_XMLELEMENT_TYPE)]\n    HRESULT type( [retval, out] LONG *p );\n\n    [propget, id(DISPID_XMLELEMENT_TEXT)]\n    HRESULT text( [retval, out] BSTR *p );\n\n    [propput, id(DISPID_XMLELEMENT_TEXT)]\n    HRESULT text( [in] BSTR p );\n\n    [id(DISPID_XMLELEMENT_ADDCHILD)]\n    HRESULT addChild(\n            [in] IXMLElement *pChildElem,\n            [in] LONG lIndex,\n            [in] LONG lreserved );\n\n    [id(DISPID_XMLELEMENT_REMOVECHILD)]\n    HRESULT removeChild(\n            [in] IXMLElement *pChildElem );\n}\n\n[\nlocal,\nobject,\nuuid(f52e2b61-18a1-11d1-b105-00805f49916b)\n]\ninterface IXMLDocument : IDispatch\n{\n    [propget, id(DISPID_XMLDOCUMENT_ROOT)]\n    HRESULT root( [retval, out] IXMLElement **p );\n\n    [propget, id(DISPID_XMLDOCUMENT_FILESIZE)]\n    HRESULT fileSize( [retval, out] BSTR *p );\n\n    [propget, id(DISPID_XMLDOCUMENT_FILEMODIFIEDDATE)]\n    HRESULT fileModifiedDate( [retval, out] BSTR *p );\n\n    [propget, id(DISPID_XMLDOCUMENT_FILEUPDATEDDATE)]\n    HRESULT fileUpdatedDate( [retval, out] BSTR *p );\n\n    [propget, id(DISPID_XMLDOCUMENT_URL)]\n    HRESULT URL( [retval, out] BSTR *p );\n\n    [propput, id(DISPID_XMLDOCUMENT_URL)]\n    HRESULT URL( [in] BSTR p );\n\n    [propget, id(DISPID_XMLDOCUMENT_MIMETYPE)]\n    HRESULT mimeType( [retval, out] BSTR *p );\n\n    [propget, id(DISPID_XMLDOCUMENT_READYSTATE)]\n    HRESULT readyState( [retval, out] LONG *p );\n\n    [propget, id(DISPID_XMLDOCUMENT_CHARSET)]\n    HRESULT charset( [retval, out] BSTR *p );\n\n    [propput, id(DISPID_XMLDOCUMENT_CHARSET)]\n    HRESULT charset( [in] BSTR p );\n\n    [propget, id(DISPID_XMLDOCUMENT_VERSION)]\n    HRESULT version( [retval, out] BSTR *p );\n\n    [propget, id(DISPID_XMLDOCUMENT_DOCTYPE)]\n    HRESULT doctype( [retval, out] BSTR *p );\n\n    [propget, id(DISPID_XMLDOCUMENT_DTDURL)]\n    HRESULT dtdURl( [retval, out] BSTR *p );\n\n    [id(DISPID_XMLDOCUMENT_CREATEELEMENT)]\n    HRESULT createElement(\n            [in] VARIANT vType,\n            [optional, in] VARIANT var1,\n            [retval, out] IXMLElement **ppElem );\n}\n\n[\nlocal,\nobject,\nuuid(2B8DE2FF-8D2D-11d1-B2FC-00C04FD915A9)\n]\ninterface IXMLElement2 : IDispatch\n{\n    [propget, id(DISPID_XMLELEMENT_TAGNAME)]\n    HRESULT tagName([retval, out] BSTR *p);\n\n    [propput, id(DISPID_XMLELEMENT_TAGNAME)]\n    HRESULT tagName([in] BSTR p);\n\n    [propget, id(DISPID_XMLELEMENT_PARENT)]\n    HRESULT parent([retval, out]IXMLElement2 **ppParent);\n\n    [id(DISPID_XMLELEMENT_SETATTRIBUTE)]\n    HRESULT setAttribute(\n        [in] BSTR strPropertyName,\n        [in] VARIANT PropertyValue);\n\n    [id(DISPID_XMLELEMENT_GETATTRIBUTE)]\n    HRESULT getAttribute(\n        [in] BSTR strPropertyName,\n        [retval, out] VARIANT *PropertyValue);\n\n    [id(DISPID_XMLELEMENT_REMOVEATTRIBUTE)]\n    HRESULT removeAttribute([in] BSTR strPropertyName);\n\n    [propget, id(DISPID_XMLELEMENT_CHILDREN)]\n    HRESULT children([retval, out] IXMLElementCollection **pp);\n\n    [propget, id(DISPID_XMLELEMENT_TYPE)]\n    HRESULT type([retval, out] LONG *plType);\n\n    [propget, id(DISPID_XMLELEMENT_TEXT)]\n    HRESULT text([retval, out] BSTR *p);\n\n    [propput, id(DISPID_XMLELEMENT_TEXT)]\n    HRESULT text([in] BSTR p);\n\n    [id(DISPID_XMLELEMENT_ADDCHILD)]\n    HRESULT addChild(\n        [in] IXMLElement2 *pChildElem,\n        [in] LONG lIndex,\n        [in] LONG lReserved);\n\n    [id(DISPID_XMLELEMENT_REMOVECHILD)]\n    HRESULT removeChild([in]IXMLElement2 *pChildElem);\n\n    [propget, id(DISPID_XMLELEMENT_ATTRIBUTES)]\n    HRESULT attributes([retval, out] IXMLElementCollection **pp); \n}\n\n[\nlocal,\nobject,\nuuid(2B8DE2FE-8D2D-11d1-B2FC-00C04FD915A9)\n]\ninterface IXMLDocument2 : IDispatch\n{\n    [propget, id(DISPID_XMLDOCUMENT_ROOT)]\n    HRESULT root([retval, out] IXMLElement2 **p);\n\n    [propget, id(DISPID_XMLDOCUMENT_FILESIZE)]\n    HRESULT fileSize([retval, out] BSTR *p);\n\n    [propget, id(DISPID_XMLDOCUMENT_FILEMODIFIEDDATE)]\n    HRESULT fileModifiedDate([retval, out] BSTR *p);\n\n    [propget, id(DISPID_XMLDOCUMENT_FILEUPDATEDDATE)]\n    HRESULT fileUpdatedDate([retval, out] BSTR *p);\n\n    [propget, id(DISPID_XMLDOCUMENT_URL)]\n    HRESULT URL([retval, out] BSTR *p);\n\n    [propput, id(DISPID_XMLDOCUMENT_URL)]\n    HRESULT URL([in] BSTR p);\n\n    [propget, id(DISPID_XMLDOCUMENT_MIMETYPE)]\n    HRESULT mimeType([retval, out] BSTR *p);\n   \n    [propget, id(DISPID_XMLDOCUMENT_READYSTATE)]\n    HRESULT readyState([retval, out]LONG *pl);\n\n    [propget, id(DISPID_XMLDOCUMENT_CHARSET)]\n    HRESULT charset([retval, out]BSTR *p);\n\n    [propput, id(DISPID_XMLDOCUMENT_CHARSET)]\n    HRESULT charset([in]BSTR p);\n\n    [propget, id(DISPID_XMLDOCUMENT_VERSION)]\n    HRESULT version([retval, out]BSTR *p);\n\n    [propget, id(DISPID_XMLDOCUMENT_DOCTYPE)]\n    HRESULT doctype([retval, out]BSTR *p);\n\n    [propget, restricted, id(DISPID_XMLDOCUMENT_DTDURL)]\n    HRESULT dtdURL([retval, out]BSTR *p);\n\n    [id(DISPID_XMLDOCUMENT_CREATEELEMENT)]\n    HRESULT createElement(\n        [in] VARIANT vType, \n        [optional, in] VARIANT var, \n        [retval, out] IXMLElement2 **ppElem);\n\n    [propget, id(DISPID_XMLDOCUMENT_ASYNC)]\n    HRESULT async([retval, out] VARIANT_BOOL *pf);\n\n    [propput, id(DISPID_XMLDOCUMENT_ASYNC)]\n    HRESULT async([in] VARIANT_BOOL f);\n}\n\ntypedef enum tagXMLEMEM_TYPE {\n\tXMLELEMTYPE_ELEMENT\t= 0,\n\tXMLELEMTYPE_TEXT \t= 1,\n\tXMLELEMTYPE_COMMENT\t= 2,\n\tXMLELEMTYPE_DOCUMENT\t= 3,\n\tXMLELEMTYPE_DTD\t\t= 4,\n\tXMLELEMTYPE_PI\t\t= 5,\n\tXMLELEMTYPE_OTHER\t= 6\n} XMLELEM_TYPE;\n\ntypedef struct _xml_error {\n\tUINT _nLine;\n\tBSTR _pchBuf;\n\tBSTR _cchBuf;\n\tUINT _ich;\n\tBSTR _pszFound;\n\tBSTR _pszExpected;\n\tDWORD _reserved1;\n\tDWORD _reserved2;\n} XML_ERROR;\n\n[\nlocal,\nobject,\nuuid(d4d4a0fc-3b73-11d1-b2b4-00c04fb92596)\n]\ninterface IXMLAttribute : IDispatch\n{\n    [propget, id(DISPID_XMLATTRIBUTE_NAME)]\n    HRESULT name( [retval, out] BSTR *p );\n\n    [propget, id(DISPID_XMLATTRIBUTE_VALUE)]\n    HRESULT value( [retval, out] BSTR *p );\n}\n\n[\nlocal,\nobject,\nuuid(948c5ad3-c58d-11d0-9c0b-00c04fc99c8e)\n]\ninterface IXMLError : IUnknown\n{\n    HRESULT GetErrorInfo([out]XML_ERROR *pErrorReturn);\n}\n\n[\n    object,\n    local,\n    uuid(D9F1E15A-CCDB-11d0-9C0C-00C04FC99C8E)\n]\ninterface IXMLElementNotificationSink : IDispatch\n{\n    [id(DISPID_XMLNOTIFSINK_CHILDADDED)] \n    HRESULT ChildAdded([in]IDispatch *pChildElem); \n}\n\n[\n    helpstring(\"Msxml\"),\n    progid(\"Msxml\"),\n    threading(both),\n    version(1.0),\n    uuid(cfc399af-d876-11d0-9c10-00c04fc99c8e)\n]\ncoclass XMLDocument\n{\n    [default] interface IXMLDocument;\n}\n\n} /* Library MSXML */\n"
  },
  {
    "path": "wine/windows/msxml2.idl",
    "content": "/*\n * Copyright (C) 2005 Vijay Kiran Kamuju\n * Copyright (C) 2008 Alistair Leslie-Hughes\n * Copyright (C) 2010 Nikolay Sivov for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <msxml2did.h>\n#include <idispids.h>\n\nimport \"unknwn.idl\";\nimport \"objidl.idl\";\nimport \"oaidl.idl\";\n\n#if !defined(progid) && !defined(__WIDL__)\n#define threading(model)\n#define progid(str)\n#define vi_progid(str)\n#endif\n\n[\n    uuid(f5078f18-c551-11d3-89b9-0000f81fe221),\n    version(3.0),\n    helpstring(\"Microsoft XML, v3.0\")\n]\nlibrary MSXML2\n{\n\nimportlib(\"stdole2.tlb\");\n\ninterface IXMLDOMImplementation;\ninterface IXMLDOMNode;\ninterface IXMLDOMDocumentFragment;\ninterface IXMLDOMDocument;\ninterface IXMLDOMSchemaCollection;\ninterface IXMLDOMDocument2;\ninterface IXMLDOMNodeList;\ninterface IXMLDOMNamedNodeMap;\ninterface IXMLDOMCharacterData;\ninterface IXMLDOMAttribute;\ninterface IXMLDOMElement;\ninterface IXMLDOMText;\ninterface IXMLDOMComment;\ninterface IXMLDOMProcessingInstruction;\ninterface IXMLDOMCDATASection;\ninterface IXMLDOMDocumentType;\ninterface IXMLDOMNotation;\ninterface IXMLDOMEntity;\ninterface IXMLDOMEntityReference;\ninterface IXMLDOMParseError;\ninterface IXMLDOMParseErrorCollection;\ninterface IXTLRuntime;\ninterface IXSLTemplate;\ninterface IXSLProcessor;\n\n/* SAX Interfaces */\ninterface ISAXAttributes;\ninterface ISAXContentHandler;\ninterface ISAXDeclHandler;\ninterface ISAXDTDHandler;\ninterface ISAXEntityResolver;\ninterface ISAXErrorHandler;\ninterface ISAXLexicalHandler;\ninterface ISAXLocator;\ninterface ISAXXMLFilter;\ninterface ISAXXMLReader;\n\ninterface IVBSAXAttributes;\ninterface IVBSAXContentHandler;\ninterface IVBSAXDeclHandler;\ninterface IVBSAXDTDHandler;\ninterface IVBSAXEntityResolver;\ninterface IVBSAXErrorHandler;\ninterface IVBSAXLexicalHandler;\ninterface IVBSAXLocator;\ninterface IVBSAXXMLFilter;\ninterface IVBSAXXMLReader;\n\ninterface IMXAttributes;\ninterface IMXReaderControl;\ninterface IMXWriter;\n\ninterface IXMLDOMSchemaCollection2;\ninterface ISchemaStringCollection;\ninterface ISchemaItemCollection;\ninterface ISchemaItem;\ninterface ISchema;\ninterface ISchemaParticle;\ninterface ISchemaAttribute;\ninterface ISchemaElement;\ninterface ISchemaType;\ninterface ISchemaComplexType;\ninterface ISchemaAttributeGroup;\ninterface ISchemaModelGroup;\ninterface ISchemaAny;\ninterface ISchemaIdentityConstraint;\ninterface ISchemaNotation;\n\n\ncpp_quote(\"#define DOMDocument DOMDocument2\")\ncpp_quote(\"#define CLSID_DOMDocument CLSID_DOMDocument2\")\n\ncpp_quote(\"#ifndef __MSXML_DOMNODETYPE_DEFINED\")\ncpp_quote(\"#define __MSXML_DOMNODETYPE_DEFINED\")\ntypedef enum tagDOMNodeType \n{  \n    NODE_INVALID  \t\t= 0,\n    NODE_ELEMENT  \t\t= 1,\n    NODE_ATTRIBUTE\t\t= 2,\n    NODE_TEXT\t\t\t= 3,\n    NODE_CDATA_SECTION\t\t= 4,\n    NODE_ENTITY_REFERENCE \t= 5,\n    NODE_ENTITY \t\t= 6,\n    NODE_PROCESSING_INSTRUCTION = 7,\n    NODE_COMMENT\t\t= 8,\n    NODE_DOCUMENT\t\t= 9,\n    NODE_DOCUMENT_TYPE\t\t= 10,\n    NODE_DOCUMENT_FRAGMENT \t= 11,\n    NODE_NOTATION \t\t= 12\n} DOMNodeType;\ncpp_quote(\"#endif\")\n\ntypedef enum _SOMITEMTYPE\n{\n    SOMITEM_SCHEMA                      = 0x1000,\n    SOMITEM_ATTRIBUTE                   = 0x1001,\n    SOMITEM_ATTRIBUTEGROUP              = 0x1002,\n    SOMITEM_NOTATION                    = 0x1003,\n    SOMITEM_IDENTITYCONSTRAINT          = 0x1100,\n    SOMITEM_KEY                         = 0x1101,\n    SOMITEM_KEYREF                      = 0x1102,\n    SOMITEM_UNIQUE                      = 0x1103,\n    SOMITEM_ANYTYPE                     = 0x2000,\n    SOMITEM_DATATYPE                    = 0x2100,\n    SOMITEM_DATATYPE_ANYTYPE            = 0x2101,\n    SOMITEM_DATATYPE_ANYURI             = 0x2102,\n    SOMITEM_DATATYPE_BASE64BINARY       = 0x2103,\n    SOMITEM_DATATYPE_BOOLEAN            = 0x2104,\n    SOMITEM_DATATYPE_BYTE               = 0x2105,\n    SOMITEM_DATATYPE_DATE               = 0x2106,\n    SOMITEM_DATATYPE_DATETIME           = 0x2107,\n    SOMITEM_DATATYPE_DAY                = 0x2108,\n    SOMITEM_DATATYPE_DECIMAL            = 0x2109,\n    SOMITEM_DATATYPE_DOUBLE             = 0x210A,\n    SOMITEM_DATATYPE_DURATION           = 0x210B,\n    SOMITEM_DATATYPE_ENTITIES           = 0x210C,\n    SOMITEM_DATATYPE_ENTITY             = 0x210D,\n    SOMITEM_DATATYPE_FLOAT              = 0x210E,\n    SOMITEM_DATATYPE_HEXBINARY          = 0x210F,\n    SOMITEM_DATATYPE_ID                 = 0x2110,\n    SOMITEM_DATATYPE_IDREF              = 0x2111,\n    SOMITEM_DATATYPE_IDREFS             = 0x2112,\n    SOMITEM_DATATYPE_INT                = 0x2113,\n    SOMITEM_DATATYPE_INTEGER            = 0x2114,\n    SOMITEM_DATATYPE_LANGUAGE           = 0x2115,\n    SOMITEM_DATATYPE_LONG               = 0x2116,\n    SOMITEM_DATATYPE_MONTH              = 0x2117,\n    SOMITEM_DATATYPE_MONTHDAY           = 0x2118,\n    SOMITEM_DATATYPE_NAME               = 0x2119,\n    SOMITEM_DATATYPE_NCNAME             = 0x211A,\n    SOMITEM_DATATYPE_NEGATIVEINTEGER    = 0x211B,\n    SOMITEM_DATATYPE_NMTOKEN            = 0x211C,\n    SOMITEM_DATATYPE_NMTOKENS           = 0x211D,\n    SOMITEM_DATATYPE_NONNEGATIVEINTEGER = 0x211E,\n    SOMITEM_DATATYPE_NONPOSITIVEINTEGER = 0x211F,\n    SOMITEM_DATATYPE_NORMALIZEDSTRING   = 0x2120,\n    SOMITEM_DATATYPE_NOTATION           = 0x2121,\n    SOMITEM_DATATYPE_POSITIVEINTEGER    = 0x2122,\n    SOMITEM_DATATYPE_QNAME              = 0x2123,\n    SOMITEM_DATATYPE_SHORT              = 0x2124,\n    SOMITEM_DATATYPE_STRING             = 0x2125,\n    SOMITEM_DATATYPE_TIME               = 0x2126,\n    SOMITEM_DATATYPE_TOKEN              = 0x2127,\n    SOMITEM_DATATYPE_UNSIGNEDBYTE       = 0x2128,\n    SOMITEM_DATATYPE_UNSIGNEDINT        = 0x2129,\n    SOMITEM_DATATYPE_UNSIGNEDLONG       = 0x212A,\n    SOMITEM_DATATYPE_UNSIGNEDSHORT      = 0x212B,\n    SOMITEM_DATATYPE_YEAR               = 0x212C,\n    SOMITEM_DATATYPE_YEARMONTH          = 0x212D,\n    SOMITEM_DATATYPE_ANYSIMPLETYPE      = 0x21FF,\n    SOMITEM_SIMPLETYPE                  = 0x2200,\n    SOMITEM_COMPLEXTYPE                 = 0x2400,\n    SOMITEM_PARTICLE                    = 0x4000,\n    SOMITEM_ANY                         = 0x4001,\n    SOMITEM_ANYATTRIBUTE                = 0x4002,\n    SOMITEM_ELEMENT                     = 0x4003,\n    SOMITEM_GROUP                       = 0x4100,\n    SOMITEM_ALL                         = 0x4101,\n    SOMITEM_CHOICE                      = 0x4102,\n    SOMITEM_SEQUENCE                    = 0x4103,\n    SOMITEM_EMPTYPARTICLE               = 0x4104,\n    SOMITEM_NULL                        = 0x0800,\n    SOMITEM_NULL_TYPE                   = 0x2800,\n    SOMITEM_NULL_ANY                    = 0x4801,\n    SOMITEM_NULL_ANYATTRIBUTE           = 0x4802,\n    SOMITEM_NULL_ELEMENT                = 0x4803,\n} SOMITEMTYPE;\n\ntypedef enum _SCHEMAUSE\n{\n    SCHEMAUSE_OPTIONAL,\n    SCHEMAUSE_PROHIBITED,\n    SCHEMAUSE_REQUIRED,\n} SCHEMAUSE;\n\ntypedef enum _SCHEMADERIVATIONMETHOD\n{\n    SCHEMADERIVATIONMETHOD_EMPTY        = 0x0000,\n    SCHEMADERIVATIONMETHOD_SUBSTITUTION = 0x0001,\n    SCHEMADERIVATIONMETHOD_EXTENSION    = 0x0002,\n    SCHEMADERIVATIONMETHOD_RESTRICTION  = 0x0004,\n    SCHEMADERIVATIONMETHOD_LIST         = 0x0008,\n    SCHEMADERIVATIONMETHOD_UNION        = 0x0010,\n    SCHEMADERIVATIONMETHOD_ALL          = 0x00FF,\n    SCHEMADERIVATIONMETHOD_NONE         = 0x0100,\n} SCHEMADERIVATIONMETHOD;\n\ntypedef enum _SCHEMACONTENTTYPE\n{\n    SCHEMACONTENTTYPE_EMPTY,\n    SCHEMACONTENTTYPE_TEXTONLY,\n    SCHEMACONTENTTYPE_ELEMENTONLY,\n    SCHEMACONTENTTYPE_MIXED,\n} SCHEMACONTENTTYPE;\n\ntypedef enum _SCHEMAPROCESSCONTENTS\n{\n    SCHEMAPROCESSCONTENTS_NONE,\n    SCHEMAPROCESSCONTENTS_SKIP,\n    SCHEMAPROCESSCONTENTS_LAX,\n    SCHEMAPROCESSCONTENTS_STRICT,\n} SCHEMAPROCESSCONTENTS;\n\ntypedef enum _SCHEMAWHITESPACE\n{\n    SCHEMAWHITESPACE_NONE       = -1,\n    SCHEMAWHITESPACE_PRESERVE   =  0,\n    SCHEMAWHITESPACE_REPLACE    =  1,\n    SCHEMAWHITESPACE_COLLAPSE   =  2,\n} SCHEMAWHITESPACE;\n\n\ntypedef enum _SCHEMATYPEVARIETY\n{\n    SCHEMATYPEVARIETY_NONE      = -1,\n    SCHEMATYPEVARIETY_ATOMIC    =  0,\n    SCHEMATYPEVARIETY_LIST      =  1,\n    SCHEMATYPEVARIETY_UNION     =  2,\n} SCHEMATYPEVARIETY;\n\n[\nlocal,\nobject,\nodl,\ndual,\noleautomation,\nuuid(65725580-9b5d-11d0-9bfe-00c04fc99c8e)\n]\ninterface IXMLElementCollection : IDispatch\n{\n    [propput, id(DISPID_XMLELEMENTCOLLECTION_LENGTH)]\n    HRESULT length( [in] LONG v );\n\n    [propget, id(DISPID_XMLELEMENTCOLLECTION_LENGTH)]\n    HRESULT length( [retval, out] LONG *p );\n\n    [propget, id(DISPID_XMLELEMENTCOLLECTION_NEWENUM)]\n    HRESULT _newEnum( [retval, out] IUnknown ** ppUnk );\n\n    [id(DISPID_XMLELEMENTCOLLECTION_ITEM)]\n    HRESULT item(\n            [optional, in] VARIANT var1,\n            [optional, in] VARIANT var2,\n            [retval, out] IDispatch ** ppDisp );\n}\n\n[\nlocal,\nobject,\nuuid(3f7f31ac-e15f-11d0-9c25-00c04fc99c8e)\n]\ninterface IXMLElement : IDispatch\n{\n    [propget, id(DISPID_XMLELEMENT_TAGNAME)]\n    HRESULT tagName( [retval, out] BSTR *p);\n\n    [propput, id(DISPID_XMLELEMENT_TAGNAME)]\n    HRESULT tagName( [in] BSTR p );\n\n    [propget, id(DISPID_XMLELEMENT_PARENT)]\n    HRESULT parent( [retval, out] IXMLElement **parent );\n\n    [id(DISPID_XMLELEMENT_SETATTRIBUTE)]\n    HRESULT setAttribute(\n            [in] BSTR strPropertyName,\n            [in] VARIANT PropertyValue );\n\n    [id(DISPID_XMLELEMENT_GETATTRIBUTE)]\n    HRESULT getAttribute(\n            [in] BSTR strPropertyName,\n            [retval, out] VARIANT *PropertyValue );\n\n    [id(DISPID_XMLELEMENT_REMOVEATTRIBUTE)]\n    HRESULT removeAttribute(\n            [in] BSTR strPropertyName );\n\n    [propget, id(DISPID_XMLELEMENT_CHILDREN)]\n    HRESULT children( [retval, out] IXMLElementCollection **p );\n\n    [propget, id(DISPID_XMLELEMENT_TYPE)]\n    HRESULT type( [retval, out] LONG *p );\n\n    [propget, id(DISPID_XMLELEMENT_TEXT)]\n    HRESULT text( [retval, out] BSTR *p );\n\n    [propput, id(DISPID_XMLELEMENT_TEXT)]\n    HRESULT text( [in] BSTR p );\n\n    [id(DISPID_XMLELEMENT_ADDCHILD)]\n    HRESULT addChild(\n            [in] IXMLElement *pChildElem,\n            [in] LONG lIndex,\n            [in] LONG lreserved );\n\n    [id(DISPID_XMLELEMENT_REMOVECHILD)]\n    HRESULT removeChild(\n            [in] IXMLElement *pChildElem );\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF80-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMNode : IDispatch\n{\n    [propget, id(DISPID_DOM_NODE_NODENAME)]\n    HRESULT nodeName([retval, out] BSTR *p);\n\n    [propget, id(DISPID_DOM_NODE_NODEVALUE)]\n    HRESULT nodeValue([retval, out] VARIANT *var1);\n\n    [propput, id(DISPID_DOM_NODE_NODEVALUE)]\n    HRESULT nodeValue([in] VARIANT var1);\n\n    [propget, id(DISPID_DOM_NODE_NODETYPE)]\n    HRESULT nodeType([retval, out] DOMNodeType *domNodeType);\n\n    [propget, id(DISPID_DOM_NODE_PARENTNODE)]\n    HRESULT parentNode([retval, out] IXMLDOMNode **parent);\n\n    [propget, id(DISPID_DOM_NODE_CHILDNODES)]\n    HRESULT childNodes([retval, out] IXMLDOMNodeList **outList);\n\n    [propget, id(DISPID_DOM_NODE_FIRSTCHILD)]\n    HRESULT firstChild([retval, out] IXMLDOMNode **domNode);\n\n    [propget, id(DISPID_DOM_NODE_LASTCHILD)]\n    HRESULT lastChild([retval, out] IXMLDOMNode **domNode);\n\n    [propget, id(DISPID_DOM_NODE_PREVIOUSSIBLING)]\n    HRESULT previousSibling([retval, out] IXMLDOMNode **domNode);\n\n    [propget, id(DISPID_DOM_NODE_NEXTSIBLING)]\n    HRESULT nextSibling([retval, out] IXMLDOMNode **domNode);\n\n    [propget, id(DISPID_DOM_NODE_ATTRIBUTES)]\n    HRESULT attributes([retval, out] IXMLDOMNamedNodeMap **attributeMap);\n\n    [id(DISPID_DOM_NODE_INSERTBEFORE)]\n    HRESULT insertBefore(\n        [in] IXMLDOMNode *newNode,\n        [in] VARIANT var1,\n        [retval, out] IXMLDOMNode **outOldNode);\n\n    [id(DISPID_DOM_NODE_REPLACECHILD)]\n    HRESULT replaceChild(\n        [in] IXMLDOMNode *newNode,\n        [in] IXMLDOMNode *oldNode,\n        [retval, out] IXMLDOMNode **outOldNode);\n\n    [id(DISPID_DOM_NODE_REMOVECHILD)]\n    HRESULT removeChild(\n        [in] IXMLDOMNode *domNode,\n        [retval, out] IXMLDOMNode **oldNode);\n\n    [id(DISPID_DOM_NODE_APPENDCHILD)]\n    HRESULT appendChild(\n        [in] IXMLDOMNode *newNode,\n        [retval, out] IXMLDOMNode **outNewNode);\n\n    [id(DISPID_DOM_NODE_HASCHILDNODES)]\n    HRESULT hasChildNodes(\n        [retval, out] VARIANT_BOOL *pbool);\n\n    [propget, id(DISPID_DOM_NODE_OWNERDOC)]\n    HRESULT ownerDocument([retval, out] IXMLDOMDocument **domDocument);\n\n    [id(DISPID_DOM_NODE_CLONENODE)]\n    HRESULT cloneNode(\n        [in] VARIANT_BOOL pbool,\n        [retval, out] IXMLDOMNode **outNode);\n\n    [propget, id(DISPID_XMLDOM_NODE_STRINGTYPE)]\n    HRESULT nodeTypeString([retval, out] BSTR *p);\n\n    [propget, id(DISPID_XMLDOM_NODE_TEXT)]\n    HRESULT text([retval, out] BSTR *p);\n\n    [propput, id(DISPID_XMLDOM_NODE_TEXT)]\n    HRESULT text([in] BSTR p);\n\n    [propget, id(DISPID_XMLDOM_NODE_SPECIFIED)]\n    HRESULT specified([retval, out] VARIANT_BOOL *pbool);\n\n    [propget, id(DISPID_XMLDOM_NODE_DEFINITION)]\n    HRESULT definition([retval,out] IXMLDOMNode **domNode);\n\n    [propget, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)]\n    HRESULT nodeTypedValue([retval, out] VARIANT *var1);\n\n    [propput, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)]\n    HRESULT nodeTypedValue([in] VARIANT var1);\n\n    [propget, id(DISPID_XMLDOM_NODE_DATATYPE)]\n    HRESULT dataType([retval, out] VARIANT *var1);\n\n    [propput, id(DISPID_XMLDOM_NODE_DATATYPE)]\n    HRESULT dataType([in] BSTR p);\n\n    [propget, id(DISPID_XMLDOM_NODE_XML)]\n    HRESULT xml([retval, out] BSTR *p);\n\n    [id(DISPID_XMLDOM_NODE_TRANSFORMNODE)]\n    HRESULT transformNode(\n        [in] IXMLDOMNode *domNode,\n        [retval, out] BSTR *p);\n\n    [id(DISPID_XMLDOM_NODE_SELECTNODES)]\n    HRESULT selectNodes(\n        [in] BSTR p,\n        [retval, out] IXMLDOMNodeList **outList);\n\n    [id(DISPID_XMLDOM_NODE_SELECTSINGLENODE)]\n    HRESULT selectSingleNode(\n        [in] BSTR p,\n        [retval, out] IXMLDOMNode **outNode);\n\n    [propget,id(DISPID_XMLDOM_NODE_PARSED)]\n    HRESULT parsed([retval, out] VARIANT_BOOL *pbool);\n\n    [propget, id(DISPID_XMLDOM_NODE_NAMESPACE)]\n    HRESULT namespaceURI([retval, out] BSTR *p);\n\n    [propget, id(DISPID_XMLDOM_NODE_PREFIX)]\n    HRESULT prefix([retval, out] BSTR *p);\n\n    [propget, id(DISPID_XMLDOM_NODE_BASENAME)]\n    HRESULT baseName([retval, out] BSTR *p);\n\n    [id(DISPID_XMLDOM_NODE_TRANSFORMNODETOOBJECT)]\n    HRESULT transformNodeToObject(\n        [in] IXMLDOMNode *domNode,\n        [in] VARIANT var1);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF81-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMDocument : IXMLDOMNode\n{\n    [propget, id(DISPID_DOM_DOCUMENT_DOCTYPE)]\n    HRESULT doctype([retval, out] IXMLDOMDocumentType **docType);\n\n    [propget, id(DISPID_DOM_DOCUMENT_IMPLEMENTATION)]\n    HRESULT implementation([retval, out] IXMLDOMImplementation **impl);\n\n    [propget, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)]\n    HRESULT documentElement([retval, out] IXMLDOMElement **domElement);\n\n    [propputref, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)]\n    HRESULT documentElement([in] IXMLDOMElement *domElement);\n\n    [id(DISPID_DOM_DOCUMENT_CREATEELEMENT)]\n    HRESULT createElement(\n        [in] BSTR p,\n        [retval, out] IXMLDOMElement **domElement);\n\n    [id(DISPID_DOM_DOCUMENT_CREATEDOCUMENTFRAGMENT)]\n    HRESULT createDocumentFragment(\n        [retval, out] IXMLDOMDocumentFragment **docFrag);\n\n    [id(DISPID_DOM_DOCUMENT_CREATETEXTNODE)]\n    HRESULT createTextNode(\n        [in] BSTR p,\n        [retval, out] IXMLDOMText **text);\n\n    [id(DISPID_DOM_DOCUMENT_CREATECOMMENT)]\n    HRESULT createComment(\n        [in] BSTR p,\n        [retval, out] IXMLDOMComment **comment);\n\n    [id(DISPID_DOM_DOCUMENT_CREATECDATASECTION)]\n    HRESULT createCDATASection(\n        [in] BSTR p,\n        [retval, out] IXMLDOMCDATASection **cdata);\n\n    [id(DISPID_DOM_DOCUMENT_CREATEPROCESSINGINSTRUCTION)]\n    HRESULT createProcessingInstruction(\n        [in] BSTR target,\n        [in] BSTR data,\n        [retval, out] IXMLDOMProcessingInstruction **pi);\n\n    [id(DISPID_DOM_DOCUMENT_CREATEATTRIBUTE)]\n    HRESULT createAttribute(\n        [in] BSTR p,\n        [retval, out] IXMLDOMAttribute **attribute);\n\n    [id(DISPID_DOM_DOCUMENT_CREATEENTITYREFERENCE)]\n    HRESULT createEntityReference(\n        [in] BSTR p,\n        [retval, out] IXMLDOMEntityReference **entityRef);\n\n    [id(DISPID_DOM_DOCUMENT_GETELEMENTSBYTAGNAME)]\n    HRESULT getElementsByTagName(\n        [in] BSTR p,\n        [retval, out] IXMLDOMNodeList **resultList);\n\n    [id(DISPID_XMLDOM_DOCUMENT_CREATENODE)]\n    HRESULT createNode(\n        [in] VARIANT var, \n        [in] BSTR name, \n        [in] BSTR uri,\n        [retval, out] IXMLDOMNode **node);\n\n    [id(DISPID_XMLDOM_DOCUMENT_NODEFROMID)]\n    HRESULT nodeFromID( \n        [in] BSTR id,\n        [retval, out] IXMLDOMNode **node);\n\n    [id(DISPID_XMLDOM_DOCUMENT_LOAD)]\n    HRESULT load(\n        [in] VARIANT var1,\n        [retval, out] VARIANT_BOOL *pbool);\n\n    [propget, id(DISPID_READYSTATE)]\n    HRESULT readyState([retval, out] LONG *value);\n\n    [propget, id(DISPID_XMLDOM_DOCUMENT_PARSEERROR)]\n    HRESULT parseError([retval, out] IXMLDOMParseError **err);\n\n    [propget, id(DISPID_XMLDOM_DOCUMENT_URL)]\n    HRESULT url([retval, out] BSTR *p);\n\n    [propget, id(DISPID_XMLDOM_DOCUMENT_ASYNC)]\n    HRESULT async([retval, out] VARIANT_BOOL *pbool);\n\n    [propput, id(DISPID_XMLDOM_DOCUMENT_ASYNC)]\n    HRESULT async([in] VARIANT_BOOL pbool);\n\n    [id(DISPID_XMLDOM_DOCUMENT_ABORT)]\n    HRESULT abort();\n\n    [id(DISPID_XMLDOM_DOCUMENT_LOADXML)]\n    HRESULT loadXML( \n        [in] BSTR p,\n        [out, retval] VARIANT_BOOL *pbool);\n\n    [id(DISPID_XMLDOM_DOCUMENT_SAVE)]\n    HRESULT save( \n        [in] VARIANT var1);\n\n    [propget, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)]\n    HRESULT validateOnParse([retval, out] VARIANT_BOOL *pbool);\n\n    [propput, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)]\n    HRESULT validateOnParse([in] VARIANT_BOOL pbool);\n\n    [propget, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)]\n    HRESULT resolveExternals([retval,out] VARIANT_BOOL *pbool);\n\n    [propput, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)]\n    HRESULT resolveExternals([in] VARIANT_BOOL pbool);\n\n    [propget, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)]\n    HRESULT preserveWhiteSpace([retval,out] VARIANT_BOOL *pbool);\n\n    [propput, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)]\n    HRESULT preserveWhiteSpace([in] VARIANT_BOOL pbool);\n\n    [propput, id(DISPID_XMLDOM_DOCUMENT_ONREADYSTATECHANGE)]\n    HRESULT onreadystatechange([in] VARIANT var1);\n\n    [propput, id(DISPID_XMLDOM_DOCUMENT_ONDATAAVAILABLE)]\n    HRESULT ondataavailable([in] VARIANT var1);\n\n    [propput, id(DISPID_XMLDOM_DOCUMENT_ONTRANSFORMNODE)]\n    HRESULT ontransformnode([in] VARIANT var1);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (373984c8-b845-449b-91e7-45ac83036ade)\n]\ninterface IXMLDOMSchemaCollection : IDispatch\n{\n    [id(DISPID_XMLDOM_SCHEMACOLLECTION_ADD)]\n    HRESULT add(\n        [in] BSTR uri,\n        [in] VARIANT var);\n\n    [id(DISPID_XMLDOM_SCHEMACOLLECTION_GET)]\n    HRESULT get(\n        [in] BSTR uri,\n        [retval, out] IXMLDOMNode **node);\n\n    [id(DISPID_XMLDOM_SCHEMACOLLECTION_REMOVE)]\n    HRESULT remove(\n        [in] BSTR uri);\n\n    [propget, id(DISPID_XMLDOM_SCHEMACOLLECTION_LENGTH)]\n    HRESULT length(\n        [retval, out] LONG *length);\n\n    [propget, id(DISPID_VALUE)]\n    HRESULT namespaceURI([in] LONG index, [out, retval] BSTR *len);\n\n    [id(DISPID_XMLDOM_SCHEMACOLLECTION_ADDCOLLECTION)]\n    HRESULT addCollection(\n        [in] IXMLDOMSchemaCollection *otherCollection);\n\n    [propget, id(DISPID_NEWENUM)]\n    HRESULT _newEnum([retval, out] IUnknown **ppUnk);\n}\n\n[\n    local,\n    object,\n    dual,\n    oleautomation,\n    uuid(50ea08b0-dd1b-4664-9a50-c2f40f4bd79a),\n]\ninterface IXMLDOMSchemaCollection2 : IXMLDOMSchemaCollection\n{\n    [id(DISPID_SOM_VALIDATE)]\n    HRESULT validate();\n\n    [propput, id(DISPID_SOM_VALIDATEONLOAD)]\n    HRESULT validateOnLoad(\n        [in] VARIANT_BOOL validateOnLoad);\n\n    [propget, id(DISPID_SOM_VALIDATEONLOAD)]\n    HRESULT validateOnLoad(\n        [out,retval] VARIANT_BOOL* validateOnLoad);\n\n    [id(DISPID_SOM_GETSCHEMA)]\n    HRESULT getSchema(\n        [in] BSTR namespaceURI,\n        [out,retval] ISchema** schema);\n\n    [id(DISPID_SOM_GETDECLARATION)]\n    HRESULT getDeclaration(\n        [in] IXMLDOMNode* node,\n        [out,retval]ISchemaItem** item);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF95-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMDocument2 : IXMLDOMDocument\n{\n    [propget, id(DISPID_XMLDOM_DOCUMENT2_NAMESPACES)]\n    HRESULT namespaces([retval, out] IXMLDOMSchemaCollection **schemaCollection);\n\n    [propget, id(DISPID_XMLDOM_DOCUMENT2_SCHEMAS)]\n    HRESULT schemas([retval, out] VARIANT *var1);\n\n    [propputref, id(DISPID_XMLDOM_DOCUMENT2_SCHEMAS)]\n    HRESULT schemas([in] VARIANT var1);\n\n    [id(DISPID_XMLDOM_DOCUMENT2_VALIDATE)]\n    HRESULT validate(\n        [retval, out] IXMLDOMParseError **err);\n\n    [id(DISPID_XMLDOM_DOCUMENT2_SETPROPERTY)]\n    HRESULT setProperty(\n        [in] BSTR p,\n        [in] VARIANT var);\n\n    [id(DISPID_XMLDOM_DOCUMENT2_GETPROPERTY)]\n    HRESULT getProperty(\n        [in] BSTR p,\n        [retval, out] VARIANT *var);\n}\n\n[\n    local,\n    object,\n    dual,\n    uuid(2933bf96-7b36-11d2-b20e-00c04f983e60),\n    oleautomation,\n]\ninterface IXMLDOMDocument3 : IXMLDOMDocument2\n{\n    [id(DISPID_XMLDOM_DOCUMENT3_VALIDATENODE)]\n    HRESULT validateNode(\n        [in] IXMLDOMNode *node,\n        [out, retval] IXMLDOMParseError **error);\n\n    [id(DISPID_XMLDOM_DOCUMENT3_IMPORTNODE)]\n    HRESULT importNode(\n        [in] IXMLDOMNode *node,\n        [in] VARIANT_BOOL deep,\n        [out, retval] IXMLDOMNode **clone);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF82-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMNodeList : IDispatch\n{\n    [propget, id(DISPID_VALUE)]\n    HRESULT item([in] LONG lIndex, [retval, out] IXMLDOMNode **outNode);\n\n    [propget, id(DISPID_DOM_NODELIST_LENGTH)]\n    HRESULT length([retval, out] LONG *lLength);\n\n    [id(DISPID_XMLDOM_NODELIST_NEXTNODE)]\n    HRESULT nextNode(\n        [retval, out] IXMLDOMNode **outNode);\n\n    [id(DISPID_XMLDOM_NODELIST_RESET)]\n    HRESULT reset();\n\n    [propget, id(DISPID_NEWENUM)]\n    HRESULT _newEnum([retval, out] IUnknown **ppUnk);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (AA634FC7-5888-44a7-A257-3A47150D3A0E)\n]\ninterface IXMLDOMSelection : IXMLDOMNodeList\n{\n    [propget, id(DISPID_XMLDOM_SELECTION_EXPR)]\n    HRESULT expr([retval, out] BSTR *p);\n\n    [propput, id(DISPID_XMLDOM_SELECTION_EXPR)]\n    HRESULT expr([in] BSTR p);\n\n    [propget, id(DISPID_XMLDOM_SELECTION_CONTEXT)]\n    HRESULT context([retval, out] IXMLDOMNode **ppNode);\n\n    [propputref, id(DISPID_XMLDOM_SELECTION_CONTEXT)]\n    HRESULT context([in] IXMLDOMNode * pNode);\n\n    [id(DISPID_XMLDOM_SELECTION_PEEKNODE)]\n    HRESULT peekNode(\n        [retval, out] IXMLDOMNode **ppNode);\n\n    [id(DISPID_XMLDOM_SELECTION_MATCHES)]\n    HRESULT matches(\n        [in] IXMLDOMNode *pNode,\n        [retval, out] IXMLDOMNode **ppNode);\n\n    [id(DISPID_XMLDOM_SELECTION_REMOVENEXT)] \n    HRESULT removeNext(\n        [retval, out] IXMLDOMNode **ppNode);\n\n    [id(DISPID_XMLDOM_SELECTION_REMOVEALL)]\n    HRESULT removeAll();\n\n    [id(DISPID_XMLDOM_SELECTION_CLONE)]\n    HRESULT clone(\n        [retval, out] IXMLDOMSelection **ppNode);\n\n    [id(DISPID_XMLDOM_SELECTION_GETPROPERTY)]\n    HRESULT getProperty(\n        [in] BSTR p,\n        [retval, out] VARIANT * var);\n\n    [id(DISPID_XMLDOM_SELECTION_SETPROPERTY)]\n    HRESULT setProperty(\n        [in] BSTR p,\n        [in] VARIANT var);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF83-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMNamedNodeMap : IDispatch\n{\n    [id(DISPID_DOM_NAMEDNODEMAP_GETNAMEDITEM)]\n    HRESULT getNamedItem(\n        [in] BSTR p,\n        [retval, out] IXMLDOMNode **outNode);\n\n    [id(DISPID_DOM_NAMEDNODEMAP_SETNAMEDITEM)]\n    HRESULT setNamedItem(\n        [in] IXMLDOMNode *newNode,\n        [retval, out] IXMLDOMNode **outNode);\n\n    [id(DISPID_DOM_NAMEDNODEMAP_REMOVENAMEDITEM)]\n    HRESULT removeNamedItem(\n        [in] BSTR p,\n        [retval, out] IXMLDOMNode **outNode);\n\n    [propget, id(DISPID_VALUE)]\n    HRESULT item([in] LONG lIndex, [retval, out] IXMLDOMNode **outNode);\n\n    [propget, id(DISPID_DOM_NODELIST_LENGTH)]\n    HRESULT length([retval, out] LONG *lLength);\n\n    [id(DISPID_XMLDOM_NAMEDNODEMAP_GETQUALIFIEDITEM)]\n    HRESULT getQualifiedItem(\n        [in] BSTR name,\n        [in] BSTR uri,\n        [retval, out] IXMLDOMNode **outNode);\n\n    [id(DISPID_XMLDOM_NAMEDNODEMAP_REMOVEQUALIFIEDITEM)]\n    HRESULT removeQualifiedItem(\n        [in] BSTR name,\n        [in] BSTR uri,\n        [retval, out] IXMLDOMNode **outNode);\n\n    [id(DISPID_XMLDOM_NAMEDNODEMAP_NEXTNODE)]\n    HRESULT nextNode(\n        [retval, out] IXMLDOMNode **outNode);\n\n    [id(DISPID_XMLDOM_NAMEDNODEMAP_RESET)]\n    HRESULT reset();\n\n    [propget, id(DISPID_NEWENUM)]\n    HRESULT _newEnum([retval, out] IUnknown **ppUnk);\n}\n \n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (3efaa413-272f-11d2-836f-0000f87a7782)\n]\ninterface IXMLDOMDocumentFragment : IXMLDOMNode \n{\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF84-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMCharacterData : IXMLDOMNode \n{\n    [propget, id(DISPID_DOM_DATA_DATA)]\n    HRESULT data([retval, out] BSTR *p);\n\n    [propput, id(DISPID_DOM_DATA_DATA)]\n    HRESULT data([in] BSTR data);\n\n    [propget, id(DISPID_DOM_DATA_LENGTH)]\n    HRESULT length([retval, out] LONG *len);\n\n    [id(DISPID_DOM_DATA_SUBSTRING)]\n    HRESULT substringData(\n        [in] LONG offset,\n        [in] LONG count,\n        [retval, out] BSTR *p);\n\n    [id(DISPID_DOM_DATA_APPEND)]\n    HRESULT appendData(\n        [in] BSTR p);\n\n    [id(DISPID_DOM_DATA_INSERT)]\n    HRESULT insertData(\n        [in] LONG offset,\n        [in] BSTR p);\n\n    [id(DISPID_DOM_DATA_DELETE)]\n    HRESULT deleteData(\n        [in] LONG offset,\n        [in] LONG count);\n\n    [id(DISPID_DOM_DATA_REPLACE)]\n    HRESULT replaceData(\n        [in] LONG offset,\n        [in] LONG count,\n        [in] BSTR p);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF85-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMAttribute : IXMLDOMNode \n{\n    [propget, id(DISPID_DOM_ATTRIBUTE_GETNAME)]\n    HRESULT name([retval, out] BSTR *p);\n\n    [propget, id(DISPID_DOM_ATTRIBUTE_VALUE)]\n    HRESULT value([retval, out] VARIANT *var1);\n\n    [propput, id(DISPID_DOM_ATTRIBUTE_VALUE)]\n    HRESULT value([in] VARIANT var1);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF86-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMElement : IXMLDOMNode \n{\n    [propget, id(DISPID_DOM_ELEMENT_GETTAGNAME)]\n    HRESULT tagName([retval, out] BSTR *p);\n\n    [id(DISPID_DOM_ELEMENT_GETATTRIBUTE)]\n    HRESULT getAttribute(\n        [in] BSTR p,\n        [retval, out] VARIANT *var);\n\n    [id(DISPID_DOM_ELEMENT_SETATTRIBUTE)]\n    HRESULT setAttribute(\n        [in] BSTR p,\n        [in] VARIANT var);\n\n    [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTE)]\n    HRESULT removeAttribute(\n        [in] BSTR p);\n\n    [id(DISPID_DOM_ELEMENT_GETATTRIBUTENODE)]\n    HRESULT getAttributeNode(\n        [in] BSTR p,\n        [retval, out] IXMLDOMAttribute **attributeNode);\n\n    [id(DISPID_DOM_ELEMENT_SETATTRIBUTENODE)]\n    HRESULT setAttributeNode(\n        [in] IXMLDOMAttribute *domAttribute,\n        [retval, out] IXMLDOMAttribute **attributeNode);\n\n    [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTENODE)]\n    HRESULT removeAttributeNode(\n        [in] IXMLDOMAttribute *domAttribute,\n        [retval, out] IXMLDOMAttribute **attributeNode);\n\n    [id(DISPID_DOM_ELEMENT_GETELEMENTSBYTAGNAME)]\n    HRESULT getElementsByTagName(\n        [in] BSTR p,\n        [retval, out] IXMLDOMNodeList **resultList);\n\n    [id(DISPID_DOM_ELEMENT_NORMALIZE)]\n    HRESULT normalize();\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF87-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMText : IXMLDOMCharacterData \n{\n    [id(DISPID_DOM_TEXT_SPLITTEXT)]\n    HRESULT splitText(\n        [in] LONG offset,\n        [retval, out] IXMLDOMText **txtNode);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF88-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMComment : IXMLDOMCharacterData \n{\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF89-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMProcessingInstruction : IXMLDOMNode \n{\n    [propget, id(DISPID_DOM_PI_TARGET)]\n    HRESULT target([retval, out] BSTR *p);\n\n    [propget, id(DISPID_DOM_PI_DATA)]\n    HRESULT data([retval, out] BSTR *p);\n\n    [propput, id(DISPID_DOM_PI_DATA)]\n    HRESULT data([in] BSTR p);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF8A-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMCDATASection : IXMLDOMText \n{\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF8B-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMDocumentType : IXMLDOMNode \n{\n    [propget, id(DISPID_DOM_DOCUMENTTYPE_NAME)]\n    HRESULT name([retval, out] BSTR *p);\n\n    [propget, id(DISPID_DOM_DOCUMENTTYPE_ENTITIES)]\n    HRESULT entities([retval, out] IXMLDOMNamedNodeMap **entityMap);\n\n    [propget, id(DISPID_DOM_DOCUMENTTYPE_NOTATIONS)]\n    HRESULT notations([retval, out] IXMLDOMNamedNodeMap **notationMap);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF8C-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMNotation : IXMLDOMNode \n{\n    [propget, id(DISPID_DOM_NOTATION_PUBLICID)]\n    HRESULT publicId([retval, out] VARIANT *id);\n\n    [propget, id(DISPID_DOM_NOTATION_SYSTEMID)]\n    HRESULT systemId([retval, out] VARIANT *id);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF8D-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMEntity : IXMLDOMNode \n{\n    [propget, id(DISPID_DOM_ENTITY_PUBLICID)]\n    HRESULT publicId([retval, out] VARIANT *id1);\n\n    [propget, id(DISPID_DOM_ENTITY_SYSTEMID)]\n    HRESULT systemId([retval, out] VARIANT *id1);\n\n    [propget, id(DISPID_DOM_ENTITY_NOTATIONNAME)]\n    HRESULT notationName([retval, out] BSTR *p);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF8E-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMEntityReference : IXMLDOMNode \n{\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF8F-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMImplementation : IDispatch\n{\n    [id(DISPID_DOM_IMPLEMENTATION_HASFEATURE)]\n    HRESULT hasFeature(\n        [in] BSTR feature,\n        [in] BSTR version,\n        [retval, out] VARIANT_BOOL *pbool);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (3efaa425-272f-11d2-836f-0000f87a7782)\n]\ninterface IXTLRuntime : IXMLDOMNode\n{\n    [id(DISPID_XTLRUNTIME_UNIQUEID)] \n    HRESULT uniqueID(\n        [in]IXMLDOMNode *pNode, \n        [retval, out]LONG *pID);\n\n    [id(DISPID_XTLRUNTIME_DEPTH)]\n    HRESULT depth(\n        [in] IXMLDOMNode *pNode, \n        [retval, out]LONG * pDepth);\n\n    [id(DISPID_XTLRUNTIME_CHILDNUMBER)] \n    HRESULT childNumber(\n        [in]IXMLDOMNode *pNode, \n        [retval, out] LONG *pNumber);\n\n    [id(DISPID_XTLRUNTIME_ANCESTORCHILDNUMBER)]\n    HRESULT ancestorChildNumber(\n        [in]BSTR bstr, \n        [in]IXMLDOMNode *pNode, \n        [retval, out]LONG *pNumber);\n\n    [id(DISPID_XTLRUNTIME_ABSOLUTECHILDNUMBER)]\n    HRESULT absoluteChildNumber(\n        [in]IXMLDOMNode *pNode, \n        [retval, out]LONG *pNumber);\n\n    [id(DISPID_XTLRUNTIME_FORMATINDEX)]\n    HRESULT formatIndex(\n        [in] LONG lIndex,\n        [in] BSTR bstr, \n        [retval, out]BSTR *pbstr);\n\n    [id(DISPID_XTLRUNTIME_FORMATNUMBER)]\n    HRESULT formatNumber(\n        [in] double dblNumber, \n        [in] BSTR bstr, \n        [retval, out]BSTR *pbstr);\n\n    [id(DISPID_XTLRUNTIME_FORMATDATE)]\n    HRESULT formatDate(\n        [in] VARIANT var1, \n        [in] BSTR bstr, \n        [optional, in] VARIANT var2,\n        [retval, out]BSTR *pbstr);\n\n    [id(DISPID_XTLRUNTIME_FORMATTIME)]\n    HRESULT formatTime(\n        [in] VARIANT var1, \n        [in] BSTR bstr, \n        [optional, in] VARIANT var2,\n        [retval, out]BSTR *pbstr);\n\n}\n\n[\nlocal,\nobject,\nodl,\ndual,\noleautomation,\nuuid(310afa62-0575-11d2-9ca9-0060b0ec3d39),\npointer_default(unique)\n]\ninterface IDSOControl : IDispatch\n{\n\t[propget,id(DISPID_XMLDSO_DOCUMENT)]\n        HRESULT XMLDocument([out, retval] IXMLDOMDocument** ppDoc);\n\n\t[propput,id(DISPID_XMLDSO_DOCUMENT)]\n        HRESULT XMLDocument([in] IXMLDOMDocument* ppDoc);\n\n\t[propget,id(DISPID_XMLDSO_JAVADSOCOMPATIBLE)]\n        HRESULT JavaDSOCompatible([out, retval] BOOL* fJavaDSOCompatible);\n\n\t[propput,id(DISPID_XMLDSO_JAVADSOCOMPATIBLE)]\n        HRESULT JavaDSOCompatible([in]  BOOL fJavaDSOCompatible);\n\n\t[propget, id(DISPID_READYSTATE)]\n        HRESULT readyState([out, retval] long *state);\n}\n\n[\n    uuid(3efaa427-272f-11d2-836f-0000f87a7782)\n]\ndispinterface XMLDOMDocumentEvents \n{\n    properties:\n    methods:\n    [id (DISPID_XMLDOMEVENT_ONDATAAVAILABLE)]  \n    HRESULT ondataavailable();\n \n    [id (DISPID_XMLDOMEVENT_ONREADYSTATECHANGE)] \n    HRESULT onreadystatechange();\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF92-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXSLProcessor : IDispatch\n{\n    [propput, id(DISPID_XMLDOM_PROCESSOR_INPUT)]\n    HRESULT input([in] VARIANT var);\n\n    [propget, id(DISPID_XMLDOM_PROCESSOR_INPUT)]\n    HRESULT input([retval, out] VARIANT *var);\n\n    [propget, id(DISPID_XMLDOM_PROCESSOR_XSLTEMPLATE)]\n    HRESULT ownerTemplate([retval, out] IXSLTemplate **ppTemplate);\n\n    [id(DISPID_XMLDOM_PROCESSOR_SETSTARTMODE)]\n    HRESULT setStartMode(\n        [in] BSTR p, \n        [in, defaultvalue(\"\")] BSTR uri);\n\n    [propget, id(DISPID_XMLDOM_PROCESSOR_STARTMODE)]\n    HRESULT startMode([retval, out] BSTR *p);\n\n    [propget, id(DISPID_XMLDOM_PROCESSOR_STARTMODEURI)]\n    HRESULT startModeURI([retval, out] BSTR *uri);\n\n    [propput, id(DISPID_XMLDOM_PROCESSOR_OUTPUT)]\n    HRESULT output([in] VARIANT var);\n\n    [propget, id(DISPID_XMLDOM_PROCESSOR_OUTPUT)]\n    HRESULT output([retval, out] VARIANT *var);\n\n    [id(DISPID_XMLDOM_PROCESSOR_TRANSFORM)]\n    HRESULT transform(\n        [retval, out] VARIANT_BOOL *pbool);\n\n    [id(DISPID_XMLDOM_PROCESSOR_RESET)]\n    HRESULT reset();\n\n    [propget, id(DISPID_XMLDOM_PROCESSOR_READYSTATE)]\n    HRESULT readyState([retval, out] LONG *pstate);\n\n    [id(DISPID_XMLDOM_PROCESSOR_ADDPARAMETER)]\n    HRESULT addParameter(\n        [in] BSTR p, \n        [in] VARIANT var, \n        [in, defaultvalue(\"\")] BSTR uri);\n\n    [id(DISPID_XMLDOM_PROCESSOR_ADDOBJECT)]\n    HRESULT addObject(\n        [in] IDispatch* obj, \n        [in] BSTR uri);\n\n    [propget, id(DISPID_XMLDOM_PROCESSOR_STYLESHEET)]\n    HRESULT stylesheet([retval, out] IXMLDOMNode **node);\n} \n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF93-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXSLTemplate : IDispatch\n{\n    [propputref, id(DISPID_XMLDOM_TEMPLATE_STYLESHEET)]\n    HRESULT stylesheet([in] IXMLDOMNode *node);\n\n    [propget, id(DISPID_XMLDOM_TEMPLATE_STYLESHEET)]\n    HRESULT stylesheet([retval, out] IXMLDOMNode **node);\n\n    [id(DISPID_XMLDOM_TEMPLATE_CREATEPROCESSOR)]\n    HRESULT createProcessor(\n        [retval, out] IXSLProcessor **ppProcessor);\n} \n\n[\n    object,\n    uuid(ED8C108D-4349-11D2-91A4-00C04F7969E8),\n    odl,\n    dual,\n    oleautomation,\n    pointer_default(unique)\n]\ninterface IXMLHTTPRequest : IDispatch\n{\n    [id(1)]\n    HRESULT open([in] BSTR bstrMethod, [in] BSTR bstrUrl, [in, optional] VARIANT varAsync,\n                 [in,optional] VARIANT username, [in,optional] VARIANT password);\n\n    [id(2)]\n    HRESULT setRequestHeader([in] BSTR bstrHeader, [in] BSTR bstrValue);\n\n    [id(3)]\n    HRESULT getResponseHeader([in] BSTR bstrHeader, [out, retval] BSTR * value);\n\n    [id(4)]\n    HRESULT getAllResponseHeaders([out, retval] BSTR * pbstrHeaders);\n\n    [id(5)]\n    HRESULT send([in, optional] VARIANT body);\n\n    [id(6)]\n    HRESULT abort();\n\n    [propget, id(7)]\n    HRESULT status([out, retval] LONG *pStatus);\n\n    [propget, id(8)]\n    HRESULT statusText([out, retval] BSTR *pStatus);\n\n    [propget, id(9)]\n    HRESULT responseXML([out, retval] IDispatch **pBody);\n\n    [propget, id(10)]\n    HRESULT responseText([out, retval] BSTR *pBody);\n\n    [propget, id(11)]\n    HRESULT responseBody([out, retval] VARIANT *pBody);\n\n    [propget, id(12)]\n    HRESULT responseStream([out, retval] VARIANT *pBody);\n\n    [propget, id(13)]\n    HRESULT readyState([out, retval] LONG *pState);\n\n    [propput, id(14)]\n    HRESULT onreadystatechange([in] IDispatch *pReadyStateSink);\n}\n\n[\nobject,\ndual,\noleautomation,\nuuid(2e9196bf-13ba-4dd4-91ca-6c571f281495)\n]\ninterface IServerXMLHTTPRequest : IXMLHTTPRequest\n{\n    typedef enum _SERVERXMLHTTP_OPTION\n    {\n        SXH_OPTION_URL = -1,\n        SXH_OPTION_URL_CODEPAGE,\n        SXH_OPTION_ESCAPE_PERCENT_IN_URL,\n        SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS,\n        SXH_OPTION_SELECT_CLIENT_SSL_CERT\n    } SERVERXMLHTTP_OPTION;\n\n    [id(15)]\n    HRESULT setTimeouts(\n        [in] long resolveTimeout,\n        [in] long connectTimeout,\n        [in] long sendTimeout,\n        [in] long receiveTimeout);\n\n    [id(16)]\n    HRESULT waitForResponse(\n        [in, optional] VARIANT timeoutInSeconds,\n        [out, retval] VARIANT_BOOL * isSuccessful);\n\n    [id(17)]\n    HRESULT getOption(\n        [in] SERVERXMLHTTP_OPTION option,\n        [out, retval] VARIANT * value);\n\n    [id(18)]\n    HRESULT setOption(\n        [in] SERVERXMLHTTP_OPTION option,\n        [in] VARIANT value);\n}\n\n[\nobject,\ndual,\noleautomation,\nuuid(2e01311b-c322-4b0a-bd77-b90cfdc8dce7)\n]\ninterface IServerXMLHTTPRequest2 : IServerXMLHTTPRequest\n{\n    typedef enum _SXH_PROXY_SETTING\n    {\n        SXH_PROXY_SET_DEFAULT = 0,\n        SXH_PROXY_SET_PRECONFIG = 0,\n        SXH_PROXY_SET_DIRECT,\n        SXH_PROXY_SET_PROXY\n    } SXH_PROXY_SETTING;\n\n    [id(19)]\n    HRESULT setProxy(\n        [in] SXH_PROXY_SETTING proxySetting,\n        [in, optional] VARIANT varProxyServer,\n        [in, optional] VARIANT varBypassList);\n\n    [id(20)]\n    HRESULT setProxyCredentials(\n        [in] BSTR bstrUserName,\n        [in] BSTR bstrPassword);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (3efaa426-272f-11d2-836f-0000f87a7782)\n]\ninterface IXMLDOMParseError : IDispatch\n{\n    [propget, id(DISPID_VALUE)]\n    HRESULT errorCode([retval, out] LONG *errCode);\n\n    [propget, id(DISPID_DOM_ERROR_URL)]\n    HRESULT url([retval, out] BSTR *p);\n\n    [propget, id(DISPID_DOM_ERROR_REASON)]\n    HRESULT reason([retval, out] BSTR *p);\n\n    [propget, id(DISPID_DOM_ERROR_SRCTEXT)]\n    HRESULT srcText([retval, out] BSTR *p);\n\n    [propget, id(DISPID_DOM_ERROR_LINE)]\n    HRESULT line([retval, out] LONG *lineNo);\n\n    [propget, id(DISPID_DOM_ERROR_LINEPOS)]\n    HRESULT linepos([retval, out] LONG * linePos);\n\n    [propget, id(DISPID_DOM_ERROR_FILEPOS)]\n    HRESULT filepos([retval, out] LONG * filePos);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (3efaa428-272f-11d2-836f-0000f87a7782)\n]\ninterface IXMLDOMParseError2 : IXMLDOMParseError\n{\n    [propget, id(DISPID_DOM_ERROR2_ERRORXPATH)]\n    HRESULT errorXPath([retval, out] BSTR *xpathexpr);\n\n    [propget, id(DISPID_DOM_ERROR2_ALLERRORS)]\n    HRESULT allErrors([retval, out] IXMLDOMParseErrorCollection **allErrors);\n\n    [id(DISPID_DOM_ERROR2_ERRORPARAMETERS)]\n    HRESULT errorParameters(\n        [in] long index,\n        [retval, out] BSTR *param);\n\n    [propget, id(DISPID_DOM_ERROR2_ERRORPARAMETERSCOUNT)]\n    HRESULT errorParametersCount([retval, out] long *count);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (3efaa429-272f-11d2-836f-0000f87a7782)\n]\ninterface IXMLDOMParseErrorCollection : IDispatch\n{\n    [propget, id(DISPID_VALUE)]\n    HRESULT item(\n        [in] long index,\n        [retval, out] IXMLDOMParseError2 **error);\n\n    [propget, id(DISPID_DOM_ERRORCOLLECTION_LENGTH)]\n    HRESULT length( [retval, out] long *length);\n\n    [propget, id(DISPID_DOM_ERRORCOLLECTION_NEXT)]\n    HRESULT next( [retval, out] IXMLDOMParseError2 **error);\n\n    [id(DISPID_DOM_ERRORCOLLECTION_RESET)]\n    HRESULT reset();\n\n    [propget, hidden, restricted, id(DISPID_NEWENUM)]\n    HRESULT _newEnum( [retval, out] IUnknown **ppunk);\n}\n\n[\n    uuid(f5078f1b-c551-11d3-89b9-0000f81fe221)\n]\ncoclass DOMDocument26\n{\n    [default] interface IXMLDOMDocument2;\n    [default, source] dispinterface XMLDOMDocumentEvents;\n}\n\n[\n    helpstring(\"XML DOM Document 3.0\"),\n    progid(\"Msxml2.DOMDocument.3.0\"),\n    vi_progid(\"Msxml2.DOMDocument\"),\n    threading(both),\n    uuid(f5078f32-c551-11d3-89b9-0000f81fe221)\n]\ncoclass DOMDocument30\n{\n    [default] interface IXMLDOMDocument2;\n    [default, source] dispinterface XMLDOMDocumentEvents;\n}\n\n[\n    uuid(88d969c0-f192-11d4-a65f-0040963251e5)\n]\ncoclass DOMDocument40\n{\n    [default] interface IXMLDOMDocument2;\n    [default, source] dispinterface XMLDOMDocumentEvents;\n}\n\n[\n    uuid(88d96a05-f192-11d4-a65f-0040963251e5)\n]\ncoclass DOMDocument60\n{\n    [default] interface IXMLDOMDocument3;\n    [default, source] dispinterface XMLDOMDocumentEvents;\n}\n\n[\n    helpstring(\"XML DOM Document\"),\n    progid(\"Msxml2.DOMDocument\"),\n    vi_progid(\"Msxml2.DOMDocument\"),\n    threading(both),\n    uuid(f6d90f11-9c73-11d3-b32e-00c04f990bb4)\n]\ncoclass DOMDocument\n{\n    [default] interface IXMLDOMDocument2;\n    [default, source] dispinterface XMLDOMDocumentEvents;\n}\n\n[\n    uuid(f5078f1c-c551-11d3-89b9-0000f81fe221)\n]\ncoclass FreeThreadedDOMDocument26\n{\n    [default] interface IXMLDOMDocument2;\n    [default, source] dispinterface XMLDOMDocumentEvents;\n}\n\n[\n    helpstring(\"Free threaded XML DOM Document 3.0\"),\n    progid(\"Msxml2.FreeThreadedDOMDocument.3.0\"),\n    vi_progid(\"Msxml2.FreeThreadedDOMDocument\"),\n    threading(both),\n    uuid(f5078f33-c551-11d3-89b9-0000f81fe221)\n]\ncoclass FreeThreadedDOMDocument30\n{\n    [default] interface IXMLDOMDocument2;\n    [default, source] dispinterface XMLDOMDocumentEvents;\n}\n\n[\n    uuid(88d969c1-f192-11d4-a65f-0040963251e5)\n]\ncoclass FreeThreadedDOMDocument40\n{\n    [default] interface IXMLDOMDocument2;\n    [default, source] dispinterface XMLDOMDocumentEvents;\n}\n\n[\n    uuid(88d96a06-f192-11d4-a65f-0040963251e5),\n]\ncoclass FreeThreadedDOMDocument60\n{\n    [default] interface IXMLDOMDocument3;\n    [default, source] dispinterface XMLDOMDocumentEvents;\n}\n\n[\n    helpstring(\"Free threaded XML DOM Document\"),\n    progid(\"Msxml2.FreeThreadedDOMDocument\"),\n    vi_progid(\"Msxml2.FreeThreadedDOMDocument\"),\n    threading(both),\n    uuid(f6d90f12-9c73-11d3-b32e-00c04f990bb4)\n]\ncoclass FreeThreadedDOMDocument\n{\n    [default] interface IXMLDOMDocument2;\n    [default, source] dispinterface XMLDOMDocumentEvents;\n}\n\n[\n    uuid(f5078f1e-c551-11d3-89b9-0000f81fe221)\n]\ncoclass XMLHTTP26\n{\n    [default] interface IXMLHTTPRequest;\n}\n\n[\n    helpstring(\"XML HTTP 3.0\"),\n    progid(\"Msxml2.XMLHTTP.3.0\"),\n    vi_progid(\"Msxml2.XMLHTTP\"),\n    threading(apartment),\n    uuid(f5078f35-c551-11d3-89b9-0000f81fe221)\n]\ncoclass XMLHTTP30\n{\n    [default] interface IXMLHTTPRequest;\n}\n\n[\n    uuid(88d969c5-f192-11d4-a65f-0040963251e5)\n]\ncoclass XMLHTTP40\n{\n    [default] interface IXMLHTTPRequest;\n}\n\n[\n    uuid(88d96a0a-f192-11d4-a65f-0040963251e5)\n]\ncoclass XMLHTTP60\n{\n    [default] interface IXMLHTTPRequest;\n}\n\n[\n    helpstring(\"XML HTTP\"),\n    progid(\"Msxml2.XMLHTTP\"),\n    vi_progid(\"Msxml2.XMLHTTP\"),\n    threading(apartment),\n    uuid(f6d90f16-9c73-11d3-b32e-00c04f990bb4)\n]\ncoclass XMLHTTP\n{\n    [default] interface IXMLHTTPRequest;\n}\n\n[\n    helpstring(\"Server XML HTTP 3.0\"),\n    progid(\"Msxml2.ServerXMLHTTP.3.0\"),\n    vi_progid(\"Msxml2.ServerXMLHTTP\"),\n    threading(apartment),\n    uuid(afb40ffd-b609-40a3-9828-f88bbe11e4e3)\n]\ncoclass ServerXMLHTTP30\n{\n    [default] interface IServerXMLHTTPRequest;\n}\n\n[\n    uuid(88d969c6-f192-11d4-a65f-0040963251e5)\n]\ncoclass ServerXMLHTTP40\n{\n    [default] interface IServerXMLHTTPRequest2;\n}\n\n[\n    uuid(88d96a0b-f192-11d4-a65f-0040963251e5)\n]\ncoclass ServerXMLHTTP60\n{\n    [default] interface IServerXMLHTTPRequest2;\n}\n\n[\n    helpstring(\"Server XML HTTP\"),\n    progid(\"Msxml2.ServerXMLHTTP\"),\n    vi_progid(\"Msxml2.ServerXMLHTTP\"),\n    threading(apartment),\n    uuid(afba6b42-5692-48ea-8141-dc517dcf0ef1)\n]\ncoclass ServerXMLHTTP\n{\n    [default] interface IServerXMLHTTPRequest;\n}\n\n[\n    uuid(f5078f1d-c551-11d3-89b9-0000f81fe221)\n]\ncoclass XMLSchemaCache26\n{\n    [default] interface IXMLDOMSchemaCollection;\n}\n\n[\n    helpstring(\"XML Schema Cache 3.0\"),\n    progid(\"Msxml2.XMLSchemaCache.3.0\"),\n    vi_progid(\"Msxml2.XMLSchemaCache\"),\n    threading(both),\n    uuid(f5078f34-c551-11d3-89b9-0000f81fe221)\n]\ncoclass XMLSchemaCache30\n{\n    [default] interface IXMLDOMSchemaCollection;\n}\n\n[\n    uuid(88d969c2-f192-11d4-a65f-0040963251e5)\n]\ncoclass XMLSchemaCache40\n{\n    [default] interface IXMLDOMSchemaCollection2;\n}\n\n[\n    uuid(88d96a07-f192-11d4-a65f-0040963251e5)\n]\ncoclass XMLSchemaCache60\n{\n    [default] interface IXMLDOMSchemaCollection2;\n}\n\n[\n    helpstring(\"XML Schema Cache\"),\n    progid(\"Msxml2.XMLSchemaCache\"),\n    vi_progid(\"Msxml2.XMLSchemaCache\"),\n    threading(both),\n    uuid(373984c9-b845-449b-91e7-45ac83036ade)\n]\ncoclass XMLSchemaCache\n{\n    [default] interface IXMLDOMSchemaCollection;\n}\n\n[\n    uuid(f5078f21-c551-11d3-89b9-0000f81fe221)\n]\ncoclass XSLTemplate26\n{\n    [default] interface IXSLTemplate;\n}\n\n[\n    helpstring(\"XSL Template 3.0\"),\n    progid(\"Msxml2.XSLTemplate.3.0\"),\n    vi_progid(\"Msxml2.XSLTemplate\"),\n    threading(both),\n    uuid(f5078f36-c551-11d3-89b9-0000f81fe221)\n]\ncoclass XSLTemplate30\n{\n    [default] interface IXSLTemplate;\n}\n\n[\n    uuid(88d969c3-f192-11d4-a65f-0040963251e5)\n]\ncoclass XSLTemplate40\n{\n    [default] interface IXSLTemplate;\n}\n\n[\n    uuid(88d96a08-f192-11d4-a65f-0040963251e5)\n]\ncoclass XSLTemplate60\n{\n    [default] interface IXSLTemplate;\n}\n\n[\n    helpstring(\"XSL Template\"),\n    progid(\"Msxml2.XSLTemplate\"),\n    vi_progid(\"Msxml2.XSLTemplate\"),\n    threading(both),\n    uuid(2933BF94-7B36-11d2-B20E-00C04F983E60)\n]\ncoclass XSLTemplate\n{\n    [default] interface IXSLTemplate;\n}\n\n/*\n * Sax Interfaces\n */\n[\n    object,\n    local,\n    uuid(f078abe1-45d2-4832-91ea-4466ce2f25c9)\n]\ninterface ISAXAttributes : IUnknown\n{\n    HRESULT getLength(\n        [out, retval] int *length);\n\n    HRESULT getURI(\n        [in] int nIndex,\n        [out] const WCHAR **pUrl,\n        [out] int *pUriSize);\n\n    HRESULT getLocalName(\n        [in] int nIndex,\n        [out] const WCHAR **pLocalName,\n        [out] int *pLocalNameLength);\n\n    HRESULT getQName(\n        [in] int nIndex,\n        [out] const WCHAR **pQName,\n        [out] int *pQNameLength);\n\n    HRESULT getName(\n        [in] int nIndex,\n        [out] const WCHAR **pUri,\n        [out] int * pUriLength,\n        [out] const WCHAR ** pLocalName,\n        [out] int * pLocalNameSize,\n        [out] const WCHAR ** pQName,\n        [out] int * pQNameLength);\n\n    HRESULT getIndexFromName(\n        [in] const WCHAR * pUri,\n        [in] int cUriLength,\n        [in] const WCHAR * pLocalName,\n        [in] int cocalNameLength,\n        [out, retval] int * index);\n\n    HRESULT getIndexFromQName(\n        [in] const WCHAR * pQName,\n        [in] int nQNameLength,\n        [out, retval] int * index);\n\n    HRESULT getType(\n        [in] int nIndex,\n        [out] const WCHAR ** pType,\n        [out] int * pTypeLength);\n\n    HRESULT getTypeFromName(\n        [in] const WCHAR * pUri,\n        [in] int nUri,\n        [in] const WCHAR * pLocalName,\n        [in] int nLocalName,\n        [out] const WCHAR ** pType,\n        [out] int * nType);\n\n    HRESULT getTypeFromQName(\n        [in] const WCHAR * pQName,\n        [in] int nQName,\n        [out] const WCHAR ** pType,\n        [out] int * nType);\n\n    HRESULT getValue(\n        [in] int nIndex,\n        [out] const WCHAR ** pValue,\n        [out] int * nValue);\n\n    HRESULT getValueFromName(\n        [in] const WCHAR * pUri,\n        [in] int nUri,\n        [in] const WCHAR * pLocalName,\n        [in] int nLocalName,\n        [out] const WCHAR ** pValue,\n        [out] int * nValue);\n\n    HRESULT getValueFromQName(\n        [in] const WCHAR * pQName,\n        [in] int nQName,\n        [out] const WCHAR ** pValue,\n        [out] int * nValue);\n}\n\n[\n    object,\n    local,\n    uuid(1545cdfa-9e4e-4497-a8a4-2bf7d0112c44)\n]\ninterface ISAXContentHandler : IUnknown\n{\n    HRESULT putDocumentLocator(\n        [in] ISAXLocator * pLocator);\n\n    HRESULT startDocument();\n\n    HRESULT endDocument();\n\n    HRESULT startPrefixMapping(\n        [in] const WCHAR * pPrefix,\n        [in] int nPrefix,\n        [in] const WCHAR * pUri,\n        [in] int nUri);\n\n    HRESULT endPrefixMapping(\n        [in] const WCHAR * pPrefix,\n        [in] int nPrefix);\n\n    HRESULT startElement(\n        [in] const WCHAR * pNamespaceUri,\n        [in] int nNamespaceUri,\n        [in] const WCHAR * pLocalName,\n        [in] int nLocalName,\n        [in] const WCHAR * pQName,\n        [in] int nQName,\n        [in] ISAXAttributes * pAttr);\n\n    HRESULT endElement(\n        [in] const WCHAR * pNamespaceUri,\n        [in] int nNamespaceUri,\n        [in] const WCHAR * pLocalName,\n        [in] int nLocalName,\n        [in] const WCHAR * pQName,\n        [in] int nQName);\n\n    HRESULT characters(\n        [in] const WCHAR * pChars,\n        [in] int nChars);\n\n    HRESULT ignorableWhitespace(\n        [in] const WCHAR * pChars,\n        [in] int nChars);\n\n    HRESULT processingInstruction(\n        [in] const WCHAR * pTarget,\n        [in] int nTarget,\n        [in] const WCHAR * pData,\n        [in] int nData);\n\n    HRESULT skippedEntity(\n        [in] const WCHAR * pName,\n        [in] int nName);\n}\n\n[\n    object,\n    local,\n    uuid(862629ac-771a-47b2-8337-4e6843c1be90)\n]\ninterface ISAXDeclHandler : IUnknown\n{\n    HRESULT elementDecl(\n        [in] const WCHAR * pName,\n        [in] int nName,\n        [in] const WCHAR * pModel,\n        [in] int nModel);\n\n    HRESULT attributeDecl(\n        [in] const WCHAR * pElementName,\n        [in] int nElementName,\n        [in] const WCHAR * pAttributeName,\n        [in] int nAttributeName,\n        [in] const WCHAR * pType,\n        [in] int nType,\n        [in] const WCHAR * pValueDefault,\n        [in] int nValueDefault,\n        [in] const WCHAR * pValue,\n        [in] int nValue);\n\n    HRESULT internalEntityDecl(\n        [in] const WCHAR * pName,\n        [in] int nName,\n        [in] const WCHAR * pValue,\n        [in] int nValue);\n\n    HRESULT externalEntityDecl(\n        [in] const WCHAR * pName,\n        [in] int nName,\n        [in] const WCHAR * pPublicId,\n        [in] int nPublicId,\n        [in] const WCHAR * pSystemId,\n        [in] int nSystemId);\n}\n\n[\n    object,\n    local,\n    uuid(e15c1baf-afb3-4d60-8c36-19a8c45defed)\n]\ninterface ISAXDTDHandler : IUnknown\n{\n    HRESULT notationDecl(\n        [in] const WCHAR * pName,\n        [in] int nName,\n        [in] const WCHAR * pPublicId,\n        [in] int nPublicId,\n        [in] const WCHAR * pSystemId,\n        [in] int nSystemId);\n\n    HRESULT unparsedEntityDecl(\n        [in] const WCHAR * pName,\n        [in] int nName,\n        [in] const WCHAR * pPublicId,\n        [in] int nPublicId,\n        [in] const WCHAR * pSystemId,\n        [in] int nSystemId,\n        [in] const WCHAR * pNotationName,\n        [in] int nNotationName);\n}\n\n[\n    object,\n    local,\n    uuid(99bca7bd-e8c4-4d5f-a0cf-6d907901ff07),\n]\ninterface ISAXEntityResolver : IUnknown\n{\n    HRESULT resolveEntity(\n        [in] const WCHAR * pPublicId,\n        [in] const WCHAR * pSystemId,\n        [out, retval] VARIANT * ret);\n}\n\n[\n    object,\n    local,\n    uuid(a60511c4-ccf5-479e-98a3-dc8dc545b7d0)\n]\ninterface ISAXErrorHandler : IUnknown\n{\n    HRESULT error(\n        [in] ISAXLocator * pLocator,\n        [in] const WCHAR * pErrorMessage,\n        [in] HRESULT hrErrorCode);\n\n    HRESULT fatalError(\n        [in] ISAXLocator * pLocator,\n        [in] const WCHAR * pErrorMessage,\n        [in] HRESULT hrErrorCode);\n\n    HRESULT ignorableWarning(\n        [in] ISAXLocator * pLocator,\n        [in] const WCHAR * pErrorMessage,\n        [in] HRESULT hrErrorCode);\n}\n\n[\n    object,\n    local,\n    uuid(7f85d5f5-47a8-4497-bda5-84ba04819ea6)\n]\ninterface ISAXLexicalHandler : IUnknown\n{\n    HRESULT startDTD(\n        [in] const WCHAR * pName,\n        [in] int nName,\n        [in] const WCHAR * pPublicId,\n        [in] int nPublicId,\n        [in] const WCHAR * pSystemId,\n        [in] int nSystemId);\n\n    HRESULT endDTD();\n\n    HRESULT startEntity(\n        [in] const WCHAR * pName,\n        [in] int nName);\n\n    HRESULT endEntity(\n        [in] const WCHAR * pName,\n        [in] int nName);\n\n    HRESULT startCDATA();\n\n    HRESULT endCDATA();\n\n    HRESULT comment(\n        [in] const WCHAR * pChars,\n        [in] int nChars);\n}\n\n[\n    object,\n    local,\n    uuid(9b7e472a-0de4-4640-bff3-84d38a051c31)\n]\ninterface ISAXLocator : IUnknown\n{\n    HRESULT getColumnNumber(\n        [out, retval] int * nColumn);\n\n    HRESULT getLineNumber(\n        [out, retval] int * nLine);\n\n    HRESULT getPublicId(\n        [out, retval] const WCHAR ** publicId);\n\n    HRESULT getSystemId(\n        [out, retval] const WCHAR ** systemId);\n}\n\n[\n    local,\n    object,\n    uuid(70409222-ca09-4475-acb8-40312fe8d145)\n]\ninterface ISAXXMLFilter : ISAXXMLReader\n{\n    HRESULT getParent(\n        [out, retval] ISAXXMLReader ** pReader);\n    HRESULT putParent(\n        [in] ISAXXMLReader * reader);\n}\n\n[\nlocal,\nobject,\nuuid (a4f96ed0-f829-476e-81c0-cdc7bd2a0802)\n]\ninterface ISAXXMLReader : IUnknown\n{\n    HRESULT getFeature(\n        [in] const WCHAR * pFeature,\n        [out, retval] VARIANT_BOOL * pValue);\n    HRESULT putFeature(\n        [in] const WCHAR * pFeature,\n        [in] VARIANT_BOOL vfValue);\n\n    HRESULT getProperty(\n        [in] const WCHAR * pProp,\n        [out, retval] VARIANT * pValue);\n    HRESULT putProperty(\n        [in] const WCHAR * pProp,\n        [in] VARIANT value);\n\n    HRESULT getEntityResolver(\n        [out, retval] ISAXEntityResolver ** ppEntityResolver);\n    HRESULT putEntityResolver(\n        [in] ISAXEntityResolver * pEntityResolver);\n\n    HRESULT getContentHandler(\n        [out, retval] ISAXContentHandler ** pContentHandler);\n    HRESULT putContentHandler(\n        [in] ISAXContentHandler * contentHandler);\n\n    HRESULT getDTDHandler(\n        [out, retval] ISAXDTDHandler ** pDTDHandler);\n    HRESULT putDTDHandler(\n        [in] ISAXDTDHandler * pDTDHandler);\n\n    HRESULT getErrorHandler(\n        [out, retval] ISAXErrorHandler ** pErrorHandler);\n    HRESULT putErrorHandler(\n        [in] ISAXErrorHandler * errorHandler);\n\n    HRESULT getBaseURL(\n        [out, retval] const WCHAR ** pBaseUrl);\n    HRESULT putBaseURL(\n        [in] const WCHAR * pBaseUrl);\n\n    HRESULT getSecureBaseURL(\n        [out, retval] const WCHAR ** pSecureBaseUrl);\n    HRESULT putSecureBaseURL(\n        [in] const WCHAR * secureBaseUrl);\n\n    HRESULT parse(\n        [in] VARIANT varInput);\n    HRESULT parseURL(\n        [in] const WCHAR * url);\n}\n\n[\n    object,\n    dual,\n    oleautomation,\n    uuid(10dc0586-132b-4cac-8bb3-db00ac8b7ee0)\n]\ninterface IVBSAXAttributes : IDispatch\n{\n    [propget, id(DISPID_SAX_ATTRIBUTES_LENGTH)]\n    HRESULT length( [out, retval] int * nLength);\n\n    [id(DISPID_SAX_ATTRIBUTES_GETURI)]\n    HRESULT getURI( [in] int nIndex, [out, retval] BSTR * uri);\n\n    [id(DISPID_SAX_ATTRIBUTES_GETLOCALNAME)]\n    HRESULT getLocalName( [in] int nIndex, [out, retval] BSTR * localName);\n\n    [id(DISPID_SAX_ATTRIBUTES_GETQNAME)]\n    HRESULT getQName( [in] int nIndex, [out, retval] BSTR * QName);\n\n    [id(DISPID_SAX_ATTRIBUTES_GETINDEXFROMNAME)]\n    HRESULT getIndexFromName( [in] BSTR uri,\n                              [in] BSTR localName, [out, retval] int * nIndex);\n\n    [id(DISPID_SAX_ATTRIBUTES_GETINDEXFROMQNAME)]\n    HRESULT getIndexFromQName( [in] BSTR QName, [out, retval] int * nIndex);\n\n    [id(DISPID_SAX_ATTRIBUTES_GETTYPE)]\n    HRESULT getType( [in] int nIndex, [out, retval] BSTR * type);\n\n    [id(DISPID_SAX_ATTRIBUTES_GETTYPEFROMNAME)]\n    HRESULT getTypeFromName( [in] BSTR uri, [in] BSTR localName,\n                             [out, retval] BSTR * type);\n\n    [id(DISPID_SAX_ATTRIBUTES_GETTYPEFROMQNAME)]\n    HRESULT getTypeFromQName( [in] BSTR QName, [out, retval] BSTR * type);\n\n    [id(DISPID_SAX_ATTRIBUTES_GETVALUE)]\n    HRESULT getValue( [in] int nIndex, [out, retval] BSTR * value);\n\n    [id(DISPID_SAX_ATTRIBUTES_GETVALUEFROMNAME)]\n    HRESULT getValueFromName( [in] BSTR uri,\n                              [in] BSTR localName,\n                              [out, retval] BSTR * value);\n\n    [id(DISPID_SAX_ATTRIBUTES_GETVALUEFROMQNAME)]\n    HRESULT getValueFromQName( [in] BSTR QName, [out, retval] BSTR * value);\n}\n\n[\n    object,\n    dual,\n    oleautomation,\n    uuid(2ed7290a-4dd5-4b46-bb26-4e4155e77faa)\n]\ninterface IVBSAXContentHandler : IDispatch\n{\n    [propputref, id(DISPID_SAX_CONTENTHANDLER_DOCUMENTLOCATOR)]\n    HRESULT documentLocator( [in] IVBSAXLocator * oLocator);\n\n    [id(DISPID_SAX_CONTENTHANDLER_STARTDOCUMENT)]\n    HRESULT startDocument();\n\n    [id(DISPID_SAX_CONTENTHANDLER_ENDDOCUMENT)]\n    HRESULT endDocument();\n\n    [id(DISPID_SAX_CONTENTHANDLER_STARTPREFIXMAPPING)]\n    HRESULT startPrefixMapping( [in, out] BSTR * prefix, [in, out] BSTR * uri);\n\n    [id(DISPID_SAX_CONTENTHANDLER_ENDPREFIXMAPPING)]\n    HRESULT endPrefixMapping( [in, out] BSTR * prefix);\n\n    [id(DISPID_SAX_CONTENTHANDLER_STARTELEMENT)]\n    HRESULT startElement( [in, out] BSTR * namespaceURI,\n                          [in, out] BSTR * localName,\n                          [in, out] BSTR * QName,\n                          [in] IVBSAXAttributes * oAttributes);\n\n    [id(DISPID_SAX_CONTENTHANDLER_ENDELEMENT)]\n    HRESULT endElement( [in, out] BSTR * namespaceURI,\n                        [in, out] BSTR * localName, [in, out] BSTR * strQName);\n\n    [id(DISPID_SAX_CONTENTHANDLER_CHARACTERS)]\n    HRESULT characters( [in, out] BSTR * chars);\n\n    [id(DISPID_SAX_CONTENTHANDLER_IGNORABLEWHITESPACE)]\n    HRESULT ignorableWhitespace( [in, out] BSTR * chars);\n\n    [id(DISPID_SAX_CONTENTHANDLER_PROCESSINGINSTRUCTION)]\n    HRESULT processingInstruction( [in, out] BSTR * target,\n                                   [in, out] BSTR * data);\n\n    [id(DISPID_SAX_CONTENTHANDLER_SKIPPEDENTITY)]\n    HRESULT skippedEntity( [in, out] BSTR * name);\n}\n\n[\n    object,\n    dual,\n    oleautomation,\n    uuid(e8917260-7579-4be1-b5dd-7afbfa6f077b)\n]\ninterface IVBSAXDeclHandler : IDispatch\n{\n    [id(DISPID_SAX_DECLHANDLER_ELEMENTDECL)]\n    HRESULT elementDecl(\n        [in, out] BSTR * name,\n        [in, out] BSTR * model);\n\n    [id(DISPID_SAX_DECLHANDLER_ATTRIBUTEDECL)]\n    HRESULT attributeDecl(\n        [in, out] BSTR * elementName,\n        [in, out] BSTR * attributeName,\n        [in, out] BSTR * type,\n        [in, out] BSTR * valueDefault,\n        [in, out] BSTR * value);\n\n    [id(DISPID_SAX_DECLHANDLER_INTERNALENTITYDECL)]\n    HRESULT internalEntityDecl(\n        [in, out] BSTR * name,\n        [in, out] BSTR * value);\n\n    [id(DISPID_SAX_DECLHANDLER_EXTERNALENTITYDECL)]\n    HRESULT externalEntityDecl(\n        [in, out] BSTR * name,\n        [in, out] BSTR * publicId,\n        [in, out] BSTR * systemId);\n}\n\n[\n    object,\n    dual,\n    oleautomation,\n    uuid(24fb3297-302d-4620-ba39-3a732d850558)\n]\ninterface IVBSAXDTDHandler : IDispatch\n{\n    [id(DISPID_SAX_DTDHANDLER_NOTATIONDECL)]\n    HRESULT notationDecl(\n        [in, out] BSTR * name,\n        [in, out] BSTR * publicId,\n        [in, out] BSTR * systemId);\n\n    [id(DISPID_SAX_DTDHANDLER_UNPARSEDENTITYDECL)]\n    HRESULT unparsedEntityDecl(\n        [in, out] BSTR * name,\n        [in, out] BSTR * publicId,\n        [in, out] BSTR * systemId,\n        [in, out] BSTR * notationName);\n}\n\n[\n    object,\n    dual,\n    oleautomation,\n    uuid(0c05d096-f45b-4aca-ad1a-aa0bc25518dc)\n]\ninterface IVBSAXEntityResolver : IDispatch\n{\n    [id(DISPID_SAX_ENTITYRESOLVER_RESOLVEENTITY)]\n    HRESULT resolveEntity(\n        [in, out] BSTR * publicId,\n        [in, out] BSTR * systemId,\n        [out, retval] VARIANT * ret);\n}\n\n[\n    object,\n    dual,\n    oleautomation,\n    uuid(d963d3fe-173c-4862-9095-b92f66995f52)\n]\ninterface IVBSAXErrorHandler : IDispatch\n{\n    [id(DISPID_SAX_ERRORHANDLER_ERROR)]\n    HRESULT error(\n            [in] IVBSAXLocator * locator,\n\t    [in, out] BSTR * errorMessage,\n            [in] LONG errorCode);\n\n    [id(DISPID_SAX_ERRORHANDLER_FATALERROR)]\n    HRESULT fatalError(\n\t    [in] IVBSAXLocator * locator,\n\t    [in, out] BSTR * errorMessage,\n            [in] LONG errorCode);\n\n    [id(DISPID_SAX_ERRORHANDLER_IGNORABLEWARNING)]\n    HRESULT ignorableWarning(\n\t    [in] IVBSAXLocator * locator,\n\t    [in, out] BSTR * errorMessage,\n            [in] LONG errorCode);\n}\n\n[\n    object,\n    dual,\n    oleautomation,\n    uuid(032aac35-8c0e-4d9d-979f-e3b702935576)\n]\ninterface IVBSAXLexicalHandler : IDispatch\n{\n    [id(DISPID_SAX_LEXICALHANDLER_STARTDTD)]\n    HRESULT startDTD(\n        [in, out] BSTR * name,\n        [in, out] BSTR * publicId,\n        [in, out] BSTR * systemId);\n    [id(DISPID_SAX_LEXICALHANDLER_ENDDTD)]\n    HRESULT endDTD();\n\n    [id(DISPID_SAX_LEXICALHANDLER_STARTENTITY)]\n    HRESULT startEntity([in, out] BSTR * name);\n    [id(DISPID_SAX_LEXICALHANDLER_ENDENTITY)]\n    HRESULT endEntity([in, out] BSTR * name);\n\n    [id(DISPID_SAX_LEXICALHANDLER_STARTCDATA)]\n    HRESULT startCDATA();\n    [id(DISPID_SAX_LEXICALHANDLER_ENDCDATA)]\n    HRESULT endCDATA();\n\n    [id(DISPID_SAX_LEXICALHANDLER_COMMENT)]\n    HRESULT comment( [in, out] BSTR * chars);\n}\n\n[\n    object,\n    dual,\n    oleautomation,\n    uuid(796e7ac5-5aa2-4eff-acad-3faaf01a3288)\n]\ninterface IVBSAXLocator : IDispatch\n{\n    [propget, id(DISPID_SAX_LOCATOR_COLUMNNUMBER)]\n    HRESULT columnNumber( [out, retval] int * column);\n\n    [propget, id(DISPID_SAX_LOCATOR_LINENUMBER)]\n    HRESULT lineNumber( [out, retval] int * line);\n\n    [propget, id(DISPID_SAX_LOCATOR_PUBLICID)]\n    HRESULT publicId( [out, retval] BSTR * publicId);\n\n    [propget, id(DISPID_SAX_LOCATOR_SYSTEMID)]\n    HRESULT systemId( [out, retval] BSTR * systemId);\n}\n\n[\n    object,\n    dual,\n    oleautomation,\n    uuid(1299eb1b-5b88-433e-82de-82ca75ad4e04)\n]\ninterface IVBSAXXMLFilter : IDispatch\n{\n    [propget, id(DISPID_SAX_XMLFILTER_PARENT)]\n    HRESULT parent( [out, retval] IVBSAXXMLReader ** reader);\n    [propputref, id(DISPID_SAX_XMLFILTER_PARENT)]\n    HRESULT parent( [in] IVBSAXXMLReader * reader);\n\n}\n\n[\n    dual,\n    oleautomation,\n    object,\n    uuid (8c033caa-6cd6-4f73-b728-4531af74945f)\n]\ninterface IVBSAXXMLReader : IDispatch\n{\n    [id(DISPID_SAX_XMLREADER_GETFEATURE)]\n    HRESULT getFeature( [in] BSTR pFeature,\n                        [out, retval] VARIANT_BOOL * pValue);\n    [id(DISPID_SAX_XMLREADER_PUTFEATURE)]\n    HRESULT putFeature( [in] BSTR pFeature,\n                        [in] VARIANT_BOOL vfValue);\n\n    [id(DISPID_SAX_XMLREADER_GETPROPERTY)]\n    HRESULT getProperty( [in] BSTR pProp,\n                         [out, retval] VARIANT * pValue);\n    [id(DISPID_SAX_XMLREADER_PUTPROPERTY)]\n    HRESULT putProperty( [in] BSTR pProp, [in] VARIANT value);\n\n    [propget, id(DISPID_SAX_XMLREADER_ENTITYRESOLVER)]\n    HRESULT entityResolver(\n                    [out, retval] IVBSAXEntityResolver ** ppEntityResolver);\n    [propputref, id(DISPID_SAX_XMLREADER_ENTITYRESOLVER)]\n    HRESULT entityResolver( [in] IVBSAXEntityResolver * pEntityResolver);\n\n    [propget, id(DISPID_SAX_XMLREADER_CONTENTHANDLER)]\n    HRESULT contentHandler(\n                        [out, retval] IVBSAXContentHandler ** pContentHandler);\n    [propputref, id(DISPID_SAX_XMLREADER_CONTENTHANDLER)]\n    HRESULT contentHandler([in] IVBSAXContentHandler * contentHandler);\n\n    [propget, id(DISPID_SAX_XMLREADER_DTDHANDLER)]\n    HRESULT dtdHandler([out, retval] IVBSAXDTDHandler ** pDTDHandler);\n    [propputref, id(DISPID_SAX_XMLREADER_DTDHANDLER)]\n    HRESULT dtdHandler([in] IVBSAXDTDHandler * pDTDHandler);\n\n    [propget, id(DISPID_SAX_XMLREADER_ERRORHANDLER)]\n    HRESULT errorHandler([out, retval] IVBSAXErrorHandler ** pErrorHandler);\n    [propputref, id(DISPID_SAX_XMLREADER_ERRORHANDLER)]\n    HRESULT errorHandler([in] IVBSAXErrorHandler * errorHandler);\n\n    [propget, id(DISPID_SAX_XMLREADER_BASEURL)]\n    HRESULT baseURL([out, retval] BSTR *pBaseUrl);\n    [propput, id(DISPID_SAX_XMLREADER_BASEURL)]\n    HRESULT baseURL([in] BSTR pBaseUrl);\n\n    [propget, id(DISPID_SAX_XMLREADER_SECUREBASEURL)]\n    HRESULT secureBaseURL([out, retval] BSTR *pSecureBaseUrl);\n    [propput, id(DISPID_SAX_XMLREADER_SECUREBASEURL)]\n    HRESULT secureBaseURL([in] BSTR secureBaseUrl);\n\n    [id(DISPID_SAX_XMLREADER_PARSE)]\n    HRESULT parse( [in] VARIANT varInput);\n    [id(DISPID_SAX_XMLREADER_PARSEURL)]\n    HRESULT parseURL([in] BSTR url);\n}\n\n[\n    object,\n    dual,\n    oleautomation,\n    uuid(f10d27cc-3ec0-415c-8ed8-77ab1c5e7262)\n]\ninterface IMXAttributes : IDispatch\n{\n    [id(DISPID_MX_ATTRIBUTES_ADDATTRIBUTE)]\n    HRESULT addAttribute(\n        [in] BSTR uri,\n        [in] BSTR localName,\n        [in] BSTR QName,\n        [in] BSTR type,\n        [in] BSTR value);\n\n    [id(DISPID_MX_ATTRIBUTES_ADDATTRIBUTEFROMINDEX)]\n    HRESULT addAttributeFromIndex( [in] VARIANT atts,\n                                   [in] int index);\n\n    [id(DISPID_MX_ATTRIBUTES_CLEAR)]\n    HRESULT clear();\n\n    [id(DISPID_MX_ATTRIBUTES_REMOVEATTRIBUTE)]\n    HRESULT removeAttribute( [in] int index);\n\n    [id(DISPID_MX_ATTRIBUTES_SETATTRIBUTE)]\n    HRESULT setAttribute(\n        [in] int index,\n        [in] BSTR uri,\n        [in] BSTR localName,\n        [in] BSTR QName,\n        [in] BSTR type,\n        [in] BSTR value);\n\n    [id(DISPID_MX_ATTRIBUTES_SETATTRIBUTES)]\n    HRESULT setAttributes( [in] VARIANT atts);\n\n    [id(DISPID_MX_ATTRIBUTES_SETLOCALNAME)]\n    HRESULT setLocalName( [in] int index,\n        [in] BSTR localName);\n\n    [id(DISPID_MX_ATTRIBUTES_SETQNAME)]\n    HRESULT setQName(\n        [in] int index,\n        [in] BSTR QName);\n\n    [id(DISPID_MX_ATTRIBUTES_SETTYPE)]\n    HRESULT setType( [in] int index, [in] BSTR type);\n\n    [id(DISPID_MX_ATTRIBUTES_SETURI)]\n    HRESULT setURI( [in] int index,  [in] BSTR uri);\n\n    [id(DISPID_MX_ATTRIBUTES_SETVALUE)]\n    HRESULT setValue([in] int index, [in] BSTR value);\n}\n\n[\n    local,\n    object,\n    dual,\n    oleautomation,\n    uuid(fa4bb38c-faf9-4cca-9302-d1dd0fe520db)\n]\ninterface IMXSchemaDeclHandler : IDispatch\n{\n    [id(DISPID_MX_SCHEMADECLHANDLER_SCHEMAELEMENTDECL)]\n    HRESULT schemaElementDecl( [in] ISchemaElement *oSchemaElement );\n}\n\n[\n    object,\n    dual,\n    oleautomation,\n    uuid(808f4e35-8d5a-4fbe-8466-33a41279ed30)\n]\ninterface IMXReaderControl : IDispatch\n{\n    [id(DISPID_MX_READER_CONTROL_ABORT)]\n    HRESULT abort();\n\n    [id(DISPID_MX_READER_CONTROL_RESUME)]\n    HRESULT resume();\n\n    [id(DISPID_MX_READER_CONTROL_SUSPEND)]\n    HRESULT suspend();\n}\n\n[\n    object,\n    dual,\n    oleautomation,\n    uuid(4d7ff4ba-1565-4ea8-94e1-6e724a46f98d)\n]\ninterface IMXWriter :  IDispatch\n{\n    [propput, id(DISPID_MX_WRITER_OUTPUT)]\n    HRESULT output ( [in] VARIANT Destination);\n    [propget, id(DISPID_MX_WRITER_OUTPUT)]\n    HRESULT output ( [out, retval] VARIANT * Destination);\n\n    [propput, id(DISPID_MX_WRITER_ENCODING)]\n    HRESULT encoding ([in] BSTR encoding);\n    [propget, id(DISPID_MX_WRITER_ENCODING)]\n    HRESULT encoding ([out, retval] BSTR * encoding);\n\n    [propput, id(DISPID_MX_WRITER_BYTEORDERMARK)]\n    HRESULT byteOrderMark ([in] VARIANT_BOOL writeByteOrderMark);\n    [propget, id(DISPID_MX_WRITER_BYTEORDERMARK)]\n    HRESULT byteOrderMark ([out, retval] VARIANT_BOOL * writeByteOrderMark);\n\n    [propput, id(DISPID_MX_WRITER_INDENT)]\n    HRESULT indent ([in] VARIANT_BOOL indentMode);\n    [propget, id(DISPID_MX_WRITER_INDENT)]\n    HRESULT indent ([out, retval] VARIANT_BOOL * indentMode);\n\n    [propput, id(DISPID_MX_WRITER_STANDALONE)]\n    HRESULT standalone ([in] VARIANT_BOOL value);\n    [propget, id(DISPID_MX_WRITER_STANDALONE)]\n    HRESULT standalone ([out, retval] VARIANT_BOOL * value);\n\n    [propput, id(DISPID_MX_WRITER_OMITXMLDECLARATION)]\n    HRESULT omitXMLDeclaration ([in] VARIANT_BOOL value);\n    [propget, id(DISPID_MX_WRITER_OMITXMLDECLARATION)]\n    HRESULT omitXMLDeclaration ([out, retval] VARIANT_BOOL * value);\n\n    [propput, id(DISPID_MX_WRITER_VERSION)]\n    HRESULT version ([in] BSTR version);\n    [propget, id(DISPID_MX_WRITER_VERSION)]\n    HRESULT version ([out, retval] BSTR * version);\n\n    [propput, id(DISPID_MX_WRITER_DISABLEOUTPUTESCAPING)]\n    HRESULT disableOutputEscaping([in] VARIANT_BOOL value);\n    [propget, id(DISPID_MX_WRITER_DISABLEOUTPUTESCAPING)]\n    HRESULT disableOutputEscaping([out, retval] VARIANT_BOOL * value);\n\n    [id(DISPID_MX_WRITER_FLUSH)]\n    HRESULT flush();\n}\n\n[\n    local,\n    object,\n    dual,\n    oleautomation,\n    uuid(c90352f4-643c-4fbc-bb23-e996eb2d51fd)\n]\ninterface IMXNamespacePrefixes : IDispatch\n{\n    [propget, id(DISPID_VALUE)]\n    HRESULT item(\n        [in] long index,\n        [out, retval] BSTR *prefix);\n\n    [propget, id(DISPID_MX_NSMGR_LENGTH)]\n    HRESULT length( [out,retval] long *length );\n\n    [propget, restricted, hidden, id(DISPID_NEWENUM)]\n    HRESULT _newEnum( [out, retval] IUnknown **ppUnk );\n}\n\n[\n    local,\n    object,\n    hidden,\n    uuid(c90352f6-643c-4fbc-bb23-e996eb2d51fd)\n]\ninterface IMXNamespaceManager : IUnknown\n{\n    HRESULT putAllowOverride([in] VARIANT_BOOL fOverride);\n\n    HRESULT getAllowOverride([out, retval] VARIANT_BOOL *fOverride);\n\n    HRESULT reset();\n\n    HRESULT pushContext();\n\n    HRESULT pushNodeContext(\n        [in] IXMLDOMNode *contextNode,\n        [in] VARIANT_BOOL fDeep);\n\n    HRESULT popContext();\n\n    HRESULT declarePrefix(\n        [in] const WCHAR *prefix,\n        [in] const WCHAR *namespaceURI);\n\n    HRESULT getDeclaredPrefix(\n        [in] long nIndex,\n        [in, out] WCHAR *pwchPrefix,\n        [in, out] int *pcchPrefix);\n\n    HRESULT getPrefix(\n        [in] const WCHAR *pwszNamespaceURI,\n        [in] long nIndex,\n        [in, out] WCHAR *pwchPrefix,\n        [in, out] int *pcchPrefix);\n\n    HRESULT getURI(\n        [in] const WCHAR *pwchPrefix,\n        [in] IXMLDOMNode* pContextNode,\n        [in, out] WCHAR *pwchUri,\n        [in, out] int *pcchUri);\n}\n\n[\n    local,\n    object,\n    dual,\n    oleautomation,\n    uuid(c90352f5-643c-4fbc-bb23-e996eb2d51fd)\n]\ninterface IVBMXNamespaceManager : IDispatch\n{\n    [propput, id(DISPID_MX_NSMGR_ALLOWOVERRIDE)]\n    HRESULT allowOverride([in] VARIANT_BOOL fOverride);\n\n    [propget, id(DISPID_MX_NSMGR_ALLOWOVERRIDE)]\n    HRESULT allowOverride([out,retval] VARIANT_BOOL* fOverride);\n\n    [id(DISPID_MX_NSMGR_RESET)]\n    HRESULT reset();\n\n    [id(DISPID_MX_NSMGR_PUSHCONTEXT)]\n    HRESULT pushContext();\n\n    [id(DISPID_MX_NSMGR_PUSHNODECONTEXT)]\n    HRESULT pushNodeContext(\n        [in] IXMLDOMNode* contextNode,\n        [in, defaultvalue(-1)] VARIANT_BOOL fDeep);\n\n    [id(DISPID_MX_NSMGR_POPCONTEXT)]\n    HRESULT popContext();\n\n    [id(DISPID_MX_NSMGR_DECLAREPREFIX)]\n    HRESULT declarePrefix(\n        [in] BSTR prefix,\n        [in] BSTR namespaceURI);\n\n    [id(DISPID_MX_NSMGR_GETDECLAREDPREFIXES)]\n    HRESULT getDeclaredPrefixes([out, retval] IMXNamespacePrefixes** prefixes);\n\n    [id(DISPID_MX_NSMGR_GETPREFIXES)]\n    HRESULT getPrefixes(\n        [in] BSTR namespaceURI,\n        [out, retval] IMXNamespacePrefixes** prefixes);\n\n    [id(DISPID_MX_NSMGR_GETURI)]\n    HRESULT getURI(\n        [in] BSTR prefix,\n        [out, retval] VARIANT* uri);\n\n    [id(DISPID_MX_NSMGR_GETURIFROMNODE)]\n    HRESULT getURIFromNode(\n        [in] BSTR strPrefix,\n        [in] IXMLDOMNode* contextNode,\n        [out, retval] VARIANT* uri);\n}\n\n[\n    local,\n    object,\n    dual,\n    oleautomation,\n    uuid(c90352f7-643c-4fbc-bb23-e996eb2d51fd)\n]\ninterface IMXXMLFilter : IDispatch\n{\n    [id(DISPID_MXXML_FILTER_GETFEATURE)]\n    HRESULT getFeature(\n        [in] BSTR strName,\n        [out, retval] VARIANT_BOOL * fValue);\n\n    [id(DISPID_MXXML_FILTER_PUTFEATURE)]\n    HRESULT putFeature(\n        [in] BSTR strName,\n        [in] VARIANT_BOOL fValue);\n\n    [id(DISPID_MXXML_FILTER_GETPROPERTY)]\n    HRESULT getProperty(\n        [in] BSTR strName,\n        [out, retval] VARIANT * varValue);\n\n    [id(DISPID_MXXML_FILTER_PUTPROPERTY)]\n    HRESULT putProperty(\n        [in] BSTR strName,\n        [in] VARIANT varValue);\n\n    [id(DISPID_MXXML_FILTER_ENTITYRESOLVER), propget]\n    HRESULT entityResolver( [out, retval] IUnknown **oResolver );\n\n    [id(DISPID_MXXML_FILTER_ENTITYRESOLVER), propputref]\n    HRESULT entityResolver( [in] IUnknown *oResolver );\n\n    [id(DISPID_MXXML_FILTER_CONTENTHANDLER), propget]\n    HRESULT contentHandler( [out, retval] IUnknown **oHandler );\n\n    [id(DISPID_MXXML_FILTER_CONTENTHANDLER), propputref]\n    HRESULT contentHandler( [in] IUnknown *oHandler );\n\n    [id(DISPID_MXXML_FILTER_DTDHANDLER), propget]\n    HRESULT dtdHandler( [out, retval] IUnknown **oHandler );\n\n    [id(DISPID_MXXML_FILTER_DTDHANDLER), propputref]\n    HRESULT dtdHandler( [in] IUnknown *oHandler );\n\n    [id(DISPID_MXXML_FILTER_ERRORHANDLER), propget]\n    HRESULT errorHandler( [out, retval] IUnknown **oHandler );\n\n    [id(DISPID_MXXML_FILTER_ERRORHANDLER), propputref]\n    HRESULT errorHandler( [in] IUnknown *oHandler );\n}\n\n[\n    local,\n    object,\n    uuid(50ea08b1-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual\n]\ninterface ISchemaStringCollection : IDispatch\n{\n    [id(DISPID_VALUE), propget]\n    HRESULT item(\n        [in] long index,\n        [out,retval] BSTR* bstr);\n\n    [id(DISPID_SOM_LENGTH), propget]\n    HRESULT length(\n        [out,retval] long* length);\n\n    [id(DISPID_NEWENUM), hidden, restricted, propget]\n    HRESULT _newEnum(\n        [out,retval] IUnknown** ppunk);\n}\n\n[\n    local,\n    object,\n    uuid(50ea08b2-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual\n]\ninterface ISchemaItemCollection : IDispatch\n{\n    [id(DISPID_VALUE), propget]\n    HRESULT item(\n        [in] long index,\n        [out,retval]ISchemaItem** item);\n\n    [id(DISPID_SOM_ITEMBYNAME)]\n    HRESULT itemByName(\n        [in] BSTR name,\n        [out,retval] ISchemaItem** item);\n\n    [id(DISPID_SOM_ITEMBYQNAME)]\n    HRESULT itemByQName(\n        [in] BSTR name,\n        [in] BSTR namespaceURI,\n        [out,retval] ISchemaItem** item);\n\n    [id(DISPID_SOM_LENGTH), propget]\n    HRESULT length(\n        [out,retval]long* length);\n\n    [id(DISPID_NEWENUM), hidden, restricted, propget]\n    HRESULT _newEnum(\n        [out,retval]IUnknown** ppunk);\n}\n\n[\n    local,\n    object,\n    uuid(50ea08b3-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual\n]\ninterface ISchemaItem : IDispatch\n{\n    [id(DISPID_SOM_NAME), propget]\n    HRESULT name(\n        [out,retval] BSTR* name);\n\n    [id(DISPID_SOM_NAMESPACEURI), propget]\n    HRESULT namespaceURI(\n        [out,retval] BSTR* namespaceURI);\n\n    [id(DISPID_SOM_SCHEMA), propget]\n    HRESULT schema(\n        [out,retval] ISchema** schema);\n\n    [id(DISPID_SOM_ID), propget]\n    HRESULT id(\n        [out,retval] BSTR* id);\n\n    [id(DISPID_SOM_ITEMTYPE), propget]\n    HRESULT itemType(\n        [out,retval] SOMITEMTYPE* itemType);\n\n    [id(DISPID_SOM_UNHANDLEDATTRS), propget]\n    HRESULT unhandledAttributes(\n        [out,retval] IVBSAXAttributes** attributes);\n\n    [id(DISPID_SOM_WRITEANNOTATION)]\n    HRESULT writeAnnotation(\n        [in] IUnknown* annotationSink,\n        [out,retval] VARIANT_BOOL* isWritten);\n}\n\n[\n    local,\n    object,\n    uuid(50ea08b4-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual\n]\ninterface ISchema : ISchemaItem\n{\n    [id(DISPID_SOM_TARGETNAMESPACE), propget]\n    HRESULT targetNamespace(\n        [out,retval] BSTR* targetNamespace);\n\n    [id(DISPID_SOM_VERSION), propget]\n    HRESULT version(\n        [out,retval] BSTR* version);\n\n    [id(DISPID_SOM_TYPES), propget]\n    HRESULT types(\n        [out,retval] ISchemaItemCollection** types);\n\n    [id(DISPID_SOM_ELEMENTS), propget]\n    HRESULT elements(\n        [out,retval] ISchemaItemCollection** elements);\n\n    [id(DISPID_SOM_ATTRIBUTES), propget]\n    HRESULT attributes(\n        [out,retval] ISchemaItemCollection** attributes);\n\n    [id(DISPID_SOM_ATTRIBUTEGROUPS), propget]\n    HRESULT attributeGroups(\n        [out,retval] ISchemaItemCollection** attributeGroups);\n\n    [id(DISPID_SOM_MODELGROUPS), propget]\n    HRESULT modelGroups(\n        [out,retval] ISchemaItemCollection** modelGroups);\n\n    [id(DISPID_SOM_NOTATIONS), propget]\n    HRESULT notations(\n        [out,retval] ISchemaItemCollection** notations);\n\n    [id(DISPID_SOM_SCHEMALOCATIONS), propget]\n    HRESULT schemaLocations(\n        [out,retval] ISchemaStringCollection** schemaLocations);\n}\n\n[\n    local,\n    object,\n    uuid(50ea08b5-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual\n]\ninterface ISchemaParticle : ISchemaItem\n{\n    [id(DISPID_SOM_MINOCCURS), propget]\n    HRESULT minOccurs(\n        [out,retval] VARIANT* minOccurs);\n\n    [id(DISPID_SOM_MAXOCCURS), propget]\n    HRESULT maxOccurs(\n        [out,retval] VARIANT* maxOccurs);\n}\n\n[\n    object,\n    uuid(50ea08b6-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual,\n]\ninterface ISchemaAttribute : ISchemaItem\n{\n    [id(DISPID_SOM_TYPE), propget]\n    HRESULT type(\n        [out,retval] ISchemaType** type);\n\n    [id(DISPID_SOM_SCOPE), propget]\n    HRESULT scope(\n        [out,retval] ISchemaComplexType** scope);\n\n    [id(DISPID_SOM_DEFAULTVALUE), propget]\n    HRESULT defaultValue(\n        [out,retval]BSTR* defaultValue);\n\n    [id(DISPID_SOM_FIXEDVALUE), propget]\n    HRESULT fixedValue(\n        [out,retval] BSTR* fixedValue);\n\n    [id(DISPID_SOM_USE), propget]\n    HRESULT use(\n        [out,retval] SCHEMAUSE* use);\n\n    [id(DISPID_SOM_ISREFERENCE), propget]\n    HRESULT isReference(\n        [out,retval] VARIANT_BOOL* reference);\n}\n\n[\n    local,\n    object,\n    uuid(50ea08b7-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual\n]\ninterface ISchemaElement : ISchemaParticle\n{\n    [id(DISPID_SOM_TYPE), propget]\n    HRESULT type(\n        [out,retval] ISchemaType** type);\n\n    [id(DISPID_SOM_SCOPE), propget]\n    HRESULT scope(\n        [out,retval] ISchemaComplexType** scope);\n\n    [id(DISPID_SOM_DEFAULTVALUE), propget]\n    HRESULT defaultValue(\n        [out,retval] BSTR* defaultValue);\n\n    [id(DISPID_SOM_FIXEDVALUE), propget]\n    HRESULT fixedValue(\n        [out,retval] BSTR* fixedValue);\n\n    [id(DISPID_SOM_ISNILLABLE), propget]\n    HRESULT isNillable(\n        [out,retval] VARIANT_BOOL* nillable);\n\n    [id(DISPID_SOM_IDCONSTRAINTS), propget]\n    HRESULT identityConstraints(\n        [out,retval] ISchemaItemCollection** constraints);\n\n    [id(DISPID_SOM_SUBSTITUTIONGROUP), propget]\n    HRESULT substitutionGroup(\n        [out,retval] ISchemaElement** element);\n\n    [id(DISPID_SOM_EXCLUSIONS), propget]\n    HRESULT substitutionGroupExclusions(\n        [out,retval] SCHEMADERIVATIONMETHOD* exclusions);\n\n    [id(DISPID_SOM_DISALLOWED), propget]\n    HRESULT disallowedSubstitutions(\n        [out,retval] SCHEMADERIVATIONMETHOD* disallowed);\n\n    [id(DISPID_SOM_ISABSTRACT), propget]\n    HRESULT isAbstract(\n        [out,retval] VARIANT_BOOL* abstract);\n\n    [id(DISPID_SOM_ISREFERENCE), propget]\n    HRESULT isReference(\n        [out,retval] VARIANT_BOOL* reference);\n}\n\n[\n    local,\n    object,\n    uuid(50ea08b8-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual\n]\ninterface ISchemaType : ISchemaItem\n{\n    [id(DISPID_SOM_BASETYPES), propget]\n    HRESULT baseTypes(\n        [out,retval] ISchemaItemCollection** baseTypes);\n\n    [id(DISPID_SOM_FINAL), propget]\n    HRESULT final(\n        [out,retval] SCHEMADERIVATIONMETHOD* final);\n\n    [id(DISPID_SOM_VARIETY), propget]\n    HRESULT variety(\n        [out,retval] SCHEMATYPEVARIETY* variety);\n\n    [id(DISPID_SOM_DERIVEDBY), propget]\n    HRESULT derivedBy(\n        [out,retval] SCHEMADERIVATIONMETHOD* derivedBy);\n\n    [id(DISPID_SOM_ISVALID)]\n    HRESULT isValid(\n        [in] BSTR data,\n        [out,retval] VARIANT_BOOL* valid);\n\n    [id(DISPID_SOM_MINEXCLUSIVE), propget]\n    HRESULT minExclusive(\n        [out,retval]BSTR* minExclusive);\n\n    [id(DISPID_SOM_MININCLUSIVE), propget]\n    HRESULT minInclusive(\n        [out,retval] BSTR* minInclusive);\n\n    [id(DISPID_SOM_MAXEXCLUSIVE), propget]\n    HRESULT maxExclusive(\n        [out,retval] BSTR* maxExclusive);\n\n    [id(DISPID_SOM_MAXINCLUSIVE), propget]\n    HRESULT maxInclusive(\n        [out,retval] BSTR* maxInclusive);\n\n    [id(DISPID_SOM_TOTALDIGITS), propget]\n    HRESULT totalDigits(\n        [out,retval] VARIANT* totalDigits);\n\n    [id(DISPID_SOM_FRACTIONDIGITS), propget]\n    HRESULT fractionDigits(\n        [out,retval] VARIANT* fractionDigits);\n\n    [id(DISPID_SOM_LENGTH), propget]\n    HRESULT length(\n        [out,retval] VARIANT* length);\n\n    [id(DISPID_SOM_MINLENGTH), propget]\n    HRESULT minLength(\n        [out,retval]VARIANT* minLength);\n\n    [id(DISPID_SOM_MAXLENGTH), propget]\n    HRESULT maxLength(\n        [out,retval]VARIANT* maxLength);\n\n    [id(DISPID_SOM_ENUMERATION), propget]\n    HRESULT enumeration(\n        [out,retval] ISchemaStringCollection** enumeration);\n\n    [id(DISPID_SOM_WHITESPACE), propget]\n    HRESULT whitespace(\n        [out,retval]SCHEMAWHITESPACE* whitespace);\n\n    [id(DISPID_SOM_PATTERNS), propget]\n    HRESULT patterns(\n        [out,retval] ISchemaStringCollection** patterns);\n}\n\n[\n    local,\n    object,\n    uuid(50ea08b9-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual,\n]\ninterface ISchemaComplexType : ISchemaType\n{\n    [id(DISPID_SOM_ISABSTRACT), propget]\n    HRESULT isAbstract(\n        [out,retval] VARIANT_BOOL* abstract);\n\n    [id(DISPID_SOM_ANYATTRIBUTE), propget]\n    HRESULT anyAttribute(\n        [out,retval] ISchemaAny** anyAttribute);\n\n    [id(DISPID_SOM_ATTRIBUTES), propget]\n    HRESULT attributes(\n        [out,retval] ISchemaItemCollection** attributes);\n\n    [id(DISPID_SOM_CONTENTTYPE), propget]\n    HRESULT contentType(\n        [out,retval] SCHEMACONTENTTYPE* contentType);\n\n    [id(DISPID_SOM_CONTENTMODEL), propget]\n    HRESULT contentModel(\n        [out,retval] ISchemaModelGroup** contentModel);\n\n    [id(DISPID_SOM_PROHIBITED), propget]\n    HRESULT prohibitedSubstitutions(\n        [out,retval] SCHEMADERIVATIONMETHOD* prohibited);\n}\n\n[\n    local,\n    object,\n    uuid(50ea08ba-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual,\n]\ninterface ISchemaAttributeGroup : ISchemaItem\n{\n    [id(DISPID_SOM_ANYATTRIBUTE), propget]\n    HRESULT anyAttribute(\n        [out,retval] ISchemaAny** anyAttribute);\n\n    [id(DISPID_SOM_ATTRIBUTES), propget]\n        HRESULT attributes(\n            [out,retval] ISchemaItemCollection** attributes);\n}\n\n[\n    local,\n    object,\n    uuid(50ea08bb-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual,\n]\ninterface ISchemaModelGroup : ISchemaParticle\n{\n    [id(DISPID_SOM_PARTICLES), propget]\n    HRESULT particles(\n        [out,retval] ISchemaItemCollection** particles);\n}\n\n[\n    local,\n    object,\n    uuid(50ea08bc-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual\n]\ninterface ISchemaAny : ISchemaParticle\n{\n    [id(DISPID_SOM_NAMESPACES), propget]\n    HRESULT namespaces(\n        [out,retval] ISchemaStringCollection** namespaces);\n\n    [id(DISPID_SOM_PROCESSCONTENTS), propget]\n    HRESULT processContents(\n        [out,retval] SCHEMAPROCESSCONTENTS* processContents);\n}\n\n[\n    local,\n    object,\n    uuid(50ea08bd-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual\n]\ninterface ISchemaIdentityConstraint : ISchemaItem\n{\n    [id(DISPID_SOM_SELECTOR), propget]\n    HRESULT selector(\n        [out,retval] BSTR* selector);\n\n    [id(DISPID_SOM_FIELDS), propget]\n        HRESULT fields(\n            [out,retval] ISchemaStringCollection** fields);\n\n    [id(DISPID_SOM_REFERENCEDKEY), propget]\n    HRESULT referencedKey(\n        [out,retval] ISchemaIdentityConstraint** key);\n}\n\n[\n    local,\n    object,\n    uuid(50ea08be-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual\n]\ninterface ISchemaNotation : ISchemaItem\n{\n    [id(DISPID_SOM_SYSTEMIDENTIFIER), propget]\n    HRESULT systemIdentifier(\n        [out,retval] BSTR* uri);\n\n    [id(DISPID_SOM_PUBLICIDENTIFIER), propget]\n    HRESULT publicIdentifier(\n        [out,retval] BSTR* uri);\n}\n\n\n[\n    helpstring(\"SAX XML Reader 3.0\"),\n    progid(\"Msxml2.SAXXMLReader.3.0\"),\n    vi_progid(\"Msxml2.SAXXMLReader\"),\n    threading(both),\n    uuid(3124c396-fb13-4836-a6ad-1317f1713688)\n]\ncoclass SAXXMLReader30\n{\n    [default] interface IVBSAXXMLReader;\n    interface ISAXXMLReader;\n    interface IMXReaderControl;\n}\n\n[\n    uuid(7c6e29bc-8b8b-4c3d-859e-af6cd158be0f)\n]\ncoclass SAXXMLReader40\n{\n    [default] interface IVBSAXXMLReader;\n    interface ISAXXMLReader;\n}\n\n[\n    uuid(88d96a0c-f192-11d4-a65f-0040963251e5)\n]\ncoclass SAXXMLReader60\n{\n    [default] interface IVBSAXXMLReader;\n    interface ISAXXMLReader;\n}\n\n[\n    helpstring(\"SAX XML Reader\"),\n    progid(\"Msxml2.SAXXMLReader\"),\n    vi_progid(\"Msxml2.SAXXMLReader\"),\n    threading(both),\n    uuid(079aa557-4a18-424a-8eee-e39f0a8d41b9)\n]\ncoclass SAXXMLReader\n{\n    [default] interface IVBSAXXMLReader;\n    interface ISAXXMLReader;\n    interface IMXReaderControl;\n}\n\n[\n    uuid(a4c23ec3-6b70-4466-9127-550077239978)\n]\ncoclass MXHTMLWriter\n{\n    [default] interface IMXWriter;\n\n    interface ISAXContentHandler;\n    interface ISAXErrorHandler;\n    interface ISAXDTDHandler;\n    interface ISAXLexicalHandler;\n    interface ISAXDeclHandler;\n\n    interface IVBSAXContentHandler;\n    interface IVBSAXDeclHandler;\n    interface IVBSAXDTDHandler;\n    interface IVBSAXErrorHandler;\n    interface IVBSAXLexicalHandler;\n}\n\n[\n    uuid(853d1540-c1a7-4aa9-a226-4d3bd301146d)\n]\ncoclass MXHTMLWriter30\n{\n    [default] interface IMXWriter;\n\n    interface ISAXContentHandler;\n    interface ISAXDeclHandler;\n    interface ISAXDTDHandler;\n    interface ISAXErrorHandler;\n    interface ISAXLexicalHandler;\n\n    interface IVBSAXContentHandler;\n    interface IVBSAXDeclHandler;\n    interface IVBSAXDTDHandler;\n    interface IVBSAXErrorHandler;\n    interface IVBSAXLexicalHandler;\n}\n\n[\n    uuid(88d969c9-f192-11d4-a65f-0040963251e5)\n]\ncoclass MXHTMLWriter40\n{\n    [default] interface IMXWriter;\n\n    interface ISAXContentHandler;\n    interface ISAXDeclHandler;\n    interface ISAXDTDHandler;\n    interface ISAXErrorHandler;\n    interface ISAXLexicalHandler;\n\n    interface IVBSAXContentHandler;\n    interface IVBSAXDeclHandler;\n    interface IVBSAXDTDHandler;\n    interface IVBSAXErrorHandler;\n    interface IVBSAXLexicalHandler;\n}\n\n[\n    uuid(88d96a10-f192-11d4-a65f-0040963251e5)\n]\ncoclass MXHTMLWriter60\n{\n    [default] interface IMXWriter;\n\n    interface ISAXContentHandler;\n    interface ISAXDeclHandler;\n    interface ISAXDTDHandler;\n    interface ISAXErrorHandler;\n    interface ISAXLexicalHandler;\n\n    interface IVBSAXContentHandler;\n    interface IVBSAXDeclHandler;\n    interface IVBSAXDTDHandler;\n    interface IVBSAXErrorHandler;\n    interface IVBSAXLexicalHandler;\n}\n\n[\n    helpstring(\"MXXMLWriter 3.0\"),\n    progid(\"Msxml2.MXXMLWriter.3.0\"),\n    vi_progid(\"Msxml2.MXXMLWriter\"),\n    threading(both),\n    uuid(3d813dfe-6c91-4a4e-8f41-04346a841d9c)\n]\ncoclass MXXMLWriter30\n{\n    [default] interface IMXWriter;\n\n    interface ISAXContentHandler;\n    interface ISAXDeclHandler;\n    interface ISAXDTDHandler;\n    interface ISAXErrorHandler;\n    interface ISAXLexicalHandler;\n\n    interface IVBSAXContentHandler;\n    interface IVBSAXDeclHandler;\n    interface IVBSAXDTDHandler;\n    interface IVBSAXErrorHandler;\n    interface IVBSAXLexicalHandler;\n}\n\n[\n    uuid(88d969c8-f192-11d4-a65f-0040963251e5),\n]\ncoclass MXXMLWriter40\n{\n    [default] interface IMXWriter;\n\n    interface ISAXContentHandler;\n    interface ISAXDeclHandler;\n    interface ISAXDTDHandler;\n    interface ISAXErrorHandler;\n    interface ISAXLexicalHandler;\n\n    interface IVBSAXContentHandler;\n    interface IVBSAXDeclHandler;\n    interface IVBSAXDTDHandler;\n    interface IVBSAXErrorHandler;\n    interface IVBSAXLexicalHandler;\n}\n\n[\n    uuid(88d96a0f-f192-11d4-a65f-0040963251e5)\n]\ncoclass MXXMLWriter60\n{\n    [default] interface IMXWriter;\n\n    interface ISAXContentHandler;\n    interface ISAXDeclHandler;\n    interface ISAXDTDHandler;\n    interface ISAXErrorHandler;\n    interface ISAXLexicalHandler;\n\n    interface IVBSAXContentHandler;\n    interface IVBSAXDeclHandler;\n    interface IVBSAXDTDHandler;\n    interface IVBSAXErrorHandler;\n    interface IVBSAXLexicalHandler;\n}\n\n[\n    helpstring(\"MXXMLWriter\"),\n    progid(\"Msxml2.MXXMLWriter\"),\n    vi_progid(\"Msxml2.MXXMLWriter\"),\n    threading(both),\n    uuid(fc220ad8-a72a-4ee8-926e-0b7ad152a020)\n]\ncoclass MXXMLWriter\n{\n    [default] interface IMXWriter;\n\n    interface ISAXContentHandler;\n    interface ISAXErrorHandler;\n    interface ISAXDTDHandler;\n    interface ISAXLexicalHandler;\n    interface ISAXDeclHandler;\n\n    interface IVBSAXContentHandler;\n    interface IVBSAXDeclHandler;\n    interface IVBSAXDTDHandler;\n    interface IVBSAXErrorHandler;\n    interface IVBSAXLexicalHandler;\n}\n\n[\n    uuid(88d969d5-f192-11d4-a65f-0040963251e5)\n]\ncoclass MXNamespaceManager\n{\n    [default] interface IVBMXNamespaceManager;\n    interface IMXNamespaceManager;\n}\n\n[\n    uuid(88d969d6-f192-11d4-a65f-0040963251e5)\n]\ncoclass MXNamespaceManager40\n{\n    [default] interface IVBMXNamespaceManager;\n    interface IMXNamespaceManager;\n}\n\n[\n    uuid(88d96a11-f192-11d4-a65f-0040963251e5)\n]\ncoclass MXNamespaceManager60\n{\n    [default] interface IVBMXNamespaceManager;\n    interface IMXNamespaceManager;\n}\n\n[\n    helpstring(\"SAXAttributes 3.0\"),\n    progid(\"Msxml2.SAXAttributes.3.0\"),\n    vi_progid(\"Msxml2.SAXAttributes\"),\n    threading(both),\n    uuid(3e784a01-f3ae-4dc0-9354-9526b9370eba)\n]\ncoclass SAXAttributes30\n{\n    [default] interface IMXAttributes;\n    interface IVBSAXAttributes;\n    interface ISAXAttributes;\n}\n\n[\n    uuid(88d969ca-f192-11d4-a65f-0040963251e5),\n]\ncoclass SAXAttributes40\n{\n    [default] interface IMXAttributes;\n    interface IVBSAXAttributes;\n    interface ISAXAttributes;\n}\n\n[\n    uuid(88d96a0e-f192-11d4-a65f-0040963251e5)\n]\ncoclass SAXAttributes60\n{\n    [default] interface IMXAttributes;\n    interface IVBSAXAttributes;\n    interface ISAXAttributes;\n}\n\n[\n    helpstring(\"SAXAttributes\"),\n    progid(\"Msxml2.SAXAttributes\"),\n    vi_progid(\"Msxml2.SAXAttributes\"),\n    threading(both),\n    uuid(4dd441ad-526d-4a77-9f1b-9841ed802fb0)\n]\ncoclass SAXAttributes\n{\n    [default] interface IMXAttributes;\n    interface IVBSAXAttributes;\n    interface ISAXAttributes;\n}\n\n/*\n * Error Codes\n */\ncpp_quote(\"#define E_XML_NOTWF              0xC00CE223\")\ncpp_quote(\"#define E_XML_NODTD              0xC00CE224\")\ncpp_quote(\"#define E_XML_INVALID            0xC00CE225\")\ncpp_quote(\"#define E_XML_BUFFERTOOSMALL     0xC00CE226\")\n\n} /* Library MSXML */\n"
  },
  {
    "path": "wine/windows/msxml2did.h",
    "content": "/*\n * Copyright (C) 2005 Vijay Kiran Kamuju\n * Copyright (C) 2008 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __MSXML2DID_H__\n#define __MSXML2DID_H__\n\n#define DISPID_XOBJ_MIN                     0x10000\n#define DISPID_XOBJ_MAX                     0x1FFFF\n#define DISPID_XOBJ_BASE                    0x10000\n\n#define DISPID_XMLELEMENTCOLLECTION         0x10000\n#define DISPID_XMLELEMENTCOLLECTION_LENGTH  0x10001\n#define DISPID_XMLELEMENTCOLLECTION_NEWENUM DISPID_NEWENUM\n#define DISPID_XMLELEMENTCOLLECTION_ITEM    0x10003\n\n#define DISPID_XMLDOCUMENT                  0x10064\n#define DISPID_XMLDOCUMENT_ROOT             0x10065\n#define DISPID_XMLDOCUMENT_FILESIZE         0x10066\n#define DISPID_XMLDOCUMENT_FILEMODIFIEDDATE 0x10067\n#define DISPID_XMLDOCUMENT_FILEUPDATEDDATE  0x10068\n#define DISPID_XMLDOCUMENT_URL              0x10069\n#define DISPID_XMLDOCUMENT_MIMETYPE         0x1006a\n#define DISPID_XMLDOCUMENT_READYSTATE       0x1006b\n#define DISPID_XMLDOCUMENT_CREATEELEMENT    0x1006c\n#define DISPID_XMLDOCUMENT_CHARSET          0x1006d\n#define DISPID_XMLDOCUMENT_VERSION          0x1006e\n#define DISPID_XMLDOCUMENT_DOCTYPE          0x1006f\n#define DISPID_XMLDOCUMENT_DTDURL           0x10070\n#define DISPID_XMLDOCUMENT_ASYNC            0x10071\n#define DISPID_XMLDOCUMENT_CASEINSENSITIVE  0x10072\n\n#define DISPID_XMLELEMENT                   0x100c8\n#define DISPID_XMLELEMENT_TAGNAME           0x100c9\n#define DISPID_XMLELEMENT_PARENT            0x100ca\n#define DISPID_XMLELEMENT_SETATTRIBUTE      0x100cb\n#define DISPID_XMLELEMENT_GETATTRIBUTE      0x100cc\n#define DISPID_XMLELEMENT_REMOVEATTRIBUTE   0x100cd\n#define DISPID_XMLELEMENT_CHILDREN          0x100ce\n#define DISPID_XMLELEMENT_TYPE              0x100cf\n#define DISPID_XMLELEMENT_TEXT              0x100d0\n#define DISPID_XMLELEMENT_ADDCHILD          0x100d1\n#define DISPID_XMLELEMENT_REMOVECHILD       0x100d2\n#define DISPID_XMLELEMENT_ATTRIBUTES        0x100d3\n\n#define DISPID_XMLNOTIFSINK                 0x1012c\n#define DISPID_XMLNOTIFSINK_CHILDADDED      0x1012d\n\n#define DISPID_XMLATTRIBUTE                 0x10190\n#define DISPID_XMLATTRIBUTE_NAME            0x10191\n#define DISPID_XMLATTRIBUTE_VALUE           0x10192\n\n\n#define DISPID_DOM_BASE                     0x00000001\n#define DISPID_DOM_COLLECTION_BASE          0x000f4240\n#define DISPID_DOM_COLLECTION_MAX           0x002dc6bf\n\n#define DISPID_DOM_NODE                                 0x00000001\n#define DISPID_DOM_NODE_NODENAME                        0x00000002\n#define DISPID_DOM_NODE_NODEVALUE                       0x00000003\n#define DISPID_DOM_NODE_NODETYPE                        0x00000004\n#define DISPID_DOM_NODE_NODETYPEENUM                    0x00000005\n#define DISPID_DOM_NODE_PARENTNODE                      0x00000006\n#define DISPID_DOM_NODE_CHILDNODES                      0x00000007\n#define DISPID_DOM_NODE_FIRSTCHILD                      0x00000008\n#define DISPID_DOM_NODE_LASTCHILD                       0x00000009\n#define DISPID_DOM_NODE_PREVIOUSSIBLING                 0x0000000a\n#define DISPID_DOM_NODE_NEXTSIBLING                     0x0000000b\n#define DISPID_DOM_NODE_ATTRIBUTES                      0x0000000c\n#define DISPID_DOM_NODE_INSERTBEFORE                    0x0000000d\n#define DISPID_DOM_NODE_REPLACECHILD                    0x0000000e\n#define DISPID_DOM_NODE_REMOVECHILD                     0x0000000f\n#define DISPID_DOM_NODE_APPENDCHILD                     0x00000010\n#define DISPID_DOM_NODE_HASCHILDNODES                   0x00000011\n#define DISPID_DOM_NODE_OWNERDOC                        0x00000012\n#define DISPID_DOM_NODE_CLONENODE                       0x00000013\n\n#define DISPID_XMLDOM_NODE                              0x00000014\n#define DISPID_XMLDOM_NODE_STRINGTYPE                   0x00000015\n#define DISPID_XMLDOM_NODE_SPECIFIED                    0x00000016\n#define DISPID_XMLDOM_NODE_DEFINITION                   0x00000017\n#define DISPID_XMLDOM_NODE_TEXT                         0x00000018\n#define DISPID_XMLDOM_NODE_NODETYPEDVALUE               0x00000019\n#define DISPID_XMLDOM_NODE_DATATYPE                     0x0000001a\n#define DISPID_XMLDOM_NODE_XML                          0x0000001b\n#define DISPID_XMLDOM_NODE_TRANSFORMNODE                0x0000001c\n#define DISPID_XMLDOM_NODE_SELECTNODES                  0x0000001d\n#define DISPID_XMLDOM_NODE_SELECTSINGLENODE             0x0000001e\n#define DISPID_XMLDOM_NODE_PARSED                       0x0000001f\n#define DISPID_XMLDOM_NODE_NAMESPACE                    0x00000020\n#define DISPID_XMLDOM_NODE_PREFIX                       0x00000021\n#define DISPID_XMLDOM_NODE_BASENAME                     0x00000022\n#define DISPID_XMLDOM_NODE_TRANSFORMNODETOOBJECT        0x00000023\n#define DISPID_XMLDOM_NODE__TOP                         0x00000024\n\n#define DISPID_DOM_DOCUMENT                             0x00000025\n#define DISPID_DOM_DOCUMENT_DOCTYPE                     0x00000026\n#define DISPID_DOM_DOCUMENT_IMPLEMENTATION              0x00000027\n#define DISPID_DOM_DOCUMENT_DOCUMENTELEMENT             0x00000028\n#define DISPID_DOM_DOCUMENT_CREATEELEMENT               0x00000029\n#define DISPID_DOM_DOCUMENT_CREATEDOCUMENTFRAGMENT      0x0000002a\n#define DISPID_DOM_DOCUMENT_CREATETEXTNODE              0x0000002b\n#define DISPID_DOM_DOCUMENT_CREATECOMMENT               0x0000002c\n#define DISPID_DOM_DOCUMENT_CREATECDATASECTION          0x0000002d\n#define DISPID_DOM_DOCUMENT_CREATEPROCESSINGINSTRUCTION 0x0000002e\n#define DISPID_DOM_DOCUMENT_CREATEATTRIBUTE             0x0000002f\n#define DISPID_DOM_DOCUMENT_CREATEENTITY                0x00000030\n#define DISPID_DOM_DOCUMENT_CREATEENTITYREFERENCE       0x00000031\n#define DISPID_DOM_DOCUMENT_GETELEMENTSBYTAGNAME        0x00000032\n#define DISPID_DOM_DOCUMENT_TOP                         0x00000033\n\n#define DISPID_XMLDOM_DOCUMENT                          0x00000034\n#define DISPID_XMLDOM_DOCUMENT_DOCUMENTNODE             0x00000035\n#define DISPID_XMLDOM_DOCUMENT_CREATENODE               0x00000036\n#define DISPID_XMLDOM_DOCUMENT_CREATENODEEX             0x00000037\n#define DISPID_XMLDOM_DOCUMENT_NODEFROMID               0x00000038\n#define DISPID_XMLDOM_DOCUMENT_DOCUMENTNAMESPACES       0x00000039\n#define DISPID_XMLDOM_DOCUMENT_LOAD                     0x0000003a\n#define DISPID_XMLDOM_DOCUMENT_PARSEERROR               0x0000003b\n#define DISPID_XMLDOM_DOCUMENT_URL                      0x0000003c\n#define DISPID_XMLDOM_DOCUMENT_ASYNC                    0x0000003d\n#define DISPID_XMLDOM_DOCUMENT_ABORT                    0x0000003e\n#define DISPID_XMLDOM_DOCUMENT_LOADXML                  0x0000003f\n#define DISPID_XMLDOM_DOCUMENT_SAVE                     0x00000040\n#define DISPID_XMLDOM_DOCUMENT_VALIDATE                 0x00000041\n#define DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE         0x00000042\n#define DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE       0x00000043\n#define DISPID_XMLDOM_DOCUMENT_ONREADYSTATECHANGE       0x00000044\n#define DISPID_XMLDOM_DOCUMENT_ONDATAAVAILABLE          0x00000045\n#define DISPID_XMLDOM_DOCUMENT_ONTRANSFORMNODE          0x00000046\n#define DISPID_XMLDOM_DOCUMENT__TOP                     0x00000047\n\n#define DISPID_DOM_NODELIST                             0x00000048\n#define DISPID_DOM_NODELIST_ITEM                        0x00000049\n#define DISPID_DOM_NODELIST_LENGTH                      0x0000004a\n#define DISPID_XMLDOM_NODELIST                          0x0000004b\n#define DISPID_XMLDOM_NODELIST_NEXTNODE                 0x0000004c\n#define DISPID_XMLDOM_NODELIST_RESET                    0x0000004d\n#define DISPID_XMLDOM_NODELIST_NEWENUM                  0x0000004e\n#define DISPID_XMLDOM_NODELIST__TOP                     0x0000004f\n\n#define DISPID_DOM_NAMEDNODEMAP                         0x00000050\n#define DISPID_DOM_NAMEDNODEMAP_GETNAMEDITEM            0x00000053\n#define DISPID_DOM_NAMEDNODEMAP_SETNAMEDITEM            0x00000054\n#define DISPID_DOM_NAMEDNODEMAP_REMOVENAMEDITEM         0x00000055\n#define DISPID_XMLDOM_NAMEDNODEMAP                      0x00000056\n#define DISPID_XMLDOM_NAMEDNODEMAP_GETQUALIFIEDITEM     0x00000057\n#define DISPID_XMLDOM_NAMEDNODEMAP_REMOVEQUALIFIEDITEM  0x00000058\n#define DISPID_XMLDOM_NAMEDNODEMAP_NEXTNODE             0x00000059\n#define DISPID_XMLDOM_NAMEDNODEMAP_RESET                0x0000005a\n#define DISPID_XMLDOM_NAMEDNODEMAP_NEWENUM              0x0000005b\n#define DISPID_XMLDOM_NAMEDNODEMAP__TOP                 0x0000005c\n\n#define DISPID_DOM_W3CWRAPPERS                          0x0000005d\n\n#define DISPID_DOM_DOCUMENTFRAGMENT                     0x0000005e\n#define DISPID_DOM_DOCUMENTFRAGMENT__TOP                0x0000005f\n\n#define DISPID_DOM_ELEMENT                              0x00000060\n#define DISPID_DOM_ELEMENT_GETTAGNAME                   0x00000061\n#define DISPID_DOM_ELEMENT_GETATTRIBUTES                0x00000062\n#define DISPID_DOM_ELEMENT_GETATTRIBUTE                 0x00000063\n#define DISPID_DOM_ELEMENT_SETATTRIBUTE                 0x00000064\n#define DISPID_DOM_ELEMENT_REMOVEATTRIBUTE              0x00000065\n#define DISPID_DOM_ELEMENT_GETATTRIBUTENODE             0x00000066\n#define DISPID_DOM_ELEMENT_SETATTRIBUTENODE             0x00000067\n#define DISPID_DOM_ELEMENT_REMOVEATTRIBUTENODE          0x00000068\n#define DISPID_DOM_ELEMENT_GETELEMENTSBYTAGNAME         0x00000069\n#define DISPID_DOM_ELEMENT_NORMALIZE                    0x0000006a\n#define DISPID_DOM_ELEMENT__TOP                         0x0000006b\n\n#define DISPID_DOM_DATA                0x0000006c\n#define DISPID_DOM_DATA_DATA           0x0000006d\n#define DISPID_DOM_DATA_LENGTH         0x0000006e\n#define DISPID_DOM_DATA_SUBSTRING      0x0000006f\n#define DISPID_DOM_DATA_APPEND         0x00000070\n#define DISPID_DOM_DATA_INSERT         0x00000071\n#define DISPID_DOM_DATA_DELETE         0x00000072\n#define DISPID_DOM_DATA_REPLACE        0x00000073\n#define DISPID_DOM_DATA__TOP           0x00000074\n\n#define DISPID_DOM_ATTRIBUTE           0x00000075\n#define DISPID_DOM_ATTRIBUTE_GETNAME   0x00000076\n#define DISPID_DOM_ATTRIBUTE_SPECIFIED 0x00000077\n#define DISPID_DOM_ATTRIBUTE_VALUE     0x00000078\n#define DISPID_DOM_ATTRIBUTE__TOP      0x00000079\n\n#define DISPID_DOM_TEXT                0x0000007a\n#define DISPID_DOM_TEXT_SPLITTEXT      0x0000007b\n#define DISPID_DOM_TEXT_JOINTEXT       0x0000007c\n#define DISPID_DOM_TEXT__TOP           0x0000007d\n\n#define DISPID_DOM_PI                  0x0000007e\n#define DISPID_DOM_PI_TARGET           0x0000007f\n#define DISPID_DOM_PI_DATA             0x00000080\n#define DISPID_DOM_PI__TOP             0x00000081\n\n#define DISPID_DOM_DOCUMENTTYPE                    0x00000082\n#define DISPID_DOM_DOCUMENTTYPE_NAME               0x00000083\n#define DISPID_DOM_DOCUMENTTYPE_ENTITIES           0x00000084\n#define DISPID_DOM_DOCUMENTTYPE_NOTATIONS          0x00000085\n#define DISPID_DOM_DOCUMENTTYPE__TOP               0x00000086\n\n#define DISPID_DOM_NOTATION            0x00000087\n#define DISPID_DOM_NOTATION_PUBLICID   0x00000088\n#define DISPID_DOM_NOTATION_SYSTEMID   0x00000089\n#define DISPID_DOM_NOTATION__TOP       0x0000008a\n\n#define DISPID_DOM_ENTITY              0x0000008b\n#define DISPID_DOM_ENTITY_PUBLICID     0x0000008c\n#define DISPID_DOM_ENTITY_SYSTEMID     0x0000008d\n#define DISPID_DOM_ENTITY_NOTATIONNAME 0x0000008e\n#define DISPID_DOM_ENTITY__TOP         0x0000008f\n\n#define DISPID_DOM_W3CWRAPPERS_TOP     0x0000008f\n\n#define DISPID_DOM_IMPLEMENTATION              0x00000090\n#define DISPID_DOM_IMPLEMENTATION_HASFEATURE   0x00000091\n#define DISPID_DOM_IMPLEMENTATION__TOP         0x00000092\n\n#define DISPID_DOM__TOP                0x000000af\n\n#define  DISPID_DOM_ERROR              0x000000b0\n#define  DISPID_DOM_ERROR_ERRORCODE    0x000000b1\n#define  DISPID_DOM_ERROR_URL          0x000000b2\n#define  DISPID_DOM_ERROR_REASON       0x000000b3\n#define  DISPID_DOM_ERROR_SRCTEXT      0x000000b4\n#define  DISPID_DOM_ERROR_LINE         0x000000b5\n#define  DISPID_DOM_ERROR_LINEPOS      0x000000b6\n#define  DISPID_DOM_ERROR_FILEPOS      0x000000b7\n#define  DISPID_DOM_ERROR__TOP         0x000000b8\n\n#define  DISPID_DOM_ERROR2                      0x000000b9\n#define  DISPID_DOM_ERROR2_ALLERRORS            0x000000ba\n#define  DISPID_DOM_ERROR2_ERRORPARAMETERS      0x000000bb\n#define  DISPID_DOM_ERROR2_ERRORPARAMETERSCOUNT 0x000000bc\n#define  DISPID_DOM_ERROR2_ERRORXPATH           0x000000bd\n#define  DISPID_DOM_ERROR2__TOP                 0x000000be\n\n#define  DISPID_DOM_ERRORCOLLECTION             0x000000bf\n#define  DISPID_DOM_ERRORCOLLECTION_LENGTH      0x000000c0\n#define  DISPID_DOM_ERRORCOLLECTION_NEXT        0x000000c1\n#define  DISPID_DOM_ERRORCOLLECTION_RESET       0x000000c2\n#define  DISPID_DOM_ERRORCOLLECTION__TOP        0x000000c3\n\n#define  DISPID_XTLRUNTIME                     0x000000b9\n#define  DISPID_XTLRUNTIME_UNIQUEID            0x000000ba\n#define  DISPID_XTLRUNTIME_DEPTH               0x000000bb\n#define  DISPID_XTLRUNTIME_CHILDNUMBER         0x000000bc\n#define  DISPID_XTLRUNTIME_ANCESTORCHILDNUMBER 0x000000bd\n#define  DISPID_XTLRUNTIME_ABSOLUTECHILDNUMBER 0x000000be\n#define  DISPID_XTLRUNTIME_FORMATINDEX         0x000000bf\n#define  DISPID_XTLRUNTIME_FORMATNUMBER        0x000000c0\n#define  DISPID_XTLRUNTIME_FORMATDATE          0x000000c1\n#define  DISPID_XTLRUNTIME_FORMATTIME          0x000000c2\n#define  DISPID_XTLRUNTIME__TOP                0x000000c3\n\n#define  DISPID_XMLDOMEVENT                    0x000000c4\n#define  DISPID_XMLDOMEVENT_ONREADYSTATECHANGE DISPID_READYSTATECHANGE\n#define  DISPID_XMLDOMEVENT_ONDATAAVAILABLE    0x000000c5\n#define  DISPID_XMLDOMEVENT__TOP               0x000000c6\n\n#define DISPID_XMLDOM_DOCUMENT2                0x000000c7\n#define DISPID_XMLDOM_DOCUMENT2_NAMESPACES     0x000000c8\n#define DISPID_XMLDOM_DOCUMENT2_SCHEMAS        0x000000c9\n#define DISPID_XMLDOM_DOCUMENT2_VALIDATE       0x000000ca\n#define DISPID_XMLDOM_DOCUMENT2_SETPROPERTY    0x000000cb\n#define DISPID_XMLDOM_DOCUMENT2_GETPROPERTY    0x000000cc\n#define DISPID_XMLDOM_DOCUMENT2__TOP           0x000000cd\n\n#define DISPID_XMLDOM_DOCUMENT3                0x000000ce\n#define DISPID_XMLDOM_DOCUMENT3_VALIDATENODE   0x000000cf\n#define DISPID_XMLDOM_DOCUMENT3_IMPORTNODE     0x000000d0\n#define DISPID_XMLDOM_DOCUMENT3__TOP           0x000000d1\n\n#define DISPID_XMLDOM_SCHEMACOLLECTION                 0x00000002\n#define DISPID_XMLDOM_SCHEMACOLLECTION_ADD             0x00000003\n#define DISPID_XMLDOM_SCHEMACOLLECTION_GET             0x00000004\n#define DISPID_XMLDOM_SCHEMACOLLECTION_REMOVE          0x00000005\n#define DISPID_XMLDOM_SCHEMACOLLECTION_LENGTH          0x00000006\n#define DISPID_XMLDOM_SCHEMACOLLECTION_NAMESPACEURI    0x00000007\n#define DISPID_XMLDOM_SCHEMACOLLECTION_ADDCOLLECTION   0x00000008\n#define DISPID_XMLDOM_SCHEMACOLLECTION__TOP            0x00000009\n\n#define DISPID_XMLDOM_SELECTION                0x0000000a\n#define DISPID_XMLDOM_SELECTION_EXPR           0x0000000b\n#define DISPID_XMLDOM_SELECTION_CONTEXT        0x0000000c\n#define DISPID_XMLDOM_SELECTION_PEEKNODE       0x0000000d\n#define DISPID_XMLDOM_SELECTION_MATCHES        0x0000000e\n#define DISPID_XMLDOM_SELECTION_REMOVENEXT     0x0000000f\n#define DISPID_XMLDOM_SELECTION_REMOVEALL      0x00000010\n#define DISPID_XMLDOM_SELECTION_CLONE          0x00000011\n#define DISPID_XMLDOM_SELECTION_GETPROPERTY    0x00000012\n#define DISPID_XMLDOM_SELECTION_SETPROPERTY    0x00000013\n#define DISPID_XMLDOM_SELECTION__TOP           0x00000014\n\n#define DISPID_XMLDOM_TEMPLATE                 0x00000001\n#define DISPID_XMLDOM_TEMPLATE_STYLESHEET      0x00000002\n#define DISPID_XMLDOM_TEMPLATE_CREATEPROCESSOR 0x00000003\n#define DISPID_XMLDOM_TEMPLATE__TOP            0x00000004\n\n#define DISPID_XMLDOM_PROCESSOR                0x00000001\n#define DISPID_XMLDOM_PROCESSOR_INPUT          0x00000002\n#define DISPID_XMLDOM_PROCESSOR_XSLTEMPLATE    0x00000003\n#define DISPID_XMLDOM_PROCESSOR_SETSTARTMODE   0x00000004\n#define DISPID_XMLDOM_PROCESSOR_STARTMODE      0x00000005\n#define DISPID_XMLDOM_PROCESSOR_STARTMODEURI   0x00000006\n#define DISPID_XMLDOM_PROCESSOR_OUTPUT         0x00000007\n#define DISPID_XMLDOM_PROCESSOR_TRANSFORM      0x00000008\n#define DISPID_XMLDOM_PROCESSOR_RESET          0x00000009\n#define DISPID_XMLDOM_PROCESSOR_READYSTATE     0x0000000a\n#define DISPID_XMLDOM_PROCESSOR_ADDPARAMETER   0x0000000b\n#define DISPID_XMLDOM_PROCESSOR_ADDOBJECT      0x0000000c\n#define DISPID_XMLDOM_PROCESSOR_STYLESHEET     0x0000000d\n#define DISPID_XMLDOM_PROCESSOR__TOP           0x0000000e\n\n#define  DISPID_XMLDSO                         0x10000\n#define  DISPID_XMLDSO_DOCUMENT                0x10001\n#define  DISPID_XMLDSO_JAVADSOCOMPATIBLE       0x10002\n\n/* SAX Defines */\n#define DISPID_SAX_XMLREADER__MIN              0x00000501\n#define DISPID_SAX_XMLREADER__MAX              0x00010000\n#define DISPID_SAX_XMLREADER__BASE             DISPID_SAX_XMLREADER__MIN\n\n#define DISPID_SAX_XMLREADER                   0x00000501\n#define DISPID_SAX_XMLREADER_GETFEATURE        0x00000502\n#define DISPID_SAX_XMLREADER_PUTFEATURE        0x00000503\n#define DISPID_SAX_XMLREADER_GETPROPERTY       0x00000504\n#define DISPID_SAX_XMLREADER_PUTPROPERTY       0x00000505\n#define DISPID_SAX_XMLREADER_ENTITYRESOLVER    0x00000506\n#define DISPID_SAX_XMLREADER_CONTENTHANDLER    0x00000507\n#define DISPID_SAX_XMLREADER_DTDHANDLER        0x00000508\n#define DISPID_SAX_XMLREADER_ERRORHANDLER      0x00000509\n#define DISPID_SAX_XMLREADER_BASEURL           0x0000050A\n#define DISPID_SAX_XMLREADER_SECUREBASEURL     0x0000050B\n#define DISPID_SAX_XMLREADER_PARSE             0x0000050C\n#define DISPID_SAX_XMLREADER_PARSEURL          0x0000050D\n#define DISPID_SAX_XMLREADER_PARENT            0x0000050E\n\n#define DISPID_SAX_XMLFILTER                   0x00000510\n#define DISPID_SAX_XMLFILTER_GETFEATURE        0x00000511\n#define DISPID_SAX_XMLFILTER_PUTFEATURE        0x00000512\n#define DISPID_SAX_XMLFILTER_GETPROPERTY       0x00000513\n#define DISPID_SAX_XMLFILTER_PUTPROPERTY       0x00000514\n#define DISPID_SAX_XMLFILTER_ENTITYRESOLVER    0x00000515\n#define DISPID_SAX_XMLFILTER_CONTENTHANDLER    0x00000516\n#define DISPID_SAX_XMLFILTER_DTDHANDLER        0x00000517\n#define DISPID_SAX_XMLFILTER_ERRORHANDLER      0x00000518\n#define DISPID_SAX_XMLFILTER_BASEURL           0x00000519\n#define DISPID_SAX_XMLFILTER_SECUREBASEURL     0x0000051A\n#define DISPID_SAX_XMLFILTER_PARSE             0x0000051B\n#define DISPID_SAX_XMLFILTER_PARSEURL          0x0000051C\n#define DISPID_SAX_XMLFILTER_PARENT            0x0000051D\n\n#define DISPID_SAX_LOCATOR                     0x00000520\n#define DISPID_SAX_LOCATOR_COLUMNNUMBER        0x00000521\n#define DISPID_SAX_LOCATOR_LINENUMBER          0x00000522\n#define DISPID_SAX_LOCATOR_PUBLICID            0x00000523\n#define DISPID_SAX_LOCATOR_SYSTEMID            0x00000524\n\n#define DISPID_SAX_ENTITYRESOLVER                       0x00000526\n#define DISPID_SAX_ENTITYRESOLVER_RESOLVEENTITY         0x00000527\n\n#define DISPID_SAX_CONTENTHANDLER                       0x00000529\n#define DISPID_SAX_CONTENTHANDLER_DOCUMENTLOCATOR       0x0000052A\n#define DISPID_SAX_CONTENTHANDLER_STARTDOCUMENT         0x0000052B\n#define DISPID_SAX_CONTENTHANDLER_ENDDOCUMENT           0x0000052C\n#define DISPID_SAX_CONTENTHANDLER_STARTPREFIXMAPPING    0x0000052D\n#define DISPID_SAX_CONTENTHANDLER_ENDPREFIXMAPPING      0x0000052E\n#define DISPID_SAX_CONTENTHANDLER_STARTELEMENT          0x0000052F\n#define DISPID_SAX_CONTENTHANDLER_ENDELEMENT            0x00000530\n#define DISPID_SAX_CONTENTHANDLER_CHARACTERS            0x00000531\n#define DISPID_SAX_CONTENTHANDLER_IGNORABLEWHITESPACE   0x00000532\n#define DISPID_SAX_CONTENTHANDLER_PROCESSINGINSTRUCTION 0x00000533\n#define DISPID_SAX_CONTENTHANDLER_SKIPPEDENTITY         0x00000534\n\n#define DISPID_SAX_DTDHANDLER                           0x00000536\n#define DISPID_SAX_DTDHANDLER_NOTATIONDECL              0x00000537\n#define DISPID_SAX_DTDHANDLER_UNPARSEDENTITYDECL        0x00000538\n\n#define DISPID_SAX_ERRORHANDLER                         0x0000053A\n#define DISPID_SAX_ERRORHANDLER_ERROR                   0x0000053B\n#define DISPID_SAX_ERRORHANDLER_FATALERROR              0x0000053C\n#define DISPID_SAX_ERRORHANDLER_IGNORABLEWARNING        0x0000053D\n\n#define DISPID_SAX_ATTRIBUTES                           0x0000053F\n#define DISPID_SAX_ATTRIBUTES_LENGTH                    0x00000540\n#define DISPID_SAX_ATTRIBUTES_GETURI                    0x00000541\n#define DISPID_SAX_ATTRIBUTES_GETLOCALNAME              0x00000542\n#define DISPID_SAX_ATTRIBUTES_GETQNAME                  0x00000543\n#define DISPID_SAX_ATTRIBUTES_GETINDEXFROMNAME          0x00000544\n#define DISPID_SAX_ATTRIBUTES_GETINDEXFROMQNAME         0x00000545\n#define DISPID_SAX_ATTRIBUTES_GETTYPE                   0x00000546\n#define DISPID_SAX_ATTRIBUTES_GETTYPEFROMNAME           0x00000547\n#define DISPID_SAX_ATTRIBUTES_GETTYPEFROMQNAME          0x00000548\n#define DISPID_SAX_ATTRIBUTES_GETVALUE                  0x00000549\n#define DISPID_SAX_ATTRIBUTES_GETVALUEFROMNAME          0x0000054A\n#define DISPID_SAX_ATTRIBUTES_GETVALUEFROMQNAME         0x0000054B\n\n#define DISPID_SAX_LEXICALHANDLER                       0x0000054D\n#define DISPID_SAX_LEXICALHANDLER_STARTDTD              0x0000054E\n#define DISPID_SAX_LEXICALHANDLER_ENDDTD                0x0000054F\n#define DISPID_SAX_LEXICALHANDLER_STARTENTITY           0x00000550\n#define DISPID_SAX_LEXICALHANDLER_ENDENTITY             0x00000551\n#define DISPID_SAX_LEXICALHANDLER_STARTCDATA            0x00000552\n#define DISPID_SAX_LEXICALHANDLER_ENDCDATA              0x00000553\n#define DISPID_SAX_LEXICALHANDLER_COMMENT               0x00000554\n\n#define DISPID_SAX_DECLHANDLER                          0x00000556\n#define DISPID_SAX_DECLHANDLER_ELEMENTDECL              0x00000557\n#define DISPID_SAX_DECLHANDLER_ATTRIBUTEDECL            0x00000558\n#define DISPID_SAX_DECLHANDLER_INTERNALENTITYDECL       0x00000559\n#define DISPID_SAX_DECLHANDLER_EXTERNALENTITYDECL       0x0000055A\n\n#define DISPID_MX_ATTRIBUTES_ADDATTRIBUTE               0x0000055D\n#define DISPID_MX_ATTRIBUTES_CLEAR                      0x0000055E\n#define DISPID_MX_ATTRIBUTES_REMOVEATTRIBUTE            0x0000055F\n#define DISPID_MX_ATTRIBUTES_SETATTRIBUTE               0x00000560\n#define DISPID_MX_ATTRIBUTES_SETATTRIBUTES              0x00000561\n#define DISPID_MX_ATTRIBUTES_SETLOCALNAME               0x00000562\n#define DISPID_MX_ATTRIBUTES_SETQNAME                   0x00000563\n#define DISPID_MX_ATTRIBUTES_SETTYPE                    0x00000564\n#define DISPID_MX_ATTRIBUTES_SETURI                     0x00000565\n#define DISPID_MX_ATTRIBUTES_SETVALUE                   0x00000566\n#define DISPID_MX_ATTRIBUTES_ADDATTRIBUTEFROMINDEX      0x00000567\n\n#define DISPID_MX_WRITER                                0x00000568\n#define DISPID_MX_WRITER_OUTPUT                         0x00000569\n#define DISPID_MX_WRITER_DESTINATION                    0x0000056A\n#define DISPID_MX_WRITER_ENCODING                       0x0000056B\n#define DISPID_MX_WRITER_BYTEORDERMARK                  0x0000056C\n#define DISPID_MX_WRITER_INDENT                         0x0000056D\n#define DISPID_MX_WRITER_STANDALONE                     0x0000056E\n#define DISPID_MX_WRITER_OMITXMLDECLARATION             0x0000056F\n#define DISPID_MX_WRITER_VERSION                        0x00000570\n#define DISPID_MX_WRITER_DISABLEOUTPUTESCAPING          0x00000571\n#define DISPID_MX_WRITER_FLUSH                          0x00000572\n#define DISPID_MX_WRITER_RESET                          0x00000573\n\n#define DISPID_MX_READER_CONTROL                        0x00000575\n#define DISPID_MX_READER_CONTROL_ABORT                  0x00000576\n#define DISPID_MX_READER_CONTROL_RESUME                 0x00000577\n#define DISPID_MX_READER_CONTROL_SUSPEND                0x00000578\n\n#define DISPID_MX_SCHEMADECLHANDLER                     0x0000057a\n#define DISPID_MX_SCHEMADECLHANDLER_SCHEMAELEMENTDECL   0x0000057b\n\n#define DISPID_MX_NSMGR                                 0x0000057d\n#define DISPID_MX_NSMGR_ALLOWOVERRIDE                   0x0000057e\n#define DISPID_MX_NSMGR_RESET                           0x0000057f\n#define DISPID_MX_NSMGR_PUSHCONTEXT                     0x00000580\n#define DISPID_MX_NSMGR_PUSHNODECONTEXT                 0x00000581\n#define DISPID_MX_NSMGR_POPCONTEXT                      0x00000582\n#define DISPID_MX_NSMGR_DECLAREPREFIX                   0x00000583\n#define DISPID_MX_NSMGR_GETDECLAREDPREFIXES             0x00000584\n#define DISPID_MX_NSMGR_GETPREFIXES                     0x00000585\n#define DISPID_MX_NSMGR_GETURI                          0x00000586\n#define DISPID_MX_NSMGR_GETURIFROMNODE                  0x00000587\n#define DISPID_MX_NSMGR_LENGTH                          0x00000588\n\n#define DISPID_MXXML_FILTER                             0x0000058a\n#define DISPID_MXXML_FILTER_CONTENTHANDLER              0x0000058b\n#define DISPID_MXXML_FILTER_DTDHANDLER                  0x0000058c\n#define DISPID_MXXML_FILTER_ENTITYRESOLVER              0x0000058d\n#define DISPID_MXXML_FILTER_ERRORHANDLER                0x0000058e\n#define DISPID_MXXML_FILTER_GETFEATURE                  0x0000058f\n#define DISPID_MXXML_FILTER_GETPROPERTY                 0x00000590\n#define DISPID_MXXML_FILTER_PUTFEATURE                  0x00000591\n#define DISPID_MXXML_FILTER_PUTPROPERTY                 0x00000592\n\n#define DISPID_SOM_VALIDATE                             0x0000058b\n#define DISPID_SOM_VALIDATEONLOAD                       0x0000058c\n#define DISPID_SOM_GETSCHEMA                            0x0000058d\n#define DISPID_SOM_GETDECLARATION                       0x0000058e\n#define DISPID_SOM_ITEMBYNAME                           0x0000058f\n#define DISPID_SOM_ITEMBYQNAME                          0x00000590\n#define DISPID_SOM_ANYATTRIBUTE                         0x00000591\n#define DISPID_SOM_ATTRIBUTEGROUPS                      0x00000592\n#define DISPID_SOM_ATTRIBUTES                           0x00000593\n#define DISPID_SOM_BASETYPES                            0x00000594\n#define DISPID_SOM_CONTENTMODEL                         0x00000595\n#define DISPID_SOM_CONTENTTYPE                          0x00000596\n#define DISPID_SOM_DEFAULTVALUE                         0x00000597\n#define DISPID_SOM_DERIVEDBY                            0x00000598\n#define DISPID_SOM_DISALLOWED                           0x00000599\n#define DISPID_SOM_ELEMENTS                             0x0000059a\n#define DISPID_SOM_ENUMERATION                          0x0000059b\n#define DISPID_SOM_FIELDS                               0x0000059c\n#define DISPID_SOM_FINAL                                0x0000059d\n#define DISPID_SOM_FIXEDVALUE                           0x0000059e\n#define DISPID_SOM_FRACTIONDIGITS                       0x0000059f\n#define DISPID_SOM_ID                                   0x000005a0\n#define DISPID_SOM_IDCONSTRAINTS                        0x000005a1\n#define DISPID_SOM_ISABSTRACT                           0x000005a2\n#define DISPID_SOM_ISNILLABLE                           0x000005a3\n#define DISPID_SOM_ISREFERENCE                          0x000005a4\n#define DISPID_SOM_ISVALID                              0x000005a5\n#define DISPID_SOM_ITEMTYPE                             0x000005a6\n#define DISPID_SOM_LENGTH                               0x000005a7\n#define DISPID_SOM_MAXEXCLUSIVE                         0x000005a8\n#define DISPID_SOM_MAXINCLUSIVE                         0x000005a9\n#define DISPID_SOM_MAXLENGTH                            0x000005aa\n#define DISPID_SOM_MAXOCCURS                            0x000005ab\n#define DISPID_SOM_MINEXCLUSIVE                         0x000005ac\n#define DISPID_SOM_MININCLUSIVE                         0x000005ad\n#define DISPID_SOM_MINLENGTH                            0x000005ae\n#define DISPID_SOM_MINOCCURS                            0x000005af\n#define DISPID_SOM_MODELGROUPS                          0x000005b0\n#define DISPID_SOM_NAME                                 0x000005b1\n#define DISPID_SOM_NAMESPACES                           0x000005b2\n#define DISPID_SOM_NAMESPACEURI                         0x000005b3\n#define DISPID_SOM_NOTATIONS                            0x000005b4\n#define DISPID_SOM_PARTICLES                            0x000005b5\n#define DISPID_SOM_PATTERNS                             0x000005b6\n#define DISPID_SOM_PROCESSCONTENTS                      0x000005b7\n#define DISPID_SOM_PROHIBITED                           0x000005b8\n#define DISPID_SOM_PUBLICIDENTIFIER                     0x000005b9\n#define DISPID_SOM_REFERENCEDKEY                        0x000005ba\n#define DISPID_SOM_SCHEMA                               0x000005bb\n#define DISPID_SOM_SCHEMALOCATIONS                      0x000005bc\n#define DISPID_SOM_SCOPE                                0x000005bd\n#define DISPID_SOM_SELECTOR                             0x000005be\n#define DISPID_SOM_SUBSTITUTIONGROUP                    0x000005bf\n#define DISPID_SOM_EXCLUSIONS                           0x000005c0\n#define DISPID_SOM_SYSTEMIDENTIFIER                     0x000005c1\n#define DISPID_SOM_TARGETNAMESPACE                      0x000005c2\n#define DISPID_SOM_TOTALDIGITS                          0x000005c3\n#define DISPID_SOM_TYPE                                 0x000005c4\n#define DISPID_SOM_TYPES                                0x000005c5\n#define DISPID_SOM_UNHANDLEDATTRS                       0x000005c6\n#define DISPID_SOM_USE                                  0x000005c7\n#define DISPID_SOM_VARIETY                              0x000005c8\n#define DISPID_SOM_VERSION                              0x000005c9\n#define DISPID_SOM_WHITESPACE                           0x000005ca\n#define DISPID_SOM_WRITEANNOTATION                      0x000005cb\n\n\n#endif /* __MSXML2DID_H__ */\n"
  },
  {
    "path": "wine/windows/msxml6.idl",
    "content": "/*\n * Copyright (C) 2005 Vijay Kiran Kamuju\n * Copyright (C) 2008 Alistair Leslie-Hughes\n * Copyright (C) 2010 Nikolay Sivov for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <msxml6did.h>\n#include <idispids.h>\n\nimport \"unknwn.idl\";\nimport \"objidl.idl\";\nimport \"oaidl.idl\";\n\n#ifndef __WIDL__\n#define threading(model)\n#define progid(str)\n#define vi_progid(str)\n#endif\n\n[\n    uuid(f5078f18-c551-11d3-89b9-0000f81fe221),\n    version(6.0),\n    helpstring(\"Microsoft XML, v6.0\")\n]\nlibrary MSXML2\n{\n\nimportlib(\"stdole2.tlb\");\n\ninterface IXMLDOMImplementation;\ninterface IXMLDOMNode;\ninterface IXMLDOMDocumentFragment;\ninterface IXMLDOMDocument;\ninterface IXMLDOMSchemaCollection;\ninterface IXMLDOMDocument2;\ninterface IXMLDOMNodeList;\ninterface IXMLDOMNamedNodeMap;\ninterface IXMLDOMCharacterData;\ninterface IXMLDOMAttribute;\ninterface IXMLDOMElement;\ninterface IXMLDOMText;\ninterface IXMLDOMComment;\ninterface IXMLDOMProcessingInstruction;\ninterface IXMLDOMCDATASection;\ninterface IXMLDOMDocumentType;\ninterface IXMLDOMNotation;\ninterface IXMLDOMEntity;\ninterface IXMLDOMEntityReference;\ninterface IXMLDOMParseError;\ninterface IXMLDOMParseErrorCollection;\ninterface IXTLRuntime;\ninterface IXSLTemplate;\ninterface IXSLProcessor;\n\n/* SAX Interfaces */\ninterface ISAXAttributes;\ninterface ISAXContentHandler;\ninterface ISAXDeclHandler;\ninterface ISAXDTDHandler;\ninterface ISAXEntityResolver;\ninterface ISAXErrorHandler;\ninterface ISAXLexicalHandler;\ninterface ISAXLocator;\ninterface ISAXXMLFilter;\ninterface ISAXXMLReader;\n\ninterface IVBSAXAttributes;\ninterface IVBSAXContentHandler;\ninterface IVBSAXDeclHandler;\ninterface IVBSAXDTDHandler;\ninterface IVBSAXEntityResolver;\ninterface IVBSAXErrorHandler;\ninterface IVBSAXLexicalHandler;\ninterface IVBSAXLocator;\ninterface IVBSAXXMLFilter;\ninterface IVBSAXXMLReader;\n\ninterface IMXAttributes;\ninterface IMXReaderControl;\ninterface IMXWriter;\n\ninterface IXMLDOMSchemaCollection2;\ninterface ISchemaStringCollection;\ninterface ISchemaItemCollection;\ninterface ISchemaItem;\ninterface ISchema;\ninterface ISchemaParticle;\ninterface ISchemaAttribute;\ninterface ISchemaElement;\ninterface ISchemaType;\ninterface ISchemaComplexType;\ninterface ISchemaAttributeGroup;\ninterface ISchemaModelGroup;\ninterface ISchemaAny;\ninterface ISchemaIdentityConstraint;\ninterface ISchemaNotation;\n\n\ncpp_quote(\"#define DOMDocument DOMDocument2\")\ncpp_quote(\"#define CLSID_DOMDocument CLSID_DOMDocument2\")\n\ncpp_quote(\"#ifndef __MSXML_DOMNODETYPE_DEFINED\")\ncpp_quote(\"#define __MSXML_DOMNODETYPE_DEFINED\")\ntypedef enum tagDOMNodeType\n{\n    NODE_INVALID  \t\t= 0,\n    NODE_ELEMENT  \t\t= 1,\n    NODE_ATTRIBUTE\t\t= 2,\n    NODE_TEXT\t\t\t= 3,\n    NODE_CDATA_SECTION\t\t= 4,\n    NODE_ENTITY_REFERENCE \t= 5,\n    NODE_ENTITY \t\t= 6,\n    NODE_PROCESSING_INSTRUCTION = 7,\n    NODE_COMMENT\t\t= 8,\n    NODE_DOCUMENT\t\t= 9,\n    NODE_DOCUMENT_TYPE\t\t= 10,\n    NODE_DOCUMENT_FRAGMENT \t= 11,\n    NODE_NOTATION \t\t= 12\n} DOMNodeType;\ncpp_quote(\"#endif\")\n\ntypedef enum _SOMITEMTYPE\n{\n    SOMITEM_SCHEMA                      = 0x1000,\n    SOMITEM_ATTRIBUTE                   = 0x1001,\n    SOMITEM_ATTRIBUTEGROUP              = 0x1002,\n    SOMITEM_NOTATION                    = 0x1003,\n    SOMITEM_IDENTITYCONSTRAINT          = 0x1100,\n    SOMITEM_KEY                         = 0x1101,\n    SOMITEM_KEYREF                      = 0x1102,\n    SOMITEM_UNIQUE                      = 0x1103,\n    SOMITEM_ANYTYPE                     = 0x2000,\n    SOMITEM_DATATYPE                    = 0x2100,\n    SOMITEM_DATATYPE_ANYTYPE            = 0x2101,\n    SOMITEM_DATATYPE_ANYURI             = 0x2102,\n    SOMITEM_DATATYPE_BASE64BINARY       = 0x2103,\n    SOMITEM_DATATYPE_BOOLEAN            = 0x2104,\n    SOMITEM_DATATYPE_BYTE               = 0x2105,\n    SOMITEM_DATATYPE_DATE               = 0x2106,\n    SOMITEM_DATATYPE_DATETIME           = 0x2107,\n    SOMITEM_DATATYPE_DAY                = 0x2108,\n    SOMITEM_DATATYPE_DECIMAL            = 0x2109,\n    SOMITEM_DATATYPE_DOUBLE             = 0x210A,\n    SOMITEM_DATATYPE_DURATION           = 0x210B,\n    SOMITEM_DATATYPE_ENTITIES           = 0x210C,\n    SOMITEM_DATATYPE_ENTITY             = 0x210D,\n    SOMITEM_DATATYPE_FLOAT              = 0x210E,\n    SOMITEM_DATATYPE_HEXBINARY          = 0x210F,\n    SOMITEM_DATATYPE_ID                 = 0x2110,\n    SOMITEM_DATATYPE_IDREF              = 0x2111,\n    SOMITEM_DATATYPE_IDREFS             = 0x2112,\n    SOMITEM_DATATYPE_INT                = 0x2113,\n    SOMITEM_DATATYPE_INTEGER            = 0x2114,\n    SOMITEM_DATATYPE_LANGUAGE           = 0x2115,\n    SOMITEM_DATATYPE_LONG               = 0x2116,\n    SOMITEM_DATATYPE_MONTH              = 0x2117,\n    SOMITEM_DATATYPE_MONTHDAY           = 0x2118,\n    SOMITEM_DATATYPE_NAME               = 0x2119,\n    SOMITEM_DATATYPE_NCNAME             = 0x211A,\n    SOMITEM_DATATYPE_NEGATIVEINTEGER    = 0x211B,\n    SOMITEM_DATATYPE_NMTOKEN            = 0x211C,\n    SOMITEM_DATATYPE_NMTOKENS           = 0x211D,\n    SOMITEM_DATATYPE_NONNEGATIVEINTEGER = 0x211E,\n    SOMITEM_DATATYPE_NONPOSITIVEINTEGER = 0x211F,\n    SOMITEM_DATATYPE_NORMALIZEDSTRING   = 0x2120,\n    SOMITEM_DATATYPE_NOTATION           = 0x2121,\n    SOMITEM_DATATYPE_POSITIVEINTEGER    = 0x2122,\n    SOMITEM_DATATYPE_QNAME              = 0x2123,\n    SOMITEM_DATATYPE_SHORT              = 0x2124,\n    SOMITEM_DATATYPE_STRING             = 0x2125,\n    SOMITEM_DATATYPE_TIME               = 0x2126,\n    SOMITEM_DATATYPE_TOKEN              = 0x2127,\n    SOMITEM_DATATYPE_UNSIGNEDBYTE       = 0x2128,\n    SOMITEM_DATATYPE_UNSIGNEDINT        = 0x2129,\n    SOMITEM_DATATYPE_UNSIGNEDLONG       = 0x212A,\n    SOMITEM_DATATYPE_UNSIGNEDSHORT      = 0x212B,\n    SOMITEM_DATATYPE_YEAR               = 0x212C,\n    SOMITEM_DATATYPE_YEARMONTH          = 0x212D,\n    SOMITEM_DATATYPE_ANYSIMPLETYPE      = 0x21FF,\n    SOMITEM_SIMPLETYPE                  = 0x2200,\n    SOMITEM_COMPLEXTYPE                 = 0x2400,\n    SOMITEM_PARTICLE                    = 0x4000,\n    SOMITEM_ANY                         = 0x4001,\n    SOMITEM_ANYATTRIBUTE                = 0x4002,\n    SOMITEM_ELEMENT                     = 0x4003,\n    SOMITEM_GROUP                       = 0x4100,\n    SOMITEM_ALL                         = 0x4101,\n    SOMITEM_CHOICE                      = 0x4102,\n    SOMITEM_SEQUENCE                    = 0x4103,\n    SOMITEM_EMPTYPARTICLE               = 0x4104,\n    SOMITEM_NULL                        = 0x0800,\n    SOMITEM_NULL_TYPE                   = 0x2800,\n    SOMITEM_NULL_ANY                    = 0x4801,\n    SOMITEM_NULL_ANYATTRIBUTE           = 0x4802,\n    SOMITEM_NULL_ELEMENT                = 0x4803,\n} SOMITEMTYPE;\n\ntypedef enum _SCHEMAUSE\n{\n    SCHEMAUSE_OPTIONAL,\n    SCHEMAUSE_PROHIBITED,\n    SCHEMAUSE_REQUIRED,\n} SCHEMAUSE;\n\ntypedef enum _SCHEMADERIVATIONMETHOD\n{\n    SCHEMADERIVATIONMETHOD_EMPTY        = 0x0000,\n    SCHEMADERIVATIONMETHOD_SUBSTITUTION = 0x0001,\n    SCHEMADERIVATIONMETHOD_EXTENSION    = 0x0002,\n    SCHEMADERIVATIONMETHOD_RESTRICTION  = 0x0004,\n    SCHEMADERIVATIONMETHOD_LIST         = 0x0008,\n    SCHEMADERIVATIONMETHOD_UNION        = 0x0010,\n    SCHEMADERIVATIONMETHOD_ALL          = 0x00FF,\n    SCHEMADERIVATIONMETHOD_NONE         = 0x0100,\n} SCHEMADERIVATIONMETHOD;\n\ntypedef enum _SCHEMACONTENTTYPE\n{\n    SCHEMACONTENTTYPE_EMPTY,\n    SCHEMACONTENTTYPE_TEXTONLY,\n    SCHEMACONTENTTYPE_ELEMENTONLY,\n    SCHEMACONTENTTYPE_MIXED,\n} SCHEMACONTENTTYPE;\n\ntypedef enum _SCHEMAPROCESSCONTENTS\n{\n    SCHEMAPROCESSCONTENTS_NONE,\n    SCHEMAPROCESSCONTENTS_SKIP,\n    SCHEMAPROCESSCONTENTS_LAX,\n    SCHEMAPROCESSCONTENTS_STRICT,\n} SCHEMAPROCESSCONTENTS;\n\ntypedef enum _SCHEMAWHITESPACE\n{\n    SCHEMAWHITESPACE_NONE       = -1,\n    SCHEMAWHITESPACE_PRESERVE   =  0,\n    SCHEMAWHITESPACE_REPLACE    =  1,\n    SCHEMAWHITESPACE_COLLAPSE   =  2,\n} SCHEMAWHITESPACE;\n\n\ntypedef enum _SCHEMATYPEVARIETY\n{\n    SCHEMATYPEVARIETY_NONE      = -1,\n    SCHEMATYPEVARIETY_ATOMIC    =  0,\n    SCHEMATYPEVARIETY_LIST      =  1,\n    SCHEMATYPEVARIETY_UNION     =  2,\n} SCHEMATYPEVARIETY;\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF80-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMNode : IDispatch\n{\n    [propget, id(DISPID_DOM_NODE_NODENAME)]\n    HRESULT nodeName([retval, out] BSTR *p);\n\n    [propget, id(DISPID_DOM_NODE_NODEVALUE)]\n    HRESULT nodeValue([retval, out] VARIANT *var1);\n\n    [propput, id(DISPID_DOM_NODE_NODEVALUE)]\n    HRESULT nodeValue([in] VARIANT var1);\n\n    [propget, id(DISPID_DOM_NODE_NODETYPE)]\n    HRESULT nodeType([retval, out] DOMNodeType *domNodeType);\n\n    [propget, id(DISPID_DOM_NODE_PARENTNODE)]\n    HRESULT parentNode([retval, out] IXMLDOMNode **parent);\n\n    [propget, id(DISPID_DOM_NODE_CHILDNODES)]\n    HRESULT childNodes([retval, out] IXMLDOMNodeList **outList);\n\n    [propget, id(DISPID_DOM_NODE_FIRSTCHILD)]\n    HRESULT firstChild([retval, out] IXMLDOMNode **domNode);\n\n    [propget, id(DISPID_DOM_NODE_LASTCHILD)]\n    HRESULT lastChild([retval, out] IXMLDOMNode **domNode);\n\n    [propget, id(DISPID_DOM_NODE_PREVIOUSSIBLING)]\n    HRESULT previousSibling([retval, out] IXMLDOMNode **domNode);\n\n    [propget, id(DISPID_DOM_NODE_NEXTSIBLING)]\n    HRESULT nextSibling([retval, out] IXMLDOMNode **domNode);\n\n    [propget, id(DISPID_DOM_NODE_ATTRIBUTES)]\n    HRESULT attributes([retval, out] IXMLDOMNamedNodeMap **attributeMap);\n\n    [id(DISPID_DOM_NODE_INSERTBEFORE)]\n    HRESULT insertBefore(\n        [in] IXMLDOMNode *newNode,\n        [in] VARIANT var1,\n        [retval, out] IXMLDOMNode **outOldNode);\n\n    [id(DISPID_DOM_NODE_REPLACECHILD)]\n    HRESULT replaceChild(\n        [in] IXMLDOMNode *newNode,\n        [in] IXMLDOMNode *oldNode,\n        [retval, out] IXMLDOMNode **outOldNode);\n\n    [id(DISPID_DOM_NODE_REMOVECHILD)]\n    HRESULT removeChild(\n        [in] IXMLDOMNode *domNode,\n        [retval, out] IXMLDOMNode **oldNode);\n\n    [id(DISPID_DOM_NODE_APPENDCHILD)]\n    HRESULT appendChild(\n        [in] IXMLDOMNode *newNode,\n        [retval, out] IXMLDOMNode **outNewNode);\n\n    [id(DISPID_DOM_NODE_HASCHILDNODES)]\n    HRESULT hasChildNodes(\n        [retval, out] VARIANT_BOOL *pbool);\n\n    [propget, id(DISPID_DOM_NODE_OWNERDOC)]\n    HRESULT ownerDocument([retval, out] IXMLDOMDocument **domDocument);\n\n    [id(DISPID_DOM_NODE_CLONENODE)]\n    HRESULT cloneNode(\n        [in] VARIANT_BOOL pbool,\n        [retval, out] IXMLDOMNode **outNode);\n\n    [propget, id(DISPID_XMLDOM_NODE_STRINGTYPE)]\n    HRESULT nodeTypeString([retval, out] BSTR *p);\n\n    [propget, id(DISPID_XMLDOM_NODE_TEXT)]\n    HRESULT text([retval, out] BSTR *p);\n\n    [propput, id(DISPID_XMLDOM_NODE_TEXT)]\n    HRESULT text([in] BSTR p);\n\n    [propget, id(DISPID_XMLDOM_NODE_SPECIFIED)]\n    HRESULT specified([retval, out] VARIANT_BOOL *pbool);\n\n    [propget, id(DISPID_XMLDOM_NODE_DEFINITION)]\n    HRESULT definition([retval,out] IXMLDOMNode **domNode);\n\n    [propget, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)]\n    HRESULT nodeTypedValue([retval, out] VARIANT *var1);\n\n    [propput, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)]\n    HRESULT nodeTypedValue([in] VARIANT var1);\n\n    [propget, id(DISPID_XMLDOM_NODE_DATATYPE)]\n    HRESULT dataType([retval, out] VARIANT *var1);\n\n    [propput, id(DISPID_XMLDOM_NODE_DATATYPE)]\n    HRESULT dataType([in] BSTR p);\n\n    [propget, id(DISPID_XMLDOM_NODE_XML)]\n    HRESULT xml([retval, out] BSTR *p);\n\n    [id(DISPID_XMLDOM_NODE_TRANSFORMNODE)]\n    HRESULT transformNode(\n        [in] IXMLDOMNode *domNode,\n        [retval, out] BSTR *p);\n\n    [id(DISPID_XMLDOM_NODE_SELECTNODES)]\n    HRESULT selectNodes(\n        [in] BSTR p,\n        [retval, out] IXMLDOMNodeList **outList);\n\n    [id(DISPID_XMLDOM_NODE_SELECTSINGLENODE)]\n    HRESULT selectSingleNode(\n        [in] BSTR p,\n        [retval, out] IXMLDOMNode **outNode);\n\n    [propget,id(DISPID_XMLDOM_NODE_PARSED)]\n    HRESULT parsed([retval, out] VARIANT_BOOL *pbool);\n\n    [propget, id(DISPID_XMLDOM_NODE_NAMESPACE)]\n    HRESULT namespaceURI([retval, out] BSTR *p);\n\n    [propget, id(DISPID_XMLDOM_NODE_PREFIX)]\n    HRESULT prefix([retval, out] BSTR *p);\n\n    [propget, id(DISPID_XMLDOM_NODE_BASENAME)]\n    HRESULT baseName([retval, out] BSTR *p);\n\n    [id(DISPID_XMLDOM_NODE_TRANSFORMNODETOOBJECT)]\n    HRESULT transformNodeToObject(\n        [in] IXMLDOMNode *domNode,\n        [in] VARIANT var1);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF81-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMDocument : IXMLDOMNode\n{\n    [propget, id(DISPID_DOM_DOCUMENT_DOCTYPE)]\n    HRESULT doctype([retval, out] IXMLDOMDocumentType **docType);\n\n    [propget, id(DISPID_DOM_DOCUMENT_IMPLEMENTATION)]\n    HRESULT implementation([retval, out] IXMLDOMImplementation **impl);\n\n    [propget, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)]\n    HRESULT documentElement([retval, out] IXMLDOMElement **domElement);\n\n    [propputref, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)]\n    HRESULT documentElement([in] IXMLDOMElement *domElement);\n\n    [id(DISPID_DOM_DOCUMENT_CREATEELEMENT)]\n    HRESULT createElement(\n        [in] BSTR p,\n        [retval, out] IXMLDOMElement **domElement);\n\n    [id(DISPID_DOM_DOCUMENT_CREATEDOCUMENTFRAGMENT)]\n    HRESULT createDocumentFragment(\n        [retval, out] IXMLDOMDocumentFragment **docFrag);\n\n    [id(DISPID_DOM_DOCUMENT_CREATETEXTNODE)]\n    HRESULT createTextNode(\n        [in] BSTR p,\n        [retval, out] IXMLDOMText **text);\n\n    [id(DISPID_DOM_DOCUMENT_CREATECOMMENT)]\n    HRESULT createComment(\n        [in] BSTR p,\n        [retval, out] IXMLDOMComment **comment);\n\n    [id(DISPID_DOM_DOCUMENT_CREATECDATASECTION)]\n    HRESULT createCDATASection(\n        [in] BSTR p,\n        [retval, out] IXMLDOMCDATASection **cdata);\n\n    [id(DISPID_DOM_DOCUMENT_CREATEPROCESSINGINSTRUCTION)]\n    HRESULT createProcessingInstruction(\n        [in] BSTR target,\n        [in] BSTR data,\n        [retval, out] IXMLDOMProcessingInstruction **pi);\n\n    [id(DISPID_DOM_DOCUMENT_CREATEATTRIBUTE)]\n    HRESULT createAttribute(\n        [in] BSTR p,\n        [retval, out] IXMLDOMAttribute **attribute);\n\n    [id(DISPID_DOM_DOCUMENT_CREATEENTITYREFERENCE)]\n    HRESULT createEntityReference(\n        [in] BSTR p,\n        [retval, out] IXMLDOMEntityReference **entityRef);\n\n    [id(DISPID_DOM_DOCUMENT_GETELEMENTSBYTAGNAME)]\n    HRESULT getElementsByTagName(\n        [in] BSTR p,\n        [retval, out] IXMLDOMNodeList **resultList);\n\n    [id(DISPID_XMLDOM_DOCUMENT_CREATENODE)]\n    HRESULT createNode(\n        [in] VARIANT var,\n        [in] BSTR name,\n        [in] BSTR uri,\n        [retval, out] IXMLDOMNode **node);\n\n    [id(DISPID_XMLDOM_DOCUMENT_NODEFROMID)]\n    HRESULT nodeFromID(\n        [in] BSTR id,\n        [retval, out] IXMLDOMNode **node);\n\n    [id(DISPID_XMLDOM_DOCUMENT_LOAD)]\n    HRESULT load(\n        [in] VARIANT var1,\n        [retval, out] VARIANT_BOOL *pbool);\n\n    [propget, id(DISPID_READYSTATE)]\n    HRESULT readyState([retval, out] LONG *value);\n\n    [propget, id(DISPID_XMLDOM_DOCUMENT_PARSEERROR)]\n    HRESULT parseError([retval, out] IXMLDOMParseError **err);\n\n    [propget, id(DISPID_XMLDOM_DOCUMENT_URL)]\n    HRESULT url([retval, out] BSTR *p);\n\n    [propget, id(DISPID_XMLDOM_DOCUMENT_ASYNC)]\n    HRESULT async([retval, out] VARIANT_BOOL *pbool);\n\n    [propput, id(DISPID_XMLDOM_DOCUMENT_ASYNC)]\n    HRESULT async([in] VARIANT_BOOL pbool);\n\n    [id(DISPID_XMLDOM_DOCUMENT_ABORT)]\n    HRESULT abort();\n\n    [id(DISPID_XMLDOM_DOCUMENT_LOADXML)]\n    HRESULT loadXML(\n        [in] BSTR p,\n        [out, retval] VARIANT_BOOL *pbool);\n\n    [id(DISPID_XMLDOM_DOCUMENT_SAVE)]\n    HRESULT save(\n        [in] VARIANT var1);\n\n    [propget, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)]\n    HRESULT validateOnParse([retval, out] VARIANT_BOOL *pbool);\n\n    [propput, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)]\n    HRESULT validateOnParse([in] VARIANT_BOOL pbool);\n\n    [propget, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)]\n    HRESULT resolveExternals([retval,out] VARIANT_BOOL *pbool);\n\n    [propput, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)]\n    HRESULT resolveExternals([in] VARIANT_BOOL pbool);\n\n    [propget, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)]\n    HRESULT preserveWhiteSpace([retval,out] VARIANT_BOOL *pbool);\n\n    [propput, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)]\n    HRESULT preserveWhiteSpace([in] VARIANT_BOOL pbool);\n\n    [propput, id(DISPID_XMLDOM_DOCUMENT_ONREADYSTATECHANGE)]\n    HRESULT onreadystatechange([in] VARIANT var1);\n\n    [propput, id(DISPID_XMLDOM_DOCUMENT_ONDATAAVAILABLE)]\n    HRESULT ondataavailable([in] VARIANT var1);\n\n    [propput, id(DISPID_XMLDOM_DOCUMENT_ONTRANSFORMNODE)]\n    HRESULT ontransformnode([in] VARIANT var1);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (373984c8-b845-449b-91e7-45ac83036ade)\n]\ninterface IXMLDOMSchemaCollection : IDispatch\n{\n    [id(DISPID_XMLDOM_SCHEMACOLLECTION_ADD)]\n    HRESULT add(\n        [in] BSTR uri,\n        [in] VARIANT var);\n\n    [id(DISPID_XMLDOM_SCHEMACOLLECTION_GET)]\n    HRESULT get(\n        [in] BSTR uri,\n        [retval, out] IXMLDOMNode **node);\n\n    [id(DISPID_XMLDOM_SCHEMACOLLECTION_REMOVE)]\n    HRESULT remove(\n        [in] BSTR uri);\n\n    [propget, id(DISPID_XMLDOM_SCHEMACOLLECTION_LENGTH)]\n    HRESULT length(\n        [retval, out] LONG *length);\n\n    [propget, id(DISPID_VALUE)]\n    HRESULT namespaceURI([in] LONG index, [out, retval] BSTR *len);\n\n    [id(DISPID_XMLDOM_SCHEMACOLLECTION_ADDCOLLECTION)]\n    HRESULT addCollection(\n        [in] IXMLDOMSchemaCollection *otherCollection);\n\n    [propget, id(DISPID_NEWENUM)]\n    HRESULT _newEnum([retval, out] IUnknown **ppUnk);\n}\n\n[\n    local,\n    object,\n    dual,\n    oleautomation,\n    uuid(50ea08b0-dd1b-4664-9a50-c2f40f4bd79a),\n]\ninterface IXMLDOMSchemaCollection2 : IXMLDOMSchemaCollection\n{\n    [id(DISPID_SOM_VALIDATE)]\n    HRESULT validate();\n\n    [propput, id(DISPID_SOM_VALIDATEONLOAD)]\n    HRESULT validateOnLoad(\n        [in] VARIANT_BOOL validateOnLoad);\n\n    [propget, id(DISPID_SOM_VALIDATEONLOAD)]\n    HRESULT validateOnLoad(\n        [out,retval] VARIANT_BOOL* validateOnLoad);\n\n    [id(DISPID_SOM_GETSCHEMA)]\n    HRESULT getSchema(\n        [in] BSTR namespaceURI,\n        [out,retval] ISchema** schema);\n\n    [id(DISPID_SOM_GETDECLARATION)]\n    HRESULT getDeclaration(\n        [in] IXMLDOMNode* node,\n        [out,retval]ISchemaItem** item);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF95-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMDocument2 : IXMLDOMDocument\n{\n    [propget, id(DISPID_XMLDOM_DOCUMENT2_NAMESPACES)]\n    HRESULT namespaces([retval, out] IXMLDOMSchemaCollection **schemaCollection);\n\n    [propget, id(DISPID_XMLDOM_DOCUMENT2_SCHEMAS)]\n    HRESULT schemas([retval, out] VARIANT *var1);\n\n    [propputref, id(DISPID_XMLDOM_DOCUMENT2_SCHEMAS)]\n    HRESULT schemas([in] VARIANT var1);\n\n    [id(DISPID_XMLDOM_DOCUMENT2_VALIDATE)]\n    HRESULT validate(\n        [retval, out] IXMLDOMParseError **err);\n\n    [id(DISPID_XMLDOM_DOCUMENT2_SETPROPERTY)]\n    HRESULT setProperty(\n        [in] BSTR p,\n        [in] VARIANT var);\n\n    [id(DISPID_XMLDOM_DOCUMENT2_GETPROPERTY)]\n    HRESULT getProperty(\n        [in] BSTR p,\n        [retval, out] VARIANT *var);\n}\n\n[\n    local,\n    object,\n    dual,\n    uuid(2933bf96-7b36-11d2-b20e-00c04f983e60),\n    oleautomation,\n]\ninterface IXMLDOMDocument3 : IXMLDOMDocument2\n{\n    [id(DISPID_XMLDOM_DOCUMENT3_VALIDATENODE)]\n    HRESULT validateNode(\n        [in] IXMLDOMNode *node,\n        [out, retval] IXMLDOMParseError **error);\n\n    [id(DISPID_XMLDOM_DOCUMENT3_IMPORTNODE)]\n    HRESULT importNode(\n        [in] IXMLDOMNode *node,\n        [in] VARIANT_BOOL deep,\n        [out, retval] IXMLDOMNode **clone);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF82-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMNodeList : IDispatch\n{\n    [propget, id(DISPID_VALUE)]\n    HRESULT item([in] LONG lIndex, [retval, out] IXMLDOMNode **outNode);\n\n    [propget, id(DISPID_DOM_NODELIST_LENGTH)]\n    HRESULT length([retval, out] LONG *lLength);\n\n    [id(DISPID_XMLDOM_NODELIST_NEXTNODE)]\n    HRESULT nextNode(\n        [retval, out] IXMLDOMNode **outNode);\n\n    [id(DISPID_XMLDOM_NODELIST_RESET)]\n    HRESULT reset();\n\n    [propget, id(DISPID_NEWENUM)]\n    HRESULT _newEnum([retval, out] IUnknown **ppUnk);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (AA634FC7-5888-44a7-A257-3A47150D3A0E)\n]\ninterface IXMLDOMSelection : IXMLDOMNodeList\n{\n    [propget, id(DISPID_XMLDOM_SELECTION_EXPR)]\n    HRESULT expr([retval, out] BSTR *p);\n\n    [propput, id(DISPID_XMLDOM_SELECTION_EXPR)]\n    HRESULT expr([in] BSTR p);\n\n    [propget, id(DISPID_XMLDOM_SELECTION_CONTEXT)]\n    HRESULT context([retval, out] IXMLDOMNode **ppNode);\n\n    [propputref, id(DISPID_XMLDOM_SELECTION_CONTEXT)]\n    HRESULT context([in] IXMLDOMNode * pNode);\n\n    [id(DISPID_XMLDOM_SELECTION_PEEKNODE)]\n    HRESULT peekNode(\n        [retval, out] IXMLDOMNode **ppNode);\n\n    [id(DISPID_XMLDOM_SELECTION_MATCHES)]\n    HRESULT matches(\n        [in] IXMLDOMNode *pNode,\n        [retval, out] IXMLDOMNode **ppNode);\n\n    [id(DISPID_XMLDOM_SELECTION_REMOVENEXT)]\n    HRESULT removeNext(\n        [retval, out] IXMLDOMNode **ppNode);\n\n    [id(DISPID_XMLDOM_SELECTION_REMOVEALL)]\n    HRESULT removeAll();\n\n    [id(DISPID_XMLDOM_SELECTION_CLONE)]\n    HRESULT clone(\n        [retval, out] IXMLDOMSelection **ppNode);\n\n    [id(DISPID_XMLDOM_SELECTION_GETPROPERTY)]\n    HRESULT getProperty(\n        [in] BSTR p,\n        [retval, out] VARIANT * var);\n\n    [id(DISPID_XMLDOM_SELECTION_SETPROPERTY)]\n    HRESULT setProperty(\n        [in] BSTR p,\n        [in] VARIANT var);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF83-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMNamedNodeMap : IDispatch\n{\n    [id(DISPID_DOM_NAMEDNODEMAP_GETNAMEDITEM)]\n    HRESULT getNamedItem(\n        [in] BSTR p,\n        [retval, out] IXMLDOMNode **outNode);\n\n    [id(DISPID_DOM_NAMEDNODEMAP_SETNAMEDITEM)]\n    HRESULT setNamedItem(\n        [in] IXMLDOMNode *newNode,\n        [retval, out] IXMLDOMNode **outNode);\n\n    [id(DISPID_DOM_NAMEDNODEMAP_REMOVENAMEDITEM)]\n    HRESULT removeNamedItem(\n        [in] BSTR p,\n        [retval, out] IXMLDOMNode **outNode);\n\n    [propget, id(DISPID_VALUE)]\n    HRESULT item([in] LONG lIndex, [retval, out] IXMLDOMNode **outNode);\n\n    [propget, id(DISPID_DOM_NODELIST_LENGTH)]\n    HRESULT length([retval, out] LONG *lLength);\n\n    [id(DISPID_XMLDOM_NAMEDNODEMAP_GETQUALIFIEDITEM)]\n    HRESULT getQualifiedItem(\n        [in] BSTR name,\n        [in] BSTR uri,\n        [retval, out] IXMLDOMNode **outNode);\n\n    [id(DISPID_XMLDOM_NAMEDNODEMAP_REMOVEQUALIFIEDITEM)]\n    HRESULT removeQualifiedItem(\n        [in] BSTR name,\n        [in] BSTR uri,\n        [retval, out] IXMLDOMNode **outNode);\n\n    [id(DISPID_XMLDOM_NAMEDNODEMAP_NEXTNODE)]\n    HRESULT nextNode(\n        [retval, out] IXMLDOMNode **outNode);\n\n    [id(DISPID_XMLDOM_NAMEDNODEMAP_RESET)]\n    HRESULT reset();\n\n    [propget, id(DISPID_NEWENUM)]\n    HRESULT _newEnum([retval, out] IUnknown **ppUnk);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (3efaa413-272f-11d2-836f-0000f87a7782)\n]\ninterface IXMLDOMDocumentFragment : IXMLDOMNode\n{\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF84-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMCharacterData : IXMLDOMNode\n{\n    [propget, id(DISPID_DOM_DATA_DATA)]\n    HRESULT data([retval, out] BSTR *p);\n\n    [propput, id(DISPID_DOM_DATA_DATA)]\n    HRESULT data([in] BSTR data);\n\n    [propget, id(DISPID_DOM_DATA_LENGTH)]\n    HRESULT length([retval, out] LONG *len);\n\n    [id(DISPID_DOM_DATA_SUBSTRING)]\n    HRESULT substringData(\n        [in] LONG offset,\n        [in] LONG count,\n        [retval, out] BSTR *p);\n\n    [id(DISPID_DOM_DATA_APPEND)]\n    HRESULT appendData(\n        [in] BSTR p);\n\n    [id(DISPID_DOM_DATA_INSERT)]\n    HRESULT insertData(\n        [in] LONG offset,\n        [in] BSTR p);\n\n    [id(DISPID_DOM_DATA_DELETE)]\n    HRESULT deleteData(\n        [in] LONG offset,\n        [in] LONG count);\n\n    [id(DISPID_DOM_DATA_REPLACE)]\n    HRESULT replaceData(\n        [in] LONG offset,\n        [in] LONG count,\n        [in] BSTR p);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF85-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMAttribute : IXMLDOMNode\n{\n    [propget, id(DISPID_DOM_ATTRIBUTE_GETNAME)]\n    HRESULT name([retval, out] BSTR *p);\n\n    [propget, id(DISPID_DOM_ATTRIBUTE_VALUE)]\n    HRESULT value([retval, out] VARIANT *var1);\n\n    [propput, id(DISPID_DOM_ATTRIBUTE_VALUE)]\n    HRESULT value([in] VARIANT var1);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF86-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMElement : IXMLDOMNode\n{\n    [propget, id(DISPID_DOM_ELEMENT_GETTAGNAME)]\n    HRESULT tagName([retval, out] BSTR *p);\n\n    [id(DISPID_DOM_ELEMENT_GETATTRIBUTE)]\n    HRESULT getAttribute(\n        [in] BSTR p,\n        [retval, out] VARIANT *var);\n\n    [id(DISPID_DOM_ELEMENT_SETATTRIBUTE)]\n    HRESULT setAttribute(\n        [in] BSTR p,\n        [in] VARIANT var);\n\n    [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTE)]\n    HRESULT removeAttribute(\n        [in] BSTR p);\n\n    [id(DISPID_DOM_ELEMENT_GETATTRIBUTENODE)]\n    HRESULT getAttributeNode(\n        [in] BSTR p,\n        [retval, out] IXMLDOMAttribute **attributeNode);\n\n    [id(DISPID_DOM_ELEMENT_SETATTRIBUTENODE)]\n    HRESULT setAttributeNode(\n        [in] IXMLDOMAttribute *domAttribute,\n        [retval, out] IXMLDOMAttribute **attributeNode);\n\n    [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTENODE)]\n    HRESULT removeAttributeNode(\n        [in] IXMLDOMAttribute *domAttribute,\n        [retval, out] IXMLDOMAttribute **attributeNode);\n\n    [id(DISPID_DOM_ELEMENT_GETELEMENTSBYTAGNAME)]\n    HRESULT getElementsByTagName(\n        [in] BSTR p,\n        [retval, out] IXMLDOMNodeList **resultList);\n\n    [id(DISPID_DOM_ELEMENT_NORMALIZE)]\n    HRESULT normalize();\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF87-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMText : IXMLDOMCharacterData\n{\n    [id(DISPID_DOM_TEXT_SPLITTEXT)]\n    HRESULT splitText(\n        [in] LONG offset,\n        [retval, out] IXMLDOMText **txtNode);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF88-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMComment : IXMLDOMCharacterData\n{\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF89-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMProcessingInstruction : IXMLDOMNode\n{\n    [propget, id(DISPID_DOM_PI_TARGET)]\n    HRESULT target([retval, out] BSTR *p);\n\n    [propget, id(DISPID_DOM_PI_DATA)]\n    HRESULT data([retval, out] BSTR *p);\n\n    [propput, id(DISPID_DOM_PI_DATA)]\n    HRESULT data([in] BSTR p);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF8A-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMCDATASection : IXMLDOMText\n{\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF8B-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMDocumentType : IXMLDOMNode\n{\n    [propget, id(DISPID_DOM_DOCUMENTTYPE_NAME)]\n    HRESULT name([retval, out] BSTR *p);\n\n    [propget, id(DISPID_DOM_DOCUMENTTYPE_ENTITIES)]\n    HRESULT entities([retval, out] IXMLDOMNamedNodeMap **entityMap);\n\n    [propget, id(DISPID_DOM_DOCUMENTTYPE_NOTATIONS)]\n    HRESULT notations([retval, out] IXMLDOMNamedNodeMap **notationMap);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF8C-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMNotation : IXMLDOMNode\n{\n    [propget, id(DISPID_DOM_NOTATION_PUBLICID)]\n    HRESULT publicId([retval, out] VARIANT *id);\n\n    [propget, id(DISPID_DOM_NOTATION_SYSTEMID)]\n    HRESULT systemId([retval, out] VARIANT *id);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF8D-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMEntity : IXMLDOMNode\n{\n    [propget, id(DISPID_DOM_ENTITY_PUBLICID)]\n    HRESULT publicId([retval, out] VARIANT *id1);\n\n    [propget, id(DISPID_DOM_ENTITY_SYSTEMID)]\n    HRESULT systemId([retval, out] VARIANT *id1);\n\n    [propget, id(DISPID_DOM_ENTITY_NOTATIONNAME)]\n    HRESULT notationName([retval, out] BSTR *p);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF8E-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMEntityReference : IXMLDOMNode\n{\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF8F-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXMLDOMImplementation : IDispatch\n{\n    [id(DISPID_DOM_IMPLEMENTATION_HASFEATURE)]\n    HRESULT hasFeature(\n        [in] BSTR feature,\n        [in] BSTR version,\n        [retval, out] VARIANT_BOOL *pbool);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (3efaa425-272f-11d2-836f-0000f87a7782)\n]\ninterface IXTLRuntime : IXMLDOMNode\n{\n    [id(DISPID_XTLRUNTIME_UNIQUEID)]\n    HRESULT uniqueID(\n        [in]IXMLDOMNode *pNode,\n        [retval, out]LONG *pID);\n\n    [id(DISPID_XTLRUNTIME_DEPTH)]\n    HRESULT depth(\n        [in] IXMLDOMNode *pNode,\n        [retval, out]LONG * pDepth);\n\n    [id(DISPID_XTLRUNTIME_CHILDNUMBER)]\n    HRESULT childNumber(\n        [in]IXMLDOMNode *pNode,\n        [retval, out] LONG *pNumber);\n\n    [id(DISPID_XTLRUNTIME_ANCESTORCHILDNUMBER)]\n    HRESULT ancestorChildNumber(\n        [in]BSTR bstr,\n        [in]IXMLDOMNode *pNode,\n        [retval, out]LONG *pNumber);\n\n    [id(DISPID_XTLRUNTIME_ABSOLUTECHILDNUMBER)]\n    HRESULT absoluteChildNumber(\n        [in]IXMLDOMNode *pNode,\n        [retval, out]LONG *pNumber);\n\n    [id(DISPID_XTLRUNTIME_FORMATINDEX)]\n    HRESULT formatIndex(\n        [in] LONG lIndex,\n        [in] BSTR bstr,\n        [retval, out]BSTR *pbstr);\n\n    [id(DISPID_XTLRUNTIME_FORMATNUMBER)]\n    HRESULT formatNumber(\n        [in] double dblNumber,\n        [in] BSTR bstr,\n        [retval, out]BSTR *pbstr);\n\n    [id(DISPID_XTLRUNTIME_FORMATDATE)]\n    HRESULT formatDate(\n        [in] VARIANT var1,\n        [in] BSTR bstr,\n        [optional, in] VARIANT var2,\n        [retval, out]BSTR *pbstr);\n\n    [id(DISPID_XTLRUNTIME_FORMATTIME)]\n    HRESULT formatTime(\n        [in] VARIANT var1,\n        [in] BSTR bstr,\n        [optional, in] VARIANT var2,\n        [retval, out]BSTR *pbstr);\n\n}\n\n[\n    uuid(3efaa427-272f-11d2-836f-0000f87a7782)\n]\ndispinterface XMLDOMDocumentEvents\n{\n    properties:\n    methods:\n    [id (DISPID_XMLDOMEVENT_ONDATAAVAILABLE)]\n    HRESULT ondataavailable();\n\n    [id (DISPID_XMLDOMEVENT_ONREADYSTATECHANGE)]\n    HRESULT onreadystatechange();\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF92-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXSLProcessor : IDispatch\n{\n    [propput, id(DISPID_XMLDOM_PROCESSOR_INPUT)]\n    HRESULT input([in] VARIANT var);\n\n    [propget, id(DISPID_XMLDOM_PROCESSOR_INPUT)]\n    HRESULT input([retval, out] VARIANT *var);\n\n    [propget, id(DISPID_XMLDOM_PROCESSOR_XSLTEMPLATE)]\n    HRESULT ownerTemplate([retval, out] IXSLTemplate **ppTemplate);\n\n    [id(DISPID_XMLDOM_PROCESSOR_SETSTARTMODE)]\n    HRESULT setStartMode(\n        [in] BSTR p,\n        [in, defaultvalue(\"\")] BSTR uri);\n\n    [propget, id(DISPID_XMLDOM_PROCESSOR_STARTMODE)]\n    HRESULT startMode([retval, out] BSTR *p);\n\n    [propget, id(DISPID_XMLDOM_PROCESSOR_STARTMODEURI)]\n    HRESULT startModeURI([retval, out] BSTR *uri);\n\n    [propput, id(DISPID_XMLDOM_PROCESSOR_OUTPUT)]\n    HRESULT output([in] VARIANT var);\n\n    [propget, id(DISPID_XMLDOM_PROCESSOR_OUTPUT)]\n    HRESULT output([retval, out] VARIANT *var);\n\n    [id(DISPID_XMLDOM_PROCESSOR_TRANSFORM)]\n    HRESULT transform(\n        [retval, out] VARIANT_BOOL *pbool);\n\n    [id(DISPID_XMLDOM_PROCESSOR_RESET)]\n    HRESULT reset();\n\n    [propget, id(DISPID_XMLDOM_PROCESSOR_READYSTATE)]\n    HRESULT readyState([retval, out] LONG *pstate);\n\n    [id(DISPID_XMLDOM_PROCESSOR_ADDPARAMETER)]\n    HRESULT addParameter(\n        [in] BSTR p,\n        [in] VARIANT var,\n        [in, defaultvalue(\"\")] BSTR uri);\n\n    [id(DISPID_XMLDOM_PROCESSOR_ADDOBJECT)]\n    HRESULT addObject(\n        [in] IDispatch* obj,\n        [in] BSTR uri);\n\n    [propget, id(DISPID_XMLDOM_PROCESSOR_STYLESHEET)]\n    HRESULT stylesheet([retval, out] IXMLDOMNode **node);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (2933BF93-7B36-11d2-B20E-00C04F983E60)\n]\ninterface IXSLTemplate : IDispatch\n{\n    [propputref, id(DISPID_XMLDOM_TEMPLATE_STYLESHEET)]\n    HRESULT stylesheet([in] IXMLDOMNode *node);\n\n    [propget, id(DISPID_XMLDOM_TEMPLATE_STYLESHEET)]\n    HRESULT stylesheet([retval, out] IXMLDOMNode **node);\n\n    [id(DISPID_XMLDOM_TEMPLATE_CREATEPROCESSOR)]\n    HRESULT createProcessor(\n        [retval, out] IXSLProcessor **ppProcessor);\n}\n\n[\n    object,\n    uuid(ED8C108D-4349-11D2-91A4-00C04F7969E8),\n    odl,\n    dual,\n    oleautomation,\n    pointer_default(unique)\n]\ninterface IXMLHTTPRequest : IDispatch\n{\n    [id(1)]\n    HRESULT open([in] BSTR bstrMethod, [in] BSTR bstrUrl, [in, optional] VARIANT varAsync,\n                 [in,optional] VARIANT username, [in,optional] VARIANT password);\n\n    [id(2)]\n    HRESULT setRequestHeader([in] BSTR bstrHeader, [in] BSTR bstrValue);\n\n    [id(3)]\n    HRESULT getResponseHeader([in] BSTR bstrHeader, [out, retval] BSTR * value);\n\n    [id(4)]\n    HRESULT getAllResponseHeaders([out, retval] BSTR * pbstrHeaders);\n\n    [id(5)]\n    HRESULT send([in, optional] VARIANT body);\n\n    [id(6)]\n    HRESULT abort();\n\n    [propget, id(7)]\n    HRESULT status([out, retval] LONG *pStatus);\n\n    [propget, id(8)]\n    HRESULT statusText([out, retval] BSTR *pStatus);\n\n    [propget, id(9)]\n    HRESULT responseXML([out, retval] IDispatch **pBody);\n\n    [propget, id(10)]\n    HRESULT responseText([out, retval] BSTR *pBody);\n\n    [propget, id(11)]\n    HRESULT responseBody([out, retval] VARIANT *pBody);\n\n    [propget, id(12)]\n    HRESULT responseStream([out, retval] VARIANT *pBody);\n\n    [propget, id(13)]\n    HRESULT readyState([out, retval] LONG *pState);\n\n    [propput, id(14)]\n    HRESULT onreadystatechange([in] IDispatch *pReadyStateSink);\n}\n\n[\nobject,\ndual,\noleautomation,\nuuid(2e9196bf-13ba-4dd4-91ca-6c571f281495)\n]\ninterface IServerXMLHTTPRequest : IXMLHTTPRequest\n{\n    typedef enum _SERVERXMLHTTP_OPTION\n    {\n        SXH_OPTION_URL = -1,\n        SXH_OPTION_URL_CODEPAGE,\n        SXH_OPTION_ESCAPE_PERCENT_IN_URL,\n        SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS,\n        SXH_OPTION_SELECT_CLIENT_SSL_CERT\n    } SERVERXMLHTTP_OPTION;\n\n    [id(15)]\n    HRESULT setTimeouts(\n        [in] long resolveTimeout,\n        [in] long connectTimeout,\n        [in] long sendTimeout,\n        [in] long receiveTimeout);\n\n    [id(16)]\n    HRESULT waitForResponse(\n        [in, optional] VARIANT timeoutInSeconds,\n        [out, retval] VARIANT_BOOL * isSuccessful);\n\n    [id(17)]\n    HRESULT getOption(\n        [in] SERVERXMLHTTP_OPTION option,\n        [out, retval] VARIANT * value);\n\n    [id(18)]\n    HRESULT setOption(\n        [in] SERVERXMLHTTP_OPTION option,\n        [in] VARIANT value);\n}\n\n[\nobject,\ndual,\noleautomation,\nuuid(2e01311b-c322-4b0a-bd77-b90cfdc8dce7)\n]\ninterface IServerXMLHTTPRequest2 : IServerXMLHTTPRequest\n{\n    typedef enum _SXH_PROXY_SETTING\n    {\n        SXH_PROXY_SET_DEFAULT = 0,\n        SXH_PROXY_SET_PRECONFIG = 0,\n        SXH_PROXY_SET_DIRECT,\n        SXH_PROXY_SET_PROXY\n    } SXH_PROXY_SETTING;\n\n    [id(19)]\n    HRESULT setProxy(\n        [in] SXH_PROXY_SETTING proxySetting,\n        [in, optional] VARIANT varProxyServer,\n        [in, optional] VARIANT varBypassList);\n\n    [id(20)]\n    HRESULT setProxyCredentials(\n        [in] BSTR bstrUserName,\n        [in] BSTR bstrPassword);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (3efaa426-272f-11d2-836f-0000f87a7782)\n]\ninterface IXMLDOMParseError : IDispatch\n{\n    [propget, id(DISPID_VALUE)]\n    HRESULT errorCode([retval, out] LONG *errCode);\n\n    [propget, id(DISPID_DOM_ERROR_URL)]\n    HRESULT url([retval, out] BSTR *p);\n\n    [propget, id(DISPID_DOM_ERROR_REASON)]\n    HRESULT reason([retval, out] BSTR *p);\n\n    [propget, id(DISPID_DOM_ERROR_SRCTEXT)]\n    HRESULT srcText([retval, out] BSTR *p);\n\n    [propget, id(DISPID_DOM_ERROR_LINE)]\n    HRESULT line([retval, out] LONG *lineNo);\n\n    [propget, id(DISPID_DOM_ERROR_LINEPOS)]\n    HRESULT linepos([retval, out] LONG * linePos);\n\n    [propget, id(DISPID_DOM_ERROR_FILEPOS)]\n    HRESULT filepos([retval, out] LONG * filePos);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (3efaa428-272f-11d2-836f-0000f87a7782)\n]\ninterface IXMLDOMParseError2 : IXMLDOMParseError\n{\n    [propget, id(DISPID_DOM_ERROR2_ERRORXPATH)]\n    HRESULT errorXPath([retval, out] BSTR *xpathexpr);\n\n    [propget, id(DISPID_DOM_ERROR2_ALLERRORS)]\n    HRESULT allErrors([retval, out] IXMLDOMParseErrorCollection **allErrors);\n\n    [id(DISPID_DOM_ERROR2_ERRORPARAMETERS)]\n    HRESULT errorParameters(\n        [in] long index,\n        [retval, out] BSTR *param);\n\n    [propget, id(DISPID_DOM_ERROR2_ERRORPARAMETERSCOUNT)]\n    HRESULT errorParametersCount([retval, out] long *count);\n}\n\n[\nlocal,\nobject,\ndual,\noleautomation,\nuuid (3efaa429-272f-11d2-836f-0000f87a7782)\n]\ninterface IXMLDOMParseErrorCollection : IDispatch\n{\n    [propget, id(DISPID_VALUE)]\n    HRESULT item(\n        [in] long index,\n        [retval, out] IXMLDOMParseError2 **error);\n\n    [propget, id(DISPID_DOM_ERRORCOLLECTION_LENGTH)]\n    HRESULT length( [retval, out] long *length);\n\n    [propget, id(DISPID_DOM_ERRORCOLLECTION_NEXT)]\n    HRESULT next( [retval, out] IXMLDOMParseError2 **error);\n\n    [id(DISPID_DOM_ERRORCOLLECTION_RESET)]\n    HRESULT reset();\n\n    [propget, hidden, restricted, id(DISPID_NEWENUM)]\n    HRESULT _newEnum( [retval, out] IUnknown **ppunk);\n}\n\n[\n    uuid(F6D90F11-9C73-11D3-B32E-00C04F990BB4)\n]\ncoclass DOMDocument\n{\n    [default] interface IXMLDOMDocument2;\n    [default, source] dispinterface XMLDOMDocumentEvents;\n}\n\n[\n    uuid(f5078f1b-c551-11d3-89b9-0000f81fe221)\n]\ncoclass DOMDocument26\n{\n    [default] interface IXMLDOMDocument2;\n    [default, source] dispinterface XMLDOMDocumentEvents;\n}\n\n[\n    uuid(f5078f32-c551-11d3-89b9-0000f81fe221)\n]\ncoclass DOMDocument30\n{\n    [default] interface IXMLDOMDocument2;\n    [default, source] dispinterface XMLDOMDocumentEvents;\n}\n\n[\n    uuid(88d969c0-f192-11d4-a65f-0040963251e5)\n]\ncoclass DOMDocument40\n{\n    [default] interface IXMLDOMDocument2;\n    [default, source] dispinterface XMLDOMDocumentEvents;\n}\n\n[\n    helpstring(\"XML DOM Document 6.0\"),\n    progid(\"Msxml2.DOMDocument.6.0\"),\n    threading(both),\n    uuid(88d96a05-f192-11d4-a65f-0040963251e5)\n]\ncoclass DOMDocument60\n{\n    [default] interface IXMLDOMDocument3;\n    [default, source] dispinterface XMLDOMDocumentEvents;\n}\n\n[\n    uuid(F6D90F12-9C73-11D3-B32E-00C04F990BB4)\n]\ncoclass FreeThreadedDOMDocument\n{\n    [default] interface IXMLDOMDocument2;\n    [default, source] dispinterface XMLDOMDocumentEvents;\n}\n\n[\n    uuid(f5078f1c-c551-11d3-89b9-0000f81fe221)\n]\ncoclass FreeThreadedDOMDocument26\n{\n    [default] interface IXMLDOMDocument2;\n    [default, source] dispinterface XMLDOMDocumentEvents;\n}\n\n[\n    uuid(f5078f33-c551-11d3-89b9-0000f81fe221)\n]\ncoclass FreeThreadedDOMDocument30\n{\n    [default] interface IXMLDOMDocument2;\n    [default, source] dispinterface XMLDOMDocumentEvents;\n}\n\n[\n    uuid(88d969c1-f192-11d4-a65f-0040963251e5)\n]\ncoclass FreeThreadedDOMDocument40\n{\n    [default] interface IXMLDOMDocument2;\n    [default, source] dispinterface XMLDOMDocumentEvents;\n}\n\n[\n    helpstring(\"Free threaded XML DOM Document 6.0\"),\n    progid(\"Msxml2.FreeThreadedDOMDocument.6.0\"),\n    threading(both),\n    uuid(88d96a06-f192-11d4-a65f-0040963251e5),\n]\ncoclass FreeThreadedDOMDocument60\n{\n    [default] interface IXMLDOMDocument3;\n    [default, source] dispinterface XMLDOMDocumentEvents;\n}\n\n[\n    uuid(f6d90f16-9c73-11d3-b32e-00c04f990bb4)\n]\ncoclass XMLHTTP\n{\n    [default] interface IXMLHTTPRequest;\n}\n\n[\n    uuid(f5078f1e-c551-11d3-89b9-0000f81fe221)\n]\ncoclass XMLHTTP26\n{\n    [default] interface IXMLHTTPRequest;\n}\n\n[\n    uuid(f5078f35-c551-11d3-89b9-0000f81fe221)\n]\ncoclass XMLHTTP30\n{\n    [default] interface IXMLHTTPRequest;\n}\n\n[\n    uuid(88d969c5-f192-11d4-a65f-0040963251e5)\n]\ncoclass XMLHTTP40\n{\n    [default] interface IXMLHTTPRequest;\n}\n\n[\n    helpstring(\"XML HTTP 6.0\"),\n    progid(\"Msxml2.XMLHTTP.6.0\"),\n    threading(apartment),\n    uuid(88d96a0a-f192-11d4-a65f-0040963251e5)\n]\ncoclass XMLHTTP60\n{\n    [default] interface IXMLHTTPRequest;\n}\n\n[\n    uuid(afba6b42-5692-48ea-8141-dc517dcf0ef1)\n]\ncoclass ServerXMLHTTP\n{\n    [default] interface IServerXMLHTTPRequest;\n}\n\n[\n    uuid(afb40ffd-b609-40a3-9828-f88bbe11e4e3)\n]\ncoclass ServerXMLHTTP30\n{\n    [default] interface IServerXMLHTTPRequest;\n}\n\n[\n    uuid(88d969c6-f192-11d4-a65f-0040963251e5)\n]\ncoclass ServerXMLHTTP40\n{\n    [default] interface IServerXMLHTTPRequest2;\n}\n\n[\n    helpstring(\"Server XML HTTP 6.0\"),\n    progid(\"Msxml2.ServerXMLHTTP.6.0\"),\n    threading(apartment),\n    uuid(88d96a0b-f192-11d4-a65f-0040963251e5)\n]\ncoclass ServerXMLHTTP60\n{\n    [default] interface IServerXMLHTTPRequest2;\n}\n\n[\n    uuid(373984c9-b845-449b-91e7-45ac83036ade)\n]\ncoclass XMLSchemaCache\n{\n    [default] interface IXMLDOMSchemaCollection;\n}\n\n[\n    uuid(f5078f1d-c551-11d3-89b9-0000f81fe221)\n]\ncoclass XMLSchemaCache26\n{\n    [default] interface IXMLDOMSchemaCollection;\n}\n\n[\n    uuid(f5078f34-c551-11d3-89b9-0000f81fe221)\n]\ncoclass XMLSchemaCache30\n{\n    [default] interface IXMLDOMSchemaCollection;\n}\n\n[\n    uuid(88d969c2-f192-11d4-a65f-0040963251e5)\n]\ncoclass XMLSchemaCache40\n{\n    [default] interface IXMLDOMSchemaCollection2;\n}\n\n[\n    helpstring(\"XML Schema Cache 6.0\"),\n    progid(\"Msxml2.XMLSchemaCache.6.0\"),\n    threading(both),\n    uuid(88d96a07-f192-11d4-a65f-0040963251e5)\n]\ncoclass XMLSchemaCache60\n{\n    [default] interface IXMLDOMSchemaCollection2;\n}\n\n[\n    uuid(2933BF94-7B36-11d2-B20E-00C04F983E60)\n]\ncoclass XSLTemplate\n{\n    [default] interface IXSLTemplate;\n}\n\n[\n    uuid(f5078f21-c551-11d3-89b9-0000f81fe221)\n]\ncoclass XSLTemplate26\n{\n    [default] interface IXSLTemplate;\n}\n\n[\n    uuid(f5078f36-c551-11d3-89b9-0000f81fe221)\n]\ncoclass XSLTemplate30\n{\n    [default] interface IXSLTemplate;\n}\n\n[\n    uuid(88d969c3-f192-11d4-a65f-0040963251e5)\n]\ncoclass XSLTemplate40\n{\n    [default] interface IXSLTemplate;\n}\n\n[\n    helpstring(\"XSL Template 6.0\"),\n    progid(\"Msxml2.XSLTemplate.6.0\"),\n    threading(both),\n    uuid(88d96a08-f192-11d4-a65f-0040963251e5)\n]\ncoclass XSLTemplate60\n{\n    [default] interface IXSLTemplate;\n}\n\n/*\n * Sax Interfaces\n */\n[\n    object,\n    local,\n    uuid(f078abe1-45d2-4832-91ea-4466ce2f25c9)\n]\ninterface ISAXAttributes : IUnknown\n{\n    HRESULT getLength(\n        [out, retval] int *length);\n\n    HRESULT getURI(\n        [in] int nIndex,\n        [out] const WCHAR **pUrl,\n        [out] int *pUriSize);\n\n    HRESULT getLocalName(\n        [in] int nIndex,\n        [out] const WCHAR **pLocalName,\n        [out] int *pLocalNameLength);\n\n    HRESULT getQName(\n        [in] int nIndex,\n        [out] const WCHAR **pQName,\n        [out] int *pQNameLength);\n\n    HRESULT getName(\n        [in] int nIndex,\n        [out] const WCHAR **pUri,\n        [out] int * pUriLength,\n        [out] const WCHAR ** pLocalName,\n        [out] int * pLocalNameSize,\n        [out] const WCHAR ** pQName,\n        [out] int * pQNameLength);\n\n    HRESULT getIndexFromName(\n        [in] const WCHAR * pUri,\n        [in] int cUriLength,\n        [in] const WCHAR * pLocalName,\n        [in] int cocalNameLength,\n        [out, retval] int * index);\n\n    HRESULT getIndexFromQName(\n        [in] const WCHAR * pQName,\n        [in] int nQNameLength,\n        [out, retval] int * index);\n\n    HRESULT getType(\n        [in] int nIndex,\n        [out] const WCHAR ** pType,\n        [out] int * pTypeLength);\n\n    HRESULT getTypeFromName(\n        [in] const WCHAR * pUri,\n        [in] int nUri,\n        [in] const WCHAR * pLocalName,\n        [in] int nLocalName,\n        [out] const WCHAR ** pType,\n        [out] int * nType);\n\n    HRESULT getTypeFromQName(\n        [in] const WCHAR * pQName,\n        [in] int nQName,\n        [out] const WCHAR ** pType,\n        [out] int * nType);\n\n    HRESULT getValue(\n        [in] int nIndex,\n        [out] const WCHAR ** pValue,\n        [out] int * nValue);\n\n    HRESULT getValueFromName(\n        [in] const WCHAR * pUri,\n        [in] int nUri,\n        [in] const WCHAR * pLocalName,\n        [in] int nLocalName,\n        [out] const WCHAR ** pValue,\n        [out] int * nValue);\n\n    HRESULT getValueFromQName(\n        [in] const WCHAR * pQName,\n        [in] int nQName,\n        [out] const WCHAR ** pValue,\n        [out] int * nValue);\n}\n\n[\n    object,\n    local,\n    uuid(1545cdfa-9e4e-4497-a8a4-2bf7d0112c44)\n]\ninterface ISAXContentHandler : IUnknown\n{\n    HRESULT putDocumentLocator(\n        [in] ISAXLocator * pLocator);\n\n    HRESULT startDocument();\n\n    HRESULT endDocument();\n\n    HRESULT startPrefixMapping(\n        [in] const WCHAR * pPrefix,\n        [in] int nPrefix,\n        [in] const WCHAR * pUri,\n        [in] int nUri);\n\n    HRESULT endPrefixMapping(\n        [in] const WCHAR * pPrefix,\n        [in] int nPrefix);\n\n    HRESULT startElement(\n        [in] const WCHAR * pNamespaceUri,\n        [in] int nNamespaceUri,\n        [in] const WCHAR * pLocalName,\n        [in] int nLocalName,\n        [in] const WCHAR * pQName,\n        [in] int nQName,\n        [in] ISAXAttributes * pAttr);\n\n    HRESULT endElement(\n        [in] const WCHAR * pNamespaceUri,\n        [in] int nNamespaceUri,\n        [in] const WCHAR * pLocalName,\n        [in] int nLocalName,\n        [in] const WCHAR * pQName,\n        [in] int nQName);\n\n    HRESULT characters(\n        [in] const WCHAR * pChars,\n        [in] int nChars);\n\n    HRESULT ignorableWhitespace(\n        [in] const WCHAR * pChars,\n        [in] int nChars);\n\n    HRESULT processingInstruction(\n        [in] const WCHAR * pTarget,\n        [in] int nTarget,\n        [in] const WCHAR * pData,\n        [in] int nData);\n\n    HRESULT skippedEntity(\n        [in] const WCHAR * pName,\n        [in] int nName);\n}\n\n[\n    object,\n    local,\n    uuid(862629ac-771a-47b2-8337-4e6843c1be90)\n]\ninterface ISAXDeclHandler : IUnknown\n{\n    HRESULT elementDecl(\n        [in] const WCHAR * pName,\n        [in] int nName,\n        [in] const WCHAR * pModel,\n        [in] int nModel);\n\n    HRESULT attributeDecl(\n        [in] const WCHAR * pElementName,\n        [in] int nElementName,\n        [in] const WCHAR * pAttributeName,\n        [in] int nAttributeName,\n        [in] const WCHAR * pType,\n        [in] int nType,\n        [in] const WCHAR * pValueDefault,\n        [in] int nValueDefault,\n        [in] const WCHAR * pValue,\n        [in] int nValue);\n\n    HRESULT internalEntityDecl(\n        [in] const WCHAR * pName,\n        [in] int nName,\n        [in] const WCHAR * pValue,\n        [in] int nValue);\n\n    HRESULT externalEntityDecl(\n        [in] const WCHAR * pName,\n        [in] int nName,\n        [in] const WCHAR * pPublicId,\n        [in] int nPublicId,\n        [in] const WCHAR * pSystemId,\n        [in] int nSystemId);\n}\n\n[\n    object,\n    local,\n    uuid(e15c1baf-afb3-4d60-8c36-19a8c45defed)\n]\ninterface ISAXDTDHandler : IUnknown\n{\n    HRESULT notationDecl(\n        [in] const WCHAR * pName,\n        [in] int nName,\n        [in] const WCHAR * pPublicId,\n        [in] int nPublicId,\n        [in] const WCHAR * pSystemId,\n        [in] int nSystemId);\n\n    HRESULT unparsedEntityDecl(\n        [in] const WCHAR * pName,\n        [in] int nName,\n        [in] const WCHAR * pPublicId,\n        [in] int nPublicId,\n        [in] const WCHAR * pSystemId,\n        [in] int nSystemId,\n        [in] const WCHAR * pNotationName,\n        [in] int nNotationName);\n}\n\n[\n    object,\n    local,\n    uuid(99bca7bd-e8c4-4d5f-a0cf-6d907901ff07),\n]\ninterface ISAXEntityResolver : IUnknown\n{\n    HRESULT resolveEntity(\n        [in] const WCHAR * pPublicId,\n        [in] const WCHAR * pSystemId,\n        [out, retval] VARIANT * ret);\n}\n\n[\n    object,\n    local,\n    uuid(a60511c4-ccf5-479e-98a3-dc8dc545b7d0)\n]\ninterface ISAXErrorHandler : IUnknown\n{\n    HRESULT error(\n        [in] ISAXLocator * pLocator,\n        [in] const WCHAR * pErrorMessage,\n        [in] HRESULT hrErrorCode);\n\n    HRESULT fatalError(\n        [in] ISAXLocator * pLocator,\n        [in] const WCHAR * pErrorMessage,\n        [in] HRESULT hrErrorCode);\n\n    HRESULT ignorableWarning(\n        [in] ISAXLocator * pLocator,\n        [in] const WCHAR * pErrorMessage,\n        [in] HRESULT hrErrorCode);\n}\n\n[\n    object,\n    local,\n    uuid(7f85d5f5-47a8-4497-bda5-84ba04819ea6)\n]\ninterface ISAXLexicalHandler : IUnknown\n{\n    HRESULT startDTD(\n        [in] const WCHAR * pName,\n        [in] int nName,\n        [in] const WCHAR * pPublicId,\n        [in] int nPublicId,\n        [in] const WCHAR * pSystemId,\n        [in] int nSystemId);\n\n    HRESULT endDTD();\n\n    HRESULT startEntity(\n        [in] const WCHAR * pName,\n        [in] int nName);\n\n    HRESULT endEntity(\n        [in] const WCHAR * pName,\n        [in] int nName);\n\n    HRESULT startCDATA();\n\n    HRESULT endCDATA();\n\n    HRESULT comment(\n        [in] const WCHAR * pChars,\n        [in] int nChars);\n}\n\n[\n    object,\n    local,\n    uuid(9b7e472a-0de4-4640-bff3-84d38a051c31)\n]\ninterface ISAXLocator : IUnknown\n{\n    HRESULT getColumnNumber(\n        [out, retval] int * nColumn);\n\n    HRESULT getLineNumber(\n        [out, retval] int * nLine);\n\n    HRESULT getPublicId(\n        [out, retval] const WCHAR ** publicId);\n\n    HRESULT getSystemId(\n        [out, retval] const WCHAR ** systemId);\n}\n\n[\n    local,\n    object,\n    uuid(70409222-ca09-4475-acb8-40312fe8d145)\n]\ninterface ISAXXMLFilter : ISAXXMLReader\n{\n    HRESULT getParent(\n        [out, retval] ISAXXMLReader ** pReader);\n    HRESULT putParent(\n        [in] ISAXXMLReader * reader);\n}\n\n[\nlocal,\nobject,\nuuid (a4f96ed0-f829-476e-81c0-cdc7bd2a0802)\n]\ninterface ISAXXMLReader : IUnknown\n{\n    HRESULT getFeature(\n        [in] const WCHAR * pFeature,\n        [out, retval] VARIANT_BOOL * pValue);\n    HRESULT putFeature(\n        [in] const WCHAR * pFeature,\n        [in] VARIANT_BOOL vfValue);\n\n    HRESULT getProperty(\n        [in] const WCHAR * pProp,\n        [out, retval] VARIANT * pValue);\n    HRESULT putProperty(\n        [in] const WCHAR * pProp,\n        [in] VARIANT value);\n\n    HRESULT getEntityResolver(\n        [out, retval] ISAXEntityResolver ** ppEntityResolver);\n    HRESULT putEntityResolver(\n        [in] ISAXEntityResolver * pEntityResolver);\n\n    HRESULT getContentHandler(\n        [out, retval] ISAXContentHandler ** pContentHandler);\n    HRESULT putContentHandler(\n        [in] ISAXContentHandler * contentHandler);\n\n    HRESULT getDTDHandler(\n        [out, retval] ISAXDTDHandler ** pDTDHandler);\n    HRESULT putDTDHandler(\n        [in] ISAXDTDHandler * pDTDHandler);\n\n    HRESULT getErrorHandler(\n        [out, retval] ISAXErrorHandler ** pErrorHandler);\n    HRESULT putErrorHandler(\n        [in] ISAXErrorHandler * errorHandler);\n\n    HRESULT getBaseURL(\n        [out, retval] const WCHAR ** pBaseUrl);\n    HRESULT putBaseURL(\n        [in] const WCHAR * pBaseUrl);\n\n    HRESULT getSecureBaseURL(\n        [out, retval] const WCHAR ** pSecureBaseUrl);\n    HRESULT putSecureBaseURL(\n        [in] const WCHAR * secureBaseUrl);\n\n    HRESULT parse(\n        [in] VARIANT varInput);\n    HRESULT parseURL(\n        [in] const WCHAR * url);\n}\n\n[\n    object,\n    dual,\n    oleautomation,\n    uuid(10dc0586-132b-4cac-8bb3-db00ac8b7ee0)\n]\ninterface IVBSAXAttributes : IDispatch\n{\n    [propget, id(DISPID_SAX_ATTRIBUTES_LENGTH)]\n    HRESULT length( [out, retval] int * nLength);\n\n    [id(DISPID_SAX_ATTRIBUTES_GETURI)]\n    HRESULT getURI( [in] int nIndex, [out, retval] BSTR * uri);\n\n    [id(DISPID_SAX_ATTRIBUTES_GETLOCALNAME)]\n    HRESULT getLocalName( [in] int nIndex, [out, retval] BSTR * localName);\n\n    [id(DISPID_SAX_ATTRIBUTES_GETQNAME)]\n    HRESULT getQName( [in] int nIndex, [out, retval] BSTR * QName);\n\n    [id(DISPID_SAX_ATTRIBUTES_GETINDEXFROMNAME)]\n    HRESULT getIndexFromName( [in] BSTR uri,\n                              [in] BSTR localName, [out, retval] int * nIndex);\n\n    [id(DISPID_SAX_ATTRIBUTES_GETINDEXFROMQNAME)]\n    HRESULT getIndexFromQName( [in] BSTR QName, [out, retval] int * nIndex);\n\n    [id(DISPID_SAX_ATTRIBUTES_GETTYPE)]\n    HRESULT getType( [in] int nIndex, [out, retval] BSTR * type);\n\n    [id(DISPID_SAX_ATTRIBUTES_GETTYPEFROMNAME)]\n    HRESULT getTypeFromName( [in] BSTR uri, [in] BSTR localName,\n                             [out, retval] BSTR * type);\n\n    [id(DISPID_SAX_ATTRIBUTES_GETTYPEFROMQNAME)]\n    HRESULT getTypeFromQName( [in] BSTR QName, [out, retval] BSTR * type);\n\n    [id(DISPID_SAX_ATTRIBUTES_GETVALUE)]\n    HRESULT getValue( [in] int nIndex, [out, retval] BSTR * value);\n\n    [id(DISPID_SAX_ATTRIBUTES_GETVALUEFROMNAME)]\n    HRESULT getValueFromName( [in] BSTR uri,\n                              [in] BSTR localName,\n                              [out, retval] BSTR * value);\n\n    [id(DISPID_SAX_ATTRIBUTES_GETVALUEFROMQNAME)]\n    HRESULT getValueFromQName( [in] BSTR QName, [out, retval] BSTR * value);\n}\n\n[\n    object,\n    dual,\n    oleautomation,\n    uuid(2ed7290a-4dd5-4b46-bb26-4e4155e77faa)\n]\ninterface IVBSAXContentHandler : IDispatch\n{\n    [propputref, id(DISPID_SAX_CONTENTHANDLER_DOCUMENTLOCATOR)]\n    HRESULT documentLocator( [in] IVBSAXLocator * oLocator);\n\n    [id(DISPID_SAX_CONTENTHANDLER_STARTDOCUMENT)]\n    HRESULT startDocument();\n\n    [id(DISPID_SAX_CONTENTHANDLER_ENDDOCUMENT)]\n    HRESULT endDocument();\n\n    [id(DISPID_SAX_CONTENTHANDLER_STARTPREFIXMAPPING)]\n    HRESULT startPrefixMapping( [in, out] BSTR * prefix, [in, out] BSTR * uri);\n\n    [id(DISPID_SAX_CONTENTHANDLER_ENDPREFIXMAPPING)]\n    HRESULT endPrefixMapping( [in, out] BSTR * prefix);\n\n    [id(DISPID_SAX_CONTENTHANDLER_STARTELEMENT)]\n    HRESULT startElement( [in, out] BSTR * namespaceURI,\n                          [in, out] BSTR * localName,\n                          [in, out] BSTR * QName,\n                          [in] IVBSAXAttributes * oAttributes);\n\n    [id(DISPID_SAX_CONTENTHANDLER_ENDELEMENT)]\n    HRESULT endElement( [in, out] BSTR * namespaceURI,\n                        [in, out] BSTR * localName, [in, out] BSTR * strQName);\n\n    [id(DISPID_SAX_CONTENTHANDLER_CHARACTERS)]\n    HRESULT characters( [in, out] BSTR * chars);\n\n    [id(DISPID_SAX_CONTENTHANDLER_IGNORABLEWHITESPACE)]\n    HRESULT ignorableWhitespace( [in, out] BSTR * chars);\n\n    [id(DISPID_SAX_CONTENTHANDLER_PROCESSINGINSTRUCTION)]\n    HRESULT processingInstruction( [in, out] BSTR * target,\n                                   [in, out] BSTR * data);\n\n    [id(DISPID_SAX_CONTENTHANDLER_SKIPPEDENTITY)]\n    HRESULT skippedEntity( [in, out] BSTR * name);\n}\n\n[\n    object,\n    dual,\n    oleautomation,\n    uuid(e8917260-7579-4be1-b5dd-7afbfa6f077b)\n]\ninterface IVBSAXDeclHandler : IDispatch\n{\n    [id(DISPID_SAX_DECLHANDLER_ELEMENTDECL)]\n    HRESULT elementDecl(\n        [in, out] BSTR * name,\n        [in, out] BSTR * model);\n\n    [id(DISPID_SAX_DECLHANDLER_ATTRIBUTEDECL)]\n    HRESULT attributeDecl(\n        [in, out] BSTR * elementName,\n        [in, out] BSTR * attributeName,\n        [in, out] BSTR * type,\n        [in, out] BSTR * valueDefault,\n        [in, out] BSTR * value);\n\n    [id(DISPID_SAX_DECLHANDLER_INTERNALENTITYDECL)]\n    HRESULT internalEntityDecl(\n        [in, out] BSTR * name,\n        [in, out] BSTR * value);\n\n    [id(DISPID_SAX_DECLHANDLER_EXTERNALENTITYDECL)]\n    HRESULT externalEntityDecl(\n        [in, out] BSTR * name,\n        [in, out] BSTR * publicId,\n        [in, out] BSTR * systemId);\n}\n\n[\n    object,\n    dual,\n    oleautomation,\n    uuid(24fb3297-302d-4620-ba39-3a732d850558)\n]\ninterface IVBSAXDTDHandler : IDispatch\n{\n    [id(DISPID_SAX_DTDHANDLER_NOTATIONDECL)]\n    HRESULT notationDecl(\n        [in, out] BSTR * name,\n        [in, out] BSTR * publicId,\n        [in, out] BSTR * systemId);\n\n    [id(DISPID_SAX_DTDHANDLER_UNPARSEDENTITYDECL)]\n    HRESULT unparsedEntityDecl(\n        [in, out] BSTR * name,\n        [in, out] BSTR * publicId,\n        [in, out] BSTR * systemId,\n        [in, out] BSTR * notationName);\n}\n\n[\n    object,\n    dual,\n    oleautomation,\n    uuid(0c05d096-f45b-4aca-ad1a-aa0bc25518dc)\n]\ninterface IVBSAXEntityResolver : IDispatch\n{\n    [id(DISPID_SAX_ENTITYRESOLVER_RESOLVEENTITY)]\n    HRESULT resolveEntity(\n        [in, out] BSTR * publicId,\n        [in, out] BSTR * systemId,\n        [out, retval] VARIANT * ret);\n}\n\n[\n    object,\n    dual,\n    oleautomation,\n    uuid(d963d3fe-173c-4862-9095-b92f66995f52)\n]\ninterface IVBSAXErrorHandler : IDispatch\n{\n    [id(DISPID_SAX_ERRORHANDLER_ERROR)]\n    HRESULT error(\n            [in] IVBSAXLocator * locator,\n\t    [in, out] BSTR * errorMessage,\n            [in] LONG errorCode);\n\n    [id(DISPID_SAX_ERRORHANDLER_FATALERROR)]\n    HRESULT fatalError(\n\t    [in] IVBSAXLocator * locator,\n\t    [in, out] BSTR * errorMessage,\n            [in] LONG errorCode);\n\n    [id(DISPID_SAX_ERRORHANDLER_IGNORABLEWARNING)]\n    HRESULT ignorableWarning(\n\t    [in] IVBSAXLocator * locator,\n\t    [in, out] BSTR * errorMessage,\n            [in] LONG errorCode);\n}\n\n[\n    object,\n    dual,\n    oleautomation,\n    uuid(032aac35-8c0e-4d9d-979f-e3b702935576)\n]\ninterface IVBSAXLexicalHandler : IDispatch\n{\n    [id(DISPID_SAX_LEXICALHANDLER_STARTDTD)]\n    HRESULT startDTD(\n        [in, out] BSTR * name,\n        [in, out] BSTR * publicId,\n        [in, out] BSTR * systemId);\n    [id(DISPID_SAX_LEXICALHANDLER_ENDDTD)]\n    HRESULT endDTD();\n\n    [id(DISPID_SAX_LEXICALHANDLER_STARTENTITY)]\n    HRESULT startEntity([in, out] BSTR * name);\n    [id(DISPID_SAX_LEXICALHANDLER_ENDENTITY)]\n    HRESULT endEntity([in, out] BSTR * name);\n\n    [id(DISPID_SAX_LEXICALHANDLER_STARTCDATA)]\n    HRESULT startCDATA();\n    [id(DISPID_SAX_LEXICALHANDLER_ENDCDATA)]\n    HRESULT endCDATA();\n\n    [id(DISPID_SAX_LEXICALHANDLER_COMMENT)]\n    HRESULT comment( [in, out] BSTR * chars);\n}\n\n[\n    object,\n    dual,\n    oleautomation,\n    uuid(796e7ac5-5aa2-4eff-acad-3faaf01a3288)\n]\ninterface IVBSAXLocator : IDispatch\n{\n    [propget, id(DISPID_SAX_LOCATOR_COLUMNNUMBER)]\n    HRESULT columnNumber( [out, retval] int * column);\n\n    [propget, id(DISPID_SAX_LOCATOR_LINENUMBER)]\n    HRESULT lineNumber( [out, retval] int * line);\n\n    [propget, id(DISPID_SAX_LOCATOR_PUBLICID)]\n    HRESULT publicId( [out, retval] BSTR * publicId);\n\n    [propget, id(DISPID_SAX_LOCATOR_SYSTEMID)]\n    HRESULT systemId( [out, retval] BSTR * systemId);\n}\n\n[\n    object,\n    dual,\n    oleautomation,\n    uuid(1299eb1b-5b88-433e-82de-82ca75ad4e04)\n]\ninterface IVBSAXXMLFilter : IDispatch\n{\n    [propget, id(DISPID_SAX_XMLFILTER_PARENT)]\n    HRESULT parent( [out, retval] IVBSAXXMLReader ** reader);\n    [propputref, id(DISPID_SAX_XMLFILTER_PARENT)]\n    HRESULT parent( [in] IVBSAXXMLReader * reader);\n\n}\n\n[\n    dual,\n    oleautomation,\n    object,\n    uuid (8c033caa-6cd6-4f73-b728-4531af74945f)\n]\ninterface IVBSAXXMLReader : IDispatch\n{\n    [id(DISPID_SAX_XMLREADER_GETFEATURE)]\n    HRESULT getFeature( [in] BSTR pFeature,\n                        [out, retval] VARIANT_BOOL * pValue);\n    [id(DISPID_SAX_XMLREADER_PUTFEATURE)]\n    HRESULT putFeature( [in] BSTR pFeature,\n                        [in] VARIANT_BOOL vfValue);\n\n    [id(DISPID_SAX_XMLREADER_GETPROPERTY)]\n    HRESULT getProperty( [in] BSTR pProp,\n                         [out, retval] VARIANT * pValue);\n    [id(DISPID_SAX_XMLREADER_PUTPROPERTY)]\n    HRESULT putProperty( [in] BSTR pProp, [in] VARIANT value);\n\n    [propget, id(DISPID_SAX_XMLREADER_ENTITYRESOLVER)]\n    HRESULT entityResolver(\n                    [out, retval] IVBSAXEntityResolver ** ppEntityResolver);\n    [propputref, id(DISPID_SAX_XMLREADER_ENTITYRESOLVER)]\n    HRESULT entityResolver( [in] IVBSAXEntityResolver * pEntityResolver);\n\n    [propget, id(DISPID_SAX_XMLREADER_CONTENTHANDLER)]\n    HRESULT contentHandler(\n                        [out, retval] IVBSAXContentHandler ** pContentHandler);\n    [propputref, id(DISPID_SAX_XMLREADER_CONTENTHANDLER)]\n    HRESULT contentHandler([in] IVBSAXContentHandler * contentHandler);\n\n    [propget, id(DISPID_SAX_XMLREADER_DTDHANDLER)]\n    HRESULT dtdHandler([out, retval] IVBSAXDTDHandler ** pDTDHandler);\n    [propputref, id(DISPID_SAX_XMLREADER_DTDHANDLER)]\n    HRESULT dtdHandler([in] IVBSAXDTDHandler * pDTDHandler);\n\n    [propget, id(DISPID_SAX_XMLREADER_ERRORHANDLER)]\n    HRESULT errorHandler([out, retval] IVBSAXErrorHandler ** pErrorHandler);\n    [propputref, id(DISPID_SAX_XMLREADER_ERRORHANDLER)]\n    HRESULT errorHandler([in] IVBSAXErrorHandler * errorHandler);\n\n    [propget, id(DISPID_SAX_XMLREADER_BASEURL)]\n    HRESULT baseURL([out, retval] BSTR *pBaseUrl);\n    [propput, id(DISPID_SAX_XMLREADER_BASEURL)]\n    HRESULT baseURL([in] BSTR pBaseUrl);\n\n    [propget, id(DISPID_SAX_XMLREADER_SECUREBASEURL)]\n    HRESULT secureBaseURL([out, retval] BSTR *pSecureBaseUrl);\n    [propput, id(DISPID_SAX_XMLREADER_SECUREBASEURL)]\n    HRESULT secureBaseURL([in] BSTR secureBaseUrl);\n\n    [id(DISPID_SAX_XMLREADER_PARSE)]\n    HRESULT parse( [in] VARIANT varInput);\n    [id(DISPID_SAX_XMLREADER_PARSEURL)]\n    HRESULT parseURL([in] BSTR url);\n}\n\n[\n    object,\n    dual,\n    oleautomation,\n    uuid(f10d27cc-3ec0-415c-8ed8-77ab1c5e7262)\n]\ninterface IMXAttributes : IDispatch\n{\n    [id(DISPID_MX_ATTRIBUTES_ADDATTRIBUTE)]\n    HRESULT addAttribute(\n        [in] BSTR uri,\n        [in] BSTR localName,\n        [in] BSTR QName,\n        [in] BSTR type,\n        [in] BSTR value);\n\n    [id(DISPID_MX_ATTRIBUTES_ADDATTRIBUTEFROMINDEX)]\n    HRESULT addAttributeFromIndex( [in] VARIANT atts,\n                                   [in] int index);\n\n    [id(DISPID_MX_ATTRIBUTES_CLEAR)]\n    HRESULT clear();\n\n    [id(DISPID_MX_ATTRIBUTES_REMOVEATTRIBUTE)]\n    HRESULT removeAttribute( [in] int index);\n\n    [id(DISPID_MX_ATTRIBUTES_SETATTRIBUTE)]\n    HRESULT setAttribute(\n        [in] int index,\n        [in] BSTR uri,\n        [in] BSTR localName,\n        [in] BSTR QName,\n        [in] BSTR type,\n        [in] BSTR value);\n\n    [id(DISPID_MX_ATTRIBUTES_SETATTRIBUTES)]\n    HRESULT setAttributes( [in] VARIANT atts);\n\n    [id(DISPID_MX_ATTRIBUTES_SETLOCALNAME)]\n    HRESULT setLocalName( [in] int index,\n        [in] BSTR localName);\n\n    [id(DISPID_MX_ATTRIBUTES_SETQNAME)]\n    HRESULT setQName(\n        [in] int index,\n        [in] BSTR QName);\n\n    [id(DISPID_MX_ATTRIBUTES_SETTYPE)]\n    HRESULT setType( [in] int index, [in] BSTR type);\n\n    [id(DISPID_MX_ATTRIBUTES_SETURI)]\n    HRESULT setURI( [in] int index,  [in] BSTR uri);\n\n    [id(DISPID_MX_ATTRIBUTES_SETVALUE)]\n    HRESULT setValue([in] int index, [in] BSTR value);\n}\n\n[\n    local,\n    object,\n    dual,\n    oleautomation,\n    uuid(fa4bb38c-faf9-4cca-9302-d1dd0fe520db)\n]\ninterface IMXSchemaDeclHandler : IDispatch\n{\n    [id(DISPID_MX_SCHEMADECLHANDLER_SCHEMAELEMENTDECL)]\n    HRESULT schemaElementDecl( [in] ISchemaElement *oSchemaElement );\n}\n\n[\n    object,\n    dual,\n    oleautomation,\n    uuid(808f4e35-8d5a-4fbe-8466-33a41279ed30)\n]\ninterface IMXReaderControl : IDispatch\n{\n    [id(DISPID_MX_READER_CONTROL_ABORT)]\n    HRESULT abort();\n\n    [id(DISPID_MX_READER_CONTROL_RESUME)]\n    HRESULT resume();\n\n    [id(DISPID_MX_READER_CONTROL_SUSPEND)]\n    HRESULT suspend();\n}\n\n[\n    object,\n    dual,\n    oleautomation,\n    uuid(4d7ff4ba-1565-4ea8-94e1-6e724a46f98d)\n]\ninterface IMXWriter :  IDispatch\n{\n    [propput, id(DISPID_MX_WRITER_OUTPUT)]\n    HRESULT output ( [in] VARIANT Destination);\n    [propget, id(DISPID_MX_WRITER_OUTPUT)]\n    HRESULT output ( [out, retval] VARIANT * Destination);\n\n    [propput, id(DISPID_MX_WRITER_ENCODING)]\n    HRESULT encoding ([in] BSTR encoding);\n    [propget, id(DISPID_MX_WRITER_ENCODING)]\n    HRESULT encoding ([out, retval] BSTR * encoding);\n\n    [propput, id(DISPID_MX_WRITER_BYTEORDERMARK)]\n    HRESULT byteOrderMark ([in] VARIANT_BOOL writeByteOrderMark);\n    [propget, id(DISPID_MX_WRITER_BYTEORDERMARK)]\n    HRESULT byteOrderMark ([out, retval] VARIANT_BOOL * writeByteOrderMark);\n\n    [propput, id(DISPID_MX_WRITER_INDENT)]\n    HRESULT indent ([in] VARIANT_BOOL indentMode);\n    [propget, id(DISPID_MX_WRITER_INDENT)]\n    HRESULT indent ([out, retval] VARIANT_BOOL * indentMode);\n\n    [propput, id(DISPID_MX_WRITER_STANDALONE)]\n    HRESULT standalone ([in] VARIANT_BOOL value);\n    [propget, id(DISPID_MX_WRITER_STANDALONE)]\n    HRESULT standalone ([out, retval] VARIANT_BOOL * value);\n\n    [propput, id(DISPID_MX_WRITER_OMITXMLDECLARATION)]\n    HRESULT omitXMLDeclaration ([in] VARIANT_BOOL value);\n    [propget, id(DISPID_MX_WRITER_OMITXMLDECLARATION)]\n    HRESULT omitXMLDeclaration ([out, retval] VARIANT_BOOL * value);\n\n    [propput, id(DISPID_MX_WRITER_VERSION)]\n    HRESULT version ([in] BSTR version);\n    [propget, id(DISPID_MX_WRITER_VERSION)]\n    HRESULT version ([out, retval] BSTR * version);\n\n    [propput, id(DISPID_MX_WRITER_DISABLEOUTPUTESCAPING)]\n    HRESULT disableOutputEscaping([in] VARIANT_BOOL value);\n    [propget, id(DISPID_MX_WRITER_DISABLEOUTPUTESCAPING)]\n    HRESULT disableOutputEscaping([out, retval] VARIANT_BOOL * value);\n\n    [id(DISPID_MX_WRITER_FLUSH)]\n    HRESULT flush();\n}\n\n[\n    local,\n    object,\n    dual,\n    oleautomation,\n    uuid(c90352f4-643c-4fbc-bb23-e996eb2d51fd)\n]\ninterface IMXNamespacePrefixes : IDispatch\n{\n    [propget, id(DISPID_VALUE)]\n    HRESULT item(\n        [in] long index,\n        [out, retval] BSTR *prefix);\n\n    [propget, id(DISPID_MX_NSMGR_LENGTH)]\n    HRESULT length( [out,retval] long *length );\n\n    [propget, restricted, hidden, id(DISPID_NEWENUM)]\n    HRESULT _newEnum( [out, retval] IUnknown **ppUnk );\n}\n\n[\n    local,\n    object,\n    hidden,\n    uuid(c90352f6-643c-4fbc-bb23-e996eb2d51fd)\n]\ninterface IMXNamespaceManager : IUnknown\n{\n    HRESULT putAllowOverride([in] VARIANT_BOOL fOverride);\n\n    HRESULT getAllowOverride([out, retval] VARIANT_BOOL *fOverride);\n\n    HRESULT reset();\n\n    HRESULT pushContext();\n\n    HRESULT pushNodeContext(\n        [in] IXMLDOMNode *contextNode,\n        [in] VARIANT_BOOL fDeep);\n\n    HRESULT popContext();\n\n    HRESULT declarePrefix(\n        [in] const WCHAR *prefix,\n        [in] const WCHAR *namespaceURI);\n\n    HRESULT getDeclaredPrefix(\n        [in] long nIndex,\n        [in, out] WCHAR *pwchPrefix,\n        [in, out] int *pcchPrefix);\n\n    HRESULT getPrefix(\n        [in] const WCHAR *pwszNamespaceURI,\n        [in] long nIndex,\n        [in, out] WCHAR *pwchPrefix,\n        [in, out] int *pcchPrefix);\n\n    HRESULT getURI(\n        [in] const WCHAR *pwchPrefix,\n        [in] IXMLDOMNode* pContextNode,\n        [in, out] WCHAR *pwchUri,\n        [in, out] int *pcchUri);\n}\n\n[\n    local,\n    object,\n    dual,\n    oleautomation,\n    uuid(c90352f5-643c-4fbc-bb23-e996eb2d51fd)\n]\ninterface IVBMXNamespaceManager : IDispatch\n{\n    [propput, id(DISPID_MX_NSMGR_ALLOWOVERRIDE)]\n    HRESULT allowOverride([in] VARIANT_BOOL fOverride);\n\n    [propget, id(DISPID_MX_NSMGR_ALLOWOVERRIDE)]\n    HRESULT allowOverride([out,retval] VARIANT_BOOL* fOverride);\n\n    [id(DISPID_MX_NSMGR_RESET)]\n    HRESULT reset();\n\n    [id(DISPID_MX_NSMGR_PUSHCONTEXT)]\n    HRESULT pushContext();\n\n    [id(DISPID_MX_NSMGR_PUSHNODECONTEXT)]\n    HRESULT pushNodeContext(\n        [in] IXMLDOMNode* contextNode,\n        [in, defaultvalue(-1)] VARIANT_BOOL fDeep);\n\n    [id(DISPID_MX_NSMGR_POPCONTEXT)]\n    HRESULT popContext();\n\n    [id(DISPID_MX_NSMGR_DECLAREPREFIX)]\n    HRESULT declarePrefix(\n        [in] BSTR prefix,\n        [in] BSTR namespaceURI);\n\n    [id(DISPID_MX_NSMGR_GETDECLAREDPREFIXES)]\n    HRESULT getDeclaredPrefixes([out, retval] IMXNamespacePrefixes** prefixes);\n\n    [id(DISPID_MX_NSMGR_GETPREFIXES)]\n    HRESULT getPrefixes(\n        [in] BSTR namespaceURI,\n        [out, retval] IMXNamespacePrefixes** prefixes);\n\n    [id(DISPID_MX_NSMGR_GETURI)]\n    HRESULT getURI(\n        [in] BSTR prefix,\n        [out, retval] VARIANT* uri);\n\n    [id(DISPID_MX_NSMGR_GETURIFROMNODE)]\n    HRESULT getURIFromNode(\n        [in] BSTR strPrefix,\n        [in] IXMLDOMNode* contextNode,\n        [out, retval] VARIANT* uri);\n}\n\n[\n    local,\n    object,\n    dual,\n    oleautomation,\n    uuid(c90352f7-643c-4fbc-bb23-e996eb2d51fd)\n]\ninterface IMXXMLFilter : IDispatch\n{\n    [id(DISPID_MXXML_FILTER_GETFEATURE)]\n    HRESULT getFeature(\n        [in] BSTR strName,\n        [out, retval] VARIANT_BOOL * fValue);\n\n    [id(DISPID_MXXML_FILTER_PUTFEATURE)]\n    HRESULT putFeature(\n        [in] BSTR strName,\n        [in] VARIANT_BOOL fValue);\n\n    [id(DISPID_MXXML_FILTER_GETPROPERTY)]\n    HRESULT getProperty(\n        [in] BSTR strName,\n        [out, retval] VARIANT * varValue);\n\n    [id(DISPID_MXXML_FILTER_PUTPROPERTY)]\n    HRESULT putProperty(\n        [in] BSTR strName,\n        [in] VARIANT varValue);\n\n    [id(DISPID_MXXML_FILTER_ENTITYRESOLVER), propget]\n    HRESULT entityResolver( [out, retval] IUnknown **oResolver );\n\n    [id(DISPID_MXXML_FILTER_ENTITYRESOLVER), propputref]\n    HRESULT entityResolver( [in] IUnknown *oResolver );\n\n    [id(DISPID_MXXML_FILTER_CONTENTHANDLER), propget]\n    HRESULT contentHandler( [out, retval] IUnknown **oHandler );\n\n    [id(DISPID_MXXML_FILTER_CONTENTHANDLER), propputref]\n    HRESULT contentHandler( [in] IUnknown *oHandler );\n\n    [id(DISPID_MXXML_FILTER_DTDHANDLER), propget]\n    HRESULT dtdHandler( [out, retval] IUnknown **oHandler );\n\n    [id(DISPID_MXXML_FILTER_DTDHANDLER), propputref]\n    HRESULT dtdHandler( [in] IUnknown *oHandler );\n\n    [id(DISPID_MXXML_FILTER_ERRORHANDLER), propget]\n    HRESULT errorHandler( [out, retval] IUnknown **oHandler );\n\n    [id(DISPID_MXXML_FILTER_ERRORHANDLER), propputref]\n    HRESULT errorHandler( [in] IUnknown *oHandler );\n}\n\n[\n    local,\n    object,\n    uuid(50ea08b1-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual\n]\ninterface ISchemaStringCollection : IDispatch\n{\n    [id(DISPID_VALUE), propget]\n    HRESULT item(\n        [in] long index,\n        [out,retval] BSTR* bstr);\n\n    [id(DISPID_SOM_LENGTH), propget]\n    HRESULT length(\n        [out,retval] long* length);\n\n    [id(DISPID_NEWENUM), hidden, restricted, propget]\n    HRESULT _newEnum(\n        [out,retval] IUnknown** ppunk);\n}\n\n[\n    local,\n    object,\n    uuid(50ea08b2-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual\n]\ninterface ISchemaItemCollection : IDispatch\n{\n    [id(DISPID_VALUE), propget]\n    HRESULT item(\n        [in] long index,\n        [out,retval]ISchemaItem** item);\n\n    [id(DISPID_SOM_ITEMBYNAME)]\n    HRESULT itemByName(\n        [in] BSTR name,\n        [out,retval] ISchemaItem** item);\n\n    [id(DISPID_SOM_ITEMBYQNAME)]\n    HRESULT itemByQName(\n        [in] BSTR name,\n        [in] BSTR namespaceURI,\n        [out,retval] ISchemaItem** item);\n\n    [id(DISPID_SOM_LENGTH), propget]\n    HRESULT length(\n        [out,retval]long* length);\n\n    [id(DISPID_NEWENUM), hidden, restricted, propget]\n    HRESULT _newEnum(\n        [out,retval]IUnknown** ppunk);\n}\n\n[\n    local,\n    object,\n    uuid(50ea08b3-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual\n]\ninterface ISchemaItem : IDispatch\n{\n    [id(DISPID_SOM_NAME), propget]\n    HRESULT name(\n        [out,retval] BSTR* name);\n\n    [id(DISPID_SOM_NAMESPACEURI), propget]\n    HRESULT namespaceURI(\n        [out,retval] BSTR* namespaceURI);\n\n    [id(DISPID_SOM_SCHEMA), propget]\n    HRESULT schema(\n        [out,retval] ISchema** schema);\n\n    [id(DISPID_SOM_ID), propget]\n    HRESULT id(\n        [out,retval] BSTR* id);\n\n    [id(DISPID_SOM_ITEMTYPE), propget]\n    HRESULT itemType(\n        [out,retval] SOMITEMTYPE* itemType);\n\n    [id(DISPID_SOM_UNHANDLEDATTRS), propget]\n    HRESULT unhandledAttributes(\n        [out,retval] IVBSAXAttributes** attributes);\n\n    [id(DISPID_SOM_WRITEANNOTATION)]\n    HRESULT writeAnnotation(\n        [in] IUnknown* annotationSink,\n        [out,retval] VARIANT_BOOL* isWritten);\n}\n\n[\n    local,\n    object,\n    uuid(50ea08b4-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual\n]\ninterface ISchema : ISchemaItem\n{\n    [id(DISPID_SOM_TARGETNAMESPACE), propget]\n    HRESULT targetNamespace(\n        [out,retval] BSTR* targetNamespace);\n\n    [id(DISPID_SOM_VERSION), propget]\n    HRESULT version(\n        [out,retval] BSTR* version);\n\n    [id(DISPID_SOM_TYPES), propget]\n    HRESULT types(\n        [out,retval] ISchemaItemCollection** types);\n\n    [id(DISPID_SOM_ELEMENTS), propget]\n    HRESULT elements(\n        [out,retval] ISchemaItemCollection** elements);\n\n    [id(DISPID_SOM_ATTRIBUTES), propget]\n    HRESULT attributes(\n        [out,retval] ISchemaItemCollection** attributes);\n\n    [id(DISPID_SOM_ATTRIBUTEGROUPS), propget]\n    HRESULT attributeGroups(\n        [out,retval] ISchemaItemCollection** attributeGroups);\n\n    [id(DISPID_SOM_MODELGROUPS), propget]\n    HRESULT modelGroups(\n        [out,retval] ISchemaItemCollection** modelGroups);\n\n    [id(DISPID_SOM_NOTATIONS), propget]\n    HRESULT notations(\n        [out,retval] ISchemaItemCollection** notations);\n\n    [id(DISPID_SOM_SCHEMALOCATIONS), propget]\n    HRESULT schemaLocations(\n        [out,retval] ISchemaStringCollection** schemaLocations);\n}\n\n[\n    local,\n    object,\n    uuid(50ea08b5-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual\n]\ninterface ISchemaParticle : ISchemaItem\n{\n    [id(DISPID_SOM_MINOCCURS), propget]\n    HRESULT minOccurs(\n        [out,retval] VARIANT* minOccurs);\n\n    [id(DISPID_SOM_MAXOCCURS), propget]\n    HRESULT maxOccurs(\n        [out,retval] VARIANT* maxOccurs);\n}\n\n[\n    object,\n    uuid(50ea08b6-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual,\n]\ninterface ISchemaAttribute : ISchemaItem\n{\n    [id(DISPID_SOM_TYPE), propget]\n    HRESULT type(\n        [out,retval] ISchemaType** type);\n\n    [id(DISPID_SOM_SCOPE), propget]\n    HRESULT scope(\n        [out,retval] ISchemaComplexType** scope);\n\n    [id(DISPID_SOM_DEFAULTVALUE), propget]\n    HRESULT defaultValue(\n        [out,retval]BSTR* defaultValue);\n\n    [id(DISPID_SOM_FIXEDVALUE), propget]\n    HRESULT fixedValue(\n        [out,retval] BSTR* fixedValue);\n\n    [id(DISPID_SOM_USE), propget]\n    HRESULT use(\n        [out,retval] SCHEMAUSE* use);\n\n    [id(DISPID_SOM_ISREFERENCE), propget]\n    HRESULT isReference(\n        [out,retval] VARIANT_BOOL* reference);\n}\n\n[\n    local,\n    object,\n    uuid(50ea08b7-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual\n]\ninterface ISchemaElement : ISchemaParticle\n{\n    [id(DISPID_SOM_TYPE), propget]\n    HRESULT type(\n        [out,retval] ISchemaType** type);\n\n    [id(DISPID_SOM_SCOPE), propget]\n    HRESULT scope(\n        [out,retval] ISchemaComplexType** scope);\n\n    [id(DISPID_SOM_DEFAULTVALUE), propget]\n    HRESULT defaultValue(\n        [out,retval] BSTR* defaultValue);\n\n    [id(DISPID_SOM_FIXEDVALUE), propget]\n    HRESULT fixedValue(\n        [out,retval] BSTR* fixedValue);\n\n    [id(DISPID_SOM_ISNILLABLE), propget]\n    HRESULT isNillable(\n        [out,retval] VARIANT_BOOL* nillable);\n\n    [id(DISPID_SOM_IDCONSTRAINTS), propget]\n    HRESULT identityConstraints(\n        [out,retval] ISchemaItemCollection** constraints);\n\n    [id(DISPID_SOM_SUBSTITUTIONGROUP), propget]\n    HRESULT substitutionGroup(\n        [out,retval] ISchemaElement** element);\n\n    [id(DISPID_SOM_EXCLUSIONS), propget]\n    HRESULT substitutionGroupExclusions(\n        [out,retval] SCHEMADERIVATIONMETHOD* exclusions);\n\n    [id(DISPID_SOM_DISALLOWED), propget]\n    HRESULT disallowedSubstitutions(\n        [out,retval] SCHEMADERIVATIONMETHOD* disallowed);\n\n    [id(DISPID_SOM_ISABSTRACT), propget]\n    HRESULT isAbstract(\n        [out,retval] VARIANT_BOOL* abstract);\n\n    [id(DISPID_SOM_ISREFERENCE), propget]\n    HRESULT isReference(\n        [out,retval] VARIANT_BOOL* reference);\n}\n\n[\n    local,\n    object,\n    uuid(50ea08b8-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual\n]\ninterface ISchemaType : ISchemaItem\n{\n    [id(DISPID_SOM_BASETYPES), propget]\n    HRESULT baseTypes(\n        [out,retval] ISchemaItemCollection** baseTypes);\n\n    [id(DISPID_SOM_FINAL), propget]\n    HRESULT final(\n        [out,retval] SCHEMADERIVATIONMETHOD* final);\n\n    [id(DISPID_SOM_VARIETY), propget]\n    HRESULT variety(\n        [out,retval] SCHEMATYPEVARIETY* variety);\n\n    [id(DISPID_SOM_DERIVEDBY), propget]\n    HRESULT derivedBy(\n        [out,retval] SCHEMADERIVATIONMETHOD* derivedBy);\n\n    [id(DISPID_SOM_ISVALID)]\n    HRESULT isValid(\n        [in] BSTR data,\n        [out,retval] VARIANT_BOOL* valid);\n\n    [id(DISPID_SOM_MINEXCLUSIVE), propget]\n    HRESULT minExclusive(\n        [out,retval]BSTR* minExclusive);\n\n    [id(DISPID_SOM_MININCLUSIVE), propget]\n    HRESULT minInclusive(\n        [out,retval] BSTR* minInclusive);\n\n    [id(DISPID_SOM_MAXEXCLUSIVE), propget]\n    HRESULT maxExclusive(\n        [out,retval] BSTR* maxExclusive);\n\n    [id(DISPID_SOM_MAXINCLUSIVE), propget]\n    HRESULT maxInclusive(\n        [out,retval] BSTR* maxInclusive);\n\n    [id(DISPID_SOM_TOTALDIGITS), propget]\n    HRESULT totalDigits(\n        [out,retval] VARIANT* totalDigits);\n\n    [id(DISPID_SOM_FRACTIONDIGITS), propget]\n    HRESULT fractionDigits(\n        [out,retval] VARIANT* fractionDigits);\n\n    [id(DISPID_SOM_LENGTH), propget]\n    HRESULT length(\n        [out,retval] VARIANT* length);\n\n    [id(DISPID_SOM_MINLENGTH), propget]\n    HRESULT minLength(\n        [out,retval]VARIANT* minLength);\n\n    [id(DISPID_SOM_MAXLENGTH), propget]\n    HRESULT maxLength(\n        [out,retval]VARIANT* maxLength);\n\n    [id(DISPID_SOM_ENUMERATION), propget]\n    HRESULT enumeration(\n        [out,retval] ISchemaStringCollection** enumeration);\n\n    [id(DISPID_SOM_WHITESPACE), propget]\n    HRESULT whitespace(\n        [out,retval]SCHEMAWHITESPACE* whitespace);\n\n    [id(DISPID_SOM_PATTERNS), propget]\n    HRESULT patterns(\n        [out,retval] ISchemaStringCollection** patterns);\n}\n\n[\n    local,\n    object,\n    uuid(50ea08b9-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual,\n]\ninterface ISchemaComplexType : ISchemaType\n{\n    [id(DISPID_SOM_ISABSTRACT), propget]\n    HRESULT isAbstract(\n        [out,retval] VARIANT_BOOL* abstract);\n\n    [id(DISPID_SOM_ANYATTRIBUTE), propget]\n    HRESULT anyAttribute(\n        [out,retval] ISchemaAny** anyAttribute);\n\n    [id(DISPID_SOM_ATTRIBUTES), propget]\n    HRESULT attributes(\n        [out,retval] ISchemaItemCollection** attributes);\n\n    [id(DISPID_SOM_CONTENTTYPE), propget]\n    HRESULT contentType(\n        [out,retval] SCHEMACONTENTTYPE* contentType);\n\n    [id(DISPID_SOM_CONTENTMODEL), propget]\n    HRESULT contentModel(\n        [out,retval] ISchemaModelGroup** contentModel);\n\n    [id(DISPID_SOM_PROHIBITED), propget]\n    HRESULT prohibitedSubstitutions(\n        [out,retval] SCHEMADERIVATIONMETHOD* prohibited);\n}\n\n[\n    local,\n    object,\n    uuid(50ea08ba-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual,\n]\ninterface ISchemaAttributeGroup : ISchemaItem\n{\n    [id(DISPID_SOM_ANYATTRIBUTE), propget]\n    HRESULT anyAttribute(\n        [out,retval] ISchemaAny** anyAttribute);\n\n    [id(DISPID_SOM_ATTRIBUTES), propget]\n        HRESULT attributes(\n            [out,retval] ISchemaItemCollection** attributes);\n}\n\n[\n    local,\n    object,\n    uuid(50ea08bb-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual,\n]\ninterface ISchemaModelGroup : ISchemaParticle\n{\n    [id(DISPID_SOM_PARTICLES), propget]\n    HRESULT particles(\n        [out,retval] ISchemaItemCollection** particles);\n}\n\n[\n    local,\n    object,\n    uuid(50ea08bc-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual\n]\ninterface ISchemaAny : ISchemaParticle\n{\n    [id(DISPID_SOM_NAMESPACES), propget]\n    HRESULT namespaces(\n        [out,retval] ISchemaStringCollection** namespaces);\n\n    [id(DISPID_SOM_PROCESSCONTENTS), propget]\n    HRESULT processContents(\n        [out,retval] SCHEMAPROCESSCONTENTS* processContents);\n}\n\n[\n    local,\n    object,\n    uuid(50ea08bd-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual\n]\ninterface ISchemaIdentityConstraint : ISchemaItem\n{\n    [id(DISPID_SOM_SELECTOR), propget]\n    HRESULT selector(\n        [out,retval] BSTR* selector);\n\n    [id(DISPID_SOM_FIELDS), propget]\n        HRESULT fields(\n            [out,retval] ISchemaStringCollection** fields);\n\n    [id(DISPID_SOM_REFERENCEDKEY), propget]\n    HRESULT referencedKey(\n        [out,retval] ISchemaIdentityConstraint** key);\n}\n\n[\n    local,\n    object,\n    uuid(50ea08be-dd1b-4664-9a50-c2f40f4bd79a),\n    oleautomation,\n    dual\n]\ninterface ISchemaNotation : ISchemaItem\n{\n    [id(DISPID_SOM_SYSTEMIDENTIFIER), propget]\n    HRESULT systemIdentifier(\n        [out,retval] BSTR* uri);\n\n    [id(DISPID_SOM_PUBLICIDENTIFIER), propget]\n    HRESULT publicIdentifier(\n        [out,retval] BSTR* uri);\n}\n\n\n[\n    uuid(079aa557-4a18-424a-8eee-e39f0a8d41b9)\n]\ncoclass SAXXMLReader\n{\n    [default] interface IVBSAXXMLReader;\n    interface ISAXXMLReader;\n    interface IMXReaderControl;\n}\n\n[\n    uuid(3124c396-fb13-4836-a6ad-1317f1713688)\n]\ncoclass SAXXMLReader30\n{\n    [default] interface IVBSAXXMLReader;\n    interface ISAXXMLReader;\n    interface IMXReaderControl;\n}\n\n[\n    uuid(7c6e29bc-8b8b-4c3d-859e-af6cd158be0f)\n]\ncoclass SAXXMLReader40\n{\n    [default] interface IVBSAXXMLReader;\n    interface ISAXXMLReader;\n}\n\n[\n    helpstring(\"SAX XML Reader 6.0\"),\n    progid(\"Msxml2.SAXXMLReader.6.0\"),\n    threading(both),\n    uuid(88d96a0c-f192-11d4-a65f-0040963251e5)\n]\ncoclass SAXXMLReader60\n{\n    [default] interface IVBSAXXMLReader;\n    interface ISAXXMLReader;\n}\n\n[\n    uuid(a4c23ec3-6b70-4466-9127-550077239978)\n]\ncoclass MXHTMLWriter\n{\n    [default] interface IMXWriter;\n\n    interface ISAXContentHandler;\n    interface ISAXErrorHandler;\n    interface ISAXDTDHandler;\n    interface ISAXLexicalHandler;\n    interface ISAXDeclHandler;\n\n    interface IVBSAXContentHandler;\n    interface IVBSAXDeclHandler;\n    interface IVBSAXDTDHandler;\n    interface IVBSAXErrorHandler;\n    interface IVBSAXLexicalHandler;\n}\n\n[\n    uuid(853d1540-c1a7-4aa9-a226-4d3bd301146d)\n]\ncoclass MXHTMLWriter30\n{\n    [default] interface IMXWriter;\n\n    interface ISAXContentHandler;\n    interface ISAXDeclHandler;\n    interface ISAXDTDHandler;\n    interface ISAXErrorHandler;\n    interface ISAXLexicalHandler;\n\n    interface IVBSAXContentHandler;\n    interface IVBSAXDeclHandler;\n    interface IVBSAXDTDHandler;\n    interface IVBSAXErrorHandler;\n    interface IVBSAXLexicalHandler;\n}\n\n[\n    uuid(88d969c9-f192-11d4-a65f-0040963251e5)\n]\ncoclass MXHTMLWriter40\n{\n    [default] interface IMXWriter;\n\n    interface ISAXContentHandler;\n    interface ISAXDeclHandler;\n    interface ISAXDTDHandler;\n    interface ISAXErrorHandler;\n    interface ISAXLexicalHandler;\n\n    interface IVBSAXContentHandler;\n    interface IVBSAXDeclHandler;\n    interface IVBSAXDTDHandler;\n    interface IVBSAXErrorHandler;\n    interface IVBSAXLexicalHandler;\n}\n\n[\n    helpstring(\"MXHTMLWriter 6.0\"),\n    progid(\"Msxml2.MXHTMLWriter.6.0\"),\n    threading(both),\n    uuid(88d96a10-f192-11d4-a65f-0040963251e5)\n]\ncoclass MXHTMLWriter60\n{\n    [default] interface IMXWriter;\n\n    interface ISAXContentHandler;\n    interface ISAXDeclHandler;\n    interface ISAXDTDHandler;\n    interface ISAXErrorHandler;\n    interface ISAXLexicalHandler;\n\n    interface IVBSAXContentHandler;\n    interface IVBSAXDeclHandler;\n    interface IVBSAXDTDHandler;\n    interface IVBSAXErrorHandler;\n    interface IVBSAXLexicalHandler;\n}\n\n[\n    uuid(fc220ad8-a72a-4ee8-926e-0b7ad152a020)\n]\ncoclass MXXMLWriter\n{\n    [default] interface IMXWriter;\n\n    interface ISAXContentHandler;\n    interface ISAXErrorHandler;\n    interface ISAXDTDHandler;\n    interface ISAXLexicalHandler;\n    interface ISAXDeclHandler;\n\n    interface IVBSAXContentHandler;\n    interface IVBSAXDeclHandler;\n    interface IVBSAXDTDHandler;\n    interface IVBSAXErrorHandler;\n    interface IVBSAXLexicalHandler;\n}\n\n[\n    uuid(3d813dfe-6c91-4a4e-8f41-04346a841d9c)\n]\ncoclass MXXMLWriter30\n{\n    [default] interface IMXWriter;\n\n    interface ISAXContentHandler;\n    interface ISAXDeclHandler;\n    interface ISAXDTDHandler;\n    interface ISAXErrorHandler;\n    interface ISAXLexicalHandler;\n\n    interface IVBSAXContentHandler;\n    interface IVBSAXDeclHandler;\n    interface IVBSAXDTDHandler;\n    interface IVBSAXErrorHandler;\n    interface IVBSAXLexicalHandler;\n}\n\n[\n    uuid(88d969c8-f192-11d4-a65f-0040963251e5),\n]\ncoclass MXXMLWriter40\n{\n    [default] interface IMXWriter;\n\n    interface ISAXContentHandler;\n    interface ISAXDeclHandler;\n    interface ISAXDTDHandler;\n    interface ISAXErrorHandler;\n    interface ISAXLexicalHandler;\n\n    interface IVBSAXContentHandler;\n    interface IVBSAXDeclHandler;\n    interface IVBSAXDTDHandler;\n    interface IVBSAXErrorHandler;\n    interface IVBSAXLexicalHandler;\n}\n\n[\n    helpstring(\"MXXMLWriter 6.0\"),\n    progid(\"Msxml2.MXXMLWriter.6.0\"),\n    threading(both),\n    uuid(88d96a0f-f192-11d4-a65f-0040963251e5)\n]\ncoclass MXXMLWriter60\n{\n    [default] interface IMXWriter;\n\n    interface ISAXContentHandler;\n    interface ISAXDeclHandler;\n    interface ISAXDTDHandler;\n    interface ISAXErrorHandler;\n    interface ISAXLexicalHandler;\n\n    interface IVBSAXContentHandler;\n    interface IVBSAXDeclHandler;\n    interface IVBSAXDTDHandler;\n    interface IVBSAXErrorHandler;\n    interface IVBSAXLexicalHandler;\n}\n\n[\n    uuid(88d969d5-f192-11d4-a65f-0040963251e5)\n]\ncoclass MXNamespaceManager\n{\n    [default] interface IVBMXNamespaceManager;\n    interface IMXNamespaceManager;\n}\n\n[\n    uuid(88d969d6-f192-11d4-a65f-0040963251e5)\n]\ncoclass MXNamespaceManager40\n{\n    [default] interface IVBMXNamespaceManager;\n    interface IMXNamespaceManager;\n}\n\n[\n    helpstring(\"MXNamespaceManager 6.0\"),\n    progid(\"Msxml2.MXNamespaceManager.6.0\"),\n    threading(both),\n    uuid(88d96a11-f192-11d4-a65f-0040963251e5)\n]\ncoclass MXNamespaceManager60\n{\n    [default] interface IVBMXNamespaceManager;\n    interface IMXNamespaceManager;\n}\n\n[\n    uuid(4dd441ad-526d-4a77-9f1b-9841ed802fb0)\n]\ncoclass SAXAttributes\n{\n    [default] interface IMXAttributes;\n    interface IVBSAXAttributes;\n    interface ISAXAttributes;\n}\n\n[\n    uuid(3e784a01-f3ae-4dc0-9354-9526b9370eba)\n]\ncoclass SAXAttributes30\n{\n    [default] interface IMXAttributes;\n    interface IVBSAXAttributes;\n    interface ISAXAttributes;\n}\n\n[\n    uuid(88d969ca-f192-11d4-a65f-0040963251e5),\n]\ncoclass SAXAttributes40\n{\n    [default] interface IMXAttributes;\n    interface IVBSAXAttributes;\n    interface ISAXAttributes;\n}\n\n[\n    helpstring(\"SAXAttributes 6.0\"),\n    progid(\"Msxml2.SAXAttributes.6.0\"),\n    threading(both),\n    uuid(88d96a0e-f192-11d4-a65f-0040963251e5)\n]\ncoclass SAXAttributes60\n{\n    [default] interface IMXAttributes;\n    interface IVBSAXAttributes;\n    interface ISAXAttributes;\n}\n\n/*\n * Error Codes\n */\ncpp_quote(\"#define E_XML_NOTWF              0xC00CE223\")\ncpp_quote(\"#define E_XML_NODTD              0xC00CE224\")\ncpp_quote(\"#define E_XML_INVALID            0xC00CE225\")\ncpp_quote(\"#define E_XML_BUFFERTOOSMALL     0xC00CE226\")\n\n} /* Library MSXML */\n"
  },
  {
    "path": "wine/windows/msxml6did.h",
    "content": "/*\n * Copyright (C) 2010 Nikolay Sivov for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __MSXML6DID_H__\n#define __MSXML6DID_H__\n\n#include <msxml2did.h>\n\n#endif /* __MSXML6DID_H__ */\n"
  },
  {
    "path": "wine/windows/msxmldid.h",
    "content": "/*\n * Copyright (C) 2005 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __MSXMLDID_H__\n#define __MSXMLDID_H__\n\n#define DISPID_XOBJ_MIN                     0x10000\n#define DISPID_XOBJ_MAX                     0x1FFFF\n#define DISPID_XOBJ_BASE                    0x10000\n\n#define DISPID_XMLELEMENTCOLLECTION         0x10000\n#define DISPID_XMLELEMENTCOLLECTION_LENGTH  0x10001\n#define DISPID_XMLELEMENTCOLLECTION_NEWENUM DISPID_NEWENUM\n#define DISPID_XMLELEMENTCOLLECTION_ITEM    0x10003\n\n#define DISPID_XMLDOCUMENT                  0x10064\n#define DISPID_XMLDOCUMENT_ROOT             0x10065\n#define DISPID_XMLDOCUMENT_FILESIZE         0x10066\n#define DISPID_XMLDOCUMENT_FILEMODIFIEDDATE 0x10067\n#define DISPID_XMLDOCUMENT_FILEUPDATEDDATE  0x10068\n#define DISPID_XMLDOCUMENT_URL              0x10069\n#define DISPID_XMLDOCUMENT_MIMETYPE         0x1006a\n#define DISPID_XMLDOCUMENT_READYSTATE       0x1006b\n#define DISPID_XMLDOCUMENT_CREATEELEMENT    0x1006c\n#define DISPID_XMLDOCUMENT_CHARSET          0x1006d\n#define DISPID_XMLDOCUMENT_VERSION          0x1006e\n#define DISPID_XMLDOCUMENT_DOCTYPE          0x1006f\n#define DISPID_XMLDOCUMENT_DTDURL           0x10070\n#define DISPID_XMLDOCUMENT_ASYNC            0x10071\n#define DISPID_XMLDOCUMENT_CASEINSENSITIVE  0x10072\n\n#define DISPID_XMLELEMENT                   0x100c8\n#define DISPID_XMLELEMENT_TAGNAME           0x100c9\n#define DISPID_XMLELEMENT_PARENT            0x100ca\n#define DISPID_XMLELEMENT_SETATTRIBUTE      0x100cb\n#define DISPID_XMLELEMENT_GETATTRIBUTE      0x100cc\n#define DISPID_XMLELEMENT_REMOVEATTRIBUTE   0x100cd\n#define DISPID_XMLELEMENT_CHILDREN          0x100ce\n#define DISPID_XMLELEMENT_TYPE              0x100cf\n#define DISPID_XMLELEMENT_TEXT              0x100d0\n#define DISPID_XMLELEMENT_ADDCHILD          0x100d1\n#define DISPID_XMLELEMENT_REMOVECHILD       0x100d2\n#define DISPID_XMLELEMENT_ATTRIBUTES        0x100d3\n\n#define DISPID_XMLNOTIFSINK                 0x1012c\n#define DISPID_XMLNOTIFSINK_CHILDADDED      0x1012d\n\n#define DISPID_XMLATTRIBUTE                 0x10190\n#define DISPID_XMLATTRIBUTE_NAME            0x10191\n#define DISPID_XMLATTRIBUTE_VALUE           0x10192\n\n#endif /* __MSXMLDID_H__ */\n"
  },
  {
    "path": "wine/windows/mtxdm.h",
    "content": "/*\n * Copyright (C) 2017 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __MTXDM_H__\n#define __MTXDM_H__\n\n#include \"comsvcs.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nHRESULT CDECL GetDispenserManager(IDispenserManager**);\n\n#ifdef __cplusplus\n}\n#endif\n\n\n#endif\n"
  },
  {
    "path": "wine/windows/multimon.h",
    "content": "/*\n * Copyright (C) 2017 Alex Henrie\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n/* This file intentionally left blank */\n"
  },
  {
    "path": "wine/windows/nb30.h",
    "content": "/*\n * Copyright (C) 2001 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef NCB_INCLUDED\n#define NCB_INCLUDED\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define NCBNAMSZ 16\n#define MAX_LANA 0xfe\n\n#define NCBCALL        0x10\n#define NCBLISTEN      0x11\n#define NCBHANGUP      0x12\n#define NCBSEND        0x14\n#define NCBRECV        0x15\n#define NCBRECVANY     0x16\n#define NCBCHAINSEND   0x17\n#define NCBDGSEND      0x20\n#define NCBDGRECV      0x21\n#define NCBDGSENDBC    0x22\n#define NCBDGRECVBC    0x23\n#define NCBADDNAME     0x30\n#define NCBDELNAME     0x31\n#define NCBRESET       0x32\n#define NCBASTAT       0x33\n#define NCBSSTAT       0x34\n#define NCBCANCEL      0x35\n#define NCBADDGRNAME   0x36\n#define NCBENUM        0x37\n#define NCBUNLINK      0x70\n#define NCBSENDNA      0x71\n#define NCBCHAINSENDNA 0x72\n#define NCBLANSTALERT  0x73\n#define NCBACTION      0x77\n#define NCBFINDNAME    0x78\n#define NCBTRACE       0x79\n\n#define ASYNCH         0x80\n\ntypedef struct _NCB\n{\n\tUCHAR\tncb_command;\n\tUCHAR\tncb_retcode;\n\tUCHAR\tncb_lsn;\n\tUCHAR\tncb_num;\n\tPUCHAR\tncb_buffer;\n\tWORD\tncb_length;\n\tUCHAR\tncb_callname[NCBNAMSZ];\n\tUCHAR\tncb_name[NCBNAMSZ];\n\tUCHAR\tncb_rto;\n\tUCHAR\tncb_sto;\n\tVOID\t(CALLBACK *ncb_post)(struct _NCB *);\n\tUCHAR\tncb_lana_num;\n\tUCHAR\tncb_cmd_cplt;\n#ifdef _WIN64\n\tUCHAR\tncb_reserve[18];\n#else\n\tUCHAR\tncb_reserve[10];\n#endif\n\tHANDLE\tncb_event;\n} NCB, *PNCB;\n\ntypedef struct _ADAPTER_STATUS\n{\n\tUCHAR   adapter_address[6];\n\tUCHAR\trev_major;\n\tUCHAR\treserved0;\n\tUCHAR\tadapter_type;\n\tUCHAR\trev_minor;\n\tWORD\tduration;\n\tWORD\tfrmr_recv;\n\tWORD\tfrmr_xmit;\n\tWORD\tiframe_recv_error;\n\tWORD\txmit_aborts;\n\tDWORD\txmit_success;\n\tDWORD\trecv_success;\n\tWORD\tiframe_xmit_error;\n\tWORD\trecv_buffer_unavail;\n\tWORD\tt1_timeouts;\n\tWORD\tti_timeouts;\n\tDWORD\treserved1;\n\tWORD\tfree_ncbs;\n\tWORD\tmax_cfg_ncbs;\n\tWORD\tmax_ncbs;\n\tWORD\txmit_buf_unavail;\n\tWORD\tmax_dgram_size;\n\tWORD\tpending_sess;\n\tWORD\tmax_cfg_sess;\n\tWORD\tmax_sess;\n\tWORD\tmax_sess_pkt_size;\n\tWORD\tname_count;\n} ADAPTER_STATUS, *PADAPTER_STATUS;\n\ntypedef struct _NAME_BUFFER\n{\n  UCHAR name[NCBNAMSZ];\n  UCHAR name_num;\n  UCHAR name_flags;\n} NAME_BUFFER, *PNAME_BUFFER;\n\n#define NAME_FLAGS_MASK 0x87\n#define GROUP_NAME      0x80\n#define UNIQUE_NAME     0x00\n#define REGISTERING     0x00\n#define REGISTERED      0x04\n#define DEREGISTERED    0x05\n#define DUPLICATE       0x06\n#define DUPLICATE_DEREG 0x07\n\ntypedef struct _LANA_ENUM\n{\n\tUCHAR length;\n\tUCHAR lana[MAX_LANA+1];\n} LANA_ENUM, *PLANA_ENUM;\n\ntypedef struct _FIND_NAME_HEADER\n{\n  WORD  node_count;\n  UCHAR reserved;\n  UCHAR unique_group;\n} FIND_NAME_HEADER, *PFIND_NAME_HEADER;\n\ntypedef struct _FIND_NAME_BUFFER\n{\n  UCHAR length;\n  UCHAR access_control;\n  UCHAR frame_control;\n  UCHAR destination_addr[6];\n  UCHAR source_addr[6];\n  UCHAR routing_info[6];\n} FIND_NAME_BUFFER, *PFIND_NAME_BUFFER;\n\ntypedef struct _SESSION_HEADER {\n  UCHAR sess_name;\n  UCHAR num_sess;\n  UCHAR rcv_dg_outstanding;\n  UCHAR rcv_any_outstanding;\n} SESSION_HEADER, *PSESSION_HEADER;\n\ntypedef struct _SESSION_BUFFER {\n  UCHAR lsn;\n  UCHAR state;\n  UCHAR local_name[NCBNAMSZ];\n  UCHAR remote_name[NCBNAMSZ];\n  UCHAR rcvs_outstanding;\n  UCHAR sends_outstanding;\n} SESSION_BUFFER, *PSESSION_BUFFER;\n\n#define LISTEN_OUTSTANDING  0x01\n#define CALL_PENDING        0x02\n#define SESSION_ESTABLISHED 0x03\n#define HANGUP_PENDING      0x04\n#define HANGUP_COMPLETE     0x05\n#define SESSION_ABORTED     0x06\n\n#define ALL_TRANSPORTS \"M\\0\\0\\0\"\n\n#define NRC_GOODRET     0x00\n#define NRC_BUFLEN      0x01\n#define NRC_ILLCMD      0x03\n#define NRC_CMDTMO      0x05\n#define NRC_INCOMP      0x06\n#define NRC_BADDR       0x07\n#define NRC_SNUMOUT     0x08\n#define NRC_NORES       0x09\n#define NRC_SCLOSED     0x0a\n#define NRC_CMDCAN      0x0b\n#define NRC_DUPNAME     0x0d\n#define NRC_NAMTFUL     0x0e\n#define NRC_ACTSES      0x0f\n#define NRC_LOCTFUL     0x11\n#define NRC_REMTFUL     0x12\n#define NRC_ILLNN       0x13\n#define NRC_NOCALL      0x14\n#define NRC_NOWILD      0x15\n#define NRC_INUSE       0x16\n#define NRC_NAMERR      0x17\n#define NRC_SABORT      0x18\n#define NRC_NAMCONF     0x19\n#define NRC_IFBUSY      0x21\n#define NRC_TOOMANY     0x22\n#define NRC_BRIDGE      0x23\n#define NRC_CANOCCR     0x24\n#define NRC_CANCEL      0x26\n#define NRC_DUPENV      0x30\n#define NRC_ENVNOTDEF   0x34\n#define NRC_OSRESNOTAV  0x35\n#define NRC_MAXAPPS     0x36\n#define NRC_NOSAPS      0x37\n#define NRC_NORESOURCES 0x38\n#define NRC_INVADDRESS  0x39\n#define NRC_INVDDID     0x3b\n#define NRC_LOCKFAIL    0x3c\n#define NRC_OPENERROR   0x3f\n#define NRC_SYSTEM      0x40\n#define NRC_PENDING     0xff\n\nUCHAR WINAPI Netbios(PNCB pncb);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* NCB_INCLUDED */\n"
  },
  {
    "path": "wine/windows/ncrypt.h",
    "content": "/*\n * Copyright (c) 2016 Austin English\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __NCRYPT_H__\n#define __NCRYPT_H__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef WINAPI\n#define WINAPI __stdcall\n#endif\n\n#ifndef __SECSTATUS_DEFINED__\ntypedef LONG SECURITY_STATUS;\n#define __SECSTATUS_DEFINED__\n#endif\n\ntypedef ULONG_PTR NCRYPT_HANDLE;\ntypedef ULONG_PTR NCRYPT_PROV_HANDLE;\ntypedef ULONG_PTR NCRYPT_KEY_HANDLE;\ntypedef ULONG_PTR NCRYPT_HASH_HANDLE;\ntypedef ULONG_PTR NCRYPT_SECRET_HANDLE;\n\nSECURITY_STATUS WINAPI NCryptCreatePersistedKey(NCRYPT_PROV_HANDLE, NCRYPT_KEY_HANDLE *, const WCHAR *, const WCHAR *, DWORD, DWORD);\nSECURITY_STATUS WINAPI NCryptDecrypt(NCRYPT_KEY_HANDLE, BYTE *, DWORD, void *, BYTE *, DWORD, DWORD *, DWORD);\nSECURITY_STATUS WINAPI NCryptEncrypt(NCRYPT_KEY_HANDLE, BYTE *, DWORD, void *, BYTE *, DWORD, DWORD *, DWORD);\nSECURITY_STATUS WINAPI NCryptFinalizeKey(NCRYPT_KEY_HANDLE, DWORD);\nSECURITY_STATUS WINAPI NCryptFreeObject(NCRYPT_HANDLE);\nSECURITY_STATUS WINAPI NCryptOpenKey(NCRYPT_PROV_HANDLE, NCRYPT_KEY_HANDLE *, const WCHAR *, DWORD, DWORD);\nSECURITY_STATUS WINAPI NCryptOpenStorageProvider(NCRYPT_PROV_HANDLE *, const WCHAR *, DWORD);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __NCRYPT_H__ */\n"
  },
  {
    "path": "wine/windows/ndrtypes.h",
    "content": "/*\n * NDR Types\n *\n * Copyright 2006 Robert Shearman (for CodeWeavers)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __NDRTYPES_H__\n#define __NDRTYPES_H__\n\n#include <limits.h>\n\ntypedef struct\n{\n    unsigned short MustSize : 1; /* 0x0001 - client interpreter MUST size this\n     *  parameter, other parameters may be skipped, using the value in\n     *  NDR_PROC_PARTIAL_OIF_HEADER::constant_client_buffer_size instead. */\n    unsigned short MustFree : 1; /* 0x0002 - server interpreter MUST size this\n     *  parameter, other parameters may be skipped, using the value in\n     *  NDR_PROC_PARTIAL_OIF_HEADER::constant_server_buffer_size instead. */\n    unsigned short IsPipe : 1; /* 0x0004 - The parameter is a pipe handle */\n    unsigned short IsIn : 1; /* 0x0008 - The parameter is an input */\n    unsigned short IsOut : 1; /* 0x0010 - The parameter is an output */\n    unsigned short IsReturn : 1; /* 0x0020 - The parameter is to be returned */\n    unsigned short IsBasetype : 1; /* 0x0040 - The parameter is simple and has the\n     *  format defined by NDR_PARAM_OIF_BASETYPE rather than by\n     *  NDR_PARAM_OIF_OTHER. */\n    unsigned short IsByValue : 1; /* 0x0080 - Set for compound types being sent by\n     *  value. Can be of type: structure, union, transmit_as, represent_as,\n     *  wire_marshal and SAFEARRAY. */\n    unsigned short IsSimpleRef : 1; /* 0x0100 - parameter that is a reference\n     *  pointer to anything other than another pointer, and which has no\n     *  allocate attributes. */\n    unsigned short IsDontCallFreeInst : 1; /*  0x0200 - Used for some represent_as types\n     *  for when the free instance routine should not be called. */\n    unsigned short SaveForAsyncFinish : 1; /* 0x0400 - Unknown */\n    unsigned short Unused : 2;\n    unsigned short ServerAllocSize : 3; /* 0xe000 - If non-zero\n     *  specifies the size of the object in numbers of 8byte blocks needed.\n     *  It will be stored on the server's stack rather than using an allocate\n     *  call. */\n} PARAM_ATTRIBUTES;\n\ntypedef struct\n{\n    unsigned char ServerMustSize : 1; /* 0x01 - the server must perform a\n     *  sizing pass. */\n    unsigned char ClientMustSize : 1; /* 0x02 - the client must perform a\n     *  sizing pass. */\n    unsigned char HasReturn : 1; /* 0x04 - procedure has a return value. */\n    unsigned char HasPipes : 1; /* 0x08 - the pipe package should be used. */\n    unsigned char Unused : 1; /* 0x10 - not used */\n    unsigned char HasAsyncUuid : 1; /* 0x20 - indicates an asynchronous DCOM\n     *  procedure. */\n    unsigned char HasExtensions : 1; /* 0x40 - indicates that Win2000\n     *  extensions are in use. */\n    unsigned char HasAsyncHandle : 1; /* 0x80 - indicates an asynchronous RPC\n     *  procedure. */\n} INTERPRETER_OPT_FLAGS, *PINTERPRETER_OPT_FLAGS;\n\ntypedef struct\n{\n    unsigned char HasNewCorrDesc : 1; /* 0x01 - indicates new correlation\n     *  descriptors in use. */\n    unsigned char ClientCorrCheck : 1; /* 0x02 - client needs correlation\n     *  check. */\n    unsigned char ServerCorrCheck : 1; /* 0x04 - server needs correlation\n     *  check. */\n    unsigned char HasNotify : 1; /* 0x08 - should call MIDL [notify]\n     *  routine @ NotifyIndex. */\n    unsigned char HasNotify2 : 1; /* 0x10 - should call MIDL [notify_flag] routine @ \n     *  NotifyIndex. */\n\n    /* The following bits are in fact used by midl but haven't yet been\n       named in the SDK. */\n    unsigned char Unused : 3; /* 0x20 - has complex return */\n                              /* 0x40 - has range on conformance */\n} INTERPRETER_OPT_FLAGS2, *PINTERPRETER_OPT_FLAGS2;\n\n/* Win2000 extensions */\ntypedef struct\n{\n    /* size in bytes of all following extensions */\n    unsigned char Size;\n\n    INTERPRETER_OPT_FLAGS2 Flags2;\n\n    /* client cache size hint */\n    unsigned short ClientCorrHint;\n\n    /* server cache size hint */\n    unsigned short ServerCorrHint;\n\n    /* index of routine in MIDL_STUB_DESC::NotifyRoutineTable to call if\n     * HasNotify or HasNotify2 flag set */\n    unsigned short NotifyIndex;\n} NDR_PROC_HEADER_EXTS;\n\ntypedef struct\n{\n    /* size in bytes of all following extensions */\n    unsigned char Size;\n\n    INTERPRETER_OPT_FLAGS2 Flags2;\n\n    /* client cache size hint */\n    unsigned short ClientCorrHint;\n\n    /* server cache size hint */\n    unsigned short ServerCorrHint;\n\n    /* index of routine in MIDL_STUB_DESC::NotifyRoutineTable to call if\n     * HasNotify or HasNotify2 flag set */\n    unsigned short NotifyIndex;\n\n    /* needed only on IA64 to cope with float/register loading */\n    unsigned short FloatArgMask;\n} NDR_PROC_HEADER_EXTS64;\n\ntypedef enum\n{\n    FC_BYTE = 0x01, /* 0x01 */\n    FC_CHAR, /* 0x02 */\n    FC_SMALL, /* 0x03 */\n    FC_USMALL, /* 0x04 */\n    FC_WCHAR, /* 0x05 */\n    FC_SHORT, /* 0x06 */\n    FC_USHORT, /* 0x07 */\n    FC_LONG, /* 0x08 */\n    FC_ULONG, /* 0x09 */\n    FC_FLOAT, /* 0x0a */\n    FC_HYPER, /* 0x0b */\n    FC_DOUBLE, /* 0x0c */\n    FC_ENUM16, /* 0x0d */\n    FC_ENUM32, /* 0x0e */\n    FC_IGNORE, /* 0x0f */\n    FC_ERROR_STATUS_T, /* 0x10 */\n\n    FC_RP, /* 0x11 */ /* reference pointer */\n    FC_UP, /* 0x12 */ /* unique pointer */\n    FC_OP, /* 0x13 */ /* object pointer */\n    FC_FP, /* 0x14 */ /* full pointer */\n\n    FC_STRUCT, /* 0x15 */ /* simple structure */\n    FC_PSTRUCT, /* 0x16 */ /* simple structure w/ pointers */\n    FC_CSTRUCT, /* 0x17 */ /* conformant structure */\n    FC_CPSTRUCT, /* 0x18 */ /* conformant structure w/ pointers */\n    FC_CVSTRUCT, /* 0x19 */ /* conformant varying struct */\n    FC_BOGUS_STRUCT, /* 0x1a */ /* complex structure */\n\n    FC_CARRAY, /* 0x1b */ /* conformant array */\n    FC_CVARRAY, /* 0x1c */ /* conformant varying array */\n    FC_SMFARRAY, /* 0x1d */ /* small (<64K) fixed array */\n    FC_LGFARRAY, /* 0x1e */ /* large (>= 64k) fixed array */\n    FC_SMVARRAY, /* 0x1f */ /* small (<64k) varying array */\n    FC_LGVARRAY, /* 0x20 */ /* large (>= 64k) varying array */\n    FC_BOGUS_ARRAY, /* 0x21 */ /* complex array */\n\n    FC_C_CSTRING, /* 0x22 */ /* conformant char string */\n    FC_C_BSTRING, /* 0x23 */\n    FC_C_SSTRING, /* 0x24 */\n    FC_C_WSTRING, /* 0x25 */ /* conformant wchar string */\n    FC_CSTRING, /* 0x26 */ /* non-conformant char string */\n    FC_BSTRING, /* 0x27 */\n    FC_SSTRING, /* 0x28 */\n    FC_WSTRING, /* 0x29 */ /* non-conformant wchar string */\n\n    FC_ENCAPSULATED_UNION, /* 0x2a */\n    FC_NON_ENCAPSULATED_UNION, /* 0x2b */\n\n    FC_BYTE_COUNT_POINTER, /* 0x2c */ /* [byte_count] ACF attribute */\n\n    FC_TRANSMIT_AS, /* 0x2d */\n    FC_REPRESENT_AS, /* 0x2e */\n\n    FC_IP, /* 0x2f */ /* interface pointer */\n\n    FC_BIND_CONTEXT, /* 0x30 */\n\n    FC_BIND_GENERIC, /* 0x31 */\n    FC_BIND_PRIMITIVE, /* 0x32 */\n    FC_AUTO_HANDLE, /* 0x33 */\n    FC_CALLBACK_HANDLE, /* 0x34 */\n\n    FC_UNUSED1, /* 0x35 */\n\n    FC_POINTER, /* 0x36 */\n\n    FC_ALIGNM2, /* 0x37 */\n    FC_ALIGNM4, /* 0x38 */\n    FC_ALIGNM8, /* 0x39 */\n\n    FC_UNUSED2, /* 0x3a */\n    FC_UNUSED3, /* 0x3b */\n    FC_UNUSED4, /* 0x3c */\n\n    FC_STRUCTPAD1, /* 0x3d */\n    FC_STRUCTPAD2, /* 0x3e */\n    FC_STRUCTPAD3, /* 0x3f */\n    FC_STRUCTPAD4, /* 0x40 */\n    FC_STRUCTPAD5, /* 0x41 */\n    FC_STRUCTPAD6, /* 0x42 */\n    FC_STRUCTPAD7, /* 0x43 */\n\n    FC_STRING_SIZED, /* 0x44 */\n\n    FC_UNUSED5, /* 0x45 */\n\n    FC_NO_REPEAT, /* 0x46 */\n    FC_FIXED_REPEAT, /* 0x47 */\n    FC_VARIABLE_REPEAT, /* 0x48 */\n    FC_FIXED_OFFSET, /* 0x49 */\n    FC_VARIABLE_OFFSET, /* 0x4a */\n\n    FC_PP, /* 0x4b */ /* pointer layout */\n/* FC_PP: FC_PAD layouts */\n/* layouts: FC_NO_REPEAT FC_PAD instance */\n/* instance: NdrFcShort(memofs), NdrFcShort(bufofs), desc */\n\n    FC_EMBEDDED_COMPLEX, /* 0x4c */\n\n    FC_IN_PARAM, /* 0x4d */\n    FC_IN_PARAM_BASETYPE, /* 0x4e */\n    FC_IN_PARAM_NO_FREE_INST, /* 0x4f */\n    FC_IN_OUT_PARAM, /* 0x50 */\n    FC_OUT_PARAM, /* 0x51 */\n    FC_RETURN_PARAM, /* 0x52 */\n    FC_RETURN_PARAM_BASETYPE, /* 0x53 */\n\n    FC_DEREFERENCE, /* 0x54 */\n    FC_DIV_2, /* 0x55 */\n    FC_MULT_2, /* 0x56 */\n    FC_ADD_1, /* 0x57 */\n    FC_SUB_1, /* 0x58 */\n\n    FC_CALLBACK, /* 0x59 */\n\n    FC_CONSTANT_IID, /* 0x5a */\n\n    FC_END, /* 0x5b */\n    FC_PAD, /* 0x5c */\n\n    FC_HARD_STRUCT = 0xb1,\n\n    FC_TRANSMIT_AS_PTR, /* 0xb2 */\n    FC_REPRESENT_AS_PTR, /* 0xb3 */\n\n    FC_USER_MARSHAL, /* 0xb4 */\n\n    FC_PIPE, /* 0xb5 */\n    FC_BLKHOLE, /* 0xb6 */\n\n    FC_RANGE, /* 0xb7 */\n\n    FC_INT3264, /* 0xb8 */\n    FC_UINT3264, /* 0xb9 */\n} FORMAT_CHARACTER;\n\n#define FC_ALLOCATE_ALL_NODES   0x01\n#define FC_DONT_FREE            0x02\n#define FC_ALLOCED_ON_STACK     0x04\n#define FC_SIMPLE_POINTER       0x08\n#define FC_POINTER_DEREF        0x10\n\n/* flags for all handle types */\n#define HANDLE_PARAM_IS_VIA_PTR 0x80\n#define HANDLE_PARAM_IS_IN      0x40\n#define HANDLE_PARAM_IS_OUT     0x20\n#define HANDLE_PARAM_IS_RETURN  0x10\n\n/* flags for context handles */\n#define NDR_STRICT_CONTEXT_HANDLE           0x08\n#define NDR_CONTEXT_HANDLE_NOSERIALIZE      0x04\n#define NDR_CONTEXT_HANDLE_SERIALIZE        0x02\n#define NDR_CONTEXT_HANDLE_CANNOT_BE_NULL   0x01\n\n#define Oi_FULL_PTR_USED            0x01\n#define Oi_RPCSS_ALLOC_USED         0x02\n#define Oi_OBJECT_PROC              0x04\n#define Oi_HAS_RPCFLAGS             0x08\n#define Oi_OBJ_USE_V2_INTERPRETER   0x20\n#define Oi_HAS_COMM_OR_FAULT        0x20\n#define Oi_USE_NEW_INIT_ROUTINES    0x40\n\n#define FC_NORMAL_CONFORMANCE           (unsigned char) 0x00\n#define FC_POINTER_CONFORMANCE          (unsigned char) 0x10\n#define FC_TOP_LEVEL_CONFORMANCE        (unsigned char) 0x20\n#define FC_CONSTANT_CONFORMANCE         (unsigned char) 0x40\n#define FC_TOP_LEVEL_MULTID_CONFORMANCE (unsigned char) 0x80\n\n#define USER_MARSHAL_UNIQUE     0x80\n#define USER_MARSHAL_REF        0x40\n#define USER_MARSHAL_POINTER    0xc0\n#define USER_MARSHAL_IID        0x20\n\n#endif\n"
  },
  {
    "path": "wine/windows/netcfgx.idl",
    "content": "/*\n *\n * Copyright 2014 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\nimport \"wtypes.idl\";\n\n#ifndef __WIDL__\n#define threading(model)\n#define progid(str)\n#define vi_progid(str)\n#endif\n\ncpp_quote(\"#define NETCFG_E_ALREADY_INITIALIZED  MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA020)\")\ncpp_quote(\"#define NETCFG_E_NO_WRITE_LOCK        MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA024)\")\n\n[\n    local,\n    object,\n    uuid(c0e8ae99-306e-11d1-aacf-00805fc1270e),\n    pointer_default(unique)\n]\ninterface INetCfgComponent : IUnknown\n{\n    typedef enum tagCOMPONENT_CHARACTERISTICS\n    {\n        NCF_VIRTUAL                     = 0x00000001,\n        NCF_SOFTWARE_ENUMERATED         = 0x00000002,\n        NCF_PHYSICAL                    = 0x00000004,\n        NCF_HIDDEN                      = 0x00000008,\n        NCF_NO_SERVICE                  = 0x00000010,\n        NCF_NOT_USER_REMOVABLE          = 0x00000020,\n        NCF_MULTIPORT_INSTANCED_ADAPTER = 0x00000040,\n        NCF_HAS_UI                      = 0x00000080,\n        NCF_SINGLE_INSTANCE             = 0x00000100,\n        NCF_FILTER                      = 0x00000400,\n        NCF_DONTEXPOSELOWER             = 0x00001000,\n        NCF_HIDE_BINDING                = 0x00002000,\n        NCF_NDIS_PROTOCOL               = 0x00004000,\n        NCF_FIXED_BINDING               = 0x00020000,\n        NCF_LW_FILTER                   = 0x00040000\n    } COMPONENT_CHARACTERISTICS;\n\n    typedef enum tagNCRP_FLAGS\n    {\n        NCRP_QUERY_PROPERTY_UI          = 0x00000001,\n        NCRP_SHOW_PROPERTY_UI           = 0x00000002\n    } NCRP_FLAGS;\n\n    HRESULT GetDisplayName ([out] LPWSTR* ppszwDisplayName);\n    HRESULT SetDisplayName ([in] LPCWSTR pszwDisplayName);\n    HRESULT GetHelpText ([out] LPWSTR* pszwHelpText);\n    HRESULT GetId ([out] LPWSTR* ppszwId);\n    HRESULT GetCharacteristics ([out] LPDWORD pdwCharacteristics);\n    HRESULT GetInstanceGuid ([out] GUID* pGuid);\n    HRESULT GetPnpDevNodeId ([out] LPWSTR* ppszwDevNodeId);\n    HRESULT GetClassGuid ([out] GUID* pGuid);\n    HRESULT GetBindName ([out] LPWSTR* ppszwBindName);\n    HRESULT GetDeviceStatus ([out] ULONG* pulStatus);\n    HRESULT OpenParamKey ([out] HKEY* phkey);\n    HRESULT RaisePropertyUi ([in] HWND hwndParent, [in] DWORD dwFlags, [in] IUnknown* punkContext);\n}\n\n\n[\n    local,\n    object,\n    uuid(c0e8ae92-306e-11d1-aacf-00805fc1270e),\n    pointer_default(unique)\n]\ninterface IEnumNetCfgComponent : IUnknown\n{\n    HRESULT Next ([in] ULONG celt, [out] INetCfgComponent** rgelt, [out] ULONG *pceltFetched);\n    HRESULT Skip ([in] ULONG celt);\n    HRESULT Reset ();\n    HRESULT Clone ([out] IEnumNetCfgComponent** ppenum);\n}\n\n[\n    local,\n    object,\n    uuid(c0e8ae9f-306e-11d1-aacf-00805fc1270e),\n    pointer_default(unique)\n]\ninterface INetCfgLock : IUnknown\n{\n    HRESULT AcquireWriteLock ([in] DWORD cmsTimeout, [in]  LPCWSTR pszwClientDescription,\n                              [out] LPWSTR* ppszwClientDescription);\n    HRESULT ReleaseWriteLock ();\n    HRESULT IsWriteLocked ([out] LPWSTR* ppszwClientDescription);\n}\n\n[\n    local,\n    object,\n    uuid(c0e8ae93-306e-11d1-aacf-00805fc1270e),\n    pointer_default(unique)\n]\ninterface INetCfg : IUnknown\n{\n    HRESULT Initialize ([in] PVOID pvReserved);\n    HRESULT Uninitialize ();\n    HRESULT Apply ();\n    HRESULT Cancel ();\n    HRESULT EnumComponents ([in] const GUID* pguidClass, [out] IEnumNetCfgComponent** ppenumComponent);\n    HRESULT FindComponent ([in] LPCWSTR pszwInfId, [out] INetCfgComponent** pComponent);\n    HRESULT QueryNetCfgClass ([in] const GUID* pguidClass, [in] REFIID riid,[out] void** ppvObject);\n}\n\n[\n    helpstring(\"Network Configuration Component Object\"),\n    threading(both),\n    uuid(5b035261-40f9-11d1-aaec-00805fc1270e)\n]\ncoclass CNetCfg\n{\n    [default] interface INetCfg;\n}\n"
  },
  {
    "path": "wine/windows/netcon.idl",
    "content": "/*\n * Copyright 2009 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"oaidl.idl\";\nimport \"unknwn.idl\";\nimport \"wtypes.idl\";\n/* import \"prsht.idl\"; */\n#endif\n\ncpp_quote(\"DEFINE_GUID(CLSID_NetSharingManager,0x5c63c1ad,0x3956,0x4ff8,0x84,0x86,0x40,0x03,0x47,0x58,0x31,0x5b);\")\n\n[\n    object,\n    uuid(c08956a1-1cd3-11d1-b1c5-00805fc1270e),\n    pointer_default(unique)\n]\ninterface INetConnection : IUnknown\n{\n    typedef enum tagNETCON_CHARACTERISTIC_FLAGS\n    {\n        NCCF_NONE               = 0x0000,\n        NCCF_ALL_USERS          = 0x0001,\n        NCCF_ALLOW_DUPLICATION  = 0x0002,\n        NCCF_ALLOW_REMOVAL      = 0x0004,\n        NCCF_ALLOW_RENAME       = 0x0008,\n        NCCF_INCOMING_ONLY      = 0x0020,\n        NCCF_OUTGOING_ONLY      = 0x0040,\n        NCCF_BRANDED            = 0x0080,\n        NCCF_SHARED             = 0x0100,\n        NCCF_BRIDGED            = 0x0200,\n        NCCF_FIREWALLED         = 0x0400,\n        NCCF_DEFAULT            = 0x0800,\n        NCCF_HOMENET_CAPABLE    = 0x1000,\n        NCCF_SHARED_PRIVATE     = 0x2000,\n        NCCF_QUARANTINED        = 0x4000,\n        NCCF_RESERVED           = 0x8000,\n        NCCF_BLUETOOTH_MASK  = 0x000F0000,\n        NCCF_LAN_MASK        = 0x00F00000\n    } NETCON_CHARACTERISTIC_FLAGS;\n\n    typedef enum tagNETCON_STATUS\n    {\n        NCS_DISCONNECTED,\n        NCS_CONNECTING,\n        NCS_CONNECTED,\n        NCS_DISCONNECTING,\n        NCS_HARDWARE_NOT_PRESENT,\n        NCS_HARDWARE_DISABLED,\n        NCS_HARDWARE_MALFUNCTION,\n        NCS_MEDIA_DISCONNECTED,\n        NCS_AUTHENTICATING,\n        NCS_AUTHENTICATION_SUCCEEDED,\n        NCS_AUTHENTICATION_FAILED,\n        NCS_INVALID_ADDRESS,\n        NCS_CREDENTIALS_REQUIRED\n    } NETCON_STATUS;\n\n    typedef enum tagNETCON_TYPE\n    {\n        NCT_DIRECT_CONNECT,\n        NCT_INBOUND,\n        NCT_INTERNET,\n        NCT_LAN,\n        NCT_PHONE,\n        NCT_TUNNEL,\n        NCT_BRIDGE\n    } NETCON_TYPE;\n\n    typedef enum tagNETCON_MEDIATYPE\n    {\n        NCM_NONE,\n        NCM_DIRECT,\n        NCM_ISDN,\n        NCM_LAN,\n        NCM_PHONE,\n        NCM_TUNNEL,\n        NCM_PPPOE,\n        NCM_BRIDGE,\n        NCM_SHAREDACCESSHOST_LAN,\n        NCM_SHAREDACCESSHOST_RAS\n    } NETCON_MEDIATYPE;\n\n    typedef struct tagNETCON_PROPERTIES\n    {\n        GUID              guidId;\n        [string] LPWSTR   pszwName;\n        [string] LPWSTR   pszwDeviceName;\n        NETCON_STATUS     Status;\n        NETCON_MEDIATYPE  MediaType;\n        DWORD             dwCharacter;\n        CLSID             clsidThisObject;\n        CLSID             clsidUiObject;\n    } NETCON_PROPERTIES;\n\n    HRESULT Connect();\n\n    HRESULT Disconnect();\n\n    HRESULT Delete();\n\n    HRESULT Duplicate(\n            [in, string] LPCWSTR pszwDuplicateName,\n            [out]        INetConnection **ppCon);\n\n    HRESULT GetProperties([out] NETCON_PROPERTIES **ppProps);\n\n    HRESULT GetUiObjectClassId([out, ref] CLSID *pclsid);\n\n    HRESULT Rename([in, string] LPCWSTR pszwNewName);\n}\n\n[\n    object,\n    uuid(24b7e9b5-e38f-4685-851b-00892cf5f940),\n    oleautomation,\n    dual,\n    pointer_default(unique)\n]\ninterface INetSharingPortMappingProps : IDispatch\n{\n    [propget, id(1)]\n    HRESULT Name([out, retval] BSTR *pbstrName);\n\n    [propget, id(2)]\n    HRESULT IPProtocol([out, retval] UCHAR *pucIPProt);\n\n    [propget, id(3)]\n    HRESULT ExternalPort([out, retval] long *pusPort);\n\n    [propget, id(4)]\n    HRESULT InternalPort([out, retval] long *pusPort);\n\n    [propget, id(5)]\n    HRESULT Options([out, retval] long *pdwOptions);\n\n    [propget, id(6)]\n    HRESULT TargetName([out, retval] BSTR *pbstrTargetName);\n\n    [propget, id(7)]\n    HRESULT TargetIPAddress([out, retval] BSTR *pbstrTargetIPAddress);\n\n    [propget, id(8)]\n    HRESULT Enabled([out, retval] VARIANT_BOOL *pbool);\n}\n\n[\n    object,\n    uuid(c08956b1-1cd3-11d1-b1c5-00805fc1270e),\n    oleautomation,\n    dual,\n    pointer_default(unique)\n]\ninterface INetSharingPortMapping : IDispatch\n{\n    [id(1)]\n    HRESULT Disable();\n\n    [id(2)]\n    HRESULT Enable();\n\n    [propget, id(3)]\n    HRESULT Properties([out, retval] INetSharingPortMappingProps **ppNSPMP);\n\n    [id(4)]\n    HRESULT Delete();\n}\n[\n    object,\n    uuid(02e4a2de-da20-4e34-89c8-ac22275a010b),\n    oleautomation,\n    dual,\n    pointer_default(unique)\n]\ninterface INetSharingPortMappingCollection : IDispatch\n{\n    [propget, id(DISPID_NEWENUM), restricted]\n    HRESULT _NewEnum([out, retval] IUnknown **pVal);\n\n    [propget, id(1)]\n    HRESULT Count([out, retval] long *pVal);\n}\n\n[\n    object,\n    uuid(c08956b6-1cd3-11d1-b1c5-00805fc1270e),\n    oleautomation,\n    dual,\n    pointer_default(unique)\n]\ninterface INetSharingConfiguration : IDispatch\n{\n    typedef enum tagSHARINGCONNECTIONTYPE {\n        ICSSHARINGTYPE_PUBLIC,\n        ICSSHARINGTYPE_PRIVATE\n    } SHARINGCONNECTIONTYPE, *LPSHARINGCONNECTIONTYPE;\n\n    typedef enum tagSHARINGCONNECTION_ENUM_FLAGS {\n            ICSSC_DEFAULT,\n            ICSSC_ENABLED\n    } SHARINGCONNECTION_ENUM_FLAGS;\n\n    typedef enum tagICS_TARGETTYPE {\n            ICSTT_NAME,\n            ICSTT_IPADDRESS\n    }ICS_TARGETTYPE;\n\n    [propget, id(1)]\n    HRESULT SharingEnabled([out, retval] VARIANT_BOOL *pbEnabled);\n\n    [propget, id(2)]\n    HRESULT SharingConnectionType([out, retval] SHARINGCONNECTIONTYPE *pType);\n\n    [id(3)]\n    HRESULT DisableSharing();\n\n    [id(4)]\n    HRESULT EnableSharing([in] SHARINGCONNECTIONTYPE Type);\n\n    [propget, id(5)]\n    HRESULT InternetFirewallEnabled([out, retval] VARIANT_BOOL *pbEnabled);\n\n    [id(6)]\n    HRESULT DisableInternetFirewall();\n\n    [id(7)]\n    HRESULT EnableInternetFirewall();\n\n    [propget, id(8)]\n    HRESULT EnumPortMappings(\n        [in] SHARINGCONNECTION_ENUM_FLAGS Flags,\n        [out, retval] INetSharingPortMappingCollection **ppColl);\n\n    [id(9)]\n    HRESULT AddPortMapping(\n            [in] BSTR bstrName,\n            [in] UCHAR ucIPProtocol,\n            [in] USHORT usExternalPort,\n            [in] USHORT usInternalPort,\n            [in] DWORD dwOptions,\n            [in] BSTR bstrTargetNameOrIPAddress,\n            [in] ICS_TARGETTYPE eTargetType,\n            [out, retval] INetSharingPortMapping **ppMapping );\n\n    [id(10)]\n    HRESULT RemovePortMapping([in] INetSharingPortMapping *pMapping);\n}\n\n[\n    object,\n    uuid(c08956b4-1cd3-11d1-b1c5-00805fc1270e),\n    pointer_default(unique)\n]\ninterface IEnumNetSharingPublicConnection : IUnknown\n{\n    HRESULT Next(\n            [in] ULONG celt,\n            [out, size_is(celt), length_is(*pceltFetched)] VARIANT *rgVar,\n            [out] ULONG *pceltFetched);\n\n    HRESULT Skip([in] ULONG celt);\n\n    HRESULT Reset();\n\n    HRESULT Clone([out] IEnumNetSharingPublicConnection **ppenum);\n}\n\n[\n    object,\n    uuid(c08956b5-1cd3-11d1-b1c5-00805fc1270e),\n    pointer_default(unique)\n]\ninterface IEnumNetSharingPrivateConnection : IUnknown\n{\n    HRESULT Next(\n            [in] ULONG celt,\n            [out, size_is(celt), length_is(*pCeltFetched)] VARIANT *rgVar,\n            [out] ULONG *pCeltFetched);\n\n    HRESULT Skip([in] ULONG celt);\n\n    HRESULT Reset();\n\n    HRESULT Clone([out] IEnumNetSharingPrivateConnection **ppenum);\n}\n\n[\n    object,\n    uuid(f4277c95-ce5b-463d-8167-5662d9bcaa72),\n    oleautomation,\n    dual,\n    pointer_default(unique)\n]\ninterface INetConnectionProps : IDispatch\n{\n    [propget, id(1)]\n    HRESULT Guid([out, retval] BSTR *pbstrGuid);\n\n    [propget, id(2)]\n    HRESULT Name([out, retval] BSTR *pbstrName);\n\n    [propget, id(3)]\n    HRESULT DeviceName([out, retval] BSTR *pbstrDeviceName);\n\n    [propget, id(4)]\n    HRESULT Status([out, retval] NETCON_STATUS *pStatus);\n\n    [propget, id(5)]\n    HRESULT MediaType([out, retval] NETCON_MEDIATYPE *pMediaType);\n\n    [propget, id(6)]\n    HRESULT Characteristics([out, retval] DWORD *pdwFlags);\n}\n\n[\n    object,\n    uuid(7d7a6355-f372-4971-a149-bfc927be762a),\n    oleautomation,\n    dual,\n    pointer_default(unique)\n]\ninterface INetSharingPublicConnectionCollection : IDispatch\n{\n    [propget, id(DISPID_NEWENUM), restricted]\n    HRESULT _NewEnum([out, retval] IUnknown **pVal);\n\n    [propget, id(1)]\n    HRESULT Count([out, retval] long *pVal);\n}\n\n[\n    object,\n    uuid(33c4643c-7811-46fa-a89a-768597bd7223),\n    oleautomation,\n    dual,\n    pointer_default(unique)\n ]\ninterface INetSharingEveryConnectionCollection : IDispatch\n{\n    [propget, id(DISPID_NEWENUM), restricted]\n    HRESULT _NewEnum([out, retval] IUnknown **pVal);\n\n    [propget, id(1)]\n    HRESULT Count([out, retval] long *pVal);\n}\n\n[\n    object,\n    uuid(38ae69e0-4409-402a-a2cb-e965c727f840),\n    oleautomation,\n    dual,\n    pointer_default(unique)\n ]\ninterface INetSharingPrivateConnectionCollection : IDispatch\n{\n    [propget, id(DISPID_NEWENUM), restricted]\n    HRESULT _NewEnum([out, retval] IUnknown **pVal);\n\n    [propget, id(1)]\n    HRESULT Count([out, retval] long *pVal);\n}\n\n[\n    object,\n    uuid(c08956b7-1cd3-11d1-b1c5-00805fc1270e),\n    oleautomation,\n    dual,\n    pointer_default(unique)\n]\ninterface INetSharingManager : IDispatch\n{\n    [propget, id(1)]\n    HRESULT SharingInstalled([out, retval] VARIANT_BOOL *pbInstalled);\n\n    [propget, id(2)]\n    HRESULT EnumPublicConnections(\n            [in]  SHARINGCONNECTION_ENUM_FLAGS Flags,\n            [out, retval] INetSharingPublicConnectionCollection **ppColl);\n\n    [propget, id(3)]\n    HRESULT EnumPrivateConnections(\n            [in]  SHARINGCONNECTION_ENUM_FLAGS Flags,\n            [out, retval] INetSharingPrivateConnectionCollection **ppColl);\n\n    [propget, id(6)]\n    HRESULT INetSharingConfigurationForINetConnection(\n            [in] INetConnection *pNetConnection,\n            [out, retval] INetSharingConfiguration **ppNetSharingConfiguration);\n\n    [propget, id(7)]\n    HRESULT EnumEveryConnection([out, retval] INetSharingEveryConnectionCollection **ppColl);\n\n    [propget, id(8)]\n    HRESULT NetConnectionProps(\n            [in] INetConnection *pNetConnection,\n            [out, retval] INetConnectionProps **ppProps);\n}\n"
  },
  {
    "path": "wine/windows/netfw.idl",
    "content": "/*\n * Copyright 2007 Jeff Latimer\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n *****************************************************************************\n *\n * The firewall management interface\n *\n */\n\nimport \"icftypes.idl\";\nimport \"oaidl.idl\";\n\n[\n   object,\n   uuid(A6207B2E-7CDD-426A-951E-5E1CBC5AFEAD),\n   dual\n]\ninterface INetFwIcmpSettings : IDispatch\n{\n    [id(1), propget]\n    HRESULT AllowOutboundDestinationUnreachable([out, retval] VARIANT_BOOL* allow);\n\n    [id(1), propput]\n    HRESULT AllowOutboundDestinationUnreachable( [in] VARIANT_BOOL allow );\n\n    [id(2), propget]\n    HRESULT AllowRedirect( [out, retval] VARIANT_BOOL* allow );\n\n    [id(2), propput]\n    HRESULT AllowRedirect( [in] VARIANT_BOOL allow );\n\n    [id(3), propget]\n    HRESULT AllowInboundEchoRequest( [out, retval] VARIANT_BOOL* allow );\n\n    [id(3), propput]\n    HRESULT AllowInboundEchoRequest( [in] VARIANT_BOOL allow );\n\n    [id(4), propget]\n    HRESULT AllowOutboundTimeExceeded( [out, retval] VARIANT_BOOL* allow );\n\n    [id(4), propput]\n    HRESULT AllowOutboundTimeExceeded( [in] VARIANT_BOOL allow );\n\n    [id(5), propget]\n    HRESULT AllowOutboundParameterProblem( [out, retval] VARIANT_BOOL* allow );\n\n    [id(5), propput]\n    HRESULT AllowOutboundParameterProblem( [in] VARIANT_BOOL allow );\n\n    [id(6), propget]\n    HRESULT AllowOutboundSourceQuench( [out, retval] VARIANT_BOOL* allow );\n\n    [id(6), propput]\n    HRESULT AllowOutboundSourceQuench( [in] VARIANT_BOOL allow );\n\n    [id(7), propget]\n    HRESULT AllowInboundRouterRequest( [out, retval] VARIANT_BOOL* allow );\n\n    [id(7), propput]\n    HRESULT AllowInboundRouterRequest( [in] VARIANT_BOOL allow );\n\n    [id(8), propget]\n    HRESULT AllowInboundTimestampRequest( [out, retval] VARIANT_BOOL* allow );\n\n    [id(8), propput]\n    HRESULT AllowInboundTimestampRequest( [in] VARIANT_BOOL allow );\n\n    [id(9), propget]\n    HRESULT AllowInboundMaskRequest( [out, retval] VARIANT_BOOL* allow );\n\n    [id(9), propput]\n    HRESULT AllowInboundMaskRequest( [in] VARIANT_BOOL allow );\n\n    [id(10), propget]\n    HRESULT AllowOutboundPacketTooBig( [out, retval] VARIANT_BOOL* allow );\n\n    [id(10), propput]\n    HRESULT AllowOutboundPacketTooBig( [in] VARIANT_BOOL allow );\n}\n\n[\n    object,\n    uuid(E0483BA0-47FF-4D9C-A6D6-7741D0B195F7),\n    dual\n]\ninterface INetFwOpenPort : IDispatch\n{\n    [id(1), propget]\n    HRESULT Name( [out, retval] BSTR* name );\n\n    [id(1), propput]\n    HRESULT Name( [in] BSTR name );\n\n    [id(2), propget]\n    HRESULT IpVersion( [out, retval] NET_FW_IP_VERSION* ipVersion );\n\n    [id(2), propput]\n    HRESULT IpVersion( [in] NET_FW_IP_VERSION ipVersion );\n\n    [id(3), propget]\n    HRESULT Protocol( [out, retval] NET_FW_IP_PROTOCOL* ipProtocol );\n\n    [id(3), propput]\n    HRESULT Protocol( [in] NET_FW_IP_PROTOCOL ipProtocol );\n\n    [id(4), propget]\n    HRESULT Port( [out, retval] LONG* portNumber );\n\n    [id(4), propput]\n    HRESULT Port( [in] LONG portNumber );\n\n    [id(5), propget]\n    HRESULT Scope( [out, retval] NET_FW_SCOPE* scope );\n\n    [id(5), propput]\n    HRESULT Scope( [in] NET_FW_SCOPE scope );\n\n    [id(6), propget]\n    HRESULT RemoteAddresses( [out, retval] BSTR* remoteAddrs );\n\n    [id(6), propput]\n    HRESULT RemoteAddresses( [in] BSTR remoteAddrs );\n\n    [id(7), propget]\n    HRESULT Enabled( [out, retval] VARIANT_BOOL* enabled );\n\n    [id(7), propput]\n    HRESULT Enabled( [in] VARIANT_BOOL enabled );\n\n    [id(8), propget]\n    HRESULT BuiltIn( [out, retval] VARIANT_BOOL* builtIn );\n}\n\n[\n    object,\n    uuid(C0E9D7FA-E07E-430A-B19A-090CE82D92E2),\n    dual\n]\ninterface INetFwOpenPorts : IDispatch\n{\n    [id(1), propget]\n    HRESULT Count( [out, retval] long* count );\n\n    [id(2)]\n    HRESULT Add( [in] INetFwOpenPort* port );\n\n    [id(3)]\n    HRESULT Remove( [in] LONG portNumber, [in] NET_FW_IP_PROTOCOL ipProtocol );\n\n    [id(4)]\n    HRESULT Item( [in] LONG portNumber, [in] NET_FW_IP_PROTOCOL ipProtocol,\n                  [out, retval] INetFwOpenPort** openPort );\n\n    [id(DISPID_NEWENUM), propget, restricted]\n    HRESULT _NewEnum( [out, retval] IUnknown** newEnum );\n}\n\n[\n    object,\n    uuid(79FD57C8-908E-4A36-9888-D5B3F0A444CF),\n    dual\n]\ninterface INetFwService : IDispatch\n{\n    [id(1), propget]\n    HRESULT Name( [out, retval] BSTR* name );\n\n    [id(2), propget]\n    HRESULT Type( [out, retval] NET_FW_SERVICE_TYPE* type );\n\n    [id(3), propget]\n    HRESULT Customized( [out, retval] VARIANT_BOOL* customized );\n\n    [id(4), propget]\n    HRESULT IpVersion( [out, retval] NET_FW_IP_VERSION* ipVersion );\n\n    [id(4), propput]\n    HRESULT IpVersion( [in] NET_FW_IP_VERSION ipVersion );\n\n    [id(5), propget]\n    HRESULT Scope( [out, retval] NET_FW_SCOPE* scope );\n\n    [id(5), propput]\n    HRESULT Scope( [in] NET_FW_SCOPE scope );\n\n    [id(6), propget]\n    HRESULT RemoteAddresses( [out, retval] BSTR* remoteAddrs );\n\n    [id(6), propput]\n    HRESULT RemoteAddresses( [in] BSTR remoteAddrs );\n\n    [id(7), propget]\n    HRESULT Enabled( [out, retval] VARIANT_BOOL* enabled );\n\n    [id(7), propput]\n    HRESULT Enabled( [in] VARIANT_BOOL enabled );\n\n    [id(8), propget]\n    HRESULT GloballyOpenPorts( [out, retval] INetFwOpenPorts** openPorts );\n}\n\n[\n    object,\n    uuid(79649BB4-903E-421B-94C9-79848E79F6EE),\n    dual\n]\ninterface INetFwServices : IDispatch\n{\n    [id(1), propget]\n    HRESULT Count( [out, retval] long* count );\n\n     [id(2)]\n    HRESULT Item( [in] NET_FW_SERVICE_TYPE svcType,\n                  [out, retval] INetFwService** service );\n\n    [id(DISPID_NEWENUM), propget, restricted]\n    HRESULT _NewEnum( [out, retval] IUnknown** newEnum );\n}\n\n[\n    object,\n    uuid(B5E64FFA-C2C5-444E-A301-FB5E00018050),\n    dual\n]\ninterface INetFwAuthorizedApplication : IDispatch\n{\n    [id(1), propget]\n    HRESULT Name( [out, retval] BSTR* name );\n\n    [id(1), propput]\n    HRESULT Name( [in] BSTR name );\n\n    [id(2), propget]\n    HRESULT ProcessImageFileName( [out, retval] BSTR* imageFileName );\n\n    [id(2), propput]\n    HRESULT ProcessImageFileName( [in] BSTR imageFileName );\n\n    [id(3), propget]\n    HRESULT IpVersion( [out, retval] NET_FW_IP_VERSION* ipVersion );\n\n    [id(3), propput]\n    HRESULT IpVersion( [in] NET_FW_IP_VERSION ipVersion );\n\n    [id(4), propget]\n    HRESULT Scope( [out, retval] NET_FW_SCOPE* scope );\n\n    [id(4), propput]\n    HRESULT Scope( [in] NET_FW_SCOPE scope );\n\n    [id(5), propget]\n    HRESULT RemoteAddresses( [out, retval] BSTR* remoteAddrs );\n\n    [id(5), propput]\n    HRESULT RemoteAddresses( [in] BSTR remoteAddrs );\n\n    [id(6), propget]\n    HRESULT Enabled( [out, retval] VARIANT_BOOL* enabled );\n\n    [id(6), propput]\n    HRESULT Enabled( [in] VARIANT_BOOL enabled );\n}\n\n[\n    object,\n    uuid(D4BECDDF-6F73-4A83-B832-9C66874CD20E),\n    dual\n]\ninterface INetFwRemoteAdminSettings : IDispatch\n{\n    [id(1), propget]\n    HRESULT IpVersion( [out, retval] NET_FW_IP_VERSION* ipVersion );\n\n    [id(1), propput]\n    HRESULT IpVersion( [in] NET_FW_IP_VERSION ipVersion );\n\n    [id(2), propget]\n    HRESULT Scope( [out, retval] NET_FW_SCOPE* scope );\n\n    [id(2), propput]\n    HRESULT Scope( [in] NET_FW_SCOPE scope );\n\n    [id(3), propget]\n    HRESULT RemoteAddresses( [out, retval] BSTR* remoteAddrs );\n\n    [id(3), propput]\n    HRESULT RemoteAddresses( [in] BSTR remoteAddrs );\n\n    [id(4), propget]\n    HRESULT Enabled( [out, retval] VARIANT_BOOL* enabled );\n\n    [id(4), propput]\n    HRESULT Enabled( [in] VARIANT_BOOL enabled );\n}\n\n\n[\n    object,\n    uuid(644EFD52-CCF9-486C-97A2-39F352570B30),\n    dual\n]\ninterface INetFwAuthorizedApplications : IDispatch\n{\n    [id(1), propget]\n    HRESULT Count( [out, retval] long* count );\n\n    [id(2)]\n    HRESULT Add( [in] INetFwAuthorizedApplication* app );\n\n    [id(3)]\n    HRESULT Remove( [in] BSTR imageFileName );\n\n    [id(4)]\n    HRESULT Item( [in] BSTR imageFileName,\n                  [out, retval] INetFwAuthorizedApplication** app );\n\n    [id(DISPID_NEWENUM), propget, restricted]\n    HRESULT _NewEnum( [out, retval] IUnknown** newEnum );\n}\n\n[\n   local,\n   object,\n   uuid(af230d27-baba-4e42-aced-f524f22cfce2),\n   dual\n]\ninterface INetFwRule : IDispatch\n{\n   [id(1), propget]\n   HRESULT Name( [out, retval] BSTR *name );\n   [id(1), propput]\n   HRESULT Name( [in] BSTR name );\n\n   [id(2), propget]\n   HRESULT Description( [out, retval] BSTR* desc );\n   [id(2), propput]\n   HRESULT Description( [in] BSTR desc );\n\n   [id(3), propget]\n   HRESULT ApplicationName( [out, retval] BSTR *imagename );\n   [id(3), propput]\n   HRESULT ApplicationName( [in] BSTR imagename );\n\n   [id(4), propget]\n   HRESULT ServiceName( [out, retval] BSTR *service );\n   [id(4), propput]\n   HRESULT ServiceName( [in] BSTR service );\n\n   [id(5), propget]\n   HRESULT Protocol( [out, retval] long* protocol );\n   [id(5), propput]\n   HRESULT Protocol( [in] long protocol );\n\n   [id(6), propget]\n   HRESULT LocalPorts( [out, retval] BSTR* ports );\n   [id(6), propput]\n   HRESULT LocalPorts( [in] BSTR ports );\n\n   [id(7), propget]\n   HRESULT RemotePorts( [out, retval] BSTR *ports );\n   [id(7), propput]\n   HRESULT RemotePorts( [in] BSTR ports );\n\n   [id(8), propget]\n   HRESULT LocalAddresses([out, retval] BSTR* address );\n   [id(8), propput]\n   HRESULT LocalAddresses([in] BSTR address);\n\n   [id(9), propget]\n   HRESULT RemoteAddresses( [out, retval] BSTR* address );\n   [id(9), propput]\n   HRESULT RemoteAddresses( [in] BSTR address );\n\n   [id(10), propget]\n   HRESULT IcmpTypesAndCodes( [out, retval] BSTR *codes );\n   [id(10), propput]\n   HRESULT IcmpTypesAndCodes( [in] BSTR codes );\n\n   [id(11), propget]\n   HRESULT Direction( [out, retval] NET_FW_RULE_DIRECTION* dir );\n   [id(11), propput]\n   HRESULT Direction( [in] NET_FW_RULE_DIRECTION dir );\n\n   [id(12), propget]\n   HRESULT Interfaces( [out, retval] VARIANT* interfaces );\n   [id(12), propput]\n   HRESULT Interfaces( [in] VARIANT interfaces );\n\n   [id(13), propget]\n   HRESULT InterfaceTypes( [out, retval] BSTR* types );\n   [id(13), propput]\n   HRESULT InterfaceTypes( [in] BSTR types );\n\n   [id(14), propget]\n   HRESULT Enabled( [out, retval] VARIANT_BOOL* enabled );\n   [id(14), propput]\n   HRESULT Enabled( [in] VARIANT_BOOL enabled );\n\n   [id(15), propget]\n   HRESULT Grouping( [out, retval] BSTR* context );\n   [id(15), propput]\n   HRESULT Grouping( [in] BSTR context );\n\n   [id(16), propget]\n   HRESULT Profiles( [out, retval] long* profiles );\n   [id(16), propput]\n   HRESULT Profiles( [in] long  profiles );\n\n   [id(17), propget]\n   HRESULT EdgeTraversal( [out, retval] VARIANT_BOOL* enabled );\n   [id(17), propput]\n   HRESULT EdgeTraversal( [in] VARIANT_BOOL enabled );\n\n   [id(18), propget]\n   HRESULT Action( [out, retval] NET_FW_ACTION* action );\n   [id(18), propput]\n   HRESULT Action( [in] NET_FW_ACTION action );\n}\n\n[\n   local,\n   object,\n   uuid(9c4c6277-5027-441e-afae-ca1f542da009),\n   dual\n]\ninterface INetFwRules : IDispatch\n{\n   [id(1), propget]\n   HRESULT Count( [out, retval] long* count );\n\n   [id(2)]\n   HRESULT Add( [in] INetFwRule* rule );\n\n   [id(3)]\n   HRESULT Remove( [in] BSTR name );\n\n   [id(4)]\n   HRESULT Item( [in] BSTR name, [out, retval] INetFwRule** rule );\n\n   [id(DISPID_NEWENUM), propget, restricted]\n   HRESULT _NewEnum( [out, retval] IUnknown** newEnum );\n}\n\n[\n    local,\n    object,\n    uuid(8267bbe3-f890-491c-b7b6-2db1ef0e5d2b),\n    dual\n]\ninterface INetFwServiceRestriction : IDispatch\n{\n   [id(1)]\n   HRESULT RestrictService( [in] BSTR serviceName, [in] BSTR appName,\n              [in] VARIANT_BOOL restrictService, [in] VARIANT_BOOL serviceSidRestricted );\n\n   [id(2)]\n   HRESULT ServiceRestricted( [in] BSTR serviceName, [in] BSTR appName,\n              [out, retval] VARIANT_BOOL* serviceRestricted );\n\n   [id(3), propget]\n   HRESULT Rules( [out, retval] INetFwRules** rules );\n}\n\n[\n     object,\n     uuid(174A0DDA-E9F9-449D-993B-21AB667CA456),\n     dual\n]\ninterface INetFwProfile : IDispatch\n{\n    [id(1), propget]\n    HRESULT Type( [out, retval] NET_FW_PROFILE_TYPE* type );\n\n    [id(2), propget]\n    HRESULT FirewallEnabled( [out, retval] VARIANT_BOOL* enabled );\n\n    [id(2), propput]\n    HRESULT FirewallEnabled( [in] VARIANT_BOOL enabled );\n\n    [id(3), propget]\n    HRESULT ExceptionsNotAllowed( [out, retval] VARIANT_BOOL* notAllowed );\n\n    [id(3), propput]\n    HRESULT ExceptionsNotAllowed( [in] VARIANT_BOOL notAllowed );\n\n    [id(4), propget]\n    HRESULT NotificationsDisabled( [out, retval] VARIANT_BOOL* disabled );\n\n    [id(4), propput]\n    HRESULT NotificationsDisabled( [in] VARIANT_BOOL disabled );\n\n    [id(5), propget]\n    HRESULT UnicastResponsesToMulticastBroadcastDisabled( [out, retval] VARIANT_BOOL* disabled );\n\n    [id(5), propput]\n    HRESULT UnicastResponsesToMulticastBroadcastDisabled( [in] VARIANT_BOOL disabled );\n\n    [id(6), propget]\n    HRESULT RemoteAdminSettings( [out, retval] INetFwRemoteAdminSettings** remoteAdminSettings );\n\n    [id(7), propget]\n    HRESULT IcmpSettings( [out, retval] INetFwIcmpSettings** icmpSettings );\n\n    [id(8), propget]\n    HRESULT GloballyOpenPorts( [out, retval] INetFwOpenPorts** openPorts );\n\n    [id(9), propget]\n    HRESULT Services( [out, retval] INetFwServices** services );\n\n    [id(10), propget]\n    HRESULT AuthorizedApplications( [out, retval] INetFwAuthorizedApplications** apps );\n}\n\n[\n     object,\n     uuid(D46D2478-9AC9-4008-9DC7-5563CE5536CC),\n     dual\n]\ninterface INetFwPolicy : IDispatch\n{\n    [id(1), propget]\n    HRESULT CurrentProfile( [out, retval] INetFwProfile** profile );\n\n    [id(2)]\n    HRESULT GetProfileByType( [in] NET_FW_PROFILE_TYPE profileType,\n                              [out, retval] INetFwProfile** profile );\n}\n\n[\n    local,\n    object,\n    uuid(98325047-c671-4174-8d81-defcd3f03186),\n    dual\n]\ninterface INetFwPolicy2 : IDispatch\n{\n   [id(1), propget]\n   HRESULT CurrentProfileTypes( [out, retval] long *profile );\n\n   [id(2), propget]\n   HRESULT FirewallEnabled( [in] NET_FW_PROFILE_TYPE2 profileType, [out, retval] VARIANT_BOOL* enabled );\n\n   [id(2), propput]\n   HRESULT FirewallEnabled( [in] NET_FW_PROFILE_TYPE2 profileType, [in] VARIANT_BOOL enabled );\n\n   [id(3), propget]\n   HRESULT ExcludedInterfaces( [in] NET_FW_PROFILE_TYPE2 profileType, [out, retval] VARIANT *interfaces );\n\n   [id(3), propput]\n   HRESULT ExcludedInterfaces( [in] NET_FW_PROFILE_TYPE2 profileType, [in] VARIANT interfaces );\n\n   [id(4), propget]\n   HRESULT BlockAllInboundTraffic( [in] NET_FW_PROFILE_TYPE2 profileType, [out, retval] VARIANT_BOOL* block );\n\n   [id(4), propput]\n   HRESULT BlockAllInboundTraffic( [in] NET_FW_PROFILE_TYPE2 profileType, [in] VARIANT_BOOL block );\n\n   [id(5), propget]\n   HRESULT NotificationsDisabled( [in] NET_FW_PROFILE_TYPE2 profileType, [out, retval] VARIANT_BOOL* disabled );\n   [id(5), propput]\n   HRESULT NotificationsDisabled( [in] NET_FW_PROFILE_TYPE2 profileType, [in] VARIANT_BOOL disabled );\n\n   [id(6), propget]\n   HRESULT UnicastResponsesToMulticastBroadcastDisabled( [in] NET_FW_PROFILE_TYPE2 profileType,\n       [out, retval] VARIANT_BOOL* disabled );\n   [id(6), propput]\n   HRESULT UnicastResponsesToMulticastBroadcastDisabled( [in] NET_FW_PROFILE_TYPE2 profileType,\n       [in] VARIANT_BOOL disabled );\n\n   [id(7), propget]\n   HRESULT Rules( [out, retval] INetFwRules** rules );\n\n   [id(8), propget]\n   HRESULT ServiceRestriction( [out, retval] INetFwServiceRestriction **ServiceRestriction );\n\n   [id(9)]\n   HRESULT EnableRuleGroup( [in] long profileTypesBitmask, [in] BSTR group, [in] VARIANT_BOOL enable );\n\n   [id(10)]\n   HRESULT IsRuleGroupEnabled( [in] long profileTypesBitmask, [in] BSTR group, [out, retval] VARIANT_BOOL *enabled );\n\n   [id(11)]\n   HRESULT RestoreLocalFirewallDefaults();\n\n   [id(12), propget]\n   HRESULT DefaultInboundAction( [in] NET_FW_PROFILE_TYPE2 profileType, [out, retval] NET_FW_ACTION* action );\n\n   [id(12), propput]\n   HRESULT DefaultInboundAction( [in] NET_FW_PROFILE_TYPE2 profileType, [in] NET_FW_ACTION action );\n\n   [id(13), propget]\n   HRESULT DefaultOutboundAction( [in] NET_FW_PROFILE_TYPE2 profileType, [out, retval] NET_FW_ACTION* action );\n\n   [id(13), propput]\n   HRESULT DefaultOutboundAction( [in] NET_FW_PROFILE_TYPE2 profileType, [in] NET_FW_ACTION action );\n\n   [id(14), propget]\n   HRESULT IsRuleGroupCurrentlyEnabled( [in] BSTR group, [out, retval] VARIANT_BOOL* enabled );\n\n   [id(15), propget]\n   HRESULT LocalPolicyModifyState( [out, retval] NET_FW_MODIFY_STATE* modifyState );\n}\n\n[\n    object,\n    uuid(F7898AF5-CAC4-4632-A2EC-DA06E5111AF2),\n    dual\n]\ninterface INetFwMgr : IDispatch\n{\n    [id(1), propget]\n    HRESULT LocalPolicy( [out, retval] INetFwPolicy** localPolicy );\n\n    [id(2), propget]\n    HRESULT CurrentProfileType( [out, retval] NET_FW_PROFILE_TYPE* profileType );\n\n    [id(3)]\n    HRESULT RestoreDefaults();\n\n    [id(4)]\n    HRESULT IsPortAllowed( [in] BSTR imageFileName, [in] NET_FW_IP_VERSION ipVersion,\n                           [in] LONG portNumber, [in] BSTR localAddress,\n                           [in] NET_FW_IP_PROTOCOL ipProtocol, [out] VARIANT* allowed,\n                           [out] VARIANT* restricted );\n\n    [id(5)]\n    HRESULT IsIcmpTypeAllowed( [in] NET_FW_IP_VERSION ipVersion, [in] BSTR localAddress,\n                               [in] BYTE type, [out] VARIANT* allowed,\n                               [out] VARIANT* restricted );\n}\n\n[\n    local,\n    object,\n    uuid(71881699-18f4-458b-b892-3ffce5e07f75),\n    dual\n]\ninterface INetFwProduct : IDispatch\n{\n    [id(1), propget]\n    HRESULT RuleCategories([out, retval] VARIANT *ruleCategories);\n\n    [id(1), propput]\n    HRESULT RuleCategories([in] VARIANT ruleCategories);\n\n    [id(2), propget]\n    HRESULT DisplayName([out, retval] BSTR *displayName);\n\n    [id(2), propput]\n    HRESULT DisplayName([in] BSTR displayName);\n\n    [id(3), propget]\n    HRESULT PathToSignedProductExe([out, retval] BSTR *path);\n}\n\n[\n    local,\n    object,\n    uuid(39eb36e0-2097-40bd-8af2-63a13b525362),\n    dual\n]\ninterface INetFwProducts : IDispatch\n{\n    [id(1), propget]\n    HRESULT Count([out, retval] LONG *count);\n\n    [id(2)]\n    HRESULT Register([in] INetFwProduct *product, [out, retval] IUnknown **registration);\n\n    [id(3)]\n    HRESULT Item([in] LONG index, [out, retval] INetFwProduct **product);\n\n    [id(DISPID_NEWENUM), propget, restricted]\n    HRESULT _NewEnum([out, retval] IUnknown **newEnum);\n}\n\n[\n    uuid(DB4F3345-3EF8-45ED-B976-25A6D3B81B71),\n    version(1.0)\n]\nlibrary NetFwPublicTypeLib\n{\n    importlib(\"stdole2.tlb\");\n    interface INetFwRemoteAdminSettings;\n    interface INetFwIcmpSettings;\n    interface INetFwOpenPort;\n    interface INetFwOpenPorts;\n    interface INetFwService;\n    interface INetFwServices;\n    interface INetFwAuthorizedApplication;\n    interface INetFwAuthorizedApplications;\n    interface INetFwProfile;\n    interface INetFwPolicy;\n    interface INetFwPolicy2;\n    interface INetFwMgr;\n\n    [\n        uuid(0CA545C6-37AD-4A6C-BF92-9F7610067EF5)\n    ]\n    coclass NetFwOpenPort\n    {\n        [default] interface INetFwOpenPort;\n    }\n\n    [\n        uuid(EC9846B3-2762-4A6B-A214-6ACB603462D2)\n    ]\n    coclass NetFwAuthorizedApplication\n    {\n        [default] interface INetFwAuthorizedApplication;\n    }\n\n    [\n        uuid(304CE942-6E39-40D8-943A-B913C40C9CD4)\n    ]\n    coclass NetFwMgr\n    {\n        [default] interface INetFwMgr;\n    }\n\n    [\n        uuid(e2b3c97f-6ae1-41ac-817a-f6f92166d7dd)\n    ]\n    coclass NetFwPolicy2\n    {\n        [default] interface INetFwPolicy2;\n    }\n\n    [\n        uuid(2c5bc43e-3369-4c33-ab0c-be9469677af4)\n    ]\n    coclass NetFwRule\n    {\n        [default] interface INetFwRule;\n    }\n\n    [\n        uuid(9d745ed8-c514-4d1d-bf42-751fed2d5ac7)\n    ]\n    coclass NetFwProduct\n    {\n        [default] interface INetFwProduct;\n    }\n\n    [\n        uuid(cc19079b-8272-4d73-bb70-cdb533527b61)\n    ]\n    coclass NetFwProducts\n    {\n        [default] interface INetFwProducts;\n    }\n}\n"
  },
  {
    "path": "wine/windows/netioapi.h",
    "content": "/*\n * Copyright 2015 Hans Leidekker for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_NETIOAPI_H\n#define __WINE_NETIOAPI_H\n\n#include <ntddndis.h>\n\n#ifndef ANY_SIZE\n#define ANY_SIZE 1\n#endif\n\ntypedef enum _MIB_IF_TABLE_LEVEL\n{\n    MibIfTableNormal,\n    MibIfTableRaw,\n    MibIfTableNormalWithoutStatistics,\n} MIB_IF_TABLE_LEVEL, *PMIB_IF_TABLE_LEVEL;\n\ntypedef enum _MIB_NOTIFICATION_TYPE\n{\n    MibParameterNotification,\n    MibAddInstance,\n    MibDeleteInstance,\n    MibInitialNotification,\n} MIB_NOTIFICATION_TYPE, *PMIB_NOTIFICATION_TYPE;\n\ntypedef struct _MIB_IF_ROW2\n{\n    NET_LUID InterfaceLuid;\n    NET_IFINDEX InterfaceIndex;\n    GUID InterfaceGuid;\n    WCHAR Alias[IF_MAX_STRING_SIZE + 1];\n    WCHAR Description[IF_MAX_STRING_SIZE + 1];\n    ULONG PhysicalAddressLength;\n    UCHAR PhysicalAddress[IF_MAX_PHYS_ADDRESS_LENGTH];\n    UCHAR PermanentPhysicalAddress[IF_MAX_PHYS_ADDRESS_LENGTH];\n    ULONG Mtu;\n    IFTYPE Type;\n    TUNNEL_TYPE TunnelType;\n    NDIS_MEDIUM MediaType;\n    NDIS_PHYSICAL_MEDIUM PhysicalMediumType;\n    NET_IF_ACCESS_TYPE AccessType;\n    NET_IF_DIRECTION_TYPE DirectionType;\n    struct\n    {\n        BOOLEAN HardwareInterface : 1;\n        BOOLEAN FilterInterface : 1;\n        BOOLEAN ConnectorPresent : 1;\n        BOOLEAN NotAuthenticated : 1;\n        BOOLEAN NotMediaConnected : 1;\n        BOOLEAN Paused : 1;\n        BOOLEAN LowPower : 1;\n        BOOLEAN EndPointInterface : 1;\n    } InterfaceAndOperStatusFlags;\n    IF_OPER_STATUS OperStatus;\n    NET_IF_ADMIN_STATUS AdminStatus;\n    NET_IF_MEDIA_CONNECT_STATE MediaConnectState;\n    NET_IF_NETWORK_GUID NetworkGuid;\n    NET_IF_CONNECTION_TYPE ConnectionType;\n    ULONG64 TransmitLinkSpeed;\n    ULONG64 ReceiveLinkSpeed;\n    ULONG64 InOctets;\n    ULONG64 InUcastPkts;\n    ULONG64 InNUcastPkts;\n    ULONG64 InDiscards;\n    ULONG64 InErrors;\n    ULONG64 InUnknownProtos;\n    ULONG64 InUcastOctets;\n    ULONG64 InMulticastOctets;\n    ULONG64 InBroadcastOctets;\n    ULONG64 OutOctets;\n    ULONG64 OutUcastPkts;\n    ULONG64 OutNUcastPkts;\n    ULONG64 OutDiscards;\n    ULONG64 OutErrors;\n    ULONG64 OutUcastOctets;\n    ULONG64 OutMulticastOctets;\n    ULONG64 OutBroadcastOctets;\n    ULONG64 OutQLen;\n} MIB_IF_ROW2, *PMIB_IF_ROW2;\n\ntypedef struct _MIB_IF_TABLE2\n{\n    ULONG NumEntries;\n    MIB_IF_ROW2 Table[1];\n} MIB_IF_TABLE2, *PMIB_IF_TABLE2;\n\ntypedef struct _MIB_IPINTERFACE_ROW\n{\n    ADDRESS_FAMILY Family;\n    NET_LUID InterfaceLuid;\n    NET_IFINDEX InterfaceIndex;\n    ULONG MaxReassemblySize;\n    ULONG64 InterfaceIdentifier;\n    ULONG MinRouterAdvertisementInterval;\n    ULONG MaxRouterAdvertisementInterval;\n    BOOLEAN AdvertisingEnabled;\n    BOOLEAN ForwardingEnabled;\n    BOOLEAN WeakHostSend;\n    BOOLEAN WeakHostReceive;\n    BOOLEAN UseAutomaticMetric;\n    BOOLEAN UseNeighborUnreachabilityDetection;\n    BOOLEAN ManagedAddressConfigurationSupported;\n    BOOLEAN OtherStatefulConfigurationSupported;\n    BOOLEAN AdvertiseDefaultRoute;\n    NL_ROUTER_DISCOVERY_BEHAVIOR RouterDiscoveryBehavior;\n    ULONG DadTransmits;\n    ULONG BaseReachableTime;\n    ULONG RetransmitTime;\n    ULONG PathMtuDiscoveryTimeout;\n    NL_LINK_LOCAL_ADDRESS_BEHAVIOR LinkLocalAddressBehavior;\n    ULONG LinkLocalAddressTimeout;\n    ULONG ZoneIndices[ScopeLevelCount];\n    ULONG SitePrefixLength;\n    ULONG Metric;\n    ULONG NlMtu;\n    BOOLEAN Connected;\n    BOOLEAN SupportsWakeUpPatterns;\n    BOOLEAN SupportsNeighborDiscovery;\n    BOOLEAN SupportsRouterDiscovery;\n    ULONG ReachableTime;\n    NL_INTERFACE_OFFLOAD_ROD TransmitOffload;\n    NL_INTERFACE_OFFLOAD_ROD ReceiveOffload;\n    BOOLEAN DisableDefaultRoutes;\n} MIB_IPINTERFACE_ROW, *PMIB_IPINTERFACE_ROW;\n\ntypedef struct _MIB_UNICASTIPADDRESS_ROW\n{\n    SOCKADDR_INET       Address;\n    NET_LUID            InterfaceLuid;\n    NET_IFINDEX         InterfaceIndex;\n    NL_PREFIX_ORIGIN    PrefixOrigin;\n    NL_SUFFIX_ORIGIN    SuffixOrigin;\n    ULONG               ValidLifetime;\n    ULONG               PreferredLifetime;\n    UINT8               OnLinkPrefixLength;\n    BOOLEAN             SkipAsSource;\n    NL_DAD_STATE        DadState;\n    SCOPE_ID            ScopeId;\n    LARGE_INTEGER       CreationTimeStamp;\n} MIB_UNICASTIPADDRESS_ROW, *PMIB_UNICASTIPADDRESS_ROW;\n\ntypedef struct _MIB_UNICASTIPADDRESS_TABLE\n{\n    ULONG NumEntries;\n    MIB_UNICASTIPADDRESS_ROW Table[1];\n} MIB_UNICASTIPADDRESS_TABLE, *PMIB_UNICASTIPADDRESS_TABLE;\n\ntypedef struct _IP_ADDRESS_PREFIX\n{\n    SOCKADDR_INET Prefix;\n    UINT8         PrefixLength;\n} IP_ADDRESS_PREFIX, *PIP_ADDRESS_PREFIX;\n\ntypedef struct _MIB_IPFORWARD_ROW2\n{\n    NET_LUID          InterfaceLuid;\n    NET_IFINDEX       InterfaceIndex;\n    IP_ADDRESS_PREFIX DestinationPrefix;\n    SOCKADDR_INET     NextHop;\n    UCHAR             SitePrefixLength;\n    ULONG             ValidLifetime;\n    ULONG             PreferredLifetime;\n    ULONG             Metric;\n    NL_ROUTE_PROTOCOL Protocol;\n    BOOLEAN           Loopback;\n    BOOLEAN           AutoconfigureAddress;\n    BOOLEAN           Publish;\n    BOOLEAN           Immortal;\n    ULONG             Age;\n    NL_ROUTE_ORIGIN   Origin;\n} MIB_IPFORWARD_ROW2, *PMIB_IPFORWARD_ROW2;\n\ntypedef struct _MIB_IPFORWARD_TABLE2\n{\n    ULONG              NumEntries;\n    MIB_IPFORWARD_ROW2 Table[ANY_SIZE];\n} MIB_IPFORWARD_TABLE2, *PMIB_IPFORWARD_TABLE2;\n\ntypedef VOID (WINAPI *PIPINTERFACE_CHANGE_CALLBACK)(PVOID, PMIB_IPINTERFACE_ROW,\n                                                    MIB_NOTIFICATION_TYPE);\ntypedef VOID (WINAPI *PUNICAST_IPADDRESS_CHANGE_CALLBACK)(PVOID, PMIB_UNICASTIPADDRESS_ROW,\n                                                          MIB_NOTIFICATION_TYPE);\n\nDWORD WINAPI ConvertInterfaceGuidToLuid(const GUID*,NET_LUID*);\nDWORD WINAPI ConvertInterfaceIndexToLuid(NET_IFINDEX,NET_LUID*);\nDWORD WINAPI ConvertInterfaceLuidToGuid(const NET_LUID*,GUID*);\nDWORD WINAPI ConvertInterfaceLuidToIndex(const NET_LUID*,NET_IFINDEX*);\nDWORD WINAPI ConvertInterfaceLuidToNameA(const NET_LUID*,char*,SIZE_T);\nDWORD WINAPI ConvertInterfaceLuidToNameW(const NET_LUID*,WCHAR*,SIZE_T);\nDWORD WINAPI ConvertInterfaceNameToLuidA(const char*,NET_LUID*);\nDWORD WINAPI ConvertInterfaceNameToLuidW(const WCHAR*,NET_LUID*);\nDWORD WINAPI ConvertLengthToIpv4Mask(ULONG,ULONG*);\nvoid WINAPI FreeMibTable(void*);\nDWORD WINAPI GetIfEntry2(MIB_IF_ROW2*);\nDWORD WINAPI GetIfTable2(MIB_IF_TABLE2**);\nDWORD WINAPI GetUnicastIpAddressEntry(MIB_UNICASTIPADDRESS_ROW*);\nPCHAR WINAPI if_indextoname(NET_IFINDEX,PCHAR);\nNET_IFINDEX WINAPI if_nametoindex(PCSTR);\n\n#endif /* __WINE_NETIOAPI_H */\n"
  },
  {
    "path": "wine/windows/netlistmgr.idl",
    "content": "/*\n * Copyright 2014 Hans Leidekker for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"objidl.idl\";\n\n#ifndef __WIDL__\n#define threading(model)\n#endif\n\ninterface IEnumNetworks;\ninterface IEnumNetworkConnections;\ninterface INetwork;\ninterface INetworkConnection;\ninterface INetworkCostManager;\ninterface INetworkListManager;\ninterface INetworkListManagerEvents;\n\ntypedef [v1_enum] enum NLM_CONNECTIVITY\n{\n    NLM_CONNECTIVITY_DISCONNECTED      = 0x0000,\n    NLM_CONNECTIVITY_IPV4_NOTRAFFIC    = 0x0001,\n    NLM_CONNECTIVITY_IPV6_NOTRAFFIC    = 0x0002,\n    NLM_CONNECTIVITY_IPV4_SUBNET       = 0x0010,\n    NLM_CONNECTIVITY_IPV4_LOCALNETWORK = 0x0020,\n    NLM_CONNECTIVITY_IPV4_INTERNET     = 0x0040,\n    NLM_CONNECTIVITY_IPV6_SUBNET       = 0x0100,\n    NLM_CONNECTIVITY_IPV6_LOCALNETWORK = 0x0200,\n    NLM_CONNECTIVITY_IPV6_INTERNET     = 0x0400\n} NLM_CONNECTIVITY;\n\ntypedef [v1_enum] enum NLM_DOMAIN_TYPE\n{\n    NLM_DOMAIN_TYPE_NON_DOMAIN_NETWORK   = 0x00,\n    NLM_DOMAIN_TYPE_DOMAIN_NETWORK       = 0x01,\n    NLM_DOMAIN_TYPE_DOMAIN_AUTHENTICATED = 0x02\n} NLM_DOMAIN_TYPE;\n\ntypedef [v1_enum] enum NLM_ENUM_NETWORK\n{\n    NLM_ENUM_NETWORK_CONNECTED    = 0x01,\n    NLM_ENUM_NETWORK_DISCONNECTED = 0x02,\n    NLM_ENUM_NETWORK_ALL          = 0x03\n} NLM_ENUM_NETWORK;\n\ntypedef [v1_enum] enum NLM_CONNECTION_COST\n{\n    NLM_CONNECTION_COST_UNKNOWN              = 0x0,\n    NLM_CONNECTION_COST_UNRESTRICTED         = 0x1,\n    NLM_CONNECTION_COST_FIXED                = 0x2,\n    NLM_CONNECTION_COST_VARIABLE             = 0x4,\n    NLM_CONNECTION_COST_OVERDATALIMIT        = 0x10000,\n    NLM_CONNECTION_COST_CONGESTED            = 0x20000,\n    NLM_CONNECTION_COST_ROAMING              = 0x40000,\n    NLM_CONNECTION_COST_APPROACHINGDATALIMIT = 0x80000\n} NLM_CONNECTION_COST;\n\ntypedef struct NLM_SOCKADDR\n{\n    BYTE data[128];\n} NLM_SOCKADDR;\n\nconst UINT32 NLM_UNKNOWN_DATAPLAN_STATUS = 0xffffffff;\n\ntypedef struct NLM_USAGE_DATA\n{\n    DWORD    UsageInMegabytes;\n    FILETIME LastSyncTime;\n} NLM_USAGE_DATA;\n\ntypedef struct NLM_DATAPLAN_STATUS\n{\n    GUID           InterfaceGuid;\n    NLM_USAGE_DATA UsageData;\n    DWORD          DataLimitInMegabytes;\n    DWORD          InboundBandwidthInKbps;\n    DWORD          OutboundBandwidthInKbps;\n    FILETIME       NextBillingCycle;\n    DWORD          MaxTransferSizeInMegabytes;\n    DWORD          Reserved;\n} NLM_DATAPLAN_STATUS;\n\n[\n    object,\n    pointer_default(unique),\n    uuid(dcb00008-570f-4a9b-8d69-199fdba5723b)\n]\ninterface INetworkCostManager : IUnknown\n{\n    HRESULT GetCost(\n        [out] DWORD *pCost,\n        [in, unique] NLM_SOCKADDR *pDestIPAddr);\n\n    HRESULT GetDataPlanStatus(\n        [out] NLM_DATAPLAN_STATUS *pDataPlanStatus,\n        [in, unique] NLM_SOCKADDR *pDestIPAddr);\n\n    HRESULT SetDestinationAddresses(\n        [in] UINT32 length,\n        [in, unique, size_is(length)] NLM_SOCKADDR *pDestIPAddrList,\n        [in] VARIANT_BOOL bAppend);\n}\n\n[\n    object,\n    pointer_default(unique),\n    uuid(dcb0000a-570f-4a9b-8d69-199fdba5723b)\n]\ninterface INetworkConnectionCost : IUnknown\n{\n    HRESULT GetCost(\n        [out] DWORD *pCost);\n\n    HRESULT GetDataPlanStatus(\n        [out] NLM_DATAPLAN_STATUS *pDataPlanStatus);\n}\n\n[\n    object,\n    pointer_default(unique),\n    uuid(dcb00009-570f-4a9b-8d69-199fdba5723b)\n]\ninterface INetworkCostManagerEvents : IUnknown\n{\n    HRESULT CostChanged(\n        [in] DWORD newCost,\n        [in, unique] NLM_SOCKADDR *pDestAddr);\n\n    HRESULT DataPlanStatusChanged(\n        [in, unique] NLM_SOCKADDR *pDestAddr);\n}\n\n[\n    object,\n    oleautomation,\n    pointer_default(unique),\n    dual,\n    uuid(dcb00003-570f-4a9b-8d69-199fdba5723b)\n]\ninterface IEnumNetworks : IDispatch\n{\n    [id(DISPID_NEWENUM), propget, hidden, restricted]\n    HRESULT _NewEnum(\n        [out, retval] IEnumVARIANT **ppEnumVar);\n\n    [id(1)]\n    HRESULT Next(\n        [in] ULONG celt,\n        [out, size_is(celt), length_is(*pceltFetched)] INetwork **rgelt,\n        [in, out] ULONG *pceltFetched);\n\n    [id(2)]\n    HRESULT Skip(\n        [in] ULONG celt);\n\n    [id(3)]\n    HRESULT Reset();\n\n    [id(4)]\n    HRESULT Clone(\n        [out, retval] IEnumNetworks **ppEnumNetwork);\n}\n\n[\n    object,\n    oleautomation,\n    pointer_default(unique),\n    dual,\n    uuid(dcb00006-570f-4a9b-8d69-199fdba5723b)\n]\ninterface IEnumNetworkConnections : IDispatch\n{\n    [id(DISPID_NEWENUM), propget, hidden, restricted]\n    HRESULT _NewEnum(\n        [out, retval] IEnumVARIANT **ppEnumVar);\n\n    [id(1)]\n    HRESULT Next(\n        [in] ULONG celt,\n        [out, size_is(celt), length_is(*pceltFetched)] INetworkConnection **rgelt,\n        [in, out] ULONG *pceltFetched);\n\n    [id(2)]\n    HRESULT Skip(\n        [in] ULONG celt);\n\n    [id(3)]\n    HRESULT Reset();\n\n    [id(4)]\n    HRESULT Clone(\n        [out, retval] IEnumNetworkConnections **ppEnumNetwork);\n}\n\n[\n    dual,\n    object,\n    oleautomation,\n    pointer_default(unique),\n    uuid(dcb00000-570f-4a9b-8d69-199fdba5723b)\n]\ninterface INetworkListManager : IDispatch\n{\n    HRESULT GetNetworks(\n        [in] NLM_ENUM_NETWORK Flags,\n        [out, retval] IEnumNetworks **ppEnumNetwork);\n\n    HRESULT GetNetwork(\n        [in] GUID gdNetworkId,\n        [out, retval] INetwork **ppNetwork);\n\n    HRESULT GetNetworkConnections(\n        [out, retval] IEnumNetworkConnections **ppEnum);\n\n    HRESULT GetNetworkConnection(\n        [in] GUID gdNetworkConnectionId,\n        [out, retval] INetworkConnection **ppNetworkConnection);\n\n    HRESULT IsConnectedToInternet(\n        [out, retval] VARIANT_BOOL *pbIsConnected);\n\n    HRESULT IsConnected(\n        [out, retval] VARIANT_BOOL *pbIsConnected);\n\n    HRESULT GetConnectivity(\n        [out, retval] NLM_CONNECTIVITY *pConnectivity);\n}\n\n[\n    threading(both),\n    uuid(dcb00c01-570f-4a9b-8d69-199fdba5723b)\n]\ncoclass NetworkListManager { interface INetworkListManager; }\n\n[\n    object,\n    oleautomation,\n    pointer_default(unique),\n    uuid(DCB00001-570F-4A9B-8D69-199FDBA5723B)\n]\ninterface INetworkListManagerEvents : IUnknown\n{\n    HRESULT ConnectivityChanged(\n        [in] NLM_CONNECTIVITY newConnectivity);\n}\n\n[\n    object,\n    oleautomation,\n    pointer_default(unique),\n    uuid(dcb00007-570f-4a9b-8d69-199fdba5723b)\n]\ninterface INetworkConnectionEvents : IUnknown\n{\n    typedef enum NLM_CONNECTION_PROPERTY_CHANGE\n    {\n        NLM_CONNECTION_PROPERTY_CHANGE_AUTHENTICATION = 1\n    } NLM_CONNECTION_PROPERTY_CHANGE;\n\n    HRESULT NetworkConnectionConnectivityChanged(\n        [in] GUID connectionId,\n        [in] NLM_CONNECTIVITY newConnectivity);\n\n    HRESULT NetworkConnectionPropertyChanged(\n        [in] GUID connectionId,\n        [in] NLM_CONNECTION_PROPERTY_CHANGE flags);\n}\n\n[\n    object,\n    oleautomation,\n    pointer_default(unique),\n    dual,\n    uuid(dcb00005-570f-4a9b-8d69-199fdba5723b)\n]\ninterface INetworkConnection : IDispatch\n{\n    [id(1)]\n    HRESULT GetNetwork(\n        [out, retval] INetwork **ppNetwork);\n\n    [propget, id(2)]\n    HRESULT IsConnectedToInternet(\n        [out, retval] VARIANT_BOOL *pbIsConnected);\n\n    [propget, id(3)]\n    HRESULT IsConnected(\n        [out, retval] VARIANT_BOOL *pbIsConnected);\n\n    [id(4)]\n    HRESULT GetConnectivity(\n        [out, retval] NLM_CONNECTIVITY *pConnectivity);\n\n    [id(5)]\n    HRESULT GetConnectionId(\n        [out, retval] GUID *pgdConnectionId);\n\n    [id(6)]\n    HRESULT GetAdapterId(\n        [out, retval] GUID *pgdAdapterId);\n\n    [id(7)]\n    HRESULT GetDomainType(\n        [out, retval] NLM_DOMAIN_TYPE *pDomainType);\n}\n\n[\n    object,\n    oleautomation,\n    pointer_default(unique),\n    dual,\n    uuid(dcb00002-570f-4a9b-8d69-199fdba5723b)\n]\ninterface INetwork : IDispatch\n{\n    typedef enum NLM_NETWORK_CATEGORY\n    {\n        NLM_NETWORK_CATEGORY_PUBLIC               = 0x00,\n        NLM_NETWORK_CATEGORY_PRIVATE              = 0x01,\n        NLM_NETWORK_CATEGORY_DOMAIN_AUTHENTICATED = 0x02\n    } NLM_NETWORK_CATEGORY;\n\n    [id(1)]\n    HRESULT GetName(\n        [out, string, retval] BSTR *pszNetworkName);\n\n    [id(2)]\n    HRESULT SetName(\n        [in, string] BSTR szNetworkNewName);\n\n    [id(3)]\n    HRESULT GetDescription(\n        [out, string, retval] BSTR *pszDescription);\n\n    [id(4)]\n    HRESULT SetDescription(\n        [in, string] BSTR szDescription);\n\n    [id(5)]\n    HRESULT GetNetworkId(\n        [out, retval] GUID *pgdGuidNetworkId);\n\n    [id(6)]\n    HRESULT GetDomainType(\n        [out, retval] NLM_DOMAIN_TYPE *pNetworkType);\n\n    [id(7)]\n    HRESULT GetNetworkConnections(\n        [out, retval] IEnumNetworkConnections **ppEnumNetworkConnection);\n\n    [id(8)]\n    HRESULT GetTimeCreatedAndConnected(\n        [out] DWORD *pdwLowDateTimeCreated,\n        [out] DWORD *pdwHighDateTimeCreated,\n        [out] DWORD *pdwLowDateTimeConnected,\n        [out] DWORD *pdwHighDateTimeConnected);\n\n    [propget, id(9)]\n    HRESULT IsConnectedToInternet(\n        [out, retval] VARIANT_BOOL *pbIsConnected);\n\n    [propget, id(10)]\n    HRESULT IsConnected(\n        [out, retval] VARIANT_BOOL *pbIsConnected);\n\n    [id(11)]\n    HRESULT GetConnectivity(\n        [out, retval] NLM_CONNECTIVITY *pConnectivity);\n\n    [id(12)]\n    HRESULT GetCategory(\n        [out, retval] NLM_NETWORK_CATEGORY *pCategory);\n\n    [id(13)]\n    HRESULT SetCategory(\n        [in] NLM_NETWORK_CATEGORY NewCategory);\n}\n"
  },
  {
    "path": "wine/windows/nldef.h",
    "content": "/*\n * Copyright (C) 2003 Juan Lang\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __WINE_NLDEF_H\n#define __WINE_NLDEF_H\n\ntypedef enum\n{\n    IpPrefixOriginOther = 0,\n    IpPrefixOriginManual,\n    IpPrefixOriginWellKnown,\n    IpPrefixOriginDhcp,\n    IpPrefixOriginRouterAdvertisement,\n    IpPrefixOriginUnchanged = 16,\n} NL_PREFIX_ORIGIN;\n\ntypedef enum _NL_ROUTE_ORIGIN\n{\n    NlroManual,\n    NlroWellKnown,\n    NlroDHCP,\n    NlroRouterAdvertisement,\n    Nlro6to4,\n} NL_ROUTE_ORIGIN, *PNL_ROUTE_ORIGIN;\n\ntypedef enum\n{\n    IpSuffixOriginOther = 0,\n    IpSuffixOriginManual,\n    IpSuffixOriginWellKnown,\n    IpSuffixOriginDhcp,\n    IpSuffixOriginLinkLayerAddress,\n    IpSuffixOriginRandom,\n    IpSuffixOriginUnchanged = 16,\n} NL_SUFFIX_ORIGIN;\n\ntypedef enum\n{\n    IpDadStateInvalid = 0,\n    IpDadStateTentative,\n    IpDadStateDuplicate,\n    IpDadStateDeprecated,\n    IpDadStatePreferred,\n} NL_DAD_STATE;\n\ntypedef enum _NL_LINK_LOCAL_ADDRESS_BEHAVIOR\n{\n    LinkLocalAlwaysOff = 0,\n    LinkLocalDelayed,\n    LinkLocalAlwaysOn,\n    LinkLocalUnchanged = -1,\n} NL_LINK_LOCAL_ADDRESS_BEHAVIOR;\n\ntypedef enum _NL_ROUTER_DISCOVERY_BEHAVIOR\n{\n    RouterDiscoveryDisabled = 0,\n    RouterDiscoveryEnabled,\n    RouterDiscoveryDhcp,\n    RouterDiscoveryUnchanged = -1,\n} NL_ROUTER_DISCOVERY_BEHAVIOR;\n\ntypedef enum\n{\n#define MAKE_ROUTE_PROTOCOL(name, value) \\\n    MIB_IPPROTO_ ## name = value, \\\n    PROTO_IP_ ## name = value\n\n    MAKE_ROUTE_PROTOCOL(OTHER,   1),\n    MAKE_ROUTE_PROTOCOL(LOCAL,   2),\n    MAKE_ROUTE_PROTOCOL(NETMGMT, 3),\n    MAKE_ROUTE_PROTOCOL(ICMP,    4),\n    MAKE_ROUTE_PROTOCOL(EGP,     5),\n    MAKE_ROUTE_PROTOCOL(GGP,     6),\n    MAKE_ROUTE_PROTOCOL(HELLO,   7),\n    MAKE_ROUTE_PROTOCOL(RIP,     8),\n    MAKE_ROUTE_PROTOCOL(IS_IS,   9),\n    MAKE_ROUTE_PROTOCOL(ES_IS,   10),\n    MAKE_ROUTE_PROTOCOL(CISCO,   11),\n    MAKE_ROUTE_PROTOCOL(BBN,     12),\n    MAKE_ROUTE_PROTOCOL(OSPF,    13),\n    MAKE_ROUTE_PROTOCOL(BGP,     14),\n\n    MAKE_ROUTE_PROTOCOL(NT_AUTOSTATIC,     10002),\n    MAKE_ROUTE_PROTOCOL(NT_STATIC,         10006),\n    MAKE_ROUTE_PROTOCOL(NT_STATIC_NON_DOD, 10007),\n} NL_ROUTE_PROTOCOL, *PNL_ROUTE_PROTOCOL;\n\ntypedef struct _NL_INTERFACE_OFFLOAD_ROD\n{\n    BOOLEAN NlChecksumSupported : 1;\n    BOOLEAN NlOptionsSupported : 1;\n    BOOLEAN TlDatagramChecksumSupported : 1;\n    BOOLEAN TlStreamChecksumSupported : 1;\n    BOOLEAN TlStreamOptionsSupported : 1;\n    BOOLEAN FastPathCompatible : 1;\n    BOOLEAN TlLargeSendOffloadSupported : 1;\n    BOOLEAN TlGiantSendOffloadSupported : 1;\n} NL_INTERFACE_OFFLOAD_ROD, *PNL_INTERFACE_OFFLOAD_ROD;\n\n#endif /* __WINE_NLDEF_H */\n"
  },
  {
    "path": "wine/windows/npapi.h",
    "content": "/*\n * Copyright (C) 2004 Juan Lang\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __WINE_NPAPI_H__\n#define __WINE_NPAPI_H__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* capabilities */\n#define WNNC_SPEC_VERSION          0x00000001\n#define WNNC_SPEC_VERSION51        0x00050001\n#define WNNC_NET_TYPE              0x00000002\n#define WNNC_NET_NONE              0x00000000\n\n#define WNNC_DRIVER_VERSION        0x00000003\n\n#define WNNC_USER                  0x00000004\n#define WNNC_USR_GETUSER           0x00000001\n\n#define WNNC_CONNECTION            0x00000006\n#define WNNC_CON_ADDCONNECTION     0x00000001\n#define WNNC_CON_CANCELCONNECTION  0x00000002\n#define WNNC_CON_GETCONNECTIONS    0x00000004\n#define WNNC_CON_ADDCONNECTION3    0x00000008\n#define WNNC_CON_GETPERFORMANCE    0x00000040\n#define WNNC_CON_DEFER             0x00000080\n\n#define WNNC_DIALOG                0x00000008\n#define WNNC_DLG_DEVICEMODE        0x00000001\n#define WNNC_DLG_PROPERTYDIALOG    0x00000020\n#define WNNC_DLG_SEARCHDIALOG      0x00000040\n#define WNNC_DLG_FORMATNETWORKNAME 0x00000080\n#define WNNC_DLG_PERMISSIONEDITOR  0x00000100\n#define WNNC_DLG_GETRESOURCEPARENT 0x00000200\n#define WNNC_DLG_GETRESOURCEINFORMATION 0x00000800\n\n#define WNNC_ADMIN                 0x00000009\n#define WNNC_ADM_GETDIRECTORYTYPE  0x00000001\n#define WNNC_ADM_DIRECTORYNOTIFY   0x00000002\n\n#define WNNC_ENUMERATION           0x0000000b\n#define WNNC_ENUM_GLOBAL           0x00000001\n#define WNNC_ENUM_LOCAL            0x00000002\n#define WNNC_ENUM_CONTEXT          0x00000004\n\n#define WNNC_START                 0x0000000c\n#define WNNC_WAIT_FOR_START        0x00000001\n\ntypedef DWORD (APIENTRY *PF_NPGetCaps)(DWORD ndex);\n\n/* get user */\ntypedef DWORD (APIENTRY *PF_NPGetUser)(LPWSTR lpName, LPWSTR lpUserName,\n LPDWORD lpnBufferLen);\n\n/* enumeration-related */\ntypedef DWORD (APIENTRY *PF_NPOpenEnum)(DWORD dwScope, DWORD dwType, DWORD dwUsage,\n LPNETRESOURCEW lpNetResource, LPHANDLE lphEnum);\ntypedef DWORD (APIENTRY *PF_NPEnumResource)(HANDLE hEnum, LPDWORD lpcCount,\n LPVOID lpBuffer, LPDWORD lpBufferSize);\ntypedef DWORD (APIENTRY *PF_NPCloseEnum)(HANDLE hEnum);\ntypedef DWORD (APIENTRY *PF_NPGetResourceInformation)(LPNETRESOURCEW lpNetResource,\n LPVOID lpBuffer, LPDWORD lpcbBuffer, LPWSTR* lplpSystem);\n\n/* connection-related */\ntypedef DWORD (APIENTRY *PF_NPAddConnection)(LPNETRESOURCEW lpNetResource,\n LPWSTR lpPassword, LPWSTR lpUserName);\ntypedef DWORD (APIENTRY *PF_NPAddConnection3)(HWND hwndOwner,\n LPNETRESOURCEW lpNetResource, LPWSTR lpPassword, LPWSTR lpUserName,\n DWORD dwFlags);\ntypedef DWORD (APIENTRY *PF_NPCancelConnection)(LPWSTR lpName, BOOL fForce);\ntypedef DWORD (APIENTRY *PF_NPGetConnection)(LPWSTR lpLocalName,\n LPWSTR lpRemoteName, LPDWORD lpnBufferLen);\n\n/* network name manipulation */\ntypedef DWORD (APIENTRY *PF_NPGetUniversalName)(LPWSTR lpLocalPath,\n DWORD dwInfoLevel, LPVOID lpBuffer, LPDWORD lpnBufferSize);\ntypedef DWORD (APIENTRY *PF_NPFormatNetworkName)(LPWSTR lpRemoteName,\n LPWSTR lpFormattedName, LPDWORD lpnLength, DWORD dwFlags,\n DWORD dwAveCharPerLine);\n\n/* dialogs */\ntypedef DWORD (APIENTRY *PF_NPDeviceMode)(HWND hParent);\n\n/* search dialog */\n#define WNSRCH_REFRESH_FIRST_LEVEL 0x00000001\n\ntypedef DWORD (APIENTRY *PF_NPSearchDialog)(HWND hwndParent,\n LPNETRESOURCEW lpNetResource, LPVOID lpBuffer, DWORD cbBuffer,\n LPDWORD lpnFlags);\n\n/* property dialog */\n\n#define WNTYPE_DRIVE   1\n#define WNTYPE_FILE    2\n#define WNTYPE_PRINTER 3\n#define WNTYPE_COMM    4\n\n#define WNPS_FILE 0\n#define WNPS_DIR  1\n#define WNPS_MULT 2\n\ntypedef DWORD (APIENTRY *PF_NPGetPropertyText)(DWORD iButton, DWORD nPropSel,\n LPWSTR lpName, LPWSTR lpButtonName, DWORD nButtonNameLen, DWORD nType);\n\ntypedef DWORD (APIENTRY *PF_NPPropertyDialog)(HWND hwndParent, DWORD iButtonDlg,\n DWORD nPropSel, LPWSTR lpFileName, DWORD nType);\n\n/* admin */\n#define WNDT_NORMAL  0\n#define WNDT_NETWORK 1\n\n#define WNDN_MKDIR 1\n#define WNDN_RMDIR 2\n#define WNDN_MVDIR 3\n\ntypedef DWORD (APIENTRY *PF_NPGetDirectoryType)(LPWSTR lpName, LPINT lpType,\n BOOL bFlushCache);\ntypedef DWORD (APIENTRY *PF_NPDirectoryNotify)(HWND hwnd, LPWSTR lpDir,\n DWORD dwOper);\n\n/* permission editor dialogs */\n#define WNPERMC_PERM  0x00000001\n#define WNPERMC_AUDIT 0x00000002\n#define WNPERMC_OWNER 0x00000004\n\ntypedef DWORD (APIENTRY *PF_NPFMXGetPermCaps)(LPWSTR lpDriveName);\n\n#define WNPERM_DLG_PERM  0\n#define WNPERM_DLG_AUDIT 1\n#define WNPERM_DLG_OWNER 2\n\ntypedef DWORD (APIENTRY *PF_NPFMXEditPerm)(LPWSTR lpDriveName, HWND hwndFMX,\n DWORD nDialogType);\n\ntypedef DWORD (APIENTRY *PF_NPFMXGetPermHelp)(LPWSTR lpDriveName,\n DWORD nDialogType, BOOL fDirectory, LPVOID lpFileNameBuffer,\n LPDWORD lpBufferSize, LPDWORD lpnHelpContext);\n\nVOID WINAPI WNetSetLastErrorA(DWORD err, LPSTR lpError, LPSTR lpProviders);\nVOID WINAPI WNetSetLastErrorW(DWORD err, LPWSTR lpError, LPWSTR lpProviders);\n#define WNetSetLastError WINELIB_NAME_AW(WNetSetLastError)\n\n/* provider classes */\n#define WN_NETWORK_CLASS         0x00000001\n#define WN_CREDENTIAL_CLASS      0x00000002\n#define WN_PRIMARY_AUTHENT_CLASS 0x00000004\n#define WN_SERVICE_CLASS         0x00000008\n\n#define WN_VALID_LOGON_ACCOUNT   0x00000001\n#define WN_NT_PASSWORD_CHANGED   0x00000002\n\n/* notifications */\ntypedef DWORD (APIENTRY *PF_NPLogonNotify)(PLUID lpLogonId,\n LPCWSTR lpAuthentInfoType, LPVOID lpAuthentInfo,\n LPCWSTR lpPreviousAuthentInfoType, LPVOID lpPreviousAuthentInfo,\n LPWSTR lpStationName, LPVOID StationHandle, LPWSTR *lpLogonScript);\ntypedef DWORD (APIENTRY *PF_NPPasswordChangeNotify)(LPCWSTR lpAuthentInfoType,\n LPVOID lpAuthentInfo, LPCWSTR lpPreviousAuthentInfoType,\n LPVOID lpPreviousAuthentInfo, LPWSTR lpStationName, LPVOID StationHandle,\n DWORD dwChangeInfo);\n\n#define NOTIFY_PRE  0x00000001\n#define NOTIFY_POST 0x00000002\n\ntypedef struct _NOTIFYINFO\n{\n    DWORD  dwNotifyStatus;\n    DWORD  dwOperationStatus;\n    LPVOID lpContext;\n} NOTIFYINFO, *LPNOTIFYINFO;\n\n/* FIXME: NetResource is declared as a NETRESOURCE in psdk, not a NETRESOURCEW,\n * but how can the type change in a service provider?  Defaulting to wide-char\n * for consistency with the rest of the api.\n */\ntypedef struct _NOTIFYADD\n{\n    HWND         hwndOwner;\n    NETRESOURCEW NetResource;\n    DWORD        dwAddFlags;\n} NOTIFYADD, *LPNOTIFYADD;\n\n/* FIXME: lpName and lpProvider are declared as LPTSTRs in psdk, but again\n * for consistency with rest of api defaulting to LPWSTRs.\n */\ntypedef struct _NOTIFYCANCEL\n{\n    LPWSTR lpName;\n    LPWSTR lpProvider;\n    DWORD  dwFlags;\n    BOOL   fForce;\n} NOTIFYCANCEL, *LPNOTIFYCANCEL;\n\ntypedef DWORD (APIENTRY *PF_AddConnectNotify)(LPNOTIFYINFO lpNotifyInfo,\n LPNOTIFYADD lpAddInfo);\ntypedef DWORD (APIENTRY *PF_CancelConnectNotify)(LPNOTIFYINFO lpNotifyInfo,\n LPNOTIFYADD lpAddInfo);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* ndef __WINE_NPAPI_H__ */\n"
  },
  {
    "path": "wine/windows/nserror.h",
    "content": "/*\n * Copyright (C) 2017 Austin English\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _NSERROR_H\n#define _NSERROR_H\n\n/* Facility codes */\n#define FACILITY_NS_WIN32                                             0x7\n#define FACILITY_NS                                                   0xD\n\n/* Severity codes */\n#define STATUS_SEVERITY_WARNING                                       0x2\n#define STATUS_SEVERITY_SUCCESS                                       0x0\n#define STATUS_SEVERITY_INFORMATIONAL                                 0x1\n#define STATUS_SEVERITY_ERROR                                         0x3\n\n/* Success events */\n#define NS_S_CALLPENDING                                              _HRESULT_TYPEDEF_(0x000d0000)\n#define NS_S_CALLABORTED                                              _HRESULT_TYPEDEF_(0x000d0001)\n#define NS_S_STREAM_TRUNCATED                                         _HRESULT_TYPEDEF_(0x000d0002)\n\n/* Warning events */\n#define NS_W_SERVER_BANDWIDTH_LIMIT                                   _HRESULT_TYPEDEF_(0x800d0003)\n#define NS_W_FILE_BANDWIDTH_LIMIT                                     _HRESULT_TYPEDEF_(0x800d0004)\n\n/* Error events */\n#define NS_E_NOCONNECTION                                             _HRESULT_TYPEDEF_(0xc00d0005)\n#define NS_E_CANNOTCONNECT                                            _HRESULT_TYPEDEF_(0xc00d0006)\n#define NS_E_CANNOTDESTROYTITLE                                       _HRESULT_TYPEDEF_(0xc00d0007)\n#define NS_E_CANNOTRENAMETITLE                                        _HRESULT_TYPEDEF_(0xc00d0008)\n#define NS_E_CANNOTOFFLINEDISK                                        _HRESULT_TYPEDEF_(0xc00d0009)\n#define NS_E_CANNOTONLINEDISK                                         _HRESULT_TYPEDEF_(0xc00d000a)\n#define NS_E_NOREGISTEREDWALKER                                       _HRESULT_TYPEDEF_(0xc00d000b)\n#define NS_E_NOFUNNEL                                                 _HRESULT_TYPEDEF_(0xc00d000c)\n#define NS_E_NO_LOCALPLAY                                             _HRESULT_TYPEDEF_(0xc00d000d)\n#define NS_E_NETWORK_BUSY                                             _HRESULT_TYPEDEF_(0xc00d000e)\n#define NS_E_TOO_MANY_SESS                                            _HRESULT_TYPEDEF_(0xc00d000f)\n#define NS_E_ALREADY_CONNECTED                                        _HRESULT_TYPEDEF_(0xc00d0010)\n#define NS_E_INVALID_INDEX                                            _HRESULT_TYPEDEF_(0xc00d0011)\n#define NS_E_PROTOCOL_MISMATCH                                        _HRESULT_TYPEDEF_(0xc00d0012)\n#define NS_E_TIMEOUT                                                  _HRESULT_TYPEDEF_(0xc00d0013)\n#define NS_E_NET_WRITE                                                _HRESULT_TYPEDEF_(0xc00d0014)\n#define NS_E_NET_READ                                                 _HRESULT_TYPEDEF_(0xc00d0015)\n#define NS_E_DISK_WRITE                                               _HRESULT_TYPEDEF_(0xc00d0016)\n#define NS_E_DISK_READ                                                _HRESULT_TYPEDEF_(0xc00d0017)\n#define NS_E_FILE_WRITE                                               _HRESULT_TYPEDEF_(0xc00d0018)\n#define NS_E_FILE_READ                                                _HRESULT_TYPEDEF_(0xc00d0019)\n#define NS_E_FILE_NOT_FOUND                                           _HRESULT_TYPEDEF_(0xc00d001a)\n#define NS_E_FILE_EXISTS                                              _HRESULT_TYPEDEF_(0xc00d001b)\n#define NS_E_INVALID_NAME                                             _HRESULT_TYPEDEF_(0xc00d001c)\n#define NS_E_FILE_OPEN_FAILED                                         _HRESULT_TYPEDEF_(0xc00d001d)\n#define NS_E_FILE_ALLOCATION_FAILED                                   _HRESULT_TYPEDEF_(0xc00d001e)\n#define NS_E_FILE_INIT_FAILED                                         _HRESULT_TYPEDEF_(0xc00d001f)\n#define NS_E_FILE_PLAY_FAILED                                         _HRESULT_TYPEDEF_(0xc00d0020)\n#define NS_E_SET_DISK_UID_FAILED                                      _HRESULT_TYPEDEF_(0xc00d0021)\n#define NS_E_INDUCED                                                  _HRESULT_TYPEDEF_(0xc00d0022)\n#define NS_E_CCLINK_DOWN                                              _HRESULT_TYPEDEF_(0xc00d0023)\n#define NS_E_INTERNAL                                                 _HRESULT_TYPEDEF_(0xc00d0024)\n#define NS_E_BUSY                                                     _HRESULT_TYPEDEF_(0xc00d0025)\n#define NS_E_UNRECOGNIZED_STREAM_TYPE                                 _HRESULT_TYPEDEF_(0xc00d0026)\n#define NS_E_NETWORK_SERVICE_FAILURE                                  _HRESULT_TYPEDEF_(0xc00d0027)\n#define NS_E_NETWORK_RESOURCE_FAILURE                                 _HRESULT_TYPEDEF_(0xc00d0028)\n#define NS_E_CONNECTION_FAILURE                                       _HRESULT_TYPEDEF_(0xc00d0029)\n#define NS_E_SHUTDOWN                                                 _HRESULT_TYPEDEF_(0xc00d002a)\n#define NS_E_INVALID_REQUEST                                          _HRESULT_TYPEDEF_(0xc00d002b)\n#define NS_E_INSUFFICIENT_BANDWIDTH                                   _HRESULT_TYPEDEF_(0xc00d002c)\n#define NS_E_NOT_REBUILDING                                           _HRESULT_TYPEDEF_(0xc00d002d)\n#define NS_E_LATE_OPERATION                                           _HRESULT_TYPEDEF_(0xc00d002e)\n#define NS_E_INVALID_DATA                                             _HRESULT_TYPEDEF_(0xc00d002f)\n#define NS_E_FILE_BANDWIDTH_LIMIT                                     _HRESULT_TYPEDEF_(0xc00d0030)\n#define NS_E_OPEN_FILE_LIMIT                                          _HRESULT_TYPEDEF_(0xc00d0031)\n#define NS_E_BAD_CONTROL_DATA                                         _HRESULT_TYPEDEF_(0xc00d0032)\n#define NS_E_NO_STREAM                                                _HRESULT_TYPEDEF_(0xc00d0033)\n#define NS_E_STREAM_END                                               _HRESULT_TYPEDEF_(0xc00d0034)\n#define NS_E_SERVER_NOT_FOUND                                         _HRESULT_TYPEDEF_(0xc00d0035)\n#define NS_E_DUPLICATE_NAME                                           _HRESULT_TYPEDEF_(0xc00d0036)\n#define NS_E_DUPLICATE_ADDRESS                                        _HRESULT_TYPEDEF_(0xc00d0037)\n#define NS_E_BAD_MULTICAST_ADDRESS                                    _HRESULT_TYPEDEF_(0xc00d0038)\n#define NS_E_BAD_ADAPTER_ADDRESS                                      _HRESULT_TYPEDEF_(0xc00d0039)\n#define NS_E_BAD_DELIVERY_MODE                                        _HRESULT_TYPEDEF_(0xc00d003a)\n#define NS_E_INVALID_CHANNEL                                          _HRESULT_TYPEDEF_(0xc00d003b)\n#define NS_E_INVALID_STREAM                                           _HRESULT_TYPEDEF_(0xc00d003c)\n#define NS_E_INVALID_ARCHIVE                                          _HRESULT_TYPEDEF_(0xc00d003d)\n#define NS_E_NOTITLES                                                 _HRESULT_TYPEDEF_(0xc00d003e)\n#define NS_E_INVALID_CLIENT                                           _HRESULT_TYPEDEF_(0xc00d003f)\n#define NS_E_INVALID_BLACKHOLE_ADDRESS                                _HRESULT_TYPEDEF_(0xc00d0040)\n#define NS_E_INCOMPATIBLE_FORMAT                                      _HRESULT_TYPEDEF_(0xc00d0041)\n#define NS_E_INVALID_KEY                                              _HRESULT_TYPEDEF_(0xc00d0042)\n#define NS_E_INVALID_PORT                                             _HRESULT_TYPEDEF_(0xc00d0043)\n#define NS_E_INVALID_TTL                                              _HRESULT_TYPEDEF_(0xc00d0044)\n#define NS_E_STRIDE_REFUSED                                           _HRESULT_TYPEDEF_(0xc00d0045)\n#define NS_E_MMSAUTOSERVER_CANTFINDWALKER                             _HRESULT_TYPEDEF_(0xc00d0046)\n#define NS_E_MAX_BITRATE                                              _HRESULT_TYPEDEF_(0xc00d0047)\n#define NS_E_LOGFILEPERIOD                                            _HRESULT_TYPEDEF_(0xc00d0048)\n#define NS_E_MAX_CLIENTS                                              _HRESULT_TYPEDEF_(0xc00d0049)\n#define NS_E_LOG_FILE_SIZE                                            _HRESULT_TYPEDEF_(0xc00d004a)\n#define NS_E_MAX_FILERATE                                             _HRESULT_TYPEDEF_(0xc00d004b)\n#define NS_E_WALKER_UNKNOWN                                           _HRESULT_TYPEDEF_(0xc00d004c)\n#define NS_E_WALKER_SERVER                                            _HRESULT_TYPEDEF_(0xc00d004d)\n#define NS_E_WALKER_USAGE                                             _HRESULT_TYPEDEF_(0xc00d004e)\n\n/* Monitor events */\n#define NS_I_TIGER_START                                              _HRESULT_TYPEDEF_(0x400d004f)\n#define NS_E_TIGER_FAIL                                               _HRESULT_TYPEDEF_(0xc00d0050)\n#define NS_I_CUB_START                                                _HRESULT_TYPEDEF_(0x400d0051)\n#define NS_I_CUB_RUNNING                                              _HRESULT_TYPEDEF_(0x400d0052)\n#define NS_E_CUB_FAIL                                                 _HRESULT_TYPEDEF_(0xc00d0053)\n#define NS_I_DISK_START                                               _HRESULT_TYPEDEF_(0x400d0054)\n#define NS_E_DISK_FAIL                                                _HRESULT_TYPEDEF_(0xc00d0055)\n#define NS_I_DISK_REBUILD_STARTED                                     _HRESULT_TYPEDEF_(0x400d0056)\n#define NS_I_DISK_REBUILD_FINISHED                                    _HRESULT_TYPEDEF_(0x400d0057)\n#define NS_I_DISK_REBUILD_ABORTED                                     _HRESULT_TYPEDEF_(0x400d0058)\n#define NS_I_LIMIT_FUNNELS                                            _HRESULT_TYPEDEF_(0x400d0059)\n#define NS_I_START_DISK                                               _HRESULT_TYPEDEF_(0x400d005a)\n#define NS_I_STOP_DISK                                                _HRESULT_TYPEDEF_(0x400d005b)\n#define NS_I_STOP_CUB                                                 _HRESULT_TYPEDEF_(0x400d005c)\n#define NS_I_KILL_USERSESSION                                         _HRESULT_TYPEDEF_(0x400d005d)\n#define NS_I_KILL_CONNECTION                                          _HRESULT_TYPEDEF_(0x400d005e)\n#define NS_I_REBUILD_DISK                                             _HRESULT_TYPEDEF_(0x400d005f)\n#define NS_W_UNKNOWN_EVENT                                            _HRESULT_TYPEDEF_(0x800d0060)\n#define NS_E_MAX_FUNNELS_ALERT                                        _HRESULT_TYPEDEF_(0xc00d0060)\n#define NS_E_ALLOCATE_FILE_FAIL                                       _HRESULT_TYPEDEF_(0xc00d0061)\n#define NS_E_PAGING_ERROR                                             _HRESULT_TYPEDEF_(0xc00d0062)\n#define NS_E_BAD_BLOCK0_VERSION                                       _HRESULT_TYPEDEF_(0xc00d0063)\n#define NS_E_BAD_DISK_UID                                             _HRESULT_TYPEDEF_(0xc00d0064)\n#define NS_E_BAD_FSMAJOR_VERSION                                      _HRESULT_TYPEDEF_(0xc00d0065)\n#define NS_E_BAD_STAMPNUMBER                                          _HRESULT_TYPEDEF_(0xc00d0066)\n#define NS_E_PARTIALLY_REBUILT_DISK                                   _HRESULT_TYPEDEF_(0xc00d0067)\n#define NS_E_ENACTPLAN_GIVEUP                                         _HRESULT_TYPEDEF_(0xc00d0068)\n#define MCMADM_I_NO_EVENTS                                            _HRESULT_TYPEDEF_(0x400d0069)\n#define MCMADM_E_REGKEY_NOT_FOUND                                     _HRESULT_TYPEDEF_(0xc00d006a)\n#define NS_E_NO_FORMATS                                               _HRESULT_TYPEDEF_(0xc00d006b)\n#define NS_E_NO_REFERENCES                                            _HRESULT_TYPEDEF_(0xc00d006c)\n#define NS_E_WAVE_OPEN                                                _HRESULT_TYPEDEF_(0xc00d006d)\n#define NS_I_LOGGING_FAILED                                           _HRESULT_TYPEDEF_(0x400d006e)\n#define NS_E_CANNOTCONNECTEVENTS                                      _HRESULT_TYPEDEF_(0xc00d006f)\n#define NS_I_LIMIT_BANDWIDTH                                          _HRESULT_TYPEDEF_(0x400d0070)\n#define NS_E_NO_DEVICE                                                _HRESULT_TYPEDEF_(0xc00d0071)\n#define NS_E_NO_SPECIFIED_DEVICE                                      _HRESULT_TYPEDEF_(0xc00d0072)\n#define NS_E_NOTHING_TO_DO                                            _HRESULT_TYPEDEF_(0xc00d07f1)\n#define NS_E_NO_MULTICAST                                             _HRESULT_TYPEDEF_(0xc00d07f2)\n\n/* Error events */\n#define NS_E_MONITOR_GIVEUP                                           _HRESULT_TYPEDEF_(0xc00d00c8)\n#define NS_E_REMIRRORED_DISK                                          _HRESULT_TYPEDEF_(0xc00d00c9)\n#define NS_E_INSUFFICIENT_DATA                                        _HRESULT_TYPEDEF_(0xc00d00ca)\n#define NS_E_ASSERT                                                   _HRESULT_TYPEDEF_(0xc00d00cb)\n#define NS_E_BAD_ADAPTER_NAME                                         _HRESULT_TYPEDEF_(0xc00d00cc)\n#define NS_E_NOT_LICENSED                                             _HRESULT_TYPEDEF_(0xc00d00cd)\n#define NS_E_NO_SERVER_CONTACT                                        _HRESULT_TYPEDEF_(0xc00d00ce)\n#define NS_E_TOO_MANY_TITLES                                          _HRESULT_TYPEDEF_(0xc00d00cf)\n#define NS_E_TITLE_SIZE_EXCEEDED                                      _HRESULT_TYPEDEF_(0xc00d00d0)\n#define NS_E_UDP_DISABLED                                             _HRESULT_TYPEDEF_(0xc00d00d1)\n#define NS_E_TCP_DISABLED                                             _HRESULT_TYPEDEF_(0xc00d00d2)\n#define NS_E_HTTP_DISABLED                                            _HRESULT_TYPEDEF_(0xc00d00d3)\n#define NS_E_LICENSE_EXPIRED                                          _HRESULT_TYPEDEF_(0xc00d00d4)\n#define NS_E_TITLE_BITRATE                                            _HRESULT_TYPEDEF_(0xc00d00d5)\n#define NS_E_EMPTY_PROGRAM_NAME                                       _HRESULT_TYPEDEF_(0xc00d00d6)\n#define NS_E_MISSING_CHANNEL                                          _HRESULT_TYPEDEF_(0xc00d00d7)\n#define NS_E_NO_CHANNELS                                              _HRESULT_TYPEDEF_(0xc00d00d8)\n#define NS_E_INVALID_INDEX2                                           _HRESULT_TYPEDEF_(0xc00d00d9)\n\n/* (More) error events */\n#define NS_E_CUB_FAIL_LINK                                            _HRESULT_TYPEDEF_(0xc00d0190)\n#define NS_I_CUB_UNFAIL_LINK                                          _HRESULT_TYPEDEF_(0x400d0191)\n#define NS_E_BAD_CUB_UID                                              _HRESULT_TYPEDEF_(0xc00d0192)\n#define NS_I_RESTRIPE_START                                           _HRESULT_TYPEDEF_(0x400d0193)\n#define NS_I_RESTRIPE_DONE                                            _HRESULT_TYPEDEF_(0x400d0194)\n#define NS_E_GLITCH_MODE                                              _HRESULT_TYPEDEF_(0xc00d0195)\n#define NS_I_RESTRIPE_DISK_OUT                                        _HRESULT_TYPEDEF_(0x400d0196)\n#define NS_I_RESTRIPE_CUB_OUT                                         _HRESULT_TYPEDEF_(0x400d0197)\n#define NS_I_DISK_STOP                                                _HRESULT_TYPEDEF_(0x400d0198)\n#define NS_I_CATATONIC_FAILURE                                        _HRESULT_TYPEDEF_(0x800d0199)\n#define NS_I_CATATONIC_AUTO_UNFAIL                                    _HRESULT_TYPEDEF_(0x800d019a)\n#define NS_E_NO_MEDIA_PROTOCOL                                        _HRESULT_TYPEDEF_(0xc00d019b)\n\n/* WMSDK errors */\n#define NS_E_INVALID_INPUT_FORMAT                                     _HRESULT_TYPEDEF_(0xc00d0bb8)\n#define NS_E_MSAUDIO_NOT_INSTALLED                                    _HRESULT_TYPEDEF_(0xc00d0bb9)\n#define NS_E_UNEXPECTED_MSAUDIO_ERROR                                 _HRESULT_TYPEDEF_(0xc00d0bba)\n#define NS_E_INVALID_OUTPUT_FORMAT                                    _HRESULT_TYPEDEF_(0xc00d0bbb)\n#define NS_E_NOT_CONFIGURED                                           _HRESULT_TYPEDEF_(0xc00d0bbc)\n#define NS_E_PROTECTED_CONTENT                                        _HRESULT_TYPEDEF_(0xc00d0bbd)\n#define NS_E_LICENSE_REQUIRED                                         _HRESULT_TYPEDEF_(0xc00d0bbe)\n#define NS_E_TAMPERED_CONTENT                                         _HRESULT_TYPEDEF_(0xc00d0bbf)\n#define NS_E_LICENSE_OUTOFDATE                                        _HRESULT_TYPEDEF_(0xc00d0bc0)\n#define NS_E_LICENSE_INCORRECT_RIGHTS                                 _HRESULT_TYPEDEF_(0xc00d0bc1)\n#define NS_E_AUDIO_CODEC_NOT_INSTALLED                                _HRESULT_TYPEDEF_(0xc00d0bc2)\n#define NS_E_AUDIO_CODEC_ERROR                                        _HRESULT_TYPEDEF_(0xc00d0bc3)\n#define NS_E_VIDEO_CODEC_NOT_INSTALLED                                _HRESULT_TYPEDEF_(0xc00d0bc4)\n#define NS_E_VIDEO_CODEC_ERROR                                        _HRESULT_TYPEDEF_(0xc00d0bc5)\n#define NS_E_INVALIDPROFILE                                           _HRESULT_TYPEDEF_(0xc00d0bc6)\n#define NS_E_INCOMPATIBLE_VERSION                                     _HRESULT_TYPEDEF_(0xc00d0bc7)\n#define NS_S_REBUFFERING                                              _HRESULT_TYPEDEF_(0x000d0bc8)\n#define NS_S_DEGRADING_QUALITY                                        _HRESULT_TYPEDEF_(0x000d0bc9)\n#define NS_E_OFFLINE_MODE                                             _HRESULT_TYPEDEF_(0xc00d0bca)\n#define NS_E_NOT_CONNECTED                                            _HRESULT_TYPEDEF_(0xc00d0bcb)\n#define NS_E_TOO_MUCH_DATA                                            _HRESULT_TYPEDEF_(0xc00d0bcc)\n#define NS_E_UNSUPPORTED_PROPERTY                                     _HRESULT_TYPEDEF_(0xc00d0bcd)\n#define NS_E_8BIT_WAVE_UNSUPPORTED                                    _HRESULT_TYPEDEF_(0xc00d0bce)\n#define NS_E_NO_MORE_SAMPLES                                          _HRESULT_TYPEDEF_(0xc00d0bcf)\n#define NS_E_INVALID_SAMPLING_RATE                                    _HRESULT_TYPEDEF_(0xc00d0bd0)\n#define NS_E_MAX_PACKET_SIZE_TOO_SMALL                                _HRESULT_TYPEDEF_(0xc00d0bd1)\n#define NS_E_LATE_PACKET                                              _HRESULT_TYPEDEF_(0xc00d0bd2)\n#define NS_E_DUPLICATE_PACKET                                         _HRESULT_TYPEDEF_(0xc00d0bd3)\n#define NS_E_SDK_BUFFERTOOSMALL                                       _HRESULT_TYPEDEF_(0xc00d0bd4)\n#define NS_E_INVALID_NUM_PASSES                                       _HRESULT_TYPEDEF_(0xc00d0bd5)\n#define NS_E_ATTRIBUTE_READ_ONLY                                      _HRESULT_TYPEDEF_(0xc00d0bd6)\n#define NS_E_ATTRIBUTE_NOT_ALLOWED                                    _HRESULT_TYPEDEF_(0xc00d0bd7)\n#define NS_E_INVALID_EDL                                              _HRESULT_TYPEDEF_(0xc00d0bd8)\n#define NS_E_DATA_UNIT_EXTENSION_TOO_LARGE                            _HRESULT_TYPEDEF_(0xc00d0bd9)\n#define NS_E_CODEC_DMO_ERROR                                          _HRESULT_TYPEDEF_(0xc00d0bda)\n#define NS_S_TRANSCRYPTOR_EOF                                         _HRESULT_TYPEDEF_(0x000d0bdb)\n#define NS_E_FEATURE_DISABLED_BY_GROUP_POLICY                         _HRESULT_TYPEDEF_(0xc00d0bdc)\n#define NS_E_FEATURE_DISABLED_IN_SKU                                  _HRESULT_TYPEDEF_(0xc00d0bdd)\n\n/* WMP errors */\n#define NS_E_NO_CD                                                    _HRESULT_TYPEDEF_(0xc00d0fa0)\n#define NS_E_CANT_READ_DIGITAL                                        _HRESULT_TYPEDEF_(0xc00d0fa1)\n#define NS_E_DEVICE_DISCONNECTED                                      _HRESULT_TYPEDEF_(0xc00d0fa2)\n#define NS_E_DEVICE_NOT_SUPPORT_FORMAT                                _HRESULT_TYPEDEF_(0xc00d0fa3)\n#define NS_E_SLOW_READ_DIGITAL                                        _HRESULT_TYPEDEF_(0xc00d0fa4)\n#define NS_E_MIXER_INVALID_LINE                                       _HRESULT_TYPEDEF_(0xc00d0fa5)\n#define NS_E_MIXER_INVALID_CONTROL                                    _HRESULT_TYPEDEF_(0xc00d0fa6)\n#define NS_E_MIXER_INVALID_VALUE                                      _HRESULT_TYPEDEF_(0xc00d0fa7)\n#define NS_E_MIXER_UNKNOWN_MMRESULT                                   _HRESULT_TYPEDEF_(0xc00d0fa8)\n#define NS_E_USER_STOP                                                _HRESULT_TYPEDEF_(0xc00d0fa9)\n#define NS_E_MP3_FORMAT_NOT_FOUND                                     _HRESULT_TYPEDEF_(0xc00d0faa)\n#define NS_E_CD_READ_ERROR_NO_CORRECTION                              _HRESULT_TYPEDEF_(0xc00d0fab)\n#define NS_E_CD_READ_ERROR                                            _HRESULT_TYPEDEF_(0xc00d0fac)\n#define NS_E_CD_SLOW_COPY                                             _HRESULT_TYPEDEF_(0xc00d0fad)\n#define NS_E_CD_COPYTO_CD                                             _HRESULT_TYPEDEF_(0xc00d0fae)\n#define NS_E_MIXER_NODRIVER                                           _HRESULT_TYPEDEF_(0xc00d0faf)\n#define NS_E_REDBOOK_ENABLED_WHILE_COPYING                            _HRESULT_TYPEDEF_(0xc00d0fb0)\n#define NS_E_CD_REFRESH                                               _HRESULT_TYPEDEF_(0xc00d0fb1)\n#define NS_E_CD_DRIVER_PROBLEM                                        _HRESULT_TYPEDEF_(0xc00d0fb2)\n#define NS_E_WONT_DO_DIGITAL                                          _HRESULT_TYPEDEF_(0xc00d0fb3)\n#define NS_E_WMPXML_NOERROR                                           _HRESULT_TYPEDEF_(0xc00d0fb4)\n#define NS_E_WMPXML_ENDOFDATA                                         _HRESULT_TYPEDEF_(0xc00d0fb5)\n#define NS_E_WMPXML_PARSEERROR                                        _HRESULT_TYPEDEF_(0xc00d0fb6)\n#define NS_E_WMPXML_ATTRIBUTENOTFOUND                                 _HRESULT_TYPEDEF_(0xc00d0fb7)\n#define NS_E_WMPXML_PINOTFOUND                                        _HRESULT_TYPEDEF_(0xc00d0fb8)\n#define NS_E_WMPXML_EMPTYDOC                                          _HRESULT_TYPEDEF_(0xc00d0fb9)\n#define NS_E_WMP_PATH_ALREADY_IN_LIBRARY                              _HRESULT_TYPEDEF_(0xc00d0fba)\n#define NS_E_WMP_FILESCANALREADYSTARTED                               _HRESULT_TYPEDEF_(0xc00d0fbe)\n#define NS_E_WMP_HME_INVALIDOBJECTID                                  _HRESULT_TYPEDEF_(0xc00d0fbf)\n#define NS_E_WMP_MF_CODE_EXPIRED                                      _HRESULT_TYPEDEF_(0xc00d0fc0)\n#define NS_E_WMP_HME_NOTSEARCHABLEFORITEMS                            _HRESULT_TYPEDEF_(0xc00d0fc1)\n#define NS_E_WMP_HME_STALEREQUEST                                     _HRESULT_TYPEDEF_(0xc00d0fc2)\n#define NS_E_WMP_ADDTOLIBRARY_FAILED                                  _HRESULT_TYPEDEF_(0xc00d0fc7)\n#define NS_E_WMP_WINDOWSAPIFAILURE                                    _HRESULT_TYPEDEF_(0xc00d0fc8)\n#define NS_E_WMP_RECORDING_NOT_ALLOWED                                _HRESULT_TYPEDEF_(0xc00d0fc9)\n#define NS_E_DEVICE_NOT_READY                                         _HRESULT_TYPEDEF_(0xc00d0fca)\n#define NS_E_DAMAGED_FILE                                             _HRESULT_TYPEDEF_(0xc00d0fcb)\n#define NS_E_MPDB_GENERIC                                             _HRESULT_TYPEDEF_(0xc00d0fcc)\n#define NS_E_FILE_FAILED_CHECKS                                       _HRESULT_TYPEDEF_(0xc00d0fcd)\n#define NS_E_MEDIA_LIBRARY_FAILED                                     _HRESULT_TYPEDEF_(0xc00d0fce)\n#define NS_E_SHARING_VIOLATION                                        _HRESULT_TYPEDEF_(0xc00d0fcf)\n#define NS_E_NO_ERROR_STRING_FOUND                                    _HRESULT_TYPEDEF_(0xc00d0fd0)\n#define NS_E_WMPOCX_NO_REMOTE_CORE                                    _HRESULT_TYPEDEF_(0xc00d0fd1)\n#define NS_E_WMPOCX_NO_ACTIVE_CORE                                    _HRESULT_TYPEDEF_(0xc00d0fd2)\n#define NS_E_WMPOCX_NOT_RUNNING_REMOTELY                              _HRESULT_TYPEDEF_(0xc00d0fd3)\n#define NS_E_WMPOCX_NO_REMOTE_WINDOW                                  _HRESULT_TYPEDEF_(0xc00d0fd4)\n#define NS_E_WMPOCX_ERRORMANAGERNOTAVAILABLE                          _HRESULT_TYPEDEF_(0xc00d0fd5)\n#define NS_E_PLUGIN_NOTSHUTDOWN                                       _HRESULT_TYPEDEF_(0xc00d0fd6)\n#define NS_E_WMP_CANNOT_FIND_FOLDER                                   _HRESULT_TYPEDEF_(0xc00d0fd7)\n#define NS_E_WMP_STREAMING_RECORDING_NOT_ALLOWED                      _HRESULT_TYPEDEF_(0xc00d0fd8)\n#define NS_E_WMP_PLUGINDLL_NOTFOUND                                   _HRESULT_TYPEDEF_(0xc00d0fd9)\n#define NS_E_NEED_TO_ASK_USER                                         _HRESULT_TYPEDEF_(0xc00d0fda)\n#define NS_E_WMPOCX_PLAYER_NOT_DOCKED                                 _HRESULT_TYPEDEF_(0xc00d0fdb)\n#define NS_E_WMP_EXTERNAL_NOTREADY                                    _HRESULT_TYPEDEF_(0xc00d0fdc)\n#define NS_E_WMP_MLS_STALE_DATA                                       _HRESULT_TYPEDEF_(0xc00d0fdd)\n#define NS_E_WMP_UI_SUBCONTROLSNOTSUPPORTED                           _HRESULT_TYPEDEF_(0xc00d0fde)\n#define NS_E_WMP_UI_VERSIONMISMATCH                                   _HRESULT_TYPEDEF_(0xc00d0fdf)\n#define NS_E_WMP_UI_NOTATHEMEFILE                                     _HRESULT_TYPEDEF_(0xc00d0fe0)\n#define NS_E_WMP_UI_SUBELEMENTNOTFOUND                                _HRESULT_TYPEDEF_(0xc00d0fe1)\n#define NS_E_WMP_UI_VERSIONPARSE                                      _HRESULT_TYPEDEF_(0xc00d0fe2)\n#define NS_E_WMP_UI_VIEWIDNOTFOUND                                    _HRESULT_TYPEDEF_(0xc00d0fe3)\n#define NS_E_WMP_UI_PASSTHROUGH                                       _HRESULT_TYPEDEF_(0xc00d0fe4)\n#define NS_E_WMP_UI_OBJECTNOTFOUND                                    _HRESULT_TYPEDEF_(0xc00d0fe5)\n#define NS_E_WMP_UI_SECONDHANDLER                                     _HRESULT_TYPEDEF_(0xc00d0fe6)\n#define NS_E_WMP_UI_NOSKININZIP                                       _HRESULT_TYPEDEF_(0xc00d0fe7)\n#define NS_S_WMP_UI_VERSIONMISMATCH                                   _HRESULT_TYPEDEF_(0x000d0fe8)\n#define NS_S_WMP_EXCEPTION                                            _HRESULT_TYPEDEF_(0x000d0fe9)\n#define NS_E_WMP_URLDOWNLOADFAILED                                    _HRESULT_TYPEDEF_(0xc00d0fea)\n#define NS_E_WMPOCX_UNABLE_TO_LOAD_SKIN                               _HRESULT_TYPEDEF_(0xc00d0feb)\n#define NS_E_WMP_INVALID_SKIN                                         _HRESULT_TYPEDEF_(0xc00d0fec)\n#define NS_E_WMP_SENDMAILFAILED                                       _HRESULT_TYPEDEF_(0xc00d0fed)\n#define NS_E_WMP_LOCKEDINSKINMODE                                     _HRESULT_TYPEDEF_(0xc00d0fee)\n#define NS_E_WMP_FAILED_TO_SAVE_FILE                                  _HRESULT_TYPEDEF_(0xc00d0fef)\n#define NS_E_WMP_SAVEAS_READONLY                                      _HRESULT_TYPEDEF_(0xc00d0ff0)\n#define NS_E_WMP_FAILED_TO_SAVE_PLAYLIST                              _HRESULT_TYPEDEF_(0xc00d0ff1)\n#define NS_E_WMP_FAILED_TO_OPEN_WMD                                   _HRESULT_TYPEDEF_(0xc00d0ff2)\n#define NS_E_WMP_CANT_PLAY_PROTECTED                                  _HRESULT_TYPEDEF_(0xc00d0ff3)\n#define NS_E_SHARING_STATE_OUT_OF_SYNC                                _HRESULT_TYPEDEF_(0xc00d0ff4)\n#define NS_E_WMPOCX_REMOTE_PLAYER_ALREADY_RUNNING                     _HRESULT_TYPEDEF_(0xc00d0ffa)\n#define NS_E_WMP_RBC_JPGMAPPINGIMAGE                                  _HRESULT_TYPEDEF_(0xc00d1004)\n#define NS_E_WMP_JPGTRANSPARENCY                                      _HRESULT_TYPEDEF_(0xc00d1005)\n#define NS_E_WMP_INVALID_MAX_VAL                                      _HRESULT_TYPEDEF_(0xc00d1009)\n#define NS_E_WMP_INVALID_MIN_VAL                                      _HRESULT_TYPEDEF_(0xc00d100a)\n#define NS_E_WMP_CS_JPGPOSITIONIMAGE                                  _HRESULT_TYPEDEF_(0xc00d100e)\n#define NS_E_WMP_CS_NOTEVENLYDIVISIBLE                                _HRESULT_TYPEDEF_(0xc00d100f)\n#define NS_E_WMPZIP_NOTAZIPFILE                                       _HRESULT_TYPEDEF_(0xc00d1018)\n#define NS_E_WMPZIP_CORRUPT                                           _HRESULT_TYPEDEF_(0xc00d1019)\n#define NS_E_WMPZIP_FILENOTFOUND                                      _HRESULT_TYPEDEF_(0xc00d101a)\n#define NS_E_WMP_IMAGE_FILETYPE_UNSUPPORTED                           _HRESULT_TYPEDEF_(0xc00d1022)\n#define NS_E_WMP_IMAGE_INVALID_FORMAT                                 _HRESULT_TYPEDEF_(0xc00d1023)\n#define NS_E_WMP_GIF_UNEXPECTED_ENDOFFILE                             _HRESULT_TYPEDEF_(0xc00d1024)\n#define NS_E_WMP_GIF_INVALID_FORMAT                                   _HRESULT_TYPEDEF_(0xc00d1025)\n#define NS_E_WMP_GIF_BAD_VERSION_NUMBER                               _HRESULT_TYPEDEF_(0xc00d1026)\n#define NS_E_WMP_GIF_NO_IMAGE_IN_FILE                                 _HRESULT_TYPEDEF_(0xc00d1027)\n#define NS_E_WMP_PNG_INVALIDFORMAT                                    _HRESULT_TYPEDEF_(0xc00d1028)\n#define NS_E_WMP_PNG_UNSUPPORTED_BITDEPTH                             _HRESULT_TYPEDEF_(0xc00d1029)\n#define NS_E_WMP_PNG_UNSUPPORTED_COMPRESSION                          _HRESULT_TYPEDEF_(0xc00d102a)\n#define NS_E_WMP_PNG_UNSUPPORTED_FILTER                               _HRESULT_TYPEDEF_(0xc00d102b)\n#define NS_E_WMP_PNG_UNSUPPORTED_INTERLACE                            _HRESULT_TYPEDEF_(0xc00d102c)\n#define NS_E_WMP_PNG_UNSUPPORTED_BAD_CRC                              _HRESULT_TYPEDEF_(0xc00d102d)\n#define NS_E_WMP_BMP_INVALID_BITMASK                                  _HRESULT_TYPEDEF_(0xc00d102e)\n#define NS_E_WMP_BMP_TOPDOWN_DIB_UNSUPPORTED                          _HRESULT_TYPEDEF_(0xc00d102f)\n#define NS_E_WMP_BMP_BITMAP_NOT_CREATED                               _HRESULT_TYPEDEF_(0xc00d1030)\n#define NS_E_WMP_BMP_COMPRESSION_UNSUPPORTED                          _HRESULT_TYPEDEF_(0xc00d1031)\n#define NS_E_WMP_BMP_INVALID_FORMAT                                   _HRESULT_TYPEDEF_(0xc00d1032)\n#define NS_E_WMP_JPG_JERR_ARITHCODING_NOTIMPL                         _HRESULT_TYPEDEF_(0xc00d1033)\n#define NS_E_WMP_JPG_INVALID_FORMAT                                   _HRESULT_TYPEDEF_(0xc00d1034)\n#define NS_E_WMP_JPG_BAD_DCTSIZE                                      _HRESULT_TYPEDEF_(0xc00d1035)\n#define NS_E_WMP_JPG_BAD_VERSION_NUMBER                               _HRESULT_TYPEDEF_(0xc00d1036)\n#define NS_E_WMP_JPG_BAD_PRECISION                                    _HRESULT_TYPEDEF_(0xc00d1037)\n#define NS_E_WMP_JPG_CCIR601_NOTIMPL                                  _HRESULT_TYPEDEF_(0xc00d1038)\n#define NS_E_WMP_JPG_NO_IMAGE_IN_FILE                                 _HRESULT_TYPEDEF_(0xc00d1039)\n#define NS_E_WMP_JPG_READ_ERROR                                       _HRESULT_TYPEDEF_(0xc00d103a)\n#define NS_E_WMP_JPG_FRACT_SAMPLE_NOTIMPL                             _HRESULT_TYPEDEF_(0xc00d103b)\n#define NS_E_WMP_JPG_IMAGE_TOO_BIG                                    _HRESULT_TYPEDEF_(0xc00d103c)\n#define NS_E_WMP_JPG_UNEXPECTED_ENDOFFILE                             _HRESULT_TYPEDEF_(0xc00d103d)\n#define NS_E_WMP_JPG_SOF_UNSUPPORTED                                  _HRESULT_TYPEDEF_(0xc00d103e)\n#define NS_E_WMP_JPG_UNKNOWN_MARKER                                   _HRESULT_TYPEDEF_(0xc00d103f)\n#define NS_S_WMP_LOADED_GIF_IMAGE                                     _HRESULT_TYPEDEF_(0x000d1040)\n#define NS_S_WMP_LOADED_PNG_IMAGE                                     _HRESULT_TYPEDEF_(0x000d1041)\n#define NS_S_WMP_LOADED_BMP_IMAGE                                     _HRESULT_TYPEDEF_(0x000d1042)\n#define NS_S_WMP_LOADED_JPG_IMAGE                                     _HRESULT_TYPEDEF_(0x000d1043)\n#define NS_E_WMP_FAILED_TO_OPEN_IMAGE                                 _HRESULT_TYPEDEF_(0xc00d1044)\n#define NS_E_WMP_DAI_SONGTOOSHORT                                     _HRESULT_TYPEDEF_(0xc00d1049)\n#define NS_E_WMG_RATEUNAVAILABLE                                      _HRESULT_TYPEDEF_(0xc00d104a)\n#define NS_E_WMG_PLUGINUNAVAILABLE                                    _HRESULT_TYPEDEF_(0xc00d104b)\n#define NS_E_WMG_CANNOTQUEUE                                          _HRESULT_TYPEDEF_(0xc00d104c)\n#define NS_E_WMG_PREROLLLICENSEACQUISITIONNOTALLOWED                  _HRESULT_TYPEDEF_(0xc00d104d)\n#define NS_E_WMG_UNEXPECTEDPREROLLSTATUS                              _HRESULT_TYPEDEF_(0xc00d104e)\n#define NS_S_WMG_FORCE_DROP_FRAME                                     _HRESULT_TYPEDEF_(0x000d104f)\n#define NS_E_WMG_INVALID_COPP_CERTIFICATE                             _HRESULT_TYPEDEF_(0xc00d1051)\n#define NS_E_WMG_COPP_SECURITY_INVALID                                _HRESULT_TYPEDEF_(0xc00d1052)\n#define NS_E_WMG_COPP_UNSUPPORTED                                     _HRESULT_TYPEDEF_(0xc00d1053)\n#define NS_E_WMG_INVALIDSTATE                                         _HRESULT_TYPEDEF_(0xc00d1054)\n#define NS_E_WMG_SINKALREADYEXISTS                                    _HRESULT_TYPEDEF_(0xc00d1055)\n#define NS_E_WMG_NOSDKINTERFACE                                       _HRESULT_TYPEDEF_(0xc00d1056)\n#define NS_E_WMG_NOTALLOUTPUTSRENDERED                                _HRESULT_TYPEDEF_(0xc00d1057)\n#define NS_E_WMG_FILETRANSFERNOTALLOWED                               _HRESULT_TYPEDEF_(0xc00d1058)\n#define NS_E_WMR_UNSUPPORTEDSTREAM                                    _HRESULT_TYPEDEF_(0xc00d1059)\n#define NS_E_WMR_PINNOTFOUND                                          _HRESULT_TYPEDEF_(0xc00d105a)\n#define NS_E_WMR_WAITINGONFORMATSWITCH                                _HRESULT_TYPEDEF_(0xc00d105b)\n#define NS_E_WMR_NOSOURCEFILTER                                       _HRESULT_TYPEDEF_(0xc00d105c)\n#define NS_E_WMR_PINTYPENOMATCH                                       _HRESULT_TYPEDEF_(0xc00d105d)\n#define NS_E_WMR_NOCALLBACKAVAILABLE                                  _HRESULT_TYPEDEF_(0xc00d105e)\n#define NS_S_WMR_ALREADYRENDERED                                      _HRESULT_TYPEDEF_(0x000d105f)\n#define NS_S_WMR_PINTYPEPARTIALMATCH                                  _HRESULT_TYPEDEF_(0x000d1060)\n#define NS_S_WMR_PINTYPEFULLMATCH                                     _HRESULT_TYPEDEF_(0x000d1061)\n#define NS_E_WMR_SAMPLEPROPERTYNOTSET                                 _HRESULT_TYPEDEF_(0xc00d1062)\n#define NS_E_WMR_CANNOT_RENDER_BINARY_STREAM                          _HRESULT_TYPEDEF_(0xc00d1063)\n#define NS_E_WMG_LICENSE_TAMPERED                                     _HRESULT_TYPEDEF_(0xc00d1064)\n#define NS_E_WMR_WILLNOT_RENDER_BINARY_STREAM                         _HRESULT_TYPEDEF_(0xc00d1065)\n#define NS_S_WMG_ADVISE_DROP_FRAME                                    _HRESULT_TYPEDEF_(0x000d1066)\n#define NS_S_WMG_ADVISE_DROP_TO_KEYFRAME                              _HRESULT_TYPEDEF_(0x000d1067)\n#define NS_E_WMX_UNRECOGNIZED_PLAYLIST_FORMAT                         _HRESULT_TYPEDEF_(0xc00d1068)\n#define NS_E_ASX_INVALIDFORMAT                                        _HRESULT_TYPEDEF_(0xc00d1069)\n#define NS_E_ASX_INVALIDVERSION                                       _HRESULT_TYPEDEF_(0xc00d106a)\n#define NS_E_ASX_INVALID_REPEAT_BLOCK                                 _HRESULT_TYPEDEF_(0xc00d106b)\n#define NS_E_ASX_NOTHING_TO_WRITE                                     _HRESULT_TYPEDEF_(0xc00d106c)\n#define NS_E_URLLIST_INVALIDFORMAT                                    _HRESULT_TYPEDEF_(0xc00d106d)\n#define NS_E_WMX_ATTRIBUTE_DOES_NOT_EXIST                             _HRESULT_TYPEDEF_(0xc00d106e)\n#define NS_E_WMX_ATTRIBUTE_ALREADY_EXISTS                             _HRESULT_TYPEDEF_(0xc00d106f)\n#define NS_E_WMX_ATTRIBUTE_UNRETRIEVABLE                              _HRESULT_TYPEDEF_(0xc00d1070)\n#define NS_E_WMX_ITEM_DOES_NOT_EXIST                                  _HRESULT_TYPEDEF_(0xc00d1071)\n#define NS_E_WMX_ITEM_TYPE_ILLEGAL                                    _HRESULT_TYPEDEF_(0xc00d1072)\n#define NS_E_WMX_ITEM_UNSETTABLE                                      _HRESULT_TYPEDEF_(0xc00d1073)\n#define NS_E_WMX_PLAYLIST_EMPTY                                       _HRESULT_TYPEDEF_(0xc00d1074)\n#define NS_E_MLS_SMARTPLAYLIST_FILTER_NOT_REGISTERED                  _HRESULT_TYPEDEF_(0xc00d1075)\n#define NS_E_WMX_INVALID_FORMAT_OVER_NESTING                          _HRESULT_TYPEDEF_(0xc00d1076)\n#define NS_E_WMPCORE_NOSOURCEURLSTRING                                _HRESULT_TYPEDEF_(0xc00d107c)\n#define NS_E_WMPCORE_COCREATEFAILEDFORGITOBJECT                       _HRESULT_TYPEDEF_(0xc00d107d)\n#define NS_E_WMPCORE_FAILEDTOGETMARSHALLEDEVENTHANDLERINTERFACE       _HRESULT_TYPEDEF_(0xc00d107e)\n#define NS_E_WMPCORE_BUFFERTOOSMALL                                   _HRESULT_TYPEDEF_(0xc00d107f)\n#define NS_E_WMPCORE_UNAVAILABLE                                      _HRESULT_TYPEDEF_(0xc00d1080)\n#define NS_E_WMPCORE_INVALIDPLAYLISTMODE                              _HRESULT_TYPEDEF_(0xc00d1081)\n#define NS_E_WMPCORE_ITEMNOTINPLAYLIST                                _HRESULT_TYPEDEF_(0xc00d1086)\n#define NS_E_WMPCORE_PLAYLISTEMPTY                                    _HRESULT_TYPEDEF_(0xc00d1087)\n#define NS_E_WMPCORE_NOBROWSER                                        _HRESULT_TYPEDEF_(0xc00d1088)\n#define NS_E_WMPCORE_UNRECOGNIZED_MEDIA_URL                           _HRESULT_TYPEDEF_(0xc00d1089)\n#define NS_E_WMPCORE_GRAPH_NOT_IN_LIST                                _HRESULT_TYPEDEF_(0xc00d108a)\n#define NS_E_WMPCORE_PLAYLIST_EMPTY_OR_SINGLE_MEDIA                   _HRESULT_TYPEDEF_(0xc00d108b)\n#define NS_E_WMPCORE_ERRORSINKNOTREGISTERED                           _HRESULT_TYPEDEF_(0xc00d108c)\n#define NS_E_WMPCORE_ERRORMANAGERNOTAVAILABLE                         _HRESULT_TYPEDEF_(0xc00d108d)\n#define NS_E_WMPCORE_WEBHELPFAILED                                    _HRESULT_TYPEDEF_(0xc00d108e)\n#define NS_E_WMPCORE_MEDIA_ERROR_RESUME_FAILED                        _HRESULT_TYPEDEF_(0xc00d108f)\n#define NS_E_WMPCORE_NO_REF_IN_ENTRY                                  _HRESULT_TYPEDEF_(0xc00d1090)\n#define NS_E_WMPCORE_WMX_LIST_ATTRIBUTE_NAME_EMPTY                    _HRESULT_TYPEDEF_(0xc00d1091)\n#define NS_E_WMPCORE_WMX_LIST_ATTRIBUTE_NAME_ILLEGAL                  _HRESULT_TYPEDEF_(0xc00d1092)\n#define NS_E_WMPCORE_WMX_LIST_ATTRIBUTE_VALUE_EMPTY                   _HRESULT_TYPEDEF_(0xc00d1093)\n#define NS_E_WMPCORE_WMX_LIST_ATTRIBUTE_VALUE_ILLEGAL                 _HRESULT_TYPEDEF_(0xc00d1094)\n#define NS_E_WMPCORE_WMX_LIST_ITEM_ATTRIBUTE_NAME_EMPTY               _HRESULT_TYPEDEF_(0xc00d1095)\n#define NS_E_WMPCORE_WMX_LIST_ITEM_ATTRIBUTE_NAME_ILLEGAL             _HRESULT_TYPEDEF_(0xc00d1096)\n#define NS_E_WMPCORE_WMX_LIST_ITEM_ATTRIBUTE_VALUE_EMPTY              _HRESULT_TYPEDEF_(0xc00d1097)\n#define NS_E_WMPCORE_LIST_ENTRY_NO_REF                                _HRESULT_TYPEDEF_(0xc00d1098)\n#define NS_E_WMPCORE_MISNAMED_FILE                                    _HRESULT_TYPEDEF_(0xc00d1099)\n#define NS_E_WMPCORE_CODEC_NOT_TRUSTED                                _HRESULT_TYPEDEF_(0xc00d109a)\n#define NS_E_WMPCORE_CODEC_NOT_FOUND                                  _HRESULT_TYPEDEF_(0xc00d109b)\n#define NS_E_WMPCORE_CODEC_DOWNLOAD_NOT_ALLOWED                       _HRESULT_TYPEDEF_(0xc00d109c)\n#define NS_E_WMPCORE_ERROR_DOWNLOADING_PLAYLIST                       _HRESULT_TYPEDEF_(0xc00d109d)\n#define NS_E_WMPCORE_FAILED_TO_BUILD_PLAYLIST                         _HRESULT_TYPEDEF_(0xc00d109e)\n#define NS_E_WMPCORE_PLAYLIST_ITEM_ALTERNATE_NONE                     _HRESULT_TYPEDEF_(0xc00d109f)\n#define NS_E_WMPCORE_PLAYLIST_ITEM_ALTERNATE_EXHAUSTED                _HRESULT_TYPEDEF_(0xc00d10a0)\n#define NS_E_WMPCORE_PLAYLIST_ITEM_ALTERNATE_NAME_NOT_FOUND           _HRESULT_TYPEDEF_(0xc00d10a1)\n#define NS_E_WMPCORE_PLAYLIST_ITEM_ALTERNATE_MORPH_FAILED             _HRESULT_TYPEDEF_(0xc00d10a2)\n#define NS_E_WMPCORE_PLAYLIST_ITEM_ALTERNATE_INIT_FAILED              _HRESULT_TYPEDEF_(0xc00d10a3)\n#define NS_E_WMPCORE_MEDIA_ALTERNATE_REF_EMPTY                        _HRESULT_TYPEDEF_(0xc00d10a4)\n#define NS_E_WMPCORE_PLAYLIST_NO_EVENT_NAME                           _HRESULT_TYPEDEF_(0xc00d10a5)\n#define NS_E_WMPCORE_PLAYLIST_EVENT_ATTRIBUTE_ABSENT                  _HRESULT_TYPEDEF_(0xc00d10a6)\n#define NS_E_WMPCORE_PLAYLIST_EVENT_EMPTY                             _HRESULT_TYPEDEF_(0xc00d10a7)\n#define NS_E_WMPCORE_PLAYLIST_STACK_EMPTY                             _HRESULT_TYPEDEF_(0xc00d10a8)\n#define NS_E_WMPCORE_CURRENT_MEDIA_NOT_ACTIVE                         _HRESULT_TYPEDEF_(0xc00d10a9)\n#define NS_E_WMPCORE_USER_CANCEL                                      _HRESULT_TYPEDEF_(0xc00d10ab)\n#define NS_E_WMPCORE_PLAYLIST_REPEAT_EMPTY                            _HRESULT_TYPEDEF_(0xc00d10ac)\n#define NS_E_WMPCORE_PLAYLIST_REPEAT_START_MEDIA_NONE                 _HRESULT_TYPEDEF_(0xc00d10ad)\n#define NS_E_WMPCORE_PLAYLIST_REPEAT_END_MEDIA_NONE                   _HRESULT_TYPEDEF_(0xc00d10ae)\n#define NS_E_WMPCORE_INVALID_PLAYLIST_URL                             _HRESULT_TYPEDEF_(0xc00d10af)\n#define NS_E_WMPCORE_MISMATCHED_RUNTIME                               _HRESULT_TYPEDEF_(0xc00d10b0)\n#define NS_E_WMPCORE_PLAYLIST_IMPORT_FAILED_NO_ITEMS                  _HRESULT_TYPEDEF_(0xc00d10b1)\n#define NS_E_WMPCORE_VIDEO_TRANSFORM_FILTER_INSERTION                 _HRESULT_TYPEDEF_(0xc00d10b2)\n#define NS_E_WMPCORE_MEDIA_UNAVAILABLE                                _HRESULT_TYPEDEF_(0xc00d10b3)\n#define NS_E_WMPCORE_WMX_ENTRYREF_NO_REF                              _HRESULT_TYPEDEF_(0xc00d10b4)\n#define NS_E_WMPCORE_NO_PLAYABLE_MEDIA_IN_PLAYLIST                    _HRESULT_TYPEDEF_(0xc00d10b5)\n#define NS_E_WMPCORE_PLAYLIST_EMPTY_NESTED_PLAYLIST_SKIPPED_ITEMS     _HRESULT_TYPEDEF_(0xc00d10b6)\n#define NS_E_WMPCORE_BUSY                                             _HRESULT_TYPEDEF_(0xc00d10b7)\n#define NS_E_WMPCORE_MEDIA_CHILD_PLAYLIST_UNAVAILABLE                 _HRESULT_TYPEDEF_(0xc00d10b8)\n#define NS_E_WMPCORE_MEDIA_NO_CHILD_PLAYLIST                          _HRESULT_TYPEDEF_(0xc00d10b9)\n#define NS_E_WMPCORE_FILE_NOT_FOUND                                   _HRESULT_TYPEDEF_(0xc00d10ba)\n#define NS_E_WMPCORE_TEMP_FILE_NOT_FOUND                              _HRESULT_TYPEDEF_(0xc00d10bb)\n#define NS_E_WMDM_REVOKED                                             _HRESULT_TYPEDEF_(0xc00d10bc)\n#define NS_E_DDRAW_GENERIC                                            _HRESULT_TYPEDEF_(0xc00d10bd)\n#define NS_E_DISPLAY_MODE_CHANGE_FAILED                               _HRESULT_TYPEDEF_(0xc00d10be)\n#define NS_E_PLAYLIST_CONTAINS_ERRORS                                 _HRESULT_TYPEDEF_(0xc00d10bf)\n#define NS_E_CHANGING_PROXY_NAME                                      _HRESULT_TYPEDEF_(0xc00d10c0)\n#define NS_E_CHANGING_PROXY_PORT                                      _HRESULT_TYPEDEF_(0xc00d10c1)\n#define NS_E_CHANGING_PROXY_EXCEPTIONLIST                             _HRESULT_TYPEDEF_(0xc00d10c2)\n#define NS_E_CHANGING_PROXYBYPASS                                     _HRESULT_TYPEDEF_(0xc00d10c3)\n#define NS_E_CHANGING_PROXY_PROTOCOL_NOT_FOUND                        _HRESULT_TYPEDEF_(0xc00d10c4)\n#define NS_E_GRAPH_NOAUDIOLANGUAGE                                    _HRESULT_TYPEDEF_(0xc00d10c5)\n#define NS_E_GRAPH_NOAUDIOLANGUAGESELECTED                            _HRESULT_TYPEDEF_(0xc00d10c6)\n#define NS_E_CORECD_NOTAMEDIACD                                       _HRESULT_TYPEDEF_(0xc00d10c7)\n#define NS_E_WMPCORE_MEDIA_URL_TOO_LONG                               _HRESULT_TYPEDEF_(0xc00d10c8)\n#define NS_E_WMPFLASH_CANT_FIND_COM_SERVER                            _HRESULT_TYPEDEF_(0xc00d10c9)\n#define NS_E_WMPFLASH_INCOMPATIBLEVERSION                             _HRESULT_TYPEDEF_(0xc00d10ca)\n#define NS_E_WMPOCXGRAPH_IE_DISALLOWS_ACTIVEX_CONTROLS                _HRESULT_TYPEDEF_(0xc00d10cb)\n#define NS_E_NEED_CORE_REFERENCE                                      _HRESULT_TYPEDEF_(0xc00d10cc)\n#define NS_E_MEDIACD_READ_ERROR                                       _HRESULT_TYPEDEF_(0xc00d10cd)\n#define NS_E_IE_DISALLOWS_ACTIVEX_CONTROLS                            _HRESULT_TYPEDEF_(0xc00d10ce)\n#define NS_E_FLASH_PLAYBACK_NOT_ALLOWED                               _HRESULT_TYPEDEF_(0xc00d10cf)\n#define NS_E_UNABLE_TO_CREATE_RIP_LOCATION                            _HRESULT_TYPEDEF_(0xc00d10d0)\n#define NS_E_WMPCORE_SOME_CODECS_MISSING                              _HRESULT_TYPEDEF_(0xc00d10d1)\n#define NS_E_WMP_RIP_FAILED                                           _HRESULT_TYPEDEF_(0xc00d10d2)\n#define NS_E_WMP_FAILED_TO_RIP_TRACK                                  _HRESULT_TYPEDEF_(0xc00d10d3)\n#define NS_E_WMP_ERASE_FAILED                                         _HRESULT_TYPEDEF_(0xc00d10d4)\n#define NS_E_WMP_FORMAT_FAILED                                        _HRESULT_TYPEDEF_(0xc00d10d5)\n#define NS_E_WMP_CANNOT_BURN_NON_LOCAL_FILE                           _HRESULT_TYPEDEF_(0xc00d10d6)\n#define NS_E_WMP_FILE_TYPE_CANNOT_BURN_TO_AUDIO_CD                    _HRESULT_TYPEDEF_(0xc00d10d7)\n#define NS_E_WMP_FILE_DOES_NOT_FIT_ON_CD                              _HRESULT_TYPEDEF_(0xc00d10d8)\n#define NS_E_WMP_FILE_NO_DURATION                                     _HRESULT_TYPEDEF_(0xc00d10d9)\n#define NS_E_PDA_FAILED_TO_BURN                                       _HRESULT_TYPEDEF_(0xc00d10da)\n#define NS_S_NEED_TO_BUY_BURN_RIGHTS                                  _HRESULT_TYPEDEF_(0x000d10db)\n#define NS_E_FAILED_DOWNLOAD_ABORT_BURN                               _HRESULT_TYPEDEF_(0xc00d10dc)\n#define NS_E_WMPCORE_DEVICE_DRIVERS_MISSING                           _HRESULT_TYPEDEF_(0xc00d10dd)\n#define NS_S_WMPCORE_PLAYLISTCLEARABORT                               _HRESULT_TYPEDEF_(0x000d10fe)\n#define NS_S_WMPCORE_PLAYLISTREMOVEITEMABORT                          _HRESULT_TYPEDEF_(0x000d10ff)\n#define NS_S_WMPCORE_PLAYLIST_CREATION_PENDING                        _HRESULT_TYPEDEF_(0x000d1102)\n#define NS_S_WMPCORE_MEDIA_VALIDATION_PENDING                         _HRESULT_TYPEDEF_(0x000d1103)\n#define NS_S_WMPCORE_PLAYLIST_REPEAT_SECONDARY_SEGMENTS_IGNORED       _HRESULT_TYPEDEF_(0x000d1104)\n#define NS_S_WMPCORE_COMMAND_NOT_AVAILABLE                            _HRESULT_TYPEDEF_(0x000d1105)\n#define NS_S_WMPCORE_PLAYLIST_NAME_AUTO_GENERATED                     _HRESULT_TYPEDEF_(0x000d1106)\n#define NS_S_WMPCORE_PLAYLIST_IMPORT_MISSING_ITEMS                    _HRESULT_TYPEDEF_(0x000d1107)\n#define NS_S_WMPCORE_PLAYLIST_COLLAPSED_TO_SINGLE_MEDIA               _HRESULT_TYPEDEF_(0x000d1108)\n#define NS_S_WMPCORE_MEDIA_CHILD_PLAYLIST_OPEN_PENDING                _HRESULT_TYPEDEF_(0x000d1109)\n#define NS_S_WMPCORE_MORE_NODES_AVAIABLE                              _HRESULT_TYPEDEF_(0x000d110a)\n#define NS_E_WMPIM_USEROFFLINE                                        _HRESULT_TYPEDEF_(0xc00d1126)\n#define NS_E_WMPIM_USERCANCELED                                       _HRESULT_TYPEDEF_(0xc00d1127)\n#define NS_E_WMPIM_DIALUPFAILED                                       _HRESULT_TYPEDEF_(0xc00d1128)\n#define NS_E_WINSOCK_ERROR_STRING                                     _HRESULT_TYPEDEF_(0xc00d1129)\n#define NS_E_WMPBR_NOLISTENER                                         _HRESULT_TYPEDEF_(0xc00d1130)\n#define NS_E_WMPBR_BACKUPCANCEL                                       _HRESULT_TYPEDEF_(0xc00d1131)\n#define NS_E_WMPBR_RESTORECANCEL                                      _HRESULT_TYPEDEF_(0xc00d1132)\n#define NS_E_WMPBR_ERRORWITHURL                                       _HRESULT_TYPEDEF_(0xc00d1133)\n#define NS_E_WMPBR_NAMECOLLISION                                      _HRESULT_TYPEDEF_(0xc00d1134)\n#define NS_S_WMPBR_SUCCESS                                            _HRESULT_TYPEDEF_(0x000d1135)\n#define NS_S_WMPBR_PARTIALSUCCESS                                     _HRESULT_TYPEDEF_(0x000d1136)\n#define NS_E_WMPBR_DRIVE_INVALID                                      _HRESULT_TYPEDEF_(0xc00d1137)\n#define NS_E_WMPBR_BACKUPRESTOREFAILED                                _HRESULT_TYPEDEF_(0xc00d1138)\n#define NS_S_WMPEFFECT_TRANSPARENT                                    _HRESULT_TYPEDEF_(0x000d1144)\n#define NS_S_WMPEFFECT_OPAQUE                                         _HRESULT_TYPEDEF_(0x000d1145)\n#define NS_S_OPERATION_PENDING                                        _HRESULT_TYPEDEF_(0x000d114e)\n#define NS_E_WMP_CONVERT_FILE_FAILED                                  _HRESULT_TYPEDEF_(0xc00d1158)\n#define NS_E_WMP_CONVERT_NO_RIGHTS_ERRORURL                           _HRESULT_TYPEDEF_(0xc00d1159)\n#define NS_E_WMP_CONVERT_NO_RIGHTS_NOERRORURL                         _HRESULT_TYPEDEF_(0xc00d115a)\n#define NS_E_WMP_CONVERT_FILE_CORRUPT                                 _HRESULT_TYPEDEF_(0xc00d115b)\n#define NS_E_WMP_CONVERT_PLUGIN_UNAVAILABLE_ERRORURL                  _HRESULT_TYPEDEF_(0xc00d115c)\n#define NS_E_WMP_CONVERT_PLUGIN_UNAVAILABLE_NOERRORURL                _HRESULT_TYPEDEF_(0xc00d115d)\n#define NS_E_WMP_CONVERT_PLUGIN_UNKNOWN_FILE_OWNER                    _HRESULT_TYPEDEF_(0xc00d115e)\n#define NS_E_DVD_DISC_COPY_PROTECT_OUTPUT_NS                          _HRESULT_TYPEDEF_(0xc00d1160)\n#define NS_E_DVD_DISC_COPY_PROTECT_OUTPUT_FAILED                      _HRESULT_TYPEDEF_(0xc00d1161)\n#define NS_E_DVD_NO_SUBPICTURE_STREAM                                 _HRESULT_TYPEDEF_(0xc00d1162)\n#define NS_E_DVD_COPY_PROTECT                                         _HRESULT_TYPEDEF_(0xc00d1163)\n#define NS_E_DVD_AUTHORING_PROBLEM                                    _HRESULT_TYPEDEF_(0xc00d1164)\n#define NS_E_DVD_INVALID_DISC_REGION                                  _HRESULT_TYPEDEF_(0xc00d1165)\n#define NS_E_DVD_COMPATIBLE_VIDEO_CARD                                _HRESULT_TYPEDEF_(0xc00d1166)\n#define NS_E_DVD_MACROVISION                                          _HRESULT_TYPEDEF_(0xc00d1167)\n#define NS_E_DVD_SYSTEM_DECODER_REGION                                _HRESULT_TYPEDEF_(0xc00d1168)\n#define NS_E_DVD_DISC_DECODER_REGION                                  _HRESULT_TYPEDEF_(0xc00d1169)\n#define NS_E_DVD_NO_VIDEO_STREAM                                      _HRESULT_TYPEDEF_(0xc00d116a)\n#define NS_E_DVD_NO_AUDIO_STREAM                                      _HRESULT_TYPEDEF_(0xc00d116b)\n#define NS_E_DVD_GRAPH_BUILDING                                       _HRESULT_TYPEDEF_(0xc00d116c)\n#define NS_E_DVD_NO_DECODER                                           _HRESULT_TYPEDEF_(0xc00d116d)\n#define NS_E_DVD_PARENTAL                                             _HRESULT_TYPEDEF_(0xc00d116e)\n#define NS_E_DVD_CANNOT_JUMP                                          _HRESULT_TYPEDEF_(0xc00d116f)\n#define NS_E_DVD_DEVICE_CONTENTION                                    _HRESULT_TYPEDEF_(0xc00d1170)\n#define NS_E_DVD_NO_VIDEO_MEMORY                                      _HRESULT_TYPEDEF_(0xc00d1171)\n#define NS_E_DVD_CANNOT_COPY_PROTECTED                                _HRESULT_TYPEDEF_(0xc00d1172)\n#define NS_E_DVD_REQUIRED_PROPERTY_NOT_SET                            _HRESULT_TYPEDEF_(0xc00d1173)\n#define NS_E_DVD_INVALID_TITLE_CHAPTER                                _HRESULT_TYPEDEF_(0xc00d1174)\n#define NS_E_NO_CD_BURNER                                             _HRESULT_TYPEDEF_(0xc00d1176)\n#define NS_E_DEVICE_IS_NOT_READY                                      _HRESULT_TYPEDEF_(0xc00d1177)\n#define NS_E_PDA_UNSUPPORTED_FORMAT                                   _HRESULT_TYPEDEF_(0xc00d1178)\n#define NS_E_NO_PDA                                                   _HRESULT_TYPEDEF_(0xc00d1179)\n#define NS_E_PDA_UNSPECIFIED_ERROR                                    _HRESULT_TYPEDEF_(0xc00d117a)\n#define NS_E_MEMSTORAGE_BAD_DATA                                      _HRESULT_TYPEDEF_(0xc00d117b)\n#define NS_E_PDA_FAIL_SELECT_DEVICE                                   _HRESULT_TYPEDEF_(0xc00d117c)\n#define NS_E_PDA_FAIL_READ_WAVE_FILE                                  _HRESULT_TYPEDEF_(0xc00d117d)\n#define NS_E_IMAPI_LOSSOFSTREAMING                                    _HRESULT_TYPEDEF_(0xc00d117e)\n#define NS_E_PDA_DEVICE_FULL                                          _HRESULT_TYPEDEF_(0xc00d117f)\n#define NS_E_FAIL_LAUNCH_ROXIO_PLUGIN                                 _HRESULT_TYPEDEF_(0xc00d1180)\n#define NS_E_PDA_DEVICE_FULL_IN_SESSION                               _HRESULT_TYPEDEF_(0xc00d1181)\n#define NS_E_IMAPI_MEDIUM_INVALIDTYPE                                 _HRESULT_TYPEDEF_(0xc00d1182)\n#define NS_E_PDA_MANUALDEVICE                                         _HRESULT_TYPEDEF_(0xc00d1183)\n#define NS_E_PDA_PARTNERSHIPNOTEXIST                                  _HRESULT_TYPEDEF_(0xc00d1184)\n#define NS_E_PDA_CANNOT_CREATE_ADDITIONAL_SYNC_RELATIONSHIP           _HRESULT_TYPEDEF_(0xc00d1185)\n#define NS_E_PDA_NO_TRANSCODE_OF_DRM                                  _HRESULT_TYPEDEF_(0xc00d1186)\n#define NS_E_PDA_TRANSCODECACHEFULL                                   _HRESULT_TYPEDEF_(0xc00d1187)\n#define NS_E_PDA_TOO_MANY_FILE_COLLISIONS                             _HRESULT_TYPEDEF_(0xc00d1188)\n#define NS_E_PDA_CANNOT_TRANSCODE                                     _HRESULT_TYPEDEF_(0xc00d1189)\n#define NS_E_PDA_TOO_MANY_FILES_IN_DIRECTORY                          _HRESULT_TYPEDEF_(0xc00d118a)\n#define NS_E_PROCESSINGSHOWSYNCWIZARD                                 _HRESULT_TYPEDEF_(0xc00d118b)\n#define NS_E_PDA_TRANSCODE_NOT_PERMITTED                              _HRESULT_TYPEDEF_(0xc00d118c)\n#define NS_E_PDA_INITIALIZINGDEVICES                                  _HRESULT_TYPEDEF_(0xc00d118d)\n#define NS_E_PDA_OBSOLETE_SP                                          _HRESULT_TYPEDEF_(0xc00d118e)\n#define NS_E_PDA_TITLE_COLLISION                                      _HRESULT_TYPEDEF_(0xc00d118f)\n#define NS_E_PDA_DEVICESUPPORTDISABLED                                _HRESULT_TYPEDEF_(0xc00d1190)\n#define NS_E_PDA_NO_LONGER_AVAILABLE                                  _HRESULT_TYPEDEF_(0xc00d1191)\n#define NS_E_PDA_ENCODER_NOT_RESPONDING                               _HRESULT_TYPEDEF_(0xc00d1192)\n#define NS_E_PDA_CANNOT_SYNC_FROM_LOCATION                            _HRESULT_TYPEDEF_(0xc00d1193)\n#define NS_E_WMP_PROTOCOL_PROBLEM                                     _HRESULT_TYPEDEF_(0xc00d1194)\n#define NS_E_WMP_NO_DISK_SPACE                                        _HRESULT_TYPEDEF_(0xc00d1195)\n#define NS_E_WMP_LOGON_FAILURE                                        _HRESULT_TYPEDEF_(0xc00d1196)\n#define NS_E_WMP_CANNOT_FIND_FILE                                     _HRESULT_TYPEDEF_(0xc00d1197)\n#define NS_E_WMP_SERVER_INACCESSIBLE                                  _HRESULT_TYPEDEF_(0xc00d1198)\n#define NS_E_WMP_UNSUPPORTED_FORMAT                                   _HRESULT_TYPEDEF_(0xc00d1199)\n#define NS_E_WMP_DSHOW_UNSUPPORTED_FORMAT                             _HRESULT_TYPEDEF_(0xc00d119a)\n#define NS_E_WMP_PLAYLIST_EXISTS                                      _HRESULT_TYPEDEF_(0xc00d119b)\n#define NS_E_WMP_NONMEDIA_FILES                                       _HRESULT_TYPEDEF_(0xc00d119c)\n#define NS_E_WMP_INVALID_ASX                                          _HRESULT_TYPEDEF_(0xc00d119d)\n#define NS_E_WMP_ALREADY_IN_USE                                       _HRESULT_TYPEDEF_(0xc00d119e)\n#define NS_E_WMP_IMAPI_FAILURE                                        _HRESULT_TYPEDEF_(0xc00d119f)\n#define NS_E_WMP_WMDM_FAILURE                                         _HRESULT_TYPEDEF_(0xc00d11a0)\n#define NS_E_WMP_CODEC_NEEDED_WITH_4CC                                _HRESULT_TYPEDEF_(0xc00d11a1)\n#define NS_E_WMP_CODEC_NEEDED_WITH_FORMATTAG                          _HRESULT_TYPEDEF_(0xc00d11a2)\n#define NS_E_WMP_MSSAP_NOT_AVAILABLE                                  _HRESULT_TYPEDEF_(0xc00d11a3)\n#define NS_E_WMP_WMDM_INTERFACEDEAD                                   _HRESULT_TYPEDEF_(0xc00d11a4)\n#define NS_E_WMP_WMDM_NOTCERTIFIED                                    _HRESULT_TYPEDEF_(0xc00d11a5)\n#define NS_E_WMP_WMDM_LICENSE_NOTEXIST                                _HRESULT_TYPEDEF_(0xc00d11a6)\n#define NS_E_WMP_WMDM_LICENSE_EXPIRED                                 _HRESULT_TYPEDEF_(0xc00d11a7)\n#define NS_E_WMP_WMDM_BUSY                                            _HRESULT_TYPEDEF_(0xc00d11a8)\n#define NS_E_WMP_WMDM_NORIGHTS                                        _HRESULT_TYPEDEF_(0xc00d11a9)\n#define NS_E_WMP_WMDM_INCORRECT_RIGHTS                                _HRESULT_TYPEDEF_(0xc00d11aa)\n#define NS_E_WMP_IMAPI_GENERIC                                        _HRESULT_TYPEDEF_(0xc00d11ab)\n#define NS_E_WMP_IMAPI_DEVICE_NOTPRESENT                              _HRESULT_TYPEDEF_(0xc00d11ad)\n#define NS_E_WMP_IMAPI_DEVICE_BUSY                                    _HRESULT_TYPEDEF_(0xc00d11ae)\n#define NS_E_WMP_IMAPI_LOSS_OF_STREAMING                              _HRESULT_TYPEDEF_(0xc00d11af)\n#define NS_E_WMP_SERVER_UNAVAILABLE                                   _HRESULT_TYPEDEF_(0xc00d11b0)\n#define NS_E_WMP_FILE_OPEN_FAILED                                     _HRESULT_TYPEDEF_(0xc00d11b1)\n#define NS_E_WMP_VERIFY_ONLINE                                        _HRESULT_TYPEDEF_(0xc00d11b2)\n#define NS_E_WMP_SERVER_NOT_RESPONDING                                _HRESULT_TYPEDEF_(0xc00d11b3)\n#define NS_E_WMP_DRM_CORRUPT_BACKUP                                   _HRESULT_TYPEDEF_(0xc00d11b4)\n#define NS_E_WMP_DRM_LICENSE_SERVER_UNAVAILABLE                       _HRESULT_TYPEDEF_(0xc00d11b5)\n#define NS_E_WMP_NETWORK_FIREWALL                                     _HRESULT_TYPEDEF_(0xc00d11b6)\n#define NS_E_WMP_NO_REMOVABLE_MEDIA                                   _HRESULT_TYPEDEF_(0xc00d11b7)\n#define NS_E_WMP_PROXY_CONNECT_TIMEOUT                                _HRESULT_TYPEDEF_(0xc00d11b8)\n#define NS_E_WMP_NEED_UPGRADE                                         _HRESULT_TYPEDEF_(0xc00d11b9)\n#define NS_E_WMP_AUDIO_HW_PROBLEM                                     _HRESULT_TYPEDEF_(0xc00d11ba)\n#define NS_E_WMP_INVALID_PROTOCOL                                     _HRESULT_TYPEDEF_(0xc00d11bb)\n#define NS_E_WMP_INVALID_LIBRARY_ADD                                  _HRESULT_TYPEDEF_(0xc00d11bc)\n#define NS_E_WMP_MMS_NOT_SUPPORTED                                    _HRESULT_TYPEDEF_(0xc00d11bd)\n#define NS_E_WMP_NO_PROTOCOLS_SELECTED                                _HRESULT_TYPEDEF_(0xc00d11be)\n#define NS_E_WMP_GOFULLSCREEN_FAILED                                  _HRESULT_TYPEDEF_(0xc00d11bf)\n#define NS_E_WMP_NETWORK_ERROR                                        _HRESULT_TYPEDEF_(0xc00d11c0)\n#define NS_E_WMP_CONNECT_TIMEOUT                                      _HRESULT_TYPEDEF_(0xc00d11c1)\n#define NS_E_WMP_MULTICAST_DISABLED                                   _HRESULT_TYPEDEF_(0xc00d11c2)\n#define NS_E_WMP_SERVER_DNS_TIMEOUT                                   _HRESULT_TYPEDEF_(0xc00d11c3)\n#define NS_E_WMP_PROXY_NOT_FOUND                                      _HRESULT_TYPEDEF_(0xc00d11c4)\n#define NS_E_WMP_TAMPERED_CONTENT                                     _HRESULT_TYPEDEF_(0xc00d11c5)\n#define NS_E_WMP_OUTOFMEMORY                                          _HRESULT_TYPEDEF_(0xc00d11c6)\n#define NS_E_WMP_AUDIO_CODEC_NOT_INSTALLED                            _HRESULT_TYPEDEF_(0xc00d11c7)\n#define NS_E_WMP_VIDEO_CODEC_NOT_INSTALLED                            _HRESULT_TYPEDEF_(0xc00d11c8)\n#define NS_E_WMP_IMAPI_DEVICE_INVALIDTYPE                             _HRESULT_TYPEDEF_(0xc00d11c9)\n#define NS_E_WMP_DRM_DRIVER_AUTH_FAILURE                              _HRESULT_TYPEDEF_(0xc00d11ca)\n#define NS_E_WMP_NETWORK_RESOURCE_FAILURE                             _HRESULT_TYPEDEF_(0xc00d11cb)\n#define NS_E_WMP_UPGRADE_APPLICATION                                  _HRESULT_TYPEDEF_(0xc00d11cc)\n#define NS_E_WMP_UNKNOWN_ERROR                                        _HRESULT_TYPEDEF_(0xc00d11cd)\n#define NS_E_WMP_INVALID_KEY                                          _HRESULT_TYPEDEF_(0xc00d11ce)\n#define NS_E_WMP_CD_ANOTHER_USER                                      _HRESULT_TYPEDEF_(0xc00d11cf)\n#define NS_E_WMP_DRM_NEEDS_AUTHORIZATION                              _HRESULT_TYPEDEF_(0xc00d11d0)\n#define NS_E_WMP_BAD_DRIVER                                           _HRESULT_TYPEDEF_(0xc00d11d1)\n#define NS_E_WMP_ACCESS_DENIED                                        _HRESULT_TYPEDEF_(0xc00d11d2)\n#define NS_E_WMP_LICENSE_RESTRICTS                                    _HRESULT_TYPEDEF_(0xc00d11d3)\n#define NS_E_WMP_INVALID_REQUEST                                      _HRESULT_TYPEDEF_(0xc00d11d4)\n#define NS_E_WMP_CD_STASH_NO_SPACE                                    _HRESULT_TYPEDEF_(0xc00d11d5)\n#define NS_E_WMP_DRM_NEW_HARDWARE                                     _HRESULT_TYPEDEF_(0xc00d11d6)\n#define NS_E_WMP_DRM_INVALID_SIG                                      _HRESULT_TYPEDEF_(0xc00d11d7)\n#define NS_E_WMP_DRM_CANNOT_RESTORE                                   _HRESULT_TYPEDEF_(0xc00d11d8)\n#define NS_E_WMP_BURN_DISC_OVERFLOW                                   _HRESULT_TYPEDEF_(0xc00d11d9)\n#define NS_E_WMP_DRM_GENERIC_LICENSE_FAILURE                          _HRESULT_TYPEDEF_(0xc00d11da)\n#define NS_E_WMP_DRM_NO_SECURE_CLOCK                                  _HRESULT_TYPEDEF_(0xc00d11db)\n#define NS_E_WMP_DRM_NO_RIGHTS                                        _HRESULT_TYPEDEF_(0xc00d11dc)\n#define NS_E_WMP_DRM_INDIV_FAILED                                     _HRESULT_TYPEDEF_(0xc00d11dd)\n#define NS_E_WMP_SERVER_NONEWCONNECTIONS                              _HRESULT_TYPEDEF_(0xc00d11de)\n#define NS_E_WMP_MULTIPLE_ERROR_IN_PLAYLIST                           _HRESULT_TYPEDEF_(0xc00d11df)\n#define NS_E_WMP_IMAPI2_ERASE_FAIL                                    _HRESULT_TYPEDEF_(0xc00d11e0)\n#define NS_E_WMP_IMAPI2_ERASE_DEVICE_BUSY                             _HRESULT_TYPEDEF_(0xc00d11e1)\n#define NS_E_WMP_DRM_COMPONENT_FAILURE                                _HRESULT_TYPEDEF_(0xc00d11e2)\n#define NS_E_WMP_DRM_NO_DEVICE_CERT                                   _HRESULT_TYPEDEF_(0xc00d11e3)\n#define NS_E_WMP_SERVER_SECURITY_ERROR                                _HRESULT_TYPEDEF_(0xc00d11e4)\n#define NS_E_WMP_AUDIO_DEVICE_LOST                                    _HRESULT_TYPEDEF_(0xc00d11e5)\n#define NS_E_WMP_IMAPI_MEDIA_INCOMPATIBLE                             _HRESULT_TYPEDEF_(0xc00d11e6)\n#define NS_E_SYNCWIZ_DEVICE_FULL                                      _HRESULT_TYPEDEF_(0xc00d11ee)\n#define NS_E_SYNCWIZ_CANNOT_CHANGE_SETTINGS                           _HRESULT_TYPEDEF_(0xc00d11ef)\n#define NS_E_TRANSCODE_DELETECACHEERROR                               _HRESULT_TYPEDEF_(0xc00d11f0)\n#define NS_E_CD_NO_BUFFERS_READ                                       _HRESULT_TYPEDEF_(0xc00d11f8)\n#define NS_E_CD_EMPTY_TRACK_QUEUE                                     _HRESULT_TYPEDEF_(0xc00d11f9)\n#define NS_E_CD_NO_READER                                             _HRESULT_TYPEDEF_(0xc00d11fa)\n#define NS_E_CD_ISRC_INVALID                                          _HRESULT_TYPEDEF_(0xc00d11fb)\n#define NS_E_CD_MEDIA_CATALOG_NUMBER_INVALID                          _HRESULT_TYPEDEF_(0xc00d11fc)\n#define NS_E_SLOW_READ_DIGITAL_WITH_ERRORCORRECTION                   _HRESULT_TYPEDEF_(0xc00d11fd)\n#define NS_E_CD_SPEEDDETECT_NOT_ENOUGH_READS                          _HRESULT_TYPEDEF_(0xc00d11fe)\n#define NS_E_CD_QUEUEING_DISABLED                                     _HRESULT_TYPEDEF_(0xc00d11ff)\n#define NS_E_WMP_DRM_ACQUIRING_LICENSE                                _HRESULT_TYPEDEF_(0xc00d1202)\n#define NS_E_WMP_DRM_LICENSE_EXPIRED                                  _HRESULT_TYPEDEF_(0xc00d1203)\n#define NS_E_WMP_DRM_LICENSE_NOTACQUIRED                              _HRESULT_TYPEDEF_(0xc00d1204)\n#define NS_E_WMP_DRM_LICENSE_NOTENABLED                               _HRESULT_TYPEDEF_(0xc00d1205)\n#define NS_E_WMP_DRM_LICENSE_UNUSABLE                                 _HRESULT_TYPEDEF_(0xc00d1206)\n#define NS_E_WMP_DRM_LICENSE_CONTENT_REVOKED                          _HRESULT_TYPEDEF_(0xc00d1207)\n#define NS_E_WMP_DRM_LICENSE_NOSAP                                    _HRESULT_TYPEDEF_(0xc00d1208)\n#define NS_E_WMP_DRM_UNABLE_TO_ACQUIRE_LICENSE                        _HRESULT_TYPEDEF_(0xc00d1209)\n#define NS_E_WMP_LICENSE_REQUIRED                                     _HRESULT_TYPEDEF_(0xc00d120a)\n#define NS_E_WMP_PROTECTED_CONTENT                                    _HRESULT_TYPEDEF_(0xc00d120b)\n#define NS_E_WMP_POLICY_VALUE_NOT_CONFIGURED                          _HRESULT_TYPEDEF_(0xc00d122a)\n#define NS_E_PDA_CANNOT_SYNC_FROM_INTERNET                            _HRESULT_TYPEDEF_(0xc00d1234)\n#define NS_E_PDA_CANNOT_SYNC_INVALID_PLAYLIST                         _HRESULT_TYPEDEF_(0xc00d1235)\n#define NS_E_PDA_FAILED_TO_SYNCHRONIZE_FILE                           _HRESULT_TYPEDEF_(0xc00d1236)\n#define NS_E_PDA_SYNC_FAILED                                          _HRESULT_TYPEDEF_(0xc00d1237)\n#define NS_E_PDA_DELETE_FAILED                                        _HRESULT_TYPEDEF_(0xc00d1238)\n#define NS_E_PDA_FAILED_TO_RETRIEVE_FILE                              _HRESULT_TYPEDEF_(0xc00d1239)\n#define NS_E_PDA_DEVICE_NOT_RESPONDING                                _HRESULT_TYPEDEF_(0xc00d123a)\n#define NS_E_PDA_FAILED_TO_TRANSCODE_PHOTO                            _HRESULT_TYPEDEF_(0xc00d123b)\n#define NS_E_PDA_FAILED_TO_ENCRYPT_TRANSCODED_FILE                    _HRESULT_TYPEDEF_(0xc00d123c)\n#define NS_E_PDA_CANNOT_TRANSCODE_TO_AUDIO                            _HRESULT_TYPEDEF_(0xc00d123d)\n#define NS_E_PDA_CANNOT_TRANSCODE_TO_VIDEO                            _HRESULT_TYPEDEF_(0xc00d123e)\n#define NS_E_PDA_CANNOT_TRANSCODE_TO_IMAGE                            _HRESULT_TYPEDEF_(0xc00d123f)\n#define NS_E_PDA_RETRIEVED_FILE_FILENAME_TOO_LONG                     _HRESULT_TYPEDEF_(0xc00d1240)\n#define NS_E_PDA_CEWMDM_DRM_ERROR                                     _HRESULT_TYPEDEF_(0xc00d1241)\n#define NS_E_INCOMPLETE_PLAYLIST                                      _HRESULT_TYPEDEF_(0xc00d1242)\n#define NS_E_PDA_SYNC_RUNNING                                         _HRESULT_TYPEDEF_(0xc00d1243)\n#define NS_E_PDA_SYNC_LOGIN_ERROR                                     _HRESULT_TYPEDEF_(0xc00d1244)\n#define NS_E_PDA_TRANSCODE_CODEC_NOT_FOUND                            _HRESULT_TYPEDEF_(0xc00d1245)\n#define NS_E_CANNOT_SYNC_DRM_TO_NON_JANUS_DEVICE                      _HRESULT_TYPEDEF_(0xc00d1246)\n#define NS_E_CANNOT_SYNC_PREVIOUS_SYNC_RUNNING                        _HRESULT_TYPEDEF_(0xc00d1247)\n#define NS_E_WMP_HWND_NOTFOUND                                        _HRESULT_TYPEDEF_(0xc00d125c)\n#define NS_E_BKGDOWNLOAD_WRONG_NO_FILES                               _HRESULT_TYPEDEF_(0xc00d125d)\n#define NS_E_BKGDOWNLOAD_COMPLETECANCELLEDJOB                         _HRESULT_TYPEDEF_(0xc00d125e)\n#define NS_E_BKGDOWNLOAD_CANCELCOMPLETEDJOB                           _HRESULT_TYPEDEF_(0xc00d125f)\n#define NS_E_BKGDOWNLOAD_NOJOBPOINTER                                 _HRESULT_TYPEDEF_(0xc00d1260)\n#define NS_E_BKGDOWNLOAD_INVALIDJOBSIGNATURE                          _HRESULT_TYPEDEF_(0xc00d1261)\n#define NS_E_BKGDOWNLOAD_FAILED_TO_CREATE_TEMPFILE                    _HRESULT_TYPEDEF_(0xc00d1262)\n#define NS_E_BKGDOWNLOAD_PLUGIN_FAILEDINITIALIZE                      _HRESULT_TYPEDEF_(0xc00d1263)\n#define NS_E_BKGDOWNLOAD_PLUGIN_FAILEDTOMOVEFILE                      _HRESULT_TYPEDEF_(0xc00d1264)\n#define NS_E_BKGDOWNLOAD_CALLFUNCFAILED                               _HRESULT_TYPEDEF_(0xc00d1265)\n#define NS_E_BKGDOWNLOAD_CALLFUNCTIMEOUT                              _HRESULT_TYPEDEF_(0xc00d1266)\n#define NS_E_BKGDOWNLOAD_CALLFUNCENDED                                _HRESULT_TYPEDEF_(0xc00d1267)\n#define NS_E_BKGDOWNLOAD_WMDUNPACKFAILED                              _HRESULT_TYPEDEF_(0xc00d1268)\n#define NS_E_BKGDOWNLOAD_FAILEDINITIALIZE                             _HRESULT_TYPEDEF_(0xc00d1269)\n#define NS_E_INTERFACE_NOT_REGISTERED_IN_GIT                          _HRESULT_TYPEDEF_(0xc00d126a)\n#define NS_E_BKGDOWNLOAD_INVALID_FILE_NAME                            _HRESULT_TYPEDEF_(0xc00d126b)\n#define NS_E_IMAGE_DOWNLOAD_FAILED                                    _HRESULT_TYPEDEF_(0xc00d128e)\n#define NS_E_WMP_UDRM_NOUSERLIST                                      _HRESULT_TYPEDEF_(0xc00d12c0)\n#define NS_E_WMP_DRM_NOT_ACQUIRING                                    _HRESULT_TYPEDEF_(0xc00d12c1)\n#define NS_E_WMP_BSTR_TOO_LONG                                        _HRESULT_TYPEDEF_(0xc00d12f2)\n#define NS_E_WMP_AUTOPLAY_INVALID_STATE                               _HRESULT_TYPEDEF_(0xc00d12fc)\n#define NS_E_WMP_COMPONENT_REVOKED                                    _HRESULT_TYPEDEF_(0xc00d1306)\n#define NS_E_CURL_NOTSAFE                                             _HRESULT_TYPEDEF_(0xc00d1324)\n#define NS_E_CURL_INVALIDCHAR                                         _HRESULT_TYPEDEF_(0xc00d1325)\n#define NS_E_CURL_INVALIDHOSTNAME                                     _HRESULT_TYPEDEF_(0xc00d1326)\n#define NS_E_CURL_INVALIDPATH                                         _HRESULT_TYPEDEF_(0xc00d1327)\n#define NS_E_CURL_INVALIDSCHEME                                       _HRESULT_TYPEDEF_(0xc00d1328)\n#define NS_E_CURL_INVALIDURL                                          _HRESULT_TYPEDEF_(0xc00d1329)\n#define NS_E_CURL_CANTWALK                                            _HRESULT_TYPEDEF_(0xc00d132b)\n#define NS_E_CURL_INVALIDPORT                                         _HRESULT_TYPEDEF_(0xc00d132c)\n#define NS_E_CURLHELPER_NOTADIRECTORY                                 _HRESULT_TYPEDEF_(0xc00d132d)\n#define NS_E_CURLHELPER_NOTAFILE                                      _HRESULT_TYPEDEF_(0xc00d132e)\n#define NS_E_CURL_CANTDECODE                                          _HRESULT_TYPEDEF_(0xc00d132f)\n#define NS_E_CURLHELPER_NOTRELATIVE                                   _HRESULT_TYPEDEF_(0xc00d1330)\n#define NS_E_CURL_INVALIDBUFFERSIZE                                   _HRESULT_TYPEDEF_(0xc00d1331)\n#define NS_E_SUBSCRIPTIONSERVICE_PLAYBACK_DISALLOWED                  _HRESULT_TYPEDEF_(0xc00d1356)\n#define NS_E_CANNOT_BUY_OR_DOWNLOAD_FROM_MULTIPLE_SERVICES            _HRESULT_TYPEDEF_(0xc00d1357)\n#define NS_E_CANNOT_BUY_OR_DOWNLOAD_CONTENT                           _HRESULT_TYPEDEF_(0xc00d1358)\n#define NS_S_TRACK_BUY_REQUIRES_ALBUM_PURCHASE                        _HRESULT_TYPEDEF_(0x000d1359)\n#define NS_E_NOT_CONTENT_PARTNER_TRACK                                _HRESULT_TYPEDEF_(0xc00d135a)\n#define NS_E_TRACK_DOWNLOAD_REQUIRES_ALBUM_PURCHASE                   _HRESULT_TYPEDEF_(0xc00d135b)\n#define NS_E_TRACK_DOWNLOAD_REQUIRES_PURCHASE                         _HRESULT_TYPEDEF_(0xc00d135c)\n#define NS_E_TRACK_PURCHASE_MAXIMUM_EXCEEDED                          _HRESULT_TYPEDEF_(0xc00d135d)\n#define NS_S_NAVIGATION_COMPLETE_WITH_ERRORS                          _HRESULT_TYPEDEF_(0x000d135e)\n#define NS_E_SUBSCRIPTIONSERVICE_LOGIN_FAILED                         _HRESULT_TYPEDEF_(0xc00d135f)\n#define NS_E_SUBSCRIPTIONSERVICE_DOWNLOAD_TIMEOUT                     _HRESULT_TYPEDEF_(0xc00d1360)\n#define NS_S_TRACK_ALREADY_DOWNLOADED                                 _HRESULT_TYPEDEF_(0x000d1361)\n#define NS_E_CONTENT_PARTNER_STILL_INITIALIZING                       _HRESULT_TYPEDEF_(0xc00d1362)\n#define NS_E_OPEN_CONTAINING_FOLDER_FAILED                            _HRESULT_TYPEDEF_(0xc00d1363)\n#define NS_E_ADVANCEDEDIT_TOO_MANY_PICTURES                           _HRESULT_TYPEDEF_(0xc00d136a)\n\n/* Windows Media Server errors */\n#define NS_E_REDIRECT                                                 _HRESULT_TYPEDEF_(0xc00d1388)\n#define NS_E_STALE_PRESENTATION                                       _HRESULT_TYPEDEF_(0xc00d1389)\n#define NS_E_NAMESPACE_WRONG_PERSIST                                  _HRESULT_TYPEDEF_(0xc00d138a)\n#define NS_E_NAMESPACE_WRONG_TYPE                                     _HRESULT_TYPEDEF_(0xc00d138b)\n#define NS_E_NAMESPACE_NODE_CONFLICT                                  _HRESULT_TYPEDEF_(0xc00d138c)\n#define NS_E_NAMESPACE_NODE_NOT_FOUND                                 _HRESULT_TYPEDEF_(0xc00d138d)\n#define NS_E_NAMESPACE_BUFFER_TOO_SMALL                               _HRESULT_TYPEDEF_(0xc00d138e)\n#define NS_E_NAMESPACE_TOO_MANY_CALLBACKS                             _HRESULT_TYPEDEF_(0xc00d138f)\n#define NS_E_NAMESPACE_DUPLICATE_CALLBACK                             _HRESULT_TYPEDEF_(0xc00d1390)\n#define NS_E_NAMESPACE_CALLBACK_NOT_FOUND                             _HRESULT_TYPEDEF_(0xc00d1391)\n#define NS_E_NAMESPACE_NAME_TOO_LONG                                  _HRESULT_TYPEDEF_(0xc00d1392)\n#define NS_E_NAMESPACE_DUPLICATE_NAME                                 _HRESULT_TYPEDEF_(0xc00d1393)\n#define NS_E_NAMESPACE_EMPTY_NAME                                     _HRESULT_TYPEDEF_(0xc00d1394)\n#define NS_E_NAMESPACE_INDEX_TOO_LARGE                                _HRESULT_TYPEDEF_(0xc00d1395)\n#define NS_E_NAMESPACE_BAD_NAME                                       _HRESULT_TYPEDEF_(0xc00d1396)\n#define NS_E_NAMESPACE_WRONG_SECURITY                                 _HRESULT_TYPEDEF_(0xc00d1397)\n#define NS_E_CACHE_ARCHIVE_CONFLICT                                   _HRESULT_TYPEDEF_(0xc00d13ec)\n#define NS_E_CACHE_ORIGIN_SERVER_NOT_FOUND                            _HRESULT_TYPEDEF_(0xc00d13ed)\n#define NS_E_CACHE_ORIGIN_SERVER_TIMEOUT                              _HRESULT_TYPEDEF_(0xc00d13ee)\n#define NS_E_CACHE_NOT_BROADCAST                                      _HRESULT_TYPEDEF_(0xc00d13ef)\n#define NS_E_CACHE_CANNOT_BE_CACHED                                   _HRESULT_TYPEDEF_(0xc00d13f0)\n#define NS_E_CACHE_NOT_MODIFIED                                       _HRESULT_TYPEDEF_(0xc00d13f1)\n#define NS_E_CANNOT_REMOVE_PUBLISHING_POINT                           _HRESULT_TYPEDEF_(0xc00d1450)\n#define NS_E_CANNOT_REMOVE_PLUGIN                                     _HRESULT_TYPEDEF_(0xc00d1451)\n#define NS_E_WRONG_PUBLISHING_POINT_TYPE                              _HRESULT_TYPEDEF_(0xc00d1452)\n#define NS_E_UNSUPPORTED_LOAD_TYPE                                    _HRESULT_TYPEDEF_(0xc00d1453)\n#define NS_E_INVALID_PLUGIN_LOAD_TYPE_CONFIGURATION                   _HRESULT_TYPEDEF_(0xc00d1454)\n#define NS_E_INVALID_PUBLISHING_POINT_NAME                            _HRESULT_TYPEDEF_(0xc00d1455)\n#define NS_E_TOO_MANY_MULTICAST_SINKS                                 _HRESULT_TYPEDEF_(0xc00d1456)\n#define NS_E_PUBLISHING_POINT_INVALID_REQUEST_WHILE_STARTED           _HRESULT_TYPEDEF_(0xc00d1457)\n#define NS_E_MULTICAST_PLUGIN_NOT_ENABLED                             _HRESULT_TYPEDEF_(0xc00d1458)\n#define NS_E_INVALID_OPERATING_SYSTEM_VERSION                         _HRESULT_TYPEDEF_(0xc00d1459)\n#define NS_E_PUBLISHING_POINT_REMOVED                                 _HRESULT_TYPEDEF_(0xc00d145a)\n#define NS_E_INVALID_PUSH_PUBLISHING_POINT_START_REQUEST              _HRESULT_TYPEDEF_(0xc00d145b)\n#define NS_E_UNSUPPORTED_LANGUAGE                                     _HRESULT_TYPEDEF_(0xc00d145c)\n#define NS_E_WRONG_OS_VERSION                                         _HRESULT_TYPEDEF_(0xc00d145d)\n#define NS_E_PUBLISHING_POINT_STOPPED                                 _HRESULT_TYPEDEF_(0xc00d145e)\n#define NS_E_PLAYLIST_ENTRY_ALREADY_PLAYING                           _HRESULT_TYPEDEF_(0xc00d14b4)\n#define NS_E_EMPTY_PLAYLIST                                           _HRESULT_TYPEDEF_(0xc00d14b5)\n#define NS_E_PLAYLIST_PARSE_FAILURE                                   _HRESULT_TYPEDEF_(0xc00d14b6)\n#define NS_E_PLAYLIST_UNSUPPORTED_ENTRY                               _HRESULT_TYPEDEF_(0xc00d14b7)\n#define NS_E_PLAYLIST_ENTRY_NOT_IN_PLAYLIST                           _HRESULT_TYPEDEF_(0xc00d14b8)\n#define NS_E_PLAYLIST_ENTRY_SEEK                                      _HRESULT_TYPEDEF_(0xc00d14b9)\n#define NS_E_PLAYLIST_RECURSIVE_PLAYLISTS                             _HRESULT_TYPEDEF_(0xc00d14ba)\n#define NS_E_PLAYLIST_TOO_MANY_NESTED_PLAYLISTS                       _HRESULT_TYPEDEF_(0xc00d14bb)\n#define NS_E_PLAYLIST_SHUTDOWN                                        _HRESULT_TYPEDEF_(0xc00d14bc)\n#define NS_E_PLAYLIST_END_RECEDING                                    _HRESULT_TYPEDEF_(0xc00d14bd)\n#define NS_I_PLAYLIST_CHANGE_RECEDING                                 _HRESULT_TYPEDEF_(0x400d14be)\n#define NS_E_DATAPATH_NO_SINK                                         _HRESULT_TYPEDEF_(0xc00d1518)\n#define NS_S_PUBLISHING_POINT_STARTED_WITH_FAILED_SINKS               _HRESULT_TYPEDEF_(0x000d1519)\n#define NS_E_INVALID_PUSH_TEMPLATE                                    _HRESULT_TYPEDEF_(0xc00d151a)\n#define NS_E_INVALID_PUSH_PUBLISHING_POINT                            _HRESULT_TYPEDEF_(0xc00d151b)\n#define NS_E_CRITICAL_ERROR                                           _HRESULT_TYPEDEF_(0xc00d151c)\n#define NS_E_NO_NEW_CONNECTIONS                                       _HRESULT_TYPEDEF_(0xc00d151d)\n#define NS_E_WSX_INVALID_VERSION                                      _HRESULT_TYPEDEF_(0xc00d151e)\n#define NS_E_HEADER_MISMATCH                                          _HRESULT_TYPEDEF_(0xc00d151f)\n#define NS_E_PUSH_DUPLICATE_PUBLISHING_POINT_NAME                     _HRESULT_TYPEDEF_(0xc00d1520)\n#define NS_E_NO_SCRIPT_ENGINE                                         _HRESULT_TYPEDEF_(0xc00d157c)\n#define NS_E_PLUGIN_ERROR_REPORTED                                    _HRESULT_TYPEDEF_(0xc00d157d)\n#define NS_E_SOURCE_PLUGIN_NOT_FOUND                                  _HRESULT_TYPEDEF_(0xc00d157e)\n#define NS_E_PLAYLIST_PLUGIN_NOT_FOUND                                _HRESULT_TYPEDEF_(0xc00d157f)\n#define NS_E_DATA_SOURCE_ENUMERATION_NOT_SUPPORTED                    _HRESULT_TYPEDEF_(0xc00d1580)\n#define NS_E_MEDIA_PARSER_INVALID_FORMAT                              _HRESULT_TYPEDEF_(0xc00d1581)\n#define NS_E_SCRIPT_DEBUGGER_NOT_INSTALLED                            _HRESULT_TYPEDEF_(0xc00d1582)\n#define NS_E_FEATURE_REQUIRES_ENTERPRISE_SERVER                       _HRESULT_TYPEDEF_(0xc00d1583)\n#define NS_E_WIZARD_RUNNING                                           _HRESULT_TYPEDEF_(0xc00d1584)\n#define NS_E_INVALID_LOG_URL                                          _HRESULT_TYPEDEF_(0xc00d1585)\n#define NS_E_INVALID_MTU_RANGE                                        _HRESULT_TYPEDEF_(0xc00d1586)\n#define NS_E_INVALID_PLAY_STATISTICS                                  _HRESULT_TYPEDEF_(0xc00d1587)\n#define NS_E_LOG_NEED_TO_BE_SKIPPED                                   _HRESULT_TYPEDEF_(0xc00d1588)\n#define NS_E_HTTP_TEXT_DATACONTAINER_SIZE_LIMIT_EXCEEDED              _HRESULT_TYPEDEF_(0xc00d1589)\n#define NS_E_PORT_IN_USE                                              _HRESULT_TYPEDEF_(0xc00d158a)\n#define NS_E_PORT_IN_USE_HTTP                                         _HRESULT_TYPEDEF_(0xc00d158b)\n#define NS_E_HTTP_TEXT_DATACONTAINER_INVALID_SERVER_RESPONSE          _HRESULT_TYPEDEF_(0xc00d158c)\n#define NS_E_ARCHIVE_REACH_QUOTA                                      _HRESULT_TYPEDEF_(0xc00d158d)\n#define NS_E_ARCHIVE_ABORT_DUE_TO_BCAST                               _HRESULT_TYPEDEF_(0xc00d158e)\n#define NS_E_ARCHIVE_GAP_DETECTED                                     _HRESULT_TYPEDEF_(0xc00d158f)\n#define NS_E_AUTHORIZATION_FILE_NOT_FOUND                             _HRESULT_TYPEDEF_(0xc00d1590)\n\n/* Windows Media Tools errors */\n#define NS_E_BAD_MARKIN                                               _HRESULT_TYPEDEF_(0xc00d1b58)\n#define NS_E_BAD_MARKOUT                                              _HRESULT_TYPEDEF_(0xc00d1b59)\n#define NS_E_NOMATCHING_MEDIASOURCE                                   _HRESULT_TYPEDEF_(0xc00d1b5a)\n#define NS_E_UNSUPPORTED_SOURCETYPE                                   _HRESULT_TYPEDEF_(0xc00d1b5b)\n#define NS_E_TOO_MANY_AUDIO                                           _HRESULT_TYPEDEF_(0xc00d1b5c)\n#define NS_E_TOO_MANY_VIDEO                                           _HRESULT_TYPEDEF_(0xc00d1b5d)\n#define NS_E_NOMATCHING_ELEMENT                                       _HRESULT_TYPEDEF_(0xc00d1b5e)\n#define NS_E_MISMATCHED_MEDIACONTENT                                  _HRESULT_TYPEDEF_(0xc00d1b5f)\n#define NS_E_CANNOT_DELETE_ACTIVE_SOURCEGROUP                         _HRESULT_TYPEDEF_(0xc00d1b60)\n#define NS_E_AUDIODEVICE_BUSY                                         _HRESULT_TYPEDEF_(0xc00d1b61)\n#define NS_E_AUDIODEVICE_UNEXPECTED                                   _HRESULT_TYPEDEF_(0xc00d1b62)\n#define NS_E_AUDIODEVICE_BADFORMAT                                    _HRESULT_TYPEDEF_(0xc00d1b63)\n#define NS_E_VIDEODEVICE_BUSY                                         _HRESULT_TYPEDEF_(0xc00d1b64)\n#define NS_E_VIDEODEVICE_UNEXPECTED                                   _HRESULT_TYPEDEF_(0xc00d1b65)\n#define NS_E_INVALIDCALL_WHILE_ENCODER_RUNNING                        _HRESULT_TYPEDEF_(0xc00d1b66)\n#define NS_E_NO_PROFILE_IN_SOURCEGROUP                                _HRESULT_TYPEDEF_(0xc00d1b67)\n#define NS_E_VIDEODRIVER_UNSTABLE                                     _HRESULT_TYPEDEF_(0xc00d1b68)\n#define NS_E_VIDCAPSTARTFAILED                                        _HRESULT_TYPEDEF_(0xc00d1b69)\n#define NS_E_VIDSOURCECOMPRESSION                                     _HRESULT_TYPEDEF_(0xc00d1b6a)\n#define NS_E_VIDSOURCESIZE                                            _HRESULT_TYPEDEF_(0xc00d1b6b)\n#define NS_E_ICMQUERYFORMAT                                           _HRESULT_TYPEDEF_(0xc00d1b6c)\n#define NS_E_VIDCAPCREATEWINDOW                                       _HRESULT_TYPEDEF_(0xc00d1b6d)\n#define NS_E_VIDCAPDRVINUSE                                           _HRESULT_TYPEDEF_(0xc00d1b6e)\n#define NS_E_NO_MEDIAFORMAT_IN_SOURCE                                 _HRESULT_TYPEDEF_(0xc00d1b6f)\n#define NS_E_NO_VALID_OUTPUT_STREAM                                   _HRESULT_TYPEDEF_(0xc00d1b70)\n#define NS_E_NO_VALID_SOURCE_PLUGIN                                   _HRESULT_TYPEDEF_(0xc00d1b71)\n#define NS_E_NO_ACTIVE_SOURCEGROUP                                    _HRESULT_TYPEDEF_(0xc00d1b72)\n#define NS_E_NO_SCRIPT_STREAM                                         _HRESULT_TYPEDEF_(0xc00d1b73)\n#define NS_E_INVALIDCALL_WHILE_ARCHIVAL_RUNNING                       _HRESULT_TYPEDEF_(0xc00d1b74)\n#define NS_E_INVALIDPACKETSIZE                                        _HRESULT_TYPEDEF_(0xc00d1b75)\n#define NS_E_PLUGIN_CLSID_INVALID                                     _HRESULT_TYPEDEF_(0xc00d1b76)\n#define NS_E_UNSUPPORTED_ARCHIVETYPE                                  _HRESULT_TYPEDEF_(0xc00d1b77)\n#define NS_E_UNSUPPORTED_ARCHIVEOPERATION                             _HRESULT_TYPEDEF_(0xc00d1b78)\n#define NS_E_ARCHIVE_FILENAME_NOTSET                                  _HRESULT_TYPEDEF_(0xc00d1b79)\n#define NS_E_SOURCEGROUP_NOTPREPARED                                  _HRESULT_TYPEDEF_(0xc00d1b7a)\n#define NS_E_PROFILE_MISMATCH                                         _HRESULT_TYPEDEF_(0xc00d1b7b)\n#define NS_E_INCORRECTCLIPSETTINGS                                    _HRESULT_TYPEDEF_(0xc00d1b7c)\n#define NS_E_NOSTATSAVAILABLE                                         _HRESULT_TYPEDEF_(0xc00d1b7d)\n#define NS_E_NOTARCHIVING                                             _HRESULT_TYPEDEF_(0xc00d1b7e)\n#define NS_E_INVALIDCALL_WHILE_ENCODER_STOPPED                        _HRESULT_TYPEDEF_(0xc00d1b7f)\n#define NS_E_NOSOURCEGROUPS                                           _HRESULT_TYPEDEF_(0xc00d1b80)\n#define NS_E_INVALIDINPUTFPS                                          _HRESULT_TYPEDEF_(0xc00d1b81)\n#define NS_E_NO_DATAVIEW_SUPPORT                                      _HRESULT_TYPEDEF_(0xc00d1b82)\n#define NS_E_CODEC_UNAVAILABLE                                        _HRESULT_TYPEDEF_(0xc00d1b83)\n#define NS_E_ARCHIVE_SAME_AS_INPUT                                    _HRESULT_TYPEDEF_(0xc00d1b84)\n#define NS_E_SOURCE_NOTSPECIFIED                                      _HRESULT_TYPEDEF_(0xc00d1b85)\n#define NS_E_NO_REALTIME_TIMECOMPRESSION                              _HRESULT_TYPEDEF_(0xc00d1b86)\n#define NS_E_UNSUPPORTED_ENCODER_DEVICE                               _HRESULT_TYPEDEF_(0xc00d1b87)\n#define NS_E_UNEXPECTED_DISPLAY_SETTINGS                              _HRESULT_TYPEDEF_(0xc00d1b88)\n#define NS_E_NO_AUDIODATA                                             _HRESULT_TYPEDEF_(0xc00d1b89)\n#define NS_E_INPUTSOURCE_PROBLEM                                      _HRESULT_TYPEDEF_(0xc00d1b8a)\n#define NS_E_WME_VERSION_MISMATCH                                     _HRESULT_TYPEDEF_(0xc00d1b8b)\n#define NS_E_NO_REALTIME_PREPROCESS                                   _HRESULT_TYPEDEF_(0xc00d1b8c)\n#define NS_E_NO_REPEAT_PREPROCESS                                     _HRESULT_TYPEDEF_(0xc00d1b8d)\n#define NS_E_CANNOT_PAUSE_LIVEBROADCAST                               _HRESULT_TYPEDEF_(0xc00d1b8e)\n#define NS_E_DRM_PROFILE_NOT_SET                                      _HRESULT_TYPEDEF_(0xc00d1b8f)\n#define NS_E_DUPLICATE_DRMPROFILE                                     _HRESULT_TYPEDEF_(0xc00d1b90)\n#define NS_E_INVALID_DEVICE                                           _HRESULT_TYPEDEF_(0xc00d1b91)\n#define NS_E_SPEECHEDL_ON_NON_MIXEDMODE                               _HRESULT_TYPEDEF_(0xc00d1b92)\n#define NS_E_DRM_PASSWORD_TOO_LONG                                    _HRESULT_TYPEDEF_(0xc00d1b93)\n#define NS_E_DEVCONTROL_FAILED_SEEK                                   _HRESULT_TYPEDEF_(0xc00d1b94)\n#define NS_E_INTERLACE_REQUIRE_SAMESIZE                               _HRESULT_TYPEDEF_(0xc00d1b95)\n#define NS_E_TOO_MANY_DEVICECONTROL                                   _HRESULT_TYPEDEF_(0xc00d1b96)\n#define NS_E_NO_MULTIPASS_FOR_LIVEDEVICE                              _HRESULT_TYPEDEF_(0xc00d1b97)\n#define NS_E_MISSING_AUDIENCE                                         _HRESULT_TYPEDEF_(0xc00d1b98)\n#define NS_E_AUDIENCE_CONTENTTYPE_MISMATCH                            _HRESULT_TYPEDEF_(0xc00d1b99)\n#define NS_E_MISSING_SOURCE_INDEX                                     _HRESULT_TYPEDEF_(0xc00d1b9a)\n#define NS_E_NUM_LANGUAGE_MISMATCH                                    _HRESULT_TYPEDEF_(0xc00d1b9b)\n#define NS_E_LANGUAGE_MISMATCH                                        _HRESULT_TYPEDEF_(0xc00d1b9c)\n#define NS_E_VBRMODE_MISMATCH                                         _HRESULT_TYPEDEF_(0xc00d1b9d)\n#define NS_E_INVALID_INPUT_AUDIENCE_INDEX                             _HRESULT_TYPEDEF_(0xc00d1b9e)\n#define NS_E_INVALID_INPUT_LANGUAGE                                   _HRESULT_TYPEDEF_(0xc00d1b9f)\n#define NS_E_INVALID_INPUT_STREAM                                     _HRESULT_TYPEDEF_(0xc00d1ba0)\n#define NS_E_EXPECT_MONO_WAV_INPUT                                    _HRESULT_TYPEDEF_(0xc00d1ba1)\n#define NS_E_INPUT_WAVFORMAT_MISMATCH                                 _HRESULT_TYPEDEF_(0xc00d1ba2)\n#define NS_E_RECORDQ_DISK_FULL                                        _HRESULT_TYPEDEF_(0xc00d1ba3)\n#define NS_E_NO_PAL_INVERSE_TELECINE                                  _HRESULT_TYPEDEF_(0xc00d1ba4)\n#define NS_E_ACTIVE_SG_DEVICE_DISCONNECTED                            _HRESULT_TYPEDEF_(0xc00d1ba5)\n#define NS_E_ACTIVE_SG_DEVICE_CONTROL_DISCONNECTED                    _HRESULT_TYPEDEF_(0xc00d1ba6)\n#define NS_E_NO_FRAMES_SUBMITTED_TO_ANALYZER                          _HRESULT_TYPEDEF_(0xc00d1ba7)\n#define NS_E_INPUT_DOESNOT_SUPPORT_SMPTE                              _HRESULT_TYPEDEF_(0xc00d1ba8)\n#define NS_E_NO_SMPTE_WITH_MULTIPLE_SOURCEGROUPS                      _HRESULT_TYPEDEF_(0xc00d1ba9)\n#define NS_E_BAD_CONTENTEDL                                           _HRESULT_TYPEDEF_(0xc00d1baa)\n#define NS_E_INTERLACEMODE_MISMATCH                                   _HRESULT_TYPEDEF_(0xc00d1bab)\n#define NS_E_NONSQUAREPIXELMODE_MISMATCH                              _HRESULT_TYPEDEF_(0xc00d1bac)\n#define NS_E_SMPTEMODE_MISMATCH                                       _HRESULT_TYPEDEF_(0xc00d1bad)\n#define NS_E_END_OF_TAPE                                              _HRESULT_TYPEDEF_(0xc00d1bae)\n#define NS_E_NO_MEDIA_IN_AUDIENCE                                     _HRESULT_TYPEDEF_(0xc00d1baf)\n#define NS_E_NO_AUDIENCES                                             _HRESULT_TYPEDEF_(0xc00d1bb0)\n#define NS_E_NO_AUDIO_COMPAT                                          _HRESULT_TYPEDEF_(0xc00d1bb1)\n#define NS_E_INVALID_VBR_COMPAT                                       _HRESULT_TYPEDEF_(0xc00d1bb2)\n#define NS_E_NO_PROFILE_NAME                                          _HRESULT_TYPEDEF_(0xc00d1bb3)\n#define NS_E_INVALID_VBR_WITH_UNCOMP                                  _HRESULT_TYPEDEF_(0xc00d1bb4)\n#define NS_E_MULTIPLE_VBR_AUDIENCES                                   _HRESULT_TYPEDEF_(0xc00d1bb5)\n#define NS_E_UNCOMP_COMP_COMBINATION                                  _HRESULT_TYPEDEF_(0xc00d1bb6)\n#define NS_E_MULTIPLE_AUDIO_CODECS                                    _HRESULT_TYPEDEF_(0xc00d1bb7)\n#define NS_E_MULTIPLE_AUDIO_FORMATS                                   _HRESULT_TYPEDEF_(0xc00d1bb8)\n#define NS_E_AUDIO_BITRATE_STEPDOWN                                   _HRESULT_TYPEDEF_(0xc00d1bb9)\n#define NS_E_INVALID_AUDIO_PEAKRATE                                   _HRESULT_TYPEDEF_(0xc00d1bba)\n#define NS_E_INVALID_AUDIO_PEAKRATE_2                                 _HRESULT_TYPEDEF_(0xc00d1bbb)\n#define NS_E_INVALID_AUDIO_BUFFERMAX                                  _HRESULT_TYPEDEF_(0xc00d1bbc)\n#define NS_E_MULTIPLE_VIDEO_CODECS                                    _HRESULT_TYPEDEF_(0xc00d1bbd)\n#define NS_E_MULTIPLE_VIDEO_SIZES                                     _HRESULT_TYPEDEF_(0xc00d1bbe)\n#define NS_E_INVALID_VIDEO_BITRATE                                    _HRESULT_TYPEDEF_(0xc00d1bbf)\n#define NS_E_VIDEO_BITRATE_STEPDOWN                                   _HRESULT_TYPEDEF_(0xc00d1bc0)\n#define NS_E_INVALID_VIDEO_PEAKRATE                                   _HRESULT_TYPEDEF_(0xc00d1bc1)\n#define NS_E_INVALID_VIDEO_PEAKRATE_2                                 _HRESULT_TYPEDEF_(0xc00d1bc2)\n#define NS_E_INVALID_VIDEO_WIDTH                                      _HRESULT_TYPEDEF_(0xc00d1bc3)\n#define NS_E_INVALID_VIDEO_HEIGHT                                     _HRESULT_TYPEDEF_(0xc00d1bc4)\n#define NS_E_INVALID_VIDEO_FPS                                        _HRESULT_TYPEDEF_(0xc00d1bc5)\n#define NS_E_INVALID_VIDEO_KEYFRAME                                   _HRESULT_TYPEDEF_(0xc00d1bc6)\n#define NS_E_INVALID_VIDEO_IQUALITY                                   _HRESULT_TYPEDEF_(0xc00d1bc7)\n#define NS_E_INVALID_VIDEO_CQUALITY                                   _HRESULT_TYPEDEF_(0xc00d1bc8)\n#define NS_E_INVALID_VIDEO_BUFFER                                     _HRESULT_TYPEDEF_(0xc00d1bc9)\n#define NS_E_INVALID_VIDEO_BUFFERMAX                                  _HRESULT_TYPEDEF_(0xc00d1bca)\n#define NS_E_INVALID_VIDEO_BUFFERMAX_2                                _HRESULT_TYPEDEF_(0xc00d1bcb)\n#define NS_E_INVALID_VIDEO_WIDTH_ALIGN                                _HRESULT_TYPEDEF_(0xc00d1bcc)\n#define NS_E_INVALID_VIDEO_HEIGHT_ALIGN                               _HRESULT_TYPEDEF_(0xc00d1bcd)\n#define NS_E_MULTIPLE_SCRIPT_BITRATES                                 _HRESULT_TYPEDEF_(0xc00d1bce)\n#define NS_E_INVALID_SCRIPT_BITRATE                                   _HRESULT_TYPEDEF_(0xc00d1bcf)\n#define NS_E_MULTIPLE_FILE_BITRATES                                   _HRESULT_TYPEDEF_(0xc00d1bd0)\n#define NS_E_INVALID_FILE_BITRATE                                     _HRESULT_TYPEDEF_(0xc00d1bd1)\n#define NS_E_SAME_AS_INPUT_COMBINATION                                _HRESULT_TYPEDEF_(0xc00d1bd2)\n#define NS_E_SOURCE_CANNOT_LOOP                                       _HRESULT_TYPEDEF_(0xc00d1bd3)\n#define NS_E_INVALID_FOLDDOWN_COEFFICIENTS                            _HRESULT_TYPEDEF_(0xc00d1bd4)\n#define NS_E_DRMPROFILE_NOTFOUND                                      _HRESULT_TYPEDEF_(0xc00d1bd5)\n#define NS_E_INVALID_TIMECODE                                         _HRESULT_TYPEDEF_(0xc00d1bd6)\n#define NS_E_NO_AUDIO_TIMECOMPRESSION                                 _HRESULT_TYPEDEF_(0xc00d1bd7)\n#define NS_E_NO_TWOPASS_TIMECOMPRESSION                               _HRESULT_TYPEDEF_(0xc00d1bd8)\n#define NS_E_TIMECODE_REQUIRES_VIDEOSTREAM                            _HRESULT_TYPEDEF_(0xc00d1bd9)\n#define NS_E_NO_MBR_WITH_TIMECODE                                     _HRESULT_TYPEDEF_(0xc00d1bda)\n#define NS_E_INVALID_INTERLACEMODE                                    _HRESULT_TYPEDEF_(0xc00d1bdb)\n#define NS_E_INVALID_INTERLACE_COMPAT                                 _HRESULT_TYPEDEF_(0xc00d1bdc)\n#define NS_E_INVALID_NONSQUAREPIXEL_COMPAT                            _HRESULT_TYPEDEF_(0xc00d1bdd)\n#define NS_E_INVALID_SOURCE_WITH_DEVICE_CONTROL                       _HRESULT_TYPEDEF_(0xc00d1bde)\n#define NS_E_CANNOT_GENERATE_BROADCAST_INFO_FOR_QUALITYVBR            _HRESULT_TYPEDEF_(0xc00d1bdf)\n#define NS_E_EXCEED_MAX_DRM_PROFILE_LIMIT                             _HRESULT_TYPEDEF_(0xc00d1be0)\n#define NS_E_DEVICECONTROL_UNSTABLE                                   _HRESULT_TYPEDEF_(0xc00d1be1)\n#define NS_E_INVALID_PIXEL_ASPECT_RATIO                               _HRESULT_TYPEDEF_(0xc00d1be2)\n#define NS_E_AUDIENCE__LANGUAGE_CONTENTTYPE_MISMATCH                  _HRESULT_TYPEDEF_(0xc00d1be3)\n#define NS_E_INVALID_PROFILE_CONTENTTYPE                              _HRESULT_TYPEDEF_(0xc00d1be4)\n#define NS_E_TRANSFORM_PLUGIN_NOT_FOUND                               _HRESULT_TYPEDEF_(0xc00d1be5)\n#define NS_E_TRANSFORM_PLUGIN_INVALID                                 _HRESULT_TYPEDEF_(0xc00d1be6)\n#define NS_E_EDL_REQUIRED_FOR_DEVICE_MULTIPASS                        _HRESULT_TYPEDEF_(0xc00d1be7)\n#define NS_E_INVALID_VIDEO_WIDTH_FOR_INTERLACED_ENCODING              _HRESULT_TYPEDEF_(0xc00d1be8)\n#define NS_E_MARKIN_UNSUPPORTED                                       _HRESULT_TYPEDEF_(0xc00d1be9)\n\n/* DRM errors */\n#define NS_E_DRM_INVALID_APPLICATION                                  _HRESULT_TYPEDEF_(0xc00d2711)\n#define NS_E_DRM_LICENSE_STORE_ERROR                                  _HRESULT_TYPEDEF_(0xc00d2712)\n#define NS_E_DRM_SECURE_STORE_ERROR                                   _HRESULT_TYPEDEF_(0xc00d2713)\n#define NS_E_DRM_LICENSE_STORE_SAVE_ERROR                             _HRESULT_TYPEDEF_(0xc00d2714)\n#define NS_E_DRM_SECURE_STORE_UNLOCK_ERROR                            _HRESULT_TYPEDEF_(0xc00d2715)\n#define NS_E_DRM_INVALID_CONTENT                                      _HRESULT_TYPEDEF_(0xc00d2716)\n#define NS_E_DRM_UNABLE_TO_OPEN_LICENSE                               _HRESULT_TYPEDEF_(0xc00d2717)\n#define NS_E_DRM_INVALID_LICENSE                                      _HRESULT_TYPEDEF_(0xc00d2718)\n#define NS_E_DRM_INVALID_MACHINE                                      _HRESULT_TYPEDEF_(0xc00d2719)\n#define NS_E_DRM_ENUM_LICENSE_FAILED                                  _HRESULT_TYPEDEF_(0xc00d271b)\n#define NS_E_DRM_INVALID_LICENSE_REQUEST                              _HRESULT_TYPEDEF_(0xc00d271c)\n#define NS_E_DRM_UNABLE_TO_INITIALIZE                                 _HRESULT_TYPEDEF_(0xc00d271d)\n#define NS_E_DRM_UNABLE_TO_ACQUIRE_LICENSE                            _HRESULT_TYPEDEF_(0xc00d271e)\n#define NS_E_DRM_INVALID_LICENSE_ACQUIRED                             _HRESULT_TYPEDEF_(0xc00d271f)\n#define NS_E_DRM_NO_RIGHTS                                            _HRESULT_TYPEDEF_(0xc00d2720)\n#define NS_E_DRM_KEY_ERROR                                            _HRESULT_TYPEDEF_(0xc00d2721)\n#define NS_E_DRM_ENCRYPT_ERROR                                        _HRESULT_TYPEDEF_(0xc00d2722)\n#define NS_E_DRM_DECRYPT_ERROR                                        _HRESULT_TYPEDEF_(0xc00d2723)\n#define NS_E_DRM_LICENSE_INVALID_XML                                  _HRESULT_TYPEDEF_(0xc00d2725)\n#define NS_S_DRM_LICENSE_ACQUIRED                                     _HRESULT_TYPEDEF_(0x000d2726)\n#define NS_S_DRM_INDIVIDUALIZED                                       _HRESULT_TYPEDEF_(0x000d2727)\n#define NS_E_DRM_NEEDS_INDIVIDUALIZATION                              _HRESULT_TYPEDEF_(0xc00d2728)\n#define NS_E_DRM_ALREADY_INDIVIDUALIZED                               _HRESULT_TYPEDEF_(0xc00d2729)\n#define NS_E_DRM_ACTION_NOT_QUERIED                                   _HRESULT_TYPEDEF_(0xc00d272a)\n#define NS_E_DRM_ACQUIRING_LICENSE                                    _HRESULT_TYPEDEF_(0xc00d272b)\n#define NS_E_DRM_INDIVIDUALIZING                                      _HRESULT_TYPEDEF_(0xc00d272c)\n#define NS_E_BACKUP_RESTORE_FAILURE                                   _HRESULT_TYPEDEF_(0xc00d272d)\n#define NS_E_BACKUP_RESTORE_BAD_REQUEST_ID                            _HRESULT_TYPEDEF_(0xc00d272e)\n#define NS_E_DRM_PARAMETERS_MISMATCHED                                _HRESULT_TYPEDEF_(0xc00d272f)\n#define NS_E_DRM_UNABLE_TO_CREATE_LICENSE_OBJECT                      _HRESULT_TYPEDEF_(0xc00d2730)\n#define NS_E_DRM_UNABLE_TO_CREATE_INDI_OBJECT                         _HRESULT_TYPEDEF_(0xc00d2731)\n#define NS_E_DRM_UNABLE_TO_CREATE_ENCRYPT_OBJECT                      _HRESULT_TYPEDEF_(0xc00d2732)\n#define NS_E_DRM_UNABLE_TO_CREATE_DECRYPT_OBJECT                      _HRESULT_TYPEDEF_(0xc00d2733)\n#define NS_E_DRM_UNABLE_TO_CREATE_PROPERTIES_OBJECT                   _HRESULT_TYPEDEF_(0xc00d2734)\n#define NS_E_DRM_UNABLE_TO_CREATE_BACKUP_OBJECT                       _HRESULT_TYPEDEF_(0xc00d2735)\n#define NS_E_DRM_INDIVIDUALIZE_ERROR                                  _HRESULT_TYPEDEF_(0xc00d2736)\n#define NS_E_DRM_LICENSE_OPEN_ERROR                                   _HRESULT_TYPEDEF_(0xc00d2737)\n#define NS_E_DRM_LICENSE_CLOSE_ERROR                                  _HRESULT_TYPEDEF_(0xc00d2738)\n#define NS_E_DRM_GET_LICENSE_ERROR                                    _HRESULT_TYPEDEF_(0xc00d2739)\n#define NS_E_DRM_QUERY_ERROR                                          _HRESULT_TYPEDEF_(0xc00d273a)\n#define NS_E_DRM_REPORT_ERROR                                         _HRESULT_TYPEDEF_(0xc00d273b)\n#define NS_E_DRM_GET_LICENSESTRING_ERROR                              _HRESULT_TYPEDEF_(0xc00d273c)\n#define NS_E_DRM_GET_CONTENTSTRING_ERROR                              _HRESULT_TYPEDEF_(0xc00d273d)\n#define NS_E_DRM_MONITOR_ERROR                                        _HRESULT_TYPEDEF_(0xc00d273e)\n#define NS_E_DRM_UNABLE_TO_SET_PARAMETER                              _HRESULT_TYPEDEF_(0xc00d273f)\n#define NS_E_DRM_INVALID_APPDATA                                      _HRESULT_TYPEDEF_(0xc00d2740)\n#define NS_E_DRM_INVALID_APPDATA_VERSION                              _HRESULT_TYPEDEF_(0xc00d2741)\n#define NS_E_DRM_BACKUP_EXISTS                                        _HRESULT_TYPEDEF_(0xc00d2742)\n#define NS_E_DRM_BACKUP_CORRUPT                                       _HRESULT_TYPEDEF_(0xc00d2743)\n#define NS_E_DRM_BACKUPRESTORE_BUSY                                   _HRESULT_TYPEDEF_(0xc00d2744)\n#define NS_E_BACKUP_RESTORE_BAD_DATA                                  _HRESULT_TYPEDEF_(0xc00d2745)\n#define NS_S_DRM_MONITOR_CANCELLED                                    _HRESULT_TYPEDEF_(0x000d2746)\n#define NS_S_DRM_ACQUIRE_CANCELLED                                    _HRESULT_TYPEDEF_(0x000d2747)\n#define NS_E_DRM_LICENSE_UNUSABLE                                     _HRESULT_TYPEDEF_(0xc00d2748)\n#define NS_E_DRM_INVALID_PROPERTY                                     _HRESULT_TYPEDEF_(0xc00d2749)\n#define NS_E_DRM_SECURE_STORE_NOT_FOUND                               _HRESULT_TYPEDEF_(0xc00d274a)\n#define NS_E_DRM_CACHED_CONTENT_ERROR                                 _HRESULT_TYPEDEF_(0xc00d274b)\n#define NS_E_DRM_INDIVIDUALIZATION_INCOMPLETE                         _HRESULT_TYPEDEF_(0xc00d274c)\n#define NS_E_DRM_DRIVER_AUTH_FAILURE                                  _HRESULT_TYPEDEF_(0xc00d274d)\n#define NS_E_DRM_NEED_UPGRADE_MSSAP                                   _HRESULT_TYPEDEF_(0xc00d274e)\n#define NS_E_DRM_REOPEN_CONTENT                                       _HRESULT_TYPEDEF_(0xc00d274f)\n#define NS_E_DRM_DRIVER_DIGIOUT_FAILURE                               _HRESULT_TYPEDEF_(0xc00d2750)\n#define NS_E_DRM_INVALID_SECURESTORE_PASSWORD                         _HRESULT_TYPEDEF_(0xc00d2751)\n#define NS_E_DRM_APPCERT_REVOKED                                      _HRESULT_TYPEDEF_(0xc00d2752)\n#define NS_E_DRM_RESTORE_FRAUD                                        _HRESULT_TYPEDEF_(0xc00d2753)\n#define NS_E_DRM_HARDWARE_INCONSISTENT                                _HRESULT_TYPEDEF_(0xc00d2754)\n#define NS_E_DRM_SDMI_TRIGGER                                         _HRESULT_TYPEDEF_(0xc00d2755)\n#define NS_E_DRM_SDMI_NOMORECOPIES                                    _HRESULT_TYPEDEF_(0xc00d2756)\n#define NS_E_DRM_UNABLE_TO_CREATE_HEADER_OBJECT                       _HRESULT_TYPEDEF_(0xc00d2757)\n#define NS_E_DRM_UNABLE_TO_CREATE_KEYS_OBJECT                         _HRESULT_TYPEDEF_(0xc00d2758)\n#define NS_E_DRM_LICENSE_NOTACQUIRED                                  _HRESULT_TYPEDEF_(0xc00d2759)\n#define NS_E_DRM_UNABLE_TO_CREATE_CODING_OBJECT                       _HRESULT_TYPEDEF_(0xc00d275a)\n#define NS_E_DRM_UNABLE_TO_CREATE_STATE_DATA_OBJECT                   _HRESULT_TYPEDEF_(0xc00d275b)\n#define NS_E_DRM_BUFFER_TOO_SMALL                                     _HRESULT_TYPEDEF_(0xc00d275c)\n#define NS_E_DRM_UNSUPPORTED_PROPERTY                                 _HRESULT_TYPEDEF_(0xc00d275d)\n#define NS_E_DRM_ERROR_BAD_NET_RESP                                   _HRESULT_TYPEDEF_(0xc00d275e)\n#define NS_E_DRM_STORE_NOTALLSTORED                                   _HRESULT_TYPEDEF_(0xc00d275f)\n#define NS_E_DRM_SECURITY_COMPONENT_SIGNATURE_INVALID                 _HRESULT_TYPEDEF_(0xc00d2760)\n#define NS_E_DRM_INVALID_DATA                                         _HRESULT_TYPEDEF_(0xc00d2761)\n#define NS_E_DRM_POLICY_DISABLE_ONLINE                                _HRESULT_TYPEDEF_(0xc00d2762)\n#define NS_E_DRM_UNABLE_TO_CREATE_AUTHENTICATION_OBJECT               _HRESULT_TYPEDEF_(0xc00d2763)\n#define NS_E_DRM_NOT_CONFIGURED                                       _HRESULT_TYPEDEF_(0xc00d2764)\n#define NS_E_DRM_DEVICE_ACTIVATION_CANCELED                           _HRESULT_TYPEDEF_(0xc00d2765)\n#define NS_E_BACKUP_RESTORE_TOO_MANY_RESETS                           _HRESULT_TYPEDEF_(0xc00d2766)\n#define NS_E_DRM_DEBUGGING_NOT_ALLOWED                                _HRESULT_TYPEDEF_(0xc00d2767)\n#define NS_E_DRM_OPERATION_CANCELED                                   _HRESULT_TYPEDEF_(0xc00d2768)\n#define NS_E_DRM_RESTRICTIONS_NOT_RETRIEVED                           _HRESULT_TYPEDEF_(0xc00d2769)\n#define NS_E_DRM_UNABLE_TO_CREATE_PLAYLIST_OBJECT                     _HRESULT_TYPEDEF_(0xc00d276a)\n#define NS_E_DRM_UNABLE_TO_CREATE_PLAYLIST_BURN_OBJECT                _HRESULT_TYPEDEF_(0xc00d276b)\n#define NS_E_DRM_UNABLE_TO_CREATE_DEVICE_REGISTRATION_OBJECT          _HRESULT_TYPEDEF_(0xc00d276c)\n#define NS_E_DRM_UNABLE_TO_CREATE_METERING_OBJECT                     _HRESULT_TYPEDEF_(0xc00d276d)\n#define NS_S_DRM_BURNABLE_TRACK                                       _HRESULT_TYPEDEF_(0x000d276e)\n#define NS_S_DRM_BURNABLE_TRACK_WITH_PLAYLIST_RESTRICTION             _HRESULT_TYPEDEF_(0x000d276f)\n#define NS_E_DRM_TRACK_EXCEEDED_PLAYLIST_RESTICTION                   _HRESULT_TYPEDEF_(0xc00d2770)\n#define NS_E_DRM_TRACK_EXCEEDED_TRACKBURN_RESTRICTION                 _HRESULT_TYPEDEF_(0xc00d2771)\n#define NS_E_DRM_UNABLE_TO_GET_DEVICE_CERT                            _HRESULT_TYPEDEF_(0xc00d2772)\n#define NS_E_DRM_UNABLE_TO_GET_SECURE_CLOCK                           _HRESULT_TYPEDEF_(0xc00d2773)\n#define NS_E_DRM_UNABLE_TO_SET_SECURE_CLOCK                           _HRESULT_TYPEDEF_(0xc00d2774)\n#define NS_E_DRM_UNABLE_TO_GET_SECURE_CLOCK_FROM_SERVER               _HRESULT_TYPEDEF_(0xc00d2775)\n#define NS_E_DRM_POLICY_METERING_DISABLED                             _HRESULT_TYPEDEF_(0xc00d2776)\n#define NS_E_DRM_TRANSFER_CHAINED_LICENSES_UNSUPPORTED                _HRESULT_TYPEDEF_(0xc00d2777)\n#define NS_E_DRM_SDK_VERSIONMISMATCH                                  _HRESULT_TYPEDEF_(0xc00d2778)\n#define NS_E_DRM_LIC_NEEDS_DEVICE_CLOCK_SET                           _HRESULT_TYPEDEF_(0xc00d2779)\n#define NS_E_LICENSE_HEADER_MISSING_URL                               _HRESULT_TYPEDEF_(0xc00d277a)\n#define NS_E_DEVICE_NOT_WMDRM_DEVICE                                  _HRESULT_TYPEDEF_(0xc00d277b)\n#define NS_E_DRM_INVALID_APPCERT                                      _HRESULT_TYPEDEF_(0xc00d277c)\n#define NS_E_DRM_PROTOCOL_FORCEFUL_TERMINATION_ON_PETITION            _HRESULT_TYPEDEF_(0xc00d277d)\n#define NS_E_DRM_PROTOCOL_FORCEFUL_TERMINATION_ON_CHALLENGE           _HRESULT_TYPEDEF_(0xc00d277e)\n#define NS_E_DRM_CHECKPOINT_FAILED                                    _HRESULT_TYPEDEF_(0xc00d277f)\n#define NS_E_DRM_BB_UNABLE_TO_INITIALIZE                              _HRESULT_TYPEDEF_(0xc00d2780)\n#define NS_E_DRM_UNABLE_TO_LOAD_HARDWARE_ID                           _HRESULT_TYPEDEF_(0xc00d2781)\n#define NS_E_DRM_UNABLE_TO_OPEN_DATA_STORE                            _HRESULT_TYPEDEF_(0xc00d2782)\n#define NS_E_DRM_DATASTORE_CORRUPT                                    _HRESULT_TYPEDEF_(0xc00d2783)\n#define NS_E_DRM_UNABLE_TO_CREATE_INMEMORYSTORE_OBJECT                _HRESULT_TYPEDEF_(0xc00d2784)\n#define NS_E_DRM_STUBLIB_REQUIRED                                     _HRESULT_TYPEDEF_(0xc00d2785)\n#define NS_E_DRM_UNABLE_TO_CREATE_CERTIFICATE_OBJECT                  _HRESULT_TYPEDEF_(0xc00d2786)\n#define NS_E_DRM_MIGRATION_TARGET_NOT_ONLINE                          _HRESULT_TYPEDEF_(0xc00d2787)\n#define NS_E_DRM_INVALID_MIGRATION_IMAGE                              _HRESULT_TYPEDEF_(0xc00d2788)\n#define NS_E_DRM_MIGRATION_TARGET_STATES_CORRUPTED                    _HRESULT_TYPEDEF_(0xc00d2789)\n#define NS_E_DRM_MIGRATION_IMPORTER_NOT_AVAILABLE                     _HRESULT_TYPEDEF_(0xc00d278a)\n#define NS_DRM_E_MIGRATION_UPGRADE_WITH_DIFF_SID                      _HRESULT_TYPEDEF_(0xc00d278b)\n#define NS_DRM_E_MIGRATION_SOURCE_MACHINE_IN_USE                      _HRESULT_TYPEDEF_(0xc00d278c)\n#define NS_DRM_E_MIGRATION_TARGET_MACHINE_LESS_THAN_LH                _HRESULT_TYPEDEF_(0xc00d278d)\n#define NS_DRM_E_MIGRATION_IMAGE_ALREADY_EXISTS                       _HRESULT_TYPEDEF_(0xc00d278e)\n#define NS_E_DRM_HARDWAREID_MISMATCH                                  _HRESULT_TYPEDEF_(0xc00d278f)\n#define NS_E_INVALID_DRMV2CLT_STUBLIB                                 _HRESULT_TYPEDEF_(0xc00d2790)\n#define NS_E_DRM_MIGRATION_INVALID_LEGACYV2_DATA                      _HRESULT_TYPEDEF_(0xc00d2791)\n#define NS_E_DRM_MIGRATION_LICENSE_ALREADY_EXISTS                     _HRESULT_TYPEDEF_(0xc00d2792)\n#define NS_E_DRM_MIGRATION_INVALID_LEGACYV2_SST_PASSWORD              _HRESULT_TYPEDEF_(0xc00d2793)\n#define NS_E_DRM_MIGRATION_NOT_SUPPORTED                              _HRESULT_TYPEDEF_(0xc00d2794)\n#define NS_E_DRM_UNABLE_TO_CREATE_MIGRATION_IMPORTER_OBJECT           _HRESULT_TYPEDEF_(0xc00d2795)\n#define NS_E_DRM_CHECKPOINT_MISMATCH                                  _HRESULT_TYPEDEF_(0xc00d2796)\n#define NS_E_DRM_CHECKPOINT_CORRUPT                                   _HRESULT_TYPEDEF_(0xc00d2797)\n#define NS_E_REG_FLUSH_FAILURE                                        _HRESULT_TYPEDEF_(0xc00d2798)\n#define NS_E_HDS_KEY_MISMATCH                                         _HRESULT_TYPEDEF_(0xc00d2799)\n#define NS_E_DRM_MIGRATION_OPERATION_CANCELLED                        _HRESULT_TYPEDEF_(0xc00d279a)\n#define NS_E_DRM_MIGRATION_OBJECT_IN_USE                              _HRESULT_TYPEDEF_(0xc00d279b)\n#define NS_E_DRM_MALFORMED_CONTENT_HEADER                             _HRESULT_TYPEDEF_(0xc00d279c)\n#define NS_E_DRM_LICENSE_EXPIRED                                      _HRESULT_TYPEDEF_(0xc00d27d8)\n#define NS_E_DRM_LICENSE_NOTENABLED                                   _HRESULT_TYPEDEF_(0xc00d27d9)\n#define NS_E_DRM_LICENSE_APPSECLOW                                    _HRESULT_TYPEDEF_(0xc00d27da)\n#define NS_E_DRM_STORE_NEEDINDI                                       _HRESULT_TYPEDEF_(0xc00d27db)\n#define NS_E_DRM_STORE_NOTALLOWED                                     _HRESULT_TYPEDEF_(0xc00d27dc)\n#define NS_E_DRM_LICENSE_APP_NOTALLOWED                               _HRESULT_TYPEDEF_(0xc00d27dd)\n#define NS_S_DRM_NEEDS_INDIVIDUALIZATION                              _HRESULT_TYPEDEF_(0x000d27de)\n#define NS_E_DRM_LICENSE_CERT_EXPIRED                                 _HRESULT_TYPEDEF_(0xc00d27df)\n#define NS_E_DRM_LICENSE_SECLOW                                       _HRESULT_TYPEDEF_(0xc00d27e0)\n#define NS_E_DRM_LICENSE_CONTENT_REVOKED                              _HRESULT_TYPEDEF_(0xc00d27e1)\n#define NS_E_DRM_DEVICE_NOT_REGISTERED                                _HRESULT_TYPEDEF_(0xc00d27e2)\n#define NS_E_DRM_LICENSE_NOSAP                                        _HRESULT_TYPEDEF_(0xc00d280a)\n#define NS_E_DRM_LICENSE_NOSVP                                        _HRESULT_TYPEDEF_(0xc00d280b)\n#define NS_E_DRM_LICENSE_NOWDM                                        _HRESULT_TYPEDEF_(0xc00d280c)\n#define NS_E_DRM_LICENSE_NOTRUSTEDCODEC                               _HRESULT_TYPEDEF_(0xc00d280d)\n#define NS_E_DRM_SOURCEID_NOT_SUPPORTED                               _HRESULT_TYPEDEF_(0xc00d280e)\n#define NS_E_DRM_NEEDS_UPGRADE_TEMPFILE                               _HRESULT_TYPEDEF_(0xc00d283d)\n#define NS_E_DRM_NEED_UPGRADE_PD                                      _HRESULT_TYPEDEF_(0xc00d283e)\n#define NS_E_DRM_SIGNATURE_FAILURE                                    _HRESULT_TYPEDEF_(0xc00d283f)\n#define NS_E_DRM_LICENSE_SERVER_INFO_MISSING                          _HRESULT_TYPEDEF_(0xc00d2840)\n#define NS_E_DRM_BUSY                                                 _HRESULT_TYPEDEF_(0xc00d2841)\n#define NS_E_DRM_PD_TOO_MANY_DEVICES                                  _HRESULT_TYPEDEF_(0xc00d2842)\n#define NS_E_DRM_INDIV_FRAUD                                          _HRESULT_TYPEDEF_(0xc00d2843)\n#define NS_E_DRM_INDIV_NO_CABS                                        _HRESULT_TYPEDEF_(0xc00d2844)\n#define NS_E_DRM_INDIV_SERVICE_UNAVAILABLE                            _HRESULT_TYPEDEF_(0xc00d2845)\n#define NS_E_DRM_RESTORE_SERVICE_UNAVAILABLE                          _HRESULT_TYPEDEF_(0xc00d2846)\n#define NS_E_DRM_CLIENT_CODE_EXPIRED                                  _HRESULT_TYPEDEF_(0xc00d2847)\n#define NS_E_DRM_NO_UPLINK_LICENSE                                    _HRESULT_TYPEDEF_(0xc00d2848)\n#define NS_E_DRM_INVALID_KID                                          _HRESULT_TYPEDEF_(0xc00d2849)\n#define NS_E_DRM_LICENSE_INITIALIZATION_ERROR                         _HRESULT_TYPEDEF_(0xc00d284a)\n#define NS_E_DRM_CHAIN_TOO_LONG                                       _HRESULT_TYPEDEF_(0xc00d284c)\n#define NS_E_DRM_UNSUPPORTED_ALGORITHM                                _HRESULT_TYPEDEF_(0xc00d284d)\n#define NS_E_DRM_LICENSE_DELETION_ERROR                               _HRESULT_TYPEDEF_(0xc00d284e)\n#define NS_E_DRM_INVALID_CERTIFICATE                                  _HRESULT_TYPEDEF_(0xc00d28a0)\n#define NS_E_DRM_CERTIFICATE_REVOKED                                  _HRESULT_TYPEDEF_(0xc00d28a1)\n#define NS_E_DRM_LICENSE_UNAVAILABLE                                  _HRESULT_TYPEDEF_(0xc00d28a2)\n#define NS_E_DRM_DEVICE_LIMIT_REACHED                                 _HRESULT_TYPEDEF_(0xc00d28a3)\n#define NS_E_DRM_UNABLE_TO_VERIFY_PROXIMITY                           _HRESULT_TYPEDEF_(0xc00d28a4)\n#define NS_E_DRM_MUST_REGISTER                                        _HRESULT_TYPEDEF_(0xc00d28a5)\n#define NS_E_DRM_MUST_APPROVE                                         _HRESULT_TYPEDEF_(0xc00d28a6)\n#define NS_E_DRM_MUST_REVALIDATE                                      _HRESULT_TYPEDEF_(0xc00d28a7)\n#define NS_E_DRM_INVALID_PROXIMITY_RESPONSE                           _HRESULT_TYPEDEF_(0xc00d28a8)\n#define NS_E_DRM_INVALID_SESSION                                      _HRESULT_TYPEDEF_(0xc00d28a9)\n#define NS_E_DRM_DEVICE_NOT_OPEN                                      _HRESULT_TYPEDEF_(0xc00d28aa)\n#define NS_E_DRM_DEVICE_ALREADY_REGISTERED                            _HRESULT_TYPEDEF_(0xc00d28ab)\n#define NS_E_DRM_UNSUPPORTED_PROTOCOL_VERSION                         _HRESULT_TYPEDEF_(0xc00d28ac)\n#define NS_E_DRM_UNSUPPORTED_ACTION                                   _HRESULT_TYPEDEF_(0xc00d28ad)\n#define NS_E_DRM_CERTIFICATE_SECURITY_LEVEL_INADEQUATE                _HRESULT_TYPEDEF_(0xc00d28ae)\n#define NS_E_DRM_UNABLE_TO_OPEN_PORT                                  _HRESULT_TYPEDEF_(0xc00d28af)\n#define NS_E_DRM_BAD_REQUEST                                          _HRESULT_TYPEDEF_(0xc00d28b0)\n#define NS_E_DRM_INVALID_CRL                                          _HRESULT_TYPEDEF_(0xc00d28b1)\n#define NS_E_DRM_ATTRIBUTE_TOO_LONG                                   _HRESULT_TYPEDEF_(0xc00d28b2)\n#define NS_E_DRM_EXPIRED_LICENSEBLOB                                  _HRESULT_TYPEDEF_(0xc00d28b3)\n#define NS_E_DRM_INVALID_LICENSEBLOB                                  _HRESULT_TYPEDEF_(0xc00d28b4)\n#define NS_E_DRM_INCLUSION_LIST_REQUIRED                              _HRESULT_TYPEDEF_(0xc00d28b5)\n#define NS_E_DRM_DRMV2CLT_REVOKED                                     _HRESULT_TYPEDEF_(0xc00d28b6)\n#define NS_E_DRM_RIV_TOO_SMALL                                        _HRESULT_TYPEDEF_(0xc00d28b7)\n#define NS_E_OUTPUT_PROTECTION_LEVEL_UNSUPPORTED                      _HRESULT_TYPEDEF_(0xc00d2904)\n#define NS_E_COMPRESSED_DIGITAL_VIDEO_PROTECTION_LEVEL_UNSUPPORTED    _HRESULT_TYPEDEF_(0xc00d2905)\n#define NS_E_UNCOMPRESSED_DIGITAL_VIDEO_PROTECTION_LEVEL_UNSUPPORTED  _HRESULT_TYPEDEF_(0xc00d2906)\n#define NS_E_ANALOG_VIDEO_PROTECTION_LEVEL_UNSUPPORTED                _HRESULT_TYPEDEF_(0xc00d2907)\n#define NS_E_COMPRESSED_DIGITAL_AUDIO_PROTECTION_LEVEL_UNSUPPORTED    _HRESULT_TYPEDEF_(0xc00d2908)\n#define NS_E_UNCOMPRESSED_DIGITAL_AUDIO_PROTECTION_LEVEL_UNSUPPORTED  _HRESULT_TYPEDEF_(0xc00d2909)\n#define NS_E_OUTPUT_PROTECTION_SCHEME_UNSUPPORTED                     _HRESULT_TYPEDEF_(0xc00d290a)\n\n/* Setup errors */\n#define NS_S_REBOOT_RECOMMENDED                                       _HRESULT_TYPEDEF_(0x000d2af8)\n#define NS_S_REBOOT_REQUIRED                                          _HRESULT_TYPEDEF_(0x000d2af9)\n#define NS_E_REBOOT_RECOMMENDED                                       _HRESULT_TYPEDEF_(0xc00d2afa)\n#define NS_E_REBOOT_REQUIRED                                          _HRESULT_TYPEDEF_(0xc00d2afb)\n#define NS_E_SETUP_INCOMPLETE                                         _HRESULT_TYPEDEF_(0xc00d2afc)\n#define NS_E_SETUP_DRM_MIGRATION_FAILED                               _HRESULT_TYPEDEF_(0xc00d2afd)\n#define NS_E_SETUP_IGNORABLE_FAILURE                                  _HRESULT_TYPEDEF_(0xc00d2afe)\n#define NS_E_SETUP_DRM_MIGRATION_FAILED_AND_IGNORABLE_FAILURE         _HRESULT_TYPEDEF_(0xc00d2aff)\n#define NS_E_SETUP_BLOCKED                                            _HRESULT_TYPEDEF_(0xc00d2b00)\n\n/* Networking errors */\n#define NS_E_UNKNOWN_PROTOCOL                                         _HRESULT_TYPEDEF_(0xc00d2ee0)\n#define NS_E_REDIRECT_TO_PROXY                                        _HRESULT_TYPEDEF_(0xc00d2ee1)\n#define NS_E_INTERNAL_SERVER_ERROR                                    _HRESULT_TYPEDEF_(0xc00d2ee2)\n#define NS_E_BAD_REQUEST                                              _HRESULT_TYPEDEF_(0xc00d2ee3)\n#define NS_E_ERROR_FROM_PROXY                                         _HRESULT_TYPEDEF_(0xc00d2ee4)\n#define NS_E_PROXY_TIMEOUT                                            _HRESULT_TYPEDEF_(0xc00d2ee5)\n#define NS_E_SERVER_UNAVAILABLE                                       _HRESULT_TYPEDEF_(0xc00d2ee6)\n#define NS_E_REFUSED_BY_SERVER                                        _HRESULT_TYPEDEF_(0xc00d2ee7)\n#define NS_E_INCOMPATIBLE_SERVER                                      _HRESULT_TYPEDEF_(0xc00d2ee8)\n#define NS_E_MULTICAST_DISABLED                                       _HRESULT_TYPEDEF_(0xc00d2ee9)\n#define NS_E_INVALID_REDIRECT                                         _HRESULT_TYPEDEF_(0xc00d2eea)\n#define NS_E_ALL_PROTOCOLS_DISABLED                                   _HRESULT_TYPEDEF_(0xc00d2eeb)\n#define NS_E_MSBD_NO_LONGER_SUPPORTED                                 _HRESULT_TYPEDEF_(0xc00d2eec)\n#define NS_E_PROXY_NOT_FOUND                                          _HRESULT_TYPEDEF_(0xc00d2eed)\n#define NS_E_CANNOT_CONNECT_TO_PROXY                                  _HRESULT_TYPEDEF_(0xc00d2eee)\n#define NS_E_SERVER_DNS_TIMEOUT                                       _HRESULT_TYPEDEF_(0xc00d2eef)\n#define NS_E_PROXY_DNS_TIMEOUT                                        _HRESULT_TYPEDEF_(0xc00d2ef0)\n#define NS_E_CLOSED_ON_SUSPEND                                        _HRESULT_TYPEDEF_(0xc00d2ef1)\n#define NS_E_CANNOT_READ_PLAYLIST_FROM_MEDIASERVER                    _HRESULT_TYPEDEF_(0xc00d2ef2)\n#define NS_E_SESSION_NOT_FOUND                                        _HRESULT_TYPEDEF_(0xc00d2ef3)\n#define NS_E_REQUIRE_STREAMING_CLIENT                                 _HRESULT_TYPEDEF_(0xc00d2ef4)\n#define NS_E_PLAYLIST_ENTRY_HAS_CHANGED                               _HRESULT_TYPEDEF_(0xc00d2ef5)\n#define NS_E_PROXY_ACCESSDENIED                                       _HRESULT_TYPEDEF_(0xc00d2ef6)\n#define NS_E_PROXY_SOURCE_ACCESSDENIED                                _HRESULT_TYPEDEF_(0xc00d2ef7)\n#define NS_E_NETWORK_SINK_WRITE                                       _HRESULT_TYPEDEF_(0xc00d2ef8)\n#define NS_E_FIREWALL                                                 _HRESULT_TYPEDEF_(0xc00d2ef9)\n#define NS_E_MMS_NOT_SUPPORTED                                        _HRESULT_TYPEDEF_(0xc00d2efa)\n#define NS_E_SERVER_ACCESSDENIED                                      _HRESULT_TYPEDEF_(0xc00d2efb)\n#define NS_E_RESOURCE_GONE                                            _HRESULT_TYPEDEF_(0xc00d2efc)\n#define NS_E_NO_EXISTING_PACKETIZER                                   _HRESULT_TYPEDEF_(0xc00d2efd)\n#define NS_E_BAD_SYNTAX_IN_SERVER_RESPONSE                            _HRESULT_TYPEDEF_(0xc00d2efe)\n#define NS_I_RECONNECTED                                              _HRESULT_TYPEDEF_(0x400d2eff)\n#define NS_E_RESET_SOCKET_CONNECTION                                  _HRESULT_TYPEDEF_(0xc00d2f00)\n#define NS_I_NOLOG_STOP                                               _HRESULT_TYPEDEF_(0x400d2f01)\n#define NS_E_TOO_MANY_HOPS                                            _HRESULT_TYPEDEF_(0xc00d2f02)\n#define NS_I_EXISTING_PACKETIZER                                      _HRESULT_TYPEDEF_(0x400d2f03)\n#define NS_I_MANUAL_PROXY                                             _HRESULT_TYPEDEF_(0x400d2f04)\n#define NS_E_TOO_MUCH_DATA_FROM_SERVER                                _HRESULT_TYPEDEF_(0xc00d2f05)\n#define NS_E_CONNECT_TIMEOUT                                          _HRESULT_TYPEDEF_(0xc00d2f06)\n#define NS_E_PROXY_CONNECT_TIMEOUT                                    _HRESULT_TYPEDEF_(0xc00d2f07)\n#define NS_E_SESSION_INVALID                                          _HRESULT_TYPEDEF_(0xc00d2f08)\n#define NS_S_EOSRECEDING                                              _HRESULT_TYPEDEF_(0x000d2f09)\n#define NS_E_PACKETSINK_UNKNOWN_FEC_STREAM                            _HRESULT_TYPEDEF_(0xc00d2f0a)\n#define NS_E_PUSH_CANNOTCONNECT                                       _HRESULT_TYPEDEF_(0xc00d2f0b)\n#define NS_E_INCOMPATIBLE_PUSH_SERVER                                 _HRESULT_TYPEDEF_(0xc00d2f0c)\n#define NS_S_CHANGENOTICE                                             _HRESULT_TYPEDEF_(0x000d2f0d)\n\n/* Client media service errors */\n#define NS_E_END_OF_PLAYLIST                                          _HRESULT_TYPEDEF_(0xc00d32c8)\n#define NS_E_USE_FILE_SOURCE                                          _HRESULT_TYPEDEF_(0xc00d32c9)\n#define NS_E_PROPERTY_NOT_FOUND                                       _HRESULT_TYPEDEF_(0xc00d32ca)\n#define NS_E_PROPERTY_READ_ONLY                                       _HRESULT_TYPEDEF_(0xc00d32cc)\n#define NS_E_TABLE_KEY_NOT_FOUND                                      _HRESULT_TYPEDEF_(0xc00d32cd)\n#define NS_E_INVALID_QUERY_OPERATOR                                   _HRESULT_TYPEDEF_(0xc00d32cf)\n#define NS_E_INVALID_QUERY_PROPERTY                                   _HRESULT_TYPEDEF_(0xc00d32d0)\n#define NS_E_PROPERTY_NOT_SUPPORTED                                   _HRESULT_TYPEDEF_(0xc00d32d2)\n#define NS_E_SCHEMA_CLASSIFY_FAILURE                                  _HRESULT_TYPEDEF_(0xc00d32d4)\n#define NS_E_METADATA_FORMAT_NOT_SUPPORTED                            _HRESULT_TYPEDEF_(0xc00d32d5)\n#define NS_E_METADATA_NO_EDITING_CAPABILITY                           _HRESULT_TYPEDEF_(0xc00d32d6)\n#define NS_E_METADATA_CANNOT_SET_LOCALE                               _HRESULT_TYPEDEF_(0xc00d32d7)\n#define NS_E_METADATA_LANGUAGE_NOT_SUPORTED                           _HRESULT_TYPEDEF_(0xc00d32d8)\n#define NS_E_METADATA_NO_RFC1766_NAME_FOR_LOCALE                      _HRESULT_TYPEDEF_(0xc00d32d9)\n#define NS_E_METADATA_NOT_AVAILABLE                                   _HRESULT_TYPEDEF_(0xc00d32da)\n#define NS_E_METADATA_CACHE_DATA_NOT_AVAILABLE                        _HRESULT_TYPEDEF_(0xc00d32db)\n#define NS_E_METADATA_INVALID_DOCUMENT_TYPE                           _HRESULT_TYPEDEF_(0xc00d32dc)\n#define NS_E_METADATA_IDENTIFIER_NOT_AVAILABLE                        _HRESULT_TYPEDEF_(0xc00d32dd)\n#define NS_E_METADATA_CANNOT_RETRIEVE_FROM_OFFLINE_CACHE              _HRESULT_TYPEDEF_(0xc00d32de)\n\n#endif /* _NSERROR_H */\n"
  },
  {
    "path": "wine/windows/nspapi.h",
    "content": "/* NSPAPI.H -- winsock 1.1\n * not supported on win95\n *\n * Copyright (C) 2001 Stefan Leichter\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _WINE_NSPAPI_\n#define _WINE_NSPAPI_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n/*\n * constants\n */\n#define XP_CONNECTIONLESS\t\t0x00000001\n#define XP_GUARANTEED_DELIVERY\t\t0x00000002\n#define XP_GUARANTEED_ORDER\t\t0x00000004\n#define XP_MESSAGE_ORIENTED\t\t0x00000008\n#define XP_PSEUDO_STREAM\t\t0x00000010\n#define XP_GRACEFUL_CLOSE\t\t0x00000020\n#define XP_EXPEDITED_DATA\t\t0x00000040\n#define XP_CONNECT_DATA\t\t\t0x00000080\n#define XP_DISCONNECT_DATA\t\t0x00000100\n#define XP_SUPPORTS_BROADCAST\t\t0x00000200\n#define XP_SUPPORTS_MULTICAST\t\t0x00000400\n#define XP_BANDWIDTH_ALLOCATION\t\t0x00000800\n#define XP_FRAGMENTATION\t\t0x00001000\n#define XP_ENCRYPTS\t\t\t0x00002000\n\n/*\n * structures\n */\ntypedef  struct _PROTOCOL_INFOA\n{\n         DWORD   dwServiceFlags;\n         INT     iAddressFamily;\n         INT     iMaxSockAddr;\n         INT     iMinSockAddr;\n         INT     iSocketType;\n         INT     iProtocol;\n         DWORD   dwMessageSize;\n         LPSTR   lpProtocol;\n} PROTOCOL_INFOA, *PPROTOCOL_INFOA, *LPPROTOCOL_INFOA;\n\ntypedef  struct _PROTOCOL_INFOW\n{\n         DWORD   dwServiceFlags;\n         INT     iAddressFamily;\n         INT     iMaxSockAddr;\n         INT     iMinSockAddr;\n         INT     iSocketType;\n         INT     iProtocol;\n         DWORD   dwMessageSize;\n         LPWSTR  lpProtocol;\n} PROTOCOL_INFOW, *PPROTOCOL_INFOW, *LPPROTOCOL_INFOW;\n\nDECL_WINELIB_TYPE_AW(PROTOCOL_INFO)\nDECL_WINELIB_TYPE_AW(PPROTOCOL_INFO)\nDECL_WINELIB_TYPE_AW(LPPROTOCOL_INFO)\n\ntypedef struct _SERVICE_ADDRESS\n{\n        DWORD   dwAddressType;\n        DWORD   dwAddressFlags;\n        DWORD   dwAddressLength;\n        DWORD   dwPrincipalLength;\n        BYTE*   lpAddress;\n        BYTE*   lpPrincipal;\n} SERVICE_ADDRESS, *PSERVICE_ADDRESS, *LPSERVICE_ADDRESS;\n\ntypedef struct _SERVICE_ADDRESSES\n{\n        DWORD           dwAddressCount;\n        SERVICE_ADDRESS Addresses[1];\n} SERVICE_ADDRESSES, *PSERVICE_ADDRESSES, *LPSERVICE_ADDRESSES;\n\ntypedef struct _SERVICE_INFOA\n{\n        LPGUID              lpServiceType;\n        LPSTR               lpServiceName;\n        LPSTR               lpComment;\n        LPSTR               lpLocale;\n        DWORD               dwDisplayHint;\n        DWORD               dwVersion;\n        DWORD               dwTime;\n        LPSTR               lpMachineName;\n        LPSERVICE_ADDRESSES lpServiceAddress;\n        BLOB                ServiceSpecificInfo;\n} SERVICE_INFOA, *PSERVICE_INFOA, *LPSERVICE_INFOA;\n\ntypedef struct _SERVICE_INFOW\n{\n        LPGUID              lpServiceType;\n        LPWSTR              lpServiceName;\n        LPWSTR              lpComment;\n        LPWSTR              lpLocale;\n        DWORD               dwDisplayHint;\n        DWORD               dwVersion;\n        DWORD               dwTime;\n        LPSTR               lpMachineName;\n        LPSERVICE_ADDRESSES lpServiceAddress;\n        BLOB                ServiceSpecificInfo; /* May point to SERVICE_TYPE_INFO_ABS */\n} SERVICE_INFOW, *PSERVICE_INFOW, *LPSERVICE_INFOW;\n\nDECL_WINELIB_TYPE_AW(SERVICE_INFO)\nDECL_WINELIB_TYPE_AW(PSERVICE_INFO)\nDECL_WINELIB_TYPE_AW(LPSERVICE_INFO)\n\ntypedef struct _SERVICE_TYPE_VALUE_ABSA\n{\n        DWORD   dwNameSpace; /* Name space or set of name spaces */\n        DWORD   dwValueType; /* Type of the value data */\n        DWORD   dwValueSize; /* Size of the value data */\n        LPSTR   lpValueName; /* Name of the value */\n        PVOID   lpValue;     /* Pointer to the value data */\n} SERVICE_TYPE_VALUE_ABSA, *PSERVICE_TYPE_VALUE_ABSA, *LPSERVICE_TYPE_VALUE_ABSA;\n\ntypedef struct _SERVICE_TYPE_VALUE_ABSW\n{\n        DWORD   dwNameSpace; /* Name space or set of name spaces */\n        DWORD   dwValueType; /* Type of the value data */\n        DWORD   dwValueSize; /* Size of the value data */\n        LPWSTR  lpValueName; /* Name of the value */\n        PVOID   lpValue;     /* Pointer to the value data */\n} SERVICE_TYPE_VALUE_ABSW, *PSERVICE_TYPE_VALUE_ABSW, *LPSERVICE_TYPE_VALUE_ABSW;\n\nDECL_WINELIB_TYPE_AW(SERVICE_TYPE_VALUE_ABS)\nDECL_WINELIB_TYPE_AW(PSERVICE_TYPE_VALUE_ABS)\nDECL_WINELIB_TYPE_AW(LPSERVICE_TYPE_VALUE_ABS)\n\ntypedef struct _SERVICE_TYPE_INFO_ABSA\n{\n        LPSTR                   lpTypeName;     /* Name of the network service type */\n        DWORD                   dwValueCount;   /* Number of SERVICE_TYPE_VALUE_ABS structures */\n        SERVICE_TYPE_VALUE_ABSA Values[1];      /* Array of SERVICE_TYPE_VALUE_ABS structures */\n} SERVICE_TYPE_INFO_ABSA, *PSERVICE_TYPE_INFO_ABSA, *LPSERVICE_TYPE_INFO_ABSA;\n\ntypedef struct _SERVICE_TYPE_INFO_ABSW\n{\n        LPWSTR                  lpTypeName;     /* Name of the network service type */\n        DWORD                   dwValueCount;   /* Number of SERVICE_TYPE_VALUE_ABS structures */\n        SERVICE_TYPE_VALUE_ABSW Values[1];      /* Array of SERVICE_TYPE_VALUE_ABS structures */\n} SERVICE_TYPE_INFO_ABSW, *PSERVICE_TYPE_INFO_ABSW, *LPSERVICE_TYPE_INFO_ABSW;\n\nDECL_WINELIB_TYPE_AW(SERVICE_TYPE_INFO_ABS)\nDECL_WINELIB_TYPE_AW(PSERVICE_TYPE_INFO_ABS)\nDECL_WINELIB_TYPE_AW(LPSERVICE_TYPE_INFO_ABS)\n\ntypedef void (*LPSERVICE_CALLBACK_PROC)(LPARAM lParam, HANDLE hAsyncTaskHandle);\n\ntypedef struct _SERVICE_ASYNC_INFO\n{\n    LPSERVICE_CALLBACK_PROC lpServiceCallbackProc;\n    LPARAM                  lParam;\n    HANDLE                  hAsyncTaskHandle;\n} SERVICE_ASYNC_INFO, *PSERVICE_ASYNC_INFO, *LPSERVICE_ASYNC_INFO;\n\n/*\n * function prototypes\n */\nINT WINAPI GetAddressByNameA(DWORD dwNameSpace, LPGUID lpServiceType, LPSTR lpServiceName,\n    LPINT lpiProtocols, DWORD dwResolution, LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,\n    LPVOID lpCsaddrBuffer, LPDWORD lpdwBufferLength, LPSTR lpAliasBuffer,\n    LPDWORD lpdwAliasBufferLength);\nINT WINAPI GetAddressByNameW(DWORD dwNameSpace, LPGUID lpServiceType, LPWSTR lpServiceName,\n    LPINT lpiProtocols, DWORD dwResolution, LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,\n    LPVOID lpCsaddrBuffer, LPDWORD lpdwBufferLength, LPWSTR lpAliasBuffer,\n    LPDWORD lpdwAliasBufferLength);\n#define GetAddressByName WINELIB_NAME_AW(GetAddressByName)\nINT WINAPI GetTypeByNameA(LPSTR lpServiceName, LPGUID lpServiceType);\nINT WINAPI GetTypeByNameW(LPWSTR lpServiceName, LPGUID lpServiceType);\n#define GetTypeByName WINELIB_NAME_AW(GetTypeByName)\nINT WINAPI SetServiceA(DWORD dwNameSpace, DWORD dwOperation, DWORD dwFlags, LPSERVICE_INFOA lpServiceInfo,\n                       LPSERVICE_ASYNC_INFO lpServiceAsyncInfo, LPDWORD lpdwStatusFlags);\nINT WINAPI SetServiceW(DWORD dwNameSpace, DWORD dwOperation, DWORD dwFlags, LPSERVICE_INFOW lpServiceInfo,\n                       LPSERVICE_ASYNC_INFO lpServiceAsyncInfo, LPDWORD lpdwStatusFlags);\n#define SetService WINELIB_NAME_AW(SetService)\nINT WINAPI GetServiceA(DWORD dwNameSpace, LPGUID lpGuid, LPSTR lpServiceName,\n                       DWORD dwProperties, LPVOID lpBuffer, LPDWORD lpdwBufferSize,\n                       LPSERVICE_ASYNC_INFO lpServiceAsyncInfo);\nINT WINAPI GetServiceW(DWORD dwNameSpace, LPGUID lpGuid, LPSTR lpServiceName,\n                       DWORD dwProperties, LPVOID lpBuffer, LPDWORD lpdwBufferSize,\n                       LPSERVICE_ASYNC_INFO lpServiceAsyncInfo);\n#define GetService WINELIB_NAME_AW(GetService)\n\n#ifdef __cplusplus\n}      /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif /* _WINE_NSPAPI_ */\n"
  },
  {
    "path": "wine/windows/ntddcdrm.h",
    "content": "/*\n * DDK information for CD ROM\n *\n * Copyright (C) 2002 Eric Pouech\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __NTDDCDRM_H\n#define __NTDDCDRM_H\n\n#define IOCTL_CDROM_BASE                FILE_DEVICE_CD_ROM\n#define IOCTL_CDROM_UNLOAD_DRIVER       CTL_CODE(IOCTL_CDROM_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_CDROM_READ_TOC            CTL_CODE(IOCTL_CDROM_BASE, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_CDROM_GET_CONTROL         CTL_CODE(IOCTL_CDROM_BASE, 0x000D, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_CDROM_PLAY_AUDIO_MSF      CTL_CODE(IOCTL_CDROM_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_CDROM_SEEK_AUDIO_MSF      CTL_CODE(IOCTL_CDROM_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_CDROM_STOP_AUDIO          CTL_CODE(IOCTL_CDROM_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_CDROM_PAUSE_AUDIO         CTL_CODE(IOCTL_CDROM_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_CDROM_RESUME_AUDIO        CTL_CODE(IOCTL_CDROM_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_CDROM_GET_VOLUME          CTL_CODE(IOCTL_CDROM_BASE, 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_CDROM_SET_VOLUME          CTL_CODE(IOCTL_CDROM_BASE, 0x000A, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_CDROM_READ_Q_CHANNEL      CTL_CODE(IOCTL_CDROM_BASE, 0x000B, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_CDROM_GET_LAST_SESSION    CTL_CODE(IOCTL_CDROM_BASE, 0x000E, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_CDROM_RAW_READ            CTL_CODE(IOCTL_CDROM_BASE, 0x000F, METHOD_OUT_DIRECT,  FILE_READ_ACCESS)\n#define IOCTL_CDROM_DISK_TYPE           CTL_CODE(IOCTL_CDROM_BASE, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_CDROM_GET_DRIVE_GEOMETRY  CTL_CODE(IOCTL_CDROM_BASE, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS)\n\n#define IOCTL_CDROM_CHECK_VERIFY        CTL_CODE(IOCTL_CDROM_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_CDROM_MEDIA_REMOVAL       CTL_CODE(IOCTL_CDROM_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_CDROM_EJECT_MEDIA         CTL_CODE(IOCTL_CDROM_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_CDROM_LOAD_MEDIA          CTL_CODE(IOCTL_CDROM_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_CDROM_RESERVE             CTL_CODE(IOCTL_CDROM_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_CDROM_RELEASE             CTL_CODE(IOCTL_CDROM_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_CDROM_FIND_NEW_DEVICES    CTL_CODE(IOCTL_CDROM_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)\n\n#include <ntddstor.h>\n\n#define MAXIMUM_NUMBER_TRACKS 100\n#define MAXIMUM_CDROM_SIZE 804\n\ntypedef struct _TRACK_DATA {\n    UCHAR               Reserved;\n    UCHAR               Control : 4;\n    UCHAR               Adr : 4;\n    UCHAR               TrackNumber;\n    UCHAR               Reserved1;\n    UCHAR               Address[4];\n} TRACK_DATA, *PTRACK_DATA;\n\ntypedef struct _CDROM_TOC {\n    UCHAR               Length[2];\n    UCHAR               FirstTrack;\n    UCHAR               LastTrack;\n    TRACK_DATA TrackData[MAXIMUM_NUMBER_TRACKS];\n} CDROM_TOC, *PCDROM_TOC;\n\n#define CDROM_TOC_SIZE sizeof(CDROM_TOC)\n\ntypedef struct _CDROM_PLAY_AUDIO_MSF {\n    UCHAR               StartingM;\n    UCHAR               StartingS;\n    UCHAR               StartingF;\n    UCHAR               EndingM;\n    UCHAR               EndingS;\n    UCHAR               EndingF;\n} CDROM_PLAY_AUDIO_MSF, *PCDROM_PLAY_AUDIO_MSF;\n\ntypedef struct _CDROM_SEEK_AUDIO_MSF {\n    UCHAR               M;\n    UCHAR               S;\n    UCHAR               F;\n} CDROM_SEEK_AUDIO_MSF, *PCDROM_SEEK_AUDIO_MSF;\n\ntypedef struct _CDROM_DISK_DATA {\n    ULONG               DiskData;\n} CDROM_DISK_DATA, *PCDROM_DISK_DATA;\n\n#define CDROM_DISK_AUDIO_TRACK      (0x00000001)\n#define CDROM_DISK_DATA_TRACK       (0x00000002)\n\n#define IOCTL_CDROM_SUB_Q_CHANNEL    0x00\n#define IOCTL_CDROM_CURRENT_POSITION 0x01\n#define IOCTL_CDROM_MEDIA_CATALOG    0x02\n#define IOCTL_CDROM_TRACK_ISRC       0x03\n\ntypedef struct _CDROM_SUB_Q_DATA_FORMAT {\n    UCHAR               Format;\n    UCHAR               Track;\n} CDROM_SUB_Q_DATA_FORMAT, *PCDROM_SUB_Q_DATA_FORMAT;\n\ntypedef struct _SUB_Q_HEADER {\n    UCHAR               Reserved;\n    UCHAR               AudioStatus;\n    UCHAR               DataLength[2];\n} SUB_Q_HEADER, *PSUB_Q_HEADER;\n\ntypedef struct _SUB_Q_CURRENT_POSITION {\n    SUB_Q_HEADER        Header;\n    UCHAR               FormatCode;\n    UCHAR               Control : 4;\n    UCHAR               ADR : 4;\n    UCHAR               TrackNumber;\n    UCHAR               IndexNumber;\n    UCHAR               AbsoluteAddress[4];\n    UCHAR               TrackRelativeAddress[4];\n} SUB_Q_CURRENT_POSITION, *PSUB_Q_CURRENT_POSITION;\n\ntypedef struct _SUB_Q_MEDIA_CATALOG_NUMBER {\n    SUB_Q_HEADER        Header;\n    UCHAR               FormatCode;\n    UCHAR               Reserved[3];\n    UCHAR               Reserved1 : 7;\n    UCHAR               Mcval : 1;\n    UCHAR               MediaCatalog[15];\n} SUB_Q_MEDIA_CATALOG_NUMBER, *PSUB_Q_MEDIA_CATALOG_NUMBER;\n\ntypedef struct _SUB_Q_TRACK_ISRC {\n    SUB_Q_HEADER        Header;\n    UCHAR               FormatCode;\n    UCHAR               Reserved0;\n    UCHAR               Track;\n    UCHAR               Reserved1;\n    UCHAR               Reserved2 : 7;\n    UCHAR               Tcval : 1;\n    UCHAR               TrackIsrc[15];\n} SUB_Q_TRACK_ISRC, *PSUB_Q_TRACK_ISRC;\n\ntypedef union _SUB_Q_CHANNEL_DATA {\n    SUB_Q_CURRENT_POSITION      CurrentPosition;\n    SUB_Q_MEDIA_CATALOG_NUMBER  MediaCatalog;\n    SUB_Q_TRACK_ISRC            TrackIsrc;\n} SUB_Q_CHANNEL_DATA, *PSUB_Q_CHANNEL_DATA;\n\n#define AUDIO_STATUS_NOT_SUPPORTED      0x00\n#define AUDIO_STATUS_IN_PROGRESS        0x11\n#define AUDIO_STATUS_PAUSED             0x12\n#define AUDIO_STATUS_PLAY_COMPLETE      0x13\n#define AUDIO_STATUS_PLAY_ERROR         0x14\n#define AUDIO_STATUS_NO_STATUS          0x15\n\n#define ADR_NO_MODE_INFORMATION         0x0\n#define ADR_ENCODES_CURRENT_POSITION    0x1\n#define ADR_ENCODES_MEDIA_CATALOG       0x2\n#define ADR_ENCODES_ISRC                0x3\n\n#define AUDIO_WITH_PREEMPHASIS          0x0\n#define DIGITAL_COPY_PERMITTED          0x2\n#define AUDIO_DATA_TRACK                0x4\n#define TWO_FOUR_CHANNEL_AUDIO          0x8\n\ntypedef struct _CDROM_AUDIO_CONTROL {\n    UCHAR               LbaFormat;\n    USHORT              LogicalBlocksPerSecond;\n} CDROM_AUDIO_CONTROL, *PCDROM_AUDIO_CONTROL;\n\ntypedef struct _VOLUME_CONTROL {\n    UCHAR               PortVolume[4];\n} VOLUME_CONTROL, *PVOLUME_CONTROL;\n\ntypedef enum _TRACK_MODE_TYPE {\n    YellowMode2,\n    XAForm2,\n    CDDA\n} TRACK_MODE_TYPE, *PTRACK_MODE_TYPE;\n\ntypedef struct __RAW_READ_INFO {\n    LARGE_INTEGER       DiskOffset;\n    ULONG               SectorCount;\n    TRACK_MODE_TYPE     TrackMode;\n} RAW_READ_INFO, *PRAW_READ_INFO;\n\n#endif /* __NTDDCDRM_H */\n"
  },
  {
    "path": "wine/windows/ntddndis.h",
    "content": "/*\n * Copyright 2009 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _NTDDNDIS_\n#define _NTDDNDIS_\n\n#include <ifdef.h>\n#include <devpkey.h>\n/* #include <pciprop.h> */\n\n#ifndef GUID_DEFINED\n# include <guiddef.h>\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define _NDIS_CONTROL_CODE(request, method) \\\n    CTL_CODE(FILE_DEVICE_PHYSICAL_NETCARD, request, method, FILE_ANY_ACCESS)\n\n#define IOCTL_NDIS_QUERY_GLOBAL_STATS    _NDIS_CONTROL_CODE(0, METHOD_OUT_DIRECT)\n#define IOCTL_NDIS_QUERY_ALL_STATS       _NDIS_CONTROL_CODE(1, METHOD_OUT_DIRECT)\n#define IOCTL_NDIS_DO_PNP_OPERATION      _NDIS_CONTROL_CODE(2, METHOD_BUFFERED)\n#define IOCTL_NDIS_QUERY_SELECTED_STATS  _NDIS_CONTROL_CODE(3, METHOD_OUT_DIRECT)\n#define IOCTL_NDIS_ENUMERATE_INTERFACES  _NDIS_CONTROL_CODE(4, METHOD_BUFFERED)\n#define IOCTL_NDIS_ADD_TDI_DEVICE        _NDIS_CONTROL_CODE(5, METHOD_BUFFERED)\n#define IOCTL_NDIS_GET_LOG_DATA          _NDIS_CONTROL_CODE(7, METHOD_OUT_DIRECT)\n#define IOCTL_NDIS_GET_VERSION           _NDIS_CONTROL_CODE(8, METHOD_BUFFERED)\n\n#define IOCTL_NDIS_RESERVED1   _NDIS_CONTROL_CODE(0x09, METHOD_BUFFERED)\n#define IOCTL_NDIS_RESERVED2   _NDIS_CONTROL_CODE(0x0a, METHOD_BUFFERED)\n#define IOCTL_NDIS_RESERVED3   _NDIS_CONTROL_CODE(0x0b, METHOD_BUFFERED)\n#define IOCTL_NDIS_RESERVED4   _NDIS_CONTROL_CODE(0x0c, METHOD_BUFFERED)\n#define IOCTL_NDIS_RESERVED5   CTL_CODE(FILE_DEVICE_PHYSICAL_NETCARD, 0x0d, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_NDIS_RESERVED6   CTL_CODE(FILE_DEVICE_PHYSICAL_NETCARD, 0x0e, METHOD_BUFFERED, FILE_WRITE_ACCESS)\n#define IOCTL_NDIS_RESERVED7   _NDIS_CONTROL_CODE(0x0f, METHOD_OUT_DIRECT)\n#define IOCTL_NDIS_RESERVED8   _NDIS_CONTROL_CODE(0x10, METHOD_BUFFERED)\n#define IOCTL_NDIS_RESERVED9   _NDIS_CONTROL_CODE(0x11, METHOD_BUFFERED)\n#define IOCTL_NDIS_RESERVED10  _NDIS_CONTROL_CODE(0x12, METHOD_BUFFERED)\n#define IOCTL_NDIS_RESERVED11  _NDIS_CONTROL_CODE(0x13, METHOD_BUFFERED)\n#define IOCTL_NDIS_RESERVED12  _NDIS_CONTROL_CODE(0x14, METHOD_BUFFERED)\n#define IOCTL_NDIS_RESERVED13  _NDIS_CONTROL_CODE(0x15, METHOD_BUFFERED)\n\n#define OID_GEN_SUPPORTED_LIST              0x00010101\n#define OID_GEN_HARDWARE_STATUS             0x00010102\n#define OID_GEN_MEDIA_SUPPORTED             0x00010103\n#define OID_GEN_MEDIA_IN_USE                0x00010104\n#define OID_GEN_MAXIMUM_LOOKAHEAD           0x00010105\n#define OID_GEN_MAXIMUM_FRAME_SIZE          0x00010106\n#define OID_GEN_LINK_SPEED                  0x00010107\n#define OID_GEN_TRANSMIT_BUFFER_SPACE       0x00010108\n#define OID_GEN_RECEIVE_BUFFER_SPACE        0x00010109\n#define OID_GEN_TRANSMIT_BLOCK_SIZE         0x0001010a\n#define OID_GEN_RECEIVE_BLOCK_SIZE          0x0001010b\n#define OID_GEN_VENDOR_ID                   0x0001010c\n#define OID_GEN_VENDOR_DESCRIPTION          0x0001010d\n#define OID_GEN_CURRENT_PACKET_FILTER       0x0001010e\n#define OID_GEN_CURRENT_LOOKAHEAD           0x0001010f\n#define OID_GEN_DRIVER_VERSION              0x00010110\n#define OID_GEN_MAXIMUM_TOTAL_SIZE          0x00010111\n#define OID_GEN_PROTOCOL_OPTIONS            0x00010112\n#define OID_GEN_MAC_OPTIONS                 0x00010113\n#define OID_GEN_MEDIA_CONNECT_STATUS        0x00010114\n#define OID_GEN_MAXIMUM_SEND_PACKETS        0x00010115\n\n#define OID_802_3_PERMANENT_ADDRESS         0x01010101\n#define OID_802_3_CURRENT_ADDRESS           0x01010102\n#define OID_802_3_MULTICAST_LIST            0x01010103\n#define OID_802_3_MAXIMUM_LIST_SIZE         0x01010104\n#define OID_802_3_MAC_OPTIONS               0x01010105\n#define OID_802_3_RCV_ERROR_ALIGNMENT       0x01020101\n#define OID_802_3_XMIT_ONE_COLLISION        0x01020102\n#define OID_802_3_XMIT_MORE_COLLISIONS      0x01020103\n#define OID_802_3_XMIT_DEFERRED             0x01020201\n#define OID_802_3_XMIT_MAX_COLLISIONS       0x01020202\n#define OID_802_3_RCV_OVERRUN               0x01020203\n#define OID_802_3_XMIT_UNDERRUN             0x01020204\n#define OID_802_3_XMIT_HEARTBEAT_FAILURE    0x01020205\n#define OID_802_3_XMIT_TIMES_CRS_LOST       0x01020206\n#define OID_802_3_XMIT_LATE_COLLISIONS      0x01020207\n#define OID_802_3_ADD_MULTICAST_ADDRESS     0x01010208\n#define OID_802_3_DELETE_MULTICAST_ADDRESS  0x01010209\n\n#define OID_802_5_PERMANENT_ADDRESS         0x02010101\n#define OID_802_5_CURRENT_ADDRESS           0x02010102\n#define OID_802_5_CURRENT_FUNCTIONAL        0x02010103\n#define OID_802_5_CURRENT_GROUP             0x02010104\n#define OID_802_5_LAST_OPEN_STATUS          0x02010105\n#define OID_802_5_CURRENT_RING_STATUS       0x02010106\n#define OID_802_5_CURRENT_RING_STATE        0x02010107\n#define OID_802_5_LINE_ERRORS               0x02020101\n#define OID_802_5_LOST_FRAMES               0x02020102\n#define OID_802_5_BURST_ERRORS              0x02020201\n#define OID_802_5_AC_ERRORS                 0x02020202\n#define OID_802_5_ABORT_DELIMETERS          0x02020203\n#define OID_802_5_FRAME_COPIED_ERRORS       0x02020204\n#define OID_802_5_FREQUENCY_ERRORS          0x02020205\n#define OID_802_5_TOKEN_ERRORS              0x02020206\n#define OID_802_5_INTERNAL_ERRORS           0x02020207\n\n#define OID_802_11_BSSID                    0x0d010101\n#define OID_802_11_SSID                     0x0d010102\n#define OID_802_11_NETWORK_TYPES_SUPPORTED  0x0d010203\n#define OID_802_11_NETWORK_TYPE_IN_USE      0x0d010204\n#define OID_802_11_TX_POWER_LEVEL           0x0d010205\n#define OID_802_11_RSSI                     0x0d010206\n#define OID_802_11_RSSI_TRIGGER             0x0d010207\n#define OID_802_11_INFRASTRUCTURE_MODE      0x0d010108\n#define OID_802_11_FRAGMENTATION_THRESHOLD  0x0d010209\n#define OID_802_11_RTS_THRESHOLD            0x0d01020a\n#define OID_802_11_NUMBER_OF_ANTENNAS       0x0d01020b\n#define OID_802_11_RX_ANTENNA_SELECTED      0x0d01020c\n#define OID_802_11_TX_ANTENNA_SELECTED      0x0d01020d\n#define OID_802_11_SUPPORTED_RATES          0x0d01020e\n#define OID_802_11_DESIRED_RATES            0x0d010210\n#define OID_802_11_CONFIGURATION            0x0d010211\n#define OID_802_11_STATISTICS               0x0d020212\n#define OID_802_11_ADD_WEP                  0x0d010113\n#define OID_802_11_REMOVE_WEP               0x0d010114\n#define OID_802_11_DISASSOCIATE             0x0d010115\n#define OID_802_11_POWER_MODE               0x0d010216\n#define OID_802_11_BSSID_LIST               0x0d010217\n#define OID_802_11_AUTHENTICATION_MODE      0x0d010118\n#define OID_802_11_PRIVACY_FILTER           0x0d010119\n#define OID_802_11_BSSID_LIST_SCAN          0x0d01011a\n#define OID_802_11_WEP_STATUS               0x0d01011b\n#define OID_802_11_ENCRYPTION_STATUS        OID_802_11_WEP_STATUS\n#define OID_802_11_RELOAD_DEFAULTS          0x0d01011c\n#define OID_802_11_ADD_KEY                  0x0d01011d\n#define OID_802_11_REMOVE_KEY               0x0d01011e\n#define OID_802_11_ASSOCIATION_INFORMATION  0x0d01011f\n#define OID_802_11_TEST                     0x0d010120\n#define OID_802_11_MEDIA_STREAM_MODE        0x0d010121\n#define OID_802_11_CAPABILITY               0x0d010122\n#define OID_802_11_PMKID                    0x0d010123\n#define OID_802_11_NON_BCAST_SSID_LIST      0x0d010124\n#define OID_802_11_RADIO_STATUS             0x0d010125\n\n#define NDIS_802_11_LENGTH_SSID      32\n#define NDIS_802_11_LENGTH_RATES     8\n#define NDIS_802_11_LENGTH_RATES_EX  16\n\ntypedef LONG NDIS_802_11_RSSI;\n\ntypedef struct _NDIS_802_11_CONFIGURATION_FH {\n    ULONG Length;\n    ULONG HopPattern;\n    ULONG HopSet;\n    ULONG DwellTime;\n} NDIS_802_11_CONFIGURATION_FH, *PNDIS_802_11_CONFIGURATION_FH;\n\ntypedef struct _NDIS_802_11_CONFIGURATION {\n    ULONG Length;\n    ULONG BeaconPeriod;\n    ULONG ATIMWindow;\n    ULONG DSConfig;\n    NDIS_802_11_CONFIGURATION_FH FHConfig;\n} NDIS_802_11_CONFIGURATION, *PNDIS_802_11_CONFIGURATION;\n\ntypedef UCHAR NDIS_802_11_MAC_ADDRESS[6];\n\ntypedef enum _NDIS_802_11_NETWORK_INFRASTRUCTURE {\n    Ndis802_11IBSS,\n    Ndis802_11Infrastructure,\n    Ndis802_11AutoUnknown,\n    Ndis802_11InfrastructureMax\n} NDIS_802_11_NETWORK_INFRASTRUCTURE, *PNDIS_802_11_NETWORK_INFRASTRUCTURE;\n\ntypedef enum _NDIS_802_11_NETWORK_TYPE {\n    Ndis802_11FH,\n    Ndis802_11DS,\n    Ndis802_11OFDM5,\n    Ndis802_11OFDM24,\n    Ndis802_11Automode,\n    Ndis802_11NetworkTypeMax\n} NDIS_802_11_NETWORK_TYPE, *PNDIS_802_11_NETWORK_TYPE;\n\ntypedef UCHAR NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES];\ntypedef UCHAR NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX];\n\ntypedef struct _NDIS_802_11_SSID {\n    ULONG SsidLength;\n    UCHAR Ssid[NDIS_802_11_LENGTH_SSID];\n} NDIS_802_11_SSID, *PNDIS_802_11_SSID;\n\ntypedef struct _NDIS_WLAN_BSSID {\n    ULONG                               Length;\n    NDIS_802_11_MAC_ADDRESS             MacAddress;\n    UCHAR                               Reserved[2];\n    NDIS_802_11_SSID                    Ssid;\n    ULONG                               Privacy;\n    NDIS_802_11_RSSI                    Rssi;\n    NDIS_802_11_NETWORK_TYPE            NetworkTypeInUse;\n    NDIS_802_11_CONFIGURATION           Configuration;\n    NDIS_802_11_NETWORK_INFRASTRUCTURE  InfrastructureMode;\n    NDIS_802_11_RATES                   SupportedRates;\n} NDIS_WLAN_BSSID, *PNDIS_WLAN_BSSID;\n\ntypedef struct _NDIS_802_11_BSSID_LIST {\n    ULONG NumberOfItems;\n    NDIS_WLAN_BSSID Bssid[1];\n} NDIS_802_11_BSSID_LIST, *PNDIS_802_11_BSSID_LIST;\n\n#ifndef _NDIS_\ntypedef int NDIS_STATUS, *PNDIS_STATUS;\n#endif\n\ntypedef enum _NDIS_MEDIUM\n{\n    NdisMedium802_3,\n    NdisMedium802_5,\n    NdisMediumFddi,\n    NdisMediumWan,\n    NdisMediumLocalTalk,\n    NdisMediumDix,\n    NdisMediumArcnetRaw,\n    NdisMediumArcnet878_2,\n    NdisMediumAtm,\n    NdisMediumWirelessWan,\n    NdisMediumIrda,\n    NdisMediumBpc,\n    NdisMediumCoWan,\n    NdisMedium1394,\n    NdisMediumInfiniBand,\n    NdisMediumTunnel,\n    NdisMediumNative802_11,\n    NdisMediumLoopback,\n    NdisMediumWiMAX,\n    NdisMediumIP,\n    NdisMediumMax\n} NDIS_MEDIUM, *PNDIS_MEDIUM;\n\ntypedef enum _NDIS_PHYSICAL_MEDIUM\n{\n    NdisPhysicalMediumUnspecified,\n    NdisPhysicalMediumWirelessLan,\n    NdisPhysicalMediumCableModem,\n    NdisPhysicalMediumPhoneLine,\n    NdisPhysicalMediumPowerLine,\n    NdisPhysicalMediumDSL,\n    NdisPhysicalMediumFibreChannel,\n    NdisPhysicalMedium1394,\n    NdisPhysicalMediumWirelessWan,\n    NdisPhysicalMediumNative802_11,\n    NdisPhysicalMediumBluetooth,\n    NdisPhysicalMediumInfiniband,\n    NdisPhysicalMediumWiMax,\n    NdisPhysicalMediumUWB,\n    NdisPhysicalMedium802_3,\n    NdisPhysicalMedium802_5,\n    NdisPhysicalMediumIrda,\n    NdisPhysicalMediumWiredWAN,\n    NdisPhysicalMediumWiredCoWan,\n    NdisPhysicalMediumOther,\n    NdisPhysicalMediumMax\n} NDIS_PHYSICAL_MEDIUM, *PNDIS_PHYSICAL_MEDIUM;\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _NTDDNDIS_ */\n"
  },
  {
    "path": "wine/windows/ntddscsi.h",
    "content": "/*\n * Definitions for scsi media access\n *\n * Copyright (C) 2002 Laurent Pinchart\n * Copyright 2005 Ivan Leo Puoti\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _NTDDSCSI_H_\n#define _NTDDSCSI_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define IOCTL_SCSI_BASE FILE_DEVICE_CONTROLLER\n\n#define IOCTL_SCSI_PASS_THROUGH         CTL_CODE(IOCTL_SCSI_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)\n#define IOCTL_SCSI_MINIPORT             CTL_CODE(IOCTL_SCSI_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)\n#define IOCTL_SCSI_GET_INQUIRY_DATA     CTL_CODE(IOCTL_SCSI_BASE, 0x0403, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_SCSI_GET_CAPABILITIES     CTL_CODE(IOCTL_SCSI_BASE, 0x0404, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_SCSI_PASS_THROUGH_DIRECT  CTL_CODE(IOCTL_SCSI_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)\n#define IOCTL_SCSI_GET_ADDRESS          CTL_CODE(IOCTL_SCSI_BASE, 0x0406, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_SCSI_RESCAN_BUS           CTL_CODE(IOCTL_SCSI_BASE, 0x0407, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_SCSI_GET_DUMP_POINTERS    CTL_CODE(IOCTL_SCSI_BASE, 0x0408, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_SCSI_FREE_DUMP_POINTERS   CTL_CODE(IOCTL_SCSI_BASE, 0x0409, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_IDE_PASS_THROUGH          CTL_CODE(IOCTL_SCSI_BASE, 0x040a, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)\n#define IOCTL_ATA_PASS_THROUGH          CTL_CODE(IOCTL_SCSI_BASE, 0x040b, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)\n#define IOCTL_ATA_PASS_THROUGH_DIRECT   CTL_CODE(IOCTL_SCSI_BASE, 0x040c, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)\n\n#define SCSI_IOCTL_DATA_OUT             0\n#define SCSI_IOCTL_DATA_IN              1\n#define SCSI_IOCTL_DATA_UNSPECIFIED     2\n\ntypedef struct _SCSI_PASS_THROUGH {\n    USHORT       Length;\n    UCHAR        ScsiStatus;\n    UCHAR        PathId;\n    UCHAR        TargetId;\n    UCHAR        Lun;\n    UCHAR        CdbLength;\n    UCHAR        SenseInfoLength;\n    UCHAR        DataIn;\n    ULONG        DataTransferLength;\n    ULONG        TimeOutValue;\n    ULONG_PTR    DataBufferOffset;\n    ULONG        SenseInfoOffset;\n    UCHAR        Cdb[16];\n} SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH;\n\ntypedef struct _SCSI_PASS_THROUGH_DIRECT {\n    USHORT       Length;\n    UCHAR        ScsiStatus;\n    UCHAR        PathId;\n    UCHAR        TargetId;\n    UCHAR        Lun;\n    UCHAR        CdbLength;\n    UCHAR        SenseInfoLength;\n    UCHAR        DataIn;\n    ULONG        DataTransferLength;\n    ULONG        TimeOutValue;\n    PVOID        DataBuffer;\n    ULONG        SenseInfoOffset;\n    UCHAR        Cdb[16];\n} SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT;\n\ntypedef struct _SCSI_ADDRESS {\n    ULONG        Length;\n    UCHAR        PortNumber;\n    UCHAR        PathId;\n    UCHAR        TargetId;\n    UCHAR        Lun;\n} SCSI_ADDRESS, *PSCSI_ADDRESS;\n\ntypedef struct _IO_SCSI_CAPABILITIES {\n    ULONG       Length;\n    ULONG       MaximumTransferLength;\n    ULONG       MaximumPhysicalPages;\n    ULONG       SupportedAsynchronousEvents;\n    ULONG       AlignmentMask;\n    BOOLEAN     TaggedQueuing;\n    BOOLEAN     AdapterScansDown;\n    BOOLEAN     AdapterUsesPio;\n} IO_SCSI_CAPABILITIES, *PIO_SCSI_CAPABILITIES;\n\ntypedef struct _SCSI_BUS_DATA {\n    UCHAR NumberOfLogicalUnits;\n    UCHAR InitiatorBusId;\n    ULONG InquiryDataOffset;\n} SCSI_BUS_DATA, *PSCSI_BUS_DATA;\n\ntypedef struct _SCSI_ADAPTER_BUS_INFO {\n    UCHAR NumberOfBuses;\n    SCSI_BUS_DATA BusData[1];\n} SCSI_ADAPTER_BUS_INFO, *PSCSI_ADAPTER_BUS_INFO;\n\ntypedef struct _SCSI_INQUIRY_DATA {\n    UCHAR PathId;\n    UCHAR TargetId;\n    UCHAR Lun;\n    BOOLEAN DeviceClaimed;\n    ULONG InquiryDataLength;\n    ULONG NextInquiryDataOffset;\n    UCHAR InquiryData[1];\n} SCSI_INQUIRY_DATA, *PSCSI_INQUIRY_DATA;\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _NTDDSCSI_H_ */\n"
  },
  {
    "path": "wine/windows/ntddstor.h",
    "content": "/*\n * DDK definitions for storage media access\n *\n * Copyright (C) 2002 Eric Pouech\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _NTDDSTOR_H_\n#define _NTDDSTOR_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE\n\n#define IOCTL_STORAGE_CHECK_VERIFY      CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_STORAGE_CHECK_VERIFY2     CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_STORAGE_MEDIA_REMOVAL     CTL_CODE(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_STORAGE_EJECT_MEDIA       CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_STORAGE_LOAD_MEDIA        CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_STORAGE_LOAD_MEDIA2       CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_STORAGE_RESERVE           CTL_CODE(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_STORAGE_RELEASE           CTL_CODE(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_STORAGE_FIND_NEW_DEVICES  CTL_CODE(IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_STORAGE_EJECTION_CONTROL  CTL_CODE(IOCTL_STORAGE_BASE, 0x0250, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_STORAGE_MCN_CONTROL       CTL_CODE(IOCTL_STORAGE_BASE, 0x0251, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_STORAGE_GET_MEDIA_TYPES   CTL_CODE(IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_STORAGE_GET_MEDIA_TYPES_EX CTL_CODE(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER CTL_CODE(IOCTL_STORAGE_BASE, 0x0304, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_STORAGE_GET_HOTPLUG_INFO  CTL_CODE(IOCTL_STORAGE_BASE, 0x0305, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_STORAGE_SET_HOTPLUG_INFO  CTL_CODE(IOCTL_STORAGE_BASE, 0x0306, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)\n#define IOCTL_STORAGE_RESET_BUS         CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_STORAGE_RESET_DEVICE      CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_STORAGE_BREAK_RESERVATION CTL_CODE(IOCTL_STORAGE_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_STORAGE_GET_DEVICE_NUMBER CTL_CODE(IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_STORAGE_PREDICT_FAILURE   CTL_CODE(IOCTL_STORAGE_BASE, 0x0440, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_STORAGE_QUERY_PROPERTY    CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS)\n\nDEFINE_GUID(DiskClassGuid,\n  0x53f56307, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);\nDEFINE_GUID(CdRomClassGuid,\n  0x53f56308, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);\nDEFINE_GUID(PartitionClassGuid,\n  0x53f5630a, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);\nDEFINE_GUID(TapeClassGuid,\n  0x53f5630b, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);\nDEFINE_GUID(WriteOnceDiskClassGuid,\n  0x53f5630c, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);\nDEFINE_GUID(VolumeClassGuid,\n  0x53f5630d, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);\nDEFINE_GUID(MediumChangerClassGuid,\n  0x53f56310, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);\nDEFINE_GUID(FloppyClassGuid,\n  0x53f56311, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);\nDEFINE_GUID(CdChangerClassGuid,\n  0x53f56312, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);\nDEFINE_GUID(StroagePortClassGuid,\n  0x2accfe60, 0xc130, 0x11d2, 0xb0, 0x82, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);\n\ntypedef struct _STORAGE_DEVICE_NUMBER {\n    DEVICE_TYPE         DeviceType;\n    ULONG               DeviceNumber;\n    ULONG               PartitionNumber;\n} STORAGE_DEVICE_NUMBER, *PSTORAGE_DEVICE_NUMBER;\n\ntypedef struct _STORAGE_BUS_RESET_REQUEST {\n    UCHAR               PathId;\n} STORAGE_BUS_RESET_REQUEST, *PSTORAGE_BUS_RESET_REQUEST;\n\ntypedef struct _PREVENT_MEDIA_REMOVAL {\n    BOOLEAN             PreventMediaRemoval;\n} PREVENT_MEDIA_REMOVAL, *PPREVENT_MEDIA_REMOVAL;\n\ntypedef struct _TAPE_STATISTICS {\n    ULONG               Version;\n    ULONG               Flags;\n    LARGE_INTEGER       RecoveredWrites;\n    LARGE_INTEGER       UnrecoveredWrites;\n    LARGE_INTEGER       RecoveredReads;\n    LARGE_INTEGER       UnrecoveredReads;\n    UCHAR               CompressionRatioReads;\n    UCHAR               CompressionRatioWrites;\n} TAPE_STATISTICS, *PTAPE_STATISTICS;\n\n#define RECOVERED_WRITES_VALID          0x00000001\n#define UNRECOVERED_WRITES_VALID        0x00000002\n#define RECOVERED_READS_VALID           0x00000004\n#define UNRECOVERED_READS_VALID         0x00000008\n#define WRITE_COMPRESSION_INFO_VALID    0x00000010\n#define READ_COMPRESSION_INFO_VALID     0x00000020\n\ntypedef struct _TAPE_GET_STATISTICS {\n    ULONG               Operation;\n} TAPE_GET_STATISTICS, *PTAPE_GET_STATISTICS;\n\n#define TAPE_RETURN_STATISTICS          __MSABI_LONG(0)\n#define TAPE_RETURN_ENV_INFO            __MSABI_LONG(1)\n#define TAPE_RESET_STATISTICS           __MSABI_LONG(2)\n\ntypedef enum _STORAGE_MEDIA_TYPE {\n    /* see also defines in ntdddisk.h */\n\n    DDS_4mm = 0x20,\n    MiniQic,\n    Travan,\n    QIC,\n    MP_8mm,\n    AME_8mm,\n    AIT1_8mm,\n    DLT,\n    NCTP,\n    IBM_3480,\n    IBM_3490E,\n    IBM_Magstar_3590,\n    IBM_Magstar_MP,\n    STK_DATA_D3,\n    SONY_DTF,\n    DV_6mm,\n    DMI,\n    SONY_D2,\n    CLEANER_CARTRIDGE,\n    CD_ROM,\n    CD_R,\n    CD_RW,\n    DVD_ROM,\n    DVD_R,\n    DVD_RW,\n    MO_3_RW,\n    MO_5_WO,\n    MO_5_RW,\n    MO_5_LIMDOW,\n    PC_5_WO,\n    PC_5_RW,\n    PD_5_RW,\n    ABL_5_WO,\n    PINNACLE_APEX_5_RW,\n    SONY_12_WO,\n    PHILIPS_12_WO,\n    HITACHI_12_WO,\n    CYGNET_12_WO,\n    KODAK_14_WO,\n    MO_NFR_525,\n    NIKON_12_RW,\n    IOMEGA_ZIP,\n    IOMEGA_JAZ,\n    SYQUEST_EZ135,\n    SYQUEST_EZFLYER,\n    SYQUEST_SYJET,\n    AVATAR_F2,\n    MP2_8mm\n} STORAGE_MEDIA_TYPE, *PSTORAGE_MEDIA_TYPE;\n\n#define MEDIA_ERASEABLE         0x00000001\n#define MEDIA_WRITE_ONCE        0x00000002\n#define MEDIA_READ_ONLY         0x00000004\n#define MEDIA_READ_WRITE        0x00000008\n#define MEDIA_WRITE_PROTECTED   0x00000100\n#define MEDIA_CURRENTLY_MOUNTED 0x80000000\n\ntypedef struct _DEVICE_MEDIA_INFO {\n    union {\n        struct {\n            LARGE_INTEGER       Cylinders;\n            STORAGE_MEDIA_TYPE  MediaType;\n            ULONG               TracksPerCylinder;\n            ULONG               SectorsPerTrack;\n            ULONG               BytesPerSector;\n            ULONG               NumberMediaSides;\n            ULONG               MediaCharacteristics;\n        } DiskInfo;\n        struct {\n            LARGE_INTEGER       Cylinders;\n            STORAGE_MEDIA_TYPE  MediaType;\n            ULONG               TracksPerCylinder;\n            ULONG               SectorsPerTrack;\n            ULONG               BytesPerSector;\n            ULONG               NumberMediaSides;\n            ULONG               MediaCharacteristics;\n        } RemovableDiskInfo;\n        struct {\n            STORAGE_MEDIA_TYPE  MediaType;\n            ULONG               MediaCharacteristics;\n            ULONG               CurrentBlockSize;\n        } TapeInfo;\n    } DeviceSpecific;\n} DEVICE_MEDIA_INFO, *PDEVICE_MEDIA_INFO;\n\ntypedef struct _GET_MEDIA_TYPES {\n    ULONG               DeviceType;\n    ULONG               MediaInfoCount;\n    DEVICE_MEDIA_INFO   MediaInfo[1];\n} GET_MEDIA_TYPES, *PGET_MEDIA_TYPES;\n\ntypedef enum _STORAGE_QUERY_TYPE {\n    PropertyStandardQuery = 0,\n    PropertyExistsQuery,\n    PropertyMaskQuery,\n    PropertyQueryMaxDefined\n} STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE;\n\ntypedef enum _STORAGE_PROPERTY_ID {\n    StorageDeviceProperty = 0,\n    StorageAdapterProperty\n} STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID;\n\ntypedef struct _STORAGE_PROPERTY_QUERY {\n    STORAGE_PROPERTY_ID         PropertyId;\n    STORAGE_QUERY_TYPE          QueryType;\n    UCHAR                       AdditionalParameters[1];\n} STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY;\n\ntypedef struct _STORAGE_DESCRIPTOR_HEADER {\n    ULONG                       Version;\n    ULONG                       Size;\n} STORAGE_DESCRIPTOR_HEADER, *PSTORAGE_DESCRIPTOR_HEADER;\n\ntypedef enum _STORAGE_BUS_TYPE {\n    BusTypeUnknown = 0x00,\n    BusTypeScsi,\n    BusTypeAtapi,\n    BusTypeAta,\n    BusType1394,\n    BusTypeSsa,\n    BusTypeFibre,\n    BusTypeUsb,\n    BusTypeRAID,\n    BusTypeMaxReserved = 0x7F\n} STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE;\n\ntypedef struct _STORAGE_DEVICE_DESCRIPTOR {\n    ULONG                       Version;\n    ULONG                       Size;\n    UCHAR                       DeviceType;\n    UCHAR                       DeviceTypeModifier;\n    BOOLEAN                     RemovableMedia;\n    BOOLEAN                     CommandQueueing;\n    ULONG                       VendorIdOffset;\n    ULONG                       ProductIdOffset;\n    ULONG                       ProductRevisionOffset;\n    ULONG                       SerialNumberOffset;\n    STORAGE_BUS_TYPE            BusType;\n    ULONG                       RawPropertiesLength;\n    UCHAR                       RawDeviceProperties[1];\n} STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR;\n\ntypedef struct _STORAGE_ADAPTER_DESCRIPTOR {\n    ULONG                       Version;\n    ULONG                       Size;\n    ULONG                       MaximumTransferLength;\n    ULONG                       MaximumPhysicalPages;\n    ULONG                       AlignmentMask;\n    BOOLEAN                     AdapterUsesPio;\n    BOOLEAN                     AdapterScansDown;\n    BOOLEAN                     CommandQueueing;\n    BOOLEAN                     AcceleratedTransfer;\n    BOOLEAN                     BusType;\n    USHORT                      BusMajorVersion;\n    USHORT                      BusMinorVersion;\n} STORAGE_ADAPTER_DESCRIPTOR, *PSTORAGE_ADAPTER_DESCRIPTOR;\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _NTDDSTOR_H_ */\n"
  },
  {
    "path": "wine/windows/ntdef.h",
    "content": "/*\n * Copyright (C) 2015 Austin English\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _NTDEF_\n#define _NTDEF_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef enum _EVENT_TYPE {\n    NotificationEvent,\n    SynchronizationEvent\n} EVENT_TYPE;\n\ntypedef enum _TIMER_TYPE {\n    NotificationTimer,\n    SynchronizationTimer\n} TIMER_TYPE;\n\ntypedef enum _WAIT_TYPE {\n    WaitAll,\n    WaitAny,\n    WaitNotification\n} WAIT_TYPE;\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _NTDEF_ */\n"
  },
  {
    "path": "wine/windows/ntdsapi.h",
    "content": "/*\n * Copyright (C) 2006 Dmitry Timoshkov\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_NTDSAPI_H\n#define __WINE_NTDSAPI_H\n\n/* FIXME: #include <schedule.h> */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nDWORD WINAPI DsClientMakeSpnForTargetServerA(LPCSTR, LPCSTR, DWORD*, LPSTR);\nDWORD WINAPI DsClientMakeSpnForTargetServerW(LPCWSTR, LPCWSTR, DWORD*, LPWSTR);\n#define DsClientMakeSpnForTargetServer WINELIB_NAME_AW(DsClientMakeSpnForTargetServer)\n\nDWORD WINAPI DsMakeSpnA(LPCSTR, LPCSTR, LPCSTR, USHORT, LPCSTR, DWORD*, LPSTR);\nDWORD WINAPI DsMakeSpnW(LPCWSTR, LPCWSTR, LPCWSTR, USHORT, LPCWSTR, DWORD*, LPWSTR);\n#define DsMakeSpn WINELIB_NAME_AW(DsMakeSpn)\n\ntypedef enum\n{\n    DS_NAME_NO_FLAGS              = 0x0,\n    DS_NAME_FLAG_SYNTACTICAL_ONLY = 0x1,\n    DS_NAME_FLAG_EVAL_AT_DC       = 0x2,\n    DS_NAME_FLAG_GCVERIFY         = 0x4,\n    DS_NAME_FLAG_TRUST_REFERRAL   = 0x8\n} DS_NAME_FLAGS;\n\ntypedef enum\n{\n    DS_UNKNOWN_NAME            = 0,\n    DS_FQDN_1779_NAME          = 1,\n    DS_NT4_ACCOUNT_NAME        = 2,\n    DS_DISPLAY_NAME            = 3,\n    DS_UNIQUE_ID_NAME          = 6,\n    DS_CANONICAL_NAME          = 7,\n    DS_USER_PRINCIPAL_NAME     = 8,\n    DS_CANONICAL_NAME_EX       = 9,\n    DS_SERVICE_PRINCIPAL_NAME  = 10,\n    DS_SID_OR_SID_HISTORY_NAME = 11,\n    DS_DNS_DOMAIN_NAME         = 12\n} DS_NAME_FORMAT;\n\ntypedef enum\n{\n    DS_SPN_DNS_HOST    = 0,\n    DS_SPN_DN_HOST     = 1,\n    DS_SPN_NB_HOST     = 2,\n    DS_SPN_DOMAIN      = 3,\n    DS_SPN_NB_DOMAIN   = 4,\n    DS_SPN_SERVICE     = 5\n} DS_SPN_NAME_TYPE;\n\ntypedef enum\n{\n    DS_SPN_ADD_SPN_OP     = 0,\n    DS_SPN_REPLACE_SPN_OP = 1,\n    DS_SPN_DELETE_SPN_OP  = 2\n} DS_SPN_WRITE_OP;\n\ntypedef struct\n{\n    DWORD status;\n    LPSTR pDomain;\n    LPSTR pName;\n} DS_NAME_RESULT_ITEMA, *PDS_NAME_RESULT_ITEMA;\n\ntypedef struct\n{\n    DWORD  status;\n    LPWSTR pDomain;\n    LPWSTR pName;\n} DS_NAME_RESULT_ITEMW, *PDS_NAME_RESULT_ITEMW;\n\nDECL_WINELIB_TYPE_AW(DS_NAME_RESULT_ITEM)\nDECL_WINELIB_TYPE_AW(PDS_NAME_RESULT_ITEM)\n\ntypedef struct\n{\n    DWORD                 cItems;\n    PDS_NAME_RESULT_ITEMA rItems;\n} DS_NAME_RESULTA, *PDS_NAME_RESULTA;\n\ntypedef struct\n{\n    DWORD                 cItems;\n    PDS_NAME_RESULT_ITEMW rItems;\n} DS_NAME_RESULTW, *PDS_NAME_RESULTW;\n\nDECL_WINELIB_TYPE_AW(DS_NAME_RESULT)\nDECL_WINELIB_TYPE_AW(PDS_NAME_RESULT)\n\nDWORD WINAPI DsCrackNamesA(HANDLE handle, DS_NAME_FLAGS flags, DS_NAME_FORMAT offered, DS_NAME_FORMAT desired, DWORD num, const CHAR **names, PDS_NAME_RESULTA *result);\nDWORD WINAPI DsCrackNamesW(HANDLE handle, DS_NAME_FLAGS flags, DS_NAME_FORMAT offered, DS_NAME_FORMAT desired, DWORD num, const WCHAR **names, PDS_NAME_RESULTW *result);\n#define DsCrackNames WINELIB_NAME_AW(DsCrackNames)\nDWORD WINAPI DsServerRegisterSpnA(DS_SPN_WRITE_OP operation, LPCSTR ServiceClass, LPCSTR UserObjectDN);\nDWORD WINAPI DsServerRegisterSpnW(DS_SPN_WRITE_OP operation, LPCWSTR ServiceClass, LPCWSTR UserObjectDN);\n#define DsServerRegisterSpn WINELIB_NAME_AW(DsServerRegisterSpn)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_NTDSAPI_H */\n"
  },
  {
    "path": "wine/windows/ntlsa.h",
    "content": "/*\n * Copyright 2017 Nikolay Sivov\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nNTSTATUS WINAPI LsaLookupPrivilegeDisplayName(LSA_HANDLE policy, LSA_UNICODE_STRING *name,\n    LSA_UNICODE_STRING **display_name, SHORT *language);\nNTSTATUS WINAPI LsaLookupPrivilegeName(LSA_HANDLE policy, LUID *value, LSA_UNICODE_STRING **name);\n"
  },
  {
    "path": "wine/windows/ntquery.h",
    "content": "/*\n * Copyright 2006 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_NTQUERY_H__\n#define __WINE_NTQUERY_H__\n\n#include \"stgprop.h\"\n#include <pshpack4.h>\n\ntypedef struct _CI_STATE\n{\n    DWORD cbStruct;\n    DWORD cWordList;\n    DWORD cPersistentIndex;\n    DWORD cQueries;\n    DWORD cDocuments;\n    DWORD cFreshTest;\n    DWORD dwMergeProgress;\n    DWORD eState;\n    DWORD cFilteredDocuments;\n    DWORD cTotalDocuments;\n    DWORD cPendingScans;\n    DWORD dwIndexSize;\n    DWORD cUniqueKeys;\n    DWORD cSeqQDocuments;\n    DWORD dwPropCacheSize;\n} CI_STATE;\n\n#include <poppack.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nSTDAPI CIState(WCHAR const *, WCHAR const *, CI_STATE *);\nSTDAPI LocateCatalogsA(CHAR const *, ULONG, CHAR *, ULONG *, CHAR *, ULONG *);\nSTDAPI LocateCatalogsW(WCHAR const *, ULONG, WCHAR *, ULONG *, WCHAR *, ULONG *);\n#define LocateCatalogs WINELIB_NAME_AW(LocateCatalogs)\nSTDAPI LoadIFilter(WCHAR const *, IUnknown *, void **);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/ntsecapi.h",
    "content": "/*\n * Copyright (C) 1999 Juergen Schmied\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_NTSECAPI_H\n#define __WINE_NTSECAPI_H\n\n#ifndef GUID_DEFINED\n# include <guiddef.h>\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n/* Policy access rights */\n#define POLICY_VIEW_LOCAL_INFORMATION           __MSABI_LONG(0x00000001)\n#define POLICY_VIEW_AUDIT_INFORMATION           __MSABI_LONG(0x00000002)\n#define POLICY_GET_PRIVATE_INFORMATION          __MSABI_LONG(0x00000004)\n#define POLICY_TRUST_ADMIN                      __MSABI_LONG(0x00000008)\n#define POLICY_CREATE_ACCOUNT                   __MSABI_LONG(0x00000010)\n#define POLICY_CREATE_SECRET                    __MSABI_LONG(0x00000020)\n#define POLICY_CREATE_PRIVILEGE                 __MSABI_LONG(0x00000040)\n#define POLICY_SET_DEFAULT_QUOTA_LIMITS         __MSABI_LONG(0x00000080)\n#define POLICY_SET_AUDIT_REQUIREMENTS           __MSABI_LONG(0x00000100)\n#define POLICY_AUDIT_LOG_ADMIN                  __MSABI_LONG(0x00000200)\n#define POLICY_SERVER_ADMIN                     __MSABI_LONG(0x00000400)\n#define POLICY_LOOKUP_NAMES                     __MSABI_LONG(0x00000800)\n#define POLICY_NOTIFICATION                     __MSABI_LONG(0x00001000)\n\n#define POLICY_ALL_ACCESS                       ( \\\n    STANDARD_RIGHTS_REQUIRED | \\\n    POLICY_VIEW_LOCAL_INFORMATION | \\\n    POLICY_VIEW_AUDIT_INFORMATION | \\\n    POLICY_GET_PRIVATE_INFORMATION | \\\n    POLICY_TRUST_ADMIN | \\\n    POLICY_CREATE_ACCOUNT | \\\n    POLICY_CREATE_SECRET | \\\n    POLICY_CREATE_PRIVILEGE | \\\n    POLICY_SET_DEFAULT_QUOTA_LIMITS | \\\n    POLICY_SET_AUDIT_REQUIREMENTS | \\\n    POLICY_AUDIT_LOG_ADMIN | \\\n    POLICY_SERVER_ADMIN | \\\n    POLICY_LOOKUP_NAMES)\n\n\n#define POLICY_READ                             ( \\\n    STANDARD_RIGHTS_READ | \\\n    POLICY_VIEW_AUDIT_INFORMATION | \\\n    POLICY_GET_PRIVATE_INFORMATION)\n\n#define POLICY_WRITE                            ( \\\n   STANDARD_RIGHTS_WRITE | \\\n   POLICY_TRUST_ADMIN | \\\n   POLICY_CREATE_ACCOUNT | \\\n   POLICY_CREATE_SECRET | \\\n   POLICY_CREATE_PRIVILEGE | \\\n   POLICY_SET_DEFAULT_QUOTA_LIMITS | \\\n   POLICY_SET_AUDIT_REQUIREMENTS | \\\n   POLICY_AUDIT_LOG_ADMIN | \\\n   POLICY_SERVER_ADMIN)\n\n#define POLICY_EXECUTE                          ( \\\n   STANDARD_RIGHTS_EXECUTE | \\\n   POLICY_VIEW_LOCAL_INFORMATION | \\\n   POLICY_LOOKUP_NAMES)\n\n#define POLICY_AUDIT_EVENT_UNCHANGED __MSABI_LONG(0x00000000)\n#define POLICY_AUDIT_EVENT_SUCCESS   __MSABI_LONG(0x00000001)\n#define POLICY_AUDIT_EVENT_FAILURE   __MSABI_LONG(0x00000002)\n#define POLICY_AUDIT_EVENT_NONE      __MSABI_LONG(0x00000004)\n\n#define POLICY_AUDIT_EVENT_MASK (POLICY_AUDIT_EVENT_SUCCESS | \\\n                                 POLICY_AUDIT_EVENT_FAILURE | \\\n                                 POLICY_AUDIT_EVENT_NONE)\n\n/* logon rights names */\n#define SE_BATCH_LOGON_NAME \\\n TEXT(\"SeBatchLogonRight\")\n#define SE_INTERACTIVE_LOGON_NAME \\\n TEXT(\"SeInteractiveLogonRight\")\n#define SE_NETWORK_LOGON_NAME \\\n TEXT(\"SeNetworkLogonRight\")\n#define SE_REMOTE_INTERACTIVE_LOGON_NAME \\\n TEXT(\"SeRemoteInteractiveLogonRight\")\n#define SE_SERVICE_LOGON_NAME \\\n TEXT(\"SeServiceLogonRight\")\n#define SE_DENY_BATCH_LOGON_NAME \\\n TEXT(\"SeDenyBatchLogonRight\")\n#define SE_DENY_INTERACTIVE_LOGON_NAME \\\n TEXT(\"SeDenyInteractiveLogonRight\")\n#define SE_DENY_NETWORK_LOGON_NAME \\\n TEXT(\"SeDenyNetworkLogonRight\")\n#define SE_DENY_REMOTE_INTERACTIVE_LOGON_NAME \\\n TEXT(\"SeDenyRemoteInteractiveLogonRight\")\n#define SE_DENY_SERVICE_LOGON_NAME \\\n TEXT(\"SeDenyServiceLogonRight\")\n\n#ifndef WINE_NTSTATUS_DECLARED\n#define WINE_NTSTATUS_DECLARED\ntypedef LONG NTSTATUS;\n#endif\n#ifndef WINE_PNTSTATUS_DECLARED\n#define WINE_PNTSTATUS_DECLARED\ntypedef NTSTATUS *PNTSTATUS;\n#endif\n\ntypedef enum _SECURITY_LOGON_TYPE\n{\n    Interactive = 2,\n    Network,\n    Batch,\n    Service,\n    Proxy\n} SECURITY_LOGON_TYPE, *PSECURITY_LOGON_TYPE;\n\ntypedef enum _POLICY_AUDIT_EVENT_TYPE\n{\n    AuditCategorySystem,\n    AuditCategoryLogon,\n    AuditCategoryObjectAccess,\n    AuditCategoryPrivilegeUse,\n    AuditCategoryDetailedTracking,\n    AuditCategoryPolicyChange,\n    AuditCategoryAccountManagement\n} POLICY_AUDIT_EVENT_TYPE, *PPOLICY_AUDIT_EVENT_TYPE;\n\n#ifndef __STRING_DEFINED__\n#define __STRING_DEFINED__\ntypedef struct _STRING {\n  USHORT Length;\n  USHORT MaximumLength;\n  PCHAR Buffer;\n} STRING, *PSTRING;\n#endif\n\n#ifndef __UNICODE_STRING_DEFINED__\n#define __UNICODE_STRING_DEFINED__\ntypedef struct _UNICODE_STRING {\n  USHORT Length;        /* bytes */\n  USHORT MaximumLength; /* bytes */\n  PWSTR  Buffer;\n} UNICODE_STRING, *PUNICODE_STRING;\n#endif\n\n#ifndef __OBJECT_ATTRIBUTES_DEFINED__\n#define __OBJECT_ATTRIBUTES_DEFINED__\ntypedef struct _OBJECT_ATTRIBUTES {\n  ULONG Length;\n  HANDLE RootDirectory;\n  PUNICODE_STRING ObjectName;\n  ULONG Attributes;\n  PVOID SecurityDescriptor;       /* type SECURITY_DESCRIPTOR */\n  PVOID SecurityQualityOfService; /* type SECURITY_QUALITY_OF_SERVICE */\n} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;\n#endif\n\n#ifndef __SECHANDLE_DEFINED__\n#define __SECHANDLE_DEFINED__\ntypedef struct _SecHandle\n{\n    ULONG_PTR dwLower;\n    ULONG_PTR dwUpper;\n} SecHandle, *PSecHandle;\n#endif\n\ntypedef UNICODE_STRING LSA_UNICODE_STRING, *PLSA_UNICODE_STRING;\ntypedef STRING LSA_STRING, *PLSA_STRING;\ntypedef OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES, *PLSA_OBJECT_ATTRIBUTES;\n\ntypedef PVOID LSA_HANDLE, *PLSA_HANDLE;\ntypedef ULONG LSA_ENUMERATION_HANDLE, *PLSA_ENUMERATION_HANDLE;\ntypedef ULONG LSA_OPERATIONAL_MODE, *PLSA_OPERATIONAL_MODE;\n\ntypedef enum\n{\n\tPolicyAuditLogInformation = 1,\n\tPolicyAuditEventsInformation,\n\tPolicyPrimaryDomainInformation,\n\tPolicyPdAccountInformation,\n\tPolicyAccountDomainInformation,\n\tPolicyLsaServerRoleInformation,\n\tPolicyReplicaSourceInformation,\n\tPolicyDefaultQuotaInformation,\n\tPolicyModificationInformation,\n\tPolicyAuditFullSetInformation,\n\tPolicyAuditFullQueryInformation,\n\tPolicyDnsDomainInformation\n} POLICY_INFORMATION_CLASS, *PPOLICY_INFORMATION_CLASS;\n\ntypedef ULONG POLICY_AUDIT_EVENT_OPTIONS, *PPOLICY_AUDIT_EVENT_OPTIONS;\n\ntypedef struct _POLICY_AUDIT_EVENTS_INFO\n{\n\tBOOLEAN AuditingMode;\n\tPPOLICY_AUDIT_EVENT_OPTIONS EventAuditingOptions;\n\tULONG MaximumAuditEventCount;\n} POLICY_AUDIT_EVENTS_INFO, *PPOLICY_AUDIT_EVENTS_INFO;\n\ntypedef struct _POLICY_PRIMARY_DOMAIN_INFO\n{\n    LSA_UNICODE_STRING Name;\n    PSID Sid;\n} POLICY_PRIMARY_DOMAIN_INFO, *PPOLICY_PRIMARY_DOMAIN_INFO;\n\ntypedef struct _POLICY_ACCOUNT_DOMAIN_INFO\n{\n    LSA_UNICODE_STRING DomainName;\n    PSID DomainSid;\n} POLICY_ACCOUNT_DOMAIN_INFO, *PPOLICY_ACCOUNT_DOMAIN_INFO;\n\ntypedef struct _POLICY_DNS_DOMAIN_INFO\n{\n    LSA_UNICODE_STRING Name;\n    LSA_UNICODE_STRING DnsDomainName;\n    LSA_UNICODE_STRING DnsForestName;\n    GUID DomainGuid;\n    PSID Sid;\n} POLICY_DNS_DOMAIN_INFO, *PPOLICY_DNS_DOMAIN_INFO;\n\ntypedef enum _POLICY_LSA_SERVER_ROLE\n{\n    PolicyServerRoleBackup = 2,\n    PolicyServerRolePrimary\n} POLICY_LSA_SERVER_ROLE, *PPOLICY_LSA_SERVER_ROLE;\n\ntypedef struct _POLICY_LSA_SERVER_ROLE_INFO\n{\n    POLICY_LSA_SERVER_ROLE LsaServerRole;\n} POLICY_LSA_SERVER_ROLE_INFO, *PPOLICY_LSA_SERVER_ROLE_INFO;\n\ntypedef struct _POLICY_MODIFICATION_INFO\n{\n    LARGE_INTEGER ModifiedId;\n    LARGE_INTEGER DatabaseCreationTime;\n} POLICY_MODIFICATION_INFO, *PPOLICY_MODIFICATION_INFO;\n\ntypedef struct _SECURITY_LOGON_SESSION_DATA {\n    ULONG Size;\n    LUID LogonId;\n    LSA_UNICODE_STRING UserName;\n    LSA_UNICODE_STRING LogonDomain;\n    LSA_UNICODE_STRING AuthenticationPackage;\n    ULONG LogonType;\n    ULONG Session;\n    PSID Sid;\n    LARGE_INTEGER LogonTime;\n    LSA_UNICODE_STRING LogonServer;\n    LSA_UNICODE_STRING DnsDomainName;\n    LSA_UNICODE_STRING Upn;\n} SECURITY_LOGON_SESSION_DATA, *PSECURITY_LOGON_SESSION_DATA;\n\ntypedef struct\n{\n    SID_NAME_USE Use;\n    LSA_UNICODE_STRING Name;\n    LONG DomainIndex;\n} LSA_TRANSLATED_NAME, *PLSA_TRANSLATED_NAME;\n\ntypedef struct\n{\n    LSA_UNICODE_STRING Name;\n    PSID Sid;\n} LSA_TRUST_INFORMATION, *PLSA_TRUST_INFORMATION;\n\ntypedef struct\n{\n    ULONG Entries;\n    PLSA_TRUST_INFORMATION Domains;\n} LSA_REFERENCED_DOMAIN_LIST, *PLSA_REFERENCED_DOMAIN_LIST;\n\ntypedef struct _LSA_TRANSLATED_SID\n{\n    SID_NAME_USE Use;\n    ULONG RelativeId;\n    LONG DomainIndex;\n} LSA_TRANSLATED_SID, *PLSA_TRANSLATED_SID;\n\ntypedef struct _TRUSTED_DOMAIN_INFORMATION_EX\n{\n    LSA_UNICODE_STRING Name;\n    LSA_UNICODE_STRING FlatName;\n    PSID Sid;\n    ULONG TrustDirection;\n    ULONG TrustType;\n    ULONG TrustAttributes;\n} TRUSTED_DOMAIN_INFORMATION_EX, *PTRUSTED_DOMAIN_INFORMATION_EX;\n\ntypedef struct _LSA_AUTH_INFORMATION\n{\n    LARGE_INTEGER LastUpdateTime;\n    ULONG AuthType;\n    ULONG AuthInfoLength;\n    PUCHAR AuthInfo;\n} LSA_AUTH_INFORMATION, *PLSA_AUTH_INFORMATION;\n\ntypedef struct _TRUSTED_DOMAIN_AUTH_INFORMATION\n{\n    ULONG IncomingAuthInfos;\n    PLSA_AUTH_INFORMATION IncomingAuthenticationInformation;\n    PLSA_AUTH_INFORMATION IncomingPreviousAuthenticationInformation;\n    ULONG OutgoingAuthInfos;\n    PLSA_AUTH_INFORMATION OutgoingAuthenticationInformation;\n    PLSA_AUTH_INFORMATION OutgoingPreviousAuthenticationInformation;\n} TRUSTED_DOMAIN_AUTH_INFORMATION, *PTRUSTED_DOMAIN_AUTH_INFORMATION;\n\ntypedef struct _LSA_TRANSLATED_SID2\n{\n    SID_NAME_USE Use;\n    PSID Sid;\n    LONG DomainIndex;\n    ULONG Flags;\n} LSA_TRANSLATED_SID2, *PLSA_TRANSLATED_SID2;\n\ntypedef enum _TRUSTED_INFORMATION_CLASS\n{\n    TrustedDomainNameInformation = 1,\n    TrustedControllersInformation,\n    TrustedPosixOffsetInformation,\n    TrustedPasswordInformation,\n    TrustedDomainInformationBasic,\n    TrustedDomainInformationEx,\n    TrustedDomainAuthInformation,\n    TrustedDomainFullInformation\n} TRUSTED_INFORMATION_CLASS, *PTRUSTED_INFORMATION_CLASS;\n\ntypedef enum _POLICY_NOTIFICATION_INFORMATION_CLASS\n{\n    PolicyNotifyAuditEventsInformation = 1,\n    PolicyNotifyAccountDomainInformation,\n    PolicyNotifyServerRoleInformation,\n    PolicyNotifyDnsDomainInformation,\n    PolicyNotifyDomainEfsInformation,\n    PolicyNotifyDomainKerberosTicketInformation,\n    PolicyNotifyMachineAccountPasswordInformation\n} POLICY_NOTIFICATION_INFORMATION_CLASS, *PPOLICY_NOTIFICATION_INFORMATION_CLASS;\n\n#define MICROSOFT_KERBEROS_NAME_A \"Kerberos\"\n#if defined(_MSC_VER)\n#define MICROSOFT_KERBEROS_NAME_W L\"Kerberos\"\n#elif defined(__GNUC__)\n#define MICROSOFT_KERBEROS_NAME_W (const WCHAR []){ 'K','e','r','b','e','r','o','s',0 }\n#else /* _MSC_VER/__GNUC__ */\nstatic const WCHAR MICROSOFT_KERBEROS_NAME_W[] = { 'K','e','r','b','e','r','o','s',0 };\n#endif\n\n#define KERB_TICKET_FLAGS_reserved          0x80000000\n#define KERB_TICKET_FLAGS_forwardable       0x40000000\n#define KERB_TICKET_FLAGS_forwarded         0x20000000\n#define KERB_TICKET_FLAGS_proxiable         0x10000000\n#define KERB_TICKET_FLAGS_proxy             0x08000000\n#define KERB_TICKET_FLAGS_may_postdate      0x04000000\n#define KERB_TICKET_FLAGS_postdated         0x02000000\n#define KERB_TICKET_FLAGS_invalid           0x01000000\n#define KERB_TICKET_FLAGS_renewable         0x00800000\n#define KERB_TICKET_FLAGS_initial           0x00400000\n#define KERB_TICKET_FLAGS_pre_authent       0x00200000\n#define KERB_TICKET_FLAGS_hw_authent        0x00100000\n#define KERB_TICKET_FLAGS_ok_as_delegate    0x00040000\n#define KERB_TICKET_FLAGS_name_canonicalize 0x00010000\n#define KERB_TICKET_FLAGS_cname_in_pa_data  0x00040000\n#define KERB_TICKET_FLAGS_reserved1         0x00000001\n\ntypedef enum _KERB_PROTOCOL_MESSAGE_TYPE\n{\n    KerbDebugRequestMessage = 0,\n    KerbQueryTicketCacheMessage,\n    KerbChangeMachinePasswordMessage,\n    KerbVerifyPacMessage,\n    KerbRetrieveTicketMessage,\n    KerbUpdateAddressesMessage,\n    KerbPurgeTicketCacheMessage,\n    KerbChangePasswordMessage,\n    KerbRetrieveEncodedTicketMessage,\n    KerbDecryptDataMessage,\n    KerbAddBindingCacheEntryMessage,\n    KerbSetPasswordMessage,\n    KerbSetPasswordExMessage,\n    KerbVerifyCredentialsMessage,\n    KerbQueryTicketCacheExMessage,\n    KerbPurgeTicketCacheExMessage,\n    KerbRefreshSmartcardCredentialsMessage,\n    KerbAddExtraCredentialsMessage,\n    KerbQuerySupplementalCredentialsMessage,\n    KerbTransferCredentialsMessage,\n    KerbQueryTicketCacheEx2Message,\n    KerbSubmitTicketMessage,\n    KerbAddExtraCredentialsExMessage,\n    KerbQueryKdcProxyCacheMessage,\n    KerbPurgeKdcProxyCacheMessage,\n    KerbQueryTicketCacheEx3Message,\n    KerbCleanupMachinePkinitCredsMessage,\n    KerbAddBindingCacheEntryExMessage,\n    KerbQueryBindingCacheMessage,\n    KerbPurgeBindingCacheMessage,\n    KerbQueryDomainExtendedPoliciesMessage,\n    KerbQueryS4U2ProxyCacheMessage\n} KERB_PROTOCOL_MESSAGE_TYPE, *PKERB_PROTOCOL_MESSAGE_TYPE;\n\ntypedef struct _KERB_TICKET_CACHE_INFO\n{\n    UNICODE_STRING ServerName;\n    UNICODE_STRING RealmName;\n    LARGE_INTEGER StartTime;\n    LARGE_INTEGER EndTime;\n    LARGE_INTEGER RenewTime;\n    LONG EncryptionType;\n    ULONG TicketFlags;\n} KERB_TICKET_CACHE_INFO, *PKERB_TICKET_CACHE_INFO;\n\ntypedef struct _KERB_QUERY_TKT_CACHE_REQUEST\n{\n    KERB_PROTOCOL_MESSAGE_TYPE MessageType;\n    LUID LogonId;\n} KERB_QUERY_TKT_CACHE_REQUEST, *PKERB_QUERY_TKT_CACHE_REQUEST;\n\ntypedef struct _KERB_QUERY_TKT_CACHE_RESPONSE\n{\n    KERB_PROTOCOL_MESSAGE_TYPE MessageType;\n    ULONG CountOfTickets;\n    KERB_TICKET_CACHE_INFO Tickets[ANYSIZE_ARRAY];\n} KERB_QUERY_TKT_CACHE_RESPONSE, *PKERB_QUERY_TKT_CACHE_RESPONSE;\n\ntypedef struct _KERB_RETRIEVE_TKT_REQUEST\n{\n    KERB_PROTOCOL_MESSAGE_TYPE MessageType;\n    LUID LogonId;\n    UNICODE_STRING TargetName;\n    ULONG TicketFlags;\n    ULONG CacheOptions;\n    LONG EncryptionType;\n    SecHandle CredentialsHandle;\n} KERB_RETRIEVE_TKT_REQUEST, *PKERB_RETRIEVE_TKT_REQUEST;\n\ntypedef struct _KERB_PURGE_TKT_CACHE_REQUEST\n{\n    KERB_PROTOCOL_MESSAGE_TYPE MessageType;\n    LUID LogonId;\n    UNICODE_STRING ServerName;\n    UNICODE_STRING RealmName;\n} KERB_PURGE_TKT_CACHE_REQUEST, *PKERB_PURGE_TKT_CACHE_REQUEST;\n\n#define RtlGenRandom                    SystemFunction036\n#define RtlEncryptMemory                SystemFunction040\n#define RtlDecryptMemory                SystemFunction041\n\nBOOLEAN WINAPI RtlGenRandom(PVOID,ULONG);\nNTSTATUS WINAPI RtlEncryptMemory(PVOID,ULONG,ULONG);\nNTSTATUS WINAPI RtlDecryptMemory(PVOID,ULONG,ULONG);\n\nNTSTATUS WINAPI LsaAddAccountRights(LSA_HANDLE,PSID,PLSA_UNICODE_STRING,ULONG);\nNTSTATUS WINAPI LsaCallAuthenticationPackage(HANDLE,ULONG,PVOID,ULONG,PVOID*,PULONG,PNTSTATUS);\nNTSTATUS WINAPI LsaClose(LSA_HANDLE);\nNTSTATUS WINAPI LsaConnectUntrusted(PHANDLE);\nNTSTATUS WINAPI LsaCreateTrustedDomainEx(LSA_HANDLE,PTRUSTED_DOMAIN_INFORMATION_EX,\n                                         PTRUSTED_DOMAIN_AUTH_INFORMATION,ACCESS_MASK,PLSA_HANDLE);\nNTSTATUS WINAPI LsaDeleteTrustedDomain(LSA_HANDLE,PSID);\nNTSTATUS WINAPI LsaDeregisterLogonProcess(HANDLE);\nNTSTATUS WINAPI LsaEnumerateAccountRights(LSA_HANDLE,PSID,PLSA_UNICODE_STRING*,PULONG);\nNTSTATUS WINAPI LsaEnumerateAccountsWithUserRight(LSA_HANDLE,PLSA_UNICODE_STRING,PVOID*,PULONG);\nNTSTATUS WINAPI LsaEnumerateLogonSessions(PULONG,PLUID*);\nNTSTATUS WINAPI LsaEnumerateTrustedDomains(LSA_HANDLE,PLSA_ENUMERATION_HANDLE,PVOID*,ULONG,PULONG);\nNTSTATUS WINAPI LsaEnumerateTrustedDomainsEx(LSA_HANDLE,PLSA_ENUMERATION_HANDLE,PVOID*,ULONG,PULONG);\nNTSTATUS WINAPI LsaFreeMemory(PVOID);\nNTSTATUS WINAPI LsaFreeReturnBuffer(PVOID);\nNTSTATUS WINAPI LsaGetLogonSessionData(PLUID,PSECURITY_LOGON_SESSION_DATA*);\nNTSTATUS WINAPI LsaLogonUser(HANDLE,PLSA_STRING,SECURITY_LOGON_TYPE,ULONG,PVOID,ULONG,PTOKEN_GROUPS,PTOKEN_SOURCE,PVOID*,PULONG,PLUID,PHANDLE,PQUOTA_LIMITS,PNTSTATUS);\nNTSTATUS WINAPI LsaLookupAuthenticationPackage(HANDLE,PLSA_STRING,PULONG);\nNTSTATUS WINAPI LsaLookupNames(LSA_HANDLE,ULONG,PLSA_UNICODE_STRING,PLSA_REFERENCED_DOMAIN_LIST*,\n                               PLSA_TRANSLATED_SID*);\nNTSTATUS WINAPI LsaLookupNames2(LSA_HANDLE,ULONG,ULONG,PLSA_UNICODE_STRING,PLSA_REFERENCED_DOMAIN_LIST*,\n                                PLSA_TRANSLATED_SID2*);\nNTSTATUS WINAPI LsaLookupSids(LSA_HANDLE,ULONG,PSID *,PLSA_REFERENCED_DOMAIN_LIST *,PLSA_TRANSLATED_NAME *);\nULONG WINAPI LsaNtStatusToWinError(NTSTATUS);\nNTSTATUS WINAPI LsaOpenPolicy(PLSA_UNICODE_STRING,PLSA_OBJECT_ATTRIBUTES,ACCESS_MASK,PLSA_HANDLE);\nNTSTATUS WINAPI LsaOpenTrustedDomainByName(LSA_HANDLE,PLSA_UNICODE_STRING,ACCESS_MASK,PLSA_HANDLE);\nNTSTATUS WINAPI LsaQueryInformationPolicy(LSA_HANDLE,POLICY_INFORMATION_CLASS,PVOID*);\nNTSTATUS WINAPI LsaQueryTrustedDomainInfo(LSA_HANDLE,PSID,TRUSTED_INFORMATION_CLASS,PVOID*);\nNTSTATUS WINAPI LsaQueryTrustedDomainInfoByName(LSA_HANDLE,PLSA_UNICODE_STRING,TRUSTED_INFORMATION_CLASS,PVOID*);\nNTSTATUS WINAPI LsaRegisterLogonProcess(PLSA_STRING,PHANDLE,PLSA_OPERATIONAL_MODE);\nNTSTATUS WINAPI LsaRegisterPolicyChangeNotification(POLICY_NOTIFICATION_INFORMATION_CLASS,HANDLE);\nNTSTATUS WINAPI LsaRemoveAccountRights(LSA_HANDLE,PSID,BOOLEAN,PLSA_UNICODE_STRING,ULONG);\nNTSTATUS WINAPI LsaRetrievePrivateData(LSA_HANDLE,PLSA_UNICODE_STRING,PLSA_UNICODE_STRING*);\nNTSTATUS WINAPI LsaSetInformationPolicy(LSA_HANDLE,POLICY_INFORMATION_CLASS,PVOID);\nNTSTATUS WINAPI LsaSetTrustedDomainInfoByName(LSA_HANDLE,PLSA_UNICODE_STRING,TRUSTED_INFORMATION_CLASS,PVOID);\nNTSTATUS WINAPI LsaSetTrustedDomainInformation(LSA_HANDLE,PSID,TRUSTED_INFORMATION_CLASS,PVOID);\nNTSTATUS WINAPI LsaStorePrivateData(LSA_HANDLE,PLSA_UNICODE_STRING,PLSA_UNICODE_STRING);\nNTSTATUS WINAPI LsaUnregisterPolicyChangeNotification(POLICY_NOTIFICATION_INFORMATION_CLASS,HANDLE);\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif /* !defined(__WINE_NTSECAPI_H) */\n"
  },
  {
    "path": "wine/windows/ntsecpkg.h",
    "content": "/*\n * Copyright (C) 2007 Yuval Fledel\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _NTSECPKG_H\n#define _NTSECPKG_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Flags for the MachineState field in SECPKG_PARAMETERS */\n#define SECPKG_STATE_ENCRYPTION_PERMITTED               0x01\n#define SECPKG_STATE_STRONG_ENCRYPTION_PERMITTED        0x02\n#define SECPKG_STATE_DOMAIN_CONTROLLER                  0x04\n#define SECPKG_STATE_WORKSTATION                        0x08\n#define SECPKG_STATE_STANDALONE                         0x10\n\n/* Version magics as passed to or returned from Sp[Lsa,Mode]ModeInitialize */\n#define SECPKG_INTERFACE_VERSION                     0x10000\n#define SECPKG_INTERFACE_VERSION_2                   0x20000\n#define SECPKG_INTERFACE_VERSION_3                   0x40000\n#define SECPKG_INTERFACE_VERSION_4                   0x80000\n#define SECPKG_INTERFACE_VERSION_5                  0x100000\n#define SECPKG_INTERFACE_VERSION_6                  0x200000\n#define SECPKG_INTERFACE_VERSION_7                  0x400000\n\n/* enum definitions for Secure Service Provider/Authentication Packages */\ntypedef enum _LSA_TOKEN_INFORMATION_TYPE {\n    LsaTokenInformationNull,\n    LsaTokenInformationV1\n} LSA_TOKEN_INFORMATION_TYPE, *PLSA_TOKEN_INFORMATION_TYPE;\n\ntypedef enum _SECPKG_EXTENDED_INFORMATION_CLASS\n{\n    SecpkgGssInfo = 1,\n    SecpkgContextThunks,\n    SecpkgMutualAuthLevel,\n    SecpkgMaxInfo\n} SECPKG_EXTENDED_INFORMATION_CLASS;\n\ntypedef enum _SECPKG_NAME_TYPE {\n    SecNameSamCompatible,\n    SecNameAlternateId,\n    SecNameFlat,\n    SecNameDN\n} SECPKG_NAME_TYPE;\n\n/* struct definitions for SSP/AP */\ntypedef struct _SECPKG_PRIMARY_CRED {\n    LUID LogonId;\n    UNICODE_STRING DownlevelName;\n    UNICODE_STRING DomainName;\n    UNICODE_STRING Password;\n    UNICODE_STRING OldPassword;\n    PSID UserSid;\n    ULONG Flags;\n    UNICODE_STRING DnsDomainName;\n    UNICODE_STRING Upn;\n    UNICODE_STRING LogonServer;\n    UNICODE_STRING Spare1;\n    UNICODE_STRING Spare2;\n    UNICODE_STRING Spare3;\n    UNICODE_STRING Spare4;\n} SECPKG_PRIMARY_CRED, *PSECPKG_PRIMARY_CRED;\n\ntypedef struct _SECPKG_SUPPLEMENTAL_CRED {\n    UNICODE_STRING PackageName;\n    ULONG CredentialSize;\n    PUCHAR Credentials;\n} SECPKG_SUPPLEMENTAL_CRED, *PSECPKG_SUPPLEMENTAL_CRED;\n\ntypedef struct _SECPKG_SUPPLEMENTAL_CRED_ARRAY {\n    ULONG CredentialCount;\n    SECPKG_SUPPLEMENTAL_CRED Credentials[1];\n} SECPKG_SUPPLEMENTAL_CRED_ARRAY, *PSECPKG_SUPPLEMENTAL_CRED_ARRAY;\n\ntypedef struct _SECPKG_PARAMETERS {\n    ULONG Version;\n    ULONG MachineState;\n    ULONG SetupMode;\n    PSID DomainSid;\n    UNICODE_STRING DomainName;\n    UNICODE_STRING DnsDomainName;\n    GUID DomainGuid;\n} SECPKG_PARAMETERS, *PSECPKG_PARAMETERS,\n  SECPKG_EVENT_DOMAIN_CHANGE, *PSECPKG_EVENT_DOMAIN_CHANGE;\n\ntypedef struct _SECPKG_CLIENT_INFO {\n    LUID LogonId;\n    ULONG ProcessID;\n    ULONG ThreadID;\n    BOOLEAN HasTcbPrivilege;\n    BOOLEAN Impersonating;\n    BOOLEAN Restricted;\n} SECPKG_CLIENT_INFO,\n *PSECPKG_CLIENT_INFO;\n\ntypedef struct _SECURITY_USER_DATA {\n    UNICODE_STRING UserName;\n    UNICODE_STRING LogonDomainName;\n    UNICODE_STRING LogonServer;\n    PSID pSid;\n} SECURITY_USER_DATA, *PSECURITY_USER_DATA,\n  SecurityUserData, *PSecurityUserData;\n\ntypedef struct _SECPKG_GSS_INFO {\n    ULONG EncodedIdLength;\n    UCHAR EncodedId[4];\n} SECPKG_GSS_INFO, *PSECPKG_GSS_INFO;\n\ntypedef struct _SECPKG_CONTEXT_THUNKS {\n    ULONG InfoLevelCount;\n    ULONG Levels[1];\n} SECPKG_CONTEXT_THUNKS, *PSECPKG_CONTEXT_THUNKS;\n\ntypedef struct _SECPKG_MUTUAL_AUTH_LEVEL {\n    ULONG MutualAuthLevel;\n} SECPKG_MUTUAL_AUTH_LEVEL, *PSECPKG_MUTUAL_AUTH_LEVEL;\n\ntypedef struct _SECPKG_CALL_INFO {\n    ULONG ProcessId;\n    ULONG ThreadId;\n    ULONG Attributes;\n    ULONG CallCount;\n} SECPKG_CALL_INFO, *PSECPKG_CALL_INFO;\n\ntypedef struct _SECPKG_EXTENDED_INFORMATION {\n    SECPKG_EXTENDED_INFORMATION_CLASS Class;\n    union {\n        SECPKG_GSS_INFO GssInfo;\n        SECPKG_CONTEXT_THUNKS ContextThunks;\n        SECPKG_MUTUAL_AUTH_LEVEL MutualAuthLevel;\n    } Info;\n} SECPKG_EXTENDED_INFORMATION, *PSECPKG_EXTENDED_INFORMATION;\n\ntypedef struct _SECPKG_TARGETINFO {\n    PSID DomainSid;\n    PCWSTR ComputerName;\n} SECPKG_TARGETINFO, *PSECPKG_TARGETINFO;\n\ntypedef struct _SECPKG_POST_LOGON_USER_INFO {\n    ULONG Flags;\n    LUID LogonId;\n    LUID LinkedLogonId;\n} SECPKG_POST_LOGON_USER_INFO, *PSECPKG_POST_LOGON_USER_INFO;\n\n/* callbacks implemented by SSP/AP dlls and called by the LSA */\ntypedef VOID (NTAPI *PLSA_CALLBACK_FUNCTION)(ULONG_PTR, ULONG_PTR, PSecBuffer,\n PSecBuffer);\n\n/* misc typedefs used in the below prototypes */\ntypedef PVOID *PLSA_CLIENT_REQUEST;\ntypedef ULONG_PTR LSA_SEC_HANDLE, *PLSA_SEC_HANDLE;\ntypedef LPTHREAD_START_ROUTINE SEC_THREAD_START;\ntypedef PSECURITY_ATTRIBUTES SEC_ATTRS;\n\n/* functions used by SSP/AP obtainable by dispatch tables */\ntypedef NTSTATUS (NTAPI *PLSA_REGISTER_CALLBACK)(ULONG, PLSA_CALLBACK_FUNCTION);\ntypedef NTSTATUS (NTAPI *PLSA_CREATE_LOGON_SESSION)(PLUID);\ntypedef NTSTATUS (NTAPI *PLSA_DELETE_LOGON_SESSION)(PLUID);\ntypedef NTSTATUS (NTAPI *PLSA_ADD_CREDENTIAL)(PLUID, ULONG, PLSA_STRING,\n PLSA_STRING);\ntypedef NTSTATUS (NTAPI *PLSA_GET_CREDENTIALS)(PLUID, ULONG, PULONG, BOOLEAN,\n PLSA_STRING, PULONG, PLSA_STRING);\ntypedef NTSTATUS (NTAPI *PLSA_DELETE_CREDENTIAL)(PLUID, ULONG, PLSA_STRING);\ntypedef PVOID (NTAPI *PLSA_ALLOCATE_LSA_HEAP)(ULONG);\ntypedef VOID (NTAPI *PLSA_FREE_LSA_HEAP)(PVOID);\ntypedef NTSTATUS (NTAPI *PLSA_ALLOCATE_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST,\n ULONG, PVOID*);\ntypedef NTSTATUS (NTAPI *PLSA_FREE_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST, PVOID);\ntypedef NTSTATUS (NTAPI *PLSA_COPY_TO_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST, ULONG,\n PVOID, PVOID);\ntypedef NTSTATUS (NTAPI *PLSA_COPY_FROM_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST,\n ULONG, PVOID, PVOID);\ntypedef NTSTATUS (NTAPI *PLSA_IMPERSONATE_CLIENT)(void);\ntypedef NTSTATUS (NTAPI *PLSA_UNLOAD_PACKAGE)(void);\ntypedef NTSTATUS (NTAPI *PLSA_DUPLICATE_HANDLE)(HANDLE, PHANDLE);\ntypedef NTSTATUS (NTAPI *PLSA_SAVE_SUPPLEMENTAL_CREDENTIALS)(PLUID, ULONG,\n PVOID, BOOLEAN);\ntypedef HANDLE (NTAPI *PLSA_CREATE_THREAD)(SEC_ATTRS, ULONG, SEC_THREAD_START,\n PVOID, ULONG, PULONG);\ntypedef NTSTATUS (NTAPI *PLSA_GET_CLIENT_INFO)(PSECPKG_CLIENT_INFO);\ntypedef HANDLE (NTAPI *PLSA_REGISTER_NOTIFICATION)(SEC_THREAD_START, PVOID,\n ULONG, ULONG, ULONG, ULONG, HANDLE);\ntypedef NTSTATUS (NTAPI *PLSA_CANCEL_NOTIFICATION)(HANDLE);\ntypedef NTSTATUS (NTAPI *PLSA_MAP_BUFFER)(PSecBuffer, PSecBuffer);\ntypedef NTSTATUS (NTAPI *PLSA_CREATE_TOKEN)(PLUID, PTOKEN_SOURCE,\n SECURITY_LOGON_TYPE, SECURITY_IMPERSONATION_LEVEL, LSA_TOKEN_INFORMATION_TYPE,\n PVOID, PTOKEN_GROUPS, PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING,\n PUNICODE_STRING, PHANDLE, PNTSTATUS);\ntypedef VOID (NTAPI *PLSA_AUDIT_LOGON)(NTSTATUS, NTSTATUS, PUNICODE_STRING,\n PUNICODE_STRING, PUNICODE_STRING, OPTIONAL PSID, SECURITY_LOGON_TYPE,\n PTOKEN_SOURCE, PLUID);\ntypedef NTSTATUS (NTAPI *PLSA_CALL_PACKAGE)(PUNICODE_STRING, PVOID, ULONG,\n PVOID*, PULONG, PNTSTATUS);\ntypedef BOOLEAN (NTAPI *PLSA_GET_CALL_INFO)(PSECPKG_CALL_INFO);\ntypedef NTSTATUS (NTAPI *PLSA_CALL_PACKAGEEX)(PUNICODE_STRING, PVOID, PVOID,\n ULONG, PVOID*, PULONG, PNTSTATUS);\ntypedef PVOID (NTAPI *PLSA_CREATE_SHARED_MEMORY)(ULONG, ULONG);\ntypedef PVOID (NTAPI *PLSA_ALLOCATE_SHARED_MEMORY)(PVOID, ULONG);\ntypedef VOID (NTAPI *PLSA_FREE_SHARED_MEMORY)(PVOID, PVOID);\ntypedef BOOLEAN (NTAPI *PLSA_DELETE_SHARED_MEMORY)(PVOID);\ntypedef NTSTATUS (NTAPI *PLSA_OPEN_SAM_USER)(PUNICODE_STRING, SECPKG_NAME_TYPE,\n PUNICODE_STRING, BOOLEAN, ULONG, PVOID*);\ntypedef NTSTATUS (NTAPI *PLSA_GET_USER_CREDENTIALS)(PVOID, PVOID *, PULONG,\n PVOID *, PULONG);\ntypedef NTSTATUS (NTAPI *PLSA_GET_USER_AUTH_DATA)(PVOID, PUCHAR *, PULONG);\ntypedef NTSTATUS (NTAPI *PLSA_CLOSE_SAM_USER)(PVOID);\ntypedef NTSTATUS (NTAPI *PLSA_CONVERT_AUTH_DATA_TO_TOKEN)(PVOID, ULONG,\n SECURITY_IMPERSONATION_LEVEL, PTOKEN_SOURCE, SECURITY_LOGON_TYPE,\n PUNICODE_STRING, PHANDLE, PLUID, PUNICODE_STRING, PNTSTATUS);\ntypedef NTSTATUS (NTAPI *PLSA_CLIENT_CALLBACK)(PCHAR, ULONG_PTR, ULONG_PTR,\n PSecBuffer, PSecBuffer);\ntypedef NTSTATUS (NTAPI *PLSA_UPDATE_PRIMARY_CREDENTIALS)(PSECPKG_PRIMARY_CRED, PSECPKG_SUPPLEMENTAL_CRED_ARRAY);\ntypedef NTSTATUS (NTAPI *PLSA_GET_AUTH_DATA_FOR_USER)(PUNICODE_STRING,\n SECPKG_NAME_TYPE, PUNICODE_STRING, PUCHAR *, PULONG, PUNICODE_STRING);\ntypedef NTSTATUS (NTAPI *PLSA_CRACK_SINGLE_NAME)(ULONG, BOOLEAN,\n PUNICODE_STRING, PUNICODE_STRING, ULONG, PUNICODE_STRING, PUNICODE_STRING,\n PULONG);\ntypedef NTSTATUS (NTAPI *PLSA_AUDIT_ACCOUNT_LOGON)(ULONG, BOOLEAN,\n PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING, NTSTATUS);\ntypedef NTSTATUS (NTAPI *PLSA_CALL_PACKAGE_PASSTHROUGH)(PUNICODE_STRING, PVOID,\n PVOID, ULONG, PVOID*, PULONG, PNTSTATUS);\n\n/* Dispatch tables of functions used by SSP/AP */\ntypedef struct SECPKG_DLL_FUNCTIONS {\n    PLSA_ALLOCATE_LSA_HEAP AllocateHeap;\n    PLSA_FREE_LSA_HEAP FreeHeap;\n    PLSA_REGISTER_CALLBACK RegisterCallback;\n} SECPKG_DLL_FUNCTIONS,\n *PSECPKG_DLL_FUNCTIONS;\n\ntypedef struct LSA_DISPATCH_TABLE {\n    PLSA_CREATE_LOGON_SESSION CreateLogonSession;\n    PLSA_DELETE_LOGON_SESSION DeleteLogonSession;\n    PLSA_ADD_CREDENTIAL AddCredential;\n    PLSA_GET_CREDENTIALS GetCredentials;\n    PLSA_DELETE_CREDENTIAL DeleteCredential;\n    PLSA_ALLOCATE_LSA_HEAP AllocateLsaHeap;\n    PLSA_FREE_LSA_HEAP FreeLsaHeap;\n    PLSA_ALLOCATE_CLIENT_BUFFER AllocateClientBuffer;\n    PLSA_FREE_CLIENT_BUFFER FreeClientBuffer;\n    PLSA_COPY_TO_CLIENT_BUFFER CopyToClientBuffer;\n    PLSA_COPY_FROM_CLIENT_BUFFER CopyFromClientBuffer;\n} LSA_DISPATCH_TABLE,\n *PLSA_DISPATCH_TABLE;\n\ntypedef struct _LSA_SECPKG_FUNCTION_TABLE {\n    PLSA_CREATE_LOGON_SESSION CreateLogonSession;\n    PLSA_DELETE_LOGON_SESSION DeleteLogonSession;\n    PLSA_ADD_CREDENTIAL AddCredential;\n    PLSA_GET_CREDENTIALS GetCredentials;\n    PLSA_DELETE_CREDENTIAL DeleteCredential;\n    PLSA_ALLOCATE_LSA_HEAP AllocateLsaHeap;\n    PLSA_FREE_LSA_HEAP FreeLsaHeap;\n    PLSA_ALLOCATE_CLIENT_BUFFER AllocateClientBuffer;\n    PLSA_FREE_CLIENT_BUFFER FreeClientBuffer;\n    PLSA_COPY_TO_CLIENT_BUFFER CopyToClientBuffer;\n    PLSA_COPY_FROM_CLIENT_BUFFER CopyFromClientBuffer;\n    PLSA_IMPERSONATE_CLIENT ImpersonateClient;\n    PLSA_UNLOAD_PACKAGE UnloadPackage;\n    PLSA_DUPLICATE_HANDLE DuplicateHandle;\n    PLSA_SAVE_SUPPLEMENTAL_CREDENTIALS SaveSupplementalCredentials;\n    PLSA_CREATE_THREAD CreateThread;\n    PLSA_GET_CLIENT_INFO GetClientInfo;\n    PLSA_REGISTER_NOTIFICATION RegisterNotification;\n    PLSA_CANCEL_NOTIFICATION CancelNotification;\n    PLSA_MAP_BUFFER MapBuffer;\n    PLSA_CREATE_TOKEN CreateToken;\n    PLSA_AUDIT_LOGON AuditLogon;\n    PLSA_CALL_PACKAGE CallPackage;\n    PLSA_FREE_LSA_HEAP FreeReturnBuffer;\n    PLSA_GET_CALL_INFO GetCallInfo;\n    PLSA_CALL_PACKAGEEX CallPackageEx;\n    PLSA_CREATE_SHARED_MEMORY CreateSharedMemory;\n    PLSA_ALLOCATE_SHARED_MEMORY AllocateSharedMemory;\n    PLSA_FREE_SHARED_MEMORY FreeSharedMemory;\n    PLSA_DELETE_SHARED_MEMORY DeleteSharedMemory;\n    PLSA_OPEN_SAM_USER OpenSamUser;\n    PLSA_GET_USER_CREDENTIALS GetUserCredentials;\n    PLSA_GET_USER_AUTH_DATA GetUserAuthData;\n    PLSA_CLOSE_SAM_USER CloseSamUser;\n    PLSA_CONVERT_AUTH_DATA_TO_TOKEN ConvertAuthDataToToken;\n    PLSA_CLIENT_CALLBACK ClientCallback;\n    PLSA_UPDATE_PRIMARY_CREDENTIALS UpdateCredentials;\n    PLSA_GET_AUTH_DATA_FOR_USER GetAuthDataForUser;\n    PLSA_CRACK_SINGLE_NAME CrackSingleName;\n    PLSA_AUDIT_ACCOUNT_LOGON AuditAccountLogon;\n    PLSA_CALL_PACKAGE_PASSTHROUGH CallPackagePassthrough;\n} LSA_SECPKG_FUNCTION_TABLE,\n *PLSA_SECPKG_FUNCTION_TABLE;\n\n/* LSA-mode functions implemented by SSP/AP obtainable by a dispatch table */\ntypedef NTSTATUS (NTAPI *PLSA_AP_INITIALIZE_PACKAGE)(ULONG, PLSA_DISPATCH_TABLE,\n PLSA_STRING, PLSA_STRING, PLSA_STRING *);\ntypedef NTSTATUS (NTAPI *PLSA_AP_LOGON_USER)(PLSA_CLIENT_REQUEST, SECURITY_LOGON_TYPE,\n PVOID, PVOID, ULONG, PVOID *, PULONG, PLUID LogonId, PNTSTATUS, PLSA_TOKEN_INFORMATION_TYPE,\n PVOID *, PLSA_UNICODE_STRING *, PLSA_UNICODE_STRING *);\ntypedef NTSTATUS (NTAPI *PLSA_AP_CALL_PACKAGE)(PLSA_CLIENT_REQUEST, PVOID, PVOID, ULONG,\n PVOID *, PULONG, PNTSTATUS);\ntypedef VOID (NTAPI *PLSA_AP_LOGON_TERMINATED)(PLUID);\ntypedef NTSTATUS (NTAPI *PLSA_AP_CALL_PACKAGE_UNTRUSTED)(PLSA_CLIENT_REQUEST,\n PVOID, PVOID, ULONG, PVOID *, PULONG, PNTSTATUS);\ntypedef NTSTATUS (NTAPI *PLSA_AP_CALL_PACKAGE_PASSTHROUGH)(PLSA_CLIENT_REQUEST,\n PVOID, PVOID, ULONG, PVOID *, PULONG, PNTSTATUS);\ntypedef NTSTATUS (NTAPI *PLSA_AP_LOGON_USER_EX)(PLSA_CLIENT_REQUEST,\n SECURITY_LOGON_TYPE, PVOID, PVOID, ULONG, PVOID *, PULONG, PLUID, PNTSTATUS,\n PLSA_TOKEN_INFORMATION_TYPE, PVOID *, PUNICODE_STRING *, PUNICODE_STRING *,\n PUNICODE_STRING *);\ntypedef NTSTATUS (NTAPI *PLSA_AP_LOGON_USER_EX2)(PLSA_CLIENT_REQUEST,\n SECURITY_LOGON_TYPE, PVOID, PVOID, ULONG, PVOID *, PULONG, PLUID, PNTSTATUS,\n PLSA_TOKEN_INFORMATION_TYPE, PVOID *, PUNICODE_STRING *, PUNICODE_STRING *,\n PUNICODE_STRING *, PSECPKG_PRIMARY_CRED, PSECPKG_SUPPLEMENTAL_CRED_ARRAY *);\ntypedef NTSTATUS (NTAPI SpInitializeFn)(ULONG_PTR, PSECPKG_PARAMETERS,\n PLSA_SECPKG_FUNCTION_TABLE);\ntypedef NTSTATUS (NTAPI SpShutdownFn)(void);\ntypedef NTSTATUS (NTAPI SpGetInfoFn)(PSecPkgInfoW);\ntypedef NTSTATUS (NTAPI SpAcceptCredentialsFn)(SECURITY_LOGON_TYPE,\n PUNICODE_STRING, PSECPKG_PRIMARY_CRED, PSECPKG_SUPPLEMENTAL_CRED);\ntypedef NTSTATUS (NTAPI SpAcquireCredentialsHandleFn)(PUNICODE_STRING, ULONG,\n PLUID, PVOID, PVOID, PVOID, PLSA_SEC_HANDLE, PTimeStamp);\ntypedef NTSTATUS (NTAPI SpQueryCredentialsAttributesFn)(LSA_SEC_HANDLE, ULONG,\n PVOID);\ntypedef NTSTATUS (NTAPI SpFreeCredentialsHandleFn)(LSA_SEC_HANDLE);\ntypedef NTSTATUS (NTAPI SpSaveCredentialsFn)(LSA_SEC_HANDLE, PSecBuffer);\ntypedef NTSTATUS (NTAPI SpGetCredentialsFn)(LSA_SEC_HANDLE, PSecBuffer);\ntypedef NTSTATUS (NTAPI SpDeleteCredentialsFn)(LSA_SEC_HANDLE, PSecBuffer);\ntypedef NTSTATUS (NTAPI SpInitLsaModeContextFn)(LSA_SEC_HANDLE, LSA_SEC_HANDLE,\n PUNICODE_STRING, ULONG, ULONG, PSecBufferDesc, PLSA_SEC_HANDLE, PSecBufferDesc,\n PULONG, PTimeStamp, PBOOLEAN, PSecBuffer);\ntypedef NTSTATUS (NTAPI SpAcceptLsaModeContextFn)(LSA_SEC_HANDLE,\n LSA_SEC_HANDLE, PSecBufferDesc, ULONG, ULONG, PLSA_SEC_HANDLE, PSecBufferDesc,\n PULONG, PTimeStamp, PBOOLEAN, PSecBuffer);\ntypedef NTSTATUS (NTAPI SpDeleteContextFn)(LSA_SEC_HANDLE);\ntypedef NTSTATUS (NTAPI SpApplyControlTokenFn)(LSA_SEC_HANDLE, PSecBufferDesc);\ntypedef NTSTATUS (NTAPI SpGetUserInfoFn)(PLUID, ULONG, PSecurityUserData *);\ntypedef NTSTATUS (NTAPI SpGetExtendedInformationFn)(\n SECPKG_EXTENDED_INFORMATION_CLASS, PSECPKG_EXTENDED_INFORMATION *);\ntypedef NTSTATUS (NTAPI SpQueryContextAttributesFn)(LSA_SEC_HANDLE, ULONG,\n PVOID);\ntypedef NTSTATUS (NTAPI SpAddCredentialsFn)(LSA_SEC_HANDLE, PUNICODE_STRING,\n PUNICODE_STRING, ULONG, PVOID, PVOID, PVOID, PTimeStamp);\ntypedef NTSTATUS (NTAPI SpSetExtendedInformationFn)(\n SECPKG_EXTENDED_INFORMATION_CLASS, PSECPKG_EXTENDED_INFORMATION);\ntypedef NTSTATUS (NTAPI SpSetContextAttributesFn)(LSA_SEC_HANDLE, ULONG, PVOID,\n ULONG);\ntypedef NTSTATUS (NTAPI SpSetCredentialsAttributesFn)(LSA_SEC_HANDLE, ULONG,\n PVOID, ULONG);\ntypedef NTSTATUS (NTAPI SpChangeAccountPasswordFn)(PUNICODE_STRING,\n PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING, BOOLEAN, PSecBufferDesc);\ntypedef NTSTATUS (NTAPI SpQueryMetaDataFn)(LSA_SEC_HANDLE, PUNICODE_STRING,\n ULONG, PULONG, PUCHAR *, PLSA_SEC_HANDLE);\ntypedef NTSTATUS (NTAPI SpExchangeMetaDataFn)(LSA_SEC_HANDLE, PUNICODE_STRING,\n ULONG, ULONG, PUCHAR, PLSA_SEC_HANDLE);\ntypedef NTSTATUS (NTAPI SpGetCredUIContextFn)(LSA_SEC_HANDLE, GUID *, PULONG,\n PUCHAR *);\ntypedef NTSTATUS (NTAPI SpUpdateCredentialsFn)(LSA_SEC_HANDLE, GUID *, ULONG,\n PUCHAR);\ntypedef NTSTATUS (NTAPI SpValidateTargetInfoFn)(PLSA_CLIENT_REQUEST, PVOID,\n PVOID, ULONG, PSECPKG_TARGETINFO);\ntypedef NTSTATUS (NTAPI LSA_AP_POST_LOGON_USER)(PSECPKG_POST_LOGON_USER_INFO);\n\n/* User-mode functions implemented by SSP/AP obtainable by a dispatch table */\ntypedef NTSTATUS (NTAPI SpInstanceInitFn)(ULONG, PSECPKG_DLL_FUNCTIONS,\n PVOID *);\ntypedef NTSTATUS (NTAPI SpInitUserModeContextFn)(LSA_SEC_HANDLE, PSecBuffer);\ntypedef NTSTATUS (NTAPI SpMakeSignatureFn)(LSA_SEC_HANDLE, ULONG,\n PSecBufferDesc, ULONG);\ntypedef NTSTATUS (NTAPI SpVerifySignatureFn)(LSA_SEC_HANDLE, PSecBufferDesc,\n ULONG, PULONG);\ntypedef NTSTATUS (NTAPI SpSealMessageFn)(LSA_SEC_HANDLE, ULONG, PSecBufferDesc,\n ULONG);\ntypedef NTSTATUS (NTAPI SpUnsealMessageFn)(LSA_SEC_HANDLE, PSecBufferDesc,\n ULONG, PULONG);\ntypedef NTSTATUS (NTAPI SpGetContextTokenFn)(LSA_SEC_HANDLE, PHANDLE);\ntypedef NTSTATUS (NTAPI SpCompleteAuthTokenFn)(LSA_SEC_HANDLE, PSecBufferDesc);\ntypedef NTSTATUS (NTAPI SpFormatCredentialsFn)(PSecBuffer, PSecBuffer);\ntypedef NTSTATUS (NTAPI SpMarshallSupplementalCredsFn)(ULONG, PUCHAR, PULONG,\n PVOID *);\ntypedef NTSTATUS (NTAPI SpExportSecurityContextFn)(LSA_SEC_HANDLE, ULONG,\n PSecBuffer, PHANDLE);\ntypedef NTSTATUS (NTAPI SpImportSecurityContextFn)(PSecBuffer, HANDLE,\n PLSA_SEC_HANDLE);\n\n#ifdef WINE_NO_UNICODE_MACROS\n#undef SetContextAttributes\n#endif\n\n/* dispatch tables of LSA-mode functions implemented by SSP/AP */\ntypedef struct SECPKG_FUNCTION_TABLE {\n    PLSA_AP_INITIALIZE_PACKAGE InitializePackage;\n    PLSA_AP_LOGON_USER LsaLogonUser;\n    PLSA_AP_CALL_PACKAGE CallPackage;\n    PLSA_AP_LOGON_TERMINATED LogonTerminated;\n    PLSA_AP_CALL_PACKAGE_UNTRUSTED CallPackageUntrusted;\n    PLSA_AP_CALL_PACKAGE_PASSTHROUGH CallPackagePassthrough;\n    PLSA_AP_LOGON_USER_EX LogonUserEx;\n    PLSA_AP_LOGON_USER_EX2 LogonUserEx2;\n    SpInitializeFn *Initialize;\n    SpShutdownFn *Shutdown;\n    SpGetInfoFn *GetInfo;\n    SpAcceptCredentialsFn *AcceptCredentials;\n    SpAcquireCredentialsHandleFn *SpAcquireCredentialsHandle;\n    SpQueryCredentialsAttributesFn *SpQueryCredentialsAttributes;\n    SpFreeCredentialsHandleFn *FreeCredentialsHandle;\n    SpSaveCredentialsFn *SaveCredentials;\n    SpGetCredentialsFn *GetCredentials;\n    SpDeleteCredentialsFn *DeleteCredentials;\n    SpInitLsaModeContextFn *InitLsaModeContext;\n    SpAcceptLsaModeContextFn *AcceptLsaModeContext;\n    SpDeleteContextFn *DeleteContext;\n    SpApplyControlTokenFn *ApplyControlToken;\n    SpGetUserInfoFn *GetUserInfo;\n    SpGetExtendedInformationFn *GetExtendedInformation;\n    SpQueryContextAttributesFn *SpQueryContextAttributes;\n    SpAddCredentialsFn *SpAddCredentials;\n    SpSetExtendedInformationFn *SetExtendedInformation;\n    /* Packages with version SECPKG_INTERFACE_VERSION end here */\n    SpSetContextAttributesFn *SetContextAttributes;\n    /* Packages with version SECPKG_INTERFACE_VERSION_2 end here */\n    SpSetCredentialsAttributesFn *SetCredentialsAttributes;\n    /* Packages with version SECPKG_INTERFACE_VERSION_3 end here */\n    SpChangeAccountPasswordFn *ChangeAccountPassword;\n    /* Packages with version SECPKG_INTERFACE_VERSION_4 end here */\n    SpQueryMetaDataFn *QueryMetaData;\n    SpExchangeMetaDataFn *ExchangeMetaData;\n    SpGetCredUIContextFn *GetCredUIContext;\n    SpUpdateCredentialsFn *UpdateCredentials;\n    /* Packages with version SECPKG_INTERFACE_VERSION_5 end here */\n    SpValidateTargetInfoFn *ValidateTargetInfo;\n    /* Packages with version SECPKG_INTERFACE_VERSION_6 end here */\n    LSA_AP_POST_LOGON_USER* PostLogonUser;\n    /* Packages with version SECPKG_INTERFACE_VERSION_7 end here */\n} SECPKG_FUNCTION_TABLE,\n *PSECPKG_FUNCTION_TABLE;\n\n/* dispatch tables of user-mode functions implemented by SSP/AP */\ntypedef struct SECPKG_USER_FUNCTION_TABLE {\n    SpInstanceInitFn *InstanceInit;\n    SpInitUserModeContextFn *InitUserModeContext;\n    SpMakeSignatureFn *MakeSignature;\n    SpVerifySignatureFn *VerifySignature;\n    SpSealMessageFn *SealMessage;\n    SpUnsealMessageFn *UnsealMessage;\n    SpGetContextTokenFn *GetContextToken;\n    SpQueryContextAttributesFn *SpQueryContextAttributes;\n    SpCompleteAuthTokenFn *CompleteAuthToken;\n    SpDeleteContextFn *DeleteUserModeContext;\n    SpFormatCredentialsFn *FormatCredentials;\n    SpMarshallSupplementalCredsFn *MarshallSupplementalCreds;\n    SpExportSecurityContextFn *ExportContext;\n    SpImportSecurityContextFn *ImportContext;\n} SECPKG_USER_FUNCTION_TABLE,\n *PSECPKG_USER_FUNCTION_TABLE;\n\n/* LSA-mode entry point to SSP/APs */\ntypedef NTSTATUS (NTAPI *SpLsaModeInitializeFn)(ULONG, PULONG,\n PSECPKG_FUNCTION_TABLE *, PULONG);\n\n/* User-mode entry point to SSP/APs */\ntypedef NTSTATUS (WINAPI *SpUserModeInitializeFn)(ULONG, PULONG,\n PSECPKG_USER_FUNCTION_TABLE *, PULONG);\n\n#ifdef __cplusplus\n}\n#endif\n#endif /* _NTSECPKG_H */\n"
  },
  {
    "path": "wine/windows/ntstatus.h",
    "content": "/*\n * Win32 definitions for Windows NT\n *\n * Copyright 1996 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_NTSTATUS_H\n#define __WINE_NTSTATUS_H\n\n#ifndef WIN32_NO_STATUS\n\n/*\n * Exception codes\n */\n\n#define STATUS_SUCCESS                   ((NTSTATUS) 0x00000000)\n#define STATUS_SEVERITY_SUCCESS          ((NTSTATUS) 0x00000000)\n#define STATUS_SEVERITY_INFORMATIONAL    ((NTSTATUS) 0x00000001)\n#define STATUS_SEVERITY_WARNING          ((NTSTATUS) 0x00000002)\n#define STATUS_SEVERITY_ERROR            ((NTSTATUS) 0x00000003)\n\n#define STATUS_WAIT_0                    ((NTSTATUS) 0x00000000)\n#define STATUS_WAIT_1                    ((NTSTATUS) 0x00000001)\n#define STATUS_WAIT_2                    ((NTSTATUS) 0x00000002)\n#define STATUS_WAIT_3                    ((NTSTATUS) 0x00000003)\n#define STATUS_WAIT_63                   ((NTSTATUS) 0x0000003f)\n#define STATUS_ABANDONED                 ((NTSTATUS) 0x00000080)\n#define STATUS_ABANDONED_WAIT_0          ((NTSTATUS) 0x00000080)\n#define STATUS_ABANDONED_WAIT_63         ((NTSTATUS) 0x000000BF)\n#define STATUS_USER_APC                  ((NTSTATUS) 0x000000C0)\n#define STATUS_KERNEL_APC                ((NTSTATUS) 0x00000100)\n#define STATUS_ALERTED                   ((NTSTATUS) 0x00000101)\n#define STATUS_TIMEOUT                   ((NTSTATUS) 0x00000102)\n#define STATUS_PENDING                   ((NTSTATUS) 0x00000103)\n#define STATUS_REPARSE                   ((NTSTATUS) 0x00000104)\n#define STATUS_MORE_ENTRIES              ((NTSTATUS) 0x00000105)\n#define STATUS_NOT_ALL_ASSIGNED          ((NTSTATUS) 0x00000106)\n#define STATUS_SOME_NOT_MAPPED           ((NTSTATUS) 0x00000107)\n#define STATUS_OPLOCK_BREAK_IN_PROGRESS  ((NTSTATUS) 0x00000108)\n#define STATUS_VOLUME_MOUNTED            ((NTSTATUS) 0x00000109)\n#define STATUS_RXACT_COMMITTED           ((NTSTATUS) 0x0000010A)\n#define STATUS_NOTIFY_CLEANUP            ((NTSTATUS) 0x0000010B)\n#define STATUS_NOTIFY_ENUM_DIR           ((NTSTATUS) 0x0000010C)\n#define STATUS_NO_QUOTAS_FOR_ACCOUNT     ((NTSTATUS) 0x0000010D)\n#define STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED ((NTSTATUS) 0x0000010E)\n#define STATUS_PAGE_FAULT_TRANSITION     ((NTSTATUS) 0x00000110)\n#define STATUS_PAGE_FAULT_DEMAND_ZERO    ((NTSTATUS) 0x00000111)\n#define STATUS_PAGE_FAULT_COPY_ON_WRITE  ((NTSTATUS) 0x00000112)\n#define STATUS_PAGE_FAULT_GUARD_PAGE     ((NTSTATUS) 0x00000113)\n#define STATUS_PAGE_FAULT_PAGING_FILE    ((NTSTATUS) 0x00000114)\n#define STATUS_CACHE_PAGE_LOCKED         ((NTSTATUS) 0x00000115)\n#define STATUS_CRASH_DUMP                ((NTSTATUS) 0x00000116)\n#define STATUS_BUFFER_ALL_ZEROS          ((NTSTATUS) 0x00000117)\n#define STATUS_REPARSE_OBJECT            ((NTSTATUS) 0x00000118)\n#define STATUS_RESOURCE_REQUIREMENTS_CHANGED ((NTSTATUS) 0x00000119)\n#define STATUS_TRANSLATION_COMPLETE      ((NTSTATUS) 0x00000120)\n#define STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY  ((NTSTATUS) 0x00000121)\n#define STATUS_NOTHING_TO_TERMINATE      ((NTSTATUS) 0x00000122)\n#define STATUS_PROCESS_NOT_IN_JOB        ((NTSTATUS) 0x00000123)\n#define STATUS_PROCESS_IN_JOB            ((NTSTATUS) 0x00000124)\n#define STATUS_VOLSNAP_HIBERNATE_READY   ((NTSTATUS) 0x00000125)\n#define STATUS_FSFILTER_OP_COMPLETED_SUCCESSFULLY ((NTSTATUS) 0x00000126)\n\n#define STATUS_OBJECT_NAME_EXISTS        ((NTSTATUS) 0x40000000)\n#define STATUS_THREAD_WAS_SUSPENDED      ((NTSTATUS) 0x40000001)\n#define STATUS_WORKING_SET_LIMIT_RANGE   ((NTSTATUS) 0x40000002)\n#define STATUS_IMAGE_NOT_AT_BASE         ((NTSTATUS) 0x40000003)\n#define STATUS_RXACT_STATE_CREATED       ((NTSTATUS) 0x40000004)\n#define STATUS_SEGMENT_NOTIFICATION      ((NTSTATUS) 0x40000005)\n#define STATUS_LOCAL_USER_SESSION_KEY    ((NTSTATUS) 0x40000006)\n#define STATUS_BAD_CURRENT_DIRECTORY     ((NTSTATUS) 0x40000007)\n#define STATUS_SERIAL_MORE_WRITES        ((NTSTATUS) 0x40000008)\n#define STATUS_REGISTRY_RECOVERED        ((NTSTATUS) 0x40000009)\n#define STATUS_FT_READ_RECOVERY_FROM_BACKUP ((NTSTATUS) 0x4000000A)\n#define STATUS_FT_WRITE_RECOVERY         ((NTSTATUS) 0x4000000B)\n#define STATUS_SERIAL_COUNTER_TIMEOUT    ((NTSTATUS) 0x4000000C)\n#define STATUS_NULL_LM_PASSWORD          ((NTSTATUS) 0x4000000D)\n#define STATUS_IMAGE_MACHINE_TYPE_MISMATCH ((NTSTATUS) 0x4000000E)\n#define STATUS_RECEIVE_PARTIAL           ((NTSTATUS) 0x4000000F)\n#define STATUS_RECEIVE_EXPEDITED         ((NTSTATUS) 0x40000010)\n#define STATUS_RECEIVE_PARTIAL_EXPEDITED ((NTSTATUS) 0x40000011)\n#define STATUS_EVENT_DONE                ((NTSTATUS) 0x40000012)\n#define STATUS_EVENT_PENDING             ((NTSTATUS) 0x40000013)\n#define STATUS_CHECKING_FILE_SYSTEM      ((NTSTATUS) 0x40000014)\n#define STATUS_FATAL_APP_EXIT            ((NTSTATUS) 0x40000015)\n#define STATUS_PREDEFINED_HANDLE         ((NTSTATUS) 0x40000016)\n#define STATUS_WAS_UNLOCKED              ((NTSTATUS) 0x40000017)\n#define STATUS_SERVICE_NOTIFICATION      ((NTSTATUS) 0x40000018)\n#define STATUS_WAS_LOCKED                ((NTSTATUS) 0x40000019)\n#define STATUS_LOG_HARD_ERROR            ((NTSTATUS) 0x4000001A)\n#define STATUS_ALREADY_WIN32             ((NTSTATUS) 0x4000001B)\n#define STATUS_WX86_UNSIMULATE           ((NTSTATUS) 0x4000001C)\n#define STATUS_WX86_CONTINUE             ((NTSTATUS) 0x4000001D)\n#define STATUS_WX86_SINGLE_STEP          ((NTSTATUS) 0x4000001E)\n#define STATUS_WX86_BREAKPOINT           ((NTSTATUS) 0x4000001F)\n#define STATUS_WX86_EXCEPTION_CONTINUE   ((NTSTATUS) 0x40000020)\n#define STATUS_WX86_EXCEPTION_LASTCHANCE ((NTSTATUS) 0x40000021)\n#define STATUS_WX86_EXCEPTION_CHAIN      ((NTSTATUS) 0x40000022)\n#define STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE ((NTSTATUS) 0x40000023)\n#define STATUS_NO_YIELD_PERFORMED        ((NTSTATUS) 0x40000024)\n#define STATUS_TIMER_RESUME_IGNORED      ((NTSTATUS) 0x40000025)\n#define STATUS_ARBITRATION_UNHANDLED     ((NTSTATUS) 0x40000026)\n#define STATUS_CARDBUS_NOT_SUPPORTED     ((NTSTATUS) 0x40000027)\n#define STATUS_WX86_CREATEWX86TIB        ((NTSTATUS) 0x40000028)\n#define STATUS_MP_PROCESSOR_MISMATCH     ((NTSTATUS) 0x40000029)\n#define STATUS_HIBERNATED                ((NTSTATUS) 0x4000002A)\n#define STATUS_RESUME_HIBERNATION        ((NTSTATUS) 0x4000002B)\n#define STATUS_FIRMWARE_UPDATED          ((NTSTATUS) 0x4000002C)\n#define STATUS_WAKE_SYSTEM               ((NTSTATUS) 0x40000294)\n#define STATUS_DS_SHUTTING_DOWN          ((NTSTATUS) 0x40000370)\n\n#define RPC_NT_UUID_LOCAL_ONLY           ((NTSTATUS) 0x40020056)\n#define RPC_NT_SEND_INCOMPLETE           ((NTSTATUS) 0x400200AF)\n\n#define STATUS_CTX_CDM_CONNECT           ((NTSTATUS) 0x400A0004)\n#define STATUS_CTX_CDM_DISCONNECT        ((NTSTATUS) 0x400A0005)\n\n#define STATUS_SXS_RELEASE_ACTIVATION_CONTEXT ((NTSTATUS) 0x4015000D)\n\n#define STATUS_GUARD_PAGE_VIOLATION      ((NTSTATUS) 0x80000001)\n#define STATUS_DATATYPE_MISALIGNMENT     ((NTSTATUS) 0x80000002)\n#define STATUS_BREAKPOINT                ((NTSTATUS) 0x80000003)\n#define STATUS_SINGLE_STEP               ((NTSTATUS) 0x80000004)\n#define STATUS_BUFFER_OVERFLOW           ((NTSTATUS) 0x80000005)\n#define STATUS_NO_MORE_FILES             ((NTSTATUS) 0x80000006)\n#define STATUS_WAKE_SYSTEM_DEBUGGER      ((NTSTATUS) 0x80000007)\n\n#define STATUS_HANDLES_CLOSED            ((NTSTATUS) 0x8000000A)\n#define STATUS_NO_INHERITANCE            ((NTSTATUS) 0x8000000B)\n#define STATUS_GUID_SUBSTITUTION_MADE    ((NTSTATUS) 0x8000000C)\n#define STATUS_PARTIAL_COPY              ((NTSTATUS) 0x8000000D)\n#define STATUS_DEVICE_PAPER_EMPTY        ((NTSTATUS) 0x8000000E)\n#define STATUS_DEVICE_POWERED_OFF        ((NTSTATUS) 0x8000000F)\n#define STATUS_DEVICE_OFF_LINE           ((NTSTATUS) 0x80000010)\n#define STATUS_DEVICE_BUSY               ((NTSTATUS) 0x80000011)\n#define STATUS_NO_MORE_EAS               ((NTSTATUS) 0x80000012)\n#define STATUS_INVALID_EA_NAME           ((NTSTATUS) 0x80000013)\n#define STATUS_EA_LIST_INCONSISTENT      ((NTSTATUS) 0x80000014)\n#define STATUS_INVALID_EA_FLAG           ((NTSTATUS) 0x80000015)\n#define STATUS_VERIFY_REQUIRED           ((NTSTATUS) 0x80000016)\n#define STATUS_EXTRANEOUS_INFORMATION    ((NTSTATUS) 0x80000017)\n#define STATUS_RXACT_COMMIT_NECESSARY    ((NTSTATUS) 0x80000018)\n#define STATUS_NO_MORE_ENTRIES           ((NTSTATUS) 0x8000001A)\n#define STATUS_FILEMARK_DETECTED         ((NTSTATUS) 0x8000001B)\n#define STATUS_MEDIA_CHANGED             ((NTSTATUS) 0x8000001C)\n#define STATUS_BUS_RESET                 ((NTSTATUS) 0x8000001D)\n#define STATUS_END_OF_MEDIA              ((NTSTATUS) 0x8000001E)\n#define STATUS_BEGINNING_OF_MEDIA        ((NTSTATUS) 0x8000001F)\n#define STATUS_MEDIA_CHECK               ((NTSTATUS) 0x80000020)\n#define STATUS_SETMARK_DETECTED          ((NTSTATUS) 0x80000021)\n#define STATUS_NO_DATA_DETECTED          ((NTSTATUS) 0x80000022)\n#define STATUS_REDIRECTOR_HAS_OPEN_HANDLES ((NTSTATUS) 0x80000023)\n#define STATUS_SERVER_HAS_OPEN_HANDLES   ((NTSTATUS) 0x80000024)\n#define STATUS_ALREADY_DISCONNECTED      ((NTSTATUS) 0x80000025)\n#define STATUS_LONGJUMP                  ((NTSTATUS) 0x80000026)\n#define STATUS_CLEANER_CARTRIDGE_INSTALLED      ((NTSTATUS) 0x80000027)\n#define STATUS_PLUGPLAY_QUERY_VETOED     ((NTSTATUS) 0x80000028)\n#define STATUS_UNWIND_CONSOLIDATE        ((NTSTATUS) 0x80000029)\n#define STATUS_REGISTRY_HIVE_RECOVERED   ((NTSTATUS) 0x8000002A)\n#define STATUS_DLL_MIGHT_BE_INSECURE     ((NTSTATUS) 0x8000002B)\n#define STATUS_DLL_MIGHT_BE_INCOMPATIBLE ((NTSTATUS) 0x8000002C)\n\n#define STATUS_DEVICE_REQUIRES_CLEANING  ((NTSTATUS) 0x80000288)\n#define STATUS_DEVICE_DOOR_OPEN          ((NTSTATUS) 0x80000289)\n\n#define STATUS_CLUSTER_NODE_ALREADY_UP   ((NTSTATUS) 0x80130001)\n#define STATUS_CLUSTER_NODE_ALREADY_DOWN ((NTSTATUS) 0x80130002)\n#define STATUS_CLUSTER_NETWORK_ALREADY_ONLINE   ((NTSTATUS) 0x80130003)\n#define STATUS_CLUSTER_NETWORK_ALREADY_OFFLINE  ((NTSTATUS) 0x80130004)\n#define STATUS_CLUSTER_NODE_ALREADY_MEMBER      ((NTSTATUS) 0x80130005)\n\n#define STATUS_UNSUCCESSFUL              ((NTSTATUS) 0xC0000001)\n#define STATUS_NOT_IMPLEMENTED           ((NTSTATUS) 0xC0000002)\n#define STATUS_INVALID_INFO_CLASS        ((NTSTATUS) 0xC0000003)\n#define STATUS_INFO_LENGTH_MISMATCH      ((NTSTATUS) 0xC0000004)\n#define STATUS_ACCESS_VIOLATION          ((NTSTATUS) 0xC0000005)\n#define STATUS_IN_PAGE_ERROR             ((NTSTATUS) 0xC0000006)\n#define STATUS_PAGEFILE_QUOTA            ((NTSTATUS) 0xC0000007)\n#define STATUS_INVALID_HANDLE            ((NTSTATUS) 0xC0000008)\n#define STATUS_BAD_INITIAL_STACK         ((NTSTATUS) 0xC0000009)\n#define STATUS_BAD_INITIAL_PC            ((NTSTATUS) 0xC000000A)\n#define STATUS_INVALID_CID               ((NTSTATUS) 0xC000000B)\n#define STATUS_TIMER_NOT_CANCELED        ((NTSTATUS) 0xC000000C)\n#define STATUS_INVALID_PARAMETER         ((NTSTATUS) 0xC000000D)\n#define STATUS_NO_SUCH_DEVICE            ((NTSTATUS) 0xC000000E)\n#define STATUS_NO_SUCH_FILE              ((NTSTATUS) 0xC000000F)\n#define STATUS_INVALID_DEVICE_REQUEST    ((NTSTATUS) 0xC0000010)\n#define STATUS_END_OF_FILE               ((NTSTATUS) 0xC0000011)\n#define STATUS_WRONG_VOLUME              ((NTSTATUS) 0xC0000012)\n#define STATUS_NO_MEDIA_IN_DEVICE        ((NTSTATUS) 0xC0000013)\n#define STATUS_UNRECOGNIZED_MEDIA        ((NTSTATUS) 0xC0000014)\n#define STATUS_NONEXISTENT_SECTOR        ((NTSTATUS) 0xC0000015)\n#define STATUS_MORE_PROCESSING_REQUIRED  ((NTSTATUS) 0xC0000016)\n#define STATUS_NO_MEMORY                 ((NTSTATUS) 0xC0000017)\n#define STATUS_CONFLICTING_ADDRESSES     ((NTSTATUS) 0xC0000018)\n#define STATUS_NOT_MAPPED_VIEW           ((NTSTATUS) 0xC0000019)\n#define STATUS_UNABLE_TO_FREE_VM         ((NTSTATUS) 0xC000001A)\n#define STATUS_UNABLE_TO_DELETE_SECTION  ((NTSTATUS) 0xC000001B)\n#define STATUS_INVALID_SYSTEM_SERVICE    ((NTSTATUS) 0xC000001C)\n#define STATUS_ILLEGAL_INSTRUCTION       ((NTSTATUS) 0xC000001D)\n#define STATUS_INVALID_LOCK_SEQUENCE     ((NTSTATUS) 0xC000001E)\n#define STATUS_INVALID_VIEW_SIZE         ((NTSTATUS) 0xC000001F)\n#define STATUS_INVALID_FILE_FOR_SECTION  ((NTSTATUS) 0xC0000020)\n#define STATUS_ALREADY_COMMITTED         ((NTSTATUS) 0xC0000021)\n#define STATUS_ACCESS_DENIED             ((NTSTATUS) 0xC0000022)\n#define STATUS_BUFFER_TOO_SMALL          ((NTSTATUS) 0xC0000023)\n#define STATUS_OBJECT_TYPE_MISMATCH      ((NTSTATUS) 0xC0000024)\n#define STATUS_NONCONTINUABLE_EXCEPTION  ((NTSTATUS) 0xC0000025)\n#define STATUS_INVALID_DISPOSITION       ((NTSTATUS) 0xC0000026)\n#define STATUS_UNWIND                    ((NTSTATUS) 0xC0000027)\n#define STATUS_BAD_STACK                 ((NTSTATUS) 0xC0000028)\n#define STATUS_INVALID_UNWIND_TARGET     ((NTSTATUS) 0xC0000029)\n#define STATUS_NOT_LOCKED                ((NTSTATUS) 0xC000002A)\n#define STATUS_PARITY_ERROR              ((NTSTATUS) 0xC000002B)\n#define STATUS_UNABLE_TO_DECOMMIT_VM     ((NTSTATUS) 0xC000002C)\n#define STATUS_NOT_COMMITTED             ((NTSTATUS) 0xC000002D)\n#define STATUS_INVALID_PORT_ATTRIBUTES   ((NTSTATUS) 0xC000002E)\n#define STATUS_PORT_MESSAGE_TOO_LONG     ((NTSTATUS) 0xC000002F)\n#define STATUS_INVALID_PARAMETER_MIX     ((NTSTATUS) 0xC0000030)\n#define STATUS_INVALID_QUOTA_LOWER       ((NTSTATUS) 0xC0000031)\n#define STATUS_DISK_CORRUPT_ERROR        ((NTSTATUS) 0xC0000032)\n#define STATUS_OBJECT_NAME_INVALID       ((NTSTATUS) 0xC0000033)\n#define STATUS_OBJECT_NAME_NOT_FOUND     ((NTSTATUS) 0xC0000034)\n#define STATUS_OBJECT_NAME_COLLISION     ((NTSTATUS) 0xC0000035)\n#define STATUS_PORT_DISCONNECTED         ((NTSTATUS) 0xC0000037)\n#define STATUS_DEVICE_ALREADY_ATTACHED   ((NTSTATUS) 0xC0000038)\n#define STATUS_OBJECT_PATH_INVALID       ((NTSTATUS) 0xC0000039)\n#define STATUS_OBJECT_PATH_NOT_FOUND     ((NTSTATUS) 0xC000003A)\n#define STATUS_OBJECT_PATH_SYNTAX_BAD    ((NTSTATUS) 0xC000003B)\n#define STATUS_DATA_OVERRUN              ((NTSTATUS) 0xC000003C)\n#define STATUS_DATA_LATE_ERROR           ((NTSTATUS) 0xC000003D)\n#define STATUS_DATA_ERROR                ((NTSTATUS) 0xC000003E)\n#define STATUS_CRC_ERROR                 ((NTSTATUS) 0xC000003F)\n#define STATUS_SECTION_TOO_BIG           ((NTSTATUS) 0xC0000040)\n#define STATUS_PORT_CONNECTION_REFUSED   ((NTSTATUS) 0xC0000041)\n#define STATUS_INVALID_PORT_HANDLE       ((NTSTATUS) 0xC0000042)\n#define STATUS_SHARING_VIOLATION         ((NTSTATUS) 0xC0000043)\n#define STATUS_QUOTA_EXCEEDED            ((NTSTATUS) 0xC0000044)\n#define STATUS_INVALID_PAGE_PROTECTION   ((NTSTATUS) 0xC0000045)\n#define STATUS_MUTANT_NOT_OWNED          ((NTSTATUS) 0xC0000046)\n#define STATUS_SEMAPHORE_LIMIT_EXCEEDED  ((NTSTATUS) 0xC0000047)\n#define STATUS_PORT_ALREADY_SET          ((NTSTATUS) 0xC0000048)\n#define STATUS_SECTION_NOT_IMAGE         ((NTSTATUS) 0xC0000049)\n#define STATUS_SUSPEND_COUNT_EXCEEDED    ((NTSTATUS) 0xC000004A)\n#define STATUS_THREAD_IS_TERMINATING     ((NTSTATUS) 0xC000004B)\n#define STATUS_BAD_WORKING_SET_LIMIT     ((NTSTATUS) 0xC000004C)\n#define STATUS_INCOMPATIBLE_FILE_MAP     ((NTSTATUS) 0xC000004D)\n#define STATUS_SECTION_PROTECTION        ((NTSTATUS) 0xC000004E)\n#define STATUS_EAS_NOT_SUPPORTED         ((NTSTATUS) 0xC000004F)\n#define STATUS_EA_TOO_LARGE              ((NTSTATUS) 0xC0000050)\n#define STATUS_NONEXISTENT_EA_ENTRY      ((NTSTATUS) 0xC0000051)\n#define STATUS_NO_EAS_ON_FILE            ((NTSTATUS) 0xC0000052)\n#define STATUS_EA_CORRUPT_ERROR          ((NTSTATUS) 0xC0000053)\n#define STATUS_FILE_LOCK_CONFLICT        ((NTSTATUS) 0xC0000054)\n#define STATUS_LOCK_NOT_GRANTED          ((NTSTATUS) 0xC0000055)\n#define STATUS_DELETE_PENDING            ((NTSTATUS) 0xC0000056)\n#define STATUS_CTL_FILE_NOT_SUPPORTED    ((NTSTATUS) 0xC0000057)\n#define STATUS_UNKNOWN_REVISION          ((NTSTATUS) 0xC0000058)\n#define STATUS_REVISION_MISMATCH         ((NTSTATUS) 0xC0000059)\n#define STATUS_INVALID_OWNER             ((NTSTATUS) 0xC000005A)\n#define STATUS_INVALID_PRIMARY_GROUP     ((NTSTATUS) 0xC000005B)\n#define STATUS_NO_IMPERSONATION_TOKEN    ((NTSTATUS) 0xC000005C)\n#define STATUS_CANT_DISABLE_MANDATORY    ((NTSTATUS) 0xC000005D)\n#define STATUS_NO_LOGON_SERVERS          ((NTSTATUS) 0xC000005E)\n#define STATUS_NO_SUCH_LOGON_SESSION     ((NTSTATUS) 0xC000005F)\n#define STATUS_NO_SUCH_PRIVILEGE         ((NTSTATUS) 0xC0000060)\n#define STATUS_PRIVILEGE_NOT_HELD        ((NTSTATUS) 0xC0000061)\n#define STATUS_INVALID_ACCOUNT_NAME      ((NTSTATUS) 0xC0000062)\n#define STATUS_USER_EXISTS               ((NTSTATUS) 0xC0000063)\n#define STATUS_NO_SUCH_USER              ((NTSTATUS) 0xC0000064)\n#define STATUS_GROUP_EXISTS              ((NTSTATUS) 0xC0000065)\n#define STATUS_NO_SUCH_GROUP             ((NTSTATUS) 0xC0000066)\n#define STATUS_MEMBER_IN_GROUP           ((NTSTATUS) 0xC0000067)\n#define STATUS_MEMBER_NOT_IN_GROUP       ((NTSTATUS) 0xC0000068)\n#define STATUS_LAST_ADMIN                ((NTSTATUS) 0xC0000069)\n#define STATUS_WRONG_PASSWORD            ((NTSTATUS) 0xC000006A)\n#define STATUS_ILL_FORMED_PASSWORD       ((NTSTATUS) 0xC000006B)\n#define STATUS_PASSWORD_RESTRICTION      ((NTSTATUS) 0xC000006C)\n#define STATUS_LOGON_FAILURE             ((NTSTATUS) 0xC000006D)\n#define STATUS_ACCOUNT_RESTRICTION       ((NTSTATUS) 0xC000006E)\n#define STATUS_INVALID_LOGON_HOURS       ((NTSTATUS) 0xC000006F)\n#define STATUS_INVALID_WORKSTATION       ((NTSTATUS) 0xC0000070)\n#define STATUS_PASSWORD_EXPIRED          ((NTSTATUS) 0xC0000071)\n#define STATUS_ACCOUNT_DISABLED          ((NTSTATUS) 0xC0000072)\n#define STATUS_NONE_MAPPED               ((NTSTATUS) 0xC0000073)\n#define STATUS_TOO_MANY_LUIDS_REQUESTED  ((NTSTATUS) 0xC0000074)\n#define STATUS_LUIDS_EXHAUSTED           ((NTSTATUS) 0xC0000075)\n#define STATUS_INVALID_SUB_AUTHORITY     ((NTSTATUS) 0xC0000076)\n#define STATUS_INVALID_ACL               ((NTSTATUS) 0xC0000077)\n#define STATUS_INVALID_SID               ((NTSTATUS) 0xC0000078)\n#define STATUS_INVALID_SECURITY_DESCR    ((NTSTATUS) 0xC0000079)\n#define STATUS_PROCEDURE_NOT_FOUND       ((NTSTATUS) 0xC000007A)\n#define STATUS_INVALID_IMAGE_FORMAT      ((NTSTATUS) 0xC000007B)\n#define STATUS_NO_TOKEN                  ((NTSTATUS) 0xC000007C)\n#define STATUS_BAD_INHERITANCE_ACL       ((NTSTATUS) 0xC000007D)\n#define STATUS_RANGE_NOT_LOCKED          ((NTSTATUS) 0xC000007E)\n#define STATUS_DISK_FULL                 ((NTSTATUS) 0xC000007F)\n#define STATUS_SERVER_DISABLED           ((NTSTATUS) 0xC0000080)\n#define STATUS_SERVER_NOT_DISABLED       ((NTSTATUS) 0xC0000081)\n#define STATUS_TOO_MANY_GUIDS_REQUESTED  ((NTSTATUS) 0xC0000082)\n#define STATUS_GUIDS_EXHAUSTED           ((NTSTATUS) 0xC0000083)\n#define STATUS_INVALID_ID_AUTHORITY      ((NTSTATUS) 0xC0000084)\n#define STATUS_AGENTS_EXHAUSTED          ((NTSTATUS) 0xC0000085)\n#define STATUS_INVALID_VOLUME_LABEL      ((NTSTATUS) 0xC0000086)\n#define STATUS_SECTION_NOT_EXTENDED      ((NTSTATUS) 0xC0000087)\n#define STATUS_NOT_MAPPED_DATA           ((NTSTATUS) 0xC0000088)\n#define STATUS_RESOURCE_DATA_NOT_FOUND   ((NTSTATUS) 0xC0000089)\n#define STATUS_RESOURCE_TYPE_NOT_FOUND   ((NTSTATUS) 0xC000008A)\n#define STATUS_RESOURCE_NAME_NOT_FOUND   ((NTSTATUS) 0xC000008B)\n#define STATUS_ARRAY_BOUNDS_EXCEEDED     ((NTSTATUS) 0xC000008C)\n#define STATUS_FLOAT_DENORMAL_OPERAND    ((NTSTATUS) 0xC000008D)\n#define STATUS_FLOAT_DIVIDE_BY_ZERO      ((NTSTATUS) 0xC000008E)\n#define STATUS_FLOAT_INEXACT_RESULT      ((NTSTATUS) 0xC000008F)\n#define STATUS_FLOAT_INVALID_OPERATION   ((NTSTATUS) 0xC0000090)\n#define STATUS_FLOAT_OVERFLOW            ((NTSTATUS) 0xC0000091)\n#define STATUS_FLOAT_STACK_CHECK         ((NTSTATUS) 0xC0000092)\n#define STATUS_FLOAT_UNDERFLOW           ((NTSTATUS) 0xC0000093)\n#define STATUS_INTEGER_DIVIDE_BY_ZERO    ((NTSTATUS) 0xC0000094)\n#define STATUS_INTEGER_OVERFLOW          ((NTSTATUS) 0xC0000095)\n#define STATUS_PRIVILEGED_INSTRUCTION    ((NTSTATUS) 0xC0000096)\n#define STATUS_TOO_MANY_PAGING_FILES     ((NTSTATUS) 0xC0000097)\n#define STATUS_FILE_INVALID              ((NTSTATUS) 0xC0000098)\n#define STATUS_ALLOTTED_SPACE_EXCEEDED   ((NTSTATUS) 0xC0000099)\n#define STATUS_INSUFFICIENT_RESOURCES    ((NTSTATUS) 0xC000009A)\n#define STATUS_DFS_EXIT_PATH_FOUND       ((NTSTATUS) 0xC000009B)\n#define STATUS_DEVICE_DATA_ERROR         ((NTSTATUS) 0xC000009C)\n#define STATUS_DEVICE_NOT_CONNECTED      ((NTSTATUS) 0xC000009D)\n#define STATUS_DEVICE_POWER_FAILURE      ((NTSTATUS) 0xC000009E)\n#define STATUS_FREE_VM_NOT_AT_BASE       ((NTSTATUS) 0xC000009F)\n#define STATUS_MEMORY_NOT_ALLOCATED      ((NTSTATUS) 0xC00000A0)\n#define STATUS_WORKING_SET_QUOTA         ((NTSTATUS) 0xC00000A1)\n#define STATUS_MEDIA_WRITE_PROTECTED     ((NTSTATUS) 0xC00000A2)\n#define STATUS_DEVICE_NOT_READY          ((NTSTATUS) 0xC00000A3)\n#define STATUS_INVALID_GROUP_ATTRIBUTES  ((NTSTATUS) 0xC00000A4)\n#define STATUS_BAD_IMPERSONATION_LEVEL   ((NTSTATUS) 0xC00000A5)\n#define STATUS_CANT_OPEN_ANONYMOUS       ((NTSTATUS) 0xC00000A6)\n#define STATUS_BAD_VALIDATION_CLASS      ((NTSTATUS) 0xC00000A7)\n#define STATUS_BAD_TOKEN_TYPE            ((NTSTATUS) 0xC00000A8)\n#define STATUS_BAD_MASTER_BOOT_RECORD    ((NTSTATUS) 0xC00000A9)\n#define STATUS_INSTRUCTION_MISALIGNMENT  ((NTSTATUS) 0xC00000AA)\n#define STATUS_INSTANCE_NOT_AVAILABLE    ((NTSTATUS) 0xC00000AB)\n#define STATUS_PIPE_NOT_AVAILABLE        ((NTSTATUS) 0xC00000AC)\n#define STATUS_INVALID_PIPE_STATE        ((NTSTATUS) 0xC00000AD)\n#define STATUS_PIPE_BUSY                 ((NTSTATUS) 0xC00000AE)\n#define STATUS_ILLEGAL_FUNCTION          ((NTSTATUS) 0xC00000AF)\n#define STATUS_PIPE_DISCONNECTED         ((NTSTATUS) 0xC00000B0)\n#define STATUS_PIPE_CLOSING              ((NTSTATUS) 0xC00000B1)\n#define STATUS_PIPE_CONNECTED            ((NTSTATUS) 0xC00000B2)\n#define STATUS_PIPE_LISTENING            ((NTSTATUS) 0xC00000B3)\n#define STATUS_INVALID_READ_MODE         ((NTSTATUS) 0xC00000B4)\n#define STATUS_IO_TIMEOUT                ((NTSTATUS) 0xC00000B5)\n#define STATUS_FILE_FORCED_CLOSED        ((NTSTATUS) 0xC00000B6)\n#define STATUS_PROFILING_NOT_STARTED     ((NTSTATUS) 0xC00000B7)\n#define STATUS_PROFILING_NOT_STOPPED     ((NTSTATUS) 0xC00000B8)\n#define STATUS_COULD_NOT_INTERPRET       ((NTSTATUS) 0xC00000B9)\n#define STATUS_FILE_IS_A_DIRECTORY       ((NTSTATUS) 0xC00000BA)\n#define STATUS_NOT_SUPPORTED             ((NTSTATUS) 0xC00000BB)\n#define STATUS_REMOTE_NOT_LISTENING      ((NTSTATUS) 0xC00000BC)\n#define STATUS_DUPLICATE_NAME            ((NTSTATUS) 0xC00000BD)\n#define STATUS_BAD_NETWORK_PATH          ((NTSTATUS) 0xC00000BE)\n#define STATUS_NETWORK_BUSY              ((NTSTATUS) 0xC00000BF)\n#define STATUS_DEVICE_DOES_NOT_EXIST     ((NTSTATUS) 0xC00000C0)\n#define STATUS_TOO_MANY_COMMANDS         ((NTSTATUS) 0xC00000C1)\n#define STATUS_ADAPTER_HARDWARE_ERROR    ((NTSTATUS) 0xC00000C2)\n#define STATUS_INVALID_NETWORK_RESPONSE  ((NTSTATUS) 0xC00000C3)\n#define STATUS_UNEXPECTED_NETWORK_ERROR  ((NTSTATUS) 0xC00000C4)\n#define STATUS_BAD_REMOTE_ADAPTER        ((NTSTATUS) 0xC00000C5)\n#define STATUS_PRINT_QUEUE_FULL          ((NTSTATUS) 0xC00000C6)\n#define STATUS_NO_SPOOL_SPACE            ((NTSTATUS) 0xC00000C7)\n#define STATUS_PRINT_CANCELLED           ((NTSTATUS) 0xC00000C8)\n#define STATUS_NETWORK_NAME_DELETED      ((NTSTATUS) 0xC00000C9)\n#define STATUS_NETWORK_ACCESS_DENIED     ((NTSTATUS) 0xC00000CA)\n#define STATUS_BAD_DEVICE_TYPE           ((NTSTATUS) 0xC00000CB)\n#define STATUS_BAD_NETWORK_NAME          ((NTSTATUS) 0xC00000CC)\n#define STATUS_TOO_MANY_NAMES            ((NTSTATUS) 0xC00000CD)\n#define STATUS_TOO_MANY_SESSIONS         ((NTSTATUS) 0xC00000CE)\n#define STATUS_SHARING_PAUSED            ((NTSTATUS) 0xC00000CF)\n#define STATUS_REQUEST_NOT_ACCEPTED      ((NTSTATUS) 0xC00000D0)\n#define STATUS_REDIRECTOR_PAUSED         ((NTSTATUS) 0xC00000D1)\n#define STATUS_NET_WRITE_FAULT           ((NTSTATUS) 0xC00000D2)\n#define STATUS_PROFILING_AT_LIMIT        ((NTSTATUS) 0xC00000D3)\n#define STATUS_NOT_SAME_DEVICE           ((NTSTATUS) 0xC00000D4)\n#define STATUS_FILE_RENAMED              ((NTSTATUS) 0xC00000D5)\n#define STATUS_VIRTUAL_CIRCUIT_CLOSED    ((NTSTATUS) 0xC00000D6)\n#define STATUS_NO_SECURITY_ON_OBJECT     ((NTSTATUS) 0xC00000D7)\n#define STATUS_CANT_WAIT                 ((NTSTATUS) 0xC00000D8)\n#define STATUS_PIPE_EMPTY                ((NTSTATUS) 0xC00000D9)\n#define STATUS_CANT_ACCESS_DOMAIN_INFO   ((NTSTATUS) 0xC00000DA)\n#define STATUS_CANT_TERMINATE_SELF       ((NTSTATUS) 0xC00000DB)\n#define STATUS_INVALID_SERVER_STATE      ((NTSTATUS) 0xC00000DC)\n#define STATUS_INVALID_DOMAIN_STATE      ((NTSTATUS) 0xC00000DD)\n#define STATUS_INVALID_DOMAIN_ROLE       ((NTSTATUS) 0xC00000DE)\n#define STATUS_NO_SUCH_DOMAIN            ((NTSTATUS) 0xC00000DF)\n#define STATUS_DOMAIN_EXISTS             ((NTSTATUS) 0xC00000E0)\n#define STATUS_DOMAIN_LIMIT_EXCEEDED     ((NTSTATUS) 0xC00000E1)\n#define STATUS_OPLOCK_NOT_GRANTED        ((NTSTATUS) 0xC00000E2)\n#define STATUS_INVALID_OPLOCK_PROTOCOL   ((NTSTATUS) 0xC00000E3)\n#define STATUS_INTERNAL_DB_CORRUPTION    ((NTSTATUS) 0xC00000E4)\n#define STATUS_INTERNAL_ERROR            ((NTSTATUS) 0xC00000E5)\n#define STATUS_GENERIC_NOT_MAPPED        ((NTSTATUS) 0xC00000E6)\n#define STATUS_BAD_DESCRIPTOR_FORMAT     ((NTSTATUS) 0xC00000E7)\n#define STATUS_INVALID_USER_BUFFER       ((NTSTATUS) 0xC00000E8)\n#define STATUS_UNEXPECTED_IO_ERROR       ((NTSTATUS) 0xC00000E9)\n#define STATUS_UNEXPECTED_MM_CREATE_ERR  ((NTSTATUS) 0xC00000EA)\n#define STATUS_UNEXPECTED_MM_MAP_ERROR   ((NTSTATUS) 0xC00000EB)\n#define STATUS_UNEXPECTED_MM_EXTEND_ERR  ((NTSTATUS) 0xC00000EC)\n#define STATUS_NOT_LOGON_PROCESS         ((NTSTATUS) 0xC00000ED)\n#define STATUS_LOGON_SESSION_EXISTS      ((NTSTATUS) 0xC00000EE)\n#define STATUS_INVALID_PARAMETER_1       ((NTSTATUS) 0xC00000EF)\n#define STATUS_INVALID_PARAMETER_2       ((NTSTATUS) 0xC00000F0)\n#define STATUS_INVALID_PARAMETER_3       ((NTSTATUS) 0xC00000F1)\n#define STATUS_INVALID_PARAMETER_4       ((NTSTATUS) 0xC00000F2)\n#define STATUS_INVALID_PARAMETER_5       ((NTSTATUS) 0xC00000F3)\n#define STATUS_INVALID_PARAMETER_6       ((NTSTATUS) 0xC00000F4)\n#define STATUS_INVALID_PARAMETER_7       ((NTSTATUS) 0xC00000F5)\n#define STATUS_INVALID_PARAMETER_8       ((NTSTATUS) 0xC00000F6)\n#define STATUS_INVALID_PARAMETER_9       ((NTSTATUS) 0xC00000F7)\n#define STATUS_INVALID_PARAMETER_10      ((NTSTATUS) 0xC00000F8)\n#define STATUS_INVALID_PARAMETER_11      ((NTSTATUS) 0xC00000F9)\n#define STATUS_INVALID_PARAMETER_12      ((NTSTATUS) 0xC00000FA)\n#define STATUS_REDIRECTOR_NOT_STARTED    ((NTSTATUS) 0xC00000FB)\n#define STATUS_REDIRECTOR_STARTED        ((NTSTATUS) 0xC00000FC)\n#define STATUS_STACK_OVERFLOW            ((NTSTATUS) 0xC00000FD)\n#define STATUS_NO_SUCH_PACKAGE           ((NTSTATUS) 0xC00000FE)\n#define STATUS_BAD_FUNCTION_TABLE        ((NTSTATUS) 0xC00000FF)\n#define STATUS_VARIABLE_NOT_FOUND        ((NTSTATUS) 0xC0000100)\n#define STATUS_DIRECTORY_NOT_EMPTY       ((NTSTATUS) 0xC0000101)\n#define STATUS_FILE_CORRUPT_ERROR        ((NTSTATUS) 0xC0000102)\n#define STATUS_NOT_A_DIRECTORY           ((NTSTATUS) 0xC0000103)\n#define STATUS_BAD_LOGON_SESSION_STATE   ((NTSTATUS) 0xC0000104)\n#define STATUS_LOGON_SESSION_COLLISION   ((NTSTATUS) 0xC0000105)\n#define STATUS_NAME_TOO_LONG             ((NTSTATUS) 0xC0000106)\n#define STATUS_FILES_OPEN                ((NTSTATUS) 0xC0000107)\n#define STATUS_CONNECTION_IN_USE         ((NTSTATUS) 0xC0000108)\n#define STATUS_MESSAGE_NOT_FOUND         ((NTSTATUS) 0xC0000109)\n#define STATUS_PROCESS_IS_TERMINATING    ((NTSTATUS) 0xC000010A)\n#define STATUS_INVALID_LOGON_TYPE        ((NTSTATUS) 0xC000010B)\n#define STATUS_NO_GUID_TRANSLATION       ((NTSTATUS) 0xC000010C)\n#define STATUS_CANNOT_IMPERSONATE        ((NTSTATUS) 0xC000010D)\n#define STATUS_IMAGE_ALREADY_LOADED      ((NTSTATUS) 0xC000010E)\n#define STATUS_ABIOS_NOT_PRESENT         ((NTSTATUS) 0xC000010F)\n#define STATUS_ABIOS_LID_NOT_EXIST       ((NTSTATUS) 0xC0000110)\n#define STATUS_ABIOS_LID_ALREADY_OWNED   ((NTSTATUS) 0xC0000111)\n#define STATUS_ABIOS_NOT_LID_OWNER       ((NTSTATUS) 0xC0000112)\n#define STATUS_ABIOS_INVALID_COMMAND     ((NTSTATUS) 0xC0000113)\n#define STATUS_ABIOS_INVALID_LID         ((NTSTATUS) 0xC0000114)\n#define STATUS_ABIOS_SELECTOR_NOT_AVAILABLE ((NTSTATUS) 0xC0000115)\n#define STATUS_ABIOS_INVALID_SELECTOR    ((NTSTATUS) 0xC0000116)\n#define STATUS_NO_LDT                    ((NTSTATUS) 0xC0000117)\n#define STATUS_INVALID_LDT_SIZE          ((NTSTATUS) 0xC0000118)\n#define STATUS_INVALID_LDT_OFFSET        ((NTSTATUS) 0xC0000119)\n#define STATUS_INVALID_LDT_DESCRIPTOR    ((NTSTATUS) 0xC000011A)\n#define STATUS_INVALID_IMAGE_NE_FORMAT   ((NTSTATUS) 0xC000011B)\n#define STATUS_RXACT_INVALID_STATE       ((NTSTATUS) 0xC000011C)\n#define STATUS_RXACT_COMMIT_FAILURE      ((NTSTATUS) 0xC000011D)\n#define STATUS_MAPPED_FILE_SIZE_ZERO     ((NTSTATUS) 0xC000011E)\n#define STATUS_TOO_MANY_OPENED_FILES     ((NTSTATUS) 0xC000011F)\n#define STATUS_CANCELLED                 ((NTSTATUS) 0xC0000120)\n#define STATUS_CANNOT_DELETE             ((NTSTATUS) 0xC0000121)\n#define STATUS_INVALID_COMPUTER_NAME     ((NTSTATUS) 0xC0000122)\n#define STATUS_FILE_DELETED              ((NTSTATUS) 0xC0000123)\n#define STATUS_SPECIAL_ACCOUNT           ((NTSTATUS) 0xC0000124)\n#define STATUS_SPECIAL_GROUP             ((NTSTATUS) 0xC0000125)\n#define STATUS_SPECIAL_USER              ((NTSTATUS) 0xC0000126)\n#define STATUS_MEMBERS_PRIMARY_GROUP     ((NTSTATUS) 0xC0000127)\n#define STATUS_FILE_CLOSED               ((NTSTATUS) 0xC0000128)\n#define STATUS_TOO_MANY_THREADS          ((NTSTATUS) 0xC0000129)\n#define STATUS_THREAD_NOT_IN_PROCESS     ((NTSTATUS) 0xC000012A)\n#define STATUS_TOKEN_ALREADY_IN_USE      ((NTSTATUS) 0xC000012B)\n#define STATUS_PAGEFILE_QUOTA_EXCEEDED   ((NTSTATUS) 0xC000012C)\n#define STATUS_COMMITMENT_LIMIT          ((NTSTATUS) 0xC000012D)\n#define STATUS_INVALID_IMAGE_LE_FORMAT   ((NTSTATUS) 0xC000012E)\n#define STATUS_INVALID_IMAGE_NOT_MZ      ((NTSTATUS) 0xC000012F)\n#define STATUS_INVALID_IMAGE_PROTECT     ((NTSTATUS) 0xC0000130)\n#define STATUS_INVALID_IMAGE_WIN_16      ((NTSTATUS) 0xC0000131)\n#define STATUS_LOGON_SERVER_CONFLICT     ((NTSTATUS) 0xC0000132)\n#define STATUS_TIME_DIFFERENCE_AT_DC     ((NTSTATUS) 0xC0000133)\n#define STATUS_SYNCHRONIZATION_REQUIRED  ((NTSTATUS) 0xC0000134)\n#define STATUS_DLL_NOT_FOUND             ((NTSTATUS) 0xC0000135)\n#define STATUS_OPEN_FAILED               ((NTSTATUS) 0xC0000136)\n#define STATUS_IO_PRIVILEGE_FAILED       ((NTSTATUS) 0xC0000137)\n#define STATUS_ORDINAL_NOT_FOUND         ((NTSTATUS) 0xC0000138)\n#define STATUS_ENTRYPOINT_NOT_FOUND      ((NTSTATUS) 0xC0000139)\n#define STATUS_CONTROL_C_EXIT            ((NTSTATUS) 0xC000013A)\n#define STATUS_LOCAL_DISCONNECT          ((NTSTATUS) 0xC000013B)\n#define STATUS_REMOTE_DISCONNECT         ((NTSTATUS) 0xC000013C)\n#define STATUS_REMOTE_RESOURCES          ((NTSTATUS) 0xC000013D)\n#define STATUS_LINK_FAILED               ((NTSTATUS) 0xC000013E)\n#define STATUS_LINK_TIMEOUT              ((NTSTATUS) 0xC000013F)\n#define STATUS_INVALID_CONNECTION        ((NTSTATUS) 0xC0000140)\n#define STATUS_INVALID_ADDRESS           ((NTSTATUS) 0xC0000141)\n#define STATUS_DLL_INIT_FAILED           ((NTSTATUS) 0xC0000142)\n#define STATUS_MISSING_SYSTEMFILE        ((NTSTATUS) 0xC0000143)\n#define STATUS_UNHANDLED_EXCEPTION       ((NTSTATUS) 0xC0000144)\n#define STATUS_APP_INIT_FAILURE          ((NTSTATUS) 0xC0000145)\n#define STATUS_PAGEFILE_CREATE_FAILED    ((NTSTATUS) 0xC0000146)\n#define STATUS_NO_PAGEFILE               ((NTSTATUS) 0xC0000147)\n#define STATUS_INVALID_LEVEL             ((NTSTATUS) 0xC0000148)\n#define STATUS_WRONG_PASSWORD_CORE       ((NTSTATUS) 0xC0000149)\n#define STATUS_ILLEGAL_FLOAT_CONTEXT     ((NTSTATUS) 0xC000014A)\n#define STATUS_PIPE_BROKEN               ((NTSTATUS) 0xC000014B)\n#define STATUS_REGISTRY_CORRUPT          ((NTSTATUS) 0xC000014C)\n#define STATUS_REGISTRY_IO_FAILED        ((NTSTATUS) 0xC000014D)\n#define STATUS_NO_EVENT_PAIR             ((NTSTATUS) 0xC000014E)\n#define STATUS_UNRECOGNIZED_VOLUME       ((NTSTATUS) 0xC000014F)\n#define STATUS_SERIAL_NO_DEVICE_INITED   ((NTSTATUS) 0xC0000150)\n#define STATUS_NO_SUCH_ALIAS             ((NTSTATUS) 0xC0000151)\n#define STATUS_MEMBER_NOT_IN_ALIAS       ((NTSTATUS) 0xC0000152)\n#define STATUS_MEMBER_IN_ALIAS           ((NTSTATUS) 0xC0000153)\n#define STATUS_ALIAS_EXISTS              ((NTSTATUS) 0xC0000154)\n#define STATUS_LOGON_NOT_GRANTED         ((NTSTATUS) 0xC0000155)\n#define STATUS_TOO_MANY_SECRETS          ((NTSTATUS) 0xC0000156)\n#define STATUS_SECRET_TOO_LONG           ((NTSTATUS) 0xC0000157)\n#define STATUS_INTERNAL_DB_ERROR         ((NTSTATUS) 0xC0000158)\n#define STATUS_FULLSCREEN_MODE           ((NTSTATUS) 0xC0000159)\n#define STATUS_TOO_MANY_CONTEXT_IDS      ((NTSTATUS) 0xC000015A)\n#define STATUS_LOGON_TYPE_NOT_GRANTED    ((NTSTATUS) 0xC000015B)\n#define STATUS_NOT_REGISTRY_FILE         ((NTSTATUS) 0xC000015C)\n#define STATUS_NT_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS) 0xC000015D)\n#define STATUS_DOMAIN_CTRLR_CONFIG_ERROR ((NTSTATUS) 0xC000015E)\n#define STATUS_FT_MISSING_MEMBER         ((NTSTATUS) 0xC000015F)\n#define STATUS_ILL_FORMED_SERVICE_ENTRY  ((NTSTATUS) 0xC0000160)\n#define STATUS_ILLEGAL_CHARACTER         ((NTSTATUS) 0xC0000161)\n#define STATUS_UNMAPPABLE_CHARACTER      ((NTSTATUS) 0xC0000162)\n#define STATUS_UNDEFINED_CHARACTER       ((NTSTATUS) 0xC0000163)\n#define STATUS_FLOPPY_VOLUME             ((NTSTATUS) 0xC0000164)\n#define STATUS_FLOPPY_ID_MARK_NOT_FOUND  ((NTSTATUS) 0xC0000165)\n#define STATUS_FLOPPY_WRONG_CYLINDER     ((NTSTATUS) 0xC0000166)\n#define STATUS_FLOPPY_UNKNOWN_ERROR      ((NTSTATUS) 0xC0000167)\n#define STATUS_FLOPPY_BAD_REGISTERS      ((NTSTATUS) 0xC0000168)\n#define STATUS_DISK_RECALIBRATE_FAILED   ((NTSTATUS) 0xC0000169)\n#define STATUS_DISK_OPERATION_FAILED     ((NTSTATUS) 0xC000016A)\n#define STATUS_DISK_RESET_FAILED         ((NTSTATUS) 0xC000016B)\n#define STATUS_SHARED_IRQ_BUSY           ((NTSTATUS) 0xC000016C)\n#define STATUS_FT_ORPHANING              ((NTSTATUS) 0xC000016D)\n#define STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT ((NTSTATUS) 0xC000016E)\n\n#define STATUS_PARTITION_FAILURE         ((NTSTATUS) 0xC0000172)\n#define STATUS_INVALID_BLOCK_LENGTH      ((NTSTATUS) 0xC0000173)\n#define STATUS_DEVICE_NOT_PARTITIONED    ((NTSTATUS) 0xC0000174)\n#define STATUS_UNABLE_TO_LOCK_MEDIA      ((NTSTATUS) 0xC0000175)\n#define STATUS_UNABLE_TO_UNLOAD_MEDIA    ((NTSTATUS) 0xC0000176)\n#define STATUS_EOM_OVERFLOW              ((NTSTATUS) 0xC0000177)\n#define STATUS_NO_MEDIA                  ((NTSTATUS) 0xC0000178)\n#define STATUS_NO_SUCH_MEMBER            ((NTSTATUS) 0xC000017A)\n#define STATUS_INVALID_MEMBER            ((NTSTATUS) 0xC000017B)\n#define STATUS_KEY_DELETED               ((NTSTATUS) 0xC000017C)\n#define STATUS_NO_LOG_SPACE              ((NTSTATUS) 0xC000017D)\n#define STATUS_TOO_MANY_SIDS             ((NTSTATUS) 0xC000017E)\n#define STATUS_LM_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS) 0xC000017F)\n#define STATUS_KEY_HAS_CHILDREN          ((NTSTATUS) 0xC0000180)\n#define STATUS_CHILD_MUST_BE_VOLATILE    ((NTSTATUS) 0xC0000181)\n#define STATUS_DEVICE_CONFIGURATION_ERROR ((NTSTATUS) 0xC0000182)\n#define STATUS_DRIVER_INTERNAL_ERROR     ((NTSTATUS) 0xC0000183)\n#define STATUS_INVALID_DEVICE_STATE      ((NTSTATUS) 0xC0000184)\n#define STATUS_IO_DEVICE_ERROR           ((NTSTATUS) 0xC0000185)\n#define STATUS_DEVICE_PROTOCOL_ERROR     ((NTSTATUS) 0xC0000186)\n#define STATUS_BACKUP_CONTROLLER         ((NTSTATUS) 0xC0000187)\n#define STATUS_LOG_FILE_FULL             ((NTSTATUS) 0xC0000188)\n#define STATUS_TOO_LATE                  ((NTSTATUS) 0xC0000189)\n#define STATUS_NO_TRUST_LSA_SECRET       ((NTSTATUS) 0xC000018A)\n#define STATUS_NO_TRUST_SAM_ACCOUNT      ((NTSTATUS) 0xC000018B)\n#define STATUS_TRUSTED_DOMAIN_FAILURE    ((NTSTATUS) 0xC000018C)\n#define STATUS_TRUSTED_RELATIONSHIP_FAILURE ((NTSTATUS) 0xC000018D)\n#define STATUS_EVENTLOG_FILE_CORRUPT     ((NTSTATUS) 0xC000018E)\n#define STATUS_EVENTLOG_CANT_START       ((NTSTATUS) 0xC000018F)\n#define STATUS_TRUST_FAILURE             ((NTSTATUS) 0xC0000190)\n#define STATUS_MUTANT_LIMIT_EXCEEDED     ((NTSTATUS) 0xC0000191)\n#define STATUS_NETLOGON_NOT_STARTED      ((NTSTATUS) 0xC0000192)\n#define STATUS_ACCOUNT_EXPIRED           ((NTSTATUS) 0xC0000193)\n#define STATUS_POSSIBLE_DEADLOCK         ((NTSTATUS) 0xC0000194)\n#define STATUS_NETWORK_CREDENTIAL_CONFLICT ((NTSTATUS) 0xC0000195)\n#define STATUS_REMOTE_SESSION_LIMIT      ((NTSTATUS) 0xC0000196)\n#define STATUS_EVENTLOG_FILE_CHANGED     ((NTSTATUS) 0xC0000197)\n#define STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT ((NTSTATUS) 0xC0000198)\n#define STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT ((NTSTATUS) 0xC0000199)\n#define STATUS_NOLOGON_SERVER_TRUST_ACCOUNT ((NTSTATUS) 0xC000019A)\n#define STATUS_DOMAIN_TRUST_INCONSISTENT ((NTSTATUS) 0xC000019B)\n#define STATUS_FS_DRIVER_REQUIRED        ((NTSTATUS) 0xC000019C)\n#define STATUS_NO_USER_SESSION_KEY       ((NTSTATUS) 0xC0000202)\n#define STATUS_USER_SESSION_DELETED      ((NTSTATUS) 0xC0000203)\n#define STATUS_RESOURCE_LANG_NOT_FOUND   ((NTSTATUS) 0xC0000204)\n#define STATUS_INSUFF_SERVER_RESOURCES   ((NTSTATUS) 0xC0000205)\n#define STATUS_INVALID_BUFFER_SIZE       ((NTSTATUS) 0xC0000206)\n#define STATUS_INVALID_ADDRESS_COMPONENT ((NTSTATUS) 0xC0000207)\n#define STATUS_INVALID_ADDRESS_WILDCARD  ((NTSTATUS) 0xC0000208)\n#define STATUS_TOO_MANY_ADDRESSES        ((NTSTATUS) 0xC0000209)\n#define STATUS_ADDRESS_ALREADY_EXISTS    ((NTSTATUS) 0xC000020A)\n#define STATUS_ADDRESS_CLOSED            ((NTSTATUS) 0xC000020B)\n#define STATUS_CONNECTION_DISCONNECTED   ((NTSTATUS) 0xC000020C)\n#define STATUS_CONNECTION_RESET          ((NTSTATUS) 0xC000020D)\n#define STATUS_TOO_MANY_NODES            ((NTSTATUS) 0xC000020E)\n#define STATUS_TRANSACTION_ABORTED       ((NTSTATUS) 0xC000020F)\n#define STATUS_TRANSACTION_TIMED_OUT     ((NTSTATUS) 0xC0000210)\n#define STATUS_TRANSACTION_NO_RELEASE    ((NTSTATUS) 0xC0000211)\n#define STATUS_TRANSACTION_NO_MATCH      ((NTSTATUS) 0xC0000212)\n#define STATUS_TRANSACTION_RESPONDED     ((NTSTATUS) 0xC0000213)\n#define STATUS_TRANSACTION_INVALID_ID    ((NTSTATUS) 0xC0000214)\n#define STATUS_TRANSACTION_INVALID_TYPE  ((NTSTATUS) 0xC0000215)\n#define STATUS_NOT_SERVER_SESSION        ((NTSTATUS) 0xC0000216)\n#define STATUS_NOT_CLIENT_SESSION        ((NTSTATUS) 0xC0000217)\n#define STATUS_CANNOT_LOAD_REGISTRY_FILE ((NTSTATUS) 0xC0000218)\n#define STATUS_DEBUG_ATTACH_FAILED       ((NTSTATUS) 0xC0000219)\n#define STATUS_SYSTEM_PROCESS_TERMINATED ((NTSTATUS) 0xC000021A)\n#define STATUS_DATA_NOT_ACCEPTED         ((NTSTATUS) 0xC000021B)\n#define STATUS_NO_BROWSER_SERVERS_FOUND  ((NTSTATUS) 0xC000021C)\n#define STATUS_VDM_HARD_ERROR            ((NTSTATUS) 0xC000021D)\n#define STATUS_DRIVER_CANCEL_TIMEOUT     ((NTSTATUS) 0xC000021E)\n#define STATUS_REPLY_MESSAGE_MISMATCH    ((NTSTATUS) 0xC000021F)\n#define STATUS_MAPPED_ALIGNMENT          ((NTSTATUS) 0xC0000220)\n#define STATUS_IMAGE_CHECKSUM_MISMATCH   ((NTSTATUS) 0xC0000221)\n#define STATUS_LOST_WRITEBEHIND_DATA     ((NTSTATUS) 0xC0000222)\n#define STATUS_CLIENT_SERVER_PARAMETERS_INVALID ((NTSTATUS) 0xC0000223)\n#define STATUS_PASSWORD_MUST_CHANGE      ((NTSTATUS) 0xC0000224)\n#define STATUS_NOT_FOUND                 ((NTSTATUS) 0xC0000225)\n#define STATUS_NOT_TINY_STREAM           ((NTSTATUS) 0xC0000226)\n#define STATUS_RECOVERY_FAILURE          ((NTSTATUS) 0xC0000227)\n#define STATUS_STACK_OVERFLOW_READ       ((NTSTATUS) 0xC0000228)\n#define STATUS_FAIL_CHECK                ((NTSTATUS) 0xC0000229)\n#define STATUS_DUPLICATE_OBJECTID        ((NTSTATUS) 0xC000022A)\n#define STATUS_OBJECTID_EXISTS           ((NTSTATUS) 0xC000022B)\n#define STATUS_CONVERT_TO_LARGE          ((NTSTATUS) 0xC000022C)\n#define STATUS_RETRY                     ((NTSTATUS) 0xC000022D)\n#define STATUS_FOUND_OUT_OF_SCOPE        ((NTSTATUS) 0xC000022E)\n#define STATUS_ALLOCATE_BUCKET           ((NTSTATUS) 0xC000022F)\n#define STATUS_PROPSET_NOT_FOUND         ((NTSTATUS) 0xC0000230)\n#define STATUS_MARSHALL_OVERFLOW         ((NTSTATUS) 0xC0000231)\n#define STATUS_INVALID_VARIANT           ((NTSTATUS) 0xC0000232)\n#define STATUS_DOMAIN_CONTROLLER_NOT_FOUND ((NTSTATUS) 0xC0000233)\n#define STATUS_ACCOUNT_LOCKED_OUT        ((NTSTATUS) 0xC0000234)\n#define STATUS_HANDLE_NOT_CLOSABLE       ((NTSTATUS) 0xC0000235)\n#define STATUS_CONNECTION_REFUSED        ((NTSTATUS) 0xC0000236)\n#define STATUS_GRACEFUL_DISCONNECT       ((NTSTATUS) 0xC0000237)\n#define STATUS_ADDRESS_ALREADY_ASSOCIATED ((NTSTATUS) 0xC0000238)\n#define STATUS_ADDRESS_NOT_ASSOCIATED    ((NTSTATUS) 0xC0000239)\n#define STATUS_CONNECTION_INVALID        ((NTSTATUS) 0xC000023A)\n#define STATUS_CONNECTION_ACTIVE         ((NTSTATUS) 0xC000023B)\n#define STATUS_NETWORK_UNREACHABLE       ((NTSTATUS) 0xC000023C)\n#define STATUS_HOST_UNREACHABLE          ((NTSTATUS) 0xC000023D)\n#define STATUS_PROTOCOL_UNREACHABLE      ((NTSTATUS) 0xC000023E)\n#define STATUS_PORT_UNREACHABLE          ((NTSTATUS) 0xC000023F)\n#define STATUS_REQUEST_ABORTED           ((NTSTATUS) 0xC0000240)\n#define STATUS_CONNECTION_ABORTED        ((NTSTATUS) 0xC0000241)\n#define STATUS_BAD_COMPRESSION_BUFFER    ((NTSTATUS) 0xC0000242)\n#define STATUS_USER_MAPPED_FILE          ((NTSTATUS) 0xC0000243)\n#define STATUS_AUDIT_FAILED              ((NTSTATUS) 0xC0000244)\n#define STATUS_TIMER_RESOLUTION_NOT_SET  ((NTSTATUS) 0xC0000245)\n#define STATUS_CONNECTION_COUNT_LIMIT    ((NTSTATUS) 0xC0000246)\n#define STATUS_LOGIN_TIME_RESTRICTION    ((NTSTATUS) 0xC0000247)\n#define STATUS_LOGIN_WKSTA_RESTRICTION   ((NTSTATUS) 0xC0000248)\n#define STATUS_IMAGE_MP_UP_MISMATCH      ((NTSTATUS) 0xC0000249)\n#define STATUS_INSUFFICIENT_LOGON_INFO   ((NTSTATUS) 0xC0000250)\n#define STATUS_BAD_DLL_ENTRYPOINT        ((NTSTATUS) 0xC0000251)\n#define STATUS_BAD_SERVICE_ENTRYPOINT    ((NTSTATUS) 0xC0000252)\n#define STATUS_LPC_REPLY_LOST            ((NTSTATUS) 0xC0000253)\n#define STATUS_IP_ADDRESS_CONFLICT1      ((NTSTATUS) 0xC0000254)\n#define STATUS_IP_ADDRESS_CONFLICT2      ((NTSTATUS) 0xC0000255)\n#define STATUS_REGISTRY_QUOTA_LIMIT      ((NTSTATUS) 0xC0000256)\n#define STATUS_PATH_NOT_COVERED          ((NTSTATUS) 0xC0000257)\n#define STATUS_NO_CALLBACK_ACTIVE        ((NTSTATUS) 0xC0000258)\n#define STATUS_LICENSE_QUOTA_EXCEEDED    ((NTSTATUS) 0xC0000259)\n#define STATUS_PWD_TOO_SHORT             ((NTSTATUS) 0xC000025A)\n#define STATUS_PWD_TOO_RECENT            ((NTSTATUS) 0xC000025B)\n#define STATUS_PWD_HISTORY_CONFLICT      ((NTSTATUS) 0xC000025C)\n#define STATUS_PLUGPLAY_NO_DEVICE        ((NTSTATUS) 0xC000025E)\n#define STATUS_UNSUPPORTED_COMPRESSION   ((NTSTATUS) 0xC000025F)\n#define STATUS_INVALID_HW_PROFILE        ((NTSTATUS) 0xC0000260)\n#define STATUS_INVALID_PLUGPLAY_DEVICE_PATH ((NTSTATUS) 0xC0000261)\n#define STATUS_DRIVER_ORDINAL_NOT_FOUND  ((NTSTATUS) 0xC0000262)\n#define STATUS_DRIVER_ENTRYPOINT_NOT_FOUND ((NTSTATUS) 0xC0000263)\n#define STATUS_RESOURCE_NOT_OWNED        ((NTSTATUS) 0xC0000264)\n#define STATUS_TOO_MANY_LINKS            ((NTSTATUS) 0xC0000265)\n#define STATUS_QUOTA_LIST_INCONSISTENT   ((NTSTATUS) 0xC0000266)\n#define STATUS_FILE_IS_OFFLINE           ((NTSTATUS) 0xC0000267)\n#define STATUS_EVALUATION_EXPIRATION     ((NTSTATUS) 0xC0000268)\n#define STATUS_ILLEGAL_DLL_RELOCATION    ((NTSTATUS) 0xC0000269)\n#define STATUS_LICENSE_VIOLATION         ((NTSTATUS) 0xC000026A)\n#define STATUS_DLL_INIT_FAILED_LOGOFF    ((NTSTATUS) 0xC000026B)\n#define STATUS_DRIVER_UNABLE_TO_LOAD     ((NTSTATUS) 0xC000026C)\n#define STATUS_DFS_UNAVAILABLE           ((NTSTATUS) 0xC000026D)\n#define STATUS_VOLUME_DISMOUNTED         ((NTSTATUS) 0xC000026E)\n#define STATUS_WX86_INTERNAL_ERROR       ((NTSTATUS) 0xC000026F)\n#define STATUS_WX86_FLOAT_STACK_CHECK    ((NTSTATUS) 0xC0000270)\n#define STATUS_VALIDATE_CONTINUE         ((NTSTATUS) 0xC0000271)\n#define STATUS_NO_MATCH                  ((NTSTATUS) 0xC0000272)\n#define STATUS_NO_MORE_MATCHES           ((NTSTATUS) 0xC0000273)\n#define STATUS_NOT_A_REPARSE_POINT       ((NTSTATUS) 0xC0000275)\n#define STATUS_IO_REPARSE_TAG_INVALID    ((NTSTATUS) 0xC0000276)\n#define STATUS_IO_REPARSE_TAG_MISMATCH   ((NTSTATUS) 0xC0000277)\n#define STATUS_IO_REPARSE_DATA_INVALID   ((NTSTATUS) 0xC0000278)\n#define STATUS_IO_REPARSE_TAG_NOT_HANDLED       ((NTSTATUS) 0xC0000279)\n#define STATUS_REPARSE_POINT_NOT_RESOLVED       ((NTSTATUS) 0xC0000280)\n#define STATUS_DIRECTORY_IS_A_REPARSE_POINT     ((NTSTATUS) 0xC0000281)\n#define STATUS_RANGE_LIST_CONFLICT       ((NTSTATUS) 0xC0000282)\n#define STATUS_SOURCE_ELEMENT_EMPTY      ((NTSTATUS) 0xC0000283)\n#define STATUS_DESTINATION_ELEMENT_FULL  ((NTSTATUS) 0xC0000284)\n#define STATUS_ILLEGAL_ELEMENT_ADDRESS   ((NTSTATUS) 0xC0000285)\n#define STATUS_MAGAZINE_NOT_PRESENT      ((NTSTATUS) 0xC0000286)\n#define STATUS_REINITIALIZATION_NEEDED   ((NTSTATUS) 0xC0000287)\n#define STATUS_ENCRYPTION_FAILED         ((NTSTATUS) 0xC000028A)\n#define STATUS_DECRYPTION_FAILED         ((NTSTATUS) 0xC000028B)\n#define STATUS_RANGE_NOT_FOUND           ((NTSTATUS) 0xC000028C)\n#define STATUS_NO_RECOVERY_POLICY        ((NTSTATUS) 0xC000028D)\n#define STATUS_NO_EFS                    ((NTSTATUS) 0xC000028E)\n#define STATUS_WRONG_EFS                 ((NTSTATUS) 0xC000028F)\n#define STATUS_NO_USER_KEYS              ((NTSTATUS) 0xC0000290)\n#define STATUS_FILE_NOT_ENCRYPTED        ((NTSTATUS) 0xC0000291)\n#define STATUS_NOT_EXPORT_FORMAT         ((NTSTATUS) 0xC0000292)\n#define STATUS_FILE_ENCRYPTED            ((NTSTATUS) 0xC0000293)\n#define STATUS_WMI_GUID_NOT_FOUND        ((NTSTATUS) 0xC0000295)\n#define STATUS_WMI_INSTANCE_NOT_FOUND    ((NTSTATUS) 0xC0000296)\n#define STATUS_WMI_ITEMID_NOT_FOUND      ((NTSTATUS) 0xC0000297)\n#define STATUS_WMI_TRY_AGAIN             ((NTSTATUS) 0xC0000298)\n#define STATUS_SHARED_POLICY             ((NTSTATUS) 0xC0000299)\n#define STATUS_POLICY_OBJECT_NOT_FOUND   ((NTSTATUS) 0xC000029A)\n#define STATUS_POLICY_ONLY_IN_DS         ((NTSTATUS) 0xC000029B)\n#define STATUS_VOLUME_NOT_UPGRADED       ((NTSTATUS) 0xC000029C)\n#define STATUS_REMOTE_STORAGE_NOT_ACTIVE ((NTSTATUS) 0xC000029D)\n#define STATUS_REMOTE_STORAGE_MEDIA_ERROR       ((NTSTATUS) 0xC000029E)\n#define STATUS_NO_TRACKING_SERVICE       ((NTSTATUS) 0xC000029F)\n#define STATUS_SERVER_SID_MISMATCH       ((NTSTATUS) 0xC00002A0)\n#define STATUS_DS_NO_ATTRIBUTE_OR_VALUE  ((NTSTATUS) 0xC00002A1)\n#define STATUS_DS_INVALID_ATTRIBUTE_SYNTAX      ((NTSTATUS) 0xC00002A2)\n#define STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED      ((NTSTATUS) 0xC00002A3)\n#define STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS     ((NTSTATUS) 0xC00002A4)\n#define STATUS_DS_BUSY                   ((NTSTATUS) 0xC00002A5)\n#define STATUS_DS_UNAVAILABLE            ((NTSTATUS) 0xC00002A6)\n#define STATUS_DS_NO_RIDS_ALLOCATED      ((NTSTATUS) 0xC00002A7)\n#define STATUS_DS_NO_MORE_RIDS           ((NTSTATUS) 0xC00002A8)\n#define STATUS_DS_INCORRECT_ROLE_OWNER   ((NTSTATUS) 0xC00002A9)\n#define STATUS_DS_RIDMGR_INIT_ERROR      ((NTSTATUS) 0xC00002AA)\n#define STATUS_DS_OBJ_CLASS_VIOLATION    ((NTSTATUS) 0xC00002AB)\n#define STATUS_DS_CANT_ON_NON_LEAF       ((NTSTATUS) 0xC00002AC)\n#define STATUS_DS_CANT_ON_RDN            ((NTSTATUS) 0xC00002AD)\n#define STATUS_DS_CANT_MOD_OBJ_CLASS     ((NTSTATUS) 0xC00002AE)\n#define STATUS_DS_CROSS_DOM_MOVE_FAILED  ((NTSTATUS) 0xC00002AF)\n#define STATUS_DS_GC_NOT_AVAILABLE       ((NTSTATUS) 0xC00002B0)\n#define STATUS_DIRECTORY_SERVICE_REQUIRED       ((NTSTATUS) 0xC00002B1)\n#define STATUS_REPARSE_ATTRIBUTE_CONFLICT       ((NTSTATUS) 0xC00002B2)\n#define STATUS_CANT_ENABLE_DENY_ONLY     ((NTSTATUS) 0xC00002B3)\n#define STATUS_FLOAT_MULTIPLE_FAULTS     ((NTSTATUS) 0xC00002B4)\n#define STATUS_FLOAT_MULTIPLE_TRAPS      ((NTSTATUS) 0xC00002B5)\n#define STATUS_DEVICE_REMOVED            ((NTSTATUS) 0xC00002B6)\n#define STATUS_JOURNAL_DELETE_IN_PROGRESS       ((NTSTATUS) 0xC00002B7)\n#define STATUS_JOURNAL_NOT_ACTIVE        ((NTSTATUS) 0xC00002B8)\n#define STATUS_NOINTERFACE               ((NTSTATUS) 0xC00002B9)\n#define STATUS_DS_ADMIN_LIMIT_EXCEEDED   ((NTSTATUS) 0xC00002C1)\n#define STATUS_DRIVER_FAILED_SLEEP       ((NTSTATUS) 0xC00002C2)\n#define STATUS_MUTUAL_AUTHENTICATION_FAILED     ((NTSTATUS) 0xC00002C3)\n#define STATUS_CORRUPT_SYSTEM_FILE       ((NTSTATUS) 0xC00002C4)\n#define STATUS_DATATYPE_MISALIGNMENT_ERROR      ((NTSTATUS) 0xC00002C5)\n#define STATUS_WMI_READ_ONLY             ((NTSTATUS) 0xC00002C6)\n#define STATUS_WMI_SET_FAILURE           ((NTSTATUS) 0xC00002C7)\n#define STATUS_COMMITMENT_MINIMUM        ((NTSTATUS) 0xC00002C8)\n#define STATUS_REG_NAT_CONSUMPTION       ((NTSTATUS) 0xC00002C9)\n#define STATUS_TRANSPORT_FULL            ((NTSTATUS) 0xC00002CA)\n#define STATUS_DS_SAM_INIT_FAILURE       ((NTSTATUS) 0xC00002CB)\n#define STATUS_ONLY_IF_CONNECTED         ((NTSTATUS) 0xC00002CC)\n#define STATUS_DS_SENSITIVE_GROUP_VIOLATION     ((NTSTATUS) 0xC00002CD)\n#define STATUS_PNP_RESTART_ENUMERATION   ((NTSTATUS) 0xC00002CE)\n#define STATUS_JOURNAL_ENTRY_DELETED     ((NTSTATUS) 0xC00002CF)\n#define STATUS_DS_CANT_MOD_PRIMARYGROUPID       ((NTSTATUS) 0xC00002D0)\n#define STATUS_SYSTEM_IMAGE_BAD_SIGNATURE ((NTSTATUS) 0xC00002D1)\n#define STATUS_PNP_REBOOT_REQUIRED       ((NTSTATUS) 0xC00002D2)\n#define STATUS_POWER_STATE_INVALID       ((NTSTATUS) 0xC00002D3)\n#define STATUS_DS_INVALID_GROUP_TYPE     ((NTSTATUS) 0xC00002D4)\n#define STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN    ((NTSTATUS) 0xC00002D5)\n#define STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN     ((NTSTATUS) 0xC00002D6)\n#define STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER ((NTSTATUS) 0xC00002D7)\n#define STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER     ((NTSTATUS) 0xC00002D8)\n#define STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER      ((NTSTATUS) 0xC00002D9)\n#define STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER   ((NTSTATUS) 0xC00002DA)\n#define STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER      ((NTSTATUS) 0xC00002DB)\n#define STATUS_DS_HAVE_PRIMARY_MEMBERS   ((NTSTATUS) 0xC00002DC)\n#define STATUS_WMI_NOT_SUPPORTED         ((NTSTATUS) 0xC00002DD)\n#define STATUS_INSUFFICIENT_POWER        ((NTSTATUS) 0xC00002DE)\n#define STATUS_SAM_NEED_BOOTKEY_PASSWORD ((NTSTATUS) 0xC00002DF)\n#define STATUS_SAM_NEED_BOOTKEY_FLOPPY   ((NTSTATUS) 0xC00002E0)\n#define STATUS_DS_CANT_START             ((NTSTATUS) 0xC00002E1)\n#define STATUS_DS_INIT_FAILURE           ((NTSTATUS) 0xC00002E2)\n#define STATUS_SAM_INIT_FAILURE          ((NTSTATUS) 0xC00002E3)\n#define STATUS_DS_GC_REQUIRED            ((NTSTATUS) 0xC00002E4)\n#define STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY    ((NTSTATUS) 0xC00002E5)\n#define STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS    ((NTSTATUS) 0xC00002E6)\n#define STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED        ((NTSTATUS) 0xC00002E7)\n#define STATUS_MULTIPLE_FAULT_VIOLATION  ((NTSTATUS) 0xC00002E8)\n#define STATUS_CURRENT_DOMAIN_NOT_ALLOWED       ((NTSTATUS) 0xC00002E9)\n#define STATUS_CANNOT_MAKE               ((NTSTATUS) 0xC00002EA)\n#define STATUS_SYSTEM_SHUTDOWN           ((NTSTATUS) 0xC00002EB)\n#define STATUS_DS_INIT_FAILURE_CONSOLE   ((NTSTATUS) 0xC00002EC)\n#define STATUS_DS_SAM_INIT_FAILURE_CONSOLE      ((NTSTATUS) 0xC00002ED)\n#define STATUS_UNFINISHED_CONTEXT_DELETED       ((NTSTATUS) 0xC00002EE)\n#define STATUS_NO_TGT_REPLY              ((NTSTATUS) 0xC00002EF)\n#define STATUS_OBJECTID_NOT_FOUND        ((NTSTATUS) 0xC00002F0)\n#define STATUS_NO_IP_ADDRESSES           ((NTSTATUS) 0xC00002F1)\n#define STATUS_WRONG_CREDENTIAL_HANDLE   ((NTSTATUS) 0xC00002F2)\n#define STATUS_CRYPTO_SYSTEM_INVALID     ((NTSTATUS) 0xC00002F3)\n#define STATUS_MAX_REFERRALS_EXCEEDED    ((NTSTATUS) 0xC00002F4)\n#define STATUS_MUST_BE_KDC               ((NTSTATUS) 0xC00002F5)\n#define STATUS_STRONG_CRYPTO_NOT_SUPPORTED      ((NTSTATUS) 0xC00002F6)\n#define STATUS_TOO_MANY_PRINCIPALS       ((NTSTATUS) 0xC00002F7)\n#define STATUS_NO_PA_DATA                ((NTSTATUS) 0xC00002F8)\n#define STATUS_PKINIT_NAME_MISMATCH      ((NTSTATUS) 0xC00002F9)\n#define STATUS_SMARTCARD_LOGON_REQUIRED  ((NTSTATUS) 0xC00002FA)\n#define STATUS_KDC_INVALID_REQUEST       ((NTSTATUS) 0xC00002FB)\n#define STATUS_KDC_UNABLE_TO_REFER       ((NTSTATUS) 0xC00002FC)\n#define STATUS_KDC_UNKNOWN_ETYPE         ((NTSTATUS) 0xC00002FD)\n#define STATUS_SHUTDOWN_IN_PROGRESS      ((NTSTATUS) 0xC00002FE)\n#define STATUS_SERVER_SHUTDOWN_IN_PROGRESS      ((NTSTATUS) 0xC00002FF)\n#define STATUS_NOT_SUPPORTED_ON_SBS      ((NTSTATUS) 0xC0000300)\n#define STATUS_WMI_GUID_DISCONNECTED     ((NTSTATUS) 0xC0000301)\n#define STATUS_WMI_ALREADY_DISABLED      ((NTSTATUS) 0xC0000302)\n#define STATUS_WMI_ALREADY_ENABLED       ((NTSTATUS) 0xC0000303)\n#define STATUS_MFT_TOO_FRAGMENTED        ((NTSTATUS) 0xC0000304)\n#define STATUS_COPY_PROTECTION_FAILURE   ((NTSTATUS) 0xC0000305)\n#define STATUS_CSS_AUTHENTICATION_FAILURE       ((NTSTATUS) 0xC0000306)\n#define STATUS_CSS_KEY_NOT_PRESENT       ((NTSTATUS) 0xC0000307)\n#define STATUS_CSS_KEY_NOT_ESTABLISHED   ((NTSTATUS) 0xC0000308)\n#define STATUS_CSS_SCRAMBLED_SECTOR      ((NTSTATUS) 0xC0000309)\n#define STATUS_CSS_REGION_MISMATCH       ((NTSTATUS) 0xC000030A)\n#define STATUS_CSS_RESETS_EXHAUSTED      ((NTSTATUS) 0xC000030B)\n#define STATUS_PKINIT_FAILURE            ((NTSTATUS) 0xC0000320)\n#define STATUS_SMARTCARD_SUBSYSTEM_FAILURE      ((NTSTATUS) 0xC0000321)\n#define STATUS_NO_KERB_KEY               ((NTSTATUS) 0xC0000322)\n#define STATUS_HOST_DOWN                 ((NTSTATUS) 0xC0000350)\n#define STATUS_UNSUPPORTED_PREAUTH       ((NTSTATUS) 0xC0000351)\n#define STATUS_EFS_ALG_BLOB_TOO_BIG      ((NTSTATUS) 0xC0000352)\n#define STATUS_PORT_NOT_SET              ((NTSTATUS) 0xC0000353)\n#define STATUS_DEBUGGER_INACTIVE         ((NTSTATUS) 0xC0000354)\n#define STATUS_DS_VERSION_CHECK_FAILURE  ((NTSTATUS) 0xC0000355)\n#define STATUS_AUDITING_DISABLED         ((NTSTATUS) 0xC0000356)\n#define STATUS_PRENT4_MACHINE_ACCOUNT    ((NTSTATUS) 0xC0000357)\n#define STATUS_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER ((NTSTATUS) 0xC0000358)\n#define STATUS_INVALID_IMAGE_WIN_32      ((NTSTATUS) 0xC0000359)\n#define STATUS_INVALID_IMAGE_WIN_64      ((NTSTATUS) 0xC000035A)\n#define STATUS_BAD_BINDINGS              ((NTSTATUS) 0xC000035B)\n#define STATUS_NETWORK_SESSION_EXPIRED   ((NTSTATUS) 0xC000035C)\n#define STATUS_APPHELP_BLOCK             ((NTSTATUS) 0xC000035D)\n#define STATUS_ALL_SIDS_FILTERED         ((NTSTATUS) 0xC000035E)\n#define STATUS_NOT_SAFE_MODE_DRIVER      ((NTSTATUS) 0xC000035F)\n#define STATUS_ACCESS_DISABLED_BY_POLICY_DEFAULT        ((NTSTATUS) 0xC0000361)\n#define STATUS_ACCESS_DISABLED_BY_POLICY_PATH   ((NTSTATUS) 0xC0000362)\n#define STATUS_ACCESS_DISABLED_BY_POLICY_PUBLISHER      ((NTSTATUS) 0xC0000363)\n#define STATUS_ACCESS_DISABLED_BY_POLICY_OTHER  ((NTSTATUS) 0xC0000364)\n#define STATUS_FAILED_DRIVER_ENTRY       ((NTSTATUS) 0xC0000365)\n#define STATUS_DEVICE_ENUMERATION_ERROR  ((NTSTATUS) 0xC0000366)\n#define STATUS_WAIT_FOR_OPLOCK           ((NTSTATUS) 0x00000367)\n#define STATUS_MOUNT_POINT_NOT_RESOLVED  ((NTSTATUS) 0xC0000368)\n#define STATUS_INVALID_DEVICE_OBJECT_PARAMETER ((NTSTATUS) 0xC0000369)\n/* STATUS_MCA_OCCURED is not a typo, as per Microsoft's headers */\n#define STATUS_MCA_OCCURED               ((NTSTATUS) 0xC000036A)\n#define STATUS_DRIVER_BLOCKED_CRITICAL   ((NTSTATUS) 0xC000036B)\n#define STATUS_DRIVER_BLOCKED            ((NTSTATUS) 0xC000036C)\n#define STATUS_DRIVER_DATABASE_ERROR     ((NTSTATUS) 0xC000036D)\n#define STATUS_SYSTEM_HIVE_TOO_LARGE     ((NTSTATUS) 0xC000036E)\n#define STATUS_INVALID_IMPORT_OF_NON_DLL ((NTSTATUS) 0xC000036F)\n#define STATUS_SMARTCARD_WRONG_PIN       ((NTSTATUS) 0xC0000380)\n#define STATUS_SMARTCARD_CARD_BLOCKED    ((NTSTATUS) 0xC0000381)\n#define STATUS_SMARTCARD_CARD_NOT_AUTHENTICATED ((NTSTATUS) 0xC0000382)\n#define STATUS_SMARTCARD_NO_CARD         ((NTSTATUS) 0xC0000383)\n#define STATUS_SMARTCARD_NO_KEY_CONTAINER       ((NTSTATUS) 0xC0000384)\n#define STATUS_SMARTCARD_NO_CERTIFICATE  ((NTSTATUS) 0xC0000385)\n#define STATUS_SMARTCARD_NO_KEYSET       ((NTSTATUS) 0xC0000386)\n#define STATUS_SMARTCARD_IO_ERROR        ((NTSTATUS) 0xC0000387)\n#define STATUS_DOWNGRADE_DETECTED        ((NTSTATUS) 0xC0000388)\n#define STATUS_SMARTCARD_CERT_REVOKED    ((NTSTATUS) 0xC0000389)\n#define STATUS_ISSUING_CA_UNTRUSTED      ((NTSTATUS) 0xC000038A)\n#define STATUS_REVOCATION_OFFLINE_C      ((NTSTATUS) 0xC000038B)\n#define STATUS_PKINIT_CLIENT_FAILURE     ((NTSTATUS) 0xC000038C)\n#define STATUS_SMARTCARD_CERT_EXPIRED    ((NTSTATUS) 0xC000038D)\n#define STATUS_DRIVER_FAILED_PRIOR_UNLOAD ((NTSTATUS) 0xC000038E)\n#define STATUS_SMARTCARD_SILENT_CONTEXT  ((NTSTATUS) 0xC000038F)\n#define STATUS_PER_USER_TRUST_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000401)\n#define STATUS_ALL_USER_TRUST_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000402)\n#define STATUS_USER_DELETE_TRUST_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000403)\n#define STATUS_DS_NAME_NOT_UNIQUE        ((NTSTATUS) 0xC0000404)\n#define STATUS_DS_DUPLICATE_ID_FOUND     ((NTSTATUS) 0xC0000405)\n#define STATUS_DS_GROUP_CONVERSION_ERROR ((NTSTATUS) 0xC0000406)\n#define STATUS_VOLSNAP_PREPARE_HIBERNATE ((NTSTATUS) 0xC0000407)\n#define STATUS_USER2USER_REQUIRED        ((NTSTATUS) 0xC0000408)\n#define STATUS_STACK_BUFFER_OVERRUN      ((NTSTATUS) 0xC0000409)\n#define STATUS_NO_S4U_PROT_SUPPORT       ((NTSTATUS) 0xC000040A)\n#define STATUS_CROSSREALM_DELEGATION_FAILURE ((NTSTATUS) 0xC000040B)\n#define STATUS_REVOCATION_OFFLINE_KDC    ((NTSTATUS) 0xC000040C)\n#define STATUS_ISSUING_CA_UNTRUSTED_KDC  ((NTSTATUS) 0xC000040D)\n#define STATUS_KDC_CERT_EXPIRED          ((NTSTATUS) 0xC000040E)\n#define STATUS_KDC_CERT_REVOKED          ((NTSTATUS) 0xC000040F)\n#define STATUS_PARAMETER_QUOTA_EXCEEDED  ((NTSTATUS) 0xC0000410)\n#define STATUS_HIBERNATION_FAILURE       ((NTSTATUS) 0xC0000411)\n#define STATUS_DELAY_LOAD_FAILED         ((NTSTATUS) 0xC0000412)\n#define STATUS_AUTHENTICATION_FIREWALL_FAILED ((NTSTATUS) 0xC0000413)\n#define STATUS_VDM_DISALLOWED            ((NTSTATUS) 0xC0000414)\n#define STATUS_HUNG_DISPLAY_DRIVER_THREAD ((NTSTATUS) 0xC0000415)\n#define STATUS_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE ((NTSTATUS) 0xC0000416)\n#define STATUS_INVALID_CRUNTIME_PARAMETER   ((NTSTATUS) 0xC0000417)\n#define STATUS_NTLM_BLOCKED                 ((NTSTATUS) 0xC0000418)\n#define STATUS_ASSERTION_FAILURE            ((NTSTATUS) 0xC0000420)\n#define STATUS_VERIFIER_STOP                ((NTSTATUS) 0xC0000421)\n#define STATUS_CALLBACK_POP_STACK           ((NTSTATUS) 0xC0000423)\n#define STATUS_INCOMPATIBLE_DRIVER_BLOCKED  ((NTSTATUS) 0xC0000424)\n#define STATUS_HIVE_UNLOADED                ((NTSTATUS) 0xC0000425)\n#define STATUS_COMPRESSION_DISABLED         ((NTSTATUS) 0xC0000426)\n#define STATUS_FILE_SYSTEM_LIMITATION       ((NTSTATUS) 0xC0000427)\n#define STATUS_INVALID_IMAGE_HASH           ((NTSTATUS) 0xC0000428)\n#define STATUS_NOT_CAPABLE                  ((NTSTATUS) 0xC0000429)\n#define STATUS_REQUEST_OUT_OF_SEQUENCE      ((NTSTATUS) 0xC000042A)\n#define STATUS_IMPLEMENTATION_LIMIT         ((NTSTATUS) 0xC000042B)\n#define STATUS_ELEVATION_REQUIRED           ((NTSTATUS) 0xC000042C)\n#define STATUS_BEYOND_VDL                   ((NTSTATUS) 0xC0000432)\n#define STATUS_ENCOUNTERED_WRITE_IN_PROGRESS ((NTSTATUS) 0xC0000433)\n#define STATUS_PTE_CHANGED                  ((NTSTATUS) 0xC0000434)\n#define STATUS_PURGE_FAILED                 ((NTSTATUS) 0xC0000435)\n#define STATUS_CRED_REQUIRES_CONFIRMATION   ((NTSTATUS) 0xC0000440)\n#define STATUS_CS_ENCRYPTION_INVALID_SERVER_RESPONSE ((NTSTATUS) 0xC0000441)\n#define STATUS_CS_ENCRYPTION_UNSUPPORTED_SERVER ((NTSTATUS) 0xC0000442)\n#define STATUS_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE ((NTSTATUS) 0xC0000443)\n#define STATUS_CS_ENCRYPTION_NEW_ENCRYPTED_FILE ((NTSTATUS) 0xC0000444)\n#define STATUS_CS_ENCRYPTION_FILE_NOT_CSE   ((NTSTATUS) 0xC0000445)\n#define STATUS_INVALID_LABEL                ((NTSTATUS) 0xC0000446)\n#define STATUS_DRIVER_PROCESS_TERMINATED    ((NTSTATUS) 0xC0000450)\n#define STATUS_AMBIGUOUS_SYSTEM_DEVICE      ((NTSTATUS) 0xC0000451)\n#define STATUS_SYSTEM_DEVICE_NOT_FOUND      ((NTSTATUS) 0xC0000452)\n#define STATUS_RESTART_BOOT_APPLICATION     ((NTSTATUS) 0xC0000453)\n#define STATUS_INVALID_TASK_NAME            ((NTSTATUS) 0xC0000500)\n#define STATUS_INVALID_TASK_INDEX           ((NTSTATUS) 0xC0000501)\n#define STATUS_THREAD_ALREADY_IN_TASK       ((NTSTATUS) 0xC0000502)\n#define STATUS_CALLBACK_BYPASS              ((NTSTATUS) 0xC0000503)\n#define STATUS_PORT_CLOSED                  ((NTSTATUS) 0xC0000700)\n#define STATUS_MESSAGE_LOST                 ((NTSTATUS) 0xC0000701)\n#define STATUS_INVALID_MESSAGE              ((NTSTATUS) 0xC0000702)\n#define STATUS_REQUEST_CANCELED             ((NTSTATUS) 0xC0000703)\n#define STATUS_RECURSIVE_DISPATCH           ((NTSTATUS) 0xC0000704)\n#define STATUS_LPC_RECEIVE_BUFFER_EXPECTED  ((NTSTATUS) 0xC0000705)\n#define STATUS_LPC_INVALID_CONNECTION_USAGE ((NTSTATUS) 0xC0000706)\n#define STATUS_LPC_REQUESTS_NOT_ALLOWED     ((NTSTATUS) 0xC0000707)\n#define STATUS_RESOURCE_IN_USE              ((NTSTATUS) 0xC0000708)\n#define STATUS_HARDWARE_MEMORY_ERROR        ((NTSTATUS) 0xC0000709)\n#define STATUS_THREADPOOL_HANDLE_EXCEPTION  ((NTSTATUS) 0xC000070A)\n#define STATUS_THREADPOOL_SET_EVENT_ON_COMPLETION_FAILED ((NTSTATUS) 0xC000070B)\n#define STATUS_THREADPOOL_RELEASE_SEMAPHORE_ON_COMPLETION_FAILED ((NTSTATUS) 0xC000070C)\n#define STATUS_THREADPOOL_RELEASE_MUTEX_ON_COMPLETION_FAILED ((NTSTATUS) 0xC000070D)\n#define STATUS_THREADPOOL_FREE_LIBRARY_ON_COMPLETION_FAILED ((NTSTATUS) 0xC000070E)\n#define STATUS_THREADPOOL_RELEASED_DURING_OPERATION ((NTSTATUS) 0xC000070F)\n#define STATUS_CALLBACK_RETURNED_WHILE_IMPERSONATING ((NTSTATUS) 0xC0000710)\n#define STATUS_APC_RETURNED_WHILE_IMPERSONATING ((NTSTATUS) 0xC0000711)\n#define STATUS_PROCESS_IS_PROTECTED         ((NTSTATUS) 0xC0000712)\n#define STATUS_MCA_EXCEPTION                ((NTSTATUS) 0xC0000713)\n#define STATUS_CERTIFICATE_MAPPING_NOT_UNIQUE ((NTSTATUS) 0xC0000714)\n#define STATUS_SYMLINK_CLASS_DISABLED       ((NTSTATUS) 0xC0000715)\n#define STATUS_INVALID_IDN_NORMALIZATION    ((NTSTATUS) 0xC0000716)\n#define STATUS_NO_UNICODE_TRANSLATION       ((NTSTATUS) 0xC0000717)\n#define STATUS_ALREADY_REGISTERED           ((NTSTATUS) 0xC0000718)\n#define STATUS_CONTEXT_MISMATCH             ((NTSTATUS) 0xC0000719)\n#define STATUS_PORT_ALREADY_HAS_COMPLETION_LIST ((NTSTATUS) 0xC000071A)\n#define STATUS_CALLBACK_RETURNED_THREAD_PRIORITY ((NTSTATUS) 0xC000071B)\n#define STATUS_INVALID_THREAD               ((NTSTATUS) 0xC000071C)\n#define STATUS_CALLBACK_RETURNED_TRANSACTION ((NTSTATUS) 0xC000071D)\n#define STATUS_CALLBACK_RETURNED_LDR_LOCK   ((NTSTATUS) 0xC000071E)\n#define STATUS_CALLBACK_RETURNED_LANG       ((NTSTATUS) 0xC000071F)\n#define STATUS_CALLBACK_RETURNED_PRI_BACK   ((NTSTATUS) 0xC0000720)\n#define STATUS_CALLBACK_RETURNED_THREAD_AFFINITY ((NTSTATUS) 0xC0000721)\n#define STATUS_DISK_REPAIR_DISABLED         ((NTSTATUS) 0xC0000800)\n#define STATUS_DS_DOMAIN_RENAME_IN_PROGRESS ((NTSTATUS) 0xC0000801)\n#define STATUS_DISK_QUOTA_EXCEEDED          ((NTSTATUS) 0xC0000802)\n#define STATUS_CONTENT_BLOCKED              ((NTSTATUS) 0xC0000804)\n#define STATUS_BAD_CLUSTERS                 ((NTSTATUS) 0xC0000805)\n#define STATUS_VOLUME_DIRTY                 ((NTSTATUS) 0xC0000806)\n#define STATUS_FILE_CHECKED_OUT             ((NTSTATUS) 0xC0000901)\n#define STATUS_CHECKOUT_REQUIRED            ((NTSTATUS) 0xC0000902)\n#define STATUS_BAD_FILE_TYPE                ((NTSTATUS) 0xC0000903)\n#define STATUS_FILE_TOO_LARGE               ((NTSTATUS) 0xC0000904)\n#define STATUS_FORMS_AUTH_REQUIRED          ((NTSTATUS) 0xC0000905)\n#define STATUS_VIRUS_INFECTED               ((NTSTATUS) 0xC0000906)\n#define STATUS_VIRUS_DELETED                ((NTSTATUS) 0xC0000907)\n#define STATUS_BAD_MCFG_TABLE               ((NTSTATUS) 0xC0000908)\n\n#define STATUS_WOW_ASSERTION             ((NTSTATUS) 0xC0009898)\n\n#define STATUS_INVALID_SIGNATURE         ((NTSTATUS) 0xC000A000)\n#define STATUS_HMAC_NOT_SUPPORTED        ((NTSTATUS) 0xC000A001)\n#define STATUS_AUTH_TAG_MISMATCH         ((NTSTATUS) 0xC000A002)\n\n#define RPC_NT_INVALID_STRING_BINDING    ((NTSTATUS) 0xC0020001)\n#define RPC_NT_WRONG_KIND_OF_BINDING     ((NTSTATUS) 0xC0020002)\n#define RPC_NT_INVALID_BINDING           ((NTSTATUS) 0xC0020003)\n#define RPC_NT_PROTSEQ_NOT_SUPPORTED     ((NTSTATUS) 0xC0020004)\n#define RPC_NT_INVALID_RPC_PROTSEQ       ((NTSTATUS) 0xC0020005)\n#define RPC_NT_INVALID_STRING_UUID       ((NTSTATUS) 0xC0020006)\n#define RPC_NT_INVALID_ENDPOINT_FORMAT   ((NTSTATUS) 0xC0020007)\n#define RPC_NT_INVALID_NET_ADDR          ((NTSTATUS) 0xC0020008)\n#define RPC_NT_NO_ENDPOINT_FOUND         ((NTSTATUS) 0xC0020009)\n#define RPC_NT_INVALID_TIMEOUT           ((NTSTATUS) 0xC002000A)\n#define RPC_NT_OBJECT_NOT_FOUND          ((NTSTATUS) 0xC002000B)\n#define RPC_NT_ALREADY_REGISTERED        ((NTSTATUS) 0xC002000C)\n#define RPC_NT_TYPE_ALREADY_REGISTERED   ((NTSTATUS) 0xC002000D)\n#define RPC_NT_ALREADY_LISTENING         ((NTSTATUS) 0xC002000E)\n#define RPC_NT_NO_PROTSEQS_REGISTERED    ((NTSTATUS) 0xC002000F)\n#define RPC_NT_NOT_LISTENING             ((NTSTATUS) 0xC0020010)\n#define RPC_NT_UNKNOWN_MGR_TYPE          ((NTSTATUS) 0xC0020011)\n#define RPC_NT_UNKNOWN_IF                ((NTSTATUS) 0xC0020012)\n#define RPC_NT_NO_BINDINGS               ((NTSTATUS) 0xC0020013)\n#define RPC_NT_NO_PROTSEQS               ((NTSTATUS) 0xC0020014)\n#define RPC_NT_CANT_CREATE_ENDPOINT      ((NTSTATUS) 0xC0020015)\n#define RPC_NT_OUT_OF_RESOURCES          ((NTSTATUS) 0xC0020016)\n#define RPC_NT_SERVER_UNAVAILABLE        ((NTSTATUS) 0xC0020017)\n#define RPC_NT_SERVER_TOO_BUSY           ((NTSTATUS) 0xC0020018)\n#define RPC_NT_INVALID_NETWORK_OPTIONS   ((NTSTATUS) 0xC0020019)\n#define RPC_NT_NO_CALL_ACTIVE            ((NTSTATUS) 0xC002001A)\n#define RPC_NT_CALL_FAILED               ((NTSTATUS) 0xC002001B)\n#define RPC_NT_CALL_FAILED_DNE           ((NTSTATUS) 0xC002001C)\n#define RPC_NT_PROTOCOL_ERROR            ((NTSTATUS) 0xC002001D)\n#define RPC_NT_UNSUPPORTED_TRANS_SYN     ((NTSTATUS) 0xC002001F)\n#define RPC_NT_UNSUPPORTED_TYPE          ((NTSTATUS) 0xC0020021)\n#define RPC_NT_INVALID_TAG               ((NTSTATUS) 0xC0020022)\n#define RPC_NT_INVALID_BOUND             ((NTSTATUS) 0xC0020023)\n#define RPC_NT_NO_ENTRY_NAME             ((NTSTATUS) 0xC0020024)\n#define RPC_NT_INVALID_NAME_SYNTAX       ((NTSTATUS) 0xC0020025)\n#define RPC_NT_UNSUPPORTED_NAME_SYNTAX   ((NTSTATUS) 0xC0020026)\n#define RPC_NT_UUID_NO_ADDRESS           ((NTSTATUS) 0xC0020028)\n#define RPC_NT_DUPLICATE_ENDPOINT        ((NTSTATUS) 0xC0020029)\n#define RPC_NT_UNKNOWN_AUTHN_TYPE        ((NTSTATUS) 0xC002002A)\n#define RPC_NT_MAX_CALLS_TOO_SMALL       ((NTSTATUS) 0xC002002B)\n#define RPC_NT_STRING_TOO_LONG           ((NTSTATUS) 0xC002002C)\n#define RPC_NT_PROTSEQ_NOT_FOUND         ((NTSTATUS) 0xC002002D)\n#define RPC_NT_PROCNUM_OUT_OF_RANGE      ((NTSTATUS) 0xC002002E)\n#define RPC_NT_BINDING_HAS_NO_AUTH       ((NTSTATUS) 0xC002002F)\n#define RPC_NT_UNKNOWN_AUTHN_SERVICE     ((NTSTATUS) 0xC0020030)\n#define RPC_NT_UNKNOWN_AUTHN_LEVEL       ((NTSTATUS) 0xC0020031)\n#define RPC_NT_INVALID_AUTH_IDENTITY     ((NTSTATUS) 0xC0020032)\n#define RPC_NT_UNKNOWN_AUTHZ_SERVICE     ((NTSTATUS) 0xC0020033)\n#define EPT_NT_INVALID_ENTRY             ((NTSTATUS) 0xC0020034)\n#define EPT_NT_CANT_PERFORM_OP           ((NTSTATUS) 0xC0020035)\n#define EPT_NT_NOT_REGISTERED            ((NTSTATUS) 0xC0020036)\n#define RPC_NT_NOTHING_TO_EXPORT         ((NTSTATUS) 0xC0020037)\n#define RPC_NT_INCOMPLETE_NAME           ((NTSTATUS) 0xC0020038)\n#define RPC_NT_INVALID_VERS_OPTION       ((NTSTATUS) 0xC0020039)\n#define RPC_NT_NO_MORE_MEMBERS           ((NTSTATUS) 0xC002003A)\n#define RPC_NT_NOT_ALL_OBJS_UNEXPORTED   ((NTSTATUS) 0xC002003B)\n#define RPC_NT_INTERFACE_NOT_FOUND       ((NTSTATUS) 0xC002003C)\n#define RPC_NT_ENTRY_ALREADY_EXISTS      ((NTSTATUS) 0xC002003D)\n#define RPC_NT_ENTRY_NOT_FOUND           ((NTSTATUS) 0xC002003E)\n#define RPC_NT_NAME_SERVICE_UNAVAILABLE  ((NTSTATUS) 0xC002003F)\n#define RPC_NT_INVALID_NAF_ID            ((NTSTATUS) 0xC0020040)\n#define RPC_NT_CANNOT_SUPPORT            ((NTSTATUS) 0xC0020041)\n#define RPC_NT_NO_CONTEXT_AVAILABLE      ((NTSTATUS) 0xC0020042)\n#define RPC_NT_INTERNAL_ERROR            ((NTSTATUS) 0xC0020043)\n#define RPC_NT_ZERO_DIVIDE               ((NTSTATUS) 0xC0020044)\n#define RPC_NT_ADDRESS_ERROR             ((NTSTATUS) 0xC0020045)\n#define RPC_NT_FP_DIV_ZERO               ((NTSTATUS) 0xC0020046)\n#define RPC_NT_FP_UNDERFLOW              ((NTSTATUS) 0xC0020047)\n#define RPC_NT_FP_OVERFLOW               ((NTSTATUS) 0xC0020048)\n#define RPC_NT_CALL_IN_PROGRESS          ((NTSTATUS) 0xC0020049)\n#define RPC_NT_NO_MORE_BINDINGS          ((NTSTATUS) 0xC002004A)\n#define RPC_NT_GROUP_MEMBER_NOT_FOUND    ((NTSTATUS) 0xC002004B)\n#define EPT_NT_CANT_CREATE               ((NTSTATUS) 0xC002004C)\n#define RPC_NT_INVALID_OBJECT            ((NTSTATUS) 0xC002004D)\n#define RPC_NT_NO_INTERFACES             ((NTSTATUS) 0xC002004F)\n#define RPC_NT_CALL_CANCELLED            ((NTSTATUS) 0xC0020050)\n#define RPC_NT_BINDING_INCOMPLETE        ((NTSTATUS) 0xC0020051)\n#define RPC_NT_COMM_FAILURE              ((NTSTATUS) 0xC0020052)\n#define RPC_NT_UNSUPPORTED_AUTHN_LEVEL   ((NTSTATUS) 0xC0020053)\n#define RPC_NT_NO_PRINC_NAME             ((NTSTATUS) 0xC0020054)\n#define RPC_NT_NOT_RPC_ERROR             ((NTSTATUS) 0xC0020055)\n#define RPC_NT_SEC_PKG_ERROR             ((NTSTATUS) 0xC0020057)\n#define RPC_NT_NOT_CANCELLED             ((NTSTATUS) 0xC0020058)\n#define RPC_NT_INVALID_ASYNC_HANDLE      ((NTSTATUS) 0xC0020062)\n#define RPC_NT_INVALID_ASYNC_CALL        ((NTSTATUS) 0xC0020063)\n\n#define RPC_NT_NO_MORE_ENTRIES           ((NTSTATUS) 0xC0030001)\n#define RPC_NT_SS_CHAR_TRANS_OPEN_FAIL   ((NTSTATUS) 0xC0030002)\n#define RPC_NT_SS_CHAR_TRANS_SHORT_FILE  ((NTSTATUS) 0xC0030003)\n#define RPC_NT_SS_IN_NULL_CONTEXT        ((NTSTATUS) 0xC0030004)\n#define RPC_NT_SS_CONTEXT_MISMATCH       ((NTSTATUS) 0xC0030005)\n#define RPC_NT_SS_CONTEXT_DAMAGED        ((NTSTATUS) 0xC0030006)\n#define RPC_NT_SS_HANDLES_MISMATCH       ((NTSTATUS) 0xC0030007)\n#define RPC_NT_SS_CANNOT_GET_CALL_HANDLE ((NTSTATUS) 0xC0030008)\n#define RPC_NT_NULL_REF_POINTER          ((NTSTATUS) 0xC0030009)\n#define RPC_NT_ENUM_VALUE_OUT_OF_RANGE   ((NTSTATUS) 0xC003000A)\n#define RPC_NT_BYTE_COUNT_TOO_SMALL      ((NTSTATUS) 0xC003000B)\n#define RPC_NT_BAD_STUB_DATA             ((NTSTATUS) 0xC003000C)\n#define RPC_NT_INVALID_ES_ACTION         ((NTSTATUS) 0xC0030059)\n#define RPC_NT_WRONG_ES_VERSION          ((NTSTATUS) 0xC003005A)\n#define RPC_NT_WRONG_STUB_VERSION        ((NTSTATUS) 0xC003005B)\n#define RPC_NT_INVALID_PIPE_OBJECT       ((NTSTATUS) 0xC003005C)\n#define RPC_NT_INVALID_PIPE_OPERATION    ((NTSTATUS) 0xC003005D)\n#define RPC_NT_WRONG_PIPE_VERSION        ((NTSTATUS) 0xC003005E)\n#define RPC_NT_PIPE_CLOSED               ((NTSTATUS) 0xC003005F)\n#define RPC_NT_PIPE_DISCIPLINE_ERROR     ((NTSTATUS) 0xC0030060)\n#define RPC_NT_PIPE_EMPTY                ((NTSTATUS) 0xC0030061)\n\n#define STATUS_PNP_BAD_MPS_TABLE         ((NTSTATUS) 0xC0040035)\n#define STATUS_PNP_TRANSLATION_FAILED    ((NTSTATUS) 0xC0040036)\n#define STATUS_PNP_IRQ_TRANSLATION_FAILED ((NTSTATUS) 0xC0040037)\n#define STATUS_PNP_INVALID_ID            ((NTSTATUS) 0xC0040038)\n\n#define STATUS_CTX_WINSTATION_NAME_INVALID      ((NTSTATUS) 0xC00A0001)\n#define STATUS_CTX_INVALID_PD            ((NTSTATUS) 0xC00A0002)\n#define STATUS_CTX_PD_NOT_FOUND          ((NTSTATUS) 0xC00A0003)\n#define STATUS_CTX_CLOSE_PENDING         ((NTSTATUS) 0xC00A0006)\n#define STATUS_CTX_NO_OUTBUF             ((NTSTATUS) 0xC00A0007)\n#define STATUS_CTX_MODEM_INF_NOT_FOUND   ((NTSTATUS) 0xC00A0008)\n#define STATUS_CTX_INVALID_MODEMNAME     ((NTSTATUS) 0xC00A0009)\n#define STATUS_CTX_RESPONSE_ERROR        ((NTSTATUS) 0xC00A000A)\n#define STATUS_CTX_MODEM_RESPONSE_TIMEOUT       ((NTSTATUS) 0xC00A000B)\n#define STATUS_CTX_MODEM_RESPONSE_NO_CARRIER    ((NTSTATUS) 0xC00A000C)\n#define STATUS_CTX_MODEM_RESPONSE_NO_DIALTONE   ((NTSTATUS) 0xC00A000D)\n#define STATUS_CTX_MODEM_RESPONSE_BUSY   ((NTSTATUS) 0xC00A000E)\n#define STATUS_CTX_MODEM_RESPONSE_VOICE  ((NTSTATUS) 0xC00A000F)\n#define STATUS_CTX_TD_ERROR              ((NTSTATUS) 0xC00A0010)\n#define STATUS_CTX_LICENSE_CLIENT_INVALID       ((NTSTATUS) 0xC00A0012)\n#define STATUS_CTX_LICENSE_NOT_AVAILABLE ((NTSTATUS) 0xC00A0013)\n#define STATUS_CTX_LICENSE_EXPIRED       ((NTSTATUS) 0xC00A0014)\n#define STATUS_CTX_WINSTATION_NOT_FOUND  ((NTSTATUS) 0xC00A0015)\n#define STATUS_CTX_WINSTATION_NAME_COLLISION    ((NTSTATUS) 0xC00A0016)\n#define STATUS_CTX_WINSTATION_BUSY       ((NTSTATUS) 0xC00A0017)\n#define STATUS_CTX_BAD_VIDEO_MODE        ((NTSTATUS) 0xC00A0018)\n#define STATUS_CTX_GRAPHICS_INVALID      ((NTSTATUS) 0xC00A0022)\n#define STATUS_CTX_NOT_CONSOLE           ((NTSTATUS) 0xC00A0024)\n#define STATUS_CTX_CLIENT_QUERY_TIMEOUT  ((NTSTATUS) 0xC00A0026)\n#define STATUS_CTX_CONSOLE_DISCONNECT    ((NTSTATUS) 0xC00A0027)\n#define STATUS_CTX_CONSOLE_CONNECT       ((NTSTATUS) 0xC00A0028)\n#define STATUS_CTX_SHADOW_DENIED         ((NTSTATUS) 0xC00A002A)\n#define STATUS_CTX_WINSTATION_ACCESS_DENIED     ((NTSTATUS) 0xC00A002B)\n#define STATUS_CTX_INVALID_WD            ((NTSTATUS) 0xC00A002E)\n#define STATUS_CTX_WD_NOT_FOUND          ((NTSTATUS) 0xC00A002F)\n#define STATUS_CTX_SHADOW_INVALID        ((NTSTATUS) 0xC00A0030)\n#define STATUS_CTX_SHADOW_DISABLED       ((NTSTATUS) 0xC00A0031)\n#define STATUS_RDP_PROTOCOL_ERROR        ((NTSTATUS) 0xC00A0032)\n#define STATUS_CTX_CLIENT_LICENSE_NOT_SET       ((NTSTATUS) 0xC00A0033)\n#define STATUS_CTX_CLIENT_LICENSE_IN_USE ((NTSTATUS) 0xC00A0034)\n#define STATUS_CTX_SHADOW_ENDED_BY_MODE_CHANGE  ((NTSTATUS) 0xC00A0035)\n#define STATUS_CTX_SHADOW_NOT_RUNNING    ((NTSTATUS) 0xC00A0036)\n#define STATUS_CTX_LOGON_DISABLED        ((NTSTATUS) 0xC00A0037)\n#define STATUS_CTX_SECURITY_LAYER_ERROR  ((NTSTATUS) 0xC00A0038)\n\n#define STATUS_CLUSTER_INVALID_NODE      ((NTSTATUS) 0xC0130001)\n#define STATUS_CLUSTER_NODE_EXISTS       ((NTSTATUS) 0xC0130002)\n#define STATUS_CLUSTER_JOIN_IN_PROGRESS  ((NTSTATUS) 0xC0130003)\n#define STATUS_CLUSTER_NODE_NOT_FOUND    ((NTSTATUS) 0xC0130004)\n#define STATUS_CLUSTER_LOCAL_NODE_NOT_FOUND     ((NTSTATUS) 0xC0130005)\n#define STATUS_CLUSTER_NETWORK_EXISTS    ((NTSTATUS) 0xC0130006)\n#define STATUS_CLUSTER_NETWORK_NOT_FOUND ((NTSTATUS) 0xC0130007)\n#define STATUS_CLUSTER_NETINTERFACE_EXISTS      ((NTSTATUS) 0xC0130008)\n#define STATUS_CLUSTER_NETINTERFACE_NOT_FOUND   ((NTSTATUS) 0xC0130009)\n#define STATUS_CLUSTER_INVALID_REQUEST   ((NTSTATUS) 0xC013000A)\n#define STATUS_CLUSTER_INVALID_NETWORK_PROVIDER ((NTSTATUS) 0xC013000B)\n#define STATUS_CLUSTER_NODE_DOWN         ((NTSTATUS) 0xC013000C)\n#define STATUS_CLUSTER_NODE_UNREACHABLE  ((NTSTATUS) 0xC013000D)\n#define STATUS_CLUSTER_NODE_NOT_MEMBER   ((NTSTATUS) 0xC013000E)\n#define STATUS_CLUSTER_JOIN_NOT_IN_PROGRESS     ((NTSTATUS) 0xC013000F)\n#define STATUS_CLUSTER_INVALID_NETWORK   ((NTSTATUS) 0xC0130010)\n#define STATUS_CLUSTER_NO_NET_ADAPTERS   ((NTSTATUS) 0xC0130011)\n#define STATUS_CLUSTER_NODE_UP           ((NTSTATUS) 0xC0130012)\n#define STATUS_CLUSTER_NODE_PAUSED       ((NTSTATUS) 0xC0130013)\n#define STATUS_CLUSTER_NODE_NOT_PAUSED   ((NTSTATUS) 0xC0130014)\n#define STATUS_CLUSTER_NO_SECURITY_CONTEXT      ((NTSTATUS) 0xC0130015)\n#define STATUS_CLUSTER_NETWORK_NOT_INTERNAL     ((NTSTATUS) 0xC0130016)\n#define STATUS_CLUSTER_POISONED          ((NTSTATUS) 0xC0130017)\n\n#define STATUS_SXS_SECTION_NOT_FOUND     ((NTSTATUS) 0xC0150001)\n#define STATUS_SXS_CANT_GEN_ACTCTX       ((NTSTATUS) 0xC0150002)\n#define STATUS_SXS_INVALID_ACTCTXDATA_FORMAT    ((NTSTATUS) 0xC0150003)\n#define STATUS_SXS_ASSEMBLY_NOT_FOUND    ((NTSTATUS) 0xC0150004)\n#define STATUS_SXS_MANIFEST_FORMAT_ERROR ((NTSTATUS) 0xC0150005)\n#define STATUS_SXS_MANIFEST_PARSE_ERROR  ((NTSTATUS) 0xC0150006)\n#define STATUS_SXS_ACTIVATION_CONTEXT_DISABLED  ((NTSTATUS) 0xC0150007)\n#define STATUS_SXS_KEY_NOT_FOUND         ((NTSTATUS) 0xC0150008)\n#define STATUS_SXS_VERSION_CONFLICT      ((NTSTATUS) 0xC0150009)\n#define STATUS_SXS_WRONG_SECTION_TYPE    ((NTSTATUS) 0xC015000A)\n#define STATUS_SXS_THREAD_QUERIES_DISABLED      ((NTSTATUS) 0xC015000B)\n#define STATUS_SXS_ASSEMBLY_MISSING      ((NTSTATUS) 0xC015000C)\n#define STATUS_SXS_PROCESS_DEFAULT_ALREADY_SET  ((NTSTATUS) 0xC015000E)\n#define STATUS_SXS_EARLY_DEACTIVATION    ((NTSTATUS) 0xC015000F)\n#define STATUS_SXS_INVALID_DEACTIVATION  ((NTSTATUS) 0xC0150010)\n#define STATUS_SXS_MULTIPLE_DEACTIVATION ((NTSTATUS) 0xC0150011)\n#define STATUS_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY ((NTSTATUS) 0xC0150012)\n#define STATUS_SXS_PROCESS_TERMINATION_REQUESTED ((NTSTATUS) 0xC0150013)\n#define STATUS_SXS_CORRUPT_ACTIVATION_STACK ((NTSTATUS) 0xC0150014)\n#define STATUS_SXS_CORRUPTION            ((NTSTATUS) 0xC0150015)\n#define STATUS_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE  ((NTSTATUS) 0xC0150016)\n#define STATUS_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME   ((NTSTATUS) 0xC0150017)\n#define STATUS_SXS_IDENTITY_DUPLICATE_ATTRIBUTE      ((NTSTATUS) 0xC0150018)\n#define STATUS_SXS_IDENTITY_PARSE_ERROR              ((NTSTATUS) 0xC0150019)\n#define STATUS_SXS_COMPONENT_STORE_CORRUPT           ((NTSTATUS) 0xC015001A)\n#define STATUS_SXS_FILE_HASH_MISMATCH                ((NTSTATUS) 0xC015001B)\n#define STATUS_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT    ((NTSTATUS) 0xC015001C)\n#define STATUS_SXS_IDENTITIES_DIFFERENT              ((NTSTATUS) 0xC015001D)\n#define STATUS_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT      ((NTSTATUS) 0xC015001E)\n#define STATUS_SXS_FILE_NOT_PART_OF_ASSEMBLY         ((NTSTATUS) 0xC015001F)\n#define STATUS_ADVANCED_INSTALLER_FAILED             ((NTSTATUS) 0xC0150020)\n#define STATUS_XML_ENCODING_MISMATCH                 ((NTSTATUS) 0xC0150021)\n#define STATUS_SXS_MANIFEST_TOO_BIG                  ((NTSTATUS) 0xC0150022)\n#define STATUS_SXS_SETTING_NOT_REGISTERED            ((NTSTATUS) 0xC0150023)\n#define STATUS_SXS_TRANSACTION_CLOSURE_INCOMPLETE    ((NTSTATUS) 0xC0150024)\n#define STATUS_SMI_PRIMITIVE_INSTALLER_FAILED        ((NTSTATUS) 0xC0150025)\n#define STATUS_GENERIC_COMMAND_FAILED                ((NTSTATUS) 0xC0150026)\n#define STATUS_SXS_FILE_HASH_MISSING                 ((NTSTATUS) 0xC0150027)\n\n#define DBG_EXCEPTION_HANDLED       ((NTSTATUS) 0x00010001)\n#define DBG_CONTINUE                ((NTSTATUS) 0x00010002)\n#define DBG_TERMINATE_THREAD        ((NTSTATUS) 0x40010003)\n#define DBG_TERMINATE_PROCESS       ((NTSTATUS) 0x40010004)\n#define DBG_CONTROL_C               ((NTSTATUS) 0x40010005)\n#define DBG_PRINTEXCEPTION_C        ((NTSTATUS) 0x40010006)\n#define DBG_RIPEXCEPTION            ((NTSTATUS) 0x40010007)\n#define DBG_CONTROL_BREAK           ((NTSTATUS) 0x40010008)\n#define DBG_COMMAND_EXCEPTION       ((NTSTATUS) 0x40010009)\n#define DBG_EXCEPTION_NOT_HANDLED   ((NTSTATUS) 0x80010001)\n\n#endif /* WIN32_NO_STATUS */\n\n#endif /* __WINE_NTSTATUS_H */\n"
  },
  {
    "path": "wine/windows/oaidl.idl",
    "content": "/*\n * Copyright 2002 Ove Kaaven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"objidl.idl\";\n#endif\n\ninterface IDispatch;\ninterface ITypeInfo;\ninterface ITypeLib;\ninterface IRecordInfo;\n\n[\n  version(1.0),\n  pointer_default(unique)\n]\ninterface IOleAutomationTypes\n{\n\ntypedef CY CURRENCY;\n\n/* Safe Array */\n\ntypedef struct tagSAFEARRAYBOUND {\n  ULONG cElements;\n  LONG lLbound;\n} SAFEARRAYBOUND, *LPSAFEARRAYBOUND;\n\ntypedef [unique] struct _wireVARIANT *wireVARIANT;\ntypedef [unique] struct _wireBRECORD *wireBRECORD;\n\ntypedef struct _wireSAFEARR_BSTR {\n  ULONG Size;\n  [size_is(Size), ref] wireBSTR *aBstr;\n} SAFEARR_BSTR;\n\ntypedef struct _wireSAFEARR_UNKNOWN {\n  ULONG Size;\n  [size_is(Size), ref] IUnknown **apUnknown;\n} SAFEARR_UNKNOWN;\n\ntypedef struct _wireSAFEARR_DISPATCH {\n  ULONG Size;\n  [size_is(Size), ref] IDispatch **apDispatch;\n} SAFEARR_DISPATCH;\n\ntypedef struct _wireSAFEARR_VARIANT {\n  ULONG Size;\n  [size_is(Size), ref] wireVARIANT *aVariant;\n} SAFEARR_VARIANT;\n\ntypedef struct _wireSAFEARR_BRECORD {\n  ULONG Size;\n  [size_is(Size), ref] wireBRECORD *aRecord;\n} SAFEARR_BRECORD;\n\ntypedef struct _wireSAFEARR_HAVEIID {\n  ULONG Size;\n  [size_is(Size), ref] IUnknown **apUnknown;\n  IID iid;\n} SAFEARR_HAVEIID;\n\ntypedef [v1_enum] enum tagSF_TYPE {\n  SF_ERROR    = VT_ERROR,\n  SF_I1       = VT_I1,\n  SF_I2       = VT_I2,\n  SF_I4       = VT_I4,\n  SF_I8       = VT_I8,\n  SF_BSTR     = VT_BSTR,\n  SF_UNKNOWN  = VT_UNKNOWN,\n  SF_DISPATCH = VT_DISPATCH,\n  SF_VARIANT  = VT_VARIANT,\n  SF_RECORD   = VT_RECORD,\n  SF_HAVEIID  = VT_UNKNOWN|VT_RESERVED,\n} SF_TYPE;\n\ntypedef union _wireSAFEARRAY_UNION switch(ULONG sfType) u {\n  case SF_BSTR:     SAFEARR_BSTR BstrStr;\n  case SF_UNKNOWN:  SAFEARR_UNKNOWN UnknownStr;\n  case SF_DISPATCH: SAFEARR_DISPATCH DispatchStr;\n  case SF_VARIANT:  SAFEARR_VARIANT VariantStr;\n  case SF_RECORD:   SAFEARR_BRECORD RecordStr;\n  case SF_HAVEIID:  SAFEARR_HAVEIID HaveIidStr;\n  case SF_I1:       BYTE_SIZEDARR ByteStr;\n  case SF_I2:       WORD_SIZEDARR WordStr;\n  case SF_I4:       DWORD_SIZEDARR LongStr;\n  case SF_I8:       HYPER_SIZEDARR HyperStr;\n} SAFEARRAYUNION;\n\ntypedef [unique] struct _wireSAFEARRAY {\n  USHORT cDims;\n  USHORT fFeatures;\n  ULONG cbElements;\n  ULONG cLocks;\n  SAFEARRAYUNION uArrayStructs;\n  [size_is(cDims)] SAFEARRAYBOUND rgsabound[];\n} *wireSAFEARRAY;\n\ntypedef [unique] wireSAFEARRAY *wirePSAFEARRAY;\n\ntypedef struct tagSAFEARRAY {\n  USHORT cDims;\n  USHORT fFeatures;\n  ULONG cbElements;\n  ULONG cLocks;\n  PVOID pvData;\n  SAFEARRAYBOUND rgsabound[];\n} SAFEARRAY;\n\ntypedef [wire_marshal(wirePSAFEARRAY)] SAFEARRAY *LPSAFEARRAY;\n\nconst USHORT FADF_AUTO        = 0x0001;\nconst USHORT FADF_STATIC      = 0x0002;\nconst USHORT FADF_EMBEDDED    = 0x0004;\nconst USHORT FADF_FIXEDSIZE   = 0x0010;\nconst USHORT FADF_RECORD      = 0x0020;\nconst USHORT FADF_HAVEIID     = 0x0040;\nconst USHORT FADF_HAVEVARTYPE = 0x0080;\nconst USHORT FADF_BSTR        = 0x0100;\nconst USHORT FADF_UNKNOWN     = 0x0200;\nconst USHORT FADF_DISPATCH    = 0x0400;\nconst USHORT FADF_VARIANT     = 0x0800;\nconst USHORT FADF_RESERVED    = 0xF008;\n/* Undocumented flags */\nconst USHORT FADF_DATADELETED  = 0x1000; /* Data in a vector has been deleted */\nconst USHORT FADF_CREATEVECTOR = 0x2000; /* This array is a vector */\n\n/* Variant */\n\ncpp_quote(\"#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION)\")\ncpp_quote(\"#define __VARIANT_NAME_1 n1\")\ncpp_quote(\"#define __VARIANT_NAME_2 n2\")\ncpp_quote(\"#define __VARIANT_NAME_3 n3\")\ncpp_quote(\"#define __VARIANT_NAME_4 brecVal\")\ncpp_quote(\"#else\")\ncpp_quote(\"#define __tagVARIANT\")\ncpp_quote(\"#define __VARIANT_NAME_1\")\ncpp_quote(\"#define __VARIANT_NAME_2\")\ncpp_quote(\"#define __VARIANT_NAME_3\")\ncpp_quote(\"#define __tagBRECORD\")\ncpp_quote(\"#define __VARIANT_NAME_4\")\ncpp_quote(\"#endif\")\n\ntypedef [wire_marshal(wireVARIANT)] struct tagVARIANT VARIANT;\n\nstruct tagVARIANT {\n  union {\n    struct __tagVARIANT {\n      VARTYPE vt;\n      WORD wReserved1;\n      WORD wReserved2;\n      WORD wReserved3;\n      union {\n        signed char cVal;\n        USHORT uiVal;\n        ULONG ulVal;\n        INT intVal;\n        UINT uintVal;\n        BYTE bVal;\n        SHORT iVal;\n        LONG lVal;\n        FLOAT fltVal;\n        DOUBLE dblVal;\n        VARIANT_BOOL boolVal;\n#if 0 /* illegal in C++ */\n        _VARIANT_BOOL bool;\n#endif\n        SCODE scode;\n        DATE date;\n        BSTR bstrVal;\n        CY cyVal;\n        IUnknown *punkVal;\n        IDispatch *pdispVal;\n        SAFEARRAY *parray;\n        LONGLONG llVal;\n        ULONGLONG ullVal;\n        signed char *pcVal;\n        USHORT *puiVal;\n        ULONG *pulVal;\n        INT *pintVal;\n        UINT *puintVal;\n        BYTE *pbVal;\n        SHORT *piVal;\n        LONG *plVal;\n        FLOAT *pfltVal;\n        DOUBLE *pdblVal;\n        VARIANT_BOOL *pboolVal;\n#if 0\n        _VARIANT_BOOL *pbool;\n#endif\n        SCODE *pscode;\n        DATE *pdate;\n        BSTR *pbstrVal;\n        VARIANT *pvarVal;\n        PVOID byref;\n        CY *pcyVal;\n        DECIMAL *pdecVal;\n        IUnknown **ppunkVal;\n        IDispatch **ppdispVal;\n        SAFEARRAY **pparray;\n        LONGLONG *pllVal;\n        ULONGLONG *pullVal;\n        struct __tagBRECORD {\n          PVOID pvRecord;\n          IRecordInfo *pRecInfo;\n        } __VARIANT_NAME_4;\n      } __VARIANT_NAME_3;\n    } __VARIANT_NAME_2;\n\n    DECIMAL decVal;\n  } __VARIANT_NAME_1;\n};\n\ntypedef VARIANT *LPVARIANT;\ntypedef VARIANT VARIANTARG;\ntypedef VARIANTARG *LPVARIANTARG;\n\ncpp_quote(\"#if 0\")\ntypedef const VARIANT *REFVARIANT;\ncpp_quote(\"#elif !defined(_REFVARIANT_DEFINED)\")\ncpp_quote(\"#define _REFVARIANT_DEFINED\")\ncpp_quote(\"#ifdef __cplusplus\")\ncpp_quote(\"#define REFVARIANT const VARIANT &\")\ncpp_quote(\"#else\")\ncpp_quote(\"#define REFVARIANT const VARIANT *__MIDL_CONST\")\ncpp_quote(\"#endif\")\ncpp_quote(\"#endif\")\n\nstruct _wireBRECORD {\n  ULONG fFlags;\n  ULONG clSize;\n  IRecordInfo *pRecInfo;\n  [size_is(clSize)] byte *pRecord;\n};\n\nstruct _wireVARIANT {\n  DWORD clSize;\n  DWORD rpcReserved;\n  USHORT vt;\n  USHORT wReserved1;\n  USHORT wReserved2;\n  USHORT wReserved3;\n  [switch_is(vt)] union {\n  [case(VT_EMPTY, VT_NULL)]    ;\n  [case(VT_I1)]                signed char cVal;\n  [case(VT_UI2)]               USHORT uiVal;\n  [case(VT_UI4)]               ULONG ulVal;\n  [case(VT_INT)]               INT intVal;\n  [case(VT_UINT)]              UINT uintVal;\n  [case(VT_UI1)]               BYTE bVal;\n  [case(VT_I2)]                SHORT iVal;\n  [case(VT_I4)]                LONG lVal;\n  [case(VT_R4)]                FLOAT fltVal;\n  [case(VT_R8)]                DOUBLE dblVal;\n  [case(VT_BOOL)]              VARIANT_BOOL boolVal;\n  [case(VT_ERROR)]             SCODE scode;\n  [case(VT_DATE)]              DATE date;\n  [case(VT_BSTR)]              wireBSTR bstrVal;\n  [case(VT_CY)]                CY cyVal;\n  [case(VT_DECIMAL)]           DECIMAL decVal;\n  [case(VT_UNKNOWN)]           IUnknown *punkVal;\n  [case(VT_DISPATCH)]          IDispatch *pdispVal;\n  [case(VT_ARRAY)]             wireSAFEARRAY parray;\n  [case(VT_I1|VT_BYREF)]       signed char *pcVal;\n  [case(VT_UI2|VT_BYREF)]      USHORT *puiVal;\n  [case(VT_UI4|VT_BYREF)]      ULONG *pulVal;\n  [case(VT_INT|VT_BYREF)]      INT *pintVal;\n  [case(VT_UINT|VT_BYREF)]     UINT *puintVal;\n  [case(VT_UI1|VT_BYREF)]      BYTE *pbVal;\n  [case(VT_I2|VT_BYREF)]       SHORT *piVal;\n  [case(VT_I4|VT_BYREF)]       LONG *plVal;\n  [case(VT_R4|VT_BYREF)]       FLOAT *pfltVal;\n  [case(VT_R8|VT_BYREF)]       DOUBLE *pdblVal;\n  [case(VT_BOOL|VT_BYREF)]     VARIANT_BOOL *pboolVal;\n  [case(VT_ERROR|VT_BYREF)]    SCODE *pscode;\n  [case(VT_DATE|VT_BYREF)]     DATE *pdate;\n  [case(VT_BSTR|VT_BYREF)]     wireBSTR *pbstrVal;\n  [case(VT_VARIANT|VT_BYREF)]  wireVARIANT *pvarVal;\n  [case(VT_CY|VT_BYREF)]       CY *pcyVal;\n  [case(VT_DECIMAL|VT_BYREF)]  DECIMAL *pdecVal;\n  [case(VT_UNKNOWN|VT_BYREF)]  IUnknown **ppunkVal;\n  [case(VT_DISPATCH|VT_BYREF)] IDispatch **ppdispVal;\n  [case(VT_ARRAY|VT_BYREF)]    wireSAFEARRAY *pparray;\n  [case(VT_RECORD, VT_RECORD|VT_BYREF)] wireBRECORD brecVal;\n  } DUMMYUNIONNAME;\n};\n\n/* Dispatch */\n\ntypedef LONG DISPID;\ntypedef DWORD HREFTYPE;\ntypedef DISPID MEMBERID;\n\ntypedef [v1_enum] enum tagTYPEKIND {\n  TKIND_ENUM = 0,\n  TKIND_RECORD,\n  TKIND_MODULE,\n  TKIND_INTERFACE,\n  TKIND_DISPATCH,\n  TKIND_COCLASS,\n  TKIND_ALIAS,\n  TKIND_UNION,\n  TKIND_MAX\n} TYPEKIND;\n\ntypedef struct tagTYPEDESC {\n  [switch_is(vt)] union {\n  [case(VT_PTR, VT_SAFEARRAY)] struct tagTYPEDESC *lptdesc;\n  [case(VT_CARRAY)]            struct tagARRAYDESC *lpadesc;\n  [case(VT_USERDEFINED)]       HREFTYPE hreftype;\n  [default]                    ;\n  } DUMMYUNIONNAME;\n  VARTYPE vt;\n} TYPEDESC;\n\ntypedef struct tagARRAYDESC {\n  TYPEDESC tdescElem;\n  USHORT cDims;\n  [size_is(cDims)] SAFEARRAYBOUND rgbounds[];\n} ARRAYDESC;\n\ntypedef struct tagPARAMDESCEX {\n  ULONG cBytes;\n  VARIANTARG varDefaultValue;\n} PARAMDESCEX, *LPPARAMDESCEX;\n\ntypedef struct tagPARAMDESC {\n  LPPARAMDESCEX pparamdescex;\n  USHORT wParamFlags;\n} PARAMDESC, *LPPARAMDESC;\n\nconst USHORT PARAMFLAG_NONE         = 0x00;\nconst USHORT PARAMFLAG_FIN          = 0x01;\nconst USHORT PARAMFLAG_FOUT         = 0x02;\nconst USHORT PARAMFLAG_FLCID        = 0x04;\nconst USHORT PARAMFLAG_FRETVAL      = 0x08;\nconst USHORT PARAMFLAG_FOPT         = 0x10;\nconst USHORT PARAMFLAG_FHASDEFAULT  = 0x20;\nconst USHORT PARAMFLAG_FHASCUSTDATA = 0x40;\n\ntypedef struct tagIDLDESC {\n  ULONG_PTR dwReserved;\n  USHORT wIDLFlags;\n} IDLDESC, *LPIDLDESC;\n\nconst USHORT IDLFLAG_NONE    = PARAMFLAG_NONE;\nconst USHORT IDLFLAG_FIN     = PARAMFLAG_FIN;\nconst USHORT IDLFLAG_FOUT    = PARAMFLAG_FOUT;\nconst USHORT IDLFLAG_FLCID   = PARAMFLAG_FLCID;\nconst USHORT IDLFLAG_FRETVAL = PARAMFLAG_FRETVAL;\n\ncpp_quote(\"#if 0\") /* for IDL only */\ntypedef struct tagELEMDESC {\n  TYPEDESC tdesc;\n  PARAMDESC paramdesc;\n} ELEMDESC;\ncpp_quote(\"#else\") /* C/C++ defs */\ncpp_quote(\"typedef struct tagELEMDESC {\")\ncpp_quote(\"  TYPEDESC tdesc;\")\ncpp_quote(\"  union {\")\ncpp_quote(\"    IDLDESC idldesc;\")\ncpp_quote(\"    PARAMDESC paramdesc;\")\ncpp_quote(\"  } DUMMYUNIONNAME;\")\ncpp_quote(\"} ELEMDESC, *LPELEMDESC;\")\ncpp_quote(\"#endif\")\n\ntypedef struct tagTYPEATTR {\n  GUID guid;\n  LCID lcid;\n  DWORD dwReserved;\n  MEMBERID memidConstructor;\n  MEMBERID memidDestructor;\n  LPOLESTR lpstrSchema;\n  ULONG cbSizeInstance;\n  TYPEKIND typekind;\n  WORD cFuncs;\n  WORD cVars;\n  WORD cImplTypes;\n  WORD cbSizeVft;\n  WORD cbAlignment;\n  WORD wTypeFlags;\n  WORD wMajorVerNum;\n  WORD wMinorVerNum;\n  TYPEDESC tdescAlias;\n  IDLDESC idldescType;\n} TYPEATTR, *LPTYPEATTR;\n\ntypedef struct tagDISPPARAMS {\n  [size_is(cArgs)] VARIANTARG *rgvarg;\n  [size_is(cNamedArgs)] DISPID *rgdispidNamedArgs;\n  UINT cArgs;\n  UINT cNamedArgs;\n} DISPPARAMS;\n\ncpp_quote(\"#if 0\") /* for IDL only */\ntypedef struct tagEXCEPINFO {\n  WORD wCode;\n  WORD wReserved;\n  BSTR bstrSource;\n  BSTR bstrDescription;\n  BSTR bstrHelpFile;\n  DWORD dwHelpContext;\n  ULONG_PTR pvReserved;\n  ULONG_PTR pfnDeferredFillIn;\n  SCODE scode;\n} EXCEPINFO;\ncpp_quote(\"#else\")\ncpp_quote(\"typedef struct tagEXCEPINFO {\")\ncpp_quote(\"  WORD wCode;\")\ncpp_quote(\"  WORD wReserved;\")\ncpp_quote(\"  BSTR bstrSource;\")\ncpp_quote(\"  BSTR bstrDescription;\")\ncpp_quote(\"  BSTR bstrHelpFile;\")\ncpp_quote(\"  DWORD dwHelpContext;\")\ncpp_quote(\"  PVOID pvReserved;\")\ncpp_quote(\"  HRESULT (__stdcall *pfnDeferredFillIn)(struct tagEXCEPINFO *);\")\ncpp_quote(\"  SCODE scode;\")\ncpp_quote(\"} EXCEPINFO, *LPEXCEPINFO;\")\ncpp_quote(\"#endif\")\n\ntypedef [v1_enum] enum tagCALLCONV {\n  CC_FASTCALL = 0,\n  CC_CDECL = 1,\n  CC_MSCPASCAL,\n  CC_PASCAL = CC_MSCPASCAL,\n  CC_MACPASCAL,\n  CC_STDCALL,\n  CC_FPFASTCALL,\n  CC_SYSCALL,\n  CC_MPWCDECL,\n  CC_MPWPASCAL,\n  CC_MAX\n} CALLCONV;\n\ntypedef [v1_enum] enum tagFUNCKIND {\n  FUNC_VIRTUAL,\n  FUNC_PUREVIRTUAL,\n  FUNC_NONVIRTUAL,\n  FUNC_STATIC,\n  FUNC_DISPATCH\n} FUNCKIND;\n\ntypedef [v1_enum] enum tagINVOKEKIND {\n  INVOKE_FUNC = 1,\n  INVOKE_PROPERTYGET = 2,\n  INVOKE_PROPERTYPUT = 4,\n  INVOKE_PROPERTYPUTREF = 8\n} INVOKEKIND;\n\ntypedef struct tagFUNCDESC {\n  MEMBERID memid;\n  [size_is(cScodes)] SCODE *lprgscode;\n  [size_is(cParams)] ELEMDESC *lprgelemdescParam;\n  FUNCKIND funckind;\n  INVOKEKIND invkind;\n  CALLCONV callconv;\n  SHORT cParams;\n  SHORT cParamsOpt;\n  SHORT oVft;\n  SHORT cScodes;\n  ELEMDESC elemdescFunc;\n  WORD wFuncFlags;\n} FUNCDESC, *LPFUNCDESC;\n\ntypedef [v1_enum] enum tagVARKIND {\n  VAR_PERINSTANCE,\n  VAR_STATIC,\n  VAR_CONST,\n  VAR_DISPATCH\n} VARKIND;\n\nconst USHORT IMPLTYPEFLAG_FDEFAULT       = 0x1;\nconst USHORT IMPLTYPEFLAG_FSOURCE        = 0x2;\nconst USHORT IMPLTYPEFLAG_FRESTRICTED    = 0x4;\nconst USHORT IMPLTYPEFLAG_FDEFAULTVTABLE = 0x8;\n\ntypedef struct tagVARDESC {\n  MEMBERID memid;\n  LPOLESTR lpstrSchema;\n  [switch_is(varkind)] union {\n  [case(VAR_PERINSTANCE, VAR_DISPATCH, VAR_STATIC)] ULONG oInst;\n  [case(VAR_CONST)] VARIANT *lpvarValue;\n  } DUMMYUNIONNAME;\n  ELEMDESC elemdescVar;\n  WORD wVarFlags;\n  VARKIND varkind;\n} VARDESC, *LPVARDESC;\n\ntypedef enum tagTYPEFLAGS {\n  TYPEFLAG_FAPPOBJECT     = 0x0001,\n  TYPEFLAG_FCANCREATE     = 0x0002,\n  TYPEFLAG_FLICENSED      = 0x0004,\n  TYPEFLAG_FPREDECLID     = 0x0008,\n  TYPEFLAG_FHIDDEN        = 0x0010,\n  TYPEFLAG_FCONTROL       = 0x0020,\n  TYPEFLAG_FDUAL          = 0x0040,\n  TYPEFLAG_FNONEXTENSIBLE = 0x0080,\n  TYPEFLAG_FOLEAUTOMATION = 0x0100,\n  TYPEFLAG_FRESTRICTED    = 0x0200,\n  TYPEFLAG_FAGGREGATABLE  = 0x0400,\n  TYPEFLAG_FREPLACEABLE   = 0x0800,\n  TYPEFLAG_FDISPATCHABLE  = 0x1000,\n  TYPEFLAG_FREVERSEBIND   = 0x2000,\n  TYPEFLAG_FPROXY         = 0x4000\n} TYPEFLAGS;\n\ntypedef enum tagFUNCFLAGS {\n  FUNCFLAG_FRESTRICTED       = 0x0001,\n  FUNCFLAG_FSOURCE           = 0x0002,\n  FUNCFLAG_FBINDABLE         = 0x0004,\n  FUNCFLAG_FREQUESTEDIT      = 0x0008,\n  FUNCFLAG_FDISPLAYBIND      = 0x0010,\n  FUNCFLAG_FDEFAULTBIND      = 0x0020,\n  FUNCFLAG_FHIDDEN           = 0x0040,\n  FUNCFLAG_FUSESGETLASTERROR = 0x0080,\n  FUNCFLAG_FDEFAULTCOLLELEM  = 0x0100,\n  FUNCFLAG_FUIDEFAULT        = 0x0200,\n  FUNCFLAG_FNONBROWSABLE     = 0x0400,\n  FUNCFLAG_FREPLACEABLE      = 0x0800,\n  FUNCFLAG_FIMMEDIATEBIND    = 0x1000\n} FUNCFLAGS;\n\ntypedef enum tagVARFLAGS {\n  VARFLAG_FREADONLY        = 0x0001,\n  VARFLAG_FSOURCE          = 0x0002,\n  VARFLAG_FBINDABLE        = 0x0004,\n  VARFLAG_FREQUESTEDIT     = 0x0008,\n  VARFLAG_FDISPLAYBIND     = 0x0010,\n  VARFLAG_FDEFAULTBIND     = 0x0020,\n  VARFLAG_FHIDDEN          = 0x0040,\n  VARFLAG_FRESTRICTED      = 0x0080,\n  VARFLAG_FDEFAULTCOLLELEM = 0x0100,\n  VARFLAG_FUIDEFAULT       = 0x0200,\n  VARFLAG_FNONBROWSABLE    = 0x0400,\n  VARFLAG_FREPLACEABLE     = 0x0800,\n  VARFLAG_FIMMEDIATEBIND   = 0x1000\n} VARFLAGS;\n\ntypedef [wire_marshal(DWORD)] struct tagCLEANLOCALSTORAGE {\n  IUnknown *pInterface;\n  PVOID pStorage;\n  DWORD flags;\n} CLEANLOCALSTORAGE;\n\ntypedef struct tagCUSTDATAITEM {\n  GUID guid;\n  VARIANTARG varValue;\n} CUSTDATAITEM, *LPCUSTDATAITEM;\n\ntypedef struct tagCUSTDATA {\n  DWORD cCustData;\n  [size_is(cCustData)] LPCUSTDATAITEM prgCustData;\n} CUSTDATA, *LPCUSTDATA;\n\n} /* interface IOleAutomationTypes */\n\n/******************** INTERFACES ********************/\n\n[\n  object,\n  uuid(00020400-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IDispatch : IUnknown\n{\n  typedef [unique] IDispatch *LPDISPATCH;\n\n  const DISPID DISPID_UNKNOWN     = -1;\n  const DISPID DISPID_VALUE       =  0;\n  const DISPID DISPID_PROPERTYPUT = -3;\n  const DISPID DISPID_NEWENUM     = -4;\n  const DISPID DISPID_EVALUATE    = -5;\n  const DISPID DISPID_CONSTRUCTOR = -6;\n  const DISPID DISPID_DESTRUCTOR  = -7;\n  const DISPID DISPID_COLLECT     = -8;\n\n  HRESULT GetTypeInfoCount(\n    [out] UINT *pctinfo);\n\n  HRESULT GetTypeInfo(\n    [in] UINT iTInfo,\n    [in] LCID lcid,\n    [out] ITypeInfo **ppTInfo);\n\n  HRESULT GetIDsOfNames(\n    [in] REFIID riid,\n    [in, size_is(cNames)] LPOLESTR *rgszNames,\n    [in] UINT cNames,\n    [in] LCID lcid,\n    [out, size_is(cNames)] DISPID *rgDispId);\n\n  [local]\n  HRESULT Invoke(\n    [in] DISPID dispIdMember,\n    [in] REFIID riid,\n    [in] LCID lcid,\n    [in] WORD wFlags,\n    [in, out] DISPPARAMS *pDispParams,\n    [out] VARIANT *pVarResult,\n    [out] EXCEPINFO *pExcepInfo,\n    [out] UINT *puArgErr);\n\n  [call_as(Invoke)]\n  HRESULT RemoteInvoke(\n    [in] DISPID dispIdMember,\n    [in] REFIID riid,\n    [in] LCID lcid,\n    [in] DWORD dwFlags,\n    [in] DISPPARAMS *pDispParams,\n    [out] VARIANT *pVarResult,\n    [out] EXCEPINFO *pExcepInfo,\n    [out] UINT *pArgErr,\n    [in] UINT cVarRef,\n    [in, size_is(cVarRef)] UINT *rgVarRefIdx,\n    [in, out, size_is(cVarRef)] VARIANTARG *rgVarRef);\n}\n\n[\n  object,\n  uuid(00020404-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IEnumVARIANT : IUnknown\n{\n  typedef [unique] IEnumVARIANT *LPENUMVARIANT;\n\n  [local]\n  HRESULT Next(\n    [in] ULONG celt,\n    [out] VARIANT *rgVar,\n    [out] ULONG *pCeltFetched);\n\n  [call_as(Next)]\n  HRESULT RemoteNext(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pCeltFetched)]\n    VARIANT *rgVar,\n    [out] ULONG *pCeltFetched);\n\n  HRESULT Skip(\n    [in] ULONG celt);\n\n  HRESULT Reset();\n\n  HRESULT Clone(\n    [out] IEnumVARIANT **ppEnum);\n}\n\n[\n  object,\n  uuid(00020403-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface ITypeComp : IUnknown\n{\n  typedef [unique] ITypeComp *LPTYPECOMP;\n\n  typedef [v1_enum] enum tagDESCKIND {\n    DESCKIND_NONE = 0,\n    DESCKIND_FUNCDESC,\n    DESCKIND_VARDESC,\n    DESCKIND_TYPECOMP,\n    DESCKIND_IMPLICITAPPOBJ,\n    DESCKIND_MAX\n  } DESCKIND;\n\n  typedef union tagBINDPTR {\n    FUNCDESC *lpfuncdesc;\n    VARDESC *lpvardesc;\n    ITypeComp *lptcomp;\n  } BINDPTR, *LPBINDPTR;\n\n  [local]\n  HRESULT Bind(\n    [in] LPOLESTR szName,\n    [in] ULONG lHashVal,\n    [in] WORD wFlags,\n    [out] ITypeInfo **ppTInfo,\n    [out] DESCKIND *pDescKind,\n    [out] BINDPTR *pBindPtr);\n\n  [call_as(Bind)]\n  HRESULT RemoteBind(\n    [in] LPOLESTR szName,\n    [in] ULONG lHashVal,\n    [in] WORD wFlags,\n    [out] ITypeInfo **ppTInfo,\n    [out] DESCKIND *pDescKind,\n    [out] LPFUNCDESC *ppFuncDesc,\n    [out] LPVARDESC *ppVarDesc,\n    [out] ITypeComp **ppTypeComp,\n    [out] CLEANLOCALSTORAGE *pDummy);\n\n  [local]\n  HRESULT BindType(\n    [in] LPOLESTR szName,\n    [in] ULONG lHashVal,\n    [out] ITypeInfo **ppTInfo,\n    [out] ITypeComp **ppTComp);\n\n  [call_as(BindType)]\n  HRESULT RemoteBindType(\n    [in] LPOLESTR szName,\n    [in] ULONG lHashVal,\n    [out] ITypeInfo **ppTInfo);\n}\n\n[\n  object,\n  uuid(00020401-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface ITypeInfo : IUnknown\n{\n  typedef [unique] ITypeInfo *LPTYPEINFO;\n\n  [local]\n  HRESULT GetTypeAttr(\n    [out] TYPEATTR **ppTypeAttr);\n\n  [call_as(GetTypeAttr)]\n  HRESULT RemoteGetTypeAttr(\n    [out] LPTYPEATTR *ppTypeAttr,\n    [out] CLEANLOCALSTORAGE *pDummy);\n\n  HRESULT GetTypeComp(\n    [out] ITypeComp **ppTComp);\n\n  [local]\n  HRESULT GetFuncDesc(\n    [in] UINT index,\n    [out] FUNCDESC **ppFuncDesc);\n\n  [call_as(GetFuncDesc)]\n  HRESULT RemoteGetFuncDesc(\n    [in] UINT index,\n    [out] LPFUNCDESC *ppFuncDesc,\n    [out] CLEANLOCALSTORAGE *pDummy);\n\n  [local]\n  HRESULT GetVarDesc(\n    [in] UINT index,\n    [out] VARDESC **ppVarDesc);\n\n  [call_as(GetVarDesc)]\n  HRESULT RemoteGetVarDesc(\n    [in] UINT index,\n    [out] LPVARDESC *ppVarDesc,\n    [out] CLEANLOCALSTORAGE *pDummy);\n\n  [local]\n  HRESULT GetNames(\n    [in] MEMBERID memid,\n    [out, size_is(cMaxNames), length_is(*pcNames)] BSTR *rgBstrNames,\n    [in] UINT cMaxNames,\n    [out] UINT *pcNames);\n\n  [call_as(GetNames)]\n  HRESULT RemoteGetNames(\n    [in] MEMBERID memid,\n    [out, size_is(cMaxNames), length_is(*pcNames)] BSTR *rgBstrNames,\n    [in] UINT cMaxNames,\n    [out] UINT *pcNames);\n\n  HRESULT GetRefTypeOfImplType(\n    [in] UINT index,\n    [out] HREFTYPE *pRefType);\n\n  HRESULT GetImplTypeFlags(\n    [in] UINT index,\n    [out] INT *pImplTypeFlags);\n\n  [local]\n  HRESULT GetIDsOfNames(\n    [in, size_is(cNames)] LPOLESTR *rgszNames,\n    [in] UINT cNames,\n    [out, size_is(cNames)] MEMBERID *pMemId);\n\n  [call_as(GetIDsOfNames)]\n  HRESULT LocalGetIDsOfNames();\n\n  [local]\n  HRESULT Invoke(\n    [in] PVOID pvInstance,\n    [in] MEMBERID memid,\n    [in] WORD wFlags,\n    [in, out] DISPPARAMS *pDispParams,\n    [out] VARIANT *pVarResult,\n    [out] EXCEPINFO *pExcepInfo,\n    [out] UINT *puArgErr);\n\n  [call_as(Invoke)]\n  HRESULT LocalInvoke();\n\n  [local]\n  HRESULT GetDocumentation(\n    [in] MEMBERID memid,\n    [out] BSTR *pBstrName,\n    [out] BSTR *pBstrDocString,\n    [out] DWORD *pdwHelpContext,\n    [out] BSTR *pBstrHelpFile);\n\n  [call_as(GetDocumentation)]\n  HRESULT RemoteGetDocumentation(\n    [in] MEMBERID memid,\n    [in] DWORD refPtrFlags,\n    [out] BSTR *pBstrName,\n    [out] BSTR *pBstrDocString,\n    [out] DWORD *pdwHelpContext,\n    [out] BSTR *pBstrHelpFile);\n\n  [local]\n  HRESULT GetDllEntry(\n    [in] MEMBERID memid,\n    [in] INVOKEKIND invKind,\n    [out] BSTR *pBstrDllName,\n    [out] BSTR *pBstrName,\n    [out] WORD *pwOrdinal);\n\n  [call_as(GetDllEntry)]\n  HRESULT RemoteGetDllEntry(\n    [in] MEMBERID memid,\n    [in] INVOKEKIND invKind,\n    [in] DWORD refPtrFlags,\n    [out] BSTR *pBstrDllName,\n    [out] BSTR *pBstrName,\n    [out] WORD *pwOrdinal);\n\n  HRESULT GetRefTypeInfo(\n    [in] HREFTYPE hRefType,\n    [out] ITypeInfo **ppTInfo);\n\n  [local]\n  HRESULT AddressOfMember(\n    [in] MEMBERID memid,\n    [in] INVOKEKIND invKind,\n    [out] PVOID *ppv);\n\n  [call_as(AddressOfMember)]\n  HRESULT LocalAddressOfMember();\n\n  [local]\n  HRESULT CreateInstance(\n    [in] IUnknown *pUnkOuter,\n    [in] REFIID riid,\n    [out, iid_is(riid)] PVOID *ppvObj);\n\n  [call_as(CreateInstance)]\n  HRESULT RemoteCreateInstance(\n    [in] REFIID riid,\n    [out, iid_is(riid)] IUnknown **ppvObj);\n\n  HRESULT GetMops(\n    [in] MEMBERID memid,\n    [out] BSTR *pBstrMops);\n\n  [local]\n  HRESULT GetContainingTypeLib(\n    [out] ITypeLib **ppTLib,\n    [out] UINT *pIndex);\n\n  [call_as(GetContainingTypeLib)]\n  HRESULT RemoteGetContainingTypeLib(\n    [out] ITypeLib **ppTLib,\n    [out] UINT *pIndex);\n\n  [local]\n  void ReleaseTypeAttr(\n    [in] TYPEATTR *pTypeAttr);\n\n  [call_as(ReleaseTypeAttr)]\n  HRESULT LocalReleaseTypeAttr();\n\n  [local]\n  void ReleaseFuncDesc(\n    [in] FUNCDESC *pFuncDesc);\n\n  [call_as(ReleaseFuncDesc)]\n  HRESULT LocalReleaseFuncDesc();\n\n  [local]\n  void ReleaseVarDesc(\n    [in] VARDESC *pVarDesc);\n\n  [call_as(ReleaseVarDesc)]\n  HRESULT LocalReleaseVarDesc();\n}\n\n[\n  object,\n  uuid(00020412-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface ITypeInfo2 : ITypeInfo\n{\n  typedef [unique] ITypeInfo2 *LPTYPEINFO2;\n\n  HRESULT GetTypeKind(\n    [out] TYPEKIND *pTypeKind);\n\n  HRESULT GetTypeFlags(\n    [out] ULONG *pTypeFlags);\n\n  HRESULT GetFuncIndexOfMemId(\n    [in] MEMBERID memid,\n    [in] INVOKEKIND invKind,\n    [out] UINT *pFuncIndex);\n\n  HRESULT GetVarIndexOfMemId(\n    [in] MEMBERID memid,\n    [out] UINT *pVarIndex);\n\n  HRESULT GetCustData(\n    [in] REFGUID guid,\n    [out] VARIANT *pVarVal);\n\n  HRESULT GetFuncCustData(\n    [in] UINT index,\n    [in] REFGUID guid,\n    [out] VARIANT *pVarVal);\n\n  HRESULT GetParamCustData(\n    [in] UINT indexFunc,\n    [in] UINT indexParam,\n    [in] REFGUID guid,\n    [out] VARIANT *pVarVal);\n\n  HRESULT GetVarCustData(\n    [in] UINT index,\n    [in] REFGUID guid,\n    [out] VARIANT *pVarVal);\n\n  HRESULT GetImplTypeCustData(\n    [in] UINT index,\n    [in] REFGUID guid,\n    [out] VARIANT *pVarVal);\n\n  [local]\n  HRESULT GetDocumentation2(\n    [in] MEMBERID memid,\n    [in] LCID lcid,\n    [out] BSTR *pbstrHelpString,\n    [out] DWORD *pdwHelpStringContext,\n    [out] BSTR *pbstrHelpStringDll);\n\n  [call_as(GetDocumentation2)]\n  HRESULT RemoteGetDocumentation2(\n    [in] MEMBERID memid,\n    [in] LCID lcid,\n    [in] DWORD refPtrFlags,\n    [out] BSTR *pbstrHelpString,\n    [out] DWORD *pdwHelpStringContext,\n    [out] BSTR *pbstrHelpStringDll);\n\n  HRESULT GetAllCustData(\n    [out] CUSTDATA *pCustData);\n\n  HRESULT GetAllFuncCustData(\n    [in] UINT index,\n    [out] CUSTDATA *pCustData);\n\n  HRESULT GetAllParamCustData(\n    [in] UINT indexFunc,\n    [in] UINT indexParam,\n    [out] CUSTDATA *pCustData);\n\n  HRESULT GetAllVarCustData(\n    [in] UINT index,\n    [out] CUSTDATA *pCustData);\n\n  HRESULT GetAllImplTypeCustData(\n    [in] UINT index,\n    [out] CUSTDATA *pCustData);\n}\n\n[\n  object,\n  uuid(00020402-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface ITypeLib : IUnknown\n{\n  typedef [unique] ITypeLib *LPTYPELIB;\n\n  typedef [v1_enum] enum tagSYSKIND {\n    SYS_WIN16 = 0,\n    SYS_WIN32,\n    SYS_MAC,\n    SYS_WIN64\n  } SYSKIND;\n\n  typedef [v1_enum] enum tagLIBFLAGS {\n    LIBFLAG_FRESTRICTED   = 0x01,\n    LIBFLAG_FCONTROL      = 0x02,\n    LIBFLAG_FHIDDEN       = 0x04,\n    LIBFLAG_FHASDISKIMAGE = 0x08\n  } LIBFLAGS;\n\n  typedef struct tagTLIBATTR {\n    GUID guid;\n    LCID lcid;\n    SYSKIND syskind;\n    WORD wMajorVerNum;\n    WORD wMinorVerNum;\n    WORD wLibFlags;\n  } TLIBATTR, *LPTLIBATTR;\n\n  [local]\n  UINT GetTypeInfoCount();\n\n  [call_as(GetTypeInfoCount)]\n  HRESULT RemoteGetTypeInfoCount(\n    [out] UINT *pcTInfo);\n\n  HRESULT GetTypeInfo(\n    [in] UINT index,\n    [out] ITypeInfo **ppTInfo);\n\n  HRESULT GetTypeInfoType(\n    [in] UINT index,\n    [out] TYPEKIND *pTKind);\n\n  HRESULT GetTypeInfoOfGuid(\n    [in] REFGUID guid,\n    [out] ITypeInfo **ppTinfo);\n\n  [local]\n  HRESULT GetLibAttr(\n    [out] TLIBATTR **ppTLibAttr);\n\n  [call_as(GetLibAttr)]\n  HRESULT RemoteGetLibAttr(\n    [out] LPTLIBATTR *ppTLibAttr,\n    [out] CLEANLOCALSTORAGE *pDummy);\n\n  HRESULT GetTypeComp(\n    [out] ITypeComp **ppTComp);\n\n  [local]\n  HRESULT GetDocumentation(\n    [in] INT index,\n    [out] BSTR *pBstrName,\n    [out] BSTR *pBstrDocString,\n    [out] DWORD *pdwHelpContext,\n    [out] BSTR *pBstrHelpFile);\n\n  [call_as(GetDocumentation)]\n  HRESULT RemoteGetDocumentation(\n    [in] INT index,\n    [in] DWORD refPtrFlags,\n    [out] BSTR *pBstrName,\n    [out] BSTR *pBstrDocString,\n    [out] DWORD *pdwHelpContext,\n    [out] BSTR *pBstrHelpFile);\n\n  [local]\n  HRESULT IsName(\n    [in, out] LPOLESTR szNameBuf,\n    [in] ULONG lHashVal,\n    [out] BOOL *pfName);\n\n  [call_as(IsName)]\n  HRESULT RemoteIsName(\n    [in] LPOLESTR szNameBuf,\n    [in] ULONG lHashVal,\n    [out] BOOL *pfName,\n    [out] BSTR *pBstrLibName);\n\n  [local]\n  HRESULT FindName(\n    [in, out] LPOLESTR szNameBuf,\n    [in] ULONG lHashVal,\n    [out, size_is(*pcFound), length_is(*pcFound)] ITypeInfo **ppTInfo,\n    [out, size_is(*pcFound), length_is(*pcFound)] MEMBERID *rgMemId,\n    [in, out] USHORT *pcFound);\n\n  [call_as(FindName)]\n  HRESULT RemoteFindName(\n    [in] LPOLESTR szNameBuf,\n    [in] ULONG lHashVal,\n    [out, size_is(*pcFound), length_is(*pcFound)] ITypeInfo **ppTInfo,\n    [out, size_is(*pcFound), length_is(*pcFound)] MEMBERID *rgMemId,\n    [in, out] USHORT *pcFound,\n    [out] BSTR *pBstrLibName);\n\n  [local]\n  void ReleaseTLibAttr(\n    [in] TLIBATTR *pTLibAttr);\n\n  [call_as(ReleaseTLibAttr)]\n  HRESULT LocalReleaseTLibAttr();\n}\n\n[\n  object,\n  uuid(00020411-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface ITypeLib2 : ITypeLib\n{\n  typedef [unique] ITypeLib2 *LPTYPELIB2;\n\n  HRESULT GetCustData(\n    [in] REFGUID guid,\n    [out] VARIANT *pVarVal);\n\n  [local]\n  HRESULT GetLibStatistics(\n    [out] ULONG *pcUniqueNames,\n    [out] ULONG *pcchUniqueNames);\n\n  [call_as(GetLibStatistics)]\n  HRESULT RemoteGetLibStatistics(\n    [out] ULONG *pcUniqueNames,\n    [out] ULONG *pcchUniqueNames);\n\n  [local]\n  HRESULT GetDocumentation2(\n    [in] INT index,\n    [in] LCID lcid,\n    [out] BSTR *pbstrHelpString,\n    [out] DWORD *pdwHelpStringContext,\n    [out] BSTR *pbstrHelpStringDll);\n\n  [call_as(GetDocumentation2)]\n  HRESULT RemoteGetDocumentation2(\n    [in] INT index,\n    [in] LCID lcid,\n    [in] DWORD refPtrFlags,\n    [out] BSTR *pbstrHelpString,\n    [out] DWORD *pdwHelpStringContext,\n    [out] BSTR *pbstrHelpStringDll);\n\n  HRESULT GetAllCustData(\n    [out] CUSTDATA *pCustData);\n}\n\n[\n  local,\n  object,\n  uuid(00020410-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface ITypeChangeEvents : IUnknown\n{\n  typedef [unique] ITypeChangeEvents *LPTYPECHANGEEVENTS;\n\n  typedef enum tagCHANGEKIND {\n    CHANGEKIND_ADDMEMBER,\n    CHANGEKIND_DELETEMEMBER,\n    CHANGEKIND_SETNAMES,\n    CHANGEKIND_SETDOCUMENTATION,\n    CHANGEKIND_GENERAL,\n    CHANGEKIND_INVALIDATE,\n    CHANGEKIND_CHANGEFAILED,\n    CHANGEKIND_MAX\n  } CHANGEKIND;\n\n  HRESULT RequestTypeChange(\n    [in] CHANGEKIND changeKind,\n    [in] ITypeInfo *pTInfoBefore,\n    [in] LPOLESTR pStrName,\n    [out] INT *pfCancel);\n  \n  HRESULT AfterTypeChange(\n    [in] CHANGEKIND changeKind,\n    [in] ITypeInfo *pTInfoAfter,\n    [in] LPOLESTR pStrName);\n}\n\n[\n  object,\n  uuid(1CF2B120-547D-101B-8E65-08002B2BD119),\n  pointer_default(unique)\n]\ninterface IErrorInfo : IUnknown\n{\n  typedef [unique] IErrorInfo *LPERRORINFO;\n\n  HRESULT GetGUID(\n    [out] GUID *pGUID);\n\n  HRESULT GetSource(\n    [out] BSTR *pBstrSource);\n\n  HRESULT GetDescription(\n    [out] BSTR *pBstrDescription);\n\n  HRESULT GetHelpFile(\n    [out] BSTR *pBstrHelpFile);\n\n  HRESULT GetHelpContext(\n    [out] DWORD *pdwHelpContext);\n}\n\n[\n  object,\n  uuid(22F03340-547D-101B-8E65-08002B2BD119),\n  pointer_default(unique)\n]\ninterface ICreateErrorInfo : IUnknown\n{\n  typedef [unique] ICreateErrorInfo *LPCREATEERRORINFO;\n\n  HRESULT SetGUID(\n    [in] REFGUID rguid);\n\n  HRESULT SetSource(\n    [in] LPOLESTR szSource);\n\n  HRESULT SetDescription(\n    [in] LPOLESTR szDescription);\n\n  HRESULT SetHelpFile(\n    [in] LPOLESTR szHelpFile);\n\n  HRESULT SetHelpContext(\n    [in] DWORD dwHelpContext);\n}\n\n[\n  object,\n  uuid(DF0B3D60-548F-101B-8E65-08002B2BD119),\n  pointer_default(unique)\n]\ninterface ISupportErrorInfo : IUnknown\n{\n  typedef [unique] ISupportErrorInfo *LPSUPPORTERRORINFO;\n\n  HRESULT InterfaceSupportsErrorInfo(\n    [in] REFIID riid);\n}\n\n[\n  object,\n  uuid(0000002E-0000-0000-C000-000000000046)\n]\ninterface ITypeFactory : IUnknown\n{\n  HRESULT CreateFromTypeInfo(\n    [in] ITypeInfo *pTypeInfo,\n    [in] REFIID riid,\n    [out, iid_is(riid)] IUnknown **ppv);\n}\n\n[\n  local,\n  object,\n  uuid(0000002D-0000-0000-C000-000000000046)\n]\ninterface ITypeMarshal : IUnknown\n{\n  HRESULT Size(\n    [in] PVOID pvType,\n    [in] DWORD dwDestContext,\n    [in] PVOID pvDestContext,\n    [out] ULONG *pSize);\n\n  HRESULT Marshal(\n    [in] PVOID pvType,\n    [in] DWORD dwDestContext,\n    [in] PVOID pvDestContext,\n    [in] ULONG cbBufferLength,\n    [out] BYTE *pBuffer,\n    [out] ULONG *pcbWritten);\n\n  HRESULT Unmarshal(\n    [out] PVOID pvType,\n    [in] DWORD dwFlags,\n    [in] ULONG cbBufferLength,\n    [in] BYTE *pBuffer,\n    [out] ULONG *pcbRead);\n\n  HRESULT Free(\n    [in] PVOID pvType);\n}\n\n[\n  local,\n  object,\n  uuid(0000002F-0000-0000-C000-000000000046)\n]\ninterface IRecordInfo : IUnknown\n{\n  typedef [unique] IRecordInfo *LPRECORDINFO;\n\n  HRESULT RecordInit(\n    [out] PVOID pvNew);\n\n  HRESULT RecordClear(\n    [in] PVOID pvExisting);\n\n  HRESULT RecordCopy(\n    [in] PVOID pvExisting,\n    [out] PVOID pvNew);\n\n  HRESULT GetGuid(\n    [out] GUID *pguid);\n\n  HRESULT GetName(\n    [out] BSTR *pbstrName);\n\n  HRESULT GetSize(\n    [out] ULONG *pcbSize);\n\n  HRESULT GetTypeInfo(\n    [out] ITypeInfo **ppTypeInfo);\n\n  HRESULT GetField(\n    [in] PVOID pvData,\n    [in] LPCOLESTR szFieldName,\n    [out] VARIANT *pvarField);\n\n  HRESULT GetFieldNoCopy(\n    [in] PVOID pvData,\n    [in] LPCOLESTR szFieldName,\n    [out] VARIANT *pvarField,\n    [out] PVOID *ppvDataCArray);\n\n  HRESULT PutField(\n    [in] ULONG wFlags,\n    [in, out] PVOID pvData,\n    [in] LPCOLESTR szFieldName,\n    [in] VARIANT *pvarField);\n\n  HRESULT PutFieldNoCopy(\n    [in] ULONG wFlags,\n    [in, out] PVOID pvData,\n    [in] LPCOLESTR szFieldName,\n    [in] VARIANT *pvarField);\n\n  HRESULT GetFieldNames(\n    [in, out] ULONG *pcNames,\n    [out, size_is(*pcNames), length_is(*pcNames)] BSTR *rgBstrNames);\n\n  BOOL IsMatchingType(\n    [in] IRecordInfo *pRecordInfo);\n\n  PVOID RecordCreate();\n\n  HRESULT RecordCreateCopy(\n    [in] PVOID pvSource,\n    [out] PVOID *ppvDest);\n\n  HRESULT RecordDestroy(\n    [in] PVOID pvRecord);\n}\n\n[\n  local,\n  object,\n  uuid(00020405-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface ICreateTypeInfo : IUnknown\n{\n  typedef [unique] ICreateTypeInfo *LPCREATETYPEINFO;\n\n  HRESULT SetGuid(\n    [in] REFGUID guid);\n\n  HRESULT SetTypeFlags(\n    [in] UINT uTypeFlags);\n\n  HRESULT SetDocString(\n    [in] LPOLESTR pStrDoc);\n\n  HRESULT SetHelpContext(\n    [in] DWORD dwHelpContext);\n\n  HRESULT SetVersion(\n    [in] WORD wMajorVerNum,\n    [in] WORD wMinorVerNum);\n\n  HRESULT AddRefTypeInfo(\n    [in] ITypeInfo *pTInfo,\n    [in] HREFTYPE *phRefType);\n\n  HRESULT AddFuncDesc(\n    [in] UINT index,\n    [in] FUNCDESC *pFuncDesc);\n\n  HRESULT AddImplType(\n    [in] UINT index,\n    [in] HREFTYPE hRefType);\n\n  HRESULT SetImplTypeFlags(\n    [in] UINT index,\n    [in] INT implTypeFlags);\n\n  HRESULT SetAlignment(\n    [in] WORD cbAlignment);\n\n  HRESULT SetSchema(\n    [in] LPOLESTR pStrSchema);\n\n  HRESULT AddVarDesc(\n    [in] UINT index,\n    [in] VARDESC *pVarDesc);\n\n  HRESULT SetFuncAndParamNames(\n    [in] UINT index,\n    [in, size_is(cNames)] LPOLESTR *rgszNames,\n    [in] UINT cNames);\n\n  HRESULT SetVarName(\n    [in] UINT index,\n    [in] LPOLESTR szName);\n\n  HRESULT SetTypeDescAlias(\n    [in] TYPEDESC *pTDescAlias);\n\n  HRESULT DefineFuncAsDllEntry(\n    [in] UINT index,\n    [in] LPOLESTR szDllName,\n    [in] LPOLESTR szProcName);\n\n  HRESULT SetFuncDocString(\n    [in] UINT index,\n    [in] LPOLESTR szDocString);\n\n  HRESULT SetVarDocString(\n    [in] UINT index,\n    [in] LPOLESTR szDocString);\n\n  HRESULT SetFuncHelpContext(\n    [in] UINT index,\n    [in] DWORD dwHelpContext);\n\n  HRESULT SetVarHelpContext(\n    [in] UINT index,\n    [in] DWORD dwHelpContext);\n\n  HRESULT SetMops(\n    [in] UINT index,\n    [in] BSTR bstrMops);\n\n  HRESULT SetTypeIdldesc(\n    [in] IDLDESC * pIdlDesc);\n\n  HRESULT LayOut();\n}\n\n[\n  local,\n  object,\n  uuid(0002040E-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface ICreateTypeInfo2 : ICreateTypeInfo\n{\n  typedef [unique] ICreateTypeInfo2 *LPCREATETYPEINFO2;\n\n  HRESULT DeleteFuncDesc(\n    [in] UINT index);\n\n  HRESULT DeleteFuncDescByMemId(\n    [in] MEMBERID memid,\n    [in] INVOKEKIND invKind);\n\n  HRESULT DeleteVarDesc(\n    [in] UINT index);\n\n  HRESULT DeleteVarDescByMemId(\n    [in] MEMBERID memid);\n\n  HRESULT DeleteImplType(\n    [in] UINT index);\n\n  HRESULT SetCustData(\n    [in] REFGUID guid,\n    [in] VARIANT *pVarVal);\n\n  HRESULT SetFuncCustData( \n    [in] UINT index, \n    [in] REFGUID guid, \n    [in] VARIANT *pVarVal);\n  \n  HRESULT SetParamCustData( \n    [in] UINT indexFunc, \n    [in] UINT indexParam, \n    [in] REFGUID guid, \n    [in] VARIANT *pVarVal);\n\n  HRESULT SetVarCustData( \n    [in] UINT index, \n    [in] REFGUID guid, \n    [in] VARIANT *pVarVal);\n\n  HRESULT SetImplTypeCustData( \n    [in] UINT index, \n    [in] REFGUID guid, \n    [in] VARIANT *pVarVal);\n\n  HRESULT SetHelpStringContext(\n    [in] ULONG dwHelpStringContext);\n\n  HRESULT SetFuncHelpStringContext(\n    [in] UINT index,\n    [in] ULONG dwHelpStringContext);\n\n  HRESULT SetVarHelpStringContext(\n    [in] UINT index,\n    [in] ULONG dwHelpStringContext);\n\n  HRESULT Invalidate();\n\n  HRESULT SetName(\n    [in] LPOLESTR szName);\n}\n\n[\n  local,\n  object,\n  uuid(00020406-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface ICreateTypeLib : IUnknown\n{\n  typedef [unique] ICreateTypeLib *LPCREATETYPELIB;\n\n  HRESULT CreateTypeInfo(\n    [in] LPOLESTR szName,\n    [in] TYPEKIND tkind,\n    [out] ICreateTypeInfo **ppCTInfo);\n\n  HRESULT SetName(\n    [in] LPOLESTR szName);\n\n  HRESULT SetVersion(\n    [in] WORD wMajorVerNum,\n    [in] WORD wMinorVerNum);\n\n  HRESULT SetGuid(\n    [in] REFGUID guid);\n\n  HRESULT SetDocString(\n    [in] LPOLESTR szDoc);\n\n  HRESULT SetHelpFileName(\n    [in] LPOLESTR szHelpFileName);\n\n  HRESULT SetHelpContext(\n    [in] DWORD dwHelpContext);\n\n  HRESULT SetLcid(\n    [in] LCID lcid);\n\n  HRESULT SetLibFlags(\n    [in] UINT uLibFlags);\n\n  HRESULT SaveAllChanges();\n}\n\n[\n  local,\n  object,\n  uuid(0002040F-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface ICreateTypeLib2 : ICreateTypeLib\n{\n  typedef [unique] ICreateTypeLib2 *LPCREATETYPELIB2;\n\n  HRESULT DeleteTypeInfo(\n    [in] LPOLESTR szName);\n\n  HRESULT SetCustData(\n    [in] REFGUID guid,\n    [in] VARIANT *pVarVal);\n\n  HRESULT SetHelpStringContext(\n    [in] ULONG dwHelpStringContext);\n\n  HRESULT SetHelpStringDll(\n    [in] LPOLESTR szFileName);\n}\n\n\n/*****************************************************************************\n * IErrorLog interface\n */\n[\n  object,\n  uuid(3127ca40-446e-11ce-8135-00aa004bb851),\n  pointer_default(unique)\n]\ninterface IErrorLog : IUnknown\n{\n  typedef IErrorLog *LPERRORLOG;\n\n  HRESULT AddError(\n    [in] LPCOLESTR pszPropName,\n    [in] EXCEPINFO *pExcepInfo);\n}\n\n\n/*****************************************************************************\n * IPropertyBag interface\n */\n[\n  object,\n  uuid(55272a00-42cb-11ce-8135-00aa004bb851),\n  pointer_default(unique)\n]\ninterface IPropertyBag : IUnknown\n{\n  typedef IPropertyBag *LPPROPERTYBAG;\n\n  [local]\n  HRESULT Read(\n    [in] LPCOLESTR pszPropName,\n    [in, out] VARIANT *pVar,\n    [in] IErrorLog *pErrorLog);\n\n  [call_as(Read)]\n  HRESULT RemoteRead(\n    [in] LPCOLESTR pszPropName,\n    [out] VARIANT *pVar,\n    [in] IErrorLog *pErrorLog,\n    [in] DWORD varType,\n    [in] IUnknown *pUnkObj);\n\n  HRESULT Write(\n    [in] LPCOLESTR pszPropName,\n    [in] VARIANT *pVar);\n}\n"
  },
  {
    "path": "wine/windows/objbase.h",
    "content": "/*\n * Copyright (C) 1998-1999 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <rpc.h>\n#include <rpcndr.h>\n\n#ifndef _OBJBASE_H_\n#define _OBJBASE_H_\n\n/*****************************************************************************\n * Macros to define a COM interface\n */\n/*\n * The goal of the following set of definitions is to provide a way to use the same\n * header file definitions to provide both a C interface and a C++ object oriented\n * interface to COM interfaces. The type of interface is selected automatically\n * depending on the language but it is always possible to get the C interface in C++\n * by defining CINTERFACE.\n *\n * It is based on the following assumptions:\n *  - all COM interfaces derive from IUnknown, this should not be a problem.\n *  - the header file only defines the interface, the actual fields are defined\n *    separately in the C file implementing the interface.\n *\n * The natural approach to this problem would be to make sure we get a C++ class and\n * virtual methods in C++ and a structure with a table of pointer to functions in C.\n * Unfortunately the layout of the virtual table is compiler specific, the layout of\n * g++ virtual tables is not the same as that of an egcs virtual table which is not the\n * same as that generated by Visual C++. There are workarounds to make the virtual tables\n * compatible via padding but unfortunately the one which is imposed to the WINE emulator\n * by the Windows binaries, i.e. the Visual C++ one, is the most compact of all.\n *\n * So the solution I finally adopted does not use virtual tables. Instead I use inline\n * non virtual methods that dereference the method pointer themselves and perform the call.\n *\n * Let's take Direct3D as an example:\n *\n *    #define INTERFACE IDirect3D\n *    DECLARE_INTERFACE_(IDirect3D,IUnknown)\n *    {\n *        // *** IUnknown methods *** //\n *        STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID, void**) PURE;\n *        STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n *        STDMETHOD_(ULONG,Release)(THIS) PURE;\n *        // *** IDirect3D methods *** //\n *        STDMETHOD(Initialize)(THIS_ REFIID) PURE;\n *        STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK, LPVOID) PURE;\n *        STDMETHOD(CreateLight)(THIS_ LPDIRECT3DLIGHT *, IUnknown *) PURE;\n *        STDMETHOD(CreateMaterial)(THIS_ LPDIRECT3DMATERIAL *, IUnknown *) PURE;\n *        STDMETHOD(CreateViewport)(THIS_ LPDIRECT3DVIEWPORT *, IUnknown *) PURE;\n *        STDMETHOD(FindDevice)(THIS_ LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT) PURE;\n *    };\n *    #undef INTERFACE\n *\n *    #ifdef COBJMACROS\n *    // *** IUnknown methods *** //\n *    #define IDirect3D_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n *    #define IDirect3D_AddRef(p)             (p)->lpVtbl->AddRef(p)\n *    #define IDirect3D_Release(p)            (p)->lpVtbl->Release(p)\n *    // *** IDirect3D methods *** //\n *    #define IDirect3D_Initialize(p,a)       (p)->lpVtbl->Initialize(p,a)\n *    #define IDirect3D_EnumDevices(p,a,b)    (p)->lpVtbl->EnumDevice(p,a,b)\n *    #define IDirect3D_CreateLight(p,a,b)    (p)->lpVtbl->CreateLight(p,a,b)\n *    #define IDirect3D_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b)\n *    #define IDirect3D_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b)\n *    #define IDirect3D_FindDevice(p,a,b)     (p)->lpVtbl->FindDevice(p,a,b)\n *    #endif\n *\n * Comments:\n *  - The INTERFACE macro is used in the STDMETHOD macros to define the type of the 'this'\n *    pointer. Defining this macro here saves us the trouble of having to repeat the interface\n *    name everywhere. Note however that because of the way macros work, a macro like STDMETHOD\n *    cannot use 'INTERFACE##_VTABLE' because this would give 'INTERFACE_VTABLE' and not\n *    'IDirect3D_VTABLE'.\n *  - The DECLARE_INTERFACE declares all the structures necessary for the interface. We have to\n *    explicitly use the interface name for macro expansion reasons again. It defines the list of\n *    methods that are inheritable from this interface. It must be written manually (rather than\n *    using a macro to generate the equivalent code) to avoid macro recursion (which compilers\n *    don't like). It must start with the methods definition of the parent interface so that\n *    method inheritance works properly.\n *  - The 'undef INTERFACE' is here to remind you that using INTERFACE in the following macros\n *    will not work.\n *  - Finally the set of 'IDirect3D_Xxx' macros is a standard set of macros defined to ease access\n *    to the interface methods in C. Unfortunately I don't see any way to avoid having to duplicate\n *    the inherited method definitions there. This time I could have used a trick to use only one\n *    macro whatever the number of parameters but I preferred to have it work the same way as above.\n *  - You probably have noticed that we don't define the fields we need to actually implement this\n *    interface: reference count, pointer to other resources and miscellaneous fields. That's\n *    because these interfaces are just that: interfaces. They may be implemented more than once, in\n *    different contexts and sometimes not even in Wine. Thus it would not make sense to impose\n *    that the interface contains some specific fields.\n *\n *\n * In C this gives:\n *    typedef struct IDirect3DVtbl IDirect3DVtbl;\n *    struct IDirect3D {\n *        IDirect3DVtbl* lpVtbl;\n *    };\n *    struct IDirect3DVtbl {\n *        HRESULT (*QueryInterface)(IDirect3D* me, REFIID riid, LPVOID* ppvObj);\n *        ULONG (*AddRef)(IDirect3D* me);\n *        ULONG (*Release)(IDirect3D* me);\n *        HRESULT (*Initialize)(IDirect3D* me, REFIID a);\n *        HRESULT (*EnumDevices)(IDirect3D* me, LPD3DENUMDEVICESCALLBACK a, LPVOID b);\n *        HRESULT (*CreateLight)(IDirect3D* me, LPDIRECT3DLIGHT* a, IUnknown* b);\n *        HRESULT (*CreateMaterial)(IDirect3D* me, LPDIRECT3DMATERIAL* a, IUnknown* b);\n *        HRESULT (*CreateViewport)(IDirect3D* me, LPDIRECT3DVIEWPORT* a, IUnknown* b);\n *        HRESULT (*FindDevice)(IDirect3D* me, LPD3DFINDDEVICESEARCH a, LPD3DFINDDEVICERESULT b);\n *    };\n *\n *    #ifdef COBJMACROS\n *    // *** IUnknown methods *** //\n *    #define IDirect3D_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n *    #define IDirect3D_AddRef(p)             (p)->lpVtbl->AddRef(p)\n *    #define IDirect3D_Release(p)            (p)->lpVtbl->Release(p)\n *    // *** IDirect3D methods *** //\n *    #define IDirect3D_Initialize(p,a)       (p)->lpVtbl->Initialize(p,a)\n *    #define IDirect3D_EnumDevices(p,a,b)    (p)->lpVtbl->EnumDevice(p,a,b)\n *    #define IDirect3D_CreateLight(p,a,b)    (p)->lpVtbl->CreateLight(p,a,b)\n *    #define IDirect3D_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b)\n *    #define IDirect3D_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b)\n *    #define IDirect3D_FindDevice(p,a,b)     (p)->lpVtbl->FindDevice(p,a,b)\n *    #endif\n *\n * Comments:\n *  - IDirect3D only contains a pointer to the IDirect3D virtual/jump table. This is the only thing\n *    the user needs to know to use the interface. Of course the structure we will define to\n *    implement this interface will have more fields but the first one will match this pointer.\n *  - The code generated by DECLARE_INTERFACE defines both the structure representing the interface and\n *    the structure for the jump table.\n *  - Each method is declared as a pointer to function field in the jump table. The implementation\n *    will fill this jump table with appropriate values, probably using a static variable, and\n *    initialize the lpVtbl field to point to this variable.\n *  - The IDirect3D_Xxx macros then just derefence the lpVtbl pointer and use the function pointer\n *    corresponding to the macro name. This emulates the behavior of a virtual table and should be\n *    just as fast.\n *  - This C code should be quite compatible with the Windows headers both for code that uses COM\n *    interfaces and for code implementing a COM interface.\n *\n *\n * And in C++ (with gcc's g++):\n *\n *    typedef struct IDirect3D: public IUnknown {\n *        virtual HRESULT Initialize(REFIID a) = 0;\n *        virtual HRESULT EnumDevices(LPD3DENUMDEVICESCALLBACK a, LPVOID b) = 0;\n *        virtual HRESULT CreateLight(LPDIRECT3DLIGHT* a, IUnknown* b) = 0;\n *        virtual HRESULT CreateMaterial(LPDIRECT3DMATERIAL* a, IUnknown* b) = 0;\n *        virtual HRESULT CreateViewport(LPDIRECT3DVIEWPORT* a, IUnknown* b) = 0;\n *        virtual HRESULT FindDevice(LPD3DFINDDEVICESEARCH a, LPD3DFINDDEVICERESULT b) = 0;\n *    };\n *\n * Comments:\n *  - Of course in C++ we use inheritance so that we don't have to duplicate the method definitions.\n *  - Finally there is no IDirect3D_Xxx macro. These are not needed in C++ unless the CINTERFACE\n *    macro is defined in which case we would not be here.\n */\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n\n/* C++ interface */\n\n#define STDMETHOD(method)        virtual HRESULT STDMETHODCALLTYPE method\n#define STDMETHOD_(type,method)  virtual type STDMETHODCALLTYPE method\n#define STDMETHODV(method)       virtual HRESULT STDMETHODVCALLTYPE method\n#define STDMETHODV_(type,method) virtual type STDMETHODVCALLTYPE method\n\n#define PURE   = 0\n#define THIS_\n#define THIS   void\n\n#define interface struct\n#define DECLARE_INTERFACE(iface)        interface DECLSPEC_NOVTABLE iface\n#define DECLARE_INTERFACE_(iface,ibase) interface DECLSPEC_NOVTABLE iface : public ibase\n#define DECLARE_INTERFACE_IID_(iface, ibase, iid) interface DECLSPEC_UUID(iid) DECLSPEC_NOVTABLE iface : public ibase\n\n#define BEGIN_INTERFACE\n#define END_INTERFACE\n\n#else  /* __cplusplus && !CINTERFACE */\n\n/* C interface */\n\n#define STDMETHOD(method)        HRESULT (STDMETHODCALLTYPE *method)\n#define STDMETHOD_(type,method)  type (STDMETHODCALLTYPE *method)\n#define STDMETHODV(method)       HRESULT (STDMETHODVCALLTYPE *method)\n#define STDMETHODV_(type,method) type (STDMETHODVCALLTYPE *method)\n\n#define PURE\n#define THIS_ INTERFACE *This,\n#define THIS  INTERFACE *This\n\n#define interface struct\n\n#ifdef __WINESRC__\n#define CONST_VTABLE\n#endif\n\n#ifdef CONST_VTABLE\n#undef CONST_VTBL\n#define CONST_VTBL const\n#define DECLARE_INTERFACE(iface) \\\n         typedef interface iface { const struct iface##Vtbl *lpVtbl; } iface; \\\n         typedef struct iface##Vtbl iface##Vtbl; \\\n         struct iface##Vtbl\n#else\n#undef CONST_VTBL\n#define CONST_VTBL\n#define DECLARE_INTERFACE(iface) \\\n         typedef interface iface { struct iface##Vtbl *lpVtbl; } iface; \\\n         typedef struct iface##Vtbl iface##Vtbl; \\\n         struct iface##Vtbl\n#endif\n#define DECLARE_INTERFACE_(iface,ibase) DECLARE_INTERFACE(iface)\n#define DECLARE_INTERFACE_IID_(iface, ibase, iid) DECLARE_INTERFACE_(iface, ibase)\n\n#define BEGIN_INTERFACE\n#define END_INTERFACE\n\n#endif  /* __cplusplus && !CINTERFACE */\n\n#ifndef __IRpcStubBuffer_FWD_DEFINED__\n#define __IRpcStubBuffer_FWD_DEFINED__\ntypedef interface IRpcStubBuffer IRpcStubBuffer;\n#endif\n#ifndef __IRpcChannelBuffer_FWD_DEFINED__\n#define __IRpcChannelBuffer_FWD_DEFINED__\ntypedef interface IRpcChannelBuffer IRpcChannelBuffer;\n#endif\n\n#ifndef RC_INVOKED\n/* For compatibility only, at least for now */\n#include <stdlib.h>\n#endif\n\n#include <wtypes.h>\n#include <unknwn.h>\n#include <objidl.h>\n\n#include <guiddef.h>\n#ifndef INITGUID\n#include <cguid.h>\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef NONAMELESSSTRUCT\n#define LISet32(li, v)   ((li).HighPart = (v) < 0 ? -1 : 0, (li).LowPart = (v))\n#define ULISet32(li, v)  ((li).HighPart = 0, (li).LowPart = (v))\n#else\n#define LISet32(li, v)   ((li).u.HighPart = (v) < 0 ? -1 : 0, (li).u.LowPart = (v))\n#define ULISet32(li, v)  ((li).u.HighPart = 0, (li).u.LowPart = (v))\n#endif\n\n/*****************************************************************************\n *\tStandard API\n */\nDWORD WINAPI CoBuildVersion(void);\n\ntypedef enum tagCOINIT\n{\n    COINIT_APARTMENTTHREADED  = 0x2, /* Apartment model */\n    COINIT_MULTITHREADED      = 0x0, /* OLE calls objects on any thread */\n    COINIT_DISABLE_OLE1DDE    = 0x4, /* Don't use DDE for Ole1 support */\n    COINIT_SPEED_OVER_MEMORY  = 0x8  /* Trade memory for speed */\n} COINIT;\n\nHRESULT WINAPI CoInitialize(LPVOID lpReserved);\nHRESULT WINAPI CoInitializeEx(LPVOID lpReserved, DWORD dwCoInit);\nvoid WINAPI CoUninitialize(void);\nDWORD WINAPI CoGetCurrentProcess(void);\nHRESULT WINAPI CoGetCurrentLogicalThreadId(GUID *id);\nHRESULT WINAPI CoGetApartmentType(APTTYPE *type, APTTYPEQUALIFIER *qualifier);\n\nHINSTANCE WINAPI CoLoadLibrary(LPOLESTR lpszLibName, BOOL bAutoFree);\nvoid WINAPI CoFreeAllLibraries(void);\nvoid WINAPI CoFreeLibrary(HINSTANCE hLibrary);\nvoid WINAPI CoFreeUnusedLibraries(void);\nvoid WINAPI CoFreeUnusedLibrariesEx(DWORD dwUnloadDelay, DWORD dwReserved);\n\nHRESULT WINAPI CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv);\nHRESULT WINAPI CoCreateInstanceEx(REFCLSID      rclsid,\n\t\t\t\t  LPUNKNOWN     pUnkOuter,\n\t\t\t\t  DWORD         dwClsContext,\n\t\t\t\t  COSERVERINFO* pServerInfo,\n\t\t\t\t  ULONG         cmq,\n\t\t\t\t  MULTI_QI*     pResults);\n\nHRESULT WINAPI CoGetInstanceFromFile(COSERVERINFO* pServerInfo, CLSID* pClsid, IUnknown* punkOuter, DWORD dwClsCtx, DWORD grfMode, OLECHAR* pwszName, DWORD dwCount, MULTI_QI* pResults);\nHRESULT WINAPI CoGetInstanceFromIStorage(COSERVERINFO* pServerInfo, CLSID* pClsid, IUnknown* punkOuter, DWORD dwClsCtx, IStorage* pstg, DWORD dwCount, MULTI_QI* pResults);\n\nHRESULT WINAPI CoGetMalloc(DWORD dwMemContext, LPMALLOC* lpMalloc);\nLPVOID WINAPI CoTaskMemAlloc(SIZE_T size) __WINE_ALLOC_SIZE(1);\nvoid WINAPI CoTaskMemFree(LPVOID ptr);\nLPVOID WINAPI CoTaskMemRealloc(LPVOID ptr, SIZE_T size);\n\nHRESULT WINAPI CoRegisterMallocSpy(LPMALLOCSPY pMallocSpy);\nHRESULT WINAPI CoRevokeMallocSpy(void);\n\nHRESULT WINAPI CoGetContextToken( ULONG_PTR *token );\n\n/* class registration flags; passed to CoRegisterClassObject */\ntypedef enum tagREGCLS\n{\n    REGCLS_SINGLEUSE = 0,\n    REGCLS_MULTIPLEUSE = 1,\n    REGCLS_MULTI_SEPARATE = 2,\n    REGCLS_SUSPENDED = 4,\n    REGCLS_SURROGATE = 8\n} REGCLS;\n\nHRESULT WINAPI CoGetClassObject(REFCLSID rclsid, DWORD dwClsContext, COSERVERINFO *pServerInfo, REFIID iid, LPVOID *ppv);\nHRESULT WINAPI CoRegisterClassObject(REFCLSID rclsid,LPUNKNOWN pUnk,DWORD dwClsContext,DWORD flags,LPDWORD lpdwRegister);\nHRESULT WINAPI CoRevokeClassObject(DWORD dwRegister);\nHRESULT WINAPI CoGetPSClsid(REFIID riid,CLSID *pclsid);\nHRESULT WINAPI CoRegisterPSClsid(REFIID riid, REFCLSID rclsid);\nHRESULT WINAPI CoRegisterSurrogate(LPSURROGATE pSurrogate);\nHRESULT WINAPI CoSuspendClassObjects(void);\nHRESULT WINAPI CoResumeClassObjects(void);\nULONG WINAPI CoAddRefServerProcess(void);\nULONG WINAPI CoReleaseServerProcess(void);\n\n/* marshalling */\nHRESULT WINAPI CoCreateFreeThreadedMarshaler(LPUNKNOWN punkOuter, LPUNKNOWN* ppunkMarshal);\nHRESULT WINAPI CoGetInterfaceAndReleaseStream(LPSTREAM pStm, REFIID iid, LPVOID* ppv);\nHRESULT WINAPI CoGetMarshalSizeMax(ULONG* pulSize, REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags);\nHRESULT WINAPI CoGetStandardMarshal(REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags, LPMARSHAL* ppMarshal);\nHRESULT WINAPI CoMarshalHresult(LPSTREAM pstm, HRESULT hresult);\nHRESULT WINAPI CoMarshalInterface(LPSTREAM pStm, REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags);\nHRESULT WINAPI CoMarshalInterThreadInterfaceInStream(REFIID riid, LPUNKNOWN pUnk, LPSTREAM* ppStm);\nHRESULT WINAPI CoReleaseMarshalData(LPSTREAM pStm);\nHRESULT WINAPI CoDisconnectObject(LPUNKNOWN lpUnk, DWORD reserved);\nHRESULT WINAPI CoUnmarshalHresult(LPSTREAM pstm, HRESULT* phresult);\nHRESULT WINAPI CoUnmarshalInterface(LPSTREAM pStm, REFIID riid, LPVOID* ppv);\nHRESULT WINAPI CoLockObjectExternal(LPUNKNOWN pUnk, BOOL fLock, BOOL fLastUnlockReleases);\nBOOL WINAPI CoIsHandlerConnected(LPUNKNOWN pUnk);\n\n/* security */\nHRESULT WINAPI CoInitializeSecurity(PSECURITY_DESCRIPTOR pSecDesc, LONG cAuthSvc, SOLE_AUTHENTICATION_SERVICE* asAuthSvc, void* pReserved1, DWORD dwAuthnLevel, DWORD dwImpLevel, void* pReserved2, DWORD dwCapabilities, void* pReserved3);\nHRESULT WINAPI CoGetCallContext(REFIID riid, void** ppInterface);\nHRESULT WINAPI CoSwitchCallContext(IUnknown *pContext, IUnknown **ppOldContext);\nHRESULT WINAPI CoQueryAuthenticationServices(DWORD* pcAuthSvc, SOLE_AUTHENTICATION_SERVICE** asAuthSvc);\n\nHRESULT WINAPI CoQueryProxyBlanket(IUnknown* pProxy, DWORD* pwAuthnSvc, DWORD* pAuthzSvc, OLECHAR** pServerPrincName, DWORD* pAuthnLevel, DWORD* pImpLevel, RPC_AUTH_IDENTITY_HANDLE* pAuthInfo, DWORD* pCapabilities);\nHRESULT WINAPI CoSetProxyBlanket(IUnknown* pProxy, DWORD dwAuthnSvc, DWORD dwAuthzSvc, OLECHAR* pServerPrincName, DWORD dwAuthnLevel, DWORD dwImpLevel, RPC_AUTH_IDENTITY_HANDLE pAuthInfo, DWORD dwCapabilities);\nHRESULT WINAPI CoCopyProxy(IUnknown* pProxy, IUnknown** ppCopy);\n\nHRESULT WINAPI CoImpersonateClient(void);\nHRESULT WINAPI CoQueryClientBlanket(DWORD* pAuthnSvc, DWORD* pAuthzSvc, OLECHAR** pServerPrincName, DWORD* pAuthnLevel, DWORD* pImpLevel, RPC_AUTHZ_HANDLE* pPrivs, DWORD* pCapabilities);\nHRESULT WINAPI CoRevertToSelf(void);\n\n/* misc */\nHRESULT WINAPI CoGetTreatAsClass(REFCLSID clsidOld, LPCLSID pClsidNew);\nHRESULT WINAPI CoTreatAsClass(REFCLSID clsidOld, REFCLSID clsidNew);\nHRESULT WINAPI CoAllowSetForegroundWindow(IUnknown *pUnk, LPVOID lpvReserved);\nHRESULT WINAPI CoGetObjectContext(REFIID riid, LPVOID *ppv);\nHRESULT WINAPI CoRegisterInitializeSpy(IInitializeSpy *spy, ULARGE_INTEGER *cookie);\nHRESULT WINAPI CoRevokeInitializeSpy(ULARGE_INTEGER cookie);\n\nHRESULT WINAPI CoCreateGuid(GUID* pguid);\nBOOL WINAPI CoIsOle1Class(REFCLSID rclsid);\n\nBOOL WINAPI CoDosDateTimeToFileTime(WORD nDosDate, WORD nDosTime, FILETIME* lpFileTime);\nBOOL WINAPI CoFileTimeToDosDateTime(FILETIME* lpFileTime, WORD* lpDosDate, WORD* lpDosTime);\nHRESULT WINAPI CoFileTimeNow(FILETIME* lpFileTime);\nHRESULT WINAPI CoRegisterMessageFilter(LPMESSAGEFILTER lpMessageFilter,LPMESSAGEFILTER *lplpMessageFilter);\nHRESULT WINAPI CoRegisterChannelHook(REFGUID ExtensionGuid, IChannelHook *pChannelHook);\n\ntypedef enum tagCOWAIT_FLAGS\n{\n    COWAIT_WAITALL        = 0x00000001,\n    COWAIT_ALERTABLE      = 0x00000002,\n    COWAIT_INPUTAVAILABLE = 0x00000004\n} COWAIT_FLAGS;\n\nHRESULT WINAPI CoWaitForMultipleHandles(DWORD dwFlags,DWORD dwTimeout,ULONG cHandles,LPHANDLE pHandles,LPDWORD lpdwindex);\n\n/*****************************************************************************\n *\tGUID API\n */\nHRESULT WINAPI StringFromCLSID(REFCLSID id, LPOLESTR*);\nHRESULT WINAPI CLSIDFromString(LPCOLESTR, LPCLSID);\nHRESULT WINAPI CLSIDFromProgID(LPCOLESTR progid, LPCLSID riid);\nHRESULT WINAPI ProgIDFromCLSID(REFCLSID clsid, LPOLESTR *lplpszProgID);\nINT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax);\nHRESULT WINAPI IIDFromString(LPCOLESTR str, IID *iid);\nHRESULT WINAPI StringFromIID(REFIID riid, LPOLESTR str);\n\n/*****************************************************************************\n *\tCOM Server dll - exports\n */\nHRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID * ppv) DECLSPEC_HIDDEN;\nHRESULT WINAPI DllCanUnloadNow(void) DECLSPEC_HIDDEN;\n\n/* shouldn't be here, but is nice for type checking */\n#ifdef __WINESRC__\nHRESULT WINAPI DllRegisterServer(void) DECLSPEC_HIDDEN;\nHRESULT WINAPI DllUnregisterServer(void) DECLSPEC_HIDDEN;\n#endif\n\n\n/*****************************************************************************\n *\tData Object\n */\nHRESULT WINAPI CreateDataAdviseHolder(LPDATAADVISEHOLDER* ppDAHolder);\nHRESULT WINAPI CreateDataCache(LPUNKNOWN pUnkOuter, REFCLSID rclsid, REFIID iid, LPVOID* ppv);\n\n/*****************************************************************************\n *\tMoniker API\n */\nHRESULT WINAPI BindMoniker(LPMONIKER pmk, DWORD grfOpt, REFIID iidResult, LPVOID* ppvResult);\nHRESULT WINAPI CoGetObject(LPCWSTR pszName, BIND_OPTS *pBindOptions, REFIID riid, void **ppv);\nHRESULT WINAPI CreateAntiMoniker(LPMONIKER * ppmk);\nHRESULT WINAPI CreateBindCtx(DWORD reserved, LPBC* ppbc);\nHRESULT WINAPI CreateClassMoniker(REFCLSID rclsid, LPMONIKER* ppmk);\nHRESULT WINAPI CreateFileMoniker(LPCOLESTR lpszPathName, LPMONIKER* ppmk);\nHRESULT WINAPI CreateGenericComposite(LPMONIKER pmkFirst, LPMONIKER pmkRest, LPMONIKER* ppmkComposite);\nHRESULT WINAPI CreateItemMoniker(LPCOLESTR lpszDelim, LPCOLESTR  lpszItem, LPMONIKER* ppmk);\nHRESULT WINAPI CreateObjrefMoniker(LPUNKNOWN punk, LPMONIKER * ppmk);\nHRESULT WINAPI CreatePointerMoniker(LPUNKNOWN punk, LPMONIKER * ppmk);\nHRESULT WINAPI GetClassFile(LPCOLESTR filePathName,CLSID *pclsid);\nHRESULT WINAPI GetRunningObjectTable(DWORD reserved, LPRUNNINGOBJECTTABLE *pprot);\nHRESULT WINAPI MkParseDisplayName(LPBC pbc, LPCOLESTR szUserName, ULONG * pchEaten, LPMONIKER * ppmk);\nHRESULT WINAPI MonikerCommonPrefixWith(IMoniker* pmkThis,IMoniker* pmkOther,IMoniker** ppmkCommon);\nHRESULT WINAPI MonikerRelativePathTo(LPMONIKER pmkSrc, LPMONIKER pmkDest, LPMONIKER * ppmkRelPath, BOOL dwReserved);\n\n/*****************************************************************************\n *\tStorage API\n */\n#define STGM_DIRECT\t\t0x00000000\n#define STGM_TRANSACTED\t\t0x00010000\n#define STGM_SIMPLE\t\t0x08000000\n#define STGM_READ\t\t0x00000000\n#define STGM_WRITE\t\t0x00000001\n#define STGM_READWRITE\t\t0x00000002\n#define STGM_SHARE_DENY_NONE\t0x00000040\n#define STGM_SHARE_DENY_READ\t0x00000030\n#define STGM_SHARE_DENY_WRITE\t0x00000020\n#define STGM_SHARE_EXCLUSIVE\t0x00000010\n#define STGM_PRIORITY\t\t0x00040000\n#define STGM_DELETEONRELEASE\t0x04000000\n#define STGM_CREATE\t\t0x00001000\n#define STGM_CONVERT\t\t0x00020000\n#define STGM_FAILIFTHERE\t0x00000000\n#define STGM_NOSCRATCH\t\t0x00100000\n#define STGM_NOSNAPSHOT\t\t0x00200000\n#define STGM_DIRECT_SWMR\t0x00400000\n\n#define STGFMT_STORAGE\t\t0\n#define STGFMT_FILE \t\t3\n#define STGFMT_ANY \t\t4\n#define STGFMT_DOCFILE \t5\n\ntypedef struct tagSTGOPTIONS\n{\n    USHORT usVersion;\n    USHORT reserved;\n    ULONG ulSectorSize;\n    const WCHAR* pwcsTemplateFile;\n} STGOPTIONS;\n\nHRESULT WINAPI StgCreateDocfile(LPCOLESTR pwcsName,DWORD grfMode,DWORD reserved,IStorage **ppstgOpen);\nHRESULT WINAPI StgCreateStorageEx(const WCHAR*,DWORD,DWORD,DWORD,STGOPTIONS*,void*,REFIID,void**);\nHRESULT WINAPI StgIsStorageFile(LPCOLESTR fn);\nHRESULT WINAPI StgIsStorageILockBytes(ILockBytes *plkbyt);\nHRESULT WINAPI StgOpenStorage(const OLECHAR* pwcsName,IStorage* pstgPriority,DWORD grfMode,SNB snbExclude,DWORD reserved,IStorage**ppstgOpen);\nHRESULT WINAPI StgOpenStorageEx(const WCHAR* pwcwName,DWORD grfMode,DWORD stgfmt,DWORD grfAttrs,STGOPTIONS *pStgOptions, void *reserved, REFIID riid, void **ppObjectOpen);\n\nHRESULT WINAPI StgCreateDocfileOnILockBytes(ILockBytes *plkbyt,DWORD grfMode, DWORD reserved, IStorage** ppstgOpen);\nHRESULT WINAPI StgOpenStorageOnILockBytes(ILockBytes *plkbyt, IStorage *pstgPriority, DWORD grfMode, SNB snbExclude, DWORD reserved, IStorage **ppstgOpen);\nHRESULT WINAPI StgSetTimes( OLECHAR const *lpszName, FILETIME const *pctime, FILETIME const *patime, FILETIME const *pmtime);\n\n#ifdef __cplusplus\n}\n#endif\n\n#ifndef __WINESRC__\n# include <urlmon.h>\n#endif\n#include <propidl.h>\n\n#ifndef __WINESRC__\n\n#define FARSTRUCT\n#define HUGEP\n\n#define WINOLEAPI        STDAPI\n#define WINOLEAPI_(type) STDAPI_(type)\n\n#endif /* __WINESRC__ */\n\n#endif /* _OBJBASE_H_ */\n"
  },
  {
    "path": "wine/windows/objectarray.idl",
    "content": "/*\n * Copyright 2011 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\n\n[\n    uuid(92ca9dcd-5622-4bba-a805-5e9f541bd8c9),\n    object,\n    pointer_default(unique)\n]\ninterface IObjectArray : IUnknown\n{\n    HRESULT GetCount([out] UINT *pcObjects);\n    HRESULT GetAt(\n        [in] UINT uiIndex,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppv);\n}\n\n[\n    uuid(5632b1a4-e38a-400a-928a-d4cd63230295),\n    object,\n    pointer_default(unique)\n]\ninterface IObjectCollection : IObjectArray\n{\n    HRESULT AddObject([in] IUnknown *punk);\n    HRESULT AddFromArray([in] IObjectArray *poaSource);\n    HRESULT RemoveObjectAt([in] UINT uiIndex);\n    HRESULT Clear();\n}\n"
  },
  {
    "path": "wine/windows/objidl.idl",
    "content": "/*\n * Copyright 2002 Ove Kaaven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"unknwn.idl\";\n#endif\n\ninterface IStream;\ninterface IEnumString;\ninterface IRunningObjectTable;\ninterface IMoniker;\ninterface IAdviseSink;\ninterface IAsyncManager;\ninterface ISynchronize;\n\ntypedef struct _COSERVERINFO {\n  DWORD dwReserved1;\n  LPWSTR pwszName;\n  COAUTHINFO *pAuthInfo;\n  DWORD dwReserved2;\n} COSERVERINFO;\n\n/******************** Fundamentals ********************/\n\n[\n  local,\n  object,\n  uuid(00000003-0000-0000-C000-000000000046)\n]\ninterface IMarshal : IUnknown\n{\n  typedef [unique] IMarshal *LPMARSHAL;\n\n  HRESULT GetUnmarshalClass(\n    [in] REFIID riid,\n    [in, unique] void *pv,\n    [in] DWORD dwDestContext,\n    [in, unique] void *pvDestContext,\n    [in] DWORD mshlflags,\n    [out] CLSID *pCid);\n\n  HRESULT GetMarshalSizeMax(\n    [in] REFIID riid,\n    [in, unique] void *pv,\n    [in] DWORD dwDestContext,\n    [in, unique] void *pvDestContext,\n    [in] DWORD mshlflags,\n    [out] DWORD *pSize);\n\n  HRESULT MarshalInterface(\n    [in, unique] IStream *pStm,\n    [in] REFIID riid,\n    [in, unique] void *pv,\n    [in] DWORD dwDestContext,\n    [in, unique] void *pvDestContext,\n    [in] DWORD mshlflags);\n\n  HRESULT UnmarshalInterface(\n    [in, unique] IStream *pStm,\n    [in] REFIID riid,\n    [out] void **ppv);\n\n  HRESULT ReleaseMarshalData(\n    [in, unique] IStream *pStm);\n\n  HRESULT DisconnectObject(\n    [in] DWORD dwReserved);\n}\n\n[\n    local,\n    object,\n    uuid(000001cf-0000-0000-C000-000000000046)\n]\ninterface IMarshal2 : IMarshal\n{\n    typedef [unique] IMarshal2 *LPMARSHAL2;\n}\n\n[\n  local,\n  object,\n  uuid(00000018-0000-0000-C000-000000000046)\n]\ninterface IStdMarshalInfo : IUnknown\n{\n  typedef [unique] IStdMarshalInfo *LPSTDMARSHALINFO;\n\n  HRESULT GetClassForHandler(\n    [in] DWORD dwDestContext,\n    [in, unique] void *pvDestContext,\n    [out] CLSID *pClsid);\n}\n\n[\n  local,\n  object,\n  uuid(00000019-0000-0000-C000-000000000046)\n]\ninterface IExternalConnection : IUnknown\n{\n  typedef [unique] IExternalConnection *LPEXTERNALCONNECTION;\n\n  typedef enum tagEXTCONN {\n    EXTCONN_STRONG   = 0x0001,\n    EXTCONN_WEAK     = 0x0002,\n    EXTCONN_CALLABLE = 0x0004\n  } EXTCONN;\n\n  DWORD AddConnection(\n    [in] DWORD extconn,\n    [in] DWORD reserved);\n\n  DWORD ReleaseConnection(\n    [in] DWORD extconn,\n    [in] DWORD reserved,\n    [in] BOOL fLastReleaseCloses);\n}\n\n[\n  local,\n  object,\n  uuid(00000020-0000-0000-C000-000000000046)\n]\ninterface IMultiQI : IUnknown\n{\n  typedef [unique] IMultiQI *LPMULTIQI;\n\n  typedef struct tagMULTI_QI {\n    const IID *pIID;\n    IUnknown *pItf;\n    HRESULT hr;\n  } MULTI_QI;\n\n  HRESULT QueryMultipleInterfaces(\n    [in] ULONG cMQIs,\n    [in, out] MULTI_QI *pMQIs);\n}\n\n[\n  local,\n  object,\n  uuid(00000002-0000-0000-C000-000000000046)\n]\ninterface IMalloc : IUnknown\n{\n  typedef [unique] IMalloc *LPMALLOC;\n\n  LPVOID Alloc(\n    [in] SIZE_T cb);\n\n  LPVOID Realloc(\n    [in] LPVOID pv,\n    [in] SIZE_T cb);\n\n  void Free(\n    [in] LPVOID pv);\n\n  SIZE_T GetSize(\n    [in] LPVOID pv);\n\n  int DidAlloc(LPVOID pv);\n\n  void HeapMinimize();\n}\n\n[\n  local,\n  object,\n  uuid(0000001d-0000-0000-C000-000000000046)\n]\ninterface IMallocSpy : IUnknown\n{\n  typedef [unique] IMallocSpy *LPMALLOCSPY;\n\n  SIZE_T PreAlloc(\n    [in] SIZE_T cbRequest);\n\n  LPVOID PostAlloc(\n    [in] LPVOID pActual);\n\n  LPVOID PreFree(\n    [in] LPVOID pRequest,\n    [in] BOOL fSpyed);\n\n  void PostFree(\n    [in] BOOL fSpyed);\n\n  SIZE_T PreRealloc(\n    [in] LPVOID pRequest,\n    [in] SIZE_T cbRequest,\n    [out] LPVOID *ppNewRequest,\n    [in] BOOL fSpyed);\n\n  LPVOID PostRealloc(\n    [in] LPVOID pActual,\n    [in] BOOL fSpyed);\n\n  LPVOID PreGetSize(\n    [in] LPVOID pRequest,\n    [in] BOOL fSpyed);\n\n  SIZE_T PostGetSize(\n    [in] SIZE_T cbActual,\n    [in] BOOL fSpyed);\n\n  LPVOID PreDidAlloc(\n    [in] LPVOID pRequest,\n    [in] BOOL fSpyed);\n\n  int PostDidAlloc(\n    [in] LPVOID pRequest,\n    [in] BOOL fSpyed,\n    [in] int fActual);\n\n  void PreHeapMinimize();\n\n  void PostHeapMinimize();\n}\n\n[\n  local,\n  object,\n  uuid(00000021-0000-0000-C000-000000000046)\n]\ninterface IInternalUnknown : IUnknown\n{\n  HRESULT QueryInternalInterface(\n    [in] REFIID riid,\n    [out] void **ppv);\n}\n\n[\n  object,\n  uuid(00000100-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IEnumUnknown : IUnknown\n{\n  typedef [unique] IEnumUnknown *LPENUMUNKNOWN;\n\n  [local]\n  HRESULT Next(\n    [in] ULONG celt,\n    [out] IUnknown **rgelt,\n    [out] ULONG *pceltFetched);\n\n  [call_as(Next)]\n  HRESULT RemoteNext(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    IUnknown **rgelt,\n    [out] ULONG *pceltFetched);\n\n  HRESULT Skip(\n    [in] ULONG celt);\n\n  HRESULT Reset();\n\n  HRESULT Clone(\n    [out] IEnumUnknown **ppenum);\n}\n\n[\n  object,\n  uuid(00000022-0000-0000-C000-000000000046),\n  version(1.0),\n  pointer_default(unique)\n]\ninterface ISurrogate : IUnknown\n{\n  typedef [unique] ISurrogate *LPSURROGATE;\n\n  HRESULT LoadDllServer(\n    [in] REFCLSID Clsid);\n  HRESULT FreeSurrogate();\n}\n\n[\n  local,\n  object,\n  uuid(00000146-0000-0000-C000-000000000046)\n]\ninterface IGlobalInterfaceTable : IUnknown\n{\n  typedef [unique] IGlobalInterfaceTable *LPGLOBALINTERFACETABLE;\n\n  HRESULT RegisterInterfaceInGlobal(\n    [in] IUnknown *pUnk,\n    [in] REFIID riid,\n    [out] DWORD *pdwCookie);\n\n  HRESULT RevokeInterfaceFromGlobal(\n    [in] DWORD dwCookie);\n\n  HRESULT GetInterfaceFromGlobal(\n    [in] DWORD dwCookie,\n    [in] REFIID riid,\n    [out, iid_is(riid)] void **ppv);\n}\n\n/******************** Monikers ********************/\n\n[\n  object,\n  uuid(0000000e-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IBindCtx : IUnknown\n{\n  typedef [unique] IBindCtx *LPBINDCTX;\n  typedef [unique] IBindCtx *LPBC;\n\n  typedef struct tagBIND_OPTS {\n    DWORD cbStruct;\n    DWORD grfFlags;\n    DWORD grfMode;\n    DWORD dwTickCountDeadline;\n  } BIND_OPTS, *LPBIND_OPTS;\n\n  /* FIXME: C++ crap */\n  typedef struct tagBIND_OPTS2 {\n    DWORD cbStruct;\n    DWORD grfFlags;\n    DWORD grfMode;\n    DWORD dwTickCountDeadline;\n    DWORD dwTrackFlags;\n    DWORD dwClassContext;\n    LCID  locale;\n    COSERVERINFO *pServerInfo;\n  } BIND_OPTS2, *LPBIND_OPTS2;\n\n  typedef struct tagBIND_OPTS3 {\n    DWORD cbStruct;\n    DWORD grfFlags;\n    DWORD grfMode;\n    DWORD dwTickCountDeadline;\n    DWORD dwTrackFlags;\n    DWORD dwClassContext;\n    LCID  locale;\n    COSERVERINFO *pServerInfo;\n    HWND hwnd;\n  } BIND_OPTS3, *LPBIND_OPTS3;\n\n  typedef enum tagBIND_FLAGS {\n    BIND_MAYBOTHERUSER   = 1,\n    BIND_JUSTTESTEXISTENCE = 2\n  } BIND_FLAGS;\n\n  HRESULT RegisterObjectBound(\n    [in, unique] IUnknown *punk);\n\n  HRESULT RevokeObjectBound(\n    [in, unique] IUnknown *punk);\n\n  HRESULT ReleaseBoundObjects();\n\n  [local]\n  HRESULT SetBindOptions(\n    [in] BIND_OPTS *pbindopts);\n\n  [call_as(SetBindOptions)]\n  HRESULT RemoteSetBindOptions(\n    [in] BIND_OPTS2 *pbindopts);\n\n  [local]\n  HRESULT GetBindOptions(\n    [in, out] BIND_OPTS *pbindopts);\n\n  [call_as(GetBindOptions)]\n  HRESULT RemoteGetBindOptions(\n    [in, out] BIND_OPTS2 *pbindopts);\n\n  HRESULT GetRunningObjectTable(\n    [out] IRunningObjectTable **pprot);\n\n  HRESULT RegisterObjectParam(\n    [in] LPOLESTR pszKey,\n    [in, unique] IUnknown *punk);\n\n  HRESULT GetObjectParam(\n    [in] LPOLESTR pszKey,\n    [out] IUnknown **ppunk);\n\n  HRESULT EnumObjectParam(\n    [out] IEnumString **ppenum);\n\n  HRESULT RevokeObjectParam(\n    [in] LPOLESTR pszKey);\n}\n\n[\n  object,\n  uuid(00000102-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IEnumMoniker : IUnknown\n{\n  typedef [unique] IEnumMoniker *LPENUMMONIKER;\n\n  [local]\n  HRESULT Next(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    IMoniker **rgelt,\n    [out] ULONG *pceltFetched);\n\n  [call_as(Next)]\n  HRESULT RemoteNext(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    IMoniker **rgelt,\n    [out] ULONG *pceltFetched);\n\n  HRESULT Skip(\n    [in] ULONG celt);\n\n  HRESULT Reset();\n\n  HRESULT Clone(\n    [out] IEnumMoniker **ppenum);\n}\n\n[\n  object,\n  uuid(00000126-0000-0000-C000-000000000046)\n]\ninterface IRunnableObject : IUnknown\n{\n  typedef [unique] IRunnableObject *LPRUNNABLEOBJECT;\n\n  HRESULT GetRunningClass(\n    [out] LPCLSID lpClsid);\n\n  HRESULT Run(\n    [in] LPBINDCTX pbc);\n\n  [local]\n  BOOL IsRunning();\n\n  [call_as(IsRunning)]\n  HRESULT RemoteIsRunning();\n\n  HRESULT LockRunning(\n    [in] BOOL fLock,\n    [in] BOOL fLastUnlockCloses);\n\n  HRESULT SetContainedObject(\n    [in] BOOL fContained);\n}\n\n/* GetObject is defined in wingdi.h as WINELIB_NAME_AW(GetObject),\n * which resolves to a compilation failure if WINE_NO_UNICODE_MACROS is defined,\n * but GetObject is used as a valid method name below, so we have\n * to undefine it in that case */\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef GetObject\")\ncpp_quote(\"#endif\")\n\n[\n  object,\n  uuid(00000010-0000-0000-C000-000000000046)\n]\ninterface IRunningObjectTable : IUnknown\n{\n  typedef [unique] IRunningObjectTable *LPRUNNINGOBJECTTABLE;\n\n  HRESULT Register(\n    [in] DWORD grfFlags,\n    [in, unique] IUnknown *punkObject,\n    [in, unique] IMoniker *pmkObjectName,\n    [out] DWORD *pdwRegister);\n\n  HRESULT Revoke(\n    [in] DWORD dwRegister);\n\n  HRESULT IsRunning(\n    [in, unique] IMoniker *pmkObjectName);\n\n  HRESULT GetObject(\n    [in, unique] IMoniker *pmkObjectName,\n    [out] IUnknown **ppunkObject);\n\n  HRESULT NoteChangeTime(\n    [in] DWORD dwRegister,\n    [in] FILETIME *pfiletime);\n\n  HRESULT GetTimeOfLastChange(\n    [in, unique] IMoniker *pmkObjectName,\n    [out] FILETIME *pfiletime);\n\n  HRESULT EnumRunning(\n    [out] IEnumMoniker **ppenumMoniker);\n}\n\n[\n  object,\n  uuid(0000010c-0000-0000-C000-000000000046)\n]\ninterface IPersist : IUnknown\n{\n  typedef [unique] IPersist *LPPERSIST;\n\n  HRESULT GetClassID(\n    [out] CLSID *pClassID);\n}\n\n[\n  object,\n  uuid(00000109-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IPersistStream : IPersist\n{\n  typedef [unique] IPersistStream *LPPERSISTSTREAM;\n\n  HRESULT IsDirty();\n\n  HRESULT Load(\n    [in, unique] IStream *pStm);\n\n  HRESULT Save(\n    [in, unique] IStream *pStm,\n    [in] BOOL fClearDirty);\n\n  HRESULT GetSizeMax(\n    [out] ULARGE_INTEGER *pcbSize);\n}\n\n[\n  object,\n  uuid(0000000f-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IMoniker : IPersistStream\n{\n  typedef [unique] IMoniker *LPMONIKER;\n\n  typedef enum tagMKSYS {\n    MKSYS_NONE             = 0,\n    MKSYS_GENERICCOMPOSITE = 1,\n    MKSYS_FILEMONIKER      = 2,\n    MKSYS_ANTIMONIKER      = 3,\n    MKSYS_ITEMMONIKER      = 4,\n    MKSYS_POINTERMONIKER   = 5,\n    /* MKSYS_URLMONIKER       = 6, */ /* defined in urlmon.idl */\n    MKSYS_CLASSMONIKER     = 7\n  } MKSYS;\n\n  typedef [v1_enum] enum tagMKREDUCE {\n    MKRREDUCE_ONE         = 3 << 16,\n    MKRREDUCE_TOUSER      = 2 << 16,\n    MKRREDUCE_THROUGHUSER = 1 << 16,\n    MKRREDUCE_ALL         = 0\n  } MKRREDUCE;\n\n  [local]\n  HRESULT BindToObject(\n    [in, unique] IBindCtx *pbc,\n    [in, unique] IMoniker *pmkToLeft,\n    [in] REFIID riidResult,\n    [out, iid_is(riidResult)] void **ppvResult);\n\n  [call_as(BindToObject)]\n  HRESULT RemoteBindToObject(\n    [in, unique] IBindCtx *pbc,\n    [in, unique] IMoniker *pmkToLeft,\n    [in] REFIID riidResult,\n    [out, iid_is(riidResult)] IUnknown **ppvResult);\n\n  [local]\n  HRESULT BindToStorage(\n    [in, unique] IBindCtx *pbc,\n    [in, unique] IMoniker *pmkToLeft,\n    [in] REFIID riid,\n    [out, iid_is(riid)] void **ppvObj);\n\n  [call_as(BindToStorage)]\n  HRESULT RemoteBindToStorage(\n    [in, unique] IBindCtx *pbc,\n    [in, unique] IMoniker *pmkToLeft,\n    [in] REFIID riid,\n    [out, iid_is(riid)] IUnknown **ppvObj);\n\n  HRESULT Reduce(\n    [in, unique] IBindCtx *pbc,\n    [in] DWORD dwReduceHowFar,\n    [in, out, unique] IMoniker **ppmkToLeft,\n    [out] IMoniker **ppmkReduced);\n\n  HRESULT ComposeWith(\n    [in, unique] IMoniker *pmkRight,\n    [in] BOOL fOnlyIfNotGeneric,\n    [out] IMoniker **ppmkComposite);\n\n  HRESULT Enum(\n    [in] BOOL fForward,\n    [out] IEnumMoniker **ppenumMoniker);\n\n  HRESULT IsEqual(\n    [in, unique] IMoniker *pmkOtherMoniker);\n\n  HRESULT Hash(\n    [out] DWORD *pdwHash);\n\n  HRESULT IsRunning(\n    [in, unique] IBindCtx *pbc,\n    [in, unique] IMoniker *pmkToLeft,\n    [in, unique] IMoniker *pmkNewlyRunning);\n\n  HRESULT GetTimeOfLastChange(\n    [in, unique] IBindCtx *pbc,\n    [in, unique] IMoniker *pmkToLeft,\n    [out] FILETIME *pFileTime);\n\n  HRESULT Inverse(\n    [out] IMoniker **ppmk);\n\n  HRESULT CommonPrefixWith(\n    [in, unique] IMoniker *pmkOther,\n    [out] IMoniker **ppmkPrefix);\n\n  HRESULT RelativePathTo(\n    [in, unique] IMoniker *pmkOther,\n    [out] IMoniker **ppmkRelPath);\n\n  HRESULT GetDisplayName(\n    [in, unique] IBindCtx *pbc,\n    [in, unique] IMoniker *pmkToLeft,\n    [out] LPOLESTR *ppszDisplayName);\n\n  HRESULT ParseDisplayName(\n    [in, unique] IBindCtx *pbc,\n    [in, unique] IMoniker *pmkToLeft,\n    [in] LPOLESTR pszDisplayName,\n    [out] ULONG *pchEaten,\n    [out] IMoniker **ppmkOut);\n\n  HRESULT IsSystemMoniker(\n    [out] DWORD *pdwMksys);\n}\n\n[\n  object,\n  uuid(f29f6bc0-5021-11ce-aa15-00006901293f),\n  pointer_default(unique)\n]\ninterface IROTData : IUnknown\n{\n  HRESULT GetComparisonData(\n    [out, size_is(cbMax)] byte *pbData,\n    [in] ULONG cbMax,\n    [out] ULONG *pcbData);\n}\n\n[\n  object,\n  uuid(00000101-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IEnumString : IUnknown\n{\n  typedef [unique] IEnumString *LPENUMSTRING;\n\n  [local]\n  HRESULT Next(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    LPOLESTR *rgelt,\n    [out] ULONG *pceltFetched);\n\n  [call_as(Next)]\n  HRESULT RemoteNext(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    LPOLESTR *rgelt,\n    [out] ULONG *pceltFetched);\n\n  HRESULT Skip(\n    [in] ULONG celt);\n\n  HRESULT Reset();\n\n  HRESULT Clone(\n    [out] IEnumString **ppenum);\n}\n\n[\n  object,\n  uuid(00000140-0000-0000-C000-000000000046)\n]\ninterface IClassActivator : IUnknown\n{\n  HRESULT GetClassObject(\n    [in] REFCLSID rclsid,\n    [in] DWORD dwClassContext,\n    [in] LCID locale,\n    [in] REFIID riid,\n    [out, iid_is(riid)] void **ppv);\n}\n\n/******************** Storage ********************/\n\n[\n  object,\n  uuid(0c733a30-2a1c-11ce-ade5-00aa0044773d),\n  pointer_default(unique)\n]\ninterface ISequentialStream : IUnknown\n{\n  [local]\n  HRESULT Read(\n    [out, size_is(cb), length_is(*pcbRead)]\n    void *pv,\n    [in] ULONG cb,\n    [out] ULONG *pcbRead);\n\n  [call_as(Read)]\n  HRESULT RemoteRead(\n    [out, size_is(cb), length_is(*pcbRead)]\n    byte *pv,\n    [in] ULONG cb,\n    [out] ULONG *pcbRead);\n\n  [local]\n  HRESULT Write(\n    [in, size_is(cb)] const void *pv,\n    [in] ULONG cb,\n    [out] ULONG *pcbWritten);\n\n  [call_as(Write)]\n  HRESULT RemoteWrite(\n    [in, size_is(cb)] const byte *pv,\n    [in] ULONG cb,\n    [out] ULONG *pcbWritten);\n}\n\n[\n  object,\n  uuid(0000000c-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IStream : ISequentialStream\n{\n  typedef [unique] IStream *LPSTREAM;\n\n  typedef struct tagSTATSTG {\n    LPOLESTR pwcsName;\n    DWORD type;\n    ULARGE_INTEGER cbSize;\n    FILETIME mtime;\n    FILETIME ctime;\n    FILETIME atime;\n    DWORD grfMode;\n    DWORD grfLocksSupported;\n    CLSID clsid;\n    DWORD grfStateBits;\n    DWORD reserved;\n  } STATSTG;\n\n  typedef enum tagSTGTY {\n    STGTY_STORAGE   = 1,\n    STGTY_STREAM    = 2,\n    STGTY_LOCKBYTES = 3,\n    STGTY_PROPERTY  = 4\n  } STGTY;\n\n  typedef enum tagSTREAM_SEEK {\n    STREAM_SEEK_SET = 0,\n    STREAM_SEEK_CUR = 1,\n    STREAM_SEEK_END = 2\n  } STREAM_SEEK;\n\n  /* these are defined in Linux's fcntl.h,\n   * undefine them to avoid conflicts */\n  cpp_quote(\"#undef LOCK_MAND\")\n  cpp_quote(\"#undef LOCK_READ\")\n  cpp_quote(\"#undef LOCK_WRITE\")\n  cpp_quote(\"#undef LOCK_RW\")\n\n  typedef enum tagLOCKTYPE {\n    LOCK_WRITE      = 1,\n    LOCK_EXCLUSIVE  = 2,\n    LOCK_ONLYONCE   = 4\n  } LOCKTYPE;\n\n  [local]\n  HRESULT Seek(\n    [in] LARGE_INTEGER dlibMove,\n    [in] DWORD dwOrigin,\n    [out] ULARGE_INTEGER *plibNewPosition);\n\n  [call_as(Seek)]\n  HRESULT RemoteSeek(\n    [in] LARGE_INTEGER dlibMove,\n    [in] DWORD dwOrigin,\n    [out] ULARGE_INTEGER *plibNewPosition);\n\n  HRESULT SetSize(\n    [in] ULARGE_INTEGER libNewSize);\n\n  [local]\n  HRESULT CopyTo(\n    [in, unique] IStream *pstm,\n    [in] ULARGE_INTEGER cb,\n    [out] ULARGE_INTEGER *pcbRead,\n    [out] ULARGE_INTEGER *pcbWritten);\n\n  [call_as(CopyTo)]\n  HRESULT RemoteCopyTo(\n    [in, unique] IStream *pstm,\n    [in] ULARGE_INTEGER cb,\n    [out] ULARGE_INTEGER *pcbRead,\n    [out] ULARGE_INTEGER *pcbWritten);\n\n  HRESULT Commit(\n    [in] DWORD grfCommitFlags);\n\n  HRESULT Revert();\n\n  HRESULT LockRegion(\n    [in] ULARGE_INTEGER libOffset,\n    [in] ULARGE_INTEGER cb,\n    [in] DWORD dwLockType);\n\n  HRESULT UnlockRegion(\n    [in] ULARGE_INTEGER libOffset,\n    [in] ULARGE_INTEGER cb,\n    [in] DWORD dwLockType);\n\n  HRESULT Stat(\n    [out] STATSTG *pstatstg,\n    [in] DWORD grfStatFlag);\n\n  HRESULT Clone(\n    [out] IStream **ppstm);\n}\n\n[\n  object,\n  uuid(0000000d-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IEnumSTATSTG : IUnknown\n{\n  typedef [unique] IEnumSTATSTG *LPENUMSTATSTG;\n\n  [local]\n  HRESULT Next(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    STATSTG *rgelt,\n    [out] ULONG *pceltFetched);\n\n  [call_as(Next)]\n  HRESULT RemoteNext(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    STATSTG *rgelt,\n    [out] ULONG *pceltFetched);\n\n  HRESULT Skip(\n    [in] ULONG celt);\n\n  HRESULT Reset();\n\n  HRESULT Clone(\n    [out] IEnumSTATSTG **ppenum);\n}\n\n[\n  object,\n  uuid(0000000b-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IStorage : IUnknown\n{\n  typedef [unique] IStorage *LPSTORAGE;\n\n  typedef struct tagRemSNB {\n    unsigned long ulCntStr;\n    unsigned long ulCntChar;\n    [size_is(ulCntChar)] OLECHAR rgString[];\n  } RemSNB;\n\n  typedef [unique] RemSNB *wireSNB;\n  typedef [wire_marshal(wireSNB)] OLECHAR **SNB;\n\n  HRESULT CreateStream(\n    [in] LPCOLESTR pwcsName,\n    [in] DWORD grfMode,\n    [in] DWORD reserved1,\n    [in] DWORD reserved2,\n    [out] IStream **ppstm);\n\n  [local]\n  HRESULT OpenStream(\n    [in] LPCOLESTR pwcsName,\n    [in, unique] void *reserved1,\n    [in] DWORD grfMode,\n    [in] DWORD reserved2,\n    [out] IStream **ppstm);\n\n  [call_as(OpenStream)]\n  HRESULT RemoteOpenStream(\n    [in] LPCOLESTR pwcsName,\n    [in] unsigned long cbReserved1,\n    [in, unique, size_is(cbReserved1)] byte *reserved1,\n    [in] DWORD grfMode,\n    [in] DWORD reserved2,\n    [out] IStream **ppstm);\n\n  HRESULT CreateStorage(\n    [in] LPCOLESTR pwcsName,\n    [in] DWORD grfMode,\n    [in] DWORD dwStgFmt,\n    [in] DWORD reserved2,\n    [out] IStorage **ppstg);\n\n  HRESULT OpenStorage(\n    [in, unique] LPCOLESTR pwcsName,\n    [in, unique] IStorage *pstgPriority,\n    [in] DWORD grfMode,\n    [in, unique] SNB snbExclude,\n    [in] DWORD reserved,\n    [out] IStorage **ppstg);\n\n  HRESULT CopyTo(\n    [in] DWORD ciidExclude,\n    [in, unique, size_is(ciidExclude)] const IID *rgiidExclude,\n    [in, unique] SNB snbExclude,\n    [in, unique] IStorage *pstgDest);\n\n  HRESULT MoveElementTo(\n    [in] LPCOLESTR pwcsName,\n    [in, unique] IStorage *pstgDest,\n    [in] LPCOLESTR pwcsNewName,\n    [in] DWORD grfFlags);\n\n  HRESULT Commit(\n    [in] DWORD grfCommitFlags);\n\n  HRESULT Revert();\n\n  [local]\n  HRESULT EnumElements(\n    [in] DWORD reserved1,\n    [in, unique, size_is(1)] void *reserved2,\n    [in] DWORD reserved3,\n    [out] IEnumSTATSTG **ppenum);\n\n  [call_as(EnumElements)]\n  HRESULT RemoteEnumElements(\n    [in] DWORD reserved1,\n    [in] unsigned long cbReserved2,\n    [in, unique, size_is(cbReserved2)] byte *reserved2,\n    [in] DWORD reserved3,\n    [out] IEnumSTATSTG **ppenum);\n\n  HRESULT DestroyElement(\n    [in] LPCOLESTR pwcsName);\n\n  HRESULT RenameElement(\n    [in] LPCOLESTR pwcsOldName,\n    [in] LPCOLESTR pwcsNewName);\n\n  HRESULT SetElementTimes(\n    [in, unique] LPCOLESTR pwcsName,\n    [in, unique] const FILETIME *pctime,\n    [in, unique] const FILETIME *patime,\n    [in, unique] const FILETIME *pmtime);\n\n  HRESULT SetClass(\n    [in] REFCLSID clsid);\n\n  HRESULT SetStateBits(\n    [in] DWORD grfStateBits,\n    [in] DWORD grfMask);\n\n  HRESULT Stat(\n    [out] STATSTG *pstatstg,\n    [in] DWORD grfStatFlag);\n}\n\n[\n  object,\n  uuid(0000010b-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IPersistFile : IPersist\n{\n  typedef [unique] IPersistFile *LPPERSISTFILE;\n\n  HRESULT IsDirty();\n\n  HRESULT Load(\n    [in] LPCOLESTR pszFileName,\n    [in] DWORD dwMode);\n\n  HRESULT Save(\n    [in, unique] LPCOLESTR pszFileName,\n    [in] BOOL fRemember);\n\n  HRESULT SaveCompleted(\n    [in, unique] LPCOLESTR pszFileName);\n\n  HRESULT GetCurFile(\n    [out] LPOLESTR *ppszFileName);\n}\n\n[\n  object,\n  uuid(0000010a-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IPersistStorage : IPersist\n{\n  typedef [unique] IPersistStorage *LPPERSISTSTORAGE;\n\n  HRESULT IsDirty();\n\n  HRESULT InitNew(\n    [in, unique] IStorage *pStg);\n\n  HRESULT Load(\n    [in, unique] IStorage *pStg);\n\n  HRESULT Save(\n    [in, unique] IStorage *pStgSave,\n    [in] BOOL fSameAsLoad);\n\n  HRESULT SaveCompleted(\n    [in, unique] IStorage *pStgNew);\n\n  HRESULT HandsOffStorage();\n}\n\n[\n  object,\n  uuid(00000012-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IRootStorage : IUnknown\n{\n  typedef [unique] IRootStorage *LPROOTSTORAGE;\n\n  HRESULT SwitchToFile(\n    [in] LPOLESTR pszFile);\n}\n\n[\n  object,\n  uuid(0000000a-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface ILockBytes : IUnknown\n{\n  typedef [unique] ILockBytes *LPLOCKBYTES;\n\n  [local]\n  HRESULT ReadAt(\n    [in] ULARGE_INTEGER ulOffset,\n    [out, size_is(cb), length_is(*pcbRead)]\n    void *pv,\n    [in] ULONG cb,\n    [out] ULONG *pcbRead);\n\n  [call_as(ReadAt)]\n  HRESULT RemoteReadAt(\n    [in] ULARGE_INTEGER ulOffset,\n    [out, size_is(cb), length_is(*pcbRead)]\n    byte *pv,\n    [in] ULONG cb,\n    [out] ULONG *pcbRead);\n\n  [local]\n  HRESULT WriteAt(\n    [in] ULARGE_INTEGER ulOffset,\n    [in, size_is(cb)] const void *pv,\n    [in] ULONG cb,\n    [out] ULONG *pcbWritten);\n\n  [call_as(WriteAt)]\n  HRESULT RemoteWriteAt(\n    [in] ULARGE_INTEGER ulOffset,\n    [in, size_is(cb)] const byte *pv,\n    [in] ULONG cb,\n    [out] ULONG *pcbWritten);\n\n  HRESULT Flush();\n\n  HRESULT SetSize(\n    [in] ULARGE_INTEGER cb);\n\n  HRESULT LockRegion(\n    [in] ULARGE_INTEGER libOffset,\n    [in] ULARGE_INTEGER cb,\n    [in] DWORD dwLockType);\n\n  HRESULT UnlockRegion(\n    [in] ULARGE_INTEGER libOffset,\n    [in] ULARGE_INTEGER cb,\n    [in] DWORD dwLockType);\n\n  HRESULT Stat(\n    [out] STATSTG *pstatstg,\n    [in] DWORD grfStatFlag);\n}\n\n[\n  object,\n  uuid(99caf010-415e-11cf-8814-00aa00b569f5),\n  pointer_default(unique)\n]\ninterface IFillLockBytes : IUnknown\n{\n  [local]\n  HRESULT FillAppend(\n    [in, size_is(cb)] const void *pv,\n    [in] ULONG cb,\n    [out] ULONG *pcbWritten);\n\n  [call_as(FillAppend)]\n  HRESULT RemoteFillAppend(\n    [in, size_is(cb)] const byte *pv,\n    [in] ULONG cb,\n    [out] ULONG *pcbWritten);\n\n  [local]\n  HRESULT FillAt(\n    [in] ULARGE_INTEGER ulOffset,\n    [in, size_is(cb)] const void *pv,\n    [in] ULONG cb,\n    [out] ULONG *pcbWritten);\n\n  [call_as(FillAt)]\n  HRESULT RemoteFillAt(\n    [in] ULARGE_INTEGER ulOffset,\n    [in, size_is(cb)] const byte *pv,\n    [in] ULONG cb,\n    [out] ULONG *pcbWritten);\n\n  HRESULT SetFillSize(\n    [in] ULARGE_INTEGER ulSize);\n\n  HRESULT Terminate(\n    [in] BOOL bCanceled);\n}\n\n[\n  object,\n  uuid(a9d758a0-4617-11cf-95fc-00aa00680db4),\n  pointer_default(unique)\n]\ninterface IProgressNotify : IUnknown\n{\n  HRESULT OnProgress(\n    [in] DWORD dwProgressCurrent,\n    [in] DWORD dwProgressMaximum,\n    [in] BOOL fAccurate,\n    [in] BOOL fOwner);\n}\n\n[\n  local,\n  object,\n  uuid(0e6d4d90-6738-11cf-9608-00aa00680db4),\n  pointer_default(unique)\n]\ninterface ILayoutStorage : IUnknown\n{\n  typedef struct tagStorageLayout {\n    DWORD LayoutType;\n    OLECHAR *pwcsElementName;\n    LARGE_INTEGER cOffset;\n    LARGE_INTEGER cBytes;\n  } StorageLayout;\n\n  HRESULT LayoutScript(\n    [in] StorageLayout *pStorageLayout,\n    [in] DWORD nEntries,\n    [in] DWORD glfInterleavedFlag);\n\n  HRESULT BeginMonitor();\n\n  HRESULT EndMonitor();\n\n  HRESULT ReLayoutDocfile(\n    [in] OLECHAR *pwcsNewDfName);\n\n  HRESULT ReLayoutDocfileOnILockBytes(\n    [in] ILockBytes *pILockBytes);\n}\n\n[\n    object,\n    uuid(30f3d47a-6447-11d1-8e3c-00c04fb9386d)\n]\ninterface IBlockingLock : IUnknown\n{\n    HRESULT Lock(\n        [in] DWORD dwTimeout);\n\n    HRESULT Unlock();\n}\n\n\n[\n    object,\n    uuid(bc0bf6ae-8878-11d1-83e9-00c04fc2c6d4)\n]\ninterface ITimeAndNoticeControl : IUnknown\n{\n    HRESULT SuppressChanges(\n        [in] DWORD res1,\n        [in] DWORD res2);\n\n}\n\n\n\n[\n    object,\n    uuid(8d19c834-8879-11d1-83e9-00c04fc2c6d4)\n]\ninterface IOplockStorage: IUnknown\n{\n    HRESULT CreateStorageEx(\n        [in] LPCWSTR pwcsName,\n        [in] DWORD grfMode,\n        [in] DWORD stgfmt,\n        [in] DWORD grfAttrs,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppstgOpen);\n\n    HRESULT OpenStorageEx(\n        [in] LPCWSTR pwcsName,\n        [in] DWORD grfMode,\n        [in] DWORD stgfmt,\n        [in] DWORD grfAttrs,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppstgOpen);\n}\n\n/******************** Data Object ********************/\n\n[\n  object,\n  uuid(00000103-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IEnumFORMATETC : IUnknown\n{\n  typedef [unique] IEnumFORMATETC *LPENUMFORMATETC;\n\n  typedef struct tagDVTARGETDEVICE {\n    DWORD tdSize;\n    WORD tdDriverNameOffset;\n    WORD tdDeviceNameOffset;\n    WORD tdPortNameOffset;\n    WORD tdExtDevmodeOffset;\n    [size_is(tdSize - sizeof(DWORD) - 4*sizeof(WORD))]\n    BYTE tdData[];\n  } DVTARGETDEVICE;\n\n  typedef CLIPFORMAT *LPCLIPFORMAT;\n\n  typedef struct tagFORMATETC {\n    CLIPFORMAT cfFormat;\n    [unique] DVTARGETDEVICE *ptd;\n    DWORD dwAspect;\n    LONG lindex;\n    DWORD tymed;\n  } FORMATETC, *LPFORMATETC;\n\n  [local]\n  HRESULT Next(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    FORMATETC *rgelt,\n    [out] ULONG *pceltFetched);\n\n  [call_as(Next)]\n  HRESULT RemoteNext(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    FORMATETC *rgelt,\n    [out] ULONG *pceltFetched);\n\n  HRESULT Skip(\n    [in] ULONG celt);\n\n  HRESULT Reset();\n\n  HRESULT Clone(\n    [out] IEnumFORMATETC **ppenum);\n}\n\n[\n  object,\n  uuid(00000105-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IEnumSTATDATA : IUnknown\n{\n  typedef [unique] IEnumSTATDATA *LPENUMSTATDATA;\n\n  typedef enum tagADVF {\n    ADVF_NODATA            = 1,\n    ADVF_PRIMEFIRST        = 2,\n    ADVF_ONLYONCE          = 4,\n    ADVF_DATAONSTOP        = 64,\n    ADVFCACHE_NOHANDLER    = 8,\n    ADVFCACHE_FORCEBUILTIN = 16,\n    ADVFCACHE_ONSAVE       = 32\n  } ADVF;\n\n  typedef struct tagSTATDATA\n  {\n    FORMATETC formatetc;\n    DWORD advf;\n    [unique] IAdviseSink *pAdvSink;\n    DWORD dwConnection;\n  } STATDATA, *LPSTATDATA;\n\n  [local]\n  HRESULT Next(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    STATDATA *rgelt,\n    [out] ULONG *pceltFetched);\n\n  [call_as(Next)]\n  HRESULT RemoteNext(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    STATDATA *rgelt,\n    [out] ULONG *pceltFetched);\n\n  HRESULT Skip(\n    [in] ULONG celt);\n\n  HRESULT Reset();\n\n  HRESULT Clone(\n    [out] IEnumSTATDATA **ppenum);\n}\n\n[\n  object,\n  uuid(0000010f-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IAdviseSink : IUnknown\n{\n  typedef IAdviseSink *LPADVISESINK;\n\n  typedef [v1_enum] enum tagTYMED {\n    TYMED_HGLOBAL  = 1,\n    TYMED_FILE     = 2,\n    TYMED_ISTREAM  = 4,\n    TYMED_ISTORAGE = 8,\n    TYMED_GDI      = 16,\n    TYMED_MFPICT   = 32,\n    TYMED_ENHMF    = 64,\n    TYMED_NULL     = 0\n  } TYMED;\n\n  typedef struct tagRemSTGMEDIUM {\n    DWORD tymed;\n    DWORD dwHandleType;\n    unsigned long pData;\n    unsigned long pUnkForRelease;\n    unsigned long cbData;\n    [size_is(cbData)] byte data[];\n  } RemSTGMEDIUM;\n\n  typedef struct tagSTGMEDIUM {\n    DWORD tymed;\n    [switch_is(tymed)] union {\n    [case(TYMED_GDI)]      HBITMAP hBitmap;\n    [case(TYMED_MFPICT)]   HMETAFILEPICT hMetaFilePict;\n    [case(TYMED_ENHMF)]    HENHMETAFILE hEnhMetaFile;\n    [case(TYMED_HGLOBAL)]  HGLOBAL hGlobal;\n    [case(TYMED_FILE)]     LPOLESTR lpszFileName;\n    [case(TYMED_ISTREAM)]  IStream *pstm;\n    [case(TYMED_ISTORAGE)] IStorage *pstg;\n    [default]              ;\n    } DUMMYUNIONNAME;\n    [unique] IUnknown *pUnkForRelease;\n  } uSTGMEDIUM;\n\n/* copied from wingdi.h */\n#define OBJ_PEN             1\n#define OBJ_BRUSH           2\n#define OBJ_DC              3\n#define OBJ_METADC          4\n#define OBJ_PAL             5\n#define OBJ_FONT            6\n#define OBJ_BITMAP          7\n#define OBJ_REGION          8\n#define OBJ_METAFILE        9\n#define OBJ_MEMDC           10\n#define OBJ_EXTPEN          11\n#define OBJ_ENHMETADC       12\n#define OBJ_ENHMETAFILE     13\n\n  typedef union _GDI_OBJECT switch(DWORD ObjectType) u {\n    case OBJ_BITMAP: wireHBITMAP hBitmap;\n    case OBJ_PAL:    wireHPALETTE hPalette;\n    default:         wireHGLOBAL hGeneric;\n  } GDI_OBJECT;\n\n  typedef struct _userSTGMEDIUM {\n    union switch(DWORD tymed) u {\n    case TYMED_NULL:     ;\n    case TYMED_MFPICT:   wireHMETAFILEPICT hMetaFilePict;\n    case TYMED_ENHMF:    wireHENHMETAFILE hHEnhMetaFile;\n    case TYMED_GDI:      GDI_OBJECT *hGdiHandle;\n    case TYMED_HGLOBAL:  wireHGLOBAL hGlobal;\n    case TYMED_FILE:     LPOLESTR lpszFileName;\n    case TYMED_ISTREAM:  BYTE_BLOB *pstm;\n    case TYMED_ISTORAGE: BYTE_BLOB *pstg;\n    } DUMMYUNIONNAME;\n    IUnknown *pUnkForRelease;\n  } userSTGMEDIUM;\n\n  typedef [unique] userSTGMEDIUM *wireSTGMEDIUM;\n  typedef [wire_marshal(wireSTGMEDIUM)] uSTGMEDIUM STGMEDIUM;\n\n  typedef [unique] userSTGMEDIUM *wireASYNC_STGMEDIUM;\n  typedef [wire_marshal(wireASYNC_STGMEDIUM)] STGMEDIUM ASYNC_STGMEDIUM;\n\n  typedef STGMEDIUM *LPSTGMEDIUM;\n\n  typedef struct _userFLAG_STGMEDIUM {\n    long ContextFlags;\n    long fPassOwnership;\n    userSTGMEDIUM Stgmed;\n  } userFLAG_STGMEDIUM;\n\n  typedef [unique] userFLAG_STGMEDIUM *wireFLAG_STGMEDIUM;\n\n  typedef [wire_marshal(wireFLAG_STGMEDIUM)] struct _FLAG_STGMEDIUM {\n    long ContextFlags;\n    long fPassOwnership;\n    STGMEDIUM Stgmed;\n  } FLAG_STGMEDIUM;\n\n  [local]\n  void OnDataChange(\n    [in, unique] FORMATETC *pFormatetc,\n    [in, unique] STGMEDIUM *pStgmed);\n\n  [call_as(OnDataChange)]\n  HRESULT  RemoteOnDataChange(\n    [in, unique] FORMATETC *pFormatetc,\n    [in, unique] ASYNC_STGMEDIUM *pStgmed);\n\n  [local]\n  void OnViewChange(\n    [in] DWORD dwAspect,\n    [in] LONG lindex);\n\n  [call_as(OnViewChange)]\n  HRESULT RemoteOnViewChange(\n    [in] DWORD dwAspect,\n    [in] LONG lindex);\n\n  [local]\n  void OnRename(\n    [in] IMoniker *pmk);\n\n  [call_as(OnRename)]\n  HRESULT RemoteOnRename(\n    [in] IMoniker *pmk);\n\n  [local]\n  void OnSave();\n\n  [call_as(OnSave)]\n  HRESULT RemoteOnSave();\n\n  [local]\n  void OnClose();\n\n  [call_as(OnClose)]\n  HRESULT RemoteOnClose();\n}\n\n[\n  object,\n  uuid(00000125-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IAdviseSink2 : IAdviseSink\n{\n  typedef [unique] IAdviseSink2 *LPADVISESINK2;\n\n  [local]\n  void OnLinkSrcChange(\n    [in, unique] IMoniker *pmk);\n\n  [call_as(OnLinkSrcChange)]\n  HRESULT RemoteOnLinkSrcChange(\n    [in, unique] IMoniker *pmk);\n}\n\n[\n  object,\n  uuid(0000010e-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IDataObject : IUnknown\n{\n  typedef [unique] IDataObject *LPDATAOBJECT;\n\n  typedef enum tagDATADIR {\n    DATADIR_GET = 1,\n    DATADIR_SET = 2\n  } DATADIR;\n\n  [local]\n  HRESULT GetData(\n    [in, unique] FORMATETC *pformatetcIn,\n    [out] STGMEDIUM *pmedium);\n\n  [call_as(GetData)]\n  HRESULT RemoteGetData(\n    [in, unique] FORMATETC *pformatetcIn,\n    [out] STGMEDIUM *pRemoteMedium);\n\n  [local]\n  HRESULT GetDataHere(\n    [in, unique] FORMATETC *pformatetc,\n    [in, out] STGMEDIUM *pmedium);\n\n  [call_as(GetDataHere)]\n  HRESULT RemoteGetDataHere(\n    [in, unique] FORMATETC *pformatetc,\n    [in, out] STGMEDIUM *pRemoteMedium);\n\n  HRESULT QueryGetData(\n    [in, unique] FORMATETC *pformatetc);\n\n  HRESULT GetCanonicalFormatEtc(\n    [in, unique] FORMATETC *pformatectIn,\n    [out] FORMATETC *pformatetcOut);\n\n  [local]\n  HRESULT SetData(\n    [in, unique] FORMATETC *pformatetc,\n    [in, unique] STGMEDIUM *pmedium,\n    [in] BOOL fRelease);\n\n  [call_as(SetData)]\n  HRESULT RemoteSetData(\n    [in, unique] FORMATETC *pformatetc,\n    [in, unique] FLAG_STGMEDIUM *pmedium,\n    [in] BOOL fRelease);\n\n  HRESULT EnumFormatEtc(\n    [in] DWORD dwDirection,\n    [out] IEnumFORMATETC **ppenumFormatEtc);\n\n  HRESULT DAdvise(\n    [in] FORMATETC *pformatetc,\n    [in] DWORD advf,\n    [in, unique] IAdviseSink *pAdvSink,\n    [out] DWORD *pdwConnection);\n\n  HRESULT DUnadvise(\n    [in] DWORD dwConnection);\n\n  HRESULT EnumDAdvise(\n    [out] IEnumSTATDATA **ppenumAdvise);\n}\n\n[\n  local,\n  object,\n  uuid(00000110-0000-0000-C000-000000000046)\n]\ninterface IDataAdviseHolder : IUnknown\n{\n  typedef [unique] IDataAdviseHolder *LPDATAADVISEHOLDER;\n\n  HRESULT Advise(\n    [in, unique] IDataObject *pDataObject,\n    [in, unique] FORMATETC *pFetc,\n    [in] DWORD advf,\n    [in, unique] IAdviseSink *pAdvise,\n    [out] DWORD *pdwConnection);\n\n  HRESULT Unadvise(\n    [in] DWORD dwConnection);\n\n  HRESULT EnumAdvise(\n    [out] IEnumSTATDATA **ppenumAdvise);\n\n  HRESULT SendOnDataChange(\n    [in, unique] IDataObject *pDataObject,\n    [in] DWORD dwReserved,\n    [in] DWORD advf);\n}\n\n/******************** Remoting ********************/\n\n[\n  local,\n  object,\n  uuid(00000016-0000-0000-C000-000000000046)\n]\ninterface IMessageFilter : IUnknown\n{\n  typedef [unique] IMessageFilter *LPMESSAGEFILTER;\n\n  typedef enum tagCALLTYPE {\n    CALLTYPE_TOPLEVEL = 1,\n    CALLTYPE_NESTED   = 2,\n    CALLTYPE_ASYNC    = 3,\n    CALLTYPE_TOPLEVEL_CALLPENDING = 4,\n    CALLTYPE_ASYNC_CALLPENDING    = 5\n  } CALLTYPE;\n\n  typedef enum tagSERVERCALL {\n    SERVERCALL_ISHANDLED  = 0,\n    SERVERCALL_REJECTED   = 1,\n    SERVERCALL_RETRYLATER = 2\n  } SERVERCALL;\n\n  typedef enum tagPENDINGTYPE {\n    PENDINGTYPE_TOPLEVEL = 1,\n    PENDINGTYPE_NESTED   = 2\n  } PENDINGTYPE;\n\n  typedef enum tagPENDINGMSG {\n    PENDINGMSG_CANCELCALL     = 0,\n    PENDINGMSG_WAITNOPROCESS  = 1,\n    PENDINGMSG_WAITDEFPROCESS = 2\n  } PENDINGMSG;\n\n  typedef struct tagINTERFACEINFO {\n    IUnknown *pUnk;\n    IID iid;\n    WORD wMethod;\n  } INTERFACEINFO, *LPINTERFACEINFO;\n\n  DWORD HandleInComingCall(\n    [in] DWORD dwCallType,\n    [in] HTASK htaskCaller,\n    [in] DWORD dwTickCount,\n    [in] LPINTERFACEINFO lpInterfaceInfo);\n\n  DWORD RetryRejectedCall(\n    [in] HTASK htaskCallee,\n    [in] DWORD dwTickCount,\n    [in] DWORD dwRejectType);\n\n  DWORD MessagePending(\n    [in] HTASK htaskCallee,\n    [in] DWORD dwTickCount,\n    [in] DWORD dwPendingType);\n}\n\n[\n  local,\n  object,\n  uuid(D5F56B60-593B-101A-B569-08002B2DBF7A)\n]\ninterface IRpcChannelBuffer : IUnknown\n{\n  typedef [unique] IRpcChannelBuffer *LPRPCCHANNELBUFFER;\n\n  typedef unsigned long RPCOLEDATAREP;\n\n  typedef struct tagRPCOLEMESSAGE {\n    void *reserved1;\n    RPCOLEDATAREP dataRepresentation;\n    void *Buffer;\n    ULONG cbBuffer;\n    ULONG iMethod;\n    void *reserved2[5];\n    ULONG rpcFlags;\n  } RPCOLEMESSAGE;\n\n  typedef RPCOLEMESSAGE *PRPCOLEMESSAGE;\n\n  HRESULT GetBuffer(\n    [in] RPCOLEMESSAGE *pMessage,\n    [in] REFIID riid);\n\n  HRESULT SendReceive(\n    [in,out] RPCOLEMESSAGE *pMessage,\n    [out] ULONG *pStatus);\n\n  HRESULT FreeBuffer(\n    [in] RPCOLEMESSAGE *pMessage);\n\n  HRESULT GetDestCtx(\n    [out] DWORD *pdwDestContext,\n    [out] void **ppvDestContext);\n\n  HRESULT IsConnected();\n}\n\n[\n  local,\n  object,\n  uuid(594f31d0-7f19-11d0-b194-00a0c90dc8bf)\n]\ninterface IRpcChannelBuffer2 : IRpcChannelBuffer\n{\n  typedef [unique] IRpcChannelBuffer2 *LPRPCCHANNELBUFFER2;\n\n  HRESULT GetProtocolVersion(\n    [in,out] DWORD *pdwVersion);\n}\n\n[\n  local,\n  object,\n  uuid(25B15600-0115-11d0-BF0D-00AA00B8DFD2)\n]\ninterface IRpcChannelBuffer3 : IRpcChannelBuffer2\n{\n  typedef [unique] IRpcChannelBuffer3 *LPRPCCHANNELBUFFER3;\n\n  HRESULT Send(\n    [in,out] RPCOLEMESSAGE *pMsg,\n    [out] ULONG *pulStatus);\n\n  HRESULT Receive(\n    [in,out] RPCOLEMESSAGE *pMsg,\n    [in] ULONG ulSize,\n    [out] ULONG *pulStatus);\n\n  HRESULT Cancel(\n    [in] RPCOLEMESSAGE *pMsg);\n\n  HRESULT GetCallContext(\n    [in] RPCOLEMESSAGE *pMsg,\n    [in] REFIID riid,\n    [out] void **pInterface);\n\n  HRESULT GetDestCtxEx(\n    [in] RPCOLEMESSAGE *pMsg,\n    [out] DWORD *pdwDestContext,\n    [out] void **ppvDestContext);\n\n  HRESULT GetState(\n    [in] RPCOLEMESSAGE *pMsg,\n    [out] DWORD *pState);\n\n  HRESULT RegisterAsync(\n    [in] RPCOLEMESSAGE *pMsg,\n    [in] IAsyncManager *pAsyncMgr);\n}\n\n[\n    local,\n    object,\n    uuid(a5029fb6-3c34-11d1-9c99-00c04fb998aa),\n    pointer_default(unique)\n]\ninterface IAsyncRpcChannelBuffer : IRpcChannelBuffer2\n{\n    HRESULT Send(\n        [in, out] RPCOLEMESSAGE *pMsg,\n        [in] ISynchronize *pSync,\n        [out] ULONG *pulStatus);\n\n    HRESULT Receive(\n        [in, out] RPCOLEMESSAGE *pMsg,\n        [out] ULONG *pulStatus);\n\n    HRESULT GetDestCtxEx(\n        [in] RPCOLEMESSAGE *pMsg,\n        [out] DWORD *pdwDestContext,\n        [out] void **ppvDestContext);\n}\n\n[\n    local,\n    object,\n    uuid(58a08519-24c8-4935-b482-3fd823333a4f)\n]\ninterface IRpcSyntaxNegotiate : IUnknown\n{\n    HRESULT NegotiateSyntax(\n        [in, out] RPCOLEMESSAGE *pMsg);\n}\n\n[\n  local,\n  object,\n  uuid(D5F56A34-593B-101A-B569-08002B2DBF7A)\n]\ninterface IRpcProxyBuffer : IUnknown\n{\n  typedef [unique] IRpcProxyBuffer *LPRPCPROXYBUFFER;\n\n  HRESULT Connect(\n    [in, unique] IRpcChannelBuffer *pRpcChannelBuffer);\n\n  void Disconnect();\n}\n\n[\n  local,\n  object,\n  uuid(D5F56AFC-593B-101A-B569-08002B2DBF7A)\n]\ninterface IRpcStubBuffer : IUnknown\n{\n  typedef [unique] IRpcStubBuffer *LPRPCSTUBBUFFER;\n\n  HRESULT Connect(\n    [in] IUnknown *pUnkServer);\n\n  void Disconnect();\n\n  HRESULT Invoke(\n    [in] RPCOLEMESSAGE *_prpcmsg,\n    [in] IRpcChannelBuffer *_pRpcChannelBuffer);\n\n  IRpcStubBuffer *IsIIDSupported(\n    [in] REFIID riid);\n\n  ULONG CountRefs();\n\n  HRESULT DebugServerQueryInterface(\n    void **ppv);\n\n  void DebugServerRelease(\n    void *pv);\n}\n\n[\n  local,\n  object,\n  uuid(D5F569D0-593B-101A-B569-08002B2DBF7A)\n]\ninterface IPSFactoryBuffer : IUnknown\n{\n  typedef [unique] IPSFactoryBuffer *LPPSFACTORYBUFFER;\n\n  HRESULT CreateProxy(\n    [in] IUnknown *pUnkOuter,\n    [in] REFIID riid,\n    [out] IRpcProxyBuffer **ppProxy,\n    [out] void **ppv);\n\n  HRESULT CreateStub(\n    [in] REFIID riid,\n    [in, unique] IUnknown *pUnkServer,\n    [out] IRpcStubBuffer **ppStub);\n}\n\n[\n  local,\n  object,\n  uuid(1008c4a0-7613-11cf-9af1-0020af6e72f4)\n]\ninterface IChannelHook : IUnknown\n{\n  typedef [unique] IChannelHook *LPCHANNELHOOK;\n\n  typedef struct SChannelHookCallInfo {\n    IID iid;\n    DWORD cbSize;\n    GUID uCausality;\n    DWORD dwServerPid;\n    DWORD iMethod;\n    void *pObject;\n  } SChannelHookCallInfo;\n\n  void ClientGetSize(\n    [in] REFGUID uExtent,\n    [in] REFIID riid,\n    [out] ULONG *pDataSize);\n\n  void ClientFillBuffer(\n    [in] REFGUID uExtent,\n    [in] REFIID riid,\n    [in, out] ULONG *pDataSize,\n    [in] void *pDataBuffer);\n\n  void ClientNotify(\n    [in] REFGUID uExtent,\n    [in] REFIID riid,\n    [in] ULONG cbDataSize,\n    [in] void *pDataBuffer,\n    [in] DWORD lDataRep,\n    [in] HRESULT hrFault);\n\n  void ServerNotify(\n    [in] REFGUID uExtent,\n    [in] REFIID riid,\n    [in] ULONG cbDataSize,\n    [in] void *pDataBuffer,\n    [in] DWORD lDataRep);\n\n  void ServerGetSize(\n    [in] REFGUID uExtent,\n    [in] REFIID riid,\n    [in] HRESULT hrFault,\n    [out] ULONG *pDataSize);\n\n  void ServerFillBuffer(\n    [in] REFGUID uExtent,\n    [in] REFIID riid,\n    [in, out] ULONG *pDataSize,\n    [in] void *pDataBuffer,\n    [in] HRESULT hrFault );\n}\n\nextern const FMTID FMTID_SummaryInformation;\nextern const FMTID FMTID_DocSummaryInformation;\nextern const FMTID FMTID_UserDefinedProperties;\n\n\n/******************** Connection Points ********************/\n/* FIXME */\n\n/******************** DCOM ********************/\n\n[\n  local,\n  object,\n  uuid(0000013D-0000-0000-C000-000000000046)\n]\ninterface IClientSecurity : IUnknown\n{\n  typedef struct tagSOLE_AUTHENTICATION_SERVICE {\n    DWORD dwAuthnSvc;\n    DWORD dwAuthzSvc;\n    OLECHAR *pPrincipalName;\n    HRESULT hr;\n  } SOLE_AUTHENTICATION_SERVICE;\n\n  typedef SOLE_AUTHENTICATION_SERVICE *PSOLE_AUTHENTICATION_SERVICE;\n\n  typedef struct tagSOLE_AUTHENTICATION_INFO {\n    DWORD dwAuthnSvc;\n    DWORD dwAuthzSvc;\n    void *pAuthInfo;\n  } SOLE_AUTHENTICATION_INFO;\n\n  const OLECHAR *COLE_DEFAULT_PRINCIPAL = (OLECHAR*) -1;\n  const void *COLE_DEFAULT_AUTHINFO = (void*) -1;\n\n  typedef struct tagSOLE_AUTHENTICATION_LIST {\n    DWORD cAuthInfo;\n    SOLE_AUTHENTICATION_INFO *aAuthInfo;\n  } SOLE_AUTHENTICATION_LIST;\n\n  typedef enum tagEOLE_AUTHENTICATION_CAPABILITIES {\n    EOAC_NONE               = 0x0,\n    EOAC_MUTUAL_AUTH        = 0x1,\n    EOAC_SECURE_REFS        = 0x2, /* CoInitializeSecurity only */\n    EOAC_ACCESS_CONTROL     = 0x4, /* CoInitializeSecurity only */\n    EOAC_APPID              = 0x8, /* CoInitializeSecurity only */\n    EOAC_DYNAMIC            = 0x10, /* CoInitializeSecurity only */\n    EOAC_STATIC_CLOAKING    = 0x20,\n    EOAC_DYNAMIC_CLOAKING   = 0x40,\n    EOAC_ANY_AUTHORITY      = 0x80,\n    EOAC_MAKE_FULLSIC       = 0x100,\n    EOAC_REQUIRE_FULLSIC    = 0x200, /* CoInitializeSecurity only */\n    EOAC_AUTO_IMPERSONATE   = 0x400, /* CoInitializeSecurity only */\n    EOAC_DEFAULT            = 0x800,\n    EOAC_DISABLE_AAA        = 0x1000, /* CoInitializeSecurity only */\n    EOAC_NO_CUSTOM_MARSHAL  = 0x2000, /* CoInitializeSecurity only */\n  } EOLE_AUTHENTICATION_CAPABILITIES;\n\n  HRESULT QueryBlanket(\n    [in] IUnknown *pProxy,\n    [out] DWORD *pAuthnSvc,\n    [out] DWORD *pAuthzSvc,\n    [out] OLECHAR **pServerPrincName,\n    [out] DWORD *pAuthnLevel,\n    [out] DWORD *pImpLevel,\n    [out] void **pAuthInfo,\n    [out] DWORD *pCapabilities);\n\n  HRESULT SetBlanket(\n    [in] IUnknown *pProxy,\n    [in] DWORD AuthnSvc,\n    [in] DWORD AuthzSvc,\n    [in] OLECHAR *pServerPrincName,\n    [in] DWORD AuthnLevel,\n    [in] DWORD ImpLevel,\n    [in] void *pAuthInfo,\n    [in] DWORD Capabilities);\n\n  HRESULT CopyProxy(\n    [in] IUnknown *pProxy,\n    [out] IUnknown **ppCopy);\n}\n\n[\n  local,\n  object,\n  uuid(0000013E-0000-0000-C000-000000000046)\n]\ninterface IServerSecurity : IUnknown\n{\n  HRESULT QueryBlanket(\n    [out] DWORD *pAuthnSvc,\n    [out] DWORD *pAuthzSvc,\n    [out] OLECHAR **pServerPrincName,\n    [out] DWORD *pAuthnLevel,\n    [out] DWORD *pImpLevel,\n    [out] void **pPrivs,\n    [out] DWORD *pCapabilities);\n\n  HRESULT ImpersonateClient();\n\n  HRESULT RevertToSelf();\n\n  BOOL IsImpersonating();\n}\n\n[\n  local,\n  object,\n  uuid(00000024-0000-0000-C000-000000000046)\n]\ninterface IAsyncSetup : IUnknown\n{\n  HRESULT GetAsyncManager(\n    [in] REFIID riid,\n    [in] IUnknown *pOuter,\n    [in] DWORD dwFlags,\n    [out] IUnknown **ppInner,\n    [out] IAsyncManager **ppAsyncMgr);\n}\n\n[\n    object,\n    uuid(0e6d4d92-6738-11cf-9608-00aa00680db4)\n]\ninterface IDirectWriterLock : IUnknown\n{\n    HRESULT WaitForWriteAccess(\n        [in] DWORD dwTimeout);\n\n    HRESULT ReleaseWriteAccess();\n\n    HRESULT HaveWriteAccess();\n}\n\n[\n    object,\n    uuid(00000030-0000-0000-C000-000000000046)\n]\n\ninterface ISynchronize : IUnknown\n{\n    HRESULT Wait(\n        [in] DWORD dwFlags,\n        [in] DWORD dwMilliseconds);\n\n    HRESULT Signal();\n\n    HRESULT Reset();\n}\n\n\n[\n    local,\n    object,\n    uuid(00000031-0000-0000-C000-000000000046)\n]\ninterface ISynchronizeHandle : IUnknown\n{\n    HRESULT GetHandle(\n        [out] HANDLE *ph);\n}\n\n\n[\n    local,\n    object,\n    uuid(00000032-0000-0000-C000-000000000046)\n]\ninterface ISynchronizeEvent : ISynchronizeHandle\n{\n    HRESULT SetEventHandle(\n        [in] HANDLE *ph);\n}\n\n\n[\n    local,\n    object,\n    uuid(00000033-0000-0000-C000-000000000046)\n]\ninterface ISynchronizeContainer : IUnknown\n{\n    HRESULT AddSynchronize(\n        [in] ISynchronize *pSync);\n\n    HRESULT WaitMultiple(\n        [in] DWORD dwFlags,\n        [in] DWORD dwTimeOut,\n        [out] ISynchronize **ppSync);\n}\n\n[\n    local,\n    object,\n    uuid(00000025-0000-0000-C000-000000000046)\n]\ninterface ISynchronizeMutex : ISynchronize\n{\n    HRESULT ReleaseMutex();\n}\n\n[\n    local,\n    object,\n    uuid(00000029-0000-0000-C000-000000000046)\n]\n\ninterface ICancelMethodCalls : IUnknown\n{\n    typedef [unique] ICancelMethodCalls *LPCANCELMETHODCALLS;\n\n    HRESULT Cancel(\n        [in] ULONG ulSeconds);\n\n    HRESULT TestCancel();\n}\n\n[\n  local,\n  object,\n  uuid(0000002A-0000-0000-C000-000000000046)\n]\ninterface IAsyncManager : IUnknown\n{\n  typedef enum tagDCOM_CALL_STATE {\n    DCOM_NONE          = 0,\n    DCOM_CALL_COMPLETE = 1,\n    DCOM_CALL_CANCELED = 2\n  } DCOM_CALL_STATE;\n\n  HRESULT CompleteCall(\n    [in] HRESULT Result);\n\n  HRESULT GetCallContext(\n    [in] REFIID riid,\n    [out] void **pInterface);\n\n  HRESULT GetState(\n    [out] ULONG *pulStateFlags);\n}\n\n[\n    local,\n    object,\n    uuid(1c733a30-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface ICallFactory : IUnknown\n{\n    HRESULT CreateCall(\n        [in] REFIID riid,\n        [in] IUnknown *pCtrlUnk,\n        [in] REFIID riid2,\n        [out, iid_is(riid2)] IUnknown **ppv);\n}\n\n[\n    local,\n    object,\n    uuid(00000144-0000-0000-C000-000000000046)\n]\ninterface IRpcOptions : IUnknown\n{\n    HRESULT Set(\n        [in] IUnknown *pPrx,\n        [in] DWORD dwProperty,\n        [in] ULONG_PTR dwValue);\n\n    HRESULT Query(\n        [in] IUnknown *pPrx,\n        [in] DWORD dwProperty,\n        [out] ULONG_PTR *pdwValue);\n}\n\nenum {\n   COMBND_RPCTIMEOUT = 1,\n   COMBND_SERVER_LOCALITY = 2\n};  \n\nenum {\n   SERVER_LOCALITY_PROCESS_LOCAL = 0,\n   SERVER_LOCALITY_MACHINE_LOCAL = 1,\n   SERVER_LOCALITY_REMOTE = 2\n};\n\n[\n    local,\n    object,\n    uuid(00000149-0000-0000-C000-000000000046),\n    pointer_default(unique)\n]\ninterface IRpcHelper : IUnknown\n{\n    HRESULT GetDCOMProtocolVersion(\n        [out] DWORD *pComVersion);\n\n    HRESULT GetIIDFromOBJREF(\n        [in] void *pObjRef,\n        [out] IID **piid);\n}\n\n[\n    local,\n    object,\n    uuid(eb0cb9e8-7996-11d2-872e-0000f8080859)\n]\ninterface IReleaseMarshalBuffers : IUnknown\n{\n    HRESULT ReleaseMarshalBuffer(\n        [in] RPCOLEMESSAGE *pMsg,\n        [in] DWORD dwFlags,\n        [in, unique] IUnknown *pChnl);\n}\n\n[\n    local,\n    object,\n    uuid(0000002B-0000-0000-C000-000000000046)\n]\ninterface IWaitMultiple : IUnknown\n{\n    HRESULT WaitMultiple(\n        [in] DWORD timeout,\n        [out] ISynchronize **pSync);\n    HRESULT AddSynchronize(\n        [in] ISynchronize *pSync);\n}\n\n\n[\n    object,\n    uuid(00000026-0000-0000-C000-000000000046)\n]\ninterface IUrlMon : IUnknown\n{\n    HRESULT AsyncGetClassBits(\n        [in] REFCLSID rclsid,\n        [in, unique] LPCWSTR pszTYPE,\n        [in, unique] LPCWSTR pszExt,\n        [in] DWORD dwFileVersionMS,\n        [in] DWORD dwFileVersionLS,\n        [in, unique] LPCWSTR pszCodeBase,\n        [in] IBindCtx *pbc,\n        [in] DWORD dwClassContext,\n        [in] REFIID riid,\n        [in] DWORD flags);\n}\n\n[\n    local,\n    object,\n    uuid(00000145-0000-0000-C000-000000000046)\n]\ninterface IForegroundTransfer : IUnknown\n{\n    HRESULT AllowForegroundTransfer(\n        [in] void *lpvReserved);\n}\n\n[\n    local,\n    object,\n    uuid(00000147-0000-0000-C000-000000000046)\n]\ninterface IAddrTrackingControl : IUnknown\n{\n    typedef [unique] IAddrTrackingControl *LPADDRTRACKINGCONTROL;\n\n    HRESULT EnableCOMDynamicAddrTracking();\n    HRESULT DisableCOMDynamicAddrTracking();\n}\n\n[\n    local,\n    object,\n    uuid(00000148-0000-0000-C000-000000000046)\n]\ninterface IAddrExclusionControl : IUnknown\n{\n    typedef [unique] IAddrExclusionControl *LPADDREXCLUSIONCONTROL;\n\n    HRESULT GetCurrentAddrExclusionList(\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppEnumerator);\n    HRESULT UpdateAddrExclusionList(\n        [in] IUnknown *pEnumerator);\n}\n\ntypedef enum _APTTYPE {\n    APTTYPE_CURRENT = -1,\n    APTTYPE_STA     = 0,\n    APTTYPE_MTA     = 1,\n    APTTYPE_NA      = 2,\n    APTTYPE_MAINSTA = 3\n} APTTYPE;\n\ntypedef enum _APTTYPEQUALIFIER {\n    APTTYPEQUALIFIER_NONE,\n    APTTYPEQUALIFIER_IMPLICIT_MTA,\n    APTTYPEQUALIFIER_NA_ON_MTA,\n    APTTYPEQUALIFIER_NA_ON_STA,\n    APTTYPEQUALIFIER_NA_ON_IMPLICIT_MTA,\n    APTTYPEQUALIFIER_NA_ON_MAINSTA\n} APTTYPEQUALIFIER;\n\ntypedef enum _THDTYPE {\n    THDTYPE_BLOCKMESSAGES   = 0,\n    THDTYPE_PROCESSMESSAGES = 1\n} THDTYPE;\n\n[\n    local,\n    object,\n    uuid(000001ce-0000-0000-C000-000000000046),\n    pointer_default(unique)\n]\ninterface IComThreadingInfo : IUnknown\n{\n    HRESULT GetCurrentApartmentType(\n        [out] APTTYPE *pAptType);\n    HRESULT GetCurrentThreadType(\n        [out] THDTYPE *pThreadType);\n    HRESULT GetCurrentLogicalThreadId(\n        [out] GUID *pguidLogicalThreadId);\n    HRESULT SetCurrentLogicalThreadId(\n        [in] REFGUID rguid);\n}\n\n\n[\n    object,\n    pointer_default(unique),\n    uuid(72380d55-8d2b-43a3-8513-2b6ef31434e9)\n]\ninterface IProcessInitControl : IUnknown\n{\n    HRESULT ResetInitializerTimeout(\n        [in] DWORD dwSecondsRemaining);\n}\n\n[\n    local,\n    object,\n    uuid(00000034-0000-0000-C000-000000000046),\n    pointer_default(unique)\n]\ninterface IInitializeSpy : IUnknown\n{\n    typedef [unique] IInitializeSpy *LPINITIALIZESPY;\n\n    HRESULT PreInitialize(\n        [in] DWORD dwCoInit,\n        [in] DWORD dwCurThreadAptRefs);\n\n    HRESULT PostInitialize(\n        [in] HRESULT hrCoInit,\n        [in] DWORD dwCoInit,\n        [in] DWORD dwNewThreadAptRefs);\n\n    HRESULT PreUninitialize(\n        [in] DWORD dwCurThreadAptRefs);\n\n    HRESULT PostUninitialize(\n        [in] DWORD dwNewThreadAptRefs);\n}\n\n[\n    object,\n    uuid(969dc708-5c76-11d1-8d86-0000f804b057)\n]\ninterface IThumbnailExtractor : IUnknown\n{\n    HRESULT ExtractThumbnail(\n        [in] IStorage *pStg,\n        [in] ULONG ulLength,\n        [in] ULONG ulHeight,\n        [out] ULONG *pulOutputLength,\n        [out] ULONG *pulOutputHeight,\n        [out] HBITMAP *phOutputBitmap);\n\n\n    HRESULT OnFileUpdated(\n        [in] IStorage *pStg);\n}\n\ntypedef enum tagGLOBALOPT_PROPERTIES\n{\n    COMGLB_EXCEPTION_HANDLING     = 1,\n    COMGLB_APPID                  = 2,\n    COMGLB_RPC_THREADPOOL_SETTING = 3\n} GLOBALOPT_PROPERTIES;\n\ntypedef enum tagGLOBALOPT_EH_VALUES\n{\n    COMGLB_EXCEPTION_HANDLE               = 0,\n    COMGLB_EXCEPTION_DONOT_HANDLE_FATAL   = 1,\n    COMGLB_EXCEPTION_DONOT_HANDLE         = COMGLB_EXCEPTION_DONOT_HANDLE_FATAL,\n    COMGLB_EXCEPTION_DONOT_HANDLE_ANY     = 2\n} GLOBALOPT_EH_VALUES;\n\ntypedef enum tagGLOBALOPT_RPCTP_VALUES\n{\n    COMGLB_RPC_THREADPOOL_SETTING_DEFAULT_POOL = 0,\n    COMGLB_RPC_THREADPOOL_SETTING_PRIVATE_POOL = 1\n} GLOBALOPT_RPCTP_VALUES;\n\n\n[\n    object,\n    local,\n    pointer_default(unique),\n    uuid(0000015B-0000-0000-C000-000000000046)\n]\ninterface IGlobalOptions : IUnknown\n{\n    HRESULT Set([in] GLOBALOPT_PROPERTIES property, [in] ULONG_PTR value);\n    HRESULT Query([in] GLOBALOPT_PROPERTIES property, [out ] ULONG_PTR *value);\n}\n\n[\n    object,\n    pointer_default(unique),\n    uuid(947990de-cc28-11d2-a0f7-00805f858fb1)\n]\ninterface IDummyHICONIncluder : IUnknown\n{\n    HRESULT Dummy([in] HICON hIcon, [in] HDC hdc);\n}\n\n[\n    object,\n    local,\n    pointer_default(unique),\n    uuid(a2f05a09-27a2-42b5-bc0e-ac163ef49d9b)\n]\ninterface IApartmentShutdown : IUnknown\n{\n    void OnUninitialize([in] UINT64 identifier);\n}\n\ncpp_quote(\"#ifdef USE_COM_CONTEXT_DEF\")\n\ntypedef DWORD CPFLAGS;\n\ntypedef struct tagContextProperty\n{\n    GUID policyId;\n    CPFLAGS flags;\n    [unique] IUnknown *pUnk;\n} ContextProperty;\n\n[\n    local,\n    object,\n    uuid(000001c1-0000-0000-C000-000000000046)\n]\ninterface IEnumContextProps : IUnknown\n{\n    typedef [unique] IEnumContextProps *LPENUMCONTEXTPROPS;\n\n    HRESULT Next(\n        [in] ULONG celt,\n        [out, size_is(celt), length_is(*pceltFetched)] ContextProperty *pContextProperties,\n        [out] ULONG *pceltFetched);\n\n    HRESULT Skip(\n        [in] ULONG celt);\n\n    HRESULT Reset();\n\n    HRESULT Clone(\n        [out] IEnumContextProps **ppEnumContextProps);\n\n    HRESULT Count(\n        [out] ULONG *pcelt);\n}\n\n[\n    local,\n    object,\n    uuid(000001c0-0000-0000-C000-000000000046)\n]\ninterface IContext : IUnknown\n{\n    HRESULT SetProperty(\n        [in] REFGUID policyId,\n        [in] CPFLAGS flags,\n        [in] IUnknown *pUnk);\n\n    HRESULT RemoveProperty(\n        [in] REFGUID policyId);\n\n    HRESULT GetProperty(\n        [in] REFGUID guid,\n        [out] CPFLAGS *pFlags,\n        [out] IUnknown **ppUnk);\n\n    HRESULT EnumContextProps(\n        [out] IEnumContextProps **ppEnumContextProps);\n}\n\n[\n    local,\n    object,\n    uuid(000001c6-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IObjContext : IContext\n{\n    void Reserved1();\n    void Reserved2();\n    void Reserved3();\n    void Reserved4();\n    void Reserved5();\n    void Reserved6();\n    void Reserved7();\n}\n\ncpp_quote(\"#endif /* defined USE_COM_CONTEXT_DEF */\")\n"
  },
  {
    "path": "wine/windows/objsafe.idl",
    "content": "/*\n * Copyright (C) 2005 CorVu Corporation\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"unknwn.idl\";\n#endif\n\ncpp_quote(\"#define INTERFACESAFE_FOR_UNTRUSTED_CALLER 1\")\ncpp_quote(\"#define INTERFACESAFE_FOR_UNTRUSTED_DATA 2\")\ncpp_quote(\"#define INTERFACE_USES_DISPEX 4\")\ncpp_quote(\"#define INTERFACE_USES_SECURITY_MANAGER 8\")\n\ncpp_quote(\"DEFINE_GUID(CATID_SafeForScripting, 0x7dd95801,0x9882,0x11cf,0x9f,0xa9,0x00,0xaa,0x00,0x6c,0x42,0xc4);\")\ncpp_quote(\"DEFINE_GUID(CATID_SafeForInitializing, 0x7dd95802,0x9882,0x11cf,0x9f,0xa9,0x00,0xaa,0x00,0x6c,0x42,0xc4);\")\n\n[\n    object,\n    uuid(cb5bdc81-93c1-11cf-8f20-00805f2cd064),\n    pointer_default(unique)\n]\ninterface IObjectSafety : IUnknown\n{\n    HRESULT GetInterfaceSafetyOptions([in] REFIID riid,\n    \t\t\t\t      [out] DWORD *pdwSupportedOptions,\n\t\t\t\t      [out] DWORD *pdwEnabledOptions);\n\n    HRESULT SetInterfaceSafetyOptions([in] REFIID riid,\n    \t\t\t\t      [in] DWORD dwOptionSetMask,\n\t\t\t\t      [in] DWORD dwEnabledOptions);\n}\n"
  },
  {
    "path": "wine/windows/objsel.h",
    "content": "/*\n * objsel.h\n *\n * Object Picker Dialog\n *\n * THIS SOFTWARE IS NOT COPYRIGHTED\n *\n * This source code is offered for use in the public domain. You may\n * use, modify or distribute it freely.\n *\n * This code is distributed in the hope that it will be useful but\n * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY\n * DISCLAIMED. This includes but is not limited to warranties of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n *\n */\n#ifndef __OBJSEL_H_\n#define __OBJSEL_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nDEFINE_GUID(CLSID_DsObjectPicker, 0x17d6ccd8, 0x3b7b, 0x11d2, 0xb9,0xe0,0x00,0xc0,0x4f,0xd8,0xdb,0xf7);\nDEFINE_GUID(IID_IDsObjectPicker,  0x0c87e64e, 0x3b7a, 0x11d2, 0xb9,0xe0,0x00,0xc0,0x4f,0xd8,0xdb,0xf7);\n\n#define CFSTR_DSOP_DS_SELECTION_LIST    TEXT(\"CFSTR_DSOP_DS_SELECTION_LIST\")\n\n/* up-level scope filters in the DSOP_UPLEVEL_FILTER_FLAGS structure */\n#define DSOP_FILTER_INCLUDE_ADVANCED_VIEW       (0x1)\n#define DSOP_FILTER_USERS       (0x2)\n#define DSOP_FILTER_BUILTIN_GROUPS      (0x4)\n#define DSOP_FILTER_WELL_KNOWN_PRINCIPALS       (0x8)\n#define DSOP_FILTER_UNIVERSAL_GROUPS_DL (0x10)\n#define DSOP_FILTER_UNIVERSAL_GROUPS_SE (0x20)\n#define DSOP_FILTER_GLOBAL_GROUPS_DL    (0x40)\n#define DSOP_FILTER_GLOBAL_GROUPS_SE    (0x80)\n#define DSOP_FILTER_DOMAIN_LOCAL_GROUPS_DL      (0x100)\n#define DSOP_FILTER_DOMAIN_LOCAL_GROUPS_SE      (0x200)\n#define DSOP_FILTER_CONTACTS    (0x400)\n#define DSOP_FILTER_COMPUTERS   (0x800)\n#define DSOP_FILTER_SERVICE_ACCOUNTS            (0x1000)\n#define DSOP_FILTER_PASSWORDSETTINGS_OBJECTS    (0x2000)\n\ntypedef struct _DSOP_UPLEVEL_FILTER_FLAGS\n{\n    ULONG flBothModes;\n    ULONG flMixedModeOnly;\n    ULONG flNativeModeOnly;\n} DSOP_UPLEVEL_FILTER_FLAGS, *PDSOP_UPLEVEL_FILTER_FLAGS;\n\n/* down-level scope filters in the DSOP_FILTER_FLAGS structure */\n#define DSOP_DOWNLEVEL_FILTER_USERS     (0x80000001)\n#define DSOP_DOWNLEVEL_FILTER_LOCAL_GROUPS      (0x80000002)\n#define DSOP_DOWNLEVEL_FILTER_GLOBAL_GROUPS     (0x80000004)\n#define DSOP_DOWNLEVEL_FILTER_COMPUTERS (0x80000008)\n#define DSOP_DOWNLEVEL_FILTER_WORLD     (0x80000010)\n#define DSOP_DOWNLEVEL_FILTER_AUTHENTICATED_USER        (0x80000020)\n#define DSOP_DOWNLEVEL_FILTER_ANONYMOUS (0x80000040)\n#define DSOP_DOWNLEVEL_FILTER_BATCH     (0x80000080)\n#define DSOP_DOWNLEVEL_FILTER_CREATOR_OWNER     (0x80000100)\n#define DSOP_DOWNLEVEL_FILTER_CREATOR_GROUP     (0x80000200)\n#define DSOP_DOWNLEVEL_FILTER_DIALUP    (0x80000400)\n#define DSOP_DOWNLEVEL_FILTER_INTERACTIVE       (0x80000800)\n#define DSOP_DOWNLEVEL_FILTER_NETWORK   (0x80001000)\n#define DSOP_DOWNLEVEL_FILTER_SERVICE   (0x80002000)\n#define DSOP_DOWNLEVEL_FILTER_SYSTEM    (0x80004000)\n#define DSOP_DOWNLEVEL_FILTER_EXCLUDE_BUILTIN_GROUPS    (0x80008000)\n#define DSOP_DOWNLEVEL_FILTER_TERMINAL_SERVER   (0x80010000)\n#define DSOP_DOWNLEVEL_FILTER_ALL_WELLKNOWN_SIDS        (0x80020000)\n#define DSOP_DOWNLEVEL_FILTER_LOCAL_SERVICE     (0x80040000)\n#define DSOP_DOWNLEVEL_FILTER_NETWORK_SERVICE   (0x80080000)\n#define DSOP_DOWNLEVEL_FILTER_REMOTE_LOGON      (0x80100000)\n\ntypedef struct _DSOP_FILTER_FLAGS\n{\n    DSOP_UPLEVEL_FILTER_FLAGS Uplevel;\n    ULONG flDownlevel;\n} DSOP_FILTER_FLAGS, *PDSOP_FILTER_FLAGS;\n\n/* ADsPath format flags in the DSOP_SCOPE_INIT_INFO structure */\n#define DSOP_SCOPE_FLAG_STARTING_SCOPE  (0x1)\n#define DSOP_SCOPE_FLAG_WANT_PROVIDER_WINNT     (0x2)\n#define DSOP_SCOPE_FLAG_WANT_PROVIDER_LDAP      (0x4)\n#define DSOP_SCOPE_FLAG_WANT_PROVIDER_GC        (0x8)\n#define DSOP_SCOPE_FLAG_WANT_SID_PATH   (0x10)\n#define DSOP_SCOPE_FLAG_WANT_DOWNLEVEL_BUILTIN_PATH     (0x20)\n#define DSOP_SCOPE_FLAG_DEFAULT_FILTER_USERS    (0x40)\n#define DSOP_SCOPE_FLAG_DEFAULT_FILTER_GROUPS   (0x80)\n#define DSOP_SCOPE_FLAG_DEFAULT_FILTER_COMPUTERS        (0x100)\n#define DSOP_SCOPE_FLAG_DEFAULT_FILTER_CONTACTS (0x200)\n#define DSOP_SCOPE_FLAG_DEFAULT_FILTER_SERVICE_ACCOUNTS         (0x400)\n#define DSOP_SCOPE_FLAG_DEFAULT_FILTER_PASSWORDSETTINGS_OBJECTS (0x800)\n\ntypedef struct _DSOP_SCOPE_INIT_INFO\n{\n    ULONG cbSize;\n    ULONG flType;\n    ULONG flScope;\n    DSOP_FILTER_FLAGS FilterFlags;\n    PCWSTR pwzDcName;\n    PCWSTR pwzADsPath;\n    HRESULT hr;\n} DSOP_SCOPE_INIT_INFO, *PDSOP_SCOPE_INIT_INFO;\ntypedef const DSOP_SCOPE_INIT_INFO *PCDSOP_SCOPE_INIT_INFO;\n\n/* object picker options in the DSOP_INIT_INFO structure */\n#define DSOP_FLAG_MULTISELECT   (0x1)\n#define DSOP_FLAG_SKIP_TARGET_COMPUTER_DC_CHECK (0x2)\n\ntypedef struct _DSOP_INIT_INFO\n{\n    ULONG cbSize;\n    PCWSTR pwzTargetComputer;\n    ULONG cDsScopeInfos;\n    PDSOP_SCOPE_INIT_INFO aDsScopeInfos;\n    ULONG flOptions;\n    ULONG cAttributesToFetch;\n    PCWSTR *apwzAttributeNames;\n} DSOP_INIT_INFO, *PDSOP_INIT_INFO;\n\ntypedef const DSOP_INIT_INFO *PCDSOP_INIT_INFO;\n\n/* selection scope types in the DS_SELECTION structure */\n#define DSOP_SCOPE_TYPE_TARGET_COMPUTER (0x1)\n#define DSOP_SCOPE_TYPE_UPLEVEL_JOINED_DOMAIN   (0x2)\n#define DSOP_SCOPE_TYPE_DOWNLEVEL_JOINED_DOMAIN (0x4)\n#define DSOP_SCOPE_TYPE_ENTERPRISE_DOMAIN       (0x8)\n#define DSOP_SCOPE_TYPE_GLOBAL_CATALOG  (0x10)\n#define DSOP_SCOPE_TYPE_EXTERNAL_UPLEVEL_DOMAIN (0x20)\n#define DSOP_SCOPE_TYPE_EXTERNAL_DOWNLEVEL_DOMAIN       (0x40)\n#define DSOP_SCOPE_TYPE_WORKGROUP       (0x80)\n#define DSOP_SCOPE_TYPE_USER_ENTERED_UPLEVEL_SCOPE      (0x100)\n#define DSOP_SCOPE_TYPE_USER_ENTERED_DOWNLEVEL_SCOPE    (0x200)\n\ntypedef struct _DS_SELECTION\n{\n    PWSTR pwzName;\n    PWSTR pwzADsPath;\n    PWSTR pwzClass;\n    PWSTR pwzUPN;\n    VARIANT *pvarFetchedAttributes;\n    ULONG flScopeType;\n} DS_SELECTION, *PDS_SELECTION;\n\ntypedef struct _DS_SELECTION_LIST\n{\n    ULONG cItems;\n    ULONG cFetchedAttributes;\n    DS_SELECTION aDsSelection[ANYSIZE_ARRAY];\n} DS_SELECTION_LIST, *PDS_SELECTION_LIST;\n\n/*****************************************************************************\n * IDsObjectPicker interface\n */\n#define INTERFACE   IDsObjectPicker\nDECLARE_INTERFACE_(IDsObjectPicker,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDsObjectPicker methods ***/\n    STDMETHOD(Initialize)(THIS_ PDSOP_INIT_INFO pInitInfo) PURE;\n    STDMETHOD(InvokeDialog)(THIS_ HWND hwndParent, IDataObject** ppdoSelections) PURE;\n};\n#undef INTERFACE\n\n\n#ifdef __cplusplus\n}\n#endif\n#endif /* __OBJSEL_H_ */\n"
  },
  {
    "path": "wine/windows/ocidl.idl",
    "content": "/*\n * Copyright (C) 1999 Paul Quinn\n * Copyright (C) 1999 Francis Beaudet\n * Copyright (C) 2003 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"oleidl.idl\";\nimport \"oaidl.idl\";\nimport \"servprov.idl\";\nimport \"urlmon.idl\";\n#endif\n\n/*****************************************************************************\n * IOleControlTypes interface\n */\n[\n    pointer_default(unique)\n]\ninterface IOleControlTypes\n{\n    typedef [v1_enum] enum tagUASFLAGS\n    {\n        UAS_NORMAL       = 0x0,\n        UAS_BLOCKED      = 0x1,\n        UAS_NOPARENTABLE = 0x2,\n        UAS_MASK         = 0x3\n    } UASFLAGS;\n\n    typedef enum tagREADYSTATE\n    {\n        READYSTATE_UNINITIALIZED  = 0,\n        READYSTATE_LOADING  = 1,\n        READYSTATE_LOADED = 2,\n        READYSTATE_INTERACTIVE  = 3,\n        READYSTATE_COMPLETE = 4\n    } READYSTATE;\n\n    typedef struct tagVARIANT_BLOB\n    {\n        DWORD clSize;\n        DWORD rpcReserved;\n        [size_is(clSize-1)] ULONGLONG ahData[];\n    } wireVARIANT_BLOB;\n\n    typedef struct tagUserVARIANT\n    {\n      wireVARIANT_BLOB pVarBlob;\n    } UserVARIANT;\n}\n\n\n/*****************************************************************************\n * IFont interface\n */\n[\n    object,\n    uuid(bef6e002-a874-101a-8bba-00aa00300cab),\n    pointer_default(unique)\n]\ninterface IFont : IUnknown\n{\n    typedef IFont *LPFONT;\n    typedef TEXTMETRICW TEXTMETRICOLE, *LPTEXTMETRICOLE;\n\n    [propget] HRESULT Name( [out] BSTR *pname);\n    [propput] HRESULT Name( [in] BSTR name );\n    [propget] HRESULT Size( [out] CY *psize );\n    [propput] HRESULT Size( [in] CY size );\n    [propget] HRESULT Bold( [out] BOOL *pbold );\n    [propput] HRESULT Bold( [in] BOOL bold );\n    [propget] HRESULT Italic( [out] BOOL *pitalic );\n    [propput] HRESULT Italic( [in] BOOL italic );\n    [propget] HRESULT Underline( [out] BOOL *punderline );\n    [propput] HRESULT Underline( [in] BOOL underline );\n    [propget] HRESULT Strikethrough( [out] BOOL *pstrikethrough );\n    [propput] HRESULT Strikethrough( [in] BOOL strikethrough );\n    [propget] HRESULT Weight( [out] SHORT *pweight );\n    [propput] HRESULT Weight( [in] SHORT weight );\n    [propget] HRESULT Charset( [out] SHORT *pcharset );\n    [propput] HRESULT Charset( [in] SHORT charset );\n    [propget] HRESULT hFont( [out] HFONT *phfont );\n    HRESULT Clone( [out] IFont **ppfont );\n    HRESULT IsEqual( [in] IFont *pFontOther );\n    HRESULT SetRatio( [in] LONG cyLogical, [in] LONG cyHimetric );\n    HRESULT QueryTextMetrics( [out] TEXTMETRICOLE * ptm );\n    HRESULT AddRefHfont( [in] HFONT hfont );\n    HRESULT ReleaseHfont( [in] HFONT hfont );\n    HRESULT SetHdc( [in] HDC hdc );\n}\n\n\n/*****************************************************************************\n * IFontDisp interface\n */\n[\n    object,\n    uuid(bef6e003-a874-101a-8bba-00aa00300cab),\n    pointer_default(unique)\n]\ninterface IFontDisp : IDispatch\n{\n    typedef IFontDisp *LPFONTDISP;\n}\n\n\n/*****************************************************************************\n * IFontEventsDisp interface\n */\n[\n    object,\n    uuid(4ef6100a-af88-11d0-9846-00c04fc29993),\n    pointer_default(unique)\n]\ninterface IFontEventsDisp : IDispatch\n{\n    typedef IFontEventsDisp *LPFONTEVENTS;\n}\n\n\n/*****************************************************************************\n * IPicture interface\n */\n[\n    object,\n    uuid(7bf80980-bf32-101a-8bbb-00aa00300cab),\n    pointer_default(unique)\n]\ninterface IPicture : IUnknown\n{\n    typedef IPicture *LPPICTURE;\n\n    typedef enum tagPicture\n    {\n        PICTURE_SCALABLE = 0x1,\n        PICTURE_TRANSPARENT = 0x2\n    } PICTUREATTRIBUTES;\n\n    typedef UINT OLE_HANDLE;\n    typedef LONG OLE_XPOS_HIMETRIC;\n    typedef LONG OLE_YPOS_HIMETRIC;\n    typedef LONG OLE_XSIZE_HIMETRIC;\n    typedef LONG OLE_YSIZE_HIMETRIC;\n\n    [propget] HRESULT Handle( [out] OLE_HANDLE *pHandle );\n    [propget] HRESULT hPal( [out] OLE_HANDLE *phPal );\n    [propget] HRESULT Type( [out] SHORT *pType );\n    [propget] HRESULT Width( [out] OLE_XSIZE_HIMETRIC *pWidth );\n    [propget] HRESULT Height( [out] OLE_YSIZE_HIMETRIC *pHeight );\n\n    HRESULT Render(\n        [in] HDC hdc,\n        [in] LONG x,\n        [in] LONG y,\n        [in] LONG cx,\n        [in] LONG cy,\n        [in] OLE_XPOS_HIMETRIC xSrc,\n        [in] OLE_YPOS_HIMETRIC ySrc,\n        [in] OLE_XSIZE_HIMETRIC cxSrc,\n        [in] OLE_YSIZE_HIMETRIC cySrc,\n        [in] LPCRECT pRcWBounds);\n\n    HRESULT set_hPal( [in] OLE_HANDLE hPal );\n\n    [propget] HRESULT CurDC( [out] HDC *phDC );\n\n    HRESULT SelectPicture(\n        [in] HDC hDCIn,\n        [out] HDC * phDCOut,\n        [out] OLE_HANDLE * phBmpOut);\n\n    [propget] HRESULT KeepOriginalFormat( [out] BOOL *pKeep );\n\n    [propput] HRESULT KeepOriginalFormat( [in] BOOL keep );\n\n    HRESULT PictureChanged();\n\n    HRESULT SaveAsFile(\n        [in] LPSTREAM pStream,\n        [in] BOOL fSaveMemCopy,\n        [out] LONG *pCbSize);\n\n    [propget] HRESULT Attributes( [out] DWORD *pDwAttr );\n}\n\n\n/*****************************************************************************\n * IPictureDisp interface\n */\n[\n    object,\n    uuid(7bf80981-bf32-101a-8bbb-00aa00300cab),\n    pointer_default(unique)\n]\ninterface IPictureDisp : IDispatch\n{\n    typedef IPictureDisp *LPPICTUREDISP;\n}\n\n\n/*****************************************************************************\n * IOleControl interface\n */\n[\n    object,\n    uuid(b196b288-bab4-101a-b69c-00aa00341d07),\n    pointer_default(unique)\n]\n\ninterface IOleControl : IUnknown\n{\n    typedef IOleControl *LPOLECONTROL;\n\n    typedef struct tagCONTROLINFO\n    {\n        ULONG cb;\n        HACCEL hAccel;\n        USHORT cAccel;\n        DWORD dwFlags;\n    } CONTROLINFO, *LPCONTROLINFO;\n\n    typedef enum tagCTRLINFO\n    {\n        CTRLINFO_EATS_RETURN = 1,\n        CTRLINFO_EATS_ESCAPE = 2\n    } CTRLINFO;\n\n    HRESULT GetControlInfo( [out] CONTROLINFO *pCI );\n    HRESULT OnMnemonic( [in] MSG *pMsg );\n    HRESULT OnAmbientPropertyChange( [in] DISPID dispID );\n    HRESULT FreezeEvents( [in] BOOL bFreeze );\n}\n\n\n/*****************************************************************************\n * IOleControlSite interface\n */\n[\n    object,\n    uuid(b196b289-bab4-101a-b69c-00aa00341d07),\n    pointer_default(unique)\n]\ninterface IOleControlSite : IUnknown\n{\n    typedef IOleControlSite *LPOLECONTROLSITE;\n\n    typedef struct tagPOINTF\n    {\n        FLOAT x;\n        FLOAT y;\n    } POINTF, *LPPOINTF;\n\n    typedef enum tagXFORMCOORDS\n    {\n\tXFORMCOORDS_POSITION = 0x1,\n\tXFORMCOORDS_SIZE = 0x2,\n\tXFORMCOORDS_HIMETRICTOCONTAINER = 0x4,\n\tXFORMCOORDS_CONTAINERTOHIMETRIC = 0x8,\n        XFORMCOORDS_EVENTCOMPAT = 0x10\n    } XFORMCOORDS;\n\n    HRESULT OnControlInfoChanged();\n\n    HRESULT LockInPlaceActive( [in] BOOL fLock );\n\n    HRESULT GetExtendedControl( [out] IDispatch ** ppDisp );\n\n    HRESULT TransformCoords(\n        [in, out] POINTL *pPtlHimetric,\n        [in, out] POINTF *pPtfContainer,\n        [in] DWORD dwFlags);\n\n    HRESULT TranslateAccelerator( [in] MSG *pMsg, [in] DWORD grfModifiers );\n\n    HRESULT OnFocus( [in] BOOL fGotFocus );\n\n    HRESULT ShowPropertyFrame();\n}\n\n\n/*****************************************************************************\n * IOleInPlaceSiteEx interface\n */\n[\n    object,\n    uuid(9c2cad80-3424-11cf-b670-00aa004cd6d8),\n    pointer_default(unique)\n]\ninterface IOleInPlaceSiteEx : IOleInPlaceSite\n{\n    typedef IOleInPlaceSiteEx *LPOLEINPLACESITEEX;\n\n    typedef enum tagACTIVATEFLAGS\n    {\n        ACTIVATE_WINDOWLESS = 1\n    } ACTIVATE_FLAGS;\n\n    HRESULT OnInPlaceActivateEx( [out] BOOL * pfNoRedraw, [in] DWORD dwFlags );\n    HRESULT OnInPlaceDeactivateEx( [in] BOOL fNoRedraw );\n    HRESULT RequestUIActivate();\n}\n\n\n/*****************************************************************************\n * IOleInPlaceSiteWindowless interface\n */\n[\n    local,\n    object,\n    uuid(922eada0-3424-11cf-b670-00aa004cd6d8),\n    pointer_default(unique)\n]\ninterface IOleInPlaceSiteWindowless : IOleInPlaceSiteEx\n{\n    typedef IOleInPlaceSiteWindowless *LPOLEINPLACESITEWINDOWLESS;\n\n    typedef enum tagOLEDCFLAGS\n    {\n        OLEDC_NODRAW = 0x1,\n        OLEDC_PAINTBKGND = 0x2,\n        OLEDC_OFFSCREEN = 0x4\n    } OLEDCFLAGS;\n\n    HRESULT CanWindowlessActivate();\n\n    HRESULT GetCapture();\n\n    HRESULT SetCapture( [in] BOOL fCapture );\n\n    HRESULT GetFocus();\n\n    HRESULT SetFocus( [in] BOOL fFocus );\n\n    HRESULT GetDC(\n        [in] LPCRECT pRect,\n        [in] DWORD grfFlags,\n        [out] HDC *phDC);\n\n    HRESULT ReleaseDC( [in] HDC hDC );\n\n    HRESULT InvalidateRect(\n        [in] LPCRECT pRect,\n        [in] BOOL fErase);\n\n    HRESULT InvalidateRgn(\n        [in] HRGN hRGN,\n        [in] BOOL fErase);\n\n    HRESULT ScrollRect(\n        [in] INT dx,\n        [in] INT dy,\n        [in] LPCRECT pRectScroll,\n        [in] LPCRECT pRectClip);\n\n    HRESULT AdjustRect( [in, out] LPRECT prc );\n\n    HRESULT OnDefWindowMessage(\n        [in] UINT msg,\n        [in] WPARAM wParam,\n        [in] LPARAM lParam,\n        [out] LRESULT *plResult);\n}\n\n\n/*****************************************************************************\n * IOleInPlaceObjectWindowless interface\n */\n[\n    local,\n    object,\n    uuid(1c2056cc-5ef4-101b-8bc8-00aa003e3b29),\n    pointer_default(unique)\n]\ninterface IOleInPlaceObjectWindowless : IOleInPlaceObject\n{\n    typedef IOleInPlaceObjectWindowless *LPOLEINPLACEOBJECTWINDOWLESS;\n\n    HRESULT OnWindowMessage(\n        [in] UINT msg,\n        [in] WPARAM wParam,\n        [in] LPARAM lParam,\n        [out] LRESULT *plResult);\n\n    HRESULT GetDropTarget( [out] IDropTarget **ppDropTarget );\n}\n\n\n/*****************************************************************************\n * IClassFactory2 interface\n */\n[\n    object,\n    uuid(b196b28f-bab4-101a-b69c-00aa00341d07),\n    pointer_default(unique)\n]\ninterface IClassFactory2 : IClassFactory\n{\n    typedef IClassFactory2 *LPCLASSFACTORY2;\n\n    typedef struct tagLICINFO\n    {\n        LONG cbLicInfo;\n        BOOL fRuntimeKeyAvail;\n        BOOL fLicVerified;\n    } LICINFO, *LPLICINFO;\n\n    HRESULT GetLicInfo( [out] LICINFO *pLicInfo );\n\n    HRESULT RequestLicKey(\n        [in] DWORD dwReserved,\n        [out] BSTR *pBstrKey);\n\n    [local]\n    HRESULT CreateInstanceLic(\n        [in] IUnknown *pUnkOuter,\n        [in] IUnknown *pUnkReserved,\n        [in] REFIID riid,\n        [in] BSTR bstrKey,\n        [out, iid_is(riid)] PVOID *ppvObj);\n\n    [call_as(CreateInstanceLic)]\n    HRESULT RemoteCreateInstanceLic(\n        [in] REFIID riid,\n        [in] BSTR bstrKey,\n        [out, iid_is(riid)] IUnknown **ppvObj);\n}\n\n\n/*****************************************************************************\n * IViewObject interface\n */\n[\n    local,\n    object,\n    uuid(3af24292-0c96-11ce-a0cf-00aa00600ab8),\n    pointer_default(unique)\n]\ninterface IViewObjectEx : IViewObject2\n{\n    typedef IViewObjectEx *LPVIEWOBJECTEX;\n\n    typedef enum tagVIEWSTATUS\n    {\n        VIEWSTATUS_OPAQUE = 1,\n        VIEWSTATUS_SOLIDBKGND = 2,\n        VIEWSTATUS_DVASPECTOPAQUE = 4,\n        VIEWSTATUS_DVASPECTTRANSPARENT = 8,\n        VIEWSTATUS_SURFACE = 16,\n        VIEWSTATUS_3DSURFACE = 32\n    } VIEWSTATUS;\n\n    typedef enum tagHITRESULT\n    {\n        HITRESULT_OUTSIDE = 0,\n        HITRESULT_TRANSPARENT = 1,\n        HITRESULT_CLOSE = 2,\n        HITRESULT_HIT = 3\n    } HITRESULT;\n\n    typedef enum tagDVASPECT2\n    {\n        DVASPECT_OPAQUE = 16,\n        DVASPECT_TRANSPARENT = 32\n    } DVASPECT2;\n\n    typedef struct tagExtentInfo\n    {\n        ULONG cb;\n        DWORD dwExtentMode;\n        SIZEL sizelProposed;\n    } DVEXTENTINFO;\n\n    typedef enum tagAspectInfoFlag\n    {\n        DVASPECTINFOFLAG_CANOPTIMIZE = 1\n    } DVASPECTINFOFLAG;\n\n    typedef struct tagAspectInfo\n    {\n        ULONG cb;\n        DWORD dwFlags;\n    } DVASPECTINFO;\n\n    HRESULT GetRect(\n        [in] DWORD dwAspect,\n        [out] LPRECTL pRect);\n\n    HRESULT GetViewStatus( [out] DWORD *pdwStatus );\n\n    HRESULT QueryHitPoint(\n        [in] DWORD dwAspect,\n        [in] LPCRECT pRectBounds,\n        [in] POINT ptlLoc,\n        [in] LONG lCloseHint,\n        [out] DWORD *pHitResult);\n\n    HRESULT QueryHitRect(\n        [in] DWORD dwAspect,\n        [in] LPCRECT pRectBounds,\n        [in] LPCRECT pRectLoc,\n        [in] LONG lCloseHint,\n        [out] DWORD *pHitResult);\n\n    HRESULT GetNaturalExtent (\n        [in] DWORD dwAspect,\n        [in] LONG lindex,\n        [in] DVTARGETDEVICE *ptd,\n        [in] HDC hicTargetDev,\n        [in] DVEXTENTINFO *pExtentInfo,\n        [out] LPSIZEL pSizel);\n}\n\n\n/*****************************************************************************\n * IProvideClassInfo interface\n */\n[\n    object,\n    uuid(b196b283-bab4-101a-b69c-00aa00341d07),\n    pointer_default(unique)\n]\ninterface IProvideClassInfo : IUnknown\n{\n    typedef IProvideClassInfo *LPPROVIDECLASSINFO;\n\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef GetClassInfo\")\ncpp_quote(\"#endif\")\n\n    HRESULT GetClassInfo( [out] ITypeInfo ** ppTI );\n}\n\n\n/*****************************************************************************\n * IProvideClassInfo2 interface\n */\n[\n    object,\n    uuid(a6bc3ac0-dbaa-11ce-9de3-00aa004bb851),\n    pointer_default(unique)\n]\ninterface IProvideClassInfo2 : IProvideClassInfo\n{\n    typedef IProvideClassInfo2 *LPPROVIDECLASSINFO2;\n\n    typedef enum tagGUIDKIND\n    {\n        GUIDKIND_DEFAULT_SOURCE_DISP_IID = 1\n    } GUIDKIND;\n\n    HRESULT GetGUID(\n        [in]  DWORD dwGuidKind,\n        [out] GUID *pGUID );\n}\n\n\n[\n    object,\n    uuid(a7aba9c1-8983-11cf-8f20-00805f2cd064),\n    pointer_default(unique)\n]\ninterface IProvideMultipleClassInfo : IProvideClassInfo2\n{\n    cpp_quote(\"#define MULTICLASSINFO_GETTYPEINFO           0x00000001\")\n    cpp_quote(\"#define MULTICLASSINFO_GETNUMRESERVEDDISPIDS 0x00000002\")\n    cpp_quote(\"#define MULTICLASSINFO_GETIIDPRIMARY         0x00000004\")\n    cpp_quote(\"#define MULTICLASSINFO_GETIIDSOURCE          0x00000008\")\n\n    cpp_quote(\"#define TIFLAGS_EXTENDDISPATCHONLY           0x00000001\")\n\n    typedef IProvideMultipleClassInfo *LPPROVIDEMULTIPLECLASSINFO;\n\n    HRESULT GetMultiTypeInfoCount( \n        [out] ULONG *pcti);\n\n    HRESULT GetInfoOfIndex( \n        [in] ULONG iti,\n        [in] DWORD dwFlags,\n        [out] ITypeInfo **pptiCoClass,\n        [out] DWORD *pdwTIFlags,\n        [out] ULONG *pcdispidReserved,\n        [out] IID *piidPrimary,\n        [out] IID *piidSource);\n}\n\n\n/*****************************************************************************\n * IConnectionPoint interface\n */\ninterface IConnectionPointContainer; /* forward declarations */\ninterface IEnumConnections;\n\n[\n    object,\n    uuid(b196b286-bab4-101a-b69c-00aa00341d07),\n    pointer_default(unique)\n]\ninterface IConnectionPoint : IUnknown\n{\n    typedef IConnectionPoint *PCONNECTIONPOINT, *LPCONNECTIONPOINT;\n\n    HRESULT GetConnectionInterface( [out] IID *pIID );\n    HRESULT GetConnectionPointContainer( [out] IConnectionPointContainer **ppCPC );\n    HRESULT Advise( [in] IUnknown *pUnkSink, [out] DWORD *pdwCookie );\n    HRESULT Unadvise( [in] DWORD dwCookie );\n    HRESULT EnumConnections( [out] IEnumConnections **ppEnum );\n}\n\n\n/*****************************************************************************\n * IConnectionPointContainer interface\n */\ninterface IEnumConnectionPoints; /* forward declaration */\n[\n    object,\n    uuid(b196b284-bab4-101a-b69c-00aa00341d07),\n    pointer_default(unique)\n]\ninterface IConnectionPointContainer : IUnknown\n{\n    typedef IConnectionPointContainer *PCONNECTIONPOINTCONTAINER, *LPCONNECTIONPOINTCONTAINER;\n\n    HRESULT EnumConnectionPoints( [out] IEnumConnectionPoints **ppEnum );\n    HRESULT FindConnectionPoint( [in] REFIID riid, [out] IConnectionPoint **ppCP );\n}\n\n\n/*****************************************************************************\n * IEnumConnections interface\n */\n[\n    object,\n    uuid(b196b287-bab4-101a-b69c-00aa00341d07),\n    pointer_default(unique)\n]\ninterface IEnumConnections : IUnknown\n{\n    typedef IEnumConnections *PENUMCONNECTIONS, *LPENUMCONNECTIONS;\n\n    typedef struct tagCONNECTDATA\n    {\n        IUnknown *pUnk;\n        DWORD dwCookie;\n    } CONNECTDATA, *PCONNECTDATA, *LPCONNECTDATA;\n\n    [local]\n    HRESULT Next(\n        [in] ULONG cConnections,\n        [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTDATA rgcd,\n        [out] ULONG *pcFetched);\n\n    [call_as(Next)]\n    HRESULT RemoteNext(\n        [in] ULONG cConnections,\n        [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTDATA rgcd,\n        [out] ULONG *pcFetched);\n\n    HRESULT Skip( [in] ULONG cConnections );\n\n    HRESULT Reset();\n\n    HRESULT Clone( [out] IEnumConnections **ppEnum );\n}\n\n\n/*****************************************************************************\n * IEnumConnectionPoints interface\n */\n[\n    object,\n    uuid(b196b285-bab4-101a-b69c-00aa00341d07),\n    pointer_default(unique)\n]\ninterface IEnumConnectionPoints : IUnknown\n{\n    typedef IEnumConnectionPoints *PENUMCONNECTIONPOINTS, *LPENUMCONNECTIONPOINTS;\n\n    [local]\n    HRESULT Next(\n        [in] ULONG cConnections,\n        [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTIONPOINT *ppCP,\n        [out] ULONG *pcFetched);\n\n    [call_as(Next)]\n    HRESULT RemoteNext(\n        [in] ULONG cConnections,\n        [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTIONPOINT *ppCP,\n        [out] ULONG *pcFetched);\n\n    HRESULT Skip( [in] ULONG cConnections );\n\n    HRESULT Reset();\n\n    HRESULT Clone( [out] IEnumConnectionPoints **ppEnum );\n}\n\n\n/*****************************************************************************\n * IPropertyPage interface\n */\ninterface IPropertyPageSite;  /* forward declaration */\n[\n    object,\n    uuid(b196b28d-bab4-101a-b69c-00aa00341d07),\n    pointer_default(unique)\n]\ninterface IPropertyPage : IUnknown\n{\n    typedef IPropertyPage *LPPROPERTYPAGE;\n\n    typedef struct tagPROPPAGEINFO\n    {\n        ULONG cb;\n        LPOLESTR pszTitle;\n        SIZE size;\n        LPOLESTR pszDocString;\n        LPOLESTR pszHelpFile;\n        DWORD dwHelpContext;\n    } PROPPAGEINFO, *LPPROPPAGEINFO;\n\n    HRESULT SetPageSite( [in] IPropertyPageSite *pPageSite );\n\n    HRESULT Activate(\n        [in] HWND hWndParent,\n        [in] LPCRECT pRect,\n        [in] BOOL bModal);\n\n    HRESULT Deactivate();\n\n    HRESULT GetPageInfo( [out] PROPPAGEINFO *pPageInfo );\n\n    HRESULT SetObjects(\n        [in] ULONG cObjects,\n        [in, size_is(cObjects)] IUnknown **ppUnk);\n\n    HRESULT Show( [in] UINT nCmdShow );\n\n    HRESULT Move( [in] LPCRECT pRect );\n\n    HRESULT IsPageDirty();\n\n    HRESULT Apply();\n\n    HRESULT Help( [in] LPCOLESTR pszHelpDir );\n\n    HRESULT TranslateAccelerator( [in] MSG *pMsg );\n}\n\n\n/*****************************************************************************\n * IPropertyPage2 interface\n */\n[\n    object,\n    uuid(01e44665-24ac-101b-84ed-08002b2ec713),\n    pointer_default(unique)\n]\ninterface IPropertyPage2 : IPropertyPage\n{\n    typedef IPropertyPage2 *LPPROPERTYPAGE2;\n\n    HRESULT EditProperty( [in] DISPID dispID );\n}\n\n\n/*****************************************************************************\n * IPropertyPageSite interface\n */\n[\n    object,\n    uuid(b196b28c-bab4-101a-b69c-00aa00341d07),\n    pointer_default(unique)\n]\ninterface IPropertyPageSite : IUnknown\n{\n    typedef IPropertyPageSite *LPPROPERTYPAGESITE;\n\n    typedef enum tagPROPPAGESTATUS\n    {\n        PROPPAGESTATUS_DIRTY = 0x1,\n        PROPPAGESTATUS_VALIDATE = 0x2,\n        PROPPAGESTATUS_CLEAN = 0x4\n    } PROPPAGESTATUS;\n\n    HRESULT OnStatusChange( [in] DWORD dwFlags );\n    HRESULT GetLocaleID( [out] LCID *pLocaleID );\n    HRESULT GetPageContainer( [out] IUnknown **ppUnk );\n    HRESULT TranslateAccelerator( [in] MSG *pMsg );\n}\n\n\n/*****************************************************************************\n * IPropertyNotifySink interface\n */\n[\n    object,\n    uuid(9bfbbc02-eff1-101a-84ed-00aa00341d07),\n    pointer_default(unique)\n]\ninterface IPropertyNotifySink : IUnknown\n{\n    typedef IPropertyNotifySink *LPPROPERTYNOTIFYSINK;\n\n    HRESULT OnChanged( [in] DISPID dispID );\n    HRESULT OnRequestEdit( [in] DISPID dispID );\n}\n\n\n/*****************************************************************************\n * ISimpleFrameSite interface\n */\n[\n    object,\n    uuid(742b0e01-14e6-101b-914e-00aa00300cab),\n    pointer_default(unique)\n]\ninterface ISimpleFrameSite : IUnknown\n{\n    typedef ISimpleFrameSite *LPSIMPLEFRAMESITE;\n\n    HRESULT PreMessageFilter(\n        [in] HWND hWnd,\n        [in] UINT msg,\n        [in] WPARAM wp,\n        [in] LPARAM lp,\n        [out] LRESULT *plResult,\n        [out] DWORD *pdwCookie);\n\n    HRESULT PostMessageFilter(\n        [in] HWND hWnd,\n        [in] UINT msg,\n        [in] WPARAM wp,\n        [in] LPARAM lp,\n        [out] LRESULT *plResult,\n        [in] DWORD dwCookie);\n}\n\n\n/*****************************************************************************\n * IPersistStreamInit interface\n */\n[\n    object,\n    uuid(7fd52380-4e07-101b-ae2d-08002b2ec713),\n    pointer_default(unique)\n]\ninterface IPersistStreamInit : IPersist\n{\n    typedef IPersistStreamInit *LPPERSISTSTREAMINIT;\n\n    HRESULT IsDirty();\n    HRESULT Load( [in] LPSTREAM pStm );\n    HRESULT Save( [in] LPSTREAM pStm, [in] BOOL fClearDirty );\n    HRESULT GetSizeMax( [out] ULARGE_INTEGER *pcbSize );\n    HRESULT InitNew();\n}\n\n\n/*****************************************************************************\n * IPersistMemory interface\n */\n[\n    object,\n    uuid(bd1ae5e0-a6ae-11ce-bd37-504200c10000),\n    pointer_default(unique)\n]\ninterface IPersistMemory : IPersist\n{\n    typedef IPersistMemory *LPPERSISTMEMORY;\n\n    HRESULT IsDirty();\n\n    [local]\n    HRESULT Load(\n        [in, size_is(cbSize)] LPVOID pMem,\n        [in] ULONG cbSize);\n\n    [call_as(Load)]\n    HRESULT RemoteLoad(\n        [in, size_is(cbSize)] BYTE *pMem,\n        [in] ULONG cbSize);\n\n    [local]\n    HRESULT Save(\n        [out, size_is(cbSize)] LPVOID pMem,\n        [in] BOOL fClearDirty,\n        [in] ULONG cbSize);\n\n    [call_as(Save)]\n    HRESULT RemoteSave(\n        [out, size_is(cbSize)] BYTE *pMem,\n        [in] BOOL fClearDirty,\n        [in] ULONG cbSize);\n\n    HRESULT GetSizeMax( [out] ULONG *pCbSize );\n    HRESULT InitNew();\n}\n\n\n/*****************************************************************************\n * IPersistPropertyBag interface\n */\n[\n    object,\n    uuid(37d84f60-42cb-11ce-8135-00aa004bb851),\n    pointer_default(unique)\n]\ninterface IPersistPropertyBag : IPersist\n{\n    typedef IPersistPropertyBag *LPPERSISTPROPERTYBAG;\n\n    HRESULT InitNew();\n\n    HRESULT Load(\n        [in] IPropertyBag *pPropBag,\n        [in] IErrorLog *pErrorLog);\n\n    HRESULT Save(\n        [in] IPropertyBag *pPropBag,\n        [in] BOOL fClearDirty,\n        [in] BOOL fSaveAllProperties);\n}\n\n\n/*****************************************************************************\n * IPropertyBag2 interface\n */\n[\n    object,\n    uuid(22f55882-280b-11d0-a8a9-00a0c90c2004),\n    pointer_default(unique)\n]\ninterface IPropertyBag2 : IUnknown\n{\n    typedef IPropertyBag2 *LPPROPERTYBAG2;\n\n    typedef enum tagPROPBAG2_TYPE\n    {\n        PROPBAG2_TYPE_UNDEFINED = 0,\n        PROPBAG2_TYPE_DATA = 1,\n        PROPBAG2_TYPE_URL = 2,\n        PROPBAG2_TYPE_OBJECT = 3,\n        PROPBAG2_TYPE_STREAM = 4,\n        PROPBAG2_TYPE_STORAGE = 5,\n        PROPBAG2_TYPE_MONIKER = 6\n    } PROPBAG2_TYPE;\n\n    typedef struct tagPROPBAG2\n    {\n        DWORD dwType;\n        VARTYPE vt;\n        CLIPFORMAT cfType;\n        DWORD dwHint;\n        LPOLESTR pstrName;\n        CLSID clsid;\n    } PROPBAG2;\n\n    HRESULT Read(\n        [in] ULONG cProperties,\n        [in] PROPBAG2 *pPropBag,\n        [in] IErrorLog *pErrLog,\n        [out] VARIANT *pvarValue,\n        [out] HRESULT *phrError);\n\n    HRESULT Write(\n        [in] ULONG cProperties,\n        [in] PROPBAG2 *pPropBag,\n        [in] VARIANT *pvarValue);\n\n    HRESULT CountProperties(\n        [out] ULONG *pcProperties );\n\n    HRESULT GetPropertyInfo(\n        [in] ULONG iProperty,\n        [in] ULONG cProperties,\n        [out] PROPBAG2 *pPropBag,\n        [out] ULONG *pcProperties);\n\n    HRESULT LoadObject(\n        [in] LPCOLESTR pstrName,\n        [in] DWORD dwHint,\n        [in] IUnknown *pUnkObject,\n        [in] IErrorLog *pErrLog);\n}\n\n\n/*****************************************************************************\n * IPersistPropertyBag2 interface\n */\n[\n    object,\n    uuid(22f55881-280b-11d0-a8a9-00a0c90c2004),\n    pointer_default(unique)\n]\ninterface IPersistPropertyBag2 : IPersist\n{\n    typedef IPersistPropertyBag2 *LPPERSISTPROPERTYBAG2;\n\n    HRESULT InitNew();\n\n    HRESULT Load(\n        [in] IPropertyBag2 *pPropBag,\n        [in] IErrorLog *pErrorLog);\n\n    HRESULT Save(\n        [in] IPropertyBag2 *pPropBag,\n        [in] BOOL fClearDirty,\n        [in] BOOL fSaveAllProperties);\n\n    HRESULT IsDirty();\n}\n\n\n/*****************************************************************************\n * ISpecifyPropertyPages interface\n */\n[\n    object,\n    uuid(b196b28b-bab4-101a-b69c-00aa00341d07),\n    pointer_default(unique)\n]\ninterface ISpecifyPropertyPages : IUnknown\n{\n    typedef ISpecifyPropertyPages *LPSPECIFYPROPERTYPAGES;\n\n    typedef struct tagCAUUID\n    {\n\tULONG cElems;\n        [size_is(cElems)] GUID *pElems;\n    } CAUUID, *LPCAUUID;\n\n    HRESULT GetPages( [out] CAUUID *pPages );\n}\n\n\n/*****************************************************************************\n * IPerPropertyBrowsing interface\n */\n[\n    object,\n    uuid(376bd3aa-3845-101b-84ed-08002b2ec713),\n    pointer_default(unique)\n]\ninterface IPerPropertyBrowsing : IUnknown\n{\n    typedef IPerPropertyBrowsing *LPPERPROPERTYBROWSING;\n\n    typedef struct tagCALPOLESTR\n    {\n        ULONG cElems;\n        [size_is(cElems)] LPOLESTR *pElems;\n    } CALPOLESTR, *LPCALPOLESTR;\n\n    typedef struct tagCADWORD\n    {\n        ULONG cElems;\n        [size_is(cElems)] DWORD *pElems;\n    } CADWORD, *LPCADWORD;\n\n    HRESULT GetDisplayString(\n        [in] DISPID dispID,\n        [out] BSTR *pBstr);\n\n    HRESULT MapPropertyToPage(\n        [in] DISPID dispID,\n        [out] CLSID *pClsid);\n\n    HRESULT GetPredefinedStrings(\n        [in] DISPID dispID,\n        [out] CALPOLESTR *pCaStringsOut,\n        [out] CADWORD *pCaCookiesOut);\n\n    HRESULT GetPredefinedValue(\n        [in] DISPID dispID,\n        [in] DWORD dwCookie,\n        [out] VARIANT *pVarOut);\n}\n\n\n/*****************************************************************************\n * IAdviseSinkEx interface\n */\n[\n    object,\n    uuid(3af24290-0c96-11ce-a0cf-00aa00600ab8),\n    pointer_default(unique)\n]\ninterface IAdviseSinkEx : IAdviseSink\n{\n    typedef IAdviseSinkEx *LPADVISESINKEX;\n\n    [local]\n    void OnViewStatusChange( [in] DWORD dwViewStatus );\n\n    [call_as(OnViewStatusChange)]\n    HRESULT RemoteOnViewStatusChange( [in] DWORD dwViewStatus );\n}\n\n\n/*****************************************************************************\n * IPointerInactive interface\n */\n[\n    object,\n    uuid(55980ba0-35aa-11cf-b671-00aa004cd6d8),\n    pointer_default(unique)\n]\ninterface IPointerInactive : IUnknown\n{\n    typedef IPointerInactive *LPPOINTERINACTIVE;\n\n    HRESULT GetActivationPolicy(\n        [out] DWORD *pdwPolicy);\n\n    HRESULT OnInactiveMouseMove(\n        [in] LPCRECT pRectBounds,\n        [in] LONG x,\n        [in] LONG y,\n        [in] DWORD grfKeyState);\n\n    HRESULT OnInactiveSetCursor(\n        [in] LPCRECT pRectBounds,\n        [in] LONG x,\n        [in] LONG y,\n        [in] DWORD dwMouseMsg,\n        [in] BOOL fSetAlways);\n}\n\n\n/*****************************************************************************\n * IObjectWithSite interface\n */\n[\n    object,\n    uuid(fc4801a3-2ba9-11cf-a229-00aa003d7352),\n    pointer_default(unique)\n]\ninterface IObjectWithSite : IUnknown\n{\n    typedef IObjectWithSite *LPOBJECTWITHSITE;\n\n    HRESULT SetSite(\n        [in] IUnknown * pUnkSite);\n\n    HRESULT GetSite(\n        [in] REFIID riid, \n        [out, iid_is(riid)] PVOID *ppvSite);\n}\n\n\n/*****************************************************************************\n * IOleUndoUnit interface\n */\ninterface IOleUndoManager;  /* forward declaration */\n[\n    object,\n    uuid(894ad3b0-ef97-11ce-9bc9-00aa00608e01),\n    pointer_default(unique)\n]\ninterface IOleUndoUnit : IUnknown\n{\n    typedef IOleUndoUnit *LPOLEUNDOUNIT;\n\n    HRESULT Do( [in] IOleUndoManager *pUndoManager );\n    HRESULT GetDescription( [out] BSTR *pBstr );\n    HRESULT GetUnitType( [out] CLSID *pClsid, [out] LONG *plID );\n    HRESULT OnNextAdd();\n}\n\n\n/*****************************************************************************\n * IOleParentUndoUnit interface\n */\n[\n    object,\n    uuid(a1faf330-ef97-11ce-9bc9-00aa00608e01),\n    pointer_default(unique)\n]\ninterface IOleParentUndoUnit : IOleUndoUnit\n{\n    typedef IOleParentUndoUnit *LPOLEPARENTUNDOUNIT;\n\n    HRESULT Open( [in] IOleParentUndoUnit *pPUU );\n    HRESULT Close( [in] IOleParentUndoUnit *pPUU, [in] BOOL fCommit );\n    HRESULT Add( [in] IOleUndoUnit *pUU );\n    HRESULT FindUnit( [in] IOleUndoUnit *pUU );\n    HRESULT GetParentState( [out] DWORD *pdwState );\n}\n\n\n/*****************************************************************************\n * IEnumOleUndoUnits interface\n */\n[\n    object,\n    uuid(b3e7c340-ef97-11ce-9bc9-00aa00608e01),\n    pointer_default(unique)\n]\ninterface IEnumOleUndoUnits : IUnknown\n{\n    typedef IEnumOleUndoUnits *LPENUMOLEUNDOUNITS;\n\n    [local]\n    HRESULT Next(\n        [in] ULONG cElt,\n        [out, size_is(cElt), length_is(*pcEltFetched)] IOleUndoUnit **rgElt,\n        [out] ULONG *pcEltFetched);\n\n    [call_as(Next)]\n    HRESULT RemoteNext(\n        [in] ULONG cElt,\n        [out, size_is(cElt), length_is(*pcEltFetched)] IOleUndoUnit **rgElt,\n        [out] ULONG *pcEltFetched);\n\n    HRESULT Skip( [in] ULONG cElt );\n\n    HRESULT Reset();\n\n    HRESULT Clone( [out] IEnumOleUndoUnits **ppEnum );\n}\n\n\n/*****************************************************************************\n * IOleUndoManager interface\n */\n[\n    object,\n    uuid(d001f200-ef97-11ce-9bc9-00aa00608e01),\n    pointer_default(unique)\n]\ninterface IOleUndoManager : IUnknown\n{\ncpp_quote(\"#define SID_SOleUndoManager IID_IOleUndoManager\")\n    typedef IOleUndoManager *LPOLEUNDOMANAGER;\n\n    HRESULT Open( [in] IOleParentUndoUnit *pPUU );\n    HRESULT Close( [in] IOleParentUndoUnit *pPUU, [in] BOOL fCommit );\n    HRESULT Add( [in] IOleUndoUnit *pUU );\n    HRESULT GetOpenParentState( [out] DWORD *pdwState );\n    HRESULT DiscardFrom( [in] IOleUndoUnit *pUU );\n    HRESULT UndoTo( [in] IOleUndoUnit *pUU );\n    HRESULT RedoTo( [in] IOleUndoUnit *pUU );\n    HRESULT EnumUndoable( [out] IEnumOleUndoUnits **ppEnum );\n    HRESULT EnumRedoable( [out] IEnumOleUndoUnits **ppEnum );\n    HRESULT GetLastUndoDescription( [out] BSTR *pBstr );\n    HRESULT GetLastRedoDescription( [out] BSTR *pBstr );\n    HRESULT Enable( [in] BOOL fEnable );\n}\n\n\n/*****************************************************************************\n * IQuickActivate interface\n */\n[\n    object,\n    uuid(cf51ed10-62fe-11cf-bf86-00a0c9034836),\n    pointer_default(unique)\n]\ninterface IQuickActivate : IUnknown\n{\n    typedef IQuickActivate *LPQUICKACTIVATE;\n\n    typedef enum tagQACONTAINERFLAGS\n    {\n        QACONTAINER_SHOWHATCHING = 0x1,\n        QACONTAINER_SHOWGRABHANDLES = 0x2,\n        QACONTAINER_USERMODE = 0x4,\n        QACONTAINER_DISPLAYASDEFAULT = 0x8,\n        QACONTAINER_UIDEAD = 0x10,\n        QACONTAINER_AUTOCLIP = 0x20,\n        QACONTAINER_MESSAGEREFLECT = 0x40,\n        QACONTAINER_SUPPORTSMNEMONICS = 0x80\n    } QACONTAINERFLAGS;\n\n    typedef DWORD OLE_COLOR;\n    \n    typedef struct tagQACONTAINER\n    {\n        ULONG cbSize;\n        IOleClientSite *pClientSite;\n        IAdviseSinkEx *pAdviseSink;\n        IPropertyNotifySink *pPropertyNotifySink;\n        IUnknown *pUnkEventSink;\n        DWORD dwAmbientFlags;\n        OLE_COLOR colorFore;\n        OLE_COLOR colorBack;\n        IFont *pFont;\n        IOleUndoManager *pUndoMgr;\n        DWORD dwAppearance;\n        LONG lcid;\n        HPALETTE hpal;\n        IBindHost *pBindHost;\n        IOleControlSite *pOleControlSite;\n        IServiceProvider *pServiceProvider;\n    } QACONTAINER;\n\n    typedef struct tagQACONTROL\n    {\n        ULONG cbSize;\n        DWORD dwMiscStatus;\n        DWORD dwViewStatus;\n        DWORD dwEventCookie;\n        DWORD dwPropNotifyCookie;\n        DWORD dwPointerActivationPolicy;\n    } QACONTROL;\n\n    [local]\n    HRESULT QuickActivate(\n        [in] QACONTAINER *pQaContainer,\n        [in,out] QACONTROL *pQaControl);\n\n    [call_as(QuickActivate)]\n    HRESULT RemoteQuickActivate(\n        [in] QACONTAINER *pQaContainer,\n        [out] QACONTROL *pQaControl);\n\n    HRESULT SetContentExtent( [in] LPSIZEL pSizel );\n\n    HRESULT GetContentExtent( [out] LPSIZEL pSizel );\n}\n"
  },
  {
    "path": "wine/windows/ocmm.idl",
    "content": "/*\n * Copyright 2006 Matthew Kehrer\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"oleidl.idl\";\n\ncpp_quote(\"EXTERN_C const GUID NAMEDTIMER_DRAW;\")\n\n[\n    object,\n    uuid(3050F361-98B5-11CF-BB82-00AA00BDCE0B),\n    pointer_default(unique)\n]\ninterface ITimerSink : IUnknown\n{\n    HRESULT OnTimer([in] VARIANT vtimeAdvise);\n}\n\n\n[\n    object,\n    uuid(3050F360-98B5-11CF-BB82-00AA00BDCE0B),\n    pointer_default(unique)\n]\ninterface ITimer : IUnknown\n{\n    HRESULT Advise([in] VARIANT vtimeMin,\n                   [in] VARIANT vtimeMax,\n                   [in] VARIANT vtimeInterval,\n                   [in] DWORD dwFlags,\n                   [in] ITimerSink *pTimerSink,\n                   [out] DWORD *pdwCookie);\n\n    HRESULT Unadvise([in] DWORD dwCookie);\n\n    HRESULT Freeze([in] BOOL fFreeze);\n\n    HRESULT GetTime([out] VARIANT *pvtime);\n}\n\n\n[\n    object,\n    uuid(3050F35F-98B5-11CF-BB82-00AA00BDCE0B),\n    pointer_default(unique)\n]\ninterface ITimerService : IUnknown\n{\n    HRESULT CreateTimer([in] ITimer *pReferenceTimer,\n                        [out] ITimer **ppNewTimer);\n\n    HRESULT GetNamedTimer([in] REFGUID rguidName,\n                          [out] ITimer **ppTimer);\n\n    HRESULT SetNamedTimerReference([in] REFGUID rguidName,\n                                   [in] ITimer *pReferenceTimer);\n}\n\ncpp_quote(\"#define SID_STimerService IID_ITimerService\")\n"
  },
  {
    "path": "wine/windows/odbcinst.h",
    "content": "/*\n * Copyright (C) 2005 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_ODBCINST_H\n#define __WINE_ODBCINST_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include <sql.h>\n\n/* flags for Installer function requests */\n#define ODBC_INSTALL_INQUIRY \t1\n#define ODBC_INSTALL_COMPLETE\t2\n\n#define ODBC_INSTALL_DRIVER\t1\n#define ODBC_REMOVE_DRIVER\t2\n#define ODBC_CONFIG_DRIVER\t3\n#define ODBC_CONFIG_DRIVER_MAX  100\n\n#define ODBC_ADD_DSN            1\n#define ODBC_CONFIG_DSN         2\n#define ODBC_REMOVE_DSN         3\n#define ODBC_ADD_SYS_DSN        4\n#define ODBC_CONFIG_SYS_DSN     5\n#define ODBC_REMOVE_SYS_DSN     6\n#define ODBC_REMOVE_DEFAULT_DSN 7\n\n/* Mode values for SQLSetConfigMode/SQLGetConfigMode */\n#define ODBC_BOTH_DSN 0\n#define ODBC_USER_DSN 1\n#define ODBC_SYSTEM_DSN 2\n\n/* error values */\n#define ODBC_ERROR_GENERAL_ERR\t\t\t1\n#define ODBC_ERROR_INVALID_BUFF_LEN\t\t2\n#define ODBC_ERROR_INVALID_HWND\t\t\t3\n#define ODBC_ERROR_INVALID_STR\t\t\t4\n#define ODBC_ERROR_INVALID_REQUEST_TYPE\t\t5\n#define ODBC_ERROR_COMPONENT_NOT_FOUND\t\t6\n#define ODBC_ERROR_INVALID_NAME\t\t\t7\n#define ODBC_ERROR_INVALID_KEYWORD_VALUE\t8\n#define ODBC_ERROR_INVALID_DSN\t\t\t9\n#define ODBC_ERROR_INVALID_INF\t\t\t10\n#define ODBC_ERROR_REQUEST_FAILED\t\t11\n#define ODBC_ERROR_INVALID_PATH\t\t\t12\n#define ODBC_ERROR_LOAD_LIB_FAILED\t\t13\n#define ODBC_ERROR_INVALID_PARAM_SEQUENCE\t14\n#define ODBC_ERROR_INVALID_LOG_FILE\t\t15\n#define ODBC_ERROR_USER_CANCELED\t\t16\n#define ODBC_ERROR_USAGE_UPDATE_FAILED\t\t17\n#define ODBC_ERROR_CREATE_DSN_FAILED\t\t18\n#define ODBC_ERROR_WRITING_SYSINFO_FAILED\t19\n#define ODBC_ERROR_REMOVE_DSN_FAILED\t\t20\n#define ODBC_ERROR_OUT_OF_MEM\t\t\t21\n#define ODBC_ERROR_OUTPUT_STRING_TRUNCATED\t22\n\n\nBOOL WINAPI ODBCCPlApplet(LONG,LONG,LONG*,LONG*);\nBOOL WINAPI SQLConfigDataSource(HWND,WORD,LPCSTR,LPCSTR);\nBOOL WINAPI SQLConfigDataSourceW(HWND,WORD,LPCWSTR,LPCWSTR);\nBOOL WINAPI SQLConfigDriver(HWND,WORD,LPCSTR,LPCSTR,LPSTR,WORD,WORD*);\nBOOL WINAPI SQLConfigDriverW(HWND,WORD,LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*);\nBOOL WINAPI SQLCreateDataSource(HWND,LPCSTR);\nBOOL WINAPI SQLCreateDataSourceW(HWND,LPCWSTR);\nBOOL WINAPI SQLGetAvailableDrivers(LPCSTR,LPSTR,WORD,WORD*);\nBOOL WINAPI SQLGetAvailableDriversW(LPCWSTR,LPWSTR,WORD,WORD*);\nBOOL WINAPI SQLGetConfigMode(UWORD*);\nBOOL WINAPI SQLGetInstalledDrivers(LPSTR,WORD,WORD*);\nBOOL WINAPI SQLGetInstalledDriversW(LPWSTR,WORD,WORD*);\nint WINAPI SQLGetPrivateProfileString(LPCSTR,LPCSTR,LPCSTR,LPSTR,int,LPCSTR);\nint WINAPI SQLGetPrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,int,LPCWSTR);\nBOOL WINAPI SQLGetTranslator(HWND,LPSTR,WORD,WORD*,LPSTR,WORD,WORD*,DWORD*);\nBOOL WINAPI SQLGetTranslatorW(HWND,LPWSTR,WORD,WORD*,LPWSTR,WORD,WORD*,DWORD*);\nBOOL WINAPI SQLInstallDriver(LPCSTR,LPCSTR,LPSTR,WORD,WORD*);\nBOOL WINAPI SQLInstallDriverW(LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*);\nBOOL WINAPI SQLInstallDriverEx(LPCSTR,LPCSTR,LPSTR,WORD,WORD*,WORD,LPDWORD);\nBOOL WINAPI SQLInstallDriverExW(LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*,WORD,LPDWORD);\nBOOL WINAPI SQLInstallDriverManager(LPSTR,WORD,WORD*);\nBOOL WINAPI SQLInstallDriverManagerW(LPWSTR,WORD,WORD*);\nSQLRETURN WINAPI SQLInstallerError(WORD,DWORD*,LPSTR,WORD,WORD*);\nSQLRETURN WINAPI SQLInstallerErrorW(WORD,DWORD*,LPWSTR,WORD,WORD*);\nBOOL WINAPI SQLInstallODBC(HWND,LPCSTR,LPCSTR,LPCSTR);\nBOOL WINAPI SQLInstallODBCW(HWND,LPCWSTR,LPCWSTR,LPCWSTR);\nBOOL WINAPI SQLInstallTranslatorEx(LPCSTR,LPCSTR,LPSTR,WORD,WORD*,WORD,LPDWORD);\nBOOL WINAPI SQLInstallTranslatorExW(LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*,WORD,LPDWORD);\nBOOL WINAPI SQLInstallTranslator(LPCSTR,LPCSTR,LPCSTR,LPSTR,WORD,WORD*,WORD,LPDWORD);\nBOOL WINAPI SQLInstallTranslatorW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*,WORD,LPDWORD);\nBOOL WINAPI SQLManageDataSources(HWND hwnd);\nSQLRETURN WINAPI SQLPostInstallerError(DWORD,LPCSTR);\nSQLRETURN WINAPI SQLPostInstallerErrorW(DWORD,LPCWSTR);\nBOOL WINAPI SQLReadFileDSN(LPCSTR,LPCSTR,LPCSTR,LPSTR,WORD,WORD*);\nBOOL WINAPI SQLReadFileDSNW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*);\nBOOL WINAPI SQLRemoveDefaultDataSource(void);\nBOOL WINAPI SQLRemoveDriver(LPCSTR,BOOL,LPDWORD);\nBOOL WINAPI SQLRemoveDriverW(LPCWSTR,BOOL,LPDWORD);\nBOOL WINAPI SQLRemoveDriverManager(LPDWORD);\nBOOL WINAPI SQLRemoveDSNFromIni(LPCSTR);\nBOOL WINAPI SQLRemoveDSNFromIniW(LPCWSTR);\nBOOL WINAPI SQLRemoveTranslator(LPCSTR,LPDWORD);\nBOOL WINAPI SQLRemoveTranslatorW(LPCWSTR,LPDWORD);\nBOOL WINAPI SQLSetConfigMode(UWORD);\nBOOL WINAPI SQLValidDSN(LPCSTR);\nBOOL WINAPI SQLValidDSNW(LPCWSTR);\nBOOL WINAPI SQLWriteDSNToIni(LPCSTR,LPCSTR);\nBOOL WINAPI SQLWriteDSNToIniW(LPCWSTR,LPCWSTR);\nBOOL WINAPI SQLWriteFileDSN(LPCSTR,LPCSTR,LPCSTR,LPCSTR);\nBOOL WINAPI SQLWriteFileDSNW(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);\nBOOL WINAPI SQLWritePrivateProfileString(LPCSTR,LPCSTR,LPCSTR,LPCSTR);\nBOOL WINAPI SQLWritePrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /*__WINE_ODBCINST_H*/\n"
  },
  {
    "path": "wine/windows/ole2.h",
    "content": "/*\n * Declarations for OLE2\n *\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_OLE2_H\n#define __WINE_OLE2_H\n\n#include <winerror.h>\n#include <objbase.h>\n#include <oleauto.h>\n#include <oleidl.h>\n\nstruct tagMSG;\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n#define E_DRAW                  VIEW_E_DRAW\n#define DATA_E_FORMATETC        DV_E_FORMATETC\n\n#define OLEIVERB_PRIMARY            (__MSABI_LONG(0))\n#define OLEIVERB_SHOW               (__MSABI_LONG(-1))\n#define OLEIVERB_OPEN               (__MSABI_LONG(-2))\n#define OLEIVERB_HIDE               (__MSABI_LONG(-3))\n#define OLEIVERB_UIACTIVATE         (__MSABI_LONG(-4))\n#define OLEIVERB_INPLACEACTIVATE    (__MSABI_LONG(-5))\n#define OLEIVERB_DISCARDUNDOSTATE   (__MSABI_LONG(-6))\n#define OLEIVERB_PROPERTIES         (__MSABI_LONG(-7))\n\n#define EMBDHLP_INPROC_HANDLER  0x00000000\n#define EMBDHLP_INPROC_SERVER   0x00000001\n#define EMBDHLP_CREATENOW       0x00000000\n#define EMBDHLP_DELAYCREATE     0x00010000\n\n/*\n * API declarations\n */\nHRESULT     WINAPI RegisterDragDrop(HWND,LPDROPTARGET);\nHRESULT     WINAPI RevokeDragDrop(HWND);\nHRESULT     WINAPI DoDragDrop(LPDATAOBJECT,LPDROPSOURCE,DWORD,DWORD*);\nHRESULT  WINAPI OleLoadFromStream(IStream *pStm,REFIID iidInterface,void** ppvObj);\nHRESULT  WINAPI OleSaveToStream(IPersistStream *pPStm,IStream *pStm);\nHOLEMENU WINAPI OleCreateMenuDescriptor(HMENU hmenuCombined,LPOLEMENUGROUPWIDTHS lpMenuWidths);\nHRESULT   WINAPI OleDestroyMenuDescriptor(HOLEMENU hmenuDescriptor);\nHRESULT  WINAPI OleSetMenuDescriptor(HOLEMENU hmenuDescriptor,HWND hwndFrame,HWND hwndActiveObject,LPOLEINPLACEFRAME lpFrame,LPOLEINPLACEACTIVEOBJECT lpActiveObject);\n\nHRESULT WINAPI WriteClassStg(IStorage *pstg, REFCLSID rclsid);\nHRESULT WINAPI ReadClassStg(IStorage *pstg,CLSID *pclsid);\nHRESULT WINAPI WriteClassStm(IStream *pStm,REFCLSID rclsid);\nHRESULT WINAPI ReadClassStm(IStream *pStm,CLSID *pclsid);\n\n\nHRESULT     WINAPI OleSave(LPPERSISTSTORAGE pPS, LPSTORAGE pStg, BOOL fSameAsLoad);\nHRESULT     WINAPI OleRegGetUserType(REFCLSID clsid,\n\t\t\t\t     DWORD dwFormOfType,\n\t\t\t\t     LPOLESTR* pszUserType);\nHRESULT     WINAPI OleRegGetMiscStatus (REFCLSID clsid, DWORD dwAspect, DWORD* pdwStatus);\nHRESULT     WINAPI OleRegEnumFormatEtc (REFCLSID clsid,\n\t\t\t\t\tDWORD    dwDirection,\n\t\t\t\t\tLPENUMFORMATETC* ppenumFormatetc);\nHRESULT     WINAPI CreateStreamOnHGlobal (HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPSTREAM* ppstm);\nHRESULT     WINAPI GetHGlobalFromStream(LPSTREAM pstm, HGLOBAL* phglobal);\nHRESULT     WINAPI OleRegEnumVerbs (REFCLSID clsid, LPENUMOLEVERB* ppenum);\nBOOL        WINAPI OleIsRunning(LPOLEOBJECT pObject);\nHRESULT     WINAPI OleCreateLinkFromData(LPDATAOBJECT pSrcDataObj, REFIID riid,\n                DWORD renderopt, LPFORMATETC pFormatEtc,\n                LPOLECLIENTSITE pClientSite, LPSTORAGE pStg,\n                LPVOID* ppvObj);\nHRESULT     WINAPI OleSetContainedObject(LPUNKNOWN pUnknown, BOOL fContained);\nHRESULT     WINAPI OleNoteObjectVisible(LPUNKNOWN pUnknown, BOOL fVisible);\nHRESULT     WINAPI OleQueryLinkFromData(IDataObject* pSrcDataObject);\nHRESULT     WINAPI OleQueryCreateFromData(LPDATAOBJECT pSrcDataObject);\nHRESULT     WINAPI OleRun(LPUNKNOWN pUnknown);\nHRESULT     WINAPI OleDraw(LPUNKNOWN pUnknown, DWORD dwAspect, HDC hdcDraw, LPCRECT lprcBounds);\nVOID        WINAPI ReleaseStgMedium(LPSTGMEDIUM);\nHRESULT     WINAPI OleGetClipboard(IDataObject** ppDataObj);\nHRESULT     WINAPI OleIsCurrentClipboard(LPDATAOBJECT);\nHRESULT     WINAPI OleSetClipboard(LPDATAOBJECT);\nHRESULT     WINAPI OleCreateStaticFromData(LPDATAOBJECT pSrcDataObj, REFIID iid,\n                DWORD renderopt, LPFORMATETC pFormatEtc, LPOLECLIENTSITE pClientSite,\n                LPSTORAGE pStg, LPVOID* ppvObj);\nHRESULT     WINAPI ReadFmtUserTypeStg(LPSTORAGE pstg, CLIPFORMAT* pcf, LPOLESTR* lplpszUserType);\nHRESULT     WINAPI OleLoad(LPSTORAGE pStg, REFIID riid, LPOLECLIENTSITE pClientSite, LPVOID* ppvObj);\nHRESULT     WINAPI GetHGlobalFromILockBytes(LPLOCKBYTES plkbyt, HGLOBAL* phglobal);\nHRESULT     WINAPI CreateILockBytesOnHGlobal(HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPLOCKBYTES* pplkbyt);\nHRESULT     WINAPI CreateDataAdviseHolder(LPDATAADVISEHOLDER* ppDAHolder);\nHGLOBAL     WINAPI OleGetIconOfClass(REFCLSID rclsid, LPOLESTR lpszLabel, BOOL fUseTypeAsLabel);\nHGLOBAL     WINAPI OleGetIconOfFile(LPOLESTR lpszPath, BOOL fUseFileAsLabel);\nHGLOBAL     WINAPI OleMetafilePictFromIconAndLabel(HICON hIcon, LPOLESTR lpszLabel, LPOLESTR lpszSourceFile, UINT iIconIndex);\nHRESULT     WINAPI OleLockRunning(LPUNKNOWN pUnknown, BOOL fLock, BOOL fLastUnlockCloses);\nHRESULT     WINAPI OleCreateFromFile(REFCLSID rclsid, LPCOLESTR lpszFileName, REFIID riid,\n                DWORD renderopt, LPFORMATETC lpFormatEtc, LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj);\nHRESULT     WINAPI OleCreateFromFileEx(REFCLSID clsid, LPCOLESTR filename, REFIID iid, DWORD flags,\n                DWORD renderopt, ULONG num_fmts, DWORD *adv_flags, LPFORMATETC fmts, IAdviseSink *sink,\n                DWORD *conns, LPOLECLIENTSITE client_site, LPSTORAGE storage, LPVOID* obj);\nHRESULT     WINAPI OleCreateLink(LPMONIKER pmkLinkSrc, REFIID riid, DWORD renderopt, LPFORMATETC lpFormatEtc,\n                LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj);\nHRESULT     WINAPI OleCreate(REFCLSID rclsid, REFIID riid, DWORD renderopt, LPFORMATETC pFormatEtc, LPOLECLIENTSITE pClientSite,\n                LPSTORAGE pStg, LPVOID* ppvObj);\nHRESULT     WINAPI OleFlushClipboard(void);\nHRESULT     WINAPI GetConvertStg(LPSTORAGE pStg);\nHRESULT     WINAPI SetConvertStg(LPSTORAGE pStg, BOOL fConvert);\nBOOL        WINAPI IsAccelerator(HACCEL hAccel, int cAccelEntries, struct tagMSG* lpMsg, WORD* lpwCmd);\nHRESULT     WINAPI OleCreateLinkToFile(LPCOLESTR lpszFileName, REFIID riid, DWORD renderopt, LPFORMATETC lpFormatEtc,\n                LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj);\nHANDLE      WINAPI OleDuplicateData(HANDLE hSrc, CLIPFORMAT cfFormat, UINT uiFlags);\nHRESULT     WINAPI WriteFmtUserTypeStg(LPSTORAGE pstg, CLIPFORMAT cf, LPOLESTR lpszUserType);\nHRESULT     WINAPI OleTranslateAccelerator (LPOLEINPLACEFRAME lpFrame, LPOLEINPLACEFRAMEINFO lpFrameInfo, struct tagMSG* lpmsg);\nHRESULT     WINAPI OleCreateFromData(LPDATAOBJECT pSrcDataObj, REFIID riid, DWORD renderopt, LPFORMATETC pFormatEtc,\n                LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj);\nHRESULT     WINAPI OleCreateFromDataEx(LPDATAOBJECT pSrcDataObj, REFIID riid, DWORD dwFlags, DWORD renderopt, ULONG num_formats,\n                                       DWORD *adv_flags, LPFORMATETC fmts, IAdviseSink *sink, DWORD *conns,\n                                       LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj);\nHRESULT     WINAPI OleCreateDefaultHandler(REFCLSID  clsid,\n\t\t\t\t\t   LPUNKNOWN pUnkOuter,\n\t\t\t\t\t   REFIID    riid,\n\t\t\t\t\t   LPVOID*   ppvObj);\nHRESULT     WINAPI OleCreateEmbeddingHelper(REFCLSID  clsid,\n\t\t\t\t\t   LPUNKNOWN pUnkOuter,\n\t\t\t\t\t   DWORD     flags,\n\t\t\t\t\t   IClassFactory *pCF,\n\t\t\t\t\t   REFIID    riid,\n\t\t\t\t\t   LPVOID*   ppvObj);\nHRESULT     WINAPI CreateOleAdviseHolder (LPOLEADVISEHOLDER *ppOAHolder);\nHRESULT     WINAPI OleInitialize(LPVOID pvReserved);\nvoid        WINAPI OleUninitialize(void);\nBOOL        WINAPI IsValidInterface(LPUNKNOWN punk);\nDWORD       WINAPI OleBuildVersion(VOID);\n\n/*\n *  OLE version conversion declarations\n */\n\n\ntypedef struct _OLESTREAM* LPOLESTREAM;\ntypedef struct _OLESTREAMVTBL {\n\tDWORD\t(CALLBACK *Get)(LPOLESTREAM,LPSTR,DWORD);\n\tDWORD\t(CALLBACK *Put)(LPOLESTREAM,LPSTR,DWORD);\n} OLESTREAMVTBL;\ntypedef OLESTREAMVTBL*\tLPOLESTREAMVTBL;\ntypedef struct _OLESTREAM {\n\tLPOLESTREAMVTBL\tlpstbl;\n} OLESTREAM;\n\nHRESULT     WINAPI OleConvertOLESTREAMToIStorage( LPOLESTREAM lpolestream, LPSTORAGE pstg, const DVTARGETDEVICE* ptd);\nHRESULT     WINAPI OleConvertIStorageToOLESTREAM( LPSTORAGE pstg, LPOLESTREAM lpolestream);\n\nHRESULT     WINAPI OleDoAutoConvert( LPSTORAGE pStg, LPCLSID pClsidNew );\nHRESULT     WINAPI OleGetAutoConvert( REFCLSID clsidOld, LPCLSID pClsidNew );\nHRESULT     WINAPI OleSetAutoConvert( REFCLSID clsidOld, REFCLSID clsidNew );\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif  /* __WINE_OLE2_H */\n"
  },
  {
    "path": "wine/windows/ole2ver.h",
    "content": "/*\n * Version number info\n *\n * Copyright (C) 1999 Paul Quinn\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_OLE2VER_H\n#define __WINE_OLE2VER_H\n\n/*\n * other versions rmm/rup:\n * 23/639\n * 23/700\n * 23/730\n * 23/824\n *\n * Win98 SE original files:\n * COMPOBJ: CoBuildVersion 23/700\n * OLE2: OleBuildVersion -> COMPOBJ.CoBuildVersion\n * OLE32: CoBuildVersion and Ole~ 23/824\n *\n * We probably should reorganize the OLE version stuff, i.e.\n * use different values for every *BuildVersion function and Win version.\n */\n\n/* bad: we shouldn't make use of it that globally ! */\n#define rmm             23\n#define rup\t\t824\n\n#endif  /* __WINE_OLE2VER_H */\n"
  },
  {
    "path": "wine/windows/oleacc.idl",
    "content": "/*\n * Copyright (C) 2005 Dmitry Timoshkov\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\n\n#ifndef __WIDL__\n#define threading(model)\n#endif\n\ncpp_quote(\"#define NAVDIR_MIN        0\")\ncpp_quote(\"#define NAVDIR_UP         1\")\ncpp_quote(\"#define NAVDIR_DOWN       2\")\ncpp_quote(\"#define NAVDIR_LEFT       3\")\ncpp_quote(\"#define NAVDIR_RIGHT      4\")\ncpp_quote(\"#define NAVDIR_NEXT       5\")\ncpp_quote(\"#define NAVDIR_PREVIOUS   6\")\ncpp_quote(\"#define NAVDIR_FIRSTCHILD 7\")\ncpp_quote(\"#define NAVDIR_LASTCHILD  8\")\ncpp_quote(\"#define NAVDIR_MAX        9\")\n\ncpp_quote(\"#define ROLE_SYSTEM_TITLEBAR     1\")\ncpp_quote(\"#define ROLE_SYSTEM_MENUBAR      2\")\ncpp_quote(\"#define ROLE_SYSTEM_SCROLLBAR    3\")\ncpp_quote(\"#define ROLE_SYSTEM_GRIP         4\")\ncpp_quote(\"#define ROLE_SYSTEM_SOUND        5\")\ncpp_quote(\"#define ROLE_SYSTEM_CURSOR       6\")\ncpp_quote(\"#define ROLE_SYSTEM_CARET        7\")\ncpp_quote(\"#define ROLE_SYSTEM_ALERT        8\")\ncpp_quote(\"#define ROLE_SYSTEM_WINDOW       9\")\ncpp_quote(\"#define ROLE_SYSTEM_CLIENT       10\")\ncpp_quote(\"#define ROLE_SYSTEM_MENUPOPUP    11\")\ncpp_quote(\"#define ROLE_SYSTEM_MENUITEM     12\")\ncpp_quote(\"#define ROLE_SYSTEM_TOOLTIP      13\")\ncpp_quote(\"#define ROLE_SYSTEM_APPLICATION  14\")\ncpp_quote(\"#define ROLE_SYSTEM_DOCUMENT     15\")\ncpp_quote(\"#define ROLE_SYSTEM_PANE         16\")\ncpp_quote(\"#define ROLE_SYSTEM_CHART        17\")\ncpp_quote(\"#define ROLE_SYSTEM_DIALOG       18\")\ncpp_quote(\"#define ROLE_SYSTEM_BORDER       19\")\ncpp_quote(\"#define ROLE_SYSTEM_GROUPING     20\")\ncpp_quote(\"#define ROLE_SYSTEM_SEPARATOR    21\")\ncpp_quote(\"#define ROLE_SYSTEM_TOOLBAR      22\")\ncpp_quote(\"#define ROLE_SYSTEM_STATUSBAR    23\")\ncpp_quote(\"#define ROLE_SYSTEM_TABLE        24\")\ncpp_quote(\"#define ROLE_SYSTEM_COLUMNHEADER 25\")\ncpp_quote(\"#define ROLE_SYSTEM_ROWHEADER    26\")\ncpp_quote(\"#define ROLE_SYSTEM_COLUMN       27\")\ncpp_quote(\"#define ROLE_SYSTEM_ROW          28\")\ncpp_quote(\"#define ROLE_SYSTEM_CELL         29\")\ncpp_quote(\"#define ROLE_SYSTEM_LINK         30\")\ncpp_quote(\"#define ROLE_SYSTEM_HELPBALLOON  31\")\ncpp_quote(\"#define ROLE_SYSTEM_CHARACTER    32\")\ncpp_quote(\"#define ROLE_SYSTEM_LIST         33\")\ncpp_quote(\"#define ROLE_SYSTEM_LISTITEM     34\")\ncpp_quote(\"#define ROLE_SYSTEM_OUTLINE      35\")\ncpp_quote(\"#define ROLE_SYSTEM_OUTLINEITEM  36\")\ncpp_quote(\"#define ROLE_SYSTEM_PAGETAB      37\")\ncpp_quote(\"#define ROLE_SYSTEM_PROPERTYPAGE 38\")\ncpp_quote(\"#define ROLE_SYSTEM_INDICATOR    39\")\ncpp_quote(\"#define ROLE_SYSTEM_GRAPHIC      40\")\ncpp_quote(\"#define ROLE_SYSTEM_STATICTEXT   41\")\ncpp_quote(\"#define ROLE_SYSTEM_TEXT         42\")\ncpp_quote(\"#define ROLE_SYSTEM_PUSHBUTTON   43\")\ncpp_quote(\"#define ROLE_SYSTEM_CHECKBUTTON  44\")\ncpp_quote(\"#define ROLE_SYSTEM_RADIOBUTTON  45\")\ncpp_quote(\"#define ROLE_SYSTEM_COMBOBOX     46\")\ncpp_quote(\"#define ROLE_SYSTEM_DROPLIST     47\")\ncpp_quote(\"#define ROLE_SYSTEM_PROGRESSBAR  48\")\ncpp_quote(\"#define ROLE_SYSTEM_DIAL         49\")\ncpp_quote(\"#define ROLE_SYSTEM_HOTKEYFIELD  50\")\ncpp_quote(\"#define ROLE_SYSTEM_SLIDER       51\")\ncpp_quote(\"#define ROLE_SYSTEM_SPINBUTTON   52\")\ncpp_quote(\"#define ROLE_SYSTEM_DIAGRAM      53\")\ncpp_quote(\"#define ROLE_SYSTEM_ANIMATION    54\")\ncpp_quote(\"#define ROLE_SYSTEM_EQUATION     55\")\ncpp_quote(\"#define ROLE_SYSTEM_BUTTONDROPDOWN 56\")\ncpp_quote(\"#define ROLE_SYSTEM_BUTTONMENU   57\")\ncpp_quote(\"#define ROLE_SYSTEM_BUTTONDROPDOWNGRID 58\")\ncpp_quote(\"#define ROLE_SYSTEM_WHITESPACE   59\")\ncpp_quote(\"#define ROLE_SYSTEM_PAGETABLIST  60\")\ncpp_quote(\"#define ROLE_SYSTEM_CLOCK        61\")\ncpp_quote(\"#define ROLE_SYSTEM_SPLITBUTTON  62\")\ncpp_quote(\"#define ROLE_SYSTEM_IPADDRESS    63\")\ncpp_quote(\"#define ROLE_SYSTEM_OUTLINEBUTTON 64\")\n\ncpp_quote(\"#define SELFLAG_NONE            0x00\")\ncpp_quote(\"#define SELFLAG_TAKEFOCUS       0x01\")\ncpp_quote(\"#define SELFLAG_TAKESELECTION   0x02\")\ncpp_quote(\"#define SELFLAG_EXTENDSELECTION 0x04\")\ncpp_quote(\"#define SELFLAG_ADDSELECTION    0x08\")\ncpp_quote(\"#define SELFLAG_REMOVESELECTION 0x10\")\ncpp_quote(\"#define SELFLAG_VALID           0x1f\")\n\ncpp_quote(\"#ifndef STATE_SYSTEM_UNAVAILABLE\")\ncpp_quote(\"#define STATE_SYSTEM_NORMAL          0x00000000\")\ncpp_quote(\"#define STATE_SYSTEM_UNAVAILABLE     0x00000001\")\ncpp_quote(\"#define STATE_SYSTEM_SELECTED        0x00000002\")\ncpp_quote(\"#define STATE_SYSTEM_FOCUSED         0x00000004\")\ncpp_quote(\"#define STATE_SYSTEM_PRESSED         0x00000008\")\ncpp_quote(\"#define STATE_SYSTEM_CHECKED         0x00000010\")\ncpp_quote(\"#define STATE_SYSTEM_MIXED           0x00000020\")\ncpp_quote(\"#define STATE_SYSTEM_INDETERMINATE   STATE_SYSTEM_MIXED\")\ncpp_quote(\"#define STATE_SYSTEM_READONLY        0x00000040\")\ncpp_quote(\"#define STATE_SYSTEM_HOTTRACKED      0x00000080\")\ncpp_quote(\"#define STATE_SYSTEM_DEFAULT         0x00000100\")\ncpp_quote(\"#define STATE_SYSTEM_EXPANDED        0x00000200\")\ncpp_quote(\"#define STATE_SYSTEM_COLLAPSED       0x00000400\")\ncpp_quote(\"#define STATE_SYSTEM_BUSY            0x00000800\")\ncpp_quote(\"#define STATE_SYSTEM_FLOATING        0x00001000\")\ncpp_quote(\"#define STATE_SYSTEM_MARQUEED        0x00002000\")\ncpp_quote(\"#define STATE_SYSTEM_ANIMATED        0x00004000\")\ncpp_quote(\"#define STATE_SYSTEM_INVISIBLE       0x00008000\")\ncpp_quote(\"#define STATE_SYSTEM_OFFSCREEN       0x00010000\")\ncpp_quote(\"#define STATE_SYSTEM_SIZEABLE        0x00020000\")\ncpp_quote(\"#define STATE_SYSTEM_MOVEABLE        0x00040000\")\ncpp_quote(\"#define STATE_SYSTEM_SELFVOICING     0x00080000\")\ncpp_quote(\"#define STATE_SYSTEM_FOCUSABLE       0x00100000\")\ncpp_quote(\"#define STATE_SYSTEM_SELECTABLE      0x00200000\")\ncpp_quote(\"#define STATE_SYSTEM_LINKED          0x00400000\")\ncpp_quote(\"#define STATE_SYSTEM_TRAVERSED       0x00800000\")\ncpp_quote(\"#define STATE_SYSTEM_MULTISELECTABLE 0x01000000\")\ncpp_quote(\"#define STATE_SYSTEM_EXTSELECTABLE   0x02000000\")\ncpp_quote(\"#define STATE_SYSTEM_ALERT_LOW       0x04000000\")\ncpp_quote(\"#define STATE_SYSTEM_ALERT_MEDIUM    0x08000000\")\ncpp_quote(\"#define STATE_SYSTEM_ALERT_HIGH      0x10000000\")\ncpp_quote(\"#define STATE_SYSTEM_PROTECTED       0x20000000\")\ncpp_quote(\"#define STATE_SYSTEM_VALID           0x7FFFFFFF\")\ncpp_quote(\"#endif\")\ncpp_quote(\"#ifndef STATE_SYSTEM_HASPOPUP\")\ncpp_quote(\"#define STATE_SYSTEM_HASPOPUP        0x40000000\")\ncpp_quote(\"#endif\")\n\ntypedef GUID MSAAPROPID;\n\ntypedef enum AnnoScope\n{\n    ANNO_THIS,\n    ANNO_CONTAINER\n} AnnoScope;\n\n[\n    object,\n    hidden,\n    dual,\n    uuid(618736e0-3c3d-11cf-810c-00aa00389b71),\n    pointer_default(unique)\n]\ninterface IAccessible : IDispatch\n{\n    typedef [unique] IAccessible  *LPACCESSIBLE;\n    const long DISPID_ACC_PARENT     = -5000;\n    const long DISPID_ACC_CHILDCOUNT = -5001;\n    const long DISPID_ACC_CHILD      = -5002;\n    const long DISPID_ACC_NAME       = -5003;\n    const long DISPID_ACC_VALUE      = -5004;\n    const long DISPID_ACC_DESCRIPTION= -5005;\n    const long DISPID_ACC_ROLE       = -5006;\n    const long DISPID_ACC_STATE      = -5007;\n    const long DISPID_ACC_HELP       = -5008;\n    const long DISPID_ACC_HELPTOPIC  = -5009;\n    const long DISPID_ACC_KEYBOARDSHORTCUT = -5010;\n    const long DISPID_ACC_FOCUS      = -5011;\n    const long DISPID_ACC_SELECTION  = -5012;\n    const long DISPID_ACC_DEFAULTACTION = -5013;\n    const long DISPID_ACC_SELECT     = -5014;\n    const long DISPID_ACC_LOCATION   = -5015;\n    const long DISPID_ACC_NAVIGATE   = -5016;\n    const long DISPID_ACC_HITTEST    = -5017;\n    const long DISPID_ACC_DODEFAULTACTION = -5018;\n\n    [hidden, propget, id(DISPID_ACC_PARENT)] HRESULT accParent([out, retval]IDispatch** ppdispParent);\n    [hidden, propget, id(DISPID_ACC_CHILDCOUNT)] HRESULT accChildCount([out, retval] long* pcountChildren);\n    [hidden, propget, id(DISPID_ACC_CHILD)] HRESULT accChild([in] VARIANT varChildID, [out, retval]IDispatch **ppdispChild);\n    [hidden, propget, id(DISPID_ACC_NAME)] HRESULT accName([in, optional] VARIANT varID, [out, retval] BSTR* pszName);\n    [hidden, propget, id(DISPID_ACC_VALUE)] HRESULT accValue([in, optional] VARIANT varID, [out, retval] BSTR* pszValue);\n    [hidden, propget, id(DISPID_ACC_DESCRIPTION)] HRESULT accDescription([in, optional] VARIANT varID, [out, retval] BSTR *description);\n    [hidden, propget, id(DISPID_ACC_ROLE)] HRESULT accRole([in, optional] VARIANT varID, [out, retval] VARIANT *role);\n    [hidden, propget, id(DISPID_ACC_STATE)] HRESULT accState([in, optional] VARIANT varID, [out, retval] VARIANT *state);\n    [hidden, propget, id(DISPID_ACC_HELP)] HRESULT accHelp([in, optional] VARIANT varID, [out, retval] BSTR *help);\n    [hidden, propget, id(DISPID_ACC_HELPTOPIC)] HRESULT accHelpTopic([out] BSTR *helpfile, [in, optional] VARIANT varID, [out, retval] long* pidTopic);\n    [hidden, propget, id(DISPID_ACC_KEYBOARDSHORTCUT)] HRESULT accKeyboardShortcut([in, optional] VARIANT varID, [out, retval] BSTR *shortcut);\n    [hidden, propget, id(DISPID_ACC_FOCUS)] HRESULT accFocus([out, retval] VARIANT* pvarID);\n    [hidden, propget, id(DISPID_ACC_SELECTION)] HRESULT accSelection([out, retval] VARIANT* pvarID);\n    [hidden, propget, id(DISPID_ACC_DEFAULTACTION)] HRESULT accDefaultAction([in, optional] VARIANT varID, [out, retval] BSTR *action);\n\n    [hidden, id(DISPID_ACC_SELECT)] HRESULT accSelect([in] long flagsSelect, [in, optional] VARIANT varID);\n    [hidden, id(DISPID_ACC_LOCATION)] HRESULT accLocation([out] long *left, [out] long *top, [out] long *width, [out] long *height, [in, optional] VARIANT varID);\n    [hidden, id(DISPID_ACC_NAVIGATE)] HRESULT accNavigate([in] long dir, [in, optional] VARIANT varStart, [out, retval] VARIANT *pvarEnd);\n    [hidden, id(DISPID_ACC_HITTEST)] HRESULT accHitTest([in] long left, [in] long top, [out, retval] VARIANT *pvarID);\n    [hidden, id(DISPID_ACC_DODEFAULTACTION)] HRESULT accDoDefaultAction([in, optional] VARIANT varID);\n\n    [hidden, propput, id(DISPID_ACC_NAME)] HRESULT accName([in, optional] VARIANT varID, [in] BSTR name);\n    [hidden, propput, id(DISPID_ACC_VALUE)] HRESULT accValue([in, optional] VARIANT varID, [in] BSTR value);\n}\n\n[\n    object,\n    uuid(03022430-ABC4-11d0-BDE2-00AA001A1953),\n    hidden,\n    oleautomation,\n    pointer_default(unique)\n]\ninterface IAccessibleHandler : IUnknown\n{\n    typedef [unique] IAccessibleHandler *LPACCESSIBLEHANDLER;\n\n    HRESULT AccessibleObjectFromID( [in] long hwnd, [in] long lObjectID, [out] LPACCESSIBLE *pIAccessible );\n}\n\n[\n    object,\n    uuid(7852b78d-1cfd-41c1-a615-9c0c85960b5f),\n    pointer_default(unique)\n]\ninterface IAccIdentity : IUnknown\n{\n    HRESULT GetIdentityString([in] DWORD idchild,\n                              [out, size_is(,*string_len)] BYTE **str,\n                              [out] DWORD *string_len);\n}\n\n[\n    object,\n    uuid(76c0dbbb-15e0-4e7b-b61b-20eeea2001e0),\n    pointer_default(unique)\n]\ninterface IAccPropServer: IUnknown\n{\n    HRESULT GetPropValue([in, size_is(string_len)] const BYTE *str,\n                         [in] DWORD string_len,\n                         [in] MSAAPROPID idProp,\n                         [out] VARIANT *value,\n                         [out] BOOL *has_prop);\n}\n\n[\n    object,\n    uuid(6e26e776-04f0-495d-80e4-3330352e3169),\n    pointer_default(unique)\n]\ninterface IAccPropServices : IUnknown\n{\n    HRESULT SetPropValue([in, size_is(string_len)] const BYTE *str,\n                         [in] DWORD string_len,\n                         [in] MSAAPROPID idProp,\n                         [in] VARIANT var);\n\n    HRESULT SetPropServer([in, size_is(string_len)] const BYTE *str,\n                          [in] DWORD string_len,\n                          [in, size_is(cProps)] const MSAAPROPID *props,\n                          [in] int cProps,\n                          [in] IAccPropServer* pServer,\n                          [in] AnnoScope AnnoScope);\n\n    HRESULT ClearProps([in, size_is(string_len)] const BYTE *str,\n                       [in] DWORD string_len,\n                       [in, size_is(cProps)] const MSAAPROPID *props,\n                       [in] int cProps);\n\n    HRESULT SetHwndProp([in] HWND hwnd, [in] DWORD idObject, [in] DWORD idChild,\n                    [in] MSAAPROPID idProp, [in] VARIANT var);\n\n    HRESULT SetHwndPropStr([in] HWND hwnd, [in] DWORD idObject, [in] DWORD idChild,\n                    [in] MSAAPROPID idProp, [in, string] LPWSTR str);\n\n    HRESULT SetHwndPropServer([in] HWND hwnd,\n                              [in] DWORD idObject,\n                              [in] DWORD idChild,\n                              [in, size_is(cProps)] const MSAAPROPID *props,\n                              [in] int cProps,\n                              [in] IAccPropServer *server,\n                              [in] AnnoScope scope);\n\n    HRESULT ClearHwndProps([in] HWND hwnd,\n                           [in] DWORD idObject,\n                           [in] DWORD idChild,\n                           [in, size_is(cProps)] const MSAAPROPID *props,\n                           [in] int cProps);\n\n    HRESULT ComposeHwndIdentityString([in] HWND hwnd,\n                                      [in] DWORD idObject,\n                                      [in] DWORD idChild,\n                                      [out, size_is(,*string_len)] BYTE **str,\n                                      [out] DWORD *string_len);\n\n    HRESULT DecomposeHwndIdentityString([in, size_is(string_len)] const BYTE *str,\n                                        [in] DWORD string_len,\n                                        [out] HWND *phwnd,\n                                        [out] DWORD *pidObject,\n                                        [out] DWORD *pidChild);\n\n    HRESULT SetHmenuProp([in] HMENU hmenu, [in] DWORD idChild, [in] MSAAPROPID idProp, [in] VARIANT var);\n\n    HRESULT SetHmenuPropStr([in] HMENU hmenu, [in] DWORD idChild, [in] MSAAPROPID idProp, [in, string] LPWSTR str);\n\n    HRESULT SetHmenuPropServer([in] HMENU hmenu,\n                               [in] DWORD idChild,\n                               [in, size_is(cProps)] const MSAAPROPID *props,\n                               [in] int cProps,\n                               [in] IAccPropServer *server,\n                               [in] AnnoScope scope);\n\n    HRESULT ClearHmenuProps([in] HMENU hmenu,\n                            [in] DWORD idChild,\n                            [in, size_is(cProps)] const MSAAPROPID *props,\n                            [in] int cProps);\n\n    HRESULT ComposeHmenuIdentityString([in] HMENU hmenu,\n                                       [in] DWORD idChild,\n                                       [out, size_is(,*string_len)] BYTE **str,\n                                       [out] DWORD *string_len);\n\n    HRESULT DecomposeHmenuIdentityString([in, size_is(string_len)] const BYTE *str,\n                                         [in] DWORD string_len,\n                                         [out] HMENU *phmenu,\n                                         [out] DWORD *pidChild);\n}\n\n[\n    uuid(1ea4dbf0-3c3b-11cf-810c-00aa00389b71),\n    lcid(0),\n    version(1.1),\n    hidden\n]\nlibrary Accessibility\n{\n    importlib (\"stdole2.tlb\");\n    interface IAccessible;\n    interface IAccessibleHandler;\n\n    interface IAccIdentity;\n    interface IAccPropServer;\n    interface IAccPropServices;\n\n    [\n        uuid(b5f8350b-0548-48b1-a6ee-88bd00b4a5e7),\n        threading(apartment)\n    ]\n    coclass CAccPropServices\n    {\n        interface IAccPropServices;\n    }\n}\n\ncpp_quote(\"DEFINE_GUID(CLSID_AccPropServices, 0xb5f8350b, 0x0548, 0x48b1, 0xa6, 0xee, 0x88, 0xbd, 0x00, 0xb4, 0xa5, 0xe7);\")\ncpp_quote(\"DEFINE_GUID(IIS_IsOleaccProxy, 0x902697fa, 0x80e4, 0x4560, 0x80, 0x2a, 0xa1, 0x3f, 0x22, 0xa6, 0x47, 0x09);\")\n\ncpp_quote(\"LRESULT WINAPI LresultFromObject(REFIID,WPARAM,LPUNKNOWN);\")\ncpp_quote(\"HRESULT WINAPI ObjectFromLresult(LRESULT,REFIID,WPARAM,void **);\")\ncpp_quote(\"HRESULT WINAPI WindowFromAccessibleObject(IAccessible *,HWND *);\")\ncpp_quote(\"HRESULT WINAPI AccessibleObjectFromWindow(HWND,DWORD,REFIID,void **);\")\ncpp_quote(\"HRESULT WINAPI AccessibleObjectFromEvent(HWND,DWORD,DWORD,IAccessible **,VARIANT *);\")\ncpp_quote(\"HRESULT WINAPI AccessibleObjectFromPoint(POINT,IAccessible **,VARIANT *);\")\ncpp_quote(\"HRESULT WINAPI AccessibleChildren(IAccessible *,LONG,LONG,VARIANT *,LONG *);\")\n\ncpp_quote(\"void WINAPI GetOleaccVersionInfo(DWORD *,DWORD *);\")\ncpp_quote(\"HRESULT WINAPI CreateStdAccessibleObject(HWND,LONG,REFIID,void **);\")\ncpp_quote(\"HRESULT WINAPI CreateStdAccessibleProxyA(HWND,LPCSTR,LONG,REFIID,void **);\")\ncpp_quote(\"HRESULT WINAPI CreateStdAccessibleProxyW(HWND,LPCWSTR,LONG,REFIID,void **);\")\ncpp_quote(\"#define CreateStdAccessibleProxy WINELIB_NAME_AW(CreateStdAccessibleProxy)\")\n\ncpp_quote(\"UINT WINAPI GetRoleTextA(DWORD,LPSTR,UINT);\")\ncpp_quote(\"UINT WINAPI GetRoleTextW(DWORD,LPWSTR,UINT);\")\ncpp_quote(\"#define GetRoleText WINELIB_NAME_AW(GetRoleText)\")\ncpp_quote(\"UINT WINAPI GetStateTextA(DWORD,LPSTR,UINT);\")\ncpp_quote(\"UINT WINAPI GetStateTextW(DWORD,LPWSTR,UINT);\")\ncpp_quote(\"#define GetStateText WINELIB_NAME_AW(GetStateText)\")\n"
  },
  {
    "path": "wine/windows/oleauto.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_OLEAUTO_H\n#define __WINE_OLEAUTO_H\n\n#include <oaidl.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nDEFINE_OLEGUID(IID_StdOle, 0x00020430,0,0);\n\n#define STDOLE_MAJORVERNUM  1\n#define STDOLE_MINORVERNUM  0\n#define STDOLE_LCID         0\n\n#define STDOLE2_MAJORVERNUM 2\n#define STDOLE2_MINORVERNUM 0\n#define STDOLE2_LCID        0\n\nULONG WINAPI OaBuildVersion(void);\n\n/* BSTR functions */\nBSTR WINAPI SysAllocString(const OLECHAR*);\nBSTR WINAPI SysAllocStringByteLen(LPCSTR,UINT);\nBSTR WINAPI SysAllocStringLen(const OLECHAR*,UINT);\nvoid WINAPI SysFreeString(BSTR);\nINT  WINAPI SysReAllocString(LPBSTR,const OLECHAR*);\nint  WINAPI SysReAllocStringLen(BSTR*,const OLECHAR*,UINT);\nUINT WINAPI SysStringByteLen(BSTR);\nUINT WINAPI SysStringLen(BSTR);\n\n/* IErrorInfo helpers */\nHRESULT WINAPI SetErrorInfo(ULONG,IErrorInfo*);\nHRESULT WINAPI GetErrorInfo(ULONG,IErrorInfo**);\nHRESULT WINAPI CreateErrorInfo(ICreateErrorInfo**);\n\n/* SafeArray functions */\nSAFEARRAY* WINAPI SafeArrayCreate(VARTYPE,UINT,SAFEARRAYBOUND*);\nSAFEARRAY* WINAPI SafeArrayCreateEx(VARTYPE,UINT,SAFEARRAYBOUND*,LPVOID);\nSAFEARRAY* WINAPI SafeArrayCreateVector(VARTYPE,LONG,ULONG);\nSAFEARRAY* WINAPI SafeArrayCreateVectorEx(VARTYPE,LONG,ULONG,LPVOID);\n\nHRESULT WINAPI SafeArrayAllocDescriptor(UINT,SAFEARRAY**);\nHRESULT WINAPI SafeArrayAllocDescriptorEx(VARTYPE,UINT,SAFEARRAY**);\nHRESULT WINAPI SafeArrayAllocData(SAFEARRAY*);\nHRESULT WINAPI SafeArrayDestroyDescriptor(SAFEARRAY*);\nHRESULT WINAPI SafeArrayPutElement(SAFEARRAY*,LONG*,void*);\nHRESULT WINAPI SafeArrayGetElement(SAFEARRAY*,LONG*,void*);\nHRESULT WINAPI SafeArrayLock(SAFEARRAY*);\nHRESULT WINAPI SafeArrayUnlock(SAFEARRAY*);\nHRESULT WINAPI SafeArrayGetUBound(SAFEARRAY*,UINT,LONG*);\nHRESULT WINAPI SafeArrayGetLBound(SAFEARRAY*,UINT,LONG*);\nUINT    WINAPI SafeArrayGetDim(SAFEARRAY*);\nUINT    WINAPI SafeArrayGetElemsize(SAFEARRAY*);\nHRESULT WINAPI SafeArrayGetVartype(SAFEARRAY*,VARTYPE*);\nHRESULT WINAPI SafeArrayAccessData(SAFEARRAY*,void**);\nHRESULT WINAPI SafeArrayUnaccessData(SAFEARRAY*);\nHRESULT WINAPI SafeArrayPtrOfIndex(SAFEARRAY*,LONG*,void **);\nHRESULT WINAPI SafeArrayCopyData(SAFEARRAY*,SAFEARRAY*);\nHRESULT WINAPI SafeArrayDestroyData(SAFEARRAY*);\nHRESULT WINAPI SafeArrayDestroy(SAFEARRAY*);\nHRESULT WINAPI SafeArrayCopy(SAFEARRAY*,SAFEARRAY**);\nHRESULT WINAPI SafeArrayRedim(SAFEARRAY*,SAFEARRAYBOUND*);\nHRESULT WINAPI SafeArraySetRecordInfo(SAFEARRAY*,IRecordInfo*);\nHRESULT WINAPI SafeArrayGetRecordInfo(SAFEARRAY*,IRecordInfo**);\nHRESULT WINAPI SafeArraySetIID(SAFEARRAY*,REFGUID);\nHRESULT WINAPI SafeArrayGetIID(SAFEARRAY*,GUID*);\n\nHRESULT WINAPI VectorFromBstr(BSTR,SAFEARRAY**);\nHRESULT WINAPI BstrFromVector(SAFEARRAY*,BSTR*);\n\n/* Object registration helpers */\n#define ACTIVEOBJECT_STRONG 0\n#define ACTIVEOBJECT_WEAK   1\n\nHRESULT WINAPI RegisterActiveObject(LPUNKNOWN,REFCLSID,DWORD,LPDWORD);\nHRESULT WINAPI RevokeActiveObject(DWORD,LPVOID);\nHRESULT WINAPI GetActiveObject(REFCLSID,LPVOID,LPUNKNOWN*);\n\n/* IRecordInfo helpers */\nHRESULT WINAPI GetRecordInfoFromTypeInfo(ITypeInfo*,IRecordInfo**);\nHRESULT WINAPI GetRecordInfoFromGuids(REFGUID,ULONG,ULONG,LCID,REFGUID,IRecordInfo**);\n\n/*\n * Variants\n */\n\n/* Macros for accessing the fields of the VARIANT type */\n#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION)\n#define V_VT(A)         ((A)->n1.n2.vt)\n#define V_UNION(A,B)    ((A)->n1.n2.n3.B)\n#define V_RECORD(A)     (V_UNION(A,brecVal).pvRecord)\n#define V_RECORDINFO(A) (V_UNION(A,brecVal).pRecInfo)\n#else\n#define V_VT(A)         ((A)->vt)\n#define V_UNION(A,B)    ((A)->B)\n#define V_RECORD(A)     ((A)->pvRecord)\n#define V_RECORDINFO(A) ((A)->pRecInfo)\n#endif\n\n#define V_ISBYREF(A)  (V_VT(A) & VT_BYREF)\n#define V_ISARRAY(A)  (V_VT(A) & VT_ARRAY)\n#define V_ISVECTOR(A) (V_VT(A) & VT_VECTOR)\n#define V_NONE(A)     V_I2(A)\n\n#define V_ARRAY(A)       V_UNION(A,parray)\n#define V_ARRAYREF(A)    V_UNION(A,pparray)\n#define V_BOOL(A)        V_UNION(A,boolVal)\n#define V_BOOLREF(A)     V_UNION(A,pboolVal)\n#define V_BSTR(A)        V_UNION(A,bstrVal)\n#define V_BSTRREF(A)     V_UNION(A,pbstrVal)\n#define V_BYREF(A)       V_UNION(A,byref)\n#define V_CY(A)          V_UNION(A,cyVal)\n#define V_CYREF(A)       V_UNION(A,pcyVal)\n#define V_DATE(A)        V_UNION(A,date)\n#define V_DATEREF(A)     V_UNION(A,pdate)\n#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION)\n#define V_DECIMAL(A)     ((A)->n1.decVal)\n#else\n#define V_DECIMAL(A)     ((A)->decVal)\n#endif\n#define V_DECIMALREF(A)  V_UNION(A,pdecVal)\n#define V_DISPATCH(A)    V_UNION(A,pdispVal)\n#define V_DISPATCHREF(A) V_UNION(A,ppdispVal)\n#define V_ERROR(A)       V_UNION(A,scode)\n#define V_ERRORREF(A)    V_UNION(A,pscode)\n#define V_I1(A)          V_UNION(A,cVal)\n#define V_I1REF(A)       V_UNION(A,pcVal)\n#define V_I2(A)          V_UNION(A,iVal)\n#define V_I2REF(A)       V_UNION(A,piVal)\n#define V_I4(A)          V_UNION(A,lVal)\n#define V_I4REF(A)       V_UNION(A,plVal)\n#define V_I8(A)          V_UNION(A,llVal)\n#define V_I8REF(A)       V_UNION(A,pllVal)\n#define V_INT(A)         V_UNION(A,intVal)\n#define V_INTREF(A)      V_UNION(A,pintVal)\n#ifdef _WIN64\n#define V_INT_PTR(A)     V_I8(A)\n#define V_INT_PTRREF(A)  V_I8REF(A)\n#else\n#define V_INT_PTR(A)     V_I4(A)\n#define V_INT_PTRREF(A)  V_I4REF(A)\n#endif\n#define V_R4(A)          V_UNION(A,fltVal)\n#define V_R4REF(A)       V_UNION(A,pfltVal)\n#define V_R8(A)          V_UNION(A,dblVal)\n#define V_R8REF(A)       V_UNION(A,pdblVal)\n#define V_UINT(A)        V_UNION(A,uintVal)\n#define V_UINTREF(A)     V_UNION(A,puintVal)\n#define V_UI1(A)         V_UNION(A,bVal)\n#define V_UI1REF(A)      V_UNION(A,pbVal)\n#define V_UI2(A)         V_UNION(A,uiVal)\n#define V_UI2REF(A)      V_UNION(A,puiVal)\n#define V_UI4(A)         V_UNION(A,ulVal)\n#define V_UI4REF(A)      V_UNION(A,pulVal)\n#define V_UI8(A)         V_UNION(A,ullVal)\n#define V_UI8REF(A)      V_UNION(A,pullVal)\n#ifdef _WIN64\n#define V_UINT_PTR(A)    V_UI8(A)\n#define V_UINT_PTRREF(A) V_UI8REF(A)\n#else\n#define V_UINT_PTR(A)    V_UI4(A)\n#define V_UINT_PTRREF(A) V_UI4REF(A)\n#endif\n#define V_UNKNOWN(A)     V_UNION(A,punkVal)\n#define V_UNKNOWNREF(A)  V_UNION(A,ppunkVal)\n#define V_VARIANTREF(A)  V_UNION(A,pvarVal)\n\nvoid    WINAPI VariantInit(VARIANT*);\nHRESULT WINAPI VariantClear(VARIANT*);\nHRESULT WINAPI VariantCopy(VARIANT*,VARIANT*);\nHRESULT WINAPI VariantCopyInd(VARIANT*,VARIANT*);\nHRESULT WINAPI VariantChangeType(VARIANT*,VARIANT*,USHORT,VARTYPE);\nHRESULT WINAPI VariantChangeTypeEx(VARIANT*,VARIANT*,LCID,USHORT,VARTYPE);\n\n/* VariantChangeType/VariantChangeTypeEx flags */\n#define VARIANT_NOVALUEPROP        0x01 /* Don't get the default value property from IDispatch */\n#define VARIANT_ALPHABOOL          0x02 /* Coerce to \"True\"|\"False\" instead of \"-1\"|\"0\" */\n#define VARIANT_NOUSEROVERRIDE     0x04 /* Pass LOCALE_NOUSEROVERRIDE to low level conversions */\n#define VARIANT_CALENDAR_HIJRI     0x08 /* Use the Hijri calendar */\n#define VARIANT_LOCALBOOL          0x10 /* Like VARIANT_ALPHABOOL, but use localised text */\n#define VARIANT_CALENDAR_THAI      0x20 /* Use the Thai buddhist calendar */\n#define VARIANT_CALENDAR_GREGORIAN 0x40 /* Use the Gregorian calendar */\n#define VARIANT_USE_NLS            0x80 /* Format result using NLS calls */\n\n/*\n * Low level Variant coercion functions\n */\n\n#define VT_HARDTYPE VT_RESERVED /* Don't coerce this variant when comparing it to others */\n\n/* Flags for low level coercions. LOCALE_ flags can also be passed */\n#define VAR_TIMEVALUEONLY       0x001 /* Ignore date portion of VT_DATE */\n#define VAR_DATEVALUEONLY       0x002 /* Ignore time portion of VT_DATE */\n#define VAR_VALIDDATE           0x004\n#define VAR_CALENDAR_HIJRI      0x008 /* Use the Hijri calendar */\n#define VAR_LOCALBOOL           0x010 /* VT_BOOL<->VT_BSTR: Use localised boolean text */\n#define VAR_FORMAT_NOSUBSTITUTE 0x020 /* Don't change format strings for un-coercable types */\n#define VAR_FOURDIGITYEARS      0x040 /* Always print years with 4 digits */\n#define VAR_CALENDAR_THAI       0x080 /* Use the Thai buddhist calendar */\n#define VAR_CALENDAR_GREGORIAN  0x100 /* Use the Gregorian calendar */\n\n#ifndef LOCALE_USE_NLS\n/* This is missing from native winnls.h, but may be added at some point */\n#define LOCALE_USE_NLS          0x10000000\n#endif\n\n#define VTDATEGRE_MIN -657434 /* Minimum possible Gregorian date: 1/1/100 */\n#define VTDATEGRE_MAX 2958465 /* Maximum possible Gregorian date: 31/12/9999 */\n\nHRESULT WINAPI VarUI1FromI2(SHORT,BYTE*);\nHRESULT WINAPI VarUI1FromI4(LONG,BYTE*);\nHRESULT WINAPI VarUI1FromI8(LONG64,BYTE*);\nHRESULT WINAPI VarUI1FromR4(FLOAT,BYTE*);\nHRESULT WINAPI VarUI1FromR8(DOUBLE,BYTE*);\nHRESULT WINAPI VarUI1FromDate(DATE,BYTE*);\nHRESULT WINAPI VarUI1FromBool(VARIANT_BOOL,BYTE*);\nHRESULT WINAPI VarUI1FromI1(signed char,BYTE*);\nHRESULT WINAPI VarUI1FromUI2(USHORT,BYTE*);\nHRESULT WINAPI VarUI1FromUI4(ULONG,BYTE*);\nHRESULT WINAPI VarUI1FromUI8(ULONG64,BYTE*);\nHRESULT WINAPI VarUI1FromStr(OLECHAR*,LCID,ULONG,BYTE*);\nHRESULT WINAPI VarUI1FromCy(CY,BYTE*);\nHRESULT WINAPI VarUI1FromDec(DECIMAL*,BYTE*);\nHRESULT WINAPI VarUI1FromDisp(IDispatch*,LCID,BYTE*);\n\nHRESULT WINAPI VarI2FromUI1(BYTE,SHORT*);\nHRESULT WINAPI VarI2FromI4(LONG,SHORT*);\nHRESULT WINAPI VarI2FromI8(LONG64,SHORT*);\nHRESULT WINAPI VarI2FromR4(FLOAT,SHORT*);\nHRESULT WINAPI VarI2FromR8(DOUBLE,SHORT*);\nHRESULT WINAPI VarI2FromDate(DATE,SHORT*);\nHRESULT WINAPI VarI2FromBool(VARIANT_BOOL,SHORT*);\nHRESULT WINAPI VarI2FromI1(signed char,SHORT*);\nHRESULT WINAPI VarI2FromUI2(USHORT,SHORT*);\nHRESULT WINAPI VarI2FromUI4(ULONG,SHORT*);\nHRESULT WINAPI VarI2FromUI8(ULONG64,SHORT*);\nHRESULT WINAPI VarI2FromStr(OLECHAR*,LCID,ULONG,SHORT*);\nHRESULT WINAPI VarI2FromCy(CY,SHORT*);\nHRESULT WINAPI VarI2FromDec(DECIMAL*,SHORT*);\nHRESULT WINAPI VarI2FromDisp(IDispatch*,LCID,SHORT*);\n\nHRESULT WINAPI VarI4FromUI1(BYTE,LONG*);\nHRESULT WINAPI VarI4FromI2(SHORT,LONG*);\nHRESULT WINAPI VarI4FromI8(LONG64,LONG*);\nHRESULT WINAPI VarI4FromR4(FLOAT,LONG*);\nHRESULT WINAPI VarI4FromR8(DOUBLE,LONG*);\nHRESULT WINAPI VarI4FromDate(DATE,LONG*);\nHRESULT WINAPI VarI4FromBool(VARIANT_BOOL,LONG*);\nHRESULT WINAPI VarI4FromI1(signed char,LONG*);\nHRESULT WINAPI VarI4FromUI2(USHORT,LONG*);\nHRESULT WINAPI VarI4FromUI4(ULONG,LONG*);\nHRESULT WINAPI VarI4FromUI8(ULONG64,LONG*);\nHRESULT WINAPI VarI4FromStr(OLECHAR*,LCID,ULONG,LONG*);\nHRESULT WINAPI VarI4FromCy(CY,LONG*);\nHRESULT WINAPI VarI4FromDec(DECIMAL*,LONG*);\nHRESULT WINAPI VarI4FromDisp(IDispatch*,LCID,LONG*);\n\nHRESULT WINAPI VarI8FromUI1(BYTE,LONG64*);\nHRESULT WINAPI VarI8FromI2(SHORT,LONG64*);\nHRESULT WINAPI VarI8FromI4(LONG,LONG64*);\nHRESULT WINAPI VarI8FromR4(FLOAT,LONG64*);\nHRESULT WINAPI VarI8FromR8(DOUBLE,LONG64*);\nHRESULT WINAPI VarI8FromDate(DATE,LONG64*);\nHRESULT WINAPI VarI8FromStr(OLECHAR*,LCID,ULONG,LONG64*);\nHRESULT WINAPI VarI8FromBool(VARIANT_BOOL,LONG64*);\nHRESULT WINAPI VarI8FromI1(signed char,LONG64*);\nHRESULT WINAPI VarI8FromUI2(USHORT,LONG64*);\nHRESULT WINAPI VarI8FromUI4(ULONG,LONG64*);\nHRESULT WINAPI VarI8FromUI8(ULONG64,LONG64*);\nHRESULT WINAPI VarI8FromDec(DECIMAL *pdecIn,LONG64*);\nHRESULT WINAPI VarI8FromInt(INT intIn,LONG64*);\nHRESULT WINAPI VarI8FromCy(CY,LONG64*);\nHRESULT WINAPI VarI8FromDisp(IDispatch*,LCID,LONG64*);\n\nHRESULT WINAPI VarR4FromUI1(BYTE,FLOAT*);\nHRESULT WINAPI VarR4FromI2(SHORT,FLOAT*);\nHRESULT WINAPI VarR4FromI4(LONG,FLOAT*);\nHRESULT WINAPI VarR4FromI8(LONG64,FLOAT*);\nHRESULT WINAPI VarR4FromR8(DOUBLE,FLOAT*);\nHRESULT WINAPI VarR4FromDate(DATE,FLOAT*);\nHRESULT WINAPI VarR4FromBool(VARIANT_BOOL,FLOAT*);\nHRESULT WINAPI VarR4FromI1(signed char,FLOAT*);\nHRESULT WINAPI VarR4FromUI2(USHORT,FLOAT*);\nHRESULT WINAPI VarR4FromUI4(ULONG,FLOAT*);\nHRESULT WINAPI VarR4FromUI8(ULONG64,FLOAT*);\nHRESULT WINAPI VarR4FromStr(OLECHAR*,LCID,ULONG,FLOAT*);\nHRESULT WINAPI VarR4FromCy(CY,FLOAT*);\nHRESULT WINAPI VarR4FromDec(DECIMAL*,FLOAT*);\nHRESULT WINAPI VarR4FromDisp(IDispatch*,LCID,FLOAT*);\n\nHRESULT WINAPI VarR8FromUI1(BYTE,double*);\nHRESULT WINAPI VarR8FromI2(SHORT,double*);\nHRESULT WINAPI VarR8FromI4(LONG,double*);\nHRESULT WINAPI VarR8FromI8(LONG64,double*);\nHRESULT WINAPI VarR8FromR4(FLOAT,double*);\nHRESULT WINAPI VarR8FromDate(DATE,double*);\nHRESULT WINAPI VarR8FromBool(VARIANT_BOOL,double*);\nHRESULT WINAPI VarR8FromI1(signed char,double*);\nHRESULT WINAPI VarR8FromUI2(USHORT,double*);\nHRESULT WINAPI VarR8FromUI4(ULONG,double*);\nHRESULT WINAPI VarR8FromUI8(ULONG64,double*);\nHRESULT WINAPI VarR8FromStr(OLECHAR*,LCID,ULONG,double*);\nHRESULT WINAPI VarR8FromCy(CY,double*);\nHRESULT WINAPI VarR8FromDec(const DECIMAL*,double*);\nHRESULT WINAPI VarR8FromDisp(IDispatch*,LCID,double*);\n\nHRESULT WINAPI VarDateFromUI1(BYTE,DATE*);\nHRESULT WINAPI VarDateFromI2(SHORT,DATE*);\nHRESULT WINAPI VarDateFromI4(LONG,DATE*);\nHRESULT WINAPI VarDateFromI8(LONG64,DATE*);\nHRESULT WINAPI VarDateFromR4(FLOAT,DATE*);\nHRESULT WINAPI VarDateFromR8(DOUBLE,DATE*);\nHRESULT WINAPI VarDateFromStr(OLECHAR*,LCID,ULONG,DATE*);\nHRESULT WINAPI VarDateFromI1(signed char,DATE*);\nHRESULT WINAPI VarDateFromUI2(USHORT,DATE*);\nHRESULT WINAPI VarDateFromUI4(ULONG,DATE*);\nHRESULT WINAPI VarDateFromUI8(ULONG64,DATE*);\nHRESULT WINAPI VarDateFromBool(VARIANT_BOOL,DATE*);\nHRESULT WINAPI VarDateFromCy(CY,DATE*);\nHRESULT WINAPI VarDateFromDec(DECIMAL*,DATE*);\nHRESULT WINAPI VarDateFromDisp(IDispatch*,LCID,DATE*);\n\nHRESULT WINAPI VarCyFromUI1(BYTE,CY*);\nHRESULT WINAPI VarCyFromI2(SHORT sIn,CY*);\nHRESULT WINAPI VarCyFromI4(LONG,CY*);\nHRESULT WINAPI VarCyFromI8(LONG64,CY*);\nHRESULT WINAPI VarCyFromR4(FLOAT,CY*);\nHRESULT WINAPI VarCyFromR8(DOUBLE,CY*);\nHRESULT WINAPI VarCyFromDate(DATE,CY*);\nHRESULT WINAPI VarCyFromStr(OLECHAR*,LCID,ULONG,CY*);\nHRESULT WINAPI VarCyFromBool(VARIANT_BOOL,CY*);\nHRESULT WINAPI VarCyFromI1(signed char,CY*);\nHRESULT WINAPI VarCyFromUI2(USHORT,CY*);\nHRESULT WINAPI VarCyFromUI4(ULONG,CY*);\nHRESULT WINAPI VarCyFromUI8(ULONG64,CY*);\nHRESULT WINAPI VarCyFromDec(DECIMAL*,CY*);\nHRESULT WINAPI VarCyFromDisp(IDispatch*,LCID,CY*);\n\nHRESULT WINAPI VarBstrFromUI1(BYTE,LCID,ULONG,BSTR*);\nHRESULT WINAPI VarBstrFromI2(SHORT,LCID,ULONG,BSTR*);\nHRESULT WINAPI VarBstrFromI4(LONG,LCID,ULONG,BSTR*);\nHRESULT WINAPI VarBstrFromI8(LONG64,LCID,ULONG,BSTR*);\nHRESULT WINAPI VarBstrFromR4(FLOAT,LCID,ULONG,BSTR*);\nHRESULT WINAPI VarBstrFromR8(DOUBLE,LCID,ULONG,BSTR*);\nHRESULT WINAPI VarBstrFromDate(DATE,LCID,ULONG,BSTR*);\nHRESULT WINAPI VarBstrFromBool(VARIANT_BOOL,LCID,ULONG,BSTR*);\nHRESULT WINAPI VarBstrFromI1(signed char,LCID,ULONG,BSTR*);\nHRESULT WINAPI VarBstrFromUI2(USHORT,LCID,ULONG,BSTR*);\nHRESULT WINAPI VarBstrFromUI8(ULONG64,LCID,ULONG,BSTR*);\nHRESULT WINAPI VarBstrFromUI4(ULONG,LCID,ULONG,BSTR*);\nHRESULT WINAPI VarBstrFromCy(CY,LCID,ULONG,BSTR*);\nHRESULT WINAPI VarBstrFromDec(DECIMAL*,LCID,ULONG,BSTR*);\nHRESULT WINAPI VarBstrFromDisp(IDispatch*,LCID,ULONG,BSTR*);\n\nHRESULT WINAPI VarBoolFromUI1(BYTE,VARIANT_BOOL*);\nHRESULT WINAPI VarBoolFromI2(SHORT,VARIANT_BOOL*);\nHRESULT WINAPI VarBoolFromI4(LONG,VARIANT_BOOL*);\nHRESULT WINAPI VarBoolFromI8(LONG64,VARIANT_BOOL*);\nHRESULT WINAPI VarBoolFromR4(FLOAT,VARIANT_BOOL*);\nHRESULT WINAPI VarBoolFromR8(DOUBLE,VARIANT_BOOL*);\nHRESULT WINAPI VarBoolFromDate(DATE,VARIANT_BOOL*);\nHRESULT WINAPI VarBoolFromStr(OLECHAR*,LCID,ULONG,VARIANT_BOOL*);\nHRESULT WINAPI VarBoolFromI1(signed char,VARIANT_BOOL*);\nHRESULT WINAPI VarBoolFromUI2(USHORT,VARIANT_BOOL*);\nHRESULT WINAPI VarBoolFromUI4(ULONG,VARIANT_BOOL*);\nHRESULT WINAPI VarBoolFromUI8(ULONG64,VARIANT_BOOL*);\nHRESULT WINAPI VarBoolFromCy(CY,VARIANT_BOOL*);\nHRESULT WINAPI VarBoolFromDec(DECIMAL*,VARIANT_BOOL*);\nHRESULT WINAPI VarBoolFromDisp(IDispatch*,LCID,VARIANT_BOOL*);\n\nHRESULT WINAPI VarI1FromUI1(BYTE,signed char*);\nHRESULT WINAPI VarI1FromI2(SHORT,signed char*);\nHRESULT WINAPI VarI1FromI4(LONG,signed char*);\nHRESULT WINAPI VarI1FromI8(LONG64,signed char*);\nHRESULT WINAPI VarI1FromR4(FLOAT,signed char*);\nHRESULT WINAPI VarI1FromR8(DOUBLE,signed char*);\nHRESULT WINAPI VarI1FromDate(DATE,signed char*);\nHRESULT WINAPI VarI1FromStr(OLECHAR*,LCID,ULONG,signed char*);\nHRESULT WINAPI VarI1FromBool(VARIANT_BOOL,signed char*);\nHRESULT WINAPI VarI1FromUI2(USHORT,signed char*);\nHRESULT WINAPI VarI1FromUI4(ULONG,signed char*);\nHRESULT WINAPI VarI1FromUI8(ULONG64,signed char*);\nHRESULT WINAPI VarI1FromCy(CY,signed char*);\nHRESULT WINAPI VarI1FromDec(DECIMAL*,signed char*);\nHRESULT WINAPI VarI1FromDisp(IDispatch*,LCID,signed char*);\n\nHRESULT WINAPI VarUI2FromUI1(BYTE,USHORT*);\nHRESULT WINAPI VarUI2FromI2(SHORT,USHORT*);\nHRESULT WINAPI VarUI2FromI4(LONG,USHORT*);\nHRESULT WINAPI VarUI2FromI8(LONG64,USHORT*);\nHRESULT WINAPI VarUI2FromR4(FLOAT,USHORT*);\nHRESULT WINAPI VarUI2FromR8(DOUBLE,USHORT*);\nHRESULT WINAPI VarUI2FromDate(DATE,USHORT*);\nHRESULT WINAPI VarUI2FromStr(OLECHAR*,LCID,ULONG,USHORT*);\nHRESULT WINAPI VarUI2FromBool(VARIANT_BOOL,USHORT*);\nHRESULT WINAPI VarUI2FromI1(signed char,USHORT*);\nHRESULT WINAPI VarUI2FromUI4(ULONG,USHORT*);\nHRESULT WINAPI VarUI2FromUI8(ULONG64,USHORT*);\nHRESULT WINAPI VarUI2FromCy(CY,USHORT*);\nHRESULT WINAPI VarUI2FromDec(DECIMAL*,USHORT*);\nHRESULT WINAPI VarUI2FromDisp(IDispatch*,LCID,USHORT*);\n\nHRESULT WINAPI VarUI4FromStr(OLECHAR*,LCID,ULONG,ULONG*);\nHRESULT WINAPI VarUI4FromUI1(BYTE,ULONG*);\nHRESULT WINAPI VarUI4FromI2(SHORT,ULONG*);\nHRESULT WINAPI VarUI4FromI4(LONG,ULONG*);\nHRESULT WINAPI VarUI4FromI8(LONG64,ULONG*);\nHRESULT WINAPI VarUI4FromR4(FLOAT,ULONG*);\nHRESULT WINAPI VarUI4FromR8(DOUBLE,ULONG*);\nHRESULT WINAPI VarUI4FromDate(DATE,ULONG*);\nHRESULT WINAPI VarUI4FromBool(VARIANT_BOOL,ULONG*);\nHRESULT WINAPI VarUI4FromI1(signed char,ULONG*);\nHRESULT WINAPI VarUI4FromUI2(USHORT,ULONG*);\nHRESULT WINAPI VarUI4FromUI8(ULONG64,ULONG*);\nHRESULT WINAPI VarUI4FromCy(CY,ULONG*);\nHRESULT WINAPI VarUI4FromDec(DECIMAL*,ULONG*);\nHRESULT WINAPI VarUI4FromDisp(IDispatch*,LCID,ULONG*);\n\nHRESULT WINAPI VarUI8FromUI1(BYTE,ULONG64*);\nHRESULT WINAPI VarUI8FromI2(SHORT,ULONG64*);\nHRESULT WINAPI VarUI8FromI4(LONG,ULONG64*);\nHRESULT WINAPI VarUI8FromI8(LONG64,ULONG64*);\nHRESULT WINAPI VarUI8FromR4(FLOAT,ULONG64*);\nHRESULT WINAPI VarUI8FromR8(DOUBLE,ULONG64*);\nHRESULT WINAPI VarUI8FromDate(DATE,ULONG64*);\nHRESULT WINAPI VarUI8FromStr(OLECHAR*,LCID,ULONG,ULONG64*);\nHRESULT WINAPI VarUI8FromBool(VARIANT_BOOL,ULONG64*);\nHRESULT WINAPI VarUI8FromI1(signed char,ULONG64*);\nHRESULT WINAPI VarUI8FromUI2(USHORT,ULONG64*);\nHRESULT WINAPI VarUI8FromUI4(ULONG,ULONG64*);\nHRESULT WINAPI VarUI8FromDec(DECIMAL*,ULONG64*);\nHRESULT WINAPI VarUI8FromInt(INT,ULONG64*);\nHRESULT WINAPI VarUI8FromCy(CY,ULONG64*);\nHRESULT WINAPI VarUI8FromDisp(IDispatch*,LCID,ULONG64*);\n\nHRESULT WINAPI VarDecFromUI1(BYTE,DECIMAL*);\nHRESULT WINAPI VarDecFromI2(SHORT,DECIMAL*);\nHRESULT WINAPI VarDecFromI4(LONG,DECIMAL*);\nHRESULT WINAPI VarDecFromI8(LONG64,DECIMAL*);\nHRESULT WINAPI VarDecFromR4(FLOAT,DECIMAL*);\nHRESULT WINAPI VarDecFromR8(DOUBLE,DECIMAL*);\nHRESULT WINAPI VarDecFromDate(DATE,DECIMAL*);\nHRESULT WINAPI VarDecFromStr(OLECHAR*,LCID,ULONG,DECIMAL*);\nHRESULT WINAPI VarDecFromBool(VARIANT_BOOL,DECIMAL*);\nHRESULT WINAPI VarDecFromI1(signed char,DECIMAL*);\nHRESULT WINAPI VarDecFromUI2(USHORT,DECIMAL*);\nHRESULT WINAPI VarDecFromUI4(ULONG,DECIMAL*);\nHRESULT WINAPI VarDecFromUI8(ULONG64,DECIMAL*);\nHRESULT WINAPI VarDecFromCy(CY,DECIMAL*);\nHRESULT WINAPI VarDecFromDisp(IDispatch*,LCID,DECIMAL*);\n\n#define VarUI4FromUI4( in,pOut ) ( *(pOut) =  (in) )\n#define VarI4FromI4( in,pOut )   ( *(pOut) =  (in) )\n\n#define VarUI1FromInt   VarUI1FromI4\n#define VarUI1FromUint  VarUI1FromUI4\n#define VarI2FromInt    VarI2FromI4\n#define VarI2FromUint   VarI2FromUI4\n#define VarI4FromInt    VarI4FromI4\n#define VarI4FromUint   VarI4FromUI4\n#define VarI8FromInt    VarI8FromI4\n#define VarI8FromUint   VarI8FromUI4\n#define VarR4FromInt    VarR4FromI4\n#define VarR4FromUint   VarR4FromUI4\n#define VarR8FromInt    VarR8FromI4\n#define VarR8FromUint   VarR8FromUI4\n#define VarDateFromInt  VarDateFromI4\n#define VarDateFromUint VarDateFromUI4\n#define VarCyFromInt    VarCyFromI4\n#define VarCyFromUint   VarCyFromUI4\n#define VarBstrFromInt  VarBstrFromI4\n#define VarBstrFromUint VarBstrFromUI4\n#define VarBoolFromInt  VarBoolFromI4\n#define VarBoolFromUint VarBoolFromUI4\n#define VarI1FromInt    VarI1FromI4\n#define VarI1FromUint   VarI1FromUI4\n#define VarUI2FromInt   VarUI2FromI4\n#define VarUI2FromUint  VarUI2FromUI4\n#define VarUI4FromInt   VarUI4FromI4\n#define VarUI4FromUint  VarUI4FromUI4\n#define VarUI8FromInt   VarUI8FromI4\n#define VarUI8FromUint  VarUI8FromUI4\n#define VarDecFromInt   VarDecFromI4\n#define VarDecFromUint  VarDecFromUI4\n#define VarIntFromUI1   VarI4FromUI1\n#define VarIntFromI2    VarI4FromI2\n#define VarIntFromI4    VarI4FromI4\n#define VarIntFromI8    VarI4FromI8\n#define VarIntFromR4    VarI4FromR4\n#define VarIntFromR8    VarI4FromR8\n#define VarIntFromDate  VarI4FromDate\n#define VarIntFromCy    VarI4FromCy\n#define VarIntFromStr   VarI4FromStr\n#define VarIntFromDisp  VarI4FromDisp\n#define VarIntFromBool  VarI4FromBool\n#define VarIntFromI1    VarI4FromI1\n#define VarIntFromUI2   VarI4FromUI2\n#define VarIntFromUI4   VarI4FromUI4\n#define VarIntFromUI8   VarI4FromUI8\n#define VarIntFromDec   VarI4FromDec\n#define VarIntFromUint  VarI4FromUI4\n#define VarUintFromUI1  VarUI4FromUI1\n#define VarUintFromI2   VarUI4FromI2\n#define VarUintFromI4   VarUI4FromI4\n#define VarUintFromI8   VarUI4FromI8\n#define VarUintFromR4   VarUI4FromR4\n#define VarUintFromR8   VarUI4FromR8\n#define VarUintFromDate VarUI4FromDate\n#define VarUintFromCy   VarUI4FromCy\n#define VarUintFromStr  VarUI4FromStr\n#define VarUintFromDisp VarUI4FromDisp\n#define VarUintFromBool VarUI4FromBool\n#define VarUintFromI1   VarUI4FromI1\n#define VarUintFromUI2  VarUI4FromUI2\n#define VarUintFromUI4  VarUI4FromUI4\n#define VarUintFromUI8  VarUI4FromUI8\n#define VarUintFromDec  VarUI4FromDec\n#define VarUintFromInt  VarUI4FromI4\n\n/*\n * Variant Math operations\n */\n#define VARCMP_LT   0\n#define VARCMP_EQ   1\n#define VARCMP_GT   2\n#define VARCMP_NULL 3\n\nHRESULT WINAPI VarR4CmpR8(float,double);\n\nHRESULT WINAPI VarR8Pow(double,double,double*);\nHRESULT WINAPI VarR8Round(double,int,double*);\n\nHRESULT WINAPI VarDecAbs(const DECIMAL*,DECIMAL*);\nHRESULT WINAPI VarDecAdd(const DECIMAL*,const DECIMAL*,DECIMAL*);\nHRESULT WINAPI VarDecCmp(const DECIMAL*,const DECIMAL*);\nHRESULT WINAPI VarDecCmpR8(const DECIMAL*,DOUBLE);\nHRESULT WINAPI VarDecDiv(const DECIMAL*,const DECIMAL*,DECIMAL*);\nHRESULT WINAPI VarDecFix(const DECIMAL*,DECIMAL*);\nHRESULT WINAPI VarDecInt(const DECIMAL*,DECIMAL*);\nHRESULT WINAPI VarDecMul(const DECIMAL*,const DECIMAL*,DECIMAL*);\nHRESULT WINAPI VarDecNeg(const DECIMAL*,DECIMAL*);\nHRESULT WINAPI VarDecRound(const DECIMAL*,int,DECIMAL*);\nHRESULT WINAPI VarDecSub(const DECIMAL*,const DECIMAL*,DECIMAL*);\n\nHRESULT WINAPI VarCyAbs(CY,CY*);\nHRESULT WINAPI VarCyAdd(CY,CY,CY*);\nHRESULT WINAPI VarCyCmp(CY,CY);\nHRESULT WINAPI VarCyCmpR8(CY,DOUBLE);\nHRESULT WINAPI VarCyFix(CY,CY*);\nHRESULT WINAPI VarCyInt(CY,CY*);\nHRESULT WINAPI VarCyMul(CY,CY,CY*);\nHRESULT WINAPI VarCyMulI4(CY,LONG,CY*);\nHRESULT WINAPI VarCyMulI8(CY,LONG64,CY*);\nHRESULT WINAPI VarCyNeg(CY,CY*);\nHRESULT WINAPI VarCyRound(CY,INT,CY*);\nHRESULT WINAPI VarCySub(CY,CY,CY*);\n\nHRESULT WINAPI VarAdd(LPVARIANT,LPVARIANT,LPVARIANT);\nHRESULT WINAPI VarAnd(LPVARIANT,LPVARIANT,LPVARIANT);\nHRESULT WINAPI VarCat(LPVARIANT,LPVARIANT,LPVARIANT);\nHRESULT WINAPI VarDiv(LPVARIANT,LPVARIANT,LPVARIANT);\nHRESULT WINAPI VarEqv(LPVARIANT,LPVARIANT,LPVARIANT);\nHRESULT WINAPI VarIdiv(LPVARIANT,LPVARIANT,LPVARIANT);\nHRESULT WINAPI VarImp(LPVARIANT,LPVARIANT,LPVARIANT);\nHRESULT WINAPI VarMod(LPVARIANT,LPVARIANT,LPVARIANT);\nHRESULT WINAPI VarMul(LPVARIANT,LPVARIANT,LPVARIANT);\nHRESULT WINAPI VarOr(LPVARIANT,LPVARIANT,LPVARIANT);\nHRESULT WINAPI VarPow(LPVARIANT,LPVARIANT,LPVARIANT);\nHRESULT WINAPI VarSub(LPVARIANT,LPVARIANT,LPVARIANT);\nHRESULT WINAPI VarXor(LPVARIANT,LPVARIANT,LPVARIANT);\n\nHRESULT WINAPI VarAbs(LPVARIANT,LPVARIANT);\nHRESULT WINAPI VarFix(LPVARIANT,LPVARIANT);\nHRESULT WINAPI VarInt(LPVARIANT,LPVARIANT);\nHRESULT WINAPI VarNeg(LPVARIANT,LPVARIANT);\nHRESULT WINAPI VarNot(LPVARIANT,LPVARIANT);\n\nHRESULT WINAPI VarRound(LPVARIANT,int,LPVARIANT);\n\nHRESULT WINAPI VarCmp(LPVARIANT,LPVARIANT,LCID,ULONG);\n\nHRESULT WINAPI VarBstrCmp(BSTR,BSTR,LCID,ULONG);\nHRESULT WINAPI VarBstrCat(BSTR,BSTR,BSTR*);\n\n\ntypedef struct {\n    SYSTEMTIME st;\n    USHORT wDayOfYear;\n} UDATE;\n\ntypedef struct\n{\n    INT   cDig;       /* Number of parsed digits */\n    ULONG dwInFlags;  /* Acceptable state of the input string (NUMPRS_ flags) */\n    ULONG dwOutFlags; /* Parsed state of the output string (NUMPRS_ flags) */\n    INT   cchUsed;    /* Number of characters parsed from input string */\n    INT   nBaseShift; /* Base of the number (but apparently unused) */\n    INT   nPwr10;     /* Scale of the number in powers of 10 */\n} NUMPARSE;\n\n#define NUMPRS_LEADING_WHITE  0x00001 /* Leading whitespace */\n#define NUMPRS_TRAILING_WHITE 0x00002 /* Trailing whitespace */\n#define NUMPRS_LEADING_PLUS   0x00004 /* Leading '+' sign */\n#define NUMPRS_TRAILING_PLUS  0x00008 /* Trailing '+' sign */\n#define NUMPRS_LEADING_MINUS  0x00010 /* Leading '-' sign */\n#define NUMPRS_TRAILING_MINUS 0x00020 /* Trailing '-' sign */\n#define NUMPRS_HEX_OCT        0x00040 /* Octal number (with a leading 0) */\n#define NUMPRS_PARENS         0x00080 /* Parentheses for negative numbers */\n#define NUMPRS_DECIMAL        0x00100 /* Decimal separator */\n#define NUMPRS_THOUSANDS      0x00200 /* Thousands separator */\n#define NUMPRS_CURRENCY       0x00400 /* Currency symbol */\n#define NUMPRS_EXPONENT       0x00800 /* Exponent (e.g. \"e-14\") */\n#define NUMPRS_USE_ALL        0x01000 /* Parse the entire string */\n#define NUMPRS_STD            0x01FFF /* Standard flags for internal coercions (All of the above) */\n#define NUMPRS_NEG            0x10000 /* Number is negative (dwOutFlags only) */\n#define NUMPRS_INEXACT        0x20000 /* Number is represented inexactly (dwOutFlags only) */\n\n#define VTBIT_I1      (1 << VT_I1)\n#define VTBIT_UI1     (1 << VT_UI1)\n#define VTBIT_I2      (1 << VT_I2)\n#define VTBIT_UI2     (1 << VT_UI2)\n#define VTBIT_I4      (1 << VT_I4)\n#define VTBIT_UI4     (1 << VT_UI4)\n#define VTBIT_I8      (1 << VT_I8)\n#define VTBIT_UI8     (1 << VT_UI8)\n#define VTBIT_R4      (1 << VT_R4)\n#define VTBIT_R8      (1 << VT_R8)\n#define VTBIT_CY      (1 << VT_CY)\n#define VTBIT_DECIMAL (1 << VT_DECIMAL)\n\nHRESULT WINAPI VarParseNumFromStr(OLECHAR*,LCID,ULONG,NUMPARSE*,BYTE*);\nHRESULT WINAPI VarNumFromParseNum(NUMPARSE*,BYTE*,ULONG,VARIANT*);\n\nINT WINAPI DosDateTimeToVariantTime(USHORT,USHORT,double*);\nINT WINAPI VariantTimeToDosDateTime(double,USHORT*,USHORT*);\n\nINT WINAPI VariantTimeToSystemTime(DOUBLE,LPSYSTEMTIME);\nINT WINAPI SystemTimeToVariantTime(LPSYSTEMTIME,double*);\n\nHRESULT WINAPI VarDateFromUdate(UDATE*,ULONG,DATE*);\nHRESULT WINAPI VarDateFromUdateEx(UDATE*,LCID,ULONG,DATE*);\nHRESULT WINAPI VarUdateFromDate(DATE,ULONG,UDATE*);\n\n/* Variant formatting */\nHRESULT WINAPI VarWeekdayName(int,int,int,ULONG,BSTR*);\nHRESULT WINAPI VarMonthName(int,int,ULONG,BSTR*);\nHRESULT WINAPI GetAltMonthNames(LCID,LPOLESTR**);\n\nHRESULT WINAPI VarFormat(LPVARIANT,LPOLESTR,int,int,ULONG,BSTR*);\nHRESULT WINAPI VarFormatCurrency(LPVARIANT,int,int,int,int,ULONG,BSTR*);\nHRESULT WINAPI VarFormatDateTime(LPVARIANT,int,ULONG,BSTR*);\nHRESULT WINAPI VarFormatNumber(LPVARIANT,int,int,int,int,ULONG,BSTR*);\nHRESULT WINAPI VarFormatPercent(LPVARIANT,int,int,int,int,ULONG,BSTR*);\n\nHRESULT WINAPI VarFormatFromTokens(LPVARIANT,LPOLESTR,LPBYTE,ULONG,BSTR*,LCID);\nHRESULT WINAPI VarTokenizeFormatString(LPOLESTR,LPBYTE,int,int,int,LCID,int*);\n\n\n/*\n * IDispatch types and helper functions\n */\n\n/* A structure describing a single parameter to a com object method. */\ntypedef struct tagPARAMDATA\n{\n    OLECHAR *szName; /* Name of Parameter */\n    VARTYPE  vt;     /* Type of Parameter */\n} PARAMDATA, *LPPARAMDATA;\n\n/* A structure describing a single method of a com object. */\ntypedef struct tagMETHODDATA\n{\n    OLECHAR   *szName;   /* Name of method */\n    PARAMDATA *ppdata;   /* Parameters of the method */\n    DISPID     dispid;   /* Id of the method */\n    UINT       iMeth;    /* Vtable index of the method */\n    CALLCONV   cc;       /* Calling convention of the method */\n    UINT       cArgs;    /* Number of parameters in the method */\n    WORD       wFlags;   /* Type of the method (DISPATCH_ flags) */\n    VARTYPE    vtReturn; /* Type of the return value */\n} METHODDATA, *LPMETHODDATA;\n\n/* Structure describing a single com object */\ntypedef struct tagINTERFACEDATA\n{\n    METHODDATA *pmethdata;  /* Methods of the object */\n    UINT        cMembers;   /* Number of methods in the object */\n} INTERFACEDATA, *LPINTERFACEDATA;\n\ntypedef enum tagREGKIND\n{\n    REGKIND_DEFAULT,\n    REGKIND_REGISTER,\n    REGKIND_NONE\n} REGKIND;\n\nHRESULT WINAPI DispGetParam(DISPPARAMS*,UINT,VARTYPE,VARIANT*,UINT*);\nHRESULT WINAPI DispGetIDsOfNames(ITypeInfo*,OLECHAR**,UINT,DISPID*);\nHRESULT WINAPI DispInvoke(void*,ITypeInfo*,DISPID,WORD,DISPPARAMS*,VARIANT*,\n                          EXCEPINFO*,UINT*);\nHRESULT WINAPI CreateDispTypeInfo(INTERFACEDATA*,LCID,ITypeInfo**);\nHRESULT WINAPI CreateStdDispatch(IUnknown*,void*,ITypeInfo*,IUnknown**);\nHRESULT WINAPI DispCallFunc(void*,ULONG_PTR,CALLCONV,VARTYPE,UINT,VARTYPE*,\n                            VARIANTARG**,VARIANT*);\n\n\n/*\n * TypeLib API\n */\n\nULONG WINAPI LHashValOfNameSysA(SYSKIND,LCID,LPCSTR);\nULONG WINAPI LHashValOfNameSys(SYSKIND,LCID,LPCOLESTR);\n\n#define LHashValOfName(lcid,name) LHashValOfNameSys(SYS_WIN32,lcid,name)\n#define WHashValOfLHashVal(hash) ((USHORT)((hash) & 0xffff))\n#define IsHashValCompatible(hash1,hash2) ((hash1) & 0xff0000 == (hash2) & 0xff0000)\n\n#define MEMBERID_NIL   DISPID_UNKNOWN\n#define ID_DEFAULTINST -2\n\n#define DISPATCH_METHOD         0x1\n#define DISPATCH_PROPERTYGET    0x2\n#define DISPATCH_PROPERTYPUT    0x4\n#define DISPATCH_PROPERTYPUTREF 0x8\n\n#define LOAD_TLB_AS_32BIT       0x20\n#define LOAD_TLB_AS_64BIT       0x40\n#define MASK_TO_RESET_TLB_BITS  ~(LOAD_TLB_AS_32BIT|LOAD_TLB_AS_64BIT)\n\nHRESULT WINAPI CreateTypeLib(SYSKIND,const OLECHAR*,ICreateTypeLib**);\nHRESULT WINAPI CreateTypeLib2(SYSKIND,LPCOLESTR,ICreateTypeLib2**);\nHRESULT WINAPI LoadRegTypeLib(REFGUID,WORD,WORD,LCID,ITypeLib**);\nHRESULT WINAPI LoadTypeLib(const OLECHAR*,ITypeLib**);\nHRESULT WINAPI LoadTypeLibEx(LPCOLESTR,REGKIND,ITypeLib**);\nHRESULT WINAPI QueryPathOfRegTypeLib(REFGUID,WORD,WORD,LCID,LPBSTR);\nHRESULT WINAPI RegisterTypeLib(ITypeLib*,OLECHAR*,OLECHAR*);\nHRESULT WINAPI UnRegisterTypeLib(REFGUID,WORD,WORD,LCID,SYSKIND);\nHRESULT WINAPI RegisterTypeLibForUser(ITypeLib*,OLECHAR*,OLECHAR*);\nHRESULT WINAPI UnRegisterTypeLibForUser(REFGUID,WORD,WORD,LCID,SYSKIND);\n\nVOID WINAPI ClearCustData(LPCUSTDATA);\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif\n\n\n#endif /*__WINE_OLEAUTO_H*/\n"
  },
  {
    "path": "wine/windows/olectl.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_OLECTL_H\n#define __WINE_OLECTL_H\n\n#if !defined(__midl) && !defined(__WIDL__)\n\n#include <ocidl.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n\n/*\n * Ole Control Interfaces\n */\nDEFINE_GUID(CLSID_ConvertVBX,\n            0xfb8f0822,0x0164,0x101b,0x84,0xed,0x08,0x00,0x2b,0x2e,0xc7,0x13);\nDEFINE_GUID(CLSID_PersistPropset,\n            0xfb8f0821,0x0164,0x101b,0x84,0xed,0x08,0x00,0x2b,0x2e,0xc7,0x13);\n\nDEFINE_GUID(CLSID_StdFont,\n            0x0be35203,0x8f91,0x11ce,0x9d,0xe3,0x00,0xaa,0x00,0x4b,0xb8,0x51);\nDEFINE_GUID(CLSID_StdPicture,\n            0x0be35204,0x8f91,0x11ce,0x9d,0xe3,0x00,0xaa,0x00,0x4b,0xb8,0x51);\n\nDEFINE_GUID(IID_IPropertyFrame,\n            0xb196b28a,0xbab4,0x101a,0xb6,0x9c,0x00,0xaa,0x00,0x34,0x1d,0x07);\n\nDEFINE_GUID(CLSID_CFontPropPage,\n            0x0be35200,0x8f91,0x11ce,0x9d,0xe3,0x00,0xaa,0x00,0x4b,0xb8,0x51);\nDEFINE_GUID(CLSID_CColorPropPage,\n            0x0be35201,0x8f91,0x11ce,0x9d,0xe3,0x00,0xaa,0x00,0x4b,0xb8,0x51);\nDEFINE_GUID(CLSID_CPicturePropPage,\n            0x0be35202,0x8f91,0x11ce,0x9d,0xe3,0x00,0xaa,0x00,0x4b,0xb8,0x51);\n\nDEFINE_GUID(GUID_HIMETRIC,\n            0x66504300,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);\nDEFINE_GUID(GUID_COLOR,\n            0x66504301,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);\nDEFINE_GUID(GUID_XPOSPIXEL,\n            0x66504302,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);\nDEFINE_GUID(GUID_YPOSPIXEL,\n            0x66504303,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);\nDEFINE_GUID(GUID_XSIZEPIXEL,\n            0x66504304,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);\nDEFINE_GUID(GUID_YSIZEPIXEL,\n            0x66504305,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);\nDEFINE_GUID(GUID_XPOS,\n            0x66504306,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);\nDEFINE_GUID(GUID_YPOS,\n            0x66504307,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);\nDEFINE_GUID(GUID_XSIZE,\n            0x66504308,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);\nDEFINE_GUID(GUID_YSIZE,\n            0x66504309,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);\n\n#ifndef __CGUID_H__\nDEFINE_GUID(GUID_TRISTATE,\n            0x6650430a,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);\n#endif\n\nDEFINE_GUID(GUID_OPTIONVALUEEXCLUSIVE,\n            0x6650430b,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);\nDEFINE_GUID(GUID_CHECKVALUEEXCLUSIVE,\n            0x6650430c,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);\nDEFINE_GUID(GUID_FONTNAME,\n            0x6650430d,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);\nDEFINE_GUID(GUID_FONTSIZE,\n            0x6650430e,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);\nDEFINE_GUID(GUID_FONTBOLD,\n            0x6650430f,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);\nDEFINE_GUID(GUID_FONTITALIC,\n            0x66504310,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);\nDEFINE_GUID(GUID_FONTUNDERSCORE,\n            0x66504311,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);\nDEFINE_GUID(GUID_FONTSTRIKETHROUGH,\n            0x66504312,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);\nDEFINE_GUID(GUID_HANDLE,\n            0x66504313,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);\n\ntypedef struct tagOCPFIPARAMS\n{\n\tULONG cbStructSize;\n\tHWND hWndOwner;\n\tint x;\n\tint y;\n\tLPCOLESTR lpszCaption;\n\tULONG cObjects;\n\tLPUNKNOWN *lplpUnk;\n\tULONG cPages;\n\tCLSID *lpPages;\n\tLCID lcid;\n\tDISPID dispidInitialProperty;\n} OCPFIPARAMS, *LPOCPFIPARAMS;\n\n/*\n * FONTDESC is used as an OLE encapsulation of the GDI fonts\n */\ntypedef struct tagFONTDESC {\n  UINT     cbSizeofstruct;\n  LPOLESTR lpstrName;\n  CY         cySize;\n  SHORT      sWeight;\n  SHORT      sCharset;\n  BOOL     fItalic;\n  BOOL     fUnderline;\n  BOOL     fStrikethrough;\n} FONTDESC, *LPFONTDESC;\n\n#define FONTSIZE(n) { n##0000, 0 }\n\n#define PICTYPE_UNINITIALIZED (-1)\n#define PICTYPE_NONE          0\n#define PICTYPE_BITMAP        1\n#define PICTYPE_METAFILE      2\n#define PICTYPE_ICON          3\n#define PICTYPE_ENHMETAFILE   4\n\ntypedef struct tagPICTDESC {\n\tUINT cbSizeofstruct;\n\tUINT picType;\n\tunion {\n\t\t\tstruct {\n\t\t\t\t\tHBITMAP hbitmap;\n\t\t\t\t\tHPALETTE hpal;\n\t\t\t} bmp;\n\t\t\tstruct {\n\t\t\t\t\tHMETAFILE hmeta;\n\t\t\t\t\tint xExt;\n\t\t\t\t\tint yExt;\n\t\t\t} wmf;\n\t\t\tstruct {\n\t\t\t\t\tHICON hicon;\n\t\t\t} icon;\n\t\t\tstruct {\n\t\t\t\t\tHENHMETAFILE hemf;\n\t\t\t} emf;\n\t} DUMMYUNIONNAME;\n} PICTDESC, *LPPICTDESC;\n\ntypedef LONG OLE_XPOS_PIXELS;\ntypedef LONG OLE_YPOS_PIXELS;\ntypedef LONG OLE_XSIZE_PIXELS;\ntypedef LONG OLE_YSIZE_PIXELS;\ntypedef float OLE_XPOS_CONTAINER;\ntypedef float OLE_YPOS_CONTAINER;\ntypedef float OLE_XSIZE_CONTAINER;\ntypedef float OLE_YSIZE_CONTAINER;\n\ntypedef enum\n{\n\ttriUnchecked = 0,\n\ttriChecked = 1,\n\ttriGray = 2\n} OLE_TRISTATE;\n\ntypedef VARIANT_BOOL OLE_OPTEXCLUSIVE;\ntypedef VARIANT_BOOL OLE_CANCELBOOL;\ntypedef VARIANT_BOOL OLE_ENABLEDEFAULTBOOL;\n\n/* flags for OleLoadPictureEx and OleLoadPictureFileEx */\n#define LP_DEFAULT      0x0\n#define LP_MONOCHROME   0x1\n#define LP_VGACOLOR     0x2\n#define LP_COLOR        0x4\n\nHRESULT WINAPI DllRegisterServer(void);\n\nHRESULT WINAPI DllUnregisterServer(void);\n\nHCURSOR WINAPI OleIconToCursor( HINSTANCE hinstExe, HICON hicon);\n\nHRESULT WINAPI OleCreatePropertyFrameIndirect( LPOCPFIPARAMS lpParams);\n\nHRESULT WINAPI OleCreatePropertyFrame(\n\tHWND hwndOwner, UINT x, UINT y,\n\tLPCOLESTR lpszCaption, ULONG cObjects, LPUNKNOWN* ppUnk,\n\tULONG cPages, LPCLSID pPageClsID, LCID lcid, DWORD dwReserved,\n\tLPVOID pvReserved );\n\nHRESULT WINAPI OleLoadPicture(\tLPSTREAM lpstream, LONG lSize, BOOL fRunmode,\n\t\tREFIID riid, LPVOID *lplpvObj );\n\nHRESULT WINAPI OleLoadPictureEx( LPSTREAM lpstream, LONG lSize, BOOL fRunMode,\n                REFIID riid, DWORD xSizeDesired, DWORD ySizeDesired,\n                DWORD dwFlags, LPVOID *lplpvObj );\n\nHRESULT WINAPI OleLoadPictureFile( VARIANT varFilename, IDispatch **ppdispPicture );\n\nHRESULT WINAPI OleLoadPictureFileEx( VARIANT varFilename, DWORD xSizeDesired,\n                DWORD ySizeDesired, DWORD dwFlags, IDispatch **ppdispPicture );\n\nHRESULT WINAPI OleSavePictureFile( IDispatch *pdispPicture, BSTR bstrFilename );\n\nHRESULT WINAPI OleLoadPicturePath( LPOLESTR szURLorPath, LPUNKNOWN punkCaller,\n\t\tDWORD dwReserved, OLE_COLOR clrReserved, REFIID riid,\n\t\tLPVOID *ppvRet );\n\nHRESULT WINAPI OleCreatePictureIndirect(LPPICTDESC lpPictDesc, REFIID riid,\n\t\tBOOL fOwn, LPVOID * lplpvObj );\n\nHRESULT WINAPI OleCreateFontIndirect(LPFONTDESC lpFontDesc, REFIID riid,\n\t\tLPVOID* lplpvObj);\n\nHRESULT WINAPI OleTranslateColor( OLE_COLOR clr, HPALETTE hpal,\n\t\tCOLORREF* lpcolorref);\n\n/* Reflected Window Message IDs */\n#define OCM__BASE           (WM_USER+0x1c00)\n#define OCM_COMMAND         (OCM__BASE + WM_COMMAND)\n\n#define OCM_CTLCOLORBTN     (OCM__BASE + WM_CTLCOLORBTN)\n#define OCM_CTLCOLOREDIT    (OCM__BASE + WM_CTLCOLOREDIT)\n#define OCM_CTLCOLORDLG     (OCM__BASE + WM_CTLCOLORDLG)\n#define OCM_CTLCOLORLISTBOX (OCM__BASE + WM_CTLCOLORLISTBOX)\n#define OCM_CTLCOLORMSGBOX  (OCM__BASE + WM_CTLCOLORMSGBOX)\n#define OCM_CTLCOLORSCROLLBAR   (OCM__BASE + WM_CTLCOLORSCROLLBAR)\n#define OCM_CTLCOLORSTATIC  (OCM__BASE + WM_CTLCOLORSTATIC)\n\n#define OCM_DRAWITEM        (OCM__BASE + WM_DRAWITEM)\n#define OCM_MEASUREITEM     (OCM__BASE + WM_MEASUREITEM)\n#define OCM_DELETEITEM      (OCM__BASE + WM_DELETEITEM)\n#define OCM_VKEYTOITEM      (OCM__BASE + WM_VKEYTOITEM)\n#define OCM_CHARTOITEM      (OCM__BASE + WM_CHARTOITEM)\n#define OCM_COMPAREITEM     (OCM__BASE + WM_COMPAREITEM)\n#define OCM_HSCROLL         (OCM__BASE + WM_HSCROLL)\n#define OCM_VSCROLL         (OCM__BASE + WM_VSCROLL)\n#define OCM_PARENTNOTIFY    (OCM__BASE + WM_PARENTNOTIFY)\n#define OCM_NOTIFY            (OCM__BASE + WM_NOTIFY)\n\n#define CONNECT_E_FIRST    MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0200)\n#define CONNECT_E_LAST     MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x020F)\n#define CONNECT_S_FIRST    MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0200)\n#define CONNECT_S_LAST     MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x020F)\n\n#define CONNECT_E_NOCONNECTION      (CONNECT_E_FIRST+0)\n#define CONNECT_E_ADVISELIMIT       (CONNECT_E_FIRST+1)\n#define CONNECT_E_CANNOTCONNECT     (CONNECT_E_FIRST+2)\n#define CONNECT_E_OVERRIDDEN        (CONNECT_E_FIRST+3)\n\n#define SELFREG_E_FIRST             MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0200)\n#define SELFREG_E_LAST              MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x020F)\n#define SELFREG_S_FIRST             MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0200)\n#define SELFREG_S_LAST              MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x020F)\n#define SELFREG_E_TYPELIB           (SELFREG_E_FIRST+0)\n#define SELFREG_E_CLASS             (SELFREG_E_FIRST+1)\n\n#ifndef FACILITY_CONTROL\n#define FACILITY_CONTROL 0xa\n#endif\n#define STD_CTL_SCODE(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_CONTROL, n)\n#define CTL_E_ILLEGALFUNCTIONCALL       STD_CTL_SCODE(5)\n#define CTL_E_OVERFLOW                  STD_CTL_SCODE(6)\n#define CTL_E_OUTOFMEMORY               STD_CTL_SCODE(7)\n#define CTL_E_DIVISIONBYZERO            STD_CTL_SCODE(11)\n#define CTL_E_OUTOFSTRINGSPACE          STD_CTL_SCODE(14)\n#define CTL_E_OUTOFSTACKSPACE           STD_CTL_SCODE(28)\n#define CTL_E_BADFILENAMEORNUMBER       STD_CTL_SCODE(52)\n#define CTL_E_FILENOTFOUND              STD_CTL_SCODE(53)\n#define CTL_E_BADFILEMODE               STD_CTL_SCODE(54)\n#define CTL_E_FILEALREADYOPEN           STD_CTL_SCODE(55)\n#define CTL_E_DEVICEIOERROR             STD_CTL_SCODE(57)\n#define CTL_E_FILEALREADYEXISTS         STD_CTL_SCODE(58)\n#define CTL_E_BADRECORDLENGTH           STD_CTL_SCODE(59)\n#define CTL_E_DISKFULL                  STD_CTL_SCODE(61)\n#define CTL_E_BADRECORDNUMBER           STD_CTL_SCODE(63)\n#define CTL_E_BADFILENAME               STD_CTL_SCODE(64)\n#define CTL_E_TOOMANYFILES              STD_CTL_SCODE(67)\n#define CTL_E_DEVICEUNAVAILABLE         STD_CTL_SCODE(68)\n#define CTL_E_PERMISSIONDENIED          STD_CTL_SCODE(70)\n#define CTL_E_DISKNOTREADY              STD_CTL_SCODE(71)\n#define CTL_E_PATHFILEACCESSERROR       STD_CTL_SCODE(75)\n#define CTL_E_PATHNOTFOUND              STD_CTL_SCODE(76)\n#define CTL_E_INVALIDPATTERNSTRING      STD_CTL_SCODE(93)\n#define CTL_E_INVALIDUSEOFNULL          STD_CTL_SCODE(94)\n#define CTL_E_INVALIDFILEFORMAT         STD_CTL_SCODE(321)\n#define CTL_E_INVALIDPROPERTYVALUE      STD_CTL_SCODE(380)\n#define CTL_E_INVALIDPROPERTYARRAYINDEX STD_CTL_SCODE(381)\n#define CTL_E_SETNOTSUPPORTEDATRUNTIME  STD_CTL_SCODE(382)\n#define CTL_E_SETNOTSUPPORTED           STD_CTL_SCODE(383)\n#define CTL_E_NEEDPROPERTYARRAYINDEX    STD_CTL_SCODE(385)\n#define CTL_E_SETNOTPERMITTED           STD_CTL_SCODE(387)\n#define CTL_E_GETNOTSUPPORTEDATRUNTIME  STD_CTL_SCODE(393)\n#define CTL_E_GETNOTSUPPORTED           STD_CTL_SCODE(394)\n#define CTL_E_PROPERTYNOTFOUND          STD_CTL_SCODE(422)\n#define CTL_E_INVALIDCLIPBOARDFORMAT    STD_CTL_SCODE(460)\n#define CTL_E_INVALIDPICTURE            STD_CTL_SCODE(481)\n#define CTL_E_PRINTERERROR              STD_CTL_SCODE(482)\n#define CTL_E_CANTSAVEFILETOTEMP        STD_CTL_SCODE(735)\n#define CTL_E_SEARCHTEXTNOTFOUND        STD_CTL_SCODE(744)\n#define CTL_E_REPLACEMENTSTOOLONG       STD_CTL_SCODE(746)\n\n#define CUSTOM_CTL_SCODE(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_CONTROL, n)\n#define CTL_E_CUSTOM_FIRST              CUSTOM_CTL_SCODE(600)\n\n#define VT_COLOR            VT_I4\n#define VT_XPOS_PIXELS      VT_I4\n#define VT_YPOS_PIXELS      VT_I4\n#define VT_XSIZE_PIXELS     VT_I4\n#define VT_YSIZE_PIXELS     VT_I4\n#define VT_XPOS_HIMETRIC    VT_I4\n#define VT_YPOS_HIMETRIC    VT_I4\n#define VT_XSIZE_HIMETRIC   VT_I4\n#define VT_YSIZE_HIMETRIC   VT_I4\n#define VT_TRISTATE         VT_I2\n#define VT_OPTEXCLUSIVE     VT_BOOL\n#define VT_FONT             VT_DISPATCH\n#define VT_PICTURE          VT_DISPATCH\n\n#define VT_STREAMED_PROPSET 73\n#define VT_STORED_PROPSET   74\n#define VT_BLOB_PROPSET     75\n#define VT_VERBOSE_ENUM     76\n\n#ifndef OLEIVERB_PROPERTIES\n#define OLEIVERB_PROPERTIES (__MSABI_LONG(-7))\n#endif\n\n#define PERPROP_E_FIRST    MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x0200)\n#define PERPROP_E_LAST     MAKE_SCODE(SEVERITY_ERROR,   FACILITY_ITF, 0x020F)\n#define PERPROP_S_FIRST    MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0200)\n#define PERPROP_S_LAST     MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x020F)\n\n#define PERPROP_E_NOPAGEAVAILABLE   (PERPROP_E_FIRST+0)\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* !__midl && !__WIDL__ */\n\n/* standard dispatch ID's */\n#define DISPID_AUTOSIZE                 (-500)\n#define DISPID_BACKCOLOR                (-501)\n#define DISPID_BACKSTYLE                (-502)\n#define DISPID_BORDERCOLOR              (-503)\n#define DISPID_BORDERSTYLE              (-504)\n#define DISPID_BORDERWIDTH              (-505)\n#define DISPID_DRAWMODE                 (-507)\n#define DISPID_DRAWSTYLE                (-508)\n#define DISPID_DRAWWIDTH                (-509)\n#define DISPID_FILLCOLOR                (-510)\n#define DISPID_FILLSTYLE                (-511)\n#define DISPID_FONT                     (-512)\n#define DISPID_FORECOLOR                (-513)\n#define DISPID_ENABLED                  (-514)\n#define DISPID_HWND                     (-515)\n#define DISPID_TABSTOP                  (-516)\n#define DISPID_TEXT                     (-517)\n#define DISPID_CAPTION                  (-518)\n#define DISPID_BORDERVISIBLE            (-519)\n#define DISPID_APPEARANCE               (-520)\n#define DISPID_MOUSEPOINTER             (-521)\n#define DISPID_MOUSEICON                (-522)\n#define DISPID_PICTURE                  (-523)\n#define DISPID_VALID                    (-524)\n#define DISPID_READYSTATE               (-525)\n\n#define DISPID_REFRESH                  (-550)\n#define DISPID_DOCLICK                  (-551)\n#define DISPID_ABOUTBOX                 (-552)\n#define DISPID_ADDITEM                  (-553)\n#define DISPID_CLEAR                    (-554)\n#define DISPID_REMOVEITEM               (-555)\n\n#define DISPID_CLICK                    (-600)\n#define DISPID_DBLCLICK                 (-601)\n#define DISPID_KEYDOWN                  (-602)\n#define DISPID_KEYPRESS                 (-603)\n#define DISPID_KEYUP                    (-604)\n#define DISPID_MOUSEDOWN                (-605)\n#define DISPID_MOUSEMOVE                (-606)\n#define DISPID_MOUSEUP                  (-607)\n#define DISPID_ERROREVENT               (-608)\n#define DISPID_READYSTATECHANGE         (-609)\n#define DISPID_CLICK_VALUE              (-610)\n#define DISPID_RIGHTTOLEFT              (-611)\n#define DISPID_TOPTOBOTTOM              (-612)\n#define DISPID_THIS                     (-613)\n\n#define DISPID_AMBIENT_BACKCOLOR        (-701)\n#define DISPID_AMBIENT_DISPLAYNAME      (-702)\n#define DISPID_AMBIENT_FONT             (-703)\n#define DISPID_AMBIENT_FORECOLOR        (-704)\n#define DISPID_AMBIENT_LOCALEID         (-705)\n#define DISPID_AMBIENT_MESSAGEREFLECT   (-706)\n#define DISPID_AMBIENT_SCALEUNITS       (-707)\n#define DISPID_AMBIENT_TEXTALIGN        (-708)\n#define DISPID_AMBIENT_USERMODE         (-709)\n#define DISPID_AMBIENT_UIDEAD           (-710)\n#define DISPID_AMBIENT_SHOWGRABHANDLES  (-711)\n#define DISPID_AMBIENT_SHOWHATCHING     (-712)\n#define DISPID_AMBIENT_DISPLAYASDEFAULT (-713)\n#define DISPID_AMBIENT_SUPPORTSMNEMONICS (-714)\n#define DISPID_AMBIENT_AUTOCLIP         (-715)\n#define DISPID_AMBIENT_APPEARANCE       (-716)\n\n#define DISPID_AMBIENT_CODEPAGE         (-725)\n#define DISPID_AMBIENT_PALETTE          (-726)\n#define DISPID_AMBIENT_CHARSET          (-727)\n#define DISPID_AMBIENT_TRANSFERPRIORITY (-728)\n\n#define DISPID_AMBIENT_RIGHTTOLEFT      (-732)\n#define DISPID_AMBIENT_TOPTOBOTTOM      (-733)\n\n#define DISPID_Name                     (-800)\n#define DISPID_Delete                   (-801)\n#define DISPID_Object                   (-802)\n#define DISPID_Parent                   (-803)\n\n#define DISPID_FONT_NAME 0\n#define DISPID_FONT_SIZE 2\n#define DISPID_FONT_BOLD 3\n#define DISPID_FONT_ITALIC 4\n#define DISPID_FONT_UNDER 5\n#define DISPID_FONT_STRIKE 6\n#define DISPID_FONT_WEIGHT 7\n#define DISPID_FONT_CHARSET 8\n#define DISPID_FONT_CHANGED 9\n\n/* IPicture */\n#define DISPID_PICT_HANDLE\t0\n#define DISPID_PICT_HPAL\t2\n#define DISPID_PICT_TYPE\t3\n#define DISPID_PICT_WIDTH\t4\n#define DISPID_PICT_HEIGHT\t5\n#define DISPID_PICT_RENDER\t6\n\n#endif /*  __WINE_OLECTL_H */\n"
  },
  {
    "path": "wine/windows/oledb.idl",
    "content": "/*\n * Copyright (C) 2006 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\ncpp_quote(\"#ifdef _WIN64\")\ncpp_quote(\"#include <pshpack8.h>\")\ncpp_quote(\"#else\")\ncpp_quote(\"#include <pshpack2.h>\")\ncpp_quote(\"#endif\")\ncpp_quote(\"\")\n\nimport \"wtypes.idl\";\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"propidl.idl\";\nimport \"urlmon.idl\";\n\ntypedef ULONG_PTR DBBYTEOFFSET;\ntypedef LONG_PTR  DBROWOFFSET;\ntypedef LONG_PTR  DBROWCOUNT;\ntypedef ULONG_PTR DBCOUNTITEM;\ntypedef ULONG_PTR DBLENGTH;\ntypedef ULONG_PTR DBORDINAL;\ntypedef ULONG_PTR DBBKMARK;\ntypedef DWORD_PTR DB_DWRESERVE;\ntypedef ULONG_PTR DBREFCOUNT;\ntypedef ULONG_PTR DB_UPARAMS;\ntypedef LONG_PTR  DB_LPARAMS;\ntypedef DWORD_PTR DBHASHVALUE;\n\n#include \"dbs.idl\"\n\n#include \"access.idl\"\n#include \"rstbas.idl\"\n#include \"rstinf.idl\"\n#include \"rstloc.idl\"\n#include \"chprst.idl\"\n#include \"cmdbas.idl\"\n#include \"cmdtxt.idl\"\n#include \"colinf.idl\"\n#include \"dbccmd.idl\"\n#include \"dbcses.idl\"\n#include \"srcrst.idl\"\n#include \"dbprop.idl\"\n#include \"dbinit.idl\"\n#include \"dbdsad.idl\"\n#include \"asynot.idl\"\n#include \"asysta.idl\"\n#include \"sesprp.idl\"\n#include \"rstnot.idl\"\n#include \"opnrst.idl\"\n#include \"row.idl\"\n#include \"rowchg.idl\"\n#include \"rowpos.idl\"\n#include \"rowpsc.idl\"\n#include \"binres.idl\"\n#include \"crtrow.idl\"\n#include \"errrec.idl\"\n\ncpp_quote(\"#include <accctrl.h>\")\n\ncpp_quote(\"#include <poppack.h>\")\ncpp_quote(\"\")\n"
  },
  {
    "path": "wine/windows/oledberr.h",
    "content": "/* OLE DB error codes.\n *\n * Copyright 2009 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n\n#ifndef __WINE_OLEDBERR_H\n#define __WINE_OLEDBERR_H\n\n#define DB_E_BADBINDINFO                    0x80040e08\n\n#define DB_E_ERRORSINCOMMAND                0x80040e14\n#define DB_E_CANTCANCEL                     0x80040e15\n#define DB_E_DIALECTNOTSUPPORTED            0x80040e16\n#define DB_E_DUPLICATEDATASOURCE            0x80040e17\n#define DB_E_CANNOTRESTART                  0x80040e18\n#define DB_E_NOTFOUND                       0x80040e19\n\n#define DB_E_UNSUPPORTEDCONVERSION          0x80040e1d\n\n#define DB_E_ERRORSOCCURRED                 0x80040e21\n\n#define DB_E_BADSTORAGEFLAG                 0x80040e26\n#define DB_E_BADCOMPAREOP                   0x80040e27\n#define DB_E_BADSTATUSVALUE                 0x80040e28\n#define DB_E_CANTSCROLLBACKWARDS            0x80040e29\n#define DB_E_BADREGIONHANDLE                0x80040e2a\n#define DB_E_NONCONTIGUOUSRANGE             0x80040e2b\n#define DB_E_INVALIDTRANSITION              0x80040e2c\n#define DB_E_NOTASUBREGION                  0x80040e2d\n#define DB_E_MULTIPLESTATEMENTS             0x80040e2e\n#define DB_E_INTEGRITYVIOLATION             0x80040e2f\n#define DB_E_BADTYPENAME                    0x80040e30\n#define DB_E_ABORTLIMITREACHED              0x80040e31\n#define DB_E_ROWSETINCOMMAND                0x80040e32\n#define DB_E_CANTTRANSLATE                  0x80040e33\n#define DB_E_DUPLICATEINDEXID               0x80040e34\n#define DB_E_NOINDEX                        0x80040e35\n#define DB_E_INDEXINUSE                     0x80040e36\n#define DB_E_NOTABLE                        0x80040e37\n#define DB_E_CONCURRENCYVIOLATION           0x80040e38\n\n#define DB_E_TABLEINUSE                     0x80040e40\n#define DB_E_NOLOCALE                       0x80040e41\n#define DB_E_BADRECORDNUM                   0x80040e42\n#define DB_E_BOOKMARKSKIPPED                0x80040e43\n#define DB_E_BADPROPERTYVALUE               0x80040e44\n#define DB_E_INVALID                        0x80040e45\n#define DB_E_BADACCESSORFLAGS               0x80040e46\n#define DB_E_BADSTORAGEFLAGS                0x80040e47\n#define DB_E_BYREFACCESSORNOTSUPPORTED      0x80040e48\n#define DB_E_NULLACCESSORNOTSUPPORTED       0x80040e49\n#define DB_E_NOTPREPARED                    0x80040e4a\n#define DB_E_BADACCESSORTYPE                0x80040e4b\n#define DB_E_WRITEONLYACCESSOR              0x80040e4c\n#define DB_SEC_E_AUTH_FAILED                0x80040e4d\n#define DB_E_CANCELED                       0x80040e4e\n\n#define DB_E_ALREADYINITIALIZED             0x80040e52\n#define DB_E_DATAOVERFLOW                   0x80040e57\n\n#define DB_E_MISMATCHEDPROVIDER             0x80040e75\n\n#define DB_S_ERRORSOCCURRED                 0x00040eda\n\n#endif /* __WINE_OLEDBERR_H */\n"
  },
  {
    "path": "wine/windows/oledlg.h",
    "content": "/*\n * Declarations for OLEDLG\n *\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_OLEDLG_H\n#define __WINE_OLEDLG_H\n\n#include <windows.h>\n#include <shellapi.h>\n#include <commdlg.h>\n#include <ole2.h>\n#ifndef __WINESRC__\n# include <string.h>\n# include <tchar.h>\n#endif\n#include <dlgs.h>\n#include <prsht.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\ntypedef struct IOleUILinkContainerA *POLEUILINKCONTAINERA, *LPOLEUILINKCONTAINERA;\ntypedef struct IOleUILinkContainerW *POLEUILINKCONTAINERW, *LPOLEUILINKCONTAINERW;\n\ntypedef struct IOleUILinkInfoA *POLEUILINKINFOA, *LPOLEUILINKINFOA;\ntypedef struct IOleUILinkInfoW *POLEUILINKINFOW, *LPOLEUILINKINFOW;\n\ntypedef struct IOleUIObjInfoA *POLEUIOBJINFOA, *LPOLEUIOBJINFOA;\ntypedef struct IOleUIObjInfoW *POLEUIOBJINFOW, *LPOLEUIOBJINFOW;\n\n#define IDC_OLEUIHELP                   99\n\n\n#define OLEUI_ERR_STANDARDMAX           116\n\n#define OLEUI_BZERR_HTASKINVALID        (OLEUI_ERR_STANDARDMAX+0)\n#define OLEUI_BZ_SWITCHTOSELECTED       (OLEUI_ERR_STANDARDMAX+1)\n#define OLEUI_BZ_RETRYSELECTED          (OLEUI_ERR_STANDARDMAX+2)\n#define OLEUI_BZ_CALLUNBLOCKED          (OLEUI_ERR_STANDARDMAX+3)\n\n#define OLEUI_FALSE   0\n#define OLEUI_SUCCESS 1 /* Same as OLEUI_OK */\n#define OLEUI_OK      1 /* OK button pressed */\n#define OLEUI_CANCEL  2 /* Cancel button pressed */\n\n#define OLEUI_ERR_STANDARDMIN           100\n#define OLEUI_ERR_OLEMEMALLOC           100\n#define OLEUI_ERR_STRUCTURENULL         101\n#define OLEUI_ERR_STRUCTUREINVALID      102\n#define OLEUI_ERR_CBSTRUCTINCORRECT     103\n#define OLEUI_ERR_HWNDOWNERINVALID      104\n#define OLEUI_ERR_LPSZCAPTIONINVALID    105\n#define OLEUI_ERR_LPFNHOOKINVALID       106\n#define OLEUI_ERR_HINSTANCEINVALID      107\n#define OLEUI_ERR_LPSZTEMPLATEINVALID   108\n#define OLEUI_ERR_HRESOURCEINVALID      109\n#define OLEUI_ERR_FINDTEMPLATEFAILURE   110\n#define OLEUI_ERR_LOADTEMPLATEFAILURE   111\n#define OLEUI_ERR_DIALOGFAILURE         112\n#define OLEUI_ERR_LOCALMEMALLOC         113\n#define OLEUI_ERR_GLOBALMEMALLOC        114\n#define OLEUI_ERR_LOADSTRING            115\n#define OLEUI_ERR_STANDARDMAX           116\n\ntypedef UINT (CALLBACK *LPFNOLEUIHOOK)(HWND, UINT, WPARAM, LPARAM);\n\n/*****************************************************************************\n * Registered Message Names\n */\n#define SZOLEUI_MSG_HELPA              \"OLEUI_MSG_HELP\"\n#define SZOLEUI_MSG_ENDDIALOGA         \"OLEUI_MSG_ENDDIALOG\"\n#define SZOLEUI_MSG_BROWSEA            \"OLEUI_MSG_BROWSE\"\n#define SZOLEUI_MSG_CHANGEICONA        \"OLEUI_MSG_CHANGEICON\"\n#define SZOLEUI_MSG_CLOSEBUSYDIALOGA   \"OLEUI_MSG_CLOSEBUSYDIALOG\"\n#define SZOLEUI_MSG_CONVERTA           \"OLEUI_MSG_CONVERT\"\n#define SZOLEUI_MSG_CHANGESOURCEA      \"OLEUI_MSG_CHANGESOURCE\"\n#define SZOLEUI_MSG_ADDCONTROLA        \"OLEUI_MSG_ADDCONTROL\"\n#define SZOLEUI_MSG_BROWSE_OFNA        \"OLEUI_MSG_BROWSE_OFN\"\n#if defined(__GNUC__)\n# define SZOLEUI_MSG_HELPW             (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','H','E','L','P',0 }\n# define SZOLEUI_MSG_ENDDIALOGW        (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','E','N','D','D','I','A','L','O','G',0 }\n# define SZOLEUI_MSG_BROWSEW           (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','B','R','O','W','S','E',0 }\n# define SZOLEUI_MSG_CHANGEICONW       (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','C','H','A','N','G','E','I','C','O','N',0 }\n# define SZOLEUI_MSG_CLOSEBUSYDIALOGW  (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','C','L','O','S','E','B','U','S','Y','D','I','A','L','O','G',0 }\n# define SZOLEUI_MSG_CONVERTW          (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','C','O','N','V','E','R','T',0 }\n# define SZOLEUI_MSG_CHANGESOURCEW     (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','C','H','A','N','G','E','S','O','U','R','C','E',0 }\n# define SZOLEUI_MSG_ADDCONTROLW       (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','A','D','D','C','O','N','T','R','O','L',0 }\n# define SZOLEUI_MSG_BROWSE_OFNW       (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','B','R','O','W','S','E','_','O','F','N',0 }\n#elif defined(_MSC_VER)\n# define SZOLEUI_MSG_HELPW              L\"OLEUI_MSG_HELP\"\n# define SZOLEUI_MSG_ENDDIALOGW         L\"OLEUI_MSG_ENDDIALOG\"\n# define SZOLEUI_MSG_BROWSEW            L\"OLEUI_MSG_BROWSE\"\n# define SZOLEUI_MSG_CHANGEICONW        L\"OLEUI_MSG_CHANGEICON\"\n# define SZOLEUI_MSG_CLOSEBUSYDIALOGW   L\"OLEUI_MSG_CLOSEBUSYDIALOG\"\n# define SZOLEUI_MSG_CONVERTW           L\"OLEUI_MSG_CONVERT\"\n# define SZOLEUI_MSG_CHANGESOURCEW      L\"OLEUI_MSG_CHANGESOURCE\"\n# define SZOLEUI_MSG_ADDCONTROLW        L\"OLEUI_MSG_ADDCONTROL\"\n# define SZOLEUI_MSG_BROWSE_OFNW        L\"OLEUI_MSG_BROWSE_OFN\"\n#else\nstatic const WCHAR SZOLEUI_MSG_HELPW[]             = { 'O','L','E','U','I','_','M','S','G','_','H','E','L','P',0 };\nstatic const WCHAR SZOLEUI_MSG_ENDDIALOGW[]        = { 'O','L','E','U','I','_','M','S','G','_','E','N','D','D','I','A','L','O','G',0 };\nstatic const WCHAR SZOLEUI_MSG_BROWSEW[]           = { 'O','L','E','U','I','_','M','S','G','_','B','R','O','W','S','E',0 };\nstatic const WCHAR SZOLEUI_MSG_CHANGEICONW[]       = { 'O','L','E','U','I','_','M','S','G','_','C','H','A','N','G','E','I','C','O','N',0 };\nstatic const WCHAR SZOLEUI_MSG_CLOSEBUSYDIALOGW[]  = { 'O','L','E','U','I','_','M','S','G','_','C','L','O','S','E','B','U','S','Y','D','I','A','L','O','G',0 };\nstatic const WCHAR SZOLEUI_MSG_CONVERTW[]          = { 'O','L','E','U','I','_','M','S','G','_','C','O','N','V','E','R','T',0 };\nstatic const WCHAR SZOLEUI_MSG_CHANGESOURCEW[]     = { 'O','L','E','U','I','_','M','S','G','_','C','H','A','N','G','E','S','O','U','R','C','E',0 };\nstatic const WCHAR SZOLEUI_MSG_ADDCONTROLW[]       = { 'O','L','E','U','I','_','M','S','G','_','A','D','D','C','O','N','T','R','O','L',0 };\nstatic const WCHAR SZOLEUI_MSG_BROWSE_OFNW[]       = { 'O','L','E','U','I','_','M','S','G','_','B','R','O','W','S','E','_','O','F','N',0 };\n#endif\n#define SZOLEUI_MSG_HELP             WINELIB_NAME_AW(SZOLEUI_MSG_HELP)\n#define SZOLEUI_MSG_ENDDIALOG        WINELIB_NAME_AW(SZOLEUI_MSG_ENDDIALOG)\n#define SZOLEUI_MSG_BROWSE           WINELIB_NAME_AW(SZOLEUI_MSG_BROWSE)\n#define SZOLEUI_MSG_CHANGEICON       WINELIB_NAME_AW(SZOLEUI_MSG_CHANGEICON)\n#define SZOLEUI_MSG_CLOSEBUSYDIALOG  WINELIB_NAME_AW(SZOLEUI_MSG_CLOSEBUSYDIALOG)\n#define SZOLEUI_MSG_CONVERT          WINELIB_NAME_AW(SZOLEUI_MSG_CONVERT)\n#define SZOLEUI_MSG_CHANGESOURCE     WINELIB_NAME_AW(SZOLEUI_MSG_CHANGESOURCE)\n#define SZOLEUI_MSG_ADDCONTROL       WINELIB_NAME_AW(SZOLEUI_MSG_ADDCONTROL)\n#define SZOLEUI_MSG_BROWSE_OFN       WINELIB_NAME_AW(SZOLEUI_MSG_BROWSE_OFN)\n\n\n/*****************************************************************************\n * INSERT OBJECT DIALOG\n */\ntypedef struct tagOLEUIINSERTOBJECTA\n{\n    DWORD           cbStruct;\n    DWORD           dwFlags;\n    HWND            hWndOwner;\n    LPCSTR          lpszCaption;\n    LPFNOLEUIHOOK   lpfnHook;\n    LPARAM          lCustData;\n    HINSTANCE       hInstance;\n    LPCSTR          lpszTemplate;\n    HRSRC           hResource;\n    CLSID           clsid;\n    LPSTR           lpszFile;\n    UINT            cchFile;\n    UINT            cClsidExclude;\n    LPCLSID         lpClsidExclude;\n    IID             iid;\n    DWORD           oleRender;\n    LPFORMATETC     lpFormatEtc;\n    LPOLECLIENTSITE lpIOleClientSite;\n    LPSTORAGE       lpIStorage;\n    LPVOID          *ppvObj;\n    SCODE           sc;\n    HGLOBAL         hMetaPict;\n} OLEUIINSERTOBJECTA, *POLEUIINSERTOBJECTA, *LPOLEUIINSERTOBJECTA;\n\ntypedef struct tagOLEUIINSERTOBJECTW\n{\n    DWORD           cbStruct;\n    DWORD           dwFlags;\n    HWND            hWndOwner;\n    LPCWSTR         lpszCaption;\n    LPFNOLEUIHOOK   lpfnHook;\n    LPARAM          lCustData;\n    HINSTANCE       hInstance;\n    LPCWSTR         lpszTemplate;\n    HRSRC           hResource;\n    CLSID           clsid;\n    LPWSTR          lpszFile;\n    UINT            cchFile;\n    UINT            cClsidExclude;\n    LPCLSID         lpClsidExclude;\n    IID             iid;\n    DWORD           oleRender;\n    LPFORMATETC     lpFormatEtc;\n    LPOLECLIENTSITE lpIOleClientSite;\n    LPSTORAGE       lpIStorage;\n    LPVOID          *ppvObj;\n    SCODE           sc;\n    HGLOBAL         hMetaPict;\n} OLEUIINSERTOBJECTW, *POLEUIINSERTOBJECTW, *LPOLEUIINSERTOBJECTW;\n\nDECL_WINELIB_TYPE_AW(OLEUIINSERTOBJECT)\nDECL_WINELIB_TYPE_AW(POLEUIINSERTOBJECT)\nDECL_WINELIB_TYPE_AW(LPOLEUIINSERTOBJECT)\n\n#define IOF_SHOWHELP                    __MSABI_LONG(0x00000001)\n#define IOF_SELECTCREATENEW             __MSABI_LONG(0x00000002)\n#define IOF_SELECTCREATEFROMFILE        __MSABI_LONG(0x00000004)\n#define IOF_CHECKLINK                   __MSABI_LONG(0x00000008)\n#define IOF_CHECKDISPLAYASICON          __MSABI_LONG(0x00000010)\n#define IOF_CREATENEWOBJECT             __MSABI_LONG(0x00000020)\n#define IOF_CREATEFILEOBJECT            __MSABI_LONG(0x00000040)\n#define IOF_CREATELINKOBJECT            __MSABI_LONG(0x00000080)\n#define IOF_DISABLELINK                 __MSABI_LONG(0x00000100)\n#define IOF_VERIFYSERVERSEXIST          __MSABI_LONG(0x00000200)\n#define IOF_DISABLEDISPLAYASICON        __MSABI_LONG(0x00000400)\n#define IOF_HIDECHANGEICON              __MSABI_LONG(0x00000800)\n#define IOF_SHOWINSERTCONTROL           __MSABI_LONG(0x00001000)\n#define IOF_SELECTCREATECONTROL         __MSABI_LONG(0x00002000)\n\n/*****************************************************************************\n * CONVERT DIALOG\n */\ntypedef struct tagOLEUICONVERTA\n{\n    DWORD           cbStruct;\n    DWORD           dwFlags;\n    HWND            hWndOwner;\n    LPCSTR          lpszCaption;\n    LPFNOLEUIHOOK   lpfnHook;\n    LPARAM          lCustData;\n    HINSTANCE       hInstance;\n    LPCSTR          lpszTemplate;\n    HRSRC           hResource;\n    CLSID           clsid;\n    CLSID           clsidConvertDefault;\n    CLSID           clsidActivateDefault;\n    CLSID           clsidNew;\n    DWORD           dvAspect;\n    WORD            wFormat;\n    BOOL            fIsLinkedObject;\n    HGLOBAL         hMetaPict;\n    LPSTR           lpszUserType;\n    BOOL            fObjectsIconChanged;\n    LPSTR           lpszDefLabel;\n    UINT            cClsidExclude;\n    LPCLSID         lpClsidExclude;\n} OLEUICONVERTA, *POLEUICONVERTA, *LPOLEUICONVERTA;\n\ntypedef struct tagOLEUICONVERTW\n{\n    DWORD           cbStruct;\n    DWORD           dwFlags;\n    HWND            hWndOwner;\n    LPCWSTR         lpszCaption;\n    LPFNOLEUIHOOK   lpfnHook;\n    LPARAM          lCustData;\n    HINSTANCE       hInstance;\n    LPCWSTR         lpszTemplate;\n    HRSRC           hResource;\n    CLSID           clsid;\n    CLSID           clsidConvertDefault;\n    CLSID           clsidActivateDefault;\n    CLSID           clsidNew;\n    DWORD           dvAspect;\n    WORD            wFormat;\n    BOOL            fIsLinkedObject;\n    HGLOBAL         hMetaPict;\n    LPWSTR          lpszUserType;\n    BOOL            fObjectsIconChanged;\n    LPWSTR          lpszDefLabel;\n    UINT            cClsidExclude;\n    LPCLSID         lpClsidExclude;\n} OLEUICONVERTW, *POLEUICONVERTW, *LPOLEUICONVERTW;\n\nDECL_WINELIB_TYPE_AW(OLEUICONVERT)\nDECL_WINELIB_TYPE_AW(POLEUICONVERT)\nDECL_WINELIB_TYPE_AW(LPOLEUICONVERT)\n\n#define CF_SHOWHELPBUTTON               __MSABI_LONG(0x00000001)\n#define CF_SETCONVERTDEFAULT            __MSABI_LONG(0x00000002)\n#define CF_SETACTIVATEDEFAULT           __MSABI_LONG(0x00000004)\n#define CF_SELECTCONVERTTO              __MSABI_LONG(0x00000008)\n#define CF_SELECTACTIVATEAS             __MSABI_LONG(0x00000010)\n#define CF_DISABLEDISPLAYASICON         __MSABI_LONG(0x00000020)\n#define CF_DISABLEACTIVATEAS            __MSABI_LONG(0x00000040)\n#define CF_HIDECHANGEICON               __MSABI_LONG(0x00000080)\n#define CF_CONVERTONLY                  __MSABI_LONG(0x00000100)\n\n/*****************************************************************************\n * CHANGE ICON DIALOG\n */\ntypedef struct tagOLEUICHANGEICONA\n{\n    DWORD           cbStruct;\n    DWORD           dwFlags;\n    HWND            hWndOwner;\n    LPCSTR          lpszCaption;\n    LPFNOLEUIHOOK   lpfnHook;\n    LPARAM          lCustData;\n    HINSTANCE       hInstance;\n    LPCSTR          lpszTemplate;\n    HRSRC           hResource;\n    HGLOBAL         hMetaPict;\n    CLSID           clsid;\n    CHAR            szIconExe[MAX_PATH];\n    INT             cchIconExe;\n} OLEUICHANGEICONA, *POLEUICHANGEICONA, *LPOLEUICHANGEICONA;\n\ntypedef struct tagOLEUICHANGEICONW\n{\n    DWORD           cbStruct;\n    DWORD           dwFlags;\n    HWND            hWndOwner;\n    LPCWSTR         lpszCaption;\n    LPFNOLEUIHOOK   lpfnHook;\n    LPARAM          lCustData;\n    HINSTANCE       hInstance;\n    LPCWSTR         lpszTemplate;\n    HRSRC           hResource;\n    HGLOBAL         hMetaPict;\n    CLSID           clsid;\n    WCHAR           szIconExe[MAX_PATH];\n    INT             cchIconExe;\n} OLEUICHANGEICONW, *POLEUICHANGEICONW, *LPOLEUICHANGEICONW;\n\nDECL_WINELIB_TYPE_AW(OLEUICHANGEICON)\nDECL_WINELIB_TYPE_AW(POLEUICHANGEICON)\nDECL_WINELIB_TYPE_AW(LPOLEUICHANGEICON)\n\n\n#define CIF_SHOWHELP                    __MSABI_LONG(0x00000001)\n#define CIF_SELECTCURRENT               __MSABI_LONG(0x00000002)\n#define CIF_SELECTDEFAULT               __MSABI_LONG(0x00000004)\n#define CIF_SELECTFROMFILE              __MSABI_LONG(0x00000008)\n#define CIF_USEICONEXE                  __MSABI_LONG(0x00000010)\n\n/*****************************************************************************\n * PASTE SPECIAL DIALOG\n */\n\ntypedef enum tagOLEUIPASTEFLAG\n{\n   OLEUIPASTE_ENABLEICON    = 2048,\n   OLEUIPASTE_PASTEONLY     = 0,\n   OLEUIPASTE_PASTE         = 512,\n   OLEUIPASTE_LINKANYTYPE   = 1024,\n   OLEUIPASTE_LINKTYPE1     = 1,\n   OLEUIPASTE_LINKTYPE2     = 2,\n   OLEUIPASTE_LINKTYPE3     = 4,\n   OLEUIPASTE_LINKTYPE4     = 8,\n   OLEUIPASTE_LINKTYPE5     = 16,\n   OLEUIPASTE_LINKTYPE6     = 32,\n   OLEUIPASTE_LINKTYPE7     = 64,\n   OLEUIPASTE_LINKTYPE8     = 128\n} OLEUIPASTEFLAG;\n\ntypedef struct tagOLEUIPASTEENTRYA\n{\n   FORMATETC        fmtetc;\n   LPCSTR           lpstrFormatName;\n   LPCSTR           lpstrResultText;\n   DWORD            dwFlags;\n   DWORD            dwScratchSpace;\n} OLEUIPASTEENTRYA, *POLEUIPASTEENTRYA, *LPOLEUIPASTEENTRYA;\n\ntypedef struct tagOLEUIPASTEENTRYW\n{\n   FORMATETC        fmtetc;\n   LPCWSTR          lpstrFormatName;\n   LPCWSTR          lpstrResultText;\n   DWORD            dwFlags;\n   DWORD            dwScratchSpace;\n} OLEUIPASTEENTRYW, *POLEUIPASTEENTRYW, *LPOLEUIPASTEENTRYW;\n\nDECL_WINELIB_TYPE_AW(OLEUIPASTEENTRY)\nDECL_WINELIB_TYPE_AW(POLEUIPASTEENTRY)\nDECL_WINELIB_TYPE_AW(LPOLEUIPASTEENTRY)\n\ntypedef struct tagOLEUIPASTESPECIALA\n{\n    DWORD           cbStruct;\n    DWORD           dwFlags;\n    HWND            hWndOwner;\n    LPCSTR          lpszCaption;\n    LPFNOLEUIHOOK   lpfnHook;\n    LPARAM          lCustData;\n    HINSTANCE       hInstance;\n    LPCSTR          lpszTemplate;\n    HRSRC           hResource;\n    LPDATAOBJECT    lpSrcDataObj;\n    LPOLEUIPASTEENTRYA arrPasteEntries;\n    INT             cPasteEntries;\n    UINT*           arrLinkTypes;\n    INT             cLinkTypes;\n    UINT            cClsidExclude;\n    LPCLSID         lpClsidExclude;\n    INT             nSelectedIndex;\n    BOOL            fLink;\n    HGLOBAL         hMetaPict;\n    SIZEL           sizel;\n} OLEUIPASTESPECIALA, *POLEUIPASTESPECIALA, *LPOLEUIPASTESPECIALA;\n\ntypedef struct tagOLEUIPASTESPECIALW\n{\n    DWORD           cbStruct;\n    DWORD           dwFlags;\n    HWND            hWndOwner;\n    LPCWSTR         lpszCaption;\n    LPFNOLEUIHOOK   lpfnHook;\n    LPARAM          lCustData;\n    HINSTANCE       hInstance;\n    LPCWSTR         lpszTemplate;\n    HRSRC           hResource;\n    LPDATAOBJECT    lpSrcDataObj;\n    LPOLEUIPASTEENTRYW arrPasteEntries;\n    INT             cPasteEntries;\n    UINT*           arrLinkTypes;\n    INT             cLinkTypes;\n    UINT            cClsidExclude;\n    LPCLSID         lpClsidExclude;\n    INT             nSelectedIndex;\n    BOOL            fLink;\n    HGLOBAL         hMetaPict;\n    SIZEL           sizel;\n} OLEUIPASTESPECIALW, *POLEUIPASTESPECIALW, *LPOLEUIPASTESPECIALW;\n\nDECL_WINELIB_TYPE_AW(OLEUIPASTESPECIAL)\nDECL_WINELIB_TYPE_AW(POLEUIPASTESPECIAL)\nDECL_WINELIB_TYPE_AW(LPOLEUIPASTESPECIAL)\n\n#define PS_MAXLINKTYPES                 8\n\n#define PSF_SHOWHELP                    __MSABI_LONG(0x00000001)\n#define PSF_SELECTPASTE                 __MSABI_LONG(0x00000002)\n#define PSF_SELECTPASTELINK             __MSABI_LONG(0x00000004)\n\n#define PSF_CHECKDISPLAYASICON          __MSABI_LONG(0x00000008)\n#define PSF_DISABLEDISPLAYASICON        __MSABI_LONG(0x00000010)\n#define PSF_HIDECHANGEICON              __MSABI_LONG(0x00000020)\n#define PSF_STAYONCLIPBOARDCHANGE       __MSABI_LONG(0x00000040)\n#define PSF_NOREFRESHDATAOBJECT         __MSABI_LONG(0x00000080)\n\n#define OLEUI_IOERR_SRCDATAOBJECTINVALID    (OLEUI_ERR_STANDARDMAX+0)\n#define OLEUI_IOERR_ARRPASTEENTRIESINVALID  (OLEUI_ERR_STANDARDMAX+1)\n#define OLEUI_IOERR_ARRLINKTYPESINVALID     (OLEUI_ERR_STANDARDMAX+2)\n#define OLEUI_PSERR_CLIPBOARDCHANGED        (OLEUI_ERR_STANDARDMAX+3)\n#define OLEUI_PSERR_GETCLIPBOARDFAILED      (OLEUI_ERR_STANDARDMAX+4)\n\n/* Paste Special dialog resource ids */\n#define IDD_PASTESPECIAL       1003\n#define IDD_PASTESPECIAL4      1108\n\n/* Paste Special dialog control ids */\n#define IDC_PS_PASTE           500\n#define IDC_PS_PASTELINK       501\n#define IDC_PS_SOURCETEXT      502\n#define IDC_PS_PASTELIST       503\n#define IDC_PS_PASTELINKLIST   504\n#define IDC_PS_DISPLAYLIST     505\n#define IDC_PS_DISPLAYASICON   506\n#define IDC_PS_ICONDISPLAY     507\n#define IDC_PS_CHANGEICON      508\n#define IDC_PS_RESULTIMAGE     509\n#define IDC_PS_RESULTTEXT      510\n\n/*****************************************************************************\n * EDIT LINKS DIALOG\n */\n\n#define ELF_SHOWHELP               __MSABI_LONG(0x00000001)\n#define ELF_DISABLEUPDATENOW       __MSABI_LONG(0x00000002)\n#define ELF_DISABLEOPENSOURCE      __MSABI_LONG(0x00000004)\n#define ELF_DISABLECHANGESOURCE    __MSABI_LONG(0x00000008)\n#define ELF_DISABLECANCELLINK      __MSABI_LONG(0x00000010)\n\ntypedef struct tagOLEUIEDITLINKSW\n{\n    DWORD           cbStruct;\n    DWORD           dwFlags;\n    HWND            hWndOwner;\n    LPCWSTR         lpszCaption;\n    LPFNOLEUIHOOK   lpfnHook;\n    LPARAM          lCustData;\n    HINSTANCE       hInstance;\n    LPCWSTR         lpszTemplate;\n    HRSRC           hResource;\n    LPOLEUILINKCONTAINERW lpOleUILinkContainer;\n} OLEUIEDITLINKSW, *POLEUIEDITLINKSW, *LPOLEUIEDITLINKSW;\n\ntypedef struct tagOLEUIEDITLINKSA\n{\n    DWORD           cbStruct;\n    DWORD           dwFlags;\n    HWND            hWndOwner;\n    LPCSTR          lpszCaption;\n    LPFNOLEUIHOOK   lpfnHook;\n    LPARAM          lCustData;\n    HINSTANCE       hInstance;\n    LPCSTR          lpszTemplate;\n    HRSRC           hResource;\n    LPOLEUILINKCONTAINERA lpOleUILinkContainer;\n} OLEUIEDITLINKSA, *POLEUIEDITLINKSA, *LPOLEUIEDITLINKSA;\n\nDECL_WINELIB_TYPE_AW(OLEUIEDITLINKS)\nDECL_WINELIB_TYPE_AW(POLEUIEDITLINKS)\nDECL_WINELIB_TYPE_AW(LPOLEUIEDITLINKS)\n\n\n/***********************************************************************************\n * BUSY DIALOG\n */\ntypedef struct tagOLEUIBUSYA\n{\n    DWORD           cbStruct;\n    DWORD           dwFlags;\n    HWND            hWndOwner;\n    LPCSTR          lpszCaption;\n    LPFNOLEUIHOOK   lpfnHook;\n    LPARAM          lCustData;\n    HINSTANCE       hInstance;\n    LPCSTR          lpszTemplate;\n    HRSRC           hResource;\n    HTASK           hTask;\n    HWND*           lphWndDialog;\n} OLEUIBUSYA, *POLEUIBUSYA, *LPOLEUIBUSYA;\n\ntypedef struct tagOLEUIBUSYW\n{\n    DWORD           cbStruct;\n    DWORD           dwFlags;\n    HWND            hWndOwner;\n    LPCWSTR         lpszCaption;\n    LPFNOLEUIHOOK   lpfnHook;\n    LPARAM          lCustData;\n    HINSTANCE       hInstance;\n    LPCWSTR         lpszTemplate;\n    HRSRC           hResource;\n    HTASK           hTask;\n    HWND*           lphWndDialog;\n} OLEUIBUSYW, *POLEUIBUSYW, *LPOLEUIBUSYW;\n\nDECL_WINELIB_TYPE_AW(OLEUIBUSY)\nDECL_WINELIB_TYPE_AW(POLEUIBUSY)\nDECL_WINELIB_TYPE_AW(LPOLEUIBUSY)\n\n\n#define BZ_DISABLECANCELBUTTON          __MSABI_LONG(0x00000001)\n#define BZ_DISABLESWITCHTOBUTTON        __MSABI_LONG(0x00000002)\n#define BZ_DISABLERETRYBUTTON           __MSABI_LONG(0x00000004)\n#define BZ_NOTRESPONDINGDIALOG          __MSABI_LONG(0x00000008)\n\n/***********************************************************************************\n * OBJECT PROPERTIES DIALOG\n */\n\nstruct tagOLEUIOBJECTPROPSW;\nstruct tagOLEUIOBJECTPROPSA;\n\ntypedef struct tagOLEUIGNRLPROPSA\n{\n    DWORD           cbStruct;\n    DWORD           dwFlags;\n    DWORD           dwReserved1[2];\n    LPFNOLEUIHOOK   lpfnHook;\n    LPARAM          lCustData;\n    DWORD           dwReserved2[3];\n    struct tagOLEUIOBJECTPROPSA* lpOP;\n\n} OLEUIGNRLPROPSA, *POLEUIGNRLPROPSA, *LPOLEUIGNRLPROPSA;\n\ntypedef struct tagOLEUIGNRLPROPSW\n{\n    DWORD           cbStruct;\n    DWORD           dwFlags;\n    DWORD           dwReserved1[2];\n    LPFNOLEUIHOOK   lpfnHook;\n    LPARAM          lCustData;\n    DWORD           dwReserved2[3];\n    struct tagOLEUIOBJECTPROPSW* lpOP;\n} OLEUIGNRLPROPSW, *POLEUIGNRLPROPSW, *LPOLEUIGNRLPROPSW;\n\nDECL_WINELIB_TYPE_AW(OLEUIGNRLPROPS)\nDECL_WINELIB_TYPE_AW(POLEUIGNRLPROPS)\nDECL_WINELIB_TYPE_AW(LPOLEUIGNRLPROPS)\n\ntypedef struct tagOLEUIVIEWPROPSA\n{\n    DWORD           cbStruct;\n    DWORD           dwFlags;\n    DWORD           dwReserved1[2];\n    LPFNOLEUIHOOK   lpfnHook;\n    LPARAM          lCustData;\n    DWORD           dwReserved2[3];\n    struct tagOLEUIOBJECTPROPSA* lpOP;\n    INT             nScaleMin;\n    INT             nScaleMax;\n} OLEUIVIEWPROPSA, *POLEUIVIEWPROPSA, *LPOLEUIVIEWPROPSA;\n\ntypedef struct tagOLEUIVIEWPROPSW\n{\n    DWORD           cbStruct;\n    DWORD           dwFlags;\n    DWORD           dwReserved1[2];\n    LPFNOLEUIHOOK   lpfnHook;\n    LPARAM          lCustData;\n    DWORD           dwReserved2[3];\n    struct tagOLEUIOBJECTPROPSW* lpOP;\n    INT             nScaleMin;\n    INT             nScaleMax;\n} OLEUIVIEWPROPSW, *POLEUIVIEWPROPSW, *LPOLEUIVIEWPROPSW;\n\nDECL_WINELIB_TYPE_AW(OLEUIVIEWPROPS)\nDECL_WINELIB_TYPE_AW(POLEUIVIEWPROPS)\nDECL_WINELIB_TYPE_AW(LPOLEUIVIEWPROPS)\n\n\n#define VPF_SELECTRELATIVE          __MSABI_LONG(0x00000001)\n#define VPF_DISABLERELATIVE         __MSABI_LONG(0x00000002)\n#define VPF_DISABLESCALE            __MSABI_LONG(0x00000004)\n\ntypedef struct tagOLEUILINKPROPSA\n{\n    DWORD           cbStruct;\n    DWORD           dwFlags;\n    DWORD           dwReserved1[2];\n    LPFNOLEUIHOOK   lpfnHook;\n    LPARAM          lCustData;\n    DWORD           dwReserved2[3];\n    struct tagOLEUIOBJECTPROPSA* lpOP;\n} OLEUILINKPROPSA, *POLEUILINKPROPSA, *LPOLEUILINKPROPSA;\n\ntypedef struct tagOLEUILINKPROPSW\n{\n    DWORD           cbStruct;\n    DWORD           dwFlags;\n    DWORD           dwReserved1[2];\n    LPFNOLEUIHOOK   lpfnHook;\n    LPARAM          lCustData;\n    DWORD           dwReserved2[3];\n    struct tagOLEUIOBJECTPROPSW* lpOP;\n} OLEUILINKPROPSW, *POLEUILINKPROPSW, *LPOLEUILINKPROPSW;\n\nDECL_WINELIB_TYPE_AW(OLEUILINKPROPS)\nDECL_WINELIB_TYPE_AW(POLEUILINKPROPS)\nDECL_WINELIB_TYPE_AW(LPOLEUILINKPROPS)\n\ntypedef struct tagOLEUIOBJECTPROPSA\n{\n    DWORD                cbStruct;\n    DWORD                dwFlags;\n    LPPROPSHEETHEADERA   lpPS;\n    DWORD                dwObject;\n    LPOLEUIOBJINFOA      lpObjInfo;\n    DWORD                dwLink;\n    LPOLEUILINKINFOA     lpLinkInfo;\n    LPOLEUIGNRLPROPSA    lpGP;\n    LPOLEUIVIEWPROPSA    lpVP;\n    LPOLEUILINKPROPSA    lpLP;\n} OLEUIOBJECTPROPSA, *POLEUIOBJECTPROPSA, *LPOLEUIOBJECTPROPSA;\n\ntypedef struct tagOLEUIOBJECTPROPSW\n{\n    DWORD                cbStruct;\n    DWORD                dwFlags;\n    LPPROPSHEETHEADERW   lpPS;\n    DWORD                dwObject;\n    LPOLEUIOBJINFOW      lpObjInfo;\n    DWORD                dwLink;\n    LPOLEUILINKINFOW     lpLinkInfo;\n    LPOLEUIGNRLPROPSW    lpGP;\n    LPOLEUIVIEWPROPSW    lpVP;\n    LPOLEUILINKPROPSW    lpLP;\n} OLEUIOBJECTPROPSW, *POLEUIOBJECTPROPSW, *LPOLEUIOBJECTPROPSW;\n\nDECL_WINELIB_TYPE_AW(OLEUIOBJECTPROPS)\nDECL_WINELIB_TYPE_AW(POLEUIOBJECTPROPS)\nDECL_WINELIB_TYPE_AW(LPOLEUIOBJECTPROPS)\n\n#define OPF_OBJECTISLINK                __MSABI_LONG(0x00000001)\n#define OPF_NOFILLDEFAULT               __MSABI_LONG(0x00000002)\n#define OPF_SHOWHELP                    __MSABI_LONG(0x00000004)\n#define OPF_DISABLECONVERT              __MSABI_LONG(0x00000008)\n\n\n/************************************************************************************\n * CHANGE SOURCE DIALOG\n */\n\n\ntypedef struct tagOLEUICHANGESOURCEW\n{\n    DWORD           cbStruct;\n    DWORD           dwFlags;\n    HWND            hWndOwner;\n    LPCWSTR         lpszCaption;\n    LPFNOLEUIHOOK   lpfnHook;\n    LPARAM          lCustData;\n    HINSTANCE       hInstance;\n    LPCWSTR         lpszTemplate;\n    HRSRC           hResource;\n    OPENFILENAMEW*lpOFN;\n    DWORD           dwReserved1[4];\n    LPOLEUILINKCONTAINERW lpOleUILinkContainer;\n    DWORD           dwLink;\n    LPWSTR          lpszDisplayName;\n    ULONG           nFileLength;\n    LPWSTR          lpszFrom;\n    LPWSTR          lpszTo;\n} OLEUICHANGESOURCEW, *POLEUICHANGESOURCEW, *LPOLEUICHANGESOURCEW;\n\n\ntypedef struct tagOLEUICHANGESOURCEA\n{\n    DWORD           cbStruct;\n    DWORD           dwFlags;\n    HWND            hWndOwner;\n    LPCSTR          lpszCaption;\n    LPFNOLEUIHOOK   lpfnHook;\n    LPARAM          lCustData;\n    HINSTANCE       hInstance;\n    LPCSTR          lpszTemplate;\n    HRSRC           hResource;\n    OPENFILENAMEA*  lpOFN;\n    DWORD           dwReserved1[4];\n    LPOLEUILINKCONTAINERA lpOleUILinkContainer;\n    DWORD           dwLink;\n    LPSTR           lpszDisplayName;\n    ULONG           nFileLength;\n    LPSTR           lpszFrom;\n    LPSTR           lpszTo;\n} OLEUICHANGESOURCEA, *POLEUICHANGESOURCEA, *LPOLEUICHANGESOURCEA;\n\n\nDECL_WINELIB_TYPE_AW(OLEUICHANGESOURCE)\nDECL_WINELIB_TYPE_AW(POLEUICHANGESOURCE)\nDECL_WINELIB_TYPE_AW(LPOLEUICHANGESOURCE)\n\n/* Change Source Dialog flags */\n#define CSF_SHOWHELP                    __MSABI_LONG(0x00000001)\n#define CSF_VALIDSOURCE                 __MSABI_LONG(0x00000002)\n#define CSF_ONLYGETSOURCE               __MSABI_LONG(0x00000004)\n#define CSF_EXPLORER                    __MSABI_LONG(0x00000008)\n\n\n/*****************************************************************************\n * IOleUILinkContainer interface\n */\n#define INTERFACE   IOleUILinkContainerA\nDECLARE_INTERFACE_(IOleUILinkContainerA,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IOleUILinkContainerA methods ***/\n    STDMETHOD_(DWORD,GetNextLink)(THIS_ DWORD dwLink) PURE;\n    STDMETHOD(SetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD dwUpdateOpt) PURE;\n    STDMETHOD(GetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD *lpdwUpdateOpt) PURE;\n    STDMETHOD(SetLinkSource)(THIS_ DWORD dwLink, LPSTR lpszDisplayName,\n                ULONG lenFileName, ULONG *pchEaten, BOOL fValidateSource) PURE;\n    STDMETHOD(GetLinkSource)(THIS_ DWORD dwLink, LPSTR *lplpszDisplayName, ULONG *lplenFileName,\n                LPSTR *lplpszFullLinkType,  LPSTR *lplpszShortLinkType,\n                BOOL *lpfSourceAvailable,  BOOL *lpfIsSelected) PURE;\n    STDMETHOD(OpenLinkSource)(THIS_ DWORD dwLink) PURE;\n    STDMETHOD(UpdateLink)(THIS_ DWORD dwLink, BOOL fErrorMessage, BOOL fReserved) PURE;\n    STDMETHOD(CancelLink)(THIS_ DWORD dwLink) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE   IOleUILinkContainerW\nDECLARE_INTERFACE_(IOleUILinkContainerW,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IOleUILinkContainerW methods ***/\n    STDMETHOD_(DWORD,GetNextLink)(THIS_ DWORD dwLink) PURE;\n    STDMETHOD(SetLinkUpdateOptions)(THIS_ DWORD dwLink,  DWORD dwUpdateOpt) PURE;\n    STDMETHOD(GetLinkUpdateOptions)(THIS_ DWORD dwLink,  DWORD *lpdwUpdateOpt) PURE;\n    STDMETHOD(SetLinkSource)(THIS_ DWORD dwLink,  LPWSTR lpszDisplayName,\n                ULONG lenFileName,  ULONG *pchEaten,  BOOL fValidateSource) PURE;\n    STDMETHOD(GetLinkSource)(THIS_ DWORD dwLink, LPWSTR *lplpszDisplayName, ULONG *lplenFileName,\n                LPWSTR *lplpszFullLinkType,  LPWSTR *lplpszShortLinkType,\n                BOOL *lpfSourceAvailable,  BOOL *lpfIsSelected) PURE;\n    STDMETHOD(OpenLinkSource)(THIS_ DWORD dwLink) PURE;\n    STDMETHOD(UpdateLink)(THIS_ DWORD dwLink, BOOL fErrorMessage, BOOL fReserved) PURE;\n    STDMETHOD(CancelLink)(THIS_ DWORD dwLink) PURE;\n};\n#undef INTERFACE\n\nDECL_WINELIB_TYPE_AW(IOleUILinkContainer)\nDECL_WINELIB_TYPE_AW(POLEUILINKCONTAINER)\nDECL_WINELIB_TYPE_AW(LPOLEUILINKCONTAINER)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IOleUILinkContainer_QueryInterface(p,a,b)          (p)->lpVtbl->QueryInterface(p,a,b)\n#define IOleUILinkContainer_AddRef(p)                      (p)->lpVtbl->AddRef(p)\n#define IOleUILinkContainer_Release(p)                     (p)->lpVtbl->Release(p)\n/*** IOleUILinkContainer methods ***/\n#define IOleUILinkContainer_GetNextLink(p,a)               (p)->lpVtbl->GetNextLink(p,a)\n#define IOleUILinkContainer_SetLinkUpdateOptions(p,a,b)    (p)->lpVtbl->SetLinkUpdateOptions(p,a,b)\n#define IOleUILinkContainer_GetLinkUpdateOptions(p,a,b)    (p)->lpVtbl->GetLinkUpdateOptions(p,a,b)\n#define IOleUILinkContainer_SetLinkSource(p,a,b,c,d,e)     (p)->lpVtbl->SetLinkSource(p,a,b,c,d,e)\n#define IOleUILinkContainer_GetLinkSource(p,a,b,c,d,e,f,g) (p)->lpVtbl->GetLinkSource(p,a,b,c,d,e,f,g)\n#define IOleUILinkContainer_OpenLinkSource(p,a)            (p)->lpVtbl->OpenLinkSource(p,a)\n#define IOleUILinkContainer_UpdateLink(p,a,b,c)            (p)->lpVtbl->UpdateLink(p,a,b,c)\n#define IOleUILinkContainer_CancelLink(p,a)                (p)->lpVtbl->CancelLink(p,a)\n#endif\n\n\n/*****************************************************************************\n * IOleUILinkInfo interface\n */\n#define INTERFACE   IOleUILinkInfoA\nDECLARE_INTERFACE_(IOleUILinkInfoA,IOleUILinkContainerA)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IOleUILinkContainerA methods ***/\n    STDMETHOD_(DWORD,GetNextLink)(THIS_ DWORD dwLink) PURE;\n    STDMETHOD(SetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD dwUpdateOpt) PURE;\n    STDMETHOD(GetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD *lpdwUpdateOpt) PURE;\n    STDMETHOD(SetLinkSource)(THIS_ DWORD dwLink, LPSTR lpszDisplayName,\n                ULONG lenFileName, ULONG *pchEaten, BOOL fValidateSource) PURE;\n    STDMETHOD(GetLinkSource)(THIS_ DWORD dwLink, LPSTR *lplpszDisplayName, ULONG *lplenFileName,\n                LPSTR *lplpszFullLinkType,  LPSTR *lplpszShortLinkType,\n                BOOL *lpfSourceAvailable,  BOOL *lpfIsSelected) PURE;\n    STDMETHOD(OpenLinkSource)(THIS_ DWORD dwLink) PURE;\n    STDMETHOD(UpdateLink)(THIS_ DWORD dwLink, BOOL fErrorMessage, BOOL fReserved) PURE;\n    STDMETHOD(CancelLink)(THIS_ DWORD dwLink) PURE;\n    /*** IOleUILinkInfoA methods ***/\n    STDMETHOD(GetLastUpdate)(THIS_ DWORD dwLink,  FILETIME *lpLastUpdate) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE   IOleUILinkInfoW\nDECLARE_INTERFACE_(IOleUILinkInfoW,IOleUILinkContainerW)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IOleUILinkContainerW methods ***/\n    STDMETHOD_(DWORD,GetNextLink)(THIS_ DWORD dwLink) PURE;\n    STDMETHOD(SetLinkUpdateOptions)(THIS_ DWORD dwLink,  DWORD dwUpdateOpt) PURE;\n    STDMETHOD(GetLinkUpdateOptions)(THIS_ DWORD dwLink,  DWORD *lpdwUpdateOpt) PURE;\n    STDMETHOD(SetLinkSource)(THIS_ DWORD dwLink,  LPWSTR lpszDisplayName,\n                ULONG lenFileName,  ULONG *pchEaten,  BOOL fValidateSource) PURE;\n    STDMETHOD(GetLinkSource)(THIS_ DWORD dwLink, LPWSTR *lplpszDisplayName, ULONG *lplenFileName,\n                LPWSTR *lplpszFullLinkType,  LPWSTR *lplpszShortLinkType,\n                BOOL *lpfSourceAvailable,  BOOL *lpfIsSelected) PURE;\n    STDMETHOD(OpenLinkSource)(THIS_ DWORD dwLink) PURE;\n    STDMETHOD(UpdateLink)(THIS_ DWORD dwLink, BOOL fErrorMessage, BOOL fReserved) PURE;\n    STDMETHOD(CancelLink)(THIS_ DWORD dwLink) PURE;\n    /*** IOleUILinkInfoW methods ***/\n    STDMETHOD(GetLastUpdate)(THIS_ DWORD dwLink,  FILETIME *lpLastUpdate) PURE;\n};\n#undef  INTERFACE\n\nDECL_WINELIB_TYPE_AW(IOleUILinkInfo)\nDECL_WINELIB_TYPE_AW(POLEUILINKINFO)\nDECL_WINELIB_TYPE_AW(LPOLEUILINKINFO)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IOleUILinkInfo_QueryInterface(p,a,b)          (p)->lpVtbl->QueryInterface(p,a,b)\n#define IOleUILinkInfo_AddRef(p)                      (p)->lpVtbl->AddRef(p)\n#define IOleUILinkInfo_Release(p)                     (p)->lpVtbl->Release(p)\n/*** IOleUILinkContainer methods ***/\n#define IOleUILinkInfo_GetNextLink(p,a)               (p)->lpVtbl->GetNextLink(p,a)\n#define IOleUILinkInfo_SetLinkUpdateOptions(p,a,b)    (p)->lpVtbl->SetLinkUpdateOptions(p,a,b)\n#define IOleUILinkInfo_GetLinkUpdateOptions(p,a,b)    (p)->lpVtbl->GetLinkUpdateOptions(p,a,b)\n#define IOleUILinkInfo_SetLinkSource(p,a,b,c,d,e)     (p)->lpVtbl->SetLinkSource(p,a,b,c,d,e)\n#define IOleUILinkInfo_GetLinkSource(p,a,b,c,d,e,f,g) (p)->lpVtbl->GetLinkSource(p,a,b,c,d,e,f,g)\n#define IOleUILinkInfo_OpenLinkSource(p,a)            (p)->lpVtbl->OpenLinkSource(p,a)\n#define IOleUILinkInfo_UpdateLink(p,a,b,c)            (p)->lpVtbl->UpdateLink(p,a,b,c)\n#define IOleUILinkInfo_CancelLink(p,a)                (p)->lpVtbl->CancelLink(p,a)\n/*** IOleUILinkInfo methods ***/\n#define IOleUILinkInfo_GetLastUpdate(p,a,b)           (p)->lpVtbl->GetLastUpdate(p,a,b)\n#endif\n\n\n/*****************************************************************************\n * IOleUIObjInfo interface\n */\n#define INTERFACE   IOleUIObjInfoA\nDECLARE_INTERFACE_(IOleUIObjInfoA,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IOleUIObjInfoA methods ***/\n    STDMETHOD(GetObjectInfo)(THIS_ DWORD dwObject, DWORD *lpdwObjSize, LPSTR *lplpszLabel,\n                LPSTR *lplpszType, LPSTR *lplpszShortType, LPSTR *lplpszLocation) PURE;\n    STDMETHOD(GetConvertInfo)(THIS_ DWORD dwObject, CLSID *lpClassID, WORD *lpwFormat,\n                CLSID *lpConvertDefaultClassID, LPCLSID *lplpClsidExclude, UINT *lpcClsidExclude) PURE;\n    STDMETHOD(ConvertObject)(THIS_ DWORD dwObject,  REFCLSID clsidNew) PURE;\n    STDMETHOD(GetViewInfo)(THIS_ DWORD dwObject, HGLOBAL *phMetaPict, DWORD *pdvAspect, INT *pnCurrentScale) PURE;\n    STDMETHOD(SetViewInfo)(THIS_ DWORD dwObject, HGLOBAL hMetaPict, DWORD dvAspect,\n                INT nCurrentScale, BOOL bRelativeToOrig) PURE;\n};\n#undef INTERFACE\n\n#define INTERFACE   IOleUIObjInfoW\nDECLARE_INTERFACE_(IOleUIObjInfoW,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IOleUIObjInfoW methods ***/\n    STDMETHOD(GetObjectInfo)(THIS_ DWORD dwObject, DWORD *lpdwObjSize, LPWSTR *lplpszLabel,\n                LPWSTR *lplpszType,  LPWSTR *lplpszShortType,  LPWSTR *lplpszLocation) PURE;\n    STDMETHOD(GetConvertInfo)(THIS_ DWORD dwObject, CLSID *lpClassID, WORD *lpwFormat,\n                CLSID *lpConvertDefaultClassID, LPCLSID *lplpClsidExclude, UINT *lpcClsidExclude) PURE;\n    STDMETHOD(ConvertObject)(THIS_ DWORD dwObject,  REFCLSID clsidNew) PURE;\n    STDMETHOD(GetViewInfo)(THIS_ DWORD dwObject, HGLOBAL *phMetaPict, DWORD *pdvAspect, INT *pnCurrentScale) PURE;\n    STDMETHOD(SetViewInfo)(THIS_ DWORD dwObject, HGLOBAL hMetaPict, DWORD dvAspect,\n                INT nCurrentScale, BOOL bRelativeToOrig) PURE;\n};\n#undef INTERFACE\n\nDECL_WINELIB_TYPE_AW(IOleUIObjInfo)\nDECL_WINELIB_TYPE_AW(POLEUIOBJINFO)\nDECL_WINELIB_TYPE_AW(LPOLEUIOBJINFO)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IOleUIObjInfo_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)\n#define IOleUIObjInfo_AddRef(p)                        (p)->lpVtbl->AddRef(p)\n#define IOleUIObjInfo_Release(p)                       (p)->lpVtbl->Release(p)\n/*** IOleUIObjInfo methods ***/\n#define IOleUIObjInfo_GetObjectInfo(p,a,b,c,d,e,f)     (p)->lpVtbl->GetObjectInfo(p,a,b,c,d,e,f)\n#define IOleUIObjInfo_GetConvertInfo(p,a,b,c,d,e,f)    (p)->lpVtbl->GetConvertInfo(p,a,b,c,d,e,f)\n#define IOleUIObjInfo_ConvertObject(p,a,b)             (p)->lpVtbl->ConvertObject(p,a,b)\n#define IOleUIObjInfo_GetViewInfo(p,a,b,c,d)           (p)->lpVtbl->GetViewInfo(p,a,b,c,d)\n#define IOleUIObjInfo_SetViewInfo(p,a,b,c,d,e)         (p)->lpVtbl->SetViewInfo(p,a,b,c,d,e)\n#endif\n\nUINT WINAPI  OleUIInsertObjectW(LPOLEUIINSERTOBJECTW);\nUINT WINAPI  OleUIInsertObjectA(LPOLEUIINSERTOBJECTA);\n#define      OleUIInsertObject WINELIB_NAME_AW(OleUIInsertObject)\nUINT WINAPI  OleUIConvertA(LPOLEUICONVERTA);\nUINT WINAPI  OleUIConvertW(LPOLEUICONVERTW);\n#define      OleUIConvert WINELIB_NAME_AW(OleUIConvert)\nUINT WINAPI  OleUIChangeIconA(LPOLEUICHANGEICONA);\nUINT WINAPI  OleUIChangeIconW(LPOLEUICHANGEICONW);\n#define      OleUIChangeIcon WINELIB_NAME_AW(OleUIChangeIcon)\nUINT WINAPI  OleUIBusyA(LPOLEUIBUSYA);\nUINT WINAPI  OleUIBusyW(LPOLEUIBUSYW);\n#define      OleUIBusy WINELIB_NAME_AW(OleUIBusy)\nUINT WINAPI  OleUIObjectPropertiesA(LPOLEUIOBJECTPROPSA);\nUINT WINAPI  OleUIObjectPropertiesW(LPOLEUIOBJECTPROPSW);\n#define      OleUIObjectProperties WINELIB_NAME_AW(OleUIObjectProperties)\nUINT WINAPI  OleUIChangeSourceW(LPOLEUICHANGESOURCEW);\nUINT WINAPI  OleUIChangeSourceA(LPOLEUICHANGESOURCEA);\n#define      OleUIChangeSource WINELIB_NAME_AW(OleUIChangeSource)\nUINT WINAPI  OleUIEditLinksA(LPOLEUIEDITLINKSA lpOleUIEditLinks);\nUINT WINAPI  OleUIEditLinksW(LPOLEUIEDITLINKSW lpOleUIEditLinks);\n#define      OleUIEditLinks WINELIB_NAME_AW(OleUIEditLinks)\nBOOL WINAPI  OleUIUpdateLinksA(LPOLEUILINKCONTAINERA lpOleUILinkCntr, HWND hwndParent, LPSTR lpszTitle, INT cLinks);\nBOOL WINAPI  OleUIUpdateLinksW(LPOLEUILINKCONTAINERW lpOleUILinkCntr, HWND hwndParent, LPWSTR lpszTitle, INT cLinks);\n#define      OleUIUpdateLinks WINELIB_NAME_AW(OleUIUpdateLinks)\nBOOL WINAPI  OleUIAddVerbMenuA(LPOLEOBJECT lpOleObj, LPCSTR lpszShortType, HMENU hMenu, UINT uPos, UINT uIDVerbMin, UINT uIDVerbMax,\n  BOOL bAddConvert, UINT idConvert, HMENU *lphMenu);\nBOOL WINAPI  OleUIAddVerbMenuW(LPOLEOBJECT lpOleObj, LPCWSTR lpszShortType, HMENU hMenu, UINT uPos, UINT uIDVerbMin, UINT uIDVerbMax,\n  BOOL bAddConvert, UINT idConvert, HMENU *lphMenu);\n#define      OleUIAddVerbMenu WINELIB_NAME_AW(OleUIAddVerbMenu)\nUINT WINAPI  OleUIPasteSpecialA(LPOLEUIPASTESPECIALA lpOleUIPasteSpecial);\nUINT WINAPI  OleUIPasteSpecialW(LPOLEUIPASTESPECIALW lpOleUIPasteSpecial);\n#define      OleUIPasteSpecial WINELIB_NAME_AW(OleUIPasteSpecial)\nINT  WINAPIV OleUIPromptUserA(INT,HWND, ...);\nINT  WINAPIV OleUIPromptUserW(INT,HWND, ...);\n#define      OleUIPromptUser WINELIB_NAME_AW(OleUIPromptUser)\n\n#ifdef __cplusplus\n} /* Extern \"C\" */\n#endif\n\n\n#endif  /* __WINE_OLEDLG_H */\n"
  },
  {
    "path": "wine/windows/oleidl.idl",
    "content": "/*\n * Copyright (C) 1999 Paul Quinn\n * Copyright (C) 1999 Francis Beaudet\n * Copyright (C) 2003 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"objidl.idl\";\n#endif\n\ninterface IOleInPlaceActiveObject;\n\ncpp_quote(\"#include <winuser.h>\")\n\n/*****************************************************************************\n * IOleTypes interface\n */\n[\n    uuid(b0916c84-7416-101a-bcea-08002b2b79ef)\n]\ninterface IOLETypes\n{\n    typedef enum tagOLERENDER\n    {\n\tOLERENDER_NONE = 0,\n\tOLERENDER_DRAW = 1,\n\tOLERENDER_FORMAT = 2,\n\tOLERENDER_ASIS = 3\n    } OLERENDER, *LPOLERENDER;\n\n    typedef struct tagOBJECTDESCRIPTOR\n    {\n\tULONG cbSize;\n\tCLSID clsid;\n\tDWORD dwDrawAspect;\n\tSIZEL sizel;\n\tPOINTL pointl;\n\tDWORD dwStatus;\n\tDWORD dwFullUserTypeName;\n\tDWORD dwSrcOfCopy;\n    } OBJECTDESCRIPTOR,  *POBJECTDESCRIPTOR,   *LPOBJECTDESCRIPTOR,\n      LINKSRCDESCRIPTOR, *PLINKSRCDESCRIPTOR,  *LPLINKSRCDESCRIPTOR;\n}\n\n\n/*****************************************************************************\n * IOleWindow interface\n */\n[\n    object,\n    uuid(00000114-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IOleWindow : IUnknown\n{\n    typedef [unique] IOleWindow *LPOLEWINDOW;\n\n    HRESULT GetWindow(\n        [out] HWND *phwnd);\n\n    HRESULT ContextSensitiveHelp(\n        [in] BOOL fEnterMode);\n}\n\n\n/*****************************************************************************\n * IOleInPlaceObject interface\n */\n[\n    object,\n    uuid(00000113-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IOleInPlaceObject : IOleWindow\n{\n    typedef [unique] IOleInPlaceObject *LPOLEINPLACEOBJECT;\n\n    HRESULT InPlaceDeactivate();\n\n    HRESULT UIDeactivate();\n\n    HRESULT SetObjectRects(\n        [in] LPCRECT lprcPosRect,\n        [in] LPCRECT lprcClipRect);\n\n    HRESULT ReactivateAndUndo();\n}\n\n\n/*****************************************************************************\n * IOleInPlaceUIWindow interface\n */\n[\n    object,\n    uuid(00000115-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\n\ninterface IOleInPlaceUIWindow : IOleWindow\n{\n    typedef [unique] IOleInPlaceUIWindow *LPOLEINPLACEUIWINDOW;\n\n    typedef RECT BORDERWIDTHS;\n    typedef LPRECT LPBORDERWIDTHS;\n    typedef LPCRECT LPCBORDERWIDTHS;\n\n    HRESULT GetBorder(\n        [out] LPRECT lprectBorder);\n\n    HRESULT RequestBorderSpace(\n        [in, unique] LPCBORDERWIDTHS pborderwidths);\n\n    HRESULT SetBorderSpace(\n        [in, unique] LPCBORDERWIDTHS pborderwidths);\n\n    HRESULT SetActiveObject(\n        [in, unique] IOleInPlaceActiveObject *pActiveObject,\n        [in, string, unique] LPCOLESTR pszObjName);\n}\n\n\n/* avoid conflict with Wine Unicode macros */\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef TranslateAccelerator\")\ncpp_quote(\"#endif\")\n\n/*****************************************************************************\n * IOleInPlaceFrame interface\n */\n[\n    object,\n    uuid(00000116-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IOleInPlaceFrame : IOleInPlaceUIWindow\n{\n    typedef [unique] IOleInPlaceFrame *LPOLEINPLACEFRAME;\n\n    typedef struct tagOleInPlaceFrameInfo\n    {\n        UINT cb;\n        BOOL fMDIApp;\n        HWND hwndFrame;\n        HACCEL haccel;\n        UINT cAccelEntries;\n    } OLEINPLACEFRAMEINFO, *LPOLEINPLACEFRAMEINFO;\n\n    typedef struct  tagOleMenuGroupWidths\n    {\n        LONG width[ 6 ];\n    } OLEMENUGROUPWIDTHS, *LPOLEMENUGROUPWIDTHS;\n\n    typedef HGLOBAL HOLEMENU;\n\n    HRESULT InsertMenus(\n        [in] HMENU hmenuShared,\n        [in,out] LPOLEMENUGROUPWIDTHS lpMenuWidths);\n\n    HRESULT SetMenu(\n        [in] HMENU hmenuShared,\n        [in] HOLEMENU holemenu,\n        [in] HWND hwndActiveObject);\n\n    HRESULT RemoveMenus(\n        [in] HMENU hmenuShared);\n\n    HRESULT SetStatusText(\n        [in, unique] LPCOLESTR pszStatusText);\n\n    HRESULT EnableModeless(\n        [in] BOOL fEnable);\n\n    HRESULT TranslateAccelerator(\n        [in] LPMSG lpmsg,\n        [in] WORD wID);\n}\n\n\n/*****************************************************************************\n * IOleInPlaceActiveObject interface\n */\n[\n    object,\n    uuid(00000117-0000-0000-c000-000000000046)\n]\ninterface IOleInPlaceActiveObject : IOleWindow\n{\n    typedef [unique] IOleInPlaceActiveObject *LPOLEINPLACEACTIVEOBJECT;\n\n    [local]\n    HRESULT TranslateAccelerator(\n        [in] LPMSG lpmsg);\n\n    [call_as(TranslateAccelerator)]\n    HRESULT RemoteTranslateAccelerator();\n\n    HRESULT OnFrameWindowActivate(\n        [in] BOOL fActivate);\n\n    HRESULT OnDocWindowActivate(\n        [in] BOOL fActivate);\n\n    [local]\n    HRESULT ResizeBorder(\n        [in] LPCRECT prcBorder,\n        [in, unique] IOleInPlaceUIWindow *pUIWindow,\n        [in] BOOL fFrameWindow);\n\n    [call_as(ResizeBorder)]\n    HRESULT RemoteResizeBorder(\n        [in] LPCRECT prcBorder,\n        [in] REFIID riid,\n        [in, unique, iid_is(riid)] IOleInPlaceUIWindow *pUIWindow,\n        [in] BOOL fFrameWindow);\n\n    HRESULT EnableModeless(\n        [in] BOOL fEnable);\n}\n\n\n/*****************************************************************************\n * IOleInPlaceSite interface\n */\n[\n    object,\n    uuid(00000119-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IOleInPlaceSite : IOleWindow\n{\n    typedef [unique] IOleInPlaceSite *LPOLEINPLACESITE;\n\n    HRESULT CanInPlaceActivate();\n    HRESULT OnInPlaceActivate();\n    HRESULT OnUIActivate();\n\n    HRESULT GetWindowContext(\n        [out] IOleInPlaceFrame **ppFrame,\n        [out] IOleInPlaceUIWindow **ppDoc,\n        [out] LPRECT lprcPosRect,\n        [out] LPRECT lprcClipRect,\n        [in, out] LPOLEINPLACEFRAMEINFO lpFrameInfo);\n\n    HRESULT Scroll(\n        [in] SIZE scrollExtent);\n\n    HRESULT OnUIDeactivate(\n        [in] BOOL fUndoable);\n\n    HRESULT OnInPlaceDeactivate();\n    HRESULT DiscardUndoState();\n    HRESULT DeactivateAndUndo();\n\n    HRESULT OnPosRectChange(\n        [in] LPCRECT lprcPosRect);\n}\n\n\n/*****************************************************************************\n * IParseDisplayName interface\n */\n[\n    object,\n    uuid(0000011a-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IParseDisplayName : IUnknown\n{\n    typedef [unique] IParseDisplayName *LPPARSEDISPLAYNAME;\n\n    HRESULT ParseDisplayName(\n        [in, unique] IBindCtx *pbc,\n        [in] LPOLESTR pszDisplayName,\n        [out] ULONG *pchEaten,\n        [out] IMoniker **ppmkOut);\n}\n\n\n/*****************************************************************************\n * IOleContainer interface\n */\n[\n    object,\n    uuid(0000011b-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IOleContainer : IParseDisplayName\n{\n    typedef [unique] IOleContainer *LPOLECONTAINER;\n\n    HRESULT EnumObjects(\n        [in] DWORD grfFlags,\n        [out] IEnumUnknown **ppenum);\n\n    HRESULT LockContainer(\n        [in] BOOL fLock);\n}\n\n\n/*****************************************************************************\n * IOleItemContainer interface\n */\n[\n    object,\n    uuid(0000011c-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IOleItemContainer : IOleContainer\n{\n    typedef [unique] IOleItemContainer *LPOLEITEMCONTAINER;\n\n    typedef enum tagBINDSPEED\n    {\n\tBINDSPEED_INDEFINITE = 1,\n\tBINDSPEED_MODERATE = 2,\n\tBINDSPEED_IMMEDIATE = 3\n    } BINDSPEED;\n\n    typedef enum tagOLECONTF\n    {\n\tOLECONTF_EMBEDDINGS = 1,\n\tOLECONTF_LINKS = 2,\n\tOLECONTF_OTHERS = 4,\n\tOLECONTF_ONLYUSER = 8,\n\tOLECONTF_ONLYIFRUNNING = 16\n    } OLECONTF;\n\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef GetObject\")\ncpp_quote(\"#endif\")\n    HRESULT GetObject(\n        [in] LPOLESTR pszItem,\n        [in] DWORD dwSpeedNeeded,\n        [in, unique] IBindCtx *pbc,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppvObject);\n\n    HRESULT GetObjectStorage(\n        [in] LPOLESTR pszItem,\n        [in, unique] IBindCtx *pbc,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppvStorage);\n\n    HRESULT IsRunning(\n        [in] LPOLESTR pszItem);\n}\n\n\n/*****************************************************************************\n * IOleLink interface\n */\n[\n    object,\n    uuid(0000011d-0000-0000-c000-000000000046)\n]\ninterface IOleLink : IUnknown\n{\n    typedef [unique] IOleLink *LPOLELINK;\n\n    typedef enum tagOLEUPDATE\n    {\n\tOLEUPDATE_ALWAYS = 1,\n\tOLEUPDATE_ONCALL = 3\n    } OLEUPDATE, *POLEUPDATE, *LPOLEUPDATE;\n\n    typedef enum tagOLELINKBIND\n    {\n\tOLELINKBIND_EVENIFCLASSDIFF = 1\n    } OLELINKBIND;\n\n    HRESULT SetUpdateOptions(\n        [in] DWORD dwUpdateOpt);\n\n    HRESULT GetUpdateOptions(\n        [out] DWORD *pdwUpdateOpt);\n\n    HRESULT SetSourceMoniker(\n        [in, unique] IMoniker *pmk,\n        [in] REFCLSID rclsid);\n\n    HRESULT GetSourceMoniker(\n        [out] IMoniker **ppmk);\n\n    HRESULT SetSourceDisplayName(\n        [in]LPCOLESTR pszStatusText);\n\n    HRESULT GetSourceDisplayName(\n        [out] LPOLESTR *ppszDisplayName);\n\n    HRESULT BindToSource(\n        [in] DWORD bindflags,\n        [in, unique] IBindCtx *pbc);\n\n    HRESULT BindIfRunning();\n\n    HRESULT GetBoundSource(\n        [out] IUnknown **ppunk);\n\n    HRESULT UnbindSource();\n\n    HRESULT Update(\n        [in, unique] IBindCtx *pbc);\n}\n\n\n/*****************************************************************************\n * IOleClientSite interface\n */\n[\n    object,\n    uuid(00000118-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IOleClientSite : IUnknown\n{\n    typedef [unique] IOleClientSite * LPOLECLIENTSITE;\n\n    HRESULT SaveObject();\n\n    HRESULT GetMoniker(\n        [in] DWORD dwAssign,\n        [in] DWORD dwWhichMoniker,\n        [out] IMoniker **ppmk);\n\n    HRESULT GetContainer(\n        [out] IOleContainer **ppContainer);\n\n    HRESULT ShowObject();\n\n    HRESULT OnShowWindow(\n        [in] BOOL fShow);\n\n    HRESULT RequestNewObjectLayout();\n}\n\n\n/*****************************************************************************\n * IOleCache interface\n */\n[\n    object,\n    uuid(0000011e-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IOleCache : IUnknown\n{\n    typedef [unique] IOleCache *LPOLECACHE;\n\n    HRESULT Cache(\n        [in, unique] FORMATETC *pformatetc,\n        [in] DWORD advf,\n        [out] DWORD *pdwConnection);\n\n    HRESULT Uncache(\n        [in] DWORD dwConnection);\n\n    HRESULT EnumCache(\n        [out] IEnumSTATDATA **ppenumSTATDATA);\n\n    HRESULT InitCache(\n        [in, unique] IDataObject *pDataObject);\n\n    HRESULT SetData(\n        [in, unique] FORMATETC *pformatetc,\n        [in, unique] STGMEDIUM *pmedium,\n        [in] BOOL fRelease);\n}\n\n\n/*****************************************************************************\n * IOleCache2 interface\n */\n[\n    object,\n    uuid(00000128-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IOleCache2 : IOleCache\n{\n    typedef [unique] IOleCache2 *LPOLECACHE2;\n\n    const DWORD UPDFCACHE_NODATACACHE = 0x00000001;\n    const DWORD UPDFCACHE_ONSAVECACHE = 0x00000002;\n    const DWORD UPDFCACHE_ONSTOPCACHE = 0x00000004;\n    const DWORD UPDFCACHE_NORMALCACHE = 0x00000008;\n    const DWORD UPDFCACHE_IFBLANK     = 0x00000010;\n    const DWORD UPDFCACHE_ONLYIFBLANK = 0x80000000;\n\n    const DWORD UPDFCACHE_IFBLANKORONSAVECACHE = (UPDFCACHE_IFBLANK | UPDFCACHE_ONSAVECACHE);\n    const DWORD UPDFCACHE_ALL = ((DWORD)(~(UPDFCACHE_ONLYIFBLANK)));\n    const DWORD UPDFCACHE_ALLBUTNODATACACHE = (UPDFCACHE_ALL & ((DWORD)(~UPDFCACHE_NODATACACHE)));\n\n    typedef enum tagDISCARDCACHE\n    {\n        DISCARDCACHE_SAVEIFDIRTY = 0,\n        DISCARDCACHE_NOSAVE =  1\n    } DISCARDCACHE;\n\n    [local]\n    HRESULT UpdateCache(\n        [in] LPDATAOBJECT pDataObject,\n        [in] DWORD grfUpdf,\n        [in] LPVOID pReserved);\n\n    [call_as(UpdateCache)]\n    HRESULT RemoteUpdateCache(\n        [in] LPDATAOBJECT pDataObject,\n        [in] DWORD grfUpdf,\n        [in] LONG_PTR pReserved);\n\n    HRESULT DiscardCache(\n        [in] DWORD dwDiscardOptions);\n}\n\n\n/*****************************************************************************\n * IOleCacheControl interface\n */\n[\n    object,\n    uuid(00000129-0000-0000-c000-000000000046)\n]\ninterface IOleCacheControl : IUnknown\n{\n    typedef [unique] IOleCacheControl *LPOLECACHECONTROL;\n\n    HRESULT OnRun(\n        LPDATAOBJECT pDataObject);\n\n    HRESULT OnStop();\n}\n\n\n/*****************************************************************************\n *  IEnumOLEVERB interface\n */\n[\n    object,\n    uuid(00000104-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IEnumOLEVERB : IUnknown\n{\n    typedef [unique] IEnumOLEVERB *LPENUMOLEVERB;\n\n    typedef struct tagOLEVERB\n    {\n\tLONG lVerb;\n\tLPOLESTR lpszVerbName;\n\tDWORD fuFlags;\n\tDWORD grfAttribs;\n    } OLEVERB, *LPOLEVERB;\n\n    typedef enum tagOLEVERBATTRIB\n    {\n\tOLEVERBATTRIB_NEVERDIRTIES = 1,\n\tOLEVERBATTRIB_ONCONTAINERMENU = 2\n    } OLEVERBATTRIB;\n\n    [local]\n    HRESULT Next(\n        [in] ULONG celt,\n        [out, size_is(celt), length_is(*pceltFetched)] LPOLEVERB rgelt,\n        [out] ULONG *pceltFetched);\n\n    [call_as(Next)]\n    HRESULT RemoteNext(\n        [in] ULONG celt,\n        [out, size_is(celt), length_is(*pceltFetched)] LPOLEVERB rgelt,\n        [out] ULONG *pceltFetched);\n\n    HRESULT Skip(\n        [in] ULONG celt);\n\n    HRESULT Reset();\n\n    HRESULT Clone(\n        [out] IEnumOLEVERB **ppenum);\n}\n\n\n/*****************************************************************************\n * IOleObject interface\n */\n[\n    object,\n    uuid(00000112-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IOleObject : IUnknown\n{\n    typedef [unique] IOleObject *LPOLEOBJECT;\n\n    typedef enum tagOLEGETMONIKER\n    {\n\tOLEGETMONIKER_ONLYIFTHERE = 1,\n\tOLEGETMONIKER_FORCEASSIGN = 2,\n\tOLEGETMONIKER_UNASSIGN = 3,\n\tOLEGETMONIKER_TEMPFORUSER = 4\n    } OLEGETMONIKER;\n\n    typedef enum tagOLEWHICHMK\n    {\n\tOLEWHICHMK_CONTAINER = 1,\n\tOLEWHICHMK_OBJREL = 2,\n\tOLEWHICHMK_OBJFULL = 3\n    } OLEWHICHMK;\n\n    typedef enum tagUSERCLASSTYPE\n    {\n\tUSERCLASSTYPE_FULL = 1,\n\tUSERCLASSTYPE_SHORT = 2,\n\tUSERCLASSTYPE_APPNAME = 3\n    } USERCLASSTYPE;\n\n    typedef enum tagOLEMISC\n    {\n\tOLEMISC_RECOMPOSEONRESIZE = 0x1,\n\tOLEMISC_ONLYICONIC = 0x2,\n\tOLEMISC_INSERTNOTREPLACE = 0x4,\n\tOLEMISC_STATIC = 0x8,\n\tOLEMISC_CANTLINKINSIDE = 0x10,\n\tOLEMISC_CANLINKBYOLE1 = 0x20,\n\tOLEMISC_ISLINKOBJECT = 0x40,\n\tOLEMISC_INSIDEOUT = 0x80,\n\tOLEMISC_ACTIVATEWHENVISIBLE = 0x100,\n\tOLEMISC_RENDERINGISDEVICEINDEPENDENT = 0x200,\n\tOLEMISC_INVISIBLEATRUNTIME = 0x400,\n\tOLEMISC_ALWAYSRUN = 0x800,\n\tOLEMISC_ACTSLIKEBUTTON = 0x1000,\n\tOLEMISC_ACTSLIKELABEL = 0x2000,\n\tOLEMISC_NOUIACTIVATE = 0x4000,\n\tOLEMISC_ALIGNABLE = 0x8000,\n\tOLEMISC_SIMPLEFRAME = 0x10000,\n\tOLEMISC_SETCLIENTSITEFIRST = 0x20000,\n\tOLEMISC_IMEMODE = 0x40000,\n\tOLEMISC_IGNOREACTIVATEWHENVISIBLE = 0x80000,\n\tOLEMISC_WANTSTOMENUMERGE = 0x100000,\n\tOLEMISC_SUPPORTSMULTILEVELUNDO = 0x200000\n    } OLEMISC;\n\n    typedef enum tagOLECLOSE\n    {\n\tOLECLOSE_SAVEIFDIRTY = 0,\n\tOLECLOSE_NOSAVE = 1,\n\tOLECLOSE_PROMPTSAVE = 2\n    } OLECLOSE;\n\n    HRESULT SetClientSite(\n        [in, unique] IOleClientSite *pClientSite);\n\n    HRESULT GetClientSite(\n        [out] IOleClientSite **ppClientSite);\n\n    HRESULT SetHostNames(\n        [in] LPCOLESTR szContainerApp,\n        [in, unique] LPCOLESTR szContainerObj);\n\n    HRESULT Close(\n        [in] DWORD dwSaveOption);\n\n    HRESULT SetMoniker(\n        [in] DWORD dwWhichMoniker,\n        [in, unique] IMoniker *pmk);\n\n    HRESULT GetMoniker(\n        [in] DWORD dwAssign,\n        [in] DWORD dwWhichMoniker,\n        [out] IMoniker **ppmk);\n\n    HRESULT InitFromData(\n        [in, unique] IDataObject *pDataObject,\n        [in] BOOL fCreation,\n        [in] DWORD dwReserved);\n\n    HRESULT GetClipboardData(\n        [in] DWORD dwReserved,\n        [out] IDataObject **ppDataObject);\n\n    HRESULT DoVerb(\n        [in] LONG iVerb,\n        [in, unique] LPMSG lpmsg,\n        [in, unique] IOleClientSite *pActiveSite,\n        [in] LONG lindex,\n        [in] HWND hwndParent,\n        [in, unique] LPCRECT lprcPosRect);\n\n    HRESULT EnumVerbs(\n        [out] IEnumOLEVERB **ppEnumOleVerb);\n\n    HRESULT Update();\n\n    HRESULT IsUpToDate();\n\n    HRESULT GetUserClassID(\n        [out] CLSID *pClsid);\n\n    HRESULT GetUserType(\n        [in] DWORD dwFormOfType,\n        [out] LPOLESTR *pszUserType);\n\n    HRESULT SetExtent(\n        [in] DWORD dwDrawAspect,\n        [in] SIZEL *psizel);\n\n    HRESULT GetExtent(\n        [in] DWORD dwDrawAspect,\n        [out] SIZEL *psizel);\n\n    HRESULT Advise(\n        [in, unique] IAdviseSink *pAdvSink,\n        [out] DWORD *pdwConnection);\n\n    HRESULT Unadvise(\n        [in] DWORD dwConnection);\n\n    HRESULT EnumAdvise(\n        [out] IEnumSTATDATA **ppenumAdvise);\n\n    HRESULT GetMiscStatus(\n        [in] DWORD dwAspect,\n        [out] DWORD *pdwStatus);\n\n    HRESULT SetColorScheme(\n        [in] LOGPALETTE *pLogpal);\n}\n\n\n/*****************************************************************************\n * IOleAdviseHolder interface\n */\n[\n    local,\n    object,\n    uuid(00000111-0000-0000-c000-000000000046)\n]\ninterface IOleAdviseHolder : IUnknown\n{\n    typedef [unique] IOleAdviseHolder * LPOLEADVISEHOLDER;\n\n    HRESULT Advise(\n        [in, unique] IAdviseSink *pAdvise,\n        [out] DWORD *pdwConnection);\n\n    HRESULT Unadvise(\n        [in] DWORD dwConnection);\n\n    HRESULT EnumAdvise(\n        [out] IEnumSTATDATA **ppenumAdvise);\n\n    HRESULT SendOnRename(\n        [in, unique] IMoniker *pmk);\n\n    HRESULT SendOnSave();\n    HRESULT SendOnClose();\n}\n\n\n/*****************************************************************************\n * IContinue interface\n */\n[\n    object,\n    uuid(0000012a-0000-0000-c000-000000000046)\n]\ninterface IContinue : IUnknown\n{\n    HRESULT FContinue();\n}\n\n\n/*****************************************************************************\n * IViewObject interface\n */\n[\n    object,\n    uuid(0000010d-0000-0000-c000-000000000046)\n]\ninterface IViewObject : IUnknown\n{\n    typedef [unique] IViewObject *LPVIEWOBJECT;\n\n    [local]\n    HRESULT Draw(\n        [in] DWORD dwDrawAspect,\n        [in] LONG lindex,\n        [in, unique] void * pvAspect,\n        [in, unique] DVTARGETDEVICE *ptd,\n        [in] HDC hdcTargetDev,\n        [in] HDC hdcDraw,\n        [in] LPCRECTL lprcBounds,\n        [in, unique] LPCRECTL lprcWBounds,\n        [in] BOOL (*pfnContinue)(ULONG_PTR dwContinue),\n        [in] ULONG_PTR dwContinue);\n\n    [call_as(Draw)]\n    HRESULT RemoteDraw(\n        [in] DWORD dwDrawAspect,\n        [in] LONG lindex,\n        [in] ULONG_PTR pvAspect,\n        [in, unique] DVTARGETDEVICE *ptd,\n        [in] ULONG_PTR hdcTargetDev,\n        [in] ULONG_PTR hdcDraw,\n        [in] LPCRECTL lprcBounds,\n        [in, unique] LPCRECTL lprcWBounds,\n        [in] IContinue *pContinue);\n\n    [local]\n    HRESULT GetColorSet(\n        [in] DWORD dwDrawAspect,\n        [in] LONG lindex,\n        [in, unique] void *pvAspect,\n        [in, unique] DVTARGETDEVICE *ptd,\n        [in] HDC hicTargetDev,\n        [out] LOGPALETTE **ppColorSet);\n\n    [call_as(GetColorSet)]\n    HRESULT RemoteGetColorSet(\n        [in] DWORD dwDrawAspect,\n        [in] LONG lindex,\n        [in] ULONG_PTR pvAspect,\n        [in, unique] DVTARGETDEVICE *ptd,\n        [in] ULONG_PTR hicTargetDev,\n        [out] LOGPALETTE **ppColorSet);\n\n    [local]\n    HRESULT Freeze(\n        [in] DWORD dwDrawAspect,\n        [in] LONG lindex,\n        [in, unique] void *pvAspect,\n        [out] DWORD *pdwFreeze);\n\n    [call_as(Freeze)]\n    HRESULT RemoteFreeze(\n        [in] DWORD dwDrawAspect,\n        [in] LONG lindex,\n        [in] ULONG_PTR pvAspect,\n        [out] DWORD *pdwFreeze);\n\n    HRESULT Unfreeze(\n        [in] DWORD dwFreeze);\n\n    HRESULT SetAdvise(\n        [in] DWORD aspects,\n        [in] DWORD advf,\n        [in, unique] IAdviseSink *pAdvSink);\n\n    [local]\n    HRESULT GetAdvise(\n        [out, unique] DWORD *pAspects,\n        [out, unique] DWORD *pAdvf,\n        [out] IAdviseSink **ppAdvSink);\n\n    [call_as(GetAdvise)]\n    HRESULT RemoteGetAdvise(\n        [out] DWORD *pAspects,\n        [out] DWORD *pAdvf,\n        [out] IAdviseSink **ppAdvSink);\n}\n\n\n/*****************************************************************************\n * IViewObject2 interface\n */\n[\n    object,\n    uuid(00000127-0000-0000-c000-000000000046)\n]\ninterface IViewObject2 : IViewObject\n{\n    typedef [unique] IViewObject2 *LPVIEWOBJECT2;\n\n    HRESULT GetExtent(\n        [in]  DWORD dwDrawAspect,\n        [in]  LONG lindex,\n        [in, unique]  DVTARGETDEVICE* ptd,\n        [out] LPSIZEL lpsizel);\n}\n\n\n/*****************************************************************************\n * IDropSource interface\n */\n[\n    local,\n    object,\n    uuid(00000121-0000-0000-c000-000000000046)\n]\ninterface IDropSource : IUnknown\n{\n    typedef [unique] IDropSource *LPDROPSOURCE;\n\n    HRESULT QueryContinueDrag(\n        [in] BOOL fEscapePressed,\n        [in] DWORD grfKeyState);\n\n    HRESULT GiveFeedback(\n        [in] DWORD dwEffect);\n}\n\n\n/*****************************************************************************\n * IDropTarget interface\n */\n[\n    object,\n    uuid(00000122-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IDropTarget : IUnknown\n{\n    typedef [unique] IDropTarget *LPDROPTARGET;\n\n    const DWORD MK_ALT = 0x20;\n    const DWORD DROPEFFECT_NONE = 0;\n    const DWORD DROPEFFECT_COPY = 1;\n    const DWORD DROPEFFECT_MOVE = 2;\n    const DWORD DROPEFFECT_LINK = 4;\n    const DWORD DROPEFFECT_SCROLL = 0x80000000;\n    const DWORD DD_DEFSCROLLINSET = 11;\n    const DWORD DD_DEFSCROLLDELAY = 50;\n    const DWORD DD_DEFSCROLLINTERVAL = 50;\n    const DWORD DD_DEFDRAGDELAY = 200;\n    const DWORD DD_DEFDRAGMINDIST = 2;\n\n    HRESULT DragEnter(\n        [in, unique] IDataObject *pDataObj,\n        [in] DWORD grfKeyState,\n        [in] POINTL pt,\n        [in, out] DWORD *pdwEffect);\n\n    HRESULT DragOver(\n        [in] DWORD grfKeyState,\n        [in] POINTL pt,\n        [in, out] DWORD *pdwEffect);\n\n    HRESULT DragLeave();\n\n    HRESULT Drop(\n        [in, unique] IDataObject *pDataObj,\n        [in] DWORD grfKeyState,\n        [in] POINTL pt,\n        [in, out] DWORD *pdwEffect);\n}\n\n/*****************************************************************************\n * IDropSourceNotify interface\n */\n[\n    object,\n    uuid(0000012b-0000-0000-c000-000000000046),\n    pointer_default(unique),\n    local\n]\ninterface IDropSourceNotify : IUnknown\n{\n    HRESULT DragTargetEnter( [in] HWND hwnd );\n    HRESULT DragTargetLeave( void );\n}\n"
  },
  {
    "path": "wine/windows/opcbase.idl",
    "content": "/*\n * Copyright 2018 Nikolay Sivov for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\ntypedef [v1_enum] enum\n{\n    OPC_STREAM_IO_READ = 1,\n    OPC_STREAM_IO_WRITE = 2,\n} OPC_STREAM_IO_MODE;\n\ntypedef [v1_enum] enum\n{\n    OPC_COMPRESSION_NONE = -1,\n    OPC_COMPRESSION_NORMAL = 0,\n    OPC_COMPRESSION_MAXIMUM = 1,\n    OPC_COMPRESSION_FAST = 2,\n    OPC_COMPRESSION_SUPERFAST = 3,\n} OPC_COMPRESSION_OPTIONS;\n\ntypedef [v1_enum] enum\n{\n    OPC_URI_TARGET_MODE_INTERNAL = 0,\n    OPC_URI_TARGET_MODE_EXTERNAL = 1,\n} OPC_URI_TARGET_MODE;\n\ncpp_quote(\"#define OPC_E_NONCONFORMING_URI MAKE_HRESULT(SEVERITY_ERROR, FACILITY_OPC, 0x1)\")\ncpp_quote(\"#define OPC_E_RELATIONSHIP_URI_REQUIRED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_OPC, 0x3)\")\ncpp_quote(\"#define OPC_E_INVALID_RELATIONSHIP_TARGET MAKE_HRESULT(SEVERITY_ERROR, FACILITY_OPC, 0x12)\")\ncpp_quote(\"#define OPC_E_NO_SUCH_RELATIONSHIP MAKE_HRESULT(SEVERITY_ERROR, FACILITY_OPC, 0x48)\")\ncpp_quote(\"#define OPC_E_ENUM_COLLECTION_CHANGED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_OPC, 0x50)\")\ncpp_quote(\"#define OPC_E_ENUM_INVALID_POSITION MAKE_HRESULT(SEVERITY_ERROR, FACILITY_OPC, 0x53)\")\n"
  },
  {
    "path": "wine/windows/opcobjectmodel.idl",
    "content": "/*\n * Copyright 2018 Nikolay Sivov for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\ninterface IOpcPartUri;\ninterface IOpcUri;\ninterface IOpcRelationship;\ninterface IOpcRelationshipSet;\n\ntypedef [v1_enum] enum\n{\n    OPC_READ_DEFAULT = 0,\n    OPC_VALIDATE_ON_LOAD = 1,\n    OPC_CACHE_ON_ACCESS = 2,\n} OPC_READ_FLAGS;\n\ntypedef [v1_enum] enum\n{\n    OPC_WRITE_DEFAULT = 0,\n    OPC_WRITE_FORCE_ZIP32 = 1,\n} OPC_WRITE_FLAGS;\n\n[\n    object,\n    uuid(42195949-3b79-4fc8-89c6-fc7fb979ee71),\n    pointer_default(ref)\n]\ninterface IOpcPart : IUnknown\n{\n    HRESULT GetRelationshipSet(\n        [out, retval] IOpcRelationshipSet **relationship_set\n    );\n\n    HRESULT GetContentStream(\n        [out, retval] IStream **stream\n    );\n\n    HRESULT GetName(\n        [out, retval] IOpcPartUri **name\n    );\n\n    HRESULT GetContentType(\n        [out, string, retval] LPWSTR *type\n    );\n\n    HRESULT GetCompressionOptions(\n        [out, retval] OPC_COMPRESSION_OPTIONS *options\n    );\n}\n\n[\n    object,\n    uuid(42195949-3b79-4fc8-89c6-fc7fb979ee75),\n    pointer_default(ref)\n]\ninterface IOpcPartEnumerator : IUnknown\n{\n    HRESULT MoveNext(\n        [out, retval] BOOL *has_next\n    );\n\n    HRESULT MovePrevious(\n        [out, retval] BOOL *has_previous\n    );\n\n    HRESULT GetCurrent(\n        [out, retval] IOpcPart **part\n    );\n\n    HRESULT Clone(\n        [out, retval] IOpcPartEnumerator **enumerator\n    );\n}\n\n[\n    object,\n    uuid(42195949-3b79-4fc8-89c6-fc7fb979ee76),\n    pointer_default(ref)\n]\ninterface IOpcRelationshipEnumerator : IUnknown\n{\n    HRESULT MoveNext(\n        [out, retval] BOOL *has_next\n    );\n\n    HRESULT MovePrevious(\n        [out, retval] BOOL *has_previous\n    );\n\n    HRESULT GetCurrent(\n        [out, retval] IOpcRelationship **relationship\n    );\n\n    HRESULT Clone(\n        [out, retval] IOpcRelationshipEnumerator **enumerator\n    );\n}\n\n[\n    object,\n    uuid(42195949-3b79-4fc8-89c6-fc7fb979ee73),\n    pointer_default(ref)\n]\ninterface IOpcPartSet : IUnknown\n{\n    HRESULT GetPart(\n        [in] IOpcPartUri *name,\n        [out, retval] IOpcPart **part\n    );\n\n    HRESULT CreatePart(\n        [in] IOpcPartUri *name,\n        [in, string] LPCWSTR content_type,\n        [in] OPC_COMPRESSION_OPTIONS compression_options,\n        [out, retval] IOpcPart **part\n    );\n\n    HRESULT DeletePart(\n        [in] IOpcPartUri *name\n    );\n\n    HRESULT PartExists(\n        [in] IOpcPartUri *name,\n        [out, retval] BOOL *exists\n    );\n\n    HRESULT GetEnumerator(\n        [out, retval] IOpcPartEnumerator **enumerator\n    );\n}\n\n[\n    object,\n    uuid(42195949-3b79-4fc8-89c6-fc7fb979ee72),\n    pointer_default(ref)\n]\ninterface IOpcRelationship : IUnknown\n{\n    HRESULT GetId(\n        [out, string, retval] LPWSTR *id\n    );\n\n    HRESULT GetRelationshipType(\n        [out, string, retval] LPWSTR *type\n    );\n\n    HRESULT GetSourceUri(\n        [out, retval] IOpcUri **uri\n    );\n\n    HRESULT GetTargetUri(\n        [out, retval] IUri **target\n    );\n\n    HRESULT GetTargetMode(\n        [out, retval] OPC_URI_TARGET_MODE *target_mode\n    );\n}\n\n\n[\n    object,\n    uuid(42195949-3b79-4fc8-89c6-fc7fb979ee74),\n    pointer_default(ref)\n]\ninterface IOpcRelationshipSet : IUnknown\n{\n    HRESULT GetRelationship(\n        [in, string] LPCWSTR id,\n        [out, retval] IOpcRelationship **relationship\n    );\n\n    HRESULT CreateRelationship(\n        [in, string, unique] LPCWSTR id,\n        [in, string] LPCWSTR type,\n        [in] IUri *target_uri,\n        [in] OPC_URI_TARGET_MODE target_mode,\n        [out, retval] IOpcRelationship **relationship\n    );\n\n    HRESULT DeleteRelationship(\n        [in, string] LPCWSTR id\n    );\n\n    HRESULT RelationshipExists(\n        [in, string] LPCWSTR id,\n        [out, retval] BOOL *exists\n    );\n\n    HRESULT GetEnumerator(\n        [out, retval] IOpcRelationshipEnumerator **enumerator\n    );\n\n    HRESULT GetEnumeratorForType(\n        [in, string] LPCWSTR type,\n        [out, retval] IOpcRelationshipEnumerator **enumerator\n    );\n\n    HRESULT GetRelationshipsContentStream(\n        [out, retval] IStream **stream\n    );\n}\n\n[\n    object,\n    uuid(42195949-3b79-4fc8-89c6-fc7fb979ee70),\n    pointer_default(ref)\n]\ninterface IOpcPackage : IUnknown\n{\n    HRESULT GetPartSet(\n        [out, retval] IOpcPartSet **part_set\n    );\n\n    HRESULT GetRelationshipSet(\n        [out, retval] IOpcRelationshipSet **relationship_set\n    );\n}\n"
  },
  {
    "path": "wine/windows/opcparturi.idl",
    "content": "/*\n * Copyright 2018 Nikolay Sivov for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\nimport \"ocidl.idl\";\n\n#if 0\n#pragma makedep install\n#endif\n\ninterface IOpcPartUri;\n\n[\n    object,\n    uuid(bc9c1b9b-d62c-49eb-aef0-3b4e0b28ebed),\n    nonextensible,\n    pointer_default(ref)\n]\ninterface IOpcUri : IUri\n{\n    HRESULT GetRelationshipsPartUri(\n        [out, retval] IOpcPartUri **part_uri\n    );\n\n    HRESULT GetRelativeUri(\n        [in] IOpcPartUri *part_uri,\n        [out, retval] IUri **relative_uri\n    );\n\n    HRESULT CombinePartUri(\n        [in] IUri *relative_uri,\n        [out, retval] IOpcPartUri **combined\n    );\n}\n\n[\n    object,\n    uuid(7d3babe7-88b2-46ba-85cb-4203cb016c87),\n    nonextensible,\n    pointer_default(ref)\n]\ninterface IOpcPartUri : IOpcUri\n{\n    HRESULT ComparePartUri(\n        [in] IOpcPartUri *part_uri,\n        [out, retval] INT32 *result\n    );\n\n    HRESULT GetSourceUri(\n        [out, retval] IOpcUri **source_uri\n    );\n\n    HRESULT IsRelationshipsPartUri(\n        [out, retval] BOOL *result\n    );\n}\n"
  },
  {
    "path": "wine/windows/opnrst.idl",
    "content": "/*\n * Copyright (C) 2009 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    object,\n    uuid(0c733a69-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface IOpenRowset : IUnknown\n{\n    [local]\n    HRESULT OpenRowset([in] IUnknown *pUnkOuter,\n                       [in, unique] DBID *pTableID,\n                       [in, unique] DBID *pIndexID,\n                       [in] REFIID riid,\n                       [in] ULONG cPropertySets,\n                       [in, out, size_is(cPropertySets)] DBPROPSET rgPropertySets[],\n                       [out, iid_is(riid)] IUnknown **ppRowset);\n\n    [call_as(OpenRowset)]\n    HRESULT RemoteOpenRowset([in] IUnknown *pUnkOuter,\n                             [in, unique] DBID *pTableID,\n                             [in, unique] DBID *pIndexID,\n                             [in] REFIID riid,\n                             [in] ULONG cPropertySets,\n                             [in, unique, size_is(cPropertySets)] DBPROPSET *rgPropertySets,\n                             [in, out, unique, iid_is(riid)] IUnknown **ppRowset,\n                             [in] ULONG cTotalProps,\n                             [out, size_is(cTotalProps)] DBPROPSTATUS *rgPropStatus,\n                             [out] IErrorInfo **ppErrorInfoRem);\n\n}\n"
  },
  {
    "path": "wine/windows/optary.idl",
    "content": "/*\n * Copyright 2006 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"objidl.idl\";\nimport \"oleidl.idl\";\n\n/*****************************************************************************\n *    IOptionArray interface\n */\n[\n    local,\n    object,\n    uuid(22b6d492-0f88-11d1-ba19-00c04fd912d0),\n    pointer_default(unique)\n]\ninterface IOptionArray : IUnknown\n{\n    typedef [unique] IOptionArray *LPOPTIONARRAY;\n\n    HRESULT QueryOption(\n        [in] DWORD  dwOption,\n        [out, size_is(*pcbBuf)] LPVOID pBuffer,\n        [in, out] ULONG *pcbBuf);\n\n    HRESULT SetOption(\n        [in] DWORD dwOption,\n        [in, size_is(cbBuf)] LPVOID pBuffer,\n        [in] ULONG cbBuf);\n}\n\n/*****************************************************************************\n *    IHtmlLoadOptions interface\n */\n[\n    local,\n    object,\n    uuid(a71a0808-0f88-11d1-ba19-00c04fd912d0),\n    pointer_default(unique)\n]\ninterface IHtmlLoadOptions : IOptionArray\n{\n    typedef enum {\n        HTMLLOADOPTION_CODEPAGE,\n        HTMLLOADOPTION_INETSHORTCUTPATH,\n        HTMLLOADOPTION_HYPERLINK,\n        HTMLLOADOPTION_FRAMELOAD\n    } HTMLLOADOPTION;\n}\n\ncpp_quote(\"DEFINE_GUID(CLSID_HTMLLoadOptions, 0x18845040, 0x0FA5, 0x11D1, 0xBA,0x19, 0x00,0xC0,0x4F,0xD9,0x12,0xD0);\")\n"
  },
  {
    "path": "wine/windows/patchapi.h",
    "content": "/*\n * Copyright 2011 Hans Leidekker for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _PATCHAPI_H_\n#define _PATCHAPI_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define APPLY_OPTION_FAIL_IF_EXACT  0x00000001\n#define APPLY_OPTION_FAIL_IF_CLOSE  0x00000002\n#define APPLY_OPTION_TEST_ONLY      0x00000004\n#define APPLY_OPTION_VALID_FLAGS    0x00000007\n\ntypedef struct _PATCH_IGNORE_RANGE\n{\n    ULONG OffsetInOldFile;\n    ULONG LengthInBytes;\n} PATCH_IGNORE_RANGE, *PPATCH_IGNORE_RANGE;\n\ntypedef struct _PATCH_RETAIN_RANGE\n{\n    ULONG OffsetInOldFile;\n    ULONG LengthInBytes;\n    ULONG OffsetInNewFile;\n} PATCH_RETAIN_RANGE, *PPATCH_RETAIN_RANGE;\n\nBOOL WINAPI ApplyPatchToFileA(LPCSTR,LPCSTR,LPCSTR,ULONG);\nBOOL WINAPI ApplyPatchToFileW(LPCWSTR,LPCWSTR,LPCWSTR,ULONG);\n#define     ApplyPatchToFile WINELIB_NAME_AW(ApplyPatchToFile)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _PATCHAPI_H_ */\n"
  },
  {
    "path": "wine/windows/pathcch.h",
    "content": "/*\n * Copyright 2017 Michael Müller\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#define PATHCCH_NONE                            0x00\n#define PATHCCH_ALLOW_LONG_PATHS                0x01\n#define PATHCCH_FORCE_ENABLE_LONG_NAME_PROCESS  0x02\n#define PATHCCH_FORCE_DISABLE_LONG_NAME_PROCESS 0x04\n#define PATHCCH_DO_NOT_NORMALIZE_SEGMENTS       0x08\n#define PATHCCH_ENSURE_IS_EXTENDED_LENGTH_PATH  0x10\n\nHRESULT WINAPI PathCchAddBackslash(WCHAR *path, SIZE_T size);\nHRESULT WINAPI PathCchAddBackslashEx(WCHAR *path, SIZE_T size, WCHAR **end, SIZE_T *remaining);\nHRESULT WINAPI PathCchCombineEx(WCHAR *out, SIZE_T size, const WCHAR *path1, const WCHAR *path2, DWORD flags);\n"
  },
  {
    "path": "wine/windows/pdh.h",
    "content": "/*\n * Performance Data Helper\n *\n * Copyright 2007 Hans Leidekker\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _PDH_H_\n#define _PDH_H_\n\n#include <windows.h>\n#include <winperf.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef LONG   PDH_STATUS;\ntypedef HANDLE PDH_HQUERY;\ntypedef HANDLE PDH_HCOUNTER;\ntypedef HANDLE PDH_HLOG;\n\ntypedef PDH_HCOUNTER HCOUNTER;\ntypedef PDH_HQUERY   HQUERY;\ntypedef PDH_HLOG     HLOG;\n\n#define PDH_CVERSION_WIN40  0x0400\n#define PDH_CVERSION_WIN50  0x0500\n#define PDH_VERSION         0x0503\n\n#define PDH_MAX_SCALE 7\n#define PDH_MIN_SCALE (-7)\n\n#define PDH_MAX_COUNTER_NAME    1024\n\n#define PDH_FMT_LONG        0x00000100\n#define PDH_FMT_DOUBLE      0x00000200\n#define PDH_FMT_LARGE       0x00000400\n#define PDH_FMT_NOSCALE     0x00001000\n#define PDH_FMT_1000        0x00002000\n#define PDH_FMT_NOCAP100    0x00008000\n\n#define DATA_SOURCE_REGISTRY    0x00000001\n#define DATA_SOURCE_LOGFILE     0x00000002\n#define DATA_SOURCE_WBEM        0x00000004\n\n#ifdef WINE_NO_UNICODE_MACROS\n# define DECL_PDH_TYPE_AW(name)  /* nothing */\n#else  /* WINE_NO_UNICODE_MACROS */\n# ifdef UNICODE\n# define DECL_PDH_TYPE_AW(name)  typedef name##_W name;\n# else\n# define DECL_PDH_TYPE_AW(name)  typedef name##_A name;\n# endif\n#endif  /* WINE_NO_UNICODE_MACROS */\n\ntypedef struct _PDH_FMT_COUNTERVALUE\n{\n    DWORD CStatus;\n    union\n    {\n        LONG     longValue;\n        double   doubleValue;\n        LONGLONG largeValue;\n        LPCSTR   AnsiStringValue;\n        LPCWSTR  WideStringValue;\n    } DUMMYUNIONNAME;\n} PDH_FMT_COUNTERVALUE, *PPDH_FMT_COUNTERVALUE;\n\ntypedef struct _PDH_RAW_COUNTER\n{\n    DWORD    CStatus;\n    FILETIME TimeStamp;\n    LONGLONG FirstValue;\n    LONGLONG SecondValue;\n    DWORD    MultiCount;\n} PDH_RAW_COUNTER, *PPDH_RAW_COUNTER;\n\ntypedef struct _PDH_COUNTER_PATH_ELEMENTS_A\n{\n    LPSTR szMachineName;\n    LPSTR szObjectName;\n    LPSTR szInstanceName;\n    LPSTR szParentInstance;\n    DWORD dwInstanceIndex;\n    LPSTR szCounterName;\n} PDH_COUNTER_PATH_ELEMENTS_A, *PPDH_COUNTER_PATH_ELEMENTS_A;\n\ntypedef struct _PDH_COUNTER_PATH_ELEMENTS_W\n{\n    LPWSTR szMachineName;\n    LPWSTR szObjectName;\n    LPWSTR szInstanceName;\n    LPWSTR szParentInstance;\n    DWORD  dwInstanceIndex;\n    LPWSTR szCounterName;\n} PDH_COUNTER_PATH_ELEMENTS_W, *PPDH_COUNTER_PATH_ELEMENTS_W;\n\nDECL_PDH_TYPE_AW(PDH_COUNTER_PATH_ELEMENTS)\nDECL_PDH_TYPE_AW(PPDH_COUNTER_PATH_ELEMENTS)\n\ntypedef struct _PDH_DATA_ITEM_PATH_ELEMENTS_A\n{\n    LPSTR szMachineName;\n    GUID  ObjectGUID;\n    DWORD dwItemId;\n    LPSTR szInstanceName;\n} PDH_DATA_ITEM_PATH_ELEMENTS_A, *PPDH_DATA_ITEM_PATH_ELEMENTS_A;\n\ntypedef struct _PDH_DATA_ITEM_PATH_ELEMENTS_W\n{\n    LPWSTR szMachineName;\n    GUID   ObjectGUID;\n    DWORD  dwItemId;\n    LPWSTR szInstanceName;\n} PDH_DATA_ITEM_PATH_ELEMENTS_W, *PPDH_DATA_ITEM_PATH_ELEMENTS_W;\n\nDECL_PDH_TYPE_AW(PDH_DATA_ITEM_PATH_ELEMENTS)\nDECL_PDH_TYPE_AW(PPDH_DATA_ITEM_PATH_ELEMENTS)\n\ntypedef struct _PDH_COUNTER_INFO_A\n{\n    DWORD     dwLength;\n    DWORD     dwType;\n    DWORD     CVersion;\n    DWORD     CStatus;\n    LONG      lScale;\n    LONG      lDefaultScale;\n    DWORD_PTR dwUserData;\n    DWORD_PTR dwQueryUserData;\n    LPSTR     szFullPath;\n    union\n    {\n        PDH_DATA_ITEM_PATH_ELEMENTS_A DataItemPath;\n        PDH_COUNTER_PATH_ELEMENTS_A   CounterPath;\n        struct\n        {\n            LPSTR szMachineName;\n            LPSTR szObjectName;\n            LPSTR szInstanceName;\n            LPSTR szParentInstance;\n            DWORD dwInstanceIndex;\n            LPSTR szCounterName;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME;\n    LPSTR szExplainText;\n    DWORD DataBuffer[1];\n} PDH_COUNTER_INFO_A, *PPDH_COUNTER_INFO_A;\n\ntypedef struct _PDH_COUNTER_INFO_W\n{\n    DWORD     dwLength;\n    DWORD     dwType;\n    DWORD     CVersion;\n    DWORD     CStatus;\n    LONG      lScale;\n    LONG      lDefaultScale;\n    DWORD_PTR dwUserData;\n    DWORD_PTR dwQueryUserData;\n    LPWSTR    szFullPath;\n    union\n    {\n        PDH_DATA_ITEM_PATH_ELEMENTS_W DataItemPath;\n        PDH_COUNTER_PATH_ELEMENTS_W   CounterPath;\n        struct\n        {\n            LPWSTR szMachineName;\n            LPWSTR szObjectName;\n            LPWSTR szInstanceName;\n            LPWSTR szParentInstance;\n            DWORD  dwInstanceIndex;\n            LPWSTR szCounterName;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME;\n    LPWSTR szExplainText;\n    DWORD DataBuffer[1];\n} PDH_COUNTER_INFO_W, *PPDH_COUNTER_INFO_W;\n\nDECL_PDH_TYPE_AW(PDH_COUNTER_INFO)\nDECL_PDH_TYPE_AW(PPDH_COUNTER_INFO)\n\n#undef DECL_PDH_TYPE_AW\n\nPDH_STATUS WINAPI PdhAddCounterA(PDH_HQUERY, LPCSTR, DWORD_PTR, PDH_HCOUNTER *);\nPDH_STATUS WINAPI PdhAddCounterW(PDH_HQUERY, LPCWSTR, DWORD_PTR, PDH_HCOUNTER *);\n#define    PdhAddCounter WINELIB_NAME_AW(PdhAddCounter)\nPDH_STATUS WINAPI PdhAddEnglishCounterA(PDH_HQUERY, LPCSTR, DWORD_PTR, PDH_HCOUNTER *);\nPDH_STATUS WINAPI PdhAddEnglishCounterW(PDH_HQUERY, LPCWSTR, DWORD_PTR, PDH_HCOUNTER *);\n#define    PdhAddEnglishCounter WINELIB_NAME_AW(PdhAddEnglishCounter)\nPDH_STATUS WINAPI PdhBindInputDataSourceA(PDH_HLOG *, const char *);\nPDH_STATUS WINAPI PdhBindInputDataSourceW(PDH_HLOG *, const WCHAR *);\n#define    PdhBindInputDataSource WINELIB_NAME_AW(PdhBindInputDataSource)\nPDH_STATUS WINAPI PdhCloseQuery(PDH_HQUERY);\nPDH_STATUS WINAPI PdhCollectQueryData(PDH_HQUERY);\nPDH_STATUS WINAPI PdhCollectQueryDataEx(PDH_HQUERY, DWORD, HANDLE);\nPDH_STATUS WINAPI PdhCollectQueryDataWithTime(PDH_HQUERY,LONGLONG *);\nPDH_STATUS WINAPI PdhEnumObjectsA(LPCSTR,LPCSTR,PZZSTR,LPDWORD,DWORD,BOOL);\nPDH_STATUS WINAPI PdhEnumObjectsW(LPCWSTR,LPCWSTR,PZZWSTR,LPDWORD,DWORD,BOOL);\n#define    PdhEnumObjects WINELIB_NAME_AW(PdhEnumObjects)\nPDH_STATUS WINAPI PdhEnumObjectItemsA(LPCSTR, LPCSTR, LPCSTR, LPSTR, LPDWORD, LPSTR, LPDWORD, DWORD, DWORD);\nPDH_STATUS WINAPI PdhEnumObjectItemsW(LPCWSTR, LPCWSTR, LPCWSTR, LPWSTR, LPDWORD, LPWSTR, LPDWORD, DWORD, DWORD);\n#define    PdhEnumObjectItems WINELIB_NAME_AW(PdhEnumObjectItems)\nPDH_STATUS WINAPI PdhGetCounterInfoA(PDH_HCOUNTER, BOOLEAN, LPDWORD, PPDH_COUNTER_INFO_A);\nPDH_STATUS WINAPI PdhGetCounterInfoW(PDH_HCOUNTER, BOOLEAN, LPDWORD, PPDH_COUNTER_INFO_W);\n#define    PdhGetCounterInfo WINELIB_NAME_AW(PdhGetCounterInfo)\nPDH_STATUS WINAPI PdhGetCounterTimeBase(PDH_HCOUNTER, LONGLONG *);\nPDH_STATUS WINAPI PdhGetDllVersion(LPDWORD);\nPDH_STATUS WINAPI PdhGetFormattedCounterValue(PDH_HCOUNTER, DWORD, LPDWORD, PPDH_FMT_COUNTERVALUE);\nPDH_STATUS WINAPI PdhGetRawCounterValue(PDH_HCOUNTER, LPDWORD, PPDH_RAW_COUNTER);\nPDH_STATUS WINAPI PdhLookupPerfIndexByNameA(LPCSTR, LPCSTR, LPDWORD);\nPDH_STATUS WINAPI PdhLookupPerfIndexByNameW(LPCWSTR, LPCWSTR, LPDWORD);\n#define    PdhLookupPerfIndexByName WINELIB_NAME_AW(PdhLookupPerfIndexByName)\nPDH_STATUS WINAPI PdhLookupPerfNameByIndexA(LPCSTR, DWORD, LPSTR, LPDWORD);\nPDH_STATUS WINAPI PdhLookupPerfNameByIndexW(LPCWSTR, DWORD, LPWSTR, LPDWORD);\n#define    PdhLookupPerfNameByIndex WINELIB_NAME_AW(PdhLookupPerfNameByIndex)\nPDH_STATUS WINAPI PdhMakeCounterPathA(PDH_COUNTER_PATH_ELEMENTS_A *, LPSTR, LPDWORD, DWORD);\nPDH_STATUS WINAPI PdhMakeCounterPathW(PDH_COUNTER_PATH_ELEMENTS_W *, LPWSTR, LPDWORD, DWORD);\n#define    PdhMakeCounterPath WINELIB_NAME_AW(PdhMakeCounterPath)\nPDH_STATUS WINAPI PdhOpenQueryA(LPCSTR, DWORD_PTR, PDH_HQUERY *);\nPDH_STATUS WINAPI PdhOpenQueryW(LPCWSTR, DWORD_PTR, PDH_HQUERY *);\n#define    PdhOpenQuery WINELIB_NAME_AW(PdhOpenQuery)\nPDH_STATUS WINAPI PdhRemoveCounter(PDH_HCOUNTER);\nPDH_STATUS WINAPI PdhSetCounterScaleFactor(PDH_HCOUNTER, LONG);\nPDH_STATUS WINAPI PdhSetDefaultRealTimeDataSource(DWORD);\nPDH_STATUS WINAPI PdhValidatePathA(LPCSTR);\nPDH_STATUS WINAPI PdhValidatePathW(LPCWSTR);\n#define    PdhValidatePath WINELIB_NAME_AW(PdhValidatePath)\nPDH_STATUS WINAPI PdhValidatePathExA(PDH_HLOG, LPCSTR);\nPDH_STATUS WINAPI PdhValidatePathExW(PDH_HLOG, LPCWSTR);\n#define    PdhValidatePathEx WINELIB_NAME_AW(PdhValidatePathEx)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _PDH_H_ */\n"
  },
  {
    "path": "wine/windows/pdhmsg.h",
    "content": "/*\n * Performance Data Helper\n *\n * Copyright 2007 Hans Leidekker\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _PDH_MSG_H_\n#define _PDH_MSG_H_\n\n#define PDH_CSTATUS_VALID_DATA          0x00000000\n#define PDH_CSTATUS_NEW_DATA            0x00000001\n#define PDH_CSTATUS_NO_MACHINE          0x800007d0\n#define PDH_CSTATUS_NO_INSTANCE         0x800007d1\n#define PDH_MORE_DATA                   0x800007d2\n#define PDH_CSTATUS_ITEM_NOT_VALIDATED  0x800007d3\n#define PDH_RETRY                       0x800007d4\n#define PDH_NO_DATA                     0x800007d5\n#define PDH_CALC_NEGATIVE_DENOMINATOR   0x800007d6\n#define PDH_CALC_NEGATIVE_TIMEBASE      0x800007d7\n#define PDH_CALC_NEGATIVE_VALUE         0x800007d8\n#define PDH_DIALOG_CANCELLED            0x800007d9\n#define PDH_END_OF_LOG_FILE             0x800007da\n#define PDH_ASYNC_QUERY_TIMEOUT         0x800007db\n#define PDH_CANNOT_SET_DEFAULT_REALTIME_DATASOURCE 0x800007dc\n#define PDH_UNABLE_MAP_NAME_FILES       0x80000bd5\n#define PDH_PLA_VALIDATION_WARNING      0x80000bf3\n#define PDH_CSTATUS_NO_OBJECT           0xc0000bb8\n#define PDH_CSTATUS_NO_COUNTER          0xc0000bb9\n#define PDH_CSTATUS_INVALID_DATA        0xc0000bba\n#define PDH_MEMORY_ALLOCATION_FAILURE   0xc0000bbb\n#define PDH_INVALID_HANDLE              0xc0000bbc\n#define PDH_INVALID_ARGUMENT            0xc0000bbd\n#define PDH_FUNCTION_NOT_FOUND          0xc0000bbe\n#define PDH_CSTATUS_NO_COUNTERNAME      0xc0000bbf\n#define PDH_CSTATUS_BAD_COUNTERNAME     0xc0000bc0\n#define PDH_INVALID_BUFFER              0xc0000bc1\n#define PDH_INSUFFICIENT_BUFFER         0xc0000bc2\n#define PDH_CANNOT_CONNECT_MACHINE      0xc0000bc3\n#define PDH_INVALID_PATH                0xc0000bc4\n#define PDH_INVALID_INSTANCE            0xc0000bc5\n#define PDH_INVALID_DATA                0xc0000bc6\n#define PDH_NO_DIALOG_DATA              0xc0000bc7\n#define PDH_CANNOT_READ_NAME_STRINGS    0xc0000bc8\n#define PDH_LOG_FILE_CREATE_ERROR       0xc0000bc9\n#define PDH_LOG_FILE_OPEN_ERROR         0xc0000bca\n#define PDH_LOG_TYPE_NOT_FOUND          0xc0000bcb\n#define PDH_NO_MORE_DATA                0xc0000bcc\n#define PDH_ENTRY_NOT_IN_LOG_FILE       0xc0000bcd\n#define PDH_DATA_SOURCE_IS_LOG_FILE     0xc0000bce\n#define PDH_DATA_SOURCE_IS_REAL_TIME    0xc0000bcf\n#define PDH_UNABLE_READ_LOG_HEADER      0xc0000bd0\n#define PDH_FILE_NOT_FOUND              0xc0000bd1\n#define PDH_FILE_ALREADY_EXISTS         0xc0000bd2\n#define PDH_NOT_IMPLEMENTED             0xc0000bd3\n#define PDH_STRING_NOT_FOUND            0xc0000bd4\n#define PDH_UNKNOWN_LOG_FORMAT          0xc0000bd6\n#define PDH_UNKNOWN_LOGSVC_COMMAND      0xc0000bd7\n#define PDH_LOGSVC_QUERY_NOT_FOUND      0xc0000bd8\n#define PDH_LOGSVC_NOT_OPENED           0xc0000bd9\n#define PDH_WBEM_ERROR                  0xc0000bda\n#define PDH_ACCESS_DENIED               0xc0000bdb\n#define PDH_LOG_FILE_TOO_SMALL          0xc0000bdc\n#define PDH_INVALID_DATASOURCE          0xc0000bdd\n#define PDH_INVALID_SQLDB               0xc0000bde\n#define PDH_NO_COUNTERS                 0xc0000bdf\n#define PDH_SQL_ALLOC_FAILED            0xc0000be0\n#define PDH_SQL_ALLOCCON_FAILED         0xc0000be1\n#define PDH_SQL_EXEC_DIRECT_FAILED      0xc0000be2\n#define PDH_SQL_FETCH_FAILED            0xc0000be3\n#define PDH_SQL_ROWCOUNT_FAILED         0xc0000be4\n#define PDH_SQL_MORE_RESULTS_FAILED     0xc0000be5\n#define PDH_SQL_CONNECT_FAILED          0xc0000be6\n#define PDH_SQL_BIND_FAILED             0xc0000be7\n#define PDH_CANNOT_CONNECT_WMI_SERVER   0xc0000be8\n#define PDH_PLA_COLLECTION_ALREADY_RUNNING 0xc0000be9\n#define PDH_PLA_ERROR_SCHEDULE_OVERLAP  0xc0000bea\n#define PDH_PLA_COLLECTION_NOT_FOUND    0xc0000beb\n#define PDH_PLA_ERROR_SCHEDULE_ELAPSED  0xc0000bec\n#define PDH_PLA_ERROR_NOSTART           0xc0000bed\n#define PDH_PLA_ERROR_ALREADY_EXISTS    0xc0000bee\n#define PDH_PLA_ERROR_TYPE_MISMATCH     0xc0000bef\n#define PDH_PLA_ERROR_FILEPATH          0xc0000bf0\n#define PDH_PLA_SERVICE_ERROR           0xc0000bf1\n#define PDH_PLA_VALIDATION_ERROR        0xc0000bf2\n#define PDH_PLA_ERROR_NAME_TOO_LONG     0xc0000bf4\n#define PDH_INVALID_SQL_LOG_FORMAT      0xc0000bf5\n#define PDH_COUNTER_ALREADY_IN_QUERY    0xc0000bf6\n#define PDH_BINARY_LOG_CORRUPT          0xc0000bf7\n#define PDH_LOG_SAMPLE_TOO_SMALL        0xc0000bf8\n#define PDH_OS_LATER_VERSION            0xc0000bf9\n#define PDH_OS_EARLIER_VERSION          0xc0000bfa\n#define PDH_INCORRECT_APPEND_TIME       0xc0000bfb\n#define PDH_UNMATCHED_APPEND_COUNTER    0xc0000bfc\n#define PDH_SQL_ALTER_DETAIL_FAILED     0xc0000bfd\n#define PDH_QUERY_PERF_DATA_TIMEOUT     0xc0000bfe\n\n#endif /* _PDH_MSG_H_ */\n"
  },
  {
    "path": "wine/windows/perflib.h",
    "content": "/*\n * Copyright (C) 2017 Austin English\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _PERFLIB_H_\n#define _PERFLIB_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef LPVOID (CDECL * PERF_MEM_ALLOC)(SIZE_T,LPVOID);\ntypedef void (CDECL * PERF_MEM_FREE)(LPVOID,LPVOID);\ntypedef ULONG (WINAPI * PERFLIBREQUEST)(ULONG,PVOID,ULONG);\n\ntypedef struct _PERF_COUNTERSET_INFO {\n    GUID CounterSetGuid;\n    GUID ProviderGuid;\n    ULONG NumCounters;\n    ULONG InstanceType;\n} PERF_COUNTERSET_INFO, * PPERF_COUNTERSET_INFO;\n\ntypedef struct _PERF_COUNTERSET_INSTANCE {\n    GUID CounterSetGuid;\n    ULONG dwSize;\n    ULONG InstanceId;\n    ULONG InstanceNameOffset;\n    ULONG InstanceNameSize;\n} PERF_COUNTERSET_INSTANCE, * PPERF_COUNTERSET_INSTANCE;\n\ntypedef struct _PROVIDER_CONTEXT {\n    DWORD ContextSize;\n    DWORD Reserved;\n    PERFLIBREQUEST ControlCallback;\n    PERF_MEM_ALLOC MemAllocRoutine;\n    PERF_MEM_FREE MemFreeRoutine;\n    LPVOID pMemContext;\n} PERF_PROVIDER_CONTEXT, * PPERF_PROVIDER_CONTEXT;\n\n#ifdef __cplusplus\n}       /* extern \"C\" */\n#endif\n\n#endif /* _PERFLIB_H_ */\n"
  },
  {
    "path": "wine/windows/perhist.idl",
    "content": "/*\n * Copyright 2009 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"objidl.idl\";\nimport \"oleidl.idl\";\n\n[\n    object,\n    uuid(91A565C1-E38F-11d0-94BF-00A0C9055CBF),\n    pointer_default(unique)\n]\ninterface IPersistHistory : IPersist\n{\n    typedef [unique] IPersistHistory *LPPERSISTHISTORY;\n\n    HRESULT LoadHistory([in] IStream *pStream, [in] IBindCtx *pbc);\n\n    HRESULT SaveHistory([in] IStream *pStream);\n\n    HRESULT SetPositionCookie([in] DWORD dwPositioncookie);\n\n    HRESULT GetPositionCookie([out] DWORD *pdwPositioncookie);\n}\n"
  },
  {
    "path": "wine/windows/physicalmonitorenumerationapi.h",
    "content": "/*\n * Copyright 2014 Michael Müller for Pipelight\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_PHYSICALMONITORENUMERATIONAPI_H\n#define __WINE_PHYSICALMONITORENUMERATIONAPI_H\n\n#include <d3d9.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define PHYSICAL_MONITOR_DESCRIPTION_SIZE 128\n\ntypedef struct _PHYSICAL_MONITOR\n{\n    HANDLE hPhysicalMonitor;\n    WCHAR szPhysicalMonitorDescription[PHYSICAL_MONITOR_DESCRIPTION_SIZE];\n} PHYSICAL_MONITOR, *LPPHYSICAL_MONITOR;\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_PHYSICALMONITORENUMERATIONAPI_H */\n"
  },
  {
    "path": "wine/windows/pktdef.h",
    "content": "/*\n * Copyright (C) 1991-1998 by LCS/Telegraphics\n * Copyright (C) 2002 Patrik Stridvall\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_PKTDEF_H\n#define __WINE_PKTDEF_H\n\n/***********************************************************************\n * How to use pktdef.h:\n * \n * 1. Include wintab.h\n * 2. if using just one packet format:\n *    a. Define PACKETDATA and PACKETMODE as or'ed combinations of WTPKT bits\n *       (use the PK_* identifiers).\n *    b. Include pktdef.h.\n *    c. The generated structure typedef will be called PACKET.  Use PACKETDATA\n *       and PACKETMODE to fill in the LOGCONTEXT structure.\n * 3. If using multiple packet formats, for each one:\n *    a. Define PACKETNAME. Its text value will be a prefix for this packet's\n *       parameters and names.\n *    b. Define <PACKETNAME>PACKETDATA and <PACKETNAME>PACKETMODE similar to\n *       2.a. above.\n *    c. Include pktdef.h.\n *    d. The generated structure typedef will be called\n *       <PACKETNAME>PACKET. Compare with 2.c. above and example #2 below.\n * 4. If using extension packet data, do the following additional steps\n *    for each extension:\n *    a. Before including pktdef.h, define <PACKETNAME>PACKET<EXTENSION>\n *       as either PKEXT_ABSOLUTE or PKEXT_RELATIVE.\n *    b. The generated structure typedef will contain a field for the\n *       extension data.\n *    c. Scan the WTI_EXTENSION categories to find the extension's\n *       packet mask bit.\n *    d. OR the packet mask bit with <PACKETNAME>PACKETDATA and use the\n *       result in the lcPktData field of the LOGCONTEXT structure.\n *    e. If <PACKETNAME>PACKET<EXTENSION> was PKEXT_RELATIVE, OR the\n *       packet mask bit with <PACKETNAME>PACKETMODE and use the result\n *       in the lcPktMode field of the LOGCONTEXT structure.\n *\n *\n * Example #1.  -- single packet format\n *\n * #include <wintab.h>\n * #define PACKETDATA PK_X | PK_Y | PK_BUTTONS  /@ x, y, buttons @/\n * #define PACKETMODE PK_BUTTONS                /@ buttons relative mode @/\n * #include <pktdef.h>\n * ...\n *     lc.lcPktData = PACKETDATA;\n *     lc.lcPktMode = PACKETMODE;\n * \n * Example #2.  -- multiple formats\n * \n * #include <wintab.h>\n * #define PACKETNAME     MOE\n * #define MOEPACKETDATA  PK_X | PK_Y | PK_BUTTONS  /@ x, y, buttons @/\n * #define MOEPACKETMODE  PK_BUTTONS                /@ buttons relative mode @/\n * #include <pktdef.h>\n * #define PACKETNAME       LARRY\n * #define LARRYPACKETDATA  PK_Y | PK_Z | PK_BUTTONS  /@ y, z, buttons @/\n * #define LARRYPACKETMODE  PK_BUTTONS                /@ buttons relative mode @/\n * #include <pktdef.h>\n * #define PACKETNAME       CURLY\n * #define CURLYPACKETDATA  PK_X | PK_Z | PK_BUTTONS  /@ x, z, buttons @/\n * #define CURLYPACKETMODE  PK_BUTTONS                /@ buttons relative mode @/\n * #include <pktdef.h>\n * ...\n *     lcMOE.lcPktData = MOEPACKETDATA;\n *     lcMOE.lcPktMode = MOEPACKETMODE;\n * ...\n *     lcLARRY.lcPktData = LARRYPACKETDATA;\n *     lcLARRY.lcPktMode = LARRYPACKETMODE;\n * ...\n *     lcCURLY.lcPktData = CURLYPACKETDATA;\n *     lcCURLY.lcPktMode = CURLYPACKETMODE;\n *\n * Example #3. -- extension packet data \"XFOO\".\n *\n * #include <wintab.h>\n * #define PACKETDATA  PK_X | PK_Y | PK_BUTTONS  /@ x, y, buttons @/\n * #define PACKETMODE  PK_BUTTONS                /@ buttons relative mode @/\n * #define PACKETXFOO  PKEXT_ABSOLUTE            /@ XFOO absolute mode @/\n * #include <pktdef.h>\n * ...\n * UINT ScanExts(UINT wTag)\n * {\n *     UINT i;\n *     UINT wScanTag;\n * \n *     /@ scan for wTag's info category. @/\n *     for (i = 0; WTInfo(WTI_EXTENSIONS + i, EXT_TAG, &wScanTag); i++) {\n *          if (wTag == wScanTag) {\n *             /@ return category offset from WTI_EXTENSIONS. @/\n *             return i;\n *         }\n *     }\n *     /@ return error code. @/\n *     return 0xFFFF;\n * }\n * ...\n *     lc.lcPktData = PACKETDATA;\n *     lc.lcPktMode = PACKETMODE;\n * #ifdef PACKETXFOO\n *     categoryXFOO = ScanExts(WTX_XFOO);\n *     WTInfo(WTI_EXTENSIONS + categoryXFOO, EXT_MASK, &maskXFOO);\n *    lc.lcPktData |= maskXFOO;\n * #if PACKETXFOO == PKEXT_RELATIVE\n *     lc.lcPktMode |= maskXFOO;\n * #endif\n * #endif\n *    WTOpen(hWnd, &lc, TRUE);\n */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n#ifndef PACKETNAME\n/* if no packet name prefix */\n# define __PFX(x)    x\n# define __IFX(x,y)  x ## y\n#else\n/* add prefixes and infixes to packet format names */\n# define __PFX(x)       __PFX2(PACKETNAME,x)\n# define __PFX2(p,x)    __PFX3(p,x)\n# define __PFX3(p,x)    p ## x\n# define __IFX(x,y)     __IFX2(x,PACKETNAME,y)\n# define __IFX2(x,i,y)  __IFX3(x,i,y)\n# define __IFX3(x,i,y)  x ## i ## y\n#endif\n\n#define __SFX2(x,s)  __SFX3(x,s)\n#define __SFX3(x,s)  x ## s\n\n#define __TAG  __IFX(tag,PACKET)\n#define __TYPES \\\n  __PFX(PACKET), * __IFX(P,PACKET), \\\n  * __IFX(NP,PACKET), * __IFX(LP,PACKET)\n\n#define __DATA    (__PFX(PACKETDATA))\n#define __MODE    (__PFX(PACKETMODE))\n#define __EXT(x)  __SFX2(__PFX(PACKET),x)\n\ntypedef struct __TAG {\n#if (__DATA & PK_CONTEXT)\n    HCTX pkContext;\n#endif\n#if (__DATA & PK_STATUS)\n    UINT pkStatus;\n#endif\n#if (__DATA & PK_TIME)\n    DWORD pkTime;\n#endif\n#if (__DATA & PK_CHANGED)\n    WTPKT pkChanged;\n#endif\n#if (__DATA & PK_SERIAL_NUMBER)\n    UINT pkSerialNumber;\n#endif\n#if (__DATA & PK_CURSOR)\n    UINT pkCursor;\n#endif\n#if (__DATA & PK_BUTTONS)\n    DWORD pkButtons;\n#endif\n#if (__DATA & PK_X)\n    LONG pkX;\n#endif\n#if (__DATA & PK_Y)\n    LONG pkY;\n#endif\n#if (__DATA & PK_Z)\n    LONG pkZ;\n#endif\n#if (__DATA & PK_NORMAL_PRESSURE)\n# if (__MODE & PK_NORMAL_PRESSURE)\n    /* relative */\n    int pkNormalPressure;\n# else\n    /* absolute */\n    UINT pkNormalPressure;\n# endif\n#endif\n#if (__DATA & PK_TANGENT_PRESSURE)\n# if (__MODE & PK_TANGENT_PRESSURE)\n    /* relative */\n    int pkTangentPressure;\n# else\n    /* absolute */\n    UINT pkTangentPressure;\n# endif\n#endif\n#if (__DATA & PK_ORIENTATION)\n    ORIENTATION pkOrientation;\n#endif\n#if (__DATA & PK_ROTATION)\n    ROTATION pkRotation;  /* 1.1 */\n#endif\n\n#ifndef NOWTEXTENSIONS\n    /* extensions begin here. */\n\n#if (__EXT(FKEYS) == PKEXT_RELATIVE) || (__EXT(FKEYS) == PKEXT_ABSOLUTE)\n    UINT pkFKeys;\n#endif\n#if (__EXT(TILT) == PKEXT_RELATIVE) || (__EXT(TILT) == PKEXT_ABSOLUTE)\n    TILT pkTilt;\n#endif\n\n#endif\n\n} __TYPES;\n\n#undef PACKETNAME\n#undef __TAG\n#undef __TAG2\n#undef __TYPES\n#undef __TYPES2\n#undef __DATA\n#undef __MODE\n#undef __PFX\n#undef __PFX2\n#undef __PFX3\n#undef __IFX\n#undef __IFX2\n#undef __IFX3\n#undef __SFX2\n#undef __SFX3\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif /* defined(__WINE_PKTDEF_H */\n"
  },
  {
    "path": "wine/windows/poppack.h",
    "content": "/*\n * Copyright (C) 1999 Patrik Stridvall\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if defined(__WINE_PSHPACK_H15)\n#  ifndef __WINE_INTERNAL_POPPACK\n#    undef __WINE_PSHPACK_H15\n#  endif\n/* Depth == 15 */\n\n#  if __WINE_PSHPACK_H14 == 1\n#    pragma pack(1)\n#  elif __WINE_PSHPACK_H14 == 2\n#    pragma pack(2)\n#  elif __WINE_PSHPACK_H14 == 8\n#    pragma pack(8)\n#  else\n#    pragma pack(4)\n#  endif\n\n#elif defined(__WINE_PSHPACK_H14)\n#  ifndef __WINE_INTERNAL_POPPACK\n#    undef __WINE_PSHPACK_H14\n#  endif\n/* Depth == 14 */\n\n#  if __WINE_PSHPACK_H13 == 1\n#    pragma pack(1)\n#  elif __WINE_PSHPACK_H13 == 2\n#    pragma pack(2)\n#  elif __WINE_PSHPACK_H13 == 8\n#    pragma pack(8)\n#  else\n#    pragma pack(4)\n#  endif\n\n#elif defined(__WINE_PSHPACK_H13)\n#  ifndef __WINE_INTERNAL_POPPACK\n#    undef __WINE_PSHPACK_H13\n#  endif\n/* Depth == 13 */\n\n#  if __WINE_PSHPACK_H12 == 1\n#    pragma pack(1)\n#  elif __WINE_PSHPACK_H12 == 2\n#    pragma pack(2)\n#  elif __WINE_PSHPACK_H12 == 8\n#    pragma pack(8)\n#  else\n#    pragma pack(4)\n#  endif\n\n#elif defined(__WINE_PSHPACK_H12)\n#  ifndef __WINE_INTERNAL_POPPACK\n#    undef __WINE_PSHPACK_H12\n#  endif\n/* Depth == 12 */\n\n#  if __WINE_PSHPACK_H11 == 1\n#    pragma pack(1)\n#  elif __WINE_PSHPACK_H11 == 2\n#    pragma pack(2)\n#  elif __WINE_PSHPACK_H11 == 8\n#    pragma pack(8)\n#  else\n#    pragma pack(4)\n#  endif\n\n#elif defined(__WINE_PSHPACK_H11)\n#  ifndef __WINE_INTERNAL_POPPACK\n#    undef __WINE_PSHPACK_H11\n#  endif\n/* Depth == 11 */\n\n#  if __WINE_PSHPACK_H10 == 1\n#    pragma pack(1)\n#  elif __WINE_PSHPACK_H10 == 2\n#    pragma pack(2)\n#  elif __WINE_PSHPACK_H10 == 8\n#    pragma pack(8)\n#  else\n#    pragma pack(4)\n#  endif\n\n#elif defined(__WINE_PSHPACK_H10)\n#  ifndef __WINE_INTERNAL_POPPACK\n#    undef __WINE_PSHPACK_H10\n#  endif\n/* Depth == 10 */\n\n#  if __WINE_PSHPACK_H9 == 1\n#    pragma pack(1)\n#  elif __WINE_PSHPACK_H9 == 2\n#    pragma pack(2)\n#  elif __WINE_PSHPACK_H9 == 8\n#    pragma pack(8)\n#  else\n#    pragma pack(4)\n#  endif\n\n#elif defined(__WINE_PSHPACK_H9)\n#  ifndef __WINE_INTERNAL_POPPACK\n#    undef __WINE_PSHPACK_H9\n#  endif\n/* Depth == 9 */\n\n#  if __WINE_PSHPACK_H8 == 1\n#    pragma pack(1)\n#  elif __WINE_PSHPACK_H8 == 2\n#    pragma pack(2)\n#  elif __WINE_PSHPACK_H8 == 8\n#    pragma pack(8)\n#  else\n#    pragma pack(4)\n#  endif\n\n#elif defined(__WINE_PSHPACK_H8)\n#  ifndef __WINE_INTERNAL_POPPACK\n#    undef __WINE_PSHPACK_H8\n#  endif\n/* Depth == 8 */\n\n#  if __WINE_PSHPACK_H7 == 1\n#    pragma pack(1)\n#  elif __WINE_PSHPACK_H7 == 2\n#    pragma pack(2)\n#  elif __WINE_PSHPACK_H7 == 8\n#    pragma pack(8)\n#  else\n#    pragma pack(4)\n#  endif\n\n#elif defined(__WINE_PSHPACK_H7)\n#  ifndef __WINE_INTERNAL_POPPACK\n#    undef __WINE_PSHPACK_H7\n#  endif\n/* Depth == 7 */\n\n#  if __WINE_PSHPACK_H6 == 1\n#    pragma pack(1)\n#  elif __WINE_PSHPACK_H6 == 2\n#    pragma pack(2)\n#  elif __WINE_PSHPACK_H6 == 8\n#    pragma pack(8)\n#  else\n#    pragma pack(4)\n#  endif\n\n#elif defined(__WINE_PSHPACK_H6)\n#  ifndef __WINE_INTERNAL_POPPACK\n#    undef __WINE_PSHPACK_H6\n#  endif\n/* Depth == 6 */\n\n#  if __WINE_PSHPACK_H5 == 1\n#    pragma pack(1)\n#  elif __WINE_PSHPACK_H5 == 2\n#    pragma pack(2)\n#  elif __WINE_PSHPACK_H5 == 8\n#    pragma pack(8)\n#  else\n#    pragma pack(4)\n#  endif\n\n#elif defined(__WINE_PSHPACK_H5)\n#  ifndef __WINE_INTERNAL_POPPACK\n#    undef __WINE_PSHPACK_H5\n#  endif\n/* Depth == 5 */\n\n#  if __WINE_PSHPACK_H4 == 1\n#    pragma pack(1)\n#  elif __WINE_PSHPACK_H4 == 2\n#    pragma pack(2)\n#  elif __WINE_PSHPACK_H4 == 8\n#    pragma pack(8)\n#  else\n#    pragma pack(4)\n#  endif\n\n#elif defined(__WINE_PSHPACK_H4)\n#  ifndef __WINE_INTERNAL_POPPACK\n#    undef __WINE_PSHPACK_H4\n#  endif\n/* Depth == 4 */\n\n#  if __WINE_PSHPACK_H3 == 1\n#    pragma pack(1)\n#  elif __WINE_PSHPACK_H3 == 2\n#    pragma pack(2)\n#  elif __WINE_PSHPACK_H3 == 8\n#    pragma pack(8)\n#  else\n#    pragma pack(4)\n#  endif\n\n#elif defined(__WINE_PSHPACK_H3)\n#  ifndef __WINE_INTERNAL_POPPACK\n#    undef __WINE_PSHPACK_H3\n#  endif\n/* Depth == 3 */\n\n#  if __WINE_PSHPACK_H2 == 1\n#    pragma pack(1)\n#  elif __WINE_PSHPACK_H2 == 2\n#    pragma pack(2)\n#  elif __WINE_PSHPACK_H2 == 8\n#    pragma pack(8)\n#  else\n#    pragma pack(4)\n#  endif\n\n#elif defined(__WINE_PSHPACK_H2)\n#  ifndef __WINE_INTERNAL_POPPACK\n#    undef __WINE_PSHPACK_H2\n#  endif\n/* Depth == 2 */\n\n#  if __WINE_PSHPACK_H == 1\n#    pragma pack(1)\n#  elif __WINE_PSHPACK_H == 2\n#    pragma pack(2)\n#  elif __WINE_PSHPACK_H == 8\n#    pragma pack(8)\n#  else\n#    pragma pack(4)\n#  endif\n\n#elif defined(__WINE_PSHPACK_H)\n#  ifndef __WINE_INTERNAL_POPPACK\n#    undef __WINE_PSHPACK_H\n#  endif\n/* Depth == 1 */\n\n#  if defined(__SUNPRO_CC)\n#    warning \"Assuming a default alignment of 4\"\n#    pragma pack(4)\n#  else\n#    pragma pack()\n#  endif\n\n#else\n/* Depth == 0 ! */\n\n#error \"Popping alignment isn't possible since no alignment has been pushed\"\n\n#endif\n\n#undef __WINE_INTERNAL_POPPACK\n"
  },
  {
    "path": "wine/windows/powrprof.h",
    "content": "/*\n * Copyright (C) 2005 Benjamin Cutler\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_POWRPROF_H\n#define __WINE_POWRPROF_H 1\n\n#define EnableSysTrayBatteryMeter\t0x01\n#define EnableMultiBatteryDisplay\t0x02\n#define EnablePasswordLogon\t\t0x04\n#define EnableWakeOnRing\t\t0x08\n#define EnableVideoDimDisplay\t\t0x10\n\ntypedef struct _GLOBAL_MACHINE_POWER_POLICY {\n\tULONG Revision;\n\tSYSTEM_POWER_STATE LidOpenWakeAc;\n\tSYSTEM_POWER_STATE LidOpenWakeDc;\n\tULONG BroadcastCapacityResolution;\n} GLOBAL_MACHINE_POWER_POLICY, \n*PGLOBAL_MACHINE_POWER_POLICY;\n\ntypedef struct _GLOBAL_USER_POWER_POLICY {\n\tULONG Revision;\n\tPOWER_ACTION_POLICY PowerButtonAc;\n\tPOWER_ACTION_POLICY PowerButtonDc;\n\tPOWER_ACTION_POLICY SleepButtonAc;\n\tPOWER_ACTION_POLICY SleepButtonDc;\n\tPOWER_ACTION_POLICY LidCloseAc;\n\tPOWER_ACTION_POLICY LidCloseDc;\n\tSYSTEM_POWER_LEVEL DischargePolicy[NUM_DISCHARGE_POLICIES];\n\tULONG GlobalFlags;\n} GLOBAL_USER_POWER_POLICY, \n*PGLOBAL_USER_POWER_POLICY;\n\ntypedef struct _GLOBAL_POWER_POLICY {\n\tGLOBAL_USER_POWER_POLICY user;\n\tGLOBAL_MACHINE_POWER_POLICY mach;\n} GLOBAL_POWER_POLICY, \n*PGLOBAL_POWER_POLICY;\n\ntypedef struct _MACHINE_POWER_POLICY {\n\tULONG Revision;\n\tSYSTEM_POWER_STATE MinSleepAc;\n\tSYSTEM_POWER_STATE MinSleepDc;\n\tSYSTEM_POWER_STATE ReducedLatencySleepAc;\n\tSYSTEM_POWER_STATE ReducedLatencySleepDc;\n\tULONG DozeTimeoutAc;\n\tULONG DozeTimeoutDc;\n\tULONG DozeS4TimeoutAc;\n\tULONG DozeS4TimeoutDc;\n\tUCHAR MinThrottleAc;\n\tUCHAR MinThrottleDc;\n\tUCHAR pad1[2];\n\tPOWER_ACTION_POLICY OverThrottledAc;\n\tPOWER_ACTION_POLICY OverThrottledDc;\n} MACHINE_POWER_POLICY, \n*PMACHINE_POWER_POLICY;\n\ntypedef struct _MACHINE_PROCESSOR_POWER_POLICY {\n\tULONG Revision;\n\tPROCESSOR_POWER_POLICY ProcessorPolicyAc;\n\tPROCESSOR_POWER_POLICY ProcessorPolicyDc;\n} MACHINE_PROCESSOR_POWER_POLICY, \n*PMACHINE_PROCESSOR_POWER_POLICY;\n\ntypedef struct _USER_POWER_POLICY {\n\tULONG Revision;\n\tPOWER_ACTION_POLICY IdleAc;\n\tPOWER_ACTION_POLICY IdleDc;\n\tULONG IdleTimeoutAc;\n\tULONG IdleTimeoutDc;\n\tUCHAR IdleSensitivityAc;\n\tUCHAR IdleSensitivityDc;\n\tUCHAR ThrottlePolicyAc;\n\tUCHAR ThrottlePolicyDc;\n\tSYSTEM_POWER_STATE MaxSleepAc;\n\tSYSTEM_POWER_STATE MaxSleepDc;\n\tULONG Reserved[2];\n\tULONG VideoTimeoutAc;\n\tULONG VideoTimeoutDc;\n\tULONG SpindownTimeoutAc;\n\tULONG SpindownTimeoutDc;\n\tBOOLEAN OptimizeForPowerAc;\n\tBOOLEAN OptimizeForPowerDc;\n\tUCHAR FanThrottleToleranceAc;\n\tUCHAR FanThrottleToleranceDc;\n\tUCHAR ForcedThrottleAc;\n\tUCHAR ForcedThrottleDc;\n} USER_POWER_POLICY, \n*PUSER_POWER_POLICY;\n\ntypedef struct _POWER_POLICY {\n\tUSER_POWER_POLICY user;\n\tMACHINE_POWER_POLICY mach;\n} POWER_POLICY, \n*PPOWER_POLICY;\n\ntypedef enum _POWER_DATA_ACCESSOR {\n    ACCESS_AC_POWER_SETTING_INDEX,\n    ACCESS_DC_POWER_SETTING_INDEX,\n    ACCESS_FRIENDLY_NAME,\n    ACCESS_DESCRIPTION,\n    ACCESS_POSSIBLE_POWER_SETTING,\n    ACCESS_POSSIBLE_POWER_SETTING_FRIENDLY_NAME,\n    ACCESS_POSSIBLE_POWER_SETTING_DESCRIPTION,\n    ACCESS_DEFAULT_AC_POWER_SETTING,\n    ACCESS_DEFAULT_DC_POWER_SETTING,\n    ACCESS_POSSIBLE_VALUE_MIN,\n    ACCESS_POSSIBLE_VALUE_MAX,\n    ACCESS_POSSIBLE_VALUE_INCREMENT,\n    ACCESS_POSSIBLE_VALUE_UNITS,\n    ACCESS_ICON_RESOURCE,\n    ACCESS_DEFAULT_SECURITY_DESCRIPTOR,\n    ACCESS_ATTRIBUTES,\n    ACCESS_SCHEME,\n    ACCESS_SUBGROUP,\n    ACCESS_INDIVIDUAL_SETTING,\n    ACCESS_ACTIVE_SCHEME,\n    ACCESS_CREATE_SCHEME,\n    ACCESS_AC_POWER_SETTING_MAX,\n    ACCESS_DC_POWER_SETTING_MAX,\n    ACCESS_AC_POWER_SETTING_MIN,\n    ACCESS_DC_POWER_SETTING_MIN,\n    ACCESS_PROFILE,\n    ACCESS_OVERLAY_SCHEME,\n    ACCESS_ACTIVE_OVERLAY_SCHEME,\n} POWER_DATA_ACCESSOR, *PPOWER_DATA_ACCESSOR;\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef BOOLEAN (CALLBACK* PWRSCHEMESENUMPROC)(UINT, DWORD, LPWSTR, DWORD, LPWSTR, PPOWER_POLICY, LPARAM);\n\nNTSTATUS WINAPI CallNtPowerInformation(POWER_INFORMATION_LEVEL, PVOID, ULONG, PVOID, ULONG);\nBOOLEAN WINAPI CanUserWritePwrScheme(VOID);\nBOOLEAN WINAPI DeletePwrScheme(UINT);\nBOOLEAN WINAPI EnumPwrSchemes(PWRSCHEMESENUMPROC, LPARAM);\nBOOLEAN WINAPI GetActivePwrScheme(PUINT);\nBOOLEAN WINAPI GetCurrentPowerPolicies(PGLOBAL_POWER_POLICY, PPOWER_POLICY);\nBOOLEAN WINAPI GetPwrCapabilities(PSYSTEM_POWER_CAPABILITIES);\nBOOLEAN WINAPI GetPwrDiskSpindownRange(PUINT, PUINT);\nBOOLEAN WINAPI IsAdminOverrideActive(PADMINISTRATOR_POWER_POLICY);\nBOOLEAN WINAPI IsPwrHibernateAllowed(VOID);\nBOOLEAN WINAPI IsPwrShutdownAllowed(VOID);\nBOOLEAN WINAPI IsPwrSuspendAllowed(VOID);\nDWORD   WINAPI PowerEnumerate(HKEY, const GUID *, const GUID *, POWER_DATA_ACCESSOR, ULONG, UCHAR *, DWORD *);\nBOOLEAN WINAPI ReadGlobalPwrPolicy(PGLOBAL_POWER_POLICY);\nBOOLEAN WINAPI ReadProcessorPwrScheme(UINT, PMACHINE_PROCESSOR_POWER_POLICY);\nBOOLEAN WINAPI ReadPwrScheme(UINT, PPOWER_POLICY);\nBOOLEAN WINAPI SetActivePwrScheme(UINT, PGLOBAL_POWER_POLICY, PPOWER_POLICY);\nBOOLEAN WINAPI SetSuspendState(BOOLEAN, BOOLEAN, BOOLEAN);\nBOOLEAN WINAPI WriteGlobalPwrPolicy(PGLOBAL_POWER_POLICY);\nBOOLEAN WINAPI WriteProcessorPwrScheme(UINT, PMACHINE_PROCESSOR_POWER_POLICY);\nBOOLEAN WINAPI WritePwrScheme(PUINT, LPWSTR, LPWSTR, PPOWER_POLICY);\n\n/* Power scheme */\nPOWER_PLATFORM_ROLE WINAPI PowerDeterminePlatformRole(void);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _POWRPROF_H */\n"
  },
  {
    "path": "wine/windows/prntvpt.h",
    "content": "/*\n * Copyright (C) 2015 Nikolay Sivov for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _PRNPTNTV_H_\n#define _PRNPTNTV_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nDECLARE_HANDLE(HPTPROVIDER);\n\nHRESULT WINAPI PTOpenProvider(const WCHAR *printer, DWORD version, HPTPROVIDER *provider);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _PRNPTNTV_H_ */\n"
  },
  {
    "path": "wine/windows/profinfo.h",
    "content": "/*\n * Copyright (C) 2006 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_PROFINFO_H\n#define __WINE_PROFINFO_H\n\ntypedef struct _PROFILEINFOA {\n    DWORD dwSize;\n    DWORD dwFlags;\n    LPSTR lpUserName;\n    LPSTR lpProfilePath;\n    LPSTR lpDefaultPath;\n    LPSTR lpServerName;\n    LPSTR lpPolicyPath;\n    HANDLE hProfile;\n} PROFILEINFOA, *LPPROFILEINFOA;\n\ntypedef struct _PROFILEINFOW {\n    DWORD dwSize;\n    DWORD dwFlags;\n    LPWSTR lpUserName;\n    LPWSTR lpProfilePath;\n    LPWSTR lpDefaultPath;\n    LPWSTR lpServerName;\n    LPWSTR lpPolicyPath;\n    HANDLE hProfile;\n} PROFILEINFOW, *LPPROFILEINFOW;\n\nDECL_WINELIB_TYPE_AW(PROFILEINFO)\nDECL_WINELIB_TYPE_AW(LPPROFILEINFO)\n\n#endif /* __WINE_PROFINFO_H */\n"
  },
  {
    "path": "wine/windows/propidl.idl",
    "content": "/*\n * Copyright 2002 Ove Kaaven\n * Copyright 2004 Francois Gouget\n * Copyright 2005 Juan Lang\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"objidl.idl\";\nimport \"oaidl.idl\";\n#endif\n\n/*\n * Windows SDK braindamage alert\n *\n * PID_DICTIONARY and PID_CODEPAGE are defined by msidefs.h too\n * PID_SECURITY is defined in msidefs.h with a different value!\n * So these need to be undefined first.\n */\ncpp_quote(\"#ifdef PID_DICTIONARY\")\ncpp_quote(\"#undef PID_DICTIONARY\")\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#ifdef PID_CODEPAGE\")\ncpp_quote(\"#undef PID_CODEPAGE\")\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#ifdef PID_SECURITY\")\ncpp_quote(\"#undef PID_SECURITY\")\ncpp_quote(\"#endif\")\n\n/******************** Property Storage ********************/\n\ninterface IEnumSTATPROPSTG;\ninterface IEnumSTATPROPSETSTG;\n\n[\n  object,\n  uuid(00000138-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IPropertyStorage : IUnknown\n{\n  typedef [unique] IPropertyStorage *LPPROPERTYSTORAGE;\n\n  const DWORD PROPSETFLAG_DEFAULT = 0;\n  const DWORD PROPSETFLAG_NONSIMPLE = 1;\n  const DWORD PROPSETFLAG_ANSI = 2;\n  const DWORD PROPSETFLAG_UNBUFFERED = 4;\n  const DWORD PROPSETFLAG_CASE_SENSITIVE = 8;\n\n  const DWORD PROPSET_BEHAVIOR_CASE_SENSITIVE = 1;\n\n  const PROPID PID_DICTIONARY          = 0x00000000;\n  const PROPID PID_CODEPAGE            = 0x00000001;\n  const PROPID PID_FIRST_USABLE        = 0x00000002;\n  const PROPID PID_FIRST_NAME_DEFAULT  = 0x00000fff;\n  const PROPID PID_LOCALE              = 0x80000000;\n  const PROPID PID_MODIFY_TIME         = 0x80000001;\n  const PROPID PID_SECURITY            = 0x80000002;\n  const PROPID PID_BEHAVIOR            = 0x80000003;\n  const PROPID PID_ILLEGAL             = 0xffffffff;\n  const PROPID PID_MIN_READONLY        = 0x80000000;\n  const PROPID PID_MAX_READONLY        = 0xbfffffff;\n\n  typedef struct tagPROPVARIANT PROPVARIANT;\n\n#define TYPEDEF_CA(type, name) \\\n    typedef struct tag##name { \\\n      ULONG cElems; \\\n      [size_is(cElems)] \\\n      type *pElems; \\\n    } name\n\n  TYPEDEF_CA(unsigned char, CAUB);\n  TYPEDEF_CA(short, CAI);\n  TYPEDEF_CA(USHORT, CAUI);\n  TYPEDEF_CA(long, CAL);\n  TYPEDEF_CA(ULONG, CAUL);\n  TYPEDEF_CA(float, CAFLT);\n  TYPEDEF_CA(double, CADBL);\n  TYPEDEF_CA(CY, CACY);\n  TYPEDEF_CA(DATE, CADATE);\n  TYPEDEF_CA(BSTR, CABSTR);\n  TYPEDEF_CA(BSTRBLOB, CABSTRBLOB);\n  TYPEDEF_CA(VARIANT_BOOL, CABOOL);\n  TYPEDEF_CA(SCODE,  CASCODE);\n  TYPEDEF_CA(PROPVARIANT, CAPROPVARIANT);\n  TYPEDEF_CA(LARGE_INTEGER, CAH);\n  TYPEDEF_CA(ULARGE_INTEGER, CAUH);\n  TYPEDEF_CA(LPSTR, CALPSTR);\n  TYPEDEF_CA(LPWSTR, CALPWSTR);\n  TYPEDEF_CA(FILETIME, CAFILETIME);\n  TYPEDEF_CA(CLIPDATA, CACLIPDATA);\n  TYPEDEF_CA(CLSID, CACLSID);\n\n  struct tagPROPVARIANT {\n    VARTYPE vt;\n    WORD wReserved1;\n    WORD wReserved2;\n    WORD wReserved3;\n    [switch_is(vt & 0x1fff)] union {\n    [case(VT_EMPTY, VT_NULL)]             ;\n    [case(VT_I1)]                         char cVal;\n    [case(VT_UI1)]                        UCHAR bVal;\n    [case(VT_I2)]                         short iVal;\n    [case(VT_UI2)]                        USHORT uiVal;\n    [case(VT_BOOL)]                       VARIANT_BOOL boolVal;\n#if 0 /* illegal in C++ */\n    [case(VT_ILLEGAL)]                    _VARIANT_BOOL bool;\n#endif\n    [case(VT_I4)]                         long lVal;\n    [case(VT_UI4)]                        ULONG ulVal;\n    [case(VT_R4)]                         float fltVal;\n    [case(VT_ERROR)]                      SCODE scode;\n    [case(VT_I8)]                         LARGE_INTEGER hVal;\n    [case(VT_UI8)]                        ULARGE_INTEGER uhVal;\n    [case(VT_R8)]                         double dblVal;\n    [case(VT_CY)]                         CY cyVal;\n    [case(VT_DATE)]                       DATE date;\n    [case(VT_FILETIME)]                   FILETIME filetime;\n    [case(VT_CLSID)]                      CLSID *puuid;\n    [case(VT_BLOB, VT_BLOB_OBJECT)]       BLOB blob;\n    [case(VT_CF)]                         CLIPDATA *pclipdata;\n    [case(VT_STREAM, VT_STREAMED_OBJECT)] IStream *pStream;\n    [case(VT_STORAGE, VT_STORED_OBJECT)]  IStorage *pStorage;\n    [case(VT_BSTR)]                       BSTR bstrVal;\n    [case(VT_BSTR_BLOB)]                  BSTRBLOB bstrblobVal;\n    [case(VT_LPSTR)]                      LPSTR pszVal;\n    [case(VT_LPWSTR)]                     LPWSTR pwszVal;\n    [case(VT_UNKNOWN)]                    IUnknown *punkVal;\n    [case(VT_DISPATCH)]                   IDispatch *pdispVal;\n    [case(VT_UI1|VT_VECTOR)]              CAUB caub;\n    [case(VT_I2|VT_VECTOR)]               CAI cai;\n    [case(VT_UI2|VT_VECTOR)]              CAUI caui;\n    [case(VT_BOOL|VT_VECTOR)]             CABOOL cabool;\n    [case(VT_I4|VT_VECTOR)]               CAL cal;\n    [case(VT_UI4|VT_VECTOR)]              CAUL caul;\n    [case(VT_R4|VT_VECTOR)]               CAFLT caflt;\n    [case(VT_ERROR|VT_VECTOR)]            CASCODE cascode;\n    [case(VT_I8|VT_VECTOR)]               CAH cah;\n    [case(VT_UI8|VT_VECTOR)]              CAUH cauh;\n    [case(VT_R8|VT_VECTOR)]               CADBL cadbl;\n    [case(VT_CY|VT_VECTOR)]               CACY cacy;\n    [case(VT_DATE|VT_VECTOR)]             CADATE cadate;\n    [case(VT_FILETIME|VT_VECTOR)]         CAFILETIME cafiletime;\n    [case(VT_CLSID|VT_VECTOR)]            CACLSID cauuid;\n    [case(VT_CF|VT_VECTOR)]               CACLIPDATA caclipdata;\n    [case(VT_BSTR|VT_VECTOR)]             CABSTR cabstr;\n    [case(VT_BSTR_BLOB|VT_VECTOR)]        CABSTRBLOB cabstrblob;\n    [case(VT_LPSTR|VT_VECTOR)]            CALPSTR calpstr;\n    [case(VT_LPWSTR|VT_VECTOR)]           CALPWSTR calpwstr;\n    [case(VT_VARIANT|VT_VECTOR)]          CAPROPVARIANT capropvar;\n    [case(VT_ARRAY|VT_I1,\n          VT_ARRAY|VT_UI1,\n          VT_ARRAY|VT_I2,\n          VT_ARRAY|VT_UI2,\n          VT_ARRAY|VT_I4,\n          VT_ARRAY|VT_UI4,\n          VT_ARRAY|VT_INT,\n          VT_ARRAY|VT_UINT,\n          VT_ARRAY|VT_R4,\n          VT_ARRAY|VT_R8,\n          VT_ARRAY|VT_CY,\n          VT_ARRAY|VT_DATE,\n          VT_ARRAY|VT_BSTR,\n          VT_ARRAY|VT_BOOL,\n          VT_ARRAY|VT_DECIMAL,\n          VT_ARRAY|VT_DISPATCH,\n          VT_ARRAY|VT_UNKNOWN,\n          VT_ARRAY|VT_ERROR,\n          VT_ARRAY|VT_VARIANT)]           LPSAFEARRAY parray;\n    [case(VT_BYREF|VT_I1)]                CHAR *pcVal;\n    [case(VT_BYREF|VT_UI1)]               UCHAR *pbVal;\n    [case(VT_BYREF|VT_I2)]                SHORT *piVal;\n    [case(VT_BYREF|VT_UI2)]               USHORT *puiVal;\n    [case(VT_BYREF|VT_I4)]                LONG *plVal;\n    [case(VT_BYREF|VT_UI4)]               ULONG *pulVal;\n    [case(VT_BYREF|VT_INT)]               INT *pintVal;\n    [case(VT_BYREF|VT_UINT)]              UINT *puintVal;\n    [case(VT_BYREF|VT_R4)]                FLOAT *pfltVal;\n    [case(VT_BYREF|VT_R8)]                DOUBLE *pdblVal;\n    [case(VT_BYREF|VT_BOOL)]              VARIANT_BOOL *pboolVal;\n    [case(VT_BYREF|VT_DECIMAL)]           DECIMAL *pdecVal;\n    [case(VT_BYREF|VT_ERROR)]             SCODE *pscode;\n    [case(VT_BYREF|VT_CY)]                CY *pcyVal;\n    [case(VT_BYREF|VT_DATE)]              DATE *pdate;\n    [case(VT_BYREF|VT_BSTR)]              BSTR *pbstrVal;\n    [case(VT_BYREF|VT_UNKNOWN)]           IUnknown **ppunkVal;\n    [case(VT_BYREF|VT_DISPATCH)]          IDispatch **ppdispVal;\n    [case(VT_BYREF|VT_ARRAY)]             LPSAFEARRAY *pparray;\n    [case(VT_BYREF|VT_VARIANT)]           PROPVARIANT *pvarVal;\n    };\n  };\n\n  typedef struct tagPROPVARIANT *LPPROPVARIANT;\n\n  cpp_quote(\"#if 0\")\n  typedef const PROPVARIANT * REFPROPVARIANT;\n  cpp_quote(\"#endif\")\n  cpp_quote(\"#ifndef _REFPROPVARIANT_DEFINED\")\n  cpp_quote(\"#define _REFPROPVARIANT_DEFINED\")\n  cpp_quote(\"#ifdef __cplusplus\")\n  cpp_quote(\"#define REFPROPVARIANT const PROPVARIANT &\")\n  cpp_quote(\"#else\")\n  cpp_quote(\"#define REFPROPVARIANT const PROPVARIANT * __MIDL_CONST\")\n  cpp_quote(\"#endif\")\n  cpp_quote(\"#endif\")\n\n  cpp_quote(\"#define PIDDI_THUMBNAIL 0x00000002L /* VT_BLOB */\")\n  cpp_quote(\"\")\n  cpp_quote(\"#define PIDSI_TITLE        0x00000002L /* VT_LPSTR */\")\n  cpp_quote(\"#define PIDSI_SUBJECT      0x00000003L /* VT_LPSTR */\")\n  cpp_quote(\"#define PIDSI_AUTHOR       0x00000004L /* VT_LPSTR */\")\n  cpp_quote(\"#define PIDSI_KEYWORDS     0x00000005L /* VT_LPSTR */\")\n  cpp_quote(\"#define PIDSI_COMMENTS     0x00000006L /* VT_LPSTR */\")\n  cpp_quote(\"#define PIDSI_TEMPLATE     0x00000007L /* VT_LPSTR */\")\n  cpp_quote(\"#define PIDSI_LASTAUTHOR   0x00000008L /* VT_LPSTR */\")\n  cpp_quote(\"#define PIDSI_REVNUMBER    0x00000009L /* VT_LPSTR */\")\n  cpp_quote(\"#define PIDSI_EDITTIME     0x0000000AL /* VT_FILETIME (UTC) */\")\n  cpp_quote(\"#define PIDSI_LASTPRINTED  0x0000000BL /* VT_FILETIME (UTC) */\")\n  cpp_quote(\"#define PIDSI_CREATE_DTM   0x0000000CL /* VT_FILETIME (UTC) */\")\n  cpp_quote(\"#define PIDSI_LASTSAVE_DTM 0x0000000DL /* VT_FILETIME (UTC) */\")\n  cpp_quote(\"#define PIDSI_PAGECOUNT    0x0000000EL /* VT_I4 */\")\n  cpp_quote(\"#define PIDSI_WORDCOUNT    0x0000000FL /* VT_I4 */\")\n  cpp_quote(\"#define PIDSI_CHARCOUNT    0x00000010L /* VT_I4 */\")\n  cpp_quote(\"#define PIDSI_THUMBNAIL    0x00000011L /* VT_CF */\")\n  cpp_quote(\"#define PIDSI_APPNAME      0x00000012L /* VT_LPSTR */\")\n  cpp_quote(\"#define PIDSI_DOC_SECURITY 0x00000013L /* VT_I4 */\")\n  cpp_quote(\"\")\n  cpp_quote(\"#define PIDDSI_CATEGORY    0x00000002L /* VT_LPSTR */\")\n  cpp_quote(\"#define PIDDSI_PRESFORMAT  0x00000003L /* VT_LPSTR */\")\n  cpp_quote(\"#define PIDDSI_BYTECOUNT   0x00000004L /* VT_I4 */\")\n  cpp_quote(\"#define PIDDSI_LINECOUNT   0x00000005L /* VT_I4 */\")\n  cpp_quote(\"#define PIDDSI_PARCOUNT    0x00000006L /* VT_I4 */\")\n  cpp_quote(\"#define PIDDSI_SLIDECOUNT  0x00000007L /* VT_I4 */\")\n  cpp_quote(\"#define PIDDSI_NOTECOUNT   0x00000008L /* VT_I4 */\")\n  cpp_quote(\"#define PIDDSI_HIDDENCOUNT 0x00000009L /* VT_I4 */\")\n  cpp_quote(\"#define PIDDSI_MMCLIPCOUNT 0x0000000AL /* VT_I4 */\")\n  cpp_quote(\"#define PIDDSI_SCALE       0x0000000BL /* VT_BOOL */\")\n  cpp_quote(\"#define PIDDSI_HEADINGPAIR 0x0000000CL /* VT_VARIANT|VT_VECTOR */\")\n  cpp_quote(\"#define PIDDSI_DOCPARTS    0x0000000DL /* VT_LPSTR|VT_VECTOR */\")\n  cpp_quote(\"#define PIDDSI_MANAGER     0x0000000EL /* VT_LPSTR */\")\n  cpp_quote(\"#define PIDDSI_COMPANY     0x0000000FL /* VT_LPSTR */\")\n  cpp_quote(\"#define PIDDSI_LINKSDIRTY  0x00000010L /* VT_B0OL */\")\n\n  const ULONG PRSPEC_INVALID = 0xffffffff;\n  const ULONG PRSPEC_LPWSTR = 0;\n  const ULONG PRSPEC_PROPID = 1;\n\n  typedef struct tagPROPSPEC {\n    ULONG ulKind;\n    [switch_is(ulKind)] union {\n    [case(PRSPEC_PROPID)] PROPID propid;\n    [case(PRSPEC_LPWSTR)] LPOLESTR lpwstr;\n    [default]             ;\n    } DUMMYUNIONNAME;\n  } PROPSPEC;\n\n  typedef struct tagSTATPROPSTG {\n    LPOLESTR lpwstrName;\n    PROPID propid;\n    VARTYPE vt;\n  } STATPROPSTG;\n\n  cpp_quote(\"/* Macros for dwOSVersion member of STATPROPSETSTG */\")\n  cpp_quote(\"#define PROPSETHDR_OSVER_KIND(dwOSVer)  HIWORD((dwOSVer))\")\n  cpp_quote(\"#define PROPSETHDR_OSVER_MAJOR(dwOSVer) LOBYTE(LOWORD((dwOSVer)))\")\n  cpp_quote(\"#define PROPSETHDR_OSVER_MINOR(dwOSVer) HIBYTE(LOWORD((dwOSVer)))\")\n  cpp_quote(\"#define PROPSETHDR_OSVERSION_UNKNOWN    0xffffffff\")\n\n  typedef struct tagSTATPROPSETSTG {\n    FMTID fmtid;\n    CLSID clsid;\n    DWORD grfFlags;\n    FILETIME mtime;\n    FILETIME ctime;\n    FILETIME atime;\n    DWORD dwOSVersion;\n  } STATPROPSETSTG;\n\n  HRESULT ReadMultiple(\n    [in] ULONG cpspec,\n    [in, size_is(cpspec)] const PROPSPEC rgpspec[],\n    [out, size_is(cpspec)] PROPVARIANT rgpropvar[]);\n\n  HRESULT WriteMultiple(\n    [in] ULONG cpspec,\n    [in, size_is(cpspec)] const PROPSPEC rgpspec[],\n    [in, size_is(cpspec)] const PROPVARIANT rgpropvar[],\n    [in] PROPID propidNameFirst);\n\n  HRESULT DeleteMultiple(\n    [in] ULONG cpspec,\n    [in, size_is(cpspec)] const PROPSPEC rgpspec[]);\n\n  HRESULT ReadPropertyNames(\n    [in] ULONG cpropid,\n    [in, size_is(cpropid)] const PROPID rgpropid[],\n    [out, size_is(cpropid)] LPOLESTR rglpwstrName[]);\n\n  HRESULT WritePropertyNames(\n    [in] ULONG cpropid,\n    [in, size_is(cpropid)] const PROPID rgpropid[],\n    [in, size_is(cpropid)] const LPOLESTR rglpwstrName[]);\n\n  HRESULT DeletePropertyNames(\n    [in] ULONG cpropid,\n    [in, size_is(cpropid)] const PROPID rgpropid[]);\n\n  HRESULT Commit(\n    [in] DWORD grfCommitFlags);\n\n  HRESULT Revert();\n\n  HRESULT Enum(\n    [out] IEnumSTATPROPSTG **ppenum);\n\n  HRESULT SetTimes(\n    [in] const FILETIME *pctime,\n    [in] const FILETIME *patime,\n    [in] const FILETIME *pmtime);\n\n  HRESULT SetClass(\n    [in] REFCLSID clsid);\n\n  HRESULT Stat(\n    [out] STATPROPSETSTG *statpsstg);\n}\n\n[\n  object,\n  uuid(0000013A-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IPropertySetStorage : IUnknown\n{\n  typedef [unique] IPropertySetStorage *LPPROPERTYSETSTORAGE;\n\n  HRESULT Create(\n    [in] REFFMTID rfmtid,\n    [in, unique] const CLSID *pclsid,\n    [in] DWORD grfFlags,\n    [in] DWORD grfMode,\n    [out] IPropertyStorage **ppprstg);\n\n  HRESULT Open(\n    [in] REFFMTID rfmtid,\n    [in] DWORD grfMode,\n    [out] IPropertyStorage **ppprstg);\n\n  HRESULT Delete(\n    [in] REFFMTID rfmtid);\n\n  HRESULT Enum(\n    [out] IEnumSTATPROPSETSTG **ppenum);\n}\n\n[\n  object,\n  uuid(00000139-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IEnumSTATPROPSTG : IUnknown\n{\n  typedef [unique] IEnumSTATPROPSTG *LPENUMSTATPROPSTG;\n\n  [local]\n  HRESULT Next(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    STATPROPSTG *rgelt,\n    [out] ULONG *pceltFetched);\n\n  [call_as(Next)]\n  HRESULT RemoteNext(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    STATPROPSTG *rgelt,\n    [out] ULONG *pceltFetched);\n\n  HRESULT Skip(\n    [in] ULONG celt);\n\n  HRESULT Reset();\n\n  HRESULT Clone(\n    [out] IEnumSTATPROPSTG **ppenum);\n}\n\n[\n  object,\n  uuid(0000013B-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IEnumSTATPROPSETSTG : IUnknown\n{\n  typedef [unique] IEnumSTATPROPSETSTG *LPENUMSTATPROPSETSTG;\n\n  [local]\n  HRESULT Next(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    STATPROPSETSTG *rgelt,\n    [out] ULONG *pceltFetched);\n\n  [call_as(Next)]\n  HRESULT RemoteNext(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)]\n    STATPROPSETSTG *rgelt,\n    [out] ULONG *pceltFetched);\n\n  HRESULT Skip(\n    [in] ULONG celt);\n\n  HRESULT Reset();\n\n  HRESULT Clone(\n    [out] IEnumSTATPROPSETSTG **ppenum);\n}\n\ntypedef struct SERIALIZEDPROPERTYVALUE {\n    DWORD dwType;\n    BYTE rgb[1];\n} SERIALIZEDPROPERTYVALUE;\n\ncpp_quote(\"HRESULT WINAPI FreePropVariantArray(ULONG,PROPVARIANT*);\")\ncpp_quote(\"HRESULT WINAPI PropVariantClear(PROPVARIANT*);\")\ncpp_quote(\"HRESULT WINAPI PropVariantCopy(PROPVARIANT*,const PROPVARIANT*);\")\ncpp_quote(\"\")\ncpp_quote(\"#define _PROPVARIANT_INIT_DEFINED_\")\ncpp_quote(\"#define PropVariantInit(p) memset((p), 0, sizeof(PROPVARIANT))\")\ncpp_quote(\"\")\ncpp_quote(\"#ifndef _STGCREATEPROPSTG_DEFINED_\")\ncpp_quote(\"#define _STGCREATEPROPSTG_DEFINED_\")\ncpp_quote(\"HRESULT WINAPI StgCreatePropStg(IUnknown *, REFFMTID, const CLSID *, DWORD, DWORD, IPropertyStorage **);\")\ncpp_quote(\"HRESULT WINAPI StgOpenPropStg(IUnknown *, REFFMTID, DWORD, DWORD, IPropertyStorage **);\")\ncpp_quote(\"HRESULT WINAPI StgCreatePropSetStg(IStorage *, DWORD, IPropertySetStorage **);\")\ncpp_quote(\"#define CCH_MAX_PROPSTG_NAME 31\")\ncpp_quote(\"HRESULT WINAPI FmtIdToPropStgName(const FMTID *, LPOLESTR);\")\ncpp_quote(\"HRESULT WINAPI PropStgNameToFmtId(const LPOLESTR, FMTID *);\")\ncpp_quote(\"#endif /* _STGCREATEPROPSTG_DEFINED_ */\")\ncpp_quote(\"\")\n"
  },
  {
    "path": "wine/windows/propkey.h",
    "content": "/*\n * Copyright (C) 2010 Maarten Lankhorst for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _INC_PROPKEY\n#define _INC_PROPKEY\n\n#include <propkeydef.h>\n\nDEFINE_PROPERTYKEY(PKEY_Audio_ChannelCount, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 7);\nDEFINE_PROPERTYKEY(PKEY_Audio_Compression, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 10);\nDEFINE_PROPERTYKEY(PKEY_Audio_Format, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 2);\nDEFINE_PROPERTYKEY(PKEY_Audio_IsVariableBitRate, 0xe6822fee, 0x8c17, 0x4d62, 0x82, 0x3c, 0x8e, 0x9c, 0xfc, 0xbd, 0x1d, 0x5c, 100);\nDEFINE_PROPERTYKEY(PKEY_Audio_PeakValue, 0x2579e5d0, 0x1116, 0x4084, 0xbd, 0x9a, 0x9b, 0x4f, 0x7c, 0xb4, 0xdf, 0x5e, 100);\nDEFINE_PROPERTYKEY(PKEY_Audio_SampleRate, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 5);\nDEFINE_PROPERTYKEY(PKEY_Audio_SampleSize, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 6);\nDEFINE_PROPERTYKEY(PKEY_Audio_StreamName, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 9);\nDEFINE_PROPERTYKEY(PKEY_Audio_StreamNumber, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 8);\n\nDEFINE_PROPERTYKEY(PKEY_Title, 0xf29f85e0,0x4ff9,0x1068,0xab,0x91,0x08,0x00,0x2b,0x27,0xb3,0xd9,2);\n\nDEFINE_PROPERTYKEY(PKEY_ItemName, 0x6b8da074,0x3b5c,0x43bc,0x88,0x6f,0x0a,0x2c,0xdc,0xe0,0x0b,0x6f,100);\n\nDEFINE_PROPERTYKEY(PKEY_AppUserModel_ExcludeFromShowInNewInstall, 0x9f4c2855,0x9f79,0x4b39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,8);\nDEFINE_PROPERTYKEY(PKEY_AppUserModel_ID, 0x9f4c2855,0x9f79,0x4B39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,5);\nDEFINE_PROPERTYKEY(PKEY_AppUserModel_IsDestListSeparator, 0x9f4c2855,0x9f79,0x4b39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,6);\nDEFINE_PROPERTYKEY(PKEY_AppUserModel_PreventPinning, 0x9f4c2855,0x9F79,0x4b39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,9);\nDEFINE_PROPERTYKEY(PKEY_AppUserModel_RelaunchCommand, 0x9f4c2855,0x9f79,0x4b39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,2);\nDEFINE_PROPERTYKEY(PKEY_AppUserModel_RelaunchDisplayNameResource, 0x9f4c2855,0x9f79,0x4b39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,4);\nDEFINE_PROPERTYKEY(PKEY_AppUserModel_RelaunchIconResource, 0x9f4c2855,0x9f79,0x4b39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,3);\n\n#endif /*_INC_PROPKEY*/\n"
  },
  {
    "path": "wine/windows/propkeydef.h",
    "content": "/*\n * Copyright (C) 2009 Maarten Lankhorst\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef PID_FIRST_USABLE\n#define PID_FIRST_USABLE 2\n#endif\n\n#ifndef REFPROPERTYKEY\n#ifdef __cplusplus\n#define REFPROPERTYKEY const PROPERTYKEY &\n#else /*!__cplusplus*/\n#define REFPROPERTYKEY const PROPERTYKEY * __MIDL_CONST\n#endif\n#endif\n\n#undef DEFINE_PROPERTYKEY\n\n#ifdef INITGUID\n#ifdef __cplusplus\n#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \\\n        EXTERN_C const PROPERTYKEY DECLSPEC_SELECTANY name DECLSPEC_HIDDEN = \\\n        { { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }, pid }\n#else\n#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \\\n        const PROPERTYKEY DECLSPEC_SELECTANY name DECLSPEC_HIDDEN = \\\n        { { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }, pid }\n#endif\n#else\n#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \\\n    EXTERN_C const PROPERTYKEY name DECLSPEC_HIDDEN\n#endif\n\n#ifndef IsEqualPropertyKey\n#ifdef __cplusplus\n#define IsEqualPropertyKey(a,b) (((a).pid == (b).pid) && IsEqualIID((a).fmtid,(b).fmtid))\n#else\n#define IsEqualPropertyKey(a,b) (((a).pid == (b).pid) && IsEqualIID(&(a).fmtid,&(b).fmtid))\n#endif\n#endif\n\n#ifndef _PROPERTYKEY_EQUALITY_OPERATORS_\n#define _PROPERTYKEY_EQUALITY_OPERATORS_\n#ifdef __cplusplus\nextern \"C++\"\n{\n\ninline bool operator==(REFPROPERTYKEY guidOne, REFPROPERTYKEY guidOther)\n{\n    return IsEqualPropertyKey(guidOne, guidOther);\n}\ninline bool operator!=(REFPROPERTYKEY guidOne, REFPROPERTYKEY guidOther)\n{\n    return !(guidOne == guidOther);\n}\n\n}\n#endif\n#endif\n"
  },
  {
    "path": "wine/windows/propsys.idl",
    "content": "/*\n * system property interfaces\n *\n * Copyright 2009 Maarten Lankhorst\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n */\n\n\nimport \"objidl.idl\";\nimport \"oleidl.idl\";\nimport \"ocidl.idl\";\nimport \"shtypes.idl\";\nimport \"structuredquerycondition.idl\";\n\ncpp_quote(\"#ifndef PSSTDAPI\")\ncpp_quote(\"#define PSSTDAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE\")\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#if 0\")\ntypedef PROPERTYKEY *REFPROPERTYKEY;\ncpp_quote(\"#endif\")\ncpp_quote(\"#include <propkeydef.h>\")\n\n[\n    uuid(b7d14566-0509-4cce-a71f-0a554233bd9b),\n    object,\n    pointer_default(unique)\n]\ninterface IInitializeWithFile : IUnknown\n{\n    HRESULT Initialize(\n        [in,string] LPCWSTR pszFilePath,\n        [in] DWORD grfMode\n    );\n}\n\n[\n    uuid(b824b49d-22ac-4161-ac8a-9916e8fa3f7f),\n    object,\n    pointer_default(unique)\n]\ninterface IInitializeWithStream : IUnknown\n{\n    [local] HRESULT Initialize(\n        [in] IStream *pstream,\n        [in] DWORD grfMode\n    );\n}\n\n[\n    uuid(886d8eeb-8cf2-4446-8d02-cdba1dbdcf99),\n    object,\n    pointer_default(unique)\n]\ninterface IPropertyStore : IUnknown\n{\n    HRESULT GetCount(\n        [out] DWORD *cProps\n    );\n    HRESULT GetAt(\n        [in] DWORD iProp,\n        [out] PROPERTYKEY *pkey\n    );\n    HRESULT GetValue(\n        [in] REFPROPERTYKEY key,\n        [out] PROPVARIANT *pv\n    );\n    HRESULT SetValue(\n        [in] REFPROPERTYKEY key,\n        [in] REFPROPVARIANT propvar\n    );\n    HRESULT Commit(void);\n}\n\ntypedef IPropertyStore *LPPROPERTYSTORE;\n\n[\n    uuid(71604b0f-97b0-4764-8577-2f13e98a1422),\n    object,\n    pointer_default(unique)\n]\ninterface INamedPropertyStore : IUnknown\n{\n    HRESULT GetNamedValue(\n        [in,string] LPCWSTR pszName,\n        [out] PROPVARIANT *ppropvar\n    );\n    HRESULT SetNamedValue(\n        [in,string] LPCWSTR pszName,\n        [in] REFPROPVARIANT propvar\n    );\n    HRESULT GetNameCount(\n        [out] DWORD *pdwCount\n    );\n    HRESULT GetNameAt(\n        [in] DWORD iProp,\n        [out] BSTR *pbstrName\n    );\n}\n\ntypedef [v1_enum] enum GETPROPERTYSTOREFLAGS\n{\n    GPS_DEFAULT = 0x00,\n    GPS_HANDLERPROPERTIESONLY = 0x01,\n    GPS_READWRITE = 0x02,\n    GPS_TEMPORARY = 0x04,\n    GPS_FASTPROPERTIESONLY = 0x08,\n    GPS_OPENSLOWITEM = 0x10,\n    GPS_DELAYCREATION = 0x20,\n    GPS_BESTEFFORT = 0x40,\n    GPS_NO_OPLOCK = 0x80,\n    GPS_MASK_VALID = 0xff\n} GETPROPERTYSTOREFLAGS;\n\ncpp_quote(\"DEFINE_ENUM_FLAG_OPERATORS(GETPROPERTYSTOREFLAGS)\")\n\n[\n    uuid(fc0ca0a7-c316-4fd2-9031-3e628e6d4f23),\n    object\n]\ninterface IObjectWithPropertyKey : IUnknown\n{\n    HRESULT SetPropertyKey(\n        [in] REFPROPERTYKEY key\n    );\n    HRESULT GetPropertyKey(\n        [out] PROPERTYKEY *key\n    );\n}\n\ntypedef [v1_enum] enum PKA_FLAGS\n{\n    PKA_SET,\n    PKA_APPEND,\n    PKA_DELETE\n} PKA_FLAGS;\n\n[\n    uuid(f917bc8a-1bba-4478-a245-1bde03eb9431),\n    object,\n    pointer_default(unique)\n]\ninterface IPropertyChange : IObjectWithPropertyKey\n{\n    HRESULT ApplyToPropVariant([in] REFPROPVARIANT propvarin, [out] PROPVARIANT *propvarout);\n}\n\n[\n    uuid(380f5cad-1b5e-42f2-805d-637fd392d31e),\n    object,\n    pointer_default(unique)\n]\ninterface IPropertyChangeArray : IUnknown\n{\n    HRESULT GetCount(\n        [out] UINT *pcOperations\n    );\n    HRESULT GetAt(\n        [in] UINT iIndex,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppv\n    );\n    HRESULT InsertAt(\n        [in] UINT iIndex,\n        [in] IPropertyChange *ppropChange\n    );\n    HRESULT Append(\n        [in] IPropertyChange *ppropChange\n    );\n    HRESULT AppendOrReplace(\n        [in] IPropertyChange *ppropChange\n    );\n    HRESULT RemoveAt(\n        [in] UINT iIndex\n    );\n    HRESULT IsKeyInArray(\n        [in] REFPROPERTYKEY key\n    );\n}\n\n[\n    uuid(c8e2d566-186e-4d49-bf41-6909ead56acc),\n    object,\n    pointer_default(unique)\n]\ninterface IPropertyStoreCapabilities : IUnknown\n{\n    HRESULT IsPropertyWritable(\n        [in] REFPROPERTYKEY key\n    );\n}\n\n[\n    uuid(3017056d-9a91-4e90-937d-746c72abbf4f),\n    object,\n    pointer_default(unique)\n]\ninterface IPropertyStoreCache : IPropertyStore\n{\n    typedef [v1_enum] enum PSC_STATE\n    {\n        PSC_NORMAL = 0,\n        PSC_NOTINSOURCE,\n        PSC_DIRTY,\n        PSC_READONLY\n    } PSC_STATE;\n\n    HRESULT GetState(\n        [in] REFPROPERTYKEY key,\n        [out] PSC_STATE *pstate\n    );\n    HRESULT GetValueAndState(\n        [in] REFPROPERTYKEY key,\n        [out] PROPVARIANT *ppropvar,\n        [out] PSC_STATE *pstate\n    );\n    HRESULT SetState(\n        [in] REFPROPERTYKEY key,\n        [in] PSC_STATE pstate\n    );\n    HRESULT SetValueAndState(\n        [in] REFPROPERTYKEY key,\n        [in, unique] const PROPVARIANT *ppropvar,\n        [in] PSC_STATE state\n    );\n}\n\n[\n    uuid(11e1fbf9-2d56-4a6b-8db3-7cd193a471f2),\n    object,\n    pointer_default(unique)\n]\ninterface IPropertyEnumType : IUnknown\n{\n    typedef [v1_enum] enum PROPENUMTYPE\n    {\n        PET_DISCRETEVALUE = 0,\n        PET_RANGEDVALUE,\n        PET_DEFAULTVALUE,\n        PET_ENDRANGE\n    } PROPENUMTYPE;\n\n    HRESULT GetEnumType(\n        [out] PROPENUMTYPE *penumtype\n    );\n    HRESULT GetValue(\n        [out] PROPVARIANT *ppropvar\n    );\n    HRESULT GetRangeMinValue(\n        [out] PROPVARIANT *ppropvar\n    );\n    HRESULT GetRangeSetValue(\n        [out] PROPVARIANT *ppropvar\n    );\n    HRESULT GetDisplayText(\n        [out] LPWSTR *ppszDisplay\n    );\n}\n\n[\n    uuid(9b6e051c-5ddd-4321-9070-fe2acb55e974),\n    object,\n    pointer_default(unique)\n]\ninterface IPropertyEnumType2 : IPropertyEnumType\n{\n    HRESULT GetImageReference(\n        [out] LPWSTR *ppszImageRes\n    );\n}\n\n[\n    uuid(a99400f4-3d84-4557-94ba-1242fb2cc9a6),\n    object,\n    pointer_default(unique)\n]\ninterface IPropertyEnumTypeList : IUnknown\n{\n    HRESULT GetCount(\n        [out] UINT *pctypes\n    );\n    HRESULT GetAt(\n        [in] UINT itype,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppv\n    );\n    HRESULT GetConditionAt(\n        [in] UINT nIndex,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppv\n    );\n    HRESULT FindMatchingIndex(\n        [in] REFPROPVARIANT propvarCmp,\n        [out] UINT *pnIndex\n    );\n}\n\n[\n    uuid(6f79d558-3e96-4549-a1d1-7d75d2288814),\n    object,\n    pointer_default(unique)\n]\ninterface IPropertyDescription : IUnknown\n{\n    typedef [v1_enum] enum PROPDESC_TYPE_FLAGS\n    {\n        PDTF_DEFAULT = 0,\n        PDTF_MULTIPLEVALUES = 0x001,\n        PDTF_ISINNATE = 0x002,\n        PDTF_ISGROUP = 0x004,\n        PDTF_CANGROUPBY = 0x008,\n        PDTF_CANSTACKBY = 0x010,\n        PDTF_ISTREEPROPERTY = 0x020,\n        PDTF_INCLUDEINFULLTEXTQUERY = 0x040,\n        PDTF_ISVIEWABLE = 0x080,\n        PDTF_ISQUERYABLE = 0x100,\n        PDTF_CANBEPURGED = 0x200,\n        PDTF_SEARCHRAWVALUE = 0x400,\n        PDTF_ISSYSTEMPROPERTY = 0x80000000,\n        PDTF_MASK_ALL = 0x800007ff\n    } PROPDESC_TYPE_FLAGS;\n    cpp_quote(\"DEFINE_ENUM_FLAG_OPERATORS(PROPDESC_TYPE_FLAGS)\")\n\n    typedef [v1_enum] enum PROPDESC_VIEW_FLAGS\n    {\n        PDVF_DEFAULT = 0x0000,\n        PDVF_CENTERALIGN = 0x0001,\n        PDVF_RIGHTALIGN = 0x0002,\n        PDVF_BEGINNEWGROUP = 0x0004,\n        PDVF_FILLAREA = 0x0008,\n        PDVF_SORTDESCENDING = 0x0010,\n        PDVF_SHOWONLYIFPRESENT = 0x0020,\n        PDVF_SHOWBYDEFAULT = 0x0040,\n        PDVF_SHOWINPRIMARYLIST = 0x0080,\n        PDVF_SHOWINSECONDARYLIST = 0x0100,\n        PDVF_HIDELABEL = 0x0200,\n        PDVF_HIDDEN = 0x0800,\n        PDVF_CANWRAP = 0x1000,\n        PDVF_MASK_ALL = 0x1bff\n    } PROPDESC_VIEW_FLAGS;\n    cpp_quote(\"DEFINE_ENUM_FLAG_OPERATORS(PROPDESC_VIEW_FLAGS)\")\n\n    typedef [v1_enum] enum PROPDESC_DISPLAYTYPE\n    {\n        PDDT_STRING = 0,\n        PDDT_NUMBER,\n        PDDT_BOOLEAN,\n        PDDT_DATETIME,\n        PDDT_ENUMERATED\n    } PROPDESC_DISPLAYTYPE;\n\n    typedef [v1_enum] enum PROPDESC_GROUPING_RANGE\n    {\n        PDGR_DISCRETE = 0,\n        PDGR_ALPHANUMERIC,\n        PDGR_SIZE,\n        PDGR_DYNAMIC,\n        PDGR_DATE,\n        PDGR_PERCENT,\n        PDGR_ENUMERATED\n    } PROPDESC_GROUPING_RANGE;\n\n    typedef [v1_enum] enum PROPDESC_FORMAT_FLAGS\n    {\n        PDFF_DEFAULT = 0x0000,\n        PDFF_PREFIXNAME = 0x0001,\n        PDFF_FILENAME = 0x0002,\n        PDFF_ALWAYSKB = 0x0004,\n        PDFF_RESERVED_RIGHTTOLEFT = 0x0008,\n        PDFF_SHORTTIME = 0x0010,\n        PDFF_LONGTIME = 0x0020,\n        PDFF_HIDETIME = 0x0040,\n        PDFF_SHORTDATE = 0x0080,\n        PDFF_LONGDATE = 0x0100,\n        PDFF_HIDEDATE = 0x0200,\n        PDFF_RELATIVEDATE = 0x0400,\n        PDFF_USEEDITINVITATION = 0x0800,\n        PDFF_READONLY = 0x1000,\n        PDFF_NOAUTOREADINGORDER = 0x2000\n    } PROPDESC_FORMAT_FLAGS;\n    cpp_quote(\"DEFINE_ENUM_FLAG_OPERATORS(PROPDESC_FORMAT_FLAGS)\")\n\n    typedef [v1_enum] enum PROPDESC_SORTDESCRIPTION\n    {\n        PDSD_GENERAL = 0,\n        PDSD_A_Z,\n        PDSD_LOWEST_HIGHEST,\n        PDSD_SMALLEST_BIGGEST,\n        PDSD_OLDEST_NEWEST\n    } PROPDESC_SORTDESCRIPTION;\n\n    typedef [v1_enum] enum PROPDESC_RELATIVEDESCRIPTION_TYPE\n    {\n        PDRDT_GENERAL = 0,\n        PDRDT_DATE,\n        PDRDT_SIZE,\n        PDRDT_COUNT,\n        PDRDT_REVISION,\n        PDRDT_LENGTH,\n        PDRDT_DURATION,\n        PDRDT_SPEED,\n        PDRDT_RATE,\n        PDRDT_RATING,\n        PDRDT_PRIORITY\n    } PROPDESC_RELATIVEDESCRIPTION_TYPE;\n\n    typedef [v1_enum] enum PROPDESC_AGGREGATION_TYPE\n    {\n        PDAT_DEFAULT = 0,\n        PDAT_FIRST,\n        PDAT_SUM,\n        PDAT_AVERAGE,\n        PDAT_DATERANGE,\n        PDAT_UNION,\n        PDAT_MAX,\n        PDAT_MIN\n    } PROPDESC_AGGREGATION_TYPE;\n\n    typedef [v1_enum] enum PROPDESC_CONDITION_TYPE\n    {\n        PDCOT_NONE = 0,\n        PDCOT_STRING,\n        PDCOT_SIZE,\n        PDCOT_DATETIME,\n        PDCOT_BOOLEAN,\n        PDCOT_NUMBER\n    } PROPDESC_CONDITION_TYPE;\n\n    HRESULT GetPropertyKey(\n        [out] PROPERTYKEY *pkey\n    );\n    HRESULT GetCanonicalName(\n        [out, string] LPWSTR *ppszName\n    );\n    HRESULT GetPropertyType(\n        [out] VARTYPE *pvartype\n    );\n    HRESULT GetDisplayName(\n        [out, string] LPWSTR *ppszName\n    );\n    HRESULT GetEditInvitation(\n        [out, string] LPWSTR *ppszName\n    );\n    HRESULT GetTypeFlags(\n        [in] PROPDESC_TYPE_FLAGS mask,\n        [out] PROPDESC_TYPE_FLAGS *ppdtFlags\n    );\n    HRESULT GetViewFlags(\n        [out] PROPDESC_VIEW_FLAGS *ppdvFlags\n    );\n    HRESULT GetDefaultColumnWidth(\n        [out] UINT *pcxChars\n    );\n    HRESULT GetDisplayType(\n        [out] PROPDESC_DISPLAYTYPE *pdisplaytype\n    );\n    HRESULT GetColumnState(\n        [out] SHCOLSTATEF *pcsFlags\n    );\n    HRESULT GetGroupingRange(\n        [out] PROPDESC_GROUPING_RANGE *psd\n    );\n    HRESULT GetRelativeDescriptionType(\n        [out] PROPDESC_RELATIVEDESCRIPTION_TYPE *prdt\n    );\n    HRESULT GetRelativeDescription(\n        [in] REFPROPVARIANT propvar1,\n        [in] REFPROPVARIANT propvar2,\n        [out,string] LPWSTR *ppszDesc1,\n        [out,string] LPWSTR *ppszDesc2\n    );\n    HRESULT GetSortDescription(\n        [out] PROPDESC_SORTDESCRIPTION *psd\n    );\n    HRESULT GetSortDescriptionLabel(\n        [in] BOOL fDescending,\n        [out,string] LPWSTR *ppszDescription\n    );\n    HRESULT GetAggregationType(\n        [out] PROPDESC_AGGREGATION_TYPE *paggtype\n    );\n    HRESULT GetConditionType(\n        [out] PROPDESC_CONDITION_TYPE *pcontype,\n        [out] CONDITION_OPERATION *popDefault\n    );\n    HRESULT GetEnumTypeList(\n        [in] REFIID riid,\n        [out,iid_is(riid)] void **ppv\n    );\n    [local] HRESULT CoerceToCanonicalValue(\n        [in,out] PROPVARIANT *propvar\n    );\n    [call_as(CoerceToCanonicalValue)] HRESULT RemoteCoerceToCanonicalValue(\n        [in] REFPROPVARIANT propvar,\n        [out] PROPVARIANT *ppropvar\n    );\n    HRESULT FormatForDisplay(\n        [in] REFPROPVARIANT propvar,\n        [in] PROPDESC_FORMAT_FLAGS flags,\n        [out,string] LPWSTR *ppszDisplay\n    );\n    HRESULT IsValueCanonical(\n        [in] REFPROPVARIANT propvar\n    );\n}\n\n[\n    uuid(57d2eded-5062-400e-b107-5dae79fe57a6),\n    object,\n    pointer_default(unique)\n]\ninterface IPropertyDescription2 : IPropertyDescription\n{\n    HRESULT GetImageReferenceForValue(\n        [in] REFPROPVARIANT propvar,\n        [out,string] LPWSTR *ppszImageRes\n    );\n}\n\n[\n    uuid(f67104fc-2af9-46fd-b32d-243c1404f3d1),\n    object,\n    pointer_default(unique)\n]\ninterface IPropertyDescriptionAliasInfo : IPropertyDescription\n{\n    HRESULT GetSortByAlias(\n        [in] REFIID riid,\n        [out,iid_is(riid)] void **ppv\n    );\n    HRESULT GetAdditionalSortByAliases(\n        [in] REFIID riid,\n        [out,iid_is(riid)] void **ppv\n    );\n}\n\n[\n    uuid(078f91bd-29a2-440f-924e-46a291524520),\n    object,\n    pointer_default(unique)\n]\ninterface IPropertyDescriptionSearchInfo : IPropertyDescription\n{\n    typedef [v1_enum] enum PROPDESC_SEARCHINFO_FLAGS\n    {\n        PDSIF_DEFAULT = 0x0,\n        PDSIF_ININVERTEDINDEX = 0x1,\n        PDSIF_ISCOLUMN = 0x2,\n        PDSIF_ISCOLUMNSPARSE = 0x4,\n        PDSIF_ALWAYSINCLUDE = 0x8,\n    } PROPDESC_SEARCHINFO_FLAGS;\n    cpp_quote(\"DEFINE_ENUM_FLAG_OPERATORS(PROPDESC_SEARCHINFO_FLAGS)\")\n\n    typedef [v1_enum] enum PROPDESC_COLUMNINDEX_TYPE\n    {\n        PDCIT_NONE = 0,\n        PDCIT_ONDISK,\n        PDCIT_INMEMORY,\n        PDCIT_ONDEMAND,\n        PDCIT_ONDISKALL,\n        PDCIT_ONDISKVECTOR\n    } PROPDESC_COLUMNINDEX_TYPE;\n\n    HRESULT GetSearchInfoFlags(\n        [out] PROPDESC_SEARCHINFO_FLAGS *ppdsiFlags\n    );\n    HRESULT GetColumnIndexType(\n        [out] PROPDESC_COLUMNINDEX_TYPE *ppdciType\n    );\n    HRESULT GetProjectionString(\n        [out] LPWSTR *ppszProjection\n    );\n    HRESULT GetMaxSize(\n        [out] UINT *pcbMaxSize\n    );\n}\n\n[\n    uuid(507393f4-2a3d-4a60-b59e-d9c75716c2dd),\n    object,\n    pointer_default(unique)\n]\ninterface IPropertyDescriptionRelatedPropertyInfo : IPropertyDescription\n{\n    HRESULT GetRelatedProperty(\n        [in] LPCWSTR ppszRelationshipName,\n        [in] REFIID riid,\n        [out,iid_is(riid)] void **ppv\n    );\n}\n\ntypedef [v1_enum] enum PROPDESC_ENUMFILTER\n{\n    PDEF_ALL = 0,\n    PDEF_SYSTEM,\n    PDEF_NONSYSTEM,\n    PDEF_VIEWABLE,\n    PDEF_QUERYABLE,\n    PDEF_INFULLTEXTQUERY,\n    PDEF_COLUMN\n} PROPDESC_ENUMFILTER;\n\n[\n    uuid(ca724e8a-c3e6-442b-88a4-6fb0db8035a3),\n    object,\n    pointer_default(unique)\n]\ninterface IPropertySystem : IUnknown\n{\n    HRESULT GetPropertyDescription(\n        [in] REFPROPERTYKEY propkey,\n        [in] REFIID riid,\n        [out,iid_is(riid)] void **ppv\n    );\n    HRESULT GetPropertyDescriptionByName(\n        [in,string] LPCWSTR pszCanonicalName,\n        [in] REFIID riid,\n        [out,iid_is(riid)] void **ppv\n    );\n    HRESULT GetPropertyDescriptionListFromString(\n        [in,string] LPCWSTR pszPropList,\n        [in] REFIID riid,\n        [out,iid_is(riid)] void **ppv\n    );\n    HRESULT EnumeratePropertyDescriptions(\n        [in] PROPDESC_ENUMFILTER filterOn,\n        [in] REFIID riid,\n        [out,iid_is(riid)] void **ppv\n    );\n    HRESULT FormatForDisplay(\n        [in] REFPROPERTYKEY key,\n        [in] REFPROPVARIANT propvar,\n        [in] PROPDESC_FORMAT_FLAGS pdff,\n        [out,string,size_is(cchText)] LPWSTR pszText,\n        [in] DWORD cchText\n    );\n    HRESULT FormatForDisplayAlloc(\n        [in] REFPROPERTYKEY key,\n        [in] REFPROPVARIANT propvar,\n        [in] PROPDESC_FORMAT_FLAGS pdff,\n        [out,string] LPWSTR *pszText\n    );\n    HRESULT RegisterPropertySchema(\n        [in,string] LPCWSTR pszPath\n    );\n    HRESULT UnregisterPropertySchema(\n        [in,string] LPCWSTR pszPath\n    );\n    HRESULT RefreshPropertySchema(void);\n}\n\n[\n    uuid(1f9fc1d0-c39b-4b26-817f-011967d3440e),\n    object,\n    pointer_default(unique)\n]\ninterface IPropertyDescriptionList : IUnknown\n{\n    HRESULT GetCount(\n        [out] UINT *pcelem\n    );\n    HRESULT GetAt(\n        [in] UINT iElem,\n        [in] REFIID riid,\n        [out,iid_is(riid)] void **ppv\n    );\n}\n\n[\n    uuid(bc110b6d-57e8-4148-a9c6-91015ab2f3a5),\n    object,\n    pointer_default(unique)\n]\ninterface IPropertyStoreFactory : IUnknown\n{\n    HRESULT GetPropertyStore(\n        [in] GETPROPERTYSTOREFLAGS flags,\n        [in,unique] IUnknown *pUnkFactory,\n        [in] REFIID riid,\n        [out,iid_is(riid)] void **ppv\n    );\n    HRESULT GetPropertyStoreForKeys(\n        [in,unique] const PROPERTYKEY *rgKeys,\n        [in] UINT cKeys,\n        [in] GETPROPERTYSTOREFLAGS flags,\n        [in] REFIID riid,\n        [out,iid_is(riid)] void **ppv\n    );\n}\n\n[\n    uuid(40d4577f-e237-4bdb-bd69-58f089431b6a),\n    object,\n    pointer_default(unique)\n]\ninterface IDelayedPropertyStoreFactory : IPropertyStoreFactory\n{\n    HRESULT GetDelayedPropertyStore(\n        [in] GETPROPERTYSTOREFLAGS flags,\n        [in] DWORD dwStoreId,\n        [in] REFIID riid,\n        [out,iid_is(riid)] void **ppv\n    );\n}\n\n[v1_enum] enum _PERSIST_SPROPSTORE_FLAGS\n{\n    FPSPS_DEFAULT = 0,\n    FPSPS_READONLY = 1\n};\ntypedef int PERSIST_SPROPSTORE_FLAGS;\n\ntypedef struct tagSERIALIZEDROPSTORAGE SERIALIZEDPROPSTORAGE;\n\ncpp_quote(\"#if 0\") /* Wine doesn't have __unaligned builtin, hack */\ntypedef SERIALIZEDPROPSTORAGE *PUSERIALIZEDPROPSTORAGE;\ntypedef const SERIALIZEDPROPSTORAGE *PCUSERIALIZEDPROPSTORAGE;\ncpp_quote(\"#endif\")\ncpp_quote(\"typedef SERIALIZEDPROPSTORAGE UNALIGNED *PUSERIALIZEDPROPSTORAGE;\")\ncpp_quote(\"typedef const SERIALIZEDPROPSTORAGE UNALIGNED *PCUSERIALIZEDPROPSTORAGE;\")\n\n[\n    uuid(e318ad57-0aa0-450f-aca5-6fab7103d917),\n    pointer_default(unique),\n    local\n]\ninterface IPersistSerializedPropStorage : IUnknown\n{\n    HRESULT SetFlags(\n        [in] PERSIST_SPROPSTORE_FLAGS flags\n    );\n    HRESULT SetPropertyStorage(\n        [in] PCUSERIALIZEDPROPSTORAGE psps,\n        [in] DWORD cb\n    );\n    HRESULT GetPropertyStorage(\n        [out] SERIALIZEDPROPSTORAGE **psps,\n        [out] DWORD *pcb\n    );\n}\n\n[\n    uuid(77effa68-4f98-4366-ba72-573b3d880571),\n    pointer_default(unique),\n    local\n]\ninterface IPersistSerializedPropStorage2 : IPersistSerializedPropStorage\n{\n    HRESULT GetpropertyStorageSize(\n        [out] DWORD *pcb\n    );\n    HRESULT GetPropertyStorageBuffer(\n        [out] SERIALIZEDPROPSTORAGE *psps,\n        [in] DWORD cb,\n        [out] DWORD *pcbWritten\n    );\n}\n\n[\n    uuid(fa955fd9-38be-4879-a6ce-824cf52d609f),\n    object,\n    pointer_default(unique)\n]\ninterface IPropertySystemChangeNotify : IUnknown\n{\n    HRESULT SchemaRefreshed(void);\n}\n\n/* Interface for CoCreateInstance? */\n[\n    uuid(75121952-e0d0-43e5-9380-1d80483acf72),\n    pointer_default(unique)\n]\ninterface ICreateObject : IUnknown\n{\n    HRESULT CreateObject(\n        [in] REFCLSID clsid,\n        [in,unique] IUnknown *pUnkOuter,\n        [in] REFIID riid,\n        [out,iid_is(riid)] void **ppv\n    );\n}\n\ncpp_quote(\"#define PKEY_PIDSTR_MAX 10\")\ncpp_quote(\"#define GUIDSTRING_MAX 39\")\ncpp_quote(\"#define PKEYSTR_MAX (GUIDSTRING_MAX + 1 + PKEY_PIDSTR_MAX)\")\n\ncpp_quote(\"HRESULT WINAPI PSStringFromPropertyKey(REFPROPERTYKEY,LPWSTR,UINT);\")\ncpp_quote(\"HRESULT WINAPI PSPropertyKeyFromString(LPCWSTR,PROPERTYKEY*);\")\ncpp_quote(\"HRESULT WINAPI PSGetPropertyDescription(REFPROPERTYKEY,REFIID,void **);\")\ncpp_quote(\"HRESULT WINAPI PSGetPropertyDescriptionListFromString(LPCWSTR,REFIID,void **);\")\ncpp_quote(\"HRESULT WINAPI PSRefreshPropertySchema(void);\")\ncpp_quote(\"HRESULT WINAPI PSRegisterPropertySchema(LPCWSTR);\")\ncpp_quote(\"HRESULT WINAPI PSUnregisterPropertySchema(LPCWSTR);\")\n\n/* TODO: Add remainder of the C api here */\n\n[\n    uuid(2cda3294-6c4f-4020-b161-27c530c81fa6),\n    lcid(0x0000),\n    version(1.0)\n]\nlibrary PropSysObjects\n{\n    [uuid(9a02e012-6303-4e1e-b9a1-630f802592c5)] coclass InMemoryPropertyStore\n    {\n        interface IPropertyStore;\n    }\n    [uuid(b8967f86-58ae-4f96-9fb2-5d7904798f4b)] coclass PropertySystem\n    {\n        interface IPropertySystem;\n    }\n}\n"
  },
  {
    "path": "wine/windows/propvarutil.h",
    "content": "/*\n * Copyright 2008 James Hawkins for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_PROPVARUTIL_H\n#define __WINE_PROPVARUTIL_H\n\n#include <shtypes.h>\n#include <shlwapi.h>\n\nenum tagPROPVAR_CHANGE_FLAGS\n{\n    PVCHF_DEFAULT           = 0x00000000,\n    PVCHF_NOVALUEPROP       = 0x00000001,\n    PVCHF_ALPHABOOL         = 0x00000002,\n    PVCHF_NOUSEROVERRIDE    = 0x00000004,\n    PVCHF_LOCALBOOL         = 0x00000008,\n    PVCHF_NOHEXSTRING       = 0x00000010,\n};\n\ntypedef int PROPVAR_CHANGE_FLAGS;\n\nenum tagPROPVAR_COMPARE_UNIT\n{\n    PVCU_DEFAULT           = 0x00000000,\n    PVCU_SECOND            = 0x00000001,\n    PVCU_MINUTE            = 0x00000002,\n    PVCU_HOUR              = 0x00000003,\n    PVCU_DAY               = 0x00000004,\n    PVCU_MONTH             = 0x00000005,\n    PVCU_YEAR              = 0x00000006,\n};\n\ntypedef int PROPVAR_COMPARE_UNIT;\n\nenum tagPROPVAR_COMPARE_FLAGS\n{\n    PVCF_DEFAULT           = 0x00000000,\n    PVCF_TREATEMPTYASGREATERTHAN = 0x00000001,\n    PVCF_USESTRCMP         = 0x00000002,\n    PVCF_USESTRCMPC        = 0x00000004,\n    PVCF_USESTRCMPI        = 0x00000008,\n    PVCF_USESTRCMPIC       = 0x00000010,\n};\n\ntypedef int PROPVAR_COMPARE_FLAGS;\n\nHRESULT WINAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT propvarSrc,\n                                     PROPVAR_CHANGE_FLAGS flags, VARTYPE vt);\nHRESULT WINAPI InitPropVariantFromGUIDAsString(REFGUID guid, PROPVARIANT *ppropvar);\nHRESULT WINAPI InitVariantFromGUIDAsString(REFGUID guid, VARIANT *pvar);\nHRESULT WINAPI InitPropVariantFromBuffer(const VOID *pv, UINT cb, PROPVARIANT *ppropvar);\nHRESULT WINAPI InitPropVariantFromCLSID(REFCLSID clsid, PROPVARIANT *ppropvar);\nHRESULT WINAPI InitVariantFromBuffer(const VOID *pv, UINT cb, VARIANT *pvar);\nHRESULT WINAPI PropVariantToGUID(const PROPVARIANT *ppropvar, GUID *guid);\nHRESULT WINAPI VariantToGUID(const VARIANT *pvar, GUID *guid);\nINT WINAPI PropVariantCompareEx(REFPROPVARIANT propvar1, REFPROPVARIANT propvar2,\n                                PROPVAR_COMPARE_UNIT uint, PROPVAR_COMPARE_FLAGS flags);\n\nHRESULT WINAPI PropVariantToInt16(REFPROPVARIANT propvarIn, SHORT *ret);\nHRESULT WINAPI PropVariantToInt32(REFPROPVARIANT propvarIn, LONG *ret);\nHRESULT WINAPI PropVariantToInt64(REFPROPVARIANT propvarIn, LONGLONG *ret);\nHRESULT WINAPI PropVariantToUInt16(REFPROPVARIANT propvarIn, USHORT *ret);\nHRESULT WINAPI PropVariantToUInt32(REFPROPVARIANT propvarIn, ULONG *ret);\nHRESULT WINAPI PropVariantToUInt64(REFPROPVARIANT propvarIn, ULONGLONG *ret);\nHRESULT WINAPI PropVariantToBoolean(REFPROPVARIANT propvarIn, BOOL *ret);\nPCWSTR WINAPI PropVariantToStringWithDefault(REFPROPVARIANT propvarIn, LPCWSTR pszDefault);\n\nHRESULT WINAPI PropVariantToStringAlloc(REFPROPVARIANT propvarIn, WCHAR **ret);\n\n#ifdef __cplusplus\n\nHRESULT InitPropVariantFromBoolean(BOOL fVal, PROPVARIANT *ppropvar);\nHRESULT InitPropVariantFromString(PCWSTR psz, PROPVARIANT *ppropvar);\nHRESULT InitPropVariantFromInt64(LONGLONG llVal, PROPVARIANT *ppropvar);\n\n#ifndef NO_PROPVAR_INLINES\n\ninline HRESULT InitPropVariantFromBoolean(BOOL fVal, PROPVARIANT *ppropvar)\n{\n    ppropvar->vt = VT_BOOL;\n    ppropvar->boolVal = fVal ? VARIANT_TRUE : VARIANT_FALSE;\n    return S_OK;\n}\n\ninline HRESULT InitPropVariantFromString(PCWSTR psz, PROPVARIANT *ppropvar)\n{\n    HRESULT hres;\n\n    hres = SHStrDupW(psz, &ppropvar->pwszVal);\n    if(SUCCEEDED(hres))\n        ppropvar->vt = VT_LPWSTR;\n    else\n        PropVariantInit(ppropvar);\n\n    return hres;\n}\n\ninline HRESULT InitPropVariantFromInt64(LONGLONG llVal, PROPVARIANT *ppropvar)\n{\n    ppropvar->vt = VT_I8;\n    ppropvar->hVal.QuadPart = llVal;\n    return S_OK;\n}\n\n#endif\n#endif\n\n#endif /* __WINE_PROPVARUTIL_H */\n"
  },
  {
    "path": "wine/windows/prsht.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_PRSHT_H\n#define __WINE_PRSHT_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/*\n * Property sheet support (callback procs)\n */\n\n\n#define WC_PROPSHEETA      \"SysPropertySheet\"\n#if defined(__GNUC__)\n# define WC_PROPSHEETW (const WCHAR []){ 'S','y','s', \\\n  'P','r','o','p','e','r','t','y','S','h','e','e','t',0 }\n#elif defined(_MSC_VER)\n# define WC_PROPSHEETW     L\"SysPropertySheet\"\n#else\nstatic const WCHAR WC_PROPSHEETW[] = { 'S','y','s',\n  'P','r','o','p','e','r','t','y','S','h','e','e','t',0 };\n#endif\n#define WC_PROPSHEET         WINELIB_NAME_AW(WC_PROPSHEET)\n\nstruct _PROPSHEETPAGEA;  /** need to forward declare those structs **/\nstruct _PROPSHEETPAGEW;\nstruct _PSP;\n#ifndef _HPROPSHEETPAGE_DEFINED\n#define _HPROPSHEETPAGE_DEFINED\ntypedef struct _PSP *HPROPSHEETPAGE;\n#endif /* _HPROPSHEETPAGE_DEFINED */\n\n\ntypedef UINT (CALLBACK *LPFNPSPCALLBACKA)(HWND, UINT, struct _PROPSHEETPAGEA*);\ntypedef UINT (CALLBACK *LPFNPSPCALLBACKW)(HWND, UINT, struct _PROPSHEETPAGEW*);\ntypedef INT  (CALLBACK *PFNPROPSHEETCALLBACK)(HWND, UINT, LPARAM);\ntypedef BOOL (CALLBACK *LPFNADDPROPSHEETPAGE)(HPROPSHEETPAGE, LPARAM);\ntypedef BOOL (CALLBACK *LPFNADDPROPSHEETPAGES)(LPVOID, LPFNADDPROPSHEETPAGE, LPARAM);\n\n/*\n * Property sheet support (structures)\n */\n\ntypedef LPCDLGTEMPLATEA PROPSHEETPAGE_RESOURCEA;\ntypedef LPCDLGTEMPLATEW PROPSHEETPAGE_RESOURCEW;\nDECL_WINELIB_TYPE_AW(PROPSHEETPAGE_RESOURCE)\n\ntypedef struct _PROPSHEETPAGEA\n{\n    DWORD              dwSize;\n    DWORD              dwFlags;\n    HINSTANCE          hInstance;\n    union\n    {\n        LPCSTR         pszTemplate;\n        PROPSHEETPAGE_RESOURCEA pResource;\n    } DUMMYUNIONNAME;\n    union\n    {\n        HICON          hIcon;\n        LPCSTR         pszIcon;\n    } DUMMYUNIONNAME2;\n    LPCSTR             pszTitle;\n    DLGPROC            pfnDlgProc;\n    LPARAM             lParam;\n    LPFNPSPCALLBACKA   pfnCallback;\n    UINT*              pcRefParent;\n    LPCSTR             pszHeaderTitle;\n    LPCSTR             pszHeaderSubTitle;\n    HANDLE             hActCtx;\n    union\n    {\n        HBITMAP        hbmHeader;\n        LPCSTR         pszbmHeader;\n    } DUMMYUNIONNAME3;\n} PROPSHEETPAGEA, *LPPROPSHEETPAGEA,\n  PROPSHEETPAGEA_LATEST, *LPPROPSHEETPAGEA_LATEST;\n\ntypedef const PROPSHEETPAGEA *LPCPROPSHEETPAGEA, *LPCPROPSHEETPAGEA_LATEST;\n#define PROPSHEETPAGEA_V1_SIZE CCSIZEOF_STRUCT(PROPSHEETPAGEA, pcRefParent)\n#define PROPSHEETPAGEA_V2_SIZE CCSIZEOF_STRUCT(PROPSHEETPAGEA, pszHeaderSubTitle)\n#define PROPSHEETPAGEA_V3_SIZE CCSIZEOF_STRUCT(PROPSHEETPAGEA, hActCtx)\n#define PROPSHEETPAGEA_V4_SIZE sizeof(PROPSHEETPAGEA)\n\ntypedef struct _PROPSHEETPAGEW\n{\n    DWORD              dwSize;\n    DWORD              dwFlags;\n    HINSTANCE          hInstance;\n    union\n    {\n        LPCWSTR        pszTemplate;\n        PROPSHEETPAGE_RESOURCEW pResource;\n    } DUMMYUNIONNAME;\n    union\n    {\n        HICON          hIcon;\n        LPCWSTR        pszIcon;\n    } DUMMYUNIONNAME2;\n    LPCWSTR            pszTitle;\n    DLGPROC            pfnDlgProc;\n    LPARAM             lParam;\n    LPFNPSPCALLBACKW   pfnCallback;\n    UINT*              pcRefParent;\n    LPCWSTR            pszHeaderTitle;\n    LPCWSTR            pszHeaderSubTitle;\n    HANDLE             hActCtx;\n    union\n    {\n        HBITMAP        hbmHeader;\n        LPCWSTR        pszbmHeader;\n    } DUMMYUNIONNAME3;\n} PROPSHEETPAGEW, *LPPROPSHEETPAGEW,\n  PROPSHEETPAGEW_LATEST, *LPPROPSHEETPAGEW_LATEST;\n\ntypedef const PROPSHEETPAGEW *LPCPROPSHEETPAGEW, *LPCPROPSHEETPAGEW_LATEST;\n#define PROPSHEETPAGEW_V1_SIZE CCSIZEOF_STRUCT(PROPSHEETPAGEW, pcRefParent)\n#define PROPSHEETPAGEW_V2_SIZE CCSIZEOF_STRUCT(PROPSHEETPAGEW, pszHeaderSubTitle)\n#define PROPSHEETPAGEW_V3_SIZE CCSIZEOF_STRUCT(PROPSHEETPAGEW, hActCtx)\n#define PROPSHEETPAGEW_V4_SIZE sizeof(PROPSHEETPAGEW)\n\n\ntypedef struct _PROPSHEETHEADERA\n{\n    DWORD                    dwSize;\n    DWORD                    dwFlags;\n    HWND                   hwndParent;\n    HINSTANCE              hInstance;\n    union\n    {\n      HICON                  hIcon;\n      LPCSTR                   pszIcon;\n    }DUMMYUNIONNAME;\n    LPCSTR                   pszCaption;\n    UINT                   nPages;\n    union\n    {\n        UINT                 nStartPage;\n        LPCSTR                 pStartPage;\n    }DUMMYUNIONNAME2;\n    union\n    {\n        LPCPROPSHEETPAGEA    ppsp;\n        HPROPSHEETPAGE*        phpage;\n    }DUMMYUNIONNAME3;\n    PFNPROPSHEETCALLBACK   pfnCallback;\n    union\n    {\n        HBITMAP              hbmWatermark;\n        LPCSTR                 pszbmWatermark;\n    }DUMMYUNIONNAME4;\n    HPALETTE               hplWatermark;\n    union\n    {\n        HBITMAP              hbmHeader;\n        LPCSTR                 pszbmHeader;\n    }DUMMYUNIONNAME5;\n} PROPSHEETHEADERA, *LPPROPSHEETHEADERA;\n\ntypedef const PROPSHEETHEADERA *LPCPROPSHEETHEADERA;\n#define PROPSHEETHEADERA_V1_SIZE CCSIZEOF_STRUCT(PROPSHEETHEADERA, pfnCallback)\n#define PROPSHEETHEADERA_V2_SIZE sizeof(PROPSHEETHEADERA)\n\ntypedef struct _PROPSHEETHEADERW\n{\n    DWORD                    dwSize;\n    DWORD                    dwFlags;\n    HWND                   hwndParent;\n    HINSTANCE              hInstance;\n    union\n    {\n      HICON                  hIcon;\n      LPCWSTR                   pszIcon;\n    }DUMMYUNIONNAME;\n    LPCWSTR                  pszCaption;\n    UINT                   nPages;\n    union\n    {\n        UINT                 nStartPage;\n        LPCWSTR                pStartPage;\n    }DUMMYUNIONNAME2;\n    union\n    {\n        LPCPROPSHEETPAGEW    ppsp;\n        HPROPSHEETPAGE*        phpage;\n    }DUMMYUNIONNAME3;\n    PFNPROPSHEETCALLBACK   pfnCallback;\n    union\n    {\n        HBITMAP              hbmWatermark;\n        LPCWSTR                pszbmWatermark;\n    }DUMMYUNIONNAME4;\n    HPALETTE               hplWatermark;\n    union\n    {\n        HBITMAP              hbmHeader;\n        LPCWSTR                pszbmHeader;\n    }DUMMYUNIONNAME5;\n} PROPSHEETHEADERW, *LPPROPSHEETHEADERW;\n\ntypedef const PROPSHEETHEADERW *LPCPROPSHEETHEADERW;\n#define PROPSHEETHEADERW_V1_SIZE CCSIZEOF_STRUCT(PROPSHEETHEADERW, pfnCallback)\n#define PROPSHEETHEADERW_V2_SIZE sizeof(PROPSHEETHEADERW)\n\n\n/*\n * Property sheet support (methods)\n */\nINT_PTR WINAPI PropertySheetA(LPCPROPSHEETHEADERA);\nINT_PTR WINAPI PropertySheetW(LPCPROPSHEETHEADERW);\n#define PropertySheet WINELIB_NAME_AW(PropertySheet)\nHPROPSHEETPAGE WINAPI CreatePropertySheetPageA(LPCPROPSHEETPAGEA);\nHPROPSHEETPAGE WINAPI CreatePropertySheetPageW(LPCPROPSHEETPAGEW);\n#define CreatePropertySheetPage WINELIB_NAME_AW(CreatePropertySheetPage)\nBOOL WINAPI DestroyPropertySheetPage(HPROPSHEETPAGE hPropPage);\n\n/*\n * Property sheet support (UNICODE-Winelib)\n */\n\nDECL_WINELIB_TYPE_AW(PROPSHEETPAGE)\nDECL_WINELIB_TYPE_AW(LPPROPSHEETPAGE)\nDECL_WINELIB_TYPE_AW(LPCPROPSHEETPAGE)\nDECL_WINELIB_TYPE_AW(PROPSHEETHEADER)\nDECL_WINELIB_TYPE_AW(LPPROPSHEETHEADER)\nDECL_WINELIB_TYPE_AW(LPCPROPSHEETHEADER)\nDECL_WINELIB_TYPE_AW(LPFNPSPCALLBACK)\n\n#ifdef WINE_NO_UNICODE_MACROS\n# define PRSHT_NAME_AW(base, suffix)                  \\\n    base##_##suffix##_must_use_W_or_A_in_this_context \\\n    base##_##suffix##_must_use_W_or_A_in_this_context\n# define DECL_PRSHT_TYPE_AW(base, suffix)  /* nothing */\n#else  /* WINE_NO_UNICODE_MACROS */\n# ifdef UNICODE\n#  define PRSHT_NAME_AW(base, suffix) base##W_##suffix\n# else\n#  define PRSHT_NAME_AW(base, suffix) base##A_##suffix\n# endif\n# define DECL_PRSHT_TYPE_AW(base, suffix)  typedef PRSHT_NAME_AW(base, suffix) base##_##suffix;\n#endif  /* WINE_NO_UNICODE_MACROS */\n\nDECL_PRSHT_TYPE_AW(PROPSHEETPAGE, LATEST)\nDECL_PRSHT_TYPE_AW(LPPROPSHEETPAGE, LATEST)\nDECL_PRSHT_TYPE_AW(LPCPROPSHEETPAGE, LATEST)\n#define PROPSHEETPAGE_V1_SIZE    PRSHT_NAME_AW(PROPSHEETPAGE, V1_SIZE)\n#define PROPSHEETPAGE_V2_SIZE    PRSHT_NAME_AW(PROPSHEETPAGE, V2_SIZE)\n#define PROPSHEETPAGE_V3_SIZE    PRSHT_NAME_AW(PROPSHEETPAGE, V3_SIZE)\n#define PROPSHEETPAGE_V4_SIZE    PRSHT_NAME_AW(PROPSHEETPAGE, V4_SIZE)\n#define PROPSHEETHEADER_V1_SIZE  PRSHT_NAME_AW(PROPSHEETHEADER, V1_SIZE)\n#define PROPSHEETHEADER_V2_SIZE  PRSHT_NAME_AW(PROPSHEETHEADER, V2_SIZE)\n\n#undef PRSHT_NAME_AW\n#undef DECL_PRSHT_TYPE_AW\n\n/*\n * Property sheet support (defines)\n */\n#define PSP_DEFAULT             0x0000\n#define PSP_DLGINDIRECT         0x0001\n#define PSP_USEHICON            0x0002\n#define PSP_USEICONID           0x0004\n#define PSP_USETITLE            0x0008\n#define PSP_RTLREADING          0x0010\n\n#define PSP_HASHELP             0x0020\n#define PSP_USEREFPARENT        0x0040\n#define PSP_USECALLBACK         0x0080\n#define PSP_PREMATURE           0x0400\n\n#define PSP_HIDEHEADER          0x00000800\n#define PSP_USEHEADERTITLE      0x00001000\n#define PSP_USEHEADERSUBTITLE   0x00002000\n#define PSP_USEFUSIONCONTEXT    0x00004000\n#define PSP_COMMANDLINKS        0x00040000\n\n#define PSPCB_ADDREF            0\n#define PSPCB_RELEASE           1\n#define PSPCB_CREATE            2\n\n#define PSH_DEFAULT             0x0000\n#define PSH_PROPTITLE           0x0001\n#define PSH_USEHICON            0x0002\n#define PSH_USEICONID           0x0004\n#define PSH_PROPSHEETPAGE       0x0008\n#define PSH_WIZARDHASFINISH     0x0010\n#define PSH_WIZARD              0x0020\n#define PSH_USEPSTARTPAGE       0x0040\n#define PSH_NOAPPLYNOW          0x0080\n#define PSH_USECALLBACK         0x0100\n#define PSH_HASHELP             0x0200\n#define PSH_MODELESS            0x0400\n#define PSH_RTLREADING          0x0800\n#define PSH_WIZARDCONTEXTHELP   0x00001000\n\n#define PSH_WIZARD97_OLD        0x00002000 /* for IE < 5 */\n#define PSH_AEROWIZARD          0x00004000\n#define PSH_WATERMARK           0x00008000\n#define PSH_USEHBMWATERMARK     0x00010000\n#define PSH_USEHPLWATERMARK     0x00020000\n#define PSH_STRETCHWATERMARK    0x00040000\n#define PSH_HEADER              0x00080000\n#define PSH_USEHBMHEADER        0x00100000\n#define PSH_USEPAGELANG         0x00200000\n#define PSH_WIZARD_LITE         0x00400000\n#define PSH_WIZARD97_NEW        0x01000000 /* for IE >= 5 */\n#define PSH_NOCONTEXTHELP       0x02000000\n#define PSH_RESIZABLE           0x04000000\n#define PSH_HEADERBITMAP        0x08000000\n#define PSH_NOMARGIN            0x10000000\n#ifndef __WINESRC__\n# if defined(_WIN32_IE) && (_WIN32_IE < 0x0500)\n#  define PSH_WIZARD97          PSH_WIZARD97_OLD\n# else\n#  define PSH_WIZARD97          PSH_WIZARD97_NEW\n# endif\n#endif\n\n#define PSCB_INITIALIZED  1\n#define PSCB_PRECREATE    2\n\ntypedef struct _PSHNOTIFY\n{\n   NMHDR hdr;\n   LPARAM lParam;\n} PSHNOTIFY, *LPPSHNOTIFY;\n\n#define PSN_FIRST               (0U-200U)\n#define PSN_LAST                (0U-299U)\n\n\n#define PSN_SETACTIVE           (PSN_FIRST-0)\n#define PSN_KILLACTIVE          (PSN_FIRST-1)\n/* #define PSN_VALIDATE            (PSN_FIRST-1) */\n#define PSN_APPLY               (PSN_FIRST-2)\n#define PSN_RESET               (PSN_FIRST-3)\n/* #define PSN_CANCEL              (PSN_FIRST-3) */\n#define PSN_HELP                (PSN_FIRST-5)\n#define PSN_WIZBACK             (PSN_FIRST-6)\n#define PSN_WIZNEXT             (PSN_FIRST-7)\n#define PSN_WIZFINISH           (PSN_FIRST-8)\n#define PSN_QUERYCANCEL         (PSN_FIRST-9)\n#define PSN_GETOBJECT           (PSN_FIRST-10)\n#define PSN_TRANSLATEACCELERATOR (PSN_FIRST-12)\n#define PSN_QUERYINITIALFOCUS   (PSN_FIRST-13)\n\n#define PSNRET_NOERROR              0\n#define PSNRET_INVALID              1\n#define PSNRET_INVALID_NOCHANGEPAGE 2\n\n\n#define PSM_SETCURSEL           (WM_USER + 101)\n#define PSM_REMOVEPAGE          (WM_USER + 102)\n#define PSM_ADDPAGE             (WM_USER + 103)\n#define PSM_CHANGED             (WM_USER + 104)\n#define PSM_RESTARTWINDOWS      (WM_USER + 105)\n#define PSM_REBOOTSYSTEM        (WM_USER + 106)\n#define PSM_CANCELTOCLOSE       (WM_USER + 107)\n#define PSM_QUERYSIBLINGS       (WM_USER + 108)\n#define PSM_UNCHANGED           (WM_USER + 109)\n#define PSM_APPLY               (WM_USER + 110)\n#define PSM_SETTITLEA         (WM_USER + 111)\n#define PSM_SETTITLEW         (WM_USER + 120)\n#define PSM_SETTITLE WINELIB_NAME_AW(PSM_SETTITLE)\n#define PSM_SETWIZBUTTONS       (WM_USER + 112)\n#define PSM_PRESSBUTTON         (WM_USER + 113)\n#define PSM_SETCURSELID         (WM_USER + 114)\n#define PSM_SETFINISHTEXTA    (WM_USER + 115)\n#define PSM_SETFINISHTEXTW    (WM_USER + 121)\n#define PSM_SETFINISHTEXT WINELIB_NAME_AW(PSM_SETFINISHTEXT)\n#define PSM_GETTABCONTROL       (WM_USER + 116)\n#define PSM_ISDIALOGMESSAGE     (WM_USER + 117)\n#define PSM_GETCURRENTPAGEHWND  (WM_USER + 118)\n#define PSM_INSERTPAGE          (WM_USER + 119)\n#define PSM_SETHEADERTITLEA     (WM_USER + 125)\n#define PSM_SETHEADERTITLEW     (WM_USER + 126)\n#define PSM_SETHEADERTITLE      WINELIB_NAME_AW(PSM_SETHEADERTITLE)\n#define PSM_SETHEADERSUBTITLEA  (WM_USER + 127)\n#define PSM_SETHEADERSUBTITLEW  (WM_USER + 128)\n#define PSM_SETHEADERSUBTITLE   WINELIB_NAME_AW(PSM_SETHEADERSUBTITLE)\n#define PSM_HWNDTOINDEX         (WM_USER + 129)\n#define PSM_INDEXTOHWND         (WM_USER + 130)\n#define PSM_PAGETOINDEX         (WM_USER + 131)\n#define PSM_INDEXTOPAGE         (WM_USER + 132)\n#define PSM_IDTOINDEX           (WM_USER + 133)\n#define PSM_INDEXTOID           (WM_USER + 134)\n#define PSM_GETRESULT           (WM_USER + 135)\n#define PSM_RECALCPAGESIZES     (WM_USER + 136)\n\n#define PSWIZB_BACK             0x00000001\n#define PSWIZB_NEXT             0x00000002\n#define PSWIZB_FINISH           0x00000004\n#define PSWIZB_DISABLEDFINISH   0x00000008\n\n#define PSBTN_BACK              0\n#define PSBTN_NEXT              1\n#define PSBTN_FINISH            2\n#define PSBTN_OK                3\n#define PSBTN_APPLYNOW          4\n#define PSBTN_CANCEL            5\n#define PSBTN_HELP              6\n#define PSBTN_MAX               6\n\n#define ID_PSRESTARTWINDOWS     0x2\n#define ID_PSREBOOTSYSTEM       (ID_PSRESTARTWINDOWS | 0x1)\n\n\n#define WIZ_CXDLG               276\n#define WIZ_CYDLG               140\n\n#define WIZ_CXBMP               80\n\n#define WIZ_BODYX               92\n#define WIZ_BODYCX              184\n\n#define PROP_SM_CXDLG           212\n#define PROP_SM_CYDLG           188\n\n#define PROP_MED_CXDLG          227\n#define PROP_MED_CYDLG          215\n\n#define PROP_LG_CXDLG           252\n#define PROP_LG_CYDLG           218\n\n/*\n * Property sheet support (macros)\n */\n\n#define PropSheet_SetCurSel(hDlg, hpage, index) \\\n\tSendMessageA(hDlg, PSM_SETCURSEL, (WPARAM)index, (LPARAM)hpage)\n\n#define PropSheet_RemovePage(hDlg, index, hpage) \\\n\tSNDMSG(hDlg, PSM_REMOVEPAGE, index, (LPARAM)hpage)\n\n#define PropSheet_AddPage(hDlg, hpage) \\\n\tSNDMSG(hDlg, PSM_ADDPAGE, 0, (LPARAM)hpage)\n\n#define PropSheet_Changed(hDlg, hwnd) \\\n        SNDMSG(hDlg, PSM_CHANGED, (WPARAM)hwnd, 0)\n\n#define PropSheet_RestartWindows(hDlg) \\\n        SNDMSG(hDlg, PSM_RESTARTWINDOWS, 0, 0)\n\n#define PropSheet_RebootSystem(hDlg) \\\n        SNDMSG(hDlg, PSM_REBOOTSYSTEM, 0, 0)\n\n#define PropSheet_CancelToClose(hDlg) \\\n        PostMessage(hDlg, PSM_CANCELTOCLOSE, 0, 0)\n\n#define PropSheet_QuerySiblings(hDlg, wParam, lParam) \\\n\tSNDMSG(hDlg, PSM_QUERYSIBLINGS, wParam, lParam)\n\n#define PropSheet_UnChanged(hDlg, hwnd) \\\n        SNDMSG(hDlg, PSM_UNCHANGED, (WPARAM)hwnd, 0)\n\n#define PropSheet_Apply(hDlg) \\\n        SNDMSG(hDlg, PSM_APPLY, 0, 0)\n\n#define PropSheet_SetTitle(hDlg, wStyle, lpszText)\\\n\tSNDMSG(hDlg, PSM_SETTITLE, wStyle, (LPARAM)(LPCTSTR)lpszText)\n\n#define PropSheet_SetWizButtons(hDlg, dwFlags) \\\n\tPostMessage(hDlg, PSM_SETWIZBUTTONS, 0, (LPARAM)dwFlags)\n\n#define PropSheet_PressButton(hDlg, iButton) \\\n\tPostMessage(hDlg, PSM_PRESSBUTTON, (WPARAM)iButton, 0)\n\n#define PropSheet_SetCurSelByID(hDlg, id) \\\n\tSNDMSG(hDlg, PSM_SETCURSELID, 0, (LPARAM)id)\n\n#define PropSheet_SetFinishText(hDlg, lpszText) \\\n\tSNDMSG(hDlg, PSM_SETFINISHTEXT, 0, (LPARAM)lpszText)\n\n#define PropSheet_GetTabControl(hDlg) \\\n\t(HWND)SNDMSG(hDlg, PSM_GETTABCONTROL, 0, 0)\n\n#define PropSheet_IsDialogMessage(hDlg, pMsg) \\\n\t(BOOL)SNDMSG(hDlg, PSM_ISDIALOGMESSAGE, 0, (LPARAM)pMsg)\n\n#define PropSheet_GetCurrentPageHwnd(hDlg) \\\n        (HWND)SNDMSG(hDlg, PSM_GETCURRENTPAGEHWND, 0, 0)\n\n#define PropSheet_InsertPage(hDlg, index, hpage) \\\n        SNDMSG(hDlg, PSM_INSERTPAGE, (WPARAM)(index), (LPARAM)(hpage))\n\n#define PropSheet_SetHeaderTitle(hDlg, index, lpszText) \\\n        SNDMSG(hDlg, PSM_SETHEADERTITLE, (WPARAM)(index), (LPARAM)(lpszText))\n\n#define PropSheet_SetHeaderSubTitle(hDlg, index, lpszText) \\\n        SNDMSG(hDlg, PSM_SETHEADERSUBTITLE, (WPARAM)(index), (LPARAM)(lpszText))\n\n#define PropSheet_HwndToIndex(hDlg, hwnd) \\\n        (int)SNDMSG(hDlg, PSM_HWNDTOINDEX, (WPARAM)(hwnd), 0)\n\n#define PropSheet_IndexToHwnd(hDlg, i) \\\n        (HWND)SNDMSG(hDlg, PSM_INDEXTOHWND, (WPARAM)(i), 0)\n\n#define PropSheet_PageToIndex(hDlg, hpage) \\\n        (int)SNDMSG(hDlg, PSM_PAGETOINDEX, 0, (LPARAM)(hpage))\n\n#define PropSheet_IndexToPage(hDlg, i) \\\n        (HPROPSHEETPAGE)SNDMSG(hDlg, PSM_INDEXTOPAGE, (WPARAM)(i), 0)\n\n#define PropSheet_IdToIndex(hDlg, id) \\\n        (int)SNDMSG(hDlg, PSM_IDTOINDEX, 0, (LPARAM)(id))\n\n#define PropSheet_IndexToId(hDlg, i) \\\n        SNDMSG(hDlg, PSM_INDEXTOID, (WPARAM)(i), 0)\n\n#define PropSheet_GetResult(hDlg) \\\n        SNDMSG(hDlg, PSM_GETRESULT, 0, 0)\n\n#define PropSheet_RecalcPageSizes(hDlg) \\\n        SNDMSG(hDlg, PSM_RECALCPAGESIZES, 0, 0)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_PRSHT_H */\n"
  },
  {
    "path": "wine/windows/psapi.h",
    "content": "/*\n * Declarations for PSAPI\n *\n * Copyright (C) 1998 Patrik Stridvall\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_PSAPI_H\n#define __WINE_PSAPI_H\n\n#ifndef PSAPI_VERSION\n#define PSAPI_VERSION 2\n#endif\n\ntypedef struct _MODULEINFO {\n  LPVOID lpBaseOfDll;\n  DWORD SizeOfImage;\n  LPVOID EntryPoint;\n} MODULEINFO, *LPMODULEINFO;\n\ntypedef struct _PROCESS_MEMORY_COUNTERS {\n  DWORD  cb;\n  DWORD  PageFaultCount;\n  SIZE_T PeakWorkingSetSize;\n  SIZE_T WorkingSetSize;\n  SIZE_T QuotaPeakPagedPoolUsage;\n  SIZE_T QuotaPagedPoolUsage;\n  SIZE_T QuotaPeakNonPagedPoolUsage;\n  SIZE_T QuotaNonPagedPoolUsage;\n  SIZE_T PagefileUsage;\n  SIZE_T PeakPagefileUsage;\n} PROCESS_MEMORY_COUNTERS;\ntypedef PROCESS_MEMORY_COUNTERS *PPROCESS_MEMORY_COUNTERS;\n\ntypedef struct _PSAPI_WS_WATCH_INFORMATION {\n  LPVOID FaultingPc;\n  LPVOID FaultingVa;\n} PSAPI_WS_WATCH_INFORMATION, *PPSAPI_WS_WATCH_INFORMATION;\n\ntypedef struct _PERFORMANCE_INFORMATION {\n    DWORD cb;\n    SIZE_T CommitTotal;\n    SIZE_T CommitLimit;\n    SIZE_T CommitPeak;\n    SIZE_T PhysicalTotal;\n    SIZE_T PhysicalAvailable;\n    SIZE_T SystemCache;\n    SIZE_T KernelTotal;\n    SIZE_T KernelPaged;\n    SIZE_T KernelNonpaged;\n    SIZE_T PageSize;\n    DWORD HandleCount;\n    DWORD ProcessCount;\n    DWORD ThreadCount;\n} PERFORMANCE_INFORMATION, *PPERFORMANCE_INFORMATION;\n\ntypedef struct _ENUM_PAGE_FILE_INFORMATION {\n    DWORD cb;\n    DWORD Reserved;\n    SIZE_T TotalSize;\n    SIZE_T TotalInUse;\n    SIZE_T PeakUsage;\n} ENUM_PAGE_FILE_INFORMATION, *PENUM_PAGE_FILE_INFORMATION;\n\ntypedef BOOL (*PENUM_PAGE_FILE_CALLBACKA) (LPVOID, PENUM_PAGE_FILE_INFORMATION, LPCSTR);\ntypedef BOOL (*PENUM_PAGE_FILE_CALLBACKW) (LPVOID, PENUM_PAGE_FILE_INFORMATION, LPCWSTR);\n#define PENUM_PAGE_FILE_CALLBACK WINELIB_NAME_AW(PENUM_PAGE_FILE_CALLBACK)\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#if PSAPI_VERSION > 1\n#define EnumProcesses               K32EnumProcesses\n#define EnumProcessModules          K32EnumProcessModules\n#define EnumProcessModulesEx        K32EnumProcessModulesEx\n#define GetModuleBaseNameA          K32GetModuleBaseNameA\n#define GetModuleBaseNameW          K32GetModuleBaseNameW\n#define GetModuleFileNameExA        K32GetModuleFileNameExA\n#define GetModuleFileNameExW        K32GetModuleFileNameExW\n#define GetModuleInformation        K32GetModuleInformation\n#define EmptyWorkingSet             K32EmptyWorkingSet\n#define QueryWorkingSet             K32QueryWorkingSet\n#define QueryWorkingSetEx           K32QueryWorkingSetEx\n#define InitializeProcessForWsWatch K32InitializeProcessForWsWatch\n#define GetWsChanges                K32GetWsChanges\n#define GetWsChangesEx              K32GetWsChangesEx\n#define GetMappedFileNameW          K32GetMappedFileNameW\n#define GetMappedFileNameA          K32GetMappedFileNameA\n#define EnumDeviceDrivers           K32EnumDeviceDrivers\n#define GetDeviceDriverBaseNameA    K32GetDeviceDriverBaseNameA\n#define GetDeviceDriverBaseNameW    K32GetDeviceDriverBaseNameW\n#define GetDeviceDriverFileNameA    K32GetDeviceDriverFileNameA\n#define GetDeviceDriverFileNameW    K32GetDeviceDriverFileNameW\n#define GetProcessMemoryInfo        K32GetProcessMemoryInfo\n#define GetPerformanceInfo          K32GetPerformanceInfo\n#define EnumPageFilesW              K32EnumPageFilesW\n#define EnumPageFilesA              K32EnumPageFilesA\n#define GetProcessImageFileNameA    K32GetProcessImageFileNameA\n#define GetProcessImageFileNameW    K32GetProcessImageFileNameW\n#endif\n\nBOOL  WINAPI EnumProcesses(DWORD*, DWORD, DWORD*);\nBOOL  WINAPI EnumProcessModules(HANDLE, HMODULE*, DWORD, LPDWORD);\nBOOL  WINAPI EnumProcessModulesEx(HANDLE, HMODULE*, DWORD, LPDWORD, DWORD);\nDWORD WINAPI GetModuleBaseNameA(HANDLE, HMODULE, LPSTR, DWORD);\nDWORD WINAPI GetModuleBaseNameW(HANDLE, HMODULE, LPWSTR, DWORD);\n#define      GetModuleBaseName WINELIB_NAME_AW(GetModuleBaseName)\nDWORD WINAPI GetModuleFileNameExA(HANDLE, HMODULE, LPSTR, DWORD);\nDWORD WINAPI GetModuleFileNameExW(HANDLE, HMODULE, LPWSTR, DWORD);\n#define      GetModuleFileNameEx WINELIB_NAME_AW(GetModuleFileNameEx)\nBOOL  WINAPI GetModuleInformation(HANDLE, HMODULE, LPMODULEINFO, DWORD);\nBOOL  WINAPI EmptyWorkingSet(HANDLE);\nBOOL  WINAPI QueryWorkingSet(HANDLE, PVOID, DWORD);\nBOOL  WINAPI QueryWorkingSetEx(HANDLE, PVOID, DWORD);\nBOOL  WINAPI InitializeProcessForWsWatch(HANDLE);\nBOOL  WINAPI GetWsChanges(HANDLE, PPSAPI_WS_WATCH_INFORMATION, DWORD);\nDWORD WINAPI GetMappedFileNameW(HANDLE, LPVOID, LPWSTR, DWORD);\nDWORD WINAPI GetMappedFileNameA(HANDLE, LPVOID, LPSTR, DWORD);\n#define      GetMappedFileName WINELIB_NAME_AW(GetMappedFileName)\nBOOL  WINAPI EnumDeviceDrivers(LPVOID*, DWORD, LPDWORD);\nDWORD WINAPI GetDeviceDriverBaseNameA(LPVOID, LPSTR, DWORD);\nDWORD WINAPI GetDeviceDriverBaseNameW(LPVOID, LPWSTR, DWORD);\n#define      GetDeviceDriverBaseName WINELIB_NAME_AW(GetDeviceDriverBaseName)\nDWORD WINAPI GetDeviceDriverFileNameA(LPVOID, LPSTR, DWORD);\nDWORD WINAPI GetDeviceDriverFileNameW(LPVOID, LPWSTR, DWORD);\n#define      GetDeviceDriverFileName WINELIB_NAME_AW(GetDeviceDriverFileName)\nBOOL  WINAPI GetProcessMemoryInfo(HANDLE, PPROCESS_MEMORY_COUNTERS, DWORD);\nBOOL  WINAPI GetPerformanceInfo(PPERFORMANCE_INFORMATION, DWORD);\nBOOL  WINAPI EnumPageFilesA(PENUM_PAGE_FILE_CALLBACKA, LPVOID);\nBOOL  WINAPI EnumPageFilesW(PENUM_PAGE_FILE_CALLBACKW, LPVOID);\n#define EnumPageFiles WINELIB_NAME_AW(EnumPageFiles)\nDWORD WINAPI GetProcessImageFileNameA(HANDLE, LPSTR, DWORD);\nDWORD WINAPI GetProcessImageFileNameW(HANDLE, LPWSTR, DWORD);\n#define      GetProcessImageFileName WINELIB_NAME_AW(GetProcessImageFileName)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* __WINE_PSAPI_H */\n"
  },
  {
    "path": "wine/windows/pshpack1.h",
    "content": "/*\n * Copyright (C) 1999 Patrik Stridvall\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if defined(__WINE_PSHPACK_H15)\n\n   /* Depth > 15 */\n#  error \"Alignment nesting > 15 is not supported\"\n\n#else\n\n#  if !defined(__WINE_PSHPACK_H)\n#    define __WINE_PSHPACK_H  1\n     /* Depth == 1 */\n#  elif !defined(__WINE_PSHPACK_H2)\n#    define __WINE_PSHPACK_H2 1\n     /* Depth == 2 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H3)\n#    define __WINE_PSHPACK_H3 1\n     /* Depth == 3 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H4)\n#    define __WINE_PSHPACK_H4 1\n     /* Depth == 4 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H5)\n#    define __WINE_PSHPACK_H5 1\n     /* Depth == 5 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H6)\n#    define __WINE_PSHPACK_H6 1\n     /* Depth == 6 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H7)\n#    define __WINE_PSHPACK_H7 1\n     /* Depth == 7 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H8)\n#    define __WINE_PSHPACK_H8 1\n     /* Depth == 8 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H9)\n#    define __WINE_PSHPACK_H9 1\n     /* Depth == 9 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H10)\n#    define __WINE_PSHPACK_H10 1\n     /* Depth == 10 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H11)\n#    define __WINE_PSHPACK_H11 1\n     /* Depth == 11 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H12)\n#    define __WINE_PSHPACK_H12 1\n     /* Depth == 12 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H13)\n#    define __WINE_PSHPACK_H13 1\n     /* Depth == 13 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H14)\n#    define __WINE_PSHPACK_H14 1\n     /* Depth == 14 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H15)\n#    define __WINE_PSHPACK_H15 1\n     /* Depth == 15 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  endif\n\n#  if defined(_MSC_VER) && (_MSC_VER >= 800)\n#   pragma warning(disable:4103)\n#  endif\n\n#  pragma pack(1)\n\n#endif\n"
  },
  {
    "path": "wine/windows/pshpack2.h",
    "content": "/*\n * Copyright (C) 1999 Patrik Stridvall\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if defined(__WINE_PSHPACK_H15)\n\n   /* Depth > 15 */\n#  error \"Alignment nesting > 15 is not supported\"\n\n#else\n\n#  if !defined(__WINE_PSHPACK_H)\n#    define __WINE_PSHPACK_H  2\n     /* Depth == 1 */\n#  elif !defined(__WINE_PSHPACK_H2)\n#    define __WINE_PSHPACK_H2 2\n     /* Depth == 2 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H3)\n#    define __WINE_PSHPACK_H3 2\n     /* Depth == 3 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H4)\n#    define __WINE_PSHPACK_H4 2\n     /* Depth == 4 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H5)\n#    define __WINE_PSHPACK_H5 2\n     /* Depth == 5 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H6)\n#    define __WINE_PSHPACK_H6 2\n     /* Depth == 6 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H7)\n#    define __WINE_PSHPACK_H7 2\n     /* Depth == 7 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H8)\n#    define __WINE_PSHPACK_H8 2\n     /* Depth == 8 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H9)\n#    define __WINE_PSHPACK_H9 2\n     /* Depth == 9 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H10)\n#    define __WINE_PSHPACK_H10 2\n     /* Depth == 10 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H11)\n#    define __WINE_PSHPACK_H11 2\n     /* Depth == 11 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H12)\n#    define __WINE_PSHPACK_H12 2\n     /* Depth == 12 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H13)\n#    define __WINE_PSHPACK_H13 2\n     /* Depth == 13 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H14)\n#    define __WINE_PSHPACK_H14 2\n     /* Depth == 14 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H15)\n#    define __WINE_PSHPACK_H15 2\n     /* Depth == 15 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  endif\n\n#  if defined(_MSC_VER) && (_MSC_VER >= 800)\n#   pragma warning(disable:4103)\n#  endif\n\n#  pragma pack(2)\n\n#endif\n"
  },
  {
    "path": "wine/windows/pshpack4.h",
    "content": "/*\n * Copyright (C) 1999 Patrik Stridvall\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if defined(__WINE_PSHPACK_H15)\n\n   /* Depth > 15 */\n#  error \"Alignment nesting > 15 is not supported\"\n\n#else\n\n#  if !defined(__WINE_PSHPACK_H)\n#    define __WINE_PSHPACK_H  4\n     /* Depth == 1 */\n#  elif !defined(__WINE_PSHPACK_H2)\n#    define __WINE_PSHPACK_H2 4\n     /* Depth == 2 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H3)\n#    define __WINE_PSHPACK_H3 4\n     /* Depth == 3 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H4)\n#    define __WINE_PSHPACK_H4 4\n     /* Depth == 4 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H5)\n#    define __WINE_PSHPACK_H5 4\n     /* Depth == 5 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H6)\n#    define __WINE_PSHPACK_H6 4\n     /* Depth == 6 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H7)\n#    define __WINE_PSHPACK_H7 4\n     /* Depth == 7 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H8)\n#    define __WINE_PSHPACK_H8 4\n     /* Depth == 8 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H9)\n#    define __WINE_PSHPACK_H9 4\n     /* Depth == 9 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H10)\n#    define __WINE_PSHPACK_H10 4\n     /* Depth == 10 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H11)\n#    define __WINE_PSHPACK_H11 4\n     /* Depth == 11 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H12)\n#    define __WINE_PSHPACK_H12 4\n     /* Depth == 12 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H13)\n#    define __WINE_PSHPACK_H13 4\n     /* Depth == 13 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H14)\n#    define __WINE_PSHPACK_H14 4\n     /* Depth == 14 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H15)\n#    define __WINE_PSHPACK_H15 4\n     /* Depth == 15 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  endif\n\n#  if defined(_MSC_VER) && (_MSC_VER >= 800)\n#   pragma warning(disable:4103)\n#  endif\n\n#  pragma pack(4)\n\n#endif\n"
  },
  {
    "path": "wine/windows/pshpack8.h",
    "content": "/*\n * Copyright (C) 1999 Patrik Stridvall\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if defined(__WINE_PSHPACK_H15)\n\n   /* Depth > 15 */\n#  error \"Alignment nesting > 15 is not supported\"\n\n#else\n\n#  if !defined(__WINE_PSHPACK_H)\n#    define __WINE_PSHPACK_H  8\n     /* Depth == 1 */\n#  elif !defined(__WINE_PSHPACK_H2)\n#    define __WINE_PSHPACK_H2 8\n     /* Depth == 2 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H3)\n#    define __WINE_PSHPACK_H3 8\n     /* Depth == 3 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H4)\n#    define __WINE_PSHPACK_H4 8\n     /* Depth == 4 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H5)\n#    define __WINE_PSHPACK_H5 8\n     /* Depth == 5 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H6)\n#    define __WINE_PSHPACK_H6 8\n     /* Depth == 6 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H7)\n#    define __WINE_PSHPACK_H7 8\n     /* Depth == 7 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H8)\n#    define __WINE_PSHPACK_H8 8\n     /* Depth == 8 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H9)\n#    define __WINE_PSHPACK_H9 8\n     /* Depth == 9 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H10)\n#    define __WINE_PSHPACK_H10 8\n     /* Depth == 10 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H11)\n#    define __WINE_PSHPACK_H11 8\n     /* Depth == 11 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H12)\n#    define __WINE_PSHPACK_H12 8\n     /* Depth == 12 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H13)\n#    define __WINE_PSHPACK_H13 8\n     /* Depth == 13 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H14)\n#    define __WINE_PSHPACK_H14 8\n     /* Depth == 14 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  elif !defined(__WINE_PSHPACK_H15)\n#    define __WINE_PSHPACK_H15 8\n     /* Depth == 15 */\n#    define __WINE_INTERNAL_POPPACK\n#    include <poppack.h>\n#  endif\n\n#  if defined(_MSC_VER) && (_MSC_VER >= 800)\n#   pragma warning(disable:4103)\n#  endif\n\n#  pragma pack(8)\n\n#endif\n"
  },
  {
    "path": "wine/windows/pstore.idl",
    "content": "/*\n * Copyright (C) 2004 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"wtypes.idl\";\nimport \"oaidl.idl\";\n\ncpp_quote(\"#define PST_KEY_CURRENT_USER    0\")\ncpp_quote(\"#define PST_KEY_LOCAL_MACHINE   1\")\n\ncpp_quote(\"#define PST_E_OK          0x00000000L\")\ncpp_quote(\"#define PST_E_TYPE_EXISTS 0x800C0004L\")\n\ncpp_quote(\"#define PST_AUTHENTICODE        1\")\ncpp_quote(\"#define PST_BINARY_CHECK        2\")\ncpp_quote(\"#define PST_SECURITY_DESCRIPTOR 4\")\n\ntypedef DWORD PST_ACCESSMODE;\ntypedef DWORD PST_ACCESSCLAUSETYPE;\ntypedef DWORD PST_KEY;\ntypedef DWORD PST_PROVIDERCAPABILITIES;\ntypedef GUID PST_PROVIDERID, *PPST_PROVIDERID;\n\n/*****************************************************************************\n * PSTOREC library\n */\n[\n    uuid(5a6f1ebd-2db1-11d0-8c39-00c04fd9126b),\n    version(1.0),\n    helpstring(\"PStore 1.0 Type Library\")\n]\nlibrary PSTORECLib\n{\n    importlib(\"stdole2.tlb\");\n\ntypedef struct _PST_PROVIDERINFO\n{\n    DWORD cbSize;\n    PST_PROVIDERID ID;\n    PST_PROVIDERCAPABILITIES Capabilities;\n    LPWSTR szProviderName;\n} PST_PROVIDERINFO, *PPST_PROVIDERINFO;\n\ntypedef struct _PST_PROMPTINFO\n{\n    DWORD cbSize;\n    DWORD dwPromptFlags;\n    HWND hwndApp;\n    LPCWSTR szPrompt;\n} PST_PROMPTINFO, *PPST_PROMPTINFO;\n\ntypedef struct _PST_ACCESSCLAUSE {\n    DWORD cbSize;\n    PST_ACCESSCLAUSETYPE ClauseType;\n    DWORD cbClauseData;\n    BYTE* pbClauseData;\n} PST_ACCESSCLAUSE, *PPST_ACCESSCLAUSE;\n\ntypedef struct _PST_ACCESSRULE {\n    DWORD cbSize;\n    PST_ACCESSMODE AccessModeFlags;\n    DWORD cClauses;\n    PST_ACCESSCLAUSE* rgClauses;\n} PST_ACCESSRULE, *PPST_ACCESSRULE;\n\ntypedef struct _PST_ACCESSRULESET {\n    DWORD cbSize;\n    DWORD cClause;\n    PST_ACCESSRULE* rgRules;\n} PST_ACCESSRULESET, *PPST_ACCESSRULESET;\n\ntypedef struct _PST_TYPEINFO {\n    DWORD cbSize;\n    LPWSTR szDisplayName;\n} PST_TYPEINFO, *PPST_TYPEINFO;\n\n[\n  object,\n  uuid(5a6f1ec1-2db1-11d0-8c39-00c04fd9126b),\n  pointer_default(unique)\n]\ninterface IEnumPStoreItems : IUnknown\n{\n    HRESULT Clone(\n        [in] IEnumPStoreItems** ppenum );\n\n    HRESULT Next(\n        [in] DWORD celt,\n        [in] LPWSTR* rgelt,\n        [in] DWORD* pceltFetched );\n\n    HRESULT Reset();\n\n    HRESULT Skip(\n        [in] DWORD celt );\n}\n\n[\n  object,\n  uuid(789c1cbf-31ee-11d0-8c39-00c04fd9126b),\n  pointer_default(unique)\n]\ninterface IEnumPStoreTypes : IUnknown\n{\n    HRESULT Clone(\n        [in] IEnumPStoreTypes** ppenum );\n\n    HRESULT Next(\n        [in] DWORD celt,\n        [in] LPWSTR* rgelt,\n        [in] DWORD* pceltFetched );\n\n    HRESULT Reset();\n\n    HRESULT Skip(\n        [in] DWORD celt );\n}\n\n/*****************************************************************************\n * IPStore interface\n */\n[\n  object,\n  uuid(5a6f1ec0-2db1-11d0-8c39-00c04fd9126b),\n  pointer_default(unique)\n]\ninterface IPStore : IUnknown\n{\n    HRESULT GetInfo(\n        [in] PPST_PROVIDERINFO* ppProperties );\n\n    HRESULT GetProvParam(\n        [in] DWORD dwParam,\n        [out] DWORD* pcbData,\n        [out] BYTE** ppbData,\n        [in] DWORD dwFlags );\n\n    HRESULT SetProvParam(\n        [in] DWORD dwParam,\n        [in] DWORD cbData,\n        [in] BYTE* pbData,\n        [in] DWORD* dwFlags );\n\n    HRESULT CreateType(\n        [in] PST_KEY Key,\n        [in] const GUID* pType,\n        [in] PPST_TYPEINFO pInfo,\n        [in] DWORD dwFlags );\n\n    HRESULT GetTypeInfo(\n        [in] PST_KEY Key,\n        [in] const GUID* pType,\n        [in] PPST_TYPEINFO** ppInfo,\n        [in] DWORD dwFlags );\n\n    HRESULT DeleteType(\n        [in] PST_KEY Key,\n        [in] const GUID* pType,\n        [in] DWORD dwFlags );\n\n    HRESULT CreateSubtype(\n        [in] PST_KEY Key,\n        [in] const GUID* pType,\n        [in] const GUID* pSubtype,\n        [in] PPST_TYPEINFO pInfo,\n        [in] PPST_ACCESSRULESET pRules,\n        [in] DWORD dwFlags );\n\n    HRESULT GetSubtypeInfo(\n        [in] PST_KEY Key,\n        [in] const GUID* pType,\n        [in] const GUID* pSubtype,\n        [in] PPST_TYPEINFO** ppInfo,\n        [in] DWORD dwFlags );\n\n    HRESULT DeleteSubtype(\n        [in] PST_KEY Key,\n        [in] const GUID* pType,\n        [in] const GUID* pSubtype,\n        [in] DWORD dwFlags );\n\n    HRESULT ReadAccessRuleset(\n        [in] PST_KEY Key,\n        [in] const GUID* pType,\n        [in] const GUID* pSubtype,\n        [in] PPST_TYPEINFO pInfo,\n        [in] PPST_ACCESSRULESET** ppRules,\n        [in] DWORD dwFlags );\n\n    HRESULT WriteAccessRuleset(\n        [in] PST_KEY Key,\n        [in] const GUID* pType,\n        [in] const GUID* pSubtype,\n        [in] PPST_TYPEINFO pInfo,\n        [in] PPST_ACCESSRULESET pRules,\n        [in] DWORD dwFlags );\n\n    HRESULT EnumTypes(\n        [in] PST_KEY Key,\n        [in] DWORD dwFlags,\n        [in] IEnumPStoreTypes** ppenum );\n\n    HRESULT EnumSubtypes(\n        [in] PST_KEY Key,\n        [in] const GUID* pType,\n        [in] DWORD dwFlags,\n        [in] IEnumPStoreTypes** ppenum );\n\n    HRESULT DeleteItem(\n        [in] PST_KEY Key,\n        [in] const GUID* pItemType,\n        [in] const GUID* pItemSubType,\n        [in] LPCWSTR szItemName,\n        [in] PPST_PROMPTINFO pPromptInfo,\n        [in] DWORD dwFlags );\n\n    HRESULT ReadItem(\n        [in] PST_KEY Key,\n        [in] const GUID* pItemType,\n        [in] const GUID* pItemSubtype,\n        [in] LPCWSTR szItemName,\n        [in] DWORD *cbData,\n        [in] BYTE** pbData,\n        [in] PPST_PROMPTINFO pPromptInfo,\n        [in] DWORD dwFlags );\n\n    HRESULT WriteItem(\n        [in] PST_KEY Key,\n        [in] const GUID* pItemType,\n        [in] const GUID* pItemSubtype,\n        [in] LPCWSTR szItemName,\n        [in] DWORD cbData,\n        [in,size_is(cbData)] BYTE *ppbData,\n        [in] PPST_PROMPTINFO pPromptInfo,\n        [in] DWORD dwDefaultConfirmationStyle,\n        [in] DWORD dwFlags);\n\n    HRESULT OpenItem(\n        [in] PST_KEY Key,\n        [in] const GUID* pItemType,\n        [in] const GUID* pItemSubtype,\n        [in] LPCWSTR szItemName,\n        [in] PST_ACCESSMODE ModeFlags,\n        [in] PPST_PROMPTINFO pPromptInfo,\n        [in] DWORD dwFlags );\n\n    HRESULT CloseItem( \n        [in] PST_KEY Key, \n        [in] const GUID* pItemType, \n        [in] const GUID* pItemSubtype,\n        [in] LPCWSTR* szItemName,\n        [in] DWORD dwFlags );\n\n    HRESULT EnumItems(\n        [in] PST_KEY Key,\n        [in] const GUID* pItemType,\n        [in] const GUID* pItemSubtype,\n        [in] DWORD dwFlags,\n        [in] IEnumPStoreItems** ppenum );\n}\n\n}\n"
  },
  {
    "path": "wine/windows/qedit.idl",
    "content": "/*\n * Copyright (C) 2008 Google (Lei Zhang)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\n/* import \"dxtrans.idl\"; */\nimport \"amstream.idl\";\nimport \"msxml.idl\";\n\n[\n    object,\n    uuid(0579154A-2B53-4994-B0D0-E773148EFF85),\n    local,\n    pointer_default(unique)\n]\ninterface ISampleGrabberCB : IUnknown\n{\n    HRESULT SampleCB(\n        double SampleTime,\n        IMediaSample * pSample\n    );\n    HRESULT BufferCB(\n        double SampleTime,\n        BYTE * pBuffer,\n        LONG BufferLen\n    );\n}\n\n[\n    object,\n    uuid(6B652FFF-11FE-4fce-92AD-0266B5D7C78F),\n    local,\n    pointer_default(unique)\n]\ninterface ISampleGrabber: IUnknown\n{\n    HRESULT SetOneShot(\n        BOOL OneShot\n    );\n\n    HRESULT SetMediaType(\n        const AM_MEDIA_TYPE * pType\n    );\n\n    HRESULT GetConnectedMediaType(\n        AM_MEDIA_TYPE * pType\n    );\n\n    HRESULT SetBufferSamples(\n        BOOL BufferThem\n    );\n\n    HRESULT GetCurrentBuffer(\n        [in,out] LONG * pBufferSize,\n        [out] LONG * pBuffer\n    );\n\n    HRESULT GetCurrentSample(\n        [out] IMediaSample ** ppSample\n    );\n\n    HRESULT SetCallback(\n        ISampleGrabberCB * pCallback,\n        LONG WhichMethodToCallback\n    );\n}\n\n[\n    object,\n    uuid(65bd0710-24d2-4FF7-9324-ed2e5d3abafa),\n    pointer_default(unique)\n]\ninterface IMediaDet : IUnknown\n{\n    HRESULT get_Filter(\n        [out] IUnknown* *pVal\n    );\n\n    HRESULT put_Filter(\n        IUnknown* newVal\n    );\n\n    HRESULT get_OutputStreams(\n        [out] LONG *pVal\n    );\n\n    HRESULT get_CurrentStream(\n        [out] LONG *pVal\n    );\n\n    HRESULT put_CurrentStream(\n        LONG newVal\n    );\n\n    HRESULT get_StreamType(\n        [out] GUID *pVal\n    );\n\n    HRESULT get_StreamTypeB(\n        [out] BSTR *pVal\n    );\n\n    HRESULT get_StreamLength(\n        [out] double *pVal\n    );\n\n    HRESULT get_Filename(\n        [out] BSTR *pVal\n    );\n\n    HRESULT put_Filename(\n        BSTR newVal\n    );\n\n    HRESULT GetBitmapBits(\n        double StreamTime,\n        LONG * pBufferSize,\n        char * pBuffer,\n        LONG Width,\n        LONG Height\n    );\n\n    HRESULT WriteBitmapBits(\n        double StreamTime,\n        LONG Width,\n        LONG Height,\n        BSTR Filename\n    );\n\n    HRESULT get_StreamMediaType(\n        [out] AM_MEDIA_TYPE * pVal\n    );\n\n    HRESULT GetSampleGrabber(\n        [out] ISampleGrabber ** ppVal\n    );\n\n    HRESULT get_FrameRate(\n        [out] double *pVal\n    );\n\n    HRESULT EnterBitmapGrabMode(\n        double SeekTime\n    );\n}\n\n[\n    uuid(65BD0711-24D2-4ff7-9324-ED2E5D3ABAFA),\n]\ncoclass MediaDet\n{\n    [default] interface IMediaDet;\n}\n\n[\n    object,\n    uuid(288581E0-66CE-11d2-918F-00C0DF10D434),\n    odl,\n    pointer_default(unique)\n]\ninterface IMediaLocator : IUnknown\n{\n    HRESULT FindMediaFile(\n        BSTR input,\n        BSTR filter,\n        BSTR * output,\n        long flags\n    );\n\n    HRESULT AddFoundLocation(\n        BSTR dir\n    );\n}\n\ntypedef struct\n{\n    BSTR name;\n    DISPID dispID;\n    LONG nValues;\n} DEXTER_PARAM;\n\ntypedef struct\n{\n    VARIANT v;\n    REFERENCE_TIME rt;\n    DWORD dwInterp;\n} DEXTER_VALUE;\n\n[\n    object,\n    uuid(AE9472BD-B0C3-11D2-8D24-00A0C9441E20),\n    pointer_default(unique)\n]\ninterface IPropertySetter : IUnknown\n{\n    HRESULT LoadXML(\n        [in] IUnknown * pxml\n    );\n\n    HRESULT PrintXML(\n        [out] char * xml,\n        [in] int size,\n        [out] int * printed,\n        [in] int indent\n    );\n\n    HRESULT CloneProps(\n        [out] IPropertySetter ** setter,\n        [in] REFERENCE_TIME start,\n        [in] REFERENCE_TIME stop\n    );\n\n    HRESULT AddProp(\n        [in] DEXTER_PARAM param,\n        [in] DEXTER_VALUE * value\n    );\n\n    HRESULT GetProps(\n        [out] LONG * params,\n        [out] DEXTER_PARAM ** param,\n        [out] DEXTER_VALUE ** value\n    );\n\n    HRESULT FreeProps(\n        [in] LONG params,\n        [in] DEXTER_PARAM * param,\n        [in] DEXTER_VALUE * value\n    );\n\n    HRESULT ClearProps();\n\n    HRESULT SaveToBlob(\n        [out] LONG * size,\n        [out] BYTE ** blob\n    );\n\n    HRESULT LoadFromBlob(\n        [in] LONG size,\n        [in] BYTE * blob\n    );\n\n    HRESULT SetProps(\n        [in] IUnknown * target,\n        [in] REFERENCE_TIME now\n    );\n}\n\n[\n    object,\n    uuid(E43E73A2-0EFA-11d3-9601-00A0C9441E20),\n    odl,\n    pointer_default(unique)\n]\ninterface IAMErrorLog : IUnknown\n{\n    HRESULT LogError(\n        long severity,\n        BSTR error_str,\n        long error_code,\n        long hresult,\n        [in] VARIANT * extra\n    );\n}\n\n[\n    object,\n    uuid(963566DA-BE21-4eaf-88E9-35704F8F52A1),\n    odl,\n    pointer_default(unique)\n]\ninterface IAMSetErrorLog : IUnknown\n{\n    [propget] HRESULT ErrorLog(\n        [out, retval] IAMErrorLog ** log\n    );\n\n    [propput] HRESULT ErrorLog(\n        [in] IAMErrorLog * log\n    );\n}\n\ninterface IAMTimeline;\ninterface IAMTimelineGroup;\ninterface IAMTimelineObj;\ninterface IAMTimelineSrc;\n\ntypedef enum\n{\n    TIMELINE_MAJOR_TYPE_COMPOSITE = 1,\n    TIMELINE_MAJOR_TYPE_TRACK = 2,\n    TIMELINE_MAJOR_TYPE_SOURCE = 4,\n    TIMELINE_MAJOR_TYPE_TRANSITION = 8,\n    TIMELINE_MAJOR_TYPE_EFFECT = 16,\n    TIMELINE_MAJOR_TYPE_GROUP = 128\n} TIMELINE_MAJOR_TYPE;\n\n[\n    object,\n    uuid(78530B74-61F9-11D2-8CAD-00A024580902),\n    odl,\n    pointer_default(unique)\n]\ninterface IAMTimeline : IUnknown\n{\n    HRESULT CreateEmptyNode(\n        [out] IAMTimelineObj ** obj,\n        TIMELINE_MAJOR_TYPE type\n    );\n\n    HRESULT AddGroup(\n        IAMTimelineObj * group\n    );\n\n    HRESULT RemGroupFromList(\n        IAMTimelineObj * group\n    );\n\n    HRESULT GetGroup(\n        [out] IAMTimelineObj ** group,\n        long index\n    );\n\n    HRESULT GetGroupCount(\n        long * count\n    );\n\n    HRESULT ClearAllGroups();\n\n    HRESULT GetInsertMode(\n        long * mode\n    );\n\n    HRESULT SetInsertMode(\n        long mode\n    );\n\n    HRESULT EnableTransitions(\n        BOOL enabled\n    );\n\n    HRESULT TransitionsEnabled(\n        BOOL * enabled\n    );\n\n    HRESULT EnableEffects(\n        BOOL enabled\n    );\n\n    HRESULT EffectsEnabled(\n        BOOL * enabled\n    );\n\n    HRESULT SetInterestRange(\n        REFERENCE_TIME start,\n        REFERENCE_TIME stop\n    );\n\n    HRESULT GetDuration(\n        REFERENCE_TIME * duration\n    );\n\n    HRESULT GetDuration2(\n        double * duration\n    );\n\n    HRESULT SetDefaultFPS(\n        double fps\n    );\n\n    HRESULT GetDefaultFPS(\n        double * fps\n    );\n\n    HRESULT IsDirty(\n        BOOL * dirty\n    );\n\n    HRESULT GetDirtyRange(\n        REFERENCE_TIME * start,\n        REFERENCE_TIME * stop\n    );\n\n    HRESULT GetCountOfType(\n        long group,\n        long * value,\n        long * value_with_comps,\n        TIMELINE_MAJOR_TYPE type\n    );\n\n    HRESULT ValidateSourceNames(\n        long flags,\n        IMediaLocator * override,\n        LONG_PTR notify_event\n    );\n\n    HRESULT SetDefaultTransition(\n        GUID * guid\n    );\n\n    HRESULT GetDefaultTransition(\n        GUID * guid\n    );\n\n    HRESULT SetDefaultEffect(\n        GUID * guid\n    );\n\n    HRESULT GetDefaultEffect(\n        GUID * guid\n    );\n\n    HRESULT SetDefaultTransitionB(\n        BSTR guidb\n    );\n\n    HRESULT GetDefaultTransitionB(\n        [out,retval] BSTR * guidb\n    );\n\n    HRESULT SetDefaultEffectB(\n        BSTR guidb\n    );\n\n    HRESULT GetDefaultEffectB(\n        [out,retval] BSTR * guidb\n    );\n}\n\n[\n    uuid(78530B75-61F9-11D2-8CAD-00A024580902)\n]\ncoclass AMTimeline\n{\n    [default] interface IAMTimeline;\n    interface IPersistStream;\n    interface IAMSetErrorLog;\n}\n\n[\n    object,\n    uuid(9EED4F00-B8A6-11d2-8023-00C0DF10D434),\n    odl,\n    pointer_default(unique)\n]\ninterface IAMTimelineGroup : IUnknown\n{\n    HRESULT SetTimeline(\n        IAMTimeline * timeline\n    );\n\n    HRESULT GetTimeline(\n        [out] IAMTimeline ** timeline\n    );\n\n    HRESULT GetPriority(\n        long * priority\n    );\n\n    HRESULT GetMediaType(\n        [out] AM_MEDIA_TYPE *\n    );\n\n    HRESULT SetMediaType(\n        [in] AM_MEDIA_TYPE *\n    );\n\n    HRESULT SetOutputFPS(\n        double fps\n    );\n\n    HRESULT GetOutputFPS(\n        double * fps\n    );\n\n    HRESULT SetGroupName(\n        BSTR name\n    );\n\n    HRESULT GetGroupName(\n        [out,retval] BSTR * name\n    );\n\n    HRESULT SetPreviewMode(\n        BOOL preview\n    );\n\n    HRESULT GetPreviewMode(\n        BOOL * preview\n    );\n\n    HRESULT SetMediaTypeForVB(\n        [in] long type\n    );\n\n    HRESULT GetOutputBuffering(\n        [out] int * buffer\n    );\n\n    HRESULT SetOutputBuffering(\n        [in] int buffer\n    );\n\n    HRESULT SetSmartRecompressFormat(\n        long * format\n    );\n\n    HRESULT GetSmartRecompressFormat(\n        long ** format\n    );\n\n    HRESULT IsSmartRecompressFormatSet(\n        BOOL * set\n    );\n\n    HRESULT IsRecompressFormatDirty(\n        BOOL * dirty\n    );\n\n    HRESULT ClearRecompressFormatDirty();\n\n    HRESULT SetRecompFormatFromSource(\n        IAMTimelineSrc * source\n    );\n}\n\n[\n    object,\n    local,\n    uuid(78530B77-61F9-11D2-8CAD-00A024580902),\n    odl,\n    pointer_default(unique)\n]\ninterface IAMTimelineObj : IUnknown\n{\n    HRESULT GetStartStop(\n        REFERENCE_TIME * start,\n        REFERENCE_TIME * stop\n    );\n\n    HRESULT GetStartStop2(\n        REFTIME * start, REFTIME * stop\n    );\n\n    HRESULT FixTimes(\n        REFERENCE_TIME * start, REFERENCE_TIME * stop\n    );\n\n    HRESULT FixTimes2(\n        REFTIME * start, REFTIME * stop\n    );\n\n    HRESULT SetStartStop(\n        REFERENCE_TIME start,\n        REFERENCE_TIME stop\n    );\n\n    HRESULT SetStartStop2(\n        REFTIME start,\n        REFTIME stop\n    );\n\n    HRESULT GetPropertySetter(\n        [out,retval] IPropertySetter ** setter\n    );\n\n    HRESULT SetPropertySetter(\n        IPropertySetter * setter\n    );\n\n    HRESULT GetSubObject(\n        [out,retval] IUnknown ** obj\n    );\n\n    HRESULT SetSubObject(\n        IUnknown * obj\n    );\n\n    HRESULT SetSubObjectGUID(\n        GUID guid\n    );\n\n    HRESULT SetSubObjectGUIDB(\n        BSTR guidb\n    );\n\n    HRESULT GetSubObjectGUID(\n        GUID * guid\n    );\n\n    HRESULT GetSubObjectGUIDB(\n        [out,retval] BSTR * guidb\n    );\n\n    HRESULT GetSubObjectLoaded(\n        BOOL * loaded\n    );\n\n    HRESULT GetTimelineType(\n        TIMELINE_MAJOR_TYPE * type\n    );\n\n    HRESULT SetTimelineType(\n        TIMELINE_MAJOR_TYPE type\n    );\n\n    HRESULT GetUserID(\n        long * id\n    );\n\n    HRESULT SetUserID(\n        long id\n    );\n\n    HRESULT GetGenID(\n        long * id\n    );\n\n    HRESULT GetUserName(\n        [out,retval] BSTR * name\n    );\n\n    HRESULT SetUserName(\n        BSTR name\n    );\n\n    HRESULT GetUserData(\n        BYTE * data,\n        long * size\n    );\n\n    HRESULT SetUserData(\n        BYTE * data,\n        long size\n    );\n\n    HRESULT GetMuted(\n        BOOL * muted\n    );\n\n    HRESULT SetMuted(\n        BOOL muted\n    );\n\n    HRESULT GetLocked(\n        BOOL * locked\n    );\n\n    HRESULT SetLocked(\n        BOOL locked\n    );\n\n    HRESULT GetDirtyRange(\n        REFERENCE_TIME * start,\n        REFERENCE_TIME * stop\n    );\n\n    HRESULT GetDirtyRange2(\n        REFTIME * start,\n        REFTIME * stop\n    );\n\n    HRESULT SetDirtyRange(\n        REFERENCE_TIME start,\n        REFERENCE_TIME stop\n    );\n\n    HRESULT SetDirtyRange2(\n        REFTIME start,\n        REFTIME stop\n    );\n\n    HRESULT ClearDirty();\n\n    HRESULT Remove();\n\n    HRESULT RemoveAll();\n\n    HRESULT GetTimelineNoRef(\n        IAMTimeline ** timeline\n    );\n\n    HRESULT GetGroupIBelongTo(\n        [out] IAMTimelineGroup ** group\n    );\n\n    HRESULT GetEmbedDepth(\n        long * depth\n    );\n}\n\n[\n    object,\n    uuid(78530B79-61F9-11D2-8CAD-00A024580902),\n    odl,\n    pointer_default(unique)\n]\ninterface IAMTimelineSrc : IUnknown\n{\n    HRESULT GetMediaTimes(\n        REFERENCE_TIME * start,\n        REFERENCE_TIME * stop\n    );\n\n    HRESULT GetMediaTimes2(\n        REFTIME * start,\n        REFTIME * stop\n    );\n\n    HRESULT ModifyStopTime(\n        REFERENCE_TIME stop\n    );\n\n    HRESULT ModifyStopTime2(\n        REFTIME stop\n    );\n\n    HRESULT FixMediaTimes(\n        REFERENCE_TIME * start,\n        REFERENCE_TIME * stop\n    );\n\n    HRESULT FixMediaTimes2(\n        REFTIME * start,\n        REFTIME * stop\n    );\n\n    HRESULT SetMediaTimes(\n        REFERENCE_TIME Start,\n        REFERENCE_TIME Stop\n    );\n\n    HRESULT SetMediaTimes2(\n        REFTIME Start,\n        REFTIME Stop\n    );\n\n    HRESULT SetMediaLength(\n        REFERENCE_TIME length\n    );\n\n    HRESULT SetMediaLength2(\n        REFTIME length\n    );\n\n    HRESULT GetMediaLength(\n        REFERENCE_TIME * length\n    );\n\n    HRESULT GetMediaLength2(\n        REFTIME * length\n    );\n\n    HRESULT GetMediaName(\n        [out,retval] BSTR * name\n    );\n\n    HRESULT SetMediaName(\n        BSTR name\n    );\n\n    HRESULT SpliceWithNext(\n        IAMTimelineObj * next\n    );\n\n    HRESULT GetStreamNumber(\n        long * num\n    );\n\n    HRESULT SetStreamNumber(\n        long num\n    );\n\n    HRESULT IsNormalRate(\n        BOOL * normal\n    );\n\n    HRESULT GetDefaultFPS(\n        double * fps\n    );\n\n    HRESULT SetDefaultFPS(\n        double fps\n    );\n\n    HRESULT GetStretchMode(\n        int * mode\n    );\n\n    HRESULT SetStretchMode(\n        int mode\n    );\n}\n\nenum\n{\n    E_NOTINTREE = 0x80040400,\n    E_RENDER_ENGINE_IS_BROKEN = 0x80040401,\n    E_MUST_INIT_RENDERER = 0x80040402,\n    E_NOTDETERMINED = 0x80040403,\n    E_NO_TIMELINE = 0x80040404,\n    S_WARN_OUTPUTRESET = 40404\n};\n"
  },
  {
    "path": "wine/windows/ras.h",
    "content": "/*\n * Copyright (C) 1998 Marcus Meissner\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_RAS_H\n#define __WINE_RAS_H\n\n#include <lmcons.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n#include <pshpack4.h>\n#include <inaddr.h>\n#include <in6addr.h>\n\n#define RAS_MaxCallbackNumber RAS_MaxPhoneNumber\n#define RAS_MaxDeviceName     128\n#define RAS_MaxDeviceType     16\n#define RAS_MaxEntryName      256\n#define RAS_MaxPhoneNumber    128\n#define RAS_MaxAreaCode       10\n#define RAS_MaxPadType        32\n#define RAS_MaxX25Address     200\n#define RAS_MaxFacilities     200\n#define RAS_MaxUserData       200\n#define RAS_MaxDnsSuffix      256\n\n/* szDeviceType strings for RASDEVINFO */\n#define RASDT_Direct     \"direct\"\n#define RASDT_Modem      \"modem\"\n#define RASDT_Isdn       \"isdn\"\n#define RASDT_X25        \"x25\"\n#define RASDT_Vpn        \"vpn\"\n#define RASDT_Pad        \"pad\"\n#define RASDT_Generic    \"GENERIC\"\n#define RASDT_Serial     \"SERIAL\"\n#define RASDT_FrameRelay \"FRAMERELAY\"\n#define RASDT_Atm        \"ATM\"\n#define RASDT_Sonet      \"SONET\"\n#define RASDT_SW56       \"SW56\"\n#define RASDT_Irda       \"IRDA\"\n#define RASDT_Parallel   \"PARALLEL\"\n#define RASDT_PPPoE      \"PPPoE\"\n\ntypedef struct tagRASDEVINFOA {\n    DWORD    dwSize;\n    CHAR     szDeviceType[ RAS_MaxDeviceType + 1 ];\n    CHAR     szDeviceName[ RAS_MaxDeviceName + 1 ];\n} RASDEVINFOA, *LPRASDEVINFOA;\n\ntypedef struct tagRASDEVINFOW {\n    DWORD    dwSize;\n    WCHAR    szDeviceType[ RAS_MaxDeviceType + 1 ];\n    WCHAR    szDeviceName[ RAS_MaxDeviceName + 1 ];\n} RASDEVINFOW, *LPRASDEVINFOW;\n\nDECL_WINELIB_TYPE_AW(RASDEVINFO)\nDECL_WINELIB_TYPE_AW(LPRASDEVINFO)\n\nDECLARE_HANDLE(HRASCONN);\ntypedef  HRASCONN* LPHRASCONN;\n\ntypedef struct tagRASCONNA {\n    DWORD    dwSize;\n    HRASCONN hRasConn;\n    CHAR     szEntryName[ RAS_MaxEntryName + 1 ];\n    CHAR     szDeviceType[ RAS_MaxDeviceType + 1 ];\n    CHAR     szDeviceName[ RAS_MaxDeviceName + 1 ];\n    CHAR     szPhonebook[ MAX_PATH ];\n    DWORD    dwSubEntry;\n    GUID     guidEntry;\n    DWORD    dwFlags;\n    LUID     luid;\n    GUID     guidCorrelationId;\n} RASCONNA,*LPRASCONNA;\n\ntypedef struct tagRASCONNW {\n    DWORD    dwSize;\n    HRASCONN hRasConn;\n    WCHAR    szEntryName[ RAS_MaxEntryName + 1 ];\n    WCHAR    szDeviceType[ RAS_MaxDeviceType + 1 ];\n    WCHAR    szDeviceName[ RAS_MaxDeviceName + 1 ];\n    WCHAR    szPhonebook[ MAX_PATH ];\n    DWORD    dwSubEntry;\n    GUID     guidEntry;\n    DWORD    dwFlags;\n    LUID     luid;\n    GUID     guidCorrelationId;\n} RASCONNW,*LPRASCONNW;\n\nDECL_WINELIB_TYPE_AW(RASCONN)\nDECL_WINELIB_TYPE_AW(LPRASCONN)\n\ntypedef struct tagRASENTRYNAMEA {\n    DWORD dwSize;\n    CHAR  szEntryName[ RAS_MaxEntryName + 1 ];\n} RASENTRYNAMEA, *LPRASENTRYNAMEA;\n\ntypedef struct tagRASENTRYNAMEW {\n    DWORD dwSize;\n    WCHAR szEntryName[ RAS_MaxEntryName + 1 ];\n} RASENTRYNAMEW, *LPRASENTRYNAMEW;\n\nDECL_WINELIB_TYPE_AW(RASENTRYNAME)\nDECL_WINELIB_TYPE_AW(LPRASENTRYNAME)\n\ntypedef struct tagRASDIALPARAMSA {\n    DWORD dwSize;\n    CHAR szEntryName[ RAS_MaxEntryName + 1 ];\n    CHAR szPhoneNumber[ RAS_MaxPhoneNumber + 1 ];\n    CHAR szCallbackNumber[ RAS_MaxCallbackNumber + 1 ];\n    CHAR szUserName[ UNLEN + 1 ];\n    CHAR szPassword[ PWLEN + 1 ];\n    CHAR szDomain[ DNLEN + 1 ];\n    DWORD dwSubEntry;\n    DWORD dwCallbackId;\n} RASDIALPARAMSA, *LPRASDIALPARAMSA;\n\ntypedef struct tagRASDIALPARAMSW {\n    DWORD dwSize;\n    WCHAR szEntryName[ RAS_MaxEntryName + 1 ];\n    WCHAR szPhoneNumber[ RAS_MaxPhoneNumber + 1 ];\n    WCHAR szCallbackNumber[ RAS_MaxCallbackNumber + 1 ];\n    WCHAR szUserName[ UNLEN + 1 ];\n    WCHAR szPassword[ PWLEN + 1 ];\n    WCHAR szDomain[ DNLEN + 1 ];\n    DWORD dwSubEntry;\n    DWORD dwCallbackId;\n} RASDIALPARAMSW, *LPRASDIALPARAMSW;\n\nDECL_WINELIB_TYPE_AW(RASDIALPARAMS)\nDECL_WINELIB_TYPE_AW(LPRASDIALPARAMS)\n\ntypedef struct tagRASIPADDR {\n\tBYTE classA,classB,classC,classD;\n} RASIPADDR;\n\n#define RASEO_UseCountryAndAreaCodes\t0x0001\n#define RASEO_SpecificIpAddr\t\t0x0002\n#define RASEO_SpecificNameServers\t0x0004\n#define RASEO_IpHeaderCompression\t0x0008\n#define RASEO_RemoteDefaultGateway\t0x0010\n#define RASEO_DisableLcpExtensions\t0x0020\n#define RASEO_TerminalBeforeDial\t0x0040\n#define RASEO_TerminalAfterDial\t\t0x0080\n#define RASEO_ModemLights\t\t0x0100\n#define RASEO_SwCompression\t\t0x0200\n#define RASEO_RequireEncryptedPw\t0x0400\n#define RASEO_RequireMsEncryptedPw\t0x0800\n#define RASEO_RequireDataEncryption\t0x1000\n#define RASEO_NetworkLogon\t\t0x2000\n#define RASEO_UseLogonCredentials\t0x4000\n#define RASEO_PromoteAlternates\t\t0x8000\ntypedef struct tagRASENTRYA {\n    DWORD dwSize;\n    DWORD dwfOptions;\n\n    /* Location */\n\n    DWORD dwCountryID;\n    DWORD dwCountryCode;\n    CHAR szAreaCode[ RAS_MaxAreaCode + 1 ];\n    CHAR szLocalPhoneNumber[ RAS_MaxPhoneNumber + 1 ];\n    DWORD dwAlternateOffset;\n\n    /* IP related stuff */\n\n    RASIPADDR ipaddr;\n    RASIPADDR ipaddrDns;\n    RASIPADDR ipaddrDnsAlt;\n    RASIPADDR ipaddrWins;\n    RASIPADDR ipaddrWinsAlt;\n\n    /* Framing (for ppp/isdn etc...) */\n\n    DWORD dwFrameSize;\n    DWORD dwfNetProtocols;\n    DWORD dwFramingProtocol;\n\n    CHAR szScript[ MAX_PATH ];\n\n    CHAR szAutodialDll[ MAX_PATH ];\n    CHAR szAutodialFunc[ MAX_PATH ];\n\n    CHAR szDeviceType[ RAS_MaxDeviceType + 1 ];\n    CHAR szDeviceName[ RAS_MaxDeviceName + 1 ];\n\n    /* x25 only */\n\n    CHAR szX25PadType[ RAS_MaxPadType + 1 ];\n    CHAR szX25Address[ RAS_MaxX25Address + 1 ];\n    CHAR szX25Facilities[ RAS_MaxFacilities + 1 ];\n    CHAR szX25UserData[ RAS_MaxUserData + 1 ];\n    DWORD dwChannels;\n\n    DWORD dwReserved1;\n    DWORD dwReserved2;\n\n    /* Multilink and BAP */\n\n    DWORD dwSubEntries;\n    DWORD dwDialMode;\n    DWORD dwDialExtraPercent;\n    DWORD dwDialExtraSampleSeconds;\n    DWORD dwHangUpExtraPercent;\n    DWORD dwHangUpExtraSampleSeconds;\n\n    /* Idle time out */\n    DWORD dwIdleDisconnectSeconds;\n\n    DWORD dwType;\t\t/* entry type */\n    DWORD dwEncryptionType;\t/* type of encryption to use */\n    DWORD dwCustomAuthKey;\t/* authentication key for EAP */\n    GUID guidId;\t\t/* guid that represents the phone-book entry  */\n    CHAR szCustomDialDll[MAX_PATH];    /* DLL for custom dialing  */\n    DWORD dwVpnStrategy;         /* specifies type of VPN protocol */\n\n    DWORD dwfOptions2;\n    DWORD dwfOptions3;\n    CHAR szDnsSuffix[RAS_MaxDnsSuffix];\n    DWORD dwTcpWindowSize;\n    CHAR szPrerequisitePbk[MAX_PATH];\n    CHAR szPrerequisiteEntry[RAS_MaxEntryName + 1];\n    DWORD dwRedialCount;\n    DWORD dwRedialPause;\n} RASENTRYA, *LPRASENTRYA;\n\ntypedef struct tagRASENTRYW {\n    DWORD dwSize;\n    DWORD dwfOptions;\n\n    /* Location */\n\n    DWORD dwCountryID;\n    DWORD dwCountryCode;\n    WCHAR szAreaCode[ RAS_MaxAreaCode + 1 ];\n    WCHAR szLocalPhoneNumber[ RAS_MaxPhoneNumber + 1 ];\n    DWORD dwAlternateOffset;\n\n    /* IP related stuff */\n\n    RASIPADDR ipaddr;\n    RASIPADDR ipaddrDns;\n    RASIPADDR ipaddrDnsAlt;\n    RASIPADDR ipaddrWins;\n    RASIPADDR ipaddrWinsAlt;\n\n    /* Framing (for ppp/isdn etc...) */\n\n    DWORD dwFrameSize;\n    DWORD dwfNetProtocols;\n    DWORD dwFramingProtocol;\n\n    WCHAR szScript[ MAX_PATH ];\n\n    WCHAR szAutodialDll[ MAX_PATH ];\n    WCHAR szAutodialFunc[ MAX_PATH ];\n\n    WCHAR szDeviceType[ RAS_MaxDeviceType + 1 ];\n    WCHAR szDeviceName[ RAS_MaxDeviceName + 1 ];\n\n    /* x25 only */\n\n    WCHAR szX25PadType[ RAS_MaxPadType + 1 ];\n    WCHAR szX25Address[ RAS_MaxX25Address + 1 ];\n    WCHAR szX25Facilities[ RAS_MaxFacilities + 1 ];\n    WCHAR szX25UserData[ RAS_MaxUserData + 1 ];\n    DWORD dwChannels;\n\n    DWORD dwReserved1;\n    DWORD dwReserved2;\n\n    /* Multilink and BAP */\n\n    DWORD dwSubEntries;\n    DWORD dwDialMode;\n    DWORD dwDialExtraPercent;\n    DWORD dwDialExtraSampleSeconds;\n    DWORD dwHangUpExtraPercent;\n    DWORD dwHangUpExtraSampleSeconds;\n\n    /* Idle time out */\n    DWORD dwIdleDisconnectSeconds;\n\n    DWORD dwType;\t\t/* entry type */\n    DWORD dwEncryptionType;\t/* type of encryption to use */\n    DWORD dwCustomAuthKey;\t/* authentication key for EAP */\n    GUID guidId;\t\t/* guid that represents the phone-book entry  */\n    WCHAR szCustomDialDll[MAX_PATH];    /* DLL for custom dialing  */\n    DWORD dwVpnStrategy;         /* specifies type of VPN protocol */\n\n    DWORD dwfOptions2;\n    DWORD dwfOptions3;\n    WCHAR szDnsSuffix[RAS_MaxDnsSuffix];\n    DWORD dwTcpWindowSize;\n    WCHAR szPrerequisitePbk[MAX_PATH];\n    WCHAR szPrerequisiteEntry[RAS_MaxEntryName + 1];\n    DWORD dwRedialCount;\n    DWORD dwRedialPause;\n} RASENTRYW, *LPRASENTRYW;\n\nDECL_WINELIB_TYPE_AW(RASENTRY)\n\n#define RASCS_PAUSED 0x1000\n#define RASCS_DONE   0x2000\ntypedef enum tagRASCONNSTATE\n{\n      RASCS_OpenPort = 0,\n      RASCS_PortOpened,\n      RASCS_ConnectDevice,\n      RASCS_DeviceConnected,\n      RASCS_AllDevicesConnected,\n      RASCS_Authenticate,\n      RASCS_AuthNotify,\n      RASCS_AuthRetry,\n      RASCS_AuthCallback,\n      RASCS_AuthChangePassword,\n      RASCS_AuthProject,\n      RASCS_AuthLinkSpeed,\n      RASCS_AuthAck,\n      RASCS_ReAuthenticate,\n      RASCS_Authenticated,\n      RASCS_PrepareForCallback,\n      RASCS_WaitForModemReset,\n      RASCS_WaitForCallback,\n      RASCS_Projected,\n      RASCS_StartAuthentication,\n      RASCS_CallbackComplete,\n      RASCS_LogonNetwork,\n      RASCS_SubEntryConnected,\n      RASCS_SubEntryDisconnected,\n      RASCS_Interactive = RASCS_PAUSED,\n      RASCS_RetryAuthentication,\n      RASCS_CallbackSetByCaller,\n      RASCS_PasswordExpired,\n      RASCS_Connected = RASCS_DONE,\n      RASCS_Disconnected\n}  RASCONNSTATE, *LPRASCONNSTATE;\n\ntypedef struct tagRASCONNSTATUSA\n{\n    DWORD dwSize;\n    RASCONNSTATE rasconnstate;\n    DWORD dwError;\n    CHAR szDeviceType[RAS_MaxDeviceType + 1];\n    CHAR szDeviceName[RAS_MaxDeviceName + 1];\n} RASCONNSTATUSA, *LPRASCONNSTATUSA;\n\ntypedef struct tagRASCONNSTATUSW\n{\n    DWORD dwSize;\n    RASCONNSTATE rasconnstate;\n    DWORD dwError;\n    WCHAR szDeviceType[RAS_MaxDeviceType + 1];\n    WCHAR szDeviceName[RAS_MaxDeviceName + 1];\n} RASCONNSTATUSW, *LPRASCONNSTATUSW;\n\nDECL_WINELIB_TYPE_AW(RASCONNSTATUS)\n\ntypedef enum tagRASPROJECTION\n{\n    RASP_Amb =    0x10000,\n    RASP_PppNbf = 0x803F,\n    RASP_PppIpx = 0x802B,\n    RASP_PppIp =  0x8021,\n    RASP_PppLcp = 0xC021,\n    RASP_Slip =   0x20000\n} RASPROJECTION, *LPRASPROJECTION;\n\ntypedef struct tagRASSUBENTRYA\n{\n    DWORD dwSize;\n    DWORD dwfFlags;\n    CHAR szDeviceType[RAS_MaxDeviceType + 1];\n    CHAR szDeviceName[RAS_MaxDeviceName + 1];\n    CHAR szLocalPhoneNumber[RAS_MaxPhoneNumber + 1];\n    DWORD dwAlternateOffset;\n} RASSUBENTRYA, *LPRASSUBENTRYA;\n\ntypedef struct tagRASSUBENTRYW\n{\n    DWORD dwSize;\n    DWORD dwfFlags;\n    WCHAR szDeviceType[RAS_MaxDeviceType + 1];\n    WCHAR szDeviceName[RAS_MaxDeviceName + 1];\n    WCHAR szLocalPhoneNumber[RAS_MaxPhoneNumber + 1];\n    DWORD dwAlternateOffset;\n} RASSUBENTRYW, *LPRASSUBENTRYW;\n\ntypedef struct tagRASDIALEXTENSIONS\n{\n    DWORD dwSize;\n    DWORD dwfOptions;\n    HWND hwndParent;\n    ULONG_PTR reserved;\n} RASDIALEXTENSIONS, *LPRASDIALEXTENSIONS;\n\ntypedef struct tagRASAUTODIALENTRYA\n{\n    DWORD dwSize;\n    DWORD dwFlags;\n    DWORD dwDialingLocation;\n    CHAR  szEntry[ RAS_MaxEntryName + 1 ];\n} RASAUTODIALENTRYA, *LPRASAUTODIALENTRYA;\n\ntypedef struct tagRASAUTODIALENTRYW\n{\n    DWORD dwSize;\n    DWORD dwFlags;\n    DWORD dwDialingLocation;\n    WCHAR szEntry[ RAS_MaxEntryName + 1 ];\n} RASAUTODIALENTRYW, *LPRASAUTODIALENTRYW;\n\ntypedef struct _RAS_STATS\n{\n    DWORD dwSize;\n    DWORD dwBytesXmited;\n    DWORD dwBytesRcved;\n    DWORD dwFramesXmited;\n    DWORD dwFramesRcved;\n    DWORD dwCrcErr;\n    DWORD dwTimeoutErr;\n    DWORD dwAlignmentErr;\n    DWORD dwHardwareOverrunErr;\n    DWORD dwFramingErr;\n    DWORD dwBufferOverrunErr;\n    DWORD dwCompressionRatioIn;\n    DWORD dwCompressionRatioOut;\n    DWORD dwBps;\n    DWORD dwConnectDuration;\n} RAS_STATS, *PRAS_STATS;\n\nDWORD WINAPI RasConnectionNotificationA(HRASCONN,HANDLE,DWORD);\nDWORD WINAPI RasConnectionNotificationW(HRASCONN,HANDLE,DWORD);\n#define      RasConnectionNotification WINELIB_NAME_AW(RasConnectionNotification)\nDWORD WINAPI RasCreatePhonebookEntryA(HWND,LPCSTR);\nDWORD WINAPI RasCreatePhonebookEntryW(HWND,LPCWSTR);\n#define      RasCreatePhonebookEntry WINELIB_NAME_AW(RasCreatePhonebookEntry)\nDWORD WINAPI RasDeleteEntryA(LPCSTR,LPCSTR);\nDWORD WINAPI RasDeleteEntryW(LPCWSTR,LPCWSTR);\n#define      RasDeleteEntry WINELIB_NAME_AW(RasDeleteEntry)\nDWORD WINAPI RasDeleteSubEntryA(LPCSTR,LPCSTR,DWORD);\nDWORD WINAPI RasDeleteSubEntryW(LPCWSTR,LPCWSTR,DWORD);\n#define      RasDeleteSubEntry WINELIB_NAME_AW(RasDeleteSubEntry)\nDWORD WINAPI RasDialA(LPRASDIALEXTENSIONS,LPCSTR,LPRASDIALPARAMSA,DWORD,LPVOID,LPHRASCONN);\nDWORD WINAPI RasDialW(LPRASDIALEXTENSIONS,LPCWSTR,LPRASDIALPARAMSW,DWORD,LPVOID,LPHRASCONN);\n#define      RasDial WINELIB_NAME_AW(RasDial)\nDWORD WINAPI RasEditPhonebookEntryA(HWND,LPCSTR,LPCSTR);\nDWORD WINAPI RasEditPhonebookEntryW(HWND,LPCWSTR,LPCWSTR);\n#define      RasEditPhonebookEntry WINELIB_NAME_AW(RasEditPhonebookEntry)\nDWORD WINAPI RasEnumAutodialAddressesA(LPSTR*,LPDWORD,LPDWORD);\nDWORD WINAPI RasEnumAutodialAddressesW(LPWSTR*,LPDWORD,LPDWORD);\n#define      RasEnumAutodialAddresses WINELIB_NAME_AW(RasEnumAutodialAddresses)\nDWORD WINAPI RasEnumConnectionsA(LPRASCONNA,LPDWORD,LPDWORD);\nDWORD WINAPI RasEnumConnectionsW(LPRASCONNW,LPDWORD,LPDWORD);\n#define      RasEnumConnections WINELIB_NAME_AW(RasEnumConnections)\nDWORD WINAPI RasEnumDevicesA(LPRASDEVINFOA,LPDWORD,LPDWORD);\nDWORD WINAPI RasEnumDevicesW(LPRASDEVINFOW,LPDWORD,LPDWORD);\n#define      RasEnumDevices WINELIB_NAME_AW(RasEnumDevices)\nDWORD WINAPI RasEnumEntriesA(LPCSTR,LPCSTR,LPRASENTRYNAMEA,LPDWORD,LPDWORD);\nDWORD WINAPI RasEnumEntriesW(LPCWSTR,LPCWSTR,LPRASENTRYNAMEW,LPDWORD,LPDWORD);\n#define      RasEnumEntries WINELIB_NAME_AW(RasEnumEntries)\nDWORD WINAPI RasGetAutodialAddressA(LPCSTR,LPDWORD,LPRASAUTODIALENTRYA,LPDWORD,LPDWORD);\nDWORD WINAPI RasGetAutodialAddressW(LPCWSTR,LPDWORD,LPRASAUTODIALENTRYW,LPDWORD,LPDWORD);\n#define      RasGetAutodialAddresses WINELIB_NAME_AW(RasGetAutodialAddresses)\nDWORD WINAPI RasGetAutodialEnableA(DWORD,LPBOOL);\nDWORD WINAPI RasGetAutodialEnableW(DWORD,LPBOOL);\n#define      RasGetAutodialEnable WINELIB_NAME_AW(RasGetAutodialEnable)\nDWORD WINAPI RasGetAutodialParamA(DWORD dwKey, LPVOID lpvValue, LPDWORD lpdwcbValue);\nDWORD WINAPI RasGetAutodialParamW(DWORD dwKey, LPVOID lpvValue, LPDWORD lpdwcbValue);\n#define RasGetAutodialParam WINELIB_NAME_AW(RasGetAutodialParam)\nDWORD WINAPI RasGetConnectStatusA(HRASCONN,LPRASCONNSTATUSA);\nDWORD WINAPI RasGetConnectStatusW(HRASCONN,LPRASCONNSTATUSW);\n#define      RasGetConnectStatus WINELIB_NAME_AW(RasGetConnectStatus)\nDWORD WINAPI RasGetEntryDialParamsA(LPCSTR,LPRASDIALPARAMSA,LPBOOL);\nDWORD WINAPI RasGetEntryDialParamsW(LPCWSTR,LPRASDIALPARAMSW,LPBOOL);\n#define      RasGetEntryDialParams WINELIB_NAME_AW(RasGetEntryDialParams)\nDWORD WINAPI RasGetEntryPropertiesA(LPCSTR,LPCSTR,LPRASENTRYA,LPDWORD,LPBYTE,LPDWORD);\nDWORD WINAPI RasGetEntryPropertiesW(LPCWSTR,LPCWSTR,LPRASENTRYW,LPDWORD,LPBYTE,LPDWORD);\n#define      RasGetEntryProperties WINELIB_NAME_AW(RasGetEntryProperties)\nDWORD WINAPI RasGetErrorStringA(UINT,LPSTR,DWORD);\nDWORD WINAPI RasGetErrorStringW(UINT,LPWSTR,DWORD);\n#define      RasGetErrorString WINELIB_NAME_AW(RasGetErrorString)\nDWORD WINAPI RasGetProjectionInfoA(HRASCONN,RASPROJECTION,LPVOID,LPDWORD);\nDWORD WINAPI RasGetProjectionInfoW(HRASCONN,RASPROJECTION,LPVOID,LPDWORD);\n#define      RasGetProjectionInfo WINELIB_NAME_AW(RasGetProjectionInfo)\nDWORD WINAPI RasHangUpA(HRASCONN);\nDWORD WINAPI RasHangUpW(HRASCONN);\n#define      RasHangUp WINELIB_NAME_AW(RasHangUp)\nDWORD WINAPI RasRenameEntryA(LPCSTR,LPCSTR,LPCSTR);\nDWORD WINAPI RasRenameEntryW(LPCWSTR,LPCWSTR,LPCWSTR);\n#define      RasRenameEntry WINELIB_NAME_AW(RasRenameEntry)\nDWORD WINAPI RasSetAutodialAddressA(LPCSTR,DWORD,LPRASAUTODIALENTRYA,DWORD,DWORD);\nDWORD WINAPI RasSetAutodialAddressW(LPCWSTR,DWORD,LPRASAUTODIALENTRYW,DWORD,DWORD);\n#define      RasSetAutodialAddress WINELIB_NAME_AW(RasSetAutodialAddress)\nDWORD WINAPI RasSetAutodialParamA(DWORD,LPVOID,DWORD);\nDWORD WINAPI RasSetAutodialParamW(DWORD,LPVOID,DWORD);\n#define      RasSetAutodialParam WINELIB_NAME_AW(RasSetAutodialParam)\nDWORD WINAPI RasSetCustomAuthDataA(const CHAR *,const CHAR *,BYTE *,DWORD);\nDWORD WINAPI RasSetCustomAuthDataW(const WCHAR *,const WCHAR *,BYTE *,DWORD);\n#define      RasSetCustomAuthData WINELIB_NAME_AW(RasSetCustomAuthData)\nDWORD WINAPI RasSetEntryDialParamsA(LPCSTR,LPRASDIALPARAMSA,BOOL);\nDWORD WINAPI RasSetEntryDialParamsW(LPCWSTR,LPRASDIALPARAMSW,BOOL);\n#define      RasSetEntryDialParams WINELIB_NAME_AW(RasSetEntryDialParams)\nDWORD WINAPI RasSetSubEntryPropertiesA(LPCSTR,LPCSTR,DWORD,LPRASSUBENTRYA,DWORD,LPBYTE,DWORD);\nDWORD WINAPI RasSetSubEntryPropertiesW(LPCWSTR,LPCWSTR,DWORD,LPRASSUBENTRYW,DWORD,LPBYTE,DWORD);\n#define      RasSetSubEntryProperties WINELIB_NAME_AW(RasSetSubEntryProperties)\nDWORD WINAPI RasValidateEntryNameA(LPCSTR  lpszPhonebook, LPCSTR  lpszEntry);\nDWORD WINAPI RasValidateEntryNameW(LPCWSTR lpszPhonebook, LPCWSTR lpszEntry);\n#define RasValidateEntryName WINELIB_NAME_AW(RasValidateEntryName)\nDWORD WINAPI RasSetEntryPropertiesA(LPCSTR,LPCSTR,LPRASENTRYA,DWORD,LPBYTE,DWORD);\nDWORD WINAPI RasSetEntryPropertiesW(LPCWSTR,LPCWSTR,LPRASENTRYW,DWORD,LPBYTE,DWORD);\n#define RasSetEntryProperties WINELIB_NAME_AW(RasSetEntryProperties)\nDWORD WINAPI RasSetAutodialEnableA(DWORD dwDialingLocation, BOOL fEnabled);\nDWORD WINAPI RasSetAutodialEnableW(DWORD dwDialingLocation, BOOL fEnabled);\n#define RasSetAutodialEnable WINELIB_NAME_AW(RasSetAutodialEnable)\n\n#include <poppack.h>\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/rasdlg.h",
    "content": "/*\n * Copyright (C) 2010 Nikolay Sivov for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _RASDLG_H_\n#define _RASDLG_H_\n\n#include <ras.h>\n\ntypedef struct tagRASENTRYDLGW\n{\n    DWORD dwSize;\n    HWND  hwndOwner;\n    DWORD dwFlags;\n    LONG  xDlg;\n    LONG  yDlg;\n    WCHAR szEntry[ RAS_MaxEntryName + 1 ];\n    DWORD dwError;\n    ULONG_PTR reserved;\n    ULONG_PTR reserved2;\n} RASENTRYDLGW;\n\n#endif  /* _RASDLG_H_ */\n"
  },
  {
    "path": "wine/windows/raserror.h",
    "content": "/*\n * Copyright (C) 2008 Stefan Leichter\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_RASERROR_H\n#define __WINE_RASERROR_H\n\n#define RASBASE                                600\n#define ERROR_BUFFER_TOO_SMALL                 (RASBASE+3)\n#define ERROR_BUFFER_INVALID                   (RASBASE+10)\n#define ERROR_INVALID_SIZE                     (RASBASE+32)\n#define ERROR_UNKNOWN                          (RASBASE+35)\n#define ERROR_STATE_MACHINES_NOT_STARTED       (RASBASE+95)\n#define ERROR_RASMAN_CANNOT_INITIALIZE         (RASBASE+111)\n\n#endif\n"
  },
  {
    "path": "wine/windows/reason.h",
    "content": "/*\n * ExitWindowsEx() reason codes\n *\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_REASON_H\n#define __WINE_REASON_H\n\n\n#define SHTDN_REASON_FLAG_USER_DEFINED            0x40000000\n#define SHTDN_REASON_FLAG_PLANNED                 0x80000000\n\n#define SHTDN_REASON_MAJOR_OTHER                  0x00000000\n#define SHTDN_REASON_MAJOR_NONE                   0x00000000\n#define SHTDN_REASON_MAJOR_HARDWARE               0x00010000\n#define SHTDN_REASON_MAJOR_OPERATINGSYSTEM        0x00020000\n#define SHTDN_REASON_MAJOR_SOFTWARE               0x00030000\n#define SHTDN_REASON_MAJOR_APPLICATION            0x00040000\n#define SHTDN_REASON_MAJOR_SYSTEM                 0x00050000\n#define SHTDN_REASON_MAJOR_POWER                  0x00060000\n#define SHTDN_REASON_MAJOR_LEGACY_API             0x00070000\n\n#define SHTDN_REASON_MINOR_OTHER                  0x00000000\n#define SHTDN_REASON_MINOR_MAINTENANCE            0x00000001\n#define SHTDN_REASON_MINOR_INSTALLATION           0x00000002\n#define SHTDN_REASON_MINOR_UPGRADE                0x00000003\n#define SHTDN_REASON_MINOR_RECONFIG               0x00000004\n#define SHTDN_REASON_MINOR_HUNG                   0x00000005\n#define SHTDN_REASON_MINOR_UNSTABLE               0x00000006\n#define SHTDN_REASON_MINOR_DISK                   0x00000007\n#define SHTDN_REASON_MINOR_PROCESSOR              0x00000008\n#define SHTDN_REASON_MINOR_NETWORKCARD            0x00000009\n#define SHTDN_REASON_MINOR_POWER_SUPPLY           0x0000000a\n#define SHTDN_REASON_MINOR_CORDUNPLUGGED          0x0000000b\n#define SHTDN_REASON_MINOR_ENVIRONMENT            0x0000000c\n#define SHTDN_REASON_MINOR_HARDWARE_DRIVER        0x0000000d\n#define SHTDN_REASON_MINOR_OTHERDRIVER            0x0000000e\n#define SHTDN_REASON_MINOR_BLUESCREEN             0x0000000f\n#define SHTDN_REASON_MINOR_SERVICEPACK            0x00000010\n#define SHTDN_REASON_MINOR_HOTFIX                 0x00000011\n#define SHTDN_REASON_MINOR_SECURITYFIX            0x00000012\n#define SHTDN_REASON_MINOR_SECURITY               0x00000013\n#define SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY   0x00000014\n#define SHTDN_REASON_MINOR_WMI                    0x00000015\n#define SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL  0x00000016\n#define SHTDN_REASON_MINOR_HOTFIX_UNINSTALL       0x00000017\n#define SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL  0x00000018\n#define SHTDN_REASON_MINOR_MMC                    0x00000019\n#define SHTDN_REASON_MINOR_SYSTEMRESTORE          0x0000001a\n#define SHTDN_REASON_MINOR_TERMSRV                0x00000020\n#define SHTDN_REASON_MINOR_DC_PROMOTION           0x00000021\n#define SHTDN_REASON_MINOR_DC_DEMOTION            0x00000022\n#define SHTDN_REASON_MINOR_NONE                   0x000000ff\n\n#define SHTDN_REASON_VALID_BIT_MASK               0xc0ffffff\n\n#define SHTDN_REASON_UNKNOWN                      SHTDN_REASON_MINOR_NONE\n#define SHTDN_REASON_LEGACY_API                   (SHTDN_REASON_MAJOR_LEGACY_API | SHTDN_REASON_FLAG_PLANNED)\n\n#endif\n"
  },
  {
    "path": "wine/windows/regstr.h",
    "content": "/*\n * Win32 registry string defines (see also winnt.h)\n *\n * Copyright (C) 2000 Andreas Mohr\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _INC_REGSTR\n#define _INC_REGSTR\n\n\n#define REGSTR_PATH_UNINSTALL\t\t\tTEXT(\"Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Uninstall\")\n#define REGSTR_VAL_MAX_HCID_LEN 1024\n\n/* DisplayName <= 32 chars in Windows (otherwise not displayed for uninstall) */\n#define REGSTR_VAL_UNINSTALLER_DISPLAYNAME\tTEXT(\"DisplayName\")\n/* UninstallString <= 63 chars in Windows (otherwise problems) */\n#define REGSTR_VAL_UNINSTALLER_COMMANDLINE\tTEXT(\"UninstallString\")\n\n\n#endif  /* _INC_REGSTR_H */\n"
  },
  {
    "path": "wine/windows/restartmanager.h",
    "content": "/*\n * Copyright (C) 2010 Austin English\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef RESTARTMANAGER_H\n#define RESTARTMANAGER_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define RM_SESSION_KEY_LEN sizeof(GUID)\n#define CCH_RM_SESSION_KEY RM_SESSION_KEY_LEN*2\n#define CCH_RM_MAX_APP_NAME 255\n#define CH_RM_MAX_SVC_NAME 63\n#define RM_INVALID_TS_SESSION -1\n#define RM_INVALID_PROCESS -1\n\ntypedef enum  {\n    RmUnknownApp = 0,\n    RmMainWindow = 1,\n    RmOtherWindow = 2,\n    RmService = 3,\n    RmExplorer = 4,\n    RmConsole = 5,\n    RmCritical = 1000\n} RM_APP_TYPE;\n\ntypedef enum _RM_REBOOT_REASON {\n    RmRebootReasonNone             = 0x0000,\n    RmRebootReasonPermissionDenied = 0x0001,\n    RmRebootReasonSessionMismatch  = 0x0002,\n    RmRebootReasonCriticalProcess  = 0x0004,\n    RmRebootReasonCriticalService  = 0x0008,\n    RmRebootReasonDetectedSelf     = 0x0010\n} RM_REBOOT_REASON;\n\ntypedef struct {\n    DWORD dwProcessId;\n    FILETIME ProcessStartTime;\n} RM_UNIQUE_PROCESS, *PRM_UNIQUE_PROCESS;\n\ntypedef struct {\n    RM_UNIQUE_PROCESS Process;\n    WCHAR strAppName[CCH_RM_MAX_APP_NAME+1];\n    WCHAR strServiceShortName[CH_RM_MAX_SVC_NAME+1];\n    RM_APP_TYPE ApplicationType;\n    ULONG AppStatus;\n    DWORD TSSessionID;\n    BOOL bRestartable;\n} RM_PROCESS_INFO, *PRM_PROCESS_INFO;\n\ntypedef void (CDECL *RM_WRITE_STATUS_CALLBACK)(UINT);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* RESTARTMANAGER_H */\n"
  },
  {
    "path": "wine/windows/richedit.h",
    "content": "/*\n * Copyright (C) 2000 Jean-Claude Batista\n * Copyright (C) 2002 Andriy Palamarchuk\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_RICHEDIT_H\n#define __WINE_RICHEDIT_H\n\n#include <pshpack4.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef _RICHEDIT_VER\n#define _RICHEDIT_VER   0x0210\n#endif /* _RICHEDIT_VER */\n\n#define cchTextLimitDefault 0x7fff\n\n#if defined(__GNUC__)\n# define MSFTEDIT_CLASS (const WCHAR []){ 'R','i','c','h','E','d','i','t','5','0','W',0 }\n#elif defined(_MSC_VER)\n# define MSFTEDIT_CLASS L\"RichEdit50W\"\n#else\nstatic const WCHAR MSFTEDIT_CLASS[] = { 'R','i','c','h','E','d','i','t','5','0','W',0 };\n#endif\n\n#define RICHEDIT_CLASS20A\t\"RichEdit20A\"\n#if defined(__GNUC__)\n# define RICHEDIT_CLASS20W (const WCHAR []){ 'R','i','c','h','E','d','i','t','2','0','W',0 }\n#elif defined(_MSC_VER)\n# define RICHEDIT_CLASS20W      L\"RichEdit20W\"\n#else\nstatic const WCHAR RICHEDIT_CLASS20W[] = { 'R','i','c','h','E','d','i','t','2','0','W',0 };\n#endif\n#define RICHEDIT_CLASS10A\t\"RICHEDIT\"\n\n#if (_RICHEDIT_VER >= 0x0200 )\n#define RICHEDIT_CLASS\t\tWINELIB_NAME_AW(RICHEDIT_CLASS20)\n#else\n#define RICHEDIT_CLASS\t\tRICHEDIT_CLASS10A\n#endif\n\n#ifndef WM_NOTIFY\n#define WM_NOTIFY               0x004e\n#endif\n#ifndef WM_CONTEXTMENU\n#define WM_CONTEXTMENU          0x007b\n#endif\n#ifndef WM_UNICHAR\n#define WM_UNICHAR              0x0109\n#endif\n#ifndef WM_PRINTCLIENT\n#define WM_PRINTCLIENT          0x0318\n#endif\n\n#ifndef EM_GETLIMITTEXT\n#define EM_GETLIMITTEXT         (WM_USER + 37)\n#endif\n#ifndef EM_POSFROMCHAR\n#define EM_POSFROMCHAR          (WM_USER + 38)\n#define EM_CHARFROMPOS          (WM_USER + 39)\n#endif\n#ifndef EM_SCROLLCARET\n#define EM_SCROLLCARET\t\t(WM_USER + 49)\n#endif\n#define EM_CANPASTE\t\t(WM_USER + 50)\n#define EM_DISPLAYBAND\t\t(WM_USER + 51)\n#define EM_EXGETSEL\t\t(WM_USER + 52)\n#define EM_EXLIMITTEXT\t\t(WM_USER + 53)\n#define EM_EXLINEFROMCHAR\t(WM_USER + 54)\n#define EM_EXSETSEL\t\t(WM_USER + 55)\n#define EM_FINDTEXT\t\t(WM_USER + 56)\n#define EM_FORMATRANGE\t\t(WM_USER + 57)\n#define EM_GETCHARFORMAT\t(WM_USER + 58)\n#define EM_GETEVENTMASK\t\t(WM_USER + 59)\n#define EM_GETOLEINTERFACE\t(WM_USER + 60)\n#define EM_GETPARAFORMAT\t(WM_USER + 61)\n#define EM_GETSELTEXT\t\t(WM_USER + 62)\n#define EM_HIDESELECTION\t(WM_USER + 63)\n#define EM_PASTESPECIAL\t\t(WM_USER + 64)\n#define EM_REQUESTRESIZE\t(WM_USER + 65)\n#define EM_SELECTIONTYPE\t(WM_USER + 66)\n#define EM_SETBKGNDCOLOR\t(WM_USER + 67)\n#define EM_SETCHARFORMAT\t(WM_USER + 68)\n#define EM_SETEVENTMASK\t\t(WM_USER + 69)\n#define EM_SETOLECALLBACK\t(WM_USER + 70)\n#define EM_SETPARAFORMAT\t(WM_USER + 71)\n#define EM_SETTARGETDEVICE\t(WM_USER + 72)\n#define EM_STREAMIN\t\t(WM_USER + 73)\n#define EM_STREAMOUT\t\t(WM_USER + 74)\n#define EM_GETTEXTRANGE\t\t(WM_USER + 75)\n#define EM_FINDWORDBREAK\t(WM_USER + 76)\n#define EM_SETOPTIONS\t\t(WM_USER + 77)\n#define EM_GETOPTIONS\t\t(WM_USER + 78)\n#define EM_FINDTEXTEX\t\t(WM_USER + 79)\n#define EM_GETWORDBREAKPROCEX\t(WM_USER + 80)\n#define EM_SETWORDBREAKPROCEX\t(WM_USER + 81)\n\n#define EM_SETUNDOLIMIT\t\t(WM_USER + 82)\n#define EM_REDO\t\t\t(WM_USER + 84)\n#define EM_CANREDO\t\t(WM_USER + 85)\n#define EM_GETUNDONAME\t\t(WM_USER + 86)\n#define EM_GETREDONAME\t\t(WM_USER + 87)\n#define EM_STOPGROUPTYPING\t(WM_USER + 88)\n\n#define EM_SETTEXTMODE\t\t(WM_USER + 89)\n#define EM_GETTEXTMODE\t\t(WM_USER + 90)\n#define EM_AUTOURLDETECT\t(WM_USER + 91)\n#define EM_GETAUTOURLDETECT\t(WM_USER + 92)\n#define EM_SETPALETTE\t\t(WM_USER + 93)\n#define EM_GETTEXTEX\t\t(WM_USER + 94)\n#define EM_GETTEXTLENGTHEX\t(WM_USER + 95)\n#define EM_SHOWSCROLLBAR\t(WM_USER + 96)\n#define EM_SETTEXTEX\t\t(WM_USER + 97)\n\n#define EM_SETPUNCTUATION\t(WM_USER + 100)\n#define EM_GETPUNCTUATION\t(WM_USER + 101)\n#define EM_SETWORDWRAPMODE\t(WM_USER + 102)\n#define EM_GETWORDWRAPMODE\t(WM_USER + 103)\n#define EM_SETIMECOLOR\t\t(WM_USER + 104)\n#define EM_GETIMECOLOR\t\t(WM_USER + 105)\n#define EM_SETIMEOPTIONS\t(WM_USER + 106)\n#define EM_GETIMEOPTIONS\t(WM_USER + 107)\n#define EM_CONVPOSITION\t\t(WM_USER + 108)\n\n#define EM_SETLANGOPTIONS\t(WM_USER + 120)\n#define EM_GETLANGOPTIONS\t(WM_USER + 121)\n#define EM_GETIMECOMPMODE\t(WM_USER + 122)\n\n#define EM_FINDTEXTW\t\t(WM_USER + 123)\n#define EM_FINDTEXTEXW\t\t(WM_USER + 124)\n\n#define EM_RECONVERSION\t\t(WM_USER + 125)\n#define EM_SETIMEMODEBIAS\t(WM_USER + 126)\n#define EM_GETIMEMODEBIAS\t(WM_USER + 127)\n\n#define EM_SETBIDIOPTIONS\t(WM_USER + 200)\n#define EM_GETBIDIOPTIONS\t(WM_USER + 201)\n\n#define EM_SETTYPOGRAPHYOPTIONS (WM_USER + 202)\n#define EM_GETTYPOGRAPHYOPTIONS (WM_USER + 203)\n\n#define EM_SETEDITSTYLE\t\t(WM_USER + 204)\n#define EM_GETEDITSTYLE\t\t(WM_USER + 205)\n\n#define EM_OUTLINE              (WM_USER + 220)\n\n#define EM_GETSCROLLPOS         (WM_USER + 221)\n#define EM_SETSCROLLPOS         (WM_USER + 222)\n\n#define EM_SETFONTSIZE          (WM_USER + 223)\n#define EM_GETZOOM\t\t(WM_USER + 224)\n#define EM_SETZOOM\t\t(WM_USER + 225)\n#define EM_GETVIEWKIND          (WM_USER + 226)\n#define EM_SETVIEWKIND          (WM_USER + 227)\n\n#define EM_GETPAGE              (WM_USER + 228)\n#define EM_SETPAGE              (WM_USER + 229)\n#define EM_GETHYPHENATEINFO     (WM_USER + 230)\n#define EM_SETHYPHENATEINFO     (WM_USER + 231)\n#define EM_GETPAGEROTATE        (WM_USER + 235)\n#define EM_SETPAGEROTATE        (WM_USER + 236)\n#define EM_GETCTFMODEBIAS       (WM_USER + 237)\n#define EM_SETCTFMODEBIAS       (WM_USER + 238)\n#define EM_GETCTFOPENSTATUS     (WM_USER + 240)\n#define EM_SETCTFOPENSTATUS     (WM_USER + 241)\n#define EM_GETIMECOMPTEXT       (WM_USER + 242)\n#define EM_ISIME                (WM_USER + 243)\n#define EM_GETIMEPROPERTY       (WM_USER + 244)\n#define EM_GETQUERYRTFOBJ       (WM_USER + 269)\n#define EM_SETQUERYRTFOBJ       (WM_USER + 270)\n\n/* New notifications */\n#define EN_MSGFILTER                    0x0700\n#define EN_REQUESTRESIZE                0x0701\n#define EN_SELCHANGE                    0x0702\n#define EN_DROPFILES                    0x0703\n#define EN_PROTECTED                    0x0704\n#define EN_CORRECTTEXT                  0x0705\n#define EN_STOPNOUNDO                   0x0706\n#define EN_IMECHANGE                    0x0707\n#define EN_SAVECLIPBOARD                0x0708\n#define EN_OLEOPFAILED                  0x0709\n#define EN_OBJECTPOSITIONS              0x070a\n#define EN_LINK\t\t\t\t0x070b\n#define EN_DRAGDROPDONE                 0x070c\n#define EN_PARAGRAPHEXPANDED\t\t0x070d\n#define EN_PAGECHANGE                   0x070e\n#define EN_LOWFIRTF                     0x070f\n#define EN_ALIGNLTR\t\t\t0x0710\n#define EN_ALIGNRTL\t\t\t0x0711\n#define EN_CLIPFORMAT                   0x0712\n#define EN_STARTCOMPOSITION             0x0713\n#define EN_ENDCOMPOSITION               0x0714\n\n\ntypedef DWORD (CALLBACK * EDITSTREAMCALLBACK)( DWORD_PTR, LPBYTE, LONG, LONG * );\n\n\n#define yHeightCharPtsMost    1638\n#define lDefaultTab           720\n\n/* tab stops number limit */\n#define MAX_TAB_STOPS         0x00000020\n\n#define MAX_TABLE_CELLS       63\n\n/* Rich edit control styles */\n#define ES_NOOLEDRAGDROP      0x00000008\n#define ES_DISABLENOSCROLL    0x00002000\n#define ES_SUNKEN             0x00004000\n#define ES_SAVESEL            0x00008000\n#define ES_SELFIME            0x00040000\n#define ES_NOIME              0x00080000\n#define ES_VERTICAL           0x00400000\n#define ES_SELECTIONBAR       0x01000000\n#define ES_EX_NOCALLOLEINIT   0x01000000\n\n/* the character formatting options */\n#define SCF_DEFAULT           0x00000000\n#define SCF_SELECTION         0x00000001\n#define SCF_WORD              0x00000002\n#define SCF_ALL               0x00000004\n#define SCF_USEUIRULES        0x00000008\n#define SCF_ASSOCIATEFONT     0x00000010\n#define SCF_NOKBUPDATE        0x00000020\n#define SCF_ASSOCIATEFONT2    0x00000040\n\n#ifndef WM_NOTIFY\ntypedef struct _nmhdr\n{\n    HWND       hwndFrom;\n    UINT       idFrom;\n    UINT       code;\n} NMHDR;\n#endif\n\n/* CHARFORMAT structure */\ntypedef struct _charformat\n{\n    UINT       cbSize;\n    DWORD      dwMask;\n    DWORD      dwEffects;\n    LONG       yHeight;\n    LONG       yOffset;\n    COLORREF   crTextColor;\n    BYTE       bCharSet;\n    BYTE       bPitchAndFamily;\n    char       szFaceName[LF_FACESIZE];\n} CHARFORMATA;\n\ntypedef struct _charformatw\n{\n    UINT       cbSize;\n    DWORD      dwMask;\n    DWORD      dwEffects;\n    LONG       yHeight;\n    LONG       yOffset;\n    COLORREF   crTextColor;\n    BYTE       bCharSet;\n    BYTE       bPitchAndFamily;\n    WCHAR      szFaceName[LF_FACESIZE];\n} CHARFORMATW;\n\nDECL_WINELIB_TYPE_AW(CHARFORMAT)\n\ntypedef struct _charformat2a {\n    UINT       cbSize;\n    DWORD      dwMask;\n    DWORD      dwEffects;\n    LONG       yHeight;\n    LONG       yOffset;\n    COLORREF   crTextColor;\n    BYTE       bCharSet;\n    BYTE       bPitchAndFamily;\n    char       szFaceName[LF_FACESIZE];\n    WORD       pad; /* Not in MS's C version, but needed to ensure that wWeight is at the correct offset to match the C++ version */\n    WORD       wWeight;\n    SHORT      sSpacing;\n    COLORREF   crBackColor;\n    LCID       lcid;\n    DWORD      dwReserved;\n    SHORT      sStyle;\n    WORD       wKerning;\n    BYTE       bUnderlineType;\n    BYTE       bAnimation;\n    BYTE       bRevAuthor;\n} CHARFORMAT2A;\n\ntypedef struct _charformat2w {\n    UINT       cbSize;\n    DWORD      dwMask;\n    DWORD      dwEffects;\n    LONG       yHeight;\n    LONG       yOffset;\n    COLORREF   crTextColor;\n    BYTE       bCharSet;\n    BYTE       bPitchAndFamily;\n    WCHAR      szFaceName[LF_FACESIZE];\n    WORD       pad; /* Not in MS's C version, but needed to ensure that wWeight is at the correct offset to match the C++ version */\n    WORD       wWeight;\n    SHORT      sSpacing;\n    COLORREF   crBackColor;\n    LCID       lcid;\n    DWORD      dwReserved;\n    SHORT      sStyle;\n    WORD       wKerning;\n    BYTE       bUnderlineType;\n    BYTE       bAnimation;\n    BYTE       bRevAuthor;\n} CHARFORMAT2W;\n\nDECL_WINELIB_TYPE_AW(CHARFORMAT2)\n\n#define CHARFORMATDELTA       (sizeof(CHARFORMAT2) - sizeof(CHARFORMAT))\n\n/* CHARFORMAT masks */\n#define CFM_BOLD              0x00000001\n#define CFM_ITALIC            0x00000002\n#define CFM_UNDERLINE         0x00000004\n#define CFM_STRIKEOUT         0x00000008\n#define CFM_PROTECTED         0x00000010\n#define CFM_LINK              0x00000020\n#define CFM_SMALLCAPS         0x00000040\n#define CFM_ALLCAPS           0x00000080\n#define CFM_HIDDEN            0x00000100\n#define CFM_OUTLINE           0x00000200\n#define CFM_SHADOW            0x00000400\n#define CFM_EMBOSS            0x00000800\n#define CFM_IMPRINT           0x00001000\n#define CFM_DISABLED          0x00002000\n#define CFM_REVISED           0x00004000\n#define CFM_REVAUTHOR         0x00008000\n#define CFM_SUBSCRIPT         0x00030000\n#define CFM_SUPERSCRIPT       0x00030000\n#define CFM_ANIMATION         0x00040000\n#define CFM_STYLE             0x00080000\n#define CFM_KERNING           0x00100000\n#define CFM_SPACING           0x00200000\n#define CFM_WEIGHT            0x00400000\n#define CFM_UNDERLINETYPE     0x00800000\n#define CFM_LCID              0x02000000\n#define CFM_BACKCOLOR         0x04000000\n#define CFM_CHARSET           0x08000000\n#define CFM_OFFSET            0x10000000\n#define CFM_FACE              0x20000000\n#define CFM_COLOR             0x40000000\n#define CFM_SIZE              0x80000000\n\n#define CFM_EFFECTS           (CFM_BOLD | \\\n                               CFM_ITALIC | \\\n                               CFM_UNDERLINE | \\\n                               CFM_COLOR | \\\n                               CFM_STRIKEOUT | \\\n                               CFE_PROTECTED | \\\n                               CFM_LINK)\n\n#define CFM_EFFECTS2          (CFM_EFFECTS | \\\n                               CFM_DISABLED | \\\n                               CFM_SMALLCAPS | \\\n                               CFM_ALLCAPS | \\\n                               CFM_HIDDEN | \\\n                               CFM_OUTLINE | \\\n                               CFM_SHADOW | \\\n                               CFM_EMBOSS | \\\n                               CFM_IMPRINT | \\\n                               CFM_DISABLED | \\\n                               CFM_REVISED | \\\n                               CFM_SUBSCRIPT | \\\n                               CFM_SUPERSCRIPT | \\\n                               CFM_BACKCOLOR)\n\n#define CFM_ALL               (CFM_EFFECTS | \\\n                               CFM_SIZE | \\\n                               CFM_FACE | \\\n                               CFM_OFFSET | \\\n                               CFM_CHARSET)\n\n#define CFM_ALL2              (CFM_ALL | \\\n                               CFM_EFFECTS2 | \\\n                               CFM_BACKCOLOR | \\\n                               CFM_LCID | \\\n                               CFM_UNDERLINETYPE | \\\n                               CFM_WEIGHT | \\\n                               CFM_REVAUTHOR | \\\n                               CFM_SPACING | \\\n                               CFM_KERNING | \\\n                               CFM_STYLE | \\\n                               CFM_ANIMATION)\n\n/* CHARFORMAT effects */\n#define CFE_BOLD              0x00000001\n#define CFE_ITALIC            0x00000002\n#define CFE_UNDERLINE         0x00000004\n#define CFE_STRIKEOUT         0x00000008\n#define CFE_PROTECTED         0x00000010\n#define CFE_LINK              0x00000020\n#define CFE_SUBSCRIPT         0x00010000\n#define CFE_SUPERSCRIPT       0x00020000\n#define CFE_AUTOCOLOR         0x40000000\n\n#define CFE_SMALLCAPS         CFM_SMALLCAPS\n#define CFE_ALLCAPS           CFM_ALLCAPS\n#define CFE_HIDDEN            CFM_HIDDEN\n#define CFE_OUTLINE           CFM_OUTLINE\n#define CFE_SHADOW            CFM_SHADOW\n#define CFE_EMBOSS            CFM_EMBOSS\n#define CFE_IMPRINT           CFM_IMPRINT\n#define CFE_DISABLED          CFM_DISABLED\n#define CFE_REVISED           CFM_REVISED\n#define CFE_AUTOBACKCOLOR     CFM_BACKCOLOR\n\n#define CFU_UNDERLINENONE             0x00\n#define CFU_UNDERLINE                 0x01\n#define CFU_UNDERLINEWORD             0x02\n#define CFU_UNDERLINEDOUBLE           0x03\n#define CFU_UNDERLINEDOTTED           0x04\n#define CFU_UNDERLINEDASH             0x05\n#define CFU_UNDERLINEDASHDOT          0x06\n#define CFU_UNDERLINEDASHDOTDOT       0x07\n#define CFU_UNDERLINEWAVE             0x08\n#define CFU_UNDERLINETHICK            0x09\n#define CFU_UNDERLINEHAIRLINE         0x0a\n#define CFU_UNDERLINEDOUBLEWAVE       0x0b\n#define CFU_UNDERLINEHEAVYWAVE        0x0c\n#define CFU_UNDERLINELONGDASH         0x0d\n#define CFU_UNDERLINETHICKDASH        0x0e\n#define CFU_UNDERLINETHICKDASHDOT     0x0f\n#define CFU_UNDERLINETHICKDASHDOTDOT  0x10\n#define CFU_UNDERLINETHICKDOTTED      0x11\n#define CFU_UNDERLINETHICKLONGDASH    0x12\n#define CFU_INVERT                    0xFE\n#define CFU_CF1UNDERLINE              0xFF\n\n/* ECO operations */\n#define ECOOP_SET             0x0001\n#define ECOOP_OR              0x0002\n#define ECOOP_AND             0x0003\n#define ECOOP_XOR             0x0004\n\n/* edit control options */\n#define ECO_AUTOWORDSELECTION 0x00000001\n#define ECO_AUTOVSCROLL       0x00000040\n#define ECO_AUTOHSCROLL       0x00000080\n#define ECO_NOHIDESEL         0x00000100\n#define ECO_READONLY          0x00000800\n#define ECO_WANTRETURN        0x00001000\n#define ECO_SAVESEL           0x00008000\n#define ECO_SELECTIONBAR      0x01000000\n#define ECO_VERTICAL          0x00400000\n\n/* Event notification masks */\n#define ENM_NONE              0x00000000\n#define ENM_CHANGE            0x00000001\n#define ENM_UPDATE            0x00000002\n#define ENM_SCROLL            0x00000004\n#define ENM_SCROLLEVENTS      0x00000008\n#define ENM_DRAGDROPDONE      0x00000010\n#define ENM_PARAGRAPHEXPANDED 0x00000020\n#define ENM_PAGECHANGE        0x00000040\n#define ENM_KEYEVENTS         0x00010000\n#define ENM_MOUSEEVENTS       0x00020000\n#define ENM_REQUESTRESIZE     0x00040000\n#define ENM_SELCHANGE         0x00080000\n#define ENM_DROPFILES         0x00100000\n#define ENM_PROTECTED         0x00200000\n#define ENM_CORRECTTEXT       0x00400000\n#define ENM_IMECHANGE         0x00800000\n#define ENM_LANGCHANGE        0x01000000\n#define ENM_OBJECTPOSITIONS   0x02000000\n#define ENM_LINK              0x04000000\n#define ENM_LOWFIRTF          0x08000000\n\ntypedef struct _bidioptions\n{\n    UINT    cbSize;\n    WORD    wMask;\n    WORD    wEffects;\n} BIDIOPTIONS;\n\n#ifndef __RICHEDIT_CHARRANGE_DEFINED\n#define __RICHEDIT_CHARRANGE_DEFINED\n\ntypedef struct _charrange\n{\n    LONG    cpMin;\n    LONG    cpMax;\n} CHARRANGE;\n\n#endif /* __RICHEDIT_CHARRANGE_DEFINED */\n\ntypedef struct _textrange\n{\n    CHARRANGE chrg;\n    LPSTR     lpstrText;\n} TEXTRANGEA;\n\ntypedef struct _textrangew\n{\n    CHARRANGE chrg;\n    LPWSTR     lpstrText;\n} TEXTRANGEW;\n\nDECL_WINELIB_TYPE_AW(TEXTRANGE)\n\ntypedef struct _editstream\n{\n    DWORD_PTR\t\tdwCookie;\n    DWORD\t\tdwError;\n    EDITSTREAMCALLBACK\tpfnCallback;\n} EDITSTREAM;\n\ntypedef struct _compcolor {\n    COLORREF   crText;\n    COLORREF   crBackground;\n    DWORD      dwEffects;\n} COMPCOLOR;\n\ntypedef struct _encorrecttext {\n    NMHDR      nmhdr;\n    CHARRANGE  chrg;\n    WORD       seltyp;\n} ENCORRECTTEXT;\n\ntypedef struct _endropfiles {\n    NMHDR      nmhdr;\n    HANDLE     hDrop;\n    LONG       cp;\n    BOOL       fProtected;\n} ENDROPFILES;\n\ntypedef struct _enlink {\n    NMHDR      nmhdr;\n    UINT       msg;\n    WPARAM     wParam;\n    LPARAM     lParam;\n    CHARRANGE  chrg;\n} ENLINK;\n\ntypedef struct _enlowfirtf {\n    NMHDR      nmhdr;\n    char       *szControl;\n} ENLOWFIRTF;\n\ntypedef struct {\n    NMHDR      nmhdr;\n    LONG       iob;\n    LONG       lOper;\n    HRESULT    hr;\n} ENOLEOPFAILED;\n\ntypedef struct _enprotected {\n    NMHDR      nmhdr;\n    UINT       msg;\n    WPARAM     wParam;\n    LPARAM     lParam;\n    CHARRANGE  chrg;\n} ENPROTECTED, *LPENPROTECTED;\n\ntypedef struct _ensaveclipboard {\n    NMHDR      nmhdr;\n    LONG       cObjectCount;\n    LONG       cch;\n} ENSAVECLIPBOARD;\n\ntypedef struct _findtextA {\n    CHARRANGE  chrg;\n    LPCSTR     lpstrText;\n} FINDTEXTA;\n\ntypedef struct _findtextW {\n    CHARRANGE  chrg;\n    LPCWSTR    lpstrText;\n} FINDTEXTW;\n\nDECL_WINELIB_TYPE_AW(FINDTEXT)\n\ntypedef struct _findtextexA {\n    CHARRANGE  chrg;\n    LPCSTR     lpstrText;\n    CHARRANGE  chrgText;\n} FINDTEXTEXA;\n\ntypedef struct _findtextexW {\n    CHARRANGE  chrg;\n    LPCWSTR    lpstrText;\n    CHARRANGE  chrgText;\n} FINDTEXTEXW;\n\nDECL_WINELIB_TYPE_AW(FINDTEXTEX)\n\ntypedef struct _formatrange {\n    HDC        hdc;\n    HDC        hdcTarget;\n    RECT       rc;\n    RECT       rcPage;\n    CHARRANGE  chrg;\n} FORMATRANGE;\n\ntypedef enum tagKHYPH\n{\n    khyphNil           = 0,\n    khyphNormal        = 1,\n    khyphAddBefore     = 2,\n    khyphChangeBefore  = 3,\n    khyphDeleteBefore  = 4,\n    khyphChangeAfter   = 5,\n    khyphDelAndChange  = 6\n} KHYPH;\n\ntypedef struct hyphresult\n{\n    KHYPH      khyph;\n    LONG       ichHyph;\n    WCHAR      chHyph;\n} HYPHRESULT;\n\ntypedef struct tagHyphenateInfo\n{\n    SHORT      cbSize;\n    SHORT      dxHyphenateZone;\n    void       (WINAPI* pfnHyphenate)(WCHAR*, LANGID, LONG, HYPHRESULT*);\n} HYPHENATEINFO;\n\ntypedef struct _msgfilter {\n    NMHDR      nmhdr;\n    UINT       msg;\n    WPARAM     wParam;\n    LPARAM     lParam;\n} MSGFILTER;\n\ntypedef struct _objectpositions {\n    NMHDR      nmhdr;\n    LONG       cObjectCount;\n    LONG       *pcpPositions;\n} OBJECTPOSITIONS;\n\ntypedef struct _paraformat {\n    UINT       cbSize;\n    DWORD      dwMask;\n    WORD       wNumbering;\n    WORD       wReserved;\n    LONG       dxStartIndent;\n    LONG       dxRightIndent;\n    LONG       dxOffset;\n    WORD       wAlignment;\n    SHORT      cTabCount;\n    LONG       rgxTabs[MAX_TAB_STOPS];\n} PARAFORMAT;\n\ntypedef struct _paraformat2 {\n    UINT       cbSize;\n    DWORD      dwMask;\n    WORD       wNumbering;\n    WORD       wEffects;\n    LONG       dxStartIndent;\n    LONG       dxRightIndent;\n    LONG       dxOffset;\n    WORD       wAlignment;\n    SHORT      cTabCount;\n    LONG       rgxTabs[MAX_TAB_STOPS];\n    LONG       dySpaceBefore, dySpaceAfter, dyLineSpacing;\n    SHORT      sStyle;\n    BYTE       bLineSpacingRule, bOutlineLevel;\n    WORD       wShadingWeight, wShadingStyle;\n    WORD       wNumberingStart, wNumberingStyle, wNumberingTab;\n    WORD       wBorderSpace, wBorderWidth, wBorders;\n} PARAFORMAT2;\n\ntypedef struct _selchange {\n    NMHDR      nmhdr;\n    CHARRANGE  chrg;\n    WORD       seltyp;\n} SELCHANGE;\n\ntypedef struct _reqresize {\n    NMHDR      nmhdr;\n    RECT       rc;\n} REQRESIZE;\n\ntypedef struct _repastespecial {\n    DWORD      dwAspect;\n    DWORD_PTR  dwParam;\n} REPASTESPECIAL;\n\ntypedef struct _punctuation {\n    UINT       iSize;\n    LPSTR      szPunctuation;\n} PUNCTUATION;\n\ntypedef struct _gettextex {\n    DWORD      cb;\n    DWORD      flags;\n    UINT       codepage;\n    LPCSTR     lpDefaultChar;\n    LPBOOL     lpUsedDefChar;\n} GETTEXTEX;\n\ntypedef struct _imecomptext {\n    LONG       cb;\n    DWORD      flags;\n} IMECOMPTEXT;\n\nvoid WINAPI HyphenateProc(WCHAR*, LANGID, LONG, HYPHRESULT*);\n\n#define SF_TEXT\t\t      0x00000001\n#define SF_RTF\t\t      0x00000002\n#define SF_RTFNOOBJS\t      0x00000003\n#define SF_TEXTIZED\t      0x00000004\n#define SF_UNICODE            0x00000010\n#define SF_USECODEPAGE        0x00000020\n#define SF_NCRFORNONASCII     0x00000040\n#define SF_RTFVAL             0x00000700\n\n/* BIDIOPTIONS.wMask flag values */\n#define BOM_DEFPARADIR        0x00000001\n#define BOM_PLAINTEXT         0x00000002\n#define BOM_NEUTRALOVERRIDE   0x00000004\n#define BOM_CONTEXTREADING    0x00000008\n#define BOM_CONTEXTALIGNMENT  0x00000010\n#define BOM_LEGACYBIDICLASS   0x00000040\n\n/* BIDIOPTIONS.wEffects flag values */\n#define BOE_RTLDIR            0x00000001\n#define BOE_PLAINTEXT         0x00000002\n#define BOE_NEUTRALOVERRIDE   0x00000004\n#define BOE_CONTEXTREADING    0x00000008\n#define BOE_CONTEXTALIGNMENT  0x00000010\n#define BOE_LEGACYBIDICLASS   0x00000040\n\n/* Clipboard formats */\n#define CF_RTF          TEXT(\"Rich Text Format\")\n#define CF_RTFNOOBJS    TEXT(\"Rich Text Format Without Objects\")\n#define CF_RETEXTOBJ    TEXT(\"RichEdit Text and Objects\")\n\n/* Mode bias wParam values for EM_SETCTFMODEBIAS message */\n#define CTFMODEBIAS_DEFAULT                0x00000000\n#define CTFMODEBIAS_FILENAME               0x00000001\n#define CTFMODEBIAS_NAME                   0x00000002\n#define CTFMODEBIAS_READING                0x00000003\n#define CTFMODEBIAS_DATETIME               0x00000004\n#define CTFMODEBIAS_CONVERSATION           0x00000005\n#define CTFMODEBIAS_NUMERIC                0x00000006\n#define CTFMODEBIAS_HIRAGANA               0x00000007\n#define CTFMODEBIAS_KATAKANA               0x00000008\n#define CTFMODEBIAS_HANGUL                 0x00000009\n#define CTFMODEBIAS_HALFWIDTHKATAKANA      0x0000000a\n#define CTFMODEBIAS_FULLWIDTHALPHANUMERIC  0x0000000b\n#define CTFMODEBIAS_HALFWIDTHALPHANUMERIC  0x0000000c\n\n#define EMO_EXIT              0x00000000\n#define EMO_ENTER             0x00000001\n#define EMO_PROMOTE           0x00000002\n#define EMO_EXPAND            0x00000003\n#define EMO_MOVESELECTION     0x00000004\n#define EMO_GETVIEWMODE       0x00000005\n\n#define EMO_EXPANDSELECTION   0x00000000\n#define EMO_EXPANDDOCUMENT    0x00000001\n\n/* Page Rotate values used in wParam of EM_SETPAGEROTATE message */\n#define EPR_0                 0x00000000\n#define EPR_270               0x00000001\n#define EPR_180               0x00000002\n#define EPR_90                0x00000003\n\n/* Find flags for wParam of EM_FINDTEXT message */\n#define FR_MATCHDIAC          0x20000000\n#define FR_MATCHKASHIDA       0x40000000\n#define FR_MATCHALEFHAMZA     0x80000000\n\n/* IME Compatibility Mode return values for EM_GETIMECOMPMODE message */\n#define ICM_NOTOPEN           0x00000000\n#define ICM_LEVEL3            0x00000001\n#define ICM_LEVEL2            0x00000002\n#define ICM_LEVEL2_5          0x00000003\n#define ICM_LEVEL2_SUI        0x00000004\n#define ICM_CTF               0x00000005\n\n/* Flags value for IMECOMPTEXT structure */\n#define ICT_RESULTREADSTR     0x00000001\n\n/* Input Method Flags used in EM_SETLANGOPTIONS message */\n#define IMF_AUTOKEYBOARD        0x00000001\n#define IMF_AUTOFONT            0x00000002\n#define IMF_IMECANCELCOMPLETE   0x00000004\n#define IMF_IMEALWAYSSENDNOTIFY 0x00000008\n#define IMF_AUTOFONTSIZEADJUST  0x00000010\n#define IMF_UIFONTS             0x00000020\n#define IMF_DUALFONT            0x00000080\n\n/* Parameters values for the EM_SETIMEMODEBIAS message */\n#define IMF_SMODE_PLAURALCLAUSE 0x00000001\n#define IMF_SMODE_NONE          0x00000002\n\n/* Parameters of the EM_SETIMEOPTIONS message */\n#define IMF_FORCENONE         0x00000001\n#define IMF_FORCEENABLE       0x00000002\n#define IMF_FORCEDISABLE      0x00000004\n#define IMF_CLOSESTATUSWINDOW 0x00000008\n#define IMF_VERTICAL          0x00000020\n#define IMF_FORCEACTIVE       0x00000040\n#define IMF_FORCEINACTIVE     0x00000080\n#define IMF_FORCEREMEMBER     0x00000100\n#define IMF_MULTIPLEEDIT      0x00000400\n\n/* return values of the EM_SELECTION_TYPE message */\n#define SEL_EMPTY             0x00000000\n#define SEL_TEXT              0x00000001\n#define SEL_OBJECT            0x00000002\n#define SEL_MULTICHAR         0x00000004\n#define SEL_MULTIOBJECT       0x00000008\n\n/* ENOLEOPFAILED.lOper value that indicates operation failure */\n#define OLEOP_DOVERB          0x00000001\n\n/* punctionation type values for wParam of EM_SETPUNCTUATION message */\n#define PC_FOLLOWING          0x00000001\n#define PC_LEADING            0x00000002\n#define PC_OVERFLOW           0x00000003\n#define PC_DELIMITER          0x00000004\n\n/* mask values in the PARAFORMAT structure */\n#define PFM_STARTINDENT       0x00000001\n#define PFM_RIGHTINDENT       0x00000002\n#define PFM_OFFSET            0x00000004\n#define PFM_ALIGNMENT         0x00000008\n#define PFM_TABSTOPS          0x00000010\n#define PFM_NUMBERING         0x00000020\n#define PFM_OFFSETINDENT      0x80000000\n\n/* mask values in the PARAFORMAT2 structure */\n#define PFM_SPACEBEFORE       0x00000040\n#define PFM_SPACEAFTER        0x00000080\n#define PFM_LINESPACING       0x00000100\n#define PFM_STYLE             0x00000400\n#define PFM_BORDER            0x00000800\n#define PFM_SHADING           0x00001000\n#define PFM_NUMBERINGSTYLE    0x00002000\n#define PFM_NUMBERINGTAB      0x00004000\n#define PFM_NUMBERINGSTART    0x00008000\n#define PFM_RTLPARA           0x00010000\n#define PFM_KEEP              0x00020000\n#define PFM_KEEPNEXT          0x00040000\n#define PFM_PAGEBREAKBEFORE   0x00080000\n#define PFM_NOLINENUMBER      0x00100000\n#define PFM_NOWIDOWCONTROL    0x00200000\n#define PFM_DONOTHYPHEN       0x00400000\n#define PFM_SIDEBYSIDE        0x00800000\n#define PFM_COLLAPSED         0x01000000\n#define PFM_OUTLINELEVEL      0x02000000\n#define PFM_BOX               0x04000000\n#define PFM_RESERVED2         0x08000000\n#define PFM_TABLEROWDELIMITER 0x10000000\n#define PFM_TEXTWRAPPINGBREAK 0x20000000\n#define PFM_TABLE             0x40000000\n\n#define PFM_ALL               (PFM_STARTINDENT | \\\n                               PFM_RIGHTINDENT | \\\n                               PFM_OFFSET | \\\n                               PFM_ALIGNMENT | \\\n                               PFM_TABSTOPS | \\\n                               PFM_NUMBERING | \\\n                               PFM_OFFSETINDENT | \\\n                               PFM_RTLPARA)\n\n#define PFM_EFFECTS           (PFM_RTLPARA | \\\n                               PFM_KEEP | \\\n                               PFM_KEEPNEXT | \\\n                               PFM_PAGEBREAKBEFORE | \\\n                               PFM_NOLINENUMBER | \\\n                               PFM_NOWIDOWCONTROL | \\\n                               PFM_DONOTHYPHEN | \\\n                               PFM_SIDEBYSIDE | \\\n                               PFM_TABLEROWDELIMITER | \\\n                               PFM_TABLE)\n\n#define PFM_ALL2              (PFM_ALL | \\\n                               PFM_EFFECTS | \\\n                               PFM_SPACEBEFORE | \\\n                               PFM_SPACEAFTER | \\\n                               PFM_LINESPACING | \\\n                               PFM_STYLE | \\\n                               PFM_BORDER | \\\n                               PFM_SHADING | \\\n                               PFM_NUMBERINGSTYLE | \\\n                               PFM_NUMBERINGTAB | \\\n                               PFM_NUMBERINGSTART)\n\n/* numbering option */\n#define PFN_BULLET            0x00000001\n#define PFN_ARABIC            0x00000002\n#define PFN_LCLETTER          0x00000003\n#define PFN_UCLETTER          0x00000004\n#define PFN_LCROMAN           0x00000005\n#define PFN_UCROMAN           0x00000006\n\n/* paragraph format numbering styles */\n#define PFNS_PAREN            0x00000000\n#define PFNS_PARENS           0x00000100\n#define PFNS_PERIOD           0x00000200\n#define PFNS_PLAIN            0x00000300\n#define PFNS_NONUMBER         0x00000400\n#define PFNS_NEWNUMBER        0x00008000\n\n/* paragraph alignment */\n#define PFA_LEFT              0x00000001\n#define PFA_RIGHT             0x00000002\n#define PFA_CENTER            0x00000003\n#define PFA_JUSTIFY           0x00000004\n#define PFA_FULL_INTERWORD    0x00000004\n#define PFA_FULL_INTERLETTER  0x00000005\n#define PFA_FULL_SCALED       0x00000006\n#define PFA_FULL_GLYPHS       0x00000007\n#define PFA_SNAP_GRID         0x00000008\n\n/* paragraph effects */\n#define PFE_RTLPARA           0x00000001\n#define PFE_KEEP              0x00000002\n#define PFE_KEEPNEXT          0x00000004\n#define PFE_PAGEBREAKBEFORE   0x00000008\n#define PFE_NOLINENUMBER      0x00000010\n#define PFE_NOWIDOWCONTROL    0x00000020\n#define PFE_DONOTHYPHEN       0x00000040\n#define PFE_SIDEBYSIDE        0x00000080\n#define PFE_COLLAPSED         0x00000100\n#define PFE_BOX               0x00000400\n#define PFE_TABLEROWDELIMITER 0x00001000\n#define PFE_TEXTWRAPPINGBREAK 0x00002000\n#define PFE_TABLE             0x00004000\n\n/* Set Edit Style flags for EM_SETEDITSTYLE message */\n#define SES_EMULATESYSEDIT      0x00000001\n#define SES_BEEPONMAXTEXT       0x00000002\n#define SES_EXTENDBACKCOLOR     0x00000004\n#define SES_MAPCPS              0x00000008\n#define SES_EMULATE10           0x00000010\n#define SES_USECRLF             0x00000020\n#define SES_NOXLTSYMBOLRANGE    0x00000020\n#define SES_USEAIMM             0x00000040\n#define SES_NOIME               0x00000080\n#define SES_ALLOWBEEPS          0x00000100\n#define SES_UPPERCASE           0x00000200\n#define SES_LOWERCASE           0x00000400\n#define SES_NOINPUTSEQUENCECHK  0x00000800\n#define SES_BIDI                0x00001000\n#define SES_SCROLLONKILLFOCUS   0x00002000\n#define SES_XLTCRCRLFTOCR       0x00004000\n#define SES_DRAFTMODE           0x00008000\n#define SES_USECTF              0x00010000\n#define SES_HIDEGRIDLINES       0x00020000\n#define SES_USEATFONT           0x00040000\n#define SES_CUSTOMLOOK          0x00080000\n#define SES_LBSCROLLNOTIFY      0x00100000\n#define SES_CTFALLOWEMBED       0x00200000\n#define SES_CTFALLOWSMARTTAG    0x00400000\n#define SES_CTFALLOWPROOFING    0x00800000\n\n/* streaming flags */\n#define SFF_WRITEXTRAPAR      0x00000080\n#define SFF_PWD               0x00000800\n#define SFF_KEEPDOCINFO       0x00001000\n#define SFF_PERSISTVIEWSCALE  0x00002000\n#define SFF_PLAINRTF          0x00004000\n#define SFF_SELECTION         0x00008000\n\ntypedef enum _undonameid\n{\n    UID_UNKNOWN     = 0,\n    UID_TYPING      = 1,\n    UID_DELETE      = 2,\n    UID_DRAGDROP    = 3,\n    UID_CUT         = 4,\n    UID_PASTE       = 5,\n    UID_AUTOCORRECT = 6\n} UNDONAMEID;\n\ntypedef LONG (*EDITWORDBREAKPROCEX)(char*,LONG,BYTE,INT);\n\n#define VM_OUTLINE            0x00000002\n#define VM_NORMAL             0x00000004\n#define VM_PAGE               0x00000009\n\n/* options of the EM_FINDWORDBREAK message */\n#define WB_CLASSIFY           0x00000003\n#define WB_MOVEWORDLEFT       0x00000004\n#define WB_MOVEWORDPREV       0x00000004\n#define WB_MOVEWORDRIGHT      0x00000005\n#define WB_MOVEWORDNEXT       0x00000005\n#define WB_LEFTBREAK          0x00000006\n#define WB_PREVBREAK          0x00000006\n#define WB_RIGHTBREAK         0x00000007\n#define WB_NEXTBREAK          0x00000007\n\n/* options of the EM_SETWORDWRAPMODE message */\n#define WBF_WORDWRAP          0x00000010\n#define WBF_WORDBREAK         0x00000020\n#define WBF_OVERFLOW          0x00000040\n#define WBF_LEVEL1            0x00000080\n#define WBF_LEVEL2            0x00000100\n#define WBF_CUSTOM            0x00000200\n\n#define WBF_CLASS             ((BYTE) 0x0F)\n#define WBF_ISWHITE           ((BYTE) 0x10)\n#define WBF_BREAKLINE         ((BYTE) 0x20)\n#define WBF_BREAKAFTER        ((BYTE) 0x40)\n\n/* Placeholder unicode character for an embedded object */\n#ifndef WCH_EMBEDDING\n#define WCH_EMBEDDING         (WCHAR)0xFFFC\n#endif\n\n/* options of the EM_SETTEXTMODE message */\n#define TM_PLAINTEXT          0x00000001\n#define TM_RICHTEXT           0x00000002\n#define TM_SINGLELEVELUNDO    0x00000004\n#define TM_MULTILEVELUNDO     0x00000008\n#define TM_SINGLECODEPAGE     0x00000010\n#define TM_MULTICODEPAGE      0x00000020\n\n/* GETTEXTEX structure flags */\n#define GT_DEFAULT            0x00000000\n#define GT_USECRLF            0x00000001\n#define GT_SELECTION          0x00000002\n#define GT_RAWTEXT            0x00000004\n#define GT_NOHIDDENTEXT       0x00000008\n\n/* Options of the EM_SETTYPOGRAPHYOPTIONS message */\n#define TO_ADVANCEDTYPOGRAPHY   0x00000001\n#define TO_SIMPLELINEBREAK      0x00000002\n#define TO_DISABLECUSTOMTEXTOUT 0x00000004\n#define TO_ADVANCEDLAYOUT       0x00000008\n\ntypedef struct _gettextlengthex {\n    DWORD      flags;\n    UINT       codepage;\n} GETTEXTLENGTHEX;\n\n/* Flags of the GETTEXTLENGTHEX structure */\n#define GTL_DEFAULT           0x00000000\n#define GTL_USECRLF           0x00000001\n#define GTL_PRECISE           0x00000002\n#define GTL_CLOSE             0x00000004\n#define GTL_NUMCHARS          0x00000008\n#define GTL_NUMBYTES          0x00000010\n\n#define GCM_RIGHTMOUSEDROP    0x8000\n\n/* Options of the EM_SETTEXTEX message */\ntypedef struct _settextex {\n    DWORD\tflags;\n    UINT\tcodepage;\n} SETTEXTEX;\n\n/* Flags of the EM_SETTEXTEX message */\n#define ST_DEFAULT\t      0x00000000\t\n#define ST_KEEPUNDO           0x00000001\n#define ST_SELECTION          0x00000002\n#define ST_NEWCHARS           0x00000004\n#define ST_UNICODE            0x00000008\n\n/* Flags for EM_AUTOURLDETECT message */\n#define AURL_ENABLEURL            0x00000001\n#define AURL_ENABLEMAILADDR       0x00000002\n#define AURL_ENABLETELNO          0x00000004\n#define AURL_ENABLEEAURLS         0x00000008\n#define AURL_ENABLEDRIVELETTERS   0x00000010\n#define AURL_DISABLEMIXEDLGC      0x00000020\n\n#ifdef __cplusplus\n}\n#endif\n\n#include <poppack.h>\n\n#endif /* __WINE_RICHEDIT_H */\n"
  },
  {
    "path": "wine/windows/richole.idl",
    "content": "/*\n * Copyright (C) 2002 Andriy Palamarchuk\n * Copyright (C) 2004 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\ncpp_quote(\"#if 0\")  /* not included on Windows */\nimport \"oleidl.idl\";\ncpp_quote(\"#endif\")\n\n/* REOBJECT structure flags */\ncpp_quote(\"#define REO_GETOBJ_NO_INTERFACES        0x00000000\")\ncpp_quote(\"#define REO_GETOBJ_POLEOBJ              0x00000001\")\ncpp_quote(\"#define REO_GETOBJ_PSTG                 0x00000002\")\ncpp_quote(\"#define REO_GETOBJ_POLESITE             0x00000004\")\ncpp_quote(\"#define REO_GETOBJ_ALL_INTERFACES       0x00000007\")\ncpp_quote(\"#define REO_CP_SELECTION                0xFFFFFFFF\")\ncpp_quote(\"#define REO_IOB_SELECTION               0xFFFFFFFF\")\ncpp_quote(\"#define REO_IOB_USE_CP                  0xFFFFFFFE\")\ncpp_quote(\"#define REO_NULL                        0x00000000\")\ncpp_quote(\"#define REO_READWRITEMASK               0x0000003F\")\ncpp_quote(\"#define REO_DONTNEEDPALETTE             0x00000020\")\ncpp_quote(\"#define REO_BLANK                       0x00000010\")\ncpp_quote(\"#define REO_DYNAMICSIZE                 0x00000008\")\ncpp_quote(\"#define REO_INVERTEDSELECT              0x00000004\")\ncpp_quote(\"#define REO_BELOWBASELINE               0x00000002\")\ncpp_quote(\"#define REO_RESIZABLE                   0x00000001\")\ncpp_quote(\"#define REO_LINK                        0x80000000\")\ncpp_quote(\"#define REO_STATIC                      0x40000000\")\ncpp_quote(\"#define REO_SELECTED                    0x08000000\")\ncpp_quote(\"#define REO_OPEN                        0x04000000\")\ncpp_quote(\"#define REO_INPLACEACTIVE               0x02000000\")\ncpp_quote(\"#define REO_HILITED                     0x01000000\")\ncpp_quote(\"#define REO_LINKAVAILABLE               0x00800000\")\ncpp_quote(\"#define REO_GETMETAFILE                 0x00400000\")\n\n/* clipboard operation flags */\ncpp_quote(\"#define RECO_PASTE            0x00000000\")\ncpp_quote(\"#define RECO_DROP             0x00000001\")\ncpp_quote(\"#define RECO_COPY             0x00000002\")\ncpp_quote(\"#define RECO_CUT              0x00000003\")\ncpp_quote(\"#define RECO_DRAG             0x00000004\")\n\ntypedef struct _reobject {\n    DWORD cbStruct;\n    LONG cp;\n    CLSID clsid;\n    LPOLEOBJECT poleobj;\n    LPSTORAGE pstg;\n    LPOLECLIENTSITE polesite;\n    SIZEL sizel;\n    DWORD dvaspect;\n    DWORD dwFlags;\n    DWORD dwUser;\n} REOBJECT;\n\ncpp_quote(\"#ifndef __RICHEDIT_CHARRANGE_DEFINED\")\ncpp_quote(\"#define __RICHEDIT_CHARRANGE_DEFINED\")\n\ntypedef struct _charrange\n{\n    LONG cpMin;\n    LONG cpMax;\n} CHARRANGE;\n\ncpp_quote(\"#endif /* __RICHEDIT_CHARRANGE_DEFINED */\")\n\n/*****************************************************************************\n * IRichEditOle\n */\n[\n  object,\n  uuid(00020d00-0000-0000-c000-000000000046),\n  pointer_default(unique)\n]\ninterface IRichEditOle : IUnknown\n{\n    typedef [unique] IRichEditOle *LPRICHEDITOLE;\n\n    HRESULT GetClientSite(LPOLECLIENTSITE *lplpolesite);\n    HRESULT GetObjectCount();\n    HRESULT GetLinkCount();\n    HRESULT GetObject(LONG iob, REOBJECT *lpreobject, DWORD dwFlags);\n    HRESULT InsertObject(REOBJECT *lpreobject);\n    HRESULT ConvertObject(LONG iob, REFCLSID rclsidNew, LPCSTR lpstrUserTypeNew);\n    HRESULT ActivateAs(REFCLSID rclsid, REFCLSID rclsidAs);\n    HRESULT SetHostNames(LPCSTR lpstrContainerApp, LPCSTR lpstrContainerObj);\n    HRESULT SetLinkAvailable(LONG iob, BOOL fAvailable);\n    HRESULT SetDvaspect(LONG iob, DWORD dvaspect);\n    HRESULT HandsOffStorage(LONG iob);\n    HRESULT SaveCompleted(LONG iob, LPSTORAGE lpstg);\n    HRESULT InPlaceDeactivate();\n    HRESULT ContextSensitiveHelp(BOOL fEnterMode);\n    HRESULT GetClipboardData(CHARRANGE* lpchrg, DWORD reco, LPDATAOBJECT *lplpdataobj);\n    HRESULT ImportDataObject(LPDATAOBJECT lpdataobj, CLIPFORMAT cf, HGLOBAL hMetaPict);\n}\n\n/*****************************************************************************\n * IRichEditOleCallback\n */\n[\n  object,\n  uuid(00020d03-0000-0000-c000-000000000046),\n  pointer_default(unique)\n]\ninterface IRichEditOleCallback : IUnknown\n{\n    typedef [unique] IRichEditOleCallback *LPRICHEDITOLECALLBACK;\n\n    HRESULT GetNewStorage(LPSTORAGE *lplpstg);\n    HRESULT GetInPlaceContext(LPOLEINPLACEFRAME *lplpFrame, LPOLEINPLACEUIWINDOW *lplpDoc, LPOLEINPLACEFRAMEINFO lpFrameInfo);\n    HRESULT ShowContainerUI(BOOL fShow);\n    HRESULT QueryInsertObject(LPCLSID lpclsid, LPSTORAGE lpstg, LONG cp);\n    HRESULT DeleteObject(LPOLEOBJECT lpoleobj);\n    HRESULT QueryAcceptData(LPDATAOBJECT lpdataobj, CLIPFORMAT *lpcfFormat, DWORD reco, BOOL fReally, HGLOBAL hMetaPict);\n    HRESULT ContextSensitiveHelp(BOOL fEnterMode);\n    HRESULT GetClipboardData(CHARRANGE *lpchrg, DWORD reco, LPDATAOBJECT *lplpdataobj);\n    HRESULT GetDragDropEffect(BOOL fDrag, DWORD grfKeyState, LPDWORD pdwEffect);\n    HRESULT GetContextMenu(WORD seltype, LPOLEOBJECT lpoleobj, CHARRANGE *lpchrg, HMENU *lphmenu);\n}\n"
  },
  {
    "path": "wine/windows/rmxfguid.h",
    "content": "/*\n * Copyright (C) 2007 Patrik Stridvall\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_RMXFGUID_H\n#define __WINE_RMXFGUID_H\n\n/*****************************************************************************\n * Define GUIDs\n */\n\nDEFINE_GUID(TID_D3DRMAnimation,             0x3d82ab4f, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);\n\nDEFINE_GUID(TID_D3DRMAnimationKey,          0x10dd46a8, 0x775b, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMAnimationOptions,      0xe2bf56c0, 0x840f, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMAnimationSet,          0x3d82ab50, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);\n\nDEFINE_GUID(TID_D3DRMAppData,               0xe5745280, 0xb24f, 0x11cf, 0x9d, 0xd5, 0x00, 0xaa, 0x00, 0xa7, 0x1a, 0x2f);\n\nDEFINE_GUID(TID_D3DRMBoolean,               0x537da6a0, 0xca37, 0x11d0, 0x94, 0x1c, 0x00, 0x80, 0xc8, 0x0c, 0xfa, 0x7b);\n\nDEFINE_GUID(TID_D3DRMBoolean2d,             0x4885ae63, 0x78e8, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMCamera,                0x3d82ab51, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);\n\nDEFINE_GUID(TID_D3DRMColorRGB,              0xd3e16e81, 0x7835, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMColorRGBA,             0x35ff44e0, 0x6c7c, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMCoords2d,              0xf6f23f44, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMExternalVisual,        0x98116aa0, 0xbdba, 0x11d1, 0x82, 0xc0, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x71);\n\nDEFINE_GUID(TID_D3DRMFloatKeys,             0x10dd46a9, 0x775b, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMFrame,                 0x3d82ab46, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);\n\nDEFINE_GUID(TID_D3DRMFramePosition,         0xe2bf56c1, 0x840f, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMFrameRotation,         0xe2bf56c3, 0x840f, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMFrameTransformMatrix,  0xf6f23f41, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMFrameVelocity,         0xe2bf56c2, 0x840f, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMGuid,                  0xa42790e0, 0x7810, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMIndexedColor,          0x1630b820, 0x7842, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMInfo,                  0x2b957100, 0x9e9a, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);\n\nDEFINE_GUID(TID_D3DRMInlineData,            0x3a23eea0, 0x94b1, 0x11d0, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);\n\nDEFINE_GUID(TID_D3DRMLight,                 0x3d82ab4a, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);\n\nDEFINE_GUID(TID_D3DRMLightAttenuation,      0xa8a98ba0, 0xc5e5, 0x11cf, 0xb9, 0x41, 0x00, 0x80, 0xc8, 0x0c, 0xfa, 0x7b);\n\nDEFINE_GUID(TID_D3DRMLightPenumbra,         0xaed22741, 0xb31f, 0x11cf, 0x9d, 0xd5, 0x00, 0xaa, 0x00, 0xa7, 0x1a, 0x2f);\n\nDEFINE_GUID(TID_D3DRMLightRange,            0xaed22742, 0xb31f, 0x11cf, 0x9d, 0xd5, 0x00, 0xaa, 0x00, 0xa7, 0x1a, 0x2f);\n\nDEFINE_GUID(TID_D3DRMLightUmbra,            0xaed22740, 0xb31f, 0x11cf, 0x9d, 0xd5, 0x00, 0xaa, 0x00, 0xa7, 0x1a, 0x2f);\n\nDEFINE_GUID(TID_D3DRMMaterial,              0x3d82ab4d, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);\n\nDEFINE_GUID(TID_D3DRMMaterialAmbientColor,  0x01411840, 0x7786, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMMaterialArray,         0x35ff44e1, 0x6c7c, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMMaterialDiffuseColor,  0x01411841, 0x7786, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMMaterialEmissiveColor, 0xd3e16e80, 0x7835, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMMaterialPower,         0x01411843, 0x7786, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMMaterialSpecularColor, 0x01411842, 0x7786, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMMaterialWrap,          0x4885ae60, 0x78e8, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMMatrix4x4,             0xf6f23f45, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMMesh,                  0x3d82ab44, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);\n\nDEFINE_GUID(TID_D3DRMMeshFace,              0x3d82ab5f, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);\n\nDEFINE_GUID(TID_D3DRMMeshFaceWraps,         0xed1ec5c0, 0xc0a8, 0x11d0, 0x94, 0x1c, 0x00, 0x80, 0xc8, 0x0c, 0xfa, 0x7b);\n\nDEFINE_GUID(TID_D3DRMMeshMaterialList,      0xf6f23f42, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMMeshNormals,           0xf6f23f43, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMMeshTextureCoords,     0xf6f23f40, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMMeshVertexColors,      0x1630b821, 0x7842, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMProgressiveMesh,       0x8a63c360, 0x997d, 0x11d0, 0x94, 0x1c, 0x00, 0x80, 0xc8, 0x0c, 0xfa, 0x7b);\n\nDEFINE_GUID(TID_D3DRMPropertyBag,           0x7f0f21e1, 0xbfe1, 0x11d1, 0x82, 0xc0, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x71);\n\nDEFINE_GUID(TID_D3DRMRightHanded,           0x7f5d5ea0, 0xd53a, 0x11d1, 0x82, 0xc0, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x71);\n\nDEFINE_GUID(TID_D3DRMStringProperty,        0x7f0f21e0, 0xbfe1, 0x11d1, 0x82, 0xc0, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x71);\n\nDEFINE_GUID(TID_D3DRMTextureFilename,       0xa42790e1, 0x7810, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMTextureReference,      0xa42790e2, 0x7810, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMTimedFloatKeys,        0xf406b180, 0x7b3b, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);\n\nDEFINE_GUID(TID_D3DRMUrl,                   0x3a23eea1, 0x94b1, 0x11d0, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);\n\nDEFINE_GUID(TID_D3DRMVector,                0x3d82ab5e, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);\n\n#endif /* __WINE_RMXFGUID_H */\n"
  },
  {
    "path": "wine/windows/rmxftmpl.x",
    "content": "xof 0302txt 0064\n// Copyright (C) 2011 Dylan Smith\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 2.1 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n\n#pragma xftmpl name D3DRM_XTEMPLATES\n#pragma xftmpl size D3DRM_XTEMPLATE_BYTES\n#pragma makedep install\n\ntemplate Header\n{\n    <3D82AB43-62DA-11CF-AB39-0020AF71E433>\n    WORD major;\n    WORD minor;\n    DWORD flags;\n}\n\ntemplate Vector\n{\n    <3D82AB5E-62DA-11CF-AB39-0020AF71E433>\n    FLOAT x;\n    FLOAT y;\n    FLOAT z;\n}\n\ntemplate Coords2d\n{\n    <F6F23F44-7686-11CF-8F52-0040333594A3>\n    FLOAT u;\n    FLOAT v;\n}\n\ntemplate Matrix4x4\n{\n    <F6F23F45-7686-11CF-8F52-0040333594A3>\n    array FLOAT matrix[16];\n}\n\ntemplate ColorRGBA\n{\n    <35FF44E0-6C7C-11CF-8F52-0040333594A3>\n    FLOAT red;\n    FLOAT green;\n    FLOAT blue;\n    FLOAT alpha;\n}\n\ntemplate ColorRGB\n{\n    <D3E16E81-7835-11CF-8F52-0040333594A3>\n    FLOAT red;\n    FLOAT green;\n    FLOAT blue;\n}\n\ntemplate IndexedColor\n{\n    <1630B820-7842-11CF-8F52-0040333594A3>\n    DWORD index;\n    ColorRGBA indexColor;\n}\n\ntemplate Boolean\n{\n    <537DA6A0-CA37-11D0-941C-0080C80CFA7B>\n    DWORD truefalse;\n}\n\ntemplate Boolean2d\n{\n    <4885AE63-78E8-11CF-8F52-0040333594A3>\n    Boolean u;\n    Boolean v;\n}\n\ntemplate MaterialWrap\n{\n    <4885AE60-78E8-11CF-8F52-0040333594A3>\n    Boolean u;\n    Boolean v;\n}\n\ntemplate TextureFilename\n{\n    <A42790E1-7810-11CF-8F52-0040333594A3>\n    STRING filename;\n}\n\ntemplate Material\n{\n    <3D82AB4D-62DA-11CF-AB39-0020AF71E433>\n    ColorRGBA faceColor;\n    FLOAT power;\n    ColorRGB specularColor;\n    ColorRGB emissiveColor;\n    [ ... ]\n}\n\ntemplate MeshFace\n{\n    <3D82AB5F-62DA-11CF-AB39-0020AF71E433>\n    DWORD nFaceVertexIndices;\n    array DWORD faceVertexIndices[nFaceVertexIndices];\n}\n\ntemplate MeshFaceWraps\n{\n    <ED1EC5C0-C0A8-11D0-941C-0080C80CFA7B>\n    DWORD nFaceWrapValues;\n    array Boolean2d faceWrapValues[nFaceWrapValues];\n}\n\ntemplate MeshTextureCoords\n{\n    <F6F23F40-7686-11CF-8F52-0040333594A3>\n    DWORD nTextureCoords;\n    array Coords2d textureCoords[nTextureCoords];\n}\n\ntemplate MeshMaterialList\n{\n    <F6F23F42-7686-11CF-8F52-0040333594A3>\n    DWORD nMaterials;\n    DWORD nFaceIndexes;\n    array DWORD faceIndexes[nFaceIndexes];\n    [ Material ]\n}\n\ntemplate MeshNormals\n{\n    <F6F23F43-7686-11CF-8F52-0040333594A3>\n    DWORD nNormals;\n    array Vector normals[nNormals];\n    DWORD nFaceNormals;\n    array MeshFace faceNormals[nFaceNormals];\n}\n\ntemplate MeshVertexColors\n{\n    <1630B821-7842-11CF-8F52-0040333594A3>\n    DWORD nVertexColors;\n    array IndexedColor vertexColors[nVertexColors];\n}\n\ntemplate Mesh\n{\n    <3D82AB44-62DA-11CF-AB39-0020AF71E433>\n    DWORD nVertices;\n    array Vector vertices[nVertices];\n    DWORD nFaces;\n    array MeshFace faces[nFaces];\n    [ ... ]\n}\n\ntemplate FrameTransformMatrix\n{\n    <F6F23F41-7686-11CF-8F52-0040333594A3>\n    Matrix4x4 frameMatrix;\n}\n\ntemplate Frame\n{\n    <3D82AB46-62DA-11CF-AB39-0020AF71E433>\n    [ ... ]\n}\n\ntemplate FloatKeys\n{\n    <10DD46A9-775B-11CF-8F52-0040333594A3>\n    DWORD nValues;\n    array FLOAT values[nValues];\n}\n\ntemplate TimedFloatKeys\n{\n    <F406B180-7B3B-11CF-8F52-0040333594A3>\n    DWORD time;\n    FloatKeys tfkeys;\n}\n\ntemplate AnimationKey\n{\n    <10DD46A8-775B-11CF-8F52-0040333594A3>\n    DWORD keyType;\n    DWORD nKeys;\n    array TimedFloatKeys keys[nKeys];\n}\n\ntemplate AnimationOptions\n{\n    <E2BF56C0-840F-11CF-8F52-0040333594A3>\n    DWORD openclosed;\n    DWORD positionquality;\n}\n\ntemplate Animation\n{\n    <3D82AB4F-62DA-11CF-AB39-0020AF71E433>\n    [ ... ]\n}\n\ntemplate AnimationSet\n{\n    <3D82AB50-62DA-11CF-AB39-0020AF71E433>\n    [ Animation ]\n}\n\ntemplate InlineData\n{\n    <3A23EEA0-94B1-11D0-AB39-0020AF71E433>\n    [ BINARY ]\n}\n\ntemplate Url\n{\n    <3A23EEA1-94B1-11D0-AB39-0020AF71E433>\n    DWORD nUrls;\n    array STRING urls[nUrls];\n}\n\ntemplate ProgressiveMesh\n{\n    <8A63C360-997D-11D0-941C-0080C80CFA7B>\n    [ Url, InlineData ]\n}\n\ntemplate Guid\n{\n    <A42790E0-7810-11CF-8F52-0040333594A3>\n    DWORD data1;\n    WORD data2;\n    WORD data3;\n    array UCHAR data4[8];\n}\n\ntemplate StringProperty\n{\n    <7F0F21E0-BFE1-11D1-82C0-00A0C9697271>\n    STRING key;\n    STRING value;\n}\n\ntemplate PropertyBag\n{\n    <7F0F21E1-BFE1-11D1-82C0-00A0C9697271>\n    [ StringProperty ]\n}\n\ntemplate ExternalVisual\n{\n    <98116AA0-BDBA-11D1-82C0-00A0C9697271>\n    Guid guidExternalVisual;\n    [ ... ]\n}\n\ntemplate RightHanded\n{\n    <7F5D5EA0-D53A-11D1-82C0-00A0C9697271>\n    DWORD bRightHanded;\n}\n"
  },
  {
    "path": "wine/windows/roapi.h",
    "content": "/*\n * Copyright (C) 2014 Martin Storsjo\n * Copyright (C) 2016 Michael Müller\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_ROAPI_H\n#define __WINE_ROAPI_H\n\n#include <windef.h>\n#include <activation.h>\n\ntypedef enum\n{\n    RO_INIT_SINGLETHREADED = 0,\n    RO_INIT_MULTITHREADED  = 1,\n} RO_INIT_TYPE;\n\nDECLARE_HANDLE(APARTMENT_SHUTDOWN_REGISTRATION_COOKIE);\n\n#ifdef __cplusplus\ntypedef struct {} *RO_REGISTRATION_COOKIE;\n#else\ntypedef struct _RO_REGISTRATION_COOKIE *RO_REGISTRATION_COOKIE;\n#endif\ntypedef HRESULT (WINAPI *PFNGETACTIVATIONFACTORY)(HSTRING, IActivationFactory **);\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nHRESULT WINAPI RoInitialize(RO_INIT_TYPE type);\nvoid WINAPI RoUninitialize(void);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* __WINE_ROAPI_H */\n"
  },
  {
    "path": "wine/windows/roparameterizediid.idl",
    "content": "/*\n * Copyright 2017 Alex Henrie\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifdef __WIDL__\n#pragma winrt\n#endif\n\nimport \"wtypes.idl\";\n\ntypedef void *ROPARAMIIDHANDLE;\n\n[\n    object\n]\ninterface IRoSimpleMetaDataBuilder\n{\n    HRESULT SetWinRtInterface(\n        GUID iid\n    );\n\n    HRESULT SetDelegate(\n        GUID iid\n    );\n\n    HRESULT SetInterfaceGroupSimpleDefault(\n        const WCHAR *typename,\n        const WCHAR *default_name,\n        const GUID *default_iid\n    );\n\n    HRESULT SetInterfaceGroupParameterizedDefault(\n        const WCHAR *typename,\n        UINT32 name_element_count,\n        const WCHAR **name_elements\n    );\n\n    HRESULT SetRuntimeClassSimpleDefault(\n        const WCHAR *typename,\n        const WCHAR *default_name,\n        const GUID *default_iid\n    );\n\n    HRESULT SetRuntimeClassParameterizedDefault(\n        const WCHAR *typename,\n        UINT32 name_element_count,\n        const WCHAR **name_elements\n    );\n\n    HRESULT SetStruct(\n        const WCHAR *typename,\n        UINT32 field_count,\n        const WCHAR **field_typenames\n    );\n\n    HRESULT SetEnum(\n        const WCHAR *typename,\n        const WCHAR *base_type\n    );\n\n    HRESULT SetParameterizedInterface(\n        GUID iid,\n        UINT32 arg_count\n    );\n\n    HRESULT SetParameterizedDelegate(\n        GUID iid,\n        UINT32 arg_count\n    );\n}\n\n[\n    object\n]\ninterface IRoMetaDataLocator\n{\n    HRESULT Locate(\n        const WCHAR *typename,\n        IRoSimpleMetaDataBuilder *out\n    );\n}\n"
  },
  {
    "path": "wine/windows/row.idl",
    "content": "/*\n * Copyright (C) 2009 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    local,\n    object,\n    uuid(0c733ab4-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface IRow : IUnknown\n{\n    [local]\n    HRESULT GetColumns([in] DBORDINAL cColumns,\n                       [in, out, size_is(cColumns), annotation(\"__inout_ecount(cColumns)\")] DBCOLUMNACCESS rgColumns[]);\n\n\n    HRESULT GetSourceRowset([in, annotation(\"__in\")] REFIID riid,\n                            [out, iid_is(riid), annotation(\"__deref_opt_out_opt\")] IUnknown **ppRowset,\n                            [out, annotation(\"__out_opt\")] HROW *phRow);\n\n   HRESULT Open([in, unique, annotation(\"__in_opt\")] IUnknown *pUnkOuter,\n                [in, annotation(\"__in\")] DBID *pColumnID,\n                [in, annotation(\"__in\")] REFGUID rguidColumnType,\n                [in] DWORD dwBindFlags,\n                [in, annotation(\"__in\")] REFIID riid,\n                [out, iid_is(riid), annotation(\"__deref_opt_out\")] IUnknown **ppUnk);\n}\n"
  },
  {
    "path": "wine/windows/rowchg.idl",
    "content": "/*\n * Copyright (C) 2009 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    local,\n    object,\n    uuid(0c733ab5-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface IRowChange : IUnknown\n{\n    [local]\n    HRESULT SetColumns([in] DBORDINAL  cColumns,\n                       [in, out, size_is(cColumns), annotation(\"__in_ecount(cColumns)\")] DBCOLUMNACCESS rgColumns[]);\n}\n"
  },
  {
    "path": "wine/windows/rowpos.idl",
    "content": "/*\n * Copyright (C) 2013 Nikolay Sivov\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    object,\n    uuid(0c733a94-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface IRowPosition : IUnknown\n{\n    typedef DWORD DBPOSITIONFLAGS;\n\n    enum DBPOSITIONFLAGSENUM {\n        DBPOSITION_OK,\n        DBPOSITION_NOROW,\n        DBPOSITION_BOF,\n        DBPOSITION_EOF\n    };\n\n    [local]\n    HRESULT ClearRowPosition();\n\n    [call_as(ClearRowPosition)]\n    HRESULT RemoteClearRowPosition([out] IErrorInfo **errorinfo);\n\n    [local]\n    HRESULT GetRowPosition([out] HCHAPTER *chapter,\n                           [out] HROW *row,\n                           [out] DBPOSITIONFLAGS *position_flags);\n\n    [call_as(GetRowPosition)]\n    HRESULT RemoteGetRowPosition([out] HCHAPTER *chapter,\n                                 [out] HROW *row,\n                                 [out] DBPOSITIONFLAGS *position_flags,\n                                 [out] IErrorInfo **errorinfo);\n    [local]\n    HRESULT GetRowset([in] REFIID riid,\n                      [out, iid_is(riid)] IUnknown **rowset);\n\n    [call_as(GetRowset)]\n    HRESULT RemoteGetRowset([in] REFIID riid,\n                            [out, iid_is(riid)] IUnknown **rowset,\n                            [out] IErrorInfo **errorinfo);\n\n    [local]\n    HRESULT Initialize([in] IUnknown *rowset);\n\n    [call_as(Initialize)]\n    HRESULT RemoteInitialize([in] IUnknown *rowset,\n                             [out] IErrorInfo **errorinfo);\n\n    [local]\n    HRESULT SetRowPosition([in] HCHAPTER chapter,\n                           [in] HROW row,\n                           [in] DBPOSITIONFLAGS flags);\n\n    [call_as(SetRowPosition)]\n    HRESULT RemoteSetRowPosition([in] HCHAPTER chapter,\n                                 [in] HROW row,\n                                 [in] DBPOSITIONFLAGS flags,\n                                 [out] IErrorInfo **errorinfo);\n}\n"
  },
  {
    "path": "wine/windows/rowpsc.idl",
    "content": "/*\n * Copyright (C) 2013 Nikolay Sivov\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    object,\n    uuid(0997a571-126e-11d0-9f8a-00a0c9a0631e),\n    pointer_default(unique)\n]\ninterface IRowPositionChange : IUnknown\n{\n    [local]\n    HRESULT OnRowPositionChange([in] DBREASON reason,\n                                [in] DBEVENTPHASE phase,\n                                [in] BOOL cant_deny);\n\n    [call_as(OnRowPositionChange)]\n    HRESULT RemoteOnRowPositionChange([in] DBREASON reason,\n                                      [in] DBEVENTPHASE phase,\n                                      [in] BOOL cant_deny,\n                                      [out] IErrorInfo **errorinfo);\n}\n"
  },
  {
    "path": "wine/windows/rpc.h",
    "content": "/*\n *    RPC interface\n *\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef RPC_NO_WINDOWS_H\n# include <windows.h>\n#endif\n\n#ifndef __WINE_RPC_H\n#define __WINE_RPC_H\n\n#if defined(__powerpc__) || defined(_MAC) /* ? */\n# define __RPC_MAC__\n /* Also define __RPC_WIN32__ to ensure compatibility */\n# define __RPC_WIN32__\n#elif defined(_WIN64)\n# define __RPC_WIN64__\n#else\n# define __RPC_WIN32__\n#endif\n\n#include <basetsd.h>\n\n#define __RPC_FAR\n#define __RPC_API  __stdcall\n#define __RPC_USER __stdcall\n#define __RPC_STUB __stdcall\n#define RPC_ENTRY  __stdcall\n#define RPCRTAPI\ntypedef LONG RPC_STATUS;\n\ntypedef void* I_RPC_HANDLE;\n\n#include <rpcdce.h>\n/* #include <rpcnsi.h> */\n#include <rpcnterr.h>\n#include <excpt.h>\n#include <winerror.h>\n#ifndef RPC_NO_WINDOWS_H\n#include <rpcasync.h>\n#endif\n\n#ifdef USE_COMPILER_EXCEPTIONS\n\n#define RpcTryExcept __try {\n#define RpcExcept(expr) } __except (expr) {\n#define RpcEndExcept }\n#define RpcTryFinally __try {\n#define RpcFinally } __finally {\n#define RpcEndFinally }\n#define RpcExceptionCode() GetExceptionCode()\n#define RpcAbnormalTermination() AbnormalTermination()\n\n#else /* USE_COMPILER_EXCEPTIONS */\n\n/* ignore exception handling for now */\n#define RpcTryExcept if (1) {\n#define RpcExcept(expr) } else {\n#define RpcEndExcept }\n#define RpcTryFinally\n#define RpcFinally\n#define RpcEndFinally\n#define RpcExceptionCode() 0\n/* #define RpcAbnormalTermination() abort() */\n\n#endif /* USE_COMPILER_EXCEPTIONS */\n\n#endif /*__WINE_RPC_H */\n"
  },
  {
    "path": "wine/windows/rpcasync.h",
    "content": "/*\n * Copyright (C) 2007 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __WINE_RPCASYNC_H\n#define __WINE_RPCASYNC_H\n\n#ifdef RPC_NO_WINDOWS_H\n# include <windef.h>\n#endif\n\n#ifdef __RPC_WIN64__\n# include <pshpack8.h>\n#endif\n\ntypedef struct tagRPC_ERROR_ENUM_HANDLE\n{\n    ULONG Signature;\n    void* CurrentPos;\n    void* Head;\n} RPC_ERROR_ENUM_HANDLE;\n\ntypedef enum tagExtendedErrorParamTypes\n{\n    eeptAnsiString = 1,\n    eeptUnicodeString,\n    eeptLongVal,\n    eeptShortVal,\n    eeptPointerVal,\n    eeptNone,\n    eeptBinary\n} ExtendedErrorParamTypes;\n\n#define MaxNumberOfEEInfoParams 4\n#define RPC_EEINFO_VERSION      1\n\ntypedef struct tagBinaryParam\n{\n    void *Buffer;\n    short Size;\n} BinaryParam;\n\ntypedef struct tagRPC_EE_INFO_PARAM\n{\n    ExtendedErrorParamTypes ParameterType;\n    union\n    {\n        LPSTR AnsiString;\n        LPWSTR UnicodeString;\n        LONG LVal;\n        short SVal;\n        ULONGLONG PVal;\n        BinaryParam BVal;\n    } u;\n} RPC_EE_INFO_PARAM;\n\n#define EEInfoPreviousRecordsMissing    0x1\n#define EEInfoNextRecordsMissing        0x2\n#define EEInfoUseFileTime               0x4\n\n#define EEInfoGCCOM                     11\n#define EEInfoGCFRS                     12\n\ntypedef struct tagRPC_EXTENDED_ERROR_INFO\n{\n    ULONG Version;\n    LPWSTR ComputerName;\n    ULONG ProcessID;\n    union\n    {\n        SYSTEMTIME SystemTime;\n        FILETIME FileTime;\n    } u;\n    ULONG GeneratingComponent;\n    ULONG Status;\n    USHORT DetectionLocation;\n    USHORT Flags;\n    int NumberOfParameters;\n    RPC_EE_INFO_PARAM Parameters[MaxNumberOfEEInfoParams];\n} RPC_EXTENDED_ERROR_INFO;\n\n#define RPC_ASYNC_VERSION_1_0   sizeof(RPC_ASYNC_STATE)\n\ntypedef enum _RPC_NOTIFICATION_TYPES\n{\n    RpcNotificationTypeNone,\n    RpcNotificationTypeEvent,\n    RpcNotificationTypeApc,\n    RpcNotificationTypeIoc,\n    RpcNotificationTypeHwnd,\n    RpcNotificationTypeCallback,\n} RPC_NOTIFICATION_TYPES;\n\ntypedef enum _RPC_ASYNC_EVENT\n{\n    RpcCallComplete,\n    RpcSendComplete,\n    RpcReceiveComplete,\n    RpcClientDisconnect,\n    RpcClientCancel,\n} RPC_ASYNC_EVENT;\n\nstruct _RPC_ASYNC_STATE;\n\ntypedef void RPC_ENTRY RPCNOTIFICATION_ROUTINE(struct _RPC_ASYNC_STATE *,void *,RPC_ASYNC_EVENT);\ntypedef RPCNOTIFICATION_ROUTINE *PFN_RPCNOTIFICATION_ROUTINE;\n\ntypedef union _RPC_ASYNC_NOTIFICATION_INFO\n{\n    struct\n    {\n        PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine;\n        HANDLE hThread;\n    } APC;\n    struct\n    {\n        HANDLE hIOPort;\n        DWORD dwNumberOfBytesTransferred;\n        DWORD_PTR dwCompletionKey;\n        LPOVERLAPPED lpOverlapped;\n    } IOC;\n    struct\n    {\n        HWND hWnd;\n        UINT Msg;\n    } HWND;\n    HANDLE hEvent;\n    PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine;\n} RPC_ASYNC_NOTIFICATION_INFO, *PRPC_ASYNC_NOTIFICATION_INFO;\n\n#define RPC_C_NOTIFY_ON_SEND_COMPLETE   0x1\n#define RPC_C_INFINITE_TIMEOUT          INFINITE\n\ntypedef struct _RPC_ASYNC_STATE\n{\n    unsigned int Size;\n    ULONG Signature;\n    LONG Lock;\n    ULONG Flags;\n    void *StubInfo;\n    void *UserInfo;\n    void *RuntimeInfo;\n    RPC_ASYNC_EVENT Event;\n    RPC_NOTIFICATION_TYPES NotificationType;\n    RPC_ASYNC_NOTIFICATION_INFO u;\n    LONG_PTR Reserved[4];\n} RPC_ASYNC_STATE, *PRPC_ASYNC_STATE;\n\n#define RpcAsyncGetCallHandle(async) (((PRPC_ASYNC_STATE)async)->RuntimeInfo)\n\n#ifdef __RPC_WIN64__\n# include <poppack.h>\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nRPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncInitializeHandle(PRPC_ASYNC_STATE,unsigned int);\nRPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncRegisterInfo(PRPC_ASYNC_STATE);\nRPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncGetCallStatus(PRPC_ASYNC_STATE);\nRPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncCompleteCall(PRPC_ASYNC_STATE,void *);\nRPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncAbortCall(PRPC_ASYNC_STATE,ULONG);\nRPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncCancelCall(PRPC_ASYNC_STATE,BOOL);\nRPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncCleanupThread(DWORD);\nRPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorStartEnumeration(RPC_ERROR_ENUM_HANDLE*);\nRPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorGetNextRecord(RPC_ERROR_ENUM_HANDLE*,BOOL,RPC_EXTENDED_ERROR_INFO*);\nRPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorEndEnumeration(RPC_ERROR_ENUM_HANDLE*);\nRPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorResetEnumeration(RPC_ERROR_ENUM_HANDLE*);\nRPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorGetNumberOfRecords(RPC_ERROR_ENUM_HANDLE*,int*);\nRPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorSaveErrorInfo(RPC_ERROR_ENUM_HANDLE*,PVOID*,SIZE_T*);\nRPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorLoadErrorInfo(PVOID,SIZE_T,RPC_ERROR_ENUM_HANDLE*);\nRPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorAddRecord(RPC_EXTENDED_ERROR_INFO*);\nRPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorClearInformation(void);\nRPCRTAPI RPC_STATUS RPC_ENTRY RpcGetAuthorizationContextForClient(RPC_BINDING_HANDLE,BOOL,LPVOID,PLARGE_INTEGER,LUID,DWORD,PVOID,PVOID*);\nRPCRTAPI RPC_STATUS RPC_ENTRY RpcFreeAuthorizationContext(PVOID*);\nRPCRTAPI RPC_STATUS RPC_ENTRY RpcSsContextLockExclusive(RPC_BINDING_HANDLE,PVOID);\nRPCRTAPI RPC_STATUS RPC_ENTRY RpcSsContextLockShared(RPC_BINDING_HANDLE,PVOID);\n\nRPCRTAPI RPC_STATUS RPC_ENTRY I_RpcAsyncSetHandle(PRPC_MESSAGE,PRPC_ASYNC_STATE);\nRPCRTAPI RPC_STATUS RPC_ENTRY I_RpcAsyncAbortCall(PRPC_ASYNC_STATE,ULONG);\nRPCRTAPI int        RPC_ENTRY I_RpcExceptionFilter(ULONG);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/rpcdce.h",
    "content": "/*\n * Copyright (C) 2000 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_RPCDCE_H\n#define __WINE_RPCDCE_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef IN\n#define IN\n#endif\n#ifndef OUT\n#define OUT\n#endif\n#ifndef OPTIONAL\n#define OPTIONAL\n#endif\n\n#ifndef GUID_DEFINED\n#include <guiddef.h>\n#endif\n\n#ifndef UUID_DEFINED\n#define UUID_DEFINED\ntypedef GUID UUID;\n#endif\n\ntypedef unsigned char* RPC_CSTR;\ntypedef unsigned short* RPC_WSTR;\ntypedef void* RPC_AUTH_IDENTITY_HANDLE;\ntypedef void* RPC_AUTHZ_HANDLE;\ntypedef void* RPC_IF_HANDLE;\ntypedef I_RPC_HANDLE RPC_BINDING_HANDLE;\ntypedef RPC_BINDING_HANDLE handle_t;\n#define rpc_binding_handle_t RPC_BINDING_HANDLE\n#define RPC_MGR_EPV void\n\ntypedef struct _RPC_BINDING_VECTOR\n{\n  ULONG Count;\n  RPC_BINDING_HANDLE BindingH[1];\n} RPC_BINDING_VECTOR;\n#define rpc_binding_vector_t RPC_BINDING_VECTOR\n\ntypedef struct _UUID_VECTOR\n{\n  ULONG Count;\n  UUID *Uuid[1];\n} UUID_VECTOR;\n#define uuid_vector_t UUID_VECTOR\n\ntypedef struct _RPC_IF_ID\n{\n  UUID Uuid;\n  unsigned short VersMajor;\n  unsigned short VersMinor;\n} RPC_IF_ID;\n\ntypedef struct\n{\n  ULONG Count;\n  RPC_IF_ID *IfId[1];\n} RPC_IF_ID_VECTOR;\n\ntypedef struct\n{\n  unsigned int Count;\n  ULONG Stats[1];\n} RPC_STATS_VECTOR;\n\ntypedef struct _RPC_PROTSEQ_VECTORA\n{\n  unsigned int Count;\n  unsigned char *Protseq[1];\n} RPC_PROTSEQ_VECTORA;\n\ntypedef struct _RPC_PROTSEQ_VECTORW\n{\n  unsigned int Count;\n  unsigned short *Protseq[1];\n} RPC_PROTSEQ_VECTORW;\n\nDECL_WINELIB_TYPE_AW(RPC_PROTSEQ_VECTOR)\n\ntypedef I_RPC_HANDLE *RPC_EP_INQ_HANDLE;\n\n#define RPC_C_EP_ALL_ELTS 0\n#define RPC_C_EP_MATCH_BY_IF 1\n#define RPC_C_EP_MATCH_BY_OBJ 2\n#define RPC_C_EP_MATCH_BY_BOTH 3\n\n#define RPC_C_VERS_ALL 1\n#define RPC_C_VERS_COMPATIBLE 2\n#define RPC_C_VERS_EXACT 3\n#define RPC_C_VERS_MAJOR_ONLY 4\n#define RPC_C_VERS_UPTO 5\n\n#define RPC_C_BINDING_INFINITE_TIMEOUT 10\n#define RPC_C_BINDING_MIN_TIMEOUT 0\n#define RPC_C_BINDING_DEFAULT_TIMEOUT 5\n#define RPC_C_BINDING_MAX_TIMEOUT 9\n\n#define RPC_C_CANCEL_INFINITE_TIMEOUT -1\n\n#define RPC_C_LISTEN_MAX_CALLS_DEFAULT 1234\n#define RPC_C_PROTSEQ_MAX_REQS_DEFAULT 10\n\n#define RPC_PROTSEQ_TCP     0x1\n#define RPC_PROTSEQ_NMP     0x2\n#define RPC_PROTSEQ_LRPC    0x3\n#define RPC_PROTSEQ_HTTP    0x4\n\n/* RPC_POLICY EndpointFlags */\n#define RPC_C_BIND_TO_ALL_NICS          0x1\n#define RPC_C_USE_INTERNET_PORT         0x1\n#define RPC_C_USE_INTRANET_PORT         0x2\n#define RPC_C_DONT_FAIL                 0x4\n\n/* RPC_POLICY EndpointFlags specific to the Falcon/RPC transport */\n#define RPC_C_MQ_TEMPORARY                  0x0000\n#define RPC_C_MQ_PERMANENT                  0x0001\n#define RPC_C_MQ_CLEAR_ON_OPEN              0x0002\n#define RPC_C_MQ_USE_EXISTING_SECURITY      0x0004\n#define RPC_C_MQ_AUTHN_LEVEL_NONE           0x0000\n#define RPC_C_MQ_AUTHN_LEVEL_PKT_INTEGRITY  0x0008\n#define RPC_C_MQ_AUTHN_LEVEL_PKT_PRIVACY    0x0010\n\n#define RPC_C_AUTHN_LEVEL_DEFAULT 0\n#define RPC_C_AUTHN_LEVEL_NONE 1\n#define RPC_C_AUTHN_LEVEL_CONNECT 2\n#define RPC_C_AUTHN_LEVEL_CALL 3\n#define RPC_C_AUTHN_LEVEL_PKT 4\n#define RPC_C_AUTHN_LEVEL_PKT_INTEGRITY 5\n#define RPC_C_AUTHN_LEVEL_PKT_PRIVACY 6\n\n#define RPC_C_AUTHN_NONE 0\n#define RPC_C_AUTHN_DCE_PRIVATE 1\n#define RPC_C_AUTHN_DCE_PUBLIC 2\n#define RPC_C_AUTHN_DEC_PUBLIC 4\n#define RPC_C_AUTHN_GSS_NEGOTIATE 9\n#define RPC_C_AUTHN_WINNT 10\n#define RPC_C_AUTHN_GSS_SCHANNEL 14\n#define RPC_C_AUTHN_GSS_KERBEROS 16\n#define RPC_C_AUTHN_DPA 17\n#define RPC_C_AUTHN_MSN 18\n#define RPC_C_AUTHN_DIGEST 21\n#define RPC_C_AUTHN_MQ 100\n#define RPC_C_AUTHN_DEFAULT 0xffffffff\n\n#define RPC_C_AUTHZ_NONE 0\n#define RPC_C_AUTHZ_NAME 1\n#define RPC_C_AUTHZ_DCE  2\n#define RPC_C_AUTHZ_DEFAULT 0xffffffff\n\n/* values for RPC_SECURITY_QOS*::ImpersonationType */\n#define RPC_C_IMP_LEVEL_DEFAULT     0\n#define RPC_C_IMP_LEVEL_ANONYMOUS   1\n#define RPC_C_IMP_LEVEL_IDENTIFY    2\n#define RPC_C_IMP_LEVEL_IMPERSONATE 3\n#define RPC_C_IMP_LEVEL_DELEGATE    4\n\n/* values for RPC_SECURITY_QOS*::IdentityTracking */\n#define RPC_C_QOS_IDENTITY_STATIC   0\n#define RPC_C_QOS_IDENTITY_DYNAMIC  1\n\n/* flags for RPC_SECURITY_QOS*::Capabilities */\n#define RPC_C_QOS_CAPABILITIES_DEFAULT          0x0\n#define RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH      0x1\n#define RPC_C_QOS_CAPABILITIES_MAKE_FULLSIC     0x2\n#define RPC_C_QOS_CAPABILITIES_ANY_AUTHORITY    0x4\n\n/* values for RPC_SECURITY_QOS*::Version */\n#define RPC_C_SECURITY_QOS_VERSION      1\n#define RPC_C_SECURITY_QOS_VERSION_1    1\n#define RPC_C_SECURITY_QOS_VERSION_2    2\n\n/* flags for RPC_SECURITY_QOS_V2::AdditionalSecurityInfoType */\n#define RPC_C_AUTHN_INFO_TYPE_HTTP  1\n\n/* flags for RPC_HTTP_TRANSPORT_CREDENTIALS::Flags */\n#define RPC_C_HTTP_FLAG_USE_SSL                 0x1\n#define RPC_C_HTTP_FLAG_USE_FIRST_AUTH_SCHEME   0x2\n\n/* values for RPC_HTTP_TRANSPORT_CREDENTIALS::AuthenticationTarget */\n#define RPC_C_HTTP_AUTHN_TARGET_SERVER  1\n#define RPC_C_HTTP_AUTHN_TARGET_PROXY   2\n\n#define RPC_C_HTTP_AUTHN_SCHEME_BASIC       0x01\n#define RPC_C_HTTP_AUTHN_SCHEME_NTLM        0x02\n#define RPC_C_HTTP_AUTHN_SCHEME_PASSPORT    0x04\n#define RPC_C_HTTP_AUTHN_SCHEME_DIGEST      0x08\n#define RPC_C_HTTP_AUTHN_SCHEME_NEGOTIATE   0x10\n\ntypedef RPC_STATUS RPC_ENTRY RPC_IF_CALLBACK_FN( RPC_IF_HANDLE InterfaceUuid, void *Context );\ntypedef void (__RPC_USER *RPC_AUTH_KEY_RETRIEVAL_FN)(void *, RPC_WSTR, ULONG, void **, RPC_STATUS *);\n\ntypedef struct _RPC_POLICY\n{\n  unsigned int  Length;\n  ULONG EndpointFlags;\n  ULONG NICFlags;\n} RPC_POLICY,  *PRPC_POLICY;\n\ntypedef struct _SEC_WINNT_AUTH_IDENTITY_W\n{\n    unsigned short* User;\n    ULONG UserLength;\n    unsigned short* Domain;\n    ULONG DomainLength;\n    unsigned short* Password;\n    ULONG PasswordLength;\n    ULONG Flags;\n} SEC_WINNT_AUTH_IDENTITY_W, *PSEC_WINNT_AUTH_IDENTITY_W;\n\ntypedef struct _SEC_WINNT_AUTH_IDENTITY_A\n{\n    unsigned char* User;\n    ULONG UserLength;\n    unsigned char* Domain;\n    ULONG DomainLength;\n    unsigned char* Password;\n    ULONG PasswordLength;\n    ULONG Flags;\n} SEC_WINNT_AUTH_IDENTITY_A, *PSEC_WINNT_AUTH_IDENTITY_A;\n\ntypedef struct _RPC_HTTP_TRANSPORT_CREDENTIALS_W\n{\n    SEC_WINNT_AUTH_IDENTITY_W *TransportCredentials;\n    ULONG Flags;\n    ULONG AuthenticationTarget;\n    ULONG NumberOfAuthnSchemes;\n    ULONG *AuthnSchemes;\n    unsigned short *ServerCertificateSubject;\n} RPC_HTTP_TRANSPORT_CREDENTIALS_W, *PRPC_HTTP_TRANSPORT_CREDENTIALS_W;\n\ntypedef struct _RPC_HTTP_TRANSPORT_CREDENTIALS_A\n{\n    SEC_WINNT_AUTH_IDENTITY_A *TransportCredentials;\n    ULONG Flags;\n    ULONG AuthenticationTarget;\n    ULONG NumberOfAuthnSchemes;\n    ULONG *AuthnSchemes;\n    unsigned char *ServerCertificateSubject;\n} RPC_HTTP_TRANSPORT_CREDENTIALS_A, *PRPC_HTTP_TRANSPORT_CREDENTIALS_A;\n\ntypedef struct _RPC_SECURITY_QOS {\n    ULONG Version;\n    ULONG Capabilities;\n    ULONG IdentityTracking;\n    ULONG ImpersonationType;\n} RPC_SECURITY_QOS, *PRPC_SECURITY_QOS;\n\ntypedef struct _RPC_SECURITY_QOS_V2_W\n{\n    ULONG Version;\n    ULONG Capabilities;\n    ULONG IdentityTracking;\n    ULONG ImpersonationType;\n    ULONG AdditionalSecurityInfoType;\n    union\n    {\n        RPC_HTTP_TRANSPORT_CREDENTIALS_W *HttpCredentials;\n    } u;\n} RPC_SECURITY_QOS_V2_W, *PRPC_SECURITY_QOS_V2_W;\n\ntypedef struct _RPC_SECURITY_QOS_V2_A\n{\n    ULONG Version;\n    ULONG Capabilities;\n    ULONG IdentityTracking;\n    ULONG ImpersonationType;\n    ULONG AdditionalSecurityInfoType;\n    union\n    {\n        RPC_HTTP_TRANSPORT_CREDENTIALS_A *HttpCredentials;\n    } u;\n} RPC_SECURITY_QOS_V2_A, *PRPC_SECURITY_QOS_V2_A;\n\n#define _SEC_WINNT_AUTH_IDENTITY WINELIB_NAME_AW(_SEC_WINNT_AUTH_IDENTITY_)\n#define  SEC_WINNT_AUTH_IDENTITY WINELIB_NAME_AW(SEC_WINNT_AUTH_IDENTITY_)\n#define PSEC_WINNT_AUTH_IDENTITY WINELIB_NAME_AW(PSEC_WINNT_AUTH_IDENTITY_)\n\n#define RPC_HTTP_TRANSPORT_CREDENTIALS_  WINELIB_NAME_AW(RPC_HTTP_TRANSPORT_CREDENTIALS_)\n#define PRPC_HTTP_TRANSPORT_CREDENTIALS_ WINELIB_NAME_AW(PRPC_HTTP_TRANSPORT_CREDENTIALS_)\n#define _RPC_HTTP_TRANSPORT_CREDENTIALS_ WINELIB_NAME_AW(_RPC_HTTP_TRANSPORT_CREDENTIALS_)\n\n#define RPC_SECURITY_QOS_V2  WINELIB_NAME_AW(RPC_SECURITY_QOS_V2_)\n#define PRPC_SECURITY_QOS_V2 WINELIB_NAME_AW(PRPC_SECURITY_QOS_V2_)\n#define _RPC_SECURITY_QOS_V2 WINELIB_NAME_AW(_RPC_SECURITY_QOS_V2_)\n\n/* SEC_WINNT_AUTH Flags */\n#define SEC_WINNT_AUTH_IDENTITY_ANSI    0x1\n#define SEC_WINNT_AUTH_IDENTITY_UNICODE 0x2\n\n/* RpcServerRegisterIfEx Flags */\n#define RPC_IF_AUTOLISTEN                   0x01\n#define RPC_IF_OLE                          0x02\n#define RPC_IF_ALLOW_UNKNOWN_AUTHORITY      0x04\n#define RPC_IF_ALLOW_SECURE_ONLY            0x08\n#define RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH 0x10\n#define RPC_IF_ALLOW_LOCAL_ONLY             0x20\n#define RPC_IF_SEC_NO_CACHE                 0x40\n\nRPC_STATUS RPC_ENTRY DceErrorInqTextA(RPC_STATUS e, RPC_CSTR buffer);\nRPC_STATUS RPC_ENTRY DceErrorInqTextW(RPC_STATUS e, RPC_WSTR buffer);\n#define              DceErrorInqText WINELIB_NAME_AW(DceErrorInqText)\n\nRPCRTAPI DECLSPEC_NORETURN void RPC_ENTRY\n  RpcRaiseException( RPC_STATUS exception );\n        \nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingCopy( RPC_BINDING_HANDLE SourceBinding, RPC_BINDING_HANDLE* DestinationBinding );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingFree( RPC_BINDING_HANDLE* Binding );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingInqObject( RPC_BINDING_HANDLE Binding, UUID* ObjectUuid );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingInqOption( RPC_BINDING_HANDLE Binding, ULONG Option, ULONG_PTR *OptionValue );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingReset( RPC_BINDING_HANDLE Binding );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingServerFromClient( RPC_BINDING_HANDLE ClientBinding, RPC_BINDING_HANDLE* ServerBinding );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingSetObject( RPC_BINDING_HANDLE Binding, UUID* ObjectUuid );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingSetOption( RPC_BINDING_HANDLE Binding, ULONG Option, ULONG_PTR OptionValue );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcObjectSetType( UUID* ObjUuid, UUID* TypeUuid );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingFromStringBindingA( RPC_CSTR StringBinding, RPC_BINDING_HANDLE* Binding );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingFromStringBindingW( RPC_WSTR StringBinding, RPC_BINDING_HANDLE* Binding );\n#define RpcBindingFromStringBinding WINELIB_NAME_AW(RpcBindingFromStringBinding)\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingToStringBindingA( RPC_BINDING_HANDLE Binding, RPC_CSTR *StringBinding );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingToStringBindingW( RPC_BINDING_HANDLE Binding, RPC_WSTR *StringBinding );\n#define RpcBindingToStringBinding WINELIB_NAME_AW(RpcBindingToStringBinding)\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingVectorFree( RPC_BINDING_VECTOR** BindingVector );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcStringBindingComposeA( RPC_CSTR ObjUuid, RPC_CSTR Protseq, RPC_CSTR NetworkAddr,\n                            RPC_CSTR Endpoint, RPC_CSTR Options, RPC_CSTR *StringBinding );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcStringBindingComposeW( RPC_WSTR ObjUuid, RPC_WSTR Protseq, RPC_WSTR NetworkAddr,\n                            RPC_WSTR Endpoint, RPC_WSTR Options, RPC_WSTR *StringBinding );\n#define RpcStringBindingCompose WINELIB_NAME_AW(RpcStringBindingCompose)\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcStringBindingParseA( RPC_CSTR StringBinding, RPC_CSTR *ObjUuid, RPC_CSTR *Protseq,\n                          RPC_CSTR *NetworkAddr, RPC_CSTR *Endpoint, RPC_CSTR *NetworkOptions );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcStringBindingParseW( RPC_WSTR StringBinding, RPC_WSTR *ObjUuid, RPC_WSTR *Protseq,\n                          RPC_WSTR *NetworkAddr, RPC_WSTR *Endpoint, RPC_WSTR *NetworkOptions );\n#define RpcStringBindingParse WINELIB_NAME_AW(RpcStringBindingParse)\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcEpResolveBinding( RPC_BINDING_HANDLE Binding, RPC_IF_HANDLE IfSpec );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcEpRegisterA( RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR* BindingVector,\n                  UUID_VECTOR* UuidVector, RPC_CSTR Annotation );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcEpRegisterW( RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR* BindingVector,\n                  UUID_VECTOR* UuidVector, RPC_WSTR Annotation );\n#define RpcEpRegister WINELIB_NAME_AW(RpcEpRegister)\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcEpRegisterNoReplaceA( RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR* BindingVector,\n                           UUID_VECTOR* UuidVector, RPC_CSTR Annotation );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcEpRegisterNoReplaceW( RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR* BindingVector,\n                           UUID_VECTOR* UuidVector, RPC_WSTR Annotation );\n#define RpcEpRegisterNoReplace WINELIB_NAME_AW(RpcEpRegisterNoReplace)\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcEpUnregister( RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR* BindingVector,\n                   UUID_VECTOR* UuidVector );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcServerInqBindings( RPC_BINDING_VECTOR** BindingVector );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcServerListen( unsigned int MinimumCallThreads, unsigned int MaxCalls, unsigned int DontWait );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcMgmtEnableIdleCleanup( void );\n\ntypedef int (__RPC_API *RPC_MGMT_AUTHORIZATION_FN)( RPC_BINDING_HANDLE, ULONG, RPC_STATUS * );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY RpcMgmtSetAuthorizationFn( RPC_MGMT_AUTHORIZATION_FN );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY RpcMgmtSetCancelTimeout(LONG);\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcMgmtWaitServerListen( void );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcMgmtInqStats( RPC_BINDING_HANDLE Binding, RPC_STATS_VECTOR **Statistics );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcMgmtStopServerListening( RPC_BINDING_HANDLE Binding );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcMgmtIsServerListening(RPC_BINDING_HANDLE Binding);\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcMgmtInqIfIds( RPC_BINDING_HANDLE Binding, RPC_IF_ID_VECTOR** IfIdVector );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcMgmtEpEltInqBegin( RPC_BINDING_HANDLE EpBinding, ULONG InquiryType, RPC_IF_ID *IfId,\n                        ULONG VersOption, UUID *ObjectUuid, RPC_EP_INQ_HANDLE *InquiryContext);\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcMgmtSetComTimeout( RPC_BINDING_HANDLE Binding, unsigned int Timeout );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcMgmtSetServerStackSize( ULONG ThreadStackSize );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\nRpcMgmtStatsVectorFree( RPC_STATS_VECTOR **StatsVector );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcServerRegisterIf( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid, RPC_MGR_EPV* MgrEpv );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcServerRegisterIfEx( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid, RPC_MGR_EPV* MgrEpv,\n                         unsigned int Flags, unsigned int MaxCalls, RPC_IF_CALLBACK_FN* IfCallbackFn );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcServerRegisterIf2( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid, RPC_MGR_EPV* MgrEpv,\n                        unsigned int Flags, unsigned int MaxCalls, unsigned int MaxRpcSize, RPC_IF_CALLBACK_FN* IfCallbackFn );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcServerRegisterIf3( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid, RPC_MGR_EPV* MgrEpv,\n                        unsigned int Flags, unsigned int MaxCalls, unsigned int MaxRpcSize,\n                        RPC_IF_CALLBACK_FN* IfCallbackFn, void* SecurityDescriptor );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcServerUnregisterIf( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid, unsigned int WaitForCallsToComplete );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcServerUnregisterIfEx( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid, int RundownContextHandles );\n\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcServerUseProtseqA(RPC_CSTR Protseq, unsigned int MaxCalls, void *SecurityDescriptor);\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcServerUseProtseqW(RPC_WSTR Protseq, unsigned int MaxCalls, void *SecurityDescriptor);\n#define RpcServerUseProtseq WINELIB_NAME_AW(RpcServerUseProtseq)\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcServerUseProtseqEpA( RPC_CSTR Protseq, unsigned int MaxCalls, RPC_CSTR Endpoint, void *SecurityDescriptor );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcServerUseProtseqEpW( RPC_WSTR Protseq, unsigned int MaxCalls, RPC_WSTR Endpoint, void *SecurityDescriptor );\n#define RpcServerUseProtseqEp WINELIB_NAME_AW(RpcServerUseProtseqEp)\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcServerUseProtseqEpExA( RPC_CSTR Protseq, unsigned int MaxCalls, RPC_CSTR Endpoint, void *SecurityDescriptor,\n                            PRPC_POLICY Policy );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcServerUseProtseqEpExW( RPC_WSTR Protseq, unsigned int MaxCalls, RPC_WSTR Endpoint, void *SecurityDescriptor,\n                            PRPC_POLICY Policy );\n#define RpcServerUseProtseqEpEx WINELIB_NAME_AW(RpcServerUseProtseqEpEx)\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcServerRegisterAuthInfoA( RPC_CSTR ServerPrincName, ULONG AuthnSvc, RPC_AUTH_KEY_RETRIEVAL_FN GetKeyFn,\n                              void *Arg );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcServerRegisterAuthInfoW( RPC_WSTR ServerPrincName, ULONG AuthnSvc, RPC_AUTH_KEY_RETRIEVAL_FN GetKeyFn,\n                              void *Arg );\n#define RpcServerRegisterAuthInfo WINELIB_NAME_AW(RpcServerRegisterAuthInfo)\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingSetAuthInfoExA( RPC_BINDING_HANDLE Binding, RPC_CSTR ServerPrincName, ULONG AuthnLevel,\n                            ULONG AuthnSvc, RPC_AUTH_IDENTITY_HANDLE AuthIdentity, ULONG AuthzSvr,\n                            RPC_SECURITY_QOS *SecurityQos );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingSetAuthInfoExW( RPC_BINDING_HANDLE Binding, RPC_WSTR ServerPrincName, ULONG AuthnLevel,\n                            ULONG AuthnSvc, RPC_AUTH_IDENTITY_HANDLE AuthIdentity, ULONG AuthzSvr,\n                            RPC_SECURITY_QOS *SecurityQos );\n#define RpcBindingSetAuthInfoEx WINELIB_NAME_AW(RpcBindingSetAuthInfoEx)\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingSetAuthInfoA( RPC_BINDING_HANDLE Binding, RPC_CSTR ServerPrincName, ULONG AuthnLevel,\n                          ULONG AuthnSvc, RPC_AUTH_IDENTITY_HANDLE AuthIdentity, ULONG AuthzSvr );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingSetAuthInfoW( RPC_BINDING_HANDLE Binding, RPC_WSTR ServerPrincName, ULONG AuthnLevel,\n                          ULONG AuthnSvc, RPC_AUTH_IDENTITY_HANDLE AuthIdentity, ULONG AuthzSvr );\n#define RpcBindingSetAuthInfo WINELIB_NAME_AW(RpcBindingSetAuthInfo)\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingInqAuthInfoExA( RPC_BINDING_HANDLE Binding, RPC_CSTR * ServerPrincName, ULONG *AuthnLevel,\n                            ULONG *AuthnSvc, RPC_AUTH_IDENTITY_HANDLE *AuthIdentity, ULONG *AuthzSvc,\n                            ULONG RpcQosVersion, RPC_SECURITY_QOS *SecurityQOS );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingInqAuthInfoExW( RPC_BINDING_HANDLE Binding, RPC_WSTR *ServerPrincName, ULONG *AuthnLevel,\n                            ULONG *AuthnSvc, RPC_AUTH_IDENTITY_HANDLE *AuthIdentity, ULONG *AuthzSvc,\n                            ULONG RpcQosVersion, RPC_SECURITY_QOS *SecurityQOS );\n#define RpcBindingInqAuthInfoEx WINELIB_NAME_AW(RpcBindingInqAuthInfoEx)\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingInqAuthInfoA( RPC_BINDING_HANDLE Binding, RPC_CSTR * ServerPrincName, ULONG *AuthnLevel,\n                          ULONG *AuthnSvc, RPC_AUTH_IDENTITY_HANDLE *AuthIdentity, ULONG *AuthzSvc );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingInqAuthInfoW( RPC_BINDING_HANDLE Binding, RPC_WSTR *ServerPrincName, ULONG *AuthnLevel,\n                          ULONG *AuthnSvc, RPC_AUTH_IDENTITY_HANDLE *AuthIdentity, ULONG *AuthzSvc );\n#define RpcBindingInqAuthInfo WINELIB_NAME_AW(RpcBindingInqAuthInfo)\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingInqAuthClientA( RPC_BINDING_HANDLE ClientBinding, RPC_AUTHZ_HANDLE *Privs,\n                            RPC_CSTR *ServerPrincName, ULONG *AuthnLevel, ULONG *AuthnSvc,\n                            ULONG *AuthzSvc );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingInqAuthClientW( RPC_BINDING_HANDLE ClientBinding, RPC_AUTHZ_HANDLE *Privs,\n                            RPC_WSTR *ServerPrincName, ULONG *AuthnLevel, ULONG *AuthnSvc,\n                            ULONG *AuthzSvc );\n#define RpcBindingInqAuthClient WINELIB_NAME_AW(RpcBindingInqAuthClient)\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingInqAuthClientExA( RPC_BINDING_HANDLE ClientBinding, RPC_AUTHZ_HANDLE *Privs,\n                              RPC_CSTR *ServerPrincName, ULONG *AuthnLevel, ULONG *AuthnSvc,\n                              ULONG *AuthzSvc, ULONG Flags );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcBindingInqAuthClientExW( RPC_BINDING_HANDLE ClientBinding, RPC_AUTHZ_HANDLE *Privs,\n                              RPC_WSTR *ServerPrincName, ULONG *AuthnLevel, ULONG *AuthnSvc,\n                              ULONG *AuthzSvc, ULONG Flags );\n#define RpcBindingInqAuthClientEx WINELIB_NAME_AW(RpcBindingInqAuthClientEx)\n\nRPCRTAPI RPC_STATUS RPC_ENTRY RpcCancelThread(void*);\nRPCRTAPI RPC_STATUS RPC_ENTRY RpcCancelThreadEx(void*,LONG);\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcImpersonateClient( RPC_BINDING_HANDLE Binding );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcNetworkIsProtseqValidA( RPC_CSTR protseq );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcNetworkIsProtseqValidW( RPC_WSTR protseq );\n#define RpcNetworkIsProtseqValid WINELIB_NAME_AW(RpcNetworkIsProtseqValid)\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcNetworkInqProtseqsA( RPC_PROTSEQ_VECTORA** protseqs );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcNetworkInqProtseqsW( RPC_PROTSEQ_VECTORW** protseqs );\n#define RpcNetworkInqProtseqs WINELIB_NAME_AW(RpcNetworkInqProtseqs)\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcProtseqVectorFreeA( RPC_PROTSEQ_VECTORA** protseqs );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcProtseqVectorFreeW( RPC_PROTSEQ_VECTORW** protseqs );\n#define RpcProtseqVectorFree WINELIB_NAME_AW(RpcProtseqVectorFree)\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcRevertToSelf( void );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcRevertToSelfEx( RPC_BINDING_HANDLE Binding );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcStringFreeA(RPC_CSTR* String);\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcStringFreeW(RPC_WSTR* String);\n#define RpcStringFree WINELIB_NAME_AW(RpcStringFree)\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  UuidToStringA( UUID* Uuid, RPC_CSTR* StringUuid );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  UuidToStringW( UUID* Uuid, RPC_WSTR* StringUuid );\n#define UuidToString WINELIB_NAME_AW(UuidToString)\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  UuidFromStringA( RPC_CSTR StringUuid, UUID* Uuid );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  UuidFromStringW( RPC_WSTR StringUuid, UUID* Uuid );\n#define UuidFromString WINELIB_NAME_AW(UuidFromString)\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  UuidCreate( UUID* Uuid );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  UuidCreateSequential( UUID* Uuid );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  UuidCreateNil( UUID* Uuid );\nRPCRTAPI signed int RPC_ENTRY\n  UuidCompare( UUID* Uuid1, UUID* Uuid2, RPC_STATUS* Status_ );\nRPCRTAPI int RPC_ENTRY\n  UuidEqual( UUID* Uuid1, UUID* Uuid2, RPC_STATUS* Status_ );\nRPCRTAPI unsigned short RPC_ENTRY\n  UuidHash(UUID* Uuid, RPC_STATUS* Status_ );\nRPCRTAPI int RPC_ENTRY\n  UuidIsNil( UUID* Uuid, RPC_STATUS* Status_ );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcServerInqDefaultPrincNameA( ULONG AuthnSvc, RPC_CSTR *PrincName );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcServerInqDefaultPrincNameW( ULONG AuthnSvc, RPC_WSTR *PrincName );\n#define RpcServerInqDefaultPrincName WINELIB_NAME_AW(RpcServerInqDefaultPrincName)\n\n#ifdef __cplusplus\n}\n#endif\n\n#include <rpcdcep.h>\n\n#endif /*__WINE_RPCDCE_H */\n"
  },
  {
    "path": "wine/windows/rpcdcep.h",
    "content": "/*\n * Copyright (C) 2000 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_RPCDCEP_H\n#define __WINE_RPCDCEP_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct _RPC_VERSION {\n    unsigned short MajorVersion;\n    unsigned short MinorVersion;\n} RPC_VERSION;\n\ntypedef struct _RPC_SYNTAX_IDENTIFIER {\n    GUID SyntaxGUID;\n    RPC_VERSION SyntaxVersion;\n} RPC_SYNTAX_IDENTIFIER, *PRPC_SYNTAX_IDENTIFIER;\n\ntypedef struct _RPC_MESSAGE\n{\n    RPC_BINDING_HANDLE Handle;\n    ULONG DataRepresentation;\n    void* Buffer;\n    unsigned int BufferLength;\n    unsigned int ProcNum;\n    PRPC_SYNTAX_IDENTIFIER TransferSyntax;\n    void* RpcInterfaceInformation;\n    void* ReservedForRuntime;\n    RPC_MGR_EPV* ManagerEpv;\n    void* ImportContext;\n    ULONG RpcFlags;\n} RPC_MESSAGE, *PRPC_MESSAGE;\n\n/* or'ed with ProcNum */\n#define RPC_FLAGS_VALID_BIT         0x00008000\n\n#define RPC_CONTEXT_HANDLE_DEFAULT_GUARD ((void *)0xfffff00d)\n\n#define RPC_CONTEXT_HANDLE_DEFAULT_FLAGS    0x00000000\n#define RPC_CONTEXT_HANDLE_FLAGS            0x30000000\n#define RPC_CONTEXT_HANDLE_SERIALIZE        0x10000000\n#define RPC_CONTEXT_HANDLE_DONT_SERIALIZE   0x20000000\n#define RPC_TYPE_STRICT_CONTEXT_HANDLE      0x40000000\n\n#define RPC_NCA_FLAGS_DEFAULT       0x00000000\n#define RPC_NCA_FLAGS_IDEMPOTENT    0x00000001\n#define RPC_NCA_FLAGS_BROADCAST     0x00000002\n#define RPC_NCA_FLAGS_MAYBE         0x00000004\n\n#define RPC_BUFFER_COMPLETE         0x00001000\n#define RPC_BUFFER_PARTIAL          0x00002000\n#define RPC_BUFFER_EXTRA            0x00004000\n#define RPC_BUFFER_ASYNC            0x00008000\n#define RPC_BUFFER_NONOTIFY         0x00010000\n\n#define RPCFLG_MESSAGE              0x01000000\n#define RPCFLG_HAS_MULTI_SYNTAXES   0x02000000\n#define RPCFLG_HAS_CALLBACK         0x04000000\n#define RPCFLG_AUTO_COMPLETE        0x08000000\n#define RPCFLG_LOCAL_CALL           0x10000000\n#define RPCFLG_INPUT_SYNCHRONOUS    0x20000000\n#define RPCFLG_ASYNCHRONOUS         0x40000000\n#define RPCFLG_NON_NDR              0x80000000\n\ntypedef void  (__RPC_STUB *RPC_DISPATCH_FUNCTION)(PRPC_MESSAGE Message);\ntypedef RPC_STATUS (RPC_ENTRY *RPC_FORWARD_FUNCTION)(UUID *InterfaceId, RPC_VERSION *InterfaceVersion, UUID *ObjectId, unsigned char *Rpcpro, void **ppDestEndpoint);\n\ntypedef struct\n{\n    unsigned int DispatchTableCount;\n    RPC_DISPATCH_FUNCTION* DispatchTable;\n    LONG_PTR Reserved;\n} RPC_DISPATCH_TABLE, *PRPC_DISPATCH_TABLE;\n\ntypedef struct _RPC_PROTSEQ_ENDPOINT\n{\n    unsigned char* RpcProtocolSequence;\n    unsigned char* Endpoint;\n} RPC_PROTSEQ_ENDPOINT, *PRPC_PROTSEQ_ENDPOINT;\n\n#define NT351_INTERFACE_SIZE 0x40\n#define RPC_INTERFACE_HAS_PIPES 0x0001\n\ntypedef struct _RPC_SERVER_INTERFACE\n{\n    unsigned int Length;\n    RPC_SYNTAX_IDENTIFIER InterfaceId;\n    RPC_SYNTAX_IDENTIFIER TransferSyntax;\n    PRPC_DISPATCH_TABLE DispatchTable;\n    unsigned int RpcProtseqEndpointCount;\n    PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint;\n    RPC_MGR_EPV* DefaultManagerEpv;\n    void const* InterpreterInfo;\n    unsigned int Flags;\n} RPC_SERVER_INTERFACE, *PRPC_SERVER_INTERFACE;\n\ntypedef struct _RPC_CLIENT_INTERFACE\n{\n    unsigned int Length;\n    RPC_SYNTAX_IDENTIFIER InterfaceId;\n    RPC_SYNTAX_IDENTIFIER TransferSyntax;\n    PRPC_DISPATCH_TABLE DispatchTable;\n    unsigned int RpcProtseqEndpointCount;\n    PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint;\n    ULONG_PTR Reserved;\n    void const* InterpreterInfo;\n    unsigned int Flags;\n} RPC_CLIENT_INTERFACE, *PRPC_CLIENT_INTERFACE;\n\n#define RPC_C_OPT_COOKIE_AUTH 7\n\ntypedef struct _RPC_C_OPT_COOKIE_AUTH_DESCRIPTOR\n{\n    ULONG BufferSize;\n    char *Buffer;\n} RPC_C_OPT_COOKIE_AUTH_DESCRIPTOR;\n\n#define TRANSPORT_TYPE_CN   0x01\n#define TRANSPORT_TYPE_DG   0x02\n#define TRANSPORT_TYPE_LPC  0x04\n#define TRANSPORT_TYPE_WMSG 0x08\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  I_RpcNegotiateTransferSyntax( RPC_MESSAGE* Message );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  I_RpcGetBuffer( RPC_MESSAGE* Message );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  I_RpcGetBufferWithObject( RPC_MESSAGE* Message, UUID* ObjectUuid );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  I_RpcSendReceive( RPC_MESSAGE* Message );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  I_RpcFreeBuffer( RPC_MESSAGE* Message );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  I_RpcSend( RPC_MESSAGE* Message );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  I_RpcReceive( RPC_MESSAGE* Message );\n\nRPCRTAPI void* RPC_ENTRY\n  I_RpcAllocate( unsigned int Size );\nRPCRTAPI void RPC_ENTRY\n  I_RpcFree( void* Object );\n\nRPCRTAPI RPC_BINDING_HANDLE RPC_ENTRY\n  I_RpcGetCurrentCallHandle( void );\n\n/*\n * The platform SDK headers don't define these functions at all if WINNT is defined\n * The MSVC6 headers define two different sets of functions :\n *  If WINNT and MSWMSG are defined, the NT versions are defined\n *  If WINNT is not defined, the windows 9x versions are defined.\n * Note that the prototypes for I_RpcBindingSetAsync are different for each case.\n *\n * Wine defaults to the WinNT case and only defines these function is MSWMSG is\n *  defined. Defining the NT functions by default causes MIDL generated proxies\n *  to not compile.\n */\n\n#if 1  /* WINNT */\n#ifdef MSWMSG\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  I_RpcServerStartListening( HWND hWnd );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  I_RpcServerStopListening( void );\n/* WINNT */\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  I_GetThreadWindowHandle( HWND* hWnd );\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  I_RpcAsyncSendReceive( RPC_MESSAGE* Message, void* Context, HWND hWnd );\n\ntypedef RPC_STATUS (*RPC_BLOCKING_FN)(void* hWnd, void* Context, HANDLE hSyncEvent);\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  I_RpcBindingSetAsync( RPC_BINDING_HANDLE Binding, RPC_BLOCKING_FN BlockingFn );\n\nRPCRTAPI UINT RPC_ENTRY\n  I_RpcWindowProc( void* hWnd, UINT Message, UINT wParam, ULONG lParam );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  I_RpcSetWMsgEndpoint( WCHAR* Endpoint );\n\n#endif\n\n#else\n\n/* WIN9x */\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  I_RpcServerStartListening( void* hWnd );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  I_RpcServerStopListening( void );\n\ntypedef RPC_STATUS (*RPC_BLOCKING_FN)(void* hWnd, void* Context, void* hSyncEvent);\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  I_RpcBindingSetAsync( RPC_BINDING_HANDLE Binding, RPC_BLOCKING_FN BlockingFn, ULONG ServerTid );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  I_RpcSetThreadParams( int fClientFree, void* Context, void* hWndClient );\n\nRPCRTAPI UINT RPC_ENTRY\n  I_RpcWindowProc( void* hWnd, unsigned int Message, unsigned int wParam, ULONG lParam );\n\n#endif\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  I_RpcBindingInqLocalClientPID (RPC_BINDING_HANDLE Binding, ULONG *Pid );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  I_RpcBindingInqTransportType( RPC_BINDING_HANDLE Binding, unsigned int* Type );\n\nRPCRTAPI LONG RPC_ENTRY I_RpcMapWin32Status(RPC_STATUS);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /*__WINE_RPCDCEP_H */\n"
  },
  {
    "path": "wine/windows/rpcndr.h",
    "content": "/*\n * Copyright (C) 2000 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __RPCNDR_H_VERSION__\n#define __RPCNDR_H_VERSION__ ( 500 )\n#endif\n\n#ifndef __WINE_RPCNDR_H\n#define __WINE_RPCNDR_H\n\n#include <basetsd.h>\n#include <rpcsal.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#undef CONST_VTBL\n#ifdef CONST_VTABLE\n# define CONST_VTBL const\n#else\n# define CONST_VTBL\n#endif\n\n#ifndef EXTERN_GUID\n#ifdef __cplusplus\n#define EXTERN_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\\n        EXTERN_C const GUID DECLSPEC_SELECTANY name DECLSPEC_HIDDEN; \\\n        EXTERN_C const GUID DECLSPEC_SELECTANY name = \\\n\t{ l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }\n#else\n#define EXTERN_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\\n        EXTERN_C const GUID name\n#endif\n#endif\n\n/* stupid #if can't handle casts... this __stupidity\n   is just a workaround for that limitation */\n\n#define __NDR_CHAR_REP_MASK  0x000f\n#define __NDR_INT_REP_MASK   0x00f0\n#define __NDR_FLOAT_REP_MASK 0xff00\n\n#define __NDR_IEEE_FLOAT     0x0000\n#define __NDR_VAX_FLOAT      0x0100\n#define __NDR_IBM_FLOAT      0x0300\n\n#define __NDR_ASCII_CHAR     0x0000\n#define __NDR_EBCDIC_CHAR    0x0001\n\n#define __NDR_LITTLE_ENDIAN  0x0010\n#define __NDR_BIG_ENDIAN     0x0000\n\n/* Mac's are special */\n#if defined(__RPC_MAC__)\n# define __NDR_LOCAL_DATA_REPRESENTATION \\\n    (__NDR_IEEE_FLOAT | __NDR_ASCII_CHAR | __NDR_BIG_ENDIAN)\n#else\n# define __NDR_LOCAL_DATA_REPRESENTATION \\\n    (__NDR_IEEE_FLOAT | __NDR_ASCII_CHAR | __NDR_LITTLE_ENDIAN)\n#endif\n\n#define __NDR_LOCAL_ENDIAN \\\n  (__NDR_LOCAL_DATA_REPRESENTATION & __NDR_INT_REP_MASK)\n\n/* for convenience, define NDR_LOCAL_IS_BIG_ENDIAN iff it is */\n#if __NDR_LOCAL_ENDIAN == __NDR_BIG_ENDIAN\n# define NDR_LOCAL_IS_BIG_ENDIAN\n#elif __NDR_LOCAL_ENDIAN == __NDR_LITTLE_ENDIAN\n# undef NDR_LOCAL_IS_BIG_ENDIAN\n#else\n# error alien NDR_LOCAL_ENDIAN - Greg botched the defines again, please report\n#endif\n\n/* finally, do the casts like Microsoft */\n\n#define NDR_CHAR_REP_MASK             ((ULONG) __NDR_CHAR_REP_MASK)\n#define NDR_INT_REP_MASK              ((ULONG) __NDR_INT_REP_MASK)\n#define NDR_FLOAT_REP_MASK            ((ULONG) __NDR_FLOAT_REP_MASK)\n#define NDR_IEEE_FLOAT                ((ULONG) __NDR_IEEE_FLOAT)\n#define NDR_VAX_FLOAT                 ((ULONG) __NDR_VAX_FLOAT)\n#define NDR_IBM_FLOAT                 ((ULONG) __NDR_IBM_FLOAT)\n#define NDR_ASCII_CHAR                ((ULONG) __NDR_ASCII_CHAR)\n#define NDR_EBCDIC_CHAR               ((ULONG) __NDR_EBCDIC_CHAR)\n#define NDR_LITTLE_ENDIAN             ((ULONG) __NDR_LITTLE_ENDIAN)\n#define NDR_BIG_ENDIAN                ((ULONG) __NDR_BIG_ENDIAN)\n#define NDR_LOCAL_DATA_REPRESENTATION ((ULONG) __NDR_LOCAL_DATA_REPRESENTATION)\n#define NDR_LOCAL_ENDIAN              ((ULONG) __NDR_LOCAL_ENDIAN)\n\n\n#define TARGET_IS_NT50_OR_LATER 1\n#define TARGET_IS_NT40_OR_LATER 1\n#define TARGET_IS_NT351_OR_WIN95_OR_LATER 1\n\n#define small char\ntypedef unsigned char byte;\ntypedef INT64 hyper;\ntypedef UINT64 MIDL_uhyper;\ntypedef unsigned char boolean;\n\n#define __RPC_CALLEE WINAPI\n#define RPC_VAR_ENTRY WINAPIV\n#define NDR_SHAREABLE static\n\n#define MIDL_ascii_strlen(s) strlen(s)\n#define MIDL_ascii_strcpy(d,s) strcpy(d,s)\n#define MIDL_memset(d,v,n) memset(d,v,n)\n#define midl_user_free MIDL_user_free\n#define midl_user_allocate MIDL_user_allocate\n\nvoid * __RPC_USER MIDL_user_allocate(SIZE_T);\nvoid __RPC_USER MIDL_user_free(void *);\n\n#define NdrFcShort(s) (unsigned char)(s & 0xff), (unsigned char)(s >> 8)\n#define NdrFcLong(s)  (unsigned char)(s & 0xff), (unsigned char)((s & 0x0000ff00) >> 8), \\\n  (unsigned char)((s & 0x00ff0000) >> 16), (unsigned char)(s >> 24)\n\n#define RPC_BAD_STUB_DATA_EXCEPTION_FILTER  \\\n  ((RpcExceptionCode() == STATUS_ACCESS_VIOLATION) || \\\n   (RpcExceptionCode() == STATUS_DATATYPE_MISALIGNMENT) || \\\n   (RpcExceptionCode() == RPC_X_BAD_STUB_DATA) || \\\n   (RpcExceptionCode() == RPC_S_INVALID_BOUND))\n\ntypedef struct\n{\n  void *pad[2];\n  void *userContext;\n} *NDR_SCONTEXT;\n\n#define NDRSContextValue(hContext) (&(hContext)->userContext)\n#define cbNDRContext 20\n\ntypedef void (__RPC_USER *NDR_RUNDOWN)(void *context);\ntypedef void (__RPC_USER *NDR_NOTIFY_ROUTINE)(void);\ntypedef void (__RPC_USER *NDR_NOTIFY2_ROUTINE)(boolean flag);\n\n#define DECLSPEC_UUID(x)\n#define MIDL_INTERFACE(x)   struct\n\nstruct _MIDL_STUB_MESSAGE;\nstruct _MIDL_STUB_DESC;\nstruct _FULL_PTR_XLAT_TABLES;\nstruct NDR_ALLOC_ALL_NODES_CONTEXT;\nstruct NDR_POINTER_QUEUE_STATE;\n\ntypedef unsigned char *RPC_BUFPTR;\ntypedef ULONG RPC_LENGTH;\ntypedef void (__RPC_USER *EXPR_EVAL)(struct _MIDL_STUB_MESSAGE *);\ntypedef const unsigned char *PFORMAT_STRING;\n\ntypedef struct\n{\n  LONG Dimension;\n  ULONG *BufferConformanceMark;\n  ULONG *BufferVarianceMark;\n  ULONG *MaxCountArray;\n  ULONG *OffsetArray;\n  ULONG *ActualCountArray;\n} ARRAY_INFO, *PARRAY_INFO;\n\ntypedef struct\n{\n  ULONG WireCodeset;\n  ULONG DesiredReceivingCodeset;\n  void *CSArrayInfo;\n} CS_STUB_INFO;\n\ntypedef struct _NDR_PIPE_DESC *PNDR_PIPE_DESC;\ntypedef struct _NDR_PIPE_MESSAGE *PNDR_PIPE_MESSAGE;\ntypedef struct _NDR_ASYNC_MESSAGE *PNDR_ASYNC_MESSAGE;\ntypedef struct _NDR_CORRELATION_INFO *PNDR_CORRELATION_INFO;\n\ntypedef struct _MIDL_STUB_MESSAGE\n{\n  PRPC_MESSAGE RpcMsg;\n  unsigned char *Buffer;\n  unsigned char *BufferStart;\n  unsigned char *BufferEnd;\n  unsigned char *BufferMark;\n  ULONG BufferLength;\n  ULONG MemorySize;\n  unsigned char *Memory;\n  unsigned char IsClient;\n  unsigned char Pad;\n  unsigned short uFlags2;\n  int ReuseBuffer;\n  struct NDR_ALLOC_ALL_NODES_CONTEXT *pAllocAllNodesContext;\n  struct NDR_POINTER_QUEUE_STATE *pPointerQueueState;\n  int IgnoreEmbeddedPointers;\n  unsigned char *PointerBufferMark;\n  unsigned char CorrDespIncrement;\n  unsigned char uFlags;\n  unsigned short UniquePtrCount;\n  ULONG_PTR MaxCount;\n  ULONG Offset;\n  ULONG ActualCount;\n  void * (__WINE_ALLOC_SIZE(1) __RPC_API *pfnAllocate)(SIZE_T);\n  void (__RPC_API *pfnFree)(void *);\n  unsigned char *StackTop;\n  unsigned char *pPresentedType;\n  unsigned char *pTransmitType;\n  handle_t SavedHandle;\n  const struct _MIDL_STUB_DESC *StubDesc;\n  struct _FULL_PTR_XLAT_TABLES *FullPtrXlatTables;\n  ULONG FullPtrRefId;\n  ULONG PointerLength;\n  unsigned int fInDontFree:1;\n  unsigned int fDontCallFreeInst:1;\n  unsigned int fInOnlyParam:1;\n  unsigned int fHasReturn:1;\n  unsigned int fHasExtensions:1;\n  unsigned int fHasNewCorrDesc:1;\n  unsigned int fIsIn:1;\n  unsigned int fIsOut:1;\n  unsigned int fIsOicf:1;\n  unsigned int fBufferValid:1;\n  unsigned int fHasMemoryValidateCallback:1;\n  unsigned int fInFree:1;\n  unsigned int fNeedMCCP:1;\n  int fUnused:3;\n  int fUnused2:16;\n  DWORD dwDestContext;\n  void *pvDestContext;\n  NDR_SCONTEXT *SavedContextHandles;\n  LONG ParamNumber;\n  struct IRpcChannelBuffer *pRpcChannelBuffer;\n  PARRAY_INFO pArrayInfo;\n  ULONG *SizePtrCountArray;\n  ULONG *SizePtrOffsetArray;\n  ULONG *SizePtrLengthArray;\n  void *pArgQueue;\n  DWORD dwStubPhase;\n  void *LowStackMark;\n  PNDR_ASYNC_MESSAGE pAsyncMsg;\n  PNDR_CORRELATION_INFO pCorrInfo;\n  unsigned char *pCorrMemory;\n  void *pMemoryList;\n  CS_STUB_INFO *pCSInfo;\n  unsigned char *ConformanceMark;\n  unsigned char *VarianceMark;\n  INT_PTR Unused; /* BackingStoreLowMark on IA64 */\n  struct _NDR_PROC_CONTEXT *pContext;\n  void* ContextHandleHash;\n  void* pUserMarshalList;\n  INT_PTR Reserved51_3;\n  INT_PTR Reserved51_4;\n  INT_PTR Reserved51_5;\n} MIDL_STUB_MESSAGE, *PMIDL_STUB_MESSAGE;\n\ntypedef void * (__RPC_API * GENERIC_BINDING_ROUTINE)(void *);\ntypedef void (__RPC_API * GENERIC_UNBIND_ROUTINE)(void *, unsigned char *);\n\ntypedef struct _GENERIC_BINDING_ROUTINE_PAIR\n{\n  GENERIC_BINDING_ROUTINE pfnBind;\n  GENERIC_UNBIND_ROUTINE pfnUnbind;\n} GENERIC_BINDING_ROUTINE_PAIR, *PGENERIC_BINDING_ROUTINE_PAIR;\n\ntypedef struct __GENERIC_BINDING_INFO\n{\n  void *pObj;\n  unsigned int Size;\n  GENERIC_BINDING_ROUTINE pfnBind;\n  GENERIC_UNBIND_ROUTINE pfnUnbind;\n} GENERIC_BINDING_INFO, *PGENERIC_BINDING_INFO;\n\ntypedef void (__RPC_USER *XMIT_HELPER_ROUTINE)(PMIDL_STUB_MESSAGE);\n\ntypedef struct _XMIT_ROUTINE_QUINTUPLE\n{\n  XMIT_HELPER_ROUTINE pfnTranslateToXmit;\n  XMIT_HELPER_ROUTINE pfnTranslateFromXmit;\n  XMIT_HELPER_ROUTINE pfnFreeXmit;\n  XMIT_HELPER_ROUTINE pfnFreeInst;\n} XMIT_ROUTINE_QUINTUPLE, *PXMIT_ROUTINE_QUINTUPLE;\n\ntypedef ULONG (__RPC_USER *USER_MARSHAL_SIZING_ROUTINE)(ULONG *, ULONG, void *);\ntypedef unsigned char * (__RPC_USER *USER_MARSHAL_MARSHALLING_ROUTINE)(ULONG *, unsigned char *, void *);\ntypedef unsigned char * (__RPC_USER *USER_MARSHAL_UNMARSHALLING_ROUTINE)(ULONG *, unsigned char *, void *);\ntypedef void (__RPC_USER *USER_MARSHAL_FREEING_ROUTINE)(ULONG *, void *);\n\ntypedef struct _USER_MARSHAL_ROUTINE_QUADRUPLE\n{\n  USER_MARSHAL_SIZING_ROUTINE pfnBufferSize;\n  USER_MARSHAL_MARSHALLING_ROUTINE pfnMarshall;\n  USER_MARSHAL_UNMARSHALLING_ROUTINE pfnUnmarshall;\n  USER_MARSHAL_FREEING_ROUTINE pfnFree;\n} USER_MARSHAL_ROUTINE_QUADRUPLE;\n\n/* 'USRC' */\n#define USER_MARSHAL_CB_SIGNATURE \\\n\t( ( (DWORD)'U' << 24 ) | ( (DWORD)'S' << 16 ) | \\\n\t  ( (DWORD)'R' << 8  ) | ( (DWORD)'C'       ) )\n\ntypedef enum\n{\n    USER_MARSHAL_CB_BUFFER_SIZE,\n    USER_MARSHAL_CB_MARSHALL,\n    USER_MARSHAL_CB_UNMARSHALL,\n    USER_MARSHAL_CB_FREE\n} USER_MARSHAL_CB_TYPE;\n\ntypedef struct _USER_MARSHAL_CB\n{\n    ULONG Flags;\n    PMIDL_STUB_MESSAGE pStubMsg;\n    PFORMAT_STRING pReserve;\n    ULONG Signature;\n    USER_MARSHAL_CB_TYPE CBType;\n    PFORMAT_STRING pFormat;\n    PFORMAT_STRING pTypeFormat;\n} USER_MARSHAL_CB;\n\n#define USER_CALL_CTXT_MASK(f) ((f) & 0x00ff)\n#define USER_CALL_AUX_MASK(f) ((f) & 0xff00)\n#define GET_USER_DATA_REP(f) HIWORD(f)\n\n#define USER_CALL_IS_ASYNC 0x0100\n#define USER_CALL_NEW_CORRELATION_DESC 0x0200\n\ntypedef struct _MALLOC_FREE_STRUCT\n{\n  void * (__WINE_ALLOC_SIZE(1) __RPC_USER *pfnAllocate)(SIZE_T);\n  void   (__RPC_USER *pfnFree)(void *);\n} MALLOC_FREE_STRUCT;\n\ntypedef struct _COMM_FAULT_OFFSETS\n{\n  short CommOffset;\n  short FaultOffset;\n} COMM_FAULT_OFFSETS;\n\ntypedef struct _MIDL_STUB_DESC\n{\n  void *RpcInterfaceInformation;\n  void * (__WINE_ALLOC_SIZE(1) __RPC_API *pfnAllocate)(SIZE_T);\n  void (__RPC_API *pfnFree)(void *);\n  union {\n    handle_t *pAutoHandle;\n    handle_t *pPrimitiveHandle;\n    PGENERIC_BINDING_INFO pGenericBindingInfo;\n  } IMPLICIT_HANDLE_INFO;\n  const NDR_RUNDOWN *apfnNdrRundownRoutines;\n  const GENERIC_BINDING_ROUTINE_PAIR *aGenericBindingRoutinePairs;\n  const EXPR_EVAL *apfnExprEval;\n  const XMIT_ROUTINE_QUINTUPLE *aXmitQuintuple;\n  const unsigned char *pFormatTypes;\n  int fCheckBounds;\n  ULONG Version;\n  MALLOC_FREE_STRUCT *pMallocFreeStruct;\n  LONG MIDLVersion;\n  const COMM_FAULT_OFFSETS *CommFaultOffsets;\n  const USER_MARSHAL_ROUTINE_QUADRUPLE *aUserMarshalQuadruple;\n  const NDR_NOTIFY_ROUTINE *NotifyRoutineTable;\n  ULONG_PTR mFlags;\n  ULONG_PTR Reserved3;\n  ULONG_PTR Reserved4;\n  ULONG_PTR Reserved5;\n} MIDL_STUB_DESC;\ntypedef const MIDL_STUB_DESC *PMIDL_STUB_DESC;\n\ntypedef struct _MIDL_FORMAT_STRING\n{\n  short Pad;\n#if defined(__GNUC__)\n  unsigned char Format[0];\n#else\n  unsigned char Format[1];\n#endif\n} MIDL_FORMAT_STRING;\n\ntypedef struct _MIDL_SYNTAX_INFO\n{\n  RPC_SYNTAX_IDENTIFIER TransferSyntax;\n  RPC_DISPATCH_TABLE* DispatchTable;\n  PFORMAT_STRING ProcString;\n  const unsigned short* FmtStringOffset;\n  PFORMAT_STRING TypeString;\n  const void* aUserMarshalQuadruple;\n  ULONG_PTR pReserved1;\n  ULONG_PTR pReserved2;\n} MIDL_SYNTAX_INFO, *PMIDL_SYNTAX_INFO;\n\ntypedef void (__RPC_API *STUB_THUNK)( PMIDL_STUB_MESSAGE );\n\n#ifdef WINE_STRICT_PROTOTYPES\ntypedef LONG (__RPC_API *SERVER_ROUTINE)(void);\n#else\ntypedef LONG (__RPC_API *SERVER_ROUTINE)();\n#endif\n\ntypedef struct _MIDL_SERVER_INFO_\n{\n  PMIDL_STUB_DESC pStubDesc;\n  const SERVER_ROUTINE *DispatchTable;\n  PFORMAT_STRING ProcString;\n  const unsigned short *FmtStringOffset;\n  const STUB_THUNK *ThunkTable;\n  PRPC_SYNTAX_IDENTIFIER pTransferSyntax;\n  ULONG_PTR nCount;\n  PMIDL_SYNTAX_INFO pSyntaxInfo;\n} MIDL_SERVER_INFO, *PMIDL_SERVER_INFO;\n\ntypedef struct _MIDL_STUBLESS_PROXY_INFO\n{\n  PMIDL_STUB_DESC pStubDesc;\n  PFORMAT_STRING ProcFormatString;\n  const unsigned short *FormatStringOffset;\n  PRPC_SYNTAX_IDENTIFIER pTransferSyntax;\n  ULONG_PTR nCount;\n  PMIDL_SYNTAX_INFO pSyntaxInfo;\n} MIDL_STUBLESS_PROXY_INFO, *PMIDL_STUBLESS_PROXY_INFO;\n\n\n#if defined(__i386__) && !defined(_MSC_VER) && !defined(__MINGW32__) && !defined(__CYGWIN__)\n/* Calling convention for returning structures/unions is different between Windows and gcc on i386 */\ntypedef LONG_PTR CLIENT_CALL_RETURN;\n#else\ntypedef union _CLIENT_CALL_RETURN\n{\n  void *Pointer;\n  LONG_PTR Simple;\n} CLIENT_CALL_RETURN;\n#endif\n\ntypedef enum {\n  STUB_UNMARSHAL,\n  STUB_CALL_SERVER,\n  STUB_MARSHAL,\n  STUB_CALL_SERVER_NO_HRESULT\n} STUB_PHASE;\n\ntypedef enum {\n  PROXY_CALCSIZE,\n  PROXY_GETBUFFER,\n  PROXY_MARSHAL,\n  PROXY_SENDRECEIVE,\n  PROXY_UNMARSHAL\n} PROXY_PHASE;\n\ntypedef enum {\n  XLAT_SERVER = 1,\n  XLAT_CLIENT\n} XLAT_SIDE;\n\ntypedef struct _FULL_PTR_TO_REFID_ELEMENT {\n  struct _FULL_PTR_TO_REFID_ELEMENT *Next;\n  void *Pointer;\n  ULONG RefId;\n  unsigned char State;\n} FULL_PTR_TO_REFID_ELEMENT, *PFULL_PTR_TO_REFID_ELEMENT;\n\n/* Full pointer translation tables */\ntypedef struct _FULL_PTR_XLAT_TABLES {\n  struct {\n    void **XlatTable;\n    unsigned char *StateTable;\n    ULONG NumberOfEntries;\n  } RefIdToPointer;\n\n  struct {\n    PFULL_PTR_TO_REFID_ELEMENT *XlatTable;\n    ULONG NumberOfBuckets;\n    ULONG HashMask;\n  } PointerToRefId;\n\n  ULONG                   NextRefId;\n  XLAT_SIDE               XlatSide;\n} FULL_PTR_XLAT_TABLES,  *PFULL_PTR_XLAT_TABLES;\n\nstruct IRpcStubBuffer;\n\ntypedef ULONG error_status_t;\ntypedef void  * NDR_CCONTEXT;\n\ntypedef struct _SCONTEXT_QUEUE {\n  ULONG NumberOfObjects;\n  NDR_SCONTEXT *ArrayOfObjects;\n} SCONTEXT_QUEUE, *PSCONTEXT_QUEUE;\n\ntypedef struct _NDR_USER_MARSHAL_INFO_LEVEL1\n{\n    void *Buffer;\n    ULONG BufferSize;\n    void * (__WINE_ALLOC_SIZE(1) __RPC_API *pfnAllocate)(SIZE_T);\n    void (__RPC_API *pfnFree)(void *);\n    struct IRpcChannelBuffer *pRpcChannelBuffer;\n    ULONG_PTR Reserved[5];\n} NDR_USER_MARSHAL_INFO_LEVEL1;\n\ntypedef struct _NDR_USER_MARSHAL_INFO\n{\n    ULONG InformationLevel;\n    union\n    {\n        NDR_USER_MARSHAL_INFO_LEVEL1 Level1;\n    } DUMMYUNIONNAME1;\n} NDR_USER_MARSHAL_INFO;\n\n/* Context Handles */\n\nRPCRTAPI RPC_BINDING_HANDLE RPC_ENTRY\n  NDRCContextBinding( NDR_CCONTEXT CContext );\n\nRPCRTAPI void RPC_ENTRY\n  NDRCContextMarshall( NDR_CCONTEXT CContext, void *pBuff );\n\nRPCRTAPI void RPC_ENTRY\n  NDRCContextUnmarshall( NDR_CCONTEXT *pCContext, RPC_BINDING_HANDLE hBinding,\n                         void *pBuff, ULONG DataRepresentation );\n\nRPCRTAPI void RPC_ENTRY\n  NDRSContextMarshall( NDR_SCONTEXT CContext, void *pBuff, NDR_RUNDOWN userRunDownIn );\n\nRPCRTAPI NDR_SCONTEXT RPC_ENTRY\n  NDRSContextUnmarshall( void *pBuff, ULONG DataRepresentation );\n\nRPCRTAPI void RPC_ENTRY\n  NDRSContextMarshallEx( RPC_BINDING_HANDLE BindingHandle, NDR_SCONTEXT CContext,\n                         void *pBuff, NDR_RUNDOWN userRunDownIn );\n\nRPCRTAPI void RPC_ENTRY\n  NDRSContextMarshall2( RPC_BINDING_HANDLE BindingHandle, NDR_SCONTEXT CContext,\n                        void *pBuff, NDR_RUNDOWN userRunDownIn, void * CtxGuard,\n                        ULONG Flags );\n\nRPCRTAPI NDR_SCONTEXT RPC_ENTRY\n  NDRSContextUnmarshallEx( RPC_BINDING_HANDLE BindingHandle, void *pBuff,\n                           ULONG DataRepresentation );\n\nRPCRTAPI NDR_SCONTEXT RPC_ENTRY\n  NDRSContextUnmarshall2( RPC_BINDING_HANDLE BindingHandle, void *pBuff,\n                          ULONG DataRepresentation, void *CtxGuard,\n                          ULONG Flags );\n\nRPCRTAPI void RPC_ENTRY\n  NdrClientContextMarshall ( PMIDL_STUB_MESSAGE pStubMsg, NDR_CCONTEXT ContextHandle, int fCheck );\n\nRPCRTAPI void RPC_ENTRY\n  NdrClientContextUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, NDR_CCONTEXT* pContextHandle,\n                              RPC_BINDING_HANDLE BindHandle );\n\nRPCRTAPI void RPC_ENTRY\n  NdrServerContextMarshall ( PMIDL_STUB_MESSAGE pStubMsg, NDR_SCONTEXT ContextHandle, NDR_RUNDOWN RundownRoutine );\n\nRPCRTAPI NDR_SCONTEXT RPC_ENTRY\n  NdrServerContextUnmarshall( PMIDL_STUB_MESSAGE pStubMsg );\n\nRPCRTAPI void RPC_ENTRY\n  NdrContextHandleSize( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat );\n\nRPCRTAPI NDR_SCONTEXT RPC_ENTRY\n  NdrContextHandleInitialize( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );\n\nRPCRTAPI void RPC_ENTRY\n  NdrServerContextNewMarshall( PMIDL_STUB_MESSAGE pStubMsg, NDR_SCONTEXT ContextHandle,\n                               NDR_RUNDOWN RundownRoutine, PFORMAT_STRING pFormat );\n\nRPCRTAPI NDR_SCONTEXT RPC_ENTRY\n  NdrServerContextNewUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  RpcSmDestroyClientContext( void **ContextHandle );\n\nRPCRTAPI void RPC_ENTRY\n  RpcSsDestroyClientContext( void **ContextHandle );\n\nRPCRTAPI void RPC_ENTRY\n  NdrSimpleTypeMarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, unsigned char FormatChar );\nRPCRTAPI void RPC_ENTRY\n  NdrSimpleTypeUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, unsigned char FormatChar );\n\nRPCRTAPI unsigned char* RPC_ENTRY\n  NdrByteCountPointerMarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat );\nRPCRTAPI unsigned char* RPC_ENTRY\n  NdrByteCountPointerUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char** ppMemory, PFORMAT_STRING pFormat, unsigned char fMustAlloc );\nRPCRTAPI void RPC_ENTRY\n  NdrByteCountPointerBufferSize( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat );\nRPCRTAPI void RPC_ENTRY\n  NdrByteCountPointerFree( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat );\n\nRPCRTAPI unsigned char* RPC_ENTRY\n  NdrRangeUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char** ppMemory, PFORMAT_STRING pFormat, unsigned char fMustAlloc );\n\n/* while MS declares each prototype separately, I prefer to use macros for this kind of thing instead */\n#define SIMPLE_TYPE_MARSHAL(type) \\\nRPCRTAPI unsigned char* RPC_ENTRY \\\n  Ndr##type##Marshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat ); \\\nRPCRTAPI unsigned char* RPC_ENTRY \\\n  Ndr##type##Unmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char** ppMemory, PFORMAT_STRING pFormat, unsigned char fMustAlloc ); \\\nRPCRTAPI void RPC_ENTRY \\\n  Ndr##type##BufferSize( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat ); \\\nRPCRTAPI ULONG RPC_ENTRY \\\n  Ndr##type##MemorySize( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );\n\n#define TYPE_MARSHAL(type) \\\n  SIMPLE_TYPE_MARSHAL(type) \\\nRPCRTAPI void RPC_ENTRY \\\n  Ndr##type##Free( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat );\n\nTYPE_MARSHAL(Pointer)\nTYPE_MARSHAL(SimpleStruct)\nTYPE_MARSHAL(ConformantStruct)\nTYPE_MARSHAL(ConformantVaryingStruct)\nTYPE_MARSHAL(ComplexStruct)\nTYPE_MARSHAL(FixedArray)\nTYPE_MARSHAL(ConformantArray)\nTYPE_MARSHAL(ConformantVaryingArray)\nTYPE_MARSHAL(VaryingArray)\nTYPE_MARSHAL(ComplexArray)\nTYPE_MARSHAL(EncapsulatedUnion)\nTYPE_MARSHAL(NonEncapsulatedUnion)\nTYPE_MARSHAL(XmitOrRepAs)\nTYPE_MARSHAL(UserMarshal)\nTYPE_MARSHAL(InterfacePointer)\n\nSIMPLE_TYPE_MARSHAL(ConformantString)\nSIMPLE_TYPE_MARSHAL(NonConformantString)\n\n#undef TYPE_MARSHAL\n#undef SIMPLE_TYPE_MARSHAL\n\nRPCRTAPI void RPC_ENTRY\n  NdrCorrelationInitialize( PMIDL_STUB_MESSAGE pStubMsg, void *pMemory, ULONG CacheSize, ULONG flags );\nRPCRTAPI void RPC_ENTRY\n  NdrCorrelationPass( PMIDL_STUB_MESSAGE pStubMsg );\nRPCRTAPI void RPC_ENTRY\n  NdrCorrelationFree( PMIDL_STUB_MESSAGE pStubMsg );\n\nRPCRTAPI void RPC_ENTRY\n  NdrConvert2( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, LONG NumberParams );\nRPCRTAPI void RPC_ENTRY\n  NdrConvert( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );\n\n#define USER_MARSHAL_FC_BYTE    1\n#define USER_MARSHAL_FC_CHAR    2\n#define USER_MARSHAL_FC_SMALL   3\n#define USER_MARSHAL_FC_USMALL  4\n#define USER_MARSHAL_FC_WCHAR   5\n#define USER_MARSHAL_FC_SHORT   6\n#define USER_MARSHAL_FC_USHORT  7\n#define USER_MARSHAL_FC_LONG    8\n#define USER_MARSHAL_FC_ULONG   9\n#define USER_MARSHAL_FC_FLOAT   10\n#define USER_MARSHAL_FC_HYPER   11\n#define USER_MARSHAL_FC_DOUBLE  12\n\nRPCRTAPI unsigned char* RPC_ENTRY\n  NdrUserMarshalSimpleTypeConvert( ULONG *pFlags, unsigned char *pBuffer, unsigned char FormatChar );\n\nCLIENT_CALL_RETURN RPC_VAR_ENTRY\n  NdrClientCall2( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );\nCLIENT_CALL_RETURN RPC_VAR_ENTRY\n  NdrClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );\nCLIENT_CALL_RETURN RPC_VAR_ENTRY\n  NdrAsyncClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );\nCLIENT_CALL_RETURN RPC_VAR_ENTRY\n  NdrDcomAsyncClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );\n\nRPCRTAPI void RPC_ENTRY\n  NdrServerCall2( PRPC_MESSAGE pRpcMsg );\nRPCRTAPI void RPC_ENTRY\n  NdrServerCall( PRPC_MESSAGE pRpcMsg );\nRPCRTAPI void RPC_ENTRY\n  NdrAsyncServerCall( PRPC_MESSAGE pRpcMsg );\n\nRPCRTAPI LONG RPC_ENTRY\n  NdrStubCall2( struct IRpcStubBuffer* pThis, struct IRpcChannelBuffer* pChannel, PRPC_MESSAGE pRpcMsg, DWORD * pdwStubPhase );\nRPCRTAPI LONG RPC_ENTRY\n  NdrStubCall( struct IRpcStubBuffer* pThis, struct IRpcChannelBuffer* pChannel, PRPC_MESSAGE pRpcMsg, DWORD * pdwStubPhase );\nRPCRTAPI LONG RPC_ENTRY\n  NdrAsyncStubCall( struct IRpcStubBuffer* pThis, struct IRpcChannelBuffer* pChannel, PRPC_MESSAGE pRpcMsg, DWORD * pdwStubPhase );\nRPCRTAPI LONG RPC_ENTRY\n  NdrDcomAsyncStubCall( struct IRpcStubBuffer* pThis, struct IRpcChannelBuffer* pChannel, PRPC_MESSAGE pRpcMsg, DWORD * pdwStubPhase );\n\nRPCRTAPI void* RPC_ENTRY\n  NdrAllocate( PMIDL_STUB_MESSAGE pStubMsg, SIZE_T Len ) __WINE_ALLOC_SIZE(2);\n\nRPCRTAPI void RPC_ENTRY\n  NdrClearOutParameters( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, void *ArgAddr );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  NdrMapCommAndFaultStatus( PMIDL_STUB_MESSAGE pStubMsg, ULONG *pCommStatus,\n                            ULONG *pFaultStatus, RPC_STATUS Status_ );\n\nRPCRTAPI void* RPC_ENTRY\n  NdrOleAllocate( SIZE_T Size ) __WINE_ALLOC_SIZE(1);\nRPCRTAPI void RPC_ENTRY\n  NdrOleFree( void* NodeToFree );\n\nRPCRTAPI void RPC_ENTRY\n  NdrClientInitialize( PRPC_MESSAGE pRpcMessage, PMIDL_STUB_MESSAGE pStubMsg,\n                       PMIDL_STUB_DESC pStubDesc, unsigned int ProcNum );\nRPCRTAPI void RPC_ENTRY\n  NdrClientInitializeNew( PRPC_MESSAGE pRpcMessage, PMIDL_STUB_MESSAGE pStubMsg,\n                          PMIDL_STUB_DESC pStubDesc, unsigned int ProcNum );\nRPCRTAPI unsigned char* RPC_ENTRY\n  NdrServerInitialize( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc );\nRPCRTAPI unsigned char* RPC_ENTRY\n  NdrServerInitializeNew( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc );\nRPCRTAPI unsigned char* RPC_ENTRY\n  NdrServerInitializeUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc, PRPC_MESSAGE pRpcMsg );\nRPCRTAPI void RPC_ENTRY\n  NdrServerInitializeMarshall( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg  );\nRPCRTAPI void RPC_ENTRY\n  NdrServerMarshall( struct IRpcStubBuffer *pThis, struct IRpcChannelBuffer *pChannel, PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );\nRPCRTAPI void RPC_ENTRY\n  NdrServerUnmarshall( struct IRpcChannelBuffer *pChannel, PRPC_MESSAGE pRpcMsg,\n                       PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc,\n                       PFORMAT_STRING pFormat, void *pParamList );\nRPCRTAPI unsigned char* RPC_ENTRY\n  NdrGetBuffer( PMIDL_STUB_MESSAGE stubmsg, ULONG buflen, RPC_BINDING_HANDLE handle );\nRPCRTAPI void RPC_ENTRY\n  NdrFreeBuffer( PMIDL_STUB_MESSAGE pStubMsg );\nRPCRTAPI unsigned char* RPC_ENTRY\n  NdrSendReceive( PMIDL_STUB_MESSAGE stubmsg, unsigned char *buffer );\n\nRPCRTAPI unsigned char * RPC_ENTRY\n  NdrNsGetBuffer( PMIDL_STUB_MESSAGE pStubMsg, ULONG BufferLength, RPC_BINDING_HANDLE Handle );\nRPCRTAPI unsigned char * RPC_ENTRY\n  NdrNsSendReceive( PMIDL_STUB_MESSAGE pStubMsg, unsigned char *pBufferEnd, RPC_BINDING_HANDLE *pAutoHandle );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  NdrGetDcomProtocolVersion( PMIDL_STUB_MESSAGE pStubMsg, RPC_VERSION *pVersion );\n\nRPCRTAPI PFULL_PTR_XLAT_TABLES RPC_ENTRY\n  NdrFullPointerXlatInit( ULONG NumberOfPointers, XLAT_SIDE XlatSide );\nRPCRTAPI void RPC_ENTRY\n  NdrFullPointerXlatFree( PFULL_PTR_XLAT_TABLES pXlatTables );\nRPCRTAPI int RPC_ENTRY\n  NdrFullPointerQueryPointer( PFULL_PTR_XLAT_TABLES pXlatTables, void *pPointer,\n                              unsigned char QueryType, ULONG *pRefId );\nRPCRTAPI int RPC_ENTRY\n  NdrFullPointerQueryRefId( PFULL_PTR_XLAT_TABLES pXlatTables, ULONG RefId,\n                            unsigned char QueryType, void **ppPointer );\nRPCRTAPI void RPC_ENTRY\n  NdrFullPointerInsertRefId( PFULL_PTR_XLAT_TABLES pXlatTables, ULONG RefId, void *pPointer );\nRPCRTAPI int RPC_ENTRY\n  NdrFullPointerFree( PFULL_PTR_XLAT_TABLES pXlatTables, void *Pointer );\n\nRPCRTAPI void RPC_ENTRY\n  NdrRpcSsEnableAllocate( PMIDL_STUB_MESSAGE pMessage );\nRPCRTAPI void RPC_ENTRY\n  NdrRpcSsDisableAllocate( PMIDL_STUB_MESSAGE pMessage );\nRPCRTAPI void RPC_ENTRY\n  NdrRpcSmSetClientToOsf( PMIDL_STUB_MESSAGE pMessage );\nRPCRTAPI void * RPC_ENTRY\n  NdrRpcSmClientAllocate( SIZE_T Size ) __WINE_ALLOC_SIZE(1);\nRPCRTAPI void RPC_ENTRY\n  NdrRpcSmClientFree( void *NodeToFree );\nRPCRTAPI void * RPC_ENTRY\n  NdrRpcSsDefaultAllocate( SIZE_T Size ) __WINE_ALLOC_SIZE(1);\nRPCRTAPI void RPC_ENTRY\n  NdrRpcSsDefaultFree( void *NodeToFree );\n\nRPCRTAPI RPC_STATUS RPC_ENTRY\n  NdrGetUserMarshalInfo( ULONG *pFlags, ULONG InformationLevel, NDR_USER_MARSHAL_INFO *pMarshalInfo );\n\n#ifdef __cplusplus\n}\n#endif\n#endif /*__WINE_RPCNDR_H */\n"
  },
  {
    "path": "wine/windows/rpcnterr.h",
    "content": "/*\n * Copyright (C) 2001 Peter Hunnisett\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __RPCNTERR_H__\n#define __RPCNTERR_H__\n\n#define RPC_S_OK                          ERROR_SUCCESS\n#define RPC_S_INVALID_ARG                 ERROR_INVALID_PARAMETER\n#define RPC_S_OUT_OF_MEMORY               ERROR_OUTOFMEMORY\n#define RPC_S_OUT_OF_THREADS              ERROR_MAX_THRDS_REACHED\n#define RPC_S_INVALID_LEVEL               ERROR_INVALID_PARAMETER\n#define RPC_S_BUFFER_TOO_SMALL            ERROR_INSUFFICIENT_BUFFER\n#define RPC_S_INVALID_SECURITY_DESC       ERROR_INVALID_SECURITY_DESCR\n#define RPC_S_ACCESS_DENIED               ERROR_ACCESS_DENIED\n#define RPC_S_SERVER_OUT_OF_MEMORY        ERROR_NOT_ENOUGH_SERVER_MEMORY\n#define RPC_S_ASYNC_CALL_PENDING          ERROR_IO_PENDING\n#define RPC_S_UNKNOWN_PRINCIPAL           ERROR_NONE_MAPPED\n#define RPC_S_TIMEOUT                     ERROR_TIMEOUT\n\n#define RPC_X_NO_MEMORY                   RPC_S_OUT_OF_MEMORY\n#define RPC_X_INVALID_BOUND               RPC_S_INVALID_BOUND\n#define RPC_X_INVALID_TAG                 RPC_S_INVALID_TAG\n#define RPC_X_ENUM_VALUE_TOO_LARGE        RPC_X_ENUM_VALUE_OUT_OF_RANGE\n#define RPC_X_SS_CONTEXT_MISMATCH         ERROR_INVALID_HANDLE\n#define RPC_X_INVALID_BUFFER              ERROR_INVALID_USER_BUFFER\n#define RPC_X_PIPE_APP_MEMORY             ERROR_OUTOFMEMORY\n#define RPC_X_INVALID_PIPE_OPERATION      RPC_X_WRONG_PIPE_ORDER\n\n#endif  /* __RPCNTERR_H__ */\n"
  },
  {
    "path": "wine/windows/rpcproxy.h",
    "content": "/*\n * Copyright (C) 2001 Ove Kaaven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __RPCPROXY_H_VERSION__\n/* FIXME: Find an appropriate version number.  I guess something is better than nothing */\n#define __RPCPROXY_H_VERSION__ ( 399 )\n#endif\n\n#ifndef __WINE_RPCPROXY_H\n#define __WINE_RPCPROXY_H\n\n#define __midl_proxy\n\n#include <basetsd.h>\n#ifndef GUID_DEFINED\n#include <guiddef.h>\n#endif\n#include <rpc.h>\n#include <rpcndr.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct tagCInterfaceStubVtbl *PCInterfaceStubVtblList;\ntypedef struct tagCInterfaceProxyVtbl *PCInterfaceProxyVtblList;\ntypedef const char *PCInterfaceName;\ntypedef int __stdcall IIDLookupRtn( const IID *pIID, int *pIndex );\ntypedef IIDLookupRtn *PIIDLookup;\n\ntypedef struct tagProxyFileInfo\n{\n  const PCInterfaceProxyVtblList *pProxyVtblList;\n  const PCInterfaceStubVtblList *pStubVtblList;\n  const PCInterfaceName *pNamesArray;\n  const IID **pDelegatedIIDs;\n  const PIIDLookup pIIDLookupRtn;\n  unsigned short TableSize;\n  unsigned short TableVersion;\n  const IID **pAsyncIIDLookup;\n  LONG_PTR Filler2;\n  LONG_PTR Filler3;\n  LONG_PTR Filler4;\n} ProxyFileInfo;\n\ntypedef ProxyFileInfo ExtendedProxyFileInfo;\n\ntypedef struct tagCInterfaceProxyHeader\n{\n#ifdef USE_STUBLESS_PROXY\n  const void *pStublessProxyInfo;\n#endif\n  const IID *piid;\n} CInterfaceProxyHeader;\n\n#define CINTERFACE_PROXY_VTABLE(n) \\\n  struct \\\n  { \\\n    CInterfaceProxyHeader header; \\\n    void *Vtbl[n]; \\\n  }\n\ntypedef struct tagCInterfaceProxyVtbl\n{\n  CInterfaceProxyHeader header;\n#if defined(__GNUC__)\n  void *Vtbl[0];\n#else\n  void *Vtbl[1];\n#endif\n} CInterfaceProxyVtbl;\n\ntypedef void (__RPC_STUB *PRPC_STUB_FUNCTION)(\n  IRpcStubBuffer *This,\n  IRpcChannelBuffer *_pRpcChannelBuffer,\n  PRPC_MESSAGE _pRpcMessage,\n  DWORD *pdwStubPhase);\n\ntypedef struct tagCInterfaceStubHeader\n{\n  const IID *piid;\n  const MIDL_SERVER_INFO *pServerInfo;\n  ULONG DispatchTableCount;\n  const PRPC_STUB_FUNCTION *pDispatchTable;\n} CInterfaceStubHeader;\n\ntypedef struct tagCInterfaceStubVtbl\n{\n  CInterfaceStubHeader header;\n  IRpcStubBufferVtbl Vtbl;\n} CInterfaceStubVtbl;\n\ntypedef struct tagCStdStubBuffer\n{\n  const IRpcStubBufferVtbl *lpVtbl;\n  LONG RefCount;\n  struct IUnknown *pvServerObject;\n  const struct ICallFactoryVtbl *pCallFactoryVtbl;\n  const IID *pAsyncIID;\n  struct IPSFactoryBuffer *pPSFactory;\n} CStdStubBuffer;\n\ntypedef struct tagCStdPSFactoryBuffer\n{\n  const IPSFactoryBufferVtbl *lpVtbl;\n  LONG RefCount;\n  const ProxyFileInfo **pProxyFileList;\n  LONG Filler1;\n} CStdPSFactoryBuffer;\n\n#define STUB_FORWARDING_FUNCTION NdrStubForwardingFunction\n\nULONG STDMETHODCALLTYPE CStdStubBuffer2_Release(IRpcStubBuffer *This) DECLSPEC_HIDDEN;\nULONG STDMETHODCALLTYPE NdrCStdStubBuffer2_Release(IRpcStubBuffer *This, IPSFactoryBuffer *pPSF);\n\n#define CStdStubBuffer_DELEGATING_METHODS 0, 0, CStdStubBuffer2_Release, 0, 0, 0, 0, 0, 0, 0\n\n\nHRESULT WINAPI\n  CStdStubBuffer_QueryInterface( IRpcStubBuffer *This, REFIID riid, void **ppvObject );\nULONG WINAPI\n  CStdStubBuffer_AddRef( IRpcStubBuffer *This );\nULONG WINAPI\n  CStdStubBuffer_Release( IRpcStubBuffer *This ) DECLSPEC_HIDDEN;\nULONG WINAPI\n  NdrCStdStubBuffer_Release( IRpcStubBuffer *This, IPSFactoryBuffer *pPSF );\nHRESULT WINAPI\n  CStdStubBuffer_Connect( IRpcStubBuffer *This, IUnknown *pUnkServer );\nvoid WINAPI\n  CStdStubBuffer_Disconnect( IRpcStubBuffer *This );\nHRESULT WINAPI\n  CStdStubBuffer_Invoke( IRpcStubBuffer *This, RPCOLEMESSAGE *pRpcMsg, IRpcChannelBuffer *pRpcChannelBuffer );\nIRpcStubBuffer * WINAPI\n  CStdStubBuffer_IsIIDSupported( IRpcStubBuffer *This, REFIID riid );\nULONG WINAPI\n  CStdStubBuffer_CountRefs( IRpcStubBuffer *This );\nHRESULT WINAPI\n  CStdStubBuffer_DebugServerQueryInterface( IRpcStubBuffer *This, void **ppv );\nvoid WINAPI\n  CStdStubBuffer_DebugServerRelease( IRpcStubBuffer *This, void *pv );\n\n#define CStdStubBuffer_METHODS \\\n  CStdStubBuffer_QueryInterface, \\\n  CStdStubBuffer_AddRef, \\\n  CStdStubBuffer_Release, \\\n  CStdStubBuffer_Connect, \\\n  CStdStubBuffer_Disconnect, \\\n  CStdStubBuffer_Invoke, \\\n  CStdStubBuffer_IsIIDSupported, \\\n  CStdStubBuffer_CountRefs, \\\n  CStdStubBuffer_DebugServerQueryInterface, \\\n  CStdStubBuffer_DebugServerRelease\n\nRPCRTAPI void RPC_ENTRY\n  NdrProxyInitialize( void *This, PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg,\n                      PMIDL_STUB_DESC pStubDescriptor, unsigned int ProcNum );\nRPCRTAPI void RPC_ENTRY\n  NdrProxyGetBuffer( void *This, PMIDL_STUB_MESSAGE pStubMsg );\nRPCRTAPI void RPC_ENTRY\n  NdrProxySendReceive( void *This, PMIDL_STUB_MESSAGE pStubMsg );\nRPCRTAPI void RPC_ENTRY\n  NdrProxyFreeBuffer( void *This, PMIDL_STUB_MESSAGE pStubMsg );\nRPCRTAPI HRESULT RPC_ENTRY\n  NdrProxyErrorHandler( DWORD dwExceptionCode );\n\nRPCRTAPI void RPC_ENTRY\n  NdrStubInitialize( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg,\n                     PMIDL_STUB_DESC pStubDescriptor, IRpcChannelBuffer *pRpcChannelBuffer );\nRPCRTAPI void RPC_ENTRY\n  NdrStubInitializePartial( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg,\n                            PMIDL_STUB_DESC pStubDescriptor, IRpcChannelBuffer *pRpcChannelBuffer,\n                            ULONG RequestedBufferSize );\nvoid __RPC_STUB NdrStubForwardingFunction( IRpcStubBuffer *This, IRpcChannelBuffer *pChannel,\n                                           PRPC_MESSAGE pMsg, DWORD *pdwStubPhase );\nRPCRTAPI void RPC_ENTRY\n  NdrStubGetBuffer( IRpcStubBuffer *This, IRpcChannelBuffer *pRpcChannelBuffer, PMIDL_STUB_MESSAGE pStubMsg );\nRPCRTAPI HRESULT RPC_ENTRY\n  NdrStubErrorHandler( DWORD dwExceptionCode );\n\nRPCRTAPI HRESULT RPC_ENTRY\n  NdrDllGetClassObject( REFCLSID rclsid, REFIID riid, void **ppv, const ProxyFileInfo **pProxyFileList,\n                        const CLSID *pclsid, CStdPSFactoryBuffer *pPSFactoryBuffer );\nRPCRTAPI HRESULT RPC_ENTRY\n  NdrDllCanUnloadNow( CStdPSFactoryBuffer *pPSFactoryBuffer );\n\nRPCRTAPI HRESULT RPC_ENTRY\n  NdrDllRegisterProxy( HMODULE hDll, const ProxyFileInfo **pProxyFileList, const CLSID *pclsid );\nRPCRTAPI HRESULT RPC_ENTRY\n  NdrDllUnregisterProxy( HMODULE hDll, const ProxyFileInfo **pProxyFileList, const CLSID *pclsid );\n\nHRESULT __wine_register_resources( HMODULE module ) DECLSPEC_HIDDEN;\nHRESULT __wine_unregister_resources( HMODULE module ) DECLSPEC_HIDDEN;\n\n#define CSTDSTUBBUFFERRELEASE(pFactory) \\\nULONG WINAPI CStdStubBuffer_Release(IRpcStubBuffer *This) \\\n  { return NdrCStdStubBuffer_Release(This, (IPSFactoryBuffer *)pFactory); }\n\n#ifdef PROXY_DELEGATION\n#define CSTDSTUBBUFFER2RELEASE(pFactory) \\\nULONG WINAPI CStdStubBuffer2_Release(IRpcStubBuffer *This) \\\n  { return NdrCStdStubBuffer2_Release(This, (IPSFactoryBuffer *)pFactory); }\n#else\n#define CSTDSTUBBUFFER2RELEASE(pFactory)\n#endif\n\n#define IID_GENERIC_CHECK_IID(name,pIID,index) memcmp(pIID, name##_ProxyVtblList[index]->header.piid, sizeof(IID))\n\n/*\n * In these macros, BS stands for Binary Search. MIDL uses these to\n * \"unroll\" a binary search into the module's IID_Lookup function.\n * However, I haven't bothered to reimplement that stuff yet;\n * I've just implemented a linear search for now.\n */\n#define IID_BS_LOOKUP_SETUP \\\n  int c;\n#define IID_BS_LOOKUP_INITIAL_TEST(name, sz, split)\n#define IID_BS_LOOKUP_NEXT_TEST(name, split)\n#define IID_BS_LOOKUP_RETURN_RESULT(name, sz, index) \\\n  for (c=0; c<sz; c++) if (!name##_CHECK_IID(c)) { (index)=c; return 1; } \\\n  return 0;\n\n/* macros used in dlldata.c files */\n#define EXTERN_PROXY_FILE(proxy) \\\n    EXTERN_C const ProxyFileInfo proxy##_ProxyFileInfo DECLSPEC_HIDDEN;\n\n#define PROXYFILE_LIST_START \\\n    const ProxyFileInfo * aProxyFileList[] DECLSPEC_HIDDEN = \\\n    {\n\n#define REFERENCE_PROXY_FILE(proxy) \\\n        & proxy##_ProxyFileInfo\n\n#define PROXYFILE_LIST_END \\\n        NULL \\\n    };\n\n\n/* define PROXY_CLSID to use an existing CLSID */\n/* define PROXY_CLSID_IS to specify the CLSID data of the PSFactoryBuffer */\n/* define neither to use the GUID of the first interface */\n#ifdef PROXY_CLSID\n# define CLSID_PSFACTORYBUFFER extern CLSID PROXY_CLSID DECLSPEC_HIDDEN;\n#else\n# ifdef PROXY_CLSID_IS\n#  define CLSID_PSFACTORYBUFFER const CLSID CLSID_PSFactoryBuffer DECLSPEC_HIDDEN; \\\n    const CLSID CLSID_PSFactoryBuffer = PROXY_CLSID_IS;\n#  define PROXY_CLSID CLSID_PSFactoryBuffer\n# else\n#  define CLSID_PSFACTORYBUFFER\n# endif\n#endif\n\n#ifndef PROXY_CLSID\n# define GET_DLL_CLSID (aProxyFileList[0]->pStubVtblList[0] ? \\\n    aProxyFileList[0]->pStubVtblList[0]->header.piid : NULL)\n#else\n# define GET_DLL_CLSID &PROXY_CLSID\n#endif\n\n#ifdef ENTRY_PREFIX\n# define __rpc_macro_expand2(a, b) a##b\n# define __rpc_macro_expand(a, b) __rpc_macro_expand2(a, b)\n# define DLLREGISTERSERVER_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllRegisterServer)\n# define DLLUNREGISTERSERVER_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllUnregisterServer)\n# define DLLMAIN_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllMain)\n# define DLLGETCLASSOBJECT_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllGetClassObject)\n# define DLLCANUNLOADNOW_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllCanUnloadNow)\n#else\n# define DLLREGISTERSERVER_ENTRY DllRegisterServer\n# define DLLUNREGISTERSERVER_ENTRY DllUnregisterServer\n# define DLLMAIN_ENTRY DllMain\n# define DLLGETCLASSOBJECT_ENTRY DllGetClassObject\n# define DLLCANUNLOADNOW_ENTRY DllCanUnloadNow\n#endif\n\n#ifdef WINE_REGISTER_DLL\n# define WINE_DO_REGISTER_DLL(pfl, clsid) return __wine_register_resources( hProxyDll )\n# define WINE_DO_UNREGISTER_DLL(pfl, clsid) return __wine_unregister_resources( hProxyDll )\n#else\n# define WINE_DO_REGISTER_DLL(pfl, clsid)   return NdrDllRegisterProxy( hProxyDll, (pfl), (clsid) )\n# define WINE_DO_UNREGISTER_DLL(pfl, clsid) return NdrDllUnregisterProxy( hProxyDll, (pfl), (clsid) )\n#endif\n\n\n#define DLLDATA_GETPROXYDLLINFO(pfl, rclsid) \\\n    void RPC_ENTRY GetProxyDllInfo(const ProxyFileInfo ***ppProxyFileInfo, \\\n                                   const CLSID **ppClsid) DECLSPEC_HIDDEN; \\\n    void RPC_ENTRY GetProxyDllInfo(const ProxyFileInfo ***ppProxyFileInfo, \\\n                                   const CLSID **ppClsid) \\\n    { \\\n        *ppProxyFileInfo = (pfl); \\\n        *ppClsid = (rclsid); \\\n    }\n\n#define DLLGETCLASSOBJECTROUTINE(pfl, factory_clsid, factory) \\\n    HRESULT WINAPI DLLGETCLASSOBJECT_ENTRY(REFCLSID rclsid, REFIID riid, void **ppv) DECLSPEC_HIDDEN; \\\n    HRESULT WINAPI DLLGETCLASSOBJECT_ENTRY(REFCLSID rclsid, REFIID riid, \\\n                                           void **ppv) \\\n    { \\\n        return NdrDllGetClassObject(rclsid, riid, ppv, (pfl), \\\n                                    (factory_clsid), factory); \\\n    }\n\n#define DLLCANUNLOADNOW(factory) \\\n    HRESULT WINAPI DLLCANUNLOADNOW_ENTRY(void) DECLSPEC_HIDDEN; \\\n    HRESULT WINAPI DLLCANUNLOADNOW_ENTRY(void) \\\n    { \\\n        return NdrDllCanUnloadNow((factory)); \\\n    }\n\n#define REGISTER_PROXY_DLL_ROUTINES(pfl, factory_clsid) \\\n    HINSTANCE hProxyDll DECLSPEC_HIDDEN = NULL; \\\n    \\\n    BOOL WINAPI DLLMAIN_ENTRY(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) DECLSPEC_HIDDEN; \\\n    BOOL WINAPI DLLMAIN_ENTRY(HINSTANCE hinstDLL, DWORD fdwReason, \\\n                              LPVOID lpvReserved) \\\n    { \\\n        if (fdwReason == DLL_PROCESS_ATTACH) \\\n        { \\\n            DisableThreadLibraryCalls(hinstDLL); \\\n            hProxyDll = hinstDLL; \\\n        } \\\n        return TRUE; \\\n    } \\\n    \\\n    HRESULT WINAPI DLLREGISTERSERVER_ENTRY(void) DECLSPEC_HIDDEN; \\\n    HRESULT WINAPI DLLREGISTERSERVER_ENTRY(void) \\\n    { \\\n        WINE_DO_REGISTER_DLL( (pfl), (factory_clsid) ); \\\n    } \\\n    \\\n    HRESULT WINAPI DLLUNREGISTERSERVER_ENTRY(void) DECLSPEC_HIDDEN; \\\n    HRESULT WINAPI DLLUNREGISTERSERVER_ENTRY(void) \\\n    { \\\n        WINE_DO_UNREGISTER_DLL( (pfl), (factory_clsid) ); \\\n    }\n\n#if defined(REGISTER_PROXY_DLL) || defined(WINE_REGISTER_DLL)\n# define DLLREGISTRY_ROUTINES(pfl, factory_clsid) \\\n    REGISTER_PROXY_DLL_ROUTINES(pfl, factory_clsid)\n#else\n# define DLLREGISTRY_ROUTINES(pfl, factory_clsid)\n#endif\n\n#define DLLDATA_ROUTINES(pfl, factory_clsid) \\\n    CLSID_PSFACTORYBUFFER \\\n    CStdPSFactoryBuffer DECLSPEC_HIDDEN gPFactory = { NULL, 0, NULL, 0 }; \\\n    DLLDATA_GETPROXYDLLINFO(pfl, factory_clsid) \\\n    DLLGETCLASSOBJECTROUTINE(pfl, factory_clsid, &gPFactory) \\\n    DLLCANUNLOADNOW(&gPFactory) \\\n    CSTDSTUBBUFFERRELEASE(&gPFactory) \\\n    CSTDSTUBBUFFER2RELEASE(&gPFactory) \\\n    DLLREGISTRY_ROUTINES(pfl, factory_clsid)\n\n#if 0\n\nRPCRTAPI HRESULT RPC_ENTRY\n  CreateProxyFromTypeInfo( LPTYPEINFO pTypeInfo, LPUNKNOWN pUnkOuter, REFIID riid,\n                           LPRPCPROXYBUFFER *ppProxy, LPVOID *ppv );\nRPCRTAPI HRESULT RPC_ENTRY\n  CreateStubFromTypeInfo( LPTYPEINFO pTypeInfo, REFIID riid, LPUNKNOWN pUnkServer,\n                          LPRPCSTUBBUFFER *ppStub );\n\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /*__WINE_RPCPROXY_H */\n"
  },
  {
    "path": "wine/windows/rpcsal.h",
    "content": "/*\n * Copyright (C) 2011 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n\n#ifndef __RPCSAL_H_VERSION__\n# define __RPCSAL_H_VERSION__  100\n#endif\n\n#define __RPC__deref_in\n#define __RPC__deref_in_opt\n#define __RPC__deref_in_string\n#define __RPC__deref_in_opt_string\n#define __RPC__deref_in_ecount(size)\n#define __RPC__deref_in_ecount_opt(size)\n#define __RPC__deref_in_ecount_opt_string(size)\n#define __RPC__deref_in_ecount_full(size)\n#define __RPC__deref_in_ecount_full_opt(size)\n#define __RPC__deref_in_ecount_full_string(size)\n#define __RPC__deref_in_ecount_full_opt_string(size)\n#define __RPC__deref_in_ecount_part(size, length)\n#define __RPC__deref_in_ecount_part_opt(size, length)\n#define __RPC__deref_in_xcount(size)\n#define __RPC__deref_in_xcount_opt(size)\n#define __RPC__deref_in_xcount_opt_string(size)\n#define __RPC__deref_in_xcount_full(size)\n#define __RPC__deref_in_xcount_full_opt(size)\n#define __RPC__deref_in_xcount_full_string(size)\n#define __RPC__deref_in_xcount_full_opt_string(size)\n#define __RPC__deref_in_xcount_part(size, length)\n#define __RPC__deref_in_xcount_part_opt(size, length)\n\n#define __RPC__deref_inout\n#define __RPC__deref_inout_opt\n#define __RPC__deref_inout_string\n#define __RPC__deref_inout_opt_string\n#define __RPC__deref_inout_ecount_opt(size)\n#define __RPC__deref_inout_ecount_full(size)\n#define __RPC__deref_inout_ecount_full_opt(size)\n#define __RPC__deref_inout_ecount_full_string(size)\n#define __RPC__deref_inout_ecount_full_opt_string(size)\n#define __RPC__deref_inout_ecount_part_opt(size, length)\n#define __RPC__deref_inout_xcount_opt(size)\n#define __RPC__deref_inout_xcount_full(size)\n#define __RPC__deref_inout_xcount_full_opt(size)\n#define __RPC__deref_inout_xcount_full_string(size)\n#define __RPC__deref_inout_xcount_full_opt_string(size)\n#define __RPC__deref_inout_xcount_part_opt(size, length)\n\n#define __RPC__deref_out\n#define __RPC__deref_out_opt\n#define __RPC__deref_out_string\n#define __RPC__deref_out_opt_string\n#define __RPC__deref_out_ecount(size)\n#define __RPC__deref_out_ecount_opt(size)\n#define __RPC__deref_out_ecount_full(size)\n#define __RPC__deref_out_ecount_full_opt(size)\n#define __RPC__deref_out_ecount_full_string(size)\n#define __RPC__deref_out_ecount_full_opt_string(size)\n#define __RPC__deref_out_ecount_part(size, length)\n#define __RPC__deref_out_ecount_part_opt(size, length)\n#define __RPC__deref_out_xcount(size)\n#define __RPC__deref_out_xcount_opt(size)\n#define __RPC__deref_out_xcount_full(size)\n#define __RPC__deref_out_xcount_full_opt(size)\n#define __RPC__deref_out_xcount_full_string(size)\n#define __RPC__deref_out_xcount_full_opt_string(size)\n#define __RPC__deref_out_xcount_part(size, length)\n#define __RPC__deref_out_xcount_part_opt(size, length)\n\n#define __RPC__deref_opt_in\n#define __RPC__deref_opt_in_opt\n#define __RPC__deref_opt_in_string\n#define __RPC__deref_opt_in_opt_string\n\n#define __RPC__deref_opt_inout\n#define __RPC__deref_opt_inout_opt\n#define __RPC__deref_opt_inout_string\n#define __RPC__deref_opt_inout_opt_string\n#define __RPC__deref_opt_inout_ecount(size)\n#define __RPC__deref_opt_inout_ecount_opt(size)\n#define __RPC__deref_opt_inout_ecount_full(size)\n#define __RPC__deref_opt_inout_ecount_full_opt(size)\n#define __RPC__deref_opt_inout_ecount_full_string(size)\n#define __RPC__deref_opt_inout_ecount_full_opt_string(size)\n#define __RPC__deref_opt_inout_ecount_part(size, length)\n#define __RPC__deref_opt_inout_ecount_part_opt(size, length)\n#define __RPC__deref_opt_inout_xcount(size)\n#define __RPC__deref_opt_inout_xcount_opt(size)\n#define __RPC__deref_opt_inout_xcount_full(size)\n#define __RPC__deref_opt_inout_xcount_full_opt(size)\n#define __RPC__deref_opt_inout_xcount_full_string(size)\n#define __RPC__deref_opt_inout_xcount_full_opt_string(size)\n#define __RPC__deref_opt_inout_xcount_part(size, length)\n#define __RPC__deref_opt_inout_xcount_part_opt(size, length)\n\n#define __RPC__in\n#define __RPC__in_opt\n#define __RPC__in_string\n#define __RPC__in_opt_string\n#define __RPC__in_ecount(size)\n#define __RPC__in_ecount_opt(size)\n#define __RPC__in_ecount_full(size)\n#define __RPC__in_ecount_full_opt(size)\n#define __RPC__in_ecount_full_string(size)\n#define __RPC__in_ecount_full_opt_string(size)\n#define __RPC__in_ecount_part(size, length)\n#define __RPC__in_ecount_part_opt(size, length)\n#define __RPC__in_xcount(size)\n#define __RPC__in_xcount_opt(size)\n#define __RPC__in_xcount_full(size)\n#define __RPC__in_xcount_full_opt(size)\n#define __RPC__in_xcount_full_string(size)\n#define __RPC__in_xcount_full_opt_string(size)\n#define __RPC__in_xcount_part(size, length)\n#define __RPC__in_xcount_part_opt(size, length)\n\n#define __RPC__inout\n#define __RPC__inout_opt\n#define __RPC__inout_string\n#define __RPC__inout_opt_string\n#define __RPC__opt_inout\n#define __RPC__inout_ecount(size)\n#define __RPC__inout_ecount_opt(size)\n#define __RPC__inout_ecount_full(size)\n#define __RPC__inout_ecount_full_opt(size)\n#define __RPC__inout_ecount_full_string(size)\n#define __RPC__inout_ecount_full_opt_string(size)\n#define __RPC__inout_ecount_part(size, length)\n#define __RPC__inout_ecount_part_opt(size, length)\n#define __RPC__inout_xcount(size)\n#define __RPC__inout_xcount_opt(size)\n#define __RPC__inout_xcount_full(size)\n#define __RPC__inout_xcount_full_opt(size)\n#define __RPC__inout_xcount_full_string(size)\n#define __RPC__inout_xcount_full_opt_string(size)\n#define __RPC__inout_xcount_part(size, length)\n#define __RPC__inout_xcount_part_opt(size, length)\n\n#define __RPC__out\n#define __RPC__out_ecount(size)\n#define __RPC__out_ecount_full(size)\n#define __RPC__out_ecount_full_string(size)\n#define __RPC__out_ecount_part(size, length)\n#define __RPC__out_xcount(size)\n#define __RPC__out_xcount_full(size)\n#define __RPC__out_xcount_full_string(size)\n#define __RPC__out_xcount_part(size, length)\n\n#define __RPC_full_pointer\n#define __RPC_ref_pointer\n#define __RPC_string\n#define __RPC_unique_pointer\n\n#define __RPC__range(min,max)\n#define __RPC__in_range(min,max)\n"
  },
  {
    "path": "wine/windows/rstbas.idl",
    "content": "/*\n * Copyright (C) 2009 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    local,\n    object,\n    uuid(0c733a7c-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface IRowset : IUnknown\n{\n    typedef DWORD DBROWOPTIONS;\n\n    HRESULT AddRefRows([in] DBCOUNTITEM cRows,\n                       [in, size_is(cRows)] const HROW rghRows[],\n                       [out, size_is(cRows)] DBREFCOUNT rgRefCounts[],\n                       [out, size_is(cRows)] DBROWSTATUS rgRowStatus[]);\n\n    HRESULT GetData([in] HROW hRow,\n                    [in] HACCESSOR hAccessor,\n                    [out] void *pData);\n\n    HRESULT GetNextRows([in] HCHAPTER hReserved,\n                        [in] DBROWOFFSET lRowsOffset,\n                        [in] DBROWCOUNT cRows,\n                        [out] DBCOUNTITEM *pcRowObtained,\n                        [out, size_is(,cRows)] HROW **prghRows);\n\n    HRESULT ReleaseRows([in] DBCOUNTITEM cRows,\n                        [in, size_is(cRows)] const HROW rghRows[],\n                        [in, size_is(cRows)] DBROWOPTIONS rgRowOptions[],\n                        [out, size_is(cRows)] DBREFCOUNT rgRefCounts[],\n                        [out, size_is(cRows)] DBROWSTATUS rgRowStatus[]);\n\n    HRESULT RestartPosition([in] HCHAPTER hReserved);\n}\n"
  },
  {
    "path": "wine/windows/rstinf.idl",
    "content": "/*\n * Copyright (C) 2009 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    object,\n    uuid(0c733a55-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface IRowsetInfo : IUnknown\n{\n    [local]\n    HRESULT GetProperties([in] const ULONG cPropertyIDSets,\n                          [in, size_is(cPropertyIDSets), annotation(\"__in_ecount_opt(cPropertyIDSets)\")] const DBPROPIDSET rgPropertyIDSets[],\n                          [in, out, annotation(\"__out\")] ULONG *pcPropertySets,\n                          [out, size_is(,*pcPropertySets), annotation(\"__deref_out_ecount_opt(*pcPropertySets)\")] DBPROPSET **prgPropertySets);\n\n    [call_as(GetProperties)]\n    HRESULT RemoteGetProperties([in] ULONG cPropertyIDSets,\n                                [in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets,\n                                [in, out] ULONG *pcPropertySets,\n                                [out, size_is(,*pcPropertySets)] DBPROPSET **prgPropertySets,\n                                [out] IErrorInfo **ppErrorInfoRem);\n\n    [local]\n    HRESULT GetReferencedRowset([in] DBORDINAL iOrdinal,\n                                [in, annotation(\"__in\")] REFIID riid,\n                                [out, iid_is(riid), annotation(\"deref_out_opt\")] IUnknown **ppReferencedRowset);\n\n    [call_as(GetReferencedRowset)]\n    HRESULT RemoteGetReferencedRowset([in] DBORDINAL iOrdinal,\n                                      [in] REFIID riid,\n                                      [out, iid_is(riid)] IUnknown **ppReferencedRowset,\n                                      [out] IErrorInfo **ppErrorInfoRem);\n    [local]\n    HRESULT GetSpecification([in, annotation(\"__in\")] REFIID riid,\n                             [out, iid_is(riid), annotation(\"__deref_out_opt\")] IUnknown **ppSpecification);\n\n    [call_as(GetSpecification)]\n    HRESULT RemoteGetSpecification([in] REFIID riid,\n                                   [out, iid_is(riid)] IUnknown **ppSpecification,\n                                   [out] IErrorInfo **ppErrorInfoRem);\n\n}\n"
  },
  {
    "path": "wine/windows/rstloc.idl",
    "content": "/*\n * Copyright (C) 2009 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    local,\n    object,\n    uuid(0c733a7d-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface IRowsetLocate : IRowset\n{\n    typedef DWORD DBCOMPARE;\n\n    enum DBCOMPAREENUM\n    {\n        DBCOMPARE_LT,\n        DBCOMPARE_EQ,\n        DBCOMPARE_GT,\n        DBCOMPARE_NE,\n        DBCOMPARE_NOTCOMPARABLE\n    };\n\n    HRESULT Compare([in] HCHAPTER hReserved,\n                    [in] DBBKMARK cbBookmark1,\n                    [in, size_is(cbBookmark1)] const BYTE *pBookmark1,\n                    [in] DBBKMARK cbBookmark2,\n                    [in, size_is(cbBookmark2)] const BYTE *pBookmark2,\n                    [out] DBCOMPARE *pComparison);\n\n    HRESULT GetRowsAt([in] HWATCHREGION hReserved1,\n                      [in] HCHAPTER hReserved2,\n                      [in] DBBKMARK cbBookmark,\n                      [in, size_is(cbBookmark)] const BYTE *pBookmark,\n                      [in] DBROWOFFSET lRowsOffset,\n                      [in] DBROWCOUNT cRows,\n                      [out] DBCOUNTITEM *pcRowsObtained,\n                      [out, size_is(,cRows)] HROW **prghRows);\n\n    HRESULT GetRowsByBookmark([in] HCHAPTER hReserved,\n                              [in] DBCOUNTITEM cRows,\n                              [in, size_is(cRows)] const DBBKMARK rgcbBookmarks[],\n                              [in, size_is(cRows)] const BYTE *rgpBookmarks[],\n                              [out, size_is(cRows)] HROW rghRows[],\n                              [out, size_is(cRows)] DBROWSTATUS rgRowStatus[]);\n\n    HRESULT Hash([in] HCHAPTER hReserved,\n                 [in] DBBKMARK cBookmarks,\n                 [in, size_is(cBookmarks)] const DBBKMARK rgcbBookmarks[],\n                 [in, size_is(cBookmarks)] const BYTE *rgpBookmarks[],\n                 [out, size_is(cBookmarks)] DBHASHVALUE rgHashedValues[],\n                 [out, size_is(cBookmarks)] DBROWSTATUS rgBookmarkStatus[]);\n}\n"
  },
  {
    "path": "wine/windows/rstnot.idl",
    "content": "/*\n * Copyright (C) 2013 Nikolay Sivov\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    object,\n    uuid(0c733a83-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface IRowsetNotify : IUnknown\n{\n    [local]\n    HRESULT OnFieldChange([in] IRowset *rowset,\n                          [in] HROW row,\n                          [in] DBORDINAL ccols,\n                          [in, size_is((ULONG)ccols)] DBORDINAL *columns,\n                          [in] DBREASON reason,\n                          [in] DBEVENTPHASE phase,\n                          [in] BOOL cantdeny);\n\n    [call_as(OnFieldChange)]\n    HRESULT RemoteOnFieldChange(\n                          [in] IRowset *rowset,\n                          [in] HROW row,\n                          [in] DBORDINAL ccols,\n                          [in, size_is((ULONG)ccols)] DBORDINAL *columns,\n                          [in] DBREASON reason,\n                          [in] DBEVENTPHASE phase,\n                          [in] BOOL cantdeny);\n\n    [local]\n    HRESULT OnRowChange([in] IRowset *rowset,\n                        [in] DBCOUNTITEM rows,\n                        [in, size_is((ULONG)rows)] HROW *hrows,\n                        [in] DBREASON reason,\n                        [in] DBEVENTPHASE phase,\n                        [in] BOOL cantdeny);\n\n    [call_as(OnRowChange)]\n    HRESULT RemoteOnRowChange(\n                        [in] IRowset *rowset,\n                        [in] DBCOUNTITEM rows,\n                        [in, size_is((ULONG)rows)] HROW *hrows,\n                        [in] DBREASON reason,\n                        [in] DBEVENTPHASE phase,\n                        [in] BOOL cantdeny);\n\n    [local]\n    HRESULT OnRowsetChange([in] IRowset *rowset,\n                           [in] DBREASON reason,\n                           [in] DBEVENTPHASE phase,\n                           [in] BOOL cantdeny);\n\n    [call_as(OnRowsetChange)]\n    HRESULT RemoteOnRowsetChange(\n                           [in] IRowset *rowset,\n                           [in] DBREASON reason,\n                           [in] DBEVENTPHASE phase,\n                           [in] BOOL cantdeny);\n}\n"
  },
  {
    "path": "wine/windows/rtutils.h",
    "content": "/*\n * Rtutils.h - Routing utilities / RRAS tracing\n *\n * Copyright (C) 2009 Alexander Scott-Johns\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _RTUTILS_H_\n#define _RTUTILS_H_\n\n#include <stdarg.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nDWORD WINAPI TraceRegisterExW(LPCWSTR name, DWORD flags);\nDWORD WINAPI TraceRegisterExA(LPCSTR name, DWORD flags);\n#define      TraceRegisterEx  WINELIB_NAME_AW(TraceRegisterEx)\n\n#define TraceRegisterW(name) TraceRegisterExW((name), 0)\n#define TraceRegisterA(name) TraceRegisterExA((name), 0)\n#define TraceRegister  WINELIB_NAME_AW(TraceRegister)\n\n/* Flags for TraceRegisterEx(W|A) */\n#define TRACE_USE_FILE     1\n#define TRACE_USE_CONSOLE  2\n\n/* Return value of TraceRegisterEx(W|A) */\n#define INVALID_TRACEID    0xFFFFFFFF\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _RTUTILS_H_ */\n"
  },
  {
    "path": "wine/windows/sal.h",
    "content": "/*\n * Copyright (C) 2018 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_SAL_H__\n#define __WINE_SAL_H__\n\n#define _Check_return_\n\n#define _Deref_out_\n#define _Deref_out_opt_\n#define _Deref_out_opt_z_\n#define _Deref_post_opt_cap_(count)\n#define _Deref_post_opt_valid_\n\n#define _In_\n#define _In_bytecount_(count)\n#define _In_count_(count)\n#define _In_opt_\n#define _In_opt_count_(count)\n#define _In_opt_z_\n#define _In_reads_(count)\n#define _In_reads_bytes_(count)\n#define _In_reads_opt_z_(count)\n#define _In_reads_z_(count)\n#define _In_z_\n\n#define _Inout_\n#define _Inout_cap_(count)\n#define _Inout_opt_\n#define _Inout_updates_z_(count)\n#define _Inout_z_\n#define _Inout_z_bytecap_(count)\n#define _Inout_z_cap_(count)\n#define _Inout_z_cap_c_(count)\n\n#define _Null_terminated_\n\n#define _Out_\n#define _Out_bytecap_(count)\n#define _Out_bytecapcount_(count)\n#define _Out_bytecap_post_bytecount_(count1, count2)\n#define _Out_cap_(count)\n#define _Out_cap_post_count_(count1, count2)\n#define _Out_opt_\n#define _Out_opt_z_cap_(count)\n#define _Out_opt_z_cap_post_count_(count1, count2)\n#define _Out_writes_(count)\n#define _Out_writes_bytes_to_(count1, count2)\n#define _Out_writes_opt_(count)\n#define _Out_writes_opt_z_(count)\n#define _Out_writes_to_(count1, count2)\n#define _Out_writes_z_(count)\n#define _Out_z_cap_(count)\n#define _Out_z_cap_c_(count)\n#define _Out_z_cap_post_count_(count1, count2)\n\n#define _Outptr_result_buffer_(count)\n#define _Outptr_result_maybenull_z_\n\n#define _Post_invalid_\n#define _Post_writable_byte_size_(count)\n#define _Post_z_\n\n#define _Pre_maybenull_\n#define _Pre_notnull_\n#define _Pre_writable_size_(count)\n\n#define _Printf_format_string_\n\n#define _Ret_maybenull_\n#define _Ret_maybenull_z_\n#define _Ret_opt_\n#define _Ret_opt_z_cap_(count)\n#define _Ret_writes_bytes_maybenull_(count)\n#define _Ret_z_\n\n#define _Success_(exp)\n\n#endif\n"
  },
  {
    "path": "wine/windows/sapi.idl",
    "content": "/*\n * Speech API (SAPI) IDL file.\n *\n * Copyright (C) 2017 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\n\n#ifndef __WIDL__\n#define threading(model)\n#define progid(str)\n#define vi_progid(str)\n#endif\n\ntypedef [hidden] enum SPDATAKEYLOCATION\n{\n    SPDKL_DefaultLocation = 0,\n    SPDKL_CurrentUser     = 1,\n    SPDKL_LocalMachine    = 2,\n    SPDKL_CurrentConfig   = 5\n} SPDATAKEYLOCATION;\n\ncpp_quote(\"#if defined(__GNUC__)\")\n\ncpp_quote(\"#define SPCAT_AUDIOOUT (const WCHAR []){ 'H','K','E','Y','_','L','O','C','A','L','_','M','A','C','H','I','N','E','\\\\\\\\','S','O','F','T','W','A','R','E','\\\\\\\\','M','i','c','r','o','s','o','f','t','\\\\\\\\','S','p','e','e','c','h','\\\\\\\\','A','u','d','i','o','O','u','t','p','u','t',0 }\")\ncpp_quote(\"#define SPCAT_AUDIOIN (const WCHAR []){ 'H','K','E','Y','_','L','O','C','A','L','_','M','A','C','H','I','N','E','\\\\\\\\','S','O','F','T','W','A','R','E','\\\\\\\\','M','i','c','r','o','s','o','f','t','\\\\\\\\','S','p','e','e','c','h','\\\\\\\\','A','u','d','i','o','I','n','p','u','t',0 }\")\ncpp_quote(\"#define SPCAT_VOICES (const WCHAR []){ 'H','K','E','Y','_','L','O','C','A','L','_','M','A','C','H','I','N','E','\\\\\\\\','S','O','F','T','W','A','R','E','\\\\\\\\','M','i','c','r','o','s','o','f','t','\\\\\\\\','S','p','e','e','c','h','\\\\\\\\','V','o','i','c','e','s',0 }\")\n\ncpp_quote(\"#elif defined(_MSC_VER)\")\n\ncpp_quote(\"#define SPCAT_AUDIOOUT L\\\"HKEY_LOCAL_MACHINE\\\\\\\\SOFTWARE\\\\\\\\Microsoft\\\\\\\\Speech\\\\\\\\AudioOutput\\\"\")\ncpp_quote(\"#define SPCAT_AUDIOIN L\\\"HKEY_LOCAL_MACHINE\\\\\\\\SOFTWARE\\\\\\\\Microsoft\\\\\\\\Speech\\\\\\\\AudioInput\\\"\")\ncpp_quote(\"#define SPCAT_VOICES L\\\"HKEY_LOCAL_MACHINE\\\\\\\\SOFTWARE\\\\\\\\Microsoft\\\\\\\\Speech\\\\\\\\Voices\\\"\")\n\ncpp_quote(\"#else\")\n\ncpp_quote(\"static const WCHAR SPCAT_AUDIOOUT[] = {'H','K','E','Y','_','L','O','C','A','L','_','M','A','C','H','I','N','E','\\\\\\\\','S','O','F','T','W','A','R','E','\\\\\\\\','M','i','c','r','o','s','o','f','t','\\\\\\\\','S','p','e','e','c','h','\\\\\\\\','A','u','d','i','o','O','u','t','p','u','t',0};\")\ncpp_quote(\"static const WCHAR SPCAT_AUDIOIN[] = {'H','K','E','Y','_','L','O','C','A','L','_','M','A','C','H','I','N','E','\\\\\\\\','S','O','F','T','W','A','R','E','\\\\\\\\','M','i','c','r','o','s','o','f','t','\\\\\\\\','S','p','e','e','c','h','\\\\\\\\','A','u','d','i','o','I','n','p','u','t',0};\")\ncpp_quote(\"static const WCHAR SPCAT_VOICES[] = {'H','K','E','Y','_','L','O','C','A','L','_','M','A','C','H','I','N','E','\\\\\\\\','S','O','F','T','W','A','R','E','\\\\\\\\','M','i','c','r','o','s','o','f','t','\\\\\\\\','S','p','e','e','c','h','\\\\\\\\','V','o','i','c','e','s',0};\")\n\ncpp_quote(\"#endif\")\n\ninterface IEnumSpObjectTokens;\n\n[\n    object,\n    uuid(14056581-e16c-11d2-bb90-00c04f8ee6c0),\n    helpstring(\"ISpDataKey\"),\n    pointer_default(unique),\n    local,\n    restricted\n]\ninterface ISpDataKey : IUnknown\n{\n    HRESULT SetData([in] LPCWSTR pszValueName,\n                    [in] ULONG cbData,\n                    [in] const BYTE *pData);\n    HRESULT GetData([in] LPCWSTR pszValueName,\n                    [in] ULONG *pcbData,\n                    [out] BYTE *pData);\n    HRESULT SetStringValue([in] LPCWSTR pszValueName,\n                           [in] LPCWSTR pszValue);\n    HRESULT GetStringValue([in] LPCWSTR pszValueName,\n                           [out] LPWSTR *ppszValue);\n    HRESULT SetDWORD([in] LPCWSTR pszValueName,\n                     [in] DWORD dwValue);\n    HRESULT GetDWORD([in] LPCWSTR pszValueName,\n                     [out] DWORD *pdwValue);\n    HRESULT OpenKey([in] LPCWSTR pszSubKeyName,\n                    [out] ISpDataKey **ppSubKey);\n    HRESULT CreateKey([in] LPCWSTR pszSubKey,\n                      [out] ISpDataKey **ppSubKey);\n    HRESULT DeleteKey([in] LPCWSTR pszSubKey);\n    HRESULT DeleteValue([in] LPCWSTR pszValueName);\n    HRESULT EnumKeys([in] ULONG Index,\n                     [out] LPWSTR *ppszSubKeyName);\n    HRESULT EnumValues([in] ULONG Index,\n                       [out] LPWSTR *ppszValueName);\n}\n[\n    object,\n    uuid(92a66e2b-c830-4149-83df-6fc2ba1e7a5b),\n    helpstring(\"ISpRegDataKey\"),\n    pointer_default(unique),\n    restricted\n]\ninterface ISpRegDataKey : ISpDataKey\n{\n    [local] HRESULT SetKey([in] HKEY hkey, [in] BOOL fReadOnly);\n}\n\n[\n    object,\n    uuid(2d3d3845-39af-4850-bbf9-40b49780011d),\n    helpstring(\"ISpObjectTokenCategory\"),\n    pointer_default(unique),\n    local,\n    restricted\n]\ninterface ISpObjectTokenCategory : ISpDataKey\n{\n    HRESULT SetId([in] LPCWSTR pszCategoryId,\n                  [in] BOOL fCreateIfNotExist);\n    HRESULT GetId([out] LPWSTR *ppszCoMemCategoryId);\n    HRESULT GetDataKey([in] SPDATAKEYLOCATION spdkl,\n                       [out] ISpDataKey **ppDataKey);\n    HRESULT EnumTokens([in, string] LPCWSTR pszReqAttribs,\n                       [in, string] LPCWSTR pszOptAttribs,\n                       [out] IEnumSpObjectTokens **ppEnum);\n    HRESULT SetDefaultTokenId([in] LPCWSTR pszTokenId);\n    HRESULT GetDefaultTokenId([out] LPWSTR *ppszCoMemTokenId);\n}\n\n[\n    object,\n    uuid(14056589-e16c-11d2-bb90-00c04f8ee6c0),\n    helpstring(\"ISpObjectToken\"),\n    pointer_default(unique),\n    local,\n    restricted\n]\ninterface ISpObjectToken : ISpDataKey\n{\n    HRESULT SetId(/*[in]*/ LPCWSTR pszCategoryId,\n                  [in] LPCWSTR pszTokenId,\n                  [in] BOOL fCreateIfNotExist);\n    HRESULT GetId([out] LPWSTR *ppszCoMemTokenId);\n    HRESULT GetCategory([out] ISpObjectTokenCategory **ppTokenCategory);\n    HRESULT CreateInstance([in] IUnknown *pUnkOuter,\n                           [in] DWORD dwClsContext,\n                           [in] REFIID riid,\n                           [out, iid_is(riid)] void **ppvObject);\n    HRESULT GetStorageFileName([in] REFCLSID clsidCaller,\n                               [in] LPCWSTR pszValueName,\n                               [in, string] LPCWSTR pszFileNameSpecifier,\n                               [in] ULONG nFolder,\n                               [out] LPWSTR *ppszFilePath);\n    HRESULT RemoveStorageFileName([in] REFCLSID clsidCaller,\n                                  [in] LPCWSTR pszKeyName,\n                                  [in] BOOL fDeleteFile);\n    HRESULT Remove(/*[in]*/ const CLSID *pclsidCaller);\n    [local] HRESULT IsUISupported([in] LPCWSTR pszTypeOfUI,\n                                  [in] void *pvExtraData,\n                                  [in] ULONG cbExtraData,\n                                  [in] IUnknown *punkObject,\n                                  [out] BOOL *pfSupported);\n    [local] HRESULT DisplayUI([in] HWND hwndParent,\n                              [in] LPCWSTR pszTitle,\n                              [in] LPCWSTR pszTypeOfUI,\n                              [in] void *pvExtraData,\n                              [in] ULONG cbExtraData,\n                              [in] IUnknown *punkObject);\n    HRESULT MatchesAttributes([in] LPCWSTR pszAttributes,\n                              [out] BOOL *pfMatches);\n}\n\n[\n    object,\n    uuid(06b64f9e-7fda-11d2-b4f2-00c04f797396),\n    helpstring(\"IEnumSpObjectTokens\"),\n    pointer_default(unique),\n    local,\n    restricted\n]\ninterface IEnumSpObjectTokens : IUnknown\n{\n    HRESULT Next([in] ULONG celt,\n                 [out, size_is(celt), length_is(*pceltFetched)] ISpObjectToken **pelt,\n                 [out] ULONG *pceltFetched);\n    HRESULT Skip([in] ULONG celt);\n    HRESULT Reset(void);\n    HRESULT Clone([out] IEnumSpObjectTokens **ppEnum);\n    HRESULT Item([in] ULONG Index,\n                 [out] ISpObjectToken **ppToken);\n    HRESULT GetCount([out] ULONG *pCount);\n}\n\n[\n    helpstring(\"Speech Object Library\"),\n    uuid(c866ca3a-32f7-11d2-9602-00c04f8ee628),\n    version(5.4)\n]\nlibrary SpeechLib\n{\n    importlib(\"stdole2.tlb\");\n\n    [\n        uuid(a910187f-0c7a-45ac-92cc-59edafb77b53),\n        helpstring(\"SpObjectTokenCategory Class\"),\n        progid(\"SAPI.SpObjectTokenCategory.1\"),\n        vi_progid(\"SAPI.SpObjectTokenCategory\"),\n        threading(both)\n    ]\n    coclass SpObjectTokenCategory\n    {\n        interface ISpObjectTokenCategory;\n    }\n}\n"
  },
  {
    "path": "wine/windows/sapiddk.idl",
    "content": "/*\n * Speech API (SAPI) DDK IDL file.\n *\n * Copyright (C) 2017 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"sapi.idl\";\n\n#ifndef __WIDL__\n#define threading(model)\n#define progid(str)\n#define vi_progid(str)\n#endif\n\n[\n    object,\n    uuid(06b64f9f-7fda-11d2-b4f2-00c04f797396),\n    helpstring(\"ISpObjectTokenEnumBuilder\"),\n    pointer_default(unique),\n    local,\n    restricted\n]\ninterface ISpObjectTokenEnumBuilder : IEnumSpObjectTokens\n{\n    HRESULT SetAttribs([in] LPCWSTR pszReqAttribs,\n                       [in] LPCWSTR pszOptAttribs);\n    HRESULT AddTokens([in] ULONG cTokens,\n                      [in] ISpObjectToken **pToken);\n    HRESULT AddTokensFromDataKey([in] ISpDataKey *pDataKey,\n                                 [in] LPCWSTR pszSubKey,\n                                 [in] LPCWSTR pszCategoryId);\n    HRESULT AddTokensFromTokenEnum([in] IEnumSpObjectTokens *pTokenEnum);\n    HRESULT Sort([in] LPCWSTR pszTokenIdToListFirst);\n}\n\n[\n    helpstring(\"Speech Object DDK Library\"),\n    uuid(9903f14c-12ce-4c99-9986-2ee3d7d588a8),\n    version(5.4)\n]\nlibrary SpeechDDKLib\n{\n    importlib(\"stdole2.tlb\");\n\n    [\n        uuid(d9f6ee60-58c9-458b-88e1-2f908fd7f87c),\n        helpstring(\"Data Key\"),\n        progid(\"SAPI.SpDataKey.1\"),\n        vi_progid(\"SAPI.SpDataKey\"),\n        threading(both)\n    ]\n    coclass SpDataKey\n    {\n        interface ISpRegDataKey;\n        [default] interface ISpDataKey;\n    }\n\n    [\n        uuid(3918d75f-0acb-41f2-b733-92aa15bcecf6),\n        helpstring(\"Object Token Enumerator\"),\n        progid(\"SAPI.SpObjectTokenEnum.1\"),\n        vi_progid(\"SAPI.SpObjectTokenEnum\"),\n        threading(both)\n    ]\n    coclass SpObjectTokenEnum\n    {\n        interface ISpObjectTokenEnumBuilder;\n        [default] interface IEnumSpObjectTokens;\n    }\n}\n"
  },
  {
    "path": "wine/windows/scarderr.h",
    "content": "/*\n * Winscard definitions\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n/* Note that if you included winerror.h directly or indirectly,\n * none of these definitions will be used!\n */\n#ifndef SCARD_S_SUCCESS\n\n#define FACILITY_SYSTEM                       0\n#define FACILITY_SCARD                       16\n\n#define STATUS_SEVERITY_INFORMATIONAL    ((NTSTATUS) 0x00000001)\n#define STATUS_SEVERITY_WARNING          ((NTSTATUS) 0x00000002)\n#define STATUS_SEVERITY_ERROR            ((NTSTATUS) 0x00000003)\n\n#define SCARD_S_SUCCESS                                    NO_ERROR\n#define SCARD_F_INTERNAL_ERROR                             ((DWORD)0x80100001)\n#define SCARD_E_CANCELLED                                  ((DWORD)0x80100002)\n#define SCARD_E_INVALID_HANDLE                             ((DWORD)0x80100003)\n#define SCARD_E_INVALID_PARAMETER                          ((DWORD)0x80100004)\n#define SCARD_E_INVALID_TARGET                             ((DWORD)0x80100005)\n#define SCARD_E_NO_MEMORY                                  ((DWORD)0x80100006)\n#define SCARD_F_WAITED_TOO_LONG                            ((DWORD)0x80100007)\n#define SCARD_E_INSUFFICIENT_BUFFER                        ((DWORD)0x80100008)\n#define SCARD_E_UNKNOWN_READER                             ((DWORD)0x80100009)\n#define SCARD_E_TIMEOUT                                    ((DWORD)0x8010000A)\n#define SCARD_E_SHARING_VIOLATION                          ((DWORD)0x8010000B)\n#define SCARD_E_NO_SMARTCARD                               ((DWORD)0x8010000C)\n#define SCARD_E_UNKNOWN_CARD                               ((DWORD)0x8010000D)\n#define SCARD_E_CANT_DISPOSE                               ((DWORD)0x8010000E)\n#define SCARD_E_PROTO_MISMATCH                             ((DWORD)0x8010000F)\n#define SCARD_E_NOT_READY                                  ((DWORD)0x80100010)\n#define SCARD_E_INVALID_VALUE                              ((DWORD)0x80100011)\n#define SCARD_E_SYSTEM_CANCELLED                           ((DWORD)0x80100012)\n#define SCARD_F_COMM_ERROR                                 ((DWORD)0x80100013)\n#define SCARD_F_UNKNOWN_ERROR                              ((DWORD)0x80100014)\n#define SCARD_E_INVALID_ATR                                ((DWORD)0x80100015)\n#define SCARD_E_NOT_TRANSACTED                             ((DWORD)0x80100016)\n#define SCARD_E_READER_UNAVAILABLE                         ((DWORD)0x80100017)\n#define SCARD_P_SHUTDOWN                                   ((DWORD)0x80100018)\n#define SCARD_E_PCI_TOO_SMALL                              ((DWORD)0x80100019)\n#define SCARD_E_READER_UNSUPPORTED                         ((DWORD)0x8010001A)\n#define SCARD_E_DUPLICATE_READER                           ((DWORD)0x8010001B)\n#define SCARD_E_CARD_UNSUPPORTED                           ((DWORD)0x8010001C)\n#define SCARD_E_NO_SERVICE                                 ((DWORD)0x8010001D)\n#define SCARD_E_SERVICE_STOPPED                            ((DWORD)0x8010001E)\n#define SCARD_E_UNEXPECTED                                 ((DWORD)0x8010001F)\n#define SCARD_E_ICC_INSTALLATION                           ((DWORD)0x80100020)\n#define SCARD_E_ICC_CREATEORDER                            ((DWORD)0x80100021)\n#define SCARD_E_UNSUPPORTED_FEATURE                        ((DWORD)0x80100022)\n#define SCARD_E_DIR_NOT_FOUND                              ((DWORD)0x80100023)\n#define SCARD_E_FILE_NOT_FOUND                             ((DWORD)0x80100024)\n#define SCARD_E_NO_DIR                                     ((DWORD)0x80100025)\n#define SCARD_E_NO_FILE                                    ((DWORD)0x80100026)\n#define SCARD_E_NO_ACCESS                                  ((DWORD)0x80100027)\n#define SCARD_E_WRITE_TOO_MANY                             ((DWORD)0x80100028)\n#define SCARD_E_BAD_SEEK                                   ((DWORD)0x80100029)\n#define SCARD_E_INVALID_CHV                                ((DWORD)0x8010002A)\n#define SCARD_E_UNKNOWN_RES_MNG                            ((DWORD)0x8010002B)\n#define SCARD_E_NO_SUCH_CERTIFICATE                        ((DWORD)0x8010002C)\n#define SCARD_E_CERTIFICATE_UNAVAILABLE                    ((DWORD)0x8010002D)\n#define SCARD_E_NO_READERS_AVAILABLE                       ((DWORD)0x8010002E)\n#define SCARD_E_COMM_DATA_LOST                             ((DWORD)0x8010002F)\n#define SCARD_E_NO_KEY_CONTAINER                           ((DWORD)0x80100030)\n#define SCARD_E_SERVER_TOO_BUSY                            ((DWORD)0x80100031)\n#define SCARD_W_UNSUPPORTED_CARD                           ((DWORD)0x80100065)\n#define SCARD_W_UNRESPONSIVE_CARD                          ((DWORD)0x80100066)\n#define SCARD_W_UNPOWERED_CARD                             ((DWORD)0x80100067)\n#define SCARD_W_RESET_CARD                                 ((DWORD)0x80100068)\n#define SCARD_W_REMOVED_CARD                               ((DWORD)0x80100069)\n#define SCARD_W_SECURITY_VIOLATION                         ((DWORD)0x8010006A)\n#define SCARD_W_WRONG_CHV                                  ((DWORD)0x8010006B)\n#define SCARD_W_CHV_BLOCKED                                ((DWORD)0x8010006C)\n#define SCARD_W_EOF                                        ((DWORD)0x8010006D)\n#define SCARD_W_CANCELLED_BY_USER                          ((DWORD)0x8010006E)\n#define SCARD_W_CARD_NOT_AUTHENTICATED                     ((DWORD)0x8010006F)\n#define SCARD_W_CACHE_ITEM_NOT_FOUND                       ((DWORD)0x80100070)\n#define SCARD_W_CACHE_ITEM_STALE                           ((DWORD)0x80100071)\n#define SCARD_W_CACHE_ITEM_TOO_BIG                         ((DWORD)0x80100072)\n\n#endif /* SCARD_S_SUCCESS */\n"
  },
  {
    "path": "wine/windows/schannel.h",
    "content": "/*\n * Copyright (C) 2005 Juan Lang\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __WINE_SCHANNEL_H__\n#define __WINE_SCHANNEL_H__\n\n#include <wincrypt.h>\n\n/* Package names */\n#define UNISP_NAME_A \"Microsoft Unified Security Protocol Provider\"\n#if defined(__GNUC__)\n#define UNISP_NAME_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',\\\n ' ','U','n','i','f','i','e','d',' ','S','e','c','u','r','i','t','y',' ',\\\n 'P','r','o','t','o','c','o','l',' ','P','r','o','v','i','d','e','r',0 }\n#elif defined(_MSC_VER)\n#define UNISP_NAME_W L\"Microsoft Unified Security Protocol Provider\"\n#else\nstatic const WCHAR UNISP_NAME_W[] = { 'M','i','c','r','o','s','o','f','t',\n ' ','U','n','i','f','i','e','d',' ','S','e','c','u','r','i','t','y',' ',\n 'P','r','o','t','o','c','o','l',' ','P','r','o','v','i','d','e','r',0 };\n#endif\n#define UNISP_NAME WINELIB_NAME_AW(UNISP_NAME_)\n\n#define SSL2SP_NAME_A   \"Microsoft SSL 2.0\"\n#if defined(__GNUC__)\n#define SSL2SP_NAME_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',\\\n ' ','S','S','L',' ','2','.','0',0 }\n#elif defined(_MSC_VER)\n#define SSL2SP_NAME_W  L\"Microsoft SSL 2.0\"\n#else\nstatic const WCHAR SSL2SP_NAME_W[] = { 'M','i','c','r','o','s','o','f','t',\n ' ','S','S','L',' ','2','.','0',0 };\n#endif\n#define SSL2SP_NAME WINELIB_NAME_AW(SSL2SP_NAME_)\n\n#define SSL3SP_NAME_A   \"Microsoft SSL 3.0\"\n#if defined(__GNUC__)\n#define SSL3SP_NAME_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',\\\n ' ','S','S','L',' ','3','.','0',0 }\n#elif defined(_MSC_VER)\n#define SSL3SP_NAME_W  L\"Microsoft SSL 3.0\"\n#else\nstatic const WCHAR SSL3SP_NAME_W[] = { 'M','i','c','r','o','s','o','f','t',\n ' ','S','S','L',' ','3','.','0',0 };\n#endif\n#define SSL3SP_NAME WINELIB_NAME_AW(SSL3SP_NAME_)\n\n#define TLS1SP_NAME_A   \"Microsoft TLS 1.0\"\n#if defined(__GNUC__)\n#define TLS1SP_NAME_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',\\\n ' ','T','L','S',' ','1','.','0',0 }\n#elif defined(_MSC_VER)\n#define TLS1SP_NAME_W  L\"Microsoft TLS 1.0\"\n#else\nstatic const WCHAR TLS1SP_NAME_W[] = { 'M','i','c','r','o','s','o','f','t',\n ' ','T','L','S',' ','1','.','0',0 };\n#endif\n#define TLS1SP_NAME WINELIB_NAME_AW(TLS1SP_NAME_)\n\n#define PCT1SP_NAME_A   \"Microsoft PCT 1.0\"\n#if defined(__GNUC__)\n#define PCT1SP_NAME_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',\\\n ' ','P','C','T',' ','1','.','0',0 }\n#elif defined(_MSC_VER)\n#define PCT1SP_NAME_W  L\"Microsoft PCT 1.0\"\n#else\nstatic const WCHAR PCT1SP_NAME_W[] = { 'M','i','c','r','o','s','o','f','t',\n ' ','P','C','T',' ','1','.','0',0 };\n#endif\n#define PCT1SP_NAME WINELIB_NAME_AW(PCT1SP_NAME_)\n\n#define SCHANNEL_NAME_A \"Schannel\"\n#if defined(__GNUC__)\n#define SCHANNEL_NAME_W (const WCHAR []){ 'S','c','h','a','n','n','e','l',0 }\n#elif defined(_MSC_VER)\n#define SCHANNEL_NAME_W  L\"Schannel\"\n#else\nstatic const WCHAR SCHANNEL_NAME_W[] = { 'S','c','h','a','n','n','e','l',0 };\n#endif\n#define SCHANNEL_NAME WINELIB_NAME_AW(SCHANNEL_NAME_)\n\n#define SCH_CRED_V1           1\n#define SCH_CRED_V2           2\n#define SCH_CRED_VERSION      2\n#define SCH_CRED_V3           3\n#define SCHANNEL_CRED_VERSION 4\n\n#define SCHANNEL_RENEGOTIATE 0\n#define SCHANNEL_SHUTDOWN    1\n#define SCHANNEL_ALERT       2\n#define SCHANNEL_SESSION     3\n\n#define SP_PROT_ALL           0xffffffff\n#define SP_PROT_UNI_CLIENT    0x80000000\n#define SP_PROT_UNI_SERVER    0x40000000\n#define SP_PROT_TLS1_2_CLIENT 0x00000800\n#define SP_PROT_TLS1_2_SERVER 0x00000400\n#define SP_PROT_TLS1_1_CLIENT 0x00000200\n#define SP_PROT_TLS1_1_SERVER 0x00000100\n#define SP_PROT_TLS1_0_CLIENT SP_PROT_TLS1_CLIENT\n#define SP_PROT_TLS1_0_SERVER SP_PROT_TLS1_SERVER\n#define SP_PROT_TLS1_CLIENT   0x00000080\n#define SP_PROT_TLS1_SERVER   0x00000040\n#define SP_PROT_SSL3_CLIENT   0x00000020\n#define SP_PROT_SSL3_SERVER   0x00000010\n#define SP_PROT_SSL2_CLIENT   0x00000008\n#define SP_PROT_SSL2_SERVER   0x00000004\n#define SP_PROT_PCT1_CLIENT   0x00000002\n#define SP_PROT_PCT1_SERVER   0x00000001\n#define SP_PROT_NONE          0x00000000\n\n#define SP_PROT_UNI                (SP_PROT_UNI_CLIENT | SP_PROT_UNI_SERVER)\n#define SP_PROT_TLS1_2             (SP_PROT_TLS1_2_CLIENT | SP_PROT_TLS1_2_SERVER)\n#define SP_PROT_TLS1_1             (SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_1_SERVER)\n#define SP_PROT_TLS1_0             (SP_PROT_TLS1_0_CLIENT | SP_PROT_TLS1_0_SERVER)\n#define SP_PROT_TLS1               (SP_PROT_TLS1_CLIENT | SP_PROT_TLS1_SERVER)\n#define SP_PROT_SSL3               (SP_PROT_SSL3_CLIENT | SP_PROT_SSL3_SERVER)\n#define SP_PROT_SSL2               (SP_PROT_SSL2_CLIENT | SP_PROT_SSL2_SERVER)\n#define SP_PROT_PCT1               (SP_PROT_PCT1_CLIENT | SP_PROT_PCT1_SERVER)\n\n#define SP_PROT_SSL3TLS1_CLIENTS   (SP_PROT_SSL3_CLIENT | SP_PROT_TLS1_CLIENT)\n#define SP_PROT_SSL3TLS1_SERVERS   (SP_PROT_SSL3_SERVER | SP_PROT_TLS1_SERVER)\n#define SP_PROT_SSL3TLS1_X_CLIENTS (SP_PROT_SSL3_CLIENT | SP_PROT_TLS1_X_CLIENT)\n#define SP_PROT_SSL3TLS1_X_SERVERS (SP_PROT_SSL3_SERVER | SP_PROT_TLS1_X_SERVER)\n#define SP_PROT_TLS1_X_CLIENT      (SP_PROT_TLS1_0_CLIENT | SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_2_CLIENT)\n#define SP_PROT_TLS1_X_SERVER      (SP_PROT_TLS1_0_SERVER | SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_2_SERVER)\n#define SP_PROT_TLS1_1PLUS_CLIENT  (SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_2_CLIENT)\n#define SP_PROT_TLS1_1PLUS_SERVER  (SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_2_SERVER)\n#define SP_PROT_CLIENTS            (SP_PROT_PCT1_CLIENT | SP_PROT_SSL2_CLIENT | SP_PROT_SSL3_CLIENT \\\n                                  | SP_PROT_TLS1_CLIENT | SP_PROT_UNI_CLIENT)\n#define SP_PROT_SERVERS            (SP_PROT_PCT1_SERVER | SP_PROT_SSL2_SERVER | SP_PROT_SSL3_SERVER \\\n                                  | SP_PROT_TLS1_SERVER | SP_PROT_UNI_SERVER)\n#define SP_PROT_X_CLIENTS          (SP_PROT_CLIENTS | SP_PROT_TLS1_X_CLIENT)\n#define SP_PROT_X_SERVERS          (SP_PROT_SERVERS | SP_PROT_TLS1_X_SERVER)\n\n#define SP_PROT_SSL3TLS1           (SP_PROT_SSL3 | SP_PROT_TLS1)\n#define SP_PROT_SSL3TLS1_X         (SP_PROT_SSL3 | SP_PROT_TLS1_X)\n#define SP_PROT_TLS1_X             (SP_PROT_TLS1_X_CLIENT | SP_PROT_TLS1_X_SERVER)\n#define SP_PROT_TLS1_1PLUS         (SP_PROT_TLS1_1PLUS_CLIENT | SP_PROT_TLS1_1PLUS_SERVER)\n\n#define SCH_CRED_NO_SYSTEM_MAPPER                    2\n#define SCH_CRED_NO_SERVERNAME_CHECK                 4\n#define SCH_CRED_MANUAL_CRED_VALIDATION              8\n#define SCH_CRED_NO_DEFAULT_CREDS                    16\n#define SCH_CRED_AUTO_CRED_VALIDATION                32\n#define SCH_CRED_USE_DEFAULT_CREDS                   64\n#define SCH_CRED_REVOCATION_CHECK_CHAIN_END_CERT     256\n#define SCH_CRED_REVOCATION_CHECK_CHAIN              512\n#define SCH_CRED_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 1024\n#define SCH_CRED_IGNORE_NO_REVOCATION_CHECK          2048\n#define SCH_CRED_IGNORE_REVOCATION_OFFLINE           4096\n\n#define SECPKG_ATTR_ISSUER_LIST         0x50\n#define SECPKG_ATTR_REMOTE_CRED         0x51\n#define SECPKG_ATTR_LOCAL_CRED          0x52\n#define SECPKG_ATTR_REMOTE_CERT_CONTEXT 0x53\n#define SECPKG_ATTR_LOCAL_CERT_CONTEXT  0x54\n#define SECPKG_ATTR_ROOT_STORE          0x55\n#define SECPKG_ATTR_SUPPORTED_ALGS      0x56\n#define SECPKG_ATTR_CIPHER_STRENGTHS    0x57\n#define SECPKG_ATTR_SUPPORTED_PROTOCOLS 0x58\n#define SECPKG_ATTR_ISSUER_LIST_EX      0x59\n#define SECPKG_ATTR_CONNECTION_INFO     0x5a\n#define SECPKG_ATTR_EAP_KEY_BLOCK       0x5b\n#define SECPKG_ATTR_MAPPED_CRED_ATTR    0x5c\n#define SECPKG_ATTR_SESSION_INFO        0x5d\n#define SECPKG_ATTR_APP_DATA            0x5e\n\n#define UNISP_RPC_ID 14\n\nstruct _HMAPPER;\n\ntypedef struct _SCHANNEL_CRED\n{\n    DWORD dwVersion;\n    DWORD cCreds;\n    PCCERT_CONTEXT *paCred;\n    HCERTSTORE hRootStore;\n    DWORD cMappers;\n    struct _HMAPPER **aphMappers;\n    DWORD cSupportedAlgs;\n    ALG_ID *palgSupportedAlgs;\n    DWORD grbitEnabledProtocols;\n    DWORD dwMinimumCipherStrength;\n    DWORD dwMaximumCipherStrength;\n    DWORD dwSessionLifespan;\n    DWORD dwFlags;\n    DWORD dwCredFormat;\n} SCHANNEL_CRED, *PSCHANNEL_CRED;\n\ntypedef struct _SecPkgCred_SupportedAlgs\n{\n    DWORD cSupportedAlgs;\n    ALG_ID *palgSupportedAlgs;\n} SecPkgCred_SupportedAlgs, *PSecPkgCred_SupportedAlgs;\n\ntypedef struct _SecPkgCred_CipherStrengths\n{\n    DWORD dwMinimumCipherStrength;\n    DWORD dwMaximumCipherStrength;\n} SecPkgCred_CipherStrengths, *PSecPkgCred_CipherStrengths;\n\ntypedef struct _SecPkgCred_SupportedProtocols\n{\n    DWORD grbitProtocol;\n} SecPkgCred_SupportedProtocols, *PSecPkgCred_SupportedProtocols;\n\ntypedef struct _SecPkgContext_IssuerListInfoEx\n{\n    PCERT_NAME_BLOB aIssuers;\n    DWORD cIssuers;\n} SecPkgContext_IssuerListInfoEx, *PSecPkgContext_IssuerListInfoEx;\n\ntypedef struct _SecPkgContext_ConnectionInfo\n{\n    DWORD dwProtocol;\n    ALG_ID aiCipher;\n    DWORD dwCipherStrength;\n    ALG_ID aiHash;\n    DWORD dwHashStrength;\n    ALG_ID aiExch;\n    DWORD dwExchStrength;\n} SecPkgContext_ConnectionInfo, *PSecPkgContext_ConnectionInfo;\n\n#endif /* __WINE_SCHANNEL_H__ */\n"
  },
  {
    "path": "wine/windows/schemadef.h",
    "content": "/*\n * Copyright (C) 2003 Kevin Koltzau\n * Copyright (C) 2004 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_SCHEMADEF_H\n#define __WINE_SCHEMADEF_H\n\n#define BEGIN_TM_SCHEMA(name)\n#define END_TM_SCHEMA(name)\n\n#define BEGIN_TM_ENUM(name)                enum name {\n#define TM_ENUM(value, prefix, name)           prefix##_##name = (value),\n#define END_TM_ENUM()                      };\n\n#define BEGIN_TM_PROPS()                   enum PropValues { \\\n                                               DummyProp = 49,\n#define TM_PROP(value, prefix, name, type)     prefix##_##name = (value),\n#define END_TM_PROPS()                     };\n\n#define BEGIN_TM_CLASS_PARTS(name)         enum name##PARTS { \\\n                                               name##PartFiller0,\n#define TM_PART(value, prefix, name)           prefix##_##name = (value),\n#define END_TM_CLASS_PARTS()               };\n\n#define BEGIN_TM_PART_STATES(name)         enum name##STATES { \\\n                                               name##StateFiller0,\n#define TM_STATE(value, prefix, name)          prefix##_##name = (value),\n#define END_TM_PART_STATES()               };\n\n#endif\n"
  },
  {
    "path": "wine/windows/schnlsp.h",
    "content": "/*\n * Copyright (C) 2005 Juan Lang\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __WINE_SHNLSP_H__\n#define __WINE_SHNLSP_H__\n\n#include <schannel.h>\n\n#endif /* __WINE_SHNLSP_H__ */\n"
  },
  {
    "path": "wine/windows/sddl.h",
    "content": "/*\n * Copyright (C) 2003 Ulrich Czekalla for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __SDDL_H__\n#define __SDDL_H__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Versioning */\n#define SDDL_REVISION_1 1\n#define SDDL_REVISION   SDDL_REVISION_1\n\n#ifndef WINE_NO_UNICODE_MACROS\n/* Component tags */\n#ifndef UNICODE\n# define SDDL_OWNER \"O\"\n# define SDDL_GROUP \"G\"\n# define SDDL_DACL  \"D\"\n# define SDDL_SACL  \"S\"\n#else\n# if defined(__GNUC__)\n#  define SDDL_OWNER (const WCHAR[]){ 'O',0 }\n#  define SDDL_GROUP (const WCHAR[]){ 'G',0 }\n#  define SDDL_DACL  (const WCHAR[]){ 'D',0 }\n#  define SDDL_SACL  (const WCHAR[]){ 'S',0 }\n# elif defined(_MSC_VER)\n#  define SDDL_OWNER L\"O\"\n#  define SDDL_GROUP L\"G\"\n#  define SDDL_DACL  L\"D\"\n#  define SDDL_SACL  L\"S\"\n# else\n   static const WCHAR SDDL_OWNER[] = { 'O',0 };\n   static const WCHAR SDDL_GROUP[] = { 'G',0 };\n   static const WCHAR SDDL_DACL[]  = { 'D',0 };\n   static const WCHAR SDDL_SACL[]  = { 'S',0 };\n# endif\n#endif /* UNICODE */\n\n/* Separators as characters */\n/* SDDL_SEPERATORC is not a typo, as per Microsoft's headers */\n#ifndef UNICODE\n# define SDDL_SEPERATORC   ';'\n# define SDDL_DELIMINATORC ':'\n# define SDDL_ACE_BEGINC   '('\n# define SDDL_ACE_ENDC     ')'\n#else\n# define SDDL_SEPERATORC   ((WCHAR)';')\n# define SDDL_DELIMINATORC ((WCHAR)':')\n# define SDDL_ACE_BEGINC   ((WCHAR)'(')\n# define SDDL_ACE_ENDC     ((WCHAR)')')\n#endif /* UNICODE */\n\n/* Separators as strings */\n/* SDDL_SEPERATOR is not a typo, as per Microsoft's headers */\n#ifndef UNICODE\n# define SDDL_SEPERATOR   \";\"\n# define SDDL_DELIMINATOR \":\"\n# define SDDL_ACE_BEGIN   \"(\"\n# define SDDL_ACE_END     \")\"\n#else\n# if defined(__GNUC__)\n#  define SDDL_SEPERATOR   (const WCHAR[]){ ';',0 }\n#  define SDDL_DELIMINATOR (const WCHAR[]){ ':',0 }\n#  define SDDL_ACE_BEGIN   (const WCHAR[]){ '(',0 }\n#  define SDDL_ACE_END     (const WCHAR[]){ ')',0 }\n# elif defined(_MSC_VER)\n#  define SDDL_SEPERATOR   L\";\"\n#  define SDDL_DELIMINATOR L\":\"\n#  define SDDL_ACE_BEGIN   L\"(\"\n#  define SDDL_ACE_END     L\")\"\n# else\n   static const WCHAR SDDL_SEPERATOR[]   = { ';',0 };\n   static const WCHAR SDDL_DELIMINATOR[] = { ':',0 };\n   static const WCHAR SDDL_ACE_BEGIN[]   = { '(',0 };\n   static const WCHAR SDDL_ACE_END[]     = { ')',0 };\n# endif\n#endif /* UNICODE */\n#endif /* WINE_NO_UNICODE_MACROS */\n\nBOOL WINAPI ConvertSidToStringSidA( PSID, LPSTR* );\nBOOL WINAPI ConvertSidToStringSidW( PSID, LPWSTR* );\n#define ConvertSidToStringSid WINELIB_NAME_AW(ConvertSidToStringSid)\n\nBOOL WINAPI ConvertStringSidToSidA( LPCSTR, PSID* );\nBOOL WINAPI ConvertStringSidToSidW( LPCWSTR, PSID* );\n#define ConvertStringSidToSid WINELIB_NAME_AW(ConvertStringSidToSid)\n\nBOOL WINAPI ConvertStringSecurityDescriptorToSecurityDescriptorA(\n    LPCSTR, DWORD, PSECURITY_DESCRIPTOR*, PULONG );\nBOOL WINAPI ConvertStringSecurityDescriptorToSecurityDescriptorW(\n    LPCWSTR, DWORD, PSECURITY_DESCRIPTOR*, PULONG );\n#define ConvertStringSecurityDescriptorToSecurityDescriptor WINELIB_NAME_AW(ConvertStringSecurityDescriptorToSecurityDescriptor)\n\nBOOL WINAPI ConvertSecurityDescriptorToStringSecurityDescriptorA(\n    PSECURITY_DESCRIPTOR, DWORD, SECURITY_INFORMATION, LPSTR*, PULONG );\nBOOL WINAPI ConvertSecurityDescriptorToStringSecurityDescriptorW(\n    PSECURITY_DESCRIPTOR, DWORD, SECURITY_INFORMATION, LPWSTR*, PULONG );\n#define ConvertSecurityDescriptorToStringSecurityDescriptor WINELIB_NAME_AW(ConvertSecurityDescriptorToStringSecurityDescriptor)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* __SDDL_H__ */\n"
  },
  {
    "path": "wine/windows/secext.h",
    "content": "/*\n * Copyright (C) 2004 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __SECEXT_H__\n#define __SECEXT_H__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef enum\n{\n    NameUnknown = 0,\n    NameFullyQualifiedDN = 1,\n    NameSamCompatible = 2,\n    NameDisplay = 3,\n    NameUniqueId = 6,\n    NameCanonical = 7,\n    NameUserPrincipal = 8,\n    NameCanonicalEx = 9,\n    NameServicePrincipal = 10,\n    NameDnsDomain = 12,\n    NameGivenName = 13,\n    NameSurname = 14,\n} EXTENDED_NAME_FORMAT, *PEXTENDED_NAME_FORMAT;\n\nBOOLEAN WINAPI GetComputerObjectNameA( EXTENDED_NAME_FORMAT, LPSTR, PULONG );\nBOOLEAN WINAPI GetComputerObjectNameW( EXTENDED_NAME_FORMAT, LPWSTR, PULONG );\n#define        GetComputerObjectName WINELIB_NAME_AW(GetComputerObjectName)\n\nBOOLEAN WINAPI GetUserNameExA( EXTENDED_NAME_FORMAT, LPSTR, PULONG );\nBOOLEAN WINAPI GetUserNameExW( EXTENDED_NAME_FORMAT, LPWSTR, PULONG );\n#define        GetUserNameEx WINELIB_NAME_AW(GetUserNameEx)\n\nBOOLEAN WINAPI TranslateNameA( LPCSTR, EXTENDED_NAME_FORMAT, EXTENDED_NAME_FORMAT, LPSTR, PULONG);\nBOOLEAN WINAPI TranslateNameW( LPCWSTR, EXTENDED_NAME_FORMAT, EXTENDED_NAME_FORMAT, LPWSTR, PULONG);\n#define        TranslateName WINELIB_NAME_AW(TranslateName)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __SECEXT_H__ */\n"
  },
  {
    "path": "wine/windows/security.h",
    "content": "/*\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _SECURITY_H\n#define _SECURITY_H\n\n#include <sspi.h>\n\n#if defined(SECURITY_WIN32) || defined(SECURITY_KERNEL)\n#include <secext.h>\n#endif\n\n#endif /* _SECURITY_H */\n"
  },
  {
    "path": "wine/windows/sensapi.h",
    "content": "/*\n * Copyright (C) 2005 Steven Edwards\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __SENSAPI_H__\n#define __SENSAPI_H__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define NETWORK_ALIVE_LAN 1\n#define NETWORK_ALIVE_WAN 2\n#define NETWORK_ALIVE_AOL 4\n\ntypedef struct tagQOCINFO\n{\n    DWORD dwSize;\n    DWORD dwFlags;\n    DWORD dwInSpeed;\n    DWORD dwOutSpeed;\n} QOCINFO, *LPQOCINFO;\n\nBOOL WINAPI IsDestinationReachableA(LPCSTR lpszDestination, LPQOCINFO lpQOCInfo);\nBOOL WINAPI IsDestinationReachableW(LPCWSTR lpszDestination, LPQOCINFO lpQOCInfo);\n#define     IsDestinationReachable WINELIB_NAME_AW(IsDestinationReachable)\nBOOL WINAPI IsNetworkAlive(LPDWORD lpdwFlags);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __SENSAPI_H__ */\n"
  },
  {
    "path": "wine/windows/sensevts.idl",
    "content": "/*\n * Copyright (C) 2005 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"wtypes.idl\";\nimport \"oaidl.idl\";\n\n[\n  version(2.0),\n  uuid(d597deed-5b9f-11d1-8dd2-00aa004abd5e)\n]\nlibrary SensEvents\n{\n    importlib(\"stdole2.tlb\");\n\n    typedef struct SENS_QOCINFO\n    {\n        DWORD dwSize;\n        DWORD dwFlags;\n        DWORD dwOutSpeed;\n        DWORD dwInSpeed;\n    } SENS_QOCINFO, *LPSENS_QOCINFO;\n\n    [\n      object,\n      uuid(d597bab1-5b9f-11d1-8dd2-00aa004abd5e),\n      pointer_default(unique)\n    ]\n    interface ISensNetwork : IDispatch\n    {\n        HRESULT ConnectionMade(\n            [in] BSTR bstrConnection,\n            [in] ULONG ulType,\n            [in] LPSENS_QOCINFO lpQOCInfo );\n        HRESULT ConnectionMadeNoQOCInfo(\n            [in] BSTR bstrConnection,\n            [in] ULONG ulType );\n        HRESULT ConnectionLost(\n            [in] BSTR bstrConnection,\n            [in] ULONG ulType );\n        HRESULT DestinationReachable(\n            [in] BSTR bstrDestination,\n            [in] BSTR bstrConnection,\n            [in] ULONG ulType,\n            [in] LPSENS_QOCINFO lpQOCInfo );\n        HRESULT DestinationReachableNoQOCInfo(\n            [in] BSTR bstrDestination,\n            [in] BSTR bstrConnection,\n            [in] ULONG ulType );\n    }\n\n    [\n      object,\n      uuid(d597bab2-5b9f-11d1-8dd2-00aa004abd5e),\n      pointer_default(unique)\n    ]\n    interface ISensOnNow : IDispatch\n    {\n        HRESULT OnAcPower( void );\n        HRESULT OnBatteryPower(\n            [in] DWORD dwBatteryLifePercent );\n        HRESULT BatteryLow(\n            [in] DWORD dwBatteryLifePercent );\n    }\n\n    [\n      object,\n      uuid(d597bab3-5b9f-11d1-8dd2-00aa004abd5e),\n      pointer_default(unique)\n    ]\n    interface ISensLogon : IDispatch\n    {\n        HRESULT Logon(\n            [in] BSTR bstrUserName );\n        HRESULT Logoff(\n            [in] BSTR bstrUserName );\n        HRESULT StartShell(\n            [in] BSTR bstrUserName );\n        HRESULT DisplayLock(\n            [in] BSTR bstrUserName );\n        HRESULT DisplayUnlock(\n            [in] BSTR bstrUserName );\n        HRESULT StartScreenSaver(\n            [in] BSTR bstrUserName );\n        HRESULT StopScreenSaver(\n            [in] BSTR bstrUserName );\n    }\n\n    [\n      object,\n      uuid(d597bab4-5b9f-11d1-8dd2-00aa004abd5e),\n      pointer_default(unique)\n    ]\n    interface ISensLogon2 : IDispatch\n    {\n        HRESULT Logon(\n            [in] BSTR bstrUserName,\n            [in] DWORD dwSessionId );\n        HRESULT Logoff(\n            [in] BSTR bstrUserName,\n            [in] DWORD dwSessionId );\n        HRESULT SessionDisconnect(\n            [in] BSTR bstrUserName,\n            [in] DWORD dwSessionId );\n        HRESULT SessionReconnect(\n            [in] BSTR bstrUserName,\n            [in] DWORD dwSessionId );\n        HRESULT PostShell(\n            [in] BSTR bstrUserName,\n            [in] DWORD dwSessionId );\n    }\n\n} /* library SensEvents */\n"
  },
  {
    "path": "wine/windows/servprov.idl",
    "content": "/*\n * Copyright (C) 1999 Francois Gouget\n * Copyright (C) 2003 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"objidl.idl\";\n\n\n/*****************************************************************************\n * IServiceProvider interface\n */\n[\n    object,\n    uuid(6d5140c1-7436-11ce-8034-00aa006009fa),\n    pointer_default(unique)\n]\ninterface IServiceProvider : IUnknown\n{\n    typedef [unique] IServiceProvider *LPSERVICEPROVIDER;\n\n    [local]\n    HRESULT QueryService(\n        [in] REFGUID guidService,\n        [in] REFIID riid,\n        [out] void ** ppvObject);\n\n    [call_as(QueryService)]\n    HRESULT RemoteQueryService(\n        [in] REFGUID guidService,\n        [in] REFIID riid,\n        [out, iid_is(riid)] IUnknown ** ppvObject);\n}\n"
  },
  {
    "path": "wine/windows/sesprp.idl",
    "content": "/*\n * Copyright (C) 2009 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    object,\n    uuid(0c733a85-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface ISessionProperties : IUnknown\n{\n    [local]\n    HRESULT GetProperties([in] ULONG cPropertyIDSets,\n                          [in, size_is(cPropertyIDSets)] const DBPROPIDSET rgPropertyIDSets[],\n                          [in, out] ULONG *pcPropertySets,\n                          [out, size_is(,*pcPropertySets)] DBPROPSET **prgPropertySets);\n\n    [call_as(GetProperties)]\n    HRESULT RemoteGetProperties([in] ULONG cPropertyIDSets,\n                                [in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets,\n                                [in, out] ULONG *pcPropertySets,\n                                [out, size_is(,*pcPropertySets)] DBPROPSET **prgPropertySets,\n                                [out] IErrorInfo **ppErrorInfoRem);\n\n\n    [local]\n    HRESULT SetProperties([in] ULONG cPropertySets,\n                          [in, out, unique, size_is(cPropertySets)] DBPROPSET rgPropertySets[]);\n\n    [call_as(SetProperties)]\n    HRESULT RemoteSetProperties([in] ULONG cPropertySets,\n                                [in, unique, size_is(cPropertySets)] DBPROPSET *rgPropertySets,\n                                [in] ULONG cTotalProps,\n                                [out, size_is(cTotalProps)] DBPROPSTATUS *rgPropStatus,\n                                [out] IErrorInfo **ppErrorInfoRem);\n\n}\n"
  },
  {
    "path": "wine/windows/setupapi.h",
    "content": "/*\n * Copyright (C) 2000 James Hatheway\n * Copyright (C) 2007 Juan Lang\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _INC_SETUPAPI\n#define _INC_SETUPAPI\n\n#include <commctrl.h>\n#include <devpropdef.h>\n\n#ifdef _WIN64\n#include <pshpack8.h>\n#else\n#include <pshpack1.h>\n#endif\n\n/* setupapi doesn't use the normal convention, it adds an underscore before A/W */\n#ifdef WINE_NO_UNICODE_MACROS\n# define DECL_WINELIB_SETUPAPI_TYPE_AW(type)  /* nothing */\n#else\n# define DECL_WINELIB_SETUPAPI_TYPE_AW(type)  typedef WINELIB_NAME_AW(type##_) type;\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Define type for handle to a loaded inf file */\ntypedef PVOID HINF;\n\n/* Define type for handle to a device information set */\ntypedef PVOID HDEVINFO;\n\n/* Define type for handle to a setup log file */\ntypedef PVOID HSPFILELOG;\n\n/* Define type for setup file queue */\ntypedef PVOID HSPFILEQ;\n\ntypedef PVOID HDSKSPC;\n\n/* inf structure. */\ntypedef struct _INFCONTEXT\n{\n   PVOID Inf;\n   PVOID CurrentInf;\n   UINT  Section;\n   UINT  Line;\n} INFCONTEXT, *PINFCONTEXT;\n\ntypedef struct _SP_ALTPLATFORM_INFO_V2\n{\n    DWORD cbSize;\n    DWORD Platform;\n    DWORD MajorVersion;\n    DWORD MinorVersion;\n    WORD  ProcessorArchitecture;\n    union\n    {\n        WORD  Reserved;\n        WORD  Flags;\n    } DUMMYUNIONNAME;\n    DWORD FirstValidatedMajorVersion;\n    DWORD FirstValidatedMinorVersion;\n} SP_ALTPLATFORM_INFO_V2, *PSP_ALTPLATFORM_INFO_V2;\n\n#define SP_ALTPLATFORM_FLAGS_VERSION_RANGE 0x0001\n\ntypedef struct _SP_ALTPLATFORM_INFO_V1\n{\n    DWORD cbSize;\n    DWORD Platform;\n    DWORD MajorVersion;\n    DWORD MinorVersion;\n    WORD  ProcessorArchitecture;\n    WORD  Reserved;\n} SP_ALTPLATFORM_INFO_V1, *PSP_ALTPLATFORM_INFO_V1;\n\ntypedef SP_ALTPLATFORM_INFO_V2 SP_ALTPLATFORM_INFO;\ntypedef PSP_ALTPLATFORM_INFO_V2 PSP_ALTPLATFORM_INFO;\n\ntypedef struct _SP_FILE_COPY_PARAMS_A\n{\n    DWORD    cbSize;\n    HSPFILEQ QueueHandle;\n    PCSTR    SourceRootPath;\n    PCSTR    SourcePath;\n    PCSTR    SourceFilename;\n    PCSTR    SourceDescription;\n    PCSTR    SourceTagfile;\n    PCSTR    TargetDirectory;\n    PCSTR    TargetFilename;\n    DWORD    CopyStyle;\n    HINF     LayoutInf;\n    PCSTR    SecurityDescriptor;\n} SP_FILE_COPY_PARAMS_A, *PSP_FILE_COPY_PARAMS_A;\n\ntypedef struct _SP_FILE_COPY_PARAMS_W\n{\n    DWORD    cbSize;\n    HSPFILEQ QueueHandle;\n    PCWSTR   SourceRootPath;\n    PCWSTR   SourcePath;\n    PCWSTR   SourceFilename;\n    PCWSTR   SourceDescription;\n    PCWSTR   SourceTagfile;\n    PCWSTR   TargetDirectory;\n    PCWSTR   TargetFilename;\n    DWORD    CopyStyle;\n    HINF     LayoutInf;\n    PCWSTR   SecurityDescriptor;\n} SP_FILE_COPY_PARAMS_W, *PSP_FILE_COPY_PARAMS_W;\n\nDECL_WINELIB_SETUPAPI_TYPE_AW(SP_FILE_COPY_PARAMS)\nDECL_WINELIB_SETUPAPI_TYPE_AW(PSP_FILE_COPY_PARAMS)\n\ntypedef struct _SP_REGISTER_CONTROL_STATUSA\n{\n    DWORD    cbSize;\n    PCSTR    FileName;\n    DWORD    Win32Error;\n    DWORD    FailureCode;\n} SP_REGISTER_CONTROL_STATUSA, *PSP_REGISTER_CONTROL_STATUSA;\n\ntypedef struct _SP_REGISTER_CONTROL_STATUSW\n{\n    DWORD    cbSize;\n    PCWSTR   FileName;\n    DWORD    Win32Error;\n    DWORD    FailureCode;\n} SP_REGISTER_CONTROL_STATUSW, *PSP_REGISTER_CONTROL_STATUSW;\n\nDECL_WINELIB_TYPE_AW(SP_REGISTER_CONTROL_STATUS)\nDECL_WINELIB_TYPE_AW(PSP_REGISTER_CONTROL_STATUS)\n\n#define SPREG_SUCCESS       0x00000000\n#define SPREG_LOADLIBRARY   0x00000001\n#define SPREG_GETPROCADDR   0x00000002\n#define SPREG_REGSVR        0x00000003\n#define SPREG_DLLINSTALL    0x00000004\n#define SPREG_TIMEOUT       0x00000005\n#define SPREG_UNKNOWN       0xffffffff\n\ntypedef UINT (CALLBACK *PSP_FILE_CALLBACK_A)( PVOID Context, UINT Notification,\n                                              UINT_PTR Param1, UINT_PTR Param2 );\ntypedef UINT (CALLBACK *PSP_FILE_CALLBACK_W)( PVOID Context, UINT Notification,\n                                              UINT_PTR Param1, UINT_PTR Param2 );\nDECL_WINELIB_SETUPAPI_TYPE_AW(PSP_FILE_CALLBACK)\n\n#define LINE_LEN                    256\n#define MAX_INF_STRING_LENGTH       4096\n#define MAX_TITLE_LEN               60\n#define MAX_INSTRUCTION_LEN         256\n#define MAX_LABEL_LEN               30\n#define MAX_SERVICE_NAME_LEN        256\n#define MAX_SUBTITLE_LEN            256\n#define SP_MAX_MACHINENAME_LENGTH   (MAX_PATH + 3)\n\ntypedef UINT DI_FUNCTION;\n\ntypedef struct _SP_CLASSINSTALL_HEADER\n{\n  DWORD       cbSize;\n  DI_FUNCTION InstallFunction;\n} SP_CLASSINSTALL_HEADER, *PSP_CLASSINSTALL_HEADER;\n\ntypedef struct _SP_ENABLECLASS_PARAMS\n{\n    SP_CLASSINSTALL_HEADER ClassInstallHeader;\n    GUID                   ClassGuid;\n    DWORD                  EnableMessage;\n} SP_ENABLECLASS_PARAMS, *PSP_ENABLECLASS_PARAMS;\n\n/* SP_ENABLECLASS_PARAMS EnableMessage values */\n#define ENABLECLASS_QUERY   0\n#define ENABLECLASS_SUCCESS 1\n#define ENABLECLASS_FAILURE 2\n\ntypedef struct _SP_PROPCHANGE_PARAMS\n{\n  SP_CLASSINSTALL_HEADER  ClassInstallHeader;\n  DWORD  StateChange;\n  DWORD  Scope;\n  DWORD  HwProfile;\n} SP_PROPCHANGE_PARAMS, *PSP_PROPCHANGE_PARAMS;\n\n/* SP_PROPCHANGE_PARAMS StateChange values */\n#define DICS_ENABLE      0x00000001\n#define DICS_DISABLE     0x00000002\n#define DICS_PROPCHANGE  0x00000003\n#define DICS_START       0x00000004\n#define DICS_STOP        0x00000005\n/* SP_PROPCHANGE_PARAMS Scope values */\n#define DICS_FLAG_GLOBAL         0x00000001\n#define DICS_FLAG_CONFIGSPECIFIC 0x00000002\n#define DICS_FLAG_CONFIGGENERAL  0x00000004\n\n\ntypedef struct _SP_DEVINSTALL_PARAMS_A\n{\n    DWORD               cbSize;\n    DWORD               Flags;\n    DWORD               FlagsEx;\n    HWND                hwndParent;\n    PSP_FILE_CALLBACK_A InstallMsgHandler;\n    PVOID               InstallMsgHandlerContext;\n    HSPFILEQ            FileQueue;\n    ULONG_PTR           ClassInstallReserved;\n    DWORD               Reserved;\n    CHAR                DriverPath[MAX_PATH];\n} SP_DEVINSTALL_PARAMS_A, *PSP_DEVINSTALL_PARAMS_A;\n\ntypedef struct _SP_DEVINSTALL_PARAMS_W\n{\n    DWORD               cbSize;\n    DWORD               Flags;\n    DWORD               FlagsEx;\n    HWND                hwndParent;\n    PSP_FILE_CALLBACK_W InstallMsgHandler;\n    PVOID               InstallMsgHandlerContext;\n    HSPFILEQ            FileQueue;\n    ULONG_PTR           ClassInstallReserved;\n    DWORD               Reserved;\n    WCHAR               DriverPath[MAX_PATH];\n} SP_DEVINSTALL_PARAMS_W, *PSP_DEVINSTALL_PARAMS_W;\n\nDECL_WINELIB_SETUPAPI_TYPE_AW(SP_DEVINSTALL_PARAMS)\nDECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DEVINSTALL_PARAMS)\n\n/* SP_DEVINSTALL_PARAMS Flags values */\n#define DI_SHOWOEM             0x00000001\n#define DI_SHOWCOMPAT          0x00000002\n#define DI_SHOWCLASS           0x00000004\n#define DI_SHOWALL             0x00000007\n#define DI_NOVCP               0x00000008\n#define DI_DIDCOMPAT           0x00000010\n#define DI_DIDCLASS            0x00000020\n#define DI_AUTOASSIGNRES       0x00000040\n#define DI_NEEDRESTART         0x00000080\n#define DI_NEEDREBOOT          0x00000100\n#define DI_NOBROWSE            0x00000200\n#define DI_MULTMFGS            0x00000400\n#define DI_DISABLED            0x00000800\n#define DI_GENERALPAGE_ADDED   0x00001000\n#define DI_RESOURCEPAGE_ADDED  0x00002000\n#define DI_PROPERTIES_CHANGE   0x00004000\n#define DI_INF_IS_SORTED       0x00080000\n#define DI_ENUMSINGLEINF       0x00010000\n#define DI_DONOTCALLCONFIGMG   0x00020000\n#define DI_INSTALLDISABLED     0x00040000\n#define DI_COMPAT_FROM_CLASS   0x00080000\n#define DI_CLASSINSTALLPARAMS  0x00100000\n#define DI_NODI_DEFAULTACTION  0x00200000\n#define DI_QUIETINSTALL        0x00800000\n#define DI_NOFILECOPY          0x01000000\n#define DI_FORCECOPY           0x02000000\n#define DI_DRIVERPAGE_ADDED    0x04000000\n#define DI_USECI_SELECTSTRINGS 0x08000000\n#define DI_OVERRIDE_INFFLAGS   0x10000000\n#define DI_PROPS_NOCHANGEUSAGE 0x20000000\n#define DI_NOSELECTICONS       0x40000000\n#define DI_NOWRITE_IDS         0x80000000\n/* SP_DEVINSTALL_PARAMS FlagsEx values */\n#define DI_FLAGSEX_USEOLDINFSEARCH          0x00000001\n#define DI_FLAGSEX_RESERVED2                0x00000002\n#define DI_FLAGSEX_CI_FAILED                0x00000004\n#define DI_FLAGSEX_FINISHINSTALL_ACTION     0x00000008\n#define DI_FLAGSEX_DIDINFOLIST              0x00000010\n#define DI_FLAGSEX_DIDCOMPATINFO            0x00000020\n#define DI_FLAGSEX_FILTERCLASSES            0x00000040\n#define DI_FLAGSEX_SETFAILEDINSTALL         0x00000080\n#define DI_FLAGSEX_DEVICECHANGE             0x00000100\n#define DI_FLAGSEX_ALWAYSWRITEIDS           0x00000200\n#define DI_FLAGSEX_PROPCHANGE_PENDING       0x00000400\n#define DI_FLAGSEX_ALLOWEXCLUDEDDRVS        0x00000800\n#define DI_FLAGSEX_NOUIONQUERYREMOVE        0x00001000\n#define DI_FLAGSEX_USECLASSFORCOMPAT        0x00002000\n#define DI_FLAGSEX_RESERVED3                0x00004000\n#define DI_FLAGSEX_NO_DRVREG_MODIFY         0x00008000\n#define DI_FLAGSEX_IN_SYSTEM_SETUP          0x00010000\n#define DI_FLAGSEX_INET_DRIVER              0x00020000\n#define DI_FLAGSEX_APPENDDRIVERLIST         0x00040000\n#define DI_FLAGSEX_PREINSTALLBACKUP         0x00080000\n#define DI_FLAGSEX_BACKUPONREPLACE          0x00100000\n#define DI_FLAGSEX_DRIVERLIST_FROM_URL      0x00200000\n#define DI_FLAGSEX_RESERVED1                0x00400000\n#define DI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS 0x00800000\n#define DI_FLAGSEX_POWERPAGE_ADDED          0x01000000\n#define DI_FLAGSEX_FILTERSIMILARDRIVERS     0x02000000\n#define DI_FLAGSEX_INSTALLEDDRIVER          0x04000000\n#define DI_FLAGSEX_NO_CLASSLIST_NODE_MERGE  0x08000000\n#define DI_FLAGSEX_ALTPLATFORM_DRVSEARCH    0x10000000\n#define DI_FLAGSEX_RESTART_DEVICE_ONLY      0x20000000\n#define DI_FLAGSEX_RECURSIVESEARCH          0x40000000\n#define DI_FLAGSEX_SEARCH_PUBLISHED_INFS    0x80000000\n\ntypedef struct _SP_REMOVEDEVICE_PARAMS\n{\n    SP_CLASSINSTALL_HEADER ClassInstallHeader;\n    DWORD                  Scope;\n    DWORD                  HwProfile;\n} SP_REMOVEDEVICE_PARAMS, *PSP_REMOVEDEVICE_PARAMS;\n\n/* SP_REMOVEDEVICE_PARAMS Scope values */\n#define DI_REMOVEDEVICE_GLOBAL         0x00000001\n#define DI_REMOVEDEVICE_CONFIGSPECIFIC 0x00000002\n\ntypedef struct _SP_UNREMOVEDEVICE_PARAMS\n{\n    SP_CLASSINSTALL_HEADER ClassInstallHeader;\n    DWORD                  Scope;\n    DWORD                  HwProfile;\n} SP_UNREMOVEDEVICE_PARAMS, *PSP_UNREMOVEDEVICE_PARAMS;\n\n/* SP_UNREMOVEDEVICE_PARAMS Scope values */\n#define DI_UNREMOVEDEVICE_CONFIGSPECIFIC 0x00000002\n\ntypedef struct _SP_SELECTDEVICE_PARAMS_A\n{\n    SP_CLASSINSTALL_HEADER ClassInstallHeader;\n    CHAR                   Title[MAX_TITLE_LEN];\n    CHAR                   Instructions[MAX_INSTRUCTION_LEN];\n    CHAR                   ListLabel[MAX_LABEL_LEN];\n    CHAR                   SubTitle[MAX_SUBTITLE_LEN];\n    BYTE                   Reserved[2];\n} SP_SELECTDEVICE_PARAMS_A, *PSP_SELECTDEVICE_PARAMS_A;\n\ntypedef struct _SP_SELECTDEVICE_PARAMS_W\n{\n    SP_CLASSINSTALL_HEADER ClassInstallHeader;\n    WCHAR                  Title[MAX_TITLE_LEN];\n    WCHAR                  Instructions[MAX_INSTRUCTION_LEN];\n    WCHAR                  ListLabel[MAX_LABEL_LEN];\n    WCHAR                  SubTitle[MAX_SUBTITLE_LEN];\n} SP_SELECTDEVICE_PARAMS_W, *PSP_SELECTDEVICE_PARAMS_W;\n\ntypedef BOOL (CALLBACK *PDETECT_PROGRESS_NOTIFY)(PVOID ProgressNotifyParam,\n        DWORD DetectComplete);\n\ntypedef struct _SP_DETECTDEVICE_PARAMS\n{\n    SP_CLASSINSTALL_HEADER  ClassInstallHeader;\n    PDETECT_PROGRESS_NOTIFY DetectProgressNotify;\n    PVOID                   ProgressNotifyParam;\n} SP_DETECTDEVICE_PARAMS, *PSP_DETECTDEVICE_PARAMS;\n\n#define MAX_INSTALLWIZARD_DYNAPAGES 20\n\ntypedef struct _SP_INSTALLWIZARD_DATA\n{\n    SP_CLASSINSTALL_HEADER ClassInstallHeader;\n    DWORD                  Flags;\n    HPROPSHEETPAGE         DynamicPages[MAX_INSTALLWIZARD_DYNAPAGES];\n    DWORD                  NumDynamicPages;\n    DWORD                  DynamicPageFlags;\n    DWORD                  PrivateFlags;\n    LPARAM                 PrivateData;\n    HWND                   hwndWizardDlg;\n} SP_INSTALLWIZARD_DATA, *PSP_INSTALLWIZARD_DATA;\n\n/* SP_INSTALLWIZARD_DATA Flags values */\n#define NDW_INSTALLFLAG_DIDFACTDEFS        0x00000001\n#define NDW_INSTALLFLAG_HARDWAREALLREADYIN 0x00000002\n#define NDW_INSTALLFLAG_NEEDRESTART        DI_NEEDRESTART\n#define NDW_INSTALLFLAG_NEEDREBOOT         DI_NEEDREBOOT\n#define NDW_INSTALLFLAG_NEEDSHUTDOWN       0x00000200\n#define NDW_INSTALLFLAG_EXPRESSINTRO       0x00000400\n#define NDW_INSTALLFLAG_SKIPISDEVINSTALLED 0x00000800\n#define NDW_INSTALLFLAG_NODETECTEDDEVS     0x00001000\n#define NDW_INSTALLFLAG_INSTALLSPECIFIC    0x00002000\n#define NDW_INSTALLFLAG_SKIPCLASSLIST      0x00004000\n#define NDW_INSTALLFLAG_CI_PICKED_OEM      0x00008000\n#define NDW_INSTALLFLAG_PCMCIAMODE         0x00010000\n#define NDW_INSTALLFLAG_PCMCIADEVICE       0x00020000\n#define NDW_INSTALLFLAG_USERCANCEL         0x00040000\n#define NDW_INSTALLFLAG_KNOWNCLASS         0x00080000\n/* SP_INSTALLWIZARD_DATA DynamicPageFlags values */\n#define DYNAWIZ_FLAG_PAGESADDED             0x00000001\n#define DYNAWIZ_FLAG_INSTALLDET_NEXT        0x00000002\n#define DYNAWIZ_FLAG_INSTALLDET_PREV        0x00000004\n#define DYNAWIZ_FLAG_ANALYZE_HANDLECONFLICT 0x00000008\n\n/* Resource IDs */\n#define MIN_IDD_DYNAWIZ_RESOURCE_ID 10000\n#define MAX_IDD_DYNAWIZ_RESOURCE_ID 11000\n\n#define IDD_DYNAWIZ_FIRSTPAGE                10000\n#define IDD_DYNAWIZ_SELECT_PREVPAGE          10001\n#define IDD_DYNAWIZ_SELECT_NEXTPAGE          10002\n#define IDD_DYNAWIZ_ANALYZE_PREVPAGE         10003\n#define IDD_DYNAWIZ_ANALYZE_NEXTPAGE         10004\n#define IDD_DYNAWIZ_INSTALLDETECTED_PREVPAGE 10006\n#define IDD_DYNAWIZ_INSTALLDETECTED_NEXTPAGE 10007\n#define IDD_DYNAWIZ_INSTALLDETECTED_NODEVS   10008\n#define IDD_DYNAWIZ_SELECTDEV_PAGE           10009\n#define IDD_DYNAWIZ_ANALYZEDEV_PAGE          10010\n#define IDD_DYNAWIZ_INSTALLDETECTEDDEVS_PAGE 10011\n#define IDD_DYNAWIZ_SELECTCLASS_PAGE         10012\n\n#define IDI_RESOURCEFIRST        159\n#define IDI_RESOURCE             IDI_RESOURCEFIRST\n#define IDI_RESOURCELAST         161\n#define IDI_RESOURCEOVERLAYFIRST 161\n#define IDI_RESOURCEOVERLAYLAST  161\n\n#define IDI_CLASSICON_OVERLAYFIRST 500\n#define IDI_CLASSICON_OVERLAYLAST  502\n#define IDI_PROBLEM_OVL            500\n#define IDI_DISABLED_OVL           501\n#define IDI_FORCED_OVL             502\n\ntypedef struct _SP_NEWDEVICEWIZARD_DATA\n{\n    SP_CLASSINSTALL_HEADER ClassInstallHeader;\n    DWORD                  Flags;\n    HPROPSHEETPAGE         DynamicPages[MAX_INSTALLWIZARD_DYNAPAGES];\n    DWORD                  NumDynamicPages;\n    HWND                   hwndWizardDlg;\n} SP_NEWDEVICEWIZARD_DATA, *PSP_NEWDEVICEWIZARD_DATA;\n\ntypedef SP_NEWDEVICEWIZARD_DATA  SP_ADDPROPERTYPAGE_DATA;\ntypedef PSP_NEWDEVICEWIZARD_DATA PSP_ADDPROPERTYPAGE_DATA;\n\ntypedef struct _SP_TROUBLESHOOTER_PARAMS_A\n{\n    SP_CLASSINSTALL_HEADER ClassInstallHeader;\n    CHAR                   ChmFile[MAX_PATH];\n    CHAR                   HtmlTroubleShooter[MAX_PATH];\n} SP_TROUBLESHOOTER_PARAMS_A, *PSP_TROUBLESHOOTER_PARAMS_A;\n\ntypedef struct _SP_TROUBLESHOOTER_PARAMS_W\n{\n    SP_CLASSINSTALL_HEADER ClassInstallHeader;\n    WCHAR                  ChmFile[MAX_PATH];\n    WCHAR                  HtmlTroubleShooter[MAX_PATH];\n} SP_TROUBLESHOOTER_PARAMS_W, *PSP_TROUBLESHOOTER_PARAMS_W;\n\nDECL_WINELIB_SETUPAPI_TYPE_AW(SP_TROUBLESHOOTER_PARAMS)\nDECL_WINELIB_SETUPAPI_TYPE_AW(PSP_TROUBLESHOOTER_PARAMS)\n\ntypedef struct _SP_POWERMESSAGEWAKE_PARAMS_A\n{\n    SP_CLASSINSTALL_HEADER ClassInstallHeader;\n    CHAR                   PowerMessageWake[LINE_LEN * 2];\n} SP_POWERMESSAGEWAKE_PARAMS_A, *PSP_POWERMESSAGEWAKE_PARAMS_A;\n\ntypedef struct _SP_POWERMESSAGEWAKE_PARAMS_W\n{\n    SP_CLASSINSTALL_HEADER ClassInstallHeader;\n    WCHAR                  PowerMessageWake[LINE_LEN * 2];\n} SP_POWERMESSAGEWAKE_PARAMS_W, *PSP_POWERMESSAGEWAKE_PARAMS_W;\n\nDECL_WINELIB_SETUPAPI_TYPE_AW(SP_POWERMESSAGEWAKE_PARAMS)\nDECL_WINELIB_SETUPAPI_TYPE_AW(PSP_POWERMESSAGEWAKE_PARAMS)\n\ntypedef struct _SP_DRVINFO_DATA_V1_A\n{\n    DWORD     cbSize;\n    DWORD     DriverType;\n    ULONG_PTR Reserved;\n    CHAR      Description[LINE_LEN];\n    CHAR      MfgName[LINE_LEN];\n    CHAR      ProviderName[LINE_LEN];\n} SP_DRVINFO_DATA_V1_A, *PSP_DRVINFO_DATA_V1_A;\n\ntypedef struct _SP_DRVINFO_DATA_V1_W\n{\n    DWORD     cbSize;\n    DWORD     DriverType;\n    ULONG_PTR Reserved;\n    WCHAR     Description[LINE_LEN];\n    WCHAR     MfgName[LINE_LEN];\n    WCHAR     ProviderName[LINE_LEN];\n} SP_DRVINFO_DATA_V1_W, *PSP_DRVINFO_DATA_V1_W;\n\nDECL_WINELIB_SETUPAPI_TYPE_AW(SP_DRVINFO_DATA_V1)\nDECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DRVINFO_DATA_V1)\n\ntypedef struct _SP_DRVINFO_DATA_V2_A\n{\n    DWORD     cbSize;\n    DWORD     DriverType;\n    ULONG_PTR Reserved;\n    CHAR      Description[LINE_LEN];\n    CHAR      MfgName[LINE_LEN];\n    CHAR      ProviderName[LINE_LEN];\n    FILETIME  DriverDate;\n    DWORDLONG DriverVersion;\n} SP_DRVINFO_DATA_V2_A, *PSP_DRVINFO_DATA_V2_A;\n\ntypedef struct _SP_DRVINFO_DATA_V2_W\n{\n    DWORD     cbSize;\n    DWORD     DriverType;\n    ULONG_PTR Reserved;\n    WCHAR     Description[LINE_LEN];\n    WCHAR     MfgName[LINE_LEN];\n    WCHAR     ProviderName[LINE_LEN];\n    FILETIME  DriverDate;\n    DWORDLONG DriverVersion;\n} SP_DRVINFO_DATA_V2_W, *PSP_DRVINFO_DATA_V2_W;\n\nDECL_WINELIB_SETUPAPI_TYPE_AW(SP_DRVINFO_DATA_V2)\nDECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DRVINFO_DATA_V2)\n\ntypedef SP_DRVINFO_DATA_V2_A SP_DRVINFO_DATA_A;\ntypedef PSP_DRVINFO_DATA_V2_A PSP_DRVINFO_DATA_A;\ntypedef SP_DRVINFO_DATA_V2_W SP_DRVINFO_DATA_W;\ntypedef PSP_DRVINFO_DATA_V2_W PSP_DRVINFO_DATA_W;\n\nDECL_WINELIB_SETUPAPI_TYPE_AW(SP_DRVINFO_DATA)\nDECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DRVINFO_DATA)\n\ntypedef struct _SP_DRVINFO_DETAIL_DATA_A\n{\n    DWORD     cbSize;\n    FILETIME  InfDate;\n    DWORD     CompatIDsOffset;\n    DWORD     CompatIDsLength;\n    ULONG_PTR Reserved;\n    CHAR      SectionName[LINE_LEN];\n    CHAR      InfFileName[MAX_PATH];\n    CHAR      DrvDescription[LINE_LEN];\n    CHAR      HardwareID[ANYSIZE_ARRAY];\n} SP_DRVINFO_DETAIL_DATA_A, *PSP_DRVINFO_DETAIL_DATA_A;\n\ntypedef struct _SP_DRVINFO_DETAIL_DATA_W\n{\n    DWORD     cbSize;\n    FILETIME  InfDate;\n    DWORD     CompatIDsOffset;\n    DWORD     CompatIDsLength;\n    ULONG_PTR Reserved;\n    WCHAR     SectionName[LINE_LEN];\n    WCHAR     InfFileName[MAX_PATH];\n    WCHAR     DrvDescription[LINE_LEN];\n    WCHAR     HardwareID[ANYSIZE_ARRAY];\n} SP_DRVINFO_DETAIL_DATA_W, *PSP_DRVINFO_DETAIL_DATA_W;\n\nDECL_WINELIB_SETUPAPI_TYPE_AW(SP_DRVINFO_DETAIL_DATA)\nDECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DRVINFO_DETAIL_DATA)\n\ntypedef struct _SP_DRVINSTALL_PARAMS\n{\n    DWORD     cbSize;\n    DWORD     Rank;\n    DWORD     Flags;\n    DWORD_PTR PrivateData;\n    DWORD     Reserved;\n} SP_DRVINSTALL_PARAMS, *PSP_DRVINSTALL_PARAMS;\n\n/* SP_DRVINSTALL_PARAMS Flags values */\n#define DNF_DUPDESC               0x00000001\n#define DNF_OLDDRIVER             0x00000002\n#define DNF_EXCLUDEFROMLIST       0x00000004\n#define DNF_NODRIVER              0x00000008\n#define DNF_LEGACYINF             0x00000010\n#define DNF_CLASS_DRIVER          0x00000020\n#define DNF_COMPATIBLE_DRIVER     0x00000040\n#define DNF_INET_DRIVER           0x00000080\n#define DNF_UNUSED1               0x00000100\n#define DNF_INDEXED_DRIVER        0x00000200\n#define DNF_OLD_INET_DRIVER       0x00000400\n#define DNF_BAD_DRIVER            0x00000800\n#define DNF_DUPPROVIDER           0x00001000\n#define DNF_INF_IS_SIGNED         0x00002000\n#define DNF_OEM_F6_INF            0x00004000\n#define DNF_DUPDRIVERVER          0x00008000\n#define DNF_BASIC_DRIVER          0x00010000\n#define DNF_AUTHENTICODE_SIGNED   0x00020000\n#define DNF_INSTALLEDDRIVER       0x00040000\n#define DNF_ALWAYSEXCLUDEFROMLIST 0x00080000\n/* SP_DRVINSTALL_PARAMS Rank values */\n#define DRIVER_HARDWAREID_RANK             0x00000fff\n#define DRIVER_COMPATID_RANK               0x00003fff\n#define DRIVER_UNTRUSTED_RANK              0x00008000\n#define DRIVER_UNTRUSTED_HARDWAREID_RANK   0x00008fff\n#define DRIVER_UNTRUSTED_COMPATID_RANK     0x0000bfff\n#define DRIVER_W9X_SUSPECT_RANK            0x0000c000\n#define DRIVER_W9X_SUSPECT_HARDWAREID_RANK 0x0000cfff\n\n/* Device Information structure (references a device instance that is a member\n   of a device information set) */\ntypedef struct _SP_DEVINFO_DATA\n{\n   DWORD     cbSize;\n   GUID      ClassGuid;\n   DWORD     DevInst;   /* DEVINST handle */\n   ULONG_PTR Reserved;\n} SP_DEVINFO_DATA, *PSP_DEVINFO_DATA;\n\ntypedef struct _SP_DEVICE_INTERFACE_DATA\n{\n   DWORD      cbSize;\n   GUID       InterfaceClassGuid;\n   DWORD      Flags;\n   ULONG_PTR  Reserved;\n} SP_DEVICE_INTERFACE_DATA, *PSP_DEVICE_INTERFACE_DATA;\n\n#define SPINT_ACTIVE  0x00000001\n#define SPINT_DEFAULT 0x00000002\n#define SPINT_REMOVED 0x00000004\n\ntypedef SP_DEVICE_INTERFACE_DATA  SP_INTERFACE_DEVICE_DATA;\ntypedef PSP_DEVICE_INTERFACE_DATA PSP_INTERFACE_DEVICE_DATA;\n#define SPID_ACTIVE  SPINT_ACTIVE\n#define SPID_DEFAULT SPINT_DEFAULT\n#define SPID_REMOVED SPINT_REMOVED\n\ntypedef struct _SP_DEVICE_INTERFACE_DETAIL_DATA_A\n{\n   DWORD      cbSize;\n   CHAR       DevicePath[ANYSIZE_ARRAY];\n} SP_DEVICE_INTERFACE_DETAIL_DATA_A, *PSP_DEVICE_INTERFACE_DETAIL_DATA_A;\n\ntypedef struct _SP_DEVICE_INTERFACE_DETAIL_DATA_W\n{\n   DWORD      cbSize;\n   WCHAR      DevicePath[ANYSIZE_ARRAY];\n} SP_DEVICE_INTERFACE_DETAIL_DATA_W, *PSP_DEVICE_INTERFACE_DETAIL_DATA_W;\n\nDECL_WINELIB_SETUPAPI_TYPE_AW(SP_DEVICE_INTERFACE_DETAIL_DATA)\nDECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DEVICE_INTERFACE_DETAIL_DATA)\n\ntypedef struct _SP_DEVINFO_LIST_DETAIL_DATA_A {\n    DWORD  cbSize;\n    GUID   ClassGuid;\n    HANDLE RemoteMachineHandle;\n    CHAR   RemoteMachineName[SP_MAX_MACHINENAME_LENGTH];\n} SP_DEVINFO_LIST_DETAIL_DATA_A, *PSP_DEVINFO_LIST_DETAIL_DATA_A;\n\ntypedef struct _SP_DEVINFO_LIST_DETAIL_DATA_W {\n    DWORD  cbSize;\n    GUID   ClassGuid;\n    HANDLE RemoteMachineHandle;\n    WCHAR  RemoteMachineName[SP_MAX_MACHINENAME_LENGTH];\n} SP_DEVINFO_LIST_DETAIL_DATA_W, *PSP_DEVINFO_LIST_DETAIL_DATA_W;\n\nDECL_WINELIB_SETUPAPI_TYPE_AW(SP_DEVINFO_LIST_DETAIL_DATA)\nDECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DEVINFO_LIST_DETAIL_DATA)\n\ntypedef DWORD (CALLBACK *PSP_DETSIG_CMPPROC)(HDEVINFO, PSP_DEVINFO_DATA,\n PSP_DEVINFO_DATA, PVOID);\n\ntypedef struct _COINSTALLER_CONTEXT_DATA\n{\n    BOOL  PostProcessing;\n    DWORD InstallResult;\n    PVOID PrivateData;\n} COINSTALLER_CONTEXT_DATA, *PCOINSTALLER_CONTEXT_DATA;\n\ntypedef struct _SP_CLASSIMAGELIST_DATA\n{\n    DWORD      cbSize;\n    HIMAGELIST ImageList;\n    ULONG_PTR  Reserved;\n} SP_CLASSIMAGELIST_DATA, *PSP_CLASSIMAGELIST_DATA;\n\ntypedef struct _SP_PROPSHEETPAGE_REQUEST\n{\n    DWORD            cbSize;\n    DWORD            PageRequested;\n    HDEVINFO         DeviceInfoSet;\n    PSP_DEVINFO_DATA DeviceInfoData;\n} SP_PROPSHEETPAGE_REQUEST, *PSP_PROPSHEETPAGE_REQUEST;\n\n/* SP_PROPSHEETPAGE_REQUEST PageRequested values */\n#define SPPSR_SELECT_DEVICE_RESOURCES      1\n#define SPPSR_ENUM_BASIC_DEVICE_PROPERTIES 2\n#define SPPSR_ENUM_ADV_DEVICE_PROPERTIES   3\n\ntypedef struct _SP_BACKUP_QUEUE_PARAMS_V1_A\n{\n    DWORD cbSize;\n    CHAR  FullInfPath[MAX_PATH];\n    INT   FilenameOffset;\n} SP_BACKUP_QUEUE_PARAMS_V1_A, *PSP_BACKUP_QUEUE_PARAMS_V1_A;\n\ntypedef struct _SP_BACKUP_QUEUE_PARAMS_V1_W\n{\n    DWORD cbSize;\n    WCHAR FullInfPath[MAX_PATH];\n    INT   FilenameOffset;\n} SP_BACKUP_QUEUE_PARAMS_V1_W, *PSP_BACKUP_QUEUE_PARAMS_V1_W;\n\nDECL_WINELIB_SETUPAPI_TYPE_AW(SP_BACKUP_QUEUE_PARAMS_V1)\nDECL_WINELIB_SETUPAPI_TYPE_AW(PSP_BACKUP_QUEUE_PARAMS_V1)\n\ntypedef struct _SP_BACKUP_QUEUE_PARAMS_V2_A\n{\n    DWORD cbSize;\n    CHAR  FullInfPath[MAX_PATH];\n    INT   FilenameOffset;\n    CHAR  ReinstallInstance[MAX_PATH];\n} SP_BACKUP_QUEUE_PARAMS_V2_A, *PSP_BACKUP_QUEUE_PARAMS_V2_A;\n\ntypedef struct _SP_BACKUP_QUEUE_PARAMS_V2_W\n{\n    DWORD cbSize;\n    WCHAR FullInfPath[MAX_PATH];\n    INT   FilenameOffset;\n    WCHAR ReinstallInstance[MAX_PATH];\n} SP_BACKUP_QUEUE_PARAMS_V2_W, *PSP_BACKUP_QUEUE_PARAMS_V2_W;\n\nDECL_WINELIB_SETUPAPI_TYPE_AW(SP_BACKUP_QUEUE_PARAMS_V2)\nDECL_WINELIB_SETUPAPI_TYPE_AW(PSP_BACKUP_QUEUE_PARAMS_V2)\n\ntypedef SP_BACKUP_QUEUE_PARAMS_V2_A SP_BACKUP_QUEUE_PARAMS_A;\ntypedef PSP_BACKUP_QUEUE_PARAMS_V2_A PSP_BACKUP_QUEUE_PARAMS_A;\ntypedef SP_BACKUP_QUEUE_PARAMS_V2_W SP_BACKUP_QUEUE_PARAMS_W;\ntypedef PSP_BACKUP_QUEUE_PARAMS_V2_W PSP_BACKUP_QUEUE_PARAMS_W;\n\nDECL_WINELIB_SETUPAPI_TYPE_AW(SP_BACKUP_QUEUE_PARAMS)\nDECL_WINELIB_SETUPAPI_TYPE_AW(PSP_BACKUP_QUEUE_PARAMS)\n\ntypedef struct _FILE_IN_CABINET_INFO_A {\n  LPCSTR NameInCabinet;\n  DWORD FileSize;\n  DWORD Win32Error;\n  WORD DosDate;\n  WORD DosTime;\n  WORD DosAttribs;\n  CHAR FullTargetName[MAX_PATH];\n} FILE_IN_CABINET_INFO_A, *PFILE_IN_CABINET_INFO_A;\n\ntypedef struct _FILE_IN_CABINET_INFO_W {\n  LPCWSTR NameInCabinet;\n  DWORD FileSize;\n  DWORD Win32Error;\n  WORD DosDate;\n  WORD DosTime;\n  WORD DosAttribs;\n  WCHAR FullTargetName[MAX_PATH];\n} FILE_IN_CABINET_INFO_W, *PFILE_IN_CABINET_INFO_W;\n\nDECL_WINELIB_SETUPAPI_TYPE_AW(FILE_IN_CABINET_INFO)\nDECL_WINELIB_SETUPAPI_TYPE_AW(PFILE_IN_CABINET_INFO)\n\ntypedef struct _CABINET_INFO_A {\n  PCSTR CabinetPath;\n  PCSTR CabinetFile;\n  PCSTR DiskName;\n  USHORT SetId;\n  USHORT CabinetNumber;\n} CABINET_INFO_A, *PCABINET_INFO_A;\n\ntypedef struct _CABINET_INFO_W {\n  PCWSTR CabinetPath;\n  PCWSTR CabinetFile;\n  PCWSTR DiskName;\n  USHORT SetId;\n  USHORT CabinetNumber;\n} CABINET_INFO_W, *PCABINET_INFO_W;\n\nDECL_WINELIB_SETUPAPI_TYPE_AW(CABINET_INFO)\nDECL_WINELIB_SETUPAPI_TYPE_AW(PCABINET_INFO)\n\ntypedef struct _SP_INF_INFORMATION {\n    DWORD InfStyle;\n    DWORD InfCount;\n    BYTE VersionData[ANYSIZE_ARRAY];\n} SP_INF_INFORMATION, *PSP_INF_INFORMATION;\n\n#define INF_STYLE_NONE           0x00\n#define INF_STYLE_OLDNT          0x01\n#define INF_STYLE_WIN4           0x02\n#define INF_STYLE_CACHE_ENABLE   0x10\n#define INF_STYLE_CACHE_DISABLE  0x20\n\n#define FILEOP_COPY              0\n#define FILEOP_RENAME            1\n#define FILEOP_DELETE            2\n#define FILEOP_BACKUP            3\n\n#define FILEOP_ABORT             0\n#define FILEOP_DOIT              1\n#define FILEOP_SKIP              2\n#define FILEOP_RETRY             FILEOP_DOIT\n#define FILEOP_NEWPATH           4\n\n#define COPYFLG_WARN_IF_SKIP                  0x00000001\n#define COPYFLG_NOSKIP                        0x00000002\n#define COPYFLG_NOVERSIONCHECK                0x00000004\n#define COPYFLG_FORCE_FILE_IN_USE             0x00000008\n#define COPYFLG_NO_OVERWRITE                  0x00000010\n#define COPYFLG_NO_VERSION_DIALOG             0x00000020\n#define COPYFLG_OVERWRITE_OLDER_ONLY          0x00000040\n#define COPYFLG_PROTECTED_WINDOWS_DRIVER_FILE 0x00000100\n#define COPYFLG_REPLACEONLY                   0x00000400\n#define COPYFLG_NODECOMP                      0x00000800\n#define COPYFLG_REPLACE_BOOT_FILE             0x00001000\n#define COPYFLG_NOPRUNE                       0x00002000\n#define COPYFLG_IN_USE_TRY_RENAME             0x00004000\n\n#define DELFLG_IN_USE  0x00000001\n#define DELFLG_IN_USE1 0x00010000\n\ntypedef struct _FILEPATHS_A\n{\n    PCSTR  Target;\n    PCSTR  Source;\n    UINT   Win32Error;\n    DWORD  Flags;\n} FILEPATHS_A, *PFILEPATHS_A;\n\ntypedef struct _FILEPATHS_W\n{\n    PCWSTR Target;\n    PCWSTR Source;\n    UINT   Win32Error;\n    DWORD  Flags;\n} FILEPATHS_W, *PFILEPATHS_W;\n\nDECL_WINELIB_SETUPAPI_TYPE_AW(FILEPATHS)\nDECL_WINELIB_SETUPAPI_TYPE_AW(PFILEPATHS)\n\ntypedef struct _FILEPATHS_SIGNERINFO_A\n{\n    PCSTR Target;\n    PCSTR Source;\n    UINT  Win32Error;\n    DWORD Flags;\n    PCSTR DigitalSigner;\n    PCSTR Version;\n    PCSTR CatalogFile;\n} FILEPATHS_SIGNERINFO_A, *PFILEPATHS_SIGNERINFO_A;\n\ntypedef struct _FILEPATHS_SIGNERINFO_W\n{\n    PCWSTR Target;\n    PCWSTR Source;\n    UINT   Win32Error;\n    DWORD  Flags;\n    PCWSTR DigitalSigner;\n    PCWSTR Version;\n    PCWSTR CatalogFile;\n} FILEPATHS_SIGNERINFO_W, *PFILEPATHS_SIGNERINFO_W;\n\nDECL_WINELIB_SETUPAPI_TYPE_AW(FILEPATHS_SIGNERINFO)\n\ntypedef struct _SOURCE_MEDIA_A\n{\n    PCSTR Reserved;\n    PCSTR Tagfile;\n    PCSTR Description;\n    PCSTR SourcePath;\n    PCSTR SourceFile;\n    DWORD Flags;\n} SOURCE_MEDIA_A, *PSOURCE_MEDIA_A;\n\ntypedef struct _SOURCE_MEDIA_W\n{\n    PCWSTR Reserved;\n    PCWSTR Tagfile;\n    PCWSTR Description;\n    PCWSTR SourcePath;\n    PCWSTR SourceFile;\n    DWORD  Flags;\n} SOURCE_MEDIA_W, *PSOURCE_MEDIA_W;\n\nDECL_WINELIB_SETUPAPI_TYPE_AW(SOURCE_MEDIA)\n\ntypedef struct _SP_ORIGINAL_FILE_INFO_A\n{\n    DWORD cbSize;\n    CHAR  OriginalInfName[MAX_PATH];\n    CHAR  OriginalCatalogName[MAX_PATH];\n} SP_ORIGINAL_FILE_INFO_A, *PSP_ORIGINAL_FILE_INFO_A;\n\ntypedef struct _SP_ORIGINAL_FILE_INFO_W\n{\n    DWORD cbSize;\n    WCHAR  OriginalInfName[MAX_PATH];\n    WCHAR  OriginalCatalogName[MAX_PATH];\n} SP_ORIGINAL_FILE_INFO_W, *PSP_ORIGINAL_FILE_INFO_W;\n\nDECL_WINELIB_SETUPAPI_TYPE_AW(SP_ORIGINAL_FILE_INFO)\nDECL_WINELIB_SETUPAPI_TYPE_AW(PSP_ORIGINAL_FILE_INFO)\n\ntypedef struct _SP_INF_SIGNER_INFO_A\n{\n    DWORD cbSize;\n    CHAR  CatalogFile[MAX_PATH];\n    CHAR  DigitalSigner[MAX_PATH];\n    CHAR  DigitalSignerVersion[MAX_PATH];\n} SP_INF_SIGNER_INFO_A, *PSP_INF_SIGNER_INFO_A;\n\ntypedef struct _SP_INF_SIGNER_INFO_W\n{\n    DWORD cbSize;\n    WCHAR CatalogFile[MAX_PATH];\n    WCHAR DigitalSigner[MAX_PATH];\n    WCHAR DigitalSignerVersion[MAX_PATH];\n} SP_INF_SIGNER_INFO_W, *PSP_INF_SIGNER_INFO_W;\n\nDECL_WINELIB_SETUPAPI_TYPE_AW(SP_INF_SIGNER_INFO)\nDECL_WINELIB_SETUPAPI_TYPE_AW(PSP_INF_SIGNER_INFO)\n\n#define SPFILENOTIFY_STARTQUEUE           0x0001\n#define SPFILENOTIFY_ENDQUEUE             0x0002\n#define SPFILENOTIFY_STARTSUBQUEUE        0x0003\n#define SPFILENOTIFY_ENDSUBQUEUE          0x0004\n#define SPFILENOTIFY_STARTDELETE          0x0005\n#define SPFILENOTIFY_ENDDELETE            0x0006\n#define SPFILENOTIFY_DELETEERROR          0x0007\n#define SPFILENOTIFY_STARTRENAME          0x0008\n#define SPFILENOTIFY_ENDRENAME            0x0009\n#define SPFILENOTIFY_RENAMEERROR          0x000a\n#define SPFILENOTIFY_STARTCOPY            0x000b\n#define SPFILENOTIFY_ENDCOPY              0x000c\n#define SPFILENOTIFY_COPYERROR            0x000d\n#define SPFILENOTIFY_NEEDMEDIA            0x000e\n#define SPFILENOTIFY_QUEUESCAN            0x000f\n#define SPFILENOTIFY_CABINETINFO          0x0010\n#define SPFILENOTIFY_FILEINCABINET        0x0011\n#define SPFILENOTIFY_NEEDNEWCABINET       0x0012\n#define SPFILENOTIFY_FILEEXTRACTED        0x0013\n#define SPFILENOTIFY_FILEOPDELAYED        0x0014\n#define SPFILENOTIFY_STARTBACKUP          0x0015\n#define SPFILENOTIFY_BACKUPERROR          0x0016\n#define SPFILENOTIFY_ENDBACKUP            0x0017\n#define SPFILENOTIFY_QUEUESCAN_EX         0x0018\n#define SPFILENOTIFY_STARTREGISTRATION    0x0019\n#define SPFILENOTIFY_ENDREGISTRATION      0x0020\n#define SPFILENOTIFY_QUEUESCAN_SIGNERINFO 0x0040\n\n#define SPFILENOTIFY_LANGMISMATCH         0x00010000\n#define SPFILENOTIFY_TARGETEXISTS         0x00020000\n#define SPFILENOTIFY_TARGETNEWER          0x00040000\n\n#define SPINST_LOGCONFIG                  0x00000001\n#define SPINST_INIFILES                   0x00000002\n#define SPINST_REGISTRY                   0x00000004\n#define SPINST_INI2REG                    0x00000008\n#define SPINST_FILES                      0x00000010\n#define SPINST_BITREG                     0x00000020\n#define SPINST_REGSVR                     0x00000040\n#define SPINST_UNREGSVR                   0x00000080\n#define SPINST_PROFILEITEMS               0x00000100\n#define SPINST_COPYINF                    0x00000200\n#define SPINST_ALL                        0x000003ff\n#define SPINST_SINGLESECTION              0x00010000\n#define SPINST_LOGCONFIG_IS_FORCED        0x00020000\n#define SPINST_LOGCONFIGS_ARE_OVERRIDES   0x00040000\n#define SPINST_REGISTERCALLBACKAWARE      0x00080000\n\n#define SPSVCINST_TAGTOFRONT               0x00000001\n#define SPSVCINST_ASSOCSERVICE             0x00000002\n#define SPSVCINST_DELETEEVENTLOGENTRY      0x00000004\n#define SPSVCINST_NOCLOBBER_DISPLAYNAME    0x00000008\n#define SPSVCINST_NOCLOBBER_STARTTYPE      0x00000010\n#define SPSVCINST_NOCLOBBER_ERRORCONTROL   0x00000020\n#define SPSVCINST_NOCLOBBER_LOADORDERGROUP 0x00000040\n#define SPSVCINST_NOCLOBBER_DEPENDENCIES   0x00000080\n#define SPSVCINST_NOCLOBBER_DESCRIPTION    0x00000100\n#define SPSVCINST_STOPSERVICE              0x00000200\n#define SPSVCINST_CLOBBER_SECURITY         0x00000400\n#define SPSVCINST_STARTSERVICE             0x00000800\n\n#define SP_COPY_DELETESOURCE              0x00000001\n#define SP_COPY_REPLACEONLY               0x00000002\n#define SP_COPY_NEWER                     0x00000004\n#define SP_COPY_NEWER_OR_SAME             SP_COPY_NEWER\n#define SP_COPY_NOOVERWRITE               0x00000008\n#define SP_COPY_NODECOMP                  0x00000010\n#define SP_COPY_LANGUAGEAWARE             0x00000020\n#define SP_COPY_SOURCE_ABSOLUTE           0x00000040\n#define SP_COPY_SOURCEPATH_ABSOLUTE       0x00000080\n#define SP_COPY_IN_USE_NEEDS_REBOOT       0x00000100\n#define SP_COPY_FORCE_IN_USE              0x00000200\n#define SP_COPY_NOSKIP                    0x00000400\n#define SP_FLAG_CABINETCONTINUATION       0x00000800\n#define SP_COPY_FORCE_NOOVERWRITE         0x00001000\n#define SP_COPY_FORCE_NEWER               0x00002000\n#define SP_COPY_WARNIFSKIP                0x00004000\n#define SP_COPY_NOBROWSE                  0x00008000\n#define SP_COPY_NEWER_ONLY                0x00010000\n#define SP_COPY_SOURCE_SIS_MASTER         0x00020000\n#define SP_COPY_OEMINF_CATALOG_ONLY       0x00040000\n#define SP_COPY_REPLACE_BOOT_FILE         0x00080000\n#define SP_COPY_NOPRUNE                   0x00100000\n#define SP_COPY_OEM_F6_INF                0x00200000\n\n#define SP_BACKUP_BACKUPPASS 0x00000001\n#define SP_BACKUP_DEMANDPASS 0x00000002\n#define SP_BACKUP_SPECIAL    0x00000004\n#define SP_BACKUP_BOOTFILE   0x00000008\n\n#define SPOST_NONE  0\n#define SPOST_PATH  1\n#define SPOST_URL   2\n#define SPOST_MAX   3\n\n#define SPQ_SCAN_FILE_PRESENCE            0x00000001\n#define SPQ_SCAN_FILE_VALIDITY            0x00000002\n#define SPQ_SCAN_USE_CALLBACK             0x00000004\n#define SPQ_SCAN_USE_CALLBACKEX           0x00000008\n#define SPQ_SCAN_INFORM_USER              0x00000010\n#define SPQ_SCAN_PRUNE_COPY_QUEUE         0x00000020\n#define SPQ_SCAN_USE_CALLBACK_SIGNERINFO  0x00000040\n#define SPQ_SCAN_PRUNE_DELREN             0x00000080\n\n#define SPQ_DELAYED_COPY 0x00000001\n\n#define SPQ_FLAG_BACKUP_AWARE      0x00000001\n#define SPQ_FLAG_ABORT_IF_UNSIGNED 0x00000002\n#define SPQ_FLAG_FILES_MODIFIED    0x00000004\n#define SPQ_FLAG_VALID             0x00000007\n\n#define FLG_ADDREG_DELREG_BIT             0x00008000\n#define FLG_ADDREG_BINVALUETYPE           0x00000001\n#define FLG_ADDREG_NOCLOBBER              0x00000002\n#define FLG_ADDREG_DELVAL                 0x00000004\n#define FLG_ADDREG_APPEND                 0x00000008\n#define FLG_ADDREG_KEYONLY                0x00000010\n#define FLG_ADDREG_OVERWRITEONLY          0x00000020\n#define FLG_ADDREG_64BITKEY               0x00001000\n#define FLG_ADDREG_KEYONLY_COMMON         0x00002000\n#define FLG_ADDREG_32BITKEY               0x00004000\n#define FLG_ADDREG_TYPE_SZ                0x00000000\n#define FLG_ADDREG_TYPE_MULTI_SZ          0x00010000\n#define FLG_ADDREG_TYPE_EXPAND_SZ         0x00020000\n#define FLG_ADDREG_TYPE_BINARY           (0x00000000 | FLG_ADDREG_BINVALUETYPE)\n#define FLG_ADDREG_TYPE_DWORD            (0x00010000 | FLG_ADDREG_BINVALUETYPE)\n#define FLG_ADDREG_TYPE_NONE             (0x00020000 | FLG_ADDREG_BINVALUETYPE)\n#define FLG_ADDREG_TYPE_MASK             (0xFFFF0000 | FLG_ADDREG_BINVALUETYPE)\n\n#define FLG_DELREG_VALUE                 (0x00000000)\n#define FLG_DELREG_TYPE_MASK             FLG_ADDREG_TYPE_MASK\n#define FLG_DELREG_TYPE_SZ               FLG_ADDREG_TYPE_SZ\n#define FLG_DELREG_TYPE_MULTI_SZ         FLG_ADDREG_TYPE_MULTI_SZ\n#define FLG_DELREG_TYPE_EXPAND_SZ        FLG_ADDREG_TYPE_EXPAND_SZ\n#define FLG_DELREG_TYPE_BINARY           FLG_ADDREG_TYPE_BINARY\n#define FLG_DELREG_TYPE_DWORD            FLG_ADDREG_TYPE_DWORD\n#define FLG_DELREG_TYPE_NONE             FLG_ADDREG_TYPE_NONE\n#define FLG_DELREG_64BITKEY              FLG_ADDREG_64BITKEY\n#define FLG_DELREG_KEYONLY_COMMON        FLG_ADDREG_KEYONLY_COMMON\n#define FLG_DELREG_32BITKEY              FLG_ADDREG_32BITKEY\n#define FLG_DELREG_OPERATION_MASK        (0x000000FE)\n#define FLG_DELREG_MULTI_SZ_DELSTRING    (FLG_DELREG_TYPE_MULTI_SZ | FLG_ADDREG_DELREG_BIT | 0x00000002)\n\n#define FLG_REGSVR_DLLREGISTER           0x00000001\n#define FLG_REGSVR_DLLINSTALL            0x00000002\n\n#define FLG_PROFITEM_CURRENTUSER         0x00000001\n#define FLG_PROFITEM_DELETE              0x00000002\n#define FLG_PROFITEM_GROUP               0x00000004\n#define FLG_PROFITEM_CSIDL               0x00000008\n\n#define DI_NOVCP 0x00000008\n\n/* Class installer function codes */\n#define DIF_SELECTDEVICE                    0x01\n#define DIF_INSTALLDEVICE                   0x02\n#define DIF_ASSIGNRESOURCES                 0x03\n#define DIF_PROPERTIES                      0x04\n#define DIF_REMOVE                          0x05\n#define DIF_FIRSTTIMESETUP                  0x06\n#define DIF_FOUNDDEVICE                     0x07\n#define DIF_SELECTCLASSDRIVERS              0x08\n#define DIF_VALIDATECLASSDRIVERS            0x09\n#define DIF_INSTALLCLASSDRIVERS             0x0a\n#define DIF_CALCDISKSPACE                   0x0b\n#define DIF_DESTROYPRIVATEDATA              0x0c\n#define DIF_VALIDATEDRIVER                  0x0d\n#define DIF_MOVEDEVICE                      0x0e\n#define DIF_DETECT                          0x0f\n#define DIF_INSTALLWIZARD                   0x10\n#define DIF_DESTROYWIZARDDATA               0x11\n#define DIF_PROPERTYCHANGE                  0x12\n#define DIF_ENABLECLASS                     0x13\n#define DIF_DETECTVERIFY                    0x14\n#define DIF_INSTALLDEVICEFILES              0x15\n#define DIF_UNREMOVE                        0x16\n#define DIF_SELECTBESTCOMPATDRV             0x17\n#define DIF_ALLOW_INSTALL                   0x18\n#define DIF_REGISTERDEVICE                  0x19\n#define DIF_NEWDEVICEWIZARD_PRESELECT       0x1a\n#define DIF_NEWDEVICEWIZARD_SELECT          0x1b\n#define DIF_NEWDEVICEWIZARD_PREANALYZE      0x1c\n#define DIF_NEWDEVICEWIZARD_POSTANALYZE     0x1d\n#define DIF_NEWDEVICEWIZARD_FINISHINSTALL   0x1e\n#define DIF_UNUSED1                         0x1f\n#define DIF_INSTALLINTERFACES               0x20\n#define DIF_DETECTCANCEL                    0x21\n#define DIF_REGISTER_COINSTALLERS           0x22\n#define DIF_ADDPROPERTYPAGE_ADVANCED        0x23\n#define DIF_ADDPROPERTYPAGE_BASIC           0x24\n#define DIF_RESERVED1                       0x25\n#define DIF_TROUBLESHOOTER                  0x26\n#define DIF_POWERMESSAGEWAKE                0x27\n#define DIF_ADDREMOTEPROPERTYPAGE_ADVANCED  0x28\n#define DIF_UPDATEDRIVER_UI                 0x29\n#define DIF_RESERVED2                       0x30\n\n/* Directory ids */\n#define DIRID_ABSOLUTE                (-1)\n#define DIRID_ABSOLUTE_16BIT          0xffff\n#define DIRID_NULL                    0\n#define DIRID_SRCPATH                 1\n#define DIRID_WINDOWS                 10\n#define DIRID_SYSTEM                  11\n#define DIRID_DRIVERS                 12\n#define DIRID_IOSUBSYS                DIRID_DRIVERS\n#define DIRID_INF                     17\n#define DIRID_HELP                    18\n#define DIRID_FONTS                   20\n#define DIRID_VIEWERS                 21\n#define DIRID_COLOR                   23\n#define DIRID_APPS                    24\n#define DIRID_SHARED                  25\n#define DIRID_BOOT                    30\n#define DIRID_SYSTEM16                50\n#define DIRID_SPOOL                   51\n#define DIRID_SPOOLDRIVERS            52\n#define DIRID_USERPROFILE             53\n#define DIRID_LOADER                  54\n#define DIRID_PRINTPROCESSOR          55\n#define DIRID_DEFAULT                 DIRID_SYSTEM\n\n#define DIRID_COMMON_STARTMENU        16406\n#define DIRID_COMMON_PROGRAMS         16407\n#define DIRID_COMMON_STARTUP          16408\n#define DIRID_COMMON_DESKTOPDIRECTORY 16409\n#define DIRID_COMMON_FAVORITES        16415\n#define DIRID_COMMON_APPDATA          16419\n#define DIRID_PROGRAM_FILES           16422\n#define DIRID_SYSTEM_X86              16425\n#define DIRID_PROGRAM_FILES_X86       16426\n#define DIRID_PROGRAM_FILES_COMMON    16427\n#define DIRID_PROGRAM_FILES_COMMONX86 16428\n#define DIRID_COMMON_TEMPLATES        16429\n#define DIRID_COMMON_DOCUMENTS        16430\n\n#define DIRID_USER                    0x8000\n\n\n/* Error code */\n\n#define ERROR_EXPECTED_SECTION_NAME       (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0)\n#define ERROR_BAD_SECTION_NAME_LINE       (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|1)\n#define ERROR_SECTION_NAME_TOO_LONG       (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|2)\n#define ERROR_GENERAL_SYNTAX              (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|3)\n#define ERROR_WRONG_INF_STYLE             (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x100)\n#define ERROR_SECTION_NOT_FOUND           (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x101)\n#define ERROR_LINE_NOT_FOUND              (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x102)\n#define ERROR_NO_BACKUP                   (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x103)\n#define ERROR_NO_ASSOCIATED_CLASS         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x200)\n#define ERROR_CLASS_MISMATCH              (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x201)\n#define ERROR_DUPLICATE_FOUND             (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x202)\n#define ERROR_NO_DRIVER_SELECTED          (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x203)\n#define ERROR_KEY_DOES_NOT_EXIST          (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x204)\n#define ERROR_INVALID_DEVINST_NAME        (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x205)\n#define ERROR_INVALID_CLASS               (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x206)\n#define ERROR_DEVINST_ALREADY_EXISTS      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x207)\n#define ERROR_DEVINFO_NOT_REGISTERED      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x208)\n#define ERROR_INVALID_REG_PROPERTY        (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x209)\n#define ERROR_NO_INF                      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20A)\n#define ERROR_NO_SUCH_DEVINST             (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20B)\n#define ERROR_CANT_LOAD_CLASS_ICON        (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20C)\n#define ERROR_INVALID_CLASS_INSTALLER     (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20D)\n#define ERROR_DI_DO_DEFAULT               (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20E)\n#define ERROR_DI_NOFILECOPY               (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20F)\n#define ERROR_INVALID_HWPROFILE           (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x210)\n#define ERROR_NO_DEVICE_SELECTED          (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x211)\n#define ERROR_DEVINFO_LIST_LOCKED         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x212)\n#define ERROR_DEVINFO_DATA_LOCKED         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x213)\n#define ERROR_DI_BAD_PATH                 (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x214)\n#define ERROR_NO_CLASSINSTALL_PARAMS      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x215)\n#define ERROR_FILEQUEUE_LOCKED            (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x216)\n#define ERROR_BAD_SERVICE_INSTALLSECT     (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x217)\n#define ERROR_NO_CLASS_DRIVER_LIST        (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x218)\n#define ERROR_NO_ASSOCIATED_SERVICE       (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x219)\n#define ERROR_NO_DEFAULT_DEVICE_INTERFACE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21A)\n#define ERROR_DEVICE_INTERFACE_ACTIVE     (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21B)\n#define ERROR_DEVICE_INTERFACE_REMOVED    (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21C)\n#define ERROR_BAD_INTERFACE_INSTALLSECT   (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21D)\n#define ERROR_NO_SUCH_INTERFACE_CLASS     (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21E)\n#define ERROR_INVALID_REFERENCE_STRING    (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21F)\n#define ERROR_INVALID_MACHINENAME         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x220)\n#define ERROR_REMOTE_COMM_FAILURE         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x221)\n#define ERROR_MACHINE_UNAVAILABLE         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x222)\n#define ERROR_NO_CONFIGMGR_SERVICES       (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x223)\n#define ERROR_INVALID_PROPPAGE_PROVIDER   (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x224)\n#define ERROR_NO_SUCH_DEVICE_INTERFACE    (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x225)\n#define ERROR_DI_POSTPROCESSING_REQUIRED  (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x226)\n#define ERROR_INVALID_COINSTALLER         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x227)\n#define ERROR_NO_COMPAT_DRIVERS           (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x228)\n#define ERROR_NO_DEVICE_ICON              (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x229)\n#define ERROR_INVALID_INF_LOGCONFIG       (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22A)\n#define ERROR_DI_DONT_INSTALL             (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22B)\n#define ERROR_INVALID_FILTER_DRIVER       (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22C)\n#define ERROR_NON_WINDOWS_NT_DRIVER       (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22D)\n#define ERROR_NON_WINDOWS_DRIVER          (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22E)\n#define ERROR_NO_CATALOG_FOR_OEM_INF      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22F)\n#define ERROR_DEVINSTALL_QUEUE_NONNATIVE  (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x230)\n#define ERROR_NOT_DISABLEABLE             (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x231)\n#define ERROR_CANT_REMOVE_DEVINST         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x232)\n#define ERROR_INVALID_TARGET              (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x233)\n#define ERROR_DRIVER_NONNATIVE            (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x234)\n#define ERROR_IN_WOW64                    (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x235)\n#define ERROR_SET_SYSTEM_RESTORE_POINT    (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x236)\n#define ERROR_INCORRECTLY_COPIED_INF      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x237)\n#define ERROR_SCE_DISABLED                (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x238)\n#define ERROR_WRONG_INF_TYPE              (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x24A)\n#define ERROR_NO_DEFAULT_INTERFACE_DEVICE ERROR_NO_DEFAULT_DEVICE_INTERFACE\n#define ERROR_INTERFACE_DEVICE_ACTIVE     ERROR_DEVICE_INTERFACE_ACTIVE\n#define ERROR_INTERFACE_DEVICE_REMOVED    ERROR_DEVICE_INTERFACE_REMOVED\n#define ERROR_NO_SUCH_INTERFACE_DEVICE    ERROR_NO_SUCH_DEVICE_INTERFACE\n#define ERROR_NOT_INSTALLED               (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x1000)\n\n/* flags for SetupDiGetClassDevs */\n#define DIGCF_DEFAULT         0x00000001\n#define DIGCF_PRESENT         0x00000002\n#define DIGCF_ALLCLASSES      0x00000004\n#define DIGCF_PROFILE         0x00000008\n#define DIGCF_DEVICEINTERFACE 0x00000010\n\n/* Flags for SetupDiOpenClassRegKeyEx */\n#define DIOCR_INSTALLER       0x00000001\n#define DIOCR_INTERFACE       0x00000002\n\n/* Flags for SetupDiBuildClassInfoList(Ex) */\n#define DIBCI_NOINSTALLCLASS  0x00000001\n#define DIBCI_NODISPLAYCLASS  0x00000002\n\n/* Flags for SetupDiCreateDeviceInfo */\n#define DICD_GENERATE_ID       0x00000001\n#define DICD_INHERIT_CLASSDRVS 0x00000002\n\n/* Flags for SetupDiOpenDeviceInfo */\n#define DIOD_INHERIT_CLASSDRVS 0x00000002\n#define DIOD_CANCEL_REMOVE     0x00000004\n\n/* Flags for SetupDiOpenDeviceInterface */\n#define DIODI_NO_ADD 0x00000001\n\n/* Flags for SetupDiRegisterDeviceInfo */\n#define SPRDI_FIND_DUPS 0x00000001\n\n/* Values for SetupDi*Info* DriverType */\n#define SPDIT_NODRIVER     0x00000000\n#define SPDIT_CLASSDRIVER  0x00000001\n#define SPDIT_COMPATDRIVER 0x00000002\n\n/* setup device registry property codes */\n#define SPDRP_DEVICEDESC                  0x00000000\n#define SPDRP_HARDWAREID                  0x00000001\n#define SPDRP_COMPATIBLEIDS               0x00000002\n#define SPDRP_UNUSED0                     0x00000003\n#define SPDRP_SERVICE                     0x00000004\n#define SPDRP_UNUSED1                     0x00000005\n#define SPDRP_UNUSED2                     0x00000006\n#define SPDRP_CLASS                       0x00000007\n#define SPDRP_CLASSGUID                   0x00000008\n#define SPDRP_DRIVER                      0x00000009\n#define SPDRP_CONFIGFLAGS                 0x0000000a\n#define SPDRP_MFG                         0x0000000b\n#define SPDRP_FRIENDLYNAME                0x0000000c\n#define SPDRP_LOCATION_INFORMATION        0x0000000d\n#define SPDRP_PHYSICAL_DEVICE_OBJECT_NAME 0x0000000e\n#define SPDRP_CAPABILITIES                0x0000000f\n#define SPDRP_UI_NUMBER                   0x00000010\n#define SPDRP_UPPERFILTERS                0x00000011\n#define SPDRP_LOWERFILTERS                0x00000012\n#define SPDRP_BUSTYPEGUID                 0x00000013\n#define SPDRP_LEGACYBUSTYPE               0x00000014\n#define SPDRP_BUSNUMBER                   0x00000015\n#define SPDRP_ENUMERATOR_NAME             0x00000016\n#define SPDRP_SECURITY                    0x00000017\n#define SPDRP_SECURITY_SDS                0x00000018\n#define SPDRP_DEVTYPE                     0x00000019\n#define SPDRP_EXCLUSIVE                   0x0000001a\n#define SPDRP_CHARACTERISTICS             0x0000001b\n#define SPDRP_ADDRESS                     0x0000001c\n#define SPDRP_UI_NUMBER_DESC_FORMAT       0x0000001d\n#define SPDRP_DEVICE_POWER_DATA           0x0000001e\n#define SPDRP_REMOVAL_POLICY              0x0000001f\n#define SPDRP_REMOVAL_POLICY_HW_DEFAULT   0x00000020\n#define SPDRP_REMOVAL_POLICY_OVERRIDE     0x00000021\n#define SPDRP_INSTALL_STATE               0x00000022\n#define SPDRP_MAXIMUM_PROPERTY            0x00000023\n\n#define DPROMPT_SUCCESS        0\n#define DPROMPT_CANCEL         1\n#define DPROMPT_SKIPFILE       2\n#define DPROMPT_BUFFERTOOSMALL 3\n#define DPROMPT_OUTOFMEMORY    4\n\n#define SETDIRID_NOT_FULL_PATH 0x00000001\n\n#define IDF_NOBROWSE     0x00000001\n#define IDF_NOSKIP       0x00000002\n#define IDF_NODETAILS    0x00000004\n#define IDF_NOCOMPRESSED 0x00000008\n#define IDF_CHECKFIRST   0x00000100\n#define IDF_NOBEEP       0x00000200\n#define IDF_NOFOREGROUND 0x00000400\n#define IDF_WARNIFSKIP   0x00000800\n\n#define IDF_NOREMOVABLEMEDIAPROMPT 0x00001000\n#define IDF_USEDISKNAMEASPROMPT    0x00002000\n#define IDF_OEMDISK                0x80000000\n\n#define INFINFO_INF_SPEC_IS_HINF        1\n#define INFINFO_INF_NAME_IS_ABSOLUTE    2\n#define INFINFO_DEFAULT_SEARCH          3\n#define INFINFO_REVERSE_DEFAULT_SEARCH  4\n#define INFINFO_INF_PATH_LIST_SEARCH    5\n\n#define LogSeverity         DWORD\n#define LogSevInformation   0x00000000\n#define LogSevWarning       0x00000001\n#define LogSevError         0x00000002\n#define LogSevFatalError    0x00000003\n#define LogSevMaximum       0x00000004\n\n#define SRCINFO_PATH           1\n#define SRCINFO_TAGFILE        2\n#define SRCINFO_DESCRIPTION    3\n#define SRCINFO_FLAGS          4\n#define SRCINFO_TAGFILE2       5\n\n#define SRC_FLAGS_CABFILE      (0x0010)\n\n#define FILE_COMPRESSION_NONE       0\n#define FILE_COMPRESSION_WINLZA     1\n#define FILE_COMPRESSION_MSZIP      2\n#define FILE_COMPRESSION_NTCAB      3\n\n#define SPDSL_IGNORE_DISK              0x00000001\n#define SPDSL_DISALLOW_NEGATIVE_ADJUST 0x00000002\n\n/* SetupInitializeFileLog Flags values */\n#define SPFILELOG_SYSTEMLOG 0x00000001\n#define SPFILELOG_FORCENEW  0x00000002\n#define SPFILELOG_QUERYONLY 0x00000004\n\n/* SetupLogFile Flags values */\n#define SPFILELOG_OEMFILE 0x00000001\n\n/* SetupDiCreateDevRegKey, SetupDiOpenDevRegKey, and SetupDiDeleteDevRegKey\n * KeyType values\n */\n#define DIREG_DEV  0x00000001\n#define DIREG_DRV  0x00000002\n#define DIREG_BOTH 0x00000004\n\n/* SetupDiDrawMiniIcon Flags values */\n#define DMI_MASK    0x00000001\n#define DMI_BKCOLOR 0x00000002\n#define DMI_USERECT 0x00000004\n\n/* SetupDiGetClassDevPropertySheets PropertySheetType values */\n#define DIGCDP_FLAG_BASIC           0x00000001\n#define DIGCDP_FLAG_ADVANCED        0x00000002\n#define DIGCDP_FLAG_REMOTE_BASIC    0x00000003\n#define DIGCDP_FLAG_REMOTE_ADVANCED 0x00000004\n\ntypedef enum {\n    SetupFileLogSourceFilename,\n    SetupFileLogChecksum,\n    SetupFileLogDiskTagfile,\n    SetupFileLogDiskDescription,\n    SetupFileLogOtherInfo,\n    SetupFileLogMax\n} SetupFileLogInfo;\n\n/* SetupDiGetWizardPage PageType values */\n#define SPWPT_SELECTDEVICE 0x00000001\n/* SetupDiGetWizardPage Flags values */\n#define SPWP_USE_DEVINFO_DATA 0x00000001\n\n/* SetupDiGetCustomDeviceProperty Flags values */\n#define DICUSTOMDEVPROP_MERGE_MULTISZ 0x00000001\n\n/* SetupConfigureWmiFromInfSection Flags values */\n#define SCWMI_CLOBBER_SECURITY 0x00000001\n\n/* SetupUninstallOEMInf Flags values */\n#define SUOI_FORCEDELETE 0x00000001\n\nLONG     WINAPI AddTagToGroupOrderList(PCWSTR lpGroupName, DWORD dwUnknown2, DWORD dwUnknown3);\nDWORD    WINAPI CaptureAndConvertAnsiArg(PCSTR lpSrc, PWSTR *lpDst);\nDWORD    WINAPI CaptureStringArg(PCWSTR lpSrc, PWSTR *lpDst);\nBOOL     WINAPI DelayedMove(PCWSTR lpExistingFileName, PCWSTR lpNewFileName);\nBOOL     WINAPI DoesUserHavePrivilege(PCWSTR lpPrivilegeName);\nPWSTR    WINAPI DuplicateString(PCWSTR lpSrc);\nBOOL     WINAPI EnablePrivilege(PCWSTR lpPrivilegeName, BOOL bEnable);\nBOOL     WINAPI FileExists(PCWSTR lpFileName, PWIN32_FIND_DATAW lpFileFindData);\nvoid     WINAPI InstallHinfSectionA( HWND hwnd, HINSTANCE handle, PCSTR cmdline, INT show );\nvoid     WINAPI InstallHinfSectionW( HWND hwnd, HINSTANCE handle, PCWSTR cmdline, INT show );\n#define         InstallHinfSection WINELIB_NAME_AW(InstallHinfSection)\nBOOL     WINAPI IsUserAdmin(VOID);\nPWSTR    WINAPI MultiByteToUnicode(PCSTR lpMultiByteStr, UINT uCodePage);\nVOID     WINAPI MyFree(PVOID lpMem);\nPVOID    WINAPI MyMalloc(DWORD dwSize);\nPVOID    WINAPI MyRealloc(PVOID lpSrc, DWORD dwSize);\nDWORD    WINAPI OpenAndMapForRead(PCWSTR, PDWORD, PHANDLE, PHANDLE, PVOID *);\nLONG     WINAPI QueryRegistryValue(HKEY, PCWSTR, PBYTE *, PDWORD, PDWORD);\n/* RetreiveFileSecurity is not a typo, as per Microsoft's dlls */\nDWORD    WINAPI RetreiveFileSecurity(PCWSTR, PSECURITY_DESCRIPTOR *);\nBOOL     WINAPI SetupAddSectionToDiskSpaceListA(HDSKSPC, HINF, HINF, PCSTR, UINT, PVOID, UINT);\nBOOL     WINAPI SetupAddSectionToDiskSpaceListW(HDSKSPC, HINF, HINF, PCWSTR, UINT, PVOID, UINT);\n#define         SetupAddSectionToDiskSpaceList WINELIB_NAME_AW(SetupAddSectionToDiskSpaceList)\nBOOL     WINAPI SetupAddToDiskSpaceListA(HDSKSPC, PCSTR, LONGLONG, UINT, PVOID, UINT);\nBOOL     WINAPI SetupAddToDiskSpaceListW(HDSKSPC, PCWSTR, LONGLONG, UINT, PVOID, UINT);\n#define         SetupAddToDiskSpaceList WINELIB_NAME_AW(SetupAddToDiskSpaceList)\nBOOL     WINAPI SetupAddToSourceListA(DWORD, PCSTR);\nBOOL     WINAPI SetupAddToSourceListW(DWORD, PCWSTR);\n#define         SetupAddToSourceList WINELIB_NAME_AW(SetupAddToSourceList)\nBOOL     WINAPI SetupAdjustDiskSpaceListA(HDSKSPC, LPCSTR, LONGLONG, PVOID, UINT);\nBOOL     WINAPI SetupAdjustDiskSpaceListW(HDSKSPC, LPCWSTR, LONGLONG, PVOID, UINT);\n#define         SetupAdjustDiskSpaceList WINELIB_NAME_AW(SetupAdjustDiskSpaceList)\nBOOL     WINAPI SetupCancelTemporarySourceList(void);\nBOOL     WINAPI SetupConfigureWmiFromInfSectionA(HINF, PCSTR, DWORD);\nBOOL     WINAPI SetupConfigureWmiFromInfSectionW(HINF, PCWSTR, DWORD);\n#define         SetupConfigureWmiFromInfSection WINELIB_NAME_AW(SetupConfigureWmiFromInfSection)\nUINT     WINAPI SetupBackupErrorA(HWND, PCSTR, PCSTR, PCSTR, UINT, DWORD);\nUINT     WINAPI SetupBackupErrorW(HWND, PCWSTR, PCWSTR, PCWSTR, UINT, DWORD);\n#define         SetupBackupError WINELIB_NAME_AW(SetupBackupError)\nBOOL     WINAPI SetupCloseFileQueue( HSPFILEQ );\nvoid     WINAPI SetupCloseInfFile( HINF hinf );\nvoid     WINAPI SetupCloseLog(void);\nBOOL     WINAPI SetupCommitFileQueueA( HWND, HSPFILEQ, PSP_FILE_CALLBACK_A, PVOID );\nBOOL     WINAPI SetupCommitFileQueueW( HWND, HSPFILEQ, PSP_FILE_CALLBACK_W, PVOID );\n#define         SetupCommitFileQueue WINELIB_NAME_AW(SetupCommitFileQueue)\nUINT     WINAPI SetupCopyErrorA( HWND, PCSTR, PCSTR, PCSTR, PCSTR, PCSTR, UINT, DWORD, PSTR, DWORD, PDWORD );\nUINT     WINAPI SetupCopyErrorW( HWND, PCWSTR, PCWSTR, PCWSTR, PCWSTR, PCWSTR, UINT, DWORD, PWSTR, DWORD, PDWORD );\n#define         SetupCopyError WINELIB_NAME_AW(SetupCopyError)\nBOOL     WINAPI SetupCopyOEMInfA( PCSTR, PCSTR, DWORD, DWORD, PSTR, DWORD, PDWORD, PSTR * );\nBOOL     WINAPI SetupCopyOEMInfW( PCWSTR, PCWSTR, DWORD, DWORD, PWSTR, DWORD, PDWORD, PWSTR * );\n#define         SetupCopyOEMInf WINELIB_NAME_AW(SetupCopyOEMInf)\nHDSKSPC  WINAPI SetupCreateDiskSpaceListA(PVOID, DWORD, UINT);\nHDSKSPC  WINAPI SetupCreateDiskSpaceListW(PVOID, DWORD, UINT);\n#define         SetupCreateDiskSpaceList WINELIB_NAME_AW(SetupCreateDiskSpaceList)\nDWORD    WINAPI SetupDecompressOrCopyFileA( PCSTR, PCSTR, PUINT );\nDWORD    WINAPI SetupDecompressOrCopyFileW( PCWSTR, PCWSTR, PUINT );\n#define         SetupDecompressOrCopyFile WINELIB_NAME_AW(SetupDecompressOrCopyFile)\nUINT     WINAPI SetupDefaultQueueCallbackA( PVOID, UINT, UINT_PTR, UINT_PTR );\nUINT     WINAPI SetupDefaultQueueCallbackW( PVOID, UINT, UINT_PTR, UINT_PTR );\n#define         SetupDefaultQueueCallback WINELIB_NAME_AW(SetupDefaultQueueCallback)\nUINT     WINAPI SetupDeleteErrorA( HWND, PCSTR, PCSTR, UINT, DWORD );\nUINT     WINAPI SetupDeleteErrorW( HWND, PCWSTR, PCWSTR, UINT, DWORD );\n#define         SetupDeleteError WINELIB_NAME_AW(SetupDeleteError)\nBOOL     WINAPI SetupDestroyDiskSpaceList(HDSKSPC);\nBOOL     WINAPI SetupDiAskForOEMDisk(HDEVINFO, PSP_DEVINFO_DATA);\nBOOL     WINAPI SetupDiBuildClassInfoList(DWORD, LPGUID, DWORD, PDWORD);\nBOOL     WINAPI SetupDiBuildClassInfoListExA(DWORD, LPGUID, DWORD, PDWORD, PCSTR, PVOID);\nBOOL     WINAPI SetupDiBuildClassInfoListExW(DWORD, LPGUID, DWORD, PDWORD, PCWSTR, PVOID);\n#define         SetupDiBuildClassInfoListEx WINELIB_NAME_AW(SetupDiBuildClassInfoListEx)\nBOOL     WINAPI SetupDiBuildDriverInfoList(HDEVINFO, PSP_DEVINFO_DATA, DWORD);\nBOOL     WINAPI SetupDiCallClassInstaller(DI_FUNCTION, HDEVINFO, PSP_DEVINFO_DATA);\nBOOL     WINAPI SetupDiCancelDriverInfoSearch(HDEVINFO);\nBOOL     WINAPI SetupDiChangeState(HDEVINFO, PSP_DEVINFO_DATA);\nBOOL     WINAPI SetupDiClassGuidsFromNameA(LPCSTR, LPGUID, DWORD, PDWORD);\nBOOL     WINAPI SetupDiClassGuidsFromNameW(LPCWSTR, LPGUID, DWORD, PDWORD);\n#define         SetupDiClassGuidsFromName WINELIB_NAME_AW(SetupDiClassGuidsFromName)\nBOOL     WINAPI SetupDiClassGuidsFromNameExA(LPCSTR, LPGUID, DWORD, PDWORD, LPCSTR, PVOID);\nBOOL     WINAPI SetupDiClassGuidsFromNameExW(LPCWSTR, LPGUID, DWORD, PDWORD, LPCWSTR, PVOID);\n#define         SetupDiClassGuidsFromNameEx WINELIB_NAME_AW(SetupDiClassGuidsFromNameEx)\nBOOL     WINAPI SetupDiClassNameFromGuidA(const GUID*, PSTR, DWORD, PDWORD);\nBOOL     WINAPI SetupDiClassNameFromGuidW(const GUID*, PWSTR, DWORD, PDWORD);\n#define         SetupDiClassNameFromGuid WINELIB_NAME_AW(SetupDiClassNameFromGuid)\nBOOL     WINAPI SetupDiClassNameFromGuidExA(const GUID*, PSTR, DWORD, PDWORD, PCSTR, PVOID);\nBOOL     WINAPI SetupDiClassNameFromGuidExW(const GUID*, PWSTR, DWORD, PDWORD, PCWSTR, PVOID);\n#define         SetupDiClassNameFromGuidEx WINELIB_NAME_AW(SetupDiClassNameFromGuidEx)\nHDEVINFO WINAPI SetupDiCreateDeviceInfoList(const GUID *, HWND);\nHDEVINFO WINAPI SetupDiCreateDeviceInfoListExA(const GUID *, HWND, PCSTR, PVOID);\nHDEVINFO WINAPI SetupDiCreateDeviceInfoListExW(const GUID *, HWND, PCWSTR, PVOID);\n#define         SetupDiCreateDeviceInfoListEx WINELIB_NAME_AW(SetupDiCreateDeviceInfoListEx)\nBOOL     WINAPI SetupDiCreateDeviceInfoA(HDEVINFO, PCSTR, const GUID*, PCSTR, HWND, DWORD,PSP_DEVINFO_DATA);\nBOOL     WINAPI SetupDiCreateDeviceInfoW(HDEVINFO, PCWSTR, const GUID*, PCWSTR, HWND, DWORD,PSP_DEVINFO_DATA);\n#define         SetupDiCreateDeviceInfo WINELIB_NAME_AW(SetupDiCreateDeviceInfo)\nBOOL     WINAPI SetupDiCreateDeviceInterfaceA(HDEVINFO, PSP_DEVINFO_DATA, const GUID *, PCSTR, DWORD, PSP_DEVICE_INTERFACE_DATA);\nBOOL     WINAPI SetupDiCreateDeviceInterfaceW(HDEVINFO, PSP_DEVINFO_DATA, const GUID *, PCWSTR, DWORD, PSP_DEVICE_INTERFACE_DATA);\n#define         SetupDiCreateDeviceInterface WINELIB_NAME_AW(SetupDiCreateDeviceInterface)\nHKEY     WINAPI SetupDiCreateDeviceInterfaceRegKeyA(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, DWORD, REGSAM, HINF, PCSTR);\nHKEY     WINAPI SetupDiCreateDeviceInterfaceRegKeyW(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, DWORD, REGSAM, HINF, PCWSTR);\n#define         SetupDiCreateDeviceInterfaceRegKey WINELIB_NAME_AW(SetupDiCreateDeviceInterfaceRegKey)\nHKEY     WINAPI SetupDiCreateDevRegKeyA(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD, HINF, PCSTR);\nHKEY     WINAPI SetupDiCreateDevRegKeyW(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD, HINF, PCWSTR);\n#define         SetupDiCreateDevRegKey WINELIB_NAME_AW(SetupDiCreateDevRegKey)\nBOOL     WINAPI SetupDiDeleteDeviceInfo(HDEVINFO, PSP_DEVINFO_DATA);\nBOOL     WINAPI SetupDiDeleteDeviceInterfaceData(HDEVINFO, PSP_DEVICE_INTERFACE_DATA);\nBOOL     WINAPI SetupDiDeleteDeviceInterfaceRegKey(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, DWORD);\nBOOL     WINAPI SetupDiDeleteDevRegKey(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD);\nBOOL     WINAPI SetupDiDestroyClassImageList(PSP_CLASSIMAGELIST_DATA);\nBOOL     WINAPI SetupDiDestroyDeviceInfoList(HDEVINFO);\nBOOL     WINAPI SetupDiDestroyDriverInfoList(HDEVINFO, PSP_DEVINFO_DATA, DWORD);\nINT      WINAPI SetupDiDrawMiniIcon(HDC, RECT, INT, DWORD);\nBOOL     WINAPI SetupDiEnumDeviceInfo(HDEVINFO, DWORD, PSP_DEVINFO_DATA);\nBOOL     WINAPI SetupDiEnumDeviceInterfaces(HDEVINFO, PSP_DEVINFO_DATA, const GUID *, DWORD, PSP_DEVICE_INTERFACE_DATA);\nBOOL     WINAPI SetupDiEnumDriverInfoA(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, PSP_DRVINFO_DATA_A);\nBOOL     WINAPI SetupDiEnumDriverInfoW(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, PSP_DRVINFO_DATA_W);\n#define         SetupDiEnumDriverInfo WINELIB_NAME_AW(SetupDiEnumDriverInfo)\nBOOL     WINAPI SetupDiGetActualModelsSectionA(PINFCONTEXT, PSP_ALTPLATFORM_INFO, PSTR, DWORD, PDWORD, PVOID);\nBOOL     WINAPI SetupDiGetActualModelsSectionW(PINFCONTEXT, PSP_ALTPLATFORM_INFO, PWSTR, DWORD, PDWORD, PVOID);\n#define         SetupDiGetActualModelsSection WINELIB_NAME_AW(SetupDiGetActualModelsSection)\nBOOL     WINAPI SetupDiGetActualSectionToInstallA(HINF, PCSTR, PSTR, DWORD, PDWORD, PSTR *);\nBOOL     WINAPI SetupDiGetActualSectionToInstallW(HINF, PCWSTR, PWSTR, DWORD, PDWORD, PWSTR *);\n#define         SetupDiGetActualSectionToInstall WINELIB_NAME_AW(SetupDiGetActualSectionToInstall)\nBOOL     WINAPI SetupDiGetActualSectionToInstallExA(HINF, PCSTR, PSTR, DWORD, PDWORD, PSTR *, PVOID);\nBOOL     WINAPI SetupDiGetActualSectionToInstallExW(HINF, PCWSTR, PWSTR, DWORD, PDWORD, PWSTR *, PVOID);\n#define         SetupDiGetActualSectionToInstallEx WINELIB_NAME_AW(SetupDiGetActualSectionToInstallEx)\nBOOL     WINAPI SetupDiGetClassBitmapIndex(const GUID *, PINT);\nBOOL     WINAPI SetupDiGetClassDescriptionA(const GUID*, PSTR, DWORD, PDWORD);\nBOOL     WINAPI SetupDiGetClassDescriptionW(const GUID*, PWSTR, DWORD, PDWORD);\n#define         SetupDiGetClassDescription WINELIB_NAME_AW(SetupDiGetClassDescription)\nBOOL     WINAPI SetupDiGetClassDescriptionExA(const GUID*, PSTR, DWORD, PDWORD, PCSTR, PVOID);\nBOOL     WINAPI SetupDiGetClassDescriptionExW(const GUID*, PWSTR, DWORD, PDWORD, PCWSTR, PVOID);\n#define         SetupDiGetClassDescriptionEx WINELIB_NAME_AW(SetupDiGetClassDescriptionEx)\nBOOL     WINAPI SetupDiGetClassDevPropertySheetsA(HDEVINFO, PSP_DEVINFO_DATA, LPPROPSHEETHEADERA, DWORD, PDWORD, DWORD);\nBOOL     WINAPI SetupDiGetClassDevPropertySheetsW(HDEVINFO, PSP_DEVINFO_DATA, LPPROPSHEETHEADERW, DWORD, PDWORD, DWORD);\n#define         SetupDiGetClassDevPropertySheets WINELIB_NAME_AW(SetupDiGetClassDevPropertySheets)\nHDEVINFO WINAPI SetupDiGetClassDevsA(const GUID *,LPCSTR,HWND,DWORD);\nHDEVINFO WINAPI SetupDiGetClassDevsW(const GUID *,LPCWSTR,HWND,DWORD);\n#define         SetupDiGetClassDevs WINELIB_NAME_AW(SetupDiGetClassDevs)\nHDEVINFO WINAPI SetupDiGetClassDevsExA(const GUID *, PCSTR, HWND, DWORD, HDEVINFO, PCSTR, PVOID);\nHDEVINFO WINAPI SetupDiGetClassDevsExW(const GUID *, PCWSTR, HWND, DWORD, HDEVINFO, PCWSTR, PVOID);\n#define         SetupDiGetClassDevsEx WINELIB_NAME_AW(SetupDiGetClassDevsEx)\nBOOL     WINAPI SetupDiGetClassImageIndex(PSP_CLASSIMAGELIST_DATA, const GUID *, PINT);\nBOOL     WINAPI SetupDiGetClassImageList(PSP_CLASSIMAGELIST_DATA);\nBOOL     WINAPI SetupDiGetClassImageListExA(PSP_CLASSIMAGELIST_DATA, PCSTR, PVOID);\nBOOL     WINAPI SetupDiGetClassImageListExW(PSP_CLASSIMAGELIST_DATA, PCWSTR, PVOID);\n#define         SetupDiGetClassImageListEx WINELIB_NAME_AW(SetupDiGetClassImageListEx)\nBOOL     WINAPI SetupDiGetClassInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_CLASSINSTALL_HEADER, DWORD, PDWORD);\nBOOL     WINAPI SetupDiGetClassInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_CLASSINSTALL_HEADER, DWORD, PDWORD);\n#define         SetupDiGetClassInstallParams WINELIB_NAME_AW(SetupDiGetClassInstallParams)\nBOOL     WINAPI SetupDiGetClassRegistryPropertyA(const GUID *, DWORD, PDWORD, PBYTE, DWORD, PDWORD, PCSTR, PVOID);\nBOOL     WINAPI SetupDiGetClassRegistryPropertyW(const GUID *, DWORD, PDWORD, PBYTE, DWORD, PDWORD, PCWSTR, PVOID);\n#define         SetupDiGetClassRegistryProperty WINELIB_NAME_AW(SetupDiGetClassRegistryProperty)\nBOOL     WINAPI SetupDiGetCustomDevicePropertyA(HDEVINFO, PSP_DEVINFO_DATA, PCSTR, DWORD, PDWORD, PBYTE, DWORD, PDWORD);\nBOOL     WINAPI SetupDiGetCustomDevicePropertyW(HDEVINFO, PSP_DEVINFO_DATA, PCWSTR, DWORD, PDWORD, PBYTE, DWORD, PDWORD);\n#define         SetupDiGetCustomDeviceProperty WINELIB_NAME_AW(SetupDiGetCustomDeviceProperty)\nBOOL     WINAPI SetupDiGetDeviceInfoListClass(HDEVINFO, LPGUID);\nBOOL     WINAPI SetupDiGetDeviceInfoListDetailA(HDEVINFO, PSP_DEVINFO_LIST_DETAIL_DATA_A);\nBOOL     WINAPI SetupDiGetDeviceInfoListDetailW(HDEVINFO, PSP_DEVINFO_LIST_DETAIL_DATA_W);\n#define         SetupDiGetDeviceInfoListDetail WINELIB_NAME_AW(SetupDiGetDeviceInfoListDetail)\nBOOL     WINAPI SetupDiGetDeviceInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DEVINSTALL_PARAMS_A);\nBOOL     WINAPI SetupDiGetDeviceInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DEVINSTALL_PARAMS_W);\n#define         SetupDiGetDeviceInstallParams WINELIB_NAME_AW(SetupDiGetDeviceInstallParams)\nBOOL     WINAPI SetupDiGetDeviceInstanceIdA(HDEVINFO, PSP_DEVINFO_DATA, PSTR, DWORD, PDWORD);\nBOOL     WINAPI SetupDiGetDeviceInstanceIdW(HDEVINFO, PSP_DEVINFO_DATA, PWSTR, DWORD, PDWORD);\n#define         SetupDiGetDeviceInstanceId WINELIB_NAME_AW(SetupDiGetDeviceInstanceId)\nBOOL     WINAPI SetupDiGetDeviceInterfaceAlias(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, const GUID *, PSP_DEVICE_INTERFACE_DATA);\nBOOL     WINAPI SetupDiGetDeviceInterfaceDetailA(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, PSP_DEVICE_INTERFACE_DETAIL_DATA_A,\n                                                 DWORD, PDWORD, PSP_DEVINFO_DATA);\nBOOL     WINAPI SetupDiGetDeviceInterfaceDetailW(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, PSP_DEVICE_INTERFACE_DETAIL_DATA_W,\n                                                 DWORD, PDWORD, PSP_DEVINFO_DATA);\n#define         SetupDiGetDeviceInterfaceDetail WINELIB_NAME_AW(SetupDiGetDeviceInterfaceDetail)\nBOOL     WINAPI SetupDiGetDevicePropertyW(HDEVINFO, PSP_DEVINFO_DATA, const DEVPROPKEY *, DEVPROPTYPE *, BYTE *, DWORD,\n                                          DWORD *, DWORD);\n#define         SetupDiGetDeviceProperty WINELIB_NAME_AW(SetupDiGetDeviceProperty)  /* note: A function doesn't exist */\nBOOL     WINAPI SetupDiGetDeviceRegistryPropertyA(HDEVINFO, PSP_DEVINFO_DATA, DWORD, PDWORD, PBYTE, DWORD, PDWORD);\nBOOL     WINAPI SetupDiGetDeviceRegistryPropertyW(HDEVINFO, PSP_DEVINFO_DATA, DWORD, PDWORD, PBYTE, DWORD, PDWORD);\n#define         SetupDiGetDeviceRegistryProperty WINELIB_NAME_AW(SetupDiGetDeviceRegistryProperty)\nBOOL     WINAPI SetupDiGetDriverInfoDetailA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A, PSP_DRVINFO_DETAIL_DATA_A, DWORD, PDWORD);\nBOOL     WINAPI SetupDiGetDriverInfoDetailW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W, PSP_DRVINFO_DETAIL_DATA_W, DWORD, PDWORD);\n#define         SetupDiGetDriverInfoDetail WINELIB_NAME_AW(SetupDiGetDriverInfoDetail)\nBOOL     WINAPI SetupDiGetDriverInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A, PSP_DRVINSTALL_PARAMS);\nBOOL     WINAPI SetupDiGetDriverInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W, PSP_DRVINSTALL_PARAMS);\n#define         SetupDiGetDriverInstallParams WINELIB_NAME_AW(SetupDiGetDriverInstallParams)\nBOOL     WINAPI SetupDiGetHwProfileFriendlyNameA(DWORD, PSTR, DWORD, PDWORD);\nBOOL     WINAPI SetupDiGetHwProfileFriendlyNameW(DWORD, PWSTR, DWORD, PDWORD);\n#define         SetupDiGetHwProfileFriendlyName WINELIB_NAME_AW(SetupDiGetHwProfileFriendlyName)\nBOOL     WINAPI SetupDiGetHwProfileFriendlyNameExA(DWORD, PSTR, DWORD, PDWORD, PCSTR, PVOID);\nBOOL     WINAPI SetupDiGetHwProfileFriendlyNameExW(DWORD, PWSTR, DWORD, PDWORD, PCWSTR, PVOID);\n#define         SetupDiGetHwProfileFriendlyNameEx WINELIB_NAME_AW(SetupDiGetHwProfileFriendlyNameEx)\nBOOL     WINAPI SetupDiGetHwProfileList(PDWORD, DWORD, PDWORD, PDWORD);\nBOOL     WINAPI SetupDiGetHwProfileListExA(PDWORD, DWORD, PDWORD, PDWORD, PCSTR, PVOID);\nBOOL     WINAPI SetupDiGetHwProfileListExW(PDWORD, DWORD, PDWORD, PDWORD, PCWSTR, PVOID);\n#define         SetupDiGetHwProfileListEx WINELIB_NAME_AW(SetupDiGetHwProfileListEx)\nBOOL     WINAPI SetupDiGetINFClassA(PCSTR, LPGUID, PSTR, DWORD, PDWORD);\nBOOL     WINAPI SetupDiGetINFClassW(PCWSTR, LPGUID, PWSTR, DWORD, PDWORD);\n#define         SetupDiGetINFClass WINELIB_NAME_AW(SetupDiGetINFClass)\nBOOL     WINAPI SetupDiGetSelectedDevice(HDEVINFO, PSP_DEVINFO_DATA);\nBOOL     WINAPI SetupDiGetSelectedDriverA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A);\nBOOL     WINAPI SetupDiGetSelectedDriverW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W);\n#define         SetupDiGetSelectedDriver WINELIB_NAME_AW(SetupDiGetSelectedDriver)\nHPROPSHEETPAGE WINAPI SetupDiGetWizardPage(HDEVINFO, PSP_DEVINFO_DATA, PSP_INSTALLWIZARD_DATA, DWORD, DWORD);\nBOOL     WINAPI SetupDiInstallClassA(HWND, PCSTR, DWORD, HSPFILEQ);\nBOOL     WINAPI SetupDiInstallClassW(HWND, PCWSTR, DWORD, HSPFILEQ);\n#define         SetupDiInstallClass WINELIB_NAME_AW(SetupDiInstallClass)\nBOOL     WINAPI SetupDiInstallClassExA(HWND, PCSTR, DWORD, HSPFILEQ, const GUID *, PVOID, PVOID);\nBOOL     WINAPI SetupDiInstallClassExW(HWND, PCWSTR, DWORD, HSPFILEQ, const GUID *, PVOID, PVOID);\n#define         SetupDiInstallClassEx WINELIB_NAME_AW(SetupDiInstallClassEx)\nBOOL     WINAPI SetupDiInstallDevice(HDEVINFO, PSP_DEVINFO_DATA);\nBOOL     WINAPI SetupDiInstallDeviceInterfaces(HDEVINFO, PSP_DEVINFO_DATA);\nBOOL     WINAPI SetupDiInstallDriverFiles(HDEVINFO, PSP_DEVINFO_DATA);\nBOOL     WINAPI SetupDiLoadClassIcon(const GUID *, HICON *, PINT);\nHKEY     WINAPI SetupDiOpenClassRegKey(const GUID*, REGSAM);\nHKEY     WINAPI SetupDiOpenClassRegKeyExA(const GUID*, REGSAM, DWORD, PCSTR, PVOID);\nHKEY     WINAPI SetupDiOpenClassRegKeyExW(const GUID*, REGSAM, DWORD, PCWSTR, PVOID);\n#define         SetupDiOpenClassRegKeyEx WINELIB_NAME_AW(SetupDiOpenClassRegKeyEx)\nBOOL     WINAPI SetupDiOpenDeviceInfoA(HDEVINFO, PCSTR, HWND, DWORD, PSP_DEVINFO_DATA);\nBOOL     WINAPI SetupDiOpenDeviceInfoW(HDEVINFO, PCWSTR, HWND, DWORD, PSP_DEVINFO_DATA);\n#define         SetupDiOpenDeviceInfo WINELIB_NAME_AW(SetupDiOpenDeviceInfo)\nBOOL     WINAPI SetupDiOpenDeviceInterfaceA(HDEVINFO, PCSTR, DWORD, PSP_DEVICE_INTERFACE_DATA);\nBOOL     WINAPI SetupDiOpenDeviceInterfaceW(HDEVINFO, PCWSTR, DWORD, PSP_DEVICE_INTERFACE_DATA);\n#define         SetupDiOpenDeviceInterface WINELIB_NAME_AW(SetupDiOpenDeviceInterface)\nBOOL     WINAPI SetupDiOpenDeviceInterfaceRegKey(HDEVINFO, PSP_DEVINFO_DATA, DWORD, REGSAM);\nHKEY     WINAPI SetupDiOpenDevRegKey(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD, REGSAM);\nBOOL     WINAPI SetupDiRegisterCoDeviceInstallers(HDEVINFO, PSP_DEVINFO_DATA);\nBOOL     WINAPI SetupDiRegisterDeviceInfo(HDEVINFO, PSP_DEVINFO_DATA, DWORD, PSP_DETSIG_CMPPROC, PVOID, PSP_DEVINFO_DATA);\nBOOL     WINAPI SetupDiRemoveDevice(HDEVINFO, PSP_DEVINFO_DATA);\nBOOL     WINAPI SetupDiRemoveDeviceInterface(HDEVINFO, PSP_DEVICE_INTERFACE_DATA);\nBOOL     WINAPI SetupDiRestartDevices(HDEVINFO, PSP_DEVINFO_DATA);\nBOOL     WINAPI SetupDiSelectBestCompatDrv(HDEVINFO, PSP_DEVINFO_DATA);\nBOOL     WINAPI SetupDiSelectDevice(HDEVINFO, PSP_DEVINFO_DATA);\nBOOL     WINAPI SetupDiSelectOEMDrv(HWND, HDEVINFO, PSP_DEVINFO_DATA);\nBOOL     WINAPI SetupDiSetClassInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_CLASSINSTALL_HEADER, DWORD);\nBOOL     WINAPI SetupDiSetClassInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_CLASSINSTALL_HEADER, DWORD);\n#define         SetupDiSetClassInstallParams WINELIB_NAME_AW(SetupDiSetClassInstallParams)\nBOOL     WINAPI SetupDiSetClassRegistryPropertyA(const GUID *, DWORD, const BYTE *, DWORD, PCSTR, PVOID);\nBOOL     WINAPI SetupDiSetClassRegistryPropertyW(const GUID *, DWORD, const BYTE *, DWORD, PCWSTR, PVOID);\n#define         SetupDiSetClassRegistryProperty WINELIB_NAME_AW(SetupDiSetClassRegistryProperty)\nBOOL     WINAPI SetupDiSetDeviceInterfaceDefault(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, DWORD, PVOID);\nBOOL     WINAPI SetupDiSetDeviceInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DEVINSTALL_PARAMS_A);\nBOOL     WINAPI SetupDiSetDeviceInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DEVINSTALL_PARAMS_W);\n#define         SetupDiSetDeviceInstallParams WINELIB_NAME_AW(SetupDiSetDeviceInstallParams)\nBOOL     WINAPI SetupDiSetDeviceRegistryPropertyA(HDEVINFO, PSP_DEVINFO_DATA, DWORD, const BYTE *, DWORD);\nBOOL     WINAPI SetupDiSetDeviceRegistryPropertyW(HDEVINFO, PSP_DEVINFO_DATA, DWORD, const BYTE *, DWORD);\n#define         SetupDiSetDeviceRegistryProperty WINELIB_NAME_AW(SetupDiSetDeviceRegistryProperty)\nBOOL     WINAPI SetupDiSetDriverInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A, PSP_DRVINSTALL_PARAMS);\nBOOL     WINAPI SetupDiSetDriverInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W, PSP_DRVINSTALL_PARAMS);\n#define         SetupDiSetDriverInstallParams WINELIB_NAME_AW(SetupDiSetDriverInstallParams)\nBOOL     WINAPI SetupDiSetSelectedDevice(HDEVINFO, PSP_DEVINFO_DATA);\nBOOL     WINAPI SetupDiSetSelectedDriverA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A);\nBOOL     WINAPI SetupDiSetSelectedDriverW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W);\n#define         SetupDiSetSelectedDriver WINELIB_NAME_AW(SetupDiSetSelectedDriver)\nBOOL     WINAPI SetupDiUnremoveDevice(HDEVINFO, PSP_DEVINFO_DATA);\nHDSKSPC  WINAPI SetupDuplicateDiskSpaceListA(HDSKSPC, PVOID, DWORD, UINT);\nHDSKSPC  WINAPI SetupDuplicateDiskSpaceListW(HDSKSPC, PVOID, DWORD, UINT);\n#define         SetupDuplicateDiskSpaceList WINELIB_NAME_AW(SetupDuplicateDiskSpaceList)\nBOOL     WINAPI SetupEnumInfSectionsA(HINF, UINT, PSTR, DWORD, DWORD *);\nBOOL     WINAPI SetupEnumInfSectionsW(HINF, UINT, PWSTR, DWORD, DWORD *);\n#define         SetupEnumInfSections WINELIB_NAME_AW(SetupEnumInfSections)\nBOOL     WINAPI SetupFindFirstLineA( HINF hinf, PCSTR section, PCSTR key, INFCONTEXT *context );\nBOOL     WINAPI SetupFindFirstLineW( HINF hinf, PCWSTR section, PCWSTR key, INFCONTEXT *context );\n#define         SetupFindFirstLine WINELIB_NAME_AW(SetupFindFirstLine)\nBOOL     WINAPI SetupFindNextLine( PINFCONTEXT context_in, PINFCONTEXT context_out );\nBOOL     WINAPI SetupFindNextMatchLineA( PINFCONTEXT context_in, PCSTR key, PINFCONTEXT context_out );\nBOOL     WINAPI SetupFindNextMatchLineW( PINFCONTEXT context_in, PCWSTR key, PINFCONTEXT context_out );\n#define         SetupFindNextMatchLine WINELIB_NAME_AW(SetupFindNextMatchLine)\nBOOL     WINAPI SetupFreeSourceListA(PCSTR **, UINT);\nBOOL     WINAPI SetupFreeSourceListW(PCWSTR **, UINT);\n#define         SetupFreeSourceList WINELIB_NAME_AW(SetupFreeSourceList)\nBOOL     WINAPI SetupGetBackupInformationA(HSPFILEQ, PSP_BACKUP_QUEUE_PARAMS_A BackupParams);\nBOOL     WINAPI SetupGetBackupInformationW(HSPFILEQ, PSP_BACKUP_QUEUE_PARAMS_W BackupParams);\n#define         SetupGetBackupInformation WINELIB_NAME_AW(SetupGetBackupInformation)\nBOOL     WINAPI SetupGetBinaryField( PINFCONTEXT context, DWORD index, BYTE *buffer, DWORD size, LPDWORD required );\nDWORD    WINAPI SetupGetFieldCount( PINFCONTEXT context );\nDWORD    WINAPI SetupGetFileCompressionInfoA(PCSTR, PSTR *, PDWORD, PDWORD, PUINT);\nDWORD    WINAPI SetupGetFileCompressionInfoW(PCWSTR, PWSTR *, PDWORD, PDWORD, PUINT);\n#define         SetupGetFileCompressionInfo WINELIB_NAME_AW(SetupGetFileCompressionInfo)\nBOOL     WINAPI SetupGetFileCompressionInfoExA(PCSTR, PSTR, DWORD, PDWORD, PDWORD, PDWORD, PUINT);\nBOOL     WINAPI SetupGetFileCompressionInfoExW(PCWSTR, PWSTR, DWORD, PDWORD, PDWORD, PDWORD, PUINT);\n#define         SetupGetFileCompressionInfoEx WINELIB_NAME_AW(SetupGetFileCompressionInfoEx)\nBOOL     WINAPI SetupGetFileQueueCount( HSPFILEQ, UINT, PUINT );\nBOOL     WINAPI SetupGetFileQueueFlags( HSPFILEQ, PDWORD );\nBOOL     WINAPI SetupGetInfFileListA(PCSTR, DWORD, PSTR, DWORD, PDWORD);\nBOOL     WINAPI SetupGetInfFileListW(PCWSTR, DWORD, PWSTR, DWORD, PDWORD);\n#define         SetupGetInfFileList WINELIB_NAME_AW(SetupGetFileList)\nBOOL     WINAPI SetupGetInfInformationA( LPCVOID, DWORD, PSP_INF_INFORMATION, DWORD, PDWORD);\nBOOL     WINAPI SetupGetInfInformationW( LPCVOID, DWORD, PSP_INF_INFORMATION, DWORD, PDWORD);\n#define         SetupGetInfInformation WINELIB_NAME_AW(SetupGetInfInformation)\nBOOL     WINAPI SetupGetIntField( PINFCONTEXT context, DWORD index, PINT result );\nBOOL     WINAPI SetupGetLineByIndexA( HINF, PCSTR, DWORD, INFCONTEXT * );\nBOOL     WINAPI SetupGetLineByIndexW( HINF, PCWSTR, DWORD, INFCONTEXT * );\n#define         SetupGetLineByIndex WINELIB_NAME_AW(SetupGetLineByIndex)\nLONG     WINAPI SetupGetLineCountA( HINF hinf, PCSTR section );\nLONG     WINAPI SetupGetLineCountW( HINF hinf, PCWSTR section );\n#define         SetupGetLineCount WINELIB_NAME_AW(SetupGetLineCount)\nBOOL     WINAPI SetupGetLineTextA( PINFCONTEXT context, HINF hinf, PCSTR section_name,PCSTR key_name, PSTR buffer, DWORD size, PDWORD required );\nBOOL     WINAPI SetupGetLineTextW( PINFCONTEXT context, HINF hinf, PCWSTR section_name, PCWSTR key_name, PWSTR buffer, DWORD size, PDWORD required );\n#define         SetupGetLineText WINELIB_NAME_AW(SetupGetLineText)\nBOOL     WINAPI SetupGetMultiSzFieldA( PINFCONTEXT context, DWORD index, PSTR buffer, DWORD size, LPDWORD required );\nBOOL     WINAPI SetupGetMultiSzFieldW( PINFCONTEXT context, DWORD index, PWSTR buffer, DWORD size, LPDWORD required );\n#define         SetupGetMultiSzField WINELIB_NAME_AW(SetupGetMultiSzField)\nBOOL     WINAPI SetupGetNonInteractiveMode(void);\nBOOL     WINAPI SetupGetSourceFileLocationA( HINF hinf, PINFCONTEXT context, PCSTR filename, PUINT source_id, PSTR buffer, DWORD buffer_size, PDWORD required_size );\nBOOL     WINAPI SetupGetSourceFileLocationW( HINF hinf, PINFCONTEXT context, PCWSTR filename, PUINT source_id, PWSTR buffer, DWORD buffer_size, PDWORD required_size );\n#define         SetupGetSourceFileLocation WINELIB_NAME_AW(SetupGetSourceFileLocation)\nBOOL     WINAPI SetupGetSourceFileSizeA(HINF, PINFCONTEXT, PCSTR, PCSTR, PDWORD, UINT);\nBOOL     WINAPI SetupGetSourceFileSizeW(HINF, PINFCONTEXT, PCWSTR, PCWSTR, PDWORD, UINT);\n#define         SetupGetSourceFileSize WINELIB_NAME_AW(SetupGetSourceFileSize)\nBOOL     WINAPI SetupGetSourceInfoA( HINF hinf, UINT source_id, UINT info, PSTR buffer, DWORD buffer_size, LPDWORD required_size );\nBOOL     WINAPI SetupGetSourceInfoW( HINF hinf, UINT source_id, UINT info, PWSTR buffer, DWORD buffer_size, LPDWORD required_size );\n#define         SetupGetSourceInfo WINELIB_NAME_AW(SetupGetSourceInfo)\nBOOL     WINAPI SetupGetStringFieldA( PINFCONTEXT context, DWORD index, PSTR buffer, DWORD size, PDWORD required );\nBOOL     WINAPI SetupGetStringFieldW( PINFCONTEXT context, DWORD index, PWSTR buffer, DWORD size, PDWORD required );\n#define         SetupGetStringField WINELIB_NAME_AW(SetupGetStringField)\nBOOL     WINAPI SetupGetTargetPathA( HINF hinf, PINFCONTEXT context, PCSTR section, PSTR buffer, DWORD buffer_size, PDWORD required_size );\nBOOL     WINAPI SetupGetTargetPathW( HINF hinf, PINFCONTEXT context, PCWSTR section, PWSTR buffer, DWORD buffer_size, PDWORD required_size );\n#define         SetupGetTargetPath WINELIB_NAME_AW(SetupGetTargetPath)\nPVOID    WINAPI SetupInitDefaultQueueCallback( HWND );\nPVOID    WINAPI SetupInitDefaultQueueCallbackEx( HWND, HWND, UINT, DWORD, PVOID );\nHSPFILELOG WINAPI SetupInitializeFileLogA(PCSTR, DWORD);\nHSPFILELOG WINAPI SetupInitializeFileLogW(PCWSTR, DWORD);\n#define           SetupInitializeFileLog WINELIB_NAME_AW(SetupInitializeFileLog)\nBOOL     WINAPI SetupInstallFileA(HINF, PINFCONTEXT, PCSTR, PCSTR, PCSTR, DWORD, PSP_FILE_CALLBACK_A, PVOID);\nBOOL     WINAPI SetupInstallFileW(HINF, PINFCONTEXT, PCWSTR, PCWSTR, PCWSTR, DWORD, PSP_FILE_CALLBACK_W, PVOID);\n#define         SetupInstallFile WINELIB_NAME_AW(SetupInstallFile)\nBOOL     WINAPI SetupInstallFileExA(HINF, PINFCONTEXT, PCSTR, PCSTR, PCSTR, DWORD, PSP_FILE_CALLBACK_A, PVOID, PBOOL);\nBOOL     WINAPI SetupInstallFileExW(HINF, PINFCONTEXT, PCWSTR, PCWSTR, PCWSTR, DWORD, PSP_FILE_CALLBACK_W, PVOID, PBOOL);\n#define         SetupInstallFileEx WINELIB_NAME_AW(SetupInstallFileEx)\nBOOL     WINAPI SetupInstallFilesFromInfSectionA( HINF, HINF, HSPFILEQ, PCSTR, PCSTR, UINT );\nBOOL     WINAPI SetupInstallFilesFromInfSectionW( HINF, HINF, HSPFILEQ, PCWSTR, PCWSTR, UINT );\n#define         SetupInstallFilesFromInfSection WINELIB_NAME_AW(SetupInstallFilesFromInfSection)\nBOOL     WINAPI SetupInstallFromInfSectionA(HWND,HINF,PCSTR,UINT,HKEY,PCSTR,UINT,\n                                            PSP_FILE_CALLBACK_A,PVOID,HDEVINFO,PSP_DEVINFO_DATA);\nBOOL     WINAPI SetupInstallFromInfSectionW(HWND,HINF,PCWSTR,UINT,HKEY,PCWSTR,UINT,\n                                            PSP_FILE_CALLBACK_W,PVOID,HDEVINFO,PSP_DEVINFO_DATA);\n#define         SetupInstallFromInfSection WINELIB_NAME_AW(SetupInstallFromInfSection)\nBOOL     WINAPI SetupInstallServicesFromInfSectionA(HINF, PCSTR, DWORD);\nBOOL     WINAPI SetupInstallServicesFromInfSectionW(HINF, PCWSTR, DWORD);\n#define         SetupInstallServicesFromInfSection WINELIB_NAME_AW(SetupInstallServicesFromInfSection)\nBOOL     WINAPI SetupInstallServicesFromInfSectionExA(HINF, PCSTR, DWORD, HDEVINFO, PSP_DEVINFO_DATA, PVOID, PVOID);\nBOOL     WINAPI SetupInstallServicesFromInfSectionExW(HINF, PCWSTR, DWORD, HDEVINFO, PSP_DEVINFO_DATA, PVOID, PVOID);\n#define         SetupInstallServicesFromInfSectionEx WINELIB_NAME_AW(SetupInstallServicesFromInfSectionEx)\nBOOL     WINAPI SetupIterateCabinetA(PCSTR, DWORD, PSP_FILE_CALLBACK_A, PVOID);\nBOOL     WINAPI SetupIterateCabinetW(PCWSTR, DWORD, PSP_FILE_CALLBACK_W, PVOID);\n#define         SetupIterateCabinet WINELIB_NAME_AW(SetupIterateCabinet)\nBOOL     WINAPI SetupLogErrorA(LPCSTR,LogSeverity);\nBOOL     WINAPI SetupLogErrorW(LPCWSTR,LogSeverity);\n#define         SetupLogError WINELIB_NAME_AW(SetupLogError)\nBOOL     WINAPI SetupLogFileA(HSPFILELOG, PCSTR, PCSTR, PCSTR, DWORD, PCSTR, PCSTR, PCSTR, DWORD);\nBOOL     WINAPI SetupLogFileW(HSPFILELOG, PCWSTR, PCWSTR, PCWSTR, DWORD, PCWSTR, PCWSTR, PCWSTR, DWORD);\n#define         SetupLogFile WINELIB_NAME_AW(SetupLogFile)\nBOOL     WINAPI SetupOpenAppendInfFileA( PCSTR, HINF, UINT * );\nBOOL     WINAPI SetupOpenAppendInfFileW( PCWSTR, HINF, UINT * );\n#define         SetupOpenAppendInfFile WINELIB_NAME_AW(SetupOpenAppendInfFile)\nHSPFILEQ WINAPI SetupOpenFileQueue(void);\nHINF     WINAPI SetupOpenInfFileA( PCSTR name, PCSTR pszclass, DWORD style, UINT *error );\nHINF     WINAPI SetupOpenInfFileW( PCWSTR name, PCWSTR pszclass, DWORD style, UINT *error );\n#define         SetupOpenInfFile WINELIB_NAME_AW(SetupOpenInfFile)\nBOOL     WINAPI SetupOpenLog(BOOL);\nHINF     WINAPI SetupOpenMasterInf( VOID );\nBOOL     WINAPI SetupPrepareQueueForRestoreA(HSPFILEQ, PCSTR, DWORD);\nBOOL     WINAPI SetupPrepareQueueForRestoreW(HSPFILEQ, PCWSTR, DWORD);\n#define         SetupPrepareQueueForRestore WINELIB_NAME_AW(SetupPrepareQueueForRestore)\nUINT     WINAPI SetupPromptForDiskA(HWND, PCSTR, PCSTR, PCSTR, PCSTR, PCSTR, DWORD, PSTR, DWORD, PDWORD);\nUINT     WINAPI SetupPromptForDiskW(HWND, PCWSTR, PCWSTR, PCWSTR, PCWSTR, PCWSTR, DWORD, PWSTR, DWORD, PDWORD);\n#define         SetupPromptForDisk WINELIB_NAME_AW(SetupPromptForDisk)\nINT      WINAPI SetupPromptReboot( HSPFILEQ, HWND, BOOL);\nBOOL     WINAPI SetupQueryDrivesInDiskSpaceListA(HDSKSPC, PSTR, DWORD, PDWORD);\nBOOL     WINAPI SetupQueryDrivesInDiskSpaceListW(HDSKSPC, PWSTR, DWORD, PDWORD);\n#define         SetupQueryDrivesInDiskSpaceList WINELIB_NAME_AW(SetupQueryDrivesInDiskSpaceList)\nBOOL     WINAPI SetupQueryFileLogA(HSPFILELOG, PCSTR, PCSTR, SetupFileLogInfo, PSTR, DWORD, PDWORD);\nBOOL     WINAPI SetupQueryFileLogW(HSPFILELOG, PCWSTR, PCWSTR, SetupFileLogInfo, PWSTR, DWORD, PDWORD);\n#define         SetupQueryFileLog WINELIB_NAME_AW(SetupQueryFileLog)\nBOOL     WINAPI SetupQueryInfFileInformationA(PSP_INF_INFORMATION, UINT, PSTR, DWORD, PDWORD);\nBOOL     WINAPI SetupQueryInfFileInformationW(PSP_INF_INFORMATION, UINT, PWSTR, DWORD, PDWORD);\n#define         SetupQueryInfFileInformation WINELIB_NAME_AW(SetupQueryInFileInformation)\nBOOL     WINAPI SetupQueryInfOriginalFileInformationA(PSP_INF_INFORMATION, UINT, PSP_ALTPLATFORM_INFO, PSP_ORIGINAL_FILE_INFO_A);\nBOOL     WINAPI SetupQueryInfOriginalFileInformationW(PSP_INF_INFORMATION, UINT, PSP_ALTPLATFORM_INFO, PSP_ORIGINAL_FILE_INFO_W);\n#define         SetupQueryInfOriginalFileInformation WINELIB_NAME_AW(SetupQueryInfOriginalFileInformation)\nBOOL     WINAPI SetupQueryInfVersionInformationA(PSP_INF_INFORMATION, UINT, PCSTR, PSTR, DWORD, PDWORD);\nBOOL     WINAPI SetupQueryInfVersionInformationW(PSP_INF_INFORMATION, UINT, PCWSTR, PWSTR, DWORD, PDWORD);\n#define         SetupQueryInfVersionInformation WINELIB_NAME_AW(SetupQueryInfVersionInformation)\nBOOL     WINAPI SetupQuerySourceListA(DWORD, PCSTR **, PUINT);\nBOOL     WINAPI SetupQuerySourceListW(DWORD, PCWSTR **, PUINT);\n#define         SetupQuerySourceList WINELIB_NAME_AW(SetupQuerySourceList)\nBOOL     WINAPI SetupQuerySpaceRequiredOnDriveA(HDSKSPC, PCSTR, LONGLONG *, PVOID, UINT);\nBOOL     WINAPI SetupQuerySpaceRequiredOnDriveW(HDSKSPC, PCWSTR, LONGLONG *, PVOID, UINT);\n#define         SetupQuerySpaceRequiredOnDrive WINELIB_NAME_AW(SetupQuerySpaceRequiredOnDrive)\nBOOL     WINAPI SetupQueueCopyA(HSPFILEQ,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,DWORD);\nBOOL     WINAPI SetupQueueCopyW(HSPFILEQ,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,DWORD);\n#define         SetupQueueCopy WINELIB_NAME_AW(SetupQueueCopy)\nBOOL     WINAPI SetupQueueCopyIndirectA( PSP_FILE_COPY_PARAMS_A );\nBOOL     WINAPI SetupQueueCopyIndirectW( PSP_FILE_COPY_PARAMS_W );\n#define         SetupQueueCopyIndirect WINELIB_NAME_AW(SetupQueueCopyIndirect)\nBOOL     WINAPI SetupQueueCopySectionA( HSPFILEQ, PCSTR, HINF, HINF, PCSTR, DWORD );\nBOOL     WINAPI SetupQueueCopySectionW( HSPFILEQ, PCWSTR, HINF, HINF, PCWSTR, DWORD );\n#define         SetupQueueCopySection WINELIB_NAME_AW(SetupQueueCopySection)\nBOOL     WINAPI SetupQueueDefaultCopyA( HSPFILEQ, HINF, PCSTR, PCSTR, PCSTR, DWORD );\nBOOL     WINAPI SetupQueueDefaultCopyW( HSPFILEQ, HINF, PCWSTR, PCWSTR, PCWSTR, DWORD );\n#define         SetupQueueDefaultCopy WINELIB_NAME_AW(SetupQueueDefaultCopy)\nBOOL     WINAPI SetupQueueDeleteA( HSPFILEQ, PCSTR, PCSTR );\nBOOL     WINAPI SetupQueueDeleteW( HSPFILEQ, PCWSTR, PCWSTR );\n#define         SetupQueueDelete WINELIB_NAME_AW(SetupQueueDelete)\nBOOL     WINAPI SetupQueueDeleteSectionA( HSPFILEQ, HINF, HINF, PCSTR );\nBOOL     WINAPI SetupQueueDeleteSectionW( HSPFILEQ, HINF, HINF, PCWSTR );\n#define         SetupQueueDeleteSection WINELIB_NAME_AW(SetupQueueDeleteSection)\nBOOL     WINAPI SetupQueueRenameA( HSPFILEQ, PCSTR, PCSTR, PCSTR, PCSTR );\nBOOL     WINAPI SetupQueueRenameW( HSPFILEQ, PCWSTR, PCWSTR, PCWSTR, PCWSTR );\n#define         SetupQueueRename WINELIB_NAME_AW(SetupQueueRename)\nBOOL     WINAPI SetupQueueRenameSectionA( HSPFILEQ, HINF, HINF, PCSTR );\nBOOL     WINAPI SetupQueueRenameSectionW( HSPFILEQ, HINF, HINF, PCWSTR );\n#define         SetupQueueRenameSection WINELIB_NAME_AW(SetupQueueRenameSection)\nBOOL     WINAPI SetupRemoveFileLogEntryA(HSPFILELOG, PCSTR, PCSTR);\nBOOL     WINAPI SetupRemoveFileLogEntryW(HSPFILELOG, PCWSTR, PCWSTR);\n#define         SetupRemoveFileLogEntry WINELIB_NAME_AW(SetupRemoveFileLogEntry)\nBOOL     WINAPI SetupRemoveFromDiskSpaceListA(HDSKSPC, PCSTR, UINT, PVOID, UINT);\nBOOL     WINAPI SetupRemoveFromDiskSpaceListW(HDSKSPC, PCWSTR, UINT, PVOID, UINT);\n#define         SetupRemoveFromDiskSpaceList WINELIB_NAME_AW(SetupRemoveFromDiskSpaceList)\nBOOL     WINAPI SetupRemoveInstallSectionFromDiskSpaceListA(HDSKSPC, HINF, HINF, PCSTR, PVOID, UINT);\nBOOL     WINAPI SetupRemoveInstallSectionFromDiskSpaceListW(HDSKSPC, HINF, HINF, PCWSTR, PVOID, UINT);\n#define         SetupRemoveInstallSectionFromDiskSpaceList WINELIB_NAME_AW(SetupRemoveInstallSectionFromDiskSpaceList)\nBOOL     WINAPI SetupRemoveSectionFromDiskSpaceListA(HDSKSPC, HINF, HINF, PCSTR, UINT, PVOID, UINT);\nBOOL     WINAPI SetupRemoveSectionFromDiskSpaceListW(HDSKSPC, HINF, HINF, PCWSTR, UINT, PVOID, UINT);\n#define         SetupRemoveSectionFromDiskSpaceList WINELIB_NAME_AW(SetupRemoveSectionFromDiskSpaceList)\nBOOL     WINAPI SetupRemoveFromSourceListA(DWORD, PCSTR);\nBOOL     WINAPI SetupRemoveFromSourceListW(DWORD, PCWSTR);\n#define         SetupRemoveFromSourceList WINELIB_NAME_AW(SetupRemoveFromSourceList)\nUINT     WINAPI SetupRenameErrorA( HWND, PCSTR, PCSTR, PCSTR, UINT, DWORD );\nUINT     WINAPI SetupRenameErrorW( HWND, PCWSTR, PCWSTR, PCWSTR, UINT, DWORD );\n#define         SetupRenameError WINELIB_NAME_AW(SetupRenameError)\nBOOL     WINAPI SetupScanFileQueueA( HSPFILEQ, DWORD, HWND, PSP_FILE_CALLBACK_A, PVOID, PDWORD );\nBOOL     WINAPI SetupScanFileQueueW( HSPFILEQ, DWORD, HWND, PSP_FILE_CALLBACK_W, PVOID, PDWORD );\n#define         SetupScanFileQueue WINELIB_NAME_AW(SetupScanFileQueue)\nBOOL     WINAPI SetupSetDirectoryIdA( HINF, DWORD, PCSTR );\nBOOL     WINAPI SetupSetDirectoryIdW( HINF, DWORD, PCWSTR );\n#define         SetupSetDirectoryId WINELIB_NAME_AW(SetupSetDirectoryId)\nBOOL     WINAPI SetupSetDirectoryIdExA( HINF, DWORD, PCSTR, DWORD, DWORD, PVOID );\nBOOL     WINAPI SetupSetDirectoryIdExW( HINF, DWORD, PCWSTR, DWORD, DWORD, PVOID );\n#define         SetupSetDirectoryIdEx WINELIB_NAME_AW(SetupSetDirectoryIdEx)\nBOOL     WINAPI SetupSetFileQueueAlternatePlatformA( HSPFILEQ, PSP_ALTPLATFORM_INFO, PCSTR );\nBOOL     WINAPI SetupSetFileQueueAlternatePlatformW( HSPFILEQ, PSP_ALTPLATFORM_INFO, PCWSTR );\n#define         SetupSetFileQueueAlternatePlatform WINELIB_NAME_AW(SetupSetFileQueueAlternatePlatform)\nBOOL     WINAPI SetupSetFileQueueFlags( HSPFILEQ, DWORD, DWORD );\nBOOL     WINAPI SetupSetNonInteractiveMode(BOOL);\nBOOL     WINAPI SetupSetPlatformPathOverrideA(PCSTR);\nBOOL     WINAPI SetupSetPlatformPathOverrideW(PCWSTR);\n#define         SetupSetPlatformPathOverride WINELIB_NAME_AW(SetupSetPlatformPathOverride)\nBOOL     WINAPI SetupSetSourceListA(DWORD, PCSTR *, UINT);\nBOOL     WINAPI SetupSetSourceListW(DWORD, PCWSTR *, UINT);\n#define         SetupSetSourceList WINELIB_NAME_AW(SetupSetSourceList)\nvoid     WINAPI SetupTermDefaultQueueCallback( PVOID );\nBOOL     WINAPI SetupTerminateFileLog(HSPFILELOG);\nBOOL     WINAPI SetupUninstallOEMInfA(PCSTR, DWORD, PVOID);\nBOOL     WINAPI SetupUninstallOEMInfW(PCWSTR, DWORD, PVOID);\n#define         SetupUninstallOEMInf WINELIB_NAME_AW(SetupUninstallOEMInf)\nBOOL     WINAPI SetupUninstallNewlyCopiedInfs(HSPFILEQ, DWORD, PVOID);\nBOOL     WINAPI SetupVerifyInfFileA(PCSTR, PSP_ALTPLATFORM_INFO, PSP_INF_SIGNER_INFO_A);\nBOOL     WINAPI SetupVerifyInfFileW(PCWSTR, PSP_ALTPLATFORM_INFO, PSP_INF_SIGNER_INFO_W);\n#define         SetupVerifyInfFile WINELIB_NAME_AW(SetupVerifyInfFile)\nDWORD    WINAPI StampFileSecurity(PCWSTR, PSECURITY_DESCRIPTOR);\nDWORD    WINAPI TakeOwnershipOfFile(PCWSTR);\nPSTR     WINAPI UnicodeToMultiByte(PCWSTR lpUnicodeStr, UINT uCodePage);\nBOOL     WINAPI UnmapAndCloseFile(HANDLE, HANDLE, PVOID);\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#undef DECL_WINELIB_SETUPAPI_TYPE_AW\n\n#include <poppack.h>\n\n#endif /* _INC_SETUPAPI */\n"
  },
  {
    "path": "wine/windows/sfc.h",
    "content": "/*\n * Definitions for the System File Checker (Windows File Protection)\n *\n * Copyright 2006 Detlef Riekenberg\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_SFC_H\n#define __WINE_SFC_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Types */\n\ntypedef struct _PROTECTED_FILE_DATA {\n WCHAR FileName[MAX_PATH];\n DWORD FileNumber;\n} PROTECTED_FILE_DATA, *PPROTECTED_FILE_DATA;\n\n/* Functions */\n\nBOOL WINAPI SfcGetNextProtectedFile(HANDLE, PPROTECTED_FILE_DATA);\nBOOL WINAPI SfcIsFileProtected(HANDLE, LPCWSTR);\nBOOL WINAPI SfcIsKeyProtected(HKEY, LPCWSTR, REGSAM);\nBOOL WINAPI SfpVerifyFile(LPCSTR, LPSTR, DWORD);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/shdeprecated.idl",
    "content": "/*\n * Deprecated shell interfaces\n *\n * Copyright (C) 2010 Nikolay Sivov for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"objidl.idl\";\nimport \"ocidl.idl\";\nimport \"shtypes.idl\";\nimport \"shobjidl.idl\";\nimport \"hlink.idl\";\nimport \"exdisp.idl\";\n\ncpp_quote(\"#define TLOG_BACK    -1\")\ncpp_quote(\"#define TLOG_FORE    1\")\n\ncpp_quote(\"#define TLMENUF_INCLUDECURRENT   0x00000001\")\ncpp_quote(\"#define TLMENUF_CHECKCURRENT     (TLMENUF_INCLUDECURRENT | 0x00000002)\")\ncpp_quote(\"#define TLMENUF_BACK             0x00000010\")\ncpp_quote(\"#define TLMENUF_FORE             0x00000020\")\ncpp_quote(\"#define TLMENUF_BACKANDFORTH     (TLMENUF_BACK | TLMENUF_FORE | TLMENUF_INCLUDECURRENT)\")\n\n[\n    hidden,\n    local,\n    object,\n    uuid(F46EDB3B-BC2F-11d0-9412-00AA00A3EBD3)\n]\ninterface ITravelEntry : IUnknown\n{\n    HRESULT Invoke(\n        [in] IUnknown *punk);\n\n    HRESULT Update(\n        [in] IUnknown *punk,\n        [in] BOOL fIsLocalAnchor);\n\n    HRESULT GetPidl(\n        [out] LPITEMIDLIST *ppidl);\n}\n\n[\n    hidden,\n    local,\n    object,\n    uuid(66A9CB08-4802-11d2-A561-00A0C92DBFE8)\n]\ninterface ITravelLog : IUnknown\n{\n    HRESULT AddEntry(\n        [in] IUnknown *punk,\n        [in] BOOL fIsLocalAnchor);\n\n    HRESULT UpdateEntry(\n        [in] IUnknown *punk,\n        [in] BOOL fIsLocalAnchor);\n\n    HRESULT UpdateExternal(\n        [in] IUnknown *punk,\n        [in] IUnknown *punkHLBrowseContext);\n\n    HRESULT Travel(\n        [in] IUnknown *punk,\n        [in] int iOffset);\n\n    HRESULT GetTravelEntry(\n        [in]  IUnknown *punk,\n        [in]  int iOffset,\n        [optional, out] ITravelEntry **ppte);\n\n    HRESULT FindTravelEntry(\n        [in]  IUnknown *punk,\n        [in]  LPCITEMIDLIST pidl,\n        [out] ITravelEntry **ppte);\n\n    HRESULT GetToolTipText(\n        [in]  IUnknown *punk,\n        [in]  int iOffset,\n        [in]  int idsTemplate,\n        [out, size_is(cchText)] LPWSTR pwzText,\n        [in]  DWORD cchText);\n\n    HRESULT InsertMenuEntries(\n        [in] IUnknown *punk,\n        [in] HMENU hmenu,\n        [in] int nPos,\n        [in] int idFirst,\n        [in] int idLast,\n        [in] DWORD dwFlags);\n\n    HRESULT Clone(\n        [out] ITravelLog **pptl);\n\n    DWORD CountEntries(\n        [in] IUnknown *punk);\n\n    HRESULT Revert();\n}\n\ntypedef void *CIE4ConnectionPoint;\n\n[\n    local,\n    object,\n    uuid(0D7D1D00-6FC0-11D0-A974-00C04FD705A2)\n]\ninterface IExpDispSupport : IUnknown\n{\n    HRESULT FindCIE4ConnectionPoint(\n        REFIID riid,\n        CIE4ConnectionPoint **ppccp);\n\n    HRESULT OnTranslateAccelerator(\n        MSG  *pMsg,\n        DWORD grfModifiers);\n\n    HRESULT OnInvoke(\n        DISPID dispidMember,\n        REFIID iid,\n        LCID lcid,\n        WORD wFlags,\n        DISPPARAMS *pdispparams,\n        VARIANT *pVarResult,\n        EXCEPINFO *pexcepinfo,\n        UINT *puArgErr);\n}\n\ntypedef enum tagBNSTATE\n{\n    BNS_NORMAL = 0,\n    BNS_BEGIN_NAVIGATE = 1,\n    BNS_NAVIGATE = 2\n\n} BNSTATE;\n\nenum {\n    SBSC_HIDE = 0,\n    SBSC_SHOW = 1,\n    SBSC_TOGGLE = 2,\n    SBSC_QUERY =  3\n};\n\ncpp_quote(\"#define BSF_REGISTERASDROPTARGET     0x00000001\")\ncpp_quote(\"#define BSF_THEATERMODE              0x00000002\")\ncpp_quote(\"#define BSF_NOLOCALFILEWARNING       0x00000010\")\ncpp_quote(\"#define BSF_UISETBYAUTOMATION        0x00000100\")\ncpp_quote(\"#define BSF_RESIZABLE                0x00000200\")\ncpp_quote(\"#define BSF_CANMAXIMIZE              0x00000400\")\ncpp_quote(\"#define BSF_TOPBROWSER               0x00000800\")\ncpp_quote(\"#define BSF_NAVNOHISTORY             0x00001000\")\ncpp_quote(\"#define BSF_HTMLNAVCANCELED          0x00002000\")\ncpp_quote(\"#define BSF_DONTSHOWNAVCANCELPAGE    0x00004000\")\ncpp_quote(\"#define BSF_SETNAVIGATABLECODEPAGE   0x00008000\")\ncpp_quote(\"#define BSF_DELEGATEDNAVIGATION      0x00010000\")\ncpp_quote(\"#define BSF_TRUSTEDFORACTIVEX        0x00020000\")\n\ncpp_quote(\"#define HLNF_CALLERUNTRUSTED             0x00200000\")\ncpp_quote(\"#define HLNF_TRUSTEDFORACTIVEX           0x00400000\")\ncpp_quote(\"#define HLNF_DISABLEWINDOWRESTRICTIONS   0x00800000\")\ncpp_quote(\"#define HLNF_TRUSTFIRSTDOWNLOAD          0x01000000\")\ncpp_quote(\"#define HLNF_UNTRUSTEDFORDOWNLOAD        0x02000000\")\ncpp_quote(\"#define SHHLNF_NOAUTOSELECT              0x04000000\")\ncpp_quote(\"#define SHHLNF_WRITENOHISTORY            0x08000000\")\ncpp_quote(\"#define HLNF_EXTERNALNAVIGATE            0x10000000\")\ncpp_quote(\"#define HLNF_ALLOW_AUTONAVIGATE          0x20000000\")\ncpp_quote(\"#define HLNF_NEWWINDOWSMANAGED           0x80000000\")\n\n[\n    local,\n    object,\n    uuid(02ba3b52-0547-11d1-b833-00c04fc9b31f)\n]\ninterface IBrowserService : IUnknown\n{\n    HRESULT GetParentSite(\n        [out] IOleInPlaceSite **ppipsite);\n\n    HRESULT SetTitle(\n        [in] IShellView *psv,\n        [in] LPCWSTR pszName);\n\n    HRESULT GetTitle(\n        [in] IShellView *psv,\n        [out, size_is(cchName)] LPWSTR pszName,\n        [in] DWORD cchName);\n\n    HRESULT GetOleObject(\n        [out] IOleObject **ppobjv);\n\n    HRESULT GetTravelLog(\n        [out, optional] ITravelLog **pptl);\n\n    HRESULT ShowControlWindow(\n        [in] UINT id,\n        [in] BOOL fShow);\n\n    HRESULT IsControlWindowShown(\n        [in] UINT id,\n        [out] BOOL *pfShown);\n\n    HRESULT IEGetDisplayName(\n        [in] PCIDLIST_ABSOLUTE pidl,\n        [out] LPWSTR pwszName,\n        [in] UINT uFlags);\n\n    HRESULT IEParseDisplayName(\n        [in] UINT uiCP,\n        [in] LPCWSTR pwszPath,\n        [out] PIDLIST_ABSOLUTE *ppidlOut);\n\n    HRESULT DisplayParseError(\n        [in] HRESULT hres,\n        [in] LPCWSTR pwszPath);\n\n    HRESULT NavigateToPidl(\n        [in] PCIDLIST_ABSOLUTE pidl,\n        [in] DWORD grfHLNF);\n\n    HRESULT SetNavigateState(\n        [in] BNSTATE bnstate);\n\n    HRESULT GetNavigateState(\n        [out] BNSTATE *pbnstate);\n\n    HRESULT NotifyRedirect(\n        [in] IShellView *psv,\n        [in] PCIDLIST_ABSOLUTE pidl,\n        [out] BOOL *pfDidBrowse);\n\n    HRESULT UpdateWindowList();\n\n    HRESULT UpdateBackForwardState();\n\n    HRESULT SetFlags(\n        [in] DWORD dwFlags,\n        [in] DWORD dwFlagMask);\n\n    HRESULT GetFlags(\n        [out] DWORD *pdwFlags);\n\n    HRESULT CanNavigateNow();\n\n    HRESULT GetPidl(\n        [out] PIDLIST_ABSOLUTE *ppidl);\n\n    HRESULT SetReferrer(\n        [in] PCIDLIST_ABSOLUTE pidl);\n\n    DWORD GetBrowserIndex();\n\n    HRESULT GetBrowserByIndex(\n        [in] DWORD dwID,\n        [out] IUnknown **ppunk);\n\n    HRESULT GetHistoryObject(\n        [out] IOleObject **ppole,\n        [out] IStream **pstm,\n        [out] IBindCtx **ppbc);\n\n    HRESULT SetHistoryObject(\n        [in] IOleObject *pole,\n        [in] BOOL fIsLocalAnchor);\n\n    HRESULT CacheOLEServer(\n        [in] IOleObject *pole);\n\n    HRESULT GetSetCodePage(\n        [in] VARIANT *pvarIn,\n        [out] VARIANT *pvarOut);\n\n    HRESULT OnHttpEquiv(\n        [in] IShellView *psv,\n        [in] BOOL fDone,\n        [in] VARIANT *pvarargIn,\n        [out] VARIANT *pvarargOut);\n\n    HRESULT GetPalette(\n        [out] HPALETTE *hpal);\n\n    HRESULT RegisterWindow(\n        [in] BOOL fForceRegister,\n        [in] int swc);\n}\n\n[\n    object,\n    local,\n    uuid(5836fb00-8187-11cf-a12b-00aa004ae837)\n]\ninterface IShellService : IUnknown\n{\n    HRESULT SetOwner( [in] IUnknown *pUnk );\n}\n\ncpp_quote(\"#if 0\")\ntypedef HANDLE HMONITOR;\ncpp_quote(\"#endif\")\n\nenum {\n    SECURELOCK_NOCHANGE                 = -1,\n    SECURELOCK_SET_UNSECURE             = 0,\n    SECURELOCK_SET_MIXED                = 1,\n    SECURELOCK_SET_SECUREUNKNOWNBIT     = 2,\n    SECURELOCK_SET_SECURE40BIT          = 3,\n    SECURELOCK_SET_SECURE56BIT          = 4,\n    SECURELOCK_SET_FORTEZZA             = 5,\n    SECURELOCK_SET_SECURE128BIT         = 6,\n    SECURELOCK_FIRSTSUGGEST             = 7,\n    SECURELOCK_SUGGEST_UNSECURE         = SECURELOCK_FIRSTSUGGEST,\n    SECURELOCK_SUGGEST_MIXED            = 8,\n    SECURELOCK_SUGGEST_SECUREUNKNOWNBIT = 9,\n    SECURELOCK_SUGGEST_SECURE40BIT      = 10,\n    SECURELOCK_SUGGEST_SECURE56BIT      = 11,\n    SECURELOCK_SUGGEST_FORTEZZA         = 12,\n    SECURELOCK_SUGGEST_SECURE128BIT     = 13,\n};\n\n\ntypedef struct {\n    HWND _hwnd;\n    ITravelLog *_ptl;\n    IHlinkFrame *_phlf;\n    IWebBrowser2 *_pautoWB2;\n    IExpDispSupport *_pautoEDS;\n    IShellService *_pautoSS;\n    int _eSecureLockIcon;\n    DWORD _fCreatingViewWindow;\n    UINT _uActivateState;\n\n    LPCITEMIDLIST _pidlNewShellView;\n\n    IOleCommandTarget *_pctView;\n\n    LPITEMIDLIST _pidlCur;\n    IShellView *_psv;\n    IShellFolder *_psf;\n    HWND _hwndView;\n    LPWSTR _pszTitleCur;\n\n    LPITEMIDLIST _pidlPending;\n    IShellView *_psvPending;\n    IShellFolder *_psfPending;\n    HWND _hwndViewPending;\n    LPWSTR _pszTitlePending;\n\n    BOOL _fIsViewMSHTML;\n    BOOL _fPrivacyImpacted;\n\n} BASEBROWSERDATA, *LPBASEBROWSERDATA;\ntypedef const BASEBROWSERDATA *LPCBASEBROWSERDATA;\n\ncpp_quote(\"#define VIEW_PRIORITY_RESTRICTED         0x00000070\")\ncpp_quote(\"#define VIEW_PRIORITY_CACHEHIT           0x00000050\")\ncpp_quote(\"#define VIEW_PRIORITY_STALECACHEHIT      0x00000045\")\ncpp_quote(\"#define VIEW_PRIORITY_USEASDEFAULT       0x00000043\")\ncpp_quote(\"#define VIEW_PRIORITY_SHELLEXT           0x00000040\")\ncpp_quote(\"#define VIEW_PRIORITY_CACHEMISS          0x00000030\")\ncpp_quote(\"#define VIEW_PRIORITY_INHERIT            0x00000020\")\ncpp_quote(\"#define VIEW_PRIORITY_SHELLEXT_ASBACKUP  0x0015\")\ncpp_quote(\"#define VIEW_PRIORITY_DESPERATE          0x00000010\")\ncpp_quote(\"#define VIEW_PRIORITY_NONE               0x00000000\")\n\ntypedef struct tagFolderSetData {\n    FOLDERSETTINGS _fs;\n    SHELLVIEWID _vidRestore;\n    DWORD _dwViewPriority;\n} FOLDERSETDATA, *LPFOLDERSETDATA;\n\ntypedef struct SToolbarItem {\n    IDockingWindow *ptbar;\n    BORDERWIDTHS rcBorderTool;\n    LPWSTR pwszItem;\n    BOOL fShow;\n    HMONITOR hMon;\n} TOOLBARITEM, *LPTOOLBARITEM;\n\ncpp_quote(\"#define ITB_VIEW        ((UINT)-1)\")\n\n[\n    local,\n    object,\n    uuid(68BD21CC-438B-11d2-A560-00A0C92DBFE8)\n]\ninterface IBrowserService2 : IBrowserService\n{\n    LRESULT WndProcBS(\n        [in] HWND hwnd,\n        [in] UINT uMsg,\n        [in] WPARAM wParam,\n        [in] LPARAM lParam);\n\n    HRESULT SetAsDefFolderSettings();\n\n    HRESULT GetViewRect(\n        [in, out] RECT *prc);\n\n    HRESULT OnSize(\n        [in] WPARAM wParam);\n\n    HRESULT OnCreate(\n        [in] struct tagCREATESTRUCTW *pcs);\n\n    LRESULT OnCommand(\n        [in] WPARAM wParam,\n        [in] LPARAM lParam);\n\n    HRESULT OnDestroy();\n\n    LRESULT OnNotify(\n        [in, out] struct tagNMHDR *pnm);\n\n    HRESULT OnSetFocus();\n\n    HRESULT OnFrameWindowActivateBS(\n        [in] BOOL fActive);\n\n    HRESULT ReleaseShellView();\n\n    HRESULT ActivatePendingView();\n\n    HRESULT CreateViewWindow(\n        [in] IShellView *psvNew,\n        [in] IShellView *psvOld,\n        [out] LPRECT prcView,\n        [out] HWND *phwnd);\n\n    HRESULT CreateBrowserPropSheetExt(\n        [in] REFIID riid,\n        [out] void **ppv);\n\n    HRESULT GetViewWindow(\n        [out] HWND *phwndView);\n\n    HRESULT GetBaseBrowserData(\n        [in, out] LPCBASEBROWSERDATA *pbbd);\n\n    LPBASEBROWSERDATA PutBaseBrowserData();\n\n    HRESULT InitializeTravelLog(\n        [in] ITravelLog *ptl,\n        [in] DWORD dw);\n\n    HRESULT SetTopBrowser();\n\n    HRESULT Offline(\n        [in] int iCmd);\n\n    HRESULT AllowViewResize(\n        [in] BOOL f);\n\n    HRESULT SetActivateState(\n        [in] UINT u);\n\n    HRESULT UpdateSecureLockIcon(\n        [in] int eSecureLock);\n\n    HRESULT InitializeDownloadManager();\n\n    HRESULT InitializeTransitionSite();\n\n    HRESULT _Initialize(\n        [in] HWND hwnd,\n        [in] IUnknown *pauto);\n\n    HRESULT _CancelPendingNavigationAsync();\n\n    HRESULT _CancelPendingView();\n\n    HRESULT _MaySaveChanges();\n\n    HRESULT _PauseOrResumeView(\n        [in] BOOL fPaused);\n\n    HRESULT _DisableModeless();\n\n    HRESULT _NavigateToPidl(\n        [in] LPCITEMIDLIST pidl,\n        [in] DWORD grfHLNF,\n        [in] DWORD dwFlags);\n\n    HRESULT _TryShell2Rename(\n        [in] IShellView *psv,\n        [in] LPCITEMIDLIST pidlNew);\n\n    HRESULT _SwitchActivationNow();\n\n    HRESULT _ExecChildren(\n        [in] IUnknown *punkBar,\n        [in] BOOL fBroadcast,\n        [in] const GUID *pguidCmdGroup,\n        [in] DWORD nCmdID,\n        [in] DWORD nCmdexecopt,\n        [in] VARIANTARG *pvarargIn,\n        [in, out] VARIANTARG *pvarargOut);\n\n    HRESULT _SendChildren(\n        [in] HWND hwndBar,\n        [in] BOOL fBroadcast,\n        [in] UINT uMsg,\n        [in] WPARAM wParam,\n        [in] LPARAM lParam);\n\n    HRESULT GetFolderSetData(\n        [in, out] struct tagFolderSetData *pfsd);\n\n    HRESULT _OnFocusChange(\n        [in] UINT itb);\n\n    HRESULT v_ShowHideChildWindows(\n        [in] BOOL fChildOnly);\n\n    UINT _get_itbLastFocus();\n\n    HRESULT _put_itbLastFocus(\n        [in] UINT itbLastFocus);\n\n    HRESULT _UIActivateView(\n        [in] UINT uState);\n\n    HRESULT _GetViewBorderRect(\n        [in, out] RECT* prc);\n\n    HRESULT _UpdateViewRectSize();\n\n    HRESULT _ResizeNextBorder(\n        [in] UINT itb);\n\n    HRESULT _ResizeView();\n\n    HRESULT _GetEffectiveClientArea(\n        [in, out] LPRECT lprectBorder,\n        [in] HMONITOR hmon);\n\n    IStream* v_GetViewStream(\n        [in] LPCITEMIDLIST pidl,\n        [in] DWORD grfMode,\n        [in] LPCWSTR pwszName);\n\n    LRESULT ForwardViewMsg(\n        [in] UINT uMsg,\n        [in] WPARAM wParam,\n        [in] LPARAM lParam);\n\n    HRESULT SetAcceleratorMenu(\n        [in] HACCEL hacc);\n\n    int _GetToolbarCount();\n\n    LPTOOLBARITEM _GetToolbarItem(\n        [in] int itb);\n\n    HRESULT _SaveToolbars(\n        [in] IStream *pstm);\n\n    HRESULT _LoadToolbars(\n        [in] IStream *pstm);\n\n    HRESULT _CloseAndReleaseToolbars(\n        [in] BOOL fClose);\n\n    HRESULT v_MayGetNextToolbarFocus(\n        [in] LPMSG lpMsg,\n        [in] UINT itbNext,\n        [in] int citb,\n        [out] LPTOOLBARITEM *pptbi,\n        [out] HWND *phwnd);\n\n    HRESULT _ResizeNextBorderHelper(\n        [in] UINT itb,\n        [in] BOOL bUseHmonitor);\n\n    UINT _FindTBar(\n        [in] IUnknown *punkSrc);\n\n    HRESULT _SetFocus(\n        [in] LPTOOLBARITEM ptbi,\n        [in] HWND hwnd,\n        [in] LPMSG lpMsg);\n\n    HRESULT v_MayTranslateAccelerator(\n        [in] MSG* pmsg);\n\n    HRESULT _GetBorderDWHelper(\n        [in] IUnknown *punkSrc,\n        [in] LPRECT lprectBorder,\n        [in] BOOL bUseHmonitor);\n\n    HRESULT v_CheckZoneCrossing(\n        [in, out] LPCITEMIDLIST pidl);\n}\n"
  },
  {
    "path": "wine/windows/shdispid.h",
    "content": "/*\n * DispIds for Shell Interfaces\n *\n * Copyright (C) 2008 Robert Shearman\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _SHDISPID_H_\n#define _SHDISPID_H_\n\n#define DISPID_SELECTIONCHANGED     200\n#define DISPID_FILELISTENUMDONE     201\n#define DISPID_VERBINVOKED          202\n#define DISPID_DEFAULTVERBINVOKED   203\n#define DISPID_BEGINDRAG            204\n\n#endif /* defined _SHDISPID_H_ */\n"
  },
  {
    "path": "wine/windows/shellapi.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_SHELLAPI_H\n#define __WINE_SHELLAPI_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n#ifndef _WIN64\n#include <pshpack1.h>\n#endif\n\nDECLARE_HANDLE(HDROP);\n\n/******************************************\n * DragObject\n */\n\ntypedef struct _DRAGINFOA\n{\tUINT uSize;\n\tPOINT pt;\n\tBOOL fNC;\n\tLPSTR   lpFileList;\n\tDWORD grfKeyState;\n} DRAGINFOA, *LPDRAGINFOA;\n\ntypedef struct _DRAGINFOW\n{\tUINT uSize;\n\tPOINT pt;\n\tBOOL fNC;\n\tLPWSTR  lpFileList;\n\tDWORD grfKeyState;\n} DRAGINFOW, *LPDRAGINFOW;\n\nDECL_WINELIB_TYPE_AW(DRAGINFO)\nDECL_WINELIB_TYPE_AW(LPDRAGINFO)\n\nvoid\tWINAPI DragAcceptFiles(HWND hWnd, BOOL b);\nUINT\tWINAPI DragQueryFileA(HDROP hDrop, UINT lFile, LPSTR lpszFile, UINT lLength);\nUINT\tWINAPI DragQueryFileW(HDROP hDrop, UINT lFile, LPWSTR lpszFile, UINT lLength);\n#define        DragQueryFile WINELIB_NAME_AW(DragQueryFile)\nvoid\tWINAPI DragFinish(HDROP h);\nBOOL\tWINAPI DragQueryPoint(HDROP hDrop, POINT *p);\n\n\n\n/******************************************\n * Application Bar\n */\n#define ABM_NEW\t\t\t0x00000000\n#define ABM_REMOVE\t\t0x00000001\n#define ABM_QUERYPOS\t\t0x00000002\n#define ABM_SETPOS\t\t0x00000003\n#define ABM_GETSTATE\t\t0x00000004\n#define ABM_GETTASKBARPOS\t0x00000005\n#define ABM_ACTIVATE\t\t0x00000006\n#define ABM_GETAUTOHIDEBAR\t0x00000007\n#define ABM_SETAUTOHIDEBAR\t0x00000008\n#define ABM_WINDOWPOSCHANGED\t0x00000009\n\n#define ABN_STATECHANGE\t\t0x00000000\n#define ABN_POSCHANGED\t\t0x00000001\n#define ABN_FULLSCREENAPP\t0x00000002\n#define ABN_WINDOWARRANGE\t0x00000003\n\n#define ABS_AUTOHIDE\t\t0x00000001\n#define ABS_ALWAYSONTOP\t\t0x00000002\n\n#define ABE_LEFT\t\t0\n#define ABE_TOP\t\t\t1\n#define ABE_RIGHT\t\t2\n#define ABE_BOTTOM\t\t3\n\ntypedef struct _AppBarData\n{\tDWORD\tcbSize;\n\tHWND\thWnd;\n\tUINT\tuCallbackMessage;\n\tUINT\tuEdge;\n\tRECT\trc;\n\tLPARAM\tlParam;\n} APPBARDATA, *PAPPBARDATA;\n\nUINT_PTR WINAPI SHAppBarMessage(DWORD,PAPPBARDATA);\n\n/******************************************\n * SHGetFileInfo\n */\n\n#define SHGFI_LARGEICON         0x000000000     /* get large icon */\n#define SHGFI_SMALLICON         0x000000001     /* get small icon */\n#define SHGFI_OPENICON          0x000000002     /* get open icon */\n#define SHGFI_SHELLICONSIZE     0x000000004     /* get shell size icon */\n#define SHGFI_PIDL              0x000000008     /* pszPath is a pidl */\n#define SHGFI_USEFILEATTRIBUTES 0x000000010     /* use passed dwFileAttribute */\n#define SHGFI_ADDOVERLAYS       0x000000020\n#define SHGFI_OVERLAYINDEX      0x000000040\n#define SHGFI_ICON              0x000000100     /* get icon */\n#define SHGFI_DISPLAYNAME       0x000000200     /* get display name */\n#define SHGFI_TYPENAME          0x000000400     /* get type name */\n#define SHGFI_ATTRIBUTES        0x000000800     /* get attributes */\n#define SHGFI_ICONLOCATION      0x000001000     /* get icon location */\n#define SHGFI_EXETYPE           0x000002000     /* return exe type */\n#define SHGFI_SYSICONINDEX      0x000004000     /* get system icon index */\n#define SHGFI_LINKOVERLAY       0x000008000     /* put a link overlay on icon */\n#define SHGFI_SELECTED          0x000010000     /* show icon in selected state */\n#define SHGFI_ATTR_SPECIFIED    0x000020000     /* get only specified attributes */\n\ntypedef struct tagSHFILEINFOA\n{\tHICON\thIcon;\t\t\t/* icon */\n\tint\tiIcon;\t\t\t/* icon index */\n\tDWORD\tdwAttributes;\t\t/* SFGAO_ flags */\n\tCHAR\tszDisplayName[MAX_PATH];/* display name (or path) */\n\tCHAR\tszTypeName[80];\t\t/* type name */\n} SHFILEINFOA;\n\ntypedef struct tagSHFILEINFOW\n{\tHICON\thIcon;\t\t\t/* icon */\n\tint\tiIcon;\t\t\t/* icon index */\n\tDWORD\tdwAttributes;\t\t/* SFGAO_ flags */\n\tWCHAR\tszDisplayName[MAX_PATH];/* display name (or path) */\n\tWCHAR\tszTypeName[80];\t\t/* type name */\n} SHFILEINFOW;\n\nDECL_WINELIB_TYPE_AW(SHFILEINFO)\n\nDWORD_PTR\tWINAPI SHGetFileInfoA(LPCSTR,DWORD,SHFILEINFOA*,UINT,UINT);\nDWORD_PTR\tWINAPI SHGetFileInfoW(LPCWSTR,DWORD,SHFILEINFOW*,UINT,UINT);\n#define  SHGetFileInfo WINELIB_NAME_AW(SHGetFileInfo)\n\n/******************************************\n * SHGetImageList\n */\n\nHRESULT WINAPI SHGetImageList(INT, REFIID, void **);\n\n#define SHIL_LARGE        0x0\n#define SHIL_SMALL        0x1\n#define SHIL_EXTRALARGE   0x2\n#define SHIL_SYSSMALL     0x3\n#define SHIL_JUMBO        0x4\n#define SHIL_LAST         SHIL_JUMBO\n\n/******************************************\n * SHSetFileInfo\n */\n\n/******************************************\n* SHFileOperation\n*/\n#define FO_MOVE           0x0001\n#define FO_COPY           0x0002\n#define FO_DELETE         0x0003\n#define FO_RENAME         0x0004\n\n#define FOF_MULTIDESTFILES         0x0001\n#define FOF_CONFIRMMOUSE           0x0002\n#define FOF_SILENT                 0x0004\n#define FOF_RENAMEONCOLLISION      0x0008\n#define FOF_NOCONFIRMATION         0x0010\n#define FOF_WANTMAPPINGHANDLE      0x0020\n#define FOF_ALLOWUNDO              0x0040\n#define FOF_FILESONLY              0x0080\n#define FOF_SIMPLEPROGRESS         0x0100\n#define FOF_NOCONFIRMMKDIR         0x0200\n#define FOF_NOERRORUI              0x0400\n#define FOF_NOCOPYSECURITYATTRIBS  0x0800\n#define FOF_NORECURSION            0x1000  /* don't do recursion into directories */\n#define FOF_NO_CONNECTED_ELEMENTS  0x2000  /* don't do connected files */\n#define FOF_WANTNUKEWARNING        0x4000  /* during delete operation, warn if delete instead\n                                              of recycling (even if FOF_NOCONFIRMATION) */\n#define FOF_NORECURSEREPARSE       0x8000  /* don't do recursion into reparse points */\n#define FOF_NO_UI                  (FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR)\n\ntypedef WORD FILEOP_FLAGS;\n\n#define PO_DELETE       0x0013\n#define PO_RENAME       0x0014\n#define PO_PORTCHANGE   0x0020\n#define PO_REN_PORT     (PO_RENAME | PO_PORTCHANGE)\n\ntypedef WORD PRINTEROP_FLAGS;\n\ntypedef struct _SHFILEOPSTRUCTA\n{ HWND          hwnd;\n  UINT          wFunc;\n  LPCSTR          pFrom;\n  LPCSTR          pTo;\n  FILEOP_FLAGS    fFlags;\n  BOOL          fAnyOperationsAborted;\n  LPVOID          hNameMappings;\n  LPCSTR          lpszProgressTitle;\n} SHFILEOPSTRUCTA, *LPSHFILEOPSTRUCTA;\n\ntypedef struct _SHFILEOPSTRUCTW\n{ HWND          hwnd;\n  UINT          wFunc;\n  LPCWSTR         pFrom;\n  LPCWSTR         pTo;\n  FILEOP_FLAGS    fFlags;\n  BOOL          fAnyOperationsAborted;\n  LPVOID          hNameMappings;\n  LPCWSTR         lpszProgressTitle;\n} SHFILEOPSTRUCTW, *LPSHFILEOPSTRUCTW;\n\n#define  SHFILEOPSTRUCT WINELIB_NAME_AW(SHFILEOPSTRUCT)\n#define  LPSHFILEOPSTRUCT WINELIB_NAME_AW(LPSHFILEOPSTRUCT)\n\nint\tWINAPI SHFileOperationA (LPSHFILEOPSTRUCTA lpFileOp);\nint\tWINAPI SHFileOperationW (LPSHFILEOPSTRUCTW lpFileOp);\n#define  SHFileOperation WINELIB_NAME_AW(SHFileOperation)\n\ntypedef struct _SHNAMEMAPPINGA\n{\n  LPSTR    pszOldPath;\n  LPSTR    pszNewPath;\n  int      cchOldPath;\n  int      cchNewPath;\n} SHNAMEMAPPINGA, *LPSHNAMEMAPPINGA;\n\ntypedef struct _SHNAMEMAPPINGW\n{\n  LPWSTR   pszOldPath;\n  LPWSTR   pszNewPath;\n  int      cchOldPath;\n  int      cchNewPath;\n} SHNAMEMAPPINGW, *LPSHNAMEMAPPINGW;\n\nDECL_WINELIB_TYPE_AW(SHNAMEMAPPING)\nDECL_WINELIB_TYPE_AW(LPSHNAMEMAPPING)\n\nvoid WINAPI SHFreeNameMappings(HANDLE hNameMappings);\n\n/******************************************\n * ShellExecute\n */\n\nHINSTANCE\tWINAPI ShellExecuteA(HWND,LPCSTR,LPCSTR,LPCSTR,LPCSTR,INT);\nHINSTANCE\tWINAPI ShellExecuteW(HWND,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,INT);\n#define     ShellExecute WINELIB_NAME_AW(ShellExecute)\n\n#define SE_ERR_FNF              2       /* file not found */\n#define SE_ERR_PNF              3       /* path not found */\n#define SE_ERR_ACCESSDENIED     5       /* access denied */\n#define SE_ERR_OOM              8       /* out of memory */\n#define SE_ERR_DLLNOTFOUND      32\n#define SE_ERR_SHARE                    26\n#define SE_ERR_ASSOCINCOMPLETE          27\n#define SE_ERR_DDETIMEOUT               28\n#define SE_ERR_DDEFAIL                  29\n#define SE_ERR_DDEBUSY                  30\n#define SE_ERR_NOASSOC                  31\n\n#define SEE_MASK_DEFAULT          0x00000000\n#define SEE_MASK_CLASSNAME        0x00000001\n#define SEE_MASK_CLASSKEY         0x00000003\n#define SEE_MASK_IDLIST           0x00000004\n#define SEE_MASK_INVOKEIDLIST     0x0000000c\n#define SEE_MASK_ICON             0x00000010\n#define SEE_MASK_HOTKEY           0x00000020\n#define SEE_MASK_NOCLOSEPROCESS   0x00000040\n#define SEE_MASK_CONNECTNETDRV    0x00000080\n#define SEE_MASK_NOASYNC          0x00000100\n#define SEE_MASK_FLAG_DDEWAIT     SEE_MASK_NOASYNC\n#define SEE_MASK_DOENVSUBST       0x00000200\n#define SEE_MASK_FLAG_NO_UI       0x00000400\n#define SEE_MASK_UNICODE          0x00004000\n#define SEE_MASK_NO_CONSOLE       0x00008000\n#define SEE_MASK_ASYNCOK          0x00100000\n#define SEE_MASK_HMONITOR         0x00200000\n#define SEE_MASK_NOZONECHECKS     0x00800000\n#define SEE_MASK_NOQUERYCLASSSTORE 0x01000000\n#define SEE_MASK_WAITFORINPUTIDLE 0x02000000\n#define SEE_MASK_FLAG_LOG_USAGE   0x04000000\n\ntypedef struct _SHELLEXECUTEINFOA\n{       DWORD cbSize;\n        ULONG fMask;\n        HWND hwnd;\n        LPCSTR   lpVerb;\n        LPCSTR   lpFile;\n        LPCSTR   lpParameters;\n        LPCSTR   lpDirectory;\n       INT nShow;\n        HINSTANCE hInstApp;\n        /* Optional fields */\n        LPVOID lpIDList;\n        LPCSTR   lpClass;\n        HKEY hkeyClass;\n        DWORD dwHotKey;\n        union\n        { HANDLE hIcon;\n          HANDLE hMonitor;\n        } DUMMYUNIONNAME;\n        HANDLE hProcess;\n} SHELLEXECUTEINFOA, *LPSHELLEXECUTEINFOA;\n\ntypedef struct _SHELLEXECUTEINFOW\n{       DWORD cbSize;\n        ULONG fMask;\n        HWND hwnd;\n        LPCWSTR  lpVerb;\n        LPCWSTR  lpFile;\n        LPCWSTR  lpParameters;\n        LPCWSTR  lpDirectory;\n       INT nShow;\n        HINSTANCE hInstApp;\n        /* Optional fields*/\n        LPVOID lpIDList;\n        LPCWSTR  lpClass;\n        HKEY hkeyClass;\n        DWORD dwHotKey;\n        union\n        { HANDLE hIcon;\n          HANDLE hMonitor;\n        } DUMMYUNIONNAME;\n        HANDLE hProcess;\n} SHELLEXECUTEINFOW, *LPSHELLEXECUTEINFOW;\n\n#define SHELLEXECUTEINFO   WINELIB_NAME_AW(SHELLEXECUTEINFO)\n#define LPSHELLEXECUTEINFO WINELIB_NAME_AW(LPSHELLEXECUTEINFO)\n\nBOOL WINAPI ShellExecuteExA(LPSHELLEXECUTEINFOA lpExecInfo);\nBOOL WINAPI ShellExecuteExW(LPSHELLEXECUTEINFOW lpExecInfo);\n#define ShellExecuteEx  WINELIB_NAME_AW(ShellExecuteEx)\n\nvoid WINAPI WinExecErrorA(HWND hwnd,INT error, LPCSTR lpstrFileName, LPCSTR lpstrTitle);\nvoid WINAPI WinExecErrorW(HWND hwnd,INT error, LPCWSTR lpstrFileName, LPCWSTR lpstrTitle);\n#define WinExecError  WINELIB_NAME_AW(WinExecError)\n\n/******************************************\n * Tray Notification\n */\n/* notifyicondata.uFlags values*/\n#define NIF_MESSAGE             0x00000001\n#define NIF_ICON                0x00000002\n#define NIF_TIP                 0x00000004\n#define NIF_STATE               0x00000008\n#define NIF_INFO                0x00000010\n#define NIF_GUID                0x00000020\n#define NIF_REALTIME            0x00000040\n#define NIF_SHOWTIP             0x00000080\n\n/* notifyicondata.dwState values */\n#define NIS_HIDDEN              0x00000001\n#define NIS_SHAREDICON          0x00000002\n\n/* notifyicondata.dwInfoFlags values */\n#define NIIF_NONE               0x00000000\n#define NIIF_INFO               0x00000001\n#define NIIF_WARNING            0x00000002\n#define NIIF_ERROR              0x00000003\n#define NIIF_USER               0x00000004\n#define NIIF_ICONMASK           0x0000000f\n#define NIIF_NOSOUND            0x00000010\n#define NIIF_LARGEICON          0x00000020\n\n/* dwMessage values */\n#define NIM_ADD                 0x00000000\n#define NIM_MODIFY              0x00000001\n#define NIM_DELETE              0x00000002\n#define NIM_SETFOCUS            0x00000003\n#define NIM_SETVERSION          0x00000004\n\n#define NOTIFY_VERSION   3     /* supported by Windows 2000 and later */\n#define NOTIFY_VERSION_4 4     /* supported by Windows Vista */\n\n/* callback message lParam values */\n#define NIN_SELECT              (WM_USER+0)\n#define NINF_KEY                1\n#define NIN_KEYSELECT           (NIN_SELECT|NINF_KEY)  /* WM_USER+1 */\n#define NIN_BALOONSHOW          (WM_USER+2)\n#define NIN_BALOONHIDE          (WM_USER+3)\n#define NIN_BALOONTIMEOUT       (WM_USER+4)\n#define NIN_BALOONCLICK         (WM_USER+5)\n#define NIN_POPUPOPEN           (WM_USER+6)\n#define NIN_POPUPCLOSE          (WM_USER+7)\n\ntypedef struct _NOTIFYICONDATAA\n{\tDWORD cbSize;\n\tHWND hWnd;\n\tUINT uID;\n\tUINT uFlags;\n\tUINT uCallbackMessage;\n\tHICON hIcon;\n\tCHAR szTip[128];\n\tDWORD dwState;\n\tDWORD dwStateMask;\n\tCHAR szInfo[256];\n\tunion {\n\t    UINT uTimeout;\n\t    UINT uVersion;\n\t} DUMMYUNIONNAME;\n\tCHAR szInfoTitle[64];\n\tDWORD dwInfoFlags;\n\tGUID guidItem;\n\tHICON hBalloonIcon;\n} NOTIFYICONDATAA, *PNOTIFYICONDATAA;\n\ntypedef struct _NOTIFYICONDATAW\n{\tDWORD cbSize;\n\tHWND hWnd;\n\tUINT uID;\n\tUINT uFlags;\n\tUINT uCallbackMessage;\n\tHICON hIcon;\n\tWCHAR szTip[128];\n\tDWORD dwState;\n\tDWORD dwStateMask;\n\tWCHAR szInfo[256];\n\tunion {\n\t    UINT uTimeout;\n\t    UINT uVersion;\n\t} DUMMYUNIONNAME;\n\tWCHAR szInfoTitle[64];\n\tDWORD dwInfoFlags;\n\tGUID guidItem;\n\tHICON hBalloonIcon;\n} NOTIFYICONDATAW, *PNOTIFYICONDATAW;\n\ntypedef struct _NOTIFYICONIDENTIFIER\n{\n    DWORD cbSize;\n    HWND hWnd;\n    UINT uID;\n    GUID guidItem;\n} NOTIFYICONIDENTIFIER, *PNOTIFYICONIDENTIFIER;\n\nDECL_WINELIB_TYPE_AW(NOTIFYICONDATA)\nDECL_WINELIB_TYPE_AW(PNOTIFYICONDATA)\n\nBOOL WINAPI Shell_NotifyIconA(DWORD dwMessage, PNOTIFYICONDATAA lpData);\nBOOL WINAPI Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW lpData);\n\n#define Shell_NotifyIcon WINELIB_NAME_AW(Shell_NotifyIcon)\n\nHRESULT WINAPI Shell_NotifyIconGetRect(const NOTIFYICONIDENTIFIER* identifier, RECT* iconLocation);\n\n/* pre IE 5.0 */\n#define NOTIFYICONDATAA_V1_SIZE FIELD_OFFSET(NOTIFYICONDATAA, szTip[64])\n#define NOTIFYICONDATAW_V1_SIZE FIELD_OFFSET(NOTIFYICONDATAW, szTip[64])\n\n/* pre Window XP */\n#define NOTIFYICONDATAA_V2_SIZE FIELD_OFFSET(NOTIFYICONDATAA, guidItem)\n#define NOTIFYICONDATAW_V2_SIZE FIELD_OFFSET(NOTIFYICONDATAW, guidItem)\n\n/* pre Window Vista */\n#define NOTIFYICONDATAA_V3_SIZE FIELD_OFFSET(NOTIFYICONDATAA, hBalloonIcon)\n#define NOTIFYICONDATAW_V3_SIZE FIELD_OFFSET(NOTIFYICONDATAW, hBalloonIcon)\n\n\n/******************************************\n * Links\n */\n\n#define SHGNLI_PIDL        0x01\n#define SHGNLI_PREFIXNAME  0x02\n#define SHGNLI_NOUNIQUE    0x04\n#define SHGNLI_NOLNK       0x08\n\nBOOL WINAPI SHGetNewLinkInfoA(LPCSTR,LPCSTR,LPSTR,BOOL*,UINT);\nBOOL WINAPI SHGetNewLinkInfoW(LPCWSTR,LPCWSTR,LPWSTR,BOOL*,UINT);\n#define     SHGetNewLinkInfo WINELIB_NAME_AW(SHGetNewLinkInfo)\n\n/******************************************\n * Recycle bin\n */\n\ntypedef struct _SHQUERYRBINFO\n{\n    DWORD cbSize;\n    DWORDLONG i64Size;\n    DWORDLONG i64NumItems;\n} SHQUERYRBINFO, *LPSHQUERYRBINFO;\n\nHRESULT     WINAPI SHEmptyRecycleBinA(HWND,LPCSTR,DWORD);\nHRESULT     WINAPI SHEmptyRecycleBinW(HWND,LPCWSTR,DWORD);\n#define     SHEmptyRecycleBin WINELIB_NAME_AW(SHEmptyRecycleBin)\nHRESULT     WINAPI SHQueryRecycleBinA(LPCSTR,LPSHQUERYRBINFO);\nHRESULT     WINAPI SHQueryRecycleBinW(LPCWSTR,LPSHQUERYRBINFO);\n#define     SHQueryRecycleBin WINELIB_NAME_AW(SHQueryRecycleBin)\n\n/******************************************\n * Misc\n */\n\ntypedef enum\n{\n    QUNS_NOT_PRESENT             = 1,\n    QUNS_BUSY                    = 2,\n    QUNS_RUNNING_D3D_FULL_SCREEN = 3,\n    QUNS_PRESENTATION_MODE       = 4,\n    QUNS_ACCEPTS_NOTIFICATIONS   = 5,\n    QUNS_QUIET_TIME              = 6,\n    QUNS_APP                     = 7\n} QUERY_USER_NOTIFICATION_STATE;\n\nHRESULT     WINAPI SHQueryUserNotificationState(QUERY_USER_NOTIFICATION_STATE*);\n\ntypedef enum SHSTOCKICONID\n{\n    SIID_INVALID=-1,\n    SIID_DOCNOASSOC,\n    SIID_DOCASSOC,\n    SIID_APPLICATION,\n    SIID_FOLDER,\n    SIID_FOLDEROPEN,\n    SIID_DRIVE525,\n    SIID_DRIVE35,\n    SIID_DRIVERREMOVE,\n    SIID_DRIVERFIXED,\n    SIID_DRIVERNET,\n    SIID_DRIVERNETDISABLE,\n    SIID_DRIVERCD,\n    SIID_DRIVERRAM,\n    SIID_WORLD,\n    /* Missing: 14 */\n    SIID_SERVER = 15,\n    SIID_PRINTER,\n    SIID_MYNETWORK,\n    /* Missing: 18 - 21 */\n    SIID_FIND = 22,\n    SIID_HELP,\n    /* Missing: 24 - 27 */\n    SIID_SHARE = 28,\n    SIID_LINK,\n    SIID_SLOWFILE,\n    SIID_RECYCLER,\n    SIID_RECYCLERFULL,\n    /* Missing: 33 - 39 */\n    SIID_MEDIACDAUDIO = 40,\n    /* Missing: 41 - 46 */\n    SIID_LOCK = 47,\n    /* Missing: 48 */\n    SIID_AUTOLIST = 49,\n    SIID_PRINTERNET,\n    SIID_SERVERSHARE,\n    SIID_PRINTERFAX,\n    SIID_PRINTERFAXNET,\n    SIID_PRINTERFILE,\n    SIID_STACK,\n    SIID_MEDIASVCD,\n    SIID_STUFFEDFOLDER,\n    SIID_DRIVEUNKNOWN,\n    SIID_DRIVEDVD,\n    SIID_MEDIADVD,\n    SIID_MEDIADVDRAM,\n    SIID_MEDIADVDRW,\n    SIID_MEDIADVDR,\n    SIID_MEDIADVDROM,\n    SIID_MEDIACDAUDIOPLUS,\n    SIID_MEDIACDRW,\n    SIID_MEDIACDR,\n    SIID_MEDIACDBURN,\n    SIID_MEDIABLANKCD,\n    SIID_MEDIACDROM,\n    SIID_AUDIOFILES,\n    SIID_IMAGEFILES,\n    SIID_VIDEOFILES,\n    SIID_MIXEDFILES,\n    SIID_FOLDERBACK,\n    SIID_FOLDERFRONT,\n    SIID_SHIELD,\n    SIID_WARNING,\n    SIID_INFO,\n    SIID_ERROR,\n    SIID_KEY,\n    SIID_SOFTWARE,\n    SIID_RENAME,\n    SIID_DELETE,\n    SIID_MEDIAAUDIODVD,\n    SIID_MEDIAMOVIEDVD,\n    SIID_MEDIAENHANCEDCD,\n    SIID_MEDIAENHANCEDDVD,\n    SIID_MEDIAHDDVD,\n    SIID_MEDIABLUERAY,\n    SIID_MEDIAVCD,\n    SIID_MEDIADVDPLUSR,\n    SIID_MEDIADVDPLUSRW,\n    SIID_DESKTOPPC,\n    SIID_MOBILEPC,\n    SIID_USERS,\n    SIID_MEDIASMARTMEDIA,\n    SIID_MEDIACOMPACTFLASH,\n    SIID_DEVICECELLPHONE,\n    SIID_DEVICECAMERA,\n    SIID_DEVICEVIDEOCAMERA,\n    SIID_DEVICEAUDIOPLAYER,\n    SIID_NETWORKCONNECT,\n    SIID_INTERNET,\n    SIID_ZIPFILE,\n    SIID_SETTINGS,\n    /* Missing: 107 - 131 */\n    SIID_DRIVEHDDVD = 132,\n    SIID_DRIVEBD,\n    SIID_MEDIAHDDVDROM,\n    SIID_MEDIAHDDVDR,\n    SIID_MEDIAHDDVDRAM,\n    SIID_MEDIABDROM,\n    SIID_MEDIABDR,\n    SIID_MEDIABDRE,\n    SIID_CLUSTEREDDRIVE,\n    /* Missing: 141 - 180 */\n    SIID_MAX_ICONS = 181\n}SHSTOCKICONID;\n\ntypedef struct _SHSTOCKICONINFO\n{\n    DWORD   cbSize;\n    HICON   hIcon;\n    INT     iSysImageIndex;\n    INT     iIcon;\n    WCHAR   szPath[MAX_PATH];\n} SHSTOCKICONINFO;\n\n/* flags for SHGetStockIconInfo */\n#define SHGSI_ICONLOCATION  0\n#define SHGSI_ICON          SHGFI_ICON\n#define SHGSI_SYSICONINDEX  SHGFI_SYSICONINDEX\n#define SHGSI_LINKOVERLAY   SHGFI_LINKOVERLAY\n#define SHGSI_SELECTED      SHGFI_SELECTED\n#define SHGSI_LARGEICON     SHGFI_LARGEICON\n#define SHGSI_SMALLICON     SHGFI_SMALLICON\n#define SHGSI_SHELLICONSIZE SHGFI_SHELLICONSIZE\n\nHRESULT     WINAPI SHGetStockIconInfo(SHSTOCKICONID, UINT, SHSTOCKICONINFO*);\nLPWSTR*     WINAPI CommandLineToArgvW(LPCWSTR,int*);\nHICON       WINAPI ExtractIconA(HINSTANCE,LPCSTR,UINT);\nHICON       WINAPI ExtractIconW(HINSTANCE,LPCWSTR,UINT);\n#define     ExtractIcon WINELIB_NAME_AW(ExtractIcon)\nHICON       WINAPI ExtractAssociatedIconA(HINSTANCE,LPSTR,LPWORD);\nHICON       WINAPI ExtractAssociatedIconW(HINSTANCE,LPWSTR,LPWORD);\n#define     ExtractAssociatedIcon WINELIB_NAME_AW(ExtractAssociatedIcon)\nHICON       WINAPI ExtractAssociatedIconExA(HINSTANCE,LPSTR,LPWORD,LPWORD);\nHICON       WINAPI ExtractAssociatedIconExW(HINSTANCE,LPWSTR,LPWORD,LPWORD);\n#define     ExtractAssociatedIconEx WINELIB_NAME_AW(ExtractAssociatedIconEx)\nUINT        WINAPI ExtractIconExA(LPCSTR,INT,HICON*,HICON*,UINT);\nUINT        WINAPI ExtractIconExW(LPCWSTR,INT,HICON*,HICON*,UINT);\n#define     ExtractIconEx WINELIB_NAME_AW(ExtractIconEx)\nHINSTANCE   WINAPI FindExecutableA(LPCSTR,LPCSTR,LPSTR);\nHINSTANCE   WINAPI FindExecutableW(LPCWSTR,LPCWSTR,LPWSTR);\n#define     FindExecutable WINELIB_NAME_AW(FindExecutable)\nBOOL        WINAPI ShellAboutA(HWND,LPCSTR,LPCSTR,HICON);\nBOOL        WINAPI ShellAboutW(HWND,LPCWSTR,LPCWSTR,HICON);\n#define     ShellAbout WINELIB_NAME_AW(ShellAbout)\nint         WINAPIV ShellMessageBoxA(HINSTANCE,HWND,LPCSTR,LPCSTR,UINT,...);\nint         WINAPIV ShellMessageBoxW(HINSTANCE,HWND,LPCWSTR,LPCWSTR,UINT,...);\n#define     ShellMessageBox WINELIB_NAME_AW(ShellMessageBox)\nDWORD       WINAPI DoEnvironmentSubstA(LPSTR, UINT);\nDWORD       WINAPI DoEnvironmentSubstW(LPWSTR, UINT);\n#define     DoEnvironmentSubst WINELIB_NAME_AW(DoEnvironmentSubst)\n\nHRESULT     WINAPI SHEnumerateUnreadMailAccountsA(HKEY,DWORD,LPSTR,INT);\nHRESULT     WINAPI SHEnumerateUnreadMailAccountsW(HKEY,DWORD,LPWSTR,INT);\n#define     SHEnumerateUnreadMailAccounts WINELIB_NAME_AW(SHEnumerateUnreadMailAccounts)\n\nHRESULT     WINAPI SHGetPropertyStoreForWindow(HWND,REFIID,void **);\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#ifndef _WIN64\n#include <poppack.h>\n#endif\n\n#endif /* __WINE_SHELLAPI_H */\n"
  },
  {
    "path": "wine/windows/shellscalingapi.h",
    "content": "/*\n * Copyright 2016 Sebastian Lackner\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_SHELLSCALINGAPI_H\n#define __WINE_SHELLSCALINGAPI_H\n\ntypedef enum MONITOR_DPI_TYPE\n{\n    MDT_EFFECTIVE_DPI   = 0,\n    MDT_ANGULAR_DPI     = 1,\n    MDT_RAW_DPI         = 2,\n    MDT_DEFAULT         = MDT_EFFECTIVE_DPI,\n} MONITOR_DPI_TYPE;\n\ntypedef enum PROCESS_DPI_AWARENESS\n{\n    PROCESS_DPI_UNAWARE,\n    PROCESS_SYSTEM_DPI_AWARE,\n    PROCESS_PER_MONITOR_DPI_AWARE\n} PROCESS_DPI_AWARENESS;\n\nHRESULT WINAPI GetDpiForMonitor(HMONITOR,MONITOR_DPI_TYPE,UINT*,UINT*);\nHRESULT WINAPI GetProcessDpiAwareness(HANDLE,PROCESS_DPI_AWARENESS*);\nHRESULT WINAPI SetProcessDpiAwareness(PROCESS_DPI_AWARENESS);\n\n#endif /* __WINE_SHELLSCALINGAPI_H */\n"
  },
  {
    "path": "wine/windows/shimgdata.idl",
    "content": "/*\n * Copyright 2016 Nikolay Sivov For CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\nimport \"propidl.idl\";\n\ncpp_quote(\"#ifndef _GDIPLUSPIXELFORMATS_H\")\ntypedef DWORD PixelFormat;\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#ifndef _GDIPLUSENUMS_H\")\ntypedef DWORD InterpolationMode;\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#ifndef _GDIPLUSIMAGING_H\")\ntypedef BYTE EncoderParameters;\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#ifndef _GDIPLUSHEADERS_H\")\ntypedef BYTE Image;\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#define SHIMGDEC_DEFAULT   0x0\")\ncpp_quote(\"#define SHIMGDEC_THUMBNAIL 0x1\")\ncpp_quote(\"#define SHIMGDEC_LOADFULL  0x2\")\n\n[\n    object,\n    uuid(53fb8e58-50c0-4003-b4aa-0c8df28e7f3a)\n]\ninterface IShellImageDataAbort : IUnknown\n{\n    HRESULT QueryAbort();\n}\n\n[\n    object,\n    local,\n    uuid(bfdeec12-8040-4403-a5ea-9e07dafcf530)\n]\ninterface IShellImageData : IUnknown\n{\n    HRESULT Decode([in] DWORD flags, [in] ULONG cx_desired, [in] ULONG cy_desired);\n    HRESULT Draw([in] HDC hdc, [in] RECT *dest, [in] RECT *src);\n    HRESULT NextFrame();\n    HRESULT NextPage();\n    HRESULT PrevPage();\n    HRESULT IsTransparent();\n    HRESULT IsAnimated();\n    HRESULT IsVector();\n    HRESULT IsMultipage();\n    HRESULT IsEditable();\n    HRESULT IsPrintable();\n    HRESULT IsDecoded();\n    HRESULT GetCurrentPage([out] ULONG *page);\n    HRESULT GetPageCount([out] ULONG *count);\n    HRESULT SelectPage([in] ULONG page);\n    HRESULT GetSize([out] SIZE *size);\n    HRESULT GetRawDataFormat([out] GUID *format);\n    HRESULT GetPixelFormat([out] PixelFormat *format);\n    HRESULT GetDelay([out] DWORD *delay);\n    HRESULT GetProperties([in] DWORD mode, [out] IPropertySetStorage **props);\n    HRESULT Rotate([in] DWORD angle);\n    HRESULT Scale([in] ULONG cx, [in] ULONG cy, [in] InterpolationMode mode);\n    HRESULT DiscardEdit();\n    HRESULT SetEncoderParams([in] IPropertyBag *params);\n    HRESULT DisplayName([size_is(count), in, out] LPWSTR name, UINT count);\n    HRESULT GetResolution([out] ULONG *res_x, [out] ULONG *res_y);\n    HRESULT GetEncoderParams([in] GUID *format, [out] EncoderParameters **params);\n    HRESULT RegisterAbort([in] IShellImageDataAbort *abort, [out] IShellImageDataAbort **prev);\n    HRESULT CloneFrame([out] Image **frame);\n    HRESULT ReplaceFrame([in] Image *frame);\n}\n\n[\n    object,\n    uuid(9be8ed5c-edab-4d75-90f3-bd5bdbb21c82)\n]\ninterface IShellImageDataFactory : IUnknown\n{\n    HRESULT CreateIShellImageData([out] IShellImageData **data);\n    HRESULT CreateImageFromFile([in] LPCWSTR path, [out] IShellImageData **data);\n    HRESULT CreateImageFromStream([in] IStream *stream, [out] IShellImageData **data);\n    HRESULT GetDataFormatFromPath([in] LPCWSTR path, [out] GUID *format);\n}\n"
  },
  {
    "path": "wine/windows/shldisp.idl",
    "content": "/*\n * COM interfaces for shell objects\n *\n * Copyright (C) 2004 Maxime Bellengé\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"ocidl.idl\";\n\n#include <shdispid.h>\n\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef ShellExecute\")\ncpp_quote(\"#endif\")\n\n/*****************************************************************************\n * IEnumACString interface\n */\n[\n    local,\n    object,\n    uuid(8e74c210-cf9d-4eaf-a403-7356428f0a5a),\n    pointer_default(unique)\n]\ninterface IEnumACString : IEnumString\n{\n    typedef IEnumACString *PENUMACSTRING, *LPENUMACSTRING;\n\n    typedef enum _tagACENUMOPTION\n    {\n        ACEO_NONE            = 0x00000000,\n        ACEO_MOSTRECENTFIRST = 0x00000001,\n        ACEO_FIRSTUNUSED     = 0x00010000,\n    } ACENUMOPTION;\n\n    HRESULT NextItem( [out] LPWSTR pszUrl,\n                      [in] ULONG cchMax,\n                      [out] ULONG *pulSortIndex);\n\n    HRESULT SetEnumOptions( [in] DWORD dwOptions );\n\n    HRESULT GetEnumOptions( [out] DWORD *pdwOptions );\n}\n\n/*****************************************************************************\n * IAutoComplete interface\n */\n[\n    local,\n    object,\n    uuid(00bb2762-6a77-11d0-a535-00c04fd7d062),\n    pointer_default(unique)\n]\ninterface IAutoComplete : IUnknown\n{\n    typedef IAutoComplete *LPAUTOCOMPLETE;\n\n    HRESULT Init( [in] HWND hwndEdit,\n\t\t  [in] IUnknown *punkACL,\n\t\t  [in] LPCOLESTR pwszRegKeyPath,\n\t\t  [in] LPCOLESTR pwszQuickComplete);\n    \n    HRESULT Enable( [in] BOOL fEnable );\n}\n\n/*****************************************************************************\n * IAutoComplete2 interface\n */\n[\n    local,\n    object,\n    uuid(eac04bc0-3791-11d2-bb95-0060977b464c),\n    pointer_default(unique)\n]\ninterface IAutoComplete2 : IAutoComplete\n{\n    typedef IAutoComplete2 *LPAUTOCOMPLETE2;\n\n    typedef enum _tagAUTOCOMPLETEOPTIONS\n\t{\n\t    ACO_NONE           = 0x00,      /* No AutoComplete */\n\t    ACO_AUTOSUGGEST    = 0x01,      /* enable autosuggest dropdown */\n\t    ACO_AUTOAPPEND     = 0x02,      /* enable autoappend */\n\t    ACO_SEARCH         = 0x04,      /* add search entry to completion list */\n\t    ACO_FILTERPREFIXES = 0x08,      /* don't match common prefixes (www., http://, etc) */\n\t    ACO_USETAB         = 0x10,      /* use tab to select autosuggest entries */\n\t    ACO_UPDOWNKEYDROPSLIST = 0x20,  /* up/down arrow key invokes autosuggest dropdown (if enabled) */\n\t    ACO_RTLREADING     = 0x40,      /* enable RTL reading order for dropdown */\n\t} AUTOCOMPLETEOPTIONS;\n\n    HRESULT SetOptions( [in] DWORD dwFlag);\n\n    HRESULT GetOptions( [out] DWORD *pdwFlag);\n}\n\n[\n    uuid(50a7e9b0-70ef-11d1-b75a-00a0c90564fe),\n    version(1.0)\n]\nlibrary Shell32\n{\n\nimportlib(\"stdole2.tlb\");\n\n[\n    object,\n    oleautomation,\n    uuid(9ba05970-f6a8-11cf-a442-00a0c90a8f39),\n    pointer_default(unique)\n]\ninterface IFolderViewOC : IDispatch\n{\n    HRESULT SetFolderView( [in] IDispatch *pdisp );\n}\n\n[\n    uuid(62112aa2-ebe4-11cf-a5fb-0020afe7292d)\n]\ndispinterface DShellFolderViewEvents\n{\n    properties:\n    methods:\n    [id(DISPID_SELECTIONCHANGED)]\n    void SelectionChanged();\n\n    [id(DISPID_FILELISTENUMDONE)]\n    void EnumDone();\n\n    [id(DISPID_VERBINVOKED)]\n    VARIANT_BOOL VerbInvoked();\n\n    [id(DISPID_DEFAULTVERBINVOKED)]\n    VARIANT_BOOL DefaultVerbInvoked();\n\n    [id(DISPID_BEGINDRAG)]\n    VARIANT_BOOL BeginDrag();\n}\n\n[\n    uuid(9ba05971-f6a8-11cf-a442-00a0c90a8f39),\n    hidden\n]\ncoclass ShellFolderViewOC\n{\n    [default]         interface     IFolderViewOC;\n    [default, source] dispinterface DShellFolderViewEvents;\n}\n\ninterface FolderItem;\ninterface FolderItems;\ninterface FolderItemVerb;\ninterface FolderItemVerbs;\n\n/*****************************************************************************\n * Folder interface\n */\n[\n    object,\n    uuid(bbcbde60-c3ff-11ce-8350-444553540000),\n    oleautomation,\n    dual\n]\ninterface Folder : IDispatch\n{\n    [propget, id(DISPID_VALUE)]\n    HRESULT Title( [out, retval] BSTR *pbs );\n\n    [propget]\n    HRESULT Application( [out, retval] IDispatch **ppid );\n\n    [propget]\n    HRESULT Parent( [out, retval] IDispatch **ppid );\n\n    [propget]\n    HRESULT ParentFolder( [out, retval] Folder **ppsf );\n\n    HRESULT Items( [out, retval] FolderItems **ppid );\n\n    HRESULT ParseName( [in] BSTR bName, [out, retval] FolderItem **ppid );\n\n    HRESULT NewFolder( [in] BSTR bName, [in, optional] VARIANT vOptions );\n\n    HRESULT MoveHere( [in] VARIANT vItem, [in, optional] VARIANT vOptions );\n\n    HRESULT CopyHere( [in] VARIANT vItem, [in, optional] VARIANT vOptions );\n\n    HRESULT GetDetailsOf( [in] VARIANT vItem,\n        [in] int iColumn,\n        [out, retval] BSTR *pbs );\n}\n\n/*****************************************************************************\n * Folder2 interface\n */\n[\n    object,\n    uuid(f0d2d8ef-3890-11d2-bf8b-00c04fb93661),\n    oleautomation,\n    dual\n]\ninterface Folder2 : Folder\n{\n    [propget]\n    HRESULT Self( [out, retval] FolderItem **ppfi );\n\n    [propget]\n    HRESULT OfflineStatus( [out, retval] LONG *pul );\n\n    HRESULT Synchronize();\n\n    [propget, id(1)]\n    HRESULT HaveToShowWebViewBarricade(\n        [out, retval] VARIANT_BOOL *pbHaveToShowWebViewBarricade );\n\n    HRESULT DismissedWebViewBarricade();\n}\n\n/*****************************************************************************\n * Folder3 interface\n */\n[\n    object,\n    uuid(a7ae5f64-c4d7-4d7f-9307-4d24ee54b841),\n    oleautomation,\n    dual\n]\ninterface Folder3 : Folder2\n{\n    [propget, id(2)]\n    HRESULT ShowWebViewBarricade(\n        [out, retval] VARIANT_BOOL *pbShowWebViewBarricade );\n\n    [propput, id(2)]\n    HRESULT ShowWebViewBarricade( [in] VARIANT_BOOL bShowWebViewBarricade );\n}\n\n/*****************************************************************************\n * FolderItem interface\n */\n[\n    object,\n    uuid(fac32c80-cbe4-11ce-8350-444553540000),\n    oleautomation,\n    dual\n]\ninterface FolderItem : IDispatch\n{\n    typedef FolderItem *LPFOLDERITEM;\n\n    [propget]\n    HRESULT Application( [out, retval] IDispatch **ppid );\n\n    [propget]\n    HRESULT Parent( [out, retval] IDispatch **ppid );\n\n    [propget, id(DISPID_VALUE)]\n    HRESULT Name( [out, retval] BSTR *pbs );\n\n    [propput, id(DISPID_VALUE)]\n    HRESULT Name( [in] BSTR bs );\n\n    [propget]\n    HRESULT Path( [out, retval] BSTR *pbs );\n\n    [propget]\n    HRESULT GetLink( [out, retval] IDispatch **ppid );\n\n    [propget]\n    HRESULT GetFolder( [out, retval] IDispatch **ppid );\n\n    [propget]\n    HRESULT IsLink( [out, retval] VARIANT_BOOL *pb );\n\n    [propget]\n    HRESULT IsFolder( [out, retval] VARIANT_BOOL *pb );\n\n    [propget]\n    HRESULT IsFileSystem( [out, retval] VARIANT_BOOL *pb );\n\n    [propget]\n    HRESULT IsBrowsable( [out, retval] VARIANT_BOOL *pb );\n\n    [propget]\n    HRESULT ModifyDate( [out, retval] DATE *pdt );\n\n    [propput]\n    HRESULT ModifyDate( [in] DATE dt );\n\n    [propget]\n    HRESULT Size( [out, retval] LONG *pul );\n\n    [propget]\n    HRESULT Type( [out, retval] BSTR *pbs );\n\n    HRESULT Verbs( [out, retval] FolderItemVerbs **ppfic );\n\n    HRESULT InvokeVerb( [in, optional] VARIANT vVerb );\n}\n\n[\n    object,\n    uuid(edc817aa-92b8-11d1-b075-00c04fc33aa5),\n    oleautomation,\n    dual\n]\ninterface FolderItem2 : FolderItem\n{\n    HRESULT InvokeVerbEx([in, optional] VARIANT verb, [in, optional] VARIANT args);\n    HRESULT ExtendedProperty([in] BSTR propname, [out, retval] VARIANT *ret);\n}\n\n/*****************************************************************************\n * FolderItems interface\n */\n[\n    object,\n    uuid(744129e0-cbe5-11ce-8350-444553540000),\n    oleautomation,\n    dual\n]\ninterface FolderItems : IDispatch\n{\n    [propget]\n    HRESULT Count( [out, retval] long *plCount );\n\n    [propget]\n    HRESULT Application( [out, retval] IDispatch **ppid );\n\n    [propget]\n    HRESULT Parent( [out, retval] IDispatch **ppid );\n\n    HRESULT Item( [in, optional] VARIANT index,\n        [out, retval] FolderItem **ppid );\n\n    [id(DISPID_NEWENUM)]\n    HRESULT _NewEnum( [out, retval] IUnknown **ppunk );\n}\n\n/*****************************************************************************\n * FolderItems2 interface\n */\n[\n    uuid(c94f0ad0-f363-11d2-a327-00c04f8eec7f),\n    oleautomation,\n    dual\n]\ninterface FolderItems2 : FolderItems\n{\n    HRESULT InvokeVerbEx( [in, optional] VARIANT verb,\n        [in, optional] VARIANT args );\n}\n\n/*****************************************************************************\n * FolderItems3 interface\n */\n[\n    uuid(eaa7c309-bbec-49d5-821d-64d966cb667f),\n    oleautomation,\n    dual\n]\ninterface FolderItems3 : FolderItems2\n{\n    HRESULT Filter( [in] long flags, [in] BSTR spec );\n\n    [id(0), propget]\n    HRESULT Verbs( [out, retval] FolderItemVerbs **ppfic );\n}\n\n/*****************************************************************************\n * FolderItemVerb interface\n */\n[\n    object,\n    uuid(08ec3e00-50b0-11cf-960c-0080c7f4ee85),\n    oleautomation,\n    dual\n]\ninterface FolderItemVerb : IDispatch\n{\n    [propget]\n    HRESULT Application( [out, retval] IDispatch **ppid );\n\n    [propget]\n    HRESULT Parent( [out, retval] IDispatch **ppid );\n\n    [propget, id(DISPID_VALUE)]\n    HRESULT Name( [out, retval] BSTR *pbs );\n\n    HRESULT DoIt();\n}\n\n/*****************************************************************************\n * FolderItemVerbs interface\n */\n[\n    object,\n    uuid(1f8352c0-50b0-11cf-960c-0080c7f4ee85),\n    oleautomation,\n    dual\n]\ninterface FolderItemVerbs : IDispatch\n{\n    [propget]\n    HRESULT Count( [out, retval] long *plCount );\n\n    [propget]\n    HRESULT Application( [out, retval] IDispatch **ppid );\n\n    [propget]\n    HRESULT Parent( [out, retval] IDispatch **ppid );\n\n    HRESULT Item( [in, optional] VARIANT index,\n        [out, retval] FolderItemVerb **ppid );\n\n    [id(DISPID_NEWENUM)]\n    HRESULT _NewEnum( [out, retval] IUnknown **ppunk );\n}\n\n/*****************************************************************************\n * IShellDispatch interface\n */\n[\n    uuid(d8f015c0-c278-11ce-a49e-444553540000),\n    oleautomation,\n    hidden,\n    dual\n]\ninterface IShellDispatch : IDispatch\n{\n    [propget]\n    HRESULT Application( [out, retval] IDispatch **ppid );\n\n    [propget]\n    HRESULT Parent( [out, retval] IDispatch **ppid );\n\n    HRESULT NameSpace( [in] VARIANT vDir, [out, retval] Folder **ppsdf );\n\n    HRESULT BrowseForFolder( [in] long Hwnd,\n        [in] BSTR Title,\n        [in] long Options,\n        [in, optional] VARIANT RootFolder,\n        [out, retval] Folder **ppsdf );\n\n    HRESULT Windows( [out, retval] IDispatch **ppid );\n\n    HRESULT Open( [in] VARIANT vDir );\n\n    HRESULT Explore( [in] VARIANT vDir );\n\n    HRESULT MinimizeAll();\n\n    HRESULT UndoMinimizeALL();\n\n    HRESULT FileRun();\n\n    HRESULT CascadeWindows();\n\n    HRESULT TileVertically();\n\n    HRESULT TileHorizontally();\n\n    HRESULT ShutdownWindows();\n\n    HRESULT Suspend();\n\n    HRESULT EjectPC();\n\n    HRESULT SetTime();\n\n    HRESULT TrayProperties();\n\n    HRESULT Help();\n\n    HRESULT FindFiles();\n\n    HRESULT FindComputer();\n\n    HRESULT RefreshMenu();\n\n    HRESULT ControlPanelItem( [in] BSTR szDir );\n}\n\n[\n    uuid(a4c6892c-3ba9-11d2-9dea-00c04fb16162),\n    oleautomation,\n    hidden,\n    dual\n]\ninterface IShellDispatch2 : IShellDispatch\n{\n    HRESULT IsRestricted([in] BSTR group, [in] BSTR restriction, [out, retval] long *value);\n    HRESULT ShellExecute([in] BSTR file, [in, optional] VARIANT args, [in, optional] VARIANT dir,\n        [in, optional] VARIANT op, [in, optional] VARIANT show);\n    HRESULT FindPrinter([in, optional] BSTR name, [in, optional] BSTR location, [in, optional] BSTR model);\n    HRESULT GetSystemInformation([in] BSTR name, [out, retval] VARIANT *ret);\n    HRESULT ServiceStart([in] BSTR service, [in] VARIANT persistent, [out, retval] VARIANT *ret);\n    HRESULT ServiceStop([in] BSTR service, [in] VARIANT persistent, [out, retval] VARIANT *ret);\n    HRESULT IsServiceRunning([in] BSTR service, [out, retval] VARIANT *running);\n    HRESULT CanStartStopService([in] BSTR service, [out, retval] VARIANT *ret);\n    HRESULT ShowBrowserBar([in] BSTR clsid, [in] VARIANT show, [out, retval] VARIANT *ret);\n}\n\n[\n    uuid(177160ca-bb5a-411c-841d-bd38facdeaa0),\n    oleautomation,\n    hidden,\n    dual\n]\ninterface IShellDispatch3 : IShellDispatch2\n{\n    HRESULT AddToRecent([in] VARIANT file, [in, optional] BSTR category);\n}\n\n[\n    uuid(efd84b2d-4bcf-4298-be25-eb542a59fbda),\n    oleautomation,\n    hidden,\n    dual\n]\ninterface IShellDispatch4 : IShellDispatch3\n{\n    HRESULT WindowsSecurity();\n    HRESULT ToggleDesktop();\n    HRESULT ExplorerPolicy([in] BSTR policy, [out, retval] VARIANT *value);\n    HRESULT GetSetting([in] long setting, [out,retval] VARIANT_BOOL *result);\n}\n\n[\n    uuid(866738b9-6cf2-4de8-8767-f794ebe74f4e),\n    oleautomation,\n    hidden,\n    dual\n]\ninterface IShellDispatch5 : IShellDispatch4\n{\n    HRESULT WindowSwitcher();\n}\n\n[\n    uuid(286e6f1b-7113-4355-9562-96b7e9d64c54),\n    oleautomation,\n    hidden,\n    dual,\n]\ninterface IShellDispatch6 : IShellDispatch5\n{\n    HRESULT SearchCommand(void);\n}\n\n[\n    uuid(13709620-c279-11ce-a49e-444553540000)\n]\ncoclass Shell\n{\n    [default] interface IShellDispatch6;\n}\n\n[\n    uuid(0a89a860-d7b1-11ce-8350-444553540000),\n    hidden\n]\ncoclass ShellDispatchInproc\n{\n    interface IUnknown;\n}\n\ntypedef\n[\n    uuid(ca31ea20-48d0-11cf-8350-444553540000)\n]\nenum ShellSpecialFolderConstants {\n    ssfDESKTOP          = 0x00,\n    ssfPROGRAMS         = 0x02,\n    ssfCONTROLS         = 0x03,\n    ssfPRINTERS         = 0x04,\n    ssfPERSONAL         = 0x05,\n    ssfFAVORITES        = 0x06,\n    ssfSTARTUP          = 0x07,\n    ssfRECENT           = 0x08,\n    ssfSENDTO           = 0x09,\n    ssfBITBUCKET        = 0x0a,\n    ssfSTARTMENU        = 0x0b,\n    ssfDESKTOPDIRECTORY = 0x10,\n    ssfDRIVES           = 0x11,\n    ssfNETWORK          = 0x12,\n    ssfNETHOOD          = 0x13,\n    ssfFONTS            = 0x14,\n    ssfTEMPLATES        = 0x15,\n    ssfCOMMONSTARTMENU  = 0x16,\n    ssfCOMMONPROGRAMS   = 0x17,\n    ssfCOMMONSTARTUP    = 0x18,\n    ssfCOMMONDESKTOPDIR = 0x19,\n    ssfAPPDATA          = 0x1a,\n    ssfPRINTHOOD        = 0x1b,\n    ssfLOCALAPPDATA     = 0x1c,\n    ssfALTSTARTUP       = 0x1d,\n    ssfCOMMONALTSTARTUP = 0x1e,\n    ssfCOMMONFAVORITES  = 0x1f,\n    ssfINTERNETCACHE    = 0x20,\n    ssfCOOKIES          = 0x21,\n    ssfHISTORY          = 0x22,\n    ssfCOMMONAPPDATA    = 0x23,\n    ssfWINDOWS          = 0x24,\n    ssfSYSTEM           = 0x25,\n    ssfPROGRAMFILES     = 0x26,\n    ssfMYPICTURES       = 0x27,\n    ssfPROFILE          = 0x28,\n    ssfSYSTEMx86        = 0x29,\n    ssfPROGRAMFILESx86  = 0x30\n} ShellSpecialFolderConstants;\n\n/*****************************************************************************\n * IShellFolderViewDual interface\n */\ntypedef\n[\n    uuid(742a99a0-c77e-11d0-a32c-00a0c91eedba)\n]\nenum ShellFolderViewOptions\n{\n    SFVVO_SHOWALLOBJECTS       = 0x00000001,\n    SFVVO_SHOWEXTENSIONS       = 0x00000002,\n    SFVVO_SHOWCOMPCOLOR        = 0x00000008,\n    SFVVO_SHOWSYSFILES         = 0x00000020,\n    SFVVO_WIN95CLASSIC         = 0x00000040,\n    SFVVO_DOUBLECLICKINWEBVIEW = 0x00000080,\n    SFVVO_DESKTOPHTML          = 0x00000200\n} ShellFolderViewOptions;\n\n[\n    uuid(e7a1af80-4d96-11cf-960c-0080c7f4ee85),\n    oleautomation,\n    hidden,\n    dual\n]\ninterface IShellFolderViewDual : IDispatch\n{\n    [propget]\n    HRESULT Application([out, retval] IDispatch **app);\n\n    [propget]\n    HRESULT Parent([out, retval] IDispatch **parent);\n\n    [propget]\n    HRESULT Folder([out, retval] Folder **folder);\n\n    HRESULT SelectedItems([out, retval] FolderItems **items);\n\n    [propget]\n    HRESULT FocusedItem([out, retval] FolderItem **item);\n\n    HRESULT SelectItem([in] VARIANT *item, [in] int flags);\n\n    HRESULT PopupItemMenu([in] FolderItem *item,\n                          [in, optional] VARIANT vx,\n                          [in, optional] VARIANT vy,\n                          [out, retval] BSTR *command);\n    [propget]\n    HRESULT Script([out, retval] IDispatch **script);\n\n    [propget]\n    HRESULT ViewOptions([out, retval] long *options);\n}\n\n[\n    uuid(31c147b6-0ade-4a3c-b514-ddf932ef6d17),\n    oleautomation,\n    hidden,\n    dual\n]\ninterface IShellFolderViewDual2 : IShellFolderViewDual\n{\n    [propget]\n    HRESULT CurrentViewMode([out, retval] UINT *mode);\n\n    [propput]\n    HRESULT CurrentViewMode([in] UINT mode);\n\n    HRESULT SelectItemRelative([in] int relative);\n}\n\n[\n    uuid(29ec8e6c-46d3-411f-baaa-611a6c9cac66),\n    oleautomation,\n    hidden,\n    dual\n]\ninterface IShellFolderViewDual3 : IShellFolderViewDual2\n{\n    [propget]\n    HRESULT GroupBy([out, retval] BSTR *groupby);\n\n    [propput]\n    HRESULT GroupBy([in] BSTR groupby);\n\n    [propget]\n    HRESULT FolderFlags([out, retval] DWORD *flags);\n\n    [propput]\n    HRESULT FolderFlags([in] DWORD flags);\n\n    [propget]\n    HRESULT SortColumns([out, retval] BSTR *sortcolumns);\n\n    [propput]\n    HRESULT SortColumns([in] BSTR sortcolumns);\n\n    [propput]\n    HRESULT IconSize([in] int icon_size);\n\n    [propget]\n    HRESULT IconSize([out, retval] int *icon_size);\n\n    HRESULT FilterView([in, unique] BSTR filter_text);\n}\n\n[\n    uuid(62112aa1-ebe4-11cf-a5fb-0020afe7292d)\n]\ncoclass ShellFolderView\n{\n    [default] interface IShellFolderViewDual3;\n    [default, source] dispinterface DShellFolderViewEvents;\n}\n\n} /* library Shell32 */\n\n/*****************************************************************************\n * IAsyncOperation interface\n */\n[\n    uuid(3d8b0590-f691-11d2-8ea9-006097df5bd4),\n    object,\n]\n\ninterface IAsyncOperation : IUnknown\n{\n    typedef [unique] IAsyncOperation *LPASYNCOPERATION;\n\n    HRESULT SetAsyncMode([in] BOOL fDoOpAsync);\n\n    HRESULT GetAsyncMode([out] BOOL *pfIsOpAsync);\n\n    HRESULT StartOperation([in, unique, optional] IBindCtx *pbcReserved);\n\n    HRESULT InOperation([out] BOOL *pfInAsyncOp);\n\n    HRESULT EndOperation(\n            [in] HRESULT hResult,\n            [in, unique] IBindCtx *pbcReserved,\n            [in] DWORD dwEffects);\n}\n"
  },
  {
    "path": "wine/windows/shlguid.h",
    "content": "/*\n * Copyright (C) 1999 Juergen Schmied\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_SHLGUID_H\n#define __WINE_SHLGUID_H\n\nDEFINE_OLEGUID(CLSID_ShellDesktop,      0x00021400, 0, 0);\n\nDEFINE_OLEGUID(CATID_BrowsableShellExt, 0x00021490, 0, 0);\nDEFINE_OLEGUID(CATID_BrowseInPlace,     0x00021491, 0, 0);\nDEFINE_OLEGUID(CATID_DeskBand,          0x00021492, 0, 0);\nDEFINE_OLEGUID(CATID_InfoBand,          0x00021493, 0, 0);\nDEFINE_OLEGUID(CATID_CommBand,          0x00021494, 0, 0);\n\n/* shell32 formatids */\nDEFINE_OLEGUID(FMTID_Intshcut,          0x000214A0, 0, 0);\nDEFINE_OLEGUID(FMTID_InternetSite,      0x000214A1, 0, 0);\n\n/* command group ids */\nDEFINE_OLEGUID(CGID_Explorer,           0x000214D0, 0, 0);\nDEFINE_OLEGUID(CGID_ShellDocView,       0x000214D1, 0, 0);\nDEFINE_OLEGUID(CGID_ShellServiceObject, 0x000214D2, 0, 0);\nDEFINE_OLEGUID(CGID_ExplorerBarDoc,     0x000214D3, 0, 0);\n\nDEFINE_OLEGUID(IID_IShellDetails,       0x000214EC, 0, 0);\nDEFINE_OLEGUID(IID_IDelayedRelease,     0x000214ED, 0, 0);\nDEFINE_OLEGUID(IID_IShellCopyHookA,     0x000214EF, 0, 0);\nDEFINE_OLEGUID(IID_IFileViewerA,        0x000214F0, 0, 0);\nDEFINE_OLEGUID(IID_IFileViewerSite,     0x000214F3, 0, 0);\nDEFINE_OLEGUID(IID_IPropSheetPage,      0x000214F6, 0, 0);\nDEFINE_OLEGUID(IID_IFileViewerW,        0x000214F8, 0, 0);\nDEFINE_OLEGUID(IID_IShellCopyHookW,     0x000214FC, 0, 0);\nDEFINE_OLEGUID(IID_IRemoteComputer,     0x000214FE, 0, 0);\nDEFINE_OLEGUID(IID_IQueryInfo,          0x00021500, 0, 0);\n\n\n/* avoid duplicate definitions with shobjidl.h (FIXME) */\n/* DEFINE_OLEGUID(IID_IShellPropSheetExt,  0x000214E9, 0, 0); */\n/* DEFINE_OLEGUID(IID_IExtractIconA,       0x000214EB, 0, 0); */\n/* DEFINE_OLEGUID(IID_IExtractIconW,       0x000214FA, 0, 0); */\n/* DEFINE_OLEGUID(IID_IContextMenu,        0x000214E4, 0, 0); */\n/* DEFINE_OLEGUID(IID_IContextMenu2,       0x000214F4, 0, 0); */\n/* DEFINE_OLEGUID(IID_ICommDlgBrowser,     0x000214F1, 0, 0); */\n/* DEFINE_OLEGUID(IID_IShellBrowser,       0x000214E2, 0, 0); */\n/* DEFINE_OLEGUID(IID_IShellView,          0x000214E3, 0, 0); */\n/* DEFINE_OLEGUID(IID_IShellFolder,        0x000214E6, 0, 0); */\n/* DEFINE_OLEGUID(IID_IShellExtInit,       0x000214E8, 0, 0); */\n/* DEFINE_OLEGUID(IID_IPersistFolder,      0x000214EA, 0, 0); */\n/* DEFINE_OLEGUID(IID_IShellLinkA,         0x000214EE, 0, 0); */\n/* DEFINE_OLEGUID(IID_IEnumIDList,         0x000214F2, 0, 0); */\n/* DEFINE_OLEGUID(IID_IShellLinkW,         0x000214F9, 0, 0); */\n/* DEFINE_OLEGUID(IID_IShellExecuteHookA,  0x000214F5, 0, 0); */\n/* DEFINE_OLEGUID(IID_IShellExecuteHookW,  0x000214FB, 0, 0); */\n/* DEFINE_OLEGUID(IID_INewShortcutHookA,   0x000214E1, 0, 0); */\n/* DEFINE_OLEGUID(IID_INewShortcutHookW,   0x000214F7, 0, 0); */\n\n#ifndef NO_INTSHCUT_GUIDS\n#include <isguids.h>\n#endif\n\n#ifndef NO_SHDOCVW_GUIDS\n# ifndef GUID_DEFS_ONLY\n#  include <exdisp.h>\n#  include <shldisp.h>\n# endif\n\nDEFINE_GUID(IID_IACList,   0x77A130B0,0x94FD,0x11D0,0xA5,0x44,0x00,0xC0,0x4F,0xD7,0xD0,0x62);\nDEFINE_GUID(IID_IACList2,  0x470141A0,0x5186,0x11D2,0xBB,0xB6,0x00,0x60,0x97,0x7B,0x46,0x4C);\nDEFINE_GUID(IID_IObjMgr,   0x00BB2761,0x6A77,0x11D0,0xA5,0x35,0x00,0xC0,0x4F,0xD7,0xD0,0x62);\nDEFINE_GUID(IID_CDefView,  0x4434ff80,0xef4c,0x11ce,0xae,0x65,0x08,0x00,0x2b,0x2e,0x12,0x62);\n\nDEFINE_GUID(IID_IProgressDialog, 0xEBBC7C04,0x315E,0x11D2,0xB6,0x2F,0x00,0x60,0x97,0xDF,0x5B,0xD4);\n#define SID_SProgressUI CLSID_ProgressDialog\n\nDEFINE_GUID(CLSID_CUrlHistory, 0x3c374a40, 0xbae4, 0x11cf, 0xbf, 0x7d, 0x00, 0xaa, 0x00, 0x69, 0x46, 0xee);\n#define SID_SUrlHistory       CLSID_CUrlHistory\n\nDEFINE_GUID(CLSID_CURLSearchHook, 0xcfbfae00, 0x17a6, 0x11d0, 0x99, 0xcb, 0x00, 0xc0, 0x4f, 0xd6, 0x44, 0x97);\n\nDEFINE_GUID(SID_STopLevelBrowser, 0x4C96BE40, 0x915C, 0x11CF, 0x99, 0xD3, 0x00, 0xAA, 0x00, 0x4A, 0xE8, 0x37);\n\nDEFINE_GUID(CLSID_AutoComplete,   0x00bb2763, 0x6a77, 0x11d0, 0xa5, 0x35, 0x00, 0xc0, 0x4f, 0xd7, 0xd0, 0x62);\nDEFINE_GUID(CLSID_ACLMulti,       0x00bb2765, 0x6a77, 0x11d0, 0xa5, 0x35, 0x00, 0xc0, 0x4f, 0xd7, 0xd0, 0x62);\nDEFINE_GUID(CLSID_ACListISF,      0x03c036f1, 0xa186, 0x11d0, 0x82, 0x4a, 0x00, 0xaa, 0x00, 0x5b, 0x043, 0x83);\n\n#define SID_SInternetExplorer IID_IWebBrowserApp\n#define SID_SWebBrowserApp    IID_IWebBrowserApp\n#define SID_SWebBrowserEventsService IID_IWebBrowserEventsService\n\n#endif /* NO_SHDOCVW_GUIDS */\n\nDEFINE_GUID(SID_STopWindow,       0x49e1b500, 0x4636, 0x11d3, 0x97, 0xf7, 0x00, 0xc0, 0x4f, 0x45, 0xd0, 0xb3);\nDEFINE_GUID(SID_SCommDlgBrowser,  0x80f30233, 0xb7df, 0x11d2, 0xa3, 0x3b, 0x00, 0x60, 0x97, 0xdf, 0x5b, 0xd4);\n\n#define SID_LinkSite          IID_IShellLinkW\n#define SID_SShellBrowser     IID_IShellBrowser\n#define SID_SShellDesktop     CLSID_ShellDesktop\n#define IID_IFileViewer       WINELIB_NAME_AW(IID_IFileViewer)\n#define IID_IShellLink        WINELIB_NAME_AW(IID_IShellLink)\n#define IID_IExtractIcon      WINELIB_NAME_AW(IID_IExtractIcon)\n#define IID_IShellCopyHook    WINELIB_NAME_AW(IID_IShellCopyHook)\n#define IID_IShellExecuteHook WINELIB_NAME_AW(IID_IShellExecuteHook)\n#define IID_INewShortcutHook  WINELIB_NAME_AW(IID_INewShortcutHook)\n\nDEFINE_GUID(IID_IDockingWindowSite, 0x2A342FC2, 0x7B26, 0x11D0, 0x8C, 0xA9, 0x00, 0xA0, 0xC9, 0x2D, 0xBF, 0xE8);\nDEFINE_GUID(IID_IInputObject,       0x68284FAA, 0x6A48, 0x11D0, 0x8C, 0x78, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xB4);\nDEFINE_GUID(IID_IInputObjectSite,   0xF1DB8392, 0x7331, 0x11D0, 0x8C, 0x99, 0x00, 0xA0, 0xC9, 0x2D, 0xBF, 0xE8);\n\n/****************************************************************************\n * the next IID's are the namespace elements of the pidls\n */\nDEFINE_GUID(CLSID_NetworkPlaces, 0x208D2C60, 0x3AEA, 0x1069, 0xA2, 0xD7, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D);\nDEFINE_GUID(CLSID_NetworkDomain, 0x46e06680, 0x4bf0, 0x11d1, 0x83, 0xee, 0x00, 0xa0, 0xc9, 0x0d, 0xc8, 0x49);\nDEFINE_GUID(CLSID_NetworkServer, 0xc0542a90, 0x4bf0, 0x11d1, 0x83, 0xee, 0x00, 0xa0, 0xc9, 0x0d, 0xc8, 0x49);\nDEFINE_GUID(CLSID_NetworkShare, 0x54a754c0, 0x4bf0, 0x11d1, 0x83, 0xee, 0x00, 0xa0, 0xc9, 0x0d, 0xc8, 0x49);\nDEFINE_GUID(CLSID_MyComputer, 0x20D04FE0, 0x3AEA, 0x1069, 0xA2, 0xD8, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D);\nDEFINE_GUID(CLSID_Internet, 0x871C5380, 0x42A0, 0x1069, 0xA2, 0xEA, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D);\nDEFINE_GUID(CLSID_ShellFSFolder, 0xF3364BA0, 0x65B9, 0x11CE, 0xA9, 0xBA, 0x00, 0xAA, 0x00, 0x4A, 0xE8, 0x37);\nDEFINE_GUID(CLSID_RecycleBin, 0x645FF040, 0x5081, 0x101B, 0x9F, 0x08, 0x00, 0xAA, 0x00, 0x2F, 0x95, 0x4E);\nDEFINE_GUID(CLSID_ControlPanel, 0x21EC2020, 0x3AEA, 0x1069, 0xA2, 0xDD, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D);\nDEFINE_GUID(CLSID_Printers, 0x2227A280, 0x3AEA, 0x1069, 0xA2, 0xDE, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D);\nDEFINE_GUID(CLSID_MyDocuments, 0x450d8fba, 0xad25, 0x11d0, 0x98, 0xa8, 0x08, 0x00, 0x36, 0x1b, 0x11, 0x03);\nDEFINE_GUID(CLSID_FolderShortcut, 0x0AFACED1, 0xE828, 0x11D1, 0x91, 0x87, 0xB5, 0x32, 0xF1, 0xE9, 0x57, 0x5D);\n\nDEFINE_GUID(IID_IQueryAssociations, 0xc46ca590, 0x3c3f, 0x11d2, 0xbe, 0xe6, 0x00, 0x00, 0xf8, 0x05, 0xca, 0x57);\n\nDEFINE_GUID(CLSID_QueryAssociations, 0xa07034fd, 0x6caa, 0x4954, 0xac, 0x3f, 0x97, 0xa2, 0x72, 0x16, 0xf9, 0x8a);\n\nDEFINE_GUID(CLSID_DragDropHelper, 0x4657278a, 0x411b, 0x11d2, 0x83, 0x9a, 0x00, 0xc0, 0x4f, 0xd9, 0x18, 0xd0);\n\nDEFINE_GUID(CLSID_ProgressDialog, 0xf8383852, 0xfcd3, 0x11d1, 0xa6, 0xb9, 0x0, 0x60, 0x97, 0xdf, 0x5b, 0xd4);\n\nDEFINE_GUID(CLSID_ShellItem,      0x2fe352ea, 0xfd1f, 0x11d2, 0xb1, 0xf4, 0x00, 0xc0, 0x4f, 0x8e, 0xeb, 0x3e);\nDEFINE_GUID(CLSID_NewMenu,        0xd969a300, 0xe7ff, 0x11d0, 0xa9, 0x3b, 0x0, 0xa0, 0xc9, 0xf, 0x27, 0x19);\n\n#define PSGUID_SHELLDETAILS     {0x28636aa6, 0x953d, 0x11d2, 0xb5, 0xd6, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0xd0}\nDEFINE_GUID(FMTID_ShellDetails,  0x28636aa6, 0x953d, 0x11d2, 0xb5, 0xd6, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0xd0);\n#define PID_FINDDATA        0\n#define PID_NETRESOURCE     1\n#define PID_DESCRIPTIONID   2\n#define PID_WHICHFOLDER     3\n#define PID_NETWORKLOCATION 4\n#define PID_COMPUTERNAME    5\n\n/* Note: PSGUID_STORAGE defined in ntquery.h */\nDEFINE_GUID(FMTID_Storage, 0xb725f130, 0x47ef, 0x101a, 0xa5, 0xf1, 0x02, 0x60, 0x8c, 0x9e, 0xeb, 0xac);\n/* PID_* for FMTID_Storage defined in ntquery.h*/\n\n#define PSGUID_DISPLACED    {0x9b174b33, 0x40ff, 0x11d2, 0xa2, 0x7e, 0x0, 0xc0, 0x4f, 0xc3, 0x8, 0x71}\nDEFINE_GUID(FMTID_Displaced, 0x9b174b33, 0x40ff, 0x11d2, 0xa2, 0x7e, 0x0, 0xc0, 0x4f, 0xc3, 0x8, 0x71);\n#define PID_DISPLACED_FROM 2\n#define PID_DISPLACED_DATE 3\n\nDEFINE_GUID(CLSID_CAnchorBrowsePropertyPage, 0x3050F3BB, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B);\nDEFINE_GUID(CLSID_CDocBrowsePropertyPage, 0x3050F3B4, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B);\nDEFINE_GUID(CLSID_CImageBrowsePropertyPage, 0x3050F3B3, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B);\n\nDEFINE_GUID(VID_LargeIcons, 0x0057d0e0, 0x3573, 0x11cf, 0xae, 0x69, 0x08, 0x00, 0x2b, 0x2e, 0x12, 0x62);\nDEFINE_GUID(VID_SmallIcons, 0x089000c0, 0x3573, 0x11cf, 0xae, 0x69, 0x08, 0x00, 0x2b, 0x2e, 0x12, 0x62);\nDEFINE_GUID(VID_List,       0x0e1fa5e0, 0x3573, 0x11cf, 0xae, 0x69, 0x08, 0x00, 0x2b, 0x2e, 0x12, 0x62);\nDEFINE_GUID(VID_Details,    0x137e7700, 0x3573, 0x11cf, 0xae, 0x69, 0x08, 0x00, 0x2b, 0x2e, 0x12, 0x62);\nDEFINE_GUID(VID_Thumbnails, 0x8bebb290, 0x52d0, 0x11d0, 0xb7, 0xf4, 0x00, 0xc0, 0x4f, 0xd7, 0x06, 0xec);\nDEFINE_GUID(VID_Tile,       0x65f125e5, 0x7be1, 0x4810, 0xba, 0x9d, 0xd2, 0x71, 0xc8, 0x43, 0x2c, 0xe3);\nDEFINE_GUID(VID_ThumbStrip, 0x8eefa624, 0xd1e9, 0x445b, 0x94, 0xb7, 0x74, 0xfb, 0xce, 0x2e, 0xa1, 0x1a);\n\n#include <knownfolders.h>\n\n/* FOLDERTYPEID */\nDEFINE_GUID(FOLDERTYPEID_Communications,        0x91475fe5, 0x586b, 0x4eba, 0x8d, 0x75, 0xd1, 0x74, 0x34, 0xb8, 0xcd, 0xf6);\nDEFINE_GUID(FOLDERTYPEID_CompressedFolder,      0x80213e82, 0xbcfd, 0x4c4f, 0x88, 0x17, 0xbb, 0x27, 0x60, 0x12, 0x67, 0xa9);\nDEFINE_GUID(FOLDERTYPEID_Contacts,              0xde2b70ec, 0x9bf7, 0x4a93, 0xbd, 0x3d, 0x24, 0x3f, 0x78, 0x81, 0xd4, 0x92);\nDEFINE_GUID(FOLDERTYPEID_ControlPanelCategory,  0xde4f0660, 0xfa10, 0x4b8f, 0xa4, 0x94, 0x06, 0x8b, 0x20, 0xb2, 0x23, 0x07);\nDEFINE_GUID(FOLDERTYPEID_ControlPanelClassic,   0x0c3794f3, 0xb545, 0x43aa, 0xa3, 0x29, 0xc3, 0x74, 0x30, 0xc5, 0x8d, 0x2a);\nDEFINE_GUID(FOLDERTYPEID_Documents,             0x7d49d726, 0x3c21, 0x4f05, 0x99, 0xaa, 0xfd, 0xc2, 0xc9, 0x47, 0x46, 0x56);\nDEFINE_GUID(FOLDERTYPEID_Games,                 0xb689b0d0, 0x76d3, 0x4cbb, 0x87, 0xf7, 0x58, 0x5d, 0x0e, 0x0c, 0xe0, 0x70);\nDEFINE_GUID(FOLDERTYPEID_Generic,               0x5c4f28b5, 0xf869, 0x4e84, 0x8e, 0x60, 0xf1, 0x1d, 0xb9, 0x7c, 0x5c, 0xc7);\nDEFINE_GUID(FOLDERTYPEID_GenericLibrary,        0x5f4eab9a, 0x6833, 0x4f61, 0x89, 0x9d, 0x31, 0xcf, 0x46, 0x97, 0x9d, 0x49);\nDEFINE_GUID(FOLDERTYPEID_GenericSearchResults,  0x7fde1a1e, 0x8b31, 0x49a5, 0x93, 0xb8, 0x6b, 0xe1, 0x4c, 0xfa, 0x49, 0x43);\nDEFINE_GUID(FOLDERTYPEID_Invalid,               0x57807898, 0x8c4f, 0x4462, 0xbb, 0x63, 0x71, 0x04, 0x23, 0x80, 0xb1, 0x09);\nDEFINE_GUID(FOLDERTYPEID_Music,                 0x94d6ddcc, 0x4a68, 0x4175, 0xa3, 0x74, 0xbd, 0x58, 0x4a, 0x51, 0x0b, 0x78);\nDEFINE_GUID(FOLDERTYPEID_NetworkExplorer,       0x25cc242b, 0x9a7c, 0x4f51, 0x80, 0xe0, 0x7a, 0x29, 0x28, 0xfe, 0xbe, 0x42);\nDEFINE_GUID(FOLDERTYPEID_OpenSearch,            0x8faf9629, 0x1980, 0x46ff, 0x80, 0x23, 0x9d, 0xce, 0xab, 0x9c, 0x3e, 0xe3);\nDEFINE_GUID(FOLDERTYPEID_OtherUsers,            0xb337fd00, 0x9dd5, 0x4635, 0xa6, 0xd4, 0xda, 0x33, 0xfd, 0x10, 0x2b, 0x7a);\nDEFINE_GUID(FOLDERTYPEID_Pictures,              0xb3690e58, 0xe961, 0x423b, 0xb6, 0x87, 0x38, 0x6e, 0xbf, 0xd8, 0x32, 0x39);\nDEFINE_GUID(FOLDERTYPEID_Printers,              0x2c7bbec6, 0xc844, 0x4a0a, 0x91, 0xfa, 0xce, 0xf6, 0xf5, 0x9c, 0xfd, 0xa1);\nDEFINE_GUID(FOLDERTYPEID_PublishedItems,        0x7f2f5b96, 0xff74, 0x41da, 0xaf, 0xd8, 0x1c, 0x78, 0xa5, 0xf3, 0xae, 0xa2);\nDEFINE_GUID(FOLDERTYPEID_RecordedTV,            0x5557a28f, 0x5da6, 0x4f83, 0x88, 0x09, 0xc2, 0xc9, 0x8a, 0x11, 0xa6, 0xfa);\nDEFINE_GUID(FOLDERTYPEID_RecycleBin,            0xd6d9e004, 0xcd87, 0x442b, 0x9d, 0x57, 0x5e, 0x0a, 0xeb, 0x4f, 0x6f, 0x72);\nDEFINE_GUID(FOLDERTYPEID_SavedGames,            0xd0363307, 0x28cb, 0x4106, 0x9f, 0x23, 0x29, 0x56, 0xe3, 0xe5, 0xe0, 0xe7);\nDEFINE_GUID(FOLDERTYPEID_SearchConnector,       0x982725ee, 0x6f47, 0x479e, 0xb4, 0x47, 0x81, 0x2b, 0xfa, 0x7d, 0x2e, 0x8f);\nDEFINE_GUID(FOLDERTYPEID_Searches,              0x0b0ba2e3, 0x405f, 0x415e, 0xa6, 0xee, 0xca, 0xd6, 0x25, 0x20, 0x78, 0x53);\nDEFINE_GUID(FOLDERTYPEID_SearchHome,            0x834d8a44, 0x0974, 0x4ed6, 0x86, 0x6e, 0xf2, 0x03, 0xd8, 0x0b, 0x38, 0x10);\nDEFINE_GUID(FOLDERTYPEID_SoftwareExplorer,      0xd674391b, 0x52d9, 0x4e07, 0x83, 0x4e, 0x67, 0xc9, 0x86, 0x10, 0xf3, 0x9d);\nDEFINE_GUID(FOLDERTYPEID_StartMenu,             0xef87b4cb, 0xf2ce, 0x4785, 0x86, 0x58, 0x4c, 0xa6, 0xc6, 0x3e, 0x38, 0xc6);\nDEFINE_GUID(FOLDERTYPEID_UserFiles,             0xcd0fc69b, 0x71e2, 0x46e5, 0x96, 0x90, 0x5b, 0xcd, 0x9f, 0x57, 0xaa, 0xb3);\nDEFINE_GUID(FOLDERTYPEID_UsersLibraries,        0xc4d98f09, 0x6124, 0x4fe0, 0x99, 0x42, 0x82, 0x64, 0x16, 0x08, 0x2d, 0xa9);\nDEFINE_GUID(FOLDERTYPEID_Videos,                0x5fa96407, 0x7e77, 0x483c, 0xac, 0x93, 0x69, 0x1d, 0x05, 0x85, 0x0d, 0xe8);\n\n/* IExplorerBrowser */\nDEFINE_GUID(EP_NavPane, 0xCB316B22, 0x25F7, 0x42B8, 0x8A, 0x09, 0x54, 0x0D, 0x23, 0xA4, 0x3C, 0x2F);\nDEFINE_GUID(EP_Commands,0xD9745868, 0xCA5F, 0x4A76, 0x91, 0xCD, 0xF5, 0xA1, 0x29, 0xFB, 0xB0, 0x76);\nDEFINE_GUID(EP_Commands_Organize, 0x72E81700, 0xE3EC, 0x4660, 0xBF, 0x24, 0x3C, 0x3B, 0x7B, 0x64, 0x88, 0x06);\nDEFINE_GUID(EP_Commands_View, 0x21F7C32D, 0xEEAA, 0x439B, 0xBB, 0x51, 0x37, 0xB9, 0x6F, 0xD6, 0xA9, 0x43);\nDEFINE_GUID(EP_DetailsPane, 0x43ABF98B, 0x89B8, 0x472D, 0xB9, 0xCE, 0xE6, 0x9B, 0x82, 0x29, 0xF0, 0x19);\nDEFINE_GUID(EP_PreviewPane, 0x893C63D1, 0x45C8, 0x4D17, 0xBE, 0x19, 0x22, 0x3B, 0xE7, 0x1B, 0xE3, 0x65);\nDEFINE_GUID(EP_QueryPane, 0x65BCDE4F, 0x4F07, 0x4F27, 0x83, 0xA7, 0x1A, 0xFC, 0xA4, 0xDF, 0x7D, 0xDD);\nDEFINE_GUID(EP_AdvQueryPane, 0xB4E9DB8B, 0x34BA, 0x4C39, 0xB5, 0xCC, 0x16, 0xA1, 0xBD, 0x2C, 0x41, 0x1C);\n\n/* IShellItem/IShellItemArray BindToHandler */\nDEFINE_GUID(BHID_SFObject,    0x3981E224, 0xF559, 0x11D3, 0x8E,0x3A, 0x00,0xC0,0x4F,0x68,0x37,0xD5);\nDEFINE_GUID(BHID_SFUIObject,  0x3981E225, 0xF559, 0x11D3, 0x8E,0x3A, 0x00,0xC0,0x4F,0x68,0x37,0xD5);\nDEFINE_GUID(BHID_SFViewObject,0x3981E226, 0xF559, 0x11D3, 0x8E,0x3A, 0x00,0xC0,0x4F,0x68,0x37,0xD5);\nDEFINE_GUID(BHID_Storage,     0x3981E227, 0xF559, 0x11D3, 0x8E,0x3A, 0x00,0xC0,0x4F,0x68,0x37,0xD5);\nDEFINE_GUID(BHID_Stream,      0x1CEBB3AB, 0x7C10, 0x499A, 0xA4,0x17, 0x92,0xCA,0x16,0xC4,0xCB,0x83);\nDEFINE_GUID(BHID_StorageEnum, 0x4621A4E3, 0xF0D6, 0x4773, 0x8A,0x9C, 0x46,0xE7,0x7B,0x17,0x48,0x40);\nDEFINE_GUID(BHID_Transfer,    0xD5E346A1, 0xF753, 0x4932, 0xB4,0x03, 0x45,0x74,0x80,0x0E,0x24,0x98);\nDEFINE_GUID(BHID_EnumItems,   0x94F60519, 0x2850, 0x4924, 0xAA,0x5A, 0xD1,0x5E,0x84,0x86,0x80,0x39);\nDEFINE_GUID(BHID_DataObject,  0xB8C0BD9F, 0xED24, 0x455C, 0x83,0xE6, 0xD5,0x39,0x0C,0x4F,0xE8,0xC4);\nDEFINE_GUID(BHID_Filter,      0x38D08778, 0xF557, 0x4690, 0x9E,0xBF, 0xBA,0x54,0x70,0x6A,0xD8,0xF7);\nDEFINE_GUID(BHID_LinkTargetItem,   0x3981E228, 0xF559, 0x11D3, 0x8E,0x3A, 0x00,0xC0,0x4F,0x68,0x37,0xD5);\nDEFINE_GUID(BHID_PropertyStore,    0x0384E1A4, 0x1523, 0x439C, 0xA4,0xC8, 0xAB,0x91,0x10,0x52,0xF5,0x86);\nDEFINE_GUID(BHID_ThumbnailHandler, 0x7B2E650A, 0x8E20, 0x4F4A, 0xB0,0x9E, 0x65,0x97,0xAF,0xC7,0x2F,0xB0);\nDEFINE_GUID(BHID_AssociationArray, 0xBEA9EF17, 0x82F1, 0x4F60, 0x92,0x84, 0x4F,0x8D,0xB7,0x5C,0x3B,0xE9);\nDEFINE_GUID(BHID_EnumAssocHandlers,0xB8AB0B9C, 0xC2EC, 0x4F7A, 0x91,0x8D, 0x31,0x49,0x00,0xE6,0x28,0x0A);\n\n#endif /* __WINE_SHLGUID_H */\n"
  },
  {
    "path": "wine/windows/shlobj.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_SHLOBJ_H\n#define __WINE_SHLOBJ_H\n\n#include <ole2.h>\n#include <commctrl.h>\n#include <prsht.h>\n#include <shlguid.h>\n#include <shtypes.h>\n#include <shobjidl.h>\n\n#ifdef WINE_NO_UNICODE_MACROS\n#undef GetObject\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n/* Except for specific structs, this header is byte packed */\n#include <pshpack1.h>\n\n#ifndef HPSXA_DEFINED\n#define HPSXA_DEFINED\nDECLARE_HANDLE(HPSXA);\n#endif\n\ntypedef enum\n{\n    KF_FLAG_DEFAULT                     = 0x00000000,\n    KF_FLAG_SIMPLE_IDLIST               = 0x00000100,\n    KF_FLAG_NOT_PARENT_RELATIVE         = 0x00000200,\n    KF_FLAG_DEFAULT_PATH                = 0x00000400,\n    KF_FLAG_INIT                        = 0x00000800,\n    KF_FLAG_NO_ALIAS                    = 0x00001000,\n    KF_FLAG_DONT_UNEXPAND               = 0x00002000,\n    KF_FLAG_DONT_VERIFY                 = 0x00004000,\n    KF_FLAG_CREATE                      = 0x00008000,\n    KF_FLAG_NO_APPCONTAINER_REDIRECTION = 0x00010000,\n    KF_FLAG_ALIAS_ONLY                  = 0x80000000\n} KNOWN_FOLDER_FLAG;\n\nenum\n{\n    GPFIDL_DEFAULT    = 0x00,\n    GPFIDL_ALTNAME    = 0x01,\n    GPFIDL_UNCPRINTER = 0x02\n};\n\ntypedef int GPFIDL_FLAGS;\n\nUINT         WINAPI SHAddFromPropSheetExtArray(HPSXA,LPFNADDPROPSHEETPAGE,LPARAM);\nLPVOID       WINAPI SHAlloc(ULONG) __WINE_ALLOC_SIZE(1);\nHRESULT      WINAPI SHCoCreateInstance(LPCWSTR,const CLSID*,IUnknown*,REFIID,LPVOID*);\nHPSXA        WINAPI SHCreatePropSheetExtArray(HKEY,LPCWSTR,UINT);\nHPSXA        WINAPI SHCreatePropSheetExtArrayEx(HKEY,LPCWSTR,UINT,IDataObject*);\nHRESULT      WINAPI SHCreateQueryCancelAutoPlayMoniker(IMoniker**);\nHRESULT      WINAPI SHCreateShellItem(LPCITEMIDLIST,IShellFolder*,LPCITEMIDLIST,IShellItem**);\nDWORD        WINAPI SHCLSIDFromStringA(LPCSTR,CLSID*);\nDWORD        WINAPI SHCLSIDFromStringW(LPCWSTR,CLSID*);\n#define             SHCLSIDFromString WINELIB_NAME_AW(SHCLSIDFromString)\nHRESULT      WINAPI SHCreateStdEnumFmtEtc(DWORD,const FORMATETC *,IEnumFORMATETC**);\nvoid         WINAPI SHDestroyPropSheetExtArray(HPSXA);\nBOOL         WINAPI SHFindFiles(LPCITEMIDLIST,LPCITEMIDLIST);\nDWORD        WINAPI SHFormatDrive(HWND,UINT,UINT,UINT);\nvoid         WINAPI SHFree(LPVOID);\nBOOL         WINAPI GetFileNameFromBrowse(HWND,LPWSTR,DWORD,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);\nHRESULT      WINAPI SHGetInstanceExplorer(IUnknown**);\nHRESULT      WINAPI SHGetFolderPathAndSubDirA(HWND,int,HANDLE,DWORD,LPCSTR,LPSTR);\nHRESULT      WINAPI SHGetFolderPathAndSubDirW(HWND,int,HANDLE,DWORD,LPCWSTR,LPWSTR);\n#define             SHGetFolderPathAndSubDir WINELIB_NAME_AW(SHGetFolderPathAndSubDir)\nHRESULT      WINAPI SHGetKnownFolderIDList(REFKNOWNFOLDERID,DWORD,HANDLE,PIDLIST_ABSOLUTE*);\nHRESULT      WINAPI SHGetKnownFolderItem(REFKNOWNFOLDERID,KNOWN_FOLDER_FLAG,HANDLE,REFIID,void**);\nHRESULT      WINAPI SHGetKnownFolderPath(REFKNOWNFOLDERID,DWORD,HANDLE,PWSTR*);\nBOOL         WINAPI SHGetPathFromIDListA(LPCITEMIDLIST,LPSTR);\nBOOL         WINAPI SHGetPathFromIDListW(LPCITEMIDLIST,LPWSTR);\n#define             SHGetPathFromIDList WINELIB_NAME_AW(SHGetPathFromIDList)\nBOOL         WINAPI SHGetPathFromIDListEx(PCIDLIST_ABSOLUTE,WCHAR*,DWORD,GPFIDL_FLAGS);\nINT          WINAPI SHHandleUpdateImage(LPCITEMIDLIST);\nHRESULT      WINAPI SHILCreateFromPath(LPCWSTR,LPITEMIDLIST*,DWORD*);\nHRESULT      WINAPI SHLoadOLE(LPARAM);\nHRESULT      WINAPI SHParseDisplayName(LPCWSTR,IBindCtx*,LPITEMIDLIST*,SFGAOF,SFGAOF*);\nHRESULT      WINAPI SHPathPrepareForWriteA(HWND,IUnknown*,LPCSTR,DWORD);\nHRESULT      WINAPI SHPathPrepareForWriteW(HWND,IUnknown*,LPCWSTR,DWORD);\n#define             SHPathPrepareForWrite WINELIB_NAME_AW(SHPathPrepareForWrite)\nUINT         WINAPI SHReplaceFromPropSheetExtArray(HPSXA,UINT,LPFNADDPROPSHEETPAGE,LPARAM);\nLPITEMIDLIST WINAPI SHSimpleIDListFromPath(LPCWSTR);\nBOOL         WINAPI SHRunControlPanel(LPCWSTR, HWND);\nint          WINAPI SHMapPIDLToSystemImageListIndex(IShellFolder*,LPCITEMIDLIST,int*);\nHRESULT      WINAPI SHStartNetConnectionDialog(HWND,LPCSTR,DWORD);\nVOID         WINAPI SHUpdateImageA(LPCSTR,INT,UINT,INT);\nVOID         WINAPI SHUpdateImageW(LPCWSTR,INT,UINT,INT);\n#define             SHUpdateImage WINELIB_NAME_AW(SHUpdateImage)\nint          WINAPI RestartDialog(HWND,LPCWSTR,DWORD);\nint          WINAPI RestartDialogEx(HWND,LPCWSTR,DWORD,DWORD);\nint          WINAPI DriveType(int);\nint          WINAPI RealDriveType(int, BOOL);\nint          WINAPI IsNetDrive(int);\nBOOL         WINAPI IsUserAnAdmin(void);\nUINT         WINAPI Shell_MergeMenus(HMENU,HMENU,UINT,UINT,UINT,ULONG);\nBOOL         WINAPI Shell_GetImageLists(HIMAGELIST*,HIMAGELIST*);\nBOOL         WINAPI SignalFileOpen(PCIDLIST_ABSOLUTE);\nBOOL         WINAPI ImportPrivacySettings(LPCWSTR, BOOL*, BOOL*);\n\n#define SHFMT_ERROR     __MSABI_LONG(0xFFFFFFFF)  /* Error on last format, drive may be formattable */\n#define SHFMT_CANCEL    __MSABI_LONG(0xFFFFFFFE)  /* Last format was cancelled */\n#define SHFMT_NOFORMAT  __MSABI_LONG(0xFFFFFFFD)  /* Drive is not formattable */\n\n/* SHFormatDrive flags */\n#define SHFMT_ID_DEFAULT\t0xFFFF\n#define SHFMT_OPT_FULL\t\t1\n#define SHFMT_OPT_SYSONLY\t2\n\n/* SHPathPrepareForWrite flags */\n#define SHPPFW_NONE             0x00000000\n#define SHPPFW_DIRCREATE        0x00000001\n#define SHPPFW_DEFAULT          SHPPFW_DIRCREATE\n#define SHPPFW_ASKDIRCREATE     0x00000002\n#define SHPPFW_IGNOREFILENAME   0x00000004\n#define SHPPFW_NOWRITECHECK     0x00000008\n#define SHPPFW_MEDIACHECKONLY   0x00000010\n\n/* SHObjectProperties flags */\n#define SHOP_PRINTERNAME 0x01\n#define SHOP_FILEPATH    0x02\n#define SHOP_VOLUMEGUID  0x04\n\nBOOL WINAPI SHObjectProperties(HWND,DWORD,LPCWSTR,LPCWSTR);\n\n#define PCS_FATAL           0x80000000\n#define PCS_REPLACEDCHAR    0x00000001\n#define PCS_REMOVEDCHAR     0x00000002\n#define PCS_TRUNCATED       0x00000004\n#define PCS_PATHTOOLONG     0x00000008\n\nint WINAPI PathCleanupSpec(LPCWSTR,LPWSTR);\n\n/* SHOpenWithDialog API */\n\ntypedef enum\n{\n    OAIF_ALLOW_REGISTRATION = 0x00000001,\n    OAIF_REGISTER_EXT       = 0x00000002,\n    OAIF_EXEC               = 0x00000004,\n    OAIF_FORCE_REGISTRATION = 0x00000008,\n    OAIF_HIDE_REGISTRATION  = 0x00000020,\n    OAIF_URL_PROTOCOL       = 0x00000040,\n    OAIF_FILE_IS_URI        = 0x00000080\n} OPEN_AS_INFO_FLAGS;\n\n#include <pshpack8.h>\ntypedef struct\n{\n    LPCWSTR pcszFile;\n    LPCWSTR pcszClass;\n    OPEN_AS_INFO_FLAGS oaifInFlags;\n} OPENASINFO;\n#include <poppack.h>\n\nHRESULT WINAPI SHOpenWithDialog(HWND,const OPENASINFO*);\n\n/* Shell_MergeMenus flags */\n#define MM_ADDSEPARATOR     0x00000001\n#define MM_SUBMENUSHAVEIDS  0x00000002\n#define MM_DONTREMOVESEPS   0x00000004\n\n/*****************************************************************************\n * IContextMenu interface\n */\n\n\n/* DATAOBJECT_InitShellIDList*/\n#define CFSTR_SHELLIDLISTA           \"Shell IDList Array\"   /* CF_IDLIST */\n#define CFSTR_SHELLIDLISTOFFSETA     \"Shell Object Offsets\" /* CF_OBJECTPOSITIONS */\n#define CFSTR_NETRESOURCESA          \"Net Resource\"         /* CF_NETRESOURCE */\n/* DATAOBJECT_InitFileGroupDesc */\n#define CFSTR_FILEDESCRIPTORA        \"FileGroupDescriptor\"  /* CF_FILEGROUPDESCRIPTORA */\n/* DATAOBJECT_InitFileContents*/\n#define CFSTR_FILECONTENTSA          \"FileContents\"         /* CF_FILECONTENTS */\n#define CFSTR_FILENAMEA              \"FileName\"             /* CF_FILENAMEA */\n#define CFSTR_FILENAMEMAPA           \"FileNameMap\"          /* CF_FILENAMEMAPA */\n#define CFSTR_PRINTERGROUPA          \"PrinterFriendlyName\"  /* CF_PRINTERS */\n#define CFSTR_SHELLURLA              \"UniformResourceLocator\"\n#define CFSTR_INETURLA               CFSTR_SHELLURLA\n#define CFSTR_PREFERREDDROPEFFECTA   \"Preferred DropEffect\"\n#define CFSTR_PERFORMEDDROPEFFECTA   \"Performed DropEffect\"\n#define CFSTR_PASTESUCCEEDEDA        \"Paste Succeeded\"\n#define CFSTR_INDRAGLOOPA            \"InShellDragLoop\"\n#define CFSTR_DRAGCONTEXTA           \"DragContext\"\n#define CFSTR_MOUNTEDVOLUMEA         \"MountedVolume\"\n#define CFSTR_PERSISTEDDATAOBJECTA   \"PersistedDataObject\"\n#define CFSTR_TARGETCLSIDA           \"TargetCLSID\"\n#define CFSTR_AUTOPLAY_SHELLIDLISTSA \"Autoplay Enumerated IDList Array\"\n#define CFSTR_LOGICALPERFORMEDDROPEFFECTA \"Logical Performed DropEffect\"\n\n#if defined(__GNUC__)\n# define CFSTR_SHELLIDLISTW \\\n    (const WCHAR []){ 'S','h','e','l','l',' ','I','D','L','i','s','t',' ','A','r','r','a','y',0 }\n# define CFSTR_SHELLIDLISTOFFSETW \\\n    (const WCHAR []){ 'S','h','e','l','l',' ','O','b','j','e','c','t',' ','O','f','f','s','e','t','s',0 }\n# define CFSTR_NETRESOURCESW \\\n    (const WCHAR []){ 'N','e','t',' ','R','e','s','o','u','r','c','e',0 }\n# define CFSTR_FILEDESCRIPTORW \\\n    (const WCHAR []){ 'F','i','l','e','G','r','o','u','p','D','e','s','c','r','i','p','t','o','r','W',0 }\n# define CFSTR_FILECONTENTSW \\\n    (const WCHAR []){ 'F','i','l','e','C','o','n','t','e','n','t','s',0 }\n# define CFSTR_FILENAMEW \\\n    (const WCHAR []){ 'F','i','l','e','N','a','m','e','W',0 }\n# define CFSTR_FILENAMEMAPW \\\n    (const WCHAR []){ 'F','i','l','e','N','a','m','e','M','a','p','W',0 }\n# define CFSTR_PRINTERGROUPW \\\n    (const WCHAR []){ 'P','r','i','n','t','e','r','F','r','i','e','n','d','l','y','N','a','m','e',0 }\n# define CFSTR_SHELLURLW \\\n    (const WCHAR []){ 'U','n','i','f','o','r','m','R','e','s','o','u','r','c','e','L','o','c','a','t','o','r',0 }\n# define CFSTR_INETURLW \\\n    (const WCHAR []){ 'U','n','i','f','o','r','m','R','e','s','o','u','r','c','e','L','o','c','a','t','o','r','W',0 }\n# define CFSTR_PREFERREDDROPEFFECTW \\\n    (const WCHAR []){ 'P','r','e','f','e','r','r','e','d',' ','D','r','o','p','E','f','f','e','c','t',0 }\n# define CFSTR_PERFORMEDDROPEFFECTW \\\n    (const WCHAR []){ 'P','e','r','f','o','r','m','e','d',' ','D','r','o','p','E','f','f','e','c','t',0 }\n# define CFSTR_PASTESUCCEEDEDW \\\n    (const WCHAR []){ 'P','a','s','t','e',' ','S','u','c','c','e','e','d','e','d',0 }\n# define CFSTR_INDRAGLOOPW \\\n    (const WCHAR []){ 'I','n','S','h','e','l','l','D','r','a','g','L','o','o','p',0 }\n# define CFSTR_DRAGCONTEXTW \\\n    (const WCHAR []){ 'D','r','a','g','C','o','n','t','e','x','t',0 }\n# define CFSTR_MOUNTEDVOLUMEW \\\n    (const WCHAR []){ 'M','o','u','n','t','e','d','V','o','l','u','m','e',0 }\n# define CFSTR_PERSISTEDDATAOBJECTW \\\n    (const WCHAR []){ 'P','e','r','s','i','s','t','e','d','D','a','t','a','O','b','j','e','c','t',0 }\n# define CFSTR_TARGETCLSIDW \\\n    (const WCHAR []){ 'T','a','r','g','e','t','C','L','S','I','D',0 }\n# define CFSTR_AUTOPLAY_SHELLIDLISTSW \\\n    (const WCHAR []){ 'A','u','t','o','p','l','a','y',' ','E','n','u','m','e','r','a','t','e','d',\\\n                      ' ','I','D','L','i','s','t',' ','A','r','r','a','y',0 }\n# define CFSTR_LOGICALPERFORMEDDROPEFFECTW \\\n    (const WCHAR []){ 'L','o','g','i','c','a','l',' ','P','e','r','f','o','r','m','e','d',\\\n                      ' ','D','r','o','p','E','f','f','e','c','t',0 }\n#elif defined(_MSC_VER)\n# define CFSTR_SHELLIDLISTW           L\"Shell IDList Array\"\n# define CFSTR_SHELLIDLISTOFFSETW     L\"Shell Object Offsets\"\n# define CFSTR_NETRESOURCESW          L\"Net Resource\"\n# define CFSTR_FILEDESCRIPTORW        L\"FileGroupDescriptorW\"\n# define CFSTR_FILECONTENTSW          L\"FileContents\"\n# define CFSTR_FILENAMEW              L\"FileNameW\"\n# define CFSTR_FILENAMEMAPW           L\"FileNameMapW\"\n# define CFSTR_PRINTERGROUPW          L\"PrinterFriendlyName\"\n# define CFSTR_SHELLURLW              L\"UniformResourceLocator\"\n# define CFSTR_INETURLW               L\"UniformResourceLocatorW\"\n# define CFSTR_PREFERREDDROPEFFECTW   L\"Preferred DropEffect\"\n# define CFSTR_PERFORMEDDROPEFFECTW   L\"Performed DropEffect\"\n# define CFSTR_PASTESUCCEEDEDW        L\"Paste Succeeded\"\n# define CFSTR_INDRAGLOOPW            L\"InShellDragLoop\"\n# define CFSTR_DRAGCONTEXTW           L\"DragContext\"\n# define CFSTR_MOUNTEDVOLUMEW         L\"MountedVolume\"\n# define CFSTR_PERSISTEDDATAOBJECTW   L\"PersistedDataObject\"\n# define CFSTR_TARGETCLSIDW           L\"TargetCLSID\"\n# define CFSTR_AUTOPLAY_SHELLIDLISTSW L\"Autoplay Enumerated IDList Array\"\n# define CFSTR_LOGICALPERFORMEDDROPEFFECTW L\"Logical Performed DropEffect\"\n#else\nstatic const WCHAR CFSTR_SHELLIDLISTW[] =\n    { 'S','h','e','l','l',' ','I','D','L','i','s','t',' ','A','r','r','a','y',0 };\nstatic const WCHAR CFSTR_SHELLIDLISTOFFSETW[] =\n    { 'S','h','e','l','l',' ','O','b','j','e','c','t',' ','O','f','f','s','e','t','s',0 };\nstatic const WCHAR CFSTR_NETRESOURCESW[] =\n    { 'N','e','t',' ','R','e','s','o','u','r','c','e',0 };\nstatic const WCHAR CFSTR_FILEDESCRIPTORW[] =\n    { 'F','i','l','e','G','r','o','u','p','D','e','s','c','r','i','p','t','o','r','W',0 };\nstatic const WCHAR CFSTR_FILECONTENTSW[] =\n    { 'F','i','l','e','C','o','n','t','e','n','t','s',0 };\nstatic const WCHAR CFSTR_FILENAMEW[] =\n    { 'F','i','l','e','N','a','m','e','W',0 };\nstatic const WCHAR CFSTR_FILENAMEMAPW[] =\n    { 'F','i','l','e','N','a','m','e','M','a','p','W',0 };\nstatic const WCHAR CFSTR_PRINTERGROUPW[] =\n    { 'P','r','i','n','t','e','r','F','r','i','e','n','d','l','y','N','a','m','e',0 };\nstatic const WCHAR CFSTR_SHELLURLW[] =\n    { 'U','n','i','f','o','r','m','R','e','s','o','u','r','c','e','L','o','c','a','t','o','r',0 };\nstatic const WCHAR CFSTR_INETURLW[] =\n    { 'U','n','i','f','o','r','m','R','e','s','o','u','r','c','e','L','o','c','a','t','o','r','W',0 };\nstatic const WCHAR CFSTR_PREFERREDDROPEFFECTW[] =\n    { 'P','r','e','f','e','r','r','e','d',' ','D','r','o','p','E','f','f','e','c','t',0 };\nstatic const WCHAR CFSTR_PERFORMEDDROPEFFECTW[] =\n    { 'P','e','r','f','o','r','m','e','d',' ','D','r','o','p','E','f','f','e','c','t',0 };\nstatic const WCHAR CFSTR_PASTESUCCEEDEDW[] =\n    { 'P','a','s','t','e',' ','S','u','c','c','e','e','d','e','d',0 };\nstatic const WCHAR CFSTR_INDRAGLOOPW[] =\n    { 'I','n','S','h','e','l','l','D','r','a','g','L','o','o','p',0 };\nstatic const WCHAR CFSTR_DRAGCONTEXTW[] =\n    { 'D','r','a','g','C','o','n','t','e','x','t',0 };\nstatic const WCHAR CFSTR_MOUNTEDVOLUMEW[] =\n    { 'M','o','u','n','t','e','d','V','o','l','u','m','e',0 };\nstatic const WCHAR CFSTR_PERSISTEDDATAOBJECTW[] =\n    { 'P','e','r','s','i','s','t','e','d','D','a','t','a','O','b','j','e','c','t',0 };\nstatic const WCHAR CFSTR_TARGETCLSIDW[] =\n    { 'T','a','r','g','e','t','C','L','S','I','D',0 };\nstatic const WCHAR CFSTR_AUTOPLAY_SHELLIDLISTSW[] =\n    { 'A','u','t','o','p','l','a','y',' ','E','n','u','m','e','r','a','t','e','d',\n      ' ','I','D','L','i','s','t',' ','A','r','r','a','y',0 };\nstatic const WCHAR CFSTR_LOGICALPERFORMEDDROPEFFECTW[] =\n    { 'L','o','g','i','c','a','l',' ','P','e','r','f','o','r','m','e','d',\n      ' ','D','r','o','p','E','f','f','e','c','t',0 };\n#endif\n\n#define CFSTR_SHELLIDLIST           WINELIB_NAME_AW(CFSTR_SHELLIDLIST)\n#define CFSTR_SHELLIDLISTOFFSET     WINELIB_NAME_AW(CFSTR_SHELLIDLISTOFFSET)\n#define CFSTR_NETRESOURCES          WINELIB_NAME_AW(CFSTR_NETRESOURCES)\n#define CFSTR_FILEDESCRIPTOR        WINELIB_NAME_AW(CFSTR_FILEDESCRIPTOR)\n#define CFSTR_FILECONTENTS          WINELIB_NAME_AW(CFSTR_FILECONTENTS)\n#define CFSTR_FILENAME              WINELIB_NAME_AW(CFSTR_FILENAME)\n#define CFSTR_FILENAMEMAP           WINELIB_NAME_AW(CFSTR_FILENAMEMAP)\n#define CFSTR_PRINTERGROUP          WINELIB_NAME_AW(CFSTR_PRINTERGROUP)\n#define CFSTR_SHELLURL              WINELIB_NAME_AW(CFSTR_SHELLURL)\n#define CFSTR_INETURL               WINELIB_NAME_AW(CFSTR_INETURL)\n#define CFSTR_PREFERREDDROPEFFECT   WINELIB_NAME_AW(CFSTR_PREFERREDDROPEFFECT)\n#define CFSTR_PERFORMEDDROPEFFECT   WINELIB_NAME_AW(CFSTR_PERFORMEDDROPEFFECT)\n#define CFSTR_PASTESUCCEEDED        WINELIB_NAME_AW(CFSTR_PASTESUCCEEDED)\n#define CFSTR_INDRAGLOOP            WINELIB_NAME_AW(CFSTR_INDRAGLOOP)\n#define CFSTR_DRAGCONTEXT           WINELIB_NAME_AW(CFSTR_DRAGCONTEXT)\n#define CFSTR_MOUNTEDVOLUME         WINELIB_NAME_AW(CFSTR_MOUNTEDVOLUME)\n#define CFSTR_PERSISTEDDATAOBJECT   WINELIB_NAME_AW(CFSTR_PERSISTEDDATAOBJECT)\n#define CFSTR_TARGETCLSID           WINELIB_NAME_AW(CFSTR_TARGETCLSID)\n#define CFSTR_AUTOPLAY_SHELLIDLISTS WINELIB_NAME_AW(CFSTR_AUTOPLAY_SHELLIDLISTS)\n#define CFSTR_LOGICALPERFORMEDDROPEFFECT WINELIB_NAME_AW(CFSTR_LOGICALPERFORMEDDROPEFFECT)\n\ntypedef struct\n{\tUINT cidl;\n\tUINT aoffset[1];\n} CIDA, *LPIDA;\n\n/************************************************************************\n* IShellView interface\n*/\n\n#define FCIDM_SHVIEWFIRST       0x0000\n/* undocumented */\n#define FCIDM_SHVIEW_ARRANGE    0x7001\n#define FCIDM_SHVIEW_DELETE     0x7011\n#define FCIDM_SHVIEW_PROPERTIES 0x7013\n#define FCIDM_SHVIEW_CUT        0x7018\n#define FCIDM_SHVIEW_COPY       0x7019\n#define FCIDM_SHVIEW_INSERT     0x701A\n#define FCIDM_SHVIEW_UNDO       0x701B\n#define FCIDM_SHVIEW_INSERTLINK 0x701C\n#define FCIDM_SHVIEW_SELECTALL  0x7021\n#define FCIDM_SHVIEW_INVERTSELECTION 0x7022\n\n#define FCIDM_SHVIEW_BIGICON    0x7029\n#define FCIDM_SHVIEW_SMALLICON  0x702A\n#define FCIDM_SHVIEW_LISTVIEW   0x702B\n#define FCIDM_SHVIEW_REPORTVIEW 0x702C\n/* 0x7030-0x703f are used by the shellbrowser */\n#define FCIDM_SHVIEW_AUTOARRANGE 0x7031\n#define FCIDM_SHVIEW_SNAPTOGRID 0x7032\n\n#define FCIDM_SHVIEW_HELP       0x7041\n#define FCIDM_SHVIEW_RENAME     0x7050\n#define FCIDM_SHVIEW_CREATELINK 0x7051\n#define FCIDM_SHVIEW_NEWLINK    0x7052\n#define FCIDM_SHVIEW_NEWFOLDER  0x7053\n\n#define FCIDM_SHVIEW_REFRESH    0x7100 /* FIXME */\n#define FCIDM_SHVIEW_EXPLORE    0x7101 /* FIXME */\n#define FCIDM_SHVIEW_OPEN       0x7102 /* FIXME */\n\n#define FCIDM_SHVIEWLAST        0x7fff\n#define FCIDM_BROWSERFIRST      0xA000\n/* undocumented toolbar items from stddlg's*/\n#define FCIDM_TB_UPFOLDER       0xA001\n#define FCIDM_TB_NEWFOLDER      0xA002\n#define FCIDM_TB_SMALLICON      0xA003\n#define FCIDM_TB_REPORTVIEW     0xA004\n#define FCIDM_TB_DESKTOP        0xA005  /* FIXME */\n\n#define FCIDM_BROWSERLAST       0xbf00\n#define FCIDM_GLOBALFIRST       0x8000\n#define FCIDM_GLOBALLAST        0x9fff\n\n/*\n* Global submenu IDs and separator IDs\n*/\n#define FCIDM_MENU_FILE             (FCIDM_GLOBALFIRST+0x0000)\n#define FCIDM_MENU_EDIT             (FCIDM_GLOBALFIRST+0x0040)\n#define FCIDM_MENU_VIEW             (FCIDM_GLOBALFIRST+0x0080)\n#define FCIDM_MENU_VIEW_SEP_OPTIONS (FCIDM_GLOBALFIRST+0x0081)\n#define FCIDM_MENU_TOOLS            (FCIDM_GLOBALFIRST+0x00c0)\n#define FCIDM_MENU_TOOLS_SEP_GOTO   (FCIDM_GLOBALFIRST+0x00c1)\n#define FCIDM_MENU_HELP             (FCIDM_GLOBALFIRST+0x0100)\n#define FCIDM_MENU_FIND             (FCIDM_GLOBALFIRST+0x0140)\n#define FCIDM_MENU_EXPLORE          (FCIDM_GLOBALFIRST+0x0150)\n#define FCIDM_MENU_FAVORITES        (FCIDM_GLOBALFIRST+0x0170)\n\n/* control IDs known to the view */\n#define FCIDM_TOOLBAR      (FCIDM_BROWSERFIRST + 0)\n#define FCIDM_STATUS       (FCIDM_BROWSERFIRST + 1)\n\n#define INTERFACE IShellDetails\nDECLARE_INTERFACE_(IShellDetails, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n    /*** IShellDetails methods ***/\n    STDMETHOD(GetDetailsOf)(THIS_ PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *pDetails) PURE;\n    STDMETHOD(ColumnClick)(THIS_ UINT iColumn) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IShellDetails_QueryInterface(p,a,b)    (p)->lpVtbl->QueryInterface(p,a,b)\n#define IShellDetails_AddRef(p)                (p)->lpVtbl->AddRef(p)\n#define IShellDetails_Release(p)               (p)->lpVtbl->Release(p)\n/*** IShellDetails methods ***/\n#define IShellDetails_GetDetailsOf(p,a,b,c)    (p)->lpVtbl->GetDetailsOf(p,a,b,c)\n#define IShellDetails_ColumnClick(p,a)         (p)->lpVtbl->ColumnClick(p,a)\n#endif\n\n/* IQueryInfo interface */\n#define INTERFACE IQueryInfo\nDECLARE_INTERFACE_(IQueryInfo,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IQueryInfo methods ***/\n    STDMETHOD(GetInfoTip)(THIS_ DWORD dwFlags, WCHAR** lppTips) PURE;\n    STDMETHOD(GetInfoFlags)(THIS_ DWORD* lpFlags) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IQueryInfo_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)\n#define IQueryInfo_AddRef(p)                  (p)->lpVtbl->AddRef(p)\n#define IQueryInfo_Release(p)                 (p)->lpVtbl->Release(p)\n/*** IQueryInfo methods ***/\n#define IQueryInfo_GetInfoTip(p,a,b)          (p)->lpVtbl->GetInfoTip(p,a,b)\n#define IQueryInfo_GetInfoFlags(p,a)          (p)->lpVtbl->GetInfoFlags(p,a)\n#endif\n\n/* IInputObject interface */\n#define INTERFACE IInputObject\nDECLARE_INTERFACE_(IInputObject,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IInputObject methods ***/\n    STDMETHOD(UIActivateIO)(THIS_ BOOL bActivating, LPMSG lpMsg) PURE;\n    STDMETHOD(HasFocusIO)(THIS) PURE;\n    STDMETHOD(TranslateAcceleratorIO)(THIS_ LPMSG lpMsg) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IInputObject_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)\n#define IInputObject_AddRef(p)                   (p)->lpVtbl->AddRef(p)\n#define IInputObject_Release(p)                  (p)->lpVtbl->Release(p)\n/*** IInputObject methods ***/\n#define IInputObject_UIActivateIO(p,a,b)         (p)->lpVtbl->UIActivateIO(p,a,b)\n#define IInputObject_HasFocusIO(p)               (p)->lpVtbl->HasFocusIO(p)\n#define IInputObject_TranslateAcceleratorIO(p,a) (p)->lpVtbl->TranslateAcceleratorIO(p,a)\n#endif\n\n/* IInputObjectSite interface */\n#define INTERFACE IInputObjectSite\nDECLARE_INTERFACE_(IInputObjectSite,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS) PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n    /*** IInputObjectSite methods ***/\n    STDMETHOD(OnFocusChangeIS)(THIS_ LPUNKNOWN lpUnknown, BOOL bFocus) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IInputObjectSite_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)\n#define IInputObjectSite_AddRef(p)              (p)->lpVtbl->AddRef(p)\n#define IInputObjectSite_Release(p)             (p)->lpVtbl->Release(p)\n/*** IInputObject methods ***/\n#define IInputObjectSite_OnFocusChangeIS(p,a,b) (p)->lpVtbl->OnFocusChangeIS(p,a,b)\n#endif\n\n/* IObjMgr interface */\n#define INTERFACE IObjMgr\nDECLARE_INTERFACE_(IObjMgr,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS) PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n    /*** IObjMgr methods ***/\n    STDMETHOD(Append)(THIS_ LPUNKNOWN punk) PURE;\n    STDMETHOD(Remove)(THIS_ LPUNKNOWN punk) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IObjMgr_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)\n#define IObjMgr_AddRef(p)              (p)->lpVtbl->AddRef(p)\n#define IObjMgr_Release(p)             (p)->lpVtbl->Release(p)\n/*** IObjMgr methods ***/\n#define IObjMgr_Append(p,a) (p)->lpVtbl->Append(p,a)\n#define IObjMgr_Remove(p,a) (p)->lpVtbl->Remove(p,a)\n#endif\n\n/* IACList interface */\n#define INTERFACE IACList\nDECLARE_INTERFACE_(IACList,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS) PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n    /*** IACList methods ***/\n    STDMETHOD(Expand)(THIS_ LPCOLESTR str) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IACList_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)\n#define IACList_AddRef(p)              (p)->lpVtbl->AddRef(p)\n#define IACList_Release(p)             (p)->lpVtbl->Release(p)\n/*** IACList methods ***/\n#define IACList_Expand(p,a)             (p)->lpVtbl->Expand(p,a)\n#endif\n\n/* IACList2 interface */\n#define INTERFACE IACList2\nDECLARE_INTERFACE_(IACList2,IACList)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS) PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n    /*** IACList methods ***/\n    STDMETHOD(Expand)(THIS_ LPCOLESTR str) PURE;\n    /*** IACList2 methods ***/\n    STDMETHOD(SetOptions)(THIS_ DWORD dwFlag) PURE;\n    STDMETHOD(GetOptions)(THIS_ DWORD* pdwFlag) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IACList2_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)\n#define IACList2_AddRef(p)              (p)->lpVtbl->AddRef(p)\n#define IACList2_Release(p)             (p)->lpVtbl->Release(p)\n/*** IACList2 methods ***/\n#define IACList2_GetOptions(p,a)        (p)->lpVtbl->GetOptions(p,a)\n#define IACList2_SetOptions(p,a)        (p)->lpVtbl->SetOptions(p,a)\n#endif\n\n/****************************************************************************\n * IShellFolderViewCB interface\n */\n\n#define INTERFACE IShellFolderViewCB\nDECLARE_INTERFACE_(IShellFolderViewCB,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IShellFolderViewCB methods ***/\n    STDMETHOD(MessageSFVCB)(THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IShellFolderViewCB_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)\n#define IShellFolderViewCB_AddRef(p)                  (p)->lpVtbl->AddRef(p)\n#define IShellFolderViewCB_Release(p)                 (p)->lpVtbl->Release(p)\n/*** IShellFolderViewCB methods ***/\n#define IShellFolderViewCB_MessageSFVCB(p,a,b,c)      (p)->lpVtbl->MessageSFVCB(p,a,b,c)\n#endif\n\n/****************************************************************************\n * IShellFolderView interface\n */\n\n#include <pshpack8.h>\n\ntypedef struct _ITEMSPACING\n{\n    int cxSmall;\n    int cySmall;\n    int cxLarge;\n    int cyLarge;\n} ITEMSPACING;\n\n#include <poppack.h>\n\n#define INTERFACE IShellFolderView\nDEFINE_GUID(IID_IShellFolderView,0x37a378c0,0xf82d,0x11ce,0xae,0x65,0x08,0x00,0x2b,0x2e,0x12,0x62);\nDECLARE_INTERFACE_(IShellFolderView, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n\n    /*** IShellFolderView methods ***/\n    STDMETHOD(Rearrange) (THIS_ LPARAM lParamSort) PURE;\n    STDMETHOD(GetArrangeParam) (THIS_ LPARAM *plParamSort) PURE;\n    STDMETHOD(ArrangeGrid) (THIS) PURE;\n    STDMETHOD(AutoArrange) (THIS) PURE;\n    STDMETHOD(GetAutoArrange) (THIS) PURE;\n    STDMETHOD(AddObject) (THIS_ PITEMID_CHILD pidl, UINT *puItem) PURE;\n    STDMETHOD(GetObject) (THIS_ PITEMID_CHILD *ppidl, UINT uItem) PURE;\n    STDMETHOD(RemoveObject) (THIS_ PITEMID_CHILD pidl, UINT *puItem) PURE;\n    STDMETHOD(GetObjectCount) (THIS_ UINT *puCount) PURE;\n    STDMETHOD(SetObjectCount) (THIS_ UINT uCount, UINT dwFlags) PURE;\n    STDMETHOD(UpdateObject) (THIS_ PITEMID_CHILD pidlOld, PITEMID_CHILD pidlNew, UINT *puItem) PURE;\n    STDMETHOD(RefreshObject) (THIS_ PITEMID_CHILD pidl, UINT *puItem) PURE;\n    STDMETHOD(SetRedraw) (THIS_ BOOL bRedraw) PURE;\n    STDMETHOD(GetSelectedCount) (THIS_ UINT *puSelected) PURE;\n    STDMETHOD(GetSelectedObjects) (THIS_ PCITEMID_CHILD **pppidl, UINT *puItems) PURE;\n    STDMETHOD(IsDropOnSource) (THIS_ IDropTarget *pDropTarget) PURE;\n    STDMETHOD(GetDragPoint) (THIS_ POINT *ppt) PURE;\n    STDMETHOD(GetDropPoint) (THIS_ POINT *ppt) PURE;\n    STDMETHOD(MoveIcons) (THIS_ IDataObject *pDataObject) PURE;\n    STDMETHOD(SetItemPos) (THIS_ PCUITEMID_CHILD pidl, POINT *ppt) PURE;\n    STDMETHOD(IsBkDropTarget) (THIS_ IDropTarget *pDropTarget) PURE;\n    STDMETHOD(SetClipboard) (THIS_ BOOL bMove) PURE;\n    STDMETHOD(SetPoints) (THIS_ IDataObject *pDataObject) PURE;\n    STDMETHOD(GetItemSpacing) (THIS_ ITEMSPACING *pSpacing) PURE;\n    STDMETHOD(SetCallback) (THIS_ IShellFolderViewCB* pNewCB, IShellFolderViewCB** ppOldCB) PURE;\n    STDMETHOD(Select) ( THIS_  UINT dwFlags ) PURE;\n    STDMETHOD(QuerySupport) (THIS_ UINT * pdwSupport ) PURE;\n    STDMETHOD(SetAutomationObject)(THIS_ IDispatch* pdisp) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IShellFolderView_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)\n#define IShellFolderView_AddRef(p)                  (p)->lpVtbl->AddRef(p)\n#define IShellFolderView_Release(p)                 (p)->lpVtbl->Release(p)\n/*** IShellFolderView methods ***/\n#define IShellFolderView_Rearrange(p,a)             (p)->lpVtbl->Rearrange(p,a)\n#define IShellFolderView_GetArrangeParam(p,a)       (p)->lpVtbl->GetArrangeParam(p,a)\n#define IShellFolderView_ArrangeGrid(p)             (p)->lpVtbl->ArrangeGrid(p)\n#define IShellFolderView_AutoArrange(p)             (p)->lpVtbl->AutoArrange(p)\n#define IShellFolderView_GetAutoArrange(p)          (p)->lpVtbl->GetAutoArrange(p)\n#define IShellFolderView_AddObject(p,a,b)           (p)->lpVtbl->AddObject(p,a,b)\n#define IShellFolderView_GetObject(p,a,b)           (p)->lpVtbl->GetObject(p,a,b)\n#define IShellFolderView_RemoveObject(p,a,b)        (p)->lpVtbl->RemoveObject(p,a,b)\n#define IShellFolderView_GetObjectCount(p,a)        (p)->lpVtbl->GetObjectCount(p,a)\n#define IShellFolderView_SetObjectCount(p,a,b)      (p)->lpVtbl->SetObjectCount(p,a,b)\n#define IShellFolderView_UpdateObject(p,a,b,c)      (p)->lpVtbl->UpdateObject(p,a,b,c)\n#define IShellFolderView_RefreshObject(p,a,b)       (p)->lpVtbl->RefreshObject(p,a,b)\n#define IShellFolderView_SetRedraw(p,a)             (p)->lpVtbl->SetRedraw(p,a)\n#define IShellFolderView_GetSelectedCount(p,a)      (p)->lpVtbl->GetSelectedCount(p,a)\n#define IShellFolderView_GetSelectedObjects(p,a,b)  (p)->lpVtbl->GetSelectedObjects(p,a,b)\n#define IShellFolderView_IsDropOnSource(p,a)        (p)->lpVtbl->IsDropOnSource(p,a)\n#define IShellFolderView_GetDragPoint(p,a)          (p)->lpVtbl->GetDragPoint(p,a)\n#define IShellFolderView_GetDropPoint(p,a)          (p)->lpVtbl->GetDropPoint(p,a)\n#define IShellFolderView_MoveIcons(p,a)             (p)->lpVtbl->MoveIcons(p,a)\n#define IShellFolderView_SetItemPos(p,a,b)          (p)->lpVtbl->SetItemPos(p,a,b)\n#define IShellFolderView_IsBkDropTarget(p,a)        (p)->lpVtbl->IsBkDropTarget(p,a)\n#define IShellFolderView_SetClipboard(p,a)          (p)->lpVtbl->SetClipboard(p,a)\n#define IShellFolderView_SetPoints(p,a)             (p)->lpVtbl->SetPoints(p,a)\n#define IShellFolderView_GetItemSpacing(p,a)        (p)->lpVtbl->GetItemSpacing(p,a)\n#define IShellFolderView_SetCallback(p,a,b)         (p)->lpVtbl->SetCallback(p,a,b)\n#define IShellFolderView_Select(p,a)                (p)->lpVtbl->Select(p,a)\n#define IShellFolderView_QuerySupport(p,a)          (p)->lpVtbl->QuerySupport(p,a)\n#define IShellFolderView_SetAutomationObject(p,a)   (p)->lpVtbl->SetAutomationObject(p,a)\n#endif\n\n/* IProgressDialog interface */\n#define PROGDLG_NORMAL           0x00000000\n#define PROGDLG_MODAL            0x00000001\n#define PROGDLG_AUTOTIME         0x00000002\n#define PROGDLG_NOTIME           0x00000004\n#define PROGDLG_NOMINIMIZE       0x00000008\n#define PROGDLG_NOPROGRESSBAR    0x00000010\n#define PROGDLG_MARQUEEPROGRESS  0x00000020\n#define PROGDLG_NOCANCEL         0x00000040\n\n#define PDTIMER_RESET            0x00000001\n#define PDTIMER_PAUSE            0x00000002\n#define PDTIMER_RESUME           0x00000003\n\n#define INTERFACE IProgressDialog\nDECLARE_INTERFACE_(IProgressDialog,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS) PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n    /*** IProgressDialog methods ***/\n    STDMETHOD(StartProgressDialog)(THIS_ HWND hwndParent, IUnknown *punkEnableModeless, DWORD dwFlags, LPCVOID reserved) PURE;\n    STDMETHOD(StopProgressDialog)(THIS) PURE;\n    STDMETHOD(SetTitle)(THIS_ LPCWSTR pwzTitle) PURE;\n    STDMETHOD(SetAnimation)(THIS_ HINSTANCE hInstance, UINT uiResourceId) PURE;\n    STDMETHOD_(BOOL,HasUserCancelled)(THIS) PURE;\n    STDMETHOD(SetProgress)(THIS_ DWORD dwCompleted, DWORD dwTotal) PURE;\n    STDMETHOD(SetProgress64)(THIS_ ULONGLONG ullCompleted, ULONGLONG ullTotal) PURE;\n    STDMETHOD(SetLine)(THIS_ DWORD dwLineNum, LPCWSTR pwzString, BOOL bPath, LPCVOID reserved) PURE;\n    STDMETHOD(SetCancelMsg)(THIS_ LPCWSTR pwzCancelMsg, LPCVOID reserved) PURE;\n    STDMETHOD(Timer)(THIS_ DWORD dwTimerAction, LPCVOID reserved) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IProgressDialog_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)\n#define IProgressDialog_AddRef(p)              (p)->lpVtbl->AddRef(p)\n#define IProgressDialog_Release(p)             (p)->lpVtbl->Release(p)\n/*** IProgressDialog methods ***/\n#define IProgressDialog_StartProgressDialog(p,a,b,c,d)    (p)->lpVtbl->StartProgressDialog(p,a,b,c,d)\n#define IProgressDialog_StopProgressDialog(p)             (p)->lpVtbl->StopProgressDialog(p)\n#define IProgressDialog_SetTitle(p,a)                     (p)->lpVtbl->SetTitle(p,a)\n#define IProgressDialog_SetAnimation(p,a,b)               (p)->lpVtbl->SetAnimation(p,a,b)\n#define IProgressDialog_HasUserCancelled(p)               (p)->lpVtbl->HasUserCancelled(p)\n#define IProgressDialog_SetProgress(p,a,b)                (p)->lpVtbl->SetProgress(p,a,b)\n#define IProgressDialog_SetProgress64(p,a,b)              (p)->lpVtbl->SetProgress64(p,a,b)\n#define IProgressDialog_SetLine(p,a,b,c,d)                (p)->lpVtbl->SetLine(p,a,b,c,d)\n#define IProgressDialog_SetCancelMsg(p,a,b)               (p)->lpVtbl->SetCancelMsg(p,a,b)\n#define IProgressDialog_Timer(p,a,b)                      (p)->lpVtbl->Timer(p,a,b)\n#endif\n\n\n/****************************************************************************\n* SHAddToRecentDocs API\n*/\n#define SHARD_PIDL      __MSABI_LONG(0x00000001)\n#define SHARD_PATHA     __MSABI_LONG(0x00000002)\n#define SHARD_PATHW     __MSABI_LONG(0x00000003)\n#define SHARD_PATH WINELIB_NAME_AW(SHARD_PATH)\n\nvoid WINAPI SHAddToRecentDocs(UINT,LPCVOID);\n\n/****************************************************************************\n * SHBrowseForFolder API\n */\ntypedef INT (CALLBACK *BFFCALLBACK)(HWND,UINT,LPARAM,LPARAM);\n\n#include <pshpack8.h>\n\ntypedef struct tagBROWSEINFOA {\n    HWND        hwndOwner;\n    LPCITEMIDLIST pidlRoot;\n    LPSTR         pszDisplayName;\n    LPCSTR        lpszTitle;\n    UINT        ulFlags;\n    BFFCALLBACK   lpfn;\n    LPARAM        lParam;\n    INT         iImage;\n} BROWSEINFOA, *PBROWSEINFOA, *LPBROWSEINFOA;\n\ntypedef struct tagBROWSEINFOW {\n    HWND        hwndOwner;\n    LPCITEMIDLIST pidlRoot;\n    LPWSTR        pszDisplayName;\n    LPCWSTR       lpszTitle;\n    UINT        ulFlags;\n    BFFCALLBACK   lpfn;\n    LPARAM        lParam;\n    INT         iImage;\n} BROWSEINFOW, *PBROWSEINFOW, *LPBROWSEINFOW;\n\n#define BROWSEINFO   WINELIB_NAME_AW(BROWSEINFO)\n#define PBROWSEINFO  WINELIB_NAME_AW(PBROWSEINFO)\n#define LPBROWSEINFO WINELIB_NAME_AW(LPBROWSEINFO)\n\n#include <poppack.h>\n\n/* Browsing for directory. */\n#define BIF_RETURNONLYFSDIRS   0x0001\n#define BIF_DONTGOBELOWDOMAIN  0x0002\n#define BIF_STATUSTEXT         0x0004\n#define BIF_RETURNFSANCESTORS  0x0008\n#define BIF_EDITBOX            0x0010\n#define BIF_VALIDATE           0x0020\n#define BIF_NEWDIALOGSTYLE     0x0040\n#define BIF_USENEWUI           (BIF_NEWDIALOGSTYLE | BIF_EDITBOX)\n#define BIF_BROWSEINCLUDEURLS  0x0080\n#define BIF_UAHINT             0x0100\n#define BIF_NONEWFOLDERBUTTON  0x0200\n#define BIF_NOTRANSLATETARGETS 0x0400\n\n#define BIF_BROWSEFORCOMPUTER  0x1000\n#define BIF_BROWSEFORPRINTER   0x2000\n#define BIF_BROWSEINCLUDEFILES 0x4000\n\n/* message from browser */\n#define BFFM_INITIALIZED        1\n#define BFFM_SELCHANGED         2\n#define BFFM_VALIDATEFAILEDA    3\n#define BFFM_VALIDATEFAILEDW    4\n#define BFFM_IUNKNOWN           5\n\n/* messages to browser */\n#define BFFM_SETSTATUSTEXTA     (WM_USER+100)\n#define BFFM_ENABLEOK           (WM_USER+101)\n#define BFFM_SETSELECTIONA      (WM_USER+102)\n#define BFFM_SETSELECTIONW      (WM_USER+103)\n#define BFFM_SETSTATUSTEXTW     (WM_USER+104)\n#define BFFM_SETOKTEXT          (WM_USER+105)\n#define BFFM_SETEXPANDED        (WM_USER+106)\n\nLPITEMIDLIST WINAPI SHBrowseForFolderA(LPBROWSEINFOA lpbi);\nLPITEMIDLIST WINAPI SHBrowseForFolderW(LPBROWSEINFOW lpbi);\n#define SHBrowseForFolder\t WINELIB_NAME_AW(SHBrowseForFolder)\n#define BFFM_SETSTATUSTEXT  WINELIB_NAME_AW(BFFM_SETSTATUSTEXT)\n#define BFFM_SETSELECTION   WINELIB_NAME_AW(BFFM_SETSELECTION)\n#define BFFM_VALIDATEFAILED WINELIB_NAME_AW(BFFM_VALIDATEFAILED)\n\n/**********************************************************************\n * SHCreateShellFolderViewEx API\n */\n\ntypedef HRESULT (CALLBACK *LPFNVIEWCALLBACK)(\n\tIShellView* dwUser,\n\tIShellFolder* pshf,\n\tHWND hWnd,\n\tUINT uMsg,\n\tWPARAM wParam,\n\tLPARAM lParam);\n\n#include <pshpack8.h>\n\ntypedef struct _CSFV\n{\n  UINT             cbSize;\n  IShellFolder*    pshf;\n  IShellView*      psvOuter;\n  LPCITEMIDLIST    pidl;\n  LONG             lEvents;\n  LPFNVIEWCALLBACK pfnCallback;\n  FOLDERVIEWMODE   fvm;\n} CSFV, *LPCSFV;\n\n#include <poppack.h>\n\nHRESULT WINAPI SHCreateShellFolderViewEx(LPCSFV pshfvi, IShellView **ppshv);\n\n/* SHCreateShellFolderViewEx callback messages */\n#define SFVM_MERGEMENU                 1\n#define SFVM_INVOKECOMMAND             2\n#define SFVM_GETHELPTEXT               3\n#define SFVM_GETTOOLTIPTEXT            4\n#define SFVM_GETBUTTONINFO             5\n#define SFVM_GETBUTTONS                6\n#define SFVM_INITMENUPOPUP             7\n#define SFVM_SELECTIONCHANGED          8 /* undocumented */\n#define SFVM_DRAWMENUITEM              9 /* undocumented */\n#define SFVM_MEASUREMENUITEM          10 /* undocumented */\n#define SFVM_EXITMENULOOP             11 /* undocumented */\n#define SFVM_VIEWRELEASE              12 /* undocumented */\n#define SFVM_GETNAMELENGTH            13 /* undocumented */\n#define SFVM_FSNOTIFY                 14\n#define SFVM_WINDOWCREATED            15\n#define SFVM_WINDOWCLOSING            16 /* undocumented */\n#define SFVM_LISTREFRESHED            17 /* undocumented */\n#define SFVM_WINDOWFOCUSED            18 /* undocumented */\n#define SFVM_REGISTERCOPYHOOK         20 /* undocumented */\n#define SFVM_COPYHOOKCALLBACK         21 /* undocumented */\n#define SFVM_GETDETAILSOF             23\n#define SFVM_COLUMNCLICK              24\n#define SFVM_QUERYFSNOTIFY            25\n#define SFVM_DEFITEMCOUNT             26\n#define SFVM_DEFVIEWMODE              27\n#define SFVM_UNMERGEFROMMENU          28\n#define SFVM_ADDINGOBJECT             29 /* undocumented */\n#define SFVM_REMOVINGOBJECT           30 /* undocumented */\n#define SFVM_UPDATESTATUSBAR          31\n#define SFVM_BACKGROUNDENUM           32\n#define SFVM_GETCOMMANDDIR            33 /* undocumented */\n#define SFVM_GETCOLUMNSTREAM          34 /* undocumented */\n#define SFVM_CANSELECTALL             35 /* undocumented */\n#define SFVM_DIDDRAGDROP              36\n#define SFVM_ISSTRICTREFRESH          37 /* undocumented */\n#define SFVM_ISCHILDOBJECT            38 /* undocumented */\n#define SFVM_SETISFV                  39\n#define SFVM_GETEXTVIEWS              40 /* undocumented */\n#define SFVM_THISIDLIST               41\n#define SFVM_ADDPROPERTYPAGES         47\n#define SFVM_BACKGROUNDENUMDONE       48\n#define SFVM_GETNOTIFY                49\n#define SFVM_GETSORTDEFAULTS          53\n#define SFVM_SIZE                     57\n#define SFVM_GETZONE                  58\n#define SFVM_GETPANE                  59\n#define SFVM_GETHELPTOPIC             63\n#define SFVM_GETANIMATION             68\n#define SFVM_GET_CUSTOMVIEWINFO       77 /* undocumented */\n#define SFVM_ENUMERATEDITEMS          79 /* undocumented */\n#define SFVM_GET_VIEW_DATA            80 /* undocumented */\n#define SFVM_GET_WEBVIEW_LAYOUT       82 /* undocumented */\n#define SFVM_GET_WEBVIEW_CONTENT      83 /* undocumented */\n#define SFVM_GET_WEBVIEW_TASKS        84 /* undocumented */\n#define SFVM_GET_WEBVIEW_THEME        86 /* undocumented */\n#define SFVM_GETDEFERREDVIEWSETTINGS  92 /* undocumented */\n\n#include <pshpack8.h>\n\ntypedef struct _SFV_CREATE\n{\n    UINT cbSize;\n    IShellFolder *pshf;\n    IShellView *psvOuter;\n    IShellFolderViewCB *psfvcb;\n} SFV_CREATE;\n\n#include <poppack.h>\n\nHRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pscfv, IShellView **ppsv);\n\n/* Types and definitions for the SFM_* parameters */\n#include <pshpack8.h>\n\n#define QCMINFO_PLACE_BEFORE          0\n#define QCMINFO_PLACE_AFTER           1\ntypedef struct _QCMINFO_IDMAP_PLACEMENT\n{\n    UINT id;\n    UINT fFlags;\n} QCMINFO_IDMAP_PLACEMENT;\n\ntypedef struct _QCMINFO_IDMAP\n{\n    UINT nMaxIds;\n    QCMINFO_IDMAP_PLACEMENT pIdList[1];\n} QCMINFO_IDMAP;\n\ntypedef struct _QCMINFO\n{\n    HMENU hmenu;\n    UINT indexMenu;\n    UINT idCmdFirst;\n    UINT idCmdLast;\n    QCMINFO_IDMAP const* pIdMap;\n} QCMINFO, *LPQCMINFO;\n\n#define TBIF_DEFAULT           0x00000000\n#define TBIF_APPEND            0x00000000\n#define TBIF_PREPEND           0x00000001\n#define TBIF_REPLACE           0x00000002\n#define TBIF_INTERNETBAR       0x00010000\n#define TBIF_STANDARDTOOLBAR   0x00020000\n#define TBIF_NOTOOLBAR         0x00030000\n\ntypedef struct _TBINFO\n{\n    UINT cbuttons;\n    UINT uFlags;\n} TBINFO, *LPTBINFO;\n\n#include <poppack.h>\n\n/****************************************************************************\n*\tSHShellFolderView_Message API\n*/\n\nLRESULT WINAPI SHShellFolderView_Message(\n\tHWND hwndCabinet,\n\tUINT uMessage,\n\tLPARAM lParam);\n\n/* SHShellFolderView_Message messages */\n#define SFVM_REARRANGE          0x0001\n#define SFVM_GETARRANGECOLUMN   0x0002 /* undocumented */\n#define SFVM_ADDOBJECT          0x0003\n#define SFVM_GETITEMCOUNT       0x0004 /* undocumented */\n#define SFVM_GETITEMPIDL        0x0005 /* undocumented */\n#define SFVM_REMOVEOBJECT       0x0006\n#define SFVM_UPDATEOBJECT       0x0007\n#define SFVM_SETREDRAW          0x0008 /* undocumented */\n#define SFVM_GETSELECTEDOBJECTS 0x0009\n#define SFVM_ISDROPONSOURCE     0x000A /* undocumented */\n#define SFVM_MOVEICONS          0x000B /* undocumented */\n#define SFVM_GETDRAGPOINT       0x000C /* undocumented */\n#define SFVM_GETDROPPOINT       0x000D /* undocumented */\n#define SFVM_SETITEMPOS         0x000E\n#define SFVM_ISDROPONBACKGROUND 0x000F /* undocumented */\n#define SFVM_SETCLIPBOARD       0x0010\n#define SFVM_TOGGLEAUTOARRANGE  0x0011 /* undocumented */\n#define SFVM_LINEUPICONS        0x0012 /* undocumented */\n#define SFVM_GETAUTOARRANGE     0x0013 /* undocumented */\n#define SFVM_GETSELECTEDCOUNT   0x0014 /* undocumented */\n#define SFVM_GETITEMSPACING     0x0015 /* undocumented */\n#define SFVM_REFRESHOBJECT      0x0016 /* undocumented */\n#define SFVM_SETPOINTS          0x0017\n\n/****************************************************************************\n*\tSHGetDataFromIDList API\n*/\n#define SHGDFIL_FINDDATA        1\n#define SHGDFIL_NETRESOURCE     2\n#define SHGDFIL_DESCRIPTIONID   3\n\n#define SHDID_ROOT_REGITEM          1\n#define SHDID_FS_FILE               2\n#define SHDID_FS_DIRECTORY          3\n#define SHDID_FS_OTHER              4\n#define SHDID_COMPUTER_DRIVE35      5\n#define SHDID_COMPUTER_DRIVE525     6\n#define SHDID_COMPUTER_REMOVABLE    7\n#define SHDID_COMPUTER_FIXED        8\n#define SHDID_COMPUTER_NETDRIVE     9\n#define SHDID_COMPUTER_CDROM        10\n#define SHDID_COMPUTER_RAMDISK      11\n#define SHDID_COMPUTER_OTHER        12\n#define SHDID_NET_DOMAIN            13\n#define SHDID_NET_SERVER            14\n#define SHDID_NET_SHARE             15\n#define SHDID_NET_RESTOFNET         16\n#define SHDID_NET_OTHER             17\n#define SHDID_COMPUTER_IMAGING      18\n#define SHDID_COMPUTER_AUDIO        19\n#define SHDID_COMPUTER_SHAREDDOCS   20\n\n#include <pshpack8.h>\n\ntypedef struct _SHDESCRIPTIONID\n{   DWORD   dwDescriptionId;\n    CLSID   clsid;\n} SHDESCRIPTIONID, *LPSHDESCRIPTIONID;\n\n#include <poppack.h>\n\nHRESULT WINAPI SHGetDataFromIDListA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int nFormat, LPVOID pv, int cb);\nHRESULT WINAPI SHGetDataFromIDListW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int nFormat, LPVOID pv, int cb);\n#define  SHGetDataFromIDList WINELIB_NAME_AW(SHGetDataFromIDList)\n\nBOOL WINAPI SHGetSpecialFolderPathA (HWND hwndOwner, LPSTR szPath, int nFolder, BOOL bCreate);\nBOOL WINAPI SHGetSpecialFolderPathW (HWND hwndOwner, LPWSTR szPath, int nFolder, BOOL bCreate);\n#define  SHGetSpecialFolderPath WINELIB_NAME_AW(SHGetSpecialFolderPath)\n\nHRESULT WINAPI SHGetMalloc(LPMALLOC *lpmal) ;\n\n/**********************************************************************\n * SHGetSetSettings ()\n */\n\ntypedef struct\n{\n    BOOL fShowAllObjects : 1;\n    BOOL fShowExtensions : 1;\n    BOOL fNoConfirmRecycle : 1;\n\n    BOOL fShowSysFiles : 1;\n    BOOL fShowCompColor : 1;\n    BOOL fDoubleClickInWebView : 1;\n    BOOL fDesktopHTML : 1;\n    BOOL fWin95Classic : 1;\n    BOOL fDontPrettyPath : 1;\n    BOOL fShowAttribCol : 1;\n    BOOL fMapNetDrvBtn : 1;\n    BOOL fShowInfoTip : 1;\n    BOOL fHideIcons : 1;\n    BOOL fWebView : 1;\n    BOOL fFilter : 1;\n    BOOL fShowSuperHidden : 1;\n    BOOL fNoNetCrawling : 1;\n\n    UINT :15; /* Required for proper binary layout with gcc */\n    DWORD dwWin95Unused;\n    UINT  uWin95Unused;\n    LONG   lParamSort;\n    int    iSortDirection;\n    UINT   version;\n    UINT uNotUsed;\n    BOOL fSepProcess: 1;\n    BOOL fStartPanelOn: 1;\n    BOOL fShowStartPage: 1;\n    UINT fSpareFlags : 13;\n    UINT :15; /* Required for proper binary layout with gcc */\n} SHELLSTATE, *LPSHELLSTATE;\n\n/**********************************************************************\n * SHGetSettings ()\n */\ntypedef struct\n{\tBOOL fShowAllObjects : 1;\n\tBOOL fShowExtensions : 1;\n\tBOOL fNoConfirmRecycle : 1;\n\tBOOL fShowSysFiles : 1;\n\n\tBOOL fShowCompColor : 1;\n\tBOOL fDoubleClickInWebView : 1;\n\tBOOL fDesktopHTML : 1;\n\tBOOL fWin95Classic : 1;\n\n\tBOOL fDontPrettyPath : 1;\n\tBOOL fShowAttribCol : 1;\n\tBOOL fMapNetDrvBtn : 1;\n\tBOOL fShowInfoTip : 1;\n\n\tBOOL fHideIcons : 1;\n\tUINT fRestFlags : 3;\n\tUINT :15; /* Required for proper binary layout with gcc */\n} SHELLFLAGSTATE, * LPSHELLFLAGSTATE;\n\nVOID WINAPI SHGetSettings(LPSHELLFLAGSTATE lpsfs, DWORD dwMask);\n\n#define SSF_SHOWALLOBJECTS\t\t0x0001\n#define SSF_SHOWEXTENSIONS\t\t0x0002\n#define SSF_SHOWCOMPCOLOR\t\t0x0008\n#define SSF_SHOWSYSFILES\t\t0x0020\n#define SSF_DOUBLECLICKINWEBVIEW\t0x0080\n#define SSF_SHOWATTRIBCOL\t\t0x0100\n#define SSF_DESKTOPHTML\t\t\t0x0200\n#define SSF_WIN95CLASSIC\t\t0x0400\n#define SSF_DONTPRETTYPATH\t\t0x0800\n#define SSF_SHOWINFOTIP\t\t\t0x2000\n#define SSF_MAPNETDRVBUTTON\t\t0x1000\n#define SSF_NOCONFIRMRECYCLE\t\t0x8000\n#define SSF_HIDEICONS\t\t\t0x4000\n\n/****************************************************************************\n* SHRestricted API\n*/\ntypedef enum RESTRICTIONS\n{\n\tREST_NONE\t\t\t= 0x00000000,\n\tREST_NORUN\t\t\t= 0x00000001,\n\tREST_NOCLOSE\t\t\t= 0x00000002,\n\tREST_NOSAVESET\t\t\t= 0x00000004,\n\tREST_NOFILEMENU\t\t\t= 0x00000008,\n\tREST_NOSETFOLDERS\t\t= 0x00000010,\n\tREST_NOSETTASKBAR\t\t= 0x00000020,\n\tREST_NODESKTOP\t\t\t= 0x00000040,\n\tREST_NOFIND\t\t\t= 0x00000080,\n\tREST_NODRIVES\t\t\t= 0x00000100,\n\tREST_NODRIVEAUTORUN\t\t= 0x00000200,\n\tREST_NODRIVETYPEAUTORUN\t\t= 0x00000400,\n\tREST_NONETHOOD\t\t\t= 0x00000800,\n\tREST_STARTBANNER\t\t= 0x00001000,\n\tREST_RESTRICTRUN\t\t= 0x00002000,\n\tREST_NOPRINTERTABS\t\t= 0x00004000,\n\tREST_NOPRINTERDELETE\t\t= 0x00008000,\n\tREST_NOPRINTERADD\t\t= 0x00010000,\n\tREST_NOSTARTMENUSUBFOLDERS\t= 0x00020000,\n\tREST_MYDOCSONNET\t\t= 0x00040000,\n\tREST_NOEXITTODOS\t\t= 0x00080000,\n\tREST_ENFORCESHELLEXTSECURITY\t= 0x00100000,\n\tREST_LINKRESOLVEIGNORELINKINFO\t= 0x00200000,\n\tREST_NOCOMMONGROUPS\t\t= 0x00400000,\n\tREST_SEPARATEDESKTOPPROCESS\t= 0x00800000,\n\tREST_NOWEB\t\t\t= 0x01000000,\n\tREST_NOTRAYCONTEXTMENU\t\t= 0x02000000,\n\tREST_NOVIEWCONTEXTMENU\t\t= 0x04000000,\n\tREST_NONETCONNECTDISCONNECT\t= 0x08000000,\n\tREST_STARTMENULOGOFF\t\t= 0x10000000,\n\tREST_NOSETTINGSASSIST\t\t= 0x20000000,\n\tREST_NOINTERNETICON\t\t= 0x40000001,\n\tREST_NORECENTDOCSHISTORY,\n\tREST_NORECENTDOCSMENU,\n\tREST_NOACTIVEDESKTOP,\n\tREST_NOACTIVEDESKTOPCHANGES,\n\tREST_NOFAVORITESMENU,\n\tREST_CLEARRECENTDOCSONEXIT,\n\tREST_CLASSICSHELL,\n\tREST_NOCUSTOMIZEWEBVIEW,\n\n\tREST_NOHTMLWALLPAPER\t\t= 0x40000010,\n\tREST_NOCHANGINGWALLPAPER,\n\tREST_NODESKCOMP,\n\tREST_NOADDDESKCOMP,\n\tREST_NODELDESKCOMP,\n\tREST_NOCLOSEDESKCOMP,\n\tREST_NOCLOSE_DRAGDROPBAND,\n\tREST_NOMOVINGBAND,\n\tREST_NOEDITDESKCOMP,\n\tREST_NORESOLVESEARCH,\n\tREST_NORESOLVETRACK,\n\tREST_FORCECOPYACLWITHFILE,\n\tREST_NOLOGO3CHANNELNOTIFY,\n\tREST_NOFORGETSOFTWAREUPDATE,\n\tREST_NOSETACTIVEDESKTOP,\n\tREST_NOUPDATEWINDOWS,\n\tREST_NOCHANGESTARMENU,\t\t/* 0x40000020 */\n\tREST_NOFOLDEROPTIONS,\n\tREST_HASFINDCOMPUTERS,\n\tREST_INTELLIMENUS,\n\tREST_RUNDLGMEMCHECKBOX,\n\tREST_ARP_ShowPostSetup,\n\tREST_NOCSC,\n\tREST_NOCONTROLPANEL,\n\tREST_ENUMWORKGROUP,\n\tREST_ARP_NOARP,\n\tREST_ARP_NOREMOVEPAGE,\n\tREST_ARP_NOADDPAGE,\n\tREST_ARP_NOWINSETUPPAGE,\n\tREST_GREYMSIADS,\n\tREST_NOCHANGEMAPPEDDRIVELABEL,\n\tREST_NOCHANGEMAPPEDDRIVECOMMENT,\n\tREST_MaxRecentDocs,\t\t/* 0x40000030 */\n\tREST_NONETWORKCONNECTIONS,\n\tREST_FORCESTARTMENULOGOFF,\n\tREST_NOWEBVIEW,\n\tREST_NOCUSTOMIZETHISFOLDER,\n\tREST_NOENCRYPTION,\n\n\tREST_ALLOWFRENCHENCRYPTION,\t/* not documented */\n\n\tREST_DONTSHOWSUPERHIDDEN,\n\tREST_NOSHELLSEARCHBUTTON,\n\tREST_NOHARDWARETAB,\n\tREST_NORUNASINSTALLPROMPT,\n\tREST_PROMPTRUNASINSTALLNETPATH,\n\tREST_NOMANAGEMYCOMPUTERVERB,\n\tREST_NORECENTDOCSNETHOOD,\n\tREST_DISALLOWRUN,\n\tREST_NOWELCOMESCREEN,\n\tREST_RESTRICTCPL,\t\t/* 0x40000040 */\n\tREST_DISALLOWCPL,\n\tREST_NOSMBALLOONTIP,\n\tREST_NOSMHELP,\n\tREST_NOWINKEYS,\n\tREST_NOENCRYPTONMOVE,\n\tREST_NOLOCALMACHINERUN,\n\tREST_NOCURRENTUSERRUN,\n\tREST_NOLOCALMACHINERUNONCE,\n\tREST_NOCURRENTUSERRUNONCE,\n\tREST_FORCEACTIVEDESKTOPON,\n\tREST_NOCOMPUTERSNEARME,\n\tREST_NOVIEWONDRIVE,\n\tREST_NONETCRAWL,\n\tREST_NOSHAREDDOCUMENTS,\n\tREST_NOSMMYDOCS,\n\tREST_NOSMMYPICS,\t\t/* 0x40000050 */\n\tREST_ALLOWBITBUCKDRIVES,\n\tREST_NONLEGACYSHELLMODE,\n\tREST_NOCONTROLPANELBARRICADE,\n\tREST_NOSTARTPAGE,\n\tREST_NOAUTOTRAYNOTIFY,\n\tREST_NOTASKGROUPING,\n\tREST_NOCDBURNING,\n\tREST_MYCOMPNOPROP,\n\tREST_MYDOCSNOPROP,\n\tREST_NOSTARTPANEL,\n\tREST_NODISPLAYAPPEARANCEPAGE,\n\tREST_NOTHEMESTAB,\n\tREST_NOVISUALSTYLECHOICE,\n\tREST_NOSIZECHOICE,\n\tREST_NOCOLORCHOICE,\n\tREST_SETVISUALSTYLE,\t\t/* 0x40000060 */\n\tREST_STARTRUNNOHOMEPATH,\n\tREST_NOUSERNAMEINSTARTPANEL,\n\tREST_NOMYCOMPUTERICON,\n\tREST_NOSMNETWORKPLACES,\n\tREST_NOSMPINNEDLIST,\n\tREST_NOSMMYMUSIC,\n\tREST_NOSMEJECTPC,\n\tREST_NOSMMOREPROGRAMS,\n\tREST_NOSMMFUPROGRAMS,\n\tREST_NOTRAYITEMSDISPLAY,\n\tREST_NOTOOLBARSONTASKBAR,\n\t/* 0x4000006C\n\t   0x4000006D\n\t   0x4000006E */\n\tREST_NOSMCONFIGUREPROGRAMS\t= 0x4000006F,\n\tREST_HIDECLOCK,\t\t\t/* 0x40000070 */\n\tREST_NOLOWDISKSPACECHECKS,\n\tREST_NOENTIRENETWORK,\n\tREST_NODESKTOPCLEANUP,\n\tREST_BITBUCKNUKEONDELETE,\n\tREST_BITBUCKCONFIRMDELETE,\n\tREST_BITBUCKNOPROP,\n\tREST_NODISPBACKGROUND,\n\tREST_NODISPSCREENSAVEPG,\n\tREST_NODISPSETTINGSPG,\n\tREST_NODISPSCREENSAVEPREVIEW,\n\tREST_NODISPLAYCPL,\n\tREST_HIDERUNASVERB,\n\tREST_NOTHUMBNAILCACHE,\n\tREST_NOSTRCMPLOGICAL,\n\tREST_NOPUBLISHWIZARD,\n\tREST_NOONLINEPRINTSWIZARD,\t/* 0x40000080 */\n\tREST_NOWEBSERVICES,\n\tREST_ALLOWUNHASHEDWEBVIEW,\n\tREST_ALLOWLEGACYWEBVIEW,\n\tREST_REVERTWEBVIEWSECURITY,\n\n\tREST_INHERITCONSOLEHANDLES\t= 0x40000086,\n\n\tREST_NODISCONNECT\t\t= 0x41000001,\n\tREST_NOSECURITY,\n\tREST_NOFILEASSOCIATE,\t\t/* 0x41000003 */\n} RESTRICTIONS;\n\nDWORD WINAPI SHRestricted(RESTRICTIONS rest);\n\n/****************************************************************************\n* SHChangeNotify API\n*/\ntypedef struct _SHChangeNotifyEntry\n{\n    LPCITEMIDLIST pidl;\n    BOOL   fRecursive;\n} SHChangeNotifyEntry;\n\n#define SHCNE_RENAMEITEM\t0x00000001\n#define SHCNE_CREATE\t\t0x00000002\n#define SHCNE_DELETE\t\t0x00000004\n#define SHCNE_MKDIR\t\t0x00000008\n#define SHCNE_RMDIR\t\t0x00000010\n#define SHCNE_MEDIAINSERTED\t0x00000020\n#define SHCNE_MEDIAREMOVED\t0x00000040\n#define SHCNE_DRIVEREMOVED\t0x00000080\n#define SHCNE_DRIVEADD\t\t0x00000100\n#define SHCNE_NETSHARE\t\t0x00000200\n#define SHCNE_NETUNSHARE\t0x00000400\n#define SHCNE_ATTRIBUTES\t0x00000800\n#define SHCNE_UPDATEDIR\t\t0x00001000\n#define SHCNE_UPDATEITEM\t0x00002000\n#define SHCNE_SERVERDISCONNECT\t0x00004000\n#define SHCNE_UPDATEIMAGE\t0x00008000\n#define SHCNE_DRIVEADDGUI\t0x00010000\n#define SHCNE_RENAMEFOLDER\t0x00020000\n#define SHCNE_FREESPACE\t\t0x00040000\n\n#define SHCNE_EXTENDED_EVENT\t0x04000000\n#define SHCNE_ASSOCCHANGED\t0x08000000\n#define SHCNE_DISKEVENTS\t0x0002381F\n#define SHCNE_GLOBALEVENTS\t0x0C0581E0\n#define SHCNE_ALLEVENTS\t\t0x7FFFFFFF\n#define SHCNE_INTERRUPT\t\t0x80000000\n\n#define SHCNEE_ORDERCHANGED     __MSABI_LONG(0x0002)\n#define SHCNEE_MSI_CHANGE       __MSABI_LONG(0x0004)\n#define SHCNEE_MSI_UNINSTALL    __MSABI_LONG(0x0005)\n\n#define SHCNF_IDLIST\t\t0x0000\n#define SHCNF_PATHA\t\t0x0001\n#define SHCNF_PRINTERA\t\t0x0002\n#define SHCNF_DWORD\t\t0x0003\n#define SHCNF_PATHW\t\t0x0005\n#define SHCNF_PRINTERW\t\t0x0006\n#define SHCNF_TYPE\t\t0x00FF\n#define SHCNF_FLUSH\t\t0x1000\n#define SHCNF_FLUSHNOWAIT\t0x3000\n#define SHCNF_NOTIFYRECURSIVE\t0x10000\n\n#define SHCNF_PATH              WINELIB_NAME_AW(SHCNF_PATH)\n#define SHCNF_PRINTER           WINELIB_NAME_AW(SHCNF_PRINTER)\n\n#define SHCNRF_InterruptLevel 0x0001\n#define SHCNRF_ShellLevel 0x0002\n#define SHCNRF_RecursiveInterrupt 0x1000\n#define SHCNRF_NewDelivery 0x8000\n\nvoid WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2);\n\ntypedef enum {\n    SLDF_HAS_ID_LIST = 0x00000001,\n    SLDF_HAS_LINK_INFO = 0x00000002,\n    SLDF_HAS_NAME = 0x00000004,\n    SLDF_HAS_RELPATH = 0x00000008,\n    SLDF_HAS_WORKINGDIR = 0x00000010,\n    SLDF_HAS_ARGS = 0x00000020,\n    SLDF_HAS_ICONLOCATION = 0x00000040,\n    SLDF_UNICODE = 0x00000080,\n    SLDF_FORCE_NO_LINKINFO = 0x00000100,\n    SLDF_HAS_EXP_SZ = 0x00000200,\n    SLDF_RUN_IN_SEPARATE = 0x00000400,\n    SLDF_HAS_LOGO3ID = 0x00000800,\n    SLDF_HAS_DARWINID = 0x00001000,\n    SLDF_RUNAS_USER = 0x00002000,\n    SLDF_HAS_EXP_ICON_SZ = 0x00004000,\n    SLDF_NO_PIDL_ALIAS = 0x00008000,\n    SLDF_FORCE_UNCNAME = 0x00010000,\n    SLDF_RUN_WITH_SHIMLAYER = 0x00020000,\n    SLDF_FORCE_NO_LINKTRACK = 0x00040000,\n    SLDF_ENABLE_TARGET_METADATA = 0x00080000,\n    SLDF_DISABLE_KNOWNFOLDER_RELATIVE_TRACKING = 0x00200000,\n    SLDF_VALID = 0x003ff7ff,\n    SLDF_RESERVED = 0x80000000,\n} SHELL_LINK_DATA_FLAGS;\n\ntypedef struct tagDATABLOCKHEADER\n{\n    DWORD cbSize;\n    DWORD dwSignature;\n} DATABLOCK_HEADER, *LPDATABLOCK_HEADER, *LPDBLIST;\n\ntypedef struct {\n    DATABLOCK_HEADER dbh;\n    CHAR szDarwinID[MAX_PATH];\n    WCHAR szwDarwinID[MAX_PATH];\n} EXP_DARWIN_LINK, *LPEXP_DARWIN_LINK;\n\ntypedef struct {\n    DWORD cbSize;\n    DWORD cbSignature;\n    CHAR szTarget[MAX_PATH];\n    WCHAR szwTarget[MAX_PATH];\n} EXP_SZ_LINK, *LPEXP_SZ_LINK;\n\ntypedef struct {\n    DWORD cbSize;\n    DWORD dwSignature;\n    DWORD idSpecialFolder;\n    DWORD cbOffset;\n} EXP_SPECIAL_FOLDER, *LPEXP_SPECIAL_FOLDER;\n\ntypedef struct {\n    DWORD cbSize;\n    DWORD dwSignature;\n    BYTE abPropertyStorage[1];\n} EXP_PROPERTYSTORAGE;\n\n#define EXP_SZ_LINK_SIG         0xa0000001\n#define NT_CONSOLE_PROPS_SIG    0xa0000002\n#define NT_FE_CONSOLE_PROPS_SIG 0xa0000004\n#define EXP_SPECIAL_FOLDER_SIG  0xa0000005\n#define EXP_DARWIN_ID_SIG       0xa0000006\n#define EXP_SZ_ICON_SIG         0xa0000007\n#define EXP_LOGO3_ID_SIG        EXP_SZ_ICON_SIG /* Old SDKs only */\n#define EXP_PROPERTYSTORAGE_SIG 0xa0000009\n\ntypedef struct _SHChangeDWORDAsIDList {\n    USHORT   cb;\n    DWORD    dwItem1;\n    DWORD    dwItem2;\n    USHORT   cbZero;\n} SHChangeDWORDAsIDList, *LPSHChangeDWORDAsIDList;\n\ntypedef struct _SHChangeProductKeyAsIDList {\n    USHORT cb;\n    WCHAR wszProductKey[39];\n    USHORT cbZero;\n} SHChangeProductKeyAsIDList, *LPSHChangeProductKeyAsIDList;\n\nULONG WINAPI SHChangeNotifyRegister(HWND hwnd, int fSources, LONG fEvents, UINT wMsg,\n                                    int cEntries, SHChangeNotifyEntry *pshcne);\nBOOL WINAPI SHChangeNotifyDeregister(ULONG ulID);\nHANDLE WINAPI SHChangeNotification_Lock(HANDLE hChangeNotification, DWORD dwProcessId,\n                                        LPITEMIDLIST **pppidl, LONG *plEvent);\nBOOL WINAPI SHChangeNotification_Unlock(HANDLE hLock);\n\nHRESULT WINAPI SHGetRealIDL(IShellFolder *psf, LPCITEMIDLIST pidlSimple, LPITEMIDLIST * ppidlReal);\n\n/****************************************************************************\n* SHCreateDirectory API\n*/\nDWORD WINAPI SHCreateDirectory(HWND, LPCVOID);\nint WINAPI SHCreateDirectoryExA(HWND, LPCSTR, LPSECURITY_ATTRIBUTES);\nint WINAPI SHCreateDirectoryExW(HWND, LPCWSTR, LPSECURITY_ATTRIBUTES);\n#define    SHCreateDirectoryEx WINELIB_NAME_AW(SHCreateDirectoryEx)\n\n/****************************************************************************\n* SHGetSetFolderCustomSettings API\n*/\n\n#define FCS_READ       0x00000001\n#define FCS_FORCEWRITE 0x00000002\n#define FCS_WRITE      (FCS_READ | FCS_FORCEWRITE)\n\n#define FCS_FLAG_DRAGDROP    0x00000002\n\n#define FCSM_VIEWID          0x00000001\n#define FCSM_WEBVIEWTEMPLATE 0x00000002\n#define FCSM_INFOTIP         0x00000004\n#define FCSM_CLSID           0x00000008\n#define FCSM_ICONFILE        0x00000010\n#define FCSM_LOGO            0x00000020\n#define FCSM_FLAGS           0x00000040\n\n#include <pshpack8.h>\ntypedef struct {\n    DWORD dwSize;\n    DWORD dwMask;\n    SHELLVIEWID *pvid;\n    LPWSTR pszWebViewTemplate;\n    DWORD cchWebViewTemplate;\n    LPWSTR pszWebViewTemplateVersion;\n    LPWSTR pszInfoTip;\n    DWORD cchInfoTip;\n    CLSID *pclsid;\n    DWORD dwFlags;\n    LPWSTR pszIconFile;\n    DWORD cchIconFile;\n    int iIconIndex;\n    LPWSTR pszLogo;\n    DWORD cchLogo;\n} SHFOLDERCUSTOMSETTINGS, *LPSHFOLDERCUSTOMSETTINGS;\n#include <poppack.h>\n\nHRESULT WINAPI SHGetSetFolderCustomSettings(LPSHFOLDERCUSTOMSETTINGS pfcs, PCWSTR pszPath, DWORD dwReadWrite);\n\n/****************************************************************************\n* SHGetSpecialFolderLocation API\n*/\nHRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, int nFolder, LPITEMIDLIST * ppidl);\nHRESULT WINAPI SHGetFolderLocation(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwReserved, LPITEMIDLIST *ppidl);\n\n/****************************************************************************\n* SHGetFolderPath API\n*/\ntypedef enum {\n    SHGFP_TYPE_CURRENT = 0,\n    SHGFP_TYPE_DEFAULT = 1\n} SHGFP_TYPE;\n\nHRESULT WINAPI SHGetFolderPathA(HWND hwnd, int nFolder, HANDLE hToken, DWORD dwFlags, LPSTR pszPath);\nHRESULT WINAPI SHGetFolderPathW(HWND hwnd, int nFolder, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath);\n#define        SHGetFolderPath WINELIB_NAME_AW(SHGetFolderPath)\n\n#define CSIDL_DESKTOP\t\t0x0000\n#define CSIDL_INTERNET\t\t0x0001\n#define CSIDL_PROGRAMS\t\t0x0002\n#define CSIDL_CONTROLS\t\t0x0003\n#define CSIDL_PRINTERS\t\t0x0004\n#define CSIDL_PERSONAL\t\t0x0005\n#define CSIDL_FAVORITES\t\t0x0006\n#define CSIDL_STARTUP\t\t0x0007\n#define CSIDL_RECENT\t\t0x0008\n#define CSIDL_SENDTO\t\t0x0009\n#define CSIDL_BITBUCKET\t\t0x000a\n#define CSIDL_STARTMENU\t\t0x000b\n#define CSIDL_MYDOCUMENTS\tCSIDL_PERSONAL\n#define CSIDL_MYMUSIC\t\t0x000d\n#define CSIDL_MYVIDEO\t\t0x000e\n#define CSIDL_DESKTOPDIRECTORY\t0x0010\n#define CSIDL_DRIVES\t\t0x0011\n#define CSIDL_NETWORK\t\t0x0012\n#define CSIDL_NETHOOD\t\t0x0013\n#define CSIDL_FONTS\t\t0x0014\n#define CSIDL_TEMPLATES\t\t0x0015\n#define CSIDL_COMMON_STARTMENU\t0x0016\n#define CSIDL_COMMON_PROGRAMS\t0X0017\n#define CSIDL_COMMON_STARTUP\t0x0018\n#define CSIDL_COMMON_DESKTOPDIRECTORY\t0x0019\n#define CSIDL_APPDATA\t\t0x001a\n#define CSIDL_PRINTHOOD\t\t0x001b\n#define CSIDL_LOCAL_APPDATA\t0x001c\n#define CSIDL_ALTSTARTUP\t0x001d\n#define CSIDL_COMMON_ALTSTARTUP\t0x001e\n#define CSIDL_COMMON_FAVORITES  0x001f\n#define CSIDL_INTERNET_CACHE\t0x0020\n#define CSIDL_COOKIES\t\t0x0021\n#define CSIDL_HISTORY\t\t0x0022\n#define CSIDL_COMMON_APPDATA\t0x0023\n#define CSIDL_WINDOWS\t\t0x0024\n#define CSIDL_SYSTEM\t\t0x0025\n#define CSIDL_PROGRAM_FILES\t0x0026\n#define CSIDL_MYPICTURES\t0x0027\n#define CSIDL_PROFILE\t\t0x0028\n#define CSIDL_SYSTEMX86\t\t0x0029\n#define CSIDL_PROGRAM_FILESX86\t0x002a\n#define CSIDL_PROGRAM_FILES_COMMON\t0x002b\n#define CSIDL_PROGRAM_FILES_COMMONX86\t0x002c\n#define CSIDL_COMMON_TEMPLATES\t0x002d\n#define CSIDL_COMMON_DOCUMENTS\t0x002e\n#define CSIDL_COMMON_ADMINTOOLS\t0x002f\n#define CSIDL_ADMINTOOLS\t0x0030\n#define CSIDL_CONNECTIONS\t0x0031\n#define CSIDL_COMMON_MUSIC\t0x0035\n#define CSIDL_COMMON_PICTURES\t0x0036\n#define CSIDL_COMMON_VIDEO\t0x0037\n#define CSIDL_RESOURCES\t\t0x0038\n#define CSIDL_RESOURCES_LOCALIZED 0x0039\n#define CSIDL_COMMON_OEM_LINKS\t0x003a\n#define CSIDL_CDBURN_AREA\t0x003b\n#define CSIDL_COMPUTERSNEARME\t0x003d\n#define CSIDL_PROFILES\t\t0x003e\n#define CSIDL_FOLDER_MASK\t0x00ff\n#define CSIDL_FLAG_PER_USER_INIT 0x0800\n#define CSIDL_FLAG_NO_ALIAS\t0x1000\n#define CSIDL_FLAG_DONT_VERIFY\t0x4000\n#define CSIDL_FLAG_CREATE\t0x8000\n\n#define CSIDL_FLAG_MASK\t\t0xff00\n\n/****************************************************************************\n * SHGetDesktopFolder API\n */\nHRESULT WINAPI SHGetDesktopFolder(IShellFolder * *);\n\n/****************************************************************************\n * SHBindToParent API\n */\nHRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast);\n\n/****************************************************************************\n* SHDefExtractIcon API\n*/\nHRESULT WINAPI SHDefExtractIconA(LPCSTR pszIconFile, int iIndex, UINT uFlags,\n                                 HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize);\nHRESULT WINAPI SHDefExtractIconW(LPCWSTR pszIconFile, int iIndex, UINT uFlags,\n                                 HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize);\n#define        SHDefExtractIcon WINELIB_NAME_AW(SHDefExtractIcon)\n\n/*\n * DROPFILES for CF_HDROP and CF_PRINTERS\n */\ntypedef struct _DROPFILES\n{\n  DWORD pFiles;\n  POINT pt;\n  BOOL  fNC;\n  BOOL  fWide;\n} DROPFILES, *LPDROPFILES;\n\n/*\n * Properties of a file in the clipboard\n */\ntypedef struct _FILEDESCRIPTORA {\n    DWORD dwFlags;\n    CLSID clsid;\n    SIZEL sizel;\n    POINTL pointl;\n    DWORD dwFileAttributes;\n    FILETIME ftCreationTime;\n    FILETIME ftLastAccessTime;\n    FILETIME ftLastWriteTime;\n    DWORD nFileSizeHigh;\n    DWORD nFileSizeLow;\n    CHAR cFileName[MAX_PATH];\n} FILEDESCRIPTORA, *LPFILEDESCRIPTORA;\n\ntypedef struct _FILEDESCRIPTORW {\n    DWORD dwFlags;\n    CLSID clsid;\n    SIZEL sizel;\n    POINTL pointl;\n    DWORD dwFileAttributes;\n    FILETIME ftCreationTime;\n    FILETIME ftLastAccessTime;\n    FILETIME ftLastWriteTime;\n    DWORD nFileSizeHigh;\n    DWORD nFileSizeLow;\n    WCHAR cFileName[MAX_PATH];\n} FILEDESCRIPTORW, *LPFILEDESCRIPTORW;\n\nDECL_WINELIB_TYPE_AW(FILEDESCRIPTOR)\nDECL_WINELIB_TYPE_AW(LPFILEDESCRIPTOR)\n\n/*\n * CF_FILEGROUPDESCRIPTOR clipboard format\n */\ntypedef struct _FILEGROUPDESCRIPTORA {\n    UINT cItems;\n    FILEDESCRIPTORA fgd[1];\n} FILEGROUPDESCRIPTORA, *LPFILEGROUPDESCRIPTORA;\n\ntypedef struct _FILEGROUPDESCRIPTORW {\n    UINT cItems;\n    FILEDESCRIPTORW fgd[1];\n} FILEGROUPDESCRIPTORW, *LPFILEGROUPDESCRIPTORW;\n\nDECL_WINELIB_TYPE_AW(FILEGROUPDESCRIPTOR)\nDECL_WINELIB_TYPE_AW(LPFILEGROUPDESCRIPTOR)\n\n/****************************************************************************\n * Cabinet functions\n */\n\ntypedef struct {\n    WORD cLength;\n    WORD nVersion;\n    BOOL fFullPathTitle:1;\n    BOOL fSaveLocalView:1;\n    BOOL fNotShell:1;\n    BOOL fSimpleDefault:1;\n    BOOL fDontShowDescBar:1;\n    BOOL fNewWindowMode:1;\n    BOOL fShowCompColor:1;\n    BOOL fDontPrettyNames:1;\n    BOOL fAdminsCreateCommonGroups:1;\n    UINT fUnusedFlags:7;\n    UINT :15; /* Required for proper binary layout with gcc */\n    UINT fMenuEnumFilter;\n} CABINETSTATE, *LPCABINETSTATE;\n\n#define CABINETSTATE_VERSION 2\n\nBOOL WINAPI ReadCabinetState(CABINETSTATE *, int);\nBOOL WINAPI WriteCabinetState(CABINETSTATE *);\n\n/****************************************************************************\n * Path Manipulation Routines\n */\n\n/* PathProcessCommand flags */\n#define PPCF_ADDQUOTES        0x01\n#define PPCF_INCLUDEARGS      0x02\n#define PPCF_ADDARGUMENTS     0x03\n#define PPCF_NODIRECTORIES    0x10\n#define PPCF_DONTRESOLVE      0x20\n#define PPCF_FORCEQUALIFY     0x40\n#define PPCF_LONGESTPOSSIBLE  0x80\n\n/* PathResolve flags */\n#define PRF_VERIFYEXISTS         0x01\n#define PRF_EXECUTABLE           0x02\n#define PRF_TRYPROGRAMEXTENSIONS 0x03\n#define PRF_FIRSTDIRDEF          0x04\n#define PRF_DONTFINDLINK         0x08\n#define PRF_REQUIREABSOLUTE      0x10\n\nVOID WINAPI PathGetShortPath(LPWSTR pszPath);\nLONG WINAPI PathProcessCommand(LPCWSTR, LPWSTR, int, DWORD);\nint  WINAPI PathResolve(LPWSTR, PZPCWSTR, UINT);\nBOOL WINAPI PathYetAnotherMakeUniqueName(LPWSTR, LPCWSTR, LPCWSTR, LPCWSTR);\nBOOL WINAPI Win32DeleteFile(LPCWSTR);\n\n/****************************************************************************\n * Drag And Drop Routines\n */\n\n/* DAD_AutoScroll sample structure */\n#define NUM_POINTS 3\ntypedef struct\n{\n    int   iNextSample;\n    DWORD dwLastScroll;\n    BOOL  bFull;\n    POINT pts[NUM_POINTS];\n    DWORD dwTimes[NUM_POINTS];\n} AUTO_SCROLL_DATA;\n\nBOOL         WINAPI DAD_SetDragImage(HIMAGELIST,LPPOINT);\nBOOL         WINAPI DAD_DragEnterEx(HWND,POINT);\nBOOL         WINAPI DAD_DragEnterEx2(HWND,POINT,IDataObject*);\nBOOL         WINAPI DAD_DragMove(POINT);\nBOOL         WINAPI DAD_DragLeave(void);\nBOOL         WINAPI DAD_AutoScroll(HWND,AUTO_SCROLL_DATA*,LPPOINT);\nHRESULT      WINAPI SHDoDragDrop(HWND,IDataObject*,IDropSource*,DWORD,LPDWORD);\n\n/****************************************************************************\n * Internet shortcut properties\n */\n\n#define PID_IS_URL         2\n#define PID_IS_NAME        4\n#define PID_IS_WORKINGDIR  5\n#define PID_IS_HOTKEY      6\n#define PID_IS_SHOWCMD     7\n#define PID_IS_ICONINDEX   8\n#define PID_IS_ICONFILE    9\n#define PID_IS_WHATSNEW    10\n#define PID_IS_AUTHOR      11\n#define PID_IS_DESCRIPTION 12\n#define PID_IS_COMMENT     13\n\n\nLPITEMIDLIST WINAPI ILAppendID(LPITEMIDLIST,LPCSHITEMID,BOOL);\nLPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST);\nLPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST);\nLPITEMIDLIST WINAPI ILCreateFromPathA(LPCSTR);\nLPITEMIDLIST WINAPI ILCreateFromPathW(LPCWSTR);\n#define             ILCreateFromPath WINELIB_NAME_AW(ILCreateFromPath)\nLPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST,LPCITEMIDLIST);\nLPITEMIDLIST WINAPI ILFindChild(LPCITEMIDLIST,LPCITEMIDLIST);\nLPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST);\nvoid         WINAPI ILFree(LPITEMIDLIST);\nLPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST);\nUINT         WINAPI ILGetSize(LPCITEMIDLIST);\nBOOL         WINAPI ILIsEqual(LPCITEMIDLIST,LPCITEMIDLIST);\nBOOL         WINAPI ILIsParent(LPCITEMIDLIST,LPCITEMIDLIST,BOOL);\nHRESULT      WINAPI ILLoadFromStream(LPSTREAM,LPITEMIDLIST*);\nBOOL         WINAPI ILRemoveLastID(LPITEMIDLIST);\nHRESULT      WINAPI ILSaveToStream(LPSTREAM,LPCITEMIDLIST);\n\nstatic inline BOOL ILIsEmpty(LPCITEMIDLIST pidl)\n{\n    return !(pidl && pidl->mkid.cb);\n}\n\n#include <pshpack8.h>\n\ntypedef struct {\n    HWND hwnd;\n    IContextMenuCB *pcmcb;\n    PCIDLIST_ABSOLUTE pidlFolder;\n    IShellFolder *psf;\n    UINT cidl;\n    PCUITEMID_CHILD_ARRAY apidl;\n    IUnknown *punkAssociationInfo;\n    UINT cKeys;\n    const HKEY *aKeys;\n} DEFCONTEXTMENU;\n\n#include <poppack.h>\n\nHRESULT WINAPI SHCreateDefaultContextMenu(const DEFCONTEXTMENU *pdcm, REFIID riid, void **ppv);\n\ntypedef HRESULT (CALLBACK *LPFNDFMCALLBACK)(IShellFolder*,HWND,IDataObject*,UINT,WPARAM,LPARAM);\n\nHRESULT WINAPI CDefFolderMenu_Create2(LPCITEMIDLIST pidlFolder, HWND hwnd, UINT cidl,\n                                      LPCITEMIDLIST *apidl, IShellFolder *psf,\n                                      LPFNDFMCALLBACK lpfn, UINT nKeys, const HKEY *ahkeys,\n                                      IContextMenu **ppcm);\n\nint WINAPI PickIconDlg(HWND owner, WCHAR *path, UINT path_len, int *index);\nHRESULT WINAPI SHLimitInputEdit(HWND hwnd, IShellFolder *folder);\n\n#include <poppack.h>\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif /* __WINE_SHLOBJ_H */\n"
  },
  {
    "path": "wine/windows/shlwapi.h",
    "content": "/*\n * SHLWAPI.DLL functions\n *\n * Copyright (C) 2000 Juergen Schmied\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_SHLWAPI_H\n#define __WINE_SHLWAPI_H\n\n/* FIXME: #include <specstrings.h> */\n#include <objbase.h>\n#include <shtypes.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n#include <pshpack8.h>\n\n#ifndef NO_SHLWAPI_REG\n\n/* Registry functions */\n\nDWORD WINAPI SHDeleteEmptyKeyA(HKEY,LPCSTR);\nDWORD WINAPI SHDeleteEmptyKeyW(HKEY,LPCWSTR);\n#define SHDeleteEmptyKey WINELIB_NAME_AW(SHDeleteEmptyKey)\n\nDWORD WINAPI SHDeleteKeyA(HKEY,LPCSTR);\nDWORD WINAPI SHDeleteKeyW(HKEY,LPCWSTR);\n#define SHDeleteKey WINELIB_NAME_AW(SHDeleteKey)\n\nDWORD WINAPI SHDeleteValueA(HKEY,LPCSTR,LPCSTR);\nDWORD WINAPI SHDeleteValueW(HKEY,LPCWSTR,LPCWSTR);\n#define SHDeleteValue WINELIB_NAME_AW(SHDeleteValue)\n\nDWORD WINAPI SHGetValueA(HKEY,LPCSTR,LPCSTR,LPDWORD,LPVOID,LPDWORD);\nDWORD WINAPI SHGetValueW(HKEY,LPCWSTR,LPCWSTR,LPDWORD,LPVOID,LPDWORD);\n#define SHGetValue WINELIB_NAME_AW(SHGetValue)\n\nDWORD WINAPI SHSetValueA(HKEY,LPCSTR,LPCSTR,DWORD,LPCVOID,DWORD);\nDWORD WINAPI SHSetValueW(HKEY,LPCWSTR,LPCWSTR,DWORD,LPCVOID,DWORD);\n#define SHSetValue WINELIB_NAME_AW(SHSetValue)\n\nDWORD WINAPI SHQueryValueExA(HKEY,LPCSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD);\nDWORD WINAPI SHQueryValueExW(HKEY,LPCWSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD);\n#define SHQueryValueEx WINELIB_NAME_AW(SHQueryValueEx)\n\nLONG WINAPI SHEnumKeyExA(HKEY,DWORD,LPSTR,LPDWORD);\nLONG WINAPI SHEnumKeyExW(HKEY,DWORD,LPWSTR,LPDWORD);\n#define SHEnumKeyEx WINELIB_NAME_AW(SHEnumKeyEx)\n\nLONG WINAPI SHEnumValueA(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD);\nLONG WINAPI SHEnumValueW(HKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD);\n#define SHEnumValue WINELIB_NAME_AW(SHEnumValue)\n\nLONG WINAPI SHQueryInfoKeyA(HKEY,LPDWORD,LPDWORD,LPDWORD,LPDWORD);\nLONG WINAPI SHQueryInfoKeyW(HKEY,LPDWORD,LPDWORD,LPDWORD,LPDWORD);\n#define SHQueryInfoKey WINELIB_NAME_AW(SHQueryInfoKey)\n\nDWORD WINAPI SHRegGetPathA(HKEY,LPCSTR,LPCSTR,LPSTR,DWORD);\nDWORD WINAPI SHRegGetPathW(HKEY,LPCWSTR,LPCWSTR,LPWSTR,DWORD);\n#define SHRegGetPath WINELIB_NAME_AW(SHRegGetPath)\n\nDWORD WINAPI SHRegSetPathA(HKEY,LPCSTR,LPCSTR,LPCSTR,DWORD);\nDWORD WINAPI SHRegSetPathW(HKEY,LPCWSTR,LPCWSTR,LPCWSTR,DWORD);\n#define SHRegSetPath WINELIB_NAME_AW(SHRegSetPath)\n\nDWORD WINAPI SHCopyKeyA(HKEY,LPCSTR,HKEY,DWORD);\nDWORD WINAPI SHCopyKeyW(HKEY,LPCWSTR,HKEY,DWORD);\n#define SHCopyKey WINELIB_NAME_AW(SHCopyKey)\n\nHKEY WINAPI  SHRegDuplicateHKey(HKEY);\n\n/* SHRegGetValue flags */\ntypedef INT SRRF;\n\n#define SRRF_RT_REG_NONE 0x1\n#define SRRF_RT_REG_SZ 0x2\n#define SRRF_RT_REG_EXPAND_SZ 0x4\n#define SRRF_RT_REG_BINARY 0x8\n#define SRRF_RT_REG_DWORD 0x10\n#define SRRF_RT_REG_MULTI_SZ 0x20\n#define SRRF_RT_REG_QWORD 0x40\n\n#define SRRF_RT_DWORD (SRRF_RT_REG_BINARY|SRRF_RT_REG_DWORD)\n#define SRRF_RT_QWORD (SRRF_RT_REG_BINARY|SRRF_RT_REG_QWORD)\n#define SRRF_RT_ANY 0xffff\n\n#define SRRF_RM_ANY 0\n#define SRRF_RM_NORMAL 0x10000\n#define SRRF_RM_SAFE 0x20000\n#define SRRF_RM_SAFENETWORK 0x40000\n\n#define SRRF_NOEXPAND 0x10000000\n#define SRRF_ZEROONFAILURE 0x20000000\n#define SRRF_NOVIRT 0x40000000\n\nLSTATUS WINAPI SHRegGetValueA(HKEY,LPCSTR,LPCSTR,SRRF,LPDWORD,LPVOID,LPDWORD);\nLSTATUS WINAPI SHRegGetValueW(HKEY,LPCWSTR,LPCWSTR,SRRF,LPDWORD,LPVOID,LPDWORD);\n#define SHRegGetValue WINELIB_NAME_AW(SHRegGetValue)\n\n/* Undocumented registry functions */\n\nDWORD WINAPI SHDeleteOrphanKeyA(HKEY,LPCSTR);\nDWORD WINAPI SHDeleteOrphanKeyW(HKEY,LPCWSTR);\n#define SHDeleteOrphanKey WINELIB_NAME_AW(SHDeleteOrphanKey)\n\n\n/* User registry functions */\n\ntypedef enum\n{\n  SHREGDEL_DEFAULT = 0,\n  SHREGDEL_HKCU    = 0x1,\n  SHREGDEL_HKLM    = 0x10,\n  SHREGDEL_BOTH    = SHREGDEL_HKLM | SHREGDEL_HKCU\n} SHREGDEL_FLAGS;\n\ntypedef enum\n{\n  SHREGENUM_DEFAULT = 0,\n  SHREGENUM_HKCU    = 0x1,\n  SHREGENUM_HKLM    = 0x10,\n  SHREGENUM_BOTH    = SHREGENUM_HKLM | SHREGENUM_HKCU\n} SHREGENUM_FLAGS;\n\n#define SHREGSET_HKCU       0x1 /* Apply to HKCU if empty */\n#define SHREGSET_FORCE_HKCU 0x2 /* Always apply to HKCU */\n#define SHREGSET_HKLM       0x4 /* Apply to HKLM if empty */\n#define SHREGSET_FORCE_HKLM 0x8 /* Always apply to HKLM */\n#define SHREGSET_DEFAULT    (SHREGSET_FORCE_HKCU | SHREGSET_HKLM)\n\ntypedef HANDLE HUSKEY;\ntypedef HUSKEY *PHUSKEY;\n\nLONG WINAPI SHRegCreateUSKeyA(LPCSTR,REGSAM,HUSKEY,PHUSKEY,DWORD);\nLONG WINAPI SHRegCreateUSKeyW(LPCWSTR,REGSAM,HUSKEY,PHUSKEY,DWORD);\n#define SHRegCreateUSKey WINELIB_NAME_AW(SHRegCreateUSKey)\n\nLONG WINAPI SHRegOpenUSKeyA(LPCSTR,REGSAM,HUSKEY,PHUSKEY,BOOL);\nLONG WINAPI SHRegOpenUSKeyW(LPCWSTR,REGSAM,HUSKEY,PHUSKEY,BOOL);\n#define SHRegOpenUSKey WINELIB_NAME_AW(SHRegOpenUSKey)\n\nLONG WINAPI SHRegQueryUSValueA(HUSKEY,LPCSTR,LPDWORD,LPVOID,LPDWORD,\n                               BOOL,LPVOID,DWORD);\nLONG WINAPI SHRegQueryUSValueW(HUSKEY,LPCWSTR,LPDWORD,LPVOID,LPDWORD,\n                               BOOL,LPVOID,DWORD);\n#define SHRegQueryUSValue WINELIB_NAME_AW(SHRegQueryUSValue)\n\nLONG WINAPI SHRegWriteUSValueA(HUSKEY,LPCSTR,DWORD,LPVOID,DWORD,DWORD);\nLONG WINAPI SHRegWriteUSValueW(HUSKEY,LPCWSTR,DWORD,LPVOID,DWORD,DWORD);\n#define SHRegWriteUSValue WINELIB_NAME_AW(SHRegWriteUSValue)\n\nLONG WINAPI SHRegDeleteUSValueA(HUSKEY,LPCSTR,SHREGDEL_FLAGS);\nLONG WINAPI SHRegDeleteUSValueW(HUSKEY,LPCWSTR,SHREGDEL_FLAGS);\n#define SHRegDeleteUSValue WINELIB_NAME_AW(SHRegDeleteUSValue)\n\nLONG WINAPI SHRegDeleteEmptyUSKeyA(HUSKEY,LPCSTR,SHREGDEL_FLAGS);\nLONG WINAPI SHRegDeleteEmptyUSKeyW(HUSKEY,LPCWSTR,SHREGDEL_FLAGS);\n#define SHRegDeleteEmptyUSKey WINELIB_NAME_AW(SHRegDeleteEmptyUSKey)\n\nLONG WINAPI SHRegEnumUSKeyA(HUSKEY,DWORD,LPSTR,LPDWORD,SHREGENUM_FLAGS);\nLONG WINAPI SHRegEnumUSKeyW(HUSKEY,DWORD,LPWSTR,LPDWORD,SHREGENUM_FLAGS);\n#define SHRegEnumUSKey WINELIB_NAME_AW(SHRegEnumUSKey)\n\nLONG WINAPI SHRegEnumUSValueA(HUSKEY,DWORD,LPSTR,LPDWORD,LPDWORD,\n                              LPVOID,LPDWORD,SHREGENUM_FLAGS);\nLONG WINAPI SHRegEnumUSValueW(HUSKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,\n                              LPVOID,LPDWORD,SHREGENUM_FLAGS);\n#define SHRegEnumUSValue WINELIB_NAME_AW(SHRegEnumUSValue)\n\nLONG WINAPI SHRegQueryInfoUSKeyA(HUSKEY,LPDWORD,LPDWORD,LPDWORD,\n                                 LPDWORD,SHREGENUM_FLAGS);\nLONG WINAPI SHRegQueryInfoUSKeyW(HUSKEY,LPDWORD,LPDWORD,LPDWORD,\n                                 LPDWORD,SHREGENUM_FLAGS);\n#define SHRegQueryInfoUSKey WINELIB_NAME_AW(SHRegQueryInfoUSKey)\n\nLONG WINAPI SHRegCloseUSKey(HUSKEY);\n\nLONG WINAPI SHRegGetUSValueA(LPCSTR,LPCSTR,LPDWORD,LPVOID,LPDWORD,\n                             BOOL,LPVOID,DWORD);\nLONG WINAPI SHRegGetUSValueW(LPCWSTR,LPCWSTR,LPDWORD,LPVOID,LPDWORD,\n                             BOOL,LPVOID,DWORD);\n#define SHRegGetUSValue WINELIB_NAME_AW(SHRegGetUSValue)\n\nLONG WINAPI SHRegSetUSValueA(LPCSTR,LPCSTR,DWORD,LPVOID,DWORD,DWORD);\nLONG WINAPI SHRegSetUSValueW(LPCWSTR,LPCWSTR,DWORD,LPVOID,DWORD,DWORD);\n#define SHRegSetUSValue WINELIB_NAME_AW(SHRegSetUSValue)\n\nBOOL WINAPI SHRegGetBoolUSValueA(LPCSTR,LPCSTR,BOOL,BOOL);\nBOOL WINAPI SHRegGetBoolUSValueW(LPCWSTR,LPCWSTR,BOOL,BOOL);\n#define SHRegGetBoolUSValue WINELIB_NAME_AW(SHRegGetBoolUSValue)\n\nint WINAPI SHRegGetIntW(HKEY,LPCWSTR,int);\n\n/* IQueryAssociation and helpers */\nenum\n{\n    ASSOCF_NONE                 = 0x0000,\n    ASSOCF_INIT_NOREMAPCLSID    = 0x0001, /* Don't map clsid->progid */\n    ASSOCF_INIT_BYEXENAME       = 0x0002, /* .exe name given */\n    ASSOCF_OPEN_BYEXENAME       = 0x0002, /* Synonym */\n    ASSOCF_INIT_DEFAULTTOSTAR   = 0x0004, /* Use * as base */\n    ASSOCF_INIT_DEFAULTTOFOLDER = 0x0008, /* Use folder as base */\n    ASSOCF_NOUSERSETTINGS       = 0x0010, /* No HKCU reads */\n    ASSOCF_NOTRUNCATE           = 0x0020, /* Don't truncate return */\n    ASSOCF_VERIFY               = 0x0040, /* Verify data */\n    ASSOCF_REMAPRUNDLL          = 0x0080, /* Get rundll args */\n    ASSOCF_NOFIXUPS             = 0x0100, /* Don't fixup errors */\n    ASSOCF_IGNOREBASECLASS      = 0x0200, /* Don't read baseclass */\n    ASSOCF_INIT_IGNOREUNKNOWN   = 0x0400, /* Fail for unknown progid */\n    ASSOCF_INIT_FIXED_PROGID    = 0x0800, /* Used passed string as progid, don't try to map it */\n    ASSOCF_IS_PROTOCOL          = 0x1000, /* Treat as protocol, that should be mapped */\n    ASSOCF_INIT_FOR_FILE        = 0x2000, /* progid is for file extension association */\n};\n\ntypedef DWORD ASSOCF;\n\ntypedef enum\n{\n    ASSOCSTR_COMMAND = 1,     /* Verb command */\n    ASSOCSTR_EXECUTABLE,      /* .exe from command string */\n    ASSOCSTR_FRIENDLYDOCNAME, /* Friendly doc type name */\n    ASSOCSTR_FRIENDLYAPPNAME, /* Friendly .exe name */\n    ASSOCSTR_NOOPEN,          /* noopen value */\n    ASSOCSTR_SHELLNEWVALUE,   /* Use shellnew key */\n    ASSOCSTR_DDECOMMAND,      /* DDE command template */\n    ASSOCSTR_DDEIFEXEC,       /* DDE command for process create */\n    ASSOCSTR_DDEAPPLICATION,  /* DDE app name */\n    ASSOCSTR_DDETOPIC,        /* DDE topic */\n    ASSOCSTR_INFOTIP,         /* Infotip */\n    ASSOCSTR_QUICKTIP,        /* Quick infotip */\n    ASSOCSTR_TILEINFO,        /* Properties for tileview */\n    ASSOCSTR_CONTENTTYPE,     /* Mimetype */\n    ASSOCSTR_DEFAULTICON,     /* Icon */\n    ASSOCSTR_SHELLEXTENSION,  /* GUID for shell extension handler */\n    ASSOCSTR_MAX\n} ASSOCSTR;\n\ntypedef enum\n{\n    ASSOCKEY_SHELLEXECCLASS = 1, /* Key for ShellExec */\n    ASSOCKEY_APP,                /* Application */\n    ASSOCKEY_CLASS,              /* Progid or class */\n    ASSOCKEY_BASECLASS,          /* Base class */\n    ASSOCKEY_MAX\n} ASSOCKEY;\n\ntypedef enum\n{\n    ASSOCDATA_MSIDESCRIPTOR = 1, /* Component descriptor */\n    ASSOCDATA_NOACTIVATEHANDLER, /* Don't activate */\n    ASSOCDATA_QUERYCLASSSTORE,   /* Look in Class Store */\n    ASSOCDATA_HASPERUSERASSOC,   /* Use user association */\n    ASSOCDATA_EDITFLAGS,         /* Edit flags */\n    ASSOCDATA_VALUE,             /* pszExtra is value */\n    ASSOCDATA_MAX\n} ASSOCDATA;\n\ntypedef enum\n{\n    ASSOCENUM_NONE\n} ASSOCENUM;\n\ntypedef struct IQueryAssociations *LPQUERYASSOCIATIONS;\n\n#define INTERFACE IQueryAssociations\nDECLARE_INTERFACE_(IQueryAssociations,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IQueryAssociations methods ***/\n    STDMETHOD(Init)(THIS_ ASSOCF  flags, LPCWSTR  pszAssoc, HKEY  hkProgid, HWND  hwnd) PURE;\n    STDMETHOD(GetString)(THIS_ ASSOCF  flags, ASSOCSTR  str, LPCWSTR  pszExtra, LPWSTR  pszOut, DWORD * pcchOut) PURE;\n    STDMETHOD(GetKey)(THIS_ ASSOCF  flags, ASSOCKEY  key, LPCWSTR  pszExtra, HKEY * phkeyOut) PURE;\n    STDMETHOD(GetData)(THIS_ ASSOCF  flags, ASSOCDATA  data, LPCWSTR  pszExtra, LPVOID  pvOut, DWORD * pcbOut) PURE;\n    STDMETHOD(GetEnum)(THIS_ ASSOCF  flags, ASSOCENUM  assocenum, LPCWSTR  pszExtra, REFIID  riid, LPVOID * ppvOut) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IQueryAssociations_QueryInterface(p,a,b)   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IQueryAssociations_AddRef(p)               (p)->lpVtbl->AddRef(p)\n#define IQueryAssociations_Release(p)              (p)->lpVtbl->Release(p)\n#define IQueryAssociations_Init(p,a,b,c,d)         (p)->lpVtbl->Init(p,a,b,c,d)\n#define IQueryAssociations_GetString(p,a,b,c,d,e)  (p)->lpVtbl->GetString(p,a,b,c,d,e)\n#define IQueryAssociations_GetKey(p,a,b,c,d)       (p)->lpVtbl->GetKey(p,a,b,c,d)\n#define IQueryAssociations_GetData(p,a,b,c,d,e)    (p)->lpVtbl->GetData(p,a,b,c,d,e)\n#define IQueryAssociations_GetEnum(p,a,b,c,d,e)    (p)->lpVtbl->GetEnum(p,a,b,c,d,e)\n#endif\n\nHRESULT WINAPI AssocCreate(CLSID,REFIID,LPVOID*);\n\nHRESULT WINAPI AssocQueryStringA(ASSOCF,ASSOCSTR,LPCSTR,LPCSTR,LPSTR,LPDWORD);\nHRESULT WINAPI AssocQueryStringW(ASSOCF,ASSOCSTR,LPCWSTR,LPCWSTR,LPWSTR,LPDWORD);\n#define AssocQueryString WINELIB_NAME_AW(AssocQueryString)\n\nHRESULT WINAPI AssocQueryStringByKeyA(ASSOCF,ASSOCSTR,HKEY,LPCSTR,LPSTR,LPDWORD);\nHRESULT WINAPI AssocQueryStringByKeyW(ASSOCF,ASSOCSTR,HKEY,LPCWSTR,LPWSTR,LPDWORD);\n#define AssocQueryStringByKey WINELIB_NAME_AW(AssocQueryStringByKey)\n\nHRESULT WINAPI AssocQueryKeyA(ASSOCF,ASSOCKEY,LPCSTR,LPCSTR,PHKEY);\nHRESULT WINAPI AssocQueryKeyW(ASSOCF,ASSOCKEY,LPCWSTR,LPCWSTR,PHKEY);\n#define AssocQueryKey WINELIB_NAME_AW(AssocQueryKey)\n\nBOOL WINAPI AssocIsDangerous(LPCWSTR);\n\n#endif /* NO_SHLWAPI_REG */\n\nvoid WINAPI IUnknown_Set(IUnknown **ppunk, IUnknown *punk);\nvoid WINAPI IUnknown_AtomicRelease(IUnknown **punk);\nHRESULT WINAPI IUnknown_GetWindow(IUnknown *punk, HWND *phwnd);\nHRESULT WINAPI IUnknown_SetSite(IUnknown *punk, IUnknown *punkSite);\nHRESULT WINAPI IUnknown_GetSite(IUnknown *punk, REFIID riid, void **ppv);\nHRESULT WINAPI IUnknown_QueryService(IUnknown *punk, REFGUID guidService, REFIID riid, void **ppvOut);\n\n/* Path functions */\n#ifndef NO_SHLWAPI_PATH\n\n/* GetPathCharType return flags */\n#define GCT_INVALID     0x0\n#define GCT_LFNCHAR     0x1\n#define GCT_SHORTCHAR   0x2\n#define GCT_WILD        0x4\n#define GCT_SEPARATOR   0x8\n\nLPSTR  WINAPI PathAddBackslashA(LPSTR);\nLPWSTR WINAPI PathAddBackslashW(LPWSTR);\n#define PathAddBackslash WINELIB_NAME_AW(PathAddBackslash)\n\nBOOL WINAPI PathAddExtensionA(LPSTR,LPCSTR);\nBOOL WINAPI PathAddExtensionW(LPWSTR,LPCWSTR);\n#define PathAddExtension WINELIB_NAME_AW(PathAddExtension)\n\nBOOL WINAPI PathAppendA(LPSTR,LPCSTR);\nBOOL WINAPI PathAppendW(LPWSTR,LPCWSTR);\n#define PathAppend WINELIB_NAME_AW(PathAppend)\n\nLPSTR  WINAPI PathBuildRootA(LPSTR,int);\nLPWSTR WINAPI PathBuildRootW(LPWSTR,int);\n#define PathBuildRoot WINELIB_NAME_AW(PathBuiltRoot)\n\nBOOL WINAPI PathCanonicalizeA(LPSTR,LPCSTR);\nBOOL WINAPI PathCanonicalizeW(LPWSTR,LPCWSTR);\n#define PathCanonicalize WINELIB_NAME_AW(PathCanonicalize)\n\nLPSTR  WINAPI PathCombineA(LPSTR,LPCSTR,LPCSTR);\nLPWSTR WINAPI PathCombineW(LPWSTR,LPCWSTR,LPCWSTR);\n#define PathCombine WINELIB_NAME_AW(PathCombine)\n\nBOOL WINAPI PathCompactPathA(HDC,LPSTR,UINT);\nBOOL WINAPI PathCompactPathW(HDC,LPWSTR,UINT);\n#define PathCompactPath WINELIB_NAME_AW(PathCompactPath)\n\nBOOL WINAPI PathCompactPathExA(LPSTR,LPCSTR,UINT,DWORD);\nBOOL WINAPI PathCompactPathExW(LPWSTR,LPCWSTR,UINT,DWORD);\n#define PathCompactPathEx WINELIB_NAME_AW(PathCompactPathEx)\n\nint WINAPI PathCommonPrefixA(LPCSTR,LPCSTR,LPSTR);\nint WINAPI PathCommonPrefixW(LPCWSTR,LPCWSTR,LPWSTR);\n#define PathCommonPrefix WINELIB_NAME_AW(PathCommonPrefix)\n\nHRESULT WINAPI PathCreateFromUrlA(LPCSTR,LPSTR,LPDWORD,DWORD);\nHRESULT WINAPI PathCreateFromUrlW(LPCWSTR,LPWSTR,LPDWORD,DWORD);\n#define PathCreateFromUrl WINELIB_NAME_AW(PathCreateFromUrl)\n\nHRESULT WINAPI PathCreateFromUrlAlloc(LPCWSTR,LPWSTR*,DWORD);\n\nBOOL WINAPI PathFileExistsA(LPCSTR);\nBOOL WINAPI PathFileExistsW(LPCWSTR);\n#define PathFileExists WINELIB_NAME_AW(PathFileExists)\n\nBOOL WINAPI PathFileExistsAndAttributesA(LPCSTR,DWORD*);\nBOOL WINAPI PathFileExistsAndAttributesW(LPCWSTR,DWORD*);\n#define PathFileExistsAndAttributes WINELIB_NAME_AW(PathFileExistsAndAttributes)\n\nLPSTR  WINAPI PathFindExtensionA(LPCSTR);\nLPWSTR WINAPI PathFindExtensionW(LPCWSTR);\n#define PathFindExtension WINELIB_NAME_AW(PathFindExtension)\n\nLPSTR  WINAPI PathFindFileNameA(LPCSTR);\nLPWSTR WINAPI PathFindFileNameW(LPCWSTR);\n#define PathFindFileName WINELIB_NAME_AW(PathFindFileName)\n\nLPSTR  WINAPI PathFindNextComponentA(LPCSTR);\nLPWSTR WINAPI PathFindNextComponentW(LPCWSTR);\n#define PathFindNextComponent WINELIB_NAME_AW(PathFindNextComponent)\n\nBOOL WINAPI PathFindOnPathA(LPSTR,LPCSTR*);\nBOOL WINAPI PathFindOnPathW(LPWSTR,LPCWSTR*);\n#define PathFindOnPath WINELIB_NAME_AW(PathFindOnPath)\n\nLPSTR  WINAPI PathGetArgsA(LPCSTR);\nLPWSTR WINAPI PathGetArgsW(LPCWSTR);\n#define PathGetArgs WINELIB_NAME_AW(PathGetArgs)\n\nUINT WINAPI PathGetCharTypeA(UCHAR);\nUINT WINAPI PathGetCharTypeW(WCHAR);\n#define PathGetCharType WINELIB_NAME_AW(PathGetCharType)\n\nint WINAPI PathGetDriveNumberA(LPCSTR);\nint WINAPI PathGetDriveNumberW(LPCWSTR);\n#define PathGetDriveNumber WINELIB_NAME_AW(PathGetDriveNumber)\n\nBOOL WINAPI PathIsDirectoryA(LPCSTR);\nBOOL WINAPI PathIsDirectoryW(LPCWSTR);\n#define PathIsDirectory WINELIB_NAME_AW(PathIsDirectory)\n\nBOOL WINAPI PathIsDirectoryEmptyA(LPCSTR);\nBOOL WINAPI PathIsDirectoryEmptyW(LPCWSTR);\n#define PathIsDirectoryEmpty WINELIB_NAME_AW(PathIsDirectoryEmpty)\n\nBOOL WINAPI PathIsFileSpecA(LPCSTR);\nBOOL WINAPI PathIsFileSpecW(LPCWSTR);\n#define PathIsFileSpec WINELIB_NAME_AW(PathIsFileSpec)\n\nBOOL WINAPI PathIsPrefixA(LPCSTR,LPCSTR);\nBOOL WINAPI PathIsPrefixW(LPCWSTR,LPCWSTR);\n#define PathIsPrefix WINELIB_NAME_AW(PathIsPrefix)\n\nBOOL WINAPI PathIsRelativeA(LPCSTR);\nBOOL WINAPI PathIsRelativeW(LPCWSTR);\n#define PathIsRelative WINELIB_NAME_AW(PathIsRelative)\n\nBOOL WINAPI PathIsRootA(LPCSTR);\nBOOL WINAPI PathIsRootW(LPCWSTR);\n#define PathIsRoot WINELIB_NAME_AW(PathIsRoot)\n\nBOOL WINAPI PathIsSameRootA(LPCSTR,LPCSTR);\nBOOL WINAPI PathIsSameRootW(LPCWSTR,LPCWSTR);\n#define PathIsSameRoot WINELIB_NAME_AW(PathIsSameRoot)\n\nBOOL WINAPI PathIsUNCA(LPCSTR);\nBOOL WINAPI PathIsUNCW(LPCWSTR);\n#define PathIsUNC WINELIB_NAME_AW(PathIsUNC)\n\nBOOL WINAPI PathIsUNCServerA(LPCSTR);\nBOOL WINAPI PathIsUNCServerW(LPCWSTR);\n#define PathIsUNCServer WINELIB_NAME_AW(PathIsUNCServer)\n\nBOOL WINAPI PathIsUNCServerShareA(LPCSTR);\nBOOL WINAPI PathIsUNCServerShareW(LPCWSTR);\n#define PathIsUNCServerShare WINELIB_NAME_AW(PathIsUNCServerShare)\n\nBOOL WINAPI PathIsContentTypeA(LPCSTR,LPCSTR);\nBOOL WINAPI PathIsContentTypeW(LPCWSTR,LPCWSTR);\n#define PathIsContentType WINELIB_NAME_AW(PathIsContentType)\n\nBOOL WINAPI PathIsURLA(LPCSTR);\nBOOL WINAPI PathIsURLW(LPCWSTR);\n#define PathIsURL WINELIB_NAME_AW(PathIsURL)\n\nBOOL WINAPI PathMakePrettyA(LPSTR);\nBOOL WINAPI PathMakePrettyW(LPWSTR);\n#define PathMakePretty WINELIB_NAME_AW(PathMakePretty)\n\nBOOL WINAPI PathMatchSpecA(LPCSTR,LPCSTR);\nBOOL WINAPI PathMatchSpecW(LPCWSTR,LPCWSTR);\n#define PathMatchSpec WINELIB_NAME_AW(PathMatchSpec)\n\nint WINAPI PathParseIconLocationA(LPSTR);\nint WINAPI PathParseIconLocationW(LPWSTR);\n#define PathParseIconLocation WINELIB_NAME_AW(PathParseIconLocation)\n\nVOID WINAPI PathQuoteSpacesA(LPSTR);\nVOID WINAPI PathQuoteSpacesW(LPWSTR);\n#define PathQuoteSpaces WINELIB_NAME_AW(PathQuoteSpaces)\n\nBOOL WINAPI PathRelativePathToA(LPSTR,LPCSTR,DWORD,LPCSTR,DWORD);\nBOOL WINAPI PathRelativePathToW(LPWSTR,LPCWSTR,DWORD,LPCWSTR,DWORD);\n#define PathRelativePathTo WINELIB_NAME_AW(PathRelativePathTo)\n\nVOID WINAPI PathRemoveArgsA(LPSTR);\nVOID WINAPI PathRemoveArgsW(LPWSTR);\n#define PathRemoveArgs WINELIB_NAME_AW(PathRemoveArgs)\n\nLPSTR  WINAPI PathRemoveBackslashA(LPSTR);\nLPWSTR WINAPI PathRemoveBackslashW(LPWSTR);\n#define PathRemoveBackslash WINELIB_NAME_AW(PathRemoveBackslash)\n\nVOID WINAPI PathRemoveBlanksA(LPSTR);\nVOID WINAPI PathRemoveBlanksW(LPWSTR);\n#define PathRemoveBlanks WINELIB_NAME_AW(PathRemoveBlanks)\n\nVOID WINAPI PathRemoveExtensionA(LPSTR);\nVOID WINAPI PathRemoveExtensionW(LPWSTR);\n#define PathRemoveExtension WINELIB_NAME_AW(PathRemoveExtension)\n\nBOOL WINAPI PathRemoveFileSpecA(LPSTR);\nBOOL WINAPI PathRemoveFileSpecW(LPWSTR);\n#define PathRemoveFileSpec WINELIB_NAME_AW(PathRemoveFileSpec)\n\nBOOL WINAPI PathRenameExtensionA(LPSTR,LPCSTR);\nBOOL WINAPI PathRenameExtensionW(LPWSTR,LPCWSTR);\n#define PathRenameExtension WINELIB_NAME_AW(PathRenameExtension)\n\nBOOL WINAPI PathSearchAndQualifyA(LPCSTR,LPSTR,UINT);\nBOOL WINAPI PathSearchAndQualifyW(LPCWSTR,LPWSTR,UINT);\n#define PathSearchAndQualify WINELIB_NAME_AW(PathSearchAndQualify)\n\nVOID WINAPI PathSetDlgItemPathA(HWND,int,LPCSTR);\nVOID WINAPI PathSetDlgItemPathW(HWND,int,LPCWSTR);\n#define PathSetDlgItemPath WINELIB_NAME_AW(PathSetDlgItemPath)\n\nLPSTR  WINAPI PathSkipRootA(LPCSTR);\nLPWSTR WINAPI PathSkipRootW(LPCWSTR);\n#define PathSkipRoot WINELIB_NAME_AW(PathSkipRoot)\n\nVOID WINAPI PathStripPathA(LPSTR);\nVOID WINAPI PathStripPathW(LPWSTR);\n#define PathStripPath WINELIB_NAME_AW(PathStripPath)\n\nBOOL WINAPI PathStripToRootA(LPSTR);\nBOOL WINAPI PathStripToRootW(LPWSTR);\n#define PathStripToRoot WINELIB_NAME_AW(PathStripToRoot)\n\nVOID WINAPI PathUnquoteSpacesA(LPSTR);\nVOID WINAPI PathUnquoteSpacesW(LPWSTR);\n#define PathUnquoteSpaces WINELIB_NAME_AW(PathUnquoteSpaces)\n\nBOOL WINAPI PathMakeSystemFolderA(LPCSTR);\nBOOL WINAPI PathMakeSystemFolderW(LPCWSTR);\n#define PathMakeSystemFolder WINELIB_NAME_AW(PathMakeSystemFolder)\n\nBOOL WINAPI PathUnmakeSystemFolderA(LPCSTR);\nBOOL WINAPI PathUnmakeSystemFolderW(LPCWSTR);\n#define PathUnmakeSystemFolder WINELIB_NAME_AW(PathUnmakeSystemFolder)\n\nBOOL WINAPI PathIsSystemFolderA(LPCSTR,DWORD);\nBOOL WINAPI PathIsSystemFolderW(LPCWSTR,DWORD);\n#define PathIsSystemFolder WINELIB_NAME_AW(PathIsSystemFolder)\n\nBOOL WINAPI PathIsNetworkPathA(LPCSTR);\nBOOL WINAPI PathIsNetworkPathW(LPCWSTR);\n#define PathIsNetworkPath WINELIB_NAME_AW(PathIsNetworkPath)\n\nBOOL WINAPI PathIsLFNFileSpecA(LPCSTR);\nBOOL WINAPI PathIsLFNFileSpecW(LPCWSTR);\n#define PathIsLFNFileSpec WINELIB_NAME_AW(PathIsLFNFileSpec)\n\nLPCSTR WINAPI PathFindSuffixArrayA(LPCSTR,LPCSTR *,int);\nLPCWSTR WINAPI PathFindSuffixArrayW(LPCWSTR,LPCWSTR *,int);\n#define PathFindSuffixArray WINELIB_NAME_AW(PathFindSuffixArray)\n\nVOID WINAPI PathUndecorateA(LPSTR);\nVOID WINAPI PathUndecorateW(LPWSTR);\n#define PathUndecorate WINELIB_NAME_AW(PathUndecorate)\n\nBOOL WINAPI PathUnExpandEnvStringsA(LPCSTR,LPSTR,UINT);\nBOOL WINAPI PathUnExpandEnvStringsW(LPCWSTR,LPWSTR,UINT);\n#define PathUnExpandEnvStrings WINELIB_NAME_AW(PathUnExpandEnvStrings)\n\n/* Url functions */\ntypedef enum {\n    URL_SCHEME_INVALID     = -1,\n    URL_SCHEME_UNKNOWN     =  0,\n    URL_SCHEME_FTP,\n    URL_SCHEME_HTTP,\n    URL_SCHEME_GOPHER,\n    URL_SCHEME_MAILTO,\n    URL_SCHEME_NEWS,\n    URL_SCHEME_NNTP,\n    URL_SCHEME_TELNET,\n    URL_SCHEME_WAIS,\n    URL_SCHEME_FILE,\n    URL_SCHEME_MK,\n    URL_SCHEME_HTTPS,\n    URL_SCHEME_SHELL,\n    URL_SCHEME_SNEWS,\n    URL_SCHEME_LOCAL,\n    URL_SCHEME_JAVASCRIPT,\n    URL_SCHEME_VBSCRIPT,\n    URL_SCHEME_ABOUT,\n    URL_SCHEME_RES,\n    URL_SCHEME_MSSHELLROOTED,\n    URL_SCHEME_MSSHELLIDLIST,\n    URL_SCHEME_MSHELP,\n    URL_SCHEME_MSSHELLDEVICE,\n    URL_SCHEME_WILDCARD,\n    URL_SCHEME_SEARCH_MS,\n    URL_SCHEME_SEARCH,\n    URL_SCHEME_KNOWNFOLDER,\n    URL_SCHEME_MAXVALUE\n} URL_SCHEME;\n\n/* These are used by UrlGetPart routine */\ntypedef enum {\n    URL_PART_NONE    = 0,\n    URL_PART_SCHEME  = 1,\n    URL_PART_HOSTNAME,\n    URL_PART_USERNAME,\n    URL_PART_PASSWORD,\n    URL_PART_PORT,\n    URL_PART_QUERY\n} URL_PART;\n\n#define URL_PARTFLAG_KEEPSCHEME  0x00000001\n\n/* These are used by the UrlIs... routines */\ntypedef enum {\n    URLIS_URL,\n    URLIS_OPAQUE,\n    URLIS_NOHISTORY,\n    URLIS_FILEURL,\n    URLIS_APPLIABLE,\n    URLIS_DIRECTORY,\n    URLIS_HASQUERY\n} URLIS;\n\n/* This is used by the UrlApplyScheme... routines */\n#define URL_APPLY_FORCEAPPLY         0x00000008\n#define URL_APPLY_GUESSFILE          0x00000004\n#define URL_APPLY_GUESSSCHEME        0x00000002\n#define URL_APPLY_DEFAULT            0x00000001\n\n/* The following are used by UrlEscape..., UrlUnEscape...,\n * UrlCanonicalize..., and UrlCombine... routines\n */\n#define URL_WININET_COMPATIBILITY    0x80000000\n#define URL_PLUGGABLE_PROTOCOL       0x40000000\n#define URL_ESCAPE_UNSAFE            0x20000000\n#define URL_UNESCAPE                 0x10000000\n\n#define URL_DONT_SIMPLIFY            0x08000000\n#define URL_NO_META                  URL_DONT_SIMPLIFY\n#define URL_ESCAPE_SPACES_ONLY       0x04000000\n#define URL_DONT_ESCAPE_EXTRA_INFO   0x02000000\n#define URL_DONT_UNESCAPE_EXTRA_INFO URL_DONT_ESCAPE_EXTRA_INFO\n#define URL_BROWSER_MODE             URL_DONT_ESCAPE_EXTRA_INFO\n\n#define URL_INTERNAL_PATH            0x00800000  /* Will escape #'s in paths */\n#define URL_UNESCAPE_HIGH_ANSI_ONLY  0x00400000\n#define URL_CONVERT_IF_DOSPATH       0x00200000\n#define URL_UNESCAPE_INPLACE         0x00100000\n\n#define URL_FILE_USE_PATHURL         0x00010000\n#define URL_ESCAPE_AS_UTF8           0x00040000\n\n#define URL_ESCAPE_SEGMENT_ONLY      0x00002000\n#define URL_ESCAPE_PERCENT           0x00001000\n\nHRESULT WINAPI UrlApplySchemeA(LPCSTR,LPSTR,LPDWORD,DWORD);\nHRESULT WINAPI UrlApplySchemeW(LPCWSTR,LPWSTR,LPDWORD,DWORD);\n#define UrlApplyScheme WINELIB_NAME_AW(UrlApplyScheme)\n\nHRESULT WINAPI UrlCanonicalizeA(LPCSTR,LPSTR,LPDWORD,DWORD);\nHRESULT WINAPI UrlCanonicalizeW(LPCWSTR,LPWSTR,LPDWORD,DWORD);\n#define UrlCanonicalize WINELIB_NAME_AW(UrlCanonicalize)\n\nHRESULT WINAPI UrlCombineA(LPCSTR,LPCSTR,LPSTR,LPDWORD,DWORD);\nHRESULT WINAPI UrlCombineW(LPCWSTR,LPCWSTR,LPWSTR,LPDWORD,DWORD);\n#define UrlCombine WINELIB_NAME_AW(UrlCombine)\n\nINT WINAPI UrlCompareA(LPCSTR,LPCSTR,BOOL);\nINT WINAPI UrlCompareW(LPCWSTR,LPCWSTR,BOOL);\n#define UrlCompare WINELIB_NAME_AW(UrlCompare)\n\nHRESULT WINAPI UrlEscapeA(LPCSTR,LPSTR,LPDWORD,DWORD);\nHRESULT WINAPI UrlEscapeW(LPCWSTR,LPWSTR,LPDWORD,DWORD);\n#define UrlEscape WINELIB_NAME_AW(UrlEscape)\n\n#define UrlEscapeSpacesA(x,y,z) UrlCanonicalizeA(x, y, z, \\\n                         URL_DONT_ESCAPE_EXTRA_INFO|URL_ESCAPE_SPACES_ONLY)\n#define UrlEscapeSpacesW(x,y,z) UrlCanonicalizeW(x, y, z, \\\n                         URL_DONT_ESCAPE_EXTRA_INFO|URL_ESCAPE_SPACES_ONLY)\n#define UrlEscapeSpaces WINELIB_NAME_AW(UrlEscapeSpaces)\n\nLPCSTR  WINAPI UrlGetLocationA(LPCSTR);\nLPCWSTR WINAPI UrlGetLocationW(LPCWSTR);\n#define UrlGetLocation WINELIB_NAME_AW(UrlGetLocation)\n\nHRESULT WINAPI UrlGetPartA(LPCSTR,LPSTR,LPDWORD,DWORD,DWORD);\nHRESULT WINAPI UrlGetPartW(LPCWSTR,LPWSTR,LPDWORD,DWORD,DWORD);\n#define UrlGetPart WINELIB_NAME_AW(UrlGetPart)\n\nHRESULT WINAPI HashData(const unsigned char *,DWORD,unsigned char *lpDest,DWORD);\n\nHRESULT WINAPI UrlHashA(LPCSTR,unsigned char *,DWORD);\nHRESULT WINAPI UrlHashW(LPCWSTR,unsigned char *,DWORD);\n#define UrlHash WINELIB_NAME_AW(UrlHash)\n\nBOOL    WINAPI UrlIsA(LPCSTR,URLIS);\nBOOL    WINAPI UrlIsW(LPCWSTR,URLIS);\n#define UrlIs WINELIB_NAME_AW(UrlIs)\n\nBOOL    WINAPI UrlIsNoHistoryA(LPCSTR);\nBOOL    WINAPI UrlIsNoHistoryW(LPCWSTR);\n#define UrlIsNoHistory WINELIB_NAME_AW(UrlIsNoHistory)\n\nBOOL    WINAPI UrlIsOpaqueA(LPCSTR);\nBOOL    WINAPI UrlIsOpaqueW(LPCWSTR);\n#define UrlIsOpaque WINELIB_NAME_AW(UrlIsOpaque)\n\n#define UrlIsFileUrlA(x) UrlIsA(x, URLIS_FILEURL)\n#define UrlIsFileUrlW(x) UrlIsW(x, URLIS_FILEURL)\n#define UrlIsFileUrl WINELIB_NAME_AW(UrlIsFileUrl)\n\nHRESULT WINAPI UrlUnescapeA(LPSTR,LPSTR,LPDWORD,DWORD);\nHRESULT WINAPI UrlUnescapeW(LPWSTR,LPWSTR,LPDWORD,DWORD);\n#define UrlUnescape WINELIB_NAME_AW(UrlUnescape)\n\n#define UrlUnescapeInPlaceA(x,y) UrlUnescapeA(x, NULL, NULL, \\\n                                              y | URL_UNESCAPE_INPLACE)\n#define UrlUnescapeInPlaceW(x,y) UrlUnescapeW(x, NULL, NULL, \\\n                                              y | URL_UNESCAPE_INPLACE)\n#define UrlUnescapeInPlace WINELIB_NAME_AW(UrlUnescapeInPlace)\n\nHRESULT WINAPI UrlCreateFromPathA(LPCSTR,LPSTR,LPDWORD,DWORD);\nHRESULT WINAPI UrlCreateFromPathW(LPCWSTR,LPWSTR,LPDWORD,DWORD);\n#define UrlCreateFromPath WINELIB_NAME_AW(UrlCreateFromPath)\n\ntypedef struct tagPARSEDURLA {\n    DWORD cbSize;\n    LPCSTR pszProtocol;\n    UINT cchProtocol;\n    LPCSTR pszSuffix;\n    UINT cchSuffix;\n    UINT nScheme;\n} PARSEDURLA, *PPARSEDURLA;\n\ntypedef struct tagPARSEDURLW {\n    DWORD cbSize;\n    LPCWSTR pszProtocol;\n    UINT cchProtocol;\n    LPCWSTR pszSuffix;\n    UINT cchSuffix;\n    UINT nScheme;\n} PARSEDURLW, *PPARSEDURLW;\n\nHRESULT WINAPI ParseURLA(LPCSTR pszUrl, PARSEDURLA *ppu);\nHRESULT WINAPI ParseURLW(LPCWSTR pszUrl, PARSEDURLW *ppu);\n#define ParseURL WINELIB_NAME_AW(ParseUrl)\n\n#endif /* NO_SHLWAPI_PATH */\n\n\n/* String functions */\n#ifndef NO_SHLWAPI_STRFCNS\n\n/* StrToIntEx flags */\n#define STIF_DEFAULT     __MSABI_LONG(0x0)\n#define STIF_SUPPORT_HEX __MSABI_LONG(0x1)\n\nBOOL WINAPI ChrCmpIA (WORD,WORD);\nBOOL WINAPI ChrCmpIW (WCHAR,WCHAR);\n#define ChrCmpI WINELIB_NAME_AW(ChrCmpI)\n\nINT WINAPI StrCSpnA(LPCSTR,LPCSTR);\nINT WINAPI StrCSpnW(LPCWSTR,LPCWSTR);\n#define StrCSpn WINELIB_NAME_AW(StrCSpn)\n\nINT WINAPI StrCSpnIA(LPCSTR,LPCSTR);\nINT WINAPI StrCSpnIW(LPCWSTR,LPCWSTR);\n#define StrCSpnI WINELIB_NAME_AW(StrCSpnI)\n\n#define StrCatA lstrcatA\nLPWSTR WINAPI StrCatW(LPWSTR,LPCWSTR);\n#define StrCat WINELIB_NAME_AW(StrCat)\n\nLPSTR WINAPI StrCatBuffA(LPSTR,LPCSTR,INT);\nLPWSTR WINAPI StrCatBuffW(LPWSTR,LPCWSTR,INT);\n#define StrCatBuff WINELIB_NAME_AW(StrCatBuff)\n\nDWORD WINAPI StrCatChainW(LPWSTR,DWORD,DWORD,LPCWSTR);\n\nLPSTR WINAPI StrChrA(LPCSTR,WORD);\nLPWSTR WINAPI StrChrW(LPCWSTR,WCHAR);\n#define StrChr WINELIB_NAME_AW(StrChr)\n\nLPSTR WINAPI StrChrIA(LPCSTR,WORD);\nLPWSTR WINAPI StrChrIW(LPCWSTR,WCHAR);\n#define StrChrI WINELIB_NAME_AW(StrChrI)\n\n#define StrCmpA lstrcmpA\nint WINAPI StrCmpW(LPCWSTR,LPCWSTR);\n#define StrCmp WINELIB_NAME_AW(StrCmp)\n\n#define StrCmpIA lstrcmpiA\nint WINAPI StrCmpIW(LPCWSTR,LPCWSTR);\n#define StrCmpI WINELIB_NAME_AW(StrCmpI)\n\n#define StrCpyA lstrcpyA\nLPWSTR WINAPI StrCpyW(LPWSTR,LPCWSTR);\n#define StrCpy WINELIB_NAME_AW(StrCpy)\n\n#define StrCpyNA lstrcpynA\nLPWSTR WINAPI StrCpyNW(LPWSTR,LPCWSTR,int);\n#define StrCpyN WINELIB_NAME_AW(StrCpyN)\n#define StrNCpy WINELIB_NAME_AW(StrCpyN)\n\nINT WINAPI StrCmpLogicalW(LPCWSTR,LPCWSTR);\n\nINT WINAPI StrCmpNA(LPCSTR,LPCSTR,INT);\nINT WINAPI StrCmpNW(LPCWSTR,LPCWSTR,INT);\n#define StrCmpN WINELIB_NAME_AW(StrCmpN)\n#define StrNCmp WINELIB_NAME_AW(StrCmpN)\n\nINT WINAPI StrCmpNIA(LPCSTR,LPCSTR,INT);\nINT WINAPI StrCmpNIW(LPCWSTR,LPCWSTR,INT);\n#define StrCmpNI WINELIB_NAME_AW(StrCmpNI)\n#define StrNCmpI WINELIB_NAME_AW(StrCmpNI)\n\nLPSTR WINAPI StrDupA(LPCSTR);\nLPWSTR WINAPI StrDupW(LPCWSTR);\n#define StrDup WINELIB_NAME_AW(StrDup)\n\nHRESULT WINAPI SHStrDupA(LPCSTR,WCHAR**);\nHRESULT WINAPI SHStrDupW(LPCWSTR,WCHAR**);\n#define SHStrDup WINELIB_NAME_AW(SHStrDup)\n\nLPSTR WINAPI StrFormatByteSizeA (DWORD,LPSTR,UINT);\n\n/* A/W Pairing is broken for this function */\nLPSTR WINAPI StrFormatByteSize64A (LONGLONG,LPSTR,UINT);\nLPWSTR WINAPI StrFormatByteSizeW (LONGLONG,LPWSTR,UINT);\n#ifndef WINE_NO_UNICODE_MACROS\n#ifdef UNICODE\n#define StrFormatByteSize StrFormatByteSizeW\n#else\n#define StrFormatByteSize StrFormatByteSize64A\n#endif\n#endif\n\nLPSTR WINAPI StrFormatKBSizeA(LONGLONG,LPSTR,UINT);\nLPWSTR WINAPI StrFormatKBSizeW(LONGLONG,LPWSTR,UINT);\n#define StrFormatKBSize WINELIB_NAME_AW(StrFormatKBSize)\n\nint WINAPI StrFromTimeIntervalA(LPSTR,UINT,DWORD,int);\nint WINAPI StrFromTimeIntervalW(LPWSTR,UINT,DWORD,int);\n#define StrFromTimeInterval WINELIB_NAME_AW(StrFromTimeInterval)\n\nBOOL WINAPI StrIsIntlEqualA(BOOL,LPCSTR,LPCSTR,int);\nBOOL WINAPI StrIsIntlEqualW(BOOL,LPCWSTR,LPCWSTR,int);\n#define StrIsIntlEqual WINELIB_NAME_AW(StrIsIntlEqual)\n\n#define StrIntlEqNA(a,b,c) StrIsIntlEqualA(TRUE,a,b,c)\n#define StrIntlEqNW(a,b,c) StrIsIntlEqualW(TRUE,a,b,c)\n\n#define StrIntlEqNIA(a,b,c) StrIsIntlEqualA(FALSE,a,b,c)\n#define StrIntlEqNIW(a,b,c) StrIsIntlEqualW(FALSE,a,b,c)\n\nLPSTR  WINAPI StrNCatA(LPSTR,LPCSTR,int);\nLPWSTR WINAPI StrNCatW(LPWSTR,LPCWSTR,int);\n#define StrNCat WINELIB_NAME_AW(StrNCat)\n#define StrCatN WINELIB_NAME_AW(StrNCat)\n\nLPSTR  WINAPI StrPBrkA(LPCSTR,LPCSTR);\nLPWSTR WINAPI StrPBrkW(LPCWSTR,LPCWSTR);\n#define StrPBrk WINELIB_NAME_AW(StrPBrk)\n\nLPSTR  WINAPI StrRChrA(LPCSTR,LPCSTR,WORD);\nLPWSTR WINAPI StrRChrW(LPCWSTR,LPCWSTR,WORD);\n#define StrRChr WINELIB_NAME_AW(StrRChr)\n\nLPSTR  WINAPI StrRChrIA(LPCSTR,LPCSTR,WORD);\nLPWSTR WINAPI StrRChrIW(LPCWSTR,LPCWSTR,WORD);\n#define StrRChrI WINELIB_NAME_AW(StrRChrI)\n\nLPSTR  WINAPI StrRStrIA(LPCSTR,LPCSTR,LPCSTR);\nLPWSTR WINAPI StrRStrIW(LPCWSTR,LPCWSTR,LPCWSTR);\n#define StrRStrI WINELIB_NAME_AW(StrRStrI)\n\nint WINAPI StrSpnA(LPCSTR,LPCSTR);\nint WINAPI StrSpnW(LPCWSTR,LPCWSTR);\n#define StrSpn WINELIB_NAME_AW(StrSpn)\n\nLPSTR  WINAPI StrStrA(LPCSTR,LPCSTR);\nLPWSTR WINAPI StrStrW(LPCWSTR,LPCWSTR);\n#define StrStr WINELIB_NAME_AW(StrStr)\n\nLPSTR  WINAPI StrStrIA(LPCSTR,LPCSTR);\nLPWSTR WINAPI StrStrIW(LPCWSTR,LPCWSTR);\n#define StrStrI WINELIB_NAME_AW(StrStrI)\n\nLPWSTR WINAPI StrStrNW(LPCWSTR,LPCWSTR,UINT);\nLPWSTR WINAPI StrStrNIW(LPCWSTR,LPCWSTR,UINT);\n\nint WINAPI StrToIntA(LPCSTR);\nint WINAPI StrToIntW(LPCWSTR);\n#define StrToInt WINELIB_NAME_AW(StrToInt)\n#define StrToLong WINELIB_NAME_AW(StrToInt)\n\nBOOL WINAPI StrToIntExA(LPCSTR,DWORD,int*);\nBOOL WINAPI StrToIntExW(LPCWSTR,DWORD,int*);\n#define StrToIntEx WINELIB_NAME_AW(StrToIntEx)\n\nBOOL WINAPI StrToInt64ExA(LPCSTR,DWORD,LONGLONG*);\nBOOL WINAPI StrToInt64ExW(LPCWSTR,DWORD,LONGLONG*);\n#define StrToIntEx64 WINELIB_NAME_AW(StrToIntEx64)\n\nBOOL WINAPI StrTrimA(LPSTR,LPCSTR);\nBOOL WINAPI StrTrimW(LPWSTR,LPCWSTR);\n#define StrTrim WINELIB_NAME_AW(StrTrim)\n\nINT WINAPI wvnsprintfA(LPSTR,INT,LPCSTR,__ms_va_list);\nINT WINAPI wvnsprintfW(LPWSTR,INT,LPCWSTR,__ms_va_list);\n#define wvnsprintf WINELIB_NAME_AW(wvnsprintf)\n\nINT WINAPIV wnsprintfA(LPSTR,INT,LPCSTR, ...);\nINT WINAPIV wnsprintfW(LPWSTR,INT,LPCWSTR, ...);\n#define wnsprintf WINELIB_NAME_AW(wnsprintf)\n\nHRESULT WINAPI SHLoadIndirectString(LPCWSTR,LPWSTR,UINT,PVOID*);\n\nBOOL WINAPI IntlStrEqWorkerA(BOOL,LPCSTR,LPCSTR,int);\nBOOL WINAPI IntlStrEqWorkerW(BOOL,LPCWSTR,LPCWSTR,int);\n#define IntlStrEqWorker WINELIB_NAME_AW(IntlStrEqWorker)\n\n#define IntlStrEqNA(s1,s2,n) IntlStrEqWorkerA(TRUE,s1,s2,n)\n#define IntlStrEqNW(s1,s2,n) IntlStrEqWorkerW(TRUE,s1,s2,n)\n#define IntlStrEqN WINELIB_NAME_AW(IntlStrEqN)\n\n#define IntlStrEqNIA(s1,s2,n) IntlStrEqWorkerA(FALSE,s1,s2,n)\n#define IntlStrEqNIW(s1,s2,n) IntlStrEqWorkerW(FALSE,s1,s2,n)\n#define IntlStrEqNI WINELIB_NAME_AW(IntlStrEqNI)\n\nHRESULT WINAPI StrRetToStrA(STRRET*,LPCITEMIDLIST,LPSTR*);\nHRESULT WINAPI StrRetToStrW(STRRET*,LPCITEMIDLIST,LPWSTR*);\n#define StrRetToStr WINELIB_NAME_AW(StrRetToStr)\n\nHRESULT WINAPI StrRetToBufA(STRRET*,LPCITEMIDLIST,LPSTR,UINT);\nHRESULT WINAPI StrRetToBufW(STRRET*,LPCITEMIDLIST,LPWSTR,UINT);\n#define StrRetToBuf WINELIB_NAME_AW(StrRetToBuf)\n\nHRESULT WINAPI StrRetToBSTR(STRRET*,LPCITEMIDLIST,BSTR*);\n\nBOOL WINAPI IsCharSpaceA(CHAR);\nBOOL WINAPI IsCharSpaceW(WCHAR);\n#define IsCharSpace WINELIB_NAME_AW(IsCharSpace)\n\n#endif /* NO_SHLWAPI_STRFCNS */\n\n\n/* GDI functions */\n#ifndef NO_SHLWAPI_GDI\n\nHPALETTE WINAPI SHCreateShellPalette(HDC);\n\nCOLORREF WINAPI ColorHLSToRGB(WORD,WORD,WORD);\n\nCOLORREF WINAPI ColorAdjustLuma(COLORREF,int,BOOL);\n\nVOID WINAPI ColorRGBToHLS(COLORREF,LPWORD,LPWORD,LPWORD);\n\n#endif /* NO_SHLWAPI_GDI */\n\n/* Security functions */\nBOOL WINAPI IsInternetESCEnabled(void);\n\n/* Stream functions */\n#ifndef NO_SHLWAPI_STREAM\n\nstruct IStream * WINAPI SHOpenRegStreamA(HKEY,LPCSTR,LPCSTR,DWORD);\nstruct IStream * WINAPI SHOpenRegStreamW(HKEY,LPCWSTR,LPCWSTR,DWORD);\n#define SHOpenRegStream WINELIB_NAME_AW(SHOpenRegStream2) /* Uses version 2 */\n\nstruct IStream * WINAPI SHOpenRegStream2A(HKEY,LPCSTR,LPCSTR,DWORD);\nstruct IStream * WINAPI SHOpenRegStream2W(HKEY,LPCWSTR,LPCWSTR,DWORD);\n#define SHOpenRegStream2 WINELIB_NAME_AW(SHOpenRegStream2)\n\nHRESULT WINAPI SHCreateStreamOnFileA(LPCSTR,DWORD,struct IStream**);\nHRESULT WINAPI SHCreateStreamOnFileW(LPCWSTR,DWORD,struct IStream**);\n#define SHCreateStreamOnFile WINELIB_NAME_AW(SHCreateStreamOnFile)\n\nstruct IStream * WINAPI SHCreateMemStream(const BYTE*,UINT);\nHRESULT WINAPI SHCreateStreamOnFileEx(LPCWSTR,DWORD,DWORD,BOOL,struct IStream*,struct IStream**);\nHRESULT WINAPI SHCreateStreamWrapper(LPBYTE,DWORD,DWORD,struct IStream**);\n\n#endif /* NO_SHLWAPI_STREAM */\n\nHRESULT WINAPI IStream_Reset(IStream*);\nHRESULT WINAPI IStream_Size(IStream*,ULARGE_INTEGER*);\n\n/* SHAutoComplete flags */\n#define SHACF_DEFAULT               0x00000000\n#define SHACF_FILESYSTEM            0x00000001\n#define SHACF_URLHISTORY            0x00000002\n#define SHACF_URLMRU                0x00000004\n#define SHACF_URLALL                (SHACF_URLHISTORY|SHACF_URLMRU)\n#define SHACF_USETAB                0x00000008\n#define SHACF_FILESYS_ONLY          0x00000010\n#define SHACF_FILESYS_DIRS          0x00000020\n#define SHACF_AUTOSUGGEST_FORCE_ON  0x10000000\n#define SHACF_AUTOSUGGEST_FORCE_OFF 0x20000000\n#define SHACF_AUTOAPPEND_FORCE_ON   0x40000000\n#define SHACF_AUTOAPPEND_FORCE_OFF  0x80000000\n\nHRESULT WINAPI SHAutoComplete(HWND,DWORD);\n\n/* Threads */\nHRESULT WINAPI SHCreateThreadRef(LONG*, IUnknown**);\nHRESULT WINAPI SHGetThreadRef(IUnknown**);\nHRESULT WINAPI SHSetThreadRef(IUnknown*);\nHRESULT WINAPI SHReleaseThreadRef(void);\n\n/* SHCreateThread flags */\n#define CTF_INSIST          0x01 /* Always call */\n#define CTF_THREAD_REF      0x02 /* Hold thread ref */\n#define CTF_PROCESS_REF     0x04 /* Hold process ref */\n#define CTF_COINIT          0x08 /* Startup COM first */\n#define CTF_FREELIBANDEXIT  0x10 /* Hold DLL ref */\n#define CTF_REF_COUNTED     0x20 /* Thread is ref counted */\n#define CTF_WAIT_ALLOWCOM   0x40 /* Allow marshalling */\n\nBOOL WINAPI SHCreateThread(LPTHREAD_START_ROUTINE,void*,DWORD,LPTHREAD_START_ROUTINE);\n\nBOOL WINAPI SHSkipJunction(struct IBindCtx*,const CLSID*);\n\n/* Version Information */\n\ntypedef struct _DllVersionInfo {\n    DWORD cbSize;\n    DWORD dwMajorVersion;\n    DWORD dwMinorVersion;\n    DWORD dwBuildNumber;\n    DWORD dwPlatformID;\n} DLLVERSIONINFO;\n\n#define DLLVER_PLATFORM_WINDOWS 0x01 /* Win9x */\n#define DLLVER_PLATFORM_NT      0x02 /* WinNT */\n\ntypedef HRESULT (CALLBACK *DLLGETVERSIONPROC)(DLLVERSIONINFO *);\n\n#ifdef __WINESRC__\n/* shouldn't be here, but is nice for type checking */\nHRESULT WINAPI DllGetVersion(DLLVERSIONINFO *) DECLSPEC_HIDDEN;\n#endif\n\ntypedef struct _DLLVERSIONINFO2 {\n    DLLVERSIONINFO info1;\n    DWORD          dwFlags;    /* Reserved */\n    ULONGLONG DECLSPEC_ALIGN(8) ullVersion; /* 16 bits each for Major, Minor, Build, QFE */\n} DLLVERSIONINFO2;\n\n#define DLLVER_MAJOR_MASK 0xFFFF000000000000\n#define DLLVER_MINOR_MASK 0x0000FFFF00000000\n#define DLLVER_BUILD_MASK 0x00000000FFFF0000\n#define DLLVER_QFE_MASK   0x000000000000FFFF\n\n#define MAKEDLLVERULL(mjr, mnr, bld, qfe) (((ULONGLONG)(mjr)<< 48)| \\\n  ((ULONGLONG)(mnr)<< 32) | ((ULONGLONG)(bld)<< 16) | (ULONGLONG)(qfe))\n\nHRESULT WINAPI DllInstall(BOOL,LPCWSTR) DECLSPEC_HIDDEN;\n\n\n/* IsOS definitions */\n\n#define OS_WIN32SORGREATER        0x00\n#define OS_NT                     0x01\n#define OS_WIN95ORGREATER         0x02\n#define OS_NT4ORGREATER           0x03\n#define OS_WIN2000ORGREATER_ALT   0x04\n#define OS_WIN98ORGREATER         0x05\n#define OS_WIN98_GOLD             0x06\n#define OS_WIN2000ORGREATER       0x07\n#define OS_WIN2000PRO             0x08\n#define OS_WIN2000SERVER          0x09\n#define OS_WIN2000ADVSERVER       0x0A\n#define OS_WIN2000DATACENTER      0x0B\n#define OS_WIN2000TERMINAL        0x0C\n#define OS_EMBEDDED               0x0D\n#define OS_TERMINALCLIENT         0x0E\n#define OS_TERMINALREMOTEADMIN    0x0F\n#define OS_WIN95_GOLD             0x10\n#define OS_MEORGREATER            0x11\n#define OS_XPORGREATER            0x12\n#define OS_HOME                   0x13\n#define OS_PROFESSIONAL           0x14\n#define OS_DATACENTER             0x15\n#define OS_ADVSERVER              0x16\n#define OS_SERVER                 0x17\n#define OS_TERMINALSERVER         0x18\n#define OS_PERSONALTERMINALSERVER 0x19\n#define OS_FASTUSERSWITCHING      0x1A\n#define OS_WELCOMELOGONUI         0x1B\n#define OS_DOMAINMEMBER           0x1C\n#define OS_ANYSERVER              0x1D\n#define OS_WOW6432                0x1E\n#define OS_WEBSERVER              0x1F\n#define OS_SMALLBUSINESSSERVER    0x20\n#define OS_TABLETPC               0x21\n#define OS_SERVERADMINUI          0x22\n#define OS_MEDIACENTER            0x23\n#define OS_APPLIANCE              0x24\n\nBOOL WINAPI IsOS(DWORD);\n\n/* SHSetTimerQueueTimer definitions */\n#define TPS_EXECUTEIO    0x00000001\n#define TPS_LONGEXECTIME 0x00000008\n\n/* SHFormatDateTimeA/SHFormatDateTimeW flags */\n#define FDTF_SHORTTIME          0x00000001\n#define FDTF_SHORTDATE          0x00000002\n#define FDTF_DEFAULT            (FDTF_SHORTDATE | FDTF_SHORTTIME)\n#define FDTF_LONGDATE           0x00000004\n#define FDTF_LONGTIME           0x00000008\n#define FDTF_RELATIVE           0x00000010\n#define FDTF_LTRDATE            0x00000100\n#define FDTF_RTLDATE            0x00000200\n#define FDTF_NOAUTOREADINGORDER 0x00000400\n\n\ntypedef struct\n{\n    const IID *piid;\n    int        dwOffset;\n} QITAB, *LPQITAB;\n\nHRESULT WINAPI QISearch(void* base, const QITAB *pqit, REFIID riid, void **ppv);\n\n#include <poppack.h> \n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif /* __WINE_SHLWAPI_H */\n"
  },
  {
    "path": "wine/windows/shobjidl.idl",
    "content": "/*\n * COM interfaces for shell objects\n *\n * Copyright (C) 1999 Juergen Schmied\n * Copyright (C) 2003 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"objidl.idl\";\nimport \"oleidl.idl\";\nimport \"oaidl.idl\";\nimport \"docobj.idl\";\nimport \"shtypes.idl\";\nimport \"servprov.idl\";\nimport \"comcat.idl\";\nimport \"propidl.idl\";\n/* FIXME: import \"prsht.idl\";*/\nimport \"msxml.idl\";\nimport \"wtypes.idl\";\nimport \"propsys.idl\";\nimport \"objectarray.idl\";\n/* FIXME: import \"structuredquery.idl\"; */\n\ncpp_quote(\"/* FIXME: #include <sherrors.h> */\")\n\n\n/*****************************************************************************\n * IPersistFolder interface\n */\n[\n    object,\n    uuid(000214ea-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IPersistFolder : IPersist\n{\n    typedef IPersistFolder *LPPERSISTFOLDER;\n\n    HRESULT Initialize( [in] LPCITEMIDLIST pidl );\n}\n\n\n/*****************************************************************************\n * IPersistFolder2 interface\n */\n[\n    object,\n    uuid(1ac3d9f0-175c-11d1-95be-00609797ea4f),\n    pointer_default(unique)\n]\ninterface IPersistFolder2 : IPersistFolder\n{\n    typedef IPersistFolder2 *LPPERSISTFOLDER2;\n\n    HRESULT GetCurFolder( [out] LPITEMIDLIST *ppidl );\n}\n\n\n/*****************************************************************************\n * IPersistIDList interface\n */\n[\n    object,\n    uuid(1079acfc-29bd-11d3-8e0d-00c04f6837d5),\n    pointer_default(unique)\n]\ninterface IPersistIDList : IPersist\n{\n    HRESULT SetIDList( [in] LPCITEMIDLIST pidl );\n    HRESULT GetIDList( [out] LPITEMIDLIST *ppidl );\n}\n\n\n/*****************************************************************************\n * IEnumIDList interface\n */\n[\n    object,\n    uuid(000214f2-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IEnumIDList : IUnknown\n{\n    typedef IEnumIDList *LPENUMIDLIST;\n\n    HRESULT Next(\n        [in] ULONG celt,\n        [out, size_is(celt), length_is(*pceltFetched)] LPITEMIDLIST *rgelt,\n        [out] ULONG *pceltFetched);\n\n    HRESULT Skip( [in] ULONG celt );\n    HRESULT Reset();\n    HRESULT Clone( [out] IEnumIDList **ppenum );\n}\n\n/*****************************************************************************\n * IShellPropSheetExt interface\n */\ncpp_quote(\"#if 0\")\n    typedef LPARAM LPFNSVADDPROPSHEETPAGE;\ncpp_quote(\"#else\")\ncpp_quote(\"#include <prsht.h>\")\ncpp_quote(\"typedef LPFNADDPROPSHEETPAGE LPFNSVADDPROPSHEETPAGE;\")\ncpp_quote(\"#endif\")\n\n[\n    object,\n    uuid(000214E9-0000-0000-C000-000000000046),\n    pointer_default(unique),\n    local\n]\ninterface IShellPropSheetExt : IUnknown\n{\n    enum tagSHELLPROPSHEETEXTPAGEID {\n        EXPPS_FILETYPES = 0x1\n    };\n\n    typedef UINT EXPPS;\n\n    HRESULT AddPages(\n        [in] LPFNSVADDPROPSHEETPAGE pfnAddPage,\n        [in] LPARAM lParam);\n    HRESULT ReplacePage(\n        [in] EXPPS uPageID,\n        [in] LPFNSVADDPROPSHEETPAGE pfnReplaceWith,\n        [in] LPARAM lParam);\n}\ntypedef IShellPropSheetExt *LPSHELLPROPSHEETEXT;\n\n/*****************************************************************************\n * IShellFolder interface\n */\n[\n    object,\n    uuid(000214e6-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IShellFolder : IUnknown\n{\n    typedef IShellFolder * LPSHELLFOLDER;\n\n    typedef enum tagSHGDN\n    {\n        SHGDN_NORMAL = 0,\n        SHGDN_INFOLDER = 1,\n        SHGDN_FOREDITING = 0x1000,\n        SHGDN_INCLUDE_NONFILESYS = 0x2000,\n        SHGDN_FORADDRESSBAR = 0x4000,\n        SHGDN_FORPARSING = 0x8000\n    } SHGNO;\n\n    typedef DWORD SHGDNF;\n\n    enum tagSHCONTF\n    {\n        SHCONTF_CHECKING_FOR_CHILDREN = 0x00000010,\n        SHCONTF_FOLDERS               = 0x00000020,\n        SHCONTF_NONFOLDERS            = 0x00000040,\n        SHCONTF_INCLUDEHIDDEN         = 0x00000080,\n        SHCONTF_INIT_ON_FIRST_NEXT    = 0x00000100,\n        SHCONTF_NETPRINTERSRCH        = 0x00000200,\n        SHCONTF_SHAREABLE             = 0x00000400,\n        SHCONTF_STORAGE               = 0x00000800,\n        SHCONTF_NAVIGATION_ENUM       = 0x00001000,\n        SHCONTF_FASTITEMS             = 0x00002000,\n        SHCONTF_FLATLIST              = 0x00004000,\n        SHCONTF_ENABLE_ASYNC          = 0x00008000,\n        SHCONTF_INCLUDESUPERHIDDEN    = 0x00010000\n    };\n\n    typedef DWORD SHCONTF;\n\n    cpp_quote(\"#define SFGAO_CANCOPY           DROPEFFECT_COPY\")\n    cpp_quote(\"#define SFGAO_CANMOVE           DROPEFFECT_MOVE\")\n    cpp_quote(\"#define SFGAO_CANLINK           DROPEFFECT_LINK\")\n    cpp_quote(\"#define SFGAO_STORAGE           0x00000008L\")\n    cpp_quote(\"#define SFGAO_CANRENAME         0x00000010L\")\n    cpp_quote(\"#define SFGAO_CANDELETE         0x00000020L\")\n    cpp_quote(\"#define SFGAO_HASPROPSHEET      0x00000040L\")\n    cpp_quote(\"#define SFGAO_DROPTARGET        0x00000100L\")\n    cpp_quote(\"#define SFGAO_CAPABILITYMASK    0x00000177L\")\n    cpp_quote(\"#define SFGAO_SYSTEM            0x00001000L\")\n    cpp_quote(\"#define SFGAO_ENCRYPTED         0x00002000L\")\n    cpp_quote(\"#define SFGAO_ISSLOW            0x00004000L\")\n    cpp_quote(\"#define SFGAO_GHOSTED           0x00008000L\")\n    cpp_quote(\"#define SFGAO_LINK              0x00010000L\")\n    cpp_quote(\"#define SFGAO_SHARE             0x00020000L\")\n    cpp_quote(\"#define SFGAO_READONLY          0x00040000L\")\n    cpp_quote(\"#define SFGAO_HIDDEN            0x00080000L\")\n    cpp_quote(\"#define SFGAO_DISPLAYATTRMASK   0x000FC000L\")\n    cpp_quote(\"#define SFGAO_FILESYSANCESTOR   0x10000000L\")\n    cpp_quote(\"#define SFGAO_FOLDER            0x20000000L\")\n    cpp_quote(\"#define SFGAO_FILESYSTEM        0x40000000L\")\n    cpp_quote(\"#define SFGAO_HASSUBFOLDER      0x80000000L\")\n    cpp_quote(\"#define SFGAO_CONTENTSMASK      0x80000000L\")\n    cpp_quote(\"#define SFGAO_VALIDATE          0x01000000L\")\n    cpp_quote(\"#define SFGAO_REMOVABLE         0x02000000L\")\n    cpp_quote(\"#define SFGAO_COMPRESSED        0x04000000L\")\n    cpp_quote(\"#define SFGAO_BROWSABLE         0x08000000L\")\n    cpp_quote(\"#define SFGAO_NONENUMERATED     0x00100000L\")\n    cpp_quote(\"#define SFGAO_NEWCONTENT        0x00200000L\")\n    cpp_quote(\"#define SFGAO_CANMONIKER        0x00400000L\")\n    cpp_quote(\"#define SFGAO_HASSTORAGE        0x00400000L\")\n    cpp_quote(\"#define SFGAO_STREAM            0x00400000L\")\n    cpp_quote(\"#define SFGAO_STORAGEANCESTOR   0x00800000L\")\n    cpp_quote(\"#define SFGAO_STORAGEGAPMASK    0x70C50008L\")\n    cpp_quote(\"#define SFGAO_PKEYSFGAOMASK     0x81044000L\")\n\n    typedef ULONG SFGAOF;\n\n    HRESULT ParseDisplayName(\n        [in] HWND hwndOwner,\n        [in] LPBC pbcReserved,\n        [in, string] LPOLESTR lpszDisplayName,\n        [out] ULONG *pchEaten,\n        [out] LPITEMIDLIST *ppidl,\n        [in, out, unique] ULONG *pdwAttributes);\n\n    HRESULT EnumObjects(\n        [in] HWND hwndOwner,\n        [in] SHCONTF grfFlags,\n        [out] IEnumIDList **ppenumIDList);\n\n    HRESULT BindToObject(\n        [in] LPCITEMIDLIST pidl,\n        [in] LPBC pbcReserved,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppvOut);\n\n    HRESULT BindToStorage(\n        [in] LPCITEMIDLIST pidl,\n        [in] LPBC pbcReserved,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppvObj);\n\n    HRESULT CompareIDs(\n        [in] LPARAM lParam,\n        [in] LPCITEMIDLIST pidl1,\n        [in] LPCITEMIDLIST pidl2);\n\n    HRESULT CreateViewObject(\n        [in] HWND hwndOwner,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppvOut);\n\n    HRESULT GetAttributesOf(\n        [in] UINT cidl,\n        [in, size_is(cidl)] LPCITEMIDLIST *apidl,\n        [in, out] SFGAOF *rgfInOut);\n\n    HRESULT GetUIObjectOf(\n        [in] HWND hwndOwner,\n        [in] UINT cidl,\n        [in, size_is(cidl)] LPCITEMIDLIST *apidl,\n        [in] REFIID riid,\n        [in, out, unique] UINT *prgfInOut,\n        [out, iid_is(riid)] void **ppvOut);\n\n    HRESULT GetDisplayNameOf(\n        [in] LPCITEMIDLIST pidl,\n        [in] SHGDNF uFlags,\n        [out] STRRET *lpName);\n\n    HRESULT SetNameOf(\n        [in] HWND hwnd,\n        [in] LPCITEMIDLIST pidl,\n        [in, string] LPCOLESTR lpszName,\n        [in] SHGDNF uFlags,\n        [out] LPITEMIDLIST *ppidlOut);\n}\n\n\n/*****************************************************************************\n * IEnumExtraSearch interface\n */\n[\n    object,\n    uuid(0e700be1-9db6-11d1-a1ce-00c04fd75d13),\n    pointer_default(unique)\n]\ninterface IEnumExtraSearch : IUnknown\n{\n    typedef IEnumExtraSearch *LPENUMEXTRASEARCH;\n\n    typedef struct\n    {\n        GUID guidSearch;\n        WCHAR wszFriendlyName[80];\n        /*\n         *WCHAR wszMenuText[80];\n         *WCHAR wszHelpText[MAX_PATH];\n         */\n        WCHAR wszUrl[2084];\n        /*\n         *WCHAR wszIcon[MAX_PATH+10];\n         *WCHAR wszGreyIcon[MAX_PATH+10];\n         *WCHAR wszClrIcon[MAX_PATH+10];\n         */\n    } EXTRASEARCH, *LPEXTRASEARCH;\n\n    HRESULT Next(\n        [in] ULONG celt,\n        [out, size_is(celt), length_is(*pceltFetched)] EXTRASEARCH *rgelt,\n        [out] ULONG *pceltFetched);\n\n    HRESULT Skip( [in] ULONG celt );\n    HRESULT Reset();\n    HRESULT Clone( [out] IEnumExtraSearch **ppenum );\n}\n\n\n/*****************************************************************************\n * IShellFolder2 interface\n */\n[\n    object,\n    uuid(93f2f68c-1d1b-11d3-a30e-00c04f79abd1),\n    pointer_default(unique)\n]\ninterface IShellFolder2 : IShellFolder\n{\n    typedef struct\n    {\n        GUID    fmtid;\n        DWORD   pid;\n    } SHCOLUMNID, *LPSHCOLUMNID;\n    typedef const SHCOLUMNID *LPCSHCOLUMNID;\n\n    HRESULT GetDefaultSearchGUID( [out] GUID *lpguid );\n    HRESULT EnumSearches( [out] IEnumExtraSearch **ppenum );\n    HRESULT GetDefaultColumn( [in] DWORD dwReserved, [out] ULONG *pSort, [out] ULONG *pDisplay );\n    HRESULT GetDefaultColumnState( [in] UINT iColumn, [out] SHCOLSTATEF *pcsFlags );\n    HRESULT GetDetailsEx( [in] LPCITEMIDLIST pidl, [in] const SHCOLUMNID *pscid, [out] VARIANT *pv);\n    HRESULT GetDetailsOf( [in] LPCITEMIDLIST pidl, [in] UINT iColumn, [out] SHELLDETAILS *psd);\n    HRESULT MapColumnToSCID( [in] UINT iColumn, [in] SHCOLUMNID *pscid );\n}\n\n/*****************************************************************************\n * IShellItem interface\n */\n[\n    object,\n    uuid(43826d1e-e718-42ee-bc55-a1e261c37bfe),\n    pointer_default(unique)\n]\ninterface IShellItem : IUnknown\n{\n    typedef [v1_enum] enum {\n        SIGDN_NORMALDISPLAY                = 0,\n        SIGDN_PARENTRELATIVEPARSING        = 0x80018001,\n        SIGDN_DESKTOPABSOLUTEPARSING       = 0x80028000,\n        SIGDN_PARENTRELATIVEEDITING        = 0x80031001,\n        SIGDN_DESKTOPABSOLUTEEDITING       = 0x8004c000,\n        SIGDN_FILESYSPATH                  = 0x80058000,\n        SIGDN_URL                          = 0x80068000,\n        SIGDN_PARENTRELATIVEFORADDRESSBAR  = 0x8007c001,\n        SIGDN_PARENTRELATIVE               = 0x80080001,\n        SIGDN_PARENTRELATIVEFORUI          = 0x80094001,\n    } SIGDN; /* & 0xFFFF => SHGDN */\n\n    [v1_enum] enum _SICHINTF\n    {\n        SICHINT_DISPLAY                       = 0x00000000,\n        SICHINT_CANONICAL                     = 0x10000000,\n        SICHINT_TEST_FILESYSPATH_IF_NOT_EQUAL = 0x20000000,\n        SICHINT_ALLFIELDS                     = 0x80000000\n    };\n    typedef DWORD SICHINTF;\n\n    HRESULT BindToHandler(\n        [in] IBindCtx *pbc,\n        [in] REFGUID rbhid,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppvOut);\n\n    HRESULT GetParent( [out] IShellItem **ppsi );\n\n    HRESULT GetDisplayName(\n        [in] SIGDN sigdnName,\n        [out] LPWSTR *ppszName);\n\n    HRESULT GetAttributes(\n        [in] SFGAOF sfgaoMask,\n        [out] SFGAOF *psfgaoAttribs);\n\n    HRESULT Compare(\n        [in] IShellItem *psi,\n        [in] SICHINTF hint,\n        [out] int *piOrder);\n}\n\n/*****************************************************************************\n * IShellItem2 interface\n */\n[\n    object,\n    uuid(7E9FB0D3-919F-4307-AB2E-9B1860310C93),\n    pointer_default(unique)\n]\ninterface IShellItem2 : IShellItem\n{\n    HRESULT GetPropertyStore(\n        [in] GETPROPERTYSTOREFLAGS flags,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppv);\n\n    HRESULT GetPropertyStoreWithCreateObject(\n        [in] GETPROPERTYSTOREFLAGS flags,\n        [in] IUnknown *punkCreateObject,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppv);\n\n    HRESULT GetPropertyStoreForKeys(\n        [in, size_is(cKeys)] const PROPERTYKEY *rgKeys,\n        [in] UINT cKeys,\n        [in] GETPROPERTYSTOREFLAGS flags,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppv);\n\n    HRESULT GetPropertyDescriptionList(\n        [in] REFPROPERTYKEY keyType,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppv);\n\n    HRESULT Update(\n        [in, unique] IBindCtx *pbc);\n\n    HRESULT GetProperty(\n        [in] REFPROPERTYKEY key,\n        [out] PROPVARIANT *ppropvar);\n\n    HRESULT GetCLSID(\n        [in] REFPROPERTYKEY key,\n        [out] CLSID *pclsid);\n\n    HRESULT GetFileTime (\n        [in] REFPROPERTYKEY key,\n        [out] FILETIME *pft);\n\n    HRESULT GetInt32(\n        [in] REFPROPERTYKEY key,\n        [out] int *pi);\n\n    HRESULT GetString(\n        [in] REFPROPERTYKEY key,\n        [out, string] LPWSTR *ppsz);\n\n    HRESULT GetUInt32(\n        [in] REFPROPERTYKEY key,\n        [out] ULONG *pui);\n\n    HRESULT GetUInt64(\n        [in] REFPROPERTYKEY key,\n        [out] ULONGLONG *pull);\n\n    HRESULT GetBool(\n        [in] REFPROPERTYKEY key,\n        [out] BOOL *pf);\n}\n\ntypedef [v1_enum] enum tagNWMF {\n    NWMF_UNLOADING        = 0x00000001,\n    NWMF_USERINITED       = 0x00000002,\n    NWMF_FIRST            = 0x00000004,\n    NWMF_OVERRIDEKEY      = 0x00000008,\n    NWMF_SHOWHELP         = 0x00000010,\n    NWMF_HTMLDIALOG       = 0x00000020,\n    NWMF_FROMDIALOGCHILD  = 0x00000040,\n    NWMF_USERREQUESTED    = 0x00000080,\n    NWMF_USERALLOWED      = 0x00000100,\n    NWMF_FORCEWINDOW      = 0x00010000,\n    NWMF_FORCETAB         = 0x00020000,\n    NWMF_SUGGESTWINDOW    = 0x00040000,\n    NWMF_SUGGESTTAB       = 0x00080000,\n    NWMF_INACTIVETAB      = 0x00100000,\n} NWMF;\n\n[\n    uuid(d2bc4c84-3f72-4a52-a604-7bcbf3982cbb),\n    object,\n    pointer_default(unique)\n]\ninterface INewWindowManager : IUnknown\n{\n    HRESULT EvaluateNewWindow(\n        [in, string] LPCWSTR pszUrl,\n        [in, string] LPCWSTR pszName,\n        [in, string] LPCWSTR pszUrlContext,\n        [in, string] LPCWSTR pszFeatures,\n        [in]         BOOL fReplace,\n        [in]         DWORD dwFlags,\n        [in]         DWORD dwUserActionTime);\n}\n\ncpp_quote(\"#define SID_SNewWindowManager IID_INewWindowManager\")\n\n/*****************************************************************************\n * IEnumShellItems interface\n */\n[\n object,\n uuid(70629033-E363-4A28-A567-0DB78006E6D7),\n pointer_default(unique)\n]\ninterface IEnumShellItems : IUnknown\n{\n    [local] HRESULT Next(\n        [in] ULONG celt,\n        [out, size_is(celt), length_is(*pceltFetched)] IShellItem **rgelt,\n        [out] ULONG *pceltFetched);\n\n    [call_as(Next)] HRESULT RemoteNext(\n        [in] ULONG celt,\n        [out, size_is(celt), length_is(*pceltFetched)] IShellItem **rgelt,\n        [out] ULONG *pceltFetched);\n\n    HRESULT Skip(\n        [in] ULONG celt);\n\n    HRESULT Reset();\n\n    HRESULT Clone(\n        [out] IEnumShellItems **ppenum);\n}\n\n/*****************************************************************************\n * IShellItemArray interface\n */\n[\n object,\n uuid(B63EA76D-1F85-456F-A19C-48159EFA858B),\n pointer_default(unique)\n]\ninterface IShellItemArray : IUnknown\n{\n    typedef [v1_enum] enum SIATTRIBFLAGS {\n        SIATTRIBFLAGS_AND            = 0x0001,\n        SIATTRIBFLAGS_OR             = 0x0002,\n        SIATTRIBFLAGS_APPCOMPAT      = 0x0003,\n        SIATTRIBFLAGS_MASK           = 0x0003,\n        SIATTRIBFLAGS_ALLITEMS       = 0x4000\n    } SIATTRIBFLAGS;\n    cpp_quote(\"DEFINE_ENUM_FLAG_OPERATORS(SIATTRIBFLAGS)\")\n\n    HRESULT BindToHandler(\n        [in, unique] IBindCtx *pbc,\n        [in] REFGUID bhid,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppvOut);\n\n    HRESULT GetPropertyStore(\n        [in] GETPROPERTYSTOREFLAGS flags,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppv);\n\n    HRESULT GetPropertyDescriptionList(\n        [in] REFPROPERTYKEY keyType,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppv);\n\n    HRESULT GetAttributes(\n        [in] SIATTRIBFLAGS AttribFlags,\n        [in] SFGAOF sfgaoMask,\n        [out] SFGAOF *psfgaoAttribs);\n\n    HRESULT GetCount(\n        [out] DWORD *pdwNumItems);\n\n    HRESULT GetItemAt(\n        [in] DWORD dwIndex,\n        [out] IShellItem **ppsi);\n\n    HRESULT EnumItems(\n        [out] IEnumShellItems **ppenumShellItems);\n\n}\n\ntypedef [v1_enum] enum DATAOBJ_GET_ITEM_FLAGS\n{\n    DOGIF_DEFAULT       = 0x0,\n    DOGIF_TRAVERSE_LINK = 0x1,\n    DOGIF_NO_HDROP      = 0x2,\n    DOGIF_NO_URL        = 0x4,\n    DOGIF_ONLY_IF_ONE   = 0x8\n} DATAOBJ_GET_ITEM_FLAGS;\ncpp_quote(\"DEFINE_ENUM_FLAG_OPERATORS(DATAOBJ_GET_ITEM_FLAGS)\")\n\ncpp_quote(\"HRESULT WINAPI SHGetNameFromIDList(PCIDLIST_ABSOLUTE pidl, SIGDN sigdnName, PWSTR *ppszName);\")\ncpp_quote(\"HRESULT WINAPI SHCreateItemFromParsingName(PCWSTR pszPath, IBindCtx *pbc, REFIID riid, void **ppv);\")\ncpp_quote(\"HRESULT WINAPI SHCreateItemFromIDList(PCIDLIST_ABSOLUTE pidl, REFIID riid, void **ppv);\")\ncpp_quote(\"HRESULT WINAPI SHCreateItemFromRelativeName(IShellItem *parent, PCWSTR name, IBindCtx *pbc, REFIID riid, void **ppv);\")\ncpp_quote(\"HRESULT WINAPI SHGetItemFromDataObject(IDataObject *pdtobj, DATAOBJ_GET_ITEM_FLAGS dwFlags, REFIID riid, void **ppv);\")\ncpp_quote(\"HRESULT WINAPI SHGetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE *ppidl);\")\ncpp_quote(\"HRESULT WINAPI SHGetItemFromObject(IUnknown *punk, REFIID riid, void **ppv);\")\ncpp_quote(\"HRESULT WINAPI SHCreateShellItemArray(PCIDLIST_ABSOLUTE pidlParent, IShellFolder* psf, UINT cidl, PCUITEMID_CHILD_ARRAY ppidl, IShellItemArray **ppsiItemArray);\")\ncpp_quote(\"HRESULT WINAPI SHCreateShellItemArrayFromShellItem(IShellItem *psi, REFIID riid, void **ppv);\")\ncpp_quote(\"HRESULT WINAPI SHCreateShellItemArrayFromIDLists(UINT cidl, PCIDLIST_ABSOLUTE_ARRAY pidl_array, IShellItemArray **psia);\")\ncpp_quote(\"HRESULT WINAPI SHCreateItemInKnownFolder(REFKNOWNFOLDERID rfid, DWORD flags, PCWSTR filename, REFIID riid, void **ppv);\")\ncpp_quote(\"HRESULT WINAPI SHCreateShellItemArrayFromDataObject(IDataObject *pdo, REFIID riid, void **ppv);\")\n\n/*****************************************************************************\n * IShellItemFilter interface\n */\n[\n object,\n uuid(2659B475-EEB8-48B7-8F07-B378810F48CF),\n pointer_default(unique)\n]\ninterface IShellItemFilter : IUnknown\n{\n    HRESULT IncludeItem(\n        [in] IShellItem *psi);\n\n    HRESULT GetEnumFlagsForItem(\n        [in] IShellItem *psi,\n        [out] SHCONTF *pgrfFlags);\n}\n\n/*****************************************************************************\n * FOLDERSETTINGS\n */\ntypedef char *LPVIEWSETTINGS;\n\ntypedef [v1_enum] enum FOLDERFLAGS\n{\n    FWF_AUTOARRANGE         = 0x00000001,\n    FWF_ABBREVIATEDNAMES    = 0x00000002,\n    FWF_SNAPTOGRID          = 0x00000004,\n    FWF_OWNERDATA           = 0x00000008,\n    FWF_BESTFITWINDOW       = 0x00000010,\n    FWF_DESKTOP             = 0x00000020,\n    FWF_SINGLESEL           = 0x00000040,\n    FWF_NOSUBFOLDERS        = 0x00000080,\n    FWF_TRANSPARENT         = 0x00000100,\n    FWF_NOCLIENTEDGE        = 0x00000200,\n    FWF_NOSCROLL            = 0x00000400,\n    FWF_ALIGNLEFT           = 0x00000800,\n    FWF_NOICONS             = 0x00001000,\n    FWF_SHOWSELALWAYS       = 0x00002000,\n    FWF_NOVISIBLE           = 0x00004000,\n    FWF_SINGLECLICKACTIVATE = 0x00008000,\n    FWF_NOWEBVIEW           = 0x00010000,\n    FWF_HIDEFILENAMES       = 0x00020000,\n    FWF_CHECKSELECT         = 0x00040000,\n    FWF_NOENUMREFRESH       = 0x00080000,\n    FWF_NOGROUPING          = 0x00100000,\n    FWF_FULLROWSELECT       = 0x00200000,\n    FWF_NOFILTERS           = 0x00400000,\n    FWF_NOCOLUMNHEADER      = 0x00800000,\n    FWF_NOHEADERINALLVIEWS  = 0x01000000,\n    FWF_EXTENDEDTILES       = 0x02000000,\n    FWF_TRICHECKSELECT      = 0x04000000,\n    FWF_AUTOCHECKSELECT     = 0x08000000,\n    FWF_NOBROWSERVIEWSTATE  = 0x10000000,\n    FWF_SUBSETGROUPS        = 0x20000000,\n    FWF_USESEARCHFOLDER     = 0x40000000,\n    FWF_ALLOWRTLREADING     = 0x80000000\n} FOLDERFLAGS;\n\ntypedef [v1_enum] enum FOLDERVIEWMODE\n{\n    FVM_AUTO       =-1,\n    FVM_ICON       = 1,\n    FVM_FIRST      = FVM_ICON,\n    FVM_SMALLICON  = 2,\n    FVM_LIST       = 3,\n    FVM_DETAILS    = 4,\n    FVM_THUMBNAIL  = 5,\n    FVM_TILE       = 6,\n    FVM_THUMBSTRIP = 7,\n    FVM_CONTENT    = 8,\n    FVM_LAST       = FVM_CONTENT\n} FOLDERVIEWMODE;\n\ntypedef struct\n{\n    UINT ViewMode;\n    UINT fFlags;\n} FOLDERSETTINGS, *PFOLDERSETTINGS, *LPFOLDERSETTINGS;\ntypedef const FOLDERSETTINGS *LPCFOLDERSETTINGS;\n\n/*****************************************************************************\n * IShellIcon interface\n */\n[\n    uuid(000214e5-0000-0000-c000-000000000046),\n    object,\n    pointer_default(unique)\n]\ninterface IShellIcon : IUnknown\n{\n    HRESULT GetIconOf(\n        [in] PCUITEMID_CHILD pidl,\n        [in] UINT flags,\n        [out] int *pIconIndex);\n}\n\n/*****************************************************************************\n * IShellView interface\n */\ninterface IShellBrowser;  /* forward declaration */\n[\n    object,\n    uuid(000214e3-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IShellView : IOleWindow\n{\n    typedef IShellView *LPSHELLVIEW;\n\n    typedef [v1_enum] enum _SVSIF\n    {\n        SVSI_DESELECT       = 0x00000000,\n        SVSI_SELECT         = 0x00000001,\n        SVSI_EDIT           = 0x00000003,\n        SVSI_DESELECTOTHERS = 0x00000004,\n        SVSI_ENSUREVISIBLE  = 0x00000008,\n        SVSI_FOCUSED        = 0x00000010,\n        SVSI_TRANSLATEPT    = 0x00000020,\n        SVSI_SELECTIONMARK  = 0x00000040,\n        SVSI_POSITIONITEM   = 0x00000080,\n        SVSI_CHECK          = 0x00000100,\n        SVSI_CHECK2         = 0x00000200,\n        SVSI_KEYBOARDSELECT = 0x00000401,\n        SVSI_NOTAKEFOCUS    = 0x40000000,\n    } _SVSIF;\n\n    cpp_quote(\"#define SVSI_NOSTATECHANGE  0x80000000\")\n\n    typedef UINT SVSIF;\n\n    typedef [v1_enum] enum _SVGIO\n    {\n        SVGIO_BACKGROUND     = 0x00000000,\n        SVGIO_SELECTION      = 0x00000001,\n        SVGIO_ALLVIEW        = 0x00000002,\n        SVGIO_CHECKED        = 0x00000003,\n        SVGIO_TYPE_MASK      = 0x0000000f,\n        SVGIO_FLAG_VIEWORDER = 0x80000000,\n    } _SVGIO;\n\n    typedef INT SVGIO;\n\n    typedef [v1_enum] enum SVUIA_STATUS\n    {\n        SVUIA_DEACTIVATE       = 0,\n        SVUIA_ACTIVATE_NOFOCUS = 1,\n        SVUIA_ACTIVATE_FOCUS   = 2,\n        SVUIA_INPLACEACTIVATE  = 3\n    } SVUIA_STATUS;\n\n    HRESULT TranslateAccelerator( [in] MSG *pmsg );\n    HRESULT EnableModeless( [in] BOOL fEnable );\n    HRESULT UIActivate( [in] UINT uState );\n    HRESULT Refresh();\n    HRESULT CreateViewWindow(\n        [in] IShellView *psvPrevious,\n        [in] LPCFOLDERSETTINGS lpfs,\n        [in] IShellBrowser *psb,\n        [out] RECT *prcView,\n        [out] HWND *phWnd);\n\n    HRESULT DestroyViewWindow();\n    HRESULT GetCurrentInfo( [out] LPFOLDERSETTINGS lpfs );\n\n    [local] HRESULT AddPropertySheetPages(\n        [in] DWORD dwReserved,\n        [in] LPFNSVADDPROPSHEETPAGE pfn,\n        [in] LPARAM lparam);\n\n    HRESULT SaveViewState();\n    HRESULT SelectItem(\n        [in] LPCITEMIDLIST pidlItem,\n        [in] SVSIF uFlags);\n    HRESULT GetItemObject(\n        [in] UINT uItem,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppv);\n}\n\n[\n    object,\n    uuid(88e39e80-3578-11cf-ae69-08002b2e1262),\n    pointer_default(unique)\n]\ninterface IShellView2 : IShellView\n{\n    typedef GUID SHELLVIEWID;\ncpp_quote(\"#include <pshpack8.h>\")\n    typedef struct _SV2CVW2_PARAMS\n    {\n        DWORD cbSize;\n        IShellView *psvPrev;\n        LPCFOLDERSETTINGS pfs;\n        IShellBrowser *psbOwner;\n        RECT *prcView;\n        SHELLVIEWID const *pvid;\n        HWND hwndView;\n    } SV2CVW2_PARAMS, *LPSV2CVW2_PARAMS;\ncpp_quote(\"#include <poppack.h>\")\n\n    HRESULT GetView(\n        [in, out] SHELLVIEWID *view_guid,\n        [in] ULONG view_type\n    );\n    HRESULT CreateViewWindow2(\n        [in] LPSV2CVW2_PARAMS view_params\n    );\n    HRESULT HandleRename(\n        [in] LPCITEMIDLIST new_pidl\n    );\n    HRESULT SelectAndPositionItem(\n        [in] LPCITEMIDLIST item,\n        [in] UINT flags,\n        [in] POINT *point\n    );\n}\n\n[\n    object,\n    uuid(ec39fa88-f8af-41c5-8421-38bed28f4673),\n    pointer_default(unique)\n]\ninterface IShellView3 : IShellView2\n{\n    [v1_enum] enum _SV3CVW3_FLAGS\n    {\n        SV3CVW3_DEFAULT          = 0x00000000,\n        SV3CVW3_NONINTERACTIVE   = 0x00000001,\n        SV3CVW3_FORCEVIEWMODE    = 0x00000002,\n        SV3CVW3_FORCEFOLDERFLAGS = 0x00000004\n    };\n\n    typedef DWORD SV3CVW3_FLAGS;\n\n    HRESULT CreateViewWindow3(\n        [in] IShellBrowser *owner,\n        [in, unique] IShellView *prev_view,\n        [in] SV3CVW3_FLAGS view_flags,\n        [in] FOLDERFLAGS mask,\n        [in] FOLDERFLAGS flags,\n        [in] FOLDERVIEWMODE mode,\n        [in, unique] const SHELLVIEWID *view_id,\n        [in] const RECT *rect,\n        [out] HWND *hwnd);\n}\n\n/*****************************************************************************\n * IFolderView interface\n */\n[\n    uuid(cde725b0-ccc9-4519-917e-325d72fab4ce),\n    object,\n    pointer_default(unique)\n]\ninterface IFolderView : IUnknown\n{\n    HRESULT GetCurrentViewMode( [out] UINT *mode );\n    HRESULT SetCurrentViewMode( [in] UINT mode );\n    HRESULT GetFolder( [in] REFIID riid, [out, iid_is(riid)] void **ppv );\n    HRESULT Item(\n        [in] int index,\n        [out] PITEMID_CHILD *ppidl\n    );\n    HRESULT ItemCount(\n        [in] UINT flags,\n        [out] int *items\n    );\n    HRESULT Items(\n        [in] UINT flags,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppv\n    );\n    HRESULT GetSelectionMarkedItem( [out] int *item );\n    HRESULT GetFocusedItem( [out] int *item );\n    HRESULT GetItemPosition(\n        [in] PCUITEMID_CHILD pidl,\n        [out] POINT* ppt\n    );\n    HRESULT GetSpacing( [in, out, unique] POINT* pt );\n    HRESULT GetDefaultSpacing( [out] POINT* pt );\n    HRESULT GetAutoArrange();\n    HRESULT SelectItem(\n        [in] int item,\n        [in] DWORD flags\n    );\n    HRESULT SelectAndPositionItems(\n        [in] UINT cidl,\n        [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl,\n        [in, unique, size_is(cidl)] POINT* apt,\n        [in] DWORD flags\n    );\n}\n\n[v1_enum] enum tagSORTDIRECTION\n{\n    SORT_DESCENDING = -1,\n    SORT_ASCENDING = 1\n};\ntypedef int SORTDIRECTION;\n\ntypedef struct SORTCOLUMN\n{\n    PROPERTYKEY propkey;\n    SORTDIRECTION direction;\n} SORTCOLUMN;\n\ntypedef [v1_enum] enum FVTEXTTYPE\n{\n    FVST_EMPTYTEXT = 0\n} FVTEXTTYPE;\n\n[\n    uuid(1af3a467-214f-4298-908e-06b03e0b39f9),\n    object,\n    pointer_default(unique)\n]\ninterface IFolderView2 : IFolderView\n{\n    HRESULT SetGroupBy(\n        [in] REFPROPERTYKEY key,\n        [in] BOOL ascending);\n\n    [local]\n    HRESULT GetGroupBy(\n        [out] PROPERTYKEY *pkey,\n        [out] BOOL *ascending);\n\n    [call_as(GetGroupBy)]\n    HRESULT RemoteGetGroupBy(\n        [out] PROPERTYKEY *pkey,\n        [out] BOOL *ascending);\n\n    HRESULT SetViewProperty(\n        [in] PCUITEMID_CHILD pidl,\n        [in] REFPROPERTYKEY propkey,\n        [in] REFPROPVARIANT propvar);\n\n    HRESULT GetViewProperty(\n        [in] PCUITEMID_CHILD pidl,\n        [in] REFPROPERTYKEY propkey,\n        [out] PROPVARIANT *propvar);\n\n    HRESULT SetTileViewProperties(\n        [in] PCUITEMID_CHILD pidl,\n        [in, string] LPCWSTR prop_list);\n\n    HRESULT SetExtendedTileViewProperties(\n        [in] PCUITEMID_CHILD pidl,\n        [in, string] LPCWSTR prop_list);\n\n    HRESULT SetText(\n        [in] FVTEXTTYPE type,\n        [in] LPCWSTR text);\n\n    HRESULT SetCurrentFolderFlags(\n        [in] DWORD mask,\n        [in] DWORD flags);\n\n    HRESULT GetCurrentFolderFlags([out] DWORD *flags);\n\n    HRESULT GetSortColumnCount([out] int *columns);\n\n    HRESULT SetSortColumns(\n        [in, size_is(count)] const SORTCOLUMN *columns,\n        [in] int count);\n\n    HRESULT GetSortColumns(\n        [out, size_is(count)] SORTCOLUMN *columns,\n        [in] int count);\n\n    HRESULT GetItem(\n        [in] int ittem,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppv);\n\n    HRESULT GetVisibleItem(\n        [in] int start,\n        [in] BOOL previous,\n        [out] int *item);\n\n    HRESULT GetSelectedItem(\n        [in] int start,\n        [out] int *item);\n\n    HRESULT GetSelection(\n        [in] BOOL none_implies_folder,\n        [out] IShellItemArray **array);\n\n    HRESULT GetSelectionState(\n        [in] PCUITEMID_CHILD pidl,\n        [out] DWORD *flags);\n\n    HRESULT InvokeVerbOnSelection([in, unique, string] LPCSTR verb);\n\n    HRESULT SetViewModeAndIconSize(\n        [in] FOLDERVIEWMODE mode,\n        [in] int size);\n\n    HRESULT GetViewModeAndIconSize(\n        [out] FOLDERVIEWMODE *mode,\n        [out] int *size);\n\n    HRESULT SetGroupSubsetCount([in] UINT visible_rows);\n\n    HRESULT GetGroupSubsetCount([out] UINT *visible_rows);\n\n    HRESULT SetRedraw([in] BOOL redraw);\n\n    HRESULT IsMoveInSameFolder();\n\n    HRESULT DoRename();\n}\n\n/*****************************************************************************\n * IShellBrowser interface\n */\n[\n    object,\n    uuid(000214e2-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IShellBrowser : IOleWindow\n{\n    typedef IShellBrowser *LPSHELLBROWSER;\n\ncpp_quote(\"#define SBSP_DEFBROWSER            0x00000000\")\ncpp_quote(\"#define SBSP_SAMEBROWSER           0x00000001\")\ncpp_quote(\"#define SBSP_NEWBROWSER            0x00000002\")\ncpp_quote(\"#define SBSP_DEFMODE               0x00000000\")\ncpp_quote(\"#define SBSP_OPENMODE              0x00000010\")\ncpp_quote(\"#define SBSP_EXPLOREMODE           0x00000020\")\ncpp_quote(\"#define SBSP_HELPMODE              0x00000040\")\ncpp_quote(\"#define SBSP_NOTRANSFERHIST        0x00000080\")\ncpp_quote(\"#define SBSP_ABSOLUTE              0x00000000\")\ncpp_quote(\"#define SBSP_RELATIVE              0x00001000\")\ncpp_quote(\"#define SBSP_PARENT                0x00002000\")\ncpp_quote(\"#define SBSP_NAVIGATEBACK          0x00004000\")\ncpp_quote(\"#define SBSP_NAVIGATEFORWARD       0x00008000\")\ncpp_quote(\"#define SBSP_ALLOW_AUTONAVIGATE    0x00010000\")\ncpp_quote(\"#define SBSP_KEEPSAMETEMPLATE      0x00020000\")\ncpp_quote(\"#define SBSP_KEEPWORDWHEELTEXT     0x00040000\")\ncpp_quote(\"#define SBSP_ACTIVATE_NOFOCUS      0x00080000\")\ncpp_quote(\"#define SBSP_CREATENOHISTORY       0x00100000\")\ncpp_quote(\"#define SBSP_PLAYNOSOUND           0x00200000\")\ncpp_quote(\"#define SBSP_CALLERUNTURUSTED      0x00800000\")\ncpp_quote(\"#define SBSP_TRUSTFIRSTDOWNLOAD    0x01000000\")\ncpp_quote(\"#define SBSP_UNTRUSTEDFORDOWNLOAD  0x02000000\")\ncpp_quote(\"#define SBSP_NOAUTOSELECT          0x04000000\")\ncpp_quote(\"#define SBSP_WRITENOHISTORY        0x08000000\")\ncpp_quote(\"#define SBSP_TRUSTEDFORACTIVEX     0x10000000\")\ncpp_quote(\"#define SBSP_FEEDNAVIGATION        0x20000000\")\ncpp_quote(\"#define SBSP_REDIRECT              0x40000000\")\ncpp_quote(\"#define SBSP_INITIATEDBYHLINKFRAME 0x80000000\")\n\ncpp_quote(\"#define FCW_STATUS      0x0001\")\ncpp_quote(\"#define FCW_TOOLBAR     0x0002\")\ncpp_quote(\"#define FCW_TREE        0x0003\")\ncpp_quote(\"#define FCW_INTERNETBAR 0x0006\")\ncpp_quote(\"#define FCW_PROGRESS    0x0008\")\n\ncpp_quote(\"#define FCT_MERGE       0x0001\")\ncpp_quote(\"#define FCT_CONFIGABLE  0x0002\")\ncpp_quote(\"#define FCT_ADDTOEND    0x0004\")\n\ncpp_quote(\"#if 0\")\n    typedef LPARAM LPTBBUTTONSB;\ncpp_quote(\"#else\")\ncpp_quote(\"#include <commctrl.h>\")\ncpp_quote(\"typedef LPTBBUTTON LPTBBUTTONSB;\")\ncpp_quote(\"#endif\")\n\n    HRESULT InsertMenusSB(\n        [in] HMENU hmenuShared,\n        [in, out] LPOLEMENUGROUPWIDTHS lpMenuWidths);\n\n    HRESULT SetMenuSB(\n        [in] HMENU hmenuShared,\n        [in] HOLEMENU holemenuReserved,\n        [in] HWND hwndActiveObject);\n\n    HRESULT RemoveMenusSB( [in] HMENU hmenuShared );\n    HRESULT SetStatusTextSB( [in, unique] LPCOLESTR pszStatusText );\n    HRESULT EnableModelessSB( [in] BOOL fEnable );\n    HRESULT TranslateAcceleratorSB( [in] MSG *pmsg, [in] WORD wID );\n\n    HRESULT BrowseObject(\n        [in] LPCITEMIDLIST pidl,\n        [in] UINT wFlags);\n\n    HRESULT GetViewStateStream(\n        [in] DWORD grfMode,\n        [out] IStream **ppStrm);\n\n    HRESULT GetControlWindow(\n        [in] UINT id,\n        [out] HWND *phwnd);\n\n    [local] HRESULT SendControlMsg(\n        [in] UINT id,\n        [in] UINT uMsg,\n        [in] WPARAM wParam,\n        [in] LPARAM lParam,\n        [in] LRESULT *pret);\n\n    HRESULT QueryActiveShellView( [out] IShellView **ppshv );\n    HRESULT OnViewWindowActive( [in] IShellView *pshv );\n\n    [local]\n    HRESULT SetToolbarItems(\n        [in] LPTBBUTTONSB lpButtons,\n        [in] UINT nButtons,\n        [in] UINT uFlags);\n}\n\n\n/*****************************************************************************\n * IShellLinkA interface\n */\n[\n    object,\n    uuid(000214ee-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IShellLinkA : IUnknown\n{\n    typedef [v1_enum] enum SLR_FLAGS\n    {\n        SLR_NO_UI                     = 0x0001,\n        SLR_ANY_MATCH                 = 0x0002,\n        SLR_UPDATE                    = 0x0004,\n        SLR_NOUPDATE                  = 0x0008,\n        SLR_NOSEARCH                  = 0x0010,\n        SLR_NOTRACK                   = 0x0020,\n        SLR_NOLINKINFO                = 0x0040,\n        SLR_INVOKE_MSI                = 0x0080,\n        SLR_NO_UI_WITH_MSG_PUMP       = 0x0101,\n        SLR_OFFER_DELETE_WITHOUT_FILE = 0x0200,\n        SLR_KNOWNFOLDER               = 0x0400,\n        SLR_MACHINE_IN_LOCAL_TARGET   = 0x0800,\n        SLR_UPDATE_MACHINE_AND_SID    = 0x1000,\n        SLR_NO_OBJECT_ID              = 0x2000\n    } SLR_FLAGS;\n\n    typedef [v1_enum] enum SLGP_FLAGS\n    {\n        SLGP_SHORTPATH        = 0x0001,\n        SLGP_UNCPRIORITY      = 0x0002,\n        SLGP_RAWPATH          = 0x0004,\n        SLGP_RELATIVEPRIORITY = 0x0008\n    } SLGP_FLAGS;\n\n    HRESULT GetPath(\n        [out, size_is(cch)] LPSTR pszFile,\n        [in] int cch,\n        [in, out, unique] WIN32_FIND_DATAA *pfd,\n        [in] DWORD fFlags);\n\n    HRESULT GetIDList( [out] LPITEMIDLIST * ppidl );\n\n    HRESULT SetIDList( [in] LPCITEMIDLIST pidl );\n\n    HRESULT GetDescription(\n        [out, size_is(cch)] LPSTR pszName,\n        [in] int cch);\n\n    HRESULT SetDescription( [in] LPCSTR pszName );\n\n    HRESULT GetWorkingDirectory(\n        [out, size_is(cch)] LPSTR pszDir,\n        [in] int cch);\n\n    HRESULT SetWorkingDirectory( [in] LPCSTR pszDir );\n\n    HRESULT GetArguments(\n        [out, size_is(cch)] LPSTR pszArgs,\n        [in] int cch);\n\n    HRESULT SetArguments( [in] LPCSTR pszArgs );\n\n    HRESULT GetHotkey( [out] WORD *pwHotkey );\n\n    HRESULT SetHotkey( [in] WORD wHotkey );\n\n    HRESULT GetShowCmd( [out] int *piShowCmd );\n\n    HRESULT SetShowCmd( [in] int iShowCmd );\n\n    HRESULT GetIconLocation(\n        [out, size_is(cch)] LPSTR pszIconPath,\n        [in] int cch,\n        [out] int *piIcon);\n\n    HRESULT SetIconLocation(\n        [in] LPCSTR pszIconPath,\n        [in] int iIcon);\n\n    HRESULT SetRelativePath(\n        [in] LPCSTR pszPathRel,\n        [in] DWORD dwReserved);\n\n    HRESULT Resolve(\n        [in] HWND hwnd,\n        [in] DWORD fFlags);\n\n    HRESULT SetPath( [in] LPCSTR pszFile );\n}\n\n\n/*****************************************************************************\n * IShellLinkW interface\n */\n[\n    object,\n    uuid(000214f9-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface IShellLinkW : IUnknown\n{\n    HRESULT GetPath(\n        [out, size_is(cch)] LPWSTR pszFile,\n        [in] int cch,\n        [in, out] WIN32_FIND_DATAW *pfd,\n        [in] DWORD fFlags);\n\n    HRESULT GetIDList( [out] LPITEMIDLIST * ppidl );\n\n    HRESULT SetIDList( [in] LPCITEMIDLIST pidl );\n\n    HRESULT GetDescription(\n        [out, size_is(cch)] LPWSTR pszName,\n        [in] int cch);\n\n    HRESULT SetDescription( [in] LPCWSTR pszName );\n\n    HRESULT GetWorkingDirectory(\n        [out, size_is(cch)] LPWSTR pszDir,\n        [in] int cch);\n\n    HRESULT SetWorkingDirectory( [in] LPCWSTR pszDir );\n\n    HRESULT GetArguments(\n        [out, size_is(cch)] LPWSTR pszArgs,\n        [in] int cch);\n\n    HRESULT SetArguments( [in] LPCWSTR pszArgs );\n\n    HRESULT GetHotkey( [out] WORD *pwHotkey );\n\n    HRESULT SetHotkey( [in] WORD wHotkey );\n\n    HRESULT GetShowCmd( [out] int *piShowCmd );\n\n    HRESULT SetShowCmd( [in] int iShowCmd );\n\n    HRESULT GetIconLocation(\n        [out, size_is(cch)] LPWSTR pszIconPath,\n        [in] int cch,\n        [out] int *piIcon);\n\n    HRESULT SetIconLocation(\n        [in] LPCWSTR pszIconPath,\n        [in] int iIcon);\n\n    HRESULT SetRelativePath(\n        [in] LPCWSTR pszPathRel,\n        [in] DWORD dwReserved);\n\n    HRESULT Resolve(\n        [in] HWND hwnd,\n        [in] DWORD fFlags);\n\n    HRESULT SetPath( [in] LPCWSTR pszFile );\n}\n\ncpp_quote(\"#define IShellLink WINELIB_NAME_AW(IShellLink)\")\n\n\n/*****************************************************************************\n * IShellExtInit interface\n */\n[\n    object,\n    uuid(000214e8-0000-0000-c000-000000000046),\n    pointer_default(unique),\n    local\n]\ninterface IShellExtInit : IUnknown\n{\n    typedef IShellExtInit *LPSHELLEXTINIT;\n\n    HRESULT Initialize(\n        [in] LPCITEMIDLIST pidlFolder,\n        [in] IDataObject *pdtobj,\n        [in] HKEY hkeyProgID);\n}\n\n\n/*******************************************************************************/\n/* Note: the following interfaces are not in shobjidl.idl under Windows, they  */\n/* are declared directly in shlobj.h. It hopefully won't break anything to put */\n/* them here anyway.                                                           */\n/*******************************************************************************/\n\n#ifndef MAX_PATH\n#define MAX_PATH 260\n#endif\n\n\n/*****************************************************************************\n * IPersistFolder3 interface\n */\n[\n    object,\n    uuid(cef04fdf-fe72-11d2-87a5-00c04f6837cf),\n    pointer_default(unique)\n]\ninterface IPersistFolder3 : IPersistFolder2\n{\n    typedef struct\n    {\n        LPITEMIDLIST\tpidlTargetFolder;\n\tWCHAR\t\tszTargetParsingName[MAX_PATH];\n\tWCHAR\t\tszNetworkProvider[MAX_PATH];\n\tDWORD\t\tdwAttributes;\n\tint\t\tcsidl;\n    } PERSIST_FOLDER_TARGET_INFO;\n\n    HRESULT InitializeEx(\n        [in] IBindCtx *pbc,\n        [in] LPCITEMIDLIST pidlRoot,\n        [in] const PERSIST_FOLDER_TARGET_INFO *ppfti);\n\n    HRESULT GetFolderTargetInfo( [out] PERSIST_FOLDER_TARGET_INFO *ppfti );\n}\n\n\n/*****************************************************************************\n * IExtractIconA interface\n */\n[\n    object,\n    uuid(000214eb-0000-0000-c000-000000000046),\n    pointer_default(unique),\n    local\n]\ninterface IExtractIconA : IUnknown\n{\ncpp_quote(\"#define GIL_OPENICON     0x0001\")\ncpp_quote(\"#define GIL_FORSHELL     0x0002\")\ncpp_quote(\"#define GIL_ASYNC        0x0020\")\ncpp_quote(\"#define GIL_DEFAULTICON  0x0040\")\ncpp_quote(\"#define GIL_FORSHORTCUT  0x0080\")\n\ncpp_quote(\"#define GIL_SIMULATEDOC  0x0001\")\ncpp_quote(\"#define GIL_PERINSTANCE  0x0002\")\ncpp_quote(\"#define GIL_PERCLASS     0x0004\")\ncpp_quote(\"#define GIL_NOTFILENAME  0x0008\")\ncpp_quote(\"#define GIL_DONTCACHE    0x0010\")\n\n    typedef IExtractIconA *LPEXTRACTICONA;\n\n    HRESULT GetIconLocation(\n        [in] UINT uFlags,\n        [out, size_is(cchMax)] LPSTR szIconFile,\n        [in] UINT cchMax,\n        [out] INT *piIndex,\n        [out] UINT *pwFlags);\n\n    HRESULT Extract(\n        [in] LPCSTR pszFile,\n        [in] UINT nIconIndex,\n        [out] HICON *phiconLarge,\n        [out] HICON *phiconSmall,\n        [in] UINT nIconSize );\n}\n\n\n/*****************************************************************************\n * IExtractIconW interface\n */\n[\n    object,\n    uuid(000214fa-0000-0000-c000-000000000046),\n    pointer_default(unique),\n    local\n]\ninterface IExtractIconW : IUnknown\n{\n    typedef IExtractIconW *LPEXTRACTICONW;\n\n    HRESULT GetIconLocation(\n        [in] UINT uFlags,\n        [out, size_is(cchMax)] LPWSTR szIconFile,\n        [in] UINT cchMax,\n        [out] INT *piIndex,\n        [out] UINT *pwFlags);\n\n    HRESULT Extract(\n        [in] LPCWSTR pszFile,\n        [in] UINT nIconIndex,\n        [out] HICON *phiconLarge,\n        [out] HICON *phiconSmall,\n        [in] UINT nIconSize );\n}\n\ncpp_quote(\"#define LPEXTRACTICON WINELIB_NAME_AW(LPEXTRACTICON)\")\ncpp_quote(\"#define IExtractIcon WINELIB_NAME_AW(IExtractIcon)\")\n\n\n/*****************************************************************************\n * ICommDlgBrowser interface\n */\n[\n    object,\n    uuid(000214f1-0000-0000-c000-000000000046),\n    pointer_default(unique)\n]\ninterface ICommDlgBrowser : IUnknown\n{\ncpp_quote(\"#define CDBOSC_SETFOCUS     0x00000000\")\ncpp_quote(\"#define CDBOSC_KILLFOCUS    0x00000001\")\ncpp_quote(\"#define CDBOSC_SELCHANGE    0x00000002\")\ncpp_quote(\"#define CDBOSC_RENAME       0x00000003\")\ncpp_quote(\"#define CDBOSC_STATECHANGE  0x00000004\")\n\n    typedef ICommDlgBrowser *LPCOMMDLGBROWSER;\n\n    HRESULT OnDefaultCommand( [in] IShellView *shv );\n    HRESULT OnStateChange( [in] IShellView *shv, [in] ULONG uChange );\n    HRESULT IncludeObject( [in] IShellView *shv, [in] LPCITEMIDLIST pidl );\n}\n\n\n/*****************************************************************************\n * ICommDlgBrowser2 interface\n */\n[\n object,\n uuid(10339516-2894-11D2-9039-00C04F8EEB3E),\n pointer_default(unique)\n]\ninterface ICommDlgBrowser2 : ICommDlgBrowser\n{\n\n    HRESULT Notify(\n        [in] IShellView *ppshv,\n        [in] DWORD dwNotifyType);\n\n    HRESULT GetDefaultMenuText(\n        [in] IShellView *ppshv,\n        [out, string, size_is(cchMax)] LPWSTR pszText,\n        [in] int cchMax);\n\n    HRESULT GetViewFlags(\n        [out] DWORD *pdwFlags);\n}\n\n\n/*****************************************************************************\n * ICommDlgBrowser3 interface\n */\n[\n object,\n uuid(C8AD25A1-3294-41EE-8165-71174BD01C57),\n pointer_default(unique)\n]\ninterface ICommDlgBrowser3 : ICommDlgBrowser2\n{\n\n    HRESULT OnColumnClicked(\n        [in] IShellView *ppshv,\n        [in] int iColumn);\n\n    HRESULT GetCurrentFilter(\n        [out, string, size_is(cchFileSpec)] LPWSTR pszFileSpec,\n        [in] int cchFileSpec);\n\n    HRESULT OnPreViewCreated(\n        [in] IShellView *ppshv);\n}\n\n/*****************************************************************************\n * IDockingWindow interface\n */\n[\n    object,\n    uuid(012dd920-7b26-11d0-8ca9-00a0c92dbfe8)\n]\ninterface IDockingWindow : IOleWindow\n{\n    HRESULT ShowDW(\n        [in] BOOL fShow);\n\n    HRESULT CloseDW(\n        [in] DWORD dwReserved);\n\n    HRESULT ResizeBorderDW(\n        [in] LPCRECT prcBorder,\n        [in] IUnknown *punkToolbarSite,\n        [in] BOOL fReserved);\n}\n\n\n/*****************************************************************************\n * IDockingWindowFrame interface\n */\n[\n    object,\n    uuid(47d2657a-7b27-11d0-8ca9-00a0c92dbfe8),\n    pointer_default(unique),\n    local\n]\ninterface IDockingWindowFrame : IOleWindow\n{\ncpp_quote(\"#define DWFRF_NORMAL           0x0000\")\ncpp_quote(\"#define DWFRF_DELETECONFIGDATA 0x0001\")\ncpp_quote(\"#define DWFAF_HIDDEN           0x0001\")\n\n    HRESULT AddToolbar(\n        [in] IUnknown *punkSrc,\n        [in] LPCWSTR pwszItem,\n        [in] DWORD dwAddFlags);\n\n    HRESULT RemoveToolbar(\n        [in] IUnknown *punkSrc,\n        [in] DWORD dwRemoveFlags);\n\n    HRESULT FindToolbar(\n        [in] LPCWSTR pwszItem,\n        [in] REFIID riid,\n        [out] LPVOID *ppvObj);\n}\n\n\n/*****************************************************************************\n * IDragSourceHelper interface\n */\n[\n    object,\n    uuid(de5bf786-477a-11d2-839d-00c04fd918d0),\n    pointer_default(unique),\n    local\n]\ninterface IDragSourceHelper : IUnknown\n{\n    typedef struct\n    {\n        SIZE     sizeDragImage;\n        POINT    ptOffset;\n        HBITMAP  hbmpDragImage;\n        COLORREF crColorKey;\n    } SHDRAGIMAGE, *LPSHDRAGIMAGE;\n\n  HRESULT InitializeFromBitmap(\n      [in] LPSHDRAGIMAGE pshdi,\n      [in] IDataObject *pDataObject);\n\n  HRESULT InitializeFromWindow(\n      [in] HWND hwnd,\n      [in] POINT *ppt,\n      [in] IDataObject *pDataObject);\n}\n\n\n/*****************************************************************************\n * IDropTargetHelper interface\n */\n[\n    object,\n    uuid(4657278b-411b-11d2-839a-00c04fd918d0),\n    pointer_default(unique),\n    local\n]\ninterface IDropTargetHelper : IUnknown\n{\n    HRESULT DragEnter(\n        [in] HWND hwndTarget,\n        [in] IDataObject *pDataObject,\n        [in] POINT *ppt,\n        [in] DWORD dwEffect);\n\n    HRESULT DragLeave();\n\n    HRESULT DragOver(\n        [in] POINT *ppt,\n        [in] DWORD dwEffect);\n\n    HRESULT Drop(\n        [in] IDataObject *pDataObject,\n        [in] POINT *ppt,\n        [in] DWORD dwEffect);\n\n    HRESULT Show( [in] BOOL fShow );\n}\n\n\n/*****************************************************************************\n * IContextMenu interface\n */\n[\n    object,\n    uuid(000214e4-0000-0000-c000-000000000046),\n    pointer_default(unique),\n    local\n]\ninterface IContextMenu : IUnknown\n{\ncpp_quote(\"#define CMF_NORMAL            0x00000000\")\ncpp_quote(\"#define CMF_DEFAULTONLY       0x00000001\")\ncpp_quote(\"#define CMF_VERBSONLY         0x00000002\")\ncpp_quote(\"#define CMF_EXPLORE           0x00000004\")\ncpp_quote(\"#define CMF_NOVERBS           0x00000008\")\ncpp_quote(\"#define CMF_CANRENAME         0x00000010\")\ncpp_quote(\"#define CMF_NODEFAULT         0x00000020\")\ncpp_quote(\"#define CMF_INCLUDESTATIC     0x00000040\")\ncpp_quote(\"#define CMF_ITEMMENU          0x00000080\")\ncpp_quote(\"#define CMF_EXTENDEDVERBS     0x00000100\")\ncpp_quote(\"#define CMF_DISABLEDVERBS     0x00000200\")\ncpp_quote(\"#define CMF_ASYNCVERBSTATE    0x00000400\")\ncpp_quote(\"#define CMF_OPTIMIZEFORINVOKE 0x00000800\")\ncpp_quote(\"#define CMF_SYNCCASCADEMENU   0x00001000\")\ncpp_quote(\"#define CMF_DONOTPICKDEFAULT  0x00002000\")\ncpp_quote(\"#define CMF_RESERVED          0xffff0000\")\n\ncpp_quote(\"#define GCS_VERBA         0x00000000\")\ncpp_quote(\"#define GCS_HELPTEXTA     0x00000001\")\ncpp_quote(\"#define GCS_VALIDATEA     0x00000002\")\ncpp_quote(\"#define GCS_VERBW         0x00000004\")\ncpp_quote(\"#define GCS_HELPTEXTW     0x00000005\")\ncpp_quote(\"#define GCS_VALIDATEW     0x00000006\")\ncpp_quote(\"#define GCS_UNICODE       0x00000004\")\ncpp_quote(\"#define GCS_VERB          WINELIB_NAME_AW(GCS_VERB)\")\ncpp_quote(\"#define GCS_HELPTEXT      WINELIB_NAME_AW(GCS_HELPTEXT)\")\ncpp_quote(\"#define GCS_VALIDATE      WINELIB_NAME_AW(GCS_VALIDATE)\")\n\ncpp_quote(\"#define CMDSTR_NEWFOLDERA   \\\"NewFolder\\\"\")\ncpp_quote(\"#define CMDSTR_VIEWLISTA    \\\"ViewList\\\"\")\ncpp_quote(\"#define CMDSTR_VIEWDETAILSA \\\"ViewDetails\\\"\")\ncpp_quote(\"#if defined(__GNUC__)\")\ncpp_quote(\"# define CMDSTR_NEWFOLDERW (const WCHAR []){ 'N','e','w','F','o','l','d','e','r',0 }\")\ncpp_quote(\"# define CMDSTR_VIEWLISTW (const WCHAR []){ 'V','i','e','w','L','i','s','t',0 }\")\ncpp_quote(\"# define CMDSTR_VIEWDETAILSW (const WCHAR []){ 'V','i','e','w','D','e','t','a','i','l','s',0 }\")\ncpp_quote(\"#elif defined(_MSC_VER)\")\ncpp_quote(\"# define CMDSTR_NEWFOLDERW   L\\\"NewFolder\\\"\")\ncpp_quote(\"# define CMDSTR_VIEWLISTW    L\\\"ViewList\\\"\")\ncpp_quote(\"# define CMDSTR_VIEWDETAILSW L\\\"ViewDetails\\\"\")\ncpp_quote(\"#else\")\ncpp_quote(\"static const WCHAR CMDSTR_NEWFOLDERW[] = {'N','e','w','F','o','l','d','e','r',0};\")\ncpp_quote(\"static const WCHAR CMDSTR_VIEWLISTW [] = {'V','i','e','w','L','i','s','t',0};\")\ncpp_quote(\"static const WCHAR CMDSTR_VIEWDETAILSW[] = {'V','i','e','w','D','e','t','a','i','l','s',0};\")\ncpp_quote(\"#endif\")\ncpp_quote(\"#define CMDSTR_NEWFOLDER    WINELIB_NAME_AW(CMDSTR_NEWFOLDER)\")\ncpp_quote(\"#define CMDSTR_VIEWLIST     WINELIB_NAME_AW(CMDSTR_VIEWLIST)\")\ncpp_quote(\"#define CMDSTR_VIEWDETAILS  WINELIB_NAME_AW(CMDSTR_VIEWDETAILS)\")\n\ncpp_quote(\"#define CMIC_MASK_HOTKEY         SEE_MASK_HOTKEY\")\ncpp_quote(\"#define CMIC_MASK_ICON           SEE_MASK_ICON\")\ncpp_quote(\"#define CMIC_MASK_FLAG_NO_UI     SEE_MASK_FLAG_NO_UI\")\ncpp_quote(\"#define CMIC_MASK_UNICODE        SEE_MASK_UNICODE\")\ncpp_quote(\"#define CMIC_MASK_NO_CONSOLE     SEE_MASK_NO_CONSOLE\")\ncpp_quote(\"#define CMIC_MASK_HASLINKNAME    SEE_MASK_HASLINKNAME\")\ncpp_quote(\"#define CMIC_MASK_FLAG_SEP_VDM   SEE_MASK_FLAG_SEPVDM\")\ncpp_quote(\"#define CMIC_MASK_HASTITLE       SEE_MASK_HASTITLE\")\ncpp_quote(\"#define CMIC_MASK_ASYNCOK        SEE_MASK_ASYNCOK\")\ncpp_quote(\"#define CMIC_MASK_NOASYNC        SEE_MASK_NOASYNC\")\ncpp_quote(\"#define CMIC_MASK_SHIFT_DOWN     0x10000000\")\ncpp_quote(\"#define CMIC_MASK_PTINVOKE       0x20000000\")\ncpp_quote(\"#define CMIC_MASK_CONTROL_DOWN   0x40000000\")\ncpp_quote(\"#define CMIC_MASK_FLAG_LOG_USAGE SEE_MASK_FLAG_LOG_USAGE\")\ncpp_quote(\"#define CMIC_MASK_NOZONECHECKS   SEE_MASK_NOZONECHECKS\")\n\n    typedef IContextMenu *LPCONTEXTMENU;\n\n    typedef struct tagCMINVOKECOMMANDINFO\n    {\n        DWORD cbSize;\n        DWORD fMask;\n        HWND hwnd;\n        LPCSTR lpVerb;\n        LPCSTR lpParameters;\n        LPCSTR lpDirectory;\n        INT nShow;\n        DWORD dwHotKey;\n        HANDLE hIcon;\n    } CMINVOKECOMMANDINFO, *LPCMINVOKECOMMANDINFO;\n\n    typedef struct tagCMInvokeCommandInfoEx\n    {\n        DWORD cbSize;\n        DWORD fMask;\n        HWND hwnd;\n        LPCSTR lpVerb;\n        LPCSTR lpParameters;\n        LPCSTR lpDirectory;\n        INT nShow;\n        DWORD dwHotKey;\n        HANDLE hIcon;\n        LPCSTR lpTitle;\n        LPCWSTR lpVerbW;\n        LPCWSTR lpParametersW;\n        LPCWSTR lpDirectoryW;\n        LPCWSTR lpTitleW;\n        POINT ptInvoke;\n    } CMINVOKECOMMANDINFOEX, *LPCMINVOKECOMMANDINFOEX;\n\n    HRESULT QueryContextMenu(\n        [in] HMENU hmenu,\n        [in] UINT indexMenu,\n        [in] UINT idCmdFirst,\n        [in] UINT idCmdLast,\n        [in] UINT uFlags);\n\n    HRESULT InvokeCommand( [in] LPCMINVOKECOMMANDINFO lpici );\n\n    HRESULT GetCommandString(\n        [in] UINT_PTR idCmd,\n        [in] UINT uType,\n        [out] UINT *pwReserved,\n        [out, size_is(cchMax)] LPSTR pszName,\n        [in] UINT cchMax);\n}\n\n\n/*****************************************************************************\n * IContextMenu2 interface\n */\n[\n    object,\n    uuid(000214f4-0000-0000-c000-000000000046),\n    pointer_default(unique),\n    local\n]\ninterface IContextMenu2 : IContextMenu\n{\n    typedef IContextMenu2 *LPCONTEXTMENU2;\n\n    HRESULT HandleMenuMsg(\n        [in] UINT uMsg,\n        [in] WPARAM wParam,\n        [in] LPARAM lParam);\n}\n\n\n/*****************************************************************************\n * IContextMenu3 interface\n */\n[\n    object,\n    uuid(bcfce0a0-ec17-11d0-8d10-00a0c90f2719),\n    pointer_default(unique),\n    local\n]\ninterface IContextMenu3 : IContextMenu2\n{\n    typedef IContextMenu3 *LPCONTEXTMENU3;\n\n    HRESULT HandleMenuMsg2(\n        [in] UINT uMsg,\n        [in] WPARAM wParam,\n        [in] LPARAM lParam,\n        [out] LRESULT *plResult);\n}\n\n\n[\n    object,\n    uuid(3409e930-5a39-11d1-83fa-00a0c90dc849),\n    pointer_default(unique),\n    local\n]\ninterface IContextMenuCB : IUnknown\n{\n    HRESULT CallBack(\n        [in] IShellFolder *psf,\n        [in] HWND hwndOwner,\n        [in] IDataObject *pdtobj,\n        [in] UINT uMsg,\n        [in] WPARAM wParam,\n        [in] LPARAM lParam);\n}\n\n/*****************************************************************************\n * IShellExecuteHookA interface\n */\n[\n    object,\n    uuid(000214f5-0000-0000-c000-000000000046),\n    pointer_default(unique),\n    local\n]\ninterface IShellExecuteHookA : IUnknown\n{\n    cpp_quote(\"struct _SHELLEXECUTEINFOA;\")\n    HRESULT Execute(\n        [in, out] struct _SHELLEXECUTEINFOA* pei);\n}\n\n\n/*****************************************************************************\n * IShellExecuteHookW interface\n */\n[\n    object,\n    uuid(000214fb-0000-0000-c000-000000000046),\n    pointer_default(unique),\n    local\n]\ninterface IShellExecuteHookW : IUnknown\n{\n    cpp_quote(\"struct _SHELLEXECUTEINFOW;\")\n    HRESULT Execute(\n\t\t[in, out] struct _SHELLEXECUTEINFOW* pei);\n}\n\n/*****************************************************************************\n * IShellLinkDataList interface\n */\n[\n    object,\n    uuid(45e2b4ae-b1c3-11d0-b92f-00a0c90312e1),\n    pointer_default(unique)\n]\ninterface IShellLinkDataList : IUnknown\n{\n    [local] HRESULT AddDataBlock(\n                [in] void *pDataBlock);\n    [local] HRESULT CopyDataBlock(\n                [in] DWORD dwSig,\n                [out] void **ppDataBlock);\n    HRESULT RemoveDataBlock(\n                [in] DWORD dwSig);\n    HRESULT GetFlags(\n                [out] DWORD *pdwFlags);\n    HRESULT SetFlags(\n                [in] DWORD dwFlags);\n}\n\n\n/*****************************************************************************\n * IResolveShellLink interface\n */\n[\n    object,\n    uuid(5cd52983-9449-11d2-963a-00c04f79adf0),\n    pointer_default(unique)\n]\ninterface IResolveShellLink : IUnknown\n{\n    HRESULT ResolveShellLink(\n                [in] IUnknown *punk,\n                [in] HWND hwnd,\n                [in] DWORD fFlags);\n}\n\n\n/*****************************************************************************\n * IURLSearchHook interface\n */\n[\n    object,\n    uuid(ac60f6a0-0fd9-11d0-99cb-00c04fd64497),\n    pointer_default(unique),\n    local\n]\ninterface IURLSearchHook : IUnknown\n{\n    HRESULT Translate(\n                [in, out] LPWSTR lpwszSearchURL,\n                [in] DWORD cchBufferSize);\n}\n\n\n/*****************************************************************************\n * ISearchContext interface\n */\n[\n    object,\n    uuid(09f656a2-41af-480c-88f7-16cc0d164615),\n    pointer_default(unique),\n    local\n]\ninterface ISearchContext : IUnknown\n{\n    HRESULT GetSearchUrl(\n                [in] BSTR *pbstrSearchUrl);\n    HRESULT GetSearchText(\n                [in] BSTR *pbstrSearchText);\n    HRESULT GetSearchStyle(\n                [in] DWORD *pdwSearchStyle);\n}\n\n\n/*****************************************************************************\n * IURLSearchHook2 interface\n */\n[\n    object,\n    uuid(5ee44da4-6d32-46e3-86bc-07540dedd0e0),\n    pointer_default(unique),\n    local\n]\ninterface IURLSearchHook2 : IURLSearchHook\n{\n    HRESULT TranslateWithSearchContext(\n                [in, out] LPWSTR lpwszSearchURL,\n                [in] DWORD cchBufferSize,\n                [in] ISearchContext *pSearchContext);\n}\n\n\ncpp_quote(\"#define INewShortcutHook WINELIB_NAME_AW(INewShortcutHook)\")\n\n/*****************************************************************************\n * INewShortcutHookA interface\n */\n[\n    object,\n    uuid(000214e1-0000-0000-c000-000000000046),\n    pointer_default(unique),\n    local\n]\ninterface INewShortcutHookA : IUnknown\n{\n    HRESULT SetReferent(\n                [in] LPCSTR pcszReferent,\n                [in] HWND hwnd);\n    HRESULT GetReferent(\n                [out] LPSTR pcszReferent,\n                [in] int cchReferent);\n    HRESULT SetFolder(\n                [in] LPCSTR pcszReferent);\n    HRESULT GetFolder(\n                [out] LPSTR pcszReferent,\n                [in] int cchFolder);\n    HRESULT GetName(\n                [out] LPSTR pszName,\n                [in] int cchName);\n    HRESULT GetExtension(\n                [out] LPSTR pszExtension,\n                [in] int cchExtension);\n} \n\n\n/*****************************************************************************\n * INewShortcutHookW interface\n */\n[\n    object,\n    uuid(000214f7-0000-0000-c000-000000000046),\n    pointer_default(unique),\n    local\n]\ninterface INewShortcutHookW : IUnknown\n{\n    HRESULT SetReferent(\n                [in] LPCWSTR pcszReferent,\n                [in] HWND hwnd);\n    HRESULT GetReferent(\n                [out] LPWSTR pcszReferent,\n                [in] int cchReferent);\n    HRESULT SetFolder(\n                [in] LPCWSTR pcszReferent);\n    HRESULT GetFolder(\n                [out] LPWSTR pcszReferent,\n                [in] int cchFolder);\n    HRESULT GetName(\n                [out] LPWSTR pszName,\n                [in] int cchName);\n    HRESULT GetExtension(\n                [out] LPWSTR pszExtension,\n                [in] int cchExtension);\n} \n\n/*****************************************************************************\n * IRunnableTask interface\n */\n[\n    object,\n    uuid(85788d00-6807-11d0-b810-00c04fd706ec),\n    pointer_default(unique),\n    local\n]\ninterface IRunnableTask : IUnknown\n{\n    HRESULT Run();\n    HRESULT Kill([in] BOOL fWait);\n    HRESULT Suspend();\n    HRESULT Resume();\n    ULONG IsRunning();\n}\n\n/*****************************************************************************\n * IShellChangeNotify interface\n */\n[\n    object,\n    uuid(d82be2b1-5764-11d0-a96e-00c04fd705a2),\n    pointer_default(unique),\n    local\n]\ninterface IShellChangeNotify : IUnknown\n{\n    HRESULT OnChange(\n                [in] LONG lEvent,\n                [in] LPCITEMIDLIST pidl1,\n                [in] LPCITEMIDLIST pidl2);\n}\n\n/*****************************************************************************\n * IFileSystemBindData interface\n */\n[\n    object,\n    uuid(01e18d10-4d8b-11d2-855d-006008059367),\n    pointer_default(unique),\n    local\n]\ninterface IFileSystemBindData : IUnknown\n{\n    HRESULT SetFindData(\n                [in] const WIN32_FIND_DATAW *pfd);\n    HRESULT GetFindData(\n                [out] WIN32_FIND_DATAW *pfd);\n}\n\n/*****************************************************************************\n *    ITaskbarList interface\n */\n[\n    object,\n    uuid(56FDF342-FD6D-11d0-958A-006097C9A090),\n    pointer_default(unique)\n]\ninterface ITaskbarList : IUnknown\n{\n    HRESULT HrInit();\n\n    HRESULT AddTab(\n        [in] HWND hwnd);\n\n    HRESULT DeleteTab(\n        [in] HWND hwnd);\n\n    HRESULT ActivateTab(\n        [in] HWND hwnd);\n\n    HRESULT SetActiveAlt(\n        [in] HWND hwnd);\n}\n\n/*****************************************************************************\n *    ITaskbarList2 interface\n */\n[\n    object,\n    uuid(602D4995-B13A-429B-A66E-1935E44F4317),\n    pointer_default(unique)\n]\ninterface ITaskbarList2 : ITaskbarList\n{\n    HRESULT MarkFullscreenWindow(\n        [in] HWND hwnd,\n        [in] BOOL fullscreen);\n}\n\ncpp_quote(\"#ifdef MIDL_PASS\")\ntypedef IUnknown* HIMAGELIST;\ncpp_quote(\"#endif\")\n\ntypedef [v1_enum] enum THUMBBUTTONFLAGS {\n    THBF_ENABLED         = 0x0000,\n    THBF_DISABLED        = 0x0001,\n    THBF_DISMISSONCLICK  = 0x0002,\n    THBF_NOBACKGROUND    = 0x0004,\n    THBF_HIDDEN          = 0x0008,\n    THBF_NONINTERACTIVE  = 0x0010\n} THUMBBUTTONFLAGS;\n\ncpp_quote(\"DEFINE_ENUM_FLAG_OPERATORS(THUMBBUTTONFLAGS)\")\n\ntypedef [v1_enum] enum THUMBBUTTONMASK {\n    THB_BITMAP   = 0x0001,\n    THB_ICON     = 0x0002,\n    THB_TOOLTIP  = 0x0004,\n    THB_FLAGS    = 0x0008\n} THUMBBUTTONMASK;\n\ncpp_quote(\"DEFINE_ENUM_FLAG_OPERATORS(THUMBBUTTONMASK)\")\n\ncpp_quote(\"#include <pshpack8.h>\")\ntypedef struct THUMBBUTTON {\n    THUMBBUTTONMASK dwMask;\n    UINT iId;\n    UINT iBitmap;\n    HICON hIcon;\n    WCHAR szTip[260];\n    THUMBBUTTONFLAGS dwFlags;\n} THUMBBUTTON, *LPTHUMBBUTTON;\ncpp_quote(\"#include <poppack.h>\")\n\n[\n    uuid(ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf),\n    object\n]\ninterface ITaskbarList3 : ITaskbarList2\n{\n    typedef [v1_enum] enum TBPFLAG {\n        TBPF_NOPROGRESS     = 0x0000,\n        TBPF_INDETERMINATE  = 0x0001,\n        TBPF_NORMAL         = 0x0002,\n        TBPF_ERROR          = 0x0004,\n        TBPF_PAUSED         = 0x0008\n    } TBPFLAG;\n\n    cpp_quote(\"DEFINE_ENUM_FLAG_OPERATORS(TBPFLAG)\")\n\n    HRESULT SetProgressValue(\n            [in] HWND hwnd,\n            [in] ULONGLONG ullCompleted,\n            [in] ULONGLONG ullTotal);\n\n    HRESULT SetProgressState(\n            [in] HWND hwnd,\n            [in] TBPFLAG tbpFlags);\n\n    HRESULT RegisterTab(\n            [in] HWND hwndTab,\n            [in] HWND hwndMDI);\n\n    HRESULT UnregisterTab([in] HWND hwndTab);\n\n    HRESULT SetTabOrder(\n            [in] HWND hwndTab,\n            [in] HWND hwndInsertBefore);\n\n    HRESULT SetTabActive(\n            [in] HWND hwndTab,\n            [in] HWND hwndMDI,\n            [in] DWORD dwReserved);\n\n    HRESULT ThumbBarAddButtons(\n            [in] HWND hwnd,\n            [in] UINT cButtons,\n            [in, size_is(cButtons)] LPTHUMBBUTTON pButton);\n\n    HRESULT ThumbBarUpdateButtons(\n            [in] HWND hwnd,\n            [in] UINT cButtons,\n            [in, size_is(cButtons)] LPTHUMBBUTTON pButton);\n\n    HRESULT ThumbBarSetImageList(\n            [in] HWND hwnd,\n            [in] HIMAGELIST himl);\n\n    HRESULT SetOverlayIcon(\n            [in] HWND hwnd,\n            [in] HICON hIcon,\n            [in, unique, string] LPCWSTR pszDescription);\n\n    HRESULT SetThumbnailTooltip(\n            [in] HWND hwnd,\n            [in, unique, string] LPCWSTR pszTip);\n\n    HRESULT SetThumbnailClip(\n            [in] HWND hwnd,\n            [in] RECT *prcClip);\n}\n\n[\n    uuid(c43dc798-95d1-4bea-9030-bb99e2983a1a),\n    object\n]\ninterface ITaskbarList4 : ITaskbarList3\n{\n    typedef [v1_enum] enum STPFLAG {\n        STPF_NONE                       = 0x0000,\n        STPF_USEAPPTHUMBNAILALWAYS      = 0x0001,\n        STPF_USEAPPTHUMBNAILWHENACTIVE  = 0x0002,\n        STPF_USEAPPPEEKALWAYS           = 0x0004,\n        STPF_USEAPPPEEKWHENACTIVE       = 0x0008\n    } STPFLAG;\n\n    cpp_quote(\"DEFINE_ENUM_FLAG_OPERATORS(STPFLAG)\")\n\n    HRESULT SetTabProperties(\n            [in] HWND hwndTab,\n            [in] STPFLAG stpFlags);\n}\n\n/*****************************************************************************\n *    IAutoCompleteDropDown interface\n */\n[\n    object,\n    uuid(3CD141F4-3C6A-11d2-BCAA-00C04FD929DB),\n    pointer_default(unique)\n]\ninterface IAutoCompleteDropDown : IUnknown\n{\ncpp_quote(\"#define ACDD_VISIBLE   0x0001\")\n\n    HRESULT GetDropDownStatus(\n        [out] DWORD *pdwFlags,\n        [out, string] LPWSTR *ppwszString);\n\n    HRESULT ResetEnumerator();\n}\n\n[\n    object,\n    uuid(cb728b20-f786-11ce-92ad-00aa00a74cd0),\n    pointer_default(unique)\n]\ninterface IProfferService : IUnknown\n{\n    HRESULT ProfferService(\n        [in] REFGUID service,\n        [in] IServiceProvider *pService,\n        [out] DWORD *pCookie);\n\n    HRESULT RevokeService([in] DWORD cookie);\n}\n\n/*****************************************************************************\n * IExplorerBrowserEvents interface\n */\n[\n object,\n uuid(361BBDC7-E6EE-4E13-BE58-58E2240C810F)\n]\ninterface IExplorerBrowserEvents : IUnknown\n{\n    HRESULT OnNavigationPending(\n        [in] PCIDLIST_ABSOLUTE pidlFolder);\n\n    HRESULT OnViewCreated(\n        [in] IShellView *psv);\n\n    HRESULT OnNavigationComplete(\n        [in] PCIDLIST_ABSOLUTE pidlFolder);\n\n    HRESULT OnNavigationFailed(\n        [in] PCIDLIST_ABSOLUTE pidlFolder);\n}\n\ntypedef GUID EXPLORERPANE;\ntypedef EXPLORERPANE *REFEXPLORERPANE;\n\ncpp_quote(\"#define SID_ExplorerPaneVisibility IID_IExplorerPaneVisibility\")\n\n/*****************************************************************************\n * IExplorerPaneVisibility interface\n */\n[\n object,\n uuid(E07010EC-BC17-44C0-97B0-46C7C95B9EDC)\n]\ninterface IExplorerPaneVisibility : IUnknown\n{\n    [v1_enum] enum _EXPLORERPANESTATE {\n        EPS_DONTCARE     = 0x0,\n        EPS_DEFAULT_ON   = 0x1,\n        EPS_DEFAULT_OFF  = 0x2,\n        EPS_STATE_MASK   = 0xffff,\n        EPS_INITIALSTATE = 0x10000,\n        EPS_FORCE        = 0x20000\n    };\n    typedef DWORD EXPLORERPANESTATE;\n\n    HRESULT GetPaneState(\n        [in] REFEXPLORERPANE ep,\n        [out] EXPLORERPANESTATE *peps);\n}\n\ntypedef [v1_enum] enum tagEXPLORER_BROWSER_FILL_FLAGS {\n    EBF_NONE                     = 0,\n    EBF_SELECTFROMDATAOBJECT     = 0x100,\n    EBF_NODROPTARGET             = 0x200\n} EXPLORER_BROWSER_FILL_FLAGS;\n\ntypedef [v1_enum] enum tagEXPLORER_BROWSER_OPTIONS {\n    EBO_NONE               = 0x00,\n    EBO_NAVIGATEONCE       = 0x01,\n    EBO_SHOWFRAMES         = 0x02,\n    EBO_ALWAYSNAVIGATE     = 0x04,\n    EBO_NOTRAVELLOG        = 0x08,\n    EBO_NOWRAPPERWINDOW    = 0x10,\n    EBO_HTMLSHAREPOINTVIEW = 0x20,\n    EBO_NOBORDER           = 0x40,\n    EBO_NOPERSISTVIEWSTATE = 0x80,\n} EXPLORER_BROWSER_OPTIONS;\n\ncpp_quote(\"#define SID_SExplorerBrowserFrame IID_ICommDlgBrowser\")\n\n/*****************************************************************************\n * IExplorerBrowser interface\n */\n[\n object,\n uuid(DFD3B6B5-C10C-4BE9-85F6-A66969F402F6),\n pointer_default(unique)\n]\ninterface IExplorerBrowser : IUnknown\n{\n\n    [local] HRESULT Initialize(\n        [in] HWND hwndParent,\n        [in] const RECT *prc,\n        [in, unique] const FOLDERSETTINGS *pfs);\n\n    HRESULT Destroy();\n\n    [local] HRESULT SetRect(\n        [in,out,unique] HDWP *phdwp,\n        [in] RECT rcBrowser);\n\n    HRESULT SetPropertyBag(\n        [in, string] LPCWSTR pszPropertyBag);\n\n    HRESULT SetEmptyText(\n        [in, string] LPCWSTR pszEmptyText);\n\n    HRESULT SetFolderSettings(\n        [in] const FOLDERSETTINGS *pfs);\n\n    HRESULT Advise(\n        [in] IExplorerBrowserEvents *psbe,\n        [out] DWORD *pdwCookie);\n\n    HRESULT Unadvise(\n        [in] DWORD dwCookie);\n\n    HRESULT SetOptions(\n        [in] EXPLORER_BROWSER_OPTIONS dwFlag);\n\n    HRESULT GetOptions(\n        [out] EXPLORER_BROWSER_OPTIONS *pdwFlag);\n\n    HRESULT BrowseToIDList(\n        [in] PCUIDLIST_RELATIVE pidl,\n        [in] UINT uFlags);\n\n    HRESULT BrowseToObject(\n        [in] IUnknown *punk,\n        [in] UINT uFlags);\n\n    HRESULT FillFromObject(\n        [in] IUnknown *punk,\n        [in] EXPLORER_BROWSER_FILL_FLAGS dwFlags);\n\n    HRESULT RemoveAll();\n\n    HRESULT GetCurrentView(\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppv);\n}\n\n/*****************************************************************************\n * INameSpaceTreeControl interface\n */\n[\n object,\n uuid(028212A3-B627-47E9-8856-C14265554E4F)\n]\ninterface INameSpaceTreeControl : IUnknown\n{\n    [v1_enum] enum _NSTCSTYLE {\n        NSTCS_HASEXPANDOS                 = 0x00000001,\n        NSTCS_HASLINES                    = 0x00000002,\n        NSTCS_SINGLECLICKEXPAND           = 0x00000004,\n        NSTCS_FULLROWSELECT               = 0x00000008,\n        NSTCS_SPRINGEXPAND                = 0x00000010,\n        NSTCS_HORIZONTALSCROLL            = 0x00000020,\n        NSTCS_ROOTHASEXPANDO              = 0x00000040,\n        NSTCS_SHOWSELECTIONALWAYS         = 0x00000080,\n        NSTCS_NOINFOTIP                   = 0x00000200,\n        NSTCS_EVENHEIGHT                  = 0x00000400,\n        NSTCS_NOREPLACEOPEN               = 0x00000800,\n        NSTCS_DISABLEDRAGDROP             = 0x00001000,\n        NSTCS_NOORDERSTREAM               = 0x00002000,\n        NSTCS_RICHTOOLTIP                 = 0x00004000,\n        NSTCS_BORDER                      = 0x00008000,\n        NSTCS_NOEDITLABELS                = 0x00010000,\n        NSTCS_TABSTOP                     = 0x00020000,\n        NSTCS_FAVORITESMODE               = 0x00080000,\n        NSTCS_AUTOHSCROLL                 = 0x00100000,\n        NSTCS_FADEINOUTEXPANDOS           = 0x00200000,\n        NSTCS_EMPTYTEXT                   = 0x00400000,\n        NSTCS_CHECKBOXES                  = 0x00800000,\n        NSTCS_PARTIALCHECKBOXES           = 0x01000000,\n        NSTCS_EXCLUSIONCHECKBOXES         = 0x02000000,\n        NSTCS_DIMMEDCHECKBOXES            = 0x04000000,\n        NSTCS_NOINDENTCHECKS              = 0x08000000,\n        NSTCS_ALLOWJUNCTIONS              = 0x10000000,\n        NSTCS_SHOWTABSBUTTON              = 0x20000000,\n        NSTCS_SHOWDELETEBUTTON            = 0x40000000,\n        NSTCS_SHOWREFRESHBUTTON      = (int)0x80000000\n    };\n    typedef DWORD NSTCSTYLE;\n\n    [v1_enum] enum _NSTCROOTSTYLE {\n        NSTCRS_VISIBLE                    = 0x0000,\n        NSTCRS_HIDDEN                     = 0x0001,\n        NSTCRS_EXPANDED                   = 0x0002\n    };\n    typedef DWORD NSTCROOTSTYLE;\n\n    [v1_enum] enum _NSTCITEMSTATE {\n        NSTCIS_NONE                       = 0x0000,\n        NSTCIS_SELECTED                   = 0x0001,\n        NSTCIS_EXPANDED                   = 0x0002,\n        NSTCIS_BOLD                       = 0x0004,\n        NSTCIS_DISABLED                   = 0x0008,\n        NSTCIS_SELECTEDNOEXPAND           = 0x0010\n    };\n    typedef DWORD NSTCITEMSTATE;\n\n    typedef [v1_enum] enum NSTCGNI {\n        NSTCGNI_NEXT                      = 0,\n        NSTCGNI_NEXTVISIBLE               = 1,\n        NSTCGNI_PREV                      = 2,\n        NSTCGNI_PREVVISIBLE               = 3,\n        NSTCGNI_PARENT                    = 4,\n        NSTCGNI_CHILD                     = 5,\n        NSTCGNI_FIRSTVISIBLE              = 6,\n        NSTCGNI_LASTVISIBLE               = 7\n    } NSTCGNI;\n\n    HRESULT Initialize(\n        [in] HWND hwndParent,\n        [in, unique] RECT *prc,\n        [in] NSTCSTYLE nstcsFlags);\n\n    HRESULT TreeAdvise(\n        [in] IUnknown *punk,\n        [out] DWORD *pdwCookie);\n\n    HRESULT TreeUnadvise(\n        [in] DWORD dwCookie);\n\n    HRESULT AppendRoot(\n        [in] IShellItem *psiRoot,\n        [in] SHCONTF grfEnumFlags,\n        [in] NSTCROOTSTYLE grfRootStyle,\n        [in, unique] IShellItemFilter *pif);\n\n    HRESULT InsertRoot(\n        [in] int iIndex,\n        [in] IShellItem *psiRoot,\n        [in] SHCONTF grfEnumFlags,\n        [in] NSTCROOTSTYLE grfRootStyle,\n        [in, unique] IShellItemFilter *pif);\n\n    HRESULT RemoveRoot(\n        [in] IShellItem *psiRoot);\n\n    HRESULT RemoveAllRoots();\n\n    HRESULT GetRootItems(\n        [out] IShellItemArray **ppsiaRootItems);\n\n    HRESULT SetItemState(\n        [in] IShellItem *psi,\n        [in] NSTCITEMSTATE nstcisMask,\n        [in] NSTCITEMSTATE nstcisFlags);\n\n    HRESULT GetItemState(\n        [in] IShellItem *psi,\n        [in] NSTCITEMSTATE nstcismask,\n        [out] NSTCITEMSTATE *pnstcisFlags);\n\n    HRESULT GetSelectedItems(\n        [out] IShellItemArray **psiaItems);\n\n    HRESULT GetItemCustomState(\n        [in] IShellItem *psi,\n        [out] int *piStateNumber);\n\n    HRESULT SetItemCustomState(\n        [in] IShellItem *psi,\n        [in] int iStateNumber);\n\n    HRESULT EnsureItemVisible(\n        [in] IShellItem *psi);\n\n    HRESULT SetTheme(\n        [in, string] LPCWSTR pszTheme);\n\n    HRESULT GetNextItem(\n        [in, unique] IShellItem *psi,\n        [in] NSTCGNI nstcgi,\n        [out] IShellItem **ppsiNext);\n\n    HRESULT HitTest(\n        [in] POINT *ppt,\n        [out] IShellItem **ppsiOut);\n\n    HRESULT GetItemRect(\n        [in] IShellItem *psi,\n        [out] RECT *prect);\n\n    HRESULT CollapseAll();\n}\n\n/*****************************************************************************\n * INameSpaceTreeControl2 interface\n */\n[\n object,\n uuid(7CC7AED8-290E-49BC-8945-C1401CC9306C)\n]\ninterface INameSpaceTreeControl2 : INameSpaceTreeControl\n{\n    typedef [v1_enum] enum NSTCSTYLE2 {\n        NSTCS2_DEFAULT                     = 0x00,\n        NSTCS2_INTERRUPTNOTIFICATIONS      = 0x01,\n        NSTCS2_SHOWNULLSPACEMENU           = 0x02,\n        NSTCS2_DISPLAYPADDING              = 0x04,\n        NSTCS2_DISPLAYPINNEDONLY           = 0x08,\n        NTSCS2_NOSINGLETONAUTOEXPAND       = 0x10,  /* The apparent typo here is   */\n        NTSCS2_NEVERINSERTNONENUMERATED    = 0x20   /* present also in the Win SDK */\n    } NSTCSTYLE2;\n    cpp_quote(\"DEFINE_ENUM_FLAG_OPERATORS(NSTCSTYLE2)\")\n\n    HRESULT SetControlStyle(\n        [in] NSTCSTYLE nstcsMask,\n        [in] NSTCSTYLE nstcsStyle);\n\n    HRESULT GetControlStyle(\n        [in] NSTCSTYLE nstcsMask,\n        [out] NSTCSTYLE *pnstcsStyle);\n\n    HRESULT SetControlStyle2(\n        [in] NSTCSTYLE2 nstcsMask,\n        [in] NSTCSTYLE2 nstcsStyle);\n\n    HRESULT GetControlStyle2(\n        [in] NSTCSTYLE2 nstcsMask,\n        [out] NSTCSTYLE2 *pnstcsStyle);\n}\n\n/*****************************************************************************\n * INameSpaceTreeControlEvents interface\n */\n\n[\n object,\n uuid(93D77985-B3D8-4484-8318-672CDDA002CE),\n local\n]\ninterface INameSpaceTreeControlEvents : IUnknown\n{\n    [v1_enum] enum _NSTCEHITTEST {\n        NSTCEHT_NOWHERE                    = 0x0001,\n        NSTCEHT_ONITEMICON                 = 0x0002,\n        NSTCEHT_ONITEMLABEL                = 0x0004,\n        NSTCEHT_ONITEMIDENT                = 0x0008,\n        NSTCEHT_ONITEMBUTTON               = 0x0010,\n        NSTCEHT_ONITEMRIGHT                = 0x0020,\n        NSTCEHT_ONITEMSTATEICON            = 0x0040,\n        NSTCEHT_ONITEM                     = 0x0046,\n        NSTCEHT_ONITEMTABBUTTON            = 0x1000\n    };\n    typedef DWORD NSTCEHITTEST;\n\n    [v1_enum] enum _NSTCECLICKTYPE {\n        NSTCECT_LBUTTON                    = 0x1,\n        NSTCECT_MBUTTON                    = 0x2,\n        NSTCECT_RBUTTON                    = 0x3,\n        NSTCECT_BUTTON                     = 0x3,\n        NSTCECT_DBLCLICK                   = 0x4\n    };\n    typedef DWORD NSTCECLICKTYPE;\n\n    HRESULT OnItemClick(\n        [in] IShellItem *psi,\n        [in] NSTCEHITTEST nstceHitTest,\n        [in] NSTCECLICKTYPE nstceClickType);\n\n    HRESULT OnPropertyItemCommit(\n        [in] IShellItem *psi);\n\n    HRESULT OnItemStateChanging(\n        [in] IShellItem *psi,\n        [in] NSTCITEMSTATE nstcisMask,\n        [in] NSTCITEMSTATE nstcisState);\n\n    HRESULT OnItemStateChanged(\n        [in] IShellItem *psi,\n        [in] NSTCITEMSTATE nstcisMask,\n        [in] NSTCITEMSTATE nstcisState);\n\n    HRESULT OnSelectionChanged(\n        [in] IShellItemArray *psiaSelection);\n\n    HRESULT OnKeyboardInput(\n        [in] UINT uMsg,\n        [in] WPARAM wParam,\n        [in] LPARAM lParam);\n\n    HRESULT OnBeforeExpand(\n        [in] IShellItem *psi);\n\n    HRESULT OnAfterExpand(\n        [in] IShellItem *psi);\n\n    HRESULT OnBeginLabelEdit(\n        [in] IShellItem *psi);\n\n    HRESULT OnEndLabelEdit(\n        [in] IShellItem *psi);\n\n    HRESULT OnGetToolTip(\n        [in] IShellItem *psi,\n        [out, string, size_is(cchTip)] LPWSTR pszTip,\n        [in] int cchTip);\n\n    HRESULT OnBeforeItemDelete(\n        [in] IShellItem *psi);\n\n    HRESULT OnItemAdded(\n        [in] IShellItem *psi,\n        [in] BOOL fIsRoot);\n\n    HRESULT OnItemDeleted(\n        [in] IShellItem *psi,\n        [in] BOOL fIsRoot);\n\n    HRESULT OnBeforeContextMenu(\n        [in, unique] IShellItem *psi,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppv);\n\n    HRESULT OnAfterContextMenu(\n        [in] IShellItem *psi,\n        [in] IContextMenu *pcmIn,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppv);\n\n    HRESULT OnBeforeStateImageChange(\n        [in] IShellItem *psi);\n\n    HRESULT OnGetDefaultIconIndex(\n        [in] IShellItem *psi,\n        [out] int *piDefaultIcon,\n        [out] int *piOpenIcon);\n}\n\n/*****************************************************************************\n * INameSpaceTreeControlCustomDraw interface\n */\n[\n object,\n uuid(2D3BA758-33EE-42D5-BB7B-5F3431D86C78),\n local\n]\n\ninterface INameSpaceTreeControlCustomDraw : IUnknown\n{\n    typedef struct NSTCCUSTOMDRAW\n    {\n        IShellItem *psi;\n        UINT uItemState;\n        NSTCITEMSTATE nstcis;\n        LPCWSTR pszText;\n        int iImage;\n        HIMAGELIST himl;\n        int iLevel;\n        int iIndent;\n    } NSTCCUSTOMDRAW;\n\n    HRESULT PrePaint(\n        [in] HDC hdc,\n        [in] RECT *prc,\n        [out] LRESULT *plres);\n\n    HRESULT PostPaint(\n        [in] HDC hdc,\n        [in] RECT *prc);\n\n    HRESULT ItemPrePaint(\n        [in] HDC hdc,\n        [in] RECT *prc,\n        [in] NSTCCUSTOMDRAW *pnstccdItem,\n        [in, out] COLORREF *pclrText,\n        [in, out] COLORREF *pclrTextBk,\n        [out] LRESULT *plres);\n\n    HRESULT ItemPostPaint(\n        [in] HDC hdc,\n        [in] RECT *prc,\n        [in] NSTCCUSTOMDRAW *pnstccdItem);\n}\n\n/*****************************************************************************\n * INameSpaceTreeControlDropHandler interface\n */\n[\n object,\n uuid(F9C665D6-C2F2-4C19-BF33-8322D7352F51),\n local\n]\ninterface INameSpaceTreeControlDropHandler : IUnknown\n{\n    HRESULT OnDragEnter(\n        [in, unique] IShellItem *psiOver,\n        [in] IShellItemArray *psiaData,\n        [in] BOOL fOutsideSource,\n        [in] DWORD grfKeyState,\n        [in, out] DWORD *pdwEffect);\n\n    HRESULT OnDragOver(\n        [in, unique] IShellItem *psiOver,\n        [in] IShellItemArray *psiaData,\n        [in] DWORD grfKeyState,\n        [in, out] DWORD *pdwEffect);\n\n    HRESULT OnDragPosition(\n        [in, unique] IShellItem *psiOver,\n        [in] IShellItemArray *psiaData,\n        [in] int iNewPosition,\n        [in] int iOldPosition);\n\n    HRESULT OnDrop(\n        [in, unique] IShellItem *psiOver,\n        [in] IShellItemArray *psiaData,\n        [in] int iPosition,\n        [in] DWORD grfKeyState,\n        [in, out] DWORD *pdwEffect);\n\n    HRESULT OnDropPosition(\n        [in, unique] IShellItem *psiOver,\n        [in] IShellItemArray *psiaData,\n        [in] int iNewPosition,\n        [in] int iOldPosition);\n\n    HRESULT OnDragLeave(\n        [in, unique] IShellItem *psiOver);\n}\ncpp_quote(\"#define NSTCDHPOS_ONTOP -1\")\n\ninterface IFileDialog;\n\ntypedef [v1_enum] enum FDE_OVERWRITE_RESPONSE\n{\n    FDEOR_DEFAULT  = 0,\n    FDEOR_ACCEPT   = 1,\n    FDEOR_REFUSE   = 2\n} FDE_OVERWRITE_RESPONSE;\n\ntypedef [v1_enum] enum FDE_SHAREVIOLATION_RESPONSE\n{\n    FDESVR_DEFAULT = 0,\n    FDESVR_ACCEPT  = 1,\n    FDESVR_REFUSE  = 2\n} FDE_SHAREVIOLATION_RESPONSE;\n\n/*****************************************************************************\n * IFileDialogEvents interface\n */\n[\n object,\n uuid(973510DB-7D7F-452B-8975-74A85828D354),\n pointer_default(unique)\n]\ninterface IFileDialogEvents : IUnknown\n{\n    HRESULT OnFileOk(\n        [in] IFileDialog *pfd);\n\n    HRESULT OnFolderChanging(\n        [in] IFileDialog *pfd,\n        [in] IShellItem *psiFolder);\n\n    HRESULT OnFolderChange(\n        [in] IFileDialog *pfd);\n\n    HRESULT OnSelectionChange(\n        [in] IFileDialog *pfd);\n\n    HRESULT OnShareViolation(\n        [in] IFileDialog *pfd,\n        [in] IShellItem *psi,\n        [out] FDE_SHAREVIOLATION_RESPONSE *pResponse);\n\n    HRESULT OnTypeChange(\n        [in] IFileDialog *pfd);\n\n    HRESULT OnOverwrite(\n        [in] IFileDialog *pfd,\n        [in] IShellItem *psi,\n        [out] FDE_OVERWRITE_RESPONSE *pResponse);\n}\n\n/*****************************************************************************\n * IModalWindow interface\n */\n[\n object,\n uuid(B4DB1657-70D7-485E-8E3E-6FCB5A5C1802),\n pointer_default(unique)\n]\ninterface IModalWindow : IUnknown\n{\n    [local]\n    HRESULT Show(\n        [in, unique, annotation(\"__in_opt\")] HWND hwndOwner);\n\n    [call_as(Show)]\n    HRESULT RemoteShow(\n        [in, unique] HWND hwndOwner);\n}\n\ntypedef [v1_enum] enum FDAP\n{\n    FDAP_BOTTOM    = 0,\n    FDAP_TOP       = 1\n} FDAP;\n\n/*****************************************************************************\n * IFileDialog interface\n */\n[\n object,\n uuid(42F85136-DB7E-439C-85F1-E4075D135FC8),\n pointer_default(unique)\n]\ninterface IFileDialog : IModalWindow\n{\n    [v1_enum] enum _FILEOPENDIALOGOPTIONS\n    {\n        FOS_OVERWRITEPROMPT        = 0x00000002,\n        FOS_STRICTFILETYPES        = 0x00000004,\n        FOS_NOCHANGEDIR            = 0x00000008,\n        FOS_PICKFOLDERS            = 0x00000020,\n        FOS_FORCEFILESYSTEM        = 0x00000040,\n        FOS_ALLNONSTORAGEITEMS     = 0x00000080,\n        FOS_NOVALIDATE             = 0x00000100,\n        FOS_ALLOWMULTISELECT       = 0x00000200,\n        FOS_PATHMUSTEXIST          = 0x00000800,\n        FOS_FILEMUSTEXIST          = 0x00001000,\n        FOS_CREATEPROMPT           = 0x00002000,\n        FOS_SHAREAWARE             = 0x00004000,\n        FOS_NOREADONLYRETURN       = 0x00008000,\n        FOS_NOTESTFILECREATE       = 0x00010000,\n        FOS_HIDEMRUPLACES          = 0x00020000,\n        FOS_HIDEPINNEDPLACES       = 0x00040000,\n        FOS_NODEREFERENCELINKS     = 0x00100000,\n        FOS_DONTADDTORECENT        = 0x02000000,\n        FOS_FORCESHOWHIDDEN        = 0x10000000,\n        FOS_DEFAULTNOMINIMODE      = 0x20000000,\n        FOS_FORCEPREVIEWPANEON     = 0x40000000,\n        FOS_SUPPORTSTREAMABLEITEMS = 0x80000000\n    };\n    typedef DWORD FILEOPENDIALOGOPTIONS;\n\n    HRESULT SetFileTypes(\n        [in] UINT cFileTypes,\n        [in, size_is(cFileTypes)] const COMDLG_FILTERSPEC *rgFilterSpec);\n\n    HRESULT SetFileTypeIndex(\n        [in] UINT iFileType);\n\n    HRESULT GetFileTypeIndex(\n        [out] UINT *piFileType);\n\n    HRESULT Advise(\n        [in] IFileDialogEvents *pfde,\n        [out] DWORD *pdwCookie);\n\n    HRESULT Unadvise(\n        [in] DWORD dwCookie);\n\n    HRESULT SetOptions(\n        [in] FILEOPENDIALOGOPTIONS fos);\n\n    HRESULT GetOptions(\n        [in] FILEOPENDIALOGOPTIONS *pfos);\n\n    HRESULT SetDefaultFolder(\n        [in] IShellItem *psi);\n\n    HRESULT SetFolder(\n        [in] IShellItem *psi);\n\n    HRESULT GetFolder(\n        [out] IShellItem **ppsi);\n\n    HRESULT GetCurrentSelection(\n        [out] IShellItem **ppsi);\n\n    HRESULT SetFileName(\n        [in, string] LPCWSTR pszName);\n\n    HRESULT GetFileName(\n        [out, string] LPWSTR *pszName);\n\n    HRESULT SetTitle(\n        [in, string] LPCWSTR pszTitle);\n\n    HRESULT SetOkButtonLabel(\n        [in, string] LPCWSTR pszText);\n\n    HRESULT SetFileNameLabel(\n        [in, string] LPCWSTR pszLabel);\n\n    HRESULT GetResult(\n        [out] IShellItem **ppsi);\n\n    HRESULT AddPlace(\n        [in] IShellItem *psi,\n        [in] FDAP fdap);\n\n    HRESULT SetDefaultExtension(\n        [in, string] LPCWSTR pszDefaultExtension);\n\n    HRESULT Close(\n        [in] HRESULT hr);\n\n    HRESULT SetClientGuid(\n        [in] REFGUID guid);\n\n    HRESULT ClearClientData();\n\n    HRESULT SetFilter(\n        [in] IShellItemFilter *pFilter);\n}\n\n/*****************************************************************************\n * IFileDialog2 interface\n */\n[\n object,\n uuid(61744FC7-85B5-4791-A9B0-272276309B13),\n pointer_default(unique)\n]\ninterface IFileDialog2 : IFileDialog\n{\n    HRESULT SetCancelButtonLabel(\n        [in] LPCWSTR pszLabel);\n\n    HRESULT SetNavigationRoot(\n        [in] IShellItem *psi);\n}\n\n/*****************************************************************************\n * IFileOperationProgressSink interface\n */\n[\n object,\n uuid(04B0F1A7-9490-44BC-96E1-4296A31252E2),\n pointer_default(unique)\n]\ninterface IFileOperationProgressSink : IUnknown\n{\n    HRESULT StartOperations();\n\n    HRESULT FinishOperations(\n        [in] HRESULT hrResult);\n\n    HRESULT PreRenameItem(\n        [in] DWORD dwFlags,\n        [in] IShellItem *psiItem,\n        [in, unique, string] LPCWSTR pszNewName);\n\n    HRESULT PostRenameItem(\n        [in] DWORD dwFlags,\n        [in] IShellItem *psiItem,\n        [in, string] LPCWSTR pszNewName,\n        [in] HRESULT hrRename,\n        [in] IShellItem *psiNewlyCreated);\n\n    HRESULT PreMoveItem(\n        [in] DWORD dwFlags,\n        [in] IShellItem *psiItem,\n        [in] IShellItem *psiDestinationFolder,\n        [in, unique, string] LPCWSTR pszNewName);\n\n    HRESULT PostMoveItem(\n        [in] DWORD dwFlags,\n        [in] IShellItem *psiItem,\n        [in] IShellItem *psiDestinationFolder,\n        [in, unique, string] LPCWSTR pszNewName,\n        [in] HRESULT hrMove,\n        [in] IShellItem *psiNewlyCreated);\n\n    HRESULT PreCopyItem(\n        [in] DWORD dwFlags,\n        [in] IShellItem *psiItem,\n        [in] IShellItem *psiDestinationFolder,\n        [in, unique, string] LPCWSTR pszNewName);\n\n    HRESULT PostCopyItem(\n        [in] DWORD dwFlags,\n        [in] IShellItem *psiItem,\n        [in] IShellItem *psiDestinationFolder,\n        [in, unique, string] LPCWSTR pszNewName,\n        [in] HRESULT hrCopy,\n        [in] IShellItem *psiNewlyCreated);\n\n    HRESULT PreDeleteItem(\n        [in] DWORD dwFlags,\n        [in] IShellItem *psiItem);\n\n    HRESULT PostDeleteItem(\n        [in] DWORD dwFlags,\n        [in] IShellItem *psiItem,\n        [in] HRESULT hrDelete,\n        [in] IShellItem *psiNewlyCreated);\n\n    HRESULT PreNewItem(\n        [in] DWORD dwFlags,\n        [in] IShellItem *psiDestinationFolder,\n        [in, unique, string] LPCWSTR pszNewName);\n\n    HRESULT PostNewItem(\n        [in] DWORD dwFlags,\n        [in] IShellItem *psiDestinationFolder,\n        [in, unique, string] LPCWSTR pszNewName,\n        [in, unique, string] LPCWSTR pszTemplateName,\n        [in] DWORD dwFileAttributes,\n        [in] HRESULT hrNew,\n        [in] IShellItem *psiNewItem);\n\n    HRESULT UpdateProgress(\n        [in] UINT iWorkTotal,\n        [in] UINT iWorkSoFar);\n\n    HRESULT ResetTimer();\n\n    HRESULT PauseTimer();\n\n    HRESULT ResumeTimer();\n}\n\n/*****************************************************************************\n * IFileSaveDialog interface\n */\n[\n object,\n uuid(84BCCD23-5FDE-4CDB-AEA4-AF64B83D78AB),\n pointer_default(unique)\n]\ninterface IFileSaveDialog : IFileDialog\n{\n    HRESULT SetSaveAsItem(\n        [in] IShellItem *psi);\n\n    HRESULT SetProperties(\n        [in] IPropertyStore *pStore);\n\n    HRESULT SetCollectedProperties(\n        [in] IPropertyDescriptionList *pList,\n        [in] BOOL fAppendDefault);\n\n    HRESULT GetProperties(\n        [in] IPropertyStore **ppStore);\n\n    HRESULT ApplyProperties(\n        [in] IShellItem *psi,\n        [in] IPropertyStore *pStore,\n        [in, unique] HWND hwnd,\n        [in, unique] IFileOperationProgressSink *pSink);\n}\n\n\n/*****************************************************************************\n * IFileOpenDialog interface\n */\n[\n object,\n uuid(D57C7288-D4AD-4768-BE02-9D969532D960),\n pointer_default(unique)\n]\ninterface IFileOpenDialog : IFileDialog\n{\n    HRESULT GetResults(\n        [out] IShellItemArray **ppenum);\n\n    HRESULT GetSelectedItems(\n        [out] IShellItemArray **ppsai);\n}\n\ntypedef [v1_enum] enum CDCONTROLSTATEF\n{\n    CDCS_INACTIVE       = 0x0,\n    CDCS_ENABLED        = 0x1,\n    CDCS_VISIBLE        = 0x2,\n    CDCS_ENABLEDVISIBLE = 0x3\n} CDCONTROLSTATEF;\ncpp_quote(\"DEFINE_ENUM_FLAG_OPERATORS(CDCONTROLSTATEF)\")\n/*****************************************************************************\n * IFileDialogCustomize interface\n */\n[\n object,\n uuid(E6FDD21A-163F-4975-9C8C-A69F1BA37034),\n pointer_default(unique)\n]\ninterface IFileDialogCustomize : IUnknown\n{\n    HRESULT EnableOpenDropDown(\n        [in] DWORD dwIDCtl);\n\n    HRESULT AddMenu(\n        [in] DWORD dwIDCtl,\n        [in, string] LPCWSTR pszLabel);\n\n    HRESULT AddPushButton(\n        [in] DWORD dwIDCtl,\n        [in, string] LPCWSTR pszLabel);\n\n    HRESULT AddComboBox(\n        [in] DWORD dwIDCtl);\n\n    HRESULT AddRadioButtonList(\n        [in] DWORD dwIDCtl);\n\n    HRESULT AddCheckButton(\n        [in] DWORD dwIDCtl,\n        [in, string] LPCWSTR pszLabel,\n        [in] BOOL bChecked);\n\n    HRESULT AddEditBox(\n        [in] DWORD dwIDCtl,\n        [in, string] LPCWSTR pszText);\n\n    HRESULT AddSeparator(\n        [in] DWORD dwIDCtl);\n\n    HRESULT AddText(\n        [in] DWORD dwIDCtl,\n        [in, string] LPCWSTR pszText);\n\n    HRESULT SetControlLabel(\n        [in] DWORD dwIDCtl,\n        [in, string] LPCWSTR pszLabel);\n\n    HRESULT GetControlState(\n        [in] DWORD dwIDCtl,\n        [out] CDCONTROLSTATEF *pdwState);\n\n    HRESULT SetControlState(\n        [in] DWORD dwIDCtl,\n        [in] CDCONTROLSTATEF dwState);\n\n    HRESULT GetEditBoxText(\n        [in] DWORD dwIDCtl,\n        [out, string] WCHAR **ppszText);\n\n    HRESULT SetEditBoxText(\n        [in] DWORD dwIDCtl,\n        [in, string] LPCWSTR pszText);\n\n    HRESULT GetCheckButtonState(\n        [in] DWORD dwIDCtl,\n        [out] BOOL *pbChecked);\n\n    HRESULT SetCheckButtonState(\n        [in] DWORD dwIDCtl,\n        [in] BOOL bChecked);\n\n    HRESULT AddControlItem(\n        [in] DWORD dwIDCtl,\n        [in] DWORD dwIDItem,\n        [in] LPCWSTR pszLabel);\n\n    HRESULT RemoveControlItem(\n        [in] DWORD dwIDCtl,\n        [in] DWORD dwIDItem);\n\n    HRESULT RemoveAllControlItems(\n        [in] DWORD dwIDCtl);\n\n    HRESULT GetControlItemState(\n        [in] DWORD dwIDCtl,\n        [in] DWORD dwIDItem,\n        [out] CDCONTROLSTATEF *pdwState);\n\n    HRESULT SetControlItemState(\n        [in] DWORD dwIDCtl,\n        [in] DWORD dwIDItem,\n        [in] CDCONTROLSTATEF dwState);\n\n    HRESULT GetSelectedControlItem(\n        [in] DWORD dwIDCtl,\n        [out] DWORD *pdwIDItem);\n\n    HRESULT SetSelectedControlItem(\n        [in] DWORD dwIDCtl,\n        [in] DWORD dwIDItem);\n\n    HRESULT StartVisualGroup(\n        [in] DWORD dwIDCtl,\n        [in, string] LPCWSTR pszLabel);\n\n    HRESULT EndVisualGroup();\n\n    HRESULT MakeProminent(\n        [in] DWORD dwIDCtl);\n\n    HRESULT SetControlItemText(\n        [in] DWORD dwIDCtl,\n        [in] DWORD dwIDItem,\n        [in, string] LPCWSTR pszLabel);\n}\n\n/*****************************************************************************\n * IFileDialogControlEvents interface\n */\n[\n object,\n uuid(36116642-D713-4B97-9B83-7484A9D00433),\n pointer_default(unique)\n]\ninterface IFileDialogControlEvents : IUnknown\n{\n    HRESULT OnItemSelected(\n        [in] IFileDialogCustomize *pfdc,\n        [in] DWORD dwIDCtl,\n        [in] DWORD dwIDItem);\n\n    HRESULT OnButtonClicked(\n        [in] IFileDialogCustomize *pfdc,\n        [in] DWORD dwIDCtl);\n\n    HRESULT OnCheckButtonToggled(\n        [in] IFileDialogCustomize *pfdc,\n        [in] DWORD dwIDCtl,\n        [in] BOOL bChecked);\n\n    HRESULT OnControlActivating(\n        [in] IFileDialogCustomize *pfdc,\n        [in] DWORD dwIDCtl);\n}\n\ntypedef [v1_enum] enum tagKF_CATEGORY\n{\n    KF_CATEGORY_VIRTUAL = 0x00000001,\n    KF_CATEGORY_FIXED   = 0x00000002,\n    KF_CATEGORY_COMMON  = 0x00000003,\n    KF_CATEGORY_PERUSER = 0x00000004\n} KF_CATEGORY;\n\ntypedef [v1_enum] enum tagKF_REDIRECTION_CAPABILITIES\n{\n    KF_REDIRECTION_CAPABILITIES_ALLOW_ALL               = 0x000000ff,\n    KF_REDIRECTION_CAPABILITIES_REDIRECTABLE            = 0x00000001,\n    KF_REDIRECTION_CAPABILITIES_DENY_ALL                = 0x000fff00,\n    KF_REDIRECTION_CAPABILITIES_DENY_POLICY_REDIRECTED  = 0x00000100,\n    KF_REDIRECTION_CAPABILITIES_DENY_POLICY             = 0x00000200,\n    KF_REDIRECTION_CAPABILITIES_DENY_PERMISSIONS        = 0x00000400\n} KF_REDIRECTION_CAPABILITIES;\n\ntypedef [v1_enum] enum tagKF_DEFINITION_FLAGS\n{\n    KFDF_LOCAL_REDIRECT_ONLY    = 0x00000002,\n    KFDF_ROAMABLE               = 0x00000004,\n    KFDF_PRECREATE              = 0x00000008,\n    KFDF_STREAM                 = 0x00000010,\n    KFDF_PUBLISHEXPANDEDPATH    = 0x00000020,\n    KFDF_NO_REDIRECT_UI         = 0x00000040\n} KF_DEFINITION_FLAGS;\n\ntypedef struct tagKNOWNFOLDER_DEFINITION\n{\n    KF_CATEGORY         category;\n    LPWSTR              pszName;\n    LPWSTR              pszDescription;\n    KNOWNFOLDERID       fidParent;\n    LPWSTR              pszRelativePath;\n    LPWSTR              pszParsingName;\n    LPWSTR              pszTooltip;\n    LPWSTR              pszLocalizedName;\n    LPWSTR              pszIcon;\n    LPWSTR              pszSecurity;\n    DWORD               dwAttributes;\n    KF_DEFINITION_FLAGS kfdFlags;\n    FOLDERTYPEID        ftidType;\n} KNOWNFOLDER_DEFINITION;\n\n[\n object,\n uuid(3aa7af7e-9b36-420C-a8e3-f77d4674a488),\n pointer_default(ref)\n]\ninterface IKnownFolder : IUnknown\n{\n    HRESULT GetId(\n        [out] KNOWNFOLDERID *pkfid);\n\n    HRESULT GetCategory(\n        [out] KF_CATEGORY *pCategory);\n\n    HRESULT GetShellItem(\n        [in] DWORD dwFlags,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppv);\n\n    HRESULT GetPath(\n        [in] DWORD dwFlags,\n        [out, string] LPWSTR *ppszPath);\n\n    HRESULT SetPath(\n        [in] DWORD dwFlags,\n        [in, string] LPCWSTR pszPath);\n\n    HRESULT GetIDList(\n        [in] DWORD dwFlags,\n        [out] PIDLIST_ABSOLUTE *ppidl);\n\n    HRESULT GetFolderType(\n        [out] FOLDERTYPEID *pftid);\n\n    HRESULT GetRedirectionCapabilities(\n        [out] KF_REDIRECTION_CAPABILITIES *pCapabilities);\n\n    HRESULT GetFolderDefinition(\n        [out] KNOWNFOLDER_DEFINITION *pKFD);\n}\n\ntypedef [v1_enum] enum tagKF_REDIRECT_FLAGS\n{\n    KF_REDIRECT_USER_EXCLUSIVE      = 0x00000001,\n    KF_REDIRECT_COPY_SOURCE_DACL    = 0x00000002,\n    KF_REDIRECT_OWNER_USER          = 0x00000004,\n    KF_REDIRECT_SET_OWNER_EXPLICIT  = 0x00000008,\n    KF_REDIRECT_CHECK_ONLY          = 0x00000010,\n    KF_REDIRECT_WITH_UI             = 0x00000020,\n    KF_REDIRECT_UNPIN               = 0x00000040,\n    KF_REDIRECT_PIN                 = 0x00000080,\n    KF_REDIRECT_COPY_CONTENTS       = 0x00000200,\n    KF_REDIRECT_DEL_SOURCE_CONTENTS = 0x00000400,\n    KF_REDIRECT_EXCLUDE_ALL_KNOWN_SUBFOLDERS = 0x00000800\n} KF_REDIRECT_FLAGS;\n\n[\n    object,\n    uuid(8BE2D872-86AA-4d47-B776-32CCA40C7018),\n    pointer_default(ref)\n]\ninterface IKnownFolderManager : IUnknown\n{\n    typedef [v1_enum] enum tagFFFP_MODE\n    {\n        FFFP_EXACTMATCH,\n        FFFP_NEARESTPARENTMATCH\n    } FFFP_MODE;\n\n    HRESULT FolderIdFromCsidl(\n        [in] int nCsidl,\n        [out] KNOWNFOLDERID *pfid);\n\n    HRESULT FolderIdToCsidl(\n        [in] REFKNOWNFOLDERID rfid,\n        [out] int *pnCsidl);\n\n    HRESULT GetFolderIds(\n        [out, size_is(, *pCount)] KNOWNFOLDERID **ppKFId,\n        [in, out] UINT *pCount);\n\n    HRESULT GetFolder(\n        [in] REFKNOWNFOLDERID rfid,\n        [out] IKnownFolder **ppkf);\n\n    HRESULT GetFolderByName(\n        [in, string] LPCWSTR pszCanonicalName,\n        [out] IKnownFolder **ppkf);\n\n    HRESULT RegisterFolder(\n        [in] REFKNOWNFOLDERID rfid,\n        [in] KNOWNFOLDER_DEFINITION const *pKFD);\n\n    HRESULT UnregisterFolder(\n        [in] REFKNOWNFOLDERID rfid);\n\n    HRESULT FindFolderFromPath(\n        [in, string] LPCWSTR pszPath,\n        [in] FFFP_MODE mode,\n        [out] IKnownFolder **ppkf);\n\n    HRESULT FindFolderFromIDList(\n        [in] PCIDLIST_ABSOLUTE pidl,\n        [out] IKnownFolder **ppkf);\n\n    HRESULT Redirect(\n        [in] REFKNOWNFOLDERID rfid,\n        [in, unique] HWND hwnd,\n        [in] KF_REDIRECT_FLAGS flags,\n        [in, unique, string] LPCWSTR pszTargetPath,\n        [in] UINT cFolders,\n        [in, size_is(cFolders), unique] KNOWNFOLDERID const *pExclusion,\n        [out, string] LPWSTR *ppszError);\n}\n\n/* function for releasing structure returned from IKnownFolder::GetFolderDefinition */\ncpp_quote(\"static inline void FreeKnownFolderDefinitionFields(KNOWNFOLDER_DEFINITION *pKFD)\")\ncpp_quote(\"{\")\ncpp_quote(\"    CoTaskMemFree(pKFD->pszName);\")\ncpp_quote(\"    CoTaskMemFree(pKFD->pszDescription);\")\ncpp_quote(\"    CoTaskMemFree(pKFD->pszRelativePath);\")\ncpp_quote(\"    CoTaskMemFree(pKFD->pszParsingName);\")\ncpp_quote(\"    CoTaskMemFree(pKFD->pszTooltip);\")\ncpp_quote(\"    CoTaskMemFree(pKFD->pszLocalizedName);\")\ncpp_quote(\"    CoTaskMemFree(pKFD->pszIcon);\")\ncpp_quote(\"    CoTaskMemFree(pKFD->pszSecurity);\")\ncpp_quote(\"}\")\n\ntypedef [v1_enum] enum ASSOCIATIONLEVEL {\n    AL_MACHINE,\n    AL_EFFECTIVE,\n    AL_USER\n} ASSOCIATIONLEVEL;\n\ntypedef [v1_enum] enum ASSOCIATIONTYPE {\n    AT_FILEEXTENSION,\n    AT_URLPROTOCOL,\n    AT_STARTMENUCLIENT,\n    AT_MIMETYPE\n} ASSOCIATIONTYPE;\n\n[\n    object,\n    uuid(4e530b0a-e611-4c77-a3ac-9031d022281b),\n    pointer_default(unique)\n]\ninterface IApplicationAssociationRegistration : IUnknown\n{\n    HRESULT QueryCurrentDefault(\n        [in, string] LPCWSTR pszQuery,\n        [in] ASSOCIATIONTYPE atQueryType,\n        [in] ASSOCIATIONLEVEL alQueryLevel,\n        [out, string] LPWSTR *ppszAssociation);\n\n    HRESULT QueryAppIsDefault(\n        [in, string] LPCWSTR pszQuery,\n        [in] ASSOCIATIONTYPE atQueryType,\n        [in] ASSOCIATIONLEVEL alQueryLevel,\n        [in, string] LPCWSTR pszAppRegistryName,\n        [out] BOOL *pfDefault);\n\n    HRESULT QueryAppIsDefaultAll(\n        [in] ASSOCIATIONLEVEL alQueryLevel,\n        [in, string] LPCWSTR pszAppRegistryName,\n        [out] BOOL* pfDefault);\n\n    HRESULT SetAppAsDefault(\n        [in, string] LPCWSTR pszAppRegistryName,\n        [in, string] LPCWSTR pszSet,\n        [in] ASSOCIATIONTYPE atSetType);\n\n    HRESULT SetAppAsDefaultAll(\n        [in, string] LPCWSTR pszAppRegistryName);\n\n    HRESULT ClearUserAssociations();\n}\n\n[\n    object,\n    uuid(12337d35-94c6-48a0-bce7-6a9c69d4d600),\n    pointer_default(unique)\n]\ninterface IApplicationDestinations : IUnknown\n{\n    HRESULT SetAppID(\n        [in] LPCWSTR pszAppID);\n\n    HRESULT RemoveDestination(\n        [in] IUnknown *punk);\n\n    HRESULT RemoveAllDestinations();\n}\n\n[\n    uuid(6332debf-87b5-4670-90c0-5e57b408a49e),\n    object,\n    pointer_default(unique)\n]\ninterface ICustomDestinationList : IUnknown\n{\n    typedef [v1_enum] enum KNOWNDESTCATEGORY {\n        KDC_FREQUENT = 1,\n        KDC_RECENT\n    } KNOWNDESTCATEGORY;\n\n    HRESULT SetAppID([in, string] LPCWSTR pszAppID);\n\n    HRESULT BeginList(\n            [out] UINT *pcMinSlots,\n            [in] REFIID riid,\n            [out, iid_is(riid)] void **ppv);\n\n    HRESULT AppendCategory(\n            [in, string] LPCWSTR pszCategory,\n            [in] IObjectArray *poa);\n\n    HRESULT AppendKnownCategory([in] KNOWNDESTCATEGORY category);\n    HRESULT AddUserTasks([in] IObjectArray *poa);\n    HRESULT CommitList();\n\n    HRESULT GetRemovedDestinations(\n            [in] REFIID riid,\n            [out, iid_is(riid)] void **ppv);\n\n    HRESULT DeleteList([in, unique, string] LPCWSTR pszAppID);\n    HRESULT AbortList();\n}\n\n[\n    uuid(ddefe873-6997-4e68-be26-39b633adbe12),\n    object,\n    pointer_default(unique)\n]\ninterface IQueryCancelAutoPlay : IUnknown\n{\n    HRESULT AllowAutoPlay([in, string] LPCWSTR path,\n                          [in] DWORD content_type,\n                          [in, string] LPCWSTR label,\n                          [in] DWORD serial_number);\n}\n\n[\n    uuid(d594d0d8-8da7-457b-b3b4-ce5dbaac0b88),\n    pointer_default(unique)\n]\ninterface ITransferAdviseSink : IUnknown\n{\n    [v1_enum] enum _TRANSFER_ADVISE_STATE\n    {\n        TS_NONE          = 0,\n        TS_PERFORMING    = 1,\n        TS_PREPARING     = 2,\n        TS_INDETERMINATE = 4\n    };\n    typedef DWORD TRANSFER_ADVISE_STATE;\n\n    HRESULT UpdateProgress([in] ULONGLONG size_current,\n                           [in] ULONGLONG size_total,\n                           [in] INT files_current,\n                           [in] INT files_total,\n                           [in] INT folders_current,\n                           [in] INT folders_total);\n    HRESULT UpdateTransferState([in] TRANSFER_ADVISE_STATE state);\n    HRESULT ConfirmOverwrite([in] IShellItem *source,\n                             [in] IShellItem *dest_parent,\n                             [in, string] LPCWSTR name);\n    HRESULT ConfirmEncryptionLoss([in] IShellItem *source);\n    HRESULT FileFailure([in] IShellItem *item,\n                        [in, unique, string] LPCWSTR itemname,\n                        [in] HRESULT hr,\n                        [in, out, unique, size_is(crename)] LPWSTR rename,\n                        [in] ULONG crename);\n    HRESULT SubStreamFailure([in] IShellItem *item,\n                             [in, string] LPCWSTR stream,\n                             [in] HRESULT hr);\n    HRESULT PropertyFailure([in] IShellItem *item,\n                            [in, unique] const PROPERTYKEY *key,\n                            [in] HRESULT hr);\n}\n\n[v1_enum] enum _TRANSFER_SOURCE_FLAGS\n{\n    TSF_NORMAL                     = 0,\n    TSF_FAIL_EXIST                 = 0,\n    TSF_RENAME_EXIST               = 0x1,\n    TSF_OVERWRITE_EXIST            = 0x2,\n    TSF_ALLOW_DECRYPTION           = 0x4,\n    TSF_NO_SECURITY                = 0x8,\n    TSF_COPY_CREATION_TIME         = 0x10,\n    TSF_COPY_WRITE_TIME            = 0x20,\n    TSF_USE_FULL_ACCESS            = 0x40,\n    TSF_DELETE_RECYCLE_IF_POSSIBLE = 0x80,\n    TSF_COPY_HARD_LINK             = 0x100,\n    TSF_COPY_LOCALIZED_NAME        = 0x200,\n    TSF_MOVE_AS_COPY_DELETE        = 0x400,\n    TSF_SUSPEND_SHELLEVENTS        = 0x800\n};\ntypedef DWORD TRANSFER_SOURCE_FLAGS;\n\n[\n    uuid(00adb003-bde9-45c6-8e29-d09f9353e108),\n    object,\n    pointer_default(unique)\n]\ninterface ITransferSource : IUnknown\n{\n    HRESULT Advise([in] ITransferAdviseSink *sink, [out] DWORD *cookie);\n    HRESULT Unadvise([in] DWORD cookie);\n    HRESULT SetProperties([in] IPropertyChangeArray *array);\n    HRESULT OpenItem([in] IShellItem *item,\n                     [in] TRANSFER_SOURCE_FLAGS flags,\n                     [in] REFIID riid,\n                     [out, iid_is(riid)] void **ppv);\n    HRESULT MoveItem([in] IShellItem *item,\n                     [in] IShellItem *parent_dest,\n                     [in, string] LPCWSTR name_dest,\n                     [in] TRANSFER_SOURCE_FLAGS flags,\n                     [out] IShellItem **newitem);\n    HRESULT RecycleItem([in] IShellItem *source,\n                        [in] IShellItem *parent_dest,\n                        [in] TRANSFER_SOURCE_FLAGS flags,\n                        [out] IShellItem **new_dest);\n    HRESULT RemoveItem([in] IShellItem *source, [in] TRANSFER_SOURCE_FLAGS flags);\n    HRESULT RenameItem([in] IShellItem *source,\n                       [in, string] LPCWSTR newname,\n                       [in] TRANSFER_SOURCE_FLAGS flags,\n                       [out] IShellItem **new_dest);\n    HRESULT LinkItem([in] IShellItem *source,\n                     [in] IShellItem *parent_dest,\n                     [in, unique, string] LPCWSTR new_name,\n                     [in] TRANSFER_SOURCE_FLAGS flags,\n                     [out] IShellItem **new_dest);\n    HRESULT ApplyPropertiesToItem([in] IShellItem *source, [out] IShellItem **newitem);\n    HRESULT GetDefaultDestinationName([in] IShellItem *source,\n                                      [in] IShellItem *parent_dest,\n                                      [out, string] LPWSTR *dest_name);\n    HRESULT EnterFolder([in] IShellItem *child_folder);\n    HRESULT LeaveFolder([in] IShellItem *child_folder);\n}\n\n[\n    uuid(48addd32-3ca5-4124-abe3-b5a72531b207),\n    object,\n    pointer_default(unique)\n]\ninterface ITransferDestination : IUnknown\n{\n    HRESULT Advise([in] ITransferAdviseSink *sink, [out] DWORD *cookie);\n    HRESULT Unadvise([in] DWORD cookie);\n    HRESULT CreateItem([in, string] LPCWSTR name,\n                       [in] DWORD attr,\n                       [in] ULONGLONG size,\n                       [in] TRANSFER_SOURCE_FLAGS flags,\n                       [in] REFIID riid,\n                       [out, iid_is(riid)] void **ppv,\n                       [in] REFIID resources,\n                       [out, iid_is(riid)] void **presources);\n}\n\n[\n    uuid(92218cab-ecaa-4335-8133-807fd234c2ee),\n    object,\n    pointer_default(unique)\n]\ninterface IAssocHandlerInvoker : IUnknown\n{\n    HRESULT SupportsSelection();\n    HRESULT Invoke();\n}\n\n[\n    uuid(f04061ac-1659-4a3f-a954-775aa57fc083),\n    object,\n    pointer_default(unique)\n]\ninterface IAssocHandler : IUnknown\n{\n    HRESULT GetName([out, string] LPWSTR *name);\n    HRESULT GetUIName([out, string] LPWSTR *uiname);\n    HRESULT GetIconLocation([out, string] LPWSTR *path,\n                            [out] int *index);\n    HRESULT IsRecommended();\n    HRESULT MakeDefault([in, string] LPCWSTR description);\n    HRESULT Invoke([in] IDataObject *object);\n    HRESULT CreateInvoker([in] IDataObject *object,\n                          [out] IAssocHandlerInvoker **invoker);\n}\n\n[\n    uuid(973810ae-9599-4b88-9e4d-6ee98c9552da),\n    object,\n    pointer_default(unique)\n]\ninterface IEnumAssocHandlers : IUnknown\n{\n    HRESULT Next([in]  ULONG count,\n                 [out, size_is(count), length_is(*fetched)] IAssocHandler **handlers,\n                 [out] ULONG *fetched);\n}\n\ntypedef enum ASSOC_FILTER\n{\n    ASSOC_FILTER_NONE = 0,\n    ASSOC_FILTER_RECOMMENDED\n} ASSOC_FILTER;\ncpp_quote(\"HRESULT WINAPI SHAssocEnumHandlers(PCWSTR extra, ASSOC_FILTER filter, IEnumAssocHandlers **handlersenum);\")\n\n[\n    uuid(1df0d7f1-b267-4d28-8b10-12e23202a5c4),\n]\ninterface IItemNameLimits : IUnknown\n{\n    HRESULT GetValidCharacters(\n        [out, string] LPWSTR *validchars,\n        [out, string] LPWSTR *invalidchars);\n\n    HRESULT GetMaxLength(\n        [in, string] LPCWSTR name,\n        [out] int *max_length);\n}\n\ntypedef [v1_enum] enum ACTIVATEOPTIONS\n{\n    AO_NONE             = 0x00000000,\n    AO_DESIGNMODE       = 0x00000001,\n    AO_NOERRORUI        = 0x00000002,\n    AO_NOSPLASHSCREEN   = 0x00000004,\n    AO_PRELAUNCH        = 0x02000000\n} ACTIVATEOPTIONS;\n\n[\n    uuid(2e941141-7f97-4756-ba1d-9decde894a3d),\n    object,\n    pointer_default(unique)\n]\ninterface IApplicationActivationManager : IUnknown\n{\n    HRESULT ActivateApplication([in] LPCWSTR appusermodelid,\n                                [in, unique] LPCWSTR arguments,\n                                [in] ACTIVATEOPTIONS options,\n                                [out] DWORD *processid);\n    HRESULT ActivateForFile([in] LPCWSTR appusermodelid,\n                            [in] IShellItemArray *itemarray,\n                            [in, unique] LPCWSTR verb,\n                            [out] DWORD *processid);\n    HRESULT ActivateForProtocol([in] LPCWSTR appusermodelid,\n                                [in] IShellItemArray *itemarray,\n                                [out] DWORD *processid);\n}\n\n/*****************************************************************************\n * ShellObjects typelibrary\n */\n[\n uuid(50A7E9B1-70EF-11D1-B75A-00A0C90564FE),\n lcid(0x0000),\n version(1.0)\n]\nlibrary ShellObjects\n{\n    [\n        uuid(71F96385-DDD6-48D3-A0C1-AE06E8B055FB)\n    ]\n    coclass ExplorerBrowser\n    {\n        interface IExplorerBrowser;\n    }\n\n    [\n        uuid(DC1C5A9C-E88A-4DDE-A5A1-60F82A20AEF7)\n    ]\n    coclass FileOpenDialog\n    {\n        interface IFileOpenDialog;\n    }\n\n    [\n        uuid(C0B4E2F3-BA21-4773-8DBA-335EC946EB8B)\n    ]\n    coclass FileSaveDialog\n    {\n        interface IFileSaveDialog;\n    }\n\n    [\n        uuid(AE054212-3535-4430-83ED-D501AA6680E6)\n    ]\n    coclass NamespaceTreeControl\n    {\n        interface INameSpaceTreeControl2;\n    }\n\n    [\n        uuid(4df0c730-df9d-4ae3-9153-aa6b82e9795a)\n    ]\n    coclass KnownFolderManager\n    {\n        interface IKnownFolderManager;\n    }\n\n    [\n        uuid(591209c7-767b-42b2-9fba-44ee4615f2c7)\n    ]\n    coclass ApplicationAssociationRegistration\n    {\n        interface IApplicationAssociationRegistration;\n    }\n\n    [\n        uuid(86c14003-4d6b-4ef3-a7b4-0506663b2e68)\n    ]\n    coclass ApplicationDestinations\n    {\n        interface IApplicationDestinations;\n    }\n\n    [\n         uuid(00021401-0000-0000-c000-000000000046)\n    ]\n    coclass ShellLink\n    {\n        interface IShellLinkW;\n    }\n\n    [\n        uuid(56fdf344-fd6d-11d0-958a-006097c9a090)\n    ]\n    coclass TaskbarList\n    {\n        interface ITaskbarList4;\n    }\n\n    [\n        uuid(77f10cf0-3db5-4966-b520-b7c54fd35ed6)\n    ]\n    coclass DestinationList {\n        interface ICustomDestinationList;\n    }\n\n    [\n        uuid(2d3468c1-36a7-43b6-ac24-d3f02fd9607a)\n    ]\n    coclass EnumerableObjectCollection\n    {\n        interface IEnumObjects;\n    }\n\n    [\n        uuid(331f1768-05a9-4ddd-b86e-dae34ddc998a)\n    ]\n    coclass QueryCancelAutoPlay\n    {\n        interface IQueryCancelAutoPlay;\n    }\n\n    [\n        uuid(45ba127d-10a8-46ea-8ab7-56ea9078943c)\n    ]\n    coclass ApplicationActivationManager\n    {\n        interface IApplicationActivationManager;\n    }\n}\n"
  },
  {
    "path": "wine/windows/shtypes.idl",
    "content": "/*\n * Type definitions for shell objects\n *\n * Copyright (C) 1999 Juergen Schmied\n * Copyright (C) 2003 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"wtypes.idl\";\n\ncpp_quote(\"#include <pshpack1.h>\")\ntypedef struct\n{\n    WORD cb;      /* nr of bytes in this item */\n    BYTE abID[1]; /* first byte in this item */\n} SHITEMID, *LPSHITEMID;\ntypedef const SHITEMID *LPCSHITEMID;\n\ntypedef struct _ITEMIDLIST\n{\n    SHITEMID mkid; /* first itemid in list */\n} ITEMIDLIST,*LPITEMIDLIST;\ntypedef const ITEMIDLIST *LPCITEMIDLIST;\ntypedef LPITEMIDLIST PITEMID_CHILD;\ntypedef const PITEMID_CHILD PCITEMID_CHILD;\ntypedef LPCITEMIDLIST PCUITEMID_CHILD;\ntypedef LPCITEMIDLIST *PCUITEMID_CHILD_ARRAY;\ntypedef LPCITEMIDLIST PCUIDLIST_RELATIVE;\ntypedef LPITEMIDLIST PIDLIST_ABSOLUTE;\ntypedef LPCITEMIDLIST PCIDLIST_ABSOLUTE;\ntypedef LPCITEMIDLIST *PCIDLIST_ABSOLUTE_ARRAY;\ncpp_quote(\"#include <poppack.h>\")\n\n#ifndef MAX_PATH\n#define MAX_PATH 260\n#endif\n\ncpp_quote(\"#if 0\")\ntypedef struct { int dummy; } WIN32_FIND_DATAA, WIN32_FIND_DATAW;\ncpp_quote(\"#endif\")\n\ntypedef enum tagSTRRET_TYPE\n{\n    STRRET_WSTR = 0,\n    STRRET_OFFSET = 1,\n    STRRET_CSTR = 2\n} STRRET_TYPE;\n\ncpp_quote(\"#include <pshpack8.h>\")\ntypedef struct _STRRET\n{\n    UINT uType;\t\t\t/* STRRET_xxx */\n    [switch_type(UINT), switch_is(uType)] union\n    {\n    [case(STRRET_WSTR)][string] LPWSTR    pOleStr;        /* OLESTR that will be freed */\n    [case(STRRET_OFFSET)]       UINT      uOffset;        /* Offset into SHITEMID (ANSI) */\n    [case(STRRET_CSTR)]         char      cStr[MAX_PATH]; /* ANSI Buffer */\n    } DUMMYUNIONNAME;\n} STRRET, *LPSTRRET;\ncpp_quote(\"#include <poppack.h>\")\n\ncpp_quote(\"#include <pshpack1.h>\")\ntypedef struct\n{\n    int fmt;\n    int cxChar;\n    STRRET str;\n} SHELLDETAILS, *LPSHELLDETAILS;\ncpp_quote(\"#include <poppack.h>\")\n\ntypedef struct _COMDLG_FILTERSPEC\n{\n    [string] LPCWSTR pszName;\n    [string] LPCWSTR pszSpec;\n} COMDLG_FILTERSPEC;\n\ntypedef [v1_enum] enum tagSHCOLSTATE\n{\n    SHCOLSTATE_DEFAULT = 0,\n    SHCOLSTATE_TYPE_STR,\n    SHCOLSTATE_TYPE_INT,\n    SHCOLSTATE_TYPE_DATE,\n    SHCOLSTATE_TYPEMASK = 0xf,\n    SHCOLSTATE_ONBYDEFAULT = 0x10,\n    SHCOLSTATE_SLOW = 0x20,\n    SHCOLSTATE_EXTENDED = 0x40,\n    SHCOLSTATE_SECONDARYUI = 0x80,\n    SHCOLSTATE_HIDDEN = 0x100,\n    SHCOLSTATE_PREFER_VARCMP = 0x200,\n    SHCOLSTATE_PREFER_FMTCMP = 0x400,\n    SHCOLSTATE_NOSORTBYFOLDERNESS = 0x800,\n    SHCOLSTATE_VIEWONLY = 0x10000,\n    SHCOLSTATE_BATCHREAD = 0x20000,\n    SHCOLSTATE_NO_GROUPBY = 0x40000,\n    SHCOLSTATE_FIXED_WIDTH = 0x1000,\n    SHCOLSTATE_NODPISCALE = 0x2000,\n    SHCOLSTATE_FIXED_RATIO = 0x4000,\n    SHCOLSTATE_DISPLAYMASK = 0xf000\n} SHCOLSTATE;\n\ntypedef DWORD SHCOLSTATEF;\n\ntypedef GUID KNOWNFOLDERID;\n\ncpp_quote(\"#if 0\")\ntypedef KNOWNFOLDERID *REFKNOWNFOLDERID;\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#ifdef __cplusplus\")\ncpp_quote(\"#define REFKNOWNFOLDERID const KNOWNFOLDERID &\")\ncpp_quote(\"#else\")\ncpp_quote(\"#define REFKNOWNFOLDERID const KNOWNFOLDERID * __MIDL_CONST\")\ncpp_quote(\"#endif\")\n\ntypedef GUID FOLDERTYPEID;\n\ncpp_quote(\"#if 0\")\ntypedef FOLDERTYPEID *REFFOLDERTYPEID;\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#ifdef __cplusplus\")\ncpp_quote(\"#define REFFOLDERTYPEID const FOLDERTYPEID &\")\ncpp_quote(\"#else\")\ncpp_quote(\"#define REFFOLDERTYPEID const FOLDERTYPEID * __MIDL_CONST\")\ncpp_quote(\"#endif\")\n\ntypedef  [v1_enum] enum tagPERCEIVED {\n  PERCEIVED_TYPE_CUSTOM      = -3,\n  PERCEIVED_TYPE_UNSPECIFIED = -2,\n  PERCEIVED_TYPE_FOLDER      = -1,\n  PERCEIVED_TYPE_UNKNOWN     = 0,\n  PERCEIVED_TYPE_TEXT        = 1,\n  PERCEIVED_TYPE_IMAGE       = 2,\n  PERCEIVED_TYPE_AUDIO       = 3,\n  PERCEIVED_TYPE_VIDEO       = 4,\n  PERCEIVED_TYPE_COMPRESSED  = 5,\n  PERCEIVED_TYPE_DOCUMENT    = 6,\n  PERCEIVED_TYPE_SYSTEM      = 7,\n  PERCEIVED_TYPE_APPLICATION = 8,\n  PERCEIVED_TYPE_GAMEMEDIA   = 9,\n  PERCEIVED_TYPE_CONTACTS    = 10\n} PERCEIVED;\n\ncpp_quote(\"#define PERCEIVEDFLAG_UNDEFINED     0x0000\")\ncpp_quote(\"#define PERCEIVEDFLAG_SOFTCODED     0x0001\")\ncpp_quote(\"#define PERCEIVEDFLAG_HARDCODED     0x0002\")\ncpp_quote(\"#define PERCEIVEDFLAG_NATIVESUPPORT 0x0004\")\ncpp_quote(\"#define PERCEIVEDFLAG_GDIPLUS       0x0010\")\ncpp_quote(\"#define PERCEIVEDFLAG_WMSDK         0x0020\")\ncpp_quote(\"#define PERCEIVEDFLAG_ZIPFOLDER     0x0040\")\n"
  },
  {
    "path": "wine/windows/sipbase.h",
    "content": "/*\n * Copyright (C) 2002 Patrik Stridvall\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_SIPBASE_H\n#define __WINE_SIPBASE_H\n\n#include <mssip.h>\n\n#endif  /* __WINE_SIPBASE_H */\n"
  },
  {
    "path": "wine/windows/slerror.h",
    "content": "/*\n *\n * Copyright 2008 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __WINE_SLERROR_H\n#define __WINE_SLERROR_H\n\n#define SL_E_VALUE_NOT_FOUND          0xC004F012\n#define SL_E_RIGHT_NOT_GRANTED        0xC004F013\n#define SL_E_DATATYPE_MISMATCHED      0xC004F01E\n\n#endif /* __WINE_SLERROR_H */\n"
  },
  {
    "path": "wine/windows/slpublic.h",
    "content": "/*\n *\n * Copyright 2008 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __WINE_SLPUBLIC_H\n#define __WINE_SLPUBLIC_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifdef _SLC_\n#define SLCAPI\n#else\n#define SLCAPI DECLSPEC_IMPORT\n#endif\n\ntypedef enum _tagSLDATATYPE\n{\n    SL_DATA_NONE     = REG_NONE,\n    SL_DATA_SZ       = REG_SZ,\n    SL_DATA_DWORD    = REG_DWORD,\n    SL_DATA_BINARY   = REG_BINARY,\n    SL_DATA_MULTI_SZ = REG_MULTI_SZ,\n    SL_DATA_SUM      = 100,\n} SLDATATYPE;\n\nSLCAPI HRESULT WINAPI SLGetWindowsInformation(LPCWSTR, SLDATATYPE*, UINT*, LPBYTE*);\nSLCAPI HRESULT WINAPI SLGetWindowsInformationDWORD(LPCWSTR, LPDWORD);\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_SLPUBLIC_H */\n"
  },
  {
    "path": "wine/windows/snmp.h",
    "content": "/*\n * Copyright (C) 2005 Juan Lang\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef _WINE_SNMP_H\n#define _WINE_SNMP_H\n\n#include <windows.h>\n\n#include <pshpack4.h>\n\ntypedef struct {\n    BYTE *stream;\n    UINT  length;\n    BOOL  dynamic;\n} AsnOctetString;\n\ntypedef struct {\n    UINT  idLength;\n    UINT *ids;\n} AsnObjectIdentifier;\n\ntypedef LONG           AsnInteger32;\ntypedef ULONG          AsnUnsigned32;\ntypedef ULARGE_INTEGER AsnCounter64;\ntypedef AsnUnsigned32  AsnCounter32;\ntypedef AsnUnsigned32  AsnGauge32;\ntypedef AsnUnsigned32  AsnTimeticks;\ntypedef AsnOctetString AsnBits;\ntypedef AsnOctetString AsnSequence;\ntypedef AsnOctetString AsnImplicitSequence;\ntypedef AsnOctetString AsnIPAddress;\ntypedef AsnOctetString AsnNetworkAddress;\ntypedef AsnOctetString AsnDisplayString;\ntypedef AsnOctetString AsnOpaque;\n\ntypedef struct {\n    BYTE asnType;\n    union {\n        AsnInteger32        number;\n        AsnUnsigned32       unsigned32;\n        AsnCounter64        counter64;\n        AsnOctetString      string;\n        AsnBits             bits;\n        AsnObjectIdentifier object;\n        AsnSequence         sequence;\n        AsnIPAddress        address;\n        AsnCounter32        counter;\n        AsnGauge32          gauge;\n        AsnTimeticks        ticks;\n        AsnOpaque           arbitrary;\n    } asnValue;\n} AsnAny;\n\ntypedef AsnObjectIdentifier AsnObjectName;\ntypedef AsnAny              AsnObjectSyntax;\n\ntypedef struct {\n    AsnObjectName   name;\n    AsnObjectSyntax value;\n} SnmpVarBind;\n\ntypedef struct {\n    SnmpVarBind *list;\n    UINT         len;\n} SnmpVarBindList;\n\n#include <poppack.h>\n\n#define ASN_UNIVERSAL   0x00\n#define ASN_APPLICATION 0x40\n#define ASN_CONTEXT     0x80\n#define ASN_PRIVATE     0xc0\n#define ASN_PRIMITIVE   0x00\n#define ASN_CONSTRUCTOR 0x20\n\n#define SNMP_PDU_GET         (ASN_CONTEXT     | ASN_CONSTRUCTOR | 0x00)\n#define SNMP_PDU_GETNEXT     (ASN_CONTEXT     | ASN_CONSTRUCTOR | 0x01)\n#define SNMP_PDU_RESPONSE    (ASN_CONTEXT     | ASN_CONSTRUCTOR | 0x02)\n#define SNMP_PDU_SET         (ASN_CONTEXT     | ASN_CONSTRUCTOR | 0x03)\n#define SNMP_PDU_V1TRAP      (ASN_CONTEXT     | ASN_CONSTRUCTOR | 0x04)\n#define SNMP_PDU_GETBULK     (ASN_CONTEXT     | ASN_CONSTRUCTOR | 0x05)\n#define SNMP_PDU_INFORM      (ASN_CONTEXT     | ASN_CONSTRUCTOR | 0x06)\n#define SNMP_PDU_TRAP        (ASN_CONTEXT     | ASN_CONSTRUCTOR | 0x07)\n\n#define ASN_INTEGER          (ASN_UNIVERSAL   | ASN_PRIMITIVE   | 0x02)\n#define ASN_BITS             (ASN_UNIVERSAL   | ASN_PRIMITIVE   | 0x03)\n#define ASN_OCTETSTRING      (ASN_UNIVERSAL   | ASN_PRIMITIVE   | 0x04)\n#define ASN_NULL             (ASN_UNIVERSAL   | ASN_PRIMITIVE   | 0x05)\n#define ASN_OBJECTIDENTIFIER (ASN_UNIVERSAL   | ASN_PRIMITIVE   | 0x06)\n#define ASN_INTEGER32        ASN_INTEGER\n\n#define ASN_SEQUENCE         (ASN_UNIVERSAL   | ASN_CONSTRUCTOR | 0x10)\n#define ASN_SEQUENCEOF       ASN_SEQUENCE\n\n#define ASN_IPADDRESS        (ASN_APPLICATION | ASN_PRIMITIVE   | 0x00)\n#define ASN_COUNTER32        (ASN_APPLICATION | ASN_PRIMITIVE   | 0x01)\n#define ASN_GAUGE32          (ASN_APPLICATION | ASN_PRIMITIVE   | 0x02)\n#define ASN_TIMETICKS        (ASN_APPLICATION | ASN_PRIMITIVE   | 0x03)\n#define ASN_OPAQUE           (ASN_APPLICATION | ASN_PRIMITIVE   | 0x04)\n#define ASN_COUNTER64        (ASN_APPLICATION | ASN_PRIMITIVE   | 0x06)\n#define ASN_UNSIGNED32       (ASN_APPLICATION | ASN_PRIMITIVE   | 0x07)\n\n#define SNMP_EXCEPTION_NOSUCHOBJECT   (ASN_CONTEXT | ASN_PRIMITIVE | 0x00)\n#define SNMP_EXCEPTION_NOSUCHINSTANCE (ASN_CONTEXT | ASN_PRIMITIVE | 0x01)\n#define SNMP_EXCEPTION_ENDOFMIBVIEW   (ASN_CONTEXT | ASN_PRIMITIVE | 0x02)\n\n#define SNMP_EXTENSION_GET         SNMP_PDU_GET\n#define SNMP_EXTENSION_GET_NEXT    SNMP_PDU_GETNEXT\n#define SNMP_EXTENSION_GET_BULK    SNMP_PDU_GETBULK\n#define SNMP_EXTENSION_SET_TEST    (ASN_PRIVATE | ASN_CONSTRUCTOR | 0x0)\n#define SNMP_EXTENSION_SET_COMMIT  SNMP_PDU_SET\n#define SNMP_EXTENSION_SET_UNDO    (ASN_PRIVATE | ASN_CONSTRUCTOR | 0x1)\n#define SNMP_EXTENSION_SET_CLEANUP (ASN_PRIVATE | ASN_CONSTRUCTOR | 0x2)\n\n#define SNMP_ERRORSTATUS_NOERROR             0\n#define SNMP_ERRORSTATUS_TOOBIG              1\n#define SNMP_ERRORSTATUS_NOSUCHNAME          2\n#define SNMP_ERRORSTATUS_BADVALUE            3\n#define SNMP_ERRORSTATUS_READONLY            4\n#define SNMP_ERRORSTATUS_GENERR              5\n#define SNMP_ERRORSTATUS_NOACCESS            6\n#define SNMP_ERRORSTATUS_WRONGTYPE           7\n#define SNMP_ERRORSTATUS_WRONGLENGTH         8\n#define SNMP_ERRORSTATUS_WRONGENCODING       9\n#define SNMP_ERRORSTATUS_WRONGVALUE          10\n#define SNMP_ERRORSTATUS_NOCREATION          11\n#define SNMP_ERRORSTATUS_INCONSISTENTVALUE   12\n#define SNMP_ERRORSTATUS_RESOURCEUNAVAILABLE 13\n#define SNMP_ERRORSTATUS_COMMITFAILED        14\n#define SNMP_ERRORSTATUS_UNDOFAILED          15\n#define SNMP_ERRORSTATUS_AUTHORIZATIONERROR  16\n#define SNMP_ERRORSTATUS_NOTWRITABLE         17\n#define SNMP_ERRORSTATUS_INCONSISTENTNAME    18\n\n#define SNMP_GENERICTRAP_COLDSTART           0\n#define SNMP_GENERICTRAP_WARMSTART           1\n#define SNMP_GENERICTRAP_LINKDOWN            2\n#define SNMP_GENERICTRAP_LINKUP              3\n#define SNMP_GENERICTRAP_AUTHFAILURE         4\n#define SNMP_GENERICTRAP_EGPNEIGHLOSS        5\n#define SNMP_GENERICTRAP_ENTERSPECIFIC       6\n\n#define SNMP_ACCESS_NONE        0\n#define SNMP_ACCESS_NOTIFY      1\n#define SNMP_ACCESS_READ_ONLY   2\n#define SNMP_ACCESS_READ_WRITE  3\n#define SNMP_ACCESS_READ_CREATE 4\n\n#define SNMP_LOG_SILENT  0\n#define SNMP_LOG_FATAL   1\n#define SNMP_LOG_ERROR   2\n#define SNMP_LOG_WARNING 3\n#define SNMP_LOG_TRACE   4\n#define SNMP_LOG_VERBOSE 5\n\n#define SNMP_OUTPUT_TO_CONSOLE  1\n#define SNMP_OUTPUT_TO_LOGFILE  2\n#define SNMP_OUTPUT_TO_EVENTLOG 4\n#define SNMP_OUTPUT_TO_DEBUGGER 8\n\n#define DEFINE_SIZEOF(x)     (sizeof(x)/sizeof((x)[0]))\n#define DEFINE_OID(x)        { DEFINE_SIZEOF(x),(x) }\n#define DEFINE_NULLOID()     { 0, NULL }\n#define DEFINE_NULLOCTENTS() { NULL, 0, FALSE }\n\n#define DEFAULT_SNMP_PORT_UDP     161\n#define DEFAULT_SNMP_PORT_IPX     36879\n#define DEFAULT_SNMPTRAP_PORT_UDP 162\n#define DEFAULT_SNMPTRAP_PORT_IPX 36880\n\n#define SNMP_MAX_OID_LEN 128\n\n#define SNMP_MEM_ALLOC_ERROR          0\n#define SNMP_BERAPI_INVALID_LENGTH    10\n#define SNMP_BERAPI_INVALID_TAG       11\n#define SNMP_BERAPI_OVERFLOW          12\n#define SNMP_BERAPI_SHORT_BUFFER      13\n#define SNMP_BERAPI_INVALID_OBJELEM   14\n#define SNMP_PDUAPI_UNRECOGNIZED_PDU  20\n#define SNMP_PDUAPI_INVALID_ES        21\n#define SNMP_PDUAPI_INVALID_GT        22\n#define SNMP_AUTHAPI_INVALID_VERSION  30\n#define SNMP_AUTHAPI_INVALID_MSG_TYPE 31\n#define SNMP_AUTHAPI_TRIV_AUTH_FAILED 32\n\n#define SNMPAPI_NOERROR TRUE\n#define SNMPAPI_ERROR   FALSE\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nBOOL WINAPI SnmpExtensionInit(DWORD dwUptimeReference,\n HANDLE *phSubagentTrapEvent, AsnObjectIdentifier *pFirstSupportedRegion);\nBOOL WINAPI SnmpExtensionInitEx(AsnObjectIdentifier *pNextSupportedRegion);\n\nBOOL WINAPI SnmpExtensionMonitor(LPVOID pAgentMgmtData);\n\nBOOL WINAPI SnmpExtensionQuery(BYTE bPduType, SnmpVarBindList *pVarBindList,\n AsnInteger32 *pErrorStatus, AsnInteger32 *pErrorIndex);\nBOOL WINAPI SnmpExtensionQueryEx(UINT nRequestType, UINT nTransactionId,\n SnmpVarBindList *pVarBindList, AsnOctetString *pContextInfo,\n AsnInteger32 *pErrorStatus, AsnInteger32 *pErrorIndex);\n\nBOOL WINAPI SnmpExtensionTrap(AsnObjectIdentifier *pEnterpriseOid,\n AsnInteger32 *pGenericTrapId, AsnInteger32 *pSpecificTrapId,\n AsnTimeticks *pTimeStamp, SnmpVarBindList *pVarBindList);\n\nVOID WINAPI SnmpExtensionClose(VOID);\n\ntypedef BOOL (WINAPI *PFNSNMPEXTENSIONINIT)(DWORD dwUptimeReference,\n HANDLE *phSubagentTrapEvent, AsnObjectIdentifier *pFirstSupportedRegion);\ntypedef BOOL (WINAPI *PFNSNMPEXTENSIONINITEX)(\n AsnObjectIdentifier *pNextSupportedRegion);\n\ntypedef BOOL (WINAPI *PFNSNMPEXTENSIONMONITOR)(LPVOID pAgentMgmtData);\n\ntypedef BOOL (WINAPI *PFNSNMPEXTENSIONQUERY)(BYTE bPduType,\n SnmpVarBindList *pVarBindList, AsnInteger32 *pErrorStatus,\n AsnInteger32 *pErrorIndex);\ntypedef BOOL (WINAPI *PFNSNMPEXTENSIONQUERYEX)(UINT nRequestType,\n UINT nTransactionId, SnmpVarBindList *pVarBindList,\n AsnOctetString *pContextInfo, AsnInteger32 *pErrorStatus,\n AsnInteger32 *pErrorIndex);\n\ntypedef BOOL (WINAPI *PFNSNMPEXTENSIONTRAP)(AsnObjectIdentifier *pEnterpriseOid,\n AsnInteger32 *pGenericTrapId, AsnInteger32 *pSpecificTrapId,\n AsnTimeticks *pTimeStamp, SnmpVarBindList *pVarBindList);\n\ntypedef VOID (WINAPI *PFNSNMPEXTENSIONCLOSE)(VOID);\n\nINT WINAPI SnmpUtilOidCpy(AsnObjectIdentifier *pOidDst,\n AsnObjectIdentifier *pOidSrc);\nINT WINAPI SnmpUtilOidAppend(AsnObjectIdentifier *pOidDst,\n AsnObjectIdentifier *pOidSrc);\nINT WINAPI SnmpUtilOidCmp(AsnObjectIdentifier *pOid1,\n AsnObjectIdentifier *pOid2);\nINT WINAPI SnmpUtilOidNCmp(AsnObjectIdentifier *pOid1,\n AsnObjectIdentifier *pOid2, UINT nSubIds);\nVOID WINAPI SnmpUtilOidFree(AsnObjectIdentifier *pOid);\n\nINT WINAPI SnmpUtilOctetsCmp(AsnOctetString *pOctets1,\n AsnOctetString *pOctets2);\nINT WINAPI SnmpUtilOctetsNCmp(AsnOctetString *pOctets1,\n AsnOctetString *pOctets2, UINT nChars);\nINT WINAPI SnmpUtilOctetsCpy(AsnOctetString *pOctetsDst,\n AsnOctetString *pOctetsSrc);\nVOID WINAPI SnmpUtilOctetsFree(AsnOctetString *pOctets);\n\nINT WINAPI SnmpUtilAsnAnyCpy(AsnAny *pAnyDst, AsnAny *pAnySrc);\nVOID WINAPI SnmpUtilAsnAnyFree(AsnAny *pAny);\n\nINT WINAPI SnmpUtilVarBindCpy(SnmpVarBind *pVbDst, SnmpVarBind *pVbSrc);\nVOID WINAPI SnmpUtilVarBindFree(SnmpVarBind *pVb);\n\nINT WINAPI SnmpUtilVarBindListCpy(SnmpVarBindList *pVblDst,\n SnmpVarBindList *pVblSrc);\nVOID WINAPI SnmpUtilVarBindListFree(SnmpVarBindList *pVbl);\n\nLPVOID WINAPI SnmpUtilMemAlloc(UINT nBytes) __WINE_ALLOC_SIZE(1);\nLPVOID WINAPI SnmpUtilMemReAlloc(LPVOID pMem, UINT nBytes) __WINE_ALLOC_SIZE(2);\nVOID WINAPI SnmpUtilMemFree(LPVOID pMem);\n\nLPSTR WINAPI SnmpUtilOidToA(AsnObjectIdentifier *Oid);\nLPSTR WINAPI SnmpUtilIdsToA(UINT *Ids, UINT IdLength);\n\nVOID WINAPI SnmpUtilPrintOid(AsnObjectIdentifier *Oid);\nVOID WINAPI SnmpUtilPrintAsnAny(AsnAny *pAny);\n\nDWORD WINAPI SnmpSvcGetUptime(VOID);\nVOID WINAPI SnmpSvcSetLogLevel(INT nLogLevel);\nVOID WINAPI SnmpSvcSetLogType(INT nLogType);\n\nVOID WINAPIV SnmpUtilDbgPrint(INT nLogLevel, LPSTR szFormat, ...);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _WINE_SNMP_H */\n"
  },
  {
    "path": "wine/windows/softpub.h",
    "content": "/*\n * Copyright (C) 2006 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_SOFTPUB_H\n#define __WINE_SOFTPUB_H\n\n#include <wintrust.h>\n\n#define WINTRUST_ACTION_GENERIC_CERT_VERIFY \\\n    { 0x189a3842, 0x3041, 0x11d1, { 0x85,0xe1,0x00,0xc0,0x4f,0xc2,0x95,0xee }}\n\n#if defined(__GNUC__)\n#define SP_GENERIC_CERT_INIT_FUNCTION (const WCHAR []) \\\n    {'S','o','f','t','p','u','b','D','e','f','C','e','r','t','I','n','i','t', 0}\n#elif defined(_MSC_VER)\n#define SP_GENERIC_CERT_INIT_FUNCTION L\"SoftpubDefCertInit\"\n#else\nstatic const WCHAR SP_GENERIC_CERT_INIT_FUNCTION[] =\n    {'S','o','f','t','p','u','b','D','e','f','C','e','r','t','I','n','i','t', 0};\n#endif\n\n#define WINTRUST_ACTION_GENERIC_CHAIN_VERIFY \\\n    { 0xfc451c16, 0xac75, 0x11d1, { 0xb4,0xb8,0x00,0xc0,0x4f,0xb6,0x6e,0xa0 }}\n\n#if defined(__GNUC__)\n#define GENERIC_CHAIN_FINALPOLICY_FUNCTION (const WCHAR []) \\\n    {'G','e','n','e','r','i','c','C','h','a','i','n','F','i','n','a','l','P','r','o','v', 0}\n#define GENERIC_CHAIN_CERTTRUST_FUNCTION (const WCHAR []) \\\n    {'G','e','n','e','r','i','c','C','h','a','i','n','C','e','r','t','i','f','i','c','a','t','e','T','r','u','s','t', 0}\n#elif defined(_MSC_VER)\n#define GENERIC_CHAIN_FINALPOLICY_FUNCTION L\"GenericChainFinalProv\"\n#define GENERIC_CHAIN_CERTTRUST_FUNCTION   L\"GenericChainCertificateTrust\"\n#else\nstatic const WCHAR GENERIC_CHAIN_FINALPOLICY_FUNCTION[] =\n    {'G','e','n','e','r','i','c','C','h','a','i','n','F','i','n','a','l','P','r','o','v', 0};\nstatic const WCHAR GENERIC_CHAIN_CERTTRUST_FUNCTION[] =\n    {'G','e','n','e','r','i','c','C','h','a','i','n','C','e','r','t','i','f','i','c','a','t','e','T','r','u','s','t', 0};\n#endif\n\ntypedef struct _WTD_GENERIC_CHAIN_POLICY_SIGNER_INFO\n{\n    union {\n        DWORD cbStruct;\n        DWORD cbSize;\n    } DUMMYUNIONNAME;\n    PCCERT_CHAIN_CONTEXT pChainContext;\n    DWORD                dwSignerType;\n    PCMSG_SIGNER_INFO    pMsgSignerInfo;\n    DWORD                dwError;\n    DWORD                cCounterSigner;\n    struct _WTD_GENERIC_CHAIN_POLICY_SIGNER_INFO *rgpCounterSigner;\n} WTD_GENERIC_CHAIN_POLICY_SIGNER_INFO, *PWTD_GENERIC_CHAIN_POLICY_SIGNER_INFO;\n\ntypedef HRESULT (WINAPI *PFN_WTD_GENERIC_CHAIN_POLICY_CALLBACK)(\n PCRYPT_PROVIDER_DATA pProvData, DWORD dwStepError, DWORD dwRegPolicySettings,\n DWORD cSigner, PWTD_GENERIC_CHAIN_POLICY_SIGNER_INFO rgpSigner,\n void *pvPolicyArg);\n\ntypedef struct _WTD_GENERIC_CHAIN_POLICY_CREATE_INFO\n{\n    union {\n        DWORD cbStruct;\n        DWORD cbSize;\n    } DUMMYUNIONNAME;\n    HCERTCHAINENGINE hChainEngine;\n    PCERT_CHAIN_PARA pChainPara;\n    DWORD            dwFlags;\n    void            *pvReserved;\n} WTD_GENERIC_CHAIN_POLICY_CREATE_INFO, *PWTD_GENERIC_CHAIN_POLICY_CREATE_INFO;\n\ntypedef struct _WTD_GENERIC_CHAIN_POLICY_DATA\n{\n    union {\n        DWORD cbStruct;\n        DWORD cbSize;\n    } DUMMYUNIONNAME;\n    PWTD_GENERIC_CHAIN_POLICY_CREATE_INFO pSignerChainInfo;\n    PWTD_GENERIC_CHAIN_POLICY_CREATE_INFO pCounterSignerChainInfo;\n    PFN_WTD_GENERIC_CHAIN_POLICY_CALLBACK pfnPolicyCallback;\n    void                                 *pvPolicyArg;\n} WTD_GENERIC_CHAIN_POLICY_DATA, *PWTD_GENERIC_CHAIN_POLICY_DATA;\n\n#if defined(__GNUC__)\n#define SP_POLICY_PROVIDER_DLL_NAME (const WCHAR []) \\\n    {'W','I','N','T','R','U','S','T','.','D','L','L' ,0}\n#elif defined(_MSC_VER)\n#define SP_POLICY_PROVIDER_DLL_NAME L\"WINTRUST.DLL\"\n#else\nstatic const WCHAR SP_POLICY_PROVIDER_DLL_NAME[] =\n    {'W','I','N','T','R','U','S','T','.','D','L','L', 0};\n#endif\n\n#define WINTRUST_ACTION_GENERIC_VERIFY_V2 \\\n    { 0xaac56b,   0xcd44, 0x11d0, { 0x8c,0xc2,0x00,0xc0,0x4f,0xc2,0x95,0xee }}\n\n#if defined(__GNUC__)\n#define SP_INIT_FUNCTION          (const WCHAR []) \\\n    {'S','o','f','t','p','u','b','I','n','i','t','i','a','l','i','z','e', 0}\n#define SP_OBJTRUST_FUNCTION      (const WCHAR []) \\\n    {'S','o','f','t','p','u','b','L','o','a','d','M','e','s','s','a','g','e', 0}\n#define SP_SIGTRUST_FUNCTION      (const WCHAR []) \\\n    {'S','o','f','t','p','u','b','L','o','a','d','S','i','g','n','a','t','u','r','e', 0}\n#define SP_CHKCERT_FUNCTION       (const WCHAR []) \\\n    {'S','o','f','t','p','u','b','C','h','e','c','k','C','e','r','t', 0}\n#define SP_FINALPOLICY_FUNCTION   (const WCHAR []) \\\n    {'S','o','f','t','p','u','b','A','u','t','h','e','n','t','i','c','o','d','e', 0}\n#define SP_CLEANUPPOLICY_FUNCTION (const WCHAR []) \\\n    {'S','o','f','t','p','u','b','C','l','e','a','n','u','p', 0}\n#elif defined(_MSC_VER)\n#define SP_INIT_FUNCTION          L\"SoftpubInitialize\"\n#define SP_OBJTRUST_FUNCTION      L\"SoftpubLoadMessage\"\n#define SP_SIGTRUST_FUNCTION      L\"SoftpubLoadSignature\"\n#define SP_CHKCERT_FUNCTION       L\"SoftpubCheckCert\"\n#define SP_FINALPOLICY_FUNCTION   L\"SoftpubAuthenticode\"\n#define SP_CLEANUPPOLICY_FUNCTION L\"SoftpubCleanup\"\n#else\nstatic const WCHAR SP_INIT_FUNCTION[]          =\n    {'S','o','f','t','p','u','b','I','n','i','t','i','a','l','i','z','e', 0};\nstatic const WCHAR SP_OBJTRUST_FUNCTION[]      =\n    {'S','o','f','t','p','u','b','L','o','a','d','M','e','s','s','a','g','e', 0};\nstatic const WCHAR SP_SIGTRUST_FUNCTION[]      =\n    {'S','o','f','t','p','u','b','L','o','a','d','S','i','g','n','a','t','u','r','e', 0};\nstatic const WCHAR SP_CHKCERT_FUNCTION[]       =\n    {'S','o','f','t','p','u','b','C','h','e','c','k','C','e','r','t', 0};\nstatic const WCHAR SP_FINALPOLICY_FUNCTION[]   =\n    {'S','o','f','t','p','u','b','A','u','t','h','e','n','t','i','c','o','d','e', 0};\nstatic const WCHAR SP_CLEANUPPOLICY_FUNCTION[] =\n    {'S','o','f','t','p','u','b','C','l','e','a','n','u','p', 0};\n#endif\n\n#define WINTRUST_ACTION_TRUSTPROVIDER_TEST \\\n    { 0x573e31f8, 0xddba, 0x11d0, { 0x8c,0xcb,0x00,0xc0,0x4f,0xc2,0x95,0xee }}\n\n#if defined(__GNUC__)\n#define SP_TESTDUMPPOLICY_FUNCTION_TEST (const WCHAR []) \\\n    {'S','o','f','t','p','u','b','D','u','m','p','S','t','r','u','c','t','u','r','e', 0}\n#elif defined(_MSC_VER)\n#define SP_TESTDUMPPOLICY_FUNCTION_TEST L\"SoftpubDumpStructure\"\n#else\nstatic const WCHAR SP_TESTDUMPPOLICY_FUNCTION_TEST[] =\n    {'S','o','f','t','p','u','b','D','u','m','p','S','t','r','u','c','t','u','r','e', 0};\n#endif\n\n#define HTTPSPROV_ACTION \\\n    { 0x573e31f8, 0xaaba, 0x11d0, { 0x8c,0xcb,0x00,0xc0,0x4f,0xc2,0x95,0xee }}\n\n#if defined(__GNUC__)\n#define HTTPS_CERTTRUST_FUNCTION (const WCHAR []) \\\n    {'H','T','T','P','S','C','e','r','t','i','f','i','c','a','t','e','T','r','u','s','t', 0}\n#define HTTPS_FINALPOLICY_FUNCTION (const WCHAR []) \\\n    {'H','T','T','P','S','F','i','n','a','l','P','r','o','v', 0}\n#elif defined(_MSC_VER)\n#define HTTPS_FINALPOLICY_FUNCTION L\"HTTPSFinalProv\"\n#define HTTPS_CERTTRUST_FUNCTION   L\"HTTPSCertificateTrust\"\n#else\nstatic const WCHAR HTTPS_CERTTRUST_FUNCTION[] =\n    {'H','T','T','P','S','C','e','r','t','i','f','i','c','a','t','e','T','r','u','s','t', 0};\nstatic const WCHAR HTTPS_FINALPOLICY_FUNCTION[] =\n    {'H','T','T','P','S','F','i','n','a','l','P','r','o','v', 0};\n#endif\n\n#define OFFICESIGN_ACTION_VERIFY \\\n    { 0x5555c2cd, 0x17fb, 0x11d1, { 0x85,0xc4,0x00,0xc0,0x4f,0xc2,0x95,0xee }}\n\n#if defined(__GNUC__)\n#define OFFICE_POLICY_PROVIDER_DLL_NAME (const WCHAR []) \\\n    {'W','I','N','T','R','U','S','T','.','D','L','L' ,0}\n#define OFFICE_INITPROV_FUNCTION (const WCHAR []) \\\n    {'O','f','f','i','c','e','I','n','i','t','i','a','l','i','z','e','P','o','l','i','c','y', 0}\n#define OFFICE_CLEANUPPOLICY_FUNCTION (const WCHAR []) \\\n    {'O','f','f','i','c','e','C','l','e','a','n','u','p','P','o','l','i','c','y', 0}\n#elif defined(_MSC_VER)\n#define     OFFICE_POLICY_PROVIDER_DLL_NAME SP_POLICY_PROVIDER_DLL_NAME\n#define     OFFICE_INITPROV_FUNCTION        L\"OfficeInitializePolicy\"\n#define     OFFICE_CLEANUPPOLICY_FUNCTION   L\"OfficeCleanupPolicy\"\n#else\nstatic const WCHAR OFFICE_POLICY_PROVIDER_DLL_NAME[] =\n    {'W','I','N','T','R','U','S','T','.','D','L','L', 0};\nstatic const WCHAR OFFICE_INITPROV_FUNCTION[] =\n    {'O','f','f','i','c','e','I','n','i','t','i','a','l','i','z','e','P','o','l','i','c','y', 0};\nstatic const WCHAR OFFICE_CLEANUPPOLICY_FUNCTION[] =\n    {'O','f','f','i','c','e','C','l','e','a','n','u','p','P','o','l','i','c','y', 0};\n#endif\n\n#define DRIVER_ACTION_VERIFY \\\n    { 0xf750e6c3, 0x38ee, 0x11d1, { 0x85,0xe5,0x00,0xc0,0x4f,0xc2,0x95,0xee }}\n\n#if defined(__GNUC__)\n#define DRIVER_INITPROV_FUNCTION (const WCHAR []) \\\n    {'D','r','i','v','e','r','I','n','i','t','i','a','l','i','z','e','P','o','l','i','c','y', 0}\n#define DRIVER_FINALPOLPROV_FUNCTION (const WCHAR []) \\\n    {'D','r','i','v','e','r','F','i','n','a','l','P','o','l','i','c','y', 0}\n#define DRIVER_CLEANUPPOLICY_FUNCTION (const WCHAR []) \\\n    {'D','r','i','v','e','r','C','l','e','a','n','u','p','P','o','l','i','c','y', 0}\n#elif defined(_MSC_VER)\n#define     DRIVER_INITPROV_FUNCTION      L\"DriverInitializePolicy\"\n#define     DRIVER_FINALPOLPROV_FUNCTION  L\"DriverFinalPolicy\"\n#define     DRIVER_CLEANUPPOLICY_FUNCTION L\"DriverCleanupPolicy\"\n#else\nstatic const WCHAR DRIVER_INITPROV_FUNCTION[] =\n    {'D','r','i','v','e','r','I','n','i','t','i','a','l','i','z','e','P','o','l','i','c','y', 0};\nstatic const WCHAR DRIVER_FINALPOLPROV_FUNCTION[] =\n    {'D','r','i','v','e','r','F','i','n','a','l','P','o','l','i','c','y', 0};\nstatic const WCHAR DRIVER_CLEANUPPOLICY_FUNCTION[] =\n    {'D','r','i','v','e','r','C','l','e','a','n','u','p','P','o','l','i','c','y', 0};\n#endif\n\ntypedef struct DRIVER_VER_MAJORMINOR_\n{\n    DWORD dwMajor;\n    DWORD dwMinor;\n} DRIVER_VER_MAJORMINOR;\n\ntypedef struct DRIVER_VER_INFO_\n{\n    DWORD                 cbStruct;\n    ULONG_PTR             dwReserved1;\n    ULONG_PTR             dwReserved2;\n    DWORD                 dwPlatform;\n    DWORD                 dwVersion;\n    WCHAR                 wszVersion[MAX_PATH];\n    WCHAR                 wszSignedBy[MAX_PATH];\n    PCCERT_CONTEXT        pcSignerCertContext;\n    DRIVER_VER_MAJORMINOR sOSVersionLow;\n    DRIVER_VER_MAJORMINOR sOSVersionHigh;\n    DWORD                 dwBuildNumberLow;\n    DWORD                 dwBuildNumberHigh;\n} DRIVER_VER_INFO, *PDRIVER_VER_INFO;\n\n#endif /* __WINE_SOFTPUB_H */\n"
  },
  {
    "path": "wine/windows/sperror.h",
    "content": "/*\n * Speech API (SAPI) Errors.\n *\n * Copyright (C) 2017 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef SPError_h\n#define SPError_h\n\n#include <winerror.h>\n\n#define SPERR_UNINITIALIZED                0x80045001\n#define SPERR_ALREADY_INITIALIZED          0x80045002\n#define SPERR_NOT_FOUND                    0x8004503a\n#define SPERR_INVALID_REGISTRY_KEY         0x80045040\n\n#endif /* SPError_h */\n"
  },
  {
    "path": "wine/windows/sql.h",
    "content": "/*\n * ODBC definitions\n *\n * Copyright (C) 1999 Xiang Li\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __SQL_H\n#define __SQL_H\n\n#ifndef ODBCVER\n#define ODBCVER 0x0351\n#endif\n\n#include <sqltypes.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define SQL_NULL_DATA             (-1)\n#define SQL_DATA_AT_EXEC          (-2)\n#define SQL_SUCCESS                0\n#define SQL_SUCCESS_WITH_INFO      1\n#if (ODBCVER >= 0x0300)\n#define SQL_NO_DATA              100\n#endif\n#define SQL_ERROR                 (-1)\n#define SQL_INVALID_HANDLE        (-2)\n#define SQL_STILL_EXECUTING        2\n#define SQL_NEED_DATA             99\n#define SQL_SUCCEEDED(rc) (((rc)&(~1))==0)\n\n#define SQL_NTS                   (-3)\n#define SQL_NTSL                  (__MSABI_LONG(-3))\n\n#define SQL_MAX_MESSAGE_LENGTH   512\n\n#if (ODBCVER >= 0x0300)\n#define SQL_DATE_LEN           10\n#define SQL_TIME_LEN            8\n#define SQL_TIMESTAMP_LEN      19\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_HANDLE_ENV             1\n#define SQL_HANDLE_DBC             2\n#define SQL_HANDLE_STMT            3\n#define SQL_HANDLE_DESC            4\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_ATTR_OUTPUT_NTS    10001\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_ATTR_AUTO_IPD      10001\n#define SQL_ATTR_METADATA_ID   10014\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_ATTR_APP_ROW_DESC       10010\n#define SQL_ATTR_APP_PARAM_DESC     10011\n#define SQL_ATTR_IMP_ROW_DESC       10012\n#define SQL_ATTR_IMP_PARAM_DESC     10013\n#define SQL_ATTR_CURSOR_SCROLLABLE  (-1)\n#define SQL_ATTR_CURSOR_SENSITIVITY (-2)\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_NONSCROLLABLE\t\t\t0\n#define SQL_SCROLLABLE\t\t\t\t1\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_DESC_COUNT                  1001\n#define SQL_DESC_TYPE                   1002\n#define SQL_DESC_LENGTH                 1003\n#define SQL_DESC_OCTET_LENGTH_PTR       1004\n#define SQL_DESC_PRECISION              1005\n#define SQL_DESC_SCALE                  1006\n#define SQL_DESC_DATETIME_INTERVAL_CODE 1007\n#define SQL_DESC_NULLABLE               1008\n#define SQL_DESC_INDICATOR_PTR          1009\n#define SQL_DESC_DATA_PTR               1010\n#define SQL_DESC_NAME                   1011\n#define SQL_DESC_UNNAMED                1012\n#define SQL_DESC_OCTET_LENGTH           1013\n#define SQL_DESC_ALLOC_TYPE             1099\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_DIAG_RETURNCODE        1\n#define SQL_DIAG_NUMBER            2\n#define SQL_DIAG_ROW_COUNT         3\n#define SQL_DIAG_SQLSTATE          4\n#define SQL_DIAG_NATIVE            5\n#define SQL_DIAG_MESSAGE_TEXT      6\n#define SQL_DIAG_DYNAMIC_FUNCTION  7\n#define SQL_DIAG_CLASS_ORIGIN      8\n#define SQL_DIAG_SUBCLASS_ORIGIN   9\n#define SQL_DIAG_CONNECTION_NAME  10\n#define SQL_DIAG_SERVER_NAME      11\n#define SQL_DIAG_DYNAMIC_FUNCTION_CODE 12\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_DIAG_ALTER_DOMAIN\t\t\t3\n#define SQL_DIAG_ALTER_TABLE            4\n#define SQL_DIAG_CALL\t\t\t\t\t7\n#define SQL_DIAG_CREATE_ASSERTION\t\t6\n#define SQL_DIAG_CREATE_CHARACTER_SET\t8\n#define SQL_DIAG_CREATE_COLLATION\t\t10\n#define SQL_DIAG_CREATE_DOMAIN\t\t\t23\n#define SQL_DIAG_CREATE_INDEX          (-1)\n#define SQL_DIAG_CREATE_SCHEMA\t\t\t64\n#define SQL_DIAG_CREATE_TABLE          77\n#define SQL_DIAG_CREATE_TRANSLATION\t\t79\n#define SQL_DIAG_CREATE_VIEW           84\n#define SQL_DIAG_DELETE_WHERE          19\n#define\tSQL_DIAG_DROP_ASSERTION\t\t\t24\n#define\tSQL_DIAG_DROP_CHARACTER_SET\t\t25\n#define\tSQL_DIAG_DROP_COLLATION\t\t\t26\n#define\tSQL_DIAG_DROP_DOMAIN\t\t\t27\n#define SQL_DIAG_DROP_INDEX            (-2)\n#define SQL_DIAG_DROP_SCHEMA\t\t\t31\n#define SQL_DIAG_DROP_TABLE            32\n#define SQL_DIAG_DROP_TRANSLATION      33\n#define SQL_DIAG_DROP_VIEW             36\n#define SQL_DIAG_DYNAMIC_DELETE_CURSOR 38\n#define SQL_DIAG_DYNAMIC_UPDATE_CURSOR 81\n#define SQL_DIAG_GRANT                 48\n#define SQL_DIAG_INSERT                50\n#define SQL_DIAG_REVOKE                59\n#define SQL_DIAG_SELECT_CURSOR         85\n#define SQL_DIAG_UNKNOWN_STATEMENT      0\n#define SQL_DIAG_UPDATE_WHERE          82\n#endif\n\n#define\tSQL_UNKNOWN_TYPE\t0\n#define SQL_CHAR            1\n#define SQL_NUMERIC         2\n#define SQL_DECIMAL         3\n#define SQL_INTEGER         4\n#define SQL_SMALLINT        5\n#define SQL_FLOAT           6\n#define SQL_REAL            7\n#define SQL_DOUBLE          8\n#if (ODBCVER >= 0x0300)\n#define SQL_DATETIME        9\n#endif\n#define SQL_VARCHAR        12\n\n#if (ODBCVER >= 0x0300)\n#define SQL_TYPE_DATE      91\n#define SQL_TYPE_TIME      92\n#define SQL_TYPE_TIMESTAMP 93\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_UNSPECIFIED     0\n#define SQL_INSENSITIVE     1\n#define SQL_SENSITIVE       2\n#endif\n\n#define SQL_ALL_TYPES       0\n\n#if (ODBCVER >= 0x0300)\n#define SQL_DEFAULT        99\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_ARD_TYPE      (-99)\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_CODE_DATE       1\n#define SQL_CODE_TIME       2\n#define SQL_CODE_TIMESTAMP  3\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_FALSE           0\n#define SQL_TRUE            1\n#endif\n\n#define SQL_NO_NULLS        0\n#define SQL_NULLABLE        1\n\n#define SQL_NULLABLE_UNKNOWN  2\n\n#if (ODBCVER >= 0x0300)\n#define SQL_PRED_NONE     0\n#define SQL_PRED_CHAR     1\n#define SQL_PRED_BASIC    2\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_NAMED           0\n#define SQL_UNNAMED         1\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_DESC_ALLOC_AUTO 1\n#define SQL_DESC_ALLOC_USER 2\n#endif\n\n#define SQL_CLOSE           0\n#define SQL_DROP            1\n#define SQL_UNBIND          2\n#define SQL_RESET_PARAMS    3\n#define SQL_FETCH_NEXT      1\n#define SQL_FETCH_FIRST     2\n#define SQL_FETCH_LAST      3\n#define SQL_FETCH_PRIOR     4\n#define SQL_FETCH_ABSOLUTE  5\n#define SQL_FETCH_RELATIVE  6\n\n#define SQL_COMMIT          0\n#define SQL_ROLLBACK        1\n\n#define SQL_NULL_HENV       0\n#define SQL_NULL_HDBC       0\n#define SQL_NULL_HSTMT      0\n#if (ODBCVER >= 0x0300)\n#define SQL_NULL_HDESC      0\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_NULL_HANDLE     __MSABI_LONG(0)\n#endif\n\n#define SQL_SCOPE_CURROW    0\n#define SQL_SCOPE_TRANSACTION 1\n#define SQL_SCOPE_SESSION   2\n\n#define SQL_PC_UNKNOWN      0\n#if (ODBCVER >= 0x0300)\n#define SQL_PC_NON_PSEUDO   1\n#endif\n#define SQL_PC_PSEUDO       2\n\n#if (ODBCVER >= 0x0300)\n#define SQL_ROW_IDENTIFIER  1\n#endif\n\n#define SQL_INDEX_UNIQUE    0\n#define SQL_INDEX_ALL       1\n\n#define SQL_INDEX_CLUSTERED 1\n#define SQL_INDEX_HASHED    2\n#define SQL_INDEX_OTHER     3\n\n#define SQL_API_SQLALLOCCONNECT         1\n#define SQL_API_SQLALLOCENV             2\n#if (ODBCVER >= 0x0300)\n#define SQL_API_SQLALLOCHANDLE       1001\n#endif\n#define SQL_API_SQLALLOCSTMT            3\n#define SQL_API_SQLBINDCOL              4\n#if (ODBCVER >= 0x0300)\n#define SQL_API_SQLBINDPARAM         1002\n#endif\n#define SQL_API_SQLCANCEL               5\n#if (ODBCVER >= 0x0300)\n#define SQL_API_SQLCLOSECURSOR       1003\n#define SQL_API_SQLCOLATTRIBUTE         6\n#endif\n#define SQL_API_SQLCOLUMNS             40\n#define SQL_API_SQLCONNECT              7\n#if (ODBCVER >= 0x0300)\n#define SQL_API_SQLCOPYDESC          1004\n#endif\n#define SQL_API_SQLDATASOURCES         57\n#define SQL_API_SQLDESCRIBECOL          8\n#define SQL_API_SQLDISCONNECT           9\n#if (ODBCVER >= 0x0300)\n#define SQL_API_SQLENDTRAN           1005\n#endif\n#define SQL_API_SQLERROR               10\n#define SQL_API_SQLEXECDIRECT          11\n#define SQL_API_SQLEXECUTE             12\n#define SQL_API_SQLFETCH               13\n#if (ODBCVER >= 0x0300)\n#define SQL_API_SQLFETCHSCROLL       1021\n#endif\n#define SQL_API_SQLFREECONNECT         14\n#define SQL_API_SQLFREEENV             15\n#if (ODBCVER >= 0x0300)\n#define SQL_API_SQLFREEHANDLE        1006\n#endif\n#define SQL_API_SQLFREESTMT            16\n#if (ODBCVER >= 0x0300)\n#define SQL_API_SQLGETCONNECTATTR    1007\n#endif\n#define SQL_API_SQLGETCONNECTOPTION    42\n#define SQL_API_SQLGETCURSORNAME       17\n#define SQL_API_SQLGETDATA             43\n#if (ODBCVER >= 0x0300)\n#define SQL_API_SQLGETDESCFIELD      1008\n#define SQL_API_SQLGETDESCREC        1009\n#define SQL_API_SQLGETDIAGFIELD      1010\n#define SQL_API_SQLGETDIAGREC        1011\n#define SQL_API_SQLGETENVATTR        1012\n#endif\n#define SQL_API_SQLGETFUNCTIONS        44\n#define SQL_API_SQLGETINFO             45\n#if (ODBCVER >= 0x0300)\n#define SQL_API_SQLGETSTMTATTR       1014\n#endif\n#define SQL_API_SQLGETSTMTOPTION       46\n#define SQL_API_SQLGETTYPEINFO         47\n#define SQL_API_SQLNUMRESULTCOLS       18\n#define SQL_API_SQLPARAMDATA           48\n#define SQL_API_SQLPREPARE             19\n#define SQL_API_SQLPUTDATA             49\n#define SQL_API_SQLROWCOUNT            20\n#if (ODBCVER >= 0x0300)\n#define SQL_API_SQLSETCONNECTATTR    1016\n#endif\n#define SQL_API_SQLSETCONNECTOPTION    50\n#define SQL_API_SQLSETCURSORNAME       21\n#if (ODBCVER >= 0x0300)\n#define SQL_API_SQLSETDESCFIELD      1017\n#define SQL_API_SQLSETDESCREC        1018\n#define SQL_API_SQLSETENVATTR        1019\n#endif\n#define SQL_API_SQLSETPARAM            22\n#if (ODBCVER >= 0x0300)\n#define SQL_API_SQLSETSTMTATTR       1020\n#endif\n#define SQL_API_SQLSETSTMTOPTION       51\n#define SQL_API_SQLSPECIALCOLUMNS      52\n#define SQL_API_SQLSTATISTICS          53\n#define SQL_API_SQLTABLES              54\n#define SQL_API_SQLTRANSACT            23\n\n#if (ODBCVER >= 0x0300)\n#define SQL_MAX_DRIVER_CONNECTIONS           0\n#define SQL_MAXIMUM_DRIVER_CONNECTIONS\t\tSQL_MAX_DRIVER_CONNECTIONS\n#define SQL_MAX_CONCURRENT_ACTIVITIES        1\n#define SQL_MAXIMUM_CONCURRENT_ACTIVITIES\tSQL_MAX_CONCURRENT_ACTIVITIES\n#endif\n#define SQL_DATA_SOURCE_NAME                 2\n#define SQL_FETCH_DIRECTION                  8\n#define SQL_SERVER_NAME                     13\n#define SQL_SEARCH_PATTERN_ESCAPE           14\n#define SQL_DBMS_NAME                       17\n#define SQL_DBMS_VER                        18\n#define SQL_ACCESSIBLE_TABLES               19\n#define SQL_ACCESSIBLE_PROCEDURES        \t20\n#define SQL_CURSOR_COMMIT_BEHAVIOR          23\n#define SQL_DATA_SOURCE_READ_ONLY           25\n#define SQL_DEFAULT_TXN_ISOLATION           26\n#define SQL_IDENTIFIER_CASE                 28\n#define SQL_IDENTIFIER_QUOTE_CHAR           29\n#define SQL_MAX_COLUMN_NAME_LEN             30\n#define SQL_MAXIMUM_COLUMN_NAME_LENGTH\t\tSQL_MAX_COLUMN_NAME_LEN\n#define SQL_MAX_CURSOR_NAME_LEN             31\n#define SQL_MAXIMUM_CURSOR_NAME_LENGTH\t\tSQL_MAX_CURSOR_NAME_LEN\n#define SQL_MAX_SCHEMA_NAME_LEN             32\n#define SQL_MAXIMUM_SCHEMA_NAME_LENGTH\t\tSQL_MAX_SCHEMA_NAME_LEN\n#define SQL_MAX_CATALOG_NAME_LEN            34\n#define SQL_MAXIMUM_CATALOG_NAME_LENGTH\t\tSQL_MAX_CATALOG_NAME_LEN\n#define SQL_MAX_TABLE_NAME_LEN              35\n#define SQL_SCROLL_CONCURRENCY              43\n#define SQL_TXN_CAPABLE                     46\n#define SQL_TRANSACTION_CAPABLE\t\t\t\tSQL_TXN_CAPABLE\n#define SQL_USER_NAME                       47\n#define SQL_TXN_ISOLATION_OPTION            72\n#define SQL_TRANSACTION_ISOLATION_OPTION\tSQL_TXN_ISOLATION_OPTION\n#define SQL_INTEGRITY                       73\n#define SQL_GETDATA_EXTENSIONS              81\n#define SQL_NULL_COLLATION                  85\n#define SQL_ALTER_TABLE                     86\n#define SQL_ORDER_BY_COLUMNS_IN_SELECT      90\n#define SQL_SPECIAL_CHARACTERS              94\n#define SQL_MAX_COLUMNS_IN_GROUP_BY         97\n#define SQL_MAXIMUM_COLUMNS_IN_GROUP_BY\t\tSQL_MAX_COLUMNS_IN_GROUP_BY\n#define SQL_MAX_COLUMNS_IN_INDEX            98\n#define SQL_MAXIMUM_COLUMNS_IN_INDEX\t\tSQL_MAX_COLUMNS_IN_INDEX\n#define SQL_MAX_COLUMNS_IN_ORDER_BY         99\n#define SQL_MAXIMUM_COLUMNS_IN_ORDER_BY\t\tSQL_MAX_COLUMNS_IN_ORDER_BY\n#define SQL_MAX_COLUMNS_IN_SELECT          100\n#define SQL_MAXIMUM_COLUMNS_IN_SELECT\t   SQL_MAX_COLUMNS_IN_SELECT\n#define SQL_MAX_COLUMNS_IN_TABLE           101\n#define SQL_MAX_INDEX_SIZE                 102\n#define SQL_MAXIMUM_INDEX_SIZE\t\t\t   SQL_MAX_INDEX_SIZE\n#define SQL_MAX_ROW_SIZE                   104\n#define SQL_MAXIMUM_ROW_SIZE\t\t\t   SQL_MAX_ROW_SIZE\n#define SQL_MAX_STATEMENT_LEN              105\n#define SQL_MAXIMUM_STATEMENT_LENGTH\t   SQL_MAX_STATEMENT_LEN\n#define SQL_MAX_TABLES_IN_SELECT           106\n#define SQL_MAXIMUM_TABLES_IN_SELECT\t   SQL_MAX_TABLES_IN_SELECT\n#define SQL_MAX_USER_NAME_LEN              107\n#define SQL_MAXIMUM_USER_NAME_LENGTH\t   SQL_MAX_USER_NAME_LEN\n#if (ODBCVER >= 0x0300)\n#define SQL_OJ_CAPABILITIES                115\n#define SQL_OUTER_JOIN_CAPABILITIES\t\t   SQL_OJ_CAPABILITIES\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_XOPEN_CLI_YEAR               10000\n#define SQL_CURSOR_SENSITIVITY           10001\n#define SQL_DESCRIBE_PARAMETER           10002\n#define SQL_CATALOG_NAME                 10003\n#define SQL_COLLATION_SEQ                10004\n#define SQL_MAX_IDENTIFIER_LEN           10005\n#define SQL_MAXIMUM_IDENTIFIER_LENGTH\t SQL_MAX_IDENTIFIER_LEN\n#endif\n\n#if (ODBCVER >= 0x0200)\n#define SQL_AT_ADD_COLUMN                   __MSABI_LONG(0x00000001)\n#define SQL_AT_DROP_COLUMN                  __MSABI_LONG(0x00000002)\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_AT_ADD_CONSTRAINT               __MSABI_LONG(0x00000008)\n\n#endif  /* ODBCVER >= 0x0300 */\n\n\n#if (ODBCVER >= 0x0300)\n#define SQL_AM_NONE                         0\n#define SQL_AM_CONNECTION                   1\n#define SQL_AM_STATEMENT                    2\n#endif\n\n#define SQL_CB_DELETE                       0\n#define SQL_CB_CLOSE                        1\n#define SQL_CB_PRESERVE                     2\n\n#define SQL_FD_FETCH_NEXT                   __MSABI_LONG(0x00000001)\n#define SQL_FD_FETCH_FIRST                  __MSABI_LONG(0x00000002)\n#define SQL_FD_FETCH_LAST                   __MSABI_LONG(0x00000004)\n#define SQL_FD_FETCH_PRIOR                  __MSABI_LONG(0x00000008)\n#define SQL_FD_FETCH_ABSOLUTE               __MSABI_LONG(0x00000010)\n#define SQL_FD_FETCH_RELATIVE               __MSABI_LONG(0x00000020)\n\n#define SQL_GD_ANY_COLUMN                   __MSABI_LONG(0x00000001)\n#define SQL_GD_ANY_ORDER                    __MSABI_LONG(0x00000002)\n\n#define SQL_IC_UPPER                        1\n#define SQL_IC_LOWER                        2\n#define SQL_IC_SENSITIVE                    3\n#define SQL_IC_MIXED                        4\n\n#if (ODBCVER >= 0x0201)\n#define SQL_OJ_LEFT                         __MSABI_LONG(0x00000001)\n#define SQL_OJ_RIGHT                        __MSABI_LONG(0x00000002)\n#define SQL_OJ_FULL                         __MSABI_LONG(0x00000004)\n#define SQL_OJ_NESTED                       __MSABI_LONG(0x00000008)\n#define SQL_OJ_NOT_ORDERED                  __MSABI_LONG(0x00000010)\n#define SQL_OJ_INNER                        __MSABI_LONG(0x00000020)\n#define SQL_OJ_ALL_COMPARISON_OPS           __MSABI_LONG(0x00000040)\n#endif\n\n#define SQL_SCCO_READ_ONLY                  __MSABI_LONG(0x00000001)\n#define SQL_SCCO_LOCK                       __MSABI_LONG(0x00000002)\n#define SQL_SCCO_OPT_ROWVER                 __MSABI_LONG(0x00000004)\n#define SQL_SCCO_OPT_VALUES                 __MSABI_LONG(0x00000008)\n\n#define SQL_TC_NONE                         0\n#define SQL_TC_DML                          1\n#define SQL_TC_ALL                          2\n#define SQL_TC_DDL_COMMIT                   3\n#define SQL_TC_DDL_IGNORE                   4\n\n#define SQL_TXN_READ_UNCOMMITTED            __MSABI_LONG(0x00000001)\n#define SQL_TRANSACTION_READ_UNCOMMITTED\tSQL_TXN_READ_UNCOMMITTED\n#define SQL_TXN_READ_COMMITTED              __MSABI_LONG(0x00000002)\n#define SQL_TRANSACTION_READ_COMMITTED\t\tSQL_TXN_READ_COMMITTED\n#define SQL_TXN_REPEATABLE_READ             __MSABI_LONG(0x00000004)\n#define SQL_TRANSACTION_REPEATABLE_READ\t\tSQL_TXN_REPEATABLE_READ\n#define SQL_TXN_SERIALIZABLE                __MSABI_LONG(0x00000008)\n#define SQL_TRANSACTION_SERIALIZABLE\t\tSQL_TXN_SERIALIZABLE\n\n#define SQL_NC_HIGH                         0\n#define SQL_NC_LOW                          1\n\nSQLRETURN WINAPI   SQLAllocConnect(SQLHENV EnvironmentHandle,\n           SQLHDBC *ConnectionHandle);\n\nSQLRETURN WINAPI   SQLAllocEnv(SQLHENV *EnvironmentHandle);\n\n#if (ODBCVER >= 0x0300)\nSQLRETURN WINAPI   SQLAllocHandle(SQLSMALLINT HandleType,\n           SQLHANDLE InputHandle, SQLHANDLE *OutputHandle);\n#endif\n\nSQLRETURN WINAPI   SQLAllocStmt(SQLHDBC ConnectionHandle,\n           SQLHSTMT *StatementHandle);\n\nSQLRETURN WINAPI   SQLBindCol(SQLHSTMT StatementHandle,\n\t\t   SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType,\n\t\t   SQLPOINTER TargetValue, SQLLEN BufferLength,\n\t\t   SQLLEN *StrLen_or_Ind);\n\n#if (ODBCVER >= 0x0300)\nSQLRETURN WINAPI   SQLBindParam(SQLHSTMT StatementHandle,\n           SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType,\n           SQLSMALLINT ParameterType, SQLULEN LengthPrecision,\n           SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue,\n           SQLLEN *StrLen_or_Ind);\n#endif\n\nSQLRETURN WINAPI   SQLCancel(SQLHSTMT StatementHandle);\n\n#if (ODBCVER >= 0x0300)\nSQLRETURN WINAPI   SQLCloseCursor(SQLHSTMT StatementHandle);\n\nSQLRETURN WINAPI   SQLColAttribute (SQLHSTMT StatementHandle,\n           SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier,\n           SQLPOINTER CharacterAttribute, SQLSMALLINT BufferLength,\n           SQLSMALLINT *StringLength, SQLLEN *NumericAttribute);\n#endif\n\n\nSQLRETURN WINAPI   SQLColumns(SQLHSTMT StatementHandle,\n           SQLCHAR *CatalogName, SQLSMALLINT NameLength1,\n           SQLCHAR *SchemaName, SQLSMALLINT NameLength2,\n           SQLCHAR *TableName, SQLSMALLINT NameLength3,\n           SQLCHAR *ColumnName, SQLSMALLINT NameLength4);\n\n\nSQLRETURN WINAPI   SQLConnect(SQLHDBC ConnectionHandle,\n           SQLCHAR *ServerName, SQLSMALLINT NameLength1,\n           SQLCHAR *UserName, SQLSMALLINT NameLength2,\n           SQLCHAR *Authentication, SQLSMALLINT NameLength3);\n\n#if (ODBCVER >= 0x0300)\nSQLRETURN WINAPI   SQLCopyDesc(SQLHDESC SourceDescHandle,\n           SQLHDESC TargetDescHandle);\n#endif\n\nSQLRETURN WINAPI   SQLDataSources(SQLHENV EnvironmentHandle,\n           SQLUSMALLINT Direction, SQLCHAR *ServerName,\n           SQLSMALLINT BufferLength1, SQLSMALLINT *NameLength1,\n           SQLCHAR *Description, SQLSMALLINT BufferLength2,\n           SQLSMALLINT *NameLength2);\n\nSQLRETURN WINAPI   SQLDescribeCol(SQLHSTMT StatementHandle,\n           SQLUSMALLINT ColumnNumber, SQLCHAR *ColumnName,\n           SQLSMALLINT BufferLength, SQLSMALLINT *NameLength,\n           SQLSMALLINT *DataType, SQLULEN *ColumnSize,\n           SQLSMALLINT *DecimalDigits, SQLSMALLINT *Nullable);\n\nSQLRETURN WINAPI   SQLDisconnect(SQLHDBC ConnectionHandle);\n\n#if (ODBCVER >= 0x0300)\nSQLRETURN WINAPI   SQLEndTran(SQLSMALLINT HandleType, SQLHANDLE Handle,\n           SQLSMALLINT CompletionType);\n#endif\n\nSQLRETURN WINAPI   SQLError(SQLHENV EnvironmentHandle,\n           SQLHDBC ConnectionHandle, SQLHSTMT StatementHandle,\n           SQLCHAR *Sqlstate, SQLINTEGER *NativeError,\n           SQLCHAR *MessageText, SQLSMALLINT BufferLength,\n           SQLSMALLINT *TextLength);\n\nSQLRETURN WINAPI   SQLExecDirect(SQLHSTMT StatementHandle,\n           SQLCHAR *StatementText, SQLINTEGER TextLength);\n\nSQLRETURN WINAPI   SQLExecute(SQLHSTMT StatementHandle);\n\nSQLRETURN WINAPI   SQLFetch(SQLHSTMT StatementHandle);\n\n#if (ODBCVER >= 0x0300)\nSQLRETURN WINAPI   SQLFetchScroll(SQLHSTMT StatementHandle,\n           SQLSMALLINT FetchOrientation, SQLLEN FetchOffset);\n#endif\n\nSQLRETURN WINAPI   SQLFreeConnect(SQLHDBC ConnectionHandle);\n\nSQLRETURN WINAPI   SQLFreeEnv(SQLHENV EnvironmentHandle);\n\n#if (ODBCVER >= 0x0300)\nSQLRETURN WINAPI   SQLFreeHandle(SQLSMALLINT HandleType, SQLHANDLE Handle);\n#endif\n\nSQLRETURN WINAPI   SQLFreeStmt(SQLHSTMT StatementHandle,\n           SQLUSMALLINT Option);\n\n#if (ODBCVER >= 0x0300)\nSQLRETURN WINAPI   SQLGetConnectAttr(SQLHDBC ConnectionHandle,\n           SQLINTEGER Attribute, SQLPOINTER Value,\n           SQLINTEGER BufferLength, SQLINTEGER *StringLength);\n#endif\n\nSQLRETURN WINAPI   SQLGetConnectOption(SQLHDBC ConnectionHandle,\n           SQLUSMALLINT Option, SQLPOINTER Value);\n\nSQLRETURN WINAPI   SQLGetCursorName(SQLHSTMT StatementHandle,\n           SQLCHAR *CursorName, SQLSMALLINT BufferLength,\n           SQLSMALLINT *NameLength);\n\nSQLRETURN WINAPI   SQLGetData(SQLHSTMT StatementHandle,\n           SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType,\n           SQLPOINTER TargetValue, SQLLEN BufferLength,\n           SQLLEN *StrLen_or_Ind);\n\n#if (ODBCVER >= 0x0300)\nSQLRETURN WINAPI   SQLGetDescField(SQLHDESC DescriptorHandle,\n           SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier,\n           SQLPOINTER Value, SQLINTEGER BufferLength,\n           SQLINTEGER *StringLength);\n\nSQLRETURN WINAPI   SQLGetDescRec(SQLHDESC DescriptorHandle,\n           SQLSMALLINT RecNumber, SQLCHAR *Name,\n           SQLSMALLINT BufferLength, SQLSMALLINT *StringLength,\n           SQLSMALLINT *Type, SQLSMALLINT *SubType,\n           SQLLEN *Length, SQLSMALLINT *Precision,\n           SQLSMALLINT *Scale, SQLSMALLINT *Nullable);\n\nSQLRETURN WINAPI   SQLGetDiagField(SQLSMALLINT HandleType, SQLHANDLE Handle,\n           SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier,\n           SQLPOINTER DiagInfo, SQLSMALLINT BufferLength,\n           SQLSMALLINT *StringLength);\n\nSQLRETURN WINAPI   SQLGetDiagRec(SQLSMALLINT HandleType, SQLHANDLE Handle,\n           SQLSMALLINT RecNumber, SQLCHAR *Sqlstate,\n           SQLINTEGER *NativeError, SQLCHAR *MessageText,\n           SQLSMALLINT BufferLength, SQLSMALLINT *TextLength);\n\nSQLRETURN WINAPI   SQLGetEnvAttr(SQLHENV EnvironmentHandle,\n           SQLINTEGER Attribute, SQLPOINTER Value,\n           SQLINTEGER BufferLength, SQLINTEGER *StringLength);\n#endif\n\nSQLRETURN WINAPI   SQLGetFunctions(SQLHDBC ConnectionHandle,\n           SQLUSMALLINT FunctionId, SQLUSMALLINT *Supported);\n\nSQLRETURN WINAPI   SQLGetInfo(SQLHDBC ConnectionHandle,\n           SQLUSMALLINT InfoType, SQLPOINTER InfoValue,\n           SQLSMALLINT BufferLength, SQLSMALLINT *StringLength);\n\n#if (ODBCVER >= 0x0300)\nSQLRETURN WINAPI   SQLGetStmtAttr(SQLHSTMT StatementHandle,\n           SQLINTEGER Attribute, SQLPOINTER Value,\n           SQLINTEGER BufferLength, SQLINTEGER *StringLength);\n#endif\n\nSQLRETURN WINAPI   SQLGetStmtOption(SQLHSTMT StatementHandle,\n           SQLUSMALLINT Option, SQLPOINTER Value);\n\nSQLRETURN WINAPI   SQLGetTypeInfo(SQLHSTMT StatementHandle,\n           SQLSMALLINT DataType);\n\nSQLRETURN WINAPI   SQLNumResultCols(SQLHSTMT StatementHandle,\n           SQLSMALLINT *ColumnCount);\n\nSQLRETURN WINAPI   SQLParamData(SQLHSTMT StatementHandle,\n           SQLPOINTER *Value);\n\nSQLRETURN WINAPI   SQLPrepare(SQLHSTMT StatementHandle,\n           SQLCHAR *StatementText, SQLINTEGER TextLength);\n\nSQLRETURN WINAPI   SQLPutData(SQLHSTMT StatementHandle,\n           SQLPOINTER Data, SQLLEN StrLen_or_Ind);\n\nSQLRETURN WINAPI   SQLRowCount(SQLHSTMT StatementHandle,\n\t   SQLLEN *RowCount);\n\n#if (ODBCVER >= 0x0300)\nSQLRETURN WINAPI   SQLSetConnectAttr(SQLHDBC ConnectionHandle,\n           SQLINTEGER Attribute, SQLPOINTER Value,\n           SQLINTEGER StringLength);\n#endif\n\nSQLRETURN WINAPI   SQLSetConnectOption(SQLHDBC ConnectionHandle,\n           SQLUSMALLINT Option, SQLULEN Value);\n\nSQLRETURN WINAPI   SQLSetCursorName(SQLHSTMT StatementHandle,\n           SQLCHAR *CursorName, SQLSMALLINT NameLength);\n\n#if (ODBCVER >= 0x0300)\nSQLRETURN WINAPI   SQLSetDescField(SQLHDESC DescriptorHandle,\n           SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier,\n           SQLPOINTER Value, SQLINTEGER BufferLength);\n\nSQLRETURN WINAPI   SQLSetDescRec(SQLHDESC DescriptorHandle,\n           SQLSMALLINT RecNumber, SQLSMALLINT Type,\n           SQLSMALLINT SubType, SQLLEN Length,\n           SQLSMALLINT Precision, SQLSMALLINT Scale,\n           SQLPOINTER Data, SQLLEN *StringLength,\n           SQLLEN *Indicator);\n\nSQLRETURN WINAPI   SQLSetEnvAttr(SQLHENV EnvironmentHandle,\n           SQLINTEGER Attribute, SQLPOINTER Value,\n           SQLINTEGER StringLength);\n#endif\n\nSQLRETURN WINAPI   SQLSetParam(SQLHSTMT StatementHandle,\n           SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType,\n           SQLSMALLINT ParameterType, SQLULEN LengthPrecision,\n           SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue,\n           SQLLEN *StrLen_or_Ind);\n\n#if (ODBCVER >= 0x0300)\nSQLRETURN WINAPI   SQLSetStmtAttr(SQLHSTMT StatementHandle,\n           SQLINTEGER Attribute, SQLPOINTER Value,\n           SQLINTEGER StringLength);\n#endif\n\nSQLRETURN WINAPI   SQLSetStmtOption(SQLHSTMT StatementHandle,\n           SQLUSMALLINT Option, SQLULEN Value);\n\nSQLRETURN WINAPI   SQLSpecialColumns(SQLHSTMT StatementHandle,\n           SQLUSMALLINT IdentifierType, SQLCHAR *CatalogName,\n           SQLSMALLINT NameLength1, SQLCHAR *SchemaName,\n           SQLSMALLINT NameLength2, SQLCHAR *TableName,\n           SQLSMALLINT NameLength3, SQLUSMALLINT Scope,\n           SQLUSMALLINT Nullable);\n\nSQLRETURN WINAPI   SQLStatistics(SQLHSTMT StatementHandle,\n           SQLCHAR *CatalogName, SQLSMALLINT NameLength1,\n           SQLCHAR *SchemaName, SQLSMALLINT NameLength2,\n           SQLCHAR *TableName, SQLSMALLINT NameLength3,\n           SQLUSMALLINT Unique, SQLUSMALLINT Reserved);\n\nSQLRETURN WINAPI   SQLTables(SQLHSTMT StatementHandle,\n           SQLCHAR *CatalogName, SQLSMALLINT NameLength1,\n           SQLCHAR *SchemaName, SQLSMALLINT NameLength2,\n           SQLCHAR *TableName, SQLSMALLINT NameLength3,\n           SQLCHAR *TableType, SQLSMALLINT NameLength4);\n\nSQLRETURN WINAPI   SQLTransact(SQLHENV EnvironmentHandle,\n           SQLHDBC ConnectionHandle, SQLUSMALLINT CompletionType);\n\n#ifdef __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "wine/windows/sqlext.h",
    "content": "/*\n * MS SQL Extension definitions\n *\n * Copyright (C) 1999 Xiang Li\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __SQLEXT_H\n#define __SQLEXT_H\n\n#include <sql.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define SQL_SPEC_MAJOR     3\n#define SQL_SPEC_MINOR\t   51\n#define SQL_SPEC_STRING   \"03.51\"\n\n#define SQL_SQLSTATE_SIZE\t5\n#define SQL_MAX_DSN_LENGTH\t32\n\n#define SQL_MAX_OPTION_STRING_LENGTH    256\n\n#if (ODBCVER < 0x0300)\n#define SQL_NO_DATA_FOUND\t100\n#else\n#define SQL_NO_DATA_FOUND\tSQL_NO_DATA\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define\tSQL_HANDLE_SENV\t\t5\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_ATTR_ODBC_VERSION\t\t\t\t200\n#define SQL_ATTR_CONNECTION_POOLING\t\t\t201\n#define SQL_ATTR_CP_MATCH\t\t\t\t\t202\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_CP_OFF                      __MSABI_LONG(0U)\n#define SQL_CP_ONE_PER_DRIVER           __MSABI_LONG(1U)\n#define SQL_CP_ONE_PER_HENV             __MSABI_LONG(2U)\n#define SQL_CP_DEFAULT\t\t\t\t\t\tSQL_CP_OFF\n\n#define SQL_CP_STRICT_MATCH             __MSABI_LONG(0U)\n#define SQL_CP_RELAXED_MATCH            __MSABI_LONG(1U)\n#define SQL_CP_MATCH_DEFAULT\t\t\t\tSQL_CP_STRICT_MATCH\n\n#define SQL_OV_ODBC2                    __MSABI_LONG(2U)\n#define SQL_OV_ODBC3                    __MSABI_LONG(3U)\n#endif\n\n#define SQL_ACCESS_MODE                 101\n#define SQL_AUTOCOMMIT                  102\n#define SQL_LOGIN_TIMEOUT               103\n#define SQL_OPT_TRACE                   104\n#define SQL_OPT_TRACEFILE               105\n#define SQL_TRANSLATE_DLL               106\n#define SQL_TRANSLATE_OPTION            107\n#define SQL_TXN_ISOLATION               108\n#define SQL_CURRENT_QUALIFIER           109\n#define SQL_ODBC_CURSORS                110\n#define SQL_QUIET_MODE                  111\n#define SQL_PACKET_SIZE                 112\n\n#if (ODBCVER >= 0x0300)\n#define SQL_ATTR_ACCESS_MODE\t\tSQL_ACCESS_MODE\n#define SQL_ATTR_AUTOCOMMIT\t\t\tSQL_AUTOCOMMIT\n#define SQL_ATTR_CONNECTION_TIMEOUT\t113\n#define SQL_ATTR_CURRENT_CATALOG\tSQL_CURRENT_QUALIFIER\n#define SQL_ATTR_DISCONNECT_BEHAVIOR\t114\n#define SQL_ATTR_ENLIST_IN_DTC\t\t1207\n#define SQL_ATTR_ENLIST_IN_XA\t\t1208\n#define SQL_ATTR_LOGIN_TIMEOUT\t\tSQL_LOGIN_TIMEOUT\n#define SQL_ATTR_ODBC_CURSORS\t\tSQL_ODBC_CURSORS\n#define SQL_ATTR_PACKET_SIZE\t\tSQL_PACKET_SIZE\n#define SQL_ATTR_QUIET_MODE\t\t\tSQL_QUIET_MODE\n#define SQL_ATTR_TRACE\t\t\t\tSQL_OPT_TRACE\n#define SQL_ATTR_TRACEFILE\t\t\tSQL_OPT_TRACEFILE\n#define SQL_ATTR_TRANSLATE_LIB\t\tSQL_TRANSLATE_DLL\n#define SQL_ATTR_TRANSLATE_OPTION\tSQL_TRANSLATE_OPTION\n#define SQL_ATTR_TXN_ISOLATION\t\tSQL_TXN_ISOLATION\n#endif\n\n#define SQL_ATTR_CONNECTION_DEAD\t1209\n\n#if (ODBCVER >= 0x0351)\n#define SQL_ATTR_ANSI_APP\t\t\t115\n#endif\n\n#if (ODBCVER < 0x0300)\n#define SQL_CONNECT_OPT_DRVR_START      1000\n#endif\n\n#if (ODBCVER < 0x0300)\n#define SQL_CONN_OPT_MAX                SQL_PACKET_SIZE\n#define SQL_CONN_OPT_MIN                SQL_ACCESS_MODE\n#endif\n\n#define SQL_MODE_READ_WRITE             __MSABI_LONG(0U)\n#define SQL_MODE_READ_ONLY              __MSABI_LONG(1U)\n#define SQL_MODE_DEFAULT                SQL_MODE_READ_WRITE\n\n#define SQL_AUTOCOMMIT_OFF              __MSABI_LONG(0U)\n#define SQL_AUTOCOMMIT_ON               __MSABI_LONG(1U)\n#define SQL_AUTOCOMMIT_DEFAULT          SQL_AUTOCOMMIT_ON\n\n#define SQL_LOGIN_TIMEOUT_DEFAULT       __MSABI_LONG(15U)\n\n#define SQL_OPT_TRACE_OFF               __MSABI_LONG(0U)\n#define SQL_OPT_TRACE_ON                __MSABI_LONG(1U)\n#define SQL_OPT_TRACE_DEFAULT           SQL_OPT_TRACE_OFF\n#define SQL_OPT_TRACE_FILE_DEFAULT      \"\\\\SQL.LOG\"\n\n#define SQL_CUR_USE_IF_NEEDED           __MSABI_LONG(0U)\n#define SQL_CUR_USE_ODBC                __MSABI_LONG(1U)\n#define SQL_CUR_USE_DRIVER              __MSABI_LONG(2U)\n#define SQL_CUR_DEFAULT                 SQL_CUR_USE_DRIVER\n\n#if (ODBCVER >= 0x0300)\n#define SQL_DB_RETURN_TO_POOL           __MSABI_LONG(0U)\n#define SQL_DB_DISCONNECT               __MSABI_LONG(1U)\n#define SQL_DB_DEFAULT\t\t\t\t\tSQL_DB_RETURN_TO_POOL\n\n#define SQL_DTC_DONE                    __MSABI_LONG(0)\n#endif\n\n#define SQL_CD_TRUE                     __MSABI_LONG(1)\n#define SQL_CD_FALSE                    __MSABI_LONG(0)\n\n#if (ODBCVER >= 0x0351)\n#define SQL_AA_TRUE                     __MSABI_LONG(1)\n#define SQL_AA_FALSE                    __MSABI_LONG(0)\n#endif\n\n#define SQL_QUERY_TIMEOUT\t\t0\n#define SQL_MAX_ROWS\t\t\t1\n#define SQL_NOSCAN\t\t\t2\n#define SQL_MAX_LENGTH\t\t\t3\n#define SQL_ASYNC_ENABLE\t\t4\n#define SQL_BIND_TYPE\t\t\t5\n#define SQL_CURSOR_TYPE\t\t\t6\n#define SQL_CONCURRENCY\t\t\t7\n#define SQL_KEYSET_SIZE\t\t\t8\n#define SQL_ROWSET_SIZE\t\t\t9\n#define SQL_SIMULATE_CURSOR\t\t10\n#define SQL_RETRIEVE_DATA\t\t11\n#define SQL_USE_BOOKMARKS\t\t12\n#define SQL_GET_BOOKMARK\t\t13\n#define SQL_ROW_NUMBER\t\t\t14\n\n#if (ODBCVER >= 0x0300)\n#define SQL_ATTR_ASYNC_ENABLE\t\t\t\t4\n#define SQL_ATTR_CONCURRENCY\t\t\t\tSQL_CONCURRENCY\n#define SQL_ATTR_CURSOR_TYPE\t\t\t\tSQL_CURSOR_TYPE\n#define\tSQL_ATTR_ENABLE_AUTO_IPD\t\t\t15\n#define SQL_ATTR_FETCH_BOOKMARK_PTR\t\t\t16\n#define SQL_ATTR_KEYSET_SIZE\t\t\t\tSQL_KEYSET_SIZE\n#define SQL_ATTR_MAX_LENGTH\t\t\t\tSQL_MAX_LENGTH\n#define SQL_ATTR_MAX_ROWS\t\t\t\tSQL_MAX_ROWS\n#define SQL_ATTR_NOSCAN\t\t\t\t\tSQL_NOSCAN\n#define SQL_ATTR_PARAM_BIND_OFFSET_PTR\t\t\t17\n#define\tSQL_ATTR_PARAM_BIND_TYPE\t\t\t18\n#define SQL_ATTR_PARAM_OPERATION_PTR\t\t\t19\n#define SQL_ATTR_PARAM_STATUS_PTR\t\t\t20\n#define\tSQL_ATTR_PARAMS_PROCESSED_PTR\t\t\t21\n#define SQL_ATTR_RETRIEVE_DATA\t\t\t\tSQL_RETRIEVE_DATA\n#define SQL_ATTR_ROW_BIND_OFFSET_PTR\t\t\t23\n#define\tSQL_ATTR_ROW_BIND_TYPE\t\t\t\tSQL_BIND_TYPE\n#define SQL_ATTR_ROW_NUMBER\t\t\t\tSQL_ROW_NUMBER\n#define SQL_ATTR_ROW_OPERATION_PTR\t\t\t24\n#define\tSQL_ATTR_ROW_STATUS_PTR\t\t\t\t25\n#define\tSQL_ATTR_ROWS_FETCHED_PTR\t\t\t26\n#define SQL_ATTR_ROW_ARRAY_SIZE\t\t\t\t27\n#define SQL_ATTR_SIMULATE_CURSOR\t\t\tSQL_SIMULATE_CURSOR\n#define SQL_ATTR_USE_BOOKMARKS\t\t\t\tSQL_USE_BOOKMARKS\n\n#endif\n\n#if (ODBCVER < 0x0300)\n#define SQL_STMT_OPT_MAX                SQL_ROW_NUMBER\n#define SQL_STMT_OPT_MIN\tSQL_QUERY_TIMEOUT\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define\tSQL_COL_PRED_CHAR\t\tSQL_LIKE_ONLY\n#define\tSQL_COL_PRED_BASIC\t\tSQL_ALL_EXCEPT_LIKE\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_IS_POINTER\t\t\t\t\t\t\t(-4)\n#define SQL_IS_UINTEGER\t\t\t\t\t\t\t(-5)\n#define SQL_IS_INTEGER\t\t\t\t\t\t\t(-6)\n#define SQL_IS_USMALLINT\t\t\t\t\t\t(-7)\n#define SQL_IS_SMALLINT\t\t\t\t\t\t\t(-8)\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_PARAM_BIND_BY_COLUMN        __MSABI_LONG(0U)\n#define SQL_PARAM_BIND_TYPE_DEFAULT\t\t\tSQL_PARAM_BIND_BY_COLUMN\n#endif\n\n#define SQL_QUERY_TIMEOUT_DEFAULT       __MSABI_LONG(0U)\n\n#define SQL_MAX_ROWS_DEFAULT            __MSABI_LONG(0U)\n\n#define SQL_NOSCAN_OFF                  __MSABI_LONG(0U)\n#define SQL_NOSCAN_ON                   __MSABI_LONG(1U)\n#define SQL_NOSCAN_DEFAULT              SQL_NOSCAN_OFF\n\n#define SQL_MAX_LENGTH_DEFAULT          __MSABI_LONG(0U)\n\n#define SQL_ASYNC_ENABLE_OFF            __MSABI_LONG(0U)\n#define SQL_ASYNC_ENABLE_ON             __MSABI_LONG(1U)\n#define SQL_ASYNC_ENABLE_DEFAULT        SQL_ASYNC_ENABLE_OFF\n\n#define SQL_BIND_BY_COLUMN              __MSABI_LONG(0U)\n#define SQL_BIND_TYPE_DEFAULT           SQL_BIND_BY_COLUMN\n\n#define SQL_CONCUR_READ_ONLY            1\n#define SQL_CONCUR_LOCK                 2\n#define SQL_CONCUR_ROWVER               3\n#define SQL_CONCUR_VALUES               4\n#define SQL_CONCUR_DEFAULT              SQL_CONCUR_READ_ONLY\n\n#define SQL_CURSOR_FORWARD_ONLY         __MSABI_LONG(0U)\n#define SQL_CURSOR_KEYSET_DRIVEN        __MSABI_LONG(1U)\n#define SQL_CURSOR_DYNAMIC              __MSABI_LONG(2U)\n#define SQL_CURSOR_STATIC               __MSABI_LONG(3U)\n#define SQL_CURSOR_TYPE_DEFAULT         SQL_CURSOR_FORWARD_ONLY\n\n#define SQL_ROWSET_SIZE_DEFAULT         __MSABI_LONG(1U)\n\n#define SQL_KEYSET_SIZE_DEFAULT         __MSABI_LONG(0U)\n\n#define SQL_SC_NON_UNIQUE               __MSABI_LONG(0U)\n#define SQL_SC_TRY_UNIQUE               __MSABI_LONG(1U)\n#define SQL_SC_UNIQUE                   __MSABI_LONG(2U)\n\n#define SQL_RD_OFF                      __MSABI_LONG(0U)\n#define SQL_RD_ON                       __MSABI_LONG(1U)\n#define SQL_RD_DEFAULT                  SQL_RD_ON\n\n#define SQL_UB_OFF                      __MSABI_LONG(0U)\n#define SQL_UB_ON                       __MSABI_LONG(1U)\n#define SQL_UB_DEFAULT                  SQL_UB_OFF\n\n#if (ODBCVER >= 0x0300)\n#define SQL_UB_FIXED\t\t\t\t\tSQL_UB_ON\n#define SQL_UB_VARIABLE                 __MSABI_LONG(2U)\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_DESC_ARRAY_SIZE\t\t\t\t\t20\n#define SQL_DESC_ARRAY_STATUS_PTR\t\t\t\t21\n#define SQL_DESC_AUTO_UNIQUE_VALUE\t\t\t\tSQL_COLUMN_AUTO_INCREMENT\n#define SQL_DESC_BASE_COLUMN_NAME\t\t\t\t22\n#define SQL_DESC_BASE_TABLE_NAME\t\t\t\t23\n#define SQL_DESC_BIND_OFFSET_PTR\t\t\t\t24\n#define SQL_DESC_BIND_TYPE\t\t\t\t\t25\n#define SQL_DESC_CASE_SENSITIVE\t\t\t\t\tSQL_COLUMN_CASE_SENSITIVE\n#define SQL_DESC_CATALOG_NAME\t\t\t\t\tSQL_COLUMN_QUALIFIER_NAME\n#define SQL_DESC_CONCISE_TYPE\t\t\t\t\tSQL_COLUMN_TYPE\n#define SQL_DESC_DATETIME_INTERVAL_PRECISION\t\t\t26\n#define SQL_DESC_DISPLAY_SIZE\t\t\t\t\tSQL_COLUMN_DISPLAY_SIZE\n#define SQL_DESC_FIXED_PREC_SCALE\t\t\t\tSQL_COLUMN_MONEY\n#define SQL_DESC_LABEL\t\t\t\t\t\tSQL_COLUMN_LABEL\n#define SQL_DESC_LITERAL_PREFIX\t\t\t\t\t27\n#define SQL_DESC_LITERAL_SUFFIX\t\t\t\t\t28\n#define SQL_DESC_LOCAL_TYPE_NAME\t\t\t\t29\n#define\tSQL_DESC_MAXIMUM_SCALE\t\t\t\t\t30\n#define SQL_DESC_MINIMUM_SCALE\t\t\t\t\t31\n#define SQL_DESC_NUM_PREC_RADIX\t\t\t\t\t32\n#define SQL_DESC_PARAMETER_TYPE\t\t\t\t\t33\n#define SQL_DESC_ROWS_PROCESSED_PTR\t\t\t\t34\n#if (ODBCVER >= 0x0350)\n#define SQL_DESC_ROWVER\t\t\t\t\t\t35\n#endif\n#define SQL_DESC_SCHEMA_NAME\t\t\t\t\tSQL_COLUMN_OWNER_NAME\n#define SQL_DESC_SEARCHABLE\t\t\t\t\tSQL_COLUMN_SEARCHABLE\n#define SQL_DESC_TYPE_NAME\t\t\t\t\tSQL_COLUMN_TYPE_NAME\n#define SQL_DESC_TABLE_NAME\t\t\t\t\tSQL_COLUMN_TABLE_NAME\n#define SQL_DESC_UNSIGNED\t\t\t\t\tSQL_COLUMN_UNSIGNED\n#define SQL_DESC_UPDATABLE\t\t\t\t\tSQL_COLUMN_UPDATABLE\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_DIAG_CURSOR_ROW_COUNT\t\t\t(-1249)\n#define SQL_DIAG_ROW_NUMBER\t\t\t\t(-1248)\n#define SQL_DIAG_COLUMN_NUMBER\t\t\t\t(-1247)\n#endif\n\n#define SQL_DATE                                9\n#if (ODBCVER >= 0x0300)\n#define SQL_INTERVAL\t\t\t\t10\n#endif\n#define SQL_TIME                                10\n#define SQL_TIMESTAMP                           11\n#define SQL_LONGVARCHAR                         (-1)\n#define SQL_BINARY                              (-2)\n#define SQL_VARBINARY                           (-3)\n#define SQL_LONGVARBINARY                       (-4)\n#define SQL_BIGINT                              (-5)\n#define SQL_TINYINT                             (-6)\n#define SQL_BIT                                 (-7)\n#if (ODBCVER >= 0x0350)\n#define SQL_GUID\t\t\t\t(-11)\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_CODE_YEAR\t\t\t\t1\n#define SQL_CODE_MONTH\t\t\t\t2\n#define SQL_CODE_DAY\t\t\t\t3\n#define SQL_CODE_HOUR\t\t\t\t4\n#define SQL_CODE_MINUTE\t\t\t\t5\n#define SQL_CODE_SECOND\t\t\t\t6\n#define SQL_CODE_YEAR_TO_MONTH\t\t\t7\n#define SQL_CODE_DAY_TO_HOUR\t\t\t8\n#define SQL_CODE_DAY_TO_MINUTE\t\t\t9\n#define SQL_CODE_DAY_TO_SECOND\t\t\t10\n#define SQL_CODE_HOUR_TO_MINUTE\t\t\t11\n#define SQL_CODE_HOUR_TO_SECOND\t\t\t12\n#define SQL_CODE_MINUTE_TO_SECOND\t\t13\n\n#define SQL_INTERVAL_YEAR\t\t\t(100 + SQL_CODE_YEAR)\n#define SQL_INTERVAL_MONTH\t\t\t(100 + SQL_CODE_MONTH)\n#define SQL_INTERVAL_DAY\t\t\t(100 + SQL_CODE_DAY)\n#define SQL_INTERVAL_HOUR\t\t\t(100 + SQL_CODE_HOUR)\n#define SQL_INTERVAL_MINUTE\t\t\t(100 + SQL_CODE_MINUTE)\n#define SQL_INTERVAL_SECOND                \t(100 + SQL_CODE_SECOND)\n#define SQL_INTERVAL_YEAR_TO_MONTH\t\t(100 + SQL_CODE_YEAR_TO_MONTH)\n#define SQL_INTERVAL_DAY_TO_HOUR\t\t(100 + SQL_CODE_DAY_TO_HOUR)\n#define SQL_INTERVAL_DAY_TO_MINUTE\t\t(100 + SQL_CODE_DAY_TO_MINUTE)\n#define SQL_INTERVAL_DAY_TO_SECOND\t\t(100 + SQL_CODE_DAY_TO_SECOND)\n#define SQL_INTERVAL_HOUR_TO_MINUTE\t\t(100 + SQL_CODE_HOUR_TO_MINUTE)\n#define SQL_INTERVAL_HOUR_TO_SECOND\t\t(100 + SQL_CODE_HOUR_TO_SECOND)\n#define SQL_INTERVAL_MINUTE_TO_SECOND\t\t(100 + SQL_CODE_MINUTE_TO_SECOND)\n\n#else\n#define SQL_INTERVAL_YEAR                       (-80)\n#define SQL_INTERVAL_MONTH                      (-81)\n#define SQL_INTERVAL_YEAR_TO_MONTH              (-82)\n#define SQL_INTERVAL_DAY                        (-83)\n#define SQL_INTERVAL_HOUR                       (-84)\n#define SQL_INTERVAL_MINUTE                     (-85)\n#define SQL_INTERVAL_SECOND                     (-86)\n#define SQL_INTERVAL_DAY_TO_HOUR                (-87)\n#define SQL_INTERVAL_DAY_TO_MINUTE              (-88)\n#define SQL_INTERVAL_DAY_TO_SECOND              (-89)\n#define SQL_INTERVAL_HOUR_TO_MINUTE             (-90)\n#define SQL_INTERVAL_HOUR_TO_SECOND             (-91)\n#define SQL_INTERVAL_MINUTE_TO_SECOND           (-92)\n#endif\n\n\n#if (ODBCVER <= 0x0300)\n#define SQL_UNICODE                             (-95)\n#define SQL_UNICODE_VARCHAR                     (-96)\n#define SQL_UNICODE_LONGVARCHAR                 (-97)\n#define SQL_UNICODE_CHAR                        SQL_UNICODE\n#else\n\n#define\tSQL_UNICODE\t\t\tSQL_WCHAR\n#define\tSQL_UNICODE_VARCHAR\t\tSQL_WVARCHAR\n#define SQL_UNICODE_LONGVARCHAR\tSQL_WLONGVARCHAR\n#define SQL_UNICODE_CHAR\t\tSQL_WCHAR\n#endif\n\n#if (ODBCVER < 0x0300)\n#define SQL_TYPE_DRIVER_START                   SQL_INTERVAL_YEAR\n#define SQL_TYPE_DRIVER_END                     SQL_UNICODE_LONGVARCHAR\n#endif\n\n#define SQL_C_CHAR    SQL_CHAR\n#define SQL_C_LONG    SQL_INTEGER\n#define SQL_C_SHORT   SQL_SMALLINT\n#define SQL_C_FLOAT   SQL_REAL\n#define SQL_C_DOUBLE  SQL_DOUBLE\n#if (ODBCVER >= 0x0300)\n#define\tSQL_C_NUMERIC\t\tSQL_NUMERIC\n#endif\n#define SQL_C_DEFAULT 99\n\n#define SQL_SIGNED_OFFSET       (-20)\n#define SQL_UNSIGNED_OFFSET     (-22)\n\n#define SQL_C_DATE       SQL_DATE\n#define SQL_C_TIME       SQL_TIME\n#define SQL_C_TIMESTAMP  SQL_TIMESTAMP\n#if (ODBCVER >= 0x0300)\n#define SQL_C_TYPE_DATE\t\t\t\tSQL_TYPE_DATE\n#define SQL_C_TYPE_TIME\t\t\t\tSQL_TYPE_TIME\n#define SQL_C_TYPE_TIMESTAMP\t\t\tSQL_TYPE_TIMESTAMP\n#define SQL_C_INTERVAL_YEAR\t\t\tSQL_INTERVAL_YEAR\n#define SQL_C_INTERVAL_MONTH\t\t\tSQL_INTERVAL_MONTH\n#define SQL_C_INTERVAL_DAY\t\t\tSQL_INTERVAL_DAY\n#define SQL_C_INTERVAL_HOUR\t\t\tSQL_INTERVAL_HOUR\n#define SQL_C_INTERVAL_MINUTE\t\t\tSQL_INTERVAL_MINUTE\n#define SQL_C_INTERVAL_SECOND\t\t\tSQL_INTERVAL_SECOND\n#define SQL_C_INTERVAL_YEAR_TO_MONTH\t\tSQL_INTERVAL_YEAR_TO_MONTH\n#define SQL_C_INTERVAL_DAY_TO_HOUR\t\tSQL_INTERVAL_DAY_TO_HOUR\n#define SQL_C_INTERVAL_DAY_TO_MINUTE\t\tSQL_INTERVAL_DAY_TO_MINUTE\n#define SQL_C_INTERVAL_DAY_TO_SECOND\t\tSQL_INTERVAL_DAY_TO_SECOND\n#define SQL_C_INTERVAL_HOUR_TO_MINUTE\t\tSQL_INTERVAL_HOUR_TO_MINUTE\n#define SQL_C_INTERVAL_HOUR_TO_SECOND\t\tSQL_INTERVAL_HOUR_TO_SECOND\n#define SQL_C_INTERVAL_MINUTE_TO_SECOND\t\tSQL_INTERVAL_MINUTE_TO_SECOND\n#endif\n#define SQL_C_BINARY     SQL_BINARY\n#define SQL_C_BIT        SQL_BIT\n#if (ODBCVER >= 0x0300)\n#define SQL_C_SBIGINT\t(SQL_BIGINT+SQL_SIGNED_OFFSET)\n#define SQL_C_UBIGINT\t(SQL_BIGINT+SQL_UNSIGNED_OFFSET)\n#endif\n#define SQL_C_TINYINT    SQL_TINYINT\n#define SQL_C_SLONG      (SQL_C_LONG+SQL_SIGNED_OFFSET)\n#define SQL_C_SSHORT     (SQL_C_SHORT+SQL_SIGNED_OFFSET)\n#define SQL_C_STINYINT   (SQL_TINYINT+SQL_SIGNED_OFFSET)\n#define SQL_C_ULONG      (SQL_C_LONG+SQL_UNSIGNED_OFFSET)\n#define SQL_C_USHORT     (SQL_C_SHORT+SQL_UNSIGNED_OFFSET)\n#define SQL_C_UTINYINT   (SQL_TINYINT+SQL_UNSIGNED_OFFSET)\n#define SQL_C_BOOKMARK   SQL_C_ULONG\n\n#if (ODBCVER >= 0x0350)\n#define SQL_C_GUID\tSQL_GUID\n#endif\n\n#define SQL_TYPE_NULL                   0\n#if (ODBCVER < 0x0300)\n#define SQL_TYPE_MIN                    SQL_BIT\n#define SQL_TYPE_MAX                    SQL_VARCHAR\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_C_VARBOOKMARK\t\tSQL_C_BINARY\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_NO_ROW_NUMBER\t\t\t\t\t(-1)\n#define SQL_NO_COLUMN_NUMBER\t\t\t\t\t(-1)\n#define SQL_ROW_NUMBER_UNKNOWN\t\t\t\t\t(-2)\n#define SQL_COLUMN_NUMBER_UNKNOWN\t\t\t\t(-2)\n#endif\n\n#define SQL_DEFAULT_PARAM            (-5)\n#define SQL_IGNORE                   (-6)\n#if (ODBCVER >= 0x0300)\n#define SQL_COLUMN_IGNORE\t\tSQL_IGNORE\n#endif\n#define SQL_LEN_DATA_AT_EXEC_OFFSET  (-100)\n#define SQL_LEN_DATA_AT_EXEC(length) (-(length)+SQL_LEN_DATA_AT_EXEC_OFFSET)\n\n#define SQL_LEN_BINARY_ATTR_OFFSET\t (-100)\n#define SQL_LEN_BINARY_ATTR(length)\t (-(length)+SQL_LEN_BINARY_ATTR_OFFSET)\n\n#define SQL_PARAM_TYPE_DEFAULT           SQL_PARAM_INPUT_OUTPUT\n#define SQL_SETPARAM_VALUE_MAX           (__MSABI_LONG(-1))\n\n#define SQL_COLUMN_COUNT                0\n#define SQL_COLUMN_NAME                 1\n#define SQL_COLUMN_TYPE                 2\n#define SQL_COLUMN_LENGTH               3\n#define SQL_COLUMN_PRECISION            4\n#define SQL_COLUMN_SCALE                5\n#define SQL_COLUMN_DISPLAY_SIZE         6\n#define SQL_COLUMN_NULLABLE             7\n#define SQL_COLUMN_UNSIGNED             8\n#define SQL_COLUMN_MONEY                9\n#define SQL_COLUMN_UPDATABLE            10\n#define SQL_COLUMN_AUTO_INCREMENT       11\n#define SQL_COLUMN_CASE_SENSITIVE       12\n#define SQL_COLUMN_SEARCHABLE           13\n#define SQL_COLUMN_TYPE_NAME            14\n#define SQL_COLUMN_TABLE_NAME           15\n#define SQL_COLUMN_OWNER_NAME           16\n#define SQL_COLUMN_QUALIFIER_NAME       17\n#define SQL_COLUMN_LABEL                18\n#define SQL_COLATT_OPT_MAX              SQL_COLUMN_LABEL\n#if (ODBCVER < 0x0300)\n#define SQL_COLUMN_DRIVER_START         1000\n#endif\n\n#define SQL_COLATT_OPT_MIN              SQL_COLUMN_COUNT\n\n#define SQL_ATTR_READONLY               0\n#define SQL_ATTR_WRITE                  1\n#define SQL_ATTR_READWRITE_UNKNOWN      2\n\n#define SQL_UNSEARCHABLE                0\n#define SQL_LIKE_ONLY                   1\n#define SQL_ALL_EXCEPT_LIKE             2\n#define SQL_SEARCHABLE                  3\n#define SQL_PRED_SEARCHABLE\t\t\t\tSQL_SEARCHABLE\n\n\n#define SQL_NO_TOTAL                    (-4)\n\n#if (ODBCVER >= 0x0300)\n#define SQL_API_SQLALLOCHANDLESTD\t73\n#define SQL_API_SQLBULKOPERATIONS\t24\n#endif\n#define SQL_API_SQLBINDPARAMETER    72\n#define SQL_API_SQLBROWSECONNECT    55\n#define SQL_API_SQLCOLATTRIBUTES    6\n#define SQL_API_SQLCOLUMNPRIVILEGES 56\n#define SQL_API_SQLDESCRIBEPARAM    58\n#define\tSQL_API_SQLDRIVERCONNECT\t41\n#define SQL_API_SQLDRIVERS          71\n#define SQL_API_SQLEXTENDEDFETCH    59\n#define SQL_API_SQLFOREIGNKEYS      60\n#define SQL_API_SQLMORERESULTS      61\n#define SQL_API_SQLNATIVESQL        62\n#define SQL_API_SQLNUMPARAMS        63\n#define SQL_API_SQLPARAMOPTIONS     64\n#define SQL_API_SQLPRIMARYKEYS      65\n#define SQL_API_SQLPROCEDURECOLUMNS 66\n#define SQL_API_SQLPROCEDURES       67\n#define SQL_API_SQLSETPOS           68\n#define SQL_API_SQLSETSCROLLOPTIONS 69\n#define SQL_API_SQLTABLEPRIVILEGES  70\n\n#if (ODBCVER < 0x0300)\n#define SQL_EXT_API_LAST            SQL_API_SQLBINDPARAMETER\n#define SQL_NUM_FUNCTIONS           23\n#define SQL_EXT_API_START           40\n#define SQL_NUM_EXTENSIONS (SQL_EXT_API_LAST-SQL_EXT_API_START+1)\n#endif\n\n#define SQL_API_ALL_FUNCTIONS       0\n\n#define SQL_API_LOADBYORDINAL       199\n\n#if (ODBCVER >= 0x0300)\n#define SQL_API_ODBC3_ALL_FUNCTIONS\t\t999\n#define\tSQL_API_ODBC3_ALL_FUNCTIONS_SIZE\t250\n\n\n#define SQL_FUNC_EXISTS(pfExists, uwAPI) ((*(((UWORD*) (pfExists)) + ((uwAPI) >> 4)) & (1 << ((uwAPI) & 0x000F)) ) ? SQL_TRUE : SQL_FALSE )\n\n#endif\n\n#define SQL_INFO_FIRST                       0\n#define SQL_ACTIVE_CONNECTIONS               0\n#define SQL_ACTIVE_STATEMENTS                1\n#define SQL_DRIVER_HDBC                      3\n#define SQL_DRIVER_HENV                      4\n#define SQL_DRIVER_HSTMT                     5\n#define SQL_DRIVER_NAME                      6\n#define SQL_DRIVER_VER                       7\n#define SQL_ODBC_API_CONFORMANCE             9\n#define SQL_ODBC_VER                        10\n#define SQL_ROW_UPDATES                     11\n#define SQL_ODBC_SAG_CLI_CONFORMANCE        12\n#define SQL_ODBC_SQL_CONFORMANCE            15\n#define SQL_PROCEDURES                      21\n#define SQL_CONCAT_NULL_BEHAVIOR            22\n#define SQL_CURSOR_ROLLBACK_BEHAVIOR        24\n#define SQL_EXPRESSIONS_IN_ORDERBY          27\n#define SQL_MAX_OWNER_NAME_LEN              32\n#define SQL_MAX_PROCEDURE_NAME_LEN          33\n#define SQL_MAX_QUALIFIER_NAME_LEN          34\n#define SQL_MULT_RESULT_SETS                36\n#define SQL_MULTIPLE_ACTIVE_TXN             37\n#define SQL_OUTER_JOINS                     38\n#define SQL_OWNER_TERM                      39\n#define SQL_PROCEDURE_TERM                  40\n#define SQL_QUALIFIER_NAME_SEPARATOR        41\n#define SQL_QUALIFIER_TERM                  42\n#define SQL_SCROLL_OPTIONS                  44\n#define SQL_TABLE_TERM                      45\n#define SQL_CONVERT_FUNCTIONS               48\n#define SQL_NUMERIC_FUNCTIONS               49\n#define SQL_STRING_FUNCTIONS                50\n#define SQL_SYSTEM_FUNCTIONS                51\n#define SQL_TIMEDATE_FUNCTIONS              52\n#define SQL_CONVERT_BIGINT                  53\n#define SQL_CONVERT_BINARY                  54\n#define SQL_CONVERT_BIT                     55\n#define SQL_CONVERT_CHAR                    56\n#define SQL_CONVERT_DATE                    57\n#define SQL_CONVERT_DECIMAL                 58\n#define SQL_CONVERT_DOUBLE                  59\n#define SQL_CONVERT_FLOAT                   60\n#define SQL_CONVERT_INTEGER                 61\n#define SQL_CONVERT_LONGVARCHAR             62\n#define SQL_CONVERT_NUMERIC                 63\n#define SQL_CONVERT_REAL                    64\n#define SQL_CONVERT_SMALLINT                65\n#define SQL_CONVERT_TIME                    66\n#define SQL_CONVERT_TIMESTAMP               67\n#define SQL_CONVERT_TINYINT                 68\n#define SQL_CONVERT_VARBINARY               69\n#define SQL_CONVERT_VARCHAR                 70\n#define SQL_CONVERT_LONGVARBINARY           71\n#define SQL_ODBC_SQL_OPT_IEF                73\n#define SQL_CORRELATION_NAME                74\n#define SQL_NON_NULLABLE_COLUMNS            75\n#define SQL_DRIVER_HLIB                     76\n#define SQL_DRIVER_ODBC_VER                 77\n#define SQL_LOCK_TYPES                      78\n#define SQL_POS_OPERATIONS                  79\n#define SQL_POSITIONED_STATEMENTS           80\n#define SQL_BOOKMARK_PERSISTENCE            82\n#define SQL_STATIC_SENSITIVITY              83\n#define SQL_FILE_USAGE                      84\n#define SQL_COLUMN_ALIAS                    87\n#define SQL_GROUP_BY                        88\n#define SQL_KEYWORDS                        89\n#define SQL_OWNER_USAGE                     91\n#define SQL_QUALIFIER_USAGE                 92\n#define SQL_QUOTED_IDENTIFIER_CASE          93\n#define SQL_SUBQUERIES                      95\n#define SQL_UNION                           96\n#define SQL_MAX_ROW_SIZE_INCLUDES_LONG      103\n#define SQL_MAX_CHAR_LITERAL_LEN            108\n#define SQL_TIMEDATE_ADD_INTERVALS          109\n#define SQL_TIMEDATE_DIFF_INTERVALS         110\n#define SQL_NEED_LONG_DATA_LEN              111\n#define SQL_MAX_BINARY_LITERAL_LEN          112\n#define SQL_LIKE_ESCAPE_CLAUSE              113\n#define SQL_QUALIFIER_LOCATION              114\n\n#if (ODBCVER >= 0x0201 && ODBCVER < 0x0300)\n#define SQL_OJ_CAPABILITIES         65003\n#endif\n\n#if (ODBCVER < 0x0300)\n#define SQL_INFO_LAST\t\t\t\t\t\t\tSQL_QUALIFIER_LOCATION\n#define SQL_INFO_DRIVER_START\t\t\t\t\t\t1000\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_ACTIVE_ENVIRONMENTS\t\t\t\t\t\t116\n#define\tSQL_ALTER_DOMAIN\t\t\t\t\t\t117\n\n#define\tSQL_SQL_CONFORMANCE\t\t\t\t\t\t118\n#define SQL_DATETIME_LITERALS\t\t\t\t\t\t119\n\n#define\tSQL_ASYNC_MODE\t\t\t\t\t\t\t10021\n#define SQL_BATCH_ROW_COUNT\t\t\t\t\t\t120\n#define SQL_BATCH_SUPPORT\t\t\t\t\t\t121\n#define SQL_CATALOG_LOCATION\t\t\t\t\t\tSQL_QUALIFIER_LOCATION\n#define SQL_CATALOG_NAME_SEPARATOR\t\t\t\t\tSQL_QUALIFIER_NAME_SEPARATOR\n#define SQL_CATALOG_TERM\t\t\t\t\t\tSQL_QUALIFIER_TERM\n#define SQL_CATALOG_USAGE\t\t\t\t\t\tSQL_QUALIFIER_USAGE\n#define\tSQL_CONVERT_WCHAR\t\t\t\t\t\t122\n#define SQL_CONVERT_INTERVAL_DAY_TIME\t\t\t\t\t123\n#define SQL_CONVERT_INTERVAL_YEAR_MONTH\t\t\t\t\t124\n#define\tSQL_CONVERT_WLONGVARCHAR\t\t\t\t\t125\n#define\tSQL_CONVERT_WVARCHAR\t\t\t\t\t\t126\n#define\tSQL_CREATE_ASSERTION\t\t\t\t\t\t127\n#define\tSQL_CREATE_CHARACTER_SET\t\t\t\t\t128\n#define\tSQL_CREATE_COLLATION\t\t\t\t\t\t129\n#define\tSQL_CREATE_DOMAIN\t\t\t\t\t\t130\n#define\tSQL_CREATE_SCHEMA\t\t\t\t\t\t131\n#define\tSQL_CREATE_TABLE\t\t\t\t\t\t132\n#define\tSQL_CREATE_TRANSLATION\t\t\t\t\t\t133\n#define\tSQL_CREATE_VIEW\t\t\t\t\t\t\t134\n#define SQL_DRIVER_HDESC\t\t\t\t\t\t135\n#define\tSQL_DROP_ASSERTION\t\t\t\t\t\t136\n#define\tSQL_DROP_CHARACTER_SET\t\t\t\t\t\t137\n#define\tSQL_DROP_COLLATION\t\t\t\t\t\t138\n#define\tSQL_DROP_DOMAIN\t\t\t\t\t\t\t139\n#define\tSQL_DROP_SCHEMA\t\t\t\t\t\t\t140\n#define\tSQL_DROP_TABLE\t\t\t\t\t\t\t141\n#define\tSQL_DROP_TRANSLATION\t\t\t\t\t\t142\n#define\tSQL_DROP_VIEW\t\t\t\t\t\t\t143\n#define SQL_DYNAMIC_CURSOR_ATTRIBUTES1\t\t\t144\n#define SQL_DYNAMIC_CURSOR_ATTRIBUTES2\t\t\t145\n#define SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1\t\t146\n#define SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2\t\t147\n#define SQL_INDEX_KEYWORDS\t\t\t\t148\n#define SQL_INFO_SCHEMA_VIEWS\t\t\t\t149\n#define SQL_KEYSET_CURSOR_ATTRIBUTES1\t\t\t150\n#define SQL_KEYSET_CURSOR_ATTRIBUTES2\t\t\t151\n#define\tSQL_MAX_ASYNC_CONCURRENT_STATEMENTS\t\t10022\n#define SQL_ODBC_INTERFACE_CONFORMANCE\t\t\t152\n#define SQL_PARAM_ARRAY_ROW_COUNTS     \t\t\t153\n#define SQL_PARAM_ARRAY_SELECTS     \t\t\t154\n#define SQL_SCHEMA_TERM\t\t\t\t\tSQL_OWNER_TERM\n#define SQL_SCHEMA_USAGE\t\t\t\tSQL_OWNER_USAGE\n#define SQL_SQL92_DATETIME_FUNCTIONS\t\t\t155\n#define SQL_SQL92_FOREIGN_KEY_DELETE_RULE\t\t156\n#define SQL_SQL92_FOREIGN_KEY_UPDATE_RULE\t\t157\n#define SQL_SQL92_GRANT\t\t\t\t\t158\n#define SQL_SQL92_NUMERIC_VALUE_FUNCTIONS\t\t159\n#define SQL_SQL92_PREDICATES\t\t\t\t160\n#define SQL_SQL92_RELATIONAL_JOIN_OPERATORS\t\t161\n#define SQL_SQL92_REVOKE\t\t\t\t162\n#define SQL_SQL92_ROW_VALUE_CONSTRUCTOR\t\t\t163\n#define SQL_SQL92_STRING_FUNCTIONS\t\t\t164\n#define SQL_SQL92_VALUE_EXPRESSIONS\t\t\t165\n#define SQL_STANDARD_CLI_CONFORMANCE\t\t\t166\n#define SQL_STATIC_CURSOR_ATTRIBUTES1\t\t\t167\n#define SQL_STATIC_CURSOR_ATTRIBUTES2\t\t\t168\n\n#define SQL_AGGREGATE_FUNCTIONS\t\t\t\t169\n#define SQL_DDL_INDEX\t\t\t\t\t170\n#define SQL_DM_VER\t\t\t\t\t171\n#define SQL_INSERT_STATEMENT\t\t\t\t172\n#define SQL_UNION_STATEMENT\t\t\t\tSQL_UNION\n#endif\n\n#define\tSQL_DTC_TRANSITION_COST\t\t\t\t1750\n\n#if (ODBCVER >= 0x0300)\n\n#define SQL_AT_ADD_COLUMN_SINGLE                        __MSABI_LONG(0x00000020)\n#define SQL_AT_ADD_COLUMN_DEFAULT                       __MSABI_LONG(0x00000040)\n#define SQL_AT_ADD_COLUMN_COLLATION                     __MSABI_LONG(0x00000080)\n#define SQL_AT_SET_COLUMN_DEFAULT                       __MSABI_LONG(0x00000100)\n#define SQL_AT_DROP_COLUMN_DEFAULT                      __MSABI_LONG(0x00000200)\n#define SQL_AT_DROP_COLUMN_CASCADE                      __MSABI_LONG(0x00000400)\n#define SQL_AT_DROP_COLUMN_RESTRICT                     __MSABI_LONG(0x00000800)\n#define SQL_AT_ADD_TABLE_CONSTRAINT                     __MSABI_LONG(0x00001000)\n#define SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE            __MSABI_LONG(0x00002000)\n#define SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT           __MSABI_LONG(0x00004000)\n#define SQL_AT_CONSTRAINT_NAME_DEFINITION               __MSABI_LONG(0x00008000)\n#define SQL_AT_CONSTRAINT_INITIALLY_DEFERRED            __MSABI_LONG(0x00010000)\n#define SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE           __MSABI_LONG(0x00020000)\n#define SQL_AT_CONSTRAINT_DEFERRABLE                    __MSABI_LONG(0x00040000)\n#define SQL_AT_CONSTRAINT_NON_DEFERRABLE                __MSABI_LONG(0x00080000)\n#endif\n\n#define SQL_CVT_CHAR                    __MSABI_LONG(0x00000001)\n#define SQL_CVT_NUMERIC                 __MSABI_LONG(0x00000002)\n#define SQL_CVT_DECIMAL                 __MSABI_LONG(0x00000004)\n#define SQL_CVT_INTEGER                 __MSABI_LONG(0x00000008)\n#define SQL_CVT_SMALLINT                __MSABI_LONG(0x00000010)\n#define SQL_CVT_FLOAT                   __MSABI_LONG(0x00000020)\n#define SQL_CVT_REAL                    __MSABI_LONG(0x00000040)\n#define SQL_CVT_DOUBLE                  __MSABI_LONG(0x00000080)\n#define SQL_CVT_VARCHAR                 __MSABI_LONG(0x00000100)\n#define SQL_CVT_LONGVARCHAR             __MSABI_LONG(0x00000200)\n#define SQL_CVT_BINARY                  __MSABI_LONG(0x00000400)\n#define SQL_CVT_VARBINARY               __MSABI_LONG(0x00000800)\n#define SQL_CVT_BIT                     __MSABI_LONG(0x00001000)\n#define SQL_CVT_TINYINT                 __MSABI_LONG(0x00002000)\n#define SQL_CVT_BIGINT                  __MSABI_LONG(0x00004000)\n#define SQL_CVT_DATE                    __MSABI_LONG(0x00008000)\n#define SQL_CVT_TIME                    __MSABI_LONG(0x00010000)\n#define SQL_CVT_TIMESTAMP               __MSABI_LONG(0x00020000)\n#define SQL_CVT_LONGVARBINARY           __MSABI_LONG(0x00040000)\n#if (ODBCVER >= 0x0300)\n#define SQL_CVT_INTERVAL_YEAR_MONTH     __MSABI_LONG(0x00080000)\n#define SQL_CVT_INTERVAL_DAY_TIME       __MSABI_LONG(0x00100000)\n#define SQL_CVT_WCHAR                   __MSABI_LONG(0x00200000)\n#define SQL_CVT_WLONGVARCHAR            __MSABI_LONG(0x00400000)\n#define SQL_CVT_WVARCHAR                __MSABI_LONG(0x00800000)\n\n#endif\n\n\n#define SQL_FN_CVT_CONVERT              __MSABI_LONG(0x00000001)\n#if (ODBCVER >= 0x0300)\n#define SQL_FN_CVT_CAST                 __MSABI_LONG(0x00000002)\n#endif\n\n#define SQL_FN_STR_CONCAT               __MSABI_LONG(0x00000001)\n#define SQL_FN_STR_INSERT               __MSABI_LONG(0x00000002)\n#define SQL_FN_STR_LEFT                 __MSABI_LONG(0x00000004)\n#define SQL_FN_STR_LTRIM                __MSABI_LONG(0x00000008)\n#define SQL_FN_STR_LENGTH               __MSABI_LONG(0x00000010)\n#define SQL_FN_STR_LOCATE               __MSABI_LONG(0x00000020)\n#define SQL_FN_STR_LCASE                __MSABI_LONG(0x00000040)\n#define SQL_FN_STR_REPEAT               __MSABI_LONG(0x00000080)\n#define SQL_FN_STR_REPLACE              __MSABI_LONG(0x00000100)\n#define SQL_FN_STR_RIGHT                __MSABI_LONG(0x00000200)\n#define SQL_FN_STR_RTRIM                __MSABI_LONG(0x00000400)\n#define SQL_FN_STR_SUBSTRING            __MSABI_LONG(0x00000800)\n#define SQL_FN_STR_UCASE                __MSABI_LONG(0x00001000)\n#define SQL_FN_STR_ASCII                __MSABI_LONG(0x00002000)\n#define SQL_FN_STR_CHAR                 __MSABI_LONG(0x00004000)\n#define SQL_FN_STR_DIFFERENCE           __MSABI_LONG(0x00008000)\n#define SQL_FN_STR_LOCATE_2             __MSABI_LONG(0x00010000)\n#define SQL_FN_STR_SOUNDEX              __MSABI_LONG(0x00020000)\n#define SQL_FN_STR_SPACE                __MSABI_LONG(0x00040000)\n#if (ODBCVER >= 0x0300)\n#define SQL_FN_STR_BIT_LENGTH           __MSABI_LONG(0x00080000)\n#define SQL_FN_STR_CHAR_LENGTH          __MSABI_LONG(0x00100000)\n#define SQL_FN_STR_CHARACTER_LENGTH     __MSABI_LONG(0x00200000)\n#define SQL_FN_STR_OCTET_LENGTH         __MSABI_LONG(0x00400000)\n#define SQL_FN_STR_POSITION             __MSABI_LONG(0x00800000)\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_SSF_CONVERT                 __MSABI_LONG(0x00000001)\n#define SQL_SSF_LOWER                   __MSABI_LONG(0x00000002)\n#define SQL_SSF_UPPER                   __MSABI_LONG(0x00000004)\n#define SQL_SSF_SUBSTRING               __MSABI_LONG(0x00000008)\n#define SQL_SSF_TRANSLATE               __MSABI_LONG(0x00000010)\n#define SQL_SSF_TRIM_BOTH               __MSABI_LONG(0x00000020)\n#define SQL_SSF_TRIM_LEADING            __MSABI_LONG(0x00000040)\n#define SQL_SSF_TRIM_TRAILING           __MSABI_LONG(0x00000080)\n#endif\n\n#define SQL_FN_NUM_ABS                  __MSABI_LONG(0x00000001)\n#define SQL_FN_NUM_ACOS                 __MSABI_LONG(0x00000002)\n#define SQL_FN_NUM_ASIN                 __MSABI_LONG(0x00000004)\n#define SQL_FN_NUM_ATAN                 __MSABI_LONG(0x00000008)\n#define SQL_FN_NUM_ATAN2                __MSABI_LONG(0x00000010)\n#define SQL_FN_NUM_CEILING              __MSABI_LONG(0x00000020)\n#define SQL_FN_NUM_COS                  __MSABI_LONG(0x00000040)\n#define SQL_FN_NUM_COT                  __MSABI_LONG(0x00000080)\n#define SQL_FN_NUM_EXP                  __MSABI_LONG(0x00000100)\n#define SQL_FN_NUM_FLOOR                __MSABI_LONG(0x00000200)\n#define SQL_FN_NUM_LOG                  __MSABI_LONG(0x00000400)\n#define SQL_FN_NUM_MOD                  __MSABI_LONG(0x00000800)\n#define SQL_FN_NUM_SIGN                 __MSABI_LONG(0x00001000)\n#define SQL_FN_NUM_SIN                  __MSABI_LONG(0x00002000)\n#define SQL_FN_NUM_SQRT                 __MSABI_LONG(0x00004000)\n#define SQL_FN_NUM_TAN                  __MSABI_LONG(0x00008000)\n#define SQL_FN_NUM_PI                   __MSABI_LONG(0x00010000)\n#define SQL_FN_NUM_RAND                 __MSABI_LONG(0x00020000)\n#define SQL_FN_NUM_DEGREES              __MSABI_LONG(0x00040000)\n#define SQL_FN_NUM_LOG10                __MSABI_LONG(0x00080000)\n#define SQL_FN_NUM_POWER                __MSABI_LONG(0x00100000)\n#define SQL_FN_NUM_RADIANS              __MSABI_LONG(0x00200000)\n#define SQL_FN_NUM_ROUND                __MSABI_LONG(0x00400000)\n#define SQL_FN_NUM_TRUNCATE             __MSABI_LONG(0x00800000)\n\n#if (ODBCVER >= 0x0300)\n#define SQL_SNVF_BIT_LENGTH             __MSABI_LONG(0x00000001)\n#define SQL_SNVF_CHAR_LENGTH            __MSABI_LONG(0x00000002)\n#define SQL_SNVF_CHARACTER_LENGTH       __MSABI_LONG(0x00000004)\n#define SQL_SNVF_EXTRACT                __MSABI_LONG(0x00000008)\n#define SQL_SNVF_OCTET_LENGTH           __MSABI_LONG(0x00000010)\n#define SQL_SNVF_POSITION               __MSABI_LONG(0x00000020)\n#endif\n\n#define SQL_FN_TD_NOW                   __MSABI_LONG(0x00000001)\n#define SQL_FN_TD_CURDATE               __MSABI_LONG(0x00000002)\n#define SQL_FN_TD_DAYOFMONTH            __MSABI_LONG(0x00000004)\n#define SQL_FN_TD_DAYOFWEEK             __MSABI_LONG(0x00000008)\n#define SQL_FN_TD_DAYOFYEAR             __MSABI_LONG(0x00000010)\n#define SQL_FN_TD_MONTH                 __MSABI_LONG(0x00000020)\n#define SQL_FN_TD_QUARTER               __MSABI_LONG(0x00000040)\n#define SQL_FN_TD_WEEK                  __MSABI_LONG(0x00000080)\n#define SQL_FN_TD_YEAR                  __MSABI_LONG(0x00000100)\n#define SQL_FN_TD_CURTIME               __MSABI_LONG(0x00000200)\n#define SQL_FN_TD_HOUR                  __MSABI_LONG(0x00000400)\n#define SQL_FN_TD_MINUTE                __MSABI_LONG(0x00000800)\n#define SQL_FN_TD_SECOND                __MSABI_LONG(0x00001000)\n#define SQL_FN_TD_TIMESTAMPADD          __MSABI_LONG(0x00002000)\n#define SQL_FN_TD_TIMESTAMPDIFF         __MSABI_LONG(0x00004000)\n#define SQL_FN_TD_DAYNAME               __MSABI_LONG(0x00008000)\n#define SQL_FN_TD_MONTHNAME             __MSABI_LONG(0x00010000)\n#if (ODBCVER >= 0x0300)\n#define SQL_FN_TD_CURRENT_DATE          __MSABI_LONG(0x00020000)\n#define SQL_FN_TD_CURRENT_TIME          __MSABI_LONG(0x00040000)\n#define SQL_FN_TD_CURRENT_TIMESTAMP     __MSABI_LONG(0x00080000)\n#define SQL_FN_TD_EXTRACT               __MSABI_LONG(0x00100000)\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_SDF_CURRENT_DATE            __MSABI_LONG(0x00000001)\n#define SQL_SDF_CURRENT_TIME            __MSABI_LONG(0x00000002)\n#define SQL_SDF_CURRENT_TIMESTAMP       __MSABI_LONG(0x00000004)\n#endif\n\n#define SQL_FN_SYS_USERNAME             __MSABI_LONG(0x00000001)\n#define SQL_FN_SYS_DBNAME               __MSABI_LONG(0x00000002)\n#define SQL_FN_SYS_IFNULL               __MSABI_LONG(0x00000004)\n\n#define SQL_FN_TSI_FRAC_SECOND          __MSABI_LONG(0x00000001)\n#define SQL_FN_TSI_SECOND               __MSABI_LONG(0x00000002)\n#define SQL_FN_TSI_MINUTE               __MSABI_LONG(0x00000004)\n#define SQL_FN_TSI_HOUR                 __MSABI_LONG(0x00000008)\n#define SQL_FN_TSI_DAY                  __MSABI_LONG(0x00000010)\n#define SQL_FN_TSI_WEEK                 __MSABI_LONG(0x00000020)\n#define SQL_FN_TSI_MONTH                __MSABI_LONG(0x00000040)\n#define SQL_FN_TSI_QUARTER              __MSABI_LONG(0x00000080)\n#define SQL_FN_TSI_YEAR                 __MSABI_LONG(0x00000100)\n\n#if (ODBCVER >= 0x0300)\n#define SQL_CA1_NEXT                    __MSABI_LONG(0x00000001)\n#define SQL_CA1_ABSOLUTE                __MSABI_LONG(0x00000002)\n#define SQL_CA1_RELATIVE                __MSABI_LONG(0x00000004)\n#define SQL_CA1_BOOKMARK                __MSABI_LONG(0x00000008)\n\n#define SQL_CA1_LOCK_NO_CHANGE          __MSABI_LONG(0x00000040)\n#define SQL_CA1_LOCK_EXCLUSIVE          __MSABI_LONG(0x00000080)\n#define SQL_CA1_LOCK_UNLOCK             __MSABI_LONG(0x00000100)\n\n#define SQL_CA1_POS_POSITION            __MSABI_LONG(0x00000200)\n#define SQL_CA1_POS_UPDATE              __MSABI_LONG(0x00000400)\n#define SQL_CA1_POS_DELETE              __MSABI_LONG(0x00000800)\n#define SQL_CA1_POS_REFRESH             __MSABI_LONG(0x00001000)\n\n#define SQL_CA1_POSITIONED_UPDATE       __MSABI_LONG(0x00002000)\n#define SQL_CA1_POSITIONED_DELETE       __MSABI_LONG(0x00004000)\n#define SQL_CA1_SELECT_FOR_UPDATE       __MSABI_LONG(0x00008000)\n\n#define SQL_CA1_BULK_ADD                __MSABI_LONG(0x00010000)\n#define SQL_CA1_BULK_UPDATE_BY_BOOKMARK __MSABI_LONG(0x00020000)\n#define SQL_CA1_BULK_DELETE_BY_BOOKMARK __MSABI_LONG(0x00040000)\n#define SQL_CA1_BULK_FETCH_BY_BOOKMARK  __MSABI_LONG(0x00080000)\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_CA2_READ_ONLY_CONCURRENCY   __MSABI_LONG(0x00000001)\n#define SQL_CA2_LOCK_CONCURRENCY        __MSABI_LONG(0x00000002)\n#define SQL_CA2_OPT_ROWVER_CONCURRENCY  __MSABI_LONG(0x00000004)\n#define SQL_CA2_OPT_VALUES_CONCURRENCY  __MSABI_LONG(0x00000008)\n\n#define SQL_CA2_SENSITIVITY_ADDITIONS   __MSABI_LONG(0x00000010)\n#define SQL_CA2_SENSITIVITY_DELETIONS   __MSABI_LONG(0x00000020)\n#define SQL_CA2_SENSITIVITY_UPDATES     __MSABI_LONG(0x00000040)\n\n#define SQL_CA2_MAX_ROWS_SELECT         __MSABI_LONG(0x00000080)\n#define SQL_CA2_MAX_ROWS_INSERT         __MSABI_LONG(0x00000100)\n#define SQL_CA2_MAX_ROWS_DELETE         __MSABI_LONG(0x00000200)\n#define SQL_CA2_MAX_ROWS_UPDATE         __MSABI_LONG(0x00000400)\n#define SQL_CA2_MAX_ROWS_CATALOG        __MSABI_LONG(0x00000800)\n#define SQL_CA2_MAX_ROWS_AFFECTS_ALL\t\t(SQL_CA2_MAX_ROWS_SELECT | SQL_CA2_MAX_ROWS_INSERT | SQL_CA2_MAX_ROWS_DELETE | SQL_CA2_MAX_ROWS_UPDATE | SQL_CA2_MAX_ROWS_CATALOG)\n\n#define SQL_CA2_CRC_EXACT               __MSABI_LONG(0x00001000)\n#define SQL_CA2_CRC_APPROXIMATE         __MSABI_LONG(0x00002000)\n\n#define SQL_CA2_SIMULATE_NON_UNIQUE     __MSABI_LONG(0x00004000)\n#define SQL_CA2_SIMULATE_TRY_UNIQUE     __MSABI_LONG(0x00008000)\n#define SQL_CA2_SIMULATE_UNIQUE         __MSABI_LONG(0x00010000)\n#endif\n\n#define SQL_OAC_NONE                        0x0000\n#define SQL_OAC_LEVEL1                      0x0001\n#define SQL_OAC_LEVEL2                      0x0002\n\n#define SQL_OSCC_NOT_COMPLIANT              0x0000\n#define SQL_OSCC_COMPLIANT                  0x0001\n\n#define SQL_OSC_MINIMUM                     0x0000\n#define SQL_OSC_CORE                        0x0001\n#define SQL_OSC_EXTENDED                    0x0002\n\n#define SQL_CB_NULL                         0x0000\n#define SQL_CB_NON_NULL                     0x0001\n\n#define SQL_SO_FORWARD_ONLY             __MSABI_LONG(0x00000001)\n#define SQL_SO_KEYSET_DRIVEN            __MSABI_LONG(0x00000002)\n#define SQL_SO_DYNAMIC                  __MSABI_LONG(0x00000004)\n#define SQL_SO_MIXED                    __MSABI_LONG(0x00000008)\n#define SQL_SO_STATIC                   __MSABI_LONG(0x00000010)\n\n#define SQL_FD_FETCH_BOOKMARK           __MSABI_LONG(0x00000080)\n\n#define SQL_CN_NONE                         0x0000\n#define SQL_CN_DIFFERENT                    0x0001\n#define SQL_CN_ANY                          0x0002\n\n#define SQL_NNC_NULL                        0x0000\n#define SQL_NNC_NON_NULL                    0x0001\n\n#define SQL_NC_START                        0x0002\n#define SQL_NC_END                          0x0004\n\n#define SQL_FILE_NOT_SUPPORTED              0x0000\n#define SQL_FILE_TABLE                      0x0001\n#define SQL_FILE_QUALIFIER                  0x0002\n#define SQL_FILE_CATALOG\t\tSQL_FILE_QUALIFIER\n\n#define SQL_GD_BLOCK                    __MSABI_LONG(0x00000004)\n#define SQL_GD_BOUND                    __MSABI_LONG(0x00000008)\n\n#define SQL_PS_POSITIONED_DELETE        __MSABI_LONG(0x00000001)\n#define SQL_PS_POSITIONED_UPDATE        __MSABI_LONG(0x00000002)\n#define SQL_PS_SELECT_FOR_UPDATE        __MSABI_LONG(0x00000004)\n\n#define SQL_GB_NOT_SUPPORTED                0x0000\n#define SQL_GB_GROUP_BY_EQUALS_SELECT       0x0001\n#define SQL_GB_GROUP_BY_CONTAINS_SELECT     0x0002\n#define SQL_GB_NO_RELATION                  0x0003\n#if (ODBCVER >= 0x0300)\n#define\tSQL_GB_COLLATE\t\t\t0x0004\n\n#endif\n\n#define SQL_OU_DML_STATEMENTS           __MSABI_LONG(0x00000001)\n#define SQL_OU_PROCEDURE_INVOCATION     __MSABI_LONG(0x00000002)\n#define SQL_OU_TABLE_DEFINITION         __MSABI_LONG(0x00000004)\n#define SQL_OU_INDEX_DEFINITION         __MSABI_LONG(0x00000008)\n#define SQL_OU_PRIVILEGE_DEFINITION     __MSABI_LONG(0x00000010)\n\n#if (ODBCVER >= 0x0300)\n#define SQL_SU_DML_STATEMENTS\t\t\tSQL_OU_DML_STATEMENTS\n#define SQL_SU_PROCEDURE_INVOCATION\t\tSQL_OU_PROCEDURE_INVOCATION\n#define SQL_SU_TABLE_DEFINITION\t\t\tSQL_OU_TABLE_DEFINITION\n#define SQL_SU_INDEX_DEFINITION\t\t\tSQL_OU_INDEX_DEFINITION\n#define SQL_SU_PRIVILEGE_DEFINITION\t\tSQL_OU_PRIVILEGE_DEFINITION\n#endif\n\n#define SQL_QU_DML_STATEMENTS           __MSABI_LONG(0x00000001)\n#define SQL_QU_PROCEDURE_INVOCATION     __MSABI_LONG(0x00000002)\n#define SQL_QU_TABLE_DEFINITION         __MSABI_LONG(0x00000004)\n#define SQL_QU_INDEX_DEFINITION         __MSABI_LONG(0x00000008)\n#define SQL_QU_PRIVILEGE_DEFINITION     __MSABI_LONG(0x00000010)\n\n#if (ODBCVER >= 0x0300)\n#define SQL_CU_DML_STATEMENTS\t\t\tSQL_QU_DML_STATEMENTS\n#define SQL_CU_PROCEDURE_INVOCATION\t\tSQL_QU_PROCEDURE_INVOCATION\n#define SQL_CU_TABLE_DEFINITION\t\t\tSQL_QU_TABLE_DEFINITION\n#define SQL_CU_INDEX_DEFINITION\t\t\tSQL_QU_INDEX_DEFINITION\n#define SQL_CU_PRIVILEGE_DEFINITION\t\tSQL_QU_PRIVILEGE_DEFINITION\n#endif\n\n#define SQL_SQ_COMPARISON               __MSABI_LONG(0x00000001)\n#define SQL_SQ_EXISTS                   __MSABI_LONG(0x00000002)\n#define SQL_SQ_IN                       __MSABI_LONG(0x00000004)\n#define SQL_SQ_QUANTIFIED               __MSABI_LONG(0x00000008)\n#define SQL_SQ_CORRELATED_SUBQUERIES    __MSABI_LONG(0x00000010)\n\n#define SQL_U_UNION                     __MSABI_LONG(0x00000001)\n#define SQL_U_UNION_ALL                 __MSABI_LONG(0x00000002)\n\n#define SQL_BP_CLOSE                    __MSABI_LONG(0x00000001)\n#define SQL_BP_DELETE                   __MSABI_LONG(0x00000002)\n#define SQL_BP_DROP                     __MSABI_LONG(0x00000004)\n#define SQL_BP_TRANSACTION              __MSABI_LONG(0x00000008)\n#define SQL_BP_UPDATE                   __MSABI_LONG(0x00000010)\n#define SQL_BP_OTHER_HSTMT              __MSABI_LONG(0x00000020)\n#define SQL_BP_SCROLL                   __MSABI_LONG(0x00000040)\n\n#define SQL_SS_ADDITIONS                __MSABI_LONG(0x00000001)\n#define SQL_SS_DELETIONS                __MSABI_LONG(0x00000002)\n#define SQL_SS_UPDATES                  __MSABI_LONG(0x00000004)\n\n#define SQL_CV_CREATE_VIEW              __MSABI_LONG(0x00000001)\n#define SQL_CV_CHECK_OPTION             __MSABI_LONG(0x00000002)\n#define SQL_CV_CASCADED                 __MSABI_LONG(0x00000004)\n#define SQL_CV_LOCAL                    __MSABI_LONG(0x00000008)\n\n#define SQL_LCK_NO_CHANGE               __MSABI_LONG(0x00000001)\n#define SQL_LCK_EXCLUSIVE               __MSABI_LONG(0x00000002)\n#define SQL_LCK_UNLOCK                  __MSABI_LONG(0x00000004)\n\n#define SQL_POS_POSITION                __MSABI_LONG(0x00000001)\n#define SQL_POS_REFRESH                 __MSABI_LONG(0x00000002)\n#define SQL_POS_UPDATE                  __MSABI_LONG(0x00000004)\n#define SQL_POS_DELETE                  __MSABI_LONG(0x00000008)\n#define SQL_POS_ADD                     __MSABI_LONG(0x00000010)\n\n#define SQL_QL_START                        0x0001\n#define SQL_QL_END                          0x0002\n\n#if (ODBCVER >= 0x0300)\n#define SQL_AF_AVG                      __MSABI_LONG(0x00000001)\n#define SQL_AF_COUNT                    __MSABI_LONG(0x00000002)\n#define SQL_AF_MAX                      __MSABI_LONG(0x00000004)\n#define SQL_AF_MIN                      __MSABI_LONG(0x00000008)\n#define SQL_AF_SUM                      __MSABI_LONG(0x00000010)\n#define SQL_AF_DISTINCT                 __MSABI_LONG(0x00000020)\n#define SQL_AF_ALL                      __MSABI_LONG(0x00000040)\n\n#define SQL_SC_SQL92_ENTRY              __MSABI_LONG(0x00000001)\n#define SQL_SC_FIPS127_2_TRANSITIONAL   __MSABI_LONG(0x00000002)\n#define SQL_SC_SQL92_INTERMEDIATE       __MSABI_LONG(0x00000004)\n#define SQL_SC_SQL92_FULL               __MSABI_LONG(0x00000008)\n\n#define SQL_DL_SQL92_DATE               __MSABI_LONG(0x00000001)\n#define SQL_DL_SQL92_TIME               __MSABI_LONG(0x00000002)\n#define SQL_DL_SQL92_TIMESTAMP          __MSABI_LONG(0x00000004)\n#define SQL_DL_SQL92_INTERVAL_YEAR      __MSABI_LONG(0x00000008)\n#define SQL_DL_SQL92_INTERVAL_MONTH     __MSABI_LONG(0x00000010)\n#define SQL_DL_SQL92_INTERVAL_DAY       __MSABI_LONG(0x00000020)\n#define SQL_DL_SQL92_INTERVAL_HOUR      __MSABI_LONG(0x00000040)\n#define SQL_DL_SQL92_INTERVAL_MINUTE    __MSABI_LONG(0x00000080)\n#define SQL_DL_SQL92_INTERVAL_SECOND    __MSABI_LONG(0x00000100)\n#define SQL_DL_SQL92_INTERVAL_YEAR_TO_MONTH     __MSABI_LONG(0x00000200)\n#define SQL_DL_SQL92_INTERVAL_DAY_TO_HOUR       __MSABI_LONG(0x00000400)\n#define SQL_DL_SQL92_INTERVAL_DAY_TO_MINUTE     __MSABI_LONG(0x00000800)\n#define SQL_DL_SQL92_INTERVAL_DAY_TO_SECOND     __MSABI_LONG(0x00001000)\n#define SQL_DL_SQL92_INTERVAL_HOUR_TO_MINUTE    __MSABI_LONG(0x00002000)\n#define SQL_DL_SQL92_INTERVAL_HOUR_TO_SECOND    __MSABI_LONG(0x00004000)\n#define SQL_DL_SQL92_INTERVAL_MINUTE_TO_SECOND  __MSABI_LONG(0x00008000)\n\n#define SQL_CL_START\t\t\t\t\t\tSQL_QL_START\n#define SQL_CL_END\t\t\t\t\t\t\tSQL_QL_END\n\n#define SQL_BRC_PROCEDURES\t\t\t0x0000001\n#define\tSQL_BRC_EXPLICIT\t\t\t0x0000002\n#define\tSQL_BRC_ROLLED_UP\t\t\t0x0000004\n\n#define SQL_BS_SELECT_EXPLICIT          __MSABI_LONG(0x00000001)\n#define SQL_BS_ROW_COUNT_EXPLICIT       __MSABI_LONG(0x00000002)\n#define SQL_BS_SELECT_PROC              __MSABI_LONG(0x00000004)\n#define SQL_BS_ROW_COUNT_PROC           __MSABI_LONG(0x00000008)\n\n#define SQL_PARC_BATCH\t\t1\n#define SQL_PARC_NO_BATCH\t2\n\n#define SQL_PAS_BATCH\t\t\t\t1\n#define SQL_PAS_NO_BATCH\t\t\t2\n#define SQL_PAS_NO_SELECT\t\t\t3\n\n#define SQL_IK_NONE                     __MSABI_LONG(0x00000000)\n#define SQL_IK_ASC                      __MSABI_LONG(0x00000001)\n#define SQL_IK_DESC                     __MSABI_LONG(0x00000002)\n#define SQL_IK_ALL\t\t\t\t\t\t\t(SQL_IK_ASC | SQL_IK_DESC)\n\n#define SQL_ISV_ASSERTIONS              __MSABI_LONG(0x00000001)\n#define SQL_ISV_CHARACTER_SETS          __MSABI_LONG(0x00000002)\n#define SQL_ISV_CHECK_CONSTRAINTS       __MSABI_LONG(0x00000004)\n#define SQL_ISV_COLLATIONS              __MSABI_LONG(0x00000008)\n#define SQL_ISV_COLUMN_DOMAIN_USAGE     __MSABI_LONG(0x00000010)\n#define SQL_ISV_COLUMN_PRIVILEGES       __MSABI_LONG(0x00000020)\n#define SQL_ISV_COLUMNS                 __MSABI_LONG(0x00000040)\n#define SQL_ISV_CONSTRAINT_COLUMN_USAGE __MSABI_LONG(0x00000080)\n#define SQL_ISV_CONSTRAINT_TABLE_USAGE  __MSABI_LONG(0x00000100)\n#define SQL_ISV_DOMAIN_CONSTRAINTS      __MSABI_LONG(0x00000200)\n#define SQL_ISV_DOMAINS                 __MSABI_LONG(0x00000400)\n#define SQL_ISV_KEY_COLUMN_USAGE        __MSABI_LONG(0x00000800)\n#define SQL_ISV_REFERENTIAL_CONSTRAINTS __MSABI_LONG(0x00001000)\n#define SQL_ISV_SCHEMATA                __MSABI_LONG(0x00002000)\n#define SQL_ISV_SQL_LANGUAGES           __MSABI_LONG(0x00004000)\n#define SQL_ISV_TABLE_CONSTRAINTS       __MSABI_LONG(0x00008000)\n#define SQL_ISV_TABLE_PRIVILEGES        __MSABI_LONG(0x00010000)\n#define SQL_ISV_TABLES                  __MSABI_LONG(0x00020000)\n#define SQL_ISV_TRANSLATIONS            __MSABI_LONG(0x00040000)\n#define SQL_ISV_USAGE_PRIVILEGES        __MSABI_LONG(0x00080000)\n#define SQL_ISV_VIEW_COLUMN_USAGE       __MSABI_LONG(0x00100000)\n#define SQL_ISV_VIEW_TABLE_USAGE        __MSABI_LONG(0x00200000)\n#define SQL_ISV_VIEWS                   __MSABI_LONG(0x00400000)\n\n#define\tSQL_AM_NONE\t\t\t0\n#define\tSQL_AM_CONNECTION\t1\n#define\tSQL_AM_STATEMENT\t2\n\n#define SQL_AD_CONSTRAINT_NAME_DEFINITION               __MSABI_LONG(0x00000001)\n#define SQL_AD_ADD_DOMAIN_CONSTRAINT                    __MSABI_LONG(0x00000002)\n#define SQL_AD_DROP_DOMAIN_CONSTRAINT                   __MSABI_LONG(0x00000004)\n#define SQL_AD_ADD_DOMAIN_DEFAULT                       __MSABI_LONG(0x00000008)\n#define SQL_AD_DROP_DOMAIN_DEFAULT                      __MSABI_LONG(0x00000010)\n#define SQL_AD_ADD_CONSTRAINT_INITIALLY_DEFERRED        __MSABI_LONG(0x00000020)\n#define SQL_AD_ADD_CONSTRAINT_INITIALLY_IMMEDIATE       __MSABI_LONG(0x00000040)\n#define SQL_AD_ADD_CONSTRAINT_DEFERRABLE                __MSABI_LONG(0x00000080)\n#define SQL_AD_ADD_CONSTRAINT_NON_DEFERRABLE            __MSABI_LONG(0x00000100)\n\n#define SQL_CS_CREATE_SCHEMA            __MSABI_LONG(0x00000001)\n#define SQL_CS_AUTHORIZATION            __MSABI_LONG(0x00000002)\n#define SQL_CS_DEFAULT_CHARACTER_SET    __MSABI_LONG(0x00000004)\n\n#define SQL_CTR_CREATE_TRANSLATION      __MSABI_LONG(0x00000001)\n\n#define SQL_CA_CREATE_ASSERTION                 __MSABI_LONG(0x00000001)\n#define SQL_CA_CONSTRAINT_INITIALLY_DEFERRED    __MSABI_LONG(0x00000010)\n#define SQL_CA_CONSTRAINT_INITIALLY_IMMEDIATE   __MSABI_LONG(0x00000020)\n#define SQL_CA_CONSTRAINT_DEFERRABLE            __MSABI_LONG(0x00000040)\n#define SQL_CA_CONSTRAINT_NON_DEFERRABLE        __MSABI_LONG(0x00000080)\n\n#define SQL_CCS_CREATE_CHARACTER_SET    __MSABI_LONG(0x00000001)\n#define SQL_CCS_COLLATE_CLAUSE          __MSABI_LONG(0x00000002)\n#define SQL_CCS_LIMITED_COLLATION       __MSABI_LONG(0x00000004)\n\n#define SQL_CCOL_CREATE_COLLATION       __MSABI_LONG(0x00000001)\n\n#define SQL_CDO_CREATE_DOMAIN                   __MSABI_LONG(0x00000001)\n#define SQL_CDO_DEFAULT                         __MSABI_LONG(0x00000002)\n#define SQL_CDO_CONSTRAINT                      __MSABI_LONG(0x00000004)\n#define SQL_CDO_COLLATION                       __MSABI_LONG(0x00000008)\n#define SQL_CDO_CONSTRAINT_NAME_DEFINITION      __MSABI_LONG(0x00000010)\n#define SQL_CDO_CONSTRAINT_INITIALLY_DEFERRED   __MSABI_LONG(0x00000020)\n#define SQL_CDO_CONSTRAINT_INITIALLY_IMMEDIATE  __MSABI_LONG(0x00000040)\n#define SQL_CDO_CONSTRAINT_DEFERRABLE           __MSABI_LONG(0x00000080)\n#define SQL_CDO_CONSTRAINT_NON_DEFERRABLE       __MSABI_LONG(0x00000100)\n\n#define SQL_CT_CREATE_TABLE                     __MSABI_LONG(0x00000001)\n#define SQL_CT_COMMIT_PRESERVE                  __MSABI_LONG(0x00000002)\n#define SQL_CT_COMMIT_DELETE                    __MSABI_LONG(0x00000004)\n#define SQL_CT_GLOBAL_TEMPORARY                 __MSABI_LONG(0x00000008)\n#define SQL_CT_LOCAL_TEMPORARY                  __MSABI_LONG(0x00000010)\n#define SQL_CT_CONSTRAINT_INITIALLY_DEFERRED    __MSABI_LONG(0x00000020)\n#define SQL_CT_CONSTRAINT_INITIALLY_IMMEDIATE   __MSABI_LONG(0x00000040)\n#define SQL_CT_CONSTRAINT_DEFERRABLE            __MSABI_LONG(0x00000080)\n#define SQL_CT_CONSTRAINT_NON_DEFERRABLE        __MSABI_LONG(0x00000100)\n#define SQL_CT_COLUMN_CONSTRAINT                __MSABI_LONG(0x00000200)\n#define SQL_CT_COLUMN_DEFAULT                   __MSABI_LONG(0x00000400)\n#define SQL_CT_COLUMN_COLLATION                 __MSABI_LONG(0x00000800)\n#define SQL_CT_TABLE_CONSTRAINT                 __MSABI_LONG(0x00001000)\n#define SQL_CT_CONSTRAINT_NAME_DEFINITION       __MSABI_LONG(0x00002000)\n\n#define SQL_DI_CREATE_INDEX             __MSABI_LONG(0x00000001)\n#define SQL_DI_DROP_INDEX               __MSABI_LONG(0x00000002)\n\n#define SQL_DC_DROP_COLLATION           __MSABI_LONG(0x00000001)\n\n#define SQL_DD_DROP_DOMAIN              __MSABI_LONG(0x00000001)\n#define SQL_DD_RESTRICT                 __MSABI_LONG(0x00000002)\n#define SQL_DD_CASCADE                  __MSABI_LONG(0x00000004)\n\n#define SQL_DS_DROP_SCHEMA              __MSABI_LONG(0x00000001)\n#define SQL_DS_RESTRICT                 __MSABI_LONG(0x00000002)\n#define SQL_DS_CASCADE                  __MSABI_LONG(0x00000004)\n\n#define SQL_DCS_DROP_CHARACTER_SET      __MSABI_LONG(0x00000001)\n\n#define SQL_DA_DROP_ASSERTION           __MSABI_LONG(0x00000001)\n\n#define SQL_DT_DROP_TABLE               __MSABI_LONG(0x00000001)\n#define SQL_DT_RESTRICT                 __MSABI_LONG(0x00000002)\n#define SQL_DT_CASCADE                  __MSABI_LONG(0x00000004)\n\n#define SQL_DTR_DROP_TRANSLATION        __MSABI_LONG(0x00000001)\n\n#define SQL_DV_DROP_VIEW                __MSABI_LONG(0x00000001)\n#define SQL_DV_RESTRICT                 __MSABI_LONG(0x00000002)\n#define SQL_DV_CASCADE                  __MSABI_LONG(0x00000004)\n\n#define SQL_IS_INSERT_LITERALS          __MSABI_LONG(0x00000001)\n#define SQL_IS_INSERT_SEARCHED          __MSABI_LONG(0x00000002)\n#define SQL_IS_SELECT_INTO              __MSABI_LONG(0x00000004)\n\n#define SQL_OIC_CORE                    __MSABI_LONG(1U)\n#define SQL_OIC_LEVEL1                  __MSABI_LONG(2U)\n#define SQL_OIC_LEVEL2                  __MSABI_LONG(3U)\n\n#define SQL_SFKD_CASCADE                __MSABI_LONG(0x00000001)\n#define SQL_SFKD_NO_ACTION              __MSABI_LONG(0x00000002)\n#define SQL_SFKD_SET_DEFAULT            __MSABI_LONG(0x00000004)\n#define SQL_SFKD_SET_NULL               __MSABI_LONG(0x00000008)\n\n#define SQL_SFKU_CASCADE                __MSABI_LONG(0x00000001)\n#define SQL_SFKU_NO_ACTION              __MSABI_LONG(0x00000002)\n#define SQL_SFKU_SET_DEFAULT            __MSABI_LONG(0x00000004)\n#define SQL_SFKU_SET_NULL               __MSABI_LONG(0x00000008)\n\n#define SQL_SG_USAGE_ON_DOMAIN          __MSABI_LONG(0x00000001)\n#define SQL_SG_USAGE_ON_CHARACTER_SET   __MSABI_LONG(0x00000002)\n#define SQL_SG_USAGE_ON_COLLATION       __MSABI_LONG(0x00000004)\n#define SQL_SG_USAGE_ON_TRANSLATION     __MSABI_LONG(0x00000008)\n#define SQL_SG_WITH_GRANT_OPTION        __MSABI_LONG(0x00000010)\n#define SQL_SG_DELETE_TABLE             __MSABI_LONG(0x00000020)\n#define SQL_SG_INSERT_TABLE             __MSABI_LONG(0x00000040)\n#define SQL_SG_INSERT_COLUMN            __MSABI_LONG(0x00000080)\n#define SQL_SG_REFERENCES_TABLE         __MSABI_LONG(0x00000100)\n#define SQL_SG_REFERENCES_COLUMN        __MSABI_LONG(0x00000200)\n#define SQL_SG_SELECT_TABLE             __MSABI_LONG(0x00000400)\n#define SQL_SG_UPDATE_TABLE             __MSABI_LONG(0x00000800)\n#define SQL_SG_UPDATE_COLUMN            __MSABI_LONG(0x00001000)\n\n#define SQL_SP_EXISTS                   __MSABI_LONG(0x00000001)\n#define SQL_SP_ISNOTNULL                __MSABI_LONG(0x00000002)\n#define SQL_SP_ISNULL                   __MSABI_LONG(0x00000004)\n#define SQL_SP_MATCH_FULL               __MSABI_LONG(0x00000008)\n#define SQL_SP_MATCH_PARTIAL            __MSABI_LONG(0x00000010)\n#define SQL_SP_MATCH_UNIQUE_FULL        __MSABI_LONG(0x00000020)\n#define SQL_SP_MATCH_UNIQUE_PARTIAL     __MSABI_LONG(0x00000040)\n#define SQL_SP_OVERLAPS                 __MSABI_LONG(0x00000080)\n#define SQL_SP_UNIQUE                   __MSABI_LONG(0x00000100)\n#define SQL_SP_LIKE                     __MSABI_LONG(0x00000200)\n#define SQL_SP_IN                       __MSABI_LONG(0x00000400)\n#define SQL_SP_BETWEEN                  __MSABI_LONG(0x00000800)\n#define SQL_SP_COMPARISON               __MSABI_LONG(0x00001000)\n#define SQL_SP_QUANTIFIED_COMPARISON    __MSABI_LONG(0x00002000)\n\n#define SQL_SRJO_CORRESPONDING_CLAUSE   __MSABI_LONG(0x00000001)\n#define SQL_SRJO_CROSS_JOIN             __MSABI_LONG(0x00000002)\n#define SQL_SRJO_EXCEPT_JOIN            __MSABI_LONG(0x00000004)\n#define SQL_SRJO_FULL_OUTER_JOIN        __MSABI_LONG(0x00000008)\n#define SQL_SRJO_INNER_JOIN             __MSABI_LONG(0x00000010)\n#define SQL_SRJO_INTERSECT_JOIN         __MSABI_LONG(0x00000020)\n#define SQL_SRJO_LEFT_OUTER_JOIN        __MSABI_LONG(0x00000040)\n#define SQL_SRJO_NATURAL_JOIN           __MSABI_LONG(0x00000080)\n#define SQL_SRJO_RIGHT_OUTER_JOIN       __MSABI_LONG(0x00000100)\n#define SQL_SRJO_UNION_JOIN             __MSABI_LONG(0x00000200)\n\n#define SQL_SR_USAGE_ON_DOMAIN          __MSABI_LONG(0x00000001)\n#define SQL_SR_USAGE_ON_CHARACTER_SET   __MSABI_LONG(0x00000002)\n#define SQL_SR_USAGE_ON_COLLATION       __MSABI_LONG(0x00000004)\n#define SQL_SR_USAGE_ON_TRANSLATION     __MSABI_LONG(0x00000008)\n#define SQL_SR_GRANT_OPTION_FOR         __MSABI_LONG(0x00000010)\n#define SQL_SR_CASCADE                  __MSABI_LONG(0x00000020)\n#define SQL_SR_RESTRICT                 __MSABI_LONG(0x00000040)\n#define SQL_SR_DELETE_TABLE             __MSABI_LONG(0x00000080)\n#define SQL_SR_INSERT_TABLE             __MSABI_LONG(0x00000100)\n#define SQL_SR_INSERT_COLUMN            __MSABI_LONG(0x00000200)\n#define SQL_SR_REFERENCES_TABLE         __MSABI_LONG(0x00000400)\n#define SQL_SR_REFERENCES_COLUMN        __MSABI_LONG(0x00000800)\n#define SQL_SR_SELECT_TABLE             __MSABI_LONG(0x00001000)\n#define SQL_SR_UPDATE_TABLE             __MSABI_LONG(0x00002000)\n#define SQL_SR_UPDATE_COLUMN            __MSABI_LONG(0x00004000)\n\n#define SQL_SRVC_VALUE_EXPRESSION       __MSABI_LONG(0x00000001)\n#define SQL_SRVC_NULL                   __MSABI_LONG(0x00000002)\n#define SQL_SRVC_DEFAULT                __MSABI_LONG(0x00000004)\n#define SQL_SRVC_ROW_SUBQUERY           __MSABI_LONG(0x00000008)\n\n#define SQL_SVE_CASE                    __MSABI_LONG(0x00000001)\n#define SQL_SVE_CAST                    __MSABI_LONG(0x00000002)\n#define SQL_SVE_COALESCE                __MSABI_LONG(0x00000004)\n#define SQL_SVE_NULLIF                  __MSABI_LONG(0x00000008)\n\n#define SQL_SCC_XOPEN_CLI_VERSION1      __MSABI_LONG(0x00000001)\n#define SQL_SCC_ISO92_CLI               __MSABI_LONG(0x00000002)\n\n#define SQL_US_UNION\t\t\t\t\t\t\tSQL_U_UNION\n#define SQL_US_UNION_ALL\t\t\t\t\t\tSQL_U_UNION_ALL\n\n#endif\n\n#define SQL_DTC_ENLIST_EXPENSIVE        __MSABI_LONG(0x00000001)\n#define SQL_DTC_UNENLIST_EXPENSIVE      __MSABI_LONG(0x00000002)\n\n#if (ODBCVER >= 0x0300)\n#define SQL_FETCH_FIRST_USER\t\t\t\t31\n#define SQL_FETCH_FIRST_SYSTEM\t\t\t\t32\n#endif\n\n#define SQL_ENTIRE_ROWSET            0\n\n#define SQL_POSITION                 0\n#define SQL_REFRESH                  1\n#define SQL_UPDATE                   2\n#define SQL_DELETE                   3\n\n#define SQL_ADD                      4\n#define\tSQL_SETPOS_MAX_OPTION_VALUE\t\t\tSQL_ADD\n#if (ODBCVER >= 0x0300)\n#define SQL_UPDATE_BY_BOOKMARK\t\t 5\n#define SQL_DELETE_BY_BOOKMARK\t\t 6\n#define\tSQL_FETCH_BY_BOOKMARK\t\t 7\n\n#endif\n\n#define SQL_LOCK_NO_CHANGE           0\n#define SQL_LOCK_EXCLUSIVE           1\n#define SQL_LOCK_UNLOCK              2\n\n#define\tSQL_SETPOS_MAX_LOCK_VALUE\t\tSQL_LOCK_UNLOCK\n\n#define SQL_POSITION_TO(hstmt,irow) SQLSetPos(hstmt,irow,SQL_POSITION,SQL_LOCK_NO_CHANGE)\n#define SQL_LOCK_RECORD(hstmt,irow,fLock) SQLSetPos(hstmt,irow,SQL_POSITION,fLock)\n#define SQL_REFRESH_RECORD(hstmt,irow,fLock) SQLSetPos(hstmt,irow,SQL_REFRESH,fLock)\n#define SQL_UPDATE_RECORD(hstmt,irow) SQLSetPos(hstmt,irow,SQL_UPDATE,SQL_LOCK_NO_CHANGE)\n#define SQL_DELETE_RECORD(hstmt,irow) SQLSetPos(hstmt,irow,SQL_DELETE,SQL_LOCK_NO_CHANGE)\n#define SQL_ADD_RECORD(hstmt,irow) SQLSetPos(hstmt,irow,SQL_ADD,SQL_LOCK_NO_CHANGE)\n\n#define SQL_BEST_ROWID                  1\n#define SQL_ROWVER                      2\n\n#define SQL_PC_NOT_PSEUDO               1\n\n#define SQL_QUICK                       0\n#define SQL_ENSURE                      1\n\n#define SQL_TABLE_STAT                  0\n\n#if (ODBCVER >= 0x0300)\n#define SQL_ALL_CATALOGS\t\t\t\t\"%\"\n#define SQL_ALL_SCHEMAS\t\t\t\t\t\"%\"\n#define SQL_ALL_TABLE_TYPES\t\t\t\t\"%\"\n#endif  /* ODBCVER >= 0x0300 */\n\n#define SQL_DRIVER_NOPROMPT             0\n#define SQL_DRIVER_COMPLETE             1\n#define SQL_DRIVER_PROMPT               2\n#define SQL_DRIVER_COMPLETE_REQUIRED    3\n\nSQLRETURN WINAPI  SQLDriverConnect(\n    SQLHDBC            hdbc,\n    SQLHWND            hwnd,\n    SQLCHAR \t\t  *szConnStrIn,\n    SQLSMALLINT        cbConnStrIn,\n    SQLCHAR           *szConnStrOut,\n    SQLSMALLINT        cbConnStrOutMax,\n    SQLSMALLINT \t  *pcbConnStrOut,\n    SQLUSMALLINT       fDriverCompletion);\n\n#define SQL_FETCH_BOOKMARK               8\n\n#define SQL_ROW_SUCCESS                  0\n#define SQL_ROW_DELETED                  1\n#define SQL_ROW_UPDATED                  2\n#define SQL_ROW_NOROW                    3\n#define SQL_ROW_ADDED                    4\n#define SQL_ROW_ERROR                    5\n#if (ODBCVER >= 0x0300)\n#define SQL_ROW_SUCCESS_WITH_INFO\t\t 6\n#define SQL_ROW_PROCEED\t\t\t\t\t 0\n#define SQL_ROW_IGNORE\t\t\t\t\t 1\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_PARAM_SUCCESS\t\t\t\t0\n#define SQL_PARAM_SUCCESS_WITH_INFO\t\t6\n#define SQL_PARAM_ERROR\t\t\t\t\t5\n#define SQL_PARAM_UNUSED\t\t\t\t7\n#define SQL_PARAM_DIAG_UNAVAILABLE\t\t1\n\n#define SQL_PARAM_PROCEED\t\t\t\t0\n#define SQL_PARAM_IGNORE\t\t\t\t1\n#endif\n\n#define SQL_CASCADE                      0\n#define SQL_RESTRICT                     1\n#define SQL_SET_NULL                     2\n#if (ODBCVER >= 0x0250)\n#define SQL_NO_ACTION\t\t\t 3\n#define SQL_SET_DEFAULT\t\t\t 4\n#endif\n\n#if (ODBCVER >= 0x0300)\n\n#define SQL_INITIALLY_DEFERRED\t\t\t5\n#define SQL_INITIALLY_IMMEDIATE\t\t\t6\n#define SQL_NOT_DEFERRABLE\t\t\t7\n\n#endif\n\n#define SQL_PARAM_TYPE_UNKNOWN           0\n#define SQL_PARAM_INPUT                  1\n#define SQL_PARAM_INPUT_OUTPUT           2\n#define SQL_RESULT_COL                   3\n#define SQL_PARAM_OUTPUT                 4\n#define SQL_RETURN_VALUE                 5\n\n#define SQL_PT_UNKNOWN                   0\n#define SQL_PT_PROCEDURE                 1\n#define SQL_PT_FUNCTION                  2\n\n#define SQL_ODBC_KEYWORDS \"ABSOLUTE,ACTION,ADA,ADD,ALL,ALLOCATE,ALTER,AND,ANY,ARE,AS,\"\n\nSQLRETURN WINAPI  SQLBrowseConnect(\n    SQLHDBC            hdbc,\n    SQLCHAR \t\t  *szConnStrIn,\n    SQLSMALLINT        cbConnStrIn,\n    SQLCHAR \t\t  *szConnStrOut,\n    SQLSMALLINT        cbConnStrOutMax,\n    SQLSMALLINT       *pcbConnStrOut);\n\n#if (ODBCVER >= 0x0300)\nSQLRETURN WINAPI\tSQLBulkOperations(\n\tSQLHSTMT\t\t\tStatementHandle,\n\tSQLSMALLINT\t\t\tOperation);\n#endif\n\nSQLRETURN WINAPI  SQLColAttributes(\n    SQLHSTMT           hstmt,\n    SQLUSMALLINT       icol,\n    SQLUSMALLINT       fDescType,\n    SQLPOINTER         rgbDesc,\n    SQLSMALLINT        cbDescMax,\n    SQLSMALLINT \t  *pcbDesc,\n    SQLLEN\t\t  *pfDesc);\n\nSQLRETURN WINAPI  SQLColumnPrivileges(\n    SQLHSTMT           hstmt,\n    SQLCHAR \t\t  *szCatalogName,\n    SQLSMALLINT        cbCatalogName,\n    SQLCHAR \t\t  *szSchemaName,\n    SQLSMALLINT        cbSchemaName,\n    SQLCHAR \t\t  *szTableName,\n    SQLSMALLINT        cbTableName,\n    SQLCHAR \t\t  *szColumnName,\n    SQLSMALLINT        cbColumnName);\n\nSQLRETURN WINAPI  SQLDescribeParam(\n    SQLHSTMT           hstmt,\n    SQLUSMALLINT       ipar,\n    SQLSMALLINT \t  *pfSqlType,\n    SQLULEN\t\t  *pcbParamDef,\n    SQLSMALLINT \t  *pibScale,\n    SQLSMALLINT \t  *pfNullable);\n\nSQLRETURN WINAPI  SQLExtendedFetch(\n    SQLHSTMT           hstmt,\n    SQLUSMALLINT       fFetchType,\n    SQLLEN\t       irow,\n    SQLULEN\t\t  *pcrow,\n    SQLUSMALLINT \t  *rgfRowStatus);\n\nSQLRETURN WINAPI  SQLForeignKeys(\n    SQLHSTMT           hstmt,\n    SQLCHAR \t\t  *szPkCatalogName,\n    SQLSMALLINT        cbPkCatalogName,\n    SQLCHAR \t\t  *szPkSchemaName,\n    SQLSMALLINT        cbPkSchemaName,\n    SQLCHAR \t\t  *szPkTableName,\n    SQLSMALLINT        cbPkTableName,\n    SQLCHAR \t\t  *szFkCatalogName,\n    SQLSMALLINT        cbFkCatalogName,\n    SQLCHAR \t\t  *szFkSchemaName,\n    SQLSMALLINT        cbFkSchemaName,\n    SQLCHAR \t\t  *szFkTableName,\n    SQLSMALLINT        cbFkTableName);\n\nSQLRETURN WINAPI  SQLMoreResults(\n    SQLHSTMT           hstmt);\n\nSQLRETURN WINAPI  SQLNativeSql(\n    SQLHDBC            hdbc,\n    SQLCHAR \t\t  *szSqlStrIn,\n    SQLINTEGER         cbSqlStrIn,\n    SQLCHAR \t\t  *szSqlStr,\n    SQLINTEGER         cbSqlStrMax,\n    SQLINTEGER \t\t  *pcbSqlStr);\n\nSQLRETURN WINAPI  SQLNumParams(\n    SQLHSTMT           hstmt,\n    SQLSMALLINT \t  *pcpar);\n\nSQLRETURN WINAPI  SQLParamOptions(\n    SQLHSTMT           hstmt,\n    SQLULEN\t       crow,\n    SQLULEN\t\t  *pirow);\n\nSQLRETURN WINAPI  SQLPrimaryKeys(\n    SQLHSTMT           hstmt,\n    SQLCHAR \t\t  *szCatalogName,\n    SQLSMALLINT        cbCatalogName,\n    SQLCHAR \t\t  *szSchemaName,\n    SQLSMALLINT        cbSchemaName,\n    SQLCHAR \t\t  *szTableName,\n    SQLSMALLINT        cbTableName);\n\nSQLRETURN WINAPI  SQLProcedureColumns(\n    SQLHSTMT           hstmt,\n    SQLCHAR \t\t  *szCatalogName,\n    SQLSMALLINT        cbCatalogName,\n    SQLCHAR \t\t  *szSchemaName,\n    SQLSMALLINT        cbSchemaName,\n    SQLCHAR \t\t  *szProcName,\n    SQLSMALLINT        cbProcName,\n    SQLCHAR \t\t  *szColumnName,\n    SQLSMALLINT        cbColumnName);\n\nSQLRETURN WINAPI  SQLProcedures(\n    SQLHSTMT           hstmt,\n    SQLCHAR \t\t  *szCatalogName,\n    SQLSMALLINT        cbCatalogName,\n    SQLCHAR \t\t  *szSchemaName,\n    SQLSMALLINT        cbSchemaName,\n    SQLCHAR \t\t  *szProcName,\n    SQLSMALLINT        cbProcName);\n\nSQLRETURN WINAPI  SQLSetPos(\n    SQLHSTMT           hstmt,\n    SQLSETPOSIROW      irow,\n    SQLUSMALLINT       fOption,\n    SQLUSMALLINT       fLock);\n\nSQLRETURN WINAPI  SQLTablePrivileges(\n    SQLHSTMT           hstmt,\n    SQLCHAR \t\t  *szCatalogName,\n    SQLSMALLINT        cbCatalogName,\n    SQLCHAR \t\t  *szSchemaName,\n    SQLSMALLINT        cbSchemaName,\n    SQLCHAR \t\t  *szTableName,\n    SQLSMALLINT        cbTableName);\n\nSQLRETURN WINAPI  SQLDrivers(\n    SQLHENV            henv,\n    SQLUSMALLINT       fDirection,\n    SQLCHAR \t\t  *szDriverDesc,\n    SQLSMALLINT        cbDriverDescMax,\n    SQLSMALLINT \t  *pcbDriverDesc,\n    SQLCHAR \t\t  *szDriverAttributes,\n    SQLSMALLINT        cbDrvrAttrMax,\n    SQLSMALLINT \t  *pcbDrvrAttr);\n\nSQLRETURN WINAPI  SQLBindParameter(\n    SQLHSTMT           hstmt,\n    SQLUSMALLINT       ipar,\n    SQLSMALLINT        fParamType,\n    SQLSMALLINT        fCType,\n    SQLSMALLINT        fSqlType,\n    SQLULEN\t       cbColDef,\n    SQLSMALLINT        ibScale,\n    SQLPOINTER         rgbValue,\n    SQLLEN\t       cbValueMax,\n    SQLLEN\t\t  *pcbValue);\n\n#ifdef ODBC_STD\n#define SQLAllocHandle  SQLAllocHandleStd\n#define SQLAllocEnv(phenv)  SQLAllocHandleStd(SQL_HANDLE_ENV, SQL_NULL_HANDLE, phenv)\n\n#define SQL_YEAR\t\t\t\t\t\tSQL_CODE_YEAR\n#define SQL_MONTH\t\t\t\t\t\tSQL_CODE_MONTH\n#define SQL_DAY\t\t\t\t\t\t\tSQL_CODE_DAY\n#define SQL_HOUR\t\t\t\t\t\tSQL_CODE_HOUR\n#define SQL_MINUTE\t\t\t\t\t\tSQL_CODE_MINUTE\n#define SQL_SECOND\t\t\t\t\t\tSQL_CODE_SECOND\n#define SQL_YEAR_TO_MONTH\t\t\t\tSQL_CODE_YEAR_TO_MONTH\n#define SQL_DAY_TO_HOUR\t\t\t\t\tSQL_CODE_DAY_TO_HOUR\n#define SQL_DAY_TO_MINUTE\t\t\t\tSQL_CODE_DAY_TO_MINUTE\n#define SQL_DAY_TO_SECOND\t\t\t\tSQL_CODE_DAY_TO_SECOND\n#define SQL_HOUR_TO_MINUTE\t\t\t\tSQL_CODE_HOUR_TO_MINUTE\n#define SQL_HOUR_TO_SECOND\t\t\t\tSQL_CODE_HOUR_TO_SECOND\n#define SQL_MINUTE_TO_SECOND\t\t\tSQL_CODE_MINUTE_TO_SECOND\n#endif\n\n#if (ODBCVER >= 0x0300)\nSQLRETURN WINAPI  SQLAllocHandleStd(\n\tSQLSMALLINT\t\tfHandleType,\n\tSQLHANDLE\t\thInput,\n\tSQLHANDLE\t   *phOutput);\n#endif\n\n#define SQL_DATABASE_NAME               16\n#define SQL_FD_FETCH_PREV               SQL_FD_FETCH_PRIOR\n#define SQL_FETCH_PREV                  SQL_FETCH_PRIOR\n#define SQL_CONCUR_TIMESTAMP            SQL_CONCUR_ROWVER\n#define SQL_SCCO_OPT_TIMESTAMP          SQL_SCCO_OPT_ROWVER\n#define SQL_CC_DELETE                   SQL_CB_DELETE\n#define SQL_CR_DELETE                   SQL_CB_DELETE\n#define SQL_CC_CLOSE                    SQL_CB_CLOSE\n#define SQL_CR_CLOSE                    SQL_CB_CLOSE\n#define SQL_CC_PRESERVE                 SQL_CB_PRESERVE\n#define SQL_CR_PRESERVE                 SQL_CB_PRESERVE\n#define SQL_SCROLL_FORWARD_ONLY         __MSABI_LONG(0)\n#define SQL_SCROLL_KEYSET_DRIVEN        (__MSABI_LONG(-1))\n#define SQL_SCROLL_DYNAMIC              (__MSABI_LONG(-2))\n#define SQL_SCROLL_STATIC               (__MSABI_LONG(-3))\n\nSQLRETURN WINAPI  SQLSetScrollOptions(\n    SQLHSTMT           hstmt,\n    SQLUSMALLINT       fConcurrency,\n    SQLLEN\t       crowKeyset,\n    SQLUSMALLINT       crowRowset);\n\n#define\t\tTRACE_VERSION\t1000\n\nRETCODE\t TraceOpenLogFile(LPWSTR,LPWSTR,DWORD);\nRETCODE\t TraceCloseLogFile(void);\nVOID\t TraceReturn(RETCODE,RETCODE);\nDWORD\t TraceVersion(void);\n\n/*#define TRACE_ON                      __MSABI_LONG(0x00000001)*/\n#define TRACE_VS_EVENT_ON               __MSABI_LONG(0x00000002)\n\nRETCODE\tTraceVSControl(DWORD);\n\n#define ODBC_VS_FLAG_UNICODE_ARG        __MSABI_LONG(0x00000001)\n#define ODBC_VS_FLAG_UNICODE_COR        __MSABI_LONG(0x00000002)\n#define ODBC_VS_FLAG_RETCODE            __MSABI_LONG(0x00000004)\n#define ODBC_VS_FLAG_STOP               __MSABI_LONG(0x00000008)\n\ntypedef struct tagODBC_VS_ARGS {\n\tconst GUID\t*pguidEvent;\n\tDWORD\tdwFlags;\n\tunion {\n\t\tWCHAR\t*wszArg;\n\t\tCHAR\t*szArg;\n\t} DUMMYUNIONNAME1;\n\tunion {\n\t\tWCHAR\t*wszCorrelation;\n\t\tCHAR\t*szCorrelation;\n\t} DUMMYUNIONNAME2;\n\tRETCODE\tRetCode;\n} ODBC_VS_ARGS, *PODBC_VS_ARGS;\n\nVOID\tFireVSDebugEvent(PODBC_VS_ARGS);\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/sqltypes.h",
    "content": "/*\n * Copyright (C) 1999 Xiang Li\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __SQLTYPES_H\n#define __SQLTYPES_H\n\n#ifndef ODBCVER\n#define ODBCVER\t0x0351\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef unsigned char   SQLCHAR;\n#ifdef WINE_UNICODE_NATIVE\ntypedef wchar_t         SQLWCHAR;\n#else\ntypedef unsigned short  SQLWCHAR;\n#endif\n#ifndef UNICODE\ntypedef SQLCHAR         SQLTCHAR;\n#else\ntypedef SQLWCHAR        SQLTCHAR;\n#endif\n\n#if (ODBCVER >= 0x0300)\ntypedef unsigned char   SQLDATE;\ntypedef unsigned char   SQLDECIMAL;\ntypedef double          SQLDOUBLE;\ntypedef double          SQLFLOAT;\n#endif\n\ntypedef int             SQLINTEGER;\n\n#if (ODBCVER >= 0x0300)\ntypedef unsigned char   SQLNUMERIC;\n#endif\n\ntypedef void *          SQLPOINTER;\n\n#if (ODBCVER >= 0x0300)\ntypedef float           SQLREAL;\n#endif\n\ntypedef signed short int   SQLSMALLINT;\ntypedef unsigned short  SQLUSMALLINT;\n\n#if (ODBCVER >= 0x0300)\ntypedef unsigned char   SQLTIME;\ntypedef unsigned char   SQLTIMESTAMP;\ntypedef unsigned char   SQLVARCHAR;\n#endif\n\ntypedef SQLSMALLINT     SQLRETURN;\n\n#if (ODBCVER >= 0x0300)\ntypedef void *SQLHANDLE;\ntypedef SQLHANDLE               SQLHENV;\ntypedef SQLHANDLE               SQLHDBC;\ntypedef SQLHANDLE               SQLHSTMT;\ntypedef SQLHANDLE               SQLHDESC;\n#else\ntypedef void *SQLHENV;\ntypedef void *SQLHDBC;\ntypedef void *SQLHSTMT;\n#endif\n\ntypedef signed char             SCHAR;\ntypedef SCHAR                   SQLSCHAR;\ntypedef int                     SDWORD;\ntypedef signed short int        SWORD;\ntypedef unsigned int            UDWORD;\ntypedef unsigned short int      UWORD;\ntypedef UDWORD                  SQLUINTEGER;\ntypedef signed long             SLONG;\ntypedef signed short            SSHORT;\ntypedef double                  SDOUBLE;\ntypedef double            \t\tLDOUBLE;\ntypedef float                   SFLOAT;\ntypedef void*              \t\tPTR;\ntypedef signed short            RETCODE;\ntypedef void*                   SQLHWND;\n\n#ifdef _WIN64\ntypedef INT64           SQLLEN;\ntypedef UINT64          SQLULEN;\ntypedef UINT64          SQLSETPOSIROW;\n#else\n#define SQLLEN          SQLINTEGER\n#define SQLULEN         SQLUINTEGER\n#define SQLSETPOSIROW   SQLUSMALLINT\n#endif\n\ntypedef SQLHANDLE          \t\tHENV;\ntypedef SQLHANDLE          \t\tHDBC;\ntypedef SQLHANDLE          \t\tHSTMT;\n\n#ifndef\t__SQLDATE\n#define\t__SQLDATE\ntypedef struct tagDATE_STRUCT\n{\n        SQLSMALLINT    year;\n        SQLUSMALLINT   month;\n        SQLUSMALLINT   day;\n} DATE_STRUCT;\n\n#if (ODBCVER >= 0x0300)\ntypedef DATE_STRUCT\tSQL_DATE_STRUCT;\n#endif\n\ntypedef struct tagTIME_STRUCT\n{\n        SQLUSMALLINT   hour;\n        SQLUSMALLINT   minute;\n        SQLUSMALLINT   second;\n} TIME_STRUCT;\n\n#if (ODBCVER >= 0x0300)\ntypedef TIME_STRUCT\tSQL_TIME_STRUCT;\n#endif\n\ntypedef struct tagTIMESTAMP_STRUCT\n{\n        SQLSMALLINT    year;\n        SQLUSMALLINT   month;\n        SQLUSMALLINT   day;\n        SQLUSMALLINT   hour;\n        SQLUSMALLINT   minute;\n        SQLUSMALLINT   second;\n        SQLUINTEGER    fraction;\n} TIMESTAMP_STRUCT;\n\n#if (ODBCVER >= 0x0300)\ntypedef TIMESTAMP_STRUCT\tSQL_TIMESTAMP_STRUCT;\n#endif\n\n\n#if (ODBCVER >= 0x0300)\ntypedef enum\n{\n\tSQL_IS_YEAR\t\t\t\t\t\t= 1,\n\tSQL_IS_MONTH\t\t\t\t\t= 2,\n\tSQL_IS_DAY\t\t\t\t\t\t= 3,\n\tSQL_IS_HOUR\t\t\t\t\t\t= 4,\n\tSQL_IS_MINUTE\t\t\t\t\t= 5,\n\tSQL_IS_SECOND\t\t\t\t\t= 6,\n\tSQL_IS_YEAR_TO_MONTH\t\t\t= 7,\n\tSQL_IS_DAY_TO_HOUR\t\t\t\t= 8,\n\tSQL_IS_DAY_TO_MINUTE\t\t\t= 9,\n\tSQL_IS_DAY_TO_SECOND\t\t\t= 10,\n\tSQL_IS_HOUR_TO_MINUTE\t\t\t= 11,\n\tSQL_IS_HOUR_TO_SECOND\t\t\t= 12,\n\tSQL_IS_MINUTE_TO_SECOND\t\t\t= 13\n} SQLINTERVAL;\n\n#endif\n\n#if (ODBCVER >= 0x0300)\ntypedef struct tagSQL_YEAR_MONTH\n{\n\t\tSQLUINTEGER\t\tyear;\n\t\tSQLUINTEGER\t\tmonth;\n} SQL_YEAR_MONTH_STRUCT;\n\ntypedef struct tagSQL_DAY_SECOND\n{\n\t\tSQLUINTEGER\t\tday;\n\t\tSQLUINTEGER\t\thour;\n\t\tSQLUINTEGER\t\tminute;\n\t\tSQLUINTEGER\t\tsecond;\n\t\tSQLUINTEGER\t\tfraction;\n} SQL_DAY_SECOND_STRUCT;\n\ntypedef struct tagSQL_INTERVAL_STRUCT\n{\n\tSQLINTERVAL\t\tinterval_type;\n\tSQLSMALLINT\t\tinterval_sign;\n\tunion {\n\t\tSQL_YEAR_MONTH_STRUCT\t\tyear_month;\n\t\tSQL_DAY_SECOND_STRUCT\t\tday_second;\n\t} intval;\n\n} SQL_INTERVAL_STRUCT;\n\n#endif\n\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define ODBCINT64\t__int64\n#define UODBCINT64\tunsigned __int64\n#ifdef ODBCINT64\ntypedef ODBCINT64\tSQLBIGINT;\ntypedef unsigned ODBCINT64\tSQLUBIGINT;\n#endif\n#endif\n\n#if (ODBCVER >= 0x0300)\n#define SQL_MAX_NUMERIC_LEN\t\t16\ntypedef struct tagSQL_NUMERIC_STRUCT\n{\n\tSQLCHAR\t\tprecision;\n\tSQLSCHAR\tscale;\n\tSQLCHAR\t\tsign;\t/* 1=pos 0=neg */\n\tSQLCHAR\t\tval[SQL_MAX_NUMERIC_LEN];\n} SQL_NUMERIC_STRUCT;\n#endif\n\n#if (ODBCVER >= 0x0350)\n#ifdef GUID_DEFINED\ntypedef GUID\tSQLGUID;\n#else\ntypedef struct  tagSQLGUID\n{\n    DWORD Data1;\n    WORD Data2;\n    WORD Data3;\n    BYTE Data4[ 8 ];\n} SQLGUID;\n#endif\n#endif\n\n\ntypedef SQLULEN BOOKMARK;\n\n#define SQL_WCHAR             (-8)\n#define SQL_C_WCHAR            SQL_WCHAR\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/sqlucode.h",
    "content": "/*\n * MS SQL Unicode Definitions\n *\n * Copyright (C) 2017 Daniel Lehman\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __SQLUCODE_H\n#define __SQLUCODE_H\n\n#include <sqlext.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nSQLRETURN WINAPI SQLConnectW(SQLHDBC ConnectionHandle,\n           SQLWCHAR *ServerName, SQLSMALLINT NameLength1,\n           SQLWCHAR *UserName, SQLSMALLINT NameLength2,\n           SQLWCHAR *Authentication, SQLSMALLINT NameLength3);\n\nSQLRETURN WINAPI SQLDescribeColW(SQLHSTMT StatementHandle,\n           SQLUSMALLINT ColumnNumber, SQLWCHAR *ColumnName,\n           SQLSMALLINT BufferLength, SQLSMALLINT *NameLength,\n           SQLSMALLINT *DataType, SQLULEN *ColumnSize,\n           SQLSMALLINT *DecimalDigits, SQLSMALLINT *Nullable);\n\nSQLRETURN WINAPI SQLExecDirectW(SQLHSTMT StatementHandle,\n           SQLWCHAR *StatementText, SQLINTEGER TextLength);\n\nSQLRETURN WINAPI SQLGetDiagRecW(SQLSMALLINT HandleType, SQLHANDLE Handle,\n           SQLSMALLINT RecNumber, SQLWCHAR *Sqlstate,\n           SQLINTEGER *NativeError, SQLWCHAR *MessageText,\n           SQLSMALLINT BufferLength, SQLSMALLINT *TextLength);\n\nSQLRETURN WINAPI SQLGetInfoW(SQLHDBC ConnectionHandle,\n           SQLUSMALLINT InfoType, SQLPOINTER InfoValue,\n           SQLSMALLINT BufferLength, SQLSMALLINT *StringLength);\n\nSQLRETURN WINAPI SQLPrepareW(SQLHSTMT StatementHandle,\n           SQLWCHAR *StatementText, SQLINTEGER TextLength);\n\nSQLRETURN WINAPI SQLSetStmtAttrW(SQLHSTMT StatementHandle,\n           SQLINTEGER Attribute, SQLPOINTER Value,\n           SQLINTEGER StringLength);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/srcrst.idl",
    "content": "/*\n * Copyright (C) 2013 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n[\n    object,\n    uuid(0c733a1e-2a1c-11ce-ade5-00aa0044773d),\n    pointer_default(unique)\n]\ninterface ISourcesRowset : IUnknown\n{\n    typedef DWORD DBSOURCETYPE;\n\n    enum DBSOURCETYPEENUM\n    {\n        DBSOURCETYPE_DATASOURCE     = 1,\n        DBSOURCETYPE_ENUMERATOR     = 2,\n    };\n\n    enum DBSOURCETYPEENUM20\n    {\n        DBSOURCETYPE_DATASOURCE_TDP = 1,\n        DBSOURCETYPE_DATASOURCE_MDP = 3,\n    };\n\n    enum DBSOURCETYPEENUM25\n    {\n        DBSOURCETYPE_BINDER         = 4,\n    };\n\n    [local]\n    HRESULT GetSourcesRowset([in] IUnknown * pUnkOuter, [in] REFIID riid, [in] ULONG cPropertySets,\n        [in, out] DBPROPSET rgProperties[], [out] IUnknown **ppSourcesRowset);\n\n    [call_as(GetSourcesRowset)]\n    HRESULT RemoteGetSourcesRowset([in] IUnknown * pUnkOuter, [in] REFIID riid, [in] ULONG cPropertySets,\n        [in] DBPROPSET * rgProperties, [out] IUnknown **ppSourcesRowset, [in] ULONG cTotalProps,\n        [out] DBPROPSTATUS *rgPropStatus, [out] IErrorInfo **ppErrorInfoRem);\n}\n"
  },
  {
    "path": "wine/windows/srrestoreptapi.h",
    "content": "/*\n * System Restore definitions\n *\n * Copyright 2008 Paul Vriens\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_SRRESTOREPTAPI_H\n#define __WINE_SRRESTOREPTAPI_H\n\n/* Event types */\n#define BEGIN_NESTED_SYSTEM_CHANGE 102\n#define END_NESTED_SYSTEM_CHANGE   103\n\n/* Restore point types */\n#define APPLICATION_INSTALL          0\n\n#define MAX_DESC                    64\n#define MAX_DESC_W                  256\n\n#pragma pack(1)\n\ntypedef struct _RESTOREPTINFOA {\n    DWORD dwEventType;\n    DWORD dwRestorePtType;\n    INT64 llSequenceNumber;\n    CHAR  szDescription[MAX_DESC];\n} RESTOREPOINTINFOA, *PRESTOREPOINTINFOA;\n\ntypedef struct _RESTOREPTINFOW {\n    DWORD dwEventType;\n    DWORD dwRestorePtType;\n    INT64 llSequenceNumber;\n    WCHAR szDescription[MAX_DESC_W];\n} RESTOREPOINTINFOW, *PRESTOREPOINTINFOW;\n\ntypedef struct _RESTOREPTINFOEX {\n    FILETIME ftCreation;\n    DWORD dwEventType;\n    DWORD dwRestorePtType;\n    DWORD dwRPNum;\n    WCHAR szDescription[MAX_DESC_W];\n} RESTOREPOINTINFOEX, *PRESTOREPOINTINFOEX;\n\ntypedef struct _SMGRSTATUS {\n    DWORD nStatus;\n    INT64 llSequenceNumber;\n} STATEMGRSTATUS, *PSTATEMGRSTATUS;\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nBOOL WINAPI SRSetRestorePointA(RESTOREPOINTINFOA *, STATEMGRSTATUS *);\nBOOL WINAPI SRSetRestorePointW(RESTOREPOINTINFOW *, STATEMGRSTATUS *);\n#define     SRSetRestorePoint WINELIB_NAME_AW(SRSetRestorePoint)\n\nDWORD WINAPI SRRemoveRestorePoint(DWORD);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* !defined(__WINE_SRRESTOREPTAPI_H) */\n"
  },
  {
    "path": "wine/windows/sspi.h",
    "content": "/*\n * Copyright (C) 2004 Juan Lang\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __WINE_SSPI_H__\n#define __WINE_SSPI_H__\n\n/* FIXME: #include <sdkddkver.h> */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define SEC_ENTRY __stdcall\n\ntypedef WCHAR SEC_WCHAR;\ntypedef CHAR  SEC_CHAR;\n\n#ifndef __SECSTATUS_DEFINED__\n#define __SECSTATUS_DEFINED__\ntypedef LONG SECURITY_STATUS;\n#endif\n\n#ifdef UNICODE\ntypedef SEC_WCHAR * SECURITY_PSTR;\ntypedef const SEC_WCHAR *  SECURITY_PCSTR;\n#else\ntypedef SEC_CHAR * SECURITY_PSTR;\ntypedef const SEC_CHAR *  SECURITY_PCSTR;\n#endif\n\n#ifndef __SECHANDLE_DEFINED__\n#define __SECHANDLE_DEFINED__\ntypedef struct _SecHandle\n{\n    ULONG_PTR dwLower;\n    ULONG_PTR dwUpper;\n} SecHandle, *PSecHandle;\n#endif\n\n#define SecInvalidateHandle(x) do { \\\n ((PSecHandle)(x))->dwLower = ((ULONG_PTR)((INT_PTR)-1)); \\\n ((PSecHandle)(x))->dwUpper = ((ULONG_PTR)((INT_PTR)-1)); \\\n } while (0)\n\n#define SecIsValidHandle(x) \\\n ((((PSecHandle)(x))->dwLower != ((ULONG_PTR)(INT_PTR)-1)) && \\\n (((PSecHandle)(x))->dwUpper != ((ULONG_PTR)(INT_PTR)-1)))\n\ntypedef SecHandle CredHandle;\ntypedef PSecHandle PCredHandle;\n\n#ifndef __WINE_CTXTHANDLE_DEFINED__\n#define __WINE_CTXTHANDLE_DEFINED__\ntypedef SecHandle CtxtHandle;\ntypedef PSecHandle PCtxtHandle;\n#endif\n\ntypedef struct _SECURITY_INTEGER\n{\n    ULONG LowPart;\n    LONG  HighPart;\n} SECURITY_INTEGER, *PSECURITY_INTEGER;\ntypedef SECURITY_INTEGER TimeStamp, *PTimeStamp;\n\n#ifndef __UNICODE_STRING_DEFINED__\n#define __UNICODE_STRING_DEFINED__\ntypedef struct _UNICODE_STRING {\n  USHORT Length;        /* bytes */\n  USHORT MaximumLength; /* bytes */\n  PWSTR  Buffer;\n} UNICODE_STRING, *PUNICODE_STRING;\n#endif\n\ntypedef UNICODE_STRING SECURITY_STRING, *PSECURITY_STRING;\n\n#define SSPIPFC_CREDPROV_DO_NOT_SAVE 0x00000001\n#define SSPIPFC_NO_CHECKBOX          0x00000002\n\ntypedef void *PSEC_WINNT_AUTH_IDENTITY_OPAQUE;\n\nSECURITY_STATUS SEC_ENTRY SspiEncodeAuthIdentityAsStrings(\n    PSEC_WINNT_AUTH_IDENTITY_OPAQUE, PCWSTR *, PCWSTR *, PCWSTR *);\n\nSECURITY_STATUS SEC_ENTRY SspiEncodeStringsAsAuthIdentity(\n    PCWSTR, PCWSTR, PCWSTR, PSEC_WINNT_AUTH_IDENTITY_OPAQUE *);\n\nSECURITY_STATUS SEC_ENTRY SspiPrepareForCredWrite(\n    PSEC_WINNT_AUTH_IDENTITY_OPAQUE, PCWSTR, PULONG, PCWSTR*, PCWSTR*, PUCHAR*, PULONG);\n\nULONG SEC_ENTRY SspiPromptForCredentialsA(PCSTR, void *,\n    ULONG, PCSTR, PSEC_WINNT_AUTH_IDENTITY_OPAQUE,\n    PSEC_WINNT_AUTH_IDENTITY_OPAQUE *, int *, ULONG);\nULONG SEC_ENTRY SspiPromptForCredentialsW(PCWSTR, void *,\n    ULONG, PCWSTR, PSEC_WINNT_AUTH_IDENTITY_OPAQUE,\n    PSEC_WINNT_AUTH_IDENTITY_OPAQUE *, int *, ULONG);\n#define SspiPromptForCredentials WINELIB_NAME_AW(SspiPromptForCredentials)\n\nvoid SEC_ENTRY SspiFreeAuthIdentity(PSEC_WINNT_AUTH_IDENTITY_OPAQUE);\nvoid SEC_ENTRY SspiLocalFree(void *);\nvoid SEC_ENTRY SspiZeroAuthIdentity(PSEC_WINNT_AUTH_IDENTITY_OPAQUE);\n\ntypedef struct _SecPkgInfoA\n{\n    ULONG     fCapabilities;\n    USHORT    wVersion;\n    USHORT    wRPCID;\n    ULONG     cbMaxToken;\n    SEC_CHAR *Name;\n    SEC_CHAR *Comment;\n} SecPkgInfoA, *PSecPkgInfoA;\n\ntypedef struct _SecPkgInfoW\n{\n    ULONG      fCapabilities;\n    USHORT     wVersion;\n    USHORT     wRPCID;\n    ULONG      cbMaxToken;\n    SEC_WCHAR *Name;\n    SEC_WCHAR *Comment;\n} SecPkgInfoW, *PSecPkgInfoW;\n\ntypedef struct _SECURITY_PACKAGE_OPTIONS {\n  ULONG Size;\n  ULONG Type;\n  ULONG Flags;\n  ULONG SignatureSize;\n  void *Signature;\n} SECURITY_PACKAGE_OPTIONS, *PSECURITY_PACKAGE_OPTIONS;\n\nSECURITY_STATUS WINAPI AddSecurityPackageA(LPSTR,SECURITY_PACKAGE_OPTIONS*);\nSECURITY_STATUS WINAPI AddSecurityPackageW(LPWSTR,SECURITY_PACKAGE_OPTIONS*);\n#define AddSecurityPackage WINELIB_NAME_AW(AddSecurityPackage)\n\n#define SecPkgInfo WINELIB_NAME_AW(SecPkgInfo)\n#define PSecPkgInfo WINELIB_NAME_AW(PSecPkgInfo)\n\n/* fCapabilities field of SecPkgInfo */\n#define SECPKG_FLAG_INTEGRITY              0x00000001\n#define SECPKG_FLAG_PRIVACY                0x00000002\n#define SECPKG_FLAG_TOKEN_ONLY             0x00000004\n#define SECPKG_FLAG_DATAGRAM               0x00000008\n#define SECPKG_FLAG_CONNECTION             0x00000010\n#define SECPKG_FLAG_MULTI_REQUIRED         0x00000020\n#define SECPKG_FLAG_CLIENT_ONLY            0x00000040\n#define SECPKG_FLAG_EXTENDED_ERROR         0x00000080\n#define SECPKG_FLAG_IMPERSONATION          0x00000100\n#define SECPKG_FLAG_ACCEPT_WIN32_NAME      0x00000200\n#define SECPKG_FLAG_STREAM                 0x00000400\n#define SECPKG_FLAG_NEGOTIABLE             0x00000800\n#define SECPKG_FLAG_GSS_COMPATIBLE         0x00001000\n#define SECPKG_FLAG_LOGON                  0x00002000\n#define SECPKG_FLAG_ASCII_BUFFERS          0x00004000\n#define SECPKG_FLAG_FRAGMENT               0x00008000\n#define SECPKG_FLAG_MUTUAL_AUTH            0x00010000\n#define SECPKG_FLAG_DELEGATION             0x00020000\n#define SECPKG_FLAG_READONLY_WITH_CHECKSUM 0x00040000\n#define SECPKG_FLAG_RESTRICTED_TOKENS      0x00080000\n#define SECPKG_FLAG_NEGO_EXTENDER          0x00100000\n#define SECPKG_FLAG_NEGOTIABLE2            0x00200000\n#define SECPKG_FLAG_APPCONTAINER_PASSTHROUGH 0x00400000\n#define SECPKG_FLAG_APPCONTAINER_CHECKS    0x00800000\n\n#define SECPKG_ID_NONE  0xffff\n\ntypedef struct _SecBuffer\n{\n    ULONG cbBuffer;\n    ULONG BufferType;\n    PVOID pvBuffer;\n} SecBuffer, *PSecBuffer;\n\n/* values for BufferType */\n#define SECBUFFER_EMPTY               0\n#define SECBUFFER_DATA                1\n#define SECBUFFER_TOKEN               2\n#define SECBUFFER_PKG_PARAMS          3\n#define SECBUFFER_MISSING             4\n#define SECBUFFER_EXTRA               5\n#define SECBUFFER_STREAM_TRAILER      6\n#define SECBUFFER_STREAM_HEADER       7\n#define SECBUFFER_NEGOTIATION_INFO    8\n#define SECBUFFER_PADDING             9\n#define SECBUFFER_STREAM             10\n#define SECBUFFER_MECHLIST           11\n#define SECBUFFER_MECHLIST_SIGNATURE 12\n#define SECBUFFER_TARGET             13\n#define SECBUFFER_CHANNEL_BINDINGS   14\n\n#define SECBUFFER_ATTRMASK               0xf0000000\n#define SECBUFFER_READONLY               0x80000000\n#define SECBUFFER_READONLY_WITH_CHECKSUM 0x10000000\n#define SECBUFFER_RESERVED               0x60000000\n\ntypedef struct _SecBufferDesc\n{\n    ULONG      ulVersion;\n    ULONG      cBuffers;\n    PSecBuffer pBuffers;\n} SecBufferDesc, *PSecBufferDesc;\n\n/* values for ulVersion */\n#define SECBUFFER_VERSION 0\n\ntypedef void (SEC_ENTRY *SEC_GET_KEY_FN)(void *Arg, void *Principal,\n ULONG KeyVer, void **Key, SECURITY_STATUS *Status);\n\nSECURITY_STATUS SEC_ENTRY EnumerateSecurityPackagesA(PULONG pcPackages,\n PSecPkgInfoA *ppPackageInfo);\nSECURITY_STATUS SEC_ENTRY EnumerateSecurityPackagesW(PULONG pcPackages,\n PSecPkgInfoW *ppPackageInfo);\n#define EnumerateSecurityPackages WINELIB_NAME_AW(EnumerateSecurityPackages)\n\ntypedef SECURITY_STATUS (SEC_ENTRY *ENUMERATE_SECURITY_PACKAGES_FN_A)(PULONG,\n PSecPkgInfoA *);\ntypedef SECURITY_STATUS (SEC_ENTRY *ENUMERATE_SECURITY_PACKAGES_FN_W)(PULONG,\n PSecPkgInfoW *);\n#define ENUMERATE_SECURITY_PACKAGES_FN WINELIB_NAME_AW(ENUMERATE_SECURITY_PACKAGES_FN_)\n\nSECURITY_STATUS SEC_ENTRY QueryCredentialsAttributesA(\n PCredHandle phCredential, ULONG ulAttribute, void *pBuffer);\nSECURITY_STATUS SEC_ENTRY QueryCredentialsAttributesW(\n PCredHandle phCredential, ULONG ulAttribute, void *pBuffer);\n#define QueryCredentialsAttributes WINELIB_NAME_AW(QueryCredentialsAttributes)\n\ntypedef SECURITY_STATUS (SEC_ENTRY *QUERY_CREDENTIALS_ATTRIBUTES_FN_A)\n (PCredHandle, ULONG, PVOID);\ntypedef SECURITY_STATUS (SEC_ENTRY *QUERY_CREDENTIALS_ATTRIBUTES_FN_W)\n (PCredHandle, ULONG, PVOID);\n#define QUERY_CREDENTIALS_ATTRIBUTES_FN WINELIB_NAME_AW(QUERY_CREDENTIALS_ATTRIBUTES_FN_)\n\ntypedef struct _SEC_CHANNEL_BINDINGS {\n    ULONG dwInitiatorAddrType;\n    ULONG cbInitiatorLength;\n    ULONG dwInitiatorOffset;\n    ULONG dwAcceptorAddrType;\n    ULONG cbAcceptorLength;\n    ULONG dwAcceptorOffset;\n    ULONG cbApplicationDataLength;\n    ULONG dwApplicationDataOffset;\n} SEC_CHANNEL_BINDINGS, *PSEC_CHANNEL_BINDINGS;\n\n/* values for QueryCredentialsAttributes ulAttribute */\n#define SECPKG_CRED_ATTR_NAMES 1\n\n/* types for QueryCredentialsAttributes */\ntypedef struct _SecPkgCredentials_NamesA\n{\n    SEC_CHAR *sUserName;\n} SecPkgCredentials_NamesA, *PSecPkgCredentials_NamesA;\n\ntypedef struct _SecPkgCredentials_NamesW\n{\n    SEC_WCHAR *sUserName;\n} SecPkgCredentials_NamesW, *PSecPkgCredentials_NamesW;\n\n#define SecPkgCredentials_Names WINELIB_NAME_AW(SecPkgCredentials_Names)\n\nSECURITY_STATUS SEC_ENTRY AcquireCredentialsHandleA(\n SEC_CHAR *pszPrincipal, SEC_CHAR *pszPackage, ULONG fCredentialsUse,\n PLUID pvLogonID, PVOID pAuthData, SEC_GET_KEY_FN pGetKeyFn,\n PVOID pvGetKeyArgument, PCredHandle phCredential, PTimeStamp ptsExpiry);\nSECURITY_STATUS SEC_ENTRY AcquireCredentialsHandleW(\n SEC_WCHAR *pszPrincipal, SEC_WCHAR *pszPackage, ULONG fCredentialsUse,\n PLUID pvLogonID, PVOID pAuthData, SEC_GET_KEY_FN pGetKeyFn,\n PVOID pvGetKeyArgument, PCredHandle phCredential, PTimeStamp ptsExpiry);\n#define AcquireCredentialsHandle WINELIB_NAME_AW(AcquireCredentialsHandle)\n\n/* flags for fCredentialsUse */\n#define SECPKG_CRED_INBOUND  0x00000001\n#define SECPKG_CRED_OUTBOUND 0x00000002\n#define SECPKG_CRED_BOTH     (SECPKG_CRED_INBOUND | SECPKG_CRED_OUTBOUND)\n#define SECPKG_CRED_DEFAULT  0x00000004\n#define SECPKG_CRED_RESERVED 0xf0000000\n\ntypedef SECURITY_STATUS (SEC_ENTRY *ACQUIRE_CREDENTIALS_HANDLE_FN_A)(\n SEC_CHAR *, SEC_CHAR *, ULONG, PLUID, PVOID, SEC_GET_KEY_FN, PVOID,\n PCredHandle, PTimeStamp);\ntypedef SECURITY_STATUS (SEC_ENTRY *ACQUIRE_CREDENTIALS_HANDLE_FN_W)(\n SEC_WCHAR *, SEC_WCHAR *, ULONG, PLUID, PVOID, SEC_GET_KEY_FN, PVOID,\n PCredHandle, PTimeStamp);\n#define ACQUIRE_CREDENTIALS_HANDLE_FN WINELIB_NAME_AW(ACQUIRE_CREDENTIALS_HANDLE_FN_)\n\nSECURITY_STATUS SEC_ENTRY FreeContextBuffer(PVOID pv);\n\ntypedef SECURITY_STATUS (SEC_ENTRY *FREE_CONTEXT_BUFFER_FN)(PVOID);\n\nSECURITY_STATUS SEC_ENTRY FreeCredentialsHandle(PCredHandle\n phCredential);\n\n#define FreeCredentialHandle FreeCredentialsHandle\n\ntypedef SECURITY_STATUS (SEC_ENTRY *FREE_CREDENTIALS_HANDLE_FN)(PCredHandle);\n\nSECURITY_STATUS SEC_ENTRY InitializeSecurityContextA(\n PCredHandle phCredential, PCtxtHandle phContext,\n SEC_CHAR *pszTargetName, ULONG fContextReq,\n ULONG Reserved1, ULONG TargetDataRep, PSecBufferDesc pInput,\n ULONG Reserved2, PCtxtHandle phNewContext, PSecBufferDesc pOutput,\n ULONG *pfContextAttr, PTimeStamp ptsExpiry);\nSECURITY_STATUS SEC_ENTRY InitializeSecurityContextW(\n PCredHandle phCredential, PCtxtHandle phContext,\n SEC_WCHAR *pszTargetName, ULONG fContextReq,\n ULONG Reserved1, ULONG TargetDataRep, PSecBufferDesc pInput,\n ULONG Reserved2, PCtxtHandle phNewContext, PSecBufferDesc pOutput,\n ULONG *pfContextAttr, PTimeStamp ptsExpiry);\n#define InitializeSecurityContext WINELIB_NAME_AW(InitializeSecurityContext)\n\ntypedef SECURITY_STATUS (SEC_ENTRY *INITIALIZE_SECURITY_CONTEXT_FN_A)\n (PCredHandle, PCtxtHandle, SEC_CHAR *, ULONG, ULONG, ULONG, PSecBufferDesc,\n ULONG, PCtxtHandle, PSecBufferDesc, ULONG *, PTimeStamp);\ntypedef SECURITY_STATUS (SEC_ENTRY *INITIALIZE_SECURITY_CONTEXT_FN_W)\n (PCredHandle, PCtxtHandle, SEC_WCHAR *, ULONG, ULONG, ULONG, PSecBufferDesc,\n ULONG, PCtxtHandle, PSecBufferDesc, ULONG *, PTimeStamp);\n#define INITIALIZE_SECURITY_CONTEXT_FN WINELIB_NAME_AW(INITIALIZE_SECURITY_CONTEXT_FN_)\n\n/* flags for InitializeSecurityContext fContextReq and pfContextAttr */\n#define ISC_REQ_DELEGATE               0x00000001\n#define ISC_REQ_MUTUAL_AUTH            0x00000002\n#define ISC_REQ_REPLAY_DETECT          0x00000004\n#define ISC_REQ_SEQUENCE_DETECT        0x00000008\n#define ISC_REQ_CONFIDENTIALITY        0x00000010\n#define ISC_REQ_USE_SESSION_KEY        0x00000020\n#define ISC_REQ_PROMPT_FOR_CREDS       0x00000040\n#define ISC_REQ_USE_SUPPLIED_CREDS     0x00000080\n#define ISC_REQ_ALLOCATE_MEMORY        0x00000100\n#define ISC_REQ_USE_DCE_STYLE          0x00000200\n#define ISC_REQ_DATAGRAM               0x00000400\n#define ISC_REQ_CONNECTION             0x00000800\n#define ISC_REQ_CALL_LEVEL             0x00001000\n#define ISC_REQ_FRAGMENT_SUPPLIED      0x00002000\n#define ISC_REQ_EXTENDED_ERROR         0x00004000\n#define ISC_REQ_STREAM                 0x00008000\n#define ISC_REQ_INTEGRITY              0x00010000\n#define ISC_REQ_IDENTIFY               0x00020000\n#define ISC_REQ_NULL_SESSION           0x00040000\n#define ISC_REQ_MANUAL_CRED_VALIDATION 0x00080000\n#define ISC_REQ_RESERVED1              0x00100000\n#define ISC_REQ_FRAGMENT_TO_FIT        0x00200000\n\n#define ISC_RET_DELEGATE               0x00000001\n#define ISC_RET_MUTUAL_AUTH            0x00000002\n#define ISC_RET_REPLAY_DETECT          0x00000004\n#define ISC_RET_SEQUENCE_DETECT        0x00000008\n#define ISC_RET_CONFIDENTIALITY        0x00000010\n#define ISC_RET_USE_SESSION_KEY        0x00000020\n#define ISC_RET_USED_COLLECTED_CREDS   0x00000040\n#define ISC_RET_USED_SUPPLIED_CREDS    0x00000080\n#define ISC_RET_ALLOCATED_MEMORY       0x00000100\n#define ISC_RET_USED_DCE_STYLE         0x00000200\n#define ISC_RET_DATAGRAM               0x00000400\n#define ISC_RET_CONNECTION             0x00000800\n#define ISC_RET_INTERMEDIATE_RETURN    0x00001000\n#define ISC_RET_CALL_LEVEL             0x00002000\n#define ISC_RET_EXTENDED_ERROR         0x00004000\n#define ISC_RET_STREAM                 0x00008000\n#define ISC_RET_INTEGRITY              0x00010000\n#define ISC_RET_IDENTIFY               0x00020000\n#define ISC_RET_NULL_SESSION           0x00040000\n#define ISC_RET_MANUAL_CRED_VALIDATION 0x00080000\n#define ISC_RET_RESERVED1              0x00100000\n#define ISC_RET_FRAGMENT_ONLY          0x00200000\n\nSECURITY_STATUS SEC_ENTRY AcceptSecurityContext(\n PCredHandle phCredential, PCtxtHandle phContext, PSecBufferDesc pInput,\n ULONG fContextReq, ULONG TargetDataRep,\n PCtxtHandle phNewContext, PSecBufferDesc pOutput,\n ULONG *pfContextAttr, PTimeStamp ptsExpiry);\n\ntypedef SECURITY_STATUS (SEC_ENTRY *ACCEPT_SECURITY_CONTEXT_FN)(PCredHandle,\n PCtxtHandle, PSecBufferDesc, ULONG, ULONG, PCtxtHandle,\n PSecBufferDesc, ULONG *, PTimeStamp);\n\n/* flags for AcceptSecurityContext fContextReq and pfContextAttr */\n#define ASC_REQ_DELEGATE               0x00000001\n#define ASC_REQ_MUTUAL_AUTH            0x00000002\n#define ASC_REQ_REPLAY_DETECT          0x00000004\n#define ASC_REQ_SEQUENCE_DETECT        0x00000008\n#define ASC_REQ_CONFIDENTIALITY        0x00000010\n#define ASC_REQ_USE_SESSION_KEY        0x00000020\n#define ASC_REQ_ALLOCATE_MEMORY        0x00000100\n#define ASC_REQ_USE_DCE_STYLE          0x00000200\n#define ASC_REQ_DATAGRAM               0x00000400\n#define ASC_REQ_CONNECTION             0x00000800\n#define ASC_REQ_CALL_LEVEL             0x00001000\n#define ASC_REQ_FRAGMENT_SUPPLIED      0x00002000\n#define ASC_REQ_EXTENDED_ERROR         0x00008000\n#define ASC_REQ_STREAM                 0x00010000\n#define ASC_REQ_INTEGRITY              0x00020000\n#define ASC_REQ_LICENSING              0x00040000\n#define ASC_REQ_IDENTIFY               0x00080000\n#define ASC_REQ_ALLOW_NULL_SESSION     0x00100000\n#define ASC_REQ_ALLOW_NON_USER_LOGONS  0x00200000\n#define ASC_REQ_ALLOW_CONTEXT_REPLAY   0x00400000\n#define ASC_REQ_FRAGMENT_TO_FIT        0x00800000\n#define ASC_REQ_FRAGMENT_NO_TOKEN      0x01000000\n\n#define ASC_RET_DELEGATE               0x00000001\n#define ASC_RET_MUTUAL_AUTH            0x00000002\n#define ASC_RET_REPLAY_DETECT          0x00000004\n#define ASC_RET_SEQUENCE_DETECT        0x00000008\n#define ASC_RET_CONFIDENTIALITY        0x00000010\n#define ASC_RET_USE_SESSION_KEY        0x00000020\n#define ASC_RET_ALLOCATED_MEMORY       0x00000100\n#define ASC_RET_USED_DCE_STYLE         0x00000200\n#define ASC_RET_DATAGRAM               0x00000400\n#define ASC_RET_CONNECTION             0x00000800\n#define ASC_RET_CALL_LEVEL             0x00002000\n#define ASC_RET_THIRD_LEG_FAILED       0x00004000\n#define ASC_RET_EXTENDED_ERROR         0x00008000\n#define ASC_RET_STREAM                 0x00010000\n#define ASC_RET_INTEGRITY              0x00020000\n#define ASC_RET_LICENSING              0x00040000\n#define ASC_RET_IDENTIFY               0x00080000\n#define ASC_RET_NULL_SESSION           0x00100000\n#define ASC_RET_ALLOW_NON_USER_LOGONS  0x00200000\n#define ASC_RET_ALLOW_CONTEXT_REPLAY   0x00400000\n#define ASC_RET_FRAGMENT_ONLY          0x00800000\n#define ASC_RET_NO_TOKEN               0x01000000\n\n/* values for TargetDataRep */\n#define SECURITY_NATIVE_DREP  0x00000010\n#define SECURITY_NETWORK_DREP 0x00000000\n\nSECURITY_STATUS SEC_ENTRY CompleteAuthToken(PCtxtHandle phContext,\n PSecBufferDesc pToken);\n\ntypedef SECURITY_STATUS (SEC_ENTRY *COMPLETE_AUTH_TOKEN_FN)(PCtxtHandle,\n PSecBufferDesc);\n\nSECURITY_STATUS SEC_ENTRY DeleteSecurityContext(PCtxtHandle phContext);\n\ntypedef SECURITY_STATUS (SEC_ENTRY *DELETE_SECURITY_CONTEXT_FN)(PCtxtHandle);\n\nSECURITY_STATUS SEC_ENTRY ApplyControlToken(PCtxtHandle phContext,\n PSecBufferDesc pInput);\n\ntypedef SECURITY_STATUS (SEC_ENTRY *APPLY_CONTROL_TOKEN_FN)(PCtxtHandle,\n PSecBufferDesc);\n\nSECURITY_STATUS SEC_ENTRY QueryContextAttributesA(PCtxtHandle phContext,\n ULONG ulAttribute, void *pBuffer);\nSECURITY_STATUS SEC_ENTRY QueryContextAttributesW(PCtxtHandle phContext,\n ULONG ulAttribute, void *pBuffer);\n#define QueryContextAttributes WINELIB_NAME_AW(QueryContextAttributes)\n\ntypedef SECURITY_STATUS (SEC_ENTRY *QUERY_CONTEXT_ATTRIBUTES_FN_A)(PCtxtHandle,\n ULONG, void *);\ntypedef SECURITY_STATUS (SEC_ENTRY *QUERY_CONTEXT_ATTRIBUTES_FN_W)(PCtxtHandle,\n ULONG, void *);\n#define QUERY_CONTEXT_ATTRIBUTES_FN WINELIB_NAME_AW(QUERY_CONTEXT_ATTRIBUTES_FN_)\n\n/* values for QueryContextAttributes/SetContextAttributes ulAttribute */\n#define SECPKG_ATTR_SIZES               0\n#define SECPKG_ATTR_NAMES               1\n#define SECPKG_ATTR_LIFESPAN            2\n#define SECPKG_ATTR_DCE_INFO            3\n#define SECPKG_ATTR_STREAM_SIZES        4\n#define SECPKG_ATTR_KEY_INFO            5\n#define SECPKG_ATTR_AUTHORITY           6\n#define SECPKG_ATTR_PROTO_INFO          7\n#define SECPKG_ATTR_PASSWORD_EXPIRY     8\n#define SECPKG_ATTR_SESSION_KEY         9\n#define SECPKG_ATTR_PACKAGE_INFO       10\n#define SECPKG_ATTR_USER_FLAGS         11\n#define SECPKG_ATTR_NEGOTIATION_INFO   12\n#define SECPKG_ATTR_NATIVE_NAMES       13\n#define SECPKG_ATTR_FLAGS              14\n#define SECPKG_ATTR_USE_VALIDATED      15\n#define SECPKG_ATTR_CREDENTIAL_NAME    16\n#define SECPKG_ATTR_TARGET_INFORMATION 17\n#define SECPKG_ATTR_ACCESS_TOKEN       18\n#define SECPKG_ATTR_TARGET             19\n#define SECPKG_ATTR_AUTHENTICATION_ID  20\n#define SECPKG_ATTR_LOGOFF_TIME        21\n#define SECPKG_ATTR_NEGO_KEYS          22\n#define SECPKG_ATTR_PROMPTING_NEEDED   24\n#define SECPKG_ATTR_UNIQUE_BINDINGS    25\n#define SECPKG_ATTR_ENDPOINT_BINDINGS  26\n#define SECPKG_ATTR_CLIENT_SPECIFIED_TARGET  27\n#define SECPKG_ATTR_LAST_CLIENT_TOKEN_STATUS 30\n#define SECPKG_ATTR_NEGO_PKG_INFO      31\n#define SECPKG_ATTR_NEGO_STATUS        32\n#define SECPKG_ATTR_CONTEXT_DELETED    33\n\n#define SECPKG_ATTR_SUBJECT_SECURITY_ATTRIBUTES 128\n#define SECPKG_ATTR_NEGO_INFO_FLAG_NO_KERBEROS 0x1\n#define SECPKG_ATTR_NEGO_INFO_FLAG_NO_NTLM     0x2\n\n/* types for QueryContextAttributes/SetContextAttributes */\n\ntypedef struct _SecPkgContext_Sizes\n{\n    ULONG cbMaxToken;\n    ULONG cbMaxSignature;\n    ULONG cbBlockSize;\n    ULONG cbSecurityTrailer;\n} SecPkgContext_Sizes, *PSecPkgContext_Sizes;\n\ntypedef struct _SecPkgContext_StreamSizes\n{\n    ULONG cbHeader;\n    ULONG cbTrailer;\n    ULONG cbMaximumMessage;\n    ULONG cbBuffers;\n    ULONG cbBlockSize;\n} SecPkgContext_StreamSizes, *PSecPkgContext_StreamSizes;\n\ntypedef struct _SecPkgContext_NamesA\n{\n    SEC_CHAR *sUserName;\n} SecPkgContext_NamesA, *PSecPkgContext_NamesA;\n\ntypedef struct _SecPkgContext_NamesW\n{\n    SEC_WCHAR *sUserName;\n} SecPkgContext_NamesW, *PSecPkgContext_NamesW;\n\n#define SecPkgContext_Names WINELIB_NAME_AW(SecPkgContext_Names)\n#define PSecPkgContext_Names WINELIB_NAME_AW(PSecPkgContext_Names)\n\ntypedef struct _SecPkgContext_Lifespan\n{\n    TimeStamp tsStart;\n    TimeStamp tsExpiry;\n} SecPkgContext_Lifespan, *PSecPkgContext_Lifespan;\n\ntypedef struct _SecPkgContext_DceInfo\n{\n    ULONG AuthzSvc;\n    PVOID pPac;\n} SecPkgContext_DceInfo, *PSecPkgContext_DceInfo;\n\ntypedef struct _SecPkgContext_KeyInfoA\n{\n    SEC_CHAR *sSignatureAlgorithmName;\n    SEC_CHAR *sEncryptAlgorithmName;\n    ULONG     KeySize;\n    ULONG     SignatureAlgorithm;\n    ULONG     EncryptAlgorithm;\n} SecPkgContext_KeyInfoA, *PSecPkgContext_KeyInfoA;\n\ntypedef struct _SecPkgContext_KeyInfoW\n{\n    SEC_WCHAR *sSignatureAlgorithmName;\n    SEC_WCHAR *sEncryptAlgorithmName;\n    ULONG      KeySize;\n    ULONG      SignatureAlgorithm;\n    ULONG      EncryptAlgorithm;\n} SecPkgContext_KeyInfoW, *PSecPkgContext_KeyInfoW;\n\n#define SecPkgContext_KeyInfo WINELIB_NAME_AW(SecPkgContext_KeyInfo)\n#define PSecPkgContext_KeyInfo WINELIB_NAME_AW(PSecPkgContext_KeyInfo)\n\ntypedef struct _SecPkgContext_AuthorityA\n{\n    SEC_CHAR *sAuthorityName;\n} SecPkgContext_AuthorityA, *PSecPkgContext_AuthorityA;\n\ntypedef struct _SecPkgContext_AuthorityW\n{\n    SEC_WCHAR *sAuthorityName;\n} SecPkgContext_AuthorityW, *PSecPkgContext_AuthorityW;\n\n#define SecPkgContext_Authority WINELIB_NAME_AW(SecPkgContext_Authority)\n#define PSecPkgContext_Authority WINELIB_NAME_AW(PSecPkgContext_Authority)\n\ntypedef struct _SecPkgContext_ProtoInfoA\n{\n    SEC_CHAR *sProtocolName;\n    ULONG     majorVersion;\n    ULONG     minorVersion;\n} SecPkgContext_ProtoInfoA, *PSecPkgContext_ProtoInfoA;\n\ntypedef struct _SecPkgContext_ProtoInfoW\n{\n    SEC_WCHAR *sProtocolName;\n    ULONG      majorVersion;\n    ULONG      minorVersion;\n} SecPkgContext_ProtoInfoW, *PSecPkgContext_ProtoInfoW;\n\n#define SecPkgContext_ProtoInfo WINELIB_NAME_AW(SecPkgContext_ProtoInfo)\n#define PSecPkgContext_ProtoInfo WINELIB_NAME_AW(PSecPkgContext_ProtoInfo)\n\ntypedef struct _SecPkgContext_PasswordExpiry\n{\n    TimeStamp tsPasswordExpires;\n} SecPkgContext_PasswordExpiry, *PSecPkgContext_PasswordExpiry;\n\ntypedef struct _SecPkgContext_SessionKey\n{\n    ULONG          SessionKeyLength;\n    unsigned char *SessionKey;\n} SecPkgContext_SessionKey, *PSecPkgContext_SessionKey;\n\ntypedef struct _SecPkgContext_PackageInfoA\n{\n    PSecPkgInfoA PackageInfo;\n} SecPkgContext_PackageInfoA, *PSecPkgContext_PackageInfoA;\n\ntypedef struct _SecPkgContext_PackageInfoW\n{\n    PSecPkgInfoW PackageInfo;\n} SecPkgContext_PackageInfoW, *PSecPkgContext_PackageInfoW;\n\n#define SecPkgContext_PackageInfo WINELIB_NAME_AW(SecPkgContext_PackageInfo)\n#define PSecPkgContext_PackageInfo WINELIB_NAME_AW(PSecPkgContext_PackageInfo)\n\ntypedef struct _SecPkgContext_Flags\n{\n    ULONG Flags;\n} SecPkgContext_Flags, *PSecPkgContext_Flags;\n\ntypedef struct _SecPkgContext_UserFlags\n{\n    ULONG UserFlags;\n} SecPkgContext_UserFlags, *PSecPkgContext_UserFlags;\n\ntypedef struct _SecPkgContext_NegotiationInfoA\n{\n    PSecPkgInfoA PackageInfo;\n    ULONG        NegotiationState;\n} SecPkgContext_NegotiationInfoA, *PSecPkgContext_NegotiationInfoA;\n\ntypedef struct _SecPkgContext_NegotiationInfoW\n{\n    PSecPkgInfoW PackageInfo;\n    ULONG        NegotiationState;\n} SecPkgContext_NegotiationInfoW, *PSecPkgContext_NegotiationInfoW;\n\n#define SecPkgContext_NegotiationInfo WINELIB_NAME_AW(SecPkgContext_NegotiationInfo)\n#define PSecPkgContext_NegotiationInfo WINELIB_NAME_AW(PSecPkgContext_NegotiationInfo)\n\n/* values for NegotiationState */\n#define SECPKG_NEGOTIATION_COMPLETE      0\n#define SECPKG_NEGOTIATION_OPTIMISTIC    1\n#define SECPKG_NEGOTIATION_IN_PROGRESS   2\n#define SECPKG_NEGOTIATION_DIRECT        3\n#define SECPKG_NEGOTIATION_TRY_MULTICRED 4\n\ntypedef struct _SecPkgContext_NativeNamesA\n{\n    SEC_CHAR *sClientName;\n    SEC_CHAR *sServerName;\n} SecPkgContext_NativeNamesA, *PSecPkgContext_NativeNamesA;\n\ntypedef struct _SecPkgContext_NativeNamesW\n{\n    SEC_WCHAR *sClientName;\n    SEC_WCHAR *sServerName;\n} SecPkgContext_NativeNamesW, *PSecPkgContext_NativeNamesW;\n\n#define SecPkgContext_NativeNames WINELIB_NAME_AW(SecPkgContext_NativeNames)\n#define PSecPkgContext_NativeNames WINELIB_NAME_AW(PSecPkgContext_NativeNames)\n\ntypedef struct _SecPkgContext_CredentialNameA\n{\n    ULONG     CredentialType;\n    SEC_CHAR *sCredentialName;\n} SecPkgContext_CredentialNameA, *PSecPkgContext_CredentialNameA;\n\ntypedef struct _SecPkgContext_CredentialNameW\n{\n    ULONG      CredentialType;\n    SEC_WCHAR *sCredentialName;\n} SecPkgContext_CredentialNameW, *PSecPkgContext_CredentialNameW;\n\n#define SecPkgContext_CredentialName WINELIB_NAME_AW(SecPkgContext_CredentialName)\n#define PSecPkgContext_CredentialName WINELIB_NAME_AW(PSecPkgContext_CredentialName)\n\ntypedef struct _SecPkgContext_AccessToken\n{\n    void *AccessToken;\n} SecPkgContext_AccessToken, *PSecPkgContext_AccessToken;\n\ntypedef struct _SecPkgContext_TargetInformation\n{\n    ULONG          MarshalledTargetInfoLength;\n    unsigned char *MarshalledTargetInfo;\n} SecPkgContext_TargetInformation, *PSecPkgContext_TargetInformation;\n\ntypedef struct _SecPkgContext_AuthzID\n{\n    ULONG  AuthzIDLength;\n    char  *AuthzID;\n} SecPkgContext_AuthzID, *PSecPkgContext_AuthzID;\n\ntypedef struct _SecPkgContext_Target\n{\n    ULONG  TargetLength;\n    char  *Target;\n} SecPkgContext_Target, *PSecPkgContext_Target;\n\ntypedef struct _SecPkgContext_Bindings\n{\n    ULONG BindingsLength;\n    SEC_CHANNEL_BINDINGS *Bindings;\n} SecPkgContext_Bindings, *PSecPkgContext_Bindings;\n\nSECURITY_STATUS SEC_ENTRY ImpersonateSecurityContext(PCtxtHandle phContext);\n\ntypedef SECURITY_STATUS (SEC_ENTRY *IMPERSONATE_SECURITY_CONTEXT_FN)\n (PCtxtHandle);\n\nSECURITY_STATUS SEC_ENTRY RevertSecurityContext(PCtxtHandle phContext);\n\ntypedef SECURITY_STATUS (SEC_ENTRY *REVERT_SECURITY_CONTEXT_FN)(PCtxtHandle);\n\nSECURITY_STATUS SEC_ENTRY MakeSignature(PCtxtHandle phContext,\n ULONG fQOP, PSecBufferDesc pMessage, ULONG MessageSeqNo);\n\ntypedef SECURITY_STATUS (SEC_ENTRY *MAKE_SIGNATURE_FN)(PCtxtHandle,\n ULONG, PSecBufferDesc, ULONG);\n\nSECURITY_STATUS SEC_ENTRY VerifySignature(PCtxtHandle phContext,\n PSecBufferDesc pMessage, ULONG MessageSeqNo, PULONG pfQOP);\n\ntypedef SECURITY_STATUS (SEC_ENTRY *VERIFY_SIGNATURE_FN)(PCtxtHandle,\n PSecBufferDesc, ULONG, PULONG);\n\nSECURITY_STATUS SEC_ENTRY QuerySecurityPackageInfoA(\n SEC_CHAR *pszPackageName, PSecPkgInfoA *ppPackageInfo);\nSECURITY_STATUS SEC_ENTRY QuerySecurityPackageInfoW(\n SEC_WCHAR *pszPackageName, PSecPkgInfoW *ppPackageInfo);\n#define QuerySecurityPackageInfo WINELIB_NAME_AW(QuerySecurityPackageInfo)\n\ntypedef SECURITY_STATUS (SEC_ENTRY *QUERY_SECURITY_PACKAGE_INFO_FN_A)\n (SEC_CHAR *, PSecPkgInfoA *);\ntypedef SECURITY_STATUS (SEC_ENTRY *QUERY_SECURITY_PACKAGE_INFO_FN_W)\n (SEC_WCHAR *, PSecPkgInfoW *);\n#define QUERY_SECURITY_PACKAGE_INFO_FN WINELIB_NAME_AW(QUERY_SECURITY_PACKAGE_INFO_FN_)\n\nSECURITY_STATUS SEC_ENTRY ExportSecurityContext(PCtxtHandle phContext,\n ULONG fFlags, PSecBuffer pPackedContext, void **pToken);\n\ntypedef SECURITY_STATUS (SEC_ENTRY *EXPORT_SECURITY_CONTEXT_FN)(PCtxtHandle,\n ULONG, PSecBuffer, void **);\n\n/* values for ExportSecurityContext fFlags */\n#define SECPKG_CONTEXT_EXPORT_RESET_NEW  0x00000001\n#define SECPKG_CONTEXT_EXPORT_DELETE_OLD 0x00000002\n\nSECURITY_STATUS SEC_ENTRY ImportSecurityContextA(SEC_CHAR *pszPackage,\n PSecBuffer pPackedContext, void *Token, PCtxtHandle phContext);\nSECURITY_STATUS SEC_ENTRY ImportSecurityContextW(SEC_WCHAR *pszPackage,\n PSecBuffer pPackedContext, void *Token, PCtxtHandle phContext);\n#define ImportSecurityContext WINELIB_NAME_AW(ImportSecurityContext)\n\ntypedef SECURITY_STATUS (SEC_ENTRY *IMPORT_SECURITY_CONTEXT_FN_A)(SEC_CHAR *,\n PSecBuffer, void *, PCtxtHandle);\ntypedef SECURITY_STATUS (SEC_ENTRY *IMPORT_SECURITY_CONTEXT_FN_W)(SEC_WCHAR *,\n PSecBuffer, void *, PCtxtHandle);\n#define IMPORT_SECURITY_CONTEXT_FN WINELIB_NAME_AW(IMPORT_SECURITY_CONTEXT_FN_)\n\nSECURITY_STATUS SEC_ENTRY AddCredentialsA(PCredHandle hCredentials,\n SEC_CHAR *pszPrincipal, SEC_CHAR *pszPackage, ULONG fCredentialUse,\n void *pAuthData, SEC_GET_KEY_FN pGetKeyFn, void *pvGetKeyArgument,\n PTimeStamp ptsExpiry);\nSECURITY_STATUS SEC_ENTRY AddCredentialsW(PCredHandle hCredentials,\n SEC_WCHAR *pszPrincipal, SEC_WCHAR *pszPackage, ULONG fCredentialUse,\n void *pAuthData, SEC_GET_KEY_FN pGetKeyFn, void *pvGetKeyArgument,\n PTimeStamp ptsExpiry);\n#define AddCredentials WINELIB_NAME_AW(AddCredentials)\n\ntypedef SECURITY_STATUS (SEC_ENTRY *ADD_CREDENTIALS_FN_A)(PCredHandle,\n SEC_CHAR *, SEC_CHAR *, ULONG, void *, SEC_GET_KEY_FN, void *,\n PTimeStamp);\ntypedef SECURITY_STATUS (SEC_ENTRY *ADD_CREDENTIALS_FN_W)(PCredHandle,\n SEC_WCHAR *, SEC_WCHAR *, ULONG, void *, SEC_GET_KEY_FN, void *,\n PTimeStamp);\n\nSECURITY_STATUS SEC_ENTRY QuerySecurityContextToken(PCtxtHandle phContext,\n HANDLE *phToken);\n\ntypedef SECURITY_STATUS (SEC_ENTRY *QUERY_SECURITY_CONTEXT_TOKEN_FN)\n (PCtxtHandle, HANDLE *);\n\nSECURITY_STATUS SEC_ENTRY EncryptMessage(PCtxtHandle phContext, ULONG fQOP,\n PSecBufferDesc pMessage, ULONG MessageSeqNo);\nSECURITY_STATUS SEC_ENTRY DecryptMessage(PCtxtHandle phContext,\n PSecBufferDesc pMessage, ULONG MessageSeqNo, PULONG pfQOP);\n\n/* values for EncryptMessage fQOP */\n#define SECQOP_WRAP_NO_ENCRYPT 0x80000001\n\ntypedef SECURITY_STATUS (SEC_ENTRY *ENCRYPT_MESSAGE_FN)(PCtxtHandle, ULONG,\n PSecBufferDesc, ULONG);\ntypedef SECURITY_STATUS (SEC_ENTRY *DECRYPT_MESSAGE_FN)(PCtxtHandle,\n PSecBufferDesc, ULONG, PULONG);\n\nSECURITY_STATUS SEC_ENTRY SetContextAttributesA(PCtxtHandle phContext,\n ULONG ulAttribute, void *pBuffer, ULONG cbBuffer);\nSECURITY_STATUS SEC_ENTRY SetContextAttributesW(PCtxtHandle phContext,\n ULONG ulAttribute, void *pBuffer, ULONG cbBuffer);\n#define SetContextAttributes WINELIB_NAME_AW(SetContextAttributes)\n\ntypedef SECURITY_STATUS (SEC_ENTRY *SET_CONTEXT_ATTRIBUTES_FN_A)(PCtxtHandle,\n ULONG, void *, ULONG);\ntypedef SECURITY_STATUS (SEC_ENTRY *SET_CONTEXT_ATTRIBUTES_FN_W)(PCtxtHandle,\n ULONG, void *, ULONG);\n\n#define SECURITY_ENTRYPOINT_ANSIA \"InitSecurityInterfaceA\"\n#define SECURITY_ENTRYPOINT_ANSIW \"InitSecurityInterfaceW\"\n#define SECURITY_ENTRYPOINT_ANSI WINELIB_NAME_AW(SECURITY_ENTRYPOINT_ANSI)\n\ntypedef struct _SECURITY_FUNCTION_TABLE_A\n{\n    ULONG                             dwVersion;\n    ENUMERATE_SECURITY_PACKAGES_FN_A  EnumerateSecurityPackagesA;\n    QUERY_CREDENTIALS_ATTRIBUTES_FN_A QueryCredentialsAttributesA;\n    ACQUIRE_CREDENTIALS_HANDLE_FN_A   AcquireCredentialsHandleA;\n    FREE_CREDENTIALS_HANDLE_FN        FreeCredentialsHandle;\n    void                             *Reserved2;\n    INITIALIZE_SECURITY_CONTEXT_FN_A  InitializeSecurityContextA;\n    ACCEPT_SECURITY_CONTEXT_FN        AcceptSecurityContext;\n    COMPLETE_AUTH_TOKEN_FN            CompleteAuthToken;\n    DELETE_SECURITY_CONTEXT_FN        DeleteSecurityContext;\n    APPLY_CONTROL_TOKEN_FN            ApplyControlToken;\n    QUERY_CONTEXT_ATTRIBUTES_FN_A     QueryContextAttributesA;\n    IMPERSONATE_SECURITY_CONTEXT_FN   ImpersonateSecurityContext;\n    REVERT_SECURITY_CONTEXT_FN        RevertSecurityContext;\n    MAKE_SIGNATURE_FN                 MakeSignature;\n    VERIFY_SIGNATURE_FN               VerifySignature;\n    FREE_CONTEXT_BUFFER_FN            FreeContextBuffer;\n    QUERY_SECURITY_PACKAGE_INFO_FN_A  QuerySecurityPackageInfoA;\n    void                             *Reserved3;\n    void                             *Reserved4;\n    EXPORT_SECURITY_CONTEXT_FN        ExportSecurityContext;\n    IMPORT_SECURITY_CONTEXT_FN_A      ImportSecurityContextA;\n    ADD_CREDENTIALS_FN_A              AddCredentialsA;\n    void                             *Reserved8;\n    QUERY_SECURITY_CONTEXT_TOKEN_FN   QuerySecurityContextToken;\n    ENCRYPT_MESSAGE_FN                EncryptMessage;\n    DECRYPT_MESSAGE_FN                DecryptMessage;\n    SET_CONTEXT_ATTRIBUTES_FN_A       SetContextAttributesA;\n} SecurityFunctionTableA, *PSecurityFunctionTableA;\n\ntypedef struct _SECURITY_FUNCTION_TABLE_W\n{\n    ULONG                             dwVersion;\n    ENUMERATE_SECURITY_PACKAGES_FN_W  EnumerateSecurityPackagesW;\n    QUERY_CREDENTIALS_ATTRIBUTES_FN_W QueryCredentialsAttributesW;\n    ACQUIRE_CREDENTIALS_HANDLE_FN_W   AcquireCredentialsHandleW;\n    FREE_CREDENTIALS_HANDLE_FN        FreeCredentialsHandle;\n    void                             *Reserved2;\n    INITIALIZE_SECURITY_CONTEXT_FN_W  InitializeSecurityContextW;\n    ACCEPT_SECURITY_CONTEXT_FN        AcceptSecurityContext;\n    COMPLETE_AUTH_TOKEN_FN            CompleteAuthToken;\n    DELETE_SECURITY_CONTEXT_FN        DeleteSecurityContext;\n    APPLY_CONTROL_TOKEN_FN            ApplyControlToken;\n    QUERY_CONTEXT_ATTRIBUTES_FN_W     QueryContextAttributesW;\n    IMPERSONATE_SECURITY_CONTEXT_FN   ImpersonateSecurityContext;\n    REVERT_SECURITY_CONTEXT_FN        RevertSecurityContext;\n    MAKE_SIGNATURE_FN                 MakeSignature;\n    VERIFY_SIGNATURE_FN               VerifySignature;\n    FREE_CONTEXT_BUFFER_FN            FreeContextBuffer;\n    QUERY_SECURITY_PACKAGE_INFO_FN_W  QuerySecurityPackageInfoW;\n    void                             *Reserved3;\n    void                             *Reserved4;\n    EXPORT_SECURITY_CONTEXT_FN        ExportSecurityContext;\n    IMPORT_SECURITY_CONTEXT_FN_W      ImportSecurityContextW;\n    ADD_CREDENTIALS_FN_W              AddCredentialsW;\n    void                             *Reserved8;\n    QUERY_SECURITY_CONTEXT_TOKEN_FN   QuerySecurityContextToken;\n    ENCRYPT_MESSAGE_FN                EncryptMessage;\n    DECRYPT_MESSAGE_FN                DecryptMessage;\n    SET_CONTEXT_ATTRIBUTES_FN_W       SetContextAttributesW;\n} SecurityFunctionTableW, *PSecurityFunctionTableW;\n\n#define SecurityFunctionTable WINELIB_NAME_AW(SecurityFunctionTable)\n#define PSecurityFunctionTable WINELIB_NAME_AW(PSecurityFunctionTable)\n\n#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION   1\n#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_2 2\n\nPSecurityFunctionTableA SEC_ENTRY InitSecurityInterfaceA(void);\nPSecurityFunctionTableW SEC_ENTRY InitSecurityInterfaceW(void);\n#define InitSecurityInterface WINELIB_NAME_AW(InitSecurityInterface)\n\ntypedef PSecurityFunctionTableA (SEC_ENTRY *INIT_SECURITY_INTERFACE_A)(void);\ntypedef PSecurityFunctionTableW (SEC_ENTRY *INIT_SECURITY_INTERFACE_W)(void);\n#define INIT_SECURITY_INTERFACE WINELIB_NAME_AW(INIT_SECURITY_INTERFACE_)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* ndef __WINE_SSPI_H__ */\n"
  },
  {
    "path": "wine/windows/stamp-h",
    "content": "timestamp\n"
  },
  {
    "path": "wine/windows/stamp-h.in",
    "content": "timestamp\n"
  },
  {
    "path": "wine/windows/stdole2.idl",
    "content": "/*\n * Copyright (C) 2003 Robert Shearman\n *               2005 Huw Davies\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n */\n\n#if 0\n#pragma makedep install\n#pragma makedep typelib\n#endif\n\n#include <olectl.h>\n\n[\n  uuid(00020430-0000-0000-C000-000000000046),\n  version(2.0),\n  helpstring(\"OLE Automation\")\n]\nlibrary stdole\n{\n    /* These typedefs need to have the same size as their real counterparts. */\n    typedef short VARIANT_BOOL;\n    typedef void *BSTR;\n    typedef double CURRENCY;\n    typedef unsigned long HRESULT;\n    typedef struct {\n        short word1, word2, word3, word4;\n        void *ptr1, *ptr2;\n    } VARIANT;\n    typedef unsigned long SCODE;\n\n    typedef struct GUID {\n        unsigned long  Data1;\n        unsigned short Data2;\n        unsigned short Data3;\n        unsigned char  Data4[ 8 ];\n    } GUID;\n\n    typedef struct DISPPARAMS {\n        VARIANT *rgvarg;\n        long *rgdispidNamedArgs;\n        unsigned int cArgs;\n        unsigned int cNamedArgs;\n    } DISPPARAMS;\n\n    typedef struct EXCEPINFO {\n        unsigned short wCode;\n        unsigned short wReserved;\n        BSTR  bstrSource;\n        BSTR  bstrDescription;\n        BSTR  bstrHelpFile;\n        unsigned long dwHelpContext;\n        void *pvReserved;\n        void *pfnDeferredFillIn;\n        SCODE scode;\n    } EXCEPINFO;\n\n    [\n        odl,\n        uuid(00000000-0000-0000-C000-000000000046),\n        hidden\n    ]\n    interface IUnknown\n    {\n        [restricted]\n        HRESULT QueryInterface(\n                               [in] GUID *riid,\n                               [out] void **ppvObj);\n\n        [restricted]\n        unsigned long AddRef();\n\n        [restricted]\n        unsigned long Release();\n    }\n\n    [\n        odl,\n        uuid(00020400-0000-0000-C000-000000000046),\n        restricted\n    ]\n    interface IDispatch : IUnknown\n    {\n        [restricted]\n        HRESULT GetTypeInfoCount(\n                                 [out] unsigned int *pctinfo);\n\n        [restricted]\n        HRESULT GetTypeInfo(\n                            [in] unsigned int itinfo,\n                            [in] unsigned long lcid,\n                            [out] void **pptinfo);\n\n        [restricted]\n        HRESULT GetIDsOfNames(\n                              [in] GUID *riid,\n                              [in] char **rgszNames,\n                              [in] unsigned int cNames,\n                              [in] unsigned long lcid,\n                              [out] long *rgdispid);\n\n        [restricted]\n        HRESULT Invoke(\n                       [in] long dispidMember,\n                       [in] GUID *riid,\n                       [in] unsigned long lcid,\n                       [in] unsigned short wFlags,\n                       [in] DISPPARAMS *pdispparams,\n                       [out] VARIANT *pvarResult,\n                       [out] EXCEPINFO *pexcepinfo,\n                       [out] unsigned int *puArgErr);\n\n    }\n\n    [\n        odl,\n        uuid(00020404-0000-0000-C000-000000000046),\n        hidden\n    ]\n    interface IEnumVARIANT : IUnknown\n    {\n        HRESULT Next(\n                     [in] unsigned long celt,\n                     [in] VARIANT *rgvar,\n                     [out] unsigned long *pceltFetched);\n\n        HRESULT Skip(\n                     [in] unsigned long celt);\n\n        HRESULT Reset();\n\n        HRESULT Clone(\n                      [out] IEnumVARIANT **ppenum);\n    }\n\n    typedef [uuid(66504301-BE0F-101A-8BBB-00AA00300CAB), public]\n        unsigned long OLE_COLOR;\n\n    typedef [uuid(66504302-BE0F-101A-8BBB-00AA00300CAB), public]\n        long OLE_XPOS_PIXELS;\n\n    typedef [uuid(66504303-BE0F-101A-8BBB-00AA00300CAB), public]\n        long OLE_YPOS_PIXELS;\n\n    typedef [uuid(66504304-BE0F-101A-8BBB-00AA00300CAB), public]\n        long OLE_XSIZE_PIXELS;\n\n    typedef [uuid(66504305-BE0F-101A-8BBB-00AA00300CAB), public]\n        long OLE_YSIZE_PIXELS;\n\n    typedef [uuid(66504306-BE0F-101A-8BBB-00AA00300CAB), public]\n        long OLE_XPOS_HIMETRIC;\n\n    typedef [uuid(66504307-BE0F-101A-8BBB-00AA00300CAB), public]\n        long OLE_YPOS_HIMETRIC;\n\n    typedef [uuid(66504308-BE0F-101A-8BBB-00AA00300CAB), public]\n        long OLE_XSIZE_HIMETRIC;\n\n    typedef [uuid(66504309-BE0F-101A-8BBB-00AA00300CAB), public]\n        long OLE_YSIZE_HIMETRIC;\n\n    typedef [uuid(BF030640-9069-101B-AE2D-08002B2EC713), public]\n        float OLE_XPOS_CONTAINER;\n\n    typedef [uuid(BF030641-9069-101B-AE2D-08002B2EC713), public]\n        float OLE_YPOS_CONTAINER;\n\n    typedef [uuid(BF030642-9069-101B-AE2D-08002B2EC713), public]\n        float OLE_XSIZE_CONTAINER;\n\n    typedef [uuid(BF030643-9069-101B-AE2D-08002B2EC713), public]\n        float OLE_YSIZE_CONTAINER;\n\n    typedef [uuid(66504313-BE0F-101A-8BBB-00AA00300CAB), public]\n        int OLE_HANDLE;\n\n    typedef [uuid(6650430B-BE0F-101A-8BBB-00AA00300CAB), public]\n        VARIANT_BOOL OLE_OPTEXCLUSIVE;\n\n    typedef [uuid(BF030644-9069-101B-AE2D-08002B2EC713), public]\n        VARIANT_BOOL OLE_CANCELBOOL;\n\n    typedef [uuid(BF030645-9069-101B-AE2D-08002B2EC713), public]\n        VARIANT_BOOL OLE_ENABLEDEFAULTBOOL;\n\n    [\n     uuid(6650430A-BE0F-101A-8BBB-00AA00300CAB)\n    ]\n    enum OLE_TRISTATE {\n        Unchecked = 0,\n        Checked = 1,\n        Gray = 2\n    };\n\n    typedef [uuid(6650430D-BE0F-101A-8BBB-00AA00300CAB), public]\n        BSTR FONTNAME;\n\n    typedef [uuid(6650430E-BE0F-101A-8BBB-00AA00300CAB), public]\n        CURRENCY FONTSIZE;\n\n    typedef [uuid(6650430F-BE0F-101A-8BBB-00AA00300CAB), public]\n        VARIANT_BOOL FONTBOLD;\n\n    typedef [uuid(66504310-BE0F-101A-8BBB-00AA00300CAB), public]\n        VARIANT_BOOL FONTITALIC;\n\n    typedef [uuid(66504311-BE0F-101A-8BBB-00AA00300CAB), public]\n        VARIANT_BOOL FONTUNDERSCORE;\n\n    typedef [uuid(66504312-BE0F-101A-8BBB-00AA00300CAB), public]\n        VARIANT_BOOL FONTSTRIKETHROUGH;\n\n\n    [\n     odl,\n     uuid(BEF6E002-A874-101A-8BBA-00AA00300CAB),\n     helpstring(\"Font Object\"),\n     hidden\n    ]\n    interface IFont : IUnknown {\n        [propget] HRESULT Name([out, retval] BSTR *pname);\n        [propput] HRESULT Name([in] BSTR pname);\n\n        [propget] HRESULT Size([out, retval] CURRENCY *psize);\n        [propput] HRESULT Size([in] CURRENCY psize);\n\n        [propget] HRESULT Bold([out, retval] VARIANT_BOOL *pbold);\n        [propput] HRESULT Bold([in] VARIANT_BOOL pbold);\n\n        [propget] HRESULT Italic([out, retval] VARIANT_BOOL *pitalic);\n        [propput] HRESULT Italic([in] VARIANT_BOOL pitalic);\n\n        [propget] HRESULT Underline([out, retval] VARIANT_BOOL *punderline);\n        [propput] HRESULT Underline([in] VARIANT_BOOL punderline);\n\n        [propget] HRESULT Strikethrough([out, retval] VARIANT_BOOL *pstrikethrough);\n        [propput] HRESULT Strikethrough([in] VARIANT_BOOL pstrikethrough);\n\n        [propget] HRESULT Weight([out, retval] short *pweight);\n        [propput] HRESULT Weight([in] short pweight);\n\n        [propget] HRESULT Charset([out, retval] short *pcharset);\n        [propput] HRESULT Charset([in] short pcharset);\n\n        [propget] HRESULT hFont([out, retval] OLE_HANDLE *phfont);\n        \n        HRESULT Clone([out] IFont **ppfont);\n\n        HRESULT IsEqual([in] IFont *pfontOther);\n\n        HRESULT SetRatio([in] long cyLogical, [in] long cyHimetric);\n\n        HRESULT AddRefHfont([in] OLE_HANDLE hFont);\n\n        HRESULT ReleaseHfont([in] OLE_HANDLE hFont);\n    }\n\n\n    [\n     odl,\n     uuid(BEF6E003-A874-101A-8BBA-00AA00300CAB)\n    ]\n    dispinterface Font {\n    properties:\n        [id(DISPID_FONT_NAME)] BSTR Name;\n        [id(DISPID_FONT_SIZE)] CURRENCY Size;\n        [id(DISPID_FONT_BOLD)] VARIANT_BOOL Bold;\n        [id(DISPID_FONT_ITALIC)] VARIANT_BOOL Italic;\n        [id(DISPID_FONT_UNDER)] VARIANT_BOOL Underline;\n        [id(DISPID_FONT_STRIKE)] VARIANT_BOOL Strikethrough;\n        [id(DISPID_FONT_WEIGHT)] short Weight;\n        [id(DISPID_FONT_CHARSET)] short Charset;\n    methods:\n    }\n\n    typedef [public] Font IFontDisp;\n\n    [\n     uuid(0BE35203-8F91-11CE-9DE3-00AA004BB851)\n    ]\n    coclass StdFont {\n        [default] dispinterface Font;\n        /* FIXME: We can't reference dispinterface FontEvents here because we need it to\n           appear at the end of the typelib. */\n/*      [default, source] dispinterface FontEvents;*/\n        interface IFont;\n    }\n\n    [\n     odl,\n     uuid(7BF80980-BF32-101A-8BBB-00AA00300CAB),\n     helpstring(\"Picture Object\"),\n     hidden\n    ]\n    interface IPicture : IUnknown {\n        [propget] HRESULT Handle([out, retval] OLE_HANDLE *phandle);\n\n        [propget] HRESULT hPal([out, retval] OLE_HANDLE *phpal);\n        \n        [propget] HRESULT Type([out, retval] short *ptype);\n\n        [propget] HRESULT Width([out, retval] OLE_XSIZE_HIMETRIC *pwidth);\n\n        [propget] HRESULT Height([out, retval] OLE_YSIZE_HIMETRIC *pheight);\n\n        HRESULT Render([in] int hdc,\n                       [in] long x,\n                       [in] long y,\n                       [in] long cx,\n                       [in] long cy,\n                       [in] OLE_XPOS_HIMETRIC xSrc,\n                       [in] OLE_YPOS_HIMETRIC ySrc,\n                       [in] OLE_XSIZE_HIMETRIC cxSrc,\n                       [in] OLE_YSIZE_HIMETRIC cySrc,\n                       [in] void *prcWBounds);\n\n        [propput] HRESULT hPal([in] OLE_HANDLE phpal);\n\n        [propget] HRESULT CurDC([out, retval] int *phdcOut);\n\n        HRESULT SelectPicture([in] int hdcIn,\n                              [out] int *phdcOut,\n                              [out] OLE_HANDLE *phbmpOut);\n        \n        [propget] HRESULT KeepOriginalFormat([out, retval] VARIANT_BOOL *pfkeep);\n        [propput] HRESULT KeepOriginalFormat([in] VARIANT_BOOL pfkeep);\n\n        HRESULT PictureChanged();\n\n        HRESULT SaveAsFile([in] void *pstm,\n                           [in] VARIANT_BOOL fSaveMemCopy,\n                           [out] long *pcbSize);\n\n        [propget] HRESULT Attributes([out, retval] long *pdwAttr);\n\n        HRESULT SetHdc([in] OLE_HANDLE hdc);\n    }\n\n    [\n     uuid(7BF80981-BF32-101A-8BBB-00AA00300CAB)\n    ]\n    dispinterface Picture {\n    properties:\n        [id(DISPID_PICT_HANDLE), readonly] OLE_HANDLE Handle;\n        [id(DISPID_PICT_HPAL)] OLE_HANDLE hPal;\n        [id(DISPID_PICT_TYPE), readonly] short Type;\n        [id(DISPID_PICT_WIDTH), readonly] OLE_XSIZE_HIMETRIC Width;\n        [id(DISPID_PICT_HEIGHT), readonly] OLE_YSIZE_HIMETRIC Height;\n    methods:\n        [id(DISPID_PICT_RENDER)]\n                  void Render(int hdc,\n                              long x,\n                              long y,\n                              long cx,\n                              long cy,\n                              OLE_XPOS_HIMETRIC xSrc,\n                              OLE_YPOS_HIMETRIC ySrc,\n                              OLE_XSIZE_HIMETRIC cxSrc,\n                              OLE_YSIZE_HIMETRIC cySrc,\n                              void *prcWBounds);\n    }\n    \n    typedef [public] Picture IPictureDisp;\n\n    [\n     uuid(0BE35204-8F91-11CE-9DE3-00AA004BB851)\n    ]\n    coclass StdPicture {\n        [default] dispinterface Picture;\n        interface IPicture;\n    }\n\n    [\n     uuid(E6C8FA08-BD9F-11D0-985E-00C04FC29993)\n    ]\n    enum LoadPictureConstants {\n        Default = 0,\n        Monochrome = 1,\n        VgaColor = 2,\n        Color = 4\n    };\n\n    [\n     dllname(\"oleaut32.dll\"),\n     uuid(91209AC0-60F6-11CF-9C5D-00AA00C1489E),\n     helpstring(\"Functions for Standard OLE Objects\"),\n     helpcontext(0x2775)\n    ]\n    module StdFunctions{\n        [\n         entry(\"OleLoadPictureFileEx\"),\n         helpstring(\"Loads a picture from a file\"),\n         helpcontext(0x2775)\n        ]\n        HRESULT LoadPicture([in, optional] VARIANT filename,\n                            [in, defaultvalue(0)] int widthDesired,\n                            [in, defaultvalue(0)] int heightDesired,\n                            [in, defaultvalue(Default)] enum LoadPictureConstants flags,\n                            [out, retval] IPictureDisp **retval);\n        [\n         entry(\"OleSavePictureFile\"),\n         helpstring(\"Saves a picture to a file\"),\n         helpcontext(0x2775)\n        ]\n        HRESULT SavePicture([in] IPictureDisp *Picture,\n                            [in] BSTR filename);\n    }\n\n\n    [\n     uuid(4EF6100A-AF88-11D0-9846-00C04FC29993),\n     helpstring(\"Event Interface for the Font Object\"),\n     hidden\n    ]\n    dispinterface FontEvents {\n    properties:\n    methods:\n        [id(DISPID_FONT_CHANGED)] void FontChanged([in] BSTR PropertyName);\n    }\n\n    typedef [public] FontEvents IFontEventsDisp;\n\n\n}\n"
  },
  {
    "path": "wine/windows/stgprop.h",
    "content": "/*\n * Copyright 2017 Nikolay Sivov\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_STGPROP_H__\n#define __WINE_STGPROP_H__\n\n#define PSGUID_STORAGE {0xb725f130, 0x47ef, 0x101a, {0xa5, 0xf1, 0x02, 0x60, 0x8c, 0x9e, 0xeb, 0xac}}\n#define PID_STG_DIRECTORY      ((PROPID)0x02)\n#define PID_STG_CLASSID        ((PROPID)0x03)\n#define PID_STG_STORAGETYPE    ((PROPID)0x04)\n#define PID_STG_VOLUME_ID      ((PROPID)0x05)\n#define PID_STG_PARENT_WORKID  ((PROPID)0x06)\n#define PID_STG_SECONDARYSTORE ((PROPID)0x07)\n#define PID_STG_FILEINDEX      ((PROPID)0x08)\n#define PID_STG_LASTCHANGEUSN  ((PROPID)0x09)\n#define PID_STG_NAME           ((PROPID)0x0a)\n#define PID_STG_PATH           ((PROPID)0x0b)\n#define PID_STG_SIZE           ((PROPID)0x0c)\n#define PID_STG_ATTRIBUTES     ((PROPID)0x0d)\n#define PID_STG_WRITETIME      ((PROPID)0x0e)\n#define PID_STG_CREATETIME     ((PROPID)0x0f)\n#define PID_STG_ACCESSTIME     ((PROPID)0x10)\n#define PID_STG_CHANGETIME     ((PROPID)0x11)\n#define PID_STG_CONTENTS       ((PROPID)0x13)\n#define PID_STG_SHORTNAME      ((PROPID)0x14)\n#define PID_STG_MAX            PID_STG_SHORTNAME\n\n#endif\n"
  },
  {
    "path": "wine/windows/sti.h",
    "content": "/*\n * Copyright (C) 2009 Damjan Jovanovic\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_STI_H\n#define __WINE_STI_H\n\n#include <objbase.h>\n/* #include <stireg.h> */\n/* #include <stierr.h> */\n\n#include <pshpack8.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nDEFINE_GUID(CLSID_Sti, 0xB323F8E0, 0x2E68, 0x11D0, 0x90, 0xEA, 0x00, 0xAA, 0x00, 0x60, 0xF8, 0x6C);\n\nDEFINE_GUID(IID_IStillImageW, 0x641BD880, 0x2DC8, 0x11D0, 0x90, 0xEA, 0x00, 0xAA, 0x00, 0x60, 0xF8, 0x6C);\n\nDEFINE_GUID(IID_IStillImageA, 0xA7B1F740, 0x1D7F, 0x11D1, 0xAC, 0xA9, 0x00, 0xA0, 0x24, 0x38, 0xAD, 0x48);\n\n#define STI_VERSION_REAL         0x00000002\n#define STI_VERSION_FLAG_UNICODE 0x01000000\n\n#ifndef WINE_NO_UNICODE_MACROS\n# ifdef UNICODE\n#  define STI_VERSION (STI_VERSION_REAL | STI_VERSION_FLAG_UNICODE)\n# else\n#  define STI_VERSION (STI_VERSION_REAL)\n# endif\n#endif\n\ntypedef struct IStillImageA *PSTIA;\ntypedef struct IStillImageW *PSTIW;\nDECL_WINELIB_TYPE_AW(PSTI)\ntypedef struct IStillImageA *LPSTILLIMAGEA;\ntypedef struct IStillImageW *LPSTILLIMAGEW;\nDECL_WINELIB_TYPE_AW(LPSTILLIMAGE)\ntypedef struct IStiDeviceA *PSTIDEVICEA;\ntypedef struct IStiDeviceW *PSTIDEVICEW;\nDECL_WINELIB_TYPE_AW(PSTIDEVICE)\n\nHRESULT WINAPI StiCreateInstanceA(HINSTANCE hinst, DWORD dwVer, PSTIA *ppSti, LPUNKNOWN pUnkOuter);\nHRESULT WINAPI StiCreateInstanceW(HINSTANCE hinst, DWORD dwVer, PSTIW *ppSti, LPUNKNOWN pUnkOuter);\n#define        StiCreateInstance WINELIB_NAME_AW(StiCreateInstance)\n\ntypedef DWORD STI_DEVICE_TYPE;\ntypedef enum _STI_DEVICE_MJ_TYPE\n{\n    StiDeviceTypeDefault           = 0,\n    StiDeviceTypeScanner           = 1,\n    StiDeviceTypeDigitalCamera     = 2,\n    StiDeviceTypeStreamingVideo    = 3\n} STI_DEVICE_MJ_TYPE;\n\n#define GET_STIDEVICE_TYPE(dwDevType) HIWORD(dwDevType)\n#define GET_STIDEVICE_SUBTYPE(dwDevType) LOWORD(dwDevType)\n\ntypedef struct _STI_DEV_CAPS {\n    DWORD dwGeneric;\n} STI_DEV_CAPS, *PSTI_DEV_CAPS;\n\n#define STI_MAX_INTERNAL_NAME_LENGTH 128\n\ntypedef struct _STI_DEVICE_INFORMATIONW {\n    DWORD dwSize;\n    STI_DEVICE_TYPE DeviceType;\n    WCHAR szDeviceInternalName[STI_MAX_INTERNAL_NAME_LENGTH];\n    STI_DEV_CAPS DeviceCapabilities;\n    DWORD dwHardwareConfiguration;\n    LPWSTR pszVendorDescription;\n    LPWSTR pszDeviceDescription;\n    LPWSTR pszPortName;\n    LPWSTR pszPropProvider;\n    LPWSTR pszLocalName;\n} STI_DEVICE_INFORMATIONW, *PSTI_DEVICE_INFORMATIONW;\n\ntypedef STI_DEVICE_INFORMATIONW STI_DEVICE_INFORMATION;\ntypedef PSTI_DEVICE_INFORMATIONW PSTI_DEVICE_INFORMATION;\n\n#define MAX_NOTIFICATION_DATA 64\n\ntypedef struct _STINOTIFY {\n    DWORD dwSize;\n    GUID guidNotificationCode;\n    BYTE abNotificationData[MAX_NOTIFICATION_DATA];\n} STINOTIFY,*LPSTINOTIFY;\n\n#define INTERFACE IStillImageW\nDECLARE_INTERFACE_(IStillImageW, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IStillImageW methods ***/\n    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;\n    STDMETHOD(GetDeviceList)(THIS_ DWORD dwType, DWORD dwFlags, DWORD *pdwItemsReturned, LPVOID *ppBuffer) PURE;\n    STDMETHOD(GetDeviceInfo)(THIS_ LPWSTR pwszDeviceName, LPVOID *ppBuffer) PURE;\n    STDMETHOD(CreateDevice)(THIS_ LPWSTR pwszDeviceName, DWORD dwMode, PSTIDEVICEW *pDevice, LPUNKNOWN pUnkOuter) PURE;\n    STDMETHOD(GetDeviceValue)(THIS_ LPWSTR pwszDeviceName, LPWSTR pValueName, LPDWORD pType, LPBYTE pData, LPDWORD cbData) PURE;\n    STDMETHOD(SetDeviceValue)(THIS_ LPWSTR pwszDeviceName, LPWSTR pValueName, DWORD type, LPBYTE pData, DWORD cbData) PURE;\n    STDMETHOD(GetSTILaunchInformation)(THIS_ LPWSTR pwszDeviceName, DWORD *pdwEventCode, LPWSTR pwszEventName) PURE;\n    STDMETHOD(RegisterLaunchApplication)(THIS_ LPWSTR pwszAppName, LPWSTR pwszCommandLine) PURE;\n    STDMETHOD(UnregisterLaunchApplication)(THIS_ LPWSTR pwszAppName) PURE;\n    STDMETHOD(EnableHwNotifications)(THIS_ LPCWSTR pwszDeviceName, BOOL bNewState) PURE;\n    STDMETHOD(GetHwNotificationState)(THIS_ LPCWSTR pwszDeviceName, BOOL *pbCurrentState) PURE;\n    STDMETHOD(RefreshDeviceBus)(THIS_ LPCWSTR pwszDeviceName) PURE;\n    STDMETHOD(LaunchApplicationForDevice)(THIS_ LPWSTR pwszDeviceName, LPWSTR pwszAppName, LPSTINOTIFY pStiNotify);\n    STDMETHOD(SetupDeviceParameters)(THIS_ PSTI_DEVICE_INFORMATIONW pDevInfo);\n    STDMETHOD(WriteToErrorLog)(THIS_ DWORD dwMessageType, LPCWSTR pszMessage) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IStillImage_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IStillImage_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IStillImage_Release(p)            (p)->lpVtbl->Release(p)\n/*** IStillImage methods ***/\n#define IStillImage_Initialize(p,a,b)                   (p)->lpVtbl->Initialize(p,a,b)\n#define IStillImage_GetDeviceList(p,a,b,c,d)            (p)->lpVtbl->GetDeviceList(p,a,b,c,d)\n#define IStillImage_GetDeviceInfo(p,a,b)                (p)->lpVtbl->GetDeviceInfo(p,a,b)\n#define IStillImage_CreateDevice(p,a,b,c,d)             (p)->lpVtbl->CreateDevice(p,a,b,c,d)\n#define IStillImage_GetDeviceValue(p,a,b,c,d,e)         (p)->lpVtbl->GetDeviceValue(p,a,b,c,d,e)\n#define IStillImage_SetDeviceValue(p,a,b,c,d,e)         (p)->lpVtbl->SetDeviceValue(p,a,b,c,d,e)\n#define IStillImage_GetSTILaunchInformation(p,a,b,c)    (p)->lpVtbl->GetSTILaunchInformation(p,a,b,c)\n#define IStillImage_RegisterLaunchApplication(p,a,b)    (p)->lpVtbl->RegisterLaunchApplication(p,a,b)\n#define IStillImage_UnregisterLaunchApplication(p,a)    (p)->lpVtbl->UnregisterLaunchApplication(p,a)\n#define IStillImage_EnableHwNotifications(p,a,b)        (p)->lpVtbl->EnableHwNotifications(p,a,b)\n#define IStillImage_GetHwNotificationState(p,a,b)       (p)->lpVtbl->GetHwNotificationState(p,a,b)\n#define IStillImage_RefreshDeviceBus(p,a)               (p)->lpVtbl->RefreshDeviceBus(p,a)\n#define IStillImage_LaunchApplicationForDevice(p,a,b,c) (p)->lpVtbl->LaunchApplicationForDevice(p,a,b,c)\n#define IStillImage_SetupDeviceParameters(p,a)          (p)->lpVtbl->SetupDeviceParameters(p,a)\n#define IStillImage_WriteToErrorLog(p,a,b)              (p)->lpVtbl->WriteToErrorLog(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IStillImage_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IStillImage_AddRef(p)             (p)->AddRef()\n#define IStillImage_Release(p)            (p)->Release()\n/*** IStillImage methods ***/\n#define IStillImage_Initialize(p,a,b)                   (p)->Initialize(a,b)\n#define IStillImage_GetDeviceList(p,a,b,c,d)            (p)->GetDeviceList(a,b,c,d)\n#define IStillImage_GetDeviceInfo(p,a,b)                (p)->GetDeviceInfo(a,b)\n#define IStillImage_CreateDevice(p,a,b,c,d)             (p)->CreateDevice(a,b,c,d)\n#define IStillImage_GetDeviceValue(p,a,b,c,d,e)         (p)->GetDeviceValue(a,b,c,d,e)\n#define IStillImage_SetDeviceValue(p,a,b,c,d,e)         (p)->SetDeviceValue(a,b,c,d,e)\n#define IStillImage_GetSTILaunchInformation(p,a,b,c)    (p)->GetSTILaunchInformation(a,b,c)\n#define IStillImage_RegisterLaunchApplication(p,a,b)    (p)->RegisterLaunchApplication(a,b)\n#define IStillImage_UnregisterLaunchApplication(p,a)    (p)->UnregisterLaunchApplication(a)\n#define IStillImage_EnableHwNotifications(p,a,b)        (p)->EnableHwNotifications(a,b)\n#define IStillImage_GetHwNotificationState(p,a,b)       (p)->GetHwNotificationState(a,b)\n#define IStillImage_RefreshDeviceBus(p,a)               (p)->RefreshDeviceBus(a)\n#define IStillImage_LaunchApplicationForDevice(p,a,b,c) (p)->LaunchApplicationForDevice(a,b,c)\n#define IStillImage_SetupDeviceParameters(p,a)          (p)->SetupDeviceParameters(a)\n#define IStillImage_WriteToErrorLog(p,a,b)              (p)->WriteToErrorLog(a,b)\n#endif\n\n#ifdef __cplusplus\n};\n#endif\n\n#include <poppack.h>\n\n#endif /* __WINE_STI_H */\n"
  },
  {
    "path": "wine/windows/storage.h",
    "content": "/*\n * Copyright (C) 1999 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_STORAGE_H\n#define __WINE_STORAGE_H\n\n/* \"storage.h\" is obsolete, you should include \"objbase.h\" instead */\n\n#include <objbase.h>\n\n#endif\n"
  },
  {
    "path": "wine/windows/strmif.idl",
    "content": "/*\n * Copyright (C) 2002 Robert Shearman\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\nimport \"objidl.idl\";\n\n#include <devenum.idl>\n\n#include <axcore.idl>\n\n#include <axextend.idl>\n\n#include <dyngraph.idl>\n\n/* TODO: #include <dvdif.h> */\n#include <vmrender.idl>\n"
  },
  {
    "path": "wine/windows/strsafe.h",
    "content": "/*\n * Copyright 2010 Thomas Mullaly\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __WINE_STRSAFE_H\n#define __WINE_STRSAFE_H\n\n#include <stdio.h>\n#include <string.h>\n#include <stdarg.h>\n\n/* Windows version includes this header. */\n/* #include <specstring.h> */\n\n#define STRSAFE_E_INSUFFICIENT_BUFFER   ((HRESULT)0x8007007A)\n#define STRSAFE_E_INVALID_PARAM         ((HRESULT)0x80070075)\n#define STRSAFE_E_END_OF_FILE           ((HRESULT)0x80070026)\n\n#endif\n"
  },
  {
    "path": "wine/windows/structuredquerycondition.idl",
    "content": "/*\n * structured query condition\n *\n * Copyright 2009 Maarten Lankhorst\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n */\n\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"objidl.idl\";\nimport \"propidl.idl\";\n\ntypedef [v1_enum] enum tagCONDITION_TYPE\n{\n    CT_AND_CONDITION,\n    CT_OR_CONDITION,\n    CT_NOT_CONDITION,\n    CT_LEAF_CONDITION\n} CONDITION_TYPE;\n\ntypedef [v1_enum] enum tagCONDITION_OPERATION\n{\n    COP_IMPLICIT,\n    COP_EQUAL,\n    COP_NOTEQUAL,\n    COP_LESSTHAN,\n    COP_GREATERTHAN,\n    COP_LESSTHANOREQUAL,\n    COP_GREATERTHANOREQUAL,\n    COP_VALUE_STARTSWITH,\n    COP_VALUE_ENDSWITH,\n    COP_VALUE_CONTAINS,\n    COP_VALUE_NOTCONTAINS,\n    COP_DOSWILDCARDS,\n    COP_WORD_EQUAL,\n    COP_WORD_STARTSWITH,\n    COP_APPLICATION_SPECIFIC\n} CONDITION_OPERATION;\n"
  },
  {
    "path": "wine/windows/svrapi.h",
    "content": "/*\n* Copyright 2006 Konstantin Petrov\n*\n* This library is free software; you can redistribute it and/or\n* modify it under the terms of the GNU Lesser General Public\n* License as published by the Free Software Foundation; either\n* version 2.1 of the License, or (at your option) any later version.\n*\n* This library is distributed in the hope that it will be useful,\n* but WITHOUT ANY WARRANTY; without even the implied warranty of\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n* Lesser General Public License for more details.\n*\n* You should have received a copy of the GNU Lesser General Public\n* License along with this library; if not, write to the Free Software\n* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n*/\n\n#ifndef SVRAPI_INCLUDED\n#define SVRAPI_INCLUDED\n\n#include <lmcons.h>\n#include <lmerr.h>\n\n#include <pshpack1.h>\n\ntypedef struct _share_info_1 {\n       char shi1_netname[LM20_NNLEN+1];\n       char shi1_pad1;\n       unsigned short shi1_type;\n       char* shi1_remark;\n} share_info_1;\n\ntypedef struct _share_info_50 {\n       char shi50_netname[LM20_NNLEN+1];\n       unsigned char shi50_type;\n       unsigned short shi50_flags;\n       char* shi50_remark;\n       char* shi50_path;\n       char shi50_rw_password[SHPWLEN+1];\n       char shi50_ro_password[SHPWLEN+1];\n} share_info_50;\n\n#include <poppack.h>\n\n#endif /* SVRAPI_INCLUDED */\n"
  },
  {
    "path": "wine/windows/t2embapi.h",
    "content": "/*\n * Copyright (c) 2009 Andrew Nguyen\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_T2EMBAPI_H\n#define __WINE_T2EMBAPI_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define CHARSET_UNICODE   1\n#define CHARSET_DEFAULT   1\n#define CHARSET_SYMBOL    2\n#define CHARSET_GLYPHIDX  3\n\n#define LICENSE_INSTALLABLE   0x0000\n#define LICENSE_DEFAULT       0x0000\n#define LICENSE_NOEMBEDDING   0x0002\n#define LICENSE_PREVIEWPRINT  0x0004\n#define LICENSE_EDITABLE      0x0008\n\n#define TTLOAD_PRIVATE  0x0001\n\n/* Possible return values. */\n#define E_NONE                              __MSABI_LONG(0x0000)\n#define E_API_NOTIMPL                       __MSABI_LONG(0x0001)\n#define E_HDCINVALID                        __MSABI_LONG(0x0006)\n#define E_NOFREEMEMORY                      __MSABI_LONG(0x0007)\n#define E_NOTATRUETYPEFONT                  __MSABI_LONG(0x000a)\n#define E_ERRORACCESSINGFONTDATA            __MSABI_LONG(0x000c)\n#define E_ERRORACCESSINGFACENAME            __MSABI_LONG(0x000d)\n#define E_FACENAMEINVALID                   __MSABI_LONG(0x0113)\n#define E_PERMISSIONSINVALID                __MSABI_LONG(0x0117)\n#define E_PBENABLEDINVALID                  __MSABI_LONG(0x0118)\n\ntypedef ULONG (WINAPIV * READEMBEDPROC)(void*,void*,ULONG);\ntypedef ULONG (WINAPIV * WRITEEMBEDPROC)(void*,void*,ULONG);\n\ntypedef struct\n{\n    unsigned short usStructSize;\n    unsigned short usRefStrSize;\n    unsigned short *pusRefStr;\n} TTLOADINFO;\n\ntypedef struct\n{\n    unsigned short usStructSize;\n    unsigned short usRootStrSize;\n    unsigned short *pusRootStr;\n} TTEMBEDINFO;\n\nLONG WINAPI TTLoadEmbeddedFont(HANDLE*,ULONG,ULONG*,ULONG,ULONG*,READEMBEDPROC,\n                               LPVOID,LPWSTR,LPSTR,TTLOADINFO*);\nLONG WINAPI TTDeleteEmbeddedFont(HANDLE,ULONG,ULONG*);\n\n/* embedding privileges */\n#define EMBED_PREVIEWPRINT  1\n#define EMBED_EDITABLE      2\n#define EMBED_INSTALLABLE   3\n#define EMBED_NOEMBEDDING   4\n\nLONG WINAPI TTGetEmbeddingType(HDC, ULONG*);\nLONG WINAPI TTIsEmbeddingEnabledForFacename(LPCSTR facename, BOOL *enabled);\nLONG WINAPI TTIsEmbeddingEnabled(HDC hdc, BOOL *enabled);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/tapi.h",
    "content": "/*\n * TAPI definitions\n *\n * Copyright (c) 1999 Andreas Mohr\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_TAPI_H\n#define __WINE_TAPI_H\n\n#include <windows.h>\n#include <basetsd.h>\n#include <oaidl.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\ntypedef HANDLE HCALL, *LPHCALL;\ntypedef HANDLE HLINE, *LPHLINE;\ntypedef HANDLE HLINEAPP, *LPHLINEAPP;\ntypedef HANDLE HPHONE, *LPHPHONE;\ntypedef HANDLE HPHONEAPP, *LPHPHONEAPP;\n\n#define TAPIERR_REQUESTFAILED          __MSABI_LONG(-16)\n#define LINEERR_ALLOCATED              0x80000001\n#define LINEERR_BADDEVICEID            0x80000002\n#define LINEERR_BEARERMODEUNAVAIL      0x80000003\n#define LINEERR_CALLUNAVAIL            0x80000005\n#define LINEERR_COMPLETIONOVERRUN      0x80000006\n#define LINEERR_CONFERENCEFULL         0x80000007\n#define LINEERR_DIALBILLING            0x80000008\n#define LINEERR_DIALDIALTONE           0x80000009\n#define LINEERR_DIALPROMPT             0x8000000A\n#define LINEERR_DIALQUIET              0x8000000B\n#define LINEERR_INCOMPATIBLEAPIVERSION 0x8000000C\n#define LINEERR_INCOMPATIBLEEXTVERSION 0x8000000D\n#define LINEERR_INIFILECORRUPT         0x8000000E\n#define LINEERR_INUSE                  0x8000000F\n#define LINEERR_INVALADDRESS           0x80000010\n#define LINEERR_INVALADDRESSID         0x80000011\n#define LINEERR_INVALADDRESSMODE       0x80000012\n#define LINEERR_INVALADDRESSSTATE      0x80000013\n#define LINEERR_INVALAPPHANDLE         0x80000014\n#define LINEERR_INVALAPPNAME           0x80000015\n#define LINEERR_INVALBEARERMODE        0x80000016\n#define LINEERR_INVALCALLCOMPLMODE     0x80000017\n#define LINEERR_INVALCALLHANDLE        0x80000018\n#define LINEERR_INVALCALLPARAMS        0x80000019\n#define LINEERR_INVALCALLPRIVILEGE     0x8000001A\n#define LINEERR_INVALCALLSELECT        0x8000001B\n#define LINEERR_INVALCALLSTATE         0x8000001C\n#define LINEERR_INVALCALLSTATELIST     0x8000001D\n#define LINEERR_INVALCARD              0x8000001E\n#define LINEERR_INVALCOMPLETIONID      0x8000001F\n#define LINEERR_INVALCONFCALLHANDLE    0x80000020\n#define LINEERR_INVALCONSULTCALLHANDLE 0x80000021\n#define LINEERR_INVALCOUNTRYCODE       0x80000022\n#define LINEERR_INVALDEVICECLASS       0x80000023\n#define LINEERR_INVALDEVICEHANDLE      0x80000024\n#define LINEERR_INVALDIALPARAMS        0x80000025\n#define LINEERR_INVALDIGITLIST         0x80000026\n#define LINEERR_INVALDIGITMODE         0x80000027\n#define LINEERR_INVALDIGITS            0x80000028\n#define LINEERR_INVALEXTVERSION        0x80000029\n#define LINEERR_INVALGROUPID           0x8000002A\n#define LINEERR_INVALLINEHANDLE        0x8000002B\n#define LINEERR_INVALLINESTATE         0x8000002C\n#define LINEERR_INVALLOCATION          0x8000002D\n#define LINEERR_INVALMEDIALIST         0x8000002E\n#define LINEERR_INVALMEDIAMODE         0x8000002F\n#define LINEERR_INVALMESSAGEID         0x80000030\n#define LINEERR_INVALPARAM             0x80000032\n#define LINEERR_INVALPARKID            0x80000033\n#define LINEERR_INVALPARKMODE          0x80000034\n#define LINEERR_INVALPOINTER           0x80000035\n#define LINEERR_INVALPRIVSELECT        0x80000036\n#define LINEERR_INVALRATE              0x80000037\n#define LINEERR_INVALREQUESTMODE       0x80000038\n#define LINEERR_INVALTERMINALID        0x80000039\n#define LINEERR_INVALTERMINALMODE      0x8000003A\n#define LINEERR_INVALTIMEOUT           0x8000003B\n#define LINEERR_INVALTONE              0x8000003C\n#define LINEERR_INVALTONELIST          0x8000003D\n#define LINEERR_INVALTONEMODE          0x8000003E\n#define LINEERR_INVALTRANSFERMODE      0x8000003F\n#define LINEERR_LINEMAPPERFAILED       0x80000040\n#define LINEERR_NOCONFERENCE           0x80000041\n#define LINEERR_NODEVICE               0x80000042\n#define LINEERR_NODRIVER               0x80000043\n#define LINEERR_NOMEM                  0x80000044\n#define LINEERR_NOREQUEST              0x80000045\n#define LINEERR_NOTOWNER               0x80000046\n#define LINEERR_NOTREGISTERED          0x80000047\n#define LINEERR_OPERATIONFAILED        0x80000048\n#define LINEERR_OPERATIONUNAVAIL       0x80000049\n#define LINEERR_RATEUNAVAIL            0x8000004A\n#define LINEERR_RESOURCEUNAVAIL        0x8000004B\n#define LINEERR_REQUESTOVERRUN         0x8000004C\n#define LINEERR_STRUCTURETOOSMALL      0x8000004D\n#define LINEERR_TARGETNOTFOUND         0x8000004E\n#define LINEERR_TARGETSELF             0x8000004F\n#define LINEERR_UNINITIALIZED          0x80000050\n#define LINEERR_USERUSERINFOTOOBIG     0x80000051\n#define LINEERR_REINIT                 0x80000052\n#define LINEERR_ADDRESSBLOCKED         0x80000053\n#define LINEERR_BILLINGREJECTED        0x80000054\n#define LINEERR_INVALFEATURE           0x80000055\n#define LINEERR_NOMULTIPLEINSTANCE     0x80000056\n\n#define STRINGFORMAT_ASCII             0x00000001\n#define STRINGFORMAT_DBCS              0x00000002\n#define STRINGFORMAT_UNICODE           0x00000003\n#define STRINGFORMAT_BINARY            0x00000004\n\n#define LINEADDRESSMODE_ADDRESSID      0x00000001\n#define LINEADDRESSMODE_DIALABLEADDR   0x00000002\n\n#define LINEBEARERMODE_VOICE           0x00000001\n#define LINEBEARERMODE_SPEECH          0x00000002\n#define LINEBEARERMODE_MULTIUSE        0x00000004\n#define LINEBEARERMODE_DATA            0x00000008\n#define LINEBEARERMODE_ALTSPEECHDATA   0x00000010\n#define LINEBEARERMODE_NONCALLSIGNALING 0x00000020\n#define LINEBEARERMODE_PASSTHROUGH     0x00000040\n\n#define LINEMEDIAMODE_UNKNOWN          0x00000002\n#define LINEMEDIAMODE_INTERACTIVEVOICE 0x00000004\n#define LINEMEDIAMODE_AUTOMATEDVOICE   0x00000008\n#define LINEMEDIAMODE_DATAMODEM        0x00000010\n\n#define LINEDEVCAPFLAGS_CROSSADDRCONF  0x00000001\n#define LINEDEVCAPFLAGS_HIGHLEVCOMP    0x00000002\n#define LINEDEVCAPFLAGS_LOWLEVCOMP     0x00000004\n#define LINEDEVCAPFLAGS_MEDIACONTROL   0x00000008\n#define LINEDEVCAPFLAGS_MULTIPLEADDR   0x00000010\n#define LINEDEVCAPFLAGS_CLOSEDROP      0x00000020\n#define LINEDEVCAPFLAGS_DIALBILLING    0x00000040\n#define LINEDEVCAPFLAGS_DIALQUIET      0x00000080\n#define LINEDEVCAPFLAGS_DIALDIALTONE   0x00000100\n\n#define LINEDEVSTATE_OTHER             0x00000001\n#define LINEDEVSTATE_RINGING           0x00000002\n#define LINEDEVSTATE_CONNECTED         0x00000004\n#define LINEDEVSTATE_DISCONNECTED      0x00000008\n#define LINEDEVSTATE_MSGWAITON         0x00000010\n#define LINEDEVSTATE_MSGWAITOFF        0x00000020\n#define LINEDEVSTATE_INSERVICE         0x00000040\n#define LINEDEVSTATE_OUTOFSERVICE      0x00000080\n#define LINEDEVSTATE_MAINTENANCE       0x00000100\n#define LINEDEVSTATE_OPEN              0x00000200\n#define LINEDEVSTATE_CLOSE             0x00000400\n#define LINEDEVSTATE_NUMCALLS          0x00000800\n#define LINEDEVSTATE_NUMCOMPLETIONS    0x00001000\n#define LINEDEVSTATE_TERMINALS         0x00002000\n#define LINEDEVSTATE_ROAMMODE          0x00004000\n#define LINEDEVSTATE_BATTERY           0x00008000\n#define LINEDEVSTATE_SIGNAL            0x00010000\n#define LINEDEVSTATE_DEVSPECIFIC       0x00020000\n#define LINEDEVSTATE_REINIT            0x00040000\n#define LINEDEVSTATE_LOCK              0x00080000\n\n#define LINEDEVSTATE_CAPSCHANGE        0x00100000\n#define LINEDEVSTATE_CONFIGCHANGE      0x00200000\n#define LINEDEVSTATE_TRANSLATECHANGE   0x00400000\n#define LINEDEVSTATE_COMPLCANCEL       0x00800000\n#define LINEDEVSTATE_REMOVED           0x01000000\n\n#define LINELOCATIONOPTION_PULSEDIAL   0x00000001\n\n\n#define LINEFEATURE_DEVSPECIFIC        0x00000001\n#define LINEFEATURE_DEVSPECIFICFEAT    0x00000002\n#define LINEFEATURE_FORWARD            0x00000004\n#define LINEFEATURE_MAKECALL           0x00000008\n#define LINEFEATURE_SETMEDIACONTROL    0x00000010\n#define LINEFEATURE_SETTERMINAL        0x00000020\n#define LINEFEATURE_SETDEVSTATUS       0x00000040\n#define LINEFEATURE_FORWARDFWD         0x00000080\n#define LINEFEATURE_FORWARDDND         0x00000100\n\n/* tapi callback messages */\n\n#define LINE_ADDRESSSTATE             __MSABI_LONG(0)\n#define LINE_CALLINFO                 __MSABI_LONG(1)\n#define LINE_CALLSTATE                __MSABI_LONG(2)\n#define LINE_CLOSE                    __MSABI_LONG(3)\n#define LINE_DEVSPECIFIC              __MSABI_LONG(4)\n#define LINE_DEVSPECIFICFEATURE       __MSABI_LONG(5)\n#define LINE_GATHERDIGITS             __MSABI_LONG(6)\n#define LINE_GENERATE                 __MSABI_LONG(7)\n#define LINE_LINEDEVSTATE             __MSABI_LONG(8)\n#define LINE_MONITORDIGITS            __MSABI_LONG(9)\n#define LINE_MONITORMEDIA             __MSABI_LONG(10)\n#define LINE_MONITORTONE              __MSABI_LONG(11)\n#define LINE_REPLY                    __MSABI_LONG(12)\n#define LINE_REQUEST                  __MSABI_LONG(13)\n#define PHONE_BUTTON                  __MSABI_LONG(14)\n#define PHONE_CLOSE                   __MSABI_LONG(15)\n#define PHONE_DEVSPECIFIC             __MSABI_LONG(16)\n#define PHONE_REPLY                   __MSABI_LONG(17)\n#define PHONE_STATE                   __MSABI_LONG(18)\n#define LINE_CREATE                   __MSABI_LONG(19)\n#define PHONE_CREATE                  __MSABI_LONG(20)\n\n#define LINE_AGENTSPECIFIC            __MSABI_LONG(21)\n#define LINE_AGENTSTATUS              __MSABI_LONG(22)\n#define LINE_APPNEWCALL               __MSABI_LONG(23)\n#define LINE_PROXYREQUEST             __MSABI_LONG(24)\n#define LINE_REMOVE                   __MSABI_LONG(25)\n#define PHONE_REMOVE                  __MSABI_LONG(26)\n/* these are used as Param1 of line_callstate messages */\n#define LINECALLSTATE_IDLE            0x00000001\n#define LINECALLSTATE_OFFERING        0x00000002\n#define LINECALLSTATE_ACCEPTED        0x00000004\n#define LINECALLSTATE_DIALTONE        0x00000008\n#define LINECALLSTATE_DIALING         0x00000010\n#define LINECALLSTATE_RINGBACK        0x00000020\n#define LINECALLSTATE_BUSY            0x00000040\n#define LINECALLSTATE_SPECIALINFO     0x00000080\n#define LINECALLSTATE_CONNECTED       0x00000100\n#define LINECALLSTATE_PROCEEDING      0x00000200\n#define LINECALLSTATE_ONHOLD          0x00000400\n#define LINECALLSTATE_CONFERENCED     0x00000800\n#define LINECALLSTATE_ONHOLDPENDCONF  0x00001000\n#define LINECALLSTATE_ONHOLDPENDTRANSFER 0x00002000\n#define LINECALLSTATE_DISCONNECTED    0x00004000\n#define LINECALLSTATE_UNKNOWN         0x00008000\n#define LINECONNECTEDMODE_ACTIVE            0x00000001\n#define LINECONNECTEDMODE_INACTIVE          0x00000002\n#define LINECONNECTEDMODE_ACTIVEHELD        0x00000004\n#define LINECONNECTEDMODE_INACTIVEHELD      0x00000008\n#define LINECONNECTEDMODE_CONFIRMED         0x00000010\n\n/* these are Param2 values for state_disconnected line_callstate messages */\n#define LINEDISCONNECTMODE_NORMAL           0x00000001\n#define LINEDISCONNECTMODE_UNKNOWN          0x00000002\n#define LINEDISCONNECTMODE_REJECT           0x00000004\n#define LINEDISCONNECTMODE_PICKUP           0x00000008\n#define LINEDISCONNECTMODE_FORWARDED        0x00000010\n#define LINEDISCONNECTMODE_BUSY             0x00000020\n#define LINEDISCONNECTMODE_NOANSWER         0x00000040\n#define LINEDISCONNECTMODE_BADADDRESS       0x00000080\n#define LINEDISCONNECTMODE_UNREACHABLE      0x00000100\n#define LINEDISCONNECTMODE_CONGESTION       0x00000200\n#define LINEDISCONNECTMODE_INCOMPATIBLE     0x00000400\n#define LINEDISCONNECTMODE_UNAVAIL          0x00000800\n#define LINEDISCONNECTMODE_NODIALTONE       0x00001000\n#define LINEDISCONNECTMODE_NUMBERCHANGED    0x00002000\n#define LINEDISCONNECTMODE_OUTOFORDER       0x00004000\n#define LINEDISCONNECTMODE_TEMPFAILURE      0x00008000\n#define LINEDISCONNECTMODE_QOSUNAVAIL       0x00010000\n#define LINEDISCONNECTMODE_BLOCKED          0x00020000\n#define LINEDISCONNECTMODE_DONOTDISTURB     0x00040000\n#define LINEDISCONNECTMODE_CANCELLED        0x00080000\n\n#define LINECALLSELECT_LINE                 0x00000001\n#define LINECALLSELECT_ADDRESS              0x00000002\n#define LINECALLSELECT_CALL                 0x00000004\n#define LINECALLSELECT_DEVICEID             0x00000008\n\n#define LINECALLPRIVILEGE_NONE              0x00000001\n#define LINECALLPRIVILEGE_MONITOR           0x00000002\n#define LINECALLPRIVILEGE_OWNER             0x00000004\n#define LINECALLFEATURE_ACCEPT              0x00000001\n#define LINECALLFEATURE_ADDTOCONF           0x00000002\n#define LINECALLFEATURE_ANSWER              0x00000004\n#define LINECALLFEATURE_BLINDTRANSFER       0x00000008\n#define LINECALLFEATURE_COMPLETECALL        0x00000010\n#define LINECALLFEATURE_COMPLETETRANSF      0x00000020\n#define LINECALLFEATURE_DIAL                0x00000040\n#define LINECALLFEATURE_DROP                0x00000080\n#define LINECALLFEATURE_GATHERDIGITS        0x00000100\n#define LINECALLFEATURE_GENERATEDIGITS      0x00000200\n#define LINECALLFEATURE_GENERATETONE        0x00000400\n#define LINECALLFEATURE_HOLD                0x00000800\n#define LINECALLFEATURE_MONITORDIGITS       0x00001000\n#define LINECALLFEATURE_MONITORMEDIA        0x00002000\n#define LINECALLFEATURE_MONITORTONES        0x00004000\n#define LINECALLFEATURE_PARK                0x00008000\n#define LINECALLFEATURE_PREPAREADDCONF      0x00010000\n#define LINECALLFEATURE_REDIRECT            0x00020000\n#define LINECALLFEATURE_REMOVEFROMCONF      0x00040000\n#define LINECALLFEATURE_SECURECALL          0x00080000\n#define LINECALLFEATURE_SENDUSERUSER        0x00100000\n#define LINECALLFEATURE_SETCALLPARAMS       0x00200000\n#define LINECALLFEATURE_SETMEDIACONTROL     0x00400000\n#define LINECALLFEATURE_SETTERMINAL         0x00800000\n#define LINECALLFEATURE_SETUPCONF           0x01000000\n#define LINECALLFEATURE_SETUPTRANSFER       0x02000000\n#define LINECALLFEATURE_SWAPHOLD            0x04000000\n#define LINECALLFEATURE_UNHOLD              0x08000000\n#define LINECALLFEATURE_RELEASEUSERUSERINFO 0x10000000\n\n#define LINEINITIALIZEEXOPTION_USEHIDDENWINDOW   0x00000001\n#define LINEINITIALIZEEXOPTION_USEEVENT          0x00000002\n#define LINEINITIALIZEEXOPTION_USECOMPLETIONPORT 0x00000003\n#define LINEINITIALIZEEXOPTION_CALLHUBTRACKING   0x80000000\n\ntypedef struct lineaddresscaps_tag {\n    DWORD dwTotalSize;\n    DWORD dwNeededSize;\n    DWORD dwUsedSize;\n    DWORD dwLineDeviceID;\n    DWORD dwAddressSize;\n    DWORD dwAddressOffset;\n    DWORD dwDevSpecificSize;\n    DWORD dwDevSpecificOffset;\n    DWORD dwAddressSharing;\n    DWORD dwAddressStates;\n    DWORD dwCallInfoStates;\n    DWORD dwCallerIDFlags;\n    DWORD dwCalledIDFlags;\n    DWORD dwConnectedIDFlags;\n    DWORD dwRedirectionIDFlags;\n    DWORD dwRedirectingIDFlags;\n    DWORD dwCallStates;\n    DWORD dwDialToneModes;\n    DWORD dwBusyModes;\n    DWORD dwSpecialInfo;\n    DWORD dwDisconnectModes;\n    DWORD dwMaxNumActiveCalls;\n    DWORD dwMaxNumOnHoldCalls;\n    DWORD dwMaxNumOnHoldPendingCalls;\n    DWORD dwMaxNumConference;\n    DWORD dwMaxNumTransConf;\n    DWORD dwAddrCapFlags;\n    DWORD dwCallFeatures;\n    DWORD dwRemoveFromConfCaps;\n    DWORD dwRemoveFromConfState;\n    DWORD dwTransferModes;\n    DWORD dwParkModes;\n    DWORD dwForwardModes;\n    DWORD dwMaxForwardEntries;\n    DWORD dwMaxSpecificEntries;\n    DWORD dwMinFwdNumRings;\n    DWORD dwMaxFwdNumRings;\n    DWORD dwMaxCallCompletions;\n    DWORD dwCallCompletionConds;\n    DWORD dwCallCompletionModes;\n    DWORD dwNumCompletionMessages;\n    DWORD dwCompletionMsgTextEntrySize;\n    DWORD dwCompletionMsgTextSize;\n    DWORD dwCompletionMsgTextOffset;\n    DWORD dwAddressFeatures;\n} LINEADDRESSCAPS, *LPLINEADDRESSCAPS;\n\ntypedef struct lineaddressstatus_tag {\n    DWORD dwTotalSize;\n    DWORD dwNeededSize;\n    DWORD dwUsedSize;\n    DWORD dwNumInUse;\n    DWORD dwNumActiveCalls;\n    DWORD dwNumOnHoldCalls;\n    DWORD dwNumOnHoldPendCalls;\n    DWORD dwAddressFeatures;\n    DWORD dwNumRingsNoAnswer;\n    DWORD dwForwardNumEntries;\n    DWORD dwForwardSize;\n    DWORD dwForwardOffset;\n    DWORD dwTerminalModesSize;\n    DWORD dwTerminalModesOffset;\n    DWORD dwDevSpecificSize;\n    DWORD dwDevSpecificOffset;\n} LINEADDRESSSTATUS, *LPLINEADDRESSSTATUS;\n\ntypedef struct linedialparams_tag {\n    DWORD dwDialPause;\n    DWORD dwDialSpeed;\n    DWORD dwDigitDuration;\n    DWORD dwWaitForDialtone;\n} LINEDIALPARAMS, *LPLINEDIALPARAMS;\n\ntypedef struct linecallinfo_tag {\n    DWORD dwTotalSize;\n    DWORD dwNeededSize;\n    DWORD dwUsedSize;\n    HLINE hLine;\n    DWORD dwLineDeviceID;\n    DWORD dwAddressID;\n    DWORD dwBearerMode;\n    DWORD dwRate;\n    DWORD dwMediaMode;\n    DWORD dwAppSpecific;\n    DWORD dwCallID;\n    DWORD dwRelatedCallID;\n    DWORD dwCallParamFlags;\n    DWORD dwCallStates;\n    DWORD dwMonitorDigitModes;\n    DWORD dwMonitorMediaModes;\n    LINEDIALPARAMS DialParams;\n    DWORD dwOrigin;\n    DWORD dwReason;\n    DWORD dwCompletionID;\n    DWORD dwNumOwners;\n    DWORD dwNumMonitors;\n    DWORD dwCountryCode;\n    DWORD dwTrunk;\n    DWORD dwCallerIDFlags;\n    DWORD dwCallerIDSize;\n    DWORD dwCallerIDOffset;\n    DWORD dwCallerIDNameSize;\n    DWORD dwCallerIDNameOffset;\n    DWORD dwCalledIDFlags;\n    DWORD dwCalledIDSize;\n    DWORD dwCalledIDOffset;\n    DWORD dwCalledIDNameSize;\n    DWORD dwCalledIDNameOffset;\n    DWORD dwConnectedIDFlags;\n    DWORD dwConnectedIDSize;\n    DWORD dwConnectedIDOffset;\n    DWORD dwConnectedIDNameSize;\n    DWORD dwConnectedIDNameOffset;\n    DWORD dwRedirectionIDFlags;\n    DWORD dwRedirectionIDSize;\n    DWORD dwRedirectionIDOffset;\n    DWORD dwRedirectionIDNameSize;\n    DWORD dwRedirectionIDNameOffset;\n    DWORD dwRedirectingIDFlags;\n    DWORD dwRedirectingIDSize;\n    DWORD dwRedirectingIDOffset;\n    DWORD dwRedirectingIDNameSize;\n    DWORD dwRedirectingIDNameOffset;\n    DWORD dwAppNameSize;\n    DWORD dwAppNameOffset;\n    DWORD dwDisplayableAddressSize;\n    DWORD dwDisplayableAddressOffset;\n    DWORD dwCalledPartySize;\n    DWORD dwCalledPartyOffset;\n    DWORD dwCommentSize;\n    DWORD dwCommentOffset;\n    DWORD dwDisplaySize;\n    DWORD dwDisplayOffset;\n    DWORD dwUserUserInfoSize;\n    DWORD dwUserUserInfoOffset;\n    DWORD dwHighLevelCompSize;\n    DWORD dwHighLevelCompOffset;\n    DWORD dwLowLevelCompSize;\n    DWORD dwLowLevelCompOffset;\n    DWORD dwChargingInfoSize;\n    DWORD dwChargingInfoOffset;\n    DWORD dwTerminalModesSize;\n    DWORD dwTerminalModesOffset;\n    DWORD dwDevSpecificSize;\n    DWORD dwDevSpecificOffset;\n} LINECALLINFO, *LPLINECALLINFO;\n\ntypedef struct linecalllist_tag {\n    DWORD dwTotalSize;\n    DWORD dwNeededSize;\n    DWORD dwUsedSize;\n    DWORD dwCallsNumEntries;\n    DWORD dwCallsSize;\n    DWORD dwCallsOffset;\n} LINECALLLIST, *LPLINECALLLIST;\n\ntypedef struct linecallparams_tag {\n    DWORD dwTotalSize;\n    DWORD dwBearerMode;\n    DWORD dwMinRate;\n    DWORD dwMaxRate;\n    DWORD dwMediaMode;\n    DWORD dwCallParamFlags;\n    DWORD dwAddressMode;\n    DWORD dwAddressID;\n    LINEDIALPARAMS DialParams;\n    DWORD dwOrigAddressSize;\n    DWORD dwOrigAddressOffset;\n    DWORD dwDisplayableAddressSize;\n    DWORD dwDisplayableAddressOffset;\n    DWORD dwCalledPartySize;\n    DWORD dwCalledPartyOffset;\n    DWORD dwCommentSize;\n    DWORD dwCommentOffset;\n    DWORD dwUserUserInfoSize;\n    DWORD dwUserUserInfoOffset;\n    DWORD dwHighLevelCompSize;\n    DWORD dwHighLevelCompOffset;\n    DWORD dwLowLevelCompSize;\n    DWORD dwLowLevelCompOffset;\n    DWORD dwDevSpecificSize;\n    DWORD dwDevSpecificOffset;\n} LINECALLPARAMS, *LPLINECALLPARAMS;\n\ntypedef struct linecallstatus_tag {\n    DWORD dwTotalSize;\n    DWORD dwNeededSize;\n    DWORD dwUsedSize;\n    DWORD dwCallState;\n    DWORD dwCallStateMode;\n    DWORD dwCallPrivilege;\n    DWORD dwCallFeatures;\n    DWORD dwDevSpecificSize;\n    DWORD dwDevSpecificOffset;\n} LINECALLSTATUS, *LPLINECALLSTATUS;\n\ntypedef struct linecountrylist_tag {\n    DWORD dwTotalSize;\n    DWORD dwNeededSize;\n    DWORD dwUsedSize;\n    DWORD dwNumCountries;\n    DWORD dwCountryListSize;\n    DWORD dwCountryListOffset;\n} LINECOUNTRYLIST, *LPLINECOUNTRYLIST;\n\ntypedef struct linecountryentry_tag {\n    DWORD dwCountryID;\n    DWORD dwCountryCode;\n    DWORD dwNextCountryID;\n    DWORD dwCountryNameSize;\n    DWORD dwCountryNameOffset;\n    DWORD dwSameAreaRuleSize;\n    DWORD dwSameAreaRuleOffset;\n    DWORD dwLongDistanceRuleSize;\n    DWORD dwLongDistanceRuleOffset;\n    DWORD dwInternationalRuleSize;\n    DWORD dwInternationalRuleOffset;\n} LINECOUNTRYENTRY, *LPLINECOUNTRYENTRY;\n\ntypedef struct linedevcaps_tag {\n    DWORD dwTotalSize;\n    DWORD dwNeededSize;\n    DWORD dwUsedSize;\n    DWORD dwProviderInfoSize;\n    DWORD dwProviderInfoOffset;\n    DWORD dwSwitchInfoSize;\n    DWORD dwSwitchInfoOffset;\n    DWORD dwPermanentLineID;\n    DWORD dwLineNameSize;\n    DWORD dwLineNameOffset;\n    DWORD dwStringFormat;\n    DWORD dwAddressModes;\n    DWORD dwNumAddresses;\n    DWORD dwBearerModes;\n    DWORD dwMaxRate;\n    DWORD dwMediaModes;\n    DWORD dwGenerateToneModes;\n    DWORD dwGenerateToneMaxNumFreq;\n    DWORD dwGenerateDigitModes;\n    DWORD dwMonitorToneMaxNumFreq;\n    DWORD dwMonitorToneMaxNumEntries;\n    DWORD dwMonitorDigitModes;\n    DWORD dwGatherDigitsMinTimeout;\n    DWORD dwGatherDigitsMaxTimeout;\n    DWORD dwMedCtlDigitMaxListSize;\n    DWORD dwMedCtlMediaMaxListSize;\n    DWORD dwMedCtlToneMaxListSize;\n    DWORD dwMedCtlCallStateMaxListSize;\n    DWORD dwDevCapFlags;\n    DWORD dwMaxNumActiveCalls;\n    DWORD dwAnswerMode;\n    DWORD dwRingModes;\n    DWORD dwLineStates;\n    DWORD dwUUIAcceptSize;\n    DWORD dwUUIAnswerSize;\n    DWORD dwUUIMakeCallSize;\n    DWORD dwUUIDropSize;\n    DWORD dwUUISendUserUserInfoSize;\n    DWORD dwUUICallInfoSize;\n    LINEDIALPARAMS MinDialParams;\n    LINEDIALPARAMS MaxDialParams;\n    LINEDIALPARAMS DefaultDialParams;\n    DWORD dwNumTerminals;\n    DWORD dwTerminalCapsSize;\n    DWORD dwTerminalCapsOffset;\n    DWORD dwTerminalTextEntrySize;\n    DWORD dwTerminalTextSize;\n    DWORD dwTerminalTextOffset;\n    DWORD dwDevSpecificSize;\n    DWORD dwDevSpecificOffset;\n    DWORD dwLineFeatures;\n} LINEDEVCAPS, *LPLINEDEVCAPS;\n\ntypedef struct linedevstatus_tag {\n    DWORD dwTotalSize;\n    DWORD dwNeededSize;\n    DWORD dwUsedSize;\n    DWORD dwNumOpens;\n    DWORD dwOpenMediaModes;\n    DWORD dwNumActiveCalls;\n    DWORD dwNumOnHoldCalls;\n    DWORD dwNumOnHoldPendCalls;\n    DWORD dwLineFeatures;\n    DWORD dwNumCallCompletions;\n    DWORD dwRingMode;\n    DWORD dwSignalLevel;\n    DWORD dwBatteryLevel;\n    DWORD dwRoamMode;\n    DWORD dwDevStatusFlags;\n    DWORD dwTerminalModesSize;\n    DWORD dwTerminalModesOffset;\n    DWORD dwDevSpecificSize;\n    DWORD dwDevSpecificOffset;\n} LINEDEVSTATUS, *LPLINEDEVSTATUS;\n\ntypedef struct lineextensionid_tag {\n    DWORD dwExtensionID0;\n    DWORD dwExtensionID1;\n    DWORD dwExtensionID2;\n    DWORD dwExtensionID3;\n} LINEEXTENSIONID, *LPLINEEXTENSIONID;\n\ntypedef struct lineforward_tag {\n    DWORD dwForwardMode;\n    DWORD dwCallerAddressSize;\n    DWORD dwCallerAddressOffset;\n    DWORD dwDestCountryCode;\n    DWORD dwDestAddressSize;\n    DWORD dwDestAddressOffset;\n} LINEFORWARD, *LPLINEFORWARD;\n\ntypedef struct lineforwardlist_tag {\n    DWORD dwTotalSize;\n    DWORD dwNumEntries;\n    LINEFORWARD ForwardList[1];\n} LINEFORWARDLIST, *LPLINEFORWARDLIST;\n\ntypedef struct linegeneratetone_tag {\n    DWORD dwFrequency;\n    DWORD dwCadenceOn;\n    DWORD dwCadenceOff;\n    DWORD dwVolume;\n} LINEGENERATETONE, *LPLINEGENERATETONE;\n\ntypedef struct lineinitializeexparams_tag {\n    DWORD dwTotalSize;\n    DWORD dwNeededSize;\n    DWORD dwUsedSize;\n    DWORD dwOptions;\n    union {\n    HANDLE hEvent;\n    HANDLE hCompletionPort;\n    } Handles;\n    DWORD dwCompletionKey;\n} LINEINITIALIZEEXPARAMS, *LPLINEINITIALIZEEXPARAMS;\n\ntypedef struct linemediacontrolcallstate_tag {\n    DWORD dwCallStates;\n    DWORD dwMediaControl;\n} LINEMEDIACONTROLCALLSTATE, *LPLINEMEDIACONTROLCALLSTATE;\n\ntypedef struct linemediacontroldigit_tag {\n    DWORD dwDigit;\n    DWORD dwDigitModes;\n    DWORD dwMediaControl;\n} LINEMEDIACONTROLDIGIT, *LPLINEMEDIACONTROLDIGIT;\n\ntypedef struct linemediacontrolmedia_tag {\n    DWORD dwMediaModes;\n    DWORD dwDuration;\n    DWORD dwMediaControl;\n} LINEMEDIACONTROLMEDIA, *LPLINEMEDIACONTROLMEDIA;\n\ntypedef struct linemediacontroltone_tag {\n    DWORD dwAppSpecific;\n    DWORD dwDuration;\n    DWORD dwFrequency1;\n    DWORD dwFrequency2;\n    DWORD dwFrequency3;\n    DWORD dwMediaControl;\n} LINEMEDIACONTROLTONE, *LPLINEMEDIACONTROLTONE;\n\ntypedef struct linemonitortone_tag {\n    DWORD dwAppSpecific;\n    DWORD dwDuration;\n    DWORD dwFrequency1;\n    DWORD dwFrequency2;\n    DWORD dwFrequency3;\n} LINEMONITORTONE, *LPLINEMONITORTONE;\n\ntypedef struct lineproviderlist_tag {\n    DWORD dwTotalSize;\n    DWORD dwNeededSize;\n    DWORD dwUsedSize;\n    DWORD dwNumProviders;\n    DWORD dwProviderListSize;\n    DWORD dwProviderListOffset;\n} LINEPROVIDERLIST, *LPLINEPROVIDERLIST;\n\ntypedef struct linetranslatecaps_tag {\n    DWORD dwTotalSize;\n    DWORD dwNeededSize;\n    DWORD dwUsedSize;\n    DWORD dwNumLocations;\n    DWORD dwLocationListSize;\n    DWORD dwLocationListOffset;\n    DWORD dwCurrentLocationID;\n    DWORD dwNumCards;\n    DWORD dwCardListSize;\n    DWORD dwCardListOffset;\n    DWORD dwCurrentPreferredCardID;\n} LINETRANSLATECAPS, *LPLINETRANSLATECAPS;\n\ntypedef struct linelocationentry_tag {\n    DWORD dwPermanentLocationID;\n    DWORD dwLocationNameSize;\n    DWORD dwLocationNameOffset;\n    DWORD dwCountryCode;\n    DWORD dwCityCodeSize;\n    DWORD dwCityCodeOffset;\n    DWORD dwPreferredCardID;\n    DWORD dwLocalAccessCodeSize;\n    DWORD dwLocalAccessCodeOffset;\n    DWORD dwLongDistanceAccessCodeSize;\n    DWORD dwLongDistanceAccessCodeOffset;\n    DWORD dwTollPrefixListSize;\n    DWORD dwTollPrefixListOffset;\n    DWORD dwCountryID;\n    DWORD dwOptions;\n    DWORD dwCancelCallWaitingSize;\n    DWORD dwCancelCallWaitingOffset;\n} LINELOCATIONENTRY, *LPLINELOCATIONENTRY;\n\ntypedef struct linecardentry_tag {\n    DWORD dwPermanentCardID;\n    DWORD dwCardNameSize;\n    DWORD dwCardNameOffset;\n    DWORD dwCardNumberDigits;\n    DWORD dwSameAreaRuleSize;\n    DWORD dwSameAreaRuleOffset;\n    DWORD dwLongDistanceRuleSize;\n    DWORD dwLongDistanceRuleOffset;\n    DWORD dwInternationalRuleSize;\n    DWORD dwInternationalRuleOffset;\n    DWORD dwOptions;\n} LINECARDENTRY, *LPLINECARDENTRY;\n\n\ntypedef struct linetranslateoutput_tag {\n    DWORD dwTotalSize;\n    DWORD dwNeededSize;\n    DWORD dwUsedSize;\n    DWORD dwDialableStringSize;\n    DWORD dwDialableStringOffset;\n    DWORD dwDisplayableStringSize;\n    DWORD dwDisplayableStringOffset;\n    DWORD dwCurrentCountry;\n    DWORD dwDestCountry;\n    DWORD dwTranslateResults;\n} LINETRANSLATEOUTPUT, *LPLINETRANSLATEOUTPUT;\n\ntypedef struct linemessage_tag {\n  DWORD     hDevice;\n  DWORD     dwMessageID;\n  DWORD_PTR dwCallbackInstance;\n  DWORD_PTR dwParam1;\n  DWORD_PTR dwParam2;\n  DWORD_PTR dwParam3;\n} LINEMESSAGE, *LPLINEMESSAGE;\n\ntypedef void (CALLBACK *LINECALLBACK)(DWORD, DWORD, DWORD, DWORD, DWORD, DWORD);\n\ntypedef struct _PHONEAPP {\n  int dummy;\n} PHONEAPP, *LPPHONEAPP;\n\ntypedef struct _PHONE {\n    DWORD dwRingMode;\n    DWORD dwVolume;\n} PHONE, *LPPHONE;\n\ntypedef struct phonebuttoninfo_tag {\n    DWORD dwTotalSize;\n    DWORD dwNeededSize;\n    DWORD dwUsedSize;\n    DWORD dwButtonMode;\n    DWORD dwButtonFunction;\n    DWORD dwButtonTextSize;\n    DWORD dwButtonTextOffset;\n    DWORD dwDevSpecificSize;\n    DWORD dwDevSpecificOffset;\n    DWORD dwButtonState;\n} PHONEBUTTONINFO, *LPPHONEBUTTONINFO;\n\ntypedef struct phonecaps_tag {\n    DWORD dwTotalSize;\n    DWORD dwNeededSize;\n    DWORD dwUsedSize;\n    DWORD dwProviderInfoSize;\n    DWORD dwProviderInfoOffset;\n    DWORD dwPhoneInfoSize;\n    DWORD dwPhoneInfoOffset;\n    DWORD dwPermanentPhoneID;\n    DWORD dwPhoneNameSize;\n    DWORD dwPhoneNameOffset;\n    DWORD dwStringFormat;\n    DWORD dwPhoneStates;\n    DWORD dwHookSwitchDevs;\n    DWORD dwHandsetHookSwitchModes;\n    DWORD dwSpeakerHookSwitchModes;\n    DWORD dwHeadsetHookSwitchModes;\n    DWORD dwVolumeFlags;\n    DWORD dwGainFlags;\n    DWORD dwDisplayNumRows;\n    DWORD dwDisplayNumColumns;\n    DWORD dwNumRingModes;\n    DWORD dwNumButtonLamps;\n    DWORD dwButtonModesSize;\n    DWORD dwButtonModesOffset;\n    DWORD dwButtonFunctionsSize;\n    DWORD dwButtonFunctionsOffset;\n    DWORD dwLampModesSize;\n    DWORD dwLampModesOffset;\n    DWORD dwNumSetData;\n    DWORD dwSetDataSize;\n    DWORD dwSetDataOffset;\n    DWORD dwNumGetData;\n    DWORD dwGetDataSize;\n    DWORD dwGetDataOffset;\n    DWORD dwDevSpecificSize;\n    DWORD dwDevSpecificOffset;\n} PHONECAPS, *LPPHONECAPS;\n\ntypedef struct phoneextensionid_tag {\n    DWORD dwExtensionID0;\n    DWORD dwExtensionID1;\n    DWORD dwExtensionID2;\n    DWORD dwExtensionID3;\n} PHONEEXTENSIONID, *LPPHONEEXTENSIONID;\n\ntypedef struct phoneinitializeexparams_tag {\n    DWORD dwTotalSize;\n    DWORD dwNeededSize;\n    DWORD dwUsedSize;\n    DWORD dwOptions;\n    union {\n    HANDLE hEvent;\n    HANDLE hCompletionPort;\n    } Handles;\n    DWORD dwCompletionKey;\n} PHONEINITIALIZEEXPARAMS, *LPPHONEINITIALIZEEXPARAMS;\n\ntypedef struct phonemessage_tag {\n  DWORD     hDevice;\n  DWORD     dwMessageID;\n  DWORD_PTR dwCallbackInstance;\n  DWORD_PTR dwParam1;\n  DWORD_PTR dwParam2;\n  DWORD_PTR dwParam3;\n} PHONEMESSAGE, *LPPHONEMESSAGE;\n\ntypedef struct phonestatus_tag {\n    DWORD dwTotalSize;\n    DWORD dwNeededSize;\n    DWORD dwUsedSize;\n    DWORD dwStatusFlags;\n    DWORD dwNumOwners;\n    DWORD dwRingMOde;\n    DWORD dwRingVolume;\n    DWORD dwHandsetHookSwitchMode;\n    DWORD dwHandsetVolume;\n    DWORD dwHandsetGain;\n    DWORD dwSpeakerHookSwitchMode;\n    DWORD dwSpeakerVolume;\n    DWORD dwSpeakerGain;\n    DWORD dwHeadsetHookSwitchMode;\n    DWORD dwHeadsetVolume;\n    DWORD dwHeadsetGain;\n    DWORD dwDisplaySize;\n    DWORD dwDisplayOffset;\n    DWORD dwLampModesSize;\n    DWORD dwLampModesOffset;\n    DWORD dwOwnerNameSize;\n    DWORD dwOwnerNameOffset;\n    DWORD dwDevSpecificSize;\n    DWORD dwDevSpecificOffset;\n} PHONESTATUS, *LPPHONESTATUS;\n\ntypedef void (CALLBACK *PHONECALLBACK)(HANDLE, DWORD, DWORD, DWORD, DWORD, DWORD);\n\ntypedef struct varstring_tag {\n    DWORD dwTotalSize;\n    DWORD dwNeededSize;\n    DWORD dwUsedSize;\n    DWORD dwStringFormat;\n    DWORD dwStringSize;\n    DWORD dwStringOffset;\n} VARSTRING, *LPVARSTRING;\n\n/* line functions */\nDWORD WINAPI lineAccept(HCALL,LPCSTR,DWORD);\nDWORD WINAPI lineAddProviderA(LPCSTR,HWND,LPDWORD);\nDWORD WINAPI lineAddProviderW(LPCWSTR,HWND,LPDWORD);\n#define      lineAddProvider WINELIB_NAME_AW(lineAddProvider)\nDWORD WINAPI lineAddToConference(HCALL,HCALL);\nDWORD WINAPI lineAnswer(HCALL,LPCSTR,DWORD);\nDWORD WINAPI lineBlindTransfer(HCALL,LPCSTR,DWORD);\nDWORD WINAPI lineClose(HLINE);\nDWORD WINAPI lineCompleteCall(HCALL,LPDWORD,DWORD,DWORD);\nDWORD WINAPI lineCompleteTransfer(HCALL,HCALL,LPHCALL,DWORD);\nDWORD WINAPI lineConfigDialog(DWORD,HWND,LPCSTR);\nDWORD WINAPI lineConfigDialogEdit(DWORD,HWND,LPCSTR,LPVOID const,DWORD,LPVARSTRING);\nDWORD WINAPI lineConfigProvider(HWND,DWORD);\nDWORD WINAPI lineDeallocateCall(HCALL);\nDWORD WINAPI lineDevSpecific(HLINE,DWORD,HCALL,LPVOID,DWORD);\nDWORD WINAPI lineDevSpecificFeature(HLINE,DWORD,LPVOID,DWORD);\nDWORD WINAPI lineDial(HCALL,LPCSTR,DWORD);\nDWORD WINAPI lineDrop(HCALL,LPCSTR,DWORD);\nDWORD WINAPI lineForward(HLINE,DWORD,DWORD,LPLINEFORWARDLIST,DWORD,LPHCALL,LPLINECALLPARAMS);\nDWORD WINAPI lineGatherDigits(HCALL,DWORD,LPSTR,DWORD,LPCSTR,DWORD,DWORD);\nDWORD WINAPI lineGenerateDigits(HCALL,DWORD,LPCSTR,DWORD);\nDWORD WINAPI lineGenerateTone(HCALL,DWORD,DWORD,DWORD,LPLINEGENERATETONE);\nDWORD WINAPI lineGetAddressCaps(HLINEAPP,DWORD,DWORD,DWORD,DWORD,LPLINEADDRESSCAPS);\nDWORD WINAPI lineGetAddressID(HLINE,LPDWORD,DWORD,LPCSTR,DWORD);\nDWORD WINAPI lineGetAddressStatus(HLINE,DWORD,LPLINEADDRESSSTATUS);\nDWORD WINAPI lineGetAppPriority(LPCSTR,DWORD,LPLINEEXTENSIONID const,DWORD,LPVARSTRING,LPDWORD);\nDWORD WINAPI lineGetCallInfo(HCALL,LPLINECALLINFO);\nDWORD WINAPI lineGetCallStatus(HCALL,LPLINECALLSTATUS);\nDWORD WINAPI lineGetConfRelatedCalls(HCALL,LPLINECALLLIST);\nDWORD WINAPI lineGetCountry(DWORD,DWORD,LPLINECOUNTRYLIST);\nDWORD WINAPI lineGetDevCapsA(HLINEAPP,DWORD,DWORD,DWORD,LPLINEDEVCAPS);\nDWORD WINAPI lineGetDevCapsW(HLINEAPP,DWORD,DWORD,DWORD,LPLINEDEVCAPS);\n#define      lineGetDevCaps WINELIB_NAME_AW(lineGetDevCaps)\nDWORD WINAPI lineGetDevConfig(DWORD,LPVARSTRING,LPCSTR);\nDWORD WINAPI lineGetIDA(HLINE,DWORD,HCALL,DWORD,LPVARSTRING,LPCSTR);\nDWORD WINAPI lineGetIDW(HLINE,DWORD,HCALL,DWORD,LPVARSTRING,LPCWSTR);\n#define      lineGetID WINELIB_NAME_AW(lineGetID)\nDWORD WINAPI lineGetIcon(DWORD,LPCSTR,HICON *);\nDWORD WINAPI lineGetLineDevStatus(HLINE,LPLINEDEVSTATUS);\nDWORD WINAPI lineGetNewCalls(HLINE,DWORD,DWORD,LPLINECALLLIST);\nDWORD WINAPI lineGetNumRings(HLINE,DWORD,LPDWORD);\nDWORD WINAPI lineGetProviderListA(DWORD,LPLINEPROVIDERLIST);\nDWORD WINAPI lineGetProviderListW(DWORD,LPLINEPROVIDERLIST);\n#define      lineGetProviderList WINELIB_NAME_AW(lineGetProviderList)\nDWORD WINAPI lineGetRequest(HLINEAPP,DWORD,LPVOID);\nDWORD WINAPI lineGetStatusMessages(HLINE,LPDWORD,LPDWORD);\nDWORD WINAPI lineGetTranslateCaps(HLINEAPP,DWORD,LPLINETRANSLATECAPS);\nDWORD WINAPI lineHandoff(HCALL,LPCSTR,DWORD);\nDWORD WINAPI lineHold(HCALL);\nDWORD WINAPI lineInitialize(LPHLINEAPP,HINSTANCE,LINECALLBACK,LPCSTR,LPDWORD);\nLONG  WINAPI lineInitializeExA(LPHLINEAPP,HINSTANCE,LINECALLBACK,LPCSTR,LPDWORD,LPDWORD,LPLINEINITIALIZEEXPARAMS);\nLONG  WINAPI lineInitializeExW(LPHLINEAPP,HINSTANCE,LINECALLBACK,LPCWSTR,LPDWORD,LPDWORD,LPLINEINITIALIZEEXPARAMS);\n#define      lineInitializeEx WINELIB_NAME_AW(lineInitializeEx)\nDWORD WINAPI lineMakeCallA(HLINE,LPHCALL,LPCSTR,DWORD,LPLINECALLPARAMS);\nDWORD WINAPI lineMakeCallW(HLINE,LPHCALL,LPCWSTR,DWORD,LPLINECALLPARAMS);\n#define      lineMakeCall WINELIB_NAME_AW(lineMakeCall)\nDWORD WINAPI lineMonitorDigits(HCALL,DWORD);\nDWORD WINAPI lineMonitorMedia(HCALL,DWORD);\nDWORD WINAPI lineMonitorTones(HCALL,LPLINEMONITORTONE,DWORD);\nDWORD WINAPI lineNegotiateAPIVersion(HLINEAPP,DWORD,DWORD,DWORD,LPDWORD,LPLINEEXTENSIONID);\nDWORD WINAPI lineNegotiateExtVersion(HLINEAPP,DWORD,DWORD,DWORD,DWORD,LPDWORD);\nDWORD WINAPI lineOpen(HLINEAPP,DWORD,LPHLINE,DWORD,DWORD,DWORD,DWORD,DWORD,LPLINECALLPARAMS);\nDWORD WINAPI linePark(HCALL,DWORD,LPCSTR,LPVARSTRING);\nDWORD WINAPI linePickup(HLINE,DWORD,LPHCALL,LPCSTR,LPCSTR);\nDWORD WINAPI linePrepareAddToConference(HCALL,LPHCALL,LPLINECALLPARAMS);\nDWORD WINAPI lineRedirect(HCALL,LPCSTR,DWORD);\nDWORD WINAPI lineRegisterRequestRecipient(HLINEAPP,DWORD,DWORD,DWORD);\nDWORD WINAPI lineReleaseUserUserInfo(HCALL);\nDWORD WINAPI lineRemoveFromConference(HCALL);\nDWORD WINAPI lineRemoveProvider(DWORD,HWND);\nDWORD WINAPI lineSecureCall(HCALL);\nDWORD WINAPI lineSendUserUserInfo(HCALL,LPCSTR,DWORD);\nDWORD WINAPI lineSetAppPriority(LPCSTR,DWORD,LPLINEEXTENSIONID const,DWORD,LPCSTR,DWORD);\nDWORD WINAPI lineSetAppSpecific(HCALL,DWORD);\nDWORD WINAPI lineSetCallParams(HCALL,DWORD,DWORD,DWORD,LPLINEDIALPARAMS);\nDWORD WINAPI lineSetCallPrivilege(HCALL,DWORD);\nDWORD WINAPI lineSetCurrentLocation(HLINEAPP,DWORD);\nDWORD WINAPI lineSetDevConfig(DWORD,LPVOID,DWORD,LPCSTR);\nDWORD WINAPI lineSetMediaControl(HLINE,DWORD,HCALL,DWORD,LPLINEMEDIACONTROLDIGIT,DWORD,LPLINEMEDIACONTROLMEDIA,DWORD,LPLINEMEDIACONTROLTONE,DWORD,LPLINEMEDIACONTROLCALLSTATE,DWORD);\nDWORD WINAPI lineSetMediaMode(HCALL,DWORD);\nDWORD WINAPI lineSetNumRings(HLINE,DWORD,DWORD);\nDWORD WINAPI lineSetStatusMessages(HLINE,DWORD,DWORD);\nDWORD WINAPI lineSetTerminal(HLINE,DWORD,HCALL,DWORD,DWORD,DWORD,DWORD);\nDWORD WINAPI lineSetTollList(HLINEAPP,DWORD,LPCSTR,DWORD);\nDWORD WINAPI lineSetupConference(HCALL,HLINE,LPHCALL,LPHCALL,DWORD,LPLINECALLPARAMS);\nDWORD WINAPI lineSetupTransfer(HCALL,LPHCALL,LPLINECALLPARAMS);\nDWORD WINAPI lineShutdown(HLINEAPP);\nDWORD WINAPI lineSwapHold(HCALL,HCALL);\nDWORD WINAPI lineTranslateAddress(HLINEAPP,DWORD,DWORD,LPCSTR,DWORD,DWORD,LPLINETRANSLATEOUTPUT);\nDWORD WINAPI lineTranslateDialog(HLINEAPP,DWORD,DWORD,HWND,LPCSTR);\nDWORD WINAPI lineUncompleteCall(HLINE,DWORD);\nDWORD WINAPI lineUnHold(HCALL);\nDWORD WINAPI lineUnpark(HLINE,DWORD,LPHCALL,LPCSTR);\n\nDWORD WINAPI lineBlindTransferA(HCALL,LPCSTR,DWORD);\nDWORD WINAPI lineConfigDialogA(DWORD,HWND,LPCSTR);\nDWORD WINAPI lineConfigDialogEditA(DWORD,HWND,LPCSTR,LPVOID const,DWORD,LPVARSTRING);\nDWORD WINAPI lineDialA(HCALL,LPCSTR,DWORD);\nDWORD WINAPI lineForwardA(HLINE,DWORD,DWORD,LPLINEFORWARDLIST,DWORD,LPHCALL,LPLINECALLPARAMS);\nDWORD WINAPI lineGatherDigitsA(HCALL,DWORD,LPSTR,DWORD,LPCSTR,DWORD,DWORD);\nDWORD WINAPI lineGenerateDigitsA(HCALL,DWORD,LPCSTR,DWORD);\nDWORD WINAPI lineGetAddressCapsA(HLINEAPP,DWORD,DWORD,DWORD,DWORD,LPLINEADDRESSCAPS);\nDWORD WINAPI lineGetAddressIDA(HLINE,LPDWORD,DWORD,LPCSTR,DWORD);\nDWORD WINAPI lineGetAddressStatusA(HLINE,DWORD,LPLINEADDRESSSTATUS);\nDWORD WINAPI lineGetAppPriorityA(LPCSTR,DWORD,LPLINEEXTENSIONID const,DWORD,LPVARSTRING,LPDWORD);\nDWORD WINAPI lineGetCallInfoA(HCALL,LPLINECALLINFO);\nDWORD WINAPI lineGetCountryA(DWORD,DWORD,LPLINECOUNTRYLIST);\nDWORD WINAPI lineGetDevConfigA(DWORD,LPVARSTRING,LPCSTR);\nDWORD WINAPI lineGetIconA(DWORD,LPCSTR,HICON *);\nDWORD WINAPI lineGetLineDevStatusA(HLINE,LPLINEDEVSTATUS);\nDWORD WINAPI lineGetRequestA(HLINEAPP,DWORD,LPVOID);\nDWORD WINAPI lineGetTranslateCapsA(HLINEAPP,DWORD,LPLINETRANSLATECAPS);\nDWORD WINAPI lineHandoffA(HCALL,LPCSTR,DWORD);\nDWORD WINAPI lineOpenA(HLINEAPP,DWORD,LPHLINE,DWORD,DWORD,DWORD,DWORD,DWORD,LPLINECALLPARAMS);\nDWORD WINAPI lineParkA(HCALL,DWORD,LPCSTR,LPVARSTRING);\nDWORD WINAPI linePickupA(HLINE,DWORD,LPHCALL,LPCSTR,LPCSTR);\nDWORD WINAPI linePrepareAddToConferenceA(HCALL,LPHCALL,LPLINECALLPARAMS);\nDWORD WINAPI lineRedirectA(HCALL,LPCSTR,DWORD);\nDWORD WINAPI lineSetAppPriorityA(LPCSTR,DWORD,LPLINEEXTENSIONID const,DWORD,LPCSTR,DWORD);\nDWORD WINAPI lineSetDevConfigA(DWORD,LPVOID,DWORD,LPCSTR);\nDWORD WINAPI lineSetTollListA(HLINEAPP,DWORD,LPCSTR,DWORD);\nDWORD WINAPI lineSetupConferenceA(HCALL,HLINE,LPHCALL,LPHCALL,DWORD,LPLINECALLPARAMS);\nDWORD WINAPI lineSetupTransferA(HCALL,LPHCALL,LPLINECALLPARAMS);\nDWORD WINAPI lineTranslateAddressA(HLINEAPP,DWORD,DWORD,LPCSTR,DWORD,DWORD,LPLINETRANSLATEOUTPUT);\nDWORD WINAPI lineTranslateDialogA(HLINEAPP,DWORD,DWORD,HWND,LPCSTR);\nDWORD WINAPI lineUnhold(HCALL);\nDWORD WINAPI lineUnparkA(HLINE,DWORD,LPHCALL,LPCSTR);\n\n/* phone functions */\nDWORD WINAPI phoneClose(HPHONE);\nDWORD WINAPI phoneConfigDialog(DWORD,HWND,LPCSTR);\nDWORD WINAPI phoneDevSpecific(HPHONE,LPVOID,DWORD);\nDWORD WINAPI phoneGetButtonInfo(HPHONE,DWORD,LPPHONEBUTTONINFO);\nDWORD WINAPI phoneGetData(HPHONE,DWORD,LPVOID,DWORD);\nDWORD WINAPI phoneGetDevCaps(HPHONEAPP,DWORD,DWORD,DWORD,LPPHONECAPS);\nDWORD WINAPI phoneGetDisplay(HPHONE,LPVARSTRING);\nDWORD WINAPI phoneGetGain(HPHONE,DWORD,LPDWORD);\nDWORD WINAPI phoneGetHookSwitch(HPHONE,LPDWORD);\nDWORD WINAPI phoneGetID(HPHONE,LPVARSTRING,LPCSTR);\nDWORD WINAPI phoneGetIcon(DWORD,LPCSTR,HICON *);\nDWORD WINAPI phoneGetLamp(HPHONE,DWORD,LPDWORD);\nDWORD WINAPI phoneGetRing(HPHONE,LPDWORD,LPDWORD);\nDWORD WINAPI phoneGetStatus(HPHONE,LPPHONESTATUS);\nDWORD WINAPI phoneGetStatusMessages(HPHONE,LPDWORD,LPDWORD,LPDWORD);\nDWORD WINAPI phoneGetVolume(HPHONE,DWORD,LPDWORD);\nDWORD WINAPI phoneInitialize(LPHPHONEAPP,HINSTANCE,PHONECALLBACK,LPCSTR,LPDWORD);\nDWORD WINAPI phoneNegotiateAPIVersion(HPHONEAPP,DWORD,DWORD,DWORD,LPDWORD,LPPHONEEXTENSIONID);\nDWORD WINAPI phoneNegotiateExtVersion(HPHONEAPP,DWORD,DWORD,DWORD,DWORD,LPDWORD);\nDWORD WINAPI phoneOpen(HPHONEAPP,DWORD,LPHPHONE,DWORD,DWORD,DWORD,DWORD);\nDWORD WINAPI phoneSetButtonInfo(HPHONE,DWORD,LPPHONEBUTTONINFO);\nDWORD WINAPI phoneSetData(HPHONE,DWORD,LPVOID,DWORD);\nDWORD WINAPI phoneSetDisplay(HPHONE,DWORD,DWORD,LPCSTR,DWORD);\nDWORD WINAPI phoneSetGain(HPHONE,DWORD,DWORD);\nDWORD WINAPI phoneSetHookSwitch(HPHONE,DWORD,DWORD);\nDWORD WINAPI phoneSetLamp(HPHONE,DWORD,DWORD);\nDWORD WINAPI phoneSetRing(HPHONE,DWORD,DWORD);\nDWORD WINAPI phoneSetStatusMessages(HPHONE,DWORD,DWORD,DWORD);\nDWORD WINAPI phoneSetVolume(HPHONE,DWORD,DWORD);\nDWORD WINAPI phoneShutdown(HPHONEAPP);\n\nDWORD WINAPI phoneConfigDialogA(DWORD,HWND,LPCSTR);\nDWORD WINAPI phoneGetButtonInfoA(HPHONE,DWORD,LPPHONEBUTTONINFO);\nDWORD WINAPI phoneGetDevCapsA(HPHONEAPP,DWORD,DWORD,DWORD,LPPHONECAPS);\nDWORD WINAPI phoneGetIDA(HPHONE,LPVARSTRING,LPCSTR);\nDWORD WINAPI phoneGetIconA(DWORD,LPCSTR,HICON *);\nDWORD WINAPI phoneGetStatusA(HPHONE,LPPHONESTATUS);\nDWORD WINAPI phoneSetButtonInfoA(HPHONE,DWORD,LPPHONEBUTTONINFO);\n\n/* \"assisted\" functions */\nDWORD WINAPI tapiGetLocationInfo(LPSTR,LPSTR);\nDWORD WINAPI tapiRequestMakeCall(LPCSTR,LPCSTR,LPCSTR,LPCSTR);\n\nDWORD WINAPI tapiGetLocationInfoA(LPSTR,LPSTR);\nDWORD WINAPI tapiRequestMakeCallA(LPCSTR,LPCSTR,LPCSTR,LPCSTR);\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif /* __WINE_TAPI_H */\n"
  },
  {
    "path": "wine/windows/taskschd.idl",
    "content": "/*\n * Task Scheduler definitions\n *\n * Copyright 2013 Dmitry Timoshkov\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\n\n[\n    uuid(e34cb9f1-c7f7-424c-be29-027dcc09363a),\n    version(1.0)\n]\nlibrary TaskScheduler\n{\nimportlib(\"stdole2.tlb\");\n\ntypedef enum _TASK_STATE\n{\n    TASK_STATE_UNKNOWN,\n    TASK_STATE_DISABLED,\n    TASK_STATE_QUEUED,\n    TASK_STATE_READY,\n    TASK_STATE_RUNNING\n} TASK_STATE;\n\ntypedef enum _TASK_ENUM_FLAGS\n{\n    TASK_ENUM_HIDDEN = 0x0001\n} TASK_ENUM_FLAGS;\n\ntypedef enum _TASK_LOGON_TYPE\n{\n    TASK_LOGON_NONE,\n    TASK_LOGON_PASSWORD,\n    TASK_LOGON_S4U,\n    TASK_LOGON_INTERACTIVE_TOKEN,\n    TASK_LOGON_GROUP,\n    TASK_LOGON_SERVICE_ACCOUNT,\n    TASK_LOGON_INTERACTIVE_TOKEN_OR_PASSWORD\n} TASK_LOGON_TYPE;\n\ntypedef enum _TASK_RUNLEVEL\n{\n    TASK_RUNLEVEL_LUA,\n    TASK_RUNLEVEL_HIGHEST\n} TASK_RUNLEVEL_TYPE;\n\ntypedef enum _TASK_TRIGGER_TYPE2\n{\n    TASK_TRIGGER_EVENT,\n    TASK_TRIGGER_TIME,\n    TASK_TRIGGER_DAILY,\n    TASK_TRIGGER_WEEKLY,\n    TASK_TRIGGER_MONTHLY,\n    TASK_TRIGGER_MONTHLYDOW,\n    TASK_TRIGGER_IDLE,\n    TASK_TRIGGER_REGISTRATION,\n    TASK_TRIGGER_BOOT,\n    TASK_TRIGGER_LOGON,\n    TASK_TRIGGER_SESSION_STATE_CHANGE = 11\n} TASK_TRIGGER_TYPE2;\n\ntypedef enum _TASK_ACTION_TYPE\n{\n    TASK_ACTION_EXEC = 0,\n    TASK_ACTION_COM_HANDLER = 5,\n    TASK_ACTION_SEND_EMAIL = 6,\n    TASK_ACTION_SHOW_MESSAGE = 7\n} TASK_ACTION_TYPE;\n\ntypedef enum _TASK_INSTANCES_POLICY\n{\n    TASK_INSTANCES_PARALLEL,\n    TASK_INSTANCES_QUEUE,\n    TASK_INSTANCES_IGNORE_NEW,\n    TASK_INSTANCES_STOP_EXISTING\n} TASK_INSTANCES_POLICY;\n\ntypedef enum _TASK_COMPATIBILITY\n{\n    TASK_COMPATIBILITY_AT,\n    TASK_COMPATIBILITY_V1,\n    TASK_COMPATIBILITY_V2,\n    TASK_COMPATIBILITY_V2_1\n} TASK_COMPATIBILITY;\n\ntypedef enum _TASK_CREATION\n{\n    TASK_VALIDATE_ONLY = 1,\n    TASK_CREATE = 2,\n    TASK_UPDATE = 4,\n    TASK_CREATE_OR_UPDATE = 6,\n    TASK_DISABLE = 8,\n    TASK_DONT_ADD_PRINCIPAL_ACE = 16,\n    TASK_IGNORE_REGISTRATION_TRIGGERS = 32\n} TASK_CREATION;\n\ninterface ITaskService;\ninterface IRegisteredTask;\ninterface IRegisteredTaskCollection;\ninterface IRegistrationInfo;\ninterface ITaskFolder;\ninterface ITaskFolderCollection;\ninterface ITaskDefinition;\ninterface ITaskSettings;\ninterface IIdleSettings;\ninterface IRunningTask;\ninterface IRunningTaskCollection;\ninterface ITrigger;\ninterface ITriggerCollection;\ninterface ITimeTrigger;\ninterface IRepetitionPattern;\ninterface IAction;\ninterface IActionCollection;\ninterface IExecAction;\ninterface INetworkSettings;\ninterface IPrincipal;\n\n[\n    object,\n    oleautomation,\n    uuid(2faba4c7-4da9-4013-9697-20cc3fd40f85)\n]\ninterface ITaskService : IDispatch\n{\n    HRESULT GetFolder([in] BSTR path, [out, retval] ITaskFolder **folder );\n    HRESULT GetRunningTasks([in] LONG flags, [out, retval] IRunningTaskCollection **tasks );\n    HRESULT NewTask([in] DWORD flags, [out, retval] ITaskDefinition **definition );\n    HRESULT Connect([in, optional] VARIANT server, [in, optional] VARIANT user, [in, optional] VARIANT domain, [in, optional] VARIANT password);\n    [propget] HRESULT Connected([out, retval] VARIANT_BOOL *connected);\n    [propget] HRESULT TargetServer([out, retval] BSTR *server);\n    [propget] HRESULT ConnectedUser([out, retval] BSTR *user);\n    [propget] HRESULT ConnectedDomain([out, retval] BSTR *domain);\n    [propget] HRESULT HighestVersion([out, retval] DWORD *version);\n}\n\n[\n    object,\n    oleautomation,\n    uuid(9c86f320-dee3-4dd1-b972-a303f26b061e)\n]\ninterface IRegisteredTask : IDispatch\n{\n    [propget] HRESULT Name([out, retval] BSTR *name);\n    [propget] HRESULT Path([out, retval] BSTR *path);\n    [propget] HRESULT State([out, retval] TASK_STATE *state);\n    [propget] HRESULT Enabled([out, retval] VARIANT_BOOL *enabled);\n    [propput] HRESULT Enabled(VARIANT_BOOL enabled);\n    HRESULT Run([in] VARIANT params, [out, retval] IRunningTask **task);\n    HRESULT RunEx([in] VARIANT params, [in] LONG flags, [in] LONG sessionID, [in] BSTR user, [out, retval] IRunningTask **task);\n    HRESULT GetInstances([in] LONG flags, [out, retval] IRunningTaskCollection **tasks);\n    [propget] HRESULT LastRunTime([out, retval] DATE *date);\n    [propget] HRESULT LastTaskResult([out, retval] LONG *result);\n    [propget] HRESULT NumberOfMissedRuns([out, retval] LONG *runs);\n    [propget] HRESULT NextRunTime([out, retval] DATE *date);\n    [propget] HRESULT Definition([out, retval] ITaskDefinition **task);\n    [propget] HRESULT Xml([out, retval] BSTR *xml);\n    HRESULT GetSecurityDescriptor([in] LONG info, [out, retval] BSTR *sddl);\n    HRESULT SetSecurityDescriptor([in] BSTR sddl, [in] LONG flags);\n    HRESULT Stop([in] LONG flags);\n    HRESULT GetRunTimes([in] const LPSYSTEMTIME start, [in] const LPSYSTEMTIME end, [in, out] DWORD *count, [out] LPSYSTEMTIME *time);\n}\n\n[\n    object,\n    oleautomation,\n    uuid(86627eb4-42a7-41e4-a4d9-ac33a72f2d52)\n]\ninterface IRegisteredTaskCollection : IDispatch\n{\n    [propget] HRESULT Count([out, retval] LONG *count);\n    [propget] HRESULT Item([in] VARIANT index, [out, retval] IRegisteredTask **task);\n    [propget] HRESULT _NewEnum([out, retval] IUnknown **penum);\n}\n\n[\n    object,\n    oleautomation,\n    uuid(416d8b73-cb41-4ea1-805c-9be9a5ac4a74)\n]\ninterface IRegistrationInfo : IDispatch\n{\n    [propget] HRESULT Description([out, retval] BSTR *description);\n    [propput] HRESULT Description([in] BSTR description);\n    [propget] HRESULT Author([out, retval] BSTR *author);\n    [propput] HRESULT Author([in] BSTR author);\n    [propget] HRESULT Version([out, retval] BSTR *version);\n    [propput] HRESULT Version([in] BSTR version);\n    [propget] HRESULT Date([out, retval] BSTR *date);\n    [propput] HRESULT Date([in] BSTR date);\n    [propget] HRESULT Documentation([out, retval] BSTR *doc);\n    [propput] HRESULT Documentation([in] BSTR doc);\n    [propget] HRESULT XmlText([out, retval] BSTR *xml);\n    [propput] HRESULT XmlText([in] BSTR xml);\n    [propget] HRESULT URI([out, retval] BSTR *uri);\n    [propput] HRESULT URI([in] BSTR uri);\n    [propget] HRESULT SecurityDescriptor([out, retval] VARIANT *sddl);\n    [propput] HRESULT SecurityDescriptor([in] VARIANT sddl);\n    [propget] HRESULT Source([out, retval] BSTR *source);\n    [propput] HRESULT Source([in] BSTR source);\n}\n\n[\n    object,\n    oleautomation,\n    uuid(8cfac062-a080-4c15-9a88-aa7c2af80dfc)\n]\ninterface ITaskFolder : IDispatch\n{\n    [propget] HRESULT Name([out, retval] BSTR *name);\n    [propget] HRESULT Path([out, retval] BSTR *path);\n    HRESULT GetFolder([in] BSTR path, [out, retval] ITaskFolder **folder);\n    HRESULT GetFolders([in] LONG flags, [out, retval] ITaskFolderCollection **folders);\n    HRESULT CreateFolder([in] BSTR name, [in] VARIANT sddl, [out, retval] ITaskFolder **folder);\n    HRESULT DeleteFolder([in] BSTR name, [in] LONG flags);\n    HRESULT GetTask([in] BSTR path, [out, retval] IRegisteredTask **task);\n    HRESULT GetTasks([in] LONG flags, [out, retval] IRegisteredTaskCollection **tasks);\n    HRESULT DeleteTask([in] BSTR name, [in] LONG flags);\n    HRESULT RegisterTask([in] BSTR path, [in] BSTR xml, [in] LONG flags, [in] VARIANT user, [in] VARIANT password,\n                         [in] TASK_LOGON_TYPE logonType, [in] VARIANT sddl, [out, retval] IRegisteredTask **task);\n    HRESULT RegisterTaskDefinition([in] BSTR path, [in] ITaskDefinition *definition, [in] LONG flags,\n                                   [in] VARIANT user,  [in] VARIANT password,  [in] TASK_LOGON_TYPE logon,\n                                   [in] VARIANT sddl, [out, retval] IRegisteredTask **task);\n    HRESULT GetSecurityDescriptor(LONG info, [out, retval] BSTR *sddl);\n    HRESULT SetSecurityDescriptor([in] BSTR sddl, [in] LONG flags);\n}\n\n[\n    object,\n    oleautomation,\n    uuid(79184a66-8664-423f-97f1-637356a5d812)\n]\ninterface ITaskFolderCollection : IDispatch\n{\n    [propget] HRESULT Count([out, retval] LONG *count);\n    [propget] HRESULT Item([in] VARIANT index, [out, retval] ITaskFolder **folder);\n    [propget] HRESULT _NewEnum([out, retval] IUnknown **penum);\n}\n\n[\n    object,\n    oleautomation,\n    uuid(f5bc8fc5-536d-4f77-b852-fbc1356fdeb6)\n]\ninterface ITaskDefinition : IDispatch\n{\n    [propget] HRESULT RegistrationInfo([out, retval] IRegistrationInfo **info);\n    [propput] HRESULT RegistrationInfo([in] IRegistrationInfo *info);\n    [propget] HRESULT Triggers([out, retval] ITriggerCollection **triggers);\n    [propput] HRESULT Triggers([in] ITriggerCollection *triggers);\n    [propget] HRESULT Settings([out, retval] ITaskSettings **settings);\n    [propput] HRESULT Settings([in] ITaskSettings *settings);\n    [propget] HRESULT Data([out, retval] BSTR *data);\n    [propput] HRESULT Data([in] BSTR data);\n    [propget] HRESULT Principal([out, retval] IPrincipal **principal);\n    [propput] HRESULT Principal([in] IPrincipal *principal);\n    [propget] HRESULT Actions([out, retval] IActionCollection **actions);\n    [propput] HRESULT Actions([in] IActionCollection *actions);\n    [propget] HRESULT XmlText([out, retval] BSTR *xml);\n    [propput] HRESULT XmlText([in] BSTR xml);\n}\n\n[\n    object,\n    oleautomation,\n    uuid(8fd4711d-2d02-4c8c-87e3-eff699de127e)\n]\ninterface ITaskSettings : IDispatch\n{\n    [propget] HRESULT AllowDemandStart([out, retval] VARIANT_BOOL *allow);\n    [propput] HRESULT AllowDemandStart([in] VARIANT_BOOL allow);\n    [propget] HRESULT RestartInterval([out, retval] BSTR *interval);\n    [propput] HRESULT RestartInterval([in] BSTR interval);\n    [propget] HRESULT RestartCount([out, retval] INT *count);\n    [propput] HRESULT RestartCount([in] INT count);\n    [propget] HRESULT MultipleInstances([out, retval] TASK_INSTANCES_POLICY *policy);\n    [propput] HRESULT MultipleInstances([in] TASK_INSTANCES_POLICY policy);\n    [propget] HRESULT StopIfGoingOnBatteries([out, retval] VARIANT_BOOL *stop);\n    [propput] HRESULT StopIfGoingOnBatteries([in] VARIANT_BOOL stop);\n    [propget] HRESULT DisallowStartIfOnBatteries([out, retval] VARIANT_BOOL *disallow);\n    [propput] HRESULT DisallowStartIfOnBatteries([in] VARIANT_BOOL disallow);\n    [propget] HRESULT AllowHardTerminate([out, retval] VARIANT_BOOL *allow);\n    [propput] HRESULT AllowHardTerminate([in] VARIANT_BOOL allow);\n    [propget] HRESULT StartWhenAvailable([out, retval] VARIANT_BOOL *start);\n    [propput] HRESULT StartWhenAvailable([in] VARIANT_BOOL start);\n    [propget] HRESULT XmlText([out, retval] BSTR *xml);\n    [propput] HRESULT XmlText([in] BSTR xml);\n    [propget] HRESULT RunOnlyIfNetworkAvailable([out, retval] VARIANT_BOOL *run);\n    [propput] HRESULT RunOnlyIfNetworkAvailable([in] VARIANT_BOOL run);\n    [propget] HRESULT ExecutionTimeLimit([out, retval] BSTR *limit);\n    [propput] HRESULT ExecutionTimeLimit([in] BSTR limit);\n    [propget] HRESULT Enabled([out, retval] VARIANT_BOOL *enabled);\n    [propput] HRESULT Enabled([in] VARIANT_BOOL enabled);\n    [propget] HRESULT DeleteExpiredTaskAfter([out, retval] BSTR *delay);\n    [propput] HRESULT DeleteExpiredTaskAfter([in] BSTR delay);\n    [propget] HRESULT Priority([out, retval] INT *priority);\n    [propput] HRESULT Priority([in] INT priority);\n    [propget] HRESULT Compatibility([out, retval] TASK_COMPATIBILITY *level);\n    [propput] HRESULT Compatibility([in] TASK_COMPATIBILITY level);\n    [propget] HRESULT Hidden([out, retval] VARIANT_BOOL *hidden);\n    [propput] HRESULT Hidden([in] VARIANT_BOOL hidden);\n    [propget] HRESULT IdleSettings([out, retval] IIdleSettings **settings);\n    [propput] HRESULT IdleSettings([in] IIdleSettings *settings);\n    [propget] HRESULT RunOnlyIfIdle([out, retval] VARIANT_BOOL *run);\n    [propput] HRESULT RunOnlyIfIdle([in] VARIANT_BOOL run);\n    [propget] HRESULT WakeToRun([out, retval] VARIANT_BOOL *wake);\n    [propput] HRESULT WakeToRun([in] VARIANT_BOOL wake);\n    [propget] HRESULT NetworkSettings([out, retval] INetworkSettings **settings);\n    [propput] HRESULT NetworkSettings([in] INetworkSettings *settings);\n}\n\n[\n    object,\n    oleautomation,\n    uuid(84594461-0053-4342-a8fd-088fabf11f32)\n]\ninterface IIdleSettings : IDispatch\n{\n    [propget] HRESULT IdleDuration([out, retval] BSTR *delay);\n    [propput] HRESULT IdleDuration([in] BSTR delay);\n    [propget] HRESULT WaitTimeout([out, retval] BSTR *timeout);\n    [propput] HRESULT WaitTimeout([in] BSTR timeout);\n    [propget] HRESULT StopOnIdleEnd([out, retval] VARIANT_BOOL *stop);\n    [propput] HRESULT StopOnIdleEnd([in] VARIANT_BOOL stop);\n    [propget] HRESULT RestartOnIdle([out, retval] VARIANT_BOOL *restart);\n    [propput] HRESULT RestartOnIdle([in] VARIANT_BOOL restart);\n}\n\n[\n    object,\n    oleautomation,\n    uuid(653758fb-7b9a-4f1e-a471-beeb8e9b834e)\n]\ninterface IRunningTask : IDispatch\n{\n    [propget] HRESULT Name([out, retval] BSTR *name);\n    [propget] HRESULT InstanceGuid([out, retval] BSTR *guid);\n    [propget] HRESULT Path([out, retval] BSTR *path);\n    [propget] HRESULT State([out, retval] TASK_STATE *state);\n    [propget] HRESULT CurrentAction([out, retval] BSTR *name);\n    HRESULT Stop(void );\n    HRESULT Refresh(void );\n    [propget] HRESULT EnginePID([out, retval] DWORD *pid);\n}\n\n[\n    object,\n    oleautomation,\n    uuid(6a67614b-6828-4fec-aa54-6d52e8f1f2db)\n]\ninterface IRunningTaskCollection : IDispatch\n{\n    [propget] HRESULT Count([out, retval] LONG *count);\n    [propget] HRESULT Item([in] VARIANT index, [out, retval] IRunningTask **task);\n    [propget] HRESULT _NewEnum([out, retval] IUnknown **penum);\n}\n\n[\n    object,\n    oleautomation,\n    uuid(09941815-ea89-4b5b-89e0-2a773801fac3)\n]\ninterface ITrigger : IDispatch\n{\n    [propget] HRESULT Type([out, retval] TASK_TRIGGER_TYPE2 *type);\n    [propget] HRESULT Id([out, retval] BSTR *id);\n    [propput] HRESULT Id([in] BSTR id);\n    [propget] HRESULT Repetition([out, retval] IRepetitionPattern **repeat);\n    [propput] HRESULT Repetition([in] IRepetitionPattern *repeat);\n    [propget] HRESULT ExecutionTimeLimit([out, retval] BSTR *limit);\n    [propput] HRESULT ExecutionTimeLimit([in] BSTR limit);\n    [propget] HRESULT StartBoundary([out, retval] BSTR *start);\n    [propput] HRESULT StartBoundary([in] BSTR start);\n    [propget] HRESULT EndBoundary([out, retval] BSTR *end);\n    [propput] HRESULT EndBoundary([in] BSTR end);\n    [propget] HRESULT Enabled([out, retval] VARIANT_BOOL *enabled);\n    [propput] HRESULT Enabled([in] VARIANT_BOOL enabled);\n}\n\n[\n    odl,\n    uuid(126c5cd8-b288-41d5-8dbf-e491446adc5c),\n    oleautomation,\n    dual,\n    nonextensible\n]\ninterface IDailyTrigger : ITrigger\n{\n    [propget] HRESULT DaysInterval([out, retval] short *pDays);\n    [propput] HRESULT DaysInterval([in] short days);\n    [propget] HRESULT RandomDelay([out, retval] BSTR *pRandomDelay);\n    [propput] HRESULT RandomDelay([in] BSTR randomDelay);\n}\n\n[\n    object,\n    oleautomation,\n    uuid(85df5081-1b24-4f32-878a-d9d14df4cb77)\n]\ninterface ITriggerCollection : IDispatch\n{\n    [propget] HRESULT Count([out, retval] LONG *count);\n    [propget] HRESULT Item([in] LONG index, [out, retval] ITrigger **trigger);\n    [propget] HRESULT _NewEnum([out, retval] IUnknown **penum);\n    HRESULT Create([in] TASK_TRIGGER_TYPE2 type, [out, retval] ITrigger **trigger);\n    HRESULT Remove([in] VARIANT index);\n    HRESULT Clear();\n}\n\n[\n    object,\n    oleautomation,\n    uuid(b45747e0-eba7-4276-9f29-85c5bb300006)\n]\ninterface ITimeTrigger : ITrigger\n{\n    [propget] HRESULT RandomDelay([out, retval] BSTR *delay);\n    [propput] HRESULT RandomDelay([in] BSTR delay);\n}\n\n[\n    object,\n    oleautomation,\n    uuid(7fb9acf1-26be-400e-85b5-294b9c75dfd6)\n]\ninterface IRepetitionPattern : IDispatch\n{\n    [propget] HRESULT Interval([out, retval] BSTR *interval);\n    [propput] HRESULT Interval([in] BSTR interval);\n    [propget] HRESULT Duration([out, retval] BSTR *duration);\n    [propput] HRESULT Duration([in] BSTR duration);\n    [propget] HRESULT StopAtDurationEnd([out, retval] VARIANT_BOOL *stop);\n    [propput] HRESULT StopAtDurationEnd([in] VARIANT_BOOL sop);\n}\n\n[\n    object,\n    oleautomation,\n    uuid(bae54997-48b1-4cbe-9965-d6be263ebea4)\n]\ninterface IAction : IDispatch\n{\n    [propget] HRESULT Id([out, retval] BSTR *id);\n    [propput] HRESULT Id([in] BSTR id);\n    [propget] HRESULT Type([out, retval] TASK_ACTION_TYPE *type);\n}\n\n[\n    object,\n    oleautomation,\n    uuid(02820e19-7b98-4ed2-b2e8-fdccceff619b)\n]\ninterface IActionCollection : IDispatch\n{\n    [propget] HRESULT Count([out, retval] LONG *count);\n    [propget] HRESULT Item([in] LONG index, [out, retval] IAction **action);\n    [propget] HRESULT _NewEnum([out, retval] IUnknown **penum);\n    [propget] HRESULT XmlText([out, retval] BSTR *xml);\n    [propput] HRESULT XmlText([in] BSTR xml);\n    HRESULT Create([in] TASK_ACTION_TYPE Type, [out, retval] IAction **action);\n    HRESULT Remove([in] VARIANT index);\n    HRESULT Clear();\n    [propget] HRESULT Context([out, retval] BSTR *ctx);\n    [propput] HRESULT Context([in] BSTR ctx);\n}\n\n[\n    object,\n    oleautomation,\n    uuid(4c3d624d-fd6b-49a3-b9b7-09cb3cd3f047)\n]\ninterface IExecAction : IAction\n{\n    [propget] HRESULT Path([out, retval] BSTR *path);\n    [propput] HRESULT Path([in] BSTR path);\n    [propget] HRESULT Arguments([out, retval] BSTR *argument);\n    [propput] HRESULT Arguments([in] BSTR argument);\n    [propget] HRESULT WorkingDirectory([out, retval] BSTR *directory);\n    [propput] HRESULT WorkingDirectory([in] BSTR directory);\n}\n\n[\n    object,\n    oleautomation,\n    uuid(9f7dea84-c30b-4245-80b6-00e9f646f1b4)\n]\ninterface INetworkSettings : IDispatch\n{\n    [propget] HRESULT Name([out, retval] BSTR *name);\n    [propput] HRESULT Name([in] BSTR name);\n    [propget] HRESULT Id([out, retval] BSTR *id);\n    [propput] HRESULT Id([in] BSTR id);\n}\n\n[\n    object,\n    oleautomation,\n    uuid(d98d51e5-c9b4-496a-a9c1-18980261cf0f)\n]\ninterface IPrincipal : IDispatch\n{\n    [propget] HRESULT Id([out, retval] BSTR *id);\n    [propput] HRESULT Id([in] BSTR id);\n    [propget] HRESULT DisplayName([out, retval] BSTR *name);\n    [propput] HRESULT DisplayName([in] BSTR name);\n    [propget] HRESULT UserId([out, retval] BSTR *user);\n    [propput] HRESULT UserId([in] BSTR user);\n    [propget] HRESULT LogonType([out, retval] TASK_LOGON_TYPE *logon);\n    [propput] HRESULT LogonType([in] TASK_LOGON_TYPE logon);\n    [propget] HRESULT GroupId([out, retval] BSTR *group);\n    [propput] HRESULT GroupId([in] BSTR group);\n    [propget] HRESULT RunLevel([out, retval] TASK_RUNLEVEL_TYPE *level);\n    [propput] HRESULT RunLevel([in] TASK_RUNLEVEL_TYPE level);\n}\n\n[\n    threading(both),\n    progid(\"Schedule.Service.1\"),\n    vi_progid(\"Schedule.Service\"),\n    uuid(0f87369f-a4e5-4cfc-bd3e-73e6154572dd)\n]\ncoclass TaskScheduler\n{\n    interface ITaskService;\n}\n\n} /* library TaskScheduler */\n"
  },
  {
    "path": "wine/windows/tchar.h",
    "content": "/*\n * Copyright (C) 1998 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_TCHAR_H\n#define __WINE_TCHAR_H\n\n#ifdef __WINESRC__\n#error Wine should not include tchar.h internally\n#endif\n\n#if !defined(__MSVCRT__) && (defined(_UNICODE) || defined(_MBCS))\n#error You must use msvcrt when building in Unicode/MBCS mode [-mno-cygwin]\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*****************************************************************************\n * tchar routines\n */\n#define _strdec(start,current)  ((start)<(current) ? ((char*)(current))-1 : NULL)\n#define _strinc(current)        (((char*)(current))+1)\n#define _strncnt(str,max)       (strlen(str)>(max) ? (max) : strlen(str))\n#define _strnextc(str)          ((unsigned int)*(str))\n#define _strninc(str,n)         (((char*)(str))+(n))\n#define _strspnp(s1,s2)         (*((s1)+=strspn((s1),(s2))) ? (s1) : NULL)\n\n\n/*****************************************************************************\n * tchar mappings\n */\n#ifndef _UNICODE\n#  ifndef _MBCS\n#    include <string.h>\n#    define WINE_tchar_routine(std,mbcs,unicode) std\n#  else\n#    include <mbstring.h>\n#    define WINE_tchar_routine(std,mbcs,unicode) mbcs\n#  endif\n#else /* _UNICODE */\n#  include <wchar.h>\n#  define WINE_tchar_routine(std,mbcs,unicode) unicode\n#endif\n\n#define WINE_tchar_true(a) (1)\n#define WINE_tchar_false(a) (0)\n#define WINE_tchar_tclen(a) (1)\n#define WINE_tchar_tccpy(a,b) do { *(a)=*(b); } while (0)\n\n#define __targv       WINE_tchar_routine(__argv,          __argv,      __wargv)\n#define _fgettc       WINE_tchar_routine(fgetc,           fgetc,       fgetwc)\n#define _fgettchar    WINE_tchar_routine(fgetchar,        fgetchar,    _fgetwchar)\n#define _fgetts       WINE_tchar_routine(fgets,           fgets,       fgetws)\n#define _fputtc       WINE_tchar_routine(fputc,           fputc,       fputwc)\n#define _fputtchar    WINE_tchar_routine(fputchar,        fputchar,    _fputwchar)\n#define _fputts       WINE_tchar_routine(fputs,           fputs,       fputws)\n#define _ftprintf     WINE_tchar_routine(fprintf,         fprintf,     fwprintf)\n#define _ftscanf      WINE_tchar_routine(fscanf,          fscanf,      fwscanf)\n#define _gettc        WINE_tchar_routine(getc,            getc,        getwc)\n#define _gettchar     WINE_tchar_routine(getchar,         getchar,     getwchar)\n#define _getts        WINE_tchar_routine(gets,            gets,        getws)\n#define _istalnum     WINE_tchar_routine(isalnum,         _ismbcalnum, iswalnum)\n#define _istalpha     WINE_tchar_routine(isalpha,         _ismbcalpha, iswalpha)\n#define _istascii     WINE_tchar_routine(isascii,         __isascii,   iswascii)\n#define _istcntrl     WINE_tchar_routine(iscntrl,         iscntrl,     iswcntrl)\n#define _istdigit     WINE_tchar_routine(isdigit,         _ismbcdigit, iswdigit)\n#define _istgraph     WINE_tchar_routine(isgraph,         _ismbcgraph, iswgraph)\n#define _istlead      WINE_tchar_routine(WINE_tchar_false,_ismbblead,  WINE_tchar_false)\n#define _istleadbyte  WINE_tchar_routine(WINE_tchar_false,isleadbyte,  WINE_tchar_false)\n#define _istlegal     WINE_tchar_routine(WINE_tchar_true, _ismbclegal, WINE_tchar_true)\n#define _istlower     WINE_tchar_routine(islower,         _ismbcslower,iswlower)\n#define _istprint     WINE_tchar_routine(isprint,         _ismbcprint, iswprint)\n#define _istpunct     WINE_tchar_routine(ispunct,         _ismbcpunct, iswpunct)\n#define _istspace     WINE_tchar_routine(isspace,         _ismbcspace, iswspace)\n#define _istupper     WINE_tchar_routine(isupper,         _ismbcupper, iswupper)\n#define _istxdigit    WINE_tchar_routine(isxdigit,        isxdigit,    iswxdigit)\n#define _itot         WINE_tchar_routine(_itoa,           _itoa,       _itow)\n#define _ltot         WINE_tchar_routine(_ltoa,           _ltoa,       _ltow)\n#define _puttc        WINE_tchar_routine(putc,            putc,        putwc)\n#define _puttchar     WINE_tchar_routine(putchar,         putchar,     putwchar)\n#define _putts        WINE_tchar_routine(puts,            puts,        putws)\n#define _sntprintf    WINE_tchar_routine(snprintf,        snprintf,    snwprintf)\n#define _stprintf     WINE_tchar_routine(sprintf,         sprintf,     swprintf)\n#define _stscanf      WINE_tchar_routine(sscanf,          sscanf,      swscanf)\n#define _taccess      WINE_tchar_routine(access,          _access,     _waccess)\n#define _tasctime     WINE_tchar_routine(asctime,         asctime,     _wasctime)\n#define _tccpy        WINE_tchar_routine(WINE_tchar_tccpy,_mbccpy,     WINE_tchar_tccpy)\n#define _tchdir       WINE_tchar_routine(chdir,           _chdir,      _wchdir)\n#define _tclen        WINE_tchar_routine(WINE_tchar_tclen,_mbclen,     WINE_tchar_tclen)\n#define _tchmod       WINE_tchar_routine(chmod,           _chmod,      _wchmod)\n#define _tcreat       WINE_tchar_routine(creat,           _creat,      _wcreat)\n#define _tcscat       WINE_tchar_routine(strcat,          _mbscat,     wcscat)\n#define _tcschr       WINE_tchar_routine(strchr,          _mbschr,     wcschr)\n#define _tcsclen      WINE_tchar_routine(strlen,          _mbslen,     wcslen)\n#define _tcscmp       WINE_tchar_routine(strcmp,          _mbscmp,     wcscmp)\n#define _tcscoll      WINE_tchar_routine(strcoll,         _mbscoll,    wcscoll)\n#define _tcscpy       WINE_tchar_routine(strcpy,          _mbscpy,     wcscpy)\n#define _tcscspn      WINE_tchar_routine(strcspn,         _mbscspn,    wcscspn)\n#define _tcsdec       WINE_tchar_routine(_strdec,         _mbsdec,     _wcsdec)\n#define _tcsdup       WINE_tchar_routine(strdup,          _mbsdup,     _wcsdup)\n#define _tcsftime     WINE_tchar_routine(strftime,        strftime,    wcsftime)\n#define _tcsicmp      WINE_tchar_routine(strcasecmp,      _mbsicmp,    _wcsicmp)\n#define _tcsicoll     WINE_tchar_routine(_stricoll,       _stricoll,   _wcsicoll)\n#define _tcsinc       WINE_tchar_routine(_strinc,         _mbsinc,     _wcsinc)\n#define _tcslen       WINE_tchar_routine(strlen,          strlen,      wcslen)\n#define _tcslwr       WINE_tchar_routine(_strlwr,         _mbslwr,     _wcslwr)\n#define _tcsnbcnt     WINE_tchar_routine(_strncnt,        _mbsnbcnt,   _wcnscnt)\n#define _tcsncat      WINE_tchar_routine(strncat,         _mbsnbcat,   wcsncat)\n#define _tcsnccat     WINE_tchar_routine(strncat,         _mbsncat,    wcsncat)\n#define _tcsncmp      WINE_tchar_routine(strncmp,         _mbsnbcmp,   wcsncmp)\n#define _tcsnccmp     WINE_tchar_routine(strncmp,         _mbsncmp,    wcsncmp)\n#define _tcsnccnt     WINE_tchar_routine(_strncnt,        _mbsnccnt,   _wcsncnt)\n#define _tcsnccpy     WINE_tchar_routine(strncpy,         _mbsncpy,    wcsncpy)\n#define _tcsncicmp    WINE_tchar_routine(_strnicmp,       _mbsnicmp,   _wcsnicmp)\n#define _tcsncpy      WINE_tchar_routine(strncpy,         _mbsnbcpy,   wcsncpy)\n#define _tcsncset     WINE_tchar_routine(_strnset,        _mbsnset,    _wcsnset)\n#define _tcsnextc     WINE_tchar_routine(_strnextc,       _mbsnextc,   _wcsnextc)\n#define _tcsnicmp     WINE_tchar_routine(_strnicmp,       _mbsnicmp,   _wcsnicmp)\n#define _tcsnicoll    WINE_tchar_routine(_strnicoll,      _strnicoll   _wcsnicoll)\n#define _tcsninc      WINE_tchar_routine(_strninc,        _mbsninc,    _wcsninc)\n#define _tcsnccnt     WINE_tchar_routine(_strncnt,        _mbsnccnt,   _wcsncnt)\n#define _tcsnset      WINE_tchar_routine(_strnset,        _mbsnbset,   _wcsnset)\n#define _tcspbrk      WINE_tchar_routine(strpbrk,         _mbspbrk,    wcspbrk)\n#define _tcsspnp      WINE_tchar_routine(_strspnp,        _mbsspnp,    _wcsspnp)\n#define _tcsrchr      WINE_tchar_routine(strrchr,         _mbsrchr,    wcsrchr)\n#define _tcsrev       WINE_tchar_routine(_strrev,         _mbsrev,     _wcsrev)\n#define _tcsset       WINE_tchar_routine(_strset,         _mbsset,     _wcsset)\n#define _tcsspn       WINE_tchar_routine(strspn,          _mbsspn,     wcsspn)\n#define _tcsstr       WINE_tchar_routine(strstr,          _mbsstr,     wcsstr)\n#define _tcstod       WINE_tchar_routine(strtod,          strtod,      wcstod)\n#define _tcstok       WINE_tchar_routine(strtok,          _mbstok,     wcstok)\n#define _tcstol       WINE_tchar_routine(strtol,          strtol,      wcstol)\n#define _tcstoul      WINE_tchar_routine(strtoul,         strtoul,     wcstoul)\n#define _tcsupr       WINE_tchar_routine(_strupr,         _mbsupr,     _wcsupr)\n#define _tcsxfrm      WINE_tchar_routine(strxfrm,         strxfrm,     wcsxfrm)\n#define _tctime       WINE_tchar_routine(ctime,           ctime,       _wctime)\n#define _tenviron     WINE_tchar_routine(_environ,        _environ,    _wenviron)\n#define _texecl       WINE_tchar_routine(execl,           _execl,      _wexecl)\n#define _texecle      WINE_tchar_routine(execle,          _execle,     _wexecle)\n#define _texeclp      WINE_tchar_routine(execlp,          _execlp,     _wexeclp)\n#define _texeclpe     WINE_tchar_routine(execlpe,         _execlpe,    _wexeclpe)\n#define _texecv       WINE_tchar_routine(execv,           _execv,      _wexecv)\n#define _texecve      WINE_tchar_routine(execve,          _execve,     _wexecve)\n#define _texecvp      WINE_tchar_routine(execvp,          _execvp,     _wexecvp)\n#define _texecvpe     WINE_tchar_routine(execvpe,         _execvpe,    _wexecvpe)\n#define _tfdopen      WINE_tchar_routine(fdopen,          _fdopen,     _wfdopen)\n#define _tfinddata_t  WINE_tchar_routine(_finddata_t,     _finddata_t, _wfinddata_t)\n#define _tfinddatai64_t WINE_tchar_routine(_finddatai64_t,_finddatai64_t,_wfinddatai64_t)\n#define _tfindfirst   WINE_tchar_routine(_findfirst,      _findfirst,  _wfindfirst)\n#define _tfindnext    WINE_tchar_routine(_findnext,       _findnext,   _wfindnext)\n#define _tfopen       WINE_tchar_routine(fopen,           fopen,       _wfopen)\n#define _tfreopen     WINE_tchar_routine(freopen,         freopen,     _wfreopen)\n#define _tfsopen      WINE_tchar_routine(_fsopen,         _fsopen,     _wfsopen)\n#define _tfullpath    WINE_tchar_routine(_fullpath,       _fullpath,   _wfullpath)\n#define _tgetcwd      WINE_tchar_routine(getcwd,          _getcwd,     _wgetcwd)\n#define _tgetenv      WINE_tchar_routine(getenv,          getenv,      _wgetenv)\n#define _tmain        WINE_tchar_routine(main,            main,        wmain)\n#define _tmakepath    WINE_tchar_routine(_makepath,       _makepath,   _wmakepath)\n#define _tmkdir       WINE_tchar_routine(mkdir,           _mkdir,      _wmkdir)\n#define _tmktemp      WINE_tchar_routine(mktemp,          _mktemp,     _wmktemp)\n#define _tperror      WINE_tchar_routine(perror,          perror,      _wperror)\n#define _topen        WINE_tchar_routine(open,            _open,       _wopen)\n#define _totlower     WINE_tchar_routine(tolower,         _mbctolower, towlower)\n#define _totupper     WINE_tchar_routine(toupper,         _mbctoupper, towupper)\n#define _tpopen       WINE_tchar_routine(popen,           _popen,      _wpopen)\n#define _tprintf      WINE_tchar_routine(printf,          printf,      wprintf)\n#define _tremove      WINE_tchar_routine(remove,          remove,      _wremove)\n#define _trename      WINE_tchar_routine(rename,          rename,      _wrename)\n#define _trmdir       WINE_tchar_routine(rmdir,           _rmdir,      _wrmdir)\n#define _tsearchenv   WINE_tchar_routine(_searchenv,      _searchenv,  _wsearchenv)\n#define _tscanf       WINE_tchar_routine(scanf,           scanf,       wscanf)\n#define _tsetlocale   WINE_tchar_routine(setlocale,       setlocale,   _wsetlocale)\n#define _tsopen       WINE_tchar_routine(_sopen,          _sopen,      _wsopen)\n#define _tspawnl      WINE_tchar_routine(_spawnl,         _spawnl,     _wspawnl)\n#define _tspawnle     WINE_tchar_routine(_spawnle,        _spawnle,    _wspawnle)\n#define _tspawnlp     WINE_tchar_routine(_spawnlp,        _spawnlp,    _wspawnlp)\n#define _tspawnlpe    WINE_tchar_routine(_spawnlpe,       _spawnlpe,   _wspawnlpe)\n#define _tspawnv      WINE_tchar_routine(_spawnv,         _spawnv,     _wspawnv)\n#define _tspawnve     WINE_tchar_routine(_spawnve,        _spawnve,    _wspawnve)\n#define _tspawnvp     WINE_tchar_routine(_spawnvp,        _spawnvp,    _tspawnvp)\n#define _tspawnvpe    WINE_tchar_routine(_spawnvpe,       _spawnvpe,   _tspawnvpe)\n#define _tsplitpath   WINE_tchar_routine(_splitpath,      _splitpath,  _wsplitpath)\n#define _tstat        WINE_tchar_routine(_stat,           _stat,       _wstat)\n#define _tstati64     WINE_tchar_routine(_stati64,        _stati64,    _wstati64)\n#define _tstrdate     WINE_tchar_routine(_strdate,        _strdate,    _wstrdate)\n#define _tstrtime     WINE_tchar_routine(_strtime,        _strtime,    _wstrtime)\n#define _tsystem      WINE_tchar_routine(system,          system,      _wsystem)\n#define _ttempnam     WINE_tchar_routine(tempnam,         _tempnam,    _wtempnam)\n#define _ttmpnam      WINE_tchar_routine(tmpnam,          tmpnam,      _wtmpnam)\n#define _ttoi         WINE_tchar_routine(atoi,            atoi,        _wtoi)\n#define _ttol         WINE_tchar_routine(atol,            atol,        _wtol)\n#define _tutime       WINE_tchar_routine(utime,           _utime,      _wutime)\n#define _tWinMain     WINE_tchar_routine(WinMain,         WinMain,     wWinMain)\n#define _ultot        WINE_tchar_routine(_ultoa,          _ultoa,      _ultow)\n#define _ungettc      WINE_tchar_routine(ungetc,          ungetc,      ungetwc)\n#define _vftprintf    WINE_tchar_routine(vfprintf,        vfprintf,    vfwprintf)\n#define _vsntprintf   WINE_tchar_routine(vsnprintf,       _vsnprintf,  _vsnwprintf)\n#define _vstprintf    WINE_tchar_routine(vsprintf,        vsprintf,    vswprintf)\n#define _vtprintf     WINE_tchar_routine(vprintf,         vprintf,     vwprintf)\n#define _TEOF         WINE_tchar_routine(EOF,             EOF,         WEOF)\n\n#define __T(x) __TEXT(x)\n#define _T(x) __T(x)\n#define _TEXT(x) __T(x)\n\n#ifdef _UNICODE\n#if !defined(_WINT_T_DEFINED) && !defined(__WINT_TYPE__)\ntypedef unsigned short wint_t;\n#endif\n\n#ifndef _WCTYPE_T_DEFINED\ntypedef unsigned short wctype_t;\n#define _WCTYPE_T_DEFINED\n#endif\n\n#ifndef __TCHAR_DEFINED\n#ifdef WINE_UNICODE_NATIVE\ntypedef wchar_t       _TCHAR;\n#else\ntypedef unsigned short _TCHAR;\n#endif\ntypedef _TCHAR        _TUCHAR;\ntypedef _TCHAR        _TSCHAR;\ntypedef _TCHAR        _TXCHAR;\ntypedef _TCHAR        _TINT;\n#define __TCHAR_DEFINED\n#endif\n\n#else /* _UNICODE */\n#ifndef __TCHAR_DEFINED\ntypedef char          _TCHAR;\ntypedef unsigned char _TUCHAR;\ntypedef signed char   _TSCHAR;\n#ifndef _MBCS\ntypedef unsigned char _TXCHAR;\ntypedef int           _TINT;\n#else\ntypedef char          _TXCHAR;\ntypedef unsigned int  _TINT;\n#endif\n#endif\n#endif\n\n#ifndef _TCHAR_DEFINED\ntypedef _TCHAR        TCHAR, *PTCHAR;\n#define _TCHAR_DEFINED\n#endif\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif\n\n#endif /* __WINE_TCHAR_H */\n"
  },
  {
    "path": "wine/windows/tcpestats.h",
    "content": "/*\n * Copyright (C) 2015 Bruno Jesus\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _TCPESTATS_\n#define _TCPESTATS_\n\n/* Values used in Get/SetPerTcpConnectionEStats */\ntypedef enum\n{\n    TcpConnectionEstatsSynOpts,\n    TcpConnectionEstatsData,\n    TcpConnectionEstatsSndCong,\n    TcpConnectionEstatsPath,\n    TcpConnectionEstatsSendBuff,\n    TcpConnectionEstatsRec,\n    TcpConnectionEstatsObsRec,\n    TcpConnectionEstatsBandwidth,\n    TcpConnectionEstatsFineRtt,\n    TcpConnectionEstatsMaximum\n} TCP_ESTATS_TYPE;\n\n#endif /* _TCPESTATS_ */\n"
  },
  {
    "path": "wine/windows/tcpmib.h",
    "content": "/*\n * Copyright (C) 2003 Juan Lang\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __WINE_TCPMIB_H\n#define __WINE_TCPMIB_H\n\n#define TCPIP_OWNING_MODULE_SIZE 16\n\n\n/* TCP tables */\n\ntypedef enum\n{\n    MIB_TCP_STATE_CLOSED = 1,\n    MIB_TCP_STATE_LISTEN = 2,\n    MIB_TCP_STATE_SYN_SENT = 3,\n    MIB_TCP_STATE_SYN_RCVD = 4,\n    MIB_TCP_STATE_ESTAB = 5,\n    MIB_TCP_STATE_FIN_WAIT1 = 6,\n    MIB_TCP_STATE_FIN_WAIT2 = 7,\n    MIB_TCP_STATE_CLOSE_WAIT = 8,\n    MIB_TCP_STATE_CLOSING = 9,\n    MIB_TCP_STATE_LAST_ACK = 10,\n    MIB_TCP_STATE_TIME_WAIT = 11,\n    MIB_TCP_STATE_DELETE_TCB = 12,\n} MIB_TCP_STATE;\n\ntypedef enum\n{\n    TcpConnectionOffloadStateInHost,\n    TcpConnectionOffloadStateOffloading,\n    TcpConnectionOffloadStateOffloaded,\n    TcpConnectionOffloadStateUploading,\n    TcpConnectionOffloadStateMax,\n} TCP_CONNECTION_OFFLOAD_STATE, *PTCP_CONNECTION_OFFLOAD_STATE;\n\ntypedef struct _MIB_TCPROW\n{\n    union\n    {\n        DWORD         dwState;\n        MIB_TCP_STATE State;\n    } DUMMYUNIONNAME;\n    DWORD dwLocalAddr;\n    DWORD dwLocalPort;\n    DWORD dwRemoteAddr;\n    DWORD dwRemotePort;\n} MIB_TCPROW, *PMIB_TCPROW;\n\ntypedef struct _MIB_TCPTABLE\n{\n    DWORD      dwNumEntries;\n    MIB_TCPROW table[1];\n} MIB_TCPTABLE, *PMIB_TCPTABLE;\n\ntypedef struct _MIB_TCP6ROW {\n    MIB_TCP_STATE State;\n    IN6_ADDR LocalAddr;\n    DWORD dwLocalScopeId;\n    DWORD dwLocalPort;\n    IN6_ADDR RemoteAddr;\n    DWORD dwRemoteScopeId;\n    DWORD dwRemotePort;\n} MIB_TCP6ROW, *PMIB_TCP6ROW;\n\ntypedef struct _MIB_TCP6TABLE {\n    DWORD dwNumEntries;\n    MIB_TCP6ROW table[1];\n} MIB_TCP6TABLE, *PMIB_TCP6TABLE;\n\ntypedef struct _MIB_TCP6ROW2 {\n    IN6_ADDR LocalAddr;\n    DWORD dwLocalScopeId;\n    DWORD dwLocalPort;\n    IN6_ADDR RemoteAddr;\n    DWORD dwRemoteScopeId;\n    DWORD dwRemotePort;\n    MIB_TCP_STATE State;\n    DWORD dwOwningPid;\n    TCP_CONNECTION_OFFLOAD_STATE dwOffloadState;\n} MIB_TCP6ROW2, *PMIB_TCP6ROW2;\n\ntypedef struct _MIB_TCP6TABLE2 {\n    DWORD dwNumEntries;\n    MIB_TCP6ROW2 table[1];\n} MIB_TCP6TABLE2, *PMIB_TCP6TABLE2;\n\ntypedef struct _MIB_TCPROW_OWNER_PID\n{\n    DWORD dwState;\n    DWORD dwLocalAddr;\n    DWORD dwLocalPort;\n    DWORD dwRemoteAddr;\n    DWORD dwRemotePort;\n    DWORD dwOwningPid;\n} MIB_TCPROW_OWNER_PID, *PMIB_TCPROW_OWNER_PID;\n\ntypedef struct _MIB_TCPTABLE_OWNER_PID\n{\n    DWORD                dwNumEntries;\n    MIB_TCPROW_OWNER_PID table[1];\n} MIB_TCPTABLE_OWNER_PID, *PMIB_TCPTABLE_OWNER_PID;\n\ntypedef struct _MIB_TCPROW_OWNER_MODULE\n{\n    DWORD         dwState;\n    DWORD         dwLocalAddr;\n    DWORD         dwLocalPort;\n    DWORD         dwRemoteAddr;\n    DWORD         dwRemotePort;\n    DWORD         dwOwningPid;\n    LARGE_INTEGER liCreateTimestamp;\n    ULONGLONG     OwningModuleInfo[TCPIP_OWNING_MODULE_SIZE];\n} MIB_TCPROW_OWNER_MODULE, *PMIB_TCPROW_OWNER_MODULE;\n\ntypedef struct _MIB_TCPTABLE_OWNER_MODULE\n{\n    DWORD                   dwNumEntries;\n    MIB_TCPROW_OWNER_MODULE table[1];\n} MIB_TCPTABLE_OWNER_MODULE, *PMIB_TCPTABLE_OWNER_MODULE;\n\ntypedef struct _MIB_TCPROW2\n{\n    DWORD dwState;\n    DWORD dwLocalAddr;\n    DWORD dwLocalPort;\n    DWORD dwRemoteAddr;\n    DWORD dwRemotePort;\n    DWORD dwOwningPid;\n    TCP_CONNECTION_OFFLOAD_STATE dwOffloadState;\n} MIB_TCPROW2, *PMIB_TCPROW2;\n\ntypedef struct _MIB_TCPTABLE2\n{\n    DWORD       dwNumEntries;\n    MIB_TCPROW2 table[1];\n} MIB_TCPTABLE2, *PMIB_TCPTABLE2;\n\n\n/* TCP stats */\n\ntypedef enum\n{\n    TcpRtoAlgorithmOther = 0,\n    TcpRtoAlgorithmConstant = 1,\n    TcpRtoAlgorithmRsre = 2,\n    TcpRtoAlgorithmVanj = 3,\n\n    MIB_TCP_RTO_OTHER = 1,\n    MIB_TCP_RTO_CONSTANT = 2,\n    MIB_TCP_RTO_RSRE = 3,\n    MIB_TCP_RTO_VANJ = 4,\n} TCP_RTO_ALGORITHM, *PTCP_RTO_ALGORITHM;\n\ntypedef struct _MIB_TCPSTATS\n{\n    union\n    {\n        DWORD             dwRtoAlgorithm;\n        TCP_RTO_ALGORITHM RtoAlgorithm;\n    } DUMMYUNIONNAME;\n    DWORD dwRtoMin;\n    DWORD dwRtoMax;\n    DWORD dwMaxConn;\n    DWORD dwActiveOpens;\n    DWORD dwPassiveOpens;\n    DWORD dwAttemptFails;\n    DWORD dwEstabResets;\n    DWORD dwCurrEstab;\n    DWORD dwInSegs;\n    DWORD dwOutSegs;\n    DWORD dwRetransSegs;\n    DWORD dwInErrs;\n    DWORD dwOutRsts;\n    DWORD dwNumConns;\n} MIB_TCPSTATS, *PMIB_TCPSTATS;\n\n#endif /* __WINE_TCPMIB_H */\n"
  },
  {
    "path": "wine/windows/textserv.h",
    "content": "/*\n * Copyright (C) 2005 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _TEXTSERV_H\n#define _TEXTSERV_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nEXTERN_C const IID IID_ITextServices;\nEXTERN_C const IID IID_ITextHost;\n\n/*****************************************************************************\n * ITextServices interface\n */\n#define INTERFACE ITextServices\nDECLARE_INTERFACE_(ITextServices,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_\n        REFIID riid,\n        void** ppvObject) PURE;\n\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** ITextServices methods ***/\n\n    STDMETHOD(TxSendMessage)( THIS_\n        UINT msg, WPARAM wparam, LPARAM lparam, LRESULT* plresult) PURE;\n\n    STDMETHOD(TxDraw)( THIS_\n        DWORD dwDrawAspect,\n        LONG lindex,\n        void* pvAspect,\n        DVTARGETDEVICE* ptd,\n        HDC hdcDraw,\n        HDC hicTargetDev,\n        LPCRECTL lprcBounds,\n        LPCRECTL lprcWBounds,\n        LPRECT lprcUpdate,\n        BOOL (CALLBACK * pfnContinue)(DWORD),\n        DWORD dwContinue,\n        LONG lViewId) PURE;\n\n    STDMETHOD(TxGetHScroll)( THIS_\n        LONG* plMin,\n        LONG* plMax,\n        LONG* plPos,\n        LONG* plPage,\n        BOOL* pfEnabled) PURE;\n\n    STDMETHOD(TxGetVScroll)( THIS_\n        LONG* plMin,\n        LONG* plMax,\n        LONG* plPos,\n        LONG* plPage,\n        BOOL* pfEnabled) PURE;\n\n    STDMETHOD(OnTxSetCursor)( THIS_\n        DWORD dwDrawAspect,\n        LONG lindex,\n        void* pvAspect,\n        DVTARGETDEVICE* ptd,\n        HDC hdcDraw,\n        HDC hicTargetDev,\n        LPCRECT lprcClient,\n        INT x,\n        INT y) PURE;\n\n    STDMETHOD(TxQueryHitPoint)( THIS_\n        DWORD dwDrawAspect,\n        LONG lindex,\n        void* pvAspect,\n        DVTARGETDEVICE* ptd,\n        HDC hdcDraw,\n        HDC hicTargetDev,\n        LPCRECT lprcClient,\n        INT x,\n        INT y,\n        DWORD* pHitResult) PURE;\n\n    STDMETHOD(OnTxInplaceActivate)( THIS_\n        LPCRECT prcClient) PURE;\n\n    STDMETHOD(OnTxInplaceDeactivate)( THIS ) PURE;\n\n    STDMETHOD(OnTxUIActivate)( THIS ) PURE;\n\n    STDMETHOD(OnTxUIDeactivate)( THIS ) PURE;\n\n    STDMETHOD(TxGetText)( THIS_\n        BSTR* pbstrText) PURE;\n\n    STDMETHOD(TxSetText)( THIS_\n        LPCWSTR pszText) PURE;\n\n    STDMETHOD(TxGetCurTargetX)( THIS_\n        LONG* x) PURE;\n\n    STDMETHOD(TxGetBaseLinePos)( THIS_\n        LONG* x) PURE;\n\n    STDMETHOD(TxGetNaturalSize)( THIS_\n        DWORD dwAspect,\n        HDC hdcDraw,\n        HDC hicTargetDev,\n        DVTARGETDEVICE* ptd,\n        DWORD dwMode,\n        const SIZEL* psizelExtent,\n        LONG* pwidth,\n        LONG* pheight) PURE;\n\n    STDMETHOD(TxGetDropTarget)( THIS_\n        IDropTarget** ppDropTarget) PURE;\n\n    STDMETHOD(OnTxPropertyBitsChange)( THIS_\n        DWORD dwMask,\n        DWORD dwBits) PURE;\n\n    STDMETHOD(TxGetCachedSize)( THIS_\n        DWORD* pdwWidth,\n        DWORD* pdwHeight) PURE;\n\n};\n#undef INTERFACE\n\n#ifdef COBJMACROS\n/*** IUnknown methods ***/\n#define ITextServices_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define ITextServices_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define ITextServices_Release(p) (p)->lpVtbl->Release(p)\n#endif\n\ntypedef enum _TXTBACKSTYLE {\n    TXTBACK_TRANSPARENT = 0,\n    TXTBACK_OPAQUE\n} TXTBACKSTYLE;\n\nenum TXTHITRESULT {\n    TXTHITRESULT_NOHIT = 0,\n    TXTHITRESULT_TRANSPARENT = 1,\n    TXTHITRESULT_CLOSE = 2,\n    TXTHITRESULT_HIT = 3\n};\n\nenum TXTNATURALSIZE {\n    TXTNS_FITTOCONTENT = 1,\n    TXTNS_ROUNDTOLINE = 2\n};\n\nenum TXTVIEW {\n    TXTVIEW_ACTIVE = 0,\n    TXTVIEW_INACTIVE = 1\n};\n\n#define TXTBIT_RICHTEXT         0x000001\n#define TXTBIT_MULTILINE        0x000002\n#define TXTBIT_READONLY         0x000004\n#define TXTBIT_SHOWACCELERATOR  0x000008\n#define TXTBIT_USEPASSWORD      0x000010\n#define TXTBIT_HIDESELECTION    0x000020\n#define TXTBIT_SAVESELECTION    0x000040\n#define TXTBIT_AUTOWORDSEL      0x000080\n#define TXTBIT_VERTICAL         0x000100\n#define TXTBIT_SELBARCHANGE     0x000200\n#define TXTBIT_WORDWRAP         0x000400\n#define TXTBIT_ALLOWBEEP        0x000800\n#define TXTBIT_DISABLEDRAG      0x001000\n#define TXTBIT_VIEWINSETCHANGE  0x002000\n#define TXTBIT_BACKSTYLECHANGE  0x004000\n#define TXTBIT_MAXLENGTHCHANGE  0x008000\n#define TXTBIT_SCROLLBARCHANGE  0x010000\n#define TXTBIT_CHARFORMATCHANGE 0x020000\n#define TXTBIT_PARAFORMATCHANGE 0x040000\n#define TXTBIT_EXTENTCHANGE     0x080000\n#define TXTBIT_CLIENTRECTCHANGE 0x100000\n#define TXTBIT_USECURRENTBKG    0x200000\n\n/*****************************************************************************\n * ITextHost interface\n */\n#define INTERFACE ITextHost\nDECLARE_INTERFACE_(ITextHost,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_\n        REFIID riid,\n        void** ppvObject) PURE;\n\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** ITextHost methods ***/\n    STDMETHOD_(HDC,TxGetDC)( THIS\n        ) PURE;\n\n    STDMETHOD_(INT,TxReleaseDC)( THIS_\n        HDC hdc) PURE;\n\n    STDMETHOD_(BOOL,TxShowScrollBar)( THIS_\n        INT fnBar,\n        BOOL fShow) PURE;\n\n    STDMETHOD_(BOOL,TxEnableScrollBar)( THIS_\n        INT fuSBFlags,\n        INT fuArrowflags) PURE;\n\n    STDMETHOD_(BOOL,TxSetScrollRange)( THIS_\n        INT fnBar,\n        LONG nMinPos,\n        INT nMaxPos,\n        BOOL fRedraw) PURE;\n\n    STDMETHOD_(BOOL,TxSetScrollPos)( THIS_\n        INT fnBar,\n        INT nPos,\n        BOOL fRedraw) PURE;\n\n    STDMETHOD_(void,TxInvalidateRect)( THIS_\n        LPCRECT prc,\n        BOOL fMode) PURE;\n\n    STDMETHOD_(void,TxViewChange)( THIS_\n        BOOL fUpdate) PURE;\n\n    STDMETHOD_(BOOL,TxCreateCaret)( THIS_\n        HBITMAP hbmp,\n        INT xWidth,\n        INT yHeight) PURE;\n\n    STDMETHOD_(BOOL,TxShowCaret)( THIS_\n        BOOL fShow) PURE;\n\n    STDMETHOD_(BOOL,TxSetCaretPos)( THIS_\n        INT x,\n        INT y) PURE;\n\n    STDMETHOD_(BOOL,TxSetTimer)( THIS_\n        UINT idTimer,\n        UINT uTimeout) PURE;\n\n    STDMETHOD_(void,TxKillTimer)( THIS_\n        UINT idTimer) PURE;\n\n    STDMETHOD_(void,TxScrollWindowEx)( THIS_\n        INT dx,\n        INT dy,\n        LPCRECT lprcScroll,\n        LPCRECT lprcClip,\n        HRGN hRgnUpdate,\n        LPRECT lprcUpdate,\n        UINT fuScroll) PURE;\n\n    STDMETHOD_(void,TxSetCapture)( THIS_\n        BOOL fCapture) PURE;\n\n    STDMETHOD_(void,TxSetFocus)( THIS\n        ) PURE;\n\n    STDMETHOD_(void,TxSetCursor)( THIS_\n        HCURSOR hcur,\n        BOOL fText) PURE;\n\n    STDMETHOD_(BOOL,TxScreenToClient)( THIS_\n        LPPOINT lppt) PURE;\n\n    STDMETHOD_(BOOL,TxClientToScreen)( THIS_\n        LPPOINT lppt) PURE;\n\n    STDMETHOD(TxActivate)( THIS_\n        LONG* plOldState) PURE;\n\n    STDMETHOD(TxDeactivate)( THIS_\n        LONG lNewState) PURE;\n\n    STDMETHOD(TxGetClientRect)( THIS_\n        LPRECT prc) PURE;\n\n    STDMETHOD(TxGetViewInset)( THIS_\n        LPRECT prc) PURE;\n\n    STDMETHOD(TxGetCharFormat)( THIS_\n        const CHARFORMATW** ppCF) PURE;\n\n    STDMETHOD(TxGetParaFormat)( THIS_\n        const PARAFORMAT** ppPF) PURE;\n\n    STDMETHOD_(COLORREF,TxGetSysColor)( THIS_\n        int nIndex) PURE;\n\n    STDMETHOD(TxGetBackStyle)( THIS_\n        TXTBACKSTYLE* pStyle) PURE;\n\n    STDMETHOD(TxGetMaxLength)( THIS_\n        DWORD* plength) PURE;\n\n    STDMETHOD(TxGetScrollBars)( THIS_\n        DWORD* pdwScrollBar) PURE;\n\n    STDMETHOD(TxGetPasswordChar)( THIS_\n        WCHAR* pch) PURE;\n\n    STDMETHOD(TxGetAcceleratorPos)( THIS_\n        LONG* pch) PURE;\n\n    STDMETHOD(TxGetExtent)( THIS_\n        LPSIZEL lpExtent) PURE;\n\n    STDMETHOD(OnTxCharFormatChange)( THIS_\n        const CHARFORMATW* pcf) PURE;\n\n    STDMETHOD(OnTxParaFormatChange)( THIS_\n        const PARAFORMAT* ppf) PURE;\n\n    STDMETHOD(TxGetPropertyBits)( THIS_\n        DWORD dwMask,\n        DWORD* pdwBits) PURE;\n\n    STDMETHOD(TxNotify)( THIS_\n        DWORD iNotify,\n        void* pv) PURE;\n\n    STDMETHOD_(HIMC,TxImmGetContext)( THIS\n        ) PURE;\n\n    STDMETHOD_(void,TxImmReleaseContext)( THIS_\n        HIMC himc) PURE;\n\n    STDMETHOD(TxGetSelectionBarWidth)( THIS_\n        LONG* lSelBarWidth) PURE;\n\n};\n#undef INTERFACE\n\n#ifdef COBJMACROS\n/*** IUnknown methods ***/\n#define ITextHost_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define ITextHost_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define ITextHost_Release(p) (p)->lpVtbl->Release(p)\n#endif\n\nHRESULT WINAPI CreateTextServices(IUnknown*,ITextHost*,IUnknown**);\n\ntypedef HRESULT (WINAPI *PCreateTextServices)(IUnknown*,ITextHost*,IUnknown**);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _TEXTSERV_H */\n"
  },
  {
    "path": "wine/windows/textstor.idl",
    "content": "/*\n * Copyright 2009 Aric Stewart, CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"oaidl.idl\";\n#endif\n\ncpp_quote(\"#define TS_E_INVALIDPOS      MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0200)\")\ncpp_quote(\"#define TS_E_NOLOCK          MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0201)\")\ncpp_quote(\"#define TS_E_NOOBJECT        MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0202)\")\ncpp_quote(\"#define TS_E_NOSERVICE       MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0203)\")\ncpp_quote(\"#define TS_E_NOINTERFACE     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0204)\")\ncpp_quote(\"#define TS_E_NOSELECTION     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0205)\")\ncpp_quote(\"#define TS_E_NOLAYOUT        MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0206)\")\ncpp_quote(\"#define TS_E_INVALIDPOINT    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0207)\")\ncpp_quote(\"#define TS_E_SYNCHRONOUS     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0208)\")\ncpp_quote(\"#define TS_E_READONLY        MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0209)\")\ncpp_quote(\"#define TS_E_FORMAT          MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x020a)\")\n\ncpp_quote(\"#define TS_S_ASYNC           MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_ITF, 0x0300)\")\n\n\nconst ULONG TS_DEFAULT_SELECTION = ~0u;\n\nconst DWORD TS_SD_READONLY     = 0x001;\nconst DWORD TS_SD_LOADING      = 0x002;\n\nconst DWORD TS_SS_DISJOINTSEL  = 0x001;\nconst DWORD TS_SS_REGIONS      = 0x002;\nconst DWORD TS_SS_TRANSITORY   = 0x004;\nconst DWORD TS_SS_NOHIDDENTEXT = 0x008;\n\nconst DWORD TS_AS_TEXT_CHANGE      = 0x01;\nconst DWORD TS_AS_SEL_CHANGE       = 0x02;\nconst DWORD TS_AS_LAYOUT_CHANGE    = 0x04;\nconst DWORD TS_AS_ATTR_CHANGE      = 0x08;\nconst DWORD TS_AS_STATUS_CHANGE    = 0x10;\n\nconst DWORD TS_AS_ALL_SINKS = (TS_AS_TEXT_CHANGE | TS_AS_SEL_CHANGE | TS_AS_LAYOUT_CHANGE | TS_AS_ATTR_CHANGE | TS_AS_STATUS_CHANGE);\n\nconst DWORD TS_LF_SYNC            = 0x1;\nconst DWORD TS_LF_READ            = 0x2;\nconst DWORD TS_LF_READWRITE       = 0x6;\n\nconst WCHAR TS_CHAR_EMBEDDED     = 0xfffc;\nconst WCHAR TS_CHAR_REGION       = 0x0000;\nconst WCHAR TS_CHAR_REPLACEMENT  = 0xfffd;\n\nconst DWORD TS_IAS_NOQUERY    = 0x1;\nconst DWORD TS_IAS_QUERYONLY  = 0x2;\n\nconst DWORD TS_ST_CORRECTION = 0x1;\n\nconst DWORD GXFPF_ROUND_NEAREST  = 0x1;\nconst DWORD GXFPF_NEAREST        = 0x2;\n\ntypedef [uuid(05fcf85b-5e9c-4c3e-ab71-29471d4f38e7)]  enum { TS_AE_NONE, TS_AE_START, TS_AE_END } TsActiveSelEnd;\ntypedef [uuid(033b0df0-f193-4170-b47b-141afc247878)]  enum { TS_RT_PLAIN, TS_RT_HIDDEN, TS_RT_OPAQUE } TsRunType;\ntypedef [uuid(ef3457d9-8446-49a7-a9e6-b50d9d5f3fd9)]  GUID TS_ATTRID;\n\ntypedef [uuid(fec4f516-c503-45b1-a5fd-7a3d8ab07049)] struct TS_STATUS\n{\n    DWORD dwDynamicFlags;\n    DWORD dwStaticFlags;\n} TS_STATUS;\n\ntypedef [uuid(f3181bd6-bcf0-41d3-a81c-474b17ec38fb)]  struct TS_TEXTCHANGE\n{\n    LONG acpStart;\n    LONG acpOldEnd;\n    LONG acpNewEnd;\n} TS_TEXTCHANGE;\n\ntypedef [uuid(7ecc3ffa-8f73-4d91-98ed-76f8ac5b1600)]  struct TS_SELECTIONSTYLE\n{\n    TsActiveSelEnd ase;\n    BOOL fInterimChar;\n} TS_SELECTIONSTYLE;\n\ntypedef [uuid(c4b9c33b-8a0d-4426-bebe-d444a4701fe9)]  struct TS_SELECTION_ACP\n{\n    LONG acpStart;\n    LONG acpEnd;\n    TS_SELECTIONSTYLE style;\n} TS_SELECTION_ACP;\n\ntypedef [uuid(a6231949-37c5-4b74-a24e-2a26c327201d)]  struct TS_RUNINFO\n{\n    ULONG uCount;\n    TsRunType type;\n} TS_RUNINFO;\n\ntypedef [uuid(2cc2b33f-1174-4507-b8d9-5bc0eb37c197)]  struct TS_ATTRVAL\n{\n    TS_ATTRID idAttr;\n    DWORD dwOverlapId;\n    VARIANT varValue;\n} TS_ATTRVAL;\n\nconst DWORD TS_ATTR_FIND_BACKWARDS    = 0x0001;\nconst DWORD TS_ATTR_FIND_WANT_OFFSET  = 0x0002;\nconst DWORD TS_ATTR_FIND_UPDATESTART  = 0x0004;\nconst DWORD TS_ATTR_FIND_WANT_VALUE   = 0x0008;\nconst DWORD TS_ATTR_FIND_WANT_END     = 0x0010;\nconst DWORD TS_ATTR_FIND_HIDDEN       = 0x0020;\n\ntypedef [uuid(7899d7c4-5f07-493c-a89a-fac8e777f476)]  enum { TS_LC_CREATE, TS_LC_CHANGE, TS_LC_DESTROY } TsLayoutCode;\ntypedef [uuid(1faf509e-44c1-458e-950a-38a96705a62b)]  DWORD TsViewCookie;\n\n[\n  object,\n  uuid(22d44c94-a419-4542-a272-ae26093ececf),\n  pointer_default(unique)\n]\ninterface ITextStoreACPSink : IUnknown\n{\n    HRESULT OnTextChange(\n        [in] DWORD dwFlags,\n        [in] const TS_TEXTCHANGE *pChange);\n\n    HRESULT OnSelectionChange();\n\n    HRESULT OnLayoutChange(\n        [in] TsLayoutCode lcode,\n        [in] TsViewCookie vcView);\n\n    HRESULT OnStatusChange(\n        [in] DWORD dwFlags);\n\n    HRESULT OnAttrsChange(\n        [in] LONG acpStart,\n        [in] LONG acpEnd,\n        [in] ULONG cAttrs,\n        [in, size_is(cAttrs)] const TS_ATTRID *paAttrs);\n\n    HRESULT OnLockGranted(\n        [in] DWORD dwLockFlags);\n\n    HRESULT OnStartEditTransaction();\n\n    HRESULT OnEndEditTransaction();\n}\n\n[\n  object,\n  uuid(28888fe3-c2a0-483a-a3ea-8cb1ce51ff3d),\n  pointer_default(unique)\n]\ninterface ITextStoreACP : IUnknown\n{\n    HRESULT AdviseSink(\n        [in] REFIID riid,\n        [in, iid_is(riid)] IUnknown *punk,\n        [in] DWORD dwMask);\n\n    HRESULT UnadviseSink(\n        [in] IUnknown *punk);\n\n    HRESULT RequestLock(\n        [in] DWORD dwLockFlags,\n        [out] HRESULT *phrSession);\n\n    HRESULT GetStatus(\n        [out] TS_STATUS *pdcs);\n\n    HRESULT QueryInsert(\n        [in] LONG acpTestStart,\n        [in] LONG acpTestEnd,\n        [in] ULONG cch,\n        [out] LONG *pacpResultStart,\n        [out] LONG *pacpResultEnd);\n\n    HRESULT GetSelection(\n        [in] ULONG ulIndex,\n        [in] ULONG ulCount,\n        [out, size_is(ulCount), length_is(*pcFetched)] TS_SELECTION_ACP *pSelection,\n        [out] ULONG *pcFetched);\n\n    HRESULT SetSelection(\n        [in] ULONG ulCount,\n        [in, size_is(ulCount)] const TS_SELECTION_ACP *pSelection);\n\n    HRESULT GetText(\n        [in] LONG acpStart,\n        [in] LONG acpEnd,\n        [out, size_is(cchPlainReq), length_is(*pcchPlainRet)] WCHAR *pchPlain,\n        [in] ULONG cchPlainReq,\n        [out] ULONG *pcchPlainRet,\n        [out, size_is(cRunInfoReq), length_is(*pcRunInfoRet)] TS_RUNINFO *prgRunInfo,\n        [in] ULONG cRunInfoReq,\n        [out] ULONG *pcRunInfoRet,\n        [out] LONG *pacpNext);\n\n    HRESULT SetText(\n        [in] DWORD dwFlags,\n        [in] LONG acpStart,\n        [in] LONG acpEnd,\n        [in, size_is(cch)] const WCHAR *pchText,\n        [in] ULONG cch,\n        [out] TS_TEXTCHANGE *pChange);\n\n    HRESULT GetFormattedText(\n        [in] LONG acpStart,\n        [in] LONG acpEnd,\n        [out] IDataObject **ppDataObject);\n\n    HRESULT GetEmbedded(\n        [in] LONG acpPos,\n        [in] REFGUID rguidService,\n        [in] REFIID riid,\n        [out, iid_is(riid)] IUnknown **ppunk);\n\n    HRESULT QueryInsertEmbedded(\n        [in] const GUID *pguidService,\n        [in] const FORMATETC *pFormatEtc,\n        [out] BOOL *pfInsertable);\n\n    HRESULT InsertEmbedded(\n        [in] DWORD dwFlags,\n        [in] LONG acpStart,\n        [in] LONG acpEnd,\n        [in] IDataObject *pDataObject,\n        [out] TS_TEXTCHANGE *pChange);\n\n\n    HRESULT InsertTextAtSelection(\n        [in] DWORD dwFlags,\n        [in, size_is(cch)] const WCHAR *pchText,\n        [in] ULONG cch,\n        [out] LONG *pacpStart,\n        [out] LONG *pacpEnd,\n        [out] TS_TEXTCHANGE *pChange);\n\n    HRESULT InsertEmbeddedAtSelection(\n        [in] DWORD dwFlags,\n        [in] IDataObject *pDataObject,\n        [out] LONG *pacpStart,\n        [out] LONG *pacpEnd,\n        [out] TS_TEXTCHANGE *pChange);\n\n    HRESULT RequestSupportedAttrs(\n        [in] DWORD dwFlags,\n        [in] ULONG cFilterAttrs,\n        [in, size_is(cFilterAttrs), unique] const TS_ATTRID *paFilterAttrs);\n\n    HRESULT RequestAttrsAtPosition(\n        [in] LONG acpPos,\n        [in] ULONG cFilterAttrs,\n        [in, size_is(cFilterAttrs), unique] const TS_ATTRID *paFilterAttrs,\n        [in] DWORD dwFlags);\n\n    HRESULT RequestAttrsTransitioningAtPosition(\n        [in] LONG acpPos,\n        [in] ULONG cFilterAttrs,\n        [in, size_is(cFilterAttrs), unique] const TS_ATTRID *paFilterAttrs,\n        [in] DWORD dwFlags);\n\n    HRESULT FindNextAttrTransition(\n        [in] LONG acpStart,\n        [in] LONG acpHalt,\n        [in] ULONG cFilterAttrs,\n        [in, size_is(cFilterAttrs), unique] const TS_ATTRID *paFilterAttrs,\n        [in] DWORD dwFlags,\n        [out] LONG *pacpNext,\n        [out] BOOL *pfFound,\n        [out] LONG *plFoundOffset);\n\n    HRESULT RetrieveRequestedAttrs(\n        [in] ULONG ulCount,\n        [out, size_is(ulCount), length_is(*pcFetched)] TS_ATTRVAL *paAttrVals,\n        [out] ULONG *pcFetched);\n\n    HRESULT GetEndACP(\n        [out] LONG *pacp);\n\n    HRESULT GetActiveView(\n        [out] TsViewCookie *pvcView);\n\n    HRESULT GetACPFromPoint(\n        [in] TsViewCookie vcView,\n        [in] const POINT *ptScreen,\n        [in] DWORD dwFlags,\n        [out] LONG *pacp);\n\n    HRESULT GetTextExt(\n        [in] TsViewCookie vcView,\n        [in] LONG acpStart,\n        [in] LONG acpEnd,\n        [out] RECT *prc,\n        [out] BOOL *pfClipped);\n\n    HRESULT GetScreenExt(\n        [in] TsViewCookie vcView,\n        [out] RECT *prc);\n\n    HRESULT GetWnd(\n        [in] TsViewCookie vcView,\n        [out] HWND *phwnd);\n}\n"
  },
  {
    "path": "wine/windows/tlhelp32.h",
    "content": "/*\n * Copyright (C) 1998 Patrick Spinler\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_TLHELP32_H\n#define __WINE_TLHELP32_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*\n * CreateToolhelp32Snapshot\n */\n\n#define TH32CS_SNAPHEAPLIST 0x00000001\n#define TH32CS_SNAPPROCESS  0x00000002\n#define TH32CS_SNAPTHREAD   0x00000004\n#define TH32CS_SNAPMODULE   0x00000008\n#define TH32CS_SNAPALL     (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE)\n#define TH32CS_INHERIT     0x80000000\n\nHANDLE WINAPI CreateToolhelp32Snapshot(DWORD,DWORD);\n\n/*\n * thread entry list as created by CreateToolHelp32Snapshot\n */\n\ntypedef struct tagTHREADENTRY32\n{\n    DWORD dwSize;\n    DWORD cntUsage;\n    DWORD th32ThreadID;\n    DWORD th32OwnerProcessID;\n    LONG  tpBasePri;\n    LONG  tpDeltaPri;\n    DWORD dwFlags;\n} THREADENTRY32, *PTHREADENTRY32, *LPTHREADENTRY32;\n\nBOOL WINAPI Thread32First(HANDLE,LPTHREADENTRY32);\nBOOL WINAPI Thread32Next(HANDLE,LPTHREADENTRY32);\n\n/*\n * Process entry list as created by CreateToolHelp32Snapshot\n */\n\ntypedef struct tagPROCESSENTRY32\n{\n    DWORD     dwSize;\n    DWORD     cntUsage;\n    DWORD     th32ProcessID;\n    ULONG_PTR th32DefaultHeapID;\n    DWORD     th32ModuleID;\n    DWORD     cntThreads;\n    DWORD     th32ParentProcessID;\n    LONG      pcPriClassBase;\n    DWORD     dwFlags;\n    char      szExeFile[MAX_PATH];\n} PROCESSENTRY32, *PPROCESSENTRY32, *LPPROCESSENTRY32;\n\ntypedef struct tagPROCESSENTRY32W\n{\n    DWORD     dwSize;\n    DWORD     cntUsage;\n    DWORD     th32ProcessID;\n    ULONG_PTR th32DefaultHeapID;\n    DWORD     th32ModuleID;\n    DWORD     cntThreads;\n    DWORD     th32ParentProcessID;\n    LONG      pcPriClassBase;\n    DWORD     dwFlags;\n    WCHAR     szExeFile[MAX_PATH];\n} PROCESSENTRY32W, *PPROCESSENTRY32W, *LPPROCESSENTRY32W;\n\nBOOL WINAPI Process32First(HANDLE,LPPROCESSENTRY32);\nBOOL WINAPI Process32FirstW(HANDLE,LPPROCESSENTRY32W);\nBOOL WINAPI Process32Next(HANDLE,LPPROCESSENTRY32);\nBOOL WINAPI Process32NextW(HANDLE,LPPROCESSENTRY32W);\n\n#ifdef UNICODE\n#define Process32First Process32FirstW\n#define Process32Next Process32NextW\n#define PROCESSENTRY32 PROCESSENTRY32W\n#define PPROCESSENTRY32 PPROCESSENTRY32W\n#define LPPROCESSENTRY32 LPPROCESSENTRY32W\n#endif\n\n/*\n * Module entry list as created by CreateToolHelp32Snapshot\n */\n\n#define MAX_MODULE_NAME32 255\n\ntypedef struct tagMODULEENTRY32\n{\n    DWORD  dwSize;\n    DWORD  th32ModuleID;\n    DWORD  th32ProcessID;\n    DWORD  GlblcntUsage;\n    DWORD  ProccntUsage;\n    BYTE  *modBaseAddr;\n    DWORD  modBaseSize;\n    HMODULE hModule;\n    char   szModule[MAX_MODULE_NAME32 + 1];\n    char   szExePath[MAX_PATH];\n} MODULEENTRY32, *PMODULEENTRY32, *LPMODULEENTRY32;\n\ntypedef struct tagMODULEENTRY32W\n{\n    DWORD  dwSize;\n    DWORD  th32ModuleID;\n    DWORD  th32ProcessID;\n    DWORD  GlblcntUsage;\n    DWORD  ProccntUsage;\n    BYTE  *modBaseAddr;\n    DWORD  modBaseSize;\n    HMODULE hModule;\n    WCHAR  szModule[MAX_MODULE_NAME32 + 1];\n    WCHAR  szExePath[MAX_PATH];\n} MODULEENTRY32W, *PMODULEENTRY32W, *LPMODULEENTRY32W;\n\nBOOL WINAPI Module32First(HANDLE,LPMODULEENTRY32);\nBOOL WINAPI Module32FirstW(HANDLE,LPMODULEENTRY32W);\nBOOL WINAPI Module32Next(HANDLE,LPMODULEENTRY32);\nBOOL WINAPI Module32NextW(HANDLE,LPMODULEENTRY32W);\n\n#ifdef UNICODE\n#define Module32First Module32FirstW\n#define Module32Next Module32NextW\n#define MODULEENTRY32 MODULEENTRY32W\n#define PMODULEENTRY32 PMODULEENTRY32W\n#define LPMODULEENTRY32 LPMODULEENTRY32W\n#endif\n\ntypedef struct tagHEAPLIST32\n{\n    SIZE_T dwSize;\n    DWORD th32ProcessID;\n    ULONG_PTR th32HeapID;\n    DWORD dwFlags;\n} HEAPLIST32, *PHEAPLIST32, *LPHEAPLIST32;\n\n#define HF32_DEFAULT 1\n#define HF32_SHARED  2\n\nBOOL WINAPI Heap32ListFirst(HANDLE,LPHEAPLIST32);\nBOOL WINAPI Heap32ListNext(HANDLE,LPHEAPLIST32);\nBOOL WINAPI Toolhelp32ReadProcessMemory(DWORD,LPCVOID,LPVOID,SIZE_T,SIZE_T*);\n\ntypedef struct tagHEAPENTRY32\n{\n    SIZE_T dwSize;\n    HANDLE hHandle;\n    ULONG_PTR dwAddress;\n    SIZE_T dwBlockSize;\n    DWORD dwFlags;\n    DWORD dwLockCount;\n    DWORD dwResvd;\n    DWORD th32ProcessID;\n    ULONG_PTR th32HeapID;\n} HEAPENTRY32, *PHEAPENTRY32, *LPHEAPENTRY32;\n\nBOOL WINAPI Heap32First(LPHEAPENTRY32,DWORD,ULONG_PTR);\nBOOL WINAPI Heap32Next(LPHEAPENTRY32);\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif\n\n#endif /* __WINE_TLHELP32_H */\n"
  },
  {
    "path": "wine/windows/tlogstg.idl",
    "content": "/*\n * Copyright 2012 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"objidl.idl\";\nimport \"oleidl.idl\";\nimport \"shtypes.idl\";\n\ntypedef struct _WINDOWDATA {\n    DWORD dwWindowID;\n    UINT uiCP;\n    PIDLIST_ABSOLUTE pidl;\n    [string] LPWSTR lpszUrl;\n    [string] LPWSTR lpszUrlLocation;\n    [string] LPWSTR lpszTitle;\n} WINDOWDATA;\n\ntypedef WINDOWDATA *LPWINDOWDATA;\ntypedef const WINDOWDATA *LPCWINDOWDATA;\n\n[\n    uuid(241c033e-e659-43da-aa4d-4086dbc4758d),\n    object\n]\ninterface ITravelLogClient : IUnknown\n{\n    HRESULT FindWindowByIndex(\n            [in] DWORD dwID,\n            [out] IUnknown **ppunk);\n\n    HRESULT GetWindowData(\n            [in] IStream *pStream,\n            [out] LPWINDOWDATA pWinData);\n\n    HRESULT LoadHistoryPosition(\n            [in] LPWSTR pszUrlLocation,\n            [in] DWORD dwPosition);\n}\n"
  },
  {
    "path": "wine/windows/tmschema.h",
    "content": "/*\n * Copyright (C) 2003 Kevin Koltzau\n * Copyright (C) 2004 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_TMSCHEMA_H\n#define __WINE_TMSCHEMA_H\n\n#include <schemadef.h>\n\nBEGIN_TM_SCHEMA(ThemeMgrSchema)\n\n\n/***** ENUMERATIONS *****/\n\n/* BGTYPE Enum */\nBEGIN_TM_ENUM(BGTYPE)\n    TM_ENUM(0, BT, IMAGEFILE)\n    TM_ENUM(1, BT, BORDERFILL)\n    TM_ENUM(2, BT, NONE)\nEND_TM_ENUM()\n\n/* IMAGELAYOUT Enum */\nBEGIN_TM_ENUM(IMAGELAYOUT)\n    TM_ENUM(0, IL, VERTICAL)\n    TM_ENUM(1, IL, HORIZONTAL)\nEND_TM_ENUM()\n\n/* BORDERTYPE Enum */\nBEGIN_TM_ENUM(BORDERTYPE)\n    TM_ENUM(0, BT, RECT)\n    TM_ENUM(1, BT, ROUNDRECT)\n    TM_ENUM(2, BT, ELLIPSE)\nEND_TM_ENUM()\n\n/* FILLTYPE Enum */\nBEGIN_TM_ENUM(FILLTYPE)\n    TM_ENUM(0, FT, SOLID)\n    TM_ENUM(1, FT, VERTGRADIENT)\n    TM_ENUM(2, FT, HORZGRADIENT)\n    TM_ENUM(3, FT, RADIALGRADIENT)\n    TM_ENUM(4, FT, TILEIMAGE)\nEND_TM_ENUM()\n\n/* SIZINGTYPE Enum */\nBEGIN_TM_ENUM(SIZINGTYPE)\n    TM_ENUM(0, ST, TRUESIZE)\n    TM_ENUM(1, ST, STRETCH)\n    TM_ENUM(2, ST, TILE)\nEND_TM_ENUM()\n\n/* HALIGN Enum */\nBEGIN_TM_ENUM(HALIGN)\n    TM_ENUM(0, HA, LEFT)\n    TM_ENUM(1, HA, CENTER)\n    TM_ENUM(2, HA, RIGHT)\nEND_TM_ENUM()\n\n/* CONTENTALIGNMENT Enum */\nBEGIN_TM_ENUM(CONTENTALIGNMENT)\n    TM_ENUM(0, CA, LEFT)\n    TM_ENUM(1, CA, CENTER)\n    TM_ENUM(2, CA, RIGHT)\nEND_TM_ENUM()\n\n/* VALIGN Enum */\nBEGIN_TM_ENUM(VALIGN)\n    TM_ENUM(0, VA, TOP)\n    TM_ENUM(1, VA, CENTER)\n    TM_ENUM(2, VA, BOTTOM)\nEND_TM_ENUM()\n\n/* OFFSETTYPE Enum */\nBEGIN_TM_ENUM(OFFSETTYPE)\n    TM_ENUM(0, OT, TOPLEFT)\n    TM_ENUM(1, OT, TOPRIGHT)\n    TM_ENUM(2, OT, TOPMIDDLE)\n    TM_ENUM(3, OT, BOTTOMLEFT)\n    TM_ENUM(4, OT, BOTTOMRIGHT)\n    TM_ENUM(5, OT, BOTTOMMIDDLE)\n    TM_ENUM(6, OT, MIDDLELEFT)\n    TM_ENUM(7, OT, MIDDLERIGHT)\n    TM_ENUM(8, OT, LEFTOFCAPTION)\n    TM_ENUM(9, OT, RIGHTOFCAPTION)\n    TM_ENUM(10, OT, LEFTOFLASTBUTTON)\n    TM_ENUM(11, OT, RIGHTOFLASTBUTTON)\n    TM_ENUM(12, OT, ABOVELASTBUTTON)\n    TM_ENUM(13, OT, BELOWLASTBUTTON)\nEND_TM_ENUM()\n\n/* ICONEFFECT Enum */\nBEGIN_TM_ENUM(ICONEFFECT)\n    TM_ENUM(0, ICE, NONE)\n    TM_ENUM(1, ICE, GLOW)\n    TM_ENUM(2, ICE, SHADOW)\n    TM_ENUM(3, ICE, PULSE)\n    TM_ENUM(4, ICE, ALPHA)\nEND_TM_ENUM()\n\n/* TEXTSHADOWTYPE Enum */\nBEGIN_TM_ENUM(TEXTSHADOWTYPE)\n    TM_ENUM(0, TST, NONE)\n    TM_ENUM(1, TST, SINGLE)\n    TM_ENUM(2, TST, CONTINUOUS)\nEND_TM_ENUM()\n\n/* GLYPHTYPE Enum */\nBEGIN_TM_ENUM(GLYPHTYPE)\n    TM_ENUM(0, GT, NONE)\n    TM_ENUM(1, GT, IMAGEGLYPH)\n    TM_ENUM(2, GT, FONTGLYPH)\nEND_TM_ENUM()\n\n/* IMAGESELECTTYPE Enum */\nBEGIN_TM_ENUM(IMAGESELECTTYPE)\n    TM_ENUM(0, IST, NONE)\n    TM_ENUM(1, IST, SIZE)\n    TM_ENUM(2, IST, DPI)\nEND_TM_ENUM()\n\n/* TRUESIZESCALINGTYPE Enum */\nBEGIN_TM_ENUM(TRUESIZESCALINGTYPE)\n    TM_ENUM(0, TSST, NONE)\n    TM_ENUM(1, TSST, SIZE)\n    TM_ENUM(2, TSST, DPI)\nEND_TM_ENUM()\n\n/* GLYPHFONTSIZINGTYPE Enum */\nBEGIN_TM_ENUM(GLYPHFONTSIZINGTYPE)\n    TM_ENUM(0, GFST, NONE)\n    TM_ENUM(1, GFST, SIZE)\n    TM_ENUM(2, GFST, DPI)\nEND_TM_ENUM()\n\n\n/***** PROPERTIES *****/\nBEGIN_TM_PROPS()\n\n    /* Primitive types */\n    TM_PROP(201, TMT, STRING,                     STRING)\n    TM_PROP(202, TMT, INT,                        INT)\n    TM_PROP(203, TMT, BOOL,                       BOOL)\n    TM_PROP(204, TMT, COLOR,                      COLOR)\n    TM_PROP(205, TMT, MARGINS,                    MARGINS)\n    TM_PROP(206, TMT, FILENAME,                   FILENAME)\n    TM_PROP(207, TMT, SIZE,                       SIZE)\n    TM_PROP(208, TMT, POSITION,                   POSITION)\n    TM_PROP(209, TMT, RECT,                       RECT)\n    TM_PROP(210, TMT, FONT,                       FONT)\n    TM_PROP(211, TMT, INTLIST,                    INTLIST)\n    /* we should have ENUM around here */\n\n    /* Misc properties */\n    TM_PROP(401, TMT, COLORSCHEMES,               STRING)\n    TM_PROP(402, TMT, SIZES,                      STRING)\n    TM_PROP(403, TMT, CHARSET,                    INT)\n\n    /* Documentation properties */\n    TM_PROP(601, TMT, DISPLAYNAME,                STRING)\n    TM_PROP(602, TMT, TOOLTIP,                    STRING)\n    TM_PROP(603, TMT, COMPANY,                    STRING)\n    TM_PROP(604, TMT, AUTHOR,                     STRING)\n    TM_PROP(605, TMT, COPYRIGHT,                  STRING)\n    TM_PROP(606, TMT, URL,                        STRING)\n    TM_PROP(607, TMT, VERSION,                    STRING)\n    TM_PROP(608, TMT, DESCRIPTION,                STRING)\n#   define TMT_FIRST_RCSTRING_NAME                TMT_DISPLAYNAME\n#   define TMT_LAST_RCSTRING_NAME                 TMT_DESCRIPTION\n\n    /* Font theme metric properties */\n    TM_PROP(801, TMT, CAPTIONFONT,                FONT)\n    TM_PROP(802, TMT, SMALLCAPTIONFONT,           FONT)\n    TM_PROP(803, TMT, MENUFONT,                   FONT)\n    TM_PROP(804, TMT, STATUSFONT,                 FONT)\n    TM_PROP(805, TMT, MSGBOXFONT,                 FONT)\n    TM_PROP(806, TMT, ICONTITLEFONT,              FONT)\n#   define TMT_FIRSTFONT                          TMT_CAPTIONFONT\n#   define TMT_LASTFONT                           TMT_ICONTITLEFONT\n\n    /* Bool theme metric properties */\n    TM_PROP(1001, TMT, FLATMENUS,                 BOOL)\n#   define TMT_FIRSTBOOL                          TMT_FLATMENUS\n#   define TMT_LASTBOOL                           TMT_FLATMENUS\n\n    /* Size theme metric properties */\n    TM_PROP(1201, TMT, SIZINGBORDERWIDTH,         SIZE)\n    TM_PROP(1202, TMT, SCROLLBARWIDTH,            SIZE)\n    TM_PROP(1203, TMT, SCROLLBARHEIGHT,           SIZE)\n    TM_PROP(1204, TMT, CAPTIONBARWIDTH,           SIZE)\n    TM_PROP(1205, TMT, CAPTIONBARHEIGHT,          SIZE)\n    TM_PROP(1206, TMT, SMCAPTIONBARWIDTH,         SIZE)\n    TM_PROP(1207, TMT, SMCAPTIONBARHEIGHT,        SIZE)\n    TM_PROP(1208, TMT, MENUBARWIDTH,              SIZE)\n    TM_PROP(1209, TMT, MENUBARHEIGHT,             SIZE)\n#   define TMT_FIRSTSIZE                          TMT_SIZINGBORDERWIDTH\n#   define TMT_LASTSIZE                           TMT_MENUBARHEIGHT\n\n    /* Int theme metric properties */\n    TM_PROP(1301, TMT, MINCOLORDEPTH,             INT)\n#   define TMT_FIRSTINT                           TMT_MINCOLORDEPTH\n#   define TMT_LASTINT                            TMT_MINCOLORDEPTH\n\n    /* String theme metric properties */\n    TM_PROP(1401, TMT, CSSNAME,                   STRING)\n    TM_PROP(1402, TMT, XMLNAME,                   STRING)\n#   define TMT_FIRSTSTRING                        TMT_CSSNAME\n#   define TMT_LASTSTRING                         TMT_XMLNAME\n\n    /* Color theme metric properties */\n    TM_PROP(1601, TMT, SCROLLBAR,                 COLOR)\n    TM_PROP(1602, TMT, BACKGROUND,                COLOR)\n    TM_PROP(1603, TMT, ACTIVECAPTION,             COLOR)\n    TM_PROP(1604, TMT, INACTIVECAPTION,           COLOR)\n    TM_PROP(1605, TMT, MENU,                      COLOR)\n    TM_PROP(1606, TMT, WINDOW,                    COLOR)\n    TM_PROP(1607, TMT, WINDOWFRAME,               COLOR)\n    TM_PROP(1608, TMT, MENUTEXT,                  COLOR)\n    TM_PROP(1609, TMT, WINDOWTEXT,                COLOR)\n    TM_PROP(1610, TMT, CAPTIONTEXT,               COLOR)\n    TM_PROP(1611, TMT, ACTIVEBORDER,              COLOR)\n    TM_PROP(1612, TMT, INACTIVEBORDER,            COLOR)\n    TM_PROP(1613, TMT, APPWORKSPACE,              COLOR)\n    TM_PROP(1614, TMT, HIGHLIGHT,                 COLOR)\n    TM_PROP(1615, TMT, HIGHLIGHTTEXT,             COLOR)\n    TM_PROP(1616, TMT, BTNFACE,                   COLOR)\n    TM_PROP(1617, TMT, BTNSHADOW,                 COLOR)\n    TM_PROP(1618, TMT, GRAYTEXT,                  COLOR)\n    TM_PROP(1619, TMT, BTNTEXT,                   COLOR)\n    TM_PROP(1620, TMT, INACTIVECAPTIONTEXT,       COLOR)\n    TM_PROP(1621, TMT, BTNHIGHLIGHT,              COLOR)\n    TM_PROP(1622, TMT, DKSHADOW3D,                COLOR)\n    TM_PROP(1623, TMT, LIGHT3D,                   COLOR)\n    TM_PROP(1624, TMT, INFOTEXT,                  COLOR)\n    TM_PROP(1625, TMT, INFOBK,                    COLOR)\n    TM_PROP(1626, TMT, BUTTONALTERNATEFACE,       COLOR)\n    TM_PROP(1627, TMT, HOTTRACKING,               COLOR)\n    TM_PROP(1628, TMT, GRADIENTACTIVECAPTION,     COLOR)\n    TM_PROP(1629, TMT, GRADIENTINACTIVECAPTION,   COLOR)\n    TM_PROP(1630, TMT, MENUHILIGHT,               COLOR)\n    TM_PROP(1631, TMT, MENUBAR,                   COLOR)\n#   define TMT_FIRSTCOLOR                         TMT_SCROLLBAR\n#   define TMT_LASTCOLOR                          TMT_MENUBAR\n\n    /* hue substitutions */\n    TM_PROP(1801, TMT, FROMHUE1,                  INT)\n    TM_PROP(1802, TMT, FROMHUE2,                  INT)\n    TM_PROP(1803, TMT, FROMHUE3,                  INT)\n    TM_PROP(1804, TMT, FROMHUE4,                  INT)\n    TM_PROP(1805, TMT, FROMHUE5,                  INT)\n    TM_PROP(1806, TMT, TOHUE1,                    INT)\n    TM_PROP(1807, TMT, TOHUE2,                    INT)\n    TM_PROP(1808, TMT, TOHUE3,                    INT)\n    TM_PROP(1809, TMT, TOHUE4,                    INT)\n    TM_PROP(1810, TMT, TOHUE5,                    INT)\n\n    /* color substitutions */\n    TM_PROP(2001, TMT, FROMCOLOR1,                COLOR)\n    TM_PROP(2002, TMT, FROMCOLOR2,                COLOR)\n    TM_PROP(2003, TMT, FROMCOLOR3,                COLOR)\n    TM_PROP(2004, TMT, FROMCOLOR4,                COLOR)\n    TM_PROP(2005, TMT, FROMCOLOR5,                COLOR)\n    TM_PROP(2006, TMT, TOCOLOR1,                  COLOR)\n    TM_PROP(2007, TMT, TOCOLOR2,                  COLOR)\n    TM_PROP(2008, TMT, TOCOLOR3,                  COLOR)\n    TM_PROP(2009, TMT, TOCOLOR4,                  COLOR)\n    TM_PROP(2010, TMT, TOCOLOR5,                  COLOR)\n\n    /* Bool rendering properties */\n    TM_PROP(2201, TMT, TRANSPARENT,               BOOL)\n    TM_PROP(2202, TMT, AUTOSIZE,                  BOOL)\n    TM_PROP(2203, TMT, BORDERONLY,                BOOL)\n    TM_PROP(2204, TMT, COMPOSITED,                BOOL)\n    TM_PROP(2205, TMT, BGFILL,                    BOOL)\n    TM_PROP(2206, TMT, GLYPHTRANSPARENT,          BOOL)\n    TM_PROP(2207, TMT, GLYPHONLY,                 BOOL)\n    TM_PROP(2208, TMT, ALWAYSSHOWSIZINGBAR,       BOOL)\n    TM_PROP(2209, TMT, MIRRORIMAGE,               BOOL)\n    TM_PROP(2210, TMT, UNIFORMSIZING,             BOOL)\n    TM_PROP(2211, TMT, INTEGRALSIZING,            BOOL)\n    TM_PROP(2212, TMT, SOURCEGROW,                BOOL)\n    TM_PROP(2213, TMT, SOURCESHRINK,              BOOL)\n\n    /* Int rendering properties */\n    TM_PROP(2401, TMT, IMAGECOUNT,                INT)\n    TM_PROP(2402, TMT, ALPHALEVEL,                INT)\n    TM_PROP(2403, TMT, BORDERSIZE,                INT)\n    TM_PROP(2404, TMT, ROUNDCORNERWIDTH,          INT)\n    TM_PROP(2405, TMT, ROUNDCORNERHEIGHT,         INT)\n    TM_PROP(2406, TMT, GRADIENTRATIO1,            INT)\n    TM_PROP(2407, TMT, GRADIENTRATIO2,            INT)\n    TM_PROP(2408, TMT, GRADIENTRATIO3,            INT)\n    TM_PROP(2409, TMT, GRADIENTRATIO4,            INT)\n    TM_PROP(2410, TMT, GRADIENTRATIO5,            INT)\n    TM_PROP(2411, TMT, PROGRESSCHUNKSIZE,         INT)\n    TM_PROP(2412, TMT, PROGRESSSPACESIZE,         INT)\n    TM_PROP(2413, TMT, SATURATION,                INT)\n    TM_PROP(2414, TMT, TEXTBORDERSIZE,            INT)\n    TM_PROP(2415, TMT, ALPHATHRESHOLD,            INT)\n    TM_PROP(2416, TMT, WIDTH,                     SIZE)\n    TM_PROP(2417, TMT, HEIGHT,                    SIZE)\n    TM_PROP(2418, TMT, GLYPHINDEX,                INT)\n    TM_PROP(2419, TMT, TRUESIZESTRETCHMARK,       INT)\n    TM_PROP(2420, TMT, MINDPI1,                   INT)\n    TM_PROP(2421, TMT, MINDPI2,                   INT)\n    TM_PROP(2422, TMT, MINDPI3,                   INT)\n    TM_PROP(2423, TMT, MINDPI4,                   INT)\n    TM_PROP(2424, TMT, MINDPI5,                   INT)\n\n    /* Font rendering properties */\n    TM_PROP(2601, TMT, GLYPHFONT,                 FONT)\n\n    /* Filename rendering properties */\n    TM_PROP(3001, TMT, IMAGEFILE,                 FILENAME)\n    TM_PROP(3002, TMT, IMAGEFILE1,                FILENAME)\n    TM_PROP(3003, TMT, IMAGEFILE2,                FILENAME)\n    TM_PROP(3004, TMT, IMAGEFILE3,                FILENAME)\n    TM_PROP(3005, TMT, IMAGEFILE4,                FILENAME)\n    TM_PROP(3006, TMT, IMAGEFILE5,                FILENAME)\n    TM_PROP(3007, TMT, STOCKIMAGEFILE,            FILENAME)\n    TM_PROP(3008, TMT, GLYPHIMAGEFILE,            FILENAME)\n\n    /* String rendering properties */\n    TM_PROP(3201, TMT, TEXT,                      STRING)\n\n    /* Position rendering properties */\n    TM_PROP(3401, TMT, OFFSET,                    POSITION)\n    TM_PROP(3402, TMT, TEXTSHADOWOFFSET,          POSITION)\n    TM_PROP(3403, TMT, MINSIZE,                   POSITION)\n    TM_PROP(3404, TMT, MINSIZE1,                  POSITION)\n    TM_PROP(3405, TMT, MINSIZE2,                  POSITION)\n    TM_PROP(3406, TMT, MINSIZE3,                  POSITION)\n    TM_PROP(3407, TMT, MINSIZE4,                  POSITION)\n    TM_PROP(3408, TMT, MINSIZE5,                  POSITION)\n    TM_PROP(3409, TMT, NORMALSIZE,                POSITION)\n\n    /* Margin rendering properties */\n    TM_PROP(3601, TMT, SIZINGMARGINS,             MARGINS)\n    TM_PROP(3602, TMT, CONTENTMARGINS,            MARGINS)\n    TM_PROP(3603, TMT, CAPTIONMARGINS,            MARGINS)\n\n    /* Color rendering properties */\n    TM_PROP(3801, TMT, BORDERCOLOR,               COLOR)\n    TM_PROP(3802, TMT, FILLCOLOR,                 COLOR)\n    TM_PROP(3803, TMT, TEXTCOLOR,                 COLOR)\n    TM_PROP(3804, TMT, EDGELIGHTCOLOR,            COLOR)\n    TM_PROP(3805, TMT, EDGEHIGHLIGHTCOLOR,        COLOR)\n    TM_PROP(3806, TMT, EDGESHADOWCOLOR,           COLOR)\n    TM_PROP(3807, TMT, EDGEDKSHADOWCOLOR,         COLOR)\n    TM_PROP(3808, TMT, EDGEFILLCOLOR,             COLOR)\n    TM_PROP(3809, TMT, TRANSPARENTCOLOR,          COLOR)\n    TM_PROP(3810, TMT, GRADIENTCOLOR1,            COLOR)\n    TM_PROP(3811, TMT, GRADIENTCOLOR2,            COLOR)\n    TM_PROP(3812, TMT, GRADIENTCOLOR3,            COLOR)\n    TM_PROP(3813, TMT, GRADIENTCOLOR4,            COLOR)\n    TM_PROP(3814, TMT, GRADIENTCOLOR5,            COLOR)\n    TM_PROP(3815, TMT, SHADOWCOLOR,               COLOR)\n    TM_PROP(3816, TMT, GLOWCOLOR,                 COLOR)\n    TM_PROP(3817, TMT, TEXTBORDERCOLOR,           COLOR)\n    TM_PROP(3818, TMT, TEXTSHADOWCOLOR,           COLOR)\n    TM_PROP(3819, TMT, GLYPHTEXTCOLOR,            COLOR)\n    TM_PROP(3820, TMT, GLYPHTRANSPARENTCOLOR,     COLOR)\n    TM_PROP(3821, TMT, FILLCOLORHINT,             COLOR)\n    TM_PROP(3822, TMT, BORDERCOLORHINT,           COLOR)\n    TM_PROP(3823, TMT, ACCENTCOLORHINT,           COLOR)\n\n    /* Enum rendering properties */\n    TM_PROP(4001, TMT, BGTYPE,                    ENUM)\n    TM_PROP(4002, TMT, BORDERTYPE,                ENUM)\n    TM_PROP(4003, TMT, FILLTYPE,                  ENUM)\n    TM_PROP(4004, TMT, SIZINGTYPE,                ENUM)\n    TM_PROP(4005, TMT, HALIGN,                    ENUM)\n    TM_PROP(4006, TMT, CONTENTALIGNMENT,          ENUM)\n    TM_PROP(4007, TMT, VALIGN,                    ENUM)\n    TM_PROP(4008, TMT, OFFSETTYPE,                ENUM)\n    TM_PROP(4009, TMT, ICONEFFECT,                ENUM)\n    TM_PROP(4010, TMT, TEXTSHADOWTYPE,            ENUM)\n    TM_PROP(4011, TMT, IMAGELAYOUT,               ENUM)\n    TM_PROP(4012, TMT, GLYPHTYPE,                 ENUM)\n    TM_PROP(4013, TMT, IMAGESELECTTYPE,           ENUM)\n    TM_PROP(4014, TMT, GLYPHFONTSIZINGTYPE,       ENUM)\n    TM_PROP(4015, TMT, TRUESIZESCALINGTYPE,       ENUM)\n\n    /* custom properties */\n    TM_PROP(5001, TMT, USERPICTURE,               BOOL)\n    TM_PROP(5002, TMT, DEFAULTPANESIZE,           RECT)\n    TM_PROP(5003, TMT, BLENDCOLOR,                COLOR)\n\nEND_TM_PROPS()\n\n\n/***** PARTS & STATES *****/\n\n/* BUTTON parts */\nBEGIN_TM_CLASS_PARTS(BUTTON)\n    TM_PART(1, BP, PUSHBUTTON)\n    TM_PART(2, BP, RADIOBUTTON)\n    TM_PART(3, BP, CHECKBOX)\n    TM_PART(4, BP, GROUPBOX)\n    TM_PART(5, BP, USERBUTTON)\nEND_TM_CLASS_PARTS()\n\n/* BUTTON - PUSHBUTTON states */\nBEGIN_TM_PART_STATES(PUSHBUTTON)\n    TM_STATE(1, PBS, NORMAL)\n    TM_STATE(2, PBS, HOT)\n    TM_STATE(3, PBS, PRESSED)\n    TM_STATE(4, PBS, DISABLED)\n    TM_STATE(5, PBS, DEFAULTED)\nEND_TM_PART_STATES()\n\n/* BUTTON - RADIOBUTTON states */\nBEGIN_TM_PART_STATES(RADIOBUTTON)\n    TM_STATE(1, RBS, UNCHECKEDNORMAL)\n    TM_STATE(2, RBS, UNCHECKEDHOT)\n    TM_STATE(3, RBS, UNCHECKEDPRESSED)\n    TM_STATE(4, RBS, UNCHECKEDDISABLED)\n    TM_STATE(5, RBS, CHECKEDNORMAL)\n    TM_STATE(6, RBS, CHECKEDHOT)\n    TM_STATE(7, RBS, CHECKEDPRESSED)\n    TM_STATE(8, RBS, CHECKEDDISABLED)\nEND_TM_PART_STATES()\n\n/* BUTTON - CHECKBOX states */\nBEGIN_TM_PART_STATES(CHECKBOX)\n    TM_STATE(1, CBS, UNCHECKEDNORMAL)\n    TM_STATE(2, CBS, UNCHECKEDHOT)\n    TM_STATE(3, CBS, UNCHECKEDPRESSED)\n    TM_STATE(4, CBS, UNCHECKEDDISABLED)\n    TM_STATE(5, CBS, CHECKEDNORMAL)\n    TM_STATE(6, CBS, CHECKEDHOT)\n    TM_STATE(7, CBS, CHECKEDPRESSED)\n    TM_STATE(8, CBS, CHECKEDDISABLED)\n    TM_STATE(9, CBS, MIXEDNORMAL)\n    TM_STATE(10, CBS, MIXEDHOT)\n    TM_STATE(11, CBS, MIXEDPRESSED)\n    TM_STATE(12, CBS, MIXEDDISABLED)\nEND_TM_PART_STATES()\n\n/* BUTTON - GROUPBOX states */\nBEGIN_TM_PART_STATES(GROUPBOX)\n    TM_STATE(1, GBS, NORMAL)\n    TM_STATE(2, GBS, DISABLED)\nEND_TM_PART_STATES()\n\n/* CLOCK parts */\nBEGIN_TM_CLASS_PARTS(CLOCK)\n    TM_PART(1, CLP, TIME)\nEND_TM_CLASS_PARTS()\n\n/* CLOCK states */\nBEGIN_TM_PART_STATES(CLOCK)\n    TM_STATE(1, CLS, NORMAL)\nEND_TM_PART_STATES()\n\n/* COMBOBOX parts */\nBEGIN_TM_CLASS_PARTS(COMBOBOX)\n    TM_PART(1, CP, DROPDOWNBUTTON)\nEND_TM_CLASS_PARTS()\n\n/* COMBOBOX states */\nBEGIN_TM_PART_STATES(COMBOBOX)\n    TM_STATE(1, CBXS, NORMAL)\n    TM_STATE(2, CBXS, HOT)\n    TM_STATE(3, CBXS, PRESSED)\n    TM_STATE(4, CBXS, DISABLED)\nEND_TM_PART_STATES()\n\n/* EDIT parts */\nBEGIN_TM_CLASS_PARTS(EDIT)\n    TM_PART(1, EP, EDITTEXT)\n    TM_PART(2, EP, CARET)\nEND_TM_CLASS_PARTS()\n\n/* EDIT - EDITTEXT states */\nBEGIN_TM_PART_STATES(EDITTEXT)\n    TM_STATE(1, ETS, NORMAL)\n    TM_STATE(2, ETS, HOT)\n    TM_STATE(3, ETS, SELECTED)\n    TM_STATE(4, ETS, DISABLED)\n    TM_STATE(5, ETS, FOCUSED)\n    TM_STATE(6, ETS, READONLY)\n    TM_STATE(7, ETS, ASSIST)\nEND_TM_PART_STATES()\n\n/* EXPLORERBAR parts */\nBEGIN_TM_CLASS_PARTS(EXPLORERBAR)\n    TM_PART(1, EBP, HEADERBACKGROUND)\n    TM_PART(2, EBP, HEADERCLOSE)\n    TM_PART(3, EBP, HEADERPIN)\n    TM_PART(4, EBP, IEBARMENU)\n    TM_PART(5, EBP, NORMALGROUPBACKGROUND)\n    TM_PART(6, EBP, NORMALGROUPCOLLAPSE)\n    TM_PART(7, EBP, NORMALGROUPEXPAND)\n    TM_PART(8, EBP, NORMALGROUPHEAD)\n    TM_PART(9, EBP, SPECIALGROUPBACKGROUND)\n    TM_PART(10, EBP, SPECIALGROUPCOLLAPSE)\n    TM_PART(11, EBP, SPECIALGROUPEXPAND)\n    TM_PART(12, EBP, SPECIALGROUPHEAD)\nEND_TM_CLASS_PARTS()\n\n/* EXPLORERBAR - HEADERCLOSE states */\nBEGIN_TM_PART_STATES(HEADERCLOSE)\n    TM_STATE(1, EBHC, NORMAL)\n    TM_STATE(2, EBHC, HOT)\n    TM_STATE(3, EBHC, PRESSED)\nEND_TM_PART_STATES()\n\n/* EXPLORERBAR - HEADERPIN states */\nBEGIN_TM_PART_STATES(HEADERPIN)\n    TM_STATE(1, EBHP, NORMAL)\n    TM_STATE(2, EBHP, HOT)\n    TM_STATE(3, EBHP, PRESSED)\n    TM_STATE(4, EBHP, SELECTEDNORMAL)\n    TM_STATE(5, EBHP, SELECTEDHOT)\n    TM_STATE(6, EBHP, SELECTEDPRESSED)\nEND_TM_PART_STATES()\n\n/* EXPLORERBAR - IEBARMENU states */\nBEGIN_TM_PART_STATES(IEBARMENU)\n    TM_STATE(1, EBM, NORMAL)\n    TM_STATE(2, EBM, HOT)\n    TM_STATE(3, EBM, PRESSED)\nEND_TM_PART_STATES()\n\n/* EXPLORERBAR - NORMALGROUPCOLLAPSE states */\nBEGIN_TM_PART_STATES(NORMALGROUPCOLLAPSE)\n    TM_STATE(1, EBNGC, NORMAL)\n    TM_STATE(2, EBNGC, HOT)\n    TM_STATE(3, EBNGC, PRESSED)\nEND_TM_PART_STATES()\n\n/* EXPLORERBAR - NORMALGROUPEXPAND states */\nBEGIN_TM_PART_STATES(NORMALGROUPEXPAND)\n    TM_STATE(1, EBNGE, NORMAL)\n    TM_STATE(2, EBNGE, HOT)\n    TM_STATE(3, EBNGE, PRESSED)\nEND_TM_PART_STATES()\n\n/* EXPLORERBAR - SPECIALGROUPCOLLAPSE states */\nBEGIN_TM_PART_STATES(SPECIALGROUPCOLLAPSE)\n    TM_STATE(1, EBSGC, NORMAL)\n    TM_STATE(2, EBSGC, HOT)\n    TM_STATE(3, EBSGC, PRESSED)\nEND_TM_PART_STATES()\n\n/* EXPLORERBAR - SPECIALGROUPEXPAND states */\nBEGIN_TM_PART_STATES(SPECIALGROUPEXPAND)\n    TM_STATE(1, EBSGE, NORMAL)\n    TM_STATE(2, EBSGE, HOT)\n    TM_STATE(3, EBSGE, PRESSED)\nEND_TM_PART_STATES()\n\n/* GLOBALS parts */\nBEGIN_TM_CLASS_PARTS(GLOBALS)\n    TM_PART(1, GP, BORDER)\n    TM_PART(2, GP, LINEHORZ)\n    TM_PART(3, GP, LINEVERT)\nEND_TM_CLASS_PARTS()\n\n/* GLOBALS - BORDER states */\nBEGIN_TM_PART_STATES(BORDER)\n    TM_STATE(1, BSS, FLAT)\n    TM_STATE(2, BSS, RAISED)\n    TM_STATE(3, BSS, SUNKEN)\nEND_TM_PART_STATES()\n\n/* GLOBALS - LINEHORZ states */\nBEGIN_TM_PART_STATES(LINEHORZ)\n    TM_STATE(1, LHS, FLAT)\n    TM_STATE(2, LHS, RAISED)\n    TM_STATE(3, LHS, SUNKEN)\nEND_TM_PART_STATES()\n\n/* GLOBAL - LINEVERT states */\nBEGIN_TM_PART_STATES(LINEVERT)\n    TM_STATE(1, LVS, FLAT)\n    TM_STATE(2, LVS, RAISED)\n    TM_STATE(3, LVS, SUNKEN)\nEND_TM_PART_STATES()\n\n/* HEADER parts */\nBEGIN_TM_CLASS_PARTS(HEADER)\n    TM_PART(1, HP, HEADERITEM)\n    TM_PART(2, HP, HEADERITEMLEFT)\n    TM_PART(3, HP, HEADERITEMRIGHT)\n    TM_PART(4, HP, HEADERSORTARROW)\nEND_TM_CLASS_PARTS()\n\n/* HEADER - HEADERITEM states */\nBEGIN_TM_PART_STATES(HEADERITEM)\n    TM_STATE(1, HIS, NORMAL)\n    TM_STATE(2, HIS, HOT)\n    TM_STATE(3, HIS, PRESSED)\nEND_TM_PART_STATES()\n\n/* HEADER - HEADERITEMLEFT states */\nBEGIN_TM_PART_STATES(HEADERITEMLEFT)\n    TM_STATE(1, HILS, NORMAL)\n    TM_STATE(2, HILS, HOT)\n    TM_STATE(3, HILS, PRESSED)\nEND_TM_PART_STATES()\n\n/* HEADER - HEADERITEMRIGHT states */\nBEGIN_TM_PART_STATES(HEADERITEMRIGHT)\n    TM_STATE(1, HIRS, NORMAL)\n    TM_STATE(2, HIRS, HOT)\n    TM_STATE(3, HIRS, PRESSED)\nEND_TM_PART_STATES()\n\n/* HEADER - HEADERSORTARROW states */\nBEGIN_TM_PART_STATES(HEADERSORTARROW)\n    TM_STATE(1, HSAS, SORTEDUP)\n    TM_STATE(2, HSAS, SORTEDDOWN)\nEND_TM_PART_STATES()\n\n/* LISTVIEW parts */\nBEGIN_TM_CLASS_PARTS(LISTVIEW)\n    TM_PART(1, LVP, LISTITEM)\n    TM_PART(2, LVP, LISTGROUP)\n    TM_PART(3, LVP, LISTDETAIL)\n    TM_PART(4, LVP, LISTSORTEDDETAIL)\n    TM_PART(5, LVP, EMPTYTEXT)\nEND_TM_CLASS_PARTS()\n\n/* LISTVIEW - LISTITEM states */\nBEGIN_TM_PART_STATES(LISTITEM)\n    TM_STATE(1, LIS, NORMAL)\n    TM_STATE(2, LIS, HOT)\n    TM_STATE(3, LIS, SELECTED)\n    TM_STATE(4, LIS, DISABLED)\n    TM_STATE(5, LIS, SELECTEDNOTFOCUS)\nEND_TM_PART_STATES()\n\n/* MENU parts */\nBEGIN_TM_CLASS_PARTS(MENU)\n    TM_PART(1, MP, MENUITEM)\n    TM_PART(2, MP, MENUDROPDOWN)\n    TM_PART(3, MP, MENUBARITEM)\n    TM_PART(4, MP, MENUBARDROPDOWN)\n    TM_PART(5, MP, CHEVRON)\n    TM_PART(6, MP, SEPARATOR)\nEND_TM_CLASS_PARTS()\n\n/* MENU - * states */\nBEGIN_TM_PART_STATES(MENU)\n    TM_STATE(1, MS, NORMAL)\n    TM_STATE(2, MS, SELECTED)\n    TM_STATE(3, MS, DEMOTED)\nEND_TM_PART_STATES()\n\n/* MENUBAND parts */\nBEGIN_TM_CLASS_PARTS(MENUBAND)\n    TM_PART(1, MDP, NEWAPPBUTTON)\n/* MDP_SEPERATOR isn't a typo, as per Microsoft's headers */\n    TM_PART(2, MDP, SEPERATOR)\nEND_TM_CLASS_PARTS()\n\n/* MENUBAND states */\nBEGIN_TM_PART_STATES(MENUBAND)\n    TM_STATE(1, MDS, NORMAL)\n    TM_STATE(2, MDS, HOT)\n    TM_STATE(3, MDS, PRESSED)\n    TM_STATE(4, MDS, DISABLED)\n    TM_STATE(5, MDS, CHECKED)\n    TM_STATE(6, MDS, HOTCHECKED)\nEND_TM_PART_STATES()\n\n/* PAGE parts */\nBEGIN_TM_CLASS_PARTS(PAGE)\n    TM_PART(1, PGRP, UP)\n    TM_PART(2, PGRP, DOWN)\n    TM_PART(3, PGRP, UPHORZ)\n    TM_PART(4, PGRP, DOWNHORZ)\nEND_TM_CLASS_PARTS()\n\n/* PAGE - UP states */\nBEGIN_TM_PART_STATES(UP)\n    TM_STATE(1, UPS, NORMAL)\n    TM_STATE(2, UPS, HOT)\n    TM_STATE(3, UPS, PRESSED)\n    TM_STATE(4, UPS, DISABLED)\nEND_TM_PART_STATES()\n\n/* PAGE - DOWN states  */\nBEGIN_TM_PART_STATES(DOWN)\n    TM_STATE(1, DNS, NORMAL)\n    TM_STATE(2, DNS, HOT)\n    TM_STATE(3, DNS, PRESSED)\n    TM_STATE(4, DNS, DISABLED)\nEND_TM_PART_STATES()\n\n/* PAGE - UPHORZ states */\nBEGIN_TM_PART_STATES(UPHORZ)\n    TM_STATE(1, UPHZS, NORMAL)\n    TM_STATE(2, UPHZS, HOT)\n    TM_STATE(3, UPHZS, PRESSED)\n    TM_STATE(4, UPHZS, DISABLED)\nEND_TM_PART_STATES()\n\n/* PAGE - DOWNHORZ states */\nBEGIN_TM_PART_STATES(DOWNHORZ)\n    TM_STATE(1, DNHZS, NORMAL)\n    TM_STATE(2, DNHZS, HOT)\n    TM_STATE(3, DNHZS, PRESSED)\n    TM_STATE(4, DNHZS, DISABLED)\nEND_TM_PART_STATES()\n\n/* PROGRESS parts */\nBEGIN_TM_CLASS_PARTS(PROGRESS)\n    TM_PART(1, PP, BAR)\n    TM_PART(2, PP, BARVERT)\n    TM_PART(3, PP, CHUNK)\n    TM_PART(4, PP, CHUNKVERT)\nEND_TM_CLASS_PARTS()\n\n/* REBAR parts */\nBEGIN_TM_CLASS_PARTS(REBAR)\n    TM_PART(1, RP, GRIPPER)\n    TM_PART(2, RP, GRIPPERVERT)\n    TM_PART(3, RP, BAND)\n    TM_PART(4, RP, CHEVRON)\n    TM_PART(5, RP, CHEVRONVERT)\nEND_TM_CLASS_PARTS()\n\n/* REBAR - CHEVRON states */\nBEGIN_TM_PART_STATES(CHEVRON)\n    TM_STATE(1, CHEVS, NORMAL)\n    TM_STATE(2, CHEVS, HOT)\n    TM_STATE(3, CHEVS, PRESSED)\nEND_TM_PART_STATES()\n\n/* SCROLLBAR parts */\nBEGIN_TM_CLASS_PARTS(SCROLLBAR)\n    TM_PART(1, SBP, ARROWBTN)\n    TM_PART(2, SBP, THUMBBTNHORZ)\n    TM_PART(3, SBP, THUMBBTNVERT)\n    TM_PART(4, SBP, LOWERTRACKHORZ)\n    TM_PART(5, SBP, UPPERTRACKHORZ)\n    TM_PART(6, SBP, LOWERTRACKVERT)\n    TM_PART(7, SBP, UPPERTRACKVERT)\n    TM_PART(8, SBP, GRIPPERHORZ)\n    TM_PART(9, SBP, GRIPPERVERT)\n    TM_PART(10, SBP, SIZEBOX)\nEND_TM_CLASS_PARTS()\n\n/* SCROLLBAR - ARROWBTN states */\nBEGIN_TM_PART_STATES(ARROWBTN)\n    TM_STATE(1, ABS, UPNORMAL)\n    TM_STATE(2, ABS, UPHOT)\n    TM_STATE(3, ABS, UPPRESSED)\n    TM_STATE(4, ABS, UPDISABLED)\n    TM_STATE(5, ABS, DOWNNORMAL)\n    TM_STATE(6, ABS, DOWNHOT)\n    TM_STATE(7, ABS, DOWNPRESSED)\n    TM_STATE(8, ABS, DOWNDISABLED)\n    TM_STATE(9, ABS, LEFTNORMAL)\n    TM_STATE(10, ABS, LEFTHOT)\n    TM_STATE(11, ABS, LEFTPRESSED)\n    TM_STATE(12, ABS, LEFTDISABLED)\n    TM_STATE(13, ABS, RIGHTNORMAL)\n    TM_STATE(14, ABS, RIGHTHOT)\n    TM_STATE(15, ABS, RIGHTPRESSED)\n    TM_STATE(16, ABS, RIGHTDISABLED)\nEND_TM_PART_STATES()\n\n/* SCROLLBAR - LOWER* / THUMB* / UPPER* states */\nBEGIN_TM_PART_STATES(SCROLLBAR)\n    TM_STATE(1, SCRBS, NORMAL)\n    TM_STATE(2, SCRBS, HOT)\n    TM_STATE(3, SCRBS, PRESSED)\n    TM_STATE(4, SCRBS, DISABLED)\nEND_TM_PART_STATES()\n\n/* SCROLLBAR - SIZEBOX states */\nBEGIN_TM_PART_STATES(SIZEBOX)\n    TM_STATE(1, SZB, RIGHTALIGN)\n    TM_STATE(2, SZB, LEFTALIGN)\nEND_TM_PART_STATES()\n\n/* SPIN parts */\nBEGIN_TM_CLASS_PARTS(SPIN)\n    TM_PART(1, SPNP, UP)\n    TM_PART(2, SPNP, DOWN)\n    TM_PART(3, SPNP, UPHORZ)\n    TM_PART(4, SPNP, DOWNHORZ)\nEND_TM_CLASS_PARTS()\n\n/* SPIN * states */\n/* See PAGE states */\n\n/* STARTPANEL parts */\nBEGIN_TM_CLASS_PARTS(STARTPANEL)\n    TM_PART(1, SPP, USERPANE)\n    TM_PART(2, SPP, MOREPROGRAMS)\n    TM_PART(3, SPP, MOREPROGRAMSARROW)\n    TM_PART(4, SPP, PROGLIST)\n    TM_PART(5, SPP, PROGLISTSEPARATOR)\n    TM_PART(6, SPP, PLACESLIST)\n    TM_PART(7, SPP, PLACESLISTSEPARATOR)\n    TM_PART(8, SPP, LOGOFF)\n    TM_PART(9, SPP, LOGOFFBUTTONS)\n    TM_PART(10, SPP, USERPICTURE)\n    TM_PART(11, SPP, PREVIEW)\nEND_TM_CLASS_PARTS()\n\n/* STARTPANEL - MOREPROGRAMSARROW states */\nBEGIN_TM_PART_STATES(MOREPROGRAMSARROW)\n    TM_STATE(1, SPS, NORMAL)\n    TM_STATE(2, SPS, HOT)\n    TM_STATE(3, SPS, PRESSED)\nEND_TM_PART_STATES()\n\n/* STARTPANEL - LOGOFFBUTTONS states */\nBEGIN_TM_PART_STATES(LOGOFFBUTTONS)\n    TM_STATE(1, SPLS, NORMAL)\n    TM_STATE(2, SPLS, HOT)\n    TM_STATE(3, SPLS, PRESSED)\nEND_TM_PART_STATES()\n\n/* STATUS parts */\nBEGIN_TM_CLASS_PARTS(STATUS)\n    TM_PART(1, SP, PANE)\n    TM_PART(2, SP, GRIPPERPANE)\n    TM_PART(3, SP, GRIPPER)\nEND_TM_CLASS_PARTS()\n\n/* TAB parts */\nBEGIN_TM_CLASS_PARTS(TAB)\n    TM_PART(1, TABP, TABITEM)\n    TM_PART(2, TABP, TABITEMLEFTEDGE)\n    TM_PART(3, TABP, TABITEMRIGHTEDGE)\n    TM_PART(4, TABP, TABITEMBOTHEDGE)\n    TM_PART(5, TABP, TOPTABITEM)\n    TM_PART(6, TABP, TOPTABITEMLEFTEDGE)\n    TM_PART(7, TABP, TOPTABITEMRIGHTEDGE)\n    TM_PART(8, TABP, TOPTABITEMBOTHEDGE)\n    TM_PART(9, TABP, PANE)\n    TM_PART(10, TABP, BODY)\nEND_TM_CLASS_PARTS()\n\n/* TAB - TABITEM states */\nBEGIN_TM_PART_STATES(TABITEM)\n    TM_STATE(1, TIS, NORMAL)\n    TM_STATE(2, TIS, HOT)\n    TM_STATE(3, TIS, SELECTED)\n    TM_STATE(4, TIS, DISABLED)\n    TM_STATE(5, TIS, FOCUSED)\nEND_TM_PART_STATES()\n\n/* TAB - TABITEMLEFTEDGE states */\nBEGIN_TM_PART_STATES(TABITEMLEFTEDGE)\n    TM_STATE(1, TILES, NORMAL)\n    TM_STATE(2, TILES, HOT)\n    TM_STATE(3, TILES, SELECTED)\n    TM_STATE(4, TILES, DISABLED)\n    TM_STATE(5, TILES, FOCUSED)\nEND_TM_PART_STATES()\n\n/* TAB - TABITEMRIGHTEDGE states */\nBEGIN_TM_PART_STATES(TABITEMRIGHTEDGE)\n    TM_STATE(1, TIRES, NORMAL)\n    TM_STATE(2, TIRES, HOT)\n    TM_STATE(3, TIRES, SELECTED)\n    TM_STATE(4, TIRES, DISABLED)\n    TM_STATE(5, TIRES, FOCUSED)\nEND_TM_PART_STATES()\n\n/* TAB - TABITEMBOTHEDGES states */\nBEGIN_TM_PART_STATES(TABITEMBOTHEDGES)\n    TM_STATE(1, TIBES, NORMAL)\n    TM_STATE(2, TIBES, HOT)\n    TM_STATE(3, TIBES, SELECTED)\n    TM_STATE(4, TIBES, DISABLED)\n    TM_STATE(5, TIBES, FOCUSED)\nEND_TM_PART_STATES()\n\n/* TAB - TOPTABITEM states */\nBEGIN_TM_PART_STATES(TOPTABITEM)\n    TM_STATE(1, TTIS, NORMAL)\n    TM_STATE(2, TTIS, HOT)\n    TM_STATE(3, TTIS, SELECTED)\n    TM_STATE(4, TTIS, DISABLED)\n    TM_STATE(5, TTIS, FOCUSED)\nEND_TM_PART_STATES()\n\n/* TAB - TOPTABITEMLEFTEDGE states */\nBEGIN_TM_PART_STATES(TOPTABITEMLEFTEDGE)\n    TM_STATE(1, TTILES, NORMAL)\n    TM_STATE(2, TTILES, HOT)\n    TM_STATE(3, TTILES, SELECTED)\n    TM_STATE(4, TTILES, DISABLED)\n    TM_STATE(5, TTILES, FOCUSED)\nEND_TM_PART_STATES()\n\n/* TAB - TOPTABITEMRIGHTEDGE states */\nBEGIN_TM_PART_STATES(TOPTABITEMRIGHTEDGE)\n    TM_STATE(1, TTIRES, NORMAL)\n    TM_STATE(2, TTIRES, HOT)\n    TM_STATE(3, TTIRES, SELECTED)\n    TM_STATE(4, TTIRES, DISABLED)\n    TM_STATE(5, TTIRES, FOCUSED)\nEND_TM_PART_STATES()\n\n/* TAB - TOPTABITEMBOTHEDGES states */\nBEGIN_TM_PART_STATES(TOPTABITEMBOTHEDGES)\n    TM_STATE(1, TTIBES, NORMAL)\n    TM_STATE(2, TTIBES, HOT)\n    TM_STATE(3, TTIBES, SELECTED)\n    TM_STATE(4, TTIBES, DISABLED)\n    TM_STATE(5, TTIBES, FOCUSED)\nEND_TM_PART_STATES()\n\n/* TASKBAND parts */\nBEGIN_TM_CLASS_PARTS(TASKBAND)\n    TM_PART(1, TDP, GROUPCOUNT)\n    TM_PART(2, TDP, FLASHBUTTON)\n    TM_PART(3, TDP, FLASHBUTTONGROUPMENU)\nEND_TM_CLASS_PARTS()\n\n/* TASKBAR parts */\nBEGIN_TM_CLASS_PARTS(TASKBAR)\n    TM_PART(1, TBP, BACKGROUNDBOTTOM)\n    TM_PART(2, TBP, BACKGROUNDRIGHT)\n    TM_PART(3, TBP, BACKGROUNDTOP)\n    TM_PART(4, TBP, BACKGROUNDLEFT)\n    TM_PART(5, TBP, SIZINGBARBOTTOM)\n    TM_PART(6, TBP, SIZINGBARRIGHT)\n    TM_PART(7, TBP, SIZINGBARTOP)\n    TM_PART(8, TBP, SIZINGBARLEFT)\nEND_TM_CLASS_PARTS()\n\n/* TOOLBAR parts */\nBEGIN_TM_CLASS_PARTS(TOOLBAR)\n    TM_PART(1, TP, BUTTON)\n    TM_PART(2, TP, DROPDOWNBUTTON)\n    TM_PART(3, TP, SPLITBUTTON)\n    TM_PART(4, TP, SPLITBUTTONDROPDOWN)\n    TM_PART(5, TP, SEPARATOR)\n    TM_PART(6, TP, SEPARATORVERT)\nEND_TM_CLASS_PARTS()\n\n/* TOOLBAR - * states */\nBEGIN_TM_PART_STATES(TOOLBAR)\n    TM_STATE(1, TS, NORMAL)\n    TM_STATE(2, TS, HOT)\n    TM_STATE(3, TS, PRESSED)\n    TM_STATE(4, TS, DISABLED)\n    TM_STATE(5, TS, CHECKED)\n    TM_STATE(6, TS, HOTCHECKED)\nEND_TM_PART_STATES()\n\n/* TOOLTIP parts */\nBEGIN_TM_CLASS_PARTS(TOOLTIP)\n    TM_PART(1, TTP, STANDARD)\n    TM_PART(2, TTP, STANDARDTITLE)\n    TM_PART(3, TTP, BALLOON)\n    TM_PART(4, TTP, BALLOONTITLE)\n    TM_PART(5, TTP, CLOSE)\nEND_TM_CLASS_PARTS()\n\n/* TOOLTIP - STANDARD states */\nBEGIN_TM_PART_STATES(STANDARD)\n    TM_STATE(1, TTSS, NORMAL)\n    TM_STATE(2, TTSS, LINK)\nEND_TM_PART_STATES()\n\n/* TOOLTIP - STANDARDTITLE states */\n/* See TOOLTIP STANDARD  */\n\n/* TOOLTIP - BALLOON states */\nBEGIN_TM_PART_STATES(BALLOON)\n    TM_STATE(1, TTBS, NORMAL)\n    TM_STATE(2, TTBS, LINK)\nEND_TM_PART_STATES()\n\n/* TOOLTIP - BALLOONTITLE states */\n/* See TOOLTIP BALLOON */\n\n/* TOOLTIP - CLOSE states */\nBEGIN_TM_PART_STATES(CLOSE)\n    TM_STATE(1, TTCS, NORMAL)\n    TM_STATE(2, TTCS, HOT)\n    TM_STATE(3, TTCS, PRESSED)\nEND_TM_PART_STATES()\n\n/* TRACKBAR parts */\nBEGIN_TM_CLASS_PARTS(TRACKBAR)\n    TM_PART(1, TKP, TRACK)\n    TM_PART(2, TKP, TRACKVERT)\n    TM_PART(3, TKP, THUMB)\n    TM_PART(4, TKP, THUMBBOTTOM)\n    TM_PART(5, TKP, THUMBTOP)\n    TM_PART(6, TKP, THUMBVERT)\n    TM_PART(7, TKP, THUMBLEFT)\n    TM_PART(8, TKP, THUMBRIGHT)\n    TM_PART(9, TKP, TICS)\n    TM_PART(10, TKP, TICSVERT)\nEND_TM_CLASS_PARTS()\n\n/* TRACKBAR states */\nBEGIN_TM_PART_STATES(TRACKBAR)\n    TM_STATE(1, TKS, NORMAL)\nEND_TM_PART_STATES()\n\n/* TRACKBAR - TRACK states */\nBEGIN_TM_PART_STATES(TRACK)\n    TM_STATE(1, TRS, NORMAL)\nEND_TM_PART_STATES()\n\n/* TRACKBAR - TRACKVERT states */\nBEGIN_TM_PART_STATES(TRACKVERT)\n    TM_STATE(1, TRVS, NORMAL)\nEND_TM_PART_STATES()\n\n/* TRACKBAR - THUMB states */\nBEGIN_TM_PART_STATES(THUMB)\n    TM_STATE(1, TUS, NORMAL)\n    TM_STATE(2, TUS, HOT)\n    TM_STATE(3, TUS, PRESSED)\n    TM_STATE(4, TUS, FOCUSED)\n    TM_STATE(5, TUS, DISABLED)\nEND_TM_PART_STATES()\n\n/* TRACKBAR - THUMBBOTTOM states */\nBEGIN_TM_PART_STATES(THUMBBOTTOM)\n    TM_STATE(1, TUBS, NORMAL)\n    TM_STATE(2, TUBS, HOT)\n    TM_STATE(3, TUBS, PRESSED)\n    TM_STATE(4, TUBS, FOCUSED)\n    TM_STATE(5, TUBS, DISABLED)\nEND_TM_PART_STATES()\n\n/* TRACKBAR - THUMBTOP states */\nBEGIN_TM_PART_STATES(THUMBTOP)\n    TM_STATE(1, TUTS, NORMAL)\n    TM_STATE(2, TUTS, HOT)\n    TM_STATE(3, TUTS, PRESSED)\n    TM_STATE(4, TUTS, FOCUSED)\n    TM_STATE(5, TUTS, DISABLED)\nEND_TM_PART_STATES()\n\n/* TRACKBAR - THUMBVERT states */\nBEGIN_TM_PART_STATES(THUMBVERT)\n    TM_STATE(1, TUVS, NORMAL)\n    TM_STATE(2, TUVS, HOT)\n    TM_STATE(3, TUVS, PRESSED)\n    TM_STATE(4, TUVS, FOCUSED)\n    TM_STATE(5, TUVS, DISABLED)\nEND_TM_PART_STATES()\n\n/* TRACKBAR - THUMBLEFT states */\nBEGIN_TM_PART_STATES(THUMBLEFT)\n    TM_STATE(1, TUVLS, NORMAL)\n    TM_STATE(2, TUVLS, HOT)\n    TM_STATE(3, TUVLS, PRESSED)\n    TM_STATE(4, TUVLS, FOCUSED)\n    TM_STATE(5, TUVLS, DISABLED)\nEND_TM_PART_STATES()\n\n/* TRACKBAR - THUMBRIGHT states */\nBEGIN_TM_PART_STATES(THUMBRIGHT)\n    TM_STATE(1, TUVRS, NORMAL)\n    TM_STATE(2, TUVRS, HOT)\n    TM_STATE(3, TUVRS, PRESSED)\n    TM_STATE(4, TUVRS, FOCUSED)\n    TM_STATE(5, TUVRS, DISABLED)\nEND_TM_PART_STATES()\n\n/* TRACKBAR - TICS states */\nBEGIN_TM_PART_STATES(TICS)\n    TM_STATE(1, TSS, NORMAL)\nEND_TM_PART_STATES()\n\n/* TRACKBAR - TICSVERT states */\nBEGIN_TM_PART_STATES(TICSVERT)\n    TM_STATE(1, TSVS, NORMAL)\nEND_TM_PART_STATES()\n\n/* TRAYNOTIFY parts */\nBEGIN_TM_CLASS_PARTS(TRAYNOTIFY)\n    TM_PART(1, TNP, BACKGROUND)\n    TM_PART(2, TNP, ANIMBACKGROUND)\nEND_TM_CLASS_PARTS()\n\n/* TREEVIEW parts */\nBEGIN_TM_CLASS_PARTS(TREEVIEW)\n    TM_PART(1, TVP, TREEITEM)\n    TM_PART(2, TVP, GLYPH)\n    TM_PART(3, TVP, BRANCH)\nEND_TM_CLASS_PARTS()\n\n/* TREEVIEW - TREEITEM states */\nBEGIN_TM_PART_STATES(TREEITEM)\n    TM_STATE(1, TREIS, NORMAL)\n    TM_STATE(2, TREIS, HOT)\n    TM_STATE(3, TREIS, SELECTED)\n    TM_STATE(4, TREIS, DISABLED)\n    TM_STATE(5, TREIS, SELECTEDNOTFOCUS)\nEND_TM_PART_STATES()\n\n/* TREEVIEW - GLYPH states */\nBEGIN_TM_PART_STATES(GLYPH)\n    TM_STATE(1, GLPS, CLOSED)\n    TM_STATE(2, GLPS, OPENED)\nEND_TM_PART_STATES()\n\n/* WINDOW parts */\nBEGIN_TM_CLASS_PARTS(WINDOW)\n    TM_PART(1, WP, CAPTION)\n    TM_PART(2, WP, SMALLCAPTION)\n    TM_PART(3, WP, MINCAPTION)\n    TM_PART(4, WP, SMALLMINCAPTION)\n    TM_PART(5, WP, MAXCAPTION)\n    TM_PART(6, WP, SMALLMAXCAPTION)\n    TM_PART(7, WP, FRAMELEFT)\n    TM_PART(8, WP, FRAMERIGHT)\n    TM_PART(9, WP, FRAMEBOTTOM)\n    TM_PART(10, WP, SMALLFRAMELEFT)\n    TM_PART(11, WP, SMALLFRAMERIGHT)\n    TM_PART(12, WP, SMALLFRAMEBOTTOM)\n    TM_PART(13, WP, SYSBUTTON)\n    TM_PART(14, WP, MDISYSBUTTON)\n    TM_PART(15, WP, MINBUTTON)\n    TM_PART(16, WP, MDIMINBUTTON)\n    TM_PART(17, WP, MAXBUTTON)\n    TM_PART(18, WP, CLOSEBUTTON)\n    TM_PART(19, WP, SMALLCLOSEBUTTON)\n    TM_PART(20, WP, MDICLOSEBUTTON)\n    TM_PART(21, WP, RESTOREBUTTON)\n    TM_PART(22, WP, MDIRESTOREBUTTON)\n    TM_PART(23, WP, HELPBUTTON)\n    TM_PART(24, WP, MDIHELPBUTTON)\n    TM_PART(25, WP, HORZSCROLL)\n    TM_PART(26, WP, HORZTHUMB)\n    TM_PART(27, WP, VERTSCROLL)\n    TM_PART(28, WP, VERTTHUMB)\n    TM_PART(29, WP, DIALOG)\n    TM_PART(30, WP, CAPTIONSIZINGTEMPLATE)\n    TM_PART(31, WP, SMALLCAPTIONSIZINGTEMPLATE)\n    TM_PART(32, WP, FRAMELEFTSIZINGTEMPLATE)\n    TM_PART(33, WP, SMALLFRAMELEFTSIZINGTEMPLATE)\n    TM_PART(34, WP, FRAMERIGHTSIZINGTEMPLATE)\n    TM_PART(35, WP, SMALLFRAMERIGHTSIZINGTEMPLATE)\n    TM_PART(36, WP, FRAMEBOTTOMSIZINGTEMPLATE)\n    TM_PART(37, WP, SMALLFRAMEBOTTOMSIZINGTEMPLATE)\nEND_TM_CLASS_PARTS()\n\n/* WINDOW - CAPTION / SMALLCAPTION states */\nBEGIN_TM_PART_STATES(CAPTION)\n    TM_STATE(1, CS, ACTIVE)\n    TM_STATE(2, CS, INACTIVE)\n    TM_STATE(3, CS, DISABLED)\nEND_TM_PART_STATES()\n\n/* WINDOW - MINCAPTION / SMALLMINCAPTION states */\nBEGIN_TM_PART_STATES(MINCAPTION)\n    TM_STATE(1, MNCS, ACTIVE)\n    TM_STATE(2, MNCS, INACTIVE)\n    TM_STATE(3, MNCS, DISABLED)\nEND_TM_PART_STATES()\n\n/* WINDOW - MAXCAPTION / SMALLMAXCAPTION states */\nBEGIN_TM_PART_STATES(MAXCAPTION)\n    TM_STATE(1, MXCS, ACTIVE)\n    TM_STATE(2, MXCS, INACTIVE)\n    TM_STATE(3, MXCS, DISABLED)\nEND_TM_PART_STATES()\n\n/* WINDOW - FRAME* / SMALLFRAME* states */\nBEGIN_TM_PART_STATES(FRAME)\n    TM_STATE(1, FS, ACTIVE)\n    TM_STATE(2, FS, INACTIVE)\nEND_TM_PART_STATES()\n\n/* WINDOW - SYSBUTTON / MDISYSBUTTON states */\nBEGIN_TM_PART_STATES(SYSBUTTON)\n    TM_STATE(1, SBS, NORMAL)\n    TM_STATE(2, SBS, HOT)\n    TM_STATE(3, SBS, PUSHED)\n    TM_STATE(4, SBS, DISABLED)\nEND_TM_PART_STATES()\n\n/* WINDOW - MINBUTTON / MDIMINBUTTON states */\nBEGIN_TM_PART_STATES(MINBUTTON)\n    TM_STATE(1, MINBS, NORMAL)\n    TM_STATE(2, MINBS, HOT)\n    TM_STATE(3, MINBS, PUSHED)\n    TM_STATE(4, MINBS, DISABLED)\nEND_TM_PART_STATES()\n\n/* WINDOW - MAXBUTTON states */\nBEGIN_TM_PART_STATES(MAXBUTTON)\n    TM_STATE(1, MAXBS, NORMAL)\n    TM_STATE(2, MAXBS, HOT)\n    TM_STATE(3, MAXBS, PUSHED)\n    TM_STATE(4, MAXBS, DISABLED)\nEND_TM_PART_STATES()\n\n/* WINDOW - CLOSEBUTTON / SMALLCLOSEBUTTON / MDICLOSEBUTTON states */\nBEGIN_TM_PART_STATES(CLOSEBUTTON)\n    TM_STATE(1, CBS, NORMAL)\n    TM_STATE(2, CBS, HOT)\n    TM_STATE(3, CBS, PUSHED)\n    TM_STATE(4, CBS, DISABLED)\nEND_TM_PART_STATES()\n\n/* WINDOW - RESTOREBUTTON / MDIRESTOREBUTTON states */\nBEGIN_TM_PART_STATES(RESTOREBUTTON)\n    TM_STATE(1, RBS, NORMAL)\n    TM_STATE(2, RBS, HOT)\n    TM_STATE(3, RBS, PUSHED)\n    TM_STATE(4, RBS, DISABLED)\nEND_TM_PART_STATES()\n\n/* WINDOW - HELPBUTTON / MDIHELPBUTTON states */\nBEGIN_TM_PART_STATES(HELPBUTTON)\n    TM_STATE(1, HBS, NORMAL)\n    TM_STATE(2, HBS, HOT)\n    TM_STATE(3, HBS, PUSHED)\n    TM_STATE(4, HBS, DISABLED)\nEND_TM_PART_STATES()\n\n/* WINDOW - HORZSCROLL states */\nBEGIN_TM_PART_STATES(HORZSCROLL)\n    TM_STATE(1, HSS, NORMAL)\n    TM_STATE(2, HSS, HOT)\n    TM_STATE(3, HSS, PUSHED)\n    TM_STATE(4, HSS, DISABLED)\nEND_TM_PART_STATES()\n\n/* WINDOW - HORZTHUMB states */\nBEGIN_TM_PART_STATES(HORZTHUMB)\n    TM_STATE(1, HTS, NORMAL)\n    TM_STATE(2, HTS, HOT)\n    TM_STATE(3, HTS, PUSHED)\n    TM_STATE(4, HTS, DISABLED)\nEND_TM_PART_STATES()\n\n/* WINDOW - VERTSCROLL states */\nBEGIN_TM_PART_STATES(VERTSCROLL)\n    TM_STATE(1, VSS, NORMAL)\n    TM_STATE(2, VSS, HOT)\n    TM_STATE(3, VSS, PUSHED)\n    TM_STATE(4, VSS, DISABLED)\nEND_TM_PART_STATES()\n\n/* WINDOW - VERTTHUMB states */\nBEGIN_TM_PART_STATES(VERTTHUMB)\n    TM_STATE(1, VTS, NORMAL)\n    TM_STATE(2, VTS, HOT)\n    TM_STATE(3, VTS, PUSHED)\n    TM_STATE(4, VTS, DISABLED)\nEND_TM_PART_STATES()\n\nEND_TM_SCHEMA(ThemeMgrSchema)\n#endif\n"
  },
  {
    "path": "wine/windows/tom.idl",
    "content": "/*\n * Copyright 2006 Juan Lang\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\n\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef FindText\")\ncpp_quote(\"#endif\")\n\ntypedef enum tagTomConstants\n{\n    tomFalse       = (int) 0,\n    tomTrue        = (int) -1,\n    tomUndefined   = (int) -9999999,\n    tomToggle      = (int) -9999998,\n    tomAutoColor   = (int) -9999997,\n    tomDefault     = (int) -9999996,\n    tomSuspend     = (int) -9999995,\n    tomResume      = (int) -9999994,\n\n    /* ITextFont::Reset() modes */\n    tomApplyNow         = (int) 0,\n    tomApplyLater       = (int) 1,\n    tomTrackParms       = (int) 2,\n    tomCacheParms       = (int) 3,\n    tomApplyTmp         = (int) 4,\n    tomDisableSmartFont = (int) 8,\n    tomEnableSmartFont  = (int) 9,\n    tomUsePoints        = (int) 10,\n    tomUseTwips         = (int) 11,\n\n    tomBackward    = (int) 0xc0000001,\n    tomForward     = (int) 0x3fffffff,\n    tomMove        = (int) 0,\n    tomExtend      = (int) 1,\n    tomNoSelection          = (int) 0,\n    tomSelectionIP          = (int) 1,\n    tomSelectionNormal      = (int) 2,\n    tomSelectionFrame       = (int) 3,\n    tomSelectionColumn      = (int) 4,\n    tomSelectionRow         = (int) 5,\n    tomSelectionBlock       = (int) 6,\n    tomSelectionInlineShape = (int) 7,\n    tomSelectionShape       = (int) 8,\n    tomSelStartActive = (int) 1,\n    tomSelAtEOL       = (int) 2,\n    tomSelOvertype    = (int) 4,\n    tomSelActive      = (int) 8,\n    tomSelReplace     = (int) 16,\n    tomEnd   = (int) 0,\n    tomStart = (int) 32,\n    tomCollapseEnd   = (int) 0,\n    tomCollapseStart = (int) 1,\n    tomClientCoord = (int) 256,\n    tomNone       = (int) 0,\n    tomSingle     = (int) 1,\n    tomWords      = (int) 2,\n    tomDouble     = (int) 3,\n    tomDotted     = (int) 4,\n    tomDash       = (int) 5,\n    tomDashDot    = (int) 6,\n    tomDashDotDot = (int) 7,\n    tomWave       = (int) 8,\n    tomThick      = (int) 9,\n    tomHair       = (int) 10,\n    tomLineSpaceSingle   = (int) 0,\n    tomLineSpace1pt5     = (int) 1,\n    tomLineSpaceDouble   = (int) 2,\n    tomLineSpaceAtLeast  = (int) 3,\n    tomLineSpaceExactly  = (int) 4,\n    tomLineSpaceMultiple = (int) 5,\n    tomAlignLeft        = (int) 0,\n    tomAlignCenter      = (int) 1,\n    tomAlignRight       = (int) 2,\n    tomAlignJustify     = (int) 3,\n    tomAlignDecimal     = (int) 3,\n    tomAlignBar         = (int) 4,\n    tomAlignInterWord   = (int) 3,\n    tomAlignInterLetter = (int) 4,\n    tomAlignScaled      = (int) 5,\n    tomAlignGlyphs      = (int) 6,\n    tomAlignSnapGrid    = (int) 7,\n    tomSpaces     = (int) 0,\n    tomDots       = (int) 1,\n    tomDashes     = (int) 2,\n    tomLines      = (int) 3,\n    tomThickLines = (int) 4,\n    tomEquals     = (int) 5,\n    tomTabBack = (int) -3,\n    tomTabNext = (int) -2,\n    tomTabHere = (int) -1,\n    tomListBullet           = (int) 1,\n    tomListNumberAsArabic   = (int) 2,\n    tomListNumberAsLCLetter = (int) 3,\n    tomListNumberAsUCLetter = (int) 4,\n    tomListNumberAsLCRoman  = (int) 5,\n    tomListNumberAsUCRoman  = (int) 6,\n    tomListNumberAsSequence = (int) 7,\n    tomListParentheses      = (int) 0x10000,\n    tomListPeriod           = (int) 0x20000,\n    tomListPlain            = (int) 0x30000,\n    tomCharacter  = (int) 1,\n    tomWord       = (int) 2,\n    tomSentence   = (int) 3,\n    tomParagraph  = (int) 4,\n    tomLine       = (int) 5,\n    tomStory      = (int) 6,\n    tomScreen     = (int) 7,\n    tomSection    = (int) 8,\n    tomColumn     = (int) 9,\n    tomRow        = (int) 10,\n    tomWindow     = (int) 11,\n    tomCell       = (int) 12,\n    tomCharFormat = (int) 13,\n    tomParaFormat = (int) 14,\n    tomTable      = (int) 15,\n    tomObject     = (int) 16,\n    tomMatchWord    = (int) 2,\n    tomMatchCase    = (int) 4,\n    tomMatchPattern = (int) 8,\n\n    /* ITextRange story type values */\n    tomUnknownStory         = (int) 0,\n    tomMainTextStory        = (int) 1,\n    tomFootnotesStory       = (int) 2,\n    tomEndnotesStory        = (int) 3,\n    tomCommentsStory        = (int) 4,\n    tomTextFrameStory       = (int) 5,\n    tomEvenPagesHeaderStory = (int) 6,\n    tomPrimaryHeaderStory   = (int) 7,\n    tomEvenPagesFooterStory = (int) 8,\n    tomPrimaryFooterStory   = (int) 9,\n    tomFirstPageHeaderStory = (int) 10,\n    tomFirstPageFooterStory = (int) 11,\n\n    /* ITextFont animation property */\n    tomNoAnimation        = (int) 0,\n    tomLasVegasLights     = (int) 1,\n    tomBlinkingBackground = (int) 2,\n    tomSparkleText        = (int) 3,\n    tomMarchingBlackAnts  = (int) 4,\n    tomMarchingRedAnts    = (int) 5,\n    tomShimmer            = (int) 6,\n    tomWipeDown           = (int) 7,\n    tomWipeRight          = (int) 8,\n    tomAnimationMax       = (int) 8,\n\n    tomLowerCase     = (int) 0,\n    tomUpperCase     = (int) 1,\n    tomTitleCase     = (int) 2,\n    tomSentenceCase  = (int) 4,\n    tomToggleCase    = (int) 5,\n    tomReadOnly         = (int) 0x100,\n    tomShareDenyRead    = (int) 0x200,\n    tomShareDenyWrite   = (int) 0x400,\n    tomPasteFile        = (int) 0x1000,\n    tomCreateNew        = (int) 0x10,\n    tomCreateAlways     = (int) 0x20,\n    tomOpenExisting     = (int) 0x30,\n    tomOpenAlways       = (int) 0x40,\n    tomTruncateExisting = (int) 0x50,\n    tomRTF              = (int) 0x1,\n    tomText             = (int) 0x2,\n    tomHTML             = (int) 0x3,\n    tomWordDocument     = (int) 0x4,\n    tomBold      = (int) 0x80000001,\n    tomItalic    = (int) 0x80000002,\n    tomUnderline = (int) 0x80000004,\n    tomStrikeout = (int) 0x80000008,\n    tomProtected = (int) 0x80000010,\n    tomLink      = (int) 0x80000020,\n    tomSmallCaps = (int) 0x80000040,\n    tomAllCaps   = (int) 0x80000080,\n    tomHidden    = (int) 0x80000100,\n    tomOutline   = (int) 0x80000200,\n    tomShadow    = (int) 0x80000400,\n    tomEmboss    = (int) 0x80000800,\n    tomImprint   = (int) 0x80001000,\n    tomDisabled  = (int) 0x80002000,\n    tomRevised   = (int) 0x80004000,\n    tomNormalCaret      = (int) 0,\n    tomKoreanBlockCaret = (int) 0x1,\n    tomIncludeInset = (int) 0x1,\n    tomIgnoreCurrentFont  = (int) 0,\n    tomMatchFontCharset   = (int) 0x1,\n    tomMatchFontSignature = (int) 0x2,\n    tomCharset = (int) 0x80000000,\n    tomRE10Mode = (int) 0x1,\n    tomNoIME   = (int) 0x80000,\n    tomSelfIME = (int) 0x40000,\n    tomRowApplyDefault = (int)0,\n    tomCellStructureChangeOnly = (int)0x1,\n} tomConstants;\n\ninterface ITextRange;\ninterface ITextSelection;\ninterface ITextStoryRanges;\n\n[\n  object,\n  uuid(8cc497c0-a1df-11ce-8098-00aa0047be5d)\n]\ninterface ITextDocument : IDispatch\n{\n    HRESULT GetName([retval, out]BSTR *pName);\n    HRESULT GetSelection([retval, out]ITextSelection **ppSel);\n    HRESULT GetStoryCount([retval, out]LONG *pCount);\n    HRESULT GetStoryRanges([retval, out]ITextStoryRanges **ppStories);\n    HRESULT GetSaved([retval, out]LONG *pValue);\n    HRESULT SetSaved([in]LONG Value);\n    HRESULT GetDefaultTabStop([retval, out]float *pValue);\n    HRESULT SetDefaultTabStop([in]float Value);\n    HRESULT New();\n    HRESULT Open([in]VARIANT *pVar, [in]LONG Flags, [in]LONG CodePage);\n    HRESULT Save([in]VARIANT *pVar, [in]LONG Flags, [in]LONG CodePage);\n    HRESULT Freeze([retval, out]LONG *pCount);\n    HRESULT Unfreeze([retval, out]LONG *pCount);\n    HRESULT BeginEditCollection();\n    HRESULT EndEditCollection();\n    HRESULT Undo([in]LONG Count, [retval, out]LONG *prop);\n    HRESULT Redo([in]LONG Count, [retval, out]LONG *prop);\n    HRESULT Range([in]LONG cp1, [in]LONG cp2, [retval, out]ITextRange **ppRange);\n    HRESULT RangeFromPoint([in]LONG x, [in]LONG y, [retval, out]ITextRange **ppRange);\n}\n\n[\n  object,\n  uuid(01c25500-4268-11d1-883a-3c8b00c10000)\n]\ninterface ITextDocument2Old : ITextDocument\n{\n    HRESULT AttachMsgFilter([in]IUnknown *filter);\n    HRESULT SetEffectColor([in]LONG index, [in]COLORREF cr);\n    HRESULT GetEffectColor([in]LONG index, [out]COLORREF *cr);\n    HRESULT GetCaretType([retval, out]LONG *type);\n    HRESULT SetCaretType([in]LONG type);\n    HRESULT GetImmContext([retval, out]LONG *context);\n    HRESULT ReleaseImmContext([in]LONG context);\n    HRESULT GetPreferredFont([in]LONG cp, [in]LONG codepage, [in]LONG option, [in]LONG current_codepage, [in]LONG current_fontsize,\n                             [out]BSTR *bstr, [out]LONG *pitch_family, [out]LONG *new_fontsize);\n    HRESULT GetNotificationMode([retval, out]LONG *mode);\n    HRESULT SetNotificationMode([in]LONG mode);\n    HRESULT GetClientRect([in]LONG type, [out]LONG *left, [out]LONG *top, [out]LONG *right, [out]LONG *bottom);\n    HRESULT GetSelectionEx([retval, out]ITextSelection **selection);\n    HRESULT GetWindow([out]LONG *hwnd);\n    HRESULT GetFEFlags([out]LONG *flags);\n    HRESULT UpdateWindow();\n    HRESULT CheckTextLimit([in]LONG cch, [out]LONG  *exceed);\n    HRESULT IMEInProgress([in]LONG mode);\n    HRESULT SysBeep();\n    HRESULT Update([in]LONG mode);\n    HRESULT Notify([in]LONG notify);\n}\n\ninterface ITextDisplays;\ninterface ITextFont2;\ninterface ITextPara2;\ninterface ITextStory;\ninterface ITextStoryRanges2;\ninterface ITextStrings;\n\n[\n    object,\n    uuid(c241f5ef-7206-11d8-a2c7-00a0d1d6c6b3)\n]\ninterface ITextRow : IDispatch\n{\n    HRESULT GetAlignment([retval, out] LONG *value);\n    HRESULT SetAlignment([in] LONG value);\n    HRESULT GetCellCount([retval, out] LONG *value);\n    HRESULT SetCellCount([in] LONG value);\n    HRESULT GetCellCountCache([retval, out] LONG *value);\n    HRESULT SetCellCountCache([in] LONG value);\n    HRESULT GetCellIndex([retval, out] LONG *value);\n    HRESULT SetCellIndex([in] LONG value);\n    HRESULT GetCellMargin([retval, out] LONG *value);\n    HRESULT SetCellMargin([in] LONG value);\n    HRESULT GetHeight([retval, out] LONG *value);\n    HRESULT SetHeight([in] LONG value);\n    HRESULT GetIndent([retval, out] LONG *value);\n    HRESULT SetIndent([in] LONG value);\n    HRESULT GetKeepTogether([retval, out] LONG *value);\n    HRESULT SetKeepTogether([in] LONG value);\n    HRESULT GetKeepWithNext([retval, out] LONG *value);\n    HRESULT SetKeepWithNext([in] LONG value);\n    HRESULT GetNestLevel([retval, out] LONG *value);\n    HRESULT GetRTL([retval, out] LONG *value);\n    HRESULT SetRTL([in] LONG value);\n    HRESULT GetCellAlignment([retval, out] LONG *value);\n    HRESULT SetCellAlignment([in] LONG value);\n    HRESULT GetCellColorBack([retval, out] LONG *value);\n    HRESULT SetCellColorBack([in] LONG value);\n    HRESULT GetCellColorFore([retval, out] LONG *value);\n    HRESULT SetCellColorFore([in] LONG value);\n    HRESULT GetCellMergeFlags([retval, out] LONG *value);\n    HRESULT SetCellMergeFlags([in] LONG value);\n    HRESULT GetCellShading([retval, out] LONG *value);\n    HRESULT SetCellShading([in] LONG value);\n    HRESULT GetCellVerticalText([retval, out] LONG *value);\n    HRESULT SetCellVerticalText([in] LONG value);\n    HRESULT GetCellWidth([retval, out] LONG *value);\n    HRESULT SetCellWidth([in] LONG value);\n    HRESULT GetCellBorderColors([out] LONG *left, [out] LONG *top,\n            [out] LONG *right, [out] LONG *bottom);\n    HRESULT GetCellBorderWidths([out] LONG *left, [out] LONG *top,\n            [out] LONG *right, [out] LONG *bottom);\n    HRESULT SetCellBorderColors([in] LONG left, [in] LONG top,\n            [in] LONG right, [in] LONG bottom);\n    HRESULT SetCellBorderWidths([in] LONG left, [in] LONG top,\n            [in] LONG right, [in] LONG bottom);\n    HRESULT Apply([in] LONG row, [in] LONG flags);\n    HRESULT CanChange([retval, out] LONG *value);\n    HRESULT GetProperty([in] LONG type, [out] LONG *value);\n    HRESULT Insert([in] LONG row);\n    HRESULT IsEqual([in] ITextRow *row, [retval, out] LONG *r);\n    HRESULT Reset([in] LONG value);\n    HRESULT SetProperty([in] LONG type, [in] LONG value);\n}\n\n[\n    object,\n    uuid(c241f5e2-7206-11d8-a2c7-00a0d1d6c6b3)\n]\ninterface ITextRange2 : ITextSelection\n{\n    HRESULT GetCch([retval, out] LONG *count);\n    HRESULT GetCells([retval, out] IUnknown **cells);\n    HRESULT GetColumn([retval, out] IUnknown **column);\n    HRESULT GetCount([retval, out] LONG *count);\n    HRESULT GetDuplicate2([retval, out] ITextRange2 **range);\n    HRESULT GetFont2([retval, out] ITextFont2 **font);\n    HRESULT SetFont2([in] ITextFont2 *font);\n    HRESULT GetFormattedText2([retval, out] ITextRange2 **range);\n    HRESULT SetFormattedText2([in] ITextRange2 *range);\n    HRESULT GetGravity([retval, out] LONG *value);\n    HRESULT SetGravity([in] LONG value);\n    HRESULT GetPara2([retval, out] ITextPara2 **para);\n    HRESULT SetPara2([in] ITextPara2 *para);\n    HRESULT GetRow([retval, out] ITextRow **row);\n    HRESULT GetStartPara([retval, out] LONG *value);\n    HRESULT GetTable([retval, out] IUnknown **table);\n    HRESULT GetURL([retval, out] BSTR *url);\n    HRESULT SetURL([in] BSTR url);\n    HRESULT AddSubrange([in] LONG cp1, [in] LONG cp2, [in] LONG activate);\n    HRESULT BuildUpMath([in] LONG flags);\n    HRESULT DeleteSubrange([in] LONG first, [in] LONG lim);\n    HRESULT Find([in] ITextRange2 *range, [in] LONG count, [in] LONG flags, [out] LONG *delta);\n    HRESULT GetChar2([out] LONG *ch, [in] LONG offset);\n    HRESULT GetDropCap([out] LONG *line, [out] LONG *pos);\n    HRESULT GetInlineObject([out] LONG *type, [out] LONG *align, [out] LONG *ch,\n            [out] LONG *ch1, [out] LONG *ch2, [out] LONG *count, [out] LONG *texstyle,\n            [out] LONG *ccol, [out] LONG *level);\n    HRESULT GetProperty([in] LONG type, [out] LONG *value);\n    HRESULT GetRect([in] LONG type, [out] LONG *left, [out] LONG *top,\n            [out] LONG *right, [out] LONG *bottom, [out] LONG *hit);\n    HRESULT GetSubrange([in] LONG subrange, [out] LONG *first, [out] LONG *limit);\n    HRESULT GetText2([in] LONG flags, [out] BSTR *str);\n    HRESULT HexToUnicode();\n    HRESULT InsertTable([in] LONG col, [in] LONG row, [in] LONG autofit);\n    HRESULT Linearize([in] LONG flags);\n    HRESULT SetActiveSubrange([in] LONG anchor, [in] LONG active);\n    HRESULT SetDropCap([in] LONG line, [in] LONG pos);\n    HRESULT SetProperty([in] LONG type, [in] LONG value);\n    HRESULT SetText2([in] LONG flags, [in] BSTR str);\n    HRESULT UnicodeToHex();\n    HRESULT SetInlineObject([in] LONG type, [in] LONG align, [in] LONG ch,\n            [in] LONG ch1, [in] LONG ch2, [in] LONG count, [in] LONG texstyle,\n            [in] LONG ccol);\n    HRESULT GetMathFunctionType([in] BSTR str, [out] LONG *value);\n    HRESULT InsertImage([in] LONG width, [in] LONG height, [in] LONG ascent,\n            [in] LONG type, [in] BSTR alttext, [in] IStream *stream);\n}\n\n[\n    object,\n    uuid(c241f5e1-7206-11d8-a2c7-00a0d1d6c6b3)\n]\ninterface ITextSelection2 : ITextRange2\n{\n}\n\n\n[\n  object,\n  uuid(c241f5e0-7206-11d8-a2c7-00a0d1d6c6b3)\n]\ninterface ITextDocument2 : ITextDocument\n{\n    HRESULT GetCaretType([retval, out]LONG *value);\n    HRESULT SetCaretType([in]LONG value);\n    HRESULT GetDisplays([retval, out]ITextDisplays **displays);\n    HRESULT GetDocumentFont([retval, out]ITextFont2 **font);\n    HRESULT SetDocumentFont([in]ITextFont2 *font);\n    HRESULT GetDocumentPara([retval, out]ITextPara2 **para);\n    HRESULT SetDocumentPara([in]ITextPara2 *para);\n    HRESULT GetEastAsianFlags([retval, out]LONG *flags);\n    HRESULT GetGenerator([retval, out]BSTR *bstr);\n    HRESULT SetIMEInProgress([in]LONG value);\n    HRESULT GetNotificationMode([retval, out]LONG *mode);\n    HRESULT SetNotificationMode([in]LONG mode);\n    HRESULT GetSelection2([retval, out]ITextSelection2 **selection);\n    HRESULT GetStoryRanges2([retval, out]ITextStoryRanges2 **stories);\n    HRESULT GetTypographyOptions([retval, out]LONG *options);\n    HRESULT GetVersion([retval, out]LONG *value);\n    HRESULT GetWindow([retval, out]LONG *hwnd);\n    HRESULT AttachMsgFilter([in]IUnknown *filter);\n    HRESULT CheckTextLimit([in]LONG cch, [out]LONG  *exceed);\n    HRESULT GetCallManager([retval, out]IUnknown **manager);\n    HRESULT GetClientRect([in]LONG type, [out]LONG *left, [out]LONG *top, [out]LONG *right, [out]LONG *bottom);\n    HRESULT GetEffectColor([in]LONG index, [out]COLORREF *cr);\n    HRESULT GetImmContext([retval, out]LONG *context);\n    HRESULT GetPreferredFont([in]LONG cp, [in]LONG codepage, [in]LONG option, [in]LONG current_codepage, [in]LONG current_fontsize,\n                             [out]BSTR *bstr, [out]LONG *pitch_family, [out]LONG *new_fontsize);\n    HRESULT GetProperty([in]LONG type, [out]LONG *value);\n    HRESULT GetStrings([out]ITextStrings **strings);\n    HRESULT Notify([in]LONG notify);\n    HRESULT Range2([in]LONG cp_active, [in]LONG cp_anchor, [retval, out]ITextRange2 **range);\n    HRESULT RangeFromPoint2([in]LONG x, [in]LONG y, [in]LONG type, [retval, out]ITextRange2 **range);\n    HRESULT ReleaseCallManager([in]IUnknown *manager);\n    HRESULT ReleaseImmContext([in]LONG context);\n    HRESULT SetEffectColor([in]LONG index, [in]LONG value);\n    HRESULT SetProperty([in]LONG type, [in]LONG value);\n    HRESULT SetTypographyOptions([in]LONG options, [in]LONG mask);\n    HRESULT SysBeep();\n    HRESULT Update([in]LONG value);\n    HRESULT UpdateWindow();\n    HRESULT GetMathProperties([out]LONG *options);\n    HRESULT SetMathProperties([in]LONG options, [in]LONG mask);\n    HRESULT GetActiveStory([retval, out]ITextStory **story);\n    HRESULT SetActiveStory([in]ITextStory *story);\n    HRESULT GetMainStory([retval, out]ITextStory **story);\n    HRESULT GetNewStory([retval, out]ITextStory **story);\n    HRESULT GetStory([in]LONG index, [retval, out]ITextStory **story);\n}\n\ninterface ITextFont;\ninterface ITextPara;\n\n[\n  object,\n  uuid(8cc497c2-a1df-11ce-8098-00aa0047be5d)\n]\ninterface ITextRange : IDispatch\n{\n    HRESULT GetText([retval, out]BSTR *pbstr);\n    HRESULT SetText([in]BSTR bstr);\n    HRESULT GetChar([retval, out]LONG *pch);\n    HRESULT SetChar([in]LONG ch);\n    HRESULT GetDuplicate([retval, out]ITextRange **ppRange);\n    HRESULT GetFormattedText([retval, out]ITextRange **ppRange);\n    HRESULT SetFormattedText([in]ITextRange *pRange);\n    HRESULT GetStart([retval, out]LONG *pcpFirst);\n    HRESULT SetStart([in]LONG cpFirst);\n    HRESULT GetEnd([retval, out]LONG *pcpLim);\n    HRESULT SetEnd([in]LONG cpLim);\n    HRESULT GetFont([retval, out]ITextFont **pFont);\n    HRESULT SetFont([in]ITextFont *pFont);\n    HRESULT GetPara([retval, out]ITextPara **ppPara);\n    HRESULT SetPara([in]ITextPara *pPara);\n    HRESULT GetStoryLength([retval, out]LONG *pcch);\n    HRESULT GetStoryType([retval, out]LONG *pValue);\n    HRESULT Collapse([in]LONG bStart);\n    HRESULT Expand([in]LONG Unit, [retval, out]LONG *pDelta);\n    HRESULT GetIndex([in]LONG Unit, [retval, out]LONG *pIndex);\n    HRESULT SetIndex([in]LONG Unit, [in]LONG Index, [in]LONG Extend);\n    HRESULT SetRange([in]LONG anchor, [in]LONG active);\n    HRESULT InRange([in]ITextRange *pRange, [retval, out]LONG *pb);\n    HRESULT InStory([in]ITextRange *pRange, [retval, out]LONG *pb);\n    HRESULT IsEqual([in]ITextRange *pRange, [retval, out]LONG *pb);\n    HRESULT Select();\n    HRESULT StartOf([in]LONG Unit, [in]LONG Extend, [retval, out]LONG *pDelta);\n    HRESULT EndOf([in]LONG Unit, [in]LONG Extend, [retval, out]LONG *pDelta);\n    HRESULT Move([in]LONG Unit, [in]LONG Count, [retval, out]LONG *pDelta);\n    HRESULT MoveStart([in]LONG Unit, [in]LONG Count, [retval, out]LONG *pDelta);\n    HRESULT MoveEnd([in]LONG Unit, [in]LONG Count, [retval, out]LONG *pDelta);\n    HRESULT MoveWhile([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta);\n    HRESULT MoveStartWhile([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta);\n    HRESULT MoveEndWhile([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta);\n    HRESULT MoveUntil([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta);\n    HRESULT MoveStartUntil([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta);\n    HRESULT MoveEndUntil([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta);\n    HRESULT FindText([in]BSTR bstr, [in]LONG cch, [in]LONG Flags, [retval, out]LONG *pLength);\n    HRESULT FindTextStart([in]BSTR bstr, [in]LONG cch, [in]LONG Flags, [retval, out]LONG *pLength);\n    HRESULT FindTextEnd([in]BSTR bstr, [in]LONG cch, [in]LONG Flags, [retval, out]LONG *pLength);\n    HRESULT Delete([in]LONG Unit, [in]LONG Count, [retval, out]LONG *pDelta);\n    HRESULT Cut([out]VARIANT *pVar);\n    HRESULT Copy([out]VARIANT *pVar);\n    HRESULT Paste([in]VARIANT *pVar, [in]LONG Format);\n    HRESULT CanPaste([in]VARIANT *pVar, [in]LONG Format, [retval, out]LONG *pb);\n    HRESULT CanEdit([retval, out]LONG *pb);\n    HRESULT ChangeCase([in]LONG Type);\n    HRESULT GetPoint([in]LONG Type, [out]LONG *cx, [out]LONG *cy);\n    HRESULT SetPoint([in]LONG x, [in]LONG y, [in]LONG Type, [in]LONG Extend);\n    HRESULT ScrollIntoView([in]LONG Value);\n    HRESULT GetEmbeddedObject([retval, out]IUnknown **ppv);\n}\n\n[\n  object,\n  uuid(8cc497c1-a1df-11ce-8098-00aa0047be5d)\n]\ninterface ITextSelection : ITextRange\n{\n    HRESULT GetFlags([retval, out]LONG *pFlags);\n    HRESULT SetFlags([in]LONG Flags);\n    HRESULT GetType([retval, out]LONG *pType);\n    HRESULT MoveLeft([in]LONG Unit, [in]LONG Count, [in]LONG Extend, [retval, out]LONG *pDelta);\n    HRESULT MoveRight([in]LONG Unit, [in]LONG Count, [in]LONG Extend, [retval, out]LONG *pDelta);\n    HRESULT MoveUp([in]LONG Unit, [in]LONG Count, [in]LONG Extend, [retval, out]LONG *pDelta);\n    HRESULT MoveDown([in]LONG Unit, [in]LONG Count, [in]LONG Extend, [retval, out]LONG *pDelta);\n    HRESULT HomeKey([in]LONG Unit, [in]LONG Extend, [retval, out]LONG *pDelta);\n    HRESULT EndKey([in]LONG Unit, [in]LONG Extend, [retval, out]LONG *pDelta);\n    HRESULT TypeText([in]BSTR bstr);\n}\n\n[\n  object,\n  uuid(8cc497c3-a1df-11ce-8098-00aa0047be5d)\n]\ninterface ITextFont : IDispatch\n{\n    HRESULT GetDuplicate([retval, out]ITextFont **ppFont);\n    HRESULT SetDuplicate([in]ITextFont *pFont);\n    HRESULT CanChange([out]LONG *pB);\n    HRESULT IsEqual([in]ITextFont *pFont, [retval, out]LONG *pB);\n    HRESULT Reset([in]LONG Value);\n    HRESULT GetStyle([retval, out]LONG *pValue);\n    HRESULT SetStyle([in]LONG Value);\n    HRESULT GetAllCaps([retval, out]LONG *pValue);\n    HRESULT SetAllCaps([in]LONG Value);\n    HRESULT GetAnimation([retval, out]LONG *pValue);\n    HRESULT SetAnimation([in]LONG Value);\n    HRESULT GetBackColor([retval, out]LONG *pValue);\n    HRESULT SetBackColor([in]LONG Value);\n    HRESULT GetBold([retval, out]LONG *pValue);\n    HRESULT SetBold([in]LONG Value);\n    HRESULT GetEmboss([retval, out]LONG *pValue);\n    HRESULT SetEmboss([in]LONG Value);\n    HRESULT GetForeColor([retval, out]LONG *pValue);\n    HRESULT SetForeColor([in]LONG Value);\n    HRESULT GetHidden([retval, out]LONG *pValue);\n    HRESULT SetHidden([in]LONG Value);\n    HRESULT GetEngrave([retval, out]LONG *pValue);\n    HRESULT SetEngrave([in]LONG Value);\n    HRESULT GetItalic([retval, out]LONG *pValue);\n    HRESULT SetItalic([in]LONG Value);\n    HRESULT GetKerning([retval, out]float *pValue);\n    HRESULT SetKerning([in]float Value);\n    HRESULT GetLanguageID([retval, out]LONG *pValue);\n    HRESULT SetLanguageID([in]LONG Value);\n    HRESULT GetName([retval, out]BSTR *pValue);\n    HRESULT SetName([in]BSTR Value);\n    HRESULT GetOutline([retval, out]LONG *pValue);\n    HRESULT SetOutline([in]LONG Value);\n    HRESULT GetPosition([retval, out]float *pValue);\n    HRESULT SetPosition([in]float Value);\n    HRESULT GetProtected([retval, out]LONG *pValue);\n    HRESULT SetProtected([in]LONG Value);\n    HRESULT GetShadow([retval, out]LONG *pValue);\n    HRESULT SetShadow([in]LONG Value);\n    HRESULT GetSize([retval, out]float *pValue);\n    HRESULT SetSize([in]float Value);\n    HRESULT GetSmallCaps([retval, out]LONG *pValue);\n    HRESULT SetSmallCaps([in]LONG Value);\n    HRESULT GetSpacing([retval, out]float *pValue);\n    HRESULT SetSpacing([in]float Value);\n    HRESULT GetStrikeThrough([retval, out]LONG *pValue);\n    HRESULT SetStrikeThrough([in]LONG Value);\n    HRESULT GetSubscript([retval, out]LONG *pValue);\n    HRESULT SetSubscript([in]LONG Value);\n    HRESULT GetSuperscript([retval, out]LONG *pValue);\n    HRESULT SetSuperscript([in]LONG Value);\n    HRESULT GetUnderline([retval, out]LONG *pValue);\n    HRESULT SetUnderline([in]LONG Value);\n    HRESULT GetWeight([retval, out]LONG *pValue);\n    HRESULT SetWeight([in]LONG Value);\n}\n\n[\n  object,\n  uuid(8cc497c4-a1df-11ce-8098-00aa0047be5d)\n]\ninterface ITextPara : IDispatch\n{\n    HRESULT GetDuplicate([retval, out]ITextPara **ppPara);\n    HRESULT SetDuplicate([in]ITextPara *pPara);\n    HRESULT CanChange([out]LONG *pB);\n    HRESULT IsEqual([in]ITextPara *pPara, [retval, out]LONG *pB);\n    HRESULT Reset([in]LONG Value);\n    HRESULT GetStyle([retval, out]LONG *pValue);\n    HRESULT SetStyle([in]LONG Value);\n    HRESULT GetAlignment([retval, out]LONG *pValue);\n    HRESULT SetAlignment([in]LONG Value);\n    HRESULT GetHyphenation([retval, out]LONG *pValue);\n    HRESULT SetHyphenation([in]LONG Value);\n    HRESULT GetFirstLineIndent([retval, out]float *pValue);\n    HRESULT GetKeepTogether([retval, out]LONG *pValue);\n    HRESULT SetKeepTogether([in]LONG Value);\n    HRESULT GetKeepWithNext([retval, out]LONG *pValue);\n    HRESULT SetKeepWithNext([in]LONG Value);\n    HRESULT GetLeftIndent([retval, out]float *pValue);\n    HRESULT GetLineSpacing([retval, out]float *pValue);\n    HRESULT GetLineSpacingRule([retval, out]LONG *pValue);\n    HRESULT GetListAlignment([retval, out]LONG *pValue);\n    HRESULT SetListAlignment([in]LONG Value);\n    HRESULT GetListLevelIndex([retval, out]LONG *pValue);\n    HRESULT SetListLevelIndex([in]LONG Value);\n    HRESULT GetListStart([retval, out]LONG *pValue);\n    HRESULT SetListStart([in]LONG Value);\n    HRESULT GetListTab([retval, out]float *pValue);\n    HRESULT SetListTab([in]float Value);\n    HRESULT GetListType([retval, out]LONG *pValue);\n    HRESULT SetListType([in]LONG Value);\n    HRESULT GetNoLineNumber([retval, out]LONG *pValue);\n    HRESULT SetNoLineNumber([in]LONG Value);\n    HRESULT GetPageBreakBefore([retval, out]LONG *pValue);\n    HRESULT SetPageBreakBefore([in]LONG Value);\n    HRESULT GetRightIndent([retval, out]float *pValue);\n    HRESULT SetRightIndent([in]float Value);\n    HRESULT SetIndents([in]float StartIndent, [in]float LeftIndent, [in]float RightIndent);\n    HRESULT SetLineSpacing([in]LONG LineSpacingRule, [in]float LineSpacing);\n    HRESULT GetSpaceAfter([retval, out]float *pValue);\n    HRESULT SetSpaceAfter([in]float Value);\n    HRESULT GetSpaceBefore([retval, out]float *pValue);\n    HRESULT SetSpaceBefore([in]float Value);\n    HRESULT GetWidowControl([retval, out]LONG *pValue);\n    HRESULT SetWidowControl([in]LONG Value);\n    HRESULT GetTabCount([retval, out]LONG *pCount);\n    HRESULT AddTab([in]float tbPos, [in]LONG tbAlign, [in]LONG tbLeader);\n    HRESULT ClearAllTabs();\n    HRESULT DeleteTab([in]float tbPos);\n    HRESULT GetTab([in]LONG iTab, [out]float *ptbPos, [out]LONG *ptbAlign, [out]LONG *ptbLeader);\n}\n\n[\n  object,\n  uuid(8cc497c5-a1df-11ce-8098-00aa0047be5d)\n]\ninterface ITextStoryRanges : IDispatch\n{\n    HRESULT _NewEnum([retval, out]IUnknown **ppUnkEnum);\n    HRESULT Item([in]LONG Index, [retval, out]ITextRange **ppRange);\n    HRESULT GetCount([retval, out]LONG *pCount);\n}\n"
  },
  {
    "path": "wine/windows/traffic.h",
    "content": "/*\n * TRAFFIC definitions\n *\n * Copyright (c) 2009 Stefan Leichter\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_TRAFFIC_H\n#define __WINE_TRAFFIC_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\ntypedef VOID (CALLBACK * TCI_ADD_FLOW_COMPLETE_HANDLER)(HANDLE, ULONG);\ntypedef VOID (CALLBACK * TCI_DEL_FLOW_COMPLETE_HANDLER)(HANDLE, ULONG);\ntypedef VOID (CALLBACK * TCI_MOD_FLOW_COMPLETE_HANDLER)(HANDLE, ULONG);\ntypedef VOID (CALLBACK * TCI_NOTIFY_HANDLER)\n                              (HANDLE,HANDLE,ULONG,HANDLE,ULONG,PVOID);\n\ntypedef struct _TCI_CLIENT_FUNC_LIST\n{\n    TCI_NOTIFY_HANDLER ClNotifyHandler;\n    TCI_ADD_FLOW_COMPLETE_HANDLER ClAddFlowCompleteHandler;\n    TCI_MOD_FLOW_COMPLETE_HANDLER ClModifyFlowCompleteHandler;\n    TCI_DEL_FLOW_COMPLETE_HANDLER ClDeleteFlowCompleteHandler;\n} TCI_CLIENT_FUNC_LIST, *PTCI_CLIENT_FUNC_LIST;\n\nULONG WINAPI TcRegisterClient(ULONG,HANDLE,PTCI_CLIENT_FUNC_LIST,PHANDLE);\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif /* __WINE_TRAFFIC_H */\n"
  },
  {
    "path": "wine/windows/transact.idl",
    "content": "/*\n * Copyright (C) 2013 Daniel Jeliński\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\n\ncpp_quote(\"#include <winerror.h>\")\n\ninterface ITransaction;\ninterface ITransactionCloner;\ninterface ITransaction2;\ninterface ITransactionDispenser;\ninterface ITransactionOptions;\ninterface ITransactionOutcomeEvents;\ninterface ITmNodeName;\n\ntypedef struct BOID {\n    byte rgb[16];\n} BOID;\n\ncpp_quote(\"#ifndef MAX_TRAN_DESC_DEFINED\")\ncpp_quote(\"#define MAX_TRAN_DESC_DEFINED\")\ntypedef enum TX_MISC_CONSTANTS {\n    MAX_TRAN_DESC = 40\n} TX_MISC_CONSTANTS;\ncpp_quote(\"#endif\")\n\ntypedef BOID XACTUOW;\ntypedef LONG ISOLEVEL;\n\ntypedef enum ISOLATIONLEVEL {\n    ISOLATIONLEVEL_UNSPECIFIED = 0xffffffff,\n    ISOLATIONLEVEL_CHAOS = 0x10,\n    ISOLATIONLEVEL_READUNCOMMITTED = 0x100,\n    ISOLATIONLEVEL_BROWSE = 0x100,\n    ISOLATIONLEVEL_CURSORSTABILITY = 0x1000,\n    ISOLATIONLEVEL_READCOMMITTED = 0x1000,\n    ISOLATIONLEVEL_REPEATABLEREAD = 0x10000,\n    ISOLATIONLEVEL_SERIALIZABLE = 0x100000,\n    ISOLATIONLEVEL_ISOLATED = 0x100000\n} ISOLATIONLEVEL;\n\ntypedef struct XACTTRANSINFO {\n    XACTUOW uow;\n    ISOLEVEL isoLevel;\n    ULONG isoFlags;\n    DWORD grfTCSupported;\n    DWORD grfRMSupported;\n    DWORD grfTCSupportedRetaining;\n    DWORD grfRMSupportedRetaining;\n} XACTTRANSINFO;\n\ntypedef struct XACTSTATS {\n    ULONG cOpen;\n    ULONG cCommitting;\n    ULONG cCommitted;\n    ULONG cAborting;\n    ULONG cAborted;\n    ULONG cInDoubt;\n    ULONG cHeuristicDecision;\n    FILETIME timeTransactionsUp;\n} XACTSTATS;\n\ntypedef enum ISOFLAG {\n    ISOFLAG_RETAIN_COMMIT_DC = 1,\n    ISOFLAG_RETAIN_COMMIT = 2,\n    ISOFLAG_RETAIN_COMMIT_NO = 3,\n    ISOFLAG_RETAIN_ABORT_DC = 4,\n    ISOFLAG_RETAIN_ABORT = 8,\n    ISOFLAG_RETAIN_ABORT_NO = 12,\n    ISOFLAG_RETAIN_DONTCARE = ISOFLAG_RETAIN_COMMIT_DC | ISOFLAG_RETAIN_ABORT_DC,\n    ISOFLAG_RETAIN_BOTH = ISOFLAG_RETAIN_COMMIT | ISOFLAG_RETAIN_ABORT,\n    ISOFLAG_RETAIN_NONE = ISOFLAG_RETAIN_COMMIT_NO | ISOFLAG_RETAIN_ABORT_NO,\n    ISOFLAG_OPTIMISTIC = 16,\n    ISOFLAG_READONLY = 32\n} ISOFLAG;\n\ntypedef enum XACTTC {\n    XACTTC_NONE = 0,\n    XACTTC_SYNC_PHASEONE = 1,\n    XACTTC_SYNC_PHASETWO = 2,\n    XACTTC_SYNC = 2,\n    XACTTC_ASYNC_PHASEONE = 4,\n    XACTTC_ASYNC = 4\n} XACTTC;\n\ntypedef enum XACTRM {\n    XACTRM_OPTIMISTICLASTWINS = 1,\n    XACTRM_NOREADONLYPREPARES\n} XACTRM;\n\ntypedef enum XACTCONST {\n    XACTCONST_TIMEOUTINFINITE\n} XACTCONST;\n\ntypedef enum XACTHEURISTIC {\n    XACTHEURISTIC_ABORT = 1,\n    XACTHEURISTIC_COMMIT,\n    XACTHEURISTIC_DAMAGE,\n    XACTHEURISTIC_DANGER\n} XACTHEURISTIC;\n\ntypedef enum XACTSTAT {\n    XACTSTAT_NONE = 0,\n    XACTSTAT_OPENNORMAL = 0x1,\n    XACTSTAT_OPENREFUSED = 0x2,\n    XACTSTAT_PREPARING = 0x4,\n    XACTSTAT_PREPARED = 0x8,\n    XACTSTAT_PREPARERETAINING = 0x10,\n    XACTSTAT_PREPARERETAINED = 0x20,\n    XACTSTAT_COMMITTING = 0x40,\n    XACTSTAT_COMMITRETAINING = 0x80,\n    XACTSTAT_ABORTING = 0x100,\n    XACTSTAT_ABORTED = 0x200,\n    XACTSTAT_COMMITTED = 0x400,\n    XACTSTAT_HEURISTIC_ABORT = 0x800,\n    XACTSTAT_HEURISTIC_COMMIT = 0x1000,\n    XACTSTAT_HEURISTIC_DAMAGE = 0x2000,\n    XACTSTAT_HEURISTIC_DANGER = 0x4000,\n    XACTSTAT_FORCED_ABORT = 0x8000,\n    XACTSTAT_FORCED_COMMIT = 0x10000,\n    XACTSTAT_INDOUBT = 0x20000,\n    XACTSTAT_CLOSED = 0x40000,\n    XACTSTAT_OPEN = 0x3,\n    XACTSTAT_NOTPREPARED = 0x7ffc3,\n    XACTSTAT_ALL = 0x7ffff\n} XACTSTAT;\n\ntypedef struct XACTOPT {\n    ULONG ulTimeout;\n    char szDescription[40 ];\n} XACTOPT;\n\n[\n    object,\n    uuid(0fb15084-af41-11ce-bd2b-204c4f4f5020)\n]\ninterface ITransaction : IUnknown {\n    HRESULT Commit([in] BOOL fRetaining,\n                   [in] DWORD grfTC,\n                   [in] DWORD grfRM);\n    HRESULT Abort([in, unique] BOID *pboidReason,\n                  [in] BOOL fRetaining,\n                  [in] BOOL fAsync);\n    HRESULT GetTransactionInfo([out] XACTTRANSINFO *pinfo);\n}\n\n[\n    object,\n    uuid(02656950-2152-11d0-944C-00A0C905416E)\n]\ninterface ITransactionCloner : ITransaction {\n    HRESULT CloneWithCommitDisabled([out] ITransaction **ppITransaction);\n}\n\n[\n    object,\n    uuid(34021548-0065-11d3-bac1-00c04f797be2)\n]\ninterface ITransaction2 : ITransactionCloner {\n    HRESULT GetTransactionInfo2([out] XACTTRANSINFO *pinfo);\n}\n\n[\n    object,\n    uuid(3A6AD9E1-23B9-11cf-AD60-00AA00A74CCD)\n]\ninterface ITransactionDispenser : IUnknown {\n    HRESULT GetOptionsObject([out] ITransactionOptions **ppOptions);\n    HRESULT BeginTransaction([in, unique] IUnknown *punkOuter,\n                             [in] ISOLEVEL isoLevel,\n                             [in] ULONG isoFlags,\n                             [in, unique] ITransactionOptions *pOptions,\n                             [out] ITransaction **ppTransaction);\n}\n\n[\n    object,\n    uuid(3A6AD9E0-23B9-11cf-AD60-00AA00A74CCD)\n]\ninterface ITransactionOptions : IUnknown {\n    HRESULT SetOptions([in] XACTOPT *pOptions);\n    HRESULT GetOptions([in, out] XACTOPT *pOptions);\n}\n\n[\n    object,\n    uuid(3A6AD9E2-23B9-11cf-AD60-00AA00A74CCD)\n]\ninterface ITransactionOutcomeEvents : IUnknown {\n    HRESULT Committed([in] BOOL fRetaining,\n                      [in, unique] XACTUOW *pNewUOW,\n                      [in] HRESULT hr);\n    HRESULT Aborted([in, unique] BOID *pboidReason,\n                    [in] BOOL fRetaining,\n                    [in, unique] XACTUOW *pNewUOW,\n                    [in] HRESULT hr);\n    HRESULT HeuristicDecision([in] DWORD dwDecision,\n                              [in, unique] BOID *pboidReason,\n                              [in] HRESULT hr);\n    HRESULT Indoubt(void);\n}\n\n[\n    object,\n    uuid(30274F88-6EE4-474e-9B95-7807BC9EF8CF)\n]\ninterface ITmNodeName : IUnknown {\n    HRESULT GetNodeNameSize([out] ULONG *pcbNodeNameSize);\n    HRESULT GetNodeName([in] ULONG cbNodeNameBufferSize,\n                        [in, out] LPWSTR pNodeNameBuffer);\n}\n"
  },
  {
    "path": "wine/windows/twain.h",
    "content": "/* ======================================================================== *\\\n\n  Copyright (C) 1991, 1992 TWAIN Working Group: Aldus, Caere, Eastman-Kodak,\n  Hewlett-Packard and Logitech Corporations.  All rights reserved.\n\n  Copyright (C) 1997 TWAIN Working Group: Bell+Howell, Canon, DocuMagix,\n  Fujitsu, Genoa Technology, Hewlett-Packard, Kofax Imaging Products, and\n  Ricoh Corporation.  All rights reserved.\n\n  Copyright (C) 1998 TWAIN Working Group: Adobe Systems Incorporated,\n  Canon Information Systems, Eastman Kodak Company,\n  Fujitsu Computer Products of America, Genoa Technology,\n  Hewlett-Packard Company, Intel Corporation, Kofax Image Products,\n  JFL Peripheral Solutions Inc., Ricoh Corporation, and Xerox Corporation.\n  All rights reserved.\n\n  TWAIN.h -  This is the definitive include file for applications and\n          data sources written to the TWAIN specification.\n          It defines constants, data structures, messages etc.\n          for the public interface to TWAIN.\n\n  Revision History:\n    version 1.0, March 6, 1992.  TWAIN 1.0.\n    version 1.1, January 1993.   Tech Notes 1.1\n    version 1.5, June 1993.      Specification Update 1.5\n                                 Change DC to TW\n                                 Change filename from DC.H to TWAIN.H\n    version 1.5, July 1993.      Remove spaces from country identifiers\n\n    version 1.7, July 1997       Added Capabilities and data structure for\n                                 document imaging and digital cameras.\n                                 KHL.\n    version 1.7, July 1997       Inserted Borland compatible structure packing\n                                 directives provided by Mentor.  JMH\n    version 1.7, Aug 1997        Expanded file tabs to spaces.\n                                 NOTE: future authors should be sure to have\n                                 their editors set to automatically expand tabs\n                                 to spaces (original tab setting was 4 spaces).\n    version 1.7, Sept 1997       Added job control values\n                                 Added return codes\n    version 1.7, Sept 1997       changed definition of pRGBRESPONSE to\n                                 pTW_RGBRESPONSE\n    version 1.7  Aug 1998        Added missing TWEI_BARCODEROTATION values\n                                 TWBCOR_ types JMH\n    version 1.8  August 1998     Added new types and definitions required\n                                 for 1.8 Specification JMH\n    version 1.8  January 1999    Changed search mode from SRCH_ to TWBD_ as\n                                 in 1.8 Specification, added TWBT_MAXICODE\tJMH\n    version 1.8  January 1999    Removed undocumented duplicate AUTO<cap> JMH\n\\* ======================================================================== */\n\n#ifndef TWAIN\n#define TWAIN\n\n#include <stdarg.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n\n/* The Twain structures must be packed on 2 byte alignment */\n#include \"pshpack2.h\"\n\n#undef FAR\n#define FAR\n\n/****************************************************************************\n * TWAIN Version                                                            *\n ****************************************************************************/\n#define TWON_PROTOCOLMINOR   8        /* Changed for Version 1.8            */\n#define TWON_PROTOCOLMAJOR   1\n\n/****************************************************************************\n * Platform Dependent Definitions and Typedefs                              *\n ****************************************************************************/\n\n/* Define one of the following, depending on the platform */\n/* #define _MAC_   */\n/* #define _UNIX_  */\n#define _MSWIN_\n\n#ifdef  _MSWIN_\n    typedef HANDLE         TW_HANDLE;\n    typedef LPVOID         TW_MEMREF;\n    typedef BYTE         * HPBYTE;\n    typedef void         * HPVOID;\n#endif  /* _MSWIN_ */\n\n#ifdef  _MAC_\n#define PASCAL         pascal\n#define FAR\n    typedef Handle         TW_HANDLE;\n    typedef char          *TW_MEMREF;\n#endif  /* _MAC_ */\n\n#ifdef  _UNIX_\n/*    #define PASCAL         pascal */\n#define FAR\n    typedef unsigned char *TW_HANDLE;\n    typedef unsigned char *TW_MEMREF;\n#endif  /* _UNIX_ */\n\n/****************************************************************************\n * Type Definitions                                                         *\n ****************************************************************************/\n\n/* String types. These include room for the strings and a NULL char,     *\n * or, on the Mac, a length byte followed by the string.                 *\n * TW_STR255 must hold less than 256 chars so length fits in first byte. */\ntypedef char    TW_STR32[34],     FAR *pTW_STR32;\ntypedef char    TW_STR64[66],     FAR *pTW_STR64;\ntypedef char    TW_STR128[130],   FAR *pTW_STR128;\ntypedef char    TW_STR255[256],   FAR *pTW_STR255;\n\n/* Numeric types. */\ntypedef char           TW_INT8,   FAR *pTW_INT8;\ntypedef short          TW_INT16,  FAR *pTW_INT16;\ntypedef LONG           TW_INT32,  FAR *pTW_INT32;\ntypedef unsigned char  TW_UINT8,  FAR *pTW_UINT8;\ntypedef unsigned short TW_UINT16, FAR *pTW_UINT16;\ntypedef ULONG          TW_UINT32, FAR *pTW_UINT32;\ntypedef unsigned short TW_BOOL,   FAR *pTW_BOOL;\n\n/* Fixed point structure type. */\ntypedef struct {\n    TW_INT16     Whole;        /* maintains the sign */\n    TW_UINT16    Frac;\n} TW_FIX32,  FAR *pTW_FIX32;\n\n/****************************************************************************\n * Structure Definitions                                                    *\n ****************************************************************************/\n\n/* No DAT needed. */\ntypedef struct {\n   TW_FIX32   X;\n   TW_FIX32   Y;\n   TW_FIX32   Z;\n} TW_CIEPOINT, FAR * pTW_CIEPOINT;\n\n/* No DAT needed. */\ntypedef struct {\n   TW_FIX32   StartIn;\n   TW_FIX32   BreakIn;\n   TW_FIX32   EndIn;\n   TW_FIX32   StartOut;\n   TW_FIX32   BreakOut;\n   TW_FIX32   EndOut;\n   TW_FIX32   Gamma;\n   TW_FIX32   SampleCount;  /* if =0 use the gamma */\n} TW_DECODEFUNCTION, FAR * pTW_DECODEFUNCTION;\n\n/* No DAT needed. */\ntypedef struct {\n   TW_UINT8    Index;    /* Value used to index into the color table. */\n   TW_UINT8    Channel1; /* First  tri-stimulus value (e.g Red)       */\n   TW_UINT8    Channel2; /* Second tri-stimulus value (e.g Green)     */\n   TW_UINT8    Channel3; /* Third  tri-stimulus value (e.g Blue)      */\n} TW_ELEMENT8, FAR * pTW_ELEMENT8;\n\n/* No DAT.  Defines a frame rectangle in ICAP_UNITS coordinates. */\ntypedef struct {\n   TW_FIX32   Left;\n   TW_FIX32   Top;\n   TW_FIX32   Right;\n   TW_FIX32   Bottom;\n} TW_FRAME, FAR * pTW_FRAME;\n\n/* No DAT needed.  Used to manage memory buffers. */\ntypedef struct {\n   TW_UINT32  Flags;  /* Any combination of the TWMF_ constants.           */\n   TW_UINT32  Length; /* Number of bytes stored in buffer TheMem.          */\n   TW_MEMREF  TheMem; /* Pointer or handle to the allocated memory buffer. */\n} TW_MEMORY, FAR * pTW_MEMORY;\n\n/* No DAT needed. */\ntypedef struct {\n   TW_DECODEFUNCTION   Decode[3];\n   TW_FIX32            Mix[3][3];\n} TW_TRANSFORMSTAGE, FAR * pTW_TRANSFORMSTAGE;\n\n/* No DAT needed.  Describes version of software currently running. */\ntypedef struct {\n   TW_UINT16  MajorNum;  /* Major revision number of the software. */\n   TW_UINT16  MinorNum;  /* Incremental revision number of the software. */\n   TW_UINT16  Language;  /* e.g. TWLG_SWISSFRENCH */\n   TW_UINT16  Country;   /* e.g. TWCY_SWITZERLAND */\n   TW_STR32   Info;      /* e.g. \"1.0b3 Beta release\" */\n} TW_VERSION, FAR * pTW_VERSION;\n\n/* TWON_ARRAY. Container for array of values (a simplified TW_ENUMERATION) */\ntypedef struct {\n   TW_UINT16  ItemType;\n   TW_UINT32  NumItems;    /* How many items in ItemList           */\n   TW_UINT8   ItemList[1]; /* Array of ItemType values starts here */\n} TW_ARRAY, FAR * pTW_ARRAY;\n\n/* TWON_ENUMERATION. Container for a collection of values. */\ntypedef struct {\n   TW_UINT16  ItemType;\n   TW_UINT32  NumItems;     /* How many items in ItemList                 */\n   TW_UINT32  CurrentIndex; /* Current value is in ItemList[CurrentIndex] */\n   TW_UINT32  DefaultIndex; /* Powerup value is in ItemList[DefaultIndex] */\n   TW_UINT8   ItemList[1];  /* Array of ItemType values starts here       */\n} TW_ENUMERATION, FAR * pTW_ENUMERATION;\n\n/* TWON_ONEVALUE. Container for one value. */\ntypedef struct {\n   TW_UINT16  ItemType;\n   TW_UINT32  Item;\n} TW_ONEVALUE, FAR * pTW_ONEVALUE;\n\n/* TWON_RANGE. Container for a range of values. */\ntypedef struct {\n   TW_UINT16  ItemType;\n   TW_UINT32  MinValue;     /* Starting value in the range.           */\n   TW_UINT32  MaxValue;     /* Final value in the range.              */\n   TW_UINT32  StepSize;     /* Increment from MinValue to MaxValue.   */\n   TW_UINT32  DefaultValue; /* Power-up value.                        */\n   TW_UINT32  CurrentValue; /* The value that is currently in effect. */\n} TW_RANGE, FAR * pTW_RANGE;\n\n/* DAT_CAPABILITY. Used by application to get/set capability from/in a data source. */\ntypedef struct {\n   TW_UINT16  Cap; /* id of capability to set or get, e.g. CAP_BRIGHTNESS */\n   TW_UINT16  ConType; /* TWON_ONEVALUE, _RANGE, _ENUMERATION or _ARRAY   */\n   TW_HANDLE  hContainer; /* Handle to container of type Dat              */\n} TW_CAPABILITY, FAR * pTW_CAPABILITY;\n\n/* DAT_CIECOLOR. */\ntypedef struct {\n   TW_UINT16           ColorSpace;\n   TW_INT16            LowEndian;\n   TW_INT16            DeviceDependent;\n   TW_INT32            VersionNumber;\n   TW_TRANSFORMSTAGE   StageABC;\n   TW_TRANSFORMSTAGE   StageLMN;\n   TW_CIEPOINT         WhitePoint;\n   TW_CIEPOINT         BlackPoint;\n   TW_CIEPOINT         WhitePaper;\n   TW_CIEPOINT         BlackInk;\n   TW_FIX32            Samples[1];\n} TW_CIECOLOR, FAR * pTW_CIECOLOR;\n\n/* DAT_EVENT. For passing events down from the application to the DS. */\ntypedef struct {\n   TW_MEMREF  pEvent;    /* Windows pMSG or Mac pEvent.                 */\n   TW_UINT16  TWMessage; /* TW msg from data source, e.g. MSG_XFERREADY */\n} TW_EVENT, FAR * pTW_EVENT;\n\n/* DAT_GRAYRESPONSE */\ntypedef struct {\n   TW_ELEMENT8         Response[1];\n} TW_GRAYRESPONSE, FAR * pTW_GRAYRESPONSE;\n\n/* DAT_IDENTITY. Identifies the program/library/code resource. */\ntypedef struct {\n   TW_UINT32  Id;              /* Unique number.  In Windows, application hWnd      */\n   TW_VERSION Version;         /* Identifies the piece of code              */\n   TW_UINT16  ProtocolMajor;   /* Application and DS must set to TWON_PROTOCOLMAJOR */\n   TW_UINT16  ProtocolMinor;   /* Application and DS must set to TWON_PROTOCOLMINOR */\n   TW_UINT32  SupportedGroups; /* Bit field OR combination of DG_ constants */\n   TW_STR32   Manufacturer;    /* Manufacturer name, e.g. \"Hewlett-Packard\" */\n   TW_STR32   ProductFamily;   /* Product family name, e.g. \"ScanJet\"       */\n   TW_STR32   ProductName;     /* Product name, e.g. \"ScanJet Plus\"         */\n} TW_IDENTITY, FAR * pTW_IDENTITY;\n\n/* DAT_IMAGEINFO. Application gets detailed image info from DS with this. */\ntypedef struct {\n   TW_FIX32   XResolution;      /* Resolution in the horizontal             */\n   TW_FIX32   YResolution;      /* Resolution in the vertical               */\n   TW_INT32   ImageWidth;       /* Columns in the image, -1 if unknown by DS*/\n   TW_INT32   ImageLength;      /* Rows in the image, -1 if unknown by DS   */\n   TW_INT16   SamplesPerPixel;  /* Number of samples per pixel, 3 for RGB   */\n   TW_INT16   BitsPerSample[8]; /* Number of bits for each sample           */\n   TW_INT16   BitsPerPixel;     /* Number of bits for each padded pixel     */\n   TW_BOOL    Planar;           /* True if Planar, False if chunky          */\n   TW_INT16   PixelType;        /* How to interp data; photo interp (TWPT_) */\n   TW_UINT16  Compression;      /* How the data is compressed (TWCP_xxxx)   */\n} TW_IMAGEINFO, FAR * pTW_IMAGEINFO;\n\n/* DAT_IMAGELAYOUT. Provides image layout information in current units. */\ntypedef struct {\n   TW_FRAME   Frame;          /* Frame coords within larger document */\n   TW_UINT32  DocumentNumber;\n   TW_UINT32  PageNumber;     /* Reset when you go to next document  */\n   TW_UINT32  FrameNumber;    /* Reset when you go to next page      */\n} TW_IMAGELAYOUT, FAR * pTW_IMAGELAYOUT;\n\n/* DAT_IMAGEMEMXFER. Used to pass image data (e.g. in strips) from DS to application.*/\ntypedef struct {\n   TW_UINT16  Compression;  /* How the data is compressed                */\n   TW_UINT32  BytesPerRow;  /* Number of bytes in a row of data          */\n   TW_UINT32  Columns;      /* How many columns                          */\n   TW_UINT32  Rows;         /* How many rows                             */\n   TW_UINT32  XOffset;      /* How far from the side of the image        */\n   TW_UINT32  YOffset;      /* How far from the top of the image         */\n   TW_UINT32  BytesWritten; /* How many bytes written in Memory          */\n   TW_MEMORY  Memory;       /* Mem struct used to pass actual image data */\n} TW_IMAGEMEMXFER, FAR * pTW_IMAGEMEMXFER;\n\n/* Changed in 1.1: QuantTable, HuffmanDC, HuffmanAC TW_MEMREF -> TW_MEMORY  */\n/* DAT_JPEGCOMPRESSION. Based on JPEG Draft International Std, ver 10918-1. */\ntypedef struct {\n   TW_UINT16   ColorSpace;       /* One of the TWPT_xxxx values                */\n   TW_UINT32   SubSampling;      /* Two word \"array\" for subsampling values    */\n   TW_UINT16   NumComponents;    /* Number of color components in image        */\n   TW_UINT16   RestartFrequency; /* Frequency of restart marker codes in MDU's */\n   TW_UINT16   QuantMap[4];      /* Mapping of components to QuantTables       */\n   TW_MEMORY   QuantTable[4];    /* Quantization tables                        */\n   TW_UINT16   HuffmanMap[4];    /* Mapping of components to Huffman tables    */\n   TW_MEMORY   HuffmanDC[2];     /* DC Huffman tables                          */\n   TW_MEMORY   HuffmanAC[2];     /* AC Huffman tables                          */\n} TW_JPEGCOMPRESSION, FAR * pTW_JPEGCOMPRESSION;\n\n/* DAT_PALETTE8. Color palette when TWPT_PALETTE pixels xfer'd in mem buf. */\ntypedef struct {\n   TW_UINT16    NumColors;   /* Number of colors in the color table.  */\n   TW_UINT16    PaletteType; /* TWPA_xxxx, specifies type of palette. */\n   TW_ELEMENT8  Colors[256]; /* Array of palette values starts here.  */\n} TW_PALETTE8, FAR * pTW_PALETTE8;\n\n/* DAT_PENDINGXFERS. Used with MSG_ENDXFER to indicate additional data. */\ntypedef struct {\n   TW_UINT16 Count;\n   union {\n      TW_UINT32 EOJ;\n      TW_UINT32 Reserved;\n   } u;\n} TW_PENDINGXFERS, FAR *pTW_PENDINGXFERS;\n\n/* DAT_RGBRESPONSE */\ntypedef struct {\n   TW_ELEMENT8         Response[1];\n} TW_RGBRESPONSE, FAR * pTW_RGBRESPONSE;\n\n/* DAT_SETUPFILEXFER. Sets up DS to application data transfer via a file. */\ntypedef struct {\n   TW_STR255 FileName;\n   TW_UINT16 Format;   /* Any TWFF_ constant */\n   TW_INT16  VRefNum;  /* Used for Mac only  */\n} TW_SETUPFILEXFER, FAR * pTW_SETUPFILEXFER;\n\n/* DAT_SETUPMEMXFER. Sets up DS to application data transfer via a memory buffer. */\ntypedef struct {\n   TW_UINT32 MinBufSize;\n   TW_UINT32 MaxBufSize;\n   TW_UINT32 Preferred;\n} TW_SETUPMEMXFER, FAR * pTW_SETUPMEMXFER;\n\n/* DAT_STATUS. Application gets detailed status info from a data source with this. */\ntypedef struct {\n   TW_UINT16  ConditionCode; /* Any TWCC_ constant     */\n   TW_UINT16  Reserved;      /* Future expansion space */\n} TW_STATUS, FAR * pTW_STATUS;\n\n/* DAT_USERINTERFACE. Coordinates UI between application and data source. */\ntypedef struct {\n   TW_BOOL    ShowUI;  /* TRUE if DS should bring up its UI           */\n   TW_BOOL    ModalUI; /* For Mac only - true if the DS's UI is modal */\n   TW_HANDLE  hParent; /* For windows only - Application window handle        */\n} TW_USERINTERFACE, FAR * pTW_USERINTERFACE;\n\n/* SDH - 03/21/95 - TWUNK */\n/* DAT_TWUNKIDENTITY. Provides DS identity and 'other' information necessary */\n/*                    across thunk link. */\ntypedef struct {\n   TW_IDENTITY identity;        /* Identity of data source.                 */\n   TW_STR255   dsPath;          /* Full path and file name of data source.  */\n} TW_TWUNKIDENTITY, FAR * pTW_TWUNKIDENTITY;\n\n/* SDH - 03/21/95 - TWUNK */\n/* Provides DS_Entry parameters over thunk link. */\ntypedef struct\n{\n    TW_INT8     destFlag;       /* TRUE if dest is not NULL                 */\n    TW_IDENTITY dest;           /* Identity of data source (if used)        */\n    TW_INT32    dataGroup;      /* DSM_Entry dataGroup parameter            */\n    TW_INT16    dataArgType;    /* DSM_Entry dataArgType parameter          */\n    TW_INT16    message;        /* DSM_Entry message parameter              */\n    TW_INT32    pDataSize;      /* Size of pData (0 if NULL)                */\n    /*  TW_MEMREF   pData; */   /* Based on implementation specifics, a     */\n                                /* pData parameter makes no sense in this   */\n                                /* structure, but data (if provided) will be*/\n                                /* appended in the data block.              */\n   } TW_TWUNKDSENTRYPARAMS, FAR * pTW_TWUNKDSENTRYPARAMS;\n\n/* SDH - 03/21/95 - TWUNK */\n/* Provides DS_Entry results over thunk link. */\ntypedef struct\n{\n    TW_UINT16   returnCode;     /* Thunker DsEntry return code.             */\n    TW_UINT16   conditionCode;  /* Thunker DsEntry condition code.          */\n    TW_INT32    pDataSize;      /* Size of pData (0 if NULL)                */\n    /*  TW_MEMREF   pData; */   /* Based on implementation specifics, a     */\n                                /* pData parameter makes no sense in this   */\n                                /* structure, but data (if provided) will be*/\n                                /* appended in the data block.              */\n} TW_TWUNKDSENTRYRETURN, FAR * pTW_TWUNKDSENTRYRETURN;\n\n/* WJD - 950818 */\n/* Added for 1.6 Specification */\n/* TWAIN 1.6 CAP_SUPPORTEDCAPSEXT structure */\ntypedef struct\n{\n    TW_UINT16 Cap;   /* Which CAP/ICAP info is relevant to */\n    TW_UINT16 Properties;  /* Messages this CAP/ICAP supports */\n} TW_CAPEXT, FAR * pTW_CAPEXT;\n\n/* ----------------------------------------------------------------------- *\\\n\n  Version 1.7:      Added Following data structure for Document Imaging\n  July 1997         Enhancement.\n  KHL               TW_CUSTOMDSDATA --  For Saving and Restoring Source's\n                                        state.\n                    TW_INFO         --  Each attribute for extended image\n                                        information.\n                    TW_EXTIMAGEINFO --  Extended image information structure.\n\n\\* ----------------------------------------------------------------------- */\n\ntypedef struct {\n    TW_UINT32  InfoLength;     /* Length of Information in bytes.  */\n    TW_HANDLE  hData;          /* Place holder for data, DS Allocates */\n}TW_CUSTOMDSDATA, FAR *pTW_CUSTOMDSDATA;\n\ntypedef struct {\n    TW_UINT16   InfoID;\n    TW_UINT16   ItemType;\n    TW_UINT16   NumItems;\n    TW_UINT16   CondCode;\n    TW_UINT32   Item;\n}TW_INFO, FAR* pTW_INFO;\n\ntypedef struct {\n    TW_UINT32   NumInfos;\n    TW_INFO     Info[1];\n}TW_EXTIMAGEINFO, FAR* pTW_EXTIMAGEINFO;\n\n/* Added 1.8 */\n\n/* DAT_AUDIOINFO, information about audio data */\ntypedef struct {\n   TW_STR255  Name;       /* name of audio data */\n   TW_UINT32  Reserved;   /* reserved space */\n} TW_AUDIOINFO, FAR * pTW_AUDIOINFO;\n\n/* DAT_DEVICEEVENT, information about events */\ntypedef struct {\n   TW_UINT32  Event;                  /* One of the TWDE_xxxx values. */\n   TW_STR255  DeviceName;             /* The name of the device that generated the event */\n   TW_UINT32  BatteryMinutes;         /* Battery Minutes Remaining    */\n   TW_INT16   BatteryPercentage;      /* Battery Percentage Remaining */\n   TW_INT32   PowerSupply;            /* Power Supply                 */\n   TW_FIX32   XResolution;            /* Resolution                   */\n   TW_FIX32   YResolution;            /* Resolution                   */\n   TW_UINT32  FlashUsed2;             /* Flash Used2                  */\n   TW_UINT32  AutomaticCapture;       /* Automatic Capture            */\n   TW_UINT32  TimeBeforeFirstCapture; /* Automatic Capture            */\n   TW_UINT32  TimeBetweenCaptures;    /* Automatic Capture            */\n} TW_DEVICEEVENT, FAR * pTW_DEVICEEVENT;\n\n/* DAT_FILESYSTEM, information about TWAIN file system */\ntypedef struct {\n   /* DG_CONTROL / DAT_FILESYSTEM / MSG_xxxx fields     */\n   TW_STR255  InputName; /* The name of the input or source file */\n   TW_STR255  OutputName; /* The result of an operation or the name of a destination file */\n   TW_MEMREF  Context; /* Source specific data used to remember state information */\n   /* DG_CONTROL / DAT_FILESYSTEM / MSG_DELETE field    */\n   int        Recursive; /* recursively delete all sub-directories */\n   /* DG_CONTROL / DAT_FILESYSTEM / MSG_GETINFO fields  */\n   TW_INT32   FileType; /* One of the TWFT_xxxx values */\n   TW_UINT32  Size; /* Size of current FileType */\n   TW_STR32   CreateTimeDate; /* creation date of the file */\n   TW_STR32   ModifiedTimeDate; /* last date the file was modified */\n   TW_UINT32  FreeSpace; /* bytes of free space on the current device */\n   TW_INT32   NewImageSize; /* estimate of the amount of space a new image would take up */\n   TW_UINT32  NumberOfFiles; /* number of files, depends on FileType */\n   TW_UINT32  NumberOfSnippets; /**/\n   char       Reserved[512]; /**/\n} TW_FILESYSTEM, FAR * pTW_FILESYSTEM;\n\n/* DAT_PASSTHRU, device dependent data to pass through Data Source */\ntypedef struct {\n   TW_MEMREF  pCommand;        /* Pointer to Command buffer */\n   TW_UINT32  CommandBytes;    /* Number of bytes in Command buffer */\n   TW_INT32   Direction;       /* One of the TWDR_xxxx values.  Defines the direction of data flow */\n   TW_MEMREF  pData;           /* Pointer to Data buffer */\n   TW_UINT32  DataBytes;       /* Number of bytes in Data buffer */\n   TW_UINT32  DataBytesXfered; /* Number of bytes successfully transferred */\n} TW_PASSTHRU, FAR * pTW_PASSTHRU;\n\n/* DAT_SETUPAUDIOFILEXFER, information required to setup an audio file transfer */\ntypedef struct {\n   TW_STR255  FileName; /* full path target file */\n   TW_UINT16  Format;   /* one of TWAF_xxxx */\n   TW_INT16 VRefNum;\n} TW_SETUPAUDIOFILEXFER, FAR * pTW_SETUPAUDIOFILEXFER;\n\n/****************************************************************************\n * Generic Constants                                                        *\n ****************************************************************************/\n\n#define TWON_ARRAY           3 /* indicates TW_ARRAY container       */\n#define TWON_ENUMERATION     4 /* indicates TW_ENUMERATION container */\n#define TWON_ONEVALUE        5 /* indicates TW_ONEVALUE container    */\n#define TWON_RANGE           6 /* indicates TW_RANGE container       */\n\n#define TWON_ICONID          962 /* res Id of icon used in USERSELECT lbox */\n#define TWON_DSMID           461 /* res Id of the DSM version num resource */\n#define TWON_DSMCODEID       63  /* res Id of the Mac SM Code resource     */\n\n#define TWON_DONTCARE8       0xff\n#define TWON_DONTCARE16      0xffff\n#define TWON_DONTCARE32      0xffffffff\n\n/* Flags used in TW_MEMORY structure. */\n#define TWMF_APPOWNS     0x1\n#define TWMF_DSMOWNS     0x2\n#define TWMF_DSOWNS      0x4\n#define TWMF_POINTER     0x8\n#define TWMF_HANDLE      0x10\n\n/* Palette types for TW_PALETTE8 */\n#define TWPA_RGB         0\n#define TWPA_GRAY        1\n#define TWPA_CMY         2\n\n/* There are four containers used for capabilities negotiation:\n *    TWON_ONEVALUE, TWON_RANGE, TWON_ENUMERATION, TWON_ARRAY\n * In each container structure ItemType can be TWTY_INT8, TWTY_INT16, etc.\n * The kind of data stored in the container can be determined by doing\n * DCItemSize[ItemType] where the following is defined in TWAIN glue code:\n *          DCItemSize[]= { sizeof(TW_INT8),\n *                          sizeof(TW_INT16),\n *                          etc.\n *                          sizeof(TW_UINT32) };\n *\n */\n\n#define TWTY_INT8        0x0000    /* Means Item is a TW_INT8   */\n#define TWTY_INT16       0x0001    /* Means Item is a TW_INT16  */\n#define TWTY_INT32       0x0002    /* Means Item is a TW_INT32  */\n\n#define TWTY_UINT8       0x0003    /* Means Item is a TW_UINT8  */\n#define TWTY_UINT16      0x0004    /* Means Item is a TW_UINT16 */\n#define TWTY_UINT32      0x0005    /* Means Item is a TW_UINT32 */\n\n#define TWTY_BOOL        0x0006    /* Means Item is a TW_BOOL   */\n\n#define TWTY_FIX32       0x0007    /* Means Item is a TW_FIX32  */\n\n#define TWTY_FRAME       0x0008    /* Means Item is a TW_FRAME  */\n\n#define TWTY_STR32       0x0009    /* Means Item is a TW_STR32  */\n#define TWTY_STR64       0x000a    /* Means Item is a TW_STR64  */\n#define TWTY_STR128      0x000b    /* Means Item is a TW_STR128 */\n#define TWTY_STR255      0x000c    /* Means Item is a TW_STR255 */\n\n/****************************************************************************\n * Capability Constants                                                     *\n ****************************************************************************/\n\n/* ICAP_BITORDER values (BO_ means Bit Order) */\n#define TWBO_LSBFIRST    0\n#define TWBO_MSBFIRST    1\n\n/* ICAP_COMPRESSION values (CP_ means ComPression ) */\n#define TWCP_NONE        0\n#define TWCP_PACKBITS    1\n#define TWCP_GROUP31D    2 /* Follows CCITT spec (no End Of Line)          */\n#define TWCP_GROUP31DEOL 3 /* Follows CCITT spec (has End Of Line)         */\n#define TWCP_GROUP32D    4 /* Follows CCITT spec (use cap for K Factor)    */\n#define TWCP_GROUP4      5 /* Follows CCITT spec                           */\n#define TWCP_JPEG        6 /* Use capability for more info                 */\n#define TWCP_LZW         7 /* Must license from Unisys and IBM to use      */\n#define TWCP_JBIG        8 /* For Bitonal images  -- Added 1.7 KHL         */\n/* Added 1.8 */\n#define TWCP_PNG         9\n#define TWCP_RLE4        10\n#define TWCP_RLE8        11\n#define TWCP_BITFIELDS   12\n\n\n/* ICAP_IMAGEFILEFORMAT values (FF_means File Format)   */\n#define TWFF_TIFF        0    /* Tagged Image File Format     */\n#define TWFF_PICT        1    /* Macintosh PICT               */\n#define TWFF_BMP         2    /* Windows Bitmap               */\n#define TWFF_XBM         3    /* X-Windows Bitmap             */\n#define TWFF_JFIF        4    /* JPEG File Interchange Format */\n#define TWFF_FPX         5    /* Flash Pix                    */\n#define TWFF_TIFFMULTI   6    /* Multi-page tiff file         */\n#define TWFF_PNG         7\n#define TWFF_SPIFF       8\n#define TWFF_EXIF        9\n\n\n/* ICAP_FILTER values (FT_ means Filter Type) */\n#define TWFT_RED         0\n#define TWFT_GREEN       1\n#define TWFT_BLUE        2\n#define TWFT_NONE        3\n#define TWFT_WHITE       4\n#define TWFT_CYAN        5\n#define TWFT_MAGENTA     6\n#define TWFT_YELLOW      7\n#define TWFT_BLACK       8\n\n/* ICAP_LIGHTPATH values (LP_ means Light Path) */\n#define TWLP_REFLECTIVE   0\n#define TWLP_TRANSMISSIVE 1\n\n/* ICAP_LIGHTSOURCE values (LS_ means Light Source) */\n#define TWLS_RED         0\n#define TWLS_GREEN       1\n#define TWLS_BLUE        2\n#define TWLS_NONE        3\n#define TWLS_WHITE       4\n#define TWLS_UV          5\n#define TWLS_IR          6\n\n/* ICAP_ORIENTATION values (OR_ means ORientation) */\n#define TWOR_ROT0        0\n#define TWOR_ROT90       1\n#define TWOR_ROT180      2\n#define TWOR_ROT270      3\n#define TWOR_PORTRAIT    TWOR_ROT0\n#define TWOR_LANDSCAPE   TWOR_ROT270\n\n/* ICAP_PLANARCHUNKY values (PC_ means Planar/Chunky ) */\n#define TWPC_CHUNKY      0\n#define TWPC_PLANAR      1\n\n/* ICAP_PIXELFLAVOR values (PF_ means Pixel Flavor) */\n#define TWPF_CHOCOLATE   0  /* zero pixel represents darkest shade  */\n#define TWPF_VANILLA     1  /* zero pixel represents lightest shade */\n\n/* ICAP_PIXELTYPE values (PT_ means Pixel Type) */\n#define TWPT_BW          0 /* Black and White */\n#define TWPT_GRAY        1\n#define TWPT_RGB         2\n#define TWPT_PALETTE     3\n#define TWPT_CMY         4\n#define TWPT_CMYK        5\n#define TWPT_YUV         6\n#define TWPT_YUVK        7\n#define TWPT_CIEXYZ      8\n\n/* ICAP_SUPPORTEDSIZES values (SS_ means Supported Sizes) */\n#define TWSS_NONE        0\n#define TWSS_A4LETTER    1\n#define TWSS_B5LETTER    2\n#define TWSS_USLETTER    3\n#define TWSS_USLEGAL     4\n/* Added 1.5 */\n#define TWSS_A5          5\n#define TWSS_B4          6\n#define TWSS_B6          7\n/*#define TWSS_B          8 */\n/* Added 1.7 */\n#define TWSS_USLEDGER    9\n#define TWSS_USEXECUTIVE 10\n#define TWSS_A3          11\n#define TWSS_B3          12\n#define TWSS_A6          13\n#define TWSS_C4          14\n#define TWSS_C5          15\n#define TWSS_C6          16\n/* Added 1.8 */\n#define TWSS_4A0          17\n#define TWSS_2A0          18\n#define TWSS_A0           19\n#define TWSS_A1           20\n#define TWSS_A2           21\n#define TWSS_A4           TWSS_A4LETTER\n#define TWSS_A7           22\n#define TWSS_A8           23\n#define TWSS_A9           24\n#define TWSS_A10          25\n#define TWSS_ISOB0        26\n#define TWSS_ISOB1        27\n#define TWSS_ISOB2        28\n#define TWSS_ISOB3        TWSS_B3\n#define TWSS_ISOB4        TWSS_B4\n#define TWSS_ISOB5        29\n#define TWSS_ISOB6        TWSS_B6\n#define TWSS_ISOB7        30\n#define TWSS_ISOB8        31\n#define TWSS_ISOB9        32\n#define TWSS_ISOB10       33\n#define TWSS_JISB0        34\n#define TWSS_JISB1        35\n#define TWSS_JISB2        36\n#define TWSS_JISB3        37\n#define TWSS_JISB4        38\n#define TWSS_JISB5        TWSS_B5LETTER\n#define TWSS_JISB6        39\n#define TWSS_JISB7        40\n#define TWSS_JISB8        41\n#define TWSS_JISB9        42\n#define TWSS_JISB10       43\n#define TWSS_C0           44\n#define TWSS_C1           45\n#define TWSS_C2           46\n#define TWSS_C3           47\n#define TWSS_C7           48\n#define TWSS_C8           49\n#define TWSS_C9           50\n#define TWSS_C10          51\n#define TWSS_USSTATEMENT  52\n#define TWSS_BUSINESSCARD 53\n\n/* ICAP_XFERMECH values (SX_ means Setup XFer) */\n#define TWSX_NATIVE      0\n#define TWSX_FILE        1\n#define TWSX_MEMORY      2\n\n/* ICAP_UNITS values (UN_ means UNits) */\n#define TWUN_INCHES      0\n#define TWUN_CENTIMETERS 1\n#define TWUN_PICAS       2\n#define TWUN_POINTS      3\n#define TWUN_TWIPS       4\n#define TWUN_PIXELS      5\n\n/* Added 1.5 */\n/* ICAP_BITDEPTHREDUCTION values (BR_ means Bitdepth Reduction) */\n#define TWBR_THRESHOLD     0\n#define TWBR_HALFTONE      1\n#define TWBR_CUSTHALFTONE  2\n#define TWBR_DIFFUSION     3\n\n/* Added 1.7 */\n/* ICAP_DUPLEX values */\n#define TWDX_NONE         0\n#define TWDX_1PASSDUPLEX  1\n#define TWDX_2PASSDUPLEX  2\n\n/* Added 1.7 */\n/* TWEI_BARCODETYPE values */\n#define TWBT_3OF9                 0\n#define TWBT_2OF5INTERLEAVED      1\n#define TWBT_2OF5NONINTERLEAVED   2\n#define TWBT_CODE93               3\n#define TWBT_CODE128              4\n#define TWBT_UCC128               5\n#define TWBT_CODABAR              6\n#define TWBT_UPCA                 7\n#define TWBT_UPCE                 8\n#define TWBT_EAN8                 9\n#define TWBT_EAN13                10\n#define TWBT_POSTNET              11\n#define TWBT_PDF417               12\n/* Added 1.8 */\n#define TWBT_2OF5INDUSTRIAL       13\n#define TWBT_2OF5MATRIX           14\n#define TWBT_2OF5DATALOGIC        15\n#define TWBT_2OF5IATA             16\n#define TWBT_3OF9FULLASCII        17\n#define TWBT_CODABARWITHSTARTSTOP 18\n#define TWBT_MAXICODE             19\n\n/* Added 1.7 */\n/* TWEI_DESKEWSTATUS values */\n#define TWDSK_SUCCESS     0\n#define TWDSK_REPORTONLY  1\n#define TWDSK_FAIL        2\n#define TWDSK_DISABLED    3\n\n/* Added 1.7 */\n/* TWEI_PATCHCODE values */\n#define TWPCH_PATCH1      0\n#define TWPCH_PATCH2      1\n#define TWPCH_PATCH3      2\n#define TWPCH_PATCH4      3\n#define TWPCH_PATCH6      4\n#define TWPCH_PATCHT      5\n\n/* Added 1.7 */\n/* CAP_JOBCONTROL values */\n#define TWJC_NONE   0\n#define TWJC_JSIC   1\n#define TWJC_JSIS   2\n#define TWJC_JSXC   3\n#define TWJC_JSXS   4\n\n/* Added 1.7 */\n/* TWEI_BARCODEROTATION values (BCOR_ means barcode rotation) */\n#define TWBCOR_ROT0   0\n#define TWBCOR_ROT90  1\n#define TWBCOR_ROT180 2\n#define TWBCOR_ROT270 3\n#define TWBCOR_ROTX   4\n\n/* Added 1.8 */\n/* ACAP_AUDIOFILEFORMAT values (AF_ means audio format) */\n#define TWAF_WAV      0\n#define TWAF_AIFF     1\n#define TWAF_AU       3\n#define TWAF_SND      4\n\n/* CAP_ALARMS values (AL_ means alarms) */\n#define TWAL_ALARM          0\n#define TWAL_FEEDERERROR    1\n#define TWAL_FEEDERWARNING  2\n#define TWAL_BARCODE        3\n#define TWAL_DOUBLEFEED     4\n#define TWAL_JAM            5\n#define TWAL_PATCHCODE      6\n#define TWAL_POWER          7\n#define TWAL_SKEW           8\n\n/* CAP_CLEARBUFFERS values (CB_ means clear buffers) */\n#define TWCB_AUTO           0\n#define TWCB_CLEAR          1\n#define TWCB_NOCLEAR        2\n\n/* CAP_DEVICEEVENT values (DE_ means device event) */\n#define TWDE_CUSTOMEVENTS           0x8000\n#define TWDE_CHECKAUTOMATICCAPTURE  0\n#define TWDE_CHECKBATTERY           1\n#define TWDE_CHECKDEVICEONLINE      2\n#define TWDE_CHECKFLASH             3\n#define TWDE_CHECKPOWERSUPPLY       4\n#define TWDE_CHECKRESOLUTION        5\n#define TWDE_DEVICEADDED            6\n#define TWDE_DEVICEOFFLINE          7\n#define TWDE_DEVICEREADY            8\n#define TWDE_DEVICEREMOVED          9\n#define TWDE_IMAGECAPTURED          10\n#define TWDE_IMAGEDELETED           11\n#define TWDE_PAPERDOUBLEFEED        12\n#define TWDE_PAPERJAM               13\n#define TWDE_LAMPFAILURE            14\n#define TWDE_POWERSAVE              15\n#define TWDE_POWERSAVENOTIFY        16\n\n/* CAP_FEEDERALIGNMENT values (FA_ means feeder alignment) */\n#define TWFA_NONE   0\n#define TWFA_LEFT   1\n#define TWFA_CENTER 2\n#define TWFA_RIGHT  3\n\n/* CAP_FEEDERORDER values (FO_ means feeder order) */\n#define TWFO_FIRSTPAGEFIRST 0\n#define TWFO_LASTPAGEFIRST  1\n\n/* CAP_FILESYSTEM values (FS_ means file system) */\n#define TWFS_FILESYSTEM       0\n#define TWFS_RECURSIVEDELETE  1\n\n/* CAP_POWERSUPPLY values (PS_ means power supply) */\n#define TWPS_EXTERNAL 0\n#define TWPS_BATTERY  1\n\n/* CAP_PRINTER values (PR_ means printer) */\n#define TWPR_IMPRINTERTOPBEFORE     0\n#define TWPR_IMPRINTERTOPAFTER      1\n#define TWPR_IMPRINTERBOTTOMBEFORE  2\n#define TWPR_IMPRINTERBOTTOMAFTER   3\n#define TWPR_ENDORSERTOPBEFORE      4\n#define TWPR_ENDORSERTOPAFTER       5\n#define TWPR_ENDORSERBOTTOMBEFORE   6\n#define TWPR_ENDORSERBOTTOMAFTER    7\n\n/* CAP_PRINTERMODE values (PM_ means printer mode) */\n#define TWPM_SINGLESTRING     0\n#define TWPM_MULTISTRING      1\n#define TWPM_COMPOUNDSTRING   2\n\n/* ICAP_BARCODESEARCHMODE values (TWBD_ means search) */\n#define TWBD_HORZ     0\n#define TWBD_VERT     1\n#define TWBD_HORZVERT 2\n#define TWBD_VERTHORZ 3\n\n/* ICAP_FLASHUSED2 values (FL_ means flash) */\n#define TWFL_NONE     0\n#define TWFL_OFF      1\n#define TWFL_ON       2\n#define TWFL_AUTO     3\n#define TWFL_REDEYE   4\n\n/* ICAP_FLIPROTATION values (FR_ means flip rotation) */\n#define TWFR_BOOK     0\n#define TWFR_FANFOLD  1\n\n/* ICAP_IMAGEFILTER values (IF_ means image filter) */\n#define TWIF_NONE     0\n#define TWIF_AUTO     1\n#define TWIF_LOWPASS  2\n#define TWIF_BANDPASS 3\n#define TWIF_HIGHPASS 4\n#define TWIF_TEXT     TWIF_BANDPASS\n#define TWIF_FINELINE TWIF_HIGHPASS\n\n/* ICAP_NOISEFILTER values (NF_ means noise filter) */\n#define TWNF_NONE         0\n#define TWNF_AUTO         1\n#define TWNF_LONEPIXEL    2\n#define TWNF_MAJORITYRULE 3\n\n/* ICAP_OVERSCAN values (OV_ means overscan) */\n#define TWOV_NONE       0\n#define TWOV_AUTO       1\n#define TWOV_TOPBOTTOM  2\n#define TWOV_LEFTRIGHT  3\n#define TWOV_ALL        4\n\n/* TW_FILESYSTEM.FileType values (FT_ means file type) */\n#define TWFY_CAMERA         0\n#define TWFY_CAMERATOP      1\n#define TWFY_CAMERABOTTOM   2\n#define TWFY_CAMERAPREVIEW  3\n#define TWFY_DOMAIN         4\n#define TWFY_HOST           5\n#define TWFY_DIRECTORY      6\n#define TWFY_IMAGE          7\n#define TWFY_UNKNOWN        8\n\n/****************************************************************************\n * Country Constants                                                        *\n ****************************************************************************/\n\n#define TWCY_AFGHANISTAN   1001\n#define TWCY_ALGERIA        213\n#define TWCY_AMERICANSAMOA  684\n#define TWCY_ANDORRA        033\n#define TWCY_ANGOLA        1002\n#define TWCY_ANGUILLA      8090\n#define TWCY_ANTIGUA       8091\n#define TWCY_ARGENTINA       54\n#define TWCY_ARUBA          297\n#define TWCY_ASCENSIONI     247\n#define TWCY_AUSTRALIA       61\n#define TWCY_AUSTRIA         43\n#define TWCY_BAHAMAS       8092\n#define TWCY_BAHRAIN        973\n#define TWCY_BANGLADESH     880\n#define TWCY_BARBADOS      8093\n#define TWCY_BELGIUM         32\n#define TWCY_BELIZE         501\n#define TWCY_BENIN          229\n#define TWCY_BERMUDA       8094\n#define TWCY_BHUTAN        1003\n#define TWCY_BOLIVIA        591\n#define TWCY_BOTSWANA       267\n#define TWCY_BRITAIN          6\n#define TWCY_BRITVIRGINIS  8095\n#define TWCY_BRAZIL          55\n#define TWCY_BRUNEI         673\n#define TWCY_BULGARIA       359\n#define TWCY_BURKINAFASO   1004\n#define TWCY_BURMA         1005\n#define TWCY_BURUNDI       1006\n#define TWCY_CAMAROON       237\n#define TWCY_CANADA           2\n#define TWCY_CAPEVERDEIS    238\n#define TWCY_CAYMANIS      8096\n#define TWCY_CENTRALAFREP  1007\n#define TWCY_CHAD          1008\n#define TWCY_CHILE           56\n#define TWCY_CHINA           86\n#define TWCY_CHRISTMASIS   1009\n#define TWCY_COCOSIS       1009\n#define TWCY_COLOMBIA        57\n#define TWCY_COMOROS       1010\n#define TWCY_CONGO         1011\n#define TWCY_COOKIS        1012\n#define TWCY_COSTARICA     506\n#define TWCY_CUBA           005\n#define TWCY_CYPRUS         357\n#define TWCY_CZECHOSLOVAKIA  42\n#define TWCY_DENMARK         45\n#define TWCY_DJIBOUTI      1013\n#define TWCY_DOMINICA      8097\n#define TWCY_DOMINCANREP   8098\n#define TWCY_EASTERIS      1014\n#define TWCY_ECUADOR        593\n#define TWCY_EGYPT           20\n#define TWCY_ELSALVADOR     503\n#define TWCY_EQGUINEA      1015\n#define TWCY_ETHIOPIA       251\n#define TWCY_FALKLANDIS    1016\n#define TWCY_FAEROEIS       298\n#define TWCY_FIJIISLANDS    679\n#define TWCY_FINLAND        358\n#define TWCY_FRANCE          33\n#define TWCY_FRANTILLES     596\n#define TWCY_FRGUIANA       594\n#define TWCY_FRPOLYNEISA    689\n#define TWCY_FUTANAIS      1043\n#define TWCY_GABON          241\n#define TWCY_GAMBIA         220\n#define TWCY_GERMANY         49\n#define TWCY_GHANA          233\n#define TWCY_GIBRALTER      350\n#define TWCY_GREECE          30\n#define TWCY_GREENLAND      299\n#define TWCY_GRENADA       8099\n#define TWCY_GRENEDINES    8015\n#define TWCY_GUADELOUPE     590\n#define TWCY_GUAM           671\n#define TWCY_GUANTANAMOBAY 5399\n#define TWCY_GUATEMALA      502\n#define TWCY_GUINEA         224\n#define TWCY_GUINEABISSAU  1017\n#define TWCY_GUYANA         592\n#define TWCY_HAITI          509\n#define TWCY_HONDURAS       504\n#define TWCY_HONGKONG      852\n#define TWCY_HUNGARY         36\n#define TWCY_ICELAND        354\n#define TWCY_INDIA           91\n#define TWCY_INDONESIA       62\n#define TWCY_IRAN            98\n#define TWCY_IRAQ           964\n#define TWCY_IRELAND        353\n#define TWCY_ISRAEL         972\n#define TWCY_ITALY           39\n#define TWCY_IVORYCOAST    225\n#define TWCY_JAMAICA       8010\n#define TWCY_JAPAN           81\n#define TWCY_JORDAN         962\n#define TWCY_KENYA          254\n#define TWCY_KIRIBATI      1018\n#define TWCY_KOREA           82\n#define TWCY_KUWAIT         965\n#define TWCY_LAOS          1019\n#define TWCY_LEBANON       1020\n#define TWCY_LIBERIA        231\n#define TWCY_LIBYA          218\n#define TWCY_LIECHTENSTEIN   41\n#define TWCY_LUXENBOURG     352\n#define TWCY_MACAO          853\n#define TWCY_MADAGASCAR    1021\n#define TWCY_MALAWI         265\n#define TWCY_MALAYSIA        60\n#define TWCY_MALDIVES       960\n#define TWCY_MALI          1022\n#define TWCY_MALTA          356\n#define TWCY_MARSHALLIS     692\n#define TWCY_MAURITANIA    1023\n#define TWCY_MAURITIUS      230\n#define TWCY_MEXICO           3\n#define TWCY_MICRONESIA     691\n#define TWCY_MIQUELON       508\n#define TWCY_MONACO          33\n#define TWCY_MONGOLIA      1024\n#define TWCY_MONTSERRAT    8011\n#define TWCY_MOROCCO        212\n#define TWCY_MOZAMBIQUE    1025\n#define TWCY_NAMIBIA        264\n#define TWCY_NAURU         1026\n#define TWCY_NEPAL          977\n#define TWCY_NETHERLANDS     31\n#define TWCY_NETHANTILLES   599\n#define TWCY_NEVIS         8012\n#define TWCY_NEWCALEDONIA   687\n#define TWCY_NEWZEALAND      64\n#define TWCY_NICARAGUA      505\n#define TWCY_NIGER          227\n#define TWCY_NIGERIA        234\n#define TWCY_NIUE          1027\n#define TWCY_NORFOLKI      1028\n#define TWCY_NORWAY          47\n#define TWCY_OMAN           968\n#define TWCY_PAKISTAN        92\n#define TWCY_PALAU         1029\n#define TWCY_PANAMA         507\n#define TWCY_PARAGUAY       595\n#define TWCY_PERU            51\n#define TWCY_PHILLIPPINES    63\n#define TWCY_PITCAIRNIS    1030\n#define TWCY_PNEWGUINEA     675\n#define TWCY_POLAND          48\n#define TWCY_PORTUGAL       351\n#define TWCY_QATAR          974\n#define TWCY_REUNIONI      1031\n#define TWCY_ROMANIA         40\n#define TWCY_RWANDA         250\n#define TWCY_SAIPAN         670\n#define TWCY_SANMARINO       39\n#define TWCY_SAOTOME       1033\n#define TWCY_SAUDIARABIA    966\n#define TWCY_SENEGAL        221\n#define TWCY_SEYCHELLESIS  1034\n#define TWCY_SIERRALEONE   1035\n#define TWCY_SINGAPORE       65\n#define TWCY_SOLOMONIS     1036\n#define TWCY_SOMALI        1037\n#define TWCY_SOUTHAFRICA    27\n#define TWCY_SPAIN           34\n#define TWCY_SRILANKA        94\n#define TWCY_STHELENA      1032\n#define TWCY_STKITTS       8013\n#define TWCY_STLUCIA       8014\n#define TWCY_STPIERRE       508\n#define TWCY_STVINCENT     8015\n#define TWCY_SUDAN         1038\n#define TWCY_SURINAME       597\n#define TWCY_SWAZILAND      268\n#define TWCY_SWEDEN          46\n#define TWCY_SWITZERLAND     41\n#define TWCY_SYRIA         1039\n#define TWCY_TAIWAN         886\n#define TWCY_TANZANIA       255\n#define TWCY_THAILAND        66\n#define TWCY_TOBAGO        8016\n#define TWCY_TOGO           228\n#define TWCY_TONGAIS        676\n#define TWCY_TRINIDAD      8016\n#define TWCY_TUNISIA        216\n#define TWCY_TURKEY          90\n#define TWCY_TURKSCAICOS   8017\n#define TWCY_TUVALU        1040\n#define TWCY_UGANDA         256\n#define TWCY_USSR             7\n#define TWCY_UAEMIRATES     971\n#define TWCY_UNITEDKINGDOM   44\n#define TWCY_USA              1\n#define TWCY_URUGUAY        598\n#define TWCY_VANUATU       1041\n#define TWCY_VATICANCITY     39\n#define TWCY_VENEZUELA       58\n#define TWCY_WAKE          1042\n#define TWCY_WALLISIS      1043\n#define TWCY_WESTERNSAHARA 1044\n#define TWCY_WESTERNSAMOA  1045\n#define TWCY_YEMEN         1046\n#define TWCY_YUGOSLAVIA      38\n#define TWCY_ZAIRE          243\n#define TWCY_ZAMBIA         260\n#define TWCY_ZIMBABWE       263\n/* Added for 1.8 */\n#define TWCY_ALBANIA        355\n#define TWCY_ARMENIA        374\n#define TWCY_AZERBAIJAN     994\n#define TWCY_BELARUS        375\n#define TWCY_BOSNIAHERZGO   387\n#define TWCY_CAMBODIA       855\n#define TWCY_CROATIA        385\n#define TWCY_CZECHREPUBLIC  420\n#define TWCY_DIEGOGARCIA    246\n#define TWCY_ERITREA        291\n#define TWCY_ESTONIA        372\n#define TWCY_GEORGIA        995\n#define TWCY_LATVIA         371\n#define TWCY_LESOTHO        266\n#define TWCY_LITHUANIA      370\n#define TWCY_MACEDONIA      389\n#define TWCY_MAYOTTEIS      269\n#define TWCY_MOLDOVA        373\n#define TWCY_MYANMAR        95\n#define TWCY_NORTHKOREA     850\n#define TWCY_PUERTORICO     787\n#define TWCY_RUSSIA         7\n#define TWCY_SERBIA         381\n#define TWCY_SLOVAKIA       421\n#define TWCY_SLOVENIA       386\n#define TWCY_SOUTHKOREA     82\n#define TWCY_UKRAINE        380\n#define TWCY_USVIRGINIS     340\n#define TWCY_VIETNAM        84\n\n/****************************************************************************\n * Language Constants                                                       *\n ****************************************************************************/\n\n#define TWLG_DAN              0 /* Danish                 */\n#define TWLG_DUT              1 /* Dutch                  */\n#define TWLG_ENG              2 /* International English  */\n#define TWLG_FCF              3 /* French Canadian        */\n#define TWLG_FIN              4 /* Finnish                */\n#define TWLG_FRN              5 /* French                 */\n#define TWLG_GER              6 /* German                 */\n#define TWLG_ICE              7 /* Icelandic              */\n#define TWLG_ITN              8 /* Italian                */\n#define TWLG_NOR              9 /* Norwegian              */\n#define TWLG_POR             10 /* Portuguese             */\n#define TWLG_SPA             11 /* Spanish                */\n#define TWLG_SWE             12 /* Swedish                */\n#define TWLG_USA             13 /* U.S. English           */\n/* Added for 1.8 */\n#define TWLG_USERLOCALE           -1\n#define TWLG_AFRIKAANS            14\n#define TWLG_ALBANIA              15\n#define TWLG_ARABIC               16\n#define TWLG_ARABIC_ALGERIA       17\n#define TWLG_ARABIC_BAHRAIN       18\n#define TWLG_ARABIC_EGYPT         19\n#define TWLG_ARABIC_IRAQ          20\n#define TWLG_ARABIC_JORDAN        21\n#define TWLG_ARABIC_KUWAIT        22\n#define TWLG_ARABIC_LEBANON       23\n#define TWLG_ARABIC_LIBYA         24\n#define TWLG_ARABIC_MOROCCO       25\n#define TWLG_ARABIC_OMAN          26\n#define TWLG_ARABIC_QATAR         27\n#define TWLG_ARABIC_SAUDIARABIA   28\n#define TWLG_ARABIC_SYRIA         29\n#define TWLG_ARABIC_TUNISIA       30\n#define TWLG_ARABIC_UAE           31 /* United Arabic Emirates */\n#define TWLG_ARABIC_YEMEN         32\n#define TWLG_BASQUE               33\n#define TWLG_BYELORUSSIAN         34\n#define TWLG_BULGARIAN            35\n#define TWLG_CATALAN              36\n#define TWLG_CHINESE              37\n#define TWLG_CHINESE_HONGKONG     38\n#define TWLG_CHINESE_PRC          39 /* People's Republic of China */\n#define TWLG_CHINESE_SINGAPORE    40\n#define TWLG_CHINESE_SIMPLIFIED   41\n#define TWLG_CHINESE_TAIWAN       42\n#define TWLG_CHINESE_TRADITIONAL  43\n#define TWLG_CROATIA              44\n#define TWLG_CZECH                45\n#define TWLG_DANISH               TWLG_DAN\n#define TWLG_DUTCH                TWLG_DUT\n#define TWLG_DUTCH_BELGIAN        46\n#define TWLG_ENGLISH              TWLG_ENG\n#define TWLG_ENGLISH_AUSTRALIAN   47\n#define TWLG_ENGLISH_CANADIAN     48\n#define TWLG_ENGLISH_IRELAND      49\n#define TWLG_ENGLISH_NEWZEALAND   50\n#define TWLG_ENGLISH_SOUTHAFRICA  51\n#define TWLG_ENGLISH_UK           52\n#define TWLG_ENGLISH_USA          TWLG_USA\n#define TWLG_ESTONIAN             53\n#define TWLG_FAEROESE             54\n#define TWLG_FARSI                55\n#define TWLG_FINNISH              TWLG_FIN\n#define TWLG_FRENCH               TWLG_FRN\n#define TWLG_FRENCH_BELGIAN       56\n#define TWLG_FRENCH_CANADIAN      TWLG_FCF\n#define TWLG_FRENCH_LUXEMBOURG    57\n#define TWLG_FRENCH_SWISS         58\n#define TWLG_GERMAN               TWLG_GER\n#define TWLG_GERMAN_AUSTRIAN      59\n#define TWLG_GERMAN_LUXEMBOURG    60\n#define TWLG_GERMAN_LIECHTENSTEIN 61\n#define TWLG_GERMAN_SWISS         62\n#define TWLG_GREEK                63\n#define TWLG_HEBREW               64\n#define TWLG_HUNGARIAN            65\n#define TWLG_ICELANDIC            TWLG_ICE\n#define TWLG_INDONESIAN           66\n#define TWLG_ITALIAN              TWLG_ITN\n#define TWLG_ITALIAN_SWISS        67\n#define TWLG_JAPANESE             68\n#define TWLG_KOREAN               69\n#define TWLG_KOREAN_JOHAB         70\n#define TWLG_LATVIAN              71\n#define TWLG_LITHUANIAN           72\n#define TWLG_NORWEGIAN            TWLG_NOR\n#define TWLG_NORWEGIAN_BOKMAL     73\n#define TWLG_NORWEGIAN_NYNORSK    74\n#define TWLG_POLISH               75\n#define TWLG_PORTUGUESE           TWLG_POR\n#define TWLG_PORTUGUESE_BRAZIL    76\n#define TWLG_ROMANIAN             77\n#define TWLG_RUSSIAN              78\n#define TWLG_SERBIAN_LATIN        79\n#define TWLG_SLOVAK               80\n#define TWLG_SLOVENIAN            81\n#define TWLG_SPANISH              TWLG_SPA\n#define TWLG_SPANISH_MEXICAN      82\n#define TWLG_SPANISH_MODERN       83\n#define TWLG_SWEDISH              TWLG_SWE\n#define TWLG_THAI                 84\n#define TWLG_TURKISH              85\n#define TWLG_UKRANIAN             86\n/* More stuff added for 1.8 */\n#define TWLG_ASSAMESE             87\n#define TWLG_BENGALI              88\n#define TWLG_BIHARI               89\n#define TWLG_BODO                 90\n#define TWLG_DOGRI                91\n#define TWLG_GUJARATI             92\n#define TWLG_HARYANVI             93\n#define TWLG_HINDI                94\n#define TWLG_KANNADA              95\n#define TWLG_KASHMIRI             96\n#define TWLG_MALAYALAM            97\n#define TWLG_MARATHI              98\n#define TWLG_MARWARI              99\n#define TWLG_MEGHALAYAN          100\n#define TWLG_MIZO                101\n#define TWLG_NAGA                102\n#define TWLG_ORISSI              103\n#define TWLG_PUNJABI             104\n#define TWLG_PUSHTU              105\n#define TWLG_SERBIAN_CYRILLIC    106\n#define TWLG_SIKKIMI             107\n#define TWLG_SWEDISH_FINLAND     108\n#define TWLG_TAMIL               109\n#define TWLG_TELUGU              110\n#define TWLG_TRIPURI             111\n#define TWLG_URDU                112\n#define TWLG_VIETNAMESE          113\n\n/****************************************************************************\n * Data Groups                                                              *\n ****************************************************************************/\n\n/* More Data Groups may be added in the future.\n * Possible candidates include text, vector graphics, sound, etc.\n * NOTE: Data Group constants must be powers of 2 as they are used\n *       as bitflags when Application asks DSM to present a list of DSs.\n */\n\n#define DG_CONTROL          0x0001L /* data pertaining to control       */\n#define DG_IMAGE            0x0002L /* data pertaining to raster images */\n/* Added 1.8 */\n#define DG_AUDIO            0x0004L /* data pertaining to audio */\n\n/****************************************************************************\n * Data Argument Types                                                      *\n ****************************************************************************/\n\n/*  SDH - 03/23/95 - WATCH                                                  */\n/*  The thunker requires knowledge about size of data being passed in the   */\n/*  lpData parameter to DS_Entry (which is not readily available due to     */\n/*  type LPVOID.  Thus, we key off the DAT_ argument to determine the size. */\n/*  This has a couple implications:                                         */\n/*  1) Any additional DAT_ features require modifications to the thunk code */\n/*     for thunker support.                                                 */\n/*  2) Any applications which use the custom capabilities are not supported */\n/*     under thunking since we have no way of knowing what size data (if    */\n/*     any) is being passed.                                                */\n\n#define DAT_NULL            0x0000 /* No data or structure. */\n#define DAT_CUSTOMBASE      0x8000 /* Base of custom DATs.  */\n\n/* Data Argument Types for the DG_CONTROL Data Group. */\n#define DAT_CAPABILITY      0x0001 /* TW_CAPABILITY                        */\n#define DAT_EVENT           0x0002 /* TW_EVENT                             */\n#define DAT_IDENTITY        0x0003 /* TW_IDENTITY                          */\n#define DAT_PARENT          0x0004 /* TW_HANDLE, application win handle in Windows */\n#define DAT_PENDINGXFERS    0x0005 /* TW_PENDINGXFERS                      */\n#define DAT_SETUPMEMXFER    0x0006 /* TW_SETUPMEMXFER                      */\n#define DAT_SETUPFILEXFER   0x0007 /* TW_SETUPFILEXFER                     */\n#define DAT_STATUS          0x0008 /* TW_STATUS                            */\n#define DAT_USERINTERFACE   0x0009 /* TW_USERINTERFACE                     */\n#define DAT_XFERGROUP       0x000a /* TW_UINT32                            */\n/*  SDH - 03/21/95 - TWUNK                                         */\n/*  Additional message required for thunker to request the special */\n/*  identity information.                                          */\n#define DAT_TWUNKIDENTITY   0x000b /* TW_TWUNKIDENTITY                     */\n#define DAT_CUSTOMDSDATA    0x000c /* TW_CUSTOMDSDATA.                     */\n/* Added 1.8 */\n#define DAT_DEVICEEVENT     0x000d /* TW_DEVICEEVENT                       */\n#define DAT_FILESYSTEM      0x000e /* TW_FILESYSTEM                        */\n#define DAT_PASSTHRU        0x000f /* TW_PASSTHRU                          */\n\n/* Data Argument Types for the DG_IMAGE Data Group. */\n#define DAT_IMAGEINFO       0x0101 /* TW_IMAGEINFO                         */\n#define DAT_IMAGELAYOUT     0x0102 /* TW_IMAGELAYOUT                       */\n#define DAT_IMAGEMEMXFER    0x0103 /* TW_IMAGEMEMXFER                      */\n#define DAT_IMAGENATIVEXFER 0x0104 /* TW_UINT32 loword is hDIB, PICHandle  */\n#define DAT_IMAGEFILEXFER   0x0105 /* Null data                            */\n#define DAT_CIECOLOR        0x0106 /* TW_CIECOLOR                          */\n#define DAT_GRAYRESPONSE    0x0107 /* TW_GRAYRESPONSE                      */\n#define DAT_RGBRESPONSE     0x0108 /* TW_RGBRESPONSE                       */\n#define DAT_JPEGCOMPRESSION 0x0109 /* TW_JPEGCOMPRESSION                   */\n#define DAT_PALETTE8        0x010a /* TW_PALETTE8                          */\n#define DAT_EXTIMAGEINFO    0x010b /* TW_EXTIMAGEINFO -- for 1.7 Spec.     */\n\n/* Added 1.8 */\n/* Data Argument Types for the DG_AUDIO Data Group. */\n#define DAT_AUDIOFILEXFER   0x0201 /* Null data                            */\n#define DAT_AUDIOINFO       0x0202 /* TW_AUDIOINFO                         */\n#define DAT_AUDIONATIVEXFER 0x0203 /* TW_UINT32 handle to WAV, (AIFF Mac)  */\n\n/****************************************************************************\n * Messages                                                                 *\n ****************************************************************************/\n\n/* All message constants are unique.\n * Messages are grouped according to which DATs they are used with.*/\n\n#define MSG_NULL         0x0000 /* Used in TW_EVENT structure               */\n#define MSG_CUSTOMBASE   0x8000 /* Base of custom messages                  */\n\n/* Generic messages may be used with any of several DATs.                   */\n#define MSG_GET          0x0001 /* Get one or more values                   */\n#define MSG_GETCURRENT   0x0002 /* Get current value                        */\n#define MSG_GETDEFAULT   0x0003 /* Get default (e.g. power up) value        */\n#define MSG_GETFIRST     0x0004 /* Get first of a series of items, e.g. DSs */\n#define MSG_GETNEXT      0x0005 /* Iterate through a series of items.       */\n#define MSG_SET          0x0006 /* Set one or more values                   */\n#define MSG_RESET        0x0007 /* Set current value to default value       */\n#define MSG_QUERYSUPPORT 0x0008 /* Get supported operations on the cap.     */\n\n/* Messages used with DAT_NULL                                              */\n#define MSG_XFERREADY    0x0101 /* The data source has data ready           */\n#define MSG_CLOSEDSREQ   0x0102 /* Request for Application. to close DS             */\n#define MSG_CLOSEDSOK    0x0103 /* Tell the Application. to save the state.         */\n/* Added 1.8 */\n#define MSG_DEVICEEVENT  0X0104 /* Some event has taken place               */\n\n/* Messages used with a pointer to a DAT_STATUS structure                   */\n#define MSG_CHECKSTATUS  0x0201 /* Get status information                   */\n\n/* Messages used with a pointer to DAT_PARENT data                          */\n#define MSG_OPENDSM      0x0301 /* Open the DSM                             */\n#define MSG_CLOSEDSM     0x0302 /* Close the DSM                            */\n\n/* Messages used with a pointer to a DAT_IDENTITY structure                 */\n#define MSG_OPENDS       0x0401 /* Open a data source                       */\n#define MSG_CLOSEDS      0x0402 /* Close a data source                      */\n#define MSG_USERSELECT   0x0403 /* Put up a dialog of all DS                */\n\n/* Messages used with a pointer to a DAT_USERINTERFACE structure            */\n#define MSG_DISABLEDS    0x0501 /* Disable data transfer in the DS          */\n#define MSG_ENABLEDS     0x0502 /* Enable data transfer in the DS           */\n#define MSG_ENABLEDSUIONLY  0x0503  /* Enable for saving DS state only.     */\n\n/* Messages used with a pointer to a DAT_EVENT structure                    */\n#define MSG_PROCESSEVENT 0x0601\n\n/* Messages used with a pointer to a DAT_PENDINGXFERS structure             */\n#define MSG_ENDXFER      0x0701\n\n/* Added 1.8 */\n/* Messages used with a pointer to a DAT_FILESYSTEM structure               */\n#define MSG_CHANGEDIRECTORY   0x0801\n#define MSG_CREATEDIRECTORY   0x0802\n#define MSG_DELETE            0x0803\n#define MSG_FORMATMEDIA       0x0804\n#define MSG_GETCLOSE          0x0805\n#define MSG_GETFIRSTFILE      0x0806\n#define MSG_GETINFO           0x0807\n#define MSG_GETNEXTFILE       0x0808\n#define MSG_RENAME            0x0809\n\n/* Messages used with a pointer to a DAT_PASSTHRU structure                 */\n#define MSG_PASSTHRU          0x0901\n\n/****************************************************************************\n * Capabilities                                                             *\n ****************************************************************************/\n\n#define CAP_CUSTOMBASE          0x8000 /* Base of custom capabilities */\n\n/* all data sources are REQUIRED to support these caps */\n#define CAP_XFERCOUNT           0x0001\n\n/* image data sources are REQUIRED to support these caps */\n#define ICAP_COMPRESSION        0x0100\n#define ICAP_PIXELTYPE          0x0101\n#define ICAP_UNITS              0x0102 /* default is TWUN_INCHES */\n#define ICAP_XFERMECH           0x0103\n\n/* all data sources MAY support these caps */\n#define CAP_AUTHOR                  0x1000\n#define CAP_CAPTION                 0x1001\n#define CAP_FEEDERENABLED           0x1002\n#define CAP_FEEDERLOADED            0x1003\n#define CAP_TIMEDATE                0x1004\n#define CAP_SUPPORTEDCAPS           0x1005\n#define CAP_EXTENDEDCAPS            0x1006\n#define CAP_AUTOFEED                0x1007\n#define CAP_CLEARPAGE               0x1008\n#define CAP_FEEDPAGE                0x1009\n#define CAP_REWINDPAGE              0x100a\n#define CAP_INDICATORS              0x100b   /* Added 1.1 */\n#define CAP_SUPPORTEDCAPSEXT        0x100c   /* Added 1.6 */\n#define CAP_PAPERDETECTABLE         0x100d   /* Added 1.6 */\n#define CAP_UICONTROLLABLE          0x100e   /* Added 1.6 */\n#define CAP_DEVICEONLINE            0x100f   /* Added 1.6 */\n#define CAP_AUTOSCAN                0x1010   /* Added 1.6 */\n#define CAP_THUMBNAILSENABLED       0x1011   /* Added 1.7 */\n#define CAP_DUPLEX                  0x1012   /* Added 1.7 */\n#define CAP_DUPLEXENABLED           0x1013   /* Added 1.7 */\n#define CAP_ENABLEDSUIONLY          0x1014   /* Added 1.7 */\n#define CAP_CUSTOMDSDATA            0x1015   /* Added 1.7 */\n#define CAP_ENDORSER                0x1016   /* Added 1.7 */\n#define CAP_JOBCONTROL              0x1017   /* Added 1.7 */\n#define CAP_ALARMS                  0x1018   /* Added 1.8 */\n#define CAP_ALARMVOLUME             0x1019   /* Added 1.8 */\n#define CAP_AUTOMATICCAPTURE        0x101a   /* Added 1.8 */\n#define CAP_TIMEBEFOREFIRSTCAPTURE  0x101b   /* Added 1.8 */\n#define CAP_TIMEBETWEENCAPTURES     0x101c   /* Added 1.8 */\n#define CAP_CLEARBUFFERS            0x101d   /* Added 1.8 */\n#define CAP_MAXBATCHBUFFERS         0x101e   /* Added 1.8 */\n#define CAP_DEVICETIMEDATE          0x101f   /* Added 1.8 */\n#define CAP_POWERSUPPLY             0x1020   /* Added 1.8 */\n#define CAP_CAMERAPREVIEWUI         0x1021   /* Added 1.8 */\n#define CAP_DEVICEEVENT             0x1022   /* Added 1.8 */\n#define CAP_PAGEMULTIPLEACQUIRE     0x1023   /* Added 1.8 */\n#define CAP_SERIALNUMBER            0x1024   /* Added 1.8 */\n#define CAP_FILESYSTEM              0x1025   /* Added 1.8 */\n#define CAP_PRINTER                 0x1026   /* Added 1.8 */\n#define CAP_PRINTERENABLED          0x1027   /* Added 1.8 */\n#define CAP_PRINTERINDEX            0x1028   /* Added 1.8 */\n#define CAP_PRINTERMODE             0x1029   /* Added 1.8 */\n#define CAP_PRINTERSTRING           0x102a   /* Added 1.8 */\n#define CAP_PRINTERSUFFIX           0x102b   /* Added 1.8 */\n#define CAP_LANGUAGE                0x102c   /* Added 1.8 */\n#define CAP_FEEDERALIGNMENT         0x102d   /* Added 1.8 */\n#define CAP_FEEDERORDER             0x102e   /* Added 1.8 */\n#define CAP_PAPERBINDING            0x102f   /* Added 1.8 */\n#define CAP_REACQUIREALLOWED        0x1030   /* Added 1.8 */\n#define CAP_PASSTHRU                0x1031   /* Added 1.8 */\n#define CAP_BATTERYMINUTES          0x1032   /* Added 1.8 */\n#define CAP_BATTERYPERCENTAGE       0x1033   /* Added 1.8 */\n#define CAP_POWERDOWNTIME           0x1034   /* Added 1.8 */\n\n/* image data sources MAY support these caps */\n#define ICAP_AUTOBRIGHT                   0x1100\n#define ICAP_BRIGHTNESS                   0x1101\n#define ICAP_CONTRAST                     0x1103\n#define ICAP_CUSTHALFTONE                 0x1104\n#define ICAP_EXPOSURETIME                 0x1105\n#define ICAP_FILTER                       0x1106\n#define ICAP_FLASHUSED                    0x1107\n#define ICAP_GAMMA                        0x1108\n#define ICAP_HALFTONES                    0x1109\n#define ICAP_HIGHLIGHT                    0x110a\n#define ICAP_IMAGEFILEFORMAT              0x110c\n#define ICAP_LAMPSTATE                    0x110d\n#define ICAP_LIGHTSOURCE                  0x110e\n#define ICAP_ORIENTATION                  0x1110\n#define ICAP_PHYSICALWIDTH                0x1111\n#define ICAP_PHYSICALHEIGHT               0x1112\n#define ICAP_SHADOW                       0x1113\n#define ICAP_FRAMES                       0x1114\n#define ICAP_XNATIVERESOLUTION            0x1116\n#define ICAP_YNATIVERESOLUTION            0x1117\n#define ICAP_XRESOLUTION                  0x1118\n#define ICAP_YRESOLUTION                  0x1119\n#define ICAP_MAXFRAMES                    0x111a\n#define ICAP_TILES                        0x111b\n#define ICAP_BITORDER                     0x111c\n#define ICAP_CCITTKFACTOR                 0x111d\n#define ICAP_LIGHTPATH                    0x111e\n#define ICAP_PIXELFLAVOR                  0x111f\n#define ICAP_PLANARCHUNKY                 0x1120\n#define ICAP_ROTATION                     0x1121\n#define ICAP_SUPPORTEDSIZES               0x1122\n#define ICAP_THRESHOLD                    0x1123\n#define ICAP_XSCALING                     0x1124\n#define ICAP_YSCALING                     0x1125\n#define ICAP_BITORDERCODES                0x1126\n#define ICAP_PIXELFLAVORCODES             0x1127\n#define ICAP_JPEGPIXELTYPE                0x1128\n#define ICAP_TIMEFILL                     0x112a\n#define ICAP_BITDEPTH                     0x112b\n#define ICAP_BITDEPTHREDUCTION            0x112c  /* Added 1.5 */\n#define ICAP_UNDEFINEDIMAGESIZE           0x112d  /* Added 1.6 */\n#define ICAP_IMAGEDATASET                 0x112e  /* Added 1.7 */\n#define ICAP_EXTIMAGEINFO                 0x112f  /* Added 1.7 */\n#define ICAP_MINIMUMHEIGHT                0x1130  /* Added 1.7 */\n#define ICAP_MINIMUMWIDTH                 0x1131  /* Added 1.7 */\n#define ICAP_AUTODISCARDBLANKPAGES        0x1134  /* Added 1.8 */\n#define ICAP_FLIPROTATION                 0x1136  /* Added 1.8 */\n#define ICAP_BARCODEDETECTIONENABLED      0x1137  /* Added 1.8 */\n#define ICAP_SUPPORTEDBARCODETYPES        0x1138  /* Added 1.8 */\n#define ICAP_BARCODEMAXSEARCHPRIORITIES   0x1139  /* Added 1.8 */\n#define ICAP_BARCODESEARCHPRIORITIES      0x113a  /* Added 1.8 */\n#define ICAP_BARCODESEARCHMODE            0x113b  /* Added 1.8 */\n#define ICAP_BARCODEMAXRETRIES            0x113c  /* Added 1.8 */\n#define ICAP_BARCODETIMEOUT               0x113d  /* Added 1.8 */\n#define ICAP_ZOOMFACTOR                   0x113e  /* Added 1.8 */\n#define ICAP_PATCHCODEDETECTIONENABLED    0x113f  /* Added 1.8 */\n#define ICAP_SUPPORTEDPATCHCODETYPES      0x1140  /* Added 1.8 */\n#define ICAP_PATCHCODEMAXSEARCHPRIORITIES 0x1141  /* Added 1.8 */\n#define ICAP_PATCHCODESEARCHPRIORITIES    0x1142  /* Added 1.8 */\n#define ICAP_PATCHCODESEARCHMODE          0x1143  /* Added 1.8 */\n#define ICAP_PATCHCODEMAXRETRIES          0x1144  /* Added 1.8 */\n#define ICAP_PATCHCODETIMEOUT             0x1145  /* Added 1.8 */\n#define ICAP_FLASHUSED2                   0x1146  /* Added 1.8 */\n#define ICAP_IMAGEFILTER                  0x1147  /* Added 1.8 */\n#define ICAP_NOISEFILTER                  0x1148  /* Added 1.8 */\n#define ICAP_OVERSCAN                     0x1149  /* Added 1.8 */\n#define ICAP_AUTOMATICBORDERDETECTION     0x1150  /* Added 1.8 */\n#define ICAP_AUTOMATICDESKEW              0x1151  /* Added 1.8 */\n#define ICAP_AUTOMATICROTATE              0x1152  /* Added 1.8 */\n\n/* image data sources MAY support these audio caps */\n#define ACAP_AUDIOFILEFORMAT    0x1201  /* Added 1.8 */\n#define ACAP_XFERMECH           0x1202  /* Added 1.8 */\n\n/* ----------------------------------------------------------------------- *\\\n\n  Version 1.7:      Following is Extended Image Info Attributes.\n  July 1997\n  KHL\n\n\\* ----------------------------------------------------------------------- */\n\n#define TWEI_BARCODEX               0x1200\n#define TWEI_BARCODEY               0x1201\n#define TWEI_BARCODETEXT            0x1202\n#define TWEI_BARCODETYPE            0x1203\n#define TWEI_DESHADETOP             0x1204\n#define TWEI_DESHADELEFT            0x1205\n#define TWEI_DESHADEHEIGHT          0x1206\n#define TWEI_DESHADEWIDTH           0x1207\n#define TWEI_DESHADESIZE            0x1208\n#define TWEI_SPECKLESREMOVED        0x1209\n#define TWEI_HORZLINEXCOORD         0x120A\n#define TWEI_HORZLINEYCOORD         0x120B\n#define TWEI_HORZLINELENGTH         0x120C\n#define TWEI_HORZLINETHICKNESS      0x120D\n#define TWEI_VERTLINEXCOORD         0x120E\n#define TWEI_VERTLINEYCOORD         0x120F\n#define TWEI_VERTLINELENGTH         0x1210\n#define TWEI_VERTLINETHICKNESS      0x1211\n#define TWEI_PATCHCODE              0x1212\n#define TWEI_ENDORSEDTEXT           0x1213\n#define TWEI_FORMCONFIDENCE         0x1214\n#define TWEI_FORMTEMPLATEMATCH      0x1215\n#define TWEI_FORMTEMPLATEPAGEMATCH  0x1216\n#define TWEI_FORMHORZDOCOFFSET      0x1217\n#define TWEI_FORMVERTDOCOFFSET      0x1218\n#define TWEI_BARCODECOUNT           0x1219\n#define TWEI_BARCODECONFIDENCE      0x121A\n#define TWEI_BARCODEROTATION        0x121B\n#define TWEI_BARCODETEXTLENGTH      0x121C\n#define TWEI_DESHADECOUNT           0x121D\n#define TWEI_DESHADEBLACKCOUNTOLD   0x121E\n#define TWEI_DESHADEBLACKCOUNTNEW   0x121F\n#define TWEI_DESHADEBLACKRLMIN      0x1220\n#define TWEI_DESHADEBLACKRLMAX      0x1221\n#define TWEI_DESHADEWHITECOUNTOLD   0x1222\n#define TWEI_DESHADEWHITECOUNTNEW   0x1223\n#define TWEI_DESHADEWHITERLMIN      0x1224\n#define TWEI_DESHADEWHITERLAVE      0x1225\n#define TWEI_DESHADEWHITERLMAX      0x1226\n#define TWEI_BLACKSPECKLESREMOVED   0x1227\n#define TWEI_WHITESPECKLESREMOVED   0x1228\n#define TWEI_HORZLINECOUNT          0x1229\n#define TWEI_VERTLINECOUNT          0x122A\n#define TWEI_DESKEWSTATUS           0x122B\n#define TWEI_SKEWORIGINALANGLE      0x122C\n#define TWEI_SKEWFINALANGLE         0x122D\n#define TWEI_SKEWCONFIDENCE         0x122E\n#define TWEI_SKEWWINDOWX1           0x122F\n#define TWEI_SKEWWINDOWY1           0x1230\n#define TWEI_SKEWWINDOWX2           0x1231\n#define TWEI_SKEWWINDOWY2           0x1232\n#define TWEI_SKEWWINDOWX3           0x1233\n#define TWEI_SKEWWINDOWY3           0x1234\n#define TWEI_SKEWWINDOWX4           0x1235\n#define TWEI_SKEWWINDOWY4           0x1236\n\n#define TWEJ_NONE                   0x0000\n#define TWEJ_MIDSEPARATOR           0x0001\n#define TWEJ_PATCH1                 0x0002\n#define TWEJ_PATCH2                 0x0003\n#define TWEJ_PATCH3                 0x0004\n#define TWEJ_PATCH4                 0x0005\n#define TWEJ_PATCH6                 0x0006\n#define TWEJ_PATCHT                 0x0007\n\n/***************************************************************************\n *            Return Codes and Condition Codes section                     *\n ***************************************************************************/\n\n/* Return Codes: DSM_Entry and DS_Entry may return any one of these values. */\n#define TWRC_CUSTOMBASE     0x8000\n\n#define TWRC_SUCCESS          0\n#define TWRC_FAILURE          1 /* Application may get TW_STATUS for info on failure */\n#define TWRC_CHECKSTATUS      2 /* \"tried hard\"; get status                  */\n#define TWRC_CANCEL           3\n#define TWRC_DSEVENT          4\n#define TWRC_NOTDSEVENT       5\n#define TWRC_XFERDONE         6\n#define TWRC_ENDOFLIST        7 /* After MSG_GETNEXT if nothing left         */\n#define TWRC_INFONOTSUPPORTED 8\n#define TWRC_DATANOTAVAILABLE 9\n\n/* Condition Codes: Application gets these by doing DG_CONTROL DAT_STATUS MSG_GET.  */\n#define TWCC_CUSTOMBASE         0x8000\n\n#define TWCC_SUCCESS            0 /* It worked!                                */\n#define TWCC_BUMMER             1 /* Failure due to unknown causes             */\n#define TWCC_LOWMEMORY          2 /* Not enough memory to perform operation    */\n#define TWCC_NODS               3 /* No Data Source                            */\n#define TWCC_MAXCONNECTIONS     4 /* DS is connected to max possible applications */\n#define TWCC_OPERATIONERROR     5 /* DS or DSM reported error, application shouldn't */\n#define TWCC_BADCAP             6 /* Unknown capability                        */\n#define TWCC_BADPROTOCOL        9 /* Unrecognized MSG DG DAT combination       */\n#define TWCC_BADVALUE           10 /* Data parameter out of range              */\n#define TWCC_SEQERROR           11 /* DG DAT MSG out of expected sequence      */\n#define TWCC_BADDEST            12 /* Unknown destination Application/Source in DSM_Entry */\n#define TWCC_CAPUNSUPPORTED     13 /* Capability not supported by source            */\n#define TWCC_CAPBADOPERATION    14 /* Operation not supported by capability         */\n#define TWCC_CAPSEQERROR        15 /* Capability has dependency on other capability */\n/* Added 1.8 */\n#define TWCC_DENIED             16 /* File System operation is denied (file is protected) */\n#define TWCC_FILEEXISTS         17 /* Operation failed because file already exists. */\n#define TWCC_FILENOTFOUND       18 /* File not found */\n#define TWCC_NOTEMPTY           19 /* Operation failed because directory is not empty */\n#define TWCC_PAPERJAM           20  /* The feeder is jammed */\n#define TWCC_PAPERDOUBLEFEED    21  /* The feeder detected multiple pages */\n#define TWCC_FILEWRITEERROR     22  /* Error writing the file (meant for things like disk full conditions) */\n#define TWCC_CHECKDEVICEONLINE  23  /* The device went offline prior to or during this operation */\n\n\n/* bit patterns: for query the operation that are supported by the data source on a capability */\n/* Application gets these through DG_CONTROL/DAT_CAPABILITY/MSG_QUERYSUPPORT */\n/* Added 1.6 */\n#define TWQC_GET           0x0001\n#define TWQC_SET           0x0002\n#define TWQC_GETDEFAULT    0x0004\n#define TWQC_GETCURRENT    0x0008\n#define TWQC_RESET         0x0010\n\n\n/****************************************************************************\n * Entry Points                                                             *\n ****************************************************************************/\n\n/**********************************************************************\n * Function: DSM_Entry, the only entry point into the Data Source Manager.\n *\n * Parameters:\n *  pOrigin Identifies the source module of the message. This could\n *          identify an Application, a Source, or the Source Manager.\n *\n *  pDest   Identifies the destination module for the message.\n *          This could identify an application or a data source.\n *          If this is NULL, the message goes to the Source Manager.\n *\n *  DG      The Data Group.\n *          Example: DG_IMAGE.\n *\n *  DAT     The Data Attribute Type.\n *          Example: DAT_IMAGEMEMXFER.\n *\n *  MSG     The message.  Messages are interpreted by the destination module\n *          with respect to the Data Group and the Data Attribute Type.\n *          Example: MSG_GET.\n *\n *  pData   A pointer to the data structure or variable identified\n *          by the Data Attribute Type.\n *          Example: (TW_MEMREF)&ImageMemXfer\n *                   where ImageMemXfer is a TW_IMAGEMEMXFER structure.\n *\n * Returns:\n *  ReturnCode\n *         Example: TWRC_SUCCESS.\n *\n ********************************************************************/\n\n/* Don't mangle the name \"DSM_Entry\" if we're compiling in C++! */\n#ifdef  __cplusplus\nextern \"C\" {\n#endif  /* __cplusplus */\n\n#ifdef  _MSWIN_\nTW_UINT16 FAR PASCAL DSM_Entry( pTW_IDENTITY pOrigin,\n                                pTW_IDENTITY pDest,\n                                TW_UINT32    DG,\n                                TW_UINT16    DAT,\n                                TW_UINT16    MSG,\n                                TW_MEMREF    pData);\n\ntypedef TW_UINT16 (FAR PASCAL *DSMENTRYPROC)(pTW_IDENTITY, pTW_IDENTITY,\n                                             TW_UINT32,    TW_UINT16,\n                                             TW_UINT16,    TW_MEMREF);\n#else   /* _MSWIN_ */\n\n/*FAR PASCAL TW_UINT16 DSM_Entry( pTW_IDENTITY pOrigin,\n                                pTW_IDENTITY pDest,\n                                TW_UINT32    DG,\n                                TW_UINT16    DAT,\n                                TW_UINT16    MSG,\n                                TW_MEMREF    pData);*/\n\ntypedef TW_UINT16 (*DSMENTRYPROC)(pTW_IDENTITY, pTW_IDENTITY,\n                                  TW_UINT32,    TW_UINT16,\n                                  TW_UINT16,    TW_MEMREF);\n#endif  /* _MSWIN_ */\n\n#ifdef  __cplusplus\n}\n#endif  /* cplusplus */\n\n\n/**********************************************************************\n * Function: DS_Entry, the entry point provided by a Data Source.\n *\n * Parameters:\n *  pOrigin Identifies the source module of the message. This could\n *          identify an application or the Data Source Manager.\n *\n *  DG      The Data Group.\n *          Example: DG_IMAGE.\n *\n *  DAT     The Data Attribute Type.\n *          Example: DAT_IMAGEMEMXFER.\n *\n *  MSG     The message.  Messages are interpreted by the data source\n *          with respect to the Data Group and the Data Attribute Type.\n *          Example: MSG_GET.\n *\n *  pData   A pointer to the data structure or variable identified\n *          by the Data Attribute Type.\n *          Example: (TW_MEMREF)&ImageMemXfer\n *                   where ImageMemXfer is a TW_IMAGEMEMXFER structure.\n *\n * Returns:\n *  ReturnCode\n *          Example: TWRC_SUCCESS.\n *\n * Note:\n *  The DSPROC type is only used by an application when it calls\n *  a Data Source directly, bypassing the Data Source Manager.\n *\n ********************************************************************/\n/* Don't mangle the name \"DS_Entry\" if we're compiling in C++! */\n#ifdef  __cplusplus\nextern \"C\" {\n#endif  /* __cplusplus */\n#ifdef  _MSWIN_\n  TW_UINT16 DECLSPEC_EXPORT PASCAL DS_Entry (pTW_IDENTITY pOrigin,\n                                             TW_UINT32    DG,\n                                             TW_UINT16    DAT,\n                                             TW_UINT16    MSG,\n                                             TW_MEMREF    pData);\n\n  typedef TW_UINT16 (FAR PASCAL *DSENTRYPROC) (pTW_IDENTITY pOrigin,\n                                               TW_UINT32    DG,\n                                               TW_UINT16    DAT,\n                                               TW_UINT16    MSG,\n                                               TW_MEMREF    pData);\n#else   /* _MSWIN_ */\n/*FAR PASCAL TW_UINT16 DS_Entry( pTW_IDENTITY pOrigin,\n                               TW_UINT32    DG,\n                               TW_UINT16    DAT,\n                               TW_UINT16    MSG,\n                               TW_MEMREF    pData);*/\n\ntypedef TW_UINT16 (*DSENTRYPROC)(pTW_IDENTITY,\n                                  TW_UINT32,    TW_UINT16,\n                                  TW_UINT16,    TW_MEMREF);\n#endif  /* _MSWIN_ */\n#ifdef  __cplusplus\n}\n#endif  /* cplusplus */\n\n/* Definitions from TWAIN 2.x used by our builtin data sources */\n#define DAT_ENTRYPOINT 0x0403\n#define DF_DS2 0x40000000\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif  /* __cplusplus */\ntypedef TW_HANDLE (PASCAL *DSM_MEMALLOCATE)(TW_UINT32 _size);\ntypedef void (PASCAL *DSM_MEMFREE)(TW_HANDLE _handle);\ntypedef TW_MEMREF (PASCAL *DSM_MEMLOCK)(TW_HANDLE _handle);\ntypedef void (PASCAL *DSM_MEMUNLOCK)(TW_HANDLE _handle);\n#ifdef  __cplusplus\n}\n#endif  /* cplusplus */\n\ntypedef struct {\n    TW_UINT32 Size;\n    DSMENTRYPROC DSM_Entry;\n    DSM_MEMALLOCATE DSM_MemAllocate;\n    DSM_MEMFREE DSM_MemFree;\n    DSM_MEMLOCK DSM_MemLock;\n    DSM_MEMUNLOCK DSM_MemUnlock;\n} TW_ENTRYPOINT;\n\n/* The Twain structures must be packed on 2 byte alignment */\n#include \"poppack.h\"\n\n#endif  /* TWAIN */\n"
  },
  {
    "path": "wine/windows/txcoord.idl",
    "content": "/*\n * Copyright (C) 2013 Daniel Jeliński\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"transact.idl\";\nimport \"objidl.idl\";\n\ninterface ITransactionResourceAsync;\ninterface ITransactionLastResourceAsync;\ninterface ITransactionResource;\ninterface ITransactionEnlistmentAsync;\ninterface ITransactionLastEnlistmentAsync;\ninterface ITransactionExportFactory;\ninterface ITransactionImportWhereabouts;\ninterface ITransactionExport;\ninterface ITransactionImport;\ninterface ITipTransaction;\ninterface ITipHelper;\ninterface ITipPullSink;\ninterface IDtcNetworkAccessConfig;\ninterface IDtcNetworkAccessConfig2;\n\n[\n    object,\n    uuid(69e971f0-23ce-11cf-ad60-00aa00a74ccd)\n]\ninterface ITransactionResourceAsync : IUnknown {\n    HRESULT PrepareRequest([in]BOOL fRetaining,[in]DWORD grfRM,[in]BOOL fWantMoniker,[in]BOOL fSinglePhase);\n    HRESULT CommitRequest([in]DWORD grfRM,[in]XACTUOW *pNewUOW);\n    HRESULT AbortRequest([in]BOID *pboidReason,[in]BOOL fRetaining,[in]XACTUOW *pNewUOW);\n    HRESULT TMDown(void);\n}\n\n[\n    object,\n    uuid(c82bd532-5b30-11d3-8a91-00c04f79eb6d)\n]\ninterface ITransactionLastResourceAsync : IUnknown {\n    HRESULT DelegateCommit([in]DWORD grfRM);\n    HRESULT ForgetRequest([in]XACTUOW *pNewUOW);\n}\n\n[\n    object,\n    uuid(ee5ff7b3-4572-11d0-9452-00a0c905416e)\n]\ninterface ITransactionResource : IUnknown {\n    HRESULT PrepareRequest([in]BOOL fRetaining,[in]DWORD grfRM,[in]BOOL fWantMoniker,[in]BOOL fSinglePhase);\n    HRESULT CommitRequest([in]DWORD grfRM,[in]XACTUOW *pNewUOW);\n    HRESULT AbortRequest([in]BOID *pboidReason,[in]BOOL fRetaining,[in]XACTUOW *pNewUOW);\n    HRESULT TMDown(void);\n}\n\n[\n    object,\n    uuid(0fb15081-af41-11ce-bd2b-204c4f4f5020)\n]\ninterface ITransactionEnlistmentAsync : IUnknown {\n    HRESULT PrepareRequestDone([in]HRESULT hr,[in]IMoniker *pmk,[in]BOID *pboidReason);\n    HRESULT CommitRequestDone([in]HRESULT hr);\n    HRESULT AbortRequestDone([in]HRESULT hr);\n}\n\n[\n    object,\n    uuid(c82bd533-5b30-11d3-8a91-00c04f79eb6d)\n]\ninterface ITransactionLastEnlistmentAsync : IUnknown {\n    HRESULT TransactionOutcome([in]XACTSTAT XactStat,[in]BOID *pboidReason);\n}\n\n[\n    object,\n    uuid(e1cf9b53-8745-11ce-a9ba-00aa006c3706)\n]\ninterface ITransactionExportFactory : IUnknown {\n    HRESULT GetRemoteClassId([in]CLSID *pclsid);\n    HRESULT Create([in]ULONG cbWhereabouts,[in]byte *rgbWhereabouts,[out]ITransactionExport **ppExport);\n}\n\n[\n    object,\n    uuid(0141fda4-8fc0-11ce-bd18-204c4f4f5020)\n]\ninterface ITransactionImportWhereabouts : IUnknown {\n    HRESULT GetWhereaboutsSize([out]ULONG *pcbWhereabouts);\n    HRESULT GetWhereabouts([in]ULONG cbWhereabouts,[out]byte *rgbWhereabouts,[out]ULONG *pcbUsed);\n}\n\n[\n    object,\n    uuid(0141fda5-8fc0-11ce-bd18-204c4f4f5020)\n]\ninterface ITransactionExport : IUnknown {\n    HRESULT Export([in]IUnknown *punkTransaction,[out]ULONG *pcbTransactionCookie);\n    HRESULT GetTransactionCookie([in]IUnknown *punkTransaction,[in]ULONG cbTransactionCookie,[out]byte *rgbTransactionCookie,[out]ULONG *pcbUsed);\n}\n\n[\n    object,\n    uuid(e1cf9b5a-8745-11ce-a9ba-00aa006c3706)\n]\ninterface ITransactionImport : IUnknown {\n    HRESULT Import([in]ULONG cbTransactionCookie,[in]byte *rgbTransactionCookie,[in]IID *piid,[out,iid_is(piid)]void **ppvTransaction);\n}\n[\n    object,\n    uuid(17cf72d0-bac5-11d1-b1bf-00c04fc2f3ef)\n]\ninterface ITipTransaction : IUnknown {\n    HRESULT Push([in]char *i_pszRemoteTmUrl,[out]char **o_ppszRemoteTxUrl);\n    HRESULT GetTransactionUrl([out]char **o_ppszLocalTxUrl);\n}\n[\n    object,\n    uuid(17cf72d1-bac5-11d1-b1bf-00c04fc2f3ef)\n]\ninterface ITipHelper : IUnknown {\n    HRESULT Pull([in]char *i_pszTxUrl,[out]ITransaction **o_ppITransaction);\n    HRESULT PullAsync([in]char *i_pszTxUrl,[in]ITipPullSink *i_pTipPullSink,[out]ITransaction **o_ppITransaction);\n    HRESULT GetLocalTmUrl([out]char **o_ppszLocalTmUrl);\n}\n[\n    object,\n    uuid(17cf72d2-bac5-11d1-b1bf-00c04fc2f3ef)\n]\ninterface ITipPullSink : IUnknown {\n    HRESULT PullComplete([in]HRESULT i_hrPull);\n}\n[\n    object,\n    uuid(9797c15d-a428-4291-87b6-0995031a678d)\n]\ninterface IDtcNetworkAccessConfig : IUnknown {\n    HRESULT GetAnyNetworkAccess([out]BOOL *pbAnyNetworkAccess);\n    HRESULT SetAnyNetworkAccess([in]BOOL bAnyNetworkAccess);\n    HRESULT GetNetworkAdministrationAccess([out]BOOL *pbNetworkAdministrationAccess);\n    HRESULT SetNetworkAdministrationAccess([in]BOOL bNetworkAdministrationAccess);\n    HRESULT GetNetworkTransactionAccess([out]BOOL *pbNetworkTransactionAccess);\n    HRESULT SetNetworkTransactionAccess([in]BOOL bNetworkTransactionAccess);\n    HRESULT GetNetworkClientAccess([out]BOOL *pbNetworkClientAccess);\n    HRESULT SetNetworkClientAccess([in]BOOL bNetworkClientAccess);\n    HRESULT GetNetworkTIPAccess([out]BOOL *pbNetworkTIPAccess);\n    HRESULT SetNetworkTIPAccess([in]BOOL bNetworkTIPAccess);\n    HRESULT GetXAAccess([out]BOOL *pbXAAccess);\n    HRESULT SetXAAccess([in]BOOL bXAAccess);\n    HRESULT RestartDtcService(void);\n}\n\ntypedef enum AUTHENTICATION_LEVEL {\n    NO_AUTHENTICATION_REQUIRED,\n    INCOMING_AUTHENTICATION_REQUIRED,\n    MUTUAL_AUTHENTICATION_REQUIRED\n} AUTHENTICATION_LEVEL;\n\n[\n    object,\n    uuid(a7aa013b-eb7d-4f42-b41c-b2dec09ae034)\n]\ninterface IDtcNetworkAccessConfig2 : IDtcNetworkAccessConfig {\n    HRESULT GetNetworkInboundAccess([out]BOOL *pbInbound);\n    HRESULT GetNetworkOutboundAccess([out]BOOL *pbOutbound);\n    HRESULT SetNetworkInboundAccess([in]BOOL bInbound);\n    HRESULT SetNetworkOutboundAccess([in]BOOL bOutbound);\n    HRESULT GetAuthenticationLevel([out]AUTHENTICATION_LEVEL *pAuthLevel);\n    HRESULT SetAuthenticationLevel([in]AUTHENTICATION_LEVEL AuthLevel);\n}\n"
  },
  {
    "path": "wine/windows/txdtc.idl",
    "content": "/*\n * Copyright (C) 2013 Daniel Jeliński\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"txcoord.idl\";\n\ninterface IXATransLookup;\ninterface IXATransLookup2;\ninterface IResourceManagerSink;\ninterface IResourceManager;\ninterface ILastResourceManager;\ninterface IResourceManager2;\ninterface IXAConfig;\n/*interface IRMHelper;\ninterface IXAObtainRMInfo;*/\ninterface IResourceManagerFactory;\ninterface IResourceManagerFactory2;\ninterface IPrepareInfo;\ninterface IPrepareInfo2;\ninterface IGetDispenser;\ninterface ITransactionVoterBallotAsync2;\ninterface ITransactionVoterNotifyAsync2;\ninterface ITransactionVoterFactory2;\ninterface ITransactionPhase0EnlistmentAsync;\ninterface ITransactionPhase0NotifyAsync;\ninterface ITransactionPhase0Factory;\ninterface ITransactionTransmitter;\ninterface ITransactionTransmitterFactory;\ninterface ITransactionReceiver;\ninterface ITransactionReceiverFactory;\ninterface IDtcLuConfigure;\ninterface IDtcLuRecovery;\ninterface IDtcLuRecoveryFactory;\ninterface IDtcLuRecoveryInitiatedByDtcTransWork;\ninterface IDtcLuRecoveryInitiatedByDtcStatusWork;\ninterface IDtcLuRecoveryInitiatedByDtc;\ninterface IDtcLuRecoveryInitiatedByLuWork;\ninterface IDtcLuRecoveryInitiatedByLu;\ninterface IDtcLuRmEnlistment;\ninterface IDtcLuRmEnlistmentSink;\ninterface IDtcLuRmEnlistmentFactory;\ninterface IDtcLuSubordinateDtc;\ninterface IDtcLuSubordinateDtcSink;\ninterface IDtcLuSubordinateDtcFactory;\n\ncpp_quote(\"#define XACTTOMSG(dwXact) (dwXact-0x00040000+0x40000000)\")\ntypedef enum XACT_DTC_CONSTANTS {\n    XACT_E_CONNECTION_REQUEST_DENIED = 0x8004d100,\n    XACT_E_TOOMANY_ENLISTMENTS = 0x8004d101,\n    XACT_E_DUPLICATE_GUID = 0x8004d102,\n    XACT_E_NOTSINGLEPHASE = 0x8004d103,\n    XACT_E_RECOVERYALREADYDONE = 0x8004d104,\n    XACT_E_PROTOCOL = 0x8004d105,\n    XACT_E_RM_FAILURE = 0x8004d106,\n    XACT_E_RECOVERY_FAILED = 0x8004d107,\n    XACT_E_LU_NOT_FOUND = 0x8004d108,\n    XACT_E_DUPLICATE_LU = 0x8004d109,\n    XACT_E_LU_NOT_CONNECTED = 0x8004d10a,\n    XACT_E_DUPLICATE_TRANSID = 0x8004d10b,\n    XACT_E_LU_BUSY = 0x8004d10c,\n    XACT_E_LU_NO_RECOVERY_PROCESS = 0x8004d10d,\n    XACT_E_LU_DOWN = 0x8004d10e,\n    XACT_E_LU_RECOVERING = 0x8004d10f,\n    XACT_E_LU_RECOVERY_MISMATCH = 0x8004d110,\n    XACT_E_RM_UNAVAILABLE = 0x8004d111,\n    XACT_E_LRMRECOVERYALREADYDONE = 0x8004d112,\n    XACT_E_NOLASTRESOURCEINTERFACE = 0x8004d113,\n    XACT_S_NONOTIFY = 0x4d100,\n    XACT_OK_NONOTIFY = 0x4d101,\n    dwUSER_MS_SQLSERVER = 0xffff\n} XACT_DTC_CONSTANTS;\n\ncpp_quote(\"#ifndef _XID_T_DEFINED\")\ncpp_quote(\"#define _XID_T_DEFINED\")\ntypedef struct xid_t {\n    LONG32 formatID;\n    LONG32 gtrid_length;\n    LONG32 bqual_length;\n    char data[128 ];\n} XID;\ncpp_quote(\"#endif\")\n/* idl doesn't like this type\ncpp_quote(\"#ifndef _XA_SWITCH_T_DEFINED\")\ncpp_quote(\"#define _XA_SWITCH_T_DEFINED\")\ntypedef struct xa_switch_t {\n    char name[32 ];\n    LONG32 flags;\n    LONG32 version;\n    int (__cdecl *xa_open_entry)(char *__MIDL_0004,int __MIDL_0005,LONG32 __MIDL_0006);\n    int (__cdecl *xa_close_entry)(char *__MIDL_0008,int __MIDL_0009,LONG32 __MIDL_0010);\n    int (__cdecl *xa_start_entry)(XID *__MIDL_0012,int __MIDL_0013,LONG32 __MIDL_0014);\n    int (__cdecl *xa_end_entry)(XID *__MIDL_0016,int __MIDL_0017,LONG32 __MIDL_0018);\n    int (__cdecl *xa_rollback_entry)(XID *__MIDL_0020,int __MIDL_0021,LONG32 __MIDL_0022);\n    int (__cdecl *xa_prepare_entry)(XID *__MIDL_0024,int __MIDL_0025,LONG32 __MIDL_0026);\n    int (__cdecl *xa_commit_entry)(XID *__MIDL_0028,int __MIDL_0029,LONG32 __MIDL_0030);\n    int (__cdecl *xa_recover_entry)(XID *__MIDL_0032,LONG32 __MIDL_0033,int __MIDL_0034,LONG32 __MIDL_0035);\n    int (__cdecl *xa_forget_entry)(XID *__MIDL_0037,int __MIDL_0038,LONG32 __MIDL_0039);\n    int (__cdecl *xa_complete_entry)(int *__MIDL_0041,int *__MIDL_0042,int __MIDL_0043,LONG32 __MIDL_0044);\n} xa_switch_t;\ncpp_quote(\"#endif\")\n*/\n[\n    object,\n    uuid(f3b1f131-eeda-11ce-aed4-00aa0051e2c4)\n]\ninterface IXATransLookup : IUnknown {\n    HRESULT Lookup([out]ITransaction **ppTransaction);\n}\n[\n    object,\n    uuid(bf193c85-0d1a-4290-b88f-d2cb8873d1e7)\n]\ninterface IXATransLookup2 : IUnknown {\n    HRESULT Lookup([in]XID *pXID,[out]ITransaction **ppTransaction);\n}\n[\n    object,\n    uuid(0d563181-defb-11ce-aed1-00aa0051e2c4)\n]\ninterface IResourceManagerSink : IUnknown {\n    HRESULT TMDown(void);\n}\n[\n    object,\n    uuid(13741d21-87eb-11ce-8081-0080c758527e)\n]\ninterface IResourceManager : IUnknown {\n    HRESULT Enlist([in]ITransaction *pTransaction,[in]ITransactionResourceAsync *pRes,[out]XACTUOW *pUOW,[out]LONG *pisoLevel,[out]ITransactionEnlistmentAsync **ppEnlist);\n    HRESULT Reenlist([in]byte *pPrepInfo,[in]ULONG cbPrepInfo,[in]DWORD lTimeout,[out]XACTSTAT *pXactStat);\n    HRESULT ReenlistmentComplete(void);\n    HRESULT GetDistributedTransactionManager([in]REFIID iid,[out,iid_is(iid)]void **ppvObject);\n}\n[\n    object,\n    uuid(4d964ad4-5b33-11d3-8a91-00c04f79eb6d)\n]\ninterface ILastResourceManager : IUnknown {\n    HRESULT TransactionCommitted([in]byte *pPrepInfo,[in]ULONG cbPrepInfo);\n    HRESULT RecoveryDone(void);\n}\n[\n    object,\n    uuid(d136c69a-f749-11d1-8f47-00c04f8ee57d)\n]\ninterface IResourceManager2 : IResourceManager {\n    HRESULT Enlist2([in]ITransaction *pTransaction,[in]ITransactionResourceAsync *pResAsync,[out]XACTUOW *pUOW,[out]LONG *pisoLevel,[out]XID *pXid,[out]ITransactionEnlistmentAsync **ppEnlist);\n    HRESULT Reenlist2([in]XID *pXid,[in]DWORD dwTimeout,[out]XACTSTAT *pXactStat);\n}\n[\n    object,\n    uuid(c8a6e3a1-9a8c-11cf-a308-00a0c905416e)\n]\ninterface IXAConfig : IUnknown {\n    HRESULT Initialize([in]GUID clsidHelperDll);\n    HRESULT Terminate(void);\n}\n/* commented out because idl doesn't accept xa_switch_t type\n[\n    object,\n    uuid(E793F6D1-F53D-11cf-A60D-00A0C905416E)\n]\ninterface IRMHelper : IUnknown {\n    HRESULT RMCount([in]DWORD dwcTotalNumberOfRMs);\n    HRESULT RMInfo([in]xa_switch_t *pXa_Switch,[in]BOOL fCDeclCallingConv,[in]char *pszOpenString,[in]char *pszCloseString,[in]GUID guidRMRecovery);\n}\n[\n    object,\n    uuid(E793F6D2-F53D-11cf-A60D-00A0C905416E)\n]\ninterface IXAObtainRMInfo : IUnknown {\n    HRESULT ObtainRMInfo([in]IRMHelper *pIRMHelper);\n}*/\n[\n    object,\n    uuid(13741d20-87eb-11ce-8081-0080c758527e)\n]\ninterface IResourceManagerFactory : IUnknown {\n    HRESULT Create([in]GUID *pguidRM,[in]CHAR *pszRMName,[in]IResourceManagerSink *pIResMgrSink,[out]IResourceManager **ppResMgr);\n}\n[\n    object,\n    uuid(6b369c21-fbd2-11d1-8f47-00c04f8ee57d)\n]\ninterface IResourceManagerFactory2 : IResourceManagerFactory {\n    HRESULT CreateEx([in]GUID *pguidRM,[in]CHAR *pszRMName,[in]IResourceManagerSink *pIResMgrSink,[in]REFIID riidRequested,[out, iid_is(riidRequested)]void **ppvResMgr);\n}\n\n[\n    object,\n    uuid(80c7bfd0-87ee-11ce-8081-0080c758527e)\n]\ninterface IPrepareInfo : IUnknown {\n    HRESULT GetPrepareInfoSize([out]ULONG *pcbPrepInfo);\n    HRESULT GetPrepareInfo([out]byte *pPrepInfo);\n}\n[\n    object,\n    uuid(5fab2547-9779-11d1-b886-00c04fb9618a)\n]\ninterface IPrepareInfo2 : IUnknown {\n    HRESULT GetPrepareInfoSize([out]ULONG *pcbPrepInfo);\n    HRESULT GetPrepareInfo([in]ULONG cbPrepareInfo,[out]byte *pPrepInfo);\n}\n[\n    object,\n    uuid(c23cc370-87ef-11ce-8081-0080c758527e)\n]\ninterface IGetDispenser : IUnknown {\n    HRESULT GetDispenser([in]REFIID iid,[out,iid_is(iid)]void **ppvObject);\n}\n[\n    object,\n    uuid(5433376c-414d-11d3-b206-00c04fc2f3ef)\n]\ninterface ITransactionVoterBallotAsync2 : IUnknown {\n    HRESULT VoteRequestDone([in]HRESULT hr,[in]BOID *pboidReason);\n}\n[\n    object,\n    uuid(5433376b-414d-11d3-b206-00c04fc2f3ef)\n]\ninterface ITransactionVoterNotifyAsync2 : ITransactionOutcomeEvents {\n    HRESULT VoteRequest(void);\n}\n[\n    object,\n    uuid(5433376a-414d-11d3-b206-00c04fc2f3ef)\n]\ninterface ITransactionVoterFactory2 : IUnknown {\n    HRESULT Create([in]ITransaction *pTransaction,[in]ITransactionVoterNotifyAsync2 *pVoterNotify,[out]ITransactionVoterBallotAsync2 **ppVoterBallot);\n}\n[\n    object,\n    uuid(82dc88e1-a954-11d1-8f88-00600895e7d5)\n]\ninterface ITransactionPhase0EnlistmentAsync : IUnknown {\n    HRESULT Enable(void);\n    HRESULT WaitForEnlistment(void);\n    HRESULT Phase0Done(void);\n    HRESULT Unenlist(void);\n    HRESULT GetTransaction([out]ITransaction **ppITransaction);\n}\n[\n    object,\n    uuid(ef081809-0c76-11d2-87a6-00c04f990f34)\n]\ninterface ITransactionPhase0NotifyAsync : IUnknown {\n    HRESULT Phase0Request([in]BOOL fAbortingHint);\n    HRESULT EnlistCompleted([in]HRESULT status);\n}\n[\n    object,\n    uuid(82dc88e0-a954-11d1-8f88-00600895e7d5)\n]\ninterface ITransactionPhase0Factory : IUnknown {\n    HRESULT Create([in]ITransactionPhase0NotifyAsync *pPhase0Notify,[out]ITransactionPhase0EnlistmentAsync **ppPhase0Enlistment);\n}\n[\n    object,\n    uuid(59313e01-b36c-11cf-a539-00aa006887c3)\n]\ninterface ITransactionTransmitter : IUnknown {\n    HRESULT Set([in]ITransaction *pTransaction);\n    HRESULT GetPropagationTokenSize([out]ULONG *pcbToken);\n    HRESULT MarshalPropagationToken([in]ULONG cbToken,[out]byte *rgbToken,[out]ULONG *pcbUsed);\n    HRESULT UnmarshalReturnToken([in]ULONG cbReturnToken,[in]byte *rgbReturnToken);\n    HRESULT Reset(void);\n}\n[\n    object,\n    uuid(59313e00-b36c-11cf-a539-00aa006887c3)\n]\ninterface ITransactionTransmitterFactory : IUnknown {\n    HRESULT Create([out]ITransactionTransmitter **ppTransmitter);\n}\n[\n    object,\n    uuid(59313e03-b36c-11cf-a539-00aa006887c3)\n]\ninterface ITransactionReceiver : IUnknown {\n    HRESULT UnmarshalPropagationToken([in]ULONG cbToken,[in]byte *rgbToken,[out]ITransaction **ppTransaction);\n    HRESULT GetReturnTokenSize([out]ULONG *pcbReturnToken);\n    HRESULT MarshalReturnToken([in]ULONG cbReturnToken,[out]byte *rgbReturnToken,[out]ULONG *pcbUsed);\n    HRESULT Reset(void);\n}\n[\n    object,\n    uuid(59313e02-b36c-11cf-a539-00aa006887c3)\n]\ninterface ITransactionReceiverFactory : IUnknown {\n    HRESULT Create([out]ITransactionReceiver **ppReceiver);\n}\n\ntypedef struct _ProxyConfigParams {\n    WORD wcThreadsMax;\n} PROXY_CONFIG_PARAMS;\n\n[\n    object,\n    uuid(4131e760-1aea-11d0-944b-00a0c905416e)\n]\ninterface IDtcLuConfigure : IUnknown {\n    HRESULT Add([in]byte *pucLuPair,[in]DWORD cbLuPair);\n    HRESULT Delete([in]byte *pucLuPair,[in]DWORD cbLuPair);\n}\n[\n    object,\n    uuid(ac2b8ad2-d6f0-11d0-b386-00a0c9083365)\n]\ninterface IDtcLuRecovery : IUnknown {\n}\n[\n    object,\n    uuid(4131e762-1aea-11d0-944b-00a0c905416e)\n]\ninterface IDtcLuRecoveryFactory : IUnknown {\n    HRESULT Create([in]byte *pucLuPair,[in]DWORD cbLuPair,[out]IDtcLuRecovery **ppRecovery);\n}\n\ntypedef enum _DtcLu_LocalRecovery_Work {\n    DTCINITIATEDRECOVERYWORK_CHECKLUSTATUS = 1,\n    DTCINITIATEDRECOVERYWORK_TRANS,\n    DTCINITIATEDRECOVERYWORK_TMDOWN\n} DTCINITIATEDRECOVERYWORK;\n\ntypedef enum _DtcLu_Xln {\n    DTCLUXLN_COLD = 1,\n    DTCLUXLN_WARM\n} DTCLUXLN;\n\ntypedef enum _DtcLu_Xln_Confirmation {\n    DTCLUXLNCONFIRMATION_CONFIRM = 1,\n    DTCLUXLNCONFIRMATION_LOGNAMEMISMATCH,\n    DTCLUXLNCONFIRMATION_COLDWARMMISMATCH,\n    DTCLUXLNCONFIRMATION_OBSOLETE\n} DTCLUXLNCONFIRMATION;\n\ntypedef enum _DtcLu_Xln_Response {\n    DTCLUXLNRESPONSE_OK_SENDOURXLNBACK = 1,\n    DTCLUXLNRESPONSE_OK_SENDCONFIRMATION,\n    DTCLUXLNRESPONSE_LOGNAMEMISMATCH,\n    DTCLUXLNRESPONSE_COLDWARMMISMATCH\n} DTCLUXLNRESPONSE;\n\ntypedef enum _DtcLu_Xln_Error {\n    DTCLUXLNERROR_PROTOCOL = 1,\n    DTCLUXLNERROR_LOGNAMEMISMATCH,\n    DTCLUXLNERROR_COLDWARMMISMATCH\n} DTCLUXLNERROR;\n\ntypedef enum _DtcLu_CompareState {\n    DTCLUCOMPARESTATE_COMMITTED = 1,\n    DTCLUCOMPARESTATE_HEURISTICCOMMITTED,\n    DTCLUCOMPARESTATE_HEURISTICMIXED,\n    DTCLUCOMPARESTATE_HEURISTICRESET,\n    DTCLUCOMPARESTATE_INDOUBT,\n    DTCLUCOMPARESTATE_RESET\n} DTCLUCOMPARESTATE;\n\ntypedef enum _DtcLu_CompareStates_Confirmation {\n    DTCLUCOMPARESTATESCONFIRMATION_CONFIRM = 1,\n    DTCLUCOMPARESTATESCONFIRMATION_PROTOCOL\n} DTCLUCOMPARESTATESCONFIRMATION;\n\ntypedef enum _DtcLu_CompareStates_Error {\n    DTCLUCOMPARESTATESERROR_PROTOCOL = 1\n} DTCLUCOMPARESTATESERROR;\n\ntypedef enum _DtcLu_CompareStates_Response {\n    DTCLUCOMPARESTATESRESPONSE_OK = 1,\n    DTCLUCOMPARESTATESRESPONSE_PROTOCOL\n} DTCLUCOMPARESTATESRESPONSE;\n\n[\n    object,\n    uuid(4131e765-1aea-11d0-944b-00a0c905416e)\n]\ninterface IDtcLuRecoveryInitiatedByDtcTransWork : IUnknown {\n    HRESULT GetLogNameSizes([out]DWORD *pcbOurLogName,[out]DWORD *pcbRemoteLogName);\n    HRESULT GetOurXln([out]DTCLUXLN *pXln,[in,out]unsigned char *pOurLogName,[in,out]unsigned char *pRemoteLogName,[out]DWORD *pdwProtocol);\n    HRESULT HandleConfirmationFromOurXln([in]DTCLUXLNCONFIRMATION Confirmation);\n    HRESULT HandleTheirXlnResponse([in]DTCLUXLN Xln,[in]unsigned char *pRemoteLogName,[in]DWORD cbRemoteLogName,[in]DWORD dwProtocol,[out]DTCLUXLNCONFIRMATION *pConfirmation);\n    HRESULT HandleErrorFromOurXln([in]DTCLUXLNERROR Error);\n    HRESULT CheckForCompareStates([out]BOOL *fCompareStates);\n    HRESULT GetOurTransIdSize([in,out]DWORD *pcbOurTransId);\n    HRESULT GetOurCompareStates([in,out]unsigned char *pOurTransId,[out]DTCLUCOMPARESTATE *pCompareState);\n    HRESULT HandleTheirCompareStatesResponse([in]DTCLUCOMPARESTATE CompareState,[out]DTCLUCOMPARESTATESCONFIRMATION *pConfirmation);\n    HRESULT HandleErrorFromOurCompareStates([in]DTCLUCOMPARESTATESERROR Error);\n    HRESULT ConversationLost(void);\n    HRESULT GetRecoverySeqNum([out]LONG *plRecoverySeqNum);\n    HRESULT ObsoleteRecoverySeqNum([in]LONG lNewRecoverySeqNum);\n}\n[\n    object,\n    uuid(4131e766-1aea-11d0-944b-00a0c905416e)\n]\ninterface IDtcLuRecoveryInitiatedByDtcStatusWork : IUnknown {\n    HRESULT HandleCheckLuStatus([in]LONG lRecoverySeqNum);\n}\n[\n    object,\n    uuid(4131e764-1aea-11d0-944b-00a0c905416e)\n]\n[local] interface IDtcLuRecoveryInitiatedByDtc : IUnknown {\n    HRESULT GetWork([in,out]DTCINITIATEDRECOVERYWORK *pWork,[in,out]void **ppv);\n}\n[\n    object,\n    uuid(ac2b8ad1-d6f0-11d0-b386-00a0c9083365)\n]\ninterface IDtcLuRecoveryInitiatedByLuWork : IUnknown {\n    HRESULT HandleTheirXln([in]LONG lRecoverySeqNum,[in]DTCLUXLN Xln,[in]unsigned char *pRemoteLogName,[in]DWORD cbRemoteLogName,[in]unsigned char *pOurLogName,[in]DWORD cbOurLogName,[in]DWORD dwProtocol,[out]DTCLUXLNRESPONSE *pResponse);\n    HRESULT GetOurLogNameSize([in,out]DWORD *pcbOurLogName);\n    HRESULT GetOurXln([out]DTCLUXLN *pXln,[in,out]unsigned char *pOurLogName,[out]DWORD *pdwProtocol);\n    HRESULT HandleConfirmationOfOurXln([in]DTCLUXLNCONFIRMATION Confirmation);\n    HRESULT HandleTheirCompareStates([in,out]unsigned char *pRemoteTransId,[in]DWORD cbRemoteTransId,[in]DTCLUCOMPARESTATE CompareState,[out]DTCLUCOMPARESTATESRESPONSE *pResponse,[out]DTCLUCOMPARESTATE *pCompareState);\n    HRESULT HandleConfirmationOfOurCompareStates([in]DTCLUCOMPARESTATESCONFIRMATION Confirmation);\n    HRESULT HandleErrorFromOurCompareStates([in]DTCLUCOMPARESTATESERROR Error);\n    HRESULT ConversationLost(void);\n}\n[\n    object,\n    uuid(4131e768-1aea-11d0-944b-00a0c905416e)\n]\ninterface IDtcLuRecoveryInitiatedByLu : IUnknown {\n    HRESULT GetObjectToHandleWorkFromLu([out]IDtcLuRecoveryInitiatedByLuWork **ppWork);\n}\n[\n    object,\n    uuid(4131e769-1aea-11d0-944b-00a0c905416e)\n]\ninterface IDtcLuRmEnlistment : IUnknown {\n    HRESULT Unplug([in]BOOL fConversationLost);\n    HRESULT BackedOut(void);\n    HRESULT BackOut(void);\n    HRESULT Committed(void);\n    HRESULT Forget(void);\n    HRESULT RequestCommit(void);\n}\n[\n    object,\n    uuid(4131e770-1aea-11d0-944b-00a0c905416e)\n]\ninterface IDtcLuRmEnlistmentSink : IUnknown {\n    HRESULT AckUnplug(void);\n    HRESULT TmDown(void);\n    HRESULT SessionLost(void);\n    HRESULT BackedOut(void);\n    HRESULT BackOut(void);\n    HRESULT Committed(void);\n    HRESULT Forget(void);\n    HRESULT Prepare(void);\n    HRESULT RequestCommit(void);\n}\n[\n    object,\n    uuid(4131e771-1aea-11d0-944b-00a0c905416e)\n]\ninterface IDtcLuRmEnlistmentFactory : IUnknown {\n    HRESULT Create([in]unsigned char *pucLuPair,[in]DWORD cbLuPair,[in]ITransaction *pITransaction,[in]unsigned char *pTransId,[in]DWORD cbTransId,[in]IDtcLuRmEnlistmentSink *pRmEnlistmentSink,[in,out]IDtcLuRmEnlistment **ppRmEnlistment);\n}\n[\n    object,\n    uuid(4131e773-1aea-11d0-944b-00a0c905416e)\n]\ninterface IDtcLuSubordinateDtc : IUnknown {\n    HRESULT Unplug([in]BOOL fConversationLost);\n    HRESULT BackedOut(void);\n    HRESULT BackOut(void);\n    HRESULT Committed(void);\n    HRESULT Forget(void);\n    HRESULT Prepare(void);\n    HRESULT RequestCommit(void);\n}\n[\n    object,\n    uuid(4131e774-1aea-11d0-944b-00a0c905416e)\n]\ninterface IDtcLuSubordinateDtcSink : IUnknown {\n    HRESULT AckUnplug(void);\n    HRESULT TmDown(void);\n    HRESULT SessionLost(void);\n    HRESULT BackedOut(void);\n    HRESULT BackOut(void);\n    HRESULT Committed(void);\n    HRESULT Forget(void);\n    HRESULT RequestCommit(void);\n}\n[\n    object,\n    uuid(4131e775-1aea-11d0-944b-00a0c905416e)\n]\ninterface IDtcLuSubordinateDtcFactory : IUnknown {\n    HRESULT Create([in]unsigned char *pucLuPair,[in]DWORD cbLuPair,[in]IUnknown *punkTransactionOuter,[in]ISOLEVEL isoLevel,[in]ULONG isoFlags,[in]ITransactionOptions *pOptions,[out]ITransaction **ppTransaction,[in]unsigned char *pTransId,[in]DWORD cbTransId,[in]IDtcLuSubordinateDtcSink *pSubordinateDtcSink,[in,out]IDtcLuSubordinateDtc **ppSubordinateDtc);\n}\n\n/* these GUIDs were found in mingw header, but without corresponding interface definitions\n  DEFINE_GUID(IID_IXAResourceManager,0x4131e751,0x1aea,0x11d0,0x94,0x4b,0x00,0xa0,0xc9,0x05,0x41,0x6e);\n  DEFINE_GUID(IID_IXAResourceManagerFactory,0x4131e750,0x1aea,0x11d0,0x94,0x4b,0x00,0xa0,0xc9,0x05,0x41,0x6e);\n  DEFINE_GUID(IID_IXATransaction,0x4131e752,0x1aea,0x11d0,0x94,0x4b,0x00,0xa0,0xc9,0x05,0x41,0x6e);\n*/\n"
  },
  {
    "path": "wine/windows/udpmib.h",
    "content": "/*\n * Copyright (C) 2003 Juan Lang\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __WINE_UDPMIB_H\n#define __WINE_UDPMIB_H\n\n#define TCPIP_OWNING_MODULE_SIZE 16\n\n\n/* UDP table */\n\ntypedef struct _MIB_UDPROW\n{\n    DWORD dwLocalAddr;\n    DWORD dwLocalPort;\n} MIB_UDPROW, *PMIB_UDPROW;\n\ntypedef struct _MIB_UDPTABLE\n{\n    DWORD      dwNumEntries;\n    MIB_UDPROW table[1];\n} MIB_UDPTABLE, *PMIB_UDPTABLE;\n\ntypedef struct _MIB_UDPROW_OWNER_PID\n{\n    DWORD dwLocalAddr;\n    DWORD dwLocalPort;\n    DWORD dwOwningPid;\n} MIB_UDPROW_OWNER_PID, *PMIB_UDPROW_OWNER_PID;\n\ntypedef struct _MIB_UDPTABLE_OWNER_PID\n{\n    DWORD                dwNumEntries;\n    MIB_UDPROW_OWNER_PID table[1];\n} MIB_UDPTABLE_OWNER_PID, *PMIB_UDPTABLE_OWNER_PID;\n\ntypedef struct _MIB_UDPROW_OWNER_MODULE\n{\n    DWORD         dwLocalAddr;\n    DWORD         dwLocalPort;\n    DWORD         dwOwningPid;\n    LARGE_INTEGER liCreateTimestamp;\n    __C89_NAMELESS union\n    {\n        __C89_NAMELESS struct\n        {\n            int SpecificPortBind:1;\n        } __C89_NAMELESSSTRUCTNAME;\n        int dwFlags;\n    } __C89_NAMELESSUNIONNAME;\n    ULONGLONG OwningModuleInfo[TCPIP_OWNING_MODULE_SIZE];\n} MIB_UDPROW_OWNER_MODULE, *PMIB_UDPROW_OWNER_MODULE;\n\ntypedef struct _MIB_UDPTABLE_OWNER_MODULE\n{\n    DWORD                   dwNumEntries;\n    MIB_UDPROW_OWNER_MODULE table[1];\n} MIB_UDPTABLE_OWNER_MODULE, *PMIB_UDPTABLE_OWNER_MODULE;\n\ntypedef struct _MIB_UDP6ROW\n{\n    IN6_ADDR dwLocalAddr;\n    DWORD    dwLocalScopeId;\n    DWORD    dwLocalPort;\n} MIB_UDP6ROW, *PMIB_UDP6ROW;\n\ntypedef struct _MIB_UDP6TABLE\n{\n    DWORD       dwNumEntries;\n    MIB_UDP6ROW table[1];\n} MIB_UDP6TABLE, *PMIB_UDP6TABLE;\n\ntypedef struct _MIB_UDP6ROW_OWNER_PID\n{\n    UCHAR ucLocalAddr[16];\n    DWORD dwLocalScopeId;\n    DWORD dwLocalPort;\n    DWORD dwOwningPid;\n} MIB_UDP6ROW_OWNER_PID, *PMIB_UDP6ROW_OWNER_PID;\n\ntypedef struct _MIB_UDP6TABLE_OWNER_PID\n{\n    DWORD                 dwNumEntries;\n    MIB_UDP6ROW_OWNER_PID table[1];\n} MIB_UDP6TABLE_OWNER_PID, *PMIB_UDP6TABLE_OWNER_PID;\n\ntypedef struct _MIB_UDP6ROW_OWNER_MODULE\n{\n    UCHAR         ucLocalAddr[16];\n    DWORD         dwLocalScopeId;\n    DWORD         dwLocalPort;\n    DWORD         dwOwningPid;\n    LARGE_INTEGER liCreateTimestamp;\n    __C89_NAMELESS union\n    {\n        __C89_NAMELESS struct\n        {\n            int SpecificPortBind:1;\n        } __C89_NAMELESSSTRUCTNAME;\n        int dwFlags;\n    } __C89_NAMELESSUNIONNAME;\n    ULONGLONG OwningModuleInfo[TCPIP_OWNING_MODULE_SIZE];\n} MIB_UDP6ROW_OWNER_MODULE, *PMIB_UDP6ROW_OWNER_MODULE;\n\ntypedef struct _MIB_UDP6TABLE_OWNER_MODULE\n{\n    DWORD                    dwNumEntries;\n    MIB_UDP6ROW_OWNER_MODULE table[1];\n} MIB_UDP6TABLE_OWNER_MODULE, *PMIB_UDP6TABLE_OWNER_MODULE;\n\n/* UDP statistics */\n\ntypedef struct _MIB_UDPSTATS\n{\n    DWORD dwInDatagrams;\n    DWORD dwNoPorts;\n    DWORD dwInErrors;\n    DWORD dwOutDatagrams;\n    DWORD dwNumAddrs;\n} MIB_UDPSTATS, *PMIB_UDPSTATS;\n\n#endif /* __WINE_UDPMIB_H */\n"
  },
  {
    "path": "wine/windows/uianimation.idl",
    "content": "/*\n * Copyright 2017 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\nimport \"wtypes.idl\";\nimport \"unknwn.idl\";\n\ninterface IUIAnimationStoryboard;\ninterface IUIAnimationVariable;\n\ntypedef DOUBLE UI_ANIMATION_SECONDS;\ntypedef struct { int _; } *UI_ANIMATION_KEYFRAME;\n\ntypedef enum\n{\n    UI_ANIMATION_MANAGER_IDLE,\n    UI_ANIMATION_MANAGER_BUSY\n} UI_ANIMATION_MANAGER_STATUS;\n\ntypedef enum\n{\n    UI_ANIMATION_ROUNDING_NEAREST,\n    UI_ANIMATION_ROUNDING_FLOOR,\n    UI_ANIMATION_ROUNDING_CEILING\n} UI_ANIMATION_ROUNDING_MODE;\n\ntypedef enum\n{\n    UI_ANIMATION_SCHEDULING_UNEXPECTED_FAILURE,\n    UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY,\n    UI_ANIMATION_SCHEDULING_ALREADY_SCHEDULED,\n    UI_ANIMATION_SCHEDULING_SUCCEEDED,\n    UI_ANIMATION_SCHEDULING_DEFERRED\n} UI_ANIMATION_SCHEDULING_RESULT;\n\ntypedef enum\n{\n    UI_ANIMATION_STORYBOARD_BUILDING,\n    UI_ANIMATION_STORYBOARD_SCHEDULED,\n    UI_ANIMATION_STORYBOARD_CANCELLED,\n    UI_ANIMATION_STORYBOARD_PLAYING,\n    UI_ANIMATION_STORYBOARD_TRUNCATED,\n    UI_ANIMATION_STORYBOARD_FINISHED,\n    UI_ANIMATION_STORYBOARD_READY,\n    UI_ANIMATION_STORYBOARD_INSUFFICIENT_PRIORITY\n} UI_ANIMATION_STORYBOARD_STATUS;\n\ntypedef enum\n{\n    UI_ANIMATION_UPDATE_NO_CHANGE,\n    UI_ANIMATION_UPDATE_VARIABLES_CHANGED,\n} UI_ANIMATION_UPDATE_RESULT;\n\ntypedef enum\n{\n    UI_ANIMATION_TIMER_CLIENT_IDLE,\n    UI_ANIMATION_TIMER_CLIENT_BUSY,\n} UI_ANIMATION_TIMER_CLIENT_STATUS;\n\ntypedef enum\n{\n    UI_ANIMATION_IDLE_BEHAVIOR_CONTINUE,\n    UI_ANIMATION_IDLE_BEHAVIOR_DISABLE,\n} UI_ANIMATION_IDLE_BEHAVIOR;\n\n[\n    local,\n    object,\n    uuid(783321ed-78a3-4366-b574-6af607a64788),\n    pointer_default(unique)\n]\ninterface IUIAnimationManagerEventHandler : IUnknown\n{\n    HRESULT OnManagerStatusChanged (\n        [in] UI_ANIMATION_MANAGER_STATUS status,\n        [in] UI_ANIMATION_MANAGER_STATUS prev_status);\n}\n\n[\n    local,\n    object,\n    uuid(6358b7ba-87d2-42d5-bf71-82e919dd5862),\n    pointer_default(unique)\n]\ninterface IUIAnimationVariableChangeHandler : IUnknown\n{\n    HRESULT OnValueChanged (\n        [in] IUIAnimationStoryboard *storyboard,\n        [in] IUIAnimationVariable *variable,\n        [in] DOUBLE value,\n        [in] DOUBLE prev_value);\n}\n\n[\n    local,\n    object,\n    uuid(bb3e1550-356e-44b0-99da-85ac6017865e),\n    pointer_default(unique)\n]\ninterface IUIAnimationVariableIntegerChangeHandler : IUnknown\n{\n    HRESULT OnIntegerValueChanged (\n        [in] IUIAnimationStoryboard *storyboard,\n        [in] IUIAnimationVariable *variable,\n        [in] INT32 value,\n        [in] INT32 prev_value);\n}\n\n[\n    local,\n    object,\n    uuid(3d5c9008-ec7c-4364-9f8a-9af3c58cbae6),\n    pointer_default(unique)\n]\ninterface IUIAnimationStoryboardEventHandler : IUnknown\n{\n    HRESULT OnStoryboardStatusChanged (\n        [in] IUIAnimationStoryboard *storyboard,\n        [in] UI_ANIMATION_STORYBOARD_STATUS status,\n        [in] UI_ANIMATION_STORYBOARD_STATUS prev_status);\n\n    HRESULT OnStoryboardUpdated ([in] IUIAnimationStoryboard *storyboard);\n}\n\n[\n    local,\n    object,\n    uuid(dc6ce252-f731-41cf-b610-614b6ca049ad),\n    pointer_default(unique)\n]\ninterface IUIAnimationTransition : IUnknown\n{\n    HRESULT SetInitialValue ([in] DOUBLE value);\n\n    HRESULT SetInitialVelocity ([in] DOUBLE velocity);\n\n    HRESULT IsDurationKnown ();\n\n    HRESULT GetDuration ([out, retval] UI_ANIMATION_SECONDS *duration);\n}\n\n[\n    local,\n    object,\n    uuid(8ceeb155-2849-4ce5-9448-91ff70e1e4d9),\n    pointer_default(unique)\n]\ninterface IUIAnimationVariable : IUnknown\n{\n    HRESULT GetValue ([out, retval] DOUBLE *value);\n\n    HRESULT GetFinalValue ([out, retval] DOUBLE *value);\n\n    HRESULT GetPreviousValue ([out, retval] DOUBLE *value);\n\n    HRESULT GetIntegerValue ([out, retval] INT32 *value);\n\n    HRESULT GetFinalIntegerValue ([out, retval] INT32 *value);\n\n    HRESULT GetPreviousIntegerValue ([out, retval] INT32 *value);\n\n    HRESULT GetCurrentStoryboard ([out, retval] IUIAnimationStoryboard **storyboard);\n\n    HRESULT SetLowerBound ([in] DOUBLE bound);\n\n    HRESULT SetUpperBound ([in] DOUBLE bound);\n\n    HRESULT SetRoundingMode ([in] UI_ANIMATION_ROUNDING_MODE mode);\n\n    HRESULT SetTag (\n        [in] IUnknown *object,\n        [in] UINT32 id);\n\n    HRESULT GetTag (\n        [out] IUnknown **object,\n        [out] UINT32 *id);\n\n    HRESULT SetVariableChangeHandler ([in, unique] IUIAnimationVariableChangeHandler *handler);\n\n    HRESULT SetVariableIntegerChangeHandler ([in, unique] IUIAnimationVariableIntegerChangeHandler *handler);\n}\n\n[\n    local,\n    object,\n    uuid(a8ff128f-9bf9-4af1-9e67-e5e410defb84),\n    pointer_default(unique)\n]\ninterface IUIAnimationStoryboard : IUnknown\n{\n    HRESULT AddTransition (\n        [in] IUIAnimationVariable *variable,\n        [in] IUIAnimationTransition *transition);\n\n    HRESULT AddKeyframeAtOffset (\n        [in] UI_ANIMATION_KEYFRAME existingframe,\n        [in] UI_ANIMATION_SECONDS offset,\n        [out, retval] UI_ANIMATION_KEYFRAME *keyframe);\n\n    HRESULT AddKeyframeAfterTransition (\n        [in] IUIAnimationTransition *transition,\n        [out, retval] UI_ANIMATION_KEYFRAME *keyframe);\n\n    HRESULT AddTransitionAtKeyframe (\n        [in] IUIAnimationVariable *variable,\n        [in] IUIAnimationTransition *transition,\n        [in] UI_ANIMATION_KEYFRAME start_key);\n\n    HRESULT AddTransitionBetweenKeyframes (\n        [in] IUIAnimationVariable *variable,\n        [in] IUIAnimationTransition *transition,\n        [in] UI_ANIMATION_KEYFRAME start_key,\n        [in] UI_ANIMATION_KEYFRAME end_key);\n\n    HRESULT RepeatBetweenKeyframes (\n        [in] UI_ANIMATION_KEYFRAME start_key,\n        [in] UI_ANIMATION_KEYFRAME end_key,\n        [in] INT32 count);\n\n    HRESULT HoldVariable ([in] IUIAnimationVariable *variable);\n\n    HRESULT SetLongestAcceptableDelay ([in] UI_ANIMATION_SECONDS delay);\n\n    HRESULT Schedule (\n        [in] UI_ANIMATION_SECONDS now,\n        [out, defaultvalue(0)] UI_ANIMATION_SCHEDULING_RESULT *result);\n\n    HRESULT Conclude ();\n\n    HRESULT Finish ([in] UI_ANIMATION_SECONDS deadline);\n\n    HRESULT Abandon ();\n\n    HRESULT SetTag(\n        [in, unique] IUnknown *object,\n        [in] UINT32 id);\n\n    HRESULT GetTag (\n        [out] IUnknown **object,\n        [out] UINT32 *id);\n\n    HRESULT GetStatus ([out, retval] UI_ANIMATION_STORYBOARD_STATUS *status);\n\n    HRESULT GetElapsedTime ([out] UI_ANIMATION_SECONDS *elapsed);\n\n    HRESULT SetStoryboardEventHandler ([in, unique] IUIAnimationStoryboardEventHandler *handler);\n}\n\n[\n    local,\n    object,\n    uuid(bedb4db6-94fa-4bfb-a47f-ef2d9e408c25),\n    pointer_default(unique)\n]\ninterface IUIAnimationTimerClientEventHandler : IUnknown\n{\n    HRESULT OnTimerClientStatusChanged (\n        [in] UI_ANIMATION_TIMER_CLIENT_STATUS new_status,\n        [in] UI_ANIMATION_TIMER_CLIENT_STATUS previous_status);\n}\n\n[\n    local,\n    object,\n    uuid(195509b7-5d5e-4e3e-b278-ee3759b367ad),\n    pointer_default(unique)\n]\ninterface IUIAnimationTimerUpdateHandler : IUnknown\n{\n    HRESULT OnUpdate (\n        [in] UI_ANIMATION_SECONDS now,\n        [out, retval] UI_ANIMATION_UPDATE_RESULT *result);\n\n    HRESULT SetTimerClientEventHandler (\n        [in] IUIAnimationTimerClientEventHandler *handler);\n\n    HRESULT ClearTimerClientEventHandler ();\n}\n\n[\n    local,\n    object,\n    uuid(274a7dea-d771-4095-abbd-8df7abd23ce3),\n    pointer_default(unique)\n]\ninterface IUIAnimationTimerEventHandler : IUnknown\n{\n    HRESULT OnPreUpdate ();\n\n    HRESULT OnPostUpdate ();\n\n    HRESULT OnRenderingTooSlow (\n        [in] UINT32 fps);\n}\n\n[\n    local,\n    object,\n    uuid(6b0efad1-a053-41d6-9085-33a689144665),\n    pointer_default(unique)\n]\ninterface IUIAnimationTimer : IUnknown\n{\n    HRESULT SetTimerUpdateHandler (\n        [in, unique] IUIAnimationTimerUpdateHandler *handler,\n        [in] UI_ANIMATION_IDLE_BEHAVIOR idlebehavior);\n\n    HRESULT SetTimerEventHandler (\n        [in, unique] IUIAnimationTimerEventHandler *handler);\n\n    HRESULT Enable ();\n\n    HRESULT Disable ();\n\n    HRESULT IsEnabled ();\n\n    HRESULT GetTime (\n        [out] UI_ANIMATION_SECONDS *time);\n\n    HRESULT SetFrameRateThreshold (\n        [in] UINT32 fps);\n}\n\n[\n    uuid(44ca24db-1a92-4149-bab5-fb14d64b401e),\n    version(1.0)\n]\nlibrary UIAnimation\n{\n    [\n        uuid(bfcd4a0c-06b6-4384-b768-0daa792c380e)\n    ]\n    coclass UIAnimationTimer\n    {\n        [default] interface IUIAnimationTimer;\n    }\n}\n"
  },
  {
    "path": "wine/windows/uiautomation.h",
    "content": "/*\n * Copyright 2012 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <uiautomationcore.h>\n#include <uiautomationclient.h>\n#include <uiautomationcoreapi.h>\n"
  },
  {
    "path": "wine/windows/uiautomationclient.idl",
    "content": "/*\n * Copyright 2012 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#define DO_NO_IMPORTS\nimport \"uiautomationcore.idl\";\n\n[\n    uuid(944de083-8fb8-45cf-bcb7-c477acb2f897),\n    lcid(0),\n    version(1.0)\n]\nlibrary UIAutomationClient {\n    importlib (\"stdole2.tlb\");\n\n    /* FIXME: Uncomment when properly supported in widl\n    [dllname(\"<no entry points>\")]\n    module UIA_PropertyIds\n    {\n    */\n        const long UIA_RuntimeIdPropertyId              = 30000;\n        const long UIA_BoundingRectanglePropertyId      = 30001;\n        const long UIA_ProcessIdPropertyId              = 30002;\n        const long UIA_ControlTypePropertyId            = 30003;\n        const long UIA_LocalizedControlTypePropertyId   = 30004;\n        const long UIA_NamePropertyId                   = 30005;\n        const long UIA_AcceleratorKeyPropertyId         = 30006;\n        const long UIA_AccessKeyPropertyId              = 30007;\n        const long UIA_HasKeyboardFocusPropertyId       = 30008;\n        const long UIA_IsKeyboardFocusablePropertyId    = 30009;\n        const long UIA_IsEnabledPropertyId              = 30010;\n        const long UIA_AutomationIdPropertyId           = 30011;\n        const long UIA_ClassNamePropertyId              = 30012;\n        const long UIA_HelpTextPropertyId               = 30013;\n        const long UIA_ClickablePointPropertyId         = 30014;\n        const long UIA_CulturePropertyId                = 30015;\n        const long UIA_IsControlElementPropertyId       = 30016;\n        const long UIA_IsContentElementPropertyId       = 30017;\n        const long UIA_LabeledByPropertyId              = 30018;\n        const long UIA_IsPasswordPropertyId             = 30019;\n        const long UIA_NativeWindowHandlePropertyId     = 30020;\n        const long UIA_ItemTypePropertyId               = 30021;\n        const long UIA_IsOffscreenPropertyId            = 30022;\n        const long UIA_OrientationPropertyId            = 30023;\n        const long UIA_FrameworkIdPropertyId            = 30024;\n        const long UIA_IsRequiredForFormPropertyId      = 30025;\n        const long UIA_ItemStatusPropertyId             = 30026;\n        const long UIA_IsDockPatternAvailablePropertyId = 30027;\n        const long UIA_IsExpandCollapsePatternAvailablePropertyId = 30028;\n        const long UIA_IsGridItemPatternAvailablePropertyId       = 30029;\n        const long UIA_IsGridPatternAvailablePropertyId           = 30030;\n        const long UIA_IsInvokePatternAvailablePropertyId         = 30031;\n        const long UIA_IsMultipleViewPatternAvailablePropertyId   = 30032;\n        const long UIA_IsRangeValuePatternAvailablePropertyId     = 30033;\n        const long UIA_IsScrollPatternAvailablePropertyId         = 30034;\n        const long UIA_IsScrollItemPatternAvailablePropertyId     = 30035;\n        const long UIA_IsSelectionItemPatternAvailablePropertyId  = 30036;\n        const long UIA_IsSelectionPatternAvailablePropertyId      = 30037;\n        const long UIA_IsTablePatternAvailablePropertyId          = 30038;\n        const long UIA_IsTableItemPatternAvailablePropertyId      = 30039;\n        const long UIA_IsTextPatternAvailablePropertyId           = 30040;\n        const long UIA_IsTogglePatternAvailablePropertyId         = 30041;\n        const long UIA_IsTransformPatternAvailablePropertyId      = 30042;\n        const long UIA_IsValuePatternAvailablePropertyId          = 30043;\n        const long UIA_IsWindowPatternAvailablePropertyId         = 30044;\n        const long UIA_ValueValuePropertyId             = 30045;\n        const long UIA_ValueIsReadOnlyPropertyId        = 30046;\n        const long UIA_RangeValueValuePropertyId        = 30047;\n        const long UIA_RangeValueIsReadOnlyPropertyId   = 30048;\n        const long UIA_RangeValueMinimumPropertyId      = 30049;\n        const long UIA_RangeValueMaximumPropertyId      = 30050;\n        const long UIA_RangeValueLargeChangePropertyId  = 30051;\n        const long UIA_RangeValueSmallChangePropertyId  = 30052;\n        const long UIA_ScrollHorizontalScrollPercentPropertyId    = 30053;\n        const long UIA_ScrollHorizontalViewSizePropertyId         = 30054;\n        const long UIA_ScrollVerticalScrollPercentPropertyId      = 30055;\n        const long UIA_ScrollVerticalViewSizePropertyId           = 30056;\n        const long UIA_ScrollHorizontallyScrollablePropertyId     = 30057;\n        const long UIA_ScrollVerticallyScrollablePropertyId       = 30058;\n        const long UIA_SelectionSelectionPropertyId               = 30059;\n        const long UIA_SelectionCanSelectMultiplePropertyId       = 30060;\n        const long UIA_SelectionIsSelectionRequiredPropertyId     = 30061;\n        const long UIA_GridRowCountPropertyId           = 30062;\n        const long UIA_GridColumnCountPropertyId        = 30063;\n        const long UIA_GridItemRowPropertyId            = 30064;\n        const long UIA_GridItemColumnPropertyId         = 30065;\n        const long UIA_GridItemRowSpanPropertyId        = 30066;\n        const long UIA_GridItemColumnSpanPropertyId     = 30067;\n        const long UIA_GridItemContainingGridPropertyId = 30068;\n        const long UIA_DockDockPositionPropertyId       = 30069;\n        const long UIA_ExpandCollapseExpandCollapseStatePropertyId = 30070;\n        const long UIA_MultipleViewCurrentViewPropertyId           = 30071;\n        const long UIA_MultipleViewSupportedViewsPropertyId        = 30072;\n        const long UIA_WindowCanMaximizePropertyId                 = 30073;\n        const long UIA_WindowCanMinimizePropertyId                 = 30074;\n        const long UIA_WindowWindowVisualStatePropertyId           = 30075;\n        const long UIA_WindowWindowInteractionStatePropertyId      = 30076;\n        const long UIA_WindowIsModalPropertyId                     = 30077;\n        const long UIA_WindowIsTopmostPropertyId                   = 30078;\n        const long UIA_SelectionItemIsSelectedPropertyId           = 30079;\n        const long UIA_SelectionItemSelectionContainerPropertyId   = 30080;\n        const long UIA_TableRowHeadersPropertyId                   = 30081;\n        const long UIA_TableColumnHeadersPropertyId                = 30082;\n        const long UIA_TableRowOrColumnMajorPropertyId             = 30083;\n        const long UIA_TableItemRowHeaderItemsPropertyId           = 30084;\n        const long UIA_TableItemColumnHeaderItemsPropertyId        = 30085;\n        const long UIA_ToggleToggleStatePropertyId                 = 30086;\n        const long UIA_TransformCanMovePropertyId                  = 30087;\n        const long UIA_TransformCanResizePropertyId                = 30088;\n        const long UIA_TransformCanRotatePropertyId                = 30089;\n        const long UIA_IsLegacyIAccessiblePatternAvailablePropertyId  = 30090;\n        const long UIA_LegacyIAccessibleChildIdPropertyId          = 30091;\n        const long UIA_LegacyIAccessibleNamePropertyId             = 30092;\n        const long UIA_LegacyIAccessibleValuePropertyId            = 30093;\n        const long UIA_LegacyIAccessibleDescriptionPropertyId      = 30094;\n        const long UIA_LegacyIAccessibleRolePropertyId             = 30095;\n        const long UIA_LegacyIAccessibleStatePropertyId            = 30096;\n        const long UIA_LegacyIAccessibleHelpPropertyId             = 30097;\n        const long UIA_LegacyIAccessibleKeyboardShortcutPropertyId = 30098;\n        const long UIA_LegacyIAccessibleSelectionPropertyId        = 30099;\n        const long UIA_LegacyIAccessibleDefaultActionPropertyId    = 30100;\n        const long UIA_AriaRolePropertyId                          = 30101;\n        const long UIA_AriaPropertiesPropertyId                    = 30102;\n        const long UIA_IsDataValidForFormPropertyId                = 30103;\n        const long UIA_ControllerForPropertyId                     = 30104;\n        const long UIA_DescribedByPropertyId                       = 30105;\n        const long UIA_FlowsToPropertyId                           = 30106;\n        const long UIA_ProviderDescriptionPropertyId               = 30107;\n        const long UIA_IsItemContainerPatternAvailablePropertyId   = 30108;\n        const long UIA_IsVirtualizedItemPatternAvailablePropertyId = 30109;\n        const long UIA_IsSynchronizedInputPatternAvailablePropertyId  = 30110;\n    /*\n    }\n    */\n}\n"
  },
  {
    "path": "wine/windows/uiautomationcore.idl",
    "content": "/*\n * Copyright 2012 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#define DO_NO_IMPORTS\nimport \"oaidl.idl\";\nimport \"oleacc.idl\";\n\nenum ProviderOptions {\n    ProviderOptions_ClientSideProvider    = 0x0001,\n    ProviderOptions_ServerSideProvider    = 0x0002,\n    ProviderOptions_NonClientAreaProvider = 0x0004,\n    ProviderOptions_OverrideProvider      = 0x0008,\n    ProviderOptions_ProviderOwnsSetFocus  = 0x0010,\n    ProviderOptions_UseComThreading       = 0x0020\n};\n\ntypedef int PROPERTYID;\ntypedef int PATTERNID;\ntypedef int EVENTID;\ntypedef int TEXTATTRIBUTEID;\ntypedef int CONTROLTYPEID;\n\n[\n    version(1.0),\n    uuid(930299ce-9965-4dec-b0f4-a54848d4b667),\n    lcid(0),\n    hidden\n]\nlibrary UIA\n{\n    importlib(\"stdole2.tlb\");\n\n    [\n        object,\n        uuid(d6dd68d1-86fd-4332-8666-9abedea2d24c),\n        pointer_default(unique)\n    ]\n    interface IRawElementProviderSimple : IUnknown\n    {\n        [propget] HRESULT ProviderOptions([out, retval] enum ProviderOptions *pRetVal);\n\n        HRESULT GetPatternProvider(\n                [in] PATTERNID patternId,\n                [out, retval] IUnknown **pRetVal);\n\n        HRESULT GetPropertyValue(\n                [in] PROPERTYID propertyId,\n                [out, retval] VARIANT *pRetVal);\n\n        [propget] HRESULT HostRawElementProvider([out, retval] IRawElementProviderSimple **pRetVal);\n    }\n\n    [\n        object,\n        uuid(f8b80ada-2c44-48d0-89be-5ff23c9cd875),\n        pointer_default(unique),\n        oleautomation\n    ]\n    interface IAccessibleEx : IUnknown\n    {\n        HRESULT GetObjectForChild(\n                [in] long idChild,\n                [out, retval] IAccessibleEx **pRetVal);\n\n        HRESULT GetIAccessiblePair(\n                [out] IAccessible **ppAcc,\n                [out] long *pidChild);\n\n        HRESULT GetRuntimeId(\n                [out, retval] SAFEARRAY(int) *pRetVal);\n\n        HRESULT ConvertReturnedElement(\n                [in] IRawElementProviderSimple *pIn,\n                [out] IAccessibleEx **ppRetValOut);\n    }\n}\n"
  },
  {
    "path": "wine/windows/uiautomationcoreapi.h",
    "content": "/*\n * Copyright 2012 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _INC_UIAUTOMATIONCOREAPI\n#define _INC_UIAUTOMATIONCOREAPI\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define UIA_E_ELEMENTNOTENABLED       0x80040200\n#define UIA_E_ELEMENTNOTAVAILABLE     0x80040201\n#define UIA_E_NOCLICKABLEPOINT        0x80040202\n#define UIA_E_PROXYASSEMBLYNOTLOADED  0x80040203\n#define UIA_E_NOTSUPPORTED            0x80040204\n#define UIA_E_INVALIDOPERATION        0x80131509\n#define UIA_E_TIMEOUT                 0x80131505\n\n#define UiaAppendRuntimeId  3\n#define UiaRootObjectId     -25\n\nDECLARE_HANDLE(HUIANODE);\nDECLARE_HANDLE(HUIAPATTERNOBJECT);\nDECLARE_HANDLE(HUIATEXTRANGE);\nDECLARE_HANDLE(HUIAEVENT);\n\nenum AutomationIdentifierType\n{\n    AutomationIdentifierType_Property,\n    AutomationIdentifierType_Pattern,\n    AutomationIdentifierType_Event,\n    AutomationIdentifierType_ControlType,\n    AutomationIdentifierType_TextAttribute,\n    AutomationIdentifierType_LandmarkType,\n    AutomationIdentifierType_Annotation,\n    AutomationIdentifierType_Changes,\n    AutomationIdentifierType_Style\n};\n\nHRESULT WINAPI UiaGetReservedMixedAttributeValue(IUnknown **value);\nHRESULT WINAPI UiaGetReservedNotSupportedValue(IUnknown **value);\nint WINAPI UiaLookupId(enum AutomationIdentifierType type, const GUID *guid);\nBOOL WINAPI UiaPatternRelease(HUIAPATTERNOBJECT hobj);\nHRESULT WINAPI UiaRaiseAutomationEvent(IRawElementProviderSimple *provider, EVENTID id);\nLRESULT WINAPI UiaReturnRawElementProvider(HWND hwnd, WPARAM wParam, LPARAM lParam, IRawElementProviderSimple *elprov);\nBOOL WINAPI UiaTextRangeRelease(HUIATEXTRANGE hobj);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _INC_UIAUTOMATIONCOREAPI */\n"
  },
  {
    "path": "wine/windows/uiribbon.idl",
    "content": "/*\n * COM Classes for uiribbon\n *\n * Copyright 2017 Fabian Maurer\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"propsys.idl\";\n\n#ifndef __WIDL__\n#define threading(model)\n#endif\n\ntypedef enum UI_INVALIDATIONS {\n    UI_INVALIDATIONS_STATE         = 0x00000001,\n    UI_INVALIDATIONS_VALUE         = 0x00000002,\n    UI_INVALIDATIONS_PROPERTY      = 0x00000004,\n    UI_INVALIDATIONS_ALLPROPERTIES = 0x00000008,\n} UI_INVALIDATIONS;\n\ntypedef enum UI_EXECUTIONVERB {\n    UI_EXECUTIONVERB_EXECUTE,\n    UI_EXECUTIONVERB_PREVIEW,\n    UI_EXECUTIONVERB_CANCELPREVIEW,\n} UI_EXECUTIONVERB;\n\ntypedef enum UI_VIEWTYPE {\n    UI_VIEWTYPE_RIBBON = 1\n} UI_VIEWTYPE;\n\ntypedef enum UI_VIEWVERB {\n    UI_VIEWVERB_CREATE,\n    UI_VIEWVERB_DESTROY,\n    UI_VIEWVERB_SIZE,\n    UI_VIEWVERB_ERROR,\n} UI_VIEWVERB;\n\ntypedef enum UI_COMMANDTYPE {\n    UI_COMMANDTYPE_UNKNOWN,\n    UI_COMMANDTYPE_GROUP,\n    UI_COMMANDTYPE_ACTION,\n    UI_COMMANDTYPE_ANCHOR,\n    UI_COMMANDTYPE_CONTEXT,\n    UI_COMMANDTYPE_COLLECTION,\n    UI_COMMANDTYPE_COMMANDCOLLECTION,\n    UI_COMMANDTYPE_DECIMAL,\n    UI_COMMANDTYPE_BOOLEAN,\n    UI_COMMANDTYPE_FONT,\n    UI_COMMANDTYPE_RECENTITEMS,\n    UI_COMMANDTYPE_COLORANCHOR,\n    UI_COMMANDTYPE_COLORCOLLECTION,\n} UI_COMMANDTYPE;\n\ntypedef [v1_enum] enum UI_OWNERSHIP {\n    UI_OWNERSHIP_TRANSFER = 0,\n    UI_OWNERSHIP_COPY = 1,\n} UI_OWNERSHIP;\n\ntypedef [v1_enum] enum UI_COLLECTIONCHANGE {\n    UI_COLLECTIONCHANGE_INSERT = 0,\n    UI_COLLECTIONCHANGE_REMOVE = 1,\n    UI_COLLECTIONCHANGE_REPLACE = 2,\n    UI_COLLECTIONCHANGE_RESET = 3\n} UI_COLLECTIONCHANGE;\n\n[\n    object,\n    uuid(c205bb48-5b1c-4219-a106-15bd0a5f24e2),\n    local,\n    pointer_default(unique)\n]\ninterface IUISimplePropertySet : IUnknown\n{\n    HRESULT GetValue(\n        [in]  REFPROPERTYKEY key,\n        [out] PROPVARIANT *value\n    );\n}\n\n[\n    object,\n    uuid(75ae0a2d-dc03-4c9f-8883-069660d0beb6),\n    local,\n    pointer_default(unique)\n]\ninterface IUICommandHandler : IUnknown\n{\n    HRESULT Execute(\n        [in] UINT32 commandId,\n        [in] UI_EXECUTIONVERB verb,\n        [in] const PROPERTYKEY *key,\n        [in] const PROPVARIANT *currentValue,\n        [in] IUISimplePropertySet *commandExecutionProperties\n    );\n    HRESULT UpdateProperty(\n        [in] UINT32 commandId,\n        [in] REFPROPERTYKEY key,\n        [in] const PROPVARIANT *currentValue,\n        [out] PROPVARIANT *newValue\n    );\n}\n\n[\n    object,\n    uuid(d428903c-729a-491d-910d-682a08ff2522),\n    local,\n    pointer_default(unique)\n]\ninterface IUIApplication : IUnknown\n{\n    HRESULT OnViewChanged(\n        [in] UINT32      viewId,\n        [in] UI_VIEWTYPE typeID,\n        [in] IUnknown    *view,\n        [in] UI_VIEWVERB verb,\n        [in] INT32       uReasonCode\n    );\n    HRESULT OnCreateUICommand(\n        [in] UINT32 commandId,\n        [in] UI_COMMANDTYPE typeID,\n        [out] IUICommandHandler **commandHandler\n    );\n    HRESULT OnDestroyUICommand(\n        [in] UINT32 commandId,\n        [in] UI_COMMANDTYPE typeID,\n        [in] IUICommandHandler *commandHandler\n    );\n}\n\n[\n    object,\n    uuid(f4f0385d-6872-43a8-ad09-4c339cb3f5c5),\n    local,\n    pointer_default(unique)\n]\ninterface IUIFramework : IUnknown\n{\n    HRESULT Initialize(\n        [in] HWND frameWnd,\n        [in] IUIApplication *application\n    );\n    HRESULT Destroy(\n    );\n    HRESULT LoadUI(\n        [in] HINSTANCE instance,\n        [in] LPCWSTR resourceName\n    );\n    HRESULT GetView(\n        [in] UINT32 viewId,\n        [in] REFIID riid,\n        [out] void **ppv\n    );\n    HRESULT GetUICommandProperty(\n        [in] UINT32 commandId,\n        [in] REFPROPERTYKEY key,\n        [out] PROPVARIANT *value\n    );\n    HRESULT SetUICommandProperty(\n        [in] UINT32 commandId,\n        [in] REFPROPERTYKEY key,\n        [in] PROPVARIANT value\n    );\n    HRESULT InvalidateUICommand(\n        [in] UINT32 commandId,\n        [in] UI_INVALIDATIONS flags,\n        [in] const PROPERTYKEY *key\n    );\n    HRESULT FlushPendingInvalidations(\n    );\n    HRESULT SetModes(\n        INT32 iModes\n    );\n}\n\n[\n    object,\n    uuid(23c8c838-4de6-436b-ab01-5554bb7c30dd),\n    local,\n    pointer_default(unique)\n]\ninterface IUIImage : IUnknown\n{\n    HRESULT GetBitmap(\n        [out] HBITMAP *bitmap\n    );\n}\n\n[\n    object,\n    uuid(803982ab-370a-4f7e-a9e7-8784036a6e26),\n    local,\n    pointer_default(unique)\n]\ninterface IUIRibbon : IUnknown\n{\n    HRESULT GetHeight(\n        [out] UINT32 *cy\n    );\n    HRESULT LoadSettingsFromStream(\n        [in] IStream *pStream\n    );\n    HRESULT SaveSettingsToStream(\n        [in] IStream *pStream\n    );\n}\n\n[\n    object,\n    uuid(df4f45bf-6f9d-4dd7-9d68-d8f9cd18c4db),\n    local,\n    pointer_default(unique)\n]\ninterface IUICollection : IUnknown\n{\n    HRESULT GetCount(\n        [out] UINT32 *count\n    );\n    HRESULT GetItem(\n        [in] UINT32 index,\n        [out] IUnknown **item\n    );\n    HRESULT Add(\n        [in] IUnknown *item\n    );\n    HRESULT Insert(\n        [in] UINT32 index,\n        [in] IUnknown *item\n    );\n    HRESULT RemoveAt(\n        [in] UINT32 index\n    );\n    HRESULT Replace(\n        [in] UINT32 indexReplaced,\n        [in] IUnknown *itemReplaceWith\n    );\n    HRESULT Clear();\n}\n\n[\n    object,\n    uuid(eea11f37-7c46-437c-8e55-b52122b29293),\n    local,\n    pointer_default(unique)\n]\ninterface IUIContextualUI : IUnknown\n{\n    HRESULT ShowAtLocation(\n        [in] INT32 x,\n        [in] INT32 y\n    );\n}\n\n[\n    object,\n    uuid(6502ae91-a14d-44b5-bbd0-62aacc581d52),\n    local,\n    pointer_default(unique)\n]\ninterface IUICollectionChangedEvent : IUnknown\n{\n    HRESULT OnChanged(\n        [in] UI_COLLECTIONCHANGE action,\n        [in] UINT32 oldIndex,\n        [in] IUnknown *oldItem,\n        [in] UINT32 newIndex,\n        [in] IUnknown *newItem\n    );\n}\n\n[\n    object,\n    uuid(18aba7f3-4c1c-4ba2-bf6c-f5c3326fa816),\n    local,\n    pointer_default(unique)\n]\ninterface IUIImageFromBitmap : IUnknown\n{\n    HRESULT CreateImage(\n        [in] HBITMAP bitmap,\n        [in] UI_OWNERSHIP options,\n        [out] IUIImage **image\n    );\n}\n\n\n[\n    helpstring(\"UIRibbonFramework Object\"),\n    threading(apartment),\n    uuid(926749fa-2615-4987-8845-c33e65f2b957)\n]\ncoclass UIRibbonFramework { interface IUIFramework; }\n\n[\n    threading(apartment),\n    uuid(0f7434b6-59b6-4250-999e-d168d6ae4293)\n]\ncoclass UIRibbonImageFromBitmapFactory { interface IUIImageFromBitmap; }\n"
  },
  {
    "path": "wine/windows/unknwn.idl",
    "content": "/*\n * Copyright 2002 Ove Kaaven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef DO_NO_IMPORTS\nimport \"wtypes.idl\";\n#endif\n\ncpp_quote(\"#ifdef __WINESRC__\")\ncpp_quote(\"#define WIDL_C_INLINE_WRAPPERS\")\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#ifdef WIDL_C_INLINE_WRAPPERS\")\ncpp_quote(\"#define SAVE_WIDL_C_INLINE_WRAPPERS\")\ncpp_quote(\"#undef WIDL_C_INLINE_WRAPPERS\")\ncpp_quote(\"#endif\")\n\n[\n  local,\n  object,\n  uuid(00000000-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IUnknown\n{\n  typedef [unique] IUnknown *LPUNKNOWN;\n\n  HRESULT QueryInterface(\n    [in] REFIID riid,\n    [out, iid_is(riid)] void **ppvObject);\n  ULONG AddRef();\n  ULONG Release();\n}\n\ncpp_quote(\"HRESULT STDMETHODCALLTYPE IUnknown_QueryInterface_Proxy(IUnknown* This, REFIID riid, void **ppvObject);\")\ncpp_quote(\"void __RPC_STUB IUnknown_QueryInterface_Stub(IRpcStubBuffer* This, IRpcChannelBuffer* pRpcChannelBuffer,\")\ncpp_quote(\"     PRPC_MESSAGE pRpcMessage, DWORD* pdwStubPhase);\")\ncpp_quote(\"ULONG STDMETHODCALLTYPE IUnknown_AddRef_Proxy(IUnknown* This);\")\ncpp_quote(\"void __RPC_STUB IUnknown_AddRef_Stub(IRpcStubBuffer* This, IRpcChannelBuffer* pRpcChannelBuffer,\")\ncpp_quote(\"     PRPC_MESSAGE pRpcMessage, DWORD* pdwStubPhase);\")\ncpp_quote(\"ULONG STDMETHODCALLTYPE IUnknown_Release_Proxy(IUnknown* This);\")\ncpp_quote(\"void __RPC_STUB IUnknown_Release_Stub(IRpcStubBuffer* This, IRpcChannelBuffer* pRpcChannelBuffer,\")\ncpp_quote(\"     PRPC_MESSAGE pRpcMessage, DWORD* pdwStubPhase);\")\n\ncpp_quote(\"#ifdef SAVE_WIDL_C_INLINE_WRAPPERS\")\ncpp_quote(\"#define WIDL_C_INLINE_WRAPPERS\")\ncpp_quote(\"#endif\")\n\n[\n  object,\n  uuid(00000001-0000-0000-C000-000000000046),\n  pointer_default(unique)\n]\ninterface IClassFactory : IUnknown\n{\n  typedef [unique] IClassFactory *LPCLASSFACTORY;\n\n  [local]\n  HRESULT CreateInstance(\n    [in, unique] IUnknown *pUnkOuter,\n    [in] REFIID riid,\n    [out, iid_is(riid)] void **ppvObject);\n\n  [call_as(CreateInstance)]\n  HRESULT RemoteCreateInstance(\n    [in] REFIID riid,\n    [out, iid_is(riid)] IUnknown **ppvObject);\n\n  [local]\n  HRESULT LockServer(\n    [in] BOOL fLock);\n\n  [call_as(LockServer)]\n  HRESULT RemoteLockServer(\n    [in] BOOL fLock);\n}\n"
  },
  {
    "path": "wine/windows/urlhist.idl",
    "content": "/*\n * Copyright 2006 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"objidl.idl\";\nimport \"oleidl.idl\";\nimport \"oaidl.idl\";\nimport \"docobj.idl\";\n\ncpp_quote(\"#define STATURL_QUERYFLAG_ISCACHED  0x010000\")\ncpp_quote(\"#define STATURL_QUERYFLAG_NOURL     0x020000\")\ncpp_quote(\"#define STATURL_QUERYFLAG_NOTITLE   0x040000\")\ncpp_quote(\"#define STATURL_QUERYFLAG_TOPLEVEL  0x080000\")\n\ncpp_quote(\"#define STATURLFLAG_ISCACHED    0x0001\")\ncpp_quote(\"#define STATURLFLAG_ISTOPLEVEL  0x0002\")\n\ntypedef enum _ADDURL_FLAG\n{\n    ADDURL_FIRST                = 0,\n    ADDURL_ADDTOHISTORYANDCACHE = 0,\n    ADDURL_ADDTOCACHE           = 1,\n    ADDURL_Max                  = 0x7fffffff\n} ADDURL_FLAG;\n\n/*****************************************************************************\n *    IEnumSTATURL interface\n */\n[\n    object,\n    uuid(3c374a42-bae4-11cf-bf7d-00aa006946ee),\n    pointer_default(unique)\n]\ninterface IEnumSTATURL : IUnknown\n{\n    typedef [unique] IEnumSTATURL *LPENUMSTATURL;\n\n    typedef struct _STATURL\n    {\n        DWORD cbSize;\n        LPWSTR pwcsUrl;\n        LPWSTR pwcsTitle;\n        FILETIME ftLastVisited;\n        FILETIME ftLastUpdated;\n        FILETIME ftExpires;\n        DWORD dwFlags;\n    } STATURL, *LPSTATURL;\n\n    HRESULT Next(\n        [in] ULONG celt,\n        [in, out] LPSTATURL rgelt,\n        [in, out] ULONG *pceltFetched);\n\n    HRESULT Skip([in] ULONG celt);\n    HRESULT Reset();\n    HRESULT Clone([out] IEnumSTATURL **ppenum);\n\n    HRESULT SetFilter(\n        [in] LPCOLESTR poszFilter,\n        [in] DWORD dwFlags);\n}\n\n/*****************************************************************************\n *    IUrlHistoryStg interface\n */\n[\n    object,\n    uuid(3c374a41-bae4-11cf-bf7d-00aa006946ee),\n    pointer_default(unique)\n]\ninterface IUrlHistoryStg : IUnknown\n{\n    typedef [unique] IUrlHistoryStg *LPURLHISTORYSTG;\n\n    HRESULT AddUrl(\n        [in] LPCOLESTR pocsUrl,\n        [in, unique] LPCOLESTR pocsTitle,\n        [in] DWORD dwFlags);\n\n    HRESULT DeleteUrl(\n        [in] LPCOLESTR pocsUrl,\n        [in] DWORD dwFlags);\n\n    HRESULT QueryUrl(\n        [in] LPCOLESTR pocsUrl,\n        [in] DWORD dwFlags,\n        [in, out, unique] LPSTATURL lpSTATURL);\n\n    HRESULT BindToObject(\n        [in] LPCOLESTR pocsUrl,\n        [in] REFIID riid,\n        [out, iid_is(riid)] void **ppvOut);\n\n    HRESULT EnumUrls(\n        [out] IEnumSTATURL **ppEnum);\n}\n\n/*****************************************************************************\n *    IUrlHistoryStg2 interface\n */\n[\n    object,\n    uuid(afa0dc11-c313-11d0-831a-00c04fd5ae38),\n    pointer_default(unique)\n]\ninterface IUrlHistoryStg2 : IUrlHistoryStg\n{\n    typedef [unique] IUrlHistoryStg2 *LPURLHISTORYSTG2;\n\n    HRESULT AddUrlAndNotify(\n        [in] LPCOLESTR pocsUrl,\n        [in,unique] LPCOLESTR pocsTitle,\n        [in] DWORD dwFlags,\n        [in] BOOL fWriteHistory,\n        [in] IOleCommandTarget *poctNotify,\n        [in, unique] IUnknown *punkISFolder);\n\n    HRESULT ClearHistory();\n}\n\n/*****************************************************************************\n *    IUrlHistoryNotify interface\n */\n[\n    object,\n    uuid(bc40bec1-c493-11d0-831b-00C04fd5ae38),\n    pointer_default(unique)\n]\ninterface IUrlHistoryNotify : IOleCommandTarget\n{\n    typedef [unique] IUrlHistoryNotify *LPURLHISTORYNOTIFY;\n}\n"
  },
  {
    "path": "wine/windows/urlmon.idl",
    "content": "/*\n * Copyright (C) 2000 Ulrich Czekalla\n * Copyright (C) 2003 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"objidl.idl\";\nimport \"oleidl.idl\";\nimport \"servprov.idl\";\nimport \"msxml.idl\";\n\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef GetUserName\")\ncpp_quote(\"#undef SetPort\")\ncpp_quote(\"#endif\")\n\ninterface IInternetProtocolSink;\ninterface IUri;\n\n/*****************************************************************************\n * IInternet interface\n */\n[\n    object,\n    uuid(79eac9e0-baf9-11ce-8c82-00aa004ba90b),\n    pointer_default(unique),\n    local\n]\ninterface IInternet : IUnknown\n{\n    typedef [unique] IInternet *LPIINTERNET;\n}\n\n/*****************************************************************************\n * IBinding interface\n */\n[\n    object,\n    uuid(79eac9c0-baf9-11ce-8c82-00aa004ba90b),\n    pointer_default(unique)\n]\ninterface IBinding : IUnknown\n{\n    typedef [unique] IBinding *LPBINDING;\n\n    HRESULT Abort();\n    HRESULT Suspend();\n    HRESULT Resume();\n\n    HRESULT SetPriority(\n        [in] LONG nPriority);\n\n    HRESULT GetPriority(\n        [out] LONG * pnPriority);\n\n    [local]\n    HRESULT GetBindResult(\n        [out] CLSID *pclsidProtocol,\n        [out] DWORD *pdwResult,\n        [out] LPOLESTR *pszResult,\n        [in, out] DWORD *pdwReserved);\n\n    [call_as(GetBindResult)]\n    HRESULT RemoteGetBindResult(\n        [out] CLSID *pclsidProtocol,\n        [out] DWORD *pdwResult,\n        [out] LPOLESTR *pszResult,\n        [in] DWORD dwReserved);\n}\n\n\n/*****************************************************************************\n * IBindStatusCallback interface\n */\n[\n    object,\n    uuid(79eac9c1-baf9-11ce-8c82-00aa004ba90b),\n    pointer_default(unique)\n]\ninterface IBindStatusCallback : IUnknown\n{\n    typedef [unique] IBindStatusCallback *LPBINDSTATUSCALLBACK;\n\n    typedef enum\n    {\n        BINDVERB_GET    = 0x00000000,\n        BINDVERB_POST   = 0x00000001,\n        BINDVERB_PUT    = 0x00000002,\n        BINDVERB_CUSTOM = 0x00000003\n    } BINDVERB;\n\n    typedef enum\n    {\n        BINDINFOF_URLENCODESTGMEDDATA = 0x00000001,\n        BINDINFOF_URLENCODEDEXTRAINFO = 0x00000002\n    } BINDINFOF;\n\n    typedef enum\n    {\n        BINDF_ASYNCHRONOUS = 0x00000001,\n        BINDF_ASYNCSTORAGE = 0x00000002,\n        BINDF_NOPROGRESSIVERENDERING = 0x00000004,\n        BINDF_OFFLINEOPERATION = 0x00000008,\n        BINDF_GETNEWESTVERSION = 0x00000010,\n        BINDF_NOWRITECACHE = 0x00000020,\n        BINDF_NEEDFILE = 0x00000040,\n        BINDF_PULLDATA = 0x00000080,\n        BINDF_IGNORESECURITYPROBLEM = 0x00000100,\n        BINDF_RESYNCHRONIZE = 0x00000200,\n        BINDF_HYPERLINK = 0x00000400,\n        BINDF_NO_UI = 0x00000800,\n        BINDF_SILENTOPERATION = 0x00001000,\n        BINDF_PRAGMA_NO_CACHE = 0x00002000,\n        BINDF_GETCLASSOBJECT = 0x00004000,\n        BINDF_RESERVED_1 = 0x00008000,\n        BINDF_FREE_THREADED = 0x00010000,\n        BINDF_DIRECT_READ = 0x00020000,\n        BINDF_FORMS_SUBMIT = 0x00040000,\n        BINDF_GETFROMCACHE_IF_NET_FAIL = 0x00080000,\n        BINDF_FROMURLMON = 0x00100000,\n        BINDF_FWD_BACK = 0x00200000,\n        BINDF_PREFERDEFAULTHANDLER = 0x00400000,\n        BINDF_ENFORCERESTRICTED = 0x00800000\n    } BINDF;\n\n    typedef enum\n    {\n        URL_ENCODING_NONE         = 0x00000000,\n        URL_ENCODING_ENABLE_UTF8  = 0x10000000,\n        URL_ENCODING_DISABLE_UTF8 = 0x20000000\n    } URL_ENCODING;\n\n    typedef struct _tagBINDINFO\n    {\n        ULONG cbSize;\n        LPWSTR szExtraInfo;\n        STGMEDIUM stgmedData;\n        DWORD grfBindInfoF;\n        DWORD dwBindVerb;\n        LPWSTR szCustomVerb;\n        DWORD cbstgmedData;\n        DWORD dwOptions;\n        DWORD dwOptionsFlags;\n        DWORD dwCodePage;\n        SECURITY_ATTRIBUTES securityAttributes;\n        IID iid;\n        IUnknown *pUnk;\n        DWORD dwReserved;\n    } BINDINFO;\n\n    typedef struct _REMSECURITY_ATTRIBUTES\n    {\n        DWORD nLength;\n        DWORD lpSecurityDescriptor;\n        BOOL bInheritHandle;\n    } REMSECURITY_ATTRIBUTES, *PREMSECURITY_ATTRIBUTES, *LPREMSECURITY_ATTRIBUTES;\n\n    typedef struct _tagRemBINDINFO\n    {\n        ULONG cbSize;\n        LPWSTR szExtraInfo;\n        DWORD grfBindInfoF;\n        DWORD dwBindVerb;\n        LPWSTR szCustomVerb;\n        DWORD cbstgmedData;\n        DWORD dwOptions;\n        DWORD dwOptionsFlags;\n        DWORD dwCodePage;\n        REMSECURITY_ATTRIBUTES securityAttributes;\n        IID iid;\n        IUnknown *pUnk;\n        DWORD dwReserved;\n    } RemBINDINFO;\n\n    typedef struct tagRemFORMATETC\n    {\n        DWORD cfFormat;\n        DWORD ptd;\n        DWORD dwAspect;\n        LONG lindex;\n        DWORD tymed;\n    } RemFORMATETC, *LPREMFORMATETC;\n\n    typedef enum\n    {\n        BINDINFO_OPTIONS_WININETFLAG              = 0x00010000,\n        BINDINFO_OPTIONS_ENABLE_UTF8              = 0x00020000,\n        BINDINFO_OPTIONS_DISABLE_UTF8             = 0x00040000,\n        BINDINFO_OPTIONS_USE_IE_ENCODING          = 0x00080000,\n        BINDINFO_OPTIONS_BINDTOOBJECT             = 0x00100000,\n        BINDINFO_OPTIONS_SECURITYOPTOUT           = 0x00200000,\n        BINDINFO_OPTIONS_IGNOREMIMETEXTPLAIN      = 0x00400000,\n        BINDINFO_OPTIONS_USEBINDSTRINGCREDS       = 0x00800000,\n        BINDINFO_OPTIONS_IGNOREHTTPHTTPSREDIRECTS = 0x01000000,\n        BINDINFO_OPTIONS_IGNORE_SSLERRORS_ONCE    = 0x02000000,\n        BINDINFO_WPC_DOWNLOADBLOCKED              = 0x08000000,\n        BINDINFO_WPC_LOGGING_ENABLED              = 0x10000000,\n        BINDINFO_OPTIONS_ALLOWCONNECTDATA         = 0x20000000,\n        BINDINFO_OPTIONS_DISABLEAUTOREDIRECTS     = 0x40000000,\n        BINDINFO_OPTIONS_SHDOCVW_NAVIGATE    = (int)0x80000000\n    } BINDINFO_OPTIONS;\n\n    typedef enum\n    {\n        BSCF_FIRSTDATANOTIFICATION = 0x01,\n        BSCF_INTERMEDIATEDATANOTIFICATION = 0x02,\n        BSCF_LASTDATANOTIFICATION = 0x04,\n        BSCF_DATAFULLYAVAILABLE = 0x08,\n        BSCF_AVAILABLEDATASIZEUNKNOWN = 0x10,\n        BSCF_SKIPDRAINDATAFORFILEURLS = 0x20,\n        BSCF_64BITLENGTHDOWNLOAD = 0x40\n    } BSCF;\n\n    typedef enum BINDSTATUS\n    {\n\tBINDSTATUS_FINDINGRESOURCE = 1,\n\tBINDSTATUS_CONNECTING,\n\tBINDSTATUS_REDIRECTING,\n\tBINDSTATUS_BEGINDOWNLOADDATA,\n\tBINDSTATUS_DOWNLOADINGDATA,\n\tBINDSTATUS_ENDDOWNLOADDATA,\n\tBINDSTATUS_BEGINDOWNLOADCOMPONENTS,\n\tBINDSTATUS_INSTALLINGCOMPONENTS,\n\tBINDSTATUS_ENDDOWNLOADCOMPONENTS,\n\tBINDSTATUS_USINGCACHEDCOPY,\n\tBINDSTATUS_SENDINGREQUEST,\n\tBINDSTATUS_CLASSIDAVAILABLE,\n\tBINDSTATUS_MIMETYPEAVAILABLE,\n\tBINDSTATUS_CACHEFILENAMEAVAILABLE,\n\tBINDSTATUS_BEGINSYNCOPERATION,\n\tBINDSTATUS_ENDSYNCOPERATION,\n\tBINDSTATUS_BEGINUPLOADDATA,\n\tBINDSTATUS_UPLOADINGDATA,\n\tBINDSTATUS_ENDUPLOADINGDATA,\n\tBINDSTATUS_PROTOCOLCLASSID,\n\tBINDSTATUS_ENCODING,\n\tBINDSTATUS_VERIFIEDMIMETYPEAVAILABLE,\n\tBINDSTATUS_CLASSINSTALLLOCATION,\n\tBINDSTATUS_DECODING,\n\tBINDSTATUS_LOADINGMIMEHANDLER,\n\tBINDSTATUS_CONTENTDISPOSITIONATTACH,\n\tBINDSTATUS_FILTERREPORTMIMETYPE,\n\tBINDSTATUS_CLSIDCANINSTANTIATE,\n\tBINDSTATUS_IUNKNOWNAVAILABLE,\n\tBINDSTATUS_DIRECTBIND,\n\tBINDSTATUS_RAWMIMETYPE,\n\tBINDSTATUS_PROXYDETECTING,\n\tBINDSTATUS_ACCEPTRANGES,\n        BINDSTATUS_COOKIE_SENT,\n        BINDSTATUS_COMPACT_POLICY_RECEIVED,\n        BINDSTATUS_COOKIE_SUPPRESSED,\n        BINDSTATUS_COOKIE_STATE_UNKNOWN,\n        BINDSTATUS_COOKIE_STATE_ACCEPT,\n        BINDSTATUS_COOKIE_STATE_REJECT,\n        BINDSTATUS_COOKIE_STATE_PROMPT,\n        BINDSTATUS_COOKIE_STATE_LEASH,\n        BINDSTATUS_COOKIE_STATE_DOWNGRADE,\n        BINDSTATUS_POLICY_HREF,\n        BINDSTATUS_P3P_HEADER,\n        BINDSTATUS_SESSION_COOKIE_RECEIVED,\n        BINDSTATUS_PERSISTENT_COOKIE_RECEIVED,\n        BINDSTATUS_SESSION_COOKIES_ALLOWED,\n        BINDSTATUS_CACHECONTROL,\n        BINDSTATUS_CONTENTDISPOSITIONFILENAME,\n        BINDSTATUS_MIMETEXTPLAINMISMATCH,\n        BINDSTATUS_PUBLISHERAVAILABLE,\n        BINDSTATUS_DISPLAYNAMEAVAILABLE,\n        BINDSTATUS_SSLUX_NAVBLOCKED,\n        BINDSTATUS_SERVER_MIMETYPEAVAILABLE,\n        BINDSTATUS_SNIFFED_CLASSIDAVAILABLE,\n        BINDSTATUS_64BIT_PROGRESS,\n        BINDSTATUS_LAST = BINDSTATUS_64BIT_PROGRESS,\n        BINDSTATUS_RESERVED_0 = (BINDSTATUS_LAST+1),\n        BINDSTATUS_RESERVED_1 = (BINDSTATUS_RESERVED_0+1),\n        BINDSTATUS_RESERVED_2 = (BINDSTATUS_RESERVED_1+1),\n        BINDSTATUS_RESERVED_3 = (BINDSTATUS_RESERVED_2+1),\n        BINDSTATUS_RESERVED_4 = (BINDSTATUS_RESERVED_3+1),\n        BINDSTATUS_RESERVED_5 = (BINDSTATUS_RESERVED_4+1),\n        BINDSTATUS_RESERVED_6 = (BINDSTATUS_RESERVED_5+1),\n        BINDSTATUS_RESERVED_7 = (BINDSTATUS_RESERVED_6+1),\n        BINDSTATUS_RESERVED_8 = (BINDSTATUS_RESERVED_7+1),\n        BINDSTATUS_RESERVED_9 = (BINDSTATUS_RESERVED_8+1),\n        BINDSTATUS_LAST_PRIVATE = BINDSTATUS_RESERVED_9\n    } BINDSTATUS;\n\n\n    HRESULT OnStartBinding(\n        [in] DWORD dwReserved,\n        [in] IBinding * pib);\n\n    HRESULT GetPriority(\n        [out] LONG * pnPriority);\n\n    HRESULT OnLowResource(\n        [in] DWORD reserved);\n\n    HRESULT OnProgress(\n        [in] ULONG ulProgress,\n        [in] ULONG ulProgressMax,\n        [in] ULONG ulStatusCode,\n        [in, unique] LPCWSTR szStatusText);\n\n    HRESULT OnStopBinding(\n        [in] HRESULT hresult,\n        [in, unique] LPCWSTR szError);\n\n    [local]\n    HRESULT GetBindInfo(\n        [out] DWORD *grfBINDF,\n        [in, out, unique] BINDINFO * pbindinfo);\n\n    [call_as(GetBindInfo)]\n    HRESULT RemoteGetBindInfo(\n        [out] DWORD *grfBINDF,\n        [in, out, unique] RemBINDINFO * pbindinfo,\n        [in, out, unique] RemSTGMEDIUM* pstgmed);\n\n    [local]\n    HRESULT OnDataAvailable(\n        [in] DWORD grfBSCF,\n        [in] DWORD dwSize,\n        [in] FORMATETC* pformatetc,\n        [in] STGMEDIUM* pstgmed);\n\n    [call_as(OnDataAvailable)]\n    HRESULT RemoteOnDataAvailable(\n        [in] DWORD grfBSCF,\n        [in] DWORD dwSize,\n        [in] RemFORMATETC *pformatetc,\n        [in] RemSTGMEDIUM* pstgmed);\n\n    HRESULT OnObjectAvailable(\n        [in] REFIID riid,\n        [in, iid_is(riid)] IUnknown* punk);\n}\n\n/*****************************************************************************\n * IBindStatusCallbackEx interface\n */\n[\n    object,\n    uuid(aaa74ef9-8ee7-4659-88d9-f8c504da73cc),\n    pointer_default(unique)\n]\ninterface IBindStatusCallbackEx : IBindStatusCallback\n{\n    typedef [unique] IBindStatusCallbackEx *LPBINDSTATUSCALLBACKEX;\n\n    typedef enum {\n        BINDF2_DISABLEBASICOVERHTTP               = 0x00000001,\n        BINDF2_DISABLEAUTOCOOKIEHANDLING          = 0x00000002,\n        BINDF2_READ_DATA_GREATER_THAN_4GB         = 0x00000004,\n        BINDF2_DISABLE_HTTP_REDIRECT_XSECURITYID  = 0x00000008,\n        BINDF2_RESERVED_3                         = 0x20000000,\n        BINDF2_RESERVED_2                         = 0x40000000,\n        BINDF2_RESERVED_1                         = 0x80000000,\n    } BINDF2;\n\n    [local]\n    HRESULT GetBindInfoEx(\n            [out] DWORD *grfBINDF,\n            [in, out, unique] BINDINFO *pbindinfo,\n            [out] DWORD *grfBINDF2,\n            [out] DWORD *pdwReserved);\n\n    [call_as(GetBindInfoEx)]\n    HRESULT RemoteGetBindInfoEx(\n            [out] DWORD *grfBINDF,\n            [in, out, unique] RemBINDINFO *pbindinfo,\n            [in, out, unique] RemSTGMEDIUM *pstgmed,\n            [out] DWORD *grfBINDF2,\n            [out] DWORD *pdwReserved);\n}\n\n\n/*****************************************************************************\n * IAuthenticate interface\n */\n[\n    object,\n    uuid(79EAC9D0-BAf9-11CE-8C82-00AA004BA90B),\n    pointer_default(unique)\n]\ninterface IAuthenticate : IUnknown\n{\n    typedef [unique] IAuthenticate *LPAUTHENTICATION;\n\n    HRESULT Authenticate(\n        [out] HWND* phwnd,\n        [out] LPWSTR *pszUsername,\n        [out] LPWSTR *pszPassword);\n}\n\n/*****************************************************************************\n * IHttpNegotiate interface\n */\n[\n    object,\n    uuid(79EAC9D2-BAF9-11CE-8C82-00AA004BA90B),\n    pointer_default(unique)\n]\ninterface IHttpNegotiate : IUnknown\n{\n    typedef [unique] IHttpNegotiate *LPHTTPNEGOTIATE;\n\n    HRESULT BeginningTransaction(\n        [in] LPCWSTR szURL,\n        [in, unique] LPCWSTR szHeaders,\n        [in] DWORD dwReserved,\n        [out] LPWSTR *pszAdditionalHeaders);\n\n    HRESULT OnResponse(\n        [in] DWORD dwResponseCode,\n        [in, unique] LPCWSTR szResponseHeaders,\n        [in, unique] LPCWSTR szRequestHeaders,\n        [out] LPWSTR *pszAdditionalRequestHeaders);\n}\n\n/*****************************************************************************\n * IHttpNegotiate2 interface\n */\n[\n    object,\n    uuid(4F9F9FCB-E0F4-48eb-B7AB-FA2EA9365CB4),\n    pointer_default(unique)\n]\ninterface IHttpNegotiate2 : IHttpNegotiate\n{\n    typedef [unique] IHttpNegotiate2 *LPHTTPNEGOTIATE2;\n\n    HRESULT GetRootSecurityId(\n         [out, size_is(*pcbSecurityId)] BYTE *pbSecurityId,\n         [in, out] DWORD *pcbSecurityId,\n         [in] DWORD_PTR dwReserved);\n}\n\n/*****************************************************************************\n * IBindHost interface\n */\ncpp_quote(\"#define SID_IBindHost IID_IBindHost\")\ncpp_quote(\"#define SID_SBindHost IID_IBindHost\")\n[\n    object,\n    uuid(fc4801a1-2ba9-11cf-a229-00aa003d7352),\n    pointer_default(unique)\n]\ninterface IBindHost : IUnknown\n{\n    typedef [unique] IBindHost *LPBINDHOST;\n\n    HRESULT CreateMoniker(\n        [in] LPOLESTR szName,\n        [in] IBindCtx *pBC,\n        [out] IMoniker** ppmk,\n        [in] DWORD dwReserved);\n\n    [local]\n    HRESULT MonikerBindToStorage(\n        [in] IMoniker *pMk,\n        [in] IBindCtx *pBC,\n        [in] IBindStatusCallback *pBSC,\n        [in] REFIID riid,\n        [out] void **ppvObj);\n\n    [call_as(MonikerBindToStorage)]\n    HRESULT RemoteMonikerBindToStorage(\n        [in, unique] IMoniker *pMk,\n        [in, unique] IBindCtx *pBC,\n        [in, unique] IBindStatusCallback *pBSC,\n        [in] REFIID riid,\n        [out, iid_is(riid)] IUnknown **ppvObj);\n\n    [local]\n    HRESULT MonikerBindToObject(\n        [in] IMoniker *pMk,\n        [in] IBindCtx *pBC,\n        [in] IBindStatusCallback *pBSC,\n        [in] REFIID riid,\n        [out] void **ppvObj);\n\n    [call_as(MonikerBindToObject)]\n    HRESULT RemoteMonikerBindToObject(\n        [in, unique] IMoniker *pMk,\n        [in, unique] IBindCtx *pBC,\n        [in, unique] IBindStatusCallback *pBSC,\n        [in] REFIID riid,\n        [out, iid_is(riid)] IUnknown **ppvObj);\n}\n\n\n/*****************************************************************************\n * IWinInetInfo interface\n */\n[\n    object,\n    uuid(79eac9d6-bafa-11ce-8c82-00aa004ba90b),\n    pointer_default(unique)\n]\ninterface IWinInetInfo : IUnknown\n{\n    typedef [unique] IWinInetInfo *LPWININETINFO;\n\n    [local]\n    HRESULT QueryOption(\n        [in] DWORD dwOption,\n        [in, out, size_is(*pcbBuf)] LPVOID pBuffer,\n        [in, out] DWORD *pcbBuf);\n\n    [call_as(QueryOption)]\n    HRESULT RemoteQueryOption(\n        [in] DWORD  dwOption,\n        [in, out, size_is(*pcbBuf)] BYTE *pBuffer,\n        [in, out] DWORD *pcbBuf);\n}\n\n\n\n/*****************************************************************************\n * IWinInetHttpInfo interface\n */\n[\n    object,\n    uuid(79eac9d8-bafa-11ce-8c82-00aa004ba90b),\n    pointer_default(unique)\n]\ninterface IWinInetHttpInfo : IWinInetInfo\n{\n    typedef [unique] IWinInetHttpInfo *LPWININETHTTPINFO;\n\n    [local]\n    HRESULT QueryInfo(\n        [in] DWORD dwOption,\n        [in, out,size_is(*pcbBuf)] LPVOID pBuffer,\n        [in, out] DWORD *pcbBuf,\n        [in, out] DWORD *pdwFlags,\n        [in, out] DWORD *pdwReserved);\n\n    [call_as(QueryInfo)]\n    HRESULT RemoteQueryInfo(\n        [in] DWORD dwOption,\n        [in,out,size_is(*pcbBuf)] BYTE *pBuffer,\n        [in, out] DWORD *pcbBuf,\n        [in, out] DWORD *pdwFlags,\n        [in, out] DWORD *pdwReserved);\n}\n\n/*****************************************************************************\n * IWinInetHttpTimeouts interface\n */\n[\n    local,\n    object,\n    uuid(f286fa56-c1fd-4270-8e67-b3eb790a81e8),\n    pointer_default(unique)\n]\ninterface IWinInetHttpTimeouts : IUnknown\n{\n    HRESULT GetRequestTimeouts(\n        [out] DWORD *connect_timeout,\n        [out] DWORD *send_timeout,\n        [out] DWORD *receive_timeout);\n}\n\n/*****************************************************************************\n * IWindowForBindingUI interface\n */\n[\n    local,\n    object,\n    uuid(79eac9d5-bafa-11ce-8c82-00aa004ba90b),\n    pointer_default(unique)\n]\ninterface IWindowForBindingUI : IUnknown\n{\n    typedef [unique] IWindowForBindingUI *LPWINDOWFORBINDINGUI;\n\n    HRESULT GetWindow(\n        [in] REFGUID rguidReason,\n        [out] HWND *phwnd);\n}\n\n/*****************************************************************************\n * ICodeInstall interface\n */\n[\n    local,\n    object,\n    uuid(79eac9d1-baf9-11ce-8c82-00aa004ba90b),\n    pointer_default(unique)\n]\ninterface ICodeInstall : IWindowForBindingUI\n{\n    typedef [unique] ICodeInstall *LPCODEINSTALL;\n\n    typedef enum {\n        CIP_DISK_FULL,\n        CIP_ACCESS_DENIED,\n        CIP_NEWER_VERSION_EXISTS,\n        CIP_OLDER_VERSION_EXISTS,\n        CIP_NAME_CONFLICT,\n        CIP_TRUST_VERIFICATION_COMPONENT_MISSING,\n        CIP_EXE_SELF_REGISTERATION_TIMEOUT,\n        CIP_UNSAFE_TO_ABORT,\n        CIP_NEED_REBOOT,\n        CIP_NEED_REBOOT_UI_PERMISSION\n    } CIP_STATUS;\n\n    HRESULT OnCodeInstallProblem(\n            [in] ULONG ulStatusCode,\n            [in, unique] LPCWSTR szDestination,\n            [in, unique] LPCWSTR szSource,\n            [in] DWORD dwReserved);\n}\n\n/*****************************************************************************\n * IHttpSecurity interface\n */\n[\n    local,\n    object,\n    uuid(79eac9d7-bafa-11ce-8c82-00aa004ba90b),\n    pointer_default(unique)\n]\ninterface IHttpSecurity : IWindowForBindingUI\n{\n    typedef [unique] IHttpSecurity *LPHTTPSECURITY;\n\n    HRESULT OnSecurityProblem(\n        [in] DWORD dwProblem);\n}\n\n\n/*****************************************************************************\n * IPersistMoniker interface\n */\n[\n    object,\n    uuid(79eac9c9-baf9-11ce-8c82-00aa004ba90b),\n    pointer_default(unique)\n]\ninterface IPersistMoniker : IUnknown\n{\n    typedef [unique] IPersistMoniker *LPPERSISTMONIKER;\n\n    HRESULT GetClassID(\n        [out] CLSID *pClassID);\n\n    HRESULT IsDirty();\n\n    HRESULT Load(\n        [in] BOOL fFullyAvailable,\n        [in] IMoniker *pimkName,\n        [in] LPBC pibc,\n        [in] DWORD grfMode);\n\n    HRESULT Save(\n        [in] IMoniker *pimkName,\n        [in] LPBC pbc,\n        [in] BOOL fRemember);\n\n    HRESULT SaveCompleted(\n        [in] IMoniker *pimkName,\n        [in] LPBC pibc);\n\n    HRESULT GetCurMoniker(\n        [out] IMoniker **ppimkName);\n}\n\n/*****************************************************************************\n * IMonikerProp interface\n */\n[\n    object,\n    uuid(A5CA5F7F-1847-4D87-9C5B-918509F7511D),\n    pointer_default(unique)\n]\ninterface IMonikerProp : IUnknown\n{\n    typedef [unique] IMonikerProp *LPMONIKERPROP;\n\n    typedef enum {\n        MIMETYPEPROP        = 0,\n        USE_SRC_URL         = 1,\n        CLASSIDPROP         = 2,\n        TRUSTEDDOWNLOADPROP = 3,\n        POPUPLEVELPROP      = 4\n    } MONIKERPROPERTY;\n\n    HRESULT PutProperty(\n        [in] MONIKERPROPERTY mkp,\n        [in] LPCWSTR val);\n}\n\ncpp_quote(\"#ifndef _LPBINDPROTOCOL_DEFINED\")\ncpp_quote(\"#define _LPBINDPROTOCOL_DEFINED\")\n\n/*****************************************************************************\n * IBindProtocol interface\n */\n[\n    local,\n    object,\n    uuid(79EAC9CD-BAF9-11CE-8C82-00AA004BA90B),\n    pointer_default(unique)\n]\ninterface IBindProtocol : IUnknown\n{\n    typedef [unique] IBindProtocol *LPBINDPROTOCOL;\n\n    HRESULT CreateBinding(\n        [in] LPCWSTR szUrl,\n        [in] IBindCtx *pbc,\n        [out] IBinding **ppb);\n}\n\ncpp_quote(\"#endif /* !defined _LPBINDPROTOCOL_DEFINED */\")\n\n/*****************************************************************************\n * IInternetBindInfo interface\n */\n[\n    local,\n    object,\n    uuid(79EAC9E1-BAF9-11CE-8C82-00AA004BA90B),\n    pointer_default(unique)\n]\ninterface IInternetBindInfo : IUnknown\n{\n    typedef [unique] IInternetBindInfo *LPIINTERNETBINDINFO;\n\n    typedef enum tagBINDSTRING\n    {\n        BINDSTRING_HEADERS = 1,\n        BINDSTRING_ACCEPT_MIMES,\n        BINDSTRING_EXTRA_URL,\n        BINDSTRING_LANGUAGE,\n        BINDSTRING_USERNAME,\n        BINDSTRING_PASSWORD,\n        BINDSTRING_UA_PIXELS,\n        BINDSTRING_UA_COLOR,\n        BINDSTRING_OS,\n        BINDSTRING_USER_AGENT,\n        BINDSTRING_ACCEPT_ENCODINGS,\n        BINDSTRING_POST_COOKIE,\n        BINDSTRING_POST_DATA_MIME,\n        BINDSTRING_URL,\n        BINDSTRING_IID,\n        BINDSTRING_FLAG_BIND_TO_OBJECT,\n        BINDSTRING_PTR_BIND_CONTEXT,\n        BINDSTRING_XDR_ORIGIN,\n        BINDSTRING_DOWNLOADPATH,\n        BINDSTRING_ROOTDOC_URL,\n        BINDSTRING_INITIAL_FILENAME,\n        BINDSTRING_PROXY_USERNAME,\n        BINDSTRING_PROXY_PASSWORD,\n        BINDSTRING_ENTERPRISE_ID\n    } BINDSTRING;\n\n    HRESULT GetBindInfo(\n        [out] DWORD *grfBINDF,\n        [in, out, unique] BINDINFO *pbindinfo);\n\n    HRESULT GetBindString(\n        [in]      ULONG ulStringType,\n        [in, out] LPOLESTR *ppwzStr,\n        [in]      ULONG cEl,\n        [in, out] ULONG *pcElFetched);\n}\n\n/*****************************************************************************\n * IInternetPriority interface\n */\n[\n    local,\n    object,\n    uuid(79EAC9EB-BAF9-11CE-8C82-00AA004BA90B),\n    pointer_default(unique)\n]\ninterface IInternetPriority : IUnknown\n{\n    typedef [unique] IInternetPriority *LPIINTERNETPRIORITY;\n\n    HRESULT SetPriority([in] LONG nPriority);\n    HRESULT GetPriority([out] LONG *pnPriority);\n}\n\n/*****************************************************************************\n * IInternetProtocolRoot interface\n */\n[\n    local,\n    object,\n    uuid(79EAC9E3-BAF9-11CE-8C82-00AA004BA90B),\n    pointer_default(unique)\n]\ninterface IInternetProtocolRoot : IUnknown\n{\n    typedef [unique] IInternetProtocolRoot *LPIINTERNETPROTOCOLROOT;\n\n    typedef enum _tagPI_FLAGS\n    {\n        PI_PARSE_URL         = 0x00000001,\n        PI_FILTER_MODE       = 0x00000002,\n        PI_FORCE_ASYNC       = 0x00000004,\n        PI_USE_WORKERTHREAD  = 0x00000008,\n        PI_MIMEVERIFICATION  = 0x00000010,\n        PI_CLSIDLOOKUP       = 0x00000020,\n        PI_DATAPROGRESS      = 0x00000040,\n        PI_SYNCHRONOUS       = 0x00000080,\n        PI_APARTMENTTHREADED = 0x00000100,\n        PI_CLASSINSTALL      = 0x00000200,\n        PD_FORCE_SWITCH      = 0x00010000\n    } PI_FLAGS;\n\n    typedef struct _tagPROTOCOLDATA\n    {\n        DWORD grfFlags;\n        DWORD dwState;\n        LPVOID pData;\n        ULONG cbData;\n    } PROTOCOLDATA;\n\n    HRESULT Start(\n        [in] LPCWSTR szUrl,\n        [in] IInternetProtocolSink *pOIProtSink,\n        [in] IInternetBindInfo *pOIBindInfo,\n        [in] DWORD grfPI,\n        [in] HANDLE_PTR dwReserved);\n\n    HRESULT Continue(\n        [in] PROTOCOLDATA *pProtocolData);\n\n    HRESULT Abort(\n        [in] HRESULT hrReason,\n        [in] DWORD dwOptions);\n\n    HRESULT Terminate(\n        [in] DWORD dwOptions);\n\n    HRESULT Suspend();\n\n    HRESULT Resume();\n}\n\n/*****************************************************************************\n * IInternetProtocolSink interface\n */\n[\n    local,\n    object,\n    uuid(79EAC9E5-BAF9-11CE-8C82-00AA004BA90B),\n    pointer_default(unique)\n]\ninterface IInternetProtocolSink : IUnknown\n{\n    typedef [unique] IInternetProtocolSink *LPIINTERNETPROTOCOLSINK;\n\n    HRESULT Switch(\n        [in] PROTOCOLDATA *pProtocolData);\n\n    HRESULT ReportProgress(\n        [in] ULONG ulStatusCode,\n        [in] LPCWSTR szStatusText);\n\n    HRESULT ReportData(\n        [in] DWORD grfBSCF,\n        [in] ULONG ulProgress,\n        [in] ULONG ulProgressMax);\n\n    HRESULT ReportResult(\n        [in] HRESULT hrResult,\n        [in] DWORD dwError,\n        [in] LPCWSTR szResult);\n}\n\n/*****************************************************************************\n * IInternetProtocol interface\n */\n[\n    local,\n    object,\n    uuid(79EAC9E4-BAF9-11CE-8C82-00AA004BA90B),\n    pointer_default(unique)\n]\ninterface IInternetProtocol : IInternetProtocolRoot\n{\n    typedef [unique] IInternetProtocol *LPIINTERNETPROTOCOL;\n\n    HRESULT Read(\n        [in,out, size_is(cb), length_is(*pcbRead)] void *pv,\n        [in]  ULONG cb,\n        [out] ULONG *pcbRead);\n\n    HRESULT Seek(\n        [in]  LARGE_INTEGER dlibMove,\n        [in]  DWORD dwOrigin,\n        [out] ULARGE_INTEGER *plibNewPosition);\n\n    HRESULT LockRequest(\n        [in] DWORD dwOptions);\n\n    HRESULT UnlockRequest();\n}\n\n/*****************************************************************************\n * IInternetProtocolInfo interface\n */\n[\n    local,\n    object,\n    uuid(79eac9ec-baf9-11ce-8c82-00aa004ba90b),\n    pointer_default(unique)\n]\ninterface IInternetProtocolInfo : IUnknown\n{\n    typedef [unique] IInternetProtocolInfo *LPIINTERNETPROTOCOLINFO;\n\n    typedef enum _tagPARSEACTION\n    {\n        PARSE_CANONICALIZE = 1,\n        PARSE_FRIENDLY,\n        PARSE_SECURITY_URL,\n        PARSE_ROOTDOCUMENT,\n        PARSE_DOCUMENT,\n        PARSE_ANCHOR,\n        PARSE_ENCODE,\n        PARSE_DECODE,\n        PARSE_PATH_FROM_URL,\n        PARSE_URL_FROM_PATH,\n        PARSE_MIME,\n        PARSE_SERVER,\n        PARSE_SCHEMA,\n        PARSE_SITE,\n        PARSE_DOMAIN,\n        PARSE_LOCATION,\n        PARSE_SECURITY_DOMAIN,\n        PARSE_ESCAPE,\n        PARSE_UNESCAPE\n    } PARSEACTION;\n\n    typedef enum _tagPSUACTION\n    {\n        PSU_DEFAULT = 1,\n        PSU_SECURITY_URL_ONLY\n    } PSUACTION;\n\n    typedef enum _tagQUERYOPTION\n    {\n        QUERY_EXPIRATION_DATE = 1,\n        QUERY_TIME_OF_LAST_CHANGE,\n        QUERY_CONTENT_ENCODING,\n        QUERY_CONTENT_TYPE,\n        QUERY_REFRESH,\n        QUERY_RECOMBINE,\n        QUERY_CAN_NAVIGATE,\n        QUERY_USES_NETWORK,\n        QUERY_IS_CACHED,\n        QUERY_IS_INSTALLEDENTRY,\n        QUERY_IS_CACHED_OR_MAPPED,\n        QUERY_USES_CACHE,\n        QUERY_IS_SECURE,\n        QUERY_IS_SAFE,\n        QUERY_USES_HISTORYFOLDER,\n        QUERY_IS_CACHED_AND_USABLE_OFFLINE\n    } QUERYOPTION;\n\n    HRESULT ParseUrl(\n        [in] LPCWSTR pwzUrl,\n        [in] PARSEACTION ParseAction,\n        [in] DWORD dwParseFlags,\n        [out] LPWSTR pwzResult,\n        [in] DWORD cchResult,\n        [out] DWORD *pcchResult,\n        [in] DWORD dwReserved);\n\n    HRESULT CombineUrl(\n        [in] LPCWSTR pwzBaseUrl,\n        [in] LPCWSTR pwzRelativeUrl,\n        [in] DWORD dwCombineFlags,\n        [out] LPWSTR pwzResult,\n        [in] DWORD cchResult,\n        [out] DWORD *pcchResult,\n        [in] DWORD dwReserved);\n\n    HRESULT CompareUrl(\n        [in] LPCWSTR pwzUrl1,\n        [in] LPCWSTR pwzUrl2,\n        [in] DWORD dwCompareFlags);\n\n    HRESULT QueryInfo(\n        [in] LPCWSTR pwzUrl,\n        [in] QUERYOPTION OueryOption,\n        [in] DWORD dwQueryFlags,\n        [in, out,size_is(*pcbBuf)] LPVOID pBuffer,\n        [in] DWORD cbBuffer,\n        [in, out] DWORD *pcbBuf,\n        [in] DWORD dwReserved);\n}\n\n/*****************************************************************************\n * IInternetSession interface\n */\n[\n    local,\n    object,\n    uuid(79eac9e7-baf9-11ce-8c82-00aa004ba90b),\n    pointer_default(unique)\n]\ninterface IInternetSession : IUnknown\n{\n    typedef [unique] IInternetSession *LPIINTERNETSESSION;\n\n    typedef enum _tagOIBDG_FLAGS\n    {\n        OIBDG_APARTMENTTHREADED = 0x0100,\n        OIBDG_DATAONLY          = 0x1000\n    } OIBDG_FLAGS;\n\n    HRESULT RegisterNameSpace(\n        [in] IClassFactory *pCF,\n        [in] REFCLSID rclsid,\n        [in] LPCWSTR pwzProtocol,\n        [in] ULONG cPatterns,\n        [in] const LPCWSTR *ppwzPatterns,\n        [in] DWORD dwReserved);\n\n    HRESULT UnregisterNameSpace(\n        [in] IClassFactory *pCF,\n        [in] LPCWSTR pszProtocol);\n\n    HRESULT RegisterMimeFilter(\n        [in] IClassFactory *pCF,\n        [in] REFCLSID rclsid,\n        [in] LPCWSTR pwzType);\n\n    HRESULT UnregisterMimeFilter(\n        [in] IClassFactory *pCF,\n        [in] LPCWSTR pwzType);\n\n    HRESULT CreateBinding(\n        [in] LPBC pBC,\n        [in] LPCWSTR szUrl,\n        [in] IUnknown *pUnkOuter,\n        [out, unique] IUnknown **ppUnk,\n        [out, unique] IInternetProtocol **ppOInetProt,\n        [in] DWORD dwOption);\n\n    HRESULT SetSessionOption(\n        [in] DWORD dwOption,\n        [in] LPVOID pBuffer,\n        [in] DWORD dwBufferLength,\n        [in] DWORD dwReserved);\n}\n\n/*****************************************************************************\n * IInternetSecurityMgrSite interface\n */\n[\n    local,\n    object,\n    uuid(79eac9ed-baf9-11ce-8c82-00aa004ba90b),\n    pointer_default(unique)\n]\ninterface IInternetSecurityMgrSite : IUnknown\n{\n    HRESULT GetWindow(\n        [out] HWND *phwnd);\n\n    HRESULT EnableModeless(\n        [in] BOOL fEnable);\n}\n\n\n/*****************************************************************************\n * IInternetSecurityManager interface\n */\ncpp_quote(\"#define SID_SInternetSecurityManager IID_IInternetSecurityManager\")\n\n[\n    object,\n    uuid(79eac9ee-baf9-11ce-8c82-00aa004ba90b),\n    pointer_default(unique)\n]\ninterface IInternetSecurityManager : IUnknown\n{\n    HRESULT SetSecuritySite(\n        [in, unique] IInternetSecurityMgrSite *pSite);\n\n    HRESULT GetSecuritySite(\n        [out] IInternetSecurityMgrSite **ppSite);\n\n    HRESULT MapUrlToZone(\n        [in] LPCWSTR pwszUrl,\n        [out] DWORD *pdwZone,\n        [in] DWORD dwFlags);\n\ncpp_quote(\"#define MAX_SIZE_SECURITY_ID 512\")\n\n    HRESULT GetSecurityId(\n        [in] LPCWSTR pwszUrl,\n        [out, size_is(*pcbSecurityId)] BYTE *pbSecurityId,\n        [in, out] DWORD *pcbSecurityId,\n        [in] DWORD_PTR dwReserved);\n\n\n    typedef enum {\n        PUAF_DEFAULT                = 0x00,\n        PUAF_NOUI                   = 0x01,\n        PUAF_ISFILE                 = 0x02,\n        PUAF_WARN_IF_DENIED         = 0x04,\n        PUAF_FORCEUI_FOREGROUND     = 0x08,\n        PUAF_CHECK_TIPS             = 0x10\n    } PUAF;\n\n    HRESULT ProcessUrlAction(\n        [in] LPCWSTR pwszUrl,\n        [in] DWORD dwAction,\n        [out, size_is(cbPolicy)] BYTE *pPolicy,\n        [in] DWORD cbPolicy,\n        [in, unique] BYTE *pContext,\n        [in] DWORD cbContext,\n        [in] DWORD dwFlags,\n        [in] DWORD dwReserved);\n\n    HRESULT QueryCustomPolicy(\n        [in] LPCWSTR pwszUrl,\n        [in] REFGUID guidKey,\n        [out, size_is(,*pcbPolicy)] BYTE **ppPolicy,\n        [out] DWORD *pcbPolicy,\n        [in] BYTE *pContext,\n        [in] DWORD cbContext,\n        [in] DWORD dwReserved);\n\n    typedef enum {\n        SZM_CREATE = 0x0,\n        SZM_DELETE = 0x1\n    } SZM_FLAGS;\n\n    HRESULT SetZoneMapping(\n        [in] DWORD dwZone,\n        [in] LPCWSTR lpszPattern,\n        [in] DWORD dwFlags);\n\n    HRESULT GetZoneMappings(\n        [in] DWORD dwZone,\n        [out] IEnumString **ppenumString,\n        [in] DWORD dwFlags);\n}\n\n/*****************************************************************************\n * IInternetSecurityManagerEx interface\n */\ncpp_quote(\"#define SID_SInternetSecurityManagerEx IID_IInternetSecurityManagerEx\")\n\n[\n    object,\n    uuid(f164edf1-cc7c-4f0d-9a94-34222625C393),\n    pointer_default(unique)\n]\ninterface IInternetSecurityManagerEx : IInternetSecurityManager\n{\n    HRESULT ProcessUrlActionEx(\n        [in] LPCWSTR pwszUrl,\n        [in] DWORD dwAction,\n        [out, size_is(cbPolicy)] BYTE *pPolicy,\n        [in] DWORD cbPolicy,\n        [in] BYTE *pContext,\n        [in] DWORD cbContext,\n        [in] DWORD dwFlags,\n        [in] DWORD dwReserved,\n        [out] DWORD *pdwOutFlags);\n}\n\n/*****************************************************************************\n * IInternetSecurityManagerEx2 interface\n */\ncpp_quote(\"#define SID_SInternetSecurityManagerEx2 IID_IInternetSecurityManagerEx2\")\n\n[\n    object,\n    uuid(f1e50292-a795-4117-8e09-2b560a72ac60),\n    pointer_default(unique)\n]\ninterface IInternetSecurityManagerEx2 : IInternetSecurityManagerEx\n{\n    HRESULT MapUrlToZoneEx2(\n        [in] IUri *pUri,\n        [out] DWORD *pdwZone,\n        [in] DWORD dwFlags,\n        [out] LPWSTR *ppwszMappedUrl,\n        [out] DWORD *pdwOutFlags);\n\n    HRESULT ProcessUrlActionEx2(\n        [in] IUri *pUri,\n        [in] DWORD dwAction,\n        [out, size_is(cbPolicy)] BYTE *pPolicy,\n        [in] DWORD cbPolicy,\n        [in, unique] BYTE *pContext,\n        [in] DWORD cbContext,\n        [in] DWORD dwFlags,\n        [in] DWORD_PTR dwReserved,\n        [out] DWORD *pdwOutFlags);\n\n    HRESULT GetSecurityIdEx2(\n        [in] IUri *pUri,\n        [out, size_is(*pcbSecurityId)] BYTE *pbSecurityId,\n        [in, out] DWORD *pcbSecurityId,\n        [in] DWORD_PTR dwReserved);\n\n    HRESULT QueryCustomPolicyEx2(\n        [in] IUri *pUri,\n        [in] REFGUID guidKey,\n        [out, size_is(,*pcbPolicy)] BYTE **ppPolicy,\n        [out] DWORD *pcbPolicy,\n        [in] BYTE *pContext,\n        [in] DWORD cbContext,\n        [in] DWORD_PTR dwReserved);\n}\n\n/*****************************************************************************\n * IInternetHostSecurityManager interface\n */\ncpp_quote(\"#define SID_SInternetHostSecurityManager IID_IInternetHostSecurityManager\")\n\n[\n    local,\n    object,\n    uuid(3af280b6-cb3f-11d0-891e-00c04fb6bfc4),\n    pointer_default(unique)\n]\ninterface IInternetHostSecurityManager : IUnknown\n{\n    HRESULT GetSecurityId(\n            [out, size_is(*pcbSecurityId)] BYTE *pbSecurityId,\n            [in, out] DWORD *pcbSecurityId,\n            [in] DWORD_PTR dwReserved);\n\n    HRESULT ProcessUrlAction(\n            [in] DWORD dwAction,\n            [out, size_is(cbPolicy)] BYTE *pPolicy,\n            [in] DWORD cbPolicy,\n            [in] BYTE *pContext,\n            [in] DWORD cbContext,\n            [in] DWORD dwFlags,\n            [in] DWORD dwReserved);\n\n    HRESULT QueryCustomPolicy(\n            [in] REFGUID guidKey,\n            [out, size_is(,*pcbPolicy)] BYTE **ppPolicy,\n            [out] DWORD *pcbPolicy,\n            [in] BYTE *pContext,\n            [in] DWORD cbContext,\n            [in] DWORD dwReserved);\n}\n\ncpp_quote(\"#define URLACTION_MIN                        0x00001000\")\ncpp_quote(\"#define URLACTION_DOWNLOAD_MIN               0x00001000\")\ncpp_quote(\"#define URLACTION_DOWNLOAD_SIGNED_ACTIVEX    0x00001001\")\ncpp_quote(\"#define URLACTION_DOWNLOAD_UNSIGNED_ACTIVEX  0x00001004\")\ncpp_quote(\"#define URLACTION_DOWNLOAD_CURR_MAX          0x00001004\")\ncpp_quote(\"#define URLACTION_DOWNLOAD_MAX               0x000011ff\")\n\ncpp_quote(\"#define URLACTION_ACTIVEX_MIN                     0x00001200\")\ncpp_quote(\"#define URLACTION_ACTIVEX_RUN                     0x00001200\")\ncpp_quote(\"#define URLPOLICY_ACTIVEX_CHECK_LIST              0x00010000\")\ncpp_quote(\"#define URLACTION_ACTIVEX_OVERRIDE_OBJECT_SAFETY  0x00001201\")\ncpp_quote(\"#define URLACTION_ACTIVEX_OVERRIDE_DATA_SAFETY    0x00001202\")\ncpp_quote(\"#define URLACTION_ACTIVEX_OVERRIDE_SCRIPT_SAFETY  0x00001203\")\ncpp_quote(\"#define URLACTION_SCRIPT_OVERRIDE_SAFETY          0x00001401\")\ncpp_quote(\"#define URLACTION_ACTIVEX_CONFIRM_NOOBJECTSAFETY  0x00001204\")\ncpp_quote(\"#define URLACTION_ACTIVEX_TREATASUNTRUSTED        0x00001205\")\ncpp_quote(\"#define URLACTION_ACTIVEX_CURR_MAX                0x00001205\")\ncpp_quote(\"#define URLACTION_ACTIVEX_MAX                     0x000013ff\")\n\ncpp_quote(\"#define URLACTION_SCRIPT_MIN           0x00001400\")\ncpp_quote(\"#define URLACTION_SCRIPT_RUN           0x00001400\")\ncpp_quote(\"#define URLACTION_SCRIPT_JAVA_USE      0x00001402\")\ncpp_quote(\"#define URLACTION_SCRIPT_SAFE_ACTIVEX  0x00001405\")\ncpp_quote(\"#define URLACTION_CROSS_DOMAIN_DATA    0x00001406\")\ncpp_quote(\"#define URLACTION_SCRIPT_PASTE         0x00001407\")\ncpp_quote(\"#define URLACTION_SCRIPT_CURR_MAX      0x00001407\")\ncpp_quote(\"#define URLACTION_SCRIPT_MAX           0x000015ff\")\n\ncpp_quote(\"#define URLACTION_HTML_MIN                0x00001600\")\ncpp_quote(\"#define URLACTION_HTML_SUBMIT_FORMS       0x00001601\")\ncpp_quote(\"#define URLACTION_HTML_SUBMIT_FORMS_FROM  0x00001602\")\ncpp_quote(\"#define URLACTION_HTML_SUBMIT_FORMS_TO    0x00001603\")\ncpp_quote(\"#define URLACTION_HTML_FONT_DOWNLOAD      0x00001604\")\ncpp_quote(\"#define URLACTION_HTML_JAVA_RUN           0x00001605\")\ncpp_quote(\"#define URLACTION_HTML_USERDATA_SAVE      0x00001606\")\ncpp_quote(\"#define URLACTION_HTML_SUBFRAME_NAVIGATE  0x00001607\")\ncpp_quote(\"#define URLACTION_HTML_META_REFRESH       0x00001608\")\ncpp_quote(\"#define URLACTION_HTML_MIXED_CONTENT      0x00001609\")\ncpp_quote(\"#define URLACTION_HTML_MAX                0x000017ff\")\n\ncpp_quote(\"#define URLACTION_SHELL_MIN              0x00001800\")\ncpp_quote(\"#define URLACTION_SHELL_INSTALL_DTITEMS  0x00001800\")\ncpp_quote(\"#define URLACTION_SHELL_MOVE_OR_COPY     0x00001802\")\ncpp_quote(\"#define URLACTION_SHELL_FILE_DOWNLOAD    0x00001803\")\ncpp_quote(\"#define URLACTION_SHELL_VERB             0x00001804\")\ncpp_quote(\"#define URLACTION_SHELL_WEBVIEW_VERB     0x00001805\")\ncpp_quote(\"#define URLACTION_SHELL_CURR_MAX         0x00001805\")\ncpp_quote(\"#define URLACTION_SHELL_MAX              0x000019ff\")\n\ncpp_quote(\"#define URLACTION_NETWORK_MIN                  0x00001a00\")\ncpp_quote(\"#define URLACTION_CREDENTIALS_USE              0x00001a00\")\ncpp_quote(\"#define URLACTION_AUTHENTICATE_CLIENT          0x00001a01\")\ncpp_quote(\"#define URLACTION_COOKIES                      0x00001a02\")\ncpp_quote(\"#define URLACTION_COOKIES_SESSION              0x00001a03\")\ncpp_quote(\"#define URLACTION_CLIENT_CERT_PROMPT           0x00001a04\")\ncpp_quote(\"#define URLACTION_COOKIES_THIRD_PARTY          0x00001a05\")\ncpp_quote(\"#define URLACTION_COOKIES_SESSION_THIRD_PARTY  0x00001a06\")\ncpp_quote(\"#define URLACTION_COOKIES_ENABLED              0x00001a10\")\ncpp_quote(\"#define URLACTION_NETWORK_CURR_MAX             0x00001a10\")\ncpp_quote(\"#define URLACTION_NETWORK_MAX                  0x00001bff\")\n\ncpp_quote(\"#define URLACTION_JAVA_MIN          0x00001c00\")\ncpp_quote(\"#define URLACTION_JAVA_PERMISSIONS  0x00001c00\")\ncpp_quote(\"#define URLPOLICY_JAVA_PROHIBIT     0x00000000\")\ncpp_quote(\"#define URLPOLICY_JAVA_HIGH         0x00010000\")\ncpp_quote(\"#define URLPOLICY_JAVA_MEDIUM       0x00020000\")\ncpp_quote(\"#define URLPOLICY_JAVA_LOW          0x00030000\")\ncpp_quote(\"#define URLPOLICY_JAVA_CUSTOM       0x00800000\")\ncpp_quote(\"#define URLACTION_JAVA_CURR_MAX     0x00001c00\")\ncpp_quote(\"#define URLACTION_JAVA_MAX          0x00001cff\")\n\ncpp_quote(\"#define URLACTION_INFODELIVERY_MIN                        0x00001d00\")\ncpp_quote(\"#define URLACTION_INFODELIVERY_NO_ADDING_CHANNELS         0x00001d00\")\ncpp_quote(\"#define URLACTION_INFODELIVERY_NO_EDITING_CHANNELS        0x00001d01\")\ncpp_quote(\"#define URLACTION_INFODELIVERY_NO_REMOVING_CHANNELS       0x00001d02\")\ncpp_quote(\"#define URLACTION_INFODELIVERY_NO_ADDING_SUBSCRIPTIONS    0x00001d03\")\ncpp_quote(\"#define URLACTION_INFODELIVERY_NO_EDITING_SUBSCRIPTIONS   0x00001d04\")\ncpp_quote(\"#define URLACTION_INFODELIVERY_NO_REMOVING_SUBSCRIPTIONS  0x00001d05\")\ncpp_quote(\"#define URLACTION_INFODELIVERY_NO_CHANNEL_LOGGING         0x00001d06\")\ncpp_quote(\"#define URLACTION_INFODELIVERY_CURR_MAX                   0x00001d06\")\ncpp_quote(\"#define URLACTION_INFODELIVERY_MAX                        0x00001dff\")\n\ncpp_quote(\"#define URLACTION_CHANNEL_SOFTDIST_MIN          0x00001e00\")\ncpp_quote(\"#define URLACTION_CHANNEL_SOFTDIST_PERMISSIONS  0x00001e05\")\ncpp_quote(\"#define URLPOLICY_CHANNEL_SOFTDIST_PROHIBIT     0x00010000\")\ncpp_quote(\"#define URLPOLICY_CHANNEL_SOFTDIST_PRECACHE     0x00020000\")\ncpp_quote(\"#define URLPOLICY_CHANNEL_SOFTDIST_AUTOINSTALL  0x00030000\")\ncpp_quote(\"#define URLACTION_CHANNEL_SOFTDIST_MAX          0x00001eff\")\n\ncpp_quote(\"#define URLACTION_BEHAVIOR_MIN           0x00002000\")\ncpp_quote(\"#define URLACTION_BEHAVIOR_RUN           0x00002000\")\ncpp_quote(\"#define URLPOLICY_BEHAVIOR_CHECK_LIST    0x00010000\")\n\ncpp_quote(\"#define URLACTION_FEATURE_MIN                        0x00002100\")\ncpp_quote(\"#define URLACTION_FEATURE_MIME_SNIFFING              0x00002100\")\ncpp_quote(\"#define URLACTION_FEATURE_ZONE_ELEVATION             0x00002101\")\ncpp_quote(\"#define URLACTION_FEATURE_WINDOW_RESTRICTIONS        0x00002102\")\ncpp_quote(\"#define URLACTION_FEATURE_SCRIPT_STATUS_BAR          0x00002103\")\ncpp_quote(\"#define URLACTION_FEATURE_FORCE_ADDR_AND_STATUS      0x00002104\")\ncpp_quote(\"#define URLACTION_FEATURE_BLOCK_INPUT_PROMPTS        0x00002105\")\n\ncpp_quote(\"#define URLPOLICY_ALLOW     0x00\")\ncpp_quote(\"#define URLPOLICY_QUERY     0x01\")\ncpp_quote(\"#define URLPOLICY_DISALLOW  0x03\")\n\ncpp_quote(\"#define URLPOLICY_NOTIFY_ON_ALLOW     0x10\")\ncpp_quote(\"#define URLPOLICY_NOTIFY_ON_DISALLOW  0x20\")\n\ncpp_quote(\"#define URLPOLICY_LOG_ON_ALLOW     0x40\")\ncpp_quote(\"#define URLPOLICY_LOG_ON_DISALLOW  0x80\")\n\ncpp_quote(\"#define URLPOLICY_DONTCHECKDLGBOX     0x100\")\n\ncpp_quote(\"#define URLPOLICY_CREDENTIALS_SILENT_LOGON_OK     0x00000000\")\ncpp_quote(\"#define URLPOLICY_CREDENTIALS_MUST_PROMPT_USER    0x00010000\")\ncpp_quote(\"#define URLPOLICY_CREDENTIALS_CONDITIONAL_PROMPT  0x00020000\")\ncpp_quote(\"#define URLPOLICY_CREDENTIALS_ANONYMOUS_ONLY      0x00030000\")\n\ncpp_quote(\"#define URLPOLICY_AUTHENTICATE_CLEARTEXT_OK        0x00000000\")\ncpp_quote(\"#define URLPOLICY_AUTHENTICATE_CHALLENGE_RESPONSE  0x00010000\")\ncpp_quote(\"#define URLPOLICY_AUTHENTICATE_MUTUAL_ONLY         0x00030000\")\n\ncpp_quote(\"#define URLPOLICY_MASK_PERMISSIONS  0x0f\")\ncpp_quote(\"#define GetUrlPolicyPermissions(dw)      (dw & URLPOLICY_MASK_PERMISSIONS)\")\ncpp_quote(\"#define SetUrlPolicyPermissions(dw,dw2)  ((dw) = ((dw) & ~URLPOLICY_MASK_PERMISSIONS) | (dw2))\")\n\n/*****************************************************************************\n * IInternetZoneManager interface\n */\n[\n    local,\n    object,\n    uuid(79EAC9EF-BAf9-11CE-8C82-00AA004BA90B),\n    pointer_default(unique)\n]\ninterface IInternetZoneManager : IUnknown\n{\n    typedef [unique] IInternetZoneManager* LPURLZONEMANAGER;\n\n    typedef enum tagURLZONE\n    {\n        URLZONE_INVALID         = -1,\n        URLZONE_PREDEFINED_MIN  = 0,\n        URLZONE_LOCAL_MACHINE   = 0,\n        URLZONE_INTRANET        = 1,\n        URLZONE_TRUSTED         = 2,\n        URLZONE_INTERNET        = 3,\n        URLZONE_UNTRUSTED       = 4,\n        URLZONE_PREDEFINED_MAX  = 999,\n        URLZONE_USER_MIN        = 1000,\n        URLZONE_USER_MAX        = 10000,\n    }  URLZONE;\n\n    typedef enum tagURLTEMPLATE\n    {\n        URLTEMPLATE_CUSTOM         = 0x00000,\n        URLTEMPLATE_PREDEFINED_MIN = 0x10000,\n        URLTEMPLATE_LOW            = 0x10000,\n        URLTEMPLATE_MEDLOW         = 0x10500,\n        URLTEMPLATE_MEDIUM         = 0x11000,\n        URLTEMPLATE_MEDHIGH        = 0x11500,\n        URLTEMPLATE_HIGH           = 0x12000,\n        URLTEMPLATE_PREDEFINED_MAX = 0x20000,\n    } URLTEMPLATE ;\n\n    typedef enum {\n        ZAFLAGS_CUSTOM_EDIT              = 0x00000001,\n        ZAFLAGS_ADD_SITES                = 0x00000002,\n        ZAFLAGS_REQUIRE_VERIFICATION     = 0x00000004,\n        ZAFLAGS_INCLUDE_PROXY_OVERRIDE   = 0x00000008,\n        ZAFLAGS_INCLUDE_INTRANET_SITES   = 0x00000010,\n        ZAFLAGS_NO_UI                    = 0x00000020,\n        ZAFLAGS_SUPPORTS_VERIFICATION    = 0x00000040,\n        ZAFLAGS_UNC_AS_INTRANET          = 0x00000080,\n        ZAFLAGS_DETECT_INTRANET          = 0x00000100,\n        ZAFLAGS_USE_LOCKED_ZONES         = 0x00010000,\n        ZAFLAGS_VERIFY_TEMPLATE_SETTINGS = 0x00020000,\n        ZAFLAGS_NO_CACHE                 = 0x00040000,\n    } ZAFLAGS ;\n\n    enum {\n        MAX_ZONE_PATH        = 260,\n        MAX_ZONE_DESCRIPTION = 200\n    };\n\n    typedef struct _ZONEATTRIBUTES {\n        ULONG cbSize;\n        WCHAR szDisplayName[MAX_ZONE_PATH];\n        WCHAR szDescription[MAX_ZONE_DESCRIPTION];\n        WCHAR szIconPath[MAX_ZONE_PATH];\n        DWORD dwTemplateMinLevel;\n        DWORD dwTemplateRecommended;\n        DWORD dwTemplateCurrentLevel;\n        DWORD dwFlags;\n    } ZONEATTRIBUTES, *LPZONEATTRIBUTES;\n\n    typedef enum _URLZONEREG {\n        URLZONEREG_DEFAULT,\n        URLZONEREG_HKLM,\n        URLZONEREG_HKCU\n    } URLZONEREG;\n\n    HRESULT GetZoneAttributes(\n        [in]              DWORD dwZone,\n        [in, out, unique] ZONEATTRIBUTES* pZoneAttributes);\n\n    HRESULT SetZoneAttributes(\n        [in] DWORD dwZone,\n        [in] ZONEATTRIBUTES* pZoneAttributes);\n\n    HRESULT GetZoneCustomPolicy(\n        [in]  DWORD dwZone,\n        [in]  REFGUID guidKey,\n        [out, size_is(,*pcbPolicy)] BYTE **ppPolicy,\n        [out] DWORD* pcbPolicy,\n        [in]  URLZONEREG ulrZoneReg);\n\n    HRESULT SetZoneCustomPolicy(\n        [in] DWORD dwZone,\n        [in] REFGUID guidKey,\n        [in, size_is(pcbPolicy)] BYTE *ppPolicy,\n        [in] DWORD pcbPolicy,\n        [in] URLZONEREG ulrZoneReg);\n\n    HRESULT GetZoneActionPolicy(\n        [in]  DWORD dwZone,\n        [in]  DWORD dwAction,\n        [out, size_is(cbPolicy)] BYTE* pPolicy,\n        [in]  DWORD cbPolicy,\n        [in]  URLZONEREG urlZoneReg);\n\n    HRESULT SetZoneActionPolicy(\n        [in] DWORD dwZone,\n        [in] DWORD dwAction,\n        [in, size_is(cbPolicy)] BYTE* pPolicy,\n        [in] DWORD cbPolicy,\n        [in] URLZONEREG urlZoneReg);\n\n    HRESULT PromptAction(\n        [in] DWORD dwAction,\n        [in] HWND hwndParent,\n        [in] LPCWSTR pwszUrl,\n        [in] LPCWSTR pwszText,\n        [in] DWORD dwPromptFlags );\n\n    HRESULT LogAction(\n        [in] DWORD dwAction,\n        [in] LPCWSTR pwszUrl,\n        [in] LPCWSTR pwszText,\n        [in] DWORD dwLogFlags);\n\n    HRESULT CreateZoneEnumerator(\n        [out] DWORD* pdwEnum,\n        [out] DWORD* pdwCount,\n        [in]  DWORD dwFlags);\n\n    HRESULT GetZoneAt(\n        [in]  DWORD dwEnum,\n        [in]  DWORD dwIndex,\n        [out] DWORD* pdwZone);\n\n    HRESULT DestroyZoneEnumerator(\n        [in] DWORD dwEnum);\n\n    HRESULT CopyTemplatePoliciesToZone(\n        [in] DWORD dwTemplate,\n        [in] DWORD dwZone,\n        [in] DWORD dwReserved);\n}\n\n/*****************************************************************************\n * IInternetZoneManagerEx interface\n */\n[\n    local,\n    object,\n    uuid(A4C23339-8E06-431E-9BF4-7E711C085648),\n    pointer_default(unique)\n]\ninterface IInternetZoneManagerEx : IInternetZoneManager\n{\n    HRESULT GetZoneActionPolicyEx(\n        [in]  DWORD dwZone,\n        [in]  DWORD dwAction,\n        [out, size_is(cbPolicy)] BYTE *pPolicy,\n        [in]  DWORD cbPolicy,\n        [in]  URLZONEREG urlZoneReg,\n        [in]  DWORD dwFlags);\n\n    HRESULT SetZoneActionPolicyEx(\n        [in] DWORD dwZone,\n        [in] DWORD dwAction,\n        [in, size_is(cbPolicy)] BYTE *pPolicy,\n        [in] DWORD cbPolicy,\n        [in] URLZONEREG urlZoneReg,\n        [in] DWORD dwFlags);\n\n}\n\n/*****************************************************************************\n * IInternetZoneManagerEx2 interface\n */\n\ncpp_quote(\"#define SECURITY_IE_STATE_GREEN 0\")\ncpp_quote(\"#define SECURITY_IE_STATE_RED   1\")\n\n[\n    local,\n    object,\n    uuid(EDC17559-DD5D-4846-8EEF-8BECBA5A4ABF),\n    pointer_default(unique)\n]\ninterface IInternetZoneManagerEx2 : IInternetZoneManagerEx\n{\n    HRESULT GetZoneAttributesEx(\n        [in]              DWORD dwZone,\n        [in, out, unique] ZONEATTRIBUTES* pZoneAttributes,\n        [in]              DWORD dwFlags);\n\n    HRESULT GetZoneSecurityState(\n        [in]      DWORD dwZoneIndex,\n        [in]      BOOL fRespectPolicy,\n        [in, out] LPDWORD pdwState,\n        [in, out] BOOL *pfPolicyEncountered);\n\n    HRESULT GetIESecurityState(\n        [in]      BOOL fRespectPolicy,\n        [in, out] LPDWORD pdwState,\n        [in, out] BOOL *pfPolicyEncountered,\n        [in]      BOOL fNoCache);\n\n    HRESULT FixInsecureSettings(void);\n\n}\n\n\ntypedef struct _tagSOFTDISTINFO\n{\n    ULONG cbSize;\n    DWORD dwFlags;\n    DWORD dwAdState;\n    LPWSTR szTitle;\n    LPWSTR szAbstract;\n    LPWSTR szHREF;\n    DWORD dwInstalledVersionMS;\n    DWORD dwInstalledVersionLS;\n    DWORD dwUpdateVersionMS;\n    DWORD dwUpdateVersionLS;\n    DWORD dwAdvertisedVersionMS;\n    DWORD dwAdvertisedVersionLS;\n    DWORD dwReserved;\n} SOFTDISTINFO, *LPSOFTDISTINFO;\n\ntypedef struct _tagCODEBASEHOLD\n{\n    DWORD cbSize;\n    LPWSTR szDistUnit;\n    LPWSTR szCodeBase;\n    DWORD dwVersionMS;\n    DWORD dwVersionLS;\n    DWORD dwStyle;\n} CODEBASEHOLD, *LPCODEBASEHOLD;\n\n[\n    local,\n    object,\n    uuid(b15b8dc1-c7e1-11d0-8680-00aa00bdcb71),\n    pointer_default(unique)\n]\ninterface ISoftDistExt : IUnknown\n{\n    HRESULT ProcessSoftDist(\n        [in] LPCWSTR szCDFURL,\n        [in] IXMLElement *pSoftDistElement,\n        [in, out] LPSOFTDISTINFO lpsdi );\n\n    HRESULT GetFirstCodeBase(\n        [in] LPWSTR *szCodeBase,\n        [in] LPDWORD dwMaxSize );\n\n    HRESULT GetNextCodeBase(\n        [in] LPWSTR *szCodeBase,\n        [in] LPDWORD dwMaxSize );\n\n    HRESULT AsyncInstallDistributionUnit(\n        [in] IBindCtx *pbc,\n        [in] LPVOID lpReserved,\n        [in] DWORD flags,\n        [in] LPCODEBASEHOLD lpcbh);\n}\n\ntypedef enum _tagINTERNETFEATURELIST\n{\n    FEATURE_OBJECT_CACHING,\n    FEATURE_ZONE_ELEVATION,\n    FEATURE_MIME_HANDLING,\n    FEATURE_MIME_SNIFFING,\n    FEATURE_WINDOW_RESTRICTIONS,\n    FEATURE_WEBOC_POPUPMANAGEMENT,\n    FEATURE_BEHAVIORS,\n    FEATURE_DISABLE_MK_PROTOCOL,\n    FEATURE_LOCALMACHINE_LOCKDOWN,\n    FEATURE_SECURITYBAND,\n    FEATURE_RESTRICT_ACTIVEXINSTALL,\n    FEATURE_VALIDATE_NAVIGATE_URL,\n    FEATURE_RESTRICT_FILEDOWNLOAD,\n    FEATURE_ADDON_MANAGEMENT,\n    FEATURE_PROTOCOL_LOCKDOWN,\n    FEATURE_HTTP_USERNAME_PASSWORD_DISABLE,\n    FEATURE_SAFE_BINDTOOBJECT,\n    FEATURE_UNC_SAVEDFILECHECK,\n    FEATURE_GET_URL_DOM_FILEPATH_UNENCODED,\n    FEATURE_TABBED_BROWSING,\n    FEATURE_SSLUX,\n    FEATURE_DISABLE_NAVIGATION_SOUNDS,\n    FEATURE_DISABLE_LEGACY_COMPRESSION,\n    FEATURE_FORCE_ADDR_AND_STATUS,\n    FEATURE_XMLHTTP,\n    FEATURE_DISABLE_TELNET_PROTOCOL,\n    FEATURE_FEEDS,\n    FEATURE_BLOCK_INPUT_PROMPTS,\n    FEATURE_ENTRY_COUNT\n} INTERNETFEATURELIST;\n\ncpp_quote(\"#define SET_FEATURE_ON_THREAD                0x00000001\")\ncpp_quote(\"#define SET_FEATURE_ON_PROCESS               0x00000002\")\ncpp_quote(\"#define SET_FEATURE_IN_REGISTRY              0x00000004\")\ncpp_quote(\"#define SET_FEATURE_ON_THREAD_LOCALMACHINE   0x00000008\")\ncpp_quote(\"#define SET_FEATURE_ON_THREAD_INTRANET       0x00000010\")\ncpp_quote(\"#define SET_FEATURE_ON_THREAD_TRUSTED        0x00000020\")\ncpp_quote(\"#define SET_FEATURE_ON_THREAD_INTERNET       0x00000040\")\ncpp_quote(\"#define SET_FEATURE_ON_THREAD_RESTRICTED     0x00000080\")\n\ncpp_quote(\"#define GET_FEATURE_FROM_THREAD              0x00000001\")\ncpp_quote(\"#define GET_FEATURE_FROM_PROCESS             0x00000002\")\ncpp_quote(\"#define GET_FEATURE_FROM_REGISTRY            0x00000004\")\ncpp_quote(\"#define GET_FEATURE_FROM_THREAD_LOCALMACHINE 0x00000008\")\ncpp_quote(\"#define GET_FEATURE_FROM_THREAD_INTRANET     0x00000010\")\ncpp_quote(\"#define GET_FEATURE_FROM_THREAD_TRUSTED      0x00000020\")\ncpp_quote(\"#define GET_FEATURE_FROM_THREAD_INTERNET     0x00000040\")\ncpp_quote(\"#define GET_FEATURE_FROM_THREAD_RESTRICTED   0x00000080\")\n\ntypedef struct _tagPROTOCOLFILTERDATA {\n    DWORD cbSize;\n    IInternetProtocolSink *pProtocolSink;\n    IInternetProtocol *pProtocol;\n    IUnknown *pUnk;\n    DWORD dwFilterFlags;\n} PROTOCOLFILTERDATA;\n\n/*****************************************************************************\n * IUri interface\n */\n[\n    object,\n    uuid(a39ee748-6a27-4817-a6f2-13914bef5890),\n    pointer_default(unique)\n]\ninterface IUri : IUnknown\n{\n    typedef enum\n    {\n        Uri_PROPERTY_ABSOLUTE_URI = 0,\n        Uri_PROPERTY_STRING_START = Uri_PROPERTY_ABSOLUTE_URI,\n        Uri_PROPERTY_AUTHORITY = 1,\n        Uri_PROPERTY_DISPLAY_URI = 2,\n        Uri_PROPERTY_DOMAIN = 3,\n        Uri_PROPERTY_EXTENSION = 4,\n        Uri_PROPERTY_FRAGMENT = 5,\n        Uri_PROPERTY_HOST = 6,\n        Uri_PROPERTY_PASSWORD = 7,\n        Uri_PROPERTY_PATH = 8,\n        Uri_PROPERTY_PATH_AND_QUERY = 9,\n        Uri_PROPERTY_QUERY = 10,\n        Uri_PROPERTY_RAW_URI = 11,\n        Uri_PROPERTY_SCHEME_NAME = 12,\n        Uri_PROPERTY_USER_INFO = 13,\n        Uri_PROPERTY_USER_NAME = 14,\n        Uri_PROPERTY_STRING_LAST = Uri_PROPERTY_USER_NAME,\n        Uri_PROPERTY_HOST_TYPE = 15,\n        Uri_PROPERTY_DWORD_START = Uri_PROPERTY_HOST_TYPE,\n        Uri_PROPERTY_PORT = 16,\n        Uri_PROPERTY_SCHEME = 17,\n        Uri_PROPERTY_ZONE = 18,\n        Uri_PROPERTY_DWORD_LAST = Uri_PROPERTY_ZONE\n    } Uri_PROPERTY;\n\n    typedef enum\n    {\n        Uri_HOST_UNKNOWN = 0,\n        Uri_HOST_DNS = 1,\n        Uri_HOST_IPV4 = 2,\n        Uri_HOST_IPV6 = 3,\n        Uri_HOST_IDN = 4\n    } Uri_HOST_TYPE;\n\n    HRESULT GetPropertyBSTR(\n        [in]  Uri_PROPERTY uriProp,\n        [out] BSTR *pbstrProperty,\n        [in]  DWORD dwFlags);\n\n    HRESULT GetPropertyLength(\n        [in]  Uri_PROPERTY uriProp,\n        [out] DWORD *pcchProperty,\n        [in]  DWORD dwFlags);\n\n    HRESULT GetPropertyDWORD(\n        [in]  Uri_PROPERTY uriProp,\n        [out] DWORD *pdwProperty,\n        [in]  DWORD dwFlags);\n\n    HRESULT HasProperty(\n        [in] Uri_PROPERTY uriProp,\n        [out] BOOL *pfHasProperty);\n\n    HRESULT GetAbsoluteUri(\n        [out] BSTR *pbstrAbsoluteUri);\n\n    HRESULT GetAuthority(\n        [out] BSTR *pbstrAuthority);\n\n    HRESULT GetDisplayUri(\n        [out] BSTR *pbstrDisplayString);\n\n    HRESULT GetDomain(\n        [out] BSTR *pbstrDomain);\n\n    HRESULT GetExtension(\n        [out] BSTR *pbstrExtension);\n\n    HRESULT GetFragment(\n        [out] BSTR *pbstrFragment);\n\n    HRESULT GetHost(\n        [out] BSTR *pbstrHost);\n\n    HRESULT GetPassword(\n        [out] BSTR *pbstrPassword);\n\n    HRESULT GetPath(\n        [out] BSTR *pbstrPath);\n\n    HRESULT GetPathAndQuery(\n        [out] BSTR *pbstrPathAndQuery);\n\n    HRESULT GetQuery(\n        [out] BSTR *pbstrQuery);\n\n    HRESULT GetRawUri(\n        [out] BSTR *pbstrRawUri);\n\n    HRESULT GetSchemeName(\n        [out] BSTR *pbstrSchemeName);\n\n    HRESULT GetUserInfo(\n        [out] BSTR *pbstrUserInfo);\n\n    HRESULT GetUserName(\n        [out] BSTR *pbstrUserName);\n\n    HRESULT GetHostType(\n        [out] DWORD *pdwHostType);\n\n    HRESULT GetPort(\n        [out] DWORD *pdwPort);\n\n    HRESULT GetScheme(\n        [out] DWORD *pdwScheme);\n\n    HRESULT GetZone(\n        [out] DWORD *pdwZone);\n\n    HRESULT GetProperties(\n        [out] LPDWORD pdwFlags);\n\n    HRESULT IsEqual(\n        [in]  IUri *pUri,\n        [out] BOOL *pfEqual);\n}\n\ncpp_quote(\"HRESULT WINAPI CreateUri(LPCWSTR,DWORD,DWORD_PTR,IUri**);\")\ncpp_quote(\"HRESULT WINAPI CreateUriWithFragment(LPCWSTR,LPCWSTR,DWORD,DWORD_PTR,IUri**);\")\ncpp_quote(\"HRESULT WINAPI CreateUriFromMultiByteString(LPCSTR,DWORD,DWORD,DWORD,DWORD_PTR,IUri**);\")\n\ncpp_quote(\"#define Uri_HAS_ABSOLUTE_URI    (1 << Uri_PROPERTY_ABSOLUTE_URI)\")\ncpp_quote(\"#define Uri_HAS_AUTHORITY       (1 << Uri_PROPERTY_AUTHORITY)\")\ncpp_quote(\"#define Uri_HAS_DISPLAY_URI     (1 << Uri_PROPERTY_DISPLAY_URI)\")\ncpp_quote(\"#define Uri_HAS_DOMAIN          (1 << Uri_PROPERTY_DOMAIN)\")\ncpp_quote(\"#define Uri_HAS_EXTENSION       (1 << Uri_PROPERTY_EXTENSION)\")\ncpp_quote(\"#define Uri_HAS_FRAGMENT        (1 << Uri_PROPERTY_FRAGMENT)\")\ncpp_quote(\"#define Uri_HAS_HOST            (1 << Uri_PROPERTY_HOST)\")\ncpp_quote(\"#define Uri_HAS_PASSWORD        (1 << Uri_PROPERTY_PASSWORD)\")\ncpp_quote(\"#define Uri_HAS_PATH            (1 << Uri_PROPERTY_PATH)\")\ncpp_quote(\"#define Uri_HAS_QUERY           (1 << Uri_PROPERTY_QUERY)\")\ncpp_quote(\"#define Uri_HAS_RAW_URI         (1 << Uri_PROPERTY_RAW_URI)\")\ncpp_quote(\"#define Uri_HAS_SCHEME_NAME     (1 << Uri_PROPERTY_SCHEME_NAME)\")\ncpp_quote(\"#define Uri_HAS_USER_NAME       (1 << Uri_PROPERTY_USER_NAME)\")\ncpp_quote(\"#define Uri_HAS_PATH_AND_QUERY  (1 << Uri_PROPERTY_PATH_AND_QUERY)\")\ncpp_quote(\"#define Uri_HAS_USER_INFO       (1 << Uri_PROPERTY_USER_INFO)\")\ncpp_quote(\"#define Uri_HAS_HOST_TYPE       (1 << Uri_PROPERTY_HOST_TYPE)\")\ncpp_quote(\"#define Uri_HAS_PORT            (1 << Uri_PROPERTY_PORT)\")\ncpp_quote(\"#define Uri_HAS_SCHEME          (1 << Uri_PROPERTY_SCHEME)\")\ncpp_quote(\"#define Uri_HAS_ZONE            (1 << Uri_PROPERTY_ZONE)\")\n\ncpp_quote(\"#define Uri_CREATE_ALLOW_RELATIVE                  0x0001\")\ncpp_quote(\"#define Uri_CREATE_ALLOW_IMPLICIT_WILDCARD_SCHEME  0x0002\")\ncpp_quote(\"#define Uri_CREATE_ALLOW_IMPLICIT_FILE_SCHEME      0x0004\")\ncpp_quote(\"#define Uri_CREATE_NOFRAG                          0x0008\")\ncpp_quote(\"#define Uri_CREATE_NO_CANONICALIZE                 0x0010\")\ncpp_quote(\"#define Uri_CREATE_CANONICALIZE                    0x0100\")\ncpp_quote(\"#define Uri_CREATE_FILE_USE_DOS_PATH               0x0020\")\ncpp_quote(\"#define Uri_CREATE_DECODE_EXTRA_INFO               0x0040\")\ncpp_quote(\"#define Uri_CREATE_NO_DECODE_EXTRA_INFO            0x0080\")\ncpp_quote(\"#define Uri_CREATE_CRACK_UNKNOWN_SCHEMES           0x0200\")\ncpp_quote(\"#define Uri_CREATE_NO_CRACK_UNKNOWN_SCHEMES        0x0400\")\ncpp_quote(\"#define Uri_CREATE_PRE_PROCESS_HTML_URI            0x0800\")\ncpp_quote(\"#define Uri_CREATE_NO_PRE_PROCESS_HTML_URI         0x1000\")\ncpp_quote(\"#define Uri_CREATE_IE_SETTINGS                     0x2000\")\ncpp_quote(\"#define Uri_CREATE_NO_IE_SETTINGS                  0x4000\")\ncpp_quote(\"#define Uri_CREATE_NO_ENCODE_FORBIDDEN_CHARACTERS  0x8000\")\ncpp_quote(\"#define Uri_CREATE_NORMALIZE_INTL_CHARACTERS   0x00010000\")\ncpp_quote(\"#define Uri_CREATE_CANONICALIZE_ABSOLUTE       0x00020000\")\n\ncpp_quote(\"#define Uri_DISPLAY_NO_FRAGMENT  0x00000001\")\ncpp_quote(\"#define Uri_PUNYCODE_IDN_HOST    0x00000002\")\ncpp_quote(\"#define Uri_DISPLAY_IDN_HOST     0x00000004\")\n\ncpp_quote(\"#define Uri_ENCODING_USER_INFO_AND_PATH_IS_PERCENT_ENCODED_UTF8   0x00000001\")\ncpp_quote(\"#define Uri_ENCODING_USER_INFO_AND_PATH_IS_CP                     0x00000002\")\ncpp_quote(\"#define Uri_ENCODING_HOST_IS_IDN                                  0x00000004\")\ncpp_quote(\"#define Uri_ENCODING_HOST_IS_PERCENT_ENCODED_UTF8                 0x00000008\")\ncpp_quote(\"#define Uri_ENCODING_HOST_IS_PERCENT_ENCODED_CP                   0x00000010\")\ncpp_quote(\"#define Uri_ENCODING_QUERY_AND_FRAGMENT_IS_PERCENT_ENCODED_UTF8   0x00000020\")\ncpp_quote(\"#define Uri_ENCODING_QUERY_AND_FRAGMENT_IS_CP                     0x00000040\")\ncpp_quote(\"#define Uri_ENCODING_RFC (Uri_ENCODING_USER_INFO_AND_PATH_IS_PERCENT_ENCODED_UTF8|Uri_ENCODING_HOST_IS_PERCENT_ENCODED_UTF8|Uri_ENCODING_QUERY_AND_FRAGMENT_IS_PERCENT_ENCODED_UTF8)\")\n\ncpp_quote(\"#define UriBuilder_USE_ORIGINAL_FLAGS  0x00000001\")\n\n/*****************************************************************************\n * IUriContainer interface\n */\n[\n    local,\n    object,\n    uuid(a158a630-ed6f-45fb-b987-f68676f57752),\n    pointer_default(unique)\n]\ninterface IUriContainer : IUnknown\n{\n    HRESULT GetIUri([out] IUri **ppIUri);\n}\n\n/*****************************************************************************\n * IUriBuilder interface\n */\n[\n    local,\n    object,\n    uuid(4221b2e1-8955-46c0-bd5b-de9897565de7),\n    pointer_default(unique)\n]\ninterface IUriBuilder: IUnknown\n{\n    HRESULT CreateUriSimple(\n        [in]  DWORD       dwAllowEncodingPropertyMask,\n        [in]  DWORD_PTR   dwReserved,\n        [out] IUri      **ppIUri);\n\n    HRESULT CreateUri(\n        [in]  DWORD       dwCreateFlags,\n        [in]  DWORD       dwAllowEncodingPropertyMask,\n        [in]  DWORD_PTR   dwReserved,\n        [out] IUri      **ppIUri);\n\n    HRESULT CreateUriWithFlags(\n        [in]  DWORD       dwCreateFlags,\n        [in]  DWORD       dwUriBuilderFlags,\n        [in]  DWORD       dwAllowEncodingPropertyMask,\n        [in]  DWORD_PTR   dwReserved,\n        [out] IUri      **ppIUri);\n\n    HRESULT GetIUri(\n        [out] IUri **ppIUri);\n\n    HRESULT SetIUri(\n        [in, unique] IUri *pIUri);\n\n    HRESULT GetFragment(\n        [out] DWORD   *pcchFragment,\n        [out] LPCWSTR *ppwzFragment);\n\n    HRESULT GetHost(\n        [out] DWORD   *pcchHost,\n        [out] LPCWSTR *ppwzHost);\n\n    HRESULT GetPassword(\n        [out] DWORD   *pcchPassword,\n        [out] LPCWSTR *ppwzPassword);\n\n    HRESULT GetPath(\n        [out] DWORD   *pcchPath,\n        [out] LPCWSTR *ppwzPath);\n\n    HRESULT GetPort(\n        [out] BOOL  *pfHasPort,\n        [out] DWORD *pdwPort);\n\n    HRESULT GetQuery(\n        [out] DWORD   *pcchQuery,\n        [out] LPCWSTR *ppwzQuery);\n\n    HRESULT GetSchemeName(\n        [out] DWORD   *pcchSchemeName,\n        [out] LPCWSTR *ppwzSchemeName);\n\n    HRESULT GetUserName(\n        [out] DWORD   *pcchUserName,\n        [out] LPCWSTR *ppwzUserName);\n\n    HRESULT SetFragment(\n        [in] LPCWSTR pwzNewValue);\n\n    HRESULT SetHost(\n        [in] LPCWSTR pwzNewValue);\n\n    HRESULT SetPassword(\n        [in] LPCWSTR pwzNewValue);\n\n    HRESULT SetPath(\n        [in] LPCWSTR pwzNewValue);\n\n    HRESULT SetPort(\n        [in] BOOL  fHasPort,\n        [in] DWORD dwNewValue);\n\n    HRESULT SetQuery(\n        [in] LPCWSTR pwzNewValue);\n\n    HRESULT SetSchemeName(\n        [in] LPCWSTR pwzNewValue);\n\n    HRESULT SetUserName(\n        [in] LPCWSTR pwzNewValue);\n\n    HRESULT RemoveProperties(\n        [in] DWORD dwPropertyMask);\n\n    HRESULT HasBeenModified(\n        [out] BOOL *pfModified);\n}\n\ncpp_quote(\"HRESULT WINAPI CreateIUriBuilder(IUri*,DWORD,DWORD_PTR,IUriBuilder**);\")\n\n/*****************************************************************************\n * IUriBuilderFactory interface\n */\n[\n    local,\n    object,\n    uuid(e982ce48-0b96-440c-bc37-0c869b27a29e),\n    pointer_default(unique)\n]\ninterface IUriBuilderFactory : IUnknown\n{\n    HRESULT CreateIUriBuilder(\n        [in]  DWORD dwFlags,\n        [in]  DWORD_PTR dwReserved,\n        [out] IUriBuilder **ppIUriBuilder);\n\n    HRESULT CreateInitializedIUriBuilder(\n        [in]  DWORD dwFlags,\n        [in]  DWORD_PTR dwReserved,\n        [out] IUriBuilder **ppIUriBuilder);\n}\n\n/*****************************************************************************\n * IInternetProtocolEx interface\n */\n[\n    local,\n    object,\n    uuid(c7a98e66-1010-492c-a1c8-c809e1f75905),\n    pointer_default(unique)\n]\ninterface IInternetProtocolEx : IInternetProtocol\n{\n    HRESULT StartEx(\n        [in] IUri *pUri,\n        [in] IInternetProtocolSink *pOIProtSink,\n        [in] IInternetBindInfo *pOIBindInfo,\n        [in] DWORD grfPI,\n        [in] HANDLE *dwReserved);\n}\n\n/*****************************************************************************\n * IGetBindHandle interface\n */\n[\n    local,\n    object,\n    uuid(AF0FF408-129D-4b20-91F0-02BD23D88352),\n    pointer_default(unique)\n]\ninterface IGetBindHandle : IUnknown\n{\n    typedef [unique] IGetBindHandle *LPGETBINDHANDLE;\n\n    typedef enum {\n        BINDHANDLETYPES_APPCACHE    = 0x00000000,\n        BINDHANDLETYPES_DEPENDENCY  = 0x00000001,\n        BINDHANDLETYPES_COUNT\n    } BINDHANDLETYPES;\n\n    HRESULT GetBindHandle(\n            [in] BINDHANDLETYPES enumRequestedHandle,\n            [out] HANDLE *pRetHandle);\n}\n\n/*****************************************************************************\n * IBindCallbackRedirect interface\n */\n[\n    local,\n    object,\n    uuid(11c81bc2-121e-4ed5-b9c4-b430bd54f2c0),\n    pointer_default(unique)\n]\ninterface IBindCallbackRedirect : IUnknown\n{\n    typedef [unique] IBindCallbackRedirect *LPBINDCALLBACKREDIRECT;\n\n    HRESULT Redirect(\n        [in] LPCWSTR lpcUrl,\n        [out] VARIANT_BOOL *vbCancel);\n}\n\ncpp_quote(\"#define CONFIRMSAFETYACTION_LOADOBJECT  0x00000001\")\n\nstruct CONFIRMSAFETY\n{\n    CLSID clsid;\n    IUnknown *pUnk;\n    DWORD dwFlags;\n};\n\ncpp_quote(\"EXTERN_C const GUID GUID_CUSTOM_CONFIRMOBJECTSAFETY;\")\n\ncpp_quote(\"DEFINE_GUID(CLSID_InternetSecurityManager, 0x7b8a2d94, 0x0ac9, 0x11d1, 0x89, 0x6c, 0x00, 0xc0, 0x4f, 0xB6, 0xbf, 0xc4);\")\ncpp_quote(\"DEFINE_GUID(CLSID_InternetZoneManager, 0x7B8A2D95, 0x0AC9, 0x11D1, 0x89, 0x6C, 0x00, 0xC0, 0x4F, 0xB6, 0xBF, 0xC4);\")\ncpp_quote(\"DEFINE_GUID(IID_IAsyncMoniker, 0x79EAC9D3, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);\")\ncpp_quote(\"DEFINE_GUID(IID_IAsyncBindCtx, 0x79EAC9D4, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);\")\ncpp_quote(\"DEFINE_GUID(CLSID_StdURLMoniker, 0x79EAC9E0, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);\")\ncpp_quote(\"DEFINE_GUID(CLSID_DeCompMimeFilter, 0x8f6b0360, 0xb80d, 0x11d0, 0xa9,0xb3, 0x00,0x60,0x97,0x94,0x23,0x11);\")\n\ncpp_quote(\"DEFINE_GUID(CLSID_CdlProtocol, 0x3dd53d40, 0x7b8b, 0x11D0, 0xb0,0x13, 0x00,0xaa,0x00,0x59,0xce,0x02);\")\ncpp_quote(\"DEFINE_GUID(CLSID_FileProtocol, 0x79EAC9E7, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);\")\ncpp_quote(\"DEFINE_GUID(CLSID_FtpProtocol, 0x79EAC9E3, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);\")\ncpp_quote(\"DEFINE_GUID(CLSID_GopherProtocol, 0x79EAC9E4, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);\")\ncpp_quote(\"DEFINE_GUID(CLSID_HttpProtocol, 0x79EAC9E2, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);\")\ncpp_quote(\"DEFINE_GUID(CLSID_HttpSProtocol, 0x79EAC9E5, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);\")\ncpp_quote(\"DEFINE_GUID(CLSID_MkProtocol, 0x79EAC9E6, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);\")\n\ncpp_quote(\"#define URLMON_OPTION_USERAGENT          0x10000001\")\ncpp_quote(\"#define URLMON_OPTION_USERAGENT_REFRESH  0x10000002\")\ncpp_quote(\"#define URLMON_OPTION_URL_ENCODING       0x10000004\")\n\ncpp_quote(\"#define MK_S_ASYNCHRONOUS                _HRESULT_TYPEDEF_(0x000401E8)\")\ncpp_quote(\"#ifndef S_ASYNCHRONOUS\")\ncpp_quote(\"#define S_ASYNCHRONOUS                   MK_S_ASYNCHRONOUS\")\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#define INET_E_ERROR_FIRST               _HRESULT_TYPEDEF_(0x800C0002)\")\ncpp_quote(\"#define INET_E_INVALID_URL               _HRESULT_TYPEDEF_(0x800C0002)\")\ncpp_quote(\"#define INET_E_NO_SESSION                _HRESULT_TYPEDEF_(0x800C0003)\")\ncpp_quote(\"#define INET_E_CANNOT_CONNECT            _HRESULT_TYPEDEF_(0x800C0004)\")\ncpp_quote(\"#define INET_E_RESOURCE_NOT_FOUND        _HRESULT_TYPEDEF_(0x800C0005)\")\ncpp_quote(\"#define INET_E_OBJECT_NOT_FOUND          _HRESULT_TYPEDEF_(0x800C0006)\")\ncpp_quote(\"#define INET_E_DATA_NOT_AVAILABLE        _HRESULT_TYPEDEF_(0x800C0007)\")\ncpp_quote(\"#define INET_E_DOWNLOAD_FAILURE          _HRESULT_TYPEDEF_(0x800C0008)\")\ncpp_quote(\"#define INET_E_AUTHENTICATION_REQUIRED   _HRESULT_TYPEDEF_(0x800C0009)\")\ncpp_quote(\"#define INET_E_NO_VALID_MEDIA            _HRESULT_TYPEDEF_(0x800C000A)\")\ncpp_quote(\"#define INET_E_CONNECTION_TIMEOUT        _HRESULT_TYPEDEF_(0x800C000B)\")\ncpp_quote(\"#define INET_E_INVALID_REQUEST           _HRESULT_TYPEDEF_(0x800C000C)\")\ncpp_quote(\"#define INET_E_UNKNOWN_PROTOCOL          _HRESULT_TYPEDEF_(0x800C000D)\")\ncpp_quote(\"#define INET_E_SECURITY_PROBLEM          _HRESULT_TYPEDEF_(0x800C000E)\")\ncpp_quote(\"#define INET_E_CANNOT_LOAD_DATA          _HRESULT_TYPEDEF_(0x800C000F)\")\ncpp_quote(\"#define INET_E_CANNOT_INSTANTIATE_OBJECT _HRESULT_TYPEDEF_(0x800C0010)\")\ncpp_quote(\"#define INET_E_USE_DEFAULT_PROTOCOLHANDLER _HRESULT_TYPEDEF_(0x800C0011)\")\ncpp_quote(\"#define INET_E_USE_DEFAULT_SETTING       _HRESULT_TYPEDEF_(0x800C0012L)\")\ncpp_quote(\"#define INET_E_DEFAULT_ACTION            INET_E_USE_DEFAULT_PROTOCOLHANDLER\")\ncpp_quote(\"#define INET_E_QUERYOPTION_UNKNOWN       _HRESULT_TYPEDEF_(0x800C0013)\")\ncpp_quote(\"#define INET_E_REDIRECT_FAILED           _HRESULT_TYPEDEF_(0x800C0014)\")\ncpp_quote(\"#define INET_E_REDIRECT_TO_DIR           _HRESULT_TYPEDEF_(0x800C0015)\")\ncpp_quote(\"#define INET_E_CANNOT_LOCK_REQUEST       _HRESULT_TYPEDEF_(0x800C0016)\")\ncpp_quote(\"#define INET_E_USE_EXTENDED_BINDING      _HRESULT_TYPEDEF_(0x800C0017)\")\ncpp_quote(\"#define INET_E_TERMINATED_BIND           _HRESULT_TYPEDEF_(0x800C0018)\")\ncpp_quote(\"#define INET_E_INVALID_CERTIFICATE       _HRESULT_TYPEDEF_(0x800C0019)\")\ncpp_quote(\"#define INET_E_CODE_DOWNLOAD_DECLINED    _HRESULT_TYPEDEF_(0x800C0100)\")\ncpp_quote(\"#define INET_E_RESULT_DISPATCHED         _HRESULT_TYPEDEF_(0x800C0200)\")\ncpp_quote(\"#define INET_E_CANNOT_REPLACE_SFP_FILE   _HRESULT_TYPEDEF_(0x800C0300)\")\ncpp_quote(\"#define INET_E_CODE_INSTALL_SUPPRESSED   _HRESULT_TYPEDEF_(0x800C0400)\")\ncpp_quote(\"#define INET_E_CODE_INSTALL_BLOCKED_BY_HASH_POLICY  _HRESULT_TYPEDEF_(0x800C0500)\")\ncpp_quote(\"#define INET_E_DOWNLOAD_BLOCKED_BY_INPRIVATE        _HRESULT_TYPEDEF_(0x800C0501)\")\ncpp_quote(\"#define INET_E_ERROR_LAST                INET_E_DOWNLOAD_BLOCKED_BY_INPRIVATE\")\n\ncpp_quote(\"HRESULT WINAPI CoGetClassObjectFromURL(REFCLSID, LPCWSTR, DWORD, DWORD, LPCWSTR, LPBINDCTX, DWORD, LPVOID, REFIID, LPVOID*);\")\ncpp_quote(\"HRESULT WINAPI CreateURLMoniker(IMoniker *pmkContext, LPCWSTR szURL, IMoniker **ppmk);\")\ncpp_quote(\"HRESULT WINAPI CreateURLMonikerEx(IMoniker*,LPCWSTR,IMoniker**,DWORD);\")\ncpp_quote(\"HRESULT WINAPI CreateURLMonikerEx2(IMoniker*,IUri*,IMoniker**,DWORD);\")\ncpp_quote(\"HRESULT WINAPI RegisterBindStatusCallback(IBindCtx *pbc, IBindStatusCallback *pbsc, IBindStatusCallback **ppbsc, DWORD dwReserved);\")\ncpp_quote(\"HRESULT WINAPI CompareSecurityIds(BYTE*,DWORD,BYTE*,DWORD,DWORD);\")\ncpp_quote(\"HRESULT WINAPI URLDownloadToFileA(LPUNKNOWN,LPCSTR,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);\")\ncpp_quote(\"HRESULT WINAPI URLDownloadToFileW(LPUNKNOWN,LPCWSTR,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);\")\ncpp_quote(\"HRESULT WINAPI URLDownloadToCacheFileA(LPUNKNOWN,LPCSTR,LPSTR,DWORD,DWORD,LPBINDSTATUSCALLBACK);\")\ncpp_quote(\"HRESULT WINAPI URLDownloadToCacheFileW(LPUNKNOWN,LPCWSTR,LPWSTR,DWORD,DWORD,LPBINDSTATUSCALLBACK);\")\ncpp_quote(\"HRESULT WINAPI CoInternetGetSession(DWORD,IInternetSession**,DWORD);\")\ncpp_quote(\"HRESULT WINAPI MkParseDisplayNameEx(IBindCtx*,LPCWSTR,ULONG*,IMoniker**);\")\ncpp_quote(\"HRESULT WINAPI IsAsyncMoniker(IMoniker* pmk);\")\ncpp_quote(\"HRESULT WINAPI CreateAsyncBindCtx(DWORD, IBindStatusCallback*, IEnumFORMATETC*, IBindCtx**);\")\ncpp_quote(\"HRESULT WINAPI CreateAsyncBindCtxEx(IBindCtx*,DWORD,IBindStatusCallback*,IEnumFORMATETC*,IBindCtx**,DWORD);\")\ncpp_quote(\"HRESULT WINAPI CoInternetCreateSecurityManager(IServiceProvider*,IInternetSecurityManager**,DWORD);\")\ncpp_quote(\"HRESULT WINAPI CoInternetCombineUrl(LPCWSTR,LPCWSTR,DWORD,LPWSTR,DWORD,DWORD*,DWORD);\")\ncpp_quote(\"HRESULT WINAPI CoInternetCombineUrlEx(IUri*,LPCWSTR,DWORD,IUri**,DWORD_PTR);\")\ncpp_quote(\"HRESULT WINAPI CoInternetCompareUrl(LPCWSTR,LPCWSTR,DWORD);\")\ncpp_quote(\"HRESULT WINAPI CoInternetCombineIUri(IUri*,IUri*,DWORD,IUri**,DWORD_PTR);\")\ncpp_quote(\"HRESULT WINAPI CoInternetCreateZoneManager(IServiceProvider*, IInternetZoneManager**, DWORD);\")\ncpp_quote(\"HRESULT WINAPI CoInternetParseUrl(LPCWSTR,PARSEACTION,DWORD,LPWSTR,DWORD,DWORD*,DWORD);\")\ncpp_quote(\"HRESULT WINAPI CoInternetParseIUri(IUri*,PARSEACTION,DWORD,LPWSTR,DWORD,DWORD*,DWORD_PTR);\")\ncpp_quote(\"HRESULT WINAPI CoInternetQueryInfo(LPCWSTR,QUERYOPTION,DWORD,LPVOID,DWORD,DWORD*,DWORD);\")\ncpp_quote(\"HRESULT WINAPI CoInternetSetFeatureEnabled(INTERNETFEATURELIST,DWORD,BOOL);\")\ncpp_quote(\"HRESULT WINAPI CoInternetIsFeatureEnabled(INTERNETFEATURELIST,DWORD dwFlags);\")\ncpp_quote(\"HRESULT WINAPI CoInternetIsFeatureEnabledForUrl(INTERNETFEATURELIST,DWORD,LPCWSTR,IInternetSecurityManager*);\")\ncpp_quote(\"HRESULT WINAPI CoInternetGetSecurityUrl(LPCWSTR,LPWSTR*,PSUACTION,DWORD);\")\ncpp_quote(\"HRESULT WINAPI CoInternetGetSecurityUrlEx(IUri*,IUri**,PSUACTION,DWORD_PTR);\")\ncpp_quote(\"HRESULT WINAPI AsyncInstallDistributionUnit(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,DWORD,LPCWSTR,IBindCtx*,LPVOID,DWORD);\")\ncpp_quote(\"HRESULT WINAPI CreateFormatEnumerator(UINT,FORMATETC*,IEnumFORMATETC**);\")\ncpp_quote(\"HRESULT WINAPI GetSoftwareUpdateInfo( LPCWSTR szDistUnit, LPSOFTDISTINFO psdi);\")\ncpp_quote(\"HRESULT WINAPI FaultInIEFeature(HWND,uCLSSPEC*,QUERYCONTEXT*,DWORD);\")\ncpp_quote(\"HRESULT WINAPI FindMimeFromData(LPBC,LPCWSTR,LPVOID,DWORD,LPCWSTR,DWORD,LPWSTR*,DWORD);\")\ncpp_quote(\"HRESULT WINAPI GetClassFileOrMime(LPBC,LPCWSTR,LPVOID,DWORD,LPCWSTR,DWORD,CLSID*);\")\ncpp_quote(\"HRESULT WINAPI HlinkGoBack(IUnknown*);\")\ncpp_quote(\"HRESULT WINAPI HlinkGoForward(IUnknown*);\")\ncpp_quote(\"HRESULT WINAPI HlinkNavigateMoniker(IUnknown*,IMoniker*);\")\ncpp_quote(\"HRESULT WINAPI HlinkNavigateString(IUnknown*,LPCWSTR);\")\ncpp_quote(\"HRESULT WINAPI HlinkSimpleNavigateToMoniker(IMoniker*,LPCWSTR,LPCWSTR,IUnknown*,IBindCtx*,IBindStatusCallback*,DWORD,DWORD);\")\ncpp_quote(\"HRESULT WINAPI HlinkSimpleNavigateToString(LPCWSTR,LPCWSTR,LPCWSTR,IUnknown*,IBindCtx*,IBindStatusCallback*,DWORD,DWORD);\")\ncpp_quote(\"HRESULT WINAPI IsValidURL(LPBC,LPCWSTR,DWORD);\")\ncpp_quote(\"HRESULT WINAPI ObtainUserAgentString(DWORD,LPSTR,DWORD*);\")\ncpp_quote(\"HRESULT WINAPI RegisterFormatEnumerator(LPBC,IEnumFORMATETC*,DWORD);\")\ncpp_quote(\"HRESULT WINAPI RevokeFormatEnumerator(LPBC,IEnumFORMATETC*);\")\ncpp_quote(\"HRESULT WINAPI RevokeBindStatusCallback(LPBC,IBindStatusCallback*);\")\ncpp_quote(\"HRESULT WINAPI CopyStgMedium(const STGMEDIUM*,STGMEDIUM*);\")\ncpp_quote(\"HRESULT WINAPI CopyBindInfo(const BINDINFO*,BINDINFO*);\")\ncpp_quote(\"void WINAPI ReleaseBindInfo(BINDINFO*);\")\ncpp_quote(\"HRESULT WINAPI UrlMkGetSessionOption(DWORD,LPVOID,DWORD,DWORD*,DWORD);\")\ncpp_quote(\"HRESULT WINAPI UrlMkSetSessionOption(DWORD,LPVOID,DWORD,DWORD);\")\ncpp_quote(\"HRESULT WINAPI URLOpenStreamA(LPUNKNOWN,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);\")\ncpp_quote(\"HRESULT WINAPI URLOpenStreamW(LPUNKNOWN,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);\")\ncpp_quote(\"HRESULT WINAPI URLOpenPullStreamA(LPUNKNOWN,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);\")\ncpp_quote(\"HRESULT WINAPI URLOpenPullStreamW(LPUNKNOWN,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);\")\ncpp_quote(\"HRESULT WINAPI URLOpenBlockingStreamA(LPUNKNOWN,LPCSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK);\")\ncpp_quote(\"HRESULT WINAPI URLOpenBlockingStreamW(LPUNKNOWN,LPCWSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK);\")\n\ncpp_quote(\"#define OInetCombineUrl CoInternetCombineUrl\")\ncpp_quote(\"#define OInetCompareUrl CoInternetCompareUrl\")\ncpp_quote(\"#define OInetGetSession CoInternetGetSession\")\n\ncpp_quote(\"BOOL WINAPI IsLoggingEnabledA(LPCSTR);\")\ncpp_quote(\"BOOL WINAPI IsLoggingEnabledW(LPCWSTR);\")\ncpp_quote(\"#define IsLoggingEnabled WINELIB_NAME_AW(IsLoggingEnabled)\")\n\ncpp_quote(\"#define MKSYS_URLMONIKER 6\")\ncpp_quote(\"#define URL_MK_LEGACY            0\")\ncpp_quote(\"#define URL_MK_UNIFORM           1\")\ncpp_quote(\"#define URL_MK_NO_CANONICALIZE   2\")\n"
  },
  {
    "path": "wine/windows/userenv.h",
    "content": "/*\n * Copyright (C) 2007 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_USERENV_H\n#define __WINE_USERENV_H\n\n#include <wbemcli.h>\n#include <profinfo.h>\n\n#define PT_TEMPORARY    0x00000001\n#define PT_ROAMING      0x00000002\n#define PT_MANDATORY    0x00000004\n\ntypedef enum _GPO_LINK {\n    GPLinkUnknown = 0,\n    GPLinkMachine,\n    GPLinkSite,\n    GPLinkDomain,\n    GPLinkOrganizationalUnit\n} GPO_LINK, *PGPO_LINK;\n\ntypedef struct _GROUP_POLICY_OBJECTA {\n    DWORD dwOptions;\n    DWORD dwVersion;\n    LPSTR lpDSPath;\n    LPSTR lpFileSysPath;\n    LPSTR lpDisplayName;\n    CHAR szGPOName[50];\n    GPO_LINK GPOLink;\n    LPARAM lParam;\n    struct _GROUP_POLICY_OBJECTA *pNext;\n    struct _GROUP_POLICY_OBJECTA *pPrev;\n    LPSTR lpExtensions;\n    LPARAM lParam2;\n    LPSTR lpLink;\n} GROUP_POLICY_OBJECTA, *PGROUP_POLICY_OBJECTA;\n\ntypedef struct _GROUP_POLICY_OBJECTW {\n    DWORD dwOptions;\n    DWORD dwVersion;\n    LPWSTR lpDSPath;\n    LPWSTR lpFileSysPath;\n    LPWSTR lpDisplayName;\n    WCHAR szGPOName[50];\n    GPO_LINK GPOLink;\n    LPARAM lParam;\n    struct _GROUP_POLICY_OBJECTW *pNext;\n    struct _GROUP_POLICY_OBJECTW *pPrev;\n    LPWSTR lpExtensions;\n    LPARAM lParam2;\n    LPWSTR lpLink;\n} GROUP_POLICY_OBJECTW, *PGROUP_POLICY_OBJECTW;\n\nDECL_WINELIB_TYPE_AW(GROUP_POLICY_OBJECT)\nDECL_WINELIB_TYPE_AW(PGROUP_POLICY_OBJECT)\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nBOOL WINAPI CreateEnvironmentBlock(LPVOID*,HANDLE,BOOL);\nBOOL WINAPI DestroyEnvironmentBlock(LPVOID);\nHANDLE WINAPI EnterCriticalPolicySection(BOOL);\nBOOL WINAPI ExpandEnvironmentStringsForUserA(HANDLE,LPCSTR,LPSTR,DWORD);\nBOOL WINAPI ExpandEnvironmentStringsForUserW(HANDLE,LPCWSTR,LPWSTR,DWORD);\n#define     ExpandEnvironmentStringsForUser WINELIB_NAME_AW(ExpandEnvironmentStringsForUser)\nDWORD WINAPI GetAppliedGPOListW(DWORD,LPCWSTR,PSID,GUID*,PGROUP_POLICY_OBJECTW*);\nDWORD WINAPI GetAppliedGPOListA(DWORD,LPCSTR,PSID,GUID*,PGROUP_POLICY_OBJECTA*);\n#define      GetAppliedGPOList WINELIB_NAME_AW(GetAppliedGPOList)\nBOOL WINAPI GetUserProfileDirectoryA(HANDLE,LPSTR,LPDWORD);\nBOOL WINAPI GetUserProfileDirectoryW(HANDLE,LPWSTR,LPDWORD);\n#define     GetUserProfileDirectory WINELIB_NAME_AW(GetUserProfileDirectory)\nBOOL WINAPI GetProfilesDirectoryA(LPSTR,LPDWORD);\nBOOL WINAPI GetProfilesDirectoryW(LPWSTR,LPDWORD);\n#define     GetProfilesDirectory WINELIB_NAME_AW(GetProfilesDirectory)\nBOOL WINAPI GetAllUsersProfileDirectoryA(LPSTR,LPDWORD);\nBOOL WINAPI GetAllUsersProfileDirectoryW(LPWSTR,LPDWORD);\n#define     GetAllUsersProfileDirectory WINELIB_NAME_AW(GetAllUsersProfileDirectory)\nBOOL WINAPI GetProfileType(DWORD*);\nBOOL WINAPI LeaveCriticalPolicySection(HANDLE);\nBOOL WINAPI LoadUserProfileA(HANDLE,LPPROFILEINFOA);\nBOOL WINAPI LoadUserProfileW(HANDLE,LPPROFILEINFOW);\n#define     LoadUserProfile WINELIB_NAME_AW(LoadUserProfile)\nBOOL WINAPI RegisterGPNotification(HANDLE,BOOL);\nBOOL WINAPI UnloadUserProfile(HANDLE,HANDLE);\nBOOL WINAPI UnregisterGPNotification(HANDLE);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* __WINE_USERENV_H */\n"
  },
  {
    "path": "wine/windows/usp10.h",
    "content": "/*\n * Copyright (C) 2005 Steven Edwards\n * Copyright (C) 2005 Vijay Kiran Kamuju\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __USP10_H\n#define __USP10_H\n\n#include <windows.h>\n/* FIXME: #include <specstrings.h> */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** ScriptStringAnalyse */\n#define  SSA_PASSWORD         0x00000001\n#define  SSA_TAB              0x00000002\n#define  SSA_CLIP             0x00000004\n#define  SSA_FIT              0x00000008\n#define  SSA_DZWG             0x00000010\n#define  SSA_FALLBACK         0x00000020\n#define  SSA_BREAK            0x00000040\n#define  SSA_GLYPHS           0x00000080\n#define  SSA_RTL              0x00000100\n#define  SSA_GCP              0x00000200\n#define  SSA_HOTKEY           0x00000400\n#define  SSA_METAFILE         0x00000800\n#define  SSA_LINK             0x00001000\n#define  SSA_HIDEHOTKEY       0x00002000\n#define  SSA_HOTKEYONLY       0x00002400\n#define  SSA_FULLMEASURE      0x04000000\n#define  SSA_LPKANSIFALLBACK  0x08000000\n#define  SSA_PIDX             0x10000000\n#define  SSA_LAYOUTRTL        0x20000000\n#define  SSA_DONTGLYPH        0x40000000 \n#define  SSA_NOKASHIDA        0x80000000 \n\n/** StringIsComplex */\n#define  SIC_COMPLEX     1\n#define  SIC_ASCIIDIGIT  2\n#define  SIC_NEUTRAL     4\n\n/** ScriptGetCMap */\n#define SGCM_RTL  0x00000001\n\n/** ScriptApplyDigitSubstitution */\n#define SCRIPT_DIGITSUBSTITUTE_CONTEXT      0\n#define SCRIPT_DIGITSUBSTITUTE_NONE         1\n#define SCRIPT_DIGITSUBSTITUTE_NATIONAL     2\n#define SCRIPT_DIGITSUBSTITUTE_TRADITIONAL  3\n\n#define SCRIPT_UNDEFINED  0\n\n#define USP_E_SCRIPT_NOT_IN_FONT MAKE_HRESULT(SEVERITY_ERROR,FACILITY_ITF,0x200)\n\ntypedef enum tag_SCRIPT_JUSTIFY {\n  SCRIPT_JUSTIFY_NONE           = 0,\n  SCRIPT_JUSTIFY_ARABIC_BLANK   = 1,\n  SCRIPT_JUSTIFY_CHARACTER      = 2,\n  SCRIPT_JUSTIFY_RESERVED1      = 3,\n  SCRIPT_JUSTIFY_BLANK          = 4,\n  SCRIPT_JUSTIFY_RESERVED2      = 5,\n  SCRIPT_JUSTIFY_RESERVED3      = 6,\n  SCRIPT_JUSTIFY_ARABIC_NORMAL  = 7,\n  SCRIPT_JUSTIFY_ARABIC_KASHIDA = 8,\n  SCRIPT_JUSTIFY_ARABIC_ALEF    = 9,\n  SCRIPT_JUSTIFY_ARABIC_HA      = 10,\n  SCRIPT_JUSTIFY_ARABIC_RA      = 11,\n  SCRIPT_JUSTIFY_ARABIC_BA      = 12,\n  SCRIPT_JUSTIFY_ARABIC_BARA    = 13,\n  SCRIPT_JUSTIFY_ARABIC_SEEN    = 14,\n  SCRIPT_JUSTIFY_ARABIC_SEEN_M  = 15,\n} SCRIPT_JUSTIFY;\n\ntypedef struct tag_SCRIPT_CONTROL {\n  DWORD uDefaultLanguage\t:16;\n  DWORD fContextDigits\t\t:1;\n  DWORD fInvertPreBoundDir\t:1;\n  DWORD fInvertPostBoundDir\t:1;\n  DWORD fLinkStringBefore\t:1;\n  DWORD fLinkStringAfter\t:1;\n  DWORD fNeutralOverride\t:1;\n  DWORD fNumericOverride\t:1;\n  DWORD fLegacyBidiClass\t:1;\n  DWORD fMergeNeutralItems\t:1;\n  DWORD fReserved\t\t:7;\n} SCRIPT_CONTROL;\n\ntypedef struct {\n  DWORD langid\t\t\t:16;\n  DWORD fNumeric\t\t:1;\n  DWORD fComplex\t\t:1;     \n  DWORD fNeedsWordBreaking\t:1;     \n  DWORD fNeedsCaretInfo\t\t:1;\n  DWORD bCharSet\t\t:8;\n  DWORD fControl\t\t:1;\n  DWORD fPrivateUseArea\t\t:1;\n  DWORD fNeedsCharacterJustify\t:1;\n  DWORD fInvalidGlyph\t\t:1;\n  DWORD fInvalidLogAttr\t\t:1;\n  DWORD fCDM\t\t\t:1;\n  DWORD fAmbiguousCharSet\t:1;\n  DWORD fClusterSizeVaries\t:1;\n  DWORD fRejectInvalid\t\t:1;\n} SCRIPT_PROPERTIES;\n\ntypedef struct tag_SCRIPT_STATE {\n  WORD uBidiLevel\t\t:5;\n  WORD fOverrideDirection\t:1;\n  WORD fInhibitSymSwap\t\t:1;\n  WORD fCharShape\t\t:1;\n  WORD fDigitSubstitute\t\t:1;\n  WORD fInhibitLigate\t\t:1;\n  WORD fDisplayZWG\t\t:1;\n  WORD fArabicNumContext\t:1;\n  WORD fGcpClusters\t\t:1;\n  WORD fReserved\t\t:1;\n  WORD fEngineReserved\t\t:2;\n} SCRIPT_STATE;\n\ntypedef struct tag_SCRIPT_ANALYSIS {\n  WORD eScript\t\t\t:10;\n  WORD fRTL\t\t\t:1;\n  WORD fLayoutRTL\t\t:1;\n  WORD fLinkBefore\t\t:1;\n  WORD fLinkAfter\t\t:1;\n  WORD fLogicalOrder\t\t:1;\n  WORD fNoGlyphIndex\t\t:1;\n  SCRIPT_STATE \ts;\n} SCRIPT_ANALYSIS;\n\ntypedef struct tag_SCRIPT_ITEM {\n  int iCharPos;\n  SCRIPT_ANALYSIS a;\n} SCRIPT_ITEM;\n\ntypedef struct tag_SCRIPT_DIGITSUBSTITUTE {\n  DWORD NationalDigitLanguage\t\t:16;\n  DWORD TraditionalDigitLanguage\t:16;\n  DWORD DigitSubstitute\t\t\t:8;\n  DWORD dwReserved;\n} SCRIPT_DIGITSUBSTITUTE;\n\ntypedef struct tag_SCRIPT_FONTPROPERTIES {\n  int   cBytes;\n  WORD wgBlank;\n  WORD wgDefault;\n  WORD wgInvalid;\n  WORD wgKashida;\n  int iKashidaWidth;\n} SCRIPT_FONTPROPERTIES;\n\ntypedef struct tag_SCRIPT_TABDEF {\n  int cTabStops;\n  int iScale;\n  int *pTabStops;\n  int iTabOrigin;\n} SCRIPT_TABDEF;\n\ntypedef struct tag_SCRIPT_VISATTR {\n  WORD uJustification   :4;\n  WORD fClusterStart    :1;\n  WORD fDiacritic       :1;\n  WORD fZeroWidth       :1;\n  WORD fReserved        :1;\n  WORD fShapeReserved   :8;\n} SCRIPT_VISATTR;\n\ntypedef struct tag_SCRIPT_LOGATTR {\n  BYTE    fSoftBreak      :1;\n  BYTE    fWhiteSpace     :1;\n  BYTE    fCharStop       :1;\n  BYTE    fWordStop       :1;\n  BYTE    fInvalid        :1;\n  BYTE    fReserved       :3;\n} SCRIPT_LOGATTR;\n\ntypedef void *SCRIPT_CACHE;\ntypedef void *SCRIPT_STRING_ANALYSIS; \n\n#ifndef LSDEFS_DEFINED\ntypedef struct tagGOFFSET {\n  LONG  du;\n  LONG  dv;\n} GOFFSET;\n#endif\n\ntypedef ULONG OPENTYPE_TAG;\n\ntypedef struct tagOPENTYPE_FEATURE_RECORD\n{\n    OPENTYPE_TAG tagFeature;\n    LONG         lParameter;\n} OPENTYPE_FEATURE_RECORD;\n\ntypedef struct tagSCRIPT_GLYPHPROP\n{\n    SCRIPT_VISATTR sva;\n    WORD           reserved;\n} SCRIPT_GLYPHPROP;\n\ntypedef struct tagSCRIPT_CHARPROP\n{\n    WORD fCanGlyphAlone  :1;\n    WORD reserved        :15;\n} SCRIPT_CHARPROP;\n\ntypedef struct tagTEXTRANGE_PROPERTIES\n{\n    OPENTYPE_FEATURE_RECORD *potfRecords;\n    INT                     cotfRecords;\n} TEXTRANGE_PROPERTIES;\n\n/* Function Declarations */\n\nHRESULT WINAPI ScriptApplyDigitSubstitution(const SCRIPT_DIGITSUBSTITUTE* psds, \n                                            SCRIPT_CONTROL* psc, SCRIPT_STATE* pss);\nHRESULT WINAPI ScriptApplyLogicalWidth(const int *piDx, int cChars, int cGlyphs, const WORD *pwLogClust,\n                                       const SCRIPT_VISATTR *psva, const int *piAdvance,\n                                       const SCRIPT_ANALYSIS *psa, ABC *pABC, int *piJustify);\nHRESULT WINAPI ScriptRecordDigitSubstitution(LCID Locale, SCRIPT_DIGITSUBSTITUTE *psds);\nHRESULT WINAPI ScriptItemize(const WCHAR *pwcInChars, int cInChars, int cMaxItems, \n                             const SCRIPT_CONTROL *psControl, const SCRIPT_STATE *psState, \n                             SCRIPT_ITEM *pItems, int *pcItems);\nHRESULT WINAPI ScriptGetCMap(HDC hdc, SCRIPT_CACHE *psc, const WCHAR *pwcInChars, int cChars,\n                             DWORD dwFlags, WORD *pwOutGlyphs);\nHRESULT WINAPI ScriptGetFontProperties(HDC hdc, SCRIPT_CACHE *psc, SCRIPT_FONTPROPERTIES *sfp);\nHRESULT WINAPI ScriptGetGlyphABCWidth(HDC hdc, SCRIPT_CACHE *psc, WORD wGlyph, ABC *pABC);\nHRESULT WINAPI ScriptGetLogicalWidths(const SCRIPT_ANALYSIS *psa, int cChars, int cGlyphs,\n                                      const int *piGlyphWidth, const WORD *pwLogClust,\n                                      const SCRIPT_VISATTR *psva, int *piDx);\nHRESULT WINAPI ScriptGetProperties(const SCRIPT_PROPERTIES ***ppSp, int *piNumScripts);\nHRESULT WINAPI ScriptStringAnalyse(HDC hdc, \n\t\t\t\t   const void *pString, \n\t\t\t\t   int cString, \n\t\t\t\t   int cGlyphs,\n\t\t\t\t   int iCharset,\n\t\t\t\t   DWORD dwFlags,\n\t\t\t\t   int iReqWidth,\n\t\t\t\t   SCRIPT_CONTROL *psControl,\n\t\t\t\t   SCRIPT_STATE *psState,\n\t\t\t\t   const int *piDx,\n\t\t\t\t   SCRIPT_TABDEF *pTabdef,\n\t\t\t\t   const BYTE *pbInClass,\n\t\t\t\t   SCRIPT_STRING_ANALYSIS *pssa);\nHRESULT WINAPI ScriptStringValidate(SCRIPT_STRING_ANALYSIS ssa);\nHRESULT WINAPI ScriptStringFree(SCRIPT_STRING_ANALYSIS *pssa);\nHRESULT WINAPI ScriptFreeCache(SCRIPT_CACHE *psc);\nHRESULT WINAPI ScriptIsComplex(const WCHAR* pwcInChars, int cInChars, DWORD dwFlags);\nHRESULT WINAPI ScriptJustify(const SCRIPT_VISATTR *psva, const int *piAdvance, int cGlyphs,\n                             int iDx, int iMinKashida, int *piJustify);\nHRESULT WINAPI ScriptLayout(int cRuns, const BYTE *pbLevel, int *piVisualToLogical, int *piLogicalToVisual);\nHRESULT WINAPI ScriptShape(HDC hdc, SCRIPT_CACHE *psc, const WCHAR *pwcChars, int cChars, int cMaxGlyphs,\n                           SCRIPT_ANALYSIS *psa, WORD *pwOutGlyphs, WORD *pwLogClust, SCRIPT_VISATTR *psva, int *pcGlyphs);\nHRESULT WINAPI ScriptPlace(HDC hdc, SCRIPT_CACHE *psc, const WORD *pwGlyphs, int cGlyphs, const SCRIPT_VISATTR *psva,\n                           SCRIPT_ANALYSIS *psa, int *piAdvance, GOFFSET *pGoffset, ABC *pABC );\nHRESULT WINAPI ScriptBreak(const WCHAR *pwcChars, int cChars, const SCRIPT_ANALYSIS *psa, SCRIPT_LOGATTR *psla);\nHRESULT WINAPI ScriptCacheGetHeight(HDC hdc, SCRIPT_CACHE *psc, LONG *tmHeight);\nHRESULT WINAPI ScriptCPtoX(int iCP, BOOL fTrailing, int cChars, int cGlyphs, const WORD *pwLogClust, const SCRIPT_VISATTR *psva,\n                           const int *piAdvance, const SCRIPT_ANALYSIS *psa, int *piX);\nHRESULT WINAPI ScriptXtoCP(int iX, int cChars, int cGlyphs, const WORD *pwLogClust, const SCRIPT_VISATTR *psva,\n                           const int *piAdvance, const SCRIPT_ANALYSIS *psa, int *piCP, int *piTrailing);\nHRESULT WINAPI ScriptStringCPtoX(SCRIPT_STRING_ANALYSIS ssa, int icp, BOOL fTrailing, int *pX);\nHRESULT WINAPI ScriptStringXtoCP(SCRIPT_STRING_ANALYSIS ssa, int iX, int *piCh , int *piTrailing);\nHRESULT WINAPI ScriptStringGetLogicalWidths(SCRIPT_STRING_ANALYSIS ssa, int *piDx);\nHRESULT WINAPI ScriptStringGetOrder(SCRIPT_STRING_ANALYSIS ssa, UINT *puOrder);\nHRESULT WINAPI ScriptStringOut(SCRIPT_STRING_ANALYSIS ssa, int iX, int iY, UINT uOptions, const RECT *prc,\n                               int iMinSel, int iMaxSel, BOOL fDisabled);\nHRESULT WINAPI ScriptTextOut(const HDC hdc, SCRIPT_CACHE *psc, int x, int y, UINT fuOptions, const RECT *lprc,\n                             const SCRIPT_ANALYSIS *psa, const WCHAR *pwcReserved, int iReserved, const WORD *pwGlyphs,\n                             int cGlyphs, const int *piAdvance, const int *piJustify, const GOFFSET *pGoffset);\nconst int* WINAPI ScriptString_pcOutChars(SCRIPT_STRING_ANALYSIS ssa);\nconst SCRIPT_LOGATTR* WINAPI ScriptString_pLogAttr(SCRIPT_STRING_ANALYSIS ssa);\nconst SIZE* WINAPI ScriptString_pSize(SCRIPT_STRING_ANALYSIS ssa);\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif\n\n#endif /* __USP10_H */\n"
  },
  {
    "path": "wine/windows/uuids.h",
    "content": "/*\n * Copyright (C) 2002 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef OUR_GUID_ENTRY\n#define OUR_GUID_ENTRY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\\n           DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8);\n#endif\n\n#define MEDIATYPE_NULL       GUID_NULL\n#define MEDIASUBTYPE_NULL    GUID_NULL\n\nOUR_GUID_ENTRY(AMPROPSETID_Pin,                      0x9b00f101, 0x1567, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)\nOUR_GUID_ENTRY(CAPTION_FORMAT_ATSC,                  0x3ed9cb31, 0xfd10, 0x4ade, 0xbc, 0xcc, 0xfb, 0x91, 0x05, 0xd2, 0xf3, 0xef)\nOUR_GUID_ENTRY(CAPTION_FORMAT_DIRECTV,               0xe9ca1ce7, 0x915e, 0x47be, 0x9b, 0xb9, 0xbf, 0x1d, 0x8a, 0x13, 0xa5, 0xec)\nOUR_GUID_ENTRY(CAPTION_FORMAT_DVB,                   0x12230db4, 0xff2a, 0x447e, 0xbb, 0x88, 0x68, 0x41, 0xc4, 0x16, 0xd0, 0x68)\nOUR_GUID_ENTRY(CAPTION_FORMAT_ECHOSTAR,              0xebb1a262, 0x1158, 0x4b99, 0xae, 0x80, 0x92, 0xac, 0x77, 0x69, 0x52, 0xc4)\nOUR_GUID_ENTRY(CLSID_ACMWrapper,                     0x6a08cf80, 0x0e18, 0x11cf, 0xa2, 0x4d, 0x00, 0x20, 0xaf, 0xd7, 0x97, 0x67)\nOUR_GUID_ENTRY(CLSID_AMovie,                         0x5f2759c0, 0x7685, 0x11cf, 0x8b, 0x23, 0x00, 0x80, 0x5f, 0x6c, 0xef, 0x60)\nOUR_GUID_ENTRY(CLSID_ATSCNetworkPropertyPage,        0xe3444d16, 0x5ac4, 0x4386, 0x88, 0xdf, 0x13, 0xfd, 0x23, 0x0e, 0x1d, 0xda)\nOUR_GUID_ENTRY(CLSID_ATSCNetworkProvider,            0x0dad2fdd, 0x5fd7, 0x11d3, 0x8f, 0x50, 0x00, 0xc0, 0x4f, 0x79, 0x71, 0xe2)\nOUR_GUID_ENTRY(CLSID_AVICo,                          0xd76e2820, 0x1563, 0x11cf, 0xac, 0x98, 0x00, 0xaa, 0x00, 0x4c, 0x0f, 0xa9)\nOUR_GUID_ENTRY(CLSID_AVIDec,                         0xcf49d4e0, 0x1115, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(CLSID_AVIDoc,                         0xd3588ab0, 0x0781, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(CLSID_AVIDocWriter,                   0xd3588ab1, 0x0781, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(CLSID_AVIDraw,                        0xa888df60, 0x1e90, 0x11cf, 0xac, 0x98, 0x00, 0xaa, 0x00, 0x4c, 0x0f, 0xa9)\nOUR_GUID_ENTRY(CLSID_AVIMIDIRender,                  0x07b65360, 0xc445, 0x11ce, 0xaf, 0xde, 0x00, 0xaa, 0x00, 0x6c, 0x14, 0xf4)\nOUR_GUID_ENTRY(CLSID_ActiveMovieCategories,          0xda4e3da0, 0xd07d, 0x11d0, 0xbd, 0x50, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)\nOUR_GUID_ENTRY(CLSID_AllocPresenter,                 0x99d54f63, 0x1a69, 0x41ae, 0xaa, 0x4d, 0xc9, 0x76, 0xeb, 0x3f, 0x07, 0x13)\nOUR_GUID_ENTRY(CLSID_AllocPresenterDDXclMode,        0x4444ac9e, 0x242e, 0x471b, 0xa3, 0xc7, 0x45, 0xdc, 0xd4, 0x63, 0x52, 0xbc)\nOUR_GUID_ENTRY(CLSID_AnalogVideoDecoderPropertyPage, 0x71f96466, 0x78f3, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56)\nOUR_GUID_ENTRY(CLSID_AsfMux,                         0xf560ae42, 0x6cdd, 0x11d1, 0xad, 0xe2, 0x00, 0x00, 0xf8, 0x75, 0x4b, 0x99)\nOUR_GUID_ENTRY(CLSID_AsyncReader,                    0xe436ebb5, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(CLSID_AudioCompressorCategory,        0x33d9a761, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)\nOUR_GUID_ENTRY(CLSID_AudioFileClip,                  0xa5ea8d32, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)\nOUR_GUID_ENTRY(CLSID_AudioInputDeviceCategory,       0x33d9a762, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)\nOUR_GUID_ENTRY(CLSID_AudioInputMixerProperties,      0x2ca8ca52, 0x3c3f, 0x11d2, 0xb7, 0x3d, 0x00, 0xc0, 0x4f, 0xb6, 0xbd, 0x3d)\nOUR_GUID_ENTRY(CLSID_AudioProperties,                0x05589faf, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)\nOUR_GUID_ENTRY(CLSID_AudioRecord,                    0xe30629d2, 0x27e5, 0x11ce, 0x87, 0x5d, 0x00, 0x60, 0x8c, 0xb7, 0x80, 0x66)\nOUR_GUID_ENTRY(CLSID_AudioRender,                    0xe30629d1, 0x27e5, 0x11ce, 0x87, 0x5d, 0x00, 0x60, 0x8c, 0xb7, 0x80, 0x66)\nOUR_GUID_ENTRY(CLSID_AudioRendererAdvancedProperties,0x37e92a92, 0xd9aa, 0x11d2, 0xbf, 0x84, 0x8e, 0xf2, 0xb1, 0x55, 0x5a, 0xed)\nOUR_GUID_ENTRY(CLSID_AudioRendererCategory,          0xe0f158e1, 0xcb04, 0x11d0, 0xbd, 0x4e, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)\nOUR_GUID_ENTRY(CLSID_AviDest,                        0xe2510970, 0xf137, 0x11ce, 0x8b, 0x67, 0x00, 0xaa, 0x00, 0xa3, 0xf1, 0xa6)\nOUR_GUID_ENTRY(CLSID_AviMuxProptyPage,               0xc647b5c0, 0x157c, 0x11d0, 0xbd, 0x23, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)\nOUR_GUID_ENTRY(CLSID_AviMuxProptyPage1,              0x0a9ae910, 0x85c0, 0x11d0, 0xbd, 0x42, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)\nOUR_GUID_ENTRY(CLSID_AviReader,                      0x1b544c21, 0xfd0b, 0x11ce, 0x8c, 0x63, 0x00, 0xaa, 0x00, 0x44, 0xb5, 0x1e)\nOUR_GUID_ENTRY(CLSID_AviSplitter,                    0x1b544c20, 0xfd0b, 0x11ce, 0x8c, 0x63, 0x00, 0xaa, 0x00, 0x44, 0xb5, 0x1e)\nOUR_GUID_ENTRY(CLSID_CAcmCoClassManager,             0x33d9a761, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)\nOUR_GUID_ENTRY(CLSID_CCAFilter,                      0x3d07a539, 0x35ca, 0x447c, 0x9b, 0x05, 0x8d, 0x85, 0xce, 0x92, 0x4f, 0x9e)\nOUR_GUID_ENTRY(CLSID_CDeviceMoniker,                 0x4315d437, 0x5b8c, 0x11d0, 0xbd, 0x3b, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)\nOUR_GUID_ENTRY(CLSID_CIcmCoClassManager,             0x33d9a760, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)\nOUR_GUID_ENTRY(CLSID_CMidiOutClassManager,           0x4efe2452, 0x168a, 0x11d1, 0xbc, 0x76, 0x00, 0xc0, 0x4f, 0xb9, 0x45, 0x3b)\nOUR_GUID_ENTRY(CLSID_CMpegAudioCodec,                0x4a2286e0, 0x7bef, 0x11ce, 0x9b, 0xd9, 0x00, 0x00, 0xe2, 0x02, 0x59, 0x9c)\nOUR_GUID_ENTRY(CLSID_CMpegVideoCodec,                0xfeb50740, 0x7bef, 0x11ce, 0x9b, 0xd9, 0x00, 0x00, 0xe2, 0x02, 0x59, 0x9c)\nOUR_GUID_ENTRY(CLSID_CQzFilterClassManager,          0x083863f1, 0x70de, 0x11d0, 0xbd, 0x40, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)\nOUR_GUID_ENTRY(CLSID_CVidCapClassManager,            0x860bb310, 0x5d01, 0x11d0, 0xbd, 0x3b, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)\nOUR_GUID_ENTRY(CLSID_CWaveOutClassManager,           0xe0f158e1, 0xcb04, 0x11d0, 0xbd, 0x4e, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)\nOUR_GUID_ENTRY(CLSID_CWaveinClassManager,            0x33d9a762, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)\nOUR_GUID_ENTRY(CLSID_CameraControlPropertyPage,      0x71f96465, 0x78f3, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56)\nOUR_GUID_ENTRY(CLSID_CaptionsFilter,                 0x2f7ee4b6, 0x6ff5, 0x4eb4, 0xb2, 0x4a, 0x2b, 0xfc, 0x41, 0x11, 0x71, 0x71)\nOUR_GUID_ENTRY(CLSID_CaptureGraphBuilder,            0xbf87b6e0, 0x8c27, 0x11d0, 0xb3, 0xf0, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)\nOUR_GUID_ENTRY(CLSID_CaptureGraphBuilder2,           0xbf87b6e1, 0x8c27, 0x11d0, 0xb3, 0xf0, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)\nOUR_GUID_ENTRY(CLSID_CaptureProperties,              0x1b544c22, 0xfd0b, 0x11ce, 0x8c, 0x63, 0x00, 0xaa, 0x00, 0x44, 0xb5, 0x1f)\nOUR_GUID_ENTRY(CLSID_Colour,                         0x1643e180, 0x90f5, 0x11ce, 0x97, 0xd5, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)\nOUR_GUID_ENTRY(CLSID_CrossbarFilterPropertyPage,     0x71f96461, 0x78f3, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56)\nOUR_GUID_ENTRY(CLSID_CutListCacheMemory,             0xa5ea8d33, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)\nOUR_GUID_ENTRY(CLSID_CutListGraphBuilder,            0xa5ea8d2f, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)\nOUR_GUID_ENTRY(CLSID_CutListSource,                  0xa5ea8d20, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)\nOUR_GUID_ENTRY(CLSID_DShowTVEFilter,                 0x05500280, 0xfaa5, 0x4df9, 0x82, 0x46, 0xbf, 0xc2, 0x3a, 0xc5, 0xce, 0xa8)\nOUR_GUID_ENTRY(CLSID_DSoundRender,                   0x79376820, 0x07d0, 0x11cf, 0xa2, 0x4d, 0x00, 0x20, 0xaf, 0xd7, 0x97, 0x67)\nOUR_GUID_ENTRY(CLSID_DVBCNetworkProvider,            0xdc0c0fe7, 0x0485, 0x4266, 0xb9, 0x3f, 0x68, 0xfb, 0xf8, 0x0e, 0xd8, 0x34)\nOUR_GUID_ENTRY(CLSID_DVBSNetworkProvider,            0xfa4b375a, 0x45b4, 0x4d45, 0x84, 0x40, 0x26, 0x39, 0x57, 0xb1, 0x16, 0x23)\nOUR_GUID_ENTRY(CLSID_DVBTNetworkProvider,            0x216c62df, 0x6d7f, 0x4e9a, 0x85, 0x71, 0x05, 0xf1, 0x4e, 0xdb, 0x76, 0x6a)\nOUR_GUID_ENTRY(CLSID_DVDHWDecodersCategory,          0x2721ae20, 0x7e70, 0x11d0, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00)\nOUR_GUID_ENTRY(CLSID_DVDNavigator,                   0x9b8c4620, 0x2c1a, 0x11d0, 0x84, 0x93, 0x00, 0xa0, 0x24, 0x38, 0xad, 0x48)\nOUR_GUID_ENTRY(CLSID_DVDState,                       0xf963c5cf, 0xa659, 0x4a93, 0x96, 0x38, 0xca, 0xf3, 0xcd, 0x27, 0x7d, 0x13)\nOUR_GUID_ENTRY(CLSID_DVDecPropertiesPage,            0x101193c0, 0x0bfe, 0x11d0, 0xaf, 0x91, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42)\nOUR_GUID_ENTRY(CLSID_DVEncPropertiesPage,            0x4150f050, 0xbb6f, 0x11d0, 0xaf, 0xb9, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42)\nOUR_GUID_ENTRY(CLSID_DVMux,                          0x129d7e40, 0xc10d, 0x11d0, 0xaf, 0xb9, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42)\nOUR_GUID_ENTRY(CLSID_DVMuxPropertyPage,              0x4db880e0, 0xc10d, 0x11d0, 0xaf, 0xb9, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42)\nOUR_GUID_ENTRY(CLSID_DVSplitter,                     0x4eb31670, 0x9fc6, 0x11cf, 0xaf, 0x6e, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42)\nOUR_GUID_ENTRY(CLSID_DVVideoCodec,                   0xb1b77c00, 0xc3e4, 0x11cf, 0xaf, 0x79, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42)\nOUR_GUID_ENTRY(CLSID_DVVideoEnc,                     0x13aa3650, 0xbb6f, 0x11d0, 0xaf, 0xb9, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42)\nOUR_GUID_ENTRY(CLSID_DeviceControlCategory,          0xcc7bfb46, 0xf175, 0x11d1, 0xa3, 0x92, 0x00, 0xe0, 0x29, 0x1f, 0x39, 0x59)\nOUR_GUID_ENTRY(CLSID_DirectDrawProperties,           0x944d4c00, 0xdd52, 0x11ce, 0xbf, 0x0e, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)\nOUR_GUID_ENTRY(CLSID_DirectShowPluginControl,        0x8670c736, 0xf614, 0x427b, 0x8a, 0xda, 0xbb, 0xad, 0xc5, 0x87, 0x19, 0x4b)\nOUR_GUID_ENTRY(CLSID_Dither,                         0x1da08500, 0x9edc, 0x11cf, 0xbc, 0x10, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6)\nOUR_GUID_ENTRY(CLSID_DtvCcFilter,                    0xfb056ba0, 0x2502, 0x45b9, 0x8e, 0x86, 0x2b, 0x40, 0xde, 0x84, 0xad, 0x29)\nOUR_GUID_ENTRY(CLSID_DvdGraphBuilder,                0xfcc152b7, 0xf372, 0x11d0, 0x8e, 0x00, 0x00, 0xc0, 0x4f, 0xd7, 0xc0, 0x8b)\nOUR_GUID_ENTRY(CLSID_EVRPlaybackPipelineOptimizer,   0x62079164, 0x233b, 0x41f8, 0xa8, 0x0f, 0xf0, 0x17, 0x05, 0xf5, 0x14, 0xa8)\nOUR_GUID_ENTRY(CLSID_EVRTearlessWindowPresenter9,    0xa0a7a57b, 0x59b2, 0x4919, 0xa6, 0x94, 0xad, 0xd0, 0xa5, 0x26, 0xc3, 0x73)\nOUR_GUID_ENTRY(CLSID_EnhancedVideoRenderer,          0xfa10746c, 0x9b63, 0x4b6c, 0xbc, 0x49, 0xfc, 0x30, 0x0e, 0xa5, 0xf2, 0x56)\nOUR_GUID_ENTRY(CLSID_FGControl,                      0xe436ebb4, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(CLSID_FileSource,                     0x701722e0, 0x8ae3, 0x11ce, 0xa8, 0x5c, 0x00, 0xaa, 0x00, 0x2f, 0xea, 0xb5)\nOUR_GUID_ENTRY(CLSID_FileWriter,                     0x8596e5f0, 0x0da5, 0x11d0, 0xbd, 0x21, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)\nOUR_GUID_ENTRY(CLSID_FilterGraph,                    0xe436ebb3, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(CLSID_FilterGraphNoThread,            0xe436ebb8, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(CLSID_FilterGraphPrivateThread,       0xa3ecbc41, 0x581a, 0x4476, 0xb6, 0x93, 0xa6, 0x33, 0x40, 0x46, 0x2d, 0x8b)\nOUR_GUID_ENTRY(CLSID_FilterMapper,                   0xe436ebb2, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(CLSID_FilterMapper2,                  0xcda42200, 0xbd88, 0x11d0, 0xbd, 0x4e, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)\nOUR_GUID_ENTRY(CLSID_ICodecAPIProxy,                 0x7ff0997a, 0x1999, 0x4286, 0xa7, 0x3c, 0x62, 0x2b, 0x88, 0x14, 0xe7, 0xeb)\nOUR_GUID_ENTRY(CLSID_IVideoEncoderCodecAPIProxy,     0xb05dabd9, 0x56e5, 0x4fdc, 0xaf, 0xa4, 0x8a, 0x47, 0xe9, 0x1f, 0x1c, 0x9c)\nOUR_GUID_ENTRY(CLSID_IVideoEncoderProxy,             0xb43c4eec, 0x8c32, 0x4791, 0x91, 0x02, 0x50, 0x8a, 0xda, 0x5e, 0xe8, 0xe7)\nOUR_GUID_ENTRY(CLSID_InfTee,                         0xf8388a40, 0xd5bb, 0x11d0, 0xbe, 0x5a, 0x00, 0x80, 0xc7, 0x06, 0x56, 0x8e)\nOUR_GUID_ENTRY(CLSID_LegacyAmFilterCategory,         0x083863f1, 0x70de, 0x11d0, 0xbd, 0x40, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)\nOUR_GUID_ENTRY(CLSID_Line21Decoder,                  0x6e8d4a20, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7)\nOUR_GUID_ENTRY(CLSID_Line21Decoder2,                 0xe4206432, 0x01a1, 0x4bee, 0xb3, 0xe1, 0x37, 0x02, 0xc8, 0xed, 0xc5, 0x74)\nOUR_GUID_ENTRY(CLSID_MFVideoMixer9,                  0xe474e05a, 0xab65, 0x4f6a, 0x82, 0x7c, 0x21, 0x8b, 0x1b, 0xaa, 0xf3, 0x1f)\nOUR_GUID_ENTRY(CLSID_MFVideoPresenter9,              0x98455561, 0x5136, 0x4d28, 0xab, 0x08, 0x4c, 0xee, 0x40, 0xea, 0x27, 0x81)\nOUR_GUID_ENTRY(CLSID_MJPGEnc,                        0xb80ab0a0, 0x7416, 0x11d2, 0x9e, 0xeb, 0x00, 0x60, 0x08, 0x03, 0x9e, 0x37)\nOUR_GUID_ENTRY(CLSID_MMSPLITTER,                     0x3ae86b20, 0x7be8, 0x11d1, 0xab, 0xe6, 0x00, 0xa0, 0xc9, 0x05, 0xf3, 0x75)\nOUR_GUID_ENTRY(CLSID_MOVReader,                      0x44584800, 0xf8ee, 0x11ce, 0xb2, 0xd4, 0x00, 0xdd, 0x01, 0x10, 0x1b, 0x85)\nOUR_GUID_ENTRY(CLSID_MPEG1Doc,                       0xe4bbd160, 0x4269, 0x11ce, 0x83, 0x8d, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)\nOUR_GUID_ENTRY(CLSID_MPEG1PacketPlayer,              0x26c25940, 0x4ca9, 0x11ce, 0xa8, 0x28, 0x00, 0xaa, 0x00, 0x2f, 0xea, 0xb5)\nOUR_GUID_ENTRY(CLSID_MPEG1Splitter,                  0x336475d0, 0x942a, 0x11ce, 0xa8, 0x70, 0x00, 0xaa, 0x00, 0x2f, 0xea, 0xb5)\nOUR_GUID_ENTRY(CLSID_MPEG2Demultiplexer,             0xafb6c280, 0x2c41, 0x11d3, 0x8a, 0x60, 0x00, 0x00, 0xf8, 0x1e, 0x0e, 0x4a)\nOUR_GUID_ENTRY(CLSID_MPEG2Demultiplexer_NoClock,     0x687d3367, 0x3644, 0x467a, 0xad, 0xfe, 0x6c, 0xd7, 0xa8, 0x5c, 0x4a, 0x2c)\nOUR_GUID_ENTRY(CLSID_MediaEncoderCategory,           0x7d22e920, 0x5ca9, 0x4787, 0x8c, 0x2b, 0xa6, 0x77, 0x9b, 0xd1, 0x17, 0x81)\nOUR_GUID_ENTRY(CLSID_MediaMultiplexerCategory,       0x236c9559, 0xadce, 0x4736, 0xbf, 0x72, 0xba, 0xb3, 0x4e, 0x39, 0x21, 0x96)\nOUR_GUID_ENTRY(CLSID_MediaPropertyBag,               0xcdbd8d00, 0xc193, 0x11d0, 0xbd, 0x4e, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)\nOUR_GUID_ENTRY(CLSID_MemoryAllocator,                0x1e651cc0, 0xb199, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45)\nOUR_GUID_ENTRY(CLSID_MidiRendererCategory,           0x4efe2452, 0x168a, 0x11d1, 0xbc, 0x76, 0x00, 0xc0, 0x4f, 0xb9, 0x45, 0x3b)\nOUR_GUID_ENTRY(CLSID_MjpegDec,                       0x301056d0, 0x6dff, 0x11d2, 0x9e, 0xeb, 0x00, 0x60, 0x08, 0x03, 0x9e, 0x37)\nOUR_GUID_ENTRY(CLSID_ModexProperties,                0x0618aa30, 0x6bc4, 0x11cf, 0xbf, 0x36, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)\nOUR_GUID_ENTRY(CLSID_ModexRenderer,                  0x07167665, 0x5011, 0x11cf, 0xbf, 0x33, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)\nOUR_GUID_ENTRY(CLSID_Mpeg2VideoStreamAnalyzer,       0x6cfad761, 0x735d, 0x4aa5, 0x8a, 0xfc, 0xaf, 0x91, 0xa7, 0xd6, 0x1e, 0xba)\nOUR_GUID_ENTRY(CLSID_NetworkProvider,                0xb2f3a67c, 0x29da, 0x4c78, 0x88, 0x31, 0x09, 0x1e, 0xd5, 0x09, 0xa4, 0x75)\nOUR_GUID_ENTRY(CLSID_NullRenderer,                   0xc1f400a4, 0x3f08, 0x11d3, 0x9f, 0x0b, 0x00, 0x60, 0x08, 0x03, 0x9e, 0x37)\nOUR_GUID_ENTRY(CLSID_OverlayMixer,                   0xcd8743a1, 0x3736, 0x11d0, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)\nOUR_GUID_ENTRY(CLSID_PerformanceProperties,          0x59ce6880, 0xacf8, 0x11cf, 0xb5, 0x6e, 0x00, 0x80, 0xc7, 0xc4, 0xb6, 0x8a)\nOUR_GUID_ENTRY(CLSID_PersistMonikerPID,              0xe436ebb7, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(CLSID_ProtoFilterGraph,               0xe436ebb0, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(CLSID_QTDec,                          0xfdfe9681, 0x74a3, 0x11d0, 0xaf, 0xa7, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42)\nOUR_GUID_ENTRY(CLSID_QualityProperties,              0x418afb70, 0xf8b8, 0x11ce, 0xaa, 0xc6, 0x00, 0x20, 0xaf, 0x0b, 0x99, 0xa3)\nOUR_GUID_ENTRY(CLSID_QuickTimeParser,                0xd51bd5a0, 0x7548, 0x11cf, 0xa5, 0x20, 0x00, 0x80, 0xc7, 0x7e, 0xf5, 0x8a)\nOUR_GUID_ENTRY(CLSID_SBE2File,                       0x93a094d7, 0x51e8, 0x485b, 0x90, 0x4a, 0x8d, 0x6b, 0x97, 0xdc, 0x6b, 0x39)\nOUR_GUID_ENTRY(CLSID_SBE2FileScan,                   0x3e458037, 0x0ca6, 0x41aa, 0xa5, 0x94, 0x2a, 0xa6, 0xc0, 0x2d, 0x70, 0x9b)\nOUR_GUID_ENTRY(CLSID_SBE2MediaTypeProfile,           0x1f26a602, 0x2b5c, 0x4b63, 0xb8, 0xe8, 0x9e, 0xa5, 0xc1, 0xa7, 0xdc, 0x2e)\nOUR_GUID_ENTRY(CLSID_SBE2Sink,                       0xe2448508, 0x95da, 0x4205, 0x9a, 0x27, 0x7e, 0xc8, 0x1e, 0x72, 0x3b, 0x1a)\nOUR_GUID_ENTRY(CLSID_SampleGrabber,                  0xc1f400a0, 0x3f08, 0x11d3, 0x9f, 0x0b, 0x00, 0x60, 0x08, 0x03, 0x9e, 0x37)\nOUR_GUID_ENTRY(CLSID_SeekingPassThru,                0x060af76c, 0x68dd, 0x11d0, 0x8f, 0xc1, 0x00, 0xc0, 0x4f, 0xd9, 0x18, 0x9d)\nOUR_GUID_ENTRY(CLSID_SimpleCutList,                  0xa5ea8d30, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)\nOUR_GUID_ENTRY(CLSID_SmartTee,                       0xcc58e280, 0x8aa1, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)\nOUR_GUID_ENTRY(CLSID_StreamBufferComposeRecording,   0xd682c4ba, 0xa90a, 0x42fe, 0xb9, 0xe1, 0x03, 0x10, 0x98, 0x49, 0xc4, 0x23)\nOUR_GUID_ENTRY(CLSID_StreamBufferConfig,             0xfa8a68b2, 0xc864, 0x4ba2, 0xad, 0x53, 0xd3, 0x87, 0x6a, 0x87, 0x49, 0x4b)\nOUR_GUID_ENTRY(CLSID_StreamBufferPropertyHandler,    0xe37a73f8, 0xfb01, 0x43dc, 0x91, 0x4e, 0xaa, 0xee, 0x76, 0x09, 0x5a, 0xb9)\nOUR_GUID_ENTRY(CLSID_StreamBufferRecordingAttributes,0xccaa63ac, 0x1057, 0x4778, 0xae, 0x92, 0x12, 0x06, 0xab, 0x9a, 0xce, 0xe6)\nOUR_GUID_ENTRY(CLSID_StreamBufferSink,               0x2db47ae5, 0xcf39, 0x43c2, 0xb4, 0xd6, 0x0c, 0xd8, 0xd9, 0x09, 0x46, 0xf4)\nOUR_GUID_ENTRY(CLSID_StreamBufferSource,             0xc9f5fe02, 0xf851, 0x4eb5, 0x99, 0xee, 0xad, 0x60, 0x2a, 0xf1, 0xe6, 0x19)\nOUR_GUID_ENTRY(CLSID_StreamBufferThumbnailHandler,   0x713790ee, 0x5ee1, 0x45ba, 0x80, 0x70, 0xa1, 0x33, 0x7d, 0x27, 0x62, 0xfa)\nOUR_GUID_ENTRY(CLSID_SubtitlesFilter,                0x9f22cfea, 0xce07, 0x41ab, 0x8b, 0xa0, 0xc7, 0x36, 0x4a, 0xf9, 0x0a, 0xf9)\nOUR_GUID_ENTRY(CLSID_SystemClock,                    0xe436ebb1, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(CLSID_SystemDeviceEnum,               0x62be5d10, 0x60eb, 0x11d0, 0xbd, 0x3b, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)\nOUR_GUID_ENTRY(CLSID_TVAudioFilterPropertyPage,      0x71f96463, 0x78f3, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56)\nOUR_GUID_ENTRY(CLSID_TVEFilterCCProperties,          0x05500282, 0xfaa5, 0x4df9, 0x82, 0x46, 0xbf, 0xc2, 0x3a, 0xc5, 0xce, 0xa8)\nOUR_GUID_ENTRY(CLSID_TVEFilterStatsProperties,       0x05500283, 0xfaa5, 0x4df9, 0x82, 0x46, 0xbf, 0xc2, 0x3a, 0xc5, 0xce, 0xa8)\nOUR_GUID_ENTRY(CLSID_TVEFilterTuneProperties,        0x05500281, 0xfaa5, 0x4df9, 0x82, 0x46, 0xbf, 0xc2, 0x3a, 0xc5, 0xce, 0xa8)\nOUR_GUID_ENTRY(CLSID_TVTunerFilterPropertyPage,      0x266eee41, 0x6c63, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)\nOUR_GUID_ENTRY(CLSID_TextRender,                     0xe30629d3, 0x27e5, 0x11ce, 0x87, 0x5d, 0x00, 0x60, 0x8c, 0xb7, 0x80, 0x66)\nOUR_GUID_ENTRY(CLSID_TransmitCategory,               0xcc7bfb41, 0xf175, 0x11d1, 0xa3, 0x92, 0x00, 0xe0, 0x29, 0x1f, 0x39, 0x59)\nOUR_GUID_ENTRY(CLSID_URLReader,                      0xe436ebb6, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(CLSID_VBISurfaces,                    0x814b9800, 0x1c88, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)\nOUR_GUID_ENTRY(CLSID_VPObject,                       0xce292861, 0xfc88, 0x11d0, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)\nOUR_GUID_ENTRY(CLSID_VPVBIObject,                    0x814b9801, 0x1c88, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)\nOUR_GUID_ENTRY(CLSID_VfwCapture,                     0x1b544c22, 0xfd0b, 0x11ce, 0x8c, 0x63, 0x00, 0xaa, 0x00, 0x44, 0xb5, 0x1e)\nOUR_GUID_ENTRY(CLSID_VideoCompressorCategory,        0x33d9a760, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)\nOUR_GUID_ENTRY(CLSID_VideoFileClip,                  0xa5ea8d31, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)\nOUR_GUID_ENTRY(CLSID_VideoInputDeviceCategory,       0x860bb310, 0x5d01, 0x11d0, 0xbd, 0x3b, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)\nOUR_GUID_ENTRY(CLSID_VideoMixingRenderer,            0xb87beb7b, 0x8d29, 0x423f, 0xae, 0x4d, 0x65, 0x82, 0xc1, 0x01, 0x75, 0xac)\nOUR_GUID_ENTRY(CLSID_VideoMixingRenderer9,           0x51b4abf3, 0x748f, 0x4e3b, 0xa2, 0x76, 0xc8, 0x28, 0x33, 0x0e, 0x92, 0x6a)\nOUR_GUID_ENTRY(CLSID_VideoPortManager,               0x6f26a6cd, 0x967b, 0x47fd, 0x87, 0x4a, 0x7a, 0xed, 0x2c, 0x9d, 0x25, 0xa2)\nOUR_GUID_ENTRY(CLSID_VideoProcAmpPropertyPage,       0x71f96464, 0x78f3, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56)\nOUR_GUID_ENTRY(CLSID_VideoRenderer,                  0x70e102b0, 0x5556, 0x11ce, 0x97, 0xc0, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)\nOUR_GUID_ENTRY(CLSID_VideoRendererDefault,           0x6bc1cffa, 0x8fc1, 0x4261, 0xac, 0x22, 0xcf, 0xb4, 0xcc, 0x38, 0xdb, 0x50)\nOUR_GUID_ENTRY(CLSID_VideoStreamConfigPropertyPage,  0x71f96467, 0x78f3, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56)\nOUR_GUID_ENTRY(CLSID_WAVEParser,                     0xd51bd5a1, 0x7548, 0x11cf, 0xa5, 0x20, 0x00, 0x80, 0xc7, 0x7e, 0xf5, 0x8a)\nOUR_GUID_ENTRY(CLSID_WMAsfReader,                    0x187463a0, 0x5bb7, 0x11d3, 0xac, 0xbe, 0x00, 0x80, 0xc7, 0x5e, 0x24, 0x6e)\nOUR_GUID_ENTRY(CLSID_WMAsfWriter,                    0x7c23220e, 0x55bb, 0x11d3, 0x8b, 0x16, 0x00, 0xc0, 0x4f, 0xb6, 0xbd, 0x3d)\nOUR_GUID_ENTRY(CLSID_WSTDecoder,                     0x70bc06e0, 0x5666, 0x11d3, 0xa1, 0x84, 0x00, 0x10, 0x5a, 0xef, 0x9f, 0x33)\nOUR_GUID_ENTRY(CLSID_WstDecoderPropertyPage,         0x04e27f80, 0x91e4, 0x11d3, 0xa1, 0x84, 0x00, 0x10, 0x5a, 0xef, 0x9f, 0x33)\nOUR_GUID_ENTRY(CODECAPI_ALLSETTINGS,                 0x6a577e92, 0x83e1, 0x4113, 0xad, 0xc2, 0x4f, 0xce, 0xc3, 0x2f, 0x83, 0xa1)\nOUR_GUID_ENTRY(CODECAPI_AUDIO_ENCODER,               0xb9d19a3e, 0xf897, 0x429c, 0xbc, 0x46, 0x81, 0x38, 0xb7, 0x27, 0x2b, 0x2d)\nOUR_GUID_ENTRY(CODECAPI_AVDecMmcssClass,             0xe0ad4828, 0xdf66, 0x4893, 0x9f, 0x33, 0x78, 0x8a, 0xa4, 0xec, 0x40, 0x82)\nOUR_GUID_ENTRY(CODECAPI_CHANGELISTS,                 0x62b12acf, 0xf6b0, 0x47d9, 0x94, 0x56, 0x96, 0xf2, 0x2c, 0x4e, 0x0b, 0x9d)\nOUR_GUID_ENTRY(CODECAPI_CURRENTCHANGELIST,           0x1cb14e83, 0x7d72, 0x4657, 0x83, 0xfd, 0x47, 0xa2, 0xc5, 0xb9, 0xd1, 0x3d)\nOUR_GUID_ENTRY(CODECAPI_SETALLDEFAULTS,              0x6c5e6a7c, 0xacf8, 0x4f55, 0xa9, 0x99, 0x1a, 0x62, 0x81, 0x09, 0x05, 0x1b)\nOUR_GUID_ENTRY(CODECAPI_SUPPORTSEVENTS,              0x0581af97, 0x7693, 0x4dbd, 0x9d, 0xca, 0x3f, 0x9e, 0xbd, 0x65, 0x85, 0xa1)\nOUR_GUID_ENTRY(CODECAPI_VIDEO_ENCODER,               0x7112e8e1, 0x3d03, 0x47ef, 0x8e, 0x60, 0x03, 0xf1, 0xcf, 0x53, 0x73, 0x01)\nOUR_GUID_ENTRY(DSATTRIB_CAPTURE_STREAMTIME,          0x0c1a5614, 0x30cd, 0x4f40, 0xbc, 0xbf, 0xd0, 0x3e, 0x52, 0x30, 0x62, 0x07)\nOUR_GUID_ENTRY(DSATTRIB_CC_CONTAINER_INFO,           0xe7e050fb, 0xdd5d, 0x40dd, 0x99, 0x15, 0x35, 0xdc, 0xb8, 0x1b, 0xdc, 0x8a)\nOUR_GUID_ENTRY(DSATTRIB_DSHOW_STREAM_DESC,           0x5fb5673b, 0x0a2a, 0x4565, 0x82, 0x7b, 0x68, 0x53, 0xfd, 0x75, 0xe6, 0x11)\nOUR_GUID_ENTRY(DSATTRIB_OptionalVideoAttributes,     0x5a5f08ca, 0x55c2, 0x4033, 0x92, 0xab, 0x55, 0xdb, 0x8f, 0x78, 0x12, 0x26)\nOUR_GUID_ENTRY(DSATTRIB_PBDATAG_ATTRIBUTE,           0xe0b56679, 0x12b9, 0x43cc, 0xb7, 0xdf, 0x57, 0x8c, 0xaa, 0x5a, 0x7b, 0x63)\nOUR_GUID_ENTRY(DSATTRIB_PicSampleSeq,                0x2f5bae02, 0x7b8f, 0x4f60, 0x82, 0xd6, 0xe4, 0xea, 0x2f, 0x1f, 0x4c, 0x99)\nOUR_GUID_ENTRY(DSATTRIB_SAMPLE_LIVE_STREAM_TIME,     0x892cd111, 0x72f3, 0x411d, 0x8b, 0x91, 0xa9, 0xe9, 0x12, 0x3a, 0xc2, 0x9a)\nOUR_GUID_ENTRY(DSATTRIB_TRANSPORT_PROPERTIES,        0xb622f612, 0x47ad, 0x4671, 0xad, 0x6c, 0x05, 0xa9, 0x8e, 0x65, 0xde, 0x3a)\nOUR_GUID_ENTRY(DSATTRIB_UDCRTag,                     0xeb7836ca, 0x14ff, 0x4919, 0xbc, 0xe7, 0x3a, 0xf1, 0x23, 0x19, 0xe5, 0x0c)\nOUR_GUID_ENTRY(ENCAPIPARAM_BITRATE,                  0x49cc4c43, 0xca83, 0x4ad4, 0xa9, 0xaf, 0xf3, 0x69, 0x6a, 0xf6, 0x66, 0xdf)\nOUR_GUID_ENTRY(ENCAPIPARAM_BITRATE_MODE,             0xee5fb25c, 0xc713, 0x40d1, 0x9d, 0x58, 0xc0, 0xd7, 0x24, 0x1e, 0x25, 0x0f)\nOUR_GUID_ENTRY(ENCAPIPARAM_PEAK_BITRATE,             0x703f16a9, 0x3d48, 0x44a1, 0xb0, 0x77, 0x01, 0x8d, 0xff, 0x91, 0x5d, 0x19)\nOUR_GUID_ENTRY(ENCAPIPARAM_SAP_MODE,                 0x0c0171db, 0xfefc, 0x4af7, 0x99, 0x91, 0xa5, 0x65, 0x7c, 0x19, 0x1c, 0xd1)\nOUR_GUID_ENTRY(EVRConfig_AllowBatching,              0xe447df0a, 0x10ca, 0x4d17, 0xb1, 0x7e, 0x6a, 0x84, 0x0f, 0x8a, 0x3a, 0x4c)\nOUR_GUID_ENTRY(EVRConfig_AllowDropToBob,             0xe447df02, 0x10ca, 0x4d17, 0xb1, 0x7e, 0x6a, 0x84, 0x0f, 0x8a, 0x3a, 0x4c)\nOUR_GUID_ENTRY(EVRConfig_AllowDropToHalfInterlace,   0xe447df06, 0x10ca, 0x4d17, 0xb1, 0x7e, 0x6a, 0x84, 0x0f, 0x8a, 0x3a, 0x4c)\nOUR_GUID_ENTRY(EVRConfig_AllowDropToThrottle,        0xe447df04, 0x10ca, 0x4d17, 0xb1, 0x7e, 0x6a, 0x84, 0x0f, 0x8a, 0x3a, 0x4c)\nOUR_GUID_ENTRY(EVRConfig_AllowScaling,               0xe447df08, 0x10ca, 0x4d17, 0xb1, 0x7e, 0x6a, 0x84, 0x0f, 0x8a, 0x3a, 0x4c)\nOUR_GUID_ENTRY(EVRConfig_ForceBatching,              0xe447df09, 0x10ca, 0x4d17, 0xb1, 0x7e, 0x6a, 0x84, 0x0f, 0x8a, 0x3a, 0x4c)\nOUR_GUID_ENTRY(EVRConfig_ForceBob,                   0xe447df01, 0x10ca, 0x4d17, 0xb1, 0x7e, 0x6a, 0x84, 0x0f, 0x8a, 0x3a, 0x4c)\nOUR_GUID_ENTRY(EVRConfig_ForceHalfInterlace,         0xe447df05, 0x10ca, 0x4d17, 0xb1, 0x7e, 0x6a, 0x84, 0x0f, 0x8a, 0x3a, 0x4c)\nOUR_GUID_ENTRY(EVRConfig_ForceScaling,               0xe447df07, 0x10ca, 0x4d17, 0xb1, 0x7e, 0x6a, 0x84, 0x0f, 0x8a, 0x3a, 0x4c)\nOUR_GUID_ENTRY(EVRConfig_ForceThrottle,              0xe447df03, 0x10ca, 0x4d17, 0xb1, 0x7e, 0x6a, 0x84, 0x0f, 0x8a, 0x3a, 0x4c)\nOUR_GUID_ENTRY(FORMAT_525WSS,                        0xc7ecf04d, 0x4582, 0x4869, 0x9a, 0xbb, 0xbf, 0xb5, 0x23, 0xb6, 0x2e, 0xdf)\nOUR_GUID_ENTRY(FORMAT_AnalogVideo,                   0x0482dde0, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)\nOUR_GUID_ENTRY(FORMAT_CAPTIONED_H264VIDEO,           0xa4efc024, 0x873e, 0x4da3, 0x89, 0x8b, 0x47, 0x4d, 0xdb, 0xd7, 0x9f, 0xd0)\nOUR_GUID_ENTRY(FORMAT_CAPTIONED_MPEG2VIDEO,          0x7ab2ada2, 0x81b6, 0x4f14, 0xb3, 0xc8, 0xd0, 0xc4, 0x86, 0x39, 0x3b, 0x67)\nOUR_GUID_ENTRY(FORMAT_CC_CONTAINER,                  0x50997a4a, 0xe508, 0x4054, 0xa2, 0xb2, 0x10, 0xff, 0x0a, 0xc1, 0xa6, 0x9a)\nOUR_GUID_ENTRY(FORMAT_DvInfo,                        0x05589f84, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)\nOUR_GUID_ENTRY(FORMAT_MPEGStreams,                   0x05589f83, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)\nOUR_GUID_ENTRY(FORMAT_MPEGVideo,                     0x05589f82, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)\nOUR_GUID_ENTRY(FORMAT_None,                          0x0f6417d6, 0xc318, 0x11d0, 0xa4, 0x3f, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96)\nOUR_GUID_ENTRY(FORMAT_VideoInfo,                     0x05589f80, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)\nOUR_GUID_ENTRY(FORMAT_VideoInfo2,                    0xf72a76a0, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)\nOUR_GUID_ENTRY(FORMAT_WaveFormatEx,                  0x05589f81, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)\nOUR_GUID_ENTRY(IID_IAMAudioCutListElement,           0xcde29524, 0x3418, 0x11cf, 0xa5, 0xb0, 0x00, 0x20, 0xaf, 0x05, 0x3d, 0x8f)\nOUR_GUID_ENTRY(IID_IAMCutListElement,                0xcde29520, 0x3418, 0x11cf, 0xa5, 0xb0, 0x00, 0x20, 0xaf, 0x05, 0x3d, 0x8f)\nOUR_GUID_ENTRY(IID_IAMDirectSound,                   0x546f4260, 0xd53e, 0x11cf, 0xb3, 0xf0, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)\nOUR_GUID_ENTRY(IID_IAMFileCutListElement,            0xf0947070, 0x276c, 0x11d0, 0x83, 0x16, 0x00, 0x20, 0xaf, 0x11, 0xc0, 0x10)\nOUR_GUID_ENTRY(IID_IAMLine21Decoder,                 0x6e8d4a21, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7)\nOUR_GUID_ENTRY(IID_IAMVideoCutListElement,           0xcde29522, 0x3418, 0x11cf, 0xa5, 0xb0, 0x00, 0x20, 0xaf, 0x05, 0x3d, 0x8f)\nOUR_GUID_ENTRY(IID_IAMWstDecoder,                    0xc056de21, 0x75c2, 0x11d3, 0xa1, 0x84, 0x00, 0x10, 0x5a, 0xef, 0x9f, 0x33)\nOUR_GUID_ENTRY(IID_IBaseVideoMixer,                  0x61ded640, 0xe912, 0x11ce, 0xa0, 0x99, 0x00, 0xaa, 0x00, 0x47, 0x9a, 0x58)\nOUR_GUID_ENTRY(IID_ICutListGraphBuilder,             0xa5ea8d2c, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)\nOUR_GUID_ENTRY(IID_IDirectDrawVideo,                 0x36d39eb0, 0xdd75, 0x11ce, 0xbf, 0x0e, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)\nOUR_GUID_ENTRY(IID_IFileClip,                        0xa5ea8d2a, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)\nOUR_GUID_ENTRY(IID_IFullScreenVideo,                 0xdd1d7110, 0x7836, 0x11cf, 0xbf, 0x47, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)\nOUR_GUID_ENTRY(IID_IFullScreenVideoEx,               0x53479470, 0xf1dd, 0x11cf, 0xbc, 0x42, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6)\nOUR_GUID_ENTRY(IID_IMixerPinConfig,                  0x593cdde1, 0x0759, 0x11d1, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)\nOUR_GUID_ENTRY(IID_IMixerPinConfig2,                 0xebf47182, 0x8764, 0x11d1, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)\nOUR_GUID_ENTRY(IID_IMpegAudioDecoder,                0xb45dd570, 0x3c77, 0x11d1, 0xab, 0xe1, 0x00, 0xa0, 0xc9, 0x05, 0xf3, 0x75)\nOUR_GUID_ENTRY(IID_IQualProp,                        0x1bd0ecb0, 0xf8e2, 0x11ce, 0xaa, 0xc6, 0x00, 0x20, 0xaf, 0x0b, 0x99, 0xa3)\nOUR_GUID_ENTRY(IID_IStandardCutList,                 0xa5ea8d29, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)\nOUR_GUID_ENTRY(IID_IVPConfig,                        0xbc29a660, 0x30e3, 0x11d0, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)\nOUR_GUID_ENTRY(IID_IVPControl,                       0x25df12c1, 0x3de0, 0x11d1, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)\nOUR_GUID_ENTRY(IID_IVPNotify,                        0xc76794a1, 0xd6c5, 0x11d0, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)\nOUR_GUID_ENTRY(IID_IVPNotify2,                       0xebf47183, 0x8764, 0x11d1, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)\nOUR_GUID_ENTRY(IID_IVPObject,                        0xce292862, 0xfc88, 0x11d0, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)\nOUR_GUID_ENTRY(IID_IVPVBIConfig,                     0xec529b00, 0x1a1f, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)\nOUR_GUID_ENTRY(IID_IVPVBINotify,                     0xec529b01, 0x1a1f, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)\nOUR_GUID_ENTRY(IID_IVPVBIObject,                     0x814b9802, 0x1c88, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)\nOUR_GUID_ENTRY(LOOK_DOWNSTREAM_ONLY,                 0xac798be1, 0x98e3, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)\nOUR_GUID_ENTRY(LOOK_UPSTREAM_ONLY,                   0xac798be0, 0x98e3, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)\nOUR_GUID_ENTRY(MEDIASUBTYPE_420O,                    0x4f303234, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_708_608Data,             0x0af414bc, 0x4ed2, 0x445e, 0x98, 0x39, 0x8f, 0x09, 0x55, 0x68, 0xab, 0x3c)\nOUR_GUID_ENTRY(MEDIASUBTYPE_A2B10G10R10,             0x576f7893, 0xbdf6, 0x48c4, 0x87, 0x5f, 0xae, 0x7b, 0x81, 0x83, 0x45, 0x67)\nOUR_GUID_ENTRY(MEDIASUBTYPE_A2R10G10B10,             0x2f8bb76d, 0xb644, 0x4550, 0xac, 0xf3, 0xd3, 0x0c, 0xaa, 0x65, 0xd5, 0xc5)\nOUR_GUID_ENTRY(MEDIASUBTYPE_AI44,                    0x34344941, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_AIFF,                    0xe436eb8d, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(MEDIASUBTYPE_ARGB1555,                0x297c55af, 0xe209, 0x4cb3, 0xb7, 0x57, 0xc7, 0x6d, 0x6b, 0x9c, 0x88, 0xa8)\nOUR_GUID_ENTRY(MEDIASUBTYPE_ARGB1555_D3D_DX7_RT,     0x35314137, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_ARGB1555_D3D_DX9_RT,     0x35314139, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_ARGB32,                  0x773c9ac0, 0x3274, 0x11d0, 0xb7, 0x24, 0x00, 0xaa, 0x00, 0x6c, 0x1a, 0x01)\nOUR_GUID_ENTRY(MEDIASUBTYPE_ARGB32_D3D_DX7_RT,       0x38384137, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_ARGB32_D3D_DX9_RT,       0x38384139, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_ARGB4444,                0x6e6415e6, 0x5c24, 0x425f, 0x93, 0xcd, 0x80, 0x10, 0x2b, 0x3d, 0x1c, 0xca)\nOUR_GUID_ENTRY(MEDIASUBTYPE_ARGB4444_D3D_DX7_RT,     0x34344137, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_ARGB4444_D3D_DX9_RT,     0x34344139, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_AU,                      0xe436eb8c, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(MEDIASUBTYPE_AYUV,                    0x56555941, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_NTSC_M,      0x0482dde2, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)\nOUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_B,       0x0482dde5, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)\nOUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_D,       0x0482dde6, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)\nOUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_G,       0x0482dde7, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)\nOUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_H,       0x0482dde8, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)\nOUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_I,       0x0482dde9, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)\nOUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_M,       0x0482ddea, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)\nOUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_N,       0x0482ddeb, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)\nOUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_N_COMBO, 0x0482ddec, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)\nOUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_B,     0x0482ddf0, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)\nOUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_D,     0x0482ddf1, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)\nOUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_G,     0x0482ddf2, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)\nOUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_H,     0x0482ddf3, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)\nOUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_K,     0x0482ddf4, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)\nOUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_K1,    0x0482ddf5, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)\nOUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_L,     0x0482ddf6, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)\nOUR_GUID_ENTRY(MEDIASUBTYPE_Asf,                     0x3db80f90, 0x9412, 0x11d1, 0xad, 0xed, 0x00, 0x00, 0xf8, 0x75, 0x4b, 0x99)\nOUR_GUID_ENTRY(MEDIASUBTYPE_Avi,                     0xe436eb88, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(MEDIASUBTYPE_CC_CONTAINER,            0x7ea626db, 0x54da, 0x437b, 0xbe, 0x9f, 0xf7, 0x30, 0x73, 0xad, 0xfa, 0x3c)\nOUR_GUID_ENTRY(MEDIASUBTYPE_CFCC,                    0x43434643, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_CLJR,                    0x524a4c43, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_CLPL,                    0x4c504c43, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_CPLA,                    0x414c5043, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_DOLBY_AC3_SPDIF,         0x00000092, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_DRM_Audio,               0x00000009, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_DVB_SUBTITLES,           0x34ffcbc3, 0xd5b3, 0x4171, 0x90, 0x02, 0xd4, 0xc6, 0x03, 0x01, 0x69, 0x7f)\nOUR_GUID_ENTRY(MEDIASUBTYPE_DVCS,                    0x53435644, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_DVSD,                    0x44535644, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_DssAudio,                0xa0af4f82, 0xe163, 0x11d0, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)\nOUR_GUID_ENTRY(MEDIASUBTYPE_DssVideo,                0xa0af4f81, 0xe163, 0x11d0, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)\nOUR_GUID_ENTRY(MEDIASUBTYPE_DtvCcData,               0xf52addaa, 0x36f0, 0x43f5, 0x95, 0xea, 0x6d, 0x86, 0x64, 0x84, 0x26, 0x2a)\nOUR_GUID_ENTRY(MEDIASUBTYPE_H264,                    0x34363248, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_IA44,                    0x34344149, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_IEEE_FLOAT,              0x00000003, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_IF09,                    0x39304649, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_IJPG,                    0x47504a49, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_IMC1,                    0x31434d49, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_IMC2,                    0x32434d49, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_IMC3,                    0x33434d49, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_IMC4,                    0x34434d49, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_ISDB_CAPTIONS,           0x059dd67d, 0x2e55, 0x4d41, 0x8d, 0x1b, 0x01, 0xf5, 0xe4, 0xf5, 0x06, 0x07)\nOUR_GUID_ENTRY(MEDIASUBTYPE_ISDB_SUPERIMPOSE,        0x36dc6d28, 0xf1a6, 0x4216, 0x90, 0x48, 0x9c, 0xfc, 0xef, 0xeb, 0x5e, 0xba)\nOUR_GUID_ENTRY(MEDIASUBTYPE_IYUV,                    0x56555949, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_Line21_BytePair,         0x6e8d4a22, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7)\nOUR_GUID_ENTRY(MEDIASUBTYPE_Line21_GOPPacket,        0x6e8d4a23, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7)\nOUR_GUID_ENTRY(MEDIASUBTYPE_Line21_VBIRawData,       0x6e8d4a24, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7)\nOUR_GUID_ENTRY(MEDIASUBTYPE_MDVF,                    0x4656444d, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_MJPG,                    0x47504a4d, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1Audio,              0xe436eb87, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1AudioPayload,       0x00000050, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1Packet,             0xe436eb80, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1Payload,            0xe436eb81, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1System,             0xe436eb84, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1Video,              0xe436eb86, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1VideoCD,            0xe436eb85, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(MEDIASUBTYPE_NV11,                    0x3131564e, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_NV12,                    0x3231564e, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_NV24,                    0x3432564e, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_None,                    0xe436eb8e, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(MEDIASUBTYPE_Overlay,                 0xe436eb7f, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(MEDIASUBTYPE_P010,                    0x30313050, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_P016,                    0x36313050, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_P208,                    0x38303250, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_P210,                    0x30313250, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_P216,                    0x36313250, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_P408,                    0x38304250, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_PCM,                     0x00000001, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_PCMAudio_Obsolete,       0xe436eb8a, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(MEDIASUBTYPE_Plum,                    0x6d756c50, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_QTJpeg,                  0x6765706a, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_QTMovie,                 0xe436eb89, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(MEDIASUBTYPE_QTRle,                   0x20656c72, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_QTRpza,                  0x617a7072, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_QTSmc,                   0x20636d73, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_RAW_SPORT,               0x00000240, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_RGB1,                    0xe436eb78, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(MEDIASUBTYPE_RGB16_D3D_DX7_RT,        0x36315237, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_RGB16_D3D_DX9_RT,        0x36315239, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_RGB24,                   0xe436eb7d, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(MEDIASUBTYPE_RGB32,                   0xe436eb7e, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(MEDIASUBTYPE_RGB32_D3D_DX7_RT,        0x32335237, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_RGB32_D3D_DX9_RT,        0x32335239, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_RGB4,                    0xe436eb79, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(MEDIASUBTYPE_RGB555,                  0xe436eb7c, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(MEDIASUBTYPE_RGB565,                  0xe436eb7b, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(MEDIASUBTYPE_RGB8,                    0xe436eb7a, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(MEDIASUBTYPE_S340,                    0x30343353, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_S342,                    0x32343353, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_SPDIF_TAG_241h,          0x00000241, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_TELETEXT,                0xf72a76e3, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)\nOUR_GUID_ENTRY(MEDIASUBTYPE_TVMJ,                    0x4a4d5654, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_UYVY,                    0x59565955, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_VBI,                     0x663da43c, 0x03e8, 0x4e9a, 0x9c, 0xd5, 0xbf, 0x11, 0xed, 0x0d, 0xef, 0x76)\nOUR_GUID_ENTRY(MEDIASUBTYPE_VPS,                     0xa1b3f620, 0x9792, 0x4d8d, 0x81, 0xa4, 0x86, 0xaf, 0x25, 0x77, 0x20, 0x90)\nOUR_GUID_ENTRY(MEDIASUBTYPE_VPVBI,                   0x5a9b6a41, 0x1a22, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)\nOUR_GUID_ENTRY(MEDIASUBTYPE_VPVideo,                 0x5a9b6a40, 0x1a22, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)\nOUR_GUID_ENTRY(MEDIASUBTYPE_WAKE,                    0x454b4157, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_WAVE,                    0xe436eb8b, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(MEDIASUBTYPE_WSS,                     0x2791d576, 0x8e7a, 0x466f, 0x9e, 0x90, 0x5d, 0x3f, 0x30, 0x83, 0x73, 0x8b)\nOUR_GUID_ENTRY(MEDIASUBTYPE_XDS,                     0x01ca73e3, 0xdce6, 0x4575, 0xaf, 0xe1, 0x2b, 0xf1, 0xc9, 0x02, 0xca, 0xf3)\nOUR_GUID_ENTRY(MEDIASUBTYPE_Y210,                    0x30313259, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_Y211,                    0x31313259, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_Y216,                    0x36313259, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_Y411,                    0x31313459, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_Y41P,                    0x50313459, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_YUY2,                    0x32595559, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_YUYV,                    0x56595559, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_YV12,                    0x32315659, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_YVU9,                    0x39555659, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_YVYU,                    0x55595659, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_dv25,                    0x35327664, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_dv50,                    0x30357664, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_dvh1,                    0x31687664, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_dvhd,                    0x64687664, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_dvsd,                    0x64737664, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIASUBTYPE_dvsl,                    0x6c737664, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIATYPE_AUXLine21Data,              0x670aea80, 0x3a82, 0x11d0, 0xb7, 0x9b, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7)\nOUR_GUID_ENTRY(MEDIATYPE_AUXTeletextPage,            0x11264acb, 0x37de, 0x4eba, 0x8c, 0x35, 0x7f, 0x04, 0xa1, 0xa6, 0x83, 0x32)\nOUR_GUID_ENTRY(MEDIATYPE_AnalogAudio,                0x0482dee1, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)\nOUR_GUID_ENTRY(MEDIATYPE_AnalogVideo,                0x0482dde1, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)\nOUR_GUID_ENTRY(MEDIATYPE_Audio,                      0x73647561, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIATYPE_CC_CONTAINER,               0xaeb312e9, 0x3357, 0x43ca, 0xb7, 0x01, 0x97, 0xec, 0x19, 0x8e, 0x2b, 0x62)\nOUR_GUID_ENTRY(MEDIATYPE_DTVCCData,                  0xfb77e152, 0x53b2, 0x499c, 0xb4, 0x6b, 0x50, 0x9f, 0xc3, 0x3e, 0xdf, 0xd7)\nOUR_GUID_ENTRY(MEDIATYPE_File,                       0x656c6966, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIATYPE_Interleaved,                0x73766169, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIATYPE_LMRT,                       0x74726c6d, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIATYPE_MPEG1SystemStream,          0xe436eb82, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(MEDIATYPE_MSTVCaption,                0xb88b8a89, 0xb049, 0x4c80, 0xad, 0xcf, 0x58, 0x98, 0x98, 0x5e, 0x22, 0xc1)\nOUR_GUID_ENTRY(MEDIATYPE_Midi,                       0x7364696d, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIATYPE_ScriptCommand,              0x73636d64, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIATYPE_Stream,                     0xe436eb83, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)\nOUR_GUID_ENTRY(MEDIATYPE_Text,                       0x73747874, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIATYPE_Timecode,                   0x0482dee3, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)\nOUR_GUID_ENTRY(MEDIATYPE_URL_STREAM,                 0x736c7275, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(MEDIATYPE_VBI,                        0xf72a76e1, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)\nOUR_GUID_ENTRY(MEDIATYPE_Video,                      0x73646976, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)\nOUR_GUID_ENTRY(PIN_CATEGORY_ANALOGVIDEOIN,           0xfb6c4283, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)\nOUR_GUID_ENTRY(PIN_CATEGORY_CAPTURE,                 0xfb6c4281, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)\nOUR_GUID_ENTRY(PIN_CATEGORY_CC,                      0xfb6c4289, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)\nOUR_GUID_ENTRY(PIN_CATEGORY_EDS,                     0xfb6c4287, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)\nOUR_GUID_ENTRY(PIN_CATEGORY_NABTS,                   0xfb6c4286, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)\nOUR_GUID_ENTRY(PIN_CATEGORY_PREVIEW,                 0xfb6c4282, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)\nOUR_GUID_ENTRY(PIN_CATEGORY_STILL,                   0xfb6c428a, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)\nOUR_GUID_ENTRY(PIN_CATEGORY_TELETEXT,                0xfb6c4288, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)\nOUR_GUID_ENTRY(PIN_CATEGORY_TIMECODE,                0xfb6c428b, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)\nOUR_GUID_ENTRY(PIN_CATEGORY_VBI,                     0xfb6c4284, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)\nOUR_GUID_ENTRY(PIN_CATEGORY_VIDEOPORT,               0xfb6c4285, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)\nOUR_GUID_ENTRY(PIN_CATEGORY_VIDEOPORT_VBI,           0xfb6c428c, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)\nOUR_GUID_ENTRY(TIME_FORMAT_BYTE,                     0x7b785571, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6)\nOUR_GUID_ENTRY(TIME_FORMAT_FIELD,                    0x7b785573, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6)\nOUR_GUID_ENTRY(TIME_FORMAT_FRAME,                    0x7b785570, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6)\nOUR_GUID_ENTRY(TIME_FORMAT_MEDIA_TIME,               0x7b785574, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6)\nOUR_GUID_ENTRY(TIME_FORMAT_NONE,                     0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)\nOUR_GUID_ENTRY(TIME_FORMAT_SAMPLE,                   0x7b785572, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6)\nOUR_GUID_ENTRY(UUID_UdriTagTables,                   0xe1b98d74, 0x9778, 0x4878, 0xb6, 0x64, 0xeb, 0x20, 0x20, 0x36, 0x4d, 0x88)\nOUR_GUID_ENTRY(UUID_WMDRMTagTables,                  0x5dcd1101, 0x9263, 0x45bb, 0xa4, 0xd5, 0xc4, 0x15, 0xab, 0x8c, 0x58, 0x9c)\n\n#include <ksuuids.h>\n\n#undef OUR_GUID_ENTRY\n"
  },
  {
    "path": "wine/windows/uxtheme.h",
    "content": "/*\n * Win32 5.1 theme definitions\n *\n * Copyright (C) 2003 Kevin Koltzau\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_UXTHEME_H\n#define __WINE_UXTHEME_H\n\n#include <commctrl.h>\n\ntypedef HANDLE HTHEME;\n\nHRESULT WINAPI CloseThemeData(HTHEME hTheme);\nHRESULT WINAPI DrawThemeBackground(HTHEME,HDC,int,int,const RECT*,const RECT*);\n\n#define DTBG_CLIPRECT        0x00000001\n#define DTBG_DRAWSOLID       0x00000002\n#define DTBG_OMITBORDER      0x00000004\n#define DTBG_OMITCONTENT     0x00000008\n#define DTBG_COMPUTINGREGION 0x00000010\n#define DTBG_MIRRORDC        0x00000020\n\ntypedef struct _DTBGOPTS {\n    DWORD dwSize;\n    DWORD dwFlags;\n    RECT rcClip;\n} DTBGOPTS, *PDTBGOPTS;\n\nHRESULT WINAPI DrawThemeBackgroundEx(HTHEME,HDC,int,int,const RECT*,\n                                     const DTBGOPTS*);\nHRESULT WINAPI DrawThemeEdge(HTHEME,HDC,int,int,const RECT*,UINT,UINT,\n                             RECT*);\nHRESULT WINAPI DrawThemeIcon(HTHEME,HDC,int,int,const RECT*,HIMAGELIST,int);\nHRESULT WINAPI DrawThemeParentBackground(HWND,HDC,RECT*);\n\n#define DTT_GRAYED      0x1\n\nHRESULT WINAPI DrawThemeText(HTHEME,HDC,int,int,LPCWSTR,int,DWORD,DWORD,\n                             const RECT*);\n\n/* DTTOPTS.dwFlags bits */\n#define DTT_TEXTCOLOR    0x00000001\n#define DTT_BORDERCOLOR  0x00000002\n#define DTT_SHADOWCOLOR  0x00000004\n#define DTT_SHADOWTYPE   0x00000008\n#define DTT_SHADOWOFFSET 0x00000010\n#define DTT_BORDERSIZE   0x00000020\n#define DTT_FONTPROP     0x00000040\n#define DTT_COLORPROP    0x00000080\n#define DTT_STATEID      0x00000100\n#define DTT_CALCRECT     0x00000200\n#define DTT_APPLYOVERLAY 0x00000400\n#define DTT_GLOWSIZE     0x00000800\n#define DTT_CALLBACK     0x00001000\n#define DTT_COMPOSITED   0x00002000\n#define DTT_VALIDBITS    0x00003fff\n\ntypedef int (WINAPI *DTT_CALLBACK_PROC)(HDC,LPWSTR,int,RECT*,UINT,LPARAM);\n\ntypedef struct _DTTOPTS {\n    DWORD dwSize;\n    DWORD dwFlags;\n    COLORREF crText;\n    COLORREF crBorder;\n    COLORREF crShadow;\n    int iTextShadowType;\n    POINT ptShadowOffset;\n    int iBorderSize;\n    int iFontPropId;\n    int iColorPropId;\n    int iStateId;\n    BOOL fApplyOverlay;\n    int iGlowSize;\n    DTT_CALLBACK_PROC pfnDrawTextCallback;\n    LPARAM lParam;\n} DTTOPTS, *PDTTOPTS;\n\nHRESULT WINAPI DrawThemeTextEx(HTHEME,HDC,int,int,LPCWSTR,int,DWORD,RECT*,\n                               const DTTOPTS*);\n\n#define ETDT_DISABLE       0x00000001\n#define ETDT_ENABLE        0x00000002\n#define ETDT_USETABTEXTURE 0x00000004\n#define ETDT_ENABLETAB     (ETDT_ENABLE|ETDT_USETABTEXTURE)\n\nHRESULT WINAPI EnableThemeDialogTexture(HWND,DWORD);\nHRESULT WINAPI EnableTheming(BOOL);\nHRESULT WINAPI GetCurrentThemeName(LPWSTR,int,LPWSTR,int,LPWSTR,int);\n\n#define STAP_ALLOW_NONCLIENT    (1<<0)\n#define STAP_ALLOW_CONTROLS     (1<<1)\n#define STAP_ALLOW_WEBCONTENT   (1<<2)\n\nDWORD WINAPI GetThemeAppProperties(void);\nHRESULT WINAPI GetThemeBackgroundContentRect(HTHEME,HDC,int,int,\n                                             const RECT*,RECT*);\nHRESULT WINAPI GetThemeBackgroundExtent(HTHEME,HDC,int,int,const RECT*,RECT*);\nHRESULT WINAPI GetThemeBackgroundRegion(HTHEME,HDC,int,int,const RECT*,HRGN*);\nHRESULT WINAPI GetThemeBool(HTHEME,int,int,int,BOOL*);\nHRESULT WINAPI GetThemeColor(HTHEME,int,int,int,COLORREF*);\n\n#if defined(__GNUC__)\n# define SZ_THDOCPROP_DISPLAYNAME   (const WCHAR []){ 'D','i','s','p','l','a','y','N','a','m','e',0 }\n# define SZ_THDOCPROP_CANONICALNAME (const WCHAR []){ 'T','h','e','m','e','N','a','m','e',0 }\n# define SZ_THDOCPROP_TOOLTIP       (const WCHAR []){ 'T','o','o','l','T','i','p',0 }\n# define SZ_THDOCPROP_AUTHOR        (const WCHAR []){ 'a','u','t','h','o','r',0 }\n#elif defined(_MSC_VER)\n# define SZ_THDOCPROP_DISPLAYNAME   L\"DisplayName\"\n# define SZ_THDOCPROP_CANONICALNAME L\"ThemeName\"\n# define SZ_THDOCPROP_TOOLTIP       L\"ToolTip\"\n# define SZ_THDOCPROP_AUTHOR        L\"author\"\n#else\nstatic const WCHAR SZ_THDOCPROP_DISPLAYNAME[] =   { 'D','i','s','p','l','a','y','N','a','m','e',0 };\nstatic const WCHAR SZ_THDOCPROP_CANONICALNAME[] = { 'T','h','e','m','e','N','a','m','e',0 };\nstatic const WCHAR SZ_THDOCPROP_TOOLTIP[] =       { 'T','o','o','l','T','i','p',0 };\nstatic const WCHAR SZ_THDOCPROP_AUTHOR[] =        { 'a','u','t','h','o','r',0 };\n#endif\n\nHRESULT WINAPI GetThemeDocumentationProperty(LPCWSTR,LPCWSTR,LPWSTR,int);\nHRESULT WINAPI GetThemeEnumValue(HTHEME,int,int,int,int*);\nHRESULT WINAPI GetThemeFilename(HTHEME,int,int,int,LPWSTR,int);\nHRESULT WINAPI GetThemeFont(HTHEME,HDC,int,int,int,LOGFONTW*);\nHRESULT WINAPI GetThemeInt(HTHEME,int,int,int,int*);\n\n/* MAX_INTLIST_COUNT was 10 before Vista */\n#define MAX_INTLIST_COUNT 402\ntypedef struct _INTLIST {\n    int iValueCount;\n    int iValues[MAX_INTLIST_COUNT];\n} INTLIST, *PINTLIST;\n\nHRESULT WINAPI GetThemeIntList(HTHEME,int,int,int,INTLIST*);\n\ntypedef struct _MARGINS {\n    int cxLeftWidth;\n    int cxRightWidth;\n    int cyTopHeight;\n    int cyBottomHeight;\n} MARGINS, *PMARGINS;\n\nHRESULT WINAPI GetThemeMargins(HTHEME,HDC,int,int,int,RECT*,MARGINS*);\nHRESULT WINAPI GetThemeMetric(HTHEME,HDC,int,int,int,int*);\n\ntypedef enum {\n    TS_MIN,\n    TS_TRUE,\n    TS_DRAW\n} THEMESIZE;\n\nHRESULT WINAPI GetThemePartSize(HTHEME,HDC,int,int,RECT*,THEMESIZE,SIZE*);\nHRESULT WINAPI GetThemePosition(HTHEME,int,int,int,POINT*);\n\ntypedef enum {\n    PO_STATE,\n    PO_PART,\n    PO_CLASS,\n    PO_GLOBAL,\n    PO_NOTFOUND\n} PROPERTYORIGIN;\n\nHRESULT WINAPI GetThemePropertyOrigin(HTHEME,int,int,int,PROPERTYORIGIN*);\nHRESULT WINAPI GetThemeRect(HTHEME,int,int,int,RECT*);\nHRESULT WINAPI GetThemeString(HTHEME,int,int,int,LPWSTR,int);\nBOOL WINAPI GetThemeSysBool(HTHEME,int);\nCOLORREF WINAPI GetThemeSysColor(HTHEME,int);\nHBRUSH WINAPI GetThemeSysColorBrush(HTHEME,int);\nHRESULT WINAPI GetThemeSysFont(HTHEME,int,LOGFONTW*);\nHRESULT WINAPI GetThemeSysInt(HTHEME,int,int*);\nint WINAPI GetThemeSysSize(HTHEME,int);\nHRESULT WINAPI GetThemeSysString(HTHEME,int,LPWSTR,int);\nHRESULT WINAPI GetThemeTextExtent(HTHEME,HDC,int,int,LPCWSTR,int,DWORD,\n                                  const RECT*,RECT*);\nHRESULT WINAPI GetThemeTextMetrics(HTHEME,HDC,int,int,TEXTMETRICW*);\nHRESULT WINAPI GetThemeTransitionDuration(HTHEME,int,int,int,int,DWORD*);\nHTHEME WINAPI GetWindowTheme(HWND);\n\n#define HTTB_BACKGROUNDSEG          0x0000\n#define HTTB_FIXEDBORDER            0x0002\n#define HTTB_CAPTION                0x0004\n#define HTTB_RESIZINGBORDER_LEFT    0x0010\n#define HTTB_RESIZINGBORDER_TOP     0x0020\n#define HTTB_RESIZINGBORDER_RIGHT   0x0040\n#define HTTB_RESIZINGBORDER_BOTTOM  0x0080\n#define HTTB_RESIZINGBORDER \\\n    (HTTB_RESIZINGBORDER_LEFT|HTTB_RESIZINGBORDER_TOP|\\\n     HTTB_RESIZINGBORDER_RIGHT|HTTB_RESIZINGBORDER_BOTTOM)\n#define HTTB_SIZINGTEMPLATE         0x0100\n#define HTTB_SYSTEMSIZINGMARGINS    0x0200\n\n#define OTD_FORCE_RECT_SIZING       0x0001\n#define OTD_NONCLIENT               0x0002\n#define OTD_VALIDBITS               (OTD_FORCE_RECT_SIZING | OTD_NONCLIENT)\n\nenum WINDOWTHEMEATTRIBUTETYPE { WTA_NONCLIENT = 1 };\n\nHRESULT WINAPI HitTestThemeBackground(HTHEME,HDC,int,int,DWORD,const RECT*,\n                                      HRGN,POINT,WORD*);\nBOOL WINAPI IsAppThemed(void);\nBOOL WINAPI IsCompositionActive(void);\nBOOL WINAPI IsThemeActive(void);\nBOOL WINAPI IsThemeBackgroundPartiallyTransparent(HTHEME,int,int);\nBOOL WINAPI IsThemeDialogTextureEnabled(HWND);\nBOOL WINAPI IsThemePartDefined(HTHEME,int,int);\nHTHEME WINAPI OpenThemeData(HWND,LPCWSTR);\nHTHEME WINAPI OpenThemeDataEx(HWND,LPCWSTR,DWORD);\nvoid WINAPI SetThemeAppProperties(DWORD);\nHRESULT WINAPI SetWindowTheme(HWND,LPCWSTR,LPCWSTR);\nHRESULT WINAPI SetWindowThemeAttribute(HWND,enum WINDOWTHEMEATTRIBUTETYPE,PVOID,DWORD);\n\n/* Double-buffered Drawing API */\n\ntypedef HANDLE HPAINTBUFFER;\n\nHRESULT WINAPI BufferedPaintInit(VOID);\nHRESULT WINAPI BufferedPaintUnInit(VOID);\n\ntypedef enum _BP_BUFFERFORMAT\n{\n\tBPBF_COMPATIBLEBITMAP,\n\tBPBF_DIB,\n\tBPBF_TOPDOWNDIB,\n\tBPBF_TOPDOWNMONODIB\n} BP_BUFFERFORMAT;\n\ntypedef struct _BP_PAINTPARAMS\n{\n\tDWORD cbSize;\n\tDWORD dwFlags;\n\tconst RECT *prcExclude;\n\tconst BLENDFUNCTION *pBlendFunction;\n} BP_PAINTPARAMS, *PBP_PAINTPARAMS;\n\nHPAINTBUFFER WINAPI BeginBufferedPaint(HDC, const RECT *, BP_BUFFERFORMAT,\n                                       BP_PAINTPARAMS *,HDC *);\n\nHRESULT WINAPI EndBufferedPaint(HPAINTBUFFER, BOOL);\n\nHRESULT WINAPI BufferedPaintClear(HPAINTBUFFER, const RECT *);\nHRESULT WINAPI BufferedPaintSetAlpha(HPAINTBUFFER, const RECT *, BYTE);\nHRESULT WINAPI GetBufferedPaintBits(HPAINTBUFFER, RGBQUAD **, int *);\nHDC WINAPI GetBufferedPaintDC(HPAINTBUFFER);\nHDC WINAPI GetBufferedPaintTargetDC(HPAINTBUFFER);\nHRESULT WINAPI GetBufferedPaintTargetRect(HPAINTBUFFER, RECT *prc);\n\n/* double-buffered animation functions */\n\ntypedef HANDLE HANIMATIONBUFFER;\n\ntypedef enum _BP_ANIMATIONSTYLE\n{\n    BPAS_NONE,\n    BPAS_LINEAR,\n    BPAS_CUBIC,\n    BPAS_SINE\n} BP_ANIMATIONSTYLE;\n\ntypedef struct _BP_ANIMATIONPARAMS\n{\n    DWORD cbSize;\n    DWORD dwFlags;\n    BP_ANIMATIONSTYLE style;\n    DWORD dwDuration;\n} BP_ANIMATIONPARAMS, *PBP_ANIMATIONPARAMS;\n\nHANIMATIONBUFFER WINAPI BeginBufferedAnimation(HWND, HDC, const RECT *,\n                                               BP_BUFFERFORMAT, BP_PAINTPARAMS *,\n                                               BP_ANIMATIONPARAMS *, HDC *, HDC *);\n\nBOOL WINAPI BufferedPaintRenderAnimation(HWND, HDC);\nHRESULT WINAPI BufferedPaintStopAllAnimations(HWND);\nHRESULT WINAPI EndBufferedAnimation(HANIMATIONBUFFER, BOOL);\n\n#endif\n"
  },
  {
    "path": "wine/windows/vdmdbg.h",
    "content": "/*\n * VDMDBG definitions\n *\n * Copyright (C) 2007 James Hawkins\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_VDMDBG_H\n#define __WINE_VDMDBG_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\ntypedef BOOL (WINAPI *PROCESSENUMPROC)(DWORD, DWORD, LPARAM);\ntypedef BOOL (WINAPI *TASKENUMPROC)(DWORD, WORD, WORD, LPARAM);\ntypedef BOOL (WINAPI *TASKENUMPROCEX)(DWORD, WORD, WORD, PSZ, PSZ, LPARAM);\n\nINT WINAPI VDMEnumProcessWOW(PROCESSENUMPROC, LPARAM);\nINT WINAPI VDMEnumTaskWOW(DWORD, TASKENUMPROC, LPARAM);\nINT WINAPI VDMEnumTaskWOWEx(DWORD, TASKENUMPROCEX, LPARAM);\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif /* __WINE_VDMDBG_H */\n"
  },
  {
    "path": "wine/windows/ver.h",
    "content": "/* Definitions for the VERsion infolibrary (VER.DLL)\n *\n * Copyright 1996 Marcus Meissner\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n * Marked as obsolete:  Albert den Haan (Corel Corp) 1999-04-28\n * VER.H obsolete, include winver.h instead\n */\n#ifndef __WINE_VER_H\n#define __WINE_VER_H\n\n#include <winver.h>\n\n#endif\t/* __WINE_VER_H */\n"
  },
  {
    "path": "wine/windows/verrsrc.h",
    "content": "/* Definitions for the VERsion info library (VER.DLL)\n *\n * Copyright 1996 Marcus Meissner\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_VERRSRC_H\n#define __WINE_VERRSRC_H\n\n/* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */\n#ifndef __MSABI_LONG\n# if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)\n#  define __MSABI_LONG(x)         x ## l\n# else\n#  define __MSABI_LONG(x)         x\n# endif\n#endif\n\n/* resource ids for different version infos */\n#define\tVS_FILE_INFO\t\tRT_VERSION\n#define\tVS_VERSION_INFO\t\t1\n#define\tVS_USER_DEFINED\t\t100\n\n#define VS_FFI_SIGNATURE        __MSABI_LONG(0xfeef04bd)   /* FileInfo Magic */\n#define VS_FFI_STRUCVERSION     __MSABI_LONG(0x00010000)   /* struc version 1.0 */\n#define VS_FFI_FILEFLAGSMASK    __MSABI_LONG(0x0000003f)   /* valid flags */\n\n/* VS_VERSION.dwFileFlags */\n#define VS_FF_DEBUG             __MSABI_LONG(0x01)\n#define VS_FF_PRERELEASE        __MSABI_LONG(0x02)\n#define VS_FF_PATCHED           __MSABI_LONG(0x04)\n#define VS_FF_PRIVATEBUILD      __MSABI_LONG(0x08)\n#define VS_FF_INFOINFERRED      __MSABI_LONG(0x10)\n#define VS_FF_SPECIALBUILD      __MSABI_LONG(0x20)\n\n/* VS_VERSION.dwFileOS */\n\n/* major os version */\n#define VOS_UNKNOWN             __MSABI_LONG(0x00000000)\n#define VOS_DOS                 __MSABI_LONG(0x00010000)\n#define VOS_OS216               __MSABI_LONG(0x00020000)\n#define VOS_OS232               __MSABI_LONG(0x00030000)\n#define VOS_NT                  __MSABI_LONG(0x00040000)\n#define VOS_WINCE               __MSABI_LONG(0x00050000)\n\n/* minor os version */\n#define VOS__BASE               __MSABI_LONG(0x00000000)\n#define VOS__WINDOWS16          __MSABI_LONG(0x00000001)\n#define VOS__PM16               __MSABI_LONG(0x00000002)\n#define VOS__PM32               __MSABI_LONG(0x00000003)\n#define VOS__WINDOWS32          __MSABI_LONG(0x00000004)\n\n/* possible versions */\n#define\tVOS_DOS_WINDOWS16\t(VOS_DOS|VOS__WINDOWS16)\n#define\tVOS_DOS_WINDOWS32\t(VOS_DOS|VOS__WINDOWS32)\n#define\tVOS_OS216_PM16\t\t(VOS_OS216|VOS__PM16)\n#define\tVOS_OS232_PM32\t\t(VOS_OS232|VOS__PM32)\n#define\tVOS_NT_WINDOWS32\t(VOS_NT|VOS__WINDOWS32)\n\n/* VS_VERSION.dwFileType */\n#define VFT_UNKNOWN             __MSABI_LONG(0x00000000)\n#define VFT_APP                 __MSABI_LONG(0x00000001)\n#define VFT_DLL                 __MSABI_LONG(0x00000002)\n#define VFT_DRV                 __MSABI_LONG(0x00000003)\n#define VFT_FONT                __MSABI_LONG(0x00000004)\n#define VFT_VXD                 __MSABI_LONG(0x00000005)\n/* ??one type missing??         __MSABI_LONG(0x00000006) -Marcus */\n#define VFT_STATIC_LIB          __MSABI_LONG(0x00000007)\n\n/* VS_VERSION.dwFileSubtype for VFT_DRV */\n#define VFT2_UNKNOWN            __MSABI_LONG(0x00000000)\n#define VFT2_DRV_PRINTER        __MSABI_LONG(0x00000001)\n#define VFT2_DRV_KEYBOARD       __MSABI_LONG(0x00000002)\n#define VFT2_DRV_LANGUAGE       __MSABI_LONG(0x00000003)\n#define VFT2_DRV_DISPLAY        __MSABI_LONG(0x00000004)\n#define VFT2_DRV_MOUSE          __MSABI_LONG(0x00000005)\n#define VFT2_DRV_NETWORK        __MSABI_LONG(0x00000006)\n#define VFT2_DRV_SYSTEM         __MSABI_LONG(0x00000007)\n#define VFT2_DRV_INSTALLABLE    __MSABI_LONG(0x00000008)\n#define VFT2_DRV_SOUND          __MSABI_LONG(0x00000009)\n#define VFT2_DRV_COMM           __MSABI_LONG(0x0000000a)\n#define VFT2_DRV_INPUTMETHOD    __MSABI_LONG(0x0000000b)\n#define VFT2_DRV_VERSIONED_PRINTER __MSABI_LONG(0x0000000c)\n\n/* VS_VERSION.dwFileSubtype for VFT_FONT */\n#define VFT2_FONT_RASTER        __MSABI_LONG(0x00000001)\n#define VFT2_FONT_VECTOR        __MSABI_LONG(0x00000002)\n#define VFT2_FONT_TRUETYPE      __MSABI_LONG(0x00000003)\n\n/* VerFindFile Flags */\n\t/* input */\n#define\tVFFF_ISSHAREDFILE\t0x0001\n\n\t/* output (returned) */\n#define\tVFF_CURNEDEST\t\t0x0001\n#define\tVFF_FILEINUSE\t\t0x0002\n#define\tVFF_BUFFTOOSMALL\t0x0004\n\n/* VerInstallFile Flags */\n\t/* input */\n#define\tVIFF_FORCEINSTALL\t0x0001\n#define\tVIFF_DONTDELETEOLD\t0x0002\n\n\t/* output (return) */\n#define VIF_TEMPFILE            __MSABI_LONG(0x00000001)\n#define VIF_MISMATCH            __MSABI_LONG(0x00000002)\n#define VIF_SRCOLD              __MSABI_LONG(0x00000004)\n#define VIF_DIFFLANG            __MSABI_LONG(0x00000008)\n#define VIF_DIFFCODEPG          __MSABI_LONG(0x00000010)\n#define VIF_DIFFTYPE            __MSABI_LONG(0x00000020)\n#define VIF_WRITEPROT           __MSABI_LONG(0x00000040)\n#define VIF_FILEINUSE           __MSABI_LONG(0x00000080)\n#define VIF_OUTOFSPACE          __MSABI_LONG(0x00000100)\n#define VIF_ACCESSVIOLATION     __MSABI_LONG(0x00000200)\n#define VIF_SHARINGVIOLATION    __MSABI_LONG(0x00000400)\n#define VIF_CANNOTCREATE        __MSABI_LONG(0x00000800)\n#define VIF_CANNOTDELETE        __MSABI_LONG(0x00001000)\n#define VIF_CANNOTRENAME        __MSABI_LONG(0x00002000)\n#define VIF_CANNOTDELETECUR     __MSABI_LONG(0x00004000)\n#define VIF_OUTOFMEMORY         __MSABI_LONG(0x00008000)\n#define VIF_CANNOTREADSRC       __MSABI_LONG(0x00010000)\n#define VIF_CANNOTREADDST       __MSABI_LONG(0x00020000)\n#define VIF_BUFFTOOSMALL        __MSABI_LONG(0x00040000)\n#define VIF_CANNOTLOADLZ32      __MSABI_LONG(0x00080000)\n#define VIF_CANNOTLOADCABINET   __MSABI_LONG(0x00100000)\n\n\n#ifndef RC_INVOKED\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n#define FILE_VER_GET_LOCALISED  0x01\n#define FILE_VER_GET_NEUTRAL    0x02\n#define FILE_VER_GET_PREFETCHED 0x04\n\ntypedef struct tagVS_FIXEDFILEINFO {\n\tDWORD   dwSignature;\n\tDWORD   dwStrucVersion;\n\tDWORD   dwFileVersionMS;\n\tDWORD   dwFileVersionLS;\n\tDWORD   dwProductVersionMS;\n\tDWORD   dwProductVersionLS;\n\tDWORD   dwFileFlagsMask;\n\tDWORD   dwFileFlags;\n\tDWORD   dwFileOS;\n\tDWORD   dwFileType;\n\tDWORD   dwFileSubtype;\n\tDWORD   dwFileDateMS;\n\tDWORD   dwFileDateLS;\n} VS_FIXEDFILEINFO;\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif /* RC_INVOKED */\n\n#endif /* __WINE_VERRSRC_H */\n"
  },
  {
    "path": "wine/windows/vfw.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_VFW_H\n#define __WINE_VFW_H\n\n#include <mmsystem.h>\n#include <mmreg.h>\n#include <msacm.h>\n\n#define VFWAPI\tWINAPI\n#define VFWAPIV\tWINAPIV\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif  /* __cplusplus */\n\ntypedef HANDLE HDRAWDIB;\n\n/*****************************************************************************\n * Predeclare the interfaces\n */\ntypedef struct IAVIStream *PAVISTREAM;\ntypedef struct IAVIFile *PAVIFILE;\ntypedef struct IGetFrame *PGETFRAME;\ntypedef struct IAVIEditStream *PAVIEDITSTREAM;\n\n/* Installable Compressor Manager */\n\n#define ICVERSION 0x0104\n\nDECLARE_HANDLE(HIC);\n\n/* error return codes */\n#define\tICERR_OK\t\t0\n#define\tICERR_DONTDRAW\t\t1\n#define\tICERR_NEWPALETTE\t2\n#define\tICERR_GOTOKEYFRAME\t3\n#define\tICERR_STOPDRAWING\t4\n\n#define\tICERR_UNSUPPORTED\t-1\n#define\tICERR_BADFORMAT\t\t-2\n#define\tICERR_MEMORY\t\t-3\n#define\tICERR_INTERNAL\t\t-4\n#define\tICERR_BADFLAGS\t\t-5\n#define\tICERR_BADPARAM\t\t-6\n#define\tICERR_BADSIZE\t\t-7\n#define\tICERR_BADHANDLE\t\t-8\n#define\tICERR_CANTUPDATE\t-9\n#define\tICERR_ABORT\t\t-10\n#define\tICERR_ERROR\t\t-100\n#define\tICERR_BADBITDEPTH\t-200\n#define\tICERR_BADIMAGESIZE\t-201\n\n#define\tICERR_CUSTOM\t\t-400\n\n/* ICM Messages */\n#define\tICM_USER\t\t(DRV_USER+0x0000)\n\n/* ICM driver message range */\n#define\tICM_RESERVED_LOW\t(DRV_USER+0x1000)\n#define\tICM_RESERVED_HIGH\t(DRV_USER+0x2000)\n#define\tICM_RESERVED\t\tICM_RESERVED_LOW\n\n#define\tICM_GETSTATE\t\t(ICM_RESERVED+0)\n#define\tICM_SETSTATE\t\t(ICM_RESERVED+1)\n#define\tICM_GETINFO\t\t(ICM_RESERVED+2)\n\n#define\tICM_CONFIGURE\t\t(ICM_RESERVED+10)\n#define\tICM_ABOUT\t\t(ICM_RESERVED+11)\n/* */\n\n#define\tICM_GETDEFAULTQUALITY\t(ICM_RESERVED+30)\n#define\tICM_GETQUALITY\t\t(ICM_RESERVED+31)\n#define\tICM_SETQUALITY\t\t(ICM_RESERVED+32)\n\n#define\tICM_SET\t\t\t(ICM_RESERVED+40)\n#define\tICM_GET\t\t\t(ICM_RESERVED+41)\n\n/* 2 constant FOURCC codes */\n#define ICM_FRAMERATE\t\tmmioFOURCC('F','r','m','R')\n#define ICM_KEYFRAMERATE\tmmioFOURCC('K','e','y','R')\n\n#define\tICM_COMPRESS_GET_FORMAT\t\t(ICM_USER+4)\n#define\tICM_COMPRESS_GET_SIZE\t\t(ICM_USER+5)\n#define\tICM_COMPRESS_QUERY\t\t(ICM_USER+6)\n#define\tICM_COMPRESS_BEGIN\t\t(ICM_USER+7)\n#define\tICM_COMPRESS\t\t\t(ICM_USER+8)\n#define\tICM_COMPRESS_END\t\t(ICM_USER+9)\n\n#define\tICM_DECOMPRESS_GET_FORMAT\t(ICM_USER+10)\n#define\tICM_DECOMPRESS_QUERY\t\t(ICM_USER+11)\n#define\tICM_DECOMPRESS_BEGIN\t\t(ICM_USER+12)\n#define\tICM_DECOMPRESS\t\t\t(ICM_USER+13)\n#define\tICM_DECOMPRESS_END\t\t(ICM_USER+14)\n#define\tICM_DECOMPRESS_SET_PALETTE\t(ICM_USER+29)\n#define\tICM_DECOMPRESS_GET_PALETTE\t(ICM_USER+30)\n\n#define\tICM_DRAW_QUERY\t\t\t(ICM_USER+31)\n#define\tICM_DRAW_BEGIN\t\t\t(ICM_USER+15)\n#define\tICM_DRAW_GET_PALETTE\t\t(ICM_USER+16)\n#define\tICM_DRAW_START\t\t\t(ICM_USER+18)\n#define\tICM_DRAW_STOP\t\t\t(ICM_USER+19)\n#define\tICM_DRAW_END\t\t\t(ICM_USER+21)\n#define\tICM_DRAW_GETTIME\t\t(ICM_USER+32)\n#define\tICM_DRAW\t\t\t(ICM_USER+33)\n#define\tICM_DRAW_WINDOW\t\t\t(ICM_USER+34)\n#define\tICM_DRAW_SETTIME\t\t(ICM_USER+35)\n#define\tICM_DRAW_REALIZE\t\t(ICM_USER+36)\n#define\tICM_DRAW_FLUSH\t\t\t(ICM_USER+37)\n#define\tICM_DRAW_RENDERBUFFER\t\t(ICM_USER+38)\n\n#define\tICM_DRAW_START_PLAY\t\t(ICM_USER+39)\n#define\tICM_DRAW_STOP_PLAY\t\t(ICM_USER+40)\n\n#define\tICM_DRAW_SUGGESTFORMAT\t\t(ICM_USER+50)\n#define\tICM_DRAW_CHANGEPALETTE\t\t(ICM_USER+51)\n\n#define\tICM_GETBUFFERSWANTED\t\t(ICM_USER+41)\n\n#define\tICM_GETDEFAULTKEYFRAMERATE\t(ICM_USER+42)\n\n#define\tICM_DECOMPRESSEX_BEGIN\t\t(ICM_USER+60)\n#define\tICM_DECOMPRESSEX_QUERY\t\t(ICM_USER+61)\n#define\tICM_DECOMPRESSEX\t\t(ICM_USER+62)\n#define\tICM_DECOMPRESSEX_END\t\t(ICM_USER+63)\n\n#define\tICM_COMPRESS_FRAMES_INFO\t(ICM_USER+70)\n#define\tICM_SET_STATUS_PROC\t\t(ICM_USER+72)\n\n#ifndef comptypeDIB\n#define comptypeDIB  mmioFOURCC('D','I','B',' ')\n#endif\n\n/* structs */\n\n/* NOTE: Only the 16 bit structs are packed. Structs that are packed anyway\n * have not been changed. If a structure is later extended, you may need to create\n * two versions of it.\n */\n\ntypedef struct {\n\tDWORD\tdwSize;\t\t/* 00: size */\n\tDWORD\tfccType;\t/* 04: type 'vidc' usually */\n\tDWORD\tfccHandler;\t/* 08: */\n\tDWORD\tdwVersion;\t/* 0c: version of compman opening you */\n\tDWORD\tdwFlags;\t/* 10: LOWORD is type specific */\n\tLRESULT\tdwError;\t/* 14: */\n\tLPVOID\tpV1Reserved;\t/* 18: */\n\tLPVOID\tpV2Reserved;\t/* 1c: */\n\tDWORD\tdnDevNode;\t/* 20: */\n\t\t\t\t/* 24: */\n} ICOPEN,*LPICOPEN;\n\n#define ICCOMPRESS_KEYFRAME     __MSABI_LONG(0x00000001)\n\ntypedef struct {\n    DWORD\t\tdwFlags;\n    LPBITMAPINFOHEADER\tlpbiOutput;\n    LPVOID\t\tlpOutput;\n    LPBITMAPINFOHEADER\tlpbiInput;\n    LPVOID\t\tlpInput;\n    LPDWORD\t\tlpckid;\n    LPDWORD\t\tlpdwFlags;\n    LONG\t\tlFrameNum;\n    DWORD\t\tdwFrameSize;\n    DWORD\t\tdwQuality;\n    LPBITMAPINFOHEADER\tlpbiPrev;\n    LPVOID\t\tlpPrev;\n} ICCOMPRESS;\n\nDWORD VFWAPIV ICCompress(\n\tHIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiOutput,LPVOID lpData,\n\tLPBITMAPINFOHEADER lpbiInput,LPVOID lpBits,LPDWORD lpckid,\n\tLPDWORD lpdwFlags,LONG lFrameNum,DWORD dwFrameSize,DWORD dwQuality,\n\tLPBITMAPINFOHEADER lpbiPrev,LPVOID lpPrev\n);\n\n#define ICCompressGetFormat(hic, lpbiInput, lpbiOutput) \t\t\\\n\tICSendMessage(\t\t\t\t\t\t\t\\\n\t    hic,ICM_COMPRESS_GET_FORMAT,(DWORD_PTR)(LPVOID)(lpbiInput),\t\\\n\t    (DWORD_PTR)(LPVOID)(lpbiOutput)\t\t\t\t\t\\\n\t)\n\n#define ICCompressGetFormatSize(hic,lpbi) ICCompressGetFormat(hic,lpbi,NULL)\n\n#define ICCompressBegin(hic, lpbiInput, lpbiOutput) \t\t\t\\\n    ICSendMessage(\t\t\t\t\t\t\t\\\n    \thic, ICM_COMPRESS_BEGIN, (DWORD_PTR)(LPVOID)(lpbiInput),\t\t\\\n\t(DWORD_PTR)(LPVOID)(lpbiOutput)\t\t\t\t\t\\\n    )\n\n#define ICCompressGetSize(hic, lpbiInput, lpbiOutput) \t\t\t\\\n    ICSendMessage(\t\t\t\t\t\t\t\\\n    \thic, ICM_COMPRESS_GET_SIZE, (DWORD_PTR)(LPVOID)(lpbiInput), \t\\\n\t(DWORD_PTR)(LPVOID)(lpbiOutput)\t\t\t\t\t\\\n    )\n\n#define ICCompressQuery(hic, lpbiInput, lpbiOutput)\t\t\\\n    ICSendMessage(\t\t\t\t\t\t\\\n    \thic, ICM_COMPRESS_QUERY, (DWORD_PTR)(LPVOID)(lpbiInput),\t\\\n\t(DWORD_PTR)(LPVOID)(lpbiOutput)\t\t\t\t\\\n    )\n\n#define ICCompressEnd(hic) ICSendMessage(hic, ICM_COMPRESS_END, 0, 0)\n\n/* ICCOMPRESSFRAMES.dwFlags */\n#define ICCOMPRESSFRAMES_PADDING        0x00000001\ntypedef struct {\n    DWORD               dwFlags;\n    LPBITMAPINFOHEADER  lpbiOutput;\n    LPARAM              lOutput;\n    LPBITMAPINFOHEADER  lpbiInput;\n    LPARAM              lInput;\n    LONG                lStartFrame;\n    LONG                lFrameCount;\n    LONG                lQuality;\n    LONG                lDataRate;\n    LONG                lKeyRate;\n    DWORD               dwRate;\n    DWORD               dwScale;\n    DWORD               dwOverheadPerFrame;\n    DWORD               dwReserved2;\n    LONG (CALLBACK *GetData)(LPARAM lInput,LONG lFrame,LPVOID lpBits,LONG len);\n    LONG (CALLBACK *PutData)(LPARAM lOutput,LONG lFrame,LPVOID lpBits,LONG len);\n} ICCOMPRESSFRAMES;\n\ntypedef struct {\n    DWORD\t\tdwFlags;\n    LPARAM\t\tlParam;\n   /* messages for Status callback */\n#define ICSTATUS_START\t    0\n#define ICSTATUS_STATUS\t    1\n#define ICSTATUS_END\t    2\n#define ICSTATUS_ERROR\t    3\n#define ICSTATUS_YIELD\t    4\n    /* FIXME: some X11 libs define Status as int... */\n    /* LONG (CALLBACK *zStatus)(LPARAM lParam, UINT message, LONG l); */\n    LONG (CALLBACK *zStatus)(LPARAM lParam, UINT message, LONG l);\n} ICSETSTATUSPROC;\n\n/* Values for wMode of ICOpen() */\n#define\tICMODE_COMPRESS\t\t1\n#define\tICMODE_DECOMPRESS\t2\n#define\tICMODE_FASTDECOMPRESS\t3\n#define\tICMODE_QUERY\t\t4\n#define\tICMODE_FASTCOMPRESS\t5\n#define\tICMODE_DRAW\t\t8\n\n/* quality flags */\n#define ICQUALITY_LOW       0\n#define ICQUALITY_HIGH      10000\n#define ICQUALITY_DEFAULT   -1\n\ntypedef struct {\n\tDWORD\tdwSize;\t\t/* 00: */\n\tDWORD\tfccType;\t/* 04:compressor type     'vidc' 'audc' */\n\tDWORD\tfccHandler;\t/* 08:compressor sub-type 'rle ' 'jpeg' 'pcm '*/\n\tDWORD\tdwFlags;\t/* 0c:flags LOWORD is type specific */\n\tDWORD\tdwVersion;\t/* 10:version of the driver */\n\tDWORD\tdwVersionICM;\t/* 14:version of the ICM used */\n\t/*\n\t * under Win32, the driver always returns UNICODE strings.\n\t */\n\tWCHAR\tszName[16];\t\t/* 18:short name */\n\tWCHAR\tszDescription[128];\t/* 38:long name */\n\tWCHAR\tszDriver[128];\t\t/* 138:driver that contains compressor*/\n\t\t\t\t\t/* 238: */\n} ICINFO;\n\n/* ICINFO.dwFlags */\n#define\tVIDCF_QUALITY\t\t0x0001  /* supports quality */\n#define\tVIDCF_CRUNCH\t\t0x0002  /* supports crunching to a frame size */\n#define\tVIDCF_TEMPORAL\t\t0x0004  /* supports inter-frame compress */\n#define\tVIDCF_COMPRESSFRAMES\t0x0008  /* wants the compress all frames message */\n#define\tVIDCF_DRAW\t\t0x0010  /* supports drawing */\n#define\tVIDCF_FASTTEMPORALC\t0x0020  /* does not need prev frame on compress */\n#define\tVIDCF_FASTTEMPORALD\t0x0080  /* does not need prev frame on decompress */\n#define\tVIDCF_QUALITYTIME\t0x0040  /* supports temporal quality */\n\n#define\tVIDCF_FASTTEMPORAL\t(VIDCF_FASTTEMPORALC|VIDCF_FASTTEMPORALD)\n\n\n/* function shortcuts */\n/* ICM_ABOUT */\n#define ICMF_ABOUT_QUERY         0x00000001\n\n#define ICQueryAbout(hic) \\\n\t(ICSendMessage(hic,ICM_ABOUT,(DWORD_PTR)-1,ICMF_ABOUT_QUERY)==ICERR_OK)\n\n#define ICAbout(hic, hwnd) ICSendMessage(hic,ICM_ABOUT,(DWORD_PTR)(UINT_PTR)(hwnd),0)\n\n/* ICM_CONFIGURE */\n#define ICMF_CONFIGURE_QUERY\t0x00000001\n#define ICQueryConfigure(hic) \\\n\t(ICSendMessage(hic,ICM_CONFIGURE,(DWORD_PTR)-1,ICMF_CONFIGURE_QUERY)==ICERR_OK)\n\n#define ICConfigure(hic,hwnd) \\\n\tICSendMessage(hic,ICM_CONFIGURE,(DWORD_PTR)(UINT_PTR)(hwnd),0)\n\n/* Decompression stuff */\n#define ICDECOMPRESS_HURRYUP\t\t0x80000000\t/* don't draw just buffer (hurry up!) */\n#define ICDECOMPRESS_UPDATE\t\t0x40000000\t/* don't draw just update screen */\n#define ICDECOMPRESS_PREROLL\t\t0x20000000\t/* this frame is before real start */\n#define ICDECOMPRESS_NULLFRAME\t\t0x10000000\t/* repeat last frame */\n#define ICDECOMPRESS_NOTKEYFRAME\t0x08000000\t/* this frame is not a key frame */\n\ntypedef struct {\n    DWORD\t\tdwFlags;\t/* flags (from AVI index...) */\n    LPBITMAPINFOHEADER\tlpbiInput;\t/* BITMAPINFO of compressed data */\n    LPVOID\t\tlpInput;\t/* compressed data */\n    LPBITMAPINFOHEADER\tlpbiOutput;\t/* DIB to decompress to */\n    LPVOID\t\tlpOutput;\n    DWORD\t\tckid;\t\t/* ckid from AVI file */\n} ICDECOMPRESS;\n\ntypedef struct {\n    DWORD\t\tdwFlags;\n    LPBITMAPINFOHEADER\tlpbiSrc;\n    LPVOID\t\tlpSrc;\n    LPBITMAPINFOHEADER\tlpbiDst;\n    LPVOID\t\tlpDst;\n\n    /* changed for ICM_DECOMPRESSEX */\n    INT\t\t\txDst;       /* destination rectangle */\n    INT\t\t\tyDst;\n    INT\t\t\tdxDst;\n    INT\t\t\tdyDst;\n\n    INT\t\t\txSrc;       /* source rectangle */\n    INT\t\t\tySrc;\n    INT\t\t\tdxSrc;\n    INT\t\t\tdySrc;\n} ICDECOMPRESSEX;\n\nDWORD VFWAPIV ICDecompress(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiFormat,LPVOID lpData,LPBITMAPINFOHEADER lpbi,LPVOID lpBits);\n\n#define ICDecompressBegin(hic, lpbiInput, lpbiOutput) \t\\\n    ICSendMessage(\t\t\t\t\t\t\\\n    \thic, ICM_DECOMPRESS_BEGIN, (DWORD_PTR)(LPVOID)(lpbiInput),\t\\\n\t(DWORD_PTR)(LPVOID)(lpbiOutput)\t\t\t\t\\\n    )\n\n#define ICDecompressQuery(hic, lpbiInput, lpbiOutput) \t\\\n    ICSendMessage(\t\t\t\t\t\t\\\n    \thic,ICM_DECOMPRESS_QUERY, (DWORD_PTR)(LPVOID)(lpbiInput),\t\\\n\t(DWORD_PTR) (LPVOID)(lpbiOutput)\t\t\t\t\\\n    )\n\n#define ICDecompressGetFormat(hic, lpbiInput, lpbiOutput)\t\t\\\n    ((LONG)ICSendMessage(\t\t\t\t\t\t\\\n    \thic,ICM_DECOMPRESS_GET_FORMAT, (DWORD_PTR)(LPVOID)(lpbiInput),\t\\\n\t(DWORD_PTR)(LPVOID)(lpbiOutput)\t\t\t\t\t\\\n    ))\n\n#define ICDecompressGetFormatSize(hic, lpbi) \t\t\t\t\\\n\tICDecompressGetFormat(hic, lpbi, NULL)\n\n#define ICDecompressGetPalette(hic, lpbiInput, lpbiOutput)\t\t\\\n    ICSendMessage(\t\t\t\t\t\t\t\\\n    \thic, ICM_DECOMPRESS_GET_PALETTE, (DWORD_PTR)(LPVOID)(lpbiInput), \t\\\n\t(DWORD_PTR)(LPVOID)(lpbiOutput)\t\t\t\t\t\\\n    )\n\n#define ICDecompressSetPalette(hic,lpbiPalette)\t\\\n        ICSendMessage(\t\t\t\t\\\n\t\thic,ICM_DECOMPRESS_SET_PALETTE,\t\t\\\n\t\t(DWORD_PTR)(LPVOID)(lpbiPalette),0\t\t\\\n\t)\n\n#define ICDecompressEnd(hic) ICSendMessage(hic, ICM_DECOMPRESS_END, 0, 0)\n\nLRESULT\tVFWAPI\tICSendMessage(HIC hic, UINT msg, DWORD_PTR dw1, DWORD_PTR dw2);\n\nstatic inline LRESULT VFWAPI ICDecompressEx(HIC hic, DWORD dwFlags,\n\t\t\t\t\t    LPBITMAPINFOHEADER lpbiSrc, LPVOID lpSrc,\n\t\t\t\t\t    int xSrc, int ySrc, int dxSrc, int dySrc,\n\t\t\t\t\t    LPBITMAPINFOHEADER lpbiDst, LPVOID lpDst,\n\t\t\t\t\t    int xDst, int yDst, int dxDst, int dyDst)\n{\n    ICDECOMPRESSEX ic;\n\n    ic.dwFlags = dwFlags;\n    ic.lpbiSrc = lpbiSrc;\n    ic.lpSrc = lpSrc;\n    ic.xSrc = xSrc;\n    ic.ySrc = ySrc;\n    ic.dxSrc = dxSrc;\n    ic.dySrc = dySrc;\n    ic.lpbiDst = lpbiDst;\n    ic.lpDst = lpDst;\n    ic.xDst = xDst;\n    ic.yDst = yDst;\n    ic.dxDst = dxDst;\n    ic.dyDst = dyDst;\n    return ICSendMessage(hic, ICM_DECOMPRESSEX, (DWORD_PTR)&ic, sizeof(ic));\n}\n\nstatic inline LRESULT VFWAPI ICDecompressExBegin(HIC hic, DWORD dwFlags,\n\t\t\t\t\t\t LPBITMAPINFOHEADER lpbiSrc,\n\t\t\t\t\t\t LPVOID lpSrc,\n\t\t\t\t\t\t int xSrc, int ySrc, int dxSrc, int dySrc,\n\t\t\t\t\t\t LPBITMAPINFOHEADER lpbiDst,\n\t\t\t\t\t\t LPVOID lpDst,\n\t\t\t\t\t\t int xDst,\n\t\t\t\t\t\t int yDst,\n\t\t\t\t\t\t int dxDst,\n\t\t\t\t\t\t int dyDst)\n{\n    ICDECOMPRESSEX ic;\n\n    ic.dwFlags = dwFlags;\n    ic.lpbiSrc = lpbiSrc;\n    ic.lpSrc = lpSrc;\n    ic.xSrc = xSrc;\n    ic.ySrc = ySrc;\n    ic.dxSrc = dxSrc;\n    ic.dySrc = dySrc;\n    ic.lpbiDst = lpbiDst;\n    ic.lpDst = lpDst;\n    ic.xDst = xDst;\n    ic.yDst = yDst;\n    ic.dxDst = dxDst;\n    ic.dyDst = dyDst;\n    return ICSendMessage(hic, ICM_DECOMPRESSEX_BEGIN, (DWORD_PTR)&ic, sizeof(ic));\n}\nstatic inline LRESULT VFWAPI ICDecompressExQuery(HIC hic, DWORD dwFlags,\n\t\t\t\t\t\t LPBITMAPINFOHEADER lpbiSrc,\n\t\t\t\t\t\t LPVOID lpSrc,\n\t\t\t\t\t\t int xSrc, int ySrc, int dxSrc, int dySrc,\n\t\t\t\t\t\t LPBITMAPINFOHEADER lpbiDst,\n\t\t\t\t\t\t LPVOID lpDst,\n\t\t\t\t\t\t int xDst,\n\t\t\t\t\t\t int yDst,\n\t\t\t\t\t\t int dxDst,\n\t\t\t\t\t\t int dyDst)\n{\n    ICDECOMPRESSEX ic;\n\n    ic.dwFlags = dwFlags;\n    ic.lpbiSrc = lpbiSrc;\n    ic.lpSrc = lpSrc;\n    ic.xSrc = xSrc;\n    ic.ySrc = ySrc;\n    ic.dxSrc = dxSrc;\n    ic.dySrc = dySrc;\n    ic.lpbiDst = lpbiDst;\n    ic.lpDst = lpDst;\n    ic.xDst = xDst;\n    ic.yDst = yDst;\n    ic.dxDst = dxDst;\n    ic.dyDst = dyDst;\n    return ICSendMessage(hic, ICM_DECOMPRESSEX_QUERY, (DWORD_PTR)&ic, sizeof(ic));\n}\n\n#define ICDecompressExEnd(hic) \\\n    ICSendMessage(hic, ICM_DECOMPRESSEX_END, 0, 0)\n\n#define ICDRAW_QUERY        __MSABI_LONG(0x00000001)    /* test for support */\n#define ICDRAW_FULLSCREEN   __MSABI_LONG(0x00000002)    /* draw to full screen */\n#define ICDRAW_HDC          __MSABI_LONG(0x00000004)    /* draw to a HDC/HWND */\n#define ICDRAW_ANIMATE      __MSABI_LONG(0x00000008)    /* expect palette animation */\n#define ICDRAW_CONTINUE     __MSABI_LONG(0x00000010)    /* draw is a continuation of previous draw */\n#define ICDRAW_MEMORYDC     __MSABI_LONG(0x00000020)    /* DC is offscreen, by the way */\n#define ICDRAW_UPDATING     __MSABI_LONG(0x00000040)    /* We're updating, as opposed to playing */\n#define ICDRAW_RENDER       __MSABI_LONG(0x00000080)    /* used to render data not draw it */\n#define ICDRAW_BUFFER       __MSABI_LONG(0x00000100)    /* buffer data offscreen, we will need to update it */\n\n#define ICDecompressOpen(fccType, fccHandler, lpbiIn, lpbiOut) \\\n    ICLocate(fccType, fccHandler, lpbiIn, lpbiOut, ICMODE_DECOMPRESS)\n\n#define ICDrawOpen(fccType, fccHandler, lpbiIn) \\\n    ICLocate(fccType, fccHandler, lpbiIn, NULL, ICMODE_DRAW)\n\nHANDLE VFWAPI ICImageCompress(HIC hic, UINT uiFlags, LPBITMAPINFO lpbiIn,\n\t\t\t      LPVOID lpBits, LPBITMAPINFO lpbiOut, LONG lQuality,\n\t\t\t      LONG* plSize);\n\nHANDLE VFWAPI ICImageDecompress(HIC hic, UINT uiFlags, LPBITMAPINFO lpbiIn,\n\t\t\t\tLPVOID lpBits, LPBITMAPINFO lpbiOut);\n\nBOOL\tVFWAPI\tICInfo(DWORD fccType, DWORD fccHandler, ICINFO * lpicinfo);\nBOOL    VFWAPI  ICInstall(DWORD fccType, DWORD fccHandler, LPARAM lParam, LPSTR szDesc, UINT wFlags);\nBOOL    VFWAPI  ICRemove(DWORD fccType, DWORD fccHandler, UINT wFlags);\nLRESULT\tVFWAPI\tICGetInfo(HIC hic,ICINFO *picinfo, DWORD cb);\nHIC\tVFWAPI\tICOpen(DWORD fccType, DWORD fccHandler, UINT wMode);\n#ifdef WINE_STRICT_PROTOTYPES\nHIC\tVFWAPI\tICOpenFunction(DWORD fccType, DWORD fccHandler, UINT wMode, DRIVERPROC lpfnHandler);\n#else\nHIC\tVFWAPI\tICOpenFunction(DWORD fccType, DWORD fccHandler, UINT wMode, FARPROC lpfnHandler);\n#endif\n\nLRESULT VFWAPI\tICClose(HIC hic);\nHIC\tVFWAPI\tICLocate(DWORD fccType, DWORD fccHandler, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, WORD wFlags);\nHIC\tVFWAPI\tICGetDisplayFormat(HIC hic, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, int BitDepth, int dx, int dy);\n\n/* Values for wFlags of ICInstall() */\n#define ICINSTALL_UNICODE       0x8000\n#define ICINSTALL_FUNCTION      0x0001\n#define ICINSTALL_DRIVER        0x0002\n#define ICINSTALL_HDRV          0x0004\n#define ICINSTALL_DRIVERW       0x8002\n\n#define ICGetState(hic, pv, cb) \\\n    ICSendMessage(hic, ICM_GETSTATE, (DWORD_PTR)(LPVOID)(pv), (DWORD_PTR)(cb))\n#define ICSetState(hic, pv, cb) \\\n    ICSendMessage(hic, ICM_SETSTATE, (DWORD_PTR)(LPVOID)(pv), (DWORD_PTR)(cb))\n#define ICGetStateSize(hic) \\\n    ICGetState(hic, NULL, 0)\n\nstatic inline DWORD ICGetDefaultQuality(HIC hic)\n{\n   DWORD dwICValue;\n   ICSendMessage(hic, ICM_GETDEFAULTQUALITY, (DWORD_PTR)(LPVOID)&dwICValue, sizeof(DWORD));\n   return dwICValue;\n}\n\nstatic inline DWORD ICGetDefaultKeyFrameRate(HIC hic)\n{\n   DWORD dwICValue;\n   ICSendMessage(hic, ICM_GETDEFAULTKEYFRAMERATE, (DWORD_PTR)(LPVOID)&dwICValue, sizeof(DWORD));\n   return dwICValue;\n}\n\n#define ICDrawWindow(hic, prc) \\\n    ICSendMessage(hic, ICM_DRAW_WINDOW, (DWORD_PTR)(LPVOID)(prc), sizeof(RECT))\n\n/* As passed to ICM_DRAW_SUGGESTFORMAT */\ntypedef struct {\n\tDWORD dwFlags;\n\tLPBITMAPINFOHEADER lpbiIn;\n\tLPBITMAPINFOHEADER lpbiSuggest;\n\tINT dxSrc;\n\tINT dySrc;\n\tINT dxDst;\n\tINT dyDst;\n\tHIC hicDecompressor;\n} ICDRAWSUGGEST;\n\ntypedef struct {\n    DWORD               dwFlags;\n    int                 iStart;\n    int                 iLen;\n    LPPALETTEENTRY      lppe;\n} ICPALETTE;\n\nDWORD\tVFWAPIV\tICDrawBegin(\n        HIC\t\t\thic,\n        DWORD\t\t\tdwFlags,/* flags */\n        HPALETTE\t\thpal,\t/* palette to draw with */\n        HWND\t\t\thwnd,\t/* window to draw to */\n        HDC\t\t\thdc,\t/* HDC to draw to */\n        INT\t\t\txDst,\t/* destination rectangle */\n        INT\t\t\tyDst,\n        INT\t\t\tdxDst,\n        INT\t\t\tdyDst,\n        LPBITMAPINFOHEADER\tlpbi,\t/* format of frame to draw */\n        INT\t\t\txSrc,\t/* source rectangle */\n        INT\t\t\tySrc,\n        INT\t\t\tdxSrc,\n        INT\t\t\tdySrc,\n        DWORD\t\t\tdwRate,\t/* frames/second = (dwRate/dwScale) */\n        DWORD\t\t\tdwScale\n);\n\n/* as passed to ICM_DRAW_BEGIN */\ntypedef struct {\n\tDWORD\t\tdwFlags;\n\tHPALETTE\thpal;\n\tHWND\t\thwnd;\n\tHDC\t\thdc;\n\tINT\t\txDst;\n\tINT\t\tyDst;\n\tINT\t\tdxDst;\n\tINT\t\tdyDst;\n\tLPBITMAPINFOHEADER\tlpbi;\n\tINT\t\txSrc;\n\tINT\t\tySrc;\n\tINT\t\tdxSrc;\n\tINT\t\tdySrc;\n\tDWORD\t\tdwRate;\n\tDWORD\t\tdwScale;\n} ICDRAWBEGIN;\n\n#define ICDRAW_HURRYUP      __MSABI_LONG(0x80000000)   /* don't draw just buffer (hurry up!) */\n#define ICDRAW_UPDATE       __MSABI_LONG(0x40000000)   /* don't draw just update screen */\n#define ICDRAW_PREROLL      __MSABI_LONG(0x20000000)   /* this frame is before real start */\n#define ICDRAW_NULLFRAME    __MSABI_LONG(0x10000000)   /* repeat last frame */\n#define ICDRAW_NOTKEYFRAME  __MSABI_LONG(0x08000000)   /* this frame is not a key frame */\n\ntypedef struct {\n\tDWORD\tdwFlags;\n\tLPVOID\tlpFormat;\n\tLPVOID\tlpData;\n\tDWORD\tcbData;\n\tLONG\tlTime;\n} ICDRAW;\n\nDWORD VFWAPIV ICDraw(HIC hic,DWORD dwFlags,LPVOID lpFormat,LPVOID lpData,DWORD cbData,LONG lTime);\n\nstatic inline LRESULT VFWAPI ICDrawSuggestFormat(HIC hic, LPBITMAPINFOHEADER lpbiIn,\n\t\t\t\t\t\t LPBITMAPINFOHEADER lpbiOut,\n\t\t\t\t\t\t int dxSrc, int dySrc,\n\t\t\t\t\t\t int dxDst, int dyDst,\n\t\t\t\t\t\t HIC hicDecomp)\n{\n    ICDRAWSUGGEST ic;\n\n    ic.lpbiIn = lpbiIn;\n    ic.lpbiSuggest = lpbiOut;\n    ic.dxSrc = dxSrc;\n    ic.dySrc = dySrc;\n    ic.dxDst = dxDst;\n    ic.dyDst = dyDst;\n    ic.hicDecompressor = hicDecomp;\n    return ICSendMessage(hic, ICM_DRAW_SUGGESTFORMAT, (DWORD_PTR)&ic, sizeof(ic));\n}\n\n#define ICDrawQuery(hic, lpbiInput) \\\n    ICSendMessage(hic, ICM_DRAW_QUERY, (DWORD_PTR)(LPVOID)(lpbiInput), 0)\n\n#define ICDrawChangePalette(hic, lpbiInput) \\\n    ICSendMessage(hic, ICM_DRAW_CHANGEPALETTE, (DWORD_PTR)(LPVOID)(lpbiInput), 0)\n\n#define ICGetBuffersWanted(hic, lpdwBuffers) \\\n    ICSendMessage(hic, ICM_GETBUFFERSWANTED, (DWORD_PTR)(LPVOID)(lpdwBuffers), 0)\n\n#define ICDrawEnd(hic) \\\n    ICSendMessage(hic, ICM_DRAW_END, 0, 0)\n\n#define ICDrawStart(hic) \\\n    ICSendMessage(hic, ICM_DRAW_START, 0, 0)\n\n#define ICDrawStartPlay(hic, lFrom, lTo) \\\n    ICSendMessage(hic, ICM_DRAW_START_PLAY, (DWORD_PTR)(lFrom), (DWORD_PTR)(lTo))\n\n#define ICDrawStop(hic) \\\n    ICSendMessage(hic, ICM_DRAW_STOP, 0, 0)\n\n#define ICDrawStopPlay(hic) \\\n    ICSendMessage(hic, ICM_DRAW_STOP_PLAY, 0, 0)\n\n#define ICDrawGetTime(hic, lplTime) \\\n    ICSendMessage(hic, ICM_DRAW_GETTIME, (DWORD_PTR)(LPVOID)(lplTime), 0)\n\n#define ICDrawSetTime(hic, lTime) \\\n    ICSendMessage(hic, ICM_DRAW_SETTIME, (DWORD_PTR)lTime, 0)\n\n#define ICDrawRealize(hic, hdc, fBackground) \\\n    ICSendMessage(hic, ICM_DRAW_REALIZE, (DWORD_PTR)(UINT_PTR)(HDC)(hdc), (DWORD_PTR)(BOOL)(fBackground))\n\n#define ICDrawFlush(hic) \\\n    ICSendMessage(hic, ICM_DRAW_FLUSH, 0, 0)\n\n#define ICDrawRenderBuffer(hic) \\\n    ICSendMessage(hic, ICM_DRAW_RENDERBUFFER, 0, 0)\n\nstatic inline LRESULT VFWAPI ICSetStatusProc(HIC hic, DWORD dwFlags, LRESULT lParam,\n\t\t\t\t\t     LONG (CALLBACK *fpfnStatus)(LPARAM, UINT, LONG))\n{\n    ICSETSTATUSPROC ic;\n\n    ic.dwFlags = dwFlags;\n    ic.lParam = lParam;\n    /* FIXME: see comment in ICSETSTATUSPROC definition */\n    ic.zStatus = fpfnStatus;\n\n    return ICSendMessage(hic, ICM_SET_STATUS_PROC, (DWORD_PTR)&ic, sizeof(ic));\n}\n\ntypedef struct {\n    LONG\t\tcbSize;\n    DWORD\t\tdwFlags;\n    HIC\t\t\thic;\n    DWORD               fccType;\n    DWORD               fccHandler;\n    LPBITMAPINFO\tlpbiIn;\n    LPBITMAPINFO\tlpbiOut;\n    LPVOID\t\tlpBitsOut;\n    LPVOID\t\tlpBitsPrev;\n    LONG\t\tlFrame;\n    LONG\t\tlKey;\n    LONG\t\tlDataRate;\n    LONG\t\tlQ;\n    LONG\t\tlKeyCount;\n    LPVOID\t\tlpState;\n    LONG\t\tcbState;\n} COMPVARS, *PCOMPVARS;\n\n#define ICMF_COMPVARS_VALID\t0x00000001\n\nBOOL VFWAPI ICCompressorChoose(HWND hwnd, UINT uiFlags, LPVOID pvIn, LPVOID lpData,\n\t\t\t       PCOMPVARS pc, LPSTR lpszTitle);\n\n#define ICMF_CHOOSE_KEYFRAME\t\t0x0001\n#define ICMF_CHOOSE_DATARATE\t\t0x0002\n#define ICMF_CHOOSE_PREVIEW\t\t0x0004\n#define ICMF_CHOOSE_ALLCOMPRESSORS\t0x0008\n\nBOOL VFWAPI ICSeqCompressFrameStart(PCOMPVARS pc, LPBITMAPINFO lpbiIn);\nvoid VFWAPI ICSeqCompressFrameEnd(PCOMPVARS pc);\n\nLPVOID VFWAPI ICSeqCompressFrame(PCOMPVARS pc, UINT uiFlags, LPVOID lpBits,\n\t\t\t\t BOOL *pfKey, LONG *plSize);\nvoid VFWAPI ICCompressorFree(PCOMPVARS pc);\n\n/********************* AVIFILE function declarations *************************/\n\n#ifndef mmioFOURCC\n#define mmioFOURCC( ch0, ch1, ch2, ch3 )\t\t\t\t\\\n\t( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) |\t\t\\\n\t( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) )\n#endif\n\n#ifndef aviTWOCC\n#define aviTWOCC(ch0, ch1) ((WORD)(BYTE)(ch0) | ((WORD)(BYTE)(ch1) << 8))\n#endif\n\ntypedef WORD TWOCC;\n\n#define ICTYPE_VIDEO\t\tmmioFOURCC('v', 'i', 'd', 'c')\n#define ICTYPE_AUDIO\t\tmmioFOURCC('a', 'u', 'd', 'c')\n\n#define formtypeAVI             mmioFOURCC('A', 'V', 'I', ' ')\n#define listtypeAVIHEADER       mmioFOURCC('h', 'd', 'r', 'l')\n#define ckidAVIMAINHDR          mmioFOURCC('a', 'v', 'i', 'h')\n#define listtypeSTREAMHEADER    mmioFOURCC('s', 't', 'r', 'l')\n#define ckidSTREAMHEADER        mmioFOURCC('s', 't', 'r', 'h')\n#define ckidSTREAMFORMAT        mmioFOURCC('s', 't', 'r', 'f')\n#define ckidSTREAMHANDLERDATA   mmioFOURCC('s', 't', 'r', 'd')\n#define ckidSTREAMNAME\t\tmmioFOURCC('s', 't', 'r', 'n')\n\n#define listtypeAVIMOVIE        mmioFOURCC('m', 'o', 'v', 'i')\n#define listtypeAVIRECORD       mmioFOURCC('r', 'e', 'c', ' ')\n\n#define ckidAVINEWINDEX         mmioFOURCC('i', 'd', 'x', '1')\n\n#define streamtypeANY           0U\n#define streamtypeVIDEO         mmioFOURCC('v', 'i', 'd', 's')\n#define streamtypeAUDIO         mmioFOURCC('a', 'u', 'd', 's')\n#define streamtypeMIDI          mmioFOURCC('m', 'i', 'd', 's')\n#define streamtypeTEXT          mmioFOURCC('t', 'x', 't', 's')\n\n/* Basic chunk types */\n#define cktypeDIBbits           aviTWOCC('d', 'b')\n#define cktypeDIBcompressed     aviTWOCC('d', 'c')\n#define cktypePALchange         aviTWOCC('p', 'c')\n#define cktypeWAVEbytes         aviTWOCC('w', 'b')\n\n/* Chunk id to use for extra chunks for padding. */\n#define ckidAVIPADDING          mmioFOURCC('J', 'U', 'N', 'K')\n\n#define FromHex(n)\t\t(((n) >= 'A') ? ((n) + 10 - 'A') : ((n) - '0'))\n#define StreamFromFOURCC(fcc)\t((WORD)((FromHex(LOBYTE(LOWORD(fcc))) << 4) + \\\n\t\t\t\t\t(FromHex(HIBYTE(LOWORD(fcc))))))\n#define TWOCCFromFOURCC(fcc)    HIWORD(fcc)\n#define ToHex(n)\t\t((BYTE)(((n) > 9) ? ((n) - 10 + 'A') : ((n) + '0')))\n#define MAKEAVICKID(tcc, stream) \\\n                                MAKELONG((ToHex((stream) & 0x0f) << 8) | \\\n\t\t\t                 (ToHex(((stream) & 0xf0) >> 4)), tcc)\n\n/* AVIFileHdr.dwFlags */\n#define AVIF_HASINDEX\t\t0x00000010\t/* Index at end of file? */\n#define AVIF_MUSTUSEINDEX\t0x00000020\n#define AVIF_ISINTERLEAVED\t0x00000100\n#define AVIF_TRUSTCKTYPE\t0x00000800\t/* Use CKType to find key frames*/\n#define AVIF_WASCAPTUREFILE\t0x00010000\n#define AVIF_COPYRIGHTED\t0x00020000\n\n#define AVI_HEADERSIZE\t2048\n\ntypedef BOOL (CALLBACK *AVISAVECALLBACK)(INT);\n\ntypedef struct _MainAVIHeader\n{\n    DWORD\tdwMicroSecPerFrame;\n    DWORD\tdwMaxBytesPerSec;\n    DWORD\tdwPaddingGranularity;\n    DWORD\tdwFlags;\n    DWORD\tdwTotalFrames;\n    DWORD\tdwInitialFrames;\n    DWORD\tdwStreams;\n    DWORD\tdwSuggestedBufferSize;\n    DWORD\tdwWidth;\n    DWORD\tdwHeight;\n    DWORD\tdwReserved[4];\n} MainAVIHeader;\n\n/* AVIStreamHeader.dwFlags */\n#define AVISF_DISABLED                  0x00000001\n#define AVISF_VIDEO_PALCHANGES          0x00010000\n\ntypedef struct {\n    FOURCC\tfccType;\n    FOURCC\tfccHandler;\n    DWORD\tdwFlags;        /* AVISF_* */\n    WORD\twPriority;\n    WORD\twLanguage;\n    DWORD\tdwInitialFrames;\n    DWORD\tdwScale;\n    DWORD\tdwRate; /* dwRate / dwScale == samples/second */\n    DWORD\tdwStart;\n    DWORD\tdwLength; /* In units above... */\n    DWORD\tdwSuggestedBufferSize;\n    DWORD\tdwQuality;\n    DWORD\tdwSampleSize;\n    struct { SHORT left, top, right, bottom; } rcFrame; /* word.word - word.word in file */\n} AVIStreamHeader;\n\n/* AVIINDEXENTRY.dwFlags */\n#define AVIIF_LIST\t0x00000001\t/* chunk is a 'LIST' */\n#define AVIIF_TWOCC\t0x00000002\n#define AVIIF_KEYFRAME\t0x00000010\t/* this frame is a key frame. */\n#define AVIIF_FIRSTPART 0x00000020\n#define AVIIF_LASTPART  0x00000040\n#define AVIIF_MIDPART   (AVIIF_LASTPART|AVIIF_FIRSTPART)\n#define AVIIF_NOTIME\t0x00000100\t/* this frame doesn't take any time */\n#define AVIIF_COMPUSE\t0x0FFF0000\n\ntypedef struct _AVIINDEXENTRY {\n    DWORD\tckid;\n    DWORD\tdwFlags;\n    DWORD\tdwChunkOffset;\n    DWORD\tdwChunkLength;\n} AVIINDEXENTRY;\n\ntypedef struct _AVIPALCHANGE {\n    BYTE\t\tbFirstEntry;\n    BYTE\t\tbNumEntries;\n    WORD\t\twFlags;\t\t/* pad */\n    PALETTEENTRY\tpeNew[1];\n} AVIPALCHANGE;\n\n#define AVIIF_KEYFRAME\t0x00000010\t/* this frame is a key frame. */\n\n#define\tAVIGETFRAMEF_BESTDISPLAYFMT\t1\n\ntypedef struct _AVISTREAMINFOA {\n    DWORD\tfccType;\n    DWORD\tfccHandler;\n    DWORD\tdwFlags;        /* AVIIF_* */\n    DWORD\tdwCaps;\n    WORD\twPriority;\n    WORD\twLanguage;\n    DWORD\tdwScale;\n    DWORD\tdwRate;\t\t/* dwRate / dwScale == samples/second */\n    DWORD\tdwStart;\n    DWORD\tdwLength;\t/* In units above... */\n    DWORD\tdwInitialFrames;\n    DWORD\tdwSuggestedBufferSize;\n    DWORD\tdwQuality;\n    DWORD\tdwSampleSize;\n    RECT\trcFrame;\n    DWORD\tdwEditCount;\n    DWORD\tdwFormatChangeCount;\n    CHAR\tszName[64];\n} AVISTREAMINFOA, * LPAVISTREAMINFOA, *PAVISTREAMINFOA;\n\ntypedef struct _AVISTREAMINFOW {\n    DWORD\tfccType;\n    DWORD\tfccHandler;\n    DWORD\tdwFlags;\n    DWORD\tdwCaps;\n    WORD\twPriority;\n    WORD\twLanguage;\n    DWORD\tdwScale;\n    DWORD\tdwRate;\t\t/* dwRate / dwScale == samples/second */\n    DWORD\tdwStart;\n    DWORD\tdwLength;\t/* In units above... */\n    DWORD\tdwInitialFrames;\n    DWORD\tdwSuggestedBufferSize;\n    DWORD\tdwQuality;\n    DWORD\tdwSampleSize;\n    RECT\trcFrame;\n    DWORD\tdwEditCount;\n    DWORD\tdwFormatChangeCount;\n    WCHAR\tszName[64];\n} AVISTREAMINFOW, * LPAVISTREAMINFOW, *PAVISTREAMINFOW;\nDECL_WINELIB_TYPE_AW(AVISTREAMINFO)\nDECL_WINELIB_TYPE_AW(LPAVISTREAMINFO)\nDECL_WINELIB_TYPE_AW(PAVISTREAMINFO)\n\n#define AVISTREAMINFO_DISABLED\t\t0x00000001\n#define AVISTREAMINFO_FORMATCHANGES\t0x00010000\n\n/* AVIFILEINFO.dwFlags */\n#define AVIFILEINFO_HASINDEX\t\t0x00000010\n#define AVIFILEINFO_MUSTUSEINDEX\t0x00000020\n#define AVIFILEINFO_ISINTERLEAVED\t0x00000100\n#define AVIFILEINFO_TRUSTCKTYPE         0x00000800\n#define AVIFILEINFO_WASCAPTUREFILE\t0x00010000\n#define AVIFILEINFO_COPYRIGHTED\t\t0x00020000\n\n/* AVIFILEINFO.dwCaps */\n#define AVIFILECAPS_CANREAD\t\t0x00000001\n#define AVIFILECAPS_CANWRITE\t\t0x00000002\n#define AVIFILECAPS_ALLKEYFRAMES\t0x00000010\n#define AVIFILECAPS_NOCOMPRESSION\t0x00000020\n\ntypedef struct _AVIFILEINFOW {\n    DWORD               dwMaxBytesPerSec;\n    DWORD               dwFlags;\n    DWORD               dwCaps;\n    DWORD               dwStreams;\n    DWORD               dwSuggestedBufferSize;\n    DWORD               dwWidth;\n    DWORD               dwHeight;\n    DWORD               dwScale;\n    DWORD               dwRate;\n    DWORD               dwLength;\n    DWORD               dwEditCount;\n    WCHAR               szFileType[64];\n} AVIFILEINFOW, * LPAVIFILEINFOW, *PAVIFILEINFOW;\ntypedef struct _AVIFILEINFOA {\n    DWORD               dwMaxBytesPerSec;\n    DWORD               dwFlags;\n    DWORD               dwCaps;\n    DWORD               dwStreams;\n    DWORD               dwSuggestedBufferSize;\n    DWORD               dwWidth;\n    DWORD               dwHeight;\n    DWORD               dwScale;\n    DWORD               dwRate;\n    DWORD               dwLength;\n    DWORD               dwEditCount;\n    CHAR\t\tszFileType[64];\n} AVIFILEINFOA, * LPAVIFILEINFOA, *PAVIFILEINFOA;\nDECL_WINELIB_TYPE_AW(AVIFILEINFO)\nDECL_WINELIB_TYPE_AW(PAVIFILEINFO)\nDECL_WINELIB_TYPE_AW(LPAVIFILEINFO)\n\n/* AVICOMPRESSOPTIONS.dwFlags. determines presence of fields in below struct */\n#define AVICOMPRESSF_INTERLEAVE\t0x00000001\n#define AVICOMPRESSF_DATARATE\t0x00000002\n#define AVICOMPRESSF_KEYFRAMES\t0x00000004\n#define AVICOMPRESSF_VALID\t0x00000008\n\ntypedef struct {\n    DWORD\tfccType;\t\t/* stream type, for consistency */\n    DWORD\tfccHandler;\t\t/* compressor */\n    DWORD\tdwKeyFrameEvery;\t/* keyframe rate */\n    DWORD\tdwQuality;\t\t/* compress quality 0-10,000 */\n    DWORD\tdwBytesPerSecond;\t/* bytes per second */\n    DWORD\tdwFlags;\t\t/* flags... see below */\n    LPVOID\tlpFormat;\t\t/* save format */\n    DWORD\tcbFormat;\n    LPVOID\tlpParms;\t\t/* compressor options */\n    DWORD\tcbParms;\n    DWORD\tdwInterleaveEvery;\t/* for non-video streams only */\n} AVICOMPRESSOPTIONS, *LPAVICOMPRESSOPTIONS,*PAVICOMPRESSOPTIONS;\n\n#define FIND_DIR        __MSABI_LONG(0x0000000F)     /* direction mask */\n#define FIND_NEXT       __MSABI_LONG(0x00000001)     /* search forward */\n#define FIND_PREV       __MSABI_LONG(0x00000004)     /* search backward */\n#define FIND_FROM_START __MSABI_LONG(0x00000008)     /* start at the logical beginning */\n\n#define FIND_TYPE       __MSABI_LONG(0x000000F0)     /* type mask */\n#define FIND_KEY        __MSABI_LONG(0x00000010)     /* find a key frame */\n#define FIND_ANY        __MSABI_LONG(0x00000020)     /* find any (non-empty) sample */\n#define FIND_FORMAT     __MSABI_LONG(0x00000040)     /* find a formatchange */\n\n#define FIND_RET        __MSABI_LONG(0x0000F000)     /* return mask */\n#define FIND_POS        __MSABI_LONG(0x00000000)     /* return logical position */\n#define FIND_LENGTH     __MSABI_LONG(0x00001000)     /* return logical size */\n#define FIND_OFFSET     __MSABI_LONG(0x00002000)     /* return physical position */\n#define FIND_SIZE       __MSABI_LONG(0x00003000)     /* return physical size */\n#define FIND_INDEX      __MSABI_LONG(0x00004000)     /* return physical index position */\n\n#include <ole2.h>\n\n#define DEFINE_AVIGUID(name, l, w1, w2) \\\n    DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46)\n\nDEFINE_AVIGUID(IID_IAVIFile,            0x00020020, 0, 0);\nDEFINE_AVIGUID(IID_IAVIStream,          0x00020021, 0, 0);\nDEFINE_AVIGUID(IID_IAVIStreaming,       0x00020022, 0, 0);\nDEFINE_AVIGUID(IID_IGetFrame,           0x00020023, 0, 0);\nDEFINE_AVIGUID(IID_IAVIEditStream,      0x00020024, 0, 0);\n\nDEFINE_AVIGUID(CLSID_AVISimpleUnMarshal,0x00020009, 0, 0);\nDEFINE_AVIGUID(CLSID_AVIFile,           0x00020000, 0, 0);\n\n/*****************************************************************************\n * IAVIStream interface\n */\n#define INTERFACE IAVIStream\nDECLARE_INTERFACE_(IAVIStream,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IAVIStream methods ***/\n    STDMETHOD(Create)(THIS_ LPARAM lParam1, LPARAM lParam2) PURE;\n    STDMETHOD(Info)(THIS_ AVISTREAMINFOW *psi, LONG lSize) PURE;\n    STDMETHOD_(LONG,FindSample)(THIS_ LONG lPos, LONG lFlags) PURE;\n    STDMETHOD(ReadFormat)(THIS_ LONG lPos, LPVOID lpFormat, LONG *lpcbFormat) PURE;\n    STDMETHOD(SetFormat)(THIS_ LONG lPos, LPVOID lpFormat, LONG cbFormat) PURE;\n    STDMETHOD(Read)(THIS_ LONG lStart, LONG lSamples, LPVOID lpBuffer, LONG cbBuffer, LONG *plBytes, LONG *plSamples) PURE;\n    STDMETHOD(Write)(THIS_ LONG lStart, LONG lSamples, LPVOID lpBuffer, LONG cbBuffer, DWORD dwFlags, LONG *plSampWritten, LONG *plBytesWritten) PURE;\n    STDMETHOD(Delete)(THIS_ LONG lStart, LONG lSamples) PURE;\n    STDMETHOD(ReadData)(THIS_ DWORD fcc, LPVOID lpBuffer, LONG *lpcbBuffer) PURE;\n    STDMETHOD(WriteData)(THIS_ DWORD fcc, LPVOID lpBuffer, LONG cbBuffer) PURE;\n    STDMETHOD(SetInfo)(THIS_ AVISTREAMINFOW *plInfo, LONG cbInfo) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IAVIStream_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IAVIStream_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IAVIStream_Release(p)            (p)->lpVtbl->Release(p)\n/*** IAVIStream methods ***/\n#define IAVIStream_Create(p,a,b)          (p)->lpVtbl->Create(p,a,b)\n#define IAVIStream_Info(p,a,b)            (p)->lpVtbl->Info(p,a,b)\n#define IAVIStream_FindSample(p,a,b)      (p)->lpVtbl->FindSample(p,a,b)\n#define IAVIStream_ReadFormat(p,a,b,c)    (p)->lpVtbl->ReadFormat(p,a,b,c)\n#define IAVIStream_SetFormat(p,a,b,c)     (p)->lpVtbl->SetFormat(p,a,b,c)\n#define IAVIStream_Read(p,a,b,c,d,e,f)    (p)->lpVtbl->Read(p,a,b,c,d,e,f)\n#define IAVIStream_Write(p,a,b,c,d,e,f,g) (p)->lpVtbl->Write(p,a,b,c,d,e,f,g)\n#define IAVIStream_Delete(p,a,b)          (p)->lpVtbl->Delete(p,a,b)\n#define IAVIStream_ReadData(p,a,b,c)      (p)->lpVtbl->ReadData(p,a,b,c)\n#define IAVIStream_WriteData(p,a,b,c)     (p)->lpVtbl->WriteData(p,a,b,c)\n#define IAVIStream_SetInfo(p,a,b)         (p)->lpVtbl->SetInfo(p,a,b)\n#endif\n\n#define AVISTREAMREAD_CONVENIENT          (__MSABI_LONG(-1))\n\nULONG WINAPI AVIStreamAddRef(PAVISTREAM iface);\nULONG WINAPI AVIStreamRelease(PAVISTREAM iface);\nHRESULT WINAPI AVIStreamCreate(PAVISTREAM*,LONG,LONG,CLSID*);\nHRESULT WINAPI AVIStreamInfoA(PAVISTREAM iface,AVISTREAMINFOA *asi,LONG size);\nHRESULT WINAPI AVIStreamInfoW(PAVISTREAM iface,AVISTREAMINFOW *asi,LONG size);\n#define AVIStreamInfo WINELIB_NAME_AW(AVIStreamInfo)\nLONG WINAPI AVIStreamFindSample(PAVISTREAM pstream, LONG pos, LONG flags);\nHRESULT WINAPI AVIStreamReadFormat(PAVISTREAM iface,LONG pos,LPVOID format,LONG *formatsize);\nHRESULT WINAPI AVIStreamSetFormat(PAVISTREAM iface,LONG pos,LPVOID format,LONG formatsize);\nHRESULT WINAPI AVIStreamRead(PAVISTREAM iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,LONG *bytesread,LONG *samplesread);\nHRESULT WINAPI AVIStreamWrite(PAVISTREAM iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,DWORD flags,LONG *sampwritten,LONG *byteswritten);\nHRESULT WINAPI AVIStreamReadData(PAVISTREAM iface,DWORD fcc,LPVOID lp,LONG *lpread);\nHRESULT WINAPI AVIStreamWriteData(PAVISTREAM iface,DWORD fcc,LPVOID lp,LONG size);\n\nPGETFRAME WINAPI AVIStreamGetFrameOpen(PAVISTREAM pavi,LPBITMAPINFOHEADER lpbiWanted);\nLPVOID  WINAPI AVIStreamGetFrame(PGETFRAME pg,LONG pos);\nHRESULT WINAPI AVIStreamGetFrameClose(PGETFRAME pg);\n\nHRESULT WINAPI AVIMakeCompressedStream(PAVISTREAM*ppsCompressed,PAVISTREAM ppsSource,AVICOMPRESSOPTIONS *lpOptions,CLSID*pclsidHandler);\nHRESULT WINAPI AVIMakeFileFromStreams(PAVIFILE *ppfile, int nStreams, PAVISTREAM *ppStreams);\nHRESULT WINAPI AVIMakeStreamFromClipboard(UINT cfFormat, HANDLE hGlobal, PAVISTREAM * ppstream);\n\nHRESULT WINAPI AVIStreamOpenFromFileA(PAVISTREAM *ppavi, LPCSTR szFile,\n\t\t\t\t      DWORD fccType, LONG lParam,\n\t\t\t\t      UINT mode, CLSID *pclsidHandler);\nHRESULT WINAPI AVIStreamOpenFromFileW(PAVISTREAM *ppavi, LPCWSTR szFile,\n\t\t\t\t      DWORD fccType, LONG lParam,\n\t\t\t\t      UINT mode, CLSID *pclsidHandler);\n#define AVIStreamOpenFromFile WINELIB_NAME_AW(AVIStreamOpenFromFile)\n\nLONG WINAPI AVIStreamBeginStreaming(PAVISTREAM pavi, LONG lStart, LONG lEnd, LONG lRate);\nLONG WINAPI AVIStreamEndStreaming(PAVISTREAM pavi);\n\nHRESULT WINAPI AVIBuildFilterA(LPSTR szFilter, LONG cbFilter, BOOL fSaving);\nHRESULT WINAPI AVIBuildFilterW(LPWSTR szFilter, LONG cbFilter, BOOL fSaving);\n#define AVIBuildFilter WINELIB_NAME_AW(AVIBuildFilter)\n\nBOOL WINAPI AVISaveOptions(HWND hWnd,UINT uFlags,INT nStream,\n\t\t\t   PAVISTREAM *ppavi,LPAVICOMPRESSOPTIONS *ppOptions);\nHRESULT WINAPI AVISaveOptionsFree(INT nStreams,LPAVICOMPRESSOPTIONS*ppOptions);\n\nHRESULT WINAPIV AVISaveA(LPCSTR szFile, CLSID *pclsidHandler,\n             AVISAVECALLBACK lpfnCallback, int nStreams,\n             PAVISTREAM pavi, LPAVICOMPRESSOPTIONS lpOptions, ...);\nHRESULT WINAPIV AVISaveW(LPCWSTR szFile, CLSID *pclsidHandler,\n             AVISAVECALLBACK lpfnCallback, int nStreams,\n             PAVISTREAM pavi, LPAVICOMPRESSOPTIONS lpOptions, ...);\n#define AVISave WINELIB_NAME_AW(AVISave)\n\nHRESULT WINAPI AVISaveVA(LPCSTR szFile, CLSID *pclsidHandler,\n\t\t\t AVISAVECALLBACK lpfnCallback, int nStream,\n\t\t\t PAVISTREAM *ppavi, LPAVICOMPRESSOPTIONS *plpOptions);\nHRESULT WINAPI AVISaveVW(LPCWSTR szFile, CLSID *pclsidHandler,\n\t\t\t AVISAVECALLBACK lpfnCallback, int nStream,\n\t\t\t PAVISTREAM *ppavi, LPAVICOMPRESSOPTIONS *plpOptions);\n#define AVISaveV WINELIB_NAME_AW(AVISaveV)\n\nLONG WINAPI AVIStreamStart(PAVISTREAM iface);\nLONG WINAPI AVIStreamLength(PAVISTREAM iface);\nLONG WINAPI AVIStreamSampleToTime(PAVISTREAM pstream, LONG lSample);\nLONG WINAPI AVIStreamTimeToSample(PAVISTREAM pstream, LONG lTime);\n\n#define AVIFileClose(pavi) \\\n    AVIFileRelease(pavi)\n#define AVIStreamClose(pavi) \\\n    AVIStreamRelease(pavi);\n#define AVIStreamEnd(pavi) \\\n    (AVIStreamStart(pavi) + AVIStreamLength(pavi))\n#define AVIStreamEndTime(pavi) \\\n    AVIStreamSampleToTime(pavi, AVIStreamEnd(pavi))\n#define AVIStreamFormatSize(pavi, lPos, plSize) \\\n    AVIStreamReadFormat(pavi, lPos, NULL, plSize)\n#define AVIStreamLengthTime(pavi) \\\n    AVIStreamSampleToTime(pavi, AVIStreamLength(pavi))\n#define AVIStreamSampleSize(pavi,pos,psize) \\\n    AVIStreamRead(pavi,pos,1,NULL,0,psize,NULL)\n#define AVIStreamSampleToSample(pavi1, pavi2, samp2) \\\n    AVIStreamTimeToSample(pavi1, AVIStreamSampleToTime(pavi2, samp2))\n#define AVIStreamStartTime(pavi) \\\n    AVIStreamSampleToTime(pavi, AVIStreamStart(pavi))\n\n#define AVIStreamNextSample(pavi, pos) \\\n    AVIStreamFindSample(pavi, pos + 1, FIND_NEXT | FIND_ANY)\n#define AVIStreamPrevSample(pavi, pos) \\\n    AVIStreamFindSample(pavi, pos - 1, FIND_PREV | FIND_ANY)\n#define AVIStreamNearestSample(pavi, pos) \\\n    AVIStreamFindSample(pavi, pos, FIND_PREV | FIND_ANY)\n#define AVStreamNextKeyFrame(pavi,pos) \\\n    AVIStreamFindSample(pavi, pos + 1, FIND_NEXT | FIND_KEY)\n#define AVStreamPrevKeyFrame(pavi,pos) \\\n    AVIStreamFindSample(pavi, pos - 1, FIND_NEXT | FIND_KEY)\n#define AVIStreamNearestKeyFrame(pavi,pos) \\\n    AVIStreamFindSample(pavi, pos, FIND_PREV | FIND_KEY)\n#define AVIStreamIsKeyFrame(pavi, pos) \\\n    (AVIStreamNearestKeyFrame(pavi, pos) == pos)\n\n/*****************************************************************************\n * IAVIStreaming interface\n */\n#define INTERFACE IAVIStreaming\nDECLARE_INTERFACE_(IAVIStreaming,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IAVIStreaming methods ***/\n    STDMETHOD(Begin)(THIS_ LONG lStart,LONG lEnd,LONG lRate) PURE;\n    STDMETHOD(End)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IAVIStreaming_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IAVIStreaming_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IAVIStreaming_Release(p)            (p)->lpVtbl->Release(p)\n/*** IAVIStreaming methods ***/\n#define IAVIStreaming_Begin(p,a,b,c)        (p)->lpVtbl->Begin(p,a,b,c)\n#define IAVIStreaming_End(p)                (p)->lpVtbl->End(p)\n#endif\n\n/*****************************************************************************\n * IAVIEditStream interface\n */\n#define INTERFACE IAVIEditStream\nDECLARE_INTERFACE_(IAVIEditStream,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IAVIEditStream methods ***/\n    STDMETHOD(Cut)(THIS_ LONG *plStart,LONG *plLength,PAVISTREAM *ppResult) PURE;\n    STDMETHOD(Copy)(THIS_ LONG *plStart,LONG *plLength,PAVISTREAM *ppResult) PURE;\n    STDMETHOD(Paste)(THIS_ LONG *plStart,LONG *plLength,PAVISTREAM pSource,LONG lStart,LONG lEnd) PURE;\n    STDMETHOD(Clone)(THIS_ PAVISTREAM *ppResult) PURE;\n    STDMETHOD(SetInfo)(THIS_ LPAVISTREAMINFOW asi, LONG size) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IAVIEditStream_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IAVIEditStream_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IAVIEditStream_Release(p)            (p)->lpVtbl->Release(p)\n/*** IAVIEditStream methods ***/\n#define IAVIEditStream_Cut(p,a,b,c)\t     (p)->lpVtbl->Cut(p,a,b,c)\n#define IAVIEditStream_Copy(p,a,b,c)\t     (p)->lpVtbl->Copy(p,a,b,c)\n#define IAVIEditStream_Paste(p,a,b,c,d,e)    (p)->lpVtbl->Paste(p,a,b,c,d,e)\n#define IAVIEditStream_Clone(p,a)\t     (p)->lpVtbl->Clone(p,a)\n#define IAVIEditStream_SetInfo(p,a,b)\t     (p)->lpVtbl->SetInfo(p,a,b)\n#endif\n\nHRESULT WINAPI CreateEditableStream(PAVISTREAM *ppEditable,PAVISTREAM pSource);\nHRESULT WINAPI EditStreamClone(PAVISTREAM pStream, PAVISTREAM *ppResult);\nHRESULT WINAPI EditStreamCopy(PAVISTREAM pStream, LONG *plStart,\n\t\t\t      LONG *plLength, PAVISTREAM *ppResult);\nHRESULT WINAPI EditStreamCut(PAVISTREAM pStream, LONG *plStart,\n\t\t\t     LONG *plLength, PAVISTREAM *ppResult);\nHRESULT WINAPI EditStreamPaste(PAVISTREAM pDest, LONG *plStart, LONG *plLength,\n\t\t\t       PAVISTREAM pSource, LONG lStart, LONG lEnd);\n\nHRESULT WINAPI EditStreamSetInfoA(PAVISTREAM pstream, LPAVISTREAMINFOA asi,\n\t\t\t\t  LONG size);\nHRESULT WINAPI EditStreamSetInfoW(PAVISTREAM pstream, LPAVISTREAMINFOW asi,\n\t\t\t\t  LONG size);\n#define EditStreamSetInfo WINELIB_NAME_AW(EditStreamSetInfo)\n\nHRESULT WINAPI EditStreamSetNameA(PAVISTREAM pstream, LPCSTR szName);\nHRESULT WINAPI EditStreamSetNameW(PAVISTREAM pstream, LPCWSTR szName);\n#define EditStreamSetName WINELIB_NAME_AW(EditStreamSetName)\n\n/*****************************************************************************\n * IAVIFile interface\n */\n/* In Win32 this interface uses UNICODE only */\n#define INTERFACE IAVIFile\nDECLARE_INTERFACE_(IAVIFile,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IAVIFile methods ***/\n    STDMETHOD(Info)(THIS_ AVIFILEINFOW *pfi, LONG lSize) PURE;\n    STDMETHOD(GetStream)(THIS_ PAVISTREAM *ppStream, DWORD fccType, LONG lParam) PURE;\n    STDMETHOD(CreateStream)(THIS_ PAVISTREAM *ppStream, AVISTREAMINFOW *psi) PURE;\n    STDMETHOD(WriteData)(THIS_ DWORD fcc, LPVOID lpBuffer, LONG cbBuffer) PURE;\n    STDMETHOD(ReadData)(THIS_ DWORD fcc, LPVOID lpBuffer, LONG *lpcbBuffer) PURE;\n    STDMETHOD(EndRecord)(THIS) PURE;\n    STDMETHOD(DeleteStream)(THIS_ DWORD fccType, LONG lParam) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IAVIFile_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IAVIFile_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IAVIFile_Release(p)            (p)->lpVtbl->Release(p)\n/*** IAVIFile methods ***/\n#define IAVIFile_Info(p,a,b)         (p)->lpVtbl->Info(p,a,b)\n#define IAVIFile_GetStream(p,a,b,c)  (p)->lpVtbl->GetStream(p,a,b,c)\n#define IAVIFile_CreateStream(p,a,b) (p)->lpVtbl->CreateStream(p,a,b)\n#define IAVIFile_WriteData(p,a,b,c)  (p)->lpVtbl->WriteData(p,a,b,c)\n#define IAVIFile_ReadData(p,a,b,c)   (p)->lpVtbl->ReadData(p,a,b,c)\n#define IAVIFile_EndRecord(p)        (p)->lpVtbl->EndRecord(p)\n#define IAVIFile_DeleteStream(p,a,b) (p)->lpVtbl->DeleteStream(p,a,b)\n#endif\n\nvoid WINAPI AVIFileInit(void);\nvoid WINAPI AVIFileExit(void);\n\nHRESULT WINAPI AVIFileOpenA(PAVIFILE* ppfile,LPCSTR szFile,UINT uMode,LPCLSID lpHandler);\nHRESULT WINAPI AVIFileOpenW(PAVIFILE* ppfile,LPCWSTR szFile,UINT uMode,LPCLSID lpHandler);\n#define AVIFileOpen WINELIB_NAME_AW(AVIFileOpen)\n\nULONG   WINAPI AVIFileAddRef(PAVIFILE pfile);\nULONG   WINAPI AVIFileRelease(PAVIFILE pfile);\nHRESULT WINAPI AVIFileInfoA(PAVIFILE pfile,PAVIFILEINFOA pfi,LONG lSize);\nHRESULT WINAPI AVIFileInfoW(PAVIFILE pfile,PAVIFILEINFOW pfi,LONG lSize);\n#define AVIFileInfo WINELIB_NAME_AW(AVIFileInfo)\nHRESULT WINAPI AVIFileGetStream(PAVIFILE pfile,PAVISTREAM* avis,DWORD fccType,LONG lParam);\nHRESULT WINAPI AVIFileCreateStreamA(PAVIFILE pfile,PAVISTREAM* ppavi,AVISTREAMINFOA* psi);\nHRESULT WINAPI AVIFileCreateStreamW(PAVIFILE pfile,PAVISTREAM* ppavi,AVISTREAMINFOW* psi);\n#define AVIFileCreateStream WINELIB_NAME_AW(AVIFileCreateStream)\nHRESULT WINAPI AVIFileWriteData(PAVIFILE pfile,DWORD fcc,LPVOID lp,LONG size);\nHRESULT WINAPI AVIFileReadData(PAVIFILE pfile,DWORD fcc,LPVOID lp,LPLONG size);\nHRESULT WINAPI AVIFileEndRecord(PAVIFILE pfile);\n\n/*****************************************************************************\n * IGetFrame interface\n */\n#define INTERFACE IGetFrame\nDECLARE_INTERFACE_(IGetFrame,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IGetFrame methods ***/\n    STDMETHOD_(LPVOID,GetFrame)(THIS_ LONG lPos) PURE;\n    STDMETHOD(Begin)(THIS_ LONG lStart, LONG lEnd, LONG lRate) PURE;\n    STDMETHOD(End)(THIS) PURE;\n    STDMETHOD(SetFormat)(THIS_ LPBITMAPINFOHEADER lpbi, LPVOID lpBits, INT x, INT y, INT dx, INT dy) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IGetFrame_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IGetFrame_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IGetFrame_Release(p)            (p)->lpVtbl->Release(p)\n/*** IGetFrame methods ***/\n#define IGetFrame_GetFrame(p,a)            (p)->lpVtbl->GetFrame(p,a)\n#define IGetFrame_Begin(p,a,b,c)           (p)->lpVtbl->Begin(p,a,b,c)\n#define IGetFrame_End(p)                   (p)->lpVtbl->End(p)\n#define IGetFrame_SetFormat(p,a,b,c,d,e,f) (p)->lpVtbl->SetFormat(p,a,b,c,d,e,f)\n#endif\n\nHRESULT WINAPI AVIClearClipboard(void);\nHRESULT WINAPI AVIGetFromClipboard(PAVIFILE *ppfile);\nHRESULT WINAPI AVIPutFileOnClipboard(PAVIFILE pfile);\n\n#ifdef OFN_READONLY\nBOOL WINAPI GetOpenFileNamePreviewA(LPOPENFILENAMEA lpofn);\nBOOL WINAPI GetOpenFileNamePreviewW(LPOPENFILENAMEW lpofn);\n#define GetOpenFileNamePreview WINELIB_NAME_AW(GetOpenFileNamePreview)\nBOOL WINAPI GetSaveFileNamePreviewA(LPOPENFILENAMEA lpofn);\nBOOL WINAPI GetSaveFileNamePreviewW(LPOPENFILENAMEW lpofn);\n#define GetSaveFileNamePreview WINELIB_NAME_AW(GetSaveFileNamePreview)\n#endif\n\n#define AVIERR_OK\t\t0\n#define MAKE_AVIERR(error)\tMAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x4000+error)\n\n#define AVIERR_UNSUPPORTED\tMAKE_AVIERR(101)\n#define AVIERR_BADFORMAT\tMAKE_AVIERR(102)\n#define AVIERR_MEMORY\t\tMAKE_AVIERR(103)\n#define AVIERR_INTERNAL\t\tMAKE_AVIERR(104)\n#define AVIERR_BADFLAGS\t\tMAKE_AVIERR(105)\n#define AVIERR_BADPARAM\t\tMAKE_AVIERR(106)\n#define AVIERR_BADSIZE\t\tMAKE_AVIERR(107)\n#define AVIERR_BADHANDLE\tMAKE_AVIERR(108)\n#define AVIERR_FILEREAD\t\tMAKE_AVIERR(109)\n#define AVIERR_FILEWRITE\tMAKE_AVIERR(110)\n#define AVIERR_FILEOPEN\t\tMAKE_AVIERR(111)\n#define AVIERR_COMPRESSOR\tMAKE_AVIERR(112)\n#define AVIERR_NOCOMPRESSOR\tMAKE_AVIERR(113)\n#define AVIERR_READONLY\t\tMAKE_AVIERR(114)\n#define AVIERR_NODATA\t\tMAKE_AVIERR(115)\n#define AVIERR_BUFFERTOOSMALL\tMAKE_AVIERR(116)\n#define AVIERR_CANTCOMPRESS\tMAKE_AVIERR(117)\n#define AVIERR_USERABORT\tMAKE_AVIERR(198)\n#define AVIERR_ERROR\t\tMAKE_AVIERR(199)\n\nBOOL VFWAPIV MCIWndRegisterClass(void);\n\nHWND VFWAPIV MCIWndCreateA(HWND, HINSTANCE, DWORD, LPCSTR);\nHWND VFWAPIV MCIWndCreateW(HWND, HINSTANCE, DWORD, LPCWSTR);\n#define     MCIWndCreate WINELIB_NAME_AW(MCIWndCreate)\n\n#define MCIWNDOPENF_NEW\t\t\t0x0001\n\n#define MCIWNDF_NOAUTOSIZEWINDOW\t0x0001\n#define MCIWNDF_NOPLAYBAR\t\t0x0002\n#define MCIWNDF_NOAUTOSIZEMOVIE\t\t0x0004\n#define MCIWNDF_NOMENU\t\t\t0x0008\n#define MCIWNDF_SHOWNAME\t\t0x0010\n#define MCIWNDF_SHOWPOS\t\t\t0x0020\n#define MCIWNDF_SHOWMODE\t\t0x0040\n#define MCIWNDF_SHOWALL\t\t\t0x0070\n\n#define MCIWNDF_NOTIFYMODE\t\t0x0100\n#define MCIWNDF_NOTIFYPOS\t\t0x0200\n#define MCIWNDF_NOTIFYSIZE\t\t0x0400\n#define MCIWNDF_NOTIFYERROR\t\t0x1000\n#define MCIWNDF_NOTIFYALL\t\t0x1F00\n\n#define MCIWNDF_NOTIFYANSI\t\t0x0080\n\n#define MCIWNDF_NOTIFYMEDIAA\t\t0x0880\n#define MCIWNDF_NOTIFYMEDIAW\t\t0x0800\n#define MCIWNDF_NOTIFYMEDIA WINELIB_NAME_AW(MCIWNDF_NOTIFYMEDIA)\n\n#define MCIWNDF_RECORD\t\t\t0x2000\n#define MCIWNDF_NOERRORDLG\t\t0x4000\n#define MCIWNDF_NOOPEN\t\t\t0x8000\n\n#ifdef __cplusplus\n#define MCIWndSM ::SendMessage\n#else\n#define MCIWndSM SendMessage\n#endif\n\n#define MCIWndCanPlay(hWnd)         (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_PLAY,0,0)\n#define MCIWndCanRecord(hWnd)       (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_RECORD,0,0)\n#define MCIWndCanSave(hWnd)         (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_SAVE,0,0)\n#define MCIWndCanWindow(hWnd)       (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_WINDOW,0,0)\n#define MCIWndCanEject(hWnd)        (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_EJECT,0,0)\n#define MCIWndCanConfig(hWnd)       (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_CONFIG,0,0)\n#define MCIWndPaletteKick(hWnd)     (BOOL)MCIWndSM(hWnd,MCIWNDM_PALETTEKICK,0,0)\n\n#define MCIWndSave(hWnd,szFile)\t    (LONG)MCIWndSM(hWnd,MCI_SAVE,0,(LPARAM)(LPVOID)(szFile))\n#define MCIWndSaveDialog(hWnd)      MCIWndSave(hWnd,-1)\n\n#define MCIWndNew(hWnd,lp)          (LONG)MCIWndSM(hWnd,MCIWNDM_NEW,0,(LPARAM)(LPVOID)(lp))\n\n#define MCIWndRecord(hWnd)          (LONG)MCIWndSM(hWnd,MCI_RECORD,0,0)\n#define MCIWndOpen(hWnd,sz,f)       (LONG)MCIWndSM(hWnd,MCIWNDM_OPEN,(WPARAM)(UINT)(f),(LPARAM)(LPVOID)(sz))\n#define MCIWndOpenDialog(hWnd)      MCIWndOpen(hWnd,-1,0)\n#define MCIWndClose(hWnd)           (LONG)MCIWndSM(hWnd,MCI_CLOSE,0,0)\n#define MCIWndPlay(hWnd)            (LONG)MCIWndSM(hWnd,MCI_PLAY,0,0)\n#define MCIWndStop(hWnd)            (LONG)MCIWndSM(hWnd,MCI_STOP,0,0)\n#define MCIWndPause(hWnd)           (LONG)MCIWndSM(hWnd,MCI_PAUSE,0,0)\n#define MCIWndResume(hWnd)          (LONG)MCIWndSM(hWnd,MCI_RESUME,0,0)\n#define MCIWndSeek(hWnd,lPos)       (LONG)MCIWndSM(hWnd,MCI_SEEK,0,(LPARAM)(LONG)(lPos))\n#define MCIWndEject(hWnd)           (LONG)MCIWndSM(hWnd,MCIWNDM_EJECT,0,0)\n\n#define MCIWndHome(hWnd)            MCIWndSeek(hWnd,MCIWND_START)\n#define MCIWndEnd(hWnd)             MCIWndSeek(hWnd,MCIWND_END)\n\n#define MCIWndGetSource(hWnd,prc)   (LONG)MCIWndSM(hWnd,MCIWNDM_GET_SOURCE,0,(LPARAM)(LPRECT)(prc))\n#define MCIWndPutSource(hWnd,prc)   (LONG)MCIWndSM(hWnd,MCIWNDM_PUT_SOURCE,0,(LPARAM)(LPRECT)(prc))\n\n#define MCIWndGetDest(hWnd,prc)     (LONG)MCIWndSM(hWnd,MCIWNDM_GET_DEST,0,(LPARAM)(LPRECT)(prc))\n#define MCIWndPutDest(hWnd,prc)     (LONG)MCIWndSM(hWnd,MCIWNDM_PUT_DEST,0,(LPARAM)(LPRECT)(prc))\n\n#define MCIWndPlayReverse(hWnd)     (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYREVERSE,0,0)\n#define MCIWndPlayFrom(hWnd,lPos)   (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYFROM,0,(LPARAM)(LONG)(lPos))\n#define MCIWndPlayTo(hWnd,lPos)     (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYTO,  0,(LPARAM)(LONG)(lPos))\n#define MCIWndPlayFromTo(hWnd,lStart,lEnd) (MCIWndSeek(hWnd,lStart),MCIWndPlayTo(hWnd,lEnd))\n\n#define MCIWndGetDeviceID(hWnd)     (UINT)MCIWndSM(hWnd,MCIWNDM_GETDEVICEID,0,0)\n#define MCIWndGetAlias(hWnd)        (UINT)MCIWndSM(hWnd,MCIWNDM_GETALIAS,0,0)\n#define MCIWndGetMode(hWnd,lp,len)  (LONG)MCIWndSM(hWnd,MCIWNDM_GETMODE,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp))\n#define MCIWndGetPosition(hWnd)     (LONG)MCIWndSM(hWnd,MCIWNDM_GETPOSITION,0,0)\n#define MCIWndGetPositionString(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETPOSITION,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp))\n#define MCIWndGetStart(hWnd)        (LONG)MCIWndSM(hWnd,MCIWNDM_GETSTART,0,0)\n#define MCIWndGetLength(hWnd)       (LONG)MCIWndSM(hWnd,MCIWNDM_GETLENGTH,0,0)\n#define MCIWndGetEnd(hWnd)          (LONG)MCIWndSM(hWnd,MCIWNDM_GETEND,0,0)\n\n#define MCIWndStep(hWnd,n)          (LONG)MCIWndSM(hWnd,MCI_STEP,0,(LPARAM)(LONG)(n))\n\n#define MCIWndDestroy(hWnd)         (VOID)MCIWndSM(hWnd,WM_CLOSE,0,0)\n#define MCIWndSetZoom(hWnd,iZoom)   (VOID)MCIWndSM(hWnd,MCIWNDM_SETZOOM,0,(LPARAM)(UINT)(iZoom))\n#define MCIWndGetZoom(hWnd)         (UINT)MCIWndSM(hWnd,MCIWNDM_GETZOOM,0,0)\n#define MCIWndSetVolume(hWnd,iVol)  (LONG)MCIWndSM(hWnd,MCIWNDM_SETVOLUME,0,(LPARAM)(UINT)(iVol))\n#define MCIWndGetVolume(hWnd)       (LONG)MCIWndSM(hWnd,MCIWNDM_GETVOLUME,0,0)\n#define MCIWndSetSpeed(hWnd,iSpeed) (LONG)MCIWndSM(hWnd,MCIWNDM_SETSPEED,0,(LPARAM)(UINT)(iSpeed))\n#define MCIWndGetSpeed(hWnd)        (LONG)MCIWndSM(hWnd,MCIWNDM_GETSPEED,0,0)\n#define MCIWndSetTimeFormat(hWnd,lp) (LONG)MCIWndSM(hWnd,MCIWNDM_SETTIMEFORMAT,0,(LPARAM)(LPTSTR)(lp))\n#define MCIWndGetTimeFormat(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETTIMEFORMAT,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp))\n#define MCIWndValidateMedia(hWnd)   (VOID)MCIWndSM(hWnd,MCIWNDM_VALIDATEMEDIA,0,0)\n\n#define MCIWndSetRepeat(hWnd,f)     (void)MCIWndSM(hWnd,MCIWNDM_SETREPEAT,0,(LPARAM)(BOOL)(f))\n#define MCIWndGetRepeat(hWnd)       (BOOL)MCIWndSM(hWnd,MCIWNDM_GETREPEAT,0,0)\n\n#define MCIWndUseFrames(hWnd)       MCIWndSetTimeFormat(hWnd,TEXT(\"frames\"))\n#define MCIWndUseTime(hWnd)         MCIWndSetTimeFormat(hWnd,TEXT(\"ms\"))\n\n#define MCIWndSetActiveTimer(hWnd,active)\t\t\t\t\\\n\t(VOID)MCIWndSM(hWnd,MCIWNDM_SETACTIVETIMER,\t\t\t\\\n        (WPARAM)(UINT)(active),0)\n#define MCIWndSetInactiveTimer(hWnd,inactive)\t\t\t\t\\\n\t(VOID)MCIWndSM(hWnd,MCIWNDM_SETINACTIVETIMER,\t\t\t\\\n        (WPARAM)(UINT)(inactive),0)\n#define MCIWndSetTimers(hWnd,active,inactive)\t\t\t\t\\\n\t    (VOID)MCIWndSM(hWnd,MCIWNDM_SETTIMERS,(WPARAM)(UINT)(active),\\\n\t    (LPARAM)(UINT)(inactive))\n#define MCIWndGetActiveTimer(hWnd)\t\t\t\t\t\\\n        (UINT)MCIWndSM(hWnd,MCIWNDM_GETACTIVETIMER,0,0);\n#define MCIWndGetInactiveTimer(hWnd)\t\t\t\t\t\\\n        (UINT)MCIWndSM(hWnd,MCIWNDM_GETINACTIVETIMER,0,0);\n\n#define MCIWndRealize(hWnd,fBkgnd) (LONG)MCIWndSM(hWnd,MCIWNDM_REALIZE,(WPARAM)(BOOL)(fBkgnd),0)\n\n#define MCIWndSendString(hWnd,sz)  (LONG)MCIWndSM(hWnd,MCIWNDM_SENDSTRING,0,(LPARAM)(LPTSTR)(sz))\n#define MCIWndReturnString(hWnd,lp,len)  (LONG)MCIWndSM(hWnd,MCIWNDM_RETURNSTRING,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))\n#define MCIWndGetError(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETERROR,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))\n\n#define MCIWndGetPalette(hWnd)      (HPALETTE)MCIWndSM(hWnd,MCIWNDM_GETPALETTE,0,0)\n#define MCIWndSetPalette(hWnd,hpal) (LONG)MCIWndSM(hWnd,MCIWNDM_SETPALETTE,(WPARAM)(HPALETTE)(hpal),0)\n\n#define MCIWndGetFileName(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETFILENAME,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))\n#define MCIWndGetDevice(hWnd,lp,len)   (LONG)MCIWndSM(hWnd,MCIWNDM_GETDEVICE,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))\n\n#define MCIWndGetStyles(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETSTYLES,0,0)\n#define MCIWndChangeStyles(hWnd,mask,value) (LONG)MCIWndSM(hWnd,MCIWNDM_CHANGESTYLES,(WPARAM)(UINT)(mask),(LPARAM)(LONG)(value))\n\n#define MCIWndOpenInterface(hWnd,pUnk)  (LONG)MCIWndSM(hWnd,MCIWNDM_OPENINTERFACE,0,(LPARAM)(LPUNKNOWN)(pUnk))\n\n#define MCIWndSetOwner(hWnd,hWndP)  (LONG)MCIWndSM(hWnd,MCIWNDM_SETOWNER,(WPARAM)(hWndP),0)\n\n#define MCIWNDM_GETDEVICEID\t(WM_USER + 100)\n#define MCIWNDM_GETSTART\t(WM_USER + 103)\n#define MCIWNDM_GETLENGTH\t(WM_USER + 104)\n#define MCIWNDM_GETEND\t\t(WM_USER + 105)\n#define MCIWNDM_EJECT\t\t(WM_USER + 107)\n#define MCIWNDM_SETZOOM\t\t(WM_USER + 108)\n#define MCIWNDM_GETZOOM         (WM_USER + 109)\n#define MCIWNDM_SETVOLUME\t(WM_USER + 110)\n#define MCIWNDM_GETVOLUME\t(WM_USER + 111)\n#define MCIWNDM_SETSPEED\t(WM_USER + 112)\n#define MCIWNDM_GETSPEED\t(WM_USER + 113)\n#define MCIWNDM_SETREPEAT\t(WM_USER + 114)\n#define MCIWNDM_GETREPEAT\t(WM_USER + 115)\n#define MCIWNDM_REALIZE         (WM_USER + 118)\n#define MCIWNDM_VALIDATEMEDIA   (WM_USER + 121)\n#define MCIWNDM_PLAYFROM\t(WM_USER + 122)\n#define MCIWNDM_PLAYTO          (WM_USER + 123)\n#define MCIWNDM_GETPALETTE      (WM_USER + 126)\n#define MCIWNDM_SETPALETTE      (WM_USER + 127)\n#define MCIWNDM_SETTIMERS\t(WM_USER + 129)\n#define MCIWNDM_SETACTIVETIMER\t(WM_USER + 130)\n#define MCIWNDM_SETINACTIVETIMER (WM_USER + 131)\n#define MCIWNDM_GETACTIVETIMER\t(WM_USER + 132)\n#define MCIWNDM_GETINACTIVETIMER (WM_USER + 133)\n#define MCIWNDM_CHANGESTYLES\t(WM_USER + 135)\n#define MCIWNDM_GETSTYLES\t(WM_USER + 136)\n#define MCIWNDM_GETALIAS\t(WM_USER + 137)\n#define MCIWNDM_PLAYREVERSE\t(WM_USER + 139)\n#define MCIWNDM_GET_SOURCE      (WM_USER + 140)\n#define MCIWNDM_PUT_SOURCE      (WM_USER + 141)\n#define MCIWNDM_GET_DEST        (WM_USER + 142)\n#define MCIWNDM_PUT_DEST        (WM_USER + 143)\n#define MCIWNDM_CAN_PLAY        (WM_USER + 144)\n#define MCIWNDM_CAN_WINDOW      (WM_USER + 145)\n#define MCIWNDM_CAN_RECORD      (WM_USER + 146)\n#define MCIWNDM_CAN_SAVE        (WM_USER + 147)\n#define MCIWNDM_CAN_EJECT       (WM_USER + 148)\n#define MCIWNDM_CAN_CONFIG      (WM_USER + 149)\n#define MCIWNDM_PALETTEKICK     (WM_USER + 150)\n#define MCIWNDM_OPENINTERFACE\t(WM_USER + 151)\n#define MCIWNDM_SETOWNER\t(WM_USER + 152)\n\n#define MCIWNDM_SENDSTRINGA\t(WM_USER + 101)\n#define MCIWNDM_GETPOSITIONA\t(WM_USER + 102)\n#define MCIWNDM_GETMODEA\t(WM_USER + 106)\n#define MCIWNDM_SETTIMEFORMATA  (WM_USER + 119)\n#define MCIWNDM_GETTIMEFORMATA  (WM_USER + 120)\n#define MCIWNDM_GETFILENAMEA    (WM_USER + 124)\n#define MCIWNDM_GETDEVICEA      (WM_USER + 125)\n#define MCIWNDM_GETERRORA       (WM_USER + 128)\n#define MCIWNDM_NEWA\t\t(WM_USER + 134)\n#define MCIWNDM_RETURNSTRINGA\t(WM_USER + 138)\n#define MCIWNDM_OPENA\t\t(WM_USER + 153)\n\n#define MCIWNDM_SENDSTRINGW\t(WM_USER + 201)\n#define MCIWNDM_GETPOSITIONW\t(WM_USER + 202)\n#define MCIWNDM_GETMODEW\t(WM_USER + 206)\n#define MCIWNDM_SETTIMEFORMATW  (WM_USER + 219)\n#define MCIWNDM_GETTIMEFORMATW  (WM_USER + 220)\n#define MCIWNDM_GETFILENAMEW    (WM_USER + 224)\n#define MCIWNDM_GETDEVICEW      (WM_USER + 225)\n#define MCIWNDM_GETERRORW       (WM_USER + 228)\n#define MCIWNDM_NEWW\t\t(WM_USER + 234)\n#define MCIWNDM_RETURNSTRINGW\t(WM_USER + 238)\n#define MCIWNDM_OPENW\t\t(WM_USER + 252)\n\n#define MCIWNDM_SENDSTRING\tWINELIB_NAME_AW(MCIWNDM_SENDSTRING)\n#define MCIWNDM_GETPOSITION\tWINELIB_NAME_AW(MCIWNDM_GETPOSITION)\n#define MCIWNDM_GETMODE\t\tWINELIB_NAME_AW(MCIWNDM_GETMODE)\n#define MCIWNDM_SETTIMEFORMAT\tWINELIB_NAME_AW(MCIWNDM_SETTIMEFORMAT)\n#define MCIWNDM_GETTIMEFORMAT\tWINELIB_NAME_AW(MCIWNDM_GETTIMEFORMAT)\n#define MCIWNDM_GETFILENAME\tWINELIB_NAME_AW(MCIWNDM_GETFILENAME)\n#define MCIWNDM_GETDEVICE\tWINELIB_NAME_AW(MCIWNDM_GETDEVICE)\n#define MCIWNDM_GETERROR\tWINELIB_NAME_AW(MCIWNDM_GETERROR)\n#define MCIWNDM_NEW\t\tWINELIB_NAME_AW(MCIWNDM_NEW)\n#define MCIWNDM_RETURNSTRING\tWINELIB_NAME_AW(MCIWNDM_RETURNSTRING)\n#define MCIWNDM_OPEN\t\tWINELIB_NAME_AW(MCIWNDM_OPEN)\n\n#define MCIWNDM_NOTIFYMODE      (WM_USER + 200)\n#define MCIWNDM_NOTIFYPOS\t(WM_USER + 201)\n#define MCIWNDM_NOTIFYSIZE\t(WM_USER + 202)\n#define MCIWNDM_NOTIFYMEDIA     (WM_USER + 203)\n#define MCIWNDM_NOTIFYERROR     (WM_USER + 205)\n\n#define MCIWND_START                -1\n#define MCIWND_END                  -2\n\n/********************************************\n * DrawDib declarations\n */\n\ntypedef struct\n{ \n    LONG    timeCount; \n    LONG    timeDraw; \n    LONG    timeDecompress; \n    LONG    timeDither; \n    LONG    timeStretch; \n    LONG    timeBlt; \n    LONG    timeSetDIBits; \n} DRAWDIBTIME, *LPDRAWDIBTIME; \n\nHDRAWDIB VFWAPI DrawDibOpen( void );\nUINT VFWAPI DrawDibRealize(HDRAWDIB hdd, HDC hdc, BOOL fBackground);\n\nBOOL VFWAPI DrawDibBegin(HDRAWDIB hdd, HDC hdc, INT dxDst, INT dyDst,\n\t\t\t LPBITMAPINFOHEADER lpbi, INT dxSrc, INT dySrc, UINT wFlags);\n\nBOOL VFWAPI DrawDibDraw(HDRAWDIB hdd, HDC hdc, INT xDst, INT yDst, INT dxDst, INT dyDst,\n\t\t\tLPBITMAPINFOHEADER lpbi, LPVOID lpBits,\n\t\t\tINT xSrc, INT ySrc, INT dxSrc, INT dySrc, UINT wFlags);\n\n/* DrawDibDraw flags */\n\n#define DDF_UPDATE\t\t\t0x0002\n#define DDF_SAME_HDC\t\t\t0x0004\n#define DDF_SAME_DRAW\t\t\t0x0008\n#define DDF_DONTDRAW\t\t\t0x0010\n#define DDF_ANIMATE\t\t\t0x0020\n#define DDF_BUFFER\t\t\t0x0040\n#define DDF_JUSTDRAWIT\t\t\t0x0080\n#define DDF_FULLSCREEN\t\t\t0x0100\n#define DDF_BACKGROUNDPAL\t\t0x0200\n#define DDF_NOTKEYFRAME\t\t\t0x0400\n#define DDF_HURRYUP\t\t\t0x0800\n#define DDF_HALFTONE\t\t\t0x1000\n\n#define DDF_PREROLL         \t\tDDF_DONTDRAW\n#define DDF_SAME_DIB        \t\tDDF_SAME_DRAW\n#define DDF_SAME_SIZE       \t\tDDF_SAME_DRAW\n\nBOOL VFWAPI DrawDibSetPalette(HDRAWDIB hdd, HPALETTE hpal);\nHPALETTE VFWAPI DrawDibGetPalette(HDRAWDIB hdd);\nBOOL VFWAPI DrawDibChangePalette(HDRAWDIB hdd, int iStart, int iLen, LPPALETTEENTRY lppe);\nLPVOID VFWAPI DrawDibGetBuffer(HDRAWDIB hdd, LPBITMAPINFOHEADER lpbi, DWORD dwSize, DWORD dwFlags);\n\nBOOL VFWAPI DrawDibStart(HDRAWDIB hdd, DWORD rate);\nBOOL VFWAPI DrawDibStop(HDRAWDIB hdd);\n#define DrawDibUpdate(hdd, hdc, x, y) \\\n        DrawDibDraw(hdd, hdc, x, y, 0, 0, NULL, NULL, 0, 0, 0, 0, DDF_UPDATE)\n\nBOOL VFWAPI DrawDibEnd(HDRAWDIB hdd);\nBOOL VFWAPI DrawDibClose(HDRAWDIB hdd);\nBOOL VFWAPI DrawDibTime(HDRAWDIB hdd, LPDRAWDIBTIME lpddtime);\n\n/* display profiling */\n#define PD_CAN_DRAW_DIB         0x0001\n#define PD_CAN_STRETCHDIB       0x0002\n#define PD_STRETCHDIB_1_1_OK    0x0004\n#define PD_STRETCHDIB_1_2_OK    0x0008\n#define PD_STRETCHDIB_1_N_OK    0x0010\n\nDWORD VFWAPI DrawDibProfileDisplay(LPBITMAPINFOHEADER lpbi);\n\nDECLARE_HANDLE(HVIDEO);\ntypedef HVIDEO *LPHVIDEO;\n\nDWORD VFWAPI VideoForWindowsVersion(void);\n\nLONG  VFWAPI InitVFW(void);\nLONG  VFWAPI TermVFW(void);\n\n#define DV_ERR_OK            (0)\n#define DV_ERR_BASE          (1)\n#define DV_ERR_NONSPECIFIC   (DV_ERR_BASE)\n#define DV_ERR_BADFORMAT     (DV_ERR_BASE + 1)\n#define DV_ERR_STILLPLAYING  (DV_ERR_BASE + 2)\n#define DV_ERR_UNPREPARED    (DV_ERR_BASE + 3)\n#define DV_ERR_SYNC          (DV_ERR_BASE + 4)\n#define DV_ERR_TOOMANYCHANNELS (DV_ERR_BASE + 5)\n#define DV_ERR_NOTDETECTED   (DV_ERR_BASE + 6)\n#define DV_ERR_BADINSTALL    (DV_ERR_BASE + 7)\n#define DV_ERR_CREATEPALETTE (DV_ERR_BASE + 8)\n#define DV_ERR_SIZEFIELD     (DV_ERR_BASE + 9)\n#define DV_ERR_PARAM1        (DV_ERR_BASE + 10)\n#define DV_ERR_PARAM2        (DV_ERR_BASE + 11)\n#define DV_ERR_CONFIG1       (DV_ERR_BASE + 12)\n#define DV_ERR_CONFIG2       (DV_ERR_BASE + 13)\n#define DV_ERR_FLAGS         (DV_ERR_BASE + 14)\n#define DV_ERR_13            (DV_ERR_BASE + 15)\n\n#define DV_ERR_NOTSUPPORTED  (DV_ERR_BASE + 16)\n#define DV_ERR_NOMEM         (DV_ERR_BASE + 17)\n#define DV_ERR_ALLOCATED     (DV_ERR_BASE + 18)\n#define DV_ERR_BADDEVICEID   (DV_ERR_BASE + 19)\n#define DV_ERR_INVALHANDLE   (DV_ERR_BASE + 20)\n#define DV_ERR_BADERRNUM     (DV_ERR_BASE + 21)\n#define DV_ERR_NO_BUFFERS    (DV_ERR_BASE + 22)\n\n#define DV_ERR_MEM_CONFLICT  (DV_ERR_BASE + 23)\n#define DV_ERR_IO_CONFLICT   (DV_ERR_BASE + 24)\n#define DV_ERR_DMA_CONFLICT  (DV_ERR_BASE + 25)\n#define DV_ERR_INT_CONFLICT  (DV_ERR_BASE + 26)\n#define DV_ERR_PROTECT_ONLY  (DV_ERR_BASE + 27)\n#define DV_ERR_LASTERROR     (DV_ERR_BASE + 27)\n\n#define DV_ERR_USER_MSG      (DV_ERR_BASE + 1000)\n\n#ifndef MM_DRVM_OPEN\n#define MM_DRVM_OPEN       0x3D0\n#define MM_DRVM_CLOSE      0x3D1\n#define MM_DRVM_DATA       0x3D2\n#define MM_DRVM_ERROR      0x3D3\n\n#define DV_VM_OPEN         MM_DRVM_OPEN\n#define DV_VM_CLOSE        MM_DRVM_CLOSE\n#define DV_VM_DATA         MM_DRVM_DATA\n#define DV_VM_ERROR        MM_DRVM_ERROR\n#endif\n\ntypedef struct videohdr_tag {\n    LPBYTE      lpData;\n    DWORD       dwBufferLength;\n    DWORD       dwBytesUsed;\n    DWORD       dwTimeCaptured;\n    DWORD_PTR   dwUser;\n    DWORD       dwFlags;\n    DWORD_PTR   dwReserved[4];\n} VIDEOHDR, *PVIDEOHDR, *LPVIDEOHDR;\n\n#define VHDR_DONE       0x00000001\n#define VHDR_PREPARED   0x00000002\n#define VHDR_INQUEUE    0x00000004\n#define VHDR_KEYFRAME   0x00000008\n\ntypedef struct channel_caps_tag {\n    DWORD       dwFlags;\n    DWORD       dwSrcRectXMod;\n    DWORD       dwSrcRectYMod;\n    DWORD       dwSrcRectWidthMod;\n    DWORD       dwSrcRectHeightMod;\n    DWORD       dwDstRectXMod;\n    DWORD       dwDstRectYMod;\n    DWORD       dwDstRectWidthMod;\n    DWORD       dwDstRectHeightMod;\n} CHANNEL_CAPS, *PCHANNEL_CAPS, *LPCHANNEL_CAPS;\n\n#define VCAPS_OVERLAY       0x00000001\n#define VCAPS_SRC_CAN_CLIP  0x00000002\n#define VCAPS_DST_CAN_CLIP  0x00000004\n#define VCAPS_CAN_SCALE     0x00000008\n\n#define VIDEO_EXTERNALIN        0x0001\n#define VIDEO_EXTERNALOUT       0x0002\n#define VIDEO_IN                0x0004\n#define VIDEO_OUT               0x0008\n\n#define VIDEO_DLG_QUERY         0x0010\n\n#define VIDEO_CONFIGURE_QUERY   0x8000\n\n#define VIDEO_CONFIGURE_SET     0x1000\n\n#define VIDEO_CONFIGURE_GET     0x2000\n#define VIDEO_CONFIGURE_QUERYSIZE 0x0001\n\n#define VIDEO_CONFIGURE_CURRENT 0x0010\n#define VIDEO_CONFIGURE_NOMINAL 0x0020\n#define VIDEO_CONFIGURE_MIN     0x0040\n#define VIDEO_CONFIGURE_MAX     0x0080\n\n#define DVM_USER                0x4000\n\n#define DVM_CONFIGURE_START     0x1000\n#define DVM_CONFIGURE_END       0x1FFF\n\n#define DVM_PALETTE             (DVM_CONFIGURE_START + 1)\n#define DVM_FORMAT              (DVM_CONFIGURE_START + 2)\n#define DVM_PALETTERGB555       (DVM_CONFIGURE_START + 3)\n#define DVM_SRC_RECT            (DVM_CONFIGURE_START + 4)\n#define DVM_DST_RECT            (DVM_CONFIGURE_START + 5)\n\n#define AVICapSM(hwnd,m,w,l) ((IsWindow(hwnd)) ? SendMessage(hwnd,m,w,l) : 0)\n\n#define WM_CAP_START                    WM_USER\n\n#define WM_CAP_UNICODE_START            WM_USER+100\n\n#define WM_CAP_GET_CAPSTREAMPTR         (WM_CAP_START + 1)\n\n#define WM_CAP_SET_CALLBACK_ERRORW      (WM_CAP_UNICODE_START + 2)\n#define WM_CAP_SET_CALLBACK_STATUSW     (WM_CAP_UNICODE_START + 3)\n#define WM_CAP_SET_CALLBACK_ERRORA      (WM_CAP_START + 2)\n#define WM_CAP_SET_CALLBACK_STATUSA     (WM_CAP_START+ 3)\n\n#define WM_CAP_SET_CALLBACK_ERROR       WINELIB_NAME_AW(WM_CAP_SET_CALLBACK_ERROR)\n#define WM_CAP_SET_CALLBACK_STATUS      WINELIB_NAME_AW(WM_CAP_SET_CALLBACK_STATUS)\n\n#define WM_CAP_SET_CALLBACK_YIELD       (WM_CAP_START +  4)\n#define WM_CAP_SET_CALLBACK_FRAME       (WM_CAP_START +  5)\n#define WM_CAP_SET_CALLBACK_VIDEOSTREAM (WM_CAP_START +  6)\n#define WM_CAP_SET_CALLBACK_WAVESTREAM  (WM_CAP_START +  7)\n#define WM_CAP_GET_USER_DATA            (WM_CAP_START +  8)\n#define WM_CAP_SET_USER_DATA            (WM_CAP_START +  9)\n\n#define WM_CAP_DRIVER_CONNECT           (WM_CAP_START +  10)\n#define WM_CAP_DRIVER_DISCONNECT        (WM_CAP_START +  11)\n\n#define WM_CAP_DRIVER_GET_NAMEA         (WM_CAP_START +  12)\n#define WM_CAP_DRIVER_GET_VERSIONA      (WM_CAP_START +  13)\n#define WM_CAP_DRIVER_GET_NAMEW         (WM_CAP_UNICODE_START +  12)\n#define WM_CAP_DRIVER_GET_VERSIONW      (WM_CAP_UNICODE_START +  13)\n\n#define WM_CAP_DRIVER_GET_NAME          WINELIB_NAME_AW(WM_CAP_DRIVER_GET_NAME)\n#define WM_CAP_DRIVER_GET_VERSION       WINELIB_NAME_AW(WM_CAP_DRIVER_GET_VERSION)\n\n#define WM_CAP_DRIVER_GET_CAPS          (WM_CAP_START +  14)\n\n#define WM_CAP_FILE_SET_CAPTURE_FILEA   (WM_CAP_START +  20)\n#define WM_CAP_FILE_GET_CAPTURE_FILEA   (WM_CAP_START +  21)\n#define WM_CAP_FILE_ALLOCATE            (WM_CAP_START +  22)\n#define WM_CAP_FILE_SAVEASA             (WM_CAP_START +  23)\n#define WM_CAP_FILE_SET_INFOCHUNK       (WM_CAP_START +  24)\n#define WM_CAP_FILE_SAVEDIBA            (WM_CAP_START +  25)\n#define WM_CAP_FILE_SET_CAPTURE_FILEW   (WM_CAP_UNICODE_START +  20)\n#define WM_CAP_FILE_GET_CAPTURE_FILEW   (WM_CAP_UNICODE_START +  21)\n#define WM_CAP_FILE_SAVEASW             (WM_CAP_UNICODE_START +  23)\n#define WM_CAP_FILE_SAVEDIBW            (WM_CAP_UNICODE_START +  25)\n\n#define WM_CAP_FILE_SET_CAPTURE_FILE    WINELIB_NAME_AW(WM_CAP_FILE_SET_CAPTURE_FILE)\n#define WM_CAP_FILE_GET_CAPTURE_FILE    WINELIB_NAME_AW(WM_CAP_FILE_GET_CAPTURE_FILE)\n#define WM_CAP_FILE_SAVEAS              WINELIB_NAME_AW(WM_CAP_FILE_SAVEAS)\n#define WM_CAP_FILE_SAVEDIB             WINELIB_NAME_AW(WM_CAP_FILE_SAVEDIB)\n\n#define WM_CAP_EDIT_COPY                (WM_CAP_START +  30)\n\n#define WM_CAP_SET_AUDIOFORMAT          (WM_CAP_START +  35)\n#define WM_CAP_GET_AUDIOFORMAT          (WM_CAP_START +  36)\n\n#define WM_CAP_DLG_VIDEOFORMAT          (WM_CAP_START +  41)\n#define WM_CAP_DLG_VIDEOSOURCE          (WM_CAP_START +  42)\n#define WM_CAP_DLG_VIDEODISPLAY         (WM_CAP_START +  43)\n#define WM_CAP_GET_VIDEOFORMAT          (WM_CAP_START +  44)\n#define WM_CAP_SET_VIDEOFORMAT          (WM_CAP_START +  45)\n#define WM_CAP_DLG_VIDEOCOMPRESSION     (WM_CAP_START +  46)\n\n#define WM_CAP_SET_PREVIEW              (WM_CAP_START +  50)\n#define WM_CAP_SET_OVERLAY              (WM_CAP_START +  51)\n#define WM_CAP_SET_PREVIEWRATE          (WM_CAP_START +  52)\n#define WM_CAP_SET_SCALE                (WM_CAP_START +  53)\n#define WM_CAP_GET_STATUS               (WM_CAP_START +  54)\n#define WM_CAP_SET_SCROLL               (WM_CAP_START +  55)\n\n#define WM_CAP_GRAB_FRAME               (WM_CAP_START +  60)\n#define WM_CAP_GRAB_FRAME_NOSTOP        (WM_CAP_START +  61)\n\n#define WM_CAP_SEQUENCE                 (WM_CAP_START +  62)\n#define WM_CAP_SEQUENCE_NOFILE          (WM_CAP_START +  63)\n#define WM_CAP_SET_SEQUENCE_SETUP       (WM_CAP_START +  64)\n#define WM_CAP_GET_SEQUENCE_SETUP       (WM_CAP_START +  65)\n\n#define WM_CAP_SET_MCI_DEVICEA          (WM_CAP_START +  66)\n#define WM_CAP_GET_MCI_DEVICEA          (WM_CAP_START +  67)\n#define WM_CAP_SET_MCI_DEVICEW          (WM_CAP_UNICODE_START +  66)\n#define WM_CAP_GET_MCI_DEVICEW          (WM_CAP_UNICODE_START +  67)\n\n#define WM_CAP_SET_MCI_DEVICE           WINELIB_NAME_AW(WM_CAP_SET_MCI_DEVICE)\n#define WM_CAP_GET_MCI_DEVICE           WINELIB_NAME_AW(WM_CAP_GET_MCI_DEVICE)\n\n#define WM_CAP_STOP                     (WM_CAP_START +  68)\n#define WM_CAP_ABORT                    (WM_CAP_START +  69)\n\n#define WM_CAP_SINGLE_FRAME_OPEN        (WM_CAP_START +  70)\n#define WM_CAP_SINGLE_FRAME_CLOSE       (WM_CAP_START +  71)\n#define WM_CAP_SINGLE_FRAME             (WM_CAP_START +  72)\n\n#define WM_CAP_PAL_OPENA                (WM_CAP_START +  80)\n#define WM_CAP_PAL_SAVEA                (WM_CAP_START +  81)\n#define WM_CAP_PAL_OPENW                (WM_CAP_UNICODE_START +  80)\n#define WM_CAP_PAL_SAVEW                (WM_CAP_UNICODE_START +  81)\n\n#define WM_CAP_PAL_OPEN                 WINELIB_NAME_AW(WM_CAP_PAL_OPEN)\n#define WM_CAP_PAL_SAVE                 WINELIB_NAME_AW(WM_CAP_PAL_SAVE)\n\n#define WM_CAP_PAL_PASTE                (WM_CAP_START +  82)\n#define WM_CAP_PAL_AUTOCREATE           (WM_CAP_START +  83)\n#define WM_CAP_PAL_MANUALCREATE         (WM_CAP_START +  84)\n\n#define WM_CAP_SET_CALLBACK_CAPCONTROL  (WM_CAP_START +  85)\n\n#define WM_CAP_UNICODE_END              WM_CAP_PAL_SAVEW\n#define WM_CAP_END                      WM_CAP_UNICODE_END\n\ntypedef struct tagCapDriverCaps {\n    UINT        wDeviceIndex;\n    BOOL        fHasOverlay;\n    BOOL        fHasDlgVideoSource;\n    BOOL        fHasDlgVideoFormat;\n    BOOL        fHasDlgVideoDisplay;\n    BOOL        fCaptureInitialized;\n    BOOL        fDriverSuppliesPalettes;\n    HANDLE      hVideoIn;\n    HANDLE      hVideoOut;\n    HANDLE      hVideoExtIn;\n    HANDLE      hVideoExtOut;\n} CAPDRIVERCAPS, *PCAPDRIVERCAPS, *LPCAPDRIVERCAPS;\n\ntypedef struct tagCapStatus {\n    UINT        uiImageWidth;\n    UINT        uiImageHeight;\n    BOOL        fLiveWindow;\n    BOOL        fOverlayWindow;\n    BOOL        fScale;\n    POINT       ptScroll;\n    BOOL        fUsingDefaultPalette;\n    BOOL        fAudioHardware;\n    BOOL        fCapFileExists;\n    DWORD       dwCurrentVideoFrame;\n    DWORD       dwCurrentVideoFramesDropped;\n    DWORD       dwCurrentWaveSamples;\n    DWORD       dwCurrentTimeElapsedMS;\n    HPALETTE    hPalCurrent;\n    BOOL        fCapturingNow;\n    DWORD       dwReturn;\n    UINT        wNumVideoAllocated;\n    UINT        wNumAudioAllocated;\n} CAPSTATUS, *PCAPSTATUS, *LPCAPSTATUS;\n\n\ntypedef struct tagCaptureParms {\n    DWORD       dwRequestMicroSecPerFrame;\n    BOOL        fMakeUserHitOKToCapture;\n    UINT        wPercentDropForError;\n    BOOL        fYield;\n    DWORD       dwIndexSize;\n    UINT        wChunkGranularity;\n    BOOL        fUsingDOSMemory;\n    UINT        wNumVideoRequested;\n    BOOL        fCaptureAudio;\n    UINT        wNumAudioRequested;\n    UINT        vKeyAbort;\n    BOOL        fAbortLeftMouse;\n    BOOL        fAbortRightMouse;\n    BOOL        fLimitEnabled;\n    UINT        wTimeLimit;\n    BOOL        fMCIControl;\n    BOOL        fStepMCIDevice;\n    DWORD       dwMCIStartTime;\n    DWORD       dwMCIStopTime;\n    BOOL        fStepCaptureAt2x;\n    UINT        wStepCaptureAverageFrames;\n    DWORD       dwAudioBufferSize;\n    BOOL        fDisableWriteCache;\n    UINT        AVStreamMaster;\n} CAPTUREPARMS, *PCAPTUREPARMS, *LPCAPTUREPARMS;\n\ntypedef LRESULT (CALLBACK* CAPYIELDCALLBACK)  (HWND hWnd);\ntypedef LRESULT (CALLBACK* CAPSTATUSCALLBACKW) (HWND hWnd, int nID, LPCWSTR lpsz);\ntypedef LRESULT (CALLBACK* CAPERRORCALLBACKW)  (HWND hWnd, int nID, LPCWSTR lpsz);\ntypedef LRESULT (CALLBACK* CAPSTATUSCALLBACKA) (HWND hWnd, int nID, LPCSTR lpsz);\ntypedef LRESULT (CALLBACK* CAPERRORCALLBACKA)  (HWND hWnd, int nID, LPCSTR lpsz);\ntypedef LRESULT (CALLBACK* CAPVIDEOCALLBACK)  (HWND hWnd, LPVIDEOHDR lpVHdr);\ntypedef LRESULT (CALLBACK* CAPWAVECALLBACK)   (HWND hWnd, LPWAVEHDR lpWHdr);\ntypedef LRESULT (CALLBACK* CAPCONTROLCALLBACK)(HWND hWnd, int nState);\n\nHWND VFWAPI capCreateCaptureWindowA(LPCSTR,DWORD,INT,INT,INT,INT,HWND,INT);\nHWND VFWAPI capCreateCaptureWindowW(LPCWSTR,DWORD,INT,INT,INT,INT,HWND,INT);\n#define     capCreateCaptureWindow WINELIB_NAME_AW(capCreateCaptureWindow)\nBOOL VFWAPI capGetDriverDescriptionA(WORD,LPSTR,INT,LPSTR,INT);\nBOOL VFWAPI capGetDriverDescriptionW(WORD,LPWSTR,INT,LPWSTR,INT);\n#define     capGetDriverDescription WINELIB_NAME_AW(capGetDriverDescription)\n\n#ifdef __cplusplus\n}\n#endif  /* __cplusplus */\n\n#endif /* __WINE_VFW_H */\n"
  },
  {
    "path": "wine/windows/vfwmsgs.h",
    "content": "/*\n * Copyright (C) 2002 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#define VFW_S_NO_MORE_ITEMS              ((HRESULT)0x00040103)\n#define VFW_S_DUPLICATE_NAME             ((HRESULT)0x0004022D)\n#define VFW_S_STATE_INTERMEDIATE         ((HRESULT)0x00040237)\n#define VFW_S_PARTIAL_RENDER             ((HRESULT)0x00040242)\n#define VFW_S_SOME_DATA_IGNORED          ((HRESULT)0x00040245)\n#define VFW_S_CONNECTIONS_DEFERRED       ((HRESULT)0x00040246)\n#define VFW_S_RESOURCE_NOT_NEEDED        ((HRESULT)0x00040250)\n#define VFW_S_MEDIA_TYPE_IGNORED         ((HRESULT)0x00040254)\n#define VFW_S_VIDEO_NOT_RENDERED         ((HRESULT)0x00040257)\n#define VFW_S_AUDIO_NOT_RENDERED         ((HRESULT)0x00040258)\n#define VFW_S_RPZA                       ((HRESULT)0x0004025A)\n#define VFW_S_ESTIMATED                  ((HRESULT)0x00040260)\n#define VFW_S_RESERVED                   ((HRESULT)0x00040263)\n#define VFW_S_STREAM_OFF                 ((HRESULT)0x00040267)\n#define VFW_S_CANT_CUE                   ((HRESULT)0x00040268)\n#define VFW_S_NO_STOP_TIME               ((HRESULT)0x00040270)\n#define VFW_S_NOPREVIEWPIN               ((HRESULT)0x0004027E)\n#define VFW_S_DVD_NON_ONE_SEQUENTIAL     ((HRESULT)0x00040280)\n#define VFW_S_DVD_CHANNEL_CONTENTS_NOT_AVAILABLE ((HRESULT)0x0004028C)\n#define VFW_S_DVD_NOT_ACCURATE           ((HRESULT)0x0004028D)\n#define VFW_E_INVALIDMEDIATYPE           ((HRESULT)0x80040200)\n#define VFW_E_INVALIDSUBTYPE             ((HRESULT)0x80040201)\n#define VFW_E_NEED_OWNER                 ((HRESULT)0x80040202)\n#define VFW_E_ENUM_OUT_OF_SYNC           ((HRESULT)0x80040203)\n#define VFW_E_ALREADY_CONNECTED          ((HRESULT)0x80040204)\n#define VFW_E_FILTER_ACTIVE              ((HRESULT)0x80040205)\n#define VFW_E_NO_TYPES                   ((HRESULT)0x80040206)\n#define VFW_E_NO_ACCEPTABLE_TYPES        ((HRESULT)0x80040207)\n#define VFW_E_INVALID_DIRECTION          ((HRESULT)0x80040208)\n#define VFW_E_NOT_CONNECTED              ((HRESULT)0x80040209)\n#define VFW_E_NO_ALLOCATOR               ((HRESULT)0x8004020A)\n#define VFW_E_RUNTIME_ERROR              ((HRESULT)0x8004020B)\n#define VFW_E_BUFFER_NOTSET              ((HRESULT)0x8004020C)\n#define VFW_E_BUFFER_OVERFLOW            ((HRESULT)0x8004020D)\n#define VFW_E_BADALIGN                   ((HRESULT)0x8004020E)\n#define VFW_E_ALREADY_COMMITTED          ((HRESULT)0x8004020F)\n#define VFW_E_BUFFERS_OUTSTANDING        ((HRESULT)0x80040210)\n#define VFW_E_NOT_COMMITTED              ((HRESULT)0x80040211)\n#define VFW_E_SIZENOTSET                 ((HRESULT)0x80040212)\n#define VFW_E_NO_CLOCK                   ((HRESULT)0x80040213)\n#define VFW_E_NO_SINK                    ((HRESULT)0x80040214)\n#define VFW_E_NO_INTERFACE               ((HRESULT)0x80040215)\n#define VFW_E_NOT_FOUND                  ((HRESULT)0x80040216)\n#define VFW_E_CANNOT_CONNECT             ((HRESULT)0x80040217)\n#define VFW_E_CANNOT_RENDER              ((HRESULT)0x80040218)\n#define VFW_E_CHANGING_FORMAT            ((HRESULT)0x80040219)\n#define VFW_E_NO_COLOR_KEY_SET           ((HRESULT)0x8004021A)\n#define VFW_E_NOT_OVERLAY_CONNECTION     ((HRESULT)0x8004021B)\n#define VFW_E_NOT_SAMPLE_CONNECTION      ((HRESULT)0x8004021C)\n#define VFW_E_PALETTE_SET                ((HRESULT)0x8004021D)\n#define VFW_E_COLOR_KEY_SET              ((HRESULT)0x8004021E)\n#define VFW_E_NO_COLOR_KEY_FOUND         ((HRESULT)0x8004021F)\n#define VFW_E_NO_PALETTE_AVAILABLE       ((HRESULT)0x80040220)\n#define VFW_E_NO_DISPLAY_PALETTE         ((HRESULT)0x80040221)\n#define VFW_E_TOO_MANY_COLORS            ((HRESULT)0x80040222)\n#define VFW_E_STATE_CHANGED              ((HRESULT)0x80040223)\n#define VFW_E_NOT_STOPPED                ((HRESULT)0x80040224)\n#define VFW_E_NOT_PAUSED                 ((HRESULT)0x80040225)\n#define VFW_E_NOT_RUNNING                ((HRESULT)0x80040226)\n#define VFW_E_WRONG_STATE                ((HRESULT)0x80040227)\n#define VFW_E_START_TIME_AFTER_END       ((HRESULT)0x80040228)\n#define VFW_E_INVALID_RECT               ((HRESULT)0x80040229)\n#define VFW_E_TYPE_NOT_ACCEPTED          ((HRESULT)0x8004022A)\n#define VFW_E_SAMPLE_REJECTED            ((HRESULT)0x8004022B)\n#define VFW_E_SAMPLE_REJECTED_EOS        ((HRESULT)0x8004022C)\n#define VFW_E_DUPLICATE_NAME             ((HRESULT)0x8004022D)\n#define VFW_E_TIMEOUT                    ((HRESULT)0x8004022E)\n#define VFW_E_INVALID_FILE_FORMAT        ((HRESULT)0x8004022F)\n#define VFW_E_ENUM_OUT_OF_RANGE          ((HRESULT)0x80040230)\n#define VFW_E_CIRCULAR_GRAPH             ((HRESULT)0x80040231)\n#define VFW_E_NOT_ALLOWED_TO_SAVE        ((HRESULT)0x80040232)\n#define VFW_E_TIME_ALREADY_PASSED        ((HRESULT)0x80040233)\n#define VFW_E_ALREADY_CANCELLED          ((HRESULT)0x80040234)\n#define VFW_E_CORRUPT_GRAPH_FILE         ((HRESULT)0x80040235)\n#define VFW_E_ADVISE_ALREADY_SET         ((HRESULT)0x80040236)\n#define VFW_E_NO_MODEX_AVAILABLE         ((HRESULT)0x80040238)\n#define VFW_E_NO_ADVISE_SET              ((HRESULT)0x80040239)\n#define VFW_E_NO_FULLSCREEN              ((HRESULT)0x8004023A)\n#define VFW_E_IN_FULLSCREEN_MODE         ((HRESULT)0x8004023B)\n#define VFW_E_UNKNOWN_FILE_TYPE          ((HRESULT)0x80040240)\n#define VFW_E_CANNOT_LOAD_SOURCE_FILTER  ((HRESULT)0x80040241)\n#define VFW_E_FILE_TOO_SHORT             ((HRESULT)0x80040243)\n#define VFW_E_INVALID_FILE_VERSION       ((HRESULT)0x80040244)\n#define VFW_E_INVALID_CLSID              ((HRESULT)0x80040247)\n#define VFW_E_INVALID_MEDIA_TYPE         ((HRESULT)0x80040248)\n#define VFW_E_SAMPLE_TIME_NOT_SET        ((HRESULT)0x80040249)\n#define VFW_E_MEDIA_TIME_NOT_SET         ((HRESULT)0x80040251)\n#define VFW_E_NO_TIME_FORMAT_SET         ((HRESULT)0x80040252)\n#define VFW_E_MONO_AUDIO_HW              ((HRESULT)0x80040253)\n#define VFW_E_NO_DECOMPRESSOR            ((HRESULT)0x80040255)\n#define VFW_E_NO_AUDIO_HARDWARE          ((HRESULT)0x80040256)\n#define VFW_E_RPZA                       ((HRESULT)0x80040259)\n#define VFW_E_PROCESSOR_NOT_SUITABLE     ((HRESULT)0x8004025B)\n#define VFW_E_UNSUPPORTED_AUDIO          ((HRESULT)0x8004025C)\n#define VFW_E_UNSUPPORTED_VIDEO          ((HRESULT)0x8004025D)\n#define VFW_E_MPEG_NOT_CONSTRAINED       ((HRESULT)0x8004025E)\n#define VFW_E_NOT_IN_GRAPH               ((HRESULT)0x8004025F)\n#define VFW_E_NO_TIME_FORMAT             ((HRESULT)0x80040261)\n#define VFW_E_READ_ONLY                  ((HRESULT)0x80040262)\n#define VFW_E_BUFFER_UNDERFLOW           ((HRESULT)0x80040264)\n#define VFW_E_UNSUPPORTED_STREAM         ((HRESULT)0x80040265)\n#define VFW_E_NO_TRANSPORT               ((HRESULT)0x80040266)\n#define VFW_E_BAD_VIDEOCD                ((HRESULT)0x80040269)\n#define VFW_E_OUT_OF_VIDEO_MEMORY        ((HRESULT)0x80040271)\n#define VFW_E_VP_NEGOTIATION_FAILED      ((HRESULT)0x80040272)\n#define VFW_E_DDRAW_CAPS_NOT_SUITABLE    ((HRESULT)0x80040273)\n#define VFW_E_NO_VP_HARDWARE             ((HRESULT)0x80040274)\n#define VFW_E_NO_CAPTURE_HARDWARE        ((HRESULT)0x80040275)\n#define VFW_E_DVD_OPERATION_INHIBITED    ((HRESULT)0x80040276)\n#define VFW_E_DVD_INVALIDDOMAIN          ((HRESULT)0x80040277)\n#define VFW_E_DVD_NO_BUTTON              ((HRESULT)0x80040278)\n#define VFW_E_DVD_GRAPHNOTREADY          ((HRESULT)0x80040279)\n#define VFW_E_DVD_RENDERFAIL             ((HRESULT)0x8004027A)\n#define VFW_E_DVD_DECNOTENOUGH           ((HRESULT)0x8004027B)\n#define VFW_E_DDRAW_VERSION_NOT_SUITABLE ((HRESULT)0x8004027C)\n#define VFW_E_COPYPROT_FAILED            ((HRESULT)0x8004027D)\n#define VFW_E_TIME_EXPIRED               ((HRESULT)0x8004027F)\n#define VFW_E_DVD_WRONG_SPEED            ((HRESULT)0x80040281)\n#define VFW_E_DVD_MENU_DOES_NOT_EXIST    ((HRESULT)0x80040282)\n#define VFW_E_DVD_CMD_CANCELLED          ((HRESULT)0x80040283)\n#define VFW_E_DVD_STATE_WRONG_VERSION    ((HRESULT)0x80040284)\n#define VFW_E_DVD_STATE_CORRUPT          ((HRESULT)0x80040285)\n#define VFW_E_DVD_STATE_WRONG_DISC       ((HRESULT)0x80040286)\n#define VFW_E_DVD_INCOMPATIBLE_REGION    ((HRESULT)0x80040287)\n#define VFW_E_DVD_NO_ATTRIBUTES          ((HRESULT)0x80040288)\n#define VFW_E_DVD_NO_GOUP_PGC            ((HRESULT)0x80040289)\n#define VFW_E_DVD_LOW_PARENTAL_LEVEL     ((HRESULT)0x8004028A)\n#define VFW_E_DVD_NOT_IN_KARAOKE_MODE    ((HRESULT)0x8004028B)\n#define VFW_E_FRAME_STEP_UNSUPPORTED     ((HRESULT)0x8004028E)\n#define VFW_E_DVD_STREAM_DISABLED        ((HRESULT)0x8004028F)\n#define VFW_E_DVD_TITLE_UNKNOWN          ((HRESULT)0x80040290)\n#define VFW_E_DVD_INVALID_DISC           ((HRESULT)0x80040291)\n#define VFW_E_DVD_NO_RESUME_INFORMATION  ((HRESULT)0x80040292)\n#define VFW_E_PIN_ALREADY_BLOCKED_ON_THIS_THREAD ((HRESULT)0x80040293)\n#define VFW_E_PIN_ALREADY_BLOCKED        ((HRESULT)0x80040294)\n#define VFW_E_CERTIFICATION_FAILURE      ((HRESULT)0x80040295)\n#define VFW_E_VMR_NOT_IN_MIXER_MODE      ((HRESULT)0x80040296)\n#define VFW_E_VMR_NO_AP_SUPPLIED         ((HRESULT)0x80040297)\n#define VFW_E_VMR_NO_DEINTERLACE_HW      ((HRESULT)0x80040298)\n#define VFW_E_VMR_NO_PROCAMP_HW          ((HRESULT)0x80040299)\n#define VFW_E_DVD_VMR9_INCOMPATIBLEDEC   ((HRESULT)0x8004029A)\n#define VFW_E_NO_COPP_HW                 ((HRESULT)0x8004029B)\n#define VFW_E_DVD_NONBLOCKING            ((HRESULT)0x8004029C)\n#define VFW_E_DVD_TOO_MANY_RENDERERS_IN_FILTER_GRAPH    ((HRESULT)0x8004029D)\n#define VFW_E_DVD_NON_EVR_RENDERER_IN_FILTER_GRAPH      ((HRESULT)0x8004029E)\n#define VFW_E_DVD_RESOLUTION_ERROR       ((HRESULT)0x8004029F)\n#define VFW_E_CODECAPI_LINEAR_RANGE      ((HRESULT)0x80040310)\n#define VFW_E_CODECAPI_ENUMERATED        ((HRESULT)0x80040311)\n#define VFW_E_CODECAPI_NO_DEFAULT        ((HRESULT)0x80040313)\n#define VFW_E_CODECAPI_NO_CURRENT_VALUE  ((HRESULT)0x80040314)\n#define VFW_E_DVD_CHAPTER_DOES_NOT_EXIST ((HRESULT)0x80040315)\n#define VFW_E_BAD_KEY                    ((HRESULT)0x800403F2)\n\n#ifndef E_PROP_ID_UNSUPPORTED\n#define E_PROP_ID_UNSUPPORTED            ((HRESULT)0x80070490)\n#endif\n#ifndef E_PROP_SET_UNSUPPORTED\n#define E_PROP_SET_UNSUPPORTED           ((HRESULT)0x80070492)\n#endif\n"
  },
  {
    "path": "wine/windows/virtdisk.h",
    "content": "/*\n * Copyright 2017 Louis Lenders\n * Copyright 2018 Gijs Vermeulen\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_VIRTDISK_DLL_H\n#define __WINE_VIRTDISK_DLL_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define VIRTUAL_STORAGE_TYPE_DEVICE_UNKNOWN     0\n#define VIRTUAL_STORAGE_TYPE_DEVICE_ISO         1\n#define VIRTUAL_STORAGE_TYPE_DEVICE_VHD         2\n\ntypedef enum _ATTACH_VIRTUAL_DISK_FLAG {\n    ATTACH_VIRTUAL_DISK_FLAG_NONE                   = 0x00,\n    ATTACH_VIRTUAL_DISK_FLAG_READ_ONLY              = 0x01,\n    ATTACH_VIRTUAL_DISK_FLAG_NO_DRIVE_LETTER        = 0x02,\n    ATTACH_VIRTUAL_DISK_FLAG_PERMANENT_LIFETIME     = 0x04,\n    ATTACH_VIRTUAL_DISK_FLAG_NO_LOCAL_HOST          = 0x08,\n    ATTACH_VIRTUAL_DISK_FLAG_NO_SECURITY_DESCRIPTOR = 0x10\n} ATTACH_VIRTUAL_DISK_FLAG;\n\ntypedef enum _ATTACH_VIRTUAL_DISK_VERSION {\n    ATTACH_VIRTUAL_DISK_VERSION_UNSPECIFIED,\n    ATTACH_VIRTUAL_DISK_VERSION_1\n} ATTACH_VIRTUAL_DISK_VERSION;\n\ntypedef enum _COMPACT_VIRTUAL_DISK_FLAG {\n    COMPACT_VIRTUAL_DISK_FLAG_NONE           = 0x00,\n    COMPACT_VIRTUAL_DISK_FLAG_NO_ZERO_SCAN   = 0x01,\n    COMPACT_VIRTUAL_DISK_FLAG_NO_BLOCK_MOVES = 0x02\n} COMPACT_VIRTUAL_DISK_FLAG;\n\ntypedef enum _COMPACT_VIRTUAL_DISK_VERSION {\n    COMPACT_VIRTUAL_DISK_VERSION_UNSPECIFIED,\n    COMPACT_VIRTUAL_DISK_VERSION_1\n} COMPACT_VIRTUAL_DISK_VERSION;\n\ntypedef enum _DEPENDENT_DISK_FLAG\n{\n    DEPENDENT_DISK_FLAG_NONE                 = 0x00000000,\n    DEPENDENT_DISK_FLAG_MULT_BACKING_FILES   = 0x00000001,\n    DEPENDENT_DISK_FLAG_FULLY_ALLOCATED      = 0x00000002,\n    DEPENDENT_DISK_FLAG_READ_ONLY            = 0x00000004,\n    DEPENDENT_DISK_FLAG_REMOTE               = 0x00000008,\n    DEPENDENT_DISK_FLAG_SYSTEM_VOLUME        = 0x00000010,\n    DEPENDENT_DISK_FLAG_SYSTEM_VOLUME_PARENT = 0x00000020,\n    DEPENDENT_DISK_FLAG_REMOVABLE            = 0x00000040,\n    DEPENDENT_DISK_FLAG_NO_DRIVE_LETTER      = 0x00000080,\n    DEPENDENT_DISK_FLAG_PARENT               = 0x00000100,\n    DEPENDENT_DISK_FLAG_NO_HOST_DISK         = 0x00000200,\n    DEPENDENT_DISK_FLAG_PERMANENT_LIFETIME   = 0x00000400\n} DEPENDENT_DISK_FLAG;\n\ntypedef enum _EXPAND_VIRTUAL_DISK_VERSION {\n    EXPAND_VIRTUAL_DISK_VERSION_UNSPECIFIED,\n    EXPAND_VIRTUAL_DISK_VERSION_1\n} EXPAND_VIRTUAL_DISK_VERSION;\n\ntypedef enum _DETACH_VIRTUAL_DISK_FLAG {\n    DETACH_VIRTUAL_DISK_FLAG_NONE = 0x00000000\n} DETACH_VIRTUAL_DISK_FLAG;\n\ntypedef enum _EXPAND_VIRTUAL_DISK_FLAG {\n    EXPAND_VIRTUAL_DISK_FLAG_NONE = 0x00000000\n} EXPAND_VIRTUAL_DISK_FLAG;\n\ntypedef enum _GET_STORAGE_DEPENDENCY_FLAG\n{\n    GET_STORAGE_DEPENDENCY_FLAG_NONE         = 0x00,\n    GET_STORAGE_DEPENDENCY_FLAG_HOST_VOLUMES = 0x01,\n    GET_STORAGE_DEPENDENCY_FLAG_DISK_HANDLE  = 0x02\n} GET_STORAGE_DEPENDENCY_FLAG;\n\ntypedef enum _MIRROR_VIRTUAL_DISK_FLAG {\n    MIRROR_VIRTUAL_DISK_FLAG_NONE           = 0x00,\n    MIRROR_VIRTUAL_DISK_FLAG_EXISTING_FILE  = 0x01\n} MIRROR_VIRTUAL_DISK_FLAG;\n\ntypedef enum _MIRROR_VIRTUAL_DISK_VERSION {\n    MIRROR_VIRTUAL_DISK_VERSION_UNSPECIFIED,\n    MIRROR_VIRTUAL_DISK_VERSION_1\n} MIRROR_VIRTUAL_DISK_VERSION;\n\ntypedef enum _MERGE_VIRTUAL_DISK_FLAG {\n    MERGE_VIRTUAL_DISK_FLAG_NONE = 0x00000000\n} MERGE_VIRTUAL_DISK_FLAG;\n\ntypedef enum _STORAGE_DEPENDENCY_INFO_VERSION\n{\n    STORAGE_DEPENDENCY_INFO_VERSION_UNSPECIFIED = 0x0,\n    STORAGE_DEPENDENCY_INFO_VERSION_1           = 0x1,\n    STORAGE_DEPENDENCY_INFO_VERSION_2           = 0x2\n} STORAGE_DEPENDENCY_INFO_VERSION;\n\ntypedef enum _VIRTUAL_DISK_ACCESS_MASK {\n    VIRTUAL_DISK_ACCESS_NONE        = 0x00000000,\n    VIRTUAL_DISK_ACCESS_ATTACH_RO   = 0x00010000,\n    VIRTUAL_DISK_ACCESS_ATTACH_RW   = 0x00020000,\n    VIRTUAL_DISK_ACCESS_DETACH      = 0x00040000,\n    VIRTUAL_DISK_ACCESS_GET_INFO    = 0x00080000,\n    VIRTUAL_DISK_ACCESS_CREATE      = 0x00100000,\n    VIRTUAL_DISK_ACCESS_METAOPS     = 0x00200000,\n    VIRTUAL_DISK_ACCESS_READ        = 0x000d0000,\n    VIRTUAL_DISK_ACCESS_ALL         = 0x003f0000,\n    VIRTUAL_DISK_ACCESS_WRITABLE    = 0x00320000\n} VIRTUAL_DISK_ACCESS_MASK;\n\ntypedef struct _VIRTUAL_STORAGE_TYPE\n{\n    ULONG DeviceId;\n    GUID  VendorId;\n} VIRTUAL_STORAGE_TYPE, *PVIRTUAL_STORAGE_TYPE;\n\ntypedef struct _ATTACH_VIRTUAL_DISK_PARAMETERS {\n    ATTACH_VIRTUAL_DISK_VERSION Version;\n    __C89_NAMELESS union {\n        struct {\n            ULONG Reserved;\n        } Version1;\n    } DUMMYUNIONNAME;\n} ATTACH_VIRTUAL_DISK_PARAMETERS, *PATTACH_VIRTUAL_DISK_PARAMETERS;\n\ntypedef struct _COMPACT_VIRTUAL_DISK_PARAMETERS {\n    COMPACT_VIRTUAL_DISK_VERSION Version;\n    __C89_NAMELESS union {\n        struct {\n            ULONG Reserved;\n        } Version1;\n    } DUMMYUNIONNAME;\n} COMPACT_VIRTUAL_DISK_PARAMETERS, *PCOMPACT_VIRTUAL_DISK_PARAMETERS;\n\ntypedef struct _EXPAND_VIRTUAL_DISK_PARAMETERS {\n    EXPAND_VIRTUAL_DISK_VERSION Version;\n    __C89_NAMELESS union {\n        struct {\n            ULONGLONG NewSize;\n        } Version1;\n    } DUMMYUNIONNAME;\n} EXPAND_VIRTUAL_DISK_PARAMETERS, *PEXPAND_VIRTUAL_DISK_PARAMETERS;\n\ntypedef struct _STORAGE_DEPENDENCY_INFO_TYPE_1\n{\n    DEPENDENT_DISK_FLAG  DependencyTypeFlags;\n    ULONG                ProviderSpecificFlags;\n    VIRTUAL_STORAGE_TYPE VirtualStorageType;\n} STORAGE_DEPENDENCY_INFO_TYPE_1, *PSTORAGE_DEPENDENCY_INFO_TYPE_1;\n\ntypedef struct _STORAGE_DEPENDENCY_INFO_TYPE_2\n{\n    DEPENDENT_DISK_FLAG  DependencyTypeFlags;\n    ULONG                ProviderSpecificFlags;\n    VIRTUAL_STORAGE_TYPE VirtualStorageType;\n    ULONG                AncestorLevel;\n    PWSTR                DependencyDeviceName;\n    PWSTR                HostVolumeName;\n    PWSTR                DependentVolumeName;\n    PWSTR                DependentVolumeRelativePath;\n} STORAGE_DEPENDENCY_INFO_TYPE_2, *PSTORAGE_DEPENDENCY_INFO_TYPE_2;\n\ntypedef struct _STORAGE_DEPENDENCY_INFO\n{\n    STORAGE_DEPENDENCY_INFO_VERSION Version;\n    ULONG                           NumberEntries;\n#if !defined(__WINESRC__) && (defined(_MSC_EXTENSIONS) || ((defined(__GNUC__) && __GNUC__ >= 3)))\n    __C89_NAMELESS union\n    {\n        STORAGE_DEPENDENCY_INFO_TYPE_1 Version1Entries[];\n        STORAGE_DEPENDENCY_INFO_TYPE_2 Version2Entries[];\n    } __C89_NAMELESSUNIONNAME;\n#endif\n} STORAGE_DEPENDENCY_INFO, *PSTORAGE_DEPENDENCY_INFO;\n\ntypedef struct _VIRTUAL_DISK_PROGRESS {\n    DWORD     OperationStatus;\n    ULONGLONG CurrentValue;\n    ULONGLONG CompletionValue;\n} VIRTUAL_DISK_PROGRESS, *PVIRTUAL_DISK_PROGRESS;\n\nDWORD WINAPI GetStorageDependencyInformation(HANDLE obj, GET_STORAGE_DEPENDENCY_FLAG flags, ULONG size, STORAGE_DEPENDENCY_INFO *info, ULONG *used);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* __WINE_VIRTDISK_DLL_H */\n"
  },
  {
    "path": "wine/windows/vmr9.idl",
    "content": "/*\n * Copyright 2008 Maarten Lankhorst\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\n\ncpp_quote(\"#if 0\")\ninterface IDirect3DSurface9;\ninterface IDirect3DDevice9;\ntypedef LONGLONG REFERENCE_TIME;\ntypedef DWORD D3DFORMAT;\ntypedef DWORD D3DPOOL;\ntypedef HANDLE HMONITOR;\ntypedef struct { char dummy; } AM_MEDIA_TYPE;\ntypedef struct { char dummy; } D3DCOLOR;\ncpp_quote(\"#endif\")\n\ninterface IVMRSurface9;\ninterface IVMRSurfaceAllocator9;\ninterface IVMRSurfaceAllocatorEx9;\ninterface IVMRSurfaceAllocatorNotify9;\ninterface IVMRImagePresenter9;\ninterface IVMRImagePresenterConfig9;\ninterface IVMRMonitorConfig9;\ninterface IVMRWindowlessControl9;\ninterface IVMRMixerControl9;\ninterface IVMRImageCompositor9;\ninterface IVMRMixerBitmap9;\ninterface IVMRFilterConfig9;\ninterface IVMRAspectRatioControl9;\ninterface IVMRVideoStreamControl9;\n\ntypedef enum _VMR9PresentationFlags\n{\n    VMR9Sample_SyncPoint = 0x1,\n    VMR9Sample_Preroll = 0x2,\n    VMR9Sample_Discontinuity = 0x4,\n    VMR9Sample_TimeValid = 0x8,\n    VMR9Sample_SrcDstRectsValid = 0x10\n} VMR9PresentationFlags;\n\ntypedef struct _VMR9PresentationInfo\n{\n    DWORD dwFlags; /* Flags defined above */\n    IDirect3DSurface9 *lpSurf;\n    REFERENCE_TIME rtStart;\n    REFERENCE_TIME rtEnd;\n    SIZE szAspectRatio;\n    RECT rcSrc;\n    RECT rcDst;\n    DWORD dwReserved1;\n    DWORD dwReserved2;\n} VMR9PresentationInfo;\n\n[\n    local,\n    object,\n    uuid(69188c61-12a3-40f0-8ffc-342e7b433fd7),\n    helpstring(\"IVMRImagePresenter9 interface\"),\n    pointer_default(unique)\n]\ninterface IVMRImagePresenter9 : IUnknown\n{\n    HRESULT StartPresenting([in] DWORD_PTR id);\n    HRESULT StopPresenting([in] DWORD_PTR id);\n    HRESULT PresentImage([in] DWORD_PTR id, [in] VMR9PresentationInfo *info);\n}\n\ntypedef enum _VMR9SurfaceAllocationFlags\n{\n    VMR9AllocFlag_3DRenderTarget = 0x1,\n    VMR9AllocFlag_DXVATarget = 0x2,\n    VMR9AllocFlag_TextureSurface = 0x4,\n    VMR9AllocFlag_OffscreenSurface = 0x8,\n    VMR9AllocFlag_RGBDynamicSwitch = 0x10,\n    VMR9AllocFlag_UsageReserved = 0xe0,\n    VMR9AllocFlag_UsageMask = 0xff,\n} VMR9SurfaceAllocationFlags;\n\ntypedef struct _VMR9AllocationInfo\n{\n    DWORD dwFlags; /* Flags defined above */\n    DWORD dwWidth;\n    DWORD dwHeight;\n    D3DFORMAT Format;\n    D3DPOOL Pool;\n    DWORD MinBuffers;\n    SIZE szAspectRatio;\n    SIZE szNativeSize;\n} VMR9AllocationInfo;\n\n[\n    local,\n    object,\n    uuid(8d5148ea-3f5d-46cf-9df1-d1b896eedb1f),\n    helpstring(\"IVMRSurfaceAllocator9 interface\"),\n    pointer_default(unique)\n]\ninterface IVMRSurfaceAllocator9 : IUnknown\n{\n    HRESULT InitializeDevice([in] DWORD_PTR id, [in] VMR9AllocationInfo *allocinfo, [in, out] DWORD *numbuffers);\n    HRESULT TerminateDevice([in] DWORD_PTR id);\n    HRESULT GetSurface([in] DWORD_PTR id, [in] DWORD surfaceindex, [in] DWORD flags, [out] IDirect3DSurface9 **surface);\n    HRESULT AdviseNotify([in] IVMRSurfaceAllocatorNotify9 *allocnotify);\n}\n\n[\n    local,\n    object,\n    uuid(6de9a68a-a928-4522-bf57-655ae3866456),\n    helpstring(\"IVMRSurfaceAllocatorEx9 interface\"),\n    pointer_default(unique)\n]\ninterface IVMRSurfaceAllocatorEx9 : IVMRSurfaceAllocator9\n{\n    HRESULT GetSurfaceEx([in] DWORD_PTR id, [in] DWORD surfaceindex, [in] DWORD flags, [out] IDirect3DSurface9 **surface, [out] RECT *dest);\n}\n\n[\n    local,\n    object,\n    uuid(dca3f5df-bb3a-4d03-bd81-84614bfbfa0c),\n    helpstring(\"IVMRSurfaceAllocatorNotify9 interface\"),\n    pointer_default(unique)\n]\ninterface IVMRSurfaceAllocatorNotify9 : IUnknown\n{\n    HRESULT AdviseSurfaceAllocator([in] DWORD_PTR id, [in] IVMRSurfaceAllocator9 *alloc);\n    HRESULT SetD3DDevice([in] IDirect3DDevice9 *device, [in] HMONITOR monitor);\n    HRESULT ChangeD3DDevice([in] IDirect3DDevice9 *device, [in] HMONITOR monitor);\n    HRESULT AllocateSurfaceHelper([in] VMR9AllocationInfo *allocinfo, [in, out] DWORD *numbuffers, [out] IDirect3DSurface9 **surface);\n    HRESULT NotifyEvent([in] LONG code, [in] LONG_PTR param1, [in] LONG_PTR param2);\n}\n\ntypedef enum _VMR9AspectRatioMode\n{\n    VMR9ARMode_None,\n    VMR9ARMode_LetterBox\n} VMR9AspectRatioMode;\n\n[\n    local,\n    object,\n    uuid(8f537d09-f85e-4414-b23b-502e54c79927),\n    helpstring(\"IVMRWindowlessControl interface\"),\n    pointer_default(unique)\n]\ninterface IVMRWindowlessControl9 : IUnknown\n{\n    HRESULT GetNativeVideoSize([out] LONG *width, [out] LONG *height, [out] LONG *arwidth, [out] LONG *arheight);\n    HRESULT GetMinIdealVideoSize([out] LONG *width, [out] LONG *height);\n    HRESULT GetMaxIdealVideoSize([out] LONG *width, [out] LONG *height);\n    HRESULT SetVideoPosition([in] const RECT *source, [in] const RECT *dest);\n    HRESULT GetVideoPosition([out] RECT *source, [out] RECT *dest);\n    HRESULT GetAspectRatioMode([out] DWORD *mode);\n    HRESULT SetAspectRatioMode([in] DWORD mode);\n    HRESULT SetVideoClippingWindow([in] HWND hwnd);\n    HRESULT RepaintVideo([in] HWND hwnd, [in] HDC hdc);\n    HRESULT DisplayModeChanged();\n    HRESULT GetCurrentImage([out] BYTE **dib);\n    HRESULT SetBorderColor([in] COLORREF color);\n    HRESULT GetBorderColor([out] COLORREF *color);\n}\n\ntypedef enum _VMR9MixerPrefs\n{\n    /* Decimation */\n    MixerPref9_NoDecimation = 0x1,\n    MixerPref9_DecimateOutput = 0x2,\n    MixerPref9_ARAdjustXorY = 0x4,\n    MixerPref9_NonSquareMixing = 0x8,\n    MixerPref9_DecimateMask = 0xf,\n\n    /* Filtering */\n    MixerPref9_BiLinearFiltering = 0x10,\n    MixerPref9_PointFiltering = 0x20,\n    MixerPref9_AnisotropicFiltering = 0x40,\n    MixerPref9_PyramidalQuadFiltering = 0x80,\n    MixerPref9_GaussianQuadFiltering = 0x100,\n    MixerPref9_FilteringReserved = 0xe00,\n    MixerPref9_FilteringMask = 0xff0,\n\n    /* Render target */\n    MixerPref9_RenderTargetRGB = 0x1000,\n    MixerPref9_RenderTargetYUV = 0x2000,\n    MixerPref9_RenderTargetReserved = 0xfc000,\n\n    MixerPref9_DynamicSwitchToBOB = 0x100000,\n    MixerPref9_DynamicDecimateBy2 = 0x200000,\n    MixerPref9_DynamicReserved = 0xc00000,\n    MixerPref9_DynamicMask = 0xf00000,\n} VMR9MixerPrefs;\n\ntypedef struct _VMR9NormalizedRect\n{\n    FLOAT left;\n    FLOAT top;\n    FLOAT right;\n    FLOAT bottom;\n} VMR9NormalizedRect;\n\ntypedef enum _VMR9ProcAmpControlFlags\n{\n    ProcAmpControl9_Brightness = 0x1,\n    ProcAmpControl9_Contrast = 0x2,\n    ProcAmpControl9_Hue = 0x4,\n    ProcAmpControl9_Saturation = 0x8,\n    ProcAmpControl9_Mask = 0xf\n} VMR9ProcAmpControlFlags;\n\ntypedef struct _VMR9ProcAmpControl\n{\n    DWORD dwSize;\n    DWORD dwFlags;\n    FLOAT Brightness;\n    FLOAT Contrast;\n    FLOAT Hue;\n    FLOAT Saturation;\n} VMR9ProcAmpControl;\n\ntypedef struct _VMR9ProcAmpControlRange\n{\n    DWORD dwSize;\n    VMR9ProcAmpControlFlags dwProperty;\n    FLOAT MinValue;\n    FLOAT MaxValue;\n    FLOAT DefaultValue;\n    FLOAT StepSize;\n} VMR9ProcAmpControlRange;\n\n[\n    local,\n    object,\n    uuid(1a777eaa-47c8-4930-b2c9-8fee1c1b0f3b),\n    helpstring(\"IVMRMixerControl9 interface\"),\n    pointer_default(unique)\n]\ninterface IVMRMixerControl9 : IUnknown\n{\n    HRESULT SetAlpha([in] DWORD streamid, [in] FLOAT alpha);\n    HRESULT GetAlpha([in] DWORD streamid, [out] FLOAT *alpha);\n    HRESULT SetZOrder([in] DWORD streamid, [in] DWORD zorder);\n    HRESULT GetZOrder([in] DWORD streamid, [out] DWORD *zorder);\n    HRESULT SetOutputRect([in] DWORD streamid, [in] const VMR9NormalizedRect *rect);\n    HRESULT GetOutputRect([in] DWORD streamid, [out] VMR9NormalizedRect *rect);\n    HRESULT SetBackgroundClr([in] COLORREF back);\n    HRESULT GetBackgroundClr([out] COLORREF *back);\n    HRESULT SetMixingPrefs([in] DWORD mixingprefs);\n    HRESULT GetMixingPrefs([out] DWORD *mixingprefs);\n    HRESULT SetProcAmpControl([in] DWORD streamid, [in] VMR9ProcAmpControl *control);\n    HRESULT GetProcAmpControl([in] DWORD streamid, [in, out] VMR9ProcAmpControl *control);\n    HRESULT GetProcAmpControlRange([in] DWORD streamid, [in, out] VMR9ProcAmpControlRange *controlrange);\n}\n\ntypedef struct _VMR9AlphaBitmap\n{\n    DWORD dwFlags;\n    HDC hdc;\n    IDirect3DSurface9 *pDDS;\n    RECT rSrc;\n    VMR9NormalizedRect *rDest;\n    FLOAT fAlpha;\n    COLORREF clrSrcKey;\n    DWORD dwFilterMode;\n} VMR9AlphaBitmap;\n\ntypedef enum _VMR9AlphaBitmapFlags\n{\n    VMR9AlphaBitmap_Disable = 0x1,\n    VMR9AlphaBitmap_hDC = 0x2,\n    VMR9AlphaBitmap_EntireDDS = 0x4,\n    VMR9AlphaBitmap_SrcColorKey = 0x8,\n    VMR9AlphaBitmap_SrcRect = 0x10,\n    VMR9AlphaBitmap_FilterMode = 0x20\n} VMR9AlphaBitmapFlags;\n\n[\n    local,\n    object,\n    uuid(ced175e5-1935-4820-81bd-ff6ad00c9108),\n    helpstring(\"IVMRMixerBitmap interface\"),\n    pointer_default(unique)\n]\ninterface IVMRMixerBitmap9 : IUnknown\n{\n    HRESULT SetAlphaBitmap([in] const VMR9AlphaBitmap *bitmap);\n    HRESULT UpdateAlphaBitmapParameters([in] const VMR9AlphaBitmap *bitmap);\n    HRESULT GetAlphaBitmapParameters([out] VMR9AlphaBitmap *bitmap);\n}\n\n[\n    local,\n    object,\n    uuid(dfc581a1-6e1f-4c3a-8d0a-5e9792ea2afc),\n    helpstring(\"IVMRSurface interface\"),\n    pointer_default(unique)\n]\ninterface IVMRSurface9 : IUnknown\n{\n    HRESULT IsSurfaceLocked();\n    HRESULT LockSurface([out] BYTE **surface);\n    HRESULT UnlockSurface();\n    HRESULT GetSurface([out] IDirect3DSurface9 **surface);\n}\n\ntypedef enum _VMR9RenderPrefs\n{\n   RenderPrefs9_DoNotRenderBorder = 0x1,\n   RenderPrefs9_Mask = 0x1\n} VMR9RenderPrefs;\n\n[\n    local,\n    object,\n    uuid(45c15cab-6e22-420a-8043-ae1f0ac02c7d),\n    helpstring(\"IVMRImagePresenterConfig9 interface\"),\n    pointer_default(unique)\n]\ninterface IVMRImagePresenterConfig9 : IUnknown\n{\n    HRESULT SetRenderingPrefs([in] DWORD renderflags);\n    HRESULT GetRenderingPrefs([out] DWORD *renderflags);\n}\n\n[\n    local,\n    object,\n    uuid(d0cfe38b-93e7-4772-8957-0400c49a4485),\n    helpstring(\"IVMRMixerStreamConfig interface\"),\n    pointer_default(unique)\n]\ninterface IVMRVideoStreamControl9: IUnknown\n{\n    HRESULT SetStreamActiveState([in] BOOL active);\n    HRESULT GetStreamActiveState([out] BOOL *active);\n}\n\ntypedef enum _VMR9Mode\n{\n    VMR9Mode_Windowed = 0x1,\n    VMR9Mode_Windowless = 0x2,\n    VMR9Mode_Renderless = 0x4,\n    VMR9Mode_Mask = 0x7\n} VMR9Mode;\n\n[\n    local,\n    object,\n    uuid(5a804648-4f66-4867-9c43-4f5c822cf1b8),\n    helpstring(\"IVMRFilterConfig9 interface\"),\n    pointer_default(unique)\n]\ninterface IVMRFilterConfig9 : IUnknown\n{\n    HRESULT SetImageCompositor([in] IVMRImageCompositor9 *compositor);\n    HRESULT SetNumberOfStreams([in] DWORD max);\n    HRESULT GetNumberOfStreams([out] DWORD *max);\n    HRESULT SetRenderingPrefs([in] DWORD renderflags);\n    HRESULT GetRenderingPrefs([out] DWORD *renderflags);\n    HRESULT SetRenderingMode([in] DWORD mode);\n    HRESULT GetRenderingMode([out] DWORD *mode);\n}\n\n[\n    local,\n    object,\n    uuid(00d96c29-bbde-4efc-9901-bb5036392146),\n    helpstring(\"IVMRAspectRatioControl9 interface\"),\n    pointer_default(unique)\n]\ninterface IVMRAspectRatioControl9 : IUnknown\n{\n    HRESULT GetAspectRatioMode([out] DWORD *mode);\n    HRESULT SetAspectRatioMode([in] DWORD mode);\n}\n\n#define VMR9DEVICENAMELEN 32\n#define VMR9DEVICEDESCRIPTIONLEN 512\n\ntypedef struct _VMR9MonitorInfo\n{\n    UINT uDevID;\n    RECT rcMonitor;\n    HMONITOR hMon;\n    DWORD dwFlags;\n    WCHAR szDevice[VMR9DEVICENAMELEN];\n    WCHAR szDescription[VMR9DEVICEDESCRIPTIONLEN];\n    LARGE_INTEGER liDriverVersion;\n    DWORD dwVendorId;\n    DWORD dwDeviceId;\n    DWORD dwSubSysId;\n    DWORD dwRevision;\n} VMR9MonitorInfo;\n\n[\n    local,\n    object,\n    uuid(46c2e457-8ba0-4eef-b80b-0680f0978749),\n    helpstring(\"IVMRMonitorConfig9 interface\"),\n    pointer_default(unique)\n]\ninterface IVMRMonitorConfig9 : IUnknown\n{\n    HRESULT SetMonitor([in] UINT uDev);\n    HRESULT GetMonitor([out] UINT *uDev);\n    HRESULT SetDefaultMonitor([in] UINT uDev);\n    HRESULT GetDefaultMonitor([out] UINT *uDev);\n    HRESULT GetAvailableMonitors([out, size_is(arraysize)] VMR9MonitorInfo *info, [in] DWORD arraysize, [out] DWORD *numdev);\n}\n\ntypedef enum _VMR9DeinterlacePrefs\n{\n    DeinterlacePref9_NextBest = 0x1,\n    DeinterlacePref9_BOB = 0x2,\n    DeinterlacePref9_Weave = 0x4,\n    DeinterlacePref9_Mask = 0x7\n} VMR9DeinterlacePrefs;\n\ntypedef enum _VMR9DeinterlaceTech\n{\n    DeinterlaceTech9_Unknown = 0,\n    DeinterlaceTech9_BOBLineReplicate = 0x1,\n    DeinterlaceTech9_BOBVerticalStretch = 0x2,\n    DeinterlaceTech9_MedianFiltering = 0x4,\n    DeinterlaceTech9_EdgeFiltering = 0x10,\n    DeinterlaceTech9_FieldAdaptive = 0x20,\n    DeinterlaceTech9_PixelAdaptive = 0x40,\n    DeinterlaceTech9_MotionVectorSteered = 0x80\n} VMR9DeinterlaceTech;\n\ntypedef struct _VMR9Frequency\n{\n    DWORD dwNumerator;\n    DWORD dwDenominator;\n} VMR9Frequency;\n\ntypedef enum _VMR9_SampleFormat\n{\n    VMR9_SampleReserved = 1,\n    VMR9_SampleProgressiveFrame = 2,\n    VMR9_SampleFieldInterleavedEvenFirst = 3,\n    VMR9_SampleFieldInterleavedOddFirst = 4,\n    VMR9_SampleFieldSingleEven = 5,\n    VMR9_SampleFieldSingleOdd = 6,\n} VMR9_SampleFormat;\n\ntypedef struct _VMR9VideoDesc\n{\n    DWORD dwSize;\n    DWORD dwSampleWidth;\n    DWORD dwSampleHeight;\n    VMR9_SampleFormat SampleFormat;\n    DWORD dwFourCC;\n    VMR9Frequency InputSampleFreq;\n    VMR9Frequency OutputFrameFreq;\n} VMR9VideoDesc;\n\ntypedef struct _VMR9DeinterlaceCaps {\n    DWORD dwSize;\n    DWORD dwNumPreviousOutputFrames;\n    DWORD dwNumForwardRefSamples;\n    DWORD dwNumBackwardRefSamples;\n    VMR9DeinterlaceTech DeinterlaceTechnology;\n} VMR9DeinterlaceCaps;\n\n[\n    local,\n    object,\n    uuid(a215fb8d-13c2-4f7f-993c-003d6271a459),\n    helpstring(\"IVMRDeinterlaceControl9 interface\"),\n    pointer_default(unique)\n]\ninterface IVMRDeinterlaceControl9 : IUnknown\n{\n    HRESULT GetNumberOfDeinterlaceModes([in] VMR9VideoDesc *desc, [in, out] DWORD *nummodes, [out] GUID *modes);\n    HRESULT GetDeinterlaceModeCaps([in] GUID *mode, [in] VMR9VideoDesc *desc, [out] VMR9DeinterlaceCaps *caps);\n    HRESULT GetDeinterlaceMode([in] DWORD streamid, [out] GUID *mode);\n    HRESULT SetDeinterlaceMode([in] DWORD streamid, [in] GUID *mode);\n    HRESULT GetDeinterlacePrefs([out] DWORD *prefs);\n    HRESULT SetDeinterlacePrefs([in] DWORD prefs);\n    HRESULT GetActualDeinterlaceMode([in] DWORD streamid, [out] GUID *mode);\n}\n\ntypedef struct _VMR9VideoStreamInfo {\n    IDirect3DSurface9 *pddsVideoSurface;\n    DWORD dwWidth;\n    DWORD dwHeight;\n    DWORD dwStrmID;\n    FLOAT fAlpha;\n    VMR9NormalizedRect rNormal;\n    REFERENCE_TIME rtStart;\n    REFERENCE_TIME rtEnd;\n    VMR9_SampleFormat SampleFormat;\n} VMR9VideoStreamInfo;\n\n[\n    local,\n    object,\n    uuid(4a5c89eb-df51-4654-ac2a-e48e02bbabf6),\n    helpstring(\"IVMRImageCompositor9 interface\"),\n    pointer_default(unique)\n]\ninterface IVMRImageCompositor9 : IUnknown\n{\n    HRESULT InitCompositionDevice([in] IUnknown *d3ddev);\n    HRESULT TermCompositionDevice([in] IUnknown *d3ddev);\n    HRESULT CompositeImage([in] IUnknown *d3ddev, [in] IDirect3DSurface9 *d3dtarget, [in] AM_MEDIA_TYPE *mttarget,\n                           [in] REFERENCE_TIME start, [in] REFERENCE_TIME stop, D3DCOLOR back,\n                           [in] VMR9VideoStreamInfo *info, [in] UINT streams);\n}\n"
  },
  {
    "path": "wine/windows/vmrender.idl",
    "content": "/*\n * Copyright (C) 2008 Maarten Lankhorst\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\ncpp_quote(\"#if 0\")\ntypedef DWORD IDirectDrawSurface7;\ntypedef DWORD IDirectDraw7;\ntypedef DWORD *LPBITMAPINFOHEADER;\ntypedef DWORD *LPDDPIXELFORMAT;\ntypedef struct { DWORD dw1, dw2; } DDCOLORKEY;\ncpp_quote(\"#endif\")\ncpp_quote(\"#include <ddraw.h>\")\n\ninterface IVMRSurface;\ninterface IVMRSurfaceAllocator;\ninterface IVMRSurfaceAllocatorNotify;\ninterface IVMRImagePresenter;\ninterface IVMRImagePresenterNotify;\ninterface IVMRWindowlessControl;\ninterface IVMRMixerControl;\ninterface IVMRMixerBitmap;\ninterface IVMRFilterConfig;\ninterface IVMRAspectRatioControl;\ninterface IVMRDeinterlaceControl;\ninterface IVMRMonitorConfig;\ninterface IVMRImageCompositor;\ninterface IVMRVideoStreamControl;\n\ntypedef enum _VMRPresentationFlags\n{\n    VMRSample_SyncPoint = 0x01,\n    VMRSample_Preroll = 0x02,\n    VMRSample_Discontinuity = 0x04,\n    VMRSample_TimeValid = 0x08,\n    VMRSample_SrcDstRectsValid = 0x10\n} VMRPresentationFlags;\n\ntypedef struct tagVMRPRESENTATIONINFO\n{\n    DWORD dwFlags;\n    IDirectDrawSurface7 *lpSurf;\n    REFERENCE_TIME rtStart, rtEnd;\n    SIZE szAspectRatio;\n    RECT rcSrc, rcDst;\n    DWORD dwTypeSpecificFlags;\n    DWORD dwInterlaceFlags;\n} VMRPRESENTATIONINFO;\n\n[\n    local,\n    object,\n    uuid(ce704fe7-e71e-41fb-baa2-c4403e1182f5),\n    helpstring(\"IVMRImagePresenter interface\"),\n    pointer_default(unique)\n]\ninterface IVMRImagePresenter : IUnknown\n{\n    HRESULT StartPresenting([in] DWORD_PTR id);\n    HRESULT StopPresenting([in] DWORD_PTR id);\n    HRESULT PresentImage([in] DWORD_PTR id, [in] VMRPRESENTATIONINFO *info);\n}\n\ntypedef enum _VMRSurfaceAllocationFlags\n{\n    AMAP_PIXELFORMAT_VALID = 0x01,\n    AMAP_3D_TARGET = 0x02,\n    AMAP_ALLOW_SYSMEM = 0x04,\n    AMAP_FORCE_SYSMEM = 0x08,\n    AMAP_DIRECTED_FLIP = 0x10,\n    AMAP_DXVA_TARGET = 0x20\n} VMRSurfaceAllocationFlags;\n\ntypedef struct tagVMRALLOCATIONINFO\n{\n    DWORD dwFlags;\n    LPBITMAPINFOHEADER lpHdr;\n    LPDDPIXELFORMAT lpPixFmt;\n    SIZE szAspectRatio;\n    DWORD dwMinBuffers;\n    DWORD dwMaxBuffers;\n    DWORD dwInterlaceFlags;\n    SIZE szNativeSize;\n} VMRALLOCATIONINFO;\n\n[\n    local,\n    object,\n    uuid(31ce832e-4484-458b-8cca-f4d7e3db0b52),\n    helpstring(\"IVMRSurfaceAllocator interface\"),\n    pointer_default(unique)\n]\ninterface IVMRSurfaceAllocator : IUnknown\n{\n    HRESULT AllocateSurface([in] DWORD_PTR id, [in] VMRALLOCATIONINFO *allocinfo, [in, out] DWORD *buffers, IDirectDrawSurface7 **surface);\n    HRESULT FreeSurface([in] DWORD_PTR id);\n    HRESULT PrepareSurface([in] DWORD_PTR id, [in] IDirectDrawSurface7 *surface, [in] DWORD dwSurfaceFlags);\n    HRESULT AdviseNotify([in] IVMRSurfaceAllocatorNotify *notify);\n}\n\n[\n    local,\n    object,\n    uuid(aada05a8-5a4e-4729-af0b-cea27aed51e2),\n    helpstring(\"IVMRSurfaceAllocatorNotify interface\"),\n    pointer_default(unique)\n]\ninterface IVMRSurfaceAllocatorNotify : IUnknown\n{\n    HRESULT AdviseSurfaceAllocator([in] DWORD_PTR id, [in] IVMRSurfaceAllocator *allocator);\n    HRESULT SetDDrawDevice([in] IDirectDraw7 *device, [in] HMONITOR monitor);\n    HRESULT ChangeDDrawDevice([in] IDirectDraw7 *device, [in] HMONITOR monitor);\n    HRESULT RestoreDDrawSurfaces();\n    HRESULT NotifyEvent([in] LONG EventCode, [in] LONG_PTR p1, [in] LONG_PTR p2);\n    HRESULT SetBorderColor([in] COLORREF border);\n}\n\ntypedef enum _VMR_ASPECT_RATIO_MODE\n{\n    VMR_ARMODE_NONE,\n    VMR_ARMODE_LETTER_BOX\n} VMR_ASPECT_RATIO_MODE;\n\n[\n    local,\n    object,\n    uuid(0eb1088c-4dcd-46f0-878f-39dae86a51b7),\n    helpstring(\"IVMRWindowlessControl interface\"),\n    pointer_default(unique)\n]\ninterface IVMRWindowlessControl : IUnknown\n{\n    HRESULT GetNativeVideoSize([out] LONG *width, [out] LONG *height, [out] LONG *ar_width, [out] LONG *ar_height);\n    HRESULT GetMinIdealVideoSize([out] LONG *width, [out] LONG *height);\n    HRESULT GetMaxIdealVideoSize([out] LONG *width, [out] LONG *height);\n    HRESULT SetVideoPosition([in] const RECT *src_rect, [in] const RECT *dst_rect);\n    HRESULT GetVideoPosition([out] RECT *src_rect, [out] RECT *dst_rect);\n    HRESULT GetAspectRatioMode([out] DWORD *mode);\n    HRESULT SetAspectRatioMode([in] DWORD mode);\n    HRESULT SetVideoClippingWindow([in] HWND hwnd);\n    HRESULT RepaintVideo([in] HWND hwnd, [in] HDC hdc);\n    HRESULT DisplayModeChanged();\n    HRESULT GetCurrentImage([out] BYTE **data);\n    HRESULT SetBorderColor([in] COLORREF border);\n    HRESULT GetBorderColor([out] COLORREF *border);\n    HRESULT SetColorKey([in] COLORREF key);\n    HRESULT GetColorKey([out] COLORREF *key);\n}\n\ntypedef enum _VMRMixerPrefs\n{\n    MixerPref_NoDecimation = 0x0001,\n    MixerPref_DecimateOutput = 0x0002,\n    MixerPref_ARAdjustXorY = 0x0004,\n    MixerPref_DecimationReserved = 0x0008,\n    MixerPref_DecimateMask = 0x000f,\n\n    MixerPref_BiLinearFiltering = 0x0010,\n    MixerPref_PointFiltering = 0x0020,\n    MixerPref_FinteringMask = 0x00f0,\n\n    MixerPref_RenderTargetRGB = 0x0100,\n    MixerPref_RenderTargetYUV = 0x1000,\n    MixerPref_RenderTargetYUV420 = 0x0200,\n    MixerPref_RenderTargetYUV422 = 0x0400,\n    MixerPref_RenderTargetYUV444 = 0x0800,\n    MixerPref_RenderTargetReserved = 0xe000,\n    MixerPref_RenderTargetMask = 0xff00,\n\n    MixerPref_DynamicSwitchToBOB = 0x10000,\n    MixerPref_DynamicDecimateBy2 = 0x20000,\n    MixerPref_DynamicReserved = 0xc0000,\n    MixerPref_DynamicMask = 0xf0000\n} VMRMixerPrefs;\n\ntypedef struct _NORMALIZEDRECT\n{\n    FLOAT left, top, right, bottom;\n} NORMALIZEDRECT;\n\n[\n    local,\n    object,\n    uuid(1c1a17b0-bed0-415d-974b-dc6696131599),\n    helpstring(\"IVMRMixerControl interface\"),\n    pointer_default(unique)\n]\ninterface IVMRMixerControl : IUnknown\n{\n    HRESULT SetAlpha([in] DWORD id, [in] FLOAT alpha);\n    HRESULT GetAlpha([in] DWORD id, [out] FLOAT *alpha);\n    HRESULT SetZOrder([in] DWORD id, [in] DWORD z);\n    HRESULT GetZOrder([in] DWORD id, [out] DWORD *z);\n    HRESULT SetOutputRect([in] DWORD id, [in] const NORMALIZEDRECT *rect);\n    HRESULT SetBackgroundClr([in] COLORREF background);\n    HRESULT GetBackgroundClr([out] COLORREF *background);\n    HRESULT SetMixingPrefs([in] DWORD prefs);\n    HRESULT GetMixingPrefs([out] DWORD *prefs);\n}\n\ntypedef struct tagVMRGUID\n{\n    struct _GUID *pGUID, GUID;\n} VMRGUID;\n\n#define VMRDEVICENAMELEN 32\n#define VMRDEVICEDESCRIPTIONLEN 256\n\ntypedef struct tagVMRMONITORINFO\n{\n    VMRGUID guid;\n    RECT rcMonitor;\n    HMONITOR hMon;\n    DWORD dwFlags;\n    WCHAR szDevice[VMRDEVICENAMELEN];\n    WCHAR szDescription[VMRDEVICEDESCRIPTIONLEN];\n    LARGE_INTEGER liDriverVersion;\n    DWORD dwVendorId;\n    DWORD dwDeviceId;\n    DWORD dwSubSysId;\n    DWORD dwRevision;\n} VMRMONITORINFO;\n\n[\n    local,\n    object,\n    uuid(9cf0b1b6-fbaa-4b7f-88cf-cf1f130a0dce),\n    helpstring(\"IVMRMonitorConfig interface\"),\n    pointer_default(unique)\n]\ninterface IVMRMonitorConfig : IUnknown\n{\n    HRESULT SetMonitor([in] const VMRGUID *vmrguid);\n    HRESULT GetMonitor([out] VMRGUID *vmrguid);\n    HRESULT SetDefaultMonitor([in] const VMRGUID *vmrguid);\n    HRESULT GetDefaultMonitor([out] VMRGUID *vmrguid);\n    HRESULT GetAvailableMonitors([out, size_is(array_size)] VMRMONITORINFO *info, [in] DWORD array_size, [out] DWORD *retrieved);\n}\n\ntypedef enum _VMRRenderPrefs\n{\n    RenderPrefs_RestrictToInitialMonitor = 0x00,\n    RenderPrefs_ForceOffScreen = 0x01,\n    RenderPrefs_ForceOverlays = 0x02,\n    RenderPrefs_AllowOverlays = 0x00,\n    RenderPrefs_AllowOffscreen = 0x00,\n    RenderPrefs_DoNotRenderColorKeyAndBorder = 0x08,\n    RenderPrefs_Reserved = 0x10,\n    RenderPrefs_PreferAGPMemWhenMixing = 0x20,\n    RenderPrefs_Mask = 0x3f\n} VMRRenderPrefs;\n\ntypedef enum _VMRMode\n{\n    VMRMode_Windowed = 0x1,\n    VMRMode_Windowless = 0x2,\n    VMRMode_Renderless = 0x4,\n    VMRMode_Mask = 0x7\n} VMRMode;\n\nenum { MAX_NUMBER_OF_STREAMS = 16 };\n\n[\n    local,\n    object,\n    uuid(9e5530c5-7034-48b4-bb46-0b8a6efc8e36),\n    helpstring(\"IVMRFilterConfig interface\"),\n    pointer_default(unique)\n]\ninterface IVMRFilterConfig : IUnknown\n{\n    HRESULT SetImageCompositor([in] IVMRImageCompositor *compositor);\n    HRESULT SetNumberOfStreams([in] DWORD streams);\n    HRESULT GetNumberOfStreams([out] DWORD *streams);\n    HRESULT SetRenderingPrefs([in] DWORD prefs);\n    HRESULT GetRenderingPrefs([out] DWORD *prefs);\n    HRESULT SetRenderingMode([in] DWORD mode);\n    HRESULT GetRenderingMode([out] DWORD *mode);\n}\n\n[\n    local,\n    object,\n    uuid(ede80b5c-bad6-4623-b537-65586c9f8dfd),\n    helpstring(\"IVMRAspectRatioControl interface\"),\n    pointer_default(unique)\n]\ninterface IVMRAspectRatioControl : IUnknown\n{\n    HRESULT GetAspectRatioMode([out] DWORD *armode);\n    HRESULT SetAspectRatioMode([in] DWORD armode);\n}\n\ntypedef enum _VMRDeinterlacePrefs\n{\n    DeinterlacePref_NextBest = 0x1,\n    DeinterlacePref_BOB = 0x2,\n    DeinterlacePref_Weave = 0x4,\n    DeinterlacePref_Mask = 0x7\n} VMRDeinterlacePrefs;\n\ntypedef enum _VMRDeinterlaceTech\n{\n    DeinterlaceTech_Unknown = 0x00,\n    DeinterlaceTech_BOBLineReplicate = 0x01,\n    DeinterlaceTech_BOBVerticalStretch = 0x02,\n    DeinterlaceTech_MedianFiltering = 0x04,\n    DeinterlaceTech_EdgeFiltering = 0x08,\n    DeinterlaceTech_FieldAdaptive = 0x10,\n    DeinterlaceTech_PixelAdaptive = 0x20,\n    DeinterlaceTech_MotionVectorSteered = 0x80\n} VMRDeinterlaceTech;\n\ntypedef struct _VMRFrequency\n{\n    DWORD dwNumerator, dwDenominator;\n} VMRFrequency;\n\ntypedef struct _VMRVideoDesc\n{\n    DWORD dwSize;\n    DWORD dwSampleWidth;\n    DWORD dwSampleHeight;\n    BOOL SingleFieldPerSample;\n    DWORD dwFourCC;\n    VMRFrequency InputSampleFreq;\n    VMRFrequency OutputFrameFreq;\n} VMRVideoDesc;\n\ntypedef struct _VMRDeinterlaceCaps\n{\n    DWORD dwSize;\n    DWORD dwNumPreviousOutputFrames;\n    DWORD dwNumForwardRefSamples;\n    DWORD dwNumBackwardRefSamples;\n    VMRDeinterlaceTech DeinterlaceTechnology;\n} VMRDeinterlaceCaps;\n\n[\n    local,\n    object,\n    uuid(bb057577-0db8-4e6a-87a7-1a8c9a505a0f),\n    helpstring(\"IVMRDeinterlaceControl interface\"),\n    pointer_default(unique)\n]\ninterface IVMRDeinterlaceControl : IUnknown\n{\n    HRESULT GetNumberOfDeinterlaceModes([in] VMRVideoDesc *desc, [in, out] DWORD *num_modes, [out] GUID *modes);\n    HRESULT GetDeinterlaceModeCaps([in] GUID *mode, [in] VMRVideoDesc *desc, [in, out] VMRDeinterlaceCaps *caps);\n    HRESULT GetDeinterlaceMode([in] DWORD id, [out] GUID *mode);\n    HRESULT SetDeinterlaceMode([in] DWORD id, [in] GUID *mode);\n    HRESULT GetDeinterlacePrefs([out] DWORD *prefs);\n    HRESULT SetDeinterlacePrefs([in] DWORD prefs);\n    HRESULT GetActualDeinterlaceMode([in] DWORD id, [out] GUID *mode);\n}\n\ntypedef struct _VMRALPHABITMAP\n{\n    DWORD dwFlags;\n    HDC hdc;\n    IDirectDrawSurface7 *pDDS;\n    RECT rSrc;\n    RECT rDest;\n    FLOAT fAlpha;\n    COLORREF clrSrcKey;\n} VMRALPHABITMAP, *PVMRALPHABITMAP;\n\ncpp_quote(\"#define VMRBITMAP_DISABLE (0x01)\")\ncpp_quote(\"#define VMRBITMAP_HDC (0x02)\")\ncpp_quote(\"#define VMRBITMAP_ENTIREDDS (0x04)\")\ncpp_quote(\"#define VMRBITMAP_SRCCOLORKEY (0x08)\")\ncpp_quote(\"#define VMRBITMAP_SRCRECT (0x10)\")\n\n[\n    local,\n    object,\n    uuid(1e673275-0257-40aa-af20-7c608d4a0428),\n    helpstring(\"IVMRMixerBitmap interface\"),\n    pointer_default(unique)\n]\ninterface IVMRMixerBitmap : IUnknown\n{\n    HRESULT SetAlphaBitmap([in] const VMRALPHABITMAP *params);\n    HRESULT UpdateAlphaBitmapParameters([in] VMRALPHABITMAP *params);\n    HRESULT GetAlphaBitmapParameters([out] VMRALPHABITMAP *params);\n}\n\ntypedef struct _VMRVIDEOSTREAMINFO\n{\n    IDirectDrawSurface7 *pddsVideoSurface;\n    DWORD dwWidth;\n    DWORD dwHeight;\n    DWORD dwStrmID;\n    FLOAT fAlpha;\n    DDCOLORKEY ddClrKey;\n    NORMALIZEDRECT rNormal;\n} VMRVIDEOSTREAMINFO;\n\n[\n    local,\n    object,\n    uuid(7a4fb5af-479f-4074-bb40-ce6722e43c82),\n    helpstring(\"IVMRImageCompositor interface\"),\n    pointer_default(unique)\n]\ninterface IVMRImageCompositor : IUnknown\n{\n    HRESULT InitCompositionTarget([in] IUnknown *d3ddev, [in] IDirectDrawSurface7 *rendertarget);\n    HRESULT TermCompositionTarget([in] IUnknown *d3ddev, [in] IDirectDrawSurface7 *rendertarget);\n    HRESULT SetStreamMediaType([in] DWORD id, [in] AM_MEDIA_TYPE *pmt, [in] BOOL texture);\n    HRESULT CompositeImage([in] IUnknown *d3ddev, [in] IDirectDrawSurface7 *rendertarget,\n                           [in] AM_MEDIA_TYPE *pmt, [in] REFERENCE_TIME start, [in] REFERENCE_TIME stop,\n                           [in] DWORD backgrnd, [in] VMRVIDEOSTREAMINFO *info, [in] UINT streams);\n}\n\n[\n    local,\n    object,\n    uuid(058d1f11-2a54-4bef-bd54-df706626b727),\n    helpstring(\"IVMRVideoStreamControl interface\"),\n    pointer_default(unique)\n]\ninterface IVMRVideoStreamControl : IUnknown\n{\n    HRESULT SetColorKey([in] DDCOLORKEY *key);\n    HRESULT GetColorKey([out] DDCOLORKEY *key);\n    HRESULT SetStreamActiveState([in] BOOL active);\n    HRESULT GetStreamActiveState([out] BOOL *active);\n}\n\n[\n    local,\n    object,\n    uuid(9f3a1c85-8555-49ba-935f-be5b5b29d178),\n    helpstring(\"IVMRImagePresenterConfig interface\"),\n    pointer_default(unique)\n]\ninterface IVMRImagePresenterConfig : IUnknown\n{\n    HRESULT SetRenderingPrefs([in] DWORD prefs);\n    HRESULT GetRenderingPrefs([out] DWORD *prefs);\n}\n\n[\n    local,\n    object,\n    uuid(e6f7ce40-4673-44f1-8f77-5499d68cb4ea),\n    helpstring(\"IVMRImagePresenterExclModeConfig interface\"),\n    pointer_default(unique)\n]\ninterface IVMRImagePresenterExclModeConfig : IVMRImagePresenterConfig\n{\n    HRESULT SetXlcModeDDObjAndPrimarySurface([in] IDirectDraw7 *dddev, [in] IDirectDrawSurface7 *ddsurface);\n    HRESULT GetXlcModeDDObjAndPrimarySurface([out] IDirectDraw7 **dddev, [out] IDirectDrawSurface7 **ddsurface);\n}\n\n[\n    local,\n    object,\n    uuid(aac18c18-e186-46d2-825d-a1f8dc8e395a),\n    helpstring(\"IVPManager interface\"),\n    pointer_default(unique)\n]\ninterface IVPManager : IUnknown\n{\n    HRESULT SetVideoPortIndex([in] DWORD index);\n    HRESULT GetVideoPortIndex([out] DWORD *index);\n}\n"
  },
  {
    "path": "wine/windows/vss.idl",
    "content": "/*\n * Copyright 2014 Hans Leidekker for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\n\ntypedef GUID VSS_ID;\n\ntypedef enum _VSS_APPLICATION_LEVEL\n{\n    VSS_APP_AUTO        = -1,\n    VSS_APP_UNKNOWN     = 0,\n    VSS_APP_SYSTEM      = 1,\n    VSS_APP_BACK_END    = 2,\n    VSS_APP_FRONT_END   = 3,\n    VSS_APP_SYSTEM_RM   = 4\n} VSS_APPLICATION_LEVEL;\n"
  },
  {
    "path": "wine/windows/vsstyle.h",
    "content": "/*\n * Copyright (C) 2011 Piotr Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __VSSTYLE_H__\n#define __VSSTYLE_H__\n\n\n#define TMTVS_RESERVEDLOW 100000\n#define TMTVS_RESERVEDHIGH 19999\n\n/* AEROWIZARDSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_AEROWIZARDSTYLE (const WCHAR []){'A','E','R','O','W','I','Z','A','R','D','S','T','Y','L','E',0}\n#define VSCLASS_AEROWIZARD (const WCHAR []){'A','E','R','O','W','I','Z','A','R','D',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_AEROWIZARDSTYLE L\"AEROWIZARDSTYLE\"\n#define VSCLASS_AEROWIZARD L\"AEROWIZARD\"\n#else\nstatic const WCHAR VSCLASS_AEROWIZARDSTYLE[] = {'A','E','R','O','W','I','Z','A','R','D','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_AEROWIZARD [] = {'A','E','R','O','W','I','Z','A','R','D',0};\n#endif\n\nenum AEROWIZARDPARTS {\n    AW_TITLEBAR = 1,\n    AW_HEADERAREA = 2,\n    AW_CONTENTAREA = 3,\n    AW_COMMANDAREA = 4,\n    AW_BUTTON = 5,\n};\n\n#define AEROWIZARDSTYLEPARTS AEROWIZARDPARTS;\n\nenum TITLEBARSTATES {\n    AW_S_TITLEBAR_ACTIVE = 1,\n    AW_S_TITLEBAR_INACTIVE = 2,\n};\n\nenum HEADERAREASTATES {\n    AW_S_HEADERAREA_NOMARGIN = 1,\n};\n\nenum CONTENTAREASTATES {\n    AW_S_CONTENTAREA_NOMARGIN = 1,\n};\n\n/* BUTTONSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_BUTTONSTYLE (const WCHAR []){'B','U','T','T','O','N','S','T','Y','L','E',0}\n#define VSCLASS_BUTTON (const WCHAR []){'B','U','T','T','O','N',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_BUTTONSTYLE L\"BUTTONSTYLE\"\n#define VSCLASS_BUTTON L\"BUTTON\"\n#else\nstatic const WCHAR VSCLASS_BUTTONSTYLE [] = {'B','U','T','T','O','N','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_BUTTON [] = {'B','U','T','T','O','N',0};\n#endif\n\nenum BUTTONPARTS {\n    BP_PUSHBUTTON = 1,\n    BP_RADIOBUTTON = 2,\n    BP_CHECKBOX = 3,\n    BP_GROUPBOX = 4,\n    BP_USERBUTTON = 5,\n    BP_COMMANDLINK = 6,\n    BP_COMMANDLINKGLYPH = 7,\n};\n\n#define BUTTONSTYLEPARTS BUTTONPARTS;\n\nenum PUSHBUTTONSTATES {\n    PBS_NORMAL = 1,\n    PBS_HOT = 2,\n    PBS_PRESSED = 3,\n    PBS_DISABLED = 4,\n    PBS_DEFAULTED = 5,\n    PBS_DEFAULTED_ANIMATING = 6,\n};\n\nenum RADIOBUTTONSTATES {\n    RBS_UNCHECKEDNORMAL = 1,\n    RBS_UNCHECKEDHOT = 2,\n    RBS_UNCHECKEDPRESSED = 3,\n    RBS_UNCHECKEDDISABLED = 4,\n    RBS_CHECKEDNORMAL = 5,\n    RBS_CHECKEDHOT = 6,\n    RBS_CHECKEDPRESSED = 7,\n    RBS_CHECKEDDISABLED = 8,\n};\n\nenum CHECKBOXSTATES {\n    CBS_UNCHECKEDNORMAL = 1,\n    CBS_UNCHECKEDHOT = 2,\n    CBS_UNCHECKEDPRESSED = 3,\n    CBS_UNCHECKEDDISABLED = 4,\n    CBS_CHECKEDNORMAL = 5,\n    CBS_CHECKEDHOT = 6,\n    CBS_CHECKEDPRESSED = 7,\n    CBS_CHECKEDDISABLED = 8,\n    CBS_MIXEDNORMAL = 9,\n    CBS_MIXEDHOT = 10,\n    CBS_MIXEDPRESSED = 11,\n    CBS_MIXEDDISABLED = 12,\n    CBS_IMPLICITNORMAL = 13,\n    CBS_IMPLICITHOT = 14,\n    CBS_IMPLICITPRESSED = 15,\n    CBS_IMPLICITDISABLED = 16,\n    CBS_EXCLUDEDNORMAL = 17,\n    CBS_EXCLUDEDHOT = 18,\n    CBS_EXCLUDEDPRESSED = 19,\n    CBS_EXCLUDEDDISABLED = 20,\n};\n\nenum GROUPBOXSTATES {\n    GBS_NORMAL = 1,\n    GBS_DISABLED = 2,\n};\n\nenum COMMANDLINKSTATES {\n    CMDLS_NORMAL = 1,\n    CMDLS_HOT = 2,\n    CMDLS_PRESSED = 3,\n    CMDLS_DISABLED = 4,\n    CMDLS_DEFAULTED = 5,\n    CMDLS_DEFAULTED_ANIMATING = 6,\n};\n\nenum COMMANDLINKGLYPHSTATES {\n    CMDLGS_NORMAL = 1,\n    CMDLGS_HOT = 2,\n    CMDLGS_PRESSED = 3,\n    CMDLGS_DISABLED = 4,\n    CMDLGS_DEFAULTED = 5,\n};\n\n/* COMBOBOXSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_COMBOBOXSTYLE (const WCHAR []){'C','O','M','B','O','B','O','X','S','T','Y','L','E',0}\n#define VSCLASS_COMBOBOX (const WCHAR []){'C','O','M','B','O','B','O','X',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_COMBOBOXSTYLE L\"COMBOBOXSTYLE\"\n#define VSCLASS_COMBOBOX L\"COMBOBOX\"\n#else\nstatic const WCHAR VSCLASS_COMBOBOXSTYLE [] = {'C','O','M','B','O','B','O','X','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_COMBOBOX [] = {'C','O','M','B','O','B','O','X',0};\n#endif\n\nenum COMBOBOXPARTS {\n    CP_DROPDOWNBUTTON = 1,\n    CP_BACKGROUND = 2,\n    CP_TRANSPARENTBACKGROUND = 3,\n    CP_BORDER = 4,\n    CP_READONLY = 5,\n    CP_DROPDOWNBUTTONRIGHT = 6,\n    CP_DROPDOWNBUTTONLEFT = 7,\n    CP_CUEBANNER = 8,\n};\n\n#define COMBOBOXSTYLEPARTS COMBOBOXPARTS;\n\nenum COMBOBOXSTYLESTATES {\n    CBXS_NORMAL = 1,\n    CBXS_HOT = 2,\n    CBXS_PRESSED = 3,\n    CBXS_DISABLED = 4,\n};\n\nenum DROPDOWNBUTTONRIGHTSTATES {\n    CBXSR_NORMAL = 1,\n    CBXSR_HOT = 2,\n    CBXSR_PRESSED = 3,\n    CBXSR_DISABLED = 4,\n};\n\nenum DROPDOWNBUTTONLEFTSTATES {\n    CBXSL_NORMAL = 1,\n    CBXSL_HOT = 2,\n    CBXSL_PRESSED = 3,\n    CBXSL_DISABLED = 4,\n};\n\nenum TRANSPARENTBACKGROUNDSTATES {\n    CBTBS_NORMAL = 1,\n    CBTBS_HOT = 2,\n    CBTBS_DISABLED = 3,\n    CBTBS_FOCUSED = 4,\n};\n\nenum BORDERSTATES {\n    CBB_NORMAL = 1,\n    CBB_HOT = 2,\n    CBB_FOCUSED = 3,\n    CBB_DISABLED = 4,\n};\n\nenum READONLYSTATES {\n    CBRO_NORMAL = 1,\n    CBRO_HOT = 2,\n    CBRO_PRESSED = 3,\n    CBRO_DISABLED = 4,\n};\n\nenum CUEBANNERSTATES {\n    CBCB_NORMAL = 1,\n    CBCB_HOT = 2,\n    CBCB_PRESSED = 3,\n    CBCB_DISABLED = 4,\n};\n\n/* COMMUNICATIONSSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_COMMUNICATIONSSTYLE (const WCHAR []){'C','O','M','M','U','N','I','C','A','T','I','O','N','S','S','T','Y','L','E',0}\n#define VSCLASS_COMMUNICATIONS (const WCHAR []){'C','O','M','M','U','N','I','C','A','T','I','O','N','S',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_COMMUNICATIONSSTYLE L\"COMMUNICATIONSSTYLE\"\n#define VSCLASS_COMMUNICATIONS L\"COMMUNICATIONS\"\n#else\nstatic const WCHAR VSCLASS_COMMUNICATIONSSTYLE [] = {'C','O','M','M','U','N','I','C','A','T','I','O','N','S','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_COMMUNICATIONS [] = {'C','O','M','M','U','N','I','C','A','T','I','O','N','S',0};\n#endif\n\nenum COMMUNICATIONSPARTS {\n    CSST_TAB = 1,\n};\n\n#define COMMUNICATIONSSTYLEPARTS COMMUNICATIONSPARTS;\n\nenum TABSTATES {\n    CSTB_NORMAL = 1,\n    CSTB_HOT = 2,\n    CSTB_SELECTED = 3,\n};\n\n/* CONTROLPANELSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_CONTROLPANELSTYLE (const WCHAR []){'C','O','N','T','R','O','L','P','A','N','E','L','S','T','Y','L','E',0}\n#define VSCLASS_CONTROLPANEL (const WCHAR []){'C','O','N','T','R','O','L','P','A','N','E','L',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_CONTROLPANELSTYLE L\"CONTROLPANELSTYLE\"\n#define VSCLASS_CONTROLPANEL L\"CONTROLPANEL\"\n#else\nstatic const WCHAR VSCLASS_CONTROLPANELSTYLE [] = {'C','O','N','T','R','O','L','P','A','N','E','L','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_CONTROLPANEL [] = {'C','O','N','T','R','O','L','P','A','N','E','L',0};\n#endif\n\nenum CONTROLPANELPARTS {\n    CPANEL_NAVIGATIONPANE = 1,\n    CPANEL_CONTENTPANE = 2,\n    CPANEL_NAVIGATIONPANELABEL = 3,\n    CPANEL_CONTENTPANELABEL = 4,\n    CPANEL_TITLE = 5,\n    CPANEL_BODYTEXT = 6,\n    CPANEL_HELPLINK = 7,\n    CPANEL_TASKLINK = 8,\n    CPANEL_GROUPTEXT = 9,\n    CPANEL_CONTENTLINK = 10,\n    CPANEL_SECTIONTITLELINK = 11,\n    CPANEL_LARGECOMMANDAREA = 12,\n    CPANEL_SMALLCOMMANDAREA = 13,\n    CPANEL_BUTTON = 14,\n    CPANEL_MESSAGETEXT = 15,\n    CPANEL_NAVIGATIONPANELINE = 16,\n    CPANEL_CONTENTPANELINE = 17,\n    CPANEL_BANNERAREA = 18,\n    CPANEL_BODYTITLE = 19,\n};\n\n#define CONTROLPANELSTYLEPARTS CONTROLPANELPARTS;\n\nenum HELPLINKSTATES {\n    CPHL_NORMAL = 1,\n    CPHL_HOT = 2,\n    CPHL_PRESSED = 3,\n    CPHL_DISABLED = 4,\n};\n\nenum TASKLINKSTATES {\n    CPTL_NORMAL = 1,\n    CPTL_HOT = 2,\n    CPTL_PRESSED = 3,\n    CPTL_DISABLED = 4,\n    CPTL_PAGE = 5,\n};\n\nenum CONTENTLINKSTATES {\n    CPCL_NORMAL = 1,\n    CPCL_HOT = 2,\n    CPCL_PRESSED = 3,\n    CPCL_DISABLED = 4,\n};\n\nenum SECTIONTITLELINKSTATES {\n    CPSTL_NORMAL = 1,\n    CPSTL_HOT = 2,\n};\n\n/* DATEPICKERSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_DATEPICKERSTYLE (const WCHAR []){'D','A','T','E','P','I','C','K','E','R','S','T','Y','L','E',0}\n#define VSCLASS_DATEPICKER (const WCHAR []){'D','A','T','E','P','I','C','K','E','R',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_DATEPICKERSTYLE L\"DATEPICKERSTYLE\"\n#define VSCLASS_DATEPICKER L\"DATEPICKER\"\n#else\nstatic const WCHAR VSCLASS_DATEPICKERSTYLE[] = {'D','A','T','E','P','I','C','K','E','R','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_DATEPICKER [] = {'D','A','T','E','P','I','C','K','E','R',0};\n#endif\n\nenum DATEPICKERPARTS {\n    DP_DATETEXT = 1,\n    DP_DATEBORDER = 2,\n    DP_SHOWCALENDARBUTTONRIGHT = 3,\n};\n\n#define DATEPICKERSTYLEPARTS DATEPICKERPARTS;\n\nenum DATETEXTSTATES {\n    DPDT_NORMAL = 1,\n    DPDT_DISABLED = 2,\n    DPDT_SELECTED = 3,\n};\n\nenum DATEBORDERSTATES {\n    DPDB_NORMAL = 1,\n    DPDB_HOT = 2,\n    DPDB_FOCUSED = 3,\n    DPDB_DISABLED = 4,\n};\n\nenum SHOWCALENDARBUTTONRIGHTSTATES {\n    DPSCBR_NORMAL = 1,\n    DPSCBR_HOT = 2,\n    DPSCBR_PRESSED = 3,\n    DPSCBR_DISABLED = 4,\n};\n\n/* DRAGDROPSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_DRAGDROPSTYLE (const WCHAR []){'D','R','A','G','D','R','O','P','S','T','Y','L','E',0}\n#define VSCLASS_DRAGDROP (const WCHAR []){'D','R','A','G','D','R','O','P',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_DRAGDROPSTYLE L\"DRAGDROPSTYLE\"\n#define VSCLASS_DRAGDROP L\"DRAGDROP\"\n#else\nstatic const WCHAR VSCLASS_DRAGDROPSTYLE [] = {'D','R','A','G','D','R','O','P','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_DRAGDROP [] = {'D','R','A','G','D','R','O','P',0};\n#endif\n\nenum DRAGDROPPARTS {\n    DD_COPY = 1,\n    DD_MOVE = 2,\n    DD_UPDATEMETADATA = 3,\n    DD_CREATELINK = 4,\n    DD_WARNING = 5,\n    DD_NONE = 6,\n    DD_IMAGEBG = 7,\n    DD_TEXTBG = 8,\n};\n\n#define DRAGDROPSTYLEPARTS DRAGDROPPARTS;\n\nenum COPYSTATES {\n    DDCOPY_HIGHLIGHT = 1,\n    DDCOPY_NOHIGHLIGHT = 2,\n};\n\nenum MOVESTATES {\n    DDMOVE_HIGHLIGHT = 1,\n    DDMOVE_NOHIGHLIGHT = 2,\n};\n\nenum UPDATEMETADATASTATES {\n    DDUPDATEMETADATA_HIGHLIGHT = 1,\n    DDUPDATEMETADATA_NOHIGHLIGHT = 2,\n};\n\nenum CREATELINKSTATES {\n    DDCREATELINK_HIGHLIGHT = 1,\n    DDCREATELINK_NOHIGHLIGHT = 2,\n};\n\nenum WARNINGSTATES {\n    DDWARNING_HIGHLIGHT = 1,\n    DDWARNING_NOHIGHLIGHT = 2,\n};\n\nenum NONESTATES {\n    DDNONE_HIGHLIGHT = 1,\n    DDNONE_NOHIGHLIGHT = 2,\n};\n\n/* EDITSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_EDITSTYLE (const WCHAR []){'E','D','I','T','S','T','Y','L','E',0}\n#define VSCLASS_EDIT (const WCHAR []){'E','D','I','T',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_EDITSTYLE L\"EDITSTYLE\"\n#define VSCLASS_EDIT L\"EDIT\"\n#else\nstatic const WCHAR VSCLASS_EDITSTYLE [] = {'E','D','I','T','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_EDIT [] = {'E','D','I','T',0};\n#endif\n\nenum EDITPARTS {\n    EP_EDITTEXT = 1,\n    EP_CARET = 2,\n    EP_BACKGROUND = 3,\n    EP_PASSWORD = 4,\n    EP_BACKGROUNDWITHBORDER = 5,\n    EP_EDITBORDER_NOSCROLL = 6,\n    EP_EDITBORDER_HSCROLL = 7,\n    EP_EDITBORDER_VSCROLL = 8,\n    EP_EDITBORDER_HVSCROLL = 9,\n};\n\n#define EDITSTYLEPARTS EDITPARTS;\n\nenum EDITTEXTSTATES {\n    ETS_NORMAL = 1,\n    ETS_HOT = 2,\n    ETS_SELECTED = 3,\n    ETS_DISABLED = 4,\n    ETS_FOCUSED = 5,\n    ETS_READONLY = 6,\n    ETS_ASSIST = 7,\n    ETS_CUEBANNER = 8,\n};\n\nenum BACKGROUNDSTATES {\n    EBS_NORMAL = 1,\n    EBS_HOT = 2,\n    EBS_DISABLED = 3,\n    EBS_FOCUSED = 4,\n    EBS_READONLY = 5,\n    EBS_ASSIST = 6,\n};\n\nenum BACKGROUNDWITHBORDERSTATES {\n    EBWBS_NORMAL = 1,\n    EBWBS_HOT = 2,\n    EBWBS_DISABLED = 3,\n    EBWBS_FOCUSED = 4,\n};\n\nenum EDITBORDER_NOSCROLLSTATES {\n    EPSN_NORMAL = 1,\n    EPSN_HOT = 2,\n    EPSN_FOCUSED = 3,\n    EPSN_DISABLED = 4,\n};\n\nenum EDITBORDER_HSCROLLSTATES {\n    EPSH_NORMAL = 1,\n    EPSH_HOT = 2,\n    EPSH_FOCUSED = 3,\n    EPSH_DISABLED = 4,\n};\n\nenum EDITBORDER_VSCROLLSTATES {\n    EPSV_NORMAL = 1,\n    EPSV_HOT = 2,\n    EPSV_FOCUSED = 3,\n    EPSV_DISABLED = 4,\n};\n\nenum EDITBORDER_HVSCROLLSTATES {\n    EPSHV_NORMAL = 1,\n    EPSHV_HOT = 2,\n    EPSHV_FOCUSED = 3,\n    EPSHV_DISABLED = 4,\n};\n\n/* EXPLORERBARSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_EXPLORERBARSTYLE (const WCHAR []){'E','X','P','L','O','R','E','R','B','A','R','S','T','Y','L','E',0}\n#define VSCLASS_EXPLORERBAR (const WCHAR []){'E','X','P','L','O','R','E','R','B','A','R',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_EXPLORERBARSTYLE L\"EXPLORERBARSTYLE\"\n#define VSCLASS_EXPLORERBAR L\"EXPLORERBAR\"\n#else\nstatic const WCHAR VSCLASS_EXPLORERBARSTYLE [] = {'E','X','P','L','O','R','E','R','B','A','R','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_EXPLORERBAR [] = {'E','X','P','L','O','R','E','R','B','A','R',0};\n#endif\n\nenum EXPLORERBARPARTS {\n    EBP_HEADERBACKGROUND = 1,\n    EBP_HEADERCLOSE = 2,\n    EBP_HEADERPIN = 3,\n    EBP_IEBARMENU = 4,\n    EBP_NORMALGROUPBACKGROUND = 5,\n    EBP_NORMALGROUPCOLLAPSE = 6,\n    EBP_NORMALGROUPEXPAND = 7,\n    EBP_NORMALGROUPHEAD = 8,\n    EBP_SPECIALGROUPBACKGROUND = 9,\n    EBP_SPECIALGROUPCOLLAPSE = 10,\n    EBP_SPECIALGROUPEXPAND = 11,\n    EBP_SPECIALGROUPHEAD = 12,\n};\n\n#define EXPLORERBARSTYLEPARTS EXPLORERBARPARTS;\n\nenum HEADERCLOSESTATES {\n    EBHC_NORMAL = 1,\n    EBHC_HOT = 2,\n    EBHC_PRESSED = 3,\n};\n\nenum HEADERPINSTATES {\n    EBHP_NORMAL = 1,\n    EBHP_HOT = 2,\n    EBHP_PRESSED = 3,\n    EBHP_SELECTEDNORMAL = 4,\n    EBHP_SELECTEDHOT = 5,\n    EBHP_SELECTEDPRESSED = 6,\n};\n\nenum IEBARMENUSTATES {\n    EBM_NORMAL = 1,\n    EBM_HOT = 2,\n    EBM_PRESSED = 3,\n};\n\nenum NORMALGROUPCOLLAPSESTATES {\n    EBNGC_NORMAL = 1,\n    EBNGC_HOT = 2,\n    EBNGC_PRESSED = 3,\n};\n\nenum NORMALGROUPEXPANDSTATES {\n    EBNGE_NORMAL = 1,\n    EBNGE_HOT = 2,\n    EBNGE_PRESSED = 3,\n};\n\nenum SPECIALGROUPCOLLAPSESTATES {\n    EBSGC_NORMAL = 1,\n    EBSGC_HOT = 2,\n    EBSGC_PRESSED = 3,\n};\n\nenum SPECIALGROUPEXPANDSTATES {\n    EBSGE_NORMAL = 1,\n    EBSGE_HOT = 2,\n    EBSGE_PRESSED = 3,\n};\n\n/* FLYOUTSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_FLYOUTSTYLE (const WCHAR []){'F','L','Y','O','U','T','S','T','Y','L','E',0}\n#define VSCLASS_FLYOUT (const WCHAR []){'F','L','Y','O','U','T',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_FLYOUTSTYLE L\"FLYOUTSTYLE\"\n#define VSCLASS_FLYOUT L\"FLYOUT\"\n#else\nstatic const WCHAR VSCLASS_FLYOUTSTYLE [] = {'F','L','Y','O','U','T','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_FLYOUT [] = {'F','L','Y','O','U','T',0};\n#endif\n\nenum FLYOUTPARTS {\n    FLYOUT_HEADER = 1,\n    FLYOUT_BODY = 2,\n    FLYOUT_LABEL = 3,\n    FLYOUT_LINK = 4,\n    FLYOUT_DIVIDER = 5,\n    FLYOUT_WINDOW = 6,\n    FLYOUT_LINKAREA = 7,\n    FLYOUT_LINKHEADER = 8,\n};\n\n#define FLYOUTSTYLEPARTS FLYOUTPARTS;\n\nenum LABELSTATES {\n    FLS_NORMAL = 1,\n    FLS_SELECTED = 2,\n    FLS_EMPHASIZED = 3,\n    FLS_DISABLED = 4,\n};\n\nenum LINKSTATES {\n    FLYOUTLINK_NORMAL = 1,\n    FLYOUTLINK_HOVER = 2,\n};\n\nenum BODYSTATES {\n    FBS_NORMAL = 1,\n    FBS_EMPHASIZED = 2,\n};\n\nenum LINKHEADERSTATES {\n    FLH_NORMAL = 1,\n    FLH_HOVER = 2,\n};\n\n/* HEADERSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_HEADERSTYLE (const WCHAR []){'H','E','A','D','E','R','S','T','Y','L','E',0}\n#define VSCLASS_HEADER (const WCHAR []){'H','E','A','D','E','R',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_HEADERSTYLE L\"HEADERSTYLE\"\n#define VSCLASS_HEADER L\"HEADER\"\n#else\nstatic const WCHAR VSCLASS_HEADERSTYLE [] = {'H','E','A','D','E','R','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_HEADER [] = {'H','E','A','D','E','R',0};\n#endif\n\nenum HEADERPARTS {\n    HP_HEADERITEM = 1,\n    HP_HEADERITEMLEFT = 2,\n    HP_HEADERITEMRIGHT = 3,\n    HP_HEADERSORTARROW = 4,\n    HP_HEADERDROPDOWN = 5,\n    HP_HEADERDROPDOWNFILTER = 6,\n    HP_HEADEROVERFLOW = 7,\n};\n\n#define HEADERSTYLEPARTS HEADERPARTS;\n\nenum HEADERSTYLESTATES {\n    HBG_DETAILS = 1,\n    HBG_ICON = 2,\n};\n\nenum HEADERITEMSTATES {\n    HIS_NORMAL = 1,\n    HIS_HOT = 2,\n    HIS_PRESSED = 3,\n    HIS_SORTEDNORMAL = 4,\n    HIS_SORTEDHOT = 5,\n    HIS_SORTEDPRESSED = 6,\n    HIS_ICONNORMAL = 7,\n    HIS_ICONHOT = 8,\n    HIS_ICONPRESSED = 9,\n    HIS_ICONSORTEDNORMAL = 10,\n    HIS_ICONSORTEDHOT = 11,\n    HIS_ICONSORTEDPRESSED = 12,\n};\n\nenum HEADERITEMLEFTSTATES {\n    HILS_NORMAL = 1,\n    HILS_HOT = 2,\n    HILS_PRESSED = 3,\n};\n\nenum HEADERITEMRIGHTSTATES {\n    HIRS_NORMAL = 1,\n    HIRS_HOT = 2,\n    HIRS_PRESSED = 3,\n};\n\nenum HEADERSORTARROWSTATES {\n    HSAS_SORTEDUP = 1,\n    HSAS_SORTEDDOWN = 2,\n};\n\nenum HEADERDROPDOWNSTATES {\n    HDDS_NORMAL = 1,\n    HDDS_SOFTHOT = 2,\n    HDDS_HOT = 3,\n};\n\nenum HEADERDROPDOWNFILTERSTATES {\n    HDDFS_NORMAL = 1,\n    HDDFS_SOFTHOT = 2,\n    HDDFS_HOT = 3,\n};\n\nenum HEADEROVERFLOWSTATES {\n    HOFS_NORMAL = 1,\n    HOFS_HOT = 2,\n};\n\n/* LISTBOXSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_LISTBOXSTYLE (const WCHAR []){'L','I','S','T','B','O','X','S','T','Y','L','E',0}\n#define VSCLASS_LISTBOX (const WCHAR []){'L','I','S','T','B','O','X',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_LISTBOXSTYLE L\"LISTBOXSTYLE\"\n#define VSCLASS_LISTBOX L\"LISTBOX\"\n#else\nstatic const WCHAR VSCLASS_LISTBOXSTYLE [] = {'L','I','S','T','B','O','X','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_LISTBOX[] = {'L','I','S','T','B','O','X',0};\n#endif\n\nenum LISTBOXPARTS {\n    LBCP_BORDER_HSCROLL = 1,\n    LBCP_BORDER_HVSCROLL = 2,\n    LBCP_BORDER_NOSCROLL = 3,\n    LBCP_BORDER_VSCROLL = 4,\n    LBCP_ITEM = 5,\n};\n\n#define LISTBOXSTYLEPARTS LISTBOXPARTS;\n\nenum BORDER_HSCROLLSTATES {\n    LBPSH_NORMAL = 1,\n    LBPSH_FOCUSED = 2,\n    LBPSH_HOT = 3,\n    LBPSH_DISABLED = 4,\n};\n\nenum BORDER_HVSCROLLSTATES {\n    LBPSHV_NORMAL = 1,\n    LBPSHV_FOCUSED = 2,\n    LBPSHV_HOT = 3,\n    LBPSHV_DISABLED = 4,\n};\n\nenum BORDER_NOSCROLLSTATES {\n    LBPSN_NORMAL = 1,\n    LBPSN_FOCUSED = 2,\n    LBPSN_HOT = 3,\n    LBPSN_DISABLED = 4,\n};\n\nenum BORDER_VSCROLLSTATES {\n    LBPSV_NORMAL = 1,\n    LBPSV_FOCUSED = 2,\n    LBPSV_HOT = 3,\n    LBPSV_DISABLED = 4,\n};\n\nenum ITEMSTATES {\n    LBPSI_HOT = 1,\n    LBPSI_HOTSELECTED = 2,\n    LBPSI_SELECTED = 3,\n    LBPSI_SELECTEDNOTFOCUS = 4,\n};\n\n/* LISTVIEWSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_LISTVIEWSTYLE (const WCHAR []){'L','I','S','T','V','I','E','W','S','T','Y','L','E',0}\n#define VSCLASS_LISTVIEW (const WCHAR []){'L','I','S','T','V','I','E','W',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_LISTVIEWSTYLE L\"LISTVIEWSTYLE\"\n#define VSCLASS_LISTVIEW L\"LISTVIEW\"\n#else\nstatic const WCHAR VSCLASS_LISTVIEWSTYLE [] = {'L','I','S','T','V','I','E','W','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_LISTVIEW [] = {'L','I','S','T','V','I','E','W',0};\n#endif\n\nenum LISTVIEWPARTS {\n    LVP_LISTITEM = 1,\n    LVP_LISTGROUP = 2,\n    LVP_LISTDETAIL = 3,\n    LVP_LISTSORTEDDETAIL = 4,\n    LVP_EMPTYTEXT = 5,\n    LVP_GROUPHEADER = 6,\n    LVP_GROUPHEADERLINE = 7,\n    LVP_EXPANDBUTTON = 8,\n    LVP_COLLAPSEBUTTON = 9,\n    LVP_COLUMNDETAIL = 10,\n};\n\n#define LISTVIEWSTYLEPARTS LISTVIEWPARTS;\n\nenum LISTITEMSTATES {\n    LISS_NORMAL = 1,\n    LISS_HOT = 2,\n    LISS_SELECTED = 3,\n    LISS_DISABLED = 4,\n    LISS_SELECTEDNOTFOCUS = 5,\n    LISS_HOTSELECTED = 6,\n};\n\nenum GROUPHEADERSTATES {\n    LVGH_OPEN = 1,\n    LVGH_OPENHOT = 2,\n    LVGH_OPENSELECTED = 3,\n    LVGH_OPENSELECTEDHOT = 4,\n    LVGH_OPENSELECTEDNOTFOCUSED = 5,\n    LVGH_OPENSELECTEDNOTFOCUSEDHOT = 6,\n    LVGH_OPENMIXEDSELECTION = 7,\n    LVGH_OPENMIXEDSELECTIONHOT = 8,\n    LVGH_CLOSE = 9,\n    LVGH_CLOSEHOT = 10,\n    LVGH_CLOSESELECTED = 11,\n    LVGH_CLOSESELECTEDHOT = 12,\n    LVGH_CLOSESELECTEDNOTFOCUSED = 13,\n    LVGH_CLOSESELECTEDNOTFOCUSEDHOT = 14,\n    LVGH_CLOSEMIXEDSELECTION = 15,\n    LVGH_CLOSEMIXEDSELECTIONHOT = 16,\n};\n\nenum GROUPHEADERLINESTATES {\n    LVGHL_OPEN = 1,\n    LVGHL_OPENHOT = 2,\n    LVGHL_OPENSELECTED = 3,\n    LVGHL_OPENSELECTEDHOT = 4,\n    LVGHL_OPENSELECTEDNOTFOCUSED = 5,\n    LVGHL_OPENSELECTEDNOTFOCUSEDHOT = 6,\n    LVGHL_OPENMIXEDSELECTION = 7,\n    LVGHL_OPENMIXEDSELECTIONHOT = 8,\n    LVGHL_CLOSE = 9,\n    LVGHL_CLOSEHOT = 10,\n    LVGHL_CLOSESELECTED = 11,\n    LVGHL_CLOSESELECTEDHOT = 12,\n    LVGHL_CLOSESELECTEDNOTFOCUSED = 13,\n    LVGHL_CLOSESELECTEDNOTFOCUSEDHOT = 14,\n    LVGHL_CLOSEMIXEDSELECTION = 15,\n    LVGHL_CLOSEMIXEDSELECTIONHOT = 16,\n};\n\nenum EXPANDBUTTONSTATES {\n    LVEB_NORMAL = 1,\n    LVEB_HOVER = 2,\n    LVEB_PUSHED = 3,\n};\n\nenum COLLAPSEBUTTONSTATES {\n    LVCB_NORMAL = 1,\n    LVCB_HOVER = 2,\n    LVCB_PUSHED = 3,\n};\n\n/* MENUSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_MENUSTYLE (const WCHAR []){'M','E','N','U','S','T','Y','L','E',0}\n#define VSCLASS_MENU (const WCHAR []){'M','E','N','U',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_MENUSTYLE L\"MENUSTYLE\"\n#define VSCLASS_MENU L\"MENU\"\n#else\nstatic const WCHAR VSCLASS_MENUSTYLE [] = {'M','E','N','U','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_MENU [] = {'M','E','N','U',0};\n#endif\n\nenum MENUPARTS {\n    MENU_MENUITEM_TMSCHEMA = 1,\n    MENU_MENUDROPDOWN_TMSCHEMA = 2,\n    MENU_MENUBARITEM_TMSCHEMA = 3,\n    MENU_MENUBARDROPDOWN_TMSCHEMA = 4,\n    MENU_CHEVRON_TMSCHEMA = 5,\n    MENU_SEPARATOR_TMSCHEMA = 6,\n    MENU_BARBACKGROUND = 7,\n    MENU_BARITEM = 8,\n    MENU_POPUPBACKGROUND = 9,\n    MENU_POPUPBORDERS = 10,\n    MENU_POPUPCHECK = 11,\n    MENU_POPUPCHECKBACKGROUND = 12,\n    MENU_POPUPGUTTER = 13,\n    MENU_POPUPITEM = 14,\n    MENU_POPUPSEPARATOR = 15,\n    MENU_POPUPSUBMENU = 16,\n    MENU_SYSTEMCLOSE = 17,\n    MENU_SYSTEMMAXIMIZE = 18,\n    MENU_SYSTEMMINIMIZE = 19,\n    MENU_SYSTEMRESTORE = 20,\n};\n\n#define MENUSTYLEPARTS MENUPARTS;\n\nenum BARBACKGROUNDSTATES {\n    MB_ACTIVE = 1,\n    MB_INACTIVE = 2,\n};\n\nenum BARITEMSTATES {\n    MBI_NORMAL = 1,\n    MBI_HOT = 2,\n    MBI_PUSHED = 3,\n    MBI_DISABLED = 4,\n    MBI_DISABLEDHOT = 5,\n    MBI_DISABLEDPUSHED = 6,\n};\n\nenum POPUPCHECKSTATES {\n    MC_CHECKMARKNORMAL = 1,\n    MC_CHECKMARKDISABLED = 2,\n    MC_BULLETNORMAL = 3,\n    MC_BULLETDISABLED = 4,\n};\n\nenum POPUPCHECKBACKGROUNDSTATES {\n    MCB_DISABLED = 1,\n    MCB_NORMAL = 2,\n    MCB_BITMAP = 3,\n};\n\nenum POPUPITEMSTATES {\n    MPI_NORMAL = 1,\n    MPI_HOT = 2,\n    MPI_DISABLED = 3,\n    MPI_DISABLEDHOT = 4,\n};\n\nenum POPUPSUBMENUSTATES {\n    MSM_NORMAL = 1,\n    MSM_DISABLED = 2,\n};\n\nenum SYSTEMCLOSESTATES {\n    MSYSC_NORMAL = 1,\n    MSYSC_DISABLED = 2,\n};\n\nenum SYSTEMMAXIMIZESTATES {\n    MSYSMX_NORMAL = 1,\n    MSYSMX_DISABLED = 2,\n};\n\nenum SYSTEMMINIMIZESTATES {\n    MSYSMN_NORMAL = 1,\n    MSYSMN_DISABLED = 2,\n};\n\nenum SYSTEMRESTORESTATES {\n    MSYSR_NORMAL = 1,\n    MSYSR_DISABLED = 2,\n};\n\n/* NAVIGATION class */\n#if defined(__GNUC__)\n#define VSCLASS_NAVIGATION (const WCHAR []){'N','A','V','I','G','A','T','I','O','N',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_NAVIGATION L\"NAVIGATION\"\n#else\nstatic const WCHAR VSCLASS_NAVIGATION [] = {'N','A','V','I','G','A','T','I','O','N',0};\n#endif\n\nenum NAVIGATIONPARTS {\n    NAV_BACKBUTTON = 1,\n    NAV_FORWARDBUTTON = 2,\n    NAV_MENUBUTTON = 3,\n};\n\nenum NAV_BACKBUTTONSTATES {\n    NAV_BB_NORMAL = 1,\n    NAV_BB_HOT = 2,\n    NAV_BB_PRESSED = 3,\n    NAV_BB_DISABLED = 4,\n};\n\nenum NAV_FORWARDBUTTONSTATES {\n    NAV_FB_NORMAL = 1,\n    NAV_FB_HOT = 2,\n    NAV_FB_PRESSED = 3,\n    NAV_FB_DISABLED = 4,\n};\n\nenum NAV_MENUBUTTONSTATES {\n    NAV_MB_NORMAL = 1,\n    NAV_MB_HOT = 2,\n    NAV_MB_PRESSED = 3,\n    NAV_MB_DISABLED = 4,\n};\n\n/* PROGRESSSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_PROGRESSSTYLE (const WCHAR []){'P','R','O','G','R','E','S','S','S','T','Y','L','E',0}\n#define VSCLASS_PROGRESS (const WCHAR []){'P','R','O','G','R','E','S','S',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_PROGRESSSTYLE L\"PROGRESSSTYLE\"\n#define VSCLASS_PROGRESS L\"PROGRESS\"\n#else\nstatic const WCHAR VSCLASS_PROGRESSSTYLE [] = {'P','R','O','G','R','E','S','S','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_PROGRESS [] = {'P','R','O','G','R','E','S','S',0};\n#endif\n\nenum PROGRESSPARTS {\n    PP_BAR = 1,\n    PP_BARVERT = 2,\n    PP_CHUNK = 3,\n    PP_CHUNKVERT = 4,\n    PP_FILL = 5,\n    PP_FILLVERT = 6,\n    PP_PULSEOVERLAY = 7,\n    PP_MOVEOVERLAY = 8,\n    PP_PULSEOVERLAYVERT = 9,\n    PP_MOVEOVERLAYVERT = 10,\n    PP_TRANSPARENTBAR = 11,\n    PP_TRANSPARENTBARVERT = 12,\n};\n\n#define PROGRESSSTYLEPARTS PROGRESSPARTS;\n\nenum TRANSPARENTBARSTATES {\n    PBBS_NORMAL = 1,\n    PBBS_PARTIAL = 2,\n};\n\nenum TRANSPARENTBARVERTSTATES {\n    PBBVS_NORMAL = 1,\n    PBBVS_PARTIAL = 2,\n};\n\nenum FILLSTATES {\n    PBFS_NORMAL = 1,\n    PBFS_ERROR = 2,\n    PBFS_PAUSED = 3,\n    PBFS_PARTIAL = 4,\n};\n\nenum FILLVERTSTATES {\n    PBFVS_NORMAL = 1,\n    PBFVS_ERROR = 2,\n    PBFVS_PAUSED = 3,\n    PBFVS_PARTIAL = 4,\n};\n\n/* REBARSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_REBARSTYLE (const WCHAR []){'R','E','B','A','R','S','T','Y','L','E',0}\n#define VSCLASS_REBAR (const WCHAR []){'R','E','B','A','R',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_REBARSTYLE L\"REBARSTYLE\"\n#define VSCLASS_REBAR L\"REBAR\"\n#else\nstatic const WCHAR VSCLASS_REBARSTYLE [] = {'R','E','B','A','R','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_REBAR [] = {'R','E','B','A','R',0};\n#endif\n\nenum REBARPARTS {\n    RP_GRIPPER = 1,\n    RP_GRIPPERVERT = 2,\n    RP_BAND = 3,\n    RP_CHEVRON = 4,\n    RP_CHEVRONVERT = 5,\n    RP_BACKGROUND = 6,\n    RP_SPLITTER = 7,\n    RP_SPLITTERVERT = 8,\n};\n\n#define REBARSTYLEPARTS REBARPARTS;\n\nenum CHEVRONSTATES {\n    CHEVS_NORMAL = 1,\n    CHEVS_HOT = 2,\n    CHEVS_PRESSED = 3,\n};\n\nenum CHEVRONVERTSTATES {\n    CHEVSV_NORMAL = 1,\n    CHEVSV_HOT = 2,\n    CHEVSV_PRESSED = 3,\n};\n\nenum SPLITTERSTATES {\n    SPLITS_NORMAL = 1,\n    SPLITS_HOT = 2,\n    SPLITS_PRESSED = 3,\n};\n\nenum SPLITTERVERTSTATES {\n    SPLITSV_NORMAL = 1,\n    SPLITSV_HOT = 2,\n    SPLITSV_PRESSED = 3,\n};\n\n/* SCROLLBARSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_SCROLLBARSTYLE (const WCHAR []){'S','C','R','O','L','L','B','A','R','S','T','Y','L','E',0}\n#define VSCLASS_SCROLLBAR (const WCHAR []){'S','C','R','O','L','L','B','A','R',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_SCROLLBARSTYLE L\"SCROLLBARSTYLE\"\n#define VSCLASS_SCROLLBAR L\"SCROLLBAR\"\n#else\nstatic const WCHAR VSCLASS_SCROLLBARSTYLE [] = {'S','C','R','O','L','L','B','A','R','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_SCROLLBAR [] = {'S','C','R','O','L','L','B','A','R',0};\n#endif\n\nenum SCROLLBARPARTS {\n    SBP_ARROWBTN = 1,\n    SBP_THUMBBTNHORZ = 2,\n    SBP_THUMBBTNVERT = 3,\n    SBP_LOWERTRACKHORZ = 4,\n    SBP_UPPERTRACKHORZ = 5,\n    SBP_LOWERTRACKVERT = 6,\n    SBP_UPPERTRACKVERT = 7,\n    SBP_GRIPPERHORZ = 8,\n    SBP_GRIPPERVERT = 9,\n    SBP_SIZEBOX = 10,\n};\n\n#define SCROLLBARSTYLEPARTS SCROLLBARPARTS;\n\nenum ARROWBTNSTATES {\n    ABS_UPNORMAL = 1,\n    ABS_UPHOT = 2,\n    ABS_UPPRESSED = 3,\n    ABS_UPDISABLED = 4,\n    ABS_DOWNNORMAL = 5,\n    ABS_DOWNHOT = 6,\n    ABS_DOWNPRESSED = 7,\n    ABS_DOWNDISABLED = 8,\n    ABS_LEFTNORMAL = 9,\n    ABS_LEFTHOT = 10,\n    ABS_LEFTPRESSED = 11,\n    ABS_LEFTDISABLED = 12,\n    ABS_RIGHTNORMAL = 13,\n    ABS_RIGHTHOT = 14,\n    ABS_RIGHTPRESSED = 15,\n    ABS_RIGHTDISABLED = 16,\n    ABS_UPHOVER = 17,\n    ABS_DOWNHOVER = 18,\n    ABS_LEFTHOVER = 19,\n    ABS_RIGHTHOVER = 20,\n};\n\nenum SCROLLBARSTYLESTATES {\n    SCRBS_NORMAL = 1,\n    SCRBS_HOT = 2,\n    SCRBS_PRESSED = 3,\n    SCRBS_DISABLED = 4,\n    SCRBS_HOVER = 5,\n};\n\nenum SIZEBOXSTATES {\n    SZB_RIGHTALIGN = 1,\n    SZB_LEFTALIGN = 2,\n    SZB_TOPRIGHTALIGN = 3,\n    SZB_TOPLEFTALIGN = 4,\n    SZB_HALFBOTTOMRIGHTALIGN = 5,\n    SZB_HALFBOTTOMLEFTALIGN = 6,\n    SZB_HALFTOPRIGHTALIGN = 7,\n    SZB_HALFTOPLEFTALIGN = 8,\n};\n\n/* SPINSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_SPINSTYLE (const WCHAR []){'S','P','I','N','S','T','Y','L','E',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_SPINSTYLE L\"SPINSTYLE\"\n#else\nstatic const WCHAR VSCLASS_SPINSTYLE [] = {'S','P','I','N','S','T','Y','L','E',0};\n#endif\n#if defined(__GNUC__)\n#define VSCLASS_SPIN (const WCHAR []){'S','P','I','N',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_SPIN L\"SPIN\"\n#else\nstatic const WCHAR VSCLASS_SPIN [] = {'S','P','I','N',0};\n#endif\n\nenum SPINPARTS {\n    SPNP_UP = 1,\n    SPNP_DOWN = 2,\n    SPNP_UPHORZ = 3,\n    SPNP_DOWNHORZ = 4,\n};\n\n#define SPINSTYLEPARTS SPINPARTS;\n\nenum UPSTATES {\n    UPS_NORMAL = 1,\n    UPS_HOT = 2,\n    UPS_PRESSED = 3,\n    UPS_DISABLED = 4,\n};\n\nenum DOWNSTATES {\n    DNS_NORMAL = 1,\n    DNS_HOT = 2,\n    DNS_PRESSED = 3,\n    DNS_DISABLED = 4,\n};\n\nenum UPHORZSTATES {\n    UPHZS_NORMAL = 1,\n    UPHZS_HOT = 2,\n    UPHZS_PRESSED = 3,\n    UPHZS_DISABLED = 4,\n};\n\nenum DOWNHORZSTATES {\n    DNHZS_NORMAL = 1,\n    DNHZS_HOT = 2,\n    DNHZS_PRESSED = 3,\n    DNHZS_DISABLED = 4,\n};\n\n/* STATUSSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_STATUSSTYLE (const WCHAR []){'S','T','A','T','U','S','S','T','Y','L','E',0}\n#define VSCLASS_STATUS (const WCHAR []){'S','T','A','T','U','S',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_STATUSSTYLE L\"STATUSSTYLE\"\n#define VSCLASS_STATUS L\"STATUS\"\n#else\nstatic const WCHAR VSCLASS_STATUSSTYLE [] = {'S','T','A','T','U','S','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_STATUS [] = {'S','T','A','T','U','S',0};\n#endif\n\nenum STATUSPARTS {\n    SP_PANE = 1,\n    SP_GRIPPERPANE = 2,\n    SP_GRIPPER = 3,\n};\n\n#define STATUSSTYLEPARTS STATUSPARTS;\n\n/* TABSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_TABSTYLE (const WCHAR []){'T','A','B','S','T','Y','L','E',0}\n#define VSCLASS_TAB (const WCHAR []){'T','A','B',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_TABSTYLE L\"TABSTYLE\"\n#define VSCLASS_TAB L\"TAB\"\n#else\nstatic const WCHAR VSCLASS_TABSTYLE [] = {'T','A','B','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_TAB [] = {'T','A','B',0};\n#endif\n\nenum TABPARTS {\n    TABP_TABITEM = 1,\n    TABP_TABITEMLEFTEDGE = 2,\n    TABP_TABITEMRIGHTEDGE = 3,\n    TABP_TABITEMBOTHEDGE = 4,\n    TABP_TOPTABITEM = 5,\n    TABP_TOPTABITEMLEFTEDGE = 6,\n    TABP_TOPTABITEMRIGHTEDGE = 7,\n    TABP_TOPTABITEMBOTHEDGE = 8,\n    TABP_PANE = 9,\n    TABP_BODY = 10,\n    TABP_AEROWIZARDBODY = 11,\n};\n\n#define TABSTYLEPARTS TABPARTS;\n\nenum TABITEMSTATES {\n    TIS_NORMAL = 1,\n    TIS_HOT = 2,\n    TIS_SELECTED = 3,\n    TIS_DISABLED = 4,\n    TIS_FOCUSED = 5,\n};\n\nenum TABITEMLEFTEDGESTATES {\n    TILES_NORMAL = 1,\n    TILES_HOT = 2,\n    TILES_SELECTED = 3,\n    TILES_DISABLED = 4,\n    TILES_FOCUSED = 5,\n};\n\nenum TABITEMRIGHTEDGESTATES {\n    TIRES_NORMAL = 1,\n    TIRES_HOT = 2,\n    TIRES_SELECTED = 3,\n    TIRES_DISABLED = 4,\n    TIRES_FOCUSED = 5,\n};\n\nenum TABITEMBOTHEDGESTATES {\n    TIBES_NORMAL = 1,\n    TIBES_HOT = 2,\n    TIBES_SELECTED = 3,\n    TIBES_DISABLED = 4,\n    TIBES_FOCUSED = 5,\n};\n\nenum TOPTABITEMSTATES {\n    TTIS_NORMAL = 1,\n    TTIS_HOT = 2,\n    TTIS_SELECTED = 3,\n    TTIS_DISABLED = 4,\n    TTIS_FOCUSED = 5,\n};\n\nenum TOPTABITEMLEFTEDGESTATES {\n    TTILES_NORMAL = 1,\n    TTILES_HOT = 2,\n    TTILES_SELECTED = 3,\n    TTILES_DISABLED = 4,\n    TTILES_FOCUSED = 5,\n};\n\nenum TOPTABITEMRIGHTEDGESTATES {\n    TTIRES_NORMAL = 1,\n    TTIRES_HOT = 2,\n    TTIRES_SELECTED = 3,\n    TTIRES_DISABLED = 4,\n    TTIRES_FOCUSED = 5,\n};\n\nenum TOPTABITEMBOTHEDGESTATES {\n    TTIBES_NORMAL = 1,\n    TTIBES_HOT = 2,\n    TTIBES_SELECTED = 3,\n    TTIBES_DISABLED = 4,\n    TTIBES_FOCUSED = 5,\n};\n\n/* TASKDIALOGSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_TASKDIALOGSTYLE (const WCHAR []){'T','A','S','K','D','I','A','L','O','G','S','T','Y','L','E',0}\n#define VSCLASS_TASKDIALOG (const WCHAR []){'T','A','S','K','D','I','A','L','O','G',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_TASKDIALOGSTYLE L\"TASKDIALOGSTYLE\"\n#define VSCLASS_TASKDIALOG L\"TASKDIALOG\"\n#else\nstatic const WCHAR VSCLASS_TASKDIALOGSTYLE[] = {'T','A','S','K','D','I','A','L','O','G','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_TASKDIALOG [] = {'T','A','S','K','D','I','A','L','O','G',0};\n#endif\n\nenum TASKDIALOGPARTS {\n    TDLG_PRIMARYPANEL = 1,\n    TDLG_MAININSTRUCTIONPANE = 2,\n    TDLG_MAINICON = 3,\n    TDLG_CONTENTPANE = 4,\n    TDLG_CONTENTICON = 5,\n    TDLG_EXPANDEDCONTENT = 6,\n    TDLG_COMMANDLINKPANE = 7,\n    TDLG_SECONDARYPANEL = 8,\n    TDLG_CONTROLPANE = 9,\n    TDLG_BUTTONSECTION = 10,\n    TDLG_BUTTONWRAPPER = 11,\n    TDLG_EXPANDOTEXT = 12,\n    TDLG_EXPANDOBUTTON = 13,\n    TDLG_VERIFICATIONTEXT = 14,\n    TDLG_FOOTNOTEPANE = 15,\n    TDLG_FOOTNOTEAREA = 16,\n    TDLG_FOOTNOTESEPARATOR = 17,\n    TDLG_EXPANDEDFOOTERAREA = 18,\n    TDLG_PROGRESSBAR = 19,\n    TDLG_IMAGEALIGNMENT = 20,\n    TDLG_RADIOBUTTONPANE = 21,\n};\n\n#define TASKDIALOGSTYLEPARTS TASKDIALOGPARTS;\n\nenum CONTENTPANESTATES {\n    TDLGCPS_STANDALONE = 1,\n};\n\nenum EXPANDOBUTTONSTATES {\n    TDLGEBS_NORMAL = 1,\n    TDLGEBS_HOVER = 2,\n    TDLGEBS_PRESSED = 3,\n    TDLGEBS_EXPANDEDNORMAL = 4,\n    TDLGEBS_EXPANDEDHOVER = 5,\n    TDLGEBS_EXPANDEDPRESSED = 6,\n};\n\n/* TEXTSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_TEXTSTYLE (const WCHAR []){'T','E','X','T','S','T','Y','L','E',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_TEXTSTYLE L\"TEXTSTYLE\"\n#else\nstatic const WCHAR VSCLASS_TEXTSTYLE [] = {'T','E','X','T','S','T','Y','L','E',0};\n#endif\n\nenum TEXTSTYLEPARTS {\n    TEXT_MAININSTRUCTION = 1,\n    TEXT_INSTRUCTION = 2,\n    TEXT_BODYTITLE = 3,\n    TEXT_BODYTEXT = 4,\n    TEXT_SECONDARYTEXT = 5,\n    TEXT_HYPERLINKTEXT = 6,\n    TEXT_EXPANDED = 7,\n    TEXT_LABEL = 8,\n    TEXT_CONTROLLABEL = 9,\n};\n\nenum HYPERLINKTEXTSTATES {\n    TS_HYPERLINK_NORMAL = 1,\n    TS_HYPERLINK_HOT = 2,\n    TS_HYPERLINK_PRESSED = 3,\n    TS_HYPERLINK_DISABLED = 4,\n};\n\nenum CONTROLLABELSTATES {\n    TS_CONTROLLABEL_NORMAL = 1,\n    TS_CONTROLLABEL_DISABLED = 2,\n};\n\n/* TOOLBARSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_TOOLBARSTYLE (const WCHAR []){'T','O','O','L','B','A','R','S','T','Y','L','E',0}\n#define VSCLASS_TOOLBAR (const WCHAR []){'T','O','O','L','B','A','R',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_TOOLBARSTYLE L\"TOOLBARSTYLE\"\n#define VSCLASS_TOOLBAR L\"TOOLBAR\"\n#else\nstatic const WCHAR VSCLASS_TOOLBARSTYLE [] = {'T','O','O','L','B','A','R','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_TOOLBAR[] = {'T','O','O','L','B','A','R',0};\n#endif\n\nenum TOOLBARPARTS {\n    TP_BUTTON = 1,\n    TP_DROPDOWNBUTTON = 2,\n    TP_SPLITBUTTON = 3,\n    TP_SPLITBUTTONDROPDOWN = 4,\n    TP_SEPARATOR = 5,\n    TP_SEPARATORVERT = 6,\n};\n\n#define TOOLBARSTYLEPARTS TOOLBARPARTS;\n\nenum TOOLBARSTYLESTATES {\n    TS_NORMAL = 1,\n    TS_HOT = 2,\n    TS_PRESSED = 3,\n    TS_DISABLED = 4,\n    TS_CHECKED = 5,\n    TS_HOTCHECKED = 6,\n    TS_NEARHOT = 7,\n    TS_OTHERSIDEHOT = 8,\n};\n\n/* TOOLTIPSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_TOOLTIPSTYLE (const WCHAR []){'T','O','O','L','T','I','P','S','T','Y','L','E',0}\n#define VSCLASS_TOOLTIP (const WCHAR []){'T','O','O','L','T','I','P',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_TOOLTIPSTYLE L\"TOOLTIPSTYLE\"\n#define VSCLASS_TOOLTIP L\"TOOLTIP\"\n#else\nstatic const WCHAR VSCLASS_TOOLTIPSTYLE [] = {'T','O','O','L','T','I','P','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_TOOLTIP[] = {'T','O','O','L','T','I','P',0};\n#endif\n\nenum TOOLTIPPARTS {\n    TTP_STANDARD = 1,\n    TTP_STANDARDTITLE = 2,\n    TTP_BALLOON = 3,\n    TTP_BALLOONTITLE = 4,\n    TTP_CLOSE = 5,\n    TTP_BALLOONSTEM = 6,\n};\n\n#define TOOLTIPSTYLEPARTS TOOLTIPPARTS;\n\nenum CLOSESTATES {\n    TTCS_NORMAL = 1,\n    TTCS_HOT = 2,\n    TTCS_PRESSED = 3,\n};\n\nenum STANDARDSTATES {\n    TTSS_NORMAL = 1,\n    TTSS_LINK = 2,\n};\n\nenum BALLOONSTATES {\n    TTBS_NORMAL = 1,\n    TTBS_LINK = 2,\n};\n\nenum BALLOONSTEMSTATES {\n    TTBSS_POINTINGUPLEFTWALL = 1,\n    TTBSS_POINTINGUPCENTERED = 2,\n    TTBSS_POINTINGUPRIGHTWALL = 3,\n    TTBSS_POINTINGDOWNRIGHTWALL = 4,\n    TTBSS_POINTINGDOWNCENTERED = 5,\n    TTBSS_POINTINGDOWNLEFTWALL = 6,\n};\n\n/* TRACKBARSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_TRACKBARSTYLE (const WCHAR []){'T','R','A','C','K','B','A','R','S','T','Y','L','E',0}\n#define VSCLASS_TRACKBAR (const WCHAR []){'T','R','A','C','K','B','A','R',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_TRACKBARSTYLE L\"TRACKBARSTYLE\"\n#define VSCLASS_TRACKBAR L\"TRACKBAR\"\n#else\nstatic const WCHAR VSCLASS_TRACKBARSTYLE [] = {'T','R','A','C','K','B','A','R','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_TRACKBAR [] = {'T','R','A','C','K','B','A','R',0};\n#endif\n\nenum TRACKBARPARTS {\n    TKP_TRACK = 1,\n    TKP_TRACKVERT = 2,\n    TKP_THUMB = 3,\n    TKP_THUMBBOTTOM = 4,\n    TKP_THUMBTOP = 5,\n    TKP_THUMBVERT = 6,\n    TKP_THUMBLEFT = 7,\n    TKP_THUMBRIGHT = 8,\n    TKP_TICS = 9,\n    TKP_TICSVERT = 10,\n};\n\n#define TRACKBARSTYLEPARTS TRACKBARPARTS;\n\nenum TRACKBARSTYLESTATES {\n    TKS_NORMAL = 1,\n};\n\nenum TRACKSTATES {\n    TRS_NORMAL = 1,\n};\n\nenum TRACKVERTSTATES {\n    TRVS_NORMAL = 1,\n};\n\nenum THUMBSTATES {\n    TUS_NORMAL = 1,\n    TUS_HOT = 2,\n    TUS_PRESSED = 3,\n    TUS_FOCUSED = 4,\n    TUS_DISABLED = 5,\n};\n\nenum THUMBBOTTOMSTATES {\n    TUBS_NORMAL = 1,\n    TUBS_HOT = 2,\n    TUBS_PRESSED = 3,\n    TUBS_FOCUSED = 4,\n    TUBS_DISABLED = 5,\n};\n\nenum THUMBTOPSTATES {\n    TUTS_NORMAL = 1,\n    TUTS_HOT = 2,\n    TUTS_PRESSED = 3,\n    TUTS_FOCUSED = 4,\n    TUTS_DISABLED = 5,\n};\n\nenum THUMBVERTSTATES {\n    TUVS_NORMAL = 1,\n    TUVS_HOT = 2,\n    TUVS_PRESSED = 3,\n    TUVS_FOCUSED = 4,\n    TUVS_DISABLED = 5,\n};\n\nenum THUMBLEFTSTATES {\n    TUVLS_NORMAL = 1,\n    TUVLS_HOT = 2,\n    TUVLS_PRESSED = 3,\n    TUVLS_FOCUSED = 4,\n    TUVLS_DISABLED = 5,\n};\n\nenum THUMBRIGHTSTATES {\n    TUVRS_NORMAL = 1,\n    TUVRS_HOT = 2,\n    TUVRS_PRESSED = 3,\n    TUVRS_FOCUSED = 4,\n    TUVRS_DISABLED = 5,\n};\n\nenum TICSSTATES {\n    TSS_NORMAL = 1,\n};\n\nenum TICSVERTSTATES {\n    TSVS_NORMAL = 1,\n};\n\n/* TREEVIEWSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_TREEVIEWSTYLE (const WCHAR []){'T','R','E','E','V','I','E','W','S','T','Y','L','E',0}\n#define VSCLASS_TREEVIEW (const WCHAR []){'T','R','E','E','V','I','E','W',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_TREEVIEWSTYLE L\"TREEVIEWSTYLE\"\n#define VSCLASS_TREEVIEW L\"TREEVIEW\"\n#else\nstatic const WCHAR VSCLASS_TREEVIEWSTYLE [] = {'T','R','E','E','V','I','E','W','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_TREEVIEW [] = {'T','R','E','E','V','I','E','W',0};\n#endif\n\nenum TREEVIEWPARTS {\n    TVP_TREEITEM = 1,\n    TVP_GLYPH = 2,\n    TVP_BRANCH = 3,\n    TVP_HOTGLYPH = 4,\n};\n\n#define TREEVIEWSTYLEPARTS TREEVIEWPARTS;\n\nenum TREEITEMSTATES {\n    TREIS_NORMAL = 1,\n    TREIS_HOT = 2,\n    TREIS_SELECTED = 3,\n    TREIS_DISABLED = 4,\n    TREIS_SELECTEDNOTFOCUS = 5,\n    TREIS_HOTSELECTED = 6,\n};\n\nenum GLYPHSTATES {\n    GLPS_CLOSED = 1,\n    GLPS_OPENED = 2,\n};\n\nenum HOTGLYPHSTATES {\n    HGLPS_CLOSED = 1,\n    HGLPS_OPENED = 2,\n};\n\n/* WINDOWSTYLE class */\n#if defined(__GNUC__)\n#define VSCLASS_WINDOWSTYLE (const WCHAR []){'W','I','N','D','O','W','S','T','Y','L','E',0}\n#define VSCLASS_WINDOW (const WCHAR []){'W','I','N','D','O','W',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_WINDOWSTYLE L\"WINDOWSTYLE\"\n#define VSCLASS_WINDOW L\"WINDOW\"\n#else\nstatic const WCHAR VSCLASS_WINDOWSTYLE [] = {'W','I','N','D','O','W','S','T','Y','L','E',0};\nstatic const WCHAR VSCLASS_WINDOW [] = {'W','I','N','D','O','W',0};\n#endif\n\nenum WINDOWPARTS {\n    WP_CAPTION = 1,\n    WP_SMALLCAPTION = 2,\n    WP_MINCAPTION = 3,\n    WP_SMALLMINCAPTION = 4,\n    WP_MAXCAPTION = 5,\n    WP_SMALLMAXCAPTION = 6,\n    WP_FRAMELEFT = 7,\n    WP_FRAMERIGHT = 8,\n    WP_FRAMEBOTTOM = 9,\n    WP_SMALLFRAMELEFT = 10,\n    WP_SMALLFRAMERIGHT = 11,\n    WP_SMALLFRAMEBOTTOM = 12,\n    WP_SYSBUTTON = 13,\n    WP_MDISYSBUTTON = 14,\n    WP_MINBUTTON = 15,\n    WP_MDIMINBUTTON = 16,\n    WP_MAXBUTTON = 17,\n    WP_CLOSEBUTTON = 18,\n    WP_SMALLCLOSEBUTTON = 19,\n    WP_MDICLOSEBUTTON = 20,\n    WP_RESTOREBUTTON = 21,\n    WP_MDIRESTOREBUTTON = 22,\n    WP_HELPBUTTON = 23,\n    WP_MDIHELPBUTTON = 24,\n    WP_HORZSCROLL = 25,\n    WP_HORZTHUMB = 26,\n    WP_VERTSCROLL = 27,\n    WP_VERTTHUMB = 28,\n    WP_DIALOG = 29,\n    WP_CAPTIONSIZINGTEMPLATE = 30,\n    WP_SMALLCAPTIONSIZINGTEMPLATE = 31,\n    WP_FRAMELEFTSIZINGTEMPLATE = 32,\n    WP_SMALLFRAMELEFTSIZINGTEMPLATE = 33,\n    WP_FRAMERIGHTSIZINGTEMPLATE = 34,\n    WP_SMALLFRAMERIGHTSIZINGTEMPLATE = 35,\n    WP_FRAMEBOTTOMSIZINGTEMPLATE = 36,\n    WP_SMALLFRAMEBOTTOMSIZINGTEMPLATE = 37,\n    WP_FRAME = 38,\n};\n\n#define WINDOWSTYLEPARTS WINDOWPARTS;\n\nenum FRAMESTATES {\n    FS_ACTIVE = 1,\n    FS_INACTIVE = 2,\n};\n\nenum CAPTIONSTATES {\n    CS_ACTIVE = 1,\n    CS_INACTIVE = 2,\n    CS_DISABLED = 3,\n};\n\nenum MAXCAPTIONSTATES {\n    MXCS_ACTIVE = 1,\n    MXCS_INACTIVE = 2,\n    MXCS_DISABLED = 3,\n};\n\nenum MINCAPTIONSTATES {\n    MNCS_ACTIVE = 1,\n    MNCS_INACTIVE = 2,\n    MNCS_DISABLED = 3,\n};\n\nenum HORZSCROLLSTATES {\n    HSS_NORMAL = 1,\n    HSS_HOT = 2,\n    HSS_PUSHED = 3,\n    HSS_DISABLED = 4,\n};\n\nenum HORZTHUMBSTATES {\n    HTS_NORMAL = 1,\n    HTS_HOT = 2,\n    HTS_PUSHED = 3,\n    HTS_DISABLED = 4,\n};\n\nenum VERTSCROLLSTATES {\n    VSS_NORMAL = 1,\n    VSS_HOT = 2,\n    VSS_PUSHED = 3,\n    VSS_DISABLED = 4,\n};\n\nenum VERTTHUMBSTATES {\n    VTS_NORMAL = 1,\n    VTS_HOT = 2,\n    VTS_PUSHED = 3,\n    VTS_DISABLED = 4,\n};\n\nenum SYSBUTTONSTATES {\n    SBS_NORMAL = 1,\n    SBS_HOT = 2,\n    SBS_PUSHED = 3,\n    SBS_DISABLED = 4,\n};\n\nenum MINBUTTONSTATES {\n    MINBS_NORMAL = 1,\n    MINBS_HOT = 2,\n    MINBS_PUSHED = 3,\n    MINBS_DISABLED = 4,\n};\n\nenum RESTOREBUTTONSTATES {\n    RBS_NORMAL = 1,\n    RBS_HOT = 2,\n    RBS_PUSHED = 3,\n    RBS_DISABLED = 4,\n};\n\nenum HELPBUTTONSTATES {\n    HBS_NORMAL = 1,\n    HBS_HOT = 2,\n    HBS_PUSHED = 3,\n    HBS_DISABLED = 4,\n};\n\nenum CLOSEBUTTONSTATES {\n    CBS_NORMAL = 1,\n    CBS_HOT = 2,\n    CBS_PUSHED = 3,\n    CBS_DISABLED = 4,\n};\n\n#endif /* __VSSTYLE_H__ */\n"
  },
  {
    "path": "wine/windows/vssym32.h",
    "content": "/*\n * Copyright (C) 2011 Piotr Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __VSSYM32_H__\n#define __VSSYM32_H__\n\n#include \"vsstyle.h\"\n\n\nenum BGTYPE {\n    BT_IMAGEFILE = 0,\n    BT_BORDERFILL = 1,\n    BT_NONE = 2,\n};\n\nenum IMAGELAYOUT {\n    IL_VERTICAL = 0,\n    IL_HORIZONTAL = 1,\n};\n\nenum BORDERTYPE {\n    BT_RECT = 0,\n    BT_ROUNDRECT = 1,\n    BT_ELLIPSE = 2,\n};\n\nenum FILLTYPE {\n    FT_SOLID = 0,\n    FT_VERTGRADIENT = 1,\n    FT_HORZGRADIENT = 2,\n    FT_RADIALGRADIENT = 3,\n    FT_TILEIMAGE = 4,\n};\n\nenum SIZINGTYPE {\n    ST_TRUESIZE = 0,\n    ST_STRETCH = 1,\n    ST_TILE = 2,\n};\n\nenum HALIGN {\n    HA_LEFT = 0,\n    HA_CENTER = 1,\n    HA_RIGHT = 2,\n};\n\nenum CONTENTALIGNMENT {\n    CA_LEFT = 0,\n    CA_CENTER = 1,\n    CA_RIGHT = 2,\n};\n\nenum VALIGN {\n    VA_TOP = 0,\n    VA_CENTER = 1,\n    VA_BOTTOM = 2,\n};\n\nenum OFFSETTYPE {\n    OT_TOPLEFT = 0,\n    OT_TOPRIGHT = 1,\n    OT_TOPMIDDLE = 2,\n    OT_BOTTOMLEFT = 3,\n    OT_BOTTOMRIGHT = 4,\n    OT_BOTTOMMIDDLE = 5,\n    OT_MIDDLELEFT = 6,\n    OT_MIDDLERIGHT = 7,\n    OT_LEFTOFCAPTION = 8,\n    OT_RIGHTOFCAPTION = 9,\n    OT_LEFTOFLASTBUTTON = 10,\n    OT_RIGHTOFLASTBUTTON = 11,\n    OT_ABOVELASTBUTTON = 12,\n    OT_BELOWLASTBUTTON = 13,\n};\n\nenum ICONEFFECT {\n    ICE_NONE = 0,\n    ICE_GLOW = 1,\n    ICE_SHADOW = 2,\n    ICE_PULSE = 3,\n    ICE_ALPHA = 4,\n};\n\nenum TEXTSHADOWTYPE {\n    TST_NONE = 0,\n    TST_SINGLE = 1,\n    TST_CONTINUOUS = 2,\n};\n\nenum GLYPHTYPE {\n    GT_NONE = 0,\n    GT_IMAGEGLYPH = 1,\n    GT_FONTGLYPH = 2,\n};\n\nenum IMAGESELECTTYPE {\n    IST_NONE = 0,\n    IST_SIZE = 1,\n    IST_DPI = 2,\n};\n\nenum TRUESIZESCALINGTYPE {\n    TSST_NONE = 0,\n    TSST_SIZE = 1,\n    TSST_DPI = 2,\n};\n\nenum GLYPHFONTSIZINGTYPE {\n    GFST_NONE = 0,\n    GFST_SIZE = 1,\n    GFST_DPI = 2,\n};\n\n#define TMT_RESERVEDLOW 0\n#define TMT_RESERVEDHIGH 7999\n\n#define TMT_DIBDATA 2\n#define TMT_GLYPHDIBDATA 8\n#define TMT_ENUM 200\n#define TMT_STRING 201\n#define TMT_INT 202\n#define TMT_BOOL 203\n#define TMT_COLOR 204\n#define TMT_MARGINS 205\n#define TMT_FILENAME 206\n#define TMT_SIZE 207\n#define TMT_POSITION 208\n#define TMT_RECT 209\n#define TMT_FONT 210\n#define TMT_INTLIST 211\n#define TMT_HBITMAP 212\n#define TMT_DISKSTREAM 213\n#define TMT_STREAM 214\n#define TMT_BITMAPREF 215\n#define TMT_COLORSCHEMES 401\n#define TMT_SIZES 402\n#define TMT_CHARSET 403\n#define TMT_NAME 600\n#define TMT_DISPLAYNAME 601\n#define TMT_TOOLTIP 602\n#define TMT_COMPANY 603\n#define TMT_AUTHOR 604\n#define TMT_COPYRIGHT 605\n#define TMT_URL 606\n#define TMT_VERSION 607\n#define TMT_DESCRIPTION 608\n#define TMT_FIRST_RCSTRING_NAME TMT_DISPLAYNAME\n#define TMT_LAST_RCSTRING_NAME TMT_DESCRIPTION\n#define TMT_CAPTIONFONT 801\n#define TMT_SMALLCAPTIONFONT 802\n#define TMT_MENUFONT 803\n#define TMT_STATUSFONT 804\n#define TMT_MSGBOXFONT 805\n#define TMT_ICONTITLEFONT 806\n#define TMT_HEADING1FONT 807\n#define TMT_HEADING2FONT 808\n#define TMT_BODYFONT 809\n#define TMT_FIRSTFONT TMT_CAPTIONFONT\n#define TMT_LASTFONT TMT_BODYFONT\n#define TMT_FLATMENUS 1001\n#define TMT_FIRSTBOOL TMT_FLATMENUS\n#define TMT_LASTBOOL TMT_FLATMENUS\n#define TMT_SIZINGBORDERWIDTH 1201\n#define TMT_SCROLLBARWIDTH 1202\n#define TMT_SCROLLBARHEIGHT 1203\n#define TMT_CAPTIONBARWIDTH 1204\n#define TMT_CAPTIONBARHEIGHT 1205\n#define TMT_SMCAPTIONBARWIDTH 1206\n#define TMT_SMCAPTIONBARHEIGHT 1207\n#define TMT_MENUBARWIDTH 1208\n#define TMT_MENUBARHEIGHT 1209\n#define TMT_PADDEDBORDERWIDTH 1210\n#define TMT_FIRSTSIZE TMT_SIZINGBORDERWIDTH\n#define TMT_LASTSIZE TMT_PADDEDBORDERWIDTH\n#define TMT_MINCOLORDEPTH 1301\n#define TMT_FIRSTINT TMT_MINCOLORDEPTH\n#define TMT_LASTINT TMT_MINCOLORDEPTH\n#define TMT_CSSNAME 1401\n#define TMT_XMLNAME 1402\n#define TMT_LASTUPDATED 1403\n#define TMT_ALIAS 1404\n#define TMT_FIRSTSTRING TMT_CSSNAME\n#define TMT_LASTSTRING TMT_ALIAS\n#define TMT_SCROLLBAR 1601\n#define TMT_BACKGROUND 1602\n#define TMT_ACTIVECAPTION 1603\n#define TMT_INACTIVECAPTION 1604\n#define TMT_MENU 1605\n#define TMT_WINDOW 1606\n#define TMT_WINDOWFRAME 1607\n#define TMT_MENUTEXT 1608\n#define TMT_WINDOWTEXT 1609\n#define TMT_CAPTIONTEXT 1610\n#define TMT_ACTIVEBORDER 1611\n#define TMT_INACTIVEBORDER 1612\n#define TMT_APPWORKSPACE 1613\n#define TMT_HIGHLIGHT 1614\n#define TMT_HIGHLIGHTTEXT 1615\n#define TMT_BTNFACE 1616\n#define TMT_BTNSHADOW 1617\n#define TMT_GRAYTEXT 1618\n#define TMT_BTNTEXT 1619\n#define TMT_INACTIVECAPTIONTEXT 1620\n#define TMT_BTNHIGHLIGHT 1621\n#define TMT_DKSHADOW3D 1622\n#define TMT_LIGHT3D 1623\n#define TMT_INFOTEXT 1624\n#define TMT_INFOBK 1625\n#define TMT_BUTTONALTERNATEFACE 1626\n#define TMT_HOTTRACKING 1627\n#define TMT_GRADIENTACTIVECAPTION 1628\n#define TMT_GRADIENTINACTIVECAPTION 1629\n#define TMT_MENUHILIGHT 1630\n#define TMT_MENUBAR 1631\n#define TMT_FIRSTCOLOR TMT_SCROLLBAR\n#define TMT_LASTCOLOR TMT_MENUBAR\n#define TMT_FROMHUE1 1801\n#define TMT_FROMHUE2 1802\n#define TMT_FROMHUE3 1803\n#define TMT_FROMHUE4 1804\n#define TMT_FROMHUE5 1805\n#define TMT_TOHUE1 1806\n#define TMT_TOHUE2 1807\n#define TMT_TOHUE3 1808\n#define TMT_TOHUE4 1809\n#define TMT_TOHUE5 1810\n#define TMT_FROMCOLOR1 2001\n#define TMT_FROMCOLOR2 2002\n#define TMT_FROMCOLOR3 2003\n#define TMT_FROMCOLOR4 2004\n#define TMT_FROMCOLOR5 2005\n#define TMT_TOCOLOR1 2006\n#define TMT_TOCOLOR2 2007\n#define TMT_TOCOLOR3 2008\n#define TMT_TOCOLOR4 2009\n#define TMT_TOCOLOR5 2010\n#define TMT_TRANSPARENT 2201\n#define TMT_AUTOSIZE 2202\n#define TMT_BORDERONLY 2203\n#define TMT_COMPOSITED 2204\n#define TMT_BGFILL 2205\n#define TMT_GLYPHTRANSPARENT 2206\n#define TMT_GLYPHONLY 2207\n#define TMT_ALWAYSSHOWSIZINGBAR 2208\n#define TMT_MIRRORIMAGE 2209\n#define TMT_UNIFORMSIZING 2210\n#define TMT_INTEGRALSIZING 2211\n#define TMT_SOURCEGROW 2212\n#define TMT_SOURCESHRINK 2213\n#define TMT_DRAWBORDERS 2214\n#define TMT_NOETCHEDEFFECT 2215\n#define TMT_TEXTAPPLYOVERLAY 2216\n#define TMT_TEXTGLOW 2217\n#define TMT_TEXTITALIC 2218\n#define TMT_COMPOSITEDOPAQUE 2219\n#define TMT_LOCALIZEDMIRRORIMAGE 2220\n#define TMT_IMAGECOUNT 2401\n#define TMT_ALPHALEVEL 2402\n#define TMT_BORDERSIZE 2403\n#define TMT_ROUNDCORNERWIDTH 2404\n#define TMT_ROUNDCORNERHEIGHT 2405\n#define TMT_GRADIENTRATIO1 2406\n#define TMT_GRADIENTRATIO2 2407\n#define TMT_GRADIENTRATIO3 2408\n#define TMT_GRADIENTRATIO4 2409\n#define TMT_GRADIENTRATIO5 2410\n#define TMT_PROGRESSCHUNKSIZE 2411\n#define TMT_PROGRESSSPACESIZE 2412\n#define TMT_SATURATION 2413\n#define TMT_TEXTBORDERSIZE 2414\n#define TMT_ALPHATHRESHOLD 2415\n#define TMT_WIDTH 2416\n#define TMT_HEIGHT 2417\n#define TMT_GLYPHINDEX 2418\n#define TMT_TRUESIZESTRETCHMARK 2419\n#define TMT_MINDPI1 2420\n#define TMT_MINDPI2 2421\n#define TMT_MINDPI3 2422\n#define TMT_MINDPI4 2423\n#define TMT_MINDPI5 2424\n#define TMT_TEXTGLOWSIZE 2425\n#define TMT_FRAMESPERSECOND 2426\n#define TMT_PIXELSPERFRAME 2427\n#define TMT_ANIMATIONDELAY 2428\n#define TMT_GLOWINTENSITY 2429\n#define TMT_OPACITY 2430\n#define TMT_COLORIZATIONCOLOR 2431\n#define TMT_COLORIZATIONOPACITY 2432\n#define TMT_GLYPHFONT 2601\n#define TMT_IMAGEFILE 3001\n#define TMT_IMAGEFILE1 3002\n#define TMT_IMAGEFILE2 3003\n#define TMT_IMAGEFILE3 3004\n#define TMT_IMAGEFILE4 3005\n#define TMT_IMAGEFILE5 3006\n#define TMT_GLYPHIMAGEFILE 3008\n#define TMT_TEXT 3201\n#define TMT_CLASSICVALUE 3202\n#define TMT_OFFSET 3401\n#define TMT_TEXTSHADOWOFFSET 3402\n#define TMT_MINSIZE 3403\n#define TMT_MINSIZE1 3404\n#define TMT_MINSIZE2 3405\n#define TMT_MINSIZE3 3406\n#define TMT_MINSIZE4 3407\n#define TMT_MINSIZE5 3408\n#define TMT_NORMALSIZE 3409\n#define TMT_SIZINGMARGINS 3601\n#define TMT_CONTENTMARGINS 3602\n#define TMT_CAPTIONMARGINS 3603\n#define TMT_BORDERCOLOR 3801\n#define TMT_FILLCOLOR 3802\n#define TMT_TEXTCOLOR 3803\n#define TMT_EDGELIGHTCOLOR 3804\n#define TMT_EDGEHIGHLIGHTCOLOR 3805\n#define TMT_EDGESHADOWCOLOR 3806\n#define TMT_EDGEDKSHADOWCOLOR 3807\n#define TMT_EDGEFILLCOLOR 3808\n#define TMT_TRANSPARENTCOLOR 3809\n#define TMT_GRADIENTCOLOR1 3810\n#define TMT_GRADIENTCOLOR2 3811\n#define TMT_GRADIENTCOLOR3 3812\n#define TMT_GRADIENTCOLOR4 3813\n#define TMT_GRADIENTCOLOR5 3814\n#define TMT_SHADOWCOLOR 3815\n#define TMT_GLOWCOLOR 3816\n#define TMT_TEXTBORDERCOLOR 3817\n#define TMT_TEXTSHADOWCOLOR 3818\n#define TMT_GLYPHTEXTCOLOR 3819\n#define TMT_GLYPHTRANSPARENTCOLOR 3820\n#define TMT_FILLCOLORHINT 3821\n#define TMT_BORDERCOLORHINT 3822\n#define TMT_ACCENTCOLORHINT 3823\n#define TMT_TEXTCOLORHINT 3824\n#define TMT_HEADING1TEXTCOLOR 3825\n#define TMT_HEADING2TEXTCOLOR 3826\n#define TMT_BODYTEXTCOLOR 3827\n#define TMT_BGTYPE 4001\n#define TMT_BORDERTYPE 4002\n#define TMT_FILLTYPE 4003\n#define TMT_SIZINGTYPE 4004\n#define TMT_HALIGN 4005\n#define TMT_CONTENTALIGNMENT 4006\n#define TMT_VALIGN 4007\n#define TMT_OFFSETTYPE 4008\n#define TMT_ICONEFFECT 4009\n#define TMT_TEXTSHADOWTYPE 4010\n#define TMT_IMAGELAYOUT 4011\n#define TMT_GLYPHTYPE 4012\n#define TMT_IMAGESELECTTYPE 4013\n#define TMT_GLYPHFONTSIZINGTYPE 4014\n#define TMT_TRUESIZESCALINGTYPE 4015\n#define TMT_USERPICTURE 5001\n#define TMT_DEFAULTPANESIZE 5002\n#define TMT_BLENDCOLOR 5003\n#define TMT_CUSTOMSPLITRECT 5004\n#define TMT_ANIMATIONBUTTONRECT 5005\n#define TMT_ANIMATIONDURATION 5006\n#define TMT_TRANSITIONDURATIONS 6000\n#define TMT_SCALEDBACKGROUND 7001\n#define TMT_ATLASIMAGE 8000\n#define TMT_ATLASINPUTIMAGE 8001\n#define TMT_ATLASRECT 8002\n\n/* LINK class */\n#if defined(__GNUC__)\n#define VSCLASS_LINK (const WCHAR []){'L','I','N','K',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_LINK L\"LINK\"\n#else\nstatic const WCHAR VSCLASS_LINK[] = {'L','I','N','K',0};\n#endif\n\nenum LINKPARTS {\n    LP_HYPERLINK = 1,\n};\n\nenum HYPERLINKSTATES {\n    HLS_NORMALTEXT = 1,\n    HLS_LINKTEXT = 2,\n};\n\n/* EMPTYMARKUP class */\n#if defined(__GNUC__)\n#define VSCLASS_EMPTYMARKUP (const WCHAR []){'E','M','P','T','Y','M','A','R','K','U','P',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_EMPTYMARKUP L\"EMPTYMARKUP\"\n#else\nstatic const WCHAR VSCLASS_EMPTYMARKUP[] = {'E','M','P','T','Y','M','A','R','K','U','P',0};\n#endif\n\nenum EMPTYMARKUPPARTS {\n    EMP_MARKUPTEXT = 1,\n};\n\nenum MARKUPTEXTSTATES {\n    EMT_NORMALTEXT = 1,\n    EMT_LINKTEXT = 2,\n};\n\n/* STATIC class */\n#if defined(__GNUC__)\n#define VSCLASS_STATIC (const WCHAR []){'S','T','A','T','I','C',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_STATIC L\"STATIC\"\n#else\nstatic const WCHAR VSCLASS_STATIC[] = {'S','T','A','T','I','C',0};\n#endif\n\nenum STATICPARTS {\n    STAT_TEXT = 1,\n};\n\n/* PAGE class */\n#if defined(__GNUC__)\n#define VSCLASS_PAGE (const WCHAR []){'P','A','G','E',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_PAGE L\"PAGE\"\n#else\nstatic const WCHAR VSCLASS_PAGE[] = {'P','A','G','E',0};\n#endif\n\nenum PAGEPARTS {\n    PGRP_UP = 1,\n    PGRP_DOWN = 2,\n    PGRP_UPHORZ = 3,\n    PGRP_DOWNHORZ = 4,\n};\n\n/* MONTHCAL class */\n#if defined(__GNUC__)\n#define VSCLASS_MONTHCAL (const WCHAR []){'M','O','N','T','H','C','A','L',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_MONTHCAL L\"MONTHCAL\"\n#else\nstatic const WCHAR VSCLASS_MONTHCAL[] = {'M','O','N','T','H','C','A','L',0};\n#endif\n\nenum MONTHCALPARTS {\n    MC_BACKGROUND = 1,\n    MC_BORDERS = 2,\n    MC_GRIDBACKGROUND = 3,\n    MC_COLHEADERSPLITTER = 4,\n    MC_GRIDCELLBACKGROUND = 5,\n    MC_GRIDCELL = 6,\n    MC_GRIDCELLUPPER = 7,\n    MC_TRAILINGGRIDCELL = 8,\n    MC_TRAILINGGRIDCELLUPPER = 9,\n    MC_NAVNEXT = 10,\n    MC_NAVPREV = 11,\n};\n\nenum GRIDCELLBACKGROUNDSTATES {\n    MCGCB_SELECTED = 1,\n    MCGCB_HOT = 2,\n    MCGCB_SELECTEDHOT = 3,\n    MCGCB_SELECTEDNOTFOCUSED = 4,\n    MCGCB_TODAY = 5,\n};\n\nenum GRIDCELLSTATES {\n    MCGC_HOT = 1,\n    MCGC_HASSTATE = 2,\n    MCGC_HASSTATEHOT = 3,\n    MCGC_TODAY = 4,\n};\n\nenum GRIDCELLUPPERSTATES {\n    MCGCU_HOT = 1,\n    MCGCU_HASSTATE = 2,\n    MCGCU_HASSTATEHOT = 3,\n};\n\nenum TRAILINGGRIDCELLSTATES {\n    MCTGC_HOT = 1,\n    MCTGC_HASSTATE = 2,\n    MCTGC_HASSTATEHOT = 3,\n    MCTGC_TODAY = 4,\n};\n\nenum TRAILINGGRIDCELLUPPERSTATES {\n    MCTGCU_HOT = 1,\n    MCTGCU_HASSTATE = 2,\n    MCTGCU_HASSTATEHOT = 3,\n};\n\nenum NAVNEXTSTATES {\n    MCNN_NORMAL = 1,\n    MCNN_HOT = 2,\n    MCNN_PRESSED = 3,\n    MCNN_DISABLED = 4,\n};\n\nenum NAVPREVSTATES {\n    MCNP_NORMAL = 1,\n    MCNP_HOT = 2,\n    MCNP_PRESSED = 3,\n    MCNP_DISABLED = 4,\n};\n\n/* CLOCK class */\n#if defined(__GNUC__)\n#define VSCLASS_CLOCK (const WCHAR []){'C','L','O','C','K',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_CLOCK L\"CLOCK\"\n#else\nstatic const WCHAR VSCLASS_CLOCK[] = {'C','L','O','C','K',0};\n#endif\n\nenum CLOCKPARTS {\n    CLP_TIME = 1,\n};\n\nenum CLOCKSTATES {\n    CLS_NORMAL = 1,\n};\n\n/* TRAYNOTIFY class */\n#if defined(__GNUC__)\n#define VSCLASS_TRAYNOTIFY (const WCHAR []){'T','R','A','Y','N','O','T','I','F','Y',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_TRAYNOTIFY L\"TRAYNOTIFY\"\n#else\nstatic const WCHAR VSCLASS_TRAYNOTIFY[] = {'T','R','A','Y','N','O','T','I','F','Y',0};\n#endif\n\nenum TRAYNOTIFYPARTS {\n    TNP_BACKGROUND = 1,\n    TNP_ANIMBACKGROUND = 2,\n};\n\n/* TASKBAR class */\n#if defined(__GNUC__)\n#define VSCLASS_TASKBAR (const WCHAR []){'T','A','S','K','B','A','R',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_TASKBAR L\"TASKBAR\"\n#else\nstatic const WCHAR VSCLASS_TASKBAR[] = {'T','A','S','K','B','A','R',0};\n#endif\n\nenum TASKBARPARTS {\n    TBP_BACKGROUNDBOTTOM = 1,\n    TBP_BACKGROUNDRIGHT = 2,\n    TBP_BACKGROUNDTOP = 3,\n    TBP_BACKGROUNDLEFT = 4,\n    TBP_SIZINGBARBOTTOM = 5,\n    TBP_SIZINGBARRIGHT = 6,\n    TBP_SIZINGBARTOP = 7,\n    TBP_SIZINGBARLEFT = 8,\n};\n\n/* TASKBAND class */\n#if defined(__GNUC__)\n#define VSCLASS_TASKBAND (const WCHAR []){'T','A','S','K','B','A','N','D',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_TASKBAND L\"TASKBAND\"\n#else\nstatic const WCHAR VSCLASS_TASKBAND[] = {'T','A','S','K','B','A','N','D',0};\n#endif\n\nenum TASKBANDPARTS {\n    TDP_GROUPCOUNT = 1,\n    TDP_FLASHBUTTON = 2,\n    TDP_FLASHBUTTONGROUPMENU = 3,\n};\n\n/* STARTPANEL class */\n#if defined(__GNUC__)\n#define VSCLASS_STARTPANEL (const WCHAR []){'S','T','A','R','T','P','A','N','E','L',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_STARTPANEL L\"STARTPANEL\"\n#else\nstatic const WCHAR VSCLASS_STARTPANEL[] = {'S','T','A','R','T','P','A','N','E','L',0};\n#endif\n\nenum STARTPANELPARTS {\n    SPP_USERPANE = 1,\n    SPP_MOREPROGRAMS = 2,\n    SPP_MOREPROGRAMSARROW = 3,\n    SPP_PROGLIST = 4,\n    SPP_PROGLISTSEPARATOR = 5,\n    SPP_PLACESLIST = 6,\n    SPP_PLACESLISTSEPARATOR = 7,\n    SPP_LOGOFF = 8,\n    SPP_LOGOFFBUTTONS = 9,\n    SPP_USERPICTURE = 10,\n    SPP_PREVIEW = 11,\n    SPP_MOREPROGRAMSTAB = 12,\n    SPP_NSCHOST = 13,\n    SPP_SOFTWAREEXPLORER = 14,\n    SPP_OPENBOX = 15,\n    SPP_SEARCHVIEW = 16,\n    SPP_MOREPROGRAMSARROWBACK = 17,\n    SPP_TOPMATCH = 18,\n    SPP_LOGOFFSPLITBUTTONDROPDOWN = 19,\n};\n\nenum MOREPROGRAMSTABSTATES {\n    SPMPT_NORMAL = 1,\n    SPMPT_HOT = 2,\n    SPMPT_SELECTED = 3,\n    SPMPT_DISABLED = 4,\n    SPMPT_FOCUSED = 5,\n};\n\nenum SOFTWAREEXPLORERSTATES {\n    SPSE_NORMAL = 1,\n    SPSE_HOT = 2,\n    SPSE_SELECTED = 3,\n    SPSE_DISABLED = 4,\n    SPSE_FOCUSED = 5,\n};\n\nenum OPENBOXSTATES {\n    SPOB_NORMAL = 1,\n    SPOB_HOT = 2,\n    SPOB_SELECTED = 3,\n    SPOB_DISABLED = 4,\n    SPOB_FOCUSED = 5,\n};\n\nenum MOREPROGRAMSARROWSTATES {\n    SPS_NORMAL = 1,\n    SPS_HOT = 2,\n    SPS_PRESSED = 3,\n};\n\nenum MOREPROGRAMSARROWBACKSTATES {\n    SPSB_NORMAL = 1,\n    SPSB_HOT = 2,\n    SPSB_PRESSED = 3,\n};\n\nenum LOGOFFBUTTONSSTATES {\n    SPLS_NORMAL = 1,\n    SPLS_HOT = 2,\n    SPLS_PRESSED = 3,\n};\n\n/* MENUBAND class */\n#if defined(__GNUC__)\n#define VSCLASS_MENUBAND (const WCHAR []){'M','E','N','U','B','A','N','D',0}\n#elif defined(_MSC_VER)\n#define VSCLASS_MENUBAND L\"MENUBAND\"\n#else\nstatic const WCHAR VSCLASS_MENUBAND[] = {'M','E','N','U','B','A','N','D',0};\n#endif\n\nenum MENUBANDPARTS {\n    MDP_NEWAPPBUTTON = 1,\n    MDP_SEPERATOR = 2,\n};\n\nenum MENUBANDSTATES {\n    MDS_NORMAL = 1,\n    MDS_HOT = 2,\n    MDS_PRESSED = 3,\n    MDS_DISABLED = 4,\n    MDS_CHECKED = 5,\n    MDS_HOTCHECKED = 6,\n};\n\n#endif /* __VSSYM32_H__ */\n"
  },
  {
    "path": "wine/windows/vswriter.h",
    "content": "/*\n * Copyright 2014 Hans Leidekker for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_VSWRITER_H\n#define __WINE_VSWRITER_H\n\ntypedef enum\n{\n    VSS_UT_UNDEFINED,\n    VSS_UT_BOOTABLESYSTEMSTATE,\n    VSS_UT_SYSTEMSERVICE,\n    VSS_UT_USERDATA,\n    VSS_UT_OTHER\n} VSS_USAGE_TYPE;\n\ntypedef enum\n{\n    VSS_ST_UNDEFINED,\n    VSS_ST_TRANSACTEDDB,\n    VSS_ST_NONTRANSACTEDDB,\n    VSS_ST_OTHER\n} VSS_SOURCE_TYPE;\n\ntypedef enum\n{\n    VSS_AWS_UNDEFINED,\n    VSS_AWS_NO_ALTERNATE_WRITER,\n    VSS_AWS_ALTERNATE_WRITER_EXISTS,\n    VSS_AWS_THIS_IS_ALTERNATE_WRITER\n} VSS_ALTERNATE_WRITER_STATE;\n\n#endif /* ___WINE_VSWRITER_H */\n"
  },
  {
    "path": "wine/windows/wbemcli.idl",
    "content": "/*\n * Copyright 2009 Hans Leidekker for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\ncpp_quote(\"DEFINE_GUID(CLSID_WbemLocator, 0x4590f811,0x1d3A,0x11d0,0x89,0x1f,0x00,0xaa,0x00,0x4b,0x2e,0x24);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WbemStatusCode, 0xeb87e1bd,0x3233,0x11d2,0xae,0xc9,0x00,0xc0,0x4f,0xb6,0x88,0x20);\")\n\nimport \"oaidl.idl\";\nimport \"objidl.idl\";\n\ninterface IWbemContext;\ninterface IWbemServices;\ninterface IWbemStatusCodeText;\ninterface IWbemCallResult;\ninterface IWbemObjectSink;\ninterface IWbemClassObject;\ninterface IEnumWbemClassObject;\ninterface IWbemQualifierSet;\n\ntypedef [v1_enum] enum tag_WBEMSTATUS\n{\n    WBEM_NO_ERROR                           = 0,\n    WBEM_S_NO_ERROR                         = 0,\n    WBEM_S_SAME                             = 0,\n    WBEM_S_FALSE                            = 1,\n    WBEM_S_ALREADY_EXISTS                   = 0x40001,\n    WBEM_S_RESET_TO_DEFAULT                 = 0x40002,\n    WBEM_S_DIFFERENT                        = 0x40003,\n    WBEM_S_TIMEDOUT                         = 0x40004,\n    WBEM_S_NO_MORE_DATA                     = 0x40005,\n    WBEM_S_OPERATION_CANCELLED              = 0x40006,\n    WBEM_S_PENDING                          = 0x40007,\n    WBEM_S_DUPLICATE_OBJECTS                = 0x40008,\n    WBEM_S_ACCESS_DENIED                    = 0x40009,\n    WBEM_S_PARTIAL_RESULTS                  = 0x40010,\n    WBEM_S_SOURCE_NOT_AVAILABLE             = 0x40017,\n    WBEM_E_FAILED                           = 0x80041001,\n    WBEM_E_NOT_FOUND                        = 0x80041002,\n    WBEM_E_ACCESS_DENIED                    = 0x80041003,\n    WBEM_E_PROVIDER_FAILURE                 = 0x80041004,\n    WBEM_E_TYPE_MISMATCH                    = 0x80041005,\n    WBEM_E_OUT_OF_MEMORY                    = 0x80041006,\n    WBEM_E_INVALID_CONTEXT                  = 0x80041007,\n    WBEM_E_INVALID_PARAMETER                = 0x80041008,\n    WBEM_E_NOT_AVAILABLE                    = 0x80041009,\n    WBEM_E_CRITICAL_ERROR                   = 0x8004100a,\n    WBEM_E_INVALID_STREAM                   = 0x8004100b,\n    WBEM_E_NOT_SUPPORTED                    = 0x8004100c,\n    WBEM_E_INVALID_SUPERCLASS               = 0x8004100d,\n    WBEM_E_INVALID_NAMESPACE                = 0x8004100e,\n    WBEM_E_INVALID_OBJECT                   = 0x8004100f,\n    WBEM_E_INVALID_CLASS                    = 0x80041010,\n    WBEM_E_PROVIDER_NOT_FOUND               = 0x80041011,\n    WBEM_E_INVALID_PROVIDER_REGISTRATION    = 0x80041012,\n    WBEM_E_PROVIDER_LOAD_FAILURE            = 0x80041013,\n    WBEM_E_INITIALIZATION_FAILURE           = 0x80041014,\n    WBEM_E_TRANSPORT_FAILURE                = 0x80041015,\n    WBEM_E_INVALID_OPERATION                = 0x80041016,\n    WBEM_E_INVALID_QUERY                    = 0x80041017,\n    WBEM_E_INVALID_QUERY_TYPE               = 0x80041018,\n    WBEM_E_ALREADY_EXISTS                   = 0x80041019,\n    WBEM_E_OVERRIDE_NOT_ALLOWED             = 0x8004101a,\n    WBEM_E_PROPAGATED_QUALIFIER             = 0x8004101b,\n    WBEM_E_PROPAGATED_PROPERTY              = 0x8004101c,\n    WBEM_E_UNEXPECTED                       = 0x8004101d,\n    WBEM_E_ILLEGAL_OPERATION                = 0x8004101e,\n    WBEM_E_CANNOT_BE_KEY                    = 0x8004101f,\n    WBEM_E_INCOMPLETE_CLASS                 = 0x80041020,\n    WBEM_E_INVALID_SYNTAX                   = 0x80041021,\n    WBEM_E_NONDECORATED_OBJECT              = 0x80041022,\n    WBEM_E_READ_ONLY                        = 0x80041023,\n    WBEM_E_PROVIDER_NOT_CAPABLE             = 0x80041024,\n    WBEM_E_CLASS_HAS_CHILDREN               = 0x80041025,\n    WBEM_E_CLASS_HAS_INSTANCES              = 0x80041026,\n    WBEM_E_QUERY_NOT_IMPLEMENTED            = 0x80041027,\n    WBEM_E_ILLEGAL_NULL                     = 0x80041028,\n    WBEM_E_INVALID_QUALIFIER_TYPE           = 0x80041029,\n    WBEM_E_INVALID_PROPERTY_TYPE            = 0x8004102a,\n    WBEM_E_VALUE_OUT_OF_RANGE               = 0x8004102b,\n    WBEM_E_CANNOT_BE_SINGLETON              = 0x8004102c,\n    WBEM_E_INVALID_CIM_TYPE                 = 0x8004102d,\n    WBEM_E_INVALID_METHOD                   = 0x8004102e,\n    WBEM_E_INVALID_METHOD_PARAMETERS        = 0x8004102f,\n    WBEM_E_SYSTEM_PROPERTY                  = 0x80041030,\n    WBEM_E_INVALID_PROPERTY                 = 0x80041031,\n    WBEM_E_CALL_CANCELLED                   = 0x80041032,\n    WBEM_E_SHUTTING_DOWN                    = 0x80041033,\n    WBEM_E_PROPAGATED_METHOD                = 0x80041034,\n    WBEM_E_UNSUPPORTED_PARAMETER            = 0x80041035,\n    WBEM_E_MISSING_PARAMETER_ID             = 0x80041036,\n    WBEM_E_INVALID_PARAMETER_ID             = 0x80041037,\n    WBEM_E_NONCONSECUTIVE_PARAMETER_IDS     = 0x80041038,\n    WBEM_E_PARAMETER_ID_ON_RETVAL           = 0x80041039,\n    WBEM_E_INVALID_OBJECT_PATH              = 0x8004103a,\n    WBEM_E_OUT_OF_DISK_SPACE                = 0x8004103b,\n    WBEM_E_BUFFER_TOO_SMALL                 = 0x8004103c,\n    WBEM_E_UNSUPPORTED_PUT_EXTENSION        = 0x8004103d,\n    WBEM_E_UNKNOWN_OBJECT_TYPE              = 0x8004103e,\n    WBEM_E_UNKNOWN_PACKET_TYPE              = 0x8004103f,\n    WBEM_E_MARSHAL_VERSION_MISMATCH         = 0x80041040,\n    WBEM_E_MARSHAL_INVALID_SIGNATURE        = 0x80041041,\n    WBEM_E_INVALID_QUALIFIER                = 0x80041042,\n    WBEM_E_INVALID_DUPLICATE_PARAMETER      = 0x80041043,\n    WBEM_E_TOO_MUCH_DATA                    = 0x80041044,\n    WBEM_E_SERVER_TOO_BUSY                  = 0x80041045,\n    WBEM_E_INVALID_FLAVOR                   = 0x80041046,\n    WBEM_E_CIRCULAR_REFERENCE               = 0x80041047,\n    WBEM_E_UNSUPPORTED_CLASS_UPDATE         = 0x80041048,\n    WBEM_E_CANNOT_CHANGE_KEY_INHERITANCE    = 0x80041049,\n    WBEM_E_CANNOT_CHANGE_INDEX_INHERITANCE  = 0x80041050,\n    WBEM_E_TOO_MANY_PROPERTIES              = 0x80041051,\n    WBEM_E_UPDATE_TYPE_MISMATCH             = 0x80041052,\n    WBEM_E_UPDATE_OVERRIDE_NOT_ALLOWED      = 0x80041053,\n    WBEM_E_UPDATE_PROPAGATED_METHOD         = 0x80041054,\n    WBEM_E_METHOD_NOT_IMPLEMENTED           = 0x80041055,\n    WBEM_E_METHOD_DISABLED                  = 0x80041056,\n    WBEM_E_REFRESHER_BUSY                   = 0x80041057,\n    WBEM_E_UNPARSABLE_QUERY                 = 0x80041058,\n    WBEM_E_NOT_EVENT_CLASS                  = 0x80041059,\n    WBEM_E_MISSING_GROUP_WITHIN             = 0x8004105a,\n    WBEM_E_MISSING_AGGREGATION_LIST         = 0x8004105b,\n    WBEM_E_PROPERTY_NOT_AN_OBJECT           = 0x8004105c,\n    WBEM_E_AGGREGATING_BY_OBJECT            = 0x8004105d,\n    WBEM_E_UNINTERPRETABLE_PROVIDER_QUERY   = 0x8004105f,\n    WBEM_E_BACKUP_RESTORE_WINMGMT_RUNNING   = 0x80041060,\n    WBEM_E_QUEUE_OVERFLOW                   = 0x80041061,\n    WBEM_E_PRIVILEGE_NOT_HELD               = 0x80041062,\n    WBEM_E_INVALID_OPERATOR                 = 0x80041063,\n    WBEM_E_LOCAL_CREDENTIALS                = 0x80041064,\n    WBEM_E_CANNOT_BE_ABSTRACT               = 0x80041065,\n    WBEM_E_AMENDED_OBJECT                   = 0x80041066,\n    WBEM_E_CLIENT_TOO_SLOW                  = 0x80041067,\n    WBEM_E_NULL_SECURITY_DESCRIPTOR         = 0x80041068,\n    WBEM_E_TIMED_OUT                        = 0x80041069,\n    WBEM_E_INVALID_ASSOCIATION              = 0x8004106a,\n    WBEM_E_AMBIGUOUS_OPERATION              = 0x8004106b,\n    WBEM_E_QUOTA_VIOLATION                  = 0x8004106c,\n    WBEM_E_RESERVED_001                     = 0x8004106d,\n    WBEM_E_RESERVED_002                     = 0x8004106e,\n    WBEM_E_UNSUPPORTED_LOCALE               = 0x8004106f,\n    WBEM_E_HANDLE_OUT_OF_DATE               = 0x80041070,\n    WBEM_E_CONNECTION_FAILED                = 0x80041071,\n    WBEM_E_INVALID_HANDLE_REQUEST           = 0x80041072,\n    WBEM_E_PROPERTY_NAME_TOO_WIDE           = 0x80041073,\n    WBEM_E_CLASS_NAME_TOO_WIDE              = 0x80041074,\n    WBEM_E_METHOD_NAME_TOO_WIDE             = 0x80041075,\n    WBEM_E_QUALIFIER_NAME_TOO_WIDE          = 0x80041076,\n    WBEM_E_RERUN_COMMAND                    = 0x80041077,\n    WBEM_E_DATABASE_VER_MISMATCH            = 0x80041078,\n    WBEM_E_VETO_DELETE                      = 0x80041079,\n    WBEM_E_VETO_PUT                         = 0x8004107a,\n    WBEM_E_INVALID_LOCALE                   = 0x80041080,\n    WBEM_E_PROVIDER_SUSPENDED               = 0x80041081,\n    WBEM_E_SYNCHRONIZATION_REQUIRED         = 0x80041082,\n    WBEM_E_NO_SCHEMA                        = 0x80041083,\n    WBEM_E_PROVIDER_ALREADY_REGISTERED      = 0x80041084,\n    WBEM_E_PROVIDER_NOT_REGISTERED          = 0x80041085,\n    WBEM_E_FATAL_TRANSPORT_ERROR            = 0x80041086,\n    WBEM_E_ENCRYPTED_CONNECTION_REQUIRED    = 0x80041087,\n    WBEM_E_PROVIDER_TIMED_OUT               = 0x80041088,\n    WBEM_E_NO_KEY                           = 0x80041089,\n    WBEM_E_PROVIDER_DISABLED                = 0x8004108a\n} WBEMSTATUS;\n\ntypedef [v1_enum] enum tag_WBEM_STATUS_TYPE\n{\n    WBEM_STATUS_COMPLETE     = 0,\n    WBEM_STATUS_REQUIREMENTS = 1,\n    WBEM_STATUS_PROGRESS     = 2\n} WBEM_STATUS_TYPE;\n\ntypedef [v1_enum] enum tag_WBEM_TIMEOUT_TYPE\n{\n    WBEM_NO_WAIT  = 0,\n    WBEM_INFINITE = 0xffffffff\n} WBEM_TIMEOUT_TYPE;\n\ntypedef [v1_enum] enum tag_WBEM_CONDITION_FLAG_TYPE\n{\n    WBEM_FLAG_ALWAYS                    = 0,\n    WBEM_FLAG_ONLY_IF_TRUE              = 0x1,\n    WBEM_FLAG_ONLY_IF_FALSE             = 0x2,\n    WBEM_FLAG_ONLY_IF_IDENTICAL         = 0x3,\n    WBEM_MASK_PRIMARY_CONDITION         = 0x3,\n    WBEM_FLAG_KEYS_ONLY                 = 0x4,\n    WBEM_FLAG_REFS_ONLY                 = 0x8,\n    WBEM_FLAG_LOCAL_ONLY                = 0x10,\n    WBEM_FLAG_PROPAGATED_ONLY           = 0x20,\n    WBEM_FLAG_SYSTEM_ONLY               = 0x30,\n    WBEM_FLAG_NONSYSTEM_ONLY            = 0x40,\n    WBEM_MASK_CONDITION_ORIGIN          = 0x70,\n    WBEM_FLAG_CLASS_OVERRIDES_ONLY      = 0x100,\n    WBEM_FLAG_CLASS_LOCAL_AND_OVERRIDES = 0x200,\n    WBEM_MASK_CLASS_CONDITION           = 0x300\n} WBEM_CONDITION_FLAG_TYPE;\n\ntypedef [v1_enum] enum tag_WBEM_FLAVOR_TYPE\n{\n    WBEM_FLAVOR_DONT_PROPAGATE                  = 0,\n    WBEM_FLAVOR_FLAG_PROPAGATE_TO_INSTANCE      = 0x1,\n    WBEM_FLAVOR_FLAG_PROPAGATE_TO_DERIVED_CLASS = 0x2,\n    WBEM_FLAVOR_MASK_PROPAGATION                = 0xf,\n    WBEM_FLAVOR_OVERRIDABLE                     = 0,\n    WBEM_FLAVOR_NOT_OVERRIDABLE                 = 0x10,\n    WBEM_FLAVOR_MASK_PERMISSIONS                = 0x10,\n    WBEM_FLAVOR_ORIGIN_LOCAL                    = 0,\n    WBEM_FLAVOR_ORIGIN_PROPAGATED               = 0x20,\n    WBEM_FLAVOR_ORIGIN_SYSTEM                   = 0x40,\n    WBEM_FLAVOR_MASK_ORIGIN                     = 0x60,\n    WBEM_FLAVOR_NOT_AMENDED                     = 0,\n    WBEM_FLAVOR_AMENDED                         = 0x80,\n    WBEM_FLAVOR_MASK_AMENDED                    = 0x80\n} WBEM_FLAVOR_TYPE;\n\ntypedef [v1_enum] enum tag_WBEM_GENUS_TYPE\n{\n    WBEM_GENUS_CLASS = 1,\n    WBEM_GENUS_INSTANCE = 2\n} WBEM_GENUS_TYPE;\n\ntypedef [v1_enum] enum tag_CIMTYPE_ENUMERATION\n{\n    CIM_ILLEGAL = 0xfff,\n    CIM_EMPTY   = 0,\n    CIM_SINT16  = 2,\n    CIM_SINT32  = 3,\n    CIM_REAL32  = 4,\n    CIM_REAL64  = 5,\n    CIM_STRING  = 8,\n    CIM_BOOLEAN = 11,\n    CIM_OBJECT  = 13,\n    CIM_SINT8   = 16,\n    CIM_UINT8   = 17,\n    CIM_UINT16  = 18,\n    CIM_UINT32  = 19,\n    CIM_SINT64  = 20,\n    CIM_UINT64  = 21,\n    CIM_DATETIME   = 101,\n    CIM_REFERENCE  = 102,\n    CIM_CHAR16     = 103,\n    CIM_FLAG_ARRAY = 0x2000\n} CIMTYPE_ENUMERATION;\n\ntypedef long CIMTYPE;\n\n[\n    object,\n    restricted,\n    local,\n    uuid(dc12a687-737f-11cf-884d-00aa004b2e24),\n    pointer_default(unique)\n]\ninterface IWbemLocator : IUnknown\n{\n    HRESULT ConnectServer(\n        [in] const BSTR strNetworkResource,\n        [in] const BSTR strUser,\n        [in] const BSTR strPassword,\n        [in] const BSTR strLocale,\n        [in] LONG lSecurityFlags,\n        [in] const BSTR strAuthority,\n        [in] IWbemContext *pCtx,\n        [out] IWbemServices **ppNamespace);\n}\n\n[\n    object,\n    local,\n    uuid(eb87e1bc-3233-11d2-aec9-00c04fb68820)\n]\ninterface IWbemStatusCodeText : IUnknown\n{\n    HRESULT GetErrorCodeText(\n        [in] HRESULT hRes,\n        [in] LCID LocaleId,\n        [in] LONG lFlags,\n        [out] BSTR *MessageText);\n\n    HRESULT GetFacilityCodeText(\n        [in] HRESULT hRes,\n        [in] LCID LocaleId,\n        [in] LONG lFlags,\n        [out] BSTR *MessageText);\n}\n\n[\n    object,\n    restricted,\n    uuid(7c857801-7381-11cf-884d-00aa004b2e24)\n]\ninterface IWbemObjectSink : IUnknown\n{\n    HRESULT Indicate(\n        [in] long lObjectCount,\n        [in, size_is(lObjectCount)] IWbemClassObject **apObjArray);\n\n    HRESULT SetStatus(\n        [in] long lFlags,\n        [in] HRESULT hResult,\n        [in] BSTR strParam,\n        [in] IWbemClassObject *pObjParam);\n}\n\ntypedef [v1_enum] enum tag_WBEM_GENERIC_FLAG_TYPE\n{\n    WBEM_FLAG_RETURN_WBEM_COMPLETE      = 0,\n    WBEM_FLAG_BIDIRECTIONAL             = 0,\n    WBEM_FLAG_RETURN_ERROR_OBJECT       = 0,\n    WBEM_FLAG_DONT_SEND_STATUS          = 0,\n    WBEM_FLAG_SEND_ONLY_SELECTED        = 0,\n    WBEM_FLAG_RETURN_IMMEDIATELY        = 0x10,\n    WBEM_FLAG_FORWARD_ONLY              = 0x20,\n    WBEM_FLAG_NO_ERROR_OBJECT           = 0x40,\n    WBEM_FLAG_SEND_STATUS               = 0x80,\n    WBEM_FLAG_ENSURE_LOCATABLE          = 0x100,\n    WBEM_FLAG_DIRECT_READ               = 0x200,\n    WBEM_MASK_RESERVED_FLAGS            = 0x1f000,\n    WBEM_FLAG_USE_AMENDED_QUALIFIERS    = 0x20000,\n    WBEM_FLAG_STRONG_VALIDATION         = 0x100000\n} WBEM_GENERIC_FLAG_TYPE;\n\n[\n    object,\n    restricted,\n    uuid(9556dc99-828c-11cf-a37e-00aa003240c7),\n    pointer_default(unique)\n]\ninterface IWbemServices : IUnknown\n{\n    HRESULT OpenNamespace(\n        [in] const BSTR strNamespace,\n        [in] long lFlags,\n        [in] IWbemContext *pCtx,\n        [out] IWbemServices **ppWorkingNamespace,\n        [out] IWbemCallResult **ppResult);\n\n    HRESULT CancelAsyncCall(\n        [in] IWbemObjectSink *pSink);\n\n    HRESULT QueryObjectSink(\n        [in] long lFlags,\n        [out] IWbemObjectSink **ppResponseHandler);\n\n    HRESULT GetObject(\n        [in] const BSTR strObjectPath,\n        [in] long lFlags,\n        [in] IWbemContext *pCtx,\n        [out] IWbemClassObject **ppObject,\n        [out] IWbemCallResult **ppCallResult);\n\n    HRESULT GetObjectAsync(\n        [in] const BSTR strObjectPath,\n        [in] long lFlags,\n        [in] IWbemContext *pCtx,\n        [in] IWbemObjectSink *pResponseHandler);\n\n    HRESULT PutClass(\n        [in] IWbemClassObject *pObject,\n        [in] long lFlags,\n        [in] IWbemContext *pCtx,\n        [out] IWbemCallResult **ppCallResult);\n\n    HRESULT PutClassAsync(\n        [in] IWbemClassObject *pObject,\n        [in] long lFlags,\n        [in] IWbemContext *pCtx,\n        [in] IWbemObjectSink *pResponseHandler);\n\n    HRESULT DeleteClass(\n        [in] const BSTR strClass,\n        [in] long lFlags,\n        [in] IWbemContext *pCtx,\n        [out] IWbemCallResult **ppCallResult);\n\n    HRESULT DeleteClassAsync(\n        [in] const BSTR strClass,\n        [in] long lFlags,\n        [in] IWbemContext *pCtx,\n        [in] IWbemObjectSink *pResponseHandler);\n\n    HRESULT CreateClassEnum(\n        [in] const BSTR strSuperclass,\n        [in] long lFlags,\n        [in] IWbemContext *pCtx,\n        [out] IEnumWbemClassObject **ppEnum);\n\n    HRESULT CreateClassEnumAsync(\n        [in] const BSTR strSuperclass,\n        [in] long lFlags,\n        [in] IWbemContext *pCtx,\n        [in] IWbemObjectSink *pResponseHandler);\n\n    HRESULT PutInstance(\n        [in] IWbemClassObject *pInst,\n        [in] long lFlags,\n        [in] IWbemContext *pCtx,\n        [out] IWbemCallResult **ppCallResult);\n\n    HRESULT PutInstanceAsync(\n        [in] IWbemClassObject *pInst,\n        [in] long lFlags,\n        [in] IWbemContext *pCtx,\n        [in] IWbemObjectSink *pResponseHandler);\n\n    HRESULT DeleteInstance(\n        [in] const BSTR strObjectPath,\n        [in] long lFlags,\n        [in] IWbemContext *pCtx,\n        [out] IWbemCallResult **ppCallResult);\n\n    HRESULT DeleteInstanceAsync(\n        [in] const BSTR strObjectPath,\n        [in] long lFlags,\n        [in] IWbemContext *pCtx,\n        [in] IWbemObjectSink *pResponseHandler);\n\n    HRESULT CreateInstanceEnum(\n        [in] const BSTR strFilter,\n        [in] long lFlags,\n        [in] IWbemContext *pCtx,\n        [out] IEnumWbemClassObject **ppEnum);\n\n    HRESULT CreateInstanceEnumAsync(\n        [in] const BSTR strFilter,\n        [in] long lFlags,\n        [in] IWbemContext *pCtx,\n        [in] IWbemObjectSink *pResponseHandler);\n\n    HRESULT ExecQuery(\n        [in] const BSTR strQueryLanguage,\n        [in] const BSTR strQuery,\n        [in] long lFlags,\n        [in] IWbemContext *pCtx,\n        [out] IEnumWbemClassObject **ppEnum);\n\n    HRESULT ExecQueryAsync(\n        [in] const BSTR strQueryLanguage,\n        [in] const BSTR strQuery,\n        [in] long lFlags,\n        [in] IWbemContext *pCtx,\n        [in] IWbemObjectSink *pResponseHandler);\n\n    HRESULT ExecNotificationQuery(\n        [in] const BSTR strQueryLanguage,\n        [in] const BSTR strQuery,\n        [in] long lFlags,\n        [in] IWbemContext *pCtx,\n        [out] IEnumWbemClassObject **ppEnum);\n\n    HRESULT ExecNotificationQueryAsync(\n        [in] const BSTR strQueryLanguage,\n        [in] const BSTR strQuery,\n        [in] long lFlags,\n        [in] IWbemContext *pCtx,\n        [in] IWbemObjectSink *pResponseHandler);\n\n    HRESULT ExecMethod(\n        [in] const BSTR strObjectPath,\n        [in] const BSTR strMethodName,\n        [in] long lFlags,\n        [in] IWbemContext *pCtx,\n        [in] IWbemClassObject *pInParams,\n        [out] IWbemClassObject **ppOutParams,\n        [out] IWbemCallResult **ppCallResult);\n\n    HRESULT ExecMethodAsync(\n        [in] const BSTR strObjectPath,\n        [in] const BSTR strMethodName,\n        [in] long lFlags,\n        [in] IWbemContext *pCtx,\n        [in] IWbemClassObject *pInParams,\n        [in] IWbemObjectSink *pResponseHandler);\n}\n\n[\n    object,\n    restricted,\n    uuid(027947e1-d731-11ce-a357-000000000001)\n]\ninterface IEnumWbemClassObject : IUnknown\n{\n    HRESULT Reset();\n\n    HRESULT Next(\n        [in] long lTimeout,\n        [in] ULONG uCount,\n        [out, size_is(uCount), length_is(*puReturned)] IWbemClassObject **apObjects,\n        [out] ULONG *puReturned);\n\n    HRESULT NextAsync(\n        [in] ULONG uCount,\n        [in] IWbemObjectSink *pSink);\n\n    HRESULT Clone(\n        [out] IEnumWbemClassObject **ppEnum);\n\n    HRESULT Skip(\n        [in] long lTimeout,\n        [in] ULONG nCount);\n}\n\n[\n    object,\n    restricted,\n    local,\n    uuid(dc12a681-737f-11cf-884d-00aa004b2e24)\n]\ninterface IWbemClassObject : IUnknown\n{\n    HRESULT GetQualifierSet(\n        [out] IWbemQualifierSet **ppQualSet);\n\n    HRESULT Get(\n        [in,string] LPCWSTR wszName,\n        [in] long lFlags,\n        [out] VARIANT *pVal,\n        [out] CIMTYPE *pType,\n        [out] long *plFlavor);\n\n    HRESULT Put(\n        [in,string] LPCWSTR wszName,\n        [in] long lFlags,\n        [in] VARIANT *pVal,\n        [in] CIMTYPE Type);\n\n    HRESULT Delete(\n        [in,string] LPCWSTR wszName);\n\n    HRESULT GetNames(\n        [in,string] LPCWSTR wszQualifierName,\n        [in] long lFlags,\n        [in] VARIANT *pQualifierVal,\n        [out] SAFEARRAY **pNames);\n\n    HRESULT BeginEnumeration(\n        [in] long lEnumFlags);\n\n    HRESULT Next(\n        [in] long lFlags,\n        [out] BSTR *strName,\n        [out] VARIANT *pVal,\n        [out] CIMTYPE *pType,\n        [out] long *plFlavor);\n\n    HRESULT EndEnumeration();\n\n    HRESULT GetPropertyQualifierSet(\n        [in,string] LPCWSTR wszProperty,\n        [out] IWbemQualifierSet **ppQualSet);\n\n    HRESULT Clone(\n        [out] IWbemClassObject **ppCopy);\n\n    HRESULT GetObjectText(\n        [in] long lFlags,\n        [out] BSTR *pstrObjectText);\n\n    HRESULT SpawnDerivedClass(\n        [in] long lFlags,\n        [out] IWbemClassObject **ppNewClass);\n\n    HRESULT SpawnInstance(\n        [in] long lFlags,\n        [out] IWbemClassObject **ppNewInstance);\n\n    HRESULT CompareTo(\n        [in] long lFlags,\n        [in] IWbemClassObject *pCompareTo);\n\n    HRESULT GetPropertyOrigin(\n        [in,string] LPCWSTR wszName,\n        [out] BSTR *pstrClassName);\n\n    HRESULT InheritsFrom(\n        [in] LPCWSTR strAncestor);\n\n    HRESULT GetMethod(\n        [in,string] LPCWSTR wszName,\n        [in] long lFlags,\n        [out] IWbemClassObject **ppInSignature,\n        [out] IWbemClassObject **ppOutSignature);\n\n    HRESULT PutMethod(\n        [in,string] LPCWSTR wszName,\n        [in] long lFlags,\n        [in] IWbemClassObject *pInSignature,\n        [in] IWbemClassObject *pOutSignature);\n\n    HRESULT DeleteMethod(\n        [in,string] LPCWSTR wszName);\n\n    HRESULT BeginMethodEnumeration(\n        [in] long lEnumFlags);\n\n    HRESULT NextMethod(\n        [in] long lFlags,\n        [out] BSTR *pstrName,\n        [out] IWbemClassObject **ppInSignature,\n        [out] IWbemClassObject **ppOutSignature);\n\n    HRESULT EndMethodEnumeration();\n\n    HRESULT GetMethodQualifierSet(\n        [in,string] LPCWSTR wszMethod,\n        [out] IWbemQualifierSet **ppQualSet);\n\n    HRESULT GetMethodOrigin(\n        [in,string] LPCWSTR wszMethodName,\n        [out] BSTR *pstrClassName);\n}\n\n[\n    object,\n    restricted,\n    local,\n    uuid(dc12a680-737f-11cf-884d-00aa004b2e24)\n]\ninterface IWbemQualifierSet : IUnknown\n{\n    HRESULT Get(\n        [in,string] LPCWSTR wszName,\n        [in] long lFlags,\n        [out] VARIANT *pVal,\n        [out] long *plFlavor);\n\n    HRESULT Put(\n        [in,string] LPCWSTR wszName,\n        [in] VARIANT *pVal,\n        [in] long lFlavor);\n\n    HRESULT Delete(\n        [in,string] LPCWSTR wszName);\n\n    HRESULT GetNames(\n        [in] long lFlags,\n        [out] SAFEARRAY **pNames);\n\n    HRESULT BeginEnumeration(\n        [in] long lFlags);\n\n    HRESULT Next(\n        [in] long lFlags,\n        [out] BSTR *pstrName,\n        [out] VARIANT *pVal,\n        [out] long *plFlavor);\n\n    HRESULT EndEnumeration();\n}\n\n\ntypedef [v1_enum] enum tag_WBEM_UNSECAPP_FLAG_TYPE\n{\n    WBEM_FLAG_UNSECAPP_DEFAULT_CHECK_ACCESS,\n    WBEM_FLAG_UNSECAPP_CHECK_ACCESS,\n    WBEM_FLAG_UNSECAPP_DONT_CHECK_ACCESS\n} WBEM_UNSECAPP_FLAG_TYPE;\n\n[\n    object,\n    restricted,\n    uuid(1cfaba8c-1523-11d1-ad79-00c04fd8fdff)\n]\ninterface IUnsecuredApartment : IUnknown\n{\n    HRESULT CreateObjectStub(\n        [in] IUnknown *object,\n        [out] IUnknown **stub);\n};\n\n[\n    object,\n    restricted,\n    uuid(31739d04-3471-4cf4-9a7c-57a44ae71956)\n]\ninterface IWbemUnsecuredApartment : IUnsecuredApartment\n{\n    HRESULT CreateSinkStub(\n        [in] IWbemObjectSink *sink,\n        [in] DWORD flags,\n        [in,unique] const WCHAR *reserved,\n        [out] IWbemObjectSink **stub);\n};\n\n[\n    uuid(49bd2028-1523-11d1-ad79-00c04fd8fdff)\n]\ncoclass UnsecuredApartment\n{\n    interface IUnsecuredApartment;\n    interface IWbemUnsecuredApartment;\n};\n"
  },
  {
    "path": "wine/windows/wbemdisp.idl",
    "content": "/*\n * Copyright 2013 Hans Leidekker for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"dispex.idl\";\n\n#ifndef __WIDL__\n#define threading(model)\n#define progid(str)\n#define vi_progid(str)\n#endif\n\n[\n    uuid(565783c6-cb41-11d1-8b02-00600806d9b6),\n    helpstring(\"Microsoft WMI Scripting V1.2 Library\"),\n    lcid(0x0000),\n    version(1.2)\n]\nlibrary WbemScripting\n{\n\nimportlib(\"stdole2.tlb\");\n\ninterface ISWbemEventSource;\ninterface ISWbemLocator;\ninterface ISWbemMethod;\ninterface ISWbemMethodSet;\ninterface ISWbemNamedValue;\ninterface ISWbemNamedValueSet;\ninterface ISWbemObject;\ninterface ISWbemObjectPath;\ninterface ISWbemObjectSet;\ninterface ISWbemPrivilege;\ninterface ISWbemPrivilegeSet;\ninterface ISWbemProperty;\ninterface ISWbemPropertySet;\ninterface ISWbemQualifier;\ninterface ISWbemQualifierSet;\ninterface ISWbemSecurity;\ninterface ISWbemServices;\n\ntypedef\n[\n    v1_enum,\n    uuid(bf078c2a-07d9-11d2-8b21-00600806d9b6)\n]\nenum WbemTimeout\n{\n    wbemTimeoutInfinite = 0xffffffff\n} WbemTimeout;\n\ntypedef\n[\n    v1_enum,\n    uuid(4a249b72-fc9a-11d1-8b1e-00600806d9b6)\n]\nenum WbemChangeFlagEnum\n{\n    wbemChangeFlagCreateOrUpdate   = 0,\n    wbemChangeFlagUpdateOnly       = 0x00000001,\n    wbemChangeFlagCreateOnly       = 0x00000002,\n    wbemChangeFlagUpdateCompatible = 0x00000000,\n    wbemChangeFlagUpdateSafeMode   = 0x00000020,\n    wbemChangeFlagUpdateForceMode  = 0x00000040,\n    wbemChangeFlagStrongValidation = 0x00000080,\n    wbemChangeFlagAdvisory         = 0x00010000\n} WbemChangeFlagEnum;\n\ntypedef\n[\n    v1_enum,\n    uuid(4a249b73-fc9a-11d1-8b1e-00600806d9b6)\n]\nenum WbemFlagEnum\n{\n    wbemFlagReturnImmediately    = 0x00010,\n    wbemFlagReturnWhenComplete   = 0,\n    wbemFlagBidirectional        = 0,\n    wbemFlagForwardOnly          = 0x00020,\n    wbemFlagNoErrorObject        = 0x00040,\n    wbemFlagReturnErrorObject    = 0,\n    wbemFlagSendStatus           = 0x00080,\n    wbemFlagDontSendStatus       = 0,\n    wbemFlagEnsureLocatable      = 0x00100,\n    wbemFlagDirectRead           = 0x00200,\n    wbemFlagSendOnlySelected     = 0,\n    wbemFlagUseAmendedQualifiers = 0x20000,\n    wbemFlagGetDefault           = 0x0,\n    wbemFlagSpawnInstance        = 0x00001,\n    wbemFlagUseCurrentTime       = 0x00001\n} WbemFlagEnum;\n\ntypedef\n[\n    v1_enum,\n    uuid(4a249b76-fc9a-11d1-8b1e-00600806d9b6)\n]\nenum WbemQueryFlagEnum\n{\n    wbemQueryFlagDeep,\n    wbemQueryFlagShallow,\n    wbemQueryFlagPrototype\n} WbemQueryFlagEnum;\n\ntypedef\n[\n    v1_enum,\n    uuid(4A249B79-FC9A-11d1-8B1E-00600806D9B6)\n]\nenum WbemComparisonFlagEnum\n{\n    wbemComparisonFlagIncludeAll          = 0,\n    wbemComparisonFlagIgnoreQualifiers    = 1,\n    wbemComparisonFlagIgnoreObjectSource  = 2,\n    wbemComparisonFlagIgnoreDefaultValues = 4,\n    wbemComparisonFlagIgnoreClass         = 8,\n    wbemComparisonFlagIgnoreCase          = 16,\n    wbemComparisonFlagIgnoreFlavor        = 32\n} WbemComparisonFlagEnum;\n\n[\n    object,\n    local,\n    uuid(27d54d92-0ebe-11d2-8b22-00600806d9b6),\n    dual,\n    hidden,\n    oleautomation,\n    nonextensible\n]\ninterface ISWbemEventSource : IDispatch\n{\n    [ id(1) ]\n    HRESULT NextEvent(\n        [in, defaultvalue(wbemTimeoutInfinite)] long iTimeoutMs,\n        [out, retval] ISWbemObject **objWbemObject);\n\n    [ id(2), propget ]\n    HRESULT Security_(\n        [out, retval] ISWbemSecurity **objWbemSecurity);\n}\n\n[\n    object,\n    local,\n    uuid(76a6415b-cb41-11d1-8b02-00600806d9b6),\n    dual,\n    hidden,\n    oleautomation,\n    pointer_default(unique)\n]\ninterface ISWbemLocator : IDispatch\n{\n    [ id(1) ]\n    HRESULT ConnectServer(\n        [in, defaultvalue(\".\")] BSTR strServer,\n        [in, defaultvalue(\"\")]  BSTR strNamespace,\n        [in, defaultvalue(\"\")]  BSTR strUser,\n        [in, defaultvalue(\"\")]  BSTR strPassword,\n        [in, defaultvalue(\"\")]  BSTR strLocale,\n        [in, defaultvalue(\"\")]  BSTR strAuthority,\n        [in, defaultvalue(0)]   long iSecurityFlags,\n        [in, defaultvalue(0)]   IDispatch *objWbemNamedValueSet,\n        [out, retval] ISWbemServices **objWbemServices);\n\n    [ id(2), propget ]\n    HRESULT Security_([out, retval] ISWbemSecurity **objWbemSecurity);\n}\n\n[\n    object,\n    local,\n    uuid(422e8e90-d955-11d1-8b09-00600806d9b6),\n    dual,\n    hidden,\n    oleautomation,\n    pointer_default(unique),\n    nonextensible\n]\ninterface ISWbemMethod : IDispatch\n{\n    [ id(1), propget ]\n    HRESULT Name(\n        [out, retval] BSTR *strName);\n\n    [ id(2), propget ]\n    HRESULT Origin(\n        [out, retval] BSTR *strOrigin);\n\n    [ id(3), propget ]\n    HRESULT InParameters(\n        [out, retval] ISWbemObject **objWbemInParameters);\n\n    [ id(4), propget ]\n    HRESULT OutParameters(\n        [out, retval] ISWbemObject **objWbemOutParameters);\n\n    [ id(5), propget ]\n    HRESULT Qualifiers_(\n        [out, retval] ISWbemQualifierSet **objWbemQualifierSet);\n}\n\n[\n    object,\n    local,\n    uuid(c93ba292-d955-11d1-8b09-00600806d9b6),\n    dual,\n    hidden,\n    oleautomation,\n    nonextensible\n]\ninterface ISWbemMethodSet : IDispatch\n{\n    [ id(DISPID_NEWENUM), propget, restricted ]\n    HRESULT _NewEnum(\n        [out, retval] IUnknown **pUnk);\n\n    [ id(DISPID_VALUE) ]\n    HRESULT Item(\n        [in] BSTR strName,\n        [in, defaultvalue(0)] long iFlags,\n        [out, retval] ISWbemMethod **objWbemMethod);\n\n    [ id(1), propget ]\n    HRESULT Count(\n        [out, retval] long *iCount);\n}\n\n[\n    object,\n    local,\n    uuid(76a64164-cb41-11d1-8b02-00600806d9b6),\n    dual,\n    hidden,\n    oleautomation\n]\ninterface ISWbemNamedValue : IDispatch\n{\n    [ id(DISPID_VALUE), propget ]\n    HRESULT Value(\n        [out, retval] VARIANT *varValue);\n\n    [ id(DISPID_VALUE), propput ]\n    HRESULT Value(\n        [in] VARIANT *varValue);\n\n    [ id(2), propget ]\n    HRESULT Name(\n        [out, retval] BSTR *strName);\n}\n\n[\n    object,\n    local,\n    uuid(cf2376ea-ce8c-11d1-8b05-00600806d9b6),\n    dual,\n    hidden,\n    oleautomation\n]\ninterface ISWbemNamedValueSet : IDispatch\n{\n    [ id(DISPID_NEWENUM), propget, restricted ]\n    HRESULT _NewEnum(\n        [out, retval] IUnknown **pUnk);\n\n    [ id(DISPID_VALUE) ]\n    HRESULT Item(\n        [in] BSTR strName,\n        [in, defaultvalue(0)] long iFlags,\n        [out, retval] ISWbemNamedValue **objWbemNamedValue);\n\n    [ id(1), propget ]\n    HRESULT Count(\n        [out, retval] long *iCount);\n\n    [ id(2) ]\n    HRESULT Add(\n        [in] BSTR strName,\n        [in] VARIANT *varValue,\n        [in, defaultvalue(0)] long iFlags,\n        [out, retval] ISWbemNamedValue **objWbemNamedValue);\n\n    [ id(3) ]\n    HRESULT Remove(\n        [in] BSTR strName,\n        [in, defaultvalue(0)] long iFlags);\n\n    [ id(4) ]\n    HRESULT Clone(\n        [out, retval] ISWbemNamedValueSet **objWbemNamedValueSet);\n\n    [ id(5) ]\n    HRESULT DeleteAll();\n}\n\n[\n    object,\n    local,\n    uuid(76A6415A-CB41-11d1-8B02-00600806D9B6),\n    dual,\n    hidden,\n    oleautomation\n]\ninterface ISWbemObject : IDispatch\n{\n    [ id(1) ]\n    HRESULT Put_(\n        [in, defaultvalue(wbemChangeFlagCreateOrUpdate)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [out, retval] ISWbemObjectPath **objWbemObjectPath);\n\n    [ id(2) ]\n    HRESULT PutAsync_(\n        [in] IDispatch *objWbemSink,\n        [in, defaultvalue(wbemChangeFlagCreateOrUpdate)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);\n\n    [ id (3) ]\n    HRESULT Delete_(\n        [in, defaultvalue(0)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet);\n\n    [ id (4) ]\n    HRESULT DeleteAsync_(\n        [in] IDispatch *objWbemSink,\n        [in, defaultvalue(0)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);\n\n    [ id(5) ]\n    HRESULT Instances_(\n        [in, defaultvalue(wbemFlagReturnImmediately)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [out, retval] ISWbemObjectSet **objWbemObjectSet);\n\n    [ id(6) ]\n    HRESULT InstancesAsync_(\n        [in] IDispatch *objWbemSink,\n        [in, defaultvalue(0)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);\n\n    [ id(7) ]\n    HRESULT Subclasses_(\n        [in, defaultvalue(wbemFlagReturnImmediately|wbemQueryFlagDeep)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [out, retval] ISWbemObjectSet **objWbemObjectSet);\n\n    [ id(8) ]\n    HRESULT SubclassesAsync_(\n        [in] IDispatch *objWbemSink,\n        [in, defaultvalue(wbemQueryFlagDeep)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);\n\n    [ id(9) ]\n    HRESULT Associators_(\n        [in, defaultvalue(\"\")] BSTR strAssocClass,\n        [in, defaultvalue(\"\")] BSTR strResultClass,\n        [in, defaultvalue(\"\")] BSTR strResultRole,\n        [in, defaultvalue(\"\")] BSTR strRole,\n        [in, defaultvalue(FALSE)] VARIANT_BOOL bClassesOnly,\n        [in, defaultvalue(FALSE)] VARIANT_BOOL bSchemaOnly,\n        [in, defaultvalue(\"\")] BSTR strRequiredAssocQualifier,\n        [in, defaultvalue(\"\")] BSTR strRequiredQualifier,\n        [in, defaultvalue(wbemFlagReturnImmediately)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [out, retval] ISWbemObjectSet **objWbemObjectSet);\n\n    [ id(10) ]\n    HRESULT AssociatorsAsync_(\n        [in] IDispatch *objWbemSink,\n        [in, defaultvalue(\"\")] BSTR strAssocClass,\n        [in, defaultvalue(\"\")] BSTR strResultClass,\n        [in, defaultvalue(\"\")] BSTR strResultRole,\n        [in, defaultvalue(\"\")] BSTR strRole,\n        [in, defaultvalue(FALSE)] VARIANT_BOOL bClassesOnly,\n        [in, defaultvalue(FALSE)] VARIANT_BOOL bSchemaOnly,\n        [in, defaultvalue(\"\")] BSTR strRequiredAssocQualifier,\n        [in, defaultvalue(\"\")] BSTR strRequiredQualifier,\n        [in, defaultvalue(0)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);\n\n    [ id(11) ]\n    HRESULT References_(\n        [in, defaultvalue(\"\")] BSTR strResultClass,\n        [in, defaultvalue(\"\")] BSTR strRole,\n        [in, defaultvalue(FALSE)] VARIANT_BOOL bClassesOnly,\n        [in, defaultvalue(FALSE)] VARIANT_BOOL bSchemaOnly,\n        [in, defaultvalue(\"\")] BSTR strRequiredQualifier,\n        [in, defaultvalue(wbemFlagReturnImmediately)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [out, retval] ISWbemObjectSet **objWbemObjectSet);\n\n    [ id(12) ]\n    HRESULT ReferencesAsync_(\n        [in] IDispatch *objWbemSink,\n        [in, defaultvalue(\"\")] BSTR strResultClass,\n        [in, defaultvalue(\"\")] BSTR strRole,\n        [in, defaultvalue(FALSE)] VARIANT_BOOL bClassesOnly,\n        [in, defaultvalue(FALSE)] VARIANT_BOOL bSchemaOnly,\n        [in, defaultvalue(\"\")] BSTR strRequiredQualifier,\n        [in, defaultvalue(0)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);\n\n    [ id(13) ]\n    HRESULT ExecMethod_(\n        [in] BSTR strMethodName,\n        [in, defaultvalue(0)] IDispatch *objWbemInParameters,\n        [in, defaultvalue(0)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [out, retval] ISWbemObject **objWbemOutParameters);\n\n    [ id(14) ]\n    HRESULT ExecMethodAsync_(\n        [in] IDispatch *objWbemSink,\n        [in] BSTR strMethodName,\n        [in, defaultvalue(0)] IDispatch *objWbemInParameters,\n        [in, defaultvalue(0)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);\n\n    [ id(15) ]\n    HRESULT Clone_(\n        [out, retval] ISWbemObject **objWbemObject);\n\n    [ id(16) ]\n    HRESULT GetObjectText_(\n        [in, defaultvalue(0)] long iFlags,\n        [out, retval] BSTR *strObjectText);\n\n    [ id(17) ]\n    HRESULT SpawnDerivedClass_(\n        [in, defaultvalue(0)] long iFlags,\n        [out, retval] ISWbemObject **objWbemObject);\n\n    [ id(18) ]\n    HRESULT SpawnInstance_(\n        [in, defaultvalue(0)] long iFlags,\n        [out, retval] ISWbemObject **objWbemObject);\n\n    [ id(19) ]\n    HRESULT CompareTo_(\n        [in] IDispatch *objWbemObject,\n        [in, defaultvalue(wbemComparisonFlagIncludeAll)] long iFlags,\n        [out, retval] VARIANT_BOOL *bResult);\n\n    [ id(20), propget ]\n    HRESULT Qualifiers_(\n        [out, retval] ISWbemQualifierSet **objWbemQualifierSet);\n\n    [ id(21), propget ]\n    HRESULT Properties_(\n        [out, retval] ISWbemPropertySet **objWbemPropertySet);\n\n    [ id(22), propget ]\n    HRESULT Methods_(\n        [out, retval] ISWbemMethodSet **objWbemMethodSet);\n\n    [ id(23), propget ]\n    HRESULT Derivation_(\n        [out, retval] VARIANT *strClassNameArray);\n\n    [ id(24), propget ]\n    HRESULT Path_(\n        [out, retval] ISWbemObjectPath **objWbemObjectPath);\n\n    [ id(25), propget ]\n    HRESULT Security_(\n        [out, retval] ISWbemSecurity **objWbemSecurity);\n}\n\n[\n    object,\n    local,\n    uuid(5791bc27-ce9c-11d1-97bf-0000f81e849c),\n    dual,\n    hidden,\n    oleautomation,\n    pointer_default(unique)\n]\ninterface ISWbemObjectPath : IDispatch\n{\n    [ id(DISPID_VALUE), propget ]\n    HRESULT Path(\n        [out, retval] BSTR *strPath);\n\n    [ id(DISPID_VALUE), propput ]\n    HRESULT Path(\n        [in] BSTR strPath);\n\n    [ id(1), propget ]\n    HRESULT RelPath(\n        [out, retval] BSTR *strRelPath);\n\n    [ id(1), propput ]\n    HRESULT RelPath(\n        [in] BSTR strRelPath);\n\n    [ id(2), propget ]\n    HRESULT Server(\n        [out, retval] BSTR *strServer);\n\n    [ id(2), propput ]\n    HRESULT Server(\n        [in] BSTR strServer);\n\n    [ id(3), propget ]\n    HRESULT Namespace(\n        [out, retval] BSTR *strNamespace);\n\n    [ id(3), propput ]\n    HRESULT Namespace(\n        [in] BSTR strNamespace);\n\n    [ id(4), propget ]\n    HRESULT ParentNamespace(\n        [out, retval] BSTR *strParentNamespace);\n\n    [ id(5), propget ]\n    HRESULT DisplayName(\n        [out, retval] BSTR *strDisplayName);\n\n    [ id(5), propput ]\n    HRESULT DisplayName(\n        [in] BSTR strDisplayName);\n\n    [ id(6), propget ]\n    HRESULT Class(\n        [out, retval] BSTR *strClass);\n\n    [ id(6), propput ]\n    HRESULT Class(\n        [in] BSTR strClass);\n\n    [ id(7), propget ]\n    HRESULT IsClass(\n        [out, retval] VARIANT_BOOL *bIsClass);\n\n    [ id(8) ]\n    HRESULT SetAsClass();\n\n    [ id(9), propget ]\n    HRESULT IsSingleton(\n        [out, retval] VARIANT_BOOL *bIsSingleton);\n\n    [ id(10) ]\n    HRESULT SetAsSingleton();\n\n    [ id(11), propget ]\n    HRESULT Keys(\n        [out, retval] ISWbemNamedValueSet **objWbemNamedValueSet);\n\n    [ id(12), propget ]\n    HRESULT Security_(\n        [out, retval] ISWbemSecurity **objWbemSecurity);\n\n    [ id(13), propget ]\n    HRESULT Locale(\n        [out, retval] BSTR *strLocale);\n\n    [ id(13), propput ]\n    HRESULT Locale(\n        [in] BSTR strLocale);\n\n    [ id(14), propget ]\n    HRESULT Authority(\n        [out, retval] BSTR *strAuthority);\n\n    [ id(14), propput ]\n    HRESULT Authority(\n        [in] BSTR strAuthority);\n}\n\n[\n    object,\n    local,\n    uuid(76a6415f-cb41-11d1-8b02-00600806d9b6),\n    dual,\n    hidden,\n    oleautomation,\n    nonextensible\n]\ninterface ISWbemObjectSet : IDispatch\n{\n    [ id(DISPID_NEWENUM), propget, restricted ]\n    HRESULT _NewEnum(\n        [out, retval] IUnknown **pUnk);\n\n    [ id(DISPID_VALUE) ]\n    HRESULT Item(\n        [in] BSTR strObjectPath,\n        [in, defaultvalue(0)] long iFlags,\n        [out, retval] ISWbemObject **objWbemObject);\n\n    [ id(1), propget ]\n    HRESULT Count(\n        [out, retval] long *iCount);\n\n    [ id(4), propget ]\n    HRESULT Security_(\n        [out, retval] ISWbemSecurity **objWbemSecurity);\n\n    [ id(5) ]\n    HRESULT ItemIndex(\n        [in] long lIndex,\n        [out, retval] ISWbemObject **objWbemObject);\n}\n\ntypedef\n[\n    v1_enum,\n    uuid(176d2f70-5af3-11d2-8b4a-00600806d9b6)\n]\nenum WbemPrivilegeEnum\n{\n    wbemPrivilegeCreateToken          = 1,\n    wbemPrivilegePrimaryToken         = 2,\n    wbemPrivilegeLockMemory           = 3,\n    wbemPrivilegeIncreaseQuota        = 4,\n    wbemPrivilegeMachineAccount       = 5,\n    wbemPrivilegeTcb                  = 6,\n    wbemPrivilegeSecurity             = 7,\n    wbemPrivilegeTakeOwnership        = 8,\n    wbemPrivilegeLoadDriver           = 9,\n    wbemPrivilegeSystemProfile        = 10,\n    wbemPrivilegeSystemtime           = 11,\n    wbemPrivilegeProfileSingleProcess = 12,\n    wbemPrivilegeIncreaseBasePriority = 13,\n    wbemPrivilegeCreatePagefile       = 14,\n    wbemPrivilegeCreatePermanent      = 15,\n    wbemPrivilegeBackup               = 16,\n    wbemPrivilegeRestore              = 17,\n    wbemPrivilegeShutdown             = 18,\n    wbemPrivilegeDebug                = 19,\n    wbemPrivilegeAudit                = 20,\n    wbemPrivilegeSystemEnvironment    = 21,\n    wbemPrivilegeChangeNotify         = 22,\n    wbemPrivilegeRemoteShutdown       = 23,\n    wbemPrivilegeUndock               = 24,\n    wbemPrivilegeSyncAgent            = 25,\n    wbemPrivilegeEnableDelegation     = 26,\n    wbemPrivilegeManageVolume         = 27\n} WbemPrivilegeEnum;\n\n[\n    object,\n    local,\n    uuid(26ee67bd-5804-11d2-8b4a-00600806d9b6),\n    dual,\n    hidden,\n    oleautomation,\n    nonextensible\n]\ninterface ISWbemPrivilege : IDispatch\n{\n    [ id(DISPID_VALUE), propget ]\n    HRESULT IsEnabled(\n        [out, retval] VARIANT_BOOL *bIsEnabled);\n\n    [ id(DISPID_VALUE), propput ]\n    HRESULT IsEnabled(\n        [in] VARIANT_BOOL bIsEnabled);\n\n    [ id(1), propget ]\n    HRESULT Name(\n        [out, retval] BSTR *strDisplayName);\n\n    [ id(2), propget ]\n    HRESULT DisplayName(\n        [out, retval] BSTR *strDisplayName);\n\n    [ id(3), propget ]\n    HRESULT Identifier(\n        [out, retval] WbemPrivilegeEnum *iPrivilege);\n}\n\n[\n    object,\n    local,\n    uuid(26ee67bf-5804-11d2-8b4a-00600806d9b6),\n    dual,\n    hidden,\n    oleautomation,\n    nonextensible\n]\ninterface ISWbemPrivilegeSet : IDispatch\n{\n    [ id(DISPID_NEWENUM), propget, restricted ]\n    HRESULT _NewEnum(\n        [out, retval] IUnknown **pUnk);\n\n    [ id(DISPID_VALUE) ]\n    HRESULT Item(\n        [in] WbemPrivilegeEnum iPrivilege,\n        [out, retval] ISWbemPrivilege **objWbemPrivilege);\n\n    [ id(1), propget ]\n    HRESULT Count(\n        [out, retval] long *iCount);\n\n    [ id(2) ]\n    HRESULT Add(\n        [in] WbemPrivilegeEnum iPrivilege,\n        [in, defaultvalue(TRUE)] VARIANT_BOOL bIsEnabled,\n        [out, retval] ISWbemPrivilege **objWbemPrivilege);\n\n    [ id(3) ]\n    HRESULT Remove(\n        [in] WbemPrivilegeEnum iPrivilege);\n\n    [ id(4) ]\n    HRESULT DeleteAll();\n\n    [ id(5) ]\n    HRESULT AddAsString(\n        [in] BSTR strPrivilege,\n        [in, defaultvalue(TRUE)] VARIANT_BOOL bIsEnabled,\n        [out, retval] ISWbemPrivilege **objWbemPrivilege);\n}\n\ntypedef\n[\n    v1_enum,\n    uuid(4a249b7b-fc9a-11d1-8b1e-00600806d9b6),\n]\nenum WbemCimtypeEnum\n{\n    wbemCimtypeSint16    = 2,\n    wbemCimtypeSint32    = 3,\n    wbemCimtypeReal32    = 4,\n    wbemCimtypeReal64    = 5,\n    wbemCimtypeString    = 8,\n    wbemCimtypeBoolean   = 11,\n    wbemCimtypeObject    = 13,\n    wbemCimtypeSint8     = 16,\n    wbemCimtypeUint8     = 17,\n    wbemCimtypeUint16    = 18,\n    wbemCimtypeUint32    = 19,\n    wbemCimtypeSint64    = 20,\n    wbemCimtypeUint64    = 21,\n    wbemCimtypeDatetime  = 101,\n    wbemCimtypeReference = 102,\n    wbemCimtypeChar16    = 103\n} WbemCimtypeEnum;\n\n[\n    object,\n    local,\n    uuid(1a388f98-d4ba-11d1-8b09-00600806d9b6),\n    dual,\n    hidden,\n    oleautomation,\n    pointer_default(unique)\n]\ninterface ISWbemProperty : IDispatch\n{\n    [ id(DISPID_VALUE), propget ]\n    HRESULT Value(\n        [out, retval] VARIANT *varValue);\n\n    [ id(DISPID_VALUE), propput ]\n    HRESULT Value(\n        [in] VARIANT *varValue);\n\n    [ id(1), propget ]\n    HRESULT Name(\n        [out, retval] BSTR *strName);\n\n    [ id(2), propget ]\n    HRESULT IsLocal(\n        [out, retval] VARIANT_BOOL *bIsLocal);\n\n    [ id(3), propget ]\n    HRESULT Origin(\n        [out, retval] BSTR *strOrigin);\n\n    [ id(4), propget ]\n    HRESULT CIMType(\n        [out, retval] WbemCimtypeEnum *iCimType);\n\n    [ id(5), propget ]\n    HRESULT Qualifiers_(\n        [out, retval] ISWbemQualifierSet **objWbemQualifierSet);\n\n    [ id(6), propget ]\n    HRESULT IsArray(\n        [out, retval] VARIANT_BOOL *bIsArray);\n}\n\n[\n    object,\n    local,\n    uuid(dea0a7b2-d4ba-11d1-8b09-00600806d9b6),\n    dual,\n    hidden,\n    oleautomation\n]\ninterface ISWbemPropertySet : IDispatch\n{\n    [ id(DISPID_NEWENUM), propget, restricted ]\n    HRESULT _NewEnum(\n        [out, retval] IUnknown **pUnk);\n\n    [ id(DISPID_VALUE) ]\n    HRESULT Item(\n        [in] BSTR strName,\n        [in, defaultvalue(0)] long iFlags,\n        [out, retval] ISWbemProperty **objWbemProperty);\n\n    [ id(1), propget ]\n    HRESULT Count(\n        [out, retval] long *iCount);\n\n    [ id(2) ]\n    HRESULT Add(\n        [in] BSTR strName,\n        [in] WbemCimtypeEnum iCIMType,\n        [in, defaultvalue(FALSE)] VARIANT_BOOL bIsArray,\n        [in, defaultvalue(0)] long iFlags,\n        [out, retval] ISWbemProperty **objWbemProperty);\n\n    [ id(3) ]\n    HRESULT Remove(\n        [in] BSTR strName,\n        [in, defaultvalue(0)] long iFlags);\n}\n\n[\n    object,\n    local,\n    uuid(79b05932-d3b7-11d1-8b06-00600806d9b6),\n    dual,\n    hidden,\n    oleautomation,\n    nonextensible,\n    pointer_default(unique)\n]\ninterface ISWbemQualifier : IDispatch\n{\n    [ id(DISPID_VALUE), propget ]\n    HRESULT Value(\n        [out, retval] VARIANT *varValue);\n\n    [ id(DISPID_VALUE), propput ]\n    HRESULT Value(\n        [in] VARIANT *varValue);\n\n    [ id(1), propget ]\n    HRESULT Name(\n        [out, retval] BSTR *strName);\n\n    [ id(2), propget ]\n    HRESULT IsLocal(\n        [out, retval] VARIANT_BOOL *bIsLocal);\n\n    [ id(3), propget ]\n    HRESULT PropagatesToSubclass(\n        [out, retval] VARIANT_BOOL *bPropagatesToSubclass);\n\n    [ id(3), propput ]\n    HRESULT PropagatesToSubclass(\n        [in] VARIANT_BOOL bPropagatesToSubclass);\n\n    [ id(4), propget ]\n    HRESULT PropagatesToInstance(\n        [out, retval] VARIANT_BOOL *bPropagatesToInstance);\n\n    [ id(4), propput ]\n    HRESULT PropagatesToInstance(\n        [in] VARIANT_BOOL bPropagatesToInstance);\n\n    [ id(5), propget ]\n    HRESULT IsOverridable(\n        [out, retval] VARIANT_BOOL *bIsOverridable);\n\n    [ id(5), propput ]\n    HRESULT IsOverridable(\n        [in] VARIANT_BOOL bIsOverridable);\n\n    [ id(6), propget ]\n    HRESULT IsAmended(\n        [out, retval] VARIANT_BOOL *bIsAmended);\n}\n\n[\n    object,\n    local,\n    uuid(9b16ed16-d3df-11d1-8b08-00600806d9b6),\n    dual,\n    hidden,\n    oleautomation,\n    nonextensible\n]\ninterface ISWbemQualifierSet : IDispatch\n{\n    [ id(DISPID_NEWENUM), propget, restricted ]\n    HRESULT _NewEnum(\n        [out, retval] IUnknown **pUnk);\n\n    [ id(DISPID_VALUE) ]\n    HRESULT Item(\n        [in] BSTR name,\n        [in, defaultvalue(0)] long iFlags,\n        [out, retval] ISWbemQualifier **objWbemQualifier);\n\n    [ id(1), propget ]\n    HRESULT Count(\n        [out, retval] long *iCount);\n\n    [ id(2) ]\n    HRESULT Add(\n        [in] BSTR strName,\n        [in] VARIANT *varVal,\n        [in, defaultvalue(TRUE)] VARIANT_BOOL bPropagatesToSubclass,\n        [in, defaultvalue(TRUE)] VARIANT_BOOL bPropagatesToInstance,\n        [in, defaultvalue(TRUE)] VARIANT_BOOL bIsOverridable,\n        [in, defaultvalue(0)] long iFlags,\n        [out, retval] ISWbemQualifier **objWbemQualifier);\n\n    [ id(3) ]\n    HRESULT Remove(\n        [in] BSTR strName,\n        [in, defaultvalue(0)] long iFlags);\n}\n\ntypedef\n[\n    v1_enum,\n    uuid(b54d66e8-2287-11d2-8b33-00600806d9b6)\n]\nenum WbemImpersonationLevelEnum\n{\n    wbemImpersonationLevelAnonymous   = 1,\n    wbemImpersonationLevelIdentify    = 2,\n    wbemImpersonationLevelImpersonate = 3,\n    wbemImpersonationLevelDelegate    = 4\n} WbemImpersonationLevelEnum;\n\ntypedef\n[\n    v1_enum,\n    uuid(b54d66e7-2287-11d2-8b33-00600806d9b6)\n]\nenum WbemAuthenticationLevelEnum\n{\n    wbemAuthenticationLevelDefault      = 0,\n    wbemAuthenticationLevelNone         = 1,\n    wbemAuthenticationLevelConnect      = 2,\n    wbemAuthenticationLevelCall         = 3,\n    wbemAuthenticationLevelPkt          = 4,\n    wbemAuthenticationLevelPktIntegrity = 5,\n    wbemAuthenticationLevelPktPrivacy   = 6\n} WbemAuthenticationLevelEnum;\n\n[\n    object,\n    local,\n    uuid(b54d66e6-2287-11d2-8b33-00600806d9b6),\n    dual,\n    hidden,\n    oleautomation,\n    nonextensible\n]\ninterface ISWbemSecurity : IDispatch\n{\n    [ id(1), propget ]\n    HRESULT ImpersonationLevel(\n        [out, retval] WbemImpersonationLevelEnum *iImpersonationLevel);\n\n    [ id(1), propput ]\n    HRESULT ImpersonationLevel(\n        [in] WbemImpersonationLevelEnum iImpersonationLevel);\n\n    [ id(2), propget ]\n    HRESULT AuthenticationLevel(\n        [out, retval] WbemAuthenticationLevelEnum *iAuthenticationLevel);\n\n    [ id(2), propput ]\n    HRESULT AuthenticationLevel(\n        [in] WbemAuthenticationLevelEnum iAuthenticationLevel);\n\n    [ id(3), propget ]\n    HRESULT Privileges(\n        [out, retval] ISWbemPrivilegeSet **objWbemPrivilegeSet);\n}\n\n[\n    object,\n    local,\n    uuid(76a6415c-cb41-11d1-8b02-00600806d9b6),\n    dual,\n    hidden,\n    oleautomation,\n    pointer_default(unique)\n]\ninterface ISWbemServices : IDispatch\n{\n    [ id(1) ]\n    HRESULT Get(\n        [in, defaultvalue(\"\")] BSTR strObjectPath,\n        [in, defaultvalue(0)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [out, retval] ISWbemObject **objWbemObject);\n\n    [ id(2) ]\n    HRESULT GetAsync(\n        [in] IDispatch *objWbemSink,\n        [in, defaultvalue(\"\")] BSTR strObjectPath,\n        [in, defaultvalue(0)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);\n\n    [ id(3) ]\n    HRESULT Delete(\n        [in] BSTR strObjectPath,\n        [in, defaultvalue(0)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet);\n\n    [ id(4) ]\n    HRESULT DeleteAsync(\n        [in] IDispatch *objWbemSink,\n        [in] BSTR strObjectPath,\n        [in, defaultvalue(0)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);\n\n    [ id(5) ]\n    HRESULT InstancesOf(\n        [in] BSTR strClass,\n        [in, defaultvalue(wbemFlagReturnImmediately)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [out, retval] ISWbemObjectSet **objWbemObjectSet);\n\n    [ id(6) ]\n    HRESULT InstancesOfAsync(\n        [in] IDispatch *objWbemSink,\n        [in] BSTR strClass,\n        [in, defaultvalue(0)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);\n\n    [ id(7) ]\n    HRESULT SubclassesOf(\n        [in, defaultvalue(\"\")]  BSTR strSuperclass,\n        [in, defaultvalue(wbemFlagReturnImmediately|wbemQueryFlagDeep)]  long iFlags,\n        [in, defaultvalue(0)]  IDispatch *objWbemNamedValueSet,\n        [out, retval] ISWbemObjectSet **objWbemObjectSet);\n\n    [ id(8) ]\n    HRESULT SubclassesOfAsync(\n        [in] IDispatch *objWbemSink,\n        [in, defaultvalue(\"\")] BSTR strSuperclass,\n        [in, defaultvalue(wbemQueryFlagDeep)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);\n\n    [ id(9) ]\n    HRESULT ExecQuery(\n        [in] BSTR strQuery,\n        [in, defaultvalue(\"WQL\")] BSTR strQueryLanguage,\n        [in, defaultvalue(wbemFlagReturnImmediately)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [out, retval] ISWbemObjectSet **objWbemObjectSet);\n\n    [ id(10) ]\n    HRESULT ExecQueryAsync(\n        [in] IDispatch *objWbemSink,\n        [in] BSTR strQuery,\n        [in, defaultvalue(\"WQL\")] BSTR strQueryLanguage,\n        [in, defaultvalue(0)] long lFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);\n\n    [ id(11) ]\n    HRESULT AssociatorsOf(\n        [in] BSTR strObjectPath,\n        [in, defaultvalue(\"\")] BSTR strAssocClass,\n        [in, defaultvalue(\"\")] BSTR strResultClass,\n        [in, defaultvalue(\"\")] BSTR strResultRole,\n        [in, defaultvalue(\"\")] BSTR strRole,\n        [in, defaultvalue(FALSE)] VARIANT_BOOL bClassesOnly,\n        [in, defaultvalue(FALSE)] VARIANT_BOOL bSchemaOnly,\n        [in, defaultvalue(\"\")] BSTR strRequiredAssocQualifier,\n        [in, defaultvalue(\"\")] BSTR strRequiredQualifier,\n        [in, defaultvalue(wbemFlagReturnImmediately)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [out, retval] ISWbemObjectSet **objWbemObjectSet);\n\n    [ id(12) ]\n    HRESULT AssociatorsOfAsync(\n        [in] IDispatch *objWbemSink,\n        [in] BSTR strObjectPath,\n        [in, defaultvalue(\"\")] BSTR strAssocClass,\n        [in, defaultvalue(\"\")] BSTR strResultClass,\n        [in, defaultvalue(\"\")] BSTR strResultRole,\n        [in, defaultvalue(\"\")] BSTR strRole,\n        [in, defaultvalue(FALSE)] VARIANT_BOOL bClassesOnly,\n        [in, defaultvalue(FALSE)] VARIANT_BOOL bSchemaOnly,\n        [in, defaultvalue(\"\")] BSTR strRequiredAssocQualifier,\n        [in, defaultvalue(\"\")] BSTR strRequiredQualifier,\n        [in, defaultvalue(0)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);\n\n    [ id(13) ]\n    HRESULT ReferencesTo(\n        [in] BSTR strObjectPath,\n        [in, defaultvalue(\"\")] BSTR strResultClass,\n        [in, defaultvalue(\"\")] BSTR strRole,\n        [in, defaultvalue(FALSE)] VARIANT_BOOL bClassesOnly,\n        [in, defaultvalue(FALSE)] VARIANT_BOOL bSchemaOnly,\n        [in, defaultvalue(\"\")] BSTR strRequiredQualifier,\n        [in, defaultvalue(wbemFlagReturnImmediately)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [out, retval] ISWbemObjectSet **objWbemObjectSet);\n\n    [ id(14) ]\n    HRESULT ReferencesToAsync(\n        [in] IDispatch *objWbemSink,\n        [in] BSTR strObjectPath,\n        [in, defaultvalue(\"\")] BSTR strResultClass,\n        [in, defaultvalue(\"\")] BSTR strRole,\n        [in, defaultvalue(FALSE)] VARIANT_BOOL bClassesOnly,\n        [in, defaultvalue(FALSE)] VARIANT_BOOL bSchemaOnly,\n        [in, defaultvalue(\"\")] BSTR strRequiredQualifier,\n        [in, defaultvalue(0)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);\n\n    [ id(15) ]\n    HRESULT ExecNotificationQuery(\n        [in] BSTR strQuery,\n        [in, defaultvalue(\"WQL\")] BSTR strQueryLanguage,\n        [in, defaultvalue(wbemFlagReturnImmediately|wbemFlagForwardOnly)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [out, retval] ISWbemEventSource **objWbemEventSource);\n\n    [ id(16) ]\n    HRESULT ExecNotificationQueryAsync(\n        [in] IDispatch *objWbemSink,\n        [in] BSTR strQuery,\n        [in, defaultvalue(\"WQL\")] BSTR strQueryLanguage,\n        [in, defaultvalue(0)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);\n\n    [ id(17) ]\n    HRESULT ExecMethod(\n        [in] BSTR strObjectPath,\n        [in] BSTR strMethodName,\n        [in, defaultvalue(0)] IDispatch *objWbemInParameters,\n        [in, defaultvalue(0)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [out, retval] ISWbemObject **objWbemOutParameters);\n\n    [ id(18) ]\n    HRESULT ExecMethodAsync(\n        [in] IDispatch *objWbemSink,\n        [in] BSTR strObjectPath,\n        [in] BSTR strMethodName,\n        [in, defaultvalue(0)] IDispatch *objWbemInParameters,\n        [in, defaultvalue(0)] long iFlags,\n        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,\n        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);\n\n    [ id(19), propget ]\n    HRESULT Security_(\n        [out, retval] ISWbemSecurity **objWbemSecurity);\n}\n\n[\n    threading(apartment),\n    uuid(76a64158-cb41-11d1-8b02-00600806d9b6),\n    progid(\"WbemScripting.SWbemLocator.1\"),\n    vi_progid(\"WbemScripting.SWbemLocator\")\n]\ncoclass SWbemLocator\n{\n    interface ISWbemLocator;\n}\n\n} /* WbemScripting */\n"
  },
  {
    "path": "wine/windows/wbemprov.idl",
    "content": "/*\n * Copyright 2012 Hans Leidekker for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n[\n    uuid(092df710-7010-11d1-ad90-00c04fd8fdff)\n]\nlibrary WbemProviders_v1\n{\n    [\n        uuid(cb8555cc-9128-11d1-ad9b-00c04fd8fdff)\n    ]\n    coclass WbemAdministrativeLocator { interface IWbemLocator; }\n}\n"
  },
  {
    "path": "wine/windows/wct.h",
    "content": "/*\n * Copyright 2015 Hans Leidekker for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WCT_H\n#define __WINE_WCT_H\n\ntypedef HRESULT (WINAPI *PCOGETCALLSTATE)(int,PULONG);\ntypedef HRESULT (WINAPI *PCOGETACTIVATIONSTATE)(GUID,DWORD,DWORD*);\n\nvoid WINAPI RegisterWaitChainCOMCallback(PCOGETCALLSTATE,PCOGETACTIVATIONSTATE);\n\n#endif /* __WINE_WCT_H */\n"
  },
  {
    "path": "wine/windows/webservices.h",
    "content": "/*\n * Copyright 2015 Nikolay Sivov for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WEBSERVICES_H\n#define __WINE_WEBSERVICES_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif  /* __cplusplus */\n\ntypedef struct _WS_ERROR WS_ERROR;\ntypedef struct _WS_HEAP WS_HEAP;\ntypedef struct _WS_XML_BUFFER WS_XML_BUFFER;\ntypedef struct _WS_XML_READER WS_XML_READER;\ntypedef struct _WS_XML_WRITER WS_XML_WRITER;\ntypedef struct _WS_PROXY_PROPERTY WS_PROXY_PROPERTY;\ntypedef struct _WS_SECURITY_DESCRIPTION WS_SECURITY_DESCRIPTION;\ntypedef struct _WS_CHANNEL_PROPERTY WS_CHANNEL_PROPERTY;\ntypedef struct _WS_SERVICE_PROXY WS_SERVICE_PROXY;\ntypedef struct _WS_SECURITY_BINDING_PROPERTY WS_SECURITY_BINDING_PROPERTY;\ntypedef struct _WS_SECURITY_PROPERTY WS_SECURITY_PROPERTY;\ntypedef struct _WS_SECURITY_PROPERTIES WS_SECURITY_PROPERTIES;\ntypedef struct _WS_SECURITY_BINDING WS_SECURITY_BINDING;\ntypedef struct _WS_CHANNEL WS_CHANNEL;\ntypedef struct _WS_MESSAGE_PROPERTY WS_MESSAGE_PROPERTY;\ntypedef struct _WS_MESSAGE_PROPERTIES WS_MESSAGE_PROPERTIES;\ntypedef struct _WS_HTTP_BINDING_TEMPLATE WS_HTTP_BINDING_TEMPLATE;\ntypedef struct _WS_HTTP_SSL_BINDING_TEMPLATE WS_HTTP_SSL_BINDING_TEMPLATE;\ntypedef struct _WS_CHANNEL_PROPERTIES WS_CHANNEL_PROPERTIES;\ntypedef struct _WS_SSL_TRANSPORT_SECURITY_BINDING_TEMPLATE WS_SSL_TRANSPORT_SECURITY_BINDING_TEMPLATE;\ntypedef struct _WS_SECURITY_BINDING_PROPERTIES WS_SECURITY_BINDING_PROPERTIES;\ntypedef struct _WS_CERT_CREDENTIAL WS_CERT_CREDENTIAL;\ntypedef struct _WS_ENDPOINT_ADDRESS WS_ENDPOINT_ADDRESS;\ntypedef struct _WS_ENDPOINT_IDENTITY WS_ENDPOINT_IDENTITY;\ntypedef struct _WS_ENUM_DESCRIPTION WS_ENUM_DESCRIPTION;\ntypedef struct _WS_ENUM_VALUE WS_ENUM_VALUE;\ntypedef struct _WS_HTTP_POLICY_DESCRIPTION WS_HTTP_POLICY_DESCRIPTION;\ntypedef struct _WS_MESSAGE WS_MESSAGE;\ntypedef struct _WS_MESSAGE_DESCRIPTION WS_MESSAGE_DESCRIPTION;\ntypedef struct _WS_OPERATION_DESCRIPTION WS_OPERATION_DESCRIPTION;\ntypedef struct _WS_PARAMETER_DESCRIPTION WS_PARAMETER_DESCRIPTION;\ntypedef struct _WS_OPERATION_CONTEXT WS_OPERATION_CONTEXT;\ntypedef struct _WS_CALL_PROPERTY WS_CALL_PROPERTY;\ntypedef struct _WS_FLOAT_DESCRIPTION WS_FLOAT_DESCRIPTION;\ntypedef struct _WS_DOUBLE_DESCRIPTION WS_DOUBLE_DESCRIPTION;\ntypedef struct _WS_DATETIME WS_DATETIME;\ntypedef struct _WS_XML_DATETIME_TEXT WS_XML_DATETIME_TEXT;\ntypedef struct _WS_XML_BASE64_TEXT WS_XML_BASE64_TEXT;\ntypedef struct _WS_DATETIME_DESCRIPTION WS_DATETIME_DESCRIPTION;\ntypedef struct _WS_GUID_DESCRIPTION WS_GUID_DESCRIPTION;\ntypedef struct _WS_UNIQUE_ID_DESCRIPTION WS_UNIQUE_ID_DESCRIPTION;\ntypedef struct _WS_BYTES_DESCRIPTION WS_BYTES_DESCRIPTION;\ntypedef struct _WS_URL WS_URL;\ntypedef struct _WS_HTTP_URL WS_HTTP_URL;\ntypedef struct _WS_HTTPS_URL WS_HTTPS_URL;\ntypedef struct _WS_NETTCP_URL WS_NETTCP_URL;\ntypedef struct _WS_SOAPUDP_URL WS_SOAPUDP_URL;\ntypedef struct _WS_NETPIPE_URL WS_NETPIPE_URL;\ntypedef struct _WS_CUSTOM_CHANNEL_CALLBACKS WS_CUSTOM_CHANNEL_CALLBACKS;\ntypedef struct _WS_CHANNEL_ENCODER WS_CHANNEL_ENCODER;\ntypedef struct _WS_CHANNEL_DECODER WS_CHANNEL_DECODER;\ntypedef struct _WS_CUSTOM_HTTP_PROXY WS_CUSTOM_HTTP_PROXY;\ntypedef struct _WS_HTTP_MESSAGE_MAPPING WS_HTTP_MESSAGE_MAPPING;\ntypedef struct _WS_HTTP_HEADER_MAPPING WS_HTTP_HEADER_MAPPING;\ntypedef struct _WS_HTTP_REDIRECT_CALLBACK_CONTEXT WS_HTTP_REDIRECT_CALLBACK_CONTEXT;\ntypedef struct _WS_PROXY_MESSAGE_CALLBACK_CONTEXT WS_PROXY_MESSAGE_CALLBACK_CONTEXT;\ntypedef struct _WS_LISTENER WS_LISTENER;\ntypedef struct _WS_LISTENER_PROPERTY WS_LISTENER_PROPERTY;\ntypedef struct _WS_DISALLOWED_USER_AGENT_SUBSTRINGS WS_DISALLOWED_USER_AGENT_SUBSTRINGS;\ntypedef struct _WS_LISTENER_PROPERTIES WS_LISTENER_PROPERTIES;\ntypedef struct _WS_CUSTOM_LISTENER_CALLBACKS WS_CUSTOM_LISTENER_CALLBACKS;\n\nstruct _WS_STRUCT_DESCRIPTION;\nstruct _WS_XML_STRING;\n\ntypedef enum {\n    WS_ERROR_PROPERTY_STRING_COUNT,\n    WS_ERROR_PROPERTY_ORIGINAL_ERROR_CODE,\n    WS_ERROR_PROPERTY_LANGID\n} WS_ERROR_PROPERTY_ID;\n\ntypedef struct _WS_ERROR_PROPERTY {\n    WS_ERROR_PROPERTY_ID id;\n    void                *value;\n    ULONG                valueSize;\n} WS_ERROR_PROPERTY;\n\ntypedef enum {\n    WS_HEAP_PROPERTY_MAX_SIZE,\n    WS_HEAP_PROPERTY_TRIM_SIZE,\n    WS_HEAP_PROPERTY_REQUESTED_SIZE,\n    WS_HEAP_PROPERTY_ACTUAL_SIZE\n} WS_HEAP_PROPERTY_ID;\n\ntypedef struct _WS_HEAP_PROPERTY {\n    WS_HEAP_PROPERTY_ID id;\n    void               *value;\n    ULONG               valueSize;\n} WS_HEAP_PROPERTY;\n\ntypedef ULONG WS_XML_BUFFER_PROPERTY_ID;\n\ntypedef struct _WS_XML_BUFFER_PROPERTY {\n    WS_XML_BUFFER_PROPERTY_ID id;\n    void                     *value;\n    ULONG                     valueSize;\n} WS_XML_BUFFER_PROPERTY;\n\ntypedef enum {\n    WS_XML_READER_PROPERTY_MAX_DEPTH,\n    WS_XML_READER_PROPERTY_ALLOW_FRAGMENT,\n    WS_XML_READER_PROPERTY_MAX_ATTRIBUTES,\n    WS_XML_READER_PROPERTY_READ_DECLARATION,\n    WS_XML_READER_PROPERTY_CHARSET,\n    WS_XML_READER_PROPERTY_ROW,\n    WS_XML_READER_PROPERTY_COLUMN,\n    WS_XML_READER_PROPERTY_UTF8_TRIM_SIZE,\n    WS_XML_READER_PROPERTY_STREAM_BUFFER_SIZE,\n    WS_XML_READER_PROPERTY_IN_ATTRIBUTE,\n    WS_XML_READER_PROPERTY_STREAM_MAX_ROOT_MIME_PART_SIZE,\n    WS_XML_READER_PROPERTY_STREAM_MAX_MIME_HEADERS_SIZE,\n    WS_XML_READER_PROPERTY_MAX_MIME_PARTS,\n    WS_XML_READER_PROPERTY_ALLOW_INVALID_CHARACTER_REFERENCES,\n    WS_XML_READER_PROPERTY_MAX_NAMESPACES\n} WS_XML_READER_PROPERTY_ID;\n\ntypedef struct _WS_XML_READER_PROPERTY {\n    WS_XML_READER_PROPERTY_ID id;\n    void                     *value;\n    ULONG                     valueSize;\n} WS_XML_READER_PROPERTY;\n\ntypedef enum {\n    WS_XML_WRITER_PROPERTY_MAX_DEPTH,\n    WS_XML_WRITER_PROPERTY_ALLOW_FRAGMENT,\n    WS_XML_WRITER_PROPERTY_MAX_ATTRIBUTES,\n    WS_XML_WRITER_PROPERTY_WRITE_DECLARATION,\n    WS_XML_WRITER_PROPERTY_INDENT,\n    WS_XML_WRITER_PROPERTY_BUFFER_TRIM_SIZE,\n    WS_XML_WRITER_PROPERTY_CHARSET,\n    WS_XML_WRITER_PROPERTY_BUFFERS,\n    WS_XML_WRITER_PROPERTY_BUFFER_MAX_SIZE,\n    WS_XML_WRITER_PROPERTY_BYTES,\n    WS_XML_WRITER_PROPERTY_IN_ATTRIBUTE,\n    WS_XML_WRITER_PROPERTY_MAX_MIME_PARTS_BUFFER_SIZE,\n    WS_XML_WRITER_PROPERTY_INITIAL_BUFFER,\n    WS_XML_WRITER_PROPERTY_ALLOW_INVALID_CHARACTER_REFERENCES,\n    WS_XML_WRITER_PROPERTY_MAX_NAMESPACES,\n    WS_XML_WRITER_PROPERTY_BYTES_WRITTEN,\n    WS_XML_WRITER_PROPERTY_BYTES_TO_CLOSE,\n    WS_XML_WRITER_PROPERTY_COMPRESS_EMPTY_ELEMENTS,\n    WS_XML_WRITER_PROPERTY_EMIT_UNCOMPRESSED_EMPTY_ELEMENTS\n} WS_XML_WRITER_PROPERTY_ID;\n\ntypedef struct _WS_XML_WRITER_PROPERTY {\n    WS_XML_WRITER_PROPERTY_ID id;\n    void                     *value;\n    ULONG                     valueSize;\n} WS_XML_WRITER_PROPERTY;\n\ntypedef struct _WS_BYTES {\n    ULONG length;\n    BYTE *bytes;\n} WS_BYTES;\n\ntypedef struct _WS_BUFFERS {\n    ULONG bufferCount;\n    WS_BYTES *buffers;\n} WS_BUFFERS;\n\ntypedef enum {\n    WS_XML_READER_ENCODING_TYPE_TEXT   = 1,\n    WS_XML_READER_ENCODING_TYPE_BINARY = 2,\n    WS_XML_READER_ENCODING_TYPE_MTOM   = 3,\n    WS_XML_READER_ENCODING_TYPE_RAW    = 4\n} WS_XML_READER_ENCODING_TYPE;\n\ntypedef struct _WS_XML_READER_ENCODING {\n    WS_XML_READER_ENCODING_TYPE encodingType;\n} WS_XML_READER_ENCODING;\n\ntypedef enum {\n    WS_XML_WRITER_ENCODING_TYPE_TEXT   = 1,\n    WS_XML_WRITER_ENCODING_TYPE_BINARY = 2,\n    WS_XML_WRITER_ENCODING_TYPE_MTOM   = 3,\n    WS_XML_WRITER_ENCODING_TYPE_RAW    = 4\n} WS_XML_WRITER_ENCODING_TYPE;\n\ntypedef struct _WS_XML_WRITER_ENCODING {\n    WS_XML_WRITER_ENCODING_TYPE encodingType;\n} WS_XML_WRITER_ENCODING;\n\ntypedef enum {\n    WS_CHARSET_AUTO,\n    WS_CHARSET_UTF8,\n    WS_CHARSET_UTF16LE,\n    WS_CHARSET_UTF16BE\n} WS_CHARSET;\n\ntypedef struct _WS_XML_DICTIONARY {\n    GUID                   guid;\n    struct _WS_XML_STRING *strings;\n    ULONG                  stringCount;\n    BOOL                   isConst;\n} WS_XML_DICTIONARY;\n\ntypedef struct _WS_XML_STRING {\n    ULONG              length;\n    BYTE              *bytes;\n    WS_XML_DICTIONARY *dictionary;\n    ULONG              id;\n} WS_XML_STRING;\n\ntypedef struct _WS_XML_READER_TEXT_ENCODING {\n    WS_XML_READER_ENCODING encoding;\n    WS_CHARSET charSet;\n} WS_XML_READER_TEXT_ENCODING;\n\ntypedef struct _WS_XML_READER_BINARY_ENCODING {\n    WS_XML_READER_ENCODING encoding;\n    WS_XML_DICTIONARY *staticDictionary;\n    WS_XML_DICTIONARY *dynamicDictionary;\n} WS_XML_READER_BINARY_ENCODING;\n\ntypedef struct _WS_XML_WRITER_TEXT_ENCODING {\n    WS_XML_WRITER_ENCODING encoding;\n    WS_CHARSET charSet;\n} WS_XML_WRITER_TEXT_ENCODING;\n\ntypedef HRESULT (CALLBACK *WS_DYNAMIC_STRING_CALLBACK)\n    (void*, const WS_XML_STRING*, BOOL*, ULONG*, WS_ERROR*);\n\ntypedef struct _WS_XML_WRITER_BINARY_ENCODING {\n    WS_XML_WRITER_ENCODING encoding;\n    WS_XML_DICTIONARY *staticDictionary;\n    WS_DYNAMIC_STRING_CALLBACK dynamicStringCallback;\n    void *dynamicStringCallbackState;\n} WS_XML_WRITER_BINARY_ENCODING;\n\ntypedef enum {\n    WS_XML_READER_INPUT_TYPE_BUFFER = 1,\n    WS_XML_READER_INPUT_TYPE_STREAM = 2\n} WS_XML_READER_INPUT_TYPE;\n\ntypedef enum {\n    WS_XML_WRITER_OUTPUT_TYPE_BUFFER = 1,\n    WS_XML_WRITER_OUTPUT_TYPE_STREAM = 2\n} WS_XML_WRITER_OUTPUT_TYPE;\n\ntypedef struct _WS_XML_READER_INPUT {\n    WS_XML_READER_INPUT_TYPE inputType;\n} WS_XML_READER_INPUT;\n\ntypedef struct _WS_XML_WRITER_OUTPUT {\n    WS_XML_WRITER_OUTPUT_TYPE outputType;\n} WS_XML_WRITER_OUTPUT;\n\ntypedef struct _WS_XML_READER_BUFFER_INPUT {\n    WS_XML_READER_INPUT input;\n    void *encodedData;\n    ULONG encodedDataSize;\n} WS_XML_READER_BUFFER_INPUT;\n\ntypedef struct _WS_XML_WRITER_BUFFER_OUTPUT {\n    WS_XML_WRITER_OUTPUT output;\n} WS_XML_WRITER_BUFFER_OUTPUT;\n\ntypedef enum {\n    WS_SHORT_CALLBACK,\n    WS_LONG_CALLBACK\n} WS_CALLBACK_MODEL;\n\ntypedef void (CALLBACK *WS_ASYNC_CALLBACK)\n    (HRESULT, WS_CALLBACK_MODEL, void *);\n\ntypedef struct _WS_ASYNC_CONTEXT {\n    WS_ASYNC_CALLBACK callback;\n    void             *callbackState;\n} WS_ASYNC_CONTEXT;\n\ntypedef HRESULT (CALLBACK *WS_READ_CALLBACK)\n    (void*, void*, ULONG, ULONG*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_WRITE_CALLBACK)\n    (void*, const WS_BYTES*, ULONG, const WS_ASYNC_CONTEXT*, WS_ERROR*);\n\ntypedef struct _WS_XML_READER_STREAM_INPUT {\n    WS_XML_READER_INPUT input;\n    WS_READ_CALLBACK readCallback;\n    void *readCallbackState;\n} WS_XML_READER_STREAM_INPUT;\n\ntypedef enum {\n    WS_ELEMENT_TYPE_MAPPING         = 1,\n    WS_ATTRIBUTE_TYPE_MAPPING       = 2,\n    WS_ELEMENT_CONTENT_TYPE_MAPPING = 3,\n    WS_ANY_ELEMENT_TYPE_MAPPING     = 4\n} WS_TYPE_MAPPING;\n\ntypedef enum {\n    WS_BOOL_TYPE,\n    WS_INT8_TYPE,\n    WS_INT16_TYPE,\n    WS_INT32_TYPE,\n    WS_INT64_TYPE,\n    WS_UINT8_TYPE,\n    WS_UINT16_TYPE,\n    WS_UINT32_TYPE,\n    WS_UINT64_TYPE,\n    WS_FLOAT_TYPE,\n    WS_DOUBLE_TYPE,\n    WS_DECIMAL_TYPE,\n    WS_DATETIME_TYPE,\n    WS_TIMESPAN_TYPE,\n    WS_GUID_TYPE,\n    WS_UNIQUE_ID_TYPE,\n    WS_STRING_TYPE,\n    WS_WSZ_TYPE,\n    WS_BYTES_TYPE,\n    WS_XML_STRING_TYPE,\n    WS_XML_QNAME_TYPE,\n    WS_XML_BUFFER_TYPE,\n    WS_CHAR_ARRAY_TYPE,\n    WS_UTF8_ARRAY_TYPE,\n    WS_BYTE_ARRAY_TYPE,\n    WS_DESCRIPTION_TYPE,\n    WS_STRUCT_TYPE,\n    WS_CUSTOM_TYPE,\n    WS_ENDPOINT_ADDRESS_TYPE,\n    WS_FAULT_TYPE,\n    WS_VOID_TYPE,\n    WS_ENUM_TYPE,\n    WS_DURATION_TYPE,\n    WS_UNION_TYPE,\n    WS_ANY_ATTRIBUTES_TYPE\n} WS_TYPE;\n\ntypedef enum {\n    WS_READ_REQUIRED_VALUE   = 1,\n    WS_READ_REQUIRED_POINTER = 2,\n    WS_READ_OPTIONAL_POINTER = 3,\n    WS_READ_NILLABLE_POINTER = 4,\n    WS_READ_NILLABLE_VALUE   = 5\n} WS_READ_OPTION;\n\ntypedef enum {\n    WS_WRITE_REQUIRED_VALUE   = 1,\n    WS_WRITE_REQUIRED_POINTER = 2,\n    WS_WRITE_NILLABLE_VALUE   = 3,\n    WS_WRITE_NILLABLE_POINTER = 4\n} WS_WRITE_OPTION;\n\ntypedef struct _WS_BOOL_DESCRIPTION {\n    BOOL value;\n} WS_BOOL_DESCRIPTION;\n\ntypedef struct _WS_INT8_DESCRIPTION {\n    char minValue;\n    char maxValue;\n} WS_INT8_DESCRIPTION;\n\ntypedef struct _WS_INT16_DESCRIPTION {\n    short minValue;\n    short maxValue;\n} WS_INT16_DESCRIPTION;\n\ntypedef struct _WS_INT32_DESCRIPTION {\n    int minValue;\n    int maxValue;\n} WS_INT32_DESCRIPTION;\n\ntypedef struct _WS_INT64_DESCRIPTION {\n    __int64 DECLSPEC_ALIGN(8) minValue;\n    __int64 DECLSPEC_ALIGN(8) maxValue;\n} WS_INT64_DESCRIPTION;\n\ntypedef struct _WS_UINT8_DESCRIPTION {\n    BYTE minValue;\n    BYTE maxValue;\n} WS_UINT8_DESCRIPTION;\n\ntypedef struct _WS_UINT16_DESCRIPTION {\n    USHORT minValue;\n    USHORT maxValue;\n} WS_UINT16_DESCRIPTION;\n\ntypedef struct _WS_UINT32_DESCRIPTION {\n    ULONG minValue;\n    ULONG maxValue;\n} WS_UINT32_DESCRIPTION;\n\ntypedef struct _WS_UINT64_DESCRIPTION {\n    unsigned __int64 DECLSPEC_ALIGN(8) minValue;\n    unsigned __int64 DECLSPEC_ALIGN(8) maxValue;\n} WS_UINT64_DESCRIPTION;\n\ntypedef struct _WS_WSZ_DESCRIPTION {\n    ULONG minCharCount;\n    ULONG maxCharCount;\n} WS_WSZ_DESCRIPTION;\n\ntypedef struct _WS_STRING_DESCRIPTION {\n    ULONG minCharCount;\n    ULONG maxCharCount;\n} WS_STRING_DESCRIPTION;\n\ntypedef struct _WS_XML_STRING_DESCRIPTION {\n    ULONG minByteCount;\n    ULONG maxByteCount;\n} WS_XML_STRING_DESCRIPTION;\n\ntypedef struct _WS_XML_QNAME_DESCRIPTION {\n    ULONG minLocalNameByteCount;\n    ULONG maxLocalNameByteCount;\n    ULONG minNsByteCount;\n    ULONG maxNsByteCount;\n} WS_XML_QNAME_DESCRIPTION;\n\nstruct _WS_ENUM_VALUE {\n    int value;\n    WS_XML_STRING *name;\n};\n\nstruct _WS_ENUM_DESCRIPTION {\n    WS_ENUM_VALUE *values;\n    ULONG valueCount;\n    ULONG maxByteCount;\n    ULONG *nameIndices;\n};\n\nstruct _WS_FLOAT_DESCRIPTION {\n    float minValue;\n    float maxValue;\n};\n\nstruct _WS_DOUBLE_DESCRIPTION {\n    double DECLSPEC_ALIGN(8) minValue;\n    double DECLSPEC_ALIGN(8) maxValue;\n};\n\nstruct _WS_GUID_DESCRIPTION {\n    GUID value;\n};\n\nstruct _WS_UNIQUE_ID_DESCRIPTION {\n    ULONG minCharCount;\n    ULONG maxCharCount;\n};\n\nstruct _WS_BYTES_DESCRIPTION {\n    ULONG minByteCount;\n    ULONG maxByteCount;\n};\n\ntypedef enum {\n    WS_TYPE_ATTRIBUTE_FIELD_MAPPING,\n    WS_ATTRIBUTE_FIELD_MAPPING,\n    WS_ELEMENT_FIELD_MAPPING,\n    WS_REPEATING_ELEMENT_FIELD_MAPPING,\n    WS_TEXT_FIELD_MAPPING,\n    WS_NO_FIELD_MAPPING,\n    WS_XML_ATTRIBUTE_FIELD_MAPPING,\n    WS_ELEMENT_CHOICE_FIELD_MAPPING,\n    WS_REPEATING_ELEMENT_CHOICE_FIELD_MAPPING,\n    WS_ANY_ELEMENT_FIELD_MAPPING,\n    WS_REPEATING_ANY_ELEMENT_FIELD_MAPPING,\n    WS_ANY_CONTENT_FIELD_MAPPING,\n    WS_ANY_ATTRIBUTES_FIELD_MAPPING\n} WS_FIELD_MAPPING;\n\ntypedef struct _WS_DEFAULT_VALUE {\n    void *value;\n    ULONG valueSize;\n} WS_DEFAULT_VALUE;\n\ntypedef struct _WS_ITEM_RANGE {\n    ULONG minItemCount;\n    ULONG maxItemCount;\n} WS_ITEM_RANGE;\n\nenum\n{\n    WS_FIELD_POINTER         = 0x1,\n    WS_FIELD_OPTIONAL        = 0x2,\n    WS_FIELD_NILLABLE        = 0x4,\n    WS_FIELD_NILLABLE_ITEM   = 0x8,\n    WS_FIELD_OTHER_NAMESPACE = 0x10\n};\n\ntypedef struct _WS_FIELD_DESCRIPTION {\n    WS_FIELD_MAPPING mapping;\n    WS_XML_STRING *localName;\n    WS_XML_STRING *ns;\n    WS_TYPE type;\n    void *typeDescription;\n    ULONG offset;\n    ULONG options;\n    WS_DEFAULT_VALUE *defaultValue;\n    ULONG countOffset;\n    WS_XML_STRING *itemLocalName;\n    WS_XML_STRING *itemNs;\n    WS_ITEM_RANGE *itemRange;\n} WS_FIELD_DESCRIPTION;\n\nenum\n{\n    WS_STRUCT_ABSTRACT                        = 0x1,\n    WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT = 0x2,\n    WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES     = 0x4\n};\n\ntypedef struct _WS_STRUCT_DESCRIPTION {\n    ULONG size;\n    ULONG alignment;\n    WS_FIELD_DESCRIPTION **fields;\n    ULONG fieldCount;\n    WS_XML_STRING *typeLocalName;\n    WS_XML_STRING *typeNs;\n    struct _WS_STRUCT_DESCRIPTION *parentType;\n    struct _WS_STRUCT_DESCRIPTION **subTypes;\n    ULONG subTypeCount;\n    ULONG structOptions;\n} WS_STRUCT_DESCRIPTION;\n\ntypedef struct _WS_UNION_FIELD_DESCRIPTION {\n    int value;\n    WS_FIELD_DESCRIPTION field;\n} WS_UNION_FIELD_DESCRIPTION;\n\ntypedef struct _WS_UNION_DESCRIPTION {\n    ULONG size;\n    ULONG alignment;\n    WS_UNION_FIELD_DESCRIPTION **fields;\n    ULONG fieldCount;\n    ULONG enumOffset;\n    int noneEnumValue;\n    ULONG *valueIndices;\n} WS_UNION_DESCRIPTION;\n\ntypedef struct _WS_ATTRIBUTE_DESCRIPTION {\n    WS_XML_STRING *attributeLocalName;\n    WS_XML_STRING *attributeNs;\n    WS_TYPE type;\n    void *typeDescription;\n} WS_ATTRIBUTE_DESCRIPTION;\n\ntypedef struct _WS_ELEMENT_DESCRIPTION {\n    WS_XML_STRING *elementLocalName;\n    WS_XML_STRING *elementNs;\n    WS_TYPE type;\n    void *typeDescription;\n} WS_ELEMENT_DESCRIPTION;\n\ntypedef struct _WS_STRING {\n    ULONG length;\n    WCHAR *chars;\n} WS_STRING;\n\ntypedef struct _WS_UNIQUE_ID {\n    WS_STRING uri;\n    GUID guid;\n} WS_UNIQUE_ID;\n\ntypedef enum {\n    WS_XML_NODE_TYPE_ELEMENT     = 1,\n    WS_XML_NODE_TYPE_TEXT        = 2,\n    WS_XML_NODE_TYPE_END_ELEMENT = 3,\n    WS_XML_NODE_TYPE_COMMENT     = 4,\n    WS_XML_NODE_TYPE_CDATA       = 6,\n    WS_XML_NODE_TYPE_END_CDATA   = 7,\n    WS_XML_NODE_TYPE_EOF         = 8,\n    WS_XML_NODE_TYPE_BOF         = 9\n} WS_XML_NODE_TYPE;\n\ntypedef struct _WS_XML_NODE {\n    WS_XML_NODE_TYPE nodeType;\n} WS_XML_NODE;\n\ntypedef enum {\n    WS_MOVE_TO_ROOT_ELEMENT,\n    WS_MOVE_TO_NEXT_ELEMENT,\n    WS_MOVE_TO_PREVIOUS_ELEMENT,\n    WS_MOVE_TO_CHILD_ELEMENT,\n    WS_MOVE_TO_END_ELEMENT,\n    WS_MOVE_TO_PARENT_ELEMENT,\n    WS_MOVE_TO_NEXT_NODE,\n    WS_MOVE_TO_PREVIOUS_NODE,\n    WS_MOVE_TO_FIRST_NODE,\n    WS_MOVE_TO_BOF,\n    WS_MOVE_TO_EOF,\n    WS_MOVE_TO_CHILD_NODE\n} WS_MOVE_TO;\n\ntypedef enum {\n    WS_XML_TEXT_TYPE_UTF8      = 1,\n    WS_XML_TEXT_TYPE_UTF16     = 2,\n    WS_XML_TEXT_TYPE_BASE64    = 3,\n    WS_XML_TEXT_TYPE_BOOL      = 4,\n    WS_XML_TEXT_TYPE_INT32     = 5,\n    WS_XML_TEXT_TYPE_INT64     = 6,\n    WS_XML_TEXT_TYPE_UINT64    = 7,\n    WS_XML_TEXT_TYPE_FLOAT     = 8,\n    WS_XML_TEXT_TYPE_DOUBLE    = 9,\n    WS_XML_TEXT_TYPE_DECIMAL   = 10,\n    WS_XML_TEXT_TYPE_GUID      = 11,\n    WS_XML_TEXT_TYPE_UNIQUE_ID = 12,\n    WS_XML_TEXT_TYPE_DATETIME  = 13,\n    WS_XML_TEXT_TYPE_TIMESPAN  = 14,\n    WS_XML_TEXT_TYPE_QNAME     = 15,\n    WS_XML_TEXT_TYPE_LIST      = 16\n} WS_XML_TEXT_TYPE;\n\ntypedef struct _WS_XML_TEXT {\n    WS_XML_TEXT_TYPE textType;\n} WS_XML_TEXT;\n\ntypedef struct _WS_XML_UTF8_TEXT {\n    WS_XML_TEXT text;\n    WS_XML_STRING value;\n} WS_XML_UTF8_TEXT;\n\ntypedef struct _WS_XML_UTF16_TEXT {\n    WS_XML_TEXT text;\n    BYTE *bytes;\n    ULONG byteCount;\n} WS_XML_UTF16_TEXT;\n\ntypedef struct _WS_XML_BOOL_TEXT {\n    WS_XML_TEXT text;\n    BOOL value;\n} WS_XML_BOOL_TEXT;\n\ntypedef struct _WS_XML_INT32_TEXT {\n    WS_XML_TEXT text;\n    __int32 value;\n} WS_XML_INT32_TEXT;\n\ntypedef struct _WS_XML_INT64_TEXT {\n    WS_XML_TEXT text;\n    __int64 DECLSPEC_ALIGN(8) value;\n} WS_XML_INT64_TEXT;\n\ntypedef struct _WS_XML_UINT64_TEXT {\n    WS_XML_TEXT text;\n    unsigned __int64 DECLSPEC_ALIGN(8) value;\n} WS_XML_UINT64_TEXT;\n\ntypedef struct _WS_XML_FLOAT_TEXT {\n    WS_XML_TEXT text;\n    float value;\n} WS_XML_FLOAT_TEXT;\n\ntypedef struct _WS_XML_DOUBLE_TEXT {\n    WS_XML_TEXT text;\n    double DECLSPEC_ALIGN(8) value;\n} WS_XML_DOUBLE_TEXT;\n\ntypedef struct _WS_XML_GUID_TEXT {\n    WS_XML_TEXT text;\n    GUID value;\n} WS_XML_GUID_TEXT;\n\ntypedef struct _WS_XML_UNIQUE_ID_TEXT {\n    WS_XML_TEXT text;\n    GUID value;\n} WS_XML_UNIQUE_ID_TEXT;\n\ntypedef struct _WS_XML_QNAME_TEXT {\n    WS_XML_TEXT text;\n    WS_XML_STRING *prefix;\n    WS_XML_STRING *localName;\n    WS_XML_STRING *ns;\n} WS_XML_QNAME_TEXT;\n\ntypedef enum {\n    WS_BOOL_VALUE_TYPE,\n    WS_INT8_VALUE_TYPE,\n    WS_INT16_VALUE_TYPE,\n    WS_INT32_VALUE_TYPE,\n    WS_INT64_VALUE_TYPE,\n    WS_UINT8_VALUE_TYPE,\n    WS_UINT16_VALUE_TYPE,\n    WS_UINT32_VALUE_TYPE,\n    WS_UINT64_VALUE_TYPE,\n    WS_FLOAT_VALUE_TYPE,\n    WS_DOUBLE_VALUE_TYPE,\n    WS_DECIMAL_VALUE_TYPE,\n    WS_DATETIME_VALUE_TYPE,\n    WS_TIMESPAN_VALUE_TYPE,\n    WS_GUID_VALUE_TYPE,\n    WS_DURATION_VALUE_TYPE\n} WS_VALUE_TYPE;\n\ntypedef struct _WS_XML_ATTRIBUTE {\n    BYTE singleQuote;\n    BYTE isXmlNs;\n    WS_XML_STRING *prefix;\n    WS_XML_STRING *localName;\n    WS_XML_STRING *ns;\n    WS_XML_TEXT *value;\n} WS_XML_ATTRIBUTE;\n\ntypedef struct _WS_XML_ELEMENT_NODE {\n    WS_XML_NODE node;\n    WS_XML_STRING *prefix;\n    WS_XML_STRING *localName;\n    WS_XML_STRING *ns;\n    ULONG attributeCount;\n    WS_XML_ATTRIBUTE **attributes;\n    BOOL isEmpty;\n} WS_XML_ELEMENT_NODE;\n\ntypedef struct _WS_XML_TEXT_NODE {\n    WS_XML_NODE node;\n    WS_XML_TEXT *text;\n} WS_XML_TEXT_NODE;\n\ntypedef struct _WS_XML_COMMENT_NODE {\n    WS_XML_NODE node;\n    WS_XML_STRING value;\n} WS_XML_COMMENT_NODE;\n\ntypedef struct _WS_XML_NODE_POSITION {\n    WS_XML_BUFFER *buffer;\n    void *node;\n} WS_XML_NODE_POSITION;\n\ntypedef struct _WS_XML_QNAME {\n    WS_XML_STRING localName;\n    WS_XML_STRING ns;\n} WS_XML_QNAME;\n\ntypedef enum {\n    WS_SERVICE_PROXY_STATE_CREATED,\n    WS_SERVICE_PROXY_STATE_OPENING,\n    WS_SERVICE_PROXY_STATE_OPEN,\n    WS_SERVICE_PROXY_STATE_CLOSING,\n    WS_SERVICE_PROXY_STATE_CLOSED,\n    WS_SERVICE_PROXY_STATE_FAULTED\n} WS_SERVICE_PROXY_STATE;\n\ntypedef enum {\n    WS_PROXY_PROPERTY_CALL_TIMEOUT,\n    WS_PROXY_PROPERTY_MESSAGE_PROPERTIES,\n    WS_PROXY_PROPERTY_MAX_CALL_POOL_SIZE,\n    WS_PROXY_PROPERTY_STATE,\n    WS_PROXY_PROPERTY_MAX_PENDING_CALLS,\n    WS_PROXY_PROPERTY_MAX_CLOSE_TIMEOUT,\n    WS_PROXY_FAULT_LANG_ID\n} WS_PROXY_PROPERTY_ID;\n\nstruct _WS_PROXY_PROPERTY {\n    WS_PROXY_PROPERTY_ID id;\n    void *value;\n    ULONG valueSize;\n};\n\ntypedef enum {\n    WS_CHANNEL_TYPE_INPUT           = 0x1,\n    WS_CHANNEL_TYPE_OUTPUT          = 0x2,\n    WS_CHANNEL_TYPE_SESSION         = 0x4,\n    WS_CHANNEL_TYPE_INPUT_SESSION   = (WS_CHANNEL_TYPE_INPUT  | WS_CHANNEL_TYPE_SESSION),\n    WS_CHANNEL_TYPE_OUTPUT_SESSION  = (WS_CHANNEL_TYPE_OUTPUT | WS_CHANNEL_TYPE_SESSION),\n    WS_CHANNEL_TYPE_DUPLEX          = (WS_CHANNEL_TYPE_INPUT  | WS_CHANNEL_TYPE_OUTPUT),\n    WS_CHANNEL_TYPE_DUPLEX_SESSION  = (WS_CHANNEL_TYPE_INPUT  | WS_CHANNEL_TYPE_OUTPUT | WS_CHANNEL_TYPE_SESSION),\n    WS_CHANNEL_TYPE_REQUEST         = 0x8,\n    WS_CHANNEL_TYPE_REPLY           = 0x10\n} WS_CHANNEL_TYPE;\n\ntypedef enum {\n    WS_ENCODING_XML_BINARY_1,\n    WS_ENCODING_XML_BINARY_SESSION_1,\n    WS_ENCODING_XML_MTOM_UTF8,\n    WS_ENCODING_XML_MTOM_UTF16BE,\n    WS_ENCODING_XML_MTOM_UTF16LE,\n    WS_ENCODING_XML_UTF8,\n    WS_ENCODING_XML_UTF16BE,\n    WS_ENCODING_XML_UTF16LE,\n    WS_ENCODING_RAW\n} WS_ENCODING;\n\ntypedef enum {\n    WS_CHANNEL_STATE_CREATED,\n    WS_CHANNEL_STATE_OPENING,\n    WS_CHANNEL_STATE_ACCEPTING,\n    WS_CHANNEL_STATE_OPEN,\n    WS_CHANNEL_STATE_FAULTED,\n    WS_CHANNEL_STATE_CLOSING,\n    WS_CHANNEL_STATE_CLOSED\n} WS_CHANNEL_STATE;\n\ntypedef enum {\n    WS_CHANNEL_PROPERTY_MAX_BUFFERED_MESSAGE_SIZE               = 0,\n    WS_CHANNEL_PROPERTY_MAX_STREAMED_MESSAGE_SIZE               = 1,\n    WS_CHANNEL_PROPERTY_MAX_STREAMED_START_SIZE                 = 2,\n    WS_CHANNEL_PROPERTY_MAX_STREAMED_FLUSH_SIZE                 = 3,\n    WS_CHANNEL_PROPERTY_ENCODING                                = 4,\n    WS_CHANNEL_PROPERTY_ENVELOPE_VERSION                        = 5,\n    WS_CHANNEL_PROPERTY_ADDRESSING_VERSION                      = 6,\n    WS_CHANNEL_PROPERTY_MAX_SESSION_DICTIONARY_SIZE             = 7,\n    WS_CHANNEL_PROPERTY_STATE                                   = 8,\n    WS_CHANNEL_PROPERTY_ASYNC_CALLBACK_MODEL                    = 9,\n    WS_CHANNEL_PROPERTY_IP_VERSION                              = 10,\n    WS_CHANNEL_PROPERTY_RESOLVE_TIMEOUT                         = 11,\n    WS_CHANNEL_PROPERTY_CONNECT_TIMEOUT                         = 12,\n    WS_CHANNEL_PROPERTY_SEND_TIMEOUT                            = 13,\n    WS_CHANNEL_PROPERTY_RECEIVE_RESPONSE_TIMEOUT                = 14,\n    WS_CHANNEL_PROPERTY_RECEIVE_TIMEOUT                         = 15,\n    WS_CHANNEL_PROPERTY_CLOSE_TIMEOUT                           = 16,\n    WS_CHANNEL_PROPERTY_ENABLE_TIMEOUTS                         = 17,\n    WS_CHANNEL_PROPERTY_TRANSFER_MODE                           = 18,\n    WS_CHANNEL_PROPERTY_MULTICAST_INTERFACE                     = 19,\n    WS_CHANNEL_PROPERTY_MULTICAST_HOPS                          = 20,\n    WS_CHANNEL_PROPERTY_REMOTE_ADDRESS                          = 21,\n    WS_CHANNEL_PROPERTY_REMOTE_IP_ADDRESS                       = 22,\n    WS_CHANNEL_PROPERTY_HTTP_CONNECTION_ID                      = 23,\n    WS_CHANNEL_PROPERTY_CUSTOM_CHANNEL_CALLBACKS                = 24,\n    WS_CHANNEL_PROPERTY_CUSTOM_CHANNEL_PARAMETERS               = 25,\n    WS_CHANNEL_PROPERTY_CUSTOM_CHANNEL_INSTANCE                 = 26,\n    WS_CHANNEL_PROPERTY_TRANSPORT_URL                           = 27,\n    WS_CHANNEL_PROPERTY_NO_DELAY                                = 28,\n    WS_CHANNEL_PROPERTY_SEND_KEEP_ALIVES                        = 29,\n    WS_CHANNEL_PROPERTY_KEEP_ALIVE_TIME                         = 30,\n    WS_CHANNEL_PROPERTY_KEEP_ALIVE_INTERVAL                     = 31,\n    WS_CHANNEL_PROPERTY_MAX_HTTP_SERVER_CONNECTIONS             = 32,\n    WS_CHANNEL_PROPERTY_IS_SESSION_SHUT_DOWN                    = 33,\n    WS_CHANNEL_PROPERTY_CHANNEL_TYPE                            = 34,\n    WS_CHANNEL_PROPERTY_TRIM_BUFFERED_MESSAGE_SIZE              = 35,\n    WS_CHANNEL_PROPERTY_ENCODER                                 = 36,\n    WS_CHANNEL_PROPERTY_DECODER                                 = 37,\n    WS_CHANNEL_PROPERTY_PROTECTION_LEVEL                        = 38,\n    WS_CHANNEL_PROPERTY_COOKIE_MODE                             = 39,\n    WS_CHANNEL_PROPERTY_HTTP_PROXY_SETTING_MODE                 = 40,\n    WS_CHANNEL_PROPERTY_CUSTOM_HTTP_PROXY                       = 41,\n    WS_CHANNEL_PROPERTY_HTTP_MESSAGE_MAPPING                    = 42,\n    WS_CHANNEL_PROPERTY_ENABLE_HTTP_REDIRECT                    = 43,\n    WS_CHANNEL_PROPERTY_HTTP_REDIRECT_CALLBACK_CONTEXT          = 44,\n    WS_CHANNEL_PROPERTY_FAULTS_AS_ERRORS                        = 45,\n    WS_CHANNEL_PROPERTY_ALLOW_UNSECURED_FAULTS                  = 46,\n    WS_CHANNEL_PROPERTY_HTTP_SERVER_SPN                         = 47,\n    WS_CHANNEL_PROPERTY_HTTP_PROXY_SPN                          = 48,\n    WS_CHANNEL_PROPERTY_MAX_HTTP_REQUEST_HEADERS_BUFFER_SIZE    = 49\n} WS_CHANNEL_PROPERTY_ID;\n\nstruct _WS_CHANNEL_PROPERTY {\n    WS_CHANNEL_PROPERTY_ID id;\n    void *value;\n    ULONG valueSize;\n};\n\nstruct _WS_CHANNEL_PROPERTIES {\n    WS_CHANNEL_PROPERTY *properties;\n    ULONG propertyCount;\n};\n\ntypedef enum {\n    WS_HTTP_CHANNEL_BINDING,\n    WS_TCP_CHANNEL_BINDING,\n    WS_UDP_CHANNEL_BINDING,\n    WS_CUSTOM_CHANNEL_BINDING,\n    WS_NAMEDPIPE_CHANNEL_BINDING\n} WS_CHANNEL_BINDING;\n\ntypedef enum {\n    WS_SSL_TRANSPORT_SECURITY_BINDING_TYPE,\n    WS_TCP_SSPI_TRANSPORT_SECURITY_BINDING_TYPE,\n    WS_HTTP_HEADER_AUTH_SECURITY_BINDING_TYPE,\n    WS_USERNAME_MESSAGE_SECURITY_BINDING_TYPE,\n    WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING_TYPE,\n    WS_XML_TOKEN_MESSAGE_SECURITY_BINDING_TYPE,\n    WS_SAML_MESSAGE_SECURITY_BINDING_TYPE,\n    WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING_TYPE,\n    WS_NAMEDPIPE_SSPI_TRANSPORT_SECURITY_BINDING_TYPE\n} WS_SECURITY_BINDING_TYPE;\n\ntypedef enum {\n    WS_SECURITY_BINDING_PROPERTY_REQUIRE_SSL_CLIENT_CERT                    = 1,\n    WS_SECURITY_BINDING_PROPERTY_WINDOWS_INTEGRATED_AUTH_PACKAGE            = 2,\n    WS_SECURITY_BINDING_PROPERTY_REQUIRE_SERVER_AUTH                        = 3,\n    WS_SECURITY_BINDING_PROPERTY_ALLOW_ANONYMOUS_CLIENTS                    = 4,\n    WS_SECURITY_BINDING_PROPERTY_ALLOWED_IMPERSONATION_LEVEL                = 5,\n    WS_SECURITY_BINDING_PROPERTY_HTTP_HEADER_AUTH_SCHEME                    = 6,\n    WS_SECURITY_BINDING_PROPERTY_HTTP_HEADER_AUTH_TARGET                    = 7,\n    WS_SECURITY_BINDING_PROPERTY_HTTP_HEADER_AUTH_BASIC_REALM               = 8,\n    WS_SECURITY_BINDING_PROPERTY_HTTP_HEADER_AUTH_DIGEST_REALM              = 9,\n    WS_SECURITY_BINDING_PROPERTY_HTTP_HEADER_AUTH_DIGEST_DOMAIN             = 10,\n    WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_KEY_SIZE                  = 11,\n    WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_KEY_ENTROPY_MODE          = 12,\n    WS_SECURITY_BINDING_PROPERTY_MESSAGE_PROPERTIES                         = 13,\n    WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_MAX_PENDING_CONTEXTS      = 14,\n    WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_MAX_ACTIVE_CONTEXTS       = 15,\n    WS_SECURITY_BINDING_PROPERTY_SECURE_CONVERSATION_VERSION                = 16,\n    WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_SUPPORT_RENEW             = 17,\n    WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_RENEWAL_INTERVAL          = 18,\n    WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_ROLLOVER_INTERVAL         = 19,\n    WS_SECURITY_BINDING_PROPERTY_CERT_FAILURES_TO_IGNORE                    = 20,\n    WS_SECURITY_BINDING_PROPERTY_DISABLE_CERT_REVOCATION_CHECK              = 21,\n    WS_SECURITY_BINDING_PROPERTY_DISALLOWED_SECURE_PROTOCOLS                = 22,\n    WS_SECURITY_BINDING_PROPERTY_CERTIFICATE_VALIDATION_CALLBACK_CONTEXT    = 23\n} WS_SECURITY_BINDING_PROPERTY_ID;\n\nstruct _WS_SECURITY_BINDING_PROPERTY {\n    WS_SECURITY_BINDING_PROPERTY_ID id;\n    void *value;\n    ULONG valueSize;\n};\n\nstruct _WS_SECURITY_BINDING_PROPERTIES {\n    WS_SECURITY_BINDING_PROPERTY *properties;\n    ULONG propertyCount;\n};\n\nstruct _WS_SECURITY_BINDING {\n    WS_SECURITY_BINDING_TYPE bindingType;\n    WS_SECURITY_BINDING_PROPERTY *properties;\n    ULONG propertyCount;\n};\n\ntypedef enum {\n    WS_SECURITY_PROPERTY_TRANSPORT_PROTECTION_LEVEL     = 1,\n    WS_SECURITY_PROPERTY_ALGORITHM_SUITE                = 2,\n    WS_SECURITY_PROPERTY_ALGORITHM_SUITE_NAME           = 3,\n    WS_SECURITY_PROPERTY_MAX_ALLOWED_LATENCY            = 4,\n    WS_SECURITY_PROPERTY_TIMESTAMP_VALIDITY_DURATION    = 5,\n    WS_SECURITY_PROPERTY_MAX_ALLOWED_CLOCK_SKEW         = 6,\n    WS_SECURITY_PROPERTY_TIMESTAMP_USAGE                = 7,\n    WS_SECURITY_PROPERTY_SECURITY_HEADER_LAYOUT         = 8,\n    WS_SECURITY_PROPERTY_SECURITY_HEADER_VERSION        = 9,\n    WS_SECURITY_PROPERTY_EXTENDED_PROTECTION_POLICY     = 10,\n    WS_SECURITY_PROPERTY_EXTENDED_PROTECTION_SCENARIO   = 11,\n    WS_SECURITY_PROPERTY_SERVICE_IDENTITIES             = 12\n} WS_SECURITY_PROPERTY_ID;\n\nstruct _WS_SECURITY_PROPERTY {\n    WS_SECURITY_PROPERTY_ID id;\n    void *value;\n    ULONG valueSize;\n};\n\nstruct _WS_SECURITY_PROPERTIES {\n    WS_SECURITY_PROPERTY *properties;\n    ULONG propertyCount;\n};\n\nstruct _WS_SECURITY_DESCRIPTION {\n    WS_SECURITY_BINDING **securityBindings;\n    ULONG securityBindingCount;\n    WS_SECURITY_PROPERTY *properties;\n    ULONG propertyCount;\n};\n\ntypedef enum {\n    WS_HTTP_BINDING_TEMPLATE_TYPE,\n    WS_HTTP_SSL_BINDING_TEMPLATE_TYPE,\n    WS_HTTP_HEADER_AUTH_BINDING_TEMPLATE_TYPE,\n    WS_HTTP_SSL_HEADER_AUTH_BINDING_TEMPLATE_TYPE,\n    WS_HTTP_SSL_USERNAME_BINDING_TEMPLATE_TYPE,\n    WS_HTTP_SSL_KERBEROS_APREQ_BINDING_TEMPLATE_TYPE,\n    WS_TCP_BINDING_TEMPLATE_TYPE,\n    WS_TCP_SSPI_BINDING_TEMPLATE_TYPE,\n    WS_TCP_SSPI_USERNAME_BINDING_TEMPLATE_TYPE,\n    WS_TCP_SSPI_KERBEROS_APREQ_BINDING_TEMPLATE_TYPE,\n    WS_HTTP_SSL_USERNAME_SECURITY_CONTEXT_BINDING_TEMPLATE_TYPE,\n    WS_HTTP_SSL_KERBEROS_APREQ_SECURITY_CONTEXT_BINDING_TEMPLATE_TYPE,\n    WS_TCP_SSPI_USERNAME_SECURITY_CONTEXT_BINDING_TEMPLATE_TYPE,\n    WS_TCP_SSPI_KERBEROS_APREQ_SECURITY_CONTEXT_BINDING_TEMPLATE_TYPE\n} WS_BINDING_TEMPLATE_TYPE;\n\ntypedef enum {\n    WS_SUBJECT_NAME_CERT_CREDENTIAL_TYPE    = 1,\n    WS_THUMBPRINT_CERT_CREDENTIAL_TYPE      = 2,\n    WS_CUSTOM_CERT_CREDENTIAL_TYPE          = 3\n} WS_CERT_CREDENTIAL_TYPE;\n\nstruct _WS_CERT_CREDENTIAL {\n    WS_CERT_CREDENTIAL_TYPE credentialType;\n};\n\nstruct _WS_SSL_TRANSPORT_SECURITY_BINDING_TEMPLATE {\n    WS_SECURITY_BINDING_PROPERTIES securityBindingProperties;\n    WS_CERT_CREDENTIAL *localCertCredential;\n};\n\nstruct _WS_HTTP_BINDING_TEMPLATE {\n    WS_CHANNEL_PROPERTIES channelProperties;\n};\n\nstruct _WS_HTTP_SSL_BINDING_TEMPLATE {\n    WS_CHANNEL_PROPERTIES channelProperties;\n    WS_SECURITY_PROPERTIES securityProperties;\n    WS_SSL_TRANSPORT_SECURITY_BINDING_TEMPLATE sslTransportSecurityBinding;\n};\n\nenum {\n    WS_MUST_UNDERSTAND_HEADER_ATTRIBUTE = 0x1,\n    WS_RELAY_HEADER_ATTRIBUTE           = 0x2\n};\n\ntypedef enum {\n    WS_ADDRESSING_VERSION_0_9       = 1,\n    WS_ADDRESSING_VERSION_1_0       = 2,\n    WS_ADDRESSING_VERSION_TRANSPORT = 3\n} WS_ADDRESSING_VERSION;\n\ntypedef enum {\n    WS_ENVELOPE_VERSION_SOAP_1_1    = 1,\n    WS_ENVELOPE_VERSION_SOAP_1_2    = 2,\n    WS_ENVELOPE_VERSION_NONE        = 3\n} WS_ENVELOPE_VERSION;\n\ntypedef enum {\n    WS_MESSAGE_PROPERTY_STATE,\n    WS_MESSAGE_PROPERTY_HEAP,\n    WS_MESSAGE_PROPERTY_ENVELOPE_VERSION,\n    WS_MESSAGE_PROPERTY_ADDRESSING_VERSION,\n    WS_MESSAGE_PROPERTY_HEADER_BUFFER,\n    WS_MESSAGE_PROPERTY_HEADER_POSITION,\n    WS_MESSAGE_PROPERTY_BODY_READER,\n    WS_MESSAGE_PROPERTY_BODY_WRITER,\n    WS_MESSAGE_PROPERTY_IS_ADDRESSED,\n    WS_MESSAGE_PROPERTY_HEAP_PROPERTIES,\n    WS_MESSAGE_PROPERTY_XML_READER_PROPERTIES,\n    WS_MESSAGE_PROPERTY_XML_WRITER_PROPERTIES,\n    WS_MESSAGE_PROPERTY_IS_FAULT,\n    WS_MESSAGE_PROPERTY_MAX_PROCESSED_HEADERS,\n    WS_MESSAGE_PROPERTY_USERNAME,\n    WS_MESSAGE_PROPERTY_ENCODED_CERT,\n    WS_MESSAGE_PROPERTY_TRANSPORT_SECURITY_WINDOWS_TOKEN,\n    WS_MESSAGE_PROPERTY_HTTP_HEADER_AUTH_WINDOWS_TOKEN,\n    WS_MESSAGE_PROPERTY_MESSAGE_SECURITY_WINDOWS_TOKEN,\n    WS_MESSAGE_PROPERTY_SAML_ASSERTION,\n    WS_MESSAGE_PROPERTY_SECURITY_CONTEXT,\n    WS_MESSAGE_PROPERTY_PROTECTION_LEVEL\n} WS_MESSAGE_PROPERTY_ID;\n\nstruct _WS_MESSAGE_PROPERTY {\n    WS_MESSAGE_PROPERTY_ID id;\n    void *value;\n    ULONG valueSize;\n};\n\nstruct _WS_MESSAGE_PROPERTIES {\n    WS_MESSAGE_PROPERTY *properties;\n    ULONG propertyCount;\n};\n\ntypedef enum {\n    WS_MESSAGE_STATE_EMPTY          = 1,\n    WS_MESSAGE_STATE_INITIALIZED    = 2,\n    WS_MESSAGE_STATE_READING        = 3,\n    WS_MESSAGE_STATE_WRITING        = 4,\n    WS_MESSAGE_STATE_DONE           = 5\n} WS_MESSAGE_STATE;\n\ntypedef enum {\n    WS_BLANK_MESSAGE,\n    WS_DUPLICATE_MESSAGE,\n    WS_REQUEST_MESSAGE,\n    WS_REPLY_MESSAGE,\n    WS_FAULT_MESSAGE\n} WS_MESSAGE_INITIALIZATION;\n\ntypedef enum {\n    WS_ACTION_HEADER        = 1,\n    WS_TO_HEADER            = 2,\n    WS_MESSAGE_ID_HEADER    = 3,\n    WS_RELATES_TO_HEADER    = 4,\n    WS_FROM_HEADER          = 5,\n    WS_REPLY_TO_HEADER      = 6,\n    WS_FAULT_TO_HEADER      = 7\n} WS_HEADER_TYPE;\n\ntypedef enum {\n    WS_REPEATING_HEADER = 1,\n    WS_SINGLETON_HEADER = 2\n} WS_REPEATING_HEADER_OPTION;\n\ntypedef enum {\n    WS_DNS_ENDPOINT_IDENTITY_TYPE       = 1,\n    WS_UPN_ENDPOINT_IDENTITY_TYPE       = 2,\n    WS_SPN_ENDPOINT_IDENTITY_TYPE       = 3,\n    WS_RSA_ENDPOINT_IDENTITY_TYPE       = 4,\n    WS_CERT_ENDPOINT_IDENTITY_TYPE      = 5,\n    WS_UNKNOWN_ENDPOINT_IDENTITY_TYPE   = 6\n} WS_ENDPOINT_IDENTITY_TYPE;\n\nstruct _WS_ENDPOINT_IDENTITY {\n    WS_ENDPOINT_IDENTITY_TYPE identityType;\n};\n\nstruct _WS_ENDPOINT_ADDRESS {\n    WS_STRING url;\n    WS_XML_BUFFER *headers;\n    WS_XML_BUFFER *extensions;\n    WS_ENDPOINT_IDENTITY *identity;\n};\n\nstruct _WS_HTTP_POLICY_DESCRIPTION {\n    WS_CHANNEL_PROPERTIES channelProperties;\n};\n\nstruct _WS_MESSAGE_DESCRIPTION {\n    WS_XML_STRING *action;\n    WS_ELEMENT_DESCRIPTION *bodyElementDescription;\n};\n\ntypedef enum {\n    WS_PARAMETER_TYPE_NORMAL,\n    WS_PARAMETER_TYPE_ARRAY,\n    WS_PARAMETER_TYPE_ARRAY_COUNT,\n    WS_PARAMETER_TYPE_MESSAGES\n} WS_PARAMETER_TYPE;\n\nstruct _WS_PARAMETER_DESCRIPTION {\n    WS_PARAMETER_TYPE parameterType;\n    USHORT inputMessageIndex;\n    USHORT outputMessageIndex;\n};\n\ntypedef HRESULT (CALLBACK *WS_SERVICE_STUB_CALLBACK)(\n    const WS_OPERATION_CONTEXT *context,\n    void *frame,\n    const void *callback,\n    const WS_ASYNC_CONTEXT *asyncContext,\n    WS_ERROR *error );\n\ntypedef enum {\n    WS_NON_RPC_LITERAL_OPERATION,\n    WS_RPC_LITERAL_OPERATION\n} WS_OPERATION_STYLE;\n\nstruct _WS_OPERATION_DESCRIPTION {\n    ULONG versionInfo;\n    WS_MESSAGE_DESCRIPTION *inputMessageDescription;\n    WS_MESSAGE_DESCRIPTION *outputMessageDescription;\n    ULONG inputMessageOptions;\n    ULONG outputMessageOptions;\n    USHORT parameterCount;\n    WS_PARAMETER_DESCRIPTION *parameterDescription;\n    WS_SERVICE_STUB_CALLBACK stubCallback;\n    WS_OPERATION_STYLE style;\n};\n\ntypedef enum {\n    WS_CALL_PROPERTY_CHECK_MUST_UNDERSTAND,\n    WS_CALL_PROPERTY_SEND_MESSAGE_CONTEXT,\n    WS_CALL_PROPERTY_RECEIVE_MESSAGE_CONTEXT,\n    WS_CALL_PROPERTY_CALL_ID\n} WS_CALL_PROPERTY_ID;\n\nstruct _WS_CALL_PROPERTY {\n    WS_CALL_PROPERTY_ID id;\n    void *value;\n    ULONG valueSize;\n};\n\ntypedef enum {\n    WS_DATETIME_FORMAT_UTC,\n    WS_DATETIME_FORMAT_LOCAL,\n    WS_DATETIME_FORMAT_NONE\n} WS_DATETIME_FORMAT;\n\nstruct _WS_DATETIME {\n    unsigned __int64 DECLSPEC_ALIGN(8) ticks;\n    WS_DATETIME_FORMAT format;\n};\n\nstruct _WS_DATETIME_DESCRIPTION {\n    WS_DATETIME minValue;\n    WS_DATETIME maxValue;\n};\n\nstruct _WS_XML_DATETIME_TEXT {\n    WS_XML_TEXT text;\n    WS_DATETIME value;\n};\n\nstruct _WS_XML_BASE64_TEXT {\n    WS_XML_TEXT text;\n    BYTE *bytes;\n    ULONG length;\n};\n\ntypedef enum {\n    WS_URL_HTTP_SCHEME_TYPE,\n    WS_URL_HTTPS_SCHEME_TYPE,\n    WS_URL_NETTCP_SCHEME_TYPE,\n    WS_URL_SOAPUDP_SCHEME_TYPE,\n    WS_URL_NETPIPE_SCHEME_TYPE\n} WS_URL_SCHEME_TYPE;\n\nenum {\n    WS_URL_FLAGS_ALLOW_HOST_WILDCARDS   = 0x1,\n    WS_URL_FLAGS_NO_PATH_COLLAPSE       = 0x2,\n    WS_URL_FLAGS_ZERO_TERMINATE         = 0x4\n};\n\nstruct _WS_URL {\n    WS_URL_SCHEME_TYPE scheme;\n};\n\nstruct _WS_HTTP_URL {\n    WS_URL url;\n    WS_STRING host;\n    USHORT port;\n    WS_STRING portAsString;\n    WS_STRING path;\n    WS_STRING query;\n    WS_STRING fragment;\n};\n\nstruct _WS_HTTPS_URL {\n    WS_URL url;\n    WS_STRING host;\n    USHORT port;\n    WS_STRING portAsString;\n    WS_STRING path;\n    WS_STRING query;\n    WS_STRING fragment;\n};\n\nstruct _WS_NETTCP_URL {\n    WS_URL url;\n    WS_STRING host;\n    USHORT port;\n    WS_STRING portAsString;\n    WS_STRING path;\n    WS_STRING query;\n    WS_STRING fragment;\n};\n\nstruct _WS_SOAPUDP_URL {\n    WS_URL url;\n    WS_STRING host;\n    USHORT port;\n    WS_STRING portAsString;\n    WS_STRING path;\n    WS_STRING query;\n    WS_STRING fragment;\n};\n\nstruct _WS_NETPIPE_URL {\n    WS_URL url;\n    WS_STRING host;\n    USHORT port;\n    WS_STRING portAsString;\n    WS_STRING path;\n    WS_STRING query;\n    WS_STRING fragment;\n};\n\ntypedef enum\n{\n    WS_IP_VERSION_4    = 1,\n    WS_IP_VERSION_6    = 2,\n    WS_IP_VERSION_AUTO = 3\n} WS_IP_VERSION;\n\ntypedef enum\n{\n    WS_BUFFERED_TRANSFER_MODE        = 0x0,\n    WS_STREAMED_INPUT_TRANSFER_MODE  = 0x1,\n    WS_STREAMED_OUTPUT_TRANSFER_MODE = 0x2,\n    WS_STREAMED_TRANSFER_MODE        = (WS_STREAMED_INPUT_TRANSFER_MODE|WS_STREAMED_OUTPUT_TRANSFER_MODE)\n} WS_TRANSFER_MODE;\n\ntypedef HRESULT (CALLBACK *WS_CREATE_CHANNEL_CALLBACK)\n    (WS_CHANNEL_TYPE, const void*, ULONG, void**, WS_ERROR*);\n\ntypedef void (CALLBACK *WS_FREE_CHANNEL_CALLBACK)\n    (void*);\n\ntypedef HRESULT (CALLBACK *WS_RESET_CHANNEL_CALLBACK)\n    (void*, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_OPEN_CHANNEL_CALLBACK)\n    (void*, const WS_ENDPOINT_ADDRESS*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_CLOSE_CHANNEL_CALLBACK)\n    (void*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_ABORT_CHANNEL_CALLBACK)\n    (void*, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_GET_CHANNEL_PROPERTY_CALLBACK)\n    (void*, WS_CHANNEL_PROPERTY_ID, void*, ULONG, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_SET_CHANNEL_PROPERTY_CALLBACK)\n    (void*, WS_CHANNEL_PROPERTY_ID, const void*, ULONG, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_WRITE_MESSAGE_START_CALLBACK)\n    (void*, WS_MESSAGE*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_WRITE_MESSAGE_END_CALLBACK)\n    (void*, WS_MESSAGE*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_READ_MESSAGE_START_CALLBACK)\n    (void*, WS_MESSAGE*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_READ_MESSAGE_END_CALLBACK)\n    (void*, WS_MESSAGE*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_ABANDON_MESSAGE_CALLBACK)\n    (void*, WS_MESSAGE*, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_SHUTDOWN_SESSION_CHANNEL_CALLBACK)\n    (void*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\n\nstruct _WS_CUSTOM_CHANNEL_CALLBACKS\n{\n    WS_CREATE_CHANNEL_CALLBACK createChannelCallback;\n    WS_FREE_CHANNEL_CALLBACK freeChannelCallback;\n    WS_RESET_CHANNEL_CALLBACK resetChannelCallback;\n    WS_OPEN_CHANNEL_CALLBACK openChannelCallback;\n    WS_CLOSE_CHANNEL_CALLBACK closeChannelCallback;\n    WS_ABORT_CHANNEL_CALLBACK abortChannelCallback;\n    WS_GET_CHANNEL_PROPERTY_CALLBACK getChannelPropertyCallback;\n    WS_SET_CHANNEL_PROPERTY_CALLBACK setChannelPropertyCallback;\n    WS_WRITE_MESSAGE_START_CALLBACK writeMessageStartCallback;\n    WS_WRITE_MESSAGE_END_CALLBACK writeMessageEndCallback;\n    WS_READ_MESSAGE_START_CALLBACK readMessageStartCallback;\n    WS_READ_MESSAGE_END_CALLBACK readMessageEndCallback;\n    WS_ABANDON_MESSAGE_CALLBACK abandonMessageCallback;\n    WS_SHUTDOWN_SESSION_CHANNEL_CALLBACK shutdownSessionChannelCallback;\n};\n\ntypedef HRESULT (CALLBACK *WS_CREATE_ENCODER_CALLBACK)\n    (void*, WS_WRITE_CALLBACK, void*, void**, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_ENCODER_GET_CONTENT_TYPE_CALLBACK)\n    (void*, const WS_STRING*, WS_STRING*, WS_STRING*, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_ENCODER_START_CALLBACK)\n    (void*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_ENCODER_ENCODE_CALLBACK)\n    (void*, const WS_BYTES*, ULONG, const WS_ASYNC_CONTEXT*, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_ENCODER_END_CALLBACK)\n    (void*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\n\ntypedef void (CALLBACK *WS_FREE_ENCODER_CALLBACK)\n    (void*);\n\nstruct _WS_CHANNEL_ENCODER\n{\n    void *createContext;\n    WS_CREATE_ENCODER_CALLBACK createEncoderCallback;\n    WS_ENCODER_GET_CONTENT_TYPE_CALLBACK encoderGetContentTypeCallback;\n    WS_ENCODER_START_CALLBACK encoderStartCallback;\n    WS_ENCODER_ENCODE_CALLBACK encoderEncodeCallback;\n    WS_ENCODER_END_CALLBACK encoderEndCallback;\n    WS_FREE_ENCODER_CALLBACK freeEncoderCallback;\n};\n\ntypedef HRESULT (CALLBACK *WS_CREATE_DECODER_CALLBACK)\n    (void*, WS_READ_CALLBACK, void*, void**, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_DECODER_GET_CONTENT_TYPE_CALLBACK)\n    (void*, const WS_STRING*, const WS_STRING*, WS_STRING*, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_DECODER_START_CALLBACK)\n    (void*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_DECODER_DECODE_CALLBACK)\n    (void*, void*, ULONG, ULONG*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_DECODER_END_CALLBACK)\n    (void*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\n\ntypedef void (CALLBACK *WS_FREE_DECODER_CALLBACK)\n    (void*);\n\nstruct _WS_CHANNEL_DECODER\n{\n    void *createContext;\n    WS_CREATE_DECODER_CALLBACK createDecoderCallback;\n    WS_DECODER_GET_CONTENT_TYPE_CALLBACK decoderGetContentTypeCallback;\n    WS_DECODER_START_CALLBACK decoderStartCallback;\n    WS_DECODER_DECODE_CALLBACK decoderDecodeCallback;\n    WS_DECODER_END_CALLBACK decoderEndCallback;\n    WS_FREE_DECODER_CALLBACK freeDecoderCallback;\n};\n\ntypedef enum\n{\n    WS_PROTECTION_LEVEL_NONE             = 1,\n    WS_PROTECTION_LEVEL_SIGN             = 2,\n    WS_PROTECTION_LEVEL_SIGN_AND_ENCRYPT = 3\n} WS_PROTECTION_LEVEL;\n\ntypedef enum\n{\n    WS_MANUAL_COOKIE_MODE = 1,\n    WS_AUTO_COOKIE_MODE   = 2\n} WS_COOKIE_MODE;\n\ntypedef enum\n{\n    WS_HTTP_PROXY_SETTING_MODE_AUTO   = 0x1,\n    WS_HTTP_PROXY_SETTING_MODE_NONE   = 0x2,\n    WS_HTTP_PROXY_SETTING_MODE_CUSTOM = 0x3\n} WS_HTTP_PROXY_SETTING_MODE;\n\nstruct _WS_CUSTOM_HTTP_PROXY\n{\n    WS_STRING servers;\n    WS_STRING bypass;\n};\n\nstruct _WS_HTTP_HEADER_MAPPING\n{\n    WS_XML_STRING headerName;\n    ULONG headerMappingOptions;\n};\n\nstruct _WS_HTTP_MESSAGE_MAPPING\n{\n    ULONG requestMappingOptions;\n    ULONG responseMappingOptions;\n    WS_HTTP_HEADER_MAPPING **requestHeaderMappings;\n    ULONG requestHeaderMappingCount;\n    WS_HTTP_HEADER_MAPPING **responseHeaderMappings;\n    ULONG responseHeaderMappingCount;\n};\n\ntypedef HRESULT (CALLBACK *WS_HTTP_REDIRECT_CALLBACK)\n    (void*, const WS_STRING*, const WS_STRING*);\n\nstruct _WS_HTTP_REDIRECT_CALLBACK_CONTEXT\n{\n    WS_HTTP_REDIRECT_CALLBACK callback;\n    void *state;\n};\n\ntypedef enum\n{\n    WS_RECEIVE_REQUIRED_MESSAGE = 1,\n    WS_RECEIVE_OPTIONAL_MESSAGE = 2\n} WS_RECEIVE_OPTION;\n\ntypedef void (CALLBACK *WS_MESSAGE_DONE_CALLBACK)\n    (void*);\n\ntypedef HRESULT (CALLBACK *WS_PROXY_MESSAGE_CALLBACK)\n    (WS_MESSAGE*, WS_HEAP*, void*, WS_ERROR*);\n\nstruct _WS_PROXY_MESSAGE_CALLBACK_CONTEXT\n{\n    WS_PROXY_MESSAGE_CALLBACK callback;\n    void *state;\n};\n\ntypedef enum\n{\n    WS_LISTENER_STATE_CREATED,\n    WS_LISTENER_STATE_OPENING,\n    WS_LISTENER_STATE_OPEN,\n    WS_LISTENER_STATE_FAULTED,\n    WS_LISTENER_STATE_CLOSING,\n    WS_LISTENER_STATE_CLOSED\n} WS_LISTENER_STATE;\n\ntypedef enum\n{\n    WS_LISTENER_PROPERTY_LISTEN_BACKLOG,\n    WS_LISTENER_PROPERTY_IP_VERSION,\n    WS_LISTENER_PROPERTY_STATE,\n    WS_LISTENER_PROPERTY_ASYNC_CALLBACK_MODEL,\n    WS_LISTENER_PROPERTY_CHANNEL_TYPE,\n    WS_LISTENER_PROPERTY_CHANNEL_BINDING,\n    WS_LISTENER_PROPERTY_CONNECT_TIMEOUT,\n    WS_LISTENER_PROPERTY_IS_MULTICAST,\n    WS_LISTENER_PROPERTY_MULTICAST_INTERFACES,\n    WS_LISTENER_PROPERTY_MULTICAST_LOOPBACK,\n    WS_LISTENER_PROPERTY_CLOSE_TIMEOUT,\n    WS_LISTENER_PROPERTY_TO_HEADER_MATCHING_OPTIONS,\n    WS_LISTENER_PROPERTY_TRANSPORT_URL_MATCHING_OPTIONS,\n    WS_LISTENER_PROPERTY_CUSTOM_LISTENER_CALLBACKS,\n    WS_LISTENER_PROPERTY_CUSTOM_LISTENER_PARAMETERS,\n    WS_LISTENER_PROPERTY_CUSTOM_LISTENER_INSTANCE,\n    WS_LISTENER_PROPERTY_DISALLOWED_USER_AGENT\n} WS_LISTENER_PROPERTY_ID;\n\nstruct _WS_LISTENER_PROPERTY\n{\n    WS_LISTENER_PROPERTY_ID id;\n    void *value;\n    ULONG valueSize;\n};\n\nstruct _WS_DISALLOWED_USER_AGENT_SUBSTRINGS\n{\n    ULONG subStringCount;\n    WS_STRING **subStrings;\n};\n\nstruct _WS_LISTENER_PROPERTIES\n{\n    WS_LISTENER_PROPERTY *properties;\n    ULONG propertyCount;\n};\n\ntypedef HRESULT (CALLBACK *WS_CREATE_LISTENER_CALLBACK)\n    (WS_CHANNEL_TYPE, const void*, ULONG, void**, WS_ERROR*);\n\ntypedef void (CALLBACK *WS_FREE_LISTENER_CALLBACK)\n    (void*);\n\ntypedef HRESULT (CALLBACK *WS_RESET_LISTENER_CALLBACK)\n    (void*, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_OPEN_LISTENER_CALLBACK)\n    (void*, const WS_STRING*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_CLOSE_LISTENER_CALLBACK)\n    (void*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_ABORT_LISTENER_CALLBACK)\n    (void*, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_GET_LISTENER_PROPERTY_CALLBACK)\n    (void*, WS_LISTENER_PROPERTY_ID, void*, ULONG, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_SET_LISTENER_PROPERTY_CALLBACK)\n    (void*, WS_LISTENER_PROPERTY_ID, const void*, ULONG, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_CREATE_CHANNEL_FOR_LISTENER_CALLBACK)\n    (void*, const void*, ULONG, void**, WS_ERROR*);\n\ntypedef HRESULT (CALLBACK *WS_ACCEPT_CHANNEL_CALLBACK)\n    (void*, void*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\n\nstruct _WS_CUSTOM_LISTENER_CALLBACKS\n{\n    WS_CREATE_LISTENER_CALLBACK createListenerCallback;\n    WS_FREE_LISTENER_CALLBACK freeListenerCallback;\n    WS_RESET_LISTENER_CALLBACK resetListenerCallback;\n    WS_OPEN_LISTENER_CALLBACK openListenerCallback;\n    WS_CLOSE_LISTENER_CALLBACK closeListenerCallback;\n    WS_ABORT_LISTENER_CALLBACK abortListenerCallback;\n    WS_GET_LISTENER_PROPERTY_CALLBACK getListenerPropertyCallback;\n    WS_SET_LISTENER_PROPERTY_CALLBACK setListenerPropertyCallback;\n    WS_CREATE_CHANNEL_FOR_LISTENER_CALLBACK createChannelForListenerCallback;\n    WS_ACCEPT_CHANNEL_CALLBACK acceptChannelCallback;\n};\n\nenum\n{\n    WS_MATCH_URL_DNS_HOST                 = 0x1,\n    WS_MATCH_URL_DNS_FULLY_QUALIFIED_HOST = 0x2,\n    WS_MATCH_URL_NETBIOS_HOST             = 0x4,\n    WS_MATCH_URL_LOCAL_HOST               = 0x8,\n    WS_MATCH_URL_HOST_ADDRESSES           = 0x10,\n    WS_MATCH_URL_THIS_HOST                = (WS_MATCH_URL_DNS_HOST |\n                                             WS_MATCH_URL_DNS_FULLY_QUALIFIED_HOST |\n                                             WS_MATCH_URL_NETBIOS_HOST |\n                                             WS_MATCH_URL_LOCAL_HOST |\n                                             WS_MATCH_URL_HOST_ADDRESSES),\n    WS_MATCH_URL_PORT                     = 0x20,\n    WS_MATCH_URL_EXACT_PATH               = 0x40,\n    WS_MATCH_URL_PREFIX_PATH              = 0x80,\n    WS_MATCH_URL_NO_QUERY                 = 0x100\n};\n\nHRESULT WINAPI WsAbortServiceProxy(WS_SERVICE_PROXY*, WS_ERROR*);\nHRESULT WINAPI WsAcceptChannel(WS_LISTENER*, WS_CHANNEL*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\nHRESULT WINAPI WsAddCustomHeader(WS_MESSAGE*, const WS_ELEMENT_DESCRIPTION*, WS_WRITE_OPTION,\n                                 const void*, ULONG, ULONG, WS_ERROR*);\nHRESULT WINAPI WsAddMappedHeader(WS_MESSAGE*, const WS_XML_STRING*, WS_TYPE, WS_WRITE_OPTION,\n                                 const void*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsAddressMessage(WS_MESSAGE*, const WS_ENDPOINT_ADDRESS*, WS_ERROR*);\nHRESULT WINAPI WsAlloc(WS_HEAP*, SIZE_T, void**, WS_ERROR*);\nHRESULT WINAPI WsCall(WS_SERVICE_PROXY*, const WS_OPERATION_DESCRIPTION*, const void**,\n                      WS_HEAP*, const WS_CALL_PROPERTY*, const ULONG, const WS_ASYNC_CONTEXT*,\n                      WS_ERROR*);\nHRESULT WINAPI WsCloseChannel(WS_CHANNEL*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\nHRESULT WINAPI WsCloseListener(WS_LISTENER*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\nHRESULT WINAPI WsCloseServiceProxy(WS_SERVICE_PROXY*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\nHRESULT WINAPI WsCombineUrl(const WS_STRING*, const WS_STRING*, ULONG, WS_HEAP*, WS_STRING*, WS_ERROR*);\nHRESULT WINAPI WsCopyNode(WS_XML_WRITER*, WS_XML_READER*, WS_ERROR*);\nHRESULT WINAPI WsCreateChannel(WS_CHANNEL_TYPE, WS_CHANNEL_BINDING, const WS_CHANNEL_PROPERTY*,\n                               ULONG, const WS_SECURITY_DESCRIPTION*, WS_CHANNEL**, WS_ERROR*);\nHRESULT WINAPI WsCreateChannelForListener(WS_LISTENER*, const WS_CHANNEL_PROPERTY*, ULONG, WS_CHANNEL**,\n                                          WS_ERROR*);\nHRESULT WINAPI WsCreateError(const WS_ERROR_PROPERTY*, ULONG, WS_ERROR**);\nHRESULT WINAPI WsCreateHeap(SIZE_T, SIZE_T, const WS_HEAP_PROPERTY*, ULONG, WS_HEAP**, WS_ERROR*);\nHRESULT WINAPI WsCreateListener(WS_CHANNEL_TYPE, WS_CHANNEL_BINDING, const WS_LISTENER_PROPERTY*,\n                                ULONG, const WS_SECURITY_DESCRIPTION*, WS_LISTENER**, WS_ERROR*);\nHRESULT WINAPI WsCreateMessage(WS_ENVELOPE_VERSION, WS_ADDRESSING_VERSION, const WS_MESSAGE_PROPERTY*,\n                               ULONG, WS_MESSAGE**, WS_ERROR*);\nHRESULT WINAPI WsCreateMessageForChannel(WS_CHANNEL*, const WS_MESSAGE_PROPERTY*, ULONG, WS_MESSAGE**,\n                                         WS_ERROR*);\nHRESULT WINAPI WsCreateReader(const WS_XML_READER_PROPERTY*, ULONG, WS_XML_READER**, WS_ERROR*);\nHRESULT WINAPI WsCreateServiceProxy(const WS_CHANNEL_TYPE, const WS_CHANNEL_BINDING,\n                                    const WS_SECURITY_DESCRIPTION*, const WS_PROXY_PROPERTY*,\n                                    const ULONG, const WS_CHANNEL_PROPERTY*, const ULONG,\n                                    WS_SERVICE_PROXY**, WS_ERROR*);\nHRESULT WINAPI WsCreateServiceProxyFromTemplate(WS_CHANNEL_TYPE, const WS_PROXY_PROPERTY*,\n                                                const ULONG, WS_BINDING_TEMPLATE_TYPE,\n                                                void*, ULONG, const void*, ULONG,\n                                                WS_SERVICE_PROXY**, WS_ERROR*);\nHRESULT WINAPI WsCreateWriter(const WS_XML_WRITER_PROPERTY*, ULONG, WS_XML_WRITER**, WS_ERROR*);\nHRESULT WINAPI WsCreateXmlBuffer(WS_HEAP*, const WS_XML_BUFFER_PROPERTY*, ULONG, WS_XML_BUFFER**,\n                                 WS_ERROR*);\nHRESULT WINAPI WsDateTimeToFileTime(const WS_DATETIME*, FILETIME*, WS_ERROR*);\nHRESULT WINAPI WsDecodeUrl(const WS_STRING*, ULONG, WS_HEAP*, WS_URL**, WS_ERROR*);\nHRESULT WINAPI WsEncodeUrl(const WS_URL*, ULONG, WS_HEAP*, WS_STRING*, WS_ERROR*);\nHRESULT WINAPI WsFileTimeToDateTime(const FILETIME*, WS_DATETIME*, WS_ERROR*);\nHRESULT WINAPI WsFillReader(WS_XML_READER*, ULONG, const WS_ASYNC_CONTEXT*, WS_ERROR*);\nHRESULT WINAPI WsFindAttribute(WS_XML_READER*, const WS_XML_STRING*, const WS_XML_STRING*, BOOL,\n                               ULONG*, WS_ERROR*);\nvoid WINAPI WsFreeChannel(WS_CHANNEL*);\nvoid WINAPI WsFreeError(WS_ERROR*);\nvoid WINAPI WsFreeHeap(WS_HEAP*);\nvoid WINAPI WsFreeListener(WS_LISTENER*);\nvoid WINAPI WsFreeMessage(WS_MESSAGE*);\nvoid WINAPI WsFreeReader(WS_XML_READER*);\nvoid WINAPI WsFreeServiceProxy(WS_SERVICE_PROXY*);\nvoid WINAPI WsFreeWriter(WS_XML_WRITER*);\nHRESULT WINAPI WsGetChannelProperty(WS_CHANNEL*, WS_CHANNEL_PROPERTY_ID, void*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsGetCustomHeader(WS_MESSAGE*, const WS_ELEMENT_DESCRIPTION*, WS_REPEATING_HEADER_OPTION,\n                                 ULONG, WS_READ_OPTION, WS_HEAP*, void*, ULONG, ULONG*, WS_ERROR*);\nHRESULT WINAPI WsGetDictionary(WS_ENCODING, WS_XML_DICTIONARY**, WS_ERROR*);\nHRESULT WINAPI WsGetErrorProperty(WS_ERROR*, WS_ERROR_PROPERTY_ID, void*, ULONG);\nHRESULT WINAPI WsGetErrorString(WS_ERROR*, ULONG, WS_STRING*);\nHRESULT WINAPI WsGetHeader(WS_MESSAGE*, WS_HEADER_TYPE, WS_TYPE, WS_READ_OPTION, WS_HEAP*, void*,\n                           ULONG, WS_ERROR*);\nHRESULT WINAPI WsGetHeapProperty(WS_HEAP*, WS_HEAP_PROPERTY_ID, void*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsGetListenerProperty(WS_LISTENER*, WS_LISTENER_PROPERTY_ID, void*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsGetMappedHeader(WS_MESSAGE*, const WS_XML_STRING*, WS_REPEATING_HEADER_OPTION,\n                                 ULONG, WS_TYPE, WS_READ_OPTION, WS_HEAP*, void*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsGetMessageProperty(WS_MESSAGE*, WS_MESSAGE_PROPERTY_ID, void*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsGetNamespaceFromPrefix(WS_XML_READER*, const WS_XML_STRING*, BOOL,\n                                        const WS_XML_STRING**, WS_ERROR*);\nHRESULT WINAPI WsGetPrefixFromNamespace(WS_XML_WRITER*, const WS_XML_STRING*, BOOL,\n                                        const WS_XML_STRING**, WS_ERROR*);\nHRESULT WINAPI WsGetReaderNode(WS_XML_READER*, const WS_XML_NODE**, WS_ERROR*);\nHRESULT WINAPI WsGetReaderPosition(WS_XML_READER*, WS_XML_NODE_POSITION*, WS_ERROR*);\nHRESULT WINAPI WsGetReaderProperty(WS_XML_READER*, WS_XML_READER_PROPERTY_ID, void*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsGetServiceProxyProperty(WS_SERVICE_PROXY*, const WS_PROXY_PROPERTY_ID, void*,\n                                         ULONG, WS_ERROR*);\nHRESULT WINAPI WsGetWriterPosition(WS_XML_WRITER*, WS_XML_NODE_POSITION*, WS_ERROR*);\nHRESULT WINAPI WsGetWriterProperty(WS_XML_WRITER*, WS_XML_WRITER_PROPERTY_ID, void*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsGetXmlAttribute(WS_XML_READER*, const WS_XML_STRING*, WS_HEAP*, WCHAR**,\n                                 ULONG*, WS_ERROR*);\nHRESULT WINAPI WsInitializeMessage(WS_MESSAGE*, WS_MESSAGE_INITIALIZATION, WS_MESSAGE*, WS_ERROR*);\nHRESULT WINAPI WsMoveReader(WS_XML_READER*, WS_MOVE_TO, BOOL*, WS_ERROR*);\nHRESULT WINAPI WsMoveWriter(WS_XML_WRITER*, WS_MOVE_TO, BOOL*, WS_ERROR*);\nHRESULT WINAPI WsOpenChannel(WS_CHANNEL*, const WS_ENDPOINT_ADDRESS*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\nHRESULT WINAPI WsOpenListener(WS_LISTENER*, WS_STRING*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\nHRESULT WINAPI WsOpenServiceProxy(WS_SERVICE_PROXY*, const WS_ENDPOINT_ADDRESS*, const WS_ASYNC_CONTEXT*,\n                                  WS_ERROR*);\nHRESULT WINAPI WsReadAttribute(WS_XML_READER*, const WS_ATTRIBUTE_DESCRIPTION*, WS_READ_OPTION,\n                               WS_HEAP*, void*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsReadBody(WS_MESSAGE*, const WS_ELEMENT_DESCRIPTION*, WS_READ_OPTION, WS_HEAP*, void*,\n                          ULONG, WS_ERROR*);\nHRESULT WINAPI WsReadBytes(WS_XML_READER*, void*, ULONG, ULONG*, WS_ERROR*);\nHRESULT WINAPI WsReadChars(WS_XML_READER*, WCHAR*, ULONG, ULONG*, WS_ERROR*);\nHRESULT WINAPI WsReadCharsUtf8(WS_XML_READER*, BYTE*, ULONG, ULONG*, WS_ERROR*);\nHRESULT WINAPI WsReadElement(WS_XML_READER*, const WS_ELEMENT_DESCRIPTION*, WS_READ_OPTION,\n                             WS_HEAP*, void*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsReadEndAttribute(WS_XML_READER*, WS_ERROR*);\nHRESULT WINAPI WsReadEndElement(WS_XML_READER*, WS_ERROR*);\nHRESULT WINAPI WsReadEnvelopeEnd(WS_MESSAGE*, WS_ERROR*);\nHRESULT WINAPI WsReadEnvelopeStart(WS_MESSAGE*, WS_XML_READER*, WS_MESSAGE_DONE_CALLBACK, void*,\n                                   WS_ERROR*);\nHRESULT WINAPI WsReadMessageEnd(WS_CHANNEL*, WS_MESSAGE*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\nHRESULT WINAPI WsReadMessageStart(WS_CHANNEL*, WS_MESSAGE*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\nHRESULT WINAPI WsReadNode(WS_XML_READER*, WS_ERROR*);\nHRESULT WINAPI WsReadQualifiedName(WS_XML_READER*, WS_HEAP*, WS_XML_STRING*, WS_XML_STRING*,\n                                   WS_XML_STRING*, WS_ERROR*);\nHRESULT WINAPI WsReadStartAttribute(WS_XML_READER*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsReadStartElement(WS_XML_READER*, WS_ERROR*);\nHRESULT WINAPI WsReadToStartElement(WS_XML_READER*, const WS_XML_STRING*, const WS_XML_STRING*,\n                                    BOOL*, WS_ERROR*);\nHRESULT WINAPI WsReadType(WS_XML_READER*, WS_TYPE_MAPPING, WS_TYPE, const void*, WS_READ_OPTION,\n                          WS_HEAP*, void*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsReadValue(WS_XML_READER*, WS_VALUE_TYPE, void*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsReadXmlBuffer(WS_XML_READER*, WS_HEAP*, WS_XML_BUFFER**, WS_ERROR*);\nHRESULT WINAPI WsReceiveMessage(WS_CHANNEL*, WS_MESSAGE*, const WS_MESSAGE_DESCRIPTION**, ULONG,\n                                WS_RECEIVE_OPTION, WS_READ_OPTION, WS_HEAP*, void*, ULONG, ULONG*,\n                                const WS_ASYNC_CONTEXT*, WS_ERROR*);\nHRESULT WINAPI WsRemoveCustomHeader(WS_MESSAGE*, const WS_XML_STRING*, const WS_XML_STRING*,\n                                    WS_ERROR*);\nHRESULT WINAPI WsRemoveHeader(WS_MESSAGE*, WS_HEADER_TYPE, WS_ERROR*);\nHRESULT WINAPI WsRemoveMappedHeader(WS_MESSAGE*, const WS_XML_STRING*, WS_ERROR*);\nHRESULT WINAPI WsRemoveNode(const WS_XML_NODE_POSITION*, WS_ERROR*);\nHRESULT WINAPI WsResetChannel(WS_CHANNEL*, WS_ERROR*);\nHRESULT WINAPI WsResetMessage(WS_MESSAGE*, WS_ERROR*);\nHRESULT WINAPI WsResetError(WS_ERROR*);\nHRESULT WINAPI WsResetHeap(WS_HEAP*, WS_ERROR*);\nHRESULT WINAPI WsResetListener(WS_LISTENER*, WS_ERROR*);\nHRESULT WINAPI WsResetMessage(WS_MESSAGE*, WS_ERROR*);\nHRESULT WINAPI WsResetServiceProxy(WS_SERVICE_PROXY*, WS_ERROR*);\nHRESULT WINAPI WsRequestReply(WS_CHANNEL*, WS_MESSAGE*, const WS_MESSAGE_DESCRIPTION*, WS_WRITE_OPTION,\n                              const void*, ULONG, WS_MESSAGE*, const WS_MESSAGE_DESCRIPTION*,\n                              WS_READ_OPTION, WS_HEAP*, void*, ULONG, const WS_ASYNC_CONTEXT*, WS_ERROR*);\nHRESULT WINAPI WsSendMessage(WS_CHANNEL*, WS_MESSAGE*, const WS_MESSAGE_DESCRIPTION*, WS_WRITE_OPTION,\n                             const void*, ULONG, const WS_ASYNC_CONTEXT*, WS_ERROR*);\nHRESULT WINAPI WsSendReplyMessage(WS_CHANNEL*, WS_MESSAGE*, const WS_MESSAGE_DESCRIPTION*,\n                                  WS_WRITE_OPTION, const void*, ULONG, WS_MESSAGE*,\n                                  const WS_ASYNC_CONTEXT*, WS_ERROR*);\nHRESULT WINAPI WsSetChannelProperty(WS_CHANNEL*, WS_CHANNEL_PROPERTY_ID, const void*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsSetErrorProperty(WS_ERROR*, WS_ERROR_PROPERTY_ID, const void*, ULONG);\nHRESULT WINAPI WsSetHeader(WS_MESSAGE*, WS_HEADER_TYPE, WS_TYPE, WS_WRITE_OPTION, const void*, ULONG,\n                           WS_ERROR*);\nHRESULT WINAPI WsSetInput(WS_XML_READER*, const WS_XML_READER_ENCODING*, const WS_XML_READER_INPUT*,\n                          const WS_XML_READER_PROPERTY*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsSetInputToBuffer(WS_XML_READER*, WS_XML_BUFFER*, const WS_XML_READER_PROPERTY*,\n                                  ULONG, WS_ERROR*);\nHRESULT WINAPI WsSetListenerProperty(WS_LISTENER*, WS_LISTENER_PROPERTY_ID, const void*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsSetMessageProperty(WS_MESSAGE*, WS_MESSAGE_PROPERTY_ID, const void*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsSetOutput(WS_XML_WRITER*, const WS_XML_WRITER_ENCODING*, const WS_XML_WRITER_OUTPUT*,\n                           const WS_XML_WRITER_PROPERTY*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsSetOutputToBuffer(WS_XML_WRITER*, WS_XML_BUFFER*, const WS_XML_WRITER_PROPERTY*,\n                                   ULONG, WS_ERROR*);\nHRESULT WINAPI WsSetReaderPosition(WS_XML_READER*, const WS_XML_NODE_POSITION*, WS_ERROR*);\nHRESULT WINAPI WsSetWriterPosition(WS_XML_WRITER*, const WS_XML_NODE_POSITION*, WS_ERROR*);\nHRESULT WINAPI WsShutdownSessionChannel(WS_CHANNEL*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\nHRESULT WINAPI WsSkipNode(WS_XML_READER*, WS_ERROR*);\nHRESULT WINAPI WsWriteArray(WS_XML_WRITER*, const WS_XML_STRING*, const WS_XML_STRING*, WS_VALUE_TYPE,\n                            const void*, ULONG, ULONG, ULONG, WS_ERROR*);\nHRESULT WINAPI WsWriteAttribute(WS_XML_WRITER*, const WS_ATTRIBUTE_DESCRIPTION*, WS_WRITE_OPTION,\n                                const void*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsWriteBody(WS_MESSAGE*, const WS_ELEMENT_DESCRIPTION*, WS_WRITE_OPTION, const void*,\n                           ULONG, WS_ERROR*);\nHRESULT WINAPI WsWriteBytes(WS_XML_WRITER*, const void*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsWriteChars(WS_XML_WRITER*, const WCHAR*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsWriteCharsUtf8(WS_XML_WRITER*, const BYTE*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsWriteElement(WS_XML_WRITER*, const WS_ELEMENT_DESCRIPTION*, WS_WRITE_OPTION,\n                              const void*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsWriteEndAttribute(WS_XML_WRITER*, WS_ERROR*);\nHRESULT WINAPI WsWriteEndCData(WS_XML_WRITER*, WS_ERROR*);\nHRESULT WINAPI WsWriteEndElement(WS_XML_WRITER*, WS_ERROR*);\nHRESULT WINAPI WsWriteEndStartElement(WS_XML_WRITER*, WS_ERROR*);\nHRESULT WINAPI WsWriteEnvelopeEnd(WS_MESSAGE*, WS_ERROR*);\nHRESULT WINAPI WsWriteEnvelopeStart(WS_MESSAGE*, WS_XML_WRITER*, WS_MESSAGE_DONE_CALLBACK, void*, WS_ERROR*);\nHRESULT WINAPI WsWriteMessageStart(WS_CHANNEL*, WS_MESSAGE*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\nHRESULT WINAPI WsWriteMessageEnd(WS_CHANNEL*, WS_MESSAGE*, const WS_ASYNC_CONTEXT*, WS_ERROR*);\nHRESULT WINAPI WsWriteNode(WS_XML_WRITER*, const WS_XML_NODE*, WS_ERROR*);\nHRESULT WINAPI WsWriteQualifiedName(WS_XML_WRITER*, const WS_XML_STRING*, const WS_XML_STRING*,\n                                    const WS_XML_STRING*, WS_ERROR*);\nHRESULT WINAPI WsWriteStartAttribute(WS_XML_WRITER*, const WS_XML_STRING*, const WS_XML_STRING*,\n                                     const WS_XML_STRING*, BOOL, WS_ERROR*);\nHRESULT WINAPI WsWriteStartCData(WS_XML_WRITER*, WS_ERROR*);\nHRESULT WINAPI WsWriteStartElement(WS_XML_WRITER*, const WS_XML_STRING*, const WS_XML_STRING*,\n                                   const WS_XML_STRING*, WS_ERROR*);\nHRESULT WINAPI WsWriteText(WS_XML_WRITER*, const WS_XML_TEXT*, WS_ERROR*);\nHRESULT WINAPI WsWriteType(WS_XML_WRITER*, WS_TYPE_MAPPING, WS_TYPE, const void*, WS_WRITE_OPTION,\n                           const void*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsWriteValue(WS_XML_WRITER*, WS_VALUE_TYPE, const void*, ULONG, WS_ERROR*);\nHRESULT WINAPI WsWriteXmlBuffer(WS_XML_WRITER*, WS_XML_BUFFER*, WS_ERROR*);\nHRESULT WINAPI WsWriteXmlBufferToBytes(WS_XML_WRITER*, WS_XML_BUFFER*, const WS_XML_WRITER_ENCODING*,\n                                       const WS_XML_WRITER_PROPERTY*, ULONG, WS_HEAP*, void**,\n                                       ULONG*, WS_ERROR*);\nHRESULT WINAPI WsWriteXmlnsAttribute(WS_XML_WRITER*, const WS_XML_STRING*, const WS_XML_STRING*,\n                                     BOOL, WS_ERROR*);\nHRESULT WINAPI WsXmlStringEquals(const WS_XML_STRING*, const WS_XML_STRING*, WS_ERROR*);\n\n#define WS_S_ASYNC                          0x003d0000\n#define WS_S_END                            0x003d0001\n#define WS_E_INVALID_FORMAT                 0x803d0000\n#define WS_E_OBJECT_FAULTED                 0x803d0001\n#define WS_E_NUMERIC_OVERFLOW               0x803d0002\n#define WS_E_INVALID_OPERATION              0x803d0003\n#define WS_E_OPERATION_ABORTED              0x803d0004\n#define WS_E_ENDPOINT_ACCESS_DENIED         0x803d0005\n#define WS_E_OPERATION_TIMED_OUT            0x803d0006\n#define WS_E_OPERATION_ABANDONED            0x803d0007\n#define WS_E_QUOTA_EXCEEDED                 0x803d0008\n#define WS_E_NO_TRANSLATION_AVAILABLE       0x803d0009\n#define WS_E_SECURITY_VERIFICATION_FAILURE  0x803d000a\n#define WS_E_ADDRESS_IN_USE                 0x803d000b\n#define WS_E_ADDRESS_NOT_AVAILABLE          0x803d000c\n#define WS_E_ENDPOINT_NOT_FOUND             0x803d000d\n#define WS_E_ENDPOINT_NOT_AVAILABLE         0x803d000e\n#define WS_E_ENDPOINT_FAILURE               0x803d000f\n#define WS_E_ENDPOINT_UNREACHABLE           0x803d0010\n#define WS_E_ENDPOINT_ACTION_NOT_SUPPORTED  0x803d0011\n#define WS_E_ENDPOINT_TOO_BUSY              0x803d0012\n#define WS_E_ENDPOINT_FAULT_RECEIVED        0x803d0013\n#define WS_E_ENDPOINT_DISCONNECTED          0x803d0014\n#define WS_E_PROXY_FAILURE                  0x803d0015\n#define WS_E_PROXY_ACCESS_DENIED            0x803d0016\n#define WS_E_NOT_SUPPORTED                  0x803d0017\n#define WS_E_PROXY_REQUIRES_BASIC_AUTH      0x803d0018\n#define WS_E_PROXY_REQUIRES_DIGEST_AUTH     0x803d0019\n#define WS_E_PROXY_REQUIRES_NTLM_AUTH       0x803d001a\n#define WS_E_PROXY_REQUIRES_NEGOTIATE_AUTH  0x803d001b\n#define WS_E_SERVER_REQUIRES_BASIC_AUTH     0x803d001c\n#define WS_E_SERVER_REQUIRES_DIGEST_AUTH    0x803d001d\n#define WS_E_SERVER_REQUIRES_NTLM_AUTH      0x803d001e\n#define WS_E_SERVER_REQUIRES_NEGOTIATE_AUTH 0x803d001f\n#define WS_E_INVALID_ENDPOINT_URL           0x803d0020\n#define WS_E_OTHER                          0x803d0021\n#define WS_E_SECURITY_TOKEN_EXPIRED         0x803d0022\n#define WS_E_SECURITY_SYSTEM_FAILURE        0x803d0023\n\n#ifdef __cplusplus\n}\n#endif  /* __cplusplus */\n\n#endif /* __WINE_WEBSERVICES_H */\n"
  },
  {
    "path": "wine/windows/werapi.h",
    "content": "/*\n * Windows Error Reporting definitions\n *\n * Copyright (C) 2010 Louis Lenders\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WERAPI_H\n#define __WINE_WERAPI_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Only 10 parameter are allowed in WerReportSetParameter */\n#define WER_MAX_PARAM_COUNT 10\n#define WER_P0 0\n#define WER_P1 1\n#define WER_P2 2\n#define WER_P3 3\n#define WER_P4 4\n#define WER_P5 5\n#define WER_P6 6\n#define WER_P7 7\n#define WER_P8 8\n#define WER_P9 9\n\n/* Flags for WerReportSubmit */\n#define WER_SUBMIT_HONOR_RECOVERY           0x0001\n#define WER_SUBMIT_HONOR_RESTART            0x0002\n#define WER_SUBMIT_QUEUE                    0x0004\n#define WER_SUBMIT_SHOW_DEBUG               0x0008\n#define WER_SUBMIT_ADD_REGISTERED_DATA      0x0010\n#define WER_SUBMIT_OUTOFPROCESS             0x0020\n#define WER_SUBMIT_NO_CLOSE_UI              0x0040\n#define WER_SUBMIT_NO_QUEUE                 0x0080\n#define WER_SUBMIT_NO_ARCHIVE               0x0100\n#define WER_SUBMIT_START_MINIMIZED          0x0200\n#define WER_SUBMIT_OUTOFPROCESS_ASYNC       0x0400\n#define WER_SUBMIT_BYPASS_DATA_THROTTLING   0x0800\n#define WER_SUBMIT_ARCHIVE_PARAMETERS_ONLY  0x1000\n#define WER_SUBMIT_REPORT_MACHINE_ID        0x2000\n\n#define WER_MAX_PREFERRED_MODULES           128\n#define WER_MAX_PREFERRED_MODULES_BUFFER    256\n\n/* #### */\n\ntypedef HANDLE HREPORT;\n\ntypedef enum _WER_CONSENT\n{\n    WerConsentNotAsked = 1,\n    WerConsentApproved,\n    WerConsentDenied,\n    WerConsentAlwaysPrompt,\n    WerConsentMax\n} WER_CONSENT;\n\ntypedef enum _WER_FILE_TYPE\n{\n    WerFileTypeMicrodump = 1,\n    WerFileTypeMinidump,\n    WerFileTypeHeapdump,\n    WerFileTypeUserDocument,\n    WerFileTypeOther,\n    WerFileTypeMax\n} WER_FILE_TYPE;\n\ntypedef enum _WER_REGISTER_FILE_TYPE\n{\n    WerRegFileTypeUserDocument = 1,\n    WerRegFileTypeOther = 2,\n    WerRegFileTypeMax\n} WER_REGISTER_FILE_TYPE;\n\ntypedef struct _WER_REPORT_INFORMATION\n{\n    DWORD   dwSize;\n    HANDLE  hProcess;\n    WCHAR   wzConsentKey[64];\n    WCHAR   wzFriendlyEventName[128];\n    WCHAR   wzApplicationName[128];\n    WCHAR   wzApplicationPath[MAX_PATH];\n    WCHAR   wzDescription[512];\n    HWND    hwndParent;\n} WER_REPORT_INFORMATION, *PWER_REPORT_INFORMATION;\n\n\ntypedef enum _WER_REPORT_TYPE\n{\n    WerReportNonCritical = 0,\n    WerReportCritical,\n    WerReportApplicationCrash,\n    WerReportApplicationHang,\n    WerReportKernel,\n    WerReportInvalid\n} WER_REPORT_TYPE;\n\ntypedef enum _WER_SUBMIT_RESULT\n{\n    WerReportQueued = 1,\n    WerReportUploaded,\n    WerReportDebug,\n    WerReportFailed,\n    WerDisabled,\n    WerReportCancelled,\n    WerDisabledQueue,\n    WerReportAsync,\n    WerCustomAction\n} WER_SUBMIT_RESULT, *PWER_SUBMIT_RESULT;\n\ntypedef enum _WER_DUMP_TYPE\n{\n    WerDumpTypeMicroDump = 1,\n    WerDumpTypeMiniDump,\n    WerDumpTypeHeapDump,\n    WerDumpTypeMax\n} WER_DUMP_TYPE;\n\ntypedef enum _WER_REPORT_UI\n{\n    WerUIAdditionalDataDlgHeader = 1,\n    WerUIIconFilePath = 2,\n    WerUIConsentDlgHeader = 3,\n    WerUIConsentDlgBody = 4,\n    WerUIOnlineSolutionCheckText = 5,\n    WerUIOfflineSolutionCheckText = 6,\n    WerUICloseText = 7,\n    WerUICloseDlgHeader = 8,\n    WerUICloseDlgBody = 9,\n    WerUICloseDlgButtonText = 10,\n    WerUICustomActionButtonText = 11,\n    WerUIMax\n} WER_REPORT_UI;\n\n/* #### */\n\ntypedef struct _WER_DUMP_CUSTOM_OPTIONS\n{\n    DWORD dwSize;\n    DWORD dwMask;\n    DWORD dwDumpFlags;\n    BOOL  bOnlyThisThread;\n    DWORD dwExceptionThreadFlags;\n    DWORD dwOtherThreadFlags;\n    DWORD dwExceptionThreadExFlags;\n    DWORD dwOtherThreadExFlags;\n    DWORD dwPreferredModuleFlags;\n    DWORD dwOtherModuleFlags;\n    WCHAR wzPreferredModuleList[WER_MAX_PREFERRED_MODULES_BUFFER];\n\n} WER_DUMP_CUSTOM_OPTIONS, *PWER_DUMP_CUSTOM_OPTIONS;\n\ntypedef struct _WER_EXCEPTION_INFORMATION\n{\n    PEXCEPTION_POINTERS pExceptionPointers;\n    BOOL bClientPointers;\n} WER_EXCEPTION_INFORMATION, *PWER_EXCEPTION_INFORMATION;\n\n/* #### */\n\nHRESULT WINAPI WerAddExcludedApplication(PCWSTR, BOOL);\nHRESULT WINAPI WerRegisterFile(PCWSTR file, WER_REGISTER_FILE_TYPE regfiletype, DWORD flags);\nHRESULT WINAPI WerRegisterMemoryBlock(void *block, DWORD size);\nHRESULT WINAPI WerRegisterRuntimeExceptionModule(PCWSTR callbackdll, void *context);\nHRESULT WINAPI WerRemoveExcludedApplication(PCWSTR, BOOL);\nHRESULT WINAPI WerReportAddFile(HREPORT, PCWSTR, WER_FILE_TYPE, DWORD);\nHRESULT WINAPI WerReportCloseHandle(HREPORT);\nHRESULT WINAPI WerReportCreate(PCWSTR, WER_REPORT_TYPE, PWER_REPORT_INFORMATION, HREPORT*);\nHRESULT WINAPI WerReportSetParameter(HREPORT, DWORD, PCWSTR, PCWSTR);\nHRESULT WINAPI WerReportSetUIOption(HREPORT, WER_REPORT_UI, PCWSTR);\nHRESULT WINAPI WerReportSubmit(HREPORT, WER_CONSENT, DWORD, PWER_SUBMIT_RESULT);\nHRESULT WINAPI WerSetFlags(DWORD flags);\nHRESULT WINAPI WerUnregisterMemoryBlock(void *block);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_WERAPI_H */\n"
  },
  {
    "path": "wine/windows/wfext.h",
    "content": "/*\n * Copyright (C) 2007 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __WINE_WFEXT_H\n#define __WINE_WFEXT_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define MENU_TEXT_LEN         40\n\n#define FMMENU_FIRST          1\n#define FMMENU_LAST           99\n\n#define FMEVENT_LOAD          100\n#define FMEVENT_UNLOAD        101\n#define FMEVENT_INITMENU      102\n#define FMEVENT_USER_REFRESH  103\n#define FMEVENT_SELCHANGE     104\n#define FMEVENT_TOOLBARLOAD   105\n#define FMEVENT_HELPSTRING    106\n#define FMEVENT_HELPMENUITEM  107\n\n#define FMFOCUS_DIR           1\n#define FMFOCUS_TREE          2\n#define FMFOCUS_DRIVES        3\n#define FMFOCUS_SEARCH        4\n\n#define FM_GETFOCUS           (WM_USER + 0x0200)\n#define FM_GETDRIVEINFOA      (WM_USER + 0x0201)\n#define FM_GETSELCOUNT        (WM_USER + 0x0202)\n#define FM_GETSELCOUNTLFN     (WM_USER + 0x0203)\n#define FM_GETFILESELA        (WM_USER + 0x0204)\n#define FM_GETFILESELLFNA     (WM_USER + 0x0205)\n#define FM_REFRESH_WINDOWS    (WM_USER + 0x0206)\n#define FM_RELOAD_EXTENSIONS  (WM_USER + 0x0207)\n#define FM_GETDRIVEINFOW      (WM_USER + 0x0211)\n#define FM_GETFILESELW        (WM_USER + 0x0214)\n#define FM_GETFILESELLFNW     (WM_USER + 0x0215)\n\n#define FM_GETDRIVEINFO       WINELIB_NAME_AW(FM_GETDRIVEINFO)\n#define FM_GETFILESEL         WINELIB_NAME_AW(FM_GETFILESEL)\n#define FM_GETFILESELLFN      WINELIB_NAME_AW(FM_GETFILESELLFN)\n\nLONG WINAPI FMExtensionProc(HWND,WORD,LONG);\nLONG WINAPI FMExtensionProcW(HWND,WORD,LONG);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/wia.h",
    "content": "/*\n * Copyright (C) 2009 Damjan Jovanovic\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n\n#ifdef __WINESRC__\n#error Specify wia_lh.h or wia_xp.h explicitly in Wine\n#endif\n\n#if (_WIN32_WINNT >= 0x0600)\n#include <wia_lh.h>\n#elif (_WIN32_WINNT >= 0x0501)\n#include <wia_xp.h>\n#endif\n"
  },
  {
    "path": "wine/windows/wia_lh.idl",
    "content": "/*\n * Copyright 2009 Damjan Jovanovic\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\nimport \"oaidl.idl\";\nimport \"propidl.idl\";\n\ncpp_quote(\"#include <wiadef.h>\")\n\ninterface IEnumWIA_DEV_INFO;\ninterface IWiaPropertyStorage;\ninterface IWiaItem;\ninterface IWiaEventCallback;\n\ncpp_quote(\"DEFINE_GUID(CLSID_WiaDevMgr, 0xa1f4e726,0x8cf1,0x11d1,0xbf,0x92,0x00,0x60,0x08,0x1e,0xd8,0x11);\")\n\n[\n    object,\n    uuid(5eb2502a-8cf1-11d1-bf92-0060081ed811)\n]\ninterface IWiaDevMgr : IUnknown\n{\n    HRESULT EnumDeviceInfo(\n        [in] LONG lFlag,\n        [retval, out] IEnumWIA_DEV_INFO **ppIEnum);\n\n    HRESULT CreateDevice(\n        [in] BSTR bstrDeviceID,\n        [out] IWiaItem **ppWiaItemRoot);\n\n    HRESULT SelectDeviceDlg(\n        [in] HWND hwndParent,\n        [in] LONG lDeviceType,\n        [in] LONG lFlags,\n        [in, out, unique] BSTR *pbstrDeviceID,\n        [retval, out] IWiaItem **ppItemRoot);\n\n    HRESULT SelectDeviceDlgID(\n        [in] HWND hwndParent,\n        [in] LONG lDeviceType,\n        [in] LONG lFlags,\n        [retval, out] BSTR *pbstrDeviceID);\n\n    HRESULT GetImageDlg(\n        [in] HWND hwndParent,\n        [in] LONG lDeviceType,\n        [in] LONG lFlags,\n        [in] LONG lIntent,\n        [in] IWiaItem *pItemRoot,\n        [in] BSTR bstrFilename,\n        [in, out] GUID *pguidFormat);\n\n    HRESULT RegisterEventCallbackProgram(\n        [in] LONG lFlags,\n        [in] BSTR bstrDeviceID,\n        [in] const GUID *pEventGUID,\n        [in] BSTR bstrCommandline,\n        [in] BSTR bstrName,\n        [in] BSTR bstrDescription,\n        [in] BSTR bstrIcon);\n\n    HRESULT RegisterEventCallbackInterface(\n        [in] LONG lFlags,\n        [in] BSTR bstrDeviceID,\n        [in] const GUID *pEventGUID,\n        [unique, in] IWiaEventCallback *pIWiaEventCallback,\n        [out] IUnknown **pEventObject);\n\n    HRESULT RegisterEventCallbackCLSID(\n        [in] LONG lFlags,\n        [in] BSTR bstrDeviceID,\n        [in] const GUID *pEventGUID,\n        [unique, in] const GUID *pClsID,\n        [in] BSTR bstrName,\n        [in] BSTR bstrDescription,\n        [in] BSTR bstrIcon);\n\n    HRESULT AddDeviceDlg(\n        [in] HWND hwndParent,\n        [in] LONG lFlags);\n}\n\n[\n    object,\n    uuid(5e38b83c-8cf1-11d1-bf92-0060081ed811)\n]\ninterface IEnumWIA_DEV_INFO : IUnknown\n{\n  HRESULT Next(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)] IWiaPropertyStorage **rgelt,\n    [out] ULONG *pceltFetched\n  );\n\n  HRESULT Skip(\n    [in]  ULONG celt\n  );\n\n  HRESULT Reset();\n\n  HRESULT Clone(\n    [out] IEnumWIA_DEV_INFO **ppIEnum\n  );\n\n  HRESULT GetCount(\n    [out] ULONG *celt\n  );\n}\n\n[\n    object,\n    uuid(98B5E8A0-29CC-491a-AAC0-E6DB4FDCCEB6)\n]\ninterface IWiaPropertyStorage : IUnknown\n{\n    /* FIXME: fill in */\n}\n\n[\n    object,\n    uuid(4db1ad10-3391-11d2-9a33-00c04fa36145)\n]\ninterface IWiaItem : IUnknown\n{\n    /* FIXME: fill in */\n}\n\n[\n    object,\n    uuid(ae6287b0-0084-11d2-973b-00a0c9068f2e)\n]\ninterface IWiaEventCallback : IUnknown\n{\n    HRESULT ImageEventCallback(\n        [in] const GUID *pEventGUID,\n        [in] BSTR bstrEventDescription,\n        [in] BSTR bstrDeviceID,\n        [in] BSTR bstrDeviceDescription,\n        [in] DWORD dwDeviceType,\n        [in] BSTR bstrFullItemName,\n        [in,out] ULONG *pulEventType,\n        [in] ULONG ulReserved);\n}\n"
  },
  {
    "path": "wine/windows/wia_xp.idl",
    "content": "/*\n * Copyright 2009 Damjan Jovanovic\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\nimport \"oaidl.idl\";\nimport \"propidl.idl\";\n\ncpp_quote(\"#include <wiadef.h>\")\n\ninterface IEnumWIA_DEV_INFO;\ninterface IWiaPropertyStorage;\ninterface IWiaItem;\ninterface IWiaEventCallback;\n\ncpp_quote(\"DEFINE_GUID(CLSID_WiaDevMgr, 0xa1f4e726,0x8cf1,0x11d1,0xbf,0x92,0x00,0x60,0x08,0x1e,0xd8,0x11);\")\n\n[\n    object,\n    uuid(5eb2502a-8cf1-11d1-bf92-0060081ed811)\n]\ninterface IWiaDevMgr : IUnknown\n{\n    HRESULT EnumDeviceInfo(\n        [in] LONG lFlag,\n        [retval, out] IEnumWIA_DEV_INFO **ppIEnum);\n\n    HRESULT CreateDevice(\n        [in] BSTR bstrDeviceID,\n        [out] IWiaItem **ppWiaItemRoot);\n\n    HRESULT SelectDeviceDlg(\n        [in] HWND hwndParent,\n        [in] LONG lDeviceType,\n        [in] LONG lFlags,\n        [in, out, unique] BSTR *pbstrDeviceID,\n        [retval, out] IWiaItem **ppItemRoot);\n\n    HRESULT SelectDeviceDlgID(\n        [in] HWND hwndParent,\n        [in] LONG lDeviceType,\n        [in] LONG lFlags,\n        [retval, out] BSTR *pbstrDeviceID);\n\n    HRESULT GetImageDlg(\n        [in] HWND hwndParent,\n        [in] LONG lDeviceType,\n        [in] LONG lFlags,\n        [in] LONG lIntent,\n        [in] IWiaItem *pItemRoot,\n        [in] BSTR bstrFilename,\n        [in, out] GUID *pguidFormat);\n\n    HRESULT RegisterEventCallbackProgram(\n        [in] LONG lFlags,\n        [in] BSTR bstrDeviceID,\n        [in] const GUID *pEventGUID,\n        [in] BSTR bstrCommandline,\n        [in] BSTR bstrName,\n        [in] BSTR bstrDescription,\n        [in] BSTR bstrIcon);\n\n    HRESULT RegisterEventCallbackInterface(\n        [in] LONG lFlags,\n        [in] BSTR bstrDeviceID,\n        [in] const GUID *pEventGUID,\n        [unique, in] IWiaEventCallback *pIWiaEventCallback,\n        [out] IUnknown **pEventObject);\n\n    HRESULT RegisterEventCallbackCLSID(\n        [in] LONG lFlags,\n        [in] BSTR bstrDeviceID,\n        [in] const GUID *pEventGUID,\n        [unique, in] const GUID *pClsID,\n        [in] BSTR bstrName,\n        [in] BSTR bstrDescription,\n        [in] BSTR bstrIcon);\n\n    HRESULT AddDeviceDlg(\n        [in] HWND hwndParent,\n        [in] LONG lFlags);\n}\n\n[\n    object,\n    uuid(5e38b83c-8cf1-11d1-bf92-0060081ed811)\n]\ninterface IEnumWIA_DEV_INFO : IUnknown\n{\n  HRESULT Next(\n    [in] ULONG celt,\n    [out, size_is(celt), length_is(*pceltFetched)] IWiaPropertyStorage **rgelt,\n    [out] ULONG *pceltFetched\n  );\n\n  HRESULT Skip(\n    [in]  ULONG celt\n  );\n\n  HRESULT Reset();\n\n  HRESULT Clone(\n    [out] IEnumWIA_DEV_INFO **ppIEnum\n  );\n\n  HRESULT GetCount(\n    [out] ULONG *celt\n  );\n}\n\n[\n    object,\n    uuid(98B5E8A0-29CC-491a-AAC0-E6DB4FDCCEB6)\n]\ninterface IWiaPropertyStorage : IUnknown\n{\n    /* FIXME: fill in */\n}\n\n[\n    object,\n    uuid(4db1ad10-3391-11d2-9a33-00c04fa36145)\n]\ninterface IWiaItem : IUnknown\n{\n    /* FIXME: fill in */\n}\n\n[\n    object,\n    uuid(ae6287b0-0084-11d2-973b-00a0c9068f2e)\n]\ninterface IWiaEventCallback : IUnknown\n{\n    HRESULT ImageEventCallback(\n        [in] const GUID *pEventGUID,\n        [in] BSTR bstrEventDescription,\n        [in] BSTR bstrDeviceID,\n        [in] BSTR bstrDeviceDescription,\n        [in] DWORD dwDeviceType,\n        [in] BSTR bstrFullItemName,\n        [in,out] ULONG *pulEventType,\n        [in] ULONG ulReserved);\n}\n"
  },
  {
    "path": "wine/windows/wiadef.h",
    "content": "/*\n * WIA constants\n *\n * Copyright 2015 Nikolay Sivov for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#define WIA_DEVINFO_ENUM_ALL      0x0000000f\n#define WIA_DEVINFO_ENUM_LOCAL    0x00000010\n\n#define FACILITY_WIA 33\n\n#define BASE_VAL_WIA_ERROR        0x00000000\n\n#define WIA_S_NO_DEVICE_AVAILABLE       MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIA, (BASE_VAL_WIA_ERROR + 21))\n"
  },
  {
    "path": "wine/windows/wimgapi.h",
    "content": "/*\n * Copyright (C) 2015 Austin English\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _WIMGAPI_H_\n#define _WIMGAPI_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct _WIM_MOUNT_LIST\n{\n    WCHAR WimPath[MAX_PATH];\n    WCHAR MountPath[MAX_PATH];\n    DWORD ImageIndex;\n    BOOL MountedForRW;\n} WIM_MOUNT_LIST, *PWIM_MOUNT_LIST, *LPWIM_MOUNT_LIST;\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _WIMGAPI_H_ */\n"
  },
  {
    "path": "wine/windows/winbase.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINBASE_H\n#define __WINE_WINBASE_H\n\n#include <winerror.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifdef _KERNEL32_\n#define WINBASEAPI\n#else\n#define WINBASEAPI DECLSPEC_IMPORT\n#endif\n\n#ifdef _ADVAPI32_\n#define WINADVAPI\n#else\n#define WINADVAPI DECLSPEC_IMPORT\n#endif\n\n#include <libloaderapi.h>\n\n  /* Windows Exit Procedure flag values */\n#define\tWEP_FREE_DLL        0\n#define\tWEP_SYSTEM_EXIT     1\n\ntypedef DWORD (CALLBACK *LPTHREAD_START_ROUTINE)(LPVOID);\n\ntypedef VOID (WINAPI *PFIBER_START_ROUTINE)( LPVOID lpFiberParameter );\ntypedef PFIBER_START_ROUTINE LPFIBER_START_ROUTINE;\n\n#define FIBER_FLAG_FLOAT_SWITCH     1\n\ntypedef RTL_CRITICAL_SECTION CRITICAL_SECTION;\ntypedef PRTL_CRITICAL_SECTION PCRITICAL_SECTION;\ntypedef PRTL_CRITICAL_SECTION LPCRITICAL_SECTION;\n\ntypedef RTL_CRITICAL_SECTION_DEBUG CRITICAL_SECTION_DEBUG;\ntypedef PRTL_CRITICAL_SECTION_DEBUG PCRITICAL_SECTION_DEBUG;\ntypedef PRTL_CRITICAL_SECTION_DEBUG LPCRITICAL_SECTION_DEBUG;\n\n#define CRITICAL_SECTION_NO_DEBUG_INFO RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO\n\ntypedef RTL_SRWLOCK SRWLOCK;\ntypedef PRTL_SRWLOCK PSRWLOCK;\n\n#define SRWLOCK_INIT RTL_SRWLOCK_INIT\n\ntypedef WAITORTIMERCALLBACKFUNC WAITORTIMERCALLBACK;\n\n#define CONDITION_VARIABLE_INIT RTL_CONDITION_VARIABLE_INIT\n#define CONDITION_VARIABLE_LOCKMODE_SHARED RTL_CONDITION_VARIABLE_LOCKMODE_SHARED\ntypedef RTL_CONDITION_VARIABLE CONDITION_VARIABLE, *PCONDITION_VARIABLE;\n\n#define EXCEPTION_DEBUG_EVENT       1\n#define CREATE_THREAD_DEBUG_EVENT   2\n#define CREATE_PROCESS_DEBUG_EVENT  3\n#define EXIT_THREAD_DEBUG_EVENT     4\n#define EXIT_PROCESS_DEBUG_EVENT    5\n#define LOAD_DLL_DEBUG_EVENT        6\n#define UNLOAD_DLL_DEBUG_EVENT      7\n#define OUTPUT_DEBUG_STRING_EVENT   8\n#define RIP_EVENT                   9\n\ntypedef struct _EXCEPTION_DEBUG_INFO {\n    EXCEPTION_RECORD ExceptionRecord;\n    DWORD dwFirstChance;\n} EXCEPTION_DEBUG_INFO;\n\ntypedef struct _CREATE_THREAD_DEBUG_INFO {\n    HANDLE hThread;\n    LPVOID lpThreadLocalBase;\n    LPTHREAD_START_ROUTINE lpStartAddress;\n} CREATE_THREAD_DEBUG_INFO;\n\ntypedef struct _CREATE_PROCESS_DEBUG_INFO {\n    HANDLE hFile;\n    HANDLE hProcess;\n    HANDLE hThread;\n    LPVOID lpBaseOfImage;\n    DWORD dwDebugInfoFileOffset;\n    DWORD nDebugInfoSize;\n    LPVOID lpThreadLocalBase;\n    LPTHREAD_START_ROUTINE lpStartAddress;\n    LPVOID lpImageName;\n    WORD fUnicode;\n} CREATE_PROCESS_DEBUG_INFO;\n\ntypedef struct _EXIT_THREAD_DEBUG_INFO {\n    DWORD dwExitCode;\n} EXIT_THREAD_DEBUG_INFO;\n\ntypedef struct _EXIT_PROCESS_DEBUG_INFO {\n    DWORD dwExitCode;\n} EXIT_PROCESS_DEBUG_INFO;\n\ntypedef struct _LOAD_DLL_DEBUG_INFO {\n    HANDLE hFile;\n    LPVOID   lpBaseOfDll;\n    DWORD    dwDebugInfoFileOffset;\n    DWORD    nDebugInfoSize;\n    LPVOID   lpImageName;\n    WORD     fUnicode;\n} LOAD_DLL_DEBUG_INFO;\n\ntypedef struct _UNLOAD_DLL_DEBUG_INFO {\n    LPVOID lpBaseOfDll;\n} UNLOAD_DLL_DEBUG_INFO;\n\ntypedef struct _OUTPUT_DEBUG_STRING_INFO {\n    LPSTR lpDebugStringData;\n    WORD  fUnicode;\n    WORD  nDebugStringLength;\n} OUTPUT_DEBUG_STRING_INFO;\n\ntypedef struct _RIP_INFO {\n    DWORD dwError;\n    DWORD dwType;\n} RIP_INFO;\n\ntypedef struct _DEBUG_EVENT {\n    DWORD dwDebugEventCode;\n    DWORD dwProcessId;\n    DWORD dwThreadId;\n    union {\n        EXCEPTION_DEBUG_INFO      Exception;\n        CREATE_THREAD_DEBUG_INFO  CreateThread;\n        CREATE_PROCESS_DEBUG_INFO CreateProcessInfo;\n        EXIT_THREAD_DEBUG_INFO    ExitThread;\n        EXIT_PROCESS_DEBUG_INFO   ExitProcess;\n        LOAD_DLL_DEBUG_INFO       LoadDll;\n        UNLOAD_DLL_DEBUG_INFO     UnloadDll;\n        OUTPUT_DEBUG_STRING_INFO  DebugString;\n        RIP_INFO                  RipInfo;\n    } u;\n} DEBUG_EVENT, *LPDEBUG_EVENT;\n\ntypedef PCONTEXT LPCONTEXT;\ntypedef PEXCEPTION_RECORD LPEXCEPTION_RECORD;\ntypedef PEXCEPTION_POINTERS LPEXCEPTION_POINTERS;\n\ntypedef LONG (CALLBACK *PTOP_LEVEL_EXCEPTION_FILTER)(PEXCEPTION_POINTERS);\ntypedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER;\n\n#define OFS_MAXPATHNAME 128\ntypedef struct _OFSTRUCT\n{\n    BYTE cBytes;\n    BYTE fFixedDisk;\n    WORD nErrCode;\n    WORD Reserved1;\n    WORD Reserved2;\n    CHAR szPathName[OFS_MAXPATHNAME];\n} OFSTRUCT, *POFSTRUCT, *LPOFSTRUCT;\n\n#define OF_READ               0x0000\n#define OF_WRITE              0x0001\n#define OF_READWRITE          0x0002\n#define OF_SHARE_COMPAT       0x0000\n#define OF_SHARE_EXCLUSIVE    0x0010\n#define OF_SHARE_DENY_WRITE   0x0020\n#define OF_SHARE_DENY_READ    0x0030\n#define OF_SHARE_DENY_NONE    0x0040\n#define OF_PARSE              0x0100\n#define OF_DELETE             0x0200\n#define OF_VERIFY             0x0400   /* Used with OF_REOPEN */\n#define OF_SEARCH             0x0400   /* Used without OF_REOPEN */\n#define OF_CANCEL             0x0800\n#define OF_CREATE             0x1000\n#define OF_PROMPT             0x2000\n#define OF_EXIST              0x4000\n#define OF_REOPEN             0x8000\n\n/* SetErrorMode values */\n#define SEM_FAILCRITICALERRORS      0x0001\n#define SEM_NOGPFAULTERRORBOX       0x0002\n#define SEM_NOALIGNMENTFAULTEXCEPT  0x0004\n#define SEM_NOOPENFILEERRORBOX      0x8000\n\n/* CopyFileEx flags */\n#define COPY_FILE_FAIL_IF_EXISTS        0x00000001\n#define COPY_FILE_RESTARTABLE           0x00000002\n#define COPY_FILE_OPEN_SOURCE_FOR_WRITE 0x00000004\n#define COPY_FILE_ALLOW_DECRYPTED_DESTINATION  0x00000008\n#define COPY_FILE_COPY_SYMLINK          0x00000800\n#define COPY_FILE_NO_BUFFERING          0x00001000\n\n/* return values for CopyProgressRoutine */\n#define PROGRESS_CONTINUE   0\n#define PROGRESS_CANCEL     1\n#define PROGRESS_STOP       2\n#define PROGRESS_QUIET      3\n\n/* reason codes for CopyProgressRoutine */\n#define CALLBACK_CHUNK_FINISHED 0\n#define CALLBACK_STREAM_SWITCH  1\n\n/* GetTempFileName() Flags */\n#define TF_FORCEDRIVE\t        0x80\n\n#define DRIVE_UNKNOWN              0\n#define DRIVE_NO_ROOT_DIR          1\n#define DRIVE_REMOVABLE            2\n#define DRIVE_FIXED                3\n#define DRIVE_REMOTE               4\n/* Win32 additions */\n#define DRIVE_CDROM                5\n#define DRIVE_RAMDISK              6\n\n#define MAX_COMPUTERNAME_LENGTH    15\n\n/* The security attributes structure */\ntypedef struct _SECURITY_ATTRIBUTES\n{\n    DWORD   nLength;\n    LPVOID  lpSecurityDescriptor;\n    BOOL  bInheritHandle;\n} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;\n\n#ifndef _FILETIME_\n#define _FILETIME_\n/* 64 bit number of 100 nanoseconds intervals since January 1, 1601 */\ntypedef struct _FILETIME\n{\n#ifdef WORDS_BIGENDIAN\n  DWORD  dwHighDateTime;\n  DWORD  dwLowDateTime;\n#else\n  DWORD  dwLowDateTime;\n  DWORD  dwHighDateTime;\n#endif\n} FILETIME, *PFILETIME, *LPFILETIME;\n#endif /* _FILETIME_ */\n\n/* Find* structures */\ntypedef struct _WIN32_FIND_DATAA\n{\n    DWORD     dwFileAttributes;\n    FILETIME  ftCreationTime;\n    FILETIME  ftLastAccessTime;\n    FILETIME  ftLastWriteTime;\n    DWORD     nFileSizeHigh;\n    DWORD     nFileSizeLow;\n    DWORD     dwReserved0;\n    DWORD     dwReserved1;\n    CHAR      cFileName[260];\n    CHAR      cAlternateFileName[14];\n} WIN32_FIND_DATAA, *PWIN32_FIND_DATAA, *LPWIN32_FIND_DATAA;\n\ntypedef struct _WIN32_FIND_DATAW\n{\n    DWORD     dwFileAttributes;\n    FILETIME  ftCreationTime;\n    FILETIME  ftLastAccessTime;\n    FILETIME  ftLastWriteTime;\n    DWORD     nFileSizeHigh;\n    DWORD     nFileSizeLow;\n    DWORD     dwReserved0;\n    DWORD     dwReserved1;\n    WCHAR     cFileName[260];\n    WCHAR     cAlternateFileName[14];\n} WIN32_FIND_DATAW, *PWIN32_FIND_DATAW, *LPWIN32_FIND_DATAW;\n\nDECL_WINELIB_TYPE_AW(WIN32_FIND_DATA)\nDECL_WINELIB_TYPE_AW(PWIN32_FIND_DATA)\nDECL_WINELIB_TYPE_AW(LPWIN32_FIND_DATA)\n\ntypedef enum _FINDEX_INFO_LEVELS\n{\n\tFindExInfoStandard,\n\tFindExInfoBasic,\n\tFindExInfoMaxInfoLevel\n} FINDEX_INFO_LEVELS;\n\n#define FIND_FIRST_EX_CASE_SENSITIVE 1\n#define FIND_FIRST_EX_LARGE_FETCH    2\n\ntypedef enum _FINDEX_SEARCH_OPS\n{\n\tFindExSearchNameMatch,\n\tFindExSearchLimitToDirectories,\n\tFindExSearchLimitToDevices,\n\tFindExSearchMaxSearchOp\n} FINDEX_SEARCH_OPS;\n\ntypedef struct _PROCESS_HEAP_ENTRY\n{\n    LPVOID lpData;\n    DWORD cbData;\n    BYTE cbOverhead;\n    BYTE iRegionIndex;\n    WORD wFlags;\n    union {\n        struct {\n            HANDLE hMem;\n            DWORD dwReserved[3];\n        } Block;\n        struct {\n            DWORD dwCommittedSize;\n            DWORD dwUnCommittedSize;\n            LPVOID lpFirstBlock;\n            LPVOID lpLastBlock;\n        } Region;\n    } DUMMYUNIONNAME;\n} PROCESS_HEAP_ENTRY, *PPROCESS_HEAP_ENTRY, *LPPROCESS_HEAP_ENTRY;\n\n#define PROCESS_HEAP_REGION                   0x0001\n#define PROCESS_HEAP_UNCOMMITTED_RANGE        0x0002\n#define PROCESS_HEAP_ENTRY_BUSY               0x0004\n#define PROCESS_HEAP_ENTRY_MOVEABLE           0x0010\n#define PROCESS_HEAP_ENTRY_DDESHARE           0x0020\n\n#define INVALID_HANDLE_VALUE     ((HANDLE)~(ULONG_PTR)0)\n#define INVALID_FILE_SIZE        (~0u)\n#define INVALID_SET_FILE_POINTER (~0u)\n#define INVALID_FILE_ATTRIBUTES  (~0u)\n\n#define LOCKFILE_FAIL_IMMEDIATELY   1\n#define LOCKFILE_EXCLUSIVE_LOCK     2\n\n#define FLS_OUT_OF_INDEXES (~0u)\n#define TLS_OUT_OF_INDEXES (~0u)\n\n#define SHUTDOWN_NORETRY 1\n\n/* comm */\n\n#define CBR_110\t0xFF10\n#define CBR_300\t0xFF11\n#define CBR_600\t0xFF12\n#define CBR_1200\t0xFF13\n#define CBR_2400\t0xFF14\n#define CBR_4800\t0xFF15\n#define CBR_9600\t0xFF16\n#define CBR_14400\t0xFF17\n#define CBR_19200\t0xFF18\n#define CBR_38400\t0xFF1B\n#define CBR_56000\t0xFF1F\n#define CBR_57600       0xFF20\n#define CBR_115200      0xFF21\n#define CBR_128000\t0xFF23\n#define CBR_256000\t0xFF27\n\n#define NOPARITY\t0\n#define ODDPARITY\t1\n#define EVENPARITY\t2\n#define MARKPARITY\t3\n#define SPACEPARITY\t4\n#define ONESTOPBIT\t0\n#define ONE5STOPBITS\t1\n#define TWOSTOPBITS\t2\n\n#define IGNORE\t\t0\n#define INFINITE      0xFFFFFFFF\n\n#define CE_RXOVER\t0x0001\n#define CE_OVERRUN\t0x0002\n#define CE_RXPARITY\t0x0004\n#define CE_FRAME\t0x0008\n#define CE_BREAK\t0x0010\n#define CE_CTSTO\t0x0020\n#define CE_DSRTO\t0x0040\n#define CE_RLSDTO\t0x0080\n#define CE_TXFULL\t0x0100\n#define CE_PTO\t\t0x0200\n#define CE_IOE\t\t0x0400\n#define CE_DNS\t\t0x0800\n#define CE_OOP\t\t0x1000\n#define CE_MODE\t0x8000\n\n#define IE_BADID\t-1\n#define IE_OPEN\t-2\n#define IE_NOPEN\t-3\n#define IE_MEMORY\t-4\n#define IE_DEFAULT\t-5\n#define IE_HARDWARE\t-10\n#define IE_BYTESIZE\t-11\n#define IE_BAUDRATE\t-12\n\n#define EV_RXCHAR    0x0001\n#define EV_RXFLAG    0x0002\n#define EV_TXEMPTY   0x0004\n#define EV_CTS       0x0008\n#define EV_DSR       0x0010\n#define EV_RLSD      0x0020\n#define EV_BREAK     0x0040\n#define EV_ERR       0x0080\n#define EV_RING      0x0100\n#define EV_PERR      0x0200\n#define EV_RX80FULL  0x0400\n#define EV_EVENT1    0x0800\n#define EV_EVENT2    0x1000\n\n#define SETXOFF\t1\n#define SETXON\t\t2\n#define SETRTS\t\t3\n#define CLRRTS\t\t4\n#define SETDTR\t\t5\n#define CLRDTR\t\t6\n#define RESETDEV\t7\n#define SETBREAK\t8\n#define CLRBREAK\t9\n\n/* Purge functions for Comm Port */\n#define PURGE_TXABORT       0x0001  /* Kill the pending/current writes to the\n\t\t\t\t       comm port */\n#define PURGE_RXABORT       0x0002  /*Kill the pending/current reads to\n\t\t\t\t     the comm port */\n#define PURGE_TXCLEAR       0x0004  /* Kill the transmit queue if there*/\n#define PURGE_RXCLEAR       0x0008  /* Kill the typeahead buffer if there*/\n\n\n/* Modem Status Flags */\n#define MS_CTS_ON           ((DWORD)0x0010)\n#define MS_DSR_ON           ((DWORD)0x0020)\n#define MS_RING_ON          ((DWORD)0x0040)\n#define MS_RLSD_ON          ((DWORD)0x0080)\n\n#define\tRTS_CONTROL_DISABLE\t0\n#define\tRTS_CONTROL_ENABLE\t1\n#define\tRTS_CONTROL_HANDSHAKE\t2\n#define\tRTS_CONTROL_TOGGLE\t3\n\n#define\tDTR_CONTROL_DISABLE\t0\n#define\tDTR_CONTROL_ENABLE\t1\n#define\tDTR_CONTROL_HANDSHAKE\t2\n\n\n#define LMEM_FIXED          0\n#define LMEM_MOVEABLE       0x0002\n#define LMEM_NOCOMPACT      0x0010\n#define LMEM_NODISCARD      0x0020\n#define LMEM_ZEROINIT       0x0040\n#define LMEM_MODIFY         0x0080\n#define LMEM_DISCARDABLE    0x0F00\n#define LMEM_DISCARDED      0x4000\n#define LMEM_INVALID_HANDLE 0x8000\n#define LMEM_LOCKCOUNT      0x00FF\n\n#define LPTR (LMEM_FIXED | LMEM_ZEROINIT)\n#define LHND (LMEM_MOVEABLE | LMEM_ZEROINIT)\n\n#define NONZEROLHND         (LMEM_MOVEABLE)\n#define NONZEROLPTR         (LMEM_FIXED)\n\n#define LocalDiscard(h)     (LocalReAlloc((h),0,LMEM_MOVEABLE))\n\n#define GMEM_FIXED          0x0000\n#define GMEM_MOVEABLE       0x0002\n#define GMEM_NOCOMPACT      0x0010\n#define GMEM_NODISCARD      0x0020\n#define GMEM_ZEROINIT       0x0040\n#define GMEM_MODIFY         0x0080\n#define GMEM_DISCARDABLE    0x0100\n#define GMEM_NOT_BANKED     0x1000\n#define GMEM_SHARE          0x2000\n#define GMEM_DDESHARE       0x2000\n#define GMEM_NOTIFY         0x4000\n#define GMEM_LOWER          GMEM_NOT_BANKED\n#define GMEM_DISCARDED      0x4000\n#define GMEM_LOCKCOUNT      0x00ff\n#define GMEM_INVALID_HANDLE 0x8000\n\n#define GHND                (GMEM_MOVEABLE | GMEM_ZEROINIT)\n#define GPTR                (GMEM_FIXED | GMEM_ZEROINIT)\n\n#define GlobalLRUNewest(h)  ((HANDLE)(h))\n#define GlobalLRUOldest(h)  ((HANDLE)(h))\n#define GlobalDiscard(h)    (GlobalReAlloc((h),0,GMEM_MOVEABLE))\n\n#define INVALID_ATOM        ((ATOM)0)\n#define MAXINTATOM          0xc000\n#ifdef WINE_NO_UNICODE_MACROS /* force using a cast */\n#define MAKEINTATOM(atom)   ((ULONG_PTR)((WORD)(atom)))\n#else\n#define MAKEINTATOM(atom)   ((LPTSTR)((ULONG_PTR)((WORD)(atom))))\n#endif\n\ntypedef struct tagMEMORYSTATUS\n{\n    DWORD    dwLength;\n    DWORD    dwMemoryLoad;\n    SIZE_T   dwTotalPhys;\n    SIZE_T   dwAvailPhys;\n    SIZE_T   dwTotalPageFile;\n    SIZE_T   dwAvailPageFile;\n    SIZE_T   dwTotalVirtual;\n    SIZE_T   dwAvailVirtual;\n} MEMORYSTATUS, *LPMEMORYSTATUS;\n\n#include <pshpack8.h>\ntypedef struct tagMEMORYSTATUSEX {\n  DWORD dwLength;\n  DWORD dwMemoryLoad;\n  DWORDLONG DECLSPEC_ALIGN(8) ullTotalPhys;\n  DWORDLONG DECLSPEC_ALIGN(8) ullAvailPhys;\n  DWORDLONG DECLSPEC_ALIGN(8) ullTotalPageFile;\n  DWORDLONG DECLSPEC_ALIGN(8) ullAvailPageFile;\n  DWORDLONG DECLSPEC_ALIGN(8) ullTotalVirtual;\n  DWORDLONG DECLSPEC_ALIGN(8) ullAvailVirtual;\n  DWORDLONG DECLSPEC_ALIGN(8) ullAvailExtendedVirtual;\n} MEMORYSTATUSEX, *LPMEMORYSTATUSEX;\n#include <poppack.h>\n\ntypedef enum _MEMORY_RESOURCE_NOTIFICATION_TYPE {\n    LowMemoryResourceNotification,\n    HighMemoryResourceNotification\n} MEMORY_RESOURCE_NOTIFICATION_TYPE;\n\n#ifndef _SYSTEMTIME_\n#define _SYSTEMTIME_\ntypedef struct _SYSTEMTIME{\n        WORD wYear;\n        WORD wMonth;\n        WORD wDayOfWeek;\n        WORD wDay;\n        WORD wHour;\n        WORD wMinute;\n        WORD wSecond;\n        WORD wMilliseconds;\n} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;\n#endif /* _SYSTEMTIME_ */\n\n/* The 'overlapped' data structure used by async I/O functions.\n */\ntypedef struct _OVERLAPPED {\n#ifdef WORDS_BIGENDIAN\n        ULONG_PTR InternalHigh;\n        ULONG_PTR Internal;\n#else\n        ULONG_PTR Internal;\n        ULONG_PTR InternalHigh;\n#endif\n        union {\n            struct {\n#ifdef WORDS_BIGENDIAN\n                DWORD OffsetHigh;\n                DWORD Offset;\n#else\n                DWORD Offset;\n                DWORD OffsetHigh;\n#endif\n            } DUMMYSTRUCTNAME;\n            PVOID Pointer;\n        } DUMMYUNIONNAME;\n        HANDLE hEvent;\n} OVERLAPPED, *LPOVERLAPPED;\n\ntypedef VOID (CALLBACK *LPOVERLAPPED_COMPLETION_ROUTINE)(DWORD,DWORD,LPOVERLAPPED);\n\n/* Process startup information.\n */\n\n/* STARTUPINFO.dwFlags */\n#define\tSTARTF_USESHOWWINDOW\t0x00000001\n#define\tSTARTF_USESIZE\t\t0x00000002\n#define\tSTARTF_USEPOSITION\t0x00000004\n#define\tSTARTF_USECOUNTCHARS\t0x00000008\n#define\tSTARTF_USEFILLATTRIBUTE\t0x00000010\n#define\tSTARTF_RUNFULLSCREEN\t0x00000020\n#define\tSTARTF_FORCEONFEEDBACK\t0x00000040\n#define\tSTARTF_FORCEOFFFEEDBACK\t0x00000080\n#define\tSTARTF_USESTDHANDLES\t0x00000100\n#define\tSTARTF_USEHOTKEY\t0x00000200\n\ntypedef struct _STARTUPINFOA{\n        DWORD cb;\t\t/* 00: size of struct */\n        LPSTR lpReserved;\t/* 04: */\n        LPSTR lpDesktop;\t/* 08: */\n        LPSTR lpTitle;\t\t/* 0c: */\n        DWORD dwX;\t\t/* 10: */\n        DWORD dwY;\t\t/* 14: */\n        DWORD dwXSize;\t\t/* 18: */\n        DWORD dwYSize;\t\t/* 1c: */\n        DWORD dwXCountChars;\t/* 20: */\n        DWORD dwYCountChars;\t/* 24: */\n        DWORD dwFillAttribute;\t/* 28: */\n        DWORD dwFlags;\t\t/* 2c: */\n        WORD wShowWindow;\t/* 30: */\n        WORD cbReserved2;\t/* 32: */\n        BYTE *lpReserved2;\t/* 34: */\n        HANDLE hStdInput;\t/* 38: */\n        HANDLE hStdOutput;\t/* 3c: */\n        HANDLE hStdError;\t/* 40: */\n} STARTUPINFOA, *LPSTARTUPINFOA;\n\ntypedef struct _STARTUPINFOW{\n        DWORD cb;\n        LPWSTR lpReserved;\n        LPWSTR lpDesktop;\n        LPWSTR lpTitle;\n        DWORD dwX;\n        DWORD dwY;\n        DWORD dwXSize;\n        DWORD dwYSize;\n        DWORD dwXCountChars;\n        DWORD dwYCountChars;\n        DWORD dwFillAttribute;\n        DWORD dwFlags;\n        WORD wShowWindow;\n        WORD cbReserved2;\n        BYTE *lpReserved2;\n        HANDLE hStdInput;\n        HANDLE hStdOutput;\n        HANDLE hStdError;\n} STARTUPINFOW, *LPSTARTUPINFOW;\n\nDECL_WINELIB_TYPE_AW(STARTUPINFO)\nDECL_WINELIB_TYPE_AW(LPSTARTUPINFO)\n\ntypedef struct _PROCESS_INFORMATION{\n\tHANDLE\thProcess;\n\tHANDLE\thThread;\n\tDWORD\t\tdwProcessId;\n\tDWORD\t\tdwThreadId;\n} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;\n\ntypedef struct _TIME_DYNAMIC_ZONE_INFORMATION\n{\n    LONG Bias;\n    WCHAR StandardName[32];\n    SYSTEMTIME StandardDate;\n    LONG StandardBias;\n    WCHAR DaylightName[32];\n    SYSTEMTIME DaylightDate;\n    LONG DaylightBias;\n    WCHAR TimeZoneKeyName[128];\n    BOOLEAN DynamicDaylightTimeDisabled;\n} DYNAMIC_TIME_ZONE_INFORMATION, *PDYNAMIC_TIME_ZONE_INFORMATION;\n\ntypedef struct _TIME_ZONE_INFORMATION{\n        LONG Bias;\n        WCHAR StandardName[32];\n        SYSTEMTIME StandardDate;\n        LONG StandardBias;\n        WCHAR DaylightName[32];\n        SYSTEMTIME DaylightDate;\n        LONG DaylightBias;\n} TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION;\n\n#define TIME_ZONE_ID_INVALID\t((DWORD)0xFFFFFFFF)\n#define TIME_ZONE_ID_UNKNOWN    0\n#define TIME_ZONE_ID_STANDARD   1\n#define TIME_ZONE_ID_DAYLIGHT   2\n\n/* CreateProcess: dwCreationFlag values\n */\n#define DEBUG_PROCESS               0x00000001\n#define DEBUG_ONLY_THIS_PROCESS     0x00000002\n#define CREATE_SUSPENDED            0x00000004\n#define DETACHED_PROCESS            0x00000008\n#define CREATE_NEW_CONSOLE          0x00000010\n#define NORMAL_PRIORITY_CLASS       0x00000020\n#define IDLE_PRIORITY_CLASS         0x00000040\n#define HIGH_PRIORITY_CLASS         0x00000080\n#define REALTIME_PRIORITY_CLASS     0x00000100\n#define BELOW_NORMAL_PRIORITY_CLASS 0x00004000\n#define ABOVE_NORMAL_PRIORITY_CLASS 0x00008000\n#define CREATE_NEW_PROCESS_GROUP    0x00000200\n#define CREATE_UNICODE_ENVIRONMENT  0x00000400\n#define CREATE_SEPARATE_WOW_VDM     0x00000800\n#define CREATE_SHARED_WOW_VDM       0x00001000\n#define STACK_SIZE_PARAM_IS_A_RESERVATION 0x00010000\n#define CREATE_BREAKAWAY_FROM_JOB   0x01000000\n#define CREATE_DEFAULT_ERROR_MODE   0x04000000\n#define CREATE_NO_WINDOW            0x08000000\n#define PROFILE_USER                0x10000000\n#define PROFILE_KERNEL              0x20000000\n#define PROFILE_SERVER              0x40000000\n\n\n/* File object type definitions\n */\n#define FILE_TYPE_UNKNOWN       0\n#define FILE_TYPE_DISK          1\n#define FILE_TYPE_CHAR          2\n#define FILE_TYPE_PIPE          3\n#define FILE_TYPE_REMOTE        32768\n\n/* File encryption status\n */\n#define FILE_ENCRYPTABLE         0\n#define FILE_IS_ENCRYPTED        1\n#define FILE_SYSTEM_ATTR         2\n#define FILE_ROOT_DIR            3\n#define FILE_SYSTEM_DIR          4\n#define FILE_UNKNOWN             5\n#define FILE_SYSTEM_NOT_SUPPORT  6\n#define FILE_USER_DISALLOWED     7\n#define FILE_READ_ONLY           8\n#define FILE_DIR_DISALLOWED      9\n\ntypedef DWORD (WINAPI *PFE_EXPORT_FUNC)(PBYTE,PVOID,ULONG);\ntypedef DWORD (WINAPI *PFE_IMPORT_FUNC)(PBYTE,PVOID,ULONG);\n\n#define CREATE_FOR_IMPORT  (1)\n#define CREATE_FOR_DIR     (2)\n#define OVERWRITE_HIDDEN   (4)\n#define EFSRPC_SECURE_ONLY (8)\n\n/* File creation flags\n */\n#define FILE_FLAG_WRITE_THROUGH         0x80000000\n#define FILE_FLAG_OVERLAPPED            0x40000000\n#define FILE_FLAG_NO_BUFFERING          0x20000000\n#define FILE_FLAG_RANDOM_ACCESS         0x10000000\n#define FILE_FLAG_SEQUENTIAL_SCAN       0x08000000\n#define FILE_FLAG_DELETE_ON_CLOSE       0x04000000\n#define FILE_FLAG_BACKUP_SEMANTICS      0x02000000\n#define FILE_FLAG_POSIX_SEMANTICS       0x01000000\n#define FILE_FLAG_OPEN_REPARSE_POINT    0x00200000\n#define FILE_FLAG_OPEN_NO_RECALL        0x00100000\n#define FILE_FLAG_FIRST_PIPE_INSTANCE   0x00080000\n\n#define CREATE_NEW              1\n#define CREATE_ALWAYS           2\n#define OPEN_EXISTING           3\n#define OPEN_ALWAYS             4\n#define TRUNCATE_EXISTING       5\n\n/* Standard handle identifiers\n */\n#define STD_INPUT_HANDLE        ((DWORD) -10)\n#define STD_OUTPUT_HANDLE       ((DWORD) -11)\n#define STD_ERROR_HANDLE        ((DWORD) -12)\n\n/* Flags for GetFinalPathNameByHandle\n */\n#define FILE_NAME_NORMALIZED    0x0\n#define FILE_NAME_OPENED        0x8\n#define VOLUME_NAME_DOS         0x0\n#define VOLUME_NAME_GUID        0x1\n#define VOLUME_NAME_NT          0x2\n#define VOLUME_NAME_NONE        0x4\n\ntypedef struct _BY_HANDLE_FILE_INFORMATION\n{\n  DWORD dwFileAttributes;\n  FILETIME ftCreationTime;\n  FILETIME ftLastAccessTime;\n  FILETIME ftLastWriteTime;\n  DWORD dwVolumeSerialNumber;\n  DWORD nFileSizeHigh;\n  DWORD nFileSizeLow;\n  DWORD nNumberOfLinks;\n  DWORD nFileIndexHigh;\n  DWORD nFileIndexLow;\n} BY_HANDLE_FILE_INFORMATION, *PBY_HANDLE_FILE_INFORMATION, *LPBY_HANDLE_FILE_INFORMATION ;\n\ntypedef enum _FILE_ID_TYPE {\n    FileIdType,\n    ObjectIdType,\n    ExtendedFileIdType,\n    MaximumFileIdType\n} FILE_ID_TYPE, *PFILE_ID_TYPE;\n\ntypedef struct _FILE_ID_DESCRIPTOR {\n    DWORD        dwSize;\n    FILE_ID_TYPE Type;\n    union {\n        LARGE_INTEGER FileId;\n        GUID          ObjectId;\n    } DUMMYUNIONNAME;\n} FILE_ID_DESCRIPTOR, *LPFILE_ID_DESCRIPTOR;\n\ntypedef enum _FILE_INFO_BY_HANDLE_CLASS {\n    FileBasicInfo,\n    FileStandardInfo,\n    FileNameInfo,\n    FileRenameInfo,\n    FileDispositionInfo,\n    FileAllocationInfo,\n    FileEndOfFileInfo,\n    FileStreamInfo,\n    FileCompressionInfo,\n    FileAttributeTagInfo,\n    FileIdBothDirectoryInfo,\n    FileIdBothDirectoryRestartInfo,\n    FileIoPriorityHintInfo,\n    FileRemoteProtocolInfo,\n    FileFullDirectoryInfo,\n    FileFullDirectoryRestartInfo,\n    FileStorageInfo,\n    FileAlignmentInfo,\n    FileIdInfo,\n    FileIdExtdDirectoryInfo,\n    FileIdExtdDirectoryRestartInfo,\n    MaximumFileInfoByHandlesClass\n} FILE_INFO_BY_HANDLE_CLASS, *PFILE_INFO_BY_HANDLE_CLASS;\n\ntypedef struct _FILE_ID_BOTH_DIR_INFO {\n    DWORD         NextEntryOffset;\n    DWORD         FileIndex;\n    LARGE_INTEGER CreationTime;\n    LARGE_INTEGER LastAccessTime;\n    LARGE_INTEGER LastWriteTime;\n    LARGE_INTEGER ChangeTime;\n    LARGE_INTEGER EndOfFile;\n    LARGE_INTEGER AllocationSize;\n    DWORD         FileAttributes;\n    DWORD         FileNameLength;\n    DWORD         EaSize;\n    CCHAR         ShortNameLength;\n    WCHAR         ShortName[12];\n    LARGE_INTEGER FileId;\n    WCHAR         FileName[1];\n} FILE_ID_BOTH_DIR_INFO, *PFILE_ID_BOTH_DIR_INFO;\n\ntypedef struct _FILE_BASIC_INFO {\n    LARGE_INTEGER CreationTime;\n    LARGE_INTEGER LastAccessTime;\n    LARGE_INTEGER LastWriteTime;\n    LARGE_INTEGER ChangeTime;\n    DWORD         FileAttributes;\n} FILE_BASIC_INFO, *PFILE_BASIC_INFO;\n\ntypedef struct _FILE_STANDARD_INFO {\n    LARGE_INTEGER AllocationSize;\n    LARGE_INTEGER EndOfFile;\n    DWORD         NumberOfLinks;\n    BOOLEAN       DeletePending;\n    BOOLEAN       Directory;\n} FILE_STANDARD_INFO, *PFILE_STANDARD_INFO;\n\ntypedef struct _FILE_NAME_INFO {\n    DWORD         FileNameLength;\n    WCHAR         FileName[1];\n} FILE_NAME_INFO, *PFILE_NAME_INFO;\n\ntypedef enum _PRIORITY_HINT {\n    IoPriorityHintVeryLow,\n    IoPriorityHintLow,\n    IoPriorityHintNormal,\n    MaximumIoPriorityHintType\n} PRIORITY_HINT;\n\ntypedef struct _FILE_IO_PRIORITY_HINT_INFO {\n    PRIORITY_HINT PriorityHint;\n} FILE_IO_PRIORITY_HINT_INFO;\n\ntypedef struct _FILE_ALLOCATION_INFO {\n    LARGE_INTEGER AllocationSize;\n} FILE_ALLOCATION_INFO, *PFILE_ALLOCATION_INFO;\n\ntypedef struct _FILE_DISPOSITION_INFO {\n    BOOLEAN DeleteFile;\n} FILE_DISPOSITION_INFO, *PFILE_DISPOSITION_INFO;\n\ntypedef struct _FILE_END_OF_FILE_INFO {\n    LARGE_INTEGER EndOfFile;\n} FILE_END_OF_FILE_INFO, *PFILE_END_OF_FILE_INFO;\n\ntypedef struct _FILE_RENAME_INFO {\n    BOOLEAN ReplaceIfExists;\n    HANDLE RootDirectory;\n    DWORD FileNameLength;\n    WCHAR FileName[1];\n} FILE_RENAME_INFO, *PFILE_RENAME_INFO;\n\ntypedef struct _FILE_ATTRIBUTE_TAG_INFO {\n    DWORD FileAttributes;\n    DWORD ReparseTag;\n} FILE_ATTRIBUTE_TAG_INFO, *PFILE_ATTRIBUTE_TAG_INFO;\n\ntypedef struct _FILE_COMPRESSION_INFO {\n    LARGE_INTEGER CompressedFileSize;\n    WORD CompressionFormat;\n    UCHAR CompressionUnitShift;\n    UCHAR ChunkShift;\n    UCHAR ClusterShift;\n    UCHAR Reserved[3];\n} FILE_COMPRESSION_INFO, *PFILE_COMPRESSION_INFO;\n\ntypedef struct _FILE_REMOTE_PROTOCOL_INFO {\n    USHORT StructureVersion;\n    USHORT StructureSize;\n    ULONG Protocol;\n    USHORT ProtocolMajorVersion;\n    USHORT ProtocolMinorVersion;\n    USHORT ProtocolRevision;\n    USHORT Reserved;\n    ULONG Flags;\n    struct {\n        ULONG Reserved[8];\n    } GenericReserved;\n    struct {\n        ULONG Reserved[16];\n    } ProtocolSpecificReserved;\n} FILE_REMOTE_PROTOCOL_INFO, *PFILE_REMOTE_PROTOCOL_INFO;\n\n#define PIPE_ACCESS_INBOUND  1\n#define PIPE_ACCESS_OUTBOUND 2\n#define PIPE_ACCESS_DUPLEX   3\n\n#define PIPE_CLIENT_END       0\n#define PIPE_SERVER_END       1\n#define PIPE_READMODE_BYTE    0\n#define PIPE_READMODE_MESSAGE 2\n#define PIPE_TYPE_BYTE        0\n#define PIPE_TYPE_MESSAGE     4\n\n#define PIPE_WAIT   0\n#define PIPE_NOWAIT 1\n\n#define PIPE_UNLIMITED_INSTANCES 255\n\n#define NMPWAIT_WAIT_FOREVER\t\t0xffffffff\n#define NMPWAIT_NOWAIT\t\t\t0x00000001\n#define NMPWAIT_USE_DEFAULT_WAIT\t0x00000000\n\n/* Security flags for dwFlagsAndAttributes of CreateFile */\n#define SECURITY_ANONYMOUS          (SecurityAnonymous << 16)\n#define SECURITY_IDENTIFICATION     (SecurityIdentification << 16)\n#define SECURITY_IMPERSONATION      (SecurityImpersonation << 16)\n#define SECURITY_DELEGATION         (SecurityDelegation << 16)\n\n#define SECURITY_CONTEXT_TRACKING   0x00040000\n#define SECURITY_EFFECTIVE_ONLY     0x00080000\n\n#define SECURITY_SQOS_PRESENT       0x00100000\n#define SECURITY_VALID_SQOS_FLAGS   0x001f0000\n\ntypedef struct _SYSTEM_POWER_STATUS\n{\n  BYTE    ACLineStatus;\n  BYTE    BatteryFlag;\n  BYTE    BatteryLifePercent;\n  BYTE    Reserved1;\n  DWORD   BatteryLifeTime;\n  DWORD   BatteryFullLifeTime;\n} SYSTEM_POWER_STATUS, *LPSYSTEM_POWER_STATUS;\n\ntypedef enum _POWER_REQUEST_TYPE\n{\n    PowerRequestDisplayRequired,\n    PowerRequestSystemRequired,\n    PowerRequestAwayModeRequired\n} POWER_REQUEST_TYPE, *PPOWER_REQUEST_TYPE;\n\ntypedef struct _SYSTEM_INFO\n{\n    union {\n\tDWORD\tdwOemId; /* Obsolete field - do not use */\n\tstruct {\n\t\tWORD wProcessorArchitecture;\n\t\tWORD wReserved;\n\t} DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME;\n    DWORD\tdwPageSize;\n    LPVOID\tlpMinimumApplicationAddress;\n    LPVOID\tlpMaximumApplicationAddress;\n    DWORD_PTR\tdwActiveProcessorMask;\n    DWORD\tdwNumberOfProcessors;\n    DWORD\tdwProcessorType;\n    DWORD\tdwAllocationGranularity;\n    WORD\twProcessorLevel;\n    WORD\twProcessorRevision;\n} SYSTEM_INFO, *LPSYSTEM_INFO;\n\ntypedef BOOL (CALLBACK *ENUMRESTYPEPROCA)(HMODULE,LPSTR,LONG_PTR);\ntypedef BOOL (CALLBACK *ENUMRESTYPEPROCW)(HMODULE,LPWSTR,LONG_PTR);\ntypedef BOOL (CALLBACK *ENUMRESNAMEPROCA)(HMODULE,LPCSTR,LPSTR,LONG_PTR);\ntypedef BOOL (CALLBACK *ENUMRESNAMEPROCW)(HMODULE,LPCWSTR,LPWSTR,LONG_PTR);\ntypedef BOOL (CALLBACK *ENUMRESLANGPROCA)(HMODULE,LPCSTR,LPCSTR,WORD,LONG_PTR);\ntypedef BOOL (CALLBACK *ENUMRESLANGPROCW)(HMODULE,LPCWSTR,LPCWSTR,WORD,LONG_PTR);\n\nDECL_WINELIB_TYPE_AW(ENUMRESTYPEPROC)\nDECL_WINELIB_TYPE_AW(ENUMRESNAMEPROC)\nDECL_WINELIB_TYPE_AW(ENUMRESLANGPROC)\n\n/* flags that can be passed to LoadLibraryEx */\n#define DONT_RESOLVE_DLL_REFERENCES         0x00000001\n#define LOAD_LIBRARY_AS_DATAFILE            0x00000002\n#define LOAD_WITH_ALTERED_SEARCH_PATH       0x00000008\n#define LOAD_IGNORE_CODE_AUTHZ_LEVEL        0x00000010\n#define LOAD_LIBRARY_AS_IMAGE_RESOURCE      0x00000020\n#define LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE  0x00000040\n#define LOAD_LIBRARY_REQUIRE_SIGNED_TARGET  0x00000080\n#define LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR    0x00000100\n#define LOAD_LIBRARY_SEARCH_APPLICATION_DIR 0x00000200\n#define LOAD_LIBRARY_SEARCH_USER_DIRS       0x00000400\n#define LOAD_LIBRARY_SEARCH_SYSTEM32        0x00000800\n#define LOAD_LIBRARY_SEARCH_DEFAULT_DIRS    0x00001000\n\n#define GET_MODULE_HANDLE_EX_FLAG_PIN                 1\n#define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT  2\n#define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS        4\n\n/* flags for SetSearchPathMode */\n#define BASE_SEARCH_PATH_ENABLE_SAFE_SEARCHMODE  0x00001\n#define BASE_SEARCH_PATH_DISABLE_SAFE_SEARCHMODE 0x10000\n#define BASE_SEARCH_PATH_PERMANENT               0x08000\n#define BASE_SEARCH_PATH_INVALID_FLAGS         (~0x18001)\n\ntypedef PLDT_ENTRY LPLDT_ENTRY;\n\ntypedef enum _GET_FILEEX_INFO_LEVELS {\n    GetFileExInfoStandard\n} GET_FILEEX_INFO_LEVELS;\n\ntypedef struct _WIN32_FILE_ATTRIBUTES_DATA {\n    DWORD    dwFileAttributes;\n    FILETIME ftCreationTime;\n    FILETIME ftLastAccessTime;\n    FILETIME ftLastWriteTime;\n    DWORD    nFileSizeHigh;\n    DWORD    nFileSizeLow;\n} WIN32_FILE_ATTRIBUTE_DATA, *LPWIN32_FILE_ATTRIBUTE_DATA;\n\n/*\n * This one seems to be a Win32 only definition. It also is defined with\n * WINAPI instead of CALLBACK in the windows headers.\n */\ntypedef DWORD (CALLBACK *LPPROGRESS_ROUTINE)(LARGE_INTEGER, LARGE_INTEGER, LARGE_INTEGER,\n                                           LARGE_INTEGER, DWORD, DWORD, HANDLE,\n                                           HANDLE, LPVOID);\n\ntypedef DWORD (WINAPI *APPLICATION_RECOVERY_CALLBACK)(PVOID);\n\ntypedef enum _COPYFILE2_MESSAGE_TYPE\n{\n    COPYFILE2_CALLBACK_NONE = 0,\n    COPYFILE2_CALLBACK_CHUNK_STARTED,\n    COPYFILE2_CALLBACK_CHUNK_FINISHED,\n    COPYFILE2_CALLBACK_STREAM_STARTED,\n    COPYFILE2_CALLBACK_STREAM_FINISHED,\n    COPYFILE2_CALLBACK_POLL_CONTINUE,\n    COPYFILE2_CALLBACK_ERROR,\n    COPYFILE2_CALLBACK_MAX,\n} COPYFILE2_MESSAGE_TYPE;\n\ntypedef enum _COPYFILE2_MESSAGE_ACTION\n{\n    COPYFILE2_PROGRESS_CONTINUE = 0,\n    COPYFILE2_PROGRESS_CANCEL,\n    COPYFILE2_PROGRESS_STOP,\n    COPYFILE2_PROGRESS_QUIET,\n    COPYFILE2_PROGRESS_PAUSE,\n} COPYFILE2_MESSAGE_ACTION;\n\ntypedef enum _COPYFILE2_COPY_PHASE\n{\n    COPYFILE2_PHASE_NONE = 0,\n    COPYFILE2_PHASE_PREPARE_SOURCE,\n    COPYFILE2_PHASE_PREPARE_DEST,\n    COPYFILE2_PHASE_READ_SOURCE,\n    COPYFILE2_PHASE_WRITE_DESTINATION,\n    COPYFILE2_PHASE_SERVER_COPY,\n    COPYFILE2_PHASE_NAMEGRAFT_COPY,\n    COPYFILE2_PHASE_MAX,\n} COPYFILE2_COPY_PHASE;\n\ntypedef struct COPYFILE2_MESSAGE\n{\n    COPYFILE2_MESSAGE_TYPE Type;\n    DWORD                  dwPadding;\n    union\n    {\n        struct\n        {\n            DWORD          dwStreamNumber;\n            DWORD          dwReserved;\n            HANDLE         hSourceFile;\n            HANDLE         hDestinationFile;\n            ULARGE_INTEGER uliChunkNumber;\n            ULARGE_INTEGER uliChunkSize;\n            ULARGE_INTEGER uliStreamSize;\n            ULARGE_INTEGER uliTotalFileSize;\n        } ChunkStarted;\n        struct\n        {\n            DWORD          dwStreamNumber;\n            DWORD          dwFlags;\n            HANDLE         hSourceFile;\n            HANDLE         hDestinationFile;\n            ULARGE_INTEGER uliChunkNumber;\n            ULARGE_INTEGER uliChunkSize;\n            ULARGE_INTEGER uliStreamSize;\n            ULARGE_INTEGER uliStreamBytesTransferred;\n            ULARGE_INTEGER uliTotalFileSize;\n            ULARGE_INTEGER uliTotalBytesTransferred;\n        } ChunkFinished;\n        struct\n        {\n            DWORD          dwStreamNumber;\n            DWORD          dwReserved;\n            HANDLE         hSourceFile;\n            HANDLE         hDestinationFile;\n            ULARGE_INTEGER uliStreamSize;\n            ULARGE_INTEGER uliTotalFileSize;\n        } StreamStarted;\n        struct\n        {\n            DWORD          dwStreamNumber;\n            DWORD          dwReserved;\n            HANDLE         hSourceFile;\n            HANDLE         hDestinationFile;\n            ULARGE_INTEGER uliStreamSize;\n            ULARGE_INTEGER uliStreamBytesTransferred;\n            ULARGE_INTEGER uliTotalFileSize;\n            ULARGE_INTEGER uliTotalBytesTransferred;\n        } StreamFinished;\n        struct\n        {\n            DWORD dwReserved;\n        } PollContinue;\n        struct\n        {\n            COPYFILE2_COPY_PHASE CopyPhase;\n            DWORD                dwStreamNumber;\n            HRESULT              hrFailure;\n            DWORD                dwReserved;\n            ULARGE_INTEGER       uliChunkNumber;\n            ULARGE_INTEGER       uliStreamSize;\n            ULARGE_INTEGER       uliStreamBytesTransferred;\n            ULARGE_INTEGER       uliTotalFileSize;\n            ULARGE_INTEGER       uliTotalBytesTransferred;\n        } Error;\n    } Info;\n} COPYFILE2_MESSAGE;\n\ntypedef COPYFILE2_MESSAGE_ACTION (CALLBACK *PCOPYFILE2_PROGRESS_ROUTINE)(const COPYFILE2_MESSAGE*,PVOID);\n\ntypedef struct COPYFILE2_EXTENDED_PARAMETERS\n{\n    DWORD                        dwSize;\n    DWORD                        dwCopyFlags;\n    BOOL                        *pfCancel;\n    PCOPYFILE2_PROGRESS_ROUTINE  pProgressRoutine;\n    PVOID                        pvCallbackContext;\n} COPYFILE2_EXTENDED_PARAMETERS;\n\n#define CREATE_EVENT_MANUAL_RESET 1\n#define CREATE_EVENT_INITIAL_SET  2\n\n#define CREATE_MUTEX_INITIAL_OWNER 1\n\n#define CREATE_WAITABLE_TIMER_MANUAL_RESET 1\n\n#define WAIT_FAILED\t\t0xffffffff\n#define WAIT_OBJECT_0\t\t0\n#define WAIT_ABANDONED\t\tSTATUS_ABANDONED_WAIT_0\n#define WAIT_ABANDONED_0\tSTATUS_ABANDONED_WAIT_0\n#define WAIT_IO_COMPLETION\tSTATUS_USER_APC\n#define STILL_ACTIVE            STATUS_PENDING\n\n#define FILE_BEGIN              0\n#define FILE_CURRENT            1\n#define FILE_END                2\n\n#define FILE_MAP_COPY                   0x00000001\n#define FILE_MAP_WRITE                  0x00000002\n#define FILE_MAP_READ                   0x00000004\n#define FILE_MAP_ALL_ACCESS             0x000f001f\n#define FILE_MAP_EXECUTE                0x00000020\n\n#define MOVEFILE_REPLACE_EXISTING       0x00000001\n#define MOVEFILE_COPY_ALLOWED           0x00000002\n#define MOVEFILE_DELAY_UNTIL_REBOOT     0x00000004\n#define MOVEFILE_WRITE_THROUGH          0x00000008\n\n#define REPLACEFILE_WRITE_THROUGH       0x00000001\n#define REPLACEFILE_IGNORE_MERGE_ERRORS 0x00000002\n\n#define FS_CASE_SENSITIVE               FILE_CASE_SENSITIVE_SEARCH\n#define FS_CASE_IS_PRESERVED            FILE_CASE_PRESERVED_NAMES\n#define FS_UNICODE_STORED_ON_DISK       FILE_UNICODE_ON_DISK\n#define FS_PERSISTENT_ACLS              FILE_PERSISTENT_ACLS\n#define FS_VOL_IS_COMPRESSED            FILE_VOLUME_IS_COMPRESSED\n#define FS_FILE_COMPRESSION             FILE_FILE_COMPRESSION\n\n#define MUTEX_MODIFY_STATE              MUTANT_QUERY_STATE\n#define MUTEX_ALL_ACCESS                MUTANT_ALL_ACCESS\n\n#define EXCEPTION_ACCESS_VIOLATION          STATUS_ACCESS_VIOLATION\n#define EXCEPTION_DATATYPE_MISALIGNMENT     STATUS_DATATYPE_MISALIGNMENT\n#define EXCEPTION_BREAKPOINT                STATUS_BREAKPOINT\n#define EXCEPTION_SINGLE_STEP               STATUS_SINGLE_STEP\n#define EXCEPTION_ARRAY_BOUNDS_EXCEEDED     STATUS_ARRAY_BOUNDS_EXCEEDED\n#define EXCEPTION_FLT_DENORMAL_OPERAND      STATUS_FLOAT_DENORMAL_OPERAND\n#define EXCEPTION_FLT_DIVIDE_BY_ZERO        STATUS_FLOAT_DIVIDE_BY_ZERO\n#define EXCEPTION_FLT_INEXACT_RESULT        STATUS_FLOAT_INEXACT_RESULT\n#define EXCEPTION_FLT_INVALID_OPERATION     STATUS_FLOAT_INVALID_OPERATION\n#define EXCEPTION_FLT_OVERFLOW              STATUS_FLOAT_OVERFLOW\n#define EXCEPTION_FLT_STACK_CHECK           STATUS_FLOAT_STACK_CHECK\n#define EXCEPTION_FLT_UNDERFLOW             STATUS_FLOAT_UNDERFLOW\n#define EXCEPTION_INT_DIVIDE_BY_ZERO        STATUS_INTEGER_DIVIDE_BY_ZERO\n#define EXCEPTION_INT_OVERFLOW              STATUS_INTEGER_OVERFLOW\n#define EXCEPTION_PRIV_INSTRUCTION          STATUS_PRIVILEGED_INSTRUCTION\n#define EXCEPTION_IN_PAGE_ERROR             STATUS_IN_PAGE_ERROR\n#define EXCEPTION_ILLEGAL_INSTRUCTION       STATUS_ILLEGAL_INSTRUCTION\n#define EXCEPTION_NONCONTINUABLE_EXCEPTION  STATUS_NONCONTINUABLE_EXCEPTION\n#define EXCEPTION_STACK_OVERFLOW            STATUS_STACK_OVERFLOW\n#define EXCEPTION_INVALID_DISPOSITION       STATUS_INVALID_DISPOSITION\n#define EXCEPTION_GUARD_PAGE                STATUS_GUARD_PAGE_VIOLATION\n#define EXCEPTION_INVALID_HANDLE            STATUS_INVALID_HANDLE\n#define CONTROL_C_EXIT                      STATUS_CONTROL_C_EXIT\n\n#define HANDLE_FLAG_INHERIT             0x00000001\n#define HANDLE_FLAG_PROTECT_FROM_CLOSE  0x00000002\n\n#define HINSTANCE_ERROR 32\n\n#define THREAD_PRIORITY_LOWEST          THREAD_BASE_PRIORITY_MIN\n#define THREAD_PRIORITY_BELOW_NORMAL    (THREAD_PRIORITY_LOWEST+1)\n#define THREAD_PRIORITY_NORMAL          0\n#define THREAD_PRIORITY_HIGHEST         THREAD_BASE_PRIORITY_MAX\n#define THREAD_PRIORITY_ABOVE_NORMAL    (THREAD_PRIORITY_HIGHEST-1)\n#define THREAD_PRIORITY_ERROR_RETURN    (0x7fffffff)\n#define THREAD_PRIORITY_TIME_CRITICAL   THREAD_BASE_PRIORITY_LOWRT\n#define THREAD_PRIORITY_IDLE            THREAD_BASE_PRIORITY_IDLE\n\n/* flags to FormatMessage */\n#define\tFORMAT_MESSAGE_ALLOCATE_BUFFER\t0x00000100\n#define\tFORMAT_MESSAGE_IGNORE_INSERTS\t0x00000200\n#define\tFORMAT_MESSAGE_FROM_STRING\t0x00000400\n#define\tFORMAT_MESSAGE_FROM_HMODULE\t0x00000800\n#define\tFORMAT_MESSAGE_FROM_SYSTEM\t0x00001000\n#define\tFORMAT_MESSAGE_ARGUMENT_ARRAY\t0x00002000\n#define\tFORMAT_MESSAGE_MAX_WIDTH_MASK\t0x000000FF\n\n/* flags to ACTCTX[AW] */\n#define ACTCTX_FLAG_PROCESSOR_ARCHITECTURE_VALID  (0x00000001)\n#define ACTCTX_FLAG_LANGID_VALID                  (0x00000002)\n#define ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID      (0x00000004)\n#define ACTCTX_FLAG_RESOURCE_NAME_VALID           (0x00000008)\n#define ACTCTX_FLAG_SET_PROCESS_DEFAULT           (0x00000010)\n#define ACTCTX_FLAG_APPLICATION_NAME_VALID        (0x00000020)\n#define ACTCTX_FLAG_SOURCE_IS_ASSEMBLYREF         (0x00000040)\n#define ACTCTX_FLAG_HMODULE_VALID                 (0x00000080)\n\n/* flags to DeactiveActCtx */\n#define DEACTIVATE_ACTCTX_FLAG_FORCE_EARLY_DEACTIVATION  (0x00000001)\n\n/* flags to FindActCtxSection{Guid,String[AW]} */\n#define FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX            (0x00000001)\n#define FIND_ACTCTX_SECTION_KEY_RETURN_FLAGS              (0x00000002)\n#define FIND_ACTCTX_SECTION_KEY_RETURN_ASSEMBLY_METADATA  (0x00000004)\n\n/* flags to QueryActCtxW */\n#define QUERY_ACTCTX_FLAG_USE_ACTIVE_ACTCTX  (0x00000004)\n#define QUERY_ACTCTX_FLAG_ACTCTX_IS_HMODULE  (0x00000008)\n#define QUERY_ACTCTX_FLAG_ACTCTX_IS_ADDRESS  (0x00000010)\n#define QUERY_ACTCTX_FLAG_NO_ADDREF          (0x80000000)\n\ntypedef struct tagACTCTXA {\n    ULONG   cbSize;\n    DWORD   dwFlags;\n    LPCSTR  lpSource;\n    USHORT  wProcessorArchitecture;\n    LANGID  wLangId;\n    LPCSTR  lpAssemblyDirectory;\n    LPCSTR  lpResourceName;\n    LPCSTR  lpApplicationName;\n    HMODULE hModule;\n} ACTCTXA, *PACTCTXA;\n\ntypedef struct tagACTCTXW {\n    ULONG   cbSize;\n    DWORD   dwFlags;\n    LPCWSTR lpSource;\n    USHORT  wProcessorArchitecture;\n    LANGID  wLangId;\n    LPCWSTR lpAssemblyDirectory;\n    LPCWSTR lpResourceName;\n    LPCWSTR lpApplicationName;\n    HMODULE hModule;\n} ACTCTXW, *PACTCTXW;\n\nDECL_WINELIB_TYPE_AW(ACTCTX)\nDECL_WINELIB_TYPE_AW(PACTCTX)\n\ntypedef const ACTCTXA *PCACTCTXA;\ntypedef const ACTCTXW *PCACTCTXW;\nDECL_WINELIB_TYPE_AW(PCACTCTX)\n\ntypedef struct tagACTCTX_SECTION_KEYED_DATA_2600 {\n    ULONG  cbSize;\n    ULONG  ulDataFormatVersion;\n    PVOID  lpData;\n    ULONG  ulLength;\n    PVOID  lpSectionGlobalData;\n    ULONG  ulSectionGlobalDataLength;\n    PVOID  lpSectionBase;\n    ULONG  ulSectionTotalLength;\n    HANDLE hActCtx;\n    ULONG  ulAssemblyRosterIndex;\n} ACTCTX_SECTION_KEYED_DATA_2600, *PACTCTX_SECTION_KEYED_DATA_2600;\ntypedef const ACTCTX_SECTION_KEYED_DATA_2600 *PCACTCTX_SECTION_KEYED_DATA_2600;\n\ntypedef struct tagACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA {\n    PVOID lpInformation;\n    PVOID lpSectionBase;\n    ULONG ulSectionLength;\n    PVOID lpSectionGlobalDataBase;\n    ULONG ulSectionGlobalDataLength;\n} ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA, *PACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA;\ntypedef const ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA *PCACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA;\n\ntypedef struct tagACTCTX_SECTION_KEYED_DATA {\n    ULONG  cbSize;\n    ULONG  ulDataFormatVersion;\n    PVOID  lpData;\n    ULONG  ulLength;\n    PVOID  lpSectionGlobalData;\n    ULONG  ulSectionGlobalDataLength;\n    PVOID  lpSectionBase;\n    ULONG  ulSectionTotalLength;\n    HANDLE hActCtx;\n    ULONG  ulAssemblyRosterIndex;\n\n    /* Non 2600 extra fields */\n    ULONG ulFlags;\n    ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA AssemblyMetadata;\n} ACTCTX_SECTION_KEYED_DATA, *PACTCTX_SECTION_KEYED_DATA;\ntypedef const ACTCTX_SECTION_KEYED_DATA *PCACTCTX_SECTION_KEYED_DATA;\n\ntypedef struct _ACTIVATION_CONTEXT_BASIC_INFORMATION {\n    HANDLE hActCtx;\n    DWORD  dwFlags;\n} ACTIVATION_CONTEXT_BASIC_INFORMATION, *PACTIVATION_CONTEXT_BASIC_INFORMATION;\n\ntypedef BOOL (WINAPI *PQUERYACTCTXW_FUNC)(DWORD,HANDLE,PVOID,ULONG,PVOID,SIZE_T,SIZE_T *);\n\ntypedef struct tagCOMSTAT\n{\n    DWORD fCtsHold : 1;\n    DWORD fDsrHold : 1;\n    DWORD fRlsdHold : 1;\n    DWORD fXoffHold : 1;\n    DWORD fXoffSent : 1;\n    DWORD fEof : 1;\n    DWORD fTxim : 1;\n    DWORD fReserved : 25;\n    DWORD cbInQue;\n    DWORD cbOutQue;\n} COMSTAT, *LPCOMSTAT;\n\ntypedef struct tagDCB\n{\n    DWORD DCBlength;\n    DWORD BaudRate;\n    unsigned fBinary               :1;\n    unsigned fParity               :1;\n    unsigned fOutxCtsFlow          :1;\n    unsigned fOutxDsrFlow          :1;\n    unsigned fDtrControl           :2;\n    unsigned fDsrSensitivity       :1;\n    unsigned fTXContinueOnXoff     :1;\n    unsigned fOutX                 :1;\n    unsigned fInX                  :1;\n    unsigned fErrorChar            :1;\n    unsigned fNull                 :1;\n    unsigned fRtsControl           :2;\n    unsigned fAbortOnError         :1;\n    unsigned fDummy2               :17;\n    WORD wReserved;\n    WORD XonLim;\n    WORD XoffLim;\n    BYTE ByteSize;\n    BYTE Parity;\n    BYTE StopBits;\n    char XonChar;\n    char XoffChar;\n    char ErrorChar;\n    char EofChar;\n    char EvtChar;\n    WORD wReserved1;\n} DCB, *LPDCB;\n\ntypedef struct tagCOMMCONFIG {\n\tDWORD dwSize;\n\tWORD  wVersion;\n\tWORD  wReserved;\n\tDCB   dcb;\n\tDWORD dwProviderSubType;\n\tDWORD dwProviderOffset;\n\tDWORD dwProviderSize;\n\tDWORD wcProviderData[1];\n} COMMCONFIG, *LPCOMMCONFIG;\n\ntypedef struct tagCOMMPROP {\n\tWORD  wPacketLength;\n\tWORD  wPacketVersion;\n\tDWORD dwServiceMask;\n\tDWORD dwReserved1;\n\tDWORD dwMaxTxQueue;\n\tDWORD dwMaxRxQueue;\n\tDWORD dwMaxBaud;\n\tDWORD dwProvSubType;\n\tDWORD dwProvCapabilities;\n\tDWORD dwSettableParams;\n\tDWORD dwSettableBaud;\n\tWORD  wSettableData;\n\tWORD  wSettableStopParity;\n\tDWORD dwCurrentTxQueue;\n\tDWORD dwCurrentRxQueue;\n\tDWORD dwProvSpec1;\n\tDWORD dwProvSpec2;\n\tWCHAR wcProvChar[1];\n} COMMPROP, *LPCOMMPROP;\n\n#define SP_SERIALCOMM ((DWORD)1)\n\n#define BAUD_075     ((DWORD)0x01)\n#define BAUD_110     ((DWORD)0x02)\n#define BAUD_134_5   ((DWORD)0x04)\n#define BAUD_150     ((DWORD)0x08)\n#define BAUD_300     ((DWORD)0x10)\n#define BAUD_600     ((DWORD)0x20)\n#define BAUD_1200    ((DWORD)0x40)\n#define BAUD_1800    ((DWORD)0x80)\n#define BAUD_2400    ((DWORD)0x100)\n#define BAUD_4800    ((DWORD)0x200)\n#define BAUD_7200    ((DWORD)0x400)\n#define BAUD_9600    ((DWORD)0x800)\n#define BAUD_14400   ((DWORD)0x1000)\n#define BAUD_19200   ((DWORD)0x2000)\n#define BAUD_38400   ((DWORD)0x4000)\n#define BAUD_56K     ((DWORD)0x8000)\n#define BAUD_57600   ((DWORD)0x40000)\n#define BAUD_115200  ((DWORD)0x20000)\n#define BAUD_128K    ((DWORD)0x10000)\n#define BAUD_USER    ((DWORD)0x10000000)\n\n#define PST_FAX            ((DWORD)0x21)\n#define PST_LAT            ((DWORD)0x101)\n#define PST_MODEM          ((DWORD)0x06)\n#define PST_NETWORK_BRIDGE ((DWORD)0x100)\n#define PST_PARALLELPORT   ((DWORD)0x02)\n#define PST_RS232          ((DWORD)0x01)\n#define PST_RS442          ((DWORD)0x03)\n#define PST_RS423          ((DWORD)0x04)\n#define PST_RS449          ((DWORD)0x06)\n#define PST_SCANNER        ((DWORD)0x22)\n#define PST_TCPIP_TELNET   ((DWORD)0x102)\n#define PST_UNSPECIFIED    ((DWORD)0x00)\n#define PST_X25            ((DWORD)0x103)\n\n#define PCF_16BITMODE     ((DWORD)0x200)\n#define PCF_DTRDSR        ((DWORD)0x01)\n#define PCF_INTTIMEOUTS   ((DWORD)0x80)\n#define PCF_PARITY_CHECK  ((DWORD)0x08)\n#define PCF_RLSD          ((DWORD)0x04)\n#define PCF_RTSCTS        ((DWORD)0x02)\n#define PCF_SETXCHAR      ((DWORD)0x20)\n#define PCF_SPECIALCHARS  ((DWORD)0x100)\n#define PCF_TOTALTIMEOUTS ((DWORD)0x40)\n#define PCF_XONXOFF       ((DWORD)0x10)\n\n#define SP_BAUD         ((DWORD)0x02)\n#define SP_DATABITS     ((DWORD)0x04)\n#define SP_HANDSHAKING  ((DWORD)0x10)\n#define SP_PARITY       ((DWORD)0x01)\n#define SP_PARITY_CHECK ((DWORD)0x20)\n#define SP_RLSD         ((DWORD)0x40)\n#define SP_STOPBITS     ((DWORD)0x08)\n\n#define DATABITS_5   ((DWORD)0x01)\n#define DATABITS_6   ((DWORD)0x02)\n#define DATABITS_7   ((DWORD)0x04)\n#define DATABITS_8   ((DWORD)0x08)\n#define DATABITS_16  ((DWORD)0x10)\n#define DATABITS_16X ((DWORD)0x20)\n\n#define STOPBITS_10 ((DWORD)1)\n#define STOPBITS_15 ((DWORD)2)\n#define STOPBITS_20 ((DWORD)4)\n\n#undef PARITY_NONE  /* defined on Android */\n#define PARITY_NONE  ((DWORD)0x100)\n#define PARITY_ODD   ((DWORD)0x200)\n#define PARITY_EVEN  ((DWORD)0x400)\n#define PARITY_MARK  ((DWORD)0x800)\n#define PARITY_SPACE ((DWORD)0x1000)\n\ntypedef struct tagCOMMTIMEOUTS {\n\tDWORD\tReadIntervalTimeout;\n\tDWORD\tReadTotalTimeoutMultiplier;\n\tDWORD\tReadTotalTimeoutConstant;\n\tDWORD\tWriteTotalTimeoutMultiplier;\n\tDWORD\tWriteTotalTimeoutConstant;\n} COMMTIMEOUTS,*LPCOMMTIMEOUTS;\n\n#define GET_TAPE_MEDIA_INFORMATION 0\n#define GET_TAPE_DRIVE_INFORMATION 1\n#define SET_TAPE_MEDIA_INFORMATION 0\n#define SET_TAPE_DRIVE_INFORMATION 1\n\n#define PROCESS_NAME_NATIVE        1\n\ntypedef void (CALLBACK *PAPCFUNC)(ULONG_PTR);\ntypedef void (CALLBACK *PTIMERAPCROUTINE)(LPVOID,DWORD,DWORD);\n\ntypedef enum _COMPUTER_NAME_FORMAT\n{\n\tComputerNameNetBIOS,\n\tComputerNameDnsHostname,\n\tComputerNameDnsDomain,\n\tComputerNameDnsFullyQualified,\n\tComputerNamePhysicalNetBIOS,\n\tComputerNamePhysicalDnsHostname,\n\tComputerNamePhysicalDnsDomain,\n\tComputerNamePhysicalDnsFullyQualified,\n\tComputerNameMax\n} COMPUTER_NAME_FORMAT;\n\n#define HW_PROFILE_GUIDLEN\t39\n#define MAX_PROFILE_LEN\t\t80\n\n#define DOCKINFO_UNDOCKED\t0x1\n#define DOCKINFO_DOCKED\t\t0x2\n#define DOCKINFO_USER_SUPPLIED\t0x4\n#define DOCKINFO_USER_UNDOCKED\t(DOCKINFO_USER_SUPPLIED | DOCKINFO_UNDOCKED)\n#define DOCKINFO_USER_DOCKED\t(DOCKINFO_USER_SUPPLIED | DOCKINFO_DOCKED)\n\ntypedef struct tagHW_PROFILE_INFOA {\n    DWORD dwDockInfo;\n    CHAR  szHwProfileGuid[HW_PROFILE_GUIDLEN];\n    CHAR  szHwProfileName[MAX_PROFILE_LEN];\n} HW_PROFILE_INFOA, *LPHW_PROFILE_INFOA;\n\ntypedef struct tagHW_PROFILE_INFOW {\n    DWORD dwDockInfo;\n    WCHAR szHwProfileGuid[HW_PROFILE_GUIDLEN];\n    WCHAR szHwProfileName[MAX_PROFILE_LEN];\n} HW_PROFILE_INFOW, *LPHW_PROFILE_INFOW;\n\nDECL_WINELIB_TYPE_AW(HW_PROFILE_INFO)\nDECL_WINELIB_TYPE_AW(LPHW_PROFILE_INFO)\n\ntypedef enum _DEP_SYSTEM_POLICY_TYPE {\n    AlwaysOff = 0,\n    AlwaysOn = 1,\n    OptIn = 2,\n    OptOut = 3\n} DEP_SYSTEM_POLICY_TYPE;\n\n#define PROCESS_DEP_ENABLE 1\n#define PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION 2\n\n/* Event Logging */\n\n#define EVENTLOG_FULL_INFO          0\n\ntypedef struct _EVENTLOG_FULL_INFORMATION {\n    DWORD dwFull;\n} EVENTLOG_FULL_INFORMATION, *LPEVENTLOG_FULL_INFORMATION;\n\n\n/* Stream data structures and defines */\n/*the types of backup data -- WIN32_STREAM_ID.dwStreamId below*/\n#define BACKUP_INVALID        0\n#define BACKUP_DATA           1\n#define BACKUP_EA_DATA        2\n#define BACKUP_SECURITY_DATA  3\n#define BACKUP_ALTERNATE_DATA 4\n#define BACKUP_LINK           5\n#define BACKUP_PROPERTY_DATA  6\n#define BACKUP_OBJECT_ID      7\n#define BACKUP_REPARSE_DATA   8\n#define BACKUP_SPARSE_BLOCK   9\n\n/*flags for WIN32_STREAM_ID.dwStreamAttributes below*/\n#define STREAM_NORMAL_ATTRIBUTE    0\n#define STREAM_MODIFIED_WHEN_READ  1\n#define STREAM_CONTAINS_SECURITY   2\n#define STREAM_CONTAINS_PROPERTIES 4\n#define STREAM_SPARSE_ATTRIBUTE    8\n\n#include <pshpack8.h>\ntypedef struct _WIN32_STREAM_ID {\n\tDWORD   dwStreamId;\n\tDWORD   dwStreamAttributes;\n\tLARGE_INTEGER DECLSPEC_ALIGN(8) Size;\n\tDWORD   dwStreamNameSize;\n\tWCHAR   cStreamName[ANYSIZE_ARRAY];\n} WIN32_STREAM_ID, *LPWIN32_STREAM_ID;\n#include <poppack.h>\n\n\n/* GetBinaryType return values.\n */\n\n#define SCS_32BIT_BINARY    0\n#define SCS_DOS_BINARY      1\n#define SCS_WOW_BINARY      2\n#define SCS_PIF_BINARY      3\n#define SCS_POSIX_BINARY    4\n#define SCS_OS216_BINARY    5\n#define SCS_64BIT_BINARY    6\n\n/* flags for DefineDosDevice */\n#define DDD_RAW_TARGET_PATH         0x00000001\n#define DDD_REMOVE_DEFINITION       0x00000002\n#define DDD_EXACT_MATCH_ON_REMOVE   0x00000004\n#define DDD_NO_BROADCAST_SYSTEM     0x00000008\n#define DDD_LUID_BROADCAST_DRIVE    0x00000010\n\n#define LOGON_WITH_PROFILE          0x00000001\n#define LOGON_NETCREDENTIALS_ONLY   0x00000002\n#define LOGON_ZERO_PASSWORD_BUFFER  0x80000000\n\n/* one-time initialisation API */\ntypedef RTL_RUN_ONCE  INIT_ONCE;\ntypedef PRTL_RUN_ONCE PINIT_ONCE;\ntypedef PRTL_RUN_ONCE LPINIT_ONCE;\n#define INIT_ONCE_STATIC_INIT       RTL_RUN_ONCE_INIT\n#define INIT_ONCE_CHECK_ONLY        RTL_RUN_ONCE_CHECK_ONLY\n#define INIT_ONCE_ASYNC             RTL_RUN_ONCE_ASYNC\n#define INIT_ONCE_INIT_FAILED       RTL_RUN_ONCE_INIT_FAILED\n/* initialization callback prototype */\ntypedef BOOL (WINAPI *PINIT_ONCE_FN)(PINIT_ONCE,PVOID,PVOID*);\n\ntypedef struct _REASON_CONTEXT\n{\n    ULONG Version;\n    DWORD Flags;\n    union\n    {\n        struct\n        {\n            HMODULE LocalizedReasonModule;\n            ULONG LocalizedReasonId;\n            ULONG ReasonStringCount;\n            LPWSTR *ReasonStrings;\n        } Detailed;\n        LPWSTR SimpleReasonString;\n    } Reason;\n} REASON_CONTEXT, *PREASON_CONTEXT;\n\n#define RESOURCE_ENUM_LN          0x0001\n#define RESOURCE_ENUM_MUI         0x0002\n#define RESOURCE_ENUM_MUI_SYSTEM  0x0004\n#define RESOURCE_ENUM_VALIDATE    0x0008\n\ntypedef struct _PROC_THREAD_ATTRIBUTE_LIST\n*PPROC_THREAD_ATTRIBUTE_LIST, *LPPROC_THREAD_ATTRIBUTE_LIST;\n\n#define PROC_THREAD_ATTRIBUTE_NUMBER   0x0000ffff\n#define PROC_THREAD_ATTRIBUTE_THREAD   0x00010000\n#define PROC_THREAD_ATTRIBUTE_INPUT    0x00020000\n#define PROC_THREAD_ATTRIBUTE_ADDITIVE 0x00040000\n\ntypedef enum _PROC_THREAD_ATTRIBUTE_NUM\n{\n    ProcThreadAttributeParentProcess = 0,\n    ProcThreadAttributeHandleList = 2,\n    ProcThreadAttributeGroupAffinity = 3,\n    ProcThreadAttributeIdealProcessor = 5,\n    ProcThreadAttributeUmsThread = 6,\n    ProcThreadAttributeMitigationPolicy = 7,\n    ProcThreadAttributeSecurityCapabilities = 9,\n    ProcThreadAttributeProtectionLevel = 11,\n    ProcThreadAttributeJobList = 13,\n    ProcThreadAttributeChildProcessPolicy = 14,\n    ProcThreadAttributeAllApplicationPackagesPolicy = 15,\n    ProcThreadAttributeWin32kFilter = 16,\n    ProcThreadAttributeSafeOpenPromptOriginClaim = 17,\n} PROC_THREAD_ATTRIBUTE_NUM;\n\n#define PROC_THREAD_ATTRIBUTE_PARENT_PROCESS (ProcThreadAttributeParentProcess | PROC_THREAD_ATTRIBUTE_INPUT)\n#define PROC_THREAD_ATTRIBUTE_HANDLE_LIST (ProcThreadAttributeHandleList | PROC_THREAD_ATTRIBUTE_INPUT)\n#define PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY (ProcThreadAttributeGroupAffinity | PROC_THREAD_ATTRIBUTE_THREAD | PROC_THREAD_ATTRIBUTE_INPUT)\n#define PROC_THREAD_ATTRIBUTE_IDEAL_PROCESSOR (ProcThreadAttributeIdealProcessor | PROC_THREAD_ATTRIBUTE_THREAD | PROC_THREAD_ATTRIBUTE_INPUT)\n#define PROC_THREAD_ATTRIBUTE_UMS_THREAD (ProcThreadAttributeUmsThread | PROC_THREAD_ATTRIBUTE_THREAD | PROC_THREAD_ATTRIBUTE_INPUT)\n#define PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY (ProcThreadAttributeMitigationPolicy | PROC_THREAD_ATTRIBUTE_INPUT)\n#define PROC_THREAD_ATTRIBUTE_SECURITY_CAPABILITIES (ProcThreadAttributeSecurityCapabilities | PROC_THREAD_ATTRIBUTE_INPUT)\n#define PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL (ProcThreadAttributeProtectionLevel | PROC_THREAD_ATTRIBUTE_INPUT)\n#define PROC_THREAD_ATTRIBUTE_JOB_LIST (ProcThreadAttributeJobList | PROC_THREAD_ATTRIBUTE_INPUT)\n#define PROC_THREAD_ATTRIBUTE_CHILD_PROCESS_POLICY (ProcThreadAttributeChildProcessPolicy | PROC_THREAD_ATTRIBUTE_INPUT)\n#define PROC_THREAD_ATTRIBUTE_ALL_APPLICATION_PACKAGES_POLICY (ProcThreadAttributeAllApplicationPackagesPolicy | PROC_THREAD_ATTRIBUTE_INPUT)\n#define PROC_THREAD_ATTRIBUTE_WIN32K_FILTER (ProcThreadAttributeWin32kFilter | PROC_THREAD_ATTRIBUTE_INPUT)\n\n#define SYMBOLIC_LINK_FLAG_DIRECTORY (0x1)\n#define VALID_SYMBOLIC_LINK_FLAGS SYMBOLIC_LINK_FLAG_DIRECTORY\n\ntypedef void *PUMS_CONTEXT;\ntypedef void *PUMS_COMPLETION_LIST;\ntypedef PRTL_UMS_SCHEDULER_ENTRY_POINT PUMS_SCHEDULER_ENTRY_POINT;\ntypedef struct _UMS_SCHEDULER_STARTUP_INFO\n{\n    ULONG UmsVersion;\n    PUMS_COMPLETION_LIST CompletionList;\n    PUMS_SCHEDULER_ENTRY_POINT SchedulerProc;\n    PVOID SchedulerParam;\n} UMS_SCHEDULER_STARTUP_INFO, *PUMS_SCHEDULER_STARTUP_INFO;\n\ntypedef enum _RTL_UMS_SCHEDULER_REASON UMS_SCHEDULER_REASON;\ntypedef enum _RTL_UMS_THREAD_INFO_CLASS UMS_THREAD_INFO_CLASS, *PUMS_THREAD_INFO_CLASS;\n\nWINBASEAPI BOOL        WINAPI ActivateActCtx(HANDLE,ULONG_PTR *);\nWINADVAPI  BOOL        WINAPI AddAccessAllowedAce(PACL,DWORD,DWORD,PSID);\nWINADVAPI  BOOL        WINAPI AddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID);\nWINADVAPI  BOOL        WINAPI AddAccessDeniedAce(PACL,DWORD,DWORD,PSID);\nWINADVAPI  BOOL        WINAPI AddAccessDeniedAceEx(PACL,DWORD,DWORD,DWORD,PSID);\nWINADVAPI  BOOL        WINAPI AddAce(PACL,DWORD,DWORD,LPVOID,DWORD);\nWINBASEAPI ATOM        WINAPI AddAtomA(LPCSTR);\nWINBASEAPI ATOM        WINAPI AddAtomW(LPCWSTR);\n#define                       AddAtom WINELIB_NAME_AW(AddAtom)\nWINADVAPI  BOOL        WINAPI AddAuditAccessAce(PACL,DWORD,DWORD,PSID,BOOL,BOOL);\nWINADVAPI  BOOL        WINAPI AddAuditAccessAceEx(PACL,DWORD,DWORD,DWORD,PSID,BOOL,BOOL);\nWINADVAPI  BOOL        WINAPI AddMandatoryAce(PACL,DWORD,DWORD,DWORD,PSID);\nWINBASEAPI VOID        WINAPI AddRefActCtx(HANDLE);\nWINBASEAPI PVOID       WINAPI AddVectoredExceptionHandler(ULONG,PVECTORED_EXCEPTION_HANDLER);\nWINADVAPI  BOOL        WINAPI AdjustTokenGroups(HANDLE,BOOL,PTOKEN_GROUPS,DWORD,PTOKEN_GROUPS,PDWORD);\nWINADVAPI  BOOL        WINAPI AccessCheck(PSECURITY_DESCRIPTOR,HANDLE,DWORD,PGENERIC_MAPPING,PPRIVILEGE_SET,LPDWORD,LPDWORD,LPBOOL);\nWINADVAPI  BOOL        WINAPI AccessCheckAndAuditAlarmA(LPCSTR,LPVOID,LPSTR,LPSTR,PSECURITY_DESCRIPTOR,DWORD,PGENERIC_MAPPING,BOOL,LPDWORD,LPBOOL,LPBOOL);\nWINADVAPI  BOOL        WINAPI AccessCheckAndAuditAlarmW(LPCWSTR,LPVOID,LPWSTR,LPWSTR,PSECURITY_DESCRIPTOR,DWORD,PGENERIC_MAPPING,BOOL,LPDWORD,LPBOOL,LPBOOL);\n#define                       AccessCheckAndAuditAlarm WINELIB_NAME_AW(AccessCheckAndAuditAlarm)\nWINADVAPI  BOOL        WINAPI AccessCheckByType(PSECURITY_DESCRIPTOR,PSID,HANDLE,DWORD,POBJECT_TYPE_LIST,DWORD,PGENERIC_MAPPING,PPRIVILEGE_SET,LPDWORD,LPDWORD,LPBOOL);\nWINBASEAPI VOID        WINAPI AcquireSRWLockExclusive(PSRWLOCK);\nWINBASEAPI VOID        WINAPI AcquireSRWLockShared(PSRWLOCK);\nWINADVAPI  BOOL        WINAPI AdjustTokenPrivileges(HANDLE,BOOL,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);\nWINADVAPI  BOOL        WINAPI AllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID *);\nWINADVAPI  BOOL        WINAPI AllocateLocallyUniqueId(PLUID);\nWINADVAPI  BOOL        WINAPI AreAllAccessesGranted(DWORD,DWORD);\nWINADVAPI  BOOL        WINAPI AreAnyAccessesGranted(DWORD,DWORD);\nWINBASEAPI BOOL        WINAPI AreFileApisANSI(void);\nWINBASEAPI BOOL        WINAPI AssignProcessToJobObject(HANDLE,HANDLE);\nWINADVAPI  BOOL        WINAPI BackupEventLogA(HANDLE,LPCSTR);\nWINADVAPI  BOOL        WINAPI BackupEventLogW(HANDLE,LPCWSTR);\n#define                       BackupEventLog WINELIB_NAME_AW(BackupEventLog)\nWINBASEAPI BOOL        WINAPI BackupRead(HANDLE,LPBYTE,DWORD,LPDWORD,BOOL,BOOL,LPVOID*);\nWINBASEAPI BOOL        WINAPI BackupSeek(HANDLE,DWORD,DWORD,LPDWORD,LPDWORD,LPVOID*);\nWINBASEAPI BOOL        WINAPI BackupWrite(HANDLE,LPBYTE,DWORD,LPDWORD,BOOL,BOOL,LPVOID*);\nWINBASEAPI BOOL        WINAPI Beep(DWORD,DWORD);\nWINBASEAPI HANDLE      WINAPI BeginUpdateResourceA(LPCSTR,BOOL);\nWINBASEAPI HANDLE      WINAPI BeginUpdateResourceW(LPCWSTR,BOOL);\n#define                       BeginUpdateResource WINELIB_NAME_AW(BeginUpdateResource)\nWINBASEAPI BOOL        WINAPI BindIoCompletionCallback(HANDLE,LPOVERLAPPED_COMPLETION_ROUTINE,ULONG);\nWINBASEAPI BOOL        WINAPI BuildCommDCBA(LPCSTR,LPDCB);\nWINBASEAPI BOOL        WINAPI BuildCommDCBW(LPCWSTR,LPDCB);\n#define                       BuildCommDCB WINELIB_NAME_AW(BuildCommDCB)\nWINBASEAPI BOOL        WINAPI BuildCommDCBAndTimeoutsA(LPCSTR,LPDCB,LPCOMMTIMEOUTS);\nWINBASEAPI BOOL        WINAPI BuildCommDCBAndTimeoutsW(LPCWSTR,LPDCB,LPCOMMTIMEOUTS);\n#define                       BuildCommDCBAndTimeouts WINELIB_NAME_AW(BuildCommDCBAndTimeouts)\nWINBASEAPI BOOL        WINAPI CallNamedPipeA(LPCSTR,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,DWORD);\nWINBASEAPI BOOL        WINAPI CallNamedPipeW(LPCWSTR,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,DWORD);\n#define                       CallNamedPipe WINELIB_NAME_AW(CallNamedPipe)\nWINBASEAPI BOOL        WINAPI CancelIo(HANDLE);\nWINBASEAPI BOOL        WINAPI CancelIoEx(HANDLE,LPOVERLAPPED);\nWINBASEAPI BOOL        WINAPI CancelSynchronousIo(HANDLE);\nWINBASEAPI BOOL        WINAPI CancelTimerQueueTimer(HANDLE,HANDLE);\nWINBASEAPI BOOL        WINAPI CancelWaitableTimer(HANDLE);\nWINBASEAPI BOOL        WINAPI CheckNameLegalDOS8Dot3A(const char*,char*,DWORD,BOOL*,BOOL*);\nWINBASEAPI BOOL        WINAPI CheckNameLegalDOS8Dot3W(const WCHAR*, char*,DWORD,BOOL*,BOOL*);\nWINBASEAPI BOOL        WINAPI CheckRemoteDebuggerPresent(HANDLE,BOOL*);\nWINBASEAPI BOOL        WINAPI ChangeTimerQueueTimer(HANDLE,HANDLE,ULONG,ULONG);\nWINADVAPI  BOOL        WINAPI CheckTokenMembership(HANDLE,PSID,PBOOL);\nWINBASEAPI BOOL        WINAPI ClearCommBreak(HANDLE);\nWINBASEAPI BOOL        WINAPI ClearCommError(HANDLE,LPDWORD,LPCOMSTAT);\nWINADVAPI  VOID        WINAPI CloseEncryptedFileRaw(PVOID);\nWINADVAPI  BOOL        WINAPI ClearEventLogA(HANDLE,LPCSTR);\nWINADVAPI  BOOL        WINAPI ClearEventLogW(HANDLE,LPCWSTR);\n#define                       ClearEventLog WINELIB_NAME_AW(ClearEventLog)\nWINADVAPI  BOOL        WINAPI CloseEventLog(HANDLE);\nWINBASEAPI BOOL        WINAPI CloseHandle(HANDLE);\nWINBASEAPI VOID        WINAPI CloseThreadpool(PTP_POOL);\nWINBASEAPI VOID        WINAPI CloseThreadpoolCleanupGroup(PTP_CLEANUP_GROUP);\nWINBASEAPI VOID        WINAPI CloseThreadpoolCleanupGroupMembers(PTP_CLEANUP_GROUP,BOOL,PVOID);\nWINBASEAPI VOID        WINAPI CloseThreadpoolTimer(PTP_TIMER);\nWINBASEAPI VOID        WINAPI CloseThreadpoolWait(PTP_WAIT);\nWINBASEAPI VOID        WINAPI CloseThreadpoolWork(PTP_WORK);\nWINBASEAPI BOOL        WINAPI CommConfigDialogA(LPCSTR,HWND,LPCOMMCONFIG);\nWINBASEAPI BOOL        WINAPI CommConfigDialogW(LPCWSTR,HWND,LPCOMMCONFIG);\n#define                       CommConfigDialog WINELIB_NAME_AW(CommConfigDialog)\nWINBASEAPI BOOL        WINAPI ConnectNamedPipe(HANDLE,LPOVERLAPPED);\nWINBASEAPI BOOL        WINAPI ContinueDebugEvent(DWORD,DWORD,DWORD);\nWINBASEAPI HANDLE      WINAPI ConvertToGlobalHandle(HANDLE hSrc);\nWINBASEAPI BOOL        WINAPI CopyFileA(LPCSTR,LPCSTR,BOOL);\nWINBASEAPI BOOL        WINAPI CopyFileW(LPCWSTR,LPCWSTR,BOOL);\n#define                       CopyFile WINELIB_NAME_AW(CopyFile)\nWINBASEAPI HRESULT     WINAPI CopyFile2(PCWSTR,PCWSTR,COPYFILE2_EXTENDED_PARAMETERS*);\nWINBASEAPI BOOL        WINAPI CopyFileExA(LPCSTR, LPCSTR, LPPROGRESS_ROUTINE, LPVOID, LPBOOL, DWORD);\nWINBASEAPI BOOL        WINAPI CopyFileExW(LPCWSTR, LPCWSTR, LPPROGRESS_ROUTINE, LPVOID, LPBOOL, DWORD);\n#define                       CopyFileEx WINELIB_NAME_AW(CopyFileEx)\nWINADVAPI  BOOL        WINAPI CopySid(DWORD,PSID,PSID);\nWINBASEAPI INT         WINAPI CompareFileTime(const FILETIME*,const FILETIME*);\nWINBASEAPI BOOL        WINAPI ConvertFiberToThread(void);\nWINBASEAPI LPVOID      WINAPI ConvertThreadToFiber(LPVOID);\nWINBASEAPI LPVOID      WINAPI ConvertThreadToFiberEx(LPVOID,DWORD);\nWINADVAPI  BOOL        WINAPI ConvertToAutoInheritPrivateObjectSecurity(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,GUID*,BOOL,PGENERIC_MAPPING);\nWINBASEAPI HANDLE      WINAPI CreateActCtxA(PCACTCTXA);\nWINBASEAPI HANDLE      WINAPI CreateActCtxW(PCACTCTXW);\n#define                       CreateActCtx WINELIB_NAME_AW(CreateActCtx)\nWINBASEAPI BOOL        WINAPI CreateDirectoryA(LPCSTR,LPSECURITY_ATTRIBUTES);\nWINBASEAPI BOOL        WINAPI CreateDirectoryW(LPCWSTR,LPSECURITY_ATTRIBUTES);\n#define                       CreateDirectory WINELIB_NAME_AW(CreateDirectory)\nWINBASEAPI BOOL        WINAPI CreateDirectoryExA(LPCSTR,LPCSTR,LPSECURITY_ATTRIBUTES);\nWINBASEAPI BOOL        WINAPI CreateDirectoryExW(LPCWSTR,LPCWSTR,LPSECURITY_ATTRIBUTES);\n#define                       CreateDirectoryEx WINELIB_NAME_AW(CreateDirectoryEx)\nWINBASEAPI HANDLE      WINAPI CreateEventA(LPSECURITY_ATTRIBUTES,BOOL,BOOL,LPCSTR);\nWINBASEAPI HANDLE      WINAPI CreateEventW(LPSECURITY_ATTRIBUTES,BOOL,BOOL,LPCWSTR);\n#define                       CreateEvent WINELIB_NAME_AW(CreateEvent)\nWINBASEAPI HANDLE      WINAPI CreateEventExA(SECURITY_ATTRIBUTES*,LPCSTR,DWORD,DWORD);\nWINBASEAPI HANDLE      WINAPI CreateEventExW(SECURITY_ATTRIBUTES*,LPCWSTR,DWORD,DWORD);\n#define                       CreateEventEx WINELIB_NAME_AW(CreateEventEx)\nWINBASEAPI LPVOID      WINAPI CreateFiber(SIZE_T,LPFIBER_START_ROUTINE,LPVOID);\nWINBASEAPI LPVOID      WINAPI CreateFiberEx(SIZE_T,SIZE_T,DWORD,LPFIBER_START_ROUTINE,LPVOID);\nWINBASEAPI HANDLE      WINAPI CreateFileA(LPCSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE);\nWINBASEAPI HANDLE      WINAPI CreateFileW(LPCWSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE);\n#define                       CreateFile WINELIB_NAME_AW(CreateFile)\nWINBASEAPI HANDLE      WINAPI CreateFileMappingA(HANDLE,LPSECURITY_ATTRIBUTES,DWORD,DWORD,DWORD,LPCSTR);\nWINBASEAPI HANDLE      WINAPI CreateFileMappingW(HANDLE,LPSECURITY_ATTRIBUTES,DWORD,DWORD,DWORD,LPCWSTR);\n#define                       CreateFileMapping WINELIB_NAME_AW(CreateFileMapping)\nWINBASEAPI HANDLE      WINAPI CreateIoCompletionPort(HANDLE,HANDLE,ULONG_PTR,DWORD);\nWINBASEAPI HANDLE      WINAPI CreateJobObjectA(LPSECURITY_ATTRIBUTES,LPCSTR);\nWINBASEAPI HANDLE      WINAPI CreateJobObjectW(LPSECURITY_ATTRIBUTES,LPCWSTR);\n#define                       CreateJobObject WINELIB_NAME_AW(CreateJobObject)\nWINBASEAPI HANDLE      WINAPI CreateMailslotA(LPCSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES);\nWINBASEAPI HANDLE      WINAPI CreateMailslotW(LPCWSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES);\n#define                       CreateMailslot WINELIB_NAME_AW(CreateMailslot)\nWINBASEAPI HANDLE      WINAPI CreateMemoryResourceNotification(MEMORY_RESOURCE_NOTIFICATION_TYPE);\nWINBASEAPI HANDLE      WINAPI CreateMutexA(LPSECURITY_ATTRIBUTES,BOOL,LPCSTR);\nWINBASEAPI HANDLE      WINAPI CreateMutexW(LPSECURITY_ATTRIBUTES,BOOL,LPCWSTR);\n#define                       CreateMutex WINELIB_NAME_AW(CreateMutex)\nWINBASEAPI HANDLE      WINAPI CreateMutexExA(SECURITY_ATTRIBUTES*,LPCSTR,DWORD,DWORD);\nWINBASEAPI HANDLE      WINAPI CreateMutexExW(SECURITY_ATTRIBUTES*,LPCWSTR,DWORD,DWORD);\n#define                       CreateMutexEx WINELIB_NAME_AW(CreateMutexEx)\nWINBASEAPI HANDLE      WINAPI CreateNamedPipeA(LPCSTR,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPSECURITY_ATTRIBUTES);\nWINBASEAPI HANDLE      WINAPI CreateNamedPipeW(LPCWSTR,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPSECURITY_ATTRIBUTES);\n#define                       CreateNamedPipe WINELIB_NAME_AW(CreateNamedPipe)\nWINBASEAPI BOOL        WINAPI CreatePipe(PHANDLE,PHANDLE,LPSECURITY_ATTRIBUTES,DWORD);\nWINADVAPI  BOOL        WINAPI CreatePrivateObjectSecurity(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,BOOL,HANDLE,PGENERIC_MAPPING);\nWINADVAPI  BOOL        WINAPI CreatePrivateObjectSecurityEx(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,GUID*,BOOL,ULONG,HANDLE,PGENERIC_MAPPING);\nWINADVAPI  BOOL        WINAPI CreatePrivateObjectSecurityWithMultipleInheritance(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,GUID**,ULONG,BOOL,ULONG,HANDLE,PGENERIC_MAPPING);\nWINBASEAPI PTP_POOL    WINAPI CreateThreadpool(PVOID);\nWINBASEAPI PTP_CLEANUP_GROUP WINAPI CreateThreadpoolCleanupGroup(void);\nWINBASEAPI PTP_IO      WINAPI CreateThreadpoolIo(HANDLE,PTP_WIN32_IO_CALLBACK,PVOID,PTP_CALLBACK_ENVIRON);\nWINBASEAPI PTP_TIMER   WINAPI CreateThreadpoolTimer(PTP_TIMER_CALLBACK,PVOID,PTP_CALLBACK_ENVIRON);\nWINBASEAPI PTP_WAIT    WINAPI CreateThreadpoolWait(PTP_WAIT_CALLBACK,PVOID,PTP_CALLBACK_ENVIRON);\nWINBASEAPI PTP_WORK    WINAPI CreateThreadpoolWork(PTP_WORK_CALLBACK,PVOID,PTP_CALLBACK_ENVIRON);\nWINBASEAPI BOOL        WINAPI CreateProcessA(LPCSTR,LPSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCSTR,LPSTARTUPINFOA,LPPROCESS_INFORMATION);\nWINBASEAPI BOOL        WINAPI CreateProcessW(LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCWSTR,LPSTARTUPINFOW,LPPROCESS_INFORMATION);\n#define                       CreateProcess WINELIB_NAME_AW(CreateProcess)\nWINADVAPI  BOOL        WINAPI CreateProcessAsUserA(HANDLE,LPCSTR,LPSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCSTR,LPSTARTUPINFOA,LPPROCESS_INFORMATION);\nWINADVAPI  BOOL        WINAPI CreateProcessAsUserW(HANDLE,LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCWSTR,LPSTARTUPINFOW,LPPROCESS_INFORMATION);\n#define                       CreateProcessAsUser WINELIB_NAME_AW(CreateProcessAsUser)\nWINADVAPI  BOOL        WINAPI CreateProcessWithLogonW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,LPCWSTR,LPWSTR,DWORD,LPVOID,LPCWSTR,LPSTARTUPINFOW,LPPROCESS_INFORMATION);\nWINBASEAPI HANDLE      WINAPI CreateRemoteThread(HANDLE,LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPDWORD);\nWINBASEAPI HANDLE      WINAPI CreateRemoteThreadEx(HANDLE,LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPPROC_THREAD_ATTRIBUTE_LIST,LPDWORD);\nWINADVAPI  BOOL        WINAPI CreateRestrictedToken(HANDLE,DWORD,DWORD,PSID_AND_ATTRIBUTES,DWORD,PLUID_AND_ATTRIBUTES,DWORD,PSID_AND_ATTRIBUTES,PHANDLE);\nWINBASEAPI HANDLE      WINAPI CreateSemaphoreA(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCSTR);\nWINBASEAPI HANDLE      WINAPI CreateSemaphoreW(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCWSTR);\n#define                       CreateSemaphore WINELIB_NAME_AW(CreateSemaphore)\nWINBASEAPI HANDLE      WINAPI CreateSemaphoreExA(SECURITY_ATTRIBUTES*,LONG,LONG,LPCSTR,DWORD,DWORD);\nWINBASEAPI HANDLE      WINAPI CreateSemaphoreExW(SECURITY_ATTRIBUTES*,LONG,LONG,LPCWSTR,DWORD,DWORD);\n#define                       CreateSemaphoreEx WINELIB_NAME_AW(CreateSemaphoreEx)\nWINBASEAPI BOOLEAN     WINAPI CreateSymbolicLinkA(LPCSTR,LPCSTR,DWORD);\nWINBASEAPI BOOLEAN     WINAPI CreateSymbolicLinkW(LPCWSTR,LPCWSTR,DWORD);\n#define                       CreateSymbolicLink WINELIB_NAME_AW(CreateSymbolicLink)\nWINBASEAPI BOOL        WINAPI CreateHardLinkA(LPCSTR,LPCSTR,LPSECURITY_ATTRIBUTES);\nWINBASEAPI BOOL        WINAPI CreateHardLinkW(LPCWSTR,LPCWSTR,LPSECURITY_ATTRIBUTES);\n#define                       CreateHardLink WINELIB_NAME_AW(CreateHardLink)\nWINBASEAPI DWORD       WINAPI CreateTapePartition(HANDLE,DWORD,DWORD,DWORD);\nWINBASEAPI HANDLE      WINAPI CreateThread(LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPDWORD);\nWINBASEAPI HANDLE      WINAPI CreateTimerQueue(void);\nWINBASEAPI BOOL        WINAPI CreateTimerQueueTimer(PHANDLE,HANDLE,WAITORTIMERCALLBACK,PVOID,DWORD,DWORD,ULONG);\nWINBASEAPI BOOL        WINAPI CreateUmsCompletionList(PUMS_COMPLETION_LIST*);\nWINBASEAPI BOOL        WINAPI CreateUmsThreadContext(PUMS_CONTEXT*);\nWINBASEAPI HANDLE      WINAPI CreateWaitableTimerA(LPSECURITY_ATTRIBUTES,BOOL,LPCSTR);\nWINBASEAPI HANDLE      WINAPI CreateWaitableTimerW(LPSECURITY_ATTRIBUTES,BOOL,LPCWSTR);\n#define                       CreateWaitableTimer WINELIB_NAME_AW(CreateWaitableTimer)\nWINBASEAPI HANDLE      WINAPI CreateWaitableTimerExA(SECURITY_ATTRIBUTES*,LPCSTR,DWORD,DWORD);\nWINBASEAPI HANDLE      WINAPI CreateWaitableTimerExW(SECURITY_ATTRIBUTES*,LPCWSTR,DWORD,DWORD);\n#define                       CreateWaitableTimerEx WINELIB_NAME_AW(CreateWaitableTimerEx)\nWINADVAPI  BOOL        WINAPI CreateWellKnownSid(WELL_KNOWN_SID_TYPE,PSID,PSID,DWORD*);\nWINBASEAPI BOOL        WINAPI DeactivateActCtx(DWORD,ULONG_PTR);\nWINBASEAPI BOOL        WINAPI DebugActiveProcess(DWORD);\nWINBASEAPI BOOL        WINAPI DebugActiveProcessStop(DWORD);\nWINBASEAPI void        WINAPI DebugBreak(void);\nWINBASEAPI BOOL        WINAPI DebugBreakProcess(HANDLE);\nWINBASEAPI BOOL        WINAPI DebugSetProcessKillOnExit(BOOL);\nWINBASEAPI void *      WINAPI DecodePointer(void *);\nWINBASEAPI void *      WINAPI DecodeSystemPointer(void *);\nWINADVAPI  BOOL        WINAPI DecryptFileA(LPCSTR,DWORD);\nWINADVAPI  BOOL        WINAPI DecryptFileW(LPCWSTR,DWORD);\n#define                       DecryptFile WINELIB_NAME_AW(DecryptFile)\nWINBASEAPI BOOL        WINAPI DefineDosDeviceA(DWORD,LPCSTR,LPCSTR);\nWINBASEAPI BOOL        WINAPI DefineDosDeviceW(DWORD,LPCWSTR,LPCWSTR);\n#define                       DefineDosDevice WINELIB_NAME_AW(DefineDosDevice)\n#define                       DefineHandleTable(w) ((w),TRUE)\nWINADVAPI  BOOL        WINAPI DeleteAce(PACL,DWORD);\nWINBASEAPI ATOM        WINAPI DeleteAtom(ATOM);\nWINBASEAPI void        WINAPI DeleteCriticalSection(CRITICAL_SECTION *lpCrit);\nWINBASEAPI void        WINAPI DeleteFiber(LPVOID);\nWINBASEAPI BOOL        WINAPI DeleteFileA(LPCSTR);\nWINBASEAPI BOOL        WINAPI DeleteFileW(LPCWSTR);\n#define                       DeleteFile WINELIB_NAME_AW(DeleteFile)\nWINBASEAPI void        WINAPI DeleteProcThreadAttributeList(struct _PROC_THREAD_ATTRIBUTE_LIST*);\nWINBASEAPI BOOL        WINAPI DeleteTimerQueue(HANDLE);\nWINBASEAPI BOOL        WINAPI DeleteTimerQueueEx(HANDLE,HANDLE);\nWINBASEAPI BOOL        WINAPI DeleteTimerQueueTimer(HANDLE,HANDLE,HANDLE);\nWINBASEAPI BOOL        WINAPI DeleteUmsCompletionList(PUMS_COMPLETION_LIST);\nWINBASEAPI BOOL        WINAPI DeleteUmsThreadContext(PUMS_CONTEXT);\nWINBASEAPI BOOL        WINAPI DeleteVolumeMountPointA(LPCSTR);\nWINBASEAPI BOOL        WINAPI DeleteVolumeMountPointW(LPCWSTR);\n#define                       DeleteVolumeMountPoint WINELIB_NAME_AW(DeleteVolumeMountPoint)\nWINBASEAPI BOOL        WINAPI DequeueUmsCompletionListItems(void *, DWORD, PUMS_CONTEXT *);\nWINADVAPI  BOOL        WINAPI DeregisterEventSource(HANDLE);\nWINADVAPI  BOOL        WINAPI DestroyPrivateObjectSecurity(PSECURITY_DESCRIPTOR*);\nWINBASEAPI BOOL        WINAPI DeviceIoControl(HANDLE,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPOVERLAPPED);\nWINBASEAPI BOOL        WINAPI DisableThreadLibraryCalls(HMODULE);\nWINBASEAPI VOID        WINAPI DisassociateCurrentThreadFromCallback(PTP_CALLBACK_INSTANCE);\nWINBASEAPI BOOL        WINAPI DisconnectNamedPipe(HANDLE);\nWINBASEAPI BOOL        WINAPI DnsHostnameToComputerNameA(LPCSTR,LPSTR,LPDWORD);\nWINBASEAPI BOOL        WINAPI DnsHostnameToComputerNameW(LPCWSTR,LPWSTR,LPDWORD);\n#define                       DnsHostnameToComputerName WINELIB_NAME_AW(DnsHostnameToComputerName)\nWINBASEAPI BOOL        WINAPI DosDateTimeToFileTime(WORD,WORD,LPFILETIME);\nWINBASEAPI BOOL        WINAPI DuplicateHandle(HANDLE,HANDLE,HANDLE,HANDLE*,DWORD,BOOL,DWORD);\nWINADVAPI  BOOL        WINAPI DuplicateToken(HANDLE,SECURITY_IMPERSONATION_LEVEL,PHANDLE);\nWINADVAPI  BOOL        WINAPI DuplicateTokenEx(HANDLE,DWORD,LPSECURITY_ATTRIBUTES,SECURITY_IMPERSONATION_LEVEL,TOKEN_TYPE,PHANDLE);\nWINBASEAPI BOOL        WINAPI EscapeCommFunction(HANDLE,DWORD);\nWINBASEAPI void *      WINAPI EncodePointer(void *);\nWINBASEAPI void *      WINAPI EncodeSystemPointer(void *);\nWINADVAPI  BOOL        WINAPI EncryptFileA(LPCSTR);\nWINADVAPI  BOOL        WINAPI EncryptFileW(LPCWSTR);\n#define                       EncryptFile WINELIB_NAME_AW(EncryptFile)\nWINBASEAPI BOOL        WINAPI EndUpdateResourceA(HANDLE,BOOL);\nWINBASEAPI BOOL        WINAPI EndUpdateResourceW(HANDLE,BOOL);\n#define                       EndUpdateResource WINELIB_NAME_AW(EndUpdateResource)\nWINBASEAPI void        WINAPI EnterCriticalSection(CRITICAL_SECTION *lpCrit);\nWINBASEAPI BOOL        WINAPI EnterUmsSchedulingMode(PUMS_SCHEDULER_STARTUP_INFO);\nWINBASEAPI BOOL        WINAPI EnumResourceLanguagesA(HMODULE,LPCSTR,LPCSTR,ENUMRESLANGPROCA,LONG_PTR);\nWINBASEAPI BOOL        WINAPI EnumResourceLanguagesW(HMODULE,LPCWSTR,LPCWSTR,ENUMRESLANGPROCW,LONG_PTR);\n#define                       EnumResourceLanguages WINELIB_NAME_AW(EnumResourceLanguages)\nWINBASEAPI BOOL        WINAPI EnumResourceLanguagesExA(HMODULE,LPCSTR,LPCSTR,ENUMRESLANGPROCA,LONG_PTR,DWORD,LANGID);\nWINBASEAPI BOOL        WINAPI EnumResourceLanguagesExW(HMODULE,LPCWSTR,LPCWSTR,ENUMRESLANGPROCW,LONG_PTR,DWORD,LANGID);\n#define                       EnumResourceLanguagesEx WINELIB_NAME_AW(EnumResourceLanguagesEx)\nWINBASEAPI BOOL        WINAPI EnumResourceNamesA(HMODULE,LPCSTR,ENUMRESNAMEPROCA,LONG_PTR);\nWINBASEAPI BOOL        WINAPI EnumResourceNamesW(HMODULE,LPCWSTR,ENUMRESNAMEPROCW,LONG_PTR);\n#define                       EnumResourceNames WINELIB_NAME_AW(EnumResourceNames)\nWINBASEAPI BOOL        WINAPI EnumResourceTypesA(HMODULE,ENUMRESTYPEPROCA,LONG_PTR);\nWINBASEAPI BOOL        WINAPI EnumResourceTypesW(HMODULE,ENUMRESTYPEPROCW,LONG_PTR);\n#define                       EnumResourceTypes WINELIB_NAME_AW(EnumResourceTypes)\nWINADVAPI  BOOL        WINAPI EqualSid(PSID, PSID);\nWINADVAPI  BOOL        WINAPI EqualPrefixSid(PSID,PSID);\nWINBASEAPI DWORD       WINAPI EraseTape(HANDLE,DWORD,BOOL);\nWINBASEAPI VOID DECLSPEC_NORETURN WINAPI ExitProcess(DWORD);\nWINBASEAPI VOID DECLSPEC_NORETURN WINAPI ExitThread(DWORD);\nWINBASEAPI BOOL        WINAPI ExecuteUmsThread(PUMS_CONTEXT);\nWINBASEAPI DWORD       WINAPI ExpandEnvironmentStringsA(LPCSTR,LPSTR,DWORD);\nWINBASEAPI DWORD       WINAPI ExpandEnvironmentStringsW(LPCWSTR,LPWSTR,DWORD);\n#define                       ExpandEnvironmentStrings WINELIB_NAME_AW(ExpandEnvironmentStrings)\nWINBASEAPI void        WINAPI FatalAppExitA(UINT,LPCSTR);\nWINBASEAPI void        WINAPI FatalAppExitW(UINT,LPCWSTR);\nWINBASEAPI void        WINAPI FatalExit(int);\n#define                       FatalAppExit WINELIB_NAME_AW(FatalAppExit)\nWINADVAPI  BOOL        WINAPI FileEncryptionStatusA(LPCSTR,LPDWORD);\nWINADVAPI  BOOL        WINAPI FileEncryptionStatusW(LPCWSTR,LPDWORD);\n#define                       FileEncryptionStatus WINELIB_NAME_AW(FileEncryptionStatus)\nWINBASEAPI BOOL        WINAPI FileTimeToDosDateTime(const FILETIME*,LPWORD,LPWORD);\nWINBASEAPI BOOL        WINAPI FileTimeToLocalFileTime(const FILETIME*,LPFILETIME);\nWINBASEAPI BOOL        WINAPI FileTimeToSystemTime(const FILETIME*,LPSYSTEMTIME);\nWINBASEAPI BOOL        WINAPI FindActCtxSectionStringA(DWORD,const GUID *,ULONG,LPCSTR,PACTCTX_SECTION_KEYED_DATA);\nWINBASEAPI BOOL        WINAPI FindActCtxSectionStringW(DWORD,const GUID *,ULONG,LPCWSTR,PACTCTX_SECTION_KEYED_DATA);\n#define                       FindActCtxSectionString WINELIB_NAME_AW(FindActCtxSectionString)\nWINBASEAPI BOOL        WINAPI FindActCtxSectionGuid(DWORD,const GUID *,ULONG,const GUID *,PACTCTX_SECTION_KEYED_DATA);\nWINBASEAPI ATOM        WINAPI FindAtomA(LPCSTR);\nWINBASEAPI ATOM        WINAPI FindAtomW(LPCWSTR);\n#define                       FindAtom WINELIB_NAME_AW(FindAtom)\nWINBASEAPI BOOL        WINAPI FindClose(HANDLE);\nWINBASEAPI HANDLE      WINAPI FindFirstChangeNotificationA(LPCSTR,BOOL,DWORD);\nWINBASEAPI HANDLE      WINAPI FindFirstChangeNotificationW(LPCWSTR,BOOL,DWORD);\n#define                       FindFirstChangeNotification WINELIB_NAME_AW(FindFirstChangeNotification)\nWINBASEAPI HANDLE      WINAPI FindFirstFileA(LPCSTR,LPWIN32_FIND_DATAA);\nWINBASEAPI HANDLE      WINAPI FindFirstFileW(LPCWSTR,LPWIN32_FIND_DATAW);\n#define                       FindFirstFile WINELIB_NAME_AW(FindFirstFile)\nWINBASEAPI HANDLE      WINAPI FindFirstFileExA(LPCSTR,FINDEX_INFO_LEVELS,LPVOID,FINDEX_SEARCH_OPS,LPVOID,DWORD);\nWINBASEAPI HANDLE      WINAPI FindFirstFileExW(LPCWSTR,FINDEX_INFO_LEVELS,LPVOID,FINDEX_SEARCH_OPS,LPVOID,DWORD);\n#define                       FindFirstFileEx WINELIB_NAME_AW(FindFirstFileEx)\nWINADVAPI  BOOL        WINAPI FindFirstFreeAce(PACL,LPVOID*);\nWINBASEAPI BOOL        WINAPI FindNextChangeNotification(HANDLE);\nWINBASEAPI BOOL        WINAPI FindNextFileA(HANDLE,LPWIN32_FIND_DATAA);\nWINBASEAPI BOOL        WINAPI FindNextFileW(HANDLE,LPWIN32_FIND_DATAW);\n#define                       FindNextFile WINELIB_NAME_AW(FindNextFile)\nWINBASEAPI BOOL        WINAPI FindCloseChangeNotification(HANDLE);\nWINBASEAPI HRSRC       WINAPI FindResourceA(HMODULE,LPCSTR,LPCSTR);\nWINBASEAPI HRSRC       WINAPI FindResourceW(HMODULE,LPCWSTR,LPCWSTR);\n#define                       FindResource WINELIB_NAME_AW(FindResource)\nWINBASEAPI HRSRC       WINAPI FindResourceExA(HMODULE,LPCSTR,LPCSTR,WORD);\nWINBASEAPI HRSRC       WINAPI FindResourceExW(HMODULE,LPCWSTR,LPCWSTR,WORD);\n#define                       FindResourceEx WINELIB_NAME_AW(FindResourceEx)\nWINBASEAPI HANDLE      WINAPI FindFirstVolumeA(LPSTR,DWORD);\nWINBASEAPI HANDLE      WINAPI FindFirstVolumeW(LPWSTR,DWORD);\n#define                       FindFirstVolume WINELIB_NAME_AW(FindFirstVolume)\nWINBASEAPI HANDLE      WINAPI FindFirstVolumeMountPointA(LPCSTR,LPSTR,DWORD);\nWINBASEAPI HANDLE      WINAPI FindFirstVolumeMountPointW(LPCWSTR,LPWSTR,DWORD);\n#define                       FindFirstVolumeMountPoint WINELIB_NAME_AW(FindFirstVolumeMountPoint)\nWINBASEAPI BOOL        WINAPI FindNextVolumeA(HANDLE,LPSTR,DWORD);\nWINBASEAPI BOOL        WINAPI FindNextVolumeW(HANDLE,LPWSTR,DWORD);\n#define                       FindNextVolume WINELIB_NAME_AW(FindNextVolume)\nWINBASEAPI BOOL        WINAPI FindNextVolumeMountPointA(HANDLE,LPSTR,DWORD);\nWINBASEAPI BOOL        WINAPI FindNextVolumeMountPointW(HANDLE,LPWSTR,DWORD);\n#define                       FindNextVolumeMountPoint WINELIB_NAME_AW(FindNextVolumeMountPoint)\nWINBASEAPI BOOL        WINAPI FindVolumeClose(HANDLE);\nWINBASEAPI BOOL        WINAPI FindVolumeMountPointClose(HANDLE);\nWINBASEAPI DWORD       WINAPI FlsAlloc(PFLS_CALLBACK_FUNCTION);\nWINBASEAPI BOOL        WINAPI FlsFree(DWORD);\nWINBASEAPI PVOID       WINAPI FlsGetValue(DWORD);\nWINBASEAPI BOOL        WINAPI FlsSetValue(DWORD,PVOID);\nWINBASEAPI BOOL        WINAPI FlushFileBuffers(HANDLE);\nWINBASEAPI BOOL        WINAPI FlushInstructionCache(HANDLE,LPCVOID,SIZE_T);\nWINBASEAPI VOID        WINAPI FlushProcessWriteBuffers(void);\nWINBASEAPI BOOL        WINAPI FlushViewOfFile(LPCVOID,SIZE_T);\nWINBASEAPI DWORD       WINAPI FormatMessageA(DWORD,LPCVOID,DWORD,DWORD,LPSTR,DWORD,__ms_va_list*);\nWINBASEAPI DWORD       WINAPI FormatMessageW(DWORD,LPCVOID,DWORD,DWORD,LPWSTR,DWORD,__ms_va_list*);\n#define                       FormatMessage WINELIB_NAME_AW(FormatMessage)\nWINBASEAPI BOOL        WINAPI FreeEnvironmentStringsA(LPSTR);\nWINBASEAPI BOOL        WINAPI FreeEnvironmentStringsW(LPWSTR);\n#define                       FreeEnvironmentStrings WINELIB_NAME_AW(FreeEnvironmentStrings)\nWINBASEAPI BOOL        WINAPI FreeLibrary(HMODULE);\nWINBASEAPI VOID DECLSPEC_NORETURN WINAPI FreeLibraryAndExitThread(HINSTANCE,DWORD);\nWINBASEAPI VOID        WINAPI FreeLibraryWhenCallbackReturns(PTP_CALLBACK_INSTANCE,HMODULE);\n#define                       FreeModule(handle) FreeLibrary(handle)\n#define                       FreeProcInstance(proc) /*nothing*/\nWINBASEAPI BOOL        WINAPI FreeResource(HGLOBAL);\nWINADVAPI  PVOID       WINAPI FreeSid(PSID);\nWINADVAPI  BOOL        WINAPI GetAce(PACL,DWORD,LPVOID*);\nWINADVAPI  BOOL        WINAPI GetAclInformation(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS);\nWINBASEAPI HRESULT     WINAPI GetApplicationRestartSettings(HANDLE,WCHAR*,DWORD*,DWORD*);\nWINBASEAPI UINT        WINAPI GetAtomNameA(ATOM,LPSTR,INT);\nWINBASEAPI UINT        WINAPI GetAtomNameW(ATOM,LPWSTR,INT);\n#define                       GetAtomName WINELIB_NAME_AW(GetAtomName)\nWINBASEAPI BOOL        WINAPI GetBinaryTypeA( LPCSTR lpApplicationName, LPDWORD lpBinaryType );\nWINBASEAPI BOOL        WINAPI GetBinaryTypeW( LPCWSTR lpApplicationName, LPDWORD lpBinaryType );\n#define                       GetBinaryType WINELIB_NAME_AW(GetBinaryType)\nWINBASEAPI BOOL        WINAPI GetCurrentActCtx(HANDLE *);\nWINBASEAPI BOOL        WINAPI GetCommConfig(HANDLE,LPCOMMCONFIG,LPDWORD);\nWINBASEAPI BOOL        WINAPI GetCommMask(HANDLE,LPDWORD);\nWINBASEAPI BOOL        WINAPI GetCommModemStatus(HANDLE,LPDWORD);\nWINBASEAPI BOOL        WINAPI GetCommProperties(HANDLE,LPCOMMPROP);\nWINBASEAPI BOOL        WINAPI GetCommState(HANDLE,LPDCB);\nWINBASEAPI BOOL        WINAPI GetCommTimeouts(HANDLE,LPCOMMTIMEOUTS);\nWINBASEAPI LPSTR       WINAPI GetCommandLineA(void);\nWINBASEAPI LPWSTR      WINAPI GetCommandLineW(void);\n#define                       GetCommandLine WINELIB_NAME_AW(GetCommandLine)\nWINBASEAPI DWORD       WINAPI GetCompressedFileSizeA(LPCSTR,LPDWORD);\nWINBASEAPI DWORD       WINAPI GetCompressedFileSizeW(LPCWSTR,LPDWORD);\n#define                       GetCompressedFileSize WINELIB_NAME_AW(GetCompressedFileSize)\nWINBASEAPI BOOL        WINAPI GetComputerNameA(LPSTR,LPDWORD);\nWINBASEAPI BOOL        WINAPI GetComputerNameW(LPWSTR,LPDWORD);\n#define                       GetComputerName WINELIB_NAME_AW(GetComputerName)\nWINBASEAPI BOOL        WINAPI GetComputerNameExA(COMPUTER_NAME_FORMAT,LPSTR,LPDWORD);\nWINBASEAPI BOOL        WINAPI GetComputerNameExW(COMPUTER_NAME_FORMAT,LPWSTR,LPDWORD);\n#define                       GetComputerNameEx WINELIB_NAME_AW(GetComputerNameEx)\nWINBASEAPI UINT        WINAPI GetCurrentDirectoryA(UINT,LPSTR);\nWINBASEAPI UINT        WINAPI GetCurrentDirectoryW(UINT,LPWSTR);\n#define                       GetCurrentDirectory WINELIB_NAME_AW(GetCurrentDirectory)\nWINADVAPI  BOOL        WINAPI GetCurrentHwProfileA(LPHW_PROFILE_INFOA);\nWINADVAPI  BOOL        WINAPI GetCurrentHwProfileW(LPHW_PROFILE_INFOW);\n#define                       GetCurrentHwProfile WINELIB_NAME_AW(GetCurrentHwProfile)\nWINBASEAPI HANDLE      WINAPI GetCurrentProcess(void);\nWINBASEAPI DWORD       WINAPI GetCurrentProcessorNumber(void);\nWINBASEAPI VOID        WINAPI GetCurrentProcessorNumberEx(PPROCESSOR_NUMBER);\nWINBASEAPI HANDLE      WINAPI GetCurrentThread(void);\n#define                       GetCurrentTime() GetTickCount()\nWINBASEAPI PUMS_CONTEXT WINAPI GetCurrentUmsThread(void);\nWINBASEAPI BOOL        WINAPI GetDefaultCommConfigA(LPCSTR,LPCOMMCONFIG,LPDWORD);\nWINBASEAPI BOOL        WINAPI GetDefaultCommConfigW(LPCWSTR,LPCOMMCONFIG,LPDWORD);\n#define                       GetDefaultCommConfig WINELIB_NAME_AW(GetDefaultCommConfig)\nWINBASEAPI BOOL        WINAPI GetDevicePowerState(HANDLE,BOOL*);\nWINBASEAPI BOOL        WINAPI GetDiskFreeSpaceA(LPCSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD);\nWINBASEAPI BOOL        WINAPI GetDiskFreeSpaceW(LPCWSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD);\n#define                       GetDiskFreeSpace WINELIB_NAME_AW(GetDiskFreeSpace)\nWINBASEAPI BOOL        WINAPI GetDiskFreeSpaceExA(LPCSTR,PULARGE_INTEGER,PULARGE_INTEGER,PULARGE_INTEGER);\nWINBASEAPI BOOL        WINAPI GetDiskFreeSpaceExW(LPCWSTR,PULARGE_INTEGER,PULARGE_INTEGER,PULARGE_INTEGER);\n#define                       GetDiskFreeSpaceEx WINELIB_NAME_AW(GetDiskFreeSpaceEx)\nWINBASEAPI DWORD       WINAPI GetDllDirectoryA(DWORD,LPSTR);\nWINBASEAPI DWORD       WINAPI GetDllDirectoryW(DWORD,LPWSTR);\n#define                       GetDllDirectory WINELIB_NAME_AW(GetDllDirectory)\nWINBASEAPI UINT        WINAPI GetDriveTypeA(LPCSTR);\nWINBASEAPI UINT        WINAPI GetDriveTypeW(LPCWSTR);\n#define                       GetDriveType WINELIB_NAME_AW(GetDriveType)\nWINBASEAPI DWORD       WINAPI GetDynamicTimeZoneInformation(PDYNAMIC_TIME_ZONE_INFORMATION);\nWINBASEAPI LPSTR       WINAPI GetEnvironmentStringsA(void);\nWINBASEAPI LPWSTR      WINAPI GetEnvironmentStringsW(void);\n#define                       GetEnvironmentStrings WINELIB_NAME_AW(GetEnvironmentStrings)\nWINBASEAPI DWORD       WINAPI GetEnvironmentVariableA(LPCSTR,LPSTR,DWORD);\nWINBASEAPI DWORD       WINAPI GetEnvironmentVariableW(LPCWSTR,LPWSTR,DWORD);\n#define                       GetEnvironmentVariable WINELIB_NAME_AW(GetEnvironmentVariable)\nWINBASEAPI UINT        WINAPI GetErrorMode(void);\nWINADVAPI  BOOL        WINAPI GetEventLogInformation(HANDLE,DWORD,LPVOID,DWORD,LPDWORD);\nWINBASEAPI BOOL        WINAPI GetExitCodeProcess(HANDLE,LPDWORD);\nWINBASEAPI BOOL        WINAPI GetExitCodeThread(HANDLE,LPDWORD);\nWINBASEAPI DWORD       WINAPI GetFileAttributesA(LPCSTR);\nWINBASEAPI DWORD       WINAPI GetFileAttributesW(LPCWSTR);\n#define                       GetFileAttributes WINELIB_NAME_AW(GetFileAttributes)\nWINBASEAPI BOOL        WINAPI GetFileAttributesExA(LPCSTR,GET_FILEEX_INFO_LEVELS,LPVOID);\nWINBASEAPI BOOL        WINAPI GetFileAttributesExW(LPCWSTR,GET_FILEEX_INFO_LEVELS,LPVOID);\n#define                       GetFileAttributesEx WINELIB_NAME_AW(GetFileAttributesEx)\nWINBASEAPI BOOL        WINAPI GetFileInformationByHandle(HANDLE,BY_HANDLE_FILE_INFORMATION*);\nWINBASEAPI BOOL        WINAPI GetFileInformationByHandleEx(HANDLE,FILE_INFO_BY_HANDLE_CLASS,LPVOID,DWORD);\nWINADVAPI  BOOL        WINAPI GetFileSecurityA(LPCSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD);\nWINADVAPI  BOOL        WINAPI GetFileSecurityW(LPCWSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD);\n#define                       GetFileSecurity WINELIB_NAME_AW(GetFileSecurity)\nWINBASEAPI DWORD       WINAPI GetFileSize(HANDLE,LPDWORD);\nWINBASEAPI BOOL        WINAPI GetFileSizeEx(HANDLE,PLARGE_INTEGER);\nWINBASEAPI BOOL        WINAPI GetFileTime(HANDLE,LPFILETIME,LPFILETIME,LPFILETIME);\nWINBASEAPI DWORD       WINAPI GetFileType(HANDLE);\n#define                       GetFreeSpace(w) (__MSABI_LONG(0x100000))\nWINBASEAPI DWORD       WINAPI GetFullPathNameA(LPCSTR,DWORD,LPSTR,LPSTR*);\nWINBASEAPI DWORD       WINAPI GetFullPathNameW(LPCWSTR,DWORD,LPWSTR,LPWSTR*);\n#define                       GetFullPathName WINELIB_NAME_AW(GetFullPathName)\nWINBASEAPI BOOL        WINAPI GetHandleInformation(HANDLE,LPDWORD);\nWINADVAPI  BOOL        WINAPI GetKernelObjectSecurity(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD);\nWINADVAPI  DWORD       WINAPI GetLengthSid(PSID);\nWINBASEAPI VOID        WINAPI GetLocalTime(LPSYSTEMTIME);\nWINBASEAPI DWORD       WINAPI GetLogicalDrives(void);\nWINBASEAPI UINT        WINAPI GetLogicalDriveStringsA(UINT,LPSTR);\nWINBASEAPI UINT        WINAPI GetLogicalDriveStringsW(UINT,LPWSTR);\n#define                       GetLogicalDriveStrings WINELIB_NAME_AW(GetLogicalDriveStrings)\nWINBASEAPI DWORD       WINAPI GetLongPathNameA(LPCSTR,LPSTR,DWORD);\nWINBASEAPI DWORD       WINAPI GetLongPathNameW(LPCWSTR,LPWSTR,DWORD);\n#define                       GetLongPathName WINELIB_NAME_AW(GetLongPathName)\nWINBASEAPI BOOL        WINAPI GetMailslotInfo(HANDLE,LPDWORD,LPDWORD,LPDWORD,LPDWORD);\nWINBASEAPI DWORD       WINAPI GetModuleFileNameA(HMODULE,LPSTR,DWORD);\nWINBASEAPI DWORD       WINAPI GetModuleFileNameW(HMODULE,LPWSTR,DWORD);\n#define                       GetModuleFileName WINELIB_NAME_AW(GetModuleFileName)\nWINBASEAPI HMODULE     WINAPI GetModuleHandleA(LPCSTR);\nWINBASEAPI HMODULE     WINAPI GetModuleHandleW(LPCWSTR);\n#define                       GetModuleHandle WINELIB_NAME_AW(GetModuleHandle)\nWINBASEAPI BOOL        WINAPI GetModuleHandleExA(DWORD,LPCSTR,HMODULE*);\nWINBASEAPI BOOL        WINAPI GetModuleHandleExW(DWORD,LPCWSTR,HMODULE*);\n#define                       GetModuleHandleEx WINELIB_NAME_AW(GetModuleHandleEx)\nWINBASEAPI BOOL        WINAPI GetNamedPipeClientProcessId(HANDLE,PULONG);\nWINBASEAPI BOOL        WINAPI GetNamedPipeClientSessionId(HANDLE,PULONG);\nWINBASEAPI BOOL        WINAPI GetNamedPipeHandleStateA(HANDLE,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPSTR,DWORD);\nWINBASEAPI BOOL        WINAPI GetNamedPipeHandleStateW(HANDLE,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPWSTR,DWORD);\n#define                       GetNamedPipeHandleState WINELIB_NAME_AW(GetNamedPipeHandleState)\nWINBASEAPI BOOL        WINAPI GetNamedPipeInfo(HANDLE,LPDWORD,LPDWORD,LPDWORD,LPDWORD);\nWINBASEAPI BOOL        WINAPI GetNamedPipeServerProcessId(HANDLE,PULONG);\nWINBASEAPI BOOL        WINAPI GetNamedPipeServerSessionId(HANDLE,PULONG);\nWINBASEAPI VOID        WINAPI GetNativeSystemInfo(LPSYSTEM_INFO);\nWINBASEAPI PUMS_CONTEXT WINAPI GetNextUmsListItem(PUMS_CONTEXT);\nWINBASEAPI BOOL        WINAPI GetNumaProcessorNode(UCHAR,PUCHAR);\nWINADVAPI  BOOL        WINAPI GetNumberOfEventLogRecords(HANDLE,PDWORD);\nWINADVAPI  BOOL        WINAPI GetOldestEventLogRecord(HANDLE,PDWORD);\nWINBASEAPI BOOL        WINAPI GetOverlappedResult(HANDLE,LPOVERLAPPED,LPDWORD,BOOL);\nWINBASEAPI DWORD       WINAPI GetPriorityClass(HANDLE);\nWINADVAPI  BOOL        WINAPI GetPrivateObjectSecurity(PSECURITY_DESCRIPTOR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,PDWORD);\nWINBASEAPI UINT        WINAPI GetPrivateProfileIntA(LPCSTR,LPCSTR,INT,LPCSTR);\nWINBASEAPI UINT        WINAPI GetPrivateProfileIntW(LPCWSTR,LPCWSTR,INT,LPCWSTR);\n#define                       GetPrivateProfileInt WINELIB_NAME_AW(GetPrivateProfileInt)\nWINBASEAPI INT         WINAPI GetPrivateProfileSectionA(LPCSTR,LPSTR,DWORD,LPCSTR);\nWINBASEAPI INT         WINAPI GetPrivateProfileSectionW(LPCWSTR,LPWSTR,DWORD,LPCWSTR);\n#define                       GetPrivateProfileSection WINELIB_NAME_AW(GetPrivateProfileSection)\nWINBASEAPI DWORD       WINAPI GetPrivateProfileSectionNamesA(LPSTR,DWORD,LPCSTR);\nWINBASEAPI DWORD       WINAPI GetPrivateProfileSectionNamesW(LPWSTR,DWORD,LPCWSTR);\n#define                       GetPrivateProfileSectionNames WINELIB_NAME_AW(GetPrivateProfileSectionNames)\nWINBASEAPI INT         WINAPI GetPrivateProfileStringA(LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT,LPCSTR);\nWINBASEAPI INT         WINAPI GetPrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,UINT,LPCWSTR);\n#define                       GetPrivateProfileString WINELIB_NAME_AW(GetPrivateProfileString)\nWINBASEAPI BOOL        WINAPI GetPrivateProfileStructA(LPCSTR,LPCSTR,LPVOID,UINT,LPCSTR);\nWINBASEAPI BOOL        WINAPI GetPrivateProfileStructW(LPCWSTR,LPCWSTR,LPVOID,UINT,LPCWSTR);\n#define                       GetPrivateProfileStruct WINELIB_NAME_AW(GetPrivateProfileStruct)\nWINBASEAPI FARPROC     WINAPI GetProcAddress(HMODULE,LPCSTR);\nWINBASEAPI BOOL        WINAPI GetProcessAffinityMask(HANDLE,PDWORD_PTR,PDWORD_PTR);\nWINBASEAPI BOOL        WINAPI GetLogicalProcessorInformation(PSYSTEM_LOGICAL_PROCESSOR_INFORMATION,PDWORD);\nWINBASEAPI BOOL        WINAPI GetLogicalProcessorInformationEx(LOGICAL_PROCESSOR_RELATIONSHIP,PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX,PDWORD);\nWINBASEAPI DWORD       WINAPI GetProcessHeaps(DWORD,PHANDLE);\nWINBASEAPI DWORD       WINAPI GetProcessId(HANDLE);\nWINBASEAPI DWORD       WINAPI GetProcessIdOfThread(HANDLE);\nWINBASEAPI BOOL        WINAPI GetProcessIoCounters(HANDLE,PIO_COUNTERS);\nWINBASEAPI BOOL        WINAPI GetProcessPriorityBoost(HANDLE,PBOOL);\nWINBASEAPI BOOL        WINAPI GetProcessShutdownParameters(LPDWORD,LPDWORD);\nWINBASEAPI BOOL        WINAPI GetProcessTimes(HANDLE,LPFILETIME,LPFILETIME,LPFILETIME,LPFILETIME);\nWINBASEAPI DWORD       WINAPI GetProcessVersion(DWORD);\nWINBASEAPI BOOL        WINAPI GetProcessWorkingSetSize(HANDLE,PSIZE_T,PSIZE_T);\nWINBASEAPI BOOL        WINAPI GetProductInfo(DWORD,DWORD,DWORD,DWORD,PDWORD);\nWINBASEAPI UINT        WINAPI GetProfileIntA(LPCSTR,LPCSTR,INT);\nWINBASEAPI UINT        WINAPI GetProfileIntW(LPCWSTR,LPCWSTR,INT);\n#define                       GetProfileInt WINELIB_NAME_AW(GetProfileInt)\nWINBASEAPI INT         WINAPI GetProfileSectionA(LPCSTR,LPSTR,DWORD);\nWINBASEAPI INT         WINAPI GetProfileSectionW(LPCWSTR,LPWSTR,DWORD);\n#define                       GetProfileSection WINELIB_NAME_AW(GetProfileSection)\nWINBASEAPI INT         WINAPI GetProfileStringA(LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT);\nWINBASEAPI INT         WINAPI GetProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,UINT);\n#define                       GetProfileString WINELIB_NAME_AW(GetProfileString)\nWINBASEAPI BOOL        WINAPI GetQueuedCompletionStatus(HANDLE,LPDWORD,PULONG_PTR,LPOVERLAPPED*,DWORD);\nWINADVAPI  BOOL        WINAPI GetSecurityDescriptorControl(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR_CONTROL,LPDWORD);\nWINADVAPI  BOOL        WINAPI GetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR,LPBOOL,PACL *,LPBOOL);\nWINADVAPI  BOOL        WINAPI GetSecurityDescriptorGroup(PSECURITY_DESCRIPTOR,PSID *,LPBOOL);\nWINADVAPI  DWORD       WINAPI GetSecurityDescriptorLength(PSECURITY_DESCRIPTOR);\nWINADVAPI  BOOL        WINAPI GetSecurityDescriptorOwner(PSECURITY_DESCRIPTOR,PSID *,LPBOOL);\nWINADVAPI  BOOL        WINAPI GetSecurityDescriptorSacl(PSECURITY_DESCRIPTOR,LPBOOL,PACL *,LPBOOL);\nWINADVAPI  PSID_IDENTIFIER_AUTHORITY WINAPI GetSidIdentifierAuthority(PSID);\nWINADVAPI  DWORD       WINAPI GetSidLengthRequired(BYTE);\nWINADVAPI  PDWORD      WINAPI GetSidSubAuthority(PSID,DWORD);\nWINADVAPI  PUCHAR      WINAPI GetSidSubAuthorityCount(PSID);\nWINBASEAPI DWORD       WINAPI GetShortPathNameA(LPCSTR,LPSTR,DWORD);\nWINBASEAPI DWORD       WINAPI GetShortPathNameW(LPCWSTR,LPWSTR,DWORD);\n#define                       GetShortPathName WINELIB_NAME_AW(GetShortPathName)\nWINBASEAPI VOID        WINAPI GetStartupInfoA(LPSTARTUPINFOA);\nWINBASEAPI VOID        WINAPI GetStartupInfoW(LPSTARTUPINFOW);\n#define                       GetStartupInfo WINELIB_NAME_AW(GetStartupInfo)\nWINBASEAPI HANDLE      WINAPI GetStdHandle(DWORD);\nWINBASEAPI UINT        WINAPI GetSystemDirectoryA(LPSTR,UINT);\nWINBASEAPI UINT        WINAPI GetSystemDirectoryW(LPWSTR,UINT);\n#define                       GetSystemDirectory WINELIB_NAME_AW(GetSystemDirectory)\nWINBASEAPI UINT        WINAPI GetSystemFirmwareTable(DWORD,DWORD,PVOID,DWORD);\nWINBASEAPI VOID        WINAPI GetSystemInfo(LPSYSTEM_INFO);\nWINBASEAPI BOOL        WINAPI GetSystemPowerStatus(LPSYSTEM_POWER_STATUS);\nWINBASEAPI BOOL        WINAPI GetSystemRegistryQuota(PDWORD,PDWORD);\nWINBASEAPI VOID        WINAPI GetSystemTime(LPSYSTEMTIME);\nWINBASEAPI BOOL        WINAPI GetSystemTimeAdjustment(PDWORD,PDWORD,PBOOL);\nWINBASEAPI VOID        WINAPI GetSystemTimeAsFileTime(LPFILETIME);\nWINBASEAPI VOID        WINAPI GetSystemTimePreciseAsFileTime(LPFILETIME);\nWINBASEAPI UINT        WINAPI GetSystemWindowsDirectoryA(LPSTR,UINT);\nWINBASEAPI UINT        WINAPI GetSystemWindowsDirectoryW(LPWSTR,UINT);\n#define                       GetSystemWindowsDirectory WINELIB_NAME_AW(GetSystemWindowsDirectory)\nWINBASEAPI UINT        WINAPI GetSystemWow64DirectoryA(LPSTR,UINT);\nWINBASEAPI UINT        WINAPI GetSystemWow64DirectoryW(LPWSTR,UINT);\n#define                       GetSystemWow64Directory WINELIB_NAME_AW(GetSystemWow64Directory)\nWINBASEAPI DWORD       WINAPI GetTapeParameters(HANDLE,DWORD,LPDWORD,LPVOID);\nWINBASEAPI DWORD       WINAPI GetTapePosition(HANDLE,DWORD,LPDWORD,LPDWORD,LPDWORD);\nWINBASEAPI DWORD       WINAPI GetTapeStatus(HANDLE);\nWINBASEAPI UINT        WINAPI GetTempFileNameA(LPCSTR,LPCSTR,UINT,LPSTR);\nWINBASEAPI UINT        WINAPI GetTempFileNameW(LPCWSTR,LPCWSTR,UINT,LPWSTR);\n#define                       GetTempFileName WINELIB_NAME_AW(GetTempFileName)\nWINBASEAPI DWORD       WINAPI GetTempPathA(DWORD,LPSTR);\nWINBASEAPI DWORD       WINAPI GetTempPathW(DWORD,LPWSTR);\n#define                       GetTempPath WINELIB_NAME_AW(GetTempPath)\nWINBASEAPI DWORD       WINAPI GetThreadId(HANDLE);\nWINBASEAPI BOOL        WINAPI GetThreadIOPendingFlag(HANDLE,PBOOL);\nWINBASEAPI DWORD       WINAPI GetTickCount(void);\nWINBASEAPI ULONGLONG   WINAPI GetTickCount64(void);\nWINBASEAPI DWORD       WINAPI GetTimeZoneInformation(LPTIME_ZONE_INFORMATION);\nWINBASEAPI BOOL        WINAPI GetThreadContext(HANDLE,CONTEXT *);\nWINBASEAPI DWORD       WINAPI GetThreadErrorMode(void);\nWINBASEAPI INT         WINAPI GetThreadPriority(HANDLE);\nWINBASEAPI BOOL        WINAPI GetThreadPriorityBoost(HANDLE,PBOOL);\nWINBASEAPI BOOL        WINAPI GetThreadSelectorEntry(HANDLE,DWORD,LPLDT_ENTRY);\nWINBASEAPI BOOL        WINAPI GetThreadTimes(HANDLE,LPFILETIME,LPFILETIME,LPFILETIME,LPFILETIME);\nWINADVAPI  BOOL        WINAPI GetTokenInformation(HANDLE,TOKEN_INFORMATION_CLASS,LPVOID,DWORD,LPDWORD);\nWINBASEAPI BOOL        WINAPI GetUmsCompletionListEvent(PUMS_COMPLETION_LIST, PHANDLE);\nWINADVAPI  BOOL        WINAPI GetUserNameA(LPSTR,LPDWORD);\nWINADVAPI  BOOL        WINAPI GetUserNameW(LPWSTR,LPDWORD);\n#define                       GetUserName WINELIB_NAME_AW(GetUserName)\nWINBASEAPI DWORD       WINAPI GetVersion(void);\nWINBASEAPI BOOL        WINAPI GetVersionExA(OSVERSIONINFOA*);\nWINBASEAPI BOOL        WINAPI GetVersionExW(OSVERSIONINFOW*);\n#define                       GetVersionEx WINELIB_NAME_AW(GetVersionEx)\nWINBASEAPI BOOL        WINAPI GetVolumeInformationA(LPCSTR,LPSTR,DWORD,LPDWORD,LPDWORD,LPDWORD,LPSTR,DWORD);\nWINBASEAPI BOOL        WINAPI GetVolumeInformationW(LPCWSTR,LPWSTR,DWORD,LPDWORD,LPDWORD,LPDWORD,LPWSTR,DWORD);\n#define                       GetVolumeInformation WINELIB_NAME_AW(GetVolumeInformation)\nWINBASEAPI BOOL        WINAPI GetVolumeInformationByHandleW(HANDLE,WCHAR *,DWORD,DWORD *,DWORD *,DWORD *,WCHAR *,DWORD);\nWINBASEAPI BOOL        WINAPI GetVolumeNameForVolumeMountPointA(LPCSTR,LPSTR,DWORD);\nWINBASEAPI BOOL        WINAPI GetVolumeNameForVolumeMountPointW(LPCWSTR,LPWSTR,DWORD);\n#define                       GetVolumeNameForVolumeMountPoint WINELIB_NAME_AW(GetVolumeNameForVolumeMountPoint)\nWINBASEAPI BOOL        WINAPI GetVolumePathNameA(LPCSTR,LPSTR,DWORD);\nWINBASEAPI BOOL        WINAPI GetVolumePathNameW(LPCWSTR,LPWSTR,DWORD);\n#define                       GetVolumePathName WINELIB_NAME_AW(GetVolumePathName)\nWINBASEAPI BOOL        WINAPI GetVolumePathNamesForVolumeNameA(LPCSTR,LPSTR,DWORD,PDWORD);\nWINBASEAPI BOOL        WINAPI GetVolumePathNamesForVolumeNameW(LPCWSTR,LPWSTR,DWORD,PDWORD);\n#define                       GetVolumePathNamesForVolumeName WINELIB_NAME_AW(GetVolumePathNamesForVolumeName)\nWINADVAPI  BOOL        WINAPI GetWindowsAccountDomainSid(PSID,PSID,DWORD*);\nWINBASEAPI UINT        WINAPI GetWindowsDirectoryA(LPSTR,UINT);\nWINBASEAPI UINT        WINAPI GetWindowsDirectoryW(LPWSTR,UINT);\n#define                       GetWindowsDirectory WINELIB_NAME_AW(GetWindowsDirectory)\nWINBASEAPI UINT        WINAPI GetWriteWatch(DWORD,LPVOID,SIZE_T,LPVOID*,ULONG_PTR*,ULONG*);\nWINBASEAPI ATOM        WINAPI GlobalAddAtomA(LPCSTR);\nWINBASEAPI ATOM        WINAPI GlobalAddAtomW(LPCWSTR);\n#define                       GlobalAddAtom WINELIB_NAME_AW(GlobalAddAtom)\nWINBASEAPI HGLOBAL     WINAPI GlobalAlloc(UINT,SIZE_T) __WINE_ALLOC_SIZE(2);\nWINBASEAPI SIZE_T      WINAPI GlobalCompact(DWORD);\nWINBASEAPI ATOM        WINAPI GlobalDeleteAtom(ATOM);\nWINBASEAPI ATOM        WINAPI GlobalFindAtomA(LPCSTR);\nWINBASEAPI ATOM        WINAPI GlobalFindAtomW(LPCWSTR);\n#define                       GlobalFindAtom WINELIB_NAME_AW(GlobalFindAtom)\nWINBASEAPI VOID        WINAPI GlobalFix(HGLOBAL);\nWINBASEAPI UINT        WINAPI GlobalFlags(HGLOBAL);\nWINBASEAPI HGLOBAL     WINAPI GlobalFree(HGLOBAL);\nWINBASEAPI UINT        WINAPI GlobalGetAtomNameA(ATOM,LPSTR,INT);\nWINBASEAPI UINT        WINAPI GlobalGetAtomNameW(ATOM,LPWSTR,INT);\n#define                       GlobalGetAtomName WINELIB_NAME_AW(GlobalGetAtomName)\nWINBASEAPI HGLOBAL     WINAPI GlobalHandle(LPCVOID);\nWINBASEAPI LPVOID      WINAPI GlobalLock(HGLOBAL);\nWINBASEAPI VOID        WINAPI GlobalMemoryStatus(LPMEMORYSTATUS);\nWINBASEAPI BOOL        WINAPI GlobalMemoryStatusEx(LPMEMORYSTATUSEX);\nWINBASEAPI HGLOBAL     WINAPI GlobalReAlloc(HGLOBAL,SIZE_T,UINT) __WINE_ALLOC_SIZE(2);\nWINBASEAPI SIZE_T      WINAPI GlobalSize(HGLOBAL);\nWINBASEAPI VOID        WINAPI GlobalUnfix(HGLOBAL);\nWINBASEAPI BOOL        WINAPI GlobalUnlock(HGLOBAL);\nWINBASEAPI BOOL        WINAPI GlobalUnWire(HGLOBAL);\nWINBASEAPI LPVOID      WINAPI GlobalWire(HGLOBAL);\n#define                       HasOverlappedIoCompleted(lpOverlapped) ((lpOverlapped)->Internal != STATUS_PENDING)\nWINBASEAPI LPVOID      WINAPI HeapAlloc(HANDLE,DWORD,SIZE_T) __WINE_ALLOC_SIZE(3);\nWINBASEAPI SIZE_T      WINAPI HeapCompact(HANDLE,DWORD);\nWINBASEAPI HANDLE      WINAPI HeapCreate(DWORD,SIZE_T,SIZE_T);\nWINBASEAPI BOOL        WINAPI HeapDestroy(HANDLE);\nWINBASEAPI BOOL        WINAPI HeapFree(HANDLE,DWORD,LPVOID);\nWINBASEAPI BOOL        WINAPI HeapLock(HANDLE);\nWINBASEAPI LPVOID      WINAPI HeapReAlloc(HANDLE,DWORD,LPVOID,SIZE_T) __WINE_ALLOC_SIZE(4);\nWINBASEAPI BOOL        WINAPI HeapQueryInformation(HANDLE,HEAP_INFORMATION_CLASS,PVOID,SIZE_T,PSIZE_T);\nWINBASEAPI BOOL        WINAPI HeapSetInformation(HANDLE,HEAP_INFORMATION_CLASS,PVOID,SIZE_T);\nWINBASEAPI SIZE_T      WINAPI HeapSize(HANDLE,DWORD,LPCVOID);\nWINBASEAPI BOOL        WINAPI HeapUnlock(HANDLE);\nWINBASEAPI BOOL        WINAPI HeapValidate(HANDLE,DWORD,LPCVOID);\nWINBASEAPI BOOL        WINAPI HeapWalk(HANDLE,LPPROCESS_HEAP_ENTRY);\nWINBASEAPI BOOL        WINAPI InitAtomTable(DWORD);\nWINADVAPI  BOOL        WINAPI InitializeAcl(PACL,DWORD,DWORD);\nWINBASEAPI VOID        WINAPI InitializeConditionVariable(PCONDITION_VARIABLE);\nWINBASEAPI void        WINAPI InitializeCriticalSection(CRITICAL_SECTION *lpCrit);\nWINBASEAPI BOOL        WINAPI InitializeCriticalSectionAndSpinCount(CRITICAL_SECTION *,DWORD);\nWINBASEAPI BOOL        WINAPI InitializeCriticalSectionEx(CRITICAL_SECTION *,DWORD,DWORD);\nWINBASEAPI BOOL        WINAPI InitializeProcThreadAttributeList(struct _PROC_THREAD_ATTRIBUTE_LIST*,DWORD,DWORD,SIZE_T*);\nWINADVAPI  BOOL        WINAPI InitializeSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);\nWINADVAPI  BOOL        WINAPI InitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);\nWINBASEAPI VOID        WINAPI InitializeSListHead(PSLIST_HEADER);\nWINBASEAPI VOID        WINAPI InitializeSRWLock(PSRWLOCK);\nWINBASEAPI BOOL        WINAPI InitOnceBeginInitialize(PINIT_ONCE, DWORD, PBOOL, PVOID*);\nWINBASEAPI BOOL        WINAPI InitOnceComplete(PINIT_ONCE, DWORD, PVOID);\nWINBASEAPI BOOL        WINAPI InitOnceExecuteOnce(PINIT_ONCE,PINIT_ONCE_FN,PVOID,PVOID*);\nWINBASEAPI VOID        WINAPI InitOnceInitialize(PINIT_ONCE);\nWINBASEAPI PSLIST_ENTRY WINAPI InterlockedFlushSList(PSLIST_HEADER);\nWINBASEAPI PSLIST_ENTRY WINAPI InterlockedPopEntrySList(PSLIST_HEADER);\nWINBASEAPI PSLIST_ENTRY WINAPI InterlockedPushEntrySList(PSLIST_HEADER, PSLIST_ENTRY);\nWINBASEAPI BOOL        WINAPI IsBadCodePtr(FARPROC);\nWINBASEAPI BOOL        WINAPI IsBadHugeReadPtr(LPCVOID,UINT_PTR);\nWINBASEAPI BOOL        WINAPI IsBadHugeWritePtr(LPVOID,UINT_PTR);\nWINBASEAPI BOOL        WINAPI IsBadReadPtr(LPCVOID,UINT_PTR);\nWINBASEAPI BOOL        WINAPI IsBadStringPtrA(LPCSTR,UINT_PTR);\nWINBASEAPI BOOL        WINAPI IsBadStringPtrW(LPCWSTR,UINT_PTR);\n#define                       IsBadStringPtr WINELIB_NAME_AW(IsBadStringPtr)\nWINBASEAPI BOOL        WINAPI IsBadWritePtr(LPVOID,UINT_PTR);\nWINBASEAPI BOOL        WINAPI IsDebuggerPresent(void);\nWINBASEAPI BOOL        WINAPI IsSystemResumeAutomatic(void);\nWINADVAPI  BOOL        WINAPI IsTextUnicode(LPCVOID,INT,LPINT);\nWINBASEAPI BOOL        WINAPI IsThreadpoolTimerSet(PTP_TIMER);\nWINADVAPI  BOOL        WINAPI IsTokenRestricted(HANDLE);\nWINADVAPI  BOOL        WINAPI IsValidAcl(PACL);\nWINADVAPI  BOOL        WINAPI IsValidSecurityDescriptor(PSECURITY_DESCRIPTOR);\nWINADVAPI  BOOL        WINAPI IsValidSid(PSID);\nWINADVAPI  BOOL        WINAPI IsWellKnownSid(PSID,WELL_KNOWN_SID_TYPE);\nWINBASEAPI BOOL        WINAPI IsWow64Process(HANDLE,PBOOL);\nWINADVAPI  BOOL        WINAPI ImpersonateLoggedOnUser(HANDLE);\nWINADVAPI  BOOL        WINAPI ImpersonateNamedPipeClient(HANDLE);\nWINADVAPI  BOOL        WINAPI ImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);\nWINBASEAPI BOOL        WINAPI IsProcessInJob(HANDLE,HANDLE,PBOOL);\nWINBASEAPI BOOL        WINAPI IsProcessorFeaturePresent(DWORD);\nWINBASEAPI void        WINAPI LeaveCriticalSection(CRITICAL_SECTION *lpCrit);\nWINBASEAPI VOID        WINAPI LeaveCriticalSectionWhenCallbackReturns(PTP_CALLBACK_INSTANCE,CRITICAL_SECTION*);\nWINBASEAPI HMODULE     WINAPI LoadLibraryA(LPCSTR);\nWINBASEAPI HMODULE     WINAPI LoadLibraryW(LPCWSTR);\n#define                       LoadLibrary WINELIB_NAME_AW(LoadLibrary)\nWINBASEAPI HMODULE     WINAPI LoadLibraryExA(LPCSTR,HANDLE,DWORD);\nWINBASEAPI HMODULE     WINAPI LoadLibraryExW(LPCWSTR,HANDLE,DWORD);\n#define                       LoadLibraryEx WINELIB_NAME_AW(LoadLibraryEx)\nWINBASEAPI DWORD       WINAPI LoadModule(LPCSTR,LPVOID);\nWINBASEAPI HGLOBAL     WINAPI LoadResource(HMODULE,HRSRC);\nWINBASEAPI HLOCAL      WINAPI LocalAlloc(UINT,SIZE_T) __WINE_ALLOC_SIZE(2);\nWINBASEAPI SIZE_T      WINAPI LocalCompact(UINT);\nWINBASEAPI UINT        WINAPI LocalFlags(HLOCAL);\nWINBASEAPI HLOCAL      WINAPI LocalFree(HLOCAL);\nWINBASEAPI HLOCAL      WINAPI LocalHandle(LPCVOID);\nWINBASEAPI LPVOID      WINAPI LocalLock(HLOCAL);\nWINBASEAPI HLOCAL      WINAPI LocalReAlloc(HLOCAL,SIZE_T,UINT) __WINE_ALLOC_SIZE(2);\nWINBASEAPI SIZE_T      WINAPI LocalShrink(HGLOBAL,UINT);\nWINBASEAPI SIZE_T      WINAPI LocalSize(HLOCAL);\nWINBASEAPI BOOL        WINAPI LocalUnlock(HLOCAL);\nWINBASEAPI LPVOID      WINAPI LockResource(HGLOBAL);\n#define                       LockSegment(handle) GlobalFix((HANDLE)(handle))\nWINADVAPI  BOOL        WINAPI LookupAccountNameA(LPCSTR,LPCSTR,PSID,LPDWORD,LPSTR,LPDWORD,PSID_NAME_USE);\nWINADVAPI  BOOL        WINAPI LookupAccountNameW(LPCWSTR,LPCWSTR,PSID,LPDWORD,LPWSTR,LPDWORD,PSID_NAME_USE);\n#define                       LookupAccountName WINELIB_NAME_AW(LookupAccountName)\nWINADVAPI  BOOL        WINAPI LookupAccountSidA(LPCSTR,PSID,LPSTR,LPDWORD,LPSTR,LPDWORD,PSID_NAME_USE);\nWINADVAPI  BOOL        WINAPI LookupAccountSidW(LPCWSTR,PSID,LPWSTR,LPDWORD,LPWSTR,LPDWORD,PSID_NAME_USE);\n#define                       LookupAccountSid WINELIB_NAME_AW(LookupAccountSid)\nWINBASEAPI BOOL        WINAPI LocalFileTimeToFileTime(const FILETIME*,LPFILETIME);\nWINBASEAPI BOOL        WINAPI LockFile(HANDLE,DWORD,DWORD,DWORD,DWORD);\nWINBASEAPI BOOL        WINAPI LockFileEx(HANDLE, DWORD, DWORD, DWORD, DWORD, LPOVERLAPPED);\nWINADVAPI  BOOL        WINAPI LogonUserA(LPCSTR,LPCSTR,LPCSTR,DWORD,DWORD,PHANDLE);\nWINADVAPI  BOOL        WINAPI LogonUserW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,DWORD,PHANDLE);\n#define                       LogonUser WINELIB_NAME_AW(LogonUser)\nWINADVAPI  BOOL        WINAPI LookupPrivilegeDisplayNameA(LPCSTR,LPCSTR,LPSTR,LPDWORD,LPDWORD);\nWINADVAPI  BOOL        WINAPI LookupPrivilegeDisplayNameW(LPCWSTR,LPCWSTR,LPWSTR,LPDWORD,LPDWORD);\n#define                       LookupPrivilegeDisplayName WINELIB_NAME_AW(LookupPrivilegeDisplayName)\nWINADVAPI  BOOL        WINAPI LookupPrivilegeNameA(LPCSTR,PLUID,LPSTR,LPDWORD);\nWINADVAPI  BOOL        WINAPI LookupPrivilegeNameW(LPCWSTR,PLUID,LPWSTR,LPDWORD);\n#define                       LookupPrivilegeName WINELIB_NAME_AW(LookupPrivilegeName)\nWINADVAPI  BOOL        WINAPI LookupPrivilegeValueA(LPCSTR,LPCSTR,PLUID);\nWINADVAPI  BOOL        WINAPI LookupPrivilegeValueW(LPCWSTR,LPCWSTR,PLUID);\n#define                       LookupPrivilegeValue WINELIB_NAME_AW(LookupPrivilegeValue)\nWINADVAPI  BOOL        WINAPI MakeAbsoluteSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD,PACL,LPDWORD,PACL,LPDWORD,PSID,LPDWORD,PSID,LPDWORD);\nWINBASEAPI void        WINAPI MakeCriticalSectionGlobal(CRITICAL_SECTION *lpCrit);\n#define                       MakeProcInstance(proc,inst) (proc)\nWINADVAPI  BOOL        WINAPI MakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD);\nWINADVAPI  VOID        WINAPI MapGenericMask(PDWORD,PGENERIC_MAPPING);\nWINBASEAPI HMODULE     WINAPI MapHModuleSL(WORD);\nWINBASEAPI WORD        WINAPI MapHModuleLS(HMODULE);\nWINBASEAPI LPVOID      WINAPI MapViewOfFile(HANDLE,DWORD,DWORD,DWORD,SIZE_T);\nWINBASEAPI LPVOID      WINAPI MapViewOfFileEx(HANDLE,DWORD,DWORD,DWORD,SIZE_T,LPVOID);\nWINBASEAPI BOOL        WINAPI MoveFileA(LPCSTR,LPCSTR);\nWINBASEAPI BOOL        WINAPI MoveFileW(LPCWSTR,LPCWSTR);\n#define                       MoveFile WINELIB_NAME_AW(MoveFile)\nWINBASEAPI BOOL        WINAPI MoveFileExA(LPCSTR,LPCSTR,DWORD);\nWINBASEAPI BOOL        WINAPI MoveFileExW(LPCWSTR,LPCWSTR,DWORD);\n#define                       MoveFileEx WINELIB_NAME_AW(MoveFileEx)\nWINBASEAPI BOOL        WINAPI MoveFileWithProgressA(LPCSTR,LPCSTR,LPPROGRESS_ROUTINE,LPVOID,DWORD);\nWINBASEAPI BOOL        WINAPI MoveFileWithProgressW(LPCWSTR,LPCWSTR,LPPROGRESS_ROUTINE,LPVOID,DWORD);\n#define                       MoveFileWithProgress WINELIB_NAME_AW(MoveFileWithProgress)\nWINBASEAPI INT         WINAPI MulDiv(INT,INT,INT);\nWINBASEAPI BOOL        WINAPI NeedCurrentDirectoryForExePathA(LPCSTR);\nWINBASEAPI BOOL        WINAPI NeedCurrentDirectoryForExePathW(LPCWSTR);\n#define                       NeedCurrentDirectoryForExePath WINELIB_NAME_AW(NeedCurrentDirectoryForExePath)\nWINADVAPI  BOOL        WINAPI NotifyChangeEventLog(HANDLE,HANDLE);\nWINADVAPI  BOOL        WINAPI ObjectCloseAuditAlarmA(LPCSTR,LPVOID,BOOL);\nWINADVAPI  BOOL        WINAPI ObjectCloseAuditAlarmW(LPCWSTR,LPVOID,BOOL);\n#define                       ObjectCloseAuditAlarm WINELIB_NAME_AW(ObjectCloseAuditAlarm)\nWINADVAPI  BOOL        WINAPI ObjectDeleteAuditAlarmA(LPCSTR,LPVOID,BOOL);\nWINADVAPI  BOOL        WINAPI ObjectDeleteAuditAlarmW(LPCWSTR,LPVOID,BOOL);\n#define                       ObjectDeleteAuditAlarm WINELIB_NAME_AW(ObjectDeleteAuditAlarm)\nWINADVAPI  BOOL        WINAPI ObjectOpenAuditAlarmA(LPCSTR,LPVOID,LPSTR,LPSTR,PSECURITY_DESCRIPTOR,HANDLE,DWORD,DWORD,PPRIVILEGE_SET,BOOL,BOOL,LPBOOL);\nWINADVAPI  BOOL        WINAPI ObjectOpenAuditAlarmW(LPCWSTR,LPVOID,LPWSTR,LPWSTR,PSECURITY_DESCRIPTOR,HANDLE,DWORD,DWORD,PPRIVILEGE_SET,BOOL,BOOL,LPBOOL);\n#define                       ObjectOpenAuditAlarm WINELIB_NAME_AW(ObjectOpenAuditAlarm)\nWINADVAPI  BOOL        WINAPI ObjectPrivilegeAuditAlarmA(LPCSTR,LPVOID,HANDLE,DWORD,PPRIVILEGE_SET,BOOL);\nWINADVAPI  BOOL        WINAPI ObjectPrivilegeAuditAlarmW(LPCWSTR,LPVOID,HANDLE,DWORD,PPRIVILEGE_SET,BOOL);\n#define                       ObjectPrivilegeAuditAlarm WINELIB_NAME_AW(ObjectPrivilegeAuditAlarm)\nWINADVAPI  HANDLE      WINAPI OpenBackupEventLogA(LPCSTR,LPCSTR);\nWINADVAPI  HANDLE      WINAPI OpenBackupEventLogW(LPCWSTR,LPCWSTR);\n#define                       OpenBackupEventLog WINELIB_NAME_AW(OpenBackupEventLog)\nWINADVAPI  DWORD       WINAPI OpenEncryptedFileRawA(LPCSTR,ULONG,PVOID*);\nWINADVAPI  DWORD       WINAPI OpenEncryptedFileRawW(LPCWSTR,ULONG,PVOID*);\n#define                       OpenEncryptedFileRaw WINELIB_NAME_AW(OpenEncryptedFileRaw)\nWINBASEAPI HANDLE      WINAPI OpenEventA(DWORD,BOOL,LPCSTR);\nWINBASEAPI HANDLE      WINAPI OpenEventW(DWORD,BOOL,LPCWSTR);\n#define                       OpenEvent WINELIB_NAME_AW(OpenEvent)\nWINADVAPI  HANDLE      WINAPI OpenEventLogA(LPCSTR,LPCSTR);\nWINADVAPI  HANDLE      WINAPI OpenEventLogW(LPCWSTR,LPCWSTR);\n#define                       OpenEventLog WINELIB_NAME_AW(OpenEventLog)\nWINBASEAPI HFILE       WINAPI OpenFile(LPCSTR,OFSTRUCT*,UINT);\nWINBASEAPI HANDLE      WINAPI OpenFileMappingA(DWORD,BOOL,LPCSTR);\nWINBASEAPI HANDLE      WINAPI OpenFileMappingW(DWORD,BOOL,LPCWSTR);\n#define                       OpenFileMapping WINELIB_NAME_AW(OpenFileMapping)\nWINBASEAPI HANDLE      WINAPI OpenJobObjectA(DWORD,BOOL,LPCSTR);\nWINBASEAPI HANDLE      WINAPI OpenJobObjectW(DWORD,BOOL,LPCWSTR);\n#define                       OpenJobObject WINELIB_NAME_AW(OpenJobObject)\nWINBASEAPI HANDLE      WINAPI OpenMutexA(DWORD,BOOL,LPCSTR);\nWINBASEAPI HANDLE      WINAPI OpenMutexW(DWORD,BOOL,LPCWSTR);\n#define                       OpenMutex WINELIB_NAME_AW(OpenMutex)\nWINBASEAPI HANDLE      WINAPI OpenProcess(DWORD,BOOL,DWORD);\nWINADVAPI  BOOL        WINAPI OpenProcessToken(HANDLE,DWORD,PHANDLE);\nWINBASEAPI HANDLE      WINAPI OpenSemaphoreA(DWORD,BOOL,LPCSTR);\nWINBASEAPI HANDLE      WINAPI OpenSemaphoreW(DWORD,BOOL,LPCWSTR);\n#define                       OpenSemaphore WINELIB_NAME_AW(OpenSemaphore)\nWINBASEAPI HANDLE      WINAPI OpenThread(DWORD,BOOL,DWORD);\nWINADVAPI  BOOL        WINAPI OpenThreadToken(HANDLE,DWORD,BOOL,PHANDLE);\nWINBASEAPI HANDLE      WINAPI OpenWaitableTimerA(DWORD,BOOL,LPCSTR);\nWINBASEAPI HANDLE      WINAPI OpenWaitableTimerW(DWORD,BOOL,LPCWSTR);\n#define                       OpenWaitableTimer WINELIB_NAME_AW(OpenWaitableTimer)\nWINBASEAPI VOID        WINAPI OutputDebugStringA(LPCSTR);\nWINBASEAPI VOID        WINAPI OutputDebugStringW(LPCWSTR);\n#define                       OutputDebugString WINELIB_NAME_AW(OutputDebugString)\nWINBASEAPI BOOL        WINAPI PeekNamedPipe(HANDLE,PVOID,DWORD,PDWORD,PDWORD,PDWORD);\nWINBASEAPI BOOL        WINAPI PostQueuedCompletionStatus(HANDLE,DWORD,ULONG_PTR,LPOVERLAPPED);\nWINBASEAPI DWORD       WINAPI PrepareTape(HANDLE,DWORD,BOOL);\nWINBASEAPI BOOL        WINAPI ProcessIdToSessionId(DWORD,DWORD*);\nWINADVAPI  BOOL        WINAPI PrivilegeCheck(HANDLE,PPRIVILEGE_SET,LPBOOL);\nWINADVAPI  BOOL        WINAPI PrivilegedServiceAuditAlarmA(LPCSTR,LPCSTR,HANDLE,PPRIVILEGE_SET,BOOL);\nWINADVAPI  BOOL        WINAPI PrivilegedServiceAuditAlarmW(LPCWSTR,LPCWSTR,HANDLE,PPRIVILEGE_SET,BOOL);\n#define                       PrivilegedServiceAuditAlarm WINELIB_NAME_AW(PrivilegedServiceAuditAlarm)\nWINBASEAPI BOOL        WINAPI PulseEvent(HANDLE);\nWINBASEAPI BOOL        WINAPI PurgeComm(HANDLE,DWORD);\nWINBASEAPI BOOL        WINAPI QueryActCtxSettingsW(DWORD,HANDLE,const WCHAR*,const WCHAR*,WCHAR*,SIZE_T,SIZE_T*);\nWINBASEAPI BOOL        WINAPI QueryActCtxW(DWORD,HANDLE,PVOID,ULONG,PVOID,SIZE_T,SIZE_T *);\nWINBASEAPI USHORT      WINAPI QueryDepthSList(PSLIST_HEADER);\nWINBASEAPI DWORD       WINAPI QueryDosDeviceA(LPCSTR,LPSTR,DWORD);\nWINBASEAPI DWORD       WINAPI QueryDosDeviceW(LPCWSTR,LPWSTR,DWORD);\n#define                       QueryDosDevice WINELIB_NAME_AW(QueryDosDevice)\nWINBASEAPI BOOL        WINAPI QueryFullProcessImageNameA(HANDLE,DWORD,LPSTR,PDWORD);\nWINBASEAPI BOOL        WINAPI QueryFullProcessImageNameW(HANDLE,DWORD,LPWSTR,PDWORD);\n#define                       QueryFullProcessImageName WINELIB_NAME_AW(QueryFullProcessImageName)\nWINBASEAPI BOOL        WINAPI QueryInformationJobObject(HANDLE,JOBOBJECTINFOCLASS,LPVOID,DWORD,DWORD*);\nWINBASEAPI BOOL        WINAPI QueryMemoryResourceNotification(HANDLE,PBOOL);\nWINBASEAPI BOOL        WINAPI QueryPerformanceCounter(LARGE_INTEGER*);\nWINBASEAPI BOOL        WINAPI QueryPerformanceFrequency(LARGE_INTEGER*);\nWINBASEAPI BOOL        WINAPI QueryThreadCycleTime(HANDLE,PULONG64);\nWINBASEAPI BOOL        WINAPI QueryUmsThreadInformation(PUMS_CONTEXT,UMS_THREAD_INFO_CLASS,PVOID,ULONG,PULONG);\nWINBASEAPI DWORD       WINAPI QueueUserAPC(PAPCFUNC,HANDLE,ULONG_PTR);\nWINBASEAPI BOOL        WINAPI QueueUserWorkItem(LPTHREAD_START_ROUTINE,PVOID,ULONG);\nWINBASEAPI void        WINAPI RaiseException(DWORD,DWORD,DWORD,const ULONG_PTR *);\nWINADVAPI  BOOL        WINAPI ReadEventLogA(HANDLE,DWORD,DWORD,LPVOID,DWORD,DWORD *,DWORD *);\nWINADVAPI  BOOL        WINAPI ReadEventLogW(HANDLE,DWORD,DWORD,LPVOID,DWORD,DWORD *,DWORD *);\n#define                       ReadEventLog WINELIB_NAME_AW(ReadEventLog)\nWINBASEAPI BOOL        WINAPI ReadDirectoryChangesW(HANDLE,LPVOID,DWORD,BOOL,DWORD,LPDWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE);\nWINADVAPI  DWORD       WINAPI ReadEncryptedFileRaw(PFE_EXPORT_FUNC,PVOID,PVOID);\nWINBASEAPI BOOL        WINAPI ReadFile(HANDLE,LPVOID,DWORD,LPDWORD,LPOVERLAPPED);\nWINBASEAPI BOOL        WINAPI ReadFileEx(HANDLE,LPVOID,DWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE);\nWINBASEAPI BOOL        WINAPI ReadFileScatter(HANDLE,FILE_SEGMENT_ELEMENT*,DWORD,LPDWORD,LPOVERLAPPED);\nWINBASEAPI BOOL        WINAPI ReadProcessMemory(HANDLE,LPCVOID,LPVOID,SIZE_T,SIZE_T*);\nWINADVAPI  HANDLE      WINAPI RegisterEventSourceA(LPCSTR,LPCSTR);\nWINADVAPI  HANDLE      WINAPI RegisterEventSourceW(LPCWSTR,LPCWSTR);\n#define                       RegisterEventSource WINELIB_NAME_AW(RegisterEventSource)\nWINBASEAPI BOOL        WINAPI RegisterWaitForSingleObject(PHANDLE,HANDLE,WAITORTIMERCALLBACK,PVOID,ULONG,ULONG);\nWINBASEAPI HANDLE      WINAPI RegisterWaitForSingleObjectEx(HANDLE,WAITORTIMERCALLBACK,PVOID,ULONG,ULONG);\nWINBASEAPI VOID        WINAPI ReleaseActCtx(HANDLE);\nWINBASEAPI BOOL        WINAPI ReleaseMutex(HANDLE);\nWINBASEAPI VOID        WINAPI ReleaseMutexWhenCallbackReturns(PTP_CALLBACK_INSTANCE,HANDLE);\nWINBASEAPI BOOL        WINAPI ReleaseSemaphore(HANDLE,LONG,LPLONG);\nWINBASEAPI VOID        WINAPI ReleaseSemaphoreWhenCallbackReturns(PTP_CALLBACK_INSTANCE,HANDLE,DWORD);\nWINBASEAPI VOID        WINAPI ReleaseSRWLockExclusive(PSRWLOCK);\nWINBASEAPI VOID        WINAPI ReleaseSRWLockShared(PSRWLOCK);\nWINBASEAPI ULONG       WINAPI RemoveVectoredExceptionHandler(PVOID);\nWINBASEAPI BOOL        WINAPI ReplaceFileA(LPCSTR,LPCSTR,LPCSTR,DWORD,LPVOID,LPVOID);\nWINBASEAPI BOOL        WINAPI ReplaceFileW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,LPVOID,LPVOID);\n#define                       ReplaceFile WINELIB_NAME_AW(ReplaceFile)\nWINBASEAPI BOOL        WINAPI RemoveDirectoryA(LPCSTR);\nWINBASEAPI BOOL        WINAPI RemoveDirectoryW(LPCWSTR);\n#define                       RemoveDirectory WINELIB_NAME_AW(RemoveDirectory)\nWINADVAPI  BOOL        WINAPI ReportEventA(HANDLE,WORD,WORD,DWORD,PSID,WORD,DWORD,LPCSTR *,LPVOID);\nWINADVAPI  BOOL        WINAPI ReportEventW(HANDLE,WORD,WORD,DWORD,PSID,WORD,DWORD,LPCWSTR *,LPVOID);\nWINBASEAPI BOOL        WINAPI RequestDeviceWakeup(HANDLE);\nWINBASEAPI BOOL        WINAPI RequestWakeupLatency(LATENCY_TIME latency);\n#define                       ReportEvent WINELIB_NAME_AW(ReportEvent)\nWINBASEAPI BOOL        WINAPI ResetEvent(HANDLE);\nWINBASEAPI UINT        WINAPI ResetWriteWatch(LPVOID,SIZE_T);\nWINBASEAPI DWORD       WINAPI ResumeThread(HANDLE);\nWINADVAPI  BOOL        WINAPI RevertToSelf(void);\nWINBASEAPI DWORD       WINAPI SearchPathA(LPCSTR,LPCSTR,LPCSTR,DWORD,LPSTR,LPSTR*);\nWINBASEAPI DWORD       WINAPI SearchPathW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,LPWSTR,LPWSTR*);\n#define                       SearchPath WINELIB_NAME_AW(SearchPath)\nWINADVAPI  BOOL        WINAPI SetAclInformation(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS);\nWINBASEAPI BOOL        WINAPI SetCommConfig(HANDLE,LPCOMMCONFIG,DWORD);\nWINBASEAPI BOOL        WINAPI SetCommBreak(HANDLE);\nWINBASEAPI BOOL        WINAPI SetCommMask(HANDLE,DWORD);\nWINBASEAPI BOOL        WINAPI SetCommState(HANDLE,LPDCB);\nWINBASEAPI BOOL        WINAPI SetCommTimeouts(HANDLE,LPCOMMTIMEOUTS);\nWINBASEAPI BOOL        WINAPI SetComputerNameA(LPCSTR);\nWINBASEAPI BOOL        WINAPI SetComputerNameW(LPCWSTR);\n#define                       SetComputerName WINELIB_NAME_AW(SetComputerName)\nWINBASEAPI BOOL        WINAPI SetComputerNameExA(COMPUTER_NAME_FORMAT,LPCSTR);\nWINBASEAPI BOOL        WINAPI SetComputerNameExW(COMPUTER_NAME_FORMAT,LPCWSTR);\n#define                       SetComputerNameEx WINELIB_NAME_AW(SetComputerNameEx)\nWINBASEAPI DWORD       WINAPI SetCriticalSectionSpinCount(LPCRITICAL_SECTION,DWORD);\nWINBASEAPI BOOL        WINAPI SetCurrentDirectoryA(LPCSTR);\nWINBASEAPI BOOL        WINAPI SetCurrentDirectoryW(LPCWSTR);\n#define                       SetCurrentDirectory WINELIB_NAME_AW(SetCurrentDirectory)\nWINBASEAPI BOOL        WINAPI SetDefaultCommConfigA(LPCSTR,LPCOMMCONFIG,DWORD);\nWINBASEAPI BOOL        WINAPI SetDefaultCommConfigW(LPCWSTR,LPCOMMCONFIG,DWORD);\n#define                       SetDefaultCommConfig WINELIB_NAME_AW(SetDefaultCommConfig)\nWINBASEAPI BOOL        WINAPI SetDllDirectoryA(LPCSTR);\nWINBASEAPI BOOL        WINAPI SetDllDirectoryW(LPCWSTR);\n#define                       SetDllDirectory WINELIB_NAME_AW(SetDllDirectory)\nWINBASEAPI BOOL        WINAPI SetDynamicTimeZoneInformation(const DYNAMIC_TIME_ZONE_INFORMATION*);\nWINBASEAPI BOOL        WINAPI SetEndOfFile(HANDLE);\nWINBASEAPI BOOL        WINAPI SetEnvironmentVariableA(LPCSTR,LPCSTR);\nWINBASEAPI BOOL        WINAPI SetEnvironmentVariableW(LPCWSTR,LPCWSTR);\n#define                       SetEnvironmentVariable WINELIB_NAME_AW(SetEnvironmentVariable)\nWINBASEAPI UINT        WINAPI SetErrorMode(UINT);\nWINBASEAPI BOOL        WINAPI SetEvent(HANDLE);\nWINBASEAPI VOID        WINAPI SetEventWhenCallbackReturns(PTP_CALLBACK_INSTANCE,HANDLE);\nWINBASEAPI VOID        WINAPI SetFileApisToANSI(void);\nWINBASEAPI VOID        WINAPI SetFileApisToOEM(void);\nWINBASEAPI BOOL        WINAPI SetFileAttributesA(LPCSTR,DWORD);\nWINBASEAPI BOOL        WINAPI SetFileAttributesW(LPCWSTR,DWORD);\n#define                       SetFileAttributes WINELIB_NAME_AW(SetFileAttributes)\nWINBASEAPI BOOL        WINAPI SetFileCompletionNotificationModes(HANDLE,UCHAR);\nWINBASEAPI BOOL        WINAPI SetFileInformationByHandle(HANDLE,FILE_INFO_BY_HANDLE_CLASS,LPVOID,DWORD);\nWINBASEAPI DWORD       WINAPI SetFilePointer(HANDLE,LONG,LPLONG,DWORD);\nWINBASEAPI BOOL        WINAPI SetFilePointerEx(HANDLE,LARGE_INTEGER,LARGE_INTEGER*,DWORD);\nWINADVAPI  BOOL        WINAPI SetFileSecurityA(LPCSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);\nWINADVAPI  BOOL        WINAPI SetFileSecurityW(LPCWSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);\n#define                       SetFileSecurity WINELIB_NAME_AW(SetFileSecurity)\nWINBASEAPI BOOL        WINAPI SetFileTime(HANDLE,const FILETIME*,const FILETIME*,const FILETIME*);\nWINBASEAPI BOOL        WINAPI SetFileValidData(HANDLE,LONGLONG);\nWINBASEAPI UINT        WINAPI SetHandleCount(UINT);\nWINBASEAPI BOOL        WINAPI SetHandleInformation(HANDLE,DWORD,DWORD);\nWINBASEAPI BOOL        WINAPI SetInformationJobObject(HANDLE,JOBOBJECTINFOCLASS,LPVOID,DWORD);\nWINADVAPI  BOOL        WINAPI SetKernelObjectSecurity(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);\nWINBASEAPI BOOL        WINAPI SetLocalTime(const SYSTEMTIME*);\nWINBASEAPI BOOL        WINAPI SetMailslotInfo(HANDLE,DWORD);\nWINBASEAPI BOOL        WINAPI SetNamedPipeHandleState(HANDLE,LPDWORD,LPDWORD,LPDWORD);\nWINBASEAPI BOOL        WINAPI SetPriorityClass(HANDLE,DWORD);\nWINADVAPI  BOOL        WINAPI SetPrivateObjectSecurity(SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,PGENERIC_MAPPING,HANDLE);\nWINBASEAPI BOOL        WINAPI SetProcessAffinityMask(HANDLE,DWORD_PTR);\nWINBASEAPI BOOL        WINAPI SetProcessPriorityBoost(HANDLE,BOOL);\nWINBASEAPI BOOL        WINAPI SetProcessShutdownParameters(DWORD,DWORD);\nWINBASEAPI BOOL        WINAPI SetProcessWorkingSetSize(HANDLE,SIZE_T,SIZE_T);\nWINBASEAPI BOOL        WINAPI SetProcessWorkingSetSizeEx(HANDLE,SIZE_T,SIZE_T,DWORD);\nWINBASEAPI BOOL        WINAPI SetSearchPathMode(DWORD);\nWINADVAPI  BOOL        WINAPI SetSecurityDescriptorControl(PSECURITY_DESCRIPTOR,SECURITY_DESCRIPTOR_CONTROL,SECURITY_DESCRIPTOR_CONTROL);\nWINADVAPI  BOOL        WINAPI SetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR,BOOL,PACL,BOOL);\nWINADVAPI  BOOL        WINAPI SetSecurityDescriptorGroup(PSECURITY_DESCRIPTOR,PSID,BOOL);\nWINADVAPI  BOOL        WINAPI SetSecurityDescriptorOwner(PSECURITY_DESCRIPTOR,PSID,BOOL);\nWINADVAPI  BOOL        WINAPI SetSecurityDescriptorSacl(PSECURITY_DESCRIPTOR,BOOL,PACL,BOOL);\nWINBASEAPI BOOL        WINAPI SetStdHandle(DWORD,HANDLE);\n#define                       SetSwapAreaSize(w) (w)\nWINBASEAPI BOOL        WINAPI SetSystemPowerState(BOOL,BOOL);\nWINBASEAPI BOOL        WINAPI SetSystemTime(const SYSTEMTIME*);\nWINBASEAPI BOOL        WINAPI SetSystemTimeAdjustment(DWORD,BOOL);\nWINBASEAPI DWORD       WINAPI SetTapeParameters(HANDLE,DWORD,LPVOID);\nWINBASEAPI DWORD       WINAPI SetTapePosition(HANDLE,DWORD,DWORD,DWORD,DWORD,BOOL);\nWINBASEAPI DWORD_PTR   WINAPI SetThreadAffinityMask(HANDLE,DWORD_PTR);\nWINBASEAPI BOOL        WINAPI SetThreadContext(HANDLE,const CONTEXT *);\nWINBASEAPI BOOL        WINAPI SetThreadErrorMode(DWORD,LPDWORD);\nWINBASEAPI DWORD       WINAPI SetThreadExecutionState(EXECUTION_STATE);\nWINBASEAPI DWORD       WINAPI SetThreadIdealProcessor(HANDLE,DWORD);\nWINBASEAPI VOID        WINAPI SetThreadpoolThreadMaximum(PTP_POOL,DWORD);\nWINBASEAPI BOOL        WINAPI SetThreadpoolThreadMinimum(PTP_POOL,DWORD);\nWINBASEAPI BOOL        WINAPI SetThreadPriority(HANDLE,INT);\nWINBASEAPI BOOL        WINAPI SetThreadPriorityBoost(HANDLE,BOOL);\nWINADVAPI  BOOL        WINAPI SetThreadToken(PHANDLE,HANDLE);\nWINBASEAPI VOID        WINAPI SetThreadpoolTimer(PTP_TIMER,FILETIME*,DWORD,DWORD);\nWINBASEAPI VOID        WINAPI SetThreadpoolWait(PTP_WAIT,HANDLE,FILETIME *);\nWINBASEAPI HANDLE      WINAPI SetTimerQueueTimer(HANDLE,WAITORTIMERCALLBACK,PVOID,DWORD,DWORD,BOOL);\nWINBASEAPI BOOL        WINAPI SetTimeZoneInformation(const TIME_ZONE_INFORMATION *);\nWINADVAPI  BOOL        WINAPI SetTokenInformation(HANDLE,TOKEN_INFORMATION_CLASS,LPVOID,DWORD);\nWINBASEAPI LPTOP_LEVEL_EXCEPTION_FILTER WINAPI SetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER);\nWINBASEAPI BOOL        WINAPI SetVolumeLabelA(LPCSTR,LPCSTR);\nWINBASEAPI BOOL        WINAPI SetVolumeLabelW(LPCWSTR,LPCWSTR);\n#define                       SetVolumeLabel WINELIB_NAME_AW(SetVolumeLabel)\nWINBASEAPI BOOL        WINAPI SetVolumeMountPointA(LPCSTR,LPCSTR);\nWINBASEAPI BOOL        WINAPI SetVolumeMountPointW(LPCWSTR,LPCWSTR);\n#define                       SetVolumeMountPoint WINELIB_NAME_AW(SetVolumeMountPoint)\nWINBASEAPI BOOL        WINAPI SetWaitableTimer(HANDLE,const LARGE_INTEGER*,LONG,PTIMERAPCROUTINE,LPVOID,BOOL);\nWINBASEAPI BOOL        WINAPI SetWaitableTimerEx(HANDLE,const LARGE_INTEGER*,LONG,PTIMERAPCROUTINE,LPVOID,REASON_CONTEXT*,ULONG);\nWINBASEAPI BOOL        WINAPI SetUmsThreadInformation(PUMS_CONTEXT,UMS_THREAD_INFO_CLASS,void *,ULONG);\nWINBASEAPI BOOL        WINAPI SetupComm(HANDLE,DWORD,DWORD);\nWINBASEAPI DWORD       WINAPI SignalObjectAndWait(HANDLE,HANDLE,DWORD,BOOL);\nWINBASEAPI DWORD       WINAPI SizeofResource(HMODULE,HRSRC);\nWINBASEAPI VOID        WINAPI Sleep(DWORD);\nWINBASEAPI BOOL        WINAPI SleepConditionVariableCS(PCONDITION_VARIABLE,PCRITICAL_SECTION,DWORD);\nWINBASEAPI BOOL        WINAPI SleepConditionVariableSRW(PCONDITION_VARIABLE,PSRWLOCK,DWORD,ULONG);\nWINBASEAPI DWORD       WINAPI SleepEx(DWORD,BOOL);\nWINBASEAPI VOID        WINAPI SubmitThreadpoolWork(PTP_WORK);\nWINBASEAPI DWORD       WINAPI SuspendThread(HANDLE);\nWINBASEAPI void        WINAPI SwitchToFiber(LPVOID);\nWINBASEAPI BOOL        WINAPI SwitchToThread(void);\nWINBASEAPI BOOL        WINAPI SystemTimeToFileTime(const SYSTEMTIME*,LPFILETIME);\nWINBASEAPI BOOL        WINAPI SystemTimeToTzSpecificLocalTime(const TIME_ZONE_INFORMATION*,const SYSTEMTIME*,LPSYSTEMTIME);\nWINBASEAPI BOOL        WINAPI TerminateJobObject(HANDLE,UINT);\nWINBASEAPI BOOL        WINAPI TerminateProcess(HANDLE,DWORD);\nWINBASEAPI BOOL        WINAPI TerminateThread(HANDLE,DWORD);\nWINBASEAPI DWORD       WINAPI TlsAlloc(void);\nWINBASEAPI BOOL        WINAPI TlsFree(DWORD);\nWINBASEAPI LPVOID      WINAPI TlsGetValue(DWORD);\nWINBASEAPI BOOL        WINAPI TlsSetValue(DWORD,LPVOID);\nWINBASEAPI BOOL        WINAPI TransactNamedPipe(HANDLE,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPOVERLAPPED);\nWINBASEAPI BOOL        WINAPI TransmitCommChar(HANDLE,CHAR);\nWINBASEAPI BOOLEAN     WINAPI TryAcquireSRWLockExclusive(PSRWLOCK);\nWINBASEAPI BOOLEAN     WINAPI TryAcquireSRWLockShared(PSRWLOCK);\nWINBASEAPI BOOL        WINAPI TryEnterCriticalSection(CRITICAL_SECTION *lpCrit);\nWINBASEAPI BOOL        WINAPI TrySubmitThreadpoolCallback(PTP_SIMPLE_CALLBACK,void*,TP_CALLBACK_ENVIRON*);\nWINBASEAPI BOOL        WINAPI TzSpecificLocalTimeToSystemTime(const TIME_ZONE_INFORMATION*,const SYSTEMTIME*,LPSYSTEMTIME);\nWINBASEAPI LONG        WINAPI UnhandledExceptionFilter(PEXCEPTION_POINTERS);\nWINBASEAPI BOOL        WINAPI UnlockFile(HANDLE,DWORD,DWORD,DWORD,DWORD);\nWINBASEAPI BOOL        WINAPI UnlockFileEx(HANDLE,DWORD,DWORD,DWORD,LPOVERLAPPED);\n#define                       UnlockResource(handle) ((handle), 0)\n#define                       UnlockSegment(handle) GlobalUnfix((HANDLE)(handle))\nWINBASEAPI BOOL        WINAPI UnmapViewOfFile(LPCVOID);\nWINBASEAPI BOOL        WINAPI UmsThreadYield(void *);\nWINBASEAPI HRESULT     WINAPI UnregisterApplicationRestart(void);\nWINBASEAPI BOOL        WINAPI UnregisterWait(HANDLE);\nWINBASEAPI BOOL        WINAPI UnregisterWaitEx(HANDLE,HANDLE);\nWINBASEAPI BOOL        WINAPI UpdateProcThreadAttribute(struct _PROC_THREAD_ATTRIBUTE_LIST*,DWORD,DWORD_PTR,void*,SIZE_T,void*,SIZE_T*);\nWINBASEAPI BOOL        WINAPI UpdateResourceA(HANDLE,LPCSTR,LPCSTR,WORD,LPVOID,DWORD);\nWINBASEAPI BOOL        WINAPI UpdateResourceW(HANDLE,LPCWSTR,LPCWSTR,WORD,LPVOID,DWORD);\n#define                       UpdateResource WINELIB_NAME_AW(UpdateResource)\nWINBASEAPI BOOL        WINAPI VerifyVersionInfoA(LPOSVERSIONINFOEXA,DWORD,DWORDLONG);\nWINBASEAPI BOOL        WINAPI VerifyVersionInfoW(LPOSVERSIONINFOEXW,DWORD,DWORDLONG);\n#define                       VerifyVersionInfo WINELIB_NAME_AW(VerifyVersionInfo)\nWINBASEAPI LPVOID      WINAPI VirtualAlloc(LPVOID,SIZE_T,DWORD,DWORD);\nWINBASEAPI LPVOID      WINAPI VirtualAllocEx(HANDLE,LPVOID,SIZE_T,DWORD,DWORD);\nWINBASEAPI BOOL        WINAPI VirtualFree(LPVOID,SIZE_T,DWORD);\nWINBASEAPI BOOL        WINAPI VirtualFreeEx(HANDLE,LPVOID,SIZE_T,DWORD);\nWINBASEAPI BOOL        WINAPI VirtualLock(LPVOID,SIZE_T);\nWINBASEAPI BOOL        WINAPI VirtualProtect(LPVOID,SIZE_T,DWORD,LPDWORD);\nWINBASEAPI BOOL        WINAPI VirtualProtectEx(HANDLE,LPVOID,SIZE_T,DWORD,LPDWORD);\nWINBASEAPI SIZE_T      WINAPI VirtualQuery(LPCVOID,PMEMORY_BASIC_INFORMATION,SIZE_T);\nWINBASEAPI SIZE_T      WINAPI VirtualQueryEx(HANDLE,LPCVOID,PMEMORY_BASIC_INFORMATION,SIZE_T);\nWINBASEAPI BOOL        WINAPI VirtualUnlock(LPVOID,SIZE_T);\nWINBASEAPI DWORD       WINAPI WTSGetActiveConsoleSessionId(void);\nWINBASEAPI BOOL        WINAPI WaitCommEvent(HANDLE,LPDWORD,LPOVERLAPPED);\nWINBASEAPI BOOL        WINAPI WaitForDebugEvent(LPDEBUG_EVENT,DWORD);\nWINBASEAPI DWORD       WINAPI WaitForMultipleObjects(DWORD,const HANDLE*,BOOL,DWORD);\nWINBASEAPI DWORD       WINAPI WaitForMultipleObjectsEx(DWORD,const HANDLE*,BOOL,DWORD,BOOL);\nWINBASEAPI DWORD       WINAPI WaitForSingleObject(HANDLE,DWORD);\nWINBASEAPI DWORD       WINAPI WaitForSingleObjectEx(HANDLE,DWORD,BOOL);\nWINBASEAPI VOID        WINAPI WaitForThreadpoolTimerCallbacks(PTP_TIMER,BOOL);\nWINBASEAPI VOID        WINAPI WaitForThreadpoolWaitCallbacks(PTP_WAIT,BOOL);\nWINBASEAPI VOID        WINAPI WaitForThreadpoolWorkCallbacks(PTP_WORK,BOOL);\nWINBASEAPI BOOL        WINAPI WaitNamedPipeA(LPCSTR,DWORD);\nWINBASEAPI BOOL        WINAPI WaitNamedPipeW(LPCWSTR,DWORD);\n#define                       WaitNamedPipe WINELIB_NAME_AW(WaitNamedPipe)\nWINBASEAPI VOID        WINAPI WakeAllConditionVariable(PCONDITION_VARIABLE);\nWINBASEAPI VOID        WINAPI WakeConditionVariable(PCONDITION_VARIABLE);\nWINBASEAPI UINT        WINAPI WinExec(LPCSTR,UINT);\nWINBASEAPI BOOL        WINAPI Wow64DisableWow64FsRedirection(PVOID*);\nWINBASEAPI BOOLEAN     WINAPI Wow64EnableWow64FsRedirection(BOOLEAN);\nWINBASEAPI BOOL        WINAPI Wow64GetThreadContext(HANDLE, WOW64_CONTEXT *);\nWINBASEAPI BOOL        WINAPI Wow64RevertWow64FsRedirection(PVOID);\nWINBASEAPI BOOL        WINAPI Wow64SetThreadContext(HANDLE, const WOW64_CONTEXT *);\nWINADVAPI  DWORD       WINAPI WriteEncryptedFileRaw(PFE_IMPORT_FUNC,PVOID,PVOID);\nWINBASEAPI BOOL        WINAPI WriteFile(HANDLE,LPCVOID,DWORD,LPDWORD,LPOVERLAPPED);\nWINBASEAPI BOOL        WINAPI WriteFileEx(HANDLE,LPCVOID,DWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE);\nWINBASEAPI BOOL        WINAPI WriteFileGather(HANDLE,FILE_SEGMENT_ELEMENT*,DWORD,LPDWORD,LPOVERLAPPED);\nWINBASEAPI BOOL        WINAPI WritePrivateProfileSectionA(LPCSTR,LPCSTR,LPCSTR);\nWINBASEAPI BOOL        WINAPI WritePrivateProfileSectionW(LPCWSTR,LPCWSTR,LPCWSTR);\n#define                       WritePrivateProfileSection WINELIB_NAME_AW(WritePrivateProfileSection)\nWINBASEAPI BOOL        WINAPI WritePrivateProfileStringA(LPCSTR,LPCSTR,LPCSTR,LPCSTR);\nWINBASEAPI BOOL        WINAPI WritePrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);\n#define                       WritePrivateProfileString WINELIB_NAME_AW(WritePrivateProfileString)\nWINBASEAPI BOOL        WINAPI WritePrivateProfileStructA(LPCSTR,LPCSTR,LPVOID,UINT,LPCSTR);\nWINBASEAPI BOOL        WINAPI WritePrivateProfileStructW(LPCWSTR,LPCWSTR,LPVOID,UINT,LPCWSTR);\n#define                       WritePrivateProfileStruct WINELIB_NAME_AW(WritePrivateProfileStruct)\nWINBASEAPI BOOL        WINAPI WriteProcessMemory(HANDLE,LPVOID,LPCVOID,SIZE_T,SIZE_T*);\nWINBASEAPI BOOL        WINAPI WriteProfileSectionA(LPCSTR,LPCSTR);\nWINBASEAPI BOOL        WINAPI WriteProfileSectionW(LPCWSTR,LPCWSTR);\n#define                       WritePrivateProfileSection WINELIB_NAME_AW(WritePrivateProfileSection)\nWINBASEAPI BOOL        WINAPI WriteProfileStringA(LPCSTR,LPCSTR,LPCSTR);\nWINBASEAPI BOOL        WINAPI WriteProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR);\n#define                       WriteProfileString WINELIB_NAME_AW(WriteProfileString)\nWINBASEAPI DWORD       WINAPI WriteTapemark(HANDLE,DWORD,DWORD,BOOL);\n#define                       Yield()\nWINBASEAPI BOOL        WINAPI ZombifyActCtx(HANDLE);\n\nWINBASEAPI INT         WINAPI lstrcmpA(LPCSTR,LPCSTR);\nWINBASEAPI INT         WINAPI lstrcmpW(LPCWSTR,LPCWSTR);\nWINBASEAPI INT         WINAPI lstrcmpiA(LPCSTR,LPCSTR);\nWINBASEAPI INT         WINAPI lstrcmpiW(LPCWSTR,LPCWSTR);\n\n#if !defined(__WINESRC__) || defined(WINE_NO_INLINE_STRING)\n\nWINBASEAPI LPSTR       WINAPI lstrcatA(LPSTR,LPCSTR);\nWINBASEAPI LPWSTR      WINAPI lstrcatW(LPWSTR,LPCWSTR);\nWINBASEAPI LPSTR       WINAPI lstrcpyA(LPSTR,LPCSTR);\nWINBASEAPI LPWSTR      WINAPI lstrcpyW(LPWSTR,LPCWSTR);\nWINBASEAPI LPSTR       WINAPI lstrcpynA(LPSTR,LPCSTR,INT);\nWINBASEAPI LPWSTR      WINAPI lstrcpynW(LPWSTR,LPCWSTR,INT);\nWINBASEAPI INT         WINAPI lstrlenA(LPCSTR);\nWINBASEAPI INT         WINAPI lstrlenW(LPCWSTR);\n\n#else\n\n/* string functions without the exception handler */\n\nstatic inline LPWSTR WINAPI lstrcpynW( LPWSTR dst, LPCWSTR src, INT n )\n{\n    LPWSTR d = dst;\n    LPCWSTR s = src;\n    UINT count = n;\n\n    while ((count > 1) && *s)\n    {\n        count--;\n        *d++ = *s++;\n    }\n    if (count) *d = 0;\n    return dst;\n}\n\nstatic inline LPSTR WINAPI lstrcpynA( LPSTR dst, LPCSTR src, INT n )\n{\n    LPSTR d = dst;\n    LPCSTR s = src;\n    UINT count = n;\n\n    while ((count > 1) && *s)\n    {\n        count--;\n        *d++ = *s++;\n    }\n    if (count) *d = 0;\n    return dst;\n}\n\nstatic inline INT WINAPI lstrlenW( LPCWSTR str )\n{\n    const WCHAR *s = str;\n    while (*s) s++;\n    return s - str;\n}\n\nstatic inline INT WINAPI lstrlenA( LPCSTR str )\n{\n    return strlen( str );\n}\n\nstatic inline LPWSTR WINAPI lstrcpyW( LPWSTR dst, LPCWSTR src )\n{\n    WCHAR *p = dst;\n    while ((*p++ = *src++));\n    return dst;\n}\n\nstatic inline LPSTR WINAPI lstrcpyA( LPSTR dst, LPCSTR src )\n{\n    return strcpy( dst, src );\n}\n\nstatic inline LPWSTR WINAPI lstrcatW( LPWSTR dst, LPCWSTR src )\n{\n    WCHAR *p = dst;\n    while (*p) p++;\n    while ((*p++ = *src++));\n    return dst;\n}\n\nstatic inline LPSTR WINAPI lstrcatA( LPSTR dst, LPCSTR src )\n{\n    return strcat( dst, src );\n}\n\n/* strncpy doesn't do what you think, don't use it */\n#undef strncpy\n#define strncpy(d,s,n) error do_not_use_strncpy_use_lstrcpynA_or_memcpy_instead\n\n#endif /* !defined(__WINESRC__) || defined(WINE_NO_INLINE_STRING) */\n\n#define     lstrcat WINELIB_NAME_AW(lstrcat)\n#define     lstrcmp WINELIB_NAME_AW(lstrcmp)\n#define     lstrcmpi WINELIB_NAME_AW(lstrcmpi)\n#define     lstrcpy WINELIB_NAME_AW(lstrcpy)\n#define     lstrcpyn WINELIB_NAME_AW(lstrcpyn)\n#define     lstrlen WINELIB_NAME_AW(lstrlen)\n\nWINBASEAPI LONG        WINAPI _hread(HFILE,LPVOID,LONG);\nWINBASEAPI LONG        WINAPI _hwrite(HFILE,LPCSTR,LONG);\nWINBASEAPI HFILE       WINAPI _lcreat(LPCSTR,INT);\nWINBASEAPI HFILE       WINAPI _lclose(HFILE);\nWINBASEAPI LONG        WINAPI _llseek(HFILE,LONG,INT);\nWINBASEAPI HFILE       WINAPI _lopen(LPCSTR,INT);\nWINBASEAPI UINT        WINAPI _lread(HFILE,LPVOID,UINT);\nWINBASEAPI UINT        WINAPI _lwrite(HFILE,LPCSTR,UINT);\n\n/* compatibility macros */\n#define     FillMemory RtlFillMemory\n#define     MoveMemory RtlMoveMemory\n#define     ZeroMemory RtlZeroMemory\n#define     CopyMemory RtlCopyMemory\n#define     SecureZeroMemory RtlSecureZeroMemory\n\n/* Wine internal functions */\n\nextern char * CDECL wine_get_unix_file_name( LPCWSTR dos );\nextern WCHAR * CDECL wine_get_dos_file_name( LPCSTR str );\n\n\n/* Interlocked functions */\n\n#ifdef __i386__\n# if defined(__GNUC__) && !defined(_NTSYSTEM_) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))\n\nstatic FORCEINLINE LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare )\n{\n    LONG ret;\n    __asm__ __volatile__( \"lock; cmpxchgl %2,(%1)\"\n                          : \"=a\" (ret) : \"r\" (dest), \"r\" (xchg), \"0\" (compare) : \"memory\" );\n    return ret;\n}\n\nstatic FORCEINLINE LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val )\n{\n    LONG ret;\n    __asm__ __volatile__( \"lock; xchgl %0,(%1)\"\n                          : \"=r\" (ret) :\"r\" (dest), \"0\" (val) : \"memory\" );\n    return ret;\n}\n\nstatic FORCEINLINE LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr )\n{\n    LONG ret;\n    __asm__ __volatile__( \"lock; xaddl %0,(%1)\"\n                          : \"=r\" (ret) : \"r\" (dest), \"0\" (incr) : \"memory\" );\n    return ret;\n}\n\nstatic FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest )\n{\n    return InterlockedExchangeAdd( dest, 1 ) + 1;\n}\n\nstatic FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest )\n{\n    return InterlockedExchangeAdd( dest, -1 ) - 1;\n}\n\n# else  /* __GNUC__ */\n\nWINBASEAPI LONG WINAPI InterlockedCompareExchange(LONG volatile*,LONG,LONG);\nWINBASEAPI LONG WINAPI InterlockedDecrement(LONG volatile*);\nWINBASEAPI LONG WINAPI InterlockedExchange(LONG volatile*,LONG);\nWINBASEAPI LONG WINAPI InterlockedExchangeAdd(LONG volatile*,LONG);\nWINBASEAPI LONG WINAPI InterlockedIncrement(LONG volatile*);\n\n# endif  /* __GNUC__ */\n\nstatic FORCEINLINE PVOID WINAPI InterlockedCompareExchangePointer( PVOID volatile *dest, PVOID xchg, PVOID compare )\n{\n    return (PVOID)InterlockedCompareExchange( (LONG volatile*)dest, (LONG)xchg, (LONG)compare );\n}\n\nstatic FORCEINLINE PVOID WINAPI InterlockedExchangePointer( PVOID volatile *dest, PVOID val )\n{\n    return (PVOID)InterlockedExchange( (LONG volatile*)dest, (LONG)val );\n}\n\nWINBASEAPI LONGLONG WINAPI InterlockedCompareExchange64(LONGLONG volatile*,LONGLONG,LONGLONG);\n\n#elif defined(_MSC_VER)\n\n#pragma intrinsic(_InterlockedCompareExchange)\n#pragma intrinsic(_InterlockedCompareExchangePointer)\n#pragma intrinsic(_InterlockedCompareExchange64)\n#pragma intrinsic(_InterlockedExchange)\n#pragma intrinsic(_InterlockedExchangePointer)\n#pragma intrinsic(_InterlockedExchangeAdd)\n#pragma intrinsic(_InterlockedIncrement)\n#pragma intrinsic(_InterlockedDecrement)\n\nstatic FORCEINLINE LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare )\n{\n    return _InterlockedCompareExchange( dest, xchg, compare );\n}\n\nstatic FORCEINLINE PVOID WINAPI InterlockedCompareExchangePointer( PVOID volatile *dest, PVOID xchg, PVOID compare )\n{\n    return _InterlockedCompareExchangePointer( dest, xchg, compare );\n}\n\nstatic FORCEINLINE LONGLONG WINAPI InterlockedCompareExchange64( LONGLONG volatile *dest, LONGLONG xchg, LONGLONG compare )\n{\n    return _InterlockedCompareExchange64( dest, xchg, compare );\n}\n\nstatic FORCEINLINE LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val )\n{\n    return _InterlockedExchange( dest, val );\n}\n\nstatic FORCEINLINE PVOID WINAPI InterlockedExchangePointer( PVOID volatile *dest, PVOID val )\n{\n    return _InterlockedExchangePointer( dest, val );\n}\n\nstatic FORCEINLINE LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr )\n{\n    return _InterlockedExchangeAdd( dest, incr );\n}\n\nstatic FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest )\n{\n    return _InterlockedIncrement( dest );\n}\n\nstatic FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest )\n{\n    return _InterlockedDecrement( dest );\n}\n\n#elif defined(__GNUC__)\n\nstatic FORCEINLINE LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare )\n{\n    return __sync_val_compare_and_swap( dest, compare, xchg );\n}\n\nstatic FORCEINLINE PVOID WINAPI InterlockedCompareExchangePointer( PVOID volatile *dest, PVOID xchg, PVOID compare )\n{\n    return __sync_val_compare_and_swap( dest, compare, xchg );\n}\n\nstatic FORCEINLINE LONGLONG WINAPI InterlockedCompareExchange64( LONGLONG volatile *dest, LONGLONG xchg, LONGLONG compare )\n{\n    return __sync_val_compare_and_swap( dest, compare, xchg );\n}\n\nstatic FORCEINLINE LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val )\n{\n    LONG ret;\n#ifdef __x86_64__\n    __asm__ __volatile__( \"lock; xchgl %0,(%1)\" : \"=r\" (ret) :\"r\" (dest), \"0\" (val) : \"memory\" );\n#else\n    do ret = *dest; while (!__sync_bool_compare_and_swap( dest, ret, val ));\n#endif\n    return ret;\n}\n\nstatic FORCEINLINE PVOID WINAPI InterlockedExchangePointer( PVOID volatile *dest, PVOID val )\n{\n    PVOID ret;\n#ifdef __x86_64__\n    __asm__ __volatile__( \"lock; xchgq %0,(%1)\" : \"=r\" (ret) :\"r\" (dest), \"0\" (val) : \"memory\" );\n#else\n    do ret = *dest; while (!__sync_bool_compare_and_swap( dest, ret, val ));\n#endif\n    return ret;\n}\n\nstatic FORCEINLINE LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr )\n{\n    return __sync_fetch_and_add( dest, incr );\n}\n\nstatic FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest )\n{\n    return __sync_add_and_fetch( dest, 1 );\n}\n\nstatic FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest )\n{\n    return __sync_add_and_fetch( dest, -1 );\n}\n\n#endif  /* __i386__ */\n\n/* A few optimizations for gcc */\n\n#if defined(__GNUC__) && !defined(__MINGW32__) && (defined(__i386__) || defined(__x86_64__)) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))\n\nstatic FORCEINLINE DWORD WINAPI GetLastError(void)\n{\n    DWORD ret;\n#ifdef __x86_64__\n#ifdef __APPLE__\n    DWORD* teb;\n    __asm__ __volatile__( \".byte 0x65\\n\\tmovq 0x30,%0\" : \"=r\" (teb) );\n    ret = teb[0x68 / sizeof(DWORD)];\n#else\n    __asm__ __volatile__( \".byte 0x65\\n\\tmovl 0x68,%0\" : \"=r\" (ret) );\n#endif\n#else\n    __asm__ __volatile__( \".byte 0x64\\n\\tmovl 0x34,%0\" : \"=r\" (ret) );\n#endif\n    return ret;\n}\n\nstatic FORCEINLINE DWORD WINAPI GetCurrentProcessId(void)\n{\n    DWORD ret;\n#ifdef __x86_64__\n#ifdef __APPLE__\n    DWORD* teb;\n    __asm__ __volatile__( \".byte 0x65\\n\\tmovq 0x30,%0\" : \"=r\" (teb) );\n    ret = teb[0x40 / sizeof(DWORD)];\n#else\n    __asm__ __volatile__( \".byte 0x65\\n\\tmovl 0x40,%0\" : \"=r\" (ret) );\n#endif\n#else\n    __asm__ __volatile__( \".byte 0x64\\n\\tmovl 0x20,%0\" : \"=r\" (ret) );\n#endif\n    return ret;\n}\n\nstatic FORCEINLINE DWORD WINAPI GetCurrentThreadId(void)\n{\n    DWORD ret;\n#ifdef __x86_64__\n#ifdef __APPLE__\n    DWORD* teb;\n    __asm__ __volatile__( \".byte 0x65\\n\\tmovq 0x30,%0\" : \"=r\" (teb) );\n    ret = teb[0x48 / sizeof(DWORD)];\n#else\n    __asm__ __volatile__( \".byte 0x65\\n\\tmovl 0x48,%0\" : \"=r\" (ret) );\n#endif\n#else\n    __asm__ __volatile__( \".byte 0x64\\n\\tmovl 0x24,%0\" : \"=r\" (ret) );\n#endif\n    return ret;\n}\n\nstatic FORCEINLINE void WINAPI SetLastError( DWORD err )\n{\n#ifdef __x86_64__\n#ifdef __APPLE__\n    DWORD* teb;\n    __asm__ __volatile__( \".byte 0x65\\n\\tmovq 0x30,%0\" : \"=r\" (teb) );\n    teb[0x68 / sizeof(DWORD)] = err;\n#else\n    __asm__ __volatile__( \".byte 0x65\\n\\tmovl %0,0x68\" : : \"r\" (err) : \"memory\" );\n#endif\n#else\n    __asm__ __volatile__( \".byte 0x64\\n\\tmovl %0,0x34\" : : \"r\" (err) : \"memory\" );\n#endif\n}\n\nstatic FORCEINLINE HANDLE WINAPI GetProcessHeap(void)\n{\n    HANDLE *pdb;\n#ifdef __x86_64__\n#ifdef __APPLE__\n    HANDLE** teb;\n    __asm__ __volatile__( \".byte 0x65\\n\\tmovq 0x30,%0\" : \"=r\" (teb) );\n    pdb = teb[0x60 / sizeof(HANDLE*)];\n#else\n    __asm__ __volatile__( \".byte 0x65\\n\\tmovq 0x60,%0\" : \"=r\" (pdb) );\n#endif\n    return pdb[0x30 / sizeof(HANDLE)];  /* get dword at offset 0x30 in pdb */\n#else\n    __asm__ __volatile__( \".byte 0x64\\n\\tmovl 0x30,%0\" : \"=r\" (pdb) );\n    return pdb[0x18 / sizeof(HANDLE)];  /* get dword at offset 0x18 in pdb */\n#endif\n}\n\n#else  /* __GNUC__ */\n\nWINBASEAPI DWORD       WINAPI GetCurrentProcessId(void);\nWINBASEAPI DWORD       WINAPI GetCurrentThreadId(void);\nWINBASEAPI DWORD       WINAPI GetLastError(void);\nWINBASEAPI HANDLE      WINAPI GetProcessHeap(void);\nWINBASEAPI VOID        WINAPI SetLastError(DWORD);\n\n#endif  /* __GNUC__ */\n\n#ifdef __WINESRC__\n#define GetCurrentProcess() ((HANDLE)~(ULONG_PTR)0)\n#define GetCurrentThread()  ((HANDLE)~(ULONG_PTR)1)\n#endif\n\n#define GetCurrentProcessToken()            ((HANDLE)~(ULONG_PTR)3)\n#define GetCurrentThreadToken()             ((HANDLE)~(ULONG_PTR)4)\n#define GetCurrentThreadEffectiveToken()    ((HANDLE)~(ULONG_PTR)5)\n\n/* WinMain(entry point) must be declared in winbase.h. */\n/* If this is not declared, we cannot compile many sources written with C++. */\nint WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int);\n\n#ifdef __WINESRC__\n/* shouldn't be here, but is nice for type checking */\nBOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved ) DECLSPEC_HIDDEN;\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* __WINE_WINBASE_H */\n"
  },
  {
    "path": "wine/windows/wincodec.idl",
    "content": "/*\n * Copyright 2009 Vincent Povirk for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"wtypes.idl\";\nimport \"propidl.idl\";\nimport \"ocidl.idl\";\n\ncpp_quote (\"#include \\\"dcommon.h\\\"\")\n\ncpp_quote(\"#define WINCODEC_SDK_VERSION 0x0236\")\n\n#define CODEC_FORCE_DWORD 0x7fffffff\n\ntypedef enum WICDecodeOptions {\n    WICDecodeMetadataCacheOnDemand = 0x00000000,\n    WICDecodeMetadataCacheOnLoad = 0x00000001,\n    WICMETADATACACHEOPTION_FORCE_DWORD = CODEC_FORCE_DWORD\n} WICDecodeOptions;\n\ntypedef enum WICBitmapCreateCacheOption {\n    WICBitmapNoCache = 0x00000000,\n    WICBitmapCacheOnDemand = 0x00000001,\n    WICBitmapCacheOnLoad = 0x00000002,\n    WICBITMAPCREATECACHEOPTION_FORCE_DWORD = CODEC_FORCE_DWORD\n} WICBitmapCreateCacheOption;\n\ntypedef enum WICBitmapAlphaChannelOption {\n    WICBitmapUseAlpha = 0x00000000,\n    WICBitmapUsePremultipliedAlpha = 0x00000001,\n    WICBitmapIgnoreAlpha = 0x00000002,\n    WICBITMAPALPHACHANNELOPTIONS_FORCE_DWORD = CODEC_FORCE_DWORD\n} WICBitmapAlphaChannelOption;\n\ntypedef enum WICBitmapDecoderCapabilities {\n    WICBitmapDecoderCapabilitySameEncoder = 0x00000001,\n    WICBitmapDecoderCapabilityCanDecodeAllImages = 0x00000002,\n    WICBitmapDecoderCapabilityCanDecodeSomeImages = 0x00000004,\n    WICBitmapDecoderCapabilityCanEnumerateMetadata = 0x00000008,\n    WICBitmapDecoderCapabilityCanDecodeThumbnail = 0x00000010,\n} WICBitmapDecoderCapabilities;\n\ntypedef enum WICBitmapDitherType {\n    WICBitmapDitherTypeNone = 0x00000000,\n    WICBitmapDitherTypeSolid = 0x00000000,\n    WICBitmapDitherTypeOrdered4x4 = 0x00000001,\n    WICBitmapDitherTypeOrdered8x8 = 0x00000002,\n    WICBitmapDitherTypeOrdered16x16 = 0x00000003,\n    WICBitmapDitherTypeSpiral4x4 = 0x00000004,\n    WICBitmapDitherTypeSpiral8x8 = 0x00000005,\n    WICBitmapDitherTypeDualSpiral4x4 = 0x00000006,\n    WICBitmapDitherTypeDualSpiral8x8 = 0x00000007,\n    WICBitmapDitherTypeErrorDiffusion = 0x00000008,\n    WICBITMAPDITHERTYPE_FORCE_DWORD = CODEC_FORCE_DWORD\n} WICBitmapDitherType;\n\ntypedef enum WICBitmapEncoderCacheOption {\n    WICBitmapEncoderCacheInMemory = 0x00000000,\n    WICBitmapEncoderCacheTempFile = 0x00000001,\n    WICBitmapEncoderNoCache = 0x00000002,\n    WICBITMAPENCODERCACHEOPTION_FORCE_DWORD = CODEC_FORCE_DWORD\n} WICBitmapEncoderCacheOption;\n\ntypedef enum WICBitmapInterpolationMode {\n    WICBitmapInterpolationModeNearestNeighbor = 0x00000000,\n    WICBitmapInterpolationModeLinear = 0x00000001,\n    WICBitmapInterpolationModeCubic = 0x00000002,\n    WICBitmapInterpolationModeFant = 0x00000003,\n    WICBITMAPINTERPOLATIONMODE_FORCE_DWORD = CODEC_FORCE_DWORD\n} WICBitmapInterpolationMode;\n\ntypedef enum WICBitmapLockFlags {\n    WICBitmapLockRead = 0x00000001,\n    WICBitmapLockWrite = 0x00000002,\n    WICBITMAPLOCKFLAGS_FORCE_DWORD = CODEC_FORCE_DWORD\n} WICBitmapLockFlags;\n\ntypedef enum WICBitmapPaletteType {\n    WICBitmapPaletteTypeCustom = 0x00000000,\n    WICBitmapPaletteTypeMedianCut = 0x00000001,\n    WICBitmapPaletteTypeFixedBW = 0x00000002,\n    WICBitmapPaletteTypeFixedHalftone8 = 0x00000003,\n    WICBitmapPaletteTypeFixedHalftone27 = 0x00000004,\n    WICBitmapPaletteTypeFixedHalftone64 = 0x00000005,\n    WICBitmapPaletteTypeFixedHalftone125 = 0x00000006,\n    WICBitmapPaletteTypeFixedHalftone216 = 0x00000007,\n    WICBitmapPaletteTypeFixedWebPalette = WICBitmapPaletteTypeFixedHalftone216,\n    WICBitmapPaletteTypeFixedHalftone252 = 0x00000008,\n    WICBitmapPaletteTypeFixedHalftone256 = 0x00000009,\n    WICBitmapPaletteTypeFixedGray4 = 0x0000000A,\n    WICBitmapPaletteTypeFixedGray16 = 0x0000000B,\n    WICBitmapPaletteTypeFixedGray256 = 0x0000000C,\n    WICBITMAPPALETTETYPE_FORCE_DWORD = CODEC_FORCE_DWORD\n} WICBitmapPaletteType;\n\ntypedef enum WICBitmapTransformOptions {\n    WICBitmapTransformRotate0 = 0x00000000,\n    WICBitmapTransformRotate90 = 0x00000001,\n    WICBitmapTransformRotate180 = 0x00000002,\n    WICBitmapTransformRotate270 = 0x00000003,\n    WICBitmapTransformFlipHorizontal = 0x00000008,\n    WICBitmapTransformFlipVertical = 0x00000010,\n    WICBITMAPTRANSFORMOPTIONS_FORCE_DWORD = CODEC_FORCE_DWORD\n} WICBitmapTransformOptions;\n\ntypedef enum WICColorContextType {\n    WICColorContextUninitialized = 0x00000000,\n    WICColorContextProfile = 0x00000001,\n    WICColorContextExifColorSpace = 0x00000002\n} WICColorContextType;\n\ntypedef enum WICComponentType {\n    WICDecoder = 0x00000001,\n    WICEncoder = 0x00000002,\n    WICPixelFormatConverter = 0x00000004,\n    WICMetadataReader = 0x00000008,\n    WICMetadataWriter = 0x00000010,\n    WICPixelFormat = 0x00000020,\n    WICCOMPONENTTYPE_FORCE_DWORD = CODEC_FORCE_DWORD\n} WICComponentType;\n\ntypedef enum WICComponentSigning {\n    WICComponentSigned = 0x00000001,\n    WICComponentUnsigned = 0x00000002,\n    WICComponentSafe = 0x00000004,\n    WICComponentDisabled = 0x80000000\n} WICComponentSigning;\n\ntypedef enum WICComponentEnumerateOptions {\n    WICComponentEnumerateDefault = 0x00000000,\n    WICComponentEnumerateRefresh = 0x00000001,\n    WICComponentEnumerateBuiltInOnly = 0x20000000,\n    WICComponentEnumerateUnsigned = 0x40000000,\n    WICComponentEnumerateDisabled = 0x80000000\n} WICComponentEnumerateOptions;\n\ntypedef enum WICJpegYCrCbSubsamplingOption {\n    WICJpegYCrCbSubsamplingDefault  = 0x00000000,\n    WICJpegYCrCbSubsampling420 = 0x00000001,\n    WICJpegYCrCbSubsampling422 = 0x00000002,\n    WICJpegYCrCbSubsampling444 = 0x00000003,\n    WICJpegYCrCbSubsampling440 = 0x00000004\n} WICJpegYCrCbSubsamplingOption;\n\ntypedef enum WICPixelFormatNumericRepresentation {\n    WICPixelFormatNumericRepresentationUnspecified = 0x00000000,\n    WICPixelFormatNumericRepresentationIndexed = 0x00000001,\n    WICPixelFormatNumericRepresentationUnsignedInteger = 0x00000002,\n    WICPixelFormatNumericRepresentationSignedInteger = 0x00000003,\n    WICPixelFormatNumericRepresentationFixed = 0x00000004,\n    WICPixelFormatNumericRepresentationFloat = 0x00000005,\n    WICPIXELFORMATNUMERICREPRESENTATION_FORCE_DWORD = CODEC_FORCE_DWORD\n} WICPixelFormatNumericRepresentation;\n\ntypedef enum WICTiffCompressionOption {\n    WICTiffCompressionDontCare = 0x00000000,\n    WICTiffCompressionNone = 0x00000001,\n    WICTiffCompressionCCITT3 = 0x00000002,\n    WICTiffCompressionCCITT4 = 0x00000003,\n    WICTiffCompressionLZW = 0x00000004,\n    WICTiffCompressionRLE = 0x00000005,\n    WICTiffCompressionZIP = 0x00000006,\n    WICTiffCompressionLZWHDifferencing = 0x00000007,\n    WICTIFFCOMPRESSIONOPTION_FORCE_DWORD = CODEC_FORCE_DWORD\n} WICTiffCompressionOption;\n\ntypedef enum WICPngFilterOption {\n    WICPngFilterUnspecified = 0,\n    WICPngFilterNone = 1,\n    WICPngFilterSub = 2,\n    WICPngFilterUp = 3,\n    WICPngFilterAverage = 4,\n    WICPngFilterPaeth = 5,\n    WICPngFilterAdaptive = 6,\n    WICPNFFILTEROPTION_FORCE_DWORD = CODEC_FORCE_DWORD\n} WICPngFilterOption;\n\ntypedef enum WICSectionAccessLevel {\n    WICSectionAccessLevelRead = 0x00000001,\n    WICSectionAccessLevelReadWrite = 0x00000003,\n    WICSectionAccessLevel_FORCE_DWORD = CODEC_FORCE_DWORD\n} WICSectionAccessLevel;\n\ntypedef GUID WICPixelFormatGUID;\ntypedef REFGUID REFWICPixelFormatGUID;\n\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormatDontCare, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x00);\")\ncpp_quote(\"#define GUID_WICPixelFormatUndefined GUID_WICPixelFormatDontCare\")\n\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormat1bppIndexed, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x01);\")\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormat2bppIndexed, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x02);\")\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormat4bppIndexed, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x03);\")\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormat8bppIndexed, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x04);\")\n\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormatBlackWhite, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x05);\")\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormat2bppGray, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x06);\")\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormat4bppGray, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x07);\")\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormat8bppGray, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x08);\")\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormat16bppGray, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0b);\")\n\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormat16bppBGR555, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x09);\")\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormat16bppBGR565, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0a);\")\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormat16bppBGRA5551, 0x05ec7c2b,0xf1e6,0x4961,0xad,0x46,0xe1,0xcc,0x81,0x0a,0x87,0xd2);\")\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormat24bppBGR, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0c);\")\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormat24bppRGB, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0d);\")\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormat32bppBGR, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0e);\")\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormat32bppBGRA, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0f);\")\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormat32bppPBGRA, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x10);\")\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormat32bppRGB, 0xd98c6b95,0x3efe,0x47d6,0xbb,0x25,0xeb,0x17,0x48,0xab,0x0c,0xf1);\")\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormat32bppRGBA, 0xf5c7ad2d,0x6a8d,0x43dd,0xa7,0xa8,0xa2,0x99,0x35,0x26,0x1a,0xe9);\")\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormat32bppPRGBA, 0x3cc4a650,0xa527,0x4d37,0xa9,0x16,0x31,0x42,0xc7,0xeb,0xed,0xba);\")\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormat32bppGrayFloat, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x11);\")\n\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormat48bppRGB, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x15);\")\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormat64bppRGBA, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x16);\")\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormat64bppPRGBA, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x17);\")\n\ncpp_quote(\"DEFINE_GUID(GUID_WICPixelFormat32bppCMYK, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x1c);\")\n\ncpp_quote(\"#if 0\")\ntypedef DWORD *D2D1_PIXEL_FORMAT;\ncpp_quote (\"#endif\")\n\ntypedef struct WICRect {\n    INT X;\n    INT Y;\n    INT Width;\n    INT Height;\n} WICRect;\n\ntypedef struct WICBitmapPattern {\n    ULARGE_INTEGER Position;\n    ULONG Length;\n    BYTE *Pattern;\n    BYTE *Mask;\n    BOOL EndOfStream;\n} WICBitmapPattern;\n\ntypedef struct WICImageParameters\n{\n    D2D1_PIXEL_FORMAT PixelFormat;\n    FLOAT DpiX;\n    FLOAT DpiY;\n    FLOAT Top;\n    FLOAT Left;\n    UINT32 PixelWidth;\n    UINT32 PixelHeight;\n} WICImageParameters;\n\ntypedef UINT32 WICColor;\n\ninterface ID2D1Device;\ninterface ID2D1Image;\ninterface IWICPalette;\n\n[\n    object,\n    uuid(3c613a02-34b2-44ea-9a7c-45aea9c6fd6d)\n]\ninterface IWICColorContext : IUnknown\n{\n    HRESULT InitializeFromFilename(\n        [in] LPCWSTR wzFilename);\n\n    HRESULT InitializeFromMemory(\n        [in, size_is(cbBufferSize)] const BYTE *pbBuffer,\n        [in] UINT cbBufferSize);\n\n    HRESULT InitializeFromExifColorSpace(\n        [in] UINT value);\n\n    HRESULT GetType(\n        [out] WICColorContextType *pType);\n\n    HRESULT GetProfileBytes(\n        [in] UINT cbBuffer,\n        [in, out, unique, size_is(cbBuffer)] BYTE *pbBuffer,\n        [out] UINT *pcbActual);\n\n    HRESULT GetExifColorSpace(\n        [out] UINT *pValue);\n}\n\n[\n    object,\n    uuid(00000120-a8f2-4877-ba0a-fd2b6645fb94)\n]\ninterface IWICBitmapSource : IUnknown\n{\n    HRESULT GetSize(\n        [out] UINT *puiWidth,\n        [out] UINT *puiHeight);\n\n    HRESULT GetPixelFormat(\n        [out] WICPixelFormatGUID *pPixelFormat);\n\n    HRESULT GetResolution(\n        [out] double *pDpiX,\n        [out] double *pDpiY);\n\n    HRESULT CopyPalette(\n        [in] IWICPalette *pIPalette);\n\n    HRESULT CopyPixels(\n        [in] const WICRect *prc,\n        [in] UINT cbStride,\n        [in] UINT cbBufferSize,\n        [out, size_is(cbBufferSize)] BYTE *pbBuffer);\n}\n\n[\n    object,\n    uuid(00000123-a8f2-4877-ba0a-fd2b6645fb94)\n]\ninterface IWICBitmapLock : IUnknown\n{\n    HRESULT GetSize(\n        [out] UINT *pWidth,\n        [out] UINT *pHeight);\n\n    HRESULT GetStride(\n        [out] UINT *pcbStride);\n\n    HRESULT GetDataPointer(\n        [out] UINT *pcbBufferSize,\n        [out, size_is(,*pcbBufferSize)] BYTE **ppbData);\n\n    HRESULT GetPixelFormat(\n        [out] WICPixelFormatGUID *pPixelFormat);\n}\n\n[\n    object,\n    uuid(5009834f-2d6a-41ce-9e1b-17c5aff7a782)\n]\ninterface IWICBitmapFlipRotator : IWICBitmapSource\n{\n    HRESULT Initialize(\n        [in] IWICBitmapSource *pISource,\n        [in] WICBitmapTransformOptions options);\n}\n\n[\n    object,\n    uuid(00000121-a8f2-4877-ba0a-fd2b6645fb94)\n]\ninterface IWICBitmap : IWICBitmapSource\n{\n    HRESULT Lock(\n        [in] const WICRect *prcLock,\n        [in] DWORD flags,\n        [out] IWICBitmapLock **ppILock);\n\n    HRESULT SetPalette(\n        [in] IWICPalette *pIPalette);\n\n    HRESULT SetResolution(\n        [in] double dpiX,\n        [in] double dpiY);\n}\n\n[\n    object,\n    uuid(00000040-a8f2-4877-ba0a-fd2b6645fb94)\n]\ninterface IWICPalette : IUnknown\n{\n    HRESULT InitializePredefined(\n        [in] WICBitmapPaletteType ePaletteType,\n        [in] BOOL fAddTransparentColor);\n\n    HRESULT InitializeCustom(\n        [in, size_is(colorCount)] WICColor *pColors,\n        [in] UINT colorCount);\n\n    HRESULT InitializeFromBitmap(\n        [in] IWICBitmapSource *pISurface,\n        [in] UINT colorCount,\n        [in] BOOL fAddTransparentColor);\n\n    HRESULT InitializeFromPalette(\n        [in] IWICPalette *pIPalette);\n\n    HRESULT GetType(\n        [out] WICBitmapPaletteType *pePaletteType);\n\n    HRESULT GetColorCount(\n        [out] UINT *pcCount);\n\n    HRESULT GetColors(\n        [in] UINT colorCount,\n        [out, size_is(colorCount)] WICColor *pColors,\n        [out] UINT *pcActualColors);\n\n    HRESULT IsBlackWhite(\n        [out] BOOL *pfIsBlackWhite);\n\n    HRESULT IsGrayscale(\n        [out] BOOL *pfIsGrayscale);\n\n    HRESULT HasAlpha(\n        [out] BOOL *pfHasAlpha);\n}\n\n[\n    object,\n    uuid(23bc3f0a-698b-4357-886b-f24d50671334)\n]\ninterface IWICComponentInfo : IUnknown\n{\n    HRESULT GetComponentType(\n        [out] WICComponentType *pType);\n\n    HRESULT GetCLSID(\n        [out] CLSID *pclsid);\n\n    HRESULT GetSigningStatus(\n        [out] DWORD *pStatus);\n\n    HRESULT GetAuthor(\n        [in] UINT cchAuthor,\n        [in, out, unique, size_is(cchAuthor)] WCHAR *wzAuthor,\n        [out] UINT *pcchActual);\n\n    HRESULT GetVendorGUID(\n        [out] GUID *pguidVendor);\n\n    HRESULT GetVersion(\n        [in] UINT cchVersion,\n        [in, out, unique, size_is(cchVersion)] WCHAR *wzVersion,\n        [out] UINT *pcchActual);\n\n    HRESULT GetSpecVersion(\n        [in] UINT cchSpecVersion,\n        [in, out, unique, size_is(cchSpecVersion)] WCHAR *wzSpecVersion,\n        [out] UINT *pcchActual);\n\n    HRESULT GetFriendlyName(\n        [in] UINT cchFriendlyName,\n        [in, out, unique, size_is(cchFriendlyName)] WCHAR *wzFriendlyName,\n        [out] UINT *pcchActual);\n}\n\n[\n    object,\n    uuid(30989668-e1c9-4597-b395-458eedb808df)\n]\ninterface IWICMetadataQueryReader : IUnknown\n{\n    HRESULT GetContainerFormat(\n        [out] GUID *pguidContainerFormat);\n\n    HRESULT GetLocation(\n        [in] UINT cchMaxLength,\n        [in, out, unique, size_is(cchMaxLength)] WCHAR *wzNamespace,\n        [out] UINT *pcchActualLength);\n\n    HRESULT GetMetadataByName(\n        [in] LPCWSTR wzName,\n        [in, out, unique] PROPVARIANT *pvarValue);\n\n    HRESULT GetEnumerator(\n        [out] IEnumString **ppIEnumString);\n}\n\n[\n    object,\n    uuid(a721791a-0def-4d06-bd91-2118bf1db10b)\n]\ninterface IWICMetadataQueryWriter : IWICMetadataQueryReader\n{\n    HRESULT SetMetadataByName(\n        [in] LPCWSTR wzName,\n        [in] const PROPVARIANT *pvarValue);\n\n    HRESULT RemoveMetadataByName(\n        [in] LPCWSTR wzName);\n}\n\n[\n    object,\n    uuid(3b16811b-6a43-4ec9-a813-3d930c13b940)\n]\ninterface IWICBitmapFrameDecode : IWICBitmapSource\n{\n    HRESULT GetMetadataQueryReader(\n        [out] IWICMetadataQueryReader **ppIMetadataQueryReader);\n\n    HRESULT GetColorContexts(\n        [in] UINT cCount,\n        [in, out, unique, size_is(cCount)] IWICColorContext **ppIColorContexts,\n        [out] UINT *pcActualCount);\n\n    HRESULT GetThumbnail(\n        [out] IWICBitmapSource **ppIThumbnail);\n}\n\n[\n    object,\n    uuid(e8eda601-3d48-431a-ab44-69059be88bbe)\n]\ninterface IWICPixelFormatInfo : IWICComponentInfo\n{\n    HRESULT GetFormatGUID(\n        [out] GUID* pFormat);\n\n    HRESULT GetColorContext(\n        [out] IWICColorContext **ppIColorContext);\n\n    HRESULT GetBitsPerPixel(\n        [out] UINT *puiBitsPerPixel);\n\n    HRESULT GetChannelCount(\n        [out] UINT *puiChannelCount);\n\n    HRESULT GetChannelMask(\n        [in] UINT uiChannelIndex,\n        [in] UINT cbMaskBuffer,\n        [in, out, unique, size_is(cbMaskBuffer)] BYTE *pbMaskBuffer,\n        [out] UINT *pcbActual);\n}\n\n[\n    object,\n    uuid(a9db33a2-af5f-43c7-b679-74f5984b5aa4)\n]\ninterface IWICPixelFormatInfo2 : IWICPixelFormatInfo\n{\n    HRESULT SupportsTransparency(\n        [out] BOOL *pfSupportsTransparency);\n\n    HRESULT GetNumericRepresentation(\n        [out] WICPixelFormatNumericRepresentation *pNumericRepresentation);\n}\n\n[\n    object,\n    uuid(e87a44c4-b76e-4c47-8b09-298eb12a2714)\n]\ninterface IWICBitmapCodecInfo : IWICComponentInfo\n{\n    HRESULT GetContainerFormat(\n        [out] GUID *pguidContainerFormat);\n\n    HRESULT GetPixelFormats(\n        [in] UINT cFormats,\n        [in, out, unique, size_is(cFormats)] GUID *pguidPixelFormats,\n        [out] UINT *pcActual);\n\n    HRESULT GetColorManagementVersion(\n        [in] UINT cchColorManagementVersion,\n        [in, out, unique, size_is(cchColorManagementVersion)] WCHAR *wzColorManagementVersion,\n        [out] UINT *pcchActual);\n\n    HRESULT GetDeviceManufacturer(\n        [in] UINT cchDeviceManufacturer,\n        [in, out, unique, size_is(cchDeviceManufacturer)] WCHAR *wzDeviceManufacturer,\n        [out] UINT *pcchActual);\n\n    HRESULT GetDeviceModels(\n        [in] UINT cchDeviceModels,\n        [in, out, unique, size_is(cchDeviceModels)] WCHAR *wzDeviceModels,\n        [out] UINT *pcchActual);\n\n    HRESULT GetMimeTypes(\n        [in] UINT cchMimeTypes,\n        [in, out, unique, size_is(cchMimeTypes)] WCHAR *wzMimeTypes,\n        [out] UINT *pcchActual);\n\n    HRESULT GetFileExtensions(\n        [in] UINT cchFileExtensions,\n        [in, out, unique, size_is(cchFileExtensions)] WCHAR *wzFileExtensions,\n        [out] UINT *pcchActual);\n\n    HRESULT DoesSupportAnimation(\n        [out] BOOL *pfSupportAnimation);\n\n    HRESULT DoesSupportChromaKey(\n        [out] BOOL *pfSupportChromaKey);\n\n    HRESULT DoesSupportLossless(\n        [out] BOOL *pfSupportLossless);\n\n    HRESULT DoesSupportMultiframe(\n        [out] BOOL *pfSupportMultiframe);\n\n    HRESULT MatchesMimeType(\n        [in] LPCWSTR wzMimeType,\n        [out] BOOL *pfMatches);\n}\n\ninterface IWICBitmapDecoder;\n\n[\n    object,\n    uuid(d8cd007f-d08f-4191-9bfc-236ea7f0e4b5)\n]\ninterface IWICBitmapDecoderInfo : IWICBitmapCodecInfo\n{\n    [local]\n    HRESULT GetPatterns(\n        [in] UINT cbSizePatterns,\n        [in, out, unique] WICBitmapPattern *pPatterns,\n        [in, out, unique] UINT *pcPatterns,\n        [in, out, unique] UINT *pcbPatternsActual);\n\n    HRESULT MatchesPattern(\n        [in] IStream *pIStream,\n        [out] BOOL *pfMatches);\n\n    HRESULT CreateInstance(\n        [out] IWICBitmapDecoder **ppIBitmapDecoder);\n}\n\n[\n    object,\n    uuid(9edde9e7-8dee-47ea-99df-e6faf2ed44bf)\n]\ninterface IWICBitmapDecoder : IUnknown\n{\n    HRESULT QueryCapability(\n        [in] IStream *pIStream,\n        [out] DWORD *pdwCapability);\n\n    HRESULT Initialize(\n        [in] IStream *pIStream,\n        [in] WICDecodeOptions cacheOptions);\n\n    HRESULT GetContainerFormat(\n        [out] GUID *pguidContainerFormat);\n\n    HRESULT GetDecoderInfo(\n        [out] IWICBitmapDecoderInfo **ppIDecoderInfo);\n\n    HRESULT CopyPalette(\n        [in] IWICPalette *pIPalette);\n\n    HRESULT GetMetadataQueryReader(\n        [out] IWICMetadataQueryReader **ppIMetadataQueryReader);\n\n    HRESULT GetPreview(\n        [out] IWICBitmapSource **ppIBitmapSource);\n\n    HRESULT GetColorContexts(\n        [in] UINT cCount,\n        [in, out, unique, size_is(cCount)] IWICColorContext **ppIColorContexts,\n        [out] UINT *pcActualCount);\n\n    HRESULT GetThumbnail(\n        [out] IWICBitmapSource **ppIThumbnail);\n\n    HRESULT GetFrameCount(\n        [out] UINT *pCount);\n\n    HRESULT GetFrame(\n        [in] UINT index,\n        [out] IWICBitmapFrameDecode **ppIBitmapFrame);\n}\n\n[\n    object,\n    uuid(00000105-a8f2-4877-ba0a-fd2b6645fb94)\n]\ninterface IWICBitmapFrameEncode : IUnknown\n{\n    HRESULT Initialize(\n        [in, unique] IPropertyBag2 *pIEncoderOptions);\n\n    HRESULT SetSize(\n        [in] UINT uiWidth,\n        [in] UINT uiHeight);\n\n    HRESULT SetResolution(\n        [in] double dpiX,\n        [in] double dpiY);\n\n    HRESULT SetPixelFormat(\n        [in, out] WICPixelFormatGUID *pPixelFormat);\n\n    HRESULT SetColorContexts(\n        [in] UINT cCount,\n        [in, size_is(cCount)] IWICColorContext **ppIColorContext);\n\n    HRESULT SetPalette(\n        [in] IWICPalette *pIPalette);\n\n    HRESULT SetThumbnail(\n        [in] IWICBitmapSource *pIThumbnail);\n\n    HRESULT WritePixels(\n        [in] UINT lineCount,\n        [in] UINT cbStride,\n        [in] UINT cbBufferSize,\n        [in, size_is(cbBufferSize)] BYTE *pbPixels);\n\n    HRESULT WriteSource(\n        [in] IWICBitmapSource *pIBitmapSource,\n        [in, unique] WICRect *prc);\n\n    HRESULT Commit();\n\n    HRESULT GetMetadataQueryWriter(\n        IWICMetadataQueryWriter **ppIMetadataQueryWriter);\n}\n\ninterface IWICBitmapEncoder;\n\n[\n    object,\n    uuid(94c9b4ee-a09f-4f92-8a1e-4a9bce7e76fb)\n]\ninterface IWICBitmapEncoderInfo : IWICBitmapCodecInfo\n{\n    HRESULT CreateInstance(\n        [out] IWICBitmapEncoder **ppIBitmapEncoder);\n}\n\n[\n    object,\n    uuid(00000103-a8f2-4877-ba0a-fd2b6645fb94)\n]\ninterface IWICBitmapEncoder : IUnknown\n{\n    HRESULT Initialize(\n        [in] IStream *pIStream,\n        [in] WICBitmapEncoderCacheOption cacheOption);\n\n    HRESULT GetContainerFormat(\n        [out] GUID *pguidContainerFormat);\n\n    HRESULT GetEncoderInfo(\n        [out] IWICBitmapEncoderInfo **ppIEncoderInfo);\n\n    HRESULT SetColorContexts(\n        [in] UINT cCount,\n        [in, size_is(cCount)] IWICColorContext **ppIColorContext);\n\n    HRESULT SetPalette(\n        [in] IWICPalette *pIPalette);\n\n    HRESULT SetThumbnail(\n        [in] IWICBitmapSource *pIThumbnail);\n\n    HRESULT SetPreview(\n        [in] IWICBitmapSource *pIPreview);\n\n    HRESULT CreateNewFrame(\n        [out] IWICBitmapFrameEncode **ppIFrameEncode,\n        [in, out, unique] IPropertyBag2 **ppIEncoderOptions);\n\n    HRESULT Commit();\n\n    HRESULT GetMetadataQueryWriter(\n        [out] IWICMetadataQueryWriter **ppIMetadataQueryWriter);\n}\n\n[\n    object,\n    uuid(00000301-a8f2-4877-ba0a-fd2b6645fb94)\n]\ninterface IWICFormatConverter : IWICBitmapSource\n{\n    HRESULT Initialize(\n        [in] IWICBitmapSource *pISource,\n        [in] REFWICPixelFormatGUID dstFormat,\n        [in] WICBitmapDitherType dither,\n        [in] IWICPalette *pIPalette,\n        [in] double alphaThresholdPercent,\n        [in] WICBitmapPaletteType paletteTranslate);\n\n    HRESULT CanConvert(\n        [in] REFWICPixelFormatGUID srcPixelFormat,\n        [in] REFWICPixelFormatGUID dstPixelFormat,\n        [out] BOOL *pfCanConvert);\n}\n\n[\n    object,\n    uuid(9f34fb65-13f4-4f15-bc57-3726b5e53d9f)\n]\ninterface IWICFormatConverterInfo : IWICComponentInfo\n{\n    HRESULT GetPixelFormats(\n        [in] UINT cFormats,\n        [in, out, size_is(cFormats)] WICPixelFormatGUID *pPixelFormatGUIDs,\n        [out] UINT *pcActual);\n\n    HRESULT CreateInstance(\n        [out] IWICFormatConverter **ppIConverter);\n}\n\n[\n    object,\n    uuid(135ff860-22b7-4ddf-b0f6-218f4f299a43)\n]\ninterface IWICStream : IStream\n{\n    HRESULT InitializeFromIStream(\n        [in] IStream *pIStream);\n\n    HRESULT InitializeFromFilename(\n        [in] LPCWSTR wzFileName,\n        [in] DWORD dwAccessMode);\n\n    HRESULT InitializeFromMemory(\n        [in, size_is(cbBufferSize)] BYTE *pbBuffer,\n        [in] DWORD cbBufferSize);\n\n    HRESULT InitializeFromIStreamRegion(\n        [in] IStream *pIStream,\n        [in] ULARGE_INTEGER ulOffset,\n        [in] ULARGE_INTEGER ulMaxSize);\n}\n\n[\n    object,\n    uuid(00000302-a8f2-4877-ba0a-fd2b6645fb94)\n]\ninterface IWICBitmapScaler : IWICBitmapSource\n{\n    HRESULT Initialize(\n        [in] IWICBitmapSource *pISource,\n        [in] UINT uiWidth,\n        [in] UINT uiHeight,\n        [in] WICBitmapInterpolationMode mode);\n}\n\n[\n    object,\n    uuid(e4fbcf03-223d-4e81-9333-d635556dd1b5)\n]\ninterface IWICBitmapClipper : IWICBitmapSource\n{\n    HRESULT Initialize(\n        [in] IWICBitmapSource *pISource,\n        [in] const WICRect *prc);\n}\n\n[\n    object,\n    uuid(b66f034f-d0e2-40ab-b436-6de39e321a94)\n]\ninterface IWICColorTransform : IWICBitmapSource\n{\n    HRESULT Initialize(\n        [in] IWICBitmapSource *pIBitmapSource,\n        [in] IWICColorContext *pIContextSource,\n        [in] IWICColorContext *pIContextDest,\n        [in] REFWICPixelFormatGUID pixelFmtDest);\n}\n\n[\n    object,\n    uuid(b84e2c09-78c9-4ac4-8bd3-524ae1663a2f)\n]\ninterface IWICFastMetadataEncoder : IUnknown\n{\n    HRESULT Commit();\n\n    HRESULT GetMetadataQueryWriter(\n        [out] IWICMetadataQueryWriter **ppIMetadataQueryWriter);\n}\n\n[\n    object,\n    uuid(04c75bf8-3ce1-473b-acc5-3cc4f5e94999),\n    local\n]\ninterface IWICImageEncoder : IUnknown\n{\n    HRESULT WriteFrame(\n        [in] ID2D1Image *image,\n        [in] IWICBitmapFrameEncode *encode,\n        [in, unique] const WICImageParameters *parameters);\n\n    HRESULT WriteFrameThumbnail(\n        [in] ID2D1Image *image,\n        [in] IWICBitmapFrameEncode *encode,\n        [in, unique] const WICImageParameters *parameters);\n\n    HRESULT WriteThumbnail(\n        [in] ID2D1Image *image,\n        [in] IWICBitmapEncoder *encoder,\n        [in, unique] const WICImageParameters *parameters);\n}\n\ncpp_quote(\"DEFINE_GUID(CLSID_WICImagingFactory,  0xcacaf262,0x9370,0x4615,0xa1,0x3b,0x9f,0x55,0x39,0xda,0x4c,0x0a);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICImagingFactory1, 0xcacaf262,0x9370,0x4615,0xa1,0x3b,0x9f,0x55,0x39,0xda,0x4c,0x0a);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICImagingFactory2, 0x317d06e8,0x5f24,0x433d,0xbd,0xf7,0x79,0xce,0x68,0xd8,0xab,0xc2);\")\n\n[\n    object,\n    uuid(ec5ec8a9-c395-4314-9c77-54d7a935ff70)\n]\ninterface IWICImagingFactory : IUnknown\n{\n    HRESULT CreateDecoderFromFilename(\n        [in] LPCWSTR wzFilename,\n        [in, unique] const GUID *pguidVendor,\n        [in] DWORD dwDesiredAccess,\n        [in] WICDecodeOptions metadataOptions,\n        [out, retval] IWICBitmapDecoder **ppIDecoder);\n\n    HRESULT CreateDecoderFromStream(\n        [in] IStream *pIStream,\n        [in, unique] const GUID *pguidVendor,\n        [in] WICDecodeOptions metadataOptions,\n        [out, retval] IWICBitmapDecoder **ppIDecoder);\n\n    HRESULT CreateDecoderFromFileHandle(\n        [in] ULONG_PTR hFile,\n        [in, unique] const GUID *pguidVendor,\n        [in] WICDecodeOptions metadataOptions,\n        [out, retval] IWICBitmapDecoder **ppIDecoder);\n\n    HRESULT CreateComponentInfo(\n        [in] REFCLSID clsidComponent,\n        [out] IWICComponentInfo **ppIInfo);\n\n    HRESULT CreateDecoder(\n        [in] REFGUID guidContainerFormat,\n        [in, unique] const GUID *pguidVendor,\n        [out, retval] IWICBitmapDecoder **ppIDecoder);\n\n    HRESULT CreateEncoder(\n        [in] REFGUID guidContainerFormat,\n        [in, unique] const GUID *pguidVendor,\n        [out, retval] IWICBitmapEncoder **ppIEncoder);\n\n    HRESULT CreatePalette(\n        [out] IWICPalette **ppIPalette);\n\n    HRESULT CreateFormatConverter(\n        [out] IWICFormatConverter **ppIFormatConverter);\n\n    HRESULT CreateBitmapScaler(\n        [out] IWICBitmapScaler **ppIBitmapScaler);\n\n    HRESULT CreateBitmapClipper(\n        [out] IWICBitmapClipper **ppIBitmapClipper);\n\n    HRESULT CreateBitmapFlipRotator(\n        [out] IWICBitmapFlipRotator **ppIBitmapFlipRotator);\n\n    HRESULT CreateStream(\n        [out] IWICStream **ppIWICStream);\n\n    HRESULT CreateColorContext(\n        [out] IWICColorContext **ppIWICColorContext);\n\n    HRESULT CreateColorTransformer(\n        [out] IWICColorTransform **ppIWICColorTransform);\n\n    HRESULT CreateBitmap(\n        [in] UINT uiWidth,\n        [in] UINT uiHeight,\n        [in] REFWICPixelFormatGUID pixelFormat,\n        [in] WICBitmapCreateCacheOption option,\n        [out] IWICBitmap **ppIBitmap);\n\n    HRESULT CreateBitmapFromSource(\n        [in] IWICBitmapSource *piBitmapSource,\n        [in] WICBitmapCreateCacheOption option,\n        [out] IWICBitmap **ppIBitmap);\n\n    HRESULT CreateBitmapFromSourceRect(\n        [in] IWICBitmapSource *piBitmapSource,\n        [in] UINT x,\n        [in] UINT y,\n        [in] UINT width,\n        [in] UINT height,\n        [out] IWICBitmap **ppIBitmap);\n\n    HRESULT CreateBitmapFromMemory(\n        [in] UINT uiWidth,\n        [in] UINT uiHeight,\n        [in] REFWICPixelFormatGUID pixelFormat,\n        [in] UINT cbStride,\n        [in] UINT cbBufferSize,\n        [in, size_is(cbBufferSize)] BYTE *pbBuffer,\n        [out] IWICBitmap **ppIBitmap);\n\n    HRESULT CreateBitmapFromHBITMAP(\n        [in] HBITMAP hBitmap,\n        [in, unique] HPALETTE hPalette,\n        [in] WICBitmapAlphaChannelOption options,\n        [out] IWICBitmap **ppIBitmap);\n\n    HRESULT CreateBitmapFromHICON(\n        [in] HICON hIcon,\n        [out] IWICBitmap **ppIBitmap);\n\n    HRESULT CreateComponentEnumerator(\n        [in] DWORD componentTypes,\n        [in] DWORD options,\n        [out] IEnumUnknown **ppIEnumUnknown);\n\n    HRESULT CreateFastMetadataEncoderFromDecoder(\n        [in] IWICBitmapDecoder *pIDecoder,\n        [out] IWICFastMetadataEncoder **ppIFastEncoder);\n\n    HRESULT CreateFastMetadataEncoderFromFrameDecode(\n        [in] IWICBitmapFrameDecode *pIFrameDecoder,\n        [out] IWICFastMetadataEncoder **ppIFastEncoder);\n\n    HRESULT CreateQueryWriter(\n        [in] REFGUID guidMetadataFormat,\n        [in, unique] const GUID *pguidVendor,\n        [out] IWICMetadataQueryWriter **ppIQueryWriter);\n\n    HRESULT CreateQueryWriterFromReader(\n        [in] IWICMetadataQueryReader *pIQueryReader,\n        [in, unique] const GUID *pguidVendor,\n        [out] IWICMetadataQueryWriter **ppIQueryWriter);\n}\n\n[\n   object,\n   uuid(7b816b45-1996-4476-b132-de9e247c8af0),\n   local\n]\ninterface IWICImagingFactory2 : IWICImagingFactory\n{\n    HRESULT CreateImageEncoder(\n        [in] ID2D1Device *device,\n        [out] IWICImageEncoder **encoder);\n}\n\n[\n    local,\n    object,\n    uuid(dc2bb46d-3f07-481e-8625-220c4aedbb33)\n]\ninterface IWICEnumMetadataItem : IUnknown\n{\n    HRESULT Next(\n        [in] ULONG celt,\n        [in, out, unique, size_is(celt)] PROPVARIANT *rgeltSchema,\n        [in, out, size_is(celt)] PROPVARIANT *rgeltId,\n        [in, out, optional, size_is(celt)] PROPVARIANT *rgeltValue,\n        [out, optional] ULONG *pceltFetched);\n\n    HRESULT Skip(\n        [in] ULONG celt);\n\n    HRESULT Reset();\n\n    HRESULT Clone(\n        [out] IWICEnumMetadataItem **ppIEnumMetadataItem);\n}\n\ncpp_quote(\"HRESULT WINAPI WICConvertBitmapSource(REFWICPixelFormatGUID dstFormat, IWICBitmapSource *pISrc, IWICBitmapSource **ppIDst);\")\ncpp_quote(\"HRESULT WINAPI WICCreateBitmapFromSection(UINT width, UINT height, REFWICPixelFormatGUID format, HANDLE section, UINT stride, UINT offset, IWICBitmap **bitmap);\")\ncpp_quote(\"HRESULT WINAPI WICCreateBitmapFromSectionEx(UINT width, UINT height, REFWICPixelFormatGUID format, HANDLE section, UINT stride, UINT offset, WICSectionAccessLevel access, IWICBitmap **bitmap);\")\n\ncpp_quote(\"HRESULT WINAPI WICMapGuidToShortName(REFGUID,UINT,WCHAR *,UINT *);\")\ncpp_quote(\"HRESULT WINAPI WICMapShortNameToGuid(PCWSTR,GUID *);\")\ncpp_quote(\"HRESULT WINAPI WICMapSchemaToName(REFGUID,LPWSTR,UINT,WCHAR *,UINT *);\")\n\ncpp_quote(\"DEFINE_GUID(CLSID_WICBmpDecoder, 0x6b462062,0x7cbf,0x400d,0x9f,0xdb,0x81,0x3d,0xd1,0x0f,0x27,0x78);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICPngDecoder, 0x389ea17b,0x5078,0x4cde,0xb6,0xef,0x25,0xc1,0x51,0x75,0xc7,0x51);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICIcoDecoder, 0xc61bfcdf,0x2e0f,0x4aad,0xa8,0xd7,0xe0,0x6b,0xaf,0xeb,0xcd,0xfe);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICJpegDecoder, 0x9456a480,0xe88b,0x43ea,0x9e,0x73,0x0b,0x2d,0x9b,0x71,0xb1,0xca);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICGifDecoder, 0x381dda3c,0x9ce9,0x4834,0xa2,0x3e,0x1f,0x98,0xf8,0xfc,0x52,0xbe);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICTiffDecoder, 0xb54e85d9,0xfe23,0x499f,0x8b,0x88,0x6a,0xce,0xa7,0x13,0x75,0x2b);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICWmpDecoder, 0xa26cec36,0x234c,0x4950,0xae,0x16,0xe3,0x4a,0xac,0xe7,0x1d,0x0d);\")\n\ncpp_quote(\"DEFINE_GUID(CLSID_WICBmpEncoder, 0x69be8bb4,0xd66d,0x47c8,0x86,0x5a,0xed,0x15,0x89,0x43,0x37,0x82);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICPngEncoder, 0x27949969,0x876a,0x41d7,0x94,0x47,0x56,0x8f,0x6a,0x35,0xa4,0xdc);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICJpegEncoder, 0x1a34f5c1,0x4a5a,0x46dc,0xb6,0x44,0x1f,0x45,0x67,0xe7,0xa6,0x76);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICGifEncoder, 0x114f5598,0x0b22,0x40a0,0x86,0xa1,0xc8,0x3e,0xa4,0x95,0xad,0xbd);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICTiffEncoder, 0x0131be10,0x2001,0x4c5f,0xa9,0xb0,0xcc,0x88,0xfa,0xb6,0x4c,0xe8);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICWmpEncoder, 0xac4ce3cb,0xe1c1,0x44cd,0x82,0x15,0x5a,0x16,0x65,0x50,0x9e,0xc2);\")\n\ncpp_quote(\"DEFINE_GUID(CLSID_WICDefaultFormatConverter, 0x1a3f11dc,0xb514,0x4b17,0x8c,0x5f,0x21,0x54,0x51,0x38,0x52,0xf1);\")\n\ncpp_quote(\"DEFINE_GUID(GUID_ContainerFormatBmp, 0x0af1d87e,0xfcfe,0x4188,0xbd,0xeb,0xa7,0x90,0x64,0x71,0xcb,0xe3);\")\ncpp_quote(\"DEFINE_GUID(GUID_ContainerFormatPng, 0x1b7cfaf4,0x713f,0x473c,0xbb,0xcd,0x61,0x37,0x42,0x5f,0xae,0xaf);\")\ncpp_quote(\"DEFINE_GUID(GUID_ContainerFormatIco, 0xa3a860c4,0x338f,0x4c17,0x91,0x9a,0xfb,0xa4,0xb5,0x62,0x8f,0x21);\")\ncpp_quote(\"DEFINE_GUID(GUID_ContainerFormatJpeg, 0x19e4a5aa,0x5662,0x4fc5,0xa0,0xc0,0x17,0x58,0x02,0x8e,0x10,0x57);\")\ncpp_quote(\"DEFINE_GUID(GUID_ContainerFormatTiff, 0x163bcc30,0xe2e9,0x4f0b,0x96,0x1d,0xa3,0xe9,0xfd,0xb7,0x88,0xa3);\")\ncpp_quote(\"DEFINE_GUID(GUID_ContainerFormatGif, 0x1f8a5601,0x7d4d,0x4cbd,0x9c,0x82,0x1b,0xc8,0xd4,0xee,0xb9,0xa5);\")\ncpp_quote(\"DEFINE_GUID(GUID_ContainerFormatWmp, 0x57a37caa,0x367a,0x4540,0x91,0x6b,0xf1,0x83,0xc5,0x09,0x3a,0x4b);\")\n\ncpp_quote(\"DEFINE_GUID(GUID_VendorMicrosoft, 0xf0e749ca,0xedef,0x4589,0xa7,0x3a,0xee,0x0e,0x62,0x6a,0x2a,0x2b);\")\n\ncpp_quote(\"DEFINE_GUID(CLSID_WICImagingCategories, 0xfae3d380,0xfea4,0x4623,0x8c,0x75,0xc6,0xb6,0x11,0x10,0xb6,0x81);\")\ncpp_quote(\"DEFINE_GUID(CATID_WICBitmapDecoders, 0x7ed96837,0x96f0,0x4812,0xb2,0x11,0xf1,0x3c,0x24,0x11,0x7e,0xd3);\")\ncpp_quote(\"DEFINE_GUID(CATID_WICBitmapEncoders, 0xac757296,0x3522,0x4e11,0x98,0x62,0xc1,0x7b,0xe5,0xa1,0x76,0x7e);\")\ncpp_quote(\"DEFINE_GUID(CATID_WICFormatConverters, 0x7835eae8,0xbf14,0x49d1,0x93,0xce,0x53,0x3a,0x40,0x7b,0x22,0x48);\")\ncpp_quote(\"DEFINE_GUID(CATID_WICMetadataReader, 0x05af94d8,0x7174,0x4cd2,0xbe,0x4a,0x41,0x24,0xb8,0x0e,0xe4,0xb8);\")\ncpp_quote(\"DEFINE_GUID(CATID_WICPixelFormats, 0x2b46e70f,0xcda7,0x473e,0x89,0xf6,0xdc,0x96,0x30,0xa2,0x39,0x0b);\")\n"
  },
  {
    "path": "wine/windows/wincodecsdk.idl",
    "content": "/*\n * Copyright 2011 Vincent Povirk for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"wtypes.idl\";\nimport \"wincodec.idl\";\n\ntypedef enum WICPersistOptions {\n    WICPersistOptionDefault = 0x00000000,\n    WICPersistOptionLittleEndian = 0x00000000,\n    WICPersistOptionBigEndian = 0x00000001,\n    WICPersistOptionStrictFormat = 0x00000002,\n    WICPersistOptionNoCacheStream = 0x00000004,\n    WICPersistOptionPreferUTF8 = 0x00000008,\n    WICPersistOptionMask = 0x0000FFFF\n} WICPersistOptions;\n\ntypedef enum WICMetadataCreationOptions {\n    WICMetadataCreationDefault = 0x00000000,\n    WICMetadataCreationAllowUnknown = WICMetadataCreationDefault,\n    WICMetadataCreationFailUnknown = 0x00010000,\n    WICMetadataCreationMask = 0xFFFF0000\n} WICMetadataCreationOptions;\n\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatUnknown, 0xa45e592f,0x9078,0x4a7c,0xad,0xb5,0x4e,0xdc,0x4f,0xd6,0x1b,0x1f);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatChunkcHRM, 0x9db3655b,0x2842,0x44b3,0x80,0x67,0x12,0xe9,0xb3,0x75,0x55,0x6a);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatChunkgAMA, 0xf00935a5,0x1d5d,0x4cd1,0x81,0xb2,0x93,0x24,0xd7,0xec,0xa7,0x81);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatChunktEXt, 0x568d8936,0xc0a9,0x4923,0x90,0x5d,0xdf,0x2b,0x38,0x23,0x8f,0xbc);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatChunktIME, 0x6b00ae2d,0xe24b,0x460a,0x98,0xb6,0x87,0x8b,0xd0,0x30,0x72,0xfd);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatIfd, 0x537396c6,0x2d8a,0x4bb6,0x9b,0xf8,0x2f,0x0a,0x8e,0x2a,0x3a,0xdf);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatExif, 0x1c3c4f9d,0xb84a,0x467d,0x94,0x93,0x36,0xcf,0xbd,0x59,0xea,0x57);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatXMP, 0xbb5acc38,0xf216,0x4cec,0xa6,0xc5,0x5f,0x6e,0x73,0x97,0x63,0xa9);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatXMPStruct, 0x22383cf1,0xed17,0x4e2e,0xaf,0x17,0xd8,0x5b,0x8f,0x6b,0x30,0xd0);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatIMD, 0xbd2bb086,0x4d52,0x48dd,0x96,0x77,0xdb,0x48,0x3e,0x85,0xae,0x8f);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatLSD, 0xe256031e,0x6299,0x4929,0xb9,0x8d,0x5a,0xc8,0x84,0xaf,0xba,0x92);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatGCE, 0x2a25cad8,0xdeeb,0x4c69,0xa7,0x88,0x0e,0xc2,0x26,0x6d,0xca,0xfd);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatAPE, 0x2e043dc2,0xc967,0x4e05,0x87,0x5e,0x61,0x8b,0xf6,0x7e,0x85,0xc3);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatGifComment, 0xc4b6e0e0,0xcfb4,0x4ad3,0xab,0x33,0x9a,0xad,0x23,0x55,0xa3,0x4a);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatSubIfd, 0x58a2e128,0x2db9,0x4e57,0xbb,0x14,0x51,0x77,0x89,0x1e,0xd3,0x31);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatGps, 0x7134ab8a,0x9351,0x44ad,0xaf,0x62,0x44,0x8d,0xb6,0xb5,0x02,0xec);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatInterop, 0xed686f8e,0x681f,0x4c8b,0xbd,0x41,0xa8,0xad,0xdb,0xf6,0xb3,0xfc);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatApp0, 0x79007028,0x268d,0x45d6,0xa3,0xc2,0x35,0x4e,0x6a,0x50,0x4b,0xc9);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatApp1, 0x8fd3dfc3,0xf951,0x492b,0x81,0x7f,0x69,0xc2,0xe6,0xd9,0xa5,0xb0);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatApp13, 0x326556a2,0xf502,0x4354,0x9c,0xc0,0x8e,0x3f,0x48,0xea,0xf6,0xb5);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatIPTC, 0x4fab0914,0xe129,0x4087,0xa1,0xd1,0xbc,0x81,0x2d,0x45,0xa7,0xb5);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatIRB, 0x16100d66,0x8570,0x4bb9,0xb9,0x2d,0xfd,0xa4,0xb2,0x3e,0xce,0x67);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormat8BIMIPTC, 0x0010568c,0x0852,0x4e6a,0xb1,0x91,0x5c,0x33,0xac,0x5b,0x04,0x30);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormat8BIMResolutionInfo, 0x739f305d,0x81db,0x43cb,0xac,0x5e,0x55,0x01,0x3e,0xf9,0xf0,0x03);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormat8BIMIPTCDigest, 0x1ca32285,0x9ccd,0x4786,0x8b,0xd8,0x79,0x53,0x9d,0xb6,0xa0,0x06);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatThumbnail, 0x243dcee9,0x8703,0x40ee,0x8e,0xf0,0x22,0xa6,0x0,0xb8,0x5,0x8c);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatXMPBag, 0x833cca5f,0xdcb7,0x4516,0x80,0x6f,0x65,0x96,0xab,0x26,0xdc,0xe4);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatXMPSeq, 0x63e8df02,0xeb6c,0x456c,0xa2,0x24,0xb2,0x5e,0x79,0x4f,0xd6,0x48);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatXMPAlt, 0x7b08a675,0x91aa,0x481b,0xa7,0x98,0x4d,0xa9,0x49,0x08,0x61,0x3b);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatJpegChrominance, 0xf73d0dcf,0xcec6,0x4f85,0x9b,0x0e,0x1c,0x39,0x56,0xb1,0xbe,0xf7);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatJpegLuminance, 0x86908007,0xedfc,0x4860,0x8d,0x4b,0x4e,0xe6,0xe8,0x3e,0x60,0x58);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatJpegComment, 0x220e5f33,0xafd3,0x474e,0x9d,0x31,0x7d,0x4f,0xe7,0x30,0xf5,0x57);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatChunkbKGD, 0xe14d3571,0x6b47,0x4dea,0xb6,0xa,0x87,0xce,0xa,0x78,0xdf,0xb7);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatChunkiTXt, 0xc2bec729,0xb68,0x4b77,0xaa,0xe,0x62,0x95,0xa6,0xac,0x18,0x14);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatChunkhIST, 0xc59a82da,0xdb74,0x48a4,0xbd,0x6a,0xb6,0x9c,0x49,0x31,0xef,0x95);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatChunkiCCP, 0xeb4349ab,0xb685,0x450f,0x91,0xb5,0xe8,0x2,0xe8,0x92,0x53,0x6c);\")\ncpp_quote(\"DEFINE_GUID(GUID_MetadataFormatChunksRGB, 0xc115fd36,0xcc6f,0x4e3f,0x83,0x63,0x52,0x4b,0x87,0xc6,0xb0,0xd9);\")\n\ncpp_quote(\"DEFINE_GUID(CLSID_WICUnknownMetadataReader, 0x699745c2,0x5066,0x4b82,0xa8,0xe3,0xd4,0x04,0x78,0xdb,0xec,0x8c);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICUnknownMetadataWriter, 0xa09cca86,0x27ba,0x4f39,0x90,0x53,0x12,0x1f,0xa4,0xdc,0x08,0xfc);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICPngChrmMetadataReader, 0xf90b5f36,0x367b,0x402a,0x9d,0xd1,0xbc,0x0f,0xd5,0x9d,0x8f,0x62);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICPngGamaMetadataReader, 0x3692ca39,0xe082,0x4350,0x9e,0x1f,0x37,0x04,0xcb,0x08,0x3c,0xd5);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICPngTextMetadataReader, 0x4b59afcc,0xb8c3,0x408a,0xb6,0x70,0x89,0xe5,0xfa,0xb6,0xfd,0xa7);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICPngTextMetadataWriter, 0xb5ebafb9,0x253e,0x4a72,0xa7,0x44,0x07,0x62,0xd2,0x68,0x56,0x83);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICIfdMetadataReader, 0x8f914656,0x9d0a,0x4eb2,0x90,0x19,0x0b,0xf9,0x6d,0x8a,0x9e,0xe6);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICIfdMetadataWriter, 0xb1ebfc28,0xc9bd,0x47a2,0x8d,0x33,0xb9,0x48,0x76,0x97,0x77,0xa7);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICExifMetadataReader, 0xd9403860,0x297f,0x4a49,0xbf,0x9b,0x77,0x89,0x81,0x50,0xa4,0x42);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICExifMetadataWriter, 0xc9a14cda,0xc339,0x460b,0x90,0x78,0xd4,0xde,0xbc,0xfa,0xbe,0x91);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICXMPStructMetadataReader, 0x01b90d9a,0x8209,0x47f7,0x9c,0x52,0xe1,0x24,0x4b,0xf5,0x0c,0xed);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICXMPStructMetadataWriter, 0x22c21f93,0x7ddb,0x411c,0x9b,0x17,0xc5,0xb7,0xbd,0x06,0x4a,0xbc);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICLSDMetadataReader, 0x41070793,0x59e4,0x479a,0xa1,0xf7,0x95,0x4a,0xdc,0x2e,0xf5,0xfc);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICLSDMetadataWriter, 0x73c037e7,0xe5d9,0x4954,0x87,0x6a,0x6d,0xa8,0x1d,0x6e,0x57,0x68);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICIMDMetadataReader, 0x7447a267,0x0015,0x42c8,0xa8,0xf1,0xfb,0x3b,0x94,0xc6,0x83,0x61);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICIMDMetadataWriter, 0x8c89071f,0x452e,0x4e95,0x96,0x82,0x9d,0x10,0x24,0x62,0x71,0x72);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICGCEMetadataReader, 0xb92e345d,0xf52d,0x41f3,0xb5,0x62,0x08,0x1b,0xc7,0x72,0xe3,0xb9);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICGCEMetadataWriter, 0xaf95dc76,0x16b2,0x47f4,0xb3,0xea,0x3c,0x31,0x79,0x66,0x93,0xe7);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICAPEMetadataReader, 0x1767b93a,0xb021,0x44ea,0x92,0x0f,0x86,0x3c,0x11,0xf4,0xf7,0x68);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICAPEMetadataWriter, 0xbd6edfca,0x2890,0x482f,0xb2,0x33,0x8d,0x73,0x39,0xa1,0xcf,0x8d);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICGifCommentMetadataReader, 0x32557d3b,0x69dc,0x4f95,0x83,0x6e,0xf5,0x97,0x2b,0x2f,0x61,0x59);\")\ncpp_quote(\"DEFINE_GUID(CLSID_WICGifCommentMetadataWriter, 0xa02797fc,0xc4ae,0x418c,0xaf,0x95,0xe6,0x37,0xc7,0xea,0xd2,0xa1);\")\n\ntypedef struct WICMetadataPattern {\n    ULARGE_INTEGER Position;\n    ULONG Length;\n    BYTE *Pattern;\n    BYTE *Mask;\n    ULARGE_INTEGER DataOffset;\n} WICMetadataPattern;\n\ntypedef struct WICMetadataHeader {\n    ULARGE_INTEGER Position;\n    ULONG Length;\n    BYTE *Header;\n    ULARGE_INTEGER DataOffset;\n} WICMetadataHeader;\n\n[\n    object,\n    uuid(aba958bf-c672-44d1-8d61-ce6df2e682c2)\n]\ninterface IWICMetadataHandlerInfo : IWICComponentInfo\n{\n    HRESULT GetMetadataFormat(\n        [out] GUID *pguidMetadataFormat);\n\n    HRESULT GetContainerFormats(\n        [in] UINT cContainerFormats,\n        [in, out, unique, size_is(cContainerFormats)] GUID *pguidContainerFormats,\n        [out] UINT *pcchActual);\n\n    HRESULT GetDeviceManufacturer(\n        [in] UINT cchDeviceManufacturer,\n        [in, out, unique, size_is(cchDeviceManufacturer)] WCHAR *wzDeviceManufacturer,\n        [out] UINT *pcchActual);\n\n    HRESULT GetDeviceModels(\n        [in] UINT cchDeviceModels,\n        [in, out, unique, size_is(cchDeviceModels)] WCHAR *wzDeviceModels,\n        [out] UINT *pcchActual);\n\n    HRESULT DoesRequireFullStream(\n        [out] BOOL *pfRequiresFullStream);\n\n    HRESULT DoesSupportPadding(\n        [out] BOOL *pfSupportsPadding);\n\n    HRESULT DoesRequireFixedSize(\n        [out] BOOL *pfFixedSize);\n}\n\n[\n    object,\n    uuid(9204fe99-d8fc-4fd5-a001-9536b067a899)\n]\ninterface IWICMetadataReader : IUnknown\n{\n    HRESULT GetMetadataFormat(\n        [out] GUID *pguidMetadataFormat);\n\n    HRESULT GetMetadataHandlerInfo(\n        [out] IWICMetadataHandlerInfo **ppIHandler);\n\n    HRESULT GetCount(\n        [out] UINT *pcCount);\n\n    HRESULT GetValueByIndex(\n        [in] UINT nIndex,\n        [in, out, unique] PROPVARIANT *pvarSchema,\n        [in, out, unique] PROPVARIANT *pvarId,\n        [in, out, unique] PROPVARIANT *pvarValue);\n\n    HRESULT GetValue(\n        [in] const PROPVARIANT *pvarSchema,\n        [in] const PROPVARIANT *pvarId,\n        [in, out, unique] PROPVARIANT *pvarValue);\n\n    HRESULT GetEnumerator(\n        [out] IWICEnumMetadataItem **ppIEnumMetadata);\n}\n\n[\n    object,\n    uuid(eebf1f5b-07c1-4447-a3ab-22acaf78a804)\n]\ninterface IWICMetadataReaderInfo : IWICMetadataHandlerInfo\n{\n    [local]\n    HRESULT GetPatterns(\n        [in] REFGUID guidContainerFormat,\n        [in] UINT cbSize,\n        [out, unique] WICMetadataPattern *pPattern,\n        [out, unique] UINT *pcCount,\n        [out, unique] UINT *pcbActual);\n\n    HRESULT MatchesPattern(\n        [in] REFGUID guidContainerFormat,\n        [in] IStream *pIStream,\n        [out] BOOL *pfMatches);\n\n    HRESULT CreateInstance(\n        [out] IWICMetadataReader **ppIReader);\n}\n\n[\n    object,\n    uuid(f7836e16-3be0-470b-86bb-160d0aecd7de)\n]\ninterface IWICMetadataWriter : IWICMetadataReader\n{\n    HRESULT SetValue(\n        [in, unique] const PROPVARIANT *pvarSchema,\n        [in] const PROPVARIANT *pvarId,\n        [in] const PROPVARIANT *pvarValue);\n\n    HRESULT SetValueByIndex(\n        [in] UINT nIndex,\n        [in, unique] const PROPVARIANT *pvarSchema,\n        [in] const PROPVARIANT *pvarId,\n        [in] const PROPVARIANT *pvarValue);\n\n    HRESULT RemoveValue(\n        [in, unique] const PROPVARIANT *pvarSchema,\n        [in] const PROPVARIANT *pvarId);\n\n    HRESULT RemoveValueByIndex(\n        [in] UINT nIndex);\n}\n\n[\n    object,\n    uuid(b22e3fba-3925-4323-b5c1-9ebfc430f236)\n]\ninterface IWICMetadataWriterInfo : IWICMetadataHandlerInfo\n{\n    [local]\n    HRESULT GetHeader(\n        [in] REFGUID guidContainerFormat,\n        [in] UINT cbSize,\n        [out, unique] WICMetadataHeader *pHeader,\n        [out, unique] UINT *pcbActual);\n\n    HRESULT CreateInstance(\n        [out] IWICMetadataWriter **ppIWriter);\n}\n\n[\n    object,\n    uuid(feaa2a8d-b3f3-43e4-b25c-d1de990a1ae1)\n]\ninterface IWICMetadataBlockReader : IUnknown\n{\n    HRESULT GetContainerFormat(\n        [out] GUID *pguidContainerFormat);\n\n    HRESULT GetCount(\n        [out] UINT *pcCount);\n\n    HRESULT GetReaderByIndex(\n        [in] UINT nIndex,\n        [out] IWICMetadataReader **ppIMetadataReader);\n\n    HRESULT GetEnumerator(\n        [out] IEnumUnknown **ppIEnumMetadata);\n}\n\n[\n    object,\n    uuid(08fb9676-b444-41e8-8dbe-6a53a542bff1)\n]\ninterface IWICMetadataBlockWriter : IWICMetadataBlockReader\n{\n    HRESULT InitializeFromBlockReader(\n        [in] IWICMetadataBlockReader *pIMDBlockReader);\n\n    HRESULT GetWriterByIndex(\n        [in] UINT nIndex,\n        [out] IWICMetadataWriter **ppIMetadataWriter);\n\n    HRESULT AddWriter(\n        [in] IWICMetadataWriter *pIMetadataWriter);\n\n    HRESULT SetWriterByIndex(\n        [in] UINT nIndex,\n        [in] IWICMetadataWriter *pIMetadataWriter);\n\n    HRESULT RemoveWriterByIndex(\n        [in] UINT nIndex);\n}\n\n[\n    object,\n    uuid(00675040-6908-45f8-86a3-49c7dfd6d9ad)\n]\ninterface IWICPersistStream : IPersistStream\n{\n    HRESULT LoadEx(\n        [in, unique] IStream *pIStream,\n        [in, unique] const GUID *pguidPreferredVendor,\n        [in] DWORD dwPersistOptions);\n\n    HRESULT SaveEx(\n        [in] IStream *pIStream,\n        [in] DWORD dwPersistOptions,\n        [in] BOOL fClearDirty);\n}\n\n[\n    object,\n    uuid(412d0c3a-9650-44fa-af5b-dd2a06c8e8fb)\n]\ninterface IWICComponentFactory : IWICImagingFactory\n{\n    HRESULT CreateMetadataReader(\n        [in] REFGUID guidMetadataFormat,\n        [in, unique] const GUID *pguidVendor,\n        [in] DWORD dwOptions,\n        [in] IStream *pIStream,\n        [out] IWICMetadataReader **ppIReader);\n\n    HRESULT CreateMetadataReaderFromContainer(\n        [in] REFGUID guidMetadataFormat,\n        [in, unique] const GUID *pguidVendor,\n        [in] DWORD dwOptions,\n        [in] IStream *pIStream,\n        [out] IWICMetadataReader **ppIReader);\n\n    HRESULT CreateMetadataWriter(\n        [in] REFGUID guidMetadataFormat,\n        [in, unique] const GUID *pguidVendor,\n        [in] DWORD dwMetadataOptions,\n        [out] IWICMetadataWriter **ppIWriter);\n\n    HRESULT CreateMetadataWriterFromReader(\n        [in] IWICMetadataReader *pIReader,\n        [in, unique] const GUID *pguidVendor,\n        [out] IWICMetadataWriter **ppIWriter);\n\n    HRESULT CreateQueryReaderFromBlockReader(\n        [in] IWICMetadataBlockReader *pIBlockReader,\n        [out] IWICMetadataQueryReader **ppIQueryReader);\n\n    HRESULT CreateQueryWriterFromBlockWriter(\n        [in] IWICMetadataBlockWriter *pIBlockWriter,\n        [out] IWICMetadataQueryWriter **ppIQueryWriter);\n\n    HRESULT CreateEncoderPropertyBag(\n        [in, unique, size_is(cCount)] PROPBAG2 *ppropOptions,\n        [in] UINT cCount,\n        [out] IPropertyBag2 **ppIPropertyBag);\n}\n"
  },
  {
    "path": "wine/windows/wincon.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINCON_H\n#define __WINE_WINCON_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef NOGDI\n#include <wingdi.h>\n#endif\n\n/* AttachConsole special pid value */\n#define ATTACH_PARENT_PROCESS ((DWORD) -1)\n\n/* GetConsoleDisplayMode flags */\n#define CONSOLE_FULLSCREEN          1\n#define CONSOLE_FULLSCREEN_HARDWARE 2\n\n/* SetConsoleDisplayMode flags */\n#define CONSOLE_FULLSCREEN_MODE 1\n#define CONSOLE_WINDOWED_MODE   2\n\n/* CONSOLE_SELECTION_INFO.dwFlags */\n#define CONSOLE_NO_SELECTION          0x00\n#define CONSOLE_SELECTION_IN_PROGRESS 0x01\n#define CONSOLE_SELECTION_NOT_EMPTY   0x02\n#define CONSOLE_MOUSE_SELECTION       0x04\n#define CONSOLE_MOUSE_DOWN            0x08\n\n/* handler routine control signal type */\n#define CTRL_C_EVENT        0\n#define CTRL_BREAK_EVENT    1\n#define CTRL_CLOSE_EVENT    2\n#define CTRL_LOGOFF_EVENT   5\n#define CTRL_SHUTDOWN_EVENT 6\n\n/* Console Mode flags */\n#define ENABLE_PROCESSED_INPUT 0x0001\n#define ENABLE_LINE_INPUT      0x0002\n#define ENABLE_ECHO_INPUT      0x0004\n#define ENABLE_WINDOW_INPUT    0x0008\n#define ENABLE_MOUSE_INPUT     0x0010\n#define ENABLE_INSERT_MODE     0x0020\n#define ENABLE_QUICK_EDIT_MODE 0x0040\n#define ENABLE_EXTENDED_FLAGS  0x0080\n#define ENABLE_AUTO_POSITION   0x0100\n\n#define ENABLE_PROCESSED_OUTPUT   0x01\n#define ENABLE_WRAP_AT_EOL_OUTPUT 0x02\n\n\ntypedef BOOL (WINAPI *PHANDLER_ROUTINE)(DWORD dwCtrlType);\n\n/* Attributes flags: */\n\n#define FOREGROUND_BLUE            0x0001\n#define FOREGROUND_GREEN           0x0002\n#define FOREGROUND_RED             0x0004\n#define FOREGROUND_INTENSITY       0x0008\n#define BACKGROUND_BLUE            0x0010\n#define BACKGROUND_GREEN           0x0020\n#define BACKGROUND_RED             0x0040\n#define BACKGROUND_INTENSITY       0x0080\n#define COMMON_LVB_LEADING_BYTE    0x0100\n#define COMMON_LVB_TRAILING_BYTE   0x0200\n#define COMMON_LVB_GRID_HORIZONTAL 0x0400\n#define COMMON_LVB_GRID_LVERTICAL  0x0800\n#define COMMON_LVB_GRID_RVERTICAL  0x1000\n#define COMMON_LVB_REVERSE_VIDEO   0x4000\n#define COMMON_LVB_UNDERSCORE      0x8000\n\n/* CONSOLE_HISTORY_INFO.dwFlags */\n#define HISTORY_NO_DUP_FLAG  0x01\n\ntypedef struct _CONSOLE_CURSOR_INFO {\n    DWORD\tdwSize;   /* Between 1 & 100 for percentage of cell filled */\n    BOOL\tbVisible; /* Visibility of cursor */\n} CONSOLE_CURSOR_INFO, *LPCONSOLE_CURSOR_INFO;\n\ntypedef struct tagCOORD\n{\n    SHORT X;\n    SHORT Y;\n} COORD, *LPCOORD;\n\ntypedef struct tagSMALL_RECT\n{\n    SHORT Left;\n    SHORT Top;\n    SHORT Right;\n    SHORT Bottom;\n} SMALL_RECT,*LPSMALL_RECT;\n\ntypedef struct _CONSOLE_FONT_INFO\n{\n    DWORD       nFont;\n    COORD       dwFontSize;\n} CONSOLE_FONT_INFO,*LPCONSOLE_FONT_INFO;\n\n#ifndef NOGDI\ntypedef struct _CONSOLE_FONT_INFOEX\n{\n    ULONG       cbSize;\n    DWORD       nFont;\n    COORD       dwFontSize;\n    UINT        FontFamily;\n    UINT        FontWeight;\n    WCHAR       FaceName[LF_FACESIZE];\n} CONSOLE_FONT_INFOEX,*LPCONSOLE_FONT_INFOEX;\n\nWINBASEAPI BOOL WINAPI GetCurrentConsoleFontEx(HANDLE,BOOL,LPCONSOLE_FONT_INFOEX);\nWINBASEAPI BOOL WINAPI SetCurrentConsoleFontEx(HANDLE,BOOL,LPCONSOLE_FONT_INFOEX);\n#endif\n\ntypedef struct tagCONSOLE_HISTORY_INFO\n{\n    UINT        cbSize;\n    UINT        HistoryBufferSize;\n    UINT        NumberOfHistoryBuffers;\n    DWORD       dwFlags;\n} CONSOLE_HISTORY_INFO,*LPCONSOLE_HISTORY_INFO;\n\ntypedef struct _CONSOLE_READCONSOLE_CONTROL\n{\n    ULONG       nLength;\n    ULONG       nInitialChars;\n    ULONG       dwCtrlWakeupMask;\n    ULONG       dwConsoleKeyState;\n} CONSOLE_READCONSOLE_CONTROL,*LPCONSOLE_READCONSOLE_CONTROL;\n\ntypedef struct tagCONSOLE_SCREEN_BUFFER_INFO\n{\n    COORD       dwSize;\n    COORD       dwCursorPosition;\n    WORD        wAttributes;\n    SMALL_RECT  srWindow;\n    COORD       dwMaximumWindowSize;\n} CONSOLE_SCREEN_BUFFER_INFO,*LPCONSOLE_SCREEN_BUFFER_INFO;\n\ntypedef struct _CONSOLE_SCREEN_BUFFER_INFOEX\n{\n    ULONG       cbSize;\n    COORD       dwSize;\n    COORD       dwCursorPosition;\n    WORD        wAttributes;\n    SMALL_RECT  srWindow;\n    COORD       dwMaximumWindowSize;\n    WORD        wPopupAttributes;\n    BOOL        bFullscreenSupported;\n    COLORREF    ColorTable[16];\n} CONSOLE_SCREEN_BUFFER_INFOEX,*LPCONSOLE_SCREEN_BUFFER_INFOEX;\n\ntypedef struct _CONSOLE_SELECTION_INFO\n{\n    DWORD       dwFlags;\n    COORD       dwSelectionAnchor;\n    SMALL_RECT  srSelection;\n} CONSOLE_SELECTION_INFO,*LPCONSOLE_SELECTION_INFO;\n\ntypedef struct tagCHAR_INFO\n{\n    union\n\t{\n\tWCHAR UnicodeChar;\n\tCHAR AsciiChar;\n\t} Char;\n    WORD\tAttributes;\n} CHAR_INFO,*LPCHAR_INFO;\n\ntypedef struct tagKEY_EVENT_RECORD\n{\n    BOOL\tbKeyDown;\t\t/* 04 */\n    WORD\twRepeatCount;\t\t/* 08 */\n    WORD\twVirtualKeyCode;\t/* 0A */\n    WORD\twVirtualScanCode;\t/* 0C */\n    union\t\t\t\t/* 0E */\n\t{\n\tWCHAR UnicodeChar;\t\t/* 0E */\n\tCHAR AsciiChar;\t\t\t/* 0E */\n\t} uChar;\n    DWORD\tdwControlKeyState;\t/* 10 */\n} KEY_EVENT_RECORD,*LPKEY_EVENT_RECORD;\n\n/* dwControlKeyState bitmask */\n#define\tRIGHT_ALT_PRESSED\t0x0001\n#define\tLEFT_ALT_PRESSED\t0x0002\n#define\tRIGHT_CTRL_PRESSED\t0x0004\n#define\tLEFT_CTRL_PRESSED\t0x0008\n#define\tSHIFT_PRESSED\t\t0x0010\n#define\tNUMLOCK_ON\t\t0x0020\n#define\tSCROLLLOCK_ON\t\t0x0040\n#define\tCAPSLOCK_ON\t\t0x0080\n#define\tENHANCED_KEY\t\t0x0100\n\ntypedef struct tagMOUSE_EVENT_RECORD\n{\n    COORD\tdwMousePosition;\n    DWORD\tdwButtonState;\n    DWORD\tdwControlKeyState;\n    DWORD\tdwEventFlags;\n} MOUSE_EVENT_RECORD,*LPMOUSE_EVENT_RECORD;\n\n/* MOUSE_EVENT_RECORD.dwButtonState */\n#define FROM_LEFT_1ST_BUTTON_PRESSED    0x0001\n#define RIGHTMOST_BUTTON_PRESSED        0x0002\n#define FROM_LEFT_2ND_BUTTON_PRESSED    0x0004\n#define FROM_LEFT_3RD_BUTTON_PRESSED    0x0008\n#define FROM_LEFT_4TH_BUTTON_PRESSED    0x0010\n\n/* MOUSE_EVENT_RECORD.dwEventFlags */\n#define MOUSE_MOVED                     0x0001\n#define DOUBLE_CLICK                    0x0002\n#define MOUSE_WHEELED                   0x0004\n#define MOUSE_HWHEELED                  0x0008\n\ntypedef struct tagWINDOW_BUFFER_SIZE_RECORD\n{\n    COORD\tdwSize;\n} WINDOW_BUFFER_SIZE_RECORD,*LPWINDOW_BUFFER_SIZE_RECORD;\n\ntypedef struct tagMENU_EVENT_RECORD\n{\n    UINT\tdwCommandId; /* perhaps UINT16 ??? */\n} MENU_EVENT_RECORD,*LPMENU_EVENT_RECORD;\n\ntypedef struct tagFOCUS_EVENT_RECORD\n{\n    BOOL      bSetFocus; /* perhaps BOOL16 ??? */\n} FOCUS_EVENT_RECORD,*LPFOCUS_EVENT_RECORD;\n\ntypedef struct tagINPUT_RECORD\n{\n    WORD\t\tEventType;\t\t/* 00 */\n    union\n\t{\n\tKEY_EVENT_RECORD KeyEvent;\n\tMOUSE_EVENT_RECORD MouseEvent;\n\tWINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;\n\tMENU_EVENT_RECORD MenuEvent;\n\tFOCUS_EVENT_RECORD FocusEvent;\n\t} Event;\n} INPUT_RECORD,*PINPUT_RECORD;\n\n/* INPUT_RECORD.wEventType */\n#define KEY_EVENT\t\t\t0x01\n#define MOUSE_EVENT\t\t\t0x02\n#define WINDOW_BUFFER_SIZE_EVENT\t0x04\n#define MENU_EVENT\t\t\t0x08\n#define FOCUS_EVENT \t\t\t0x10\n\n#define CONSOLE_TEXTMODE_BUFFER  1\n\n#ifdef __i386__\n/* Note: this should return a COORD, but calling convention for returning\n * structures is different between Windows and gcc on i386. */\n\nWINBASEAPI DWORD WINAPI GetConsoleFontSize(HANDLE, DWORD);\nWINBASEAPI DWORD WINAPI GetLargestConsoleWindowSize(HANDLE);\n\nstatic inline COORD __wine_GetConsoleFontSize_wrapper(HANDLE h, DWORD d)\n{\n    union {\n      COORD c;\n      DWORD dw;\n    } u;\n    u.dw = GetConsoleFontSize(h, d);\n    return u.c;\n}\n#define GetConsoleFontSize(h, d) __wine_GetConsoleFontSize_wrapper(h, d)\n\nstatic inline COORD __wine_GetLargestConsoleWindowSize_wrapper(HANDLE h)\n{\n    union {\n      COORD c;\n      DWORD dw;\n    } u;\n    u.dw = GetLargestConsoleWindowSize(h);\n    return u.c;\n}\n#define GetLargestConsoleWindowSize(h) __wine_GetLargestConsoleWindowSize_wrapper(h)\n\n#else  /* __i386__ */\nWINBASEAPI COORD WINAPI GetConsoleFontSize(HANDLE, DWORD);\nWINBASEAPI COORD WINAPI GetLargestConsoleWindowSize(HANDLE);\n#endif  /* __i386__ */\n\nWINBASEAPI BOOL   WINAPI AddConsoleAliasA(LPSTR,LPSTR,LPSTR);\nWINBASEAPI BOOL   WINAPI AddConsoleAliasW(LPWSTR,LPWSTR,LPWSTR);\n#define                  AddConsoleAlias WINELIB_NAME_AW(AddConsoleAlias)\nWINBASEAPI BOOL   WINAPI AllocConsole(VOID);\nWINBASEAPI BOOL   WINAPI AttachConsole(DWORD);\nWINBASEAPI HANDLE WINAPI CreateConsoleScreenBuffer( DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,LPVOID);\nWINBASEAPI BOOL WINAPI   FillConsoleOutputAttribute( HANDLE,WORD,DWORD,COORD,LPDWORD);\nWINBASEAPI BOOL WINAPI   FillConsoleOutputCharacterA(HANDLE,CHAR,DWORD,COORD,LPDWORD);\nWINBASEAPI BOOL WINAPI   FillConsoleOutputCharacterW(HANDLE,WCHAR,DWORD,COORD,LPDWORD);\n#define                  FillConsoleOutputCharacter WINELIB_NAME_AW(FillConsoleOutputCharacter)\nWINBASEAPI BOOL WINAPI   FlushConsoleInputBuffer( HANDLE);\nWINBASEAPI BOOL WINAPI   FreeConsole(VOID);\nWINBASEAPI BOOL WINAPI   GenerateConsoleCtrlEvent( DWORD,DWORD);\nWINBASEAPI DWORD WINAPI  GetConsoleAliasA(LPSTR,LPSTR,DWORD,LPSTR);\nWINBASEAPI DWORD WINAPI  GetConsoleAliasW(LPWSTR,LPWSTR,DWORD,LPWSTR);\n#define                  GetConsoleAlias WINELIB_NAME_AW(GetConsoleAlias)\nWINBASEAPI DWORD WINAPI  GetConsoleAliasesA(LPSTR,DWORD,LPSTR);\nWINBASEAPI DWORD WINAPI  GetConsoleAliasesW(LPWSTR,DWORD,LPWSTR);\n#define                  GetConsoleAliases WINELIB_NAME_AW(GetConsoleAliases)\nWINBASEAPI DWORD WINAPI  GetConsoleAliasesLengthA(LPSTR);\nWINBASEAPI DWORD WINAPI  GetConsoleAliasesLengthW(LPWSTR);\n#define                  GetConsoleAliasesLength WINELIB_NAME_AW(GetConsoleAliasesLength)\nWINBASEAPI DWORD WINAPI  GetConsoleAliasExesA(LPSTR,DWORD);\nWINBASEAPI DWORD WINAPI  GetConsoleAliasExesW(LPWSTR,DWORD);\n#define                  GetConsoleAliasExes WINELIB_NAME_AW(GetConsoleAliasExes)\nWINBASEAPI DWORD WINAPI  GetConsoleAliasExesLengthA(VOID);\nWINBASEAPI DWORD WINAPI  GetConsoleAliasExesLengthW(VOID);\n#define                  GetConsoleAliasExesLength WINELIB_NAME_AW(GetConsoleAliasExesLength)\nWINBASEAPI UINT WINAPI   GetConsoleCP(VOID);\nWINBASEAPI BOOL WINAPI   GetConsoleCursorInfo( HANDLE,LPCONSOLE_CURSOR_INFO);\nWINBASEAPI BOOL WINAPI   GetConsoleDisplayMode(LPDWORD);\nWINBASEAPI BOOL WINAPI   GetConsoleHistoryInfo(LPCONSOLE_HISTORY_INFO);\nWINBASEAPI BOOL WINAPI   GetConsoleInputExeNameA(DWORD,LPSTR);\nWINBASEAPI BOOL WINAPI   GetConsoleInputExeNameW(DWORD,LPWSTR);\n#define                  GetConsoleInputExeName WINELIB_NAME_AW(GetConsoleInputExeName)\nWINBASEAPI BOOL WINAPI   GetConsoleMode( HANDLE,LPDWORD);\nWINBASEAPI DWORD WINAPI  GetConsoleOriginalTitleA(LPSTR,DWORD);\nWINBASEAPI DWORD WINAPI  GetConsoleOriginalTitleW(LPWSTR,DWORD);\n#define                  GetConsoleOriginalTitle WINELIB_NAME_AW(GetConsoleOriginalTitle)\nWINBASEAPI UINT WINAPI   GetConsoleOutputCP(VOID);\nWINBASEAPI DWORD WINAPI  GetConsoleProcessList(LPDWORD,DWORD);\nWINBASEAPI BOOL WINAPI   GetConsoleScreenBufferInfo(HANDLE,LPCONSOLE_SCREEN_BUFFER_INFO);\nWINBASEAPI BOOL WINAPI   GetConsoleScreenBufferInfoEx(HANDLE,LPCONSOLE_SCREEN_BUFFER_INFOEX);\nWINBASEAPI DWORD WINAPI  GetConsoleTitleA(LPSTR,DWORD);\nWINBASEAPI DWORD WINAPI  GetConsoleTitleW(LPWSTR,DWORD);\n#define                  GetConsoleTitle WINELIB_NAME_AW(GetConsoleTitle)\nWINBASEAPI HWND WINAPI   GetConsoleWindow(void);\nWINBASEAPI BOOL WINAPI   GetCurrentConsoleFont(HANDLE,BOOL,LPCONSOLE_FONT_INFO);\nWINBASEAPI BOOL WINAPI   GetNumberOfConsoleInputEvents( HANDLE,LPDWORD);\nWINBASEAPI BOOL WINAPI   GetNumberOfConsoleMouseButtons(LPDWORD);\nWINBASEAPI BOOL WINAPI   PeekConsoleInputA( HANDLE,PINPUT_RECORD,DWORD,LPDWORD);\nWINBASEAPI BOOL WINAPI   PeekConsoleInputW( HANDLE,PINPUT_RECORD,DWORD,LPDWORD);\n#define                  PeekConsoleInput WINELIB_NAME_AW(PeekConsoleInput)\nWINBASEAPI BOOL WINAPI   ReadConsoleA(HANDLE,LPVOID,DWORD,LPDWORD,LPVOID);\nWINBASEAPI BOOL WINAPI   ReadConsoleW(HANDLE,LPVOID,DWORD,LPDWORD,LPVOID);\n#define                  ReadConsole WINELIB_NAME_AW(ReadConsole)\nWINBASEAPI BOOL WINAPI   ReadConsoleInputA(HANDLE,PINPUT_RECORD,DWORD,LPDWORD);\nWINBASEAPI BOOL WINAPI   ReadConsoleInputW(HANDLE,PINPUT_RECORD,DWORD,LPDWORD);\n#define                  ReadConsoleInput WINELIB_NAME_AW(ReadConsoleInput)\nWINBASEAPI BOOL WINAPI   ReadConsoleOutputA( HANDLE,LPCHAR_INFO,COORD,COORD,LPSMALL_RECT);\nWINBASEAPI BOOL WINAPI   ReadConsoleOutputW( HANDLE,LPCHAR_INFO,COORD,COORD,LPSMALL_RECT);\n#define                  ReadConsoleOutput WINELIB_NAME_AW(ReadConsoleOutput)\nWINBASEAPI BOOL WINAPI   ReadConsoleOutputAttribute( HANDLE,LPWORD,DWORD,COORD,LPDWORD);\nWINBASEAPI BOOL WINAPI   ReadConsoleOutputCharacterA(HANDLE,LPSTR,DWORD,COORD,LPDWORD);\nWINBASEAPI BOOL WINAPI   ReadConsoleOutputCharacterW(HANDLE,LPWSTR,DWORD,COORD,LPDWORD);\n#define                  ReadConsoleOutputCharacter WINELIB_NAME_AW(ReadConsoleOutputCharacter)\nWINBASEAPI BOOL WINAPI   ScrollConsoleScreenBufferA( HANDLE,LPSMALL_RECT,LPSMALL_RECT,COORD,LPCHAR_INFO);\nWINBASEAPI BOOL WINAPI   ScrollConsoleScreenBufferW( HANDLE,LPSMALL_RECT,LPSMALL_RECT,COORD,LPCHAR_INFO);\n#define                  ScrollConsoleScreenBuffer WINELIB_NAME_AW(ScrollConsoleScreenBuffer)\nWINBASEAPI BOOL WINAPI   SetConsoleActiveScreenBuffer( HANDLE);\nWINBASEAPI BOOL WINAPI   SetConsoleCP(UINT);\nWINBASEAPI BOOL WINAPI   SetConsoleCtrlHandler( PHANDLER_ROUTINE,BOOL);\nWINBASEAPI BOOL WINAPI   SetConsoleCursorInfo( HANDLE,LPCONSOLE_CURSOR_INFO);\nWINBASEAPI BOOL WINAPI   SetConsoleCursorPosition(HANDLE,COORD);\nWINBASEAPI BOOL WINAPI   SetConsoleDisplayMode(HANDLE,DWORD,LPCOORD);\nWINBASEAPI BOOL WINAPI   SetConsoleHistoryInfo(LPCONSOLE_HISTORY_INFO);\nWINBASEAPI BOOL WINAPI   SetConsoleMode( HANDLE,DWORD);\nWINBASEAPI BOOL WINAPI   SetConsoleOutputCP(UINT);\nWINBASEAPI BOOL WINAPI   SetConsoleScreenBufferInfoEx(HANDLE,LPCONSOLE_SCREEN_BUFFER_INFOEX);\nWINBASEAPI BOOL WINAPI   SetConsoleScreenBufferSize(HANDLE,COORD);\nWINBASEAPI BOOL WINAPI   SetConsoleTextAttribute( HANDLE,WORD);\nWINBASEAPI BOOL WINAPI   SetConsoleTitleA(LPCSTR);\nWINBASEAPI BOOL WINAPI   SetConsoleTitleW(LPCWSTR);\n#define                  SetConsoleTitle WINELIB_NAME_AW(SetConsoleTitle)\nWINBASEAPI BOOL WINAPI   SetConsoleWindowInfo( HANDLE,BOOL,LPSMALL_RECT);\nWINBASEAPI BOOL WINAPI   WriteConsoleA(HANDLE,const void *,DWORD,LPDWORD,void *);\nWINBASEAPI BOOL WINAPI   WriteConsoleW(HANDLE,const void *,DWORD,LPDWORD,void *);\n#define                  WriteConsole WINELIB_NAME_AW(WriteConsole)\nWINBASEAPI BOOL WINAPI   WriteConsoleInputA(HANDLE,const INPUT_RECORD *,DWORD,LPDWORD);\nWINBASEAPI BOOL WINAPI   WriteConsoleInputW(HANDLE,const INPUT_RECORD *,DWORD,LPDWORD);\n#define                  WriteConsoleInput WINELIB_NAME_AW(WriteConsoleInput)\nWINBASEAPI BOOL WINAPI   WriteConsoleOutputA(HANDLE,const CHAR_INFO*,COORD,COORD,LPSMALL_RECT);\nWINBASEAPI BOOL WINAPI   WriteConsoleOutputW(HANDLE,const CHAR_INFO*,COORD,COORD,LPSMALL_RECT);\n#define                  WriteConsoleOutput WINELIB_NAME_AW(WriteConsoleOutput)\nWINBASEAPI BOOL WINAPI   WriteConsoleOutputAttribute(HANDLE,const WORD *,DWORD,COORD,LPDWORD);\nWINBASEAPI BOOL WINAPI   WriteConsoleOutputCharacterA(HANDLE,LPCSTR,DWORD,COORD,LPDWORD);\nWINBASEAPI BOOL WINAPI   WriteConsoleOutputCharacterW(HANDLE,LPCWSTR,DWORD,COORD,LPDWORD);\n#define                  WriteConsoleOutputCharacter WINELIB_NAME_AW(WriteConsoleOutputCharacter)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* __WINE_WINCON_H */\n"
  },
  {
    "path": "wine/windows/wincred.h",
    "content": "/*\n * Copyright (C) 2006 Robert Shearman (for CodeWeavers)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _WINCRED_H_\n#define _WINCRED_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifdef _ADVAPI32_\n#define WINADVAPI\n#else\n#define WINADVAPI DECLSPEC_IMPORT\n#endif\n\n#ifndef __SECHANDLE_DEFINED__\n#define __SECHANDLE_DEFINED__\ntypedef struct _SecHandle\n{\n    ULONG_PTR dwLower;\n    ULONG_PTR dwUpper;\n} SecHandle, *PSecHandle;\n#endif\n\n#ifndef __WINE_CTXTHANDLE_DEFINED__\n#define __WINE_CTXTHANDLE_DEFINED__\ntypedef SecHandle CtxtHandle;\ntypedef PSecHandle PCtxtHandle;\n#endif\n\ntypedef struct _CREDENTIAL_ATTRIBUTEA\n{\n    LPSTR Keyword;\n    DWORD Flags;\n    DWORD ValueSize;\n    LPBYTE Value;\n} CREDENTIAL_ATTRIBUTEA, *PCREDENTIAL_ATTRIBUTEA;\n\ntypedef struct _CREDENTIAL_ATTRIBUTEW\n{\n    LPWSTR Keyword;\n    DWORD Flags;\n    DWORD ValueSize;\n    LPBYTE Value;\n} CREDENTIAL_ATTRIBUTEW, *PCREDENTIAL_ATTRIBUTEW;\n\nDECL_WINELIB_TYPE_AW(CREDENTIAL_ATTRIBUTE)\nDECL_WINELIB_TYPE_AW(PCREDENTIAL_ATTRIBUTE)\n\ntypedef struct _CREDENTIALA\n{\n    DWORD Flags;\n    DWORD Type;\n    LPSTR TargetName;\n    LPSTR Comment;\n    FILETIME LastWritten;\n    DWORD CredentialBlobSize;\n    LPBYTE CredentialBlob;\n    DWORD Persist;\n    DWORD AttributeCount;\n    PCREDENTIAL_ATTRIBUTEA Attributes;\n    LPSTR TargetAlias;\n    LPSTR UserName;\n} CREDENTIALA, *PCREDENTIALA;\n\ntypedef struct _CREDENTIALW\n{\n    DWORD Flags;\n    DWORD Type;\n    LPWSTR TargetName;\n    LPWSTR Comment;\n    FILETIME LastWritten;\n    DWORD CredentialBlobSize;\n    LPBYTE CredentialBlob;\n    DWORD Persist;\n    DWORD AttributeCount;\n    PCREDENTIAL_ATTRIBUTEW Attributes;\n    LPWSTR TargetAlias;\n    LPWSTR UserName;\n} CREDENTIALW, *PCREDENTIALW;\n\nDECL_WINELIB_TYPE_AW(CREDENTIAL)\nDECL_WINELIB_TYPE_AW(PCREDENTIAL)\n\ntypedef struct _CREDENTIAL_TARGET_INFORMATIONA\n{\n    LPSTR TargetName;\n    LPSTR NetbiosServerName;\n    LPSTR DnsServerName;\n    LPSTR NetbiosDomainName;\n    LPSTR DnsDomainName;\n    LPSTR DnsTreeName;\n    LPSTR PackageName;\n    DWORD Flags;\n    DWORD CredTypeCount;\n    LPDWORD CredTypes;\n} CREDENTIAL_TARGET_INFORMATIONA, *PCREDENTIAL_TARGET_INFORMATIONA;\n\ntypedef struct _CREDENTIAL_TARGET_INFORMATIONW\n{\n    LPWSTR TargetName;\n    LPWSTR NetbiosServerName;\n    LPWSTR DnsServerName;\n    LPWSTR NetbiosDomainName;\n    LPWSTR DnsDomainName;\n    LPWSTR DnsTreeName;\n    LPWSTR PackageName;\n    DWORD Flags;\n    DWORD CredTypeCount;\n    LPDWORD CredTypes;\n} CREDENTIAL_TARGET_INFORMATIONW, *PCREDENTIAL_TARGET_INFORMATIONW;\n\nDECL_WINELIB_TYPE_AW(CREDENTIAL_TARGET_INFORMATION)\nDECL_WINELIB_TYPE_AW(PCREDENTIAL_TARGET_INFORMATION)\n\ntypedef struct _CREDUI_INFOA\n{\n    DWORD cbSize;\n    HWND hwndParent;\n    PCSTR pszMessageText;\n    PCSTR pszCaptionText;\n    HBITMAP hbmBanner;\n} CREDUI_INFOA, *PCREDUI_INFOA;\n\ntypedef struct _CREDUI_INFOW\n{\n    DWORD cbSize;\n    HWND hwndParent;\n    PCWSTR pszMessageText;\n    PCWSTR pszCaptionText;\n    HBITMAP hbmBanner;\n} CREDUI_INFOW, *PCREDUI_INFOW;\n\nDECL_WINELIB_TYPE_AW(CREDUI_INFO)\nDECL_WINELIB_TYPE_AW(PCREDUI_INFO)\n\ntypedef enum _CRED_MARSHAL_TYPE\n{\n    CertCredential = 1,\n    UsernameTargetCredential,\n    BinaryBlobCredential\n} CRED_MARSHAL_TYPE, *PCRED_MARSHAL_TYPE;\n\n#define CERT_HASH_LENGTH    20\n\ntypedef struct _CERT_CREDENTIAL_INFO\n{\n    ULONG cbSize;\n    UCHAR rgbHashOfCert[CERT_HASH_LENGTH];\n} CERT_CREDENTIAL_INFO, *PCERT_CREDENTIAL_INFO;\n\ntypedef struct _USERNAME_TARGET_CREDENTIAL_INFO\n{\n    LPWSTR UserName;\n} USERNAME_TARGET_CREDENTIAL_INFO;\n\ntypedef struct _BINARY_BLOB_CREDENTIAL_INFO\n{\n    ULONG cbBlob;\n    LPBYTE pbBlob;\n} BINARY_BLOB_CREDENTIAL_INFO, *PBINARY_BLOB_CREDENTIAL_INFO;\n\n#define CRED_MAX_STRING_LENGTH              256\n#define CRED_MAX_USERNAME_LENGTH            513\n#define CRED_MAX_GENERIC_TARGET_NAME_LENGTH 32767\n#define CRED_MAX_DOMAIN_TARGET_NAME_LENGTH  337\n#define CRED_MAX_VALUE_SIZE                 256\n#define CRED_MAX_ATTRIBUTES                 64\n\n#define CRED_MAX_BLOB_SIZE                  512\n#define CRED_MAX_CREDENTIAL_BLOB_SIZE       (5 * CRED_MAX_BLOB_SIZE)\n\n#define CREDUI_MAX_MESSAGE_LENGTH 32767\n#define CREDUI_MAX_CAPTION_LENGTH 128\n#define CREDUI_MAX_GENERIC_TARGET_LENGTH CRED_MAX_GENERIC_TARGET_NAME_LENGTH\n#define CREDUI_MAX_DOMAIN_TARGET_LENGTH CRED_MAX_DOMAIN_TARGET_NAME_LENGTH\n#define CREDUI_MAX_USERNAME_LENGTH CRED_MAX_USERNAME_LENGTH\n#define CREDUI_MAX_PASSWORD_LENGTH (CRED_MAX_CREDENTIAL_BLOB_SIZE / 2)\n\n/* flags for CREDENTIAL::Flags */\n#define CRED_FLAGS_PASSWORD_FOR_CERT                0x0001\n#define CRED_FLAGS_PROMPT_NOW                       0x0002\n#define CRED_FLAGS_USERNAME_TARGET                  0x0004\n#define CRED_FLAGS_OWF_CRED_BLOB                    0x0008\n#define CRED_FLAGS_VALID_FLAGS                      0x000f\n\n/* values for CREDENTIAL::Type */\n#define CRED_TYPE_GENERIC                           1\n#define CRED_TYPE_DOMAIN_PASSWORD                   2\n#define CRED_TYPE_DOMAIN_CERTIFICATE                3\n#define CRED_TYPE_DOMAIN_VISIBLE_PASSWORD           4\n#define CRED_TYPE_GENERIC_CERTIFICATE               5\n#define CRED_TYPE_MAXIMUM                           6\n#define CRED_TYPE_MAXIMUM_EX                        (CRED_TYPE_MAXIMUM+1000)\n\n/* values for CREDENTIAL::Persist */\n#define CRED_PERSIST_NONE                           0\n#define CRED_PERSIST_SESSION                        1\n#define CRED_PERSIST_LOCAL_MACHINE                  2\n#define CRED_PERSIST_ENTERPRISE                     3\n\n/* values for CREDENTIAL_TARGET_INFORMATION::Flags */\n#define CRED_TI_SERVER_FORMAT_UNKNOWN               1\n#define CRED_TI_DOMAIN_FORMAT_UNKNOWN               2\n#define CRED_TI_ONLY_PASSWORD_REQUIRED              4\n\n#define CREDUI_FLAGS_INCORRECT_PASSWORD             0x00000001\n#define CREDUI_FLAGS_DO_NOT_PERSIST                 0x00000002\n#define CREDUI_FLAGS_REQUEST_ADMINISTRATOR          0x00000004\n#define CREDUI_FLAGS_EXCLUDE_CERTIFICATES           0x00000008\n#define CREDUI_FLAGS_REQUIRE_CERTIFICATE            0x00000010\n#define CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX            0x00000040\n#define CREDUI_FLAGS_ALWAYS_SHOW_UI                 0x00000080\n#define CREDUI_FLAGS_REQUIRE_SMARTCARD              0x00000100\n#define CREDUI_FLAGS_PASSWORD_ONLY_OK               0x00000200\n#define CREDUI_FLAGS_VALIDATE_USERNAME              0x00000400\n#define CREDUI_FLAGS_COMPLETE_USERNAME              0x00000800\n#define CREDUI_FLAGS_PERSIST                        0x00001000\n#define CREDUI_FLAGS_SERVER_CREDENTIAL              0x00004000\n#define CREDUI_FLAGS_EXPECT_CONFIRMATION            0x00020000\n#define CREDUI_FLAGS_GENERIC_CREDENTIALS            0x00040000\n#define CREDUI_FLAGS_USERNAME_TARGET_CREDENTIALS    0x00080000\n#define CREDUI_FLAGS_KEEP_USERNAME                  0x00100000\n\n/* flags for CredWrite and CredWriteDomainCredentials */\n#define CRED_PRESERVE_CREDENTIAL_BLOB               0x00000001\n\nWINADVAPI BOOL  WINAPI CredDeleteA(LPCSTR,DWORD,DWORD);\nWINADVAPI BOOL  WINAPI CredDeleteW(LPCWSTR,DWORD,DWORD);\n#define                CredDelete WINELIB_NAME_AW(CredDelete)\nWINADVAPI BOOL  WINAPI CredEnumerateA(LPCSTR,DWORD,DWORD *,PCREDENTIALA **);\nWINADVAPI BOOL  WINAPI CredEnumerateW(LPCWSTR,DWORD,DWORD *,PCREDENTIALW **);\n#define                CredEnumerate WINELIB_NAME_AW(CredEnumerate)\nWINADVAPI VOID  WINAPI CredFree(PVOID);\nWINADVAPI BOOL  WINAPI CredGetSessionTypes(DWORD,LPDWORD);\nWINADVAPI BOOL  WINAPI CredIsMarshaledCredentialA(LPCSTR);\nWINADVAPI BOOL  WINAPI CredIsMarshaledCredentialW(LPCWSTR);\n#define                CredIsMarshaledCredential WINELIB_NAME_AW(CredIsMarshaledCredential)\nWINADVAPI BOOL  WINAPI CredMarshalCredentialA(CRED_MARSHAL_TYPE,PVOID,LPSTR *);\nWINADVAPI BOOL  WINAPI CredMarshalCredentialW(CRED_MARSHAL_TYPE,PVOID,LPWSTR *);\n#define                CredMarshalCredential WINELIB_NAME_AW(CredMarshalCredential)\nWINADVAPI BOOL  WINAPI CredReadA(LPCSTR,DWORD,DWORD,PCREDENTIALA *);\nWINADVAPI BOOL  WINAPI CredReadW(LPCWSTR,DWORD,DWORD,PCREDENTIALW *);\n#define                CredRead WINELIB_NAME_AW(CredRead)\nWINADVAPI BOOL  WINAPI CredReadDomainCredentialsA(PCREDENTIAL_TARGET_INFORMATIONA,DWORD,DWORD *,PCREDENTIALA **);\nWINADVAPI BOOL  WINAPI CredReadDomainCredentialsW(PCREDENTIAL_TARGET_INFORMATIONW,DWORD,DWORD *,PCREDENTIALW **);\n#define                CredReadDomainCredentials WINELIB_NAME_AW(CredReadDomainCredentials)\nWINADVAPI BOOL  WINAPI CredRenameA(LPCSTR,LPCSTR,DWORD,DWORD);\nWINADVAPI BOOL  WINAPI CredRenameW(LPCWSTR,LPCWSTR,DWORD,DWORD);\n#define                CredRename WINELIB_NAME_AW(CredRename)\nWINADVAPI BOOL  WINAPI CredUnmarshalCredentialA(LPCSTR,PCRED_MARSHAL_TYPE,PVOID *);\nWINADVAPI BOOL  WINAPI CredUnmarshalCredentialW(LPCWSTR,PCRED_MARSHAL_TYPE,PVOID *);\n#define                CredUnmarshalCredential WINELIB_NAME_AW(CredUnmarshalCredential)\nWINADVAPI BOOL  WINAPI CredWriteA(PCREDENTIALA,DWORD);\nWINADVAPI BOOL  WINAPI CredWriteW(PCREDENTIALW,DWORD);\n#define                CredWrite WINELIB_NAME_AW(CredWrite)\n\nBOOL  WINAPI CredPackAuthenticationBufferW(DWORD,LPWSTR,LPWSTR,PBYTE,DWORD *);\nBOOL  WINAPI CredUnPackAuthenticationBufferW(DWORD,PVOID,DWORD,LPWSTR,DWORD *,LPWSTR,DWORD *,LPWSTR,DWORD *);\nDWORD WINAPI CredUICmdLinePromptForCredentialsW(PCWSTR,PCtxtHandle,DWORD,PWSTR,ULONG,PWSTR,ULONG,PBOOL,DWORD);\nDWORD WINAPI CredUICmdLinePromptForCredentialsA(PCSTR,PCtxtHandle,DWORD,PSTR,ULONG,PSTR,ULONG,PBOOL,DWORD);\n#define      CredUICmdLinePromptForCredentials WINELIB_NAME_AW(CredUICmdLinePromptForCredentials)\nDWORD WINAPI CredUIConfirmCredentialsW(PCWSTR,BOOL);\nDWORD WINAPI CredUIConfirmCredentialsA(PCSTR,BOOL);\n#define      CredUIConfirmCredentials WINELIB_NAME_AW(CredUIConfirmCredentials)\nDWORD WINAPI CredUIParseUserNameW(PCWSTR,PWSTR,ULONG,PWSTR,ULONG);\nDWORD WINAPI CredUIParseUserNameA(PCSTR,PSTR,ULONG,PSTR,ULONG);\n#define      CredUIParseUserName WINELIB_NAME_AW(CredUIParseUserName)\nDWORD WINAPI CredUIPromptForCredentialsW(PCREDUI_INFOW,PCWSTR,PCtxtHandle,DWORD,PWSTR,ULONG,PWSTR,ULONG,PBOOL,DWORD);\nDWORD WINAPI CredUIPromptForCredentialsA(PCREDUI_INFOA,PCSTR,PCtxtHandle,DWORD,PSTR,ULONG,PSTR,ULONG,PBOOL,DWORD);\n#define      CredUIPromptForCredentials WINELIB_NAME_AW(CredUIPromptForCredentials)\nDWORD WINAPI CredUIPromptForWindowsCredentialsW(PCREDUI_INFOW,DWORD,ULONG *,LPCVOID,ULONG,LPVOID *, ULONG *, BOOL *,\n                                                DWORD);\nDWORD WINAPI CredUIStoreSSOCredW(PCWSTR,PCWSTR,PCWSTR,BOOL);\n/* Note: no CredUIStoreSSOCredA in PSDK header */\nDWORD WINAPI CredUIReadSSOCredW(PCWSTR,PWSTR*);\n/* Note: no CredUIReadSSOCredA in PSDK header */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _WINCRED_H_ */\n"
  },
  {
    "path": "wine/windows/wincrypt.h",
    "content": "/*\n * Copyright (C) 2002 Travis Michielsen\n * Copyright (C) 2004-2005 Juan Lang\n * Copyright (C) 2007 Vijay Kiran Kamuju\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINCRYPT_H\n#define __WINE_WINCRYPT_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include <bcrypt.h>\n/* FIXME: #include <ncrypt.h> */\n\n#ifdef _ADVAPI32_\n# define WINADVAPI\n#else\n# define WINADVAPI DECLSPEC_IMPORT\n#endif\n\n/* some typedefs for function parameters */\ntypedef unsigned int ALG_ID;\ntypedef ULONG_PTR HCRYPTPROV;\ntypedef ULONG_PTR HCRYPTPROV_OR_NCRYPT_KEY_HANDLE;\ntypedef ULONG_PTR HCRYPTPROV_LEGACY;\ntypedef ULONG_PTR HCRYPTKEY;\ntypedef ULONG_PTR HCRYPTHASH;\ntypedef void *HCERTSTORE;\ntypedef void *HCRYPTMSG;\ntypedef void *HCERTSTOREPROV;\ntypedef void *HCRYPTOIDFUNCSET;\ntypedef void *HCRYPTOIDFUNCADDR;\ntypedef void *HCRYPTDEFAULTCONTEXT;\n\n/* CSP Structs */\n\ntypedef struct _PROV_ENUMALGS {\n  ALG_ID aiAlgid;\n  DWORD  dwBitLen;\n  DWORD  dwNameLen;\n  CHAR   szName[20];\n} PROV_ENUMALGS;\n\ntypedef struct _PROV_ENUMALGS_EX {\n  ALG_ID aiAlgid;\n  DWORD  dwDefaultLen;\n  DWORD  dwMinLen;\n  DWORD  dwMaxLen;\n  DWORD  dwProtocols;\n  DWORD  dwNameLen;\n  CHAR   szName[20];\n  DWORD  dwLongNameLen;\n  CHAR   szLongName[40];\n} PROV_ENUMALGS_EX;\n\n#define SCHANNEL_MAC_KEY 0\n#define SCHANNEL_ENC_KEY 1\n\ntypedef struct _SCHANNEL_ALG {\n  DWORD  dwUse;\n  ALG_ID Algid;\n  DWORD  cBits;\n  DWORD  dwFlags;\n  DWORD  dwReserved;\n} SCHANNEL_ALG, *PSCHANNEL_ALG;\n\n\n#define CRYPT_IPSEC_HMAC_KEY 0x0100\n\ntypedef struct _HMAC_INFO {\n  ALG_ID HashAlgid;\n  BYTE*  pbInnerString;\n  DWORD  cbInnerString;\n  BYTE*  pbOuterString;\n  DWORD  cbOuterString;\n} HMAC_INFO, *PHMAC_INFO;\n\t\t\ntypedef struct _CRYPTOAPI_BLOB {\n  DWORD    cbData;\n  BYTE*    pbData;\n} CRYPT_INTEGER_BLOB,  *PCRYPT_INTEGER_BLOB,\n  CRYPT_UINT_BLOB,     *PCRYPT_UINT_BLOB,\n  CRYPT_OBJID_BLOB,    *PCRYPT_OBJID_BLOB,\n  CERT_NAME_BLOB,      *PCERT_NAME_BLOB,\n  CERT_RDN_VALUE_BLOB, *PCERT_RDN_VALUE_BLOB,\n  CERT_BLOB,           *PCERT_BLOB,\n  CRL_BLOB,            *PCRL_BLOB,\n  DATA_BLOB,           *PDATA_BLOB,\n  CRYPT_DATA_BLOB,     *PCRYPT_DATA_BLOB,\n  CRYPT_HASH_BLOB,     *PCRYPT_HASH_BLOB,\n  CRYPT_DIGEST_BLOB,   *PCRYPT_DIGEST_BLOB,\n  CRYPT_DER_BLOB,      *PCRYPT_DER_BLOB,\n  CRYPT_ATTR_BLOB,     *PCRYPT_ATTR_BLOB;\n\ntypedef struct _CRYPTPROTECT_PROMPTSTRUCT{\n  DWORD   cbSize;\n  DWORD   dwPromptFlags;\n  HWND    hwndApp;\n  LPCWSTR szPrompt;\n} CRYPTPROTECT_PROMPTSTRUCT, *PCRYPTPROTECT_PROMPTSTRUCT;\n\ntypedef struct _CRYPT_ALGORITHM_IDENTIFIER {\n  LPSTR            pszObjId;\n  CRYPT_OBJID_BLOB Parameters;\n} CRYPT_ALGORITHM_IDENTIFIER, *PCRYPT_ALGORITHM_IDENTIFIER;\n\ntypedef struct _CRYPT_ATTRIBUTE_TYPE_VALUE {\n  LPSTR               pszObjId;\n  CRYPT_OBJID_BLOB    Value;\n} CRYPT_ATTRIBUTE_TYPE_VALUE, *PCRYPT_ATTRIBUTE_TYPE_VALUE;\n\ntypedef struct _PUBLICKEYSTRUC {\n    BYTE   bType;\n    BYTE   bVersion;\n    WORD   reserved;\n    ALG_ID aiKeyAlg;\n} BLOBHEADER, PUBLICKEYSTRUC;\n\ntypedef struct _RSAPUBKEY {\n    DWORD   magic;\n    DWORD   bitlen;\n    DWORD   pubexp;\n} RSAPUBKEY;\n\ntypedef struct _PUBKEY {\n    DWORD   magic;\n    DWORD   bitlen;\n} DHPUBKEY, DSSPUBKEY, KEAPUBKEY, TEKPUBKEY;\n\ntypedef struct _DSSSEED {\n    DWORD   counter;\n    BYTE    seed[20];\n} DSSSEED;\n\ntypedef struct _PUBKEYVER3 {\n    DWORD   magic;\n    DWORD   bitlenP;\n    DWORD   bitlenQ;\n    DWORD   bitlenJ;\n    DSSSEED DSSSeed;\n} DHPUBKEY_VER3, DSSPUBKEY_VER3;\n\ntypedef struct _PRIVKEYVER3 {\n    DWORD   magic;\n    DWORD   bitlenP;\n    DWORD   bitlenQ;\n    DWORD   bitlenJ;\n    DWORD   bitlenX;\n    DSSSEED DSSSeed;\n} DHPRIVKEY_VER3, DSSPRIVKEY_VER3;\n\ntypedef struct _KEY_TYPE_SUBTYPE {\n    DWORD   dwKeySpec;\n    GUID    Type;\n    GUID    SubType;\n} KEY_TYPE_SUBTYPE, *PKEY_TYPE_SUBTYPE;\n\ntypedef struct _CERT_FORTEZZA_DATA_PROP {\n    unsigned char   SerialNumber[8];\n    int             CertIndex;\n    unsigned char   CertLabel[36];\n} CERT_FORTEZZA_DATA_PROP;\n\ntypedef struct _CMS_DH_KEY_INFO {\n    DWORD             dwVersion;\n    ALG_ID            Algid;\n    LPSTR             pszContentEncObjId;\n    CRYPT_DATA_BLOB   PubInfo;\n    void              *pReserved;\n} CMS_DH_KEY_INFO, *PCMS_DH_KEY_INFO;\n\ntypedef struct _CRYPT_BIT_BLOB {\n    DWORD cbData;\n    BYTE  *pbData;\n    DWORD cUnusedBits;\n} CRYPT_BIT_BLOB, *PCRYPT_BIT_BLOB;\n\ntypedef struct _CRYPT_KEY_PROV_PARAM {\n    DWORD dwParam;\n    BYTE *pbData;\n    DWORD cbData;\n    DWORD dwFlags;\n} CRYPT_KEY_PROV_PARAM, *PCRYPT_KEY_PROV_PARAM;\n\ntypedef struct _CRYPT_KEY_PROV_INFO {\n    LPWSTR                pwszContainerName;\n    LPWSTR                pwszProvName;\n    DWORD                 dwProvType;\n    DWORD                 dwFlags;\n    DWORD                 cProvParam;\n    PCRYPT_KEY_PROV_PARAM rgProvParam;\n    DWORD                 dwKeySpec;\n} CRYPT_KEY_PROV_INFO, *PCRYPT_KEY_PROV_INFO;\n\ntypedef struct _CERT_KEY_CONTEXT {\n    DWORD      cbSize;\n    HCRYPTPROV hCryptProv;\n    DWORD      dwKeySpec;\n} CERT_KEY_CONTEXT, *PCERT_KEY_CONTEXT;\n\ntypedef struct _CERT_PUBLIC_KEY_INFO {\n    CRYPT_ALGORITHM_IDENTIFIER Algorithm;\n    CRYPT_BIT_BLOB             PublicKey;\n} CERT_PUBLIC_KEY_INFO, *PCERT_PUBLIC_KEY_INFO;\n\ntypedef struct _CERT_EXTENSION {\n    LPSTR               pszObjId;\n    BOOL                fCritical;\n    CRYPT_OBJID_BLOB    Value;\n} CERT_EXTENSION, *PCERT_EXTENSION;\n\ntypedef struct _CERT_EXTENSIONS {\n    DWORD           cExtension;\n    PCERT_EXTENSION rgExtension;\n} CERT_EXTENSIONS, *PCERT_EXTENSIONS;\n\ntypedef struct _CERT_INFO {\n    DWORD                      dwVersion;\n    CRYPT_INTEGER_BLOB         SerialNumber;\n    CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;\n    CERT_NAME_BLOB             Issuer;\n    FILETIME                   NotBefore;\n    FILETIME                   NotAfter;\n    CERT_NAME_BLOB             Subject;\n    CERT_PUBLIC_KEY_INFO       SubjectPublicKeyInfo;\n    CRYPT_BIT_BLOB             IssuerUniqueId;\n    CRYPT_BIT_BLOB             SubjectUniqueId;\n    DWORD                      cExtension;\n    PCERT_EXTENSION            rgExtension;\n} CERT_INFO, *PCERT_INFO;\n\ntypedef struct _CERT_RDN_ATTR {\n    LPSTR               pszObjId;\n    DWORD               dwValueType;\n    CERT_RDN_VALUE_BLOB Value;\n} CERT_RDN_ATTR, *PCERT_RDN_ATTR;\n\ntypedef struct _CERT_RDN {\n    DWORD          cRDNAttr;\n    PCERT_RDN_ATTR rgRDNAttr;\n} CERT_RDN, *PCERT_RDN;\n\ntypedef struct _CERT_NAME_INFO {\n    DWORD     cRDN;\n    PCERT_RDN rgRDN;\n} CERT_NAME_INFO, *PCERT_NAME_INFO;\n\ntypedef struct _CERT_NAME_VALUE {\n    DWORD               dwValueType;\n    CERT_RDN_VALUE_BLOB Value;\n} CERT_NAME_VALUE, *PCERT_NAME_VALUE;\n\ntypedef struct _CERT_ENCRYPTED_PRIVATE_KEY_INFO {\n    CRYPT_ALGORITHM_IDENTIFIER EncryptionAlgorithm;\n    CRYPT_DATA_BLOB            EncryptedPrivateKey;\n} CERT_ENCRYPTED_PRIVATE_KEY_INFO, *PCERT_ENCRYPTED_PRIVATE_KEY_INFO;\n\ntypedef struct _CERT_AUTHORITY_KEY_ID_INFO {\n    CRYPT_DATA_BLOB    KeyId;\n    CERT_NAME_BLOB     CertIssuer;\n    CRYPT_INTEGER_BLOB CertSerialNumber;\n} CERT_AUTHORITY_KEY_ID_INFO, *PCERT_AUTHORITY_KEY_ID_INFO;\n\ntypedef struct _CERT_PRIVATE_KEY_VALIDITY {\n    FILETIME NotBefore;\n    FILETIME NotAfter;\n} CERT_PRIVATE_KEY_VALIDITY, *PCERT_PRIVATE_KEY_VALIDITY;\n\ntypedef struct _CERT_KEY_ATTRIBUTES_INFO {\n    CRYPT_DATA_BLOB            KeyId;\n    CRYPT_BIT_BLOB             IntendedKeyUsage;\n    PCERT_PRIVATE_KEY_VALIDITY pPrivateKeyUsagePeriod;\n} CERT_KEY_ATTRIBUTES_INFO, *PCERT_KEY_ATTRIBUTES_INFO;\n\ntypedef struct _CERT_ECC_SIGNATURE {\n    CRYPT_UINT_BLOB r;\n    CRYPT_UINT_BLOB s;\n} CERT_ECC_SIGNATURE, *PCERT_ECC_SIGNATURE;\n\n/* byte 0 */\n#define CERT_DIGITAL_SIGNATURE_KEY_USAGE 0x80\n#define CERT_NON_REPUDIATION_KEY_USAGE   0x40\n#define CERT_KEY_ENCIPHERMENT_KEY_USAGE  0x20\n#define CERT_DATA_ENCIPHERMENT_KEY_USAGE 0x10\n#define CERT_KEY_AGREEMENT_KEY_USAGE     0x08\n#define CERT_KEY_CERT_SIGN_KEY_USAGE     0x04\n#define CERT_OFFLINE_CRL_SIGN_KEY_USAGE  0x02\n#define CERT_CRL_SIGN_KEY_USAGE          0x02\n#define CERT_ENCIPHER_ONLY_KEY_USAGE     0x01\n/* byte 1 */\n#define CERT_DECIPHER_ONLY_KEY_USAGE     0x80\n\ntypedef struct _CERT_POLICY_ID {\n    DWORD  cCertPolicyElementId;\n    LPSTR *rgbszCertPolicyElementId;\n} CERT_POLICY_ID, *PCERT_POLICY_ID;\n\ntypedef struct _CERT_KEY_USAGE_RESTRICTION_INFO {\n    DWORD           cCertPolicyId;\n    PCERT_POLICY_ID rgCertPolicyId;\n    CRYPT_BIT_BLOB  RestrictedKeyUsage;\n} CERT_KEY_USAGE_RESTRICTION_INFO, *PCERT_KEY_USAGE_RESTRICTION_INFO;\n\ntypedef struct _CERT_OTHER_NAME {\n    LPSTR            pszObjId;\n    CRYPT_OBJID_BLOB Value;\n} CERT_OTHER_NAME, *PCERT_OTHER_NAME;\n\ntypedef struct _CERT_ALT_NAME_ENTRY {\n    DWORD dwAltNameChoice;\n    union {\n        PCERT_OTHER_NAME pOtherName;\n        LPWSTR           pwszRfc822Name;\n        LPWSTR           pwszDNSName;\n        CERT_NAME_BLOB   DirectoryName;\n        LPWSTR           pwszURL;\n        CRYPT_DATA_BLOB  IPAddress;\n        LPSTR            pszRegisteredID;\n    } DUMMYUNIONNAME;\n} CERT_ALT_NAME_ENTRY, *PCERT_ALT_NAME_ENTRY;\n\n#define CERT_ALT_NAME_OTHER_NAME     1\n#define CERT_ALT_NAME_RFC822_NAME    2\n#define CERT_ALT_NAME_DNS_NAME       3\n#define CERT_ALT_NAME_X400_ADDRESS   4\n#define CERT_ALT_NAME_DIRECTORY_NAME 5\n#define CERT_ALT_NAME_EDI_PARTY_NAME 6\n#define CERT_ALT_NAME_URL            7\n#define CERT_ALT_NAME_IP_ADDRESS     8\n#define CERT_ALT_NAME_REGISTERED_ID  9\n\ntypedef struct _CERT_ALT_NAME_INFO {\n    DWORD                cAltEntry;\n    PCERT_ALT_NAME_ENTRY rgAltEntry;\n} CERT_ALT_NAME_INFO, *PCERT_ALT_NAME_INFO;\n\n#define CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK  0xff\n#define CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT 16\n#define CERT_ALT_NAME_VALUE_ERR_INDEX_MASK  0x0000ffff\n#define CERT_ALT_NAME_VALUE_ERR_INDEX_SHIFT 0\n#define GET_CERT_ALT_NAME_ENTRY_ERR_INDEX(x) \\\n (((x) >> CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT) & \\\n  CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK)\n#define GET_CERT_ALT_NAME_VALUE_ERR_INDEX(x) \\\n ((x) & CERT_ALT_NAME_VALUE_ERR_INDEX_MASK)\n\ntypedef struct _CERT_BASIC_CONSTRAINTS_INFO {\n    CRYPT_BIT_BLOB  SubjectType;\n    BOOL            fPathLenConstraint;\n    DWORD           dwPathLenConstraint;\n    DWORD           cSubtreesConstraint;\n    CERT_NAME_BLOB *rgSubtreesConstraint;\n} CERT_BASIC_CONSTRAINTS_INFO, *PCERT_BASIC_CONSTRAINTS_INFO;\n\n#define CERT_CA_SUBJECT_FLAG         0x80\n#define CERT_END_ENTITY_SUBJECT_FLAG 0x40\n\ntypedef struct _CERT_BASIC_CONSTRAINTS2_INFO {\n    BOOL  fCA;\n    BOOL  fPathLenConstraint;\n    DWORD dwPathLenConstraint;\n} CERT_BASIC_CONSTRAINTS2_INFO, *PCERT_BASIC_CONSTRAINTS2_INFO;\n\ntypedef struct _CERT_POLICY_QUALIFIER_INFO {\n    LPSTR            pszPolicyQualifierId;\n    CRYPT_OBJID_BLOB Qualifier;\n} CERT_POLICY_QUALIFIER_INFO, *PCERT_POLICY_QUALIFIER_INFO;\n\ntypedef struct _CERT_POLICY_INFO {\n    LPSTR                       pszPolicyIdentifier;\n    DWORD                       cPolicyQualifier;\n    CERT_POLICY_QUALIFIER_INFO *rgPolicyQualifier;\n} CERT_POLICY_INFO, *PCERT_POLICY_INFO;\n\ntypedef struct _CERT_POLICIES_INFO {\n    DWORD             cPolicyInfo;\n    CERT_POLICY_INFO *rgPolicyInfo;\n} CERT_POLICIES_INFO, *PCERT_POLICIES_INFO;\n\ntypedef struct _CERT_POLICY_QUALIFIER_NOTICE_REFERENCE {\n    LPSTR pszOrganization;\n    DWORD cNoticeNumbers;\n    int  *rgNoticeNumbers;\n} CERT_POLICY_QUALIFIER_NOTICE_REFERENCE,\n *PCERT_POLICY_QUALIFIER_NOTICE_REFERENCE;\n\ntypedef struct _CERT_POLICY_QUALIFIER_USER_NOTICE {\n    CERT_POLICY_QUALIFIER_NOTICE_REFERENCE *pNoticeReference;\n    LPWSTR                                  pszDisplayText;\n} CERT_POLICY_QUALIFIER_USER_NOTICE, *PCERT_POLICY_QUALIFIER_USER_NOTICE;\n\ntypedef struct _CPS_URLS {\n    LPWSTR                      pszURL;\n    CRYPT_ALGORITHM_IDENTIFIER *pAlgorithm;\n    CRYPT_DATA_BLOB            *pDigest;\n} CPS_URLS, *PCPS_URLS;\n\ntypedef struct _CERT_POLICY95_QUALIFIER1 {\n    LPWSTR    pszPracticesReference;\n    LPSTR     pszNoticeIdentifier;\n    LPSTR     pszNSINoticeIdentifier;\n    DWORD     cCPSURLs;\n    CPS_URLS *rgCPSURLs;\n} CERT_POLICY95_QUALIFIER1, *PCERT_POLICY95_QUALIFIER1;\n\ntypedef struct _CERT_POLICY_MAPPING {\n    LPSTR pszIssuerDomainPolicy;\n    LPSTR pszSubjectDomainPolicy;\n} CERT_POLICY_MAPPING, *PCERT_POLICY_MAPPING;\n\ntypedef struct _CERT_POLICY_MAPPINGS_INFO {\n    DWORD                cPolicyMapping;\n    PCERT_POLICY_MAPPING rgPolicyMapping;\n} CERT_POLICY_MAPPINGS_INFO, *PCERT_POLICY_MAPPINGS_INFO;\n\ntypedef struct _CERT_POLICY_CONSTRAINTS_INFO {\n    BOOL  fRequireExplicitPolicy;\n    DWORD dwRequireExplicitPolicySkipCerts;\n    BOOL  fInhibitPolicyMapping;\n    DWORD dwInhibitPolicyMappingSkipCerts;\n} CERT_POLICY_CONSTRAINTS_INFO, *PCERT_POLICY_CONSTRAINTS_INFO;\n\ntypedef struct _CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY {\n    LPSTR           pszObjId;\n    DWORD           cValue;\n    PCRYPT_DER_BLOB rgValue;\n} CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY, *PCRYPT_CONTENT_INFO_SEQUENCE_OF_ANY;\n\ntypedef struct _CRYPT_CONTENT_INFO {\n    LPSTR          pszObjId;\n    CRYPT_DER_BLOB Content;\n} CRYPT_CONTENT_INFO, *PCRYPT_CONTENT_INFO;\n\ntypedef struct _CRYPT_SEQUENCE_OF_ANY {\n    DWORD           cValue;\n    PCRYPT_DER_BLOB rgValue;\n} CRYPT_SEQUENCE_OF_ANY, *PCRYPT_SEQUENCE_OF_ANY;\n\ntypedef struct _CERT_AUTHORITY_KEY_ID2_INFO {\n    CRYPT_DATA_BLOB    KeyId;\n    CERT_ALT_NAME_INFO AuthorityCertIssuer;\n    CRYPT_INTEGER_BLOB AuthorityCertSerialNumber;\n} CERT_AUTHORITY_KEY_ID2_INFO, *PCERT_AUTHORITY_KEY_ID2_INFO;\n\ntypedef struct _CERT_ACCESS_DESCRIPTION {\n    LPSTR               pszAccessMethod;\n    CERT_ALT_NAME_ENTRY AccessLocation;\n} CERT_ACCESS_DESCRIPTION, *PCERT_ACCESS_DESCRIPTION;\n\ntypedef struct _CERT_AUTHORITY_INFO_ACCESS {\n    DWORD                    cAccDescr;\n    PCERT_ACCESS_DESCRIPTION rgAccDescr;\n} CERT_AUTHORITY_INFO_ACCESS, *PCERT_AUTHORITY_INFO_ACCESS;\n\ntypedef struct _CERT_CONTEXT {\n    DWORD      dwCertEncodingType;\n    BYTE       *pbCertEncoded;\n    DWORD      cbCertEncoded;\n    PCERT_INFO pCertInfo;\n    HCERTSTORE hCertStore;\n} CERT_CONTEXT, *PCERT_CONTEXT;\ntypedef const CERT_CONTEXT *PCCERT_CONTEXT;\n\ntypedef struct _CRL_ENTRY {\n    CRYPT_INTEGER_BLOB SerialNumber;\n    FILETIME           RevocationDate;\n    DWORD              cExtension;\n    PCERT_EXTENSION    rgExtension;\n} CRL_ENTRY, *PCRL_ENTRY;\n\ntypedef struct _CRL_INFO {\n    DWORD           dwVersion;\n    CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;\n    CERT_NAME_BLOB  Issuer;\n    FILETIME        ThisUpdate;\n    FILETIME        NextUpdate;\n    DWORD           cCRLEntry;\n    PCRL_ENTRY      rgCRLEntry;\n    DWORD           cExtension;\n    PCERT_EXTENSION rgExtension;\n} CRL_INFO, *PCRL_INFO;\n\ntypedef struct _CRL_DIST_POINT_NAME {\n    DWORD dwDistPointNameChoice;\n    union {\n        CERT_ALT_NAME_INFO FullName;\n    } DUMMYUNIONNAME;\n} CRL_DIST_POINT_NAME, *PCRL_DIST_POINT_NAME;\n\n#define CRL_DIST_POINT_NO_NAME         0\n#define CRL_DIST_POINT_FULL_NAME       1\n#define CRL_DIST_POINT_ISSUER_RDN_NAME 2\n\ntypedef struct _CRL_DIST_POINT {\n    CRL_DIST_POINT_NAME DistPointName;\n    CRYPT_BIT_BLOB      ReasonFlags;\n    CERT_ALT_NAME_INFO  CRLIssuer;\n} CRL_DIST_POINT, *PCRL_DIST_POINT;\n\n#define CRL_REASON_UNUSED_FLAG                 0x80\n#define CRL_REASON_KEY_COMPROMISE_FLAG         0x40\n#define CRL_REASON_CA_COMPROMISE_FLAG          0x20\n#define CRL_REASON_AFFILIATION_CHANGED_FLAG    0x10\n#define CRL_REASON_SUPERSEDED_FLAG             0x08\n#define CRL_REASON_CESSATION_OF_OPERATION_FLAG 0x04\n#define CRL_REASON_CERTIFICATE_HOLD_FLAG       0x02\n\ntypedef struct _CRL_DIST_POINTS_INFO {\n    DWORD           cDistPoint;\n    PCRL_DIST_POINT rgDistPoint;\n} CRL_DIST_POINTS_INFO, *PCRL_DIST_POINTS_INFO;\n\n#define CRL_DIST_POINT_ERR_INDEX_MASK  0x7f\n#define CRL_DIST_POINT_ERR_INDEX_SHIFT 24\n#define GET_CRL_DIST_POINT_ERR_INDEX(x) \\\n (((x) >> CRL_DIST_POINT_ERR_INDEX_SHIFT) & CRL_DIST_POINT_ERR_INDEX_MASK)\n\n#define CRL_DIST_POINT_ERR_CRL_ISSUER_BIT __MSABI_LONG(0x80000000)\n#define IS_CRL_DIST_POINT_ERR_CRL_ISSUER(x) \\\n ((x) & CRL_DIST_POINT_ERR_CRL_ISSUER_BIT)\n\ntypedef struct _CROSS_CERT_DIST_POINTS_INFO {\n    DWORD               dwSyncDeltaTime;\n    DWORD               cDistPoint;\n    PCERT_ALT_NAME_INFO rgDistPoint;\n} CROSS_CERT_DIST_POINTS_INFO, *PCROSS_CERT_DIST_POINTS_INFO;\n\n#define CROSS_CERT_DIST_POINT_ERR_INDEX_MASK  0xff\n#define CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT 24\n#define GET_CROSS_CERT_DIST_POINT_ERR_INDEX(x) \\\n (((x) >> CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT) & \\\n CROSS_CERT_DIST_POINT_ERR_INDEX_MASK)\n\ntypedef struct _CERT_PAIR {\n    CERT_BLOB Forward;\n    CERT_BLOB Reverse;\n} CERT_PAIR, *PCERT_PAIR;\n\ntypedef struct _CRL_ISSUING_DIST_POINT {\n    CRL_DIST_POINT_NAME DistPointName;\n    BOOL                fOnlyContainsUserCerts;\n    BOOL                fOnlyContainsCACerts;\n    CRYPT_BIT_BLOB      OnlySomeReasonFlags;\n    BOOL                fIndirectCRL;\n} CRL_ISSUING_DIST_POINT, *PCRL_ISSUING_DIST_POINT;\n\ntypedef struct _CERT_GENERAL_SUBTREE {\n    CERT_ALT_NAME_ENTRY Base;\n    DWORD               dwMinimum;\n    BOOL                fMaximum;\n    DWORD               dwMaximum;\n} CERT_GENERAL_SUBTREE, *PCERT_GENERAL_SUBTREE;\n\ntypedef struct _CERT_NAME_CONSTRAINTS_INFO {\n    DWORD                 cPermittedSubtree;\n    PCERT_GENERAL_SUBTREE rgPermittedSubtree;\n    DWORD                 cExcludedSubtree;\n    PCERT_GENERAL_SUBTREE rgExcludedSubtree;\n} CERT_NAME_CONSTRAINTS_INFO, *PCERT_NAME_CONSTRAINTS_INFO;\n\n#define CERT_EXCLUDED_SUBTREE_BIT __MSABI_LONG(0x80000000)\n#define IS_CERT_EXCLUDED_SUBTREE(x) ((x) & CERT_EXCLUDED_SUBTREE_BIT)\n\ntypedef struct _CRYPT_ATTRIBUTE {\n    LPSTR            pszObjId;\n    DWORD            cValue;\n    PCRYPT_DATA_BLOB rgValue;\n} CRYPT_ATTRIBUTE, *PCRYPT_ATTRIBUTE;\n\ntypedef struct _CRYPT_ATTRIBUTES {\n    DWORD            cAttr;\n    PCRYPT_ATTRIBUTE rgAttr;\n} CRYPT_ATTRIBUTES, *PCRYPT_ATTRIBUTES;\n\ntypedef struct _CERT_REQUEST_INFO {\n    DWORD                dwVersion;\n    CERT_NAME_BLOB       Subject;\n    CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;\n    DWORD                cAttribute;\n    PCRYPT_ATTRIBUTE     rgAttribute;\n} CERT_REQUEST_INFO, *PCERT_REQUEST_INFO;\n\ntypedef struct _CERT_KEYGEN_REQUEST_INFO {\n    DWORD                dwVersion;\n    CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;\n    LPWSTR               pwszChallengeString;\n} CERT_KEYGEN_REQUEST_INFO, *PCERT_KEYGEN_REQUEST_INFO;\n\ntypedef struct _CERT_SIGNED_CONTENT_INFO {\n    CRYPT_DER_BLOB             ToBeSigned;\n    CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;\n    CRYPT_BIT_BLOB             Signature;\n} CERT_SIGNED_CONTENT_INFO, *PCERT_SIGNED_CONTENT_INFO;\n\ntypedef struct _CRL_CONTEXT {\n    DWORD      dwCertEncodingType;\n    BYTE      *pbCrlEncoded;\n    DWORD      cbCrlEncoded;\n    PCRL_INFO  pCrlInfo;\n    HCERTSTORE hCertStore;\n} CRL_CONTEXT, *PCRL_CONTEXT;\ntypedef const CRL_CONTEXT *PCCRL_CONTEXT;\n\n#define SORTED_CTL_EXT_FLAGS_OFFSET                (0*4)\n#define SORTED_CTL_EXT_COUNT_OFFSET                (1*4)\n#define SORTED_CTL_EXT_MAX_COLLISION_OFFSET        (2*4)\n#define SORTED_CTL_EXT_HASH_BUCKET_OFFSET          (3*4)\n\n#define SORTED_CTL_EXT_HASHED_SUBJECT_IDENTIFIER_FLAG    0x1\n\ntypedef struct _CERT_DSS_PARAMETERS {\n    CRYPT_UINT_BLOB    p;\n    CRYPT_UINT_BLOB    q;\n    CRYPT_UINT_BLOB    g;\n} CERT_DSS_PARAMETERS, *PCERT_DSS_PARAMETERS;\n\n#define CERT_DSS_R_LEN            20\n#define CERT_DSS_S_LEN            20\n#define CERT_DSS_SIGNATURE_LEN    (CERT_DSS_R_LEN + CERT_DSS_S_LEN)\n\n#define CERT_MAX_ENCODED_DSS_SIGNATURE_LEN    (2 + 2*(2 + 20 +1))\n\ntypedef struct _CERT_DH_PARAMETERS {\n    CRYPT_UINT_BLOB    p;\n    CRYPT_UINT_BLOB    g;\n} CERT_DH_PARAMETERS, *PCERT_DH_PARAMETERS;\n\ntypedef struct _CERT_X942_DH_VALIDATION_PARAMS {\n    CRYPT_BIT_BLOB     seed;\n    DWORD              pgenCounter;\n} CERT_X942_DH_VALIDATION_PARAMS, *PCERT_X942_DH_VALIDATION_PARAMS;\n\ntypedef struct _CERT_X942_DH_PARAMETERS {\n    CRYPT_UINT_BLOB                    p;\n    CRYPT_UINT_BLOB                    g;\n    CRYPT_UINT_BLOB                    q;\n    CRYPT_UINT_BLOB                    j;\n    PCERT_X942_DH_VALIDATION_PARAMS    pValidationParams;\n} CERT_X942_DH_PARAMETERS, *PCERT_X942_DH_PARAMETERS;\n\n#define CRYPT_X942_COUNTER_BYTE_LENGTH        4\n#define CRYPT_X942_KEY_LENGTH_BYTE_LENGTH     4\n#define CRYPT_X942_PUB_INFO_BYTE_LENGTH       (512/8)\n\ntypedef struct _CRYPT_X942_OTHER_INFO {\n    LPSTR              pszContentEncryptionObjId;\n    BYTE               rgbCounter[CRYPT_X942_COUNTER_BYTE_LENGTH];\n    BYTE               rgbKeyLength[CRYPT_X942_KEY_LENGTH_BYTE_LENGTH];\n    CRYPT_DATA_BLOB    PubInfo;\n} CRYPT_X942_OTHER_INFO, *PCRYPT_X942_OTHER_INFO;\n\ntypedef struct _CRYPT_RC2_CBC_PARAMETERS {\n    DWORD    dwVersion;\n    BOOL     fIV;\n    BYTE     rgbIV[4];\n} CRYPT_RC2_CBC_PARAMETERS, *PCRYPT_RC2_CBC_PARAMETERS;\n\n#define CRYPT_RC2_40BIT_VERSION    160\n#define CRYPT_RC2_56BIT_VERSION    52\n#define CRYPT_RC2_64BIT_VERSION    120\n#define CRYPT_RC2_128BIT_VERSION   58\n\ntypedef struct _CRYPT_SMIME_CAPABILITY {\n    LPSTR               pszObjId;\n    CRYPT_OBJID_BLOB    Parameters;\n} CRYPT_SMIME_CAPABILITY, *PCRYPT_SMIME_CAPABILITY;\n\ntypedef struct _CRYPT_SMIME_CAPABILITIES {\n    DWORD                   cCapability;\n    PCRYPT_SMIME_CAPABILITY rgCapability;\n} CRYPT_SMIME_CAPABILITIES, *PCRYPT_SMIME_CAPABILITIES;\n\ntypedef struct _VTableProvStruc {\n    DWORD    Version;\n#ifdef WINE_STRICT_PROTOTYPES\n    BOOL     (WINAPI *FuncVerifyImage)(LPCSTR,BYTE*);\n    void     (WINAPI *FuncReturnhWnd)(HWND*);\n#else\n    FARPROC  FuncVerifyImage;\n    FARPROC  FuncReturnhWnd;\n#endif\n    DWORD    dwProvType;\n    BYTE    *pbContextInfo;\n    DWORD    cbContextInfo;\n    LPSTR    pszProvName;\n} VTableProvStruc, *PVTableProvStruc;\n\ntypedef struct _CERT_PRIVATE_KEY_INFO {\n    DWORD                      Version;\n    CRYPT_ALGORITHM_IDENTIFIER Algorithm;\n    CRYPT_DER_BLOB             PrivateKey;\n    PCRYPT_ATTRIBUTES          pAttributes;\n} CERT_PRIVATE_KEY_INFO, *PCERT_PRIVATE_KEY_INFO;\n\ntypedef struct _CTL_USAGE {\n    DWORD  cUsageIdentifier;\n    LPSTR *rgpszUsageIdentifier;\n} CTL_USAGE, *PCTL_USAGE, CERT_ENHKEY_USAGE, *PCERT_ENHKEY_USAGE;\n\ntypedef struct _CTL_ENTRY {\n    CRYPT_DATA_BLOB  SubjectIdentifier;\n    DWORD            cAttribute;\n    PCRYPT_ATTRIBUTE rgAttribute;\n} CTL_ENTRY, *PCTL_ENTRY;\n\ntypedef struct _CTL_INFO {\n    DWORD                      dwVersion;\n    CTL_USAGE                  SubjectUsage;\n    CRYPT_DATA_BLOB            ListIdentifier;\n    CRYPT_INTEGER_BLOB         SequenceNumber;\n    FILETIME                   ThisUpdate;\n    FILETIME                   NextUpdate;\n    CRYPT_ALGORITHM_IDENTIFIER SubjectAlgorithm;\n    DWORD                      cCTLEntry;\n    PCTL_ENTRY                 rgCTLEntry;\n    DWORD                      cExtension;\n    PCERT_EXTENSION            rgExtension;\n} CTL_INFO, *PCTL_INFO;\n\ntypedef struct _CTL_CONTEXT {\n    DWORD      dwMsgAndCertEncodingType;\n    BYTE      *pbCtlEncoded;\n    DWORD      cbCtlEncoded;\n    PCTL_INFO  pCtlInfo;\n    HCERTSTORE hCertStore;\n    HCRYPTMSG  hCryptMsg;\n    BYTE      *pbCtlContext;\n    DWORD      cbCtlContext;\n} CTL_CONTEXT, *PCTL_CONTEXT;\ntypedef const CTL_CONTEXT *PCCTL_CONTEXT;\n\ntypedef struct _CRYPT_TIME_STAMP_REQUEST_INFO {\n    LPSTR            pszTimeStampAlgorithm;\n    LPSTR            pszContentType;\n    CRYPT_OBJID_BLOB Content;\n    DWORD            cAttribute;\n    PCRYPT_ATTRIBUTE rgAttribute;\n} CRYPT_TIME_STAMP_REQUEST_INFO, *PCRYPT_TIME_STAMP_REQUEST_INFO;\n\ntypedef struct _CRYPT_ENROLLMENT_NAME_VALUE_PAIR {\n    LPWSTR pwszName;\n    LPWSTR pwszValue;\n} CRYPT_ENROLLMENT_NAME_VALUE_PAIR, *PCRYPT_ENROLLMENT_NAME_VALUE_PAIR;\n\ntypedef struct _CMSG_SIGNER_INFO {\n    DWORD                      dwVersion;\n    CERT_NAME_BLOB             Issuer;\n    CRYPT_INTEGER_BLOB         SerialNumber;\n    CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;\n    CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;\n    CRYPT_DATA_BLOB            EncryptedHash;\n    CRYPT_ATTRIBUTES           AuthAttrs;\n    CRYPT_ATTRIBUTES           UnauthAttrs;\n} CMSG_SIGNER_INFO, *PCMSG_SIGNER_INFO;\n\n#define CMSG_VERIFY_SIGNER_PUBKEY 1\n#define CMSG_VERIFY_SIGNER_CERT   2\n#define CMSG_VERIFY_SIGNER_CHAIN  3\n#define CMSG_VERIFY_SIGNER_NULL   4\n\ntypedef struct _CERT_REVOCATION_CRL_INFO {\n    DWORD         cbSize;\n    PCCRL_CONTEXT pBaseCrlContext;\n    PCCRL_CONTEXT pDeltaCrlContext;\n    PCRL_ENTRY    pCrlEntry;\n    BOOL          fDeltaCrlEntry;\n} CERT_REVOCATION_CRL_INFO, *PCERT_REVOCATION_CRL_INFO;\n\ntypedef struct _CERT_REVOCATION_INFO {\n    DWORD                     cbSize;\n    DWORD                     dwRevocationResult;\n    LPCSTR                    pszRevocationOid;\n    LPVOID                    pvOidSpecificInfo;\n    BOOL                      fHasFreshnessTime;\n    DWORD                     dwFreshnessTime;\n    PCERT_REVOCATION_CRL_INFO pCrlInfo;\n} CERT_REVOCATION_INFO, *PCERT_REVOCATION_INFO;\n\ntypedef struct _CERT_REVOCATION_PARA {\n    DWORD                     cbSize;\n    PCCERT_CONTEXT            pIssuerCert;\n    DWORD                     cCertStore;\n    HCERTSTORE               *rgCertStore;\n    HCERTSTORE                hCrlStore;\n    LPFILETIME                pftTimeToUse;\n#ifdef CERT_REVOCATION_PARA_HAS_EXTRA_FIELDS\n    DWORD                     dwUrlRetrievalTimeout;\n    BOOL                      fCheckFreshnessTime;\n    DWORD                     dwFreshnessTime;\n    LPFILETIME                pftCurrentTime;\n    PCERT_REVOCATION_CRL_INFO pCrlInfo;\n#endif\n} CERT_REVOCATION_PARA, *PCERT_REVOCATION_PARA;\n\n#define CERT_CONTEXT_REVOCATION_TYPE 1\n#define CERT_VERIFY_REV_CHAIN_FLAG                0x00000001\n#define CERT_VERIFY_CACHE_ONLY_BASED_REVOCATION   0x00000002\n#define CERT_VERIFY_REV_ACCUMULATIVE_TIMEOUT_FLAG 0x00000004\n\ntypedef struct _CTL_VERIFY_USAGE_PARA {\n    DWORD           cbSize;\n    CRYPT_DATA_BLOB ListIdentifier;\n    DWORD           cCtlStore;\n    HCERTSTORE     *rghCtlStore;\n    DWORD           cSignerStore;\n    HCERTSTORE     *rghSignerStore;\n} CTL_VERIFY_USAGE_PARA, *PCTL_VERIFY_USAGE_PARA;\n\ntypedef struct _CTL_VERIFY_USAGE_STATUS {\n    DWORD           cbSize;\n    DWORD           dwError;\n    DWORD           dwFlags;\n    PCCTL_CONTEXT  *ppCtl;\n    DWORD           dwCtlEntryIndex;\n    PCCERT_CONTEXT *ppSigner;\n    DWORD           dwSignerIndex;\n} CTL_VERIFY_USAGE_STATUS, *PCTL_VERIFY_USAGE_STATUS;\n\n#define CERT_VERIFY_INHIBIT_CTL_UPDATE_FLAG 0x1\n#define CERT_VERIFY_TRUSTED_SIGNERS_FLAG    0x2\n#define CERT_VERIFY_NO_TIME_CHECK_FLAG      0x4\n#define CERT_VERIFY_ALLOW_MORE_USAGE_FLAG   0x8\n#define CERT_VERIFY_UPDATED_CTL_FLAG        0x1\n\ntypedef struct _CERT_CHAIN {\n    DWORD               cCerts;\n    PCERT_BLOB          certs;\n    CRYPT_KEY_PROV_INFO keyLocatorInfo;\n} CERT_CHAIN, *PCERT_CHAIN;\n\ntypedef struct _CERT_REVOCATION_STATUS {\n    DWORD cbSize;\n    DWORD dwIndex;\n    DWORD dwError;\n    DWORD dwReason;\n    BOOL  fHasFreshnessTime;\n    DWORD dwFreshnessTime;\n} CERT_REVOCATION_STATUS, *PCERT_REVOCATION_STATUS;\n\ntypedef struct _CERT_TRUST_LIST_INFO {\n    DWORD         cbSize;\n    PCTL_ENTRY    pCtlEntry;\n    PCCTL_CONTEXT pCtlContext;\n} CERT_TRUST_LIST_INFO, *PCERT_TRUST_LIST_INFO;\n\n#define CERT_TRUST_NO_ERROR                          0x00000000\n#define CERT_TRUST_IS_NOT_TIME_VALID                 0x00000001\n#define CERT_TRUST_IS_NOT_TIME_NESTED                0x00000002\n#define CERT_TRUST_IS_REVOKED                        0x00000004\n#define CERT_TRUST_IS_NOT_SIGNATURE_VALID            0x00000008\n#define CERT_TRUST_IS_NOT_VALID_FOR_USAGE            0x00000010\n#define CERT_TRUST_IS_UNTRUSTED_ROOT                 0x00000020\n#define CERT_TRUST_REVOCATION_STATUS_UNKNOWN         0x00000040\n#define CERT_TRUST_IS_CYCLIC                         0x00000080\n#define CERT_TRUST_INVALID_EXTENSION                 0x00000100\n#define CERT_TRUST_INVALID_POLICY_CONSTRAINTS        0x00000200\n#define CERT_TRUST_INVALID_BASIC_CONSTRAINTS         0x00000400\n#define CERT_TRUST_INVALID_NAME_CONSTRAINTS          0x00000800\n#define CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT 0x00001000\n#define CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT   0x00002000\n#define CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT 0x00004000\n#define CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT      0x00008000\n#define CERT_TRUST_IS_OFFLINE_REVOCATION             0x01000000\n#define CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY          0x02000000\n#define CERT_TRUST_IS_EXPLICIT_DISTRUST              0x04000000\n#define CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT    0x08000000\n\n#define CERT_TRUST_IS_PARTIAL_CHAIN                  0x00010000\n#define CERT_TRUST_CTL_IS_NOT_TIME_VALID             0x00020000\n#define CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID        0x00040000\n#define CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE        0x00080000\n\n#define CERT_TRUST_HAS_EXACT_MATCH_ISSUER            0x00000001\n#define CERT_TRUST_HAS_KEY_MATCH_ISSUER              0x00000002\n#define CERT_TRUST_HAS_NAME_MATCH_ISSUER             0x00000004\n#define CERT_TRUST_IS_SELF_SIGNED                    0x00000008\n\n#define CERT_TRUST_HAS_PREFERRED_ISSUER              0x00000100\n#define CERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY         0x00000200\n#define CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS        0x00000400\n#define CERT_TRUST_IS_PEER_TRUSTED                   0x00000800\n#define CERT_TRUST_HAS_CRL_VALIDITY_EXTENDED         0x00001000\n\n#define CERT_TRUST_IS_COMPLEX_CHAIN                  0x00010000\n\ntypedef struct _CERT_TRUST_STATUS {\n    DWORD dwErrorStatus;\n    DWORD dwInfoStatus;\n} CERT_TRUST_STATUS, *PCERT_TRUST_STATUS;\n\ntypedef struct _CERT_CHAIN_ELEMENT {\n    DWORD                 cbSize;\n    PCCERT_CONTEXT        pCertContext;\n    CERT_TRUST_STATUS     TrustStatus;\n    PCERT_REVOCATION_INFO pRevocationInfo;\n    PCERT_ENHKEY_USAGE    pIssuanceUsage;\n    PCERT_ENHKEY_USAGE    pApplicationUsage;\n    LPCWSTR               pwszExtendedErrorInfo;\n} CERT_CHAIN_ELEMENT, *PCERT_CHAIN_ELEMENT;\n\ntypedef struct _CERT_SIMPLE_CHAIN {\n    DWORD                 cbSize;\n    CERT_TRUST_STATUS     TrustStatus;\n    DWORD                 cElement;\n    PCERT_CHAIN_ELEMENT  *rgpElement;\n    PCERT_TRUST_LIST_INFO pTrustListInfo;\n    BOOL                  fHasRevocationFreshnessTime;\n    DWORD                 dwRevocationFreshnessTime;\n} CERT_SIMPLE_CHAIN, *PCERT_SIMPLE_CHAIN;\n\ntypedef struct _CERT_CHAIN_CONTEXT CERT_CHAIN_CONTEXT, *PCERT_CHAIN_CONTEXT;\ntypedef const CERT_CHAIN_CONTEXT *PCCERT_CHAIN_CONTEXT;\n\nstruct _CERT_CHAIN_CONTEXT {\n    DWORD                 cbSize;\n    CERT_TRUST_STATUS     TrustStatus;\n    DWORD                 cChain;\n    PCERT_SIMPLE_CHAIN   *rgpChain;\n    DWORD                 cLowerQualityChainContext;\n    PCCERT_CHAIN_CONTEXT *rgpLowerQualityChainContext;\n    BOOL                  fHasRevocationFreshnessTime;\n    DWORD                 dwRevocationFreshnessTime;\n};\n\ntypedef struct _CERT_CHAIN_POLICY_PARA {\n    DWORD cbSize;\n    DWORD dwFlags;\n    void *pvExtraPolicyPara;\n} CERT_CHAIN_POLICY_PARA, *PCERT_CHAIN_POLICY_PARA;\n\ntypedef struct _CERT_CHAIN_POLICY_STATUS {\n    DWORD cbSize;\n    DWORD dwError;\n    LONG  lChainIndex;\n    LONG  lElementIndex;\n    void *pvExtraPolicyStatus;\n} CERT_CHAIN_POLICY_STATUS, *PCERT_CHAIN_POLICY_STATUS;\n\n#define CERT_CHAIN_POLICY_BASE              ((LPCSTR)1)\n#define CERT_CHAIN_POLICY_AUTHENTICODE      ((LPCSTR)2)\n#define CERT_CHAIN_POLICY_AUTHENTICODE_TS   ((LPCSTR)3)\n#define CERT_CHAIN_POLICY_SSL               ((LPCSTR)4)\n#define CERT_CHAIN_POLICY_BASIC_CONSTRAINTS ((LPCSTR)5)\n#define CERT_CHAIN_POLICY_NT_AUTH           ((LPCSTR)6)\n#define CERT_CHAIN_POLICY_MICROSOFT_ROOT    ((LPCSTR)7)\n\n#define CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG            0x00000001\n#define CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG        0x00000002\n#define CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG           0x00000004\n#define CERT_CHAIN_POLICY_IGNORE_INVALID_BASIC_CONSTRAINTS_FLAG 0x00000008\n\n#define CERT_CHAIN_POLICY_IGNORE_ALL_NOT_TIME_VALID_FLAGS ( \\\n CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG \\\n CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG \\\n CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG )\n\n#define CERT_CHAIN_POLICY_ALLOW_UNKNOWN_CA_FLAG                 0x00000010\n#define CERT_CHAIN_POLICY_IGNORE_WRONG_USAGE_FLAG               0x00000020\n#define CERT_CHAIN_POLICY_IGNORE_INVALID_NAME_FLAG              0x00000040\n#define CERT_CHAIN_POLICY_IGNORE_INVALID_POLICY_FLAG            0x00000080\n\n#define CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG           0x00000100\n#define CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG    0x00000200\n#define CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG            0x00000400\n#define CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG          0x00000800\n\n#define CERT_CHAIN_POLICY_IGNORE_ALL_REV_UNKNOWN_FLAGS ( \\\n CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG \\\n CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG \\\n CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG \\\n CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG )\n\n#define CERT_CHAIN_POLICY_IGNORE_PEER_TRUST_FLAG                 0x00001000\n#define CERT_CHAIN_POLICY_IGNORE_NOT_SUPPORTED_CRITICAL_EXT_FLAG 0x00002000\n#define CERT_CHAIN_POLICY_TRUST_TESTROOT_FLAG                    0x00004000\n#define CERT_CHAIN_POLICY_ALLOW_TESTROOT_FLAG                    0x00008000\n#define MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG   0x00010000\n\ntypedef struct _AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA {\n    DWORD             cbSize;\n    DWORD             dwRegPolicySettings;\n    PCMSG_SIGNER_INFO pSignerInfo;\n} AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA,\n *PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA;\n\ntypedef struct _AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS {\n    DWORD cbSize;\n    BOOL  fCommercial;\n} AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS,\n *PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS;\n\ntypedef struct _AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA {\n    DWORD cbSize;\n    DWORD dwRegPolicySettings;\n    BOOL  fCommercial;\n} AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA,\n *PAUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA;\n\ntypedef struct _HTTPSPolicyCallbackData {\n    union {\n        DWORD cbStruct;\n        DWORD cbSize;\n    } DUMMYUNIONNAME;\n    DWORD  dwAuthType;\n    DWORD  fdwChecks;\n    WCHAR *pwszServerName;\n} HTTPSPolicyCallbackData, *PHTTPSPolicyCallbackData,\n SSL_EXTRA_CERT_CHAIN_POLICY_PARA, *PSSL_EXTRA_CERT_CHAIN_POLICY_PARA;\n\n/* Values for HTTPSPolicyCallbackData's dwAuthType */\n#define AUTHTYPE_CLIENT 1\n#define AUTHTYPE_SERVER 2\n/* Values for HTTPSPolicyCallbackData's fdwChecks are defined in wininet.h */\n\n#define BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_CA_FLAG         0x80000000\n#define BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_END_ENTITY_FLAG 0x40000000\n\n#define MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG 0x00010000\n\n#define USAGE_MATCH_TYPE_AND 0x00000000\n#define USAGE_MATCH_TYPE_OR  0x00000001\n\ntypedef struct _CERT_USAGE_MATCH {\n    DWORD             dwType;\n    CERT_ENHKEY_USAGE Usage;\n} CERT_USAGE_MATCH, *PCERT_USAGE_MATCH;\n\ntypedef struct _CTL_USAGE_MATCH {\n    DWORD     dwType;\n    CTL_USAGE Usage;\n} CTL_USAGE_MATCH, *PCTL_USAGE_MATCH;\n\n#define CERT_CHAIN_REVOCATION_CHECK_END_CERT           0x10000000\n#define CERT_CHAIN_REVOCATION_CHECK_CHAIN              0x20000000\n#define CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x40000000\n#define CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY         0x80000000\n\n#define CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT     0x08000000\n\n#define CERT_CHAIN_DISABLE_PASS1_QUALITY_FILTERING     0x00000040\n#define CERT_CHAIN_RETURN_LOWER_QUALITY_CONTEXTS       0x00000080\n#define CERT_CHAIN_DISABLE_AUTH_ROOT_AUTO_UPDATE       0x00000100\n#define CERT_CHAIN_TIMESTAMP_TIME                      0x00000200\n\ntypedef struct _CERT_CHAIN_PARA {\n    DWORD            cbSize;\n    CERT_USAGE_MATCH RequestedUsage;\n#ifdef CERT_CHAIN_PARA_HAS_EXTRA_FIELDS\n    CERT_USAGE_MATCH RequestedIssuancePolicy;\n    DWORD            dwUrlRetrievalTimeout;\n    BOOL             fCheckRevocationFreshnessTime;\n    DWORD            dwRevocationFreshnessTime;\n    LPFILETIME       pftCacheResync;\n#endif\n} CERT_CHAIN_PARA, *PCERT_CHAIN_PARA;\n\ntypedef struct _CERT_SYSTEM_STORE_INFO {\n    DWORD cbSize;\n} CERT_SYSTEM_STORE_INFO, *PCERT_SYSTEM_STORE_INFO;\n\ntypedef struct _CERT_PHYSICAL_STORE_INFO {\n    DWORD           cbSize;\n    LPSTR           pszOpenStoreProvider;\n    DWORD           dwOpenEncodingType;\n    DWORD           dwOpenFlags;\n    CRYPT_DATA_BLOB OpenParameters;\n    DWORD           dwFlags;\n    DWORD           dwPriority;\n} CERT_PHYSICAL_STORE_INFO, *PCERT_PHYSICAL_STORE_INFO;\n\ntypedef struct _CERT_SYSTEM_STORE_RELOCATE_PARA {\n    union {\n        HKEY  hKeyBase;\n        VOID *pvBase;\n    } DUMMYUNIONNAME;\n    union {\n        void   *pvSystemStore;\n        LPCSTR  pszSystemStore;\n        LPCWSTR pwszSystemStore;\n    } DUMMYUNIONNAME2;\n} CERT_SYSTEM_STORE_RELOCATE_PARA, *PCERT_SYSTEM_STORE_RELOCATE_PARA;\n\ntypedef BOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE_LOCATION)(\n LPCWSTR pwszStoreLocation, DWORD dwFlags, void *pvReserved, void *pvArg);\n\ntypedef BOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE)(const void *pvSystemStore,\n DWORD dwFlags, PCERT_SYSTEM_STORE_INFO pStoreInfo, void *pvReserved,\n void *pvArg);\n\ntypedef BOOL (WINAPI *PFN_CERT_ENUM_PHYSICAL_STORE)(const void *pvSystemStore,\n DWORD dwFlags, LPCWSTR pwszStoreName, PCERT_PHYSICAL_STORE_INFO pStoreInfo,\n void *pvReserved, void *pvArg);\n\n/* Encode/decode object */\ntypedef LPVOID (__WINE_ALLOC_SIZE(1) WINAPI *PFN_CRYPT_ALLOC)(size_t cbsize);\ntypedef VOID   (WINAPI *PFN_CRYPT_FREE)(LPVOID pv);\n\ntypedef struct _CRYPT_ENCODE_PARA {\n    DWORD           cbSize;\n    PFN_CRYPT_ALLOC pfnAlloc;\n    PFN_CRYPT_FREE  pfnFree;\n} CRYPT_ENCODE_PARA, *PCRYPT_ENCODE_PARA;\n\ntypedef struct _CRYPT_DECODE_PARA {\n    DWORD           cbSize;\n    PFN_CRYPT_ALLOC pfnAlloc;\n    PFN_CRYPT_FREE  pfnFree;\n} CRYPT_DECODE_PARA, *PCRYPT_DECODE_PARA;\n\ntypedef struct _CERT_STORE_PROV_INFO {\n    DWORD             cbSize;\n    DWORD             cStoreProvFunc;\n    void            **rgpvStoreProvFunc;\n    HCERTSTOREPROV    hStoreProv;\n    DWORD             dwStoreProvFlags;\n    HCRYPTOIDFUNCADDR hStoreProvFuncAddr2;\n} CERT_STORE_PROV_INFO, *PCERT_STORE_PROV_INFO;\n\ntypedef BOOL (WINAPI *PFN_CERT_DLL_OPEN_STORE_PROV_FUNC)(\n LPCSTR lpszStoreProvider, DWORD dwEncodingType, HCRYPTPROV_LEGACY hCryptProv,\n DWORD dwFlags, const void *pvPara, HCERTSTORE hCertStore,\n PCERT_STORE_PROV_INFO pStoreProvInfo);\n\ntypedef void (WINAPI *PFN_CERT_STORE_PROV_CLOSE)(HCERTSTOREPROV hStoreProv,\n DWORD dwFlags);\n\ntypedef BOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CERT)(HCERTSTOREPROV hStoreProv,\n PCCERT_CONTEXT pStoreCertContext, DWORD dwFlags,\n PCCERT_CONTEXT *ppProvCertContext);\n\ntypedef BOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CERT)(HCERTSTOREPROV hStoreProv,\n PCCERT_CONTEXT pCertContext, DWORD dwFlags);\n\ntypedef BOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CERT)(\n HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwFlags);\n\ntypedef BOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CERT_PROPERTY)(\n HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwPropId,\n DWORD dwFlags, const void *pvData);\n\ntypedef BOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CRL)(HCERTSTOREPROV hStoreProv,\n PCCRL_CONTEXT pStoreCrlContext, DWORD dwFlags,\n PCCRL_CONTEXT *ppProvCrlContext);\n\ntypedef BOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CRL)(HCERTSTOREPROV hStoreProv,\n PCCRL_CONTEXT pCrlContext, DWORD dwFlags);\n\ntypedef BOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CRL)(HCERTSTOREPROV hStoreProv,\n PCCRL_CONTEXT pCrlContext, DWORD dwFlags);\n\ntypedef BOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CRL_PROPERTY)(\n HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, DWORD dwPropId,\n DWORD dwFlags, const void *pvData);\n\ntypedef BOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CTL)(HCERTSTOREPROV hStoreProv,\n PCCTL_CONTEXT pStoreCtlContext, DWORD dwFlags,\n PCCTL_CONTEXT *ppProvCtlContext);\n\ntypedef BOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CTL)(HCERTSTOREPROV hStoreProv,\n PCCTL_CONTEXT pCtlContext, DWORD dwFlags);\n\ntypedef BOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CTL)(\n HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwFlags);\n\ntypedef BOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CTL_PROPERTY)(\n HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwPropId,\n DWORD dwFlags, const void *pvData);\n\ntypedef BOOL (WINAPI *PFN_CERT_STORE_PROV_CONTROL)(HCERTSTOREPROV hStoreProv,\n DWORD dwFlags, DWORD dwCtrlType, void const *pvCtrlPara);\n\ntypedef struct _CERT_STORE_PROV_FIND_INFO {\n    DWORD       cbSize;\n    DWORD       dwMsgAndCertEncodingType;\n    DWORD       dwFindFlags;\n    DWORD       dwFindType;\n    const void *pvFindPara;\n} CERT_STORE_PROV_FIND_INFO, *PCERT_STORE_PROV_FIND_INFO;\ntypedef const CERT_STORE_PROV_FIND_INFO CCERT_STORE_PROV_FIND_INFO,\n *PCCERT_STORE_PROV_FIND_INFO;\n\ntypedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CERT)(HCERTSTOREPROV hStoreProv,\n PCCERT_STORE_PROV_FIND_INFO pFindInfo, PCCERT_CONTEXT pPrevCertContext,\n DWORD dwFlags, void **ppvStoreProvFindInfo, PCCERT_CONTEXT *ppProvCertContext);\n\ntypedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CERT)(\n HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext,\n void *pvStoreProvFindInfo, DWORD dwFlags);\n\ntypedef BOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CERT_PROPERTY)(\n HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwPropId,\n DWORD dwFlags, void *pvData, DWORD *pcbData);\n\ntypedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CRL)(HCERTSTOREPROV hStoreProv,\n PCCERT_STORE_PROV_FIND_INFO pFindInfo, PCCRL_CONTEXT pPrevCrlContext,\n DWORD dwFlags, void **ppvStoreProvFindInfo, PCCRL_CONTEXT *ppProvCrlContext);\n\ntypedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CRL)(\n HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext,\n void *pvStoreProvFindInfo, DWORD dwFlags);\n\ntypedef BOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CRL_PROPERTY)(\n HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, DWORD dwPropId,\n DWORD dwFlags, void *pvData, DWORD *pcbData);\n\ntypedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CTL)(HCERTSTOREPROV hStoreProv,\n PCCTL_CONTEXT pCtlContext, void *pvStoreProvFindInfo, DWORD dwFlags);\n\ntypedef BOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CTL_PROPERTY)(\n HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwPropId,\n DWORD dwFlags, void *pvData);\n\ntypedef struct _CERT_CREATE_CONTEXT_PARA {\n    DWORD          cbSize;\n    PFN_CRYPT_FREE pfnFree;\n    void          *pvFree;\n} CERT_CREATE_CONTEXT_PARA, *PCERT_CREATE_CONTEXT_PARA;\n\ntypedef struct _CRYPT_OID_FUNC_ENTRY {\n    LPCSTR pszOID;\n    void  *pvFuncAddr;\n} CRYPT_OID_FUNC_ENTRY, *PCRYPT_OID_FUNC_ENTRY;\n\ntypedef BOOL (WINAPI *PFN_CRYPT_ENUM_OID_FUNC)(DWORD dwEncodingType,\n LPCSTR pszFuncName, LPCSTR pszOID, DWORD cValue, const DWORD rgdwValueType[],\n LPCWSTR const rgpwszValueName[], const BYTE * const rgpbValueData[],\n const DWORD rgcbValueData[], void *pvArg);\n\n#define CRYPT_MATCH_ANY_ENCODING_TYPE 0xffffffff\n\n#define CALG_OID_INFO_CNG_ONLY   0xffffffff\n#define CALG_OID_INFO_PARAMETERS 0xfffffffe\n\n#define CRYPT_OID_INFO_HASH_PARAMETERS_ALGORITHM     (const WCHAR []){'C','r','y','p','t','O','I','D','I','n','f','o','H','a','s','h','P','a','r','a','m','e','t','e','r','s',0}\n#define CRYPT_OID_INFO_ECC_PARAMETERS_ALGORITHM      (const WCHAR []){'C','r','y','p','t','O','I','D','I','n','f','o','E','C','C','P','a','r','a','m','e','t','e','r','s',0}\n#define CRYPT_OID_INFO_MGF1_PARAMETERS_ALGORITHM     (const WCHAR []){'C','r','y','p','t','O','I','D','I','n','f','o','M','g','f','1','P','a','r','a','m','e','t','e','r','s',0}\n#define CRYPT_OID_INFO_NO_SIGN_ALGORITHM             (const WCHAR []){'C','r','y','p','t','O','I','D','I','n','f','o','N','o','S','i','g','n',0}\n#define CRYPT_OID_INFO_OAEP_PARAMETERS_ALGORITHM     (const WCHAR []){'C','r','y','p','t','O','I','D','I','n','f','o','O','A','E','P','P','a','r','a','m','e','t','e','r','s',0}\n#define CRYPT_OID_INFO_ECC_WRAP_PARAMETERS_ALGORITHM (const WCHAR []){'C','r','y','p','t','O','I','D','I','n','f','o','E','C','C','W','r','a','p','P','a','r','a','m','e','t','e','r','s',0}\n#define CRYPT_OID_INFO_NO_PARAMETERS_ALGORITHM       (const WCHAR []){'C','r','y','p','t','O','I','D','I','n','f','o','N','o','P','a','r','a','m','e','t','e','r','s',0}\n\ntypedef struct _CRYPT_OID_INFO {\n    DWORD   cbSize;\n    LPCSTR  pszOID;\n    LPCWSTR pwszName;\n    DWORD   dwGroupId;\n    union {\n        DWORD  dwValue;\n        ALG_ID Algid;\n        DWORD  dwLength;\n    } DUMMYUNIONNAME;\n    CRYPT_DATA_BLOB ExtraInfo;\n#ifdef CRYPT_OID_INFO_HAS_EXTRA_FIELDS\n    LPCWSTR         pwszCNGAlgid;\n    LPCWSTR         pwszCNGExtraAlgid;\n#endif\n} CRYPT_OID_INFO, *PCRYPT_OID_INFO;\ntypedef const CRYPT_OID_INFO CCRYPT_OID_INFO, *PCCRYPT_OID_INFO;\n\ntypedef BOOL (WINAPI *PFN_CRYPT_ENUM_OID_INFO)(PCCRYPT_OID_INFO pInfo,\n void *pvArg);\n\ntypedef struct _CRYPT_SIGN_MESSAGE_PARA {\n    DWORD                      cbSize;\n    DWORD                      dwMsgEncodingType;\n    PCCERT_CONTEXT             pSigningCert;\n    CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;\n    void *                     pvHashAuxInfo;\n    DWORD                      cMsgCert;\n    PCCERT_CONTEXT            *rgpMsgCert;\n    DWORD                      cMsgCrl;\n    PCCRL_CONTEXT             *rgpMsgCrl;\n    DWORD                      cAuthAttr;\n    PCRYPT_ATTRIBUTE           rgAuthAttr;\n    DWORD                      cUnauthAttr;\n    PCRYPT_ATTRIBUTE           rgUnauthAttr;\n    DWORD                      dwFlags;\n    DWORD                      dwInnerContentType;\n#ifdef CRYPT_SIGN_MESSAGE_PARA_HAS_CMS_FIELDS\n    CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;\n    void *                     pvHashEncryptionAuxInfo;\n#endif\n} CRYPT_SIGN_MESSAGE_PARA, *PCRYPT_SIGN_MESSAGE_PARA;\n\n#define CRYPT_MESSAGE_BARE_CONTENT_OUT_FLAG         0x00000001\n#define CRYPT_MESSAGE_ENCAPSULATED_CONTENT_OUT_FLAG 0x00000002\n#define CRYPT_MESSAGE_KEYID_SIGNER_FLAG             0x00000004\n#define CRYPT_MESSAGE_SILENT_KEYSET_FLAG            0x00000008\n\ntypedef PCCERT_CONTEXT (WINAPI *PFN_CRYPT_GET_SIGNER_CERTIFICATE)(void *pvArg,\n DWORD dwCertEncodingType, PCERT_INFO pSignerId, HCERTSTORE hMsgCertStore);\n\ntypedef struct _CRYPT_VERIFY_MESSAGE_PARA {\n    DWORD                            cbSize;\n    DWORD                            dwMsgAndCertEncodingType;\n    HCRYPTPROV_LEGACY                hCryptProv;\n    PFN_CRYPT_GET_SIGNER_CERTIFICATE pfnGetSignerCertificate;\n    void *                           pvGetArg;\n} CRYPT_VERIFY_MESSAGE_PARA, *PCRYPT_VERIFY_MESSAGE_PARA;\n\ntypedef struct _CRYPT_ENCRYPT_MESSAGE_PARA {\n    DWORD                      cbSize;\n    DWORD                      dwMsgEncodingType;\n    HCRYPTPROV_LEGACY          hCryptProv;\n    CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;\n    void *                     pvEncryptionAuxInfo;\n    DWORD                      dwFlags;\n    DWORD                      dwInnerContentType;\n} CRYPT_ENCRYPT_MESSAGE_PARA, *PCRYPT_ENCRYPT_MESSAGE_PARA;\n\n#define CRYPT_MESSAGE_KEYID_RECIPIENT_FLAG 0x00000004\n\ntypedef struct _CRYPT_DECRYPT_MESSAGE_PARA {\n    DWORD       cbSize;\n    DWORD       dwMsgAndCertEncodingType;\n    DWORD       cCertStore;\n    HCERTSTORE *rghCertStore;\n#ifdef CRYPT_DECRYPT_MESSAGE_PARA_HAS_EXTRA_FIELDS\n    DWORD       dwFlags;\n#endif\n} CRYPT_DECRYPT_MESSAGE_PARA, *PCRYPT_DECRYPT_MESSAGE_PARA;\n\ntypedef struct _CRYPT_HASH_MESSAGE_PARA {\n    DWORD                      cbSize;\n    DWORD                      dwMsgEncodingType;\n    HCRYPTPROV_LEGACY          hCryptProv;\n    CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;\n    void *                     pvHashAuxInfo;\n} CRYPT_HASH_MESSAGE_PARA, *PCRYPT_HASH_MESSAGE_PARA;\n\ntypedef struct _CRYPT_KEY_SIGN_MESSAGE_PARA {\n    DWORD                      cbSize;\n    DWORD                      dwMsgAndCertEncodingType;\n    HCRYPTPROV                 hCryptProv;\n    DWORD                      dwKeySpec;\n    CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;\n    void *                     pvHashAuxInfo;\n} CRYPT_KEY_SIGN_MESSAGE_PARA, *PCRYPT_KEY_SIGN_MESSAGE_PARA;\n\ntypedef struct _CRYPT_KEY_VERIFY_MESSAGE_PARA {\n    DWORD      cbSize;\n    DWORD      dwMsgEncodingType;\n    HCRYPTPROV_LEGACY hCryptProv;\n} CRYPT_KEY_VERIFY_MESSAGE_PARA, *PCRYPT_KEY_VERIFY_MESSAGE_PARA;\n\ntypedef struct _CRYPT_URL_ARRAY {\n    DWORD   cUrl;\n    LPWSTR *rgwszUrl;\n} CRYPT_URL_ARRAY, *PCRYPT_URL_ARRAY;\n\ntypedef struct _CRYPT_URL_INFO {\n    DWORD  cbSize;\n    DWORD  dwSyncDeltaTime;\n    DWORD  cGroup;\n    DWORD *rgcGroupEntry;\n} CRYPT_URL_INFO, *PCRYPT_URL_INFO;\n\n#define URL_OID_CERTIFICATE_ISSUER                  ((LPCSTR)1)\n#define URL_OID_CERTIFICATE_CRL_DIST_POINT          ((LPCSTR)2)\n#define URL_OID_CTL_ISSUER                          ((LPCSTR)3)\n#define URL_OID_CTL_NEXT_UPDATE                     ((LPCSTR)4)\n#define URL_OID_CRL_ISSUER                          ((LPCSTR)5)\n#define URL_OID_CERTIFICATE_FRESHEST_CRL            ((LPCSTR)6)\n#define URL_OID_CRL_FRESHEST_CRL                    ((LPCSTR)7)\n#define URL_OID_CROSS_CERT_DIST_POINT               ((LPCSTR)8)\n#define URL_OID_CERTIFICATE_OCSP                    ((LPCSTR)9)\n#define URL_OID_CERTIFICATE_OCSP_AND_CRL_DIST_POINT ((LPCSTR)10)\n#define URL_OID_CERTIFICATE_CRL_DIST_POINT_AND_OCSP ((LPCSTR)11)\n#define URL_OID_CROSS_CERT_SUBJECT_INFO_ACCESS      ((LPCSTR)12)\n\n#define URL_OID_GET_OBJECT_URL_FUNC \"UrlDllGetObjectUrl\"\n\ntypedef HANDLE HCRYPTASYNC, *PHCRYPTASYNC;\n\ntypedef void (WINAPI *PFN_CRYPT_ASYNC_PARAM_FREE_FUNC)(LPSTR pszParamOid,\n LPVOID pvParam);\n\n#define CRYPT_PARAM_ASYNC_RETRIEVAL_COMPLETION ((LPCSTR)1)\n#define CRYPT_PARAM_CANCEL_ASYNC_RETRIEVAL     ((LPCSTR)2)\n\ntypedef void (WINAPI *PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC)(\n void *pvCompletion, DWORD dwCompletionCode, LPCSTR pszURL, LPSTR pszObjectOid,\n void *pvObject);\n\ntypedef struct _CRYPT_ASYNC_RETRIEVAL_COMPLETION\n{\n    PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC pfnCompletion;\n    void                                     *pvCompletion;\n} CRYPT_ASYNC_RETRIEVAL_COMPLETION, *PCRYPT_ASYNC_RETRIEVAL_COMPLETION;\n\ntypedef BOOL (WINAPI *PFN_CANCEL_ASYNC_RETRIEVAL_FUNC)(\n HCRYPTASYNC hAsyncRetrieve);\n\ntypedef struct _CRYPT_BLOB_ARRAY\n{\n    DWORD            cBlob;\n    PCRYPT_DATA_BLOB rgBlob;\n} CRYPT_BLOB_ARRAY, *PCRYPT_BLOB_ARRAY;\n\ntypedef struct _CRYPT_CREDENTIALS {\n    DWORD  cbSize;\n    LPCSTR pszCredentialsOid;\n    LPVOID pvCredentials;\n} CRYPT_CREDENTIALS, *PCRYPT_CREDENTIALS;\n\n#define CREDENTIAL_OID_PASSWORD_CREDENTIALS_A ((LPCSTR)1)\n#define CREDENTIAL_OID_PASSWORD_CREDENTIALS_W ((LPCSTR)2)\n#define CREDENTIAL_OID_PASSWORD_CREDENTIALS \\\n WINELIB_NAME_AW(CREDENTIAL_OID_PASSWORD_CREDENTIALS_)\n\ntypedef struct _CRYPT_PASSWORD_CREDENTIALSA {\n    DWORD cbSize;\n    LPSTR pszUsername;\n    LPSTR pszPassword;\n} CRYPT_PASSWORD_CREDENTIALSA, *PCRYPT_PASSWORD_CREDENTIALSA;\n\ntypedef struct _CRYPT_PASSWORD_CREDENTIALSW {\n    DWORD  cbSize;\n    LPWSTR pszUsername;\n    LPWSTR pszPassword;\n} CRYPT_PASSWORD_CREDENTIALSW, *PCRYPT_PASSWORD_CREDENTIALSW;\n#define CRYPT_PASSWORD_CREDENTIALS WINELIB_NAME_AW(CRYPT_PASSWORD_CREDENTIALS)\n#define PCRYPT_PASSWORD_CREDENTIALS WINELIB_NAME_AW(PCRYPT_PASSWORD_CREDENTIALS)\n\ntypedef struct _CRYPT_RETRIEVE_AUX_INFO {\n    DWORD     cbSize;\n    FILETIME *pLastSyncTime;\n    DWORD     dwMaxUrlRetrievalByteCount;\n} CRYPT_RETRIEVE_AUX_INFO, *PCRYPT_RETRIEVE_AUX_INFO;\n\ntypedef void (WINAPI *PFN_FREE_ENCODED_OBJECT_FUNC)(LPCSTR pszObjectOid,\n PCRYPT_BLOB_ARRAY pObject, void *pvFreeContext);\n\n#define SCHEME_OID_RETRIEVE_ENCODED_OBJECT_FUNC \\\n \"SchemeDllRetrieveEncodedObject\"\n#define SCHEME_OID_RETRIEVE_ENCODED_OBJECTW_FUNC \\\n \"SchemeDllRetrieveEncodedObjectW\"\n/* The signature of SchemeDllRetrieveEncodedObjectW is:\nBOOL WINAPI SchemeDllRetrieveEncodedObjectW(LPCWSTR pwszUrl,\n LPCSTR pszObjectOid, DWORD dwRetrievalFlags, DWORD dwTimeout,\n PCRYPT_BLOB_ARRAY pObject, PFN_FREE_ENCODED_OBJECT_FUNC *ppfnFreeObject,\n void **ppvFreeContext, HCRYPTASYNC hAsyncRetrieve,\n PCRYPT_CREDENTIALS pCredentials, PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);\n */\n\n#define CONTEXT_OID_CREATE_OBJECT_CONTEXT_FUNC \"ContextDllCreateObjectContext\"\n/* The signature of ContextDllCreateObjectContext is:\nBOOL WINAPI ContextDllCreateObjectContext(LPCSTR pszObjectOid,\n DWORD dwRetrievalFlags, PCRYPT_BLOB_ARRAY pObject, void **ppvContxt);\n */\n\n#define CONTEXT_OID_CERTIFICATE ((LPCSTR)1)\n#define CONTEXT_OID_CRL         ((LPCSTR)2)\n#define CONTEXT_OID_CTL         ((LPCSTR)3)\n#define CONTEXT_OID_PKCS7       ((LPCSTR)4)\n#define CONTEXT_OID_CAPI2_ANY   ((LPCSTR)5)\n\n#define CRYPT_RETRIEVE_MULTIPLE_OBJECTS      0x00000001\n#define CRYPT_CACHE_ONLY_RETRIEVAL           0x00000002\n#define CRYPT_WIRE_ONLY_RETRIEVAL            0x00000004\n#define CRYPT_DONT_CACHE_RESULT              0x00000008\n#define CRYPT_ASYNC_RETRIEVAL                0x00000010\n#define CRYPT_STICKY_CACHE_RETRIEVAL         0x00001000\n#define CRYPT_LDAP_SCOPE_BASE_ONLY_RETRIEVAL 0x00002000\n#define CRYPT_OFFLINE_CHECK_RETRIEVAL        0x00004000\n#define CRYPT_LDAP_INSERT_ENTRY_ATTRIBUTE    0x00008000\n#define CRYPT_LDAP_SIGN_RETRIEVAL            0x00010000\n#define CRYPT_NO_AUTH_RETRIEVAL              0x00020000\n#define CRYPT_LDAP_AREC_EXCLUSIVE_RETRIEVAL  0x00040000\n#define CRYPT_AIA_RETRIEVAL                  0x00080000\n\n#define CRYPT_VERIFY_CONTEXT_SIGNATURE      0x00000020\n#define CRYPT_VERIFY_DATA_HASH              0x00000040\n#define CRYPT_KEEP_TIME_VALID               0x00000080\n#define CRYPT_DONT_VERIFY_SIGNATURE         0x00000100\n#define CRYPT_DONT_CHECK_TIME_VALIDITY      0x00000200\n#define CRYPT_CHECK_FRESHNESS_TIME_VALIDITY 0x00000400\n#define CRYPT_ACCUMULATIVE_TIMEOUT          0x00000800\n\ntypedef BOOL (WINAPI *PFN_CRYPT_CANCEL_RETRIEVAL)(DWORD dwFlags, void *pvArg);\n\ntypedef struct _CERT_CRL_CONTEXT_PAIR\n{\n    PCCERT_CONTEXT pCertContext;\n    PCCRL_CONTEXT  pCrlContext;\n} CERT_CRL_CONTEXT_PAIR, *PCERT_CRL_CONTEXT_PAIR;\ntypedef const CERT_CRL_CONTEXT_PAIR *PCCERT_CRL_CONTEXT_PAIR;\n\n#define TIME_VALID_OID_GET_OBJECT_FUNC   \"TimeValidDllGetObject\"\n\n#define TIME_VALID_OID_GET_CTL                    ((LPCSTR)1)\n#define TIME_VALID_OID_GET_CRL                    ((LPCSTR)2)\n#define TIME_VALID_OID_GET_CRL_FROM_CERT          ((LPCSTR)3)\n#define TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CERT ((LPCSTR)4)\n#define TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CRL  ((LPCSTR)5)\n\n#define TIME_VALID_OID_FLUSH_OBJECT_FUNC \"TimeValidDllFlushObject\"\n\n#define TIME_VALID_OID_FLUSH_CTL                    ((LPCSTR)1)\n#define TIME_VALID_OID_FLUSH_CRL                    ((LPCSTR)2)\n#define TIME_VALID_OID_FLUSH_CRL_FROM_CERT          ((LPCSTR)3)\n#define TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CERT ((LPCSTR)4)\n#define TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CRL  ((LPCSTR)5)\n\n/* OID group IDs */\n#define CRYPT_HASH_ALG_OID_GROUP_ID     1\n#define CRYPT_ENCRYPT_ALG_OID_GROUP_ID  2\n#define CRYPT_PUBKEY_ALG_OID_GROUP_ID   3\n#define CRYPT_SIGN_ALG_OID_GROUP_ID     4\n#define CRYPT_RDN_ATTR_OID_GROUP_ID     5\n#define CRYPT_EXT_OR_ATTR_OID_GROUP_ID  6\n#define CRYPT_ENHKEY_USAGE_OID_GROUP_ID 7\n#define CRYPT_POLICY_OID_GROUP_ID       8\n#define CRYPT_TEMPLATE_OID_GROUP_ID     9\n#define CRYPT_LAST_OID_GROUP_ID         9\n\n#define CRYPT_FIRST_ALG_OID_GROUP_ID CRYPT_HASH_ALG_OID_GROUP_ID\n#define CRYPT_LAST_ALG_OID_GROUP_ID  CRYPT_SIGN_ALG_OID_GROUP_ID\n\n#define CRYPT_OID_INHIBIT_SIGNATURE_FORMAT_FLAG  0x1\n#define CRYPT_OID_USE_PUBKEY_PARA_FOR_PKCS7_FLAG 0x2\n#define CRYPT_OID_NO_NULL_ALGORITHM_PARA_FLAG    0x4\n\n#define CRYPT_OID_INFO_OID_KEY   1\n#define CRYPT_OID_INFO_NAME_KEY  2\n#define CRYPT_OID_INFO_ALGID_KEY 3\n#define CRYPT_OID_INFO_SIGN_KEY  4\n\n/* Algorithm IDs */\n\n#define GET_ALG_CLASS(x)                (x & (7 << 13))\n#define GET_ALG_TYPE(x)                 (x & (15 << 9))\n#define GET_ALG_SID(x)                  (x & (511))\n\n/* Algorithm Classes */\n#define ALG_CLASS_ANY                   (0)\n#define ALG_CLASS_SIGNATURE             (1 << 13)\n#define ALG_CLASS_MSG_ENCRYPT           (2 << 13)\n#define ALG_CLASS_DATA_ENCRYPT          (3 << 13)\n#define ALG_CLASS_HASH                  (4 << 13)\n#define ALG_CLASS_KEY_EXCHANGE          (5 << 13)\n#define ALG_CLASS_ALL                   (7 << 13)\n/* Algorithm types */\n#define ALG_TYPE_ANY                    (0)\n#define ALG_TYPE_DSS                    (1 << 9)\n#define ALG_TYPE_RSA                    (2 << 9)\n#define ALG_TYPE_BLOCK                  (3 << 9)\n#define ALG_TYPE_STREAM                 (4 << 9)\n#define ALG_TYPE_DH                     (5 << 9)\n#define ALG_TYPE_SECURECHANNEL          (6 << 9)\n#define ALG_TYPE_ECDH                   (7 << 9)\n\n/* SIDs */\n#define ALG_SID_ANY                     (0)\n/* RSA SIDs */\n#define ALG_SID_RSA_ANY                 0\n#define ALG_SID_RSA_PKCS                1\n#define ALG_SID_RSA_MSATWORK            2\n#define ALG_SID_RSA_ENTRUST             3\n#define ALG_SID_RSA_PGP                 4\n/* DSS SIDs */\n#define ALG_SID_DSS_ANY                 0\n#define ALG_SID_DSS_PKCS                1\n#define ALG_SID_DSS_DMS                 2\n#define ALG_SID_ECDSA                   3\n\n/* DES SIDs */\n#define ALG_SID_DES                     1\n#define ALG_SID_3DES                    3\n#define ALG_SID_DESX                    4\n#define ALG_SID_IDEA                    5\n#define ALG_SID_CAST                    6\n#define ALG_SID_SAFERSK64               7\n#define ALG_SID_SAFERSK128              8\n#define ALG_SID_3DES_112                9\n#define ALG_SID_CYLINK_MEK             12\n#define ALG_SID_RC5                    13\n#define ALG_SID_AES_128                14\n#define ALG_SID_AES_192                15\n#define ALG_SID_AES_256                16\n#define ALG_SID_AES                    17\n/* Fortezza */\n#define ALG_SID_SKIPJACK               10\n#define ALG_SID_TEK                    11\n/* Diffie-Hellmans SIDs */\n#define ALG_SID_DH_SANDF                1\n#define ALG_SID_DH_EPHEM                2\n#define ALG_SID_AGREED_KEY_ANY          3\n#define ALG_SID_KEA                     4\n#define ALG_SID_ECDH                    5\n#define ALG_SID_ECDH_EPHEM              6\n/* RC2 SIDs */\n#define ALG_SID_RC4                     1\n#define ALG_SID_RC2                     2\n#define ALG_SID_SEAL                    2\n/* Hash SIDs */\n#define ALG_SID_MD2                     1\n#define ALG_SID_MD4                     2\n#define ALG_SID_MD5                     3\n#define ALG_SID_SHA                     4\n#define ALG_SID_SHA1                    ALG_SID_SHA\n#define ALG_SID_MAC                     5\n#define ALG_SID_RIPEMD                  6\n#define ALG_SID_RIPEMD160               7\n#define ALG_SID_SSL3SHAMD5              8\n#define ALG_SID_HMAC                    9\n#define ALG_SID_TLS1PRF                10\n#define ALG_SID_HASH_REPLACE_OWF       11\n#define ALG_SID_SHA_256                12\n#define ALG_SID_SHA_384                13\n#define ALG_SID_SHA_512                14\n/* SCHANNEL SIDs */\n#define ALG_SID_SSL3_MASTER             1\n#define ALG_SID_SCHANNEL_MASTER_HASH    2\n#define ALG_SID_SCHANNEL_MAC_KEY        3\n#define ALG_SID_PCT1_MASTER             4\n#define ALG_SID_SSL2_MASTER             5\n#define ALG_SID_TLS1_MASTER             6\n#define ALG_SID_SCHANNEL_ENC_KEY        7\n#define ALG_SID_EXAMPLE                80\n\n#define ALG_SID_ECMQV                   1\n\n/* Algorithm Definitions */\n#define CALG_MD2                  (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_MD2)\n#define CALG_MD4                  (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_MD4)\n#define CALG_MD5                  (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_MD5)\n#define CALG_SHA                  (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_SHA)\n#define CALG_SHA1 CALG_SHA\n#define CALG_MAC                  (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_MAC)\n#define CALG_SSL3_SHAMD5          (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_SSL3SHAMD5)\n#define CALG_HMAC                 (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_HMAC)\n#define CALG_TLS1PRF              (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_TLS1PRF)\n#define CALG_HASH_REPLACE_OWF     (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_HASH_REPLACE_OWF)\n#define CALG_SHA_256              (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_SHA_256)\n#define CALG_SHA_384              (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_SHA_384)\n#define CALG_SHA_512              (ALG_CLASS_HASH         | ALG_TYPE_ANY           | ALG_SID_SHA_512)\n#define CALG_RSA_SIGN             (ALG_CLASS_SIGNATURE    | ALG_TYPE_RSA           | ALG_SID_RSA_ANY)\n#define CALG_DSS_SIGN             (ALG_CLASS_SIGNATURE    | ALG_TYPE_DSS           | ALG_SID_DSS_ANY)\n#define CALG_NO_SIGN              (ALG_CLASS_SIGNATURE    | ALG_TYPE_ANY           | ALG_SID_ANY)\n#define CALG_ECDSA                (ALG_CLASS_SIGNATURE    | ALG_TYPE_DSS           | ALG_SID_ECDSA)\n#define CALG_DH_SF                (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH            | ALG_SID_DH_SANDF)\n#define CALG_DH_EPHEM             (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH            | ALG_SID_DH_EPHEM)\n#define CALG_AGREEDKEY_ANY        (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH            | ALG_SID_AGREED_KEY_ANY)\n#define CALG_KEA_KEYX             (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH            | ALG_SID_KEA)\n#define CALG_HUGHES_MD5           (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ANY           | ALG_SID_MD5)\n#define CALG_ECDH                 (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH            | ALG_SID_ECDH)\n#define CALG_ECDH_EPHEM           (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ECDH          | ALG_SID_ECDH_EPHEM)\n#define CALG_RSA_KEYX             (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_RSA           | ALG_SID_RSA_ANY)\n#define CALG_ECMQV                (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ANY           | ALG_SID_ECMQV)\n#define CALG_DES                  (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_DES)\n#define CALG_RC2                  (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_RC2)\n#define CALG_3DES                 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_3DES)\n#define CALG_3DES_112             (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_3DES_112)\n#define CALG_DESX                 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_DESX)\n#define CALG_AES_128              (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_AES_128)\n#define CALG_AES_192              (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_AES_192)\n#define CALG_AES_256              (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_AES_256)\n#define CALG_AES                  (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_AES)\n#define CALG_RC4                  (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM        | ALG_SID_RC4)\n#define CALG_SEAL                 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM        | ALG_SID_SEAL)\n#define CALG_RC5                  (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM        | ALG_SID_RC5)\n#define CALG_SKIPJACK             (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_SKIPJACK)\n#define CALG_TEK                  (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_TEK)\n#define CALG_CYLINK_MEK           (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK         | ALG_SID_CYLINK_MEK)\n#define CALG_SSL3_MASTER          (ALG_CLASS_MSG_ENCRYPT  | ALG_TYPE_SECURECHANNEL | ALG_SID_SSL3_MASTER)\n#define CALG_SCHANNEL_MASTER_HASH (ALG_CLASS_MSG_ENCRYPT  | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_MASTER_HASH)\n#define CALG_SCHANNEL_MAC_KEY     (ALG_CLASS_MSG_ENCRYPT  | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_MAC_KEY)\n#define CALG_SCHANNEL_ENC_KEY     (ALG_CLASS_MSG_ENCRYPT  | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_ENC_KEY)\n#define CALG_PCT1_MASTER          (ALG_CLASS_MSG_ENCRYPT  | ALG_TYPE_SECURECHANNEL | ALG_SID_PCT1_MASTER)\n#define CALG_SSL2_MASTER          (ALG_CLASS_MSG_ENCRYPT  | ALG_TYPE_SECURECHANNEL | ALG_SID_SSL2_MASTER)\n#define CALG_TLS1_MASTER          (ALG_CLASS_MSG_ENCRYPT  | ALG_TYPE_SECURECHANNEL | ALG_SID_TLS1_MASTER)\n\n\n/* Protocol Flags */\n#define CRYPT_FLAG_PCT1    0x0001\n#define CRYPT_FLAG_SSL2    0x0002\n#define CRYPT_FLAG_SSL3    0x0004\n#define CRYPT_FLAG_TLS1    0x0008\n#define CRYPT_FLAG_IPSEC   0x0010\n#define CRYPT_FLAG_SIGNING 0x0020\n\n/* Provider names */\n#define MS_DEF_PROV_A                            \"Microsoft Base Cryptographic Provider v1.0\"\n#if defined(__GNUC__)\n# define MS_DEF_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \\\n\t'B','a','s','e',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', \\\n\t'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 }\n#elif defined(_MSC_VER)\n# define MS_DEF_PROV_W      L\"Microsoft Base Cryptographic Provider v1.0\"\n#else\nstatic const WCHAR MS_DEF_PROV_W[] =             { 'M','i','c','r','o','s','o','f','t',' ',\n\t'B','a','s','e',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ',\n\t'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 };\n#endif\n#define MS_DEF_PROV                              WINELIB_NAME_AW(MS_DEF_PROV_)\n\n#define MS_ENHANCED_PROV_A                       \"Microsoft Enhanced Cryptographic Provider v1.0\"\n#if defined(__GNUC__)\n# define MS_ENHANCED_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \\\n\t'E','n','h','a','n','c','e','d',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', \\\n\t'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 }\n#elif defined(_MSC_VER)\n# define MS_ENHANCED_PROV_W     L\"Microsoft Enhanced Cryptographic Provider v1.0\"\n#else\nstatic const WCHAR MS_ENHANCED_PROV_W[] =        { 'M','i','c','r','o','s','o','f','t',' ',\n\t'E','n','h','a','n','c','e','d',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ',\n\t'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 };\n#endif\n#define MS_ENHANCED_PROV                         WINELIB_NAME_AW(MS_ENHANCED_PROV_)\n\n#define MS_STRONG_PROV_A                         \"Microsoft Strong Cryptographic Provider\"\n#if defined(__GNUC__)\n# define MS_STRONG_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \\\n\t'S','t','r','o','n','g',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', \\\n\t'P','r','o','v','i','d','e','r',0 }\n#elif defined(_MSC_VER)\n# define MS_STRONG_PROV_W     L\"Microsoft Strong Cryptographic Provider\"\n#else\nstatic const WCHAR MS_STRONG_PROV_W[] =          { 'M','i','c','r','o','s','o','f','t',' ',\n\t'S','t','r','o','n','g',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ',\n\t'P','r','o','v','i','d','e','r',0 };\n#endif\n#define MS_STRONG_PROV                           WINELIB_NAME_AW(MS_STRONG_PROV_)\n\n#define MS_DEF_RSA_SIG_PROV_A                    \"Microsoft RSA Signature Cryptographic Provider\"\n#if defined(__GNUC__)\n# define MS_DEF_RSA_SIG_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \\\n\t'R','S','A',' ','S','i','g','n','a','t','u','r','e',' ', \\\n\t'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }\n#elif defined(_MSC_VER)\n# define MS_DEF_RSA_SIG_PROV_W      L\"Microsoft RSA Signature Cryptographic Provider\"\n#else\nstatic const WCHAR MS_DEF_RSA_SIG_PROV_W[] =     { 'M','i','c','r','o','s','o','f','t',' ',\n\t'R','S','A',' ','S','i','g','n','a','t','u','r','e',' ',\n\t'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };\n#endif\n#define MS_DEF_RSA_SIG_PROV                      WINELIB_NAME_AW(MS_DEF_RSA_SIG_PROV_)\n\n#define MS_DEF_RSA_SCHANNEL_PROV_A               \"Microsoft RSA SChannel Cryptographic Provider\"\n#if defined(__GNUC__)\n# define MS_DEF_RSA_SCHANNEL_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \\\n\t'R','S','A',' ','S','C','h','a','n','n','e','l',' ', \\\n\t'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }\n#elif defined(_MSC_VER)\n# define MS_DEF_RSA_SCHANNEL_PROV_W     L\"Microsoft RSA SChannel Cryptographic Provider\"\n#else\nstatic const WCHAR MS_DEF_RSA_SCHANNEL_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',\n\t'R','S','A',' ','S','C','h','a','n','n','e','l',' ',\n\t'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };\n#endif\n#define MS_DEF_RSA_SCHANNEL_PROV                 WINELIB_NAME_AW(MS_DEF_RSA_SCHANNEL_PROV_)\n\n#define MS_DEF_DSS_PROV_A                        \"Microsoft Base DSS Cryptographic Provider\"\n#if defined(__GNUC__)\n# define MS_DEF_DSS_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \\\n\t'B','a','s','e',' ','D','S','S',' ', \\\n\t'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }\n#elif defined(_MSC_VER)\n# define MS_DEF_DSS_PROV_W     L\"Microsoft Base DSS Cryptographic Provider\"\n#else\nstatic const WCHAR MS_DEF_DSS_PROV_W[] =         { 'M','i','c','r','o','s','o','f','t',' ',\n\t'B','a','s','e',' ','D','S','S',' ',\n\t'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };\n#endif\n#define MS_DEF_DSS_PROV                          WINELIB_NAME_AW(MS_DEF_DSS_PROV_)\n\n#define MS_DEF_DSS_DH_PROV_A                     \"Microsoft Base DSS and Diffie-Hellman Cryptographic Provider\"\n#if defined(__GNUC__)\n# define MS_DEF_DSS_DH_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \\\n\t'B','a','s','e',' ','D','S','S',' ','a','n','d',' ', \\\n\t'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ', \\\n\t'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }\n#elif defined(_MSC_VER)\n# define MS_DEF_DSS_DH_PROV_W     L\"Microsoft Base DSS and Diffie-Hellman Cryptographic Provider\"\n#else\nstatic const WCHAR MS_DEF_DSS_DH_PROV_W[] =      { 'M','i','c','r','o','s','o','f','t',' ',\n\t'B','a','s','e',' ','D','S','S',' ','a','n','d',' ',\n\t'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ',\n\t'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };\n#endif\n#define MS_DEF_DSS_DH_PROV                       WINELIB_NAME_AW(MS_DEF_DSS_DH_PROV_)\n\n#define MS_ENH_DSS_DH_PROV_A                     \"Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider\"\n#if defined(__GNUC__)\n# define MS_ENH_DSS_DH_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \\\n\t'E','n','h','a','n','c','e','d',' ','D','S','S',' ','a','n','d',' ', \\\n\t'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ', \\\n\t'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }\n#elif defined(_MSC_VER)\n# define MS_ENH_DSS_DH_PROV_W     L\"Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider\"\n#else\nstatic const WCHAR MS_ENH_DSS_DH_PROV_W[] =      { 'M','i','c','r','o','s','o','f','t',' ',\n\t'E','n','h','a','n','c','e','d',' ','D','S','S',' ','a','n','d',' ',\n\t'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ',\n\t'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };\n#endif\n#define MS_ENH_DSS_DH_PROV                       WINELIB_NAME_AW(MS_ENH_DSS_DH_PROV_)\n\n#define MS_DEF_DH_SCHANNEL_PROV_A                \"Microsoft DH SChannel Cryptographic Provider\"\n#if defined(__GNUC__)\n# define MS_DEF_DH_SCHANNEL_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \\\n\t'D','H',' ','S','C','h','a','n','n','e','l',' ', \\\n\t'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }\n#elif defined(_MSC_VER)\n# define MS_DEF_DH_SCHANNEL_PROV_W     L\"Microsoft DH SChannel Cryptographic Provider\"\n#else\nstatic const WCHAR MS_DEF_DH_SCHANNEL_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',\n\t'D','H',' ','S','C','h','a','n','n','e','l',' ',\n\t'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };\n#endif\n#define MS_DEF_DH_SCHANNEL_PROV                  WINELIB_NAME_AW(MS_DEF_DH_SCHANNEL_PROV_)\n\n#define MS_SCARD_PROV_A                          \"Microsoft Base Smart Card Cryptographic Provider\"\n#if defined(__GNUC__)\n# define MS_SCARD_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \\\n\t'B','a','s','e',' ','S','m','a','r','t',' ','C','a','r','d',' ', \\\n\t'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }\n#elif defined(_MSC_VER)\n# define MS_SCARD_PROV_W     L\"Microsoft Base Smart Card Cryptographic Provider\"\n#else\nstatic const WCHAR MS_SCARD_PROV_W[] =           { 'M','i','c','r','o','s','o','f','t',' ',\n\t'B','a','s','e',' ','S','m','a','r','t',' ','C','a','r','d',' ',\n\t'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };\n#endif\n#define MS_SCARD_PROV                            WINELIB_NAME_AW(MS_SCARD_PROV_)\n\n#define MS_ENH_RSA_AES_PROV_A                          \"Microsoft Enhanced RSA and AES Cryptographic Provider\"\n#if defined(__GNUC__)\n# define MS_ENH_RSA_AES_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \\\n\t'E','n','h','a','n','c','e','d',' ','R','S','A',' ','a','n','d',' ','A','E','S',' ',\\\n\t'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }\n#elif defined(_MSC_VER)\n# define MS_ENH_RSA_AES_PROV_W     L\"Microsoft Enhanced RSA and AES Cryptographic Provider\"\n#else\nstatic const WCHAR MS_ENH_RSA_AES_PROV_W[] =           { 'M','i','c','r','o','s','o','f','t',' ',\n\t'E','n','h','a','n','c','e','d',' ','R','S','A',' ','a','n','d',' ','A','E','S',' ',\n\t'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };\n#endif\n#define MS_ENH_RSA_AES_PROV                            WINELIB_NAME_AW(MS_ENH_RSA_AES_PROV_)\n\n#define MS_ENH_RSA_AES_PROV_XP_A    \"Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)\"\n#if defined(__GNUC__)\n# define MS_ENH_RSA_AES_PROV_XP_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \\\n        'E','n','h','a','n','c','e','d',' ','R','S','A',' ','a','n','d',' ','A','E','S',' ',\\\n        'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',' ',\\\n        '(','P','r','o','t','o','t','y','p','e',')',0 }\n#elif defined(_MSC_VER)\n# define MS_ENH_RSA_AES_PROV_XP_W   L\"Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)\"\n#else\nstatic const WCHAR MS_ENH_RSA_AES_PROV_XP_W[] = { 'M','i','c','r','o','s','o','f','t',' ',\n        'E','n','h','a','n','c','e','d',' ','R','S','A',' ','a','n','d',' ','A','E','S',' ',\n        'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',' ',\n        '(','P','r','o','t','o','t','y','p','e',')',0 };\n#endif\n#define MS_ENH_RSA_AES_PROV_XP                   WINELIB_NAME_AW(MS_ENH_RSA_AES_PROV_XP_)\n\n/* Key Specs*/\n#define AT_KEYEXCHANGE          1\n#define AT_SIGNATURE            2\n\n/* Provider Types */\n#define PROV_RSA_FULL             1\n#define PROV_RSA_SIG              2\n#define PROV_DSS                  3\n#define PROV_FORTEZZA             4\n#define PROV_MS_EXCHANGE          5\n#define PROV_SSL                  6\n#define PROV_RSA_SCHANNEL         12\n#define PROV_DSS_DH               13\n#define PROV_EC_ECDSA_SIG         14\n#define PROV_EC_ECNRA_SIG         15\n#define PROV_EC_ECDSA_FULL        16\n#define PROV_EC_ECNRA_FULL        17\n#define PROV_DH_SCHANNEL          18\n#define PROV_SPYRUS_LYNKS         20\n#define PROV_RNG                  21\n#define PROV_INTEL_SEC            22\n#define PROV_REPLACE_OWF          23\n#define PROV_RSA_AES              24\n\n/* FLAGS Section */\n\n#define CRYPT_FIRST             1\n#define CRYPT_NEXT              2\n\n#define CRYPT_IMPL_HARDWARE     1\n#define CRYPT_IMPL_SOFTWARE     2\n#define CRYPT_IMPL_MIXED        3\n#define CRYPT_IMPL_UNKNOWN      4\n\n/* CryptAcquireContext */\n#define CRYPT_VERIFYCONTEXT       0xF0000000\n#define CRYPT_NEWKEYSET           0x00000008\n#define CRYPT_DELETEKEYSET        0x00000010\n#define CRYPT_MACHINE_KEYSET      0x00000020\n#define CRYPT_SILENT              0x00000040\n\n/* Crypt{Get|Set}Provider */\n#define CRYPT_MACHINE_DEFAULT     0x00000001\n#define CRYPT_USER_DEFAULT        0x00000002\n#define CRYPT_DELETE_DEFAULT      0x00000004\n\n/* Crypt{Get/Set}ProvParam */\n#define PP_CLIENT_HWND          1\n#define PP_ENUMALGS             1\n#define PP_ENUMCONTAINERS       2\n#define PP_IMPTYPE              3\n#define PP_NAME                 4\n#define PP_VERSION              5\n#define PP_CONTAINER            6\n#define PP_CHANGE_PASSWORD      7\n#define PP_KEYSET_SEC_DESCR     8\n#define PP_KEY_TYPE_SUBTYPE     10\n#define PP_CONTEXT_INFO         11\n#define PP_KEYEXCHANGE_KEYSIZE  12\n#define PP_SIGNATURE_KEYSIZE    13\n#define PP_KEYEXCHANGE_ALG      14\n#define PP_SIGNATURE_ALG        15\n#define PP_PROVTYPE             16\n#define PP_KEYSTORAGE           17\n#define PP_SYM_KEYSIZE          19\n#define PP_SESSION_KEYSIZE      20\n#define PP_UI_PROMPT            21\n#define PP_ENUMALGS_EX          22\n#define PP_DELETEKEY            24\n#define PP_ENUMMANDROOTS        25\n#define PP_ENUMELECTROOTS       26\n#define PP_KEYSET_TYPE          27\n#define PP_ADMIN_PIN            31\n#define PP_KEYEXCHANGE_PIN      32\n#define PP_SIGNATURE_PIN        33\n#define PP_SIG_KEYSIZE_INC      34\n#define PP_KEYX_KEYSIZE_INC     35\n#define PP_UNIQUE_CONTAINER     36\n#define PP_SGC_INFO             37\n#define PP_USE_HARDWARE_RNG     38\n#define PP_KEYSPEC              39\n#define PP_ENUMEX_SIGNING_PROT  40\n#define PP_CRYPT_COUNT_KEY_USE  41\n#define PP_USER_CERTSTORE       42\n#define PP_SMARTCARD_READER     43\n#define PP_SMARTCARD_GUID       45\n#define PP_ROOT_CERTSTORE       46\n\n/* Values returned by CryptGetProvParam of PP_KEYSTORAGE */\n#define CRYPT_SEC_DESCR         0x00000001\n#define CRYPT_PSTORE            0x00000002\n#define CRYPT_UI_PROMPT         0x00000004\n\n/* Crypt{Get/Set}KeyParam */\n#define KP_IV                   1\n#define KP_SALT                 2\n#define KP_PADDING              3\n#define KP_MODE                 4\n#define KP_MODE_BITS            5\n#define KP_PERMISSIONS          6\n#define KP_ALGID                7\n#define KP_BLOCKLEN             8\n#define KP_KEYLEN               9\n#define KP_SALT_EX              10\n#define KP_P                    11\n#define KP_G                    12\n#define KP_Q                    13\n#define KP_X                    14\n#define KP_Y                    15\n#define KP_RA                   16\n#define KP_RB                   17\n#define KP_INFO                 18\n#define KP_EFFECTIVE_KEYLEN     19\n#define KP_SCHANNEL_ALG         20\n#define KP_CLIENT_RANDOM        21\n#define KP_SERVER_RANDOM        22\n#define KP_RP                   23\n#define KP_PRECOMP_MD5          24\n#define KP_PRECOMP_SHA          25\n#define KP_CERTIFICATE          26\n#define KP_CLEAR_KEY            27\n#define KP_PUB_EX_LEN           28\n#define KP_PUB_EX_VAL           29\n#define KP_KEYVAL               30\n#define KP_ADMIN_PIN            31\n#define KP_KEYEXCHANGE_PIN      32\n#define KP_SIGNATURE_PIN        33\n#define KP_PREHASH              34\n#define KP_ROUNDS               35\n#define KP_OAEP_PARAMS          36\n#define KP_CMS_KEY_INFO         37\n#define KP_CMS_DH_KEY_INFO      38\n#define KP_PUB_PARAMS           39\n#define KP_VERIFY_PARAMS        40\n#define KP_HIGHEST_VERSION      41\n#define KP_GET_USE_COUNT        42\n\n/* Values for KP_PADDING */\n#define PKCS5_PADDING  1\n#define RANDOM_PADDING 2\n#define ZERO_PADDING   3\n\n/* CryptSignHash/CryptVerifySignature */\n#define CRYPT_NOHASHOID         0x00000001\n#define CRYPT_TYPE2_FORMAT      0x00000002\n#define CRYPT_X931_FORMAT       0x00000004\n\n/* Crypt{Get,Set}HashParam */\n#define HP_ALGID                0x0001\n#define HP_HASHVAL              0x0002\n#define HP_HASHSIZE             0x0004\n#define HP_HMAC_INFO            0x0005\n#define HP_TLS1PRF_LABEL        0x0006\n#define HP_TLS1PRF_SEED         0x0007\n\n/* Crypt{Get,Set}KeyParam */\n#define CRYPT_MODE_CBC          1\n#define CRYPT_MODE_ECB          2\n#define CRYPT_MODE_OFB          3\n#define CRYPT_MODE_CFB          4\n\n#define CRYPT_ENCRYPT           0x0001 \n#define CRYPT_DECRYPT           0x0002\n#define CRYPT_EXPORT            0x0004\n#define CRYPT_READ              0x0008\n#define CRYPT_WRITE             0x0010\n#define CRYPT_MAC               0x0020\n#define CRYPT_EXPORT_KEY        0x0040\n#define CRYPT_IMPORT_KEY        0x0080\n#define CRYPT_ARCHIVE           0x0100\n\n/* Crypt*Key */\n#define CRYPT_EXPORTABLE        0x00000001\n#define CRYPT_USER_PROTECTED    0x00000002\n#define CRYPT_CREATE_SALT       0x00000004\n#define CRYPT_UPDATE_KEY        0x00000008\n#define CRYPT_NO_SALT           0x00000010\n#define CRYPT_PREGEN            0x00000040\n#define CRYPT_SERVER            0x00000400\n#define CRYPT_ARCHIVABLE        0x00004000\n\n/* CryptExportKey */\n#define CRYPT_SSL2_FALLBACK     0x00000002\n#define CRYPT_DESTROYKEY        0x00000004\n#define CRYPT_OAEP              0x00000040\n\n/* CryptHashSessionKey */\n#define CRYPT_LITTLE_ENDIAN     0x00000001\n\n/* Crypt{Protect,Unprotect}Data PROMPTSTRUCT flags */\n#define CRYPTPROTECT_PROMPT_ON_PROTECT    0x0001\n#define CRYPTPROTECT_PROMPT_ON_UNPROTECT  0x0002\n/* Crypt{Protect,Unprotect}Data flags */\n#define CRYPTPROTECT_UI_FORBIDDEN       0x0001\n#define CRYPTPROTECT_LOCAL_MACHINE      0x0004\n#define CRYPTPROTECT_AUDIT              0x0010\n#define CRYPTPROTECT_VERIFY_PROTECTION  0x0040\n\n/* Crypt{Protect,Unprotect}Memory */\n#define CRYPTPROTECTMEMORY_BLOCK_SIZE     16\n#define CRYPTPROTECTMEMORY_SAME_PROCESS   0x0000\n#define CRYPTPROTECTMEMORY_CROSS_PROCESS  0x0001\n#define CRYPTPROTECTMEMORY_SAME_LOGON     0x0002\n\n/* Blob Types */\n#define SIMPLEBLOB              0x1\n#define PUBLICKEYBLOB           0x6\n#define PRIVATEKEYBLOB          0x7\n#define PLAINTEXTKEYBLOB        0x8\n#define OPAQUEKEYBLOB           0x9\n#define PUBLICKEYBLOBEX         0xA\n#define SYMMETRICWRAPKEYBLOB    0xB\n\n#define CUR_BLOB_VERSION        2\n\n/* cert store provider types */\n#define CERT_STORE_PROV_MSG                  ((LPCSTR)1)\n#define CERT_STORE_PROV_MEMORY               ((LPCSTR)2)\n#define CERT_STORE_PROV_FILE                 ((LPCSTR)3)\n#define CERT_STORE_PROV_REG                  ((LPCSTR)4)\n#define CERT_STORE_PROV_PKCS7                ((LPCSTR)5)\n#define CERT_STORE_PROV_SERIALIZED           ((LPCSTR)6)\n#define CERT_STORE_PROV_FILENAME_A           ((LPCSTR)7)\n#define CERT_STORE_PROV_FILENAME_W           ((LPCSTR)8)\n#define CERT_STORE_PROV_SYSTEM_A             ((LPCSTR)9)\n#define CERT_STORE_PROV_SYSTEM_W             ((LPCSTR)10)\n#define CERT_STORE_PROV_SYSTEM               CERT_STORE_PROV_SYSTEM_W\n#define CERT_STORE_PROV_COLLECTION           ((LPCSTR)11)\n#define CERT_STORE_PROV_SYSTEM_REGISTRY_A    ((LPCSTR)12)\n#define CERT_STORE_PROV_SYSTEM_REGISTRY_W    ((LPCSTR)13)\n#define CERT_STORE_PROV_SYSTEM_REGISTRY      CERT_STORE_PROV_SYSTEM_REGISTRY_W\n#define CERT_STORE_PROV_PHYSICAL_W           ((LPCSTR)14)\n#define CERT_STORE_PROV_PHYSICAL             CERT_STORE_PROV_PHYSICAL_W\n#define CERT_STORE_PROV_SMART_CARD_W         ((LPCSTR)15)\n#define CERT_STORE_PROV_SMART_CARD           CERT_STORE_PROV_SMART_CARD_W\n#define CERT_STORE_PROV_LDAP_W               ((LPCSTR)16)\n#define CERT_STORE_PROV_LDAP                 CERT_STORE_PROV_LDAP_W\n\n#define sz_CERT_STORE_PROV_MEMORY            \"Memory\"\n#define sz_CERT_STORE_PROV_FILENAME_W        \"File\"\n#define sz_CERT_STORE_PROV_FILENAME          sz_CERT_STORE_PROV_FILENAME_W\n#define sz_CERT_STORE_PROV_SYSTEM_W          \"System\"\n#define sz_CERT_STORE_PROV_SYSTEM            sz_CERT_STORE_PROV_SYSTEM_W\n#define sz_CERT_STORE_PROV_PKCS7             \"PKCS7\"\n#define sz_CERT_STORE_PROV_SERIALIZED        \"Serialized\"\n#define sz_CERT_STORE_PROV_COLLECTION        \"Collection\"\n#define sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W \"SystemRegistry\"\n#define sz_CERT_STORE_PROV_SYSTEM_REGISTRY   sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W\n#define sz_CERT_STORE_PROV_PHYSICAL_W        \"Physical\"\n#define sz_CERT_STORE_PROV_PHYSICAL          sz_CERT_STORE_PROV_PHYSICAL_W\n#define sz_CERT_STORE_PROV_SMART_CARD_W      \"SmartCard\"\n#define sz_CERT_STORE_PROV_SMART_CARD        sz_CERT_STORE_PROV_SMART_CARD_W\n#define sz_CERT_STORE_PROV_LDAP_W            \"Ldap\"\n#define sz_CERT_STORE_PROV_LDAP              sz_CERT_STORE_PROV_LDAP_W\n\n/* types for CertOpenStore dwEncodingType */\n#define CERT_ENCODING_TYPE_MASK 0x0000ffff\n#define CMSG_ENCODING_TYPE_MASK 0xffff0000\n#define GET_CERT_ENCODING_TYPE(x) ((x) & CERT_ENCODING_TYPE_MASK)\n#define GET_CMSG_ENCODING_TYPE(x) ((x) & CMSG_ENCODING_TYPE_MASK)\n\n#define CRYPT_ASN_ENCODING  0x00000001\n#define CRYPT_NDR_ENCODING  0x00000002\n#define X509_ASN_ENCODING   0x00000001\n#define X509_NDR_ENCODING   0x00000002\n#define PKCS_7_ASN_ENCODING 0x00010000\n#define PKCS_7_NDR_ENCODING 0x00020000\n\n/* system store locations */\n#define CERT_SYSTEM_STORE_LOCATION_MASK  0x00ff0000\n#define CERT_SYSTEM_STORE_LOCATION_SHIFT 16\n\n/* system store location ids */\n/* hkcu */\n#define CERT_SYSTEM_STORE_CURRENT_USER_ID               1\n/* hklm */\n#define CERT_SYSTEM_STORE_LOCAL_MACHINE_ID              2\n/* hklm\\Software\\Microsoft\\Cryptography\\Services */\n#define CERT_SYSTEM_STORE_CURRENT_SERVICE_ID            4\n#define CERT_SYSTEM_STORE_SERVICES_ID                   5\n/* HKEY_USERS */\n#define CERT_SYSTEM_STORE_USERS_ID                      6\n/* hkcu\\Software\\Policies\\Microsoft\\SystemCertificates */\n#define CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID  7\n/* hklm\\Software\\Policies\\Microsoft\\SystemCertificates */\n#define CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID 8\n/* hklm\\Software\\Microsoft\\EnterpriseCertificates */\n#define CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID   9\n\n/* system store location values */\n#define CERT_SYSTEM_STORE_CURRENT_USER \\\n (CERT_SYSTEM_STORE_CURRENT_USER_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)\n#define CERT_SYSTEM_STORE_LOCAL_MACHINE \\\n (CERT_SYSTEM_STORE_LOCAL_MACHINE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)\n#define CERT_SYSTEM_STORE_CURRENT_SERVICE \\\n (CERT_SYSTEM_STORE_CURRENT_SERVICE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)\n#define CERT_SYSTEM_STORE_SERVICES \\\n (CERT_SYSTEM_STORE_SERVICES_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)\n#define CERT_SYSTEM_STORE_USERS \\\n (CERT_SYSTEM_STORE_USERS_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)\n#define CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY \\\n (CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)\n#define CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY \\\n (CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)\n#define CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE \\\n (CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)\n\n#if defined(__GNUC__)\n#define CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH (const WCHAR[])\\\n {'S','o','f','t','w','a','r','e','\\\\','M','i','c','r','o','s','o','f','t',\\\n  '\\\\','S','y','s','t','e','m','C','e','r','t','i','f','i','c','a','t','e','s',\\\n  0 }\n#define CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH (const WCHAR[])\\\n {'S','o','f','t','w','a','r','e','\\\\','P','o','l','i','c','i','e','s','\\\\',\\\n  'M','i','c','r','o','s','o','f','t','\\\\','S','y','s','t','e','m','C','e','r',\\\n  't','i','f','i','c','a','t','e','s',0 }\n#elif defined(_MSC_VER)\n#define CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH \\\n L\"Software\\\\Microsoft\\\\SystemCertificates\"\n#define CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH \\\n L\"Software\\\\Policies\\\\Microsoft\\\\SystemCertificates\"\n#else\nstatic const WCHAR CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH[] = \n {'S','o','f','t','w','a','r','e','\\\\','M','i','c','r','o','s','o','f','t','\\\\',\n  'S','y','s','t','e','m','C','e','r','t','i','f','i','c','a','t','e','s',0 };\nstatic const WCHAR CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH[] = \n {'S','o','f','t','w','a','r','e','\\\\','P','o','l','i','c','i','e','s','\\\\',\n  'M','i','c','r','o','s','o','f','t','\\\\','S','y','s','t','e','m','C','e','r',\n  't','i','f','i','c','a','t','e','s',0 };\n#endif\n\n#if defined(__GNUC__)\n#define CERT_EFSBLOB_REGPATH (const WCHAR[])\\\n{'S','o','f','t','w','a','r','e','\\\\','P','o','l','i','c','i','e','s','\\\\',\\\n 'M','i','c','r','o','s','o','f','t','\\\\','S','y','s','t','e','m','C','e','r',\\\n 't','i','f','i','c','a','t','e','s','\\\\','E','F','S',0 }\n#define CERT_EFSBLOB_VALUE_NAME (const WCHAR[]) {'E','F','S','B','l','o','b',0 }\n#elif defined(_MSC_VER)\n#define CERT_EFSBLOB_REGPATH CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L\"\\\\EFS\"\n#define CERT_EFSBLOB_VALUE_NAME L\"EFSBlob\"\n#else\nstatic const WCHAR CERT_EFSBLOB_REGPATH[] =\n {'S','o','f','t','w','a','r','e','\\\\','P','o','l','i','c','i','e','s','\\\\',\n  'M','i','c','r','o','s','o','f','t','\\\\','S','y','s','t','e','m','C','e','r',\n  't','i','f','i','c','a','t','e','s','\\\\','E','F','S',0 };\nstatic const WCHAR CERT_EFSBLOB_VALUE_NAME[] = { 'E','F','S','B','l','o','b',0 };\n#endif\n\n#if defined(__GNUC__)\n#define CERT_PROT_ROOT_FLAGS_REGPATH (const WCHAR[])\\\n{'\\\\','R','o','o','t','\\\\','P','r','o','t','e','c','t','e','d','R','o','o','t',\\\n 's',0 }\n#define CERT_PROT_ROOT_FLAGS_VALUE_NAME (const WCHAR[])\\\n{'F','l','a','g','s',0 }\n#elif defined(_MSC_VER)\n#define CERT_PROT_ROOT_FLAGS_REGPATH L\"\\\\Root\\\\ProtectedRoots\"\n#define CERT_PROT_ROOT_FLAGS_VALUE_NAME L\"Flags\"\n#else\nstatic const WCHAR CERT_PROT_ROOT_FLAGS_REGPATH[] =\n { '\\\\','R','o','o','t','\\\\','P','r','o','t','e','c','t','e','d','R','o','o',\n   't','s',0 };\nstatic const WCHAR CERT_PROT_ROOT_FLAGS_VALUE_NAME[] = {'F','l','a','g','s',0 };\n#endif\n\n#define CERT_PROT_ROOT_DISABLE_CURRENT_USER_FLAG                0x01\n#define CERT_PROT_ROOT_INHIBIT_ADD_AT_INIT_FLAG                 0x02\n#define CERT_PROT_ROOT_INHIBIT_PURGE_LM_FLAG                    0x04\n#define CERT_PROT_ROOT_DISABLE_LM_AUTH_FLAG                     0x08\n#define CERT_PROT_ROOT_DISABLE_NT_AUTH_REQUIRED_FLAG            0x10\n#define CERT_PROT_ROOT_DISABLE_NOT_DEFINED_NAME_CONSTRAINT_FLAG 0x20\n\n#if defined(__GNUC__)\n#define CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH (const WCHAR[])\\\n{'S','o','f','t','w','a','r','e','\\\\','P','o','l','i','c','i','e','s','\\\\',\\\n 'M','i','c','r','o','s','o','f','t','\\\\','S','y','s','t','e','m','C','e','r',\\\n 't','i','f','i','c','a','t','e','s','\\\\','T','r','u','s','t','e','d',\\\n 'P','u','b','l','i','s','h','e','r','\\\\','S','a','f','e','r',0 }\n#elif defined(_MSC_VER)\n#define CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH \\\n CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L\"\\\\TrustedPublisher\\\\Safer\"\n#else\nstatic const WCHAR CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH[] =\n {'S','o','f','t','w','a','r','e','\\\\','P','o','l','i','c','i','e','s','\\\\',\n  'M','i','c','r','o','s','o','f','t','\\\\','S','y','s','t','e','m','C','e','r',\n  't','i','f','i','c','a','t','e','s','\\\\','T','r','u','s','t','e','d',\n  'P','u','b','l','i','s','h','e','r','\\\\','S','a','f','e','r',0 };\n#endif\n\n#if defined(__GNUC__)\n#define CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH (const WCHAR[])\\\n{'S','o','f','t','w','a','r','e','\\\\','M','i','c','r','o','s','o','f','t','\\\\',\\\n 'S','y','s','t','e','m','C','e','r','t','i','f','i','c','a','t','e','s','\\\\',\\\n 'T','r','u','s','t','e','d','P','u','b','l','i','s','h','e','r','\\\\',\\\n 'S','a','f','e','r',0 }\n#define CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME (const WCHAR[])\\\n{'A','u','t','h','e','n','t','i','c','o','d','e','F','l','a','g','s',0 };\n#elif defined(_MSC_VER)\n#define CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH \\\n CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH L\"\\\\TrustedPublisher\\\\Safer\"\n#define CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME L\"AuthenticodeFlags\"\n#else\nstatic const WCHAR CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH[] =\n {'S','o','f','t','w','a','r','e','\\\\','M','i','c','r','o','s','o','f','t','\\\\',\n  'S','y','s','t','e','m','C','e','r','t','i','f','i','c','a','t','e','s','\\\\',\n  'T','r','u','s','t','e','d','P','u','b','l','i','s','h','e','r','\\\\',\n  'S','a','f','e','r',0 };\nstatic const WCHAR CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME[] =\n { 'A','u','t','h','e','n','t','i','c','o','d','e','F','l','a','g','s',0 };\n#endif\n\n#define CERT_TRUST_PUB_ALLOW_END_USER_TRUST         0x00000000\n#define CERT_TRUST_PUB_ALLOW_MACHINE_ADMIN_TRUST    0x00000001\n#define CERT_TRUST_PUB_ALLOW_ENTERPRISE_ADMIN_TRUST 0x00000002\n#define CERT_TRUST_PUB_ALLOW_TRUST_MASK             0x00000003\n#define CERT_TRUST_PUB_CHECK_PUBLISHER_REV_FLAG     0x00000100\n#define CERT_TRUST_PUB_CHECK_TIMESTAMP_REV_FLAG     0x00000200\n\n/* flags for CertOpenStore dwFlags */\n#define CERT_STORE_NO_CRYPT_RELEASE_FLAG            0x00000001\n#define CERT_STORE_SET_LOCALIZED_NAME_FLAG          0x00000002\n#define CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG 0x00000004\n#define CERT_STORE_DELETE_FLAG                      0x00000010\n#define CERT_STORE_UNSAFE_PHYSICAL_FLAG             0x00000020\n#define CERT_STORE_SHARE_STORE_FLAG                 0x00000040\n#define CERT_STORE_SHARE_CONTEXT_FLAG               0x00000080\n#define CERT_STORE_MANIFOLD_FLAG                    0x00000100\n#define CERT_STORE_ENUM_ARCHIVED_FLAG               0x00000200\n#define CERT_STORE_UPDATE_KEYID_FLAG                0x00000400\n#define CERT_STORE_BACKUP_RESTORE_FLAG              0x00000800\n#define CERT_STORE_MAXIMUM_ALLOWED_FLAG             0x00001000\n#define CERT_STORE_CREATE_NEW_FLAG                  0x00002000\n#define CERT_STORE_OPEN_EXISTING_FLAG               0x00004000\n#define CERT_STORE_READONLY_FLAG                    0x00008000\n\n#define CERT_REGISTRY_STORE_REMOTE_FLAG      0x00010000\n#define CERT_REGISTRY_STORE_SERIALIZED_FLAG  0x00020000\n#define CERT_REGISTRY_STORE_ROAMING_FLAG     0x00040000\n#define CERT_REGISTRY_STORE_MY_IE_DIRTY_FLAG 0x00080000\n#define CERT_REGISTRY_STORE_LM_GPT_FLAG      0x01000000\n#define CERT_REGISTRY_STORE_CLIENT_GPT_FLAG  0x80000000\n\n#define CERT_FILE_STORE_COMMIT_ENABLE_FLAG 0x00010000\n\n/* CertCloseStore dwFlags */\n#define CERT_CLOSE_STORE_FORCE_FLAG 0x00000001\n#define CERT_CLOSE_STORE_CHECK_FLAG 0x00000002\n\n/* dwAddDisposition */\n#define CERT_STORE_ADD_NEW                                 1\n#define CERT_STORE_ADD_USE_EXISTING                        2\n#define CERT_STORE_ADD_REPLACE_EXISTING                    3\n#define CERT_STORE_ADD_ALWAYS                              4\n#define CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES 5\n#define CERT_STORE_ADD_NEWER                               6\n#define CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES            7\n\n/* Installable OID function defs */\n#define CRYPT_OID_OPEN_STORE_PROV_FUNC     \"CertDllOpenStoreProv\"\n#define CRYPT_OID_ENCODE_OBJECT_FUNC       \"CryptDllEncodeObject\"\n#define CRYPT_OID_DECODE_OBJECT_FUNC       \"CryptDllDecodeObject\"\n#define CRYPT_OID_ENCODE_OBJECT_EX_FUNC    \"CryptDllEncodeObjectEx\"\n#define CRYPT_OID_DECODE_OBJECT_EX_FUNC    \"CryptDllDecodeObjectEx\"\n#define CRYPT_OID_CREATE_COM_OBJECT_FUNC   \"CryptDllCreateComObject\"\n#define CRYPT_OID_VERIFY_REVOCATION_FUNC   \"CertDllVerifyRevocation\"\n#define CRYPT_OID_VERIFY_CTL_USAGE_FUNC    \"CertDllVerifyCTLUsage\"\n#define CRYPT_OID_FORMAT_OBJECT_FUNC       \"CryptDllFormatObject\"\n#define CRYPT_OID_FIND_OID_INFO_FUNC       \"CryptDllFindOIDInfo\"\n#define CRYPT_OID_FIND_LOCALIZED_NAME_FUNC \"CryptDllFindLocalizedName\"\n#define CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_FUNC  \"CryptDllExportPublicKeyInfoEx\"\n#define CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_FUNC  \"CryptDllImportPublicKeyInfoEx\"\n#define CRYPT_OID_EXPORT_PRIVATE_KEY_INFO_FUNC \"CryptDllExportPrivateKeyInfoEx\"\n#define CRYPT_OID_IMPORT_PRIVATE_KEY_INFO_FUNC \"CryptDllImportPrivateKeyInfoEx\"\n#define CRYPT_OID_VERIFY_CERTIFICATE_CHAIN_POLICY_FUNC \\\n \"CertDllVerifyCertificateChainPolicy\"\n#define URL_OID_GET_OBJECT_URL_FUNC    \"UrlDllGetObjectUrl\"\n#define TIME_VALID_OID_GET_OBJECT_FUNC \"TimeValidDllGetObject\"\n#define CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC \"CryptMsgDllGenContentEncryptKey\"\n#define CMSG_OID_EXPORT_KEY_TRANS_FUNC        \"CryptMsgDllExportKeyTrans\"\n#define CMSG_OID_IMPORT_KEY_TRANS_FUNC        \"CryptMsgDllImportKeyTrans\"\n\n#define CRYPT_OID_REGPATH \"Software\\\\Microsoft\\\\Cryptography\\\\OID\"\n#define CRYPT_OID_REG_ENCODING_TYPE_PREFIX \"EncodingType \"\n#if defined(__GNUC__)\n# define CRYPT_OID_REG_DLL_VALUE_NAME (const WCHAR []){ 'D','l','l',0 }\n# define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME \\\n (const WCHAR []){ 'F','u','n','c','N','a','m','e',0 }\n# define CRYPT_OID_REG_FLAGS_VALUE_NAME \\\n (const WCHAR []){ 'C','r','y','p','t','F','l','a','g','s',0 }\n#elif defined(_MSC_VER)\n# define CRYPT_OID_REG_DLL_VALUE_NAME       L\"Dll\"\n# define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME L\"FuncName\"\n# define CRYPT_OID_REG_FLAGS_VALUE_NAME     L\"CryptFlags\"\n#else\nstatic const WCHAR CRYPT_OID_REG_DLL_VALUE_NAME[] = { 'D','l','l',0 };\nstatic const WCHAR CRYPT_OID_REG_FUNC_NAME_VALUE_NAME[] =\n { 'F','u','n','c','N','a','m','e',0 };\nstatic const WCHAR CRYPT_OID_REG_FLAGS_VALUE_NAME[] =\n { 'C','r','y','p','t','F','l','a','g','s',0 };\n#endif\n#define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME_A \"FuncName\"\n#define CRYPT_DEFAULT_OID                    \"DEFAULT\"\n\n#define CRYPT_INSTALL_OID_FUNC_BEFORE_FLAG 1\n\n#define CRYPT_GET_INSTALLED_OID_FUNC_FLAG  0x1\n\n#define CRYPT_REGISTER_FIRST_INDEX 0\n#define CRYPT_REGISTER_LAST_INDEX  0xffffffff\n\n/* values for CERT_STORE_PROV_INFO's dwStoreProvFlags */\n#define CERT_STORE_PROV_EXTERNAL_FLAG        0x1\n#define CERT_STORE_PROV_DELETED_FLAG         0x2\n#define CERT_STORE_PROV_NO_PERSIST_FLAG      0x4\n#define CERT_STORE_PROV_SYSTEM_STORE_FLAG    0x8\n#define CERT_STORE_PROV_LM_SYSTEM_STORE_FLAG 0x10\n\n/* function indices */\n#define CERT_STORE_PROV_CLOSE_FUNC             0\n#define CERT_STORE_PROV_READ_CERT_FUNC         1\n#define CERT_STORE_PROV_WRITE_CERT_FUNC        2\n#define CERT_STORE_PROV_DELETE_CERT_FUNC       3\n#define CERT_STORE_PROV_SET_CERT_PROPERTY_FUNC 4\n#define CERT_STORE_PROV_READ_CRL_FUNC          5\n#define CERT_STORE_PROV_WRITE_CRL_FUNC         6\n#define CERT_STORE_PROV_DELETE_CRL_FUNC        7\n#define CERT_STORE_PROV_SET_CRL_PROPERTY_FUNC  8\n#define CERT_STORE_PROV_READ_CTL_FUNC          9\n#define CERT_STORE_PROV_WRITE_CTL_FUNC         10\n#define CERT_STORE_PROV_DELETE_CTL_FUNC        11\n#define CERT_STORE_PROV_SET_CTL_PROPERTY_FUNC  12\n#define CERT_STORE_PROV_CONTROL_FUNC           13\n#define CERT_STORE_PROV_FIND_CERT_FUNC         14\n#define CERT_STORE_PROV_FREE_FIND_CERT_FUNC    15\n#define CERT_STORE_PROV_GET_CERT_PROPERTY_FUNC 16\n#define CERT_STORE_PROV_FIND_CRL_FUNC          17\n#define CERT_STORE_PROV_FREE_FIND_CRL_FUNC     18\n#define CERT_STORE_PROV_GET_CRL_PROPERTY_FUNC  19\n#define CERT_STORE_PROV_FIND_CTL_FUNC          20\n#define CERT_STORE_PROV_FREE_FIND_CTL_FUNC     21\n#define CERT_STORE_PROV_GET_CTL_PROPERTY_FUNC  22\n\n/* physical store dwFlags, also used by CertAddStoreToCollection as\n * dwUpdateFlags\n */\n#define CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG                  0x1\n#define CERT_PHYSICAL_STORE_OPEN_DISABLE_FLAG                0x2\n#define CERT_PHYSICAL_STORE_REMOVE_OPEN_DISABLE_FLAG         0x4\n#define CERT_PHYSICAL_STORE_INSERT_COMPUTER_NAME_ENABLE_FLAG 0x8\n\n/* dwFlag values for CertEnumPhysicalStore callback */\n#define CERT_PHYSICAL_STORE_PREDEFINED_ENUM_FLAG 0x1\n\n/* predefined store names */\n#if defined(__GNUC__)\n# define CERT_PHYSICAL_STORE_DEFAULT_NAME (const WCHAR[])\\\n {'.','D','e','f','a','u','l','t','0'}\n# define CERT_PHYSICAL_STORE_GROUP_POLICY_NAME (const WCHAR[])\\\n {'.','G','r','o','u','p','P','o','l','i','c','y',0}\n# define CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME (const WCHAR[])\\\n {'.','L','o','c','a','l','M','a','c','h','i','n','e',0}\n# define CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME (const WCHAR[])\\\n {'.','U','s','e','r','C','e','r','t','i','f','i','c','a','t','e',0}\n# define CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME (const WCHAR[])\\\n {'.','L','o','c','a','l','M','a','c','h','i','n','e','G','r','o','u','p',\\\n 'P','o','l','i','c','y',0}\n# define CERT_PHYSICAL_STORE_ENTERPRISE_NAME (const WCHAR[])\\\n {'.','E','n','t','e','r','p','r','i','s','e',0}\n# define CERT_PHYSICAL_STORE_AUTH_ROOT_NAME (const WCHAR[])\\\n {'.','A','u','t','h','R','o','o','t',0}\n#elif defined(_MSC_VER)\n# define CERT_PHYSICAL_STORE_DEFAULT_NAME \\\n L\".Default\"\n# define CERT_PHYSICAL_STORE_GROUP_POLICY_NAME \\\n L\".GroupPolicy\"\n# define CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME \\\n L\".LocalMachine\"\n# define CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME \\\n L\".UserCertificate\"\n# define CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME \\\n L\".LocalMachineGroupPolicy\"\n# define CERT_PHYSICAL_STORE_ENTERPRISE_NAME \\\n L\".Enterprise\"\n# define CERT_PHYSICAL_STORE_AUTH_ROOT_NAME \\\n L\".AuthRoot\"\n#else\nstatic const WCHAR CERT_PHYSICAL_STORE_DEFAULT_NAME[] = \n {'.','D','e','f','a','u','l','t','0'};\nstatic const WCHAR CERT_PHYSICAL_STORE_GROUP_POLICY_NAME[] =\n {'.','G','r','o','u','p','P','o','l','i','c','y',0};\nstatic const WCHAR CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME[] =\n {'.','L','o','c','a','l','M','a','c','h','i','n','e',0};\nstatic const WCHAR CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME[] =\n {'.','U','s','e','r','C','e','r','t','i','f','i','c','a','t','e',0};\nstatic const WCHAR CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME[] =\n {'.','L','o','c','a','l','M','a','c','h','i','n','e','G','r','o','u','p',\n 'P','o','l','i','c','y',0};\nstatic const WCHAR CERT_PHYSICAL_STORE_ENTERPRISE_NAME[] =\n {'.','E','n','t','e','r','p','r','i','s','e',0};\nstatic const WCHAR CERT_PHYSICAL_STORE_AUTH_ROOT_NAME[] =\n {'.','A','u','t','h','R','o','o','t',0};\n#endif\n\n/* cert system store flags */\n#define CERT_SYSTEM_STORE_MASK 0xffff0000\n#define CERT_SYSTEM_STORE_RELOCATE_FLAG 0x80000000\n\n/* CertFindChainInStore dwFindType types */\n#define CERT_CHAIN_FIND_BY_ISSUER 1\n\n/* CertSaveStore dwSaveAs values */\n#define CERT_STORE_SAVE_AS_STORE 1\n#define CERT_STORE_SAVE_AS_PKCS7 2\n/* CertSaveStore dwSaveTo values */\n#define CERT_STORE_SAVE_TO_FILE       1\n#define CERT_STORE_SAVE_TO_MEMORY     2\n#define CERT_STORE_SAVE_TO_FILENAME_A 3\n#define CERT_STORE_SAVE_TO_FILENAME_W 4\n#define CERT_STORE_SAVE_TO_FILENAME   CERT_STORE_SAVE_TO_FILENAME_W\n\n/* CERT_INFO versions/flags */\n#define CERT_V1 0\n#define CERT_V2 1\n#define CERT_V3 2\n#define CERT_INFO_VERSION_FLAG                 1\n#define CERT_INFO_SERIAL_NUMBER_FLAG           2\n#define CERT_INFO_SIGNATURE_ALGORITHM_FLAG     3\n#define CERT_INFO_ISSUER_FLAG                  4\n#define CERT_INFO_NOT_BEFORE_FLAG              5\n#define CERT_INFO_NOT_AFTER_FLAG               6\n#define CERT_INFO_SUBJECT_FLAG                 7\n#define CERT_INFO_SUBJECT_PUBLIC_KEY_INFO_FLAG 8\n#define CERT_INFO_ISSUER_UNIQUE_ID_FLAG        9\n#define CERT_INFO_SUBJECT_UNIQUE_ID_FLAG       10\n#define CERT_INFO_EXTENSION_FLAG               11\n\n/* CERT_REQUEST_INFO versions */\n#define CERT_REQUEST_V1 0\n\n/* CERT_KEYGEN_REQUEST_INFO versions */\n#define CERT_KEYGEN_REQUEST_V1 0\n\n/* CRL versions */\n#define CRL_V1 0\n#define CRL_V2 1\n\n/* CTL versions */\n#define CTL_V1 0\n\n/* Certificate, CRL, CTL property IDs */\n#define CERT_KEY_PROV_HANDLE_PROP_ID               1\n#define CERT_KEY_PROV_INFO_PROP_ID                 2\n#define CERT_SHA1_HASH_PROP_ID                     3\n#define CERT_HASH_PROP_ID                          CERT_SHA1_HASH_PROP_ID\n#define CERT_MD5_HASH_PROP_ID                      4\n#define CERT_KEY_CONTEXT_PROP_ID                   5\n#define CERT_KEY_SPEC_PROP_ID                      6\n#define CERT_IE30_RESERVED_PROP_ID                 7\n#define CERT_PUBKEY_HASH_RESERVED_PROP_ID          8\n#define CERT_ENHKEY_USAGE_PROP_ID                  9\n#define CERT_CTL_USAGE_PROP_ID                     CERT_ENHKEY_USAGE_PROP_ID\n#define CERT_NEXT_UPDATE_LOCATION_PROP_ID          10\n#define CERT_FRIENDLY_NAME_PROP_ID                 11\n#define CERT_PVK_FILE_PROP_ID                      12\n#define CERT_DESCRIPTION_PROP_ID                   13\n#define CERT_ACCESS_STATE_PROP_ID                  14\n#define CERT_SIGNATURE_HASH_PROP_ID                15\n#define CERT_SMART_CARD_DATA_PROP_ID               16\n#define CERT_EFS_PROP_ID                           17\n#define CERT_FORTEZZA_DATA_PROP                    18\n#define CERT_ARCHIVED_PROP_ID                      19\n#define CERT_KEY_IDENTIFIER_PROP_ID                20\n#define CERT_AUTO_ENROLL_PROP_ID                   21\n#define CERT_PUBKEY_ALG_PARA_PROP_ID               22\n#define CERT_CROSS_CERT_DIST_POINTS_PROP_ID        23\n#define CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID    24\n#define CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID   25\n#define CERT_ENROLLMENT_PROP_ID                    26\n#define CERT_DATE_STAMP_PROP_ID                    27\n#define CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID 28\n#define CERT_SUBJECT_NAME_MD5_HASH_PROP_ID         29\n#define CERT_EXTENDED_ERROR_INFO_PROP_ID           30\n/* 31    -- unused?\n   32    -- cert prop id\n   33    -- CRL prop id\n   34    -- CTL prop id\n   35    -- KeyId prop id\n   36-63 -- reserved\n */\n#define CERT_RENEWAL_PROP_ID                       64\n#define CERT_ARCHIVED_KEY_HASH_PROP_ID             65\n#define CERT_AUTO_ENROLL_RETRY_PROP_ID             66\n#define CERT_AIA_URL_RETRIEVED_PROP_ID             67\n#define CERT_AUTHORITY_INFO_ACCESS_PROP_ID         68\n#define CERT_BACKED_UP_PROP_ID                     69\n#define CERT_OCSP_RESPONSE_PROP_ID                 70\n#define CERT_REQUEST_ORIGINATOR_PROP_ID            71\n#define CERT_SOURCE_LOCATION_PROP_ID               72\n#define CERT_SOURCE_URL_PROP_ID                    73\n#define CERT_NEW_KEY_PROP_ID                       74\n#define CERT_OCSP_CACHE_PREFIX_PROP_ID             75\n#define CERT_SMART_CARD_ROOT_INFO_PROP_ID          76\n#define CERT_NO_AUTO_EXPIRE_CHECK_PROP_ID          77\n#define CERT_NCRYPT_KEY_HANDLE_PROP_ID             78\n#define CERT_HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_PROP_ID 79\n#define CERT_SUBJECT_INFO_ACCESS_PROP_ID           80\n#define CERT_CA_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID 81\n#define CERT_CA_DISABLE_CRL_PROP_ID                82\n#define CERT_ROOT_PROGRAM_CERT_POLICIES_PROP_ID    83\n#define CERT_ROOT_PROGRAM_NAME_CONSTRAINTS_PROP_ID 84\n\n#define CERT_FIRST_RESERVED_PROP_ID                85\n#define CERT_LAST_RESERVED_PROP_ID                 0x00007fff\n#define CERT_FIRST_USER_PROP_ID                    0x00008000\n#define CERT_LAST_USER_PROP_ID                     0x0000ffff\n\n#define IS_CERT_HASH_PROP_ID(x) \\\n ((x) == CERT_SHA1_HASH_PROP_ID || (x) == CERT_MD5_HASH_PROP_ID || \\\n  (x) == CERT_SIGNATURE_HASH_PROP_ID)\n\n#define IS_PUBKEY_HASH_PROP_ID(x) \\\n ((x) == CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID || \\\n  (x) == CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID)\n\n#define IS_CHAIN_HASH_PROP_ID(x) \\\n ((x) == CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID || \\\n  (x) == CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID || \\\n  (x) == CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID || \\\n  (x) == CERT_SUBJECT_NAME_MD5_HASH_PROP_ID)\n\n/* access state flags */\n#define CERT_ACCESS_STATE_WRITE_PERSIST_FLAG   0x1\n#define CERT_ACCESS_STATE_SYSTEM_STORE_FLAG    0x2\n#define CERT_ACCESS_STATE_LM_SYSTEM_STORE_FLAG 0x4\n\n/* CertSetCertificateContextProperty flags */\n#define CERT_SET_PROPERTY_INHIBIT_PERSIST_FLAG      0x40000000\n#define CERT_SET_PROPERTY_IGNORE_PERSIST_ERROR_FLAG 0x80000000\n\n/* CERT_RDN attribute dwValueType types */\n#define CERT_RDN_TYPE_MASK 0x000000ff\n#define CERT_RDN_ANY_TYPE         0\n#define CERT_RDN_ENCODED_BLOB     1\n#define CERT_RDN_OCTET_STRING     2\n#define CERT_RDN_NUMERIC_STRING   3\n#define CERT_RDN_PRINTABLE_STRING 4\n#define CERT_RDN_TELETEX_STRING   5\n#define CERT_RDN_T61_STRING       5\n#define CERT_RDN_VIDEOTEX_STRING  6\n#define CERT_RDN_IA5_STRING       7\n#define CERT_RDN_GRAPHIC_STRING   8\n#define CERT_RDN_VISIBLE_STRING   9\n#define CERT_RDN_ISO646_STRING    9\n#define CERT_RDN_GENERAL_STRING   10\n#define CERT_RDN_UNIVERSAL_STRING 11\n#define CERT_RDN_INT4_STRING      11\n#define CERT_RDN_BMP_STRING       12\n#define CERT_RDN_UNICODE_STRING   12\n#define CERT_RDN_UTF8_STRING      13\n\n/* CERT_RDN attribute dwValueType flags */\n#define CERT_RDN_FLAGS_MASK 0xff000000\n#define CERT_RDN_ENABLE_T61_UNICODE_FLAG  0x80000000\n#define CERT_RDN_DISABLE_CHECK_TYPE_FLAG  0x4000000\n#define CERT_RDN_ENABLE_UTF8_UNICODE_FLAG 0x2000000\n#define CERT_RDN_DISABLE_IE4_UTF8_FLAG    0x0100000\n\n#define IS_CERT_RDN_CHAR_STRING(x) \\\n (((x) & CERT_RDN_TYPE_MASK) >= CERT_RDN_NUMERIC_STRING)\n\n/* CertIsRDNAttrsInCertificateName flags */\n#define CERT_UNICODE_IS_RDN_ATTRS_FLAG          0x1\n#define CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG 0x2\n\n/* CRL reason codes */\n#define CRL_REASON_UNSPECIFIED            0\n#define CRL_REASON_KEY_COMPROMISE         1\n#define CRL_REASON_CA_COMPROMISE          2\n#define CRL_REASON_AFFILIATION_CHANGED    3\n#define CRL_REASON_SUPERSEDED             4\n#define CRL_REASON_CESSATION_OF_OPERATION 5\n#define CRL_REASON_CERTIFICATE_HOLD       6\n#define CRL_REASON_REMOVE_FROM_CRL        8\n\n/* CertControlStore control types */\n#define CERT_STORE_CTRL_RESYNC        1\n#define CERT_STORE_CTRL_NOTIFY_CHANGE 2\n#define CERT_STORE_CTRL_COMMIT        3\n#define CERT_STORE_CTRL_AUTO_RESYNC   4\n#define CERT_STORE_CTRL_CANCEL_NOTIFY 5\n\n#define CERT_STORE_CTRL_COMMIT_FORCE_FLAG 0x1\n#define CERT_STORE_CTRL_COMMIT_CLEAR_FLAG 0x2\n\n/* cert store properties */\n#define CERT_STORE_LOCALIZED_NAME_PROP_ID 0x1000\n\n/* CertCreateContext flags */\n#define CERT_CREATE_CONTEXT_NOCOPY_FLAG       0x1\n#define CERT_CREATE_CONTEXT_SORTED_FLAG       0x2\n#define CERT_CREATE_CONTEXT_NO_HCRYPTMSG_FLAG 0x4\n#define CERT_CREATE_CONTEXT_NO_ENTRY_FLAG     0x8\n\n#define CERT_COMPARE_MASK                   0xffff\n#define CERT_COMPARE_SHIFT                  16\n#define CERT_COMPARE_ANY                    0\n#define CERT_COMPARE_SHA1_HASH              1\n#define CERT_COMPARE_HASH                   CERT_COMPARE_SHA1_HASH\n#define CERT_COMPARE_NAME                   2\n#define CERT_COMPARE_ATTR                   3\n#define CERT_COMPARE_MD5_HASH               4\n#define CERT_COMPARE_PROPERTY               5\n#define CERT_COMPARE_PUBLIC_KEY             6\n#define CERT_COMPARE_NAME_STR_A             7\n#define CERT_COMPARE_NAME_STR_W             8\n#define CERT_COMPARE_KEY_SPEC               9\n#define CERT_COMPARE_ENHKEY_USAGE           10\n#define CERT_COMPARE_CTL_USAGE              CERT_COMPARE_ENHKEY_USAGE\n#define CERT_COMPARE_SUBJECT_CERT           11\n#define CERT_COMPARE_ISSUER_OF              12\n#define CERT_COMPARE_EXISTING               13\n#define CERT_COMPARE_SIGNATURE_HASH         14\n#define CERT_COMPARE_KEY_IDENTIFIER         15\n#define CERT_COMPARE_CERT_ID                16\n#define CERT_COMPARE_CROSS_CERT_DIST_POINTS 17\n#define CERT_COMPARE_PUBKEY_MD5_HASH        18\n\n/* values of dwFindType for CertFind*InStore */\n#define CERT_FIND_ANY \\\n (CERT_COMPARE_ANY << CERT_COMPARE_SHIFT)\n#define CERT_FIND_SHA1_HASH \\\n (CERT_COMPARE_SHA1_HASH << CERT_COMPARE_SHIFT)\n#define CERT_FIND_MD5_HASH \\\n (CERT_COMPARE_MD5_HASH << CERT_COMPARE_SHIFT)\n#define CERT_FIND_SIGNATURE_HASH \\\n (CERT_COMPARE_SIGNATURE_HASH << CERT_COMPARE_SHIFT)\n#define CERT_FIND_KEY_IDENTIFIER \\\n (CERT_COMPARE_KEY_IDENTIFIER << CERT_COMPARE_SHIFT)\n#define CERT_FIND_HASH CERT_FIND_SHA1_HASH\n#define CERT_FIND_PROPERTY \\\n (CERT_COMPARE_PROPERTY << CERT_COMPARE_SHIFT)\n#define CERT_FIND_PUBLIC_KEY \\\n (CERT_COMPARE_PUBLIC_KEY << CERT_COMPARE_SHIFT)\n#define CERT_FIND_SUBJECT_NAME \\\n (CERT_COMPARE_NAME << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)\n#define CERT_FIND_SUBJECT_ATTR \\\n (CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)\n#define CERT_FIND_ISSUER_NAME \\\n (CERT_COMPARE_NAME << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)\n#define CERT_FIND_ISSUER_ATTR \\\n (CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)\n#define CERT_FIND_SUBJECT_STR_A \\\n (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)\n#define CERT_FIND_SUBJECT_STR_W \\\n (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)\n#define CERT_FIND_SUBJECT_STR CERT_FIND_SUBJECT_STR_W\n#define CERT_FIND_ISSUER_STR_A \\\n (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)\n#define CERT_FIND_ISSUER_STR_W \\\n (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)\n#define CERT_FIND_ISSUER_STR CERT_FIND_ISSUER_STR_W\n#define CERT_FIND_KEY_SPEC \\\n (CERT_COMPARE_KEY_SPEC << CERT_COMPARE_SHIFT)\n#define CERT_FIND_ENHKEY_USAGE \\\n (CERT_COMPARE_ENHKEY_USAGE << CERT_COMPARE_SHIFT)\n#define CERT_FIND_CTL_USAGE CERT_FIND_ENHKEY_USAGE\n#define CERT_FIND_SUBJECT_CERT \\\n (CERT_COMPARE_SUBJECT_CERT << CERT_COMPARE_SHIFT)\n#define CERT_FIND_ISSUER_OF \\\n (CERT_COMPARE_ISSUER_OF << CERT_COMPARE_SHIFT)\n#define CERT_FIND_EXISTING \\\n (CERT_COMPARE_EXISTING << CERT_COMPARE_SHIFT)\n#define CERT_FIND_CERT_ID \\\n (CERT_COMPARE_CERT_ID << CERT_COMPARE_SHIFT)\n#define CERT_FIND_CROSS_CERT_DIST_POINTS \\\n (CERT_COMPARE_CROSS_CERT_DIST_POINTS << CERT_COMPARE_SHIFT)\n#define CERT_FIND_PUBKEY_MD5_HASH \\\n (CERT_COMPARE_PUBKEY_MD5_HASH << CERT_COMPARE_SHIFT)\n\n#define CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG  0x1\n#define CERT_FIND_OPTIONAL_CTL_USAGE_FLAG     0x1\n#define CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG  0x2\n#define CERT_FIND_EXT_ONLY_CTL_USAGE_FLAG     0x2\n#define CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG 0x4\n#define CERT_FIND_PROP_ONLY_CTL_USAGE_FLAG    0x4\n#define CERT_FIND_NO_ENHKEY_USAGE_FLAG        0x8\n#define CERT_FIND_NO_CTL_USAGE_FLAG           0x8\n#define CERT_FIND_OR_ENHKEY_USAGE_FLAG        0x10\n#define CERT_FIND_OR_CTL_USAGE_FLAG           0x10\n#define CERT_FIND_VALID_ENHKEY_USAGE_FLAG     0x20\n#define CERT_FIND_VALID_CTL_USAGE_FLAG        0x20\n\n#define CRL_FIND_ANY        0\n#define CRL_FIND_ISSUED_BY  1\n#define CRL_FIND_EXISTING   2\n#define CRL_FIND_ISSUED_FOR 3\n\n#define CRL_FIND_ISSUED_BY_AKI_FLAG       0x1\n#define CRL_FIND_ISSUED_BY_SIGNATURE_FLAG 0x2\n#define CRL_FIND_ISSUED_BY_DELTA_FLAG     0x4\n#define CRL_FIND_ISSUED_BY_BASE_FLAG      0x8\n\ntypedef struct _CRL_FIND_ISSUED_FOR_PARA\n{\n    PCCERT_CONTEXT pSubjectCert;\n    PCCERT_CONTEXT pIssuerCert;\n} CRL_FIND_ISSUED_FOR_PARA, *PCRL_FIND_ISSUED_FOR_PARA;\n\n#define CTL_FIND_ANY       0\n#define CTL_FIND_SHA1_HASH 1\n#define CTL_FIND_MD5_HASH  2\n#define CTL_FIND_USAGE     3\n#define CTL_FIND_SUBJECT   4\n#define CTL_FIND_EXISTING  5\n\ntypedef struct _CTL_FIND_USAGE_PARA\n{\n    DWORD           cbSize;\n    CTL_USAGE       SubjectUsage;\n    CRYPT_DATA_BLOB ListIdentifier;\n    PCERT_INFO      pSigner;\n} CTL_FIND_USAGE_PARA, *PCTL_FIND_USAGE_PARA;\n\n#define CTL_FIND_NO_LIST_ID_CBDATA 0xffffffff\n#define CTL_FIND_NO_SIGNER_PTR     ((PCERT_INFO)-1)\n#define CTL_FIND_SAME_USAGE_FLAG   0x00000001\n\ntypedef struct _CTL_FIND_SUBJECT_PARA\n{\n    DWORD                cbSize;\n    PCTL_FIND_USAGE_PARA pUsagePara;\n    DWORD                dwSubjectType;\n    void                *pvSubject;\n} CTL_FIND_SUBJECT_PARA, *PCTL_FIND_SUBJECT_PARA;\n\n/* PFN_CERT_STORE_PROV_WRITE_CERT dwFlags values */\n#define CERT_STORE_PROV_WRITE_ADD_FLAG 0x1\n\n/* CertAddSerializedElementToStore context types */\n#define CERT_STORE_CERTIFICATE_CONTEXT 1\n#define CERT_STORE_CRL_CONTEXT         2\n#define CERT_STORE_CTL_CONTEXT         3\n#define CERT_STORE_ALL_CONTEXT_FLAG    ~0U\n#define CERT_STORE_CERTIFICATE_CONTEXT_FLAG \\\n                                    (1 << CERT_STORE_CERTIFICATE_CONTEXT)\n#define CERT_STORE_CRL_CONTEXT_FLAG (1 << CERT_STORE_CRL_CONTEXT)\n#define CERT_STORE_CTL_CONTEXT_FLAG (1 << CERT_STORE_CTL_CONTEXT)\n\n/* CryptBinaryToString/CryptStringToBinary flags */\n#define CRYPT_STRING_BASE64HEADER        0x00000000\n#define CRYPT_STRING_BASE64              0x00000001\n#define CRYPT_STRING_BINARY              0x00000002\n#define CRYPT_STRING_BASE64REQUESTHEADER 0x00000003\n#define CRYPT_STRING_HEX                 0x00000004\n#define CRYPT_STRING_HEXASCII            0x00000005\n#define CRYPT_STRING_BASE64_ANY          0x00000006\n#define CRYPT_STRING_ANY                 0x00000007\n#define CRYPT_STRING_HEX_ANY             0x00000008\n#define CRYPT_STRING_BASE64X509CRLHEADER 0x00000009\n#define CRYPT_STRING_HEXADDR             0x0000000a\n#define CRYPT_STRING_HEXASCIIADDR        0x0000000b\n#define CRYPT_STRING_NOCRLF              0x40000000\n#define CRYPT_STRING_NOCR                0x80000000\n\n/* OIDs */\n#define szOID_RSA                           \"1.2.840.113549\"\n#define szOID_PKCS                          \"1.2.840.113549.1\"\n#define szOID_RSA_HASH                      \"1.2.840.113549.2\"\n#define szOID_RSA_ENCRYPT                   \"1.2.840.113549.3\"\n#define szOID_PKCS_1                        \"1.2.840.113549.1.1\"\n#define szOID_PKCS_2                        \"1.2.840.113549.1.2\"\n#define szOID_PKCS_3                        \"1.2.840.113549.1.3\"\n#define szOID_PKCS_4                        \"1.2.840.113549.1.4\"\n#define szOID_PKCS_5                        \"1.2.840.113549.1.5\"\n#define szOID_PKCS_6                        \"1.2.840.113549.1.6\"\n#define szOID_PKCS_7                        \"1.2.840.113549.1.7\"\n#define szOID_PKCS_8                        \"1.2.840.113549.1.8\"\n#define szOID_PKCS_9                        \"1.2.840.113549.1.9\"\n#define szOID_PKCS_10                       \"1.2.840.113549.1.10\"\n#define szOID_PKCS_11                       \"1.2.840.113549.1.12\"\n#define szOID_RSA_RSA                       \"1.2.840.113549.1.1.1\"\n#define CERT_RSA_PUBLIC_KEY_OBJID           szOID_RSA_RSA\n#define CERT_DEFAULT_OID_PUBLIC_KEY_SIGN    szOID_RSA_RSA\n#define CERT_DEFAULT_OID_PUBLIC_KEY_XCHG    szOID_RSA_RSA\n#define szOID_RSA_MD2RSA                    \"1.2.840.113549.1.1.2\"\n#define szOID_RSA_MD4RSA                    \"1.2.840.113549.1.1.3\"\n#define szOID_RSA_MD5RSA                    \"1.2.840.113549.1.1.4\"\n#define szOID_RSA_SHA1RSA                   \"1.2.840.113549.1.1.5\"\n#define szOID_RSA_SET0AEP_RSA               \"1.2.840.113549.1.1.6\"\n#define szOID_RSA_SHA256RSA                 \"1.2.840.113549.1.1.11\"\n#define szOID_RSA_SHA384RSA                 \"1.2.840.113549.1.1.12\"\n#define szOID_RSA_SHA512RSA                 \"1.2.840.113549.1.1.13\"\n#define szOID_RSA_DH                        \"1.2.840.113549.1.3.1\"\n#define szOID_RSA_data                      \"1.2.840.113549.1.7.1\"\n#define szOID_RSA_signedData                \"1.2.840.113549.1.7.2\"\n#define szOID_RSA_envelopedData             \"1.2.840.113549.1.7.3\"\n#define szOID_RSA_signEnvData               \"1.2.840.113549.1.7.4\"\n#define szOID_RSA_digestedData              \"1.2.840.113549.1.7.5\"\n#define szOID_RSA_hashedData                \"1.2.840.113549.1.7.5\"\n#define szOID_RSA_encryptedData             \"1.2.840.113549.1.7.6\"\n#define szOID_RSA_emailAddr                 \"1.2.840.113549.1.9.1\"\n#define szOID_RSA_unstructName              \"1.2.840.113549.1.9.2\"\n#define szOID_RSA_contentType               \"1.2.840.113549.1.9.3\"\n#define szOID_RSA_messageDigest             \"1.2.840.113549.1.9.4\"\n#define szOID_RSA_signingTime               \"1.2.840.113549.1.9.5\"\n#define szOID_RSA_counterSign               \"1.2.840.113549.1.9.6\"\n#define szOID_RSA_challengePwd              \"1.2.840.113549.1.9.7\"\n#define szOID_RSA_unstructAddr              \"1.2.840.113549.1.9.9\"\n#define szOID_RSA_extCertAttrs              \"1.2.840.113549.1.9.9\"\n#define szOID_RSA_certExtensions            \"1.2.840.113549.1.9.14\"\n#define szOID_RSA_SMIMECapabilities         \"1.2.840.113549.1.9.15\"\n#define szOID_RSA_preferSignedData          \"1.2.840.113549.1.9.15.1\"\n#define szOID_RSA_SMIMEalg                  \"1.2.840.113549.1.9.16.3\"\n#define szOID_RSA_SMIMEalgESDH              \"1.2.840.113549.1.9.16.3.5\"\n#define szOID_RSA_SMIMEalgCMS3DESwrap       \"1.2.840.113549.1.9.16.3.6\"\n#define szOID_RSA_SMIMEalgCMSRC2wrap        \"1.2.840.113549.1.9.16.3.7\"\n#define szOID_RSA_MD2                       \"1.2.840.113549.2.2\"\n#define szOID_RSA_MD4                       \"1.2.840.113549.2.4\"\n#define szOID_RSA_MD5                       \"1.2.840.113549.2.5\"\n#define szOID_RSA_RC2CBC                    \"1.2.840.113549.3.2\"\n#define szOID_RSA_RC4                       \"1.2.840.113549.3.4\"\n#define szOID_RSA_DES_EDE3_CBC              \"1.2.840.113549.3.7\"\n#define szOID_RSA_RC5_CBCPad                \"1.2.840.113549.3.9\"\n#define szOID_ANSI_X942                     \"1.2.840.10046\"\n#define szOID_ANSI_X942_DH                  \"1.2.840.10046.2.1\"\n#define szOID_X957                          \"1.2.840.10040\"\n#define szOID_X957_DSA                      \"1.2.840.10040.4.1\"\n#define szOID_X957_SHA1DSA                  \"1.2.840.10040.4.3\"\n#define szOID_ECC_PUBLIC_KEY                \"1.2.840.10045.2.1\"\n#define szOID_ECC_CURVE_P256                \"1.2.840.10045.3.1.7\"\n#define szOID_ECDSA_SPECIFIED               \"1.2.840.10045.4.3\"\n#define szOID_ECDSA_SHA256                  \"1.2.840.10045.4.3.2\"\n#define szOID_ECDSA_SHA384                  \"1.2.840.10045.4.3.3\"\n#define szOID_ECDSA_SHA512                  \"1.2.840.10045.4.3.4\"\n#define szOID_DS                            \"2.5\"\n#define szOID_DSALG                         \"2.5.8\"\n#define szOID_DSALG_CRPT                    \"2.5.8.1\"\n#define szOID_DSALG_HASH                    \"2.5.8.2\"\n#define szOID_DSALG_SIGN                    \"2.5.8.3\"\n#define szOID_DSALG_RSA                     \"2.5.8.1.1\"\n#define szOID_OIW                           \"1.3.14\"\n#define szOID_OIWSEC                        \"1.3.14.3.2\"\n#define szOID_OIWSEC_md4RSA                 \"1.3.14.3.2.2\"\n#define szOID_OIWSEC_md5RSA                 \"1.3.14.3.2.3\"\n#define szOID_OIWSEC_md4RSA2                \"1.3.14.3.2.4\"\n#define szOID_OIWSEC_desECB                 \"1.3.14.3.2.6\"\n#define szOID_OIWSEC_desCBC                 \"1.3.14.3.2.7\"\n#define szOID_OIWSEC_desOFB                 \"1.3.14.3.2.8\"\n#define szOID_OIWSEC_desCFB                 \"1.3.14.3.2.9\"\n#define szOID_OIWSEC_desMAC                 \"1.3.14.3.2.10\"\n#define szOID_OIWSEC_rsaSign                \"1.3.14.3.2.11\"\n#define szOID_OIWSEC_dsa                    \"1.3.14.3.2.12\"\n#define szOID_OIWSEC_shaDSA                 \"1.3.14.3.2.13\"\n#define szOID_OIWSEC_mdc2RSA                \"1.3.14.3.2.14\"\n#define szOID_OIWSEC_shaRSA                 \"1.3.14.3.2.15\"\n#define szOID_OIWSEC_dhCommMod              \"1.3.14.3.2.16\"\n#define szOID_OIWSEC_desEDE                 \"1.3.14.3.2.17\"\n#define szOID_OIWSEC_sha                    \"1.3.14.3.2.18\"\n#define szOID_OIWSEC_mdc2                   \"1.3.14.3.2.19\"\n#define szOID_OIWSEC_dsaComm                \"1.3.14.3.2.20\"\n#define szOID_OIWSEC_dsaCommSHA             \"1.3.14.3.2.21\"\n#define szOID_OIWSEC_rsaXchg                \"1.3.14.3.2.22\"\n#define szOID_OIWSEC_keyHashSeal            \"1.3.14.3.2.23\"\n#define szOID_OIWSEC_md2RSASign             \"1.3.14.3.2.24\"\n#define szOID_OIWSEC_md5RSASign             \"1.3.14.3.2.25\"\n#define szOID_OIWSEC_sha1                   \"1.3.14.3.2.26\"\n#define szOID_OIWSEC_dsaSHA1                \"1.3.14.3.2.27\"\n#define szOID_OIWSEC_dsaCommSHA1            \"1.3.14.3.2.28\"\n#define szOID_OIWSEC_sha1RSASign            \"1.3.14.3.2.29\"\n#define szOID_OIWDIR                        \"1.3.14.7.2\"\n#define szOID_OIWDIR_CRPT                   \"1.3.14.7.2.1\"\n#define szOID_OIWDIR_HASH                   \"1.3.14.7.2.2\"\n#define szOID_OIWDIR_SIGN                   \"1.3.14.7.2.3\"\n#define szOID_OIWDIR_md2                    \"1.3.14.7.2.2.1\"\n#define szOID_OIWDIR_md2RSA                 \"1.3.14.7.2.3.1\"\n#define szOID_ECC_CURVE_P384                \"1.3.132.0.34\"\n#define szOID_ECC_CURVE_P521                \"1.3.132.0.35\"\n#define szOID_INFOSEC                       \"2.16.840.1.101.2.1\"\n#define szOID_INFOSEC_sdnsSignature         \"2.16.840.1.101.2.1.1.1\"\n#define szOID_INFOSEC_mosaicSignature       \"2.16.840.1.101.2.1.1.2\"\n#define szOID_INFOSEC_sdnsConfidentiality   \"2.16.840.1.101.2.1.1.3\"\n#define szOID_INFOSEC_mosaicConfidentiality \"2.16.840.1.101.2.1.1.4\"\n#define szOID_INFOSEC_sdnsIntegrity         \"2.16.840.1.101.2.1.1.5\"\n#define szOID_INFOSEC_mosaicIntegrity       \"2.16.840.1.101.2.1.1.6\"\n#define szOID_INFOSEC_sdnsTokenProtection   \"2.16.840.1.101.2.1.1.7\"\n#define szOID_INFOSEC_mosaicTokenProtection \"2.16.840.1.101.2.1.1.8\"\n#define szOID_INFOSEC_sdnsKeyManagement     \"2.16.840.1.101.2.1.1.9\"\n#define szOID_INFOSEC_mosaicKeyManagement   \"2.16.840.1.101.2.1.1.10\"\n#define szOID_INFOSEC_sdnsKMandSig          \"2.16.840.1.101.2.1.1.11\"\n#define szOID_INFOSEC_mosaicKMandSig        \"2.16.840.1.101.2.1.1.12\"\n#define szOID_INFOSEC_SuiteASignature       \"2.16.840.1.101.2.1.1.13\"\n#define szOID_INFOSEC_SuiteAConfidentiality \"2.16.840.1.101.2.1.1.14\"\n#define szOID_INFOSEC_SuiteAIntegrity       \"2.16.840.1.101.2.1.1.15\"\n#define szOID_INFOSEC_SuiteATokenProtection \"2.16.840.1.101.2.1.1.16\"\n#define szOID_INFOSEC_SuiteAKeyManagement   \"2.16.840.1.101.2.1.1.17\"\n#define szOID_INFOSEC_SuiteAKMandSig        \"2.16.840.1.101.2.1.1.18\"\n#define szOID_INFOSEC_mosaicUpdatedSig      \"2.16.840.1.101.2.1.1.19\"\n#define szOID_INFOSEC_mosaicKMandUpdSig     \"2.16.840.1.101.2.1.1.20\"\n#define szOID_INFOSEC_mosaicUpdateInteg     \"2.16.840.1.101.2.1.1.21\"\n#define szOID_NIST_sha256                   \"2.16.840.1.101.3.4.2.1\"\n#define szOID_NIST_sha384                   \"2.16.840.1.101.3.4.2.2\"\n#define szOID_NIST_sha512                   \"2.16.840.1.101.3.4.2.3\"\n#define szOID_COMMON_NAME                   \"2.5.4.3\"\n#define szOID_SUR_NAME                      \"2.5.4.4\"\n#define szOID_DEVICE_SERIAL_NUMBER          \"2.5.4.5\"\n#define szOID_COUNTRY_NAME                  \"2.5.4.6\"\n#define szOID_LOCALITY_NAME                 \"2.5.4.7\"\n#define szOID_STATE_OR_PROVINCE_NAME        \"2.5.4.8\"\n#define szOID_STREET_ADDRESS                \"2.5.4.9\"\n#define szOID_ORGANIZATION_NAME             \"2.5.4.10\"\n#define szOID_ORGANIZATIONAL_UNIT_NAME      \"2.5.4.11\"\n#define szOID_TITLE                         \"2.5.4.12\"\n#define szOID_DESCRIPTION                   \"2.5.4.13\"\n#define szOID_SEARCH_GUIDE                  \"2.5.4.14\"\n#define szOID_BUSINESS_CATEGORY             \"2.5.4.15\"\n#define szOID_POSTAL_ADDRESS                \"2.5.4.16\"\n#define szOID_POSTAL_CODE                   \"2.5.4.17\"\n#define szOID_POST_OFFICE_BOX               \"2.5.4.18\"\n#define szOID_PHYSICAL_DELIVERY_OFFICE_NAME \"2.5.4.19\"\n#define szOID_TELEPHONE_NUMBER              \"2.5.4.20\"\n#define szOID_TELEX_NUMBER                  \"2.5.4.21\"\n#define szOID_TELETEXT_TERMINAL_IDENTIFIER  \"2.5.4.22\"\n#define szOID_FACSIMILE_TELEPHONE_NUMBER    \"2.5.4.23\"\n#define szOID_X21_ADDRESS                   \"2.5.4.24\"\n#define szOID_INTERNATIONAL_ISDN_NUMBER     \"2.5.4.25\"\n#define szOID_REGISTERED_ADDRESS            \"2.5.4.26\"\n#define szOID_DESTINATION_INDICATOR         \"2.5.4.27\"\n#define szOID_PREFERRED_DELIVERY_METHOD     \"2.5.4.28\"\n#define szOID_PRESENTATION_ADDRESS          \"2.5.4.29\"\n#define szOID_SUPPORTED_APPLICATION_CONTEXT \"2.5.4.30\"\n#define szOID_MEMBER                        \"2.5.4.31\"\n#define szOID_OWNER                         \"2.5.4.32\"\n#define szOID_ROLE_OCCUPANT                 \"2.5.4.33\"\n#define szOID_SEE_ALSO                      \"2.5.4.34\"\n#define szOID_USER_PASSWORD                 \"2.5.4.35\"\n#define szOID_USER_CERTIFICATE              \"2.5.4.36\"\n#define szOID_CA_CERTIFICATE                \"2.5.4.37\"\n#define szOID_AUTHORITY_REVOCATION_LIST     \"2.5.4.38\"\n#define szOID_CERTIFICATE_REVOCATION_LIST   \"2.5.4.39\"\n#define szOID_CROSS_CERTIFICATE_PAIR        \"2.5.4.40\"\n#define szOID_GIVEN_NAME                    \"2.5.4.42\"\n#define szOID_INITIALS                      \"2.5.4.43\"\n#define szOID_DN_QUALIFIER                  \"2.5.4.46\"\n#define szOID_AUTHORITY_KEY_IDENTIFIER      \"2.5.29.1\"\n#define szOID_KEY_ATTRIBUTES                \"2.5.29.2\"\n#define szOID_CERT_POLICIES_95              \"2.5.29.3\"\n#define szOID_KEY_USAGE_RESTRICTION         \"2.5.29.4\"\n#define szOID_LEGACY_POLICY_MAPPINGS        \"2.5.29.5\"\n#define szOID_SUBJECT_ALT_NAME              \"2.5.29.7\"\n#define szOID_ISSUER_ALT_NAME               \"2.5.29.8\"\n#define szOID_SUBJECT_DIR_ATTRS             \"2.5.29.9\"\n#define szOID_BASIC_CONSTRAINTS             \"2.5.29.10\"\n#define szOID_SUBJECT_KEY_IDENTIFIER        \"2.5.29.14\"\n#define szOID_KEY_USAGE                     \"2.5.29.15\"\n#define szOID_PRIVATEKEY_USAGE_PERIOD       \"2.5.29.16\"\n#define szOID_SUBJECT_ALT_NAME2             \"2.5.29.17\"\n#define szOID_ISSUER_ALT_NAME2              \"2.5.29.18\"\n#define szOID_BASIC_CONSTRAINTS2            \"2.5.29.19\"\n#define szOID_CRL_NUMBER                    \"2.5.29.20\"\n#define szOID_CRL_REASON_CODE               \"2.5.29.21\"\n#define szOID_REASON_CODE_HOLD              \"2.5.29.23\"\n#define szOID_DELTA_CRL_INDICATOR           \"2.5.29.27\"\n#define szOID_ISSUING_DIST_POINT            \"2.5.29.28\"\n#define szOID_NAME_CONSTRAINTS              \"2.5.29.30\"\n#define szOID_CRL_DIST_POINTS               \"2.5.29.31\"\n#define szOID_CERT_POLICIES                 \"2.5.29.32\"\n#define szOID_ANY_CERT_POLICY               \"2.5.29.32.0\"\n#define szOID_POLICY_MAPPINGS               \"2.5.29.33\"\n#define szOID_AUTHORITY_KEY_IDENTIFIER2     \"2.5.29.35\"\n#define szOID_POLICY_CONSTRAINTS            \"2.5.29.36\"\n#define szOID_ENHANCED_KEY_USAGE            \"2.5.29.37\"\n#define szOID_FRESHEST_CRL                  \"2.5.29.46\"\n#define szOID_INHIBIT_ANY_POLICY            \"2.5.29.54\"\n#define szOID_DOMAIN_COMPONENT              \"0.9.2342.19200300.100.1.25\"\n#define szOID_PKCS_12_FRIENDLY_NAME_ATTR     \"1.2.840.113549.1.9.20\"\n#define szOID_PKCS_12_LOCAL_KEY_ID           \"1.2.840.113549.1.9.21\"\n#define szOID_CERT_EXTENSIONS                \"1.3.6.1.4.1.311.2.1.14\"\n#define szOID_NEXT_UPDATE_LOCATION           \"1.3.6.1.4.1.311.10.2\"\n#define szOID_KP_CTL_USAGE_SIGNING           \"1.3.6.1.4.1.311.10.3.1\"\n#define szOID_KP_TIME_STAMP_SIGNING          \"1.3.6.1.4.1.311.10.3.2\"\n#ifndef szOID_SERVER_GATED_CRYPTO\n#define szOID_SERVER_GATED_CRYPTO            \"1.3.6.1.4.1.311.10.3.3\"\n#endif\n#ifndef szOID_SGC_NETSCAPE\n#define szOID_SGC_NETSCAPE                   \"2.16.840.1.113730.4.1\"\n#endif\n#define szOID_KP_EFS                         \"1.3.6.1.4.1.311.10.3.4\"\n#define szOID_EFS_RECOVERY                   \"1.3.6.1.4.1.311.10.3.4.1\"\n#define szOID_WHQL_CRYPTO                    \"1.3.6.1.4.1.311.10.3.5\"\n#define szOID_NT5_CRYPTO                     \"1.3.6.1.4.1.311.10.3.6\"\n#define szOID_OEM_WHQL_CRYPTO                \"1.3.6.1.4.1.311.10.3.7\"\n#define szOID_EMBEDDED_NT_CRYPTO             \"1.3.6.1.4.1.311.10.3.8\"\n#define szOID_ROOT_LIST_SIGNER               \"1.3.6.1.4.1.311.10.3.9\"\n#define szOID_KP_QUALIFIED_SUBORDINATION     \"1.3.6.1.4.1.311.10.3.10\"\n#define szOID_KP_KEY_RECOVERY                \"1.3.6.1.4.1.311.10.3.11\"\n#define szOID_KP_DOCUMENT_SIGNING            \"1.3.6.1.4.1.311.10.3.12\"\n#define szOID_KP_LIFETIME_SIGNING            \"1.3.6.1.4.1.311.10.3.13\"\n#define szOID_KP_MOBILE_DEVICE_SOFTWARE      \"1.3.6.1.4.1.311.10.3.14\"\n#define szOID_YESNO_TRUST_ATTR               \"1.3.6.1.4.1.311.10.4.1\"\n#ifndef szOID_DRM\n#define szOID_DRM                            \"1.3.6.1.4.1.311.10.5.1\"\n#endif\n#ifndef szOID_DRM_INDIVIDUALIZATION\n#define szOID_DRM_INDIVIDUALIZATION          \"1.3.6.1.4.1.311.10.5.2\"\n#endif\n#ifndef szOID_LICENSES\n#define szOID_LICENSES                       \"1.3.6.1.4.1.311.10.6.1\"\n#endif\n#ifndef szOID_LICENSE_SERVER\n#define szOID_LICENSE_SERVER                 \"1.3.6.1.4.1.311.10.6.2\"\n#endif\n#define szOID_REMOVE_CERTIFICATE             \"1.3.6.1.4.1.311.10.8.1\"\n#define szOID_CROSS_CERT_DIST_POINTS         \"1.3.6.1.4.1.311.10.9.1\"\n#define szOID_CTL                            \"1.3.6.1.4.1.311.10.1\"\n#define szOID_SORTED_CTL                     \"1.3.6.1.4.1.311.10.1.1\"\n#define szOID_ANY_APPLICATION_POLICY         \"1.3.6.1.4.1.311.10.12.1\"\n#define szOID_RENEWAL_CERTIFICATE            \"1.3.6.1.4.1.311.13.1\"\n#define szOID_ENROLLMENT_NAME_VALUE_PAIR     \"1.3.6.1.4.1.311.13.2.1\"\n#define szOID_ENROLLMENT_CSP_PROVIDER        \"1.3.6.1.4.1.311.13.2.2\"\n#define szOID_OS_VERSION                     \"1.3.6.1.4.1.311.13.2.3\"\n#define szOID_PKCS_12_KEY_PROVIDER_NAME_ATTR \"1.3.6.1.4.1.311.17.1\"\n#define szOID_LOCAL_MACHINE_KEYSET           \"1.3.6.1.4.1.311.17.2\"\n#define szOID_AUTO_ENROLL_CTL_USAGE          \"1.3.6.1.4.1.311.20.1\"\n#define szOID_ENROLL_CERTTYPE_EXTENSION      \"1.3.6.1.4.1.311.20.2\"\n#define szOID_ENROLLMENT_AGENT               \"1.3.6.1.4.1.311.20.2.1\"\n#ifndef szOID_KP_SMARTCARD_LOGON\n#define szOID_KP_SMARTCARD_LOGON             \"1.3.6.1.4.1.311.20.2.2\"\n#endif\n#ifndef szOID_NT_PRINCIPAL_NAME\n#define szOID_NT_PRINCIPAL_NAME              \"1.3.6.1.4.1.311.20.2.3\"\n#endif\n#define szOID_CERT_MANIFOLD                  \"1.3.6.1.4.1.311.20.3\"\n#ifndef szOID_CERTSRV_CA_VERSION\n#define szOID_CERTSRV_CA_VERSION             \"1.3.6.1.4.1.311.21.1\"\n#endif\n#define szOID_CERTSRV_PREVIOUS_CERT_HASH     \"1.3.6.1.4.1.311.21.2\"\n#define szOID_CRL_VIRTUAL_BASE               \"1.3.6.1.4.1.311.21.3\"\n#define szOID_CRL_NEXT_PUBLISH               \"1.3.6.1.4.1.311.21.4\"\n#define szOID_KP_CA_EXCHANGE                 \"1.3.6.1.4.1.311.21.5\"\n#define szOID_KP_KEY_RECOVERY_AGENT          \"1.3.6.1.4.1.311.21.6\"\n#define szOID_CERTIFICATE_TEMPLATE           \"1.3.6.1.4.1.311.21.7\"\n#define szOID_ENTERPRISE_OID_ROOT            \"1.3.6.1.4.1.311.21.8\"\n#define szOID_RDN_DUMMY_SIGNER               \"1.3.6.1.4.1.311.21.9\"\n#define szOID_APPLICATION_CERT_POLICIES      \"1.3.6.1.4.1.311.21.10\"\n#define szOID_APPLICATION_POLICY_MAPPINGS    \"1.3.6.1.4.1.311.21.11\"\n#define szOID_APPLICATION_POLICY_CONSTRAINTS \"1.3.6.1.4.1.311.21.12\"\n#define szOID_ARCHIVED_KEY_ATTR              \"1.3.6.1.4.1.311.21.13\"\n#define szOID_CRL_SELF_CDP                   \"1.3.6.1.4.1.311.21.14\"\n#define szOID_REQUIRE_CERT_CHAIN_POLICY      \"1.3.6.1.4.1.311.21.15\"\n#define szOID_ARCHIVED_KEY_CERT_HASH         \"1.3.6.1.4.1.311.21.16\"\n#define szOID_ISSUED_CERT_HASH               \"1.3.6.1.4.1.311.21.17\"\n#define szOID_DS_EMAIL_REPLICATION           \"1.3.6.1.4.1.311.21.19\"\n#define szOID_REQUEST_CLIENT_INFO            \"1.3.6.1.4.1.311.21.20\"\n#define szOID_ENCRYPTED_KEY_HASH             \"1.3.6.1.4.1.311.21.21\"\n#define szOID_CERTSRV_CROSSCA_VERSION        \"1.3.6.1.4.1.311.21.22\"\n#define szOID_KEYID_RDN                      \"1.3.6.1.4.1.311.10.7.1\"\n#define szOID_PKIX                           \"1.3.6.1.5.5.7\"\n#define szOID_PKIX_PE                        \"1.3.6.1.5.5.7.1\"\n#define szOID_AUTHORITY_INFO_ACCESS          \"1.3.6.1.5.5.7.1.1\"\n#define szOID_PKIX_POLICY_QUALIFIER_CPS      \"1.3.6.1.5.5.7.2.1\"\n#define szOID_PKIX_POLICY_QUALIFIER_USERNOTICE \"1.3.6.1.5.5.7.2.2\"\n#define szOID_PKIX_KP                        \"1.3.6.1.5.5.7.3\"\n#define szOID_PKIX_KP_SERVER_AUTH            \"1.3.6.1.5.5.7.3.1\"\n#define szOID_PKIX_KP_CLIENT_AUTH            \"1.3.6.1.5.5.7.3.2\"\n#define szOID_PKIX_KP_CODE_SIGNING           \"1.3.6.1.5.5.7.3.3\"\n#define szOID_PKIX_KP_EMAIL_PROTECTION       \"1.3.6.1.5.5.7.3.4\"\n#define szOID_PKIX_KP_IPSEC_END_SYSTEM       \"1.3.6.1.5.5.7.3.5\"\n#define szOID_PKIX_KP_IPSEC_TUNNEL           \"1.3.6.1.5.5.7.3.6\"\n#define szOID_PKIX_KP_IPSEC_USER             \"1.3.6.1.5.5.7.3.7\"\n#define szOID_PKIX_KP_TIMESTAMP_SIGNING      \"1.3.6.1.5.5.7.3.8\"\n#define szOID_PKIX_NO_SIGNATURE              \"1.3.6.1.5.5.7.6.2\"\n#define szOID_CMC                            \"1.3.6.1.5.5.7.7\"\n#define szOID_CMC_STATUS_INFO                \"1.3.6.1.5.5.7.7.1\"\n#define szOID_CMC_IDENTIFICATION             \"1.3.6.1.5.5.7.7.2\"\n#define szOID_CMC_IDENTITY_PROOF             \"1.3.6.1.5.5.7.7.3\"\n#define szOID_CMC_DATA_RETURN                \"1.3.6.1.5.5.7.7.4\"\n#define szOID_CMC_TRANSACTION_ID             \"1.3.6.1.5.5.7.7.5\"\n#define szOID_CMC_SENDER_NONCE               \"1.3.6.1.5.5.7.7.6\"\n#define szOID_CMC_RECIPIENT_NONCE            \"1.3.6.1.5.5.7.7.7\"\n#define szOID_CMC_ADD_EXTENSIONS             \"1.3.6.1.5.5.7.7.8\"\n#define szOID_CMC_ENCRYPTED_POP              \"1.3.6.1.5.5.7.7.9\"\n#define szOID_CMC_DECRYPTED_POP              \"1.3.6.1.5.5.7.7.10\"\n#define szOID_CMC_LRA_POP_WITNESS            \"1.3.6.1.5.5.7.7.11\"\n#define szOID_CMC_GET_CERT                   \"1.3.6.1.5.5.7.7.15\"\n#define szOID_CMC_GET_CRL                    \"1.3.6.1.5.5.7.7.16\"\n#define szOID_CMC_REVOKE_REQUEST             \"1.3.6.1.5.5.7.7.17\"\n#define szOID_CMC_REG_INFO                   \"1.3.6.1.5.5.7.7.18\"\n#define szOID_CMC_RESPONSE_INFO              \"1.3.6.1.5.5.7.7.19\"\n#define szOID_CMC_QUERY_PENDING              \"1.3.6.1.5.5.7.7.21\"\n#define szOID_CMC_ID_POP_LINK_RANDOM         \"1.3.6.1.5.5.7.7.22\"\n#define szOID_CMC_ID_POP_LINK_WITNESS        \"1.3.6.1.5.5.7.7.23\"\n#define szOID_CT_PKI_DATA                    \"1.3.6.1.5.5.7.12.2\"\n#define szOID_CT_PKI_RESPONSE                \"1.3.6.1.5.5.7.12.3\"\n#define szOID_PKIX_ACC_DESCR                 \"1.3.6.1.5.5.7.48\"\n#define szOID_PKIX_OCSP                      \"1.3.6.1.5.5.7.48.1\"\n#define szOID_PKIX_CA_ISSUERS                \"1.3.6.1.5.5.7.48.2\"\n#define szOID_IPSEC_KP_IKE_INTERMEDIATE      \"1.3.6.1.5.5.8.2.2\"\n\n#ifndef szOID_SERIALIZED\n#define szOID_SERIALIZED                     \"1.3.6.1.4.1.311.10.3.3.1\"\n#endif\n\n#ifndef szOID_PRODUCT_UPDATE\n#define szOID_PRODUCT_UPDATE                 \"1.3.6.1.4.1.311.31.1\"\n#endif\n\n#define szOID_NETSCAPE                       \"2.16.840.1.113730\"\n#define szOID_NETSCAPE_CERT_EXTENSION        \"2.16.840.1.113730.1\"\n#define szOID_NETSCAPE_CERT_TYPE             \"2.16.840.1.113730.1.1\"\n#define szOID_NETSCAPE_BASE_URL              \"2.16.840.1.113730.1.2\"\n#define szOID_NETSCAPE_REVOCATION_URL        \"2.16.840.1.113730.1.3\"\n#define szOID_NETSCAPE_CA_REVOCATION_URL     \"2.16.840.1.113730.1.4\"\n#define szOID_NETSCAPE_CERT_RENEWAL_URL      \"2.16.840.1.113730.1.7\"\n#define szOID_NETSCAPE_CA_POLICY_URL         \"2.16.840.1.113730.1.8\"\n#define szOID_NETSCAPE_SSL_SERVER_NAME       \"2.16.840.1.113730.1.12\"\n#define szOID_NETSCAPE_COMMENT               \"2.16.840.1.113730.1.13\"\n#define szOID_NETSCAPE_DATA_TYPE             \"2.16.840.1.113730.2\"\n#define szOID_NETSCAPE_CERT_SEQUENCE         \"2.16.840.1.113730.2.5\"\n\n/* Bits for szOID_NETSCAPE_CERT_TYPE */\n#define NETSCAPE_SSL_CLIENT_AUTH_CERT_TYPE 0x80\n#define NETSCAPE_SSL_SERVER_AUTH_CERT_TYPE 0x40\n#define NETSCAPE_SMIME_CERT_TYPE           0x20\n#define NETSCAPE_SIGN_CERT_TYPE            0x10\n#define NETSCAPE_SSL_CA_CERT_TYPE          0x04\n#define NETSCAPE_SMIME_CA_CERT_TYPE        0x02\n#define NETSCAPE_SIGN_CA_CERT_TYPE         0x01\n\n#define CRYPT_ENCODE_DECODE_NONE             0\n#define X509_CERT                            ((LPCSTR)1)\n#define X509_CERT_TO_BE_SIGNED               ((LPCSTR)2)\n#define X509_CERT_CRL_TO_BE_SIGNED           ((LPCSTR)3)\n#define X509_CERT_REQUEST_TO_BE_SIGNED       ((LPCSTR)4)\n#define X509_EXTENSIONS                      ((LPCSTR)5)\n#define X509_NAME_VALUE                      ((LPCSTR)6)\n#define X509_ANY_STRING                      X509_NAME_VALUE\n#define X509_NAME                            ((LPCSTR)7)\n#define X509_PUBLIC_KEY_INFO                 ((LPCSTR)8)\n#define X509_AUTHORITY_KEY_ID                ((LPCSTR)9)\n#define X509_KEY_ATTRIBUTES                  ((LPCSTR)10)\n#define X509_KEY_USAGE_RESTRICTION           ((LPCSTR)11)\n#define X509_ALTERNATE_NAME                  ((LPCSTR)12)\n#define X509_BASIC_CONSTRAINTS               ((LPCSTR)13)\n#define X509_KEY_USAGE                       ((LPCSTR)14)\n#define X509_BASIC_CONSTRAINTS2              ((LPCSTR)15)\n#define X509_CERT_POLICIES                   ((LPCSTR)16)\n#define PKCS_UTC_TIME                        ((LPCSTR)17)\n#define PKCS_TIME_REQUEST                    ((LPCSTR)18)\n#define RSA_CSP_PUBLICKEYBLOB                ((LPCSTR)19)\n#define X509_UNICODE_NAME                    ((LPCSTR)20)\n#define X509_KEYGEN_REQUEST_TO_BE_SIGNED     ((LPCSTR)21)\n#define PKCS_ATTRIBUTE                       ((LPCSTR)22)\n#define PKCS_CONTENT_INFO_SEQUENCE_OF_ANY    ((LPCSTR)23)\n#define X509_UNICODE_NAME_VALUE              ((LPCSTR)24)\n#define X509_UNICODE_ANY_STRING              X509_UNICODE_NAME_VALUE\n#define X509_OCTET_STRING                    ((LPCSTR)25)\n#define X509_BITS                            ((LPCSTR)26)\n#define X509_INTEGER                         ((LPCSTR)27)\n#define X509_MULTI_BYTE_INTEGER              ((LPCSTR)28)\n#define X509_ENUMERATED                      ((LPCSTR)29)\n#define X509_CRL_REASON_CODE                 X509_ENUMERATED\n#define X509_CHOICE_OF_TIME                  ((LPCSTR)30)\n#define X509_AUTHORITY_KEY_ID2               ((LPCSTR)31)\n#define X509_AUTHORITY_INFO_ACCESS           ((LPCSTR)32)\n#define PKCS_CONTENT_INFO                    ((LPCSTR)33)\n#define X509_SEQUENCE_OF_ANY                 ((LPCSTR)34)\n#define X509_CRL_DIST_POINTS                 ((LPCSTR)35)\n#define X509_ENHANCED_KEY_USAGE              ((LPCSTR)36)\n#define PKCS_CTL                             ((LPCSTR)37)\n#define X509_MULTI_BYTE_UINT                 ((LPCSTR)38)\n#define X509_DSS_PUBLICKEY                   X509_MULTI_BYTE_UINT\n#define X509_DSS_PARAMETERS                  ((LPCSTR)39)\n#define X509_DSS_SIGNATURE                   ((LPCSTR)40)\n#define PKCS_RC2_CBC_PARAMETERS              ((LPCSTR)41)\n#define PKCS_SMIME_CAPABILITIES              ((LPCSTR)42)\n#define PKCS_RSA_PRIVATE_KEY                 ((LPCSTR)43)\n#define PKCS_PRIVATE_KEY_INFO                ((LPCSTR)44)\n#define PKCS_ENCRYPTED_PRIVATE_KEY_INFO      ((LPCSTR)45)\n#define X509_PKIX_POLICY_QUALIFIER_USERNOTICE ((LPCSTR)46)\n#define X509_DH_PUBLICKEY                    X509_MULTI_BYTE_UINT\n#define X509_DH_PARAMETERS                   ((LPCSTR)47)\n#define X509_ECC_SIGNATURE                   ((LPCSTR)47)\n#define PKCS_ATTRIBUTES                      ((LPCSTR)48)\n#define PKCS_SORTED_CTL                      ((LPCSTR)49)\n#define X942_DH_PARAMETERS                   ((LPCSTR)50)\n#define X509_BITS_WITHOUT_TRAILING_ZEROES    ((LPCSTR)51)\n#define X942_OTHER_INFO                      ((LPCSTR)52)\n#define X509_CERT_PAIR                       ((LPCSTR)53)\n#define X509_ISSUING_DIST_POINT              ((LPCSTR)54)\n#define X509_NAME_CONSTRAINTS                ((LPCSTR)55)\n#define X509_POLICY_MAPPINGS                 ((LPCSTR)56)\n#define X509_POLICY_CONSTRAINTS              ((LPCSTR)57)\n#define X509_CROSS_CERT_DIST_POINTS          ((LPCSTR)58)\n#define CMC_DATA                             ((LPCSTR)59)\n#define CMC_RESPONSE                         ((LPCSTR)60)\n#define CMC_STATUS                           ((LPCSTR)61)\n#define CMC_ADD_EXTENSIONS                   ((LPCSTR)62)\n#define CMC_ADD_ATTRIBUTES                   ((LPCSTR)63)\n#define X509_CERTIFICATE_TEMPLATE            ((LPCSTR)64)\n#define X509_OBJECT_IDENTIFIER               ((LPCSTR)73)\n#define PKCS7_SIGNER_INFO                    ((LPCSTR)500)\n#define CMS_SIGNER_INFO                      ((LPCSTR)501)\n\n/* encode/decode flags */\n#define CRYPT_ENCODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG           0x00008\n#define CRYPT_ENCODE_ALLOC_FLAG                                0x08000\n#define CRYPT_SORTED_CTL_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG 0x10000\n#define CRYPT_UNICODE_NAME_ENCODE_ENABLE_T61_UNICODE_FLAG \\\n CERT_RDN_ENABLE_T61_UNICODE_FLAG\n#define CRYPT_UNICODE_NAME_ENCODE_ENABLE_UTF8_UNICODE_FLAG \\\n CERT_RDN_ENABLE_UTF8_UNICODE_FLAG\n#define CRYPT_UNICODE_NAME_ENCODE_DISABLE_CHECK_TYPE_FLAG \\\n CERT_RDN_DISABLE_CHECK_TYPE_FLAG\n\n#define CRYPT_DECODE_NOCOPY_FLAG                               0x00001\n#define CRYPT_DECODE_TO_BE_SIGNED_FLAG                         0x00002\n#define CRYPT_DECODE_SHARE_OID_STRING_FLAG                     0x00004\n#define CRYPT_DECODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG           0x00008\n#define CRYPT_DECODE_ALLOC_FLAG                                0x08000\n#define CRYPT_UNICODE_NAME_DECODE_DISABLE_IE4_UTF8_FLAG \\\n CERT_RDN_DISABLE_IE4_UTF8_FLAG\n\n#define CERT_STORE_SIGNATURE_FLAG     0x00000001\n#define CERT_STORE_TIME_VALIDITY_FLAG 0x00000002\n#define CERT_STORE_REVOCATION_FLAG    0x00000004\n#define CERT_STORE_NO_CRL_FLAG        0x00010000\n#define CERT_STORE_NO_ISSUER_FLAG     0x00020000\n\n#define CERT_STORE_BASE_CRL_FLAG  0x00000100\n#define CERT_STORE_DELTA_CRL_FLAG 0x00000200\n\n/* subject types for CryptVerifyCertificateSignatureEx */\n#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB 1\n#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT 2\n#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL  3\n\n/* issuer types for CryptVerifyCertificateSignatureEx */\n#define CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY 1\n#define CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT   2\n#define CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN  3\n#define CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL   4\n\n#define CRYPT_GET_URL_FROM_PROPERTY         0x00000001\n#define CRYPT_GET_URL_FROM_EXTENSION        0x00000002\n#define CRYPT_GET_URL_FROM_UNAUTH_ATTRIBUTE 0x00000004\n#define CRYPT_GET_URL_FROM_AUTH_ATTRIBUTE   0x00000008\n\n/* Certificate name string types and flags */\n#define CERT_SIMPLE_NAME_STR 1\n#define CERT_OID_NAME_STR    2\n#define CERT_X500_NAME_STR   3\n#define CERT_NAME_STR_SEMICOLON_FLAG           0x40000000\n#define CERT_NAME_STR_NO_PLUS_FLAG             0x20000000\n#define CERT_NAME_STR_NO_QUOTING_FLAG          0x10000000\n#define CERT_NAME_STR_CRLF_FLAG                0x08000000\n#define CERT_NAME_STR_COMMA_FLAG               0x04000000\n#define CERT_NAME_STR_REVERSE_FLAG             0x02000000\n#define CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG 0x00040000\n#define CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG  0x00020000\n#define CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG    0x00010000\n\n#define CERT_NAME_EMAIL_TYPE            1\n#define CERT_NAME_RDN_TYPE              2\n#define CERT_NAME_ATTR_TYPE             3\n#define CERT_NAME_SIMPLE_DISPLAY_TYPE   4\n#define CERT_NAME_FRIENDLY_DISPLAY_TYPE 5\n#define CERT_NAME_DNS_TYPE              6\n#define CERT_NAME_URL_TYPE              7\n#define CERT_NAME_UPN_TYPE              8\n\n#define CERT_NAME_ISSUER_FLAG           0x00000001\n#define CERT_NAME_DISABLE_IE4_UTF8_FLAG 0x00010000\n\n/* CryptFormatObject flags */\n#define CRYPT_FORMAT_STR_MULTI_LINE 0x0001\n#define CRYPT_FORMAT_STR_NO_HEX     0x0010\n\n#define CRYPT_FORMAT_SIMPLE        0x0001\n#define CRYPT_FORMAT_X509          0x0002\n#define CRYPT_FORMAT_OID           0x0004\n#define CRYPT_FORMAT_RDN_SEMICOLON 0x0100\n#define CRYPT_FORMAT_RDN_CRLF      0x0200\n#define CRYPT_FORMAT_RDN_UNQUOTE   0x0400\n#define CRYPT_FORMAT_RDN_REVERSE   0x0800\n\n#define CRYPT_FORMAT_COMMA     0x1000\n#define CRYPT_FORMAT_SEMICOLON CRYPT_FORMAT_RDN_SEMICOLON\n#define CRYPT_FORMAT_CRLF      CRYPT_FORMAT_RDN_CRLF\n\n/* CryptQueryObject types and flags */\n#define CERT_QUERY_OBJECT_FILE 1\n#define CERT_QUERY_OBJECT_BLOB 2\n\n#define CERT_QUERY_CONTENT_CERT               1\n#define CERT_QUERY_CONTENT_CTL                2\n#define CERT_QUERY_CONTENT_CRL                3\n#define CERT_QUERY_CONTENT_SERIALIZED_STORE   4\n#define CERT_QUERY_CONTENT_SERIALIZED_CERT    5\n#define CERT_QUERY_CONTENT_SERIALIZED_CTL     6\n#define CERT_QUERY_CONTENT_SERIALIZED_CRL     7\n#define CERT_QUERY_CONTENT_PKCS7_SIGNED       8\n#define CERT_QUERY_CONTENT_PKCS7_UNSIGNED     9\n#define CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED 10\n#define CERT_QUERY_CONTENT_PKCS10             11\n#define CERT_QUERY_CONTENT_PFX                12\n#define CERT_QUERY_CONTENT_CERT_PAIR          13\n\n#define CERT_QUERY_CONTENT_FLAG_CERT      (1 << CERT_QUERY_CONTENT_CERT)\n#define CERT_QUERY_CONTENT_FLAG_CTL       (1 << CERT_QUERY_CONTENT_CTL)\n#define CERT_QUERY_CONTENT_FLAG_CRL       (1 << CERT_QUERY_CONTENT_CRL)\n#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE \\\n (1 << CERT_QUERY_CONTENT_SERIALIZED_STORE)\n#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT \\\n (1 << CERT_QUERY_CONTENT_SERIALIZED_CERT)\n#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL \\\n (1 << CERT_QUERY_CONTENT_SERIALIZED_CTL)\n#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL \\\n (1 << CERT_QUERY_CONTENT_SERIALIZED_CRL)\n#define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED \\\n (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED)\n#define CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED \\\n (1 << CERT_QUERY_CONTENT_PKCS7_UNSIGNED)\n#define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED \\\n (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED)\n#define CERT_QUERY_CONTENT_FLAG_PKCS10    (1 << CERT_QUERY_CONTENT_PKCS10)\n#define CERT_QUERY_CONTENT_FLAG_PFX       (1 << CERT_QUERY_CONTENT_PFX)\n#define CERT_QUERY_CONTENT_FLAG_CERT_PAIR (1 << CERT_QUERY_CONTENT_CERT_PAIR)\n\n#define CERT_QUERY_CONTENT_FLAG_ALL \\\n CERT_QUERY_CONTENT_FLAG_CERT | \\\n CERT_QUERY_CONTENT_FLAG_CTL | \\\n CERT_QUERY_CONTENT_FLAG_CRL | \\\n CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | \\\n CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | \\\n CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL | \\\n CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL | \\\n CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | \\\n CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED | \\\n CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED | \\\n CERT_QUERY_CONTENT_FLAG_PKCS10 | \\\n CERT_QUERY_CONTENT_FLAG_PFX | \\\n CERT_QUERY_CONTENT_FLAG_CERT_PAIR\n\n#define CERT_QUERY_FORMAT_BINARY                1\n#define CERT_QUERY_FORMAT_BASE64_ENCODED        2\n#define CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED 3\n\n#define CERT_QUERY_FORMAT_FLAG_BINARY (1 << CERT_QUERY_FORMAT_BINARY)\n#define CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED \\\n (1 << CERT_QUERY_FORMAT_BASE64_ENCODED)\n#define CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED \\\n (1 << CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED)\n\n#define CERT_QUERY_FORMAT_FLAG_ALL \\\n CERT_QUERY_FORMAT_FLAG_BINARY | \\\n CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED | \\\n CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED \\\n\n#define CERT_SET_KEY_PROV_HANDLE_PROP_ID 0x00000001\n#define CERT_SET_KEY_CONTEXT_PROP_ID     0x00000001\n\n#define CERT_CREATE_SELFSIGN_NO_SIGN     1\n#define CERT_CREATE_SELFSIGN_NO_KEY_INFO 2\n\n/* flags for CryptAcquireCertificatePrivateKey */\n#define CRYPT_ACQUIRE_CACHE_FLAG         0x00000001\n#define CRYPT_ACQUIRE_USE_PROV_INFO_FLAG 0x00000002\n#define CRYPT_ACQUIRE_COMPARE_KEY_FLAG   0x00000004\n#define CRYPT_ACQUIRE_SILENT_FLAG        0x00000040\n\n/* flags for CryptFindCertificateKeyProvInfo */\n#define CRYPT_FIND_USER_KEYSET_FLAG    0x00000001\n#define CRYPT_FIND_MACHINE_KEYSET_FLAG 0x00000002\n#define CRYPT_FIND_SILENT_KEYSET_FLAG  0x00000040\n\n/* Chain engines and chains */\ntypedef HANDLE HCERTCHAINENGINE;\n#define HCCE_CURRENT_USER  ((HCERTCHAINENGINE)NULL)\n#define HCCE_LOCAL_MACHINE ((HCERTCHAINENGINE)1)\n\n#define CERT_CHAIN_CACHE_END_CERT           0x00000001\n#define CERT_CHAIN_THREAD_STORE_SYNC        0x00000002\n#define CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL 0x00000004\n#define CERT_CHAIN_USE_LOCAL_MACHINE_STORE  0x00000008\n#define CERT_CHAIN_ENABLE_CACHE_AUTO_UPDATE 0x00000010\n#define CERT_CHAIN_ENABLE_SHARE_STORE       0x00000020\n\ntypedef struct _CERT_CHAIN_ENGINE_CONFIG\n{\n    DWORD       cbSize;\n    HCERTSTORE  hRestrictedRoot;\n    HCERTSTORE  hRestrictedTrust;\n    HCERTSTORE  hRestrictedOther;\n    DWORD       cAdditionalStore;\n    HCERTSTORE *rghAdditionalStore;\n    DWORD       dwFlags;\n    DWORD       dwUrlRetrievalTimeout;\n    DWORD       MaximumCachedCertificates;\n    DWORD       CycleDetectionModulus;\n    HCERTSTORE  hExclusiveRoot;\n    HCERTSTORE  hExclusiveRootTrustedPeople;\n} CERT_CHAIN_ENGINE_CONFIG, *PCERT_CHAIN_ENGINE_CONFIG;\n\n/* message-related definitions */\n\ntypedef BOOL (WINAPI *PFN_CMSG_STREAM_OUTPUT)(const void *pvArg, BYTE *pbData,\n DWORD cbData, BOOL fFinal);\n\n#define CMSG_INDEFINITE_LENGTH 0xffffffff\n\ntypedef struct _CMSG_STREAM_INFO\n{\n    DWORD cbContent;\n    PFN_CMSG_STREAM_OUTPUT pfnStreamOutput;\n    void *pvArg;\n} CMSG_STREAM_INFO, *PCMSG_STREAM_INFO;\n\ntypedef struct _CERT_ISSUER_SERIAL_NUMBER\n{\n    CERT_NAME_BLOB     Issuer;\n    CRYPT_INTEGER_BLOB SerialNumber;\n} CERT_ISSUER_SERIAL_NUMBER, *PCERT_ISSUER_SERIAL_NUMBER;\n\ntypedef struct _CERT_ID\n{\n    DWORD dwIdChoice;\n    union {\n        CERT_ISSUER_SERIAL_NUMBER IssuerSerialNumber;\n        CRYPT_HASH_BLOB           KeyId;\n        CRYPT_HASH_BLOB           HashId;\n    } DUMMYUNIONNAME;\n} CERT_ID, *PCERT_ID;\n\n#define CERT_ID_ISSUER_SERIAL_NUMBER 1\n#define CERT_ID_KEY_IDENTIFIER       2\n#define CERT_ID_SHA1_HASH            3\n\n#ifndef USE_WC_PREFIX\n#undef CMSG_DATA /* may be defined by sys/socket.h */\n#define CMSG_DATA                 1\n#define CMSG_SIGNED               2\n#define CMSG_ENVELOPED            3\n#define CMSG_SIGNED_AND_ENVELOPED 4\n#define CMSG_HASHED               5\n#define CMSG_ENCRYPTED            6\n\n#define CMSG_ALL_FLAGS                 ~0U\n#define CMSG_DATA_FLAG                 (1 << CMSG_DATA)\n#define CMSG_SIGNED_FLAG               (1 << CMSG_SIGNED)\n#define CMSG_ENVELOPED_FLAG            (1 << CMSG_ENVELOPED)\n#define CMSG_SIGNED_AND_ENVELOPED_FLAG (1 << CMSG_SIGNED_AND_ENVELOPED)\n#define CMSG_ENCRYPTED_FLAG            (1 << CMSG_ENCRYPTED)\n#else\n#define WC_CMSG_DATA                 1\n#define WC_CMSG_SIGNED               2\n#define WC_CMSG_ENVELOPED            3\n#define WC_CMSG_SIGNED_AND_ENVELOPED 4\n#define WC_CMSG_HASHED               5\n#define WC_CMSG_ENCRYPTED            6\n\n#define WC_CMSG_ALL_FLAGS                 ~0U\n#define WC_CMSG_DATA_FLAG                 (1 << WC_CMSG_DATA)\n#define WC_CMSG_SIGNED_FLAG               (1 << WC_CMSG_SIGNED)\n#define WC_CMSG_ENVELOPED_FLAG            (1 << WC_CMSG_ENVELOPED)\n#define WC_CMSG_SIGNED_AND_ENVELOPED_FLAG (1 << WC_CMSG_SIGNED_AND_ENVELOPED)\n#define WC_CMSG_ENCRYPTED_FLAG            (1 << WC_CMSG_ENCRYPTED)\n#endif\n\ntypedef struct _CMSG_SIGNER_ENCODE_INFO\n{\n    DWORD                      cbSize;\n    PCERT_INFO                 pCertInfo;\n    HCRYPTPROV                 hCryptProv;\n    DWORD                      dwKeySpec;\n    CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;\n    void                      *pvHashAuxInfo;\n    DWORD                      cAuthAttr;\n    PCRYPT_ATTRIBUTE           rgAuthAttr;\n    DWORD                      cUnauthAttr;\n    PCRYPT_ATTRIBUTE           rgUnauthAttr;\n#ifdef CMSG_SIGNER_ENCODE_INFO_HAS_CMS_FIELDS\n    CERT_ID                    SignerId;\n    CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;\n    void                      *pvHashEncryptionAuxInfo;\n#endif\n} CMSG_SIGNER_ENCODE_INFO, *PCMSG_SIGNER_ENCODE_INFO;\n\ntypedef struct _CMSG_SIGNED_ENCODE_INFO\n{\n    DWORD                    cbSize;\n    DWORD                    cSigners;\n    PCMSG_SIGNER_ENCODE_INFO rgSigners;\n    DWORD                    cCertEncoded;\n    PCERT_BLOB               rgCertEncoded;\n    DWORD                    cCrlEncoded;\n    PCRL_BLOB                rgCrlEncoded;\n#ifdef CMSG_SIGNED_ENCODE_INFO_HAS_CMS_FIELDS\n    DWORD                    cAttrCertEncoded;\n    PCERT_BLOB               rgAttrCertEncoded;\n#endif\n} CMSG_SIGNED_ENCODE_INFO, *PCMSG_SIGNED_ENCODE_INFO;\n\ntypedef struct _CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO\n{\n    DWORD                      cbSize;\n    CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;\n    void                      *pvKeyEncryptionAuxInfo;\n    HCRYPTPROV_LEGACY          hCryptProv;\n    CRYPT_BIT_BLOB             RecipientPublicKey;\n    CERT_ID                    RecipientId;\n} CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO, *PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO;\n\ntypedef struct _CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO\n{\n    DWORD                       cbSize;\n    CRYPT_BIT_BLOB              RecipientPublicKey;\n    CERT_ID                     RecipientId;\n    FILETIME                    Date;\n    PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;\n} CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO,\n *PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO;\n\ntypedef struct _CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO\n{\n    DWORD                      cbSize;\n    CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;\n    void                      *pvKeyEncryptionAuxInfo;\n    CRYPT_ALGORITHM_IDENTIFIER KeyWrapAlgorithm;\n    void                      *pvKeyWrapAuxInfo;\n    HCRYPTPROV_LEGACY          hCryptProv;\n    DWORD                      dwKeySpec;\n    DWORD                      dwKeyChoice;\n    union {\n        PCRYPT_ALGORITHM_IDENTIFIER pEphemeralAlgorithm;\n        PCERT_ID                    pSenderId;\n    } DUMMYUNIONNAME;\n    CRYPT_DATA_BLOB            UserKeyingMaterial;\n    DWORD                      cRecipientEncryptedKeys;\n    PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO *rgpRecipientEncryptedKeys;\n} CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO, *PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO;\n\n#define CMSG_KEY_AGREE_EPHEMERAL_KEY_CHOICE 1\n#define CMSG_KEY_AGREE_STATIC_KEY_CHOICE    2\n\ntypedef struct _CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO\n{\n    DWORD                       cbSize;\n    CRYPT_ALGORITHM_IDENTIFIER  KeyEncryptionAlgorithm;\n    void                       *pvKeyEncryptionAuxInfo;\n    HCRYPTPROV                  hCryptProv;\n    DWORD                       dwKeyChoice;\n    union {\n        HCRYPTKEY hKeyEncryptionKey;\n        void     *pvKeyEncryptionKey;\n    } DUMMYUNIONNAME;\n    CRYPT_DATA_BLOB             KeyId;\n    FILETIME                    Date;\n    PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;\n} CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO, *PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO;\n\n#define CMSG_MAIL_LIST_HANDLE_KEY_CHOICE 1\n\ntypedef struct _CMSG_RECIPIENT_ENCODE_INFO\n{\n    DWORD dwRecipientChoice;\n    union {\n        PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTrans;\n        PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO pKeyAgree;\n        PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO pMailList;\n    } DUMMYUNIONNAME;\n} CMSG_RECIPIENT_ENCODE_INFO, *PCMSG_RECIPIENT_ENCODE_INFO;\n\n#define CMSG_KEY_TRANS_RECIPIENT 1\n#define CMSG_KEY_AGREE_RECIPIENT 2\n#define CMSG_MAIL_LIST_RECIPIENT 3\n\ntypedef struct _CMSG_ENVELOPED_ENCODE_INFO\n{\n    DWORD                       cbSize;\n    HCRYPTPROV_LEGACY           hCryptProv;\n    CRYPT_ALGORITHM_IDENTIFIER  ContentEncryptionAlgorithm;\n    void                       *pvEncryptionAuxInfo;\n    DWORD                       cRecipients;\n    PCERT_INFO                 *rgpRecipientCert;\n#ifdef CMSG_ENVELOPED_ENCODE_INFO_HAS_CMS_FIELDS\n    PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients;\n    DWORD                       cCertEncoded;\n    PCERT_BLOB                  rgCertEncoded;\n    DWORD                       cCrlEncoded;\n    PCRL_BLOB                   rgCrlEncoded;\n    DWORD                       cAttrCertEncoded;\n    PCERT_BLOB                  rgAttrCertEncoded;\n    DWORD                       cUnprotectedAttr;\n    PCRYPT_ATTRIBUTE            rgUnprotectedAttr;\n#endif\n} CMSG_ENVELOPED_ENCODE_INFO, *PCMSG_ENVELOPED_ENCODE_INFO;\n\ntypedef struct _CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO\n{\n    DWORD                      cbSize;\n    CMSG_SIGNED_ENCODE_INFO    SignedInfo;\n    CMSG_ENVELOPED_ENCODE_INFO EnvelopedInfo;\n} CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO,\n *PCMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO;\n\ntypedef struct _CMSG_HASHED_ENCODE_INFO\n{\n    DWORD                      cbSize;\n    HCRYPTPROV_LEGACY          hCryptProv;\n    CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;\n    void                      *pvHashAuxInfo;\n} CMSG_HASHED_ENCODE_INFO, *PCMSG_HASHED_ENCODE_INFO;\n\ntypedef struct _CMSG_ENCRYPTED_ENCODE_INFO\n{\n    DWORD                      cbSize;\n    CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;\n    void                      *pvEncryptionAuxInfo;\n} CMSG_ENCRYPTED_ENCODE_INFO, *PCMSG_ENCRYPTED_ENCODE_INFO;\n\n#define CMSG_BARE_CONTENT_FLAG             0x00000001\n#define CMSG_LENGTH_ONLY_FLAG              0x00000002\n#define CMSG_DETACHED_FLAG                 0x00000004\n#define CMSG_AUTHENTICATED_ATTRIBUTES_FLAG 0x00000008\n#define CMSG_CONTENTS_OCTETS_FLAG          0x00000010\n#define CMSG_MAX_LENGTH_FLAG               0x00000020\n#define CMSG_CMS_ENCAPSULATED_CONTENT_FLAG 0x00000040\n#define CMSG_CRYPT_RELEASE_CONTEXT_FLAG    0x00008000\n\n#define CMSG_CTRL_VERIFY_SIGNATURE       1\n#define CMSG_CTRL_DECRYPT                2\n#define CMSG_CTRL_VERIFY_HASH            5\n#define CMSG_CTRL_ADD_SIGNER             6\n#define CMSG_CTRL_DEL_SIGNER             7\n#define CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR 8\n#define CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR 9\n#define CMSG_CTRL_ADD_CERT               10\n#define CMSG_CTRL_DEL_CERT               11\n#define CMSG_CTRL_ADD_CRL                12\n#define CMSG_CTRL_DEL_CRL                13\n#define CMSG_CTRL_ADD_ATTR_CERT          14\n#define CMSG_CTRL_DEL_ATTR_CERT          15\n#define CMSG_CTRL_KEY_TRANS_DECRYPT      16\n#define CMSG_CTRL_KEY_AGREE_DECRYPT      17\n#define CMSG_CTRL_MAIL_LIST_DECRYPT      18\n#define CMSG_CTRL_VERIFY_SIGNATURE_EX    19\n#define CMSG_CTRL_ADD_CMS_SIGNER_INFO    20\n\ntypedef struct _CMSG_CTRL_DECRYPT_PARA\n{\n    DWORD      cbSize;\n    HCRYPTPROV hCryptProv;\n    DWORD      dwKeySpec;\n    DWORD      dwRecipientIndex;\n} CMSG_CTRL_DECRYPT_PARA, *PCMSG_CTRL_DECRYPT_PARA;\n\ntypedef struct _CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA\n{\n    DWORD           cbSize;\n    DWORD           dwSignerIndex;\n    CRYPT_DATA_BLOB blob;\n} CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA,\n *PCMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA;\n\ntypedef struct _CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA\n{\n    DWORD           cbSize;\n    DWORD           dwSignerIndex;\n    DWORD           dwUnauthAttrIndex;\n} CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA,\n *PCMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA;\n\ntypedef struct _CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA {\n    DWORD      cbSize;\n    HCRYPTPROV hCryptProv;\n    DWORD      dwSignerIndex;\n    DWORD      dwSignerType;\n    void      *pvSigner;\n} CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA, *PCMSG_CTRL_VERIFY_SIGNATURE_EX_PARA;\n\n#define CMSG_VERIFY_SIGNER_PUBKEY 1\n#define CMSG_VERIFY_SIGNER_CERT   2\n#define CMSG_VERIFY_SIGNER_CHAIN  3\n#define CMSG_VERIFY_SIGNER_NULL   4\n\n#define CMSG_TYPE_PARAM                  1\n#define CMSG_CONTENT_PARAM               2\n#define CMSG_BARE_CONTENT_PARAM          3\n#define CMSG_INNER_CONTENT_TYPE_PARAM    4\n#define CMSG_SIGNER_COUNT_PARAM          5\n#define CMSG_SIGNER_INFO_PARAM           6\n#define CMSG_SIGNER_CERT_INFO_PARAM      7\n#define CMSG_SIGNER_HASH_ALGORITHM_PARAM 8\n#define CMSG_SIGNER_AUTH_ATTR_PARAM      9\n#define CMSG_SIGNER_UNAUTH_ATTR_PARAM    10\n#define CMSG_CERT_COUNT_PARAM            11\n#define CMSG_CERT_PARAM                  12\n#define CMSG_CRL_COUNT_PARAM             13\n#define CMSG_CRL_PARAM                   14\n#define CMSG_ENVELOPE_ALGORITHM_PARAM    15\n#define CMSG_RECIPIENT_COUNT_PARAM       17\n#define CMSG_RECIPIENT_INDEX_PARAM       18\n#define CMSG_RECIPIENT_INFO_PARAM        19\n#define CMSG_HASH_ALGORITHM_PARAM        20\n#define CMSG_HASH_DATA_PARAM             21\n#define CMSG_COMPUTED_HASH_PARAM         22\n#define CMSG_ENCRYPT_PARAM               26\n#define CMSG_ENCRYPTED_DIGEST            27\n#define CMSG_ENCODED_SIGNER              28\n#define CMSG_ENCODED_MESSAGE             29\n#define CMSG_VERSION_PARAM               30\n#define CMSG_ATTR_CERT_COUNT_PARAM       31\n#define CMSG_ATTR_CERT_PARAM             32\n#define CMSG_CMS_RECIPIENT_COUNT_PARAM   33\n#define CMSG_CMS_RECIPIENT_INDEX_PARAM   34\n#define CMSG_CMS_RECIPIENT_ENCRYPTED_KEY_INDEX_PARAM 35\n#define CMSG_CMS_RECIPIENT_INFO_PARAM    36\n#define CMSG_UNPROTECTED_ATTR_PARAM      37\n#define CMSG_SIGNER_CERT_ID_PARAM        38\n#define CMSG_CMS_SIGNER_INFO_PARAM       39\n\ntypedef struct _CMSG_CMS_SIGNER_INFO {\n    DWORD                      dwVersion;\n    CERT_ID                    SignerId;\n    CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;\n    CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;\n    CRYPT_DATA_BLOB            EncryptedHash;\n    CRYPT_ATTRIBUTES           AuthAttrs;\n    CRYPT_ATTRIBUTES           UnauthAttrs;\n} CMSG_CMS_SIGNER_INFO, *PCMSG_CMS_SIGNER_INFO;\n\ntypedef CRYPT_ATTRIBUTES CMSG_ATTR, *PCMSG_ATTR;\n\n#define CMSG_SIGNED_DATA_V1               1\n#define CMSG_SIGNED_DATA_V3               3\n#define CMSG_SIGNED_DATA_PKCS_1_5_VERSION CMSG_SIGNED_DATA_V1\n#define CMSG_SIGNED_DATA_CMS_VERSION      CMSG_SIGNED_DATA_V3\n\n#define CMSG_SIGNER_INFO_V1               1\n#define CMSG_SIGNER_INFO_V3               3\n#define CMSG_SIGNER_INFO_PKCS_1_5_VERSION CMSG_SIGNER_INFO_V1\n#define CMSG_SIGNER_INFO_CMS_VERSION      CMSG_SIGNER_INFO_V3\n\n#define CMSG_HASHED_DATA_V0               0\n#define CMSG_HASHED_DATA_V2               2\n#define CMSG_HASHED_DATA_PKCS_1_5_VERSION CMSG_HASHED_DATA_V0\n#define CMSG_HASHED_DATA_CMS_VERSION      CMSG_HASHED_DATA_V2\n\n#define CMSG_ENVELOPED_DATA_V0               0\n#define CMSG_ENVELOPED_DATA_V2               2\n#define CMSG_ENVELOPED_DATA_PKCS_1_5_VERSION CMSG_ENVELOPED_DATA_V0\n#define CMSG_ENVELOPED_DATA_CMS_VERSION      CMSG_ENVELOPED_DATA_V2\n\ntypedef struct _CMSG_KEY_TRANS_RECIPIENT_INFO {\n    DWORD                      dwVersion;\n    CERT_ID                    RecipientId;\n    CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;\n    CRYPT_DATA_BLOB            EncryptedKey;\n} CMSG_KEY_TRANS_RECIPIENT_INFO, *PCMSG_KEY_TRANS_RECIPIENT_INFO;\n\ntypedef struct _CMSG_RECIPIENT_ENCRYPTED_KEY_INFO {\n    CERT_ID                     RecipientId;\n    CRYPT_DATA_BLOB             EncryptedKey;\n    PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;\n} CMSG_RECIPIENT_ENCRYPTED_KEY_INFO, *PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO;\n\ntypedef struct _CMSG_KEY_AGREE_RECIPIENT_INFO {\n    DWORD                               dwVersion;\n    DWORD                               dwOriginatorChoice;\n    union {\n        CERT_ID              OriginatorCertId;\n        CERT_PUBLIC_KEY_INFO OriginatorPublicKeyInfo;\n    } DUMMYUNIONNAME;\n    CRYPT_ALGORITHM_IDENTIFIER          UserKeyingMaterial;\n    DWORD                               cRecipientEncryptedKeys;\n    PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO *rgpRecipientEncryptedKeys;\n} CMSG_KEY_AGREE_RECIPIENT_INFO, *PCMSG_KEY_AGREE_RECIPIENT_INFO;\n\n#define CMSG_KEY_AGREE_ORIGINATOR_CERT       1\n#define CMSG_KEY_AGREE_ORIGINATOR_PUBLIC_KEY 2\n\ntypedef struct _CMSG_MAIL_LIST_RECIPIENT_INFO {\n    DWORD                       dwVersion;\n    CRYPT_DATA_BLOB             KeyId;\n    CRYPT_ALGORITHM_IDENTIFIER  KeyEncryptionAlgorithm;\n    CRYPT_DATA_BLOB             EncryptedKey;\n    FILETIME                    Date;\n    PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;\n} CMSG_MAIL_LIST_RECIPIENT_INFO, *PCMSG_MAIL_LIST_RECIPIENT_INFO;\n\ntypedef struct _CMSG_CMS_RECIPIENT_INFO {\n    DWORD dwRecipientChoice;\n    union {\n        PCMSG_KEY_TRANS_RECIPIENT_INFO pKeyTrans;\n        PCMSG_KEY_AGREE_RECIPIENT_INFO pKeyAgree;\n        PCMSG_MAIL_LIST_RECIPIENT_INFO pMailList;\n    } DUMMYUNIONNAME;\n} CMSG_CMS_RECIPIENT_INFO, *PCMSG_CMS_RECIPIENT_INFO;\n\n#define CMSG_ENVELOPED_RECIPIENT_V0     0\n#define CMSG_ENVELOPED_RECIPIENT_V2     2\n#define CMSG_ENVELOPED_RECIPIENT_V3     3\n#define CMSG_ENVELOPED_RECIPIENT_V4     4\n#define CMSG_KEY_TRANS_PKCS_1_5_VERSION CMSG_ENVELOPED_RECIPIENT_V0\n#define CMSG_KEY_TRANS_CMS_VERSION      CMSG_ENVELOPED_RECIPIENT_V2\n#define CMSG_KEY_AGREE_VERSION          CMSG_ENVELOPED_RECIPIENT_V3\n#define CMSG_MAIL_LIST_VERSION          CMSG_ENVELOPED_RECIPIENT_V4\n\ntypedef void * (WINAPI *PFN_CMSG_ALLOC)(size_t cb);\ntypedef void   (WINAPI *PFN_CMSG_FREE)(void *pv);\n\ntypedef struct _CMSG_CONTENT_ENCRYPT_INFO {\n    DWORD                       cbSize;\n    HCRYPTPROV                  hCryptProv;\n    CRYPT_ALGORITHM_IDENTIFIER  ContentEncryptionAlgorithm;\n    void                       *pvEncryptionAuxInfo;\n    DWORD                       cRecipients;\n    PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients;\n    PFN_CMSG_ALLOC              pfnAlloc;\n    PFN_CMSG_FREE               pfnFree;\n    DWORD                       dwEncryptFlags;\n    HCRYPTKEY                   hContentEncryptKey;\n    DWORD                       dwFlags;\n} CMSG_CONTENT_ENCRYPT_INFO, *PCMSG_CONTENT_ENCRYPT_INFO;\n\ntypedef struct _CMSG_KEY_TRANS_ENCRYPT_INFO {\n    DWORD                       cbSize;\n    DWORD                       dwRecipientIndex;\n    CRYPT_ALGORITHM_IDENTIFIER  KeyEncryptionAlgorithm;\n    CRYPT_DATA_BLOB             EncryptedKey;\n    DWORD                       dwFlags;\n} CMSG_KEY_TRANS_ENCRYPT_INFO, *PCMSG_KEY_TRANS_ENCRYPT_INFO;\n\ntypedef struct _CMSG_CTRL_KEY_TRANS_DECRYPT_PARA {\n    DWORD                          cbSize;\n    HCRYPTPROV                     hCryptProv;\n    DWORD                          dwKeySpec;\n    PCMSG_KEY_TRANS_RECIPIENT_INFO pKeyTrans;\n    DWORD                          dwRecipientIndex;\n} CMSG_CTRL_KEY_TRANS_DECRYPT_PARA, *PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA;\n\ntypedef struct _CERT_STRONG_SIGN_SERIALIZED_INFO {\n    DWORD    dwFlags;\n    WCHAR    *pwszCNGSignHashAlgids;\n    WCHAR    *pwszCNGPubKeyMinBitLengths;\n} CERT_STRONG_SIGN_SERIALIZED_INFO, *PCERT_STRONG_SIGN_SERIALIZED_INFO;\n\ntypedef struct _CERT_STRONG_SIGN_PARA {\n    DWORD    cbSize;\n    DWORD    dwInfoChoice;\n    union {\n        void                               *pvInfo;\n        CERT_STRONG_SIGN_SERIALIZED_INFO   *pSerializedInfo;\n        char                               *pszOID;\n    } DUMMYUNIONNAME;\n} CERT_STRONG_SIGN_PARA, *PCERT_STRONG_SIGN_PARA;\n\n#define CERT_STRONG_SIGN_SERIALIZED_INFO_CHOICE  1\n#define CERT_STRONG_SIGN_OID_INFO_CHOICE         2\n\n#define CERT_STRONG_SIGN_ENABLE_CRL_CHECK       0x1\n#define CERT_STRONG_SIGN_ENABLE_OCSP_CHECK      0x2\n\ntypedef BOOL (WINAPI *PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY)(\n PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo, DWORD dwFlags,\n void *pvReserved);\n\ntypedef BOOL (WINAPI *PFN_CMSG_EXPORT_KEY_TRANS)(\n PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo,\n PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTransEncodeInfo,\n PCMSG_KEY_TRANS_ENCRYPT_INFO pKeyTransEncryptInfo,\n DWORD dwFlags, void *pvReserved);\n\ntypedef BOOL (WINAPI *PFN_CMSG_IMPORT_KEY_TRANS)(\n PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm,\n PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA pKeyTransDecryptPara, DWORD dwFlags,\n void *pvReserved, HCRYPTKEY *phContentEncryptKey);\n\n/* CryptMsgGetAndVerifySigner flags */\n#define CMSG_TRUSTED_SIGNER_FLAG   0x1\n#define CMSG_SIGNER_ONLY_FLAG      0x2\n#define CMSG_USE_SIGNER_INDEX_FLAG 0x4\n\n/* CryptMsgSignCTL flags */\n#define CMSG_CMS_ENCAPSULATED_CTL_FLAG 0x00008000\n\n/* CryptMsgEncodeAndSignCTL flags */\n#define CMSG_ENCODED_SORTED_CTL_FLAG               0x1\n#define CMSG_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG 0x2\n\n/* PFXImportCertStore flags */\n#define CRYPT_USER_KEYSET           0x00001000\n#define PKCS12_IMPORT_RESERVED_MASK 0xffff0000\n/* PFXExportCertStore flags */\n#define REPORT_NO_PRIVATE_KEY                 0x00000001\n#define REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY 0x00000002\n#define EXPORT_PRIVATE_KEYS                   0x00000004\n#define PKCS12_EXPORT_RESERVED_MASK           0xffff0000\n\n#define CRYPT_USERDATA    0x00000001\n\n/* function declarations */\n/* advapi32.dll */\nWINADVAPI BOOL WINAPI CryptAcquireContextA(HCRYPTPROV *, LPCSTR, LPCSTR, DWORD, DWORD);\nWINADVAPI BOOL WINAPI CryptAcquireContextW (HCRYPTPROV *, LPCWSTR, LPCWSTR, DWORD, DWORD);\n#define               CryptAcquireContext WINELIB_NAME_AW(CryptAcquireContext)\nWINADVAPI BOOL WINAPI CryptGenRandom (HCRYPTPROV, DWORD, BYTE *);\nWINADVAPI BOOL WINAPI CryptContextAddRef (HCRYPTPROV, DWORD *, DWORD);\nWINADVAPI BOOL WINAPI CryptCreateHash (HCRYPTPROV, ALG_ID, HCRYPTKEY, DWORD, HCRYPTHASH *);\nWINADVAPI BOOL WINAPI CryptDecrypt (HCRYPTKEY, HCRYPTHASH, BOOL, DWORD, BYTE *, DWORD *);\nWINADVAPI BOOL WINAPI CryptDeriveKey (HCRYPTPROV, ALG_ID, HCRYPTHASH, DWORD, HCRYPTKEY *);\nWINADVAPI BOOL WINAPI CryptDestroyHash (HCRYPTHASH);\nWINADVAPI BOOL WINAPI CryptDestroyKey (HCRYPTKEY);\nWINADVAPI BOOL WINAPI CryptDuplicateKey (HCRYPTKEY, DWORD *, DWORD, HCRYPTKEY *);\nWINADVAPI BOOL WINAPI CryptDuplicateHash (HCRYPTHASH, DWORD *, DWORD, HCRYPTHASH *);\nWINADVAPI BOOL WINAPI CryptEncrypt (HCRYPTKEY, HCRYPTHASH, BOOL, DWORD, BYTE *, DWORD *, DWORD);\nWINADVAPI BOOL WINAPI CryptEnumProvidersA (DWORD, DWORD *, DWORD, DWORD *, LPSTR, DWORD *);\nWINADVAPI BOOL WINAPI CryptEnumProvidersW (DWORD, DWORD *, DWORD, DWORD *, LPWSTR, DWORD *);\n#define               CryptEnumProviders WINELIB_NAME_AW(CryptEnumProviders)\nWINADVAPI BOOL WINAPI CryptEnumProviderTypesA (DWORD, DWORD *, DWORD, DWORD *, LPSTR, DWORD *);\nWINADVAPI BOOL WINAPI CryptEnumProviderTypesW (DWORD, DWORD *, DWORD, DWORD *, LPWSTR, DWORD *);\n#define               CryptEnumProviderTypes WINELIB_NAME_AW(CryptEnumProviderTypes)\nWINADVAPI BOOL WINAPI CryptExportKey (HCRYPTKEY, HCRYPTKEY, DWORD, DWORD, BYTE *, DWORD *);\nWINADVAPI BOOL WINAPI CryptGenKey (HCRYPTPROV, ALG_ID, DWORD, HCRYPTKEY *);\nWINADVAPI BOOL WINAPI CryptGetKeyParam (HCRYPTKEY, DWORD, BYTE *, DWORD *, DWORD);\nWINADVAPI BOOL WINAPI CryptGetHashParam (HCRYPTHASH, DWORD, BYTE *, DWORD *, DWORD);\nWINADVAPI BOOL WINAPI CryptGetProvParam (HCRYPTPROV, DWORD, BYTE *, DWORD *, DWORD);\nWINADVAPI BOOL WINAPI CryptGetDefaultProviderA (DWORD, DWORD *, DWORD, LPSTR, DWORD *);\nWINADVAPI BOOL WINAPI CryptGetDefaultProviderW (DWORD, DWORD *, DWORD, LPWSTR, DWORD *);\n#define               CryptGetDefaultProvider WINELIB_NAME_AW(CryptGetDefaultProvider)\nWINADVAPI BOOL WINAPI CryptGetUserKey (HCRYPTPROV, DWORD, HCRYPTKEY *);\nWINADVAPI BOOL WINAPI CryptHashData (HCRYPTHASH, const BYTE *, DWORD, DWORD);\nWINADVAPI BOOL WINAPI CryptHashSessionKey (HCRYPTHASH, HCRYPTKEY, DWORD);\nWINADVAPI BOOL WINAPI CryptImportKey (HCRYPTPROV, const BYTE *, DWORD, HCRYPTKEY, DWORD, HCRYPTKEY *);\nWINADVAPI BOOL WINAPI CryptReleaseContext (HCRYPTPROV, ULONG_PTR);\nWINADVAPI BOOL WINAPI CryptSetHashParam (HCRYPTHASH, DWORD, const BYTE *, DWORD);\nWINADVAPI BOOL WINAPI CryptSetKeyParam (HCRYPTKEY, DWORD, const BYTE *, DWORD);\nWINADVAPI BOOL WINAPI CryptSetProviderA (LPCSTR, DWORD);\nWINADVAPI BOOL WINAPI CryptSetProviderW (LPCWSTR, DWORD);\n#define               CryptSetProvider WINELIB_NAME_AW(CryptSetProvider)\nWINADVAPI BOOL WINAPI CryptSetProviderExA (LPCSTR, DWORD, DWORD *, DWORD);\nWINADVAPI BOOL WINAPI CryptSetProviderExW (LPCWSTR, DWORD, DWORD *, DWORD);\n#define               CryptSetProviderEx WINELIB_NAME_AW(CryptSetProviderEx)\nWINADVAPI BOOL WINAPI CryptSetProvParam (HCRYPTPROV, DWORD, const BYTE *, DWORD);\nWINADVAPI BOOL WINAPI CryptSignHashA (HCRYPTHASH, DWORD, LPCSTR, DWORD, BYTE *, DWORD *);\nWINADVAPI BOOL WINAPI CryptSignHashW (HCRYPTHASH, DWORD, LPCWSTR, DWORD, BYTE *, DWORD *);\n#define               CryptSignHash WINELIB_NAME_AW(CryptSignHash)\nWINADVAPI BOOL WINAPI CryptVerifySignatureA (HCRYPTHASH, const BYTE *, DWORD, HCRYPTKEY, LPCSTR, DWORD);\nWINADVAPI BOOL WINAPI CryptVerifySignatureW (HCRYPTHASH, const BYTE *, DWORD, HCRYPTKEY, LPCWSTR, DWORD);\n#define               CryptVerifySignature WINELIB_NAME_AW(CryptVerifySignature)\n\n/* crypt32.dll functions */\nLPVOID WINAPI CryptMemAlloc(ULONG cbSize) __WINE_ALLOC_SIZE(1);\nLPVOID WINAPI CryptMemRealloc(LPVOID pv, ULONG cbSize) __WINE_ALLOC_SIZE(2);\nVOID   WINAPI CryptMemFree(LPVOID pv);\n\nBOOL WINAPI CryptBinaryToStringA(const BYTE *pbBinary,\n DWORD cbBinary, DWORD dwFlags, LPSTR pszString, DWORD *pcchString);\nBOOL WINAPI CryptBinaryToStringW(const BYTE *pbBinary,\n DWORD cbBinary, DWORD dwFlags, LPWSTR pszString, DWORD *pcchString);\n#define CryptBinaryToString WINELIB_NAME_AW(CryptBinaryToString)\n\nBOOL WINAPI CryptStringToBinaryA(LPCSTR pszString,\n DWORD cchString, DWORD dwFlags, BYTE *pbBinary, DWORD *pcbBinary,\n DWORD *pdwSkip, DWORD *pdwFlags);\nBOOL WINAPI CryptStringToBinaryW(LPCWSTR pszString,\n DWORD cchString, DWORD dwFlags, BYTE *pbBinary, DWORD *pcbBinary,\n DWORD *pdwSkip, DWORD *pdwFlags);\n#define CryptStringToBinary WINELIB_NAME_AW(CryptStringToBinary)\n\nBOOL WINAPI CryptCreateAsyncHandle(DWORD dwFlags, PHCRYPTASYNC phAsync);\nBOOL WINAPI CryptSetAsyncParam(HCRYPTASYNC hAsync, LPSTR pszParamOid,\n LPVOID pvParam, PFN_CRYPT_ASYNC_PARAM_FREE_FUNC pfnFree);\nBOOL WINAPI CryptGetAsyncParam(HCRYPTASYNC hAsync, LPSTR pszParamOid,\n LPVOID *ppvParam, PFN_CRYPT_ASYNC_PARAM_FREE_FUNC *ppfnFree);\nBOOL WINAPI CryptCloseAsyncHandle(HCRYPTASYNC hAsync);\n\nBOOL WINAPI CryptRegisterDefaultOIDFunction(DWORD,LPCSTR,DWORD,LPCWSTR);\nBOOL WINAPI CryptRegisterOIDFunction(DWORD,LPCSTR,LPCSTR,LPCWSTR,LPCSTR);\nBOOL WINAPI CryptGetOIDFunctionValue(DWORD dwEncodingType, LPCSTR pszFuncName,\n                                     LPCSTR pszOID, LPCWSTR szValueName, DWORD *pdwValueType,\n                                     BYTE *pbValueData, DWORD *pcbValueData);\nBOOL WINAPI CryptSetOIDFunctionValue(DWORD dwEncodingType, LPCSTR pszFuncName,\n                                     LPCSTR pszOID, LPCWSTR pwszValueName, DWORD dwValueType,\n                                     const BYTE *pbValueData, DWORD cbValueData);\nBOOL WINAPI CryptUnregisterDefaultOIDFunction(DWORD,LPCSTR,LPCWSTR);\nBOOL WINAPI CryptUnregisterOIDFunction(DWORD,LPCSTR,LPCSTR);\nBOOL WINAPI CryptEnumOIDFunction(DWORD dwEncodingType, LPCSTR pszFuncName,\n LPCSTR pszOID, DWORD dwFlags, void *pvArg,\n PFN_CRYPT_ENUM_OID_FUNC pfnEnumOIDFunc);\nHCRYPTOIDFUNCSET WINAPI CryptInitOIDFunctionSet(LPCSTR,DWORD);\nBOOL WINAPI CryptGetDefaultOIDDllList(HCRYPTOIDFUNCSET hFuncSet,\n DWORD dwEncodingType, LPWSTR pwszDllList, DWORD *pcchDllList);\nBOOL WINAPI CryptGetDefaultOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet,\n DWORD dwEncodingType, LPCWSTR pwszDll, DWORD dwFlags, void **ppvFuncAddr,\n HCRYPTOIDFUNCADDR *phFuncAddr);\nBOOL WINAPI CryptGetOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet,\n DWORD dwEncodingType, LPCSTR pszOID, DWORD dwFlags, void **ppvFuncAddr,\n HCRYPTOIDFUNCADDR *phFuncAddr);\nBOOL WINAPI CryptFreeOIDFunctionAddress(HCRYPTOIDFUNCADDR hFuncAddr,\n DWORD dwFlags);\nBOOL WINAPI CryptInstallOIDFunctionAddress(HMODULE hModule,\n DWORD dwEncodingType, LPCSTR pszFuncName, DWORD cFuncEntry,\n const CRYPT_OID_FUNC_ENTRY rgFuncEntry[], DWORD dwFlags);\nBOOL WINAPI CryptInstallDefaultContext(HCRYPTPROV hCryptProv,\n DWORD dwDefaultType, const void *pvDefaultPara, DWORD dwFlags,\n void *pvReserved, HCRYPTDEFAULTCONTEXT *phDefaultContext);\nBOOL WINAPI CryptUninstallDefaultContext(HCRYPTDEFAULTCONTEXT hDefaultContext,\n DWORD dwFlags, void *pvReserved);\n\nBOOL WINAPI CryptEnumOIDInfo(DWORD dwGroupId, DWORD dwFlags, void *pvArg,\n PFN_CRYPT_ENUM_OID_INFO pfnEnumOIDInfo);\nPCCRYPT_OID_INFO WINAPI CryptFindOIDInfo(DWORD dwKeyType, void *pvKey,\n DWORD dwGroupId);\nBOOL WINAPI CryptRegisterOIDInfo(PCCRYPT_OID_INFO pInfo, DWORD dwFlags);\nBOOL WINAPI CryptUnregisterOIDInfo(PCCRYPT_OID_INFO pInfo);\n\nLPCWSTR WINAPI CryptFindLocalizedName(LPCWSTR pwszCryptName);\n\nLPCSTR WINAPI CertAlgIdToOID(DWORD dwAlgId);\nDWORD WINAPI CertOIDToAlgId(LPCSTR pszObjId);\n\n/* cert store functions */\nHCERTSTORE WINAPI CertOpenStore(LPCSTR lpszStoreProvider, DWORD dwEncodingType,\n HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const void *pvPara);\n\nHCERTSTORE WINAPI CertOpenSystemStoreA(HCRYPTPROV_LEGACY hProv,\n LPCSTR szSubSystemProtocol);\nHCERTSTORE WINAPI CertOpenSystemStoreW(HCRYPTPROV_LEGACY hProv,\n LPCWSTR szSubSystemProtocol);\n#define CertOpenSystemStore WINELIB_NAME_AW(CertOpenSystemStore)\n\nPCCERT_CONTEXT WINAPI CertEnumCertificatesInStore(HCERTSTORE hCertStore,\n PCCERT_CONTEXT pPrev);\n\nPCCRL_CONTEXT WINAPI CertEnumCRLsInStore(HCERTSTORE hCertStore,\n PCCRL_CONTEXT pPrev);\n\nPCCTL_CONTEXT WINAPI CertEnumCTLsInStore(HCERTSTORE hCertStore,\n PCCTL_CONTEXT pPrev);\n\nBOOL WINAPI CertEnumSystemStoreLocation(DWORD dwFlags, void *pvArg,\n PFN_CERT_ENUM_SYSTEM_STORE_LOCATION pfnEnum);\n\nBOOL WINAPI CertEnumSystemStore(DWORD dwFlags, void *pvSystemStoreLocationPara,\n void *pvArg, PFN_CERT_ENUM_SYSTEM_STORE pfnEnum);\n\nBOOL WINAPI CertRegisterSystemStore(const void *store, DWORD flags,\n CERT_SYSTEM_STORE_INFO *info, void *reserved);\n\nBOOL WINAPI CertUnregisterSystemStore(const void *store, DWORD flags);\n\nBOOL WINAPI CertEnumPhysicalStore(const void *pvSystemStore, DWORD dwFlags,\n void *pvArg, PFN_CERT_ENUM_PHYSICAL_STORE pfnEnum);\n\nBOOL WINAPI CertRegisterPhysicalStore(const void *pvSystemStore, DWORD dwFlags,\n LPCWSTR pwszStoreName, PCERT_PHYSICAL_STORE_INFO pStoreInfo, void *pvReserved);\n\nBOOL WINAPI CertUnregisterPhysicalStore(const void *pvSystemStore, DWORD dwFlags,\n LPCWSTR pwszStoreName);\n\nBOOL WINAPI CertSaveStore(HCERTSTORE hCertStore, DWORD dwMsgAndCertEncodingType,\n             DWORD dwSaveAs, DWORD dwSaveTo, void* pvSaveToPara, DWORD dwFlags);\n\nBOOL WINAPI CertAddStoreToCollection(HCERTSTORE hCollectionStore,\n HCERTSTORE hSiblingStore, DWORD dwUpdateFlags, DWORD dwPriority);\n\nvoid WINAPI CertRemoveStoreFromCollection(HCERTSTORE hCollectionStore,\n HCERTSTORE hSiblingStore);\n\nBOOL WINAPI CertCreateCertificateChainEngine(PCERT_CHAIN_ENGINE_CONFIG pConfig,\n HCERTCHAINENGINE *phChainEngine);\n\nBOOL WINAPI CertResyncCertificateChainEngine(HCERTCHAINENGINE hChainEngine);\n\nVOID WINAPI CertFreeCertificateChainEngine(HCERTCHAINENGINE hChainEngine);\n\nBOOL WINAPI CertGetCertificateChain(HCERTCHAINENGINE hChainEngine,\n PCCERT_CONTEXT pCertContext, LPFILETIME pTime, HCERTSTORE hAdditionalStore,\n PCERT_CHAIN_PARA pChainPara, DWORD dwFlags, LPVOID pvReserved,\n PCCERT_CHAIN_CONTEXT *ppChainContext);\n\nPCCERT_CHAIN_CONTEXT WINAPI CertDuplicateCertificateChain(\n PCCERT_CHAIN_CONTEXT pChainContext);\n\nVOID WINAPI CertFreeCertificateChain(PCCERT_CHAIN_CONTEXT pChainContext);\n\nPCCERT_CHAIN_CONTEXT WINAPI CertFindChainInStore(HCERTSTORE hCertStore,\n DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType,\n const void *pvFindPara, PCCERT_CHAIN_CONTEXT pPrevChainContext);\n\nBOOL WINAPI CertVerifyCertificateChainPolicy(LPCSTR szPolicyOID,\n PCCERT_CHAIN_CONTEXT pChainContext, PCERT_CHAIN_POLICY_PARA pPolicyPara,\n PCERT_CHAIN_POLICY_STATUS pPolicyStatus);\n\nDWORD WINAPI CertEnumCertificateContextProperties(PCCERT_CONTEXT pCertContext,\n DWORD dwPropId);\n\nBOOL WINAPI CertGetCertificateContextProperty(PCCERT_CONTEXT pCertContext,\n DWORD dwPropId, void *pvData, DWORD *pcbData);\n\nBOOL WINAPI CertSetCertificateContextProperty(PCCERT_CONTEXT pCertContext,\n DWORD dwPropId, DWORD dwFlags, const void *pvData);\n\nDWORD WINAPI CertEnumCRLContextProperties(PCCRL_CONTEXT pCRLContext,\n DWORD dwPropId);\n\nBOOL WINAPI CertGetCRLContextProperty(PCCRL_CONTEXT pCRLContext,\n DWORD dwPropId, void *pvData, DWORD *pcbData);\n\nBOOL WINAPI CertSetCRLContextProperty(PCCRL_CONTEXT pCRLContext,\n DWORD dwPropId, DWORD dwFlags, const void *pvData);\n\nDWORD WINAPI CertEnumCTLContextProperties(PCCTL_CONTEXT pCTLContext,\n DWORD dwPropId);\n\nBOOL WINAPI CertEnumSubjectInSortedCTL(PCCTL_CONTEXT pCTLContext,\n void **ppvNextSubject, PCRYPT_DER_BLOB pSubjectIdentifier,\n PCRYPT_DER_BLOB pEncodedAttributes);\n\nBOOL WINAPI CertGetCTLContextProperty(PCCTL_CONTEXT pCTLContext,\n DWORD dwPropId, void *pvData, DWORD *pcbData);\n\nBOOL WINAPI CertSetCTLContextProperty(PCCTL_CONTEXT pCTLContext,\n DWORD dwPropId, DWORD dwFlags, const void *pvData);\n\nBOOL WINAPI CertGetStoreProperty(HCERTSTORE hCertStore, DWORD dwPropId,\n void *pvData, DWORD *pcbData);\n\nBOOL WINAPI CertSetStoreProperty(HCERTSTORE hCertStore, DWORD dwPropId,\n DWORD dwFlags, const void *pvData);\n\nBOOL WINAPI CertControlStore(HCERTSTORE hCertStore, DWORD dwFlags,\n DWORD dwCtrlType, void const *pvCtrlPara);\n\nHCERTSTORE WINAPI CertDuplicateStore(HCERTSTORE hCertStore);\n\nBOOL WINAPI CertCloseStore( HCERTSTORE hCertStore, DWORD dwFlags );\n\nBOOL WINAPI CertFreeCertificateContext( PCCERT_CONTEXT pCertContext );\n\nBOOL WINAPI CertFreeCRLContext( PCCRL_CONTEXT pCrlContext );\n\nBOOL WINAPI CertFreeCTLContext( PCCTL_CONTEXT pCtlContext );\n\nBOOL WINAPI CertAddCertificateContextToStore(HCERTSTORE hCertStore,\n PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition,\n PCCERT_CONTEXT *ppStoreContext);\n\nBOOL WINAPI CertAddCRLContextToStore( HCERTSTORE hCertStore,\n PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition,\n PCCRL_CONTEXT *ppStoreContext );\n\nBOOL WINAPI CertAddCTLContextToStore( HCERTSTORE hCertStore,\n PCCTL_CONTEXT pCtlContext, DWORD dwAddDisposition,\n PCCTL_CONTEXT *ppStoreContext );\n\nBOOL WINAPI CertAddCertificateLinkToStore(HCERTSTORE hCertStore,\n PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition,\n PCCERT_CONTEXT *ppStoreContext);\n\nBOOL WINAPI CertAddCRLLinkToStore(HCERTSTORE hCertStore,\n PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition,\n PCCRL_CONTEXT *ppStoreContext);\n\nBOOL WINAPI CertAddCTLLinkToStore(HCERTSTORE hCertStore,\n PCCTL_CONTEXT pCtlContext, DWORD dwAddDisposition,\n PCCTL_CONTEXT *ppStoreContext);\n\nBOOL WINAPI CertAddEncodedCertificateToStore(HCERTSTORE hCertStore,\n DWORD dwCertEncodingType, const BYTE *pbCertEncoded, DWORD cbCertEncoded,\n DWORD dwAddDisposition, PCCERT_CONTEXT *ppCertContext);\n\nBOOL WINAPI CertAddEncodedCertificateToSystemStoreA(LPCSTR pszCertStoreName,\n const BYTE *pbCertEncoded, DWORD cbCertEncoded);\nBOOL WINAPI CertAddEncodedCertificateToSystemStoreW(LPCWSTR pszCertStoreName,\n const BYTE *pbCertEncoded, DWORD cbCertEncoded);\n#define CertAddEncodedCertificateToSystemStore \\\n WINELIB_NAME_AW(CertAddEncodedCertificateToSystemStore)\n\nBOOL WINAPI CertAddEncodedCRLToStore(HCERTSTORE hCertStore,\n DWORD dwCertEncodingType, const BYTE *pbCrlEncoded, DWORD cbCrlEncoded,\n DWORD dwAddDisposition, PCCRL_CONTEXT *ppCrlContext);\n\nBOOL WINAPI CertAddEncodedCTLToStore(HCERTSTORE hCertStore,\n DWORD dwMsgAndCertEncodingType, const BYTE *pbCtlEncoded, DWORD cbCtlEncoded,\n DWORD dwAddDisposition, PCCTL_CONTEXT *ppCtlContext);\n\nBOOL WINAPI CertAddSerializedElementToStore(HCERTSTORE hCertStore,\n const BYTE *pbElement, DWORD cbElement, DWORD dwAddDisposition, DWORD dwFlags,\n DWORD dwContextTypeFlags, DWORD *pdwContentType, const void **ppvContext);\n\nBOOL WINAPI CertCompareCertificate(DWORD dwCertEncodingType,\n PCERT_INFO pCertId1, PCERT_INFO pCertId2);\nBOOL WINAPI CertCompareCertificateName(DWORD dwCertEncodingType,\n PCERT_NAME_BLOB pCertName1, PCERT_NAME_BLOB pCertName2);\nBOOL WINAPI CertCompareIntegerBlob(PCRYPT_INTEGER_BLOB pInt1,\n PCRYPT_INTEGER_BLOB pInt2);\nBOOL WINAPI CertComparePublicKeyInfo(DWORD dwCertEncodingType,\n PCERT_PUBLIC_KEY_INFO pPublicKey1, PCERT_PUBLIC_KEY_INFO pPublicKey2);\nDWORD WINAPI CertGetPublicKeyLength(DWORD dwCertEncodingType,\n PCERT_PUBLIC_KEY_INFO pPublicKey);\n\nconst void * WINAPI CertCreateContext(DWORD dwContextType, DWORD dwEncodingType,\n const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags,\n PCERT_CREATE_CONTEXT_PARA pCreatePara);\n\nPCCERT_CONTEXT WINAPI CertCreateCertificateContext(DWORD dwCertEncodingType,\n const BYTE *pbCertEncoded, DWORD cbCertEncoded);\n\nPCCRL_CONTEXT WINAPI CertCreateCRLContext( DWORD dwCertEncodingType,\n  const BYTE* pbCrlEncoded, DWORD cbCrlEncoded);\n\nPCCTL_CONTEXT WINAPI CertCreateCTLContext(DWORD dwMsgAndCertEncodingType,\n const BYTE *pbCtlEncoded, DWORD cbCtlEncoded);\n\nPCCERT_CONTEXT WINAPI CertCreateSelfSignCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hProv,\n PCERT_NAME_BLOB pSubjectIssuerBlob, DWORD dwFlags,\n PCRYPT_KEY_PROV_INFO pKeyProvInfo,\n PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, PSYSTEMTIME pStartTime,\n PSYSTEMTIME pEndTime, PCERT_EXTENSIONS pExtensions);\n\nBOOL WINAPI CertDeleteCertificateFromStore(PCCERT_CONTEXT pCertContext);\n\nBOOL WINAPI CertDeleteCRLFromStore(PCCRL_CONTEXT pCrlContext);\n\nBOOL WINAPI CertDeleteCTLFromStore(PCCTL_CONTEXT pCtlContext);\n\nPCCERT_CONTEXT WINAPI CertDuplicateCertificateContext(\n PCCERT_CONTEXT pCertContext);\n\nPCCRL_CONTEXT WINAPI CertDuplicateCRLContext(PCCRL_CONTEXT pCrlContext);\n\nPCCTL_CONTEXT WINAPI CertDuplicateCTLContext(PCCTL_CONTEXT pCtlContext);\n\nPCCERT_CONTEXT WINAPI CertFindCertificateInStore( HCERTSTORE hCertStore,\n DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType,\n const void *pvFindPara, PCCERT_CONTEXT pPrevCertContext );\n\nPCCRL_CONTEXT WINAPI CertFindCRLInStore(HCERTSTORE hCertStore,\n DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType,\n const void *pvFindPara, PCCRL_CONTEXT pPrevCrlContext);\n\nPCCTL_CONTEXT WINAPI CertFindCTLInStore(HCERTSTORE hCertStore,\n DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType,\n const void *pvFindPara, PCCTL_CONTEXT pPrevCtlContext);\n\nPCCERT_CONTEXT WINAPI CertGetIssuerCertificateFromStore(HCERTSTORE hCertStore,\n PCCERT_CONTEXT pSubjectContext, PCCERT_CONTEXT pPrevIssuerContext,\n DWORD *pdwFlags);\n\nPCCERT_CONTEXT WINAPI CertGetSubjectCertificateFromStore(HCERTSTORE hCertStore,\n DWORD dwCertEncodingType, PCERT_INFO pCertId);\n\nPCCRL_CONTEXT WINAPI CertGetCRLFromStore(HCERTSTORE hCertStore,\n PCCERT_CONTEXT pIssuerContext, PCCRL_CONTEXT pPrevCrlContext, DWORD *pdwFlags);\n\nBOOL WINAPI CertSerializeCertificateStoreElement(PCCERT_CONTEXT pCertContext,\n DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement);\n\nBOOL WINAPI CertSerializeCRLStoreElement(PCCRL_CONTEXT pCrlContext,\n DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement);\n\nBOOL WINAPI CertSerializeCTLStoreElement(PCCTL_CONTEXT pCtlContext,\n DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement);\n\nBOOL WINAPI CertGetIntendedKeyUsage(DWORD dwCertEncodingType,\n PCERT_INFO pCertInfo, BYTE *pbKeyUsage, DWORD cbKeyUsage);\n\nBOOL WINAPI CertGetEnhancedKeyUsage(PCCERT_CONTEXT pCertContext, DWORD dwFlags,\n PCERT_ENHKEY_USAGE pUsage, DWORD *pcbUsage);\nBOOL WINAPI CertSetEnhancedKeyUsage(PCCERT_CONTEXT pCertContext,\n PCERT_ENHKEY_USAGE pUsage);\nBOOL WINAPI CertAddEnhancedKeyUsageIdentifier(PCCERT_CONTEXT pCertContext,\n LPCSTR pszUsageIdentifier);\nBOOL WINAPI CertRemoveEnhancedKeyUsageIdentifier(PCCERT_CONTEXT pCertContext,\n LPCSTR pszUsageIdentifier);\nBOOL WINAPI CertGetValidUsages(DWORD cCerts, PCCERT_CONTEXT *rghCerts,\n int *cNumOIDs, LPSTR *rghOIDs, DWORD *pcbOIDs);\n\nBOOL WINAPI CryptEncodeObject(DWORD dwCertEncodingType, LPCSTR lpszStructType,\n const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded);\nBOOL WINAPI CryptEncodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType,\n const void *pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara,\n void *pvEncoded, DWORD *pcbEncoded);\n\nBOOL WINAPI CryptDecodeObject(DWORD dwCertEncodingType, LPCSTR lpszStructType,\n const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo,\n DWORD *pcbStructInfo);\nBOOL WINAPI CryptDecodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType,\n const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags,\n PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo);\n\nBOOL WINAPI CryptFormatObject(DWORD dwCertEncodingType, DWORD dwFormatType,\n DWORD dwFormatStrType, void *pFormatStruct, LPCSTR lpszStructType,\n const BYTE *pbEncoded, DWORD cbEncoded, void *pbFormat, DWORD *pcbFormat);\n\nBOOL WINAPI CryptHashCertificate(HCRYPTPROV_LEGACY hCryptProv, ALG_ID Algid,\n DWORD dwFlags, const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash,\n DWORD *pcbComputedHash);\n\nBOOL WINAPI CryptHashPublicKeyInfo(HCRYPTPROV_LEGACY hCryptProv, ALG_ID Algid,\n DWORD dwFlags, DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo,\n BYTE *pbComputedHash, DWORD *pcbComputedHash);\n\nBOOL WINAPI CryptHashToBeSigned(HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEncodingType,\n const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash,\n DWORD *pcbComputedHash);\n\nBOOL WINAPI CryptQueryObject(DWORD dwObjectType, const void* pvObject,\n DWORD dwExpectedContentTypeFlags, DWORD dwExpectedFormatTypeFlags,\n DWORD dwFlags, DWORD* pdwMsgAndCertEncodingType, DWORD* pdwContentType,\n DWORD* pdwFormatType, HCERTSTORE* phCertStore, HCRYPTMSG* phMsg,\n const void** ppvContext);\n\nBOOL WINAPI CryptSignCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec,\n DWORD dwCertEncodingType, const BYTE *pbEncodedToBeSigned,\n DWORD cbEncodedToBeSigned, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,\n const void *pvHashAuxInfo, BYTE *pbSignature, DWORD *pcbSignature);\n\nBOOL WINAPI CryptSignAndEncodeCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv,\n DWORD dwKeySpec, DWORD dwCertEncodingType, LPCSTR lpszStructType,\n const void *pvStructInfo, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,\n const void *pvHashAuxInfo, BYTE *pbEncoded, DWORD *pcbEncoded);\n\nBOOL WINAPI CryptVerifyCertificateSignature(HCRYPTPROV_LEGACY hCryptProv,\n DWORD dwCertEncodingType, const BYTE *pbEncoded, DWORD cbEncoded,\n PCERT_PUBLIC_KEY_INFO pPublicKey);\n\nBOOL WINAPI CryptVerifyCertificateSignatureEx(HCRYPTPROV_LEGACY hCryptProv,\n DWORD dwCertEncodingType, DWORD dwSubjectType, void *pvSubject,\n DWORD dwIssuerType, void *pvIssuer, DWORD dwFlags, void *pvReserved);\n\nPCRYPT_ATTRIBUTE WINAPI CertFindAttribute(LPCSTR pszObjId, DWORD cAttr,\n CRYPT_ATTRIBUTE rgAttr[]);\nPCERT_EXTENSION WINAPI CertFindExtension(LPCSTR pszObjId, DWORD cExtensions,\n CERT_EXTENSION rgExtensions[]);\nPCERT_RDN_ATTR WINAPI CertFindRDNAttr(LPCSTR pszObjId, PCERT_NAME_INFO pName);\n\nBOOL WINAPI CertFindSubjectInSortedCTL(PCRYPT_DATA_BLOB pSubjectIdentifier,\n PCCTL_CONTEXT pCtlContext, DWORD dwFlags, void *pvReserved,\n PCRYPT_DER_BLOB pEncodedAttributes);\n\nBOOL WINAPI CertIsRDNAttrsInCertificateName(DWORD dwCertEncodingType,\n DWORD dwFlags, PCERT_NAME_BLOB pCertName, PCERT_RDN pRDN);\n\nBOOL WINAPI CertIsValidCRLForCertificate(PCCERT_CONTEXT pCert,\n PCCRL_CONTEXT pCrl, DWORD dwFlags, void *pvReserved);\nBOOL WINAPI CertFindCertificateInCRL(PCCERT_CONTEXT pCert,\n PCCRL_CONTEXT pCrlContext, DWORD dwFlags, void *pvReserved,\n PCRL_ENTRY *ppCrlEntry);\nBOOL WINAPI CertVerifyCRLRevocation(DWORD dwCertEncodingType,\n PCERT_INFO pCertId, DWORD cCrlInfo, PCRL_INFO rgpCrlInfo[]);\n\nBOOL WINAPI CertVerifySubjectCertificateContext(PCCERT_CONTEXT pSubject,\n PCCERT_CONTEXT pIssuer, DWORD *pdwFlags);\n\nLONG WINAPI CertVerifyCRLTimeValidity(LPFILETIME pTimeToVerify,\n PCRL_INFO pCrlInfo);\nLONG WINAPI CertVerifyTimeValidity(LPFILETIME pTimeToVerify,\n PCERT_INFO pCertInfo);\nBOOL WINAPI CertVerifyValidityNesting(PCERT_INFO pSubjectInfo,\n PCERT_INFO pIssuerInfo);\n\nBOOL WINAPI CertVerifyCTLUsage(DWORD dwEncodingType, DWORD dwSubjectType,\n void *pvSubject, PCTL_USAGE pSubjectUsage, DWORD dwFlags,\n PCTL_VERIFY_USAGE_PARA pVerifyUsagePara,\n PCTL_VERIFY_USAGE_STATUS pVerifyUsageStatus);\n\nBOOL WINAPI CertVerifyRevocation(DWORD dwEncodingType, DWORD dwRevType,\n DWORD cContext, PVOID rgpvContext[], DWORD dwFlags,\n PCERT_REVOCATION_PARA pRevPara, PCERT_REVOCATION_STATUS pRevStatus);\n\nBOOL WINAPI CryptExportPublicKeyInfo(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec,\n DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo);\nBOOL WINAPI CryptExportPublicKeyInfoEx(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec,\n DWORD dwCertEncodingType, LPSTR pszPublicKeyObjId, DWORD dwFlags,\n void *pvAuxInfo, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo);\nBOOL WINAPI CryptImportPublicKeyInfo(HCRYPTPROV hCryptProv,\n DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, HCRYPTKEY *phKey);\nBOOL WINAPI CryptImportPublicKeyInfoEx(HCRYPTPROV hCryptProv,\n DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, ALG_ID aiKeyAlg,\n DWORD dwFlags, void *pvAuxInfo, HCRYPTKEY *phKey);\n\nBOOL WINAPI CryptAcquireCertificatePrivateKey(PCCERT_CONTEXT pCert,\n DWORD dwFlags, void *pvReserved, HCRYPTPROV_OR_NCRYPT_KEY_HANDLE *phCryptProv, DWORD *pdwKeySpec,\n BOOL *pfCallerFreeProv);\n\nBOOL WINAPI CryptFindCertificateKeyProvInfo(PCCERT_CONTEXT pCert,\n DWORD dwFlags, void *pvReserved);\n\nBOOL WINAPI CryptProtectData( DATA_BLOB* pDataIn, LPCWSTR szDataDescr,\n DATA_BLOB* pOptionalEntropy, PVOID pvReserved,\n CRYPTPROTECT_PROMPTSTRUCT* pPromptStruct, DWORD dwFlags, DATA_BLOB* pDataOut );\n\nBOOL WINAPI CryptUnprotectData( DATA_BLOB* pDataIn, LPWSTR* ppszDataDescr,\n DATA_BLOB* pOptionalEntropy, PVOID pvReserved,\n CRYPTPROTECT_PROMPTSTRUCT* pPromptStruct, DWORD dwFlags, DATA_BLOB* pDataOut );\n\nBOOL WINAPI CryptProtectMemory(void *pData, DWORD cbData, DWORD dwFlags);\nBOOL WINAPI CryptUnprotectMemory(void *pData, DWORD cbData, DWORD dwFlags);\n\nDWORD WINAPI CertGetNameStringA(PCCERT_CONTEXT pCertContext, DWORD dwType,\n DWORD dwFlags, void *pvTypePara, LPSTR pszNameString, DWORD cchNameString);\nDWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT pCertContext, DWORD dwType,\n DWORD dwFlags, void *pvTypePara, LPWSTR pszNameString, DWORD cchNameString);\n#define CertGetNameString WINELIB_NAME_AW(CertGetNameString)\n\nDWORD WINAPI CertRDNValueToStrA(DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue,\n LPSTR psz, DWORD csz);\nDWORD WINAPI CertRDNValueToStrW(DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue,\n LPWSTR psz, DWORD csz);\n#define CertRDNValueToStr WINELIB_NAME_AW(CertRDNValueToStr)\n\nDWORD WINAPI CertNameToStrA(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName,\n DWORD dwStrType, LPSTR psz, DWORD csz);\nDWORD WINAPI CertNameToStrW(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName,\n DWORD dwStrType, LPWSTR psz, DWORD csz);\n#define CertNameToStr WINELIB_NAME_AW(CertNameToStr)\n\nBOOL WINAPI CertStrToNameA(DWORD dwCertEncodingType, LPCSTR pszX500,\n DWORD dwStrType, void *pvReserved, BYTE *pbEncoded, DWORD *pcbEncoded,\n LPCSTR *ppszError);\nBOOL WINAPI CertStrToNameW(DWORD dwCertEncodingType, LPCWSTR pszX500,\n DWORD dwStrType, void *pvReserved, BYTE *pbEncoded, DWORD *pcbEncoded,\n LPCWSTR *ppszError);\n#define CertStrToName WINELIB_NAME_AW(CertStrToName)\n\nDWORD WINAPI CryptMsgCalculateEncodedLength(DWORD dwMsgEncodingType,\n DWORD dwFlags, DWORD dwMsgType, const void *pvMsgEncodeInfo,\n LPSTR pszInnerContentObjID, DWORD cbData);\n\nBOOL WINAPI CryptMsgClose(HCRYPTMSG hCryptMsg);\n\nBOOL WINAPI CryptMsgControl(HCRYPTMSG hCryptMsg, DWORD dwFlags,\n DWORD dwCtrlType, const void *pvCtrlPara);\n\nBOOL WINAPI CryptMsgCountersign(HCRYPTMSG hCryptMsg, DWORD dwIndex,\n DWORD dwCountersigners, PCMSG_SIGNER_ENCODE_INFO rgCountersigners);\n\nBOOL WINAPI CryptMsgCountersignEncoded(DWORD dwEncodingType, PBYTE pbSignerInfo,\n DWORD cbSignerInfo, DWORD cCountersigners,\n PCMSG_SIGNER_ENCODE_INFO rgCountersigners, PBYTE pbCountersignature,\n PDWORD pcbCountersignature);\n\nHCRYPTMSG WINAPI CryptMsgDuplicate(HCRYPTMSG hCryptMsg);\n\nBOOL WINAPI CryptMsgEncodeAndSignCTL(DWORD dwMsgEncodingType,\n PCTL_INFO pCtlInfo, PCMSG_SIGNED_ENCODE_INFO pSignInfo, DWORD dwFlags,\n BYTE *pbEncoded, DWORD *pcbEncoded);\n\nBOOL WINAPI CryptMsgGetAndVerifySigner(HCRYPTMSG hCryptMsg, DWORD cSignerStore,\n HCERTSTORE *rghSignerStore, DWORD dwFlags, PCCERT_CONTEXT *ppSigner,\n DWORD *pdwSignerIndex);\n\nBOOL WINAPI CryptMsgGetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType,\n DWORD dwIndex, void *pvData, DWORD *pcbData);\n\nHCRYPTMSG WINAPI CryptMsgOpenToDecode(DWORD dwMsgEncodingType, DWORD dwFlags,\n DWORD dwMsgType, HCRYPTPROV_LEGACY hCryptProv, PCERT_INFO pRecipientInfo,\n PCMSG_STREAM_INFO pStreamInfo);\n\nHCRYPTMSG WINAPI CryptMsgOpenToEncode(DWORD dwMsgEncodingType, DWORD dwFlags,\n DWORD dwMsgType, const void *pvMsgEncodeInfo, LPSTR pszInnerContentObjID,\n PCMSG_STREAM_INFO pStreamInfo);\n\nBOOL WINAPI CryptMsgSignCTL(DWORD dwMsgEncodingType, BYTE *pbCtlContent,\n DWORD cbCtlContent, PCMSG_SIGNED_ENCODE_INFO pSignInfo, DWORD dwFlags,\n BYTE *pbEncoded, DWORD *pcbEncoded);\n\nBOOL WINAPI CryptMsgUpdate(HCRYPTMSG hCryptMsg, const BYTE *pbData,\n DWORD cbData, BOOL fFinal);\n\nBOOL WINAPI CryptMsgVerifyCountersignatureEncoded(HCRYPTPROV_LEGACY hCryptProv,\n DWORD dwEncodingType, PBYTE pbSignerInfo, DWORD cbSignerInfo,\n PBYTE pbSignerInfoCountersignature, DWORD cbSignerInfoCountersignature,\n PCERT_INFO pciCountersigner);\n\nBOOL WINAPI CryptMsgVerifyCountersignatureEncodedEx(HCRYPTPROV_LEGACY hCryptProv,\n DWORD dwEncodingType, PBYTE pbSignerInfo, DWORD cbSignerInfo,\n PBYTE pbSignerInfoCountersignature, DWORD cbSignerInfoCountersignature,\n DWORD dwSignerType, void *pvSigner, DWORD dwFlags, void *pvReserved);\n\nBOOL WINAPI CryptSignMessage(PCRYPT_SIGN_MESSAGE_PARA pSignPara,\n BOOL fDetachedSignature, DWORD cToBeSigned, const BYTE *rgpbToBeSigned[],\n DWORD rgcbToBeSigned[], BYTE *pbSignedBlob, DWORD *pcbSignedBlob);\nBOOL WINAPI CryptSignMessageWithKey(PCRYPT_KEY_SIGN_MESSAGE_PARA pSignPara,\n const BYTE *pbToBeSigned, DWORD cbToBeSigned, BYTE *pbSignedBlob,\n DWORD *pcbSignedBlob);\n\nBOOL WINAPI CryptVerifyMessageSignature(PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,\n DWORD dwSignerIndex, const BYTE* pbSignedBlob, DWORD cbSignedBlob,\n BYTE* pbDecoded, DWORD* pcbDecoded, PCCERT_CONTEXT* ppSignerCert);\nBOOL WINAPI CryptVerifyMessageSignatureWithKey(\n PCRYPT_KEY_VERIFY_MESSAGE_PARA pVerifyPara,\n PCERT_PUBLIC_KEY_INFO pPublicKeyInfo, const BYTE *pbSignedBlob,\n DWORD cbSignedBlob, BYTE *pbDecoded, DWORD *pcbDecoded);\n\nBOOL WINAPI CryptVerifyDetachedMessageSignature(\n PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex,\n const BYTE *pbDetachedSignBlob, DWORD cbDetachedSignBlob, DWORD cToBeSigned,\n const BYTE *rgpbToBeSigned[], DWORD rgcbToBeSigned[],\n PCCERT_CONTEXT *ppSignerCert);\nLONG WINAPI CryptGetMessageSignerCount(DWORD dwMsgEncodingType,\n const BYTE *pbSignedBlob, DWORD cbSignedBlob);\n\nBOOL WINAPI CryptEncryptMessage(PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara,\n DWORD cRecipientCert, PCCERT_CONTEXT rgpRecipientCert[],\n const BYTE *pbToBeEncrypted, DWORD cbToBeEncrypted, BYTE *pbEncryptedBlob,\n DWORD *pcbEncryptedBlob);\nBOOL WINAPI CryptDecryptMessage(PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,\n const BYTE *pbEncryptedBlob, DWORD cbEncryptedBlob, BYTE *pbDecrypted,\n DWORD *pcbDecrypted, PCCERT_CONTEXT *ppXchgCert);\n\nBOOL WINAPI CryptSignAndEncryptMessage(PCRYPT_SIGN_MESSAGE_PARA pSignPara,\n PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara, DWORD cRecipientCert,\n PCCERT_CONTEXT rgpRecipientCert[], const BYTE *pbToBeSignedAndEncrypted,\n DWORD cbToBeSignedAndEncrypted, BYTE *pbSignedAndEncryptedBlob,\n DWORD *pcbSignedAndEncryptedBlob);\nBOOL WINAPI CryptDecryptAndVerifyMessageSignature(\n PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,\n PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex,\n const BYTE *pbEncryptedBlob, DWORD cbEncryptedBlob, BYTE *pbDecrypted,\n DWORD *pcbDecrypted, PCCERT_CONTEXT *ppXchgCert, PCCERT_CONTEXT *ppSignerCert);\n\nHCERTSTORE WINAPI CryptGetMessageCertificates(DWORD dwMsgAndCertEncodingType,\n HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const BYTE *pbSignedBlob,\n DWORD cbSignedBlob);\n\nBOOL WINAPI CryptDecodeMessage(DWORD dwMsgTypeFlags,\n PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,\n PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex,\n const BYTE *pbEncodedBlob, DWORD cbEncodedBlob, DWORD dwPrevInnerContentType,\n DWORD *pdwMsgType, DWORD *pdwInnerContentType, BYTE *pbDecoded,\n DWORD *pcbDecoded, PCCERT_CONTEXT *ppXchgCert, PCCERT_CONTEXT *ppSignerCert);\n\nBOOL WINAPI CryptHashMessage(PCRYPT_HASH_MESSAGE_PARA pHashPara,\n BOOL fDetachedHash, DWORD cToBeHashed, const BYTE *rgpbToBeHashed[],\n DWORD rgcbToBeHashed[], BYTE *pbHashedBlob, DWORD *pcbHashedBlob,\n BYTE *pbComputedHash, DWORD *pcbComputedHash);\nBOOL WINAPI CryptVerifyMessageHash(PCRYPT_HASH_MESSAGE_PARA pHashPara,\n BYTE *pbHashedBlob, DWORD cbHashedBlob, BYTE *pbToBeHashed,\n DWORD *pcbToBeHashed, BYTE *pbComputedHash, DWORD *pcbComputedHash);\nBOOL WINAPI CryptVerifyDetachedMessageHash(PCRYPT_HASH_MESSAGE_PARA pHashPara,\n BYTE *pbDetachedHashBlob, DWORD cbDetachedHashBlob, DWORD cToBeHashed,\n const BYTE *rgpbToBeHashed[], DWORD rgcbToBeHashed[], BYTE *pbComputedHash,\n DWORD *pcbComputedHash);\n\n/* PFX functions */\nHCERTSTORE WINAPI PFXImportCertStore(CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword,\n DWORD dwFlags);\nBOOL WINAPI PFXIsPFXBlob(CRYPT_DATA_BLOB *pPFX);\nBOOL WINAPI PFXVerifyPassword(CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword,\n DWORD dwFlags);\nBOOL WINAPI PFXExportCertStoreEx(HCERTSTORE hStore, CRYPT_DATA_BLOB *pPFX,\n LPCWSTR szPassword, void *pvReserved, DWORD dwFlags);\nBOOL WINAPI PFXExportCertStore(HCERTSTORE hStore, CRYPT_DATA_BLOB *pPFX,\n LPCWSTR szPassword, DWORD dwFlags);\n\n/* cryptnet.dll functions */\nBOOL WINAPI CryptCancelAsyncRetrieval(HCRYPTASYNC hAsyncRetrieval);\n\nBOOL WINAPI CryptGetObjectUrl(LPCSTR pszUrlOid, LPVOID pvPara, DWORD dwFlags,\n PCRYPT_URL_ARRAY pUrlArray, DWORD *pcbUrlArray, PCRYPT_URL_INFO pUrlInfo,\n DWORD *pcbUrlInfo, LPVOID pvReserved);\n\nBOOL WINAPI CryptGetTimeValidObject(LPCSTR pszTimeValidOid, void *pvPara,\n PCCERT_CONTEXT pIssuer, LPFILETIME pftValidFor, DWORD dwFlags, DWORD dwTimeout,\n void **ppvObject, PCRYPT_CREDENTIALS pCredentials, void *pvReserved);\n\nBOOL WINAPI CryptFlushTimeValidObject(LPCSTR pszFlushTimeValidOid, void *pvPara,\n PCCERT_CONTEXT pIssuer, DWORD dwFlags, void *pvReserved);\n\nBOOL WINAPI CryptInstallCancelRetrieval(PFN_CRYPT_CANCEL_RETRIEVAL pfnCancel,\n const void *pvArg, DWORD dwFlags, void *pvReserved);\n\nBOOL WINAPI CryptUninstallCancelRetrieval(DWORD dwFlags, void *pvReserved);\n\nBOOL WINAPI CryptRetrieveObjectByUrlA(LPCSTR pszURL, LPCSTR pszObjectOid,\n DWORD dwRetrievalFlags, DWORD dwTimeout, LPVOID *ppvObject,\n HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, LPVOID pvVerify,\n PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);\nBOOL WINAPI CryptRetrieveObjectByUrlW(LPCWSTR pszURL, LPCSTR pszObjectOid,\n DWORD dwRetrievalFlags, DWORD dwTimeout, LPVOID *ppvObject,\n HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, LPVOID pvVerify,\n PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);\n#define CryptRetrieveObjectByUrl WINELIB_NAME_AW(CryptRetrieveObjectByUrl)\n\n/* Not found in crypt32.dll but in softpub.dll */\nHRESULT WINAPI FindCertsByIssuer(PCERT_CHAIN pCertChains, DWORD *pcbCertChains,\n DWORD *pcCertChains, BYTE* pbEncodedIssuerName, DWORD cbEncodedIssuerName,\n LPCWSTR pwszPurpose, DWORD dwKeySpec);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/windef.h",
    "content": "/*\n * Basic types definitions\n *\n * Copyright 1996 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _WINDEF_\n#define _WINDEF_\n\n#ifndef WINVER\n#define WINVER 0x0500\n#endif\n\n#ifndef NO_STRICT\n# ifndef STRICT\n#  define STRICT\n# endif /* STRICT */\n#endif /* NO_STRICT */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Calling conventions definitions */\n\n#if (defined(__x86_64__) || defined(__powerpc64__) || defined(__aarch64__)) && !defined(_WIN64)\n#define _WIN64\n#endif\n\n#ifndef _WIN64\n# if defined(__i386__) && !defined(_X86_)\n#  define _X86_\n# endif\n# if defined(_X86_) && !defined(__i386__)\n#  define __i386__\n# endif\n#endif\n\n#ifndef __stdcall\n# ifdef __i386__\n#  ifdef __GNUC__\n#   if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 2)) || defined(__APPLE__)\n#    define __stdcall __attribute__((__stdcall__)) __attribute__((__force_align_arg_pointer__))\n#   else\n#    define __stdcall __attribute__((__stdcall__))\n#   endif\n#  elif defined(_MSC_VER)\n    /* Nothing needs to be done. __stdcall already exists */\n#  else\n#   error You need to define __stdcall for your compiler\n#  endif\n# elif defined(__x86_64__) && defined (__GNUC__)\n#  if (__GNUC__ > 5) || ((__GNUC__ == 5) && (__GNUC_MINOR__ >= 3))\n#   define __stdcall __attribute__((ms_abi)) __attribute__((__force_align_arg_pointer__))\n#  else\n#   define __stdcall __attribute__((ms_abi))\n#  endif\n# elif defined(__arm__) && defined (__GNUC__) && !defined(__SOFTFP__)\n#   define __stdcall __attribute__((pcs(\"aapcs-vfp\")))\n# elif defined(__aarch64__) && defined (__GNUC__)\n#  define __stdcall __attribute__((ms_abi))\n# else  /* __i386__ */\n#  define __stdcall\n# endif  /* __i386__ */\n#endif /* __stdcall */\n\n#ifndef __cdecl\n# if defined(__i386__) && defined(__GNUC__)\n#   if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 2)) || defined(__APPLE__)\n#   define __cdecl __attribute__((__cdecl__)) __attribute__((__force_align_arg_pointer__))\n#  else\n#   define __cdecl __attribute__((__cdecl__))\n#  endif\n# elif defined(__x86_64__) && defined (__GNUC__)\n#  if (__GNUC__ > 5) || ((__GNUC__ == 5) && (__GNUC_MINOR__ >= 3))\n#   define __cdecl __attribute__((ms_abi)) __attribute__((__force_align_arg_pointer__))\n#  else\n#   define __cdecl __attribute__((ms_abi))\n#  endif\n# elif defined(__arm__) && defined (__GNUC__) && !defined(__SOFTFP__)\n#   define __cdecl __attribute__((pcs(\"aapcs-vfp\")))\n# elif defined(__aarch64__) && defined (__GNUC__)\n#  define __cdecl __attribute__((ms_abi))\n# elif !defined(_MSC_VER)\n#  define __cdecl\n# endif\n#endif /* __cdecl */\n\n#ifndef __ms_va_list\n# if (defined(__x86_64__) || defined(__aarch64__)) && defined (__GNUC__)\n#  define __ms_va_list __builtin_ms_va_list\n#  define __ms_va_start(list,arg) __builtin_ms_va_start(list,arg)\n#  define __ms_va_end(list) __builtin_ms_va_end(list)\n#  define __ms_va_copy(dest,src) __builtin_ms_va_copy(dest,src)\n# else\n#  define __ms_va_list va_list\n#  define __ms_va_start(list,arg) va_start(list,arg)\n#  define __ms_va_end(list) va_end(list)\n#  ifdef va_copy\n#   define __ms_va_copy(dest,src) va_copy(dest,src)\n#  else\n#   define __ms_va_copy(dest,src) ((dest) = (src))\n#  endif\n# endif\n#endif\n\n#if defined(__arm__) && defined (__GNUC__) && !defined(__SOFTFP__)\n# define WINAPIV __attribute__((pcs(\"aapcs\")))\n#else\n# define WINAPIV __cdecl\n#endif\n\n#ifdef __WINESRC__\n#define __ONLY_IN_WINELIB(x)\tdo_not_use_this_in_wine\n#else\n#define __ONLY_IN_WINELIB(x)\tx\n#endif\n\n#ifndef pascal\n#define pascal      __ONLY_IN_WINELIB(__stdcall)\n#endif\n#ifndef _pascal\n#define _pascal\t    __ONLY_IN_WINELIB(__stdcall)\n#endif\n#ifndef _stdcall\n#define _stdcall    __ONLY_IN_WINELIB(__stdcall)\n#endif\n#ifndef _fastcall\n#define _fastcall   __ONLY_IN_WINELIB(__stdcall)\n#endif\n#ifndef __fastcall\n#define __fastcall  __ONLY_IN_WINELIB(__stdcall)\n#endif\n#ifndef __export\n#define __export    __ONLY_IN_WINELIB(__stdcall)\n#endif\n#ifndef cdecl\n#define cdecl       __ONLY_IN_WINELIB(__cdecl)\n#endif\n#ifndef _cdecl\n#define _cdecl      __ONLY_IN_WINELIB(__cdecl)\n#endif\n\n#ifndef near\n#define near        __ONLY_IN_WINELIB(/* nothing */)\n#endif\n#ifndef far\n#define far         __ONLY_IN_WINELIB(/* nothing */)\n#endif\n#ifndef _near\n#define _near       __ONLY_IN_WINELIB(/* nothing */)\n#endif\n#ifndef _far\n#define _far        __ONLY_IN_WINELIB(/* nothing */)\n#endif\n#ifndef NEAR\n#define NEAR        __ONLY_IN_WINELIB(/* nothing */)\n#endif\n#ifndef FAR\n#define FAR         __ONLY_IN_WINELIB(/* nothing */)\n#endif\n\n#ifndef _MSC_VER\n# ifndef _declspec\n#  define _declspec(x)    __ONLY_IN_WINELIB(/* nothing */)\n# endif\n# ifndef __declspec\n#  define __declspec(x)   __ONLY_IN_WINELIB(/* nothing */)\n# endif\n#endif\n\n#ifdef _MSC_VER\n# define inline __inline\n#endif\n\n#define CALLBACK    __stdcall\n#define WINAPI      __stdcall\n#define APIPRIVATE  __stdcall\n#define PASCAL      __stdcall\n#define CDECL       __cdecl\n#define _CDECL      __cdecl\n#define APIENTRY    WINAPI\n#define CONST       __ONLY_IN_WINELIB(const)\n\n/* Misc. constants. */\n\n#undef NULL\n#ifdef __cplusplus\n#define NULL  0\n#else\n#define NULL  ((void*)0)\n#endif\n\n#ifdef FALSE\n#undef FALSE\n#endif\n#define FALSE 0\n\n#ifdef TRUE\n#undef TRUE\n#endif\n#define TRUE  1\n\n#ifndef IN\n#define IN\n#endif\n\n#ifndef OUT\n#define OUT\n#endif\n\n#ifndef OPTIONAL\n#define OPTIONAL\n#endif\n\n/* Standard data types */\n\ntypedef void                                   *LPVOID;\ntypedef const void                             *LPCVOID;\ntypedef int             BOOL,       *PBOOL,    *LPBOOL;\ntypedef unsigned char   BYTE,       *PBYTE,    *LPBYTE;\ntypedef unsigned char   UCHAR,      *PUCHAR;\ntypedef unsigned short  WORD,       *PWORD,    *LPWORD;\ntypedef unsigned short  USHORT,     *PUSHORT;\ntypedef int             INT,        *PINT,     *LPINT;\ntypedef unsigned int    UINT,       *PUINT;\ntypedef float           FLOAT,      *PFLOAT;\ntypedef char                        *PSZ;\n#ifdef _MSC_VER\ntypedef long                                   *LPLONG;\ntypedef unsigned long   DWORD,      *PDWORD,   *LPDWORD;\ntypedef unsigned long   ULONG,      *PULONG;\n#else\ntypedef int                                    *LPLONG;\ntypedef unsigned int    DWORD,      *PDWORD,   *LPDWORD;\ntypedef unsigned int    ULONG,      *PULONG;\n#endif\n\n/* Macros to map Winelib names to the correct implementation name */\n/* Note that Winelib is purely Win32.                             */\n\n#ifdef __WINESRC__\n#define WINE_NO_UNICODE_MACROS 1\n#define WINE_STRICT_PROTOTYPES 1\n#endif\n\n#ifdef WINE_NO_UNICODE_MACROS\n# define WINELIB_NAME_AW(func) \\\n    func##_must_be_suffixed_with_W_or_A_in_this_context \\\n    func##_must_be_suffixed_with_W_or_A_in_this_context\n#else  /* WINE_NO_UNICODE_MACROS */\n# ifdef UNICODE\n#  define WINELIB_NAME_AW(func) func##W\n# else\n#  define WINELIB_NAME_AW(func) func##A\n# endif\n#endif  /* WINE_NO_UNICODE_MACROS */\n\n#ifdef WINE_NO_UNICODE_MACROS\n# define DECL_WINELIB_TYPE_AW(type)  /* nothing */\n#else\n# define DECL_WINELIB_TYPE_AW(type)  typedef WINELIB_NAME_AW(type) type;\n#endif\n\n#include <winnt.h>\n\n/* Polymorphic types */\n\ntypedef UINT_PTR        WPARAM;\ntypedef LONG_PTR        LPARAM;\ntypedef LONG_PTR        LRESULT;\n\n/* Integer types */\n\ntypedef WORD            ATOM;\ntypedef DWORD           COLORREF, *LPCOLORREF;\n\n\n/* Handle types */\n\ntypedef int HFILE;\nDECLARE_HANDLE(DPI_AWARENESS_CONTEXT);\nDECLARE_HANDLE(HACCEL);\nDECLARE_HANDLE(HBITMAP);\nDECLARE_HANDLE(HBRUSH);\nDECLARE_HANDLE(HCOLORSPACE);\nDECLARE_HANDLE(HDC);\nDECLARE_HANDLE(HDESK);\nDECLARE_HANDLE(HENHMETAFILE);\nDECLARE_HANDLE(HFONT);\nDECLARE_HANDLE(HGLRC);\nDECLARE_HANDLE(HHOOK);\nDECLARE_HANDLE(HICON);\nDECLARE_HANDLE(HINSTANCE);\nDECLARE_HANDLE(HKEY);\ntypedef HKEY *PHKEY;\nDECLARE_HANDLE(HKL);\nDECLARE_HANDLE(HMENU);\nDECLARE_HANDLE(HMETAFILE);\nDECLARE_HANDLE(HMONITOR);\nDECLARE_HANDLE(HPALETTE);\nDECLARE_HANDLE(HPEN);\nDECLARE_HANDLE(HRGN);\nDECLARE_HANDLE(HRSRC);\nDECLARE_HANDLE(HTASK);\nDECLARE_HANDLE(HWINEVENTHOOK);\nDECLARE_HANDLE(HWINSTA);\nDECLARE_HANDLE(HWND);\n\n/* Handle types that must remain interchangeable even with strict on */\n\ntypedef HINSTANCE HMODULE;\ntypedef HANDLE HGDIOBJ;\ntypedef HANDLE HGLOBAL;\ntypedef HANDLE HLOCAL;\ntypedef HANDLE GLOBALHANDLE;\ntypedef HANDLE LOCALHANDLE;\ntypedef HICON HCURSOR;\n\n/* Callback function pointers types */\n\n#ifdef WINE_STRICT_PROTOTYPES\ntypedef INT_PTR (CALLBACK *FARPROC)(void);\ntypedef INT_PTR (CALLBACK *NEARPROC)(void);\ntypedef INT_PTR (CALLBACK *PROC)(void);\n#else\ntypedef INT_PTR (CALLBACK *FARPROC)();\ntypedef INT_PTR (CALLBACK *NEARPROC)();\ntypedef INT_PTR (CALLBACK *PROC)();\n#endif\n\n/* Macros to split words and longs. */\n\n#define LOBYTE(w)              ((BYTE)((DWORD_PTR)(w) & 0xFF))\n#define HIBYTE(w)              ((BYTE)((DWORD_PTR)(w) >> 8))\n\n#define LOWORD(l)              ((WORD)((DWORD_PTR)(l) & 0xFFFF))\n#define HIWORD(l)              ((WORD)((DWORD_PTR)(l) >> 16))\n\n#define MAKEWORD(low,high)     ((WORD)(((BYTE)((DWORD_PTR)(low) & 0xFF)) | ((WORD)((BYTE)((DWORD_PTR)(high) & 0xFF))) << 8))\n#define MAKELONG(low,high)     ((LONG)(((WORD)((DWORD_PTR)(low) & 0xFFFF)) | ((DWORD)((WORD)((DWORD_PTR)(high) & 0xFFFF))) << 16))\n\n/* min and max macros */\n#ifndef NOMINMAX\n#ifndef max\n#define max(a,b)   (((a) > (b)) ? (a) : (b))\n#endif\n#ifndef min\n#define min(a,b)   (((a) < (b)) ? (a) : (b))\n#endif\n#endif  /* NOMINMAX */\n\n#ifdef MAX_PATH /* Work-around for Mingw */ \n#undef MAX_PATH\n#endif /* MAX_PATH */\n\n#define MAX_PATH        260\n#define HFILE_ERROR     ((HFILE)-1)\n\n/* The SIZE structure */\ntypedef struct tagSIZE\n{\n    LONG cx;\n    LONG cy;\n} SIZE, *PSIZE, *LPSIZE;\n\ntypedef SIZE SIZEL, *PSIZEL, *LPSIZEL;\n\n/* The POINT structure */\ntypedef struct tagPOINT\n{\n    LONG  x;\n    LONG  y;\n} POINT, *PPOINT, *LPPOINT;\n\ntypedef struct _POINTL\n{\n    LONG x;\n    LONG y;\n} POINTL, *PPOINTL;\n\n/* The POINTS structure */\n\ntypedef struct tagPOINTS\n{\n#ifdef WORDS_BIGENDIAN\n    SHORT y;\n    SHORT x;\n#else\n    SHORT x;\n    SHORT y;\n#endif\n} POINTS, *PPOINTS, *LPPOINTS;\n\ntypedef struct _FILETIME {\n#ifdef WORDS_BIGENDIAN\n    DWORD  dwHighDateTime;\n    DWORD  dwLowDateTime;\n#else\n    DWORD  dwLowDateTime;\n    DWORD  dwHighDateTime;\n#endif\n} FILETIME, *PFILETIME, *LPFILETIME;\n#define _FILETIME_\n\n/* The RECT structure */\ntypedef struct tagRECT\n{\n    LONG left;\n    LONG top;\n    LONG right;\n    LONG bottom;\n} RECT, *PRECT, *LPRECT;\ntypedef const RECT *LPCRECT;\n\ntypedef struct _RECTL\n{\n    LONG left;\n    LONG top;\n    LONG right;\n    LONG bottom;\n} RECTL, *PRECTL, *LPRECTL;\n\ntypedef const RECTL *LPCRECTL;\n\n/* DPI awareness */\ntypedef enum DPI_AWARENESS\n{\n    DPI_AWARENESS_INVALID = -1,\n    DPI_AWARENESS_UNAWARE = 0,\n    DPI_AWARENESS_SYSTEM_AWARE,\n    DPI_AWARENESS_PER_MONITOR_AWARE\n} DPI_AWARENESS;\n\n#define DPI_AWARENESS_CONTEXT_UNAWARE              ((DPI_AWARENESS_CONTEXT)-1)\n#define DPI_AWARENESS_CONTEXT_SYSTEM_AWARE         ((DPI_AWARENESS_CONTEXT)-2)\n#define DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE    ((DPI_AWARENESS_CONTEXT)-3)\n#define DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 ((DPI_AWARENESS_CONTEXT)-4)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _WINDEF_ */\n"
  },
  {
    "path": "wine/windows/windns.h",
    "content": "/*\n * DNS support\n *\n * Copyright (C) 2006 Matthew Kehrer\n * \n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINDNS_H\n#define __WINE_WINDNS_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define DNS_TYPE_ZERO       0x0000\n#define DNS_TYPE_A          0x0001\n#define DNS_TYPE_NS         0x0002\n#define DNS_TYPE_MD         0x0003\n#define DNS_TYPE_MF         0x0004\n#define DNS_TYPE_CNAME      0x0005\n#define DNS_TYPE_SOA        0x0006\n#define DNS_TYPE_MB         0x0007\n#define DNS_TYPE_MG         0x0008\n#define DNS_TYPE_MR         0x0009\n#define DNS_TYPE_NULL       0x000a\n#define DNS_TYPE_WKS        0x000b\n#define DNS_TYPE_PTR        0x000c\n#define DNS_TYPE_HINFO      0x000d\n#define DNS_TYPE_MINFO      0x000e\n#define DNS_TYPE_MX         0x000f\n#define DNS_TYPE_TEXT       0x0010\n#define DNS_TYPE_RP         0x0011\n#define DNS_TYPE_AFSDB      0x0012\n#define DNS_TYPE_X25        0x0013\n#define DNS_TYPE_ISDN       0x0014\n#define DNS_TYPE_RT         0x0015\n#define DNS_TYPE_NSAP       0x0016\n#define DNS_TYPE_NSAPPTR    0x0017\n#define DNS_TYPE_SIG        0x0018\n#define DNS_TYPE_KEY        0x0019\n#define DNS_TYPE_PX         0x001a\n#define DNS_TYPE_GPOS       0x001b\n#define DNS_TYPE_AAAA       0x001c\n#define DNS_TYPE_LOC        0x001d\n#define DNS_TYPE_NXT        0x001e\n#define DNS_TYPE_EID        0x001f\n#define DNS_TYPE_NIMLOC     0x0020\n#define DNS_TYPE_SRV        0x0021\n#define DNS_TYPE_ATMA       0x0022\n#define DNS_TYPE_NAPTR      0x0023\n#define DNS_TYPE_KX         0x0024\n#define DNS_TYPE_CERT       0x0025\n#define DNS_TYPE_A6         0x0026\n#define DNS_TYPE_DNAME      0x0027\n#define DNS_TYPE_SINK       0x0028\n#define DNS_TYPE_OPT        0x0029\n#define DNS_TYPE_UINFO      0x0064\n#define DNS_TYPE_UID        0x0065\n#define DNS_TYPE_GID        0x0066\n#define DNS_TYPE_UNSPEC     0x0067\n#define DNS_TYPE_ADDRS      0x00f8\n#define DNS_TYPE_TKEY       0x00f9\n#define DNS_TYPE_TSIG       0x00fa\n#define DNS_TYPE_IXFR       0x00fb\n#define DNS_TYPE_AXFR       0x00fc\n#define DNS_TYPE_MAILB      0x00fd\n#define DNS_TYPE_MAILA      0x00fe\n#define DNS_TYPE_ALL        0x00ff\n#define DNS_TYPE_ANY        0x00ff\n\n#define DNS_TYPE_WINS       0xff01\n#define DNS_TYPE_WINSR      0xff02\n#define DNS_TYPE_NBSTAT     (DNS_TYPE_WINSR)\n\n#define DNS_QUERY_STANDARD                  0x00000000\n#define DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE 0x00000001\n#define DNS_QUERY_USE_TCP_ONLY              0x00000002\n#define DNS_QUERY_NO_RECURSION              0x00000004\n#define DNS_QUERY_BYPASS_CACHE              0x00000008\n#define DNS_QUERY_NO_WIRE_QUERY             0x00000010\n#define DNS_QUERY_NO_LOCAL_NAME             0x00000020\n#define DNS_QUERY_NO_HOSTS_FILE             0x00000040\n#define DNS_QUERY_NO_NETBT                  0x00000080\n#define DNS_QUERY_WIRE_ONLY                 0x00000100\n#define DNS_QUERY_RETURN_MESSAGE            0x00000200\n#define DNS_QUERY_MULTICAST_ONLY            0x00000400\n#define DNS_QUERY_NO_MULTICAST              0x00000800\n#define DNS_QUERY_TREAT_AS_FQDN             0x00001000\n#define DNS_QUERY_ADDRCONFIG                0x00002000\n#define DNS_QUERY_DUAL_ADDR                 0x00004000\n#define DNS_QUERY_DONT_RESET_TTL_VALUES     0x00100000\n#define DNS_QUERY_DISABLE_IDN_ENCODING      0x00200000\n#define DNS_QUERY_APPEND_MULTILABEL         0x00800000\n#define DNS_QUERY_DNSSEC_OK                 0x01000000\n#define DNS_QUERY_DNSSEC_CHECKING_DISABLED  0x02000000\n#define DNS_QUERY_RESERVED                  0xff000000\n\ntypedef enum _DNS_NAME_FORMAT\n{\n    DnsNameDomain,\n    DnsNameDomainLabel,\n    DnsNameHostnameFull,\n    DnsNameHostnameLabel,\n    DnsNameWildcard,\n    DnsNameSrvRecord\n} DNS_NAME_FORMAT;\n\ntypedef enum _DNS_FREE_TYPE\n{\n    DnsFreeFlat,\n    DnsFreeRecordList,\n    DnsFreeParsedMessageFields\n} DNS_FREE_TYPE;\n\ntypedef enum _DNS_CHARSET\n{\n    DnsCharSetUnknown,\n    DnsCharSetUnicode,\n    DnsCharSetUtf8,\n    DnsCharSetAnsi\n} DNS_CHARSET;\n\ntypedef enum _DNS_CONFIG_TYPE\n{\n    DnsConfigPrimaryDomainName_W,\n    DnsConfigPrimaryDomainName_A,\n    DnsConfigPrimaryDomainName_UTF8,\n    DnsConfigAdapterDomainName_W,\n    DnsConfigAdapterDomainName_A,\n    DnsConfigAdapterDomainName_UTF8,\n    DnsConfigDnsServerList,\n    DnsConfigSearchList,\n    DnsConfigAdapterInfo,\n    DnsConfigPrimaryHostNameRegistrationEnabled,\n    DnsConfigAdapterHostNameRegistrationEnabled,\n    DnsConfigAddressRegistrationMaxCount,\n    DnsConfigHostName_W,\n    DnsConfigHostName_A,\n    DnsConfigHostName_UTF8,\n    DnsConfigFullHostName_W,\n    DnsConfigFullHostName_A,\n    DnsConfigFullHostName_UTF8\n} DNS_CONFIG_TYPE;\n\ntypedef enum _DnsSection\n{\n    DnsSectionQuestion,\n    DnsSectionAnswer,\n    DnsSectionAuthority,\n    DnsSectionAddtional /* Not a typo, as per Microsoft's headers */\n} DNS_SECTION;\n\ntypedef LONG DNS_STATUS, *PDNS_STATUS;\ntypedef DWORD IP4_ADDRESS, *PIP4_ADDRESS;\n\ntypedef struct\n{\n    DWORD IP6Dword[4];\n} IP6_ADDRESS, *PIP6_ADDRESS, DNS_IP6_ADDRESS, *PDNS_IP6_ADDRESS;\n\n#define SIZEOF_IP4_ADDRESS                   4\n#define IP4_ADDRESS_STRING_LENGTH           16\n#define IP6_ADDRESS_STRING_LENGTH           65\n#define DNS_ADDRESS_STRING_LENGTH           IP6_ADDRESS_STRING_LENGTH\n#define IP4_ADDRESS_STRING_BUFFER_LENGTH    IP4_ADDRESS_STRING_LENGTH\n#define IP6_ADDRESS_STRING_BUFFER_LENGTH    IP6_ADDRESS_STRING_LENGTH\n\ntypedef struct _IP4_ARRAY\n{\n    DWORD AddrCount;\n    IP4_ADDRESS AddrArray[1];\n} IP4_ARRAY, *PIP4_ARRAY;\n\n#include <pshpack1.h>\ntypedef struct _DNS_HEADER\n{\n    WORD Xid;\n    BYTE RecursionDesired:1;\n    BYTE Truncation:1;\n    BYTE Authoritative:1;\n    BYTE Opcode:4;\n    BYTE IsResponse:1;\n    BYTE ResponseCode:4;\n    BYTE CheckingDisabled:1;\n    BYTE AuthenticatedData:1;\n    BYTE Reserved:1;\n    BYTE RecursionAvailable:1;\n    WORD QuestionCount;\n    WORD AnswerCount;\n    WORD NameServerCount;\n    WORD AdditionalCount;\n} DNS_HEADER, *PDNS_HEADER;\n#include <poppack.h>\n\ntypedef struct _DNS_MESSAGE_BUFFER\n{\n    DNS_HEADER MessageHead;\n    CHAR MessageBody[1];\n} DNS_MESSAGE_BUFFER, *PDNS_MESSAGE_BUFFER;\n\ntypedef struct\n{\n    IP4_ADDRESS IpAddress;\n} DNS_A_DATA, *PDNS_A_DATA;\n\ntypedef struct _DnsRecordFlags\n{\n    DWORD Section :2;\n    DWORD Delete :1;\n    DWORD CharSet :2;\n    DWORD Unused :3;\n    DWORD Reserved :24;\n} DNS_RECORD_FLAGS;\n\ntypedef struct\n{\n    PSTR  pNamePrimaryServer;\n    PSTR  pNameAdministrator;\n    DWORD dwSerialNo;\n    DWORD dwRefresh;\n    DWORD dwRetry;\n    DWORD dwExpire;\n    DWORD dwDefaultTtl;\n} DNS_SOA_DATAA, *PDNS_SOA_DATAA;\n\ntypedef struct\n{\n    PWSTR pNamePrimaryServer;\n    PWSTR pNameAdministrator;\n    DWORD dwSerialNo;\n    DWORD dwRefresh;\n    DWORD dwRetry;\n    DWORD dwExpire;\n    DWORD dwDefaultTtl;\n} DNS_SOA_DATAW, *PDNS_SOA_DATAW;\n\nDECL_WINELIB_TYPE_AW(DNS_SOA_DATA)\nDECL_WINELIB_TYPE_AW(PDNS_SOA_DATA)\n\ntypedef struct\n{\n    PSTR pNameHost;\n} DNS_PTR_DATAA, *PDNS_PTR_DATAA;\n\ntypedef struct\n{\n    PWSTR pNameHost;\n} DNS_PTR_DATAW, *PDNS_PTR_DATAW;\n\nDECL_WINELIB_TYPE_AW(DNS_PTR_DATA)\nDECL_WINELIB_TYPE_AW(PDNS_PTR_DATA)\n\ntypedef struct\n{\n    PSTR pNameMailbox;\n    PSTR pNameErrorsMailbox;\n} DNS_MINFO_DATAA, *PDNS_MINFO_DATAA;\n\ntypedef struct\n{\n    PWSTR pNameMailbox;\n    PWSTR pNameErrorsMailbox;\n} DNS_MINFO_DATAW, *PDNS_MINFO_DATAW;\n\nDECL_WINELIB_TYPE_AW(DNS_MINFO_DATA)\nDECL_WINELIB_TYPE_AW(PDNS_MINFO_DATA)\n\ntypedef struct\n{\n    PSTR pNameExchange;\n    WORD wPreference;\n    WORD Pad;\n} DNS_MX_DATAA, *PDNS_MX_DATAA;\n\ntypedef struct\n{\n    PWSTR pNameExchange;\n    WORD wPreference;\n    WORD Pad;\n} DNS_MX_DATAW, *PDNS_MX_DATAW;\n\nDECL_WINELIB_TYPE_AW(DNS_MX_DATA)\nDECL_WINELIB_TYPE_AW(PDNS_MX_DATA)\n\ntypedef struct\n{\n    DWORD dwStringCount;\n    PSTR pStringArray[1];\n} DNS_TXT_DATAA, *PDNS_TXT_DATAA;\n\ntypedef struct\n{\n    DWORD dwStringCount;\n    PWSTR pStringArray[1];\n} DNS_TXT_DATAW, *PDNS_TXT_DATAW;\n\nDECL_WINELIB_TYPE_AW(DNS_TXT_DATA)\nDECL_WINELIB_TYPE_AW(PDNS_TXT_DATA)\n\ntypedef struct\n{\n    DWORD dwByteCount;\n    BYTE Data[1];\n} DNS_NULL_DATA, *PDNS_NULL_DATA;\n\ntypedef struct\n{\n    IP4_ADDRESS IpAddress;\n    UCHAR chProtocol;\n    BYTE BitMask[1];\n} DNS_WKS_DATA, *PDNS_WKS_DATA;\n\ntypedef struct\n{\n    DNS_IP6_ADDRESS Ip6Address;\n} DNS_AAAA_DATA, *PDNS_AAAA_DATA;\n\ntypedef struct\n{\n    WORD wFlags;\n    BYTE chProtocol;\n    BYTE chAlgorithm;\n    BYTE Key[1];\n} DNS_KEY_DATA, *PDNS_KEY_DATA;\n\ntypedef struct\n{\n    WORD wVersion;\n    WORD wSize;\n    WORD wHorPrec;\n    WORD wVerPrec;\n    DWORD dwLatitude;\n    DWORD dwLongitude;\n    DWORD dwAltitude;\n} DNS_LOC_DATA, *PDNS_LOC_DATA;\n\ntypedef struct\n{\n    PSTR pNameSigner;\n    WORD wTypeCovered;\n    BYTE chAlgorithm;\n    BYTE chLabelCount;\n    DWORD dwOriginalTtl;\n    DWORD dwExpiration;\n    DWORD dwTimeSigned;\n    WORD wKeyTag;\n    WORD Pad;\n    BYTE Signature[1];\n} DNS_SIG_DATAA, *PDNS_SIG_DATAA;\n\ntypedef struct\n{\n    PWSTR pNameSigner;\n    WORD wTypeCovered;\n    BYTE chAlgorithm;\n    BYTE chLabelCount;\n    DWORD dwOriginalTtl;\n    DWORD dwExpiration;\n    DWORD dwTimeSigned;\n    WORD wKeyTag;\n    WORD Pad;\n    BYTE Signature[1];\n} DNS_SIG_DATAW, *PDNS_SIG_DATAW;\n\nDECL_WINELIB_TYPE_AW(DNS_SIG_DATA)\nDECL_WINELIB_TYPE_AW(PDNS_SIG_DATA)\n\n#define DNS_ATMA_MAX_ADDR_LENGTH 20\n\ntypedef struct\n{\n    BYTE AddressType;\n    BYTE Address[DNS_ATMA_MAX_ADDR_LENGTH];\n} DNS_ATMA_DATA, *PDNS_ATMA_DATA;\n\ntypedef struct\n{\n    PSTR pNameNext;\n    WORD wNumTypes;\n    WORD wTypes[1];\n} DNS_NXT_DATAA, *PDNS_NXT_DATAA;\n\ntypedef struct\n{\n    PWSTR pNameNext;\n    WORD wNumTypes;\n    WORD wTypes[1];\n} DNS_NXT_DATAW, *PDNS_NXT_DATAW;\n\nDECL_WINELIB_TYPE_AW(DNS_NXT_DATA)\nDECL_WINELIB_TYPE_AW(PDNS_NXT_DATA)\n\ntypedef struct\n{\n    PSTR pNameTarget;\n    WORD wPriority;\n    WORD wWeight;\n    WORD wPort;\n    WORD Pad;\n} DNS_SRV_DATAA, *PDNS_SRV_DATAA;\n\ntypedef struct\n{\n    PWSTR pNameTarget;\n    WORD wPriority;\n    WORD wWeight;\n    WORD wPort;\n    WORD Pad;\n} DNS_SRV_DATAW, *PDNS_SRV_DATAW;\n\nDECL_WINELIB_TYPE_AW(DNS_SRV_DATA)\nDECL_WINELIB_TYPE_AW(PDNS_SRV_DATA)\n\ntypedef struct\n{\n    PSTR pNameAlgorithm;\n    PBYTE pAlgorithmPacket;\n    PBYTE pKey;\n    PBYTE pOtherData;\n    DWORD dwCreateTime;\n    DWORD dwExpireTime;\n    WORD wMode;\n    WORD wError;\n    WORD wKeyLength;\n    WORD wOtherLength;\n    UCHAR cAlgNameLength;\n    BOOL bPacketPointers;\n} DNS_TKEY_DATAA, *PDNS_TKEY_DATAA;\n\ntypedef struct\n{\n    PWSTR pNameAlgorithm;\n    PBYTE pAlgorithmPacket;\n    PBYTE pKey;\n    PBYTE pOtherData;\n    DWORD dwCreateTime;\n    DWORD dwExpireTime;\n    WORD wMode;\n    WORD wError;\n    WORD wKeyLength;\n    WORD wOtherLength;\n    UCHAR cAlgNameLength;\n    BOOL bPacketPointers;\n} DNS_TKEY_DATAW, *PDNS_TKEY_DATAW;\n\nDECL_WINELIB_TYPE_AW(DNS_TKEY_DATA)\nDECL_WINELIB_TYPE_AW(PDNS_TKEY_DATA)\n\ntypedef struct\n{\n    PSTR pNameAlgorithm;\n    PBYTE pAlgorithmPacket;\n    PBYTE pSignature;\n    PBYTE pOtherData;\n    LONGLONG i64CreateTime;\n    WORD wFudgeTime;\n    WORD wOriginalXid;\n    WORD wError;\n    WORD wSigLength;\n    WORD wOtherLength;\n    UCHAR cAlgNameLength;\n    BOOL bPacketPointers;\n} DNS_TSIG_DATAA, *PDNS_TSIG_DATAA;\n\ntypedef struct\n{\n    PWSTR pNameAlgorithm;\n    PBYTE pAlgorithmPacket;\n    PBYTE pSignature;\n    PBYTE pOtherData;\n    LONGLONG i64CreateTime;\n    WORD wFudgeTime;\n    WORD wOriginalXid;\n    WORD wError;\n    WORD wSigLength;\n    WORD wOtherLength;\n    UCHAR cAlgNameLength;\n    BOOL bPacketPointers;\n} DNS_TSIG_DATAW, *PDNS_TSIG_DATAW;\n\ntypedef struct\n{\n    DWORD dwMappingFlag;\n    DWORD dwLookupTimeout;\n    DWORD dwCacheTimeout;\n    DWORD cWinsServerCount;\n    IP4_ADDRESS WinsServers[1];\n} DNS_WINS_DATA, *PDNS_WINS_DATA;\n\ntypedef struct\n{\n    DWORD dwMappingFlag;\n    DWORD dwLookupTimeout;\n    DWORD dwCacheTimeout;\n    PSTR pNameResultDomain;\n} DNS_WINSR_DATAA, *PDNS_WINSR_DATAA;\n\ntypedef struct\n{\n    DWORD dwMappingFlag;\n    DWORD dwLookupTimeout;\n    DWORD dwCacheTimeout;\n    PWSTR pNameResultDomain;\n} DNS_WINSR_DATAW, *PDNS_WINSR_DATAW;\n\nDECL_WINELIB_TYPE_AW(DNS_WINSR_DATA)\nDECL_WINELIB_TYPE_AW(PDNS_WINSR_DATA)\n\ntypedef struct _DnsRecordA\n{\n    struct _DnsRecordA *pNext;\n    PSTR pName;\n    WORD wType;\n    WORD wDataLength;\n    union\n    {\n        DWORD DW;\n        DNS_RECORD_FLAGS S;\n    } Flags;\n    DWORD dwTtl;\n    DWORD dwReserved;\n    union\n    {\n        DNS_A_DATA A;\n        DNS_SOA_DATAA SOA, Soa;\n        DNS_PTR_DATAA PTR, Ptr, NS, Ns, CNAME, Cname, MB, Mb, MD, Md, MF, Mf, MG, Mg, MR, Mr;\n        DNS_MINFO_DATAA MINFO, Minfo, RP, Rp;\n        DNS_MX_DATAA MX, Mx, AFSDB, Afsdb, RT, Rt;\n        DNS_TXT_DATAA HINFO, Hinfo, ISDN, Isdn, TXT, Txt, X25;\n        DNS_NULL_DATA Null;\n        DNS_WKS_DATA WKS, Wks;\n        DNS_AAAA_DATA AAAA;\n        DNS_KEY_DATA KEY, Key;\n        DNS_SIG_DATAA SIG, Sig;\n        DNS_ATMA_DATA ATMA, Atma;\n        DNS_NXT_DATAA NXT, Nxt;\n        DNS_SRV_DATAA SRV, Srv;\n        DNS_TKEY_DATAA TKEY, Tkey;\n        DNS_TSIG_DATAA TSIG, Tsig;\n        DNS_WINS_DATA WINS, Wins;\n        DNS_WINSR_DATAA WINSR, WinsR, NBSTAT, Nbstat;\n    } Data;\n} DNS_RECORDA, *PDNS_RECORDA;\n\ntypedef struct _DnsRecordW\n{\n    struct _DnsRecordW *pNext;\n    PWSTR pName;\n    WORD wType;\n    WORD wDataLength;\n    union\n    {\n        DWORD DW;\n        DNS_RECORD_FLAGS S;\n    } Flags;\n    DWORD dwTtl;\n    DWORD dwReserved;\n    union\n    {\n        DNS_A_DATA A;\n        DNS_SOA_DATAW SOA, Soa;\n        DNS_PTR_DATAW PTR, Ptr, NS, Ns, CNAME, Cname, MB, Mb, MD, Md, MF, Mf, MG, Mg, MR, Mr;\n        DNS_MINFO_DATAW MINFO, Minfo, RP, Rp;\n        DNS_MX_DATAW MX, Mx, AFSDB, Afsdb, RT, Rt;\n        DNS_TXT_DATAW HINFO, Hinfo, ISDN, Isdn, TXT, Txt, X25;\n        DNS_NULL_DATA Null;\n        DNS_WKS_DATA WKS, Wks;\n        DNS_AAAA_DATA AAAA;\n        DNS_KEY_DATA KEY, Key;\n        DNS_SIG_DATAW SIG, Sig;\n        DNS_ATMA_DATA ATMA, Atma;\n        DNS_NXT_DATAW NXT, Nxt;\n        DNS_SRV_DATAW SRV, Srv;\n        DNS_TKEY_DATAW TKEY, Tkey;\n        DNS_TSIG_DATAW TSIG, Tsig;\n        DNS_WINS_DATA WINS, Wins;\n        DNS_WINSR_DATAW WINSR, WinsR, NBSTAT, Nbstat;\n    } Data;\n} DNS_RECORDW, *PDNS_RECORDW;\n\n#if defined(__WINESRC__) || defined(UNICODE)\ntypedef DNS_RECORDW DNS_RECORD;\ntypedef PDNS_RECORDW PDNS_RECORD;\n#else\ntypedef DNS_RECORDA DNS_RECORD;\ntypedef PDNS_RECORDA PDNS_RECORD;\n#endif\n\ntypedef struct _DnsRRSet\n{\n    PDNS_RECORD pFirstRR;\n    PDNS_RECORD pLastRR;\n} DNS_RRSET, *PDNS_RRSET;\n\n#define DNS_RRSET_INIT( rrset )                          \\\n{                                                        \\\n    PDNS_RRSET  _prrset = &(rrset);                      \\\n    _prrset->pFirstRR = NULL;                            \\\n    _prrset->pLastRR = (PDNS_RECORD) &_prrset->pFirstRR; \\\n}\n\n#define DNS_RRSET_ADD( rrset, pnewRR ) \\\n{                                      \\\n    PDNS_RRSET  _prrset = &(rrset);    \\\n    PDNS_RECORD _prrnew = (pnewRR);    \\\n    _prrset->pLastRR->pNext = _prrnew; \\\n    _prrset->pLastRR = _prrnew;        \\\n}\n\n#define DNS_RRSET_TERMINATE( rrset ) \\\n{                                    \\\n    PDNS_RRSET  _prrset = &(rrset);  \\\n    _prrset->pLastRR->pNext = NULL;  \\\n}\n\n#define DNS_ADDR_MAX_SOCKADDR_LENGTH 32\n\n#include <pshpack1.h>\n\ntypedef struct _DnsAddr\n{\n    char MaxSa[DNS_ADDR_MAX_SOCKADDR_LENGTH];\n    union {\n        DWORD DnsAddrUserDword[8];\n    } Data;\n} DNS_ADDR, *PDNS_ADDR;\n\ntypedef struct _DnsAddrArray\n{\n    DWORD MaxCount;\n    DWORD AddrCount;\n    DWORD Tag;\n    WORD Family;\n    WORD WordReserved;\n    DWORD Flags;\n    DWORD MatchFlag;\n    DWORD Reserved1;\n    DWORD Reserved2;\n    DNS_ADDR AddrArray[1];\n} DNS_ADDR_ARRAY, *PDNS_ADDR_ARRAY;\n\n#include <poppack.h>\n\n#define DNS_QUERY_RESULTS_VERSION1  0x1\n\ntypedef struct _DNS_QUERY_RESULT\n{\n    ULONG Version;\n    DNS_STATUS QueryStatus;\n    ULONG64 QueryOptions;\n    DNS_RECORD *pQueryRecords;\n    void *Reserved;\n} DNS_QUERY_RESULT, *PDNS_QUERY_RESULT;\n\ntypedef void WINAPI DNS_QUERY_COMPLETION_ROUTINE(void*,DNS_QUERY_RESULT*);\ntypedef DNS_QUERY_COMPLETION_ROUTINE *PDNS_QUERY_COMPLETION_ROUTINE;\n\n#define DNS_QUERY_REQUEST_VERSION1  0x1\n\ntypedef struct _DNS_QUERY_REQUEST\n{\n    ULONG Version;\n    const WCHAR *QueryName;\n    WORD QueryType;\n    ULONG64 QueryOptions;\n    PDNS_ADDR_ARRAY pDnsServerList;\n    ULONG InterfaceIndex;\n    PDNS_QUERY_COMPLETION_ROUTINE pQueryCompletionCallback;\n    void *pQueryContext;\n} DNS_QUERY_REQUEST, *PDNS_QUERY_REQUEST;\n\ntypedef struct _DNS_QUERY_CANCEL\n{\n    char Reserved[32];\n} DNS_QUERY_CANCEL, *PDNS_QUERY_CANCEL;\n\nDNS_STATUS WINAPI DnsAcquireContextHandle_A(DWORD,PVOID,PHANDLE);\nDNS_STATUS WINAPI DnsAcquireContextHandle_W(DWORD,PVOID,PHANDLE);\n#define DnsAcquireContextHandle WINELIB_NAME_AW(DnsAcquireContextHandle_)\nDNS_STATUS WINAPI DnsExtractRecordsFromMessage_W(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORDW*);\nDNS_STATUS WINAPI DnsExtractRecordsFromMessage_UTF8(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORDA*);\nVOID WINAPI DnsFree(PVOID,DNS_FREE_TYPE);\nDNS_STATUS WINAPI DnsModifyRecordsInSet_A(PDNS_RECORDA,PDNS_RECORDA,DWORD,HANDLE,PVOID,PVOID);\nDNS_STATUS WINAPI DnsModifyRecordsInSet_W(PDNS_RECORDW,PDNS_RECORDW,DWORD,HANDLE,PVOID,PVOID);\nDNS_STATUS WINAPI DnsModifyRecordsInSet_UTF8(PDNS_RECORDA,PDNS_RECORDA,DWORD,HANDLE,PVOID,PVOID);\n#define DnsModifyRecordsInSet WINELIB_NAME_AW(DnsModifyRecordsInSet_)\nBOOL WINAPI DnsNameCompare_A(PCSTR,PCSTR);\nBOOL WINAPI DnsNameCompare_W(PCWSTR,PCWSTR);\n#define DnsNameCompare WINELIB_NAME_AW(DnsNameCompare_)\nDNS_STATUS WINAPI DnsQuery_A(PCSTR,WORD,DWORD,PVOID,PDNS_RECORDA*,PVOID*);\nDNS_STATUS WINAPI DnsQuery_W(PCWSTR,WORD,DWORD,PVOID,PDNS_RECORDW*,PVOID*);\nDNS_STATUS WINAPI DnsQuery_UTF8(PCSTR,WORD,DWORD,PVOID,PDNS_RECORDA*,PVOID*);\n#define DnsQuery WINELIB_NAME_AW(DnsQuery_)\nDNS_STATUS WINAPI DnsQueryEx(DNS_QUERY_REQUEST*,DNS_QUERY_RESULT*,DNS_QUERY_CANCEL*);\nDNS_STATUS WINAPI DnsCancelQuery(DNS_QUERY_CANCEL*);\nDNS_STATUS WINAPI DnsQueryConfig(DNS_CONFIG_TYPE,DWORD,PCWSTR,PVOID,PVOID,PDWORD);\nBOOL WINAPI DnsRecordCompare(PDNS_RECORD,PDNS_RECORD);\nPDNS_RECORD WINAPI DnsRecordCopyEx(PDNS_RECORD,DNS_CHARSET,DNS_CHARSET);\nVOID WINAPI DnsRecordListFree(PDNS_RECORD,DNS_FREE_TYPE);\nBOOL WINAPI DnsRecordSetCompare(PDNS_RECORD,PDNS_RECORD,PDNS_RECORD*,PDNS_RECORD*);\nPDNS_RECORD WINAPI DnsRecordSetCopyEx(PDNS_RECORD,DNS_CHARSET,DNS_CHARSET);\nPDNS_RECORD WINAPI DnsRecordSetDetach(PDNS_RECORD);\nvoid WINAPI DnsReleaseContextHandle(HANDLE);\nDNS_STATUS WINAPI DnsReplaceRecordSetA(PDNS_RECORDA,DWORD,HANDLE,PVOID,PVOID);\nDNS_STATUS WINAPI DnsReplaceRecordSetW(PDNS_RECORDW,DWORD,HANDLE,PVOID,PVOID);\nDNS_STATUS WINAPI DnsReplaceRecordSetUTF8(PDNS_RECORDA,DWORD,HANDLE,PVOID,PVOID);\n#define DnsReplaceRecordSet WINELIB_NAME_AW(DnsReplaceRecordSet)\nDNS_STATUS WINAPI DnsValidateName_A(PCSTR,DNS_NAME_FORMAT);\nDNS_STATUS WINAPI DnsValidateName_W(PCWSTR, DNS_NAME_FORMAT);\nDNS_STATUS WINAPI DnsValidateName_UTF8(PCSTR,DNS_NAME_FORMAT);\n#define DnsValidateName WINELIB_NAME_AW(DnsValidateName_)\nBOOL WINAPI DnsWriteQuestionToBuffer_W(PDNS_MESSAGE_BUFFER,PDWORD,PCWSTR,WORD,WORD,BOOL);\nBOOL WINAPI DnsWriteQuestionToBuffer_UTF8(PDNS_MESSAGE_BUFFER,PDWORD,PCSTR,WORD,WORD,BOOL);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/windows.foundation.idl",
    "content": "/*\n * Copyright 2015 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifdef __WIDL__\n#pragma winrt ns_prefix\n#endif\n\nimport \"inspectable.idl\";\n/* import \"asyncinfo.idl\"; */\n/* import \"eventtoken.idl\"; */\n/* import \"ivectorchangedeventargs.idl\"; */\n\nnamespace Windows {\n    namespace Foundation {\n        [version(0x06020000)]\n        enum PropertyType {\n            Empty       = 0,\n            UInt8       = 1,\n            Int16       = 2,\n            UInt16      = 3,\n            Int32       = 4,\n            UInt32      = 5,\n            Int64       = 6,\n            UInt64      = 7,\n            Single      = 8,\n            Double      = 9,\n            Char16      = 10,\n            Boolean     = 11,\n            String      = 12,\n            Inspectable = 13,\n            DateTime    = 14,\n            TimeSpan    = 15,\n            Guid        = 16,\n            Point       = 17,\n            Size        = 18,\n            Rect        = 19,\n            OtherType   = 20,\n            UInt8Array       = 1025,\n            Int16Array       = 1026,\n            UInt16Array      = 1027,\n            Int32Array       = 1028,\n            UInt32Array      = 1029,\n            Int64Array       = 1030,\n            UInt64Array      = 1031,\n            SingleArray      = 1032,\n            DoubleArray      = 1033,\n            Char16Array      = 1034,\n            BooleanArray     = 1035,\n            StringArray      = 1036,\n            InspectableArray = 1037,\n            DateTimeArray    = 1038,\n            TimeSpanArray    = 1039,\n            GuidArray        = 1040,\n            PointArray       = 1041,\n            SizeArray        = 1042,\n            RectArray        = 1043,\n            OtherTypeArray   = 1044\n        };\n\n        [version(0x06020000)]\n        struct Point {\n            FLOAT X;\n            FLOAT Y;\n        };\n\n        [version(0x06020000)]\n        struct Size {\n            FLOAT Width;\n            FLOAT Height;\n        };\n\n        [version(0x06020000)]\n        struct Rect {\n            FLOAT X;\n            FLOAT Y;\n            FLOAT Width;\n            FLOAT Height;\n        };\n\n        [version(0x06020000)]\n        struct DateTime {\n            INT64 UniversalTime;\n        };\n\n        [version(0x06020000)]\n        struct TimeSpan {\n            INT64 Duration;\n        };\n\n        [\n            version(0x06030000),\n            uuid(96369f54-8eb6-48f0-abce-c1b211e627c3)\n        ]\n        interface IStringable : IInspectable\n        {\n            HRESULT ToString([out, retval] HSTRING *value);\n        }\n    }\n}\n"
  },
  {
    "path": "wine/windows/windows.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINDOWS_H\n#define __WINE_WINDOWS_H\n\n#if defined(_MSC_VER) && (_MSC_VER >= 800) && !defined(__cplusplus)\n/* TYPE_ALIGNMENT generates this - move it outside the warning push/pop scope. */\n# pragma warning(disable:4116)\n#endif\n\n#ifndef _INC_WINDOWS\n#define _INC_WINDOWS\n\n#if defined(RC_INVOKED) && !defined(NOWINRES)\n#include <winresrc.h>\n#else /* RC_INVOKED && !NOWINRES */\n\n/* All the basic includes */\n#include <excpt.h>\n#include <stdarg.h>\n#include <windef.h>\n#include <winbase.h>\n#include <wingdi.h>\n#include <winuser.h>\n#include <winnls.h>\n#include <wincon.h>\n#include <winver.h>\n#include <winreg.h>\n#include <winnetwk.h>\n\n/* Not so essential ones */\n#ifndef __WINESRC__\n\n#ifndef WIN32_LEAN_AND_MEAN\n\n#include <cderr.h>\n#include <dde.h>\n#include <ddeml.h>\n#include <dlgs.h>\n#include <lzexpand.h>\n#include <mmsystem.h>\n#include <nb30.h>\n#include <rpc.h>\n#include <shellapi.h>\n#include <winperf.h>\n\n#ifndef WINE_NOWINSOCK\n#include <winsock.h>\n#endif /* WINE_NOWINSOCK */\n\n#ifndef NOCRYPT\n#include <wincrypt.h>\n/* #include <winefs.h> */\n#include <winscard.h>\n#endif /* !NOCRYPT */\n\n#ifndef NOGDI\n#include <winspool.h>\n#ifdef INC_OLE1\n/* #include <ole.h> */\n#else\n#include <ole2.h>\n#endif\n#include <commdlg.h>\n#endif /* !NOGDI */\n\n#endif /* !WIN32_LEAN_AND_MEAN */\n\n/* #include <stralign.h> */\n\n#ifdef INC_OLE2\n#include <ole2.h>\n#endif /* INC_OLE2 */\n\n#ifndef NOSERVICE\n#include <winsvc.h>\n#endif /* !NOSERVICE */\n\n#ifndef NOMCX\n#include <mcx.h>\n#endif /* !NOMCX */\n\n#ifndef NOIMM\n#include <imm.h>\n#endif /* !NOIMM */\n\n#endif  /* __WINESRC__ */\n\n#endif  /* RC_INVOKED && !NOWINRES */\n#endif /* _INC_WINDOWS */\n#endif  /* __WINE_WINDOWS_H */\n"
  },
  {
    "path": "wine/windows/windowsx.h",
    "content": "/* Copyright (C) 1999 Corel Corporation (Paul Quinn)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _INC_WINDOWSX\n#define _INC_WINDOWSX\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifdef __WINESRC__\n/* This file contains macros that cause warnings on gcc 4.1, so avoid it. */\n#error Please avoid use of windowsx.h in Wine source code.\n#endif\n\n#ifndef SNDMSG\n#ifdef __cplusplus\n#define SNDMSG ::SendMessage\n#else   /* __cplusplus */\n#define SNDMSG SendMessage\n#endif  /* __cplusplus */\n#endif  /* SNDMSG */\n\n#define GET_WPARAM(wp, lp)                      (wp)\n#define GET_LPARAM(wp, lp)                      (lp)\n\n#define GET_X_LPARAM(lp)                        ((int)(short)LOWORD(lp))\n#define GET_Y_LPARAM(lp)                        ((int)(short)HIWORD(lp))\n\n#define GET_EM_LINESCROLL_MPS(vert, horz)       (WPARAM)horz, (LPARAM)vert\n\n#define GET_EM_SETSEL_START(wp, lp)             (INT)(wp)\n#define GET_EM_SETSEL_END(wp, lp)               (lp)\n#define GET_EM_SETSEL_MPS(iStart, iEnd)         (WPARAM)(iStart), (LPARAM)(iEnd)\n\n#define GET_WM_ACTIVATE_STATE(wp, lp)           LOWORD(wp)\n#define GET_WM_ACTIVATE_FMINIMIZED(wp, lp)      (BOOL)HIWORD(wp)\n#define GET_WM_ACTIVATE_HWND(wp, lp)            (HWND)(lp)\n#define GET_WM_ACTIVATE_MPS(s, fmin, hwnd)      (WPARAM)MAKELONG((s), (fmin)), (LPARAM)(hwnd)\n\n#define GET_WM_CHANGECBCHAIN_HWNDNEXT(wp, lp)   (HWND)(lp)\n\n#define GET_WM_CHARTOITEM_CHAR(wp, lp)          (TCHAR)LOWORD(wp)\n#define GET_WM_CHARTOITEM_POS(wp, lp)           HIWORD(wp)\n#define GET_WM_CHARTOITEM_HWND(wp, lp)          (HWND)(lp)\n#define GET_WM_CHARTOITEM_MPS(ch, pos, hwnd)    (WPARAM)MAKELONG((pos), (ch)), (LPARAM)(hwnd)\n\n#define GET_WM_COMMAND_ID(wp, lp)               LOWORD(wp)\n#define GET_WM_COMMAND_HWND(wp, lp)             (HWND)(lp)\n#define GET_WM_COMMAND_CMD(wp, lp)              HIWORD(wp)\n#define GET_WM_COMMAND_MPS(id, hwnd, cmd)       (WPARAM)MAKELONG(id, cmd), (LPARAM)(hwnd)\n\n#define WM_CTLCOLOR                             0x0019\n\n#define GET_WM_CTLCOLOR_HDC(wp, lp, msg)        (HDC)(wp)\n#define GET_WM_CTLCOLOR_HWND(wp, lp, msg)       (HWND)(lp)\n#define GET_WM_CTLCOLOR_TYPE(wp, lp, msg)       (WORD)(msg - WM_CTLCOLORMSGBOX)\n#define GET_WM_CTLCOLOR_MSG(type)               (WORD)(WM_CTLCOLORMSGBOX+(type))\n#define GET_WM_CTLCOLOR_MPS(hdc, hwnd, type)    (WPARAM)(hdc), (LPARAM)(hwnd)\n\n#define GET_WM_HSCROLL_CODE(wp, lp)             LOWORD(wp)\n#define GET_WM_HSCROLL_POS(wp, lp)              HIWORD(wp)\n#define GET_WM_HSCROLL_HWND(wp, lp)             (HWND)(lp)\n#define GET_WM_HSCROLL_MPS(code, pos, hwnd)     (WPARAM)MAKELONG(code, pos), (LPARAM)(hwnd)\n\n#define GET_WM_MENUCHAR_CHAR(wp, lp)            (TCHAR)LOWORD(wp)\n#define GET_WM_MENUCHAR_HMENU(wp, lp)           (HMENU)(lp)\n#define GET_WM_MENUCHAR_FMENU(wp, lp)           (BOOL)HIWORD(wp)\n#define GET_WM_MENUCHAR_MPS(ch, hmenu, f)       (WPARAM)MAKELONG(ch, f), (LPARAM)(hmenu)\n\n#define GET_WM_MENUSELECT_CMD(wp, lp)           LOWORD(wp)\n#define GET_WM_MENUSELECT_FLAGS(wp, lp)         (UINT)(int)(short)HIWORD(wp)\n#define GET_WM_MENUSELECT_HMENU(wp, lp)         (HMENU)(lp)\n#define GET_WM_MENUSELECT_MPS(cmd, f, hmenu)    (WPARAM)MAKELONG(cmd, f), (LPARAM)(hmenu)\n\n#define GET_WM_MDIACTIVATE_FACTIVATE(hwnd, wp, lp) (lp == (LPARAM)hwnd)\n#define GET_WM_MDIACTIVATE_HWNDDEACT(wp, lp)    (HWND)(wp)\n#define GET_WM_MDIACTIVATE_HWNDACTIVATE(wp, lp) (HWND)(lp)\n#define GET_WM_MDIACTIVATE_MPS(f, hwndD, hwndA) (WPARAM)(hwndA), 0\n#define GET_WM_MDISETMENU_MPS(hmenuF, hmenuW)   (WPARAM)hmenuF, (LPARAM)hmenuW\n\n#define GET_WM_PARENTNOTIFY_MSG(wp, lp)         LOWORD(wp)\n#define GET_WM_PARENTNOTIFY_ID(wp, lp)          HIWORD(wp)\n#define GET_WM_PARENTNOTIFY_HWNDCHILD(wp, lp)   (HWND)(lp)\n#define GET_WM_PARENTNOTIFY_X(wp, lp)           (int)(short)LOWORD(lp)\n#define GET_WM_PARENTNOTIFY_Y(wp, lp)           (int)(short)HIWORD(lp)\n#define GET_WM_PARENTNOTIFY_MPS(msg, id, hwnd)  (WPARAM)MAKELONG(id, msg), (LPARAM)(hwnd)\n#define GET_WM_PARENTNOTIFY2_MPS(msg, x, y)     (WPARAM)MAKELONG(0, msg), MAKELONG(x, y)\n\n#define GET_WM_VKEYTOITEM_CODE(wp, lp)          (int)(short)LOWORD(wp)\n#define GET_WM_VKEYTOITEM_ITEM(wp, lp)          HIWORD(wp)\n#define GET_WM_VKEYTOITEM_HWND(wp, lp)          (HWND)(lp)\n#define GET_WM_VKEYTOITEM_MPS(code, item, hwnd) (WPARAM)MAKELONG(item, code), (LPARAM)(hwnd)\n\n#define GET_WM_VSCROLL_CODE(wp, lp)             LOWORD(wp)\n#define GET_WM_VSCROLL_POS(wp, lp)              HIWORD(wp)\n#define GET_WM_VSCROLL_HWND(wp, lp)             (HWND)(lp)\n#define GET_WM_VSCROLL_MPS(code, pos, hwnd)     (WPARAM)MAKELONG(code, pos), (LPARAM)(hwnd)\n\n/****** KERNEL Macro APIs ******************************************************/\n\n#define GetInstanceModule(hInst)                (HMODULE)(hInst)\n#define GlobalPtrHandle(lp)                     ((HGLOBAL)GlobalHandle(lp))\n#define GlobalLockPtr(lp)                       ((BOOL)GlobalLock(GlobalPtrHandle(lp)))\n#define GlobalUnlockPtr(lp)                     GlobalUnlock(GlobalPtrHandle(lp))\n#define GlobalAllocPtr(flags, cb)               (GlobalLock(GlobalAlloc((flags), (cb))))\n#define GlobalReAllocPtr(lp, cbNew, flags)      (GlobalUnlockPtr(lp), GlobalLock(GlobalReAlloc(GlobalPtrHandle(lp) , (cbNew), (flags))))\n#define GlobalFreePtr(lp)                       (GlobalUnlockPtr(lp), (BOOL)(ULONG_PTR)GlobalFree(GlobalPtrHandle(lp)))\n\n/****** USER Macro APIs ******************************************************/\n\n#define     GetWindowInstance(hwnd) ((HMODULE)GetWindowLongPtr(hwnd, GWLP_HINSTANCE))\n\n#define     GetWindowStyle(hwnd)    ((DWORD)GetWindowLong(hwnd, GWL_STYLE))\n#define     GetWindowExStyle(hwnd)  ((DWORD)GetWindowLong(hwnd, GWL_EXSTYLE))\n\n#define     GetWindowOwner(hwnd)    GetWindow(hwnd, GW_OWNER)\n\n#define     GetFirstChild(hwnd)     GetTopWindow(hwnd)\n#define     GetFirstSibling(hwnd)   GetWindow(hwnd, GW_HWNDFIRST)\n#define     GetLastSibling(hwnd)    GetWindow(hwnd, GW_HWNDLAST)\n#define     GetNextSibling(hwnd)    GetWindow(hwnd, GW_HWNDNEXT)\n#define     GetPrevSibling(hwnd)    GetWindow(hwnd, GW_HWNDPREV)\n\n#define     GetWindowID(hwnd)       GetDlgCtrlID(hwnd)\n\n#define     SetWindowRedraw(hwnd, fRedraw)  \\\n\t        ((void)SendMessage(hwnd, WM_SETREDRAW, (WPARAM)(BOOL)(fRedraw), 0L))\n#define     SubclassWindow(hwnd, lpfn)      \\\n\t\t((WNDPROC)SetWindowLongPtr((hwnd), GWLP_WNDPROC, (LPARAM)(WNDPROC)(lpfn)))\n\n#define     IsMinimized(hwnd)        IsIconic(hwnd)\n#define     IsMaximized(hwnd)        IsZoomed(hwnd)\n#define     IsRestored(hwnd)    ((GetWindowStyle(hwnd) & (WS_MINIMIZE | WS_MAXIMIZE)) == 0L)\n#define     SetWindowFont(hwnd, hfont, fRedraw) \\\n\t\tFORWARD_WM_SETFONT((hwnd), (hfont), (fRedraw), SendMessage)\n\n#define     GetWindowFont(hwnd)      FORWARD_WM_GETFONT((hwnd), SendMessage)\n\n#define     MapWindowRect(hwndFrom, hwndTo, lprc) \\\n                MapWindowPoints((hwndFrom), (hwndTo), (POINT *)(lprc), 2)\n\n#define     IsLButtonDown()  (GetKeyState(VK_LBUTTON) < 0)\n#define     IsRButtonDown()  (GetKeyState(VK_RBUTTON) < 0)\n#define     IsMButtonDown()  (GetKeyState(VK_MBUTTON) < 0)\n\n#define     SetDlgMsgResult(hwnd, msg, result) (( \\\n        (msg) == WM_CTLCOLORMSGBOX      || \\\n        (msg) == WM_CTLCOLOREDIT        || \\\n        (msg) == WM_CTLCOLORLISTBOX     || \\\n        (msg) == WM_CTLCOLORBTN         || \\\n        (msg) == WM_CTLCOLORDLG         || \\\n        (msg) == WM_CTLCOLORSCROLLBAR   || \\\n        (msg) == WM_CTLCOLORSTATIC      || \\\n        (msg) == WM_COMPAREITEM         || \\\n        (msg) == WM_VKEYTOITEM          || \\\n        (msg) == WM_CHARTOITEM          || \\\n        (msg) == WM_QUERYDRAGICON       || \\\n        (msg) == WM_INITDIALOG             \\\n    ) ? (BOOL)(result) : (SetWindowLongPtr((hwnd), DWLP_MSGRESULT, (LPARAM)(LRESULT)(result)), TRUE))\n\n#define     DefDlgProcEx(hwnd, msg, wParam, lParam, pfRecursion) \\\n    (*(pfRecursion) = TRUE, DefDlgProc(hwnd, msg, wParam, lParam))\n\n#define     CheckDefDlgRecursion(pfRecursion) \\\n    if (*(pfRecursion)) { *(pfRecursion) = FALSE; return FALSE; }\n\n#define     SubclassDialog(hwndDlg, lpfn) \\\n\t\t((DLGPROC)SetWindowLongPtr(hwndDlg, DWLP_DLGPROC, (LPARAM)(DLGPROC)(lpfn)))\n\n#define     DeletePen(hpen)      DeleteObject((HGDIOBJ)(HPEN)(hpen))\n#define     SelectPen(hdc, hpen)    ((HPEN)SelectObject((hdc), (HGDIOBJ)(HPEN)(hpen)))\n#define     GetStockPen(i)       ((HPEN)GetStockObject(i))\n\n#define     DeleteBrush(hbr)     DeleteObject((HGDIOBJ)(HBRUSH)(hbr))\n#define     SelectBrush(hdc, hbr)   ((HBRUSH)SelectObject((hdc), (HGDIOBJ)(HBRUSH)(hbr)))\n#define     GetStockBrush(i)     ((HBRUSH)GetStockObject(i))\n\n#define     DeleteRgn(hrgn)                         DeleteObject((HGDIOBJ)(HRGN)(hrgn))\n\n#define     CopyRgn(hrgnDst, hrgnSrc)               CombineRgn(hrgnDst, hrgnSrc, 0, RGN_COPY)\n#define     IntersectRgn(hrgnResult, hrgnA, hrgnB)  CombineRgn(hrgnResult, hrgnA, hrgnB, RGN_AND)\n#define     SubtractRgn(hrgnResult, hrgnA, hrgnB)   CombineRgn(hrgnResult, hrgnA, hrgnB, RGN_DIFF)\n#define     UnionRgn(hrgnResult, hrgnA, hrgnB)      CombineRgn(hrgnResult, hrgnA, hrgnB, RGN_OR)\n#define     XorRgn(hrgnResult, hrgnA, hrgnB)        CombineRgn(hrgnResult, hrgnA, hrgnB, RGN_XOR)\n\n#define     DeletePalette(hpal)     DeleteObject((HGDIOBJ)(HPALETTE)(hpal))\n\n#define     DeleteFont(hfont)       DeleteObject((HGDIOBJ)(HFONT)(hfont))\n#define     SelectFont(hdc, hfont)  ((HFONT)SelectObject((hdc), (HGDIOBJ)(HFONT) (hfont)))\n#define     GetStockFont(i)         ((HFONT)GetStockObject(i))\n#define     DeleteBitmap(hbm)       DeleteObject((HGDIOBJ)(HBITMAP)(hbm))\n#define     SelectBitmap(hdc, hbm)  ((HBITMAP)SelectObject((hdc), (HGDIOBJ)(HBITMAP)(hbm)))\n#define     InsetRect(lprc, dx, dy) InflateRect((lprc), -(dx), -(dy))\n\n\n/* Button Message APIs */\n\n#define Button_Enable(hwndCtl, fEnable) \\\n\tEnableWindow((hwndCtl), (fEnable))\n\n#define Button_GetCheck(hwndCtl) \\\n\t((int)SendMessage((hwndCtl), BM_GETCHECK, 0L, 0L))\n\n#define Button_GetState(hwndCtl) \\\n\t((int)SendMessage((hwndCtl), BM_GETSTATE, 0L, 0L))\n\n#define Button_GetText(hwndCtl, lpch, cchMax) \\\n\tGetWindowText((hwndCtl), (lpch), (cchMax))\n\n#define Button_GetTextLength(hwndCtl) \\\n\tGetWindowTextLength(hwndCtl)\n\n#define Button_SetCheck(hwndCtl, check) \\\n\t((void)SendMessage((hwndCtl), BM_SETCHECK, (WPARAM)(int)(check), 0L))\n\n#define Button_SetState(hwndCtl, state) \\\n\t((UINT)SendMessage((hwndCtl), BM_SETSTATE, (WPARAM)(int)(state), 0L))\n\n#define Button_SetStyle(hwndCtl, style, fRedraw) \\\n\t((void)SendMessage((hwndCtl), BM_SETSTYLE, (WPARAM)LOWORD(style), MAKELPARAM((fRedraw) != 0, 0)))\n\n#define Button_SetText(hwndCtl, lpsz) \\\n\tSetWindowText((hwndCtl), (lpsz))\n\n\n/* ComboBox Message APIs */\n\n#define ComboBox_AddItemData(hwndCtl, data) \\\n\t((int)SendMessage((hwndCtl), CB_ADDSTRING, 0L, (LPARAM)(LPCTSTR)(data)))\n\n#define ComboBox_AddString(hwndCtl, lpsz) \\\n\t((int)SendMessage((hwndCtl), CB_ADDSTRING, 0L, (LPARAM)(LPCTSTR)(lpsz)))\n\n#define ComboBox_DeleteString(hwndCtl, index) \\\n\t((int)SendMessage((hwndCtl), CB_DELETESTRING, (WPARAM)(int)(index), 0L))\n\n#define ComboBox_Dir(hwndCtl, attrs, lpszFileSpec) \\\n\t((int)SendMessage((hwndCtl), CB_DIR, (WPARAM)(UINT)(attrs), (LPARAM)(LPCTSTR)(lpszFileSpec)))\n\n#define ComboBox_Enable(hwndCtl, fEnable) \\\n\tEnableWindow((hwndCtl), (fEnable))\n\n#define ComboBox_FindItemData(hwndCtl, indexStart, data) \\\n\t((int)SendMessage((hwndCtl), CB_FINDSTRING, (WPARAM)(int)(indexStart), (LPARAM)(data)))\n\n#define ComboBox_FindString(hwndCtl, indexStart, lpszFind) \\\n\t((int)SendMessage((hwndCtl), CB_FINDSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind)))\n\n#define ComboBox_FindStringExact(hwndCtl, indexStart, lpszFind) \\\n\t((int)SendMessage((hwndCtl), CB_FINDSTRINGEXACT, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind)))\n\n#define ComboBox_GetCount(hwndCtl) \\\n\t((int)SendMessage((hwndCtl), CB_GETCOUNT, 0L, 0L))\n\n#define ComboBox_GetCurSel(hwndCtl) \\\n\t((int)SendMessage((hwndCtl), CB_GETCURSEL, 0L, 0L))\n\n#define ComboBox_GetDroppedControlRect(hwndCtl, lprc) \\\n\t((void)SendMessage((hwndCtl), CB_GETDROPPEDCONTROLRECT, 0L, (LPARAM)(RECT *)(lprc)))\n\n#define ComboBox_GetDroppedState(hwndCtl) \\\n\t((BOOL)SendMessage((hwndCtl), CB_GETDROPPEDSTATE, 0L, 0L))\n\n#define ComboBox_GetEditSel(hwndCtl) \\\n\t((DWORD)SendMessage((hwndCtl), CB_GETEDITSEL, 0L, 0L))\n\n#define ComboBox_GetExtendedUI(hwndCtl) \\\n\t((UINT)SendMessage((hwndCtl), CB_GETEXTENDEDUI, 0L, 0L))\n\n#define ComboBox_GetItemData(hwndCtl, index) \\\n\t((LRESULT)SendMessage((hwndCtl), CB_GETITEMDATA, (WPARAM)(int)(index), 0L))\n\n#define ComboBox_GetItemHeight(hwndCtl) \\\n\t((int)SendMessage((hwndCtl), CB_GETITEMHEIGHT, 0L, 0L))\n\n#define ComboBox_GetLBText(hwndCtl, index, lpszBuffer) \\\n\t((int)SendMessage((hwndCtl), CB_GETLBTEXT, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(lpszBuffer)))\n\n#define ComboBox_GetLBTextLen(hwndCtl, index) \\\n\t((int)SendMessage((hwndCtl), CB_GETLBTEXTLEN, (WPARAM)(int)(index), 0L))\n\n#define ComboBox_InsertItemData(hwndCtl, index, data) \\\n\t((int)SendMessage((hwndCtl), CB_INSERTSTRING, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(data)))\n\n#define ComboBox_LimitText(hwndCtl, cchLimit) \\\n\t((int)SendMessage((hwndCtl), CB_LIMITTEXT, (WPARAM)(int)(cchLimit), 0L))\n\n#define ComboBox_GetText(hwndCtl, lpch, cchMax) \\\n\tGetWindowText((hwndCtl), (lpch), (cchMax))\n\n#define ComboBox_GetTextLength(hwndCtl) \\\n\tGetWindowTextLength(hwndCtl)\n\n#define ComboBox_InsertString(hwndCtl, index, lpsz) \\\n\t((int)SendMessage((hwndCtl), CB_INSERTSTRING, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(lpsz)))\n\n#define ComboBox_LimitText(hwndCtl, cchLimit) \\\n\t((int)SendMessage((hwndCtl), CB_LIMITTEXT, (WPARAM)(int)(cchLimit), 0L))\n\n#define ComboBox_ResetContent(hwndCtl) \\\n\t((int)SendMessage((hwndCtl), CB_RESETCONTENT, 0L, 0L))\n\n#define ComboBox_SelectItemData(hwndCtl, indexStart, data) \\\n\t((int)SendMessage((hwndCtl), CB_SELECTSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(data)))\n\n#define ComboBox_SelectString(hwndCtl, indexStart, lpszSelect) \\\n\t((int)SendMessage((hwndCtl), CB_SELECTSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszSelect)))\n\n#define ComboBox_SetCurSel(hwndCtl, index) \\\n\t((int)SendMessage((hwndCtl), CB_SETCURSEL, (WPARAM)(int)(index), 0L))\n\n#define ComboBox_SetEditSel(hwndCtl, ichStart, ichEnd) \\\n\t((int)SendMessage((hwndCtl), CB_SETEDITSEL, 0L, MAKELPARAM((ichStart), (ichEnd))))\n\n#define ComboBox_SetExtendedUI(hwndCtl, flags) \\\n\t((int)SendMessage((hwndCtl), CB_SETEXTENDEDUI, (WPARAM)(UINT)(flags), 0L))\n\n#define ComboBox_SetItemData(hwndCtl, index, data) \\\n\t((int)SendMessage((hwndCtl), CB_SETITEMDATA, (WPARAM)(int)(index), (LPARAM)(DWORD)(data)))\n\n#define ComboBox_SetItemHeight(hwndCtl, index, cyItem) \\\n\t((int)SendMessage((hwndCtl), CB_SETITEMHEIGHT, (WPARAM)(int)(index), (LPARAM)(int)cyItem))\n\n#define ComboBox_SetText(hwndCtl, lpsz) \\\n\tSetWindowText((hwndCtl), (lpsz))\n\n#define ComboBox_ShowDropdown(hwndCtl, fShow) \\\n\t((BOOL)SendMessage((hwndCtl), CB_SHOWDROPDOWN, (WPARAM)(BOOL)(fShow), 0L))\n\n\n/* Edit Message APIs */\n\n#define Edit_CanUndo(hwndCtl) \\\n\t((BOOL)SendMessage((hwndCtl), EM_CANUNDO, 0L, 0L))\n\n#define Edit_EmptyUndoBuffer(hwndCtl) \\\n\t((void)SendMessage((hwndCtl), EM_EMPTYUNDOBUFFER, 0L, 0L))\n\n#define Edit_Enable(hwndCtl, fEnable) \\\n\tEnableWindow((hwndCtl), (fEnable))\n\n#define Edit_FmtLines(hwndCtl, fAddEOL) \\\n\t((BOOL)SendMessage((hwndCtl), EM_FMTLINES, (WPARAM)(BOOL)(fAddEOL), 0L))\n\n#define Edit_GetFirstVisibleLine(hwndCtl) \\\n\t((int)SendMessage((hwndCtl), EM_GETFIRSTVISIBLELINE, 0L, 0L))\n\n#define Edit_GetHandle(hwndCtl) \\\n\t((HLOCAL)SendMessage((hwndCtl), EM_GETHANDLE, 0L, 0L))\n\n#define Edit_GetLine(hwndCtl, line, lpch, cchMax) \\\n\t((*((int *)(lpch)) = (cchMax)), ((int)SendMessage((hwndCtl), EM_GETLINE, (WPARAM)(int)(line), (LPARAM)(LPTSTR)(lpch))))\n\n#define Edit_GetModify(hwndCtl) \\\n\t((BOOL)SendMessage((hwndCtl), EM_GETMODIFY, 0L, 0L))\n\n#define Edit_GetPasswordChar(hwndCtl) \\\n\t((TCHAR)SendMessage((hwndCtl), EM_GETPASSWORDCHAR, 0L, 0L))\n\n#define Edit_GetRect(hwndCtl, lprc) \\\n\t((void)SendMessage((hwndCtl), EM_GETRECT, 0L, (LPARAM)(RECT *)(lprc)))\n\n#define Edit_GetSel(hwndCtl) \\\n\t((DWORD)SendMessage((hwndCtl), EM_GETSEL, 0L, 0L))\n\n#define Edit_GetText(hwndCtl, lpch, cchMax) \\\n\tGetWindowText((hwndCtl), (lpch), (cchMax))\n\n#define Edit_GetTextLength(hwndCtl) \\\n\tGetWindowTextLength(hwndCtl)\n\n#define Edit_GetWordBreakProc(hwndCtl) \\\n\t((EDITWORDBREAKPROC)SendMessage((hwndCtl), EM_GETWORDBREAKPROC, 0L, 0L))\n\n#define Edit_LimitText(hwndCtl, cchMax) \\\n\t((void)SendMessage((hwndCtl), EM_LIMITTEXT, (WPARAM)(UINT)(cchMax), 0L))\n\n#define Edit_LineFromChar(hwndCtl, ich) \\\n\t((int)SendMessage((hwndCtl), EM_LINEFROMCHAR, (WPARAM)(int)(ich), 0L))\n\n#define Edit_LineIndex(hwndCtl, line) \\\n\t((int)SendMessage((hwndCtl), EM_LINEINDEX, (WPARAM)(int)(line), 0L))\n\n#define Edit_GetLineCount(hwndCtl) \\\n\t((int)SendMessage((hwndCtl), EM_GETLINECOUNT, 0L, 0L))\n\n#define Edit_LineLength(hwndCtl, line) \\\n\t((int)SendMessage((hwndCtl), EM_LINELENGTH, (WPARAM)(int)(line), 0L))\n\n#define Edit_ReplaceSel(hwndCtl, lpszReplace) \\\n\t((void)SendMessage((hwndCtl), EM_REPLACESEL, 0L, (LPARAM)(LPCTSTR)(lpszReplace)))\n\n#define Edit_Scroll(hwndCtl, dv, dh) \\\n\t((void)SendMessage((hwndCtl), EM_LINESCROLL, (WPARAM)(int)(dh), (LPARAM)(int)(dv)))\n\n#define Edit_ScrollCaret(hwndCtl) \\\n\t((BOOL)SendMessage((hwndCtl), EM_SCROLLCARET, 0, 0L))\n\n#define Edit_SetHandle(hwndCtl, h) \\\n\t((void)SendMessage((hwndCtl), EM_SETHANDLE, (WPARAM)(HLOCAL)(h), 0L))\n\n#define Edit_SetModify(hwndCtl, fModified) \\\n\t((void)SendMessage((hwndCtl), EM_SETMODIFY, (WPARAM)(UINT)(fModified), 0L))\n\n#define Edit_SetPasswordChar(hwndCtl, ch) \\\n\t((void)SendMessage((hwndCtl), EM_SETPASSWORDCHAR, (WPARAM)(UINT)(ch), 0L))\n\n#define Edit_SetReadOnly(hwndCtl, fReadOnly) \\\n\t((BOOL)SendMessage((hwndCtl), EM_SETREADONLY, (WPARAM)(BOOL)(fReadOnly), 0L))\n\n#define Edit_SetRect(hwndCtl, lprc) \\\n\t((void)SendMessage((hwndCtl), EM_SETRECT, 0L, (LPARAM)(const RECT *)(lprc)))\n\n#define Edit_SetRectNoPaint(hwndCtl, lprc) \\\n\t((void)SendMessage((hwndCtl), EM_SETRECTNP, 0L, (LPARAM)(const RECT *)(lprc)))\n\n#define Edit_SetSel(hwndCtl, ichStart, ichEnd) \\\n\t((void)SendMessage((hwndCtl), EM_SETSEL, (ichStart), (ichEnd)))\n\n#define Edit_SetTabStops(hwndCtl, cTabs, lpTabs) \\\n\t((void)SendMessage((hwndCtl), EM_SETTABSTOPS, (WPARAM)(int)(cTabs), (LPARAM)(const int *)(lpTabs)))\n\n#define Edit_SetText(hwndCtl, lpsz) \\\n\tSetWindowText((hwndCtl), (lpsz))\n\n#define Edit_SetWordBreakProc(hwndCtl, lpfnWordBreak) \\\n\t((void)SendMessage((hwndCtl), EM_SETWORDBREAKPROC, 0L, (LPARAM)(EDITWORDBREAKPROC)(lpfnWordBreak)))\n\n#define Edit_Undo(hwndCtl) \\\n\t((BOOL)SendMessage((hwndCtl), EM_UNDO, 0L, 0L))\n\n\n/* ListBox Message APIs */\n\n#define ListBox_AddItemData(hwndCtl, data) \\\n\t((int)SendMessage((hwndCtl), LB_ADDSTRING, 0L, (LPARAM)(LPCTSTR)(data)))\n\n#define ListBox_AddString(hwndCtl, lpsz) \\\n\t((int)SendMessage((hwndCtl), LB_ADDSTRING, 0L, (LPARAM)(LPCTSTR)(lpsz)))\n\n#define ListBox_DeleteString(hwndCtl, index) \\\n\t((int)SendMessage((hwndCtl), LB_DELETESTRING, (WPARAM)(int)(index), 0L))\n\n#define ListBox_Dir(hwndCtl, attrs, lpszFileSpec) \\\n\t((int)SendMessage((hwndCtl), LB_DIR, (WPARAM)(UINT)(attrs), (LPARAM)(LPCTSTR)(lpszFileSpec)))\n\n#define ListBox_Enable(hwndCtl, fEnable) \\\n\tEnableWindow((hwndCtl), (fEnable))\n\n#define ListBox_FindItemData(hwndCtl, indexStart, data) \\\n\t((int)SendMessage((hwndCtl), LB_FINDSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(data)))\n\n#define ListBox_FindString(hwndCtl, indexStart, lpszFind) \\\n\t((int)SendMessage((hwndCtl), LB_FINDSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind)))\n\n#define ListBox_FindStringExact(hwndCtl, indexStart, lpszFind) \\\n\t((int)SendMessage((hwndCtl), LB_FINDSTRINGEXACT, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind)))\n\n#define ListBox_GetCaretIndex(hwndCtl) \\\n\t((int)SendMessage((hwndCtl), LB_GETCARETINDEX, 0L, 0L))\n\n#define ListBox_GetCurSel(hwndCtl) \\\n\t((int)SendMessage((hwndCtl), LB_GETCURSEL, 0L, 0L))\n\n#define ListBox_GetCount(hwndCtl) \\\n\t((int)SendMessage((hwndCtl), LB_GETCOUNT, 0L, 0L))\n\n#define ListBox_GetHorizontalExtent(hwndCtl) \\\n\t((int)SendMessage((hwndCtl), LB_GETHORIZONTALEXTENT, 0L, 0L))\n\n#define ListBox_GetItemData(hwndCtl, index) \\\n\t((LRESULT)SendMessage((hwndCtl), LB_GETITEMDATA, (WPARAM)(int)(index), 0L))\n\n#define ListBox_GetItemHeight(hwndCtl, index) \\\n\t((int)SendMessage((hwndCtl), LB_GETITEMHEIGHT, (WPARAM)(int)(index), 0L))\n\n#define ListBox_GetItemRect(hwndCtl, index, lprc) \\\n\t((int)SendMessage((hwndCtl), LB_GETITEMRECT, (WPARAM)(int)(index), (LPARAM)(RECT *)(lprc)))\n\n#define ListBox_GetSel(hwndCtl, index) \\\n\t((int)SendMessage((hwndCtl), LB_GETSEL, (WPARAM)(int)(index), 0L))\n\n#define ListBox_GetSelCount(hwndCtl) \\\n\t((int)SendMessage((hwndCtl), LB_GETSELCOUNT, 0L, 0L))\n\n#define ListBox_GetSelItems(hwndCtl, cItems, lpItems) \\\n\t((int)SendMessage((hwndCtl), LB_GETSELITEMS, (WPARAM)(int)(cItems), (LPARAM)(int *)(lpItems)))\n\n#define ListBox_GetText(hwndCtl, index, lpszBuffer) \\\n\t((int)SendMessage((hwndCtl), LB_GETTEXT, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(lpszBuffer)))\n\n#define ListBox_GetTextLen(hwndCtl, index) \\\n\t((int)SendMessage((hwndCtl), LB_GETTEXTLEN, (WPARAM)(int)(index), 0L))\n\n#define ListBox_GetTopIndex(hwndCtl) \\\n\t((int)SendMessage((hwndCtl), LB_GETTOPINDEX, 0L, 0L))\n\n#define ListBox_InsertItemData(hwndCtl, index, data) \\\n\t((int)SendMessage((hwndCtl), LB_INSERTSTRING, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(data)))\n\n#define ListBox_InsertString(hwndCtl, index, lpsz) \\\n\t((int)SendMessage((hwndCtl), LB_INSERTSTRING, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(lpsz)))\n\n#define ListBox_ResetContent(hwndCtl) \\\n\t((BOOL)SendMessage((hwndCtl), LB_RESETCONTENT, 0L, 0L))\n\n#define ListBox_SelectItemData(hwndCtl, indexStart, data) \\\n\t((int)SendMessage((hwndCtl), LB_SELECTSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(data)))\n\n#define ListBox_SelectString(hwndCtl, indexStart, lpszFind) \\\n\t((int)SendMessage((hwndCtl), LB_SELECTSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind)))\n\n#define ListBox_SelItemRange(hwndCtl, fSelect, first, last) \\\n\t((int)SendMessage((hwndCtl), LB_SELITEMRANGE, (WPARAM)(BOOL)(fSelect), MAKELPARAM((first), (last))))\n\n#define ListBox_SetCaretIndex(hwndCtl, index) \\\n\t((int)SendMessage((hwndCtl), LB_SETCARETINDEX, (WPARAM)(int)(index), 0L))\n\n#define ListBox_SetColumnWidth(hwndCtl, cxColumn) \\\n\t((void)SendMessage((hwndCtl), LB_SETCOLUMNWIDTH, (WPARAM)(int)(cxColumn), 0L))\n\n#define ListBox_SetCurSel(hwndCtl, index) \\\n\t((int)SendMessage((hwndCtl), LB_SETCURSEL, (WPARAM)(int)(index), 0L))\n\n#define ListBox_SetHorizontalExtent(hwndCtl, cxExtent) \\\n\t((void)SendMessage((hwndCtl), LB_SETHORIZONTALEXTENT, (WPARAM)(int)(cxExtent), 0L))\n\n#define ListBox_SetItemData(hwndCtl, index, data) \\\n\t((int)SendMessage((hwndCtl), LB_SETITEMDATA, (WPARAM)(int)(index), (LPARAM)(DWORD)(data)))\n\n#define ListBox_SetItemHeight(hwndCtl, index, cy) \\\n\t((int)SendMessage((hwndCtl), LB_SETITEMHEIGHT, (WPARAM)(int)(index), MAKELPARAM((cy), 0)))\n\n#define ListBox_SetSel(hwndCtl, fSelect, index) \\\n\t((int)SendMessage((hwndCtl), LB_SETSEL, (WPARAM)(BOOL)(fSelect), (LPARAM)(UINT)(index)))\n\n#define ListBox_SetTabStops(hwndCtl, cTabs, lpTabs) \\\n\t((BOOL)SendMessage((hwndCtl), LB_SETTABSTOPS, (WPARAM)(int)(cTabs), (LPARAM)(int *)(lpTabs)))\n\n#define ListBox_SetTopIndex(hwndCtl, indexTop) \\\n\t((int)SendMessage((hwndCtl), LB_SETTOPINDEX, (WPARAM)(int)(indexTop), 0L))\n\n\n/* Scrollbar Message APIs */\n\n#define ScrollBar_Enable(hwndCtl, flags) \\\n\tEnableScrollBar((hwndCtl), SB_CTL, (flags))\n\n#define ScrollBar_GetPos(hwndCtl) \\\n\tGetScrollPos((hwndCtl), SB_CTL)\n\n#define ScrollBar_GetRange(hwndCtl, lpposMin, lpposMax) \\\n\tGetScrollRange((hwndCtl), SB_CTL, (lpposMin), (lpposMax))\n\n#define ScrollBar_SetPos(hwndCtl, pos, fRedraw) \\\n\tSetScrollPos((hwndCtl), SB_CTL, (pos), (fRedraw))\n\n#define ScrollBar_SetRange(hwndCtl, posMin, posMax, fRedraw) \\\n\tSetScrollRange((hwndCtl), SB_CTL, (posMin), (posMax), (fRedraw))\n\n#define ScrollBar_Show(hwndCtl, fShow) \\\n\tShowWindow((hwndCtl), (fShow) ? SW_SHOWNORMAL : SW_HIDE)\n\n\n/* Static Message APIs */\n\n#define Static_Enable(hwndCtl, fEnable) \\\n\tEnableWindow((hwndCtl), (fEnable))\n\n#define Static_GetIcon(hwndCtl, hIcon) \\\n\t((HICON)SendMessage((hwndCtl), STM_GETICON, 0L, 0L))\n\n#define Static_GetText(hwndCtl, lpch, cchMax) \\\n\tGetWindowText((hwndCtl), (lpch), (cchMax))\n\n#define Static_GetTextLength(hwndCtl) \\\n\tGetWindowTextLength(hwndCtl)\n\n#define Static_SetIcon(hwndCtl, hIcon) \\\n\t((HICON)SendMessage((hwndCtl), STM_SETICON, (WPARAM)(HICON)(hIcon), 0L))\n\n#define Static_SetText(hwndCtl, lpsz) \\\n\tSetWindowText((hwndCtl), (lpsz))\n\n\n/****** Message crackers ****************************************************/\n\n#define HANDLE_MSG(hwnd, message, fn)    \\\n    case (message): return HANDLE_##message((hwnd), (wParam), (lParam), (fn))\n\n/* void Cls_OnCompacting(HWND hwnd, UINT compactRatio) */\n#define HANDLE_WM_COMPACTING(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (UINT)(wParam)), 0L)\n#define FORWARD_WM_COMPACTING(hwnd, compactRatio, fn) \\\n    (void)(fn)((hwnd), WM_COMPACTING, (WPARAM)(UINT)(compactRatio), 0L)\n\n/* void Cls_OnWinIniChange(HWND hwnd, LPCTSTR lpszSectionName) */\n#define HANDLE_WM_WININICHANGE(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (LPCTSTR)(lParam)), 0L)\n#define FORWARD_WM_WININICHANGE(hwnd, lpszSectionName, fn) \\\n    (void)(fn)((hwnd), WM_WININICHANGE, 0L, (LPARAM)(LPCTSTR)(lpszSectionName))\n\n/* void Cls_OnSysColorChange(HWND hwnd) */\n#define HANDLE_WM_SYSCOLORCHANGE(hwnd, wParam, lParam, fn) \\\n    ((fn)(hwnd), 0L)\n#define FORWARD_WM_SYSCOLORCHANGE(hwnd, fn) \\\n    (void)(fn)((hwnd), WM_SYSCOLORCHANGE, 0L, 0L)\n\n/* BOOL Cls_OnQueryNewPalette(HWND hwnd) */\n#define HANDLE_WM_QUERYNEWPALETTE(hwnd, wParam, lParam, fn) \\\n    MAKELRESULT((BOOL)(fn)(hwnd), 0L)\n#define FORWARD_WM_QUERYNEWPALETTE(hwnd, fn) \\\n    (BOOL)(DWORD)(fn)((hwnd), WM_QUERYNEWPALETTE, 0L, 0L)\n\n/* void Cls_OnPaletteIsChanging(HWND hwnd, HWND hwndPaletteChange) */\n#define HANDLE_WM_PALETTEISCHANGING(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HWND)(wParam)), 0L)\n#define FORWARD_WM_PALETTEISCHANGING(hwnd, hwndPaletteChange, fn) \\\n    (void)(fn)((hwnd), WM_PALETTEISCHANGING, (WPARAM)(HWND)(hwndPaletteChange), 0L)\n\n/* void Cls_OnPaletteChanged(HWND hwnd, HWND hwndPaletteChange) */\n#define HANDLE_WM_PALETTECHANGED(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HWND)(wParam)), 0L)\n#define FORWARD_WM_PALETTECHANGED(hwnd, hwndPaletteChange, fn) \\\n    (void)(fn)((hwnd), WM_PALETTECHANGED, (WPARAM)(HWND)(hwndPaletteChange), 0L)\n\n/* void Cls_OnFontChange(HWND hwnd) */\n#define HANDLE_WM_FONTCHANGE(hwnd, wParam, lParam, fn) \\\n    ((fn)(hwnd), 0L)\n#define FORWARD_WM_FONTCHANGE(hwnd, fn) \\\n    (void)(fn)((hwnd), WM_FONTCHANGE, 0L, 0L)\n\n/* void Cls_OnSpoolerStatus(HWND hwnd, UINT status, int cJobInQueue) */\n#define HANDLE_WM_SPOOLERSTATUS(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (UINT)(wParam), (int)(short)LOWORD(lParam)), 0L)\n#define FORWARD_WM_SPOOLERSTATUS(hwnd, status, cJobInQueue, fn) \\\n    (void)(fn)((hwnd), WM_SPOOLERSTATUS, (WPARAM)(status), MAKELPARAM((cJobInQueue), 0))\n\n/* void Cls_OnDevModeChange(HWND hwnd, LPCTSTR lpszDeviceName) */\n#define HANDLE_WM_DEVMODECHANGE(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (LPCTSTR)(lParam)), 0L)\n#define FORWARD_WM_DEVMODECHANGE(hwnd, lpszDeviceName, fn) \\\n    (void)(fn)((hwnd), WM_DEVMODECHANGE, 0L, (LPARAM)(LPCTSTR)(lpszDeviceName))\n\n/* void Cls_OnTimeChange(HWND hwnd) */\n#define HANDLE_WM_TIMECHANGE(hwnd, wParam, lParam, fn) \\\n    ((fn)(hwnd), 0L)\n#define FORWARD_WM_TIMECHANGE(hwnd, fn) \\\n    (void)(fn)((hwnd), WM_TIMECHANGE, 0L, 0L)\n\n/* void Cls_OnPower(HWND hwnd, int code) */\n#define HANDLE_WM_POWER(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (int)(wParam)), 0L)\n#define FORWARD_WM_POWER(hwnd, code, fn) \\\n    (void)(fn)((hwnd), WM_POWER, (WPARAM)(int)(code), 0L)\n\n/* BOOL Cls_OnQueryEndSession(HWND hwnd) */\n#define HANDLE_WM_QUERYENDSESSION(hwnd, wParam, lParam, fn) \\\n    MAKELRESULT((BOOL)(fn)(hwnd), 0L)\n#define FORWARD_WM_QUERYENDSESSION(hwnd, fn) \\\n    (BOOL)(DWORD)(fn)((hwnd), WM_QUERYENDSESSION, 0L, 0L)\n\n/* void Cls_OnEndSession(HWND hwnd, BOOL fEnding) */\n#define HANDLE_WM_ENDSESSION(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (BOOL)(wParam)), 0L)\n#define FORWARD_WM_ENDSESSION(hwnd, fEnding, fn) \\\n    (void)(fn)((hwnd), WM_ENDSESSION, (WPARAM)(BOOL)(fEnding), 0L)\n\n/* void Cls_OnQuit(HWND hwnd, int exitCode) */\n#define HANDLE_WM_QUIT(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (int)(wParam)), 0L)\n#define FORWARD_WM_QUIT(hwnd, exitCode, fn) \\\n    (void)(fn)((hwnd), WM_QUIT, (WPARAM)(exitCode), 0L)\n\n/* This message is in Windows 3.1 only */\n/* void Cls_OnSystemError(HWND hwnd, int errCode) */\n#define HANDLE_WM_SYSTEMERROR(hwnd, wParam, lParam, fn) 0L\n#define FORWARD_WM_SYSTEMERROR(hwnd, errCode, fn) 0L\n\n/* BOOL Cls_OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct) */\n#define HANDLE_WM_CREATE(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (LPCREATESTRUCT)(lParam)) ? 0L : (LRESULT)-1L)\n#define FORWARD_WM_CREATE(hwnd, lpCreateStruct, fn) \\\n    (BOOL)(DWORD)(fn)((hwnd), WM_CREATE, 0L, (LPARAM)(LPCREATESTRUCT)(lpCreateStruct))\n\n/* BOOL Cls_OnNCCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct) */\n#define HANDLE_WM_NCCREATE(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (LPCREATESTRUCT)(lParam))\n#define FORWARD_WM_NCCREATE(hwnd, lpCreateStruct, fn) \\\n    (BOOL)(DWORD)(fn)((hwnd), WM_NCCREATE, 0L, (LPARAM)(LPCREATESTRUCT)(lpCreateStruct))\n\n/* void Cls_OnDestroy(HWND hwnd) */\n#define HANDLE_WM_DESTROY(hwnd, wParam, lParam, fn) \\\n    ((fn)(hwnd), 0L)\n#define FORWARD_WM_DESTROY(hwnd, fn) \\\n    (void)(fn)((hwnd), WM_DESTROY, 0L, 0L)\n\n/* void Cls_OnNCDestroy(HWND hwnd) */\n#define HANDLE_WM_NCDESTROY(hwnd, wParam, lParam, fn) \\\n    ((fn)(hwnd), 0L)\n#define FORWARD_WM_NCDESTROY(hwnd, fn) \\\n    (void)(fn)((hwnd), WM_NCDESTROY, 0L, 0L)\n\n/* void Cls_OnShowWindow(HWND hwnd, BOOL fShow, UINT status) */\n#define HANDLE_WM_SHOWWINDOW(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (BOOL)(wParam), (UINT)(lParam)), 0L)\n#define FORWARD_WM_SHOWWINDOW(hwnd, fShow, status, fn) \\\n    (void)(fn)((hwnd), WM_SHOWWINDOW, (WPARAM)(BOOL)(fShow), (LPARAM)(UINT)(status))\n\n/* void Cls_OnSetRedraw(HWND hwnd, BOOL fRedraw) */\n#define HANDLE_WM_SETREDRAW(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (BOOL)(wParam)), 0L)\n#define FORWARD_WM_SETREDRAW(hwnd, fRedraw, fn) \\\n    (void)(fn)((hwnd), WM_SETREDRAW, (WPARAM)(BOOL)(fRedraw), 0L)\n\n/* void Cls_OnEnable(HWND hwnd, BOOL fEnable) */\n#define HANDLE_WM_ENABLE(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (BOOL)(wParam)), 0L)\n#define FORWARD_WM_ENABLE(hwnd, fEnable, fn) \\\n    (void)(fn)((hwnd), WM_ENABLE, (WPARAM)(BOOL)(fEnable), 0L)\n\n/* void Cls_OnSetText(HWND hwnd, LPCTSTR lpszText) */\n#define HANDLE_WM_SETTEXT(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (LPCTSTR)(lParam)), 0L)\n#define FORWARD_WM_SETTEXT(hwnd, lpszText, fn) \\\n    (void)(fn)((hwnd), WM_SETTEXT, 0L, (LPARAM)(LPCTSTR)(lpszText))\n\n/* INT Cls_OnGetText(HWND hwnd, int cchTextMax, LPTSTR lpszText) */\n#define HANDLE_WM_GETTEXT(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(DWORD)(int)(fn)((hwnd), (int)(wParam), (LPTSTR)(lParam))\n#define FORWARD_WM_GETTEXT(hwnd, cchTextMax, lpszText, fn) \\\n    (int)(DWORD)(fn)((hwnd), WM_GETTEXT, (WPARAM)(int)(cchTextMax), (LPARAM)(LPTSTR)(lpszText))\n\n/* INT Cls_OnGetTextLength(HWND hwnd) */\n#define HANDLE_WM_GETTEXTLENGTH(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(DWORD)(int)(fn)(hwnd)\n#define FORWARD_WM_GETTEXTLENGTH(hwnd, fn) \\\n    (int)(DWORD)(fn)((hwnd), WM_GETTEXTLENGTH, 0L, 0L)\n\n/* BOOL Cls_OnWindowPosChanging(HWND hwnd, LPWINDOWPOS lpwpos) */\n#define HANDLE_WM_WINDOWPOSCHANGING(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (LPWINDOWPOS)(lParam))\n#define FORWARD_WM_WINDOWPOSCHANGING(hwnd, lpwpos, fn) \\\n    (BOOL)(DWORD)(fn)((hwnd), WM_WINDOWPOSCHANGING, 0L, (LPARAM)(LPWINDOWPOS)(lpwpos))\n\n/* void Cls_OnWindowPosChanged(HWND hwnd, const LPWINDOWPOS lpwpos) */\n#define HANDLE_WM_WINDOWPOSCHANGED(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (const LPWINDOWPOS)(lParam)), 0L)\n#define FORWARD_WM_WINDOWPOSCHANGED(hwnd, lpwpos, fn) \\\n    (void)(fn)((hwnd), WM_WINDOWPOSCHANGED, 0L, (LPARAM)(const LPWINDOWPOS)(lpwpos))\n\n/* void Cls_OnMove(HWND hwnd, int x, int y) */\n#define HANDLE_WM_MOVE(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L)\n#define FORWARD_WM_MOVE(hwnd, x, y, fn) \\\n    (void)(fn)((hwnd), WM_MOVE, 0L, MAKELPARAM((x), (y)))\n\n/* void Cls_OnSize(HWND hwnd, UINT state, int cx, int cy) */\n#define HANDLE_WM_SIZE(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (UINT)(wParam), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L)\n#define FORWARD_WM_SIZE(hwnd, state, cx, cy, fn) \\\n    (void)(fn)((hwnd), WM_SIZE, (WPARAM)(UINT)(state), MAKELPARAM((cx), (cy)))\n\n/* void Cls_OnClose(HWND hwnd) */\n#define HANDLE_WM_CLOSE(hwnd, wParam, lParam, fn) \\\n    ((fn)(hwnd), 0L)\n#define FORWARD_WM_CLOSE(hwnd, fn) \\\n    (void)(fn)((hwnd), WM_CLOSE, 0L, 0L)\n\n/* BOOL Cls_OnQueryOpen(HWND hwnd) */\n#define HANDLE_WM_QUERYOPEN(hwnd, wParam, lParam, fn) \\\n    MAKELRESULT((BOOL)(fn)(hwnd), 0L)\n#define FORWARD_WM_QUERYOPEN(hwnd, fn) \\\n    (BOOL)(DWORD)(fn)((hwnd), WM_QUERYOPEN, 0L, 0L)\n\n/* void Cls_OnPaint(HWND hwnd) */\n#define HANDLE_WM_PAINT(hwnd, wParam, lParam, fn) \\\n    ((fn)(hwnd), 0L)\n#define FORWARD_WM_PAINT(hwnd, fn) \\\n    (void)(fn)((hwnd), WM_PAINT, 0L, 0L)\n\n/* BOOL Cls_OnEraseBkgnd(HWND hwnd, HDC hdc) */\n#define HANDLE_WM_ERASEBKGND(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (HDC)(wParam))\n#define FORWARD_WM_ERASEBKGND(hwnd, hdc, fn) \\\n   (BOOL)(DWORD)(fn)((hwnd), WM_ERASEBKGND, (WPARAM)(HDC)(hdc), 0L)\n\n/* BOOL Cls_OnIconEraseBkgnd(HWND hwnd, HDC hdc) */\n#define HANDLE_WM_ICONERASEBKGND(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (HDC)(wParam))\n#define FORWARD_WM_ICONERASEBKGND(hwnd, hdc, fn) \\\n    (BOOL)(DWORD)(fn)((hwnd), WM_ICONERASEBKGND, (WPARAM)(HDC)(hdc), 0L)\n\n/* void Cls_OnNCPaint(HWND hwnd, HRGN hrgn) */\n#define HANDLE_WM_NCPAINT(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HRGN)(wParam)), 0L)\n#define FORWARD_WM_NCPAINT(hwnd, hrgn, fn) \\\n    (void)(fn)((hwnd), WM_NCPAINT, (WPARAM)(HRGN)(hrgn), 0L)\n\n/* UINT Cls_OnNCCalcSize(HWND hwnd, BOOL fCalcValidRects, NCCALCSIZE_PARAMS * lpcsp) */\n#define HANDLE_WM_NCCALCSIZE(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(DWORD)(UINT)(fn)((hwnd), (BOOL)(0), (NCCALCSIZE_PARAMS *)(lParam))\n#define FORWARD_WM_NCCALCSIZE(hwnd, fCalcValidRects, lpcsp, fn) \\\n    (UINT)(DWORD)(fn)((hwnd), WM_NCCALCSIZE, 0L, (LPARAM)(NCCALCSIZE_PARAMS *)(lpcsp))\n\n/* HICON Cls_OnQueryDragIcon(HWND hwnd) */\n#define HANDLE_WM_QUERYDRAGICON(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(DWORD)(UINT)(fn)(hwnd)\n#define FORWARD_WM_QUERYDRAGICON(hwnd, fn) \\\n    (HICON)(UINT)(DWORD)(fn)((hwnd), WM_QUERYDRAGICON, 0L, 0L)\n\n/* void Cls_OnDropFiles(HWND hwnd, HDROP hdrop) */\n#define HANDLE_WM_DROPFILES(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HDROP)(wParam)), 0L)\n#define FORWARD_WM_DROPFILES(hwnd, hdrop, fn) \\\n    (void)(fn)((hwnd), WM_DROPFILES, (WPARAM)(HDROP)(hdrop), 0L)\n\n/* void Cls_OnActivate(HWND hwnd, UINT state, HWND hwndActDeact, BOOL fMinimized) */\n#define HANDLE_WM_ACTIVATE(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (UINT)LOWORD(wParam), (HWND)(lParam), (BOOL)HIWORD(wParam)), 0L)\n#define FORWARD_WM_ACTIVATE(hwnd, state, hwndActDeact, fMinimized, fn) \\\n    (void)(fn)((hwnd), WM_ACTIVATE, MAKEWPARAM((state), (fMinimized)), (LPARAM)(HWND)(hwndActDeact))\n\n/* void Cls_OnActivateApp(HWND hwnd, BOOL fActivate, DWORD dwThreadId) */\n#define HANDLE_WM_ACTIVATEAPP(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (BOOL)(wParam), (DWORD)(lParam)), 0L)\n#define FORWARD_WM_ACTIVATEAPP(hwnd, fActivate, dwThreadId, fn) \\\n    (void)(fn)((hwnd), WM_ACTIVATEAPP, (WPARAM)(BOOL)(fActivate), (LPARAM)(dwThreadId))\n\n/* BOOL Cls_OnNCActivate(HWND hwnd, BOOL fActive, HWND hwndActDeact, BOOL fMinimized) */\n#define HANDLE_WM_NCACTIVATE(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (BOOL)(wParam), 0L, 0L)\n#define FORWARD_WM_NCACTIVATE(hwnd, fActive, hwndActDeact, fMinimized, fn) \\\n    (BOOL)(DWORD)(fn)((hwnd), WM_NCACTIVATE, (WPARAM)(BOOL)(fActive), 0L)\n\n/* void Cls_OnSetFocus(HWND hwnd, HWND hwndOldFocus) */\n#define HANDLE_WM_SETFOCUS(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HWND)(wParam)), 0L)\n#define FORWARD_WM_SETFOCUS(hwnd, hwndOldFocus, fn) \\\n    (void)(fn)((hwnd), WM_SETFOCUS, (WPARAM)(HWND)(hwndOldFocus), 0L)\n\n/* void Cls_OnKillFocus(HWND hwnd, HWND hwndNewFocus) */\n#define HANDLE_WM_KILLFOCUS(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HWND)(wParam)), 0L)\n#define FORWARD_WM_KILLFOCUS(hwnd, hwndNewFocus, fn) \\\n    (void)(fn)((hwnd), WM_KILLFOCUS, (WPARAM)(HWND)(hwndNewFocus), 0L)\n\n/* void Cls_OnKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) */\n#define HANDLE_WM_KEYDOWN(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (UINT)(wParam), TRUE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)\n#define FORWARD_WM_KEYDOWN(hwnd, vk, cRepeat, flags, fn) \\\n    (void)(fn)((hwnd), WM_KEYDOWN, (WPARAM)(UINT)(vk), MAKELPARAM((cRepeat), (flags)))\n\n/* void Cls_OnKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) */\n#define HANDLE_WM_KEYUP(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (UINT)(wParam), FALSE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)\n#define FORWARD_WM_KEYUP(hwnd, vk, cRepeat, flags, fn) \\\n    (void)(fn)((hwnd), WM_KEYUP, (WPARAM)(UINT)(vk), MAKELPARAM((cRepeat), (flags)))\n\n/* void Cls_OnChar(HWND hwnd, TCHAR ch, int cRepeat) */\n#define HANDLE_WM_CHAR(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (TCHAR)(wParam), (int)(short)LOWORD(lParam)), 0L)\n#define FORWARD_WM_CHAR(hwnd, ch, cRepeat, fn) \\\n    (void)(fn)((hwnd), WM_CHAR, (WPARAM)(TCHAR)(ch), MAKELPARAM((cRepeat),0))\n\n/* void Cls_OnDeadChar(HWND hwnd, TCHAR ch, int cRepeat) */\n#define HANDLE_WM_DEADCHAR(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (TCHAR)(wParam), (int)(short)LOWORD(lParam)), 0L)\n#define FORWARD_WM_DEADCHAR(hwnd, ch, cRepeat, fn) \\\n    (void)(fn)((hwnd), WM_DEADCHAR, (WPARAM)(TCHAR)(ch), MAKELPARAM((cRepeat),0))\n\n/* void Cls_OnSysKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) */\n#define HANDLE_WM_SYSKEYDOWN(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (UINT)(wParam), TRUE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)\n#define FORWARD_WM_SYSKEYDOWN(hwnd, vk, cRepeat, flags, fn) \\\n    (void)(fn)((hwnd), WM_SYSKEYDOWN, (WPARAM)(UINT)(vk), MAKELPARAM((cRepeat), (flags)))\n\n/* void Cls_OnSysKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) */\n#define HANDLE_WM_SYSKEYUP(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (UINT)(wParam), FALSE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)\n#define FORWARD_WM_SYSKEYUP(hwnd, vk, cRepeat, flags, fn) \\\n    (void)(fn)((hwnd), WM_SYSKEYUP, (WPARAM)(UINT)(vk), MAKELPARAM((cRepeat), (flags)))\n\n/* void Cls_OnSysChar(HWND hwnd, TCHAR ch, int cRepeat) */\n#define HANDLE_WM_SYSCHAR(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (TCHAR)(wParam), (int)(short)LOWORD(lParam)), 0L)\n#define FORWARD_WM_SYSCHAR(hwnd, ch, cRepeat, fn) \\\n    (void)(fn)((hwnd), WM_SYSCHAR, (WPARAM)(TCHAR)(ch), MAKELPARAM((cRepeat), 0))\n\n/* void Cls_OnSysDeadChar(HWND hwnd, TCHAR ch, int cRepeat) */\n#define HANDLE_WM_SYSDEADCHAR(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (TCHAR)(wParam), (int)(short)LOWORD(lParam)), 0L)\n#define FORWARD_WM_SYSDEADCHAR(hwnd, ch, cRepeat, fn) \\\n    (void)(fn)((hwnd), WM_SYSDEADCHAR, (WPARAM)(TCHAR)(ch), MAKELPARAM((cRepeat), 0))\n\n/* void Cls_OnMouseMove(HWND hwnd, int x, int y, UINT keyFlags) */\n#define HANDLE_WM_MOUSEMOVE(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)\n#define FORWARD_WM_MOUSEMOVE(hwnd, x, y, keyFlags, fn) \\\n    (void)(fn)((hwnd), WM_MOUSEMOVE, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))\n\n/* void Cls_OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */\n#define HANDLE_WM_LBUTTONDOWN(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)\n#define FORWARD_WM_LBUTTONDOWN(hwnd, fDoubleClick, x, y, keyFlags, fn) \\\n    (void)(fn)((hwnd), (fDoubleClick) ? WM_LBUTTONDBLCLK : WM_LBUTTONDOWN, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))\n\n/* void Cls_OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */\n#define HANDLE_WM_LBUTTONDBLCLK(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)\n\n/* void Cls_OnLButtonUp(HWND hwnd, int x, int y, UINT keyFlags) */\n#define HANDLE_WM_LBUTTONUP(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)\n#define FORWARD_WM_LBUTTONUP(hwnd, x, y, keyFlags, fn) \\\n    (void)(fn)((hwnd), WM_LBUTTONUP, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))\n\n/* void Cls_OnRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */\n#define HANDLE_WM_RBUTTONDOWN(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)\n#define FORWARD_WM_RBUTTONDOWN(hwnd, fDoubleClick, x, y, keyFlags, fn) \\\n    (void)(fn)((hwnd), (fDoubleClick) ? WM_RBUTTONDBLCLK : WM_RBUTTONDOWN, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))\n\n/* void Cls_OnRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */\n#define HANDLE_WM_RBUTTONDBLCLK(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)\n\n/* void Cls_OnRButtonUp(HWND hwnd, int x, int y, UINT flags) */\n#define HANDLE_WM_RBUTTONUP(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)\n#define FORWARD_WM_RBUTTONUP(hwnd, x, y, keyFlags, fn) \\\n    (void)(fn)((hwnd), WM_RBUTTONUP, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))\n\n/* void Cls_OnMButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */\n#define HANDLE_WM_MBUTTONDOWN(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)\n#define FORWARD_WM_MBUTTONDOWN(hwnd, fDoubleClick, x, y, keyFlags, fn) \\\n    (void)(fn)((hwnd), (fDoubleClick) ? WM_MBUTTONDBLCLK : WM_MBUTTONDOWN, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))\n\n/* void Cls_OnMButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */\n#define HANDLE_WM_MBUTTONDBLCLK(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)\n\n/* void Cls_OnMButtonUp(HWND hwnd, int x, int y, UINT flags) */\n#define HANDLE_WM_MBUTTONUP(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)\n#define FORWARD_WM_MBUTTONUP(hwnd, x, y, keyFlags, fn) \\\n    (void)(fn)((hwnd), WM_MBUTTONUP, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))\n\n/* void Cls_OnNCMouseMove(HWND hwnd, int x, int y, UINT codeHitTest) */\n#define HANDLE_WM_NCMOUSEMOVE(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)\n#define FORWARD_WM_NCMOUSEMOVE(hwnd, x, y, codeHitTest, fn) \\\n    (void)(fn)((hwnd), WM_NCMOUSEMOVE, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)))\n\n/* void Cls_OnNCLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */\n#define HANDLE_WM_NCLBUTTONDOWN(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)\n#define FORWARD_WM_NCLBUTTONDOWN(hwnd, fDoubleClick, x, y, codeHitTest, fn) \\\n    (void)(fn)((hwnd), (fDoubleClick) ? WM_NCLBUTTONDBLCLK : WM_NCLBUTTONDOWN, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)))\n\n/* void Cls_OnNCLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */\n#define HANDLE_WM_NCLBUTTONDBLCLK(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)\n\n/* void Cls_OnNCLButtonUp(HWND hwnd, int x, int y, UINT codeHitTest) */\n#define HANDLE_WM_NCLBUTTONUP(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)\n#define FORWARD_WM_NCLBUTTONUP(hwnd, x, y, codeHitTest, fn) \\\n    (void)(fn)((hwnd), WM_NCLBUTTONUP, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)))\n\n/* void Cls_OnNCRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */\n#define HANDLE_WM_NCRBUTTONDOWN(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)\n#define FORWARD_WM_NCRBUTTONDOWN(hwnd, fDoubleClick, x, y, codeHitTest, fn) \\\n    (void)(fn)((hwnd), (fDoubleClick) ? WM_NCRBUTTONDBLCLK : WM_NCRBUTTONDOWN, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)) )\n\n/* void Cls_OnNCRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */\n#define HANDLE_WM_NCRBUTTONDBLCLK(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)\n\n/* void Cls_OnNCRButtonUp(HWND hwnd, int x, int y, UINT codeHitTest) */\n#define HANDLE_WM_NCRBUTTONUP(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)\n#define FORWARD_WM_NCRBUTTONUP(hwnd, x, y, codeHitTest, fn) \\\n    (void)(fn)((hwnd), WM_NCRBUTTONUP, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)) )\n\n/* void Cls_OnNCMButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */\n#define HANDLE_WM_NCMBUTTONDOWN(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)\n#define FORWARD_WM_NCMBUTTONDOWN(hwnd, fDoubleClick, x, y, codeHitTest, fn) \\\n    (void)(fn)((hwnd), (fDoubleClick) ? WM_NCMBUTTONDBLCLK : WM_NCMBUTTONDOWN, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)) )\n\n/* void Cls_OnNCMButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */\n#define HANDLE_WM_NCMBUTTONDBLCLK(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)\n\n/* void Cls_OnNCMButtonUp(HWND hwnd, int x, int y, UINT codeHitTest) */\n#define HANDLE_WM_NCMBUTTONUP(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)\n#define FORWARD_WM_NCMBUTTONUP(hwnd, x, y, codeHitTest, fn) \\\n    (void)(fn)((hwnd), WM_NCMBUTTONUP, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)) )\n\n/* int Cls_OnMouseActivate(HWND hwnd, HWND hwndTopLevel, UINT codeHitTest, UINT msg) */\n#define HANDLE_WM_MOUSEACTIVATE(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(DWORD)(int)(fn)((hwnd), (HWND)(wParam), (UINT)LOWORD(lParam), (UINT)HIWORD(lParam))\n#define FORWARD_WM_MOUSEACTIVATE(hwnd, hwndTopLevel, codeHitTest, msg, fn) \\\n    (int)(DWORD)(fn)((hwnd), WM_MOUSEACTIVATE, (WPARAM)(HWND)(hwndTopLevel), MAKELPARAM((codeHitTest), (msg)))\n\n/* void Cls_OnCancelMode(HWND hwnd) */\n#define HANDLE_WM_CANCELMODE(hwnd, wParam, lParam, fn)  ((fn)(hwnd), 0L)\n#define FORWARD_WM_CANCELMODE(hwnd, fn)  (void)(fn)((hwnd), WM_CANCELMODE, 0L, 0L)\n\n/* void Cls_OnInitMenu(HWND hwnd, HMENU hMenu) */\n#define HANDLE_WM_INITMENU(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HMENU)(wParam)), 0L)\n#define FORWARD_WM_INITMENU(hwnd, hMenu, fn) \\\n    (void)(fn)((hwnd), WM_INITMENU, (WPARAM)(HMENU)(hMenu), 0L)\n\n/* void Cls_OnMenuSelect(HWND hwnd, HMENU hmenu, int item, HMENU hmenuPopup, UINT flags) */\n#define HANDLE_WM_MENUSELECT(hwnd, wParam, lParam, fn)                  \\\n    ((fn)((hwnd), (HMENU)(lParam),  \\\n    (HIWORD(wParam) & MF_POPUP) ? 0L : (int)(LOWORD(wParam)),           \\\n    (HIWORD(wParam) & MF_POPUP) ? GetSubMenu((HMENU)lParam, LOWORD(wParam)) : 0L, \\\n    (UINT)(((short)HIWORD(wParam) == -1) ? 0xFFFFFFFF : HIWORD(wParam))), 0L)\n#define FORWARD_WM_MENUSELECT(hwnd, hmenu, item, hmenuPopup, flags, fn) \\\n    (void)(fn)((hwnd), WM_MENUSELECT, MAKEWPARAM((item), (flags)), (LPARAM)(HMENU)((hmenu) ? (hmenu) : (hmenuPopup)))\n\n/* DWORD Cls_OnMenuChar(HWND hwnd, UINT ch, UINT flags, HMENU hmenu) */\n#define HANDLE_WM_MENUCHAR(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(DWORD)(fn)((hwnd), (UINT)(LOWORD(wParam)), (UINT)HIWORD(wParam), (HMENU)(lParam))\n#define FORWARD_WM_MENUCHAR(hwnd, ch, flags, hmenu, fn) \\\n    (DWORD)(fn)((hwnd), WM_MENUCHAR, MAKEWPARAM(flags, (WORD)(ch)), (LPARAM)(HMENU)(hmenu))\n\n/* void Cls_OnHScroll(HWND hwnd, HWND hwndCtl, UINT code, int pos) */\n#define HANDLE_WM_HSCROLL(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HWND)(lParam), (UINT)(LOWORD(wParam)), (int)(short)HIWORD(wParam)), 0L)\n#define FORWARD_WM_HSCROLL(hwnd, hwndCtl, code, pos, fn) \\\n    (void)(fn)((hwnd), WM_HSCROLL, MAKEWPARAM((UINT)(int)(code),(UINT)(int)(pos)), (LPARAM)(UINT)(hwndCtl))\n\n/* void Cls_OnVScroll(HWND hwnd, HWND hwndCtl, UINT code, int pos) */\n#define HANDLE_WM_VSCROLL(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HWND)(lParam), (UINT)(LOWORD(wParam)),  (int)(short)HIWORD(wParam)), 0L)\n#define FORWARD_WM_VSCROLL(hwnd, hwndCtl, code, pos, fn) \\\n    (void)(fn)((hwnd), WM_VSCROLL, MAKEWPARAM((UINT)(int)(code), (UINT)(int)(pos)), (LPARAM)(HWND)(hwndCtl))\n\n/* void Cls_OnCut(HWND hwnd) */\n#define HANDLE_WM_CUT(hwnd, wParam, lParam, fn)  ((fn)(hwnd), 0L)\n#define FORWARD_WM_CUT(hwnd, fn)  (void)(fn)((hwnd), WM_CUT, 0L, 0L)\n\n/* void Cls_OnCopy(HWND hwnd) */\n#define HANDLE_WM_COPY(hwnd, wParam, lParam, fn)  ((fn)(hwnd), 0L)\n#define FORWARD_WM_COPY(hwnd, fn)  (void)(fn)((hwnd), WM_COPY, 0L, 0L)\n\n/* void Cls_OnPaste(HWND hwnd) */\n#define HANDLE_WM_PASTE(hwnd, wParam, lParam, fn)  ((fn)(hwnd), 0L)\n#define FORWARD_WM_PASTE(hwnd, fn)  (void)(fn)((hwnd), WM_PASTE, 0L, 0L)\n\n/* void Cls_OnClear(HWND hwnd) */\n#define HANDLE_WM_CLEAR(hwnd, wParam, lParam, fn)  ((fn)(hwnd), 0L)\n#define FORWARD_WM_CLEAR(hwnd, fn)  (void)(fn)((hwnd), WM_CLEAR, 0L, 0L)\n\n/* void Cls_OnUndo(HWND hwnd) */\n#define HANDLE_WM_UNDO(hwnd, wParam, lParam, fn)  ((fn)(hwnd), 0L)\n#define FORWARD_WM_UNDO(hwnd, fn)  (void)(fn)((hwnd), WM_UNDO, 0L, 0L)\n\n/* HANDLE Cls_OnRenderFormat(HWND hwnd, UINT fmt) */\n#define HANDLE_WM_RENDERFORMAT(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(UINT_PTR)(HANDLE)(fn)((hwnd), (UINT)(wParam))\n#define FORWARD_WM_RENDERFORMAT(hwnd, fmt, fn) \\\n    (HANDLE)(UINT_PTR)(fn)((hwnd), WM_RENDERFORMAT, (WPARAM)(UINT)(fmt), 0L)\n\n/* void Cls_OnRenderAllFormats(HWND hwnd) */\n#define HANDLE_WM_RENDERALLFORMATS(hwnd, wParam, lParam, fn)  ((fn)(hwnd), 0L)\n#define FORWARD_WM_RENDERALLFORMATS(hwnd, fn)  (void)(fn)((hwnd), WM_RENDERALLFORMATS, 0L, 0L)\n\n/* void Cls_OnDestroyClipboard(HWND hwnd) */\n#define HANDLE_WM_DESTROYCLIPBOARD(hwnd, wParam, lParam, fn)  ((fn)(hwnd), 0L)\n#define FORWARD_WM_DESTROYCLIPBOARD(hwnd, fn)  (void)(fn)((hwnd), WM_DESTROYCLIPBOARD, 0L, 0L)\n\n/* void Cls_OnDrawClipboard(HWND hwnd) */\n#define HANDLE_WM_DRAWCLIPBOARD(hwnd, wParam, lParam, fn)  ((fn)(hwnd), 0L)\n#define FORWARD_WM_DRAWCLIPBOARD(hwnd, fn)  (void)(fn)((hwnd), WM_DRAWCLIPBOARD, 0L, 0L)\n\n/* void Cls_OnPaintClipboard(HWND hwnd, HWND hwndCBViewer, const LPPAINTSTRUCT lpPaintStruct) */\n#define HANDLE_WM_PAINTCLIPBOARD(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HWND)(wParam), (const LPPAINTSTRUCT)GlobalLock((HGLOBAL)(lParam))), GlobalUnlock((HGLOBAL)(lParam)), 0L)\n#define FORWARD_WM_PAINTCLIPBOARD(hwnd, hwndCBViewer, lpPaintStruct, fn) \\\n    (void)(fn)((hwnd), WM_PAINTCLIPBOARD, (WPARAM)(HWND)(hwndCBViewer), (LPARAM)(LPPAINTSTRUCT)(lpPaintStruct))\n\n/* void Cls_OnSizeClipboard(HWND hwnd, HWND hwndCBViewer, const LPRECT lprc) */\n#define HANDLE_WM_SIZECLIPBOARD(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HWND)(wParam), (const LPRECT)GlobalLock((HGLOBAL)(lParam))), GlobalUnlock((HGLOBAL)(lParam)), 0L)\n#define FORWARD_WM_SIZECLIPBOARD(hwnd, hwndCBViewer, lprc, fn) \\\n    (void)(fn)((hwnd), WM_SIZECLIPBOARD, (WPARAM)(HWND)(hwndCBViewer), (LPARAM)(LPRECT)(lprc))\n\n/* void Cls_OnVScrollClipboard(HWND hwnd, HWND hwndCBViewer, UINT code, int pos) */\n#define HANDLE_WM_VSCROLLCLIPBOARD(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HWND)(wParam), (UINT)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L)\n#define FORWARD_WM_VSCROLLCLIPBOARD(hwnd, hwndCBViewer, code, pos, fn) \\\n    (void)(fn)((hwnd), WM_VSCROLLCLIPBOARD, (WPARAM)(HWND)(hwndCBViewer), MAKELPARAM((code), (pos)))\n\n/* void Cls_OnHScrollClipboard(HWND hwnd, HWND hwndCBViewer, UINT code, int pos) */\n#define HANDLE_WM_HSCROLLCLIPBOARD(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HWND)(wParam), (UINT)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L)\n#define FORWARD_WM_HSCROLLCLIPBOARD(hwnd, hwndCBViewer, code, pos, fn) \\\n    (void)(fn)((hwnd), WM_HSCROLLCLIPBOARD, (WPARAM)(HWND)(hwndCBViewer), MAKELPARAM((code), (pos)))\n\n/* void Cls_OnAskCBFormatName(HWND hwnd, int cchMax, LPTSTR rgchName) */\n#define HANDLE_WM_ASKCBFORMATNAME(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (int)(wParam), (LPTSTR)(lParam)), 0L)\n#define FORWARD_WM_ASKCBFORMATNAME(hwnd, cchMax, rgchName, fn) \\\n    (void)(fn)((hwnd), WM_ASKCBFORMATNAME, (WPARAM)(int)(cchMax), (LPARAM)(rgchName))\n\n/* void Cls_OnChangeCBChain(HWND hwnd, HWND hwndRemove, HWND hwndNext) */\n#define HANDLE_WM_CHANGECBCHAIN(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HWND)(wParam), (HWND)(lParam)), 0L)\n#define FORWARD_WM_CHANGECBCHAIN(hwnd, hwndRemove, hwndNext, fn) \\\n    (void)(fn)((hwnd), WM_CHANGECBCHAIN, (WPARAM)(HWND)(hwndRemove), (LPARAM)(HWND)(hwndNext))\n\n/* BOOL Cls_OnSetCursor(HWND hwnd, HWND hwndCursor, UINT codeHitTest, UINT msg) */\n#define HANDLE_WM_SETCURSOR(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (HWND)(wParam), (UINT)LOWORD(lParam), (UINT)HIWORD(lParam))\n#define FORWARD_WM_SETCURSOR(hwnd, hwndCursor, codeHitTest, msg, fn) \\\n    (BOOL)(DWORD)(fn)((hwnd), WM_SETCURSOR, (WPARAM)(HWND)(hwndCursor), MAKELPARAM((codeHitTest), (msg)))\n\n/* void Cls_OnSysCommand(HWND hwnd, UINT cmd, int x, int y) */\n#define HANDLE_WM_SYSCOMMAND(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (UINT)(wParam), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L)\n#define FORWARD_WM_SYSCOMMAND(hwnd, cmd, x, y, fn) \\\n    (void)(fn)((hwnd), WM_SYSCOMMAND, (WPARAM)(UINT)(cmd), MAKELPARAM((x), (y)))\n\n/* HWND Cls_MDICreate(HWND hwnd, const LPMDICREATESTRUCT lpmcs) */\n#define HANDLE_WM_MDICREATE(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(DWORD)(UINT)(fn)((hwnd), (LPMDICREATESTRUCT)(lParam))\n#define FORWARD_WM_MDICREATE(hwnd, lpmcs, fn) \\\n    (HWND)(UINT)(DWORD)(fn)((hwnd), WM_MDICREATE, 0L, (LPARAM)(LPMDICREATESTRUCT)(lpmcs))\n\n/* void Cls_MDIDestroy(HWND hwnd, HWND hwndDestroy) */\n#define HANDLE_WM_MDIDESTROY(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HWND)(wParam)), 0L)\n#define FORWARD_WM_MDIDESTROY(hwnd, hwndDestroy, fn) \\\n    (void)(fn)((hwnd), WM_MDIDESTROY, (WPARAM)(hwndDestroy), 0L)\n\n/* NOTE: Usable only by MDI client windows */\n/* void Cls_MDIActivate(HWND hwnd, BOOL fActive, HWND hwndActivate, HWND hwndDeactivate) */\n#define HANDLE_WM_MDIACTIVATE(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (BOOL)(lParam == (LPARAM)hwnd), (HWND)(lParam), (HWND)(wParam)), 0L)\n#define FORWARD_WM_MDIACTIVATE(hwnd, fActive, hwndActivate, hwndDeactivate, fn) \\\n    (void)(fn)(hwnd, WM_MDIACTIVATE, (WPARAM)(hwndDeactivate), (LPARAM)(hwndActivate))\n\n/* void Cls_MDIRestore(HWND hwnd, HWND hwndRestore) */\n#define HANDLE_WM_MDIRESTORE(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HWND)(wParam)), 0L)\n#define FORWARD_WM_MDIRESTORE(hwnd, hwndRestore, fn) \\\n    (void)(fn)((hwnd), WM_MDIRESTORE, (WPARAM)(hwndRestore), 0L)\n\n/* HWND Cls_MDINext(HWND hwnd, HWND hwndCur, BOOL fPrev) */\n#define HANDLE_WM_MDINEXT(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(HWND)(fn)((hwnd), (HWND)(wParam), (BOOL)lParam)\n#define FORWARD_WM_MDINEXT(hwnd, hwndCur, fPrev, fn) \\\n    (HWND)(UINT_PTR)(fn)((hwnd), WM_MDINEXT, (WPARAM)(hwndCur), (LPARAM)(fPrev))\n\n/* void Cls_MDIMaximize(HWND hwnd, HWND hwndMaximize) */\n#define HANDLE_WM_MDIMAXIMIZE(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HWND)(wParam)), 0L)\n#define FORWARD_WM_MDIMAXIMIZE(hwnd, hwndMaximize, fn) \\\n    (void)(fn)((hwnd), WM_MDIMAXIMIZE, (WPARAM)(hwndMaximize), 0L)\n\n/* BOOL Cls_MDITile(HWND hwnd, UINT cmd) */\n#define HANDLE_WM_MDITILE(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(DWORD)(fn)((hwnd), (UINT)(wParam))\n#define FORWARD_WM_MDITILE(hwnd, cmd, fn) \\\n    (BOOL)(DWORD)(fn)((hwnd), WM_MDITILE, (WPARAM)(cmd), 0L)\n\n/* BOOL Cls_MDICascade(HWND hwnd, UINT cmd) */\n#define HANDLE_WM_MDICASCADE(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(DWORD)(fn)((hwnd), (UINT)(wParam))\n#define FORWARD_WM_MDICASCADE(hwnd, cmd, fn) \\\n    (BOOL)(DWORD)(fn)((hwnd), WM_MDICASCADE, (WPARAM)(cmd), 0L)\n\n/* void Cls_MDIIconArrange(HWND hwnd) */\n#define HANDLE_WM_MDIICONARRANGE(hwnd, wParam, lParam, fn) \\\n    ((fn)(hwnd), 0L)\n#define FORWARD_WM_MDIICONARRANGE(hwnd, fn) \\\n    (void)(fn)((hwnd), WM_MDIICONARRANGE, 0L, 0L)\n\n/* HWND Cls_MDIGetActive(HWND hwnd) */\n#define HANDLE_WM_MDIGETACTIVE(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(UINT_PTR)(fn)(hwnd)\n#define FORWARD_WM_MDIGETACTIVE(hwnd, fn) \\\n    (HWND)(UINT_PTR)(fn)((hwnd), WM_MDIGETACTIVE, 0L, 0L)\n\n/* HMENU Cls_MDISetMenu(HWND hwnd, BOOL fRefresh, HMENU hmenuFrame, HMENU hmenuWindow) */\n#define HANDLE_WM_MDISETMENU(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(UINT_PTR)(fn)((hwnd), (BOOL)(wParam), (HMENU)(wParam), (HMENU)(lParam))\n#define FORWARD_WM_MDISETMENU(hwnd, fRefresh, hmenuFrame, hmenuWindow, fn) \\\n    (HMENU)(UINT_PTR)(fn)((hwnd), WM_MDISETMENU, (WPARAM)((fRefresh) ? (hmenuFrame) : 0), (LPARAM)(hmenuWindow))\n\n/* void Cls_OnChildActivate(HWND hwnd) */\n#define HANDLE_WM_CHILDACTIVATE(hwnd, wParam, lParam, fn) \\\n    ((fn)(hwnd), 0L)\n#define FORWARD_WM_CHILDACTIVATE(hwnd, fn) \\\n    (void)(fn)((hwnd), WM_CHILDACTIVATE, 0L, 0L)\n\n/* BOOL Cls_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) */\n#define HANDLE_WM_INITDIALOG(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(DWORD)(UINT)(BOOL)(fn)((hwnd), (HWND)(wParam), lParam)\n#define FORWARD_WM_INITDIALOG(hwnd, hwndFocus, lParam, fn) \\\n    (BOOL)(DWORD)(fn)((hwnd), WM_INITDIALOG, (WPARAM)(HWND)(hwndFocus), (lParam))\n\n/* HWND Cls_OnNextDlgCtl(HWND hwnd, HWND hwndSetFocus, BOOL fNext) */\n#define HANDLE_WM_NEXTDLGCTL(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(UINT_PTR)(HWND)(fn)((hwnd), (HWND)(wParam), (BOOL)(lParam))\n#define FORWARD_WM_NEXTDLGCTL(hwnd, hwndSetFocus, fNext, fn) \\\n    (HWND)(UINT_PTR)(fn)((hwnd), WM_NEXTDLGCTL, (WPARAM)(HWND)(hwndSetFocus), (LPARAM)(fNext))\n\n/* void Cls_OnParentNotify(HWND hwnd, UINT msg, HWND hwndChild, int idChild) */\n#define HANDLE_WM_PARENTNOTIFY(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (UINT)LOWORD(wParam), (HWND)(lParam), (UINT)HIWORD(wParam)), 0L)\n#define FORWARD_WM_PARENTNOTIFY(hwnd, msg, hwndChild, idChild, fn) \\\n    (void)(fn)((hwnd), WM_PARENTNOTIFY, MAKEWPARAM(msg, idChild), (LPARAM)(hwndChild))\n\n/* void Cls_OnEnterIdle(HWND hwnd, UINT source, HWND hwndSource) */\n#define HANDLE_WM_ENTERIDLE(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (UINT)(wParam), (HWND)(lParam)), 0L)\n#define FORWARD_WM_ENTERIDLE(hwnd, source, hwndSource, fn) \\\n    (void)(fn)((hwnd), WM_ENTERIDLE, (WPARAM)(UINT)(source), (LPARAM)(HWND)(hwndSource))\n\n/* UINT Cls_OnGetDlgCode(HWND hwnd, LPMSG lpmsg) */\n#define HANDLE_WM_GETDLGCODE(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(DWORD)(UINT)(fn)(hwnd, (LPMSG)(lParam))\n#define FORWARD_WM_GETDLGCODE(hwnd, lpmsg, fn) \\\n    (UINT)(DWORD)(fn)((hwnd), WM_GETDLGCODE, (lpmsg ? lpmsg->wParam : 0), (LPARAM)(LPMSG)(lpmsg))\n\n/* HBRUSH Cls_OnCtlColor(HWND hwnd, HDC hdc, HWND hwndChild, int type) */\n#define HANDLE_WM_CTLCOLORMSGBOX(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(UINT_PTR)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_MSGBOX)\n#define FORWARD_WM_CTLCOLORMSGBOX(hwnd, hdc, hwndChild, fn) \\\n    (HBRUSH)(UINT_PTR)(fn)((hwnd), WM_CTLCOLORMSGBOX, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))\n\n#define HANDLE_WM_CTLCOLOREDIT(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(UINT_PTR)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_EDIT)\n#define FORWARD_WM_CTLCOLOREDIT(hwnd, hdc, hwndChild, fn) \\\n    (HBRUSH)(UINT_PTR)(fn)((hwnd), WM_CTLCOLOREDIT, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))\n\n#define HANDLE_WM_CTLCOLORLISTBOX(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(UINT_PTR)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_LISTBOX)\n#define FORWARD_WM_CTLCOLORLISTBOX(hwnd, hdc, hwndChild, fn) \\\n    (HBRUSH)(UINT_PTR)(fn)((hwnd), WM_CTLCOLORLISTBOX, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))\n\n#define HANDLE_WM_CTLCOLORBTN(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(UINT_PTR)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_BTN)\n#define FORWARD_WM_CTLCOLORBTN(hwnd, hdc, hwndChild, fn) \\\n    (HBRUSH)(UINT_PTR)(fn)((hwnd), WM_CTLCOLORBTN, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))\n\n#define HANDLE_WM_CTLCOLORDLG(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(UINT_PTR)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_DLG)\n#define FORWARD_WM_CTLCOLORDLG(hwnd, hdc, hwndChild, fn) \\\n    (HBRUSH)(UINT_PTR)(fn)((hwnd), WM_CTLCOLORDLG, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))\n\n#define HANDLE_WM_CTLCOLORSCROLLBAR(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(UINT_PTR)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_SCROLLBAR)\n#define FORWARD_WM_CTLCOLORSCROLLBAR(hwnd, hdc, hwndChild, fn) \\\n    (HBRUSH)(UINT_PTR)(fn)((hwnd), WM_CTLCOLORSCROLLBAR, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))\n\n#define HANDLE_WM_CTLCOLORSTATIC(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(UINT_PTR)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_STATIC)\n#define FORWARD_WM_CTLCOLORSTATIC(hwnd, hdc, hwndChild, fn) \\\n    (HBRUSH)(UINT_PTR)(fn)((hwnd), WM_CTLCOLORSTATIC, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))\n\n/* void Cls_OnDeleteItem(HWND hwnd, const DELETEITEMSTRUCT * lpDeleteItem) */\n#define HANDLE_WM_DELETEITEM(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (const DELETEITEMSTRUCT *)(lParam)), 0L)\n#define FORWARD_WM_DELETEITEM(hwnd, lpDeleteItem, fn) \\\n    (void)(fn)((hwnd), WM_DELETEITEM, (WPARAM)(((const DELETEITEMSTRUCT *)(lpDeleteItem))->CtlID), (LPARAM)(const DELETEITEMSTRUCT *)(lpDeleteItem))\n\n/* int Cls_OnCompareItem(HWND hwnd, const COMPAREITEMSTRUCT * lpCompareItem) */\n#define HANDLE_WM_COMPAREITEM(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(DWORD)(int)(fn)((hwnd), (const COMPAREITEMSTRUCT *)(lParam))\n#define FORWARD_WM_COMPAREITEM(hwnd, lpCompareItem, fn) \\\n    (int)(DWORD)(fn)((hwnd), WM_COMPAREITEM, (WPARAM)(((const COMPAREITEMSTRUCT *)(lpCompareItem))->CtlID), (LPARAM)(const COMPAREITEMSTRUCT *)(lpCompareItem))\n\n/* int Cls_OnVkeyToItem(HWND hwnd, UINT vk, HWND hwndListbox, int iCaret) */\n#define HANDLE_WM_VKEYTOITEM(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(DWORD)(int)(fn)((hwnd), (UINT)LOWORD(wParam), (HWND)(lParam), (int)(short)HIWORD(wParam))\n#define FORWARD_WM_VKEYTOITEM(hwnd, vk, hwndListBox, iCaret, fn) \\\n    (int)(DWORD)(fn)((hwnd), WM_VKEYTOITEM, MAKEWPARAM((vk), (iCaret)), (LPARAM)(hwndListBox))\n\n/* int Cls_OnCharToItem(HWND hwnd, UINT ch, HWND hwndListbox, int iCaret) */\n#define HANDLE_WM_CHARTOITEM(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(DWORD)(int)(fn)((hwnd), (UINT)LOWORD(wParam), (HWND)(lParam), (int)(short)HIWORD(wParam))\n#define FORWARD_WM_CHARTOITEM(hwnd, ch, hwndListBox, iCaret, fn) \\\n    (int)(DWORD)(fn)((hwnd), WM_CHARTOITEM, MAKEWPARAM((UINT)(ch), (UINT)(iCaret)), (LPARAM)(hwndListBox))\n\n/* void Cls_OnQueueSync(HWND hwnd) */\n#define HANDLE_WM_QUEUESYNC(hwnd, wParam, lParam, fn) \\\n    ((fn)(hwnd), 0L)\n#define FORWARD_WM_QUEUESYNC(hwnd, fn) \\\n    (void)(fn)((hwnd), WM_QUEUESYNC, 0L, 0L)\n/* void Cls_OnCommNotify(HWND hwnd, int cid, UINT flags) */\n#define HANDLE_WM_COMMNOTIFY(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (int)(wParam), (UINT)LOWORD(lParam)), 0L)\n#define FORWARD_WM_COMMNOTIFY(hwnd, cid, flags, fn) \\\n    (void)(fn)((hwnd), WM_COMMNOTIFY, (WPARAM)(cid), MAKELPARAM((flags), 0))\n\n/* void Cls_OnDisplayChange(HWND hwnd, UINT bitsPerPixel, UINT cxScreen, UINT cyScreen) */\n#define HANDLE_WM_DISPLAYCHANGE(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (UINT)(wParam), (UINT)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)\n#define FORWARD_WM_DISPLAYCHANGE(hwnd, bitsPerPixel, cxScreen, cyScreen, fn) \\\n    (void)(fn)((hwnd), WM_DISPLAYCHANGE, (WPARAM)(UINT)(bitsPerPixel), (LPARAM)MAKELPARAM((UINT)(cxScreen), (UINT)(cyScreen)))\n\n/* BOOL Cls_OnDeviceChange(HWND hwnd, UINT uEvent, DWORD dwEventData) */\n#define HANDLE_WM_DEVICECHANGE(hwnd, wParam, lParam, fn) \\\n    (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (UINT)(wParam), (DWORD)(wParam))\n#define FORWARD_WM_DEVICECHANGE(hwnd, uEvent, dwEventData, fn) \\\n    (BOOL)(DWORD)(fn)((hwnd), WM_DEVICECHANGE, (WPARAM)(UINT)(uEvent), (LPARAM)(DWORD)(dwEventData))\n\n/* void Cls_OnContextMenu(HWND hwnd, HWND hwndContext, UINT xPos, UINT yPos) */\n#define HANDLE_WM_CONTEXTMENU(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HWND)(wParam), (UINT)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)\n#define FORWARD_WM_CONTEXTMENU(hwnd, hwndContext, xPos, yPos, fn) \\\n    (void)(fn)((hwnd), WM_CONTEXTMENU, (WPARAM)(HWND)(hwndContext), MAKELPARAM((UINT)(xPos), (UINT)(yPos)))\n\n/* void Cls_OnMeasureItem(HWND hwnd, MEASUREITEMSTRUCT * lpMeasureItem) */\n#define HANDLE_WM_MEASUREITEM(hwnd, wParam, lParam, fn) \\\n\t    ((fn)((hwnd), (MEASUREITEMSTRUCT *)(lParam)), 0L)\n#define FORWARD_WM_MEASUREITEM(hwnd, lpMeasureItem, fn) \\\n\t    (void)(fn)((hwnd), WM_MEASUREITEM, (WPARAM)(((MEASUREITEMSTRUCT *)lpMeasureItem)->CtlID), (LPARAM)(MEASUREITEMSTRUCT *)(lpMeasureItem))\n\n/* void Cls_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) */\n#define HANDLE_WM_COMMAND(hwnd, wParam, lParam, fn) \\\n\t    ((fn)((hwnd), (int)(LOWORD(wParam)), (HWND)(lParam), (UINT)HIWORD(wParam)), 0L)\n#define FORWARD_WM_COMMAND(hwnd, id, hwndCtl, codeNotify, fn) \\\n\t    (void)(fn)((hwnd), WM_COMMAND, MAKEWPARAM((UINT)(id),(UINT)(codeNotify)), (LPARAM)(HWND)(hwndCtl))\n\n/* void Cls_OnTimer(HWND hwnd, UINT id) */\n#define HANDLE_WM_TIMER(hwnd, wParam, lParam, fn) ((fn)((hwnd), (UINT)(wParam)), 0L)\n#define FORWARD_WM_TIMER(hwnd, id, fn) (void)(fn)((hwnd), WM_TIMER, (WPARAM)(UINT)(id), 0L)\n\n/* void Cls_OnInitMenuPopup(HWND hwnd, HMENU hMenu, UINT item, BOOL fSystemMenu) */\n#define HANDLE_WM_INITMENUPOPUP(hwnd, wParam, lParam, fn) \\\n        ((fn)((hwnd), (HMENU)(wParam), (UINT)LOWORD(lParam), (BOOL)HIWORD(lParam)), 0L)\n#define FORWARD_WM_INITMENUPOPUP(hwnd, hMenu, item, fSystemMenu, fn) \\\n        (void)(fn)((hwnd), WM_INITMENUPOPUP, (WPARAM)(HMENU)(hMenu), MAKELPARAM((item),(fSystemMenu)))\n\n/* UINT Cls_OnNCHitTest(HWND hwnd, int x, int y) */\n#define HANDLE_WM_NCHITTEST(hwnd, wParam, lParam, fn) \\\n\t(LRESULT)(DWORD)(UINT)(fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam))\n#define FORWARD_WM_NCHITTEST(hwnd, x, y, fn) \\\n\t(UINT)(DWORD)(fn)((hwnd), WM_NCHITTEST, 0L, MAKELPARAM((x), (y)))\n\n/* HFONT Cls_OnGetFont(HWND hwnd) */\n#define HANDLE_WM_GETFONT(hwnd, wParam, lParam, fn)  (LRESULT)(UINT_PTR)(HFONT)(fn)(hwnd)\n#define FORWARD_WM_GETFONT(hwnd, fn)  (HFONT)(UINT_PTR)(fn)((hwnd), WM_GETFONT, 0L, 0L)\n\n/* void Cls_OnSetFont(HWND hwndCtl, HFONT hfont, BOOL fRedraw) */\n#define HANDLE_WM_SETFONT(hwnd, wParam, lParam, fn) \\\n\t    ((fn)((hwnd), (HFONT)(wParam), (BOOL)(lParam)), 0L)\n#define FORWARD_WM_SETFONT(hwnd, hfont, fRedraw, fn) \\\n\t\t\t (void)(fn)((hwnd), WM_SETFONT, (WPARAM)(HFONT)(hfont), (LPARAM)(BOOL)(fRedraw))\n\n/* void Cls_OnGetMinMaxInfo(HWND hwnd, LPMINMAXINFO lpMinMaxInfo) */\n#define HANDLE_WM_GETMINMAXINFO(hwnd, wParam, lParam, fn) \\\n\t\t\t ((fn)((hwnd), (LPMINMAXINFO)(lParam)), 0L)\n#define FORWARD_WM_GETMINMAXINFO(hwnd, lpMinMaxInfo, fn) \\\n\t\t\t(void)(fn)((hwnd), WM_GETMINMAXINFO, 0L, (LPARAM)(LPMINMAXINFO)(lpMinMaxInfo))\n\n/* void Cls_OnDrawItem(HWND hwnd, const DRAWITEMSTRUCT lpDrawItem) */\n#define HANDLE_WM_DRAWITEM(hwnd, wParam, lParam, fn) \\\n\t    ((fn)((hwnd), (const DRAWITEMSTRUCT *)(lParam)), 0L)\n#define FORWARD_WM_DRAWITEM(hwnd, lpDrawItem, fn) \\\n        (void)(fn)((hwnd), WM_DRAWITEM, (WPARAM)(((const DRAWITEMSTRUCT *)lpDrawItem)->CtlID), (LPARAM)(const DRAWITEMSTRUCT *)(lpDrawItem))\n\n\n/****** C runtime porting macros ****************************************/\n\n#define _ncalloc    calloc\n#define _nexpand    _expand\n#define _ffree      free\n#define _fmalloc    malloc\n#define _fmemccpy   _memccpy\n#define _fmemchr    memchr\n#define _fmemcmp    memcmp\n#define _fmemcpy    memcpy\n#define _fmemicmp   _memicmp\n#define _fmemmove   memmove\n#define _fmemset    memset\n#define _fmsize     _msize\n#define _frealloc   realloc\n#define _fstrcat    strcat\n#define _fstrchr    strchr\n#define _fstrcmp    strcmp\n#define _fstrcpy    strcpy\n#define _fstrcspn   strcspn\n#define _fstrdup    _strdup\n#define _fstricmp   _stricmp\n#define _fstrlen    strlen\n#define _fstrlwr    _strlwr\n#define _fstrncat   strncat\n#define _fstrncmp   strncmp\n#define _fstrncpy   strncpy\n#define _fstrnicmp  _strnicmp\n#define _fstrnset   _strnset\n#define _fstrpbrk   strpbrk\n#define _fstrrchr   strrchr\n#define _fstrrev    _strrev\n#define _fstrset    _strset\n#define _fstrspn    strspn\n#define _fstrstr    strstr\n#define _fstrtok    strtok\n#define _fstrupr    _strupr\n#define _nfree      free\n#define _nmalloc    malloc\n#define _nmsize     _msize\n#define _nrealloc   realloc\n#define _nstrdup    _strdup\n#define hmemcpy     MoveMemory\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/winerror.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINERROR_H\n#define __WINE_WINERROR_H\n\n#define FACILITY_NULL                         0\n#define FACILITY_RPC                          1\n#define FACILITY_DISPATCH                     2\n#define FACILITY_STORAGE                      3\n#define FACILITY_ITF                          4\n#define FACILITY_WIN32                        7\n#define FACILITY_WINDOWS                      8\n#define FACILITY_SSPI                         9\n#define FACILITY_SECURITY                     FACILITY_SSPI\n#define FACILITY_CONTROL                     10\n#define FACILITY_CERT                        11\n#define FACILITY_INTERNET                    12\n#define FACILITY_MEDIASERVER                 13\n#define FACILITY_MSMQ                        14\n#define FACILITY_SETUPAPI                    15\n#define FACILITY_SCARD                       16\n#define FACILITY_COMPLUS                     17\n#define FACILITY_AAF                         18\n#define FACILITY_URT                         19\n#define FACILITY_ACS                         20\n#define FACILITY_DPLAY                       21\n#define FACILITY_UMI                         22\n#define FACILITY_SXS                         23\n#define FACILITY_WINDOWS_CE                  24\n#define FACILITY_HTTP                        25\n#define FACILITY_COMMONLOG                   26\n#define FACILITY_USERMODE_FILTER_MANAGER     31\n#define FACILITY_BACKGROUNDCOPY              32\n#define FACILITY_CONFIGURATION               33\n#define FACILITY_STATE_MANAGEMENT            34\n#define FACILITY_METADIRECTORY               35\n#define FACILITY_WINDOWSUPDATE               36\n#define FACILITY_DIRECTORYSERVICE            37\n#define FACILITY_GRAPHICS                    38\n#define FACILITY_SHELL                       39\n#define FACILITY_TPM_SERVICES                40\n#define FACILITY_TPM_SOFTWARE                41\n#define FACILITY_PLA                         48\n#define FACILITY_FVE                         49\n#define FACILITY_WINDOWS_DEFENDER            80\n#define FACILITY_OPC                         81\n#define FACILITY_DIRECT3D11                  0x87c\n#define FACILITY_AUDCLNT                     0x889\n\n#define SEVERITY_SUCCESS    0\n#define SEVERITY_ERROR      1\n\n\n#define MAKE_HRESULT(sev,fac,code) \\\n    ((HRESULT) (((unsigned int)(sev)<<31) | ((unsigned int)(fac)<<16) | ((unsigned int)(code))) )\n#define MAKE_SCODE(sev,fac,code) \\\n        ((SCODE) (((unsigned int)(sev)<<31) | ((unsigned int)(fac)<<16) | ((unsigned int)(code))) )\n#define SUCCEEDED(stat) ((HRESULT)(stat)>=0)\n#define FAILED(stat) ((HRESULT)(stat)<0)\n#define IS_ERROR(stat) (((unsigned int)(stat)>>31) == SEVERITY_ERROR)\n\n#define HRESULT_CODE(hr) ((hr) & 0xFFFF)\n#define SCODE_CODE(sc)   ((sc) & 0xFFFF)\n\n#define HRESULT_FACILITY(hr)  (((hr) >> 16) & 0x1FFF)\n#define SCODE_FACILITY(sc)  (((sc) >> 16) & 0x1FFF)\n\n#define HRESULT_SEVERITY(hr)    (((hr) >> 31) & 0x1)\n#define SCODE_SEVERITY(sc)      (((sc) >> 31) & 0x1)\n\n#define __HRESULT_FROM_WIN32(x)   ((HRESULT)(x) > 0 ? ((HRESULT) (((x) & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000)) : (HRESULT)(x) )\n#ifndef _HRESULT_DEFINED\n#define _HRESULT_DEFINED\n# ifdef _MSC_VER\ntypedef long            HRESULT;\n# else\ntypedef int             HRESULT;\n# endif\n#endif\nstatic inline HRESULT HRESULT_FROM_WIN32(unsigned int x)\n{\n    return (HRESULT)x > 0 ? ((HRESULT) ((x & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000)) : (HRESULT)x;\n}\n#define FACILITY_NT_BIT         0x10000000\n#define HRESULT_FROM_NT(x)      ((HRESULT) ((x) | FACILITY_NT_BIT))\n\n/* SCODE <-> HRESULT functions */\n/* This macros is obsolete and should not be used in new apps. */\n#define GetScode(hr)         ((SCODE)(hr))\n/* This macros is obsolete and should not be used in new apps. */\n#define ResultFromScode(sc)  ((HRESULT)(sc))\n\n#define NO_ERROR                                           0\n#define ERROR_SUCCESS                                      0\n#define ERROR_INVALID_FUNCTION                             1\n#define ERROR_FILE_NOT_FOUND                               2\n#define ERROR_PATH_NOT_FOUND                               3\n#define ERROR_TOO_MANY_OPEN_FILES                          4\n#define ERROR_ACCESS_DENIED                                5\n#define ERROR_INVALID_HANDLE                               6\n#define ERROR_ARENA_TRASHED                                7\n#define ERROR_NOT_ENOUGH_MEMORY                            8\n#define ERROR_INVALID_BLOCK                                9\n#define ERROR_BAD_ENVIRONMENT                              10\n#define ERROR_BAD_FORMAT                                   11\n#define ERROR_INVALID_ACCESS                               12\n#define ERROR_INVALID_DATA                                 13\n#define ERROR_OUTOFMEMORY                                  14\n#define ERROR_INVALID_DRIVE                                15\n#define ERROR_CURRENT_DIRECTORY                            16\n#define ERROR_NOT_SAME_DEVICE                              17\n#define ERROR_NO_MORE_FILES                                18\n#define ERROR_WRITE_PROTECT                                19\n#define ERROR_BAD_UNIT                                     20\n#define ERROR_NOT_READY                                    21\n#define ERROR_BAD_COMMAND                                  22\n#define ERROR_CRC                                          23\n#define ERROR_BAD_LENGTH                                   24\n#define ERROR_SEEK                                         25\n#define ERROR_NOT_DOS_DISK                                 26\n#define ERROR_SECTOR_NOT_FOUND                             27\n#define ERROR_OUT_OF_PAPER                                 28\n#define ERROR_WRITE_FAULT                                  29\n#define ERROR_READ_FAULT                                   30\n#define ERROR_GEN_FAILURE                                  31\n#define ERROR_SHARING_VIOLATION                            32\n#define ERROR_LOCK_VIOLATION                               33\n#define ERROR_WRONG_DISK                                   34\n#define ERROR_FCB_UNAVAILABLE                              35\n#define ERROR_SHARING_BUFFER_EXCEEDED                      36\n#define ERROR_HANDLE_EOF                                   38\n#define ERROR_HANDLE_DISK_FULL                             39\n#define ERROR_NOT_SUPPORTED                                50\n#define ERROR_REM_NOT_LIST                                 51\n#define ERROR_DUP_NAME                                     52\n#define ERROR_BAD_NETPATH                                  53\n#define ERROR_NETWORK_BUSY                                 54\n#define ERROR_DEV_NOT_EXIST                                55\n#define ERROR_TOO_MANY_CMDS                                56\n#define ERROR_ADAP_HDW_ERR                                 57\n#define ERROR_BAD_NET_RESP                                 58\n#define ERROR_UNEXP_NET_ERR                                59\n#define ERROR_BAD_REM_ADAP                                 60\n#define ERROR_PRINTQ_FULL                                  61\n#define ERROR_NO_SPOOL_SPACE                               62\n#define ERROR_PRINT_CANCELLED                              63\n#define ERROR_NETNAME_DELETED                              64\n#define ERROR_NETWORK_ACCESS_DENIED                        65\n#define ERROR_BAD_DEV_TYPE                                 66\n#define ERROR_BAD_NET_NAME                                 67\n#define ERROR_TOO_MANY_NAMES                               68\n#define ERROR_TOO_MANY_SESS                                69\n#define ERROR_SHARING_PAUSED                               70\n#define ERROR_REQ_NOT_ACCEP                                71\n#define ERROR_REDIR_PAUSED                                 72\n#define ERROR_FILE_EXISTS                                  80\n#define ERROR_CANNOT_MAKE                                  82\n#define ERROR_FAIL_I24                                     83\n#define ERROR_OUT_OF_STRUCTURES                            84\n#define ERROR_ALREADY_ASSIGNED                             85\n#define ERROR_INVALID_PASSWORD                             86\n#define ERROR_INVALID_PARAMETER                            87\n#define ERROR_NET_WRITE_FAULT                              88\n#define ERROR_NO_PROC_SLOTS                                89\n#define ERROR_TOO_MANY_SEMAPHORES                          100\n#define ERROR_EXCL_SEM_ALREADY_OWNED                       101\n#define ERROR_SEM_IS_SET                                   102\n#define ERROR_TOO_MANY_SEM_REQUESTS                        103\n#define ERROR_INVALID_AT_INTERRUPT_TIME                    104\n#define ERROR_SEM_OWNER_DIED                               105\n#define ERROR_SEM_USER_LIMIT                               106\n#define ERROR_DISK_CHANGE                                  107\n#define ERROR_DRIVE_LOCKED                                 108\n#define ERROR_BROKEN_PIPE                                  109\n#define ERROR_OPEN_FAILED                                  110\n#define ERROR_BUFFER_OVERFLOW                              111\n#define ERROR_DISK_FULL                                    112\n#define ERROR_NO_MORE_SEARCH_HANDLES                       113\n#define ERROR_INVALID_TARGET_HANDLE                        114\n#define ERROR_INVALID_CATEGORY                             117\n#define ERROR_INVALID_VERIFY_SWITCH                        118\n#define ERROR_BAD_DRIVER_LEVEL                             119\n#define ERROR_CALL_NOT_IMPLEMENTED                         120\n#define ERROR_SEM_TIMEOUT                                  121\n#define ERROR_INSUFFICIENT_BUFFER                          122\n#define ERROR_INVALID_NAME                                 123\n#define ERROR_INVALID_LEVEL                                124\n#define ERROR_NO_VOLUME_LABEL                              125\n#define ERROR_MOD_NOT_FOUND                                126\n#define ERROR_PROC_NOT_FOUND                               127\n#define ERROR_WAIT_NO_CHILDREN                             128\n#define ERROR_CHILD_NOT_COMPLETE                           129\n#define ERROR_DIRECT_ACCESS_HANDLE                         130\n#define ERROR_NEGATIVE_SEEK                                131\n#define ERROR_SEEK_ON_DEVICE                               132\n#define ERROR_IS_JOIN_TARGET                               133\n#define ERROR_IS_JOINED                                    134\n#define ERROR_IS_SUBSTED                                   135\n#define ERROR_NOT_JOINED                                   136\n#define ERROR_NOT_SUBSTED                                  137\n#define ERROR_JOIN_TO_JOIN                                 138\n#define ERROR_SUBST_TO_SUBST                               139\n#define ERROR_JOIN_TO_SUBST                                140\n#define ERROR_SUBST_TO_JOIN                                141\n#define ERROR_BUSY_DRIVE                                   142\n#define ERROR_SAME_DRIVE                                   143\n#define ERROR_DIR_NOT_ROOT                                 144\n#define ERROR_DIR_NOT_EMPTY                                145\n#define ERROR_IS_SUBST_PATH                                146\n#define ERROR_IS_JOIN_PATH                                 147\n#define ERROR_PATH_BUSY                                    148\n#define ERROR_IS_SUBST_TARGET                              149\n#define ERROR_SYSTEM_TRACE                                 150\n#define ERROR_INVALID_EVENT_COUNT                          151\n#define ERROR_TOO_MANY_MUXWAITERS                          152\n#define ERROR_INVALID_LIST_FORMAT                          153\n#define ERROR_LABEL_TOO_LONG                               154\n#define ERROR_TOO_MANY_TCBS                                155\n#define ERROR_SIGNAL_REFUSED                               156\n#define ERROR_DISCARDED                                    157\n#define ERROR_NOT_LOCKED                                   158\n#define ERROR_BAD_THREADID_ADDR                            159\n#define ERROR_BAD_ARGUMENTS                                160\n#define ERROR_BAD_PATHNAME                                 161\n#define ERROR_SIGNAL_PENDING                               162\n#define ERROR_MAX_THRDS_REACHED                            164\n#define ERROR_LOCK_FAILED                                  167\n#define ERROR_BUSY                                         170\n#define ERROR_DEVICE_SUPPORT_IN_PROGRESS                   171\n#define ERROR_CANCEL_VIOLATION                             173\n#define ERROR_ATOMIC_LOCKS_NOT_SUPPORTED                   174\n#define ERROR_INVALID_SEGMENT_NUMBER                       180\n#define ERROR_INVALID_ORDINAL                              182\n#define ERROR_ALREADY_EXISTS                               183\n#define ERROR_INVALID_FLAG_NUMBER                          186\n#define ERROR_SEM_NOT_FOUND                                187\n#define ERROR_INVALID_STARTING_CODESEG                     188\n#define ERROR_INVALID_STACKSEG                             189\n#define ERROR_INVALID_MODULETYPE                           190\n#define ERROR_INVALID_EXE_SIGNATURE                        191\n#define ERROR_EXE_MARKED_INVALID                           192\n#define ERROR_BAD_EXE_FORMAT                               193\n#define ERROR_ITERATED_DATA_EXCEEDS_64k                    194\n#define ERROR_INVALID_MINALLOCSIZE                         195\n#define ERROR_DYNLINK_FROM_INVALID_RING                    196\n#define ERROR_IOPL_NOT_ENABLED                             197\n#define ERROR_INVALID_SEGDPL                               198\n#define ERROR_AUTODATASEG_EXCEEDS_64k                      199\n#define ERROR_RING2SEG_MUST_BE_MOVABLE                     200\n#define ERROR_RELOC_CHAIN_XEEDS_SEGLIM                     201\n#define ERROR_INFLOOP_IN_RELOC_CHAIN                       202\n#define ERROR_ENVVAR_NOT_FOUND                             203\n#define ERROR_NO_SIGNAL_SENT                               205\n#define ERROR_FILENAME_EXCED_RANGE                         206\n#define ERROR_RING2_STACK_IN_USE                           207\n#define ERROR_META_EXPANSION_TOO_LONG                      208\n#define ERROR_INVALID_SIGNAL_NUMBER                        209\n#define ERROR_THREAD_1_INACTIVE                            210\n#define ERROR_LOCKED                                       212\n#define ERROR_TOO_MANY_MODULES                             214\n#define ERROR_NESTING_NOT_ALLOWED                          215\n#define ERROR_EXE_MACHINE_TYPE_MISMATCH                    216\n#define ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY              217\n#define ERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY       218\n#define ERROR_FILE_CHECKED_OUT                             220\n#define ERROR_CHECKOUT_REQUIRED                            221\n#define ERROR_BAD_FILE_TYPE                                222\n#define ERROR_FILE_TOO_LARGE                               223\n#define ERROR_FORMS_AUTH_REQUIRED                          224\n#define ERROR_VIRUS_INFECTED                               225\n#define ERROR_VIRUS_DELETED                                226\n#define ERROR_PIPE_LOCAL                                   229\n#define ERROR_BAD_PIPE                                     230\n#define ERROR_PIPE_BUSY                                    231\n#define ERROR_NO_DATA                                      232\n#define ERROR_PIPE_NOT_CONNECTED                           233\n#define ERROR_MORE_DATA                                    234\n#define ERROR_VC_DISCONNECTED                              240\n#define ERROR_INVALID_EA_NAME                              254\n#define ERROR_EA_LIST_INCONSISTENT                         255\n#define WAIT_TIMEOUT                                       258\n#define ERROR_NO_MORE_ITEMS                                259\n#define ERROR_CANNOT_COPY                                  266\n#define ERROR_DIRECTORY                                    267\n#define ERROR_EAS_DIDNT_FIT                                275\n#define ERROR_EA_FILE_CORRUPT                              276\n#define ERROR_EA_TABLE_FULL                                277\n#define ERROR_INVALID_EA_HANDLE                            278\n#define ERROR_EAS_NOT_SUPPORTED                            282\n#define ERROR_NOT_OWNER                                    288\n#define ERROR_TOO_MANY_POSTS                               298\n#define ERROR_PARTIAL_COPY                                 299\n#define ERROR_OPLOCK_NOT_GRANTED                           300\n#define ERROR_INVALID_OPLOCK_PROTOCOL                      301\n#define ERROR_DISK_TOO_FRAGMENTED                          302\n#define ERROR_DELETE_PENDING                               303\n#define ERROR_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING 304\n#define ERROR_SHORT_NAMES_NOT_ENABLED_ON_VOLUME            305\n#define ERROR_SECURITY_STREAM_IS_INCONSISTENT              306\n#define ERROR_INVALID_LOCK_RANGE                           307\n#define ERROR_IMAGE_SUBSYSTEM_NOT_PRESENT                  308\n#define ERROR_NOTIFICATION_GUID_ALREADY_DEFINED            309\n#define ERROR_INVALID_EXCEPTION_HANDLER                    310\n#define ERROR_DUPLICATE_PRIVILEGES                         311\n#define ERROR_NO_RANGES_PROCESSED                          312\n#define ERROR_NOT_ALLOWED_ON_SYSTEM_FILE                   313\n#define ERROR_DISK_RESOURCES_EXHAUSTED                     314\n#define ERROR_INVALID_TOKEN                                315\n#define ERROR_DEVICE_FEATURE_NOT_SUPPORTED                 316\n#define ERROR_MR_MID_NOT_FOUND                             317\n#define ERROR_SCOPE_NOT_FOUND                              318\n#define ERROR_UNDEFINED_SCOPE                              319\n#define ERROR_INVALID_CAP                                  320\n#define ERROR_DEVICE_UNREACHABLE                           321\n#define ERROR_DEVICE_NO_RESOURCES                          322\n#define ERROR_DATA_CHECKSUM_ERROR                          323\n#define ERROR_INTERMIXED_KERNEL_EA_OPERATION               324\n#define ERROR_FILE_LEVEL_TRIM_NOT_SUPPORTED                326\n#define ERROR_OFFSET_ALIGNMENT_VIOLATION                   327\n#define ERROR_INVALID_FIELD_IN_PARAMETER_LIST              328\n#define ERROR_OPERATION_IN_PROGRESS                        329\n#define ERROR_BAD_DEVICE_PATH                              330\n#define ERROR_TOO_MANY_DESCRIPTORS                         331\n#define ERROR_SCRUB_DATA_DISABLED                          332\n#define ERROR_NOT_REDUNDANT_STORAGE                        333\n#define ERROR_RESIDENT_FILE_NOT_SUPPORTED                  334\n#define ERROR_COMPRESSED_FILE_NOT_SUPPORTED                335\n#define ERROR_DIRECTORY_NOT_SUPPORTED                      336\n#define ERROR_NOT_READ_FROM_COPY                           337\n#define ERROR_FT_WRITE_FAILURE                             338\n#define ERROR_FT_DI_SCAN_REQUIRED                          339\n#define ERROR_INVALID_KERNEL_INFO_VERSION                  340\n#define ERROR_INVALID_PEP_INFO_VERSION                     341\n#define ERROR_FAIL_NOACTION_REBOOT                         350\n#define ERROR_FAIL_SHUTDOWN                                351\n#define ERROR_FAIL_RESTART                                 352\n#define ERROR_MAX_SESSIONS_REACHED                         353\n#define ERROR_INVALID_ADDRESS                              487\n#define ERROR_USER_PROFILE_LOAD                            500\n#define ERROR_ARITHMETIC_OVERFLOW                          534\n#define ERROR_PIPE_CONNECTED                               535\n#define ERROR_PIPE_LISTENING                               536\n#define ERROR_INVALID_LDT_SIZE                             561\n#define ERROR_INVALID_LDT_OFFSET                           563\n#define ERROR_INVALID_LDT_DESCRIPTOR                       564\n#define ERROR_TOO_MANY_THREADS                             565\n#define ERROR_THREAD_NOT_IN_PROCESS                        566\n#define ERROR_PAGEFILE_QUOTA_EXCEEDED                      567\n#define ERROR_LOGON_SERVER_CONFLICT                        568\n#define ERROR_SYNCHRONIZATION_REQUIRED                     569\n#define ERROR_NET_OPEN_FAILED                              570\n#define ERROR_IO_PRIVILEGE_FAILED                          571\n#define ERROR_CONTROL_C_EXIT                               572\n#define ERROR_MISSING_SYSTEMFILE                           573\n#define ERROR_UNHANDLED_EXCEPTION                          574\n#define ERROR_APP_INIT_FAILURE                             575\n#define ERROR_PAGEFILE_CREATE_FAILED                       576\n#define ERROR_INVALID_IMAGE_HASH                           577\n#define ERROR_NO_PAGEFILE                                  578\n#define ERROR_ILLEGAL_FLOAT_CONTEXT                        579\n#define ERROR_NO_EVENT_PAIR                                580\n#define ERROR_DOMAIN_CTRLR_CONFIG_ERROR                    581\n#define ERROR_ILLEGAL_CHARACTER                            582\n#define ERROR_UNDEFINED_CHARACTER                          583\n#define ERROR_FLOPPY_VOLUME                                584\n#define ERROR_BIOS_FAILED_TO_CONNECT_INTERRUPT             585\n#define ERROR_BACKUP_CONTROLLER                            586\n#define ERROR_MUTANT_LIMIT_EXCEEDED                        587\n#define ERROR_FS_DRIVER_REQUIRED                           588\n#define ERROR_CANNOT_LOAD_REGISTRY_FILE                    589\n#define ERROR_DEBUG_ATTACH_FAILED                          590\n#define ERROR_SYSTEM_PROCESS_TERMINATED                    591\n#define ERROR_DATA_NOT_ACCEPTED                            592\n#define ERROR_VDM_HARD_ERROR                               593\n#define ERROR_DRIVER_CANCEL_TIMEOUT                        594\n#define ERROR_REPLY_MESSAGE_MISMATCH                       595\n#define ERROR_LOST_WRITEBEHIND_DATA                        596\n#define ERROR_CLIENT_SERVER_PARAMETERS_INVALID             597\n#define ERROR_NOT_TINY_STREAM                              598\n#define ERROR_STACK_OVERFLOW_READ                          599\n#define ERROR_CONVERT_TO_LARGE                             600\n#define ERROR_FOUND_OUT_OF_SCOPE                           601\n#define ERROR_ALLOCATE_BUCKET                              602\n#define ERROR_MARSHALL_OVERFLOW                            603\n#define ERROR_INVALID_VARIANT                              604\n#define ERROR_BAD_COMPRESSION_BUFFER                       605\n#define ERROR_AUDIT_FAILED                                 606\n#define ERROR_TIMER_RESOLUTION_NOT_SET                     607\n#define ERROR_INSUFFICIENT_LOGON_INFO                      608\n#define ERROR_BAD_DLL_ENTRYPOINT                           609\n#define ERROR_BAD_SERVICE_ENTRYPOINT                       610\n#define ERROR_IP_ADDRESS_CONFLICT1                         611\n#define ERROR_IP_ADDRESS_CONFLICT2                         612\n#define ERROR_REGISTRY_QUOTA_LIMIT                         613\n#define ERROR_NO_CALLBACK_ACTIVE                           614\n#define ERROR_PWD_TOO_SHORT                                615\n#define ERROR_PWD_TOO_RECENT                               616\n#define ERROR_PWD_HISTORY_CONFLICT                         617\n#define ERROR_UNSUPPORTED_COMPRESSION                      618\n#define ERROR_INVALID_HW_PROFILE                           619\n#define ERROR_INVALID_PLUGPLAY_DEVICE_PATH                 620\n#define ERROR_QUOTA_LIST_INCONSISTENT                      621\n#define ERROR_EVALUATION_EXPIRATION                        622\n#define ERROR_ILLEGAL_DLL_RELOCATION                       623\n#define ERROR_DLL_INIT_FAILED_LOGOFF                       624\n#define ERROR_VALIDATE_CONTINUE                            625\n#define ERROR_NO_MORE_MATCHES                              626\n#define ERROR_RANGE_LIST_CONFLICT                          627\n#define ERROR_SERVER_SID_MISMATCH                          628\n#define ERROR_CANT_ENABLE_DENY_ONLY                        629\n#define ERROR_FLOAT_MULTIPLE_FAULTS                        630\n#define ERROR_FLOAT_MULTIPLE_TRAPS                         631\n#define ERROR_NOINTERFACE                                  632\n#define ERROR_DRIVER_FAILED_SLEEP                          633\n#define ERROR_CORRUPT_SYSTEM_FILE                          634\n#define ERROR_COMMITMENT_MINIMUM                           635\n#define ERROR_PNP_RESTART_ENUMERATION                      636\n#define ERROR_SYSTEM_IMAGE_BAD_SIGNATURE                   637\n#define ERROR_PNP_REBOOT_REQUIRED                          638\n#define ERROR_INSUFFICIENT_POWER                           639\n#define ERROR_MULTIPLE_FAULT_VIOLATION                     640\n#define ERROR_SYSTEM_SHUTDOWN                              641\n#define ERROR_PORT_NOT_SET                                 642\n#define ERROR_DS_VERSION_CHECK_FAILURE                     643\n#define ERROR_RANGE_NOT_FOUND                              644\n#define ERROR_NOT_SAFE_MODE_DRIVER                         646\n#define ERROR_FAILED_DRIVER_ENTRY                          647\n#define ERROR_DEVICE_ENUMERATION_ERROR                     648\n#define ERROR_MOUNT_POINT_NOT_RESOLVED                     649\n#define ERROR_INVALID_DEVICE_OBJECT_PARAMETER              650\n#define ERROR_MCA_OCCURED                                  651\n#define ERROR_DRIVER_DATABASE_ERROR                        652\n#define ERROR_SYSTEM_HIVE_TOO_LARGE                        653\n#define ERROR_DRIVER_FAILED_PRIOR_UNLOAD                   654\n#define ERROR_VOLSNAP_PREPARE_HIBERNATE                    655\n#define ERROR_HIBERNATION_FAILURE                          656\n#define ERROR_FILE_SYSTEM_LIMITATION                       665\n#define ERROR_ASSERTION_FAILURE                            668\n#define ERROR_ACPI_ERROR                                   669\n#define ERROR_WOW_ASSERTION                                670\n#define ERROR_PNP_BAD_MPS_TABLE                            671\n#define ERROR_PNP_TRANSLATION_FAILED                       672\n#define ERROR_PNP_IRQ_TRANSLATION_FAILED                   673\n#define ERROR_PNP_INVALID_ID                               674\n#define ERROR_WAKE_SYSTEM_DEBUGGER                         675\n#define ERROR_HANDLES_CLOSED                               676\n#define ERROR_EXTRANEOUS_INFORMATION                       677\n#define ERROR_RXACT_COMMIT_NECESSARY                       678\n#define ERROR_MEDIA_CHECK                                  679\n#define ERROR_GUID_SUBSTITUTION_MADE                       680\n#define ERROR_STOPPED_ON_SYMLINK                           681\n#define ERROR_LONGJUMP                                     682\n#define ERROR_PLUGPLAY_QUERY_VETOED                        683\n#define ERROR_UNWIND_CONSOLIDATE                           684\n#define ERROR_REGISTRY_HIVE_RECOVERED                      685\n#define ERROR_DLL_MIGHT_BE_INSECURE                        686\n#define ERROR_DLL_MIGHT_BE_INCOMPATIBLE                    687\n#define ERROR_DBG_EXCEPTION_NOT_HANDLED                    688\n#define ERROR_DBG_REPLY_LATER                              689\n#define ERROR_DBG_UNABLE_TO_PROVIDE_HANDLE                 690\n#define ERROR_DBG_TERMINATE_THREAD                         691\n#define ERROR_DBG_TERMINATE_PROCESS                        692\n#define ERROR_DBG_CONTROL_C                                693\n#define ERROR_DBG_PRINTEXCEPTION_C                         694\n#define ERROR_DBG_RIPEXCEPTION                             695\n#define ERROR_DBG_CONTROL_BREAK                            696\n#define ERROR_DBG_COMMAND_EXCEPTION                        697\n#define ERROR_OBJECT_NAME_EXISTS                           698\n#define ERROR_THREAD_WAS_SUSPENDED                         699\n#define ERROR_IMAGE_NOT_AT_BASE                            700\n#define ERROR_RXACT_STATE_CREATED                          701\n#define ERROR_SEGMENT_NOTIFICATION                         702\n#define ERROR_BAD_CURRENT_DIRECTORY                        703\n#define ERROR_FT_READ_RECOVERY_FROM_BACKUP                 704\n#define ERROR_FT_WRITE_RECOVERY                            705\n#define ERROR_IMAGE_MACHINE_TYPE_MISMATCH                  706\n#define ERROR_RECEIVE_PARTIAL                              707\n#define ERROR_RECEIVE_EXPEDITED                            708\n#define ERROR_RECEIVE_PARTIAL_EXPEDITED                    709\n#define ERROR_EVENT_DONE                                   710\n#define ERROR_EVENT_PENDING                                711\n#define ERROR_CHECKING_FILE_SYSTEM                         712\n#define ERROR_FATAL_APP_EXIT                               713\n#define ERROR_PREDEFINED_HANDLE                            714\n#define ERROR_WAS_UNLOCKED                                 715\n#define ERROR_SERVICE_NOTIFICATION                         716\n#define ERROR_WAS_LOCKED                                   717\n#define ERROR_LOG_HARD_ERROR                               718\n#define ERROR_ALREADY_WIN32                                719\n#define ERROR_IMAGE_MACHINE_TYPE_MISMATCH_EXE              720\n#define ERROR_NO_YIELD_PERFORMED                           721\n#define ERROR_TIMER_RESUME_IGNORED                         722\n#define ERROR_ARBITRATION_UNHANDLED                        723\n#define ERROR_CARDBUS_NOT_SUPPORTED                        724\n#define ERROR_MP_PROCESSOR_MISMATCH                        725\n#define ERROR_HIBERNATED                                   726\n#define ERROR_RESUME_HIBERNATION                           727\n#define ERROR_FIRMWARE_UPDATED                             728\n#define ERROR_DRIVERS_LEAKING_LOCKED_PAGES                 729\n#define ERROR_WAKE_SYSTEM                                  730\n#define ERROR_WAIT_1                                       731\n#define ERROR_WAIT_2                                       732\n#define ERROR_WAIT_3                                       733\n#define ERROR_WAIT_63                                      734\n#define ERROR_ABANDONED_WAIT_0                             735\n#define ERROR_ABANDONED_WAIT_63                            736\n#define ERROR_USER_APC                                     737\n#define ERROR_KERNEL_APC                                   738\n#define ERROR_ALERTED                                      739\n#define ERROR_ELEVATION_REQUIRED                           740\n#define ERROR_REPARSE                                      741\n#define ERROR_OPLOCK_BREAK_IN_PROGRESS                     742\n#define ERROR_VOLUME_MOUNTED                               743\n#define ERROR_RXACT_COMMITTED                              744\n#define ERROR_NOTIFY_CLEANUP                               745\n#define ERROR_PRIMARY_TRANSPORT_CONNECT_FAILED             746\n#define ERROR_PAGE_FAULT_TRANSITION                        747\n#define ERROR_PAGE_FAULT_DEMAND_ZERO                       748\n#define ERROR_PAGE_FAULT_COPY_ON_WRITE                     749\n#define ERROR_PAGE_FAULT_GUARD_PAGE                        750\n#define ERROR_PAGE_FAULT_PAGING_FILE                       751\n#define ERROR_CACHE_PAGE_LOCKED                            752\n#define ERROR_CRASH_DUMP                                   753\n#define ERROR_BUFFER_ALL_ZEROS                             754\n#define ERROR_REPARSE_OBJECT                               755\n#define ERROR_RESOURCE_REQUIREMENTS_CHANGED                756\n#define ERROR_TRANSLATION_COMPLETE                         757\n#define ERROR_NOTHING_TO_TERMINATE                         758\n#define ERROR_PROCESS_NOT_IN_JOB                           759\n#define ERROR_PROCESS_IN_JOB                               760\n#define ERROR_VOLSNAP_HIBERNATE_READY                      761\n#define ERROR_FSFILTER_OP_COMPLETED_SUCCESSFULLY           762\n#define ERROR_INTERRUPT_VECTOR_ALREADY_CONNECTED           763\n#define ERROR_INTERRUPT_STILL_CONNECTED                    764\n#define ERROR_WAIT_FOR_OPLOCK                              765\n#define ERROR_DBG_EXCEPTION_HANDLED                        766\n#define ERROR_DBG_CONTINUE                                 767\n#define ERROR_CALLBACK_POP_STACK                           768\n#define ERROR_COMPRESSION_DISABLED                         769\n#define ERROR_CANTFETCHBACKWARDS                           770\n#define ERROR_CANTSCROLLBACKWARDS                          771\n#define ERROR_ROWSNOTRELEASED                              772\n#define ERROR_BAD_ACCESSOR_FLAGS                           773\n#define ERROR_ERRORS_ENCOUNTERED                           774\n#define ERROR_NOT_CAPABLE                                  775\n#define ERROR_REQUEST_OUT_OF_SEQUENCE                      776\n#define ERROR_VERSION_PARSE_ERROR                          777\n#define ERROR_BADSTARTPOSITION                             778\n#define ERROR_MEMORY_HARDWARE                              779\n#define ERROR_DISK_REPAIR_DISABLED                         780\n#define ERROR_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE 781\n#define ERROR_SYSTEM_POWERSTATE_TRANSITION                 782\n#define ERROR_SYSTEM_POWERSTATE_COMPLEX_TRANSITION         783\n#define ERROR_MCA_EXCEPTION                                784\n#define ERROR_ACCESS_AUDIT_BY_POLICY                       785\n#define ERROR_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY        786\n#define ERROR_ABANDON_HIBERFILE                            787\n#define ERROR_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED   788\n#define ERROR_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR   789\n#define ERROR_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR       790\n#define ERROR_NO_ACE_CONDITION                             804\n#define ERROR_INVALID_ACE_CONDITION                        805\n#define ERROR_EA_ACCESS_DENIED                             994\n#define ERROR_OPERATION_ABORTED                            995\n#define ERROR_IO_INCOMPLETE                                996\n#define ERROR_IO_PENDING                                   997\n#define ERROR_NOACCESS                                     998\n#define ERROR_SWAPERROR                                    999\n#define ERROR_STACK_OVERFLOW                               1001\n#define ERROR_INVALID_MESSAGE                              1002\n#define ERROR_CAN_NOT_COMPLETE                             1003\n#define ERROR_INVALID_FLAGS                                1004\n#define ERROR_UNRECOGNIZED_VOLUME                          1005\n#define ERROR_FILE_INVALID                                 1006\n#define ERROR_FULLSCREEN_MODE                              1007\n#define ERROR_NO_TOKEN                                     1008\n#define ERROR_BADDB                                        1009\n#define ERROR_BADKEY                                       1010\n#define ERROR_CANTOPEN                                     1011\n#define ERROR_CANTREAD                                     1012\n#define ERROR_CANTWRITE                                    1013\n#define ERROR_REGISTRY_RECOVERED                           1014\n#define ERROR_REGISTRY_CORRUPT                             1015\n#define ERROR_REGISTRY_IO_FAILED                           1016\n#define ERROR_NOT_REGISTRY_FILE                            1017\n#define ERROR_KEY_DELETED                                  1018\n#define ERROR_NO_LOG_SPACE                                 1019\n#define ERROR_KEY_HAS_CHILDREN                             1020\n#define ERROR_CHILD_MUST_BE_VOLATILE                       1021\n#define ERROR_NOTIFY_ENUM_DIR                              1022\n#define ERROR_DEPENDENT_SERVICES_RUNNING                   1051\n#define ERROR_INVALID_SERVICE_CONTROL                      1052\n#define ERROR_SERVICE_REQUEST_TIMEOUT                      1053\n#define ERROR_SERVICE_NO_THREAD                            1054\n#define ERROR_SERVICE_DATABASE_LOCKED                      1055\n#define ERROR_SERVICE_ALREADY_RUNNING                      1056\n#define ERROR_INVALID_SERVICE_ACCOUNT                      1057\n#define ERROR_SERVICE_DISABLED                             1058\n#define ERROR_CIRCULAR_DEPENDENCY                          1059\n#define ERROR_SERVICE_DOES_NOT_EXIST                       1060\n#define ERROR_SERVICE_CANNOT_ACCEPT_CTRL                   1061\n#define ERROR_SERVICE_NOT_ACTIVE                           1062\n#define ERROR_FAILED_SERVICE_CONTROLLER_CONNECT            1063\n#define ERROR_EXCEPTION_IN_SERVICE                         1064\n#define ERROR_DATABASE_DOES_NOT_EXIST                      1065\n#define ERROR_SERVICE_SPECIFIC_ERROR                       1066\n#define ERROR_PROCESS_ABORTED                              1067\n#define ERROR_SERVICE_DEPENDENCY_FAIL                      1068\n#define ERROR_SERVICE_LOGON_FAILED                         1069\n#define ERROR_SERVICE_START_HANG                           1070\n#define ERROR_INVALID_SERVICE_LOCK                         1071\n#define ERROR_SERVICE_MARKED_FOR_DELETE                    1072\n#define ERROR_SERVICE_EXISTS                               1073\n#define ERROR_ALREADY_RUNNING_LKG                          1074\n#define ERROR_SERVICE_DEPENDENCY_DELETED                   1075\n#define ERROR_BOOT_ALREADY_ACCEPTED                        1076\n#define ERROR_SERVICE_NEVER_STARTED                        1077\n#define ERROR_DUPLICATE_SERVICE_NAME                       1078\n#define ERROR_DIFFERENT_SERVICE_ACCOUNT                    1079\n#define ERROR_CANNOT_DETECT_DRIVER_FAILURE                 1080\n#define ERROR_CANNOT_DETECT_PROCESS_ABORT                  1081\n#define ERROR_NO_RECOVERY_PROGRAM                          1082\n#define ERROR_SERVICE_NOT_IN_EXE                           1083\n#define ERROR_END_OF_MEDIA                                 1100\n#define ERROR_FILEMARK_DETECTED                            1101\n#define ERROR_BEGINNING_OF_MEDIA                           1102\n#define ERROR_SETMARK_DETECTED                             1103\n#define ERROR_NO_DATA_DETECTED                             1104\n#define ERROR_PARTITION_FAILURE                            1105\n#define ERROR_INVALID_BLOCK_LENGTH                         1106\n#define ERROR_DEVICE_NOT_PARTITIONED                       1107\n#define ERROR_UNABLE_TO_LOCK_MEDIA                         1108\n#define ERROR_UNABLE_TO_UNLOAD_MEDIA                       1109\n#define ERROR_MEDIA_CHANGED                                1110\n#define ERROR_BUS_RESET                                    1111\n#define ERROR_NO_MEDIA_IN_DRIVE                            1112\n#define ERROR_NO_UNICODE_TRANSLATION                       1113\n#define ERROR_DLL_INIT_FAILED                              1114\n#define ERROR_SHUTDOWN_IN_PROGRESS                         1115\n#define ERROR_NO_SHUTDOWN_IN_PROGRESS                      1116\n#define ERROR_IO_DEVICE                                    1117\n#define ERROR_SERIAL_NO_DEVICE                             1118\n#define ERROR_IRQ_BUSY                                     1119\n#define ERROR_MORE_WRITES                                  1120\n#define ERROR_COUNTER_TIMEOUT                              1121\n#define ERROR_FLOPPY_ID_MARK_NOT_FOUND                     1122\n#define ERROR_FLOPPY_WRONG_CYLINDER                        1123\n#define ERROR_FLOPPY_UNKNOWN_ERROR                         1124\n#define ERROR_FLOPPY_BAD_REGISTERS                         1125\n#define ERROR_DISK_RECALIBRATE_FAILED                      1126\n#define ERROR_DISK_OPERATION_FAILED                        1127\n#define ERROR_DISK_RESET_FAILED                            1128\n#define ERROR_EOM_OVERFLOW                                 1129\n#define ERROR_NOT_ENOUGH_SERVER_MEMORY                     1130\n#define ERROR_POSSIBLE_DEADLOCK                            1131\n#define ERROR_MAPPED_ALIGNMENT                             1132\n#define ERROR_SET_POWER_STATE_VETOED                       1140\n#define ERROR_SET_POWER_STATE_FAILED                       1141\n#define ERROR_TOO_MANY_LINKS                               1142\n#define ERROR_OLD_WIN_VERSION                              1150\n#define ERROR_APP_WRONG_OS                                 1151\n#define ERROR_SINGLE_INSTANCE_APP                          1152\n#define ERROR_RMODE_APP                                    1153\n#define ERROR_INVALID_DLL                                  1154\n#define ERROR_NO_ASSOCIATION                               1155\n#define ERROR_DDE_FAIL                                     1156\n#define ERROR_DLL_NOT_FOUND                                1157\n#define ERROR_NO_MORE_USER_HANDLES                         1158\n#define ERROR_MESSAGE_SYNC_ONLY                            1159\n#define ERROR_SOURCE_ELEMENT_EMPTY                         1160\n#define ERROR_DESTINATION_ELEMENT_FULL                     1161\n#define ERROR_ILLEGAL_ELEMENT_ADDRESS                      1162\n#define ERROR_MAGAZINE_NOT_PRESENT                         1163\n#define ERROR_DEVICE_REINITIALIZATION_NEEDED               1164\n#define ERROR_DEVICE_REQUIRES_CLEANING                     1165\n#define ERROR_DEVICE_DOOR_OPEN                             1166\n#define ERROR_DEVICE_NOT_CONNECTED                         1167\n#define ERROR_NOT_FOUND                                    1168\n#define ERROR_NO_MATCH                                     1169\n#define ERROR_SET_NOT_FOUND                                1170\n#define ERROR_POINT_NOT_FOUND                              1171\n#define ERROR_NO_TRACKING_SERVICE                          1172\n#define ERROR_NO_VOLUME_ID                                 1173\n#define ERROR_UNABLE_TO_REMOVE_REPLACED                    1175\n#define ERROR_UNABLE_TO_MOVE_REPLACEMENT                   1176\n#define ERROR_UNABLE_TO_MOVE_REPLACEMENT_2                 1177\n#define ERROR_JOURNAL_DELETE_IN_PROGRESS                   1178\n#define ERROR_JOURNAL_NOT_ACTIVE                           1179\n#define ERROR_POTENTIAL_FILE_FOUND                         1180\n#define ERROR_JOURNAL_ENTRY_DELETED                        1181\n#define ERROR_BAD_DEVICE                                   1200\n#define ERROR_CONNECTION_UNAVAIL                           1201\n#define ERROR_DEVICE_ALREADY_REMEMBERED                    1202\n#define ERROR_NO_NET_OR_BAD_PATH                           1203\n#define ERROR_BAD_PROVIDER                                 1204\n#define ERROR_CANNOT_OPEN_PROFILE                          1205\n#define ERROR_BAD_PROFILE                                  1206\n#define ERROR_NOT_CONTAINER                                1207\n#define ERROR_EXTENDED_ERROR                               1208\n#define ERROR_INVALID_GROUPNAME                            1209\n#define ERROR_INVALID_COMPUTERNAME                         1210\n#define ERROR_INVALID_EVENTNAME                            1211\n#define ERROR_INVALID_DOMAINNAME                           1212\n#define ERROR_INVALID_SERVICENAME                          1213\n#define ERROR_INVALID_NETNAME                              1214\n#define ERROR_INVALID_SHARENAME                            1215\n#define ERROR_INVALID_PASSWORDNAME                         1216\n#define ERROR_INVALID_MESSAGENAME                          1217\n#define ERROR_INVALID_MESSAGEDEST                          1218\n#define ERROR_SESSION_CREDENTIAL_CONFLICT                  1219\n#define ERROR_REMOTE_SESSION_LIMIT_EXCEEDED                1220\n#define ERROR_DUP_DOMAINNAME                               1221\n#define ERROR_NO_NETWORK                                   1222\n#define ERROR_CANCELLED                                    1223\n#define ERROR_USER_MAPPED_FILE                             1224\n#define ERROR_CONNECTION_REFUSED                           1225\n#define ERROR_GRACEFUL_DISCONNECT                          1226\n#define ERROR_ADDRESS_ALREADY_ASSOCIATED                   1227\n#define ERROR_ADDRESS_NOT_ASSOCIATED                       1228\n#define ERROR_CONNECTION_INVALID                           1229\n#define ERROR_CONNECTION_ACTIVE                            1230\n#define ERROR_NETWORK_UNREACHABLE                          1231\n#define ERROR_HOST_UNREACHABLE                             1232\n#define ERROR_PROTOCOL_UNREACHABLE                         1233\n#define ERROR_PORT_UNREACHABLE                             1234\n#define ERROR_REQUEST_ABORTED                              1235\n#define ERROR_CONNECTION_ABORTED                           1236\n#define ERROR_RETRY                                        1237\n#define ERROR_CONNECTION_COUNT_LIMIT                       1238\n#define ERROR_LOGIN_TIME_RESTRICTION                       1239\n#define ERROR_LOGIN_WKSTA_RESTRICTION                      1240\n#define ERROR_INCORRECT_ADDRESS                            1241\n#define ERROR_ALREADY_REGISTERED                           1242\n#define ERROR_SERVICE_NOT_FOUND                            1243\n#define ERROR_NOT_AUTHENTICATED                            1244\n#define ERROR_NOT_LOGGED_ON                                1245\n#define ERROR_CONTINUE                                     1246\n#define ERROR_ALREADY_INITIALIZED                          1247\n#define ERROR_NO_MORE_DEVICES                              1248\n#define ERROR_NO_SUCH_SITE                                 1249\n#define ERROR_DOMAIN_CONTROLLER_EXISTS                     1250\n#define ERROR_ONLY_IF_CONNECTED                            1251\n#define ERROR_OVERRIDE_NOCHANGES                           1252\n#define ERROR_BAD_USER_PROFILE                             1253\n#define ERROR_NOT_SUPPORTED_ON_SBS                         1254\n#define ERROR_SERVER_SHUTDOWN_IN_PROGRESS                  1255\n#define ERROR_HOST_DOWN                                    1256\n#define ERROR_ACCESS_DISABLED_BY_POLICY                    1260\n#define ERROR_REG_NAT_CONSUMPTION                          1261\n#define ERROR_PKINIT_FAILURE                               1263\n#define ERROR_SMARTCARD_SUBSYSTEM_FAILURE                  1264\n#define ERROR_DOWNGRADE_DETECTED                           1265\n#define ERROR_MACHINE_LOCKED                               1271\n#define ERROR_CALLBACK_SUPPLIED_INVALID_DATA               1273\n#define ERROR_SYNC_FOREGROUND_REFRESH_REQUIRED             1274\n#define ERROR_DRIVER_BLOCKED                               1275\n#define ERROR_INVALID_IMPORT_OF_NON_DLL                    1276\n#define ERROR_NOT_ALL_ASSIGNED                             1300\n#define ERROR_SOME_NOT_MAPPED                              1301\n#define ERROR_NO_QUOTAS_FOR_ACCOUNT                        1302\n#define ERROR_LOCAL_USER_SESSION_KEY                       1303\n#define ERROR_NULL_LM_PASSWORD                             1304\n#define ERROR_UNKNOWN_REVISION                             1305\n#define ERROR_REVISION_MISMATCH                            1306\n#define ERROR_INVALID_OWNER                                1307\n#define ERROR_INVALID_PRIMARY_GROUP                        1308\n#define ERROR_NO_IMPERSONATION_TOKEN                       1309\n#define ERROR_CANT_DISABLE_MANDATORY                       1310\n#define ERROR_NO_LOGON_SERVERS                             1311\n#define ERROR_NO_SUCH_LOGON_SESSION                        1312\n#define ERROR_NO_SUCH_PRIVILEGE                            1313\n#define ERROR_PRIVILEGE_NOT_HELD                           1314\n#define ERROR_INVALID_ACCOUNT_NAME                         1315\n#define ERROR_USER_EXISTS                                  1316\n#define ERROR_NO_SUCH_USER                                 1317\n#define ERROR_GROUP_EXISTS                                 1318\n#define ERROR_NO_SUCH_GROUP                                1319\n#define ERROR_MEMBER_IN_GROUP                              1320\n#define ERROR_MEMBER_NOT_IN_GROUP                          1321\n#define ERROR_LAST_ADMIN                                   1322\n#define ERROR_WRONG_PASSWORD                               1323\n#define ERROR_ILL_FORMED_PASSWORD                          1324\n#define ERROR_PASSWORD_RESTRICTION                         1325\n#define ERROR_LOGON_FAILURE                                1326\n#define ERROR_ACCOUNT_RESTRICTION                          1327\n#define ERROR_INVALID_LOGON_HOURS                          1328\n#define ERROR_INVALID_WORKSTATION                          1329\n#define ERROR_PASSWORD_EXPIRED                             1330\n#define ERROR_ACCOUNT_DISABLED                             1331\n#define ERROR_NONE_MAPPED                                  1332\n#define ERROR_TOO_MANY_LUIDS_REQUESTED                     1333\n#define ERROR_LUIDS_EXHAUSTED                              1334\n#define ERROR_INVALID_SUB_AUTHORITY                        1335\n#define ERROR_INVALID_ACL                                  1336\n#define ERROR_INVALID_SID                                  1337\n#define ERROR_INVALID_SECURITY_DESCR                       1338\n#define ERROR_BAD_INHERITANCE_ACL                          1340\n#define ERROR_SERVER_DISABLED                              1341\n#define ERROR_SERVER_NOT_DISABLED                          1342\n#define ERROR_INVALID_ID_AUTHORITY                         1343\n#define ERROR_ALLOTTED_SPACE_EXCEEDED                      1344\n#define ERROR_INVALID_GROUP_ATTRIBUTES                     1345\n#define ERROR_BAD_IMPERSONATION_LEVEL                      1346\n#define ERROR_CANT_OPEN_ANONYMOUS                          1347\n#define ERROR_BAD_VALIDATION_CLASS                         1348\n#define ERROR_BAD_TOKEN_TYPE                               1349\n#define ERROR_NO_SECURITY_ON_OBJECT                        1350\n#define ERROR_CANT_ACCESS_DOMAIN_INFO                      1351\n#define ERROR_INVALID_SERVER_STATE                         1352\n#define ERROR_INVALID_DOMAIN_STATE                         1353\n#define ERROR_INVALID_DOMAIN_ROLE                          1354\n#define ERROR_NO_SUCH_DOMAIN                               1355\n#define ERROR_DOMAIN_EXISTS                                1356\n#define ERROR_DOMAIN_LIMIT_EXCEEDED                        1357\n#define ERROR_INTERNAL_DB_CORRUPTION                       1358\n#define ERROR_INTERNAL_ERROR                               1359\n#define ERROR_GENERIC_NOT_MAPPED                           1360\n#define ERROR_BAD_DESCRIPTOR_FORMAT                        1361\n#define ERROR_NOT_LOGON_PROCESS                            1362\n#define ERROR_LOGON_SESSION_EXISTS                         1363\n#define ERROR_NO_SUCH_PACKAGE                              1364\n#define ERROR_BAD_LOGON_SESSION_STATE                      1365\n#define ERROR_LOGON_SESSION_COLLISION                      1366\n#define ERROR_INVALID_LOGON_TYPE                           1367\n#define ERROR_CANNOT_IMPERSONATE                           1368\n#define ERROR_RXACT_INVALID_STATE                          1369\n#define ERROR_RXACT_COMMIT_FAILURE                         1370\n#define ERROR_SPECIAL_ACCOUNT                              1371\n#define ERROR_SPECIAL_GROUP                                1372\n#define ERROR_SPECIAL_USER                                 1373\n#define ERROR_MEMBERS_PRIMARY_GROUP                        1374\n#define ERROR_TOKEN_ALREADY_IN_USE                         1375\n#define ERROR_NO_SUCH_ALIAS                                1376\n#define ERROR_MEMBER_NOT_IN_ALIAS                          1377\n#define ERROR_MEMBER_IN_ALIAS                              1378\n#define ERROR_ALIAS_EXISTS                                 1379\n#define ERROR_LOGON_NOT_GRANTED                            1380\n#define ERROR_TOO_MANY_SECRETS                             1381\n#define ERROR_SECRET_TOO_LONG                              1382\n#define ERROR_INTERNAL_DB_ERROR                            1383\n#define ERROR_TOO_MANY_CONTEXT_IDS                         1384\n#define ERROR_LOGON_TYPE_NOT_GRANTED                       1385\n#define ERROR_NT_CROSS_ENCRYPTION_REQUIRED                 1386\n#define ERROR_NO_SUCH_MEMBER                               1387\n#define ERROR_INVALID_MEMBER                               1388\n#define ERROR_TOO_MANY_SIDS                                1389\n#define ERROR_LM_CROSS_ENCRYPTION_REQUIRED                 1390\n#define ERROR_NO_INHERITANCE                               1391\n#define ERROR_FILE_CORRUPT                                 1392\n#define ERROR_DISK_CORRUPT                                 1393\n#define ERROR_NO_USER_SESSION_KEY                          1394\n#define ERROR_LICENSE_QUOTA_EXCEEDED                       1395\n#define ERROR_WRONG_TARGET_NAME                            1396\n#define ERROR_MUTUAL_AUTH_FAILED                           1397\n#define ERROR_TIME_SKEW                                    1398\n#define ERROR_CURRENT_DOMAIN_NOT_ALLOWED                   1399\n#define ERROR_INVALID_WINDOW_HANDLE                        1400\n#define ERROR_INVALID_MENU_HANDLE                          1401\n#define ERROR_INVALID_CURSOR_HANDLE                        1402\n#define ERROR_INVALID_ACCEL_HANDLE                         1403\n#define ERROR_INVALID_HOOK_HANDLE                          1404\n#define ERROR_INVALID_DWP_HANDLE                           1405\n#define ERROR_TLW_WITH_WSCHILD                             1406\n#define ERROR_CANNOT_FIND_WND_CLASS                        1407\n#define ERROR_WINDOW_OF_OTHER_THREAD                       1408\n#define ERROR_HOTKEY_ALREADY_REGISTERED                    1409\n#define ERROR_CLASS_ALREADY_EXISTS                         1410\n#define ERROR_CLASS_DOES_NOT_EXIST                         1411\n#define ERROR_CLASS_HAS_WINDOWS                            1412\n#define ERROR_INVALID_INDEX                                1413\n#define ERROR_INVALID_ICON_HANDLE                          1414\n#define ERROR_PRIVATE_DIALOG_INDEX                         1415\n#define ERROR_LISTBOX_ID_NOT_FOUND                         1416\n#define ERROR_NO_WILDCARD_CHARACTERS                       1417\n#define ERROR_CLIPBOARD_NOT_OPEN                           1418\n#define ERROR_HOTKEY_NOT_REGISTERED                        1419\n#define ERROR_WINDOW_NOT_DIALOG                            1420\n#define ERROR_CONTROL_ID_NOT_FOUND                         1421\n#define ERROR_INVALID_COMBOBOX_MESSAGE                     1422\n#define ERROR_WINDOW_NOT_COMBOBOX                          1423\n#define ERROR_INVALID_EDIT_HEIGHT                          1424\n#define ERROR_DC_NOT_FOUND                                 1425\n#define ERROR_INVALID_HOOK_FILTER                          1426\n#define ERROR_INVALID_FILTER_PROC                          1427\n#define ERROR_HOOK_NEEDS_HMOD                              1428\n#define ERROR_GLOBAL_ONLY_HOOK                             1429\n#define ERROR_JOURNAL_HOOK_SET                             1430\n#define ERROR_HOOK_NOT_INSTALLED                           1431\n#define ERROR_INVALID_LB_MESSAGE                           1432\n#define ERROR_SETCOUNT_ON_BAD_LB                           1433\n#define ERROR_LB_WITHOUT_TABSTOPS                          1434\n#define ERROR_DESTROY_OBJECT_OF_OTHER_THREAD               1435\n#define ERROR_CHILD_WINDOW_MENU                            1436\n#define ERROR_NO_SYSTEM_MENU                               1437\n#define ERROR_INVALID_MSGBOX_STYLE                         1438\n#define ERROR_INVALID_SPI_VALUE                            1439\n#define ERROR_SCREEN_ALREADY_LOCKED                        1440\n#define ERROR_HWNDS_HAVE_DIFF_PARENT                       1441\n#define ERROR_NOT_CHILD_WINDOW                             1442\n#define ERROR_INVALID_GW_COMMAND                           1443\n#define ERROR_INVALID_THREAD_ID                            1444\n#define ERROR_NON_MDICHILD_WINDOW                          1445\n#define ERROR_POPUP_ALREADY_ACTIVE                         1446\n#define ERROR_NO_SCROLLBARS                                1447\n#define ERROR_INVALID_SCROLLBAR_RANGE                      1448\n#define ERROR_INVALID_SHOWWIN_COMMAND                      1449\n#define ERROR_NO_SYSTEM_RESOURCES                          1450\n#define ERROR_NONPAGED_SYSTEM_RESOURCES                    1451\n#define ERROR_PAGED_SYSTEM_RESOURCES                       1452\n#define ERROR_WORKING_SET_QUOTA                            1453\n#define ERROR_PAGEFILE_QUOTA                               1454\n#define ERROR_COMMITMENT_LIMIT                             1455\n#define ERROR_MENU_ITEM_NOT_FOUND                          1456\n#define ERROR_INVALID_KEYBOARD_HANDLE                      1457\n#define ERROR_HOOK_TYPE_NOT_ALLOWED                        1458\n#define ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION           1459\n#define ERROR_TIMEOUT                                      1460\n#define ERROR_INVALID_MONITOR_HANDLE                       1461\n#define ERROR_INCORRECT_SIZE                               1462\n#define ERROR_SYMLINK_CLASS_DISABLED                       1463\n#define ERROR_SYMLINK_NOT_SUPPORTED                        1464\n#define ERROR_XML_PARSE_ERROR                              1465\n#define ERROR_XMLDSIG_ERROR                                1466\n#define ERROR_RESTART_APPLICATION                          1467\n#define ERROR_WRONG_COMPARTMENT                            1468\n#define ERROR_AUTHIP_FAILURE                               1469\n#define ERROR_NO_NVRAM_RESOURCES                           1470\n#define ERROR_EVENTLOG_FILE_CORRUPT                        1500\n#define ERROR_EVENTLOG_CANT_START                          1501\n#define ERROR_LOG_FILE_FULL                                1502\n#define ERROR_EVENTLOG_FILE_CHANGED                        1503\n#define ERROR_INVALID_TASK_NAME                            1550\n#define ERROR_INVALID_TASK_INDEX                           1551\n#define ERROR_THREAD_ALREADY_IN_TASK                       1552\n#define ERROR_INSTALL_SERVICE_FAILURE                      1601\n#define ERROR_INSTALL_USEREXIT                             1602\n#define ERROR_INSTALL_FAILURE                              1603\n#define ERROR_INSTALL_SUSPEND                              1604\n#define ERROR_UNKNOWN_PRODUCT                              1605\n#define ERROR_UNKNOWN_FEATURE                              1606\n#define ERROR_UNKNOWN_COMPONENT                            1607\n#define ERROR_UNKNOWN_PROPERTY                             1608\n#define ERROR_INVALID_HANDLE_STATE                         1609\n#define ERROR_BAD_CONFIGURATION                            1610\n#define ERROR_INDEX_ABSENT                                 1611\n#define ERROR_INSTALL_SOURCE_ABSENT                        1612\n#define ERROR_INSTALL_PACKAGE_VERSION                      1613\n#define ERROR_PRODUCT_UNINSTALLED                          1614\n#define ERROR_BAD_QUERY_SYNTAX                             1615\n#define ERROR_INVALID_FIELD                                1616\n#define ERROR_DEVICE_REMOVED                               1617\n#define ERROR_INSTALL_ALREADY_RUNNING                      1618\n#define ERROR_INSTALL_PACKAGE_OPEN_FAILED                  1619\n#define ERROR_INSTALL_PACKAGE_INVALID                      1620\n#define ERROR_INSTALL_UI_FAILURE                           1621\n#define ERROR_INSTALL_LOG_FAILURE                          1622\n#define ERROR_INSTALL_LANGUAGE_UNSUPPORTED                 1623\n#define ERROR_INSTALL_TRANSFORM_FAILURE                    1624\n#define ERROR_INSTALL_PACKAGE_REJECTED                     1625\n#define ERROR_FUNCTION_NOT_CALLED                          1626\n#define ERROR_FUNCTION_FAILED                              1627\n#define ERROR_INVALID_TABLE                                1628\n#define ERROR_DATATYPE_MISMATCH                            1629\n#define ERROR_UNSUPPORTED_TYPE                             1630\n#define ERROR_CREATE_FAILED                                1631\n#define ERROR_INSTALL_TEMP_UNWRITABLE                      1632\n#define ERROR_INSTALL_PLATFORM_UNSUPPORTED                 1633\n#define ERROR_INSTALL_NOTUSED                              1634\n#define ERROR_PATCH_PACKAGE_OPEN_FAILED                    1635\n#define ERROR_PATCH_PACKAGE_INVALID                        1636\n#define ERROR_PATCH_PACKAGE_UNSUPPORTED                    1637\n#define ERROR_PRODUCT_VERSION                              1638\n#define ERROR_INVALID_COMMAND_LINE                         1639\n#define ERROR_INSTALL_REMOTE_DISALLOWED                    1640\n#define ERROR_SUCCESS_REBOOT_INITIATED                     1641\n#define ERROR_PATCH_TARGET_NOT_FOUND                       1642\n#define ERROR_PATCH_PACKAGE_REJECTED                       1643\n#define ERROR_INSTALL_TRANSFORM_REJECTED                   1644\n#define ERROR_INSTALL_REMOTE_PROHIBITED                    1645\n#define ERROR_PATCH_REMOVAL_UNSUPPORTED                    1646\n#define ERROR_UNKNOWN_PATCH                                1647\n#define ERROR_PATCH_NO_SEQUENCE                            1648\n#define ERROR_PATCH_REMOVAL_DISALLOWED                     1649\n#define ERROR_INVALID_PATCH_XML                            1650\n#define ERROR_PATCH_MANAGED_ADVERTISED_PRODUCT             1651\n#define ERROR_INSTALL_SERVICE_SAFEBOOT                     1652\n#define RPC_S_INVALID_STRING_BINDING                       1700\n#define RPC_S_WRONG_KIND_OF_BINDING                        1701\n#define RPC_S_INVALID_BINDING                              1702\n#define RPC_S_PROTSEQ_NOT_SUPPORTED                        1703\n#define RPC_S_INVALID_RPC_PROTSEQ                          1704\n#define RPC_S_INVALID_STRING_UUID                          1705\n#define RPC_S_INVALID_ENDPOINT_FORMAT                      1706\n#define RPC_S_INVALID_NET_ADDR                             1707\n#define RPC_S_NO_ENDPOINT_FOUND                            1708\n#define RPC_S_INVALID_TIMEOUT                              1709\n#define RPC_S_OBJECT_NOT_FOUND                             1710\n#define RPC_S_ALREADY_REGISTERED                           1711\n#define RPC_S_TYPE_ALREADY_REGISTERED                      1712\n#define RPC_S_ALREADY_LISTENING                            1713\n#define RPC_S_NO_PROTSEQS_REGISTERED                       1714\n#define RPC_S_NOT_LISTENING                                1715\n#define RPC_S_UNKNOWN_MGR_TYPE                             1716\n#define RPC_S_UNKNOWN_IF                                   1717\n#define RPC_S_NO_BINDINGS                                  1718\n#define RPC_S_NO_PROTSEQS                                  1719\n#define RPC_S_CANT_CREATE_ENDPOINT                         1720\n#define RPC_S_OUT_OF_RESOURCES                             1721\n#define RPC_S_SERVER_UNAVAILABLE                           1722\n#define RPC_S_SERVER_TOO_BUSY                              1723\n#define RPC_S_INVALID_NETWORK_OPTIONS                      1724\n#define RPC_S_NO_CALL_ACTIVE                               1725\n#define RPC_S_CALL_FAILED                                  1726\n#define RPC_S_CALL_FAILED_DNE                              1727\n#define RPC_S_PROTOCOL_ERROR                               1728\n#define RPC_S_UNSUPPORTED_TRANS_SYN                        1730\n#define RPC_S_UNSUPPORTED_TYPE                             1732\n#define RPC_S_INVALID_TAG                                  1733\n#define RPC_S_INVALID_BOUND                                1734\n#define RPC_S_NO_ENTRY_NAME                                1735\n#define RPC_S_INVALID_NAME_SYNTAX                          1736\n#define RPC_S_UNSUPPORTED_NAME_SYNTAX                      1737\n#define RPC_S_UUID_NO_ADDRESS                              1739\n#define RPC_S_DUPLICATE_ENDPOINT                           1740\n#define RPC_S_UNKNOWN_AUTHN_TYPE                           1741\n#define RPC_S_MAX_CALLS_TOO_SMALL                          1742\n#define RPC_S_STRING_TOO_LONG                              1743\n#define RPC_S_PROTSEQ_NOT_FOUND                            1744\n#define RPC_S_PROCNUM_OUT_OF_RANGE                         1745\n#define RPC_S_BINDING_HAS_NO_AUTH                          1746\n#define RPC_S_UNKNOWN_AUTHN_SERVICE                        1747\n#define RPC_S_UNKNOWN_AUTHN_LEVEL                          1748\n#define RPC_S_INVALID_AUTH_IDENTITY                        1749\n#define RPC_S_UNKNOWN_AUTHZ_SERVICE                        1750\n#define EPT_S_INVALID_ENTRY                                1751\n#define EPT_S_CANT_PERFORM_OP                              1752\n#define EPT_S_NOT_REGISTERED                               1753\n#define RPC_S_NOTHING_TO_EXPORT                            1754\n#define RPC_S_INCOMPLETE_NAME                              1755\n#define RPC_S_INVALID_VERS_OPTION                          1756\n#define RPC_S_NO_MORE_MEMBERS                              1757\n#define RPC_S_NOT_ALL_OBJS_UNEXPORTED                      1758\n#define RPC_S_INTERFACE_NOT_FOUND                          1759\n#define RPC_S_ENTRY_ALREADY_EXISTS                         1760\n#define RPC_S_ENTRY_NOT_FOUND                              1761\n#define RPC_S_NAME_SERVICE_UNAVAILABLE                     1762\n#define RPC_S_INVALID_NAF_ID                               1763\n#define RPC_S_CANNOT_SUPPORT                               1764\n#define RPC_S_NO_CONTEXT_AVAILABLE                         1765\n#define RPC_S_INTERNAL_ERROR                               1766\n#define RPC_S_ZERO_DIVIDE                                  1767\n#define RPC_S_ADDRESS_ERROR                                1768\n#define RPC_S_FP_DIV_ZERO                                  1769\n#define RPC_S_FP_UNDERFLOW                                 1770\n#define RPC_S_FP_OVERFLOW                                  1771\n#define RPC_X_NO_MORE_ENTRIES                              1772\n#define RPC_X_SS_CHAR_TRANS_OPEN_FAIL                      1773\n#define RPC_X_SS_CHAR_TRANS_SHORT_FILE                     1774\n#define RPC_X_SS_IN_NULL_CONTEXT                           1775\n#define RPC_X_SS_CONTEXT_DAMAGED                           1777\n#define RPC_X_SS_HANDLES_MISMATCH                          1778\n#define RPC_X_SS_CANNOT_GET_CALL_HANDLE                    1779\n#define RPC_X_NULL_REF_POINTER                             1780\n#define RPC_X_ENUM_VALUE_OUT_OF_RANGE                      1781\n#define RPC_X_BYTE_COUNT_TOO_SMALL                         1782\n#define RPC_X_BAD_STUB_DATA                                1783\n#define ERROR_INVALID_USER_BUFFER                          1784\n#define ERROR_UNRECOGNIZED_MEDIA                           1785\n#define ERROR_NO_TRUST_LSA_SECRET                          1786\n#define ERROR_NO_TRUST_SAM_ACCOUNT                         1787\n#define ERROR_TRUSTED_DOMAIN_FAILURE                       1788\n#define ERROR_TRUSTED_RELATIONSHIP_FAILURE                 1789\n#define ERROR_TRUST_FAILURE                                1790\n#define RPC_S_CALL_IN_PROGRESS                             1791\n#define ERROR_NETLOGON_NOT_STARTED                         1792\n#define ERROR_ACCOUNT_EXPIRED                              1793\n#define ERROR_REDIRECTOR_HAS_OPEN_HANDLES                  1794\n#define ERROR_PRINTER_DRIVER_ALREADY_INSTALLED             1795\n#define ERROR_UNKNOWN_PORT                                 1796\n#define ERROR_UNKNOWN_PRINTER_DRIVER                       1797\n#define ERROR_UNKNOWN_PRINTPROCESSOR                       1798\n#define ERROR_INVALID_SEPARATOR_FILE                       1799\n#define ERROR_INVALID_PRIORITY                             1800\n#define ERROR_INVALID_PRINTER_NAME                         1801\n#define ERROR_PRINTER_ALREADY_EXISTS                       1802\n#define ERROR_INVALID_PRINTER_COMMAND                      1803\n#define ERROR_INVALID_DATATYPE                             1804\n#define ERROR_INVALID_ENVIRONMENT                          1805\n#define RPC_S_NO_MORE_BINDINGS                             1806\n#define ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT            1807\n#define ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT            1808\n#define ERROR_NOLOGON_SERVER_TRUST_ACCOUNT                 1809\n#define ERROR_DOMAIN_TRUST_INCONSISTENT                    1810\n#define ERROR_SERVER_HAS_OPEN_HANDLES                      1811\n#define ERROR_RESOURCE_DATA_NOT_FOUND                      1812\n#define ERROR_RESOURCE_TYPE_NOT_FOUND                      1813\n#define ERROR_RESOURCE_NAME_NOT_FOUND                      1814\n#define ERROR_RESOURCE_LANG_NOT_FOUND                      1815\n#define ERROR_NOT_ENOUGH_QUOTA                             1816\n#define RPC_S_NO_INTERFACES                                1817\n#define RPC_S_CALL_CANCELLED                               1818\n#define RPC_S_BINDING_INCOMPLETE                           1819\n#define RPC_S_COMM_FAILURE                                 1820\n#define RPC_S_UNSUPPORTED_AUTHN_LEVEL                      1821\n#define RPC_S_NO_PRINC_NAME                                1822\n#define RPC_S_NOT_RPC_ERROR                                1823\n#define RPC_S_UUID_LOCAL_ONLY                              1824\n#define RPC_S_SEC_PKG_ERROR                                1825\n#define RPC_S_NOT_CANCELLED                                1826\n#define RPC_X_INVALID_ES_ACTION                            1827\n#define RPC_X_WRONG_ES_VERSION                             1828\n#define RPC_X_WRONG_STUB_VERSION                           1829\n#define RPC_X_INVALID_PIPE_OBJECT                          1830\n#define RPC_X_WRONG_PIPE_ORDER                             1831\n#define RPC_X_WRONG_PIPE_VERSION                           1832\n#define RPC_S_GROUP_MEMBER_NOT_FOUND                       1898\n#define EPT_S_CANT_CREATE                                  1899\n#define RPC_S_INVALID_OBJECT                               1900\n#define ERROR_INVALID_TIME                                 1901\n#define ERROR_INVALID_FORM_NAME                            1902\n#define ERROR_INVALID_FORM_SIZE                            1903\n#define ERROR_ALREADY_WAITING                              1904\n#define ERROR_PRINTER_DELETED                              1905\n#define ERROR_INVALID_PRINTER_STATE                        1906\n#define ERROR_PASSWORD_MUST_CHANGE                         1907\n#define ERROR_DOMAIN_CONTROLLER_NOT_FOUND                  1908\n#define ERROR_ACCOUNT_LOCKED_OUT                           1909\n#define OR_INVALID_OXID                                    1910\n#define OR_INVALID_OID                                     1911\n#define OR_INVALID_SET                                     1912\n#define RPC_S_SEND_INCOMPLETE                              1913\n#define RPC_S_INVALID_ASYNC_HANDLE                         1914\n#define RPC_S_INVALID_ASYNC_CALL                           1915\n#define RPC_X_PIPE_CLOSED                                  1916\n#define RPC_X_PIPE_DISCIPLINE_ERROR                        1917\n#define RPC_X_PIPE_EMPTY                                   1918\n#define ERROR_NO_SITENAME                                  1919\n#define ERROR_CANT_ACCESS_FILE                             1920\n#define ERROR_CANT_RESOLVE_FILENAME                        1921\n#define RPC_S_ENTRY_TYPE_MISMATCH                          1922\n#define RPC_S_NOT_ALL_OBJS_EXPORTED                        1923\n#define RPC_S_INTERFACE_NOT_EXPORTED                       1924\n#define RPC_S_PROFILE_NOT_ADDED                            1925\n#define RPC_S_PRF_ELT_NOT_ADDED                            1926\n#define RPC_S_PRF_ELT_NOT_REMOVED                          1927\n#define RPC_S_GRP_ELT_NOT_ADDED                            1928\n#define RPC_S_GRP_ELT_NOT_REMOVED                          1929\n#define ERROR_KM_DRIVER_BLOCKED                            1930\n#define ERROR_CONTEXT_EXPIRED                              1931\n#define ERROR_PER_USER_TRUST_QUOTA_EXCEEDED                1932\n#define ERROR_ALL_USER_TRUST_QUOTA_EXCEEDED                1933\n#define ERROR_USER_DELETE_TRUST_QUOTA_EXCEEDED             1934\n#define ERROR_AUTHENTICATION_FIREWALL_FAILED               1935\n#define ERROR_REMOTE_PRINT_CONNECTIONS_BLOCKED             1936\n#define ERROR_INVALID_PIXEL_FORMAT                         2000\n#define ERROR_BAD_DRIVER                                   2001\n#define ERROR_INVALID_WINDOW_STYLE                         2002\n#define ERROR_METAFILE_NOT_SUPPORTED                       2003\n#define ERROR_TRANSFORM_NOT_SUPPORTED                      2004\n#define ERROR_CLIPPING_NOT_SUPPORTED                       2005\n#define ERROR_INVALID_CMM                                  2010\n#define ERROR_INVALID_PROFILE                              2011\n#define ERROR_TAG_NOT_FOUND                                2012\n#define ERROR_TAG_NOT_PRESENT                              2013\n#define ERROR_DUPLICATE_TAG                                2014\n#define ERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE           2015\n#define ERROR_PROFILE_NOT_FOUND                            2016\n#define ERROR_INVALID_COLORSPACE                           2017\n#define ERROR_ICM_NOT_ENABLED                              2018\n#define ERROR_DELETING_ICM_XFORM                           2019\n#define ERROR_INVALID_TRANSFORM                            2020\n#define ERROR_COLORSPACE_MISMATCH                          2021\n#define ERROR_INVALID_COLORINDEX                           2022\n#define ERROR_CONNECTED_OTHER_PASSWORD                     2108\n#define ERROR_BAD_USERNAME                                 2202\n#define ERROR_NOT_CONNECTED                                2250\n#define ERROR_OPEN_FILES                                   2401\n#define ERROR_ACTIVE_CONNECTIONS                           2402\n#define ERROR_DEVICE_IN_USE                                2404\n#define ERROR_UNKNOWN_PRINT_MONITOR                        3000\n#define ERROR_PRINTER_DRIVER_IN_USE                        3001\n#define ERROR_SPOOL_FILE_NOT_FOUND                         3002\n#define ERROR_SPL_NO_STARTDOC                              3003\n#define ERROR_SPL_NO_ADDJOB                                3004\n#define ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED            3005\n#define ERROR_PRINT_MONITOR_ALREADY_INSTALLED              3006\n#define ERROR_INVALID_PRINT_MONITOR                        3007\n#define ERROR_PRINT_MONITOR_IN_USE                         3008\n#define ERROR_PRINTER_HAS_JOBS_QUEUED                      3009\n#define ERROR_SUCCESS_REBOOT_REQUIRED                      3010\n#define ERROR_SUCCESS_RESTART_REQUIRED                     3011\n#define ERROR_PRINTER_NOT_FOUND                            3012\n#define ERROR_PRINTER_DRIVER_WARNED                        3013\n#define ERROR_PRINTER_DRIVER_BLOCKED                       3014\n#define ERROR_REQUEST_PAUSED                               3050\n#define ERROR_WINS_INTERNAL                                4000\n#define ERROR_CAN_NOT_DEL_LOCAL_WINS                       4001\n#define ERROR_STATIC_INIT                                  4002\n#define ERROR_INC_BACKUP                                   4003\n#define ERROR_FULL_BACKUP                                  4004\n#define ERROR_REC_NON_EXISTENT                             4005\n#define ERROR_RPL_NOT_ALLOWED                              4006\n#define ERROR_DHCP_ADDRESS_CONFLICT                        4100\n#define ERROR_WMI_GUID_NOT_FOUND                           4200\n#define ERROR_WMI_INSTANCE_NOT_FOUND                       4201\n#define ERROR_WMI_ITEMID_NOT_FOUND                         4202\n#define ERROR_WMI_TRY_AGAIN                                4203\n#define ERROR_WMI_DP_NOT_FOUND                             4204\n#define ERROR_WMI_UNRESOLVED_INSTANCE_REF                  4205\n#define ERROR_WMI_ALREADY_ENABLED                          4206\n#define ERROR_WMI_GUID_DISCONNECTED                        4207\n#define ERROR_WMI_SERVER_UNAVAILABLE                       4208\n#define ERROR_WMI_DP_FAILED                                4209\n#define ERROR_WMI_INVALID_MOF                              4210\n#define ERROR_WMI_INVALID_REGINFO                          4211\n#define ERROR_WMI_ALREADY_DISABLED                         4212\n#define ERROR_WMI_READ_ONLY                                4213\n#define ERROR_WMI_SET_FAILURE                              4214\n#define ERROR_INVALID_MEDIA                                4300\n#define ERROR_INVALID_LIBRARY                              4301\n#define ERROR_INVALID_MEDIA_POOL                           4302\n#define ERROR_DRIVE_MEDIA_MISMATCH                         4303\n#define ERROR_MEDIA_OFFLINE                                4304\n#define ERROR_LIBRARY_OFFLINE                              4305\n#define ERROR_EMPTY                                        4306\n#define ERROR_NOT_EMPTY                                    4307\n#define ERROR_MEDIA_UNAVAILABLE                            4308\n#define ERROR_RESOURCE_DISABLED                            4309\n#define ERROR_INVALID_CLEANER                              4310\n#define ERROR_UNABLE_TO_CLEAN                              4311\n#define ERROR_OBJECT_NOT_FOUND                             4312\n#define ERROR_DATABASE_FAILURE                             4313\n#define ERROR_DATABASE_FULL                                4314\n#define ERROR_MEDIA_INCOMPATIBLE                           4315\n#define ERROR_RESOURCE_NOT_PRESENT                         4316\n#define ERROR_INVALID_OPERATION                            4317\n#define ERROR_MEDIA_NOT_AVAILABLE                          4318\n#define ERROR_DEVICE_NOT_AVAILABLE                         4319\n#define ERROR_REQUEST_REFUSED                              4320\n#define ERROR_INVALID_DRIVE_OBJECT                         4321\n#define ERROR_LIBRARY_FULL                                 4322\n#define ERROR_MEDIUM_NOT_ACCESSIBLE                        4323\n#define ERROR_UNABLE_TO_LOAD_MEDIUM                        4324\n#define ERROR_UNABLE_TO_INVENTORY_DRIVE                    4325\n#define ERROR_UNABLE_TO_INVENTORY_SLOT                     4326\n#define ERROR_UNABLE_TO_INVENTORY_TRANSPORT                4327\n#define ERROR_TRANSPORT_FULL                               4328\n#define ERROR_CONTROLLING_IEPORT                           4329\n#define ERROR_UNABLE_TO_EJECT_MOUNTED_MEDIA                4330\n#define ERROR_CLEANER_SLOT_SET                             4331\n#define ERROR_CLEANER_SLOT_NOT_SET                         4332\n#define ERROR_CLEANER_CARTRIDGE_SPENT                      4333\n#define ERROR_UNEXPECTED_OMID                              4334\n#define ERROR_CANT_DELETE_LAST_ITEM                        4335\n#define ERROR_MESSAGE_EXCEEDS_MAX_SIZE                     4336\n#define ERROR_VOLUME_CONTAINS_SYS_FILES                    4337\n#define ERROR_INDIGENOUS_TYPE                              4338\n#define ERROR_NO_SUPPORTING_DRIVES                         4339\n#define ERROR_CLEANER_CARTRIDGE_INSTALLED                  4340\n#define ERROR_FILE_OFFLINE                                 4350\n#define ERROR_REMOTE_STORAGE_NOT_ACTIVE                    4351\n#define ERROR_REMOTE_STORAGE_MEDIA_ERROR                   4352\n#define ERROR_NOT_A_REPARSE_POINT                          4390\n#define ERROR_REPARSE_ATTRIBUTE_CONFLICT                   4391\n#define ERROR_INVALID_REPARSE_DATA                         4392\n#define ERROR_REPARSE_TAG_INVALID                          4393\n#define ERROR_REPARSE_TAG_MISMATCH                         4394\n#define ERROR_VOLUME_NOT_SIS_ENABLED                       4500\n#define ERROR_DEPENDENT_RESOURCE_EXISTS                    5001\n#define ERROR_DEPENDENCY_NOT_FOUND                         5002\n#define ERROR_DEPENDENCY_ALREADY_EXISTS                    5003\n#define ERROR_RESOURCE_NOT_ONLINE                          5004\n#define ERROR_HOST_NODE_NOT_AVAILABLE                      5005\n#define ERROR_RESOURCE_NOT_AVAILABLE                       5006\n#define ERROR_RESOURCE_NOT_FOUND                           5007\n#define ERROR_SHUTDOWN_CLUSTER                             5008\n#define ERROR_CANT_EVICT_ACTIVE_NODE                       5009\n#define ERROR_OBJECT_ALREADY_EXISTS                        5010\n#define ERROR_OBJECT_IN_LIST                               5011\n#define ERROR_GROUP_NOT_AVAILABLE                          5012\n#define ERROR_GROUP_NOT_FOUND                              5013\n#define ERROR_GROUP_NOT_ONLINE                             5014\n#define ERROR_HOST_NODE_NOT_RESOURCE_OWNER                 5015\n#define ERROR_HOST_NODE_NOT_GROUP_OWNER                    5016\n#define ERROR_RESMON_CREATE_FAILED                         5017\n#define ERROR_RESMON_ONLINE_FAILED                         5018\n#define ERROR_RESOURCE_ONLINE                              5019\n#define ERROR_QUORUM_RESOURCE                              5020\n#define ERROR_NOT_QUORUM_CAPABLE                           5021\n#define ERROR_CLUSTER_SHUTTING_DOWN                        5022\n#define ERROR_INVALID_STATE                                5023\n#define ERROR_RESOURCE_PROPERTIES_STORED                   5024\n#define ERROR_NOT_QUORUM_CLASS                             5025\n#define ERROR_CORE_RESOURCE                                5026\n#define ERROR_QUORUM_RESOURCE_ONLINE_FAILED                5027\n#define ERROR_QUORUMLOG_OPEN_FAILED                        5028\n#define ERROR_CLUSTERLOG_CORRUPT                           5029\n#define ERROR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE            5030\n#define ERROR_CLUSTERLOG_EXCEEDS_MAXSIZE                   5031\n#define ERROR_CLUSTERLOG_CHKPOINT_NOT_FOUND                5032\n#define ERROR_CLUSTERLOG_NOT_ENOUGH_SPACE                  5033\n#define ERROR_QUORUM_OWNER_ALIVE                           5034\n#define ERROR_NETWORK_NOT_AVAILABLE                        5035\n#define ERROR_NODE_NOT_AVAILABLE                           5036\n#define ERROR_ALL_NODES_NOT_AVAILABLE                      5037\n#define ERROR_RESOURCE_FAILED                              5038\n#define ERROR_CLUSTER_INVALID_NODE                         5039\n#define ERROR_CLUSTER_NODE_EXISTS                          5040\n#define ERROR_CLUSTER_JOIN_IN_PROGRESS                     5041\n#define ERROR_CLUSTER_NODE_NOT_FOUND                       5042\n#define ERROR_CLUSTER_LOCAL_NODE_NOT_FOUND                 5043\n#define ERROR_CLUSTER_NETWORK_EXISTS                       5044\n#define ERROR_CLUSTER_NETWORK_NOT_FOUND                    5045\n#define ERROR_CLUSTER_NETINTERFACE_EXISTS                  5046\n#define ERROR_CLUSTER_NETINTERFACE_NOT_FOUND               5047\n#define ERROR_CLUSTER_INVALID_REQUEST                      5048\n#define ERROR_CLUSTER_INVALID_NETWORK_PROVIDER             5049\n#define ERROR_CLUSTER_NODE_DOWN                            5050\n#define ERROR_CLUSTER_NODE_UNREACHABLE                     5051\n#define ERROR_CLUSTER_NODE_NOT_MEMBER                      5052\n#define ERROR_CLUSTER_JOIN_NOT_IN_PROGRESS                 5053\n#define ERROR_CLUSTER_INVALID_NETWORK                      5054\n#define ERROR_CLUSTER_NODE_UP                              5056\n#define ERROR_CLUSTER_IPADDR_IN_USE                        5057\n#define ERROR_CLUSTER_NODE_NOT_PAUSED                      5058\n#define ERROR_CLUSTER_NO_SECURITY_CONTEXT                  5059\n#define ERROR_CLUSTER_NETWORK_NOT_INTERNAL                 5060\n#define ERROR_CLUSTER_NODE_ALREADY_UP                      5061\n#define ERROR_CLUSTER_NODE_ALREADY_DOWN                    5062\n#define ERROR_CLUSTER_NETWORK_ALREADY_ONLINE               5063\n#define ERROR_CLUSTER_NETWORK_ALREADY_OFFLINE              5064\n#define ERROR_CLUSTER_NODE_ALREADY_MEMBER                  5065\n#define ERROR_CLUSTER_LAST_INTERNAL_NETWORK                5066\n#define ERROR_CLUSTER_NETWORK_HAS_DEPENDENTS               5067\n#define ERROR_INVALID_OPERATION_ON_QUORUM                  5068\n#define ERROR_DEPENDENCY_NOT_ALLOWED                       5069\n#define ERROR_CLUSTER_NODE_PAUSED                          5070\n#define ERROR_NODE_CANT_HOST_RESOURCE                      5071\n#define ERROR_CLUSTER_NODE_NOT_READY                       5072\n#define ERROR_CLUSTER_NODE_SHUTTING_DOWN                   5073\n#define ERROR_CLUSTER_JOIN_ABORTED                         5074\n#define ERROR_CLUSTER_INCOMPATIBLE_VERSIONS                5075\n#define ERROR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED         5076\n#define ERROR_CLUSTER_SYSTEM_CONFIG_CHANGED                5077\n#define ERROR_CLUSTER_RESOURCE_TYPE_NOT_FOUND              5078\n#define ERROR_CLUSTER_RESTYPE_NOT_SUPPORTED                5079\n#define ERROR_CLUSTER_RESNAME_NOT_FOUND                    5080\n#define ERROR_CLUSTER_NO_RPC_PACKAGES_REGISTERED           5081\n#define ERROR_CLUSTER_OWNER_NOT_IN_PREFLIST                5082\n#define ERROR_CLUSTER_DATABASE_SEQMISMATCH                 5083\n#define ERROR_RESMON_INVALID_STATE                         5084\n#define ERROR_CLUSTER_GUM_NOT_LOCKER                       5085\n#define ERROR_QUORUM_DISK_NOT_FOUND                        5086\n#define ERROR_DATABASE_BACKUP_CORRUPT                      5087\n#define ERROR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT            5088\n#define ERROR_RESOURCE_PROPERTY_UNCHANGEABLE               5089\n#define ERROR_ENCRYPTION_FAILED                            6000\n#define ERROR_DECRYPTION_FAILED                            6001\n#define ERROR_FILE_ENCRYPTED                               6002\n#define ERROR_NO_RECOVERY_POLICY                           6003\n#define ERROR_NO_EFS                                       6004\n#define ERROR_WRONG_EFS                                    6005\n#define ERROR_NO_USER_KEYS                                 6006\n#define ERROR_FILE_NOT_ENCRYPTED                           6007\n#define ERROR_NOT_EXPORT_FORMAT                            6008\n#define ERROR_FILE_READ_ONLY                               6009\n#define ERROR_DIR_EFS_DISALLOWED                           6010\n#define ERROR_EFS_SERVER_NOT_TRUSTED                       6011\n#define ERROR_EFS_ALG_BLOB_TOO_BIG                         6013\n#define ERROR_NO_BROWSER_SERVERS_FOUND                     6118\n#define SCHED_E_SERVICE_NOT_LOCALSYSTEM                    6200\n#define ERROR_CTX_WINSTATION_NAME_INVALID                  7001\n#define ERROR_CTX_INVALID_PD                               7002\n#define ERROR_CTX_PD_NOT_FOUND                             7003\n#define ERROR_CTX_WD_NOT_FOUND                             7004\n#define ERROR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY               7005\n#define ERROR_CTX_SERVICE_NAME_COLLISION                   7006\n#define ERROR_CTX_CLOSE_PENDING                            7007\n#define ERROR_CTX_NO_OUTBUF                                7008\n#define ERROR_CTX_MODEM_INF_NOT_FOUND                      7009\n#define ERROR_CTX_INVALID_MODEMNAME                        7010\n#define ERROR_CTX_MODEM_RESPONSE_ERROR                     7011\n#define ERROR_CTX_MODEM_RESPONSE_TIMEOUT                   7012\n#define ERROR_CTX_MODEM_RESPONSE_NO_CARRIER                7013\n#define ERROR_CTX_MODEM_RESPONSE_NO_DIALTONE               7014\n#define ERROR_CTX_MODEM_RESPONSE_BUSY                      7015\n#define ERROR_CTX_MODEM_RESPONSE_VOICE                     7016\n#define ERROR_CTX_TD_ERROR                                 7017\n#define ERROR_CTX_WINSTATION_NOT_FOUND                     7022\n#define ERROR_CTX_WINSTATION_ALREADY_EXISTS                7023\n#define ERROR_CTX_WINSTATION_BUSY                          7024\n#define ERROR_CTX_BAD_VIDEO_MODE                           7025\n#define ERROR_CTX_GRAPHICS_INVALID                         7035\n#define ERROR_CTX_LOGON_DISABLED                           7037\n#define ERROR_CTX_NOT_CONSOLE                              7038\n#define ERROR_CTX_CLIENT_QUERY_TIMEOUT                     7040\n#define ERROR_CTX_CONSOLE_DISCONNECT                       7041\n#define ERROR_CTX_CONSOLE_CONNECT                          7042\n#define ERROR_CTX_SHADOW_DENIED                            7044\n#define ERROR_CTX_WINSTATION_ACCESS_DENIED                 7045\n#define ERROR_CTX_INVALID_WD                               7049\n#define ERROR_CTX_SHADOW_INVALID                           7050\n#define ERROR_CTX_SHADOW_DISABLED                          7051\n#define ERROR_CTX_CLIENT_LICENSE_IN_USE                    7052\n#define ERROR_CTX_CLIENT_LICENSE_NOT_SET                   7053\n#define ERROR_CTX_LICENSE_NOT_AVAILABLE                    7054\n#define ERROR_CTX_LICENSE_CLIENT_INVALID                   7055\n#define ERROR_CTX_LICENSE_EXPIRED                          7056\n#define ERROR_CTX_SHADOW_NOT_RUNNING                       7057\n#define ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE              7058\n#define FRS_ERR_INVALID_API_SEQUENCE                       8001\n#define FRS_ERR_STARTING_SERVICE                           8002\n#define FRS_ERR_STOPPING_SERVICE                           8003\n#define FRS_ERR_INTERNAL_API                               8004\n#define FRS_ERR_INTERNAL                                   8005\n#define FRS_ERR_SERVICE_COMM                               8006\n#define FRS_ERR_INSUFFICIENT_PRIV                          8007\n#define FRS_ERR_AUTHENTICATION                             8008\n#define FRS_ERR_PARENT_INSUFFICIENT_PRIV                   8009\n#define FRS_ERR_PARENT_AUTHENTICATION                      8010\n#define FRS_ERR_CHILD_TO_PARENT_COMM                       8011\n#define FRS_ERR_PARENT_TO_CHILD_COMM                       8012\n#define FRS_ERR_SYSVOL_POPULATE                            8013\n#define FRS_ERR_SYSVOL_POPULATE_TIMEOUT                    8014\n#define FRS_ERR_SYSVOL_IS_BUSY                             8015\n#define FRS_ERR_SYSVOL_DEMOTE                              8016\n#define FRS_ERR_INVALID_SERVICE_PARAMETER                  8017\n#define ERROR_DS_NOT_INSTALLED                             8200\n#define ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY              8201\n#define ERROR_DS_NO_ATTRIBUTE_OR_VALUE                     8202\n#define ERROR_DS_INVALID_ATTRIBUTE_SYNTAX                  8203\n#define ERROR_DS_ATTRIBUTE_TYPE_UNDEFINED                  8204\n#define ERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS                 8205\n#define ERROR_DS_BUSY                                      8206\n#define ERROR_DS_UNAVAILABLE                               8207\n#define ERROR_DS_NO_RIDS_ALLOCATED                         8208\n#define ERROR_DS_NO_MORE_RIDS                              8209\n#define ERROR_DS_INCORRECT_ROLE_OWNER                      8210\n#define ERROR_DS_RIDMGR_INIT_ERROR                         8211\n#define ERROR_DS_OBJ_CLASS_VIOLATION                       8212\n#define ERROR_DS_CANT_ON_NON_LEAF                          8213\n#define ERROR_DS_CANT_ON_RDN                               8214\n#define ERROR_DS_CANT_MOD_OBJ_CLASS                        8215\n#define ERROR_DS_CROSS_DOM_MOVE_ERROR                      8216\n#define ERROR_DS_GC_NOT_AVAILABLE                          8217\n#define ERROR_SHARED_POLICY                                8218\n#define ERROR_POLICY_OBJECT_NOT_FOUND                      8219\n#define ERROR_POLICY_ONLY_IN_DS                            8220\n#define ERROR_PROMOTION_ACTIVE                             8221\n#define ERROR_NO_PROMOTION_ACTIVE                          8222\n#define ERROR_DS_OPERATIONS_ERROR                          8224\n#define ERROR_DS_PROTOCOL_ERROR                            8225\n#define ERROR_DS_TIMELIMIT_EXCEEDED                        8226\n#define ERROR_DS_SIZELIMIT_EXCEEDED                        8227\n#define ERROR_DS_ADMIN_LIMIT_EXCEEDED                      8228\n#define ERROR_DS_COMPARE_FALSE                             8229\n#define ERROR_DS_COMPARE_TRUE                              8230\n#define ERROR_DS_AUTH_METHOD_NOT_SUPPORTED                 8231\n#define ERROR_DS_STRONG_AUTH_REQUIRED                      8232\n#define ERROR_DS_INAPPROPRIATE_AUTH                        8233\n#define ERROR_DS_AUTH_UNKNOWN                              8234\n#define ERROR_DS_REFERRAL                                  8235\n#define ERROR_DS_UNAVAILABLE_CRIT_EXTENSION                8236\n#define ERROR_DS_CONFIDENTIALITY_REQUIRED                  8237\n#define ERROR_DS_INAPPROPRIATE_MATCHING                    8238\n#define ERROR_DS_CONSTRAINT_VIOLATION                      8239\n#define ERROR_DS_NO_SUCH_OBJECT                            8240\n#define ERROR_DS_ALIAS_PROBLEM                             8241\n#define ERROR_DS_INVALID_DN_SYNTAX                         8242\n#define ERROR_DS_IS_LEAF                                   8243\n#define ERROR_DS_ALIAS_DEREF_PROBLEM                       8244\n#define ERROR_DS_UNWILLING_TO_PERFORM                      8245\n#define ERROR_DS_LOOP_DETECT                               8246\n#define ERROR_DS_NAMING_VIOLATION                          8247\n#define ERROR_DS_OBJECT_RESULTS_TOO_LARGE                  8248\n#define ERROR_DS_AFFECTS_MULTIPLE_DSAS                     8249\n#define ERROR_DS_SERVER_DOWN                               8250\n#define ERROR_DS_LOCAL_ERROR                               8251\n#define ERROR_DS_ENCODING_ERROR                            8252\n#define ERROR_DS_DECODING_ERROR                            8253\n#define ERROR_DS_FILTER_UNKNOWN                            8254\n#define ERROR_DS_PARAM_ERROR                               8255\n#define ERROR_DS_NOT_SUPPORTED                             8256\n#define ERROR_DS_NO_RESULTS_RETURNED                       8257\n#define ERROR_DS_CONTROL_NOT_FOUND                         8258\n#define ERROR_DS_CLIENT_LOOP                               8259\n#define ERROR_DS_REFERRAL_LIMIT_EXCEEDED                   8260\n#define ERROR_DS_ROOT_MUST_BE_NC                           8301\n#define ERROR_DS_ADD_REPLICA_INHIBITED                     8302\n#define ERROR_DS_ATT_NOT_DEF_IN_SCHEMA                     8303\n#define ERROR_DS_MAX_OBJ_SIZE_EXCEEDED                     8304\n#define ERROR_DS_OBJ_STRING_NAME_EXISTS                    8305\n#define ERROR_DS_NO_RDN_DEFINED_IN_SCHEMA                  8306\n#define ERROR_DS_RDN_DOESNT_MATCH_SCHEMA                   8307\n#define ERROR_DS_NO_REQUESTED_ATTS_FOUND                   8308\n#define ERROR_DS_USER_BUFFER_TO_SMALL                      8309\n#define ERROR_DS_ATT_IS_NOT_ON_OBJ                         8310\n#define ERROR_DS_ILLEGAL_MOD_OPERATION                     8311\n#define ERROR_DS_OBJ_TOO_LARGE                             8312\n#define ERROR_DS_BAD_INSTANCE_TYPE                         8313\n#define ERROR_DS_MASTERDSA_REQUIRED                        8314\n#define ERROR_DS_OBJECT_CLASS_REQUIRED                     8315\n#define ERROR_DS_MISSING_REQUIRED_ATT                      8316\n#define ERROR_DS_ATT_NOT_DEF_FOR_CLASS                     8317\n#define ERROR_DS_ATT_ALREADY_EXISTS                        8318\n#define ERROR_DS_CANT_ADD_ATT_VALUES                       8320\n#define ERROR_DS_SINGLE_VALUE_CONSTRAINT                   8321\n#define ERROR_DS_RANGE_CONSTRAINT                          8322\n#define ERROR_DS_ATT_VAL_ALREADY_EXISTS                    8323\n#define ERROR_DS_CANT_REM_MISSING_ATT                      8324\n#define ERROR_DS_CANT_REM_MISSING_ATT_VAL                  8325\n#define ERROR_DS_ROOT_CANT_BE_SUBREF                       8326\n#define ERROR_DS_NO_CHAINING                               8327\n#define ERROR_DS_NO_CHAINED_EVAL                           8328\n#define ERROR_DS_NO_PARENT_OBJECT                          8329\n#define ERROR_DS_PARENT_IS_AN_ALIAS                        8330\n#define ERROR_DS_CANT_MIX_MASTER_AND_REPS                  8331\n#define ERROR_DS_CHILDREN_EXIST                            8332\n#define ERROR_DS_OBJ_NOT_FOUND                             8333\n#define ERROR_DS_ALIASED_OBJ_MISSING                       8334\n#define ERROR_DS_BAD_NAME_SYNTAX                           8335\n#define ERROR_DS_ALIAS_POINTS_TO_ALIAS                     8336\n#define ERROR_DS_CANT_DEREF_ALIAS                          8337\n#define ERROR_DS_OUT_OF_SCOPE                              8338\n#define ERROR_DS_CANT_DELETE_DSA_OBJ                       8340\n#define ERROR_DS_GENERIC_ERROR                             8341\n#define ERROR_DS_DSA_MUST_BE_INT_MASTER                    8342\n#define ERROR_DS_CLASS_NOT_DSA                             8343\n#define ERROR_DS_INSUFF_ACCESS_RIGHTS                      8344\n#define ERROR_DS_ILLEGAL_SUPERIOR                          8345\n#define ERROR_DS_ATTRIBUTE_OWNED_BY_SAM                    8346\n#define ERROR_DS_NAME_TOO_MANY_PARTS                       8347\n#define ERROR_DS_NAME_TOO_LONG                             8348\n#define ERROR_DS_NAME_VALUE_TOO_LONG                       8349\n#define ERROR_DS_NAME_UNPARSEABLE                          8350\n#define ERROR_DS_NAME_TYPE_UNKNOWN                         8351\n#define ERROR_DS_NOT_AN_OBJECT                             8352\n#define ERROR_DS_SEC_DESC_TOO_SHORT                        8353\n#define ERROR_DS_SEC_DESC_INVALID                          8354\n#define ERROR_DS_NO_DELETED_NAME                           8355\n#define ERROR_DS_SUBREF_MUST_HAVE_PARENT                   8356\n#define ERROR_DS_NCNAME_MUST_BE_NC                         8357\n#define ERROR_DS_CANT_ADD_SYSTEM_ONLY                      8358\n#define ERROR_DS_CLASS_MUST_BE_CONCRETE                    8359\n#define ERROR_DS_INVALID_DMD                               8360\n#define ERROR_DS_OBJ_GUID_EXISTS                           8361\n#define ERROR_DS_NOT_ON_BACKLINK                           8362\n#define ERROR_DS_NO_CROSSREF_FOR_NC                        8363\n#define ERROR_DS_SHUTTING_DOWN                             8364\n#define ERROR_DS_UNKNOWN_OPERATION                         8365\n#define ERROR_DS_INVALID_ROLE_OWNER                        8366\n#define ERROR_DS_COULDNT_CONTACT_FSMO                      8367\n#define ERROR_DS_CROSS_NC_DN_RENAME                        8368\n#define ERROR_DS_CANT_MOD_SYSTEM_ONLY                      8369\n#define ERROR_DS_REPLICATOR_ONLY                           8370\n#define ERROR_DS_OBJ_CLASS_NOT_DEFINED                     8371\n#define ERROR_DS_OBJ_CLASS_NOT_SUBCLASS                    8372\n#define ERROR_DS_NAME_REFERENCE_INVALID                    8373\n#define ERROR_DS_CROSS_REF_EXISTS                          8374\n#define ERROR_DS_CANT_DEL_MASTER_CROSSREF                  8375\n#define ERROR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD                8376\n#define ERROR_DS_NOTIFY_FILTER_TOO_COMPLEX                 8377\n#define ERROR_DS_DUP_RDN                                   8378\n#define ERROR_DS_DUP_OID                                   8379\n#define ERROR_DS_DUP_MAPI_ID                               8380\n#define ERROR_DS_DUP_SCHEMA_ID_GUID                        8381\n#define ERROR_DS_DUP_LDAP_DISPLAY_NAME                     8382\n#define ERROR_DS_SEMANTIC_ATT_TEST                         8383\n#define ERROR_DS_SYNTAX_MISMATCH                           8384\n#define ERROR_DS_EXISTS_IN_MUST_HAVE                       8385\n#define ERROR_DS_EXISTS_IN_MAY_HAVE                        8386\n#define ERROR_DS_NONEXISTENT_MAY_HAVE                      8387\n#define ERROR_DS_NONEXISTENT_MUST_HAVE                     8388\n#define ERROR_DS_AUX_CLS_TEST_FAIL                         8389\n#define ERROR_DS_NONEXISTENT_POSS_SUP                      8390\n#define ERROR_DS_SUB_CLS_TEST_FAIL                         8391\n#define ERROR_DS_BAD_RDN_ATT_ID_SYNTAX                     8392\n#define ERROR_DS_EXISTS_IN_AUX_CLS                         8393\n#define ERROR_DS_EXISTS_IN_SUB_CLS                         8394\n#define ERROR_DS_EXISTS_IN_POSS_SUP                        8395\n#define ERROR_DS_RECALCSCHEMA_FAILED                       8396\n#define ERROR_DS_TREE_DELETE_NOT_FINISHED                  8397\n#define ERROR_DS_CANT_DELETE                               8398\n#define ERROR_DS_ATT_SCHEMA_REQ_ID                         8399\n#define ERROR_DS_BAD_ATT_SCHEMA_SYNTAX                     8400\n#define ERROR_DS_CANT_CACHE_ATT                            8401\n#define ERROR_DS_CANT_CACHE_CLASS                          8402\n#define ERROR_DS_CANT_REMOVE_ATT_CACHE                     8403\n#define ERROR_DS_CANT_REMOVE_CLASS_CACHE                   8404\n#define ERROR_DS_CANT_RETRIEVE_DN                          8405\n#define ERROR_DS_MISSING_SUPREF                            8406\n#define ERROR_DS_CANT_RETRIEVE_INSTANCE                    8407\n#define ERROR_DS_CODE_INCONSISTENCY                        8408\n#define ERROR_DS_DATABASE_ERROR                            8409\n#define ERROR_DS_GOVERNSID_MISSING                         8410\n#define ERROR_DS_MISSING_EXPECTED_ATT                      8411\n#define ERROR_DS_NCNAME_MISSING_CR_REF                     8412\n#define ERROR_DS_SECURITY_CHECKING_ERROR                   8413\n#define ERROR_DS_SCHEMA_NOT_LOADED                         8414\n#define ERROR_DS_SCHEMA_ALLOC_FAILED                       8415\n#define ERROR_DS_ATT_SCHEMA_REQ_SYNTAX                     8416\n#define ERROR_DS_GCVERIFY_ERROR                            8417\n#define ERROR_DS_DRA_SCHEMA_MISMATCH                       8418\n#define ERROR_DS_CANT_FIND_DSA_OBJ                         8419\n#define ERROR_DS_CANT_FIND_EXPECTED_NC                     8420\n#define ERROR_DS_CANT_FIND_NC_IN_CACHE                     8421\n#define ERROR_DS_CANT_RETRIEVE_CHILD                       8422\n#define ERROR_DS_SECURITY_ILLEGAL_MODIFY                   8423\n#define ERROR_DS_CANT_REPLACE_HIDDEN_REC                   8424\n#define ERROR_DS_BAD_HIERARCHY_FILE                        8425\n#define ERROR_DS_BUILD_HIERARCHY_TABLE_FAILED              8426\n#define ERROR_DS_CONFIG_PARAM_MISSING                      8427\n#define ERROR_DS_COUNTING_AB_INDICES_FAILED                8428\n#define ERROR_DS_HIERARCHY_TABLE_MALLOC_FAILED             8429\n#define ERROR_DS_INTERNAL_FAILURE                          8430\n#define ERROR_DS_UNKNOWN_ERROR                             8431\n#define ERROR_DS_ROOT_REQUIRES_CLASS_TOP                   8432\n#define ERROR_DS_REFUSING_FSMO_ROLES                       8433\n#define ERROR_DS_MISSING_FSMO_SETTINGS                     8434\n#define ERROR_DS_UNABLE_TO_SURRENDER_ROLES                 8435\n#define ERROR_DS_DRA_GENERIC                               8436\n#define ERROR_DS_DRA_INVALID_PARAMETER                     8437\n#define ERROR_DS_DRA_BUSY                                  8438\n#define ERROR_DS_DRA_BAD_DN                                8439\n#define ERROR_DS_DRA_BAD_NC                                8440\n#define ERROR_DS_DRA_DN_EXISTS                             8441\n#define ERROR_DS_DRA_INTERNAL_ERROR                        8442\n#define ERROR_DS_DRA_INCONSISTENT_DIT                      8443\n#define ERROR_DS_DRA_CONNECTION_FAILED                     8444\n#define ERROR_DS_DRA_BAD_INSTANCE_TYPE                     8445\n#define ERROR_DS_DRA_OUT_OF_MEM                            8446\n#define ERROR_DS_DRA_MAIL_PROBLEM                          8447\n#define ERROR_DS_DRA_REF_ALREADY_EXISTS                    8448\n#define ERROR_DS_DRA_REF_NOT_FOUND                         8449\n#define ERROR_DS_DRA_OBJ_IS_REP_SOURCE                     8450\n#define ERROR_DS_DRA_DB_ERROR                              8451\n#define ERROR_DS_DRA_NO_REPLICA                            8452\n#define ERROR_DS_DRA_ACCESS_DENIED                         8453\n#define ERROR_DS_DRA_NOT_SUPPORTED                         8454\n#define ERROR_DS_DRA_RPC_CANCELLED                         8455\n#define ERROR_DS_DRA_SOURCE_DISABLED                       8456\n#define ERROR_DS_DRA_SINK_DISABLED                         8457\n#define ERROR_DS_DRA_NAME_COLLISION                        8458\n#define ERROR_DS_DRA_SOURCE_REINSTALLED                    8459\n#define ERROR_DS_DRA_MISSING_PARENT                        8460\n#define ERROR_DS_DRA_PREEMPTED                             8461\n#define ERROR_DS_DRA_ABANDON_SYNC                          8462\n#define ERROR_DS_DRA_SHUTDOWN                              8463\n#define ERROR_DS_DRA_INCOMPATIBLE_PARTIAL_SET              8464\n#define ERROR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA             8465\n#define ERROR_DS_DRA_EXTN_CONNECTION_FAILED                8466\n#define ERROR_DS_INSTALL_SCHEMA_MISMATCH                   8467\n#define ERROR_DS_DUP_LINK_ID                               8468\n#define ERROR_DS_NAME_ERROR_RESOLVING                      8469\n#define ERROR_DS_NAME_ERROR_NOT_FOUND                      8470\n#define ERROR_DS_NAME_ERROR_NOT_UNIQUE                     8471\n#define ERROR_DS_NAME_ERROR_NO_MAPPING                     8472\n#define ERROR_DS_NAME_ERROR_DOMAIN_ONLY                    8473\n#define ERROR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING         8474\n#define ERROR_DS_CONSTRUCTED_ATT_MOD                       8475\n#define ERROR_DS_WRONG_OM_OBJ_CLASS                        8476\n#define ERROR_DS_DRA_REPL_PENDING                          8477\n#define ERROR_DS_DS_REQUIRED                               8478\n#define ERROR_DS_INVALID_LDAP_DISPLAY_NAME                 8479\n#define ERROR_DS_NON_BASE_SEARCH                           8480\n#define ERROR_DS_CANT_RETRIEVE_ATTS                        8481\n#define ERROR_DS_BACKLINK_WITHOUT_LINK                     8482\n#define ERROR_DS_EPOCH_MISMATCH                            8483\n#define ERROR_DS_SRC_NAME_MISMATCH                         8484\n#define ERROR_DS_SRC_AND_DST_NC_IDENTICAL                  8485\n#define ERROR_DS_DST_NC_MISMATCH                           8486\n#define ERROR_DS_NOT_AUTHORITIVE_FOR_DST_NC                8487\n#define ERROR_DS_SRC_GUID_MISMATCH                         8488\n#define ERROR_DS_CANT_MOVE_DELETED_OBJECT                  8489\n#define ERROR_DS_PDC_OPERATION_IN_PROGRESS                 8490\n#define ERROR_DS_CROSS_DOMAIN_CLEANUP_REQD                 8491\n#define ERROR_DS_ILLEGAL_XDOM_MOVE_OPERATION               8492\n#define ERROR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS           8493\n#define ERROR_DS_NC_MUST_HAVE_NC_PARENT                    8494\n#define ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE                 8495\n#define ERROR_DS_DST_DOMAIN_NOT_NATIVE                     8496\n#define ERROR_DS_MISSING_INFRASTRUCTURE_CONTAINER          8497\n#define ERROR_DS_CANT_MOVE_ACCOUNT_GROUP                   8498\n#define ERROR_DS_CANT_MOVE_RESOURCE_GROUP                  8499\n#define ERROR_DS_INVALID_SEARCH_FLAG                       8500\n#define ERROR_DS_NO_TREE_DELETE_ABOVE_NC                   8501\n#define ERROR_DS_COULDNT_LOCK_TREE_FOR_DELETE              8502\n#define ERROR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE  8503\n#define ERROR_DS_SAM_INIT_FAILURE                          8504\n#define ERROR_DS_SENSITIVE_GROUP_VIOLATION                 8505\n#define ERROR_DS_CANT_MOD_PRIMARYGROUPID                   8506\n#define ERROR_DS_ILLEGAL_BASE_SCHEMA_MOD                   8507\n#define ERROR_DS_NONSAFE_SCHEMA_CHANGE                     8508\n#define ERROR_DS_SCHEMA_UPDATE_DISALLOWED                  8509\n#define ERROR_DS_CANT_CREATE_UNDER_SCHEMA                  8510\n#define ERROR_DS_INSTALL_NO_SRC_SCH_VERSION                8511\n#define ERROR_DS_INSTALL_NO_SCH_VERSION_IN_INIFILE         8512\n#define ERROR_DS_INVALID_GROUP_TYPE                        8513\n#define ERROR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN        8514\n#define ERROR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN         8515\n#define ERROR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER             8516\n#define ERROR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER         8517\n#define ERROR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER          8518\n#define ERROR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER       8519\n#define ERROR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER  8520\n#define ERROR_DS_HAVE_PRIMARY_MEMBERS                      8521\n#define ERROR_DS_STRING_SD_CONVERSION_FAILED               8522\n#define ERROR_DS_NAMING_MASTER_GC                          8523\n#define ERROR_DS_LOOKUP_FAILURE                            8524\n#define ERROR_DS_COULDNT_UPDATE_SPNS                       8525\n#define ERROR_DS_CANT_RETRIEVE_SD                          8526\n#define ERROR_DS_KEY_NOT_UNIQUE                            8527\n#define ERROR_DS_WRONG_LINKED_ATT_SYNTAX                   8528\n#define ERROR_DS_SAM_NEED_BOOTKEY_PASSWORD                 8529\n#define ERROR_DS_SAM_NEED_BOOTKEY_FLOPPY                   8530\n#define ERROR_DS_CANT_START                                8531\n#define ERROR_DS_INIT_FAILURE                              8532\n#define ERROR_DS_NO_PKT_PRIVACY_ON_CONNECTION              8533\n#define ERROR_DS_SOURCE_DOMAIN_IN_FOREST                   8534\n#define ERROR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST          8535\n#define ERROR_DS_DESTINATION_AUDITING_NOT_ENABLED          8536\n#define ERROR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN               8537\n#define ERROR_DS_SRC_OBJ_NOT_GROUP_OR_USER                 8538\n#define ERROR_DS_SRC_SID_EXISTS_IN_FOREST                  8539\n#define ERROR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH         8540\n#define ERROR_SAM_INIT_FAILURE                             8541\n#define ERROR_DS_DRA_SCHEMA_INFO_SHIP                      8542\n#define ERROR_DS_DRA_SCHEMA_CONFLICT                       8543\n#define ERROR_DS_DRA_EARLIER_SCHEMA_CONLICT                8544\n#define ERROR_DS_DRA_OBJ_NC_MISMATCH                       8545\n#define ERROR_DS_NC_STILL_HAS_DSAS                         8546\n#define ERROR_DS_GC_REQUIRED                               8547\n#define ERROR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY                8548\n#define ERROR_DS_NO_FPO_IN_UNIVERSAL_GROUPS                8549\n#define ERROR_DS_CANT_ADD_TO_GC                            8550\n#define ERROR_DS_NO_CHECKPOINT_WITH_PDC                    8551\n#define ERROR_DS_SOURCE_AUDITING_NOT_ENABLED               8552\n#define ERROR_DS_CANT_CREATE_IN_NONDOMAIN_NC               8553\n#define ERROR_DS_INVALID_NAME_FOR_SPN                      8554\n#define ERROR_DS_FILTER_USES_CONTRUCTED_ATTRS              8555\n#define ERROR_DS_UNICODEPWD_NOT_IN_QUOTES                  8556\n#define ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED            8557\n#define ERROR_DS_MUST_BE_RUN_ON_DST_DC                     8558\n#define ERROR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER             8559\n#define ERROR_DS_CANT_TREE_DELETE_CRITICAL_OBJ             8560\n#define ERROR_DS_INIT_FAILURE_CONSOLE                      8561\n#define ERROR_DS_SAM_INIT_FAILURE_CONSOLE                  8562\n#define ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4            8572\n#define ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER             8578\n#define DNS_ERROR_RCODE_FORMAT_ERROR                       9001\n#define DNS_ERROR_RCODE_SERVER_FAILURE                     9002\n#define DNS_ERROR_RCODE_NAME_ERROR                         9003\n#define DNS_ERROR_RCODE_NOT_IMPLEMENTED                    9004\n#define DNS_ERROR_RCODE_REFUSED                            9005\n#define DNS_ERROR_RCODE_YXDOMAIN                           9006\n#define DNS_ERROR_RCODE_YXRRSET                            9007\n#define DNS_ERROR_RCODE_NXRRSET                            9008\n#define DNS_ERROR_RCODE_NOTAUTH                            9009\n#define DNS_ERROR_RCODE_NOTZONE                            9010\n#define DNS_ERROR_RCODE_BADSIG                             9016\n#define DNS_ERROR_RCODE_BADKEY                             9017\n#define DNS_ERROR_RCODE_BADTIME                            9018\n#define DNS_INFO_NO_RECORDS                                9501\n#define DNS_ERROR_BAD_PACKET                               9502\n#define DNS_ERROR_NO_PACKET                                9503\n#define DNS_ERROR_RCODE                                    9504\n#define DNS_ERROR_UNSECURE_PACKET                          9505\n#define DNS_REQUEST_PENDING                                9506\n#define DNS_ERROR_INVALID_TYPE                             9551\n#define DNS_ERROR_INVALID_IP_ADDRESS                       9552\n#define DNS_ERROR_INVALID_PROPERTY                         9553\n#define DNS_ERROR_TRY_AGAIN_LATER                          9554\n#define DNS_ERROR_NOT_UNIQUE                               9555\n#define DNS_ERROR_NON_RFC_NAME                             9556\n#define DNS_STATUS_FQDN                                    9557\n#define DNS_STATUS_DOTTED_NAME                             9558\n#define DNS_STATUS_SINGLE_PART_NAME                        9559\n#define DNS_ERROR_INVALID_NAME_CHAR                        9560\n#define DNS_ERROR_NUMERIC_NAME                             9561\n#define DNS_ERROR_ZONE_DOES_NOT_EXIST                      9601\n#define DNS_ERROR_NO_ZONE_INFO                             9602\n#define DNS_ERROR_INVALID_ZONE_OPERATION                   9603\n#define DNS_ERROR_ZONE_CONFIGURATION_ERROR                 9604\n#define DNS_ERROR_ZONE_HAS_NO_SOA_RECORD                   9605\n#define DNS_ERROR_ZONE_HAS_NO_NS_RECORDS                   9606\n#define DNS_ERROR_ZONE_LOCKED                              9607\n#define DNS_ERROR_ZONE_CREATION_FAILED                     9608\n#define DNS_ERROR_ZONE_ALREADY_EXISTS                      9609\n#define DNS_ERROR_AUTOZONE_ALREADY_EXISTS                  9610\n#define DNS_ERROR_INVALID_ZONE_TYPE                        9611\n#define DNS_ERROR_SECONDARY_REQUIRES_MASTER_IP             9612\n#define DNS_ERROR_ZONE_NOT_SECONDARY                       9613\n#define DNS_ERROR_NEED_SECONDARY_ADDRESSES                 9614\n#define DNS_ERROR_WINS_INIT_FAILED                         9615\n#define DNS_ERROR_NEED_WINS_SERVERS                        9616\n#define DNS_ERROR_NBSTAT_INIT_FAILED                       9617\n#define DNS_ERROR_SOA_DELETE_INVALID                       9618\n#define DNS_ERROR_PRIMARY_REQUIRES_DATAFILE                9651\n#define DNS_ERROR_INVALID_DATAFILE_NAME                    9652\n#define DNS_ERROR_DATAFILE_OPEN_FAILURE                    9653\n#define DNS_ERROR_FILE_WRITEBACK_FAILED                    9654\n#define DNS_ERROR_DATAFILE_PARSING                         9655\n#define DNS_ERROR_RECORD_DOES_NOT_EXIST                    9701\n#define DNS_ERROR_RECORD_FORMAT                            9702\n#define DNS_ERROR_NODE_CREATION_FAILED                     9703\n#define DNS_ERROR_UNKNOWN_RECORD_TYPE                      9704\n#define DNS_ERROR_RECORD_TIMED_OUT                         9705\n#define DNS_ERROR_NAME_NOT_IN_ZONE                         9706\n#define DNS_ERROR_CNAME_LOOP                               9707\n#define DNS_ERROR_NODE_IS_CNAME                            9708\n#define DNS_ERROR_CNAME_COLLISION                          9709\n#define DNS_ERROR_RECORD_ONLY_AT_ZONE_ROOT                 9710\n#define DNS_ERROR_RECORD_ALREADY_EXISTS                    9711\n#define DNS_ERROR_SECONDARY_DATA                           9712\n#define DNS_ERROR_NO_CREATE_CACHE_DATA                     9713\n#define DNS_ERROR_NAME_DOES_NOT_EXIST                      9714\n#define DNS_WARNING_PTR_CREATE_FAILED                      9715\n#define DNS_WARNING_DOMAIN_UNDELETED                       9716\n#define DNS_ERROR_DS_UNAVAILABLE                           9717\n#define DNS_ERROR_DS_ZONE_ALREADY_EXISTS                   9718\n#define DNS_ERROR_NO_BOOTFILE_IF_DS_ZONE                   9719\n#define DNS_INFO_AXFR_COMPLETE                             9751\n#define DNS_ERROR_AXFR                                     9752\n#define DNS_INFO_ADDED_LOCAL_WINS                          9753\n#define DNS_STATUS_CONTINUE_NEEDED                         9801\n#define DNS_ERROR_NO_TCPIP                                 9851\n#define DNS_ERROR_NO_DNS_SERVERS                           9852\n\n/*\n * Also defined in winsock.h.\n *\n * All Windows Sockets error constants are biased by WSABASEERR from\n * the \"normal\"\n */\n#define WSABASEERR                 10000\n/*\n * Windows Sockets definitions of regular Microsoft C error constants\n */\n#define WSAEINTR                   (WSABASEERR+4)\n#define WSAEBADF                   (WSABASEERR+9)\n#define WSAEACCES                  (WSABASEERR+13)\n#define WSAEFAULT                  (WSABASEERR+14)\n#define WSAEINVAL                  (WSABASEERR+22)\n#define WSAEMFILE                  (WSABASEERR+24)\n\n/*\n * Windows Sockets definitions of regular Berkeley error constants\n */\n#define WSAEWOULDBLOCK             (WSABASEERR+35)\n#define WSAEINPROGRESS             (WSABASEERR+36)\n#define WSAEALREADY                (WSABASEERR+37)\n#define WSAENOTSOCK                (WSABASEERR+38)\n#define WSAEDESTADDRREQ            (WSABASEERR+39)\n#define WSAEMSGSIZE                (WSABASEERR+40)\n#define WSAEPROTOTYPE              (WSABASEERR+41)\n#define WSAENOPROTOOPT             (WSABASEERR+42)\n#define WSAEPROTONOSUPPORT         (WSABASEERR+43)\n#define WSAESOCKTNOSUPPORT         (WSABASEERR+44)\n#define WSAEOPNOTSUPP              (WSABASEERR+45)\n#define WSAEPFNOSUPPORT            (WSABASEERR+46)\n#define WSAEAFNOSUPPORT            (WSABASEERR+47)\n#define WSAEADDRINUSE              (WSABASEERR+48)\n#define WSAEADDRNOTAVAIL           (WSABASEERR+49)\n#define WSAENETDOWN                (WSABASEERR+50)\n#define WSAENETUNREACH             (WSABASEERR+51)\n#define WSAENETRESET               (WSABASEERR+52)\n#define WSAECONNABORTED            (WSABASEERR+53)\n#define WSAECONNRESET              (WSABASEERR+54)\n#define WSAENOBUFS                 (WSABASEERR+55)\n#define WSAEISCONN                 (WSABASEERR+56)\n#define WSAENOTCONN                (WSABASEERR+57)\n#define WSAESHUTDOWN               (WSABASEERR+58)\n#define WSAETOOMANYREFS            (WSABASEERR+59)\n#define WSAETIMEDOUT               (WSABASEERR+60)\n#define WSAECONNREFUSED            (WSABASEERR+61)\n#define WSAELOOP                   (WSABASEERR+62)\n#define WSAENAMETOOLONG            (WSABASEERR+63)\n#define WSAEHOSTDOWN               (WSABASEERR+64)\n#define WSAEHOSTUNREACH            (WSABASEERR+65)\n#define WSAENOTEMPTY               (WSABASEERR+66)\n#define WSAEPROCLIM                (WSABASEERR+67)\n#define WSAEUSERS                  (WSABASEERR+68)\n#define WSAEDQUOT                  (WSABASEERR+69)\n#define WSAESTALE                  (WSABASEERR+70)\n#define WSAEREMOTE                 (WSABASEERR+71)\n\n/*\n * Extended Windows Sockets error constant definitions\n */\n#define WSASYSNOTREADY             (WSABASEERR+91)\n#define WSAVERNOTSUPPORTED         (WSABASEERR+92)\n#define WSANOTINITIALISED          (WSABASEERR+93)\n#define WSAEDISCON                 (WSABASEERR+101)\n#define WSAENOMORE                 (WSABASEERR+102)\n#define WSAECANCELLED              (WSABASEERR+103)\n#define WSAEINVALIDPROCTABLE       (WSABASEERR+104)\n#define WSAEINVALIDPROVIDER        (WSABASEERR+105)\n#define WSAEPROVIDERFAILEDINIT     (WSABASEERR+106)\n#define WSASYSCALLFAILURE          (WSABASEERR+107)\n#define WSASERVICE_NOT_FOUND       (WSABASEERR+108)\n#define WSATYPE_NOT_FOUND          (WSABASEERR+109)\n#define WSA_E_NO_MORE              (WSABASEERR+110)\n#define WSA_E_CANCELLED            (WSABASEERR+111)\n#define WSAEREFUSED                (WSABASEERR+112)\n\n\n#define ERROR_SXS_SECTION_NOT_FOUND                        14000\n#define ERROR_SXS_CANT_GEN_ACTCTX                          14001\n#define ERROR_SXS_INVALID_ACTCTXDATA_FORMAT                14002\n#define ERROR_SXS_ASSEMBLY_NOT_FOUND                       14003\n#define ERROR_SXS_MANIFEST_FORMAT_ERROR                    14004\n#define ERROR_SXS_MANIFEST_PARSE_ERROR                     14005\n#define ERROR_SXS_ACTIVATION_CONTEXT_DISABLED              14006\n#define ERROR_SXS_KEY_NOT_FOUND                            14007\n#define ERROR_SXS_VERSION_CONFLICT                         14008\n#define ERROR_SXS_WRONG_SECTION_TYPE                       14009\n#define ERROR_SXS_THREAD_QUERIES_DISABLED                  14010\n#define ERROR_SXS_PROCESS_DEFAULT_ALREADY_SET              14011\n#define ERROR_SXS_UNKNOWN_ENCODING_GROUP                   14012\n#define ERROR_SXS_UNKNOWN_ENCODING                         14013\n#define ERROR_SXS_INVALID_XML_NAMESPACE_URI                14014\n#define ERROR_SXS_ROOT_MANIFEST_DEPENDENCY_NOT_INSTALLED   14015\n#define ERROR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED   14016\n#define ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE      14017\n#define ERROR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE       14018\n#define ERROR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE       14019\n#define ERROR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT    14020\n#define ERROR_SXS_DUPLICATE_DLL_NAME                       14021\n#define ERROR_SXS_DUPLICATE_WINDOWCLASS_NAME               14022\n#define ERROR_SXS_DUPLICATE_CLSID                          14023\n#define ERROR_SXS_DUPLICATE_IID                            14024\n#define ERROR_SXS_DUPLICATE_TLBID                          14025\n#define ERROR_SXS_DUPLICATE_PROGID                         14026\n#define ERROR_SXS_DUPLICATE_ASSEMBLY_NAME                  14027\n#define ERROR_SXS_FILE_HASH_MISMATCH                       14028\n#define ERROR_SXS_POLICY_PARSE_ERROR                       14029\n#define ERROR_SXS_PROTECTION_RECOVERY_FAILED               14074\n#define ERROR_SXS_PROTECTION_PUBLIC_KEY_TOO_SHORT          14075\n#define ERROR_SXS_PROTECTION_CATALOG_NOT_VALID             14076\n#define ERROR_SXS_UNTRANSLATABLE_HRESULT                   14077\n#define ERROR_SXS_PROTECTION_CATALOG_FILE_MISSING          14078\n#define ERROR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE      14079\n#define ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME 14080\n#define ERROR_SXS_ASSEMBLY_MISSING                         14081\n#define ERROR_SXS_CORRUPT_ACTIVATION_STACK                 14082\n#define ERROR_SXS_CORRUPTION                               14083\n#define ERROR_SXS_EARLY_DEACTIVATION                       14084\n#define ERROR_SXS_INVALID_DEACTIVATION                     14085\n#define ERROR_SXS_MULTIPLE_DEACTIVATION                    14086\n#define ERROR_SXS_PROCESS_TERMINATION_REQUESTED            14087\n#define ERROR_SXS_RELEASE_ACTIVATION_CONTEXT               14088\n#define ERROR_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY  14089\n#define ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE         14090\n#define ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME          14091\n#define ERROR_SXS_IDENTITY_DUPLICATE_ATTRIBUTE             14092\n#define ERROR_SXS_IDENTITY_PARSE_ERROR                     14093\n#define ERROR_SXS_IDENTITY_PARSE_ERROR                     14093\n#define ERROR_MALFORMED_SUBSTITUTION_STRING                14094\n#define ERROR_SXS_INCORRECT_PUBLIC_KEY_TOKEN               14095\n#define ERROR_UNMAPPED_SUBSTITUTION_STRING                 14096\n#define ERROR_SXS_ASSEMBLY_NOT_LOCKED                      14097\n#define ERROR_SXS_COMPONENT_STORE_CORRUPT                  14098\n#define ERROR_ADVANCED_INSTALLER_FAILED                    14099\n#define ERROR_XML_ENCODING_MISMATCH                        14100\n#define ERROR_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT     14101\n#define ERROR_SXS_IDENTITIES_DIFFERENT                     14102\n#define ERROR_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT             14103\n#define ERROR_SXS_FILE_NOT_PART_OF_ASSEMBLY                14104\n#define ERROR_SXS_MANIFEST_TOO_BIG                         14105\n#define ERROR_SXS_SETTING_NOT_REGISTERED                   14106\n#define ERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE           14107\n#define ERROR_SMI_PRIMITIVE_INSTALLER_FAILED               14108\n#define ERROR_GENERIC_COMMAND_FAILED                       14109\n#define ERROR_SXS_FILE_HASH_MISSING                        14110\n#define ERROR_MUI_FILE_NOT_FOUND                           15100\n#define ERROR_MUI_INVALID_FILE                             15101\n#define ERROR_MUI_INVALID_RC_CONFIG                        15102\n#define ERROR_MUI_INVALID_LOCALE_NAME                      15103\n#define ERROR_MUI_INVALID_ULTIMATEFALLBACK_NAME            15104\n#define ERROR_MUI_FILE_NOT_LOADED                          15105\n#define ERROR_RESOURCE_ENUM_USER_STOP                      15106\n#define ERROR_MUI_INTLSETTINGS_UILANG_NOT_INSTALLED        15107\n#define ERROR_MUI_INTLSETTINGS_INVALID_LOCALE_NAME         15108\n#define ERROR_MRM_RUNTIME_NO_DEFAULT_OR_NEUTRAL_RESOURCE   15110\n#define ERROR_MRM_INVALID_PRICONFIG                        15111\n#define ERROR_MRM_INVALID_FILE_TYPE                        15112\n#define ERROR_MRM_UNKNOWN_QUALIFIER                        15113\n#define ERROR_MRM_INVALID_QUALIFIER_VALUE                  15114\n#define ERROR_MRM_NO_CANDIDATE                             15115\n#define ERROR_MRM_NO_MATCH_OR_DEFAULT_CANDIDATE            15116\n#define ERROR_MRM_RESOURCE_TYPE_MISMATCH                   15117\n#define ERROR_MRM_DUPLICATE_MAP_NAME                       15118\n#define ERROR_MRM_DUPLICATE_ENTRY                          15119\n#define ERROR_MRM_INVALID_RESOURCE_IDENTIFIER              15120\n#define ERROR_MRM_FILEPATH_TOO_LONG                        15121\n#define ERROR_MRM_UNSUPPORTED_DIRECTORY_TYPE               15122\n#define ERROR_MRM_INVALID_PRI_FILE                         15126\n#define ERROR_MRM_NAMED_RESOURCE_NOT_FOUND                 15127\n#define ERROR_MRM_MAP_NOT_FOUND                            15135\n#define ERROR_MRM_UNSUPPORTED_PROFILE_TYPE                 15136\n#define ERROR_MRM_INVALID_QUALIFIER_OPERATOR               15137\n#define ERROR_MRM_INDETERMINATE_QUALIFIER_VALUE            15138\n#define ERROR_MRM_AUTOMERGE_ENABLED                        15139\n#define ERROR_MRM_TOO_MANY_RESOURCES                       15140\n#define ERROR_MCA_INVALID_CAPABILITIES_STRING              15200\n#define ERROR_MCA_INVALID_VCP_VERSION                      15201\n#define ERROR_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION      15202\n#define ERROR_MCA_MCCS_VERSION_MISMATCH                    15203\n#define ERROR_MCA_UNSUPPORTED_MCCS_VERSION                 15204\n#define ERROR_MCA_INTERNAL_ERROR                           15205\n#define ERROR_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED         15206\n#define ERROR_MCA_UNSUPPORTED_COLOR_TEMPERATURE            15207\n#define ERROR_AMBIGUOUS_SYSTEM_DEVICE                      15250\n#define ERROR_SYSTEM_DEVICE_NOT_FOUND                      15299\n#define ERROR_HASH_NOT_SUPPORTED                           15300\n#define ERROR_HASH_NOT_PRESENT                             15301\n#define ERROR_SECONDARY_IC_PROVIDER_NOT_REGISTERED         15321\n#define ERROR_GPIO_CLIENT_INFORMATION_INVALID              15322\n#define ERROR_GPIO_VERSION_NOT_SUPPORTED                   15323\n#define ERROR_GPIO_INVALID_REGISTRATION_PACKET             15324\n#define ERROR_GPIO_OPERATION_DENIED                        15325\n#define ERROR_GPIO_INCOMPATIBLE_CONNECT_MODE               15326\n#define ERROR_GPIO_INTERRUPT_ALREADY_UNMASKED              15327\n#define ERROR_CANNOT_SWITCH_RUNLEVEL                       15400\n#define ERROR_INVALID_RUNLEVEL_SETTING                     15401\n#define ERROR_RUNLEVEL_SWITCH_TIMEOUT                      15402\n#define ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT                15403\n#define ERROR_RUNLEVEL_SWITCH_IN_PROGRESS                  15404\n#define ERROR_SERVICES_FAILED_AUTOSTART                    15405\n#define ERROR_COM_TASK_STOP_PENDING                        15501\n#define ERROR_INSTALL_OPEN_PACKAGE_FAILED                  15600\n#define ERROR_INSTALL_PACKAGE_NOT_FOUND                    15601\n#define ERROR_INSTALL_INVALID_PACKAGE                      15602\n#define ERROR_INSTALL_RESOLVE_DEPENDENCY_FAILED            15603\n#define ERROR_INSTALL_OUT_OF_DISK_SPACE                    15604\n#define ERROR_INSTALL_NETWORK_FAILURE                      15605\n#define ERROR_INSTALL_REGISTRATION_FAILURE                 15606\n#define ERROR_INSTALL_DEREGISTRATION_FAILURE               15607\n#define ERROR_INSTALL_CANCEL                               15608\n#define ERROR_INSTALL_FAILED                               15609\n#define ERROR_REMOVE_FAILED                                15610\n#define ERROR_PACKAGE_ALREADY_EXISTS                       15611\n#define ERROR_NEEDS_REMEDIATION                            15612\n#define ERROR_INSTALL_PREREQUISITE_FAILED                  15613\n#define ERROR_PACKAGE_REPOSITORY_CORRUPTED                 15614\n#define ERROR_INSTALL_POLICY_FAILURE                       15615\n#define ERROR_PACKAGE_UPDATING                             15616\n#define ERROR_DEPLOYMENT_BLOCKED_BY_POLICY                 15617\n#define ERROR_PACKAGES_IN_USE                              15618\n#define ERROR_RECOVERY_FILE_CORRUPT                        15619\n#define ERROR_INVALID_STAGED_SIGNATURE                     15620\n#define ERROR_DELETING_EXISTING_APPLICATIONDATA_STORE_FAILED 15621\n#define ERROR_INSTALL_PACKAGE_DOWNGRADE                    15622\n#define ERROR_SYSTEM_NEEDS_REMEDIATION                     15623\n#define ERROR_APPX_INTEGRITY_FAILURE_CLR_NGEN              15624\n#define ERROR_RESILIENCY_FILE_CORRUPT                      15625\n#define ERROR_INSTALL_FIREWALL_SERVICE_NOT_RUNNING         15626\n#define APPMODEL_ERROR_NO_PACKAGE                          15700\n#define APPMODEL_ERROR_PACKAGE_RUNTIME_CORRUPT             15701\n#define APPMODEL_ERROR_PACKAGE_IDENTITY_CORRUPT            15702\n#define APPMODEL_ERROR_NO_APPLICATION                      15703\n\n/* HRESULT values for OLE, SHELL and other Interface stuff */\n/* the codes 4000-40ff are reserved for OLE */\n#undef NOERROR  /* arpa/nameser_compat.h defines this */\n\n#define E_NOT_SUFFICIENT_BUFFER                            HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)\n#define E_NOT_VALID_STATE                                  HRESULT_FROM_WIN32(ERROR_INVALID_STATE)\n\n#ifdef RC_INVOKED\n#define _HRESULT_TYPEDEF_(x) (x)\n#else\n#define _HRESULT_TYPEDEF_(x) ((HRESULT)x)\n#endif\n\n#define NOERROR                                            _HRESULT_TYPEDEF_(0)\n#define S_OK                                               _HRESULT_TYPEDEF_(0)\n#define SEC_E_OK                                           _HRESULT_TYPEDEF_(0)\n#define S_FALSE                                            _HRESULT_TYPEDEF_(1)\n\n#define E_PENDING                                          _HRESULT_TYPEDEF_(0x8000000A)\n#define E_BOUNDS                                           _HRESULT_TYPEDEF_(0x8000000B)\n\n\n#define E_NOTIMPL                                          _HRESULT_TYPEDEF_(0x80004001)\n#define E_NOINTERFACE                                      _HRESULT_TYPEDEF_(0x80004002)\n#define E_POINTER                                          _HRESULT_TYPEDEF_(0x80004003)\n#define E_ABORT                                            _HRESULT_TYPEDEF_(0x80004004)\n#define E_FAIL                                             _HRESULT_TYPEDEF_(0x80004005)\n\n\n#define CO_E_INIT_TLS                                      _HRESULT_TYPEDEF_(0x80004006)\n#define CO_E_INIT_SHARED_ALLOCATOR                         _HRESULT_TYPEDEF_(0x80004007)\n#define CO_E_INIT_MEMORY_ALLOCATOR                         _HRESULT_TYPEDEF_(0x80004008)\n#define CO_E_INIT_CLASS_CACHE                              _HRESULT_TYPEDEF_(0x80004009)\n#define CO_E_INIT_RPC_CHANNEL                              _HRESULT_TYPEDEF_(0x8000400A)\n#define CO_E_INIT_TLS_SET_CHANNEL_CONTROL                  _HRESULT_TYPEDEF_(0x8000400B)\n#define CO_E_INIT_TLS_CHANNEL_CONTROL                      _HRESULT_TYPEDEF_(0x8000400C)\n#define CO_E_INIT_UNACCEPTED_USER_ALLOCATOR                _HRESULT_TYPEDEF_(0x8000400D)\n#define CO_E_INIT_SCM_MUTEX_EXISTS                         _HRESULT_TYPEDEF_(0x8000400E)\n#define CO_E_INIT_SCM_FILE_MAPPING_EXISTS                  _HRESULT_TYPEDEF_(0x8000400F)\n#define CO_E_INIT_SCM_MAP_VIEW_OF_FILE                     _HRESULT_TYPEDEF_(0x80004010)\n#define CO_E_INIT_SCM_EXEC_FAILURE                         _HRESULT_TYPEDEF_(0x80004011)\n#define CO_E_INIT_ONLY_SINGLE_THREADED                     _HRESULT_TYPEDEF_(0x80004012)\n#define CO_E_CANT_REMOTE                                   _HRESULT_TYPEDEF_(0x80004013)\n#define CO_E_BAD_SERVER_NAME                               _HRESULT_TYPEDEF_(0x80004014)\n#define CO_E_WRONG_SERVER_IDENTITY                         _HRESULT_TYPEDEF_(0x80004015)\n#define CO_E_OLE1DDE_DISABLED                              _HRESULT_TYPEDEF_(0x80004016)\n#define CO_E_RUNAS_SYNTAX                                  _HRESULT_TYPEDEF_(0x80004017)\n#define CO_E_CREATEPROCESS_FAILURE                         _HRESULT_TYPEDEF_(0x80004018)\n#define CO_E_RUNAS_CREATEPROCESS_FAILURE                   _HRESULT_TYPEDEF_(0x80004019)\n#define CO_E_RUNAS_LOGON_FAILURE                           _HRESULT_TYPEDEF_(0x8000401A)\n#define CO_E_LAUNCH_PERMISSION_DENIED                      _HRESULT_TYPEDEF_(0x8000401B)\n#define CO_E_START_SERVICE_FAILURE                         _HRESULT_TYPEDEF_(0x8000401C)\n#define CO_E_REMOTE_COMMUNICATION_FAILURE                  _HRESULT_TYPEDEF_(0x8000401D)\n#define CO_E_SERVER_START_TIMEOUT                          _HRESULT_TYPEDEF_(0x8000401E)\n#define CO_E_CLSREG_INCONSISTENT                           _HRESULT_TYPEDEF_(0x8000401F)\n#define CO_E_IIDREG_INCONSISTENT                           _HRESULT_TYPEDEF_(0x80004020)\n#define CO_E_NOT_SUPPORTED                                 _HRESULT_TYPEDEF_(0x80004021)\n#define CO_E_RELOAD_DLL                                    _HRESULT_TYPEDEF_(0x80004022)\n#define CO_E_MSI_ERROR                                     _HRESULT_TYPEDEF_(0x80004023)\n#define CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT      _HRESULT_TYPEDEF_(0x80004024)\n#define CO_E_SERVER_PAUSED                                 _HRESULT_TYPEDEF_(0x80004025)\n#define CO_E_SERVER_NOT_PAUSED                             _HRESULT_TYPEDEF_(0x80004026)\n#define CO_E_CLASS_DISABLED                                _HRESULT_TYPEDEF_(0x80004027)\n#define CO_E_CLRNOTAVAILABLE                               _HRESULT_TYPEDEF_(0x80004028)\n#define CO_E_ASYNC_WORK_REJECTED                           _HRESULT_TYPEDEF_(0x80004029)\n#define CO_E_SERVER_INIT_TIMEOUT                           _HRESULT_TYPEDEF_(0x8000402A)\n#define CO_E_NO_SECCTX_IN_ACTIVATE                         _HRESULT_TYPEDEF_(0x8000402B)\n#define CO_E_TRACKER_CONFIG                                _HRESULT_TYPEDEF_(0x80004030)\n#define CO_E_THREADPOOL_CONFIG                             _HRESULT_TYPEDEF_(0x80004031)\n#define CO_E_SXS_CONFIG                                    _HRESULT_TYPEDEF_(0x80004032)\n#define CO_E_MALFORMED_SPN                                 _HRESULT_TYPEDEF_(0x80004033)\n\n#define E_UNEXPECTED                                       _HRESULT_TYPEDEF_(0x8000FFFF)\n\n#define RPC_E_CALL_REJECTED                                _HRESULT_TYPEDEF_(0x80010001)\n#define RPC_E_CALL_CANCELED                                _HRESULT_TYPEDEF_(0x80010002)\n#define RPC_E_CANTPOST_INSENDCALL                          _HRESULT_TYPEDEF_(0x80010003)\n#define RPC_E_CANTCALLOUT_INASYNCCALL                      _HRESULT_TYPEDEF_(0x80010004)\n#define RPC_E_CANTCALLOUT_INEXTERNALCALL                   _HRESULT_TYPEDEF_(0x80010005)\n#define RPC_E_CONNECTION_TERMINATED                        _HRESULT_TYPEDEF_(0x80010006)\n#define RPC_E_SERVER_DIED                                  _HRESULT_TYPEDEF_(0x80010007)\n#define RPC_E_CLIENT_DIED                                  _HRESULT_TYPEDEF_(0x80010008)\n#define RPC_E_INVALID_DATAPACKET                           _HRESULT_TYPEDEF_(0x80010009)\n#define RPC_E_CANTTRANSMIT_CALL                            _HRESULT_TYPEDEF_(0x8001000A)\n#define RPC_E_CLIENT_CANTMARSHAL_DATA                      _HRESULT_TYPEDEF_(0x8001000B)\n#define RPC_E_CLIENT_CANTUNMARSHAL_DATA                    _HRESULT_TYPEDEF_(0x8001000C)\n#define RPC_E_SERVER_CANTMARSHAL_DATA                      _HRESULT_TYPEDEF_(0x8001000D)\n#define RPC_E_SERVER_CANTUNMARSHAL_DATA                    _HRESULT_TYPEDEF_(0x8001000E)\n#define RPC_E_INVALID_DATA                                 _HRESULT_TYPEDEF_(0x8001000F)\n#define RPC_E_INVALID_PARAMETER                            _HRESULT_TYPEDEF_(0x80010010)\n#define RPC_E_CANTCALLOUT_AGAIN                            _HRESULT_TYPEDEF_(0x80010011)\n#define RPC_E_SERVER_DIED_DNE                              _HRESULT_TYPEDEF_(0x80010012)\n#define RPC_E_SYS_CALL_FAILED                              _HRESULT_TYPEDEF_(0x80010100)\n#define RPC_E_OUT_OF_RESOURCES                             _HRESULT_TYPEDEF_(0x80010101)\n#define RPC_E_ATTEMPTED_MULTITHREAD                        _HRESULT_TYPEDEF_(0x80010102)\n#define RPC_E_NOT_REGISTERED                               _HRESULT_TYPEDEF_(0x80010103)\n#define RPC_E_FAULT                                        _HRESULT_TYPEDEF_(0x80010104)\n#define RPC_E_SERVERFAULT                                  _HRESULT_TYPEDEF_(0x80010105)\n#define RPC_E_CHANGED_MODE                                 _HRESULT_TYPEDEF_(0x80010106)\n#define RPC_E_INVALIDMETHOD                                _HRESULT_TYPEDEF_(0x80010107)\n#define RPC_E_DISCONNECTED                                 _HRESULT_TYPEDEF_(0x80010108)\n#define RPC_E_RETRY                                        _HRESULT_TYPEDEF_(0x80010109)\n#define RPC_E_SERVERCALL_RETRYLATER                        _HRESULT_TYPEDEF_(0x8001010A)\n#define RPC_E_SERVERCALL_REJECTED                          _HRESULT_TYPEDEF_(0x8001010B)\n#define RPC_E_INVALID_CALLDATA                             _HRESULT_TYPEDEF_(0x8001010C)\n#define RPC_E_CANTCALLOUT_ININPUTSYNCCALL                  _HRESULT_TYPEDEF_(0x8001010D)\n#define RPC_E_WRONG_THREAD                                 _HRESULT_TYPEDEF_(0x8001010E)\n#define RPC_E_THREAD_NOT_INIT                              _HRESULT_TYPEDEF_(0x8001010F)\n#define RPC_E_VERSION_MISMATCH                             _HRESULT_TYPEDEF_(0x80010110)\n#define RPC_E_INVALID_HEADER                               _HRESULT_TYPEDEF_(0x80010111)\n#define RPC_E_INVALID_EXTENSION                            _HRESULT_TYPEDEF_(0x80010112)\n#define RPC_E_INVALID_IPID                                 _HRESULT_TYPEDEF_(0x80010113)\n#define RPC_E_INVALID_OBJECT                               _HRESULT_TYPEDEF_(0x80010114)\n#define RPC_S_CALLPENDING                                  _HRESULT_TYPEDEF_(0x80010115)\n#define RPC_S_WAITONTIMER                                  _HRESULT_TYPEDEF_(0x80010116)\n#define RPC_E_CALL_COMPLETE                                _HRESULT_TYPEDEF_(0x80010117)\n#define RPC_E_UNSECURE_CALL                                _HRESULT_TYPEDEF_(0x80010118)\n#define RPC_E_TOO_LATE                                     _HRESULT_TYPEDEF_(0x80010119)\n#define RPC_E_NO_GOOD_SECURITY_PACKAGES                    _HRESULT_TYPEDEF_(0x8001011A)\n#define RPC_E_ACCESS_DENIED                                _HRESULT_TYPEDEF_(0x8001011B)\n#define RPC_E_REMOTE_DISABLED                              _HRESULT_TYPEDEF_(0x8001011C)\n#define RPC_E_INVALID_OBJREF                               _HRESULT_TYPEDEF_(0x8001011D)\n#define RPC_E_NO_CONTEXT                                   _HRESULT_TYPEDEF_(0x8001011E)\n#define RPC_E_TIMEOUT                                      _HRESULT_TYPEDEF_(0x8001011F)\n#define RPC_E_NO_SYNC                                      _HRESULT_TYPEDEF_(0x80010120)\n#define RPC_E_UNEXPECTED                                   _HRESULT_TYPEDEF_(0x8001FFFF)\n\n#define DISP_E_UNKNOWNINTERFACE                            _HRESULT_TYPEDEF_(0x80020001)\n#define DISP_E_MEMBERNOTFOUND                              _HRESULT_TYPEDEF_(0x80020003)\n#define DISP_E_PARAMNOTFOUND                               _HRESULT_TYPEDEF_(0x80020004)\n#define DISP_E_TYPEMISMATCH                                _HRESULT_TYPEDEF_(0x80020005)\n#define DISP_E_UNKNOWNNAME                                 _HRESULT_TYPEDEF_(0x80020006)\n#define DISP_E_NONAMEDARGS                                 _HRESULT_TYPEDEF_(0x80020007)\n#define DISP_E_BADVARTYPE                                  _HRESULT_TYPEDEF_(0x80020008)\n#define DISP_E_EXCEPTION                                   _HRESULT_TYPEDEF_(0x80020009)\n#define DISP_E_OVERFLOW                                    _HRESULT_TYPEDEF_(0x8002000A)\n#define DISP_E_BADINDEX                                    _HRESULT_TYPEDEF_(0x8002000B)\n#define DISP_E_UNKNOWNLCID                                 _HRESULT_TYPEDEF_(0x8002000C)\n#define DISP_E_ARRAYISLOCKED                               _HRESULT_TYPEDEF_(0x8002000D)\n#define DISP_E_BADPARAMCOUNT                               _HRESULT_TYPEDEF_(0x8002000E)\n#define DISP_E_PARAMNOTOPTIONAL                            _HRESULT_TYPEDEF_(0x8002000F)\n#define DISP_E_BADCALLEE                                   _HRESULT_TYPEDEF_(0x80020010)\n#define DISP_E_NOTACOLLECTION                              _HRESULT_TYPEDEF_(0x80020011)\n#define DISP_E_DIVBYZERO                                   _HRESULT_TYPEDEF_(0x80020012)\n\n#define TYPE_E_BUFFERTOOSMALL                              _HRESULT_TYPEDEF_(0x80028016)\n#define TYPE_E_FIELDNOTFOUND                               _HRESULT_TYPEDEF_(0x80028017)\n#define TYPE_E_INVDATAREAD                                 _HRESULT_TYPEDEF_(0x80028018)\n#define TYPE_E_UNSUPFORMAT                                 _HRESULT_TYPEDEF_(0x80028019)\n#define TYPE_E_REGISTRYACCESS                              _HRESULT_TYPEDEF_(0x8002801C)\n#define TYPE_E_LIBNOTREGISTERED                            _HRESULT_TYPEDEF_(0x8002801D)\n#define TYPE_E_UNDEFINEDTYPE                               _HRESULT_TYPEDEF_(0x80028027)\n#define TYPE_E_QUALIFIEDNAMEDISALLOWED                     _HRESULT_TYPEDEF_(0x80028028)\n#define TYPE_E_INVALIDSTATE                                _HRESULT_TYPEDEF_(0x80028029)\n#define TYPE_E_WRONGTYPEKIND                               _HRESULT_TYPEDEF_(0x8002802A)\n#define TYPE_E_ELEMENTNOTFOUND                             _HRESULT_TYPEDEF_(0x8002802B)\n#define TYPE_E_AMBIGUOUSNAME                               _HRESULT_TYPEDEF_(0x8002802C)\n#define TYPE_E_NAMECONFLICT                                _HRESULT_TYPEDEF_(0x8002802D)\n#define TYPE_E_UNKNOWNLCID                                 _HRESULT_TYPEDEF_(0x8002802E)\n#define TYPE_E_DLLFUNCTIONNOTFOUND                         _HRESULT_TYPEDEF_(0x8002802F)\n#define TYPE_E_BADMODULEKIND                               _HRESULT_TYPEDEF_(0x800288BD)\n#define TYPE_E_SIZETOOBIG                                  _HRESULT_TYPEDEF_(0x800288C5)\n#define TYPE_E_DUPLICATEID                                 _HRESULT_TYPEDEF_(0x800288C6)\n#define TYPE_E_INVALIDID                                   _HRESULT_TYPEDEF_(0x800288CF)\n#define TYPE_E_TYPEMISMATCH                                _HRESULT_TYPEDEF_(0x80028CA0)\n#define TYPE_E_OUTOFBOUNDS                                 _HRESULT_TYPEDEF_(0x80028CA1)\n#define TYPE_E_IOERROR                                     _HRESULT_TYPEDEF_(0x80028CA2)\n#define TYPE_E_CANTCREATETMPFILE                           _HRESULT_TYPEDEF_(0x80028CA3)\n#define TYPE_E_CANTLOADLIBRARY                             _HRESULT_TYPEDEF_(0x80029C4A)\n#define TYPE_E_INCONSISTENTPROPFUNCS                       _HRESULT_TYPEDEF_(0x80029C83)\n#define TYPE_E_CIRCULARTYPE                                _HRESULT_TYPEDEF_(0x80029C84)\n\n#define STG_S_CONVERTED                                    _HRESULT_TYPEDEF_(0x00030200)\n#define STG_S_BLOCK                                        _HRESULT_TYPEDEF_(0x00030201)\n#define STG_S_RETRYNOW                                     _HRESULT_TYPEDEF_(0x00030202)\n#define STG_S_MONITORING                                   _HRESULT_TYPEDEF_(0x00030203)\n#define STG_S_MULTIPLEOPENS                                _HRESULT_TYPEDEF_(0x00030204)\n#define STG_S_CONSOLIDATIONFAILED                          _HRESULT_TYPEDEF_(0x00030205)\n#define STG_S_CANNOTCONSOLIDATE                            _HRESULT_TYPEDEF_(0x00030206)\n\n#define STG_E_INVALIDFUNCTION                              _HRESULT_TYPEDEF_(0x80030001)\n#define STG_E_FILENOTFOUND                                 _HRESULT_TYPEDEF_(0x80030002)\n#define STG_E_PATHNOTFOUND                                 _HRESULT_TYPEDEF_(0x80030003)\n#define STG_E_TOOMANYOPENFILES                             _HRESULT_TYPEDEF_(0x80030004)\n#define STG_E_ACCESSDENIED                                 _HRESULT_TYPEDEF_(0x80030005)\n#define STG_E_INVALIDHANDLE                                _HRESULT_TYPEDEF_(0x80030006)\n#define STG_E_INSUFFICIENTMEMORY                           _HRESULT_TYPEDEF_(0x80030008)\n#define STG_E_INVALIDPOINTER                               _HRESULT_TYPEDEF_(0x80030009)\n#define STG_E_NOMOREFILES                                  _HRESULT_TYPEDEF_(0x80030012)\n#define STG_E_DISKISWRITEPROTECTED                         _HRESULT_TYPEDEF_(0x80030013)\n#define STG_E_SEEKERROR                                    _HRESULT_TYPEDEF_(0x80030019)\n#define STG_E_WRITEFAULT                                   _HRESULT_TYPEDEF_(0x8003001D)\n#define STG_E_READFAULT                                    _HRESULT_TYPEDEF_(0x8003001E)\n#define STG_E_SHAREVIOLATION                               _HRESULT_TYPEDEF_(0x80030020)\n#define STG_E_LOCKVIOLATION                                _HRESULT_TYPEDEF_(0x80030021)\n#define STG_E_FILEALREADYEXISTS                            _HRESULT_TYPEDEF_(0x80030050)\n#define STG_E_INVALIDPARAMETER                             _HRESULT_TYPEDEF_(0x80030057)\n#define STG_E_MEDIUMFULL                                   _HRESULT_TYPEDEF_(0x80030070)\n#define STG_E_ABNORMALAPIEXIT                              _HRESULT_TYPEDEF_(0x800300FA)\n#define STG_E_INVALIDHEADER                                _HRESULT_TYPEDEF_(0x800300FB)\n#define STG_E_INVALIDNAME                                  _HRESULT_TYPEDEF_(0x800300FC)\n#define STG_E_UNKNOWN                                      _HRESULT_TYPEDEF_(0x800300FD)\n#define STG_E_UNIMPLEMENTEDFUNCTION                        _HRESULT_TYPEDEF_(0x800300FE)\n#define STG_E_INVALIDFLAG                                  _HRESULT_TYPEDEF_(0x800300FF)\n#define STG_E_INUSE                                        _HRESULT_TYPEDEF_(0x80030100)\n#define STG_E_NOTCURRENT                                   _HRESULT_TYPEDEF_(0x80030101)\n#define STG_E_REVERTED                                     _HRESULT_TYPEDEF_(0x80030102)\n#define STG_E_CANTSAVE                                     _HRESULT_TYPEDEF_(0x80030103)\n#define STG_E_OLDFORMAT                                    _HRESULT_TYPEDEF_(0x80030104)\n#define STG_E_OLDDLL                                       _HRESULT_TYPEDEF_(0x80030105)\n#define STG_E_SHAREREQUIRED                                _HRESULT_TYPEDEF_(0x80030106)\n#define STG_E_NOTFILEBASEDSTORAGE                          _HRESULT_TYPEDEF_(0x80030107)\n#define STG_E_EXTANTMARSHALLINGS                           _HRESULT_TYPEDEF_(0x80030108)\n#define STG_E_DOCFILECORRUPT                               _HRESULT_TYPEDEF_(0x80030109)\n\n#define STG_E_STATUS_COPY_PROTECTION_FAILURE               _HRESULT_TYPEDEF_(0x80030305)\n#define STG_E_CSS_AUTHENTICATION_FAILURE                   _HRESULT_TYPEDEF_(0x80030306)\n#define STG_E_CSS_KEY_NOT_PRESENT                          _HRESULT_TYPEDEF_(0x80030307)\n#define STG_E_CSS_KEY_NOT_ESTABLISHED                      _HRESULT_TYPEDEF_(0x80030308)\n#define STG_E_CSS_SCRAMBLED_SECTOR                         _HRESULT_TYPEDEF_(0x80030309)\n#define STG_E_CSS_REGION_MISMATCH                          _HRESULT_TYPEDEF_(0x8003030A)\n#define STG_E_RESETS_EXHAUSTED                             _HRESULT_TYPEDEF_(0x8003030B)\n\n#define OLE_S_FIRST                                        _HRESULT_TYPEDEF_(0x00040000)\n#define OLE_S_USEREG                                       _HRESULT_TYPEDEF_(0x00040000)\n#define OLE_S_STATIC                                       _HRESULT_TYPEDEF_(0x00040001)\n#define OLE_S_MAC_CLIPFORMAT                               _HRESULT_TYPEDEF_(0x00040002)\n#define OLE_S_LAST                                         _HRESULT_TYPEDEF_(0x000400FF)\n\n#define OLE_E_FIRST                                        _HRESULT_TYPEDEF_(0x80040000)\n#define OLE_E_OLEVERB                                      _HRESULT_TYPEDEF_(0x80040000)\n#define OLE_E_ADVF                                         _HRESULT_TYPEDEF_(0x80040001)\n#define OLE_E_ENUM_NOMORE                                  _HRESULT_TYPEDEF_(0x80040002)\n#define OLE_E_ADVISENOTSUPPORTED                           _HRESULT_TYPEDEF_(0x80040003)\n#define OLE_E_NOCONNECTION                                 _HRESULT_TYPEDEF_(0x80040004)\n#define OLE_E_NOTRUNNING                                   _HRESULT_TYPEDEF_(0x80040005)\n#define OLE_E_NOCACHE                                      _HRESULT_TYPEDEF_(0x80040006)\n#define OLE_E_BLANK                                        _HRESULT_TYPEDEF_(0x80040007)\n#define OLE_E_CLASSDIFF                                    _HRESULT_TYPEDEF_(0x80040008)\n#define OLE_E_CANT_GETMONIKER                              _HRESULT_TYPEDEF_(0x80040009)\n#define OLE_E_CANT_BINDTOSOURCE                            _HRESULT_TYPEDEF_(0x8004000A)\n#define OLE_E_STATIC                                       _HRESULT_TYPEDEF_(0x8004000B)\n#define OLE_E_PROMPTSAVECANCELLED                          _HRESULT_TYPEDEF_(0x8004000C)\n#define OLE_E_INVALIDRECT                                  _HRESULT_TYPEDEF_(0x8004000D)\n#define OLE_E_WRONGCOMPOBJ                                 _HRESULT_TYPEDEF_(0x8004000E)\n#define OLE_E_INVALIDHWND                                  _HRESULT_TYPEDEF_(0x8004000F)\n#define OLE_E_NOT_INPLACEACTIVE                            _HRESULT_TYPEDEF_(0x80040010)\n#define OLE_E_CANTCONVERT                                  _HRESULT_TYPEDEF_(0x80040011)\n#define OLE_E_NOSTORAGE                                    _HRESULT_TYPEDEF_(0x80040012)\n#define DV_E_FORMATETC                                     _HRESULT_TYPEDEF_(0x80040064)\n#define DV_E_DVTARGETDEVICE                                _HRESULT_TYPEDEF_(0x80040065)\n#define DV_E_STGMEDIUM                                     _HRESULT_TYPEDEF_(0x80040066)\n#define DV_E_STATDATA                                      _HRESULT_TYPEDEF_(0x80040067)\n#define DV_E_LINDEX                                        _HRESULT_TYPEDEF_(0x80040068)\n#define DV_E_TYMED                                         _HRESULT_TYPEDEF_(0x80040069)\n#define DV_E_CLIPFORMAT                                    _HRESULT_TYPEDEF_(0x8004006A)\n#define DV_E_DVASPECT                                      _HRESULT_TYPEDEF_(0x8004006B)\n#define DV_E_DVTARGETDEVICE_SIZE                           _HRESULT_TYPEDEF_(0x8004006C)\n#define DV_E_NOIVIEWOBJECT                                 _HRESULT_TYPEDEF_(0x8004006D)\n#define OLE_E_LAST                                         _HRESULT_TYPEDEF_(0x800400FF)\n\n#define DRAGDROP_S_FIRST                                   _HRESULT_TYPEDEF_(0x00040100)\n#define DRAGDROP_S_DROP                                    _HRESULT_TYPEDEF_(0x00040100)\n#define DRAGDROP_S_CANCEL                                  _HRESULT_TYPEDEF_(0x00040101)\n#define DRAGDROP_S_USEDEFAULTCURSORS                       _HRESULT_TYPEDEF_(0x00040102)\n#define DRAGDROP_S_LAST                                    _HRESULT_TYPEDEF_(0x0004010F)\n\n#define DRAGDROP_E_FIRST                                   _HRESULT_TYPEDEF_(0x80040100)\n#define DRAGDROP_E_NOTREGISTERED                           _HRESULT_TYPEDEF_(0x80040100)\n#define DRAGDROP_E_ALREADYREGISTERED                       _HRESULT_TYPEDEF_(0x80040101)\n#define DRAGDROP_E_INVALIDHWND                             _HRESULT_TYPEDEF_(0x80040102)\n#define DRAGDROP_E_LAST                                    _HRESULT_TYPEDEF_(0x8004010F)\n\n\n#define CLASSFACTORY_S_FIRST                               _HRESULT_TYPEDEF_(0x00040110)\n#define CLASSFACTORY_S_LAST                                _HRESULT_TYPEDEF_(0x0004011F)\n\n#define CLASSFACTORY_E_FIRST                               _HRESULT_TYPEDEF_(0x80040110)\n#define CLASS_E_NOAGGREGATION                              _HRESULT_TYPEDEF_(0x80040110)\n#define CLASS_E_CLASSNOTAVAILABLE                          _HRESULT_TYPEDEF_(0x80040111)\n#define CLASS_E_NOTLICENSED                                _HRESULT_TYPEDEF_(0x80040112)\n#define CLASSFACTORY_E_LAST                                _HRESULT_TYPEDEF_(0x8004011F)\n\n#define MARSHAL_S_FIRST                                    _HRESULT_TYPEDEF_(0x00040120)\n#define MARSHAL_S_LAST                                     _HRESULT_TYPEDEF_(0x0004012F)\n\n#define MARSHAL_E_FIRST                                    _HRESULT_TYPEDEF_(0x80040120)\n#define MARSHAL_E_LAST                                     _HRESULT_TYPEDEF_(0x8004012F)\n\n#define DATA_S_FIRST                                       _HRESULT_TYPEDEF_(0x00040130)\n#define DATA_S_SAMEFORMATETC                               _HRESULT_TYPEDEF_(0x00040130)\n#define DATA_S_LAST                                        _HRESULT_TYPEDEF_(0x0004013F)\n\n#define DATA_E_FIRST                                       _HRESULT_TYPEDEF_(0x80040130)\n#define DATA_E_LAST                                        _HRESULT_TYPEDEF_(0x8004013F)\n\n#define VIEW_S_FIRST                                       _HRESULT_TYPEDEF_(0x00040140)\n#define VIEW_S_ALREADY_FROZEN                              _HRESULT_TYPEDEF_(0x00040140)\n#define VIEW_S_LAST                                        _HRESULT_TYPEDEF_(0x0004014F)\n\n#define VIEW_E_FIRST                                       _HRESULT_TYPEDEF_(0x80040140)\n#define VIEW_E_DRAW                                        _HRESULT_TYPEDEF_(0x80040140)\n#define VIEW_E_LAST                                        _HRESULT_TYPEDEF_(0x8004014F)\n\n#define REGDB_S_FIRST                                      _HRESULT_TYPEDEF_(0x00040150)\n#define REGDB_S_LAST                                       _HRESULT_TYPEDEF_(0x0004015F)\n\n#define REGDB_E_FIRST                                      _HRESULT_TYPEDEF_(0x80040150)\n#define REGDB_E_READREGDB                                  _HRESULT_TYPEDEF_(0x80040150)\n#define REGDB_E_WRITEREGDB                                 _HRESULT_TYPEDEF_(0x80040151)\n#define REGDB_E_KEYMISSING                                 _HRESULT_TYPEDEF_(0x80040152)\n#define REGDB_E_INVALIDVALUE                               _HRESULT_TYPEDEF_(0x80040153)\n#define REGDB_E_CLASSNOTREG                                _HRESULT_TYPEDEF_(0x80040154)\n#define REGDB_E_IIDNOTREG                                  _HRESULT_TYPEDEF_(0x80040155)\n#define REGDB_E_LAST                                       _HRESULT_TYPEDEF_(0x8004015F)\n\n#define CAT_E_FIRST                                        _HRESULT_TYPEDEF_(0x80040160)\n#define CAT_E_CATIDNOEXIST                                 _HRESULT_TYPEDEF_(0x80040160)\n#define CAT_E_NODESCRIPTION                                _HRESULT_TYPEDEF_(0x80040161)\n#define CAT_E_LAST                                         _HRESULT_TYPEDEF_(0x80040161)\n\n#define CACHE_S_FIRST                                      _HRESULT_TYPEDEF_(0x00040170)\n#define CACHE_S_FORMATETC_NOTSUPPORTED                     _HRESULT_TYPEDEF_(0x00040170)\n#define CACHE_S_SAMECACHE                                  _HRESULT_TYPEDEF_(0x00040171)\n#define CACHE_S_SOMECACHES_NOTUPDATED                      _HRESULT_TYPEDEF_(0x00040172)\n#define CACHE_S_LAST                                       _HRESULT_TYPEDEF_(0x0004017F)\n\n#define CACHE_E_FIRST                                      _HRESULT_TYPEDEF_(0x80040170)\n#define CACHE_E_NOCACHE_UPDATED                            _HRESULT_TYPEDEF_(0x80040170)\n#define CACHE_E_LAST                                       _HRESULT_TYPEDEF_(0x8004017F)\n\n#define OLEOBJ_S_FIRST                                     _HRESULT_TYPEDEF_(0x00040180)\n#define OLEOBJ_S_INVALIDVERB                               _HRESULT_TYPEDEF_(0x00040180)\n#define OLEOBJ_S_CANNOT_DOVERB_NOW                         _HRESULT_TYPEDEF_(0x00040181)\n#define OLEOBJ_S_INVALIDHWND                               _HRESULT_TYPEDEF_(0x00040182)\n#define OLEOBJ_S_LAST                                      _HRESULT_TYPEDEF_(0x0004018F)\n\n#define OLEOBJ_E_FIRST                                     _HRESULT_TYPEDEF_(0x80040180)\n#define OLEOBJ_E_NOVERBS                                   _HRESULT_TYPEDEF_(0x80040180)\n#define OLEOBJ_E_INVALIDVERB                               _HRESULT_TYPEDEF_(0x80040181)\n#define OLEOBJ_E_LAST                                      _HRESULT_TYPEDEF_(0x8004018F)\n\n#define CLIENTSITE_S_FIRST                                 _HRESULT_TYPEDEF_(0x00040190)\n#define CLIENTSITE_S_LAST                                  _HRESULT_TYPEDEF_(0x0004019F)\n\n#define CLIENTSITE_E_FIRST                                 _HRESULT_TYPEDEF_(0x80040190)\n#define CLIENTSITE_E_LAST                                  _HRESULT_TYPEDEF_(0x8004019F)\n\n#define INPLACE_S_FIRST                                    _HRESULT_TYPEDEF_(0x000401A0)\n#define INPLACE_S_TRUNCATED                                _HRESULT_TYPEDEF_(0x000401A0)\n#define INPLACE_S_LAST                                     _HRESULT_TYPEDEF_(0x000401AF)\n\n#define INPLACE_E_FIRST                                    _HRESULT_TYPEDEF_(0x800401A0)\n#define INPLACE_E_NOTUNDOABLE                              _HRESULT_TYPEDEF_(0x800401A0)\n#define INPLACE_E_NOTOOLSPACE                              _HRESULT_TYPEDEF_(0x800401A1)\n#define INPLACE_E_LAST                                     _HRESULT_TYPEDEF_(0x800401AF)\n\n#define ENUM_S_FIRST                                       _HRESULT_TYPEDEF_(0x000401B0)\n#define ENUM_S_LAST                                        _HRESULT_TYPEDEF_(0x000401BF)\n\n#define ENUM_E_FIRST                                       _HRESULT_TYPEDEF_(0x800401B0)\n#define ENUM_E_LAST                                        _HRESULT_TYPEDEF_(0x800401BF)\n\n#define CONVERT10_S_FIRST                                  _HRESULT_TYPEDEF_(0x000401C0)\n#define CONVERT10_S_NO_PRESENTATION                        _HRESULT_TYPEDEF_(0x000401C0)\n#define CONVERT10_S_LAST                                   _HRESULT_TYPEDEF_(0x000401CF)\n\n#define CONVERT10_E_FIRST                                  _HRESULT_TYPEDEF_(0x800401C0)\n#define CONVERT10_E_OLESTREAM_GET                          _HRESULT_TYPEDEF_(0x800401C0)\n#define CONVERT10_E_OLESTREAM_PUT                          _HRESULT_TYPEDEF_(0x800401C1)\n#define CONVERT10_E_OLESTREAM_FMT                          _HRESULT_TYPEDEF_(0x800401C2)\n#define CONVERT10_E_OLESTREAM_BITMAP_TO_DIB                _HRESULT_TYPEDEF_(0x800401C3)\n#define CONVERT10_E_STG_FMT                                _HRESULT_TYPEDEF_(0x800401C4)\n#define CONVERT10_E_STG_NO_STD_STREAM                      _HRESULT_TYPEDEF_(0x800401C5)\n#define CONVERT10_E_STG_DIB_TO_BITMAP                      _HRESULT_TYPEDEF_(0x800401C6)\n#define CONVERT10_E_LAST                                   _HRESULT_TYPEDEF_(0x800401CF)\n\n#define CLIPBRD_S_FIRST                                    _HRESULT_TYPEDEF_(0x000401D0)\n#define CLIPBRD_S_LAST                                     _HRESULT_TYPEDEF_(0x000401DF)\n\n#define CLIPBRD_E_FIRST                                    _HRESULT_TYPEDEF_(0x800401D0)\n#define CLIPBRD_E_LAST                                     _HRESULT_TYPEDEF_(0x800401DF)\n#define CLIPBRD_E_CANT_OPEN                                _HRESULT_TYPEDEF_(0x800401D0)\n#define CLIPBRD_E_CANT_EMPTY                               _HRESULT_TYPEDEF_(0x800401D1)\n#define CLIPBRD_E_CANT_SET                                 _HRESULT_TYPEDEF_(0x800401D2)\n#define CLIPBRD_E_BAD_DATA                                 _HRESULT_TYPEDEF_(0x800401D3)\n#define CLIPBRD_E_CANT_CLOSE                               _HRESULT_TYPEDEF_(0x800401D4)\n\n#define MK_S_FIRST                                         _HRESULT_TYPEDEF_(0x000401E0)\n#define MK_S_REDUCED_TO_SELF                               _HRESULT_TYPEDEF_(0x000401E2)\n#define MK_S_ME                                            _HRESULT_TYPEDEF_(0x000401E4)\n#define MK_S_HIM                                           _HRESULT_TYPEDEF_(0x000401E5)\n#define MK_S_US                                            _HRESULT_TYPEDEF_(0x000401E6)\n#define MK_S_MONIKERALREADYREGISTERED                      _HRESULT_TYPEDEF_(0x000401E7)\n#define MK_S_LAST                                          _HRESULT_TYPEDEF_(0x000401EF)\n\n#define MK_E_FIRST                                         _HRESULT_TYPEDEF_(0x800401E0)\n#define MK_E_CONNECTMANUALLY                               _HRESULT_TYPEDEF_(0x800401E0)\n#define MK_E_EXCEEDEDDEADLINE                              _HRESULT_TYPEDEF_(0x800401E1)\n#define MK_E_NEEDGENERIC                                   _HRESULT_TYPEDEF_(0x800401E2)\n#define MK_E_UNAVAILABLE                                   _HRESULT_TYPEDEF_(0x800401E3)\n#define MK_E_SYNTAX                                        _HRESULT_TYPEDEF_(0x800401E4)\n#define MK_E_NOOBJECT                                      _HRESULT_TYPEDEF_(0x800401E5)\n#define MK_E_INVALIDEXTENSION                              _HRESULT_TYPEDEF_(0x800401E6)\n#define MK_E_INTERMEDIATEINTERFACENOTSUPPORTED             _HRESULT_TYPEDEF_(0x800401E7)\n#define MK_E_NOTBINDABLE                                   _HRESULT_TYPEDEF_(0x800401E8)\n#define MK_E_NOTBOUND                                      _HRESULT_TYPEDEF_(0x800401E9)\n#define MK_E_CANTOPENFILE                                  _HRESULT_TYPEDEF_(0x800401EA)\n#define MK_E_MUSTBOTHERUSER                                _HRESULT_TYPEDEF_(0x800401EB)\n#define MK_E_NOINVERSE                                     _HRESULT_TYPEDEF_(0x800401EC)\n#define MK_E_NOSTORAGE                                     _HRESULT_TYPEDEF_(0x800401ED)\n#define MK_E_NOPREFIX                                      _HRESULT_TYPEDEF_(0x800401EE)\n#define MK_E_ENUMERATION_FAILED                            _HRESULT_TYPEDEF_(0x800401EF)\n#define MK_E_LAST                                          _HRESULT_TYPEDEF_(0x800401EF)\n\n#define CO_S_FIRST                                         _HRESULT_TYPEDEF_(0x000401F0)\n#define CO_S_LAST                                          _HRESULT_TYPEDEF_(0x000401FF)\n\n#define CO_E_FIRST                                         _HRESULT_TYPEDEF_(0x800401F0)\n#define CO_E_NOTINITIALIZED                                _HRESULT_TYPEDEF_(0x800401F0)\n#define CO_E_ALREADYINITIALIZED                            _HRESULT_TYPEDEF_(0x800401F1)\n#define CO_E_CANTDETERMINECLASS                            _HRESULT_TYPEDEF_(0x800401F2)\n#define CO_E_CLASSSTRING                                   _HRESULT_TYPEDEF_(0x800401F3)\n#define CO_E_IIDSTRING                                     _HRESULT_TYPEDEF_(0x800401F4)\n#define CO_E_APPNOTFOUND                                   _HRESULT_TYPEDEF_(0x800401F5)\n#define CO_E_APPSINGLEUSE                                  _HRESULT_TYPEDEF_(0x800401F6)\n#define CO_E_ERRORINAPP                                    _HRESULT_TYPEDEF_(0x800401F7)\n#define CO_E_DLLNOTFOUND                                   _HRESULT_TYPEDEF_(0x800401F8)\n#define CO_E_ERRORINDLL                                    _HRESULT_TYPEDEF_(0x800401F9)\n#define CO_E_WRONGOSFORAPP                                 _HRESULT_TYPEDEF_(0x800401FA)\n#define CO_E_OBJNOTREG                                     _HRESULT_TYPEDEF_(0x800401FB)\n#define CO_E_OBJISREG                                      _HRESULT_TYPEDEF_(0x800401FC)\n#define CO_E_OBJNOTCONNECTED                               _HRESULT_TYPEDEF_(0x800401FD)\n#define CO_E_APPDIDNTREG                                   _HRESULT_TYPEDEF_(0x800401FE)\n#define CO_E_RELEASED                                      _HRESULT_TYPEDEF_(0x800401FF)\n#define CO_E_LAST                                          _HRESULT_TYPEDEF_(0x800401FF)\n#define CO_E_FAILEDTOIMPERSONATE                           _HRESULT_TYPEDEF_(0x80040200)\n#define CO_E_FAILEDTOGETSECCTX                             _HRESULT_TYPEDEF_(0x80040201)\n#define CO_E_FAILEDTOOPENTHREADTOKEN                       _HRESULT_TYPEDEF_(0x80040202)\n#define CO_E_FAILEDTOGETTOKENINFO                          _HRESULT_TYPEDEF_(0x80040203)\n#define CO_E_TRUSTEEDOESNTMATCHCLIENT                      _HRESULT_TYPEDEF_(0x80040204)\n#define CO_E_FAILEDTOQUERYCLIENTBLANKET                    _HRESULT_TYPEDEF_(0x80040205)\n#define CO_E_FAILEDTOSETDACL                               _HRESULT_TYPEDEF_(0x80040206)\n#define CO_E_ACCESSCHECKFAILED                             _HRESULT_TYPEDEF_(0x80040207)\n#define CO_E_NETACCESSAPIFAILED                            _HRESULT_TYPEDEF_(0x80040208)\n#define CO_E_WRONGTRUSTEENAMESYNTAX                        _HRESULT_TYPEDEF_(0x80040209)\n#define CO_E_INVALIDSID                                    _HRESULT_TYPEDEF_(0x8004020A)\n#define CO_E_CONVERSIONFAILED                              _HRESULT_TYPEDEF_(0x8004020B)\n#define CO_E_NOMATCHINGSIDFOUND                            _HRESULT_TYPEDEF_(0x8004020C)\n#define CO_E_LOOKUPACCSIDFAILED                            _HRESULT_TYPEDEF_(0x8004020D)\n#define CO_E_NOMATCHINGNAMEFOUND                           _HRESULT_TYPEDEF_(0x8004020E)\n#define CO_E_LOOKUPACCNAMEFAILED                           _HRESULT_TYPEDEF_(0x8004020F)\n#define CO_E_SETSERLHNDLFAILED                             _HRESULT_TYPEDEF_(0x80040210)\n#define CO_E_FAILEDTOGETWINDIR                             _HRESULT_TYPEDEF_(0x80040211)\n#define CO_E_PATHTOOLONG                                   _HRESULT_TYPEDEF_(0x80040212)\n#define CO_E_FAILEDTOGENUUID                               _HRESULT_TYPEDEF_(0x80040213)\n#define CO_E_FAILEDTOCREATEFILE                            _HRESULT_TYPEDEF_(0x80040214)\n#define CO_E_FAILEDTOCLOSEHANDLE                           _HRESULT_TYPEDEF_(0x80040215)\n#define CO_E_EXCEEDSYSACLLIMIT                             _HRESULT_TYPEDEF_(0x80040216)\n#define CO_E_ACESINWRONGORDER                              _HRESULT_TYPEDEF_(0x80040217)\n#define CO_E_INCOMPATIBLESTREAMVERSION                     _HRESULT_TYPEDEF_(0x80040218)\n#define CO_E_FAILEDTOOPENPROCESSTOKEN                      _HRESULT_TYPEDEF_(0x80040219)\n#define CO_E_DECODEFAILED                                  _HRESULT_TYPEDEF_(0x8004021A)\n#define CO_E_ACNOTINITIALIZED                              _HRESULT_TYPEDEF_(0x8004021B)\n\n/* Task Scheduler Service Error Codes */\n#define SCHED_S_TASK_READY                                 _HRESULT_TYPEDEF_(0x00041300)\n#define SCHED_S_TASK_RUNNING                               _HRESULT_TYPEDEF_(0x00041301)\n#define SCHED_S_TASK_DISABLED                              _HRESULT_TYPEDEF_(0x00041302)\n#define SCHED_S_TASK_HAS_NOT_RUN                           _HRESULT_TYPEDEF_(0x00041303)\n#define SCHED_S_TASK_NO_MORE_RUNS                          _HRESULT_TYPEDEF_(0x00041304)\n#define SCHED_S_TASK_NOT_SCHEDULED                         _HRESULT_TYPEDEF_(0x00041305)\n#define SCHED_S_TASK_TERMINATED                            _HRESULT_TYPEDEF_(0x00041306)\n#define SCHED_S_TASK_NO_VALID_TRIGGERS                     _HRESULT_TYPEDEF_(0x00041307)\n#define SCHED_S_EVENT_TRIGGER                              _HRESULT_TYPEDEF_(0x00041308)\n#define SCHED_E_TRIGGER_NOT_FOUND                          _HRESULT_TYPEDEF_(0x80041309)\n#define SCHED_E_TASK_NOT_READY                             _HRESULT_TYPEDEF_(0x8004130A)\n#define SCHED_E_TASK_NOT_RUNNING                           _HRESULT_TYPEDEF_(0x8004130B)\n#define SCHED_E_SERVICE_NOT_INSTALLED                      _HRESULT_TYPEDEF_(0x8004130C)\n#define SCHED_E_CANNOT_OPEN_TASK                           _HRESULT_TYPEDEF_(0x8004130D)\n#define SCHED_E_INVALID_TASK                               _HRESULT_TYPEDEF_(0x8004130E)\n#define SCHED_E_ACCOUNT_INFORMATION_NOT_SET                _HRESULT_TYPEDEF_(0x8004130F)\n#define SCHED_E_ACCOUNT_NAME_NOT_FOUND                     _HRESULT_TYPEDEF_(0x80041310)\n#define SCHED_E_ACCOUNT_DBASE_CORRUPT                      _HRESULT_TYPEDEF_(0x80041311)\n#define SCHED_E_NO_SECURITY_SERVICES                       _HRESULT_TYPEDEF_(0x80041312)\n#define SCHED_E_UNKNOWN_OBJECT_VERSION                     _HRESULT_TYPEDEF_(0x80041313)\n#define SCHED_E_UNSUPPORTED_ACCOUNT_OPTION                 _HRESULT_TYPEDEF_(0x80041314)\n#define SCHED_E_SERVICE_NOT_RUNNING                        _HRESULT_TYPEDEF_(0x80041315)\n#define SCHED_E_UNEXPECTEDNODE                             _HRESULT_TYPEDEF_(0x80041316)\n#define SCHED_E_NAMESPACE                                  _HRESULT_TYPEDEF_(0x80041317)\n#define SCHED_E_INVALIDVALUE                               _HRESULT_TYPEDEF_(0x80041318)\n#define SCHED_E_MISSINGNODE                                _HRESULT_TYPEDEF_(0x80041319)\n#define SCHED_E_MALFORMEDXML                               _HRESULT_TYPEDEF_(0x8004131A)\n#define SCHED_S_SOME_TRIGGERS_FAILED                       _HRESULT_TYPEDEF_(0x0004131B)\n#define SCHED_S_BATCH_LOGON_PROBLEM                        _HRESULT_TYPEDEF_(0x0004131C)\n#define SCHED_E_TOO_MANY_NODES                             _HRESULT_TYPEDEF_(0x8004131D)\n#define SCHED_E_PAST_END_BOUNDARY                          _HRESULT_TYPEDEF_(0x8004131E)\n#define SCHED_E_ALREADY_RUNNING                            _HRESULT_TYPEDEF_(0x8004131F)\n#define SCHED_E_USER_NOT_LOGGED_ON                         _HRESULT_TYPEDEF_(0x80041320)\n#define SCHED_E_INVALID_TASK_HASH                          _HRESULT_TYPEDEF_(0x80041321)\n#define SCHED_E_SERVICE_NOT_AVAILABLE                      _HRESULT_TYPEDEF_(0x80041322)\n#define SCHED_E_SERVICE_TOO_BUSY                           _HRESULT_TYPEDEF_(0x80041323)\n#define SCHED_E_TASK_ATTEMPTED                             _HRESULT_TYPEDEF_(0x80041324)\n#define SCHED_S_TASK_QUEUED                                _HRESULT_TYPEDEF_(0x00041325)\n#define SCHED_E_TASK_DISABLED                              _HRESULT_TYPEDEF_(0x80041326)\n#define SCHED_E_TASK_NOT_V1_COMPAT                         _HRESULT_TYPEDEF_(0x80041327)\n#define SCHED_E_START_ON_DEMAND                            _HRESULT_TYPEDEF_(0x80041328)\n\n#define E_ACCESSDENIED                                     _HRESULT_TYPEDEF_(0x80070005)\n#define E_HANDLE                                           _HRESULT_TYPEDEF_(0x80070006)\n#define E_OUTOFMEMORY                                      _HRESULT_TYPEDEF_(0x8007000E)\n#define E_INVALIDARG                                       _HRESULT_TYPEDEF_(0x80070057)\n\n#define CO_S_NOTALLINTERFACES                              _HRESULT_TYPEDEF_(0x00080012)\n\n#define CO_E_CLASS_CREATE_FAILED                           _HRESULT_TYPEDEF_(0x80080001)\n#define CO_E_SCM_ERROR                                     _HRESULT_TYPEDEF_(0x80080002)\n#define CO_E_SCM_RPC_FAILURE                               _HRESULT_TYPEDEF_(0x80080003)\n#define CO_E_BAD_PATH                                      _HRESULT_TYPEDEF_(0x80080004)\n#define CO_E_SERVER_EXEC_FAILURE                           _HRESULT_TYPEDEF_(0x80080005)\n#define CO_E_OBJSRV_RPC_FAILURE                            _HRESULT_TYPEDEF_(0x80080006)\n#define MK_E_NO_NORMALIZED                                 _HRESULT_TYPEDEF_(0x80080007)\n#define CO_E_SERVER_STOPPING                               _HRESULT_TYPEDEF_(0x80080008)\n#define MEM_E_INVALID_ROOT                                 _HRESULT_TYPEDEF_(0x80080009)\n#define MEM_E_INVALID_LINK                                 _HRESULT_TYPEDEF_(0x80080010)\n#define MEM_E_INVALID_SIZE                                 _HRESULT_TYPEDEF_(0x80080011)\n\n/*Cryptographic Error Codes */\n#define NTE_BAD_UID                                        _HRESULT_TYPEDEF_(0x80090001)\n#define NTE_BAD_HASH                                       _HRESULT_TYPEDEF_(0x80090002)\n#define NTE_BAD_KEY                                        _HRESULT_TYPEDEF_(0x80090003)\n#define NTE_BAD_LEN                                        _HRESULT_TYPEDEF_(0x80090004)\n#define NTE_BAD_DATA                                       _HRESULT_TYPEDEF_(0x80090005)\n#define NTE_BAD_SIGNATURE                                  _HRESULT_TYPEDEF_(0x80090006)\n#define NTE_BAD_VER                                        _HRESULT_TYPEDEF_(0x80090007)\n#define NTE_BAD_ALGID                                      _HRESULT_TYPEDEF_(0x80090008)\n#define NTE_BAD_FLAGS                                      _HRESULT_TYPEDEF_(0x80090009)\n#define NTE_BAD_TYPE                                       _HRESULT_TYPEDEF_(0x8009000A)\n#define NTE_BAD_KEY_STATE                                  _HRESULT_TYPEDEF_(0x8009000B)\n#define NTE_BAD_HASH_STATE                                 _HRESULT_TYPEDEF_(0x8009000C)\n#define NTE_NO_KEY                                         _HRESULT_TYPEDEF_(0x8009000D)\n#define NTE_NO_MEMORY                                      _HRESULT_TYPEDEF_(0x8009000E)\n#define NTE_EXISTS                                         _HRESULT_TYPEDEF_(0x8009000F)\n#define NTE_PERM                                           _HRESULT_TYPEDEF_(0x80090010)\n#define NTE_NOT_FOUND                                      _HRESULT_TYPEDEF_(0x80090011)\n#define NTE_DOUBLE_ENCRYPT                                 _HRESULT_TYPEDEF_(0x80090012)\n#define NTE_BAD_PROVIDER                                   _HRESULT_TYPEDEF_(0x80090013)\n#define NTE_BAD_PROV_TYPE                                  _HRESULT_TYPEDEF_(0x80090014)\n#define NTE_BAD_PUBLIC_KEY                                 _HRESULT_TYPEDEF_(0x80090015)\n#define NTE_BAD_KEYSET                                     _HRESULT_TYPEDEF_(0x80090016)\n#define NTE_PROV_TYPE_NOT_DEF                              _HRESULT_TYPEDEF_(0x80090017)\n#define NTE_PROV_TYPE_ENTRY_BAD                            _HRESULT_TYPEDEF_(0x80090018)\n#define NTE_KEYSET_NOT_DEF                                 _HRESULT_TYPEDEF_(0x80090019)\n#define NTE_KEYSET_ENTRY_BAD                               _HRESULT_TYPEDEF_(0x8009001A)\n#define NTE_PROV_TYPE_NO_MATCH                             _HRESULT_TYPEDEF_(0x8009001B)\n#define NTE_SIGNATURE_FILE_BAD                             _HRESULT_TYPEDEF_(0x8009001C)\n#define NTE_PROVIDER_DLL_FAIL                              _HRESULT_TYPEDEF_(0x8009001D)\n#define NTE_PROV_DLL_NOT_FOUND                             _HRESULT_TYPEDEF_(0x8009001E)\n#define NTE_BAD_KEYSET_PARAM                               _HRESULT_TYPEDEF_(0x8009001F)\n#define NTE_FAIL                                           _HRESULT_TYPEDEF_(0x80090020)\n#define NTE_SYS_ERR                                        _HRESULT_TYPEDEF_(0x80090021)\n#define NTE_SILENT_CONTEXT                                 _HRESULT_TYPEDEF_(0x80090022)\n#define NTE_TOKEN_KEYSET_STORAGE_FULL                      _HRESULT_TYPEDEF_(0x80090023)\n#define NTE_TEMPORARY_PROFILE                              _HRESULT_TYPEDEF_(0x80090024)\n#define NTE_FIXEDPARAMETER                                 _HRESULT_TYPEDEF_(0x80090025)\n#define NTE_INVALID_HANDLE                                 _HRESULT_TYPEDEF_(0x80090026)\n#define NTE_INVALID_PARAMETER                              _HRESULT_TYPEDEF_(0x80090027)\n#define NTE_BUFFER_TOO_SMALL                               _HRESULT_TYPEDEF_(0x80090028)\n#define NTE_NOT_SUPPORTED                                  _HRESULT_TYPEDEF_(0x80090029)\n#define NTE_NO_MORE_ITEMS                                  _HRESULT_TYPEDEF_(0x8009002A)\n#define NTE_BUFFERS_OVERLAP                                _HRESULT_TYPEDEF_(0x8009002B)\n#define NTE_DECRYPTION_FAILURE                             _HRESULT_TYPEDEF_(0x8009002C)\n#define NTE_INTERNAL_ERROR                                 _HRESULT_TYPEDEF_(0x8009002D)\n#define NTE_UI_REQUIRED                                    _HRESULT_TYPEDEF_(0x8009002E)\n#define NTE_HMAC_NOT_SUPPORTED                             _HRESULT_TYPEDEF_(0x8009002F)\n#define NTE_OP_OK                                          _HRESULT_TYPEDEF_(0)\n\n#define SEC_E_INSUFFICIENT_MEMORY                          _HRESULT_TYPEDEF_(0x80090300)\n#define SEC_E_INVALID_HANDLE                               _HRESULT_TYPEDEF_(0x80090301)\n#define SEC_E_UNSUPPORTED_FUNCTION                         _HRESULT_TYPEDEF_(0x80090302)\n#define SEC_E_TARGET_UNKNOWN                               _HRESULT_TYPEDEF_(0x80090303)\n#define SEC_E_INTERNAL_ERROR                               _HRESULT_TYPEDEF_(0x80090304)\n#define SEC_E_SECPKG_NOT_FOUND                             _HRESULT_TYPEDEF_(0x80090305)\n#define SEC_E_NOT_OWNER                                    _HRESULT_TYPEDEF_(0x80090306)\n#define SEC_E_CANNOT_INSTALL                               _HRESULT_TYPEDEF_(0x80090307)\n#define SEC_E_INVALID_TOKEN                                _HRESULT_TYPEDEF_(0x80090308)\n#define SEC_E_CANNOT_PACK                                  _HRESULT_TYPEDEF_(0x80090309)\n#define SEC_E_QOP_NOT_SUPPORTED                            _HRESULT_TYPEDEF_(0x8009030A)\n#define SEC_E_NO_IMPERSONATION                             _HRESULT_TYPEDEF_(0x8009030B)\n#define SEC_E_LOGON_DENIED                                 _HRESULT_TYPEDEF_(0x8009030C)\n#define SEC_E_UNKNOWN_CREDENTIALS                          _HRESULT_TYPEDEF_(0x8009030D)\n#define SEC_E_NO_CREDENTIALS                               _HRESULT_TYPEDEF_(0x8009030E)\n#define SEC_E_MESSAGE_ALTERED                              _HRESULT_TYPEDEF_(0x8009030F)\n#define SEC_E_OUT_OF_SEQUENCE                              _HRESULT_TYPEDEF_(0x80090310)\n#define SEC_E_NO_AUTHENTICATING_AUTHORITY                  _HRESULT_TYPEDEF_(0x80090311)\n#define SEC_I_CONTINUE_NEEDED                              _HRESULT_TYPEDEF_(0x00090312)\n#define SEC_I_COMPLETE_NEEDED                              _HRESULT_TYPEDEF_(0x00090313)\n#define SEC_I_COMPLETE_AND_CONTINUE                        _HRESULT_TYPEDEF_(0x00090314)\n#define SEC_I_CONTEXT_EXPIRED                              _HRESULT_TYPEDEF_(0x00090317)\n#define SEC_E_BAD_PKGID                                    _HRESULT_TYPEDEF_(0x80090316)\n#define SEC_E_CONTEXT_EXPIRED                              _HRESULT_TYPEDEF_(0x80090317)\n#define SEC_E_INCOMPLETE_MESSAGE                           _HRESULT_TYPEDEF_(0x80090318)\n#define SEC_E_INCOMPLETE_CREDENTIALS                       _HRESULT_TYPEDEF_(0x80090320)\n#define SEC_E_BUFFER_TOO_SMALL                             _HRESULT_TYPEDEF_(0x80090321)\n#define SEC_E_WRONG_PRINCIPAL                              _HRESULT_TYPEDEF_(0x80090322)\n#define SEC_E_TIME_SKEW                                    _HRESULT_TYPEDEF_(0x80090324)\n#define SEC_E_UNTRUSTED_ROOT                               _HRESULT_TYPEDEF_(0x80090325)\n#define SEC_E_ILLEGAL_MESSAGE                              _HRESULT_TYPEDEF_(0x80090326)\n#define SEC_E_CERT_UNKNOWN                                 _HRESULT_TYPEDEF_(0x80090327)\n#define SEC_E_CERT_EXPIRED                                 _HRESULT_TYPEDEF_(0x80090328)\n#define SEC_E_ENCRYPT_FAILURE                              _HRESULT_TYPEDEF_(0x80090329)\n#define SEC_E_DECRYPT_FAILURE                              _HRESULT_TYPEDEF_(0x80090330)\n#define SEC_E_ALGORITHM_MISMATCH                           _HRESULT_TYPEDEF_(0x80090331)\n#define SEC_E_SECURITY_QOS_FAILED                          _HRESULT_TYPEDEF_(0x80090332)\n#define SEC_E_UNFINISHED_CONTEXT_DELETED                   _HRESULT_TYPEDEF_(0x80090333)\n#define SEC_E_NO_TGT_REPLY                                 _HRESULT_TYPEDEF_(0x80090334)\n#define SEC_E_NO_IP_ADDRESSES                              _HRESULT_TYPEDEF_(0x80090335)\n#define SEC_E_WRONG_CREDENTIAL_HANDLE                      _HRESULT_TYPEDEF_(0x80090336)\n#define SEC_E_CRYPTO_SYSTEM_INVALID                        _HRESULT_TYPEDEF_(0x80090337)\n#define SEC_E_MAX_REFERRALS_EXCEEDED                       _HRESULT_TYPEDEF_(0x80090338)\n#define SEC_E_MUST_BE_KDC                                  _HRESULT_TYPEDEF_(0x80090339)\n#define SEC_E_STRONG_CRYPTO_NOT_SUPPORTED                  _HRESULT_TYPEDEF_(0x8009033A)\n#define SEC_E_TOO_MANY_PRINCIPALS                          _HRESULT_TYPEDEF_(0x8009033B)\n#define SEC_E_NO_PA_DATA                                   _HRESULT_TYPEDEF_(0x8009033C)\n#define SEC_E_PKINIT_NAME_MISMATCH                         _HRESULT_TYPEDEF_(0x8009033D)\n#define SEC_E_SMARTCARD_LOGON_REQUIRED                     _HRESULT_TYPEDEF_(0x8009033E)\n#define SEC_E_SHUTDOWN_IN_PROGRESS                         _HRESULT_TYPEDEF_(0x8009033F)\n#define SEC_E_KDC_INVALID_REQUEST                          _HRESULT_TYPEDEF_(0x80090340)\n#define SEC_E_KDC_UNABLE_TO_REFER                          _HRESULT_TYPEDEF_(0x80090341)\n#define SEC_E_KDC_UNKNOWN_ETYPE                            _HRESULT_TYPEDEF_(0x80090342)\n#define SEC_E_UNSUPPORTED_PREAUTH                          _HRESULT_TYPEDEF_(0x80090343)\n#define SEC_E_DELEGATION_REQUIRED                          _HRESULT_TYPEDEF_(0x80090345)\n#define SEC_E_BAD_BINDINGS                                 _HRESULT_TYPEDEF_(0x80090346)\n#define SEC_E_MULTIPLE_ACCOUNTS                            _HRESULT_TYPEDEF_(0x80090347)\n#define SEC_E_NO_KERB_KEY                                  _HRESULT_TYPEDEF_(0x80090348)\n#define SEC_E_CERT_WRONG_USAGE                             _HRESULT_TYPEDEF_(0x80090349)\n#define SEC_E_DOWNGRADE_DETECTED                           _HRESULT_TYPEDEF_(0x80090350)\n#define SEC_E_SMARTCARD_CERT_REVOKED                       _HRESULT_TYPEDEF_(0x80090351)\n#define SEC_E_ISSUING_CA_UNTRUSTED                         _HRESULT_TYPEDEF_(0x80090352)\n#define SEC_E_REVOCATION_OFFLINE_C                         _HRESULT_TYPEDEF_(0x80090353)\n#define SEC_E_PKINIT_CLIENT_FAILURE                        _HRESULT_TYPEDEF_(0x80090354)\n#define SEC_E_SMARTCARD_CERT_EXPIRED                       _HRESULT_TYPEDEF_(0x80090355)\n#define SEC_E_NO_S4U_PROT_SUPPORT                          _HRESULT_TYPEDEF_(0x80090356)\n#define SEC_E_CROSSREALM_DELEGATION_FAILURE                _HRESULT_TYPEDEF_(0x80090357)\n#define SEC_E_REVOCATION_OFFLINE_KDC                       _HRESULT_TYPEDEF_(0x80090358)\n#define SEC_E_ISSUING_CA_UNTRUSTED_KDC                     _HRESULT_TYPEDEF_(0x80090359)\n#define SEC_E_KDC_CERT_EXPIRED                             _HRESULT_TYPEDEF_(0x8009035A)\n#define SEC_E_KDC_CERT_REVOKED                             _HRESULT_TYPEDEF_(0x8009035B)\n\n#define CRYPT_E_MSG_ERROR                                  _HRESULT_TYPEDEF_(0x80091001)\n#define CRYPT_E_UNKNOWN_ALGO                               _HRESULT_TYPEDEF_(0x80091002)\n#define CRYPT_E_OID_FORMAT                                 _HRESULT_TYPEDEF_(0x80091003)\n#define CRYPT_E_INVALID_MSG_TYPE                           _HRESULT_TYPEDEF_(0x80091004)\n#define CRYPT_E_UNEXPECTED_ENCODING                        _HRESULT_TYPEDEF_(0x80091005)\n#define CRYPT_E_AUTH_ATTR_MISSING                          _HRESULT_TYPEDEF_(0x80091006)\n#define CRYPT_E_HASH_VALUE                                 _HRESULT_TYPEDEF_(0x80091007)\n#define CRYPT_E_INVALID_INDEX                              _HRESULT_TYPEDEF_(0x80091008)\n#define CRYPT_E_ALREADY_DECRYPTED                          _HRESULT_TYPEDEF_(0x80091009)\n#define CRYPT_E_NOT_DECRYPTED                              _HRESULT_TYPEDEF_(0x8009100A)\n#define CRYPT_E_RECIPIENT_NOT_FOUND                        _HRESULT_TYPEDEF_(0x8009100B)\n#define CRYPT_E_CONTROL_TYPE                               _HRESULT_TYPEDEF_(0x8009100C)\n#define CRYPT_E_ISSUER_SERIALNUMBER                        _HRESULT_TYPEDEF_(0x8009100D)\n#define CRYPT_E_SIGNER_NOT_FOUND                           _HRESULT_TYPEDEF_(0x8009100E)\n#define CRYPT_E_ATTRIBUTES_MISSING                         _HRESULT_TYPEDEF_(0x8009100F)\n#define CRYPT_E_STREAM_MSG_NOT_READY                       _HRESULT_TYPEDEF_(0x80091010)\n#define CRYPT_E_STREAM_INSUFFICIENT_DATA                   _HRESULT_TYPEDEF_(0x80091011)\n#define CRYPT_I_NEW_PROTECTION_REQUIRED                    _HRESULT_TYPEDEF_(0x80091012)\n\n#define CRYPT_E_BAD_LEN                                    _HRESULT_TYPEDEF_(0x80092001)\n#define CRYPT_E_BAD_ENCODE                                 _HRESULT_TYPEDEF_(0x80092002)\n#define CRYPT_E_FILE_ERROR                                 _HRESULT_TYPEDEF_(0x80092003)\n#define CRYPT_E_NOT_FOUND                                  _HRESULT_TYPEDEF_(0x80092004)\n#define CRYPT_E_EXISTS                                     _HRESULT_TYPEDEF_(0x80092005)\n#define CRYPT_E_NO_PROVIDER                                _HRESULT_TYPEDEF_(0x80092006)\n#define CRYPT_E_SELF_SIGNED                                _HRESULT_TYPEDEF_(0x80092007)\n#define CRYPT_E_DELETED_PREV                               _HRESULT_TYPEDEF_(0x80092008)\n#define CRYPT_E_NO_MATCH                                   _HRESULT_TYPEDEF_(0x80092009)\n#define CRYPT_E_UNEXPECTED_MSG_TYPE                        _HRESULT_TYPEDEF_(0x8009200A)\n#define CRYPT_E_NO_KEY_PROPERTY                            _HRESULT_TYPEDEF_(0x8009200B)\n#define CRYPT_E_NO_DECRYPT_CERT                            _HRESULT_TYPEDEF_(0x8009200C)\n#define CRYPT_E_BAD_MSG                                    _HRESULT_TYPEDEF_(0x8009200D)\n#define CRYPT_E_NO_SIGNER                                  _HRESULT_TYPEDEF_(0x8009200E)\n#define CRYPT_E_PENDING_CLOSE                              _HRESULT_TYPEDEF_(0x8009200F)\n#define CRYPT_E_REVOKED                                    _HRESULT_TYPEDEF_(0x80092010)\n#define CRYPT_E_NO_REVOCATION_DLL                          _HRESULT_TYPEDEF_(0x80092011)\n#define CRYPT_E_NO_REVOCATION_CHECK                        _HRESULT_TYPEDEF_(0x80092012)\n#define CRYPT_E_REVOCATION_OFFLINE                         _HRESULT_TYPEDEF_(0x80092013)\n#define CRYPT_E_NOT_IN_REVOCATION_DATABASE                 _HRESULT_TYPEDEF_(0x80092014)\n#define CRYPT_E_INVALID_NUMERIC_STRING                     _HRESULT_TYPEDEF_(0x80092020)\n#define CRYPT_E_INVALID_PRINTABLE_STRING                   _HRESULT_TYPEDEF_(0x80092021)\n#define CRYPT_E_INVALID_IA5_STRING                         _HRESULT_TYPEDEF_(0x80092022)\n#define CRYPT_E_INVALID_X500_STRING                        _HRESULT_TYPEDEF_(0x80092023)\n#define CRYPT_E_NOT_CHAR_STRING                            _HRESULT_TYPEDEF_(0x80092024)\n#define CRYPT_E_FILERESIZED                                _HRESULT_TYPEDEF_(0x80092025)\n#define CRYPT_E_SECURITY_SETTINGS                          _HRESULT_TYPEDEF_(0x80092026)\n#define CRYPT_E_NO_VERIFY_USAGE_DLL                        _HRESULT_TYPEDEF_(0x80092027)\n#define CRYPT_E_NO_VERIFY_USAGE_CHECK                      _HRESULT_TYPEDEF_(0x80092028)\n#define CRYPT_E_VERIFY_USAGE_OFFLINE                       _HRESULT_TYPEDEF_(0x80092029)\n#define CRYPT_E_NOT_IN_CTL                                 _HRESULT_TYPEDEF_(0x8009202A)\n#define CRYPT_E_NO_TRUSTED_SIGNER                          _HRESULT_TYPEDEF_(0x8009202B)\n#define CRYPT_E_MISSING_PUBKEY_PARA                        _HRESULT_TYPEDEF_(0x8009202C)\n#define CRYPT_E_OSS_ERROR                                  _HRESULT_TYPEDEF_(0x80093000)\n#define OSS_MORE_BUF                                       _HRESULT_TYPEDEF_(0x80093001)\n#define OSS_NEGATIVE_UINTEGER                              _HRESULT_TYPEDEF_(0x80093002)\n#define OSS_PDU_RANGE                                      _HRESULT_TYPEDEF_(0x80093003)\n#define OSS_MORE_INPUT                                     _HRESULT_TYPEDEF_(0x80093004)\n#define OSS_DATA_ERROR                                     _HRESULT_TYPEDEF_(0x80093005)\n#define OSS_BAD_ARG                                        _HRESULT_TYPEDEF_(0x80093006)\n#define OSS_BAD_VERSION                                    _HRESULT_TYPEDEF_(0x80093007)\n#define OSS_OUT_MEMORY                                     _HRESULT_TYPEDEF_(0x80093008)\n#define OSS_PDU_MISMATCH                                   _HRESULT_TYPEDEF_(0x80093009)\n#define OSS_LIMITED                                        _HRESULT_TYPEDEF_(0x8009300A)\n#define OSS_BAD_PTR                                        _HRESULT_TYPEDEF_(0x8009300B)\n#define OSS_BAD_TIME                                       _HRESULT_TYPEDEF_(0x8009300C)\n#define OSS_INDEFINITE_NOT_SUPPORTED                       _HRESULT_TYPEDEF_(0x8009300D)\n#define OSS_MEM_ERROR                                      _HRESULT_TYPEDEF_(0x8009300E)\n#define OSS_BAD_TABLE                                      _HRESULT_TYPEDEF_(0x8009300F)\n#define OSS_TOO_LONG                                       _HRESULT_TYPEDEF_(0x80093010)\n#define OSS_CONSTRAINT_VIOLATED                            _HRESULT_TYPEDEF_(0x80093011)\n#define OSS_FATAL_ERROR                                    _HRESULT_TYPEDEF_(0x80093012)\n#define OSS_ACCESS_SERIALIZATION_ERROR                     _HRESULT_TYPEDEF_(0x80093013)\n#define OSS_NULL_TBL                                       _HRESULT_TYPEDEF_(0x80093014)\n#define OSS_NULL_FCN                                       _HRESULT_TYPEDEF_(0x80093015)\n#define OSS_BAD_ENCRULES                                   _HRESULT_TYPEDEF_(0x80093016)\n#define OSS_UNAVAIL_ENCRULES                               _HRESULT_TYPEDEF_(0x80093017)\n#define OSS_CANT_OPEN_TRACE_WINDOW                         _HRESULT_TYPEDEF_(0x80093018)\n#define OSS_UNIMPLEMENTED                                  _HRESULT_TYPEDEF_(0x80093019)\n#define OSS_OID_DLL_NOT_LINKED                             _HRESULT_TYPEDEF_(0x8009301A)\n#define OSS_CANT_OPEN_TRACE_FILE                           _HRESULT_TYPEDEF_(0x8009301B)\n#define OSS_TRACE_FILE_ALREADY_OPEN                        _HRESULT_TYPEDEF_(0x8009301C)\n#define OSS_TABLE_MISMATCH                                 _HRESULT_TYPEDEF_(0x8009301D)\n#define OSS_TYPE_NOT_SUPPORTED                             _HRESULT_TYPEDEF_(0x8009301E)\n#define OSS_REAL_DLL_NOT_LINKED                            _HRESULT_TYPEDEF_(0x8009301F)\n#define OSS_REAL_CODE_NOT_LINKED                           _HRESULT_TYPEDEF_(0x80093020)\n#define OSS_OUT_OF_RANGE                                   _HRESULT_TYPEDEF_(0x80093021)\n#define OSS_COPIER_DLL_NOT_LINKED                          _HRESULT_TYPEDEF_(0x80093022)\n#define OSS_CONSTRAINT_DLL_NOT_LINKED                      _HRESULT_TYPEDEF_(0x80093023)\n#define OSS_COMPARATOR_DLL_NOT_LINKED                      _HRESULT_TYPEDEF_(0x80093024)\n#define OSS_COMPARATOR_CODE_NOT_LINKED                     _HRESULT_TYPEDEF_(0x80093025)\n#define OSS_MEM_MGR_DLL_NOT_LINKED                         _HRESULT_TYPEDEF_(0x80093026)\n#define OSS_PDV_DLL_NOT_LINKED                             _HRESULT_TYPEDEF_(0x80093027)\n#define OSS_PDV_CODE_NOT_LINKED                            _HRESULT_TYPEDEF_(0x80093028)\n#define OSS_API_DLL_NOT_LINKED                             _HRESULT_TYPEDEF_(0x80093029)\n#define OSS_BERDER_DLL_NOT_LINKED                          _HRESULT_TYPEDEF_(0x8009302A)\n#define OSS_PER_DLL_NOT_LINKED                             _HRESULT_TYPEDEF_(0x8009302B)\n#define OSS_OPEN_TYPE_ERROR                                _HRESULT_TYPEDEF_(0x8009302C)\n#define OSS_MUTEX_NOT_CREATED                              _HRESULT_TYPEDEF_(0x8009302D)\n#define OSS_CANT_CLOSE_TRACE_FILE                          _HRESULT_TYPEDEF_(0x8009302E)\n#define CRYPT_E_ASN1_ERROR                                 _HRESULT_TYPEDEF_(0x80093100)\n#define CRYPT_E_ASN1_INTERNAL                              _HRESULT_TYPEDEF_(0x80093101)\n#define CRYPT_E_ASN1_EOD                                   _HRESULT_TYPEDEF_(0x80093102)\n#define CRYPT_E_ASN1_CORRUPT                               _HRESULT_TYPEDEF_(0x80093103)\n#define CRYPT_E_ASN1_LARGE                                 _HRESULT_TYPEDEF_(0x80093104)\n#define CRYPT_E_ASN1_CONSTRAINT                            _HRESULT_TYPEDEF_(0x80093105)\n#define CRYPT_E_ASN1_MEMORY                                _HRESULT_TYPEDEF_(0x80093106)\n#define CRYPT_E_ASN1_OVERFLOW                              _HRESULT_TYPEDEF_(0x80093107)\n#define CRYPT_E_ASN1_BADPDU                                _HRESULT_TYPEDEF_(0x80093108)\n#define CRYPT_E_ASN1_BADARGS                               _HRESULT_TYPEDEF_(0x80093109)\n#define CRYPT_E_ASN1_BADREAL                               _HRESULT_TYPEDEF_(0x8009310A)\n#define CRYPT_E_ASN1_BADTAG                                _HRESULT_TYPEDEF_(0x8009310B)\n#define CRYPT_E_ASN1_CHOICE                                _HRESULT_TYPEDEF_(0x8009310C)\n#define CRYPT_E_ASN1_RULE                                  _HRESULT_TYPEDEF_(0x8009310D)\n#define CRYPT_E_ASN1_UTF8                                  _HRESULT_TYPEDEF_(0x8009310E)\n#define CRYPT_E_ASN1_PDU_TYPE                              _HRESULT_TYPEDEF_(0x80093133)\n#define CRYPT_E_ASN1_NYI                                   _HRESULT_TYPEDEF_(0x80093134)\n#define CRYPT_E_ASN1_EXTENDED                              _HRESULT_TYPEDEF_(0x80093201)\n#define CRYPT_E_ASN1_NOEOD                                 _HRESULT_TYPEDEF_(0x80093202)\n\n#define TRUST_E_SYSTEM_ERROR                               _HRESULT_TYPEDEF_(0x80096001)\n#define TRUST_E_NO_SIGNER_CERT                             _HRESULT_TYPEDEF_(0x80096002)\n#define TRUST_E_COUNTER_SIGNER                             _HRESULT_TYPEDEF_(0x80096003)\n#define TRUST_E_CERT_SIGNATURE                             _HRESULT_TYPEDEF_(0x80096004)\n#define TRUST_E_TIME_STAMP                                 _HRESULT_TYPEDEF_(0x80096005)\n#define TRUST_E_BAD_DIGEST                                 _HRESULT_TYPEDEF_(0x80096010)\n#define TRUST_E_BASIC_CONSTRAINTS                          _HRESULT_TYPEDEF_(0x80096019)\n#define TRUST_E_FINANCIAL_CRITERIA                         _HRESULT_TYPEDEF_(0x8009601E)\n#define TRUST_E_PROVIDER_UNKNOWN                           _HRESULT_TYPEDEF_(0x800B0001)\n#define TRUST_E_ACTION_UNKNOWN                             _HRESULT_TYPEDEF_(0x800B0002)\n#define TRUST_E_SUBJECT_FORM_UNKNOWN                       _HRESULT_TYPEDEF_(0x800B0003)\n#define TRUST_E_SUBJECT_NOT_TRUSTED                        _HRESULT_TYPEDEF_(0x800B0004)\n#define TRUST_E_NOSIGNATURE                                _HRESULT_TYPEDEF_(0x800B0100)\n#define CERT_E_EXPIRED                                     _HRESULT_TYPEDEF_(0x800B0101)\n#define CERT_E_VALIDITYPERIODNESTING                       _HRESULT_TYPEDEF_(0x800B0102)\n#define CERT_E_ROLE                                        _HRESULT_TYPEDEF_(0x800B0103)\n#define CERT_E_PATHLENCONST                                _HRESULT_TYPEDEF_(0x800B0104)\n#define CERT_E_CRITICAL                                    _HRESULT_TYPEDEF_(0x800B0105)\n#define CERT_E_PURPOSE                                     _HRESULT_TYPEDEF_(0x800B0106)\n#define CERT_E_ISSUERCHAINING                              _HRESULT_TYPEDEF_(0x800B0107)\n#define CERT_E_MALFORMED                                   _HRESULT_TYPEDEF_(0x800B0108)\n#define CERT_E_UNTRUSTEDROOT                               _HRESULT_TYPEDEF_(0x800B0109)\n#define CERT_E_CHAINING                                    _HRESULT_TYPEDEF_(0x800B010A)\n#define TRUST_E_FAIL                                       _HRESULT_TYPEDEF_(0x800B010B)\n#define CERT_E_REVOKED                                     _HRESULT_TYPEDEF_(0x800B010C)\n#define CERT_E_UNTRUSTEDTESTROOT                           _HRESULT_TYPEDEF_(0x800B010D)\n#define CERT_E_REVOCATION_FAILURE                          _HRESULT_TYPEDEF_(0x800B010E)\n#define CERT_E_CN_NO_MATCH                                 _HRESULT_TYPEDEF_(0x800B010F)\n#define CERT_E_WRONG_USAGE                                 _HRESULT_TYPEDEF_(0x800B0110)\n#define TRUST_E_EXPLICIT_DISTRUST                          _HRESULT_TYPEDEF_(0x800B0111)\n#define CERT_E_UNTRUSTEDCA                                 _HRESULT_TYPEDEF_(0x800B0112)\n#define CERT_E_INVALID_POLICY                              _HRESULT_TYPEDEF_(0x800B0113)\n#define CERT_E_INVALID_NAME                                _HRESULT_TYPEDEF_(0x800B0114)\n\n#define SPAPI_E_EXPECTED_SECTION_NAME                      _HRESULT_TYPEDEF_(0x800F0000)\n#define SPAPI_E_BAD_SECTION_NAME_LINE                      _HRESULT_TYPEDEF_(0x800F0001)\n#define SPAPI_E_SECTION_NAME_TOO_LONG                      _HRESULT_TYPEDEF_(0x800F0002)\n#define SPAPI_E_GENERAL_SYNTAX                             _HRESULT_TYPEDEF_(0x800F0003)\n#define SPAPI_E_WRONG_INF_STYLE                            _HRESULT_TYPEDEF_(0x800F0100)\n#define SPAPI_E_SECTION_NOT_FOUND                          _HRESULT_TYPEDEF_(0x800F0101)\n#define SPAPI_E_LINE_NOT_FOUND                             _HRESULT_TYPEDEF_(0x800F0102)\n#define SPAPI_E_NO_BACKUP                                  _HRESULT_TYPEDEF_(0x800F0103)\n#define SPAPI_E_NO_ASSOCIATED_CLASS                        _HRESULT_TYPEDEF_(0x800F0200)\n#define SPAPI_E_CLASS_MISMATCH                             _HRESULT_TYPEDEF_(0x800F0201)\n#define SPAPI_E_DUPLICATE_FOUND                            _HRESULT_TYPEDEF_(0x800F0202)\n#define SPAPI_E_NO_DRIVER_SELECTED                         _HRESULT_TYPEDEF_(0x800F0203)\n#define SPAPI_E_KEY_DOES_NOT_EXIST                         _HRESULT_TYPEDEF_(0x800F0204)\n#define SPAPI_E_INVALID_DEVINST_NAME                       _HRESULT_TYPEDEF_(0x800F0205)\n#define SPAPI_E_INVALID_CLASS                              _HRESULT_TYPEDEF_(0x800F0206)\n#define SPAPI_E_DEVINST_ALREADY_EXISTS                     _HRESULT_TYPEDEF_(0x800F0207)\n#define SPAPI_E_DEVINFO_NOT_REGISTERED                     _HRESULT_TYPEDEF_(0x800F0208)\n#define SPAPI_E_INVALID_REG_PROPERTY                       _HRESULT_TYPEDEF_(0x800F0209)\n#define SPAPI_E_NO_INF                                     _HRESULT_TYPEDEF_(0x800F020A)\n#define SPAPI_E_NO_SUCH_DEVINST                            _HRESULT_TYPEDEF_(0x800F020B)\n#define SPAPI_E_CANT_LOAD_CLASS_ICON                       _HRESULT_TYPEDEF_(0x800F020C)\n#define SPAPI_E_INVALID_CLASS_INSTALLER                    _HRESULT_TYPEDEF_(0x800F020D)\n#define SPAPI_E_DI_DO_DEFAULT                              _HRESULT_TYPEDEF_(0x800F020E)\n#define SPAPI_E_DI_NOFILECOPY                              _HRESULT_TYPEDEF_(0x800F020F)\n#define SPAPI_E_INVALID_HWPROFILE                          _HRESULT_TYPEDEF_(0x800F0210)\n#define SPAPI_E_NO_DEVICE_SELECTED                         _HRESULT_TYPEDEF_(0x800F0211)\n#define SPAPI_E_DEVINFO_LIST_LOCKED                        _HRESULT_TYPEDEF_(0x800F0212)\n#define SPAPI_E_DEVINFO_DATA_LOCKED                        _HRESULT_TYPEDEF_(0x800F0213)\n#define SPAPI_E_DI_BAD_PATH                                _HRESULT_TYPEDEF_(0x800F0214)\n#define SPAPI_E_NO_CLASSINSTALL_PARAMS                     _HRESULT_TYPEDEF_(0x800F0215)\n#define SPAPI_E_FILEQUEUE_LOCKED                           _HRESULT_TYPEDEF_(0x800F0216)\n#define SPAPI_E_BAD_SERVICE_INSTALLSECT                    _HRESULT_TYPEDEF_(0x800F0217)\n#define SPAPI_E_NO_CLASS_DRIVER_LIST                       _HRESULT_TYPEDEF_(0x800F0218)\n#define SPAPI_E_NO_ASSOCIATED_SERVICE                      _HRESULT_TYPEDEF_(0x800F0219)\n#define SPAPI_E_NO_DEFAULT_DEVICE_INTERFACE                _HRESULT_TYPEDEF_(0x800F021A)\n#define SPAPI_E_DEVICE_INTERFACE_ACTIVE                    _HRESULT_TYPEDEF_(0x800F021B)\n#define SPAPI_E_DEVICE_INTERFACE_REMOVED                   _HRESULT_TYPEDEF_(0x800F021C)\n#define SPAPI_E_BAD_INTERFACE_INSTALLSECT                  _HRESULT_TYPEDEF_(0x800F021D)\n#define SPAPI_E_NO_SUCH_INTERFACE_CLASS                    _HRESULT_TYPEDEF_(0x800F021E)\n#define SPAPI_E_INVALID_REFERENCE_STRING                   _HRESULT_TYPEDEF_(0x800F021F)\n#define SPAPI_E_INVALID_MACHINENAME                        _HRESULT_TYPEDEF_(0x800F0220)\n#define SPAPI_E_REMOTE_COMM_FAILURE                        _HRESULT_TYPEDEF_(0x800F0221)\n#define SPAPI_E_MACHINE_UNAVAILABLE                        _HRESULT_TYPEDEF_(0x800F0222)\n#define SPAPI_E_NO_CONFIGMGR_SERVICES                      _HRESULT_TYPEDEF_(0x800F0223)\n#define SPAPI_E_INVALID_PROPPAGE_PROVIDER                  _HRESULT_TYPEDEF_(0x800F0224)\n#define SPAPI_E_NO_SUCH_DEVICE_INTERFACE                   _HRESULT_TYPEDEF_(0x800F0225)\n#define SPAPI_E_DI_POSTPROCESSING_REQUIRED                 _HRESULT_TYPEDEF_(0x800F0226)\n#define SPAPI_E_INVALID_COINSTALLER                        _HRESULT_TYPEDEF_(0x800F0227)\n#define SPAPI_E_NO_COMPAT_DRIVERS                          _HRESULT_TYPEDEF_(0x800F0228)\n#define SPAPI_E_NO_DEVICE_ICON                             _HRESULT_TYPEDEF_(0x800F0229)\n#define SPAPI_E_INVALID_INF_LOGCONFIG                      _HRESULT_TYPEDEF_(0x800F022A)\n#define SPAPI_E_DI_DONT_INSTALL                            _HRESULT_TYPEDEF_(0x800F022B)\n#define SPAPI_E_INVALID_FILTER_DRIVER                      _HRESULT_TYPEDEF_(0x800F022C)\n#define SPAPI_E_NON_WINDOWS_NT_DRIVER                      _HRESULT_TYPEDEF_(0x800F022D)\n#define SPAPI_E_NON_WINDOWS_DRIVER                         _HRESULT_TYPEDEF_(0x800F022E)\n#define SPAPI_E_NO_CATALOG_FOR_OEM_INF                     _HRESULT_TYPEDEF_(0x800F022F)\n#define SPAPI_E_DEVINSTALL_QUEUE_NONNATIVE                 _HRESULT_TYPEDEF_(0x800F0230)\n#define SPAPI_E_NOT_DISABLEABLE                            _HRESULT_TYPEDEF_(0x800F0231)\n#define SPAPI_E_CANT_REMOVE_DEVINST                        _HRESULT_TYPEDEF_(0x800F0232)\n#define SPAPI_E_INVALID_TARGET                             _HRESULT_TYPEDEF_(0x800F0233)\n#define SPAPI_E_DRIVER_NONNATIVE                           _HRESULT_TYPEDEF_(0x800F0234)\n#define SPAPI_E_IN_WOW64                                   _HRESULT_TYPEDEF_(0x800F0235)\n#define SPAPI_E_SET_SYSTEM_RESTORE_POINT                   _HRESULT_TYPEDEF_(0x800F0236)\n#define SPAPI_E_INCORRECTLY_COPIED_INF                     _HRESULT_TYPEDEF_(0x800F0237)\n#define SPAPI_E_SCE_DISABLED                               _HRESULT_TYPEDEF_(0x800F0238)\n#define SPAPI_E_ERROR_NOT_INSTALLED                        _HRESULT_TYPEDEF_(0x800F1000)\n\n/* Smart card management error codes */\n#define SCARD_S_SUCCESS                                    NO_ERROR\n#define SCARD_F_INTERNAL_ERROR                             _HRESULT_TYPEDEF_(0x80100001)\n#define SCARD_E_CANCELLED                                  _HRESULT_TYPEDEF_(0x80100002)\n#define SCARD_E_INVALID_HANDLE                             _HRESULT_TYPEDEF_(0x80100003)\n#define SCARD_E_INVALID_PARAMETER                          _HRESULT_TYPEDEF_(0x80100004)\n#define SCARD_E_INVALID_TARGET                             _HRESULT_TYPEDEF_(0x80100005)\n#define SCARD_E_NO_MEMORY                                  _HRESULT_TYPEDEF_(0x80100006)\n#define SCARD_F_WAITED_TOO_LONG                            _HRESULT_TYPEDEF_(0x80100007)\n#define SCARD_E_INSUFFICIENT_BUFFER                        _HRESULT_TYPEDEF_(0x80100008)\n#define SCARD_E_UNKNOWN_READER                             _HRESULT_TYPEDEF_(0x80100009)\n#define SCARD_E_TIMEOUT                                    _HRESULT_TYPEDEF_(0x8010000A)\n#define SCARD_E_SHARING_VIOLATION                          _HRESULT_TYPEDEF_(0x8010000B)\n#define SCARD_E_NO_SMARTCARD                               _HRESULT_TYPEDEF_(0x8010000C)\n#define SCARD_E_UNKNOWN_CARD                               _HRESULT_TYPEDEF_(0x8010000D)\n#define SCARD_E_CANT_DISPOSE                               _HRESULT_TYPEDEF_(0x8010000E)\n#define SCARD_E_PROTO_MISMATCH                             _HRESULT_TYPEDEF_(0x8010000F)\n#define SCARD_E_NOT_READY                                  _HRESULT_TYPEDEF_(0x80100010)\n#define SCARD_E_INVALID_VALUE                              _HRESULT_TYPEDEF_(0x80100011)\n#define SCARD_E_SYSTEM_CANCELLED                           _HRESULT_TYPEDEF_(0x80100012)\n#define SCARD_F_COMM_ERROR                                 _HRESULT_TYPEDEF_(0x80100013)\n#define SCARD_F_UNKNOWN_ERROR                              _HRESULT_TYPEDEF_(0x80100014)\n#define SCARD_E_INVALID_ATR                                _HRESULT_TYPEDEF_(0x80100015)\n#define SCARD_E_NOT_TRANSACTED                             _HRESULT_TYPEDEF_(0x80100016)\n#define SCARD_E_READER_UNAVAILABLE                         _HRESULT_TYPEDEF_(0x80100017)\n#define SCARD_P_SHUTDOWN                                   _HRESULT_TYPEDEF_(0x80100018)\n#define SCARD_E_PCI_TOO_SMALL                              _HRESULT_TYPEDEF_(0x80100019)\n#define SCARD_E_READER_UNSUPPORTED                         _HRESULT_TYPEDEF_(0x8010001A)\n#define SCARD_E_DUPLICATE_READER                           _HRESULT_TYPEDEF_(0x8010001B)\n#define SCARD_E_CARD_UNSUPPORTED                           _HRESULT_TYPEDEF_(0x8010001C)\n#define SCARD_E_NO_SERVICE                                 _HRESULT_TYPEDEF_(0x8010001D)\n#define SCARD_E_SERVICE_STOPPED                            _HRESULT_TYPEDEF_(0x8010001E)\n#define SCARD_E_UNEXPECTED                                 _HRESULT_TYPEDEF_(0x8010001F)\n#define SCARD_E_ICC_INSTALLATION                           _HRESULT_TYPEDEF_(0x80100020)\n#define SCARD_E_ICC_CREATEORDER                            _HRESULT_TYPEDEF_(0x80100021)\n#define SCARD_E_UNSUPPORTED_FEATURE                        _HRESULT_TYPEDEF_(0x80100022)\n#define SCARD_E_DIR_NOT_FOUND                              _HRESULT_TYPEDEF_(0x80100023)\n#define SCARD_E_FILE_NOT_FOUND                             _HRESULT_TYPEDEF_(0x80100024)\n#define SCARD_E_NO_DIR                                     _HRESULT_TYPEDEF_(0x80100025)\n#define SCARD_E_NO_FILE                                    _HRESULT_TYPEDEF_(0x80100026)\n#define SCARD_E_NO_ACCESS                                  _HRESULT_TYPEDEF_(0x80100027)\n#define SCARD_E_WRITE_TOO_MANY                             _HRESULT_TYPEDEF_(0x80100028)\n#define SCARD_E_BAD_SEEK                                   _HRESULT_TYPEDEF_(0x80100029)\n#define SCARD_E_INVALID_CHV                                _HRESULT_TYPEDEF_(0x8010002A)\n#define SCARD_E_UNKNOWN_RES_MNG                            _HRESULT_TYPEDEF_(0x8010002B)\n#define SCARD_E_NO_SUCH_CERTIFICATE                        _HRESULT_TYPEDEF_(0x8010002C)\n#define SCARD_E_CERTIFICATE_UNAVAILABLE                    _HRESULT_TYPEDEF_(0x8010002D)\n#define SCARD_E_NO_READERS_AVAILABLE                       _HRESULT_TYPEDEF_(0x8010002E)\n#define SCARD_E_COMM_DATA_LOST                             _HRESULT_TYPEDEF_(0x8010002F)\n#define SCARD_E_NO_KEY_CONTAINER                           _HRESULT_TYPEDEF_(0x80100030)\n#define SCARD_E_SERVER_TOO_BUSY                            _HRESULT_TYPEDEF_(0x80100031)\n#define SCARD_W_UNSUPPORTED_CARD                           _HRESULT_TYPEDEF_(0x80100065)\n#define SCARD_W_UNRESPONSIVE_CARD                          _HRESULT_TYPEDEF_(0x80100066)\n#define SCARD_W_UNPOWERED_CARD                             _HRESULT_TYPEDEF_(0x80100067)\n#define SCARD_W_RESET_CARD                                 _HRESULT_TYPEDEF_(0x80100068)\n#define SCARD_W_REMOVED_CARD                               _HRESULT_TYPEDEF_(0x80100069)\n#define SCARD_W_SECURITY_VIOLATION                         _HRESULT_TYPEDEF_(0x8010006A)\n#define SCARD_W_WRONG_CHV                                  _HRESULT_TYPEDEF_(0x8010006B)\n#define SCARD_W_CHV_BLOCKED                                _HRESULT_TYPEDEF_(0x8010006C)\n#define SCARD_W_EOF                                        _HRESULT_TYPEDEF_(0x8010006D)\n#define SCARD_W_CANCELLED_BY_USER                          _HRESULT_TYPEDEF_(0x8010006E)\n#define SCARD_W_CARD_NOT_AUTHENTICATED                     _HRESULT_TYPEDEF_(0x8010006F)\n#define SCARD_W_CACHE_ITEM_NOT_FOUND                       _HRESULT_TYPEDEF_(0x80100070)\n#define SCARD_W_CACHE_ITEM_STALE                           _HRESULT_TYPEDEF_(0x80100071)\n#define SCARD_W_CACHE_ITEM_TOO_BIG                         _HRESULT_TYPEDEF_(0x80100072)\n\n#define WININET_E_OUT_OF_HANDLES                           _HRESULT_TYPEDEF_(0x80072ee1)\n#define WININET_E_TIMEOUT                                  _HRESULT_TYPEDEF_(0x80072ee2)\n#define WININET_E_EXTENDED_ERROR                           _HRESULT_TYPEDEF_(0x80072ee3)\n#define WININET_E_INTERNAL_ERROR                           _HRESULT_TYPEDEF_(0x80072ee4)\n#define WININET_E_INVALID_URL                              _HRESULT_TYPEDEF_(0x80072ee5)\n#define WININET_E_UNRECOGNIZED_SCHEME                      _HRESULT_TYPEDEF_(0x80072ee6)\n#define WININET_E_NAME_NOT_RESOLVED                        _HRESULT_TYPEDEF_(0x80072ee7)\n#define WININET_E_PROTOCOL_NOT_FOUND                       _HRESULT_TYPEDEF_(0x80072ee8)\n#define WININET_E_INVALID_OPTION                           _HRESULT_TYPEDEF_(0x80072ee9)\n#define WININET_E_BAD_OPTION_LENGTH                        _HRESULT_TYPEDEF_(0x80072eea)\n#define WININET_E_OPTION_NOT_SETTABLE                      _HRESULT_TYPEDEF_(0x80072eeb)\n#define WININET_E_SHUTDOWN                                 _HRESULT_TYPEDEF_(0x80072eec)\n#define WININET_E_INCORRECT_USER_NAME                      _HRESULT_TYPEDEF_(0x80072eed)\n#define WININET_E_INCORRECT_PASSWORD                       _HRESULT_TYPEDEF_(0x80072eee)\n#define WININET_E_LOGIN_FAILURE                            _HRESULT_TYPEDEF_(0x80072eef)\n#define WININET_E_INVALID_OPERATION                        _HRESULT_TYPEDEF_(0x80072ef0)\n#define WININET_E_OPERATION_CANCELLED                      _HRESULT_TYPEDEF_(0x80072ef1)\n#define WININET_E_INCORRECT_HANDLE_TYPE                    _HRESULT_TYPEDEF_(0x80072ef2)\n#define WININET_E_INCORRECT_HANDLE_STATE                   _HRESULT_TYPEDEF_(0x80072ef3)\n#define WININET_E_NOT_PROXY_REQUEST                        _HRESULT_TYPEDEF_(0x80072ef4)\n#define WININET_E_REGISTRY_VALUE_NOT_FOUND                 _HRESULT_TYPEDEF_(0x80072ef5)\n#define WININET_E_BAD_REGISTRY_PARAMETER                   _HRESULT_TYPEDEF_(0x80072ef6)\n#define WININET_E_NO_DIRECT_ACCESS                         _HRESULT_TYPEDEF_(0x80072ef7)\n#define WININET_E_NO_CONTEXT                               _HRESULT_TYPEDEF_(0x80072ef8)\n#define WININET_E_NO_CALLBACK                              _HRESULT_TYPEDEF_(0x80072ef9)\n#define WININET_E_REQUEST_PENDING                          _HRESULT_TYPEDEF_(0x80072efa)\n#define WININET_E_INCORRECT_FORMAT                         _HRESULT_TYPEDEF_(0x80072efb)\n#define WININET_E_ITEM_NOT_FOUND                           _HRESULT_TYPEDEF_(0x80072efc)\n#define WININET_E_CANNOT_CONNECT                           _HRESULT_TYPEDEF_(0x80072efd)\n#define WININET_E_CONNECTION_ABORTED                       _HRESULT_TYPEDEF_(0x80072efe)\n#define WININET_E_CONNECTION_RESET                         _HRESULT_TYPEDEF_(0x80072eff)\n#define WININET_E_FORCE_RETRY                              _HRESULT_TYPEDEF_(0x80072f00)\n#define WININET_E_INVALID_PROXY_REQUEST                    _HRESULT_TYPEDEF_(0x80072f01)\n#define WININET_E_NEED_UI                                  _HRESULT_TYPEDEF_(0x80072f02)\n#define WININET_E_HANDLE_EXISTS                            _HRESULT_TYPEDEF_(0x80072f04)\n#define WININET_E_SEC_CERT_DATE_INVALID                    _HRESULT_TYPEDEF_(0x80072f05)\n#define WININET_E_SEC_CERT_CN_INVALID                      _HRESULT_TYPEDEF_(0x80072f06)\n#define WININET_E_HTTP_TO_HTTPS_ON_REDIR                   _HRESULT_TYPEDEF_(0x80072f07)\n#define WININET_E_HTTPS_TO_HTTP_ON_REDIR                   _HRESULT_TYPEDEF_(0x80072f08)\n#define WININET_E_MIXED_SECURITY                           _HRESULT_TYPEDEF_(0x80072f09)\n#define WININET_E_CHG_POST_IS_NON_SECURE                   _HRESULT_TYPEDEF_(0x80072f0a)\n#define WININET_E_POST_IS_NON_SECURE                       _HRESULT_TYPEDEF_(0x80072f0b)\n#define WININET_E_CLIENT_AUTH_CERT_NEEDED                  _HRESULT_TYPEDEF_(0x80072f0c)\n#define WININET_E_INVALID_CA                               _HRESULT_TYPEDEF_(0x80072f0d)\n#define WININET_E_CLIENT_AUTH_NOT_SETUP                    _HRESULT_TYPEDEF_(0x80072f0e)\n#define WININET_E_ASYNC_THREAD_FAILED                      _HRESULT_TYPEDEF_(0x80072f0f)\n#define WININET_E_REDIRECT_SCHEME_CHANGE                   _HRESULT_TYPEDEF_(0x80072f10)\n#define WININET_E_DIALOG_PENDING                           _HRESULT_TYPEDEF_(0x80072f11)\n#define WININET_E_RETRY_DIALOG                             _HRESULT_TYPEDEF_(0x80072f12)\n#define WININET_E_NO_NEW_CONTAINERS                        _HRESULT_TYPEDEF_(0x80072f13)\n#define WININET_E_HTTPS_HTTP_SUBMIT_REDIR                  _HRESULT_TYPEDEF_(0x80072f14)\n#define WININET_E_SEC_CERT_ERRORS                          _HRESULT_TYPEDEF_(0x80072f17)\n#define WININET_E_SEC_CERT_REV_FAILED                      _HRESULT_TYPEDEF_(0x80072f19)\n#define WININET_E_HEADER_NOT_FOUND                         _HRESULT_TYPEDEF_(0x80072f76)\n#define WININET_E_DOWNLEVEL_SERVER                         _HRESULT_TYPEDEF_(0x80072f77)\n#define WININET_E_INVALID_SERVER_RESPONSE                  _HRESULT_TYPEDEF_(0x80072f78)\n#define WININET_E_INVALID_HEADER                           _HRESULT_TYPEDEF_(0x80072f79)\n#define WININET_E_INVALID_QUERY_REQUEST                    _HRESULT_TYPEDEF_(0x80072f7a)\n#define WININET_E_HEADER_ALREADY_EXISTS                    _HRESULT_TYPEDEF_(0x80072f7b)\n#define WININET_E_REDIRECT_FAILED                          _HRESULT_TYPEDEF_(0x80072f7c)\n#define WININET_E_SECURITY_CHANNEL_ERROR                   _HRESULT_TYPEDEF_(0x80072f7d)\n#define WININET_E_UNABLE_TO_CACHE_FILE                     _HRESULT_TYPEDEF_(0x80072f7e)\n#define WININET_E_TCPIP_NOT_INSTALLED                      _HRESULT_TYPEDEF_(0x80072f7f)\n#define WININET_E_NOT_REDIRECTED                           _HRESULT_TYPEDEF_(0x80072f80)\n#define WININET_E_COOKIE_NEEDS_CONFIRMATION                _HRESULT_TYPEDEF_(0x80072f81)\n#define WININET_E_COOKIE_DECLINED                          _HRESULT_TYPEDEF_(0x80072f82)\n#define WININET_E_DISCONNECTED                             _HRESULT_TYPEDEF_(0x80072f83)\n#define WININET_E_SERVER_UNREACHABLE                       _HRESULT_TYPEDEF_(0x80072f84)\n#define WININET_E_PROXY_SERVER_UNREACHABLE                 _HRESULT_TYPEDEF_(0x80072f85)\n#define WININET_E_BAD_AUTO_PROXY_SCRIPT                    _HRESULT_TYPEDEF_(0x80072f86)\n#define WININET_E_UNABLE_TO_DOWNLOAD_SCRIPT                _HRESULT_TYPEDEF_(0x80072f87)\n#define WININET_E_REDIRECT_NEEDS_CONFIRMATION              _HRESULT_TYPEDEF_(0x80072f88)\n#define WININET_E_SEC_INVALID_CERT                         _HRESULT_TYPEDEF_(0x80072f89)\n#define WININET_E_SEC_CERT_REVOKED                         _HRESULT_TYPEDEF_(0x80072f8a)\n#define WININET_E_FAILED_DUETOSECURITYCHECK                _HRESULT_TYPEDEF_(0x80072f8b)\n#define WININET_E_NOT_INITIALIZED                          _HRESULT_TYPEDEF_(0x80072f8c)\n#define WININET_E_LOGIN_FAILURE_DISPLAY_ENTITY_BODY        _HRESULT_TYPEDEF_(0x80072f8e)\n#define WININET_E_DECODING_FAILED                          _HRESULT_TYPEDEF_(0x80072f8f)\n\n#define D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS          _HRESULT_TYPEDEF_(0x887c0001)\n#define D3D11_ERROR_FILE_NOT_FOUND                         _HRESULT_TYPEDEF_(0x887c0002)\n#define D3D11_ERROR_TOO_MANY_UNIQUE_VIEW_OBJECTS           _HRESULT_TYPEDEF_(0x887c0003)\n#define D3D11_ERROR_DEFERRED_CONTEXT_MAP_WITHOUT_INITIAL_DISCARD  _HRESULT_TYPEDEF_(0x887c0004)\n\n#define WINCODEC_ERR_WRONGSTATE                            _HRESULT_TYPEDEF_(0x88982f04)\n#define WINCODEC_ERR_VALUEOUTOFRANGE                       _HRESULT_TYPEDEF_(0x88982f05)\n#define WINCODEC_ERR_UNKNOWNIMAGEFORMAT                    _HRESULT_TYPEDEF_(0x88982f07)\n#define WINCODEC_ERR_UNSUPPORTEDVERSION                    _HRESULT_TYPEDEF_(0x88982f0b)\n#define WINCODEC_ERR_NOTINITIALIZED                        _HRESULT_TYPEDEF_(0x88982f0c)\n#define WINCODEC_ERR_ALREADYLOCKED                         _HRESULT_TYPEDEF_(0x88982f0d)\n#define WINCODEC_ERR_PROPERTYNOTFOUND                      _HRESULT_TYPEDEF_(0x88982f40)\n#define WINCODEC_ERR_PROPERTYNOTSUPPORTED                  _HRESULT_TYPEDEF_(0x88982f41)\n#define WINCODEC_ERR_PROPERTYSIZE                          _HRESULT_TYPEDEF_(0x88982f42)\n#define WINCODEC_ERR_CODECPRESENT                          _HRESULT_TYPEDEF_(0x88982f43)\n#define WINCODEC_ERR_CODECNOTHUMBNAIL                      _HRESULT_TYPEDEF_(0x88982f44)\n#define WINCODEC_ERR_PALETTEUNAVAILABLE                    _HRESULT_TYPEDEF_(0x88982f45)\n#define WINCODEC_ERR_CODECTOOMANYSCANLINES                 _HRESULT_TYPEDEF_(0x88982f46)\n#define WINCODEC_ERR_INTERNALERROR                         _HRESULT_TYPEDEF_(0x88982f48)\n#define WINCODEC_ERR_SOURCERECTDOESNOTMATCHDIMENSIONS      _HRESULT_TYPEDEF_(0x88982f49)\n#define WINCODEC_ERR_COMPONENTNOTFOUND                     _HRESULT_TYPEDEF_(0x88982f50)\n#define WINCODEC_ERR_IMAGESIZEOUTOFRANGE                   _HRESULT_TYPEDEF_(0x88982f51)\n#define WINCODEC_ERR_TOOMUCHMETADATA                       _HRESULT_TYPEDEF_(0x88982f52)\n#define WINCODEC_ERR_BADIMAGE                              _HRESULT_TYPEDEF_(0x88982f60)\n#define WINCODEC_ERR_BADHEADER                             _HRESULT_TYPEDEF_(0x88982f61)\n#define WINCODEC_ERR_FRAMEMISSING                          _HRESULT_TYPEDEF_(0x88982f62)\n#define WINCODEC_ERR_BADMETADATAHEADER                     _HRESULT_TYPEDEF_(0x88982f63)\n#define WINCODEC_ERR_BADSTREAMDATA                         _HRESULT_TYPEDEF_(0x88982f70)\n#define WINCODEC_ERR_STREAMWRITE                           _HRESULT_TYPEDEF_(0x88982f71)\n#define WINCODEC_ERR_STREAMREAD                            _HRESULT_TYPEDEF_(0x88982f72)\n#define WINCODEC_ERR_STREAMNOTAVAILABLE                    _HRESULT_TYPEDEF_(0x88982f73)\n#define WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT                _HRESULT_TYPEDEF_(0x88982f80)\n#define WINCODEC_ERR_UNSUPPORTEDOPERATION                  _HRESULT_TYPEDEF_(0x88982f81)\n#define WINCODEC_ERR_INVALIDREGISTRATION                   _HRESULT_TYPEDEF_(0x88982f8a)\n#define WINCODEC_ERR_COMPONENTINITIALIZEFAILURE            _HRESULT_TYPEDEF_(0x88982f8b)\n#define WINCODEC_ERR_INSUFFICIENTBUFFER                    _HRESULT_TYPEDEF_(0x88982f8c)\n#define WINCODEC_ERR_DUPLICATEMETADATAPRESENT              _HRESULT_TYPEDEF_(0x88982f8d)\n#define WINCODEC_ERR_PROPERTYUNEXPECTEDTYPE                _HRESULT_TYPEDEF_(0x88982f8e)\n#define WINCODEC_ERR_UNEXPECTEDSIZE                        _HRESULT_TYPEDEF_(0x88982f8f)\n#define WINCODEC_ERR_INVALIDQUERYREQUEST                   _HRESULT_TYPEDEF_(0x88982f90)\n#define WINCODEC_ERR_UNEXPECTEDMETADATATYPE                _HRESULT_TYPEDEF_(0x88982f91)\n#define WINCODEC_ERR_REQUESTONLYVALIDATMETADATAROOT        _HRESULT_TYPEDEF_(0x88982f92)\n#define WINCODEC_ERR_INVALIDQUERYCHARACTER                 _HRESULT_TYPEDEF_(0x88982f93)\n#define WINCODEC_ERR_WIN32ERROR                            _HRESULT_TYPEDEF_(0x88982f94)\n#define WINCODEC_ERR_INVALIDPROGRESSIVELEVEL               _HRESULT_TYPEDEF_(0x88982f95)\n\n#define DWRITE_E_FILEFORMAT                                _HRESULT_TYPEDEF_(0x88985000)\n#define DWRITE_E_UNEXPECTED                                _HRESULT_TYPEDEF_(0x88985001)\n#define DWRITE_E_NOFONT                                    _HRESULT_TYPEDEF_(0x88985002)\n#define DWRITE_E_FILENOTFOUND                              _HRESULT_TYPEDEF_(0x88985003)\n#define DWRITE_E_FILEACCESS                                _HRESULT_TYPEDEF_(0x88985004)\n#define DWRITE_E_FONTCOLLECTIONOBSOLETE                    _HRESULT_TYPEDEF_(0x88985005)\n#define DWRITE_E_ALREADYREGISTERED                         _HRESULT_TYPEDEF_(0x88985006)\n#define DWRITE_E_CACHEFORMAT                               _HRESULT_TYPEDEF_(0x88985007)\n#define DWRITE_E_CACHEVERSION                              _HRESULT_TYPEDEF_(0x88985008)\n#define DWRITE_E_UNSUPPORTEDOPERATION                      _HRESULT_TYPEDEF_(0x88985009)\n#define DWRITE_E_TEXTRENDERERINCOMPATIBLE                  _HRESULT_TYPEDEF_(0x8898500A)\n#define DWRITE_E_FLOWDIRECTIONCONFLICTS                    _HRESULT_TYPEDEF_(0x8898500B)\n#define DWRITE_E_NOCOLOR                                   _HRESULT_TYPEDEF_(0x8898500C)\n\n#define D2DERR_WRONG_STATE                                 _HRESULT_TYPEDEF_(0x88990001)\n#define D2DERR_NOT_INITIALIZED                             _HRESULT_TYPEDEF_(0x88990002)\n#define D2DERR_UNSUPPORTED_OPERATION                       _HRESULT_TYPEDEF_(0x88990003)\n#define D2DERR_SCANNER_FAILED                              _HRESULT_TYPEDEF_(0x88990004)\n#define D2DERR_SCREEN_ACCESS_DENIED                        _HRESULT_TYPEDEF_(0x88990005)\n#define D2DERR_DISPLAY_STATE_INVALID                       _HRESULT_TYPEDEF_(0x88990006)\n#define D2DERR_ZERO_VECTOR                                 _HRESULT_TYPEDEF_(0x88990007)\n#define D2DERR_INTERNAL_ERROR                              _HRESULT_TYPEDEF_(0x88990008)\n#define D2DERR_DISPLAY_FORMAT_NOT_SUPPORTED                _HRESULT_TYPEDEF_(0x88990009)\n#define D2DERR_INVALID_CALL                                _HRESULT_TYPEDEF_(0x8899000a)\n#define D2DERR_NO_HARDWARE_DEVICE                          _HRESULT_TYPEDEF_(0x8899000b)\n#define D2DERR_RECREATE_TARGET                             _HRESULT_TYPEDEF_(0x8899000c)\n#define D2DERR_TOO_MANY_SHADER_ELEMENTS                    _HRESULT_TYPEDEF_(0x8899000d)\n#define D2DERR_SHADER_COMPILE_FAILED                       _HRESULT_TYPEDEF_(0x8899000e)\n#define D2DERR_MAX_TEXTURE_SIZE_EXCEEDED                   _HRESULT_TYPEDEF_(0x8899000f)\n#define D2DERR_UNSUPPORTED_VERSION                         _HRESULT_TYPEDEF_(0x88990010)\n#define D2DERR_BAD_NUMBER                                  _HRESULT_TYPEDEF_(0x88990011)\n#define D2DERR_WRONG_FACTORY                               _HRESULT_TYPEDEF_(0x88990012)\n#define D2DERR_LAYER_ALREADY_IN_USE                        _HRESULT_TYPEDEF_(0x88990013)\n#define D2DERR_POP_CALL_DID_NOT_MATCH_PUSH                 _HRESULT_TYPEDEF_(0x88990014)\n#define D2DERR_WRONG_RESOURCE_DOMAIN                       _HRESULT_TYPEDEF_(0x88990015)\n#define D2DERR_PUSH_POP_UNBALANCED                         _HRESULT_TYPEDEF_(0x88990016)\n#define D2DERR_RENDER_TARGET_HAS_LAYER_OR_CLIPRECT         _HRESULT_TYPEDEF_(0x88990017)\n#define D2DERR_INCOMPATIBLE_BRUSH_TYPES                    _HRESULT_TYPEDEF_(0x88990018)\n#define D2DERR_WIN32_ERROR                                 _HRESULT_TYPEDEF_(0x88990019)\n#define D2DERR_TARGET_NOT_GDI_COMPATIBLE                   _HRESULT_TYPEDEF_(0x8899001a)\n#define D2DERR_TEXT_EFFECT_IS_WRONG_TYPE                   _HRESULT_TYPEDEF_(0x8899001b)\n#define D2DERR_TEXT_RENDERER_NOT_RELEASED                  _HRESULT_TYPEDEF_(0x8899001c)\n#define D2DERR_EXCEEDS_MAX_BITMAP_SIZE                     _HRESULT_TYPEDEF_(0x8899001d)\n#define D2DERR_INVALID_GRAPH_CONFIGURATION                 _HRESULT_TYPEDEF_(0x8899001e)\n#define D2DERR_INVALID_INTERNAL_GRAPH_CONFIGURATION        _HRESULT_TYPEDEF_(0x8899001f)\n#define D2DERR_CYCLIC_GRAPH                                _HRESULT_TYPEDEF_(0x88990020)\n#define D2DERR_BITMAP_CANNOT_DRAW                          _HRESULT_TYPEDEF_(0x88990021)\n#define D2DERR_OUTSTANDING_BITMAP_REFERENCES               _HRESULT_TYPEDEF_(0x88990022)\n#define D2DERR_ORIGINAL_TARGET_NOT_BOUND                   _HRESULT_TYPEDEF_(0x88990023)\n#define D2DERR_INVALID_TARGET                              _HRESULT_TYPEDEF_(0x88990024)\n#define D2DERR_BITMAP_BOUND_AS_TARGET                      _HRESULT_TYPEDEF_(0x88990025)\n#define D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES            _HRESULT_TYPEDEF_(0x88990026)\n#define D2DERR_INTERMEDIATE_TOO_LARGE                      _HRESULT_TYPEDEF_(0x88990027)\n#define D2DERR_EFFECT_IS_NOT_REGISTERED                    _HRESULT_TYPEDEF_(0x88990028)\n#define D2DERR_INVALID_PROPERTY                            _HRESULT_TYPEDEF_(0x88990029)\n#define D2DERR_NO_SUBPROPERTIES                            _HRESULT_TYPEDEF_(0x8899002a)\n#define D2DERR_PRINT_JOB_CLOSED                            _HRESULT_TYPEDEF_(0x8899002b)\n#define D2DERR_PRINT_FORMAT_NOT_SUPPORTED                  _HRESULT_TYPEDEF_(0x8899002c)\n#define D2DERR_TOO_MANY_TRANSFORM_INPUTS                   _HRESULT_TYPEDEF_(0x8899002d)\n\n#define DXGI_STATUS_OCCLUDED                               _HRESULT_TYPEDEF_(0x087a0001)\n#define DXGI_STATUS_CLIPPED                                _HRESULT_TYPEDEF_(0x087a0002)\n#define DXGI_STATUS_NO_REDIRECTION                         _HRESULT_TYPEDEF_(0x087a0004)\n#define DXGI_STATUS_NO_DESKTOP_ACCESS                      _HRESULT_TYPEDEF_(0x087a0005)\n#define DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE           _HRESULT_TYPEDEF_(0x087a0006)\n#define DXGI_STATUS_MODE_CHANGED                           _HRESULT_TYPEDEF_(0x087a0007)\n#define DXGI_STATUS_MODE_CHANGE_IN_PROGRESS                _HRESULT_TYPEDEF_(0x087a0008)\n#define DXGI_STATUS_UNOCCLUDED                             _HRESULT_TYPEDEF_(0x087a0009)\n#define DXGI_STATUS_DDA_WAS_STILL_DRAWING                  _HRESULT_TYPEDEF_(0x087a000a)\n#define DXGI_STATUS_PRESENT_REQUIRED                       _HRESULT_TYPEDEF_(0x087a002f)\n\n#define DXGI_ERROR_INVALID_CALL                            _HRESULT_TYPEDEF_(0x887a0001)\n#define DXGI_ERROR_NOT_FOUND                               _HRESULT_TYPEDEF_(0x887a0002)\n#define DXGI_ERROR_MORE_DATA                               _HRESULT_TYPEDEF_(0x887a0003)\n#define DXGI_ERROR_UNSUPPORTED                             _HRESULT_TYPEDEF_(0x887a0004)\n#define DXGI_ERROR_DEVICE_REMOVED                          _HRESULT_TYPEDEF_(0x887a0005)\n#define DXGI_ERROR_DEVICE_HUNG                             _HRESULT_TYPEDEF_(0x887a0006)\n#define DXGI_ERROR_DEVICE_RESET                            _HRESULT_TYPEDEF_(0x887a0007)\n#define DXGI_ERROR_WAS_STILL_DRAWING                       _HRESULT_TYPEDEF_(0x887a000a)\n#define DXGI_ERROR_FRAME_STATISTICS_DISJOINT               _HRESULT_TYPEDEF_(0x887a000b)\n#define DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE            _HRESULT_TYPEDEF_(0x887a000c)\n#define DXGI_ERROR_DRIVER_INTERNAL_ERROR                   _HRESULT_TYPEDEF_(0x887a0020)\n#define DXGI_ERROR_NONEXCLUSIVE                            _HRESULT_TYPEDEF_(0x887a0021)\n#define DXGI_ERROR_NOT_CURRENTLY_AVAILABLE                 _HRESULT_TYPEDEF_(0x887a0022)\n#define DXGI_ERROR_REMOTE_CLIENT_DISCONNECTED              _HRESULT_TYPEDEF_(0x887a0023)\n#define DXGI_ERROR_REMOTE_OUTOFMEMORY                      _HRESULT_TYPEDEF_(0x887a0024)\n#define DXGI_ERROR_ACCESS_LOST                             _HRESULT_TYPEDEF_(0x887a0026)\n#define DXGI_ERROR_WAIT_TIMEOUT                            _HRESULT_TYPEDEF_(0x887a0027)\n#define DXGI_ERROR_SESSION_DISCONNECTED                    _HRESULT_TYPEDEF_(0x887a0028)\n#define DXGI_ERROR_RESTRICT_TO_OUTPUT_STALE                _HRESULT_TYPEDEF_(0x887a0029)\n#define DXGI_ERROR_CANNOT_PROTECT_CONTENT                  _HRESULT_TYPEDEF_(0x887a002a)\n#define DXGI_ERROR_ACCESS_DENIED                           _HRESULT_TYPEDEF_(0x887a002b)\n#define DXGI_ERROR_NAME_ALREADY_EXISTS                     _HRESULT_TYPEDEF_(0x887a002c)\n#define DXGI_ERROR_SDK_COMPONENT_MISSING                   _HRESULT_TYPEDEF_(0x887a002d)\n#define DXGI_ERROR_NOT_CURRENT                             _HRESULT_TYPEDEF_(0x887a002e)\n#define DXGI_ERROR_HW_PROTECTION_OUTOFMEMORY               _HRESULT_TYPEDEF_(0x887a0030)\n#define DXGI_ERROR_MODE_CHANGE_IN_PROGRESS                 _HRESULT_TYPEDEF_(0x887a0025)\n\n#define ERROR_AUDITING_DISABLED                            _HRESULT_TYPEDEF_(0xC0090001)\n#define ERROR_ALL_SIDS_FILTERED                            _HRESULT_TYPEDEF_(0xC0090002)\n\n#endif  /* __WINE_WINERROR_H */\n"
  },
  {
    "path": "wine/windows/winevt.h",
    "content": "/* Definitions for the Windows Event Log (wevtapi.dll)\n *\n * Copyright 2012 André Hentschel\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINEVT_H\n#define __WINE_WINEVT_H\n\n#include <wtypes.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\ntypedef HANDLE EVT_HANDLE, *PEVT_HANDLE;\n\ntypedef enum _EVT_CHANNEL_CONFIG_PROPERTY_ID {\n    EvtChannelConfigEnabled = 0,\n    EvtChannelConfigIsolation,\n    EvtChannelConfigType,\n    EvtChannelConfigOwningPublisher,\n    EvtChannelConfigClassicEventlog,\n    EvtChannelConfigAccess,\n    EvtChannelLoggingConfigRetention,\n    EvtChannelLoggingConfigAutoBackup,\n    EvtChannelLoggingConfigMaxSize,\n    EvtChannelLoggingConfigLogFilePath,\n    EvtChannelPublishingConfigLevel,\n    EvtChannelPublishingConfigKeywords,\n    EvtChannelPublishingConfigControlGuid,\n    EvtChannelPublishingConfigBufferSize,\n    EvtChannelPublishingConfigMinBuffers,\n    EvtChannelPublishingConfigMaxBuffers,\n    EvtChannelPublishingConfigLatency,\n    EvtChannelPublishingConfigClockType,\n    EvtChannelPublishingConfigSidType,\n    EvtChannelPublisherList,\n    EvtChannelPublishingConfigFileMax,\n    EvtChannelConfigPropertyIdEND\n} EVT_CHANNEL_CONFIG_PROPERTY_ID;\n\ntypedef enum _EVT_LOGIN_CLASS {\n    EvtRpcLogin = 1\n} EVT_LOGIN_CLASS;\n\ntypedef enum _EVT_SUBSCRIBE_NOTIFY_ACTION {\n    EvtSubscribeActionError = 0,\n    EvtSubscribeActionDeliver\n} EVT_SUBSCRIBE_NOTIFY_ACTION;\n\ntypedef struct _EVT_VARIANT {\n    union {\n        BOOL        BooleanVal;\n        INT8        SByteVal;\n        INT16       Int16Val;\n        INT32       Int32Val;\n        INT64       Int64Val;\n        UINT8       ByteVal;\n        UINT16      UInt16Val;\n        UINT32      UInt32Val;\n        UINT64      UInt64Val;\n        FLOAT       SingleVal;\n        DOUBLE      DoubleVal;\n        ULONGLONG   FileTimeVal;\n        SYSTEMTIME* SysTimeVal;\n        GUID*       GuidVal;\n        LPCWSTR     StringVal;\n        LPCSTR      AnsiStringVal;\n        PBYTE       BinaryVal;\n        PSID        SidVal;\n        SIZE_T      SizeTVal;\n\n        BOOL*       BooleanArr;\n        INT8*       SByteArr;\n        INT16*      Int16Arr;\n        INT32*      Int32Arr;\n        INT64*      Int64Arr;\n        UINT8*      ByteArr;\n        UINT16*     UInt16Arr;\n        UINT32*     UInt32Arr;\n        UINT64*     UInt64Arr;\n        FLOAT*      SingleArr;\n        DOUBLE*     DoubleArr;\n        FILETIME*   FileTimeArr;\n        SYSTEMTIME* SysTimeArr;\n        GUID*       GuidArr;\n        LPWSTR*     StringArr;\n        LPSTR*      AnsiStringArr;\n        PSID*       SidArr;\n        SIZE_T*     SizeTArr;\n\n        EVT_HANDLE  EvtHandleVal;\n        LPCWSTR     XmlVal;\n        LPCWSTR*    XmlValArr;\n    } DUMMYUNIONNAME;\n\n    DWORD Count;\n    DWORD Type;\n} EVT_VARIANT, *PEVT_VARIANT;\n\ntypedef DWORD (WINAPI *EVT_SUBSCRIBE_CALLBACK)(EVT_SUBSCRIBE_NOTIFY_ACTION Action,\n                                               PVOID UserContext, EVT_HANDLE Event);\nBOOL WINAPI EvtExportLog(EVT_HANDLE session, const WCHAR *path, const WCHAR *query,\n                         const WCHAR *file, DWORD flags);\nBOOL WINAPI EvtGetChannelConfigProperty(EVT_HANDLE ChannelConfig,\n                                        EVT_CHANNEL_CONFIG_PROPERTY_ID PropertyId,\n                                        DWORD Flags, DWORD PropertyValueBufferSize,\n                                        PEVT_VARIANT PropertyValueBuffer,\n                                        PDWORD PropertyValueBufferUsed);\nBOOL WINAPI EvtSetChannelConfigProperty(EVT_HANDLE ChannelConfig,\n                                        EVT_CHANNEL_CONFIG_PROPERTY_ID PropertyId,\n                                        DWORD Flags, PEVT_VARIANT PropertyValue);\nEVT_HANDLE WINAPI EvtSubscribe(EVT_HANDLE Session, HANDLE SignalEvent, LPCWSTR ChannelPath,\n                               LPCWSTR Query, EVT_HANDLE Bookmark, PVOID context,\n                               EVT_SUBSCRIBE_CALLBACK Callback, DWORD Flags);\nEVT_HANDLE WINAPI EvtOpenChannelConfig(EVT_HANDLE Session, LPCWSTR ChannelPath, DWORD Flags);\n\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif /* __WINE_WINEVT_H */\n"
  },
  {
    "path": "wine/windows/wingdi.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _WINGDI_\n#define _WINGDI_\n#ifndef NOGDI\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifdef _GDI32_\n#define WINGDIAPI\n#else\n#define WINGDIAPI DECLSPEC_IMPORT\n#endif\n\ntypedef struct _ABCFLOAT {\n    FLOAT   abcfA;\n    FLOAT   abcfB;\n    FLOAT   abcfC;\n} ABCFLOAT, *PABCFLOAT, *LPABCFLOAT;\n\n#define FONTMAPPER_MAX 10\n\ntypedef struct\n{\n    WORD   wFirst;\n    WORD   wSecond;\n    INT  iKernAmount;\n} KERNINGPAIR, *LPKERNINGPAIR;\n\ntypedef struct tagPIXELFORMATDESCRIPTOR {\n    WORD  nSize;\n    WORD  nVersion;\n    DWORD dwFlags;\n    BYTE  iPixelType;\n    BYTE  cColorBits;\n    BYTE  cRedBits;\n    BYTE  cRedShift;\n    BYTE  cGreenBits;\n    BYTE  cGreenShift;\n    BYTE  cBlueBits;\n    BYTE  cBlueShift;\n    BYTE  cAlphaBits;\n    BYTE  cAlphaShift;\n    BYTE  cAccumBits;\n    BYTE  cAccumRedBits;\n    BYTE  cAccumGreenBits;\n    BYTE  cAccumBlueBits;\n    BYTE  cAccumAlphaBits;\n    BYTE  cDepthBits;\n    BYTE  cStencilBits;\n    BYTE  cAuxBuffers;\n    BYTE  iLayerType;\n    BYTE  bReserved;\n    DWORD dwLayerMask;\n    DWORD dwVisibleMask;\n    DWORD dwDamageMask;\n} PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESCRIPTOR, *LPPIXELFORMATDESCRIPTOR;\n\n#define PFD_TYPE_RGBA        0\n#define PFD_TYPE_COLORINDEX  1\n\n#define PFD_MAIN_PLANE       0\n#define PFD_OVERLAY_PLANE    1\n#define PFD_UNDERLAY_PLANE   (-1)\n\n#define PFD_DOUBLEBUFFER          0x00000001\n#define PFD_STEREO                0x00000002\n#define PFD_DRAW_TO_WINDOW        0x00000004\n#define PFD_DRAW_TO_BITMAP        0x00000008\n#define PFD_SUPPORT_GDI           0x00000010\n#define PFD_SUPPORT_OPENGL        0x00000020\n#define PFD_GENERIC_FORMAT        0x00000040\n#define PFD_NEED_PALETTE          0x00000080\n#define PFD_NEED_SYSTEM_PALETTE   0x00000100\n#define PFD_SWAP_EXCHANGE         0x00000200\n#define PFD_SWAP_COPY             0x00000400\n#define PFD_SWAP_LAYER_BUFFERS    0x00000800\n#define PFD_GENERIC_ACCELERATED   0x00001000\n#define PFD_SUPPORT_COMPOSITION   0x00008000 /* Vista stuff */\n\n#define PFD_DEPTH_DONTCARE        0x20000000\n#define PFD_DOUBLEBUFFER_DONTCARE 0x40000000\n#define PFD_STEREO_DONTCARE       0x80000000\n\ntypedef struct tagCOLORADJUSTMENT\n{\n\tWORD   caSize;\n\tWORD   caFlags;\n\tWORD   caIlluminantIndex;\n\tWORD   caRedGamma;\n\tWORD   caGreenGamma;\n\tWORD   caBlueGamma;\n\tWORD   caReferenceBlack;\n\tWORD   caReferenceWhite;\n\tSHORT  caContrast;\n\tSHORT  caBrightness;\n\tSHORT  caColorfulness;\n\tSHORT  caRedGreenTint;\n} COLORADJUSTMENT, *PCOLORADJUSTMENT, *LPCOLORADJUSTMENT;\n\n#define CA_NEGATIVE          0x0001\n#define CA_LOG_FILTER        0x0002\n\n#define ILLUMINANT_DEVICE_DEFAULT   0\n#define ILLUMINANT_A                1\n#define ILLUMINANT_B                2\n#define ILLUMINANT_C                3\n#define ILLUMINANT_D50              4\n#define ILLUMINANT_D55              5\n#define ILLUMINANT_D65              6\n#define ILLUMINANT_D75              7\n#define ILLUMINANT_F2               8\n#define ILLUMINANT_MAX_INDEX        ILLUMINANT_F2\n\n#define ILLUMINANT_TUNGSTEN         ILLUMINANT_A\n#define ILLUMINANT_DAYLIGHT         ILLUMINANT_C\n#define ILLUMINANT_FLUORESCENT      ILLUMINANT_F2\n#define ILLUMINANT_NTSC             ILLUMINANT_C\n\n#define RGB_GAMMA_MIN               (WORD)02500\n#define RGB_GAMMA_MAX               (WORD)65000\n\n#define REFERENCE_WHITE_MIN         (WORD)6000\n#define REFERENCE_WHITE_MAX         (WORD)10000\n#define REFERENCE_BLACK_MIN         (WORD)0\n#define REFERENCE_BLACK_MAX         (WORD)4000\n\n#define COLOR_ADJ_MIN               ((SHORT)-100)\n#define COLOR_ADJ_MAX               (SHORT) 100\n\ntypedef LONG FXPT16DOT16, *LPFXPT16DOT16;\ntypedef LONG FXPT2DOT30, *LPFXPT2DOT30;\ntypedef LONG LCSCSTYPE;\ntypedef LONG LCSGAMUTMATCH;\n\n#define LCS_sRGB                    0x73524742  /* 'sRGB' */\n#define LCS_WINDOWS_COLOR_SPACE     0x57696e20  /* 'Win ' */\n\n#define LCS_CALIBRATED_RGB    __MSABI_LONG(0x00000000)\n#define LCS_DEVICE_RGB        __MSABI_LONG(0x00000001)\n#define LCS_DEVICE_CMYK       __MSABI_LONG(0x00000002)\n\n#define LCS_GM_BUSINESS       __MSABI_LONG(0x00000001)\n#define LCS_GM_GRAPHICS       __MSABI_LONG(0x00000002)\n#define LCS_GM_IMAGES         __MSABI_LONG(0x00000004)\n\n#define CM_OUT_OF_GAMUT       255\n#define CM_IN_GAMUT           0\n\ntypedef struct tagCIEXYZ\n{\n  FXPT2DOT30 ciexyzX;\n  FXPT2DOT30 ciexyzY;\n  FXPT2DOT30 ciexyzZ;\n} CIEXYZ, *LPCIEXYZ;\n\ntypedef struct tagCIEXYZTRIPLE\n{\n  CIEXYZ ciexyzRed;\n  CIEXYZ ciexyzGreen;\n  CIEXYZ ciexyzBlue;\n} CIEXYZTRIPLE, *LPCIEXYZTRIPLE;\n\ntypedef struct tagLOGCOLORSPACEA\n{\n  DWORD lcsSignature;\n  DWORD lcsVersion;\n  DWORD lcsSize;\n  LCSCSTYPE lcsCSType;\n  LCSGAMUTMATCH lcsIntent;\n  CIEXYZTRIPLE lcsEndpoints;\n  DWORD lcsGammaRed;\n  DWORD lcsGammaGreen;\n  DWORD lcsGammaBlue;\n  CHAR lcsFilename[MAX_PATH];\n} LOGCOLORSPACEA, *LPLOGCOLORSPACEA;\n\ntypedef struct tagLOGCOLORSPACEW\n{\n  DWORD lcsSignature;\n  DWORD lcsVersion;\n  DWORD lcsSize;\n  LCSCSTYPE lcsCSType;\n  LCSGAMUTMATCH lcsIntent;\n  CIEXYZTRIPLE lcsEndpoints;\n  DWORD lcsGammaRed;\n  DWORD lcsGammaGreen;\n  DWORD lcsGammaBlue;\n  WCHAR lcsFilename[MAX_PATH];\n} LOGCOLORSPACEW, *LPLOGCOLORSPACEW;\n\nDECL_WINELIB_TYPE_AW(LPLOGCOLORSPACE)\nDECL_WINELIB_TYPE_AW(LOGCOLORSPACE)\n\n#define DC_FIELDS\t\t1\n#define DC_PAPERS\t\t2\n#define DC_PAPERSIZE\t\t3\n#define DC_MINEXTENT\t\t4\n#define DC_MAXEXTENT\t\t5\n#define DC_BINS\t\t\t6\n#define DC_DUPLEX\t\t7\n#define DC_SIZE\t\t\t8\n#define DC_EXTRA\t\t9\n#define DC_VERSION\t\t10\n#define DC_DRIVER\t\t11\n#define DC_BINNAMES\t\t12\n#define DC_ENUMRESOLUTIONS\t13\n#define DC_FILEDEPENDENCIES\t14\n#define DC_TRUETYPE\t\t15\n#define DC_PAPERNAMES\t\t16\n#define DC_ORIENTATION\t\t17\n#define DC_COPIES\t\t18\n#define DC_BINADJUST            19\n#define DC_EMF_COMPLIANT        20\n#define DC_DATATYPE_PRODUCED    21\n#define DC_COLLATE              22\n#define DC_MANUFACTURER         23\n#define DC_MODEL                24\n#define DC_PERSONALITY          25\n#define DC_PRINTRATE            26\n#define DC_PRINTRATEUNIT        27\n#define DC_PRINTERMEM           28\n#define DC_MEDIAREADY           29\n#define DC_STAPLE               30\n#define DC_PRINTRATEPPM         31\n#define DC_COLORDEVICE          32\n#define DC_NUP                  33\n#define DC_MEDIATYPENAMES       34\n#define DC_MEDIATYPES           35\n\n#define DCTT_BITMAP             __MSABI_LONG(0x00000001)\n#define DCTT_DOWNLOAD           __MSABI_LONG(0x00000002)\n#define DCTT_SUBDEV             __MSABI_LONG(0x00000004)\n#define DCTT_DOWNLOAD_OUTLINE   __MSABI_LONG(0x00000008)\n\n#define DCBA_FACEUPNONE         0x0000\n#define DCBA_FACEUPCENTER       0x0001\n#define DCBA_FACEUPLEFT         0x0002\n#define DCBA_FACEUPRIGHT        0x0003\n#define DCBA_FACEDOWNNONE       0x0100\n#define DCBA_FACEDOWNCENTER     0x0101\n#define DCBA_FACEDOWNLEFT       0x0102\n#define DCBA_FACEDOWNRIGHT      0x0103\n\n#define PRINTRATEUNIT_PPM       1\n#define PRINTRATEUNIT_CPS       2\n#define PRINTRATEUNIT_LPM       3\n#define PRINTRATEUNIT_IPM       4\n\n/* Flag returned from Escape QUERYDIBSUPPORT */\n#define\tQDI_SETDIBITS\t\t1\n#define\tQDI_GETDIBITS\t\t2\n#define\tQDI_DIBTOSCREEN\t\t4\n#define\tQDI_STRETCHDIB\t\t8\n\n\n/* GDI Escape commands */\n#define\tNEWFRAME\t\t1\n#define\tABORTDOC\t\t2\n#define\tNEXTBAND\t\t3\n#define\tSETCOLORTABLE\t\t4\n#define\tGETCOLORTABLE\t\t5\n#define\tFLUSHOUTPUT\t\t6\n#define\tDRAFTMODE\t\t7\n#define\tQUERYESCSUPPORT\t\t8\n#define\tSETABORTPROC\t\t9\n#define\tSTARTDOC\t\t10\n#define\tENDDOC\t\t\t11\n#define\tGETPHYSPAGESIZE\t\t12\n#define\tGETPRINTINGOFFSET\t13\n#define\tGETSCALINGFACTOR\t14\n#define\tMFCOMMENT\t\t15\n#define\tGETPENWIDTH\t\t16\n#define\tSETCOPYCOUNT\t\t17\n#define\tSELECTPAPERSOURCE\t18\n#define\tDEVICEDATA\t\t19\n#define\tPASSTHROUGH\t\t19\n#define\tGETTECHNOLGY\t\t20\n#define\tGETTECHNOLOGY\t\t20 /* yes, both of them */\n#define\tSETLINECAP\t\t21\n#define\tSETLINEJOIN\t\t22\n#define\tSETMITERLIMIT\t\t23\n#define\tBANDINFO\t\t24\n#define\tDRAWPATTERNRECT\t\t25\n#define\tGETVECTORPENSIZE\t26\n#define\tGETVECTORBRUSHSIZE\t27\n#define\tENABLEDUPLEX\t\t28\n#define\tGETSETPAPERBINS\t\t29\n#define\tGETSETPRINTORIENT\t30\n#define\tENUMPAPERBINS\t\t31\n#define\tSETDIBSCALING\t\t32\n#define\tEPSPRINTING\t\t33\n#define\tENUMPAPERMETRICS\t34\n#define\tGETSETPAPERMETRICS\t35\n#define\tPOSTSCRIPT_DATA\t\t37\n#define\tPOSTSCRIPT_IGNORE\t38\n#define\tMOUSETRAILS\t\t39\n#define\tGETDEVICEUNITS\t\t42\n\n#define\tGETEXTENDEDTEXTMETRICS\t256\n#define\tGETEXTENTTABLE\t\t257\n#define\tGETPAIRKERNTABLE\t258\n#define\tGETTRACKKERNTABLE\t259\n#define\tEXTTEXTOUT\t\t512\n#define\tGETFACENAME\t\t513\n#define\tDOWNLOADFACE\t\t514\n#define\tENABLERELATIVEWIDTHS\t768\n#define\tENABLEPAIRKERNING\t769\n#define\tSETKERNTRACK\t\t770\n#define\tSETALLJUSTVALUES\t771\n#define\tSETCHARSET\t\t772\n\n#define\tSTRETCHBLT\t\t2048\n#define\tGETSETSCREENPARAMS\t3072\n#define\tQUERYDIBSUPPORT\t\t3073\n#define\tBEGIN_PATH\t\t4096\n#define\tCLIP_TO_PATH\t\t4097\n#define\tEND_PATH\t\t4098\n#define\tEXT_DEVICE_CAPS\t\t4099\n#define\tRESTORE_CTM\t\t4100\n#define\tSAVE_CTM\t\t4101\n#define\tSET_ARC_DIRECTION\t4102\n#define\tSET_BACKGROUND_COLOR\t4103\n#define\tSET_POLY_MODE\t\t4104\n#define\tSET_SCREEN_ANGLE\t4105\n#define\tSET_SPREAD\t\t4106\n#define\tTRANSFORM_CTM\t\t4107\n#define\tSET_CLIP_BOX\t\t4108\n#define\tSET_BOUNDS\t\t4109\n#define\tSET_MIRROR_MODE\t\t4110\n#define\tOPENCHANNEL\t\t4110\n#define\tDOWNLOADHEADER\t\t4111\n#define CLOSECHANNEL\t\t4112\n#define\tPOSTSCRIPT_PASSTHROUGH\t4115\n#define\tENCAPSULATED_POSTSCRIPT\t4116\n#define\tPOSTSCRIPT_IDENTIFY\t4117\n#define\tPOSTSCRIPT_INJECTION\t4118\n#define\tCHECKJPEGFORMAT\t\t4119\n#define\tCHECKPNGFORMAT\t\t4120\n#define\tGET_PS_FEATURESETTING\t4121\n#define\tGDIPLUS_TS_QUERYVER\t4122\n#define\tGDIPLUS_TS_RECORD\t4123\n\n/* for POSTSCRIPT_IDENTIFY */\n#define PSIDENT_GDICENTRIC\t0\n#define PSIDENT_PSCENTRIC\t1\n\n\n#define QDI_SETDIBITS           1\n#define QDI_GETDIBITS           2\n#define QDI_DIBTOSCREEN         4\n#define QDI_STRETCHDIB          8\n\n/* Spooler Error Codes */\n#define\tSP_NOTREPORTED\t0x4000\n#define\tSP_ERROR\t(-1)\n#define\tSP_APPABORT\t(-2)\n#define\tSP_USERABORT\t(-3)\n#define\tSP_OUTOFDISK\t(-4)\n#define\tSP_OUTOFMEMORY\t(-5)\n\n#define PR_JOBSTATUS     0\n\n  /* Raster operations */\n\n#define R2_BLACK         1\n#define R2_NOTMERGEPEN   2\n#define R2_MASKNOTPEN    3\n#define R2_NOTCOPYPEN    4\n#define R2_MASKPENNOT    5\n#define R2_NOT           6\n#define R2_XORPEN        7\n#define R2_NOTMASKPEN    8\n#define R2_MASKPEN       9\n#define R2_NOTXORPEN    10\n#define R2_NOP          11\n#define R2_MERGENOTPEN  12\n#define R2_COPYPEN      13\n#define R2_MERGEPENNOT  14\n#define R2_MERGEPEN     15\n#define R2_WHITE        16\n#define R2_LAST         16\n\n#define MAKEROP4(fore,back) (DWORD)((((back)<<8)&0xFF000000)|(fore))\n\n#define SRCCOPY         0xcc0020\n#define SRCPAINT        0xee0086\n#define SRCAND          0x8800c6\n#define SRCINVERT       0x660046\n#define SRCERASE        0x440328\n#define NOTSRCCOPY      0x330008\n#define NOTSRCERASE     0x1100a6\n#define MERGECOPY       0xc000ca\n#define MERGEPAINT      0xbb0226\n#define PATCOPY         0xf00021\n#define PATPAINT        0xfb0a09\n#define PATINVERT       0x5a0049\n#define DSTINVERT       0x550009\n#define BLACKNESS       0x000042\n#define WHITENESS       0xff0062\n\n  /* StretchBlt() modes */\n#define BLACKONWHITE         1\n#define WHITEONBLACK         2\n#define COLORONCOLOR\t     3\n#define HALFTONE             4\n#define MAXSTRETCHBLTMODE    4\n\n#define STRETCH_ANDSCANS     BLACKONWHITE\n#define STRETCH_ORSCANS      WHITEONBLACK\n#define STRETCH_DELETESCANS  COLORONCOLOR\n#define STRETCH_HALFTONE     HALFTONE\n\n  /* Colors */\n\n#define RGB(r,g,b)          ((COLORREF)((BYTE)(r) | ((BYTE)(g) << 8) | ((BYTE)(b) << 16)))\n#define PALETTERGB(r,g,b)   (0x02000000 | RGB(r,g,b))\n#define PALETTEINDEX(i)     ((COLORREF)(0x01000000 | (WORD)(i)))\n\n#define GetRValue(rgb)      ((BYTE)  (rgb) )\n#define GetGValue(rgb)      ((BYTE) ((rgb) >> 8))\n#define GetBValue(rgb)      ((BYTE) ((rgb) >> 16))\n\n#define GetKValue(cmyk)     ((BYTE)  (cmyk) )\n#define GetYValue(cmyk)     ((BYTE) ((cmyk) >> 8))\n#define GetMValue(cmyk)     ((BYTE) ((cmyk) >> 16))\n#define GetCValue(cmyk)     ((BYTE) ((cmyk) >> 24))\n\n#define CMYK(c,m,y,k)       ((COLORREF)((((BYTE)(k)|((WORD)((BYTE)(y))<<8))|(((DWORD)(BYTE)(m))<<16))|(((DWORD)(BYTE)(c))<<24)))\n\n/* ICM stuff */\ntypedef INT (CALLBACK *ICMENUMPROCA)(LPSTR lpszFilename,LPARAM lParam);\ntypedef INT (CALLBACK *ICMENUMPROCW)(LPWSTR lpszFilename,LPARAM lParam);\nDECL_WINELIB_TYPE_AW(ICMENUMPROC)\n\n\n#define ICM_OFF   1\n#define ICM_ON    2\n#define ICM_QUERY 3\n\n  /* Bounds Accumulation APIs */\n#define DCB_RESET       0x0001\n#define DCB_ACCUMULATE  0x0002\n#define DCB_DIRTY       DCB_ACCUMULATE\n#define DCB_SET         (DCB_RESET | DCB_ACCUMULATE)\n#define DCB_ENABLE      0x0004\n#define DCB_DISABLE     0x0008\n\ntypedef struct\n{\n    LONG paXCount;\n    LONG paYCount;\n    LONG paXExt;\n    LONG paYExt;\n    BYTE paRGBs;\n} PELARRAY, *PPELARRAY, *LPPELARRAY;\n\n  /* Bitmaps */\n\ntypedef struct\n{\n    INT  bmType;\n    INT  bmWidth;\n    INT  bmHeight;\n    INT  bmWidthBytes;\n    WORD   bmPlanes;\n    WORD   bmBitsPixel;\n    LPVOID bmBits;\n} BITMAP, *PBITMAP, *LPBITMAP;\n\n\n  /* Brushes */\n\ntypedef struct\n{\n    UINT       lbStyle;\n    COLORREF   lbColor;\n    ULONG_PTR  lbHatch;\n} LOGBRUSH, *PLOGBRUSH, *LPLOGBRUSH;\n\ntypedef struct\n{\n    UINT       lbStyle;\n    COLORREF   lbColor;\n    ULONG      lbHatch;\n} LOGBRUSH32, *PLOGBRUSH32, *LPLOGBRUSH32;\n\ntypedef LOGBRUSH PATTERN, *PPATTERN, *LPPATTERN;\n\n\n  /* Brush styles */\n#define BS_SOLID\t    0\n#define BS_NULL\t\t    1\n#define BS_HOLLOW\t    1\n#define BS_HATCHED\t    2\n#define BS_PATTERN\t    3\n#define BS_INDEXED\t    4\n#define\tBS_DIBPATTERN\t    5\n#define\tBS_DIBPATTERNPT\t    6\n#define BS_PATTERN8X8\t    7\n#define\tBS_DIBPATTERN8X8    8\n#define BS_MONOPATTERN      9\n\n  /* Hatch styles */\n#define HS_HORIZONTAL       0\n#define HS_VERTICAL         1\n#define HS_FDIAGONAL        2\n#define HS_BDIAGONAL        3\n#define HS_CROSS            4\n#define HS_DIAGCROSS        5\n#define HS_API_MAX          12\n\n  /* Fonts */\n\n#define LF_FACESIZE     32\n#define LF_FULLFACESIZE 64\n\n#define RASTER_FONTTYPE     0x0001\n#define DEVICE_FONTTYPE     0x0002\n#define TRUETYPE_FONTTYPE   0x0004\n\ntypedef struct tagLOGFONTA\n{\n    LONG   lfHeight;\n    LONG   lfWidth;\n    LONG   lfEscapement;\n    LONG   lfOrientation;\n    LONG   lfWeight;\n    BYTE   lfItalic;\n    BYTE   lfUnderline;\n    BYTE   lfStrikeOut;\n    BYTE   lfCharSet;\n    BYTE   lfOutPrecision;\n    BYTE   lfClipPrecision;\n    BYTE   lfQuality;\n    BYTE   lfPitchAndFamily;\n    CHAR   lfFaceName[LF_FACESIZE];\n} LOGFONTA, *PLOGFONTA, *LPLOGFONTA;\n\ntypedef struct tagLOGFONTW\n{\n    LONG   lfHeight;\n    LONG   lfWidth;\n    LONG   lfEscapement;\n    LONG   lfOrientation;\n    LONG   lfWeight;\n    BYTE   lfItalic;\n    BYTE   lfUnderline;\n    BYTE   lfStrikeOut;\n    BYTE   lfCharSet;\n    BYTE   lfOutPrecision;\n    BYTE   lfClipPrecision;\n    BYTE   lfQuality;\n    BYTE   lfPitchAndFamily;\n    WCHAR  lfFaceName[LF_FACESIZE];\n} LOGFONTW, *PLOGFONTW, *LPLOGFONTW;\n\nDECL_WINELIB_TYPE_AW(LOGFONT)\nDECL_WINELIB_TYPE_AW(PLOGFONT)\nDECL_WINELIB_TYPE_AW(LPLOGFONT)\n\ntypedef struct\n{\n  LOGFONTA elfLogFont;\n  BYTE       elfFullName[LF_FULLFACESIZE];\n  BYTE       elfStyle[LF_FACESIZE];\n} ENUMLOGFONTA, *LPENUMLOGFONTA;\n\ntypedef struct\n{\n  LOGFONTW elfLogFont;\n  WCHAR      elfFullName[LF_FULLFACESIZE];\n  WCHAR      elfStyle[LF_FACESIZE];\n} ENUMLOGFONTW, *LPENUMLOGFONTW;\n\nDECL_WINELIB_TYPE_AW(ENUMLOGFONT)\nDECL_WINELIB_TYPE_AW(LPENUMLOGFONT)\n\ntypedef struct\n{\n  LOGFONTA elfLogFont;\n  BYTE       elfFullName[LF_FULLFACESIZE];\n  BYTE       elfStyle[LF_FACESIZE];\n  BYTE       elfScript[LF_FACESIZE];\n} ENUMLOGFONTEXA,*LPENUMLOGFONTEXA;\n\ntypedef struct\n{\n  LOGFONTW elfLogFont;\n  WCHAR      elfFullName[LF_FULLFACESIZE];\n  WCHAR      elfStyle[LF_FACESIZE];\n  WCHAR      elfScript[LF_FACESIZE];\n} ENUMLOGFONTEXW,*LPENUMLOGFONTEXW;\n\nDECL_WINELIB_TYPE_AW(ENUMLOGFONTEX)\nDECL_WINELIB_TYPE_AW(LPENUMLOGFONTEX)\n\n#define MM_MAX_NUMAXES    16\n\ntypedef struct\n{\n  DWORD      dvReserved;\n  DWORD      dvNumAxes;\n  LONG       dvValues[MM_MAX_NUMAXES];\n} DESIGNVECTOR, *PDESIGNVECTOR;\n\ntypedef struct\n{\n  ENUMLOGFONTEXA    elfEnumLogfontEx;\n  DESIGNVECTOR      elfDesignVector;\n} ENUMLOGFONTEXDVA, *PENUMLOGFONTEXDVA;\n\ntypedef struct\n{\n  ENUMLOGFONTEXW    elfEnumLogfontEx;\n  DESIGNVECTOR      elfDesignVector;\n} ENUMLOGFONTEXDVW, *PENUMLOGFONTEXDVW;\n\nDECL_WINELIB_TYPE_AW(ENUMLOGFONTEXDV)\nDECL_WINELIB_TYPE_AW(PENUMLOGFONTEXDV)\n\n/*\n * The FONTSIGNATURE tells which Unicode ranges and which code pages\n * have glyphs in a font.\n *\n * fsUsb  128-bit bitmap. The most significant bits are 10 (magic number).\n *        The remaining 126 bits map the Unicode ISO 10646 subranges\n *        for which the font provides glyphs.\n *\n * fsCsb  64-bit bitmap. The low 32 bits map the Windows codepages for\n *        which the font provides glyphs. The high 32 bits are for\n *        non Windows codepages.\n */\ntypedef struct\n{\n  DWORD fsUsb[4];\n  DWORD fsCsb[2];\n} FONTSIGNATURE, *PFONTSIGNATURE, *LPFONTSIGNATURE;\n\ntypedef struct\n{\n  UINT\tciCharset; /* character set */\n  UINT\tciACP; /* ANSI code page */\n  FONTSIGNATURE\tfs;\n} CHARSETINFO, *PCHARSETINFO, *LPCHARSETINFO;\n\n/* Flags for TranslateCharsetInfo */\n#define TCI_SRCCHARSET    1\n#define TCI_SRCCODEPAGE   2\n#define TCI_SRCFONTSIG    3\n\ntypedef struct\n{\n    DWORD lsUsb[4];\n    DWORD lsCsbDefault[2];\n    DWORD lsCsbSupported[2];\n} LOCALESIGNATURE, *PLOCALESIGNATURE, *LPLOCALESIGNATURE;\n\n\n/* Flags for ModifyWorldTransform */\n#define MWT_IDENTITY      1\n#define MWT_LEFTMULTIPLY  2\n#define MWT_RIGHTMULTIPLY 3\n#define MWT_MIN           MWT_IDENTITY\n#define MWT_MAX           MWT_RIGHTMULTIPLY\n\n/* Object Definitions for EnumObjects() */\n#define OBJ_PEN             1\n#define OBJ_BRUSH           2\n#define OBJ_DC              3\n#define OBJ_METADC          4\n#define OBJ_PAL             5\n#define OBJ_FONT            6\n#define OBJ_BITMAP          7\n#define OBJ_REGION          8\n#define OBJ_METAFILE        9\n#define OBJ_MEMDC           10\n#define OBJ_EXTPEN          11\n#define OBJ_ENHMETADC       12\n#define OBJ_ENHMETAFILE     13\n#define OBJ_COLORSPACE      14\n\ntypedef struct tagXFORM\n{\n    FLOAT  eM11;\n    FLOAT  eM12;\n    FLOAT  eM21;\n    FLOAT  eM22;\n    FLOAT  eDx;\n    FLOAT  eDy;\n} XFORM, *PXFORM, *LPXFORM;\n\n  /* lfWeight values */\n#define FW_DONTCARE\t    0\n#define FW_THIN \t    100\n#define FW_EXTRALIGHT\t    200\n#define FW_ULTRALIGHT\t    200\n#define FW_LIGHT\t    300\n#define FW_NORMAL\t    400\n#define FW_REGULAR\t    400\n#define FW_MEDIUM\t    500\n#define FW_SEMIBOLD\t    600\n#define FW_DEMIBOLD\t    600\n#define FW_BOLD \t    700\n#define FW_EXTRABOLD\t    800\n#define FW_ULTRABOLD\t    800\n#define FW_HEAVY\t    900\n#define FW_BLACK\t    900\n\n  /* lfCharSet values */\n#define ANSI_CHARSET\t      (BYTE)0   /* CP1252, ansi-0, iso8859-{1,15} */\n#define DEFAULT_CHARSET       (BYTE)1\n#define SYMBOL_CHARSET\t      (BYTE)2\n#define SHIFTJIS_CHARSET      (BYTE)128 /* CP932 */\n#define HANGEUL_CHARSET       (BYTE)129 /* CP949, ksc5601.1987-0 */\n#define HANGUL_CHARSET        HANGEUL_CHARSET\n#define GB2312_CHARSET        (BYTE)134 /* CP936, gb2312.1980-0 */\n#define CHINESEBIG5_CHARSET   (BYTE)136 /* CP950, big5.et-0 */\n#define GREEK_CHARSET         (BYTE)161\t/* CP1253 */\n#define TURKISH_CHARSET       (BYTE)162\t/* CP1254, -iso8859-9 */\n#define HEBREW_CHARSET        (BYTE)177\t/* CP1255, -iso8859-8 */\n#define ARABIC_CHARSET        (BYTE)178\t/* CP1256, -iso8859-6 */\n#define BALTIC_CHARSET        (BYTE)186\t/* CP1257, -iso8859-13 */\n#define VIETNAMESE_CHARSET    (BYTE)163 /* CP1258 */\n#define RUSSIAN_CHARSET       (BYTE)204\t/* CP1251, -iso8859-5 */\n#define EE_CHARSET\t      (BYTE)238\t/* CP1250, -iso8859-2 */\n#define EASTEUROPE_CHARSET    EE_CHARSET\n#define THAI_CHARSET\t      (BYTE)222 /* CP874, iso8859-11, tis620 */\n#define JOHAB_CHARSET         (BYTE)130 /* korean (johab) CP1361 */\n#define MAC_CHARSET           (BYTE)77\n#define OEM_CHARSET\t      (BYTE)255\n/* I don't know if the values of *_CHARSET macros are defined in Windows\n * or if we can choose them as we want. -- srtxg\n */\n#define VISCII_CHARSET        (BYTE)240 /* viscii1.1-1 */\n#define TCVN_CHARSET          (BYTE)241 /* tcvn-0 */\n#define KOI8_CHARSET          (BYTE)242 /* koi8-{r,u,ru} */\n#define ISO3_CHARSET          (BYTE)243 /* iso8859-3 */\n#define ISO4_CHARSET          (BYTE)244 /* iso8859-4 */\n#define ISO10_CHARSET         (BYTE)245 /* iso8859-10 */\n#define CELTIC_CHARSET        (BYTE)246 /* iso8859-14 */\n\n#define FS_LATIN1              __MSABI_LONG(0x00000001)\n#define FS_LATIN2              __MSABI_LONG(0x00000002)\n#define FS_CYRILLIC            __MSABI_LONG(0x00000004)\n#define FS_GREEK               __MSABI_LONG(0x00000008)\n#define FS_TURKISH             __MSABI_LONG(0x00000010)\n#define FS_HEBREW              __MSABI_LONG(0x00000020)\n#define FS_ARABIC              __MSABI_LONG(0x00000040)\n#define FS_BALTIC              __MSABI_LONG(0x00000080)\n#define FS_VIETNAMESE          __MSABI_LONG(0x00000100)\n#define FS_THAI                __MSABI_LONG(0x00010000)\n#define FS_JISJAPAN            __MSABI_LONG(0x00020000)\n#define FS_CHINESESIMP         __MSABI_LONG(0x00040000)\n#define FS_WANSUNG             __MSABI_LONG(0x00080000)\n#define FS_CHINESETRAD         __MSABI_LONG(0x00100000)\n#define FS_JOHAB               __MSABI_LONG(0x00200000)\n#define FS_SYMBOL              __MSABI_LONG(0x80000000)\n\n  /* lfOutPrecision values */\n#define OUT_DEFAULT_PRECIS           0\n#define OUT_STRING_PRECIS            1\n#define OUT_CHARACTER_PRECIS         2\n#define OUT_STROKE_PRECIS            3\n#define OUT_TT_PRECIS                4\n#define OUT_DEVICE_PRECIS            5\n#define OUT_RASTER_PRECIS            6\n#define OUT_TT_ONLY_PRECIS           7\n#define OUT_OUTLINE_PRECIS           8\n#define OUT_SCREEN_OUTLINE_PRECIS    9\n#define OUT_PS_ONLY_PRECIS           10\n\n  /* lfClipPrecision values */\n#define CLIP_DEFAULT_PRECIS     0x00\n#define CLIP_CHARACTER_PRECIS   0x01\n#define CLIP_STROKE_PRECIS      0x02\n#define CLIP_MASK               0x0F\n#define CLIP_LH_ANGLES          0x10\n#define CLIP_TT_ALWAYS          0x20\n#define CLIP_DFA_DISABLE        0x40\n#define CLIP_EMBEDDED           0x80\n\n  /* lfQuality values */\n#define DEFAULT_QUALITY            0\n#define DRAFT_QUALITY              1\n#define PROOF_QUALITY              2\n#define NONANTIALIASED_QUALITY     3\n#define ANTIALIASED_QUALITY        4\n#define CLEARTYPE_QUALITY          5\n#define CLEARTYPE_NATURAL_QUALITY  6\n\n  /* lfPitchAndFamily pitch values */\n#define DEFAULT_PITCH       0x00\n#define FIXED_PITCH         0x01\n#define VARIABLE_PITCH      0x02\n#define MONO_FONT           0x08\n\n#define FF_DONTCARE         0x00\n#define FF_ROMAN            0x10\n#define FF_SWISS            0x20\n#define FF_MODERN           0x30\n#define FF_SCRIPT           0x40\n#define FF_DECORATIVE       0x50\n\n#ifndef _TEXTMETRIC_DEFINED\n#define _TEXTMETRIC_DEFINED\n\ntypedef struct tagTEXTMETRICA\n{\n    LONG      tmHeight;\n    LONG      tmAscent;\n    LONG      tmDescent;\n    LONG      tmInternalLeading;\n    LONG      tmExternalLeading;\n    LONG      tmAveCharWidth;\n    LONG      tmMaxCharWidth;\n    LONG      tmWeight;\n    LONG      tmOverhang;\n    LONG      tmDigitizedAspectX;\n    LONG      tmDigitizedAspectY;\n    BYTE      tmFirstChar;\n    BYTE      tmLastChar;\n    BYTE      tmDefaultChar;\n    BYTE      tmBreakChar;\n    BYTE      tmItalic;\n    BYTE      tmUnderlined;\n    BYTE      tmStruckOut;\n    BYTE      tmPitchAndFamily;\n    BYTE      tmCharSet;\n} TEXTMETRICA, *LPTEXTMETRICA, *PTEXTMETRICA;\n\ntypedef struct tagTEXTMETRICW\n{\n    LONG      tmHeight;\n    LONG      tmAscent;\n    LONG      tmDescent;\n    LONG      tmInternalLeading;\n    LONG      tmExternalLeading;\n    LONG      tmAveCharWidth;\n    LONG      tmMaxCharWidth;\n    LONG      tmWeight;\n    LONG      tmOverhang;\n    LONG      tmDigitizedAspectX;\n    LONG      tmDigitizedAspectY;\n    WCHAR     tmFirstChar;\n    WCHAR     tmLastChar;\n    WCHAR     tmDefaultChar;\n    WCHAR     tmBreakChar;\n    BYTE      tmItalic;\n    BYTE      tmUnderlined;\n    BYTE      tmStruckOut;\n    BYTE      tmPitchAndFamily;\n    BYTE      tmCharSet;\n} TEXTMETRICW, *LPTEXTMETRICW, *PTEXTMETRICW;\n\nDECL_WINELIB_TYPE_AW(TEXTMETRIC)\nDECL_WINELIB_TYPE_AW(PTEXTMETRIC)\nDECL_WINELIB_TYPE_AW(LPTEXTMETRIC)\n#endif /* _TEXTMETRIC_DEFINED */\n\n\ntypedef struct tagPANOSE\n{\n    BYTE bFamilyType;\n    BYTE bSerifStyle;\n    BYTE bWeight;\n    BYTE bProportion;\n    BYTE bContrast;\n    BYTE bStrokeVariation;\n    BYTE bArmStyle;\n    BYTE bLetterform;\n    BYTE bMidline;\n    BYTE bXHeight;\n} PANOSE, *LPPANOSE;\n\n#define PANOSE_COUNT                   10\n\n#define PAN_FAMILYTYPE_INDEX           0\n#define PAN_SERIFSTYLE_INDEX           1\n#define PAN_WEIGHT_INDEX               2\n#define PAN_PROPORTION_INDEX           3\n#define PAN_CONTRAST_INDEX             4\n#define PAN_STROKEVARIATION_INDEX      5\n#define PAN_ARMSTYLE_INDEX             6\n#define PAN_LETTERFORM_INDEX           7\n#define PAN_MIDLINE_INDEX              8\n#define PAN_XHEIGHT_INDEX              9\n\n#define PAN_CULTURE_LATIN              0\n\n#define PAN_ANY                        0\n#define PAN_NO_FIT                     1\n\n#define PAN_FAMILY_TEXT_DISPLAY        2\n#define PAN_FAMILY_SCRIPT              3\n#define PAN_FAMILY_DECORATIVE          4\n#define PAN_FAMILY_PICTORIAL           5\n\n#define PAN_SERIF_COVE                 2\n#define PAN_SERIF_OBTUSE_COVE          3\n#define PAN_SERIF_SQUARE_COVE          4\n#define PAN_SERIF_OBTUSE_SQUARE_COVE   5\n#define PAN_SERIF_SQUARE               6\n#define PAN_SERIF_THIN                 7\n#define PAN_SERIF_BONE                 8\n#define PAN_SERIF_EXAGGERATED          9\n#define PAN_SERIF_TRIANGLE             10\n#define PAN_SERIF_NORMAL_SANS          11\n#define PAN_SERIF_OBTUSE_SANS          12\n#define PAN_SERIF_PERP_SANS            13\n#define PAN_SERIF_FLARED               14\n#define PAN_SERIF_ROUNDED              15\n\n#define PAN_WEIGHT_VERY_LIGHT          2\n#define PAN_WEIGHT_LIGHT               3\n#define PAN_WEIGHT_THIN                4\n#define PAN_WEIGHT_BOOK                5\n#define PAN_WEIGHT_MEDIUM              6\n#define PAN_WEIGHT_DEMI                7\n#define PAN_WEIGHT_BOLD                8\n#define PAN_WEIGHT_HEAVY               9\n#define PAN_WEIGHT_BLACK               10\n#define PAN_WEIGHT_NORD                11\n\n#define PAN_PROP_OLD_STYLE             2\n#define PAN_PROP_MODERN                3\n#define PAN_PROP_EVEN_WIDTH            4\n#define PAN_PROP_EXPANDED              5\n#define PAN_PROP_CONDENSED             6\n#define PAN_PROP_VERY_EXPANDED         7\n#define PAN_PROP_VERY_CONDENSED        8\n#define PAN_PROP_MONOSPACED            9\n\n#define PAN_CONTRAST_NONE              2\n#define PAN_CONTRAST_VERY_LOW          3\n#define PAN_CONTRAST_LOW               4\n#define PAN_CONTRAST_MEDIUM_LOW        5\n#define PAN_CONTRAST_MEDIUM            6\n#define PAN_CONTRAST_MEDIUM_HIGH       7\n#define PAN_CONTRAST_HIGH              8\n#define PAN_CONTRAST_VERY_HIGH         9\n\n#define PAN_STROKE_GRADUAL_DIAG        2\n#define PAN_STROKE_GRADUAL_TRAN        3\n#define PAN_STROKE_GRADUAL_VERT        4\n#define PAN_STROKE_GRADUAL_HORZ        5\n#define PAN_STROKE_RAPID_VERT          6\n#define PAN_STROKE_RAPID_HORZ          7\n#define PAN_STROKE_INSTANT_VERT        8\n\n#define PAN_STRAIGHT_ARMS_HORZ         2\n#define PAN_STRAIGHT_ARMS_WEDGE        3\n#define PAN_STRAIGHT_ARMS_VERT         4\n#define PAN_STRAIGHT_ARMS_SINGLE_SERIF 5\n#define PAN_STRAIGHT_ARMS_DOUBLE_SERIF 6\n#define PAN_BENT_ARMS_HORZ             7\n#define PAN_BENT_ARMS_WEDGE            8\n#define PAN_BENT_ARMS_VERT             9\n#define PAN_BENT_ARMS_SINGLE_SERIF     10\n#define PAN_BENT_ARMS_DOUBLE_SERIF     11\n\n#define PAN_LETT_NORMAL_COMPACT        2\n#define PAN_LETT_NORMAL_WEIGHTED       3\n#define PAN_LETT_NORMAL_BOXED          4\n#define PAN_LETT_NORMAL_FLATTENED      5\n#define PAN_LETT_NORMAL_ROUNDED        6\n#define PAN_LETT_NORMAL_OFF_CENTER     7\n#define PAN_LETT_NORMAL_SQUARE         8\n#define PAN_LETT_OBLIQUE_COMPACT       9\n#define PAN_LETT_OBLIQUE_WEIGHTED      10\n#define PAN_LETT_OBLIQUE_BOXED         11\n#define PAN_LETT_OBLIQUE_FLATTENED     12\n#define PAN_LETT_OBLIQUE_ROUNDED       13\n#define PAN_LETT_OBLIQUE_OFF_CENTER    14\n#define PAN_LETT_OBLIQUE_SQUARE        15\n\n#define PAN_MIDLINE_STANDARD_TRIMMED   2\n#define PAN_MIDLINE_STANDARD_POINTED   3\n#define PAN_MIDLINE_STANDARD_SERIFED   4\n#define PAN_MIDLINE_HIGH_TRIMMED       5\n#define PAN_MIDLINE_HIGH_POINTED       6\n#define PAN_MIDLINE_HIGH_SERIFED       7\n#define PAN_MIDLINE_CONSTANT_TRIMMED   8\n#define PAN_MIDLINE_CONSTANT_POINTED   9\n#define PAN_MIDLINE_CONSTANT_SERIFED   10\n#define PAN_MIDLINE_LOW_TRIMMED        11\n#define PAN_MIDLINE_LOW_POINTED        12\n#define PAN_MIDLINE_LOW_SERIFED        13\n\n#define PAN_XHEIGHT_CONSTANT_SMALL     2\n#define PAN_XHEIGHT_CONSTANT_STANDARD  3\n#define PAN_XHEIGHT_CONSTANT_LARGE     4\n#define PAN_XHEIGHT_DUCKING_SMALL      5\n#define PAN_XHEIGHT_DUCKING_STANDARD   6\n#define PAN_XHEIGHT_DUCKING_LARGE      7\n\n#define ELF_VENDOR_SIZE 4\ntypedef struct\n{\n  LOGFONTA    elfLogFont;\n  BYTE        elfFullName[LF_FULLFACESIZE];\n  BYTE        elfStyle[LF_FACESIZE];\n  DWORD       elfVersion;\n  DWORD       elfStyleSize;\n  DWORD       elfMatch;\n  DWORD       elfReserved;\n  BYTE        elfVendorId[ELF_VENDOR_SIZE];\n  DWORD       elfCulture;\n  PANOSE      elfPanose;\n} EXTLOGFONTA, *PEXTLOGFONTA, *LPEXTLOGFONTA;\n\ntypedef struct\n{\n  LOGFONTW    elfLogFont;\n  WCHAR       elfFullName[LF_FULLFACESIZE];\n  WCHAR       elfStyle[LF_FACESIZE];\n  DWORD       elfVersion;\n  DWORD       elfStyleSize;\n  DWORD       elfMatch;\n  DWORD       elfReserved;\n  BYTE        elfVendorId[ELF_VENDOR_SIZE];\n  DWORD       elfCulture;\n  PANOSE      elfPanose;\n} EXTLOGFONTW, *PEXTLOGFONTW, *LPEXTLOGFONTW;\n\nDECL_WINELIB_TYPE_AW(EXTLOGFONT)\nDECL_WINELIB_TYPE_AW(PEXTLOGFONT)\nDECL_WINELIB_TYPE_AW(LPEXTLOGFONT)\n\n#define ELF_VERSION         0\n#define ELF_CULTURE_LATIN   0\n\ntypedef struct _OUTLINETEXTMETRICA\n{\n    UINT          otmSize;\n    TEXTMETRICA   otmTextMetrics;\n    BYTE            otmFiller;\n    PANOSE          otmPanoseNumber;\n    UINT          otmfsSelection;\n    UINT          otmfsType;\n    INT           otmsCharSlopeRise;\n    INT           otmsCharSlopeRun;\n    INT           otmItalicAngle;\n    UINT          otmEMSquare;\n    INT           otmAscent;\n    INT           otmDescent;\n    UINT          otmLineGap;\n    UINT          otmsCapEmHeight;\n    UINT          otmsXHeight;\n    RECT          otmrcFontBox;\n    INT           otmMacAscent;\n    INT           otmMacDescent;\n    UINT          otmMacLineGap;\n    UINT          otmusMinimumPPEM;\n    POINT         otmptSubscriptSize;\n    POINT         otmptSubscriptOffset;\n    POINT         otmptSuperscriptSize;\n    POINT         otmptSuperscriptOffset;\n    UINT          otmsStrikeoutSize;\n    INT           otmsStrikeoutPosition;\n    INT           otmsUnderscoreSize;\n    INT           otmsUnderscorePosition;\n    LPSTR           otmpFamilyName;\n    LPSTR           otmpFaceName;\n    LPSTR           otmpStyleName;\n    LPSTR           otmpFullName;\n} OUTLINETEXTMETRICA, *POUTLINETEXTMETRICA, *LPOUTLINETEXTMETRICA;\n\ntypedef struct _OUTLINETEXTMETRICW\n{\n    UINT          otmSize;\n    TEXTMETRICW   otmTextMetrics;\n    BYTE            otmFiller;\n    PANOSE          otmPanoseNumber;\n    UINT          otmfsSelection;\n    UINT          otmfsType;\n    INT           otmsCharSlopeRise;\n    INT           otmsCharSlopeRun;\n    INT           otmItalicAngle;\n    UINT          otmEMSquare;\n    INT           otmAscent;\n    INT           otmDescent;\n    UINT          otmLineGap;\n    UINT          otmsCapEmHeight;\n    UINT          otmsXHeight;\n    RECT          otmrcFontBox;\n    INT           otmMacAscent;\n    INT           otmMacDescent;\n    UINT          otmMacLineGap;\n    UINT          otmusMinimumPPEM;\n    POINT         otmptSubscriptSize;\n    POINT         otmptSubscriptOffset;\n    POINT         otmptSuperscriptSize;\n    POINT         otmptSuperscriptOffset;\n    UINT          otmsStrikeoutSize;\n    INT           otmsStrikeoutPosition;\n    INT           otmsUnderscoreSize;\n    INT           otmsUnderscorePosition;\n    LPSTR           otmpFamilyName;\n    LPSTR           otmpFaceName;\n    LPSTR           otmpStyleName;\n    LPSTR           otmpFullName;\n} OUTLINETEXTMETRICW, *POUTLINETEXTMETRICW, *LPOUTLINETEXTMETRICW;\n\nDECL_WINELIB_TYPE_AW(OUTLINETEXTMETRIC)\nDECL_WINELIB_TYPE_AW(POUTLINETEXTMETRIC)\nDECL_WINELIB_TYPE_AW(LPOUTLINETEXTMETRIC)\n\ntypedef struct\n{\n    INT       x;\n    INT       y;\n    UINT      n;\n    LPCSTR    lpstr;\n    UINT      uiFlags;\n    RECT      rcl;\n    INT       *pdx;\n} POLYTEXTA, *PPOLYTEXTA, *LPPOLYTEXTA;\n\ntypedef struct\n{\n    INT       x;\n    INT       y;\n    UINT      n;\n    LPCWSTR   lpstr;\n    UINT      uiFlags;\n    RECT      rcl;\n    INT       *pdx;\n} POLYTEXTW, *PPOLYTEXTW, *LPPOLYTEXTW;\n\nDECL_WINELIB_TYPE_AW(POLYTEXT)\nDECL_WINELIB_TYPE_AW(PPOLYTEXT)\nDECL_WINELIB_TYPE_AW(LPPOLYTEXT)\n\n\n/* ntmFlags field flags */\n#define NTM_REGULAR     __MSABI_LONG(0x00000040)\n#define NTM_BOLD        __MSABI_LONG(0x00000020)\n#define NTM_ITALIC      __MSABI_LONG(0x00000001)\n\n#define NTM_NONNEGATIVE_AC  0x00010000\n#define NTM_PS_OPENTYPE     0x00020000\n#define NTM_TT_OPENTYPE     0x00040000\n#define NTM_MULTIPLEMASTER  0x00080000\n#define NTM_TYPE1           0x00100000\n#define NTM_DSIG            0x00200000\n\n\ntypedef struct\n{\n    LONG      tmHeight;\n    LONG      tmAscent;\n    LONG      tmDescent;\n    LONG      tmInternalLeading;\n    LONG      tmExternalLeading;\n    LONG      tmAveCharWidth;\n    LONG      tmMaxCharWidth;\n    LONG      tmWeight;\n    LONG      tmOverhang;\n    LONG      tmDigitizedAspectX;\n    LONG      tmDigitizedAspectY;\n    BYTE      tmFirstChar;\n    BYTE      tmLastChar;\n    BYTE      tmDefaultChar;\n    BYTE      tmBreakChar;\n    BYTE      tmItalic;\n    BYTE      tmUnderlined;\n    BYTE      tmStruckOut;\n    BYTE      tmPitchAndFamily;\n    BYTE      tmCharSet;\n    DWORD     ntmFlags;\n    UINT    ntmSizeEM;\n    UINT    ntmCellHeight;\n    UINT    ntmAvgWidth;\n} NEWTEXTMETRICA, *PNEWTEXTMETRICA, *LPNEWTEXTMETRICA;\n\ntypedef struct\n{\n    LONG      tmHeight;\n    LONG      tmAscent;\n    LONG      tmDescent;\n    LONG      tmInternalLeading;\n    LONG      tmExternalLeading;\n    LONG      tmAveCharWidth;\n    LONG      tmMaxCharWidth;\n    LONG      tmWeight;\n    LONG      tmOverhang;\n    LONG      tmDigitizedAspectX;\n    LONG      tmDigitizedAspectY;\n    WCHAR     tmFirstChar;\n    WCHAR     tmLastChar;\n    WCHAR     tmDefaultChar;\n    WCHAR     tmBreakChar;\n    BYTE      tmItalic;\n    BYTE      tmUnderlined;\n    BYTE      tmStruckOut;\n    BYTE      tmPitchAndFamily;\n    BYTE      tmCharSet;\n    DWORD     ntmFlags;\n    UINT      ntmSizeEM;\n    UINT      ntmCellHeight;\n    UINT      ntmAvgWidth;\n} NEWTEXTMETRICW, *PNEWTEXTMETRICW, *LPNEWTEXTMETRICW;\n\nDECL_WINELIB_TYPE_AW(NEWTEXTMETRIC)\nDECL_WINELIB_TYPE_AW(PNEWTEXTMETRIC)\nDECL_WINELIB_TYPE_AW(LPNEWTEXTMETRIC)\n\ntypedef struct\n{\n    NEWTEXTMETRICA\tntmTm;\n    FONTSIGNATURE       ntmFontSig;\n} NEWTEXTMETRICEXA;\n\ntypedef struct\n{\n    NEWTEXTMETRICW\tntmTm;\n    FONTSIGNATURE       ntmFontSig;\n} NEWTEXTMETRICEXW;\n\nDECL_WINELIB_TYPE_AW(NEWTEXTMETRICEX)\n\n#if defined(STRICT)\n\n#if !defined(NOTEXTMETRIC)\ntypedef int (CALLBACK *OLDFONTENUMPROCA)(const LOGFONTA *, const TEXTMETRICA *, DWORD, LPARAM);\ntypedef int (CALLBACK *OLDFONTENUMPROCW)(const LOGFONTW *, const TEXTMETRICW *, DWORD, LPARAM);\n#else /* !defined(NOTEXTMETRIC) */\ntypedef int (CALLBACK *OLDFONTENUMPROCA)(const LOGFONTA *, const VOID *, DWORD, LPARAM);\ntypedef int (CALLBACK *OLDFONTENUMPROCW)(const LOGFONTW *, const VOID *, DWORD, LPARAM);\n#endif /* !defined(NOTEXTMETRIC) */\nDECL_WINELIB_TYPE_AW(OLDFONTENUMPROC)\n\ntypedef OLDFONTENUMPROCA FONTENUMPROCA;\ntypedef OLDFONTENUMPROCW FONTENUMPROCW;\nDECL_WINELIB_TYPE_AW(FONTENUMPROC)\n\ntypedef INT (CALLBACK *GOBJENUMPROC)(LPVOID, LPARAM);\ntypedef VOID (CALLBACK *LINEDDAPROC)(INT, INT, LPARAM);\n\n#else /* defined(STRICT) */\n\ntypedef FARPROC OLDFONTENUMPROC;\n\ntypedef FARPROC FONTENUMPROCA;\ntypedef FARPROC FONTENUMPROCW;\nDECL_WINELIB_TYPE_AW(FONTENUMPROC)\n\ntypedef FARPROC GOBJENUMPROC;\ntypedef FARPROC LINEDDAPROC;\n\n#endif /* defined(STRICT) */\n\n  /* tmPitchAndFamily bits */\n#define TMPF_FIXED_PITCH    1\t\t/* means variable pitch */\n#define TMPF_VECTOR\t    2\n#define TMPF_TRUETYPE\t    4\n#define TMPF_DEVICE\t    8\n\n  /* Text alignment */\n#define TA_NOUPDATECP       0x00\n#define TA_UPDATECP         0x01\n#define TA_LEFT             0x00\n#define TA_RIGHT            0x02\n#define TA_CENTER           0x06\n#define TA_TOP              0x00\n#define TA_BOTTOM           0x08\n#define TA_BASELINE         0x18\n#define TA_RTLREADING        0x100\n#define TA_MASK             TA_BASELINE+TA_CENTER+TA_UPDATECP+TA_RTLREADING\n\n#define VTA_BASELINE        TA_BASELINE\n#define VTA_LEFT            TA_BOTTOM\n#define VTA_RIGHT           TA_TOP\n#define VTA_CENTER          TA_CENTER\n#define VTA_BOTTOM          TA_RIGHT\n#define VTA_TOP             TA_LEFT\n\n\n  /* ExtTextOut() parameters */\n#define ETO_GRAYED          0x0001\n#define ETO_OPAQUE          0x0002\n#define ETO_CLIPPED         0x0004\n#define ETO_GLYPH_INDEX     0x0010\n#define ETO_RTLREADING      0x0080\n#define ETO_NUMERICSLOCAL   0x0400\n#define ETO_NUMERICSLATIN   0x0800\n#define ETO_IGNORELANGUAGE  0x1000\n#define ETO_PDY             0x2000\n\n#define ASPECT_FILTERING    0x0001\n\n  /* for GetGlyphIndices() */\n#define GGI_MARK_NONEXISTING_GLYPHS  0x0001\n\ntypedef struct\n{\n    UINT\tgmBlackBoxX;\n    UINT\tgmBlackBoxY;\n    POINT\tgmptGlyphOrigin;\n    SHORT\tgmCellIncX;\n    SHORT\tgmCellIncY;\n} GLYPHMETRICS, *LPGLYPHMETRICS;\n\n\n#define GGO_METRICS         0\n#define GGO_BITMAP          1\n#define GGO_NATIVE          2\n#define GGO_BEZIER          3\n#define GGO_GRAY2_BITMAP    4\n#define GGO_GRAY4_BITMAP    5\n#define GGO_GRAY8_BITMAP    6\n#define GGO_GLYPH_INDEX     0x80\n#define GGO_UNHINTED        0x100\n\n#ifdef __WINESRC__\n#define WINE_GGO_GRAY16_BITMAP 0x10\n#define WINE_GGO_HRGB_BITMAP   0x11\n#define WINE_GGO_HBGR_BITMAP   0x12\n#define WINE_GGO_VRGB_BITMAP   0x13\n#define WINE_GGO_VBGR_BITMAP   0x14\n#endif\n\ntypedef struct\n{\n    WORD    fract;\n    SHORT   value;\n} FIXED;\n\ntypedef struct tagPOINTFX\n{\n\tFIXED x;\n\tFIXED y;\n} POINTFX, *LPPOINTFX;\n\ntypedef struct tagTTPOLYCURVE\n{\n\tWORD wType;\n\tWORD cpfx;\n\tPOINTFX apfx[1];\n} TTPOLYCURVE, *LPTTPOLYCURVE;\n\ntypedef struct tagTTPOLYGONHEADER\n{\n\tDWORD cb;\n\tDWORD dwType;\n\tPOINTFX pfxStart;\n} TTPOLYGONHEADER, *LPTTPOLYGONHEADER;\n\ntypedef struct\n{\n     FIXED  eM11;\n     FIXED  eM12;\n     FIXED  eM21;\n     FIXED  eM22;\n} MAT2, *LPMAT2;\n\n  /* for GetCharABCWidths() */\ntypedef struct\n{\n    INT   abcA;\n    UINT  abcB;\n    INT   abcC;\n} ABC, *PABC, *LPABC;\n\n\n  /* for GetCharacterPlacement () */\n\n#define GCP_DBCS          0x0001\n#define GCP_REORDER       0x0002\n#define GCP_USEKERNING    0x0008\n#define GCP_GLYPHSHAPE    0x0010\n#define GCP_LIGATE        0x0020\n#define GCP_DIACRITIC     0x0100\n#define GCP_KASHIDA       0x0200\n#define GCP_ERROR         0x8000\n#define FLI_MASK          0x103b\n#define GCP_JUSTIFY         __MSABI_LONG(0x00010000)\n#define FLI_GLYPHS          __MSABI_LONG(0x00040000)\n#define GCP_CLASSIN         __MSABI_LONG(0x00080000)\n#define GCP_MAXEXTENT       __MSABI_LONG(0x00100000)\n#define GCP_JUSTIFYIN       __MSABI_LONG(0x00200000)\n#define GCP_DISPLAYZWG      __MSABI_LONG(0x00400000)\n#define GCP_SYMSWAPOFF      __MSABI_LONG(0x00800000)\n#define GCP_NUMERICOVERRIDE __MSABI_LONG(0x01000000)\n#define GCP_NEUTRALOVERRIDE __MSABI_LONG(0x02000000)\n#define GCP_NUMERICSLATIN   __MSABI_LONG(0x04000000)\n#define GCP_NUMERICSLOCAL   __MSABI_LONG(0x08000000)\n\n#define GCPCLASS_LATIN                     1\n#define GCPCLASS_HEBREW                    2\n#define GCPCLASS_ARABIC                    3\n#define GCPCLASS_NEUTRAL                   4\n#define GCPCLASS_LOCALNUMBER               5\n#define GCPCLASS_LATINNUMBER               6\n#define GCPCLASS_LATINNUMERICTERMINATOR    7\n#define GCPCLASS_LATINNUMERICSEPARATOR     8\n#define GCPCLASS_NUMERICSEPARATOR          9\n#define GCPCLASS_PREBOUNDLTR               0x80\n#define GCPCLASS_PREBOUNDRTL               0x40\n#define GCPCLASS_POSTBOUNDLTR              0x20\n#define GCPCLASS_POSTBOUNDRTL              0x10\n\n#define GCPGLYPH_LINKBEFORE                0x8000\n#define GCPGLYPH_LINKAFTER                 0x4000\n\n\ntypedef struct tagGCP_RESULTSA{\n    DWORD  lStructSize;\n    LPSTR  lpOutString;\n    UINT   *lpOrder;\n    INT    *lpDx;\n    INT    *lpCaretPos;\n    LPSTR  lpClass;\n    LPWSTR lpGlyphs;\n    UINT   nGlyphs;\n    UINT   nMaxFit;\n} GCP_RESULTSA, *LPGCP_RESULTSA;\n\ntypedef struct tagGCP_RESULTSW\n{\n    DWORD  lStructSize;\n    LPWSTR lpOutString;\n    UINT   *lpOrder;\n    INT    *lpDx;\n    INT    *lpCaretPos;\n    LPSTR  lpClass;\n    LPWSTR lpGlyphs;\n    UINT   nGlyphs;\n    UINT   nMaxFit;\n} GCP_RESULTSW, *LPGCP_RESULTSW;\n\nDECL_WINELIB_TYPE_AW(GCP_RESULTS)\nDECL_WINELIB_TYPE_AW(LPGCP_RESULTS)\n\n  /* Rasterizer status */\ntypedef struct\n{\n    SHORT nSize;\n    SHORT wFlags;\n    SHORT nLanguageID;\n} RASTERIZER_STATUS, *LPRASTERIZER_STATUS;\n\n#define TT_AVAILABLE        0x0001\n#define TT_ENABLED          0x0002\n\n#define TT_PRIM_LINE    1\n#define TT_PRIM_QSPLINE 2\n#define TT_PRIM_CSPLINE 3\n#define TT_POLYGON_TYPE 24\n\n  /* OpenGL defines */\ntypedef struct {\n  FLOAT      x;\n  FLOAT      y;\n} POINTFLOAT, *PPOINTFLOAT;\n\ntypedef struct {\n  FLOAT      gmfBlackBoxX;\n  FLOAT      gmfBlackBoxY;\n  POINTFLOAT gmfptGlyphOrigin;\n  FLOAT      gmfCellIncX;\n  FLOAT      gmfCellIncY;\n} GLYPHMETRICSFLOAT, *PGLYPHMETRICSFLOAT, *LPGLYPHMETRICSFLOAT;\n\ntypedef struct {\n  WORD  nSize;\n  WORD  nVersion;\n  DWORD dwFlags;\n  BYTE  iPixelType;\n  BYTE  cColorBits;\n  BYTE  cRedBits;\n  BYTE  cRedShift;\n  BYTE  cGreenBits;\n  BYTE  cGreenShift;\n  BYTE  cBlueBits;\n  BYTE  cBlueShift;\n  BYTE  cAlphaBits;\n  BYTE  cAlphaShift;\n  BYTE  cAccumBits;\n  BYTE  cAccumRedBits;\n  BYTE  cAccumGreenBits;\n  BYTE  cAccumBlueBits;\n  BYTE  cAccumAlphaBits;\n  BYTE  cDepthBits;\n  BYTE  cStencilBits;\n  BYTE  cAuxBuffers;\n  BYTE  iLayerPlane;\n  BYTE  bReserved;\n  COLORREF crTransparent;\n} LAYERPLANEDESCRIPTOR, *PLAYERPLANEDESCRIPTOR, *LPLAYERPLANEDESCRIPTOR;\n\n/* Get/SetSystemPaletteUse() values */\n#define SYSPAL_ERROR        0\n#define SYSPAL_STATIC       1\n#define SYSPAL_NOSTATIC     2\n#define SYSPAL_NOSTATIC256  3\n    \n#ifndef _PALETTEENTRY_DEFINED\n#define _PALETTEENTRY_DEFINED\ntypedef struct tagPALETTEENTRY\n{\n\tBYTE peRed, peGreen, peBlue, peFlags;\n} PALETTEENTRY, *PPALETTEENTRY, *LPPALETTEENTRY;\n#endif\n\n/* Logical palette entry flags */\n#define PC_RESERVED     0x01\n#define PC_EXPLICIT     0x02\n#define PC_NOCOLLAPSE   0x04\n\n#ifndef _LOGPALETTE_DEFINED\n#define _LOGPALETTE_DEFINED\ntypedef struct tagLOGPALETTE\n{\n    WORD           palVersion;\n    WORD           palNumEntries;\n    PALETTEENTRY   palPalEntry[1];\n} LOGPALETTE, *PLOGPALETTE, *LPLOGPALETTE, *NPLOGPALETTE;\n#endif\n\n  /* Pens */\n\ntypedef struct\n{\n    UINT     lopnStyle;\n    POINT    lopnWidth;\n    COLORREF lopnColor;\n} LOGPEN, *LPLOGPEN;\n\n\ntypedef struct tagEXTLOGPEN\n{\n    DWORD    elpPenStyle;\n    DWORD    elpWidth;\n    UINT     elpBrushStyle;\n    COLORREF elpColor;\n    ULONG_PTR elpHatch;\n    DWORD elpNumEntries;\n    DWORD elpStyleEntry[1];\n} EXTLOGPEN, *PEXTLOGPEN, *NPEXTLOGPEN, *LPEXTLOGPEN;\n\n#define PS_SOLID         0x00000000\n#define PS_DASH          0x00000001\n#define PS_DOT           0x00000002\n#define PS_DASHDOT       0x00000003\n#define PS_DASHDOTDOT    0x00000004\n#define PS_NULL          0x00000005\n#define PS_INSIDEFRAME   0x00000006\n#define PS_USERSTYLE     0x00000007\n#define PS_ALTERNATE     0x00000008\n#define PS_STYLE_MASK    0x0000000f\n\n#define PS_ENDCAP_ROUND  0x00000000\n#define PS_ENDCAP_SQUARE 0x00000100\n#define PS_ENDCAP_FLAT   0x00000200\n#define PS_ENDCAP_MASK   0x00000f00\n\n#define PS_JOIN_ROUND    0x00000000\n#define PS_JOIN_BEVEL    0x00001000\n#define PS_JOIN_MITER    0x00002000\n#define PS_JOIN_MASK     0x0000f000\n\n#define PS_COSMETIC      0x00000000\n#define PS_GEOMETRIC     0x00010000\n#define PS_TYPE_MASK     0x000f0000\n\n  /* Regions */\n\n#define ERROR             0\n#define NULLREGION        1\n#define SIMPLEREGION      2\n#define COMPLEXREGION     3\n#define RGN_ERROR         ERROR\n\n#define RGN_AND           1\n#define RGN_OR            2\n#define RGN_XOR           3\n#define RGN_DIFF          4\n#define RGN_COPY          5\n#define RGN_MIN           RGN_AND\n#define RGN_MAX           RGN_COPY\n\n#define SYSRGN            4\n\n  /* Device contexts */\n\n  /* Polygon modes */\n#define ALTERNATE         1\n#define WINDING           2\n#define POLYFILL_LAST     2\n\n/* Background modes */\n/* Apparently some broken svr4 includes define TRANSPARENT */\n#undef TRANSPARENT\n#define TRANSPARENT       1\n#define OPAQUE            2\n#define BKMODE_LAST       2\n\n  /* Graphics Modes */\n#define GM_COMPATIBLE     1\n#define GM_ADVANCED       2\n#define GM_LAST           2\n\n  /* Arc direction modes */\n#define AD_COUNTERCLOCKWISE 1\n#define AD_CLOCKWISE        2\n\n  /* Map modes */\n#define MM_TEXT\t\t  1\n#define MM_LOMETRIC\t  2\n#define MM_HIMETRIC\t  3\n#define MM_LOENGLISH\t  4\n#define MM_HIENGLISH\t  5\n#define MM_TWIPS\t  6\n#define MM_ISOTROPIC\t  7\n#define MM_ANISOTROPIC\t  8\n\n#define MM_MIN            MM_TEXT\n#define MM_MAX            MM_ANISOTROPIC\n#define MM_MAX_FIXEDSCALE MM_TWIPS\n\n  /* Coordinate modes */\n#define ABSOLUTE          1\n#define RELATIVE          2\n\n  /* Flood fill modes */\n#define FLOODFILLBORDER   0\n#define FLOODFILLSURFACE  1\n\n  /* Device parameters for GetDeviceCaps() */\n#define DRIVERVERSION     0\n#define TECHNOLOGY        2\n#define HORZSIZE          4\n#define VERTSIZE          6\n#define HORZRES           8\n#define VERTRES           10\n#define BITSPIXEL         12\n#define PLANES            14\n#define NUMBRUSHES        16\n#define NUMPENS           18\n#define NUMMARKERS        20\n#define NUMFONTS          22\n#define NUMCOLORS         24\n#define PDEVICESIZE       26\n#define CURVECAPS         28\n#define LINECAPS          30\n#define POLYGONALCAPS     32\n#define TEXTCAPS          34\n#define CLIPCAPS          36\n#define RASTERCAPS        38\n#define ASPECTX           40\n#define ASPECTY           42\n#define ASPECTXY          44\n#define LOGPIXELSX        88\n#define LOGPIXELSY        90\n#define CAPS1             94\n#define SIZEPALETTE       104\n#define NUMRESERVED       106\n#define COLORRES          108\n\n#define PHYSICALWIDTH     110\n#define PHYSICALHEIGHT    111\n#define PHYSICALOFFSETX   112\n#define PHYSICALOFFSETY   113\n#define SCALINGFACTORX    114\n#define SCALINGFACTORY    115\n#define VREFRESH          116\n#define DESKTOPVERTRES    117\n#define DESKTOPHORZRES    118\n#define BLTALIGNMENT      119\n#define SHADEBLENDCAPS    120\n#define COLORMGMTCAPS     121\n\n/* TECHNOLOGY */\n#define DT_PLOTTER        0\n#define DT_RASDISPLAY     1\n#define DT_RASPRINTER     2\n#define DT_RASCAMERA      3\n#define DT_CHARSTREAM     4\n#define DT_METAFILE       5\n#define DT_DISPFILE       6\n\n/* CURVECAPS */\n#define CC_NONE           0x0000\n#define CC_CIRCLES        0x0001\n#define CC_PIE            0x0002\n#define CC_CHORD          0x0004\n#define CC_ELLIPSES       0x0008\n#define CC_WIDE           0x0010\n#define CC_STYLED         0x0020\n#define CC_WIDESTYLED     0x0040\n#define CC_INTERIORS      0x0080\n#define CC_ROUNDRECT      0x0100\n\n/* LINECAPS */\n#define LC_NONE           0x0000\n#define LC_POLYLINE       0x0002\n#define LC_MARKER         0x0004\n#define LC_POLYMARKER     0x0008\n#define LC_WIDE           0x0010\n#define LC_STYLED         0x0020\n#define LC_WIDESTYLED     0x0040\n#define LC_INTERIORS      0x0080\n\n/* POLYGONALCAPS */\n#define PC_NONE           0x0000\n#define PC_POLYGON        0x0001\n#define PC_RECTANGLE      0x0002\n#define PC_WINDPOLYGON    0x0004\n#define PC_TRAPEZOID      0x0004\n#define PC_SCANLINE       0x0008\n#define PC_WIDE           0x0010\n#define PC_STYLED         0x0020\n#define PC_WIDESTYLED     0x0040\n#define PC_INTERIORS      0x0080\n#define PC_POLYPOLYGON    0x0100\n#define PC_PATHS          0x0200\n\n/* TEXTCAPS */\n#define TC_OP_CHARACTER   0x0001\n#define TC_OP_STROKE      0x0002\n#define TC_CP_STROKE      0x0004\n#define TC_CR_90          0x0008\n#define TC_CR_ANY         0x0010\n#define TC_SF_X_YINDEP    0x0020\n#define TC_SA_DOUBLE      0x0040\n#define TC_SA_INTEGER     0x0080\n#define TC_SA_CONTIN      0x0100\n#define TC_EA_DOUBLE      0x0200\n#define TC_IA_ABLE        0x0400\n#define TC_UA_ABLE        0x0800\n#define TC_SO_ABLE        0x1000\n#define TC_RA_ABLE        0x2000\n#define TC_VA_ABLE        0x4000\n#define TC_RESERVED       0x8000\n#define TC_SCROLLBLT      0x00010000\n\n/* CLIPCAPS */\n#define CP_NONE           0x0000\n#define CP_RECTANGLE      0x0001\n#define CP_REGION         0x0002\n\n/* RASTERCAPS */\n#define RC_NONE           0x0000\n#define RC_BITBLT         0x0001\n#define RC_BANDING        0x0002\n#define RC_SCALING        0x0004\n#define RC_BITMAP64       0x0008\n#define RC_GDI20_OUTPUT   0x0010\n#define RC_GDI20_STATE    0x0020\n#define RC_SAVEBITMAP     0x0040\n#define RC_DI_BITMAP      0x0080\n#define RC_PALETTE        0x0100\n#define RC_DIBTODEV       0x0200\n#define RC_BIGFONT        0x0400\n#define RC_STRETCHBLT     0x0800\n#define RC_FLOODFILL      0x1000\n#define RC_STRETCHDIB     0x2000\n#define RC_OP_DX_OUTPUT   0x4000\n#define RC_DEVBITS        0x8000\n\n/* CAPS1 */\n#define C1_TRANSPARENT    0x0001\n#define TC_TT_ABLE        0x0002\n#define C1_TT_CR_ANY      0x0004\n#define C1_EMF_COMPLIANT  0x0008\n#define C1_DIBENGINE      0x0010\n#define C1_GAMMA_RAMP     0x0040\n#define C1_REINIT_ABLE    0x0080\n#define C1_GLYPH_INDEX    0x0100\n#define C1_BIT_PACKED     0x0200\n#define C1_BYTE_PACKED    0x0400\n#define C1_COLORCURSOR    0x0800\n#define C1_CMYK_ABLE      0x1000\n#define C1_SLOW_CARD      0x2000\n\n/* SHADEBLENDCAPS */\n#define SB_NONE           0x0000\n#define SB_CONST_ALPHA    0x0001\n#define SB_PIXEL_ALPHA    0x0002\n#define SB_PREMULT_ALPHA  0x0004\n#define SB_GRAD_RECT      0x0010\n#define SB_GRAD_TRI       0x0020\n\n  /* Device-independent bitmaps */\n\ntypedef struct tagRGBQUAD {\n  BYTE rgbBlue;\n  BYTE rgbGreen;\n  BYTE rgbRed;\n  BYTE rgbReserved;\n} RGBQUAD, *LPRGBQUAD;\n\ntypedef struct tagRGBTRIPLE {\n  BYTE rgbtBlue;\n  BYTE rgbtGreen;\n  BYTE rgbtRed;\n} RGBTRIPLE;\n\n#include <pshpack2.h>\ntypedef struct\n{\n    WORD    bfType;\n    DWORD   bfSize;\n    WORD    bfReserved1;\n    WORD    bfReserved2;\n    DWORD   bfOffBits;\n} BITMAPFILEHEADER, *PBITMAPFILEHEADER, *LPBITMAPFILEHEADER;\n#include <poppack.h>\n\n#define MAKEPOINTS(l)  (*((POINTS *)&(l)))\n\ntypedef struct\n{\n    DWORD \tbiSize;\n    LONG  \tbiWidth;\n    LONG  \tbiHeight;\n    WORD \tbiPlanes;\n    WORD \tbiBitCount;\n    DWORD \tbiCompression;\n    DWORD \tbiSizeImage;\n    LONG  \tbiXPelsPerMeter;\n    LONG  \tbiYPelsPerMeter;\n    DWORD \tbiClrUsed;\n    DWORD \tbiClrImportant;\n} BITMAPINFOHEADER, *PBITMAPINFOHEADER, *LPBITMAPINFOHEADER;\n\ntypedef struct\n{\n    DWORD        bV4Size;\n    LONG         bV4Width;\n    LONG         bV4Height;\n    WORD         bV4Planes;\n    WORD         bV4BitCount;\n    DWORD        bV4V4Compression;\n    DWORD        bV4SizeImage;\n    LONG         bV4XPelsPerMeter;\n    LONG         bV4YPelsPerMeter;\n    DWORD        bV4ClrUsed;\n    DWORD        bV4ClrImportant;\n    DWORD        bV4RedMask;\n    DWORD        bV4GreenMask;\n    DWORD        bV4BlueMask;\n    DWORD        bV4AlphaMask;\n    DWORD        bV4CSType;\n    CIEXYZTRIPLE bV4Endpoints;\n    DWORD        bV4GammaRed;\n    DWORD        bV4GammaGreen;\n    DWORD        bV4GammaBlue;\n} BITMAPV4HEADER, *PBITMAPV4HEADER;\n\ntypedef struct {\n    DWORD        bV5Size;\n    LONG         bV5Width;\n    LONG         bV5Height;\n    WORD         bV5Planes;\n    WORD         bV5BitCount;\n    DWORD        bV5Compression;\n    DWORD        bV5SizeImage;\n    LONG         bV5XPelsPerMeter;\n    LONG         bV5YPelsPerMeter;\n    DWORD        bV5ClrUsed;\n    DWORD        bV5ClrImportant;\n    DWORD        bV5RedMask;\n    DWORD        bV5GreenMask;\n    DWORD        bV5BlueMask;\n    DWORD        bV5AlphaMask;\n    DWORD        bV5CSType;\n    CIEXYZTRIPLE bV5Endpoints;\n    DWORD        bV5GammaRed;\n    DWORD        bV5GammaGreen;\n    DWORD        bV5GammaBlue;\n    DWORD        bV5Intent;\n    DWORD        bV5ProfileData;\n    DWORD        bV5ProfileSize;\n    DWORD        bV5Reserved;\n} BITMAPV5HEADER, *LPBITMAPV5HEADER, *PBITMAPV5HEADER;\n\n#define PROFILE_LINKED   0x4c494e4b     /* 'LINK' */\n#define PROFILE_EMBEDDED 0x4d424544     /* 'MBED' */\n\n\n  /* biCompression */\n#define BI_RGB           0\n#define BI_RLE8          1\n#define BI_RLE4          2\n#define BI_BITFIELDS     3\n#define BI_JPEG          4\n#define BI_PNG           5\n\ntypedef struct tagBITMAPINFO\n{\n    BITMAPINFOHEADER bmiHeader;\n    RGBQUAD          bmiColors[1];\n} BITMAPINFO, *PBITMAPINFO, *LPBITMAPINFO;\n\ntypedef struct\n{\n    DWORD   bcSize;\n    WORD    bcWidth;\n    WORD    bcHeight;\n    WORD    bcPlanes;\n    WORD    bcBitCount;\n} BITMAPCOREHEADER, *PBITMAPCOREHEADER, *LPBITMAPCOREHEADER;\n\ntypedef struct\n{\n    BITMAPCOREHEADER bmciHeader;\n    RGBTRIPLE        bmciColors[1];\n} BITMAPCOREINFO, *PBITMAPCOREINFO, *LPBITMAPCOREINFO;\n\n#define DIB_RGB_COLORS   0\n#define DIB_PAL_COLORS   1\n#define CBM_INIT         4\n\ntypedef struct\n{\n\tBITMAP\t\tdsBm;\n\tBITMAPINFOHEADER\tdsBmih;\n\tDWORD\t\t\tdsBitfields[3];\n\tHANDLE\t\tdshSection;\n\tDWORD\t\t\tdsOffset;\n} DIBSECTION, *PDIBSECTION, *LPDIBSECTION;\n\n  /* Stock GDI objects for GetStockObject() */\n\n#define WHITE_BRUSH\t    0\n#define LTGRAY_BRUSH\t    1\n#define GRAY_BRUSH\t    2\n#define DKGRAY_BRUSH\t    3\n#define BLACK_BRUSH\t    4\n#define NULL_BRUSH\t    5\n#define HOLLOW_BRUSH\t    5\n#define WHITE_PEN\t    6\n#define BLACK_PEN\t    7\n#define NULL_PEN\t    8\n#define OEM_FIXED_FONT\t    10\n#define ANSI_FIXED_FONT     11\n#define ANSI_VAR_FONT\t    12\n#define SYSTEM_FONT\t    13\n#define DEVICE_DEFAULT_FONT 14\n#define DEFAULT_PALETTE     15\n#define SYSTEM_FIXED_FONT   16\n#define DEFAULT_GUI_FONT    17\n#define DC_BRUSH            18\n#define DC_PEN              19\n\n#define STOCK_LAST          19\n\n#define CLR_INVALID         0xffffffff\n\ntypedef USHORT COLOR16;\n\ntypedef struct _TRIVERTEX\n{\n    LONG    x;\n    LONG    y;\n    COLOR16 Red;\n    COLOR16 Green;\n    COLOR16 Blue;\n    COLOR16 Alpha;\n} TRIVERTEX, *PTRIVERTEX, *LPTRIVERTEX;\n\ntypedef struct _GRADIENT_TRIANGLE\n{\n    ULONG Vertex1;\n    ULONG Vertex2;\n    ULONG Vertex3;\n} GRADIENT_TRIANGLE, *PGRADIENT_TRIANGLE, *LPGRADIENT_TRIANGLE;\n\ntypedef struct _GRADIENT_RECT\n{\n    ULONG UpperLeft;\n    ULONG LowerRight;\n} GRADIENT_RECT, *PGRADIENT_RECT, *LPGRADIENT_RECT;\n\n#define AC_SRC_OVER  0x00\n#define AC_SRC_ALPHA 0x01\n\ntypedef struct _BLENDFUNCTION\n{\n    BYTE BlendOp;\n    BYTE BlendFlags;\n    BYTE SourceConstantAlpha;\n    BYTE AlphaFormat;\n} BLENDFUNCTION, *PBLENDFUNCTION;\n\n#define GRADIENT_FILL_RECT_H      0x00000000\n#define GRADIENT_FILL_RECT_V      0x00000001\n#define GRADIENT_FILL_TRIANGLE    0x00000002\n#define GRADIENT_FILL_OP_FLAG     0x000000ff\n\n\n/* Metafile header structure */\n#include <pshpack2.h>\ntypedef struct\n{\n    WORD       mtType;\n    WORD       mtHeaderSize;\n    WORD       mtVersion;\n    DWORD      mtSize;\n    WORD       mtNoObjects;\n    DWORD      mtMaxRecord;\n    WORD       mtNoParameters;\n} METAHEADER, *PMETAHEADER, *LPMETAHEADER;\n#include <poppack.h>\n\n/* Metafile typical record structure */\ntypedef struct\n{\n    DWORD      rdSize;\n    WORD       rdFunction;\n    WORD       rdParm[1];\n} METARECORD, *PMETARECORD, *LPMETARECORD;\n\n/* Handle table structure */\n\ntypedef struct\n{\n    HGDIOBJ objectHandle[1];\n} HANDLETABLE, *PHANDLETABLE, *LPHANDLETABLE;\n\n\n/* Clipboard metafile picture structure */\ntypedef struct\n{\n    LONG       mm;\n    LONG       xExt;\n    LONG       yExt;\n    HMETAFILE  hMF;\n} METAFILEPICT, *LPMETAFILEPICT;\n\n\n/* Metafile functions */\n#define META_SETBKCOLOR              0x0201\n#define META_SETBKMODE               0x0102\n#define META_SETMAPMODE              0x0103\n#define META_SETROP2                 0x0104\n#define META_SETRELABS               0x0105\n#define META_SETPOLYFILLMODE         0x0106\n#define META_SETSTRETCHBLTMODE       0x0107\n#define META_SETTEXTCHAREXTRA        0x0108\n#define META_SETTEXTCOLOR            0x0209\n#define META_SETTEXTJUSTIFICATION    0x020A\n#define META_SETWINDOWORG            0x020B\n#define META_SETWINDOWEXT            0x020C\n#define META_SETVIEWPORTORG          0x020D\n#define META_SETVIEWPORTEXT          0x020E\n#define META_OFFSETWINDOWORG         0x020F\n#define META_SCALEWINDOWEXT          0x0410\n#define META_OFFSETVIEWPORTORG       0x0211\n#define META_SCALEVIEWPORTEXT        0x0412\n#define META_LINETO                  0x0213\n#define META_MOVETO                  0x0214\n#define META_EXCLUDECLIPRECT         0x0415\n#define META_INTERSECTCLIPRECT       0x0416\n#define META_ARC                     0x0817\n#define META_ELLIPSE                 0x0418\n#define META_FLOODFILL               0x0419\n#define META_PIE                     0x081A\n#define META_RECTANGLE               0x041B\n#define META_ROUNDRECT               0x061C\n#define META_PATBLT                  0x061D\n#define META_SAVEDC                  0x001E\n#define META_SETPIXEL                0x041F\n#define META_OFFSETCLIPRGN           0x0220\n#define META_TEXTOUT                 0x0521\n#define META_BITBLT                  0x0922\n#define META_STRETCHBLT              0x0B23\n#define META_POLYGON                 0x0324\n#define META_POLYLINE                0x0325\n#define META_ESCAPE                  0x0626\n#define META_RESTOREDC               0x0127\n#define META_FILLREGION              0x0228\n#define META_FRAMEREGION             0x0429\n#define META_INVERTREGION            0x012A\n#define META_PAINTREGION             0x012B\n#define META_SELECTCLIPREGION        0x012C\n#define META_SELECTOBJECT            0x012D\n#define META_SETTEXTALIGN            0x012E\n#define META_DRAWTEXT                0x062F\n#define META_CHORD                   0x0830\n#define META_SETMAPPERFLAGS          0x0231\n#define META_EXTTEXTOUT              0x0A32\n#define META_SETDIBTODEV             0x0D33\n#define META_SELECTPALETTE           0x0234\n#define META_REALIZEPALETTE          0x0035\n#define META_ANIMATEPALETTE          0x0436\n#define META_SETPALENTRIES           0x0037\n#define META_POLYPOLYGON             0x0538\n#define META_RESIZEPALETTE           0x0139\n#define META_DIBBITBLT               0x0940\n#define META_DIBSTRETCHBLT           0x0B41\n#define META_DIBCREATEPATTERNBRUSH   0x0142\n#define META_STRETCHDIB              0x0F43\n#define META_EXTFLOODFILL            0x0548\n#define META_RESETDC                 0x014C\n#define META_STARTDOC                0x014D\n#define META_STARTPAGE               0x004F\n#define META_ENDPAGE                 0x0050\n#define META_ABORTDOC                0x0052\n#define META_ENDDOC                  0x005E\n#define META_DELETEOBJECT            0x01F0\n#define META_CREATEPALETTE           0x00F7\n#define META_CREATEBRUSH             0x00F8\n#define META_CREATEPATTERNBRUSH      0x01F9\n#define META_CREATEPENINDIRECT       0x02FA\n#define META_CREATEFONTINDIRECT      0x02FB\n#define META_CREATEBRUSHINDIRECT     0x02FC\n#define META_CREATEBITMAPINDIRECT    0x02FD\n#define META_CREATEBITMAP            0x06FE\n#define META_CREATEREGION            0x06FF\n#define META_UNKNOWN                 0x0529  /* FIXME: unknown meta magic */\n\ntypedef INT (CALLBACK *MFENUMPROC)(HDC,HANDLETABLE*,METARECORD*,\n                                       INT,LPARAM);\n\n/* enhanced metafile structures and functions */\n\n/* note that ENHMETAHEADER is just a particular kind of ENHMETARECORD,\n   ie. the header is just the first record in the metafile */\ntypedef struct {\n    DWORD iType;\n    DWORD nSize;\n    RECTL rclBounds;\n    RECTL rclFrame;\n    DWORD dSignature;\n    DWORD nVersion;\n    DWORD nBytes;\n    DWORD nRecords;\n    WORD  nHandles;\n    WORD  sReserved;\n    DWORD nDescription;\n    DWORD offDescription;\n    DWORD nPalEntries;\n    SIZEL szlDevice;\n    SIZEL szlMillimeters;\n    DWORD cbPixelFormat;\n    DWORD offPixelFormat;\n    DWORD bOpenGL;\n    SIZEL szlMicrometers;\n} ENHMETAHEADER, *PENHMETAHEADER, *LPENHMETAHEADER;\n\ntypedef struct {\n    DWORD iType;\n    DWORD nSize;\n    DWORD dParm[1];\n} ENHMETARECORD, *LPENHMETARECORD;\n\ntypedef struct {\n    DWORD iType;\n    DWORD nSize;\n} EMR, *PEMR;\n\ntypedef struct {\n    POINTL ptlReference;\n    DWORD  nChars;\n    DWORD  offString;\n    DWORD  fOptions;\n    RECTL  rcl;\n    DWORD  offDx;\n} EMRTEXT, *PEMRTEXT;\n\ntypedef struct {\n    EMR emr;\n} EMRABORTPATH,      *PEMRABORTPATH,\n  EMRBEGINPATH,      *PEMRBEGINPATH,\n  EMRENDPATH,        *PEMRENDPATH,\n  EMRCLOSEFIGURE,    *PEMRCLOSEFIGURE,\n  EMRFLATTENPATH,    *PEMRFLATTENPATH,\n  EMRWIDENPATH,      *PEMRWIDENPATH,\n  EMRSETMETARGN,     *PEMRSETMETARGN,\n  EMRSAVEDC,         *PEMRSAVEDC,\n  EMRREALIZEPALETTE, *PEMRREALIZEPALETTE;\n\ntypedef struct {\n    EMR    emr;\n    POINTL ptlCenter;\n    DWORD  nRadius;\n    FLOAT  eStartAngle;\n    FLOAT  eSweepAngle;\n} EMRANGLEARC, *PEMRANGLEARC;\n\ntypedef struct {\n    EMR    emr;\n    RECTL  rclBox;\n    POINTL ptlStart;\n    POINTL ptlEnd;\n} EMRARC,   *PEMRARC,\n  EMRARCTO, *PEMRARCTO,\n  EMRCHORD, *PEMRCHORD,\n  EMRPIE,   *PEMRPIE;\n\ntypedef struct {\n    EMR      emr;\n    RECTL    rclBounds;\n    LONG     xDest;\n    LONG     yDest;\n    LONG     cxDest;\n    LONG     cyDest;\n    DWORD    dwRop;\n    LONG     xSrc;\n    LONG     ySrc;\n    XFORM    xformSrc;\n    COLORREF crBkColorSrc;\n    DWORD    iUsageSrc;\n    DWORD    offBmiSrc;\n    DWORD    cbBmiSrc;\n    DWORD    offBitsSrc;\n    DWORD    cbBitsSrc;\n} EMRBITBLT, *PEMRBITBLT;\n\ntypedef struct {\n    EMR        emr;\n    DWORD      ihBrush;\n    LOGBRUSH32 lb;\n} EMRCREATEBRUSHINDIRECT, *PEMRCREATEBRUSHINDIRECT;\n\ntypedef struct {\n    EMR            emr;\n    DWORD          ihCS;\n    LOGCOLORSPACEA lcs;\n} EMRCREATECOLORSPACE, *PEMRCREATECOLORSPACE;\n\ntypedef struct {\n  EMR            emr;\n  DWORD          ihCS;\n  LOGCOLORSPACEW lcs;\n  DWORD          dwFlags;\n  DWORD          cbData;\n  BYTE           Data[1];\n} EMRCREATECOLORSPACEW, *PEMRCREATECOLORSPACEW;\n\ntypedef struct {\n    EMR   emr;\n    DWORD ihBrush;\n    DWORD iUsage;\n    DWORD offBmi;\n    DWORD cbBmi;\n    DWORD offBits;\n    DWORD cbBits;\n} EMRCREATEDIBPATTERNBRUSHPT, *PEMRCREATEDIBPATTERNBRUSHPT;\n\ntypedef struct {\n    EMR   emr;\n    DWORD ihBrush;\n    DWORD iUsage;\n    DWORD offBmi;\n    DWORD cbBmi;\n    DWORD offBits;\n    DWORD cbBits;\n} EMRCREATEMONOBRUSH, *PEMRCREATEMONOBRUSH;\n\ntypedef struct {\n    EMR        emr;\n    DWORD      ihPal;\n    LOGPALETTE lgpl;\n} EMRCREATEPALETTE, *PEMRCREATEPALETTE;\n\ntypedef struct {\n    EMR    emr;\n    DWORD  ihPen;\n    LOGPEN lopn;\n} EMRCREATEPEN, *PEMRCREATEPEN;\n\ntypedef struct {\n    EMR           emr;\n    DWORD         ihCS;\n} EMRDELETECOLORSPACE, *PEMRDELETECOLORSPACE,\n  EMRSELECTCOLORSPACE, *PEMRSELECTCOLORSPACE,\n  EMRSETCOLORSPACE,    *PEMRSETCOLORSPACE;\n\ntypedef struct {\n    EMR   emr;\n    DWORD ihObject;\n} EMRDELETEOBJECT, *PEMRDELETEOBJECT,\n  EMRSELECTOBJECT, *PEMRSELECTOBJECT;\n\ntypedef struct {\n    EMR   emr;\n    RECTL rclBox;\n} EMRELLIPSE,   *PEMRELLIPSE,\n  EMRRECTANGLE, *PEMRRECTANGLE;\n\ntypedef struct {\n    EMR   emr;\n    DWORD nPalEntries;\n    DWORD offPalEntries;\n    DWORD nSizeLast;\n} EMREOF, *PEMREOF;\n\ntypedef struct {\n    EMR   emr;\n    RECTL rclClip;\n} EMREXCLUDECLIPRECT,   *PEMREXCLUDECLIPRECT,\n  EMRINTERSECTCLIPRECT, *PEMRINTERSECTCLIPRECT;\n\ntypedef struct {\n    EMR         emr;\n    DWORD       ihFont;\n    EXTLOGFONTW elfw;\n} EMREXTCREATEFONTINDIRECTW, *PEMREXTCREATEFONTINDIRECTW;\n\ntypedef struct {\n    EMR       emr;\n    DWORD     ihPen;\n    DWORD     offBmi;\n    DWORD     cbBmi;\n    DWORD     offBits;\n    DWORD     cbBits;\n    EXTLOGPEN elp;\n} EMREXTCREATEPEN, *PEMREXTCREATEPEN;\n\ntypedef struct {\n    EMR      emr;\n    POINTL   ptlStart;\n    COLORREF crColor;\n    DWORD    iMode;\n} EMREXTFLOODFILL, *PEMREXTFLOODFILL;\n\ntypedef struct {\n    EMR   emr;\n    DWORD cbRgnData;\n    DWORD iMode;\n    BYTE  RgnData[1];\n} EMREXTSELECTCLIPRGN, *PEMREXTSELECTCLIPRGN;\n\ntypedef struct {\n    EMR     emr;\n    RECTL   rclBounds;\n    DWORD   iGraphicsMode;\n    FLOAT   exScale;\n    FLOAT   eyScale;\n    EMRTEXT emrtext;\n} EMREXTTEXTOUTA, *PEMREXTTEXTOUTA,\n  EMREXTTEXTOUTW, *PEMREXTTEXTOUTW;\n\ntypedef struct {\n    EMR emr;\n    RECTL rclBounds;\n} EMRFILLPATH,          *PEMRFILLPATH,\n  EMRSTROKEANDFILLPATH, *PEMRSTROKEANDFILLPATH,\n  EMRSTROKEPATH,        *PEMRSTROKEPATH;\n\ntypedef struct {\n    EMR   emr;\n    RECTL rclBounds;\n    DWORD cbRgnData;\n    DWORD ihBrush;\n    BYTE  RgnData[1];\n} EMRFILLRGN, *PEMRFILLRGN;\n\ntypedef struct {\n    DWORD dSignature;\n    DWORD nVersion;\n    DWORD cbData;\n    DWORD offData;\n} EMRFORMAT, *PEMRFORMAT;\n\ntypedef struct {\n    EMR   emr;\n    RECTL rclBounds;\n    DWORD cbRgnData;\n    DWORD ihBrush;\n    SIZEL szlStroke;\n    BYTE  RgnData[1];\n} EMRFRAMERGN, *PEMRFRAMERGN;\n\ntypedef struct {\n    EMR   emr;\n    DWORD cbData;\n    BYTE  Data[1];\n} EMRGDICOMMENT, *PEMRGDICOMMENT;\n\ntypedef struct {\n    EMR       emr;\n    RECTL     rclBounds;\n    DWORD     nVer;\n    DWORD     nTri;\n    ULONG     ulMode;\n    TRIVERTEX Ver[1];\n} EMRGRADIENTFILL, *PEMRGRADIENTFILL;\n\ntypedef struct {\n    EMR   emr;\n    RECTL rclBounds;\n    DWORD cbRgnData;\n    BYTE  RgnData[1];\n} EMRINVERTRGN, *PEMRINVERTRGN,\n  EMRPAINTRGN,  *PEMRPAINTRGN;\n\ntypedef struct {\n    EMR    emr;\n    POINTL ptl;\n} EMRLINETO,   *PEMRLINETO,\n  EMRMOVETOEX, *PEMRMOVETOEX;\n\ntypedef struct {\n    EMR      emr;\n    RECTL    rclBounds;\n    LONG     xDest;\n    LONG     yDest;\n    LONG     cxDest;\n    LONG     cyDest;\n    DWORD    dwRop;\n    LONG     xSrc;\n    LONG     ySrc;\n    XFORM    xformSrc;\n    COLORREF crBkColorSrc;\n    DWORD    iUsageSrc;\n    DWORD    offBmiSrc;\n    DWORD    cbBmiSrc;\n    DWORD    offBitsSrc;\n    DWORD    cbBitsSrc;\n    LONG     xMask;\n    LONG     yMask;\n    DWORD    iUsageMask;\n    DWORD    offBmiMask;\n    DWORD    cbBmiMask;\n    DWORD    offBitsMask;\n    DWORD    cbBitsMask;\n} EMRMASKBLT, *PEMRMASKBLT;\n\ntypedef struct {\n    EMR   emr;\n    XFORM xform;\n    DWORD iMode;\n} EMRMODIFYWORLDTRANSFORM, *PEMRMODIFYWORLDTRANSFORM;\n\ntypedef struct {\n    EMR    emr;\n    POINTL ptlOffset;\n} EMROFFSETCLIPRGN, *PEMROFFSETCLIPRGN;\n\ntypedef struct {\n    EMR      emr;\n    RECTL    rclBounds;\n    POINTL   aptlDest[3];\n    LONG     xSrc;\n    LONG     ySrc;\n    LONG     cxSrc;\n    LONG     cySrc;\n    XFORM    xformSrc;\n    COLORREF crBkColorSrc;\n    DWORD    iUsageSrc;\n    DWORD    offBmiSrc;\n    DWORD    cbBmiSrc;\n    DWORD    offBitsSrc;\n    DWORD    cbBitsSrc;\n    LONG     xMask;\n    LONG     yMask;\n    DWORD    iUsageMask;\n    DWORD    offBmiMask;\n    DWORD    cbBmiMask;\n    DWORD    offBitsMask;\n    DWORD    cbBitsMask;\n} EMRPLGBLT, *PEMRPLGBLT;\n\ntypedef struct {\n    EMR    emr;\n    RECTL  rclBounds;\n    DWORD  cptl;\n    POINTL aptl[1];\n} EMRPOLYLINE,     *PEMRPOLYLINE,\n  EMRPOLYBEZIER,   *PEMRPOLYBEZIER,\n  EMRPOLYGON,      *PEMRPOLYGON,\n  EMRPOLYBEZIERTO, *PEMRPOLYBEZIERTO,\n  EMRPOLYLINETO,   *PEMRPOLYLINETO;\n\ntypedef struct {\n    EMR    emr;\n    RECTL  rclBounds;\n    DWORD  cpts;\n    POINTS apts[1];\n} EMRPOLYLINE16,     *PEMRPOLYLINE16,\n  EMRPOLYBEZIER16,   *PEMRPOLYBEZIER16,\n  EMRPOLYGON16,      *PEMRPOLYGON16,\n  EMRPOLYBEZIERTO16, *PEMRPOLYBEZIERTO16,\n  EMRPOLYLINETO16,   *PEMRPOLYLINETO16;\n\ntypedef struct {\n    EMR    emr;\n    RECTL  rclBounds;\n    DWORD  cpts;\n    POINTS apts[1];\n    BYTE   abTypes[1];\n} EMRPOLYDRAW16, *PEMRPOLYDRAW16;\n\ntypedef struct {\n    EMR     emr;\n    RECTL   rclBounds;\n    DWORD   nPolys;\n    DWORD   cpts;\n    DWORD   aPolyCounts[1];\n    POINTS  apts[1];\n} EMRPOLYPOLYLINE16, *PEMRPOLYPOLYLINE16,\n  EMRPOLYPOLYGON16,  *PEMRPOLYPOLYGON16;\n\ntypedef struct {\n    EMR    emr;\n    RECTL  rclBounds;\n    DWORD  cptl;\n    POINTL aptl[1];\n    BYTE   abTypes[1];\n} EMRPOLYDRAW, *PEMRPOLYDRAW;\n\ntypedef struct {\n    EMR     emr;\n    RECTL   rclBounds;\n    DWORD   nPolys;\n    DWORD   cptl;\n    DWORD   aPolyCounts[1];\n    POINTL  aptl[1];\n} EMRPOLYPOLYLINE, *PEMRPOLYPOLYLINE,\n  EMRPOLYPOLYGON,  *PEMRPOLYPOLYGON;\n\ntypedef struct {\n    EMR     emr;\n    RECTL   rclBounds;\n    DWORD   iGraphicsMode;\n    FLOAT   exScale;\n    FLOAT   eyScale;\n    LONG    cStrings;\n    EMRTEXT aemrtext[1];\n} EMRPOLYTEXTOUTA, *PEMRPOLYTEXTOUTA,\n  EMRPOLYTEXTOUTW, *PEMRPOLYTEXTOUTW;\n\ntypedef struct {\n    EMR   emr;\n    DWORD ihPal;\n    DWORD cEntries;\n} EMRRESIZEPALETTE, *PEMRRESIZEPALETTE;\n\ntypedef struct {\n    EMR  emr;\n    LONG iRelative;\n} EMRRESTOREDC, *PEMRRESTOREDC;\n\ntypedef struct {\n    EMR   emr;\n    RECTL rclBox;\n    SIZEL szlCorner;\n} EMRROUNDRECT, *PEMRROUNDRECT;\n\ntypedef struct {\n    EMR  emr;\n    LONG xNum;\n    LONG xDenom;\n    LONG yNum;\n    LONG yDenom;\n} EMRSCALEVIEWPORTEXTEX, *PEMRSCALEVIEWPORTEXTEX,\n  EMRSCALEWINDOWEXTEX,   *PEMRSCALEWINDOWEXTEX;\n\ntypedef struct {\n    EMR   emr;\n    DWORD iMode;\n} EMRSELECTCLIPPATH,    *PEMRSELECTCLIPPATH,\n  EMRSETBKMODE,         *PEMRSETBKMODE,\n  EMRSETMAPMODE,        *PEMRSETMAPMODE,\n  EMRSETPOLYFILLMODE,   *PEMRSETPOLYFILLMODE,\n  EMRSETROP2,           *PEMRSETROP2,\n  EMRSETSTRETCHBLTMODE, *PEMRSETSTRETCHBLTMODE,\n  EMRSETTEXTALIGN,      *PEMRSETTEXTALIGN,\n  EMRSETICMMODE,        *PEMRSETICMMODE,\n  EMRSETLAYOUT,         *PEMRSETLAYOUT;\n\ntypedef struct {\n    EMR   emr;\n    DWORD ihPal;\n} EMRSELECTPALETTE, *PEMRSELECTPALETTE;\n\ntypedef struct {\n    EMR   emr;\n    DWORD iArcDirection;\n} EMRSETARCDIRECTION, *PEMRSETARCDIRECTION;\n\ntypedef struct {\n    EMR      emr;\n    COLORREF crColor;\n} EMRSETBKCOLOR,   *PEMRSETBKCOLOR,\n  EMRSETTEXTCOLOR, *PEMRSETTEXTCOLOR;\n\ntypedef struct {\n    EMR   emr;\n    POINTL ptlOrigin;\n} EMRSETBRUSHORGEX,    *PEMRSETBRUSHORGEX,\n  EMRSETVIEWPORTORGEX, *PEMRSETVIEWPORTORGEX,\n  EMRSETWINDOWORGEX,   *PEMRSETWINDOWORGEX;\n\ntypedef struct {\n    EMR  emr;\n    COLORADJUSTMENT ColorAdjustment;\n} EMRSETCOLORADJUSTMENT, *PEMRSETCOLORADJUSTMENT;\n\ntypedef struct {\n    EMR   emr;\n    RECTL rclBounds;\n    LONG  xDest;\n    LONG  yDest;\n    LONG  xSrc;\n    LONG  ySrc;\n    LONG  cxSrc;\n    LONG  cySrc;\n    DWORD offBmiSrc;\n    DWORD cbBmiSrc;\n    DWORD offBitsSrc;\n    DWORD cbBitsSrc;\n    DWORD iUsageSrc;\n    DWORD iStartScan;\n    DWORD cScans;\n} EMRSETDIBITSTODEVICE, *PEMRSETDIBITSTODEVICE;\n\ntypedef struct {\n    EMR   emr;\n    DWORD dwFlags;\n} EMRSETMAPPERFLAGS, *PEMRSETMAPPERFLAGS;\n\ntypedef struct {\n    EMR   emr;\n    FLOAT eMiterLimit;\n} EMRSETMITERLIMIT, *PEMRSETMITERLIMIT;\n\ntypedef struct {\n    EMR          emr;\n    DWORD        ihPal;\n    DWORD        iStart;\n    DWORD        cEntries;\n    PALETTEENTRY aPalEntries[1];\n} EMRSETPALETTEENTRIES, *PEMRSETPALETTEENTRIES;\n\ntypedef struct {\n    EMR     emr;\n    POINTL  ptlPixel;\n    COLORREF crColor;\n} EMRSETPIXELV, *PEMRSETPIXELV;\n\ntypedef struct {\n    EMR   emr;\n    SIZEL szlExtent;\n} EMRSETVIEWPORTEXTEX, *PEMRSETVIEWPORTEXTEX,\n  EMRSETWINDOWEXTEX,   *PEMRSETWINDOWEXTEX;\n\ntypedef struct {\n    EMR   emr;\n    XFORM xform;\n} EMRSETWORLDTRANSFORM, *PEMRSETWORLDTRANSFORM;\n\ntypedef struct {\n    EMR      emr;\n    RECTL    rclBounds;\n    LONG     xDest;\n    LONG     yDest;\n    LONG     cxDest;\n    LONG     cyDest;\n    DWORD    dwRop;\n    LONG     xSrc;\n    LONG     ySrc;\n    XFORM    xformSrc;\n    COLORREF crBkColorSrc;\n    DWORD    iUsageSrc;\n    DWORD    offBmiSrc;\n    DWORD    cbBmiSrc;\n    DWORD    offBitsSrc;\n    DWORD    cbBitsSrc;\n    LONG     cxSrc;\n    LONG     cySrc;\n} EMRSTRETCHBLT, *PEMRSTRETCHBLT;\n\ntypedef struct {\n    EMR      emr;\n    RECTL    rclBounds;\n    LONG     xDest;\n    LONG     yDest;\n    LONG     cxDest;\n    LONG     cyDest;\n    DWORD    dwRop;\n    LONG     xSrc;\n    LONG     ySrc;\n    XFORM    xformSrc;\n    COLORREF crBkColorSrc;\n    DWORD    iUsageSrc;\n    DWORD    offBmiSrc;\n    DWORD    cbBmiSrc;\n    DWORD    offBitsSrc;\n    DWORD    cbBitsSrc;\n    LONG     cxSrc;\n    LONG     cySrc;\n} EMRALPHABLEND, *PEMRALPHABLEND;\n\ntypedef struct {\n    EMR   emr;\n    RECTL rclBounds;\n    LONG  xDest;\n    LONG  yDest;\n    LONG  xSrc;\n    LONG  ySrc;\n    LONG  cxSrc;\n    LONG  cySrc;\n    DWORD offBmiSrc;\n    DWORD cbBmiSrc;\n    DWORD offBitsSrc;\n    DWORD cbBitsSrc;\n    DWORD iUsageSrc;\n    DWORD dwRop;\n    LONG  cxDest;\n    LONG  cyDest;\n} EMRSTRETCHDIBITS, *PEMRSTRETCHDIBITS;\n\ntypedef struct {\n    EMR                   emr;\n    PIXELFORMATDESCRIPTOR pfd;\n} EMRPIXELFORMAT, *PEMRPIXELFORMAT;\n\ntypedef struct tagEMRGLSRECORD {\n  EMR   emr;\n  DWORD cbData;\n  BYTE  Data[1];\n} EMRGLSRECORD, *PEMRGLSRECORD;\n\ntypedef struct {\n  EMR   emr;\n  RECTL rclBounds;\n  DWORD cbData;\n  BYTE  Data[1];\n} EMRGLSBOUNDEDRECORD, *PEMRGLSBOUNDEDRECORD;\n\ntypedef INT (CALLBACK *ENHMFENUMPROC)(HDC, HANDLETABLE *,\n                                      const ENHMETARECORD *, INT, LPARAM);\n\n#define EMR_HEADER\t1\n#define EMR_POLYBEZIER\t2\n#define EMR_POLYGON\t3\n#define EMR_POLYLINE\t4\n#define EMR_POLYBEZIERTO\t5\n#define EMR_POLYLINETO\t6\n#define EMR_POLYPOLYLINE\t7\n#define EMR_POLYPOLYGON\t8\n#define EMR_SETWINDOWEXTEX\t9\n#define EMR_SETWINDOWORGEX\t10\n#define EMR_SETVIEWPORTEXTEX\t11\n#define EMR_SETVIEWPORTORGEX\t12\n#define EMR_SETBRUSHORGEX\t13\n#define EMR_EOF\t14\n#define EMR_SETPIXELV\t15\n#define EMR_SETMAPPERFLAGS\t16\n#define EMR_SETMAPMODE\t17\n#define EMR_SETBKMODE\t18\n#define EMR_SETPOLYFILLMODE\t19\n#define EMR_SETROP2\t20\n#define EMR_SETSTRETCHBLTMODE\t21\n#define EMR_SETTEXTALIGN\t22\n#define EMR_SETCOLORADJUSTMENT\t23\n#define EMR_SETTEXTCOLOR\t24\n#define EMR_SETBKCOLOR\t25\n#define EMR_OFFSETCLIPRGN\t26\n#define EMR_MOVETOEX\t27\n#define EMR_SETMETARGN\t28\n#define EMR_EXCLUDECLIPRECT\t29\n#define EMR_INTERSECTCLIPRECT\t30\n#define EMR_SCALEVIEWPORTEXTEX\t31\n#define EMR_SCALEWINDOWEXTEX\t32\n#define EMR_SAVEDC\t33\n#define EMR_RESTOREDC\t34\n#define EMR_SETWORLDTRANSFORM\t35\n#define EMR_MODIFYWORLDTRANSFORM\t36\n#define EMR_SELECTOBJECT\t37\n#define EMR_CREATEPEN\t38\n#define EMR_CREATEBRUSHINDIRECT\t39\n#define EMR_DELETEOBJECT\t40\n#define EMR_ANGLEARC\t41\n#define EMR_ELLIPSE\t42\n#define EMR_RECTANGLE\t43\n#define EMR_ROUNDRECT\t44\n#define EMR_ARC\t45\n#define EMR_CHORD\t46\n#define EMR_PIE\t47\n#define EMR_SELECTPALETTE\t48\n#define EMR_CREATEPALETTE\t49\n#define EMR_SETPALETTEENTRIES\t50\n#define EMR_RESIZEPALETTE\t51\n#define EMR_REALIZEPALETTE\t52\n#define EMR_EXTFLOODFILL\t53\n#define EMR_LINETO\t54\n#define EMR_ARCTO\t55\n#define EMR_POLYDRAW\t56\n#define EMR_SETARCDIRECTION\t57\n#define EMR_SETMITERLIMIT\t58\n#define EMR_BEGINPATH\t59\n#define EMR_ENDPATH\t60\n#define EMR_CLOSEFIGURE\t61\n#define EMR_FILLPATH\t62\n#define EMR_STROKEANDFILLPATH\t63\n#define EMR_STROKEPATH\t64\n#define EMR_FLATTENPATH\t65\n#define EMR_WIDENPATH\t66\n#define EMR_SELECTCLIPPATH\t67\n#define EMR_ABORTPATH\t68\n#define EMR_GDICOMMENT\t70\n#define EMR_FILLRGN\t71\n#define EMR_FRAMERGN\t72\n#define EMR_INVERTRGN\t73\n#define EMR_PAINTRGN\t74\n#define EMR_EXTSELECTCLIPRGN\t75\n#define EMR_BITBLT\t76\n#define EMR_STRETCHBLT\t77\n#define EMR_MASKBLT\t78\n#define EMR_PLGBLT\t79\n#define EMR_SETDIBITSTODEVICE\t80\n#define EMR_STRETCHDIBITS\t81\n#define EMR_EXTCREATEFONTINDIRECTW\t82\n#define EMR_EXTTEXTOUTA\t83\n#define EMR_EXTTEXTOUTW\t84\n#define EMR_POLYBEZIER16\t85\n#define EMR_POLYGON16\t86\n#define EMR_POLYLINE16\t87\n#define EMR_POLYBEZIERTO16\t88\n#define EMR_POLYLINETO16\t89\n#define EMR_POLYPOLYLINE16\t90\n#define EMR_POLYPOLYGON16\t91\n#define EMR_POLYDRAW16\t92\n#define EMR_CREATEMONOBRUSH\t93\n#define EMR_CREATEDIBPATTERNBRUSHPT\t94\n#define EMR_EXTCREATEPEN\t95\n#define EMR_POLYTEXTOUTA\t96\n#define EMR_POLYTEXTOUTW\t97\n#define EMR_SETICMMODE\t98\n#define EMR_CREATECOLORSPACE\t99\n#define EMR_SETCOLORSPACE\t100\n#define EMR_DELETECOLORSPACE\t101\n#define EMR_GLSRECORD\t102\n#define EMR_GLSBOUNDEDRECORD\t103\n#define EMR_PIXELFORMAT 104\n#define EMR_DRAWESCAPE \t105\n#define EMR_EXTESCAPE\t106\n#define EMR_STARTDOC\t107\n#define EMR_SMALLTEXTOUT\t108\n#define EMR_FORCEUFIMAPPING\t109\n#define EMR_NAMEDESCAPE\t110\n#define EMR_COLORCORRECTPALETTE\t111\n#define EMR_SETICMPROFILEA\t112\n#define EMR_SETICMPROFILEW\t113\n#define EMR_ALPHABLEND\t114\n#define EMR_SETLAYOUT\t115\n#define EMR_TRANSPARENTBLT\t116\n#define EMR_RESERVED_117\t117\n#define EMR_GRADIENTFILL\t118\n#define EMR_SETLINKEDUFI\t119\n#define EMR_SETTEXTJUSTIFICATION\t120\n#define EMR_COLORMATCHTOTARGETW\t121\n#define EMR_CREATECOLORSPACEW\t122\n\n#define EMR_MIN 1\n#define EMR_MAX 122\n\n#define ENHMETA_SIGNATURE\t1179469088\n#define ENHMETA_STOCK_OBJECT\t0x80000000\n\n#define GDICOMMENT_IDENTIFIER         0x43494447\n#define GDICOMMENT_WINDOWS_METAFILE   0x80000001\n#define GDICOMMENT_BEGINGROUP         0x00000002\n#define GDICOMMENT_ENDGROUP           0x00000003\n#define GDICOMMENT_MULTIFORMATS       0x40000004\n#define GDICOMMENT_UNICODE_STRING     0x00000040\n#define GDICOMMENT_UNICODE_END        0x00000080\n#define EPS_SIGNATURE                 0x46535045\n\n#define CCHDEVICENAME 32\n#define CCHFORMNAME   32\n\ntypedef struct\n{\n    BYTE   dmDeviceName[CCHDEVICENAME];\n    WORD   dmSpecVersion;\n    WORD   dmDriverVersion;\n    WORD   dmSize;\n    WORD   dmDriverExtra;\n    DWORD  dmFields;\n    union {\n      struct {\n\tshort  dmOrientation;\n\tshort  dmPaperSize;\n\tshort  dmPaperLength;\n\tshort  dmPaperWidth;\n        short  dmScale;\n        short  dmCopies;\n        short  dmDefaultSource;\n        short  dmPrintQuality;\n      } DUMMYSTRUCTNAME1;\n      struct {\n        POINTL dmPosition;\n        DWORD dmDisplayOrientation;\n        DWORD dmDisplayFixedOutput;\n      } DUMMYSTRUCTNAME2;\n    } DUMMYUNIONNAME1;\n    short  dmColor;\n    short  dmDuplex;\n    short  dmYResolution;\n    short  dmTTOption;\n    short  dmCollate;\n    BYTE   dmFormName[CCHFORMNAME];\n    WORD   dmLogPixels;\n    DWORD  dmBitsPerPel;\n    DWORD  dmPelsWidth;\n    DWORD  dmPelsHeight;\n    union {\n      DWORD dmDisplayFlags;\n      DWORD dmNup;\n    } DUMMYUNIONNAME2;\n    DWORD  dmDisplayFrequency;\n    DWORD  dmICMMethod;\n    DWORD  dmICMIntent;\n    DWORD  dmMediaType;\n    DWORD  dmDitherType;\n    DWORD  dmReserved1;\n    DWORD  dmReserved2;\n    DWORD  dmPanningWidth;\n    DWORD  dmPanningHeight;\n} DEVMODEA, *PDEVMODEA, *LPDEVMODEA;\n\ntypedef struct\n{\n    WCHAR  dmDeviceName[CCHDEVICENAME];\n    WORD   dmSpecVersion;\n    WORD   dmDriverVersion;\n    WORD   dmSize;\n    WORD   dmDriverExtra;\n    DWORD  dmFields;\n    union {\n      struct {\n\tshort  dmOrientation;\n\tshort  dmPaperSize;\n\tshort  dmPaperLength;\n\tshort  dmPaperWidth;\n        short  dmScale;\n        short  dmCopies;\n        short  dmDefaultSource;\n        short  dmPrintQuality;\n      } DUMMYSTRUCTNAME1;\n      struct {\n        POINTL dmPosition;\n        DWORD dmDisplayOrientation;\n        DWORD dmDisplayFixedOutput;\n      } DUMMYSTRUCTNAME2;\n    } DUMMYUNIONNAME1;\n    short  dmColor;\n    short  dmDuplex;\n    short  dmYResolution;\n    short  dmTTOption;\n    short  dmCollate;\n    WCHAR  dmFormName[CCHFORMNAME];\n    WORD   dmLogPixels;\n    DWORD  dmBitsPerPel;\n    DWORD  dmPelsWidth;\n    DWORD  dmPelsHeight;\n    union {\n      DWORD dmDisplayFlags;\n      DWORD dmNup;\n    } DUMMYUNIONNAME2;\n    DWORD  dmDisplayFrequency;\n    DWORD  dmICMMethod;\n    DWORD  dmICMIntent;\n    DWORD  dmMediaType;\n    DWORD  dmDitherType;\n    DWORD  dmReserved1;\n    DWORD  dmReserved2;\n    DWORD  dmPanningWidth;\n    DWORD  dmPanningHeight;\n} DEVMODEW, *PDEVMODEW, *LPDEVMODEW;\n\nDECL_WINELIB_TYPE_AW(DEVMODE)\nDECL_WINELIB_TYPE_AW(PDEVMODE)\nDECL_WINELIB_TYPE_AW(LPDEVMODE)\n\n#define DM_SPECVERSION  0x401\n#define DM_UPDATE\t1\n#define DM_COPY\t\t2\n#define DM_PROMPT\t4\n#define DM_MODIFY\t8\n\n#define DM_IN_BUFFER      DM_MODIFY\n#define DM_IN_PROMPT      DM_PROMPT\n#define DM_OUT_BUFFER     DM_COPY\n#define DM_OUT_DEFAULT    DM_UPDATE\n\n#define DM_ORIENTATION          __MSABI_LONG(0x00000001)\n#define DM_PAPERSIZE            __MSABI_LONG(0x00000002)\n#define DM_PAPERLENGTH          __MSABI_LONG(0x00000004)\n#define DM_PAPERWIDTH           __MSABI_LONG(0x00000008)\n#define DM_SCALE                __MSABI_LONG(0x00000010)\n#define DM_POSITION             __MSABI_LONG(0x00000020)\n#define DM_NUP                  __MSABI_LONG(0x00000040)\n#define DM_DISPLAYORIENTATION   __MSABI_LONG(0x00000080)\n#define DM_COPIES               __MSABI_LONG(0x00000100)\n#define DM_DEFAULTSOURCE        __MSABI_LONG(0x00000200)\n#define DM_PRINTQUALITY         __MSABI_LONG(0x00000400)\n#define DM_COLOR                __MSABI_LONG(0x00000800)\n#define DM_DUPLEX               __MSABI_LONG(0x00001000)\n#define DM_YRESOLUTION          __MSABI_LONG(0x00002000)\n#define DM_TTOPTION             __MSABI_LONG(0x00004000)\n#define DM_COLLATE              __MSABI_LONG(0x00008000)\n#define DM_FORMNAME             __MSABI_LONG(0x00010000)\n#define DM_LOGPIXELS            __MSABI_LONG(0x00020000)\n#define DM_BITSPERPEL           __MSABI_LONG(0x00040000)\n#define DM_PELSWIDTH            __MSABI_LONG(0x00080000)\n#define DM_PELSHEIGHT           __MSABI_LONG(0x00100000)\n#define DM_DISPLAYFLAGS         __MSABI_LONG(0x00200000)\n#define DM_DISPLAYFREQUENCY     __MSABI_LONG(0x00400000)\n#define DM_ICMMETHOD            __MSABI_LONG(0x00800000)\n#define DM_ICMINTENT            __MSABI_LONG(0x01000000)\n#define DM_MEDIATYPE            __MSABI_LONG(0x02000000)\n#define DM_DITHERTYPE           __MSABI_LONG(0x04000000)\n#define DM_PANNINGWIDTH         __MSABI_LONG(0x08000000)\n#define DM_PANNINGHEIGHT        __MSABI_LONG(0x10000000)\n#define DM_DISPLAYFIXEDOUTPUT   __MSABI_LONG(0x20000000)\n\n#define DM_GRAYSCALE            1\n#define DM_INTERLACED           2\n#define DMDISPLAYFLAGS_TEXTMODE 4\n\n#define DMORIENT_PORTRAIT\t1\n#define DMORIENT_LANDSCAPE\t2\n\n#define DMPAPER_FIRST              DMPAPER_LETTER\n#define DMPAPER_LETTER\t\t   1\n#define DMPAPER_LETTERSMALL        2\n#define DMPAPER_TABLOID            3\n#define DMPAPER_LEDGER             4\n#define DMPAPER_LEGAL\t\t   5\n#define DMPAPER_STATEMENT          6\n#define DMPAPER_EXECUTIVE\t   7\n#define DMPAPER_A3\t\t   8\n#define DMPAPER_A4\t\t   9\n#define DMPAPER_A4SMALL            10\n#define DMPAPER_A5\t\t   11\n#define DMPAPER_B4                 12\n#define DMPAPER_B5                 13\n#define DMPAPER_FOLIO              14\n#define DMPAPER_QUARTO             15\n#define DMPAPER_10X14              16\n#define DMPAPER_11X17              17\n#define DMPAPER_NOTE               18\n#define DMPAPER_ENV_9              19\n#define DMPAPER_ENV_10\t\t   20\n#define DMPAPER_ENV_11             21\n#define DMPAPER_ENV_12             22\n#define DMPAPER_ENV_14             23\n#define DMPAPER_CSHEET             24\n#define DMPAPER_DSHEET             25\n#define DMPAPER_ESHEET             26\n#define DMPAPER_ENV_DL\t\t   27\n#define DMPAPER_ENV_C5\t\t   28\n#define DMPAPER_ENV_C3             29\n#define DMPAPER_ENV_C4             30\n#define DMPAPER_ENV_C6             31\n#define DMPAPER_ENV_C65            32\n#define DMPAPER_ENV_B4             33\n#define DMPAPER_ENV_B5\t\t   34\n#define DMPAPER_ENV_B6             35\n#define DMPAPER_ENV_ITALY          36\n#define DMPAPER_ENV_MONARCH\t   37\n#define DMPAPER_ENV_PERSONAL       38\n#define DMPAPER_FANFOLD_US         39\n#define DMPAPER_FANFOLD_STD_GERMAN 40\n#define DMPAPER_FANFOLD_LGL_GERMAN 41\n#define DMPAPER_ISO_B4             42\n#define DMPAPER_JAPANESE_POSTCARD  43\n#define DMPAPER_9X11               44\n#define DMPAPER_10X11              45\n#define DMPAPER_15X11              46\n#define DMPAPER_ENV_INVITE         47\n#define DMPAPER_RESERVED_48        48\n#define DMPAPER_RESERVED_49        49\n#define DMPAPER_LETTER_EXTRA       50\n#define DMPAPER_LEGAL_EXTRA        51\n#define DMPAPER_TABLOID_EXTRA      52\n#define DMPAPER_A4_EXTRA           53\n#define DMPAPER_LETTER_TRANSVERSE  54\n#define DMPAPER_A4_TRANSVERSE      55\n#define DMPAPER_LETTER_EXTRA_TRANSVERSE 56\n#define DMPAPER_A_PLUS             57\n#define DMPAPER_B_PLUS             58\n#define DMPAPER_LETTER_PLUS        59\n#define DMPAPER_A4_PLUS            60\n#define DMPAPER_A5_TRANSVERSE      61\n#define DMPAPER_B5_TRANSVERSE      62\n#define DMPAPER_A3_EXTRA           63\n#define DMPAPER_A5_EXTRA           64\n#define DMPAPER_B5_EXTRA           65\n#define DMPAPER_A2                 66\n#define DMPAPER_A3_TRANSVERSE      67\n#define DMPAPER_A3_EXTRA_TRANSVERSE           68\n#define DMPAPER_DBL_JAPANESE_POSTCARD         69\n#define DMPAPER_A6                 70\n#define DMPAPER_JENV_KAKU2         71\n#define DMPAPER_JENV_KAKU3         72\n#define DMPAPER_JENV_CHOU3         73\n#define DMPAPER_JENV_CHOU4         74\n#define DMPAPER_LETTER_ROTATED     75\n#define DMPAPER_A3_ROTATED         76\n#define DMPAPER_A4_ROTATED         77\n#define DMPAPER_A5_ROTATED         78\n#define DMPAPER_B4_JIS_ROTATED     79\n#define DMPAPER_B5_JIS_ROTATED     80\n#define DMPAPER_JAPANESE_POSTCARD_ROTATED     81\n#define DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED 82\n#define DMPAPER_A6_ROTATED         83\n#define DMPAPER_JENV_KAKU2_ROTATED 84\n#define DMPAPER_JENV_KAKU3_ROTATED 85\n#define DMPAPER_JENV_CHOU3_ROTATED 86\n#define DMPAPER_JENV_CHOU4_ROTATED 87\n#define DMPAPER_B6_JIS             88\n#define DMPAPER_B6_JIS_ROTATED     89\n#define DMPAPER_12X11              90\n#define DMPAPER_JENV_YOU4          91\n#define DMPAPER_JENV_YOU4_ROTATED  92\n#define DMPAPER_P16K               93\n#define DMPAPER_P32K               94\n#define DMPAPER_P32KBIG            95\n#define DMPAPER_PENV_1             96\n#define DMPAPER_PENV_2             97\n#define DMPAPER_PENV_3             98\n#define DMPAPER_PENV_4             99\n#define DMPAPER_PENV_5             100\n#define DMPAPER_PENV_6             101\n#define DMPAPER_PENV_7             102\n#define DMPAPER_PENV_8             103\n#define DMPAPER_PENV_9             104\n#define DMPAPER_PENV_10            105\n#define DMPAPER_P16K_ROTATED       106\n#define DMPAPER_P32K_ROTATED       107\n#define DMPAPER_P32KBIG_ROTATED    108\n#define DMPAPER_PENV_1_ROTATED     109\n#define DMPAPER_PENV_2_ROTATED     110\n#define DMPAPER_PENV_3_ROTATED     111\n#define DMPAPER_PENV_4_ROTATED     112\n#define DMPAPER_PENV_5_ROTATED     113\n#define DMPAPER_PENV_6_ROTATED     114\n#define DMPAPER_PENV_7_ROTATED     115\n#define DMPAPER_PENV_8_ROTATED     116\n#define DMPAPER_PENV_9_ROTATED     117\n#define DMPAPER_PENV_10_ROTATED    118\n\n#define DMPAPER_LAST               DMPAPER_PENV_10_ROTATED\n#define DMPAPER_USER               256\n\n#define DMBIN_FIRST             DMBIN_UPPER\n#define DMBIN_UPPER\t\t1\n#define DMBIN_ONLYONE           1\n#define DMBIN_LOWER\t\t2\n#define DMBIN_MIDDLE\t\t3\n#define DMBIN_MANUAL\t\t4\n#define DMBIN_ENVELOPE\t\t5\n#define DMBIN_ENVMANUAL\t\t6\n#define DMBIN_AUTO\t\t7\n#define DMBIN_TRACTOR           8\n#define DMBIN_SMALLFMT          9\n#define DMBIN_LARGEFMT          10\n#define DMBIN_LARGECAPACITY\t11\n#define DMBIN_CASSETTE          14\n#define DMBIN_FORMSOURCE        15\n#define DMBIN_LAST              DMBIN_FORMSOURCE\n#define DMBIN_USER              256\n\n#define DMRES_DRAFT             (-1)\n#define DMRES_LOW               (-2)\n#define DMRES_MEDIUM            (-3)\n#define DMRES_HIGH              (-4)\n\n#define DMCOLOR_MONOCHROME\t1\n#define DMCOLOR_COLOR\t\t2\n\n#define DMDUP_SIMPLEX           1\n#define DMDUP_VERTICAL          2\n#define DMDUP_HORIZONTAL        3\n\n#define DMTT_BITMAP\t\t1\n#define DMTT_DOWNLOAD\t\t2\n#define DMTT_SUBDEV\t\t3\n#define DMTT_DOWNLOAD_OUTLINE   4\n\n#define DMCOLLATE_FALSE         0\n#define DMCOLLATE_TRUE          1\n\n#define DMICMMETHOD_NONE        1\n#define DMICMMETHOD_SYSTEM      2\n#define DMICMMETHOD_DRIVER      3\n#define DMICMMETHOD_DEVICE      4\n#define DMICMMETHOD_USER        256\n\n#define DMICM_SATURATE          1\n#define DMICM_CONTRAST          2\n#define DMICM_COLORMETRIC       3\n#define DMICM_USER              256\n\n#define DMMEDIA_STANDARD        1\n#define DMMEDIA_TRANSPARENCY    2\n#define DMMEDIA_GLOSSY          3\n#define DMMEDIA_USER            256\n\n#define DMDITHER_NONE           1\n#define DMDITHER_COARSE         2\n#define DMDITHER_FINE           3\n#define DMDITHER_LINEART        4\n#define DMDITHER_GRAYSCALE      5\n#define DMDITHER_USER           256\n\n#define DMDO_DEFAULT            0\n#define DMDO_90                 1\n#define DMDO_180                2\n#define DMDO_270                3\n\n#define DMDFO_DEFAULT           0\n#define DMDFO_STRETCH           1\n#define DMDFO_CENTER            2\n\ntypedef struct\n{\n    INT    cbSize;\n    LPCSTR   lpszDocName;\n    LPCSTR   lpszOutput;\n    LPCSTR   lpszDatatype;\n    DWORD    fwType;\n} DOCINFOA, *LPDOCINFOA;\n\ntypedef struct\n{\n    INT    cbSize;\n    LPCWSTR  lpszDocName;\n    LPCWSTR  lpszOutput;\n    LPCWSTR  lpszDatatype;\n    DWORD    fwType;\n} DOCINFOW, *LPDOCINFOW;\n\nDECL_WINELIB_TYPE_AW(DOCINFO)\nDECL_WINELIB_TYPE_AW(LPDOCINFO)\n\n#define DI_APPBANDING     0x0001\n\n/* Flags for PolyDraw and GetPath */\n#define PT_CLOSEFIGURE          0x0001\n#define PT_LINETO               0x0002\n#define PT_BEZIERTO             0x0004\n#define PT_MOVETO               0x0006\n\n#define\tRDH_RECTANGLES  1\n\ntypedef struct _RGNDATAHEADER {\n    DWORD\tdwSize;\n    DWORD\tiType;\n    DWORD\tnCount;\n    DWORD\tnRgnSize;\n    RECT\trcBound;\n} RGNDATAHEADER,*PRGNDATAHEADER;\n\ntypedef struct _RGNDATA {\n    RGNDATAHEADER\trdh;\n    char\t\tBuffer[1];\n} RGNDATA,*PRGNDATA,*LPRGNDATA;\n\ntypedef BOOL (CALLBACK *ABORTPROC)(HDC, INT);\n\ntypedef enum {\n    DISPLAYCONFIG_DEVICE_INFO_GET_SOURCE_NAME                = 1,\n    DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME                = 2,\n    DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_PREFERRED_MODE      = 3,\n    DISPLAYCONFIG_DEVICE_INFO_GET_ADAPTER_NAME               = 4,\n    DISPLAYCONFIG_DEVICE_INFO_SET_TARGET_PERSISTENCE         = 5,\n    DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_BASE_TYPE           = 6,\n    DISPLAYCONFIG_DEVICE_INFO_GET_SUPPORT_VIRTUAL_RESOLUTION = 7,\n    DISPLAYCONFIG_DEVICE_INFO_SET_SUPPORT_VIRTUAL_RESOLUTION = 8,\n    DISPLAYCONFIG_DEVICE_INFO_FORCE_UINT32                   = 0xffffffff\n} DISPLAYCONFIG_DEVICE_INFO_TYPE;\n\ntypedef struct DISPLAYCONFIG_DEVICE_INFO_HEADER {\n    DISPLAYCONFIG_DEVICE_INFO_TYPE type;\n    UINT32                         size;\n    LUID                           adapterId;\n    UINT32                         id;\n} DISPLAYCONFIG_DEVICE_INFO_HEADER;\n\ntypedef struct {\n    DWORD\tcb;\n    CHAR\tDeviceName[32];\n    CHAR\tDeviceString[128];\n    DWORD\tStateFlags;\n    CHAR\tDeviceID[128];\n    CHAR\tDeviceKey[128];\n} DISPLAY_DEVICEA,*PDISPLAY_DEVICEA,*LPDISPLAY_DEVICEA;\n\ntypedef struct {\n    DWORD\tcb;\n    WCHAR\tDeviceName[32];\n    WCHAR\tDeviceString[128];\n    DWORD\tStateFlags;\n    WCHAR\tDeviceID[128];\n    WCHAR\tDeviceKey[128];\n} DISPLAY_DEVICEW,*PDISPLAY_DEVICEW,*LPDISPLAY_DEVICEW;\nDECL_WINELIB_TYPE_AW(DISPLAY_DEVICE)\nDECL_WINELIB_TYPE_AW(PDISPLAY_DEVICE)\nDECL_WINELIB_TYPE_AW(LPDISPLAY_DEVICE)\n\n/* DISPLAY_DEVICE.StateFlags (?)*/\n#define\tDISPLAY_DEVICE_ATTACHED_TO_DESKTOP\t0x00000001\n#define\tDISPLAY_DEVICE_MULTI_DRIVER\t\t0x00000002\n#define\tDISPLAY_DEVICE_PRIMARY_DEVICE\t\t0x00000004\n#define\tDISPLAY_DEVICE_MIRRORING_DRIVER\t\t0x00000008\n#define\tDISPLAY_DEVICE_VGA_COMPATIBLE\t\t0x00000010\n\ntypedef struct DISPLAYCONFIG_DESKTOP_IMAGE_INFO\n{\n    POINTL PathSourceSize;\n    RECTL DesktopImageRegion;\n    RECTL DesktopImageClip;\n} DISPLAYCONFIG_DESKTOP_IMAGE_INFO;\n\ntypedef enum\n{\n    DISPLAYCONFIG_MODE_INFO_TYPE_SOURCE = 1,\n    DISPLAYCONFIG_MODE_INFO_TYPE_TARGET = 2,\n    DISPLAYCONFIG_MODE_INFO_TYPE_DESKTOP_IMAGE = 3,\n    DISPLAYCONFIG_MODE_INFO_TYPE_FORCE_UINT32 = 0xffffffff\n} DISPLAYCONFIG_MODE_INFO_TYPE;\n\ntypedef enum\n{\n    DISPLAYCONFIG_PIXELFORMAT_8BPP = 1,\n    DISPLAYCONFIG_PIXELFORMAT_16BPP = 2,\n    DISPLAYCONFIG_PIXELFORMAT_24BPP = 3,\n    DISPLAYCONFIG_PIXELFORMAT_32BPP = 4,\n    DISPLAYCONFIG_PIXELFORMAT_NONGDI = 5,\n    DISPLAYCONFIG_PIXELFORMAT_FORCE_UINT32 = 0xffffffff\n} DISPLAYCONFIG_PIXELFORMAT;\n\ntypedef enum\n{\n    DISPLAYCONFIG_ROTATION_IDENTITY = 1,\n    DISPLAYCONFIG_ROTATION_ROTATE90 = 2,\n    DISPLAYCONFIG_ROTATION_ROTATE180 = 3,\n    DISPLAYCONFIG_ROTATION_ROTATE270 = 4,\n    DISPLAYCONFIG_ROTATION_FORCE_UINT32 = 0xffffffff\n} DISPLAYCONFIG_ROTATION;\n\ntypedef enum\n{\n    DISPLAYCONFIG_SCALING_IDENTITY = 1,\n    DISPLAYCONFIG_SCALING_CENTERED = 2,\n    DISPLAYCONFIG_SCALING_STRETCHED = 3,\n    DISPLAYCONFIG_SCALING_ASPECTRATIOCENTEREDMAX = 4,\n    DISPLAYCONFIG_SCALING_CUSTOM = 5,\n    DISPLAYCONFIG_SCALING_PREFERRED = 128,\n    DISPLAYCONFIG_SCALING_FORCE_UINT32 = 0xffffffff\n} DISPLAYCONFIG_SCALING;\n\ntypedef enum\n{\n    DISPLAYCONFIG_SCANLINE_ORDERING_UNSPECIFIED = 0,\n    DISPLAYCONFIG_SCANLINE_ORDERING_PROGRESSIVE = 1,\n    DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED = 2,\n    DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED_UPPERFIELDFIRST = DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED,\n    DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED_LOWERFIELDFIRST = 3,\n    DISPLAYCONFIG_SCANLINE_ORDERING_FORCE_UINT32 = 0xffffffff\n} DISPLAYCONFIG_SCANLINE_ORDERING;\n\ntypedef enum\n{\n    DISPLAYCONFIG_TOPOLOGY_INTERNAL = 0x00000001,\n    DISPLAYCONFIG_TOPOLOGY_CLONE = 0x00000002,\n    DISPLAYCONFIG_TOPOLOGY_EXTEND = 0x00000004,\n    DISPLAYCONFIG_TOPOLOGY_EXTERNAL = 0x00000008,\n    DISPLAYCONFIG_TOPOLOGY_FORCE_UINT32 = 0xffffffff\n} DISPLAYCONFIG_TOPOLOGY_ID;\n\ntypedef enum\n{\n    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_OTHER = -1,\n    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HD15 = 0,\n    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SVIDEO = 1,\n    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_COMPOSITE_VIDEO = 2,\n    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_COMPONENT_VIDEO = 3,\n    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DVI = 4,\n    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HDMI = 5,\n    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_LVDS = 6,\n    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_D_JPN = 8,\n    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SDI = 9,\n    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EXTERNAL = 10,\n    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EMBEDDED = 11,\n    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_UDI_EXTERNAL = 12,\n    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_UDI_EMBEDDED = 13,\n    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SDTVDONGLE = 14,\n    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_MIRACAST = 15,\n    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_INTERNAL = 0x80000000,\n    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_FORCE_UINT32 = 0xffffffff\n} DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY;\n\ntypedef struct DISPLAYCONFIG_2DREGION\n{\n    UINT32 cx;\n    UINT32 cy;\n} DISPLAYCONFIG_2DREGION;\n\ntypedef struct DISPLAYCONFIG_RATIONAL\n{\n    UINT32 Numerator;\n    UINT32 Denominator;\n} DISPLAYCONFIG_RATIONAL;\n\ntypedef struct DISPLAYCONFIG_PATH_SOURCE_INFO\n{\n    LUID adapterId;\n    UINT32 id;\n    union {\n        UINT32 modeInfoIdx;\n        struct {\n            UINT32 cloneGroupId :16;\n            UINT32 sourceModeInfoIdx :16;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME;\n    UINT32 statusFlags;\n} DISPLAYCONFIG_PATH_SOURCE_INFO;\n\ntypedef struct DISPLAYCONFIG_SOURCE_MODE\n{\n    UINT32 width;\n    UINT32 height;\n    DISPLAYCONFIG_PIXELFORMAT pixelFormat;\n    POINTL position;\n} DISPLAYCONFIG_SOURCE_MODE;\n\ntypedef struct DISPLAYCONFIG_VIDEO_SIGNAL_INFO\n{\n  UINT64 pixelRate;\n  DISPLAYCONFIG_RATIONAL hSyncFreq;\n  DISPLAYCONFIG_RATIONAL vSyncFreq;\n  DISPLAYCONFIG_2DREGION activeSize;\n  DISPLAYCONFIG_2DREGION totalSize;\n  union {\n      struct {\n          UINT32 videoStandard :16;\n          UINT32 vSyncFreqDivider :6;\n          UINT32 reserved :10;\n      } AdditionalSignalInfo;\n      UINT32 videoStandard;\n  } DUMMYUNIONNAME;\n  DISPLAYCONFIG_SCANLINE_ORDERING scanLineOrdering;\n} DISPLAYCONFIG_VIDEO_SIGNAL_INFO;\n\ntypedef struct DISPLAYCONFIG_PATH_TARGET_INFO\n{\n    LUID adapterId;\n    UINT32 id;\n    union {\n        UINT32 modeInfoIdx;\n        struct {\n            UINT32 desktopModeInfoIdx :16;\n            UINT32 targetModeInfoIdx :16;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME;\n    DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY outputTechnology;\n    DISPLAYCONFIG_ROTATION rotation;\n    DISPLAYCONFIG_SCALING scaling;\n    DISPLAYCONFIG_RATIONAL refreshRate;\n    DISPLAYCONFIG_SCANLINE_ORDERING scanLineOrdering;\n    BOOL targetAvailable;\n    UINT32 statusFlags;\n} DISPLAYCONFIG_PATH_TARGET_INFO;\n\ntypedef struct DISPLAYCONFIG_TARGET_MODE\n{\n    DISPLAYCONFIG_VIDEO_SIGNAL_INFO targetVideoSignalInfo;\n} DISPLAYCONFIG_TARGET_MODE;\n\ntypedef struct DISPLAYCONFIG_PATH_INFO\n{\n    DISPLAYCONFIG_PATH_SOURCE_INFO sourceInfo;\n    DISPLAYCONFIG_PATH_TARGET_INFO targetInfo;\n    UINT32 flags;\n} DISPLAYCONFIG_PATH_INFO;\n\ntypedef struct DISPLAYCONFIG_MODE_INFO\n{\n    DISPLAYCONFIG_MODE_INFO_TYPE infoType;\n    UINT32 id;\n    LUID adapterId;\n    union {\n        DISPLAYCONFIG_TARGET_MODE targetMode;\n        DISPLAYCONFIG_SOURCE_MODE sourceMode;\n        DISPLAYCONFIG_DESKTOP_IMAGE_INFO desktopImageInfo;\n    } DUMMYUNIONNAME;\n} DISPLAYCONFIG_MODE_INFO;\n\n/* For GetDisplayConfigBufferSizes */\n#define QDC_ALL_PATHS                           0x00000001\n#define QDC_ONLY_ACTIVE_PATHS                   0x00000002\n#define QDC_DATABASE_CURRENT                    0x00000004\n\n#define GDI_ERROR                               (~0u)\n#define HGDI_ERROR                              ((HANDLE)~(ULONG_PTR)0)\n\n/* AddFontResourceEx flags */\n#define FR_PRIVATE  0x10\n#define FR_NOT_ENUM 0x20\n\n/* Mirroring flags */\n#define LAYOUT_LTR                         0x00000000\n#define LAYOUT_RTL                         0x00000001\n#define LAYOUT_BITMAPORIENTATIONPRESERVED  0x00000008\n#define NOMIRRORBITMAP                     0x80000000\n\n/* For DRAWPATTERNRECT Escape */\ntypedef struct _DRAWPATRECT\n{\n    POINT ptPosition;\n    POINT ptSize;\n    WORD  wStyle;\n    WORD  wPattern;\n} DRAWPATRECT, *PDRAWPATRECT;\n\ntypedef struct tagWCRANGE {\n  WCHAR  wcLow;\n  USHORT cGlyphs;\n} WCRANGE, *PWCRANGE, *LPWCRANGE;\n\ntypedef struct tagGLYPHSET {\n  DWORD    cbThis;\n  DWORD    flAccel;\n  DWORD    cGlyphsSupported;\n  DWORD    cRanges;\n  WCRANGE  ranges[1];\n} GLYPHSET, *PGLYPHSET, *LPGLYPHSET;\n\n#define GS_8BIT_INDICES 0x00000001\n\nWINGDIAPI INT         WINAPI AbortDoc(HDC);\nWINGDIAPI BOOL        WINAPI AbortPath(HDC);\nWINGDIAPI INT         WINAPI AddFontResourceA(LPCSTR);\nWINGDIAPI INT         WINAPI AddFontResourceW(LPCWSTR);\n#define                      AddFontResource WINELIB_NAME_AW(AddFontResource)\nWINGDIAPI INT         WINAPI AddFontResourceExA(LPCSTR, DWORD, PVOID);\nWINGDIAPI INT         WINAPI AddFontResourceExW(LPCWSTR, DWORD, PVOID);\n#define                      AddFontResourceEx WINELIB_NAME_AW(AddFontResourceEx)\nWINGDIAPI HANDLE      WINAPI AddFontMemResourceEx(PVOID, DWORD, PVOID, DWORD *);\nWINGDIAPI BOOL        WINAPI AlphaBlend(HDC,int,int,int,int,HDC,int,int,int,int,BLENDFUNCTION);\nWINGDIAPI BOOL        WINAPI AngleArc(HDC, INT, INT, DWORD, FLOAT, FLOAT);\nWINGDIAPI BOOL        WINAPI AnimatePalette(HPALETTE,UINT,UINT,const PALETTEENTRY*);\nWINGDIAPI BOOL        WINAPI Arc(HDC,INT,INT,INT,INT,INT,INT,INT,INT);\nWINGDIAPI BOOL        WINAPI ArcTo(HDC, INT, INT, INT, INT, INT, INT, INT, INT);\nWINGDIAPI BOOL        WINAPI BeginPath(HDC);\nWINGDIAPI BOOL        WINAPI BitBlt(HDC,INT,INT,INT,INT,HDC,INT,INT,DWORD);\nWINGDIAPI INT         WINAPI ChoosePixelFormat(HDC,const PIXELFORMATDESCRIPTOR*);\nWINGDIAPI BOOL        WINAPI Chord(HDC,INT,INT,INT,INT,INT,INT,INT,INT);\nWINGDIAPI HENHMETAFILE WINAPI CloseEnhMetaFile(HDC);\nWINGDIAPI BOOL        WINAPI CloseFigure(HDC);\nWINGDIAPI HMETAFILE   WINAPI CloseMetaFile(HDC);\nWINGDIAPI INT         WINAPI CombineRgn(HRGN,HRGN,HRGN,INT);\nWINGDIAPI BOOL        WINAPI CombineTransform(LPXFORM,const XFORM *,const XFORM *);\nWINGDIAPI HENHMETAFILE WINAPI CopyEnhMetaFileA(HENHMETAFILE,LPCSTR);\nWINGDIAPI HENHMETAFILE WINAPI CopyEnhMetaFileW(HENHMETAFILE,LPCWSTR);\n#define                      CopyEnhMetaFile WINELIB_NAME_AW(CopyEnhMetaFile)\nWINGDIAPI HMETAFILE   WINAPI CopyMetaFileA(HMETAFILE,LPCSTR);\nWINGDIAPI HMETAFILE   WINAPI CopyMetaFileW(HMETAFILE,LPCWSTR);\n#define                      CopyMetaFile WINELIB_NAME_AW(CopyMetaFile)\nWINGDIAPI HBITMAP     WINAPI CreateBitmap(INT,INT,UINT,UINT,LPCVOID);\nWINGDIAPI HBITMAP     WINAPI CreateBitmapIndirect(const BITMAP*);\nWINGDIAPI HBRUSH      WINAPI CreateBrushIndirect(const LOGBRUSH*);\nWINGDIAPI HCOLORSPACE WINAPI CreateColorSpaceA(LPLOGCOLORSPACEA);\nWINGDIAPI HCOLORSPACE WINAPI CreateColorSpaceW(LPLOGCOLORSPACEW);\n#define                      CreateColorSpace WINELIB_NAME_AW(CreateColorSpace)\nWINGDIAPI HBITMAP     WINAPI CreateCompatibleBitmap(HDC,INT,INT);\nWINGDIAPI HDC         WINAPI CreateCompatibleDC(HDC);\nWINGDIAPI HDC         WINAPI CreateDCA(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*);\nWINGDIAPI HDC         WINAPI CreateDCW(LPCWSTR,LPCWSTR,LPCWSTR,const DEVMODEW*);\n#define                      CreateDC WINELIB_NAME_AW(CreateDC)\nWINGDIAPI HBITMAP     WINAPI CreateDIBitmap(HDC,const BITMAPINFOHEADER*,DWORD,LPCVOID,const BITMAPINFO*,UINT);\nWINGDIAPI HBRUSH      WINAPI CreateDIBPatternBrush(HGLOBAL,UINT);\nWINGDIAPI HBRUSH      WINAPI CreateDIBPatternBrushPt(const void*,UINT);\nWINGDIAPI HBITMAP     WINAPI CreateDIBSection(HDC, const BITMAPINFO *, UINT, void **, HANDLE, DWORD offset);\nWINGDIAPI HBITMAP     WINAPI CreateDiscardableBitmap(HDC,INT,INT);\nWINGDIAPI HRGN        WINAPI CreateEllipticRgn(INT,INT,INT,INT);\nWINGDIAPI HRGN        WINAPI CreateEllipticRgnIndirect(const RECT *);\nWINGDIAPI HDC         WINAPI CreateEnhMetaFileA(HDC,LPCSTR,const RECT*,LPCSTR);\nWINGDIAPI HDC         WINAPI CreateEnhMetaFileW(HDC,LPCWSTR,const RECT*,LPCWSTR);\n#define                      CreateEnhMetaFile WINELIB_NAME_AW(CreateEnhMetaFile)\nWINGDIAPI HFONT       WINAPI CreateFontA(INT,INT,INT,INT,INT,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPCSTR);\nWINGDIAPI HFONT       WINAPI CreateFontW(INT,INT,INT,INT,INT,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPCWSTR);\n#define                      CreateFont WINELIB_NAME_AW(CreateFont)\nWINGDIAPI HFONT       WINAPI CreateFontIndirectA(const LOGFONTA*);\nWINGDIAPI HFONT       WINAPI CreateFontIndirectW(const LOGFONTW*);\n#define                      CreateFontIndirect WINELIB_NAME_AW(CreateFontIndirect)\nWINGDIAPI HFONT       WINAPI CreateFontIndirectExA(const ENUMLOGFONTEXDVA*);\nWINGDIAPI HFONT       WINAPI CreateFontIndirectExW(const ENUMLOGFONTEXDVW*);\n#define                      CreateFontIndirectEx WINELIB_NAME_AW(CreateFontIndirectEx)\nWINGDIAPI HPALETTE    WINAPI CreateHalftonePalette(HDC);\nWINGDIAPI HBRUSH      WINAPI CreateHatchBrush(INT,COLORREF);\nWINGDIAPI HDC         WINAPI CreateICA(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*);\nWINGDIAPI HDC         WINAPI CreateICW(LPCWSTR,LPCWSTR,LPCWSTR,const DEVMODEW*);\n#define                      CreateIC WINELIB_NAME_AW(CreateIC)\nWINGDIAPI HDC         WINAPI CreateMetaFileA(LPCSTR);\nWINGDIAPI HDC         WINAPI CreateMetaFileW(LPCWSTR);\n#define                      CreateMetaFile WINELIB_NAME_AW(CreateMetaFile)\nWINGDIAPI HPALETTE    WINAPI CreatePalette(const LOGPALETTE*);\nWINGDIAPI HBRUSH      WINAPI CreatePatternBrush(HBITMAP);\nWINGDIAPI HPEN        WINAPI CreatePen(INT,INT,COLORREF);\nWINGDIAPI HPEN        WINAPI CreatePenIndirect(const LOGPEN*);\nWINGDIAPI HRGN        WINAPI CreatePolyPolygonRgn(const POINT*,const INT*,INT,INT);\nWINGDIAPI HRGN        WINAPI CreatePolygonRgn(const POINT*,INT,INT);\nWINGDIAPI HRGN        WINAPI CreateRectRgn(INT,INT,INT,INT);\nWINGDIAPI HRGN        WINAPI CreateRectRgnIndirect(const RECT*);\nWINGDIAPI HRGN        WINAPI CreateRoundRectRgn(INT,INT,INT,INT,INT,INT);\nWINGDIAPI BOOL        WINAPI CreateScalableFontResourceA(DWORD,LPCSTR,LPCSTR,LPCSTR);\nWINGDIAPI BOOL        WINAPI CreateScalableFontResourceW(DWORD,LPCWSTR,LPCWSTR,LPCWSTR);\n#define                      CreateScalableFontResource WINELIB_NAME_AW(CreateScalableFontResource)\nWINGDIAPI HBRUSH      WINAPI CreateSolidBrush(COLORREF);\nWINGDIAPI BOOL        WINAPI DPtoLP(HDC,LPPOINT,INT);\nWINGDIAPI BOOL        WINAPI DeleteColorSpace(HCOLORSPACE);\nWINGDIAPI BOOL        WINAPI DeleteDC(HDC);\nWINGDIAPI BOOL        WINAPI DeleteEnhMetaFile(HENHMETAFILE);\nWINGDIAPI BOOL        WINAPI DeleteMetaFile(HMETAFILE);\nWINGDIAPI BOOL        WINAPI DeleteObject(HGDIOBJ);\nWINGDIAPI INT         WINAPI DescribePixelFormat(HDC,int,UINT,LPPIXELFORMATDESCRIPTOR);\nWINGDIAPI INT         WINAPI DrawEscape(HDC,INT,INT,LPCSTR);\nWINGDIAPI BOOL        WINAPI Ellipse(HDC,INT,INT,INT,INT);\nWINGDIAPI INT         WINAPI EndDoc(HDC);\nWINGDIAPI BOOL        WINAPI EndPath(HDC);\nWINGDIAPI BOOL        WINAPI EnumEnhMetaFile(HDC,HENHMETAFILE,ENHMFENUMPROC,LPVOID,const RECT*);\nWINGDIAPI INT         WINAPI EnumFontFamiliesA(HDC,LPCSTR,FONTENUMPROCA,LPARAM);\nWINGDIAPI INT         WINAPI EnumFontFamiliesW(HDC,LPCWSTR,FONTENUMPROCW,LPARAM);\n#define                      EnumFontFamilies WINELIB_NAME_AW(EnumFontFamilies)\nWINGDIAPI INT         WINAPI EnumFontFamiliesExA(HDC,LPLOGFONTA,FONTENUMPROCA,LPARAM,DWORD);\nWINGDIAPI INT         WINAPI EnumFontFamiliesExW(HDC,LPLOGFONTW,FONTENUMPROCW,LPARAM,DWORD);\n#define                      EnumFontFamiliesEx WINELIB_NAME_AW(EnumFontFamiliesEx)\nWINGDIAPI INT         WINAPI EnumFontsA(HDC,LPCSTR,FONTENUMPROCA,LPARAM);\nWINGDIAPI INT         WINAPI EnumFontsW(HDC,LPCWSTR,FONTENUMPROCW,LPARAM);\n#define                      EnumFonts WINELIB_NAME_AW(EnumFonts)\nWINGDIAPI INT         WINAPI EnumICMProfilesA(HDC,ICMENUMPROCA,LPARAM);\nWINGDIAPI INT         WINAPI EnumICMProfilesW(HDC,ICMENUMPROCW,LPARAM);\n#define                      EnumICMProfiles WINELIB_NAME_AW(EnumICMProfiles)\nWINGDIAPI BOOL        WINAPI EnumMetaFile(HDC,HMETAFILE,MFENUMPROC,LPARAM);\nWINGDIAPI INT         WINAPI EnumObjects(HDC,INT,GOBJENUMPROC,LPARAM);\nWINGDIAPI BOOL        WINAPI EqualRgn(HRGN,HRGN);\nWINGDIAPI INT         WINAPI Escape(HDC,INT,INT,LPCSTR,LPVOID);\nWINGDIAPI INT         WINAPI ExcludeClipRect(HDC,INT,INT,INT,INT);\nWINGDIAPI HPEN        WINAPI ExtCreatePen(DWORD,DWORD,const LOGBRUSH*,DWORD,const DWORD*);\nWINGDIAPI HRGN        WINAPI ExtCreateRegion(const XFORM*,DWORD,const RGNDATA*);\nWINGDIAPI INT         WINAPI ExtEscape(HDC,INT,INT,LPCSTR,INT,LPSTR);\nWINGDIAPI BOOL        WINAPI ExtFloodFill(HDC,INT,INT,COLORREF,UINT);\nWINGDIAPI INT         WINAPI ExtSelectClipRgn(HDC,HRGN,INT);\nWINGDIAPI BOOL        WINAPI ExtTextOutA(HDC,INT,INT,UINT,const RECT*,LPCSTR,UINT,const INT*);\nWINGDIAPI BOOL        WINAPI ExtTextOutW(HDC,INT,INT,UINT,const RECT*,LPCWSTR,UINT,const INT*);\n#define                      ExtTextOut WINELIB_NAME_AW(ExtTextOut)\nWINGDIAPI BOOL        WINAPI FillPath(HDC);\nWINGDIAPI BOOL        WINAPI FillRgn(HDC,HRGN,HBRUSH);\nWINGDIAPI BOOL        WINAPI FixBrushOrgEx(HDC,INT,INT,LPPOINT);\nWINGDIAPI BOOL        WINAPI FlattenPath(HDC);\nWINGDIAPI BOOL        WINAPI FloodFill(HDC,INT,INT,COLORREF);\nWINGDIAPI BOOL        WINAPI FrameRgn(HDC,HRGN,HBRUSH,INT,INT);\nWINGDIAPI BOOL        WINAPI GdiAlphaBlend(HDC,int,int,int,int,HDC,int,int,int,int,BLENDFUNCTION);\nWINGDIAPI BOOL        WINAPI GdiComment(HDC,UINT,const BYTE *);\nWINGDIAPI DEVMODEW *  WINAPI GdiConvertToDevmodeW(const DEVMODEA *);\nWINGDIAPI BOOL        WINAPI GdiFlush(void);\nWINGDIAPI DWORD       WINAPI GdiGetBatchLimit(void);\nWINGDIAPI LONG        WINAPI GdiGetCharDimensions(HDC, LPTEXTMETRICW, LONG *);\nWINGDIAPI DWORD       WINAPI GdiGetCodePage(HDC);\nWINGDIAPI BOOL        WINAPI GdiGradientFill(HDC,PTRIVERTEX,ULONG,PVOID,ULONG,ULONG);\nWINGDIAPI BOOL        WINAPI GdiIsMetaFileDC(HDC);\nWINGDIAPI BOOL        WINAPI GdiIsMetaPrintDC(HDC);\nWINGDIAPI BOOL        WINAPI GdiIsPlayMetafileDC(HDC);\nWINGDIAPI DWORD       WINAPI GdiSetBatchLimit(DWORD);\nWINGDIAPI BOOL        WINAPI GdiTransparentBlt(HDC,int,int,int,int,HDC,int,int,int,int,UINT);\nWINGDIAPI INT         WINAPI GetArcDirection(HDC);\nWINGDIAPI BOOL        WINAPI GetAspectRatioFilterEx(HDC,LPSIZE);\nWINGDIAPI LONG        WINAPI GetBitmapBits(HBITMAP,LONG,LPVOID);\nWINGDIAPI BOOL        WINAPI GetBitmapDimensionEx(HBITMAP,LPSIZE);\nWINGDIAPI BOOL        WINAPI GetBrushOrgEx(HDC,LPPOINT);\nWINGDIAPI COLORREF    WINAPI GetBkColor(HDC);\nWINGDIAPI INT         WINAPI GetBkMode(HDC);\nWINGDIAPI UINT        WINAPI GetBoundsRect(HDC,LPRECT,UINT);\nWINGDIAPI BOOL        WINAPI GetCharABCWidthsA(HDC,UINT,UINT,LPABC);\nWINGDIAPI BOOL        WINAPI GetCharABCWidthsW(HDC,UINT,UINT,LPABC);\n#define                      GetCharABCWidths WINELIB_NAME_AW(GetCharABCWidths)\nWINGDIAPI BOOL        WINAPI GetCharABCWidthsFloatA(HDC,UINT,UINT,LPABCFLOAT);\nWINGDIAPI BOOL        WINAPI GetCharABCWidthsFloatW(HDC,UINT,UINT,LPABCFLOAT);\n#define                      GetCharABCWidthsFloat WINELIB_NAME_AW(GetCharABCWidthsFloat)\nWINGDIAPI BOOL        WINAPI GetCharABCWidthsI(HDC,UINT,UINT,LPWORD,LPABC);\nWINGDIAPI DWORD       WINAPI GetCharacterPlacementA(HDC,LPCSTR,INT,INT,GCP_RESULTSA*,DWORD);\nWINGDIAPI DWORD       WINAPI GetCharacterPlacementW(HDC,LPCWSTR,INT,INT,GCP_RESULTSW*,DWORD);\n#define                      GetCharacterPlacement WINELIB_NAME_AW(GetCharacterPlacement)\nWINGDIAPI BOOL        WINAPI GetCharWidth32A(HDC,UINT,UINT,LPINT);\nWINGDIAPI BOOL        WINAPI GetCharWidth32W(HDC,UINT,UINT,LPINT);\n#define                      GetCharWidth32 WINELIB_NAME_AW(GetCharWidth32)\nWINGDIAPI BOOL        WINAPI GetCharWidthA(HDC,UINT,UINT,LPINT);\nWINGDIAPI BOOL        WINAPI GetCharWidthI(HDC,UINT,UINT,LPWORD,LPINT);\nWINGDIAPI BOOL        WINAPI GetCharWidthW(HDC,UINT,UINT,LPINT);\n#define                      GetCharWidth WINELIB_NAME_AW(GetCharWidth)\nWINGDIAPI BOOL        WINAPI GetCharWidthFloatA(HDC,UINT,UINT,PFLOAT);\nWINGDIAPI BOOL        WINAPI GetCharWidthFloatW(HDC,UINT,UINT,PFLOAT);\n#define                      GetCharWidthFloat WINELIB_NAME_AW(GetCharWidthFloat)\nWINGDIAPI INT         WINAPI GetClipBox(HDC,LPRECT);\nWINGDIAPI INT         WINAPI GetClipRgn(HDC,HRGN);\nWINGDIAPI BOOL        WINAPI GetColorAdjustment(HDC, LPCOLORADJUSTMENT);\nWINGDIAPI HCOLORSPACE WINAPI GetColorSpace(HDC);\nWINGDIAPI HGDIOBJ     WINAPI GetCurrentObject(HDC,UINT);\nWINGDIAPI BOOL        WINAPI GetCurrentPositionEx(HDC,LPPOINT);\nWINGDIAPI INT         WINAPI GetDeviceCaps(HDC,INT);\nWINGDIAPI BOOL        WINAPI GetDeviceGammaRamp(HDC,LPVOID);\nWINGDIAPI COLORREF    WINAPI GetDCBrushColor(HDC);\nWINGDIAPI BOOL        WINAPI GetDCOrgEx(HDC,LPPOINT);\nWINGDIAPI COLORREF    WINAPI GetDCPenColor(HDC);\nWINGDIAPI UINT        WINAPI GetDIBColorTable(HDC,UINT,UINT,RGBQUAD*);\nWINGDIAPI INT         WINAPI GetDIBits(HDC,HBITMAP,UINT,UINT,LPVOID,LPBITMAPINFO,UINT);\nWINGDIAPI HENHMETAFILE WINAPI GetEnhMetaFileA(LPCSTR);\nWINGDIAPI HENHMETAFILE WINAPI GetEnhMetaFileW(LPCWSTR);\n#define                      GetEnhMetaFile WINELIB_NAME_AW(GetEnhMetaFile)\nWINGDIAPI UINT        WINAPI GetEnhMetaFileBits(HENHMETAFILE,UINT,LPBYTE);\nWINGDIAPI UINT        WINAPI GetEnhMetaFileDescriptionA(HENHMETAFILE,UINT,LPSTR);\nWINGDIAPI UINT        WINAPI GetEnhMetaFileDescriptionW(HENHMETAFILE,UINT,LPWSTR);\n#define                      GetEnhMetaFileDescription WINELIB_NAME_AW(GetEnhMetaFileDescription)\nWINGDIAPI UINT        WINAPI GetEnhMetaFileHeader(HENHMETAFILE,UINT,LPENHMETAHEADER);\nWINGDIAPI UINT        WINAPI GetEnhMetaFilePaletteEntries(HENHMETAFILE,UINT,LPPALETTEENTRY);\nWINGDIAPI DWORD       WINAPI GetFontData(HDC,DWORD,DWORD,LPVOID,DWORD);\nWINGDIAPI DWORD       WINAPI GetFontLanguageInfo(HDC);\nWINGDIAPI DWORD       WINAPI GetFontUnicodeRanges(HDC,LPGLYPHSET);\nWINGDIAPI DWORD       WINAPI GetGlyphIndicesA(HDC,LPCSTR,INT,LPWORD,DWORD);\nWINGDIAPI DWORD       WINAPI GetGlyphIndicesW(HDC,LPCWSTR,INT,LPWORD,DWORD);\n#define                    GetGlyphIndices WINELIB_NAME_AW(GetGlyphIndices)\nWINGDIAPI DWORD       WINAPI GetGlyphOutlineA(HDC,UINT,UINT,LPGLYPHMETRICS,DWORD,LPVOID,const MAT2*);\nWINGDIAPI DWORD       WINAPI GetGlyphOutlineW(HDC,UINT,UINT,LPGLYPHMETRICS,DWORD,LPVOID,const MAT2*);\n#define                      GetGlyphOutline WINELIB_NAME_AW(GetGlyphOutline)\nWINGDIAPI INT         WINAPI GetGraphicsMode(HDC);\nWINGDIAPI BOOL        WINAPI GetICMProfileA(HDC,LPDWORD,LPSTR);\nWINGDIAPI BOOL        WINAPI GetICMProfileW(HDC,LPDWORD,LPWSTR);\n#define                      GetICMProfile WINELIB_NAME_AW(GetICMProfile)\nWINGDIAPI DWORD       WINAPI GetKerningPairsA(HDC,DWORD,LPKERNINGPAIR);\nWINGDIAPI DWORD       WINAPI GetKerningPairsW(HDC,DWORD,LPKERNINGPAIR);\n#define                      GetKerningPairs WINELIB_NAME_AW(GetKerningPairs)\nWINGDIAPI DWORD       WINAPI GetLayout(HDC);\nWINGDIAPI BOOL        WINAPI GetLogColorSpaceA(HCOLORSPACE,LPLOGCOLORSPACEA,DWORD);\nWINGDIAPI BOOL        WINAPI GetLogColorSpaceW(HCOLORSPACE,LPLOGCOLORSPACEW,DWORD);\n#define                      GetLogColorSpace WINELIB_NAME_AW(GetLogColorSpace)\nWINGDIAPI INT         WINAPI GetMapMode(HDC);\nWINGDIAPI HMETAFILE   WINAPI GetMetaFileA(LPCSTR);\nWINGDIAPI HMETAFILE   WINAPI GetMetaFileW(LPCWSTR);\n#define                      GetMetaFile WINELIB_NAME_AW(GetMetaFile)\nWINGDIAPI UINT        WINAPI GetMetaFileBitsEx(HMETAFILE,UINT,LPVOID);\nWINGDIAPI INT         WINAPI GetMetaRgn(HDC,HRGN);\nWINGDIAPI BOOL        WINAPI GetMiterLimit(HDC, PFLOAT);\nWINGDIAPI DWORD       WINAPI GetNearestColor(HDC,DWORD);\nWINGDIAPI UINT        WINAPI GetNearestPaletteIndex(HPALETTE,COLORREF);\nWINGDIAPI INT         WINAPI GetObjectA(HGDIOBJ,INT,LPVOID);\nWINGDIAPI INT         WINAPI GetObjectW(HGDIOBJ,INT,LPVOID);\n#define                      GetObject WINELIB_NAME_AW(GetObject)\nWINGDIAPI DWORD       WINAPI GetObjectType(HGDIOBJ);\nWINGDIAPI UINT        WINAPI GetOutlineTextMetricsA(HDC,UINT,LPOUTLINETEXTMETRICA);\nWINGDIAPI UINT        WINAPI GetOutlineTextMetricsW(HDC,UINT,LPOUTLINETEXTMETRICW);\n#define                      GetOutlineTextMetrics WINELIB_NAME_AW(GetOutlineTextMetrics)\nWINGDIAPI UINT        WINAPI GetPaletteEntries(HPALETTE,UINT,UINT,LPPALETTEENTRY);\nWINGDIAPI INT         WINAPI GetPath(HDC,LPPOINT,LPBYTE,INT);\nWINGDIAPI COLORREF    WINAPI GetPixel(HDC,INT,INT);\nWINGDIAPI INT         WINAPI GetPixelFormat(HDC);\nWINGDIAPI INT         WINAPI GetPolyFillMode(HDC);\nWINGDIAPI INT         WINAPI GetRandomRgn(HDC,HRGN,INT);\nWINGDIAPI BOOL        WINAPI GetRasterizerCaps(LPRASTERIZER_STATUS,UINT);\nWINGDIAPI DWORD       WINAPI GetRegionData(HRGN,DWORD,LPRGNDATA);\nWINGDIAPI INT         WINAPI GetRelAbs(HDC,DWORD);\nWINGDIAPI INT         WINAPI GetRgnBox(HRGN,LPRECT);\nWINGDIAPI INT         WINAPI GetROP2(HDC);\nWINGDIAPI HGDIOBJ     WINAPI GetStockObject(INT);\nWINGDIAPI INT         WINAPI GetStretchBltMode(HDC);\nWINGDIAPI UINT        WINAPI GetSystemPaletteEntries(HDC,UINT,UINT,LPPALETTEENTRY);\nWINGDIAPI UINT        WINAPI GetSystemPaletteUse(HDC);\nWINGDIAPI UINT        WINAPI GetTextAlign(HDC);\nWINGDIAPI INT         WINAPI GetTextCharacterExtra(HDC);\nWINGDIAPI UINT        WINAPI GetTextCharset(HDC);\nWINGDIAPI UINT        WINAPI GetTextCharsetInfo(HDC,LPFONTSIGNATURE,DWORD);\nWINGDIAPI COLORREF    WINAPI GetTextColor(HDC);\nWINGDIAPI BOOL        WINAPI GetTextExtentExPointA(HDC,LPCSTR,INT,INT,LPINT,LPINT,LPSIZE);\nWINGDIAPI BOOL        WINAPI GetTextExtentExPointW(HDC,LPCWSTR,INT,INT,LPINT,LPINT,LPSIZE);\n#define                      GetTextExtentExPoint WINELIB_NAME_AW(GetTextExtentExPoint)\nWINGDIAPI BOOL        WINAPI GetTextExtentPointA(HDC,LPCSTR,INT,LPSIZE);\nWINGDIAPI BOOL        WINAPI GetTextExtentPointW(HDC,LPCWSTR,INT,LPSIZE);\n#define                      GetTextExtentPoint WINELIB_NAME_AW(GetTextExtentPoint)\nWINGDIAPI BOOL        WINAPI GetTextExtentPoint32A(HDC,LPCSTR,INT,LPSIZE);\nWINGDIAPI BOOL        WINAPI GetTextExtentPoint32W(HDC,LPCWSTR,INT,LPSIZE);\n#define                      GetTextExtentPoint32 WINELIB_NAME_AW(GetTextExtentPoint32)\nWINGDIAPI BOOL        WINAPI GetTextExtentExPointI(HDC,const WORD*,INT,INT,LPINT,LPINT,LPSIZE);\nWINGDIAPI BOOL        WINAPI GetTextExtentPointI(HDC,const WORD*,INT,LPSIZE);\nWINGDIAPI INT         WINAPI GetTextFaceA(HDC,INT,LPSTR);\nWINGDIAPI INT         WINAPI GetTextFaceW(HDC,INT,LPWSTR);\n#define                      GetTextFace WINELIB_NAME_AW(GetTextFace)\nWINGDIAPI BOOL        WINAPI GetTextMetricsA(HDC,LPTEXTMETRICA);\nWINGDIAPI BOOL        WINAPI GetTextMetricsW(HDC,LPTEXTMETRICW);\n#define                      GetTextMetrics WINELIB_NAME_AW(GetTextMetrics)\nWINGDIAPI BOOL        WINAPI GetTransform(HDC,DWORD,XFORM*);\nWINGDIAPI BOOL        WINAPI GetViewportExtEx(HDC,LPSIZE);\nWINGDIAPI BOOL        WINAPI GetViewportOrgEx(HDC,LPPOINT);\nWINGDIAPI BOOL        WINAPI GetWindowExtEx(HDC,LPSIZE);\nWINGDIAPI BOOL        WINAPI GetWindowOrgEx(HDC,LPPOINT);\nWINGDIAPI UINT        WINAPI GetWinMetaFileBits(HENHMETAFILE,UINT,LPBYTE,INT,HDC);\nWINGDIAPI BOOL        WINAPI GetWorldTransform(HDC,LPXFORM);\nWINGDIAPI BOOL        WINAPI GradientFill(HDC,PTRIVERTEX,ULONG,PVOID,ULONG,ULONG);\nWINGDIAPI INT         WINAPI IntersectClipRect(HDC,INT,INT,INT,INT);\nWINGDIAPI BOOL        WINAPI InvertRgn(HDC,HRGN);\nWINGDIAPI BOOL        WINAPI LineDDA(INT,INT,INT,INT,LINEDDAPROC,LPARAM);\nWINGDIAPI BOOL        WINAPI LineTo(HDC,INT,INT);\nWINGDIAPI BOOL        WINAPI LPtoDP(HDC,LPPOINT,INT);\nWINGDIAPI BOOL        WINAPI MaskBlt(HDC,INT,INT,INT,INT,HDC,INT,INT,HBITMAP,INT,INT,DWORD);\nWINGDIAPI BOOL        WINAPI MirrorRgn(HWND,HRGN);\nWINGDIAPI BOOL        WINAPI ModifyWorldTransform(HDC,const XFORM *, DWORD);\nWINGDIAPI BOOL        WINAPI MoveToEx(HDC,INT,INT,LPPOINT);\nWINGDIAPI INT         WINAPI OffsetClipRgn(HDC,INT,INT);\nWINGDIAPI INT         WINAPI OffsetRgn(HRGN,INT,INT);\nWINGDIAPI BOOL        WINAPI OffsetViewportOrgEx(HDC,INT,INT,LPPOINT);\nWINGDIAPI BOOL        WINAPI OffsetWindowOrgEx(HDC,INT,INT,LPPOINT);\nWINGDIAPI BOOL        WINAPI PaintRgn(HDC,HRGN);\nWINGDIAPI BOOL        WINAPI PatBlt(HDC,INT,INT,INT,INT,DWORD);\nWINGDIAPI HRGN        WINAPI PathToRegion(HDC);\nWINGDIAPI BOOL        WINAPI Pie(HDC,INT,INT,INT,INT,INT,INT,INT,INT);\nWINGDIAPI BOOL        WINAPI PlayEnhMetaFile(HDC,HENHMETAFILE,const RECT*);\nWINGDIAPI BOOL        WINAPI PlayEnhMetaFileRecord(HDC,LPHANDLETABLE,const ENHMETARECORD*,UINT);\nWINGDIAPI BOOL        WINAPI PlayMetaFile(HDC,HMETAFILE);\nWINGDIAPI BOOL        WINAPI PlayMetaFileRecord(HDC,LPHANDLETABLE,LPMETARECORD,UINT);\nWINGDIAPI BOOL        WINAPI PlgBlt(HDC,const POINT*,HDC,INT,INT,INT,INT,HBITMAP,INT,INT);\nWINGDIAPI BOOL        WINAPI PolyBezier(HDC,const POINT*,DWORD);\nWINGDIAPI BOOL        WINAPI PolyBezierTo(HDC,const POINT*,DWORD);\nWINGDIAPI BOOL        WINAPI PolyDraw(HDC,const POINT*,const BYTE*,DWORD);\nWINGDIAPI BOOL        WINAPI PolyPolygon(HDC,const POINT*,const INT*,UINT);\nWINGDIAPI BOOL        WINAPI PolyPolyline(HDC,const POINT*,const DWORD*,DWORD);\nWINGDIAPI BOOL        WINAPI Polygon(HDC,const POINT*,INT);\nWINGDIAPI BOOL        WINAPI Polyline(HDC,const POINT*,INT);\nWINGDIAPI BOOL        WINAPI PolylineTo(HDC,const POINT*,DWORD);\nWINGDIAPI BOOL        WINAPI PtInRegion(HRGN,INT,INT);\nWINGDIAPI BOOL        WINAPI PtVisible(HDC,INT,INT);\nWINGDIAPI UINT        WINAPI RealizePalette(HDC);\nWINGDIAPI BOOL        WINAPI Rectangle(HDC,INT,INT,INT,INT);\nWINGDIAPI BOOL        WINAPI RectInRegion(HRGN,const RECT *);\nWINGDIAPI BOOL        WINAPI RectVisible(HDC,const RECT*);\nWINGDIAPI BOOL        WINAPI RemoveFontMemResourceEx(HANDLE);\nWINGDIAPI BOOL        WINAPI RemoveFontResourceA(LPCSTR);\nWINGDIAPI BOOL        WINAPI RemoveFontResourceW(LPCWSTR);\n#define                      RemoveFontResource WINELIB_NAME_AW(RemoveFontResource)\nWINGDIAPI BOOL        WINAPI RemoveFontResourceExA(LPCSTR, DWORD, PVOID);\nWINGDIAPI BOOL        WINAPI RemoveFontResourceExW(LPCWSTR, DWORD, PVOID);\n#define                      RemoveFontResourceEx WINELIB_NAME_AW(RemoveFontResourceEx)\nWINGDIAPI HDC         WINAPI ResetDCA(HDC,const DEVMODEA *);\nWINGDIAPI HDC         WINAPI ResetDCW(HDC,const DEVMODEW *);\n#define                      ResetDC WINELIB_NAME_AW(ResetDC)\nWINGDIAPI BOOL        WINAPI ResizePalette(HPALETTE,UINT);\nWINGDIAPI BOOL        WINAPI RestoreDC(HDC,INT);\nWINGDIAPI BOOL        WINAPI RoundRect(HDC,INT,INT,INT,INT,INT,INT);\nWINGDIAPI INT         WINAPI SaveDC(HDC);\nWINGDIAPI BOOL        WINAPI ScaleViewportExtEx(HDC,INT,INT,INT,INT,LPSIZE);\nWINGDIAPI BOOL        WINAPI ScaleWindowExtEx(HDC,INT,INT,INT,INT,LPSIZE);\nWINGDIAPI BOOL        WINAPI SelectClipPath(HDC,INT);\nWINGDIAPI INT         WINAPI SelectClipRgn(HDC,HRGN);\nWINGDIAPI HGDIOBJ     WINAPI SelectObject(HDC,HGDIOBJ);\nWINGDIAPI HPALETTE    WINAPI SelectPalette(HDC,HPALETTE,BOOL);\nWINGDIAPI INT         WINAPI SetAbortProc(HDC,ABORTPROC);\nWINGDIAPI INT         WINAPI SetArcDirection(HDC,INT);\nWINGDIAPI LONG        WINAPI SetBitmapBits(HBITMAP,LONG,LPCVOID);\nWINGDIAPI BOOL        WINAPI SetBitmapDimensionEx(HBITMAP,INT,INT,LPSIZE);\nWINGDIAPI COLORREF    WINAPI SetBkColor(HDC,COLORREF);\nWINGDIAPI INT         WINAPI SetBkMode(HDC,INT);\nWINGDIAPI UINT        WINAPI SetBoundsRect(HDC,const RECT*,UINT);\nWINGDIAPI BOOL        WINAPI SetBrushOrgEx(HDC,INT,INT,LPPOINT);\nWINGDIAPI BOOL        WINAPI SetColorAdjustment(HDC,const COLORADJUSTMENT*);\nWINGDIAPI HCOLORSPACE WINAPI SetColorSpace(HDC,HCOLORSPACE);\nWINGDIAPI BOOL        WINAPI SetDeviceGammaRamp(HDC,LPVOID);\nWINGDIAPI COLORREF    WINAPI SetDCBrushColor(HDC,COLORREF);\nWINGDIAPI COLORREF    WINAPI SetDCPenColor(HDC, COLORREF);\nWINGDIAPI UINT        WINAPI SetDIBColorTable(HDC,UINT,UINT,const RGBQUAD*);\nWINGDIAPI INT         WINAPI SetDIBits(HDC,HBITMAP,UINT,UINT,LPCVOID,const BITMAPINFO*,UINT);\nWINGDIAPI INT         WINAPI SetDIBitsToDevice(HDC,INT,INT,DWORD,DWORD,INT,INT,UINT,UINT,LPCVOID,const BITMAPINFO*,UINT);\nWINGDIAPI HENHMETAFILE WINAPI SetEnhMetaFileBits(UINT,const BYTE *);\nWINGDIAPI INT         WINAPI SetGraphicsMode(HDC,INT);\nWINGDIAPI INT         WINAPI SetICMMode(HDC,INT);\nWINGDIAPI BOOL        WINAPI SetICMProfileA(HDC,LPSTR);\nWINGDIAPI BOOL        WINAPI SetICMProfileW(HDC,LPWSTR);\n#define                      SetICMProfile WINELIB_NAME_AW(SetICMProfile)\nWINGDIAPI DWORD       WINAPI SetLayout(HDC,DWORD);\nWINGDIAPI INT         WINAPI SetMapMode(HDC,INT);\nWINGDIAPI DWORD       WINAPI SetMapperFlags(HDC,DWORD);\nWINGDIAPI HMETAFILE   WINAPI SetMetaFileBitsEx(UINT,const BYTE*);\nWINGDIAPI INT         WINAPI SetMetaRgn(HDC);\nWINGDIAPI BOOL        WINAPI SetMiterLimit(HDC, FLOAT, PFLOAT);\nWINGDIAPI UINT        WINAPI SetPaletteEntries(HPALETTE,UINT,UINT,const PALETTEENTRY*);\nWINGDIAPI COLORREF    WINAPI SetPixel(HDC,INT,INT,COLORREF);\nWINGDIAPI BOOL        WINAPI SetPixelV(HDC,INT,INT,COLORREF);\nWINGDIAPI BOOL        WINAPI SetPixelFormat(HDC,int,const PIXELFORMATDESCRIPTOR*);\nWINGDIAPI INT         WINAPI SetPolyFillMode(HDC,INT);\nWINGDIAPI BOOL        WINAPI SetRectRgn(HRGN,INT,INT,INT,INT);\nWINGDIAPI INT         WINAPI SetRelAbs(HDC,INT);\nWINGDIAPI INT         WINAPI SetROP2(HDC,INT);\nWINGDIAPI INT         WINAPI SetStretchBltMode(HDC,INT);\nWINGDIAPI UINT        WINAPI SetSystemPaletteUse(HDC,UINT);\nWINGDIAPI UINT        WINAPI SetTextAlign(HDC,UINT);\nWINGDIAPI INT         WINAPI SetTextCharacterExtra(HDC,INT);\nWINGDIAPI COLORREF    WINAPI SetTextColor(HDC,COLORREF);\nWINGDIAPI BOOL        WINAPI SetTextJustification(HDC,INT,INT);\nWINGDIAPI BOOL        WINAPI SetViewportExtEx(HDC,INT,INT,LPSIZE);\nWINGDIAPI BOOL        WINAPI SetViewportOrgEx(HDC,INT,INT,LPPOINT);\nWINGDIAPI BOOL        WINAPI SetWindowExtEx(HDC,INT,INT,LPSIZE);\nWINGDIAPI BOOL        WINAPI SetWindowOrgEx(HDC,INT,INT,LPPOINT);\nWINGDIAPI HENHMETAFILE WINAPI SetWinMetaFileBits(UINT,const BYTE*,HDC,const METAFILEPICT *);\nWINGDIAPI BOOL        WINAPI SetWorldTransform(HDC,const XFORM*);\nWINGDIAPI INT         WINAPI StartDocA(HDC,const DOCINFOA*);\nWINGDIAPI INT         WINAPI StartDocW(HDC,const DOCINFOW*);\n#define                      StartDoc WINELIB_NAME_AW(StartDoc)\nWINGDIAPI INT         WINAPI StartPage(HDC);\nWINGDIAPI INT         WINAPI EndPage(HDC);\nWINGDIAPI BOOL        WINAPI StretchBlt(HDC,INT,INT,INT,INT,HDC,INT,INT,INT,INT,DWORD);\nWINGDIAPI INT         WINAPI StretchDIBits(HDC,INT,INT,INT,INT,INT,INT,INT,INT,const VOID*,const BITMAPINFO*,UINT,DWORD);\nWINGDIAPI BOOL        WINAPI StrokeAndFillPath(HDC);\nWINGDIAPI BOOL        WINAPI StrokePath(HDC);\nWINGDIAPI BOOL        WINAPI SwapBuffers(HDC);\nWINGDIAPI BOOL        WINAPI TextOutA(HDC,INT,INT,LPCSTR,INT);\nWINGDIAPI BOOL        WINAPI TextOutW(HDC,INT,INT,LPCWSTR,INT);\n#define                      TextOut WINELIB_NAME_AW(TextOut)\nWINGDIAPI BOOL        WINAPI TranslateCharsetInfo(LPDWORD,LPCHARSETINFO,DWORD);\nWINGDIAPI BOOL        WINAPI TransparentBlt(HDC,int,int,int,int,HDC,int,int,int,int,UINT);\nWINGDIAPI BOOL        WINAPI UnrealizeObject(HGDIOBJ);\nWINGDIAPI BOOL        WINAPI UpdateColors(HDC);\nWINGDIAPI BOOL        WINAPI UpdateICMRegKeyA(DWORD,LPSTR,LPSTR,UINT);\nWINGDIAPI BOOL        WINAPI UpdateICMRegKeyW(DWORD,LPWSTR,LPWSTR,UINT);\n#define                      UpdateICMRegKey WINELIB_NAME_AW(UpdateICMRegKey)\nWINGDIAPI BOOL        WINAPI WidenPath(HDC);\nWINGDIAPI BOOL        WINAPI PolyTextOutA(HDC,const POLYTEXTA*,INT);\nWINGDIAPI BOOL        WINAPI PolyTextOutW(HDC,const POLYTEXTW*,INT);\n#define                      PolyTextOut WINELIB_NAME_AW(PolyTextOut)\n\n/* These defines are used by wglSwapLayerBuffers */\n#define WGL_SWAP_MAIN_PLANE (1 <<  0)\n#define WGL_SWAP_OVERLAY1   (1 <<  1)\n#define WGL_SWAP_OVERLAY2   (1 <<  2)\n#define WGL_SWAP_OVERLAY3   (1 <<  3)\n#define WGL_SWAP_OVERLAY4   (1 <<  4)\n#define WGL_SWAP_OVERLAY5   (1 <<  5)\n#define WGL_SWAP_OVERLAY6   (1 <<  6)\n#define WGL_SWAP_OVERLAY7   (1 <<  7)\n#define WGL_SWAP_OVERLAY8   (1 <<  8)\n#define WGL_SWAP_OVERLAY9   (1 <<  9)\n#define WGL_SWAP_OVERLAY10  (1 << 10)\n#define WGL_SWAP_OVERLAY11  (1 << 11)\n#define WGL_SWAP_OVERLAY12  (1 << 12)\n#define WGL_SWAP_OVERLAY13  (1 << 13)\n#define WGL_SWAP_OVERLAY14  (1 << 14)\n#define WGL_SWAP_OVERLAY15  (1 << 15)\n#define WGL_SWAP_UNDERLAY1  (1 << 16)\n#define WGL_SWAP_UNDERLAY2  (1 << 17)\n#define WGL_SWAP_UNDERLAY3  (1 << 18)\n#define WGL_SWAP_UNDERLAY4  (1 << 19)\n#define WGL_SWAP_UNDERLAY5  (1 << 20)\n#define WGL_SWAP_UNDERLAY6  (1 << 21)\n#define WGL_SWAP_UNDERLAY7  (1 << 22)\n#define WGL_SWAP_UNDERLAY8  (1 << 23)\n#define WGL_SWAP_UNDERLAY9  (1 << 24)\n#define WGL_SWAP_UNDERLAY10 (1 << 25)\n#define WGL_SWAP_UNDERLAY11 (1 << 26)\n#define WGL_SWAP_UNDERLAY12 (1 << 27)\n#define WGL_SWAP_UNDERLAY13 (1 << 28)\n#define WGL_SWAP_UNDERLAY14 (1 << 29)\n#define WGL_SWAP_UNDERLAY15 (1 << 30)\n\n#define WGL_FONT_LINES      0\n#define WGL_FONT_POLYGONS   1\n\n/* WGL prototypes */\nWINGDIAPI HGLRC   WINAPI wglCreateContext(HDC);\nWINGDIAPI HGLRC   WINAPI wglCreateLayerContext(HDC,INT);\nWINGDIAPI BOOL    WINAPI wglCopyContext(HGLRC,HGLRC,UINT);\nWINGDIAPI BOOL    WINAPI wglDeleteContext(HGLRC);\nWINGDIAPI BOOL    WINAPI wglDescribeLayerPlane(HDC,INT,INT,UINT,LPLAYERPLANEDESCRIPTOR);\nWINGDIAPI HGLRC   WINAPI wglGetCurrentContext(void);\nWINGDIAPI HDC     WINAPI wglGetCurrentDC(void);\nWINGDIAPI INT     WINAPI wglGetLayerPaletteEntries(HDC,INT,INT,INT,const COLORREF *);\nWINGDIAPI PROC    WINAPI wglGetProcAddress(LPCSTR);\nWINGDIAPI BOOL    WINAPI wglMakeCurrent(HDC,HGLRC);\nWINGDIAPI BOOL    WINAPI wglRealizeLayerPalette(HDC,INT,BOOL);\nWINGDIAPI INT     WINAPI wglSetLayerPaletteEntries(HDC,INT,INT,INT,const COLORREF *);\nWINGDIAPI BOOL    WINAPI wglShareLists(HGLRC,HGLRC);\nWINGDIAPI BOOL    WINAPI wglSwapLayerBuffers(HDC,UINT);\nWINGDIAPI BOOL    WINAPI wglUseFontBitmapsA(HDC,DWORD,DWORD,DWORD);\nWINGDIAPI BOOL    WINAPI wglUseFontBitmapsW(HDC,DWORD,DWORD,DWORD);\n#define                  wglUseFontBitmaps WINELIB_NAME_AW(wglUseFontBitmaps)\nWINGDIAPI BOOL    WINAPI wglUseFontOutlinesA(HDC,DWORD,DWORD,DWORD,FLOAT,FLOAT,INT,LPGLYPHMETRICSFLOAT);\nWINGDIAPI BOOL    WINAPI wglUseFontOutlinesW(HDC,DWORD,DWORD,DWORD,FLOAT,FLOAT,INT,LPGLYPHMETRICSFLOAT);\n#define                  wglUseFontOutlines WINELIB_NAME_AW(wglUseFontOutlines)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* !NOGDI */\n#endif /* _WINGDI_ */\n"
  },
  {
    "path": "wine/windows/winhttp.h",
    "content": "/*\n * Copyright (C) 2007 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINHTTP_H\n#define __WINE_WINHTTP_H\n\n#ifdef _WIN64\n#include <pshpack8.h>\n#else\n#include <pshpack4.h>\n#endif\n\n#define WINHTTPAPI\n#define BOOLAPI WINHTTPAPI BOOL WINAPI\n\n\ntypedef LPVOID HINTERNET;\ntypedef HINTERNET *LPHINTERNET;\n\n#define INTERNET_DEFAULT_PORT           0\n#define INTERNET_DEFAULT_HTTP_PORT      80\n#define INTERNET_DEFAULT_HTTPS_PORT     443\ntypedef WORD INTERNET_PORT;\ntypedef INTERNET_PORT *LPINTERNET_PORT;\n\n/* Yes, these values contradict wininet.h */\n#define INTERNET_SCHEME_HTTP            1\n#define INTERNET_SCHEME_HTTPS           2\n#define INTERNET_SCHEME_FTP             3\n#define INTERNET_SCHEME_SOCKS           4\ntypedef int INTERNET_SCHEME, *LPINTERNET_SCHEME;\n\n#define ICU_ESCAPE  0x80000000\n\n/* flags for WinHttpOpen */\n#define WINHTTP_FLAG_ASYNC                  0x10000000\n\n/* flags for WinHttpOpenRequest */\n#define WINHTTP_FLAG_ESCAPE_PERCENT         0x00000004\n#define WINHTTP_FLAG_NULL_CODEPAGE          0x00000008\n#define WINHTTP_FLAG_ESCAPE_DISABLE         0x00000040\n#define WINHTTP_FLAG_ESCAPE_DISABLE_QUERY   0x00000080\n#define WINHTTP_FLAG_BYPASS_PROXY_CACHE     0x00000100\n#define WINHTTP_FLAG_REFRESH                WINHTTP_FLAG_BYPASS_PROXY_CACHE\n#define WINHTTP_FLAG_SECURE                 0x00800000\n\n#define WINHTTP_ACCESS_TYPE_DEFAULT_PROXY   0\n#define WINHTTP_ACCESS_TYPE_NO_PROXY        1\n#define WINHTTP_ACCESS_TYPE_NAMED_PROXY     3\n\n#define WINHTTP_NO_PROXY_NAME               NULL\n#define WINHTTP_NO_PROXY_BYPASS             NULL\n\n#define WINHTTP_NO_CLIENT_CERT_CONTEXT      NULL\n\n#define WINHTTP_NO_REFERER                  NULL\n#define WINHTTP_DEFAULT_ACCEPT_TYPES        NULL\n\n#define WINHTTP_NO_ADDITIONAL_HEADERS       NULL\n#define WINHTTP_NO_REQUEST_DATA             NULL\n\n#define WINHTTP_HEADER_NAME_BY_INDEX        NULL\n#define WINHTTP_NO_OUTPUT_BUFFER            NULL\n#define WINHTTP_NO_HEADER_INDEX             NULL\n\n#define WINHTTP_ADDREQ_INDEX_MASK                    0x0000FFFF\n#define WINHTTP_ADDREQ_FLAGS_MASK                    0xFFFF0000\n#define WINHTTP_ADDREQ_FLAG_ADD_IF_NEW               0x10000000\n#define WINHTTP_ADDREQ_FLAG_ADD                      0x20000000\n#define WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA      0x40000000\n#define WINHTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON  0x01000000\n#define WINHTTP_ADDREQ_FLAG_COALESCE                 WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA\n#define WINHTTP_ADDREQ_FLAG_REPLACE                  0x80000000\n\n#define WINHTTP_IGNORE_REQUEST_TOTAL_LENGTH 0\n\n/* flags for WinHttp{Set/Query}Options */\n#define WINHTTP_FIRST_OPTION                         WINHTTP_OPTION_CALLBACK\n#define WINHTTP_OPTION_CALLBACK                       1\n#define WINHTTP_OPTION_RESOLVE_TIMEOUT                2\n#define WINHTTP_OPTION_CONNECT_TIMEOUT                3\n#define WINHTTP_OPTION_CONNECT_RETRIES                4\n#define WINHTTP_OPTION_SEND_TIMEOUT                   5\n#define WINHTTP_OPTION_RECEIVE_TIMEOUT                6\n#define WINHTTP_OPTION_RECEIVE_RESPONSE_TIMEOUT       7\n#define WINHTTP_OPTION_HANDLE_TYPE                    9\n#define WINHTTP_OPTION_READ_BUFFER_SIZE              12\n#define WINHTTP_OPTION_WRITE_BUFFER_SIZE             13\n#define WINHTTP_OPTION_PARENT_HANDLE                 21\n#define WINHTTP_OPTION_EXTENDED_ERROR                24\n#define WINHTTP_OPTION_SECURITY_FLAGS                31\n#define WINHTTP_OPTION_SECURITY_CERTIFICATE_STRUCT   32\n#define WINHTTP_OPTION_URL                           34\n#define WINHTTP_OPTION_SECURITY_KEY_BITNESS          36\n#define WINHTTP_OPTION_PROXY                         38\n#define WINHTTP_OPTION_USER_AGENT                    41\n#define WINHTTP_OPTION_CONTEXT_VALUE                 45\n#define WINHTTP_OPTION_CLIENT_CERT_CONTEXT           47\n#define WINHTTP_OPTION_REQUEST_PRIORITY              58\n#define WINHTTP_OPTION_HTTP_VERSION                  59\n#define WINHTTP_OPTION_DISABLE_FEATURE               63\n#define WINHTTP_OPTION_CODEPAGE                      68\n#define WINHTTP_OPTION_MAX_CONNS_PER_SERVER          73\n#define WINHTTP_OPTION_MAX_CONNS_PER_1_0_SERVER      74\n#define WINHTTP_OPTION_AUTOLOGON_POLICY              77\n#define WINHTTP_OPTION_SERVER_CERT_CONTEXT           78\n#define WINHTTP_OPTION_ENABLE_FEATURE                79\n#define WINHTTP_OPTION_WORKER_THREAD_COUNT           80\n#define WINHTTP_OPTION_PASSPORT_COBRANDING_TEXT      81\n#define WINHTTP_OPTION_PASSPORT_COBRANDING_URL       82\n#define WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH       83\n#define WINHTTP_OPTION_SECURE_PROTOCOLS              84\n#define WINHTTP_OPTION_ENABLETRACING                 85\n#define WINHTTP_OPTION_PASSPORT_SIGN_OUT             86\n#define WINHTTP_OPTION_PASSPORT_RETURN_URL           87\n#define WINHTTP_OPTION_REDIRECT_POLICY               88\n#define WINHTTP_OPTION_MAX_HTTP_AUTOMATIC_REDIRECTS  89\n#define WINHTTP_OPTION_MAX_HTTP_STATUS_CONTINUE      90\n#define WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE      91\n#define WINHTTP_OPTION_MAX_RESPONSE_DRAIN_SIZE       92\n#define WINHTTP_OPTION_CONNECTION_INFO               93\n#define WINHTTP_OPTION_CLIENT_CERT_ISSUER_LIST       94\n#define WINHTTP_OPTION_SPN                           96\n#define WINHTTP_OPTION_GLOBAL_PROXY_CREDS            97\n#define WINHTTP_OPTION_GLOBAL_SERVER_CREDS           98\n#define WINHTTP_OPTION_UNLOAD_NOTIFY_EVENT           99\n#define WINHTTP_OPTION_REJECT_USERPWD_IN_URL         100\n#define WINHTTP_OPTION_USE_GLOBAL_SERVER_CREDENTIALS 101\n#define WINHTTP_LAST_OPTION                          WINHTTP_OPTION_USE_GLOBAL_SERVER_CREDENTIALS\n#define WINHTTP_OPTION_USERNAME                      0x1000\n#define WINHTTP_OPTION_PASSWORD                      0x1001\n#define WINHTTP_OPTION_PROXY_USERNAME                0x1002\n#define WINHTTP_OPTION_PROXY_PASSWORD                0x1003\n\n#define WINHTTP_CONNS_PER_SERVER_UNLIMITED 0xFFFFFFFF\n\n#define WINHTTP_AUTOLOGON_SECURITY_LEVEL_MEDIUM   0\n#define WINHTTP_AUTOLOGON_SECURITY_LEVEL_LOW      1\n#define WINHTTP_AUTOLOGON_SECURITY_LEVEL_HIGH     2\n#define WINHTTP_AUTOLOGON_SECURITY_LEVEL_DEFAULT  WINHTTP_AUTOLOGON_SECURITY_LEVEL_MEDIUM\n\n#define WINHTTP_OPTION_REDIRECT_POLICY_NEVER                        0\n#define WINHTTP_OPTION_REDIRECT_POLICY_DISALLOW_HTTPS_TO_HTTP       1\n#define WINHTTP_OPTION_REDIRECT_POLICY_ALWAYS                       2\n#define WINHTTP_OPTION_REDIRECT_POLICY_LAST            WINHTTP_OPTION_REDIRECT_POLICY_ALWAYS\n#define WINHTTP_OPTION_REDIRECT_POLICY_DEFAULT         WINHTTP_OPTION_REDIRECT_POLICY_DISALLOW_HTTPS_TO_HTTP\n\n#define WINHTTP_DISABLE_PASSPORT_AUTH    0x00000000\n#define WINHTTP_ENABLE_PASSPORT_AUTH     0x10000000\n#define WINHTTP_DISABLE_PASSPORT_KEYRING 0x20000000\n#define WINHTTP_ENABLE_PASSPORT_KEYRING  0x40000000\n\n#define WINHTTP_DISABLE_COOKIES                   0x00000001\n#define WINHTTP_DISABLE_REDIRECTS                 0x00000002\n#define WINHTTP_DISABLE_AUTHENTICATION            0x00000004\n#define WINHTTP_DISABLE_KEEP_ALIVE                0x00000008\n#define WINHTTP_ENABLE_SSL_REVOCATION             0x00000001\n#define WINHTTP_ENABLE_SSL_REVERT_IMPERSONATION   0x00000002\n#define WINHTTP_DISABLE_SPN_SERVER_PORT           0x00000000\n#define WINHTTP_ENABLE_SPN_SERVER_PORT            0x00000001\n#define WINHTTP_OPTION_SPN_MASK                   WINHTTP_ENABLE_SPN_SERVER_PORT\n\n/* Options for WinHttpOpenRequest */\n#define WINHTTP_NO_REFERER             NULL\n#define WINHTTP_DEFAULT_ACCEPT_TYPES   NULL\n\n/* Options for WinHttpSendRequest */\n#define WINHTTP_NO_ADDITIONAL_HEADERS   NULL\n#define WINHTTP_NO_REQUEST_DATA         NULL\n\n/* WinHTTP error codes */\n#define WINHTTP_ERROR_BASE                                  12000\n#define ERROR_WINHTTP_OUT_OF_HANDLES                        (WINHTTP_ERROR_BASE + 1)\n#define ERROR_WINHTTP_TIMEOUT                               (WINHTTP_ERROR_BASE + 2)\n#define ERROR_WINHTTP_INTERNAL_ERROR                        (WINHTTP_ERROR_BASE + 4)\n#define ERROR_WINHTTP_INVALID_URL                           (WINHTTP_ERROR_BASE + 5)\n#define ERROR_WINHTTP_UNRECOGNIZED_SCHEME                   (WINHTTP_ERROR_BASE + 6)\n#define ERROR_WINHTTP_NAME_NOT_RESOLVED                     (WINHTTP_ERROR_BASE + 7)\n#define ERROR_WINHTTP_INVALID_OPTION                        (WINHTTP_ERROR_BASE + 9)\n#define ERROR_WINHTTP_OPTION_NOT_SETTABLE                   (WINHTTP_ERROR_BASE + 11)\n#define ERROR_WINHTTP_SHUTDOWN                              (WINHTTP_ERROR_BASE + 12)\n#define ERROR_WINHTTP_LOGIN_FAILURE                         (WINHTTP_ERROR_BASE + 15)\n#define ERROR_WINHTTP_OPERATION_CANCELLED                   (WINHTTP_ERROR_BASE + 17)\n#define ERROR_WINHTTP_INCORRECT_HANDLE_TYPE                 (WINHTTP_ERROR_BASE + 18)\n#define ERROR_WINHTTP_INCORRECT_HANDLE_STATE                (WINHTTP_ERROR_BASE + 19)\n#define ERROR_WINHTTP_CANNOT_CONNECT                        (WINHTTP_ERROR_BASE + 29)\n#define ERROR_WINHTTP_CONNECTION_ERROR                      (WINHTTP_ERROR_BASE + 30)\n#define ERROR_WINHTTP_RESEND_REQUEST                        (WINHTTP_ERROR_BASE + 32)\n#define ERROR_WINHTTP_SECURE_CERT_DATE_INVALID              (WINHTTP_ERROR_BASE + 37)\n#define ERROR_WINHTTP_SECURE_CERT_CN_INVALID                (WINHTTP_ERROR_BASE + 38)\n#define ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED               (WINHTTP_ERROR_BASE + 44)\n#define ERROR_WINHTTP_SECURE_INVALID_CA                     (WINHTTP_ERROR_BASE + 45)\n#define ERROR_WINHTTP_SECURE_CERT_REV_FAILED                (WINHTTP_ERROR_BASE + 57)\n#define ERROR_WINHTTP_CANNOT_CALL_BEFORE_OPEN               (WINHTTP_ERROR_BASE + 100)\n#define ERROR_WINHTTP_CANNOT_CALL_BEFORE_SEND               (WINHTTP_ERROR_BASE + 101)\n#define ERROR_WINHTTP_CANNOT_CALL_AFTER_SEND                (WINHTTP_ERROR_BASE + 102)\n#define ERROR_WINHTTP_CANNOT_CALL_AFTER_OPEN                (WINHTTP_ERROR_BASE + 103)\n#define ERROR_WINHTTP_HEADER_NOT_FOUND                      (WINHTTP_ERROR_BASE + 150)\n#define ERROR_WINHTTP_INVALID_SERVER_RESPONSE               (WINHTTP_ERROR_BASE + 152)\n#define ERROR_WINHTTP_INVALID_HEADER                        (WINHTTP_ERROR_BASE + 153)\n#define ERROR_WINHTTP_INVALID_QUERY_REQUEST                 (WINHTTP_ERROR_BASE + 154)\n#define ERROR_WINHTTP_HEADER_ALREADY_EXISTS                 (WINHTTP_ERROR_BASE + 155)\n#define ERROR_WINHTTP_REDIRECT_FAILED                       (WINHTTP_ERROR_BASE + 156)\n#define ERROR_WINHTTP_SECURE_CHANNEL_ERROR                  (WINHTTP_ERROR_BASE + 157)\n#define ERROR_WINHTTP_BAD_AUTO_PROXY_SCRIPT                 (WINHTTP_ERROR_BASE + 166)\n#define ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPT             (WINHTTP_ERROR_BASE + 167)\n#define ERROR_WINHTTP_SECURE_INVALID_CERT                   (WINHTTP_ERROR_BASE + 169)\n#define ERROR_WINHTTP_SECURE_CERT_REVOKED                   (WINHTTP_ERROR_BASE + 170)\n#define ERROR_WINHTTP_NOT_INITIALIZED                       (WINHTTP_ERROR_BASE + 172)\n#define ERROR_WINHTTP_SECURE_FAILURE                        (WINHTTP_ERROR_BASE + 175)\n#define ERROR_WINHTTP_AUTO_PROXY_SERVICE_ERROR              (WINHTTP_ERROR_BASE + 178)\n#define ERROR_WINHTTP_SECURE_CERT_WRONG_USAGE               (WINHTTP_ERROR_BASE + 179)\n#define ERROR_WINHTTP_AUTODETECTION_FAILED                  (WINHTTP_ERROR_BASE + 180)\n#define ERROR_WINHTTP_HEADER_COUNT_EXCEEDED                 (WINHTTP_ERROR_BASE + 181)\n#define ERROR_WINHTTP_HEADER_SIZE_OVERFLOW                  (WINHTTP_ERROR_BASE + 182)\n#define ERROR_WINHTTP_CHUNKED_ENCODING_HEADER_SIZE_OVERFLOW (WINHTTP_ERROR_BASE + 183)\n#define ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW               (WINHTTP_ERROR_BASE + 184)\n#define ERROR_WINHTTP_CLIENT_CERT_NO_PRIVATE_KEY            (WINHTTP_ERROR_BASE + 185)\n#define ERROR_WINHTTP_CLIENT_CERT_NO_ACCESS_PRIVATE_KEY     (WINHTTP_ERROR_BASE + 186)\n#define WINHTTP_ERROR_LAST                                  (WINHTTP_ERROR_BASE + 186)\n\n/* WinHttp status codes */\n#define HTTP_STATUS_CONTINUE            100\n#define HTTP_STATUS_SWITCH_PROTOCOLS    101\n#define HTTP_STATUS_OK                  200\n#define HTTP_STATUS_CREATED             201\n#define HTTP_STATUS_ACCEPTED            202\n#define HTTP_STATUS_PARTIAL             203\n#define HTTP_STATUS_NO_CONTENT          204\n#define HTTP_STATUS_RESET_CONTENT       205\n#define HTTP_STATUS_PARTIAL_CONTENT     206\n#define HTTP_STATUS_WEBDAV_MULTI_STATUS 207\n#define HTTP_STATUS_AMBIGUOUS           300\n#define HTTP_STATUS_MOVED               301\n#define HTTP_STATUS_REDIRECT            302\n#define HTTP_STATUS_REDIRECT_METHOD     303\n#define HTTP_STATUS_NOT_MODIFIED        304\n#define HTTP_STATUS_USE_PROXY           305\n#define HTTP_STATUS_REDIRECT_KEEP_VERB  307\n#define HTTP_STATUS_BAD_REQUEST         400\n#define HTTP_STATUS_DENIED              401\n#define HTTP_STATUS_PAYMENT_REQ         402\n#define HTTP_STATUS_FORBIDDEN           403\n#define HTTP_STATUS_NOT_FOUND           404\n#define HTTP_STATUS_BAD_METHOD          405\n#define HTTP_STATUS_NONE_ACCEPTABLE     406\n#define HTTP_STATUS_PROXY_AUTH_REQ      407\n#define HTTP_STATUS_REQUEST_TIMEOUT     408\n#define HTTP_STATUS_CONFLICT            409\n#define HTTP_STATUS_GONE                410\n#define HTTP_STATUS_LENGTH_REQUIRED     411\n#define HTTP_STATUS_PRECOND_FAILED      412\n#define HTTP_STATUS_REQUEST_TOO_LARGE   413\n#define HTTP_STATUS_URI_TOO_LONG        414\n#define HTTP_STATUS_UNSUPPORTED_MEDIA   415\n#define HTTP_STATUS_RETRY_WITH          449\n#define HTTP_STATUS_SERVER_ERROR        500\n#define HTTP_STATUS_NOT_SUPPORTED       501\n#define HTTP_STATUS_BAD_GATEWAY         502\n#define HTTP_STATUS_SERVICE_UNAVAIL     503\n#define HTTP_STATUS_GATEWAY_TIMEOUT     504\n#define HTTP_STATUS_VERSION_NOT_SUP     505\n#define HTTP_STATUS_FIRST               HTTP_STATUS_CONTINUE\n#define HTTP_STATUS_LAST                HTTP_STATUS_VERSION_NOT_SUP\n\n#define SECURITY_FLAG_IGNORE_UNKNOWN_CA         0x00000100\n#define SECURITY_FLAG_IGNORE_CERT_DATE_INVALID  0x00002000\n#define SECURITY_FLAG_IGNORE_CERT_CN_INVALID    0x00001000\n#define SECURITY_FLAG_IGNORE_CERT_WRONG_USAGE   0x00000200\n#define SECURITY_FLAG_SECURE                    0x00000001\n#define SECURITY_FLAG_STRENGTH_WEAK             0x10000000\n#define SECURITY_FLAG_STRENGTH_MEDIUM           0x40000000\n#define SECURITY_FLAG_STRENGTH_STRONG           0x20000000\n\n#define ICU_NO_ENCODE          0x20000000\n#define ICU_DECODE             0x10000000\n#define ICU_NO_META            0x08000000\n#define ICU_ENCODE_SPACES_ONLY 0x04000000\n#define ICU_BROWSER_MODE       0x02000000\n#define ICU_ENCODE_PERCENT     0x00001000\n\n/* Query flags */\n#define WINHTTP_QUERY_MIME_VERSION                 0\n#define WINHTTP_QUERY_CONTENT_TYPE                 1\n#define WINHTTP_QUERY_CONTENT_TRANSFER_ENCODING    2\n#define WINHTTP_QUERY_CONTENT_ID                   3\n#define WINHTTP_QUERY_CONTENT_DESCRIPTION          4\n#define WINHTTP_QUERY_CONTENT_LENGTH               5\n#define WINHTTP_QUERY_CONTENT_LANGUAGE             6\n#define WINHTTP_QUERY_ALLOW                        7\n#define WINHTTP_QUERY_PUBLIC                       8\n#define WINHTTP_QUERY_DATE                         9\n#define WINHTTP_QUERY_EXPIRES                      10\n#define WINHTTP_QUERY_LAST_MODIFIED                11\n#define WINHTTP_QUERY_MESSAGE_ID                   12\n#define WINHTTP_QUERY_URI                          13\n#define WINHTTP_QUERY_DERIVED_FROM                 14\n#define WINHTTP_QUERY_COST                         15\n#define WINHTTP_QUERY_LINK                         16\n#define WINHTTP_QUERY_PRAGMA                       17\n#define WINHTTP_QUERY_VERSION                      18\n#define WINHTTP_QUERY_STATUS_CODE                  19\n#define WINHTTP_QUERY_STATUS_TEXT                  20\n#define WINHTTP_QUERY_RAW_HEADERS                  21\n#define WINHTTP_QUERY_RAW_HEADERS_CRLF             22\n#define WINHTTP_QUERY_CONNECTION                   23\n#define WINHTTP_QUERY_ACCEPT                       24\n#define WINHTTP_QUERY_ACCEPT_CHARSET               25\n#define WINHTTP_QUERY_ACCEPT_ENCODING              26\n#define WINHTTP_QUERY_ACCEPT_LANGUAGE              27\n#define WINHTTP_QUERY_AUTHORIZATION                28\n#define WINHTTP_QUERY_CONTENT_ENCODING             29\n#define WINHTTP_QUERY_FORWARDED                    30\n#define WINHTTP_QUERY_FROM                         31\n#define WINHTTP_QUERY_IF_MODIFIED_SINCE            32\n#define WINHTTP_QUERY_LOCATION                     33\n#define WINHTTP_QUERY_ORIG_URI                     34\n#define WINHTTP_QUERY_REFERER                      35\n#define WINHTTP_QUERY_RETRY_AFTER                  36\n#define WINHTTP_QUERY_SERVER                       37\n#define WINHTTP_QUERY_TITLE                        38\n#define WINHTTP_QUERY_USER_AGENT                   39\n#define WINHTTP_QUERY_WWW_AUTHENTICATE             40\n#define WINHTTP_QUERY_PROXY_AUTHENTICATE           41\n#define WINHTTP_QUERY_ACCEPT_RANGES                42\n#define WINHTTP_QUERY_SET_COOKIE                   43\n#define WINHTTP_QUERY_COOKIE                       44\n#define WINHTTP_QUERY_REQUEST_METHOD               45\n#define WINHTTP_QUERY_REFRESH                      46\n#define WINHTTP_QUERY_CONTENT_DISPOSITION          47\n#define WINHTTP_QUERY_AGE                          48\n#define WINHTTP_QUERY_CACHE_CONTROL                49\n#define WINHTTP_QUERY_CONTENT_BASE                 50\n#define WINHTTP_QUERY_CONTENT_LOCATION             51\n#define WINHTTP_QUERY_CONTENT_MD5                  52\n#define WINHTTP_QUERY_CONTENT_RANGE                53\n#define WINHTTP_QUERY_ETAG                         54\n#define WINHTTP_QUERY_HOST                         55\n#define WINHTTP_QUERY_IF_MATCH                     56\n#define WINHTTP_QUERY_IF_NONE_MATCH                57\n#define WINHTTP_QUERY_IF_RANGE                     58\n#define WINHTTP_QUERY_IF_UNMODIFIED_SINCE          59\n#define WINHTTP_QUERY_MAX_FORWARDS                 60\n#define WINHTTP_QUERY_PROXY_AUTHORIZATION          61\n#define WINHTTP_QUERY_RANGE                        62\n#define WINHTTP_QUERY_TRANSFER_ENCODING            63\n#define WINHTTP_QUERY_UPGRADE                      64\n#define WINHTTP_QUERY_VARY                         65\n#define WINHTTP_QUERY_VIA                          66\n#define WINHTTP_QUERY_WARNING                      67\n#define WINHTTP_QUERY_EXPECT                       68\n#define WINHTTP_QUERY_PROXY_CONNECTION             69\n#define WINHTTP_QUERY_UNLESS_MODIFIED_SINCE        70\n#define WINHTTP_QUERY_PROXY_SUPPORT                75\n#define WINHTTP_QUERY_AUTHENTICATION_INFO          76\n#define WINHTTP_QUERY_PASSPORT_URLS                77\n#define WINHTTP_QUERY_PASSPORT_CONFIG              78\n#define WINHTTP_QUERY_MAX                          78\n#define WINHTTP_QUERY_CUSTOM                       65535\n#define WINHTTP_QUERY_FLAG_REQUEST_HEADERS         0x80000000\n#define WINHTTP_QUERY_FLAG_SYSTEMTIME              0x40000000\n#define WINHTTP_QUERY_FLAG_NUMBER                  0x20000000\n\n/* Callback options */\n#define WINHTTP_CALLBACK_STATUS_RESOLVING_NAME          0x00000001\n#define WINHTTP_CALLBACK_STATUS_NAME_RESOLVED           0x00000002\n#define WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER    0x00000004\n#define WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER     0x00000008\n#define WINHTTP_CALLBACK_STATUS_SENDING_REQUEST         0x00000010\n#define WINHTTP_CALLBACK_STATUS_REQUEST_SENT            0x00000020\n#define WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE      0x00000040\n#define WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED       0x00000080\n#define WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION      0x00000100\n#define WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED       0x00000200\n#define WINHTTP_CALLBACK_STATUS_HANDLE_CREATED          0x00000400\n#define WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING          0x00000800\n#define WINHTTP_CALLBACK_STATUS_DETECTING_PROXY         0x00001000\n#define WINHTTP_CALLBACK_STATUS_REDIRECT                0x00004000\n#define WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE   0x00008000\n#define WINHTTP_CALLBACK_STATUS_SECURE_FAILURE          0x00010000\n#define WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE       0x00020000\n#define WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE          0x00040000\n#define WINHTTP_CALLBACK_STATUS_READ_COMPLETE           0x00080000\n#define WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE          0x00100000\n#define WINHTTP_CALLBACK_STATUS_REQUEST_ERROR           0x00200000\n#define WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE    0x00400000\n#define WINHTTP_CALLBACK_FLAG_RESOLVE_NAME              (WINHTTP_CALLBACK_STATUS_RESOLVING_NAME | WINHTTP_CALLBACK_STATUS_NAME_RESOLVED)\n#define WINHTTP_CALLBACK_FLAG_CONNECT_TO_SERVER         (WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER | WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER)\n#define WINHTTP_CALLBACK_FLAG_SEND_REQUEST              (WINHTTP_CALLBACK_STATUS_SENDING_REQUEST | WINHTTP_CALLBACK_STATUS_REQUEST_SENT)\n#define WINHTTP_CALLBACK_FLAG_RECEIVE_RESPONSE          (WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE | WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED)\n#define WINHTTP_CALLBACK_FLAG_CLOSE_CONNECTION          (WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION | WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED)\n#define WINHTTP_CALLBACK_FLAG_HANDLES                   (WINHTTP_CALLBACK_STATUS_HANDLE_CREATED | WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING)\n#define WINHTTP_CALLBACK_FLAG_DETECTING_PROXY           WINHTTP_CALLBACK_STATUS_DETECTING_PROXY\n#define WINHTTP_CALLBACK_FLAG_REDIRECT                  WINHTTP_CALLBACK_STATUS_REDIRECT\n#define WINHTTP_CALLBACK_FLAG_INTERMEDIATE_RESPONSE     WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE\n#define WINHTTP_CALLBACK_FLAG_SECURE_FAILURE            WINHTTP_CALLBACK_STATUS_SECURE_FAILURE\n#define WINHTTP_CALLBACK_FLAG_SENDREQUEST_COMPLETE      WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE\n#define WINHTTP_CALLBACK_FLAG_HEADERS_AVAILABLE         WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE\n#define WINHTTP_CALLBACK_FLAG_DATA_AVAILABLE            WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE\n#define WINHTTP_CALLBACK_FLAG_READ_COMPLETE             WINHTTP_CALLBACK_STATUS_READ_COMPLETE\n#define WINHTTP_CALLBACK_FLAG_WRITE_COMPLETE            WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE\n#define WINHTTP_CALLBACK_FLAG_REQUEST_ERROR             WINHTTP_CALLBACK_STATUS_REQUEST_ERROR\n#define WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS           (WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE | WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE \\\n                                                        | WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE | WINHTTP_CALLBACK_STATUS_READ_COMPLETE          \\\n                                                        | WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE | WINHTTP_CALLBACK_STATUS_REQUEST_ERROR)\n#define WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS         0xffffffff\n#define WINHTTP_INVALID_STATUS_CALLBACK                 ((WINHTTP_STATUS_CALLBACK)(-1))\n\n#define API_RECEIVE_RESPONSE          (1)\n#define API_QUERY_DATA_AVAILABLE      (2)\n#define API_READ_DATA                 (3)\n#define API_WRITE_DATA                (4)\n#define API_SEND_REQUEST              (5)\n\n#define WINHTTP_HANDLE_TYPE_SESSION                  1\n#define WINHTTP_HANDLE_TYPE_CONNECT                  2\n#define WINHTTP_HANDLE_TYPE_REQUEST                  3\n\n#define WINHTTP_CALLBACK_STATUS_FLAG_CERT_REV_FAILED         0x00000001\n#define WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CERT            0x00000002\n#define WINHTTP_CALLBACK_STATUS_FLAG_CERT_REVOKED            0x00000004\n#define WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CA              0x00000008\n#define WINHTTP_CALLBACK_STATUS_FLAG_CERT_CN_INVALID         0x00000010\n#define WINHTTP_CALLBACK_STATUS_FLAG_CERT_DATE_INVALID       0x00000020\n#define WINHTTP_CALLBACK_STATUS_FLAG_CERT_WRONG_USAGE        0x00000040\n#define WINHTTP_CALLBACK_STATUS_FLAG_SECURITY_CHANNEL_ERROR  0x80000000\n\n#define WINHTTP_FLAG_SECURE_PROTOCOL_SSL2   0x00000008\n#define WINHTTP_FLAG_SECURE_PROTOCOL_SSL3   0x00000020\n#define WINHTTP_FLAG_SECURE_PROTOCOL_TLS1   0x00000080\n#define WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1 0x00000200\n#define WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2 0x00000800\n#define WINHTTP_FLAG_SECURE_PROTOCOL_ALL    (WINHTTP_FLAG_SECURE_PROTOCOL_SSL2 |\\\n                                             WINHTTP_FLAG_SECURE_PROTOCOL_SSL3 |\\\n                                             WINHTTP_FLAG_SECURE_PROTOCOL_TLS1)\n\n#define WINHTTP_AUTH_SCHEME_BASIC      0x00000001\n#define WINHTTP_AUTH_SCHEME_NTLM       0x00000002\n#define WINHTTP_AUTH_SCHEME_PASSPORT   0x00000004\n#define WINHTTP_AUTH_SCHEME_DIGEST     0x00000008\n#define WINHTTP_AUTH_SCHEME_NEGOTIATE  0x00000010\n\n#define WINHTTP_AUTH_TARGET_SERVER     0x00000000\n#define WINHTTP_AUTH_TARGET_PROXY      0x00000001\n\n#define WINHTTP_TIME_FORMAT_BUFSIZE    62\n\ntypedef struct\n{\n    DWORD   dwStructSize;\n    LPWSTR  lpszScheme;\n    DWORD   dwSchemeLength;\n    INTERNET_SCHEME nScheme;\n    LPWSTR  lpszHostName;\n    DWORD   dwHostNameLength;\n    INTERNET_PORT nPort;\n    LPWSTR  lpszUserName;\n    DWORD   dwUserNameLength;\n    LPWSTR  lpszPassword;\n    DWORD   dwPasswordLength;\n    LPWSTR  lpszUrlPath;\n    DWORD   dwUrlPathLength;\n    LPWSTR  lpszExtraInfo;\n    DWORD   dwExtraInfoLength;\n} URL_COMPONENTS, *LPURL_COMPONENTS;\ntypedef URL_COMPONENTS URL_COMPONENTSW;\ntypedef LPURL_COMPONENTS LPURL_COMPONENTSW;\n\ntypedef struct\n{\n    DWORD_PTR dwResult;\n    DWORD dwError;\n} WINHTTP_ASYNC_RESULT, *LPWINHTTP_ASYNC_RESULT;\n\ntypedef struct\n{\n    FILETIME ftExpiry;\n    FILETIME ftStart;\n    LPWSTR lpszSubjectInfo;\n    LPWSTR lpszIssuerInfo;\n    LPWSTR lpszProtocolName;\n    LPWSTR lpszSignatureAlgName;\n    LPWSTR lpszEncryptionAlgName;\n    DWORD dwKeySize;\n} WINHTTP_CERTIFICATE_INFO;\n\ntypedef struct\n{\n    DWORD dwAccessType;\n    LPWSTR lpszProxy;\n    LPWSTR lpszProxyBypass;\n} WINHTTP_PROXY_INFO, *LPWINHTTP_PROXY_INFO;\ntypedef WINHTTP_PROXY_INFO WINHTTP_PROXY_INFOW;\ntypedef LPWINHTTP_PROXY_INFO LPWINHTTP_PROXY_INFOW;\n\ntypedef struct\n{\n    BOOL   fAutoDetect;\n    LPWSTR lpszAutoConfigUrl;\n    LPWSTR lpszProxy;\n    LPWSTR lpszProxyBypass;\n} WINHTTP_CURRENT_USER_IE_PROXY_CONFIG;\n\ntypedef VOID (CALLBACK *WINHTTP_STATUS_CALLBACK)(HINTERNET,DWORD_PTR,DWORD,LPVOID,DWORD);\n\n#define WINHTTP_AUTO_DETECT_TYPE_DHCP   0x00000001\n#define WINHTTP_AUTO_DETECT_TYPE_DNS_A  0x00000002\n\n#define WINHTTP_AUTOPROXY_AUTO_DETECT           0x00000001\n#define WINHTTP_AUTOPROXY_CONFIG_URL            0x00000002\n#define WINHTTP_AUTOPROXY_RUN_INPROCESS         0x00010000\n#define WINHTTP_AUTOPROXY_RUN_OUTPROCESS_ONLY   0x00020000\n\ntypedef struct\n{\n    DWORD dwFlags;\n    DWORD dwAutoDetectFlags;\n    LPCWSTR lpszAutoConfigUrl;\n    LPVOID lpvReserved;\n    DWORD dwReserved;\n    BOOL fAutoLogonIfChallenged;\n} WINHTTP_AUTOPROXY_OPTIONS;\n\ntypedef struct\n{\n    DWORD dwMajorVersion;\n    DWORD dwMinorVersion;\n} HTTP_VERSION_INFO, *LPHTTP_VERSION_INFO;\n\n#ifdef _WS2DEF_\ntypedef struct\n{\n    DWORD cbSize;\n    SOCKADDR_STORAGE LocalAddress;\n    SOCKADDR_STORAGE RemoteAddress;\n} WINHTTP_CONNECTION_INFO;\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nBOOL        WINAPI WinHttpAddRequestHeaders(HINTERNET,LPCWSTR,DWORD,DWORD);\nBOOL        WINAPI WinHttpDetectAutoProxyConfigUrl(DWORD,LPWSTR*);\nBOOL        WINAPI WinHttpCheckPlatform(void);\nBOOL        WINAPI WinHttpCloseHandle(HINTERNET);\nHINTERNET   WINAPI WinHttpConnect(HINTERNET,LPCWSTR,INTERNET_PORT,DWORD);\nBOOL        WINAPI WinHttpCrackUrl(LPCWSTR,DWORD,DWORD,LPURL_COMPONENTS);\nBOOL        WINAPI WinHttpCreateUrl(LPURL_COMPONENTS,DWORD,LPWSTR,LPDWORD);\nBOOL        WINAPI WinHttpGetDefaultProxyConfiguration(WINHTTP_PROXY_INFO*);\nBOOL        WINAPI WinHttpGetIEProxyConfigForCurrentUser(WINHTTP_CURRENT_USER_IE_PROXY_CONFIG*);\nBOOL        WINAPI WinHttpGetProxyForUrl(HINTERNET,LPCWSTR,WINHTTP_AUTOPROXY_OPTIONS*,WINHTTP_PROXY_INFO*);\nHINTERNET   WINAPI WinHttpOpen(LPCWSTR,DWORD,LPCWSTR,LPCWSTR,DWORD);\nHINTERNET   WINAPI WinHttpOpenRequest(HINTERNET,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR*,DWORD);\nBOOL        WINAPI WinHttpQueryAuthParams(HINTERNET,DWORD,LPVOID*);\nBOOL        WINAPI WinHttpQueryAuthSchemes(HINTERNET,LPDWORD,LPDWORD,LPDWORD);\nBOOL        WINAPI WinHttpQueryDataAvailable(HINTERNET,LPDWORD);\nBOOL        WINAPI WinHttpQueryHeaders(HINTERNET,DWORD,LPCWSTR,LPVOID,LPDWORD,LPDWORD);\nBOOL        WINAPI WinHttpQueryOption(HINTERNET,DWORD,LPVOID,LPDWORD);\nBOOL        WINAPI WinHttpReadData(HINTERNET,LPVOID,DWORD,LPDWORD);\nBOOL        WINAPI WinHttpReceiveResponse(HINTERNET,LPVOID);\nBOOL        WINAPI WinHttpSendRequest(HINTERNET,LPCWSTR,DWORD,LPVOID,DWORD,DWORD,DWORD_PTR);\nBOOL        WINAPI WinHttpSetDefaultProxyConfiguration(WINHTTP_PROXY_INFO*);\nBOOL        WINAPI WinHttpSetCredentials(HINTERNET,DWORD,DWORD,LPCWSTR,LPCWSTR,LPVOID);\nBOOL        WINAPI WinHttpSetOption(HINTERNET,DWORD,LPVOID,DWORD);\nWINHTTP_STATUS_CALLBACK WINAPI WinHttpSetStatusCallback(HINTERNET,WINHTTP_STATUS_CALLBACK,DWORD,DWORD_PTR);\nBOOL        WINAPI WinHttpSetTimeouts(HINTERNET,int,int,int,int);\nBOOL        WINAPI WinHttpTimeFromSystemTime(const SYSTEMTIME *,LPWSTR);\nBOOL        WINAPI WinHttpTimeToSystemTime(LPCWSTR,SYSTEMTIME*);\nBOOL        WINAPI WinHttpWriteData(HINTERNET,LPCVOID,DWORD,LPDWORD);\n\n#ifdef __cplusplus\n}\n#endif\n\n#include <poppack.h>\n\n#endif  /* __WINE_WINHTTP_H */\n"
  },
  {
    "path": "wine/windows/wininet.h",
    "content": "/*\n * Copyright (C) 2000 Ulrich Czekalla\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _WINE_WININET_H_\n#define _WINE_WININET_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define INTERNETAPI\n#define BOOLAPI INTERNETAPI BOOL WINAPI\n\ntypedef LPVOID HINTERNET;\ntypedef HINTERNET * LPHINTERNET;\n\ntypedef WORD INTERNET_PORT;\ntypedef INTERNET_PORT * LPINTERNET_PORT;\n\n\n#define INTERNET_INVALID_PORT_NUMBER    0\n\n#define INTERNET_DEFAULT_FTP_PORT       21\n#define INTERNET_DEFAULT_GOPHER_PORT    70\n#define INTERNET_DEFAULT_HTTP_PORT      80\n#define INTERNET_DEFAULT_HTTPS_PORT     443\n#define INTERNET_DEFAULT_SOCKS_PORT     1080\n\n#define INTERNET_MAX_HOST_NAME_LENGTH   256\n#define INTERNET_MAX_USER_NAME_LENGTH   128\n#define INTERNET_MAX_PASSWORD_LENGTH    128\n#define INTERNET_MAX_PORT_NUMBER_LENGTH 5\n#define INTERNET_MAX_PORT_NUMBER_VALUE  65535\n#define INTERNET_MAX_PATH_LENGTH        2048\n#define INTERNET_MAX_SCHEME_LENGTH      32\n#define INTERNET_MAX_URL_LENGTH         (INTERNET_MAX_SCHEME_LENGTH + sizeof(\"://\")+ INTERNET_MAX_PATH_LENGTH)\n#define INTERNET_KEEP_ALIVE_UNKNOWN     ((DWORD)-1)\n#define INTERNET_KEEP_ALIVE_ENABLED     1\n#define INTERNET_KEEP_ALIVE_DISABLED    0\n#define INTERNET_REQFLAG_FROM_CACHE     0x00000001\n#define INTERNET_REQFLAG_ASYNC          0x00000002\n#define INTERNET_REQFLAG_VIA_PROXY      0x00000004\n#define INTERNET_REQFLAG_NO_HEADERS     0x00000008\n#define INTERNET_REQFLAG_PASSIVE        0x00000010\n#define INTERNET_REQFLAG_CACHE_WRITE_DISABLED 0x00000040\n#define INTERNET_FLAG_RELOAD            0x80000000\n#define INTERNET_FLAG_RAW_DATA          0x40000000\n#define INTERNET_FLAG_EXISTING_CONNECT  0x20000000\n#define INTERNET_FLAG_ASYNC             0x10000000\n#define INTERNET_FLAG_PASSIVE           0x08000000\n#define INTERNET_FLAG_NO_CACHE_WRITE    0x04000000\n#define INTERNET_FLAG_DONT_CACHE        INTERNET_FLAG_NO_CACHE_WRITE\n#define INTERNET_FLAG_MAKE_PERSISTENT   0x02000000\n#define INTERNET_FLAG_FROM_CACHE        0x01000000\n#define INTERNET_FLAG_OFFLINE           INTERNET_FLAG_FROM_CACHE\n#define INTERNET_FLAG_SECURE            0x00800000\n#define INTERNET_FLAG_KEEP_CONNECTION   0x00400000\n#define INTERNET_FLAG_NO_AUTO_REDIRECT  0x00200000\n#define INTERNET_FLAG_READ_PREFETCH     0x00100000\n#define INTERNET_FLAG_NO_COOKIES        0x00080000\n#define INTERNET_FLAG_NO_AUTH           0x00040000\n#define INTERNET_FLAG_CACHE_IF_NET_FAIL 0x00010000\n#define INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP   0x00008000\n#define INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS  0x00004000\n#define INTERNET_FLAG_IGNORE_CERT_DATE_INVALID  0x00002000\n#define INTERNET_FLAG_IGNORE_CERT_CN_INVALID    0x00001000\n#define INTERNET_FLAG_RESYNCHRONIZE     0x00000800\n#define INTERNET_FLAG_HYPERLINK         0x00000400\n#define INTERNET_FLAG_NO_UI             0x00000200\n#define INTERNET_FLAG_PRAGMA_NOCACHE    0x00000100\n#define INTERNET_FLAG_CACHE_ASYNC       0x00000080\n#define INTERNET_FLAG_FORMS_SUBMIT      0x00000040\n#define INTERNET_FLAG_NEED_FILE         0x00000010\n#define INTERNET_FLAG_MUST_CACHE_REQUEST INTERNET_FLAG_NEED_FILE\n#define INTERNET_FLAG_TRANSFER_ASCII    FTP_TRANSFER_TYPE_ASCII\n#define INTERNET_FLAG_TRANSFER_BINARY   FTP_TRANSFER_TYPE_BINARY\n#define SECURITY_INTERNET_MASK  (INTERNET_FLAG_IGNORE_CERT_CN_INVALID|\\\nINTERNET_FLAG_IGNORE_CERT_DATE_INVALID|\\\nINTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS|\\\nINTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP)\n\n#define INTERNET_FLAGS_MASK     (INTERNET_FLAG_RELOAD \\\n                                | INTERNET_FLAG_RAW_DATA            \\\n                                | INTERNET_FLAG_EXISTING_CONNECT    \\\n                                | INTERNET_FLAG_ASYNC               \\\n                                | INTERNET_FLAG_PASSIVE             \\\n                                | INTERNET_FLAG_NO_CACHE_WRITE      \\\n                                | INTERNET_FLAG_MAKE_PERSISTENT     \\\n                                | INTERNET_FLAG_FROM_CACHE          \\\n                                | INTERNET_FLAG_SECURE              \\\n                                | INTERNET_FLAG_KEEP_CONNECTION     \\\n                                | INTERNET_FLAG_NO_AUTO_REDIRECT    \\\n                                | INTERNET_FLAG_READ_PREFETCH       \\\n                                | INTERNET_FLAG_NO_COOKIES          \\\n                                | INTERNET_FLAG_NO_AUTH             \\\n                                | INTERNET_FLAG_CACHE_IF_NET_FAIL   \\\n                                | SECURITY_INTERNET_MASK            \\\n                                | INTERNET_FLAG_RESYNCHRONIZE       \\\n                                | INTERNET_FLAG_HYPERLINK           \\\n                                | INTERNET_FLAG_NO_UI               \\\n                                | INTERNET_FLAG_PRAGMA_NOCACHE      \\\n                                | INTERNET_FLAG_CACHE_ASYNC         \\\n                                | INTERNET_FLAG_FORMS_SUBMIT        \\\n                                | INTERNET_FLAG_NEED_FILE           \\\n                                | INTERNET_FLAG_TRANSFER_BINARY     \\\n                                | INTERNET_FLAG_TRANSFER_ASCII      \\\n                                )\n\n#define INTERNET_ERROR_MASK_INSERT_CDROM                    0x1\n#define INTERNET_ERROR_MASK_COMBINED_SEC_CERT               0x2\n#define INTERNET_ERROR_MASK_NEED_MSN_SSPI_PKG               0x4\n#define INTERNET_ERROR_MASK_LOGIN_FAILURE_DISPLAY_ENTITY_BODY 0x8\n\n#define INTERNET_OPTIONS_MASK   (~INTERNET_FLAGS_MASK)\n#define WININET_API_FLAG_ASYNC          0x00000001\n#define WININET_API_FLAG_SYNC           0x00000004\n#define WININET_API_FLAG_USE_CONTEXT    0x00000008\n#define INTERNET_NO_CALLBACK            0\n\ntypedef enum {\n    INTERNET_SCHEME_PARTIAL = -2,\n    INTERNET_SCHEME_UNKNOWN = -1,\n    INTERNET_SCHEME_DEFAULT = 0,\n    INTERNET_SCHEME_FTP,   /* yes, this contradicts winhttp.h */\n    INTERNET_SCHEME_GOPHER,\n    INTERNET_SCHEME_HTTP,  /* yes, this contradicts winhttp.h */\n    INTERNET_SCHEME_HTTPS, /* yes, this contradicts winhttp.h */\n    INTERNET_SCHEME_FILE,\n    INTERNET_SCHEME_NEWS,\n    INTERNET_SCHEME_MAILTO,\n    INTERNET_SCHEME_SOCKS, /* yes, this contradicts winhttp.h */\n    INTERNET_SCHEME_JAVASCRIPT,\n    INTERNET_SCHEME_VBSCRIPT,\n    INTERNET_SCHEME_RES,\n    INTERNET_SCHEME_FIRST = INTERNET_SCHEME_FTP,\n    INTERNET_SCHEME_LAST = INTERNET_SCHEME_RES\n} INTERNET_SCHEME,* LPINTERNET_SCHEME;\n\ntypedef struct {\n    DWORD_PTR dwResult;\n    DWORD dwError;\n} INTERNET_ASYNC_RESULT,* LPINTERNET_ASYNC_RESULT;\n\ntypedef struct {\n    DWORD dwAccessType;\n    LPCSTR lpszProxy;\n    LPCSTR lpszProxyBypass;\n} INTERNET_PROXY_INFOA,* LPINTERNET_PROXY_INFOA;\n\ntypedef struct {\n    DWORD dwAccessType;\n    LPCWSTR lpszProxy;\n    LPCWSTR lpszProxyBypass;\n} INTERNET_PROXY_INFOW,* LPINTERNET_PROXY_INFOW;\n\n\nDECL_WINELIB_TYPE_AW(INTERNET_PROXY_INFO)\nDECL_WINELIB_TYPE_AW(LPINTERNET_PROXY_INFO)\n\ntypedef struct {\n    DWORD dwMajorVersion;\n    DWORD dwMinorVersion;\n} INTERNET_VERSION_INFO,* LPINTERNET_VERSION_INFO;\n\ntypedef struct {\n    DWORD dwMajorVersion;\n    DWORD dwMinorVersion;\n} HTTP_VERSION_INFO,* LPHTTP_VERSION_INFO;\n\ntypedef struct {\n    DWORD dwConnectedState;\n    DWORD dwFlags;\n} INTERNET_CONNECTED_INFO,* LPINTERNET_CONNECTED_INFO;\n\n#define ISO_FORCE_DISCONNECTED  0x00000001\n\ntypedef struct {\n    DWORD   dwStructSize;\n    LPSTR   lpszScheme;\n    DWORD   dwSchemeLength;\n    INTERNET_SCHEME nScheme;\n    LPSTR   lpszHostName;\n    DWORD   dwHostNameLength;\n    INTERNET_PORT nPort;\n    LPSTR   lpszUserName;\n    DWORD   dwUserNameLength;\n    LPSTR   lpszPassword;\n    DWORD   dwPasswordLength;\n    LPSTR   lpszUrlPath;\n    DWORD   dwUrlPathLength;\n    LPSTR   lpszExtraInfo;\n    DWORD   dwExtraInfoLength;\n} URL_COMPONENTSA,* LPURL_COMPONENTSA;\n\ntypedef struct {\n    DWORD   dwStructSize;\n    LPWSTR  lpszScheme;\n    DWORD   dwSchemeLength;\n    INTERNET_SCHEME nScheme;\n    LPWSTR  lpszHostName;\n    DWORD   dwHostNameLength;\n    INTERNET_PORT nPort;\n    LPWSTR  lpszUserName;\n    DWORD   dwUserNameLength;\n    LPWSTR  lpszPassword;\n    DWORD   dwPasswordLength;\n    LPWSTR  lpszUrlPath;\n    DWORD   dwUrlPathLength;\n    LPWSTR  lpszExtraInfo;\n    DWORD   dwExtraInfoLength;\n} URL_COMPONENTSW,* LPURL_COMPONENTSW;\n\nDECL_WINELIB_TYPE_AW(URL_COMPONENTS)\nDECL_WINELIB_TYPE_AW(LPURL_COMPONENTS)\n\ntypedef struct {\n    FILETIME ftExpiry;\n    FILETIME ftStart;\n    LPSTR lpszSubjectInfo;\n    LPSTR lpszIssuerInfo;\n    LPSTR lpszProtocolName;\n    LPSTR lpszSignatureAlgName;\n    LPSTR lpszEncryptionAlgName;\n    DWORD dwKeySize;\n\n} INTERNET_CERTIFICATE_INFOA,* LPINTERNET_CERTIFICATE_INFOA;\n\ntypedef struct {\n    FILETIME ftExpiry;\n    FILETIME ftStart;\n    LPWSTR lpszSubjectInfo;\n    LPWSTR lpszIssuerInfo;\n    LPWSTR lpszProtocolName;\n    LPWSTR lpszSignatureAlgName;\n    LPWSTR lpszEncryptionAlgName;\n    DWORD dwKeySize;\n\n} INTERNET_CERTIFICATE_INFOW,* LPINTERNET_CERTIFICATE_INFOW;\n\nDECL_WINELIB_TYPE_AW(INTERNET_CERTIFICATE_INFO)\nDECL_WINELIB_TYPE_AW(LPINTERNET_CERTIFICATE_INFO)\n\ntypedef struct _INTERNET_BUFFERSA {\n    DWORD dwStructSize;\n    struct _INTERNET_BUFFERSA * Next;\n    LPCSTR   lpcszHeader;\n    DWORD dwHeadersLength;\n    DWORD dwHeadersTotal;\n    LPVOID lpvBuffer;\n    DWORD dwBufferLength;\n    DWORD dwBufferTotal;\n    DWORD dwOffsetLow;\n    DWORD dwOffsetHigh;\n} INTERNET_BUFFERSA,* LPINTERNET_BUFFERSA;\n\ntypedef struct _INTERNET_BUFFERSW {\n    DWORD dwStructSize;\n    struct _INTERNET_BUFFERSW * Next;\n    LPCWSTR  lpcszHeader;\n    DWORD dwHeadersLength;\n    DWORD dwHeadersTotal;\n    LPVOID lpvBuffer;\n    DWORD dwBufferLength;\n    DWORD dwBufferTotal;\n    DWORD dwOffsetLow;\n    DWORD dwOffsetHigh;\n} INTERNET_BUFFERSW,* LPINTERNET_BUFFERSW;\n\nDECL_WINELIB_TYPE_AW(INTERNET_BUFFERS)\nDECL_WINELIB_TYPE_AW(LPINTERNET_BUFFERS)\n\n#define GROUP_OWNER_STORAGE_SIZE 4\n#define GROUPNAME_MAX_LENGTH 120\n\ntypedef struct _INTERNET_CACHE_GROUP_INFOA {\n    DWORD dwGroupSize;\n    DWORD dwGroupFlags;\n    DWORD dwGroupType;\n    DWORD dwDiskUsage;\n    DWORD dwDiskQuota;\n    DWORD dwOwnerStorage[GROUP_OWNER_STORAGE_SIZE];\n    CHAR  szGroupName[GROUPNAME_MAX_LENGTH];\n} INTERNET_CACHE_GROUP_INFOA, * LPINTERNET_CACHE_GROUP_INFOA;\n\ntypedef struct _INTERNET_CACHE_GROUP_INFOW {\n    DWORD dwGroupSize;\n    DWORD dwGroupFlags;\n    DWORD dwGroupType;\n    DWORD dwDiskUsage;\n    DWORD dwDiskQuota;\n    DWORD dwOwnerStorage[GROUP_OWNER_STORAGE_SIZE];\n    WCHAR szGroupName[GROUPNAME_MAX_LENGTH];\n} INTERNET_CACHE_GROUP_INFOW, *LPINTERNET_CACHE_GROUP_INFOW;\n\nDECL_WINELIB_TYPE_AW(INTERNET_CACHE_GROUP_INFO)\nDECL_WINELIB_TYPE_AW(LPINTERNET_CACHE_GROUP_INFO)\n\ntypedef struct _INTERNET_PER_CONN_OPTIONA {\n    DWORD dwOption;\n    union {\n        DWORD    dwValue;\n        LPSTR    pszValue;\n        FILETIME ftValue;\n    } Value;\n} INTERNET_PER_CONN_OPTIONA, *LPINTERNET_PER_CONN_OPTIONA;\n\ntypedef struct _INTERNET_PER_CONN_OPTIONW {\n    DWORD dwOption;\n    union {\n        DWORD    dwValue;\n        LPWSTR   pszValue;\n        FILETIME ftValue;\n    } Value;\n} INTERNET_PER_CONN_OPTIONW, *LPINTERNET_PER_CONN_OPTIONW;\n\nDECL_WINELIB_TYPE_AW(INTERNET_PER_CONN_OPTION)\nDECL_WINELIB_TYPE_AW(LPINTERNET_PER_CONN_OPTION)\n\n#define INTERNET_PER_CONN_FLAGS                        1\n#define INTERNET_PER_CONN_PROXY_SERVER                 2\n#define INTERNET_PER_CONN_PROXY_BYPASS                 3\n#define INTERNET_PER_CONN_AUTOCONFIG_URL               4\n#define INTERNET_PER_CONN_AUTODISCOVERY_FLAGS          5\n#define INTERNET_PER_CONN_AUTOCONFIG_SECONDARY_URL     6\n#define INTERNET_PER_CONN_AUTOCONFIG_RELOAD_DELAY_MINS 7\n#define INTERNET_PER_CONN_AUTOCONFIG_LAST_DETECT_TIME  8\n#define INTERNET_PER_CONN_AUTOCONFIG_LAST_DETECT_URL   9\n\n/* Values for INTERNET_PER_CONN_FLAGS */\n#define PROXY_TYPE_DIRECT         0x00000001\n#define PROXY_TYPE_PROXY          0x00000002\n#define PROXY_TYPE_AUTO_PROXY_URL 0x00000004\n#define PROXY_TYPE_AUTO_DETECT    0x00000008\n/* Values for INTERNET_PER_CONN_AUTODISCOVERY_FLAGS */\n#define AUTO_PROXY_FLAG_USER_SET                0x00000001\n#define AUTO_PROXY_FLAG_ALWAYS_DETECT           0x00000002\n#define AUTO_PROXY_FLAG_DETECTION_RUN           0x00000004\n#define AUTO_PROXY_FLAG_MIGRATED                0x00000008\n#define AUTO_PROXY_FLAG_DONT_CACHE_PROXY_RESULT 0x00000010\n#define AUTO_PROXY_FLAG_CACHE_INIT_RUN          0x00000020\n#define AUTO_PROXY_FLAG_DETECTION_SUSPECT       0x00000040\n\ntypedef struct _INTERNET_PER_CONN_OPTION_LISTA {\n    DWORD                       dwSize;\n    LPSTR                       pszConnection;\n    DWORD                       dwOptionCount;\n    DWORD                       dwOptionError;\n    LPINTERNET_PER_CONN_OPTIONA pOptions;\n} INTERNET_PER_CONN_OPTION_LISTA, *LPINTERNET_PER_CONN_OPTION_LISTA;\n\ntypedef struct _INTERNET_PER_CONN_OPTION_LISTW {\n    DWORD                       dwSize;\n    LPWSTR                      pszConnection;\n    DWORD                       dwOptionCount;\n    DWORD                       dwOptionError;\n    LPINTERNET_PER_CONN_OPTIONW pOptions;\n} INTERNET_PER_CONN_OPTION_LISTW, *LPINTERNET_PER_CONN_OPTION_LISTW;\n\nDECL_WINELIB_TYPE_AW(INTERNET_PER_CONN_OPTION_LIST)\nDECL_WINELIB_TYPE_AW(LPINTERNET_PER_CONN_OPTION_LIST)\n\ntypedef struct _INTERNET_DIAGNOSTIC_SOCKET_INFO\n{\n    DWORD_PTR Socket;\n    DWORD     SourcePort;\n    DWORD     DestPort;\n    DWORD     Flags;\n} INTERNET_DIAGNOSTIC_SOCKET_INFO, *LPINTERNET_DIAGNOSTIC_SOCKET_INFO;\n\n#define IDSI_FLAG_KEEP_ALIVE 0x00000001\n#define IDSI_FLAG_SECURE     0x00000002\n#define IDSI_FLAG_PROXY      0x00000004\n#define IDSI_FLAG_TUNNEL     0x00000008\n\nBOOLAPI InternetTimeFromSystemTimeA(const SYSTEMTIME *,DWORD ,LPSTR ,DWORD);\nBOOLAPI InternetTimeFromSystemTimeW(const SYSTEMTIME *,DWORD ,LPWSTR ,DWORD);\n#define InternetTimeFromSystemTime WINELIB_NAME_AW(InternetTimeFromSystemTime)\n\n#define INTERNET_RFC1123_FORMAT    0\n#define INTERNET_RFC1123_BUFSIZE   30\n\nBOOLAPI InternetTimeToSystemTimeA(LPCSTR ,SYSTEMTIME *,DWORD);\nBOOLAPI InternetTimeToSystemTimeW(LPCWSTR ,SYSTEMTIME *,DWORD);\n#define InternetTimeToSystemTime WINELIB_NAME_AW(InternetTimeToSystemTime)\n\nBOOLAPI InternetCrackUrlA(LPCSTR ,DWORD ,DWORD ,LPURL_COMPONENTSA);\nBOOLAPI InternetCrackUrlW(LPCWSTR ,DWORD ,DWORD ,LPURL_COMPONENTSW);\n#define InternetCrackUrl  WINELIB_NAME_AW(InternetCrackUrl)\n\nBOOLAPI InternetCreateUrlA(LPURL_COMPONENTSA ,DWORD ,LPSTR ,LPDWORD);\nBOOLAPI InternetCreateUrlW(LPURL_COMPONENTSW ,DWORD ,LPWSTR ,LPDWORD);\n#define InternetCreateUrl WINELIB_NAME_AW(InternetCreateUrl)\n\nBOOLAPI InternetCanonicalizeUrlA(LPCSTR ,LPSTR ,LPDWORD ,DWORD);\nBOOLAPI InternetCanonicalizeUrlW(LPCWSTR ,LPWSTR ,LPDWORD ,DWORD);\n#define InternetCanonicalizeUrl  WINELIB_NAME_AW(InternetCanonicalizeUrl)\n\nBOOLAPI InternetCombineUrlA(LPCSTR ,LPCSTR ,LPSTR ,LPDWORD ,DWORD);\nBOOLAPI InternetCombineUrlW(LPCWSTR ,LPCWSTR ,LPWSTR ,LPDWORD ,DWORD);\n#define InternetCombineUrl  WINELIB_NAME_AW(InternetCombineUrl)\n\n#define ICU_ESCAPE      0x80000000\n#define ICU_USERNAME    0x40000000\n#define ICU_NO_ENCODE   0x20000000\n#define ICU_DECODE      0x10000000\n#define ICU_NO_META     0x08000000\n#define ICU_ENCODE_SPACES_ONLY 0x04000000\n#define ICU_BROWSER_MODE 0x02000000\n#define ICU_ENCODE_PERCENT 0x00001000\n\nINTERNETAPI HINTERNET WINAPI InternetOpenA(LPCSTR ,DWORD ,LPCSTR ,LPCSTR ,DWORD);\nINTERNETAPI HINTERNET WINAPI InternetOpenW(LPCWSTR ,DWORD ,LPCWSTR ,LPCWSTR ,DWORD);\n#define InternetOpen  WINELIB_NAME_AW(InternetOpen)\n\n#define INTERNET_OPEN_TYPE_PRECONFIG                    0\n#define INTERNET_OPEN_TYPE_DIRECT                       1\n#define INTERNET_OPEN_TYPE_PROXY                        3\n#define INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY  4\n#define PRE_CONFIG_INTERNET_ACCESS  INTERNET_OPEN_TYPE_PRECONFIG\n#define LOCAL_INTERNET_ACCESS       INTERNET_OPEN_TYPE_DIRECT\n#define CERN_PROXY_INTERNET_ACCESS  INTERNET_OPEN_TYPE_PROXY\n\nBOOLAPI InternetCloseHandle(HINTERNET);\n\nINTERNETAPI HINTERNET WINAPI InternetConnectA(HINTERNET ,LPCSTR ,INTERNET_PORT ,\n\tLPCSTR ,LPCSTR ,DWORD ,DWORD ,DWORD_PTR );\nINTERNETAPI HINTERNET WINAPI InternetConnectW(HINTERNET ,LPCWSTR ,INTERNET_PORT ,\n\tLPCWSTR ,LPCWSTR ,DWORD ,DWORD ,DWORD_PTR );\n#define InternetConnect  WINELIB_NAME_AW(InternetConnect)\n\n#define INTERNET_SERVICE_URL    0\n#define INTERNET_SERVICE_FTP    1\n#define INTERNET_SERVICE_GOPHER 2\n#define INTERNET_SERVICE_HTTP   3\n\n#define InternetConnectUrl(hInternet,lpszUrl,dwFlags,dwContext) \\\n    InternetConnect(hInternet,\\\n                    lpszUrl,\\\n                    INTERNET_INVALID_PORT_NUMBER,\\\n                    NULL,\\\n                    NULL,\\\n                    INTERNET_SERVICE_URL,\\\n                    dwFlags,\\\n                    dwContext                       \\\n                    )\n\nINTERNETAPI HINTERNET WINAPI InternetOpenUrlA(HINTERNET ,LPCSTR ,LPCSTR ,DWORD ,DWORD ,DWORD_PTR);\nINTERNETAPI HINTERNET WINAPI InternetOpenUrlW(HINTERNET ,LPCWSTR ,LPCWSTR ,DWORD ,DWORD ,DWORD_PTR);\n#define InternetOpenUrl  WINELIB_NAME_AW(InternetOpenUrl)\n\nBOOLAPI InternetReadFile( HINTERNET ,LPVOID ,DWORD ,LPDWORD );\nINTERNETAPI BOOL WINAPI InternetReadFileExA( HINTERNET ,LPINTERNET_BUFFERSA ,DWORD ,DWORD_PTR );\nINTERNETAPI BOOL WINAPI InternetReadFileExW( HINTERNET ,LPINTERNET_BUFFERSW ,DWORD ,DWORD_PTR );\n#define InternetReadFileEx  WINELIB_NAME_AW(InternetReadFileEx)\n\n#define IRF_ASYNC       WININET_API_FLAG_ASYNC\n#define IRF_SYNC        WININET_API_FLAG_SYNC\n#define IRF_USE_CONTEXT WININET_API_FLAG_USE_CONTEXT\n#define IRF_NO_WAIT     0x00000008\n\nINTERNETAPI DWORD WINAPI InternetSetFilePointer(HINTERNET ,LONG ,PVOID ,DWORD ,DWORD_PTR);\nBOOLAPI InternetWriteFile(HINTERNET ,LPCVOID ,DWORD ,LPDWORD);\nBOOLAPI InternetQueryDataAvailable(HINTERNET ,LPDWORD ,DWORD ,DWORD_PTR);\nBOOLAPI InternetFindNextFileA(HINTERNET ,LPVOID);\nBOOLAPI InternetFindNextFileW(HINTERNET ,LPVOID);\n#define InternetFindNextFile  WINELIB_NAME_AW(InternetFindNextFile)\n\nBOOLAPI InternetQueryOptionA(HINTERNET ,DWORD ,LPVOID ,LPDWORD);\nBOOLAPI InternetQueryOptionW(HINTERNET ,DWORD ,LPVOID ,LPDWORD);\n#define InternetQueryOption  WINELIB_NAME_AW(InternetQueryOption)\n\nBOOLAPI InternetSetOptionA(HINTERNET ,DWORD ,LPVOID ,DWORD);\nBOOLAPI InternetSetOptionW(HINTERNET ,DWORD ,LPVOID ,DWORD);\n#define InternetSetOption  WINELIB_NAME_AW(InternetSetOption)\n\nBOOLAPI InternetSetOptionExA(HINTERNET ,DWORD ,LPVOID ,DWORD ,DWORD);\nBOOLAPI InternetSetOptionExW(HINTERNET ,DWORD ,LPVOID ,DWORD ,DWORD);\n#define InternetSetOptionEx  WINELIB_NAME_AW(InternetSetOptionEx)\n\nBOOLAPI InternetLockRequestFile(HINTERNET ,HANDLE *);\nBOOLAPI InternetUnlockRequestFile(HANDLE);\n\n#define ISO_GLOBAL      0x00000001\n#define ISO_REGISTRY    0x00000002\n\n#define ISO_VALID_FLAGS (ISO_GLOBAL | ISO_REGISTRY)\n#define INTERNET_OPTION_CALLBACK                1\n#define INTERNET_OPTION_CONNECT_TIMEOUT         2\n#define INTERNET_OPTION_CONNECT_RETRIES         3\n#define INTERNET_OPTION_CONNECT_BACKOFF         4\n#define INTERNET_OPTION_SEND_TIMEOUT            5\n#define INTERNET_OPTION_CONTROL_SEND_TIMEOUT    INTERNET_OPTION_SEND_TIMEOUT\n#define INTERNET_OPTION_RECEIVE_TIMEOUT         6\n#define INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT INTERNET_OPTION_RECEIVE_TIMEOUT\n#define INTERNET_OPTION_DATA_SEND_TIMEOUT       7\n#define INTERNET_OPTION_DATA_RECEIVE_TIMEOUT    8\n#define INTERNET_OPTION_HANDLE_TYPE             9\n#define INTERNET_OPTION_LISTEN_TIMEOUT          11\n#define INTERNET_OPTION_READ_BUFFER_SIZE        12\n#define INTERNET_OPTION_WRITE_BUFFER_SIZE       13\n#define INTERNET_OPTION_ASYNC_ID                15\n#define INTERNET_OPTION_ASYNC_PRIORITY          16\n#define INTERNET_OPTION_PARENT_HANDLE           21\n#define INTERNET_OPTION_KEEP_CONNECTION         22\n#define INTERNET_OPTION_REQUEST_FLAGS           23\n#define INTERNET_OPTION_EXTENDED_ERROR          24\n#define INTERNET_OPTION_OFFLINE_MODE            26\n#define INTERNET_OPTION_CACHE_STREAM_HANDLE     27\n#define INTERNET_OPTION_USERNAME                28\n#define INTERNET_OPTION_PASSWORD                29\n#define INTERNET_OPTION_ASYNC                   30\n#define INTERNET_OPTION_SECURITY_FLAGS          31\n#define INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT 32\n#define INTERNET_OPTION_DATAFILE_NAME           33\n#define INTERNET_OPTION_URL                     34\n#define INTERNET_OPTION_SECURITY_CERTIFICATE    35\n#define INTERNET_OPTION_SECURITY_KEY_BITNESS    36\n#define INTERNET_OPTION_REFRESH                 37\n#define INTERNET_OPTION_PROXY                   38\n#define INTERNET_OPTION_SETTINGS_CHANGED        39\n#define INTERNET_OPTION_VERSION                 40\n#define INTERNET_OPTION_USER_AGENT              41\n#define INTERNET_OPTION_END_BROWSER_SESSION     42\n#define INTERNET_OPTION_PROXY_USERNAME          43\n#define INTERNET_OPTION_PROXY_PASSWORD          44\n#define INTERNET_OPTION_CONTEXT_VALUE           45\n#define INTERNET_OPTION_CONNECT_LIMIT           46\n#define INTERNET_OPTION_SECURITY_SELECT_CLIENT_CERT 47\n#define INTERNET_OPTION_POLICY                  48\n#define INTERNET_OPTION_DISCONNECTED_TIMEOUT    49\n#define INTERNET_OPTION_CONNECTED_STATE         50\n#define INTERNET_OPTION_IDLE_STATE              51\n#define INTERNET_OPTION_OFFLINE_SEMANTICS       52\n#define INTERNET_OPTION_SECONDARY_CACHE_KEY     53\n#define INTERNET_OPTION_CALLBACK_FILTER         54\n#define INTERNET_OPTION_CONNECT_TIME            55\n#define INTERNET_OPTION_SEND_THROUGHPUT         56\n#define INTERNET_OPTION_RECEIVE_THROUGHPUT      57\n#define INTERNET_OPTION_REQUEST_PRIORITY        58\n#define INTERNET_OPTION_HTTP_VERSION            59\n#define INTERNET_OPTION_RESET_URLCACHE_SESSION  60\n#define INTERNET_OPTION_ERROR_MASK              62\n#define INTERNET_OPTION_FROM_CACHE_TIMEOUT      63\n#define INTERNET_OPTION_BYPASS_EDITED_ENTRY     64\n#define INTERNET_OPTION_HTTP_DECODING           65\n#define INTERNET_OPTION_DIAGNOSTIC_SOCKET_INFO  67\n#define INTERNET_OPTION_CODEPAGE                68\n#define INTERNET_OPTION_CACHE_TIMESTAMPS        69\n#define INTERNET_OPTION_DISABLE_AUTODIAL        70\n#define INTERNET_OPTION_MAX_CONNS_PER_SERVER    73\n#define INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER 74\n#define INTERNET_OPTION_PER_CONNECTION_OPTION   75\n#define INTERNET_OPTION_DIGEST_AUTH_UNLOAD      76\n#define INTERNET_OPTION_IGNORE_OFFLINE          77\n#define INTERNET_OPTION_IDENTITY                78\n#define INTERNET_OPTION_REMOVE_IDENTITY         79\n#define INTERNET_OPTION_ALTER_IDENTITY          80\n#define INTERNET_OPTION_SUPPRESS_BEHAVIOR       81\n#define INTERNET_OPTION_AUTODIAL_MODE           82\n#define INTERNET_OPTION_AUTODIAL_CONNECTION     83\n#define INTERNET_OPTION_CLIENT_CERT_CONTEXT     84\n#define INTERNET_OPTION_AUTH_FLAGS              85\n#define INTERNET_OPTION_COOKIES_3RD_PARTY       86\n#define INTERNET_OPTION_DISABLE_PASSPORT_AUTH   87\n#define INTERNET_OPTION_SEND_UTF8_SERVERNAME_TO_PROXY 88\n#define INTERNET_OPTION_EXEMPT_CONNECTION_LIMIT 89\n#define INTERNET_OPTION_ENABLE_PASSPORT_AUTH    90\n\n#define INTERNET_OPTION_HIBERNATE_INACTIVE_WORKER_THREADS 91\n#define INTERNET_OPTION_ACTIVATE_WORKER_THREADS           92\n#define INTERNET_OPTION_RESTORE_WORKER_THREAD_DEFAULTS    93\n#define INTERNET_OPTION_SOCKET_SEND_BUFFER_LENGTH         94\n\n#define INTERNET_OPTION_PROXY_SETTINGS_CHANGED  95\n#define INTERNET_OPTION_DATAFILE_EXT            96\n\n#define INTERNET_OPTION_CODEPAGE_PATH           100\n#define INTERNET_OPTION_CODEPAGE_EXTRA          101\n#define INTERNET_OPTION_IDN                     102\n#define INTERNET_OPTION_MAX_CONNS_PER_PROXY     103\n#define INTERNET_OPTION_SUPPRESS_SERVER_AUTH    104\n#define INTERNET_OPTION_SERVER_CERT_CHAIN_CONTEXT 105\n\n\n#define INTERNET_FIRST_OPTION                   INTERNET_OPTION_CALLBACK\n#define INTERNET_LAST_OPTION                    INTERNET_OPTION_SERVER_CERT_CHAIN_CONTEXT\n\n#define INTERNET_PRIORITY_FOREGROUND            1000\n#define INTERNET_HANDLE_TYPE_INTERNET           1\n#define INTERNET_HANDLE_TYPE_CONNECT_FTP        2\n#define INTERNET_HANDLE_TYPE_CONNECT_GOPHER     3\n#define INTERNET_HANDLE_TYPE_CONNECT_HTTP       4\n#define INTERNET_HANDLE_TYPE_FTP_FIND           5\n#define INTERNET_HANDLE_TYPE_FTP_FIND_HTML      6\n#define INTERNET_HANDLE_TYPE_FTP_FILE           7\n#define INTERNET_HANDLE_TYPE_FTP_FILE_HTML      8\n#define INTERNET_HANDLE_TYPE_GOPHER_FIND        9\n#define INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML   10\n#define INTERNET_HANDLE_TYPE_GOPHER_FILE        11\n#define INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML   12\n#define INTERNET_HANDLE_TYPE_HTTP_REQUEST       13\n#define SECURITY_FLAG_SECURE                    0x00000001\n#define SECURITY_FLAG_STRENGTH_WEAK             0x10000000\n#define SECURITY_FLAG_STRENGTH_MEDIUM           0x40000000\n#define SECURITY_FLAG_STRENGTH_STRONG           0x20000000\n#define SECURITY_FLAG_UNKNOWNBIT                0x80000000\n#define SECURITY_FLAG_NORMALBITNESS             SECURITY_FLAG_STRENGTH_WEAK\n#define SECURITY_FLAG_SSL                       0x00000002\n#define SECURITY_FLAG_SSL3                      0x00000004\n#define SECURITY_FLAG_PCT                       0x00000008\n#define SECURITY_FLAG_PCT4                      0x00000010\n#define SECURITY_FLAG_IETFSSL4                  0x00000020\n#define SECURITY_FLAG_40BIT                     SECURITY_FLAG_STRENGTH_WEAK\n#define SECURITY_FLAG_128BIT                    SECURITY_FLAG_STRENGTH_STRONG\n#define SECURITY_FLAG_56BIT                     SECURITY_FLAG_STRENGTH_MEDIUM\n#define SECURITY_FLAG_IGNORE_REVOCATION         0x00000080\n#define SECURITY_FLAG_IGNORE_UNKNOWN_CA         0x00000100\n#define SECURITY_FLAG_IGNORE_WRONG_USAGE        0x00000200\n#define SECURITY_FLAG_IGNORE_CERT_CN_INVALID    INTERNET_FLAG_IGNORE_CERT_CN_INVALID\n#define SECURITY_FLAG_IGNORE_CERT_DATE_INVALID  INTERNET_FLAG_IGNORE_CERT_DATE_INVALID\n#define SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPS  INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS\n#define SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTP   INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP\n#define SECURITY_SET_MASK       (SECURITY_FLAG_IGNORE_REVOCATION |\\\n                                 SECURITY_FLAG_IGNORE_UNKNOWN_CA |\\\n                                 SECURITY_FLAG_IGNORE_CERT_CN_INVALID |\\\n                                 SECURITY_FLAG_IGNORE_CERT_DATE_INVALID |\\\n                                 SECURITY_FLAG_IGNORE_WRONG_USAGE)\n\n\n\nBOOLAPI InternetGetLastResponseInfoA(LPDWORD ,LPSTR ,LPDWORD);\nBOOLAPI InternetGetLastResponseInfoW(LPDWORD ,LPWSTR ,LPDWORD);\n#define InternetGetLastResponseInfo  WINELIB_NAME_AW(InternetGetLastResponseInfo)\n\ntypedef VOID (CALLBACK *INTERNET_STATUS_CALLBACK)(HINTERNET ,DWORD_PTR ,DWORD ,\n\tLPVOID ,DWORD);\n\ntypedef INTERNET_STATUS_CALLBACK * LPINTERNET_STATUS_CALLBACK;\n\nINTERNETAPI INTERNET_STATUS_CALLBACK WINAPI InternetSetStatusCallbackA(HINTERNET ,INTERNET_STATUS_CALLBACK);\nINTERNETAPI INTERNET_STATUS_CALLBACK WINAPI InternetSetStatusCallbackW(HINTERNET ,INTERNET_STATUS_CALLBACK);\n#define InternetSetStatusCallback WINELIB_NAME_AW(InternetSetStatusCallback)\n\n#define INTERNET_STATUS_RESOLVING_NAME          10\n#define INTERNET_STATUS_NAME_RESOLVED           11\n#define INTERNET_STATUS_CONNECTING_TO_SERVER    20\n#define INTERNET_STATUS_CONNECTED_TO_SERVER     21\n#define INTERNET_STATUS_SENDING_REQUEST         30\n#define INTERNET_STATUS_REQUEST_SENT            31\n#define INTERNET_STATUS_RECEIVING_RESPONSE      40\n#define INTERNET_STATUS_RESPONSE_RECEIVED       41\n#define INTERNET_STATUS_CTL_RESPONSE_RECEIVED   42\n#define INTERNET_STATUS_PREFETCH                43\n#define INTERNET_STATUS_CLOSING_CONNECTION      50\n#define INTERNET_STATUS_CONNECTION_CLOSED       51\n#define INTERNET_STATUS_HANDLE_CREATED          60\n#define INTERNET_STATUS_HANDLE_CLOSING          70\n#define INTERNET_STATUS_DETECTING_PROXY         80\n#define INTERNET_STATUS_REQUEST_COMPLETE        100\n#define INTERNET_STATUS_REDIRECT                110\n#define INTERNET_STATUS_INTERMEDIATE_RESPONSE   120\n#define INTERNET_STATUS_USER_INPUT_REQUIRED     140\n#define INTERNET_STATUS_STATE_CHANGE            200\n#define INTERNET_STATUS_COOKIE_SENT             320\n#define INTERNET_STATUS_COOKIE_RECEIVED         321\n#define INTERNET_STATUS_PRIVACY_IMPACTED        324\n#define INTERNET_STATUS_P3P_HEADER              325\n#define INTERNET_STATUS_P3P_POLICYREF           326\n#define INTERNET_STATUS_COOKIE_HISTORY          327\n#define INTERNET_STATE_CONNECTED                0x00000001\n#define INTERNET_STATE_DISCONNECTED             0x00000002\n#define INTERNET_STATE_DISCONNECTED_BY_USER     0x00000010\n#define INTERNET_STATE_IDLE                     0x00000100\n#define INTERNET_STATE_BUSY                     0x00000200\n\n#define INTERNET_INVALID_STATUS_CALLBACK        ((INTERNET_STATUS_CALLBACK)(-1))\n\n#define FTP_TRANSFER_TYPE_UNKNOWN   0x00000000\n#define FTP_TRANSFER_TYPE_ASCII     0x00000001\n#define FTP_TRANSFER_TYPE_BINARY    0x00000002\n#define FTP_TRANSFER_TYPE_MASK      (FTP_TRANSFER_TYPE_ASCII | FTP_TRANSFER_TYPE_BINARY)\n\nBOOLAPI FtpCommandA(HINTERNET, BOOL, DWORD, LPCSTR, DWORD_PTR, HINTERNET *);\nBOOLAPI FtpCommandW(HINTERNET, BOOL, DWORD, LPCWSTR, DWORD_PTR, HINTERNET *);\n#define FtpCommand  WINELIB_NAME_AW(FtpCommand)\n\nINTERNETAPI HINTERNET WINAPI FtpFindFirstFileA(HINTERNET ,LPCSTR ,\n\tLPWIN32_FIND_DATAA ,DWORD ,DWORD_PTR);\nINTERNETAPI HINTERNET WINAPI FtpFindFirstFileW(HINTERNET ,LPCWSTR ,\n\tLPWIN32_FIND_DATAW ,DWORD ,DWORD_PTR);\n#define FtpFindFirstFile  WINELIB_NAME_AW(FtpFindFirstFile)\n\nBOOLAPI FtpGetFileA(HINTERNET ,LPCSTR ,LPCSTR ,BOOL ,DWORD ,DWORD ,DWORD_PTR);\nBOOLAPI FtpGetFileW(HINTERNET ,LPCWSTR ,LPCWSTR ,BOOL ,DWORD ,DWORD ,DWORD_PTR);\n#define FtpGetFile  WINELIB_NAME_AW(FtpGetFile)\n\nDWORD WINAPI FtpGetFileSize(HINTERNET, LPDWORD);\n\nBOOLAPI FtpPutFileA(HINTERNET ,LPCSTR ,LPCSTR ,DWORD ,DWORD_PTR);\nBOOLAPI FtpPutFileW(HINTERNET ,LPCWSTR ,LPCWSTR ,DWORD ,DWORD_PTR);\n#define FtpPutFile  WINELIB_NAME_AW(FtpPutFile)\n\nBOOLAPI FtpDeleteFileA(HINTERNET ,LPCSTR);\nBOOLAPI FtpDeleteFileW(HINTERNET ,LPCWSTR);\n#define FtpDeleteFile  WINELIB_NAME_AW(FtpDeleteFile)\n\nBOOLAPI FtpRenameFileA(HINTERNET ,LPCSTR ,LPCSTR);\nBOOLAPI FtpRenameFileW(HINTERNET ,LPCWSTR ,LPCWSTR);\n#define FtpRenameFile  WINELIB_NAME_AW(FtpRenameFile)\n\nINTERNETAPI HINTERNET WINAPI FtpOpenFileA(HINTERNET ,LPCSTR ,DWORD ,DWORD ,DWORD_PTR);\nINTERNETAPI HINTERNET WINAPI FtpOpenFileW(HINTERNET ,LPCWSTR ,DWORD ,DWORD ,DWORD_PTR);\n#define FtpOpenFile  WINELIB_NAME_AW(FtpOpenFile)\n\nBOOLAPI FtpCreateDirectoryA(HINTERNET ,LPCSTR);\nBOOLAPI FtpCreateDirectoryW(HINTERNET ,LPCWSTR);\n#define FtpCreateDirectory  WINELIB_NAME_AW(FtpCreateDirectory)\n\nBOOLAPI FtpRemoveDirectoryA(HINTERNET ,LPCSTR);\nBOOLAPI FtpRemoveDirectoryW(HINTERNET ,LPCWSTR);\n#define FtpRemoveDirectory  WINELIB_NAME_AW(FtpRemoveDirectory)\n\nBOOLAPI FtpSetCurrentDirectoryA(HINTERNET ,LPCSTR);\nBOOLAPI FtpSetCurrentDirectoryW(HINTERNET ,LPCWSTR);\n#define FtpSetCurrentDirectory  WINELIB_NAME_AW(FtpSetCurrentDirectory)\n\nBOOLAPI FtpGetCurrentDirectoryA(HINTERNET ,LPSTR ,LPDWORD);\nBOOLAPI FtpGetCurrentDirectoryW(HINTERNET ,LPWSTR ,LPDWORD);\n#define FtpGetCurrentDirectory  WINELIB_NAME_AW(FtpGetCurrentDirectory)\n\n#define MAX_GOPHER_DISPLAY_TEXT     128\n#define MAX_GOPHER_SELECTOR_TEXT    256\n#define MAX_GOPHER_HOST_NAME        INTERNET_MAX_HOST_NAME_LENGTH\n#define MAX_GOPHER_LOCATOR_LENGTH   (1                                  \\\n                                    + MAX_GOPHER_DISPLAY_TEXT           \\\n                                    + 1                                 \\\n                                    + MAX_GOPHER_SELECTOR_TEXT          \\\n                                    + 1                                 \\\n                                    + MAX_GOPHER_HOST_NAME              \\\n                                    + 1                                 \\\n                                    + INTERNET_MAX_PORT_NUMBER_LENGTH   \\\n                                    + 1                                 \\\n                                    + 1                                 \\\n                                    + 2                                 \\\n                                    )\n\n\ntypedef struct {\n    CHAR   DisplayString[MAX_GOPHER_DISPLAY_TEXT + 1];\n    DWORD GopherType;\n    DWORD SizeLow;\n    DWORD SizeHigh;\n    FILETIME LastModificationTime;\n    CHAR   Locator[MAX_GOPHER_LOCATOR_LENGTH + 1];\n} GOPHER_FIND_DATAA,* LPGOPHER_FIND_DATAA;\n\ntypedef struct {\n    WCHAR  DisplayString[MAX_GOPHER_DISPLAY_TEXT + 1];\n    DWORD GopherType;\n    DWORD SizeLow;\n    DWORD SizeHigh;\n    FILETIME LastModificationTime;\n    WCHAR  Locator[MAX_GOPHER_LOCATOR_LENGTH + 1];\n} GOPHER_FIND_DATAW,* LPGOPHER_FIND_DATAW;\n\nDECL_WINELIB_TYPE_AW(GOPHER_FIND_DATA)\nDECL_WINELIB_TYPE_AW(LPGOPHER_FIND_DATA)\n\n#define GOPHER_TYPE_TEXT_FILE       0x00000001\n#define GOPHER_TYPE_DIRECTORY       0x00000002\n#define GOPHER_TYPE_CSO             0x00000004\n#define GOPHER_TYPE_ERROR           0x00000008\n#define GOPHER_TYPE_MAC_BINHEX      0x00000010\n#define GOPHER_TYPE_DOS_ARCHIVE     0x00000020\n#define GOPHER_TYPE_UNIX_UUENCODED  0x00000040\n#define GOPHER_TYPE_INDEX_SERVER    0x00000080\n#define GOPHER_TYPE_TELNET          0x00000100\n#define GOPHER_TYPE_BINARY          0x00000200\n#define GOPHER_TYPE_REDUNDANT       0x00000400\n#define GOPHER_TYPE_TN3270          0x00000800\n#define GOPHER_TYPE_GIF             0x00001000\n#define GOPHER_TYPE_IMAGE           0x00002000\n#define GOPHER_TYPE_BITMAP          0x00004000\n#define GOPHER_TYPE_MOVIE           0x00008000\n#define GOPHER_TYPE_SOUND           0x00010000\n#define GOPHER_TYPE_HTML            0x00020000\n#define GOPHER_TYPE_PDF             0x00040000\n#define GOPHER_TYPE_CALENDAR        0x00080000\n#define GOPHER_TYPE_INLINE          0x00100000\n#define GOPHER_TYPE_UNKNOWN         0x20000000\n#define GOPHER_TYPE_ASK             0x40000000\n#define GOPHER_TYPE_GOPHER_PLUS     0x80000000\n\n#define IS_GOPHER_FILE(type)            (BOOL)(((type) & GOPHER_TYPE_FILE_MASK) != 0)\n#define IS_GOPHER_DIRECTORY(type)       (BOOL)(((type) & GOPHER_TYPE_DIRECTORY) != 0)\n#define IS_GOPHER_PHONE_SERVER(type)    (BOOL)(((type) & GOPHER_TYPE_CSO) != 0)\n#define IS_GOPHER_ERROR(type)           (BOOL)(((type) & GOPHER_TYPE_ERROR) != 0)\n#define IS_GOPHER_INDEX_SERVER(type)    (BOOL)(((type) & GOPHER_TYPE_INDEX_SERVER) != 0)\n#define IS_GOPHER_TELNET_SESSION(type)  (BOOL)(((type) & GOPHER_TYPE_TELNET) != 0)\n#define IS_GOPHER_BACKUP_SERVER(type)   (BOOL)(((type) & GOPHER_TYPE_REDUNDANT) != 0)\n#define IS_GOPHER_TN3270_SESSION(type)  (BOOL)(((type) & GOPHER_TYPE_TN3270) != 0)\n#define IS_GOPHER_ASK(type)             (BOOL)(((type) & GOPHER_TYPE_ASK) != 0)\n#define IS_GOPHER_PLUS(type)            (BOOL)(((type) & GOPHER_TYPE_GOPHER_PLUS) != 0)\n#define IS_GOPHER_TYPE_KNOWN(type)      (BOOL)(!((type) & GOPHER_TYPE_UNKNOWN))\n#define GOPHER_TYPE_FILE_MASK       (GOPHER_TYPE_TEXT_FILE \\\n                                    | GOPHER_TYPE_MAC_BINHEX        \\\n                                    | GOPHER_TYPE_DOS_ARCHIVE       \\\n                                    | GOPHER_TYPE_UNIX_UUENCODED    \\\n                                    | GOPHER_TYPE_BINARY            \\\n                                    | GOPHER_TYPE_GIF               \\\n                                    | GOPHER_TYPE_IMAGE             \\\n                                    | GOPHER_TYPE_BITMAP            \\\n                                    | GOPHER_TYPE_MOVIE             \\\n                                    | GOPHER_TYPE_SOUND             \\\n                                    | GOPHER_TYPE_HTML              \\\n                                    | GOPHER_TYPE_PDF               \\\n                                    | GOPHER_TYPE_CALENDAR          \\\n                                    | GOPHER_TYPE_INLINE            \\\n                                    )\n\n\ntypedef struct {\n    LPCSTR Comment;\n    LPCSTR EmailAddress;\n} GOPHER_ADMIN_ATTRIBUTE_TYPEA,* LPGOPHER_ADMIN_ATTRIBUTE_TYPEA;\n\ntypedef struct {\n    LPCWSTR Comment;\n    LPCWSTR EmailAddress;\n} GOPHER_ADMIN_ATTRIBUTE_TYPEW,* LPGOPHER_ADMIN_ATTRIBUTE_TYPEW;\n\nDECL_WINELIB_TYPE_AW(GOPHER_ADMIN_ATTRIBUTE_TYPE)\nDECL_WINELIB_TYPE_AW(LPGOPHER_ADMIN_ATTRIBUTE_TYPE)\n\ntypedef struct {\n    FILETIME DateAndTime;\n} GOPHER_MOD_DATE_ATTRIBUTE_TYPE,* LPGOPHER_MOD_DATE_ATTRIBUTE_TYPE;\n\ntypedef struct {\n    DWORD Ttl;\n} GOPHER_TTL_ATTRIBUTE_TYPE,* LPGOPHER_TTL_ATTRIBUTE_TYPE;\n\ntypedef struct {\n    INT Score;\n} GOPHER_SCORE_ATTRIBUTE_TYPE,* LPGOPHER_SCORE_ATTRIBUTE_TYPE;\n\ntypedef struct {\n    INT LowerBound;\n    INT UpperBound;\n} GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE,* LPGOPHER_SCORE_RANGE_ATTRIBUTE_TYPE;\n\ntypedef struct {\n    LPCSTR Site;\n} GOPHER_SITE_ATTRIBUTE_TYPEA,* LPGOPHER_SITE_ATTRIBUTE_TYPEA;\n\ntypedef struct {\n    LPCWSTR Site;\n} GOPHER_SITE_ATTRIBUTE_TYPEW,* LPGOPHER_SITE_ATTRIBUTE_TYPEW;\n\nDECL_WINELIB_TYPE_AW(GOPHER_SITE_ATTRIBUTE_TYPE)\nDECL_WINELIB_TYPE_AW(LPGOPHER_SITE_ATTRIBUTE_TYPE)\n\ntypedef struct {\n    LPCSTR Organization;\n} GOPHER_ORGANIZATION_ATTRIBUTE_TYPEA,* LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPEA;\n\ntypedef struct {\n    LPCWSTR Organization;\n} GOPHER_ORGANIZATION_ATTRIBUTE_TYPEW,* LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPEW;\n\nDECL_WINELIB_TYPE_AW(GOPHER_ORGANIZATION_ATTRIBUTE_TYPE)\nDECL_WINELIB_TYPE_AW(LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPE)\n\ntypedef struct {\n    LPCSTR Location;\n} GOPHER_LOCATION_ATTRIBUTE_TYPEA,* LPGOPHER_LOCATION_ATTRIBUTE_TYPEA;\n\ntypedef struct {\n    LPCWSTR Location;\n} GOPHER_LOCATION_ATTRIBUTE_TYPEW,* LPGOPHER_LOCATION_ATTRIBUTE_TYPEW;\n\nDECL_WINELIB_TYPE_AW(GOPHER_LOCATION_ATTRIBUTE_TYPE)\nDECL_WINELIB_TYPE_AW(LPGOPHER_LOCATION_ATTRIBUTE_TYPE)\n\ntypedef struct {\n    INT DegreesNorth;\n    INT MinutesNorth;\n    INT SecondsNorth;\n    INT DegreesEast;\n    INT MinutesEast;\n    INT SecondsEast;\n} GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE,* LPGOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE;\n\ntypedef struct {\n    INT Zone;\n} GOPHER_TIMEZONE_ATTRIBUTE_TYPE,* LPGOPHER_TIMEZONE_ATTRIBUTE_TYPE;\n\ntypedef struct {\n    LPCSTR Provider;\n} GOPHER_PROVIDER_ATTRIBUTE_TYPEA,* LPGOPHER_PROVIDER_ATTRIBUTE_TYPEA;\n\ntypedef struct {\n    LPCWSTR Provider;\n} GOPHER_PROVIDER_ATTRIBUTE_TYPEW,* LPGOPHER_PROVIDER_ATTRIBUTE_TYPEW;\n\nDECL_WINELIB_TYPE_AW(GOPHER_PROVIDER_ATTRIBUTE_TYPE)\nDECL_WINELIB_TYPE_AW(LPGOPHER_PROVIDER_ATTRIBUTE_TYPE)\n\ntypedef struct {\n    LPCSTR Version;\n} GOPHER_VERSION_ATTRIBUTE_TYPEA,* LPGOPHER_VERSION_ATTRIBUTE_TYPEA;\n\ntypedef struct {\n    LPCWSTR Version;\n} GOPHER_VERSION_ATTRIBUTE_TYPEW,* LPGOPHER_VERSION_ATTRIBUTE_TYPEW;\n\nDECL_WINELIB_TYPE_AW(GOPHER_VERSION_ATTRIBUTE_TYPE)\nDECL_WINELIB_TYPE_AW(LPGOPHER_VERSION_ATTRIBUTE_TYPE)\n\ntypedef struct {\n    LPCSTR ShortAbstract;\n    LPCSTR AbstractFile;\n} GOPHER_ABSTRACT_ATTRIBUTE_TYPEA,* LPGOPHER_ABSTRACT_ATTRIBUTE_TYPEA;\n\ntypedef struct {\n    LPCWSTR ShortAbstract;\n    LPCWSTR AbstractFile;\n} GOPHER_ABSTRACT_ATTRIBUTE_TYPEW,* LPGOPHER_ABSTRACT_ATTRIBUTE_TYPEW;\n\nDECL_WINELIB_TYPE_AW(GOPHER_ABSTRACT_ATTRIBUTE_TYPE)\nDECL_WINELIB_TYPE_AW(LPGOPHER_ABSTRACT_ATTRIBUTE_TYPE)\n\ntypedef struct {\n    LPCSTR ContentType;\n    LPCSTR Language;\n    DWORD Size;\n} GOPHER_VIEW_ATTRIBUTE_TYPEA,* LPGOPHER_VIEW_ATTRIBUTE_TYPEA;\n\ntypedef struct {\n    LPCWSTR ContentType;\n    LPCWSTR Language;\n    DWORD Size;\n} GOPHER_VIEW_ATTRIBUTE_TYPEW,* LPGOPHER_VIEW_ATTRIBUTE_TYPEW;\n\nDECL_WINELIB_TYPE_AW(GOPHER_VIEW_ATTRIBUTE_TYPE)\nDECL_WINELIB_TYPE_AW(LPGOPHER_VIEW_ATTRIBUTE_TYPE)\n\ntypedef struct {\n    BOOL TreeWalk;\n} GOPHER_VERONICA_ATTRIBUTE_TYPE,* LPGOPHER_VERONICA_ATTRIBUTE_TYPE;\n\ntypedef struct {\n    LPCSTR QuestionType;\n    LPCSTR QuestionText;\n} GOPHER_ASK_ATTRIBUTE_TYPEA,* LPGOPHER_ASK_ATTRIBUTE_TYPEA;\n\ntypedef struct {\n    LPCWSTR QuestionType;\n    LPCWSTR QuestionText;\n} GOPHER_ASK_ATTRIBUTE_TYPEW,* LPGOPHER_ASK_ATTRIBUTE_TYPEW;\n\nDECL_WINELIB_TYPE_AW(GOPHER_ASK_ATTRIBUTE_TYPE)\nDECL_WINELIB_TYPE_AW(LPGOPHER_ASK_ATTRIBUTE_TYPE)\n\ntypedef struct {\n    LPCSTR Text;\n} GOPHER_UNKNOWN_ATTRIBUTE_TYPEA,* LPGOPHER_UNKNOWN_ATTRIBUTE_TYPEA;\n\ntypedef struct {\n    LPCWSTR Text;\n} GOPHER_UNKNOWN_ATTRIBUTE_TYPEW,* LPGOPHER_UNKNOWN_ATTRIBUTE_TYPEW;\n\nDECL_WINELIB_TYPE_AW(GOPHER_UNKNOWN_ATTRIBUTE_TYPE)\nDECL_WINELIB_TYPE_AW(LPGOPHER_UNKNOWN_ATTRIBUTE_TYPE)\n\ntypedef struct {\n    DWORD CategoryId;\n    DWORD AttributeId;\n    union {\n        GOPHER_ADMIN_ATTRIBUTE_TYPEA Admin;\n        GOPHER_MOD_DATE_ATTRIBUTE_TYPE ModDate;\n        GOPHER_TTL_ATTRIBUTE_TYPE Ttl;\n        GOPHER_SCORE_ATTRIBUTE_TYPE Score;\n        GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE ScoreRange;\n        GOPHER_SITE_ATTRIBUTE_TYPEA Site;\n        GOPHER_ORGANIZATION_ATTRIBUTE_TYPEA Organization;\n        GOPHER_LOCATION_ATTRIBUTE_TYPEA Location;\n        GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE GeographicalLocation;\n        GOPHER_TIMEZONE_ATTRIBUTE_TYPE TimeZone;\n        GOPHER_PROVIDER_ATTRIBUTE_TYPEA Provider;\n        GOPHER_VERSION_ATTRIBUTE_TYPEA Version;\n        GOPHER_ABSTRACT_ATTRIBUTE_TYPEA Abstract;\n        GOPHER_VIEW_ATTRIBUTE_TYPEA View;\n        GOPHER_VERONICA_ATTRIBUTE_TYPE Veronica;\n        GOPHER_ASK_ATTRIBUTE_TYPEA Ask;\n        GOPHER_UNKNOWN_ATTRIBUTE_TYPEA Unknown;\n    } AttributeType;\n} GOPHER_ATTRIBUTE_TYPEA, *LPGOPHER_ATTRIBUTE_TYPEA;\n\ntypedef struct {\n    DWORD CategoryId;\n    DWORD AttributeId;\n    union {\n        GOPHER_ADMIN_ATTRIBUTE_TYPEW Admin;\n        GOPHER_MOD_DATE_ATTRIBUTE_TYPE ModDate;\n        GOPHER_TTL_ATTRIBUTE_TYPE Ttl;\n        GOPHER_SCORE_ATTRIBUTE_TYPE Score;\n        GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE ScoreRange;\n        GOPHER_SITE_ATTRIBUTE_TYPEW Site;\n        GOPHER_ORGANIZATION_ATTRIBUTE_TYPEW Organization;\n        GOPHER_LOCATION_ATTRIBUTE_TYPEW Location;\n        GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE GeographicalLocation;\n        GOPHER_TIMEZONE_ATTRIBUTE_TYPE TimeZone;\n        GOPHER_PROVIDER_ATTRIBUTE_TYPEW Provider;\n        GOPHER_VERSION_ATTRIBUTE_TYPEW Version;\n        GOPHER_ABSTRACT_ATTRIBUTE_TYPEW Abstract;\n        GOPHER_VIEW_ATTRIBUTE_TYPEW View;\n        GOPHER_VERONICA_ATTRIBUTE_TYPE Veronica;\n        GOPHER_ASK_ATTRIBUTE_TYPEW Ask;\n        GOPHER_UNKNOWN_ATTRIBUTE_TYPEW Unknown;\n    } AttributeType;\n} GOPHER_ATTRIBUTE_TYPEW, *LPGOPHER_ATTRIBUTE_TYPEW;\n\nDECL_WINELIB_TYPE_AW(GOPHER_ATTRIBUTE_TYPE)\nDECL_WINELIB_TYPE_AW(LPGOPHER_ATTRIBUTE_TYPE)\n\n#define MAX_GOPHER_CATEGORY_NAME    128\n#define MAX_GOPHER_ATTRIBUTE_NAME   128\n#define MIN_GOPHER_ATTRIBUTE_LENGTH 256\n\n#define GOPHER_INFO_CATEGORY        TEXT(\"+INFO\")\n#define GOPHER_ADMIN_CATEGORY       TEXT(\"+ADMIN\")\n#define GOPHER_VIEWS_CATEGORY       TEXT(\"+VIEWS\")\n#define GOPHER_ABSTRACT_CATEGORY    TEXT(\"+ABSTRACT\")\n#define GOPHER_VERONICA_CATEGORY    TEXT(\"+VERONICA\")\n#define GOPHER_ADMIN_ATTRIBUTE      TEXT(\"Admin\")\n#define GOPHER_MOD_DATE_ATTRIBUTE   TEXT(\"Mod-Date\")\n#define GOPHER_TTL_ATTRIBUTE        TEXT(\"TTL\")\n#define GOPHER_SCORE_ATTRIBUTE      TEXT(\"Score\")\n#define GOPHER_RANGE_ATTRIBUTE      TEXT(\"Score-range\")\n#define GOPHER_SITE_ATTRIBUTE       TEXT(\"Site\")\n#define GOPHER_ORG_ATTRIBUTE        TEXT(\"Org\")\n#define GOPHER_LOCATION_ATTRIBUTE   TEXT(\"Loc\")\n#define GOPHER_GEOG_ATTRIBUTE       TEXT(\"Geog\")\n#define GOPHER_TIMEZONE_ATTRIBUTE   TEXT(\"TZ\")\n#define GOPHER_PROVIDER_ATTRIBUTE   TEXT(\"Provider\")\n#define GOPHER_VERSION_ATTRIBUTE    TEXT(\"Version\")\n#define GOPHER_ABSTRACT_ATTRIBUTE   TEXT(\"Abstract\")\n#define GOPHER_VIEW_ATTRIBUTE       TEXT(\"View\")\n#define GOPHER_TREEWALK_ATTRIBUTE   TEXT(\"treewalk\")\n\n#define GOPHER_ATTRIBUTE_ID_BASE        0xabcccc00\n\n#define GOPHER_CATEGORY_ID_ALL          (GOPHER_ATTRIBUTE_ID_BASE + 1)\n#define GOPHER_CATEGORY_ID_INFO         (GOPHER_ATTRIBUTE_ID_BASE + 2)\n#define GOPHER_CATEGORY_ID_ADMIN        (GOPHER_ATTRIBUTE_ID_BASE + 3)\n#define GOPHER_CATEGORY_ID_VIEWS        (GOPHER_ATTRIBUTE_ID_BASE + 4)\n#define GOPHER_CATEGORY_ID_ABSTRACT     (GOPHER_ATTRIBUTE_ID_BASE + 5)\n#define GOPHER_CATEGORY_ID_VERONICA     (GOPHER_ATTRIBUTE_ID_BASE + 6)\n#define GOPHER_CATEGORY_ID_ASK          (GOPHER_ATTRIBUTE_ID_BASE + 7)\n#define GOPHER_CATEGORY_ID_UNKNOWN      (GOPHER_ATTRIBUTE_ID_BASE + 8)\n\n#define GOPHER_ATTRIBUTE_ID_ALL         (GOPHER_ATTRIBUTE_ID_BASE + 9)\n#define GOPHER_ATTRIBUTE_ID_ADMIN       (GOPHER_ATTRIBUTE_ID_BASE + 10)\n#define GOPHER_ATTRIBUTE_ID_MOD_DATE    (GOPHER_ATTRIBUTE_ID_BASE + 11)\n#define GOPHER_ATTRIBUTE_ID_TTL         (GOPHER_ATTRIBUTE_ID_BASE + 12)\n#define GOPHER_ATTRIBUTE_ID_SCORE       (GOPHER_ATTRIBUTE_ID_BASE + 13)\n#define GOPHER_ATTRIBUTE_ID_RANGE       (GOPHER_ATTRIBUTE_ID_BASE + 14)\n#define GOPHER_ATTRIBUTE_ID_SITE        (GOPHER_ATTRIBUTE_ID_BASE + 15)\n#define GOPHER_ATTRIBUTE_ID_ORG         (GOPHER_ATTRIBUTE_ID_BASE + 16)\n#define GOPHER_ATTRIBUTE_ID_LOCATION    (GOPHER_ATTRIBUTE_ID_BASE + 17)\n#define GOPHER_ATTRIBUTE_ID_GEOG        (GOPHER_ATTRIBUTE_ID_BASE + 18)\n#define GOPHER_ATTRIBUTE_ID_TIMEZONE    (GOPHER_ATTRIBUTE_ID_BASE + 19)\n#define GOPHER_ATTRIBUTE_ID_PROVIDER    (GOPHER_ATTRIBUTE_ID_BASE + 20)\n#define GOPHER_ATTRIBUTE_ID_VERSION     (GOPHER_ATTRIBUTE_ID_BASE + 21)\n#define GOPHER_ATTRIBUTE_ID_ABSTRACT    (GOPHER_ATTRIBUTE_ID_BASE + 22)\n#define GOPHER_ATTRIBUTE_ID_VIEW        (GOPHER_ATTRIBUTE_ID_BASE + 23)\n#define GOPHER_ATTRIBUTE_ID_TREEWALK    (GOPHER_ATTRIBUTE_ID_BASE + 24)\n#define GOPHER_ATTRIBUTE_ID_UNKNOWN     (GOPHER_ATTRIBUTE_ID_BASE + 25)\n\nBOOLAPI GopherCreateLocatorA(LPCSTR ,INTERNET_PORT ,LPCSTR ,\n\tLPCSTR ,DWORD ,LPSTR ,LPDWORD);\nBOOLAPI GopherCreateLocatorW(LPCWSTR ,INTERNET_PORT ,LPCWSTR ,\n\tLPCWSTR ,DWORD ,LPWSTR ,LPDWORD);\n#define GopherCreateLocator  WINELIB_NAME_AW(GopherCreateLocator)\n\nBOOLAPI GopherGetLocatorTypeA(LPCSTR ,LPDWORD);\nBOOLAPI GopherGetLocatorTypeW(LPCWSTR ,LPDWORD);\n#define GopherGetLocatorType  WINELIB_NAME_AW(GopherGetLocatorType)\n\nINTERNETAPI HINTERNET WINAPI GopherFindFirstFileA(HINTERNET ,LPCSTR ,\n\tLPCSTR ,LPGOPHER_FIND_DATAA ,DWORD ,DWORD_PTR);\nINTERNETAPI HINTERNET WINAPI GopherFindFirstFileW(HINTERNET ,LPCWSTR ,\n\tLPCWSTR ,LPGOPHER_FIND_DATAW ,DWORD ,DWORD_PTR);\n#define GopherFindFirstFile  WINELIB_NAME_AW(GopherFindFirstFile)\n\nINTERNETAPI HINTERNET WINAPI GopherOpenFileA(HINTERNET ,LPCSTR ,LPCSTR ,DWORD ,DWORD_PTR);\nINTERNETAPI HINTERNET WINAPI GopherOpenFileW(HINTERNET ,LPCWSTR ,LPCWSTR ,DWORD ,DWORD_PTR);\n#define GopherOpenFile  WINELIB_NAME_AW(GopherOpenFile)\n\ntypedef BOOL (CALLBACK *GOPHER_ATTRIBUTE_ENUMERATORA)(LPGOPHER_ATTRIBUTE_TYPEA ,DWORD);\ntypedef BOOL (CALLBACK *GOPHER_ATTRIBUTE_ENUMERATORW)(LPGOPHER_ATTRIBUTE_TYPEW ,DWORD);\n\nDECL_WINELIB_TYPE_AW(GOPHER_ATTRIBUTE_ENUMERATOR)\n\nBOOLAPI GopherGetAttributeA(HINTERNET ,LPCSTR ,LPCSTR ,LPBYTE ,\n\tDWORD ,LPDWORD ,GOPHER_ATTRIBUTE_ENUMERATORA ,DWORD_PTR);\nBOOLAPI GopherGetAttributeW(HINTERNET ,LPCWSTR ,LPCWSTR ,LPBYTE ,\n\tDWORD ,LPDWORD ,GOPHER_ATTRIBUTE_ENUMERATORW ,DWORD_PTR);\n#define GopherGetAttribute  WINELIB_NAME_AW(GopherGetAttribute)\n\n#define HTTP_MAJOR_VERSION      1\n#define HTTP_MINOR_VERSION      0\n#define HTTP_VERSION            TEXT(\"HTTP/1.0\")\n#define HTTP_QUERY_MIME_VERSION                 0\n#define HTTP_QUERY_CONTENT_TYPE                 1\n#define HTTP_QUERY_CONTENT_TRANSFER_ENCODING    2\n#define HTTP_QUERY_CONTENT_ID                   3\n#define HTTP_QUERY_CONTENT_DESCRIPTION          4\n#define HTTP_QUERY_CONTENT_LENGTH               5\n#define HTTP_QUERY_CONTENT_LANGUAGE             6\n#define HTTP_QUERY_ALLOW                        7\n#define HTTP_QUERY_PUBLIC                       8\n#define HTTP_QUERY_DATE                         9\n#define HTTP_QUERY_EXPIRES                      10\n#define HTTP_QUERY_LAST_MODIFIED                11\n#define HTTP_QUERY_MESSAGE_ID                   12\n#define HTTP_QUERY_URI                          13\n#define HTTP_QUERY_DERIVED_FROM                 14\n#define HTTP_QUERY_COST                         15\n#define HTTP_QUERY_LINK                         16\n#define HTTP_QUERY_PRAGMA                       17\n#define HTTP_QUERY_VERSION                      18\n#define HTTP_QUERY_STATUS_CODE                  19\n#define HTTP_QUERY_STATUS_TEXT                  20\n#define HTTP_QUERY_RAW_HEADERS                  21\n#define HTTP_QUERY_RAW_HEADERS_CRLF             22\n#define HTTP_QUERY_CONNECTION                   23\n#define HTTP_QUERY_ACCEPT                       24\n#define HTTP_QUERY_ACCEPT_CHARSET               25\n#define HTTP_QUERY_ACCEPT_ENCODING              26\n#define HTTP_QUERY_ACCEPT_LANGUAGE              27\n#define HTTP_QUERY_AUTHORIZATION                28\n#define HTTP_QUERY_CONTENT_ENCODING             29\n#define HTTP_QUERY_FORWARDED                    30\n#define HTTP_QUERY_FROM                         31\n#define HTTP_QUERY_IF_MODIFIED_SINCE            32\n#define HTTP_QUERY_LOCATION                     33\n#define HTTP_QUERY_ORIG_URI                     34\n#define HTTP_QUERY_REFERER                      35\n#define HTTP_QUERY_RETRY_AFTER                  36\n#define HTTP_QUERY_SERVER                       37\n#define HTTP_QUERY_TITLE                        38\n#define HTTP_QUERY_USER_AGENT                   39\n#define HTTP_QUERY_WWW_AUTHENTICATE             40\n#define HTTP_QUERY_PROXY_AUTHENTICATE           41\n#define HTTP_QUERY_ACCEPT_RANGES                42\n#define HTTP_QUERY_SET_COOKIE                   43\n#define HTTP_QUERY_COOKIE                       44\n#define HTTP_QUERY_REQUEST_METHOD               45\n#define HTTP_QUERY_REFRESH                      46\n#define HTTP_QUERY_CONTENT_DISPOSITION          47\n#define HTTP_QUERY_AGE                          48\n#define HTTP_QUERY_CACHE_CONTROL                49\n#define HTTP_QUERY_CONTENT_BASE                 50\n#define HTTP_QUERY_CONTENT_LOCATION             51\n#define HTTP_QUERY_CONTENT_MD5                  52\n#define HTTP_QUERY_CONTENT_RANGE                53\n#define HTTP_QUERY_ETAG                         54\n#define HTTP_QUERY_HOST                         55\n#define HTTP_QUERY_IF_MATCH                     56\n#define HTTP_QUERY_IF_NONE_MATCH                57\n#define HTTP_QUERY_IF_RANGE                     58\n#define HTTP_QUERY_IF_UNMODIFIED_SINCE          59\n#define HTTP_QUERY_MAX_FORWARDS                 60\n#define HTTP_QUERY_PROXY_AUTHORIZATION          61\n#define HTTP_QUERY_RANGE                        62\n#define HTTP_QUERY_TRANSFER_ENCODING            63\n#define HTTP_QUERY_UPGRADE                      64\n#define HTTP_QUERY_VARY                         65\n#define HTTP_QUERY_VIA                          66\n#define HTTP_QUERY_WARNING                      67\n#define HTTP_QUERY_EXPECT                       68\n#define HTTP_QUERY_PROXY_CONNECTION             69\n#define HTTP_QUERY_UNLESS_MODIFIED_SINCE        70\n#define HTTP_QUERY_ECHO_REQUEST                 71\n#define HTTP_QUERY_ECHO_REPLY                   72\n#define HTTP_QUERY_ECHO_HEADERS                 73\n#define HTTP_QUERY_ECHO_HEADERS_CRLF            74\n#define HTTP_QUERY_PROXY_SUPPORT                75\n#define HTTP_QUERY_AUTHENTICATION_INFO          76\n#define HTTP_QUERY_PASSPORT_URLS                77\n#define HTTP_QUERY_PASSPORT_CONFIG              78\n#define HTTP_QUERY_MAX                          78\n#define HTTP_QUERY_CUSTOM                       65535\n#define HTTP_QUERY_FLAG_REQUEST_HEADERS         0x80000000\n#define HTTP_QUERY_FLAG_SYSTEMTIME              0x40000000\n#define HTTP_QUERY_FLAG_NUMBER                  0x20000000\n#define HTTP_QUERY_FLAG_COALESCE                0x10000000\n#define HTTP_QUERY_MODIFIER_FLAGS_MASK          (HTTP_QUERY_FLAG_REQUEST_HEADERS \\\n                                                | HTTP_QUERY_FLAG_SYSTEMTIME        \\\n                                                | HTTP_QUERY_FLAG_NUMBER            \\\n                                                | HTTP_QUERY_FLAG_COALESCE          \\\n                                                )\n#define HTTP_QUERY_HEADER_MASK                  (~HTTP_QUERY_MODIFIER_FLAGS_MASK)\n\n#define HTTP_STATUS_CONTINUE            100\n#define HTTP_STATUS_SWITCH_PROTOCOLS    101\n#define HTTP_STATUS_OK                  200\n#define HTTP_STATUS_CREATED             201\n#define HTTP_STATUS_ACCEPTED            202\n#define HTTP_STATUS_PARTIAL             203\n#define HTTP_STATUS_NO_CONTENT          204\n#define HTTP_STATUS_RESET_CONTENT       205\n#define HTTP_STATUS_PARTIAL_CONTENT     206\n#define HTTP_STATUS_AMBIGUOUS           300\n#define HTTP_STATUS_MOVED               301\n#define HTTP_STATUS_REDIRECT            302\n#define HTTP_STATUS_REDIRECT_METHOD     303\n#define HTTP_STATUS_NOT_MODIFIED        304\n#define HTTP_STATUS_USE_PROXY           305\n#define HTTP_STATUS_REDIRECT_KEEP_VERB  307\n#define HTTP_STATUS_BAD_REQUEST         400\n#define HTTP_STATUS_DENIED              401\n#define HTTP_STATUS_PAYMENT_REQ         402\n#define HTTP_STATUS_FORBIDDEN           403\n#define HTTP_STATUS_NOT_FOUND           404\n#define HTTP_STATUS_BAD_METHOD          405\n#define HTTP_STATUS_NONE_ACCEPTABLE     406\n#define HTTP_STATUS_PROXY_AUTH_REQ      407\n#define HTTP_STATUS_REQUEST_TIMEOUT     408\n#define HTTP_STATUS_CONFLICT            409\n#define HTTP_STATUS_GONE                410\n#define HTTP_STATUS_LENGTH_REQUIRED     411\n#define HTTP_STATUS_PRECOND_FAILED      412\n#define HTTP_STATUS_REQUEST_TOO_LARGE   413\n#define HTTP_STATUS_URI_TOO_LONG        414\n#define HTTP_STATUS_UNSUPPORTED_MEDIA   415\n#define HTTP_STATUS_SERVER_ERROR        500\n#define HTTP_STATUS_NOT_SUPPORTED       501\n#define HTTP_STATUS_BAD_GATEWAY         502\n#define HTTP_STATUS_SERVICE_UNAVAIL     503\n#define HTTP_STATUS_GATEWAY_TIMEOUT     504\n#define HTTP_STATUS_VERSION_NOT_SUP     505\n#define HTTP_STATUS_FIRST               HTTP_STATUS_CONTINUE\n#define HTTP_STATUS_LAST                HTTP_STATUS_VERSION_NOT_SUP\n\n\nINTERNETAPI HINTERNET WINAPI HttpOpenRequestA(HINTERNET ,LPCSTR ,LPCSTR ,LPCSTR ,\n\tLPCSTR ,LPCSTR * ,DWORD ,DWORD_PTR);\nINTERNETAPI HINTERNET WINAPI HttpOpenRequestW(HINTERNET ,LPCWSTR ,LPCWSTR ,LPCWSTR ,\n\tLPCWSTR ,LPCWSTR * ,DWORD ,DWORD_PTR);\n#define HttpOpenRequest  WINELIB_NAME_AW(HttpOpenRequest)\n\nBOOLAPI HttpAddRequestHeadersA(HINTERNET ,LPCSTR ,DWORD ,DWORD);\nBOOLAPI HttpAddRequestHeadersW(HINTERNET ,LPCWSTR ,DWORD ,DWORD);\n#define HttpAddRequestHeaders  WINELIB_NAME_AW(HttpAddRequestHeaders)\n\n#define HTTP_ADDREQ_INDEX_MASK      0x0000FFFF\n#define HTTP_ADDREQ_FLAGS_MASK      0xFFFF0000\n#define HTTP_ADDREQ_FLAG_ADD_IF_NEW 0x10000000\n#define HTTP_ADDREQ_FLAG_ADD        0x20000000\n#define HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA       0x40000000\n#define HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON   0x01000000\n#define HTTP_ADDREQ_FLAG_COALESCE                  HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA\n#define HTTP_ADDREQ_FLAG_REPLACE    0x80000000\n\nBOOLAPI HttpSendRequestA(HINTERNET ,LPCSTR ,DWORD ,LPVOID ,DWORD);\nBOOLAPI HttpSendRequestW(HINTERNET ,LPCWSTR ,DWORD ,LPVOID ,DWORD);\n#define HttpSendRequest  WINELIB_NAME_AW(HttpSendRequest)\n\nINTERNETAPI BOOL WINAPI HttpSendRequestExA(HINTERNET ,LPINTERNET_BUFFERSA ,\n\tLPINTERNET_BUFFERSA ,DWORD ,DWORD_PTR);\nINTERNETAPI BOOL WINAPI HttpSendRequestExW(HINTERNET ,LPINTERNET_BUFFERSW ,\n\tLPINTERNET_BUFFERSW ,DWORD ,DWORD_PTR);\n#define HttpSendRequestEx  WINELIB_NAME_AW(HttpSendRequestEx)\n\n#define HSR_ASYNC       WININET_API_FLAG_ASYNC\n#define HSR_SYNC        WININET_API_FLAG_SYNC\n#define HSR_USE_CONTEXT WININET_API_FLAG_USE_CONTEXT\n#define HSR_INITIATE    0x00000008\n#define HSR_DOWNLOAD    0x00000010\n#define HSR_CHUNKED     0x00000020\n\nINTERNETAPI BOOL WINAPI HttpEndRequestA(HINTERNET ,LPINTERNET_BUFFERSA ,DWORD ,DWORD_PTR);\nINTERNETAPI BOOL WINAPI HttpEndRequestW(HINTERNET ,LPINTERNET_BUFFERSW ,DWORD ,DWORD_PTR);\n#define HttpEndRequest  WINELIB_NAME_AW(HttpEndRequest)\n\nBOOLAPI HttpQueryInfoA(HINTERNET ,DWORD ,LPVOID ,LPDWORD ,LPDWORD);\nBOOLAPI HttpQueryInfoW(HINTERNET ,DWORD ,LPVOID ,LPDWORD ,LPDWORD);\n#define HttpQueryInfo  WINELIB_NAME_AW(HttpQueryInfo)\n\ntypedef enum {\n    COOKIE_STATE_UNKNOWN,\n    COOKIE_STATE_ACCEPT,\n    COOKIE_STATE_PROMPT,\n    COOKIE_STATE_LEASH,\n    COOKIE_STATE_DOWNGRADE,\n    COOKIE_STATE_REJECT,\n    COOKIE_STATE_MAX = COOKIE_STATE_REJECT\n} InternetCookieState;\n\nBOOLAPI InternetClearAllPerSiteCookieDecisions(VOID);\n\nBOOLAPI InternetEnumPerSiteCookieDecisionA(LPSTR,ULONG *,ULONG *,ULONG);\nBOOLAPI InternetEnumPerSiteCookieDecisionW(LPWSTR,ULONG *,ULONG *,ULONG);\n#define InternetEnumPerSiteCookieDecision WINELIB_NAME_AW(InternetEnumPerSiteCookieDecision)\n\n#define INTERNET_COOKIE_IS_SECURE       0x00000001\n#define INTERNET_COOKIE_IS_SESSION      0x00000002\n#define INTERNET_COOKIE_THIRD_PARTY     0x00000010\n#define INTERNET_COOKIE_PROMPT_REQUIRED 0x00000020\n#define INTERNET_COOKIE_EVALUATE_P3P    0x00000040\n#define INTERNET_COOKIE_APPLY_P3P       0x00000080\n#define INTERNET_COOKIE_P3P_ENABLED     0x00000100\n#define INTERNET_COOKIE_IS_RESTRICTED   0x00000200\n#define INTERNET_COOKIE_IE6             0x00000400\n#define INTERNET_COOKIE_IS_LEGACY       0x00000800\n#define INTERNET_COOKIE_NON_SCRIPT      0x00001000\n#define INTERNET_COOKIE_HTTPONLY        0x00002000\n\nBOOLAPI InternetGetCookieExA(LPCSTR,LPCSTR,LPSTR,LPDWORD,DWORD,LPVOID);\nBOOLAPI InternetGetCookieExW(LPCWSTR,LPCWSTR,LPWSTR,LPDWORD,DWORD,LPVOID);\n#define InternetGetCookieEx WINELIB_NAME_AW(InternetGetCookieEx)\n\nDWORD WINAPI InternetSetCookieExA(LPCSTR,LPCSTR,LPCSTR,DWORD,DWORD_PTR);\nDWORD WINAPI InternetSetCookieExW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,DWORD_PTR);\n#define InternetSetCookieEx WINELIB_NAME_AW(InternetSetCookieEx)\n\nBOOLAPI InternetGetPerSiteCookieDecisionA(LPCSTR,ULONG *);\nBOOLAPI InternetGetPerSiteCookieDecisionW(LPCWSTR,ULONG *);\n#define InternetGetPerSiteCookieDecision WINELIB_NAME_AW(InternetGetPerSiteCookieDecision)\n\nBOOLAPI InternetSetPerSiteCookieDecisionA(LPCSTR,DWORD);\nBOOLAPI InternetSetPerSiteCookieDecisionW(LPCWSTR,DWORD);\n#define InternetSetPerSiteCookieDecision WINELIB_NAME_AW(InternetSetPerSiteCookieDecision)\n\nBOOLAPI InternetSetCookieA(LPCSTR ,LPCSTR ,LPCSTR);\nBOOLAPI InternetSetCookieW(LPCWSTR ,LPCWSTR ,LPCWSTR);\n#define InternetSetCookie  WINELIB_NAME_AW(InternetSetCookie)\n\nBOOLAPI InternetGetCookieA(LPCSTR ,LPCSTR ,LPSTR ,LPDWORD);\nBOOLAPI InternetGetCookieW(LPCWSTR ,LPCWSTR ,LPWSTR ,LPDWORD);\n#define InternetGetCookie  WINELIB_NAME_AW(InternetGetCookie)\n\nINTERNETAPI DWORD WINAPI InternetAttemptConnect(DWORD);\nBOOLAPI InternetCheckConnectionA(LPCSTR ,DWORD ,DWORD);\nBOOLAPI InternetCheckConnectionW(LPCWSTR ,DWORD ,DWORD);\n#define InternetCheckConnection  WINELIB_NAME_AW(InternetCheckConnection)\n\n#define FLAG_ICC_FORCE_CONNECTION       0x00000001\n\n#define FLAGS_ERROR_UI_FILTER_FOR_ERRORS        0x01\n#define FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS     0x02\n#define FLAGS_ERROR_UI_FLAGS_GENERATE_DATA      0x04\n#define FLAGS_ERROR_UI_FLAGS_NO_UI              0x08\n#define FLAGS_ERROR_UI_SERIALIZE_DIALOGS        0x10\n\nDWORD InternetAuthNotifyCallback ( DWORD_PTR ,DWORD ,LPVOID );\ntypedef DWORD (CALLBACK *PFN_AUTH_NOTIFY) (DWORD_PTR,DWORD,LPVOID);\n\ntypedef struct\n{\n    DWORD            cbStruct;\n    DWORD            dwOptions;\n    PFN_AUTH_NOTIFY  pfnNotify;\n    DWORD_PTR        dwContext;\n}\nINTERNET_AUTH_NOTIFY_DATA;\n\n\nINTERNETAPI DWORD WINAPI InternetErrorDlg(HWND ,HINTERNET ,DWORD ,DWORD ,LPVOID *);\nINTERNETAPI DWORD WINAPI InternetConfirmZoneCrossingA(HWND ,LPSTR ,LPSTR ,BOOL);\nINTERNETAPI DWORD WINAPI InternetConfirmZoneCrossingW(HWND ,LPWSTR ,LPWSTR ,BOOL);\n#define InternetConfirmZoneCrossing WINELIB_NAME_AW(InternetConfirmZoneCrossing)\n\n#define PRIVACY_TEMPLATE_NO_COOKIES  0\n#define PRIVACY_TEMPLATE_HIGH        1\n#define PRIVACY_TEMPLATE_MEDIUM_HIGH 2\n#define PRIVACY_TEMPLATE_MEDIUM      3\n#define PRIVACY_TEMPLATE_MEDIUM_LOW  4\n#define PRIVACY_TEMPLATE_LOW         5\n#define PRIVACY_TEMPLATE_CUSTOM      100\n#define PRIVACY_TEMPLATE_ADVANCED    101\n\n#define PRIVACY_TEMPLATE_MAX         PRIVACY_TEMPLATE_LOW\n\n#define PRIVACY_TYPE_FIRST_PARTY 0\n#define PRIVACY_TYPE_THIRD_PARTY 1\n\nINTERNETAPI DWORD WINAPI PrivacySetZonePreferenceW(DWORD,DWORD,DWORD,LPCWSTR);\nINTERNETAPI DWORD WINAPI PrivacyGetZonePreferenceW(DWORD,DWORD,LPDWORD,LPWSTR,LPDWORD);\n\n#define INTERNET_ERROR_BASE                     12000\n\n#define ERROR_INTERNET_OUT_OF_HANDLES           (INTERNET_ERROR_BASE + 1)\n#define ERROR_INTERNET_TIMEOUT                  (INTERNET_ERROR_BASE + 2)\n#define ERROR_INTERNET_EXTENDED_ERROR           (INTERNET_ERROR_BASE + 3)\n#define ERROR_INTERNET_INTERNAL_ERROR           (INTERNET_ERROR_BASE + 4)\n#define ERROR_INTERNET_INVALID_URL              (INTERNET_ERROR_BASE + 5)\n#define ERROR_INTERNET_UNRECOGNIZED_SCHEME      (INTERNET_ERROR_BASE + 6)\n#define ERROR_INTERNET_NAME_NOT_RESOLVED        (INTERNET_ERROR_BASE + 7)\n#define ERROR_INTERNET_PROTOCOL_NOT_FOUND       (INTERNET_ERROR_BASE + 8)\n#define ERROR_INTERNET_INVALID_OPTION           (INTERNET_ERROR_BASE + 9)\n#define ERROR_INTERNET_BAD_OPTION_LENGTH        (INTERNET_ERROR_BASE + 10)\n#define ERROR_INTERNET_OPTION_NOT_SETTABLE      (INTERNET_ERROR_BASE + 11)\n#define ERROR_INTERNET_SHUTDOWN                 (INTERNET_ERROR_BASE + 12)\n#define ERROR_INTERNET_INCORRECT_USER_NAME      (INTERNET_ERROR_BASE + 13)\n#define ERROR_INTERNET_INCORRECT_PASSWORD       (INTERNET_ERROR_BASE + 14)\n#define ERROR_INTERNET_LOGIN_FAILURE            (INTERNET_ERROR_BASE + 15)\n#define ERROR_INTERNET_INVALID_OPERATION        (INTERNET_ERROR_BASE + 16)\n#define ERROR_INTERNET_OPERATION_CANCELLED      (INTERNET_ERROR_BASE + 17)\n#define ERROR_INTERNET_INCORRECT_HANDLE_TYPE    (INTERNET_ERROR_BASE + 18)\n#define ERROR_INTERNET_INCORRECT_HANDLE_STATE   (INTERNET_ERROR_BASE + 19)\n#define ERROR_INTERNET_NOT_PROXY_REQUEST        (INTERNET_ERROR_BASE + 20)\n#define ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND (INTERNET_ERROR_BASE + 21)\n#define ERROR_INTERNET_BAD_REGISTRY_PARAMETER   (INTERNET_ERROR_BASE + 22)\n#define ERROR_INTERNET_NO_DIRECT_ACCESS         (INTERNET_ERROR_BASE + 23)\n#define ERROR_INTERNET_NO_CONTEXT               (INTERNET_ERROR_BASE + 24)\n#define ERROR_INTERNET_NO_CALLBACK              (INTERNET_ERROR_BASE + 25)\n#define ERROR_INTERNET_REQUEST_PENDING          (INTERNET_ERROR_BASE + 26)\n#define ERROR_INTERNET_INCORRECT_FORMAT         (INTERNET_ERROR_BASE + 27)\n#define ERROR_INTERNET_ITEM_NOT_FOUND           (INTERNET_ERROR_BASE + 28)\n#define ERROR_INTERNET_CANNOT_CONNECT           (INTERNET_ERROR_BASE + 29)\n#define ERROR_INTERNET_CONNECTION_ABORTED       (INTERNET_ERROR_BASE + 30)\n#define ERROR_INTERNET_CONNECTION_RESET         (INTERNET_ERROR_BASE + 31)\n#define ERROR_INTERNET_FORCE_RETRY              (INTERNET_ERROR_BASE + 32)\n#define ERROR_INTERNET_INVALID_PROXY_REQUEST    (INTERNET_ERROR_BASE + 33)\n#define ERROR_INTERNET_NEED_UI                  (INTERNET_ERROR_BASE + 34)\n#define ERROR_INTERNET_HANDLE_EXISTS            (INTERNET_ERROR_BASE + 36)\n#define ERROR_INTERNET_SEC_CERT_DATE_INVALID    (INTERNET_ERROR_BASE + 37)\n#define ERROR_INTERNET_SEC_CERT_CN_INVALID      (INTERNET_ERROR_BASE + 38)\n#define ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR   (INTERNET_ERROR_BASE + 39)\n#define ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR   (INTERNET_ERROR_BASE + 40)\n#define ERROR_INTERNET_MIXED_SECURITY           (INTERNET_ERROR_BASE + 41)\n#define ERROR_INTERNET_CHG_POST_IS_NON_SECURE   (INTERNET_ERROR_BASE + 42)\n#define ERROR_INTERNET_POST_IS_NON_SECURE       (INTERNET_ERROR_BASE + 43)\n#define ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED  (INTERNET_ERROR_BASE + 44)\n#define ERROR_INTERNET_INVALID_CA               (INTERNET_ERROR_BASE + 45)\n#define ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP    (INTERNET_ERROR_BASE + 46)\n#define ERROR_INTERNET_ASYNC_THREAD_FAILED      (INTERNET_ERROR_BASE + 47)\n#define ERROR_INTERNET_REDIRECT_SCHEME_CHANGE   (INTERNET_ERROR_BASE + 48)\n#define ERROR_INTERNET_DIALOG_PENDING           (INTERNET_ERROR_BASE + 49)\n#define ERROR_INTERNET_RETRY_DIALOG             (INTERNET_ERROR_BASE + 50)\n#define ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR  (INTERNET_ERROR_BASE + 52)\n#define ERROR_INTERNET_INSERT_CDROM             (INTERNET_ERROR_BASE + 53)\n#define ERROR_INTERNET_FORTEZZA_LOGIN_NEEDED    (INTERNET_ERROR_BASE + 54)\n#define ERROR_INTERNET_SEC_CERT_ERRORS          (INTERNET_ERROR_BASE + 55)\n#define ERROR_INTERNET_SEC_CERT_NO_REV          (INTERNET_ERROR_BASE + 56)\n#define ERROR_INTERNET_SEC_CERT_REV_FAILED      (INTERNET_ERROR_BASE + 57)\n#define ERROR_FTP_TRANSFER_IN_PROGRESS          (INTERNET_ERROR_BASE + 110)\n#define ERROR_FTP_DROPPED                       (INTERNET_ERROR_BASE + 111)\n#define ERROR_FTP_NO_PASSIVE_MODE               (INTERNET_ERROR_BASE + 112)\n#define ERROR_GOPHER_PROTOCOL_ERROR             (INTERNET_ERROR_BASE + 130)\n#define ERROR_GOPHER_NOT_FILE                   (INTERNET_ERROR_BASE + 131)\n#define ERROR_GOPHER_DATA_ERROR                 (INTERNET_ERROR_BASE + 132)\n#define ERROR_GOPHER_END_OF_DATA                (INTERNET_ERROR_BASE + 133)\n#define ERROR_GOPHER_INVALID_LOCATOR            (INTERNET_ERROR_BASE + 134)\n#define ERROR_GOPHER_INCORRECT_LOCATOR_TYPE     (INTERNET_ERROR_BASE + 135)\n#define ERROR_GOPHER_NOT_GOPHER_PLUS            (INTERNET_ERROR_BASE + 136)\n#define ERROR_GOPHER_ATTRIBUTE_NOT_FOUND        (INTERNET_ERROR_BASE + 137)\n#define ERROR_GOPHER_UNKNOWN_LOCATOR            (INTERNET_ERROR_BASE + 138)\n#define ERROR_HTTP_HEADER_NOT_FOUND             (INTERNET_ERROR_BASE + 150)\n#define ERROR_HTTP_DOWNLEVEL_SERVER             (INTERNET_ERROR_BASE + 151)\n#define ERROR_HTTP_INVALID_SERVER_RESPONSE      (INTERNET_ERROR_BASE + 152)\n#define ERROR_HTTP_INVALID_HEADER               (INTERNET_ERROR_BASE + 153)\n#define ERROR_HTTP_INVALID_QUERY_REQUEST        (INTERNET_ERROR_BASE + 154)\n#define ERROR_HTTP_HEADER_ALREADY_EXISTS        (INTERNET_ERROR_BASE + 155)\n#define ERROR_HTTP_REDIRECT_FAILED              (INTERNET_ERROR_BASE + 156)\n#define ERROR_HTTP_NOT_REDIRECTED               (INTERNET_ERROR_BASE + 160)\n#define ERROR_HTTP_COOKIE_NEEDS_CONFIRMATION    (INTERNET_ERROR_BASE + 161)\n#define ERROR_HTTP_COOKIE_DECLINED              (INTERNET_ERROR_BASE + 162)\n#define ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION  (INTERNET_ERROR_BASE + 168)\n#define ERROR_INTERNET_SECURITY_CHANNEL_ERROR   (INTERNET_ERROR_BASE + 157)\n#define ERROR_INTERNET_UNABLE_TO_CACHE_FILE     (INTERNET_ERROR_BASE + 158)\n#define ERROR_INTERNET_TCPIP_NOT_INSTALLED      (INTERNET_ERROR_BASE + 159)\n#define ERROR_INTERNET_DISCONNECTED             (INTERNET_ERROR_BASE + 163)\n#define ERROR_INTERNET_SERVER_UNREACHABLE       (INTERNET_ERROR_BASE + 164)\n#define ERROR_INTERNET_PROXY_SERVER_UNREACHABLE (INTERNET_ERROR_BASE + 165)\n#define ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT    (INTERNET_ERROR_BASE + 166)\n#define ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT (INTERNET_ERROR_BASE + 167)\n#define ERROR_INTERNET_SEC_INVALID_CERT    (INTERNET_ERROR_BASE + 169)\n#define ERROR_INTERNET_SEC_CERT_REVOKED    (INTERNET_ERROR_BASE + 170)\n#define ERROR_INTERNET_FAILED_DUETOSECURITYCHECK  (INTERNET_ERROR_BASE + 171)\n#define ERROR_INTERNET_NOT_INITIALIZED            (INTERNET_ERROR_BASE + 172)\n#define ERROR_INTERNET_NEED_MSN_SSPI_PKG          (INTERNET_ERROR_BASE + 173)\n#define ERROR_INTERNET_LOGIN_FAILURE_DISPLAY_ENTITY_BODY  (INTERNET_ERROR_BASE + 174)\n#define ERROR_INTERNET_DECODING_FAILED            (INTERNET_ERROR_BASE + 175)\n#define INTERNET_ERROR_LAST                       ERROR_INTERNET_DECODING_FAILED\n\n\n#define NORMAL_CACHE_ENTRY              0x00000001\n#define STICKY_CACHE_ENTRY              0x00000004\n#define EDITED_CACHE_ENTRY              0x00000008\n#define COOKIE_CACHE_ENTRY              0x00100000\n#define URLHISTORY_CACHE_ENTRY          0x00200000\n#define TRACK_OFFLINE_CACHE_ENTRY       0x00000010\n#define TRACK_ONLINE_CACHE_ENTRY        0x00000020\n#define SPARSE_CACHE_ENTRY              0x00010000\n\n#define URLCACHE_FIND_DEFAULT_FILTER    NORMAL_CACHE_ENTRY             \\\n                                    |   COOKIE_CACHE_ENTRY             \\\n                                    |   URLHISTORY_CACHE_ENTRY         \\\n                                    |   TRACK_OFFLINE_CACHE_ENTRY      \\\n                                    |   TRACK_ONLINE_CACHE_ENTRY       \\\n                                    |   STICKY_CACHE_ENTRY\n\n\ntypedef struct _INTERNET_CACHE_ENTRY_INFOA {\n    DWORD dwStructSize;\n    LPSTR lpszSourceUrlName;\n    LPSTR   lpszLocalFileName;\n    DWORD CacheEntryType;\n    DWORD dwUseCount;\n    DWORD dwHitRate;\n    DWORD dwSizeLow;\n    DWORD dwSizeHigh;\n    FILETIME LastModifiedTime;\n    FILETIME ExpireTime;\n    FILETIME LastAccessTime;\n    FILETIME LastSyncTime;\n\n    LPBYTE lpHeaderInfo;\n    DWORD dwHeaderInfoSize;\n    LPSTR lpszFileExtension;\n    union {\n      DWORD dwReserved;\n      DWORD dwExemptDelta;\n    } DUMMYUNIONNAME;\n} INTERNET_CACHE_ENTRY_INFOA,* LPINTERNET_CACHE_ENTRY_INFOA;\n\ntypedef struct _INTERNET_CACHE_ENTRY_INFOW {\n    DWORD dwStructSize;\n    LPWSTR lpszSourceUrlName;\n    LPWSTR  lpszLocalFileName;\n    DWORD CacheEntryType;\n    DWORD dwUseCount;\n    DWORD dwHitRate;\n    DWORD dwSizeLow;\n    DWORD dwSizeHigh;\n    FILETIME LastModifiedTime;\n    FILETIME ExpireTime;\n    FILETIME LastAccessTime;\n    FILETIME LastSyncTime;\n\n    LPBYTE lpHeaderInfo;\n    DWORD dwHeaderInfoSize;\n    LPWSTR  lpszFileExtension;\n    union {\n      DWORD dwReserved;\n      DWORD dwExemptDelta;\n    } DUMMYUNIONNAME;\n} INTERNET_CACHE_ENTRY_INFOW,* LPINTERNET_CACHE_ENTRY_INFOW;\n\nDECL_WINELIB_TYPE_AW(INTERNET_CACHE_ENTRY_INFO)\nDECL_WINELIB_TYPE_AW(LPINTERNET_CACHE_ENTRY_INFO)\n\ntypedef struct _INTERNET_CACHE_TIMESTAMPS\n{\n    FILETIME ftExpires;\n    FILETIME ftLastModified;\n} INTERNET_CACHE_TIMESTAMPS, *LPINTERNET_CACHE_TIMESTAMPS;\n\nBOOLAPI CreateUrlCacheEntryA(LPCSTR ,DWORD ,LPCSTR ,LPSTR ,DWORD);\nBOOLAPI CreateUrlCacheEntryW(LPCWSTR ,DWORD ,LPCWSTR ,LPWSTR ,DWORD);\n#define CreateUrlCacheEntry  WINELIB_NAME_AW(CreateUrlCacheEntry)\n\nBOOLAPI CommitUrlCacheEntryA(LPCSTR,LPCSTR,FILETIME,FILETIME,DWORD,LPBYTE,DWORD,LPCSTR,LPCSTR);\nBOOLAPI CommitUrlCacheEntryW(LPCWSTR,LPCWSTR,FILETIME,FILETIME,DWORD,LPWSTR,DWORD,LPCWSTR,LPCWSTR);\n#define CommitUrlCacheEntry  WINELIB_NAME_AW(CommitUrlCacheEntry)\n\nBOOLAPI ResumeSuspendedDownload(HINTERNET, DWORD);\n\nBOOLAPI RetrieveUrlCacheEntryFileA(LPCSTR ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD ,DWORD);\nBOOLAPI RetrieveUrlCacheEntryFileW(LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD ,DWORD);\n#define RetrieveUrlCacheEntryFile  WINELIB_NAME_AW(RetrieveUrlCacheEntryFile)\n\nBOOLAPI UnlockUrlCacheEntryFileA(LPCSTR ,DWORD);\nBOOLAPI UnlockUrlCacheEntryFileW(LPCWSTR ,DWORD);\n#define UnlockUrlCacheEntryFile  WINELIB_NAME_AW(UnlockUrlCacheEntryFile)\n\nINTERNETAPI HANDLE WINAPI RetrieveUrlCacheEntryStreamA(LPCSTR ,\n\tLPINTERNET_CACHE_ENTRY_INFOA , LPDWORD ,BOOL ,DWORD);\nINTERNETAPI HANDLE WINAPI RetrieveUrlCacheEntryStreamW(LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW ,\n\tLPDWORD ,BOOL ,DWORD);\n#define RetrieveUrlCacheEntryStream  WINELIB_NAME_AW(RetrieveUrlCacheEntryStream)\n\nBOOLAPI ReadUrlCacheEntryStream( HANDLE ,DWORD ,LPVOID ,LPDWORD ,DWORD );\nBOOLAPI UnlockUrlCacheEntryStream( HANDLE ,DWORD );\nBOOLAPI GetUrlCacheEntryInfoA(LPCSTR ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD);\nBOOLAPI GetUrlCacheEntryInfoW(LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD);\n#define GetUrlCacheEntryInfo  WINELIB_NAME_AW(GetUrlCacheEntryInfo)\n\nBOOLAPI GetUrlCacheEntryInfoExA(\n    LPCSTR ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD ,LPSTR ,LPDWORD ,LPVOID ,DWORD);\nBOOLAPI GetUrlCacheEntryInfoExW(\n    LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD ,LPWSTR ,LPDWORD ,LPVOID ,DWORD);\n#define GetUrlCacheEntryInfoEx  WINELIB_NAME_AW(GetUrlCacheEntryInfoEx)\n\n#define CACHE_ENTRY_ATTRIBUTE_FC    0x00000004\n#define CACHE_ENTRY_HITRATE_FC      0x00000010\n#define CACHE_ENTRY_MODTIME_FC      0x00000040\n#define CACHE_ENTRY_EXPTIME_FC      0x00000080\n#define CACHE_ENTRY_ACCTIME_FC      0x00000100\n#define CACHE_ENTRY_SYNCTIME_FC     0x00000200\n#define CACHE_ENTRY_HEADERINFO_FC   0x00000400\n#define CACHE_ENTRY_EXEMPT_DELTA_FC 0x00000800\n\n\nBOOLAPI SetUrlCacheEntryInfoA(LPCSTR ,LPINTERNET_CACHE_ENTRY_INFOA ,DWORD);\nBOOLAPI SetUrlCacheEntryInfoW(LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW ,DWORD);\n#define SetUrlCacheEntryInfo  WINELIB_NAME_AW(SetUrlCacheEntryInfo)\n\ntypedef LONGLONG GROUPID;\n\nINTERNETAPI GROUPID WINAPI CreateUrlCacheGroup(DWORD,LPVOID);\nBOOLAPI DeleteUrlCacheGroup(GROUPID ,DWORD ,LPVOID);\n\nINTERNETAPI HANDLE WINAPI FindFirstUrlCacheGroup(DWORD,DWORD,LPVOID,DWORD,GROUPID*,LPVOID);\nBOOLAPI FindNextUrlCacheGroup(HANDLE,GROUPID*,LPVOID);\n\nBOOLAPI GetUrlCacheGroupAttributeA(GROUPID,DWORD,DWORD,LPINTERNET_CACHE_GROUP_INFOA,LPDWORD,LPVOID);\nBOOLAPI GetUrlCacheGroupAttributeW(GROUPID,DWORD,DWORD,LPINTERNET_CACHE_GROUP_INFOW,LPDWORD,LPVOID);\n#define GetUrlCacheGroupAttribute  WINELIB_NAME_AW(GetUrlCacheGroupAttribute)\n\n#define INTERNET_CACHE_GROUP_ADD      0\n#define INTERNET_CACHE_GROUP_REMOVE   1\n\nBOOLAPI SetUrlCacheEntryGroupA(LPCSTR,DWORD,GROUPID,LPBYTE,DWORD,LPVOID);\nBOOLAPI SetUrlCacheEntryGroupW(LPCWSTR,DWORD,GROUPID,LPBYTE,DWORD,LPVOID);\n#define SetUrlCacheEntryGroup  WINELIB_NAME_AW(SetUrlCacheEntryGroup)\n\nBOOLAPI SetUrlCacheGroupAttributeA(GROUPID,DWORD,DWORD,LPINTERNET_CACHE_GROUP_INFOA,LPVOID);\nBOOLAPI SetUrlCacheGroupAttributeW(GROUPID,DWORD,DWORD,LPINTERNET_CACHE_GROUP_INFOW,LPVOID);\n#define SetUrlCacheGroupAttribute  WINELIB_NAME_AW(SetUrlCacheGroupAttribute)\n\nINTERNETAPI HANDLE WINAPI FindFirstUrlCacheEntryExA(\n    LPCSTR ,DWORD ,DWORD ,GROUPID ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD ,LPVOID ,LPDWORD ,LPVOID );\nINTERNETAPI HANDLE WINAPI FindFirstUrlCacheEntryExW(\n    LPCWSTR ,DWORD ,DWORD ,GROUPID ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD ,LPVOID ,LPDWORD ,LPVOID );\n#define FindFirstUrlCacheEntryEx  WINELIB_NAME_AW(FindFirstUrlCacheEntryEx)\n\nBOOLAPI FindNextUrlCacheEntryExA(HANDLE ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD ,LPVOID ,LPDWORD ,LPVOID);\nBOOLAPI FindNextUrlCacheEntryExW(HANDLE ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD ,LPVOID ,LPDWORD ,LPVOID);\n#define FindNextUrlCacheEntryEx  WINELIB_NAME_AW(FindNextUrlCacheEntryEx)\n\nINTERNETAPI HANDLE WINAPI FindFirstUrlCacheEntryA(LPCSTR ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD);\nINTERNETAPI HANDLE WINAPI FindFirstUrlCacheEntryW(LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD);\n#define FindFirstUrlCacheEntry  WINELIB_NAME_AW(FindFirstUrlCacheEntry)\n\nBOOLAPI FindNextUrlCacheEntryA(HANDLE ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD);\nBOOLAPI FindNextUrlCacheEntryW(HANDLE ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD);\n#define FindNextUrlCacheEntry  WINELIB_NAME_AW(FindNextUrlCacheEntry)\n\nBOOLAPI FindCloseUrlCache(HANDLE);\n\nBOOLAPI DeleteUrlCacheEntryA(LPCSTR);\nBOOLAPI DeleteUrlCacheEntryW(LPCWSTR);\n#define DeleteUrlCacheEntry  WINELIB_NAME_AW(DeleteUrlCacheEntry)\n\n/* FCS_ flags and FreeUrlCacheSpace are no longer documented */\n#define FCS_PERCENT_CACHE_SPACE  0  /* guessed value */\n#define FCS_PERCENT_DISK_SPACE   1  /* guessed value */\n#define FCS_ABSOLUTE_SIZE        2  /* guessed value */\n\nBOOLAPI FreeUrlCacheSpaceA(LPCSTR ,DWORD ,DWORD);\nBOOLAPI FreeUrlCacheSpaceW(LPCWSTR ,DWORD ,DWORD);\n#define FreeUrlCacheSpace  WINELIB_NAME_AW(FreeUrlCacheSpace)\n\n\nINTERNETAPI DWORD WINAPI InternetDialA(HWND ,LPSTR ,DWORD ,DWORD_PTR* ,DWORD);\nINTERNETAPI DWORD WINAPI InternetDialW(HWND ,LPWSTR ,DWORD ,DWORD_PTR* ,DWORD);\n#define InternetDial WINELIB_NAME_AW(InternetDial)\n\n\n#define INTERNET_DIAL_UNATTENDED       0x8000\n\nINTERNETAPI DWORD WINAPI InternetHangUp(DWORD_PTR ,DWORD);\nBOOLAPI CreateMD5SSOHash(PWSTR,PWSTR,PWSTR,PBYTE);\n\n#define INTERENT_GOONLINE_REFRESH 0x00000001\n#define INTERENT_GOONLINE_MASK 0x00000001\nINTERNETAPI BOOL WINAPI InternetGoOnlineA(LPSTR ,HWND ,DWORD);\nINTERNETAPI BOOL WINAPI InternetGoOnlineW(LPWSTR ,HWND ,DWORD);\n#define InternetGoOnline  WINELIB_NAME_AW(InternetGoOnline)\nINTERNETAPI BOOL WINAPI InternetAutodial(DWORD,HWND);\n\n#define INTERNET_AUTODIAL_FORCE_ONLINE          1\n#define INTERNET_AUTODIAL_FORCE_UNATTENDED      2\n#define INTERNET_AUTODIAL_FAILIFSECURITYCHECK   4\n\n#define INTERNET_AUTODIAL_FLAGS_MASK (INTERNET_AUTODIAL_FORCE_ONLINE | INTERNET_AUTODIAL_FORCE_UNATTENDED | INTERNET_AUTODIAL_FAILIFSECURITYCHECK)\nINTERNETAPI BOOL WINAPI InternetAutodialHangup(DWORD);\nINTERNETAPI BOOL WINAPI InternetGetConnectedState(LPDWORD ,DWORD);\n\n#define INTERNET_CONNECTION_MODEM        0x01\n#define INTERNET_CONNECTION_LAN          0x02\n#define INTERNET_CONNECTION_PROXY        0x04\n#define INTERNET_CONNECTION_MODEM_BUSY   0x08\n#define INTERNET_RAS_INSTALLED           0x10\n#define INTERNET_CONNECTION_OFFLINE      0x20\n#define INTERNET_CONNECTION_CONFIGURED   0x40\n\ntypedef DWORD (CALLBACK *PFN_DIAL_HANDLER) (HWND,LPCSTR,DWORD,LPDWORD);\n\n#define INTERNET_CUSTOMDIAL_CONNECT         0\n#define INTERNET_CUSTOMDIAL_UNATTENDED      1\n#define INTERNET_CUSTOMDIAL_DISCONNECT      2\n#define INTERNET_CUSTOMDIAL_SHOWOFFLINE     4\n#define INTERNET_CUSTOMDIAL_SAFE_FOR_UNATTENDED 1\n#define INTERNET_CUSTOMDIAL_WILL_SUPPLY_STATE   2\n#define INTERNET_CUSTOMDIAL_CAN_HANGUP          4\n\nINTERNETAPI BOOL WINAPI InternetSetDialStateA(LPCSTR ,DWORD ,DWORD);\nINTERNETAPI BOOL WINAPI InternetSetDialStateW(LPCWSTR ,DWORD ,DWORD);\n#define InternetSetDialState WINELIB_NAME_AW(InternetSetDialState)\n#define INTERNET_DIALSTATE_DISCONNECTED     1\n\nBOOL WINAPI InternetGetConnectedStateExA(LPDWORD, LPSTR, DWORD, DWORD);\nBOOL WINAPI InternetGetConnectedStateExW(LPDWORD, LPWSTR, DWORD, DWORD);\n#define InternetGetConnectedStateEx WINELIB_NAME_AW(InternetGetConnectedStateEx)\n\ntypedef struct AutoProxyHelperVtbl\n{\n    BOOL  (WINAPI *IsResolvable)(LPSTR);\n    DWORD (WINAPI *GetIPAddress)(LPSTR, LPDWORD);\n    DWORD (WINAPI *ResolveHostName)(LPSTR, LPSTR, LPDWORD);\n    BOOL  (WINAPI *IsInNet)(LPSTR, LPSTR, LPSTR);\n    BOOL  (WINAPI *IsResolvableEx)(LPSTR);\n    DWORD (WINAPI *GetIPAddressEx)(LPSTR, LPDWORD);\n    DWORD (WINAPI *ResolveHostNameEx)(LPSTR, LPSTR, LPDWORD);\n    BOOL  (WINAPI *IsInNetEx)(LPSTR, LPSTR);\n    DWORD (WINAPI *SortIpList)(LPSTR, LPSTR, LPDWORD);\n} AutoProxyHelperVtbl;\n\ntypedef struct AutoProxyHelperFunctions\n{\n    const struct AutoProxyHelperVtbl *lpVtbl;\n} AutoProxyHelperFunctions;\n\ntypedef struct\n{\n    DWORD dwStructSize;\n    LPSTR lpszScriptBuffer;\n    DWORD dwScriptBufferSize;\n} AUTO_PROXY_SCRIPT_BUFFER, *LPAUTO_PROXY_SCRIPT_BUFFER;\n\ntypedef BOOL (CALLBACK *pfnInternetDeInitializeAutoProxyDll)(LPSTR, DWORD);\ntypedef BOOL (CALLBACK *pfnInternetGetProxyInfo)(LPCSTR, DWORD, LPSTR, DWORD, LPSTR *, LPDWORD);\ntypedef BOOL (CALLBACK *pfnInternetInitializeAutoProxyDll)(DWORD, LPSTR, LPSTR, AutoProxyHelperFunctions *,\n    LPAUTO_PROXY_SCRIPT_BUFFER);\n\nBOOL WINAPI InternetInitializeAutoProxyDll(DWORD);\nBOOL WINAPI DetectAutoProxyUrl(LPSTR, DWORD, DWORD);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/winineti.h",
    "content": "/*\n * Copyright (C) 2007 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _WINE_WININETI_H_\n#define _WINE_WININETI_H_\n\n/* FIXME: #include <iedial.h> */\n#include <schannel.h>\n#include <sspi.h>\n\ntypedef struct _INTERNET_CACHE_CONFIG_PATH_ENTRYA\n{\n    CHAR CachePath[MAX_PATH];\n    DWORD dwCacheSize;\n} INTERNET_CACHE_CONFIG_PATH_ENTRYA, *LPINTERNET_CACHE_CONFIG_PATH_ENTRYA;\n\ntypedef struct _INTERNET_CACHE_CONFIG_PATH_ENTRYW\n{\n    WCHAR CachePath[MAX_PATH];\n    DWORD dwCacheSize;\n} INTERNET_CACHE_CONFIG_PATH_ENTRYW, *LPINTERNET_CACHE_CONFIG_PATH_ENTRYW;\n\nDECL_WINELIB_TYPE_AW(INTERNET_CACHE_CONFIG_PATH_ENTRY)\nDECL_WINELIB_TYPE_AW(LPINTERNET_CACHE_CONFIG_PATH_ENTRY)\n\ntypedef struct _INTERNET_CACHE_CONFIG_INFOA\n{\n    DWORD dwStructSize;\n    DWORD dwContainer;\n    DWORD dwQuota;\n    DWORD dwReserved4;\n    BOOL fPerUser;\n    DWORD dwSyncMode;\n    DWORD dwNumCachePaths;\n    __C89_NAMELESS union\n    {\n        __C89_NAMELESS struct\n        {\n            CHAR CachePath[MAX_PATH];\n            DWORD dwCacheSize;\n        } __C89_NAMELESSSTRUCTNAME;\n        INTERNET_CACHE_CONFIG_PATH_ENTRYA CachePaths[ANYSIZE_ARRAY];\n    } __C89_NAMELESSUNIONNAME;\n    DWORD dwNormalUsage;\n    DWORD dwExemptUsage;\n} INTERNET_CACHE_CONFIG_INFOA, *LPINTERNET_CACHE_CONFIG_INFOA;\n\ntypedef struct _INTERNET_CACHE_CONFIG_INFOW\n{\n    DWORD dwStructSize;\n    DWORD dwContainer;\n    DWORD dwQuota;\n    DWORD dwReserved4;\n    BOOL  fPerUser;\n    DWORD dwSyncMode;\n    DWORD dwNumCachePaths;\n    __C89_NAMELESS union\n    {\n        __C89_NAMELESS struct\n        {\n            WCHAR CachePath[MAX_PATH];\n            DWORD dwCacheSize;\n        } __C89_NAMELESSSTRUCTNAME;\n        INTERNET_CACHE_CONFIG_PATH_ENTRYW CachePaths[ANYSIZE_ARRAY];\n    } __C89_NAMELESSUNIONNAME;\n    DWORD dwNormalUsage;\n    DWORD dwExemptUsage;\n} INTERNET_CACHE_CONFIG_INFOW, *LPINTERNET_CACHE_CONFIG_INFOW;\n\nDECL_WINELIB_TYPE_AW(INTERNET_CACHE_CONFIG_INFO)\nDECL_WINELIB_TYPE_AW(LPINTERNET_CACHE_CONFIG_INFO)\n\ntypedef enum {\n    WININET_SYNC_MODE_NEVER = 0,\n    WININET_SYNC_MODE_ON_EXPIRY,\n    WININET_SYNC_MODE_ONCE_PER_SESSION,\n    WININET_SYNC_MODE_ALWAYS,\n    WININET_SYNC_MODE_AUTOMATIC,\n    WININET_SYNC_MODE_DEFAULT = WININET_SYNC_MODE_AUTOMATIC\n} WININET_SYNC_MODE;\n\n/* Flags for GetUrlCacheConfigInfoA/W and SetUrlCacheConfigInfoA/W */\n#define CACHE_CONFIG_FORCE_CLEANUP_FC        0x00000020\n#define CACHE_CONFIG_DISK_CACHE_PATHS_FC     0x00000040\n#define CACHE_CONFIG_SYNC_MODE_FC            0x00000080\n#define CACHE_CONFIG_CONTENT_PATHS_FC        0x00000100\n#define CACHE_CONFIG_COOKIES_PATHS_FC        0x00000200\n#define CACHE_CONFIG_HISTORY_PATHS_FC        0x00000400\n#define CACHE_CONFIG_QUOTA_FC                0x00000800\n#define CACHE_CONFIG_USER_MODE_FC            0x00001000\n#define CACHE_CONFIG_CONTENT_USAGE_FC        0x00002000\n#define CACHE_CONFIG_STICKY_CONTENT_USAGE_FC 0x00004000\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nDWORD       WINAPI DeleteIE3Cache(HWND,HINSTANCE,LPSTR,int);\nBOOL        WINAPI GetDiskInfoA(PCSTR,PDWORD,PDWORDLONG,PDWORDLONG);\nBOOL        WINAPI GetUrlCacheConfigInfoA(LPINTERNET_CACHE_CONFIG_INFOA,LPDWORD,DWORD);\nBOOL        WINAPI GetUrlCacheConfigInfoW(LPINTERNET_CACHE_CONFIG_INFOW,LPDWORD,DWORD);\n#define     GetUrlCacheConfigInfo WINELIB_NAME_AW(GetUrlCacheConfigInfo)\nBOOL        WINAPI IncrementUrlCacheHeaderData(DWORD,LPDWORD);\nBOOL        WINAPI InternetQueryFortezzaStatus(DWORD*,DWORD_PTR);\nBOOL        WINAPI IsUrlCacheEntryExpiredA(LPCSTR,DWORD,FILETIME*);\nBOOL        WINAPI IsUrlCacheEntryExpiredW(LPCWSTR,DWORD,FILETIME*);\n#define     IsUrlCacheEntryExpired WINELIB_NAME_AW(IsUrlCacheEntryExpired)\nDWORD       WINAPI ParseX509EncodedCertificateForListBoxEntry(LPBYTE,DWORD,LPSTR,LPDWORD);\nBOOL        WINAPI SetUrlCacheConfigInfoA(LPINTERNET_CACHE_CONFIG_INFOA,DWORD);\nBOOL        WINAPI SetUrlCacheConfigInfoW(LPINTERNET_CACHE_CONFIG_INFOW,DWORD);\n#define     SetUrlCacheConfigInfo WINELIB_NAME_AW(SetUrlCacheConfigInfo)\nBOOL        WINAPI InternetGetSecurityInfoByURLA(LPSTR,PCCERT_CHAIN_CONTEXT*,DWORD*);\nBOOL        WINAPI InternetGetSecurityInfoByURLW(LPCWSTR,PCCERT_CHAIN_CONTEXT*,DWORD*);\n#define     InternetGetSecurityInfoByURL WINELIB_NAME_AW(InternetGetSecurityInfoByURL)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _WINE_WININETI_H_ */\n"
  },
  {
    "path": "wine/windows/winioctl.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINIOCTL_H\n#define __WINE_WINIOCTL_H\n\n#define CTL_CODE( DeviceType, Function, Method, Access ) (                 \\\n    (DWORD)((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \\\n)\n\n#define DEVICE_TYPE DWORD\n\n#define FILE_DEVICE_BEEP                0x00000001\n#define FILE_DEVICE_CD_ROM              0x00000002\n#define FILE_DEVICE_CD_ROM_FILE_SYSTEM  0x00000003\n#define FILE_DEVICE_CONTROLLER          0x00000004\n#define FILE_DEVICE_DATALINK            0x00000005\n#define FILE_DEVICE_DFS                 0x00000006\n#define FILE_DEVICE_DISK                0x00000007\n#define FILE_DEVICE_DISK_FILE_SYSTEM    0x00000008\n#define FILE_DEVICE_FILE_SYSTEM         0x00000009\n#define FILE_DEVICE_INPORT_PORT         0x0000000a\n#define FILE_DEVICE_KEYBOARD            0x0000000b\n#define FILE_DEVICE_MAILSLOT            0x0000000c\n#define FILE_DEVICE_MIDI_IN             0x0000000d\n#define FILE_DEVICE_MIDI_OUT            0x0000000e\n#define FILE_DEVICE_MOUSE               0x0000000f\n#define FILE_DEVICE_MULTI_UNC_PROVIDER  0x00000010\n#define FILE_DEVICE_NAMED_PIPE          0x00000011\n#define FILE_DEVICE_NETWORK             0x00000012\n#define FILE_DEVICE_NETWORK_BROWSER     0x00000013\n#define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014\n#define FILE_DEVICE_NULL                0x00000015\n#define FILE_DEVICE_PARALLEL_PORT       0x00000016\n#define FILE_DEVICE_PHYSICAL_NETCARD    0x00000017\n#define FILE_DEVICE_PRINTER             0x00000018\n#define FILE_DEVICE_SCANNER             0x00000019\n#define FILE_DEVICE_SERIAL_MOUSE_PORT   0x0000001a\n#define FILE_DEVICE_SERIAL_PORT         0x0000001b\n#define FILE_DEVICE_SCREEN              0x0000001c\n#define FILE_DEVICE_SOUND               0x0000001d\n#define FILE_DEVICE_STREAMS             0x0000001e\n#define FILE_DEVICE_TAPE                0x0000001f\n#define FILE_DEVICE_TAPE_FILE_SYSTEM    0x00000020\n#define FILE_DEVICE_TRANSPORT           0x00000021\n#define FILE_DEVICE_UNKNOWN             0x00000022\n#define FILE_DEVICE_VIDEO               0x00000023\n#define FILE_DEVICE_VIRTUAL_DISK        0x00000024\n#define FILE_DEVICE_WAVE_IN             0x00000025\n#define FILE_DEVICE_WAVE_OUT            0x00000026\n#define FILE_DEVICE_8042_PORT           0x00000027\n#define FILE_DEVICE_NETWORK_REDIRECTOR  0x00000028\n#define FILE_DEVICE_BATTERY             0x00000029\n#define FILE_DEVICE_BUS_EXTENDER        0x0000002a\n#define FILE_DEVICE_MODEM               0x0000002b\n#define FILE_DEVICE_VDM                 0x0000002c\n#define FILE_DEVICE_MASS_STORAGE        0x0000002d\n#define FILE_DEVICE_SMB                 0x0000002e\n#define FILE_DEVICE_KS                  0x0000002f\n#define FILE_DEVICE_CHANGER             0x00000030\n#define FILE_DEVICE_SMARTCARD           0x00000031\n#define FILE_DEVICE_ACPI                0x00000032\n#define FILE_DEVICE_DVD                 0x00000033\n#define FILE_DEVICE_FULLSCREEN_VIDEO    0x00000034\n#define FILE_DEVICE_DFS_FILE_SYSTEM     0x00000035\n#define FILE_DEVICE_DFS_VOLUME          0x00000036\n#define FILE_DEVICE_SERENUM             0x00000037\n#define FILE_DEVICE_TERMSRV             0x00000038\n#define FILE_DEVICE_KSEC                0x00000039\n\n#define METHOD_BUFFERED                 0\n#define METHOD_IN_DIRECT                1\n#define METHOD_OUT_DIRECT               2\n#define METHOD_NEITHER                  3\n\n#define FILE_ANY_ACCESS                 0\n#define FILE_SPECIAL_ACCESS             0\n#define FILE_READ_ACCESS                FILE_READ_DATA  /* file & pipe */\n#define FILE_WRITE_ACCESS               FILE_WRITE_DATA /* file & pipe */\n\n#define FSCTL_REQUEST_OPLOCK_LEVEL_1             CTL_CODE(FILE_DEVICE_FILE_SYSTEM,   0, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_REQUEST_OPLOCK_LEVEL_2             CTL_CODE(FILE_DEVICE_FILE_SYSTEM,   1, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_REQUEST_BATCH_OPLOCK               CTL_CODE(FILE_DEVICE_FILE_SYSTEM,   2, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE           CTL_CODE(FILE_DEVICE_FILE_SYSTEM,   3, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_OPBATCH_ACK_CLOSE_PENDING          CTL_CODE(FILE_DEVICE_FILE_SYSTEM,   4, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_OPLOCK_BREAK_NOTIFY                CTL_CODE(FILE_DEVICE_FILE_SYSTEM,   5, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_LOCK_VOLUME                        CTL_CODE(FILE_DEVICE_FILE_SYSTEM,   6, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_UNLOCK_VOLUME                      CTL_CODE(FILE_DEVICE_FILE_SYSTEM,   7, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_DISMOUNT_VOLUME                    CTL_CODE(FILE_DEVICE_FILE_SYSTEM,   8, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_IS_VOLUME_MOUNTED                  CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  10, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_IS_PATHNAME_VALID                  CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  11, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_MARK_VOLUME_DIRTY                  CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  12, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_QUERY_RETRIEVAL_POINTERS           CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  14, METHOD_NEITHER,  FILE_ANY_ACCESS)\n#define FSCTL_GET_COMPRESSION                    CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  15, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_SET_COMPRESSION                    CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)\n#define FSCTL_MARK_AS_SYSTEM_HIVE                CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  19, METHOD_NEITHER,  FILE_ANY_ACCESS)\n#define FSCTL_OPLOCK_BREAK_ACK_NO_2              CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  20, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_INVALIDATE_VOLUMES                 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  21, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_QUERY_FAT_BPB                      CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  22, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_REQUEST_FILTER_OPLOCK              CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  23, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_FILESYSTEM_GET_STATISTICS          CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  24, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_GET_NTFS_VOLUME_DATA               CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  25, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_GET_NTFS_FILE_RECORD               CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  26, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_GET_VOLUME_BITMAP                  CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  27, METHOD_NEITHER,  FILE_ANY_ACCESS)\n#define FSCTL_GET_RETRIEVAL_POINTERS             CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  28, METHOD_NEITHER,  FILE_ANY_ACCESS)\n#define FSCTL_MOVE_FILE                          CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  29, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)\n#define FSCTL_IS_VOLUME_DIRTY                    CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  30, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_GET_HFS_INFORMATION                CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  31, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_ALLOW_EXTENDED_DASD_IO             CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  32, METHOD_NEITHER,  FILE_ANY_ACCESS)\n#define FSCTL_READ_PROPERTY_DATA                 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  33, METHOD_NEITHER,  FILE_ANY_ACCESS)\n#define FSCTL_WRITE_PROPERTY_DATA                CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  34, METHOD_NEITHER,  FILE_ANY_ACCESS)\n#define FSCTL_FIND_FILES_BY_SID                  CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  35, METHOD_NEITHER,  FILE_ANY_ACCESS)\n#define FSCTL_DUMP_PROPERTY_DATA                 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  37, METHOD_NEITHER,  FILE_ANY_ACCESS)\n#define FSCTL_SET_OBJECT_ID                      CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  38, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)\n#define FSCTL_GET_OBJECT_ID                      CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  39, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_DELETE_OBJECT_ID                   CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  40, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)\n#define FSCTL_SET_REPARSE_POINT                  CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  41, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)\n#define FSCTL_GET_REPARSE_POINT                  CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  42, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_DELETE_REPARSE_POINT               CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  43, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)\n#define FSCTL_ENUM_USN_DATA                      CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  44, METHOD_NEITHER,  FILE_ANY_ACCESS)\n#define FSCTL_SECURITY_ID_CHECK                  CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  45, METHOD_NEITHER,  FILE_READ_DATA)\n#define FSCTL_READ_USN_JOURNAL                   CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  46, METHOD_NEITHER,  FILE_ANY_ACCESS)\n#define FSCTL_SET_OBJECT_ID_EXTENDED             CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  47, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)\n#define FSCTL_CREATE_OR_GET_OBJECT_ID            CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  48, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_SET_SPARSE                         CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  49, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)\n#define FSCTL_SET_ZERO_DATA                      CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  50, METHOD_BUFFERED, FILE_WRITE_DATA)\n#define FSCTL_QUERY_ALLOCATED_RANGES             CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  51, METHOD_NEITHER,  FILE_READ_DATA)\n#define FSCTL_ENABLE_UPGRADE                     CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  52, METHOD_BUFFERED, FILE_WRITE_DATA)\n#define FSCTL_SET_ENCRYPTION                     CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  53, METHOD_NEITHER,  FILE_ANY_ACCESS)\n#define FSCTL_ENCRYPTION_FSCTL_IO                CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  54, METHOD_NEITHER,  FILE_ANY_ACCESS)\n#define FSCTL_WRITE_RAW_ENCRYPTED                CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  55, METHOD_NEITHER,  FILE_SPECIAL_ACCESS)\n#define FSCTL_READ_RAW_ENCRYPTED                 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  56, METHOD_NEITHER,  FILE_SPECIAL_ACCESS)\n#define FSCTL_CREATE_USN_JOURNAL                 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  57, METHOD_NEITHER,  FILE_ANY_ACCESS)\n#define FSCTL_READ_FILE_USN_DATA                 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  58, METHOD_NEITHER,  FILE_ANY_ACCESS)\n#define FSCTL_WRITE_USN_CLOSE_RECORD             CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  59, METHOD_NEITHER,  FILE_ANY_ACCESS)\n#define FSCTL_EXTEND_VOLUME                      CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  60, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_QUERY_USN_JOURNAL                  CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  61, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_DELETE_USN_JOURNAL                 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  62, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_MARK_HANDLE                        CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  63, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_SIS_COPYFILE                       CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  64, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_SIS_LINK_FILES                     CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)\n#define FSCTL_HSM_MSG                            CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)\n#define FSCTL_HSM_DATA                           CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  68, METHOD_NEITHER,  FILE_READ_DATA | FILE_WRITE_DATA)\n#define FSCTL_RECALL_FILE                        CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  69, METHOD_NEITHER,  FILE_ANY_ACCESS)\n#define FSCTL_READ_FROM_PLEX                     CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  71, METHOD_OUT_DIRECT,FILE_READ_DATA)\n#define FSCTL_FILE_PREFETCH                      CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)\n#define FSCTL_MAKE_MEDIA_COMPATIBLE              CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  76, METHOD_BUFFERED, FILE_WRITE_DATA)\n#define FSCTL_SET_DEFECT_MANAGEMENT              CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  77, METHOD_BUFFERED, FILE_WRITE_DATA)\n#define FSCTL_QUERY_SPARING_INFO                 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  78, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_QUERY_ON_DISK_VOLUME_INFO          CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  79, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_SET_VOLUME_COMPRESSION_STATE       CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  80, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)\n#define FSCTL_TXFS_MODIFY_RM                     CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  81, METHOD_BUFFERED, FILE_WRITE_DATA)\n#define FSCTL_TXFS_QUERY_RM_INFORMATION          CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  82, METHOD_BUFFERED, FILE_READ_DATA)\n#define FSCTL_TXFS_ROLLFORWARD_REDO              CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  84, METHOD_BUFFERED, FILE_WRITE_DATA)\n#define FSCTL_TXFS_ROLLFORWARD_UNDO              CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  85, METHOD_BUFFERED, FILE_WRITE_DATA)\n#define FSCTL_TXFS_START_RM                      CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  86, METHOD_BUFFERED, FILE_WRITE_DATA)\n#define FSCTL_TXFS_SHUTDOWN_RM                   CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  87, METHOD_BUFFERED, FILE_WRITE_DATA)\n#define FSCTL_TXFS_READ_BACKUP_INFORMATION       CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  88, METHOD_BUFFERED, FILE_READ_DATA)\n#define FSCTL_TXFS_WRITE_BACKUP_INFORMATION      CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  89, METHOD_BUFFERED, FILE_WRITE_DATA)\n#define FSCTL_TXFS_CREATE_SECONDARY_RM           CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  90, METHOD_BUFFERED, FILE_WRITE_DATA)\n#define FSCTL_TXFS_GET_METADATA_INFO             CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  91, METHOD_BUFFERED, FILE_READ_DATA)\n#define FSCTL_TXFS_GET_TRANSACTED_VERSION        CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  92, METHOD_BUFFERED, FILE_READ_DATA)\n#define FSCTL_TXFS_CREATE_MINIVERSION            CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  95, METHOD_BUFFERED, FILE_WRITE_DATA)\n#define FSCTL_TXFS_TRANSACTION_ACTIVE            CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  99, METHOD_BUFFERED, FILE_READ_DATA)\n#define FSCTL_SET_ZERO_ON_DEALLOCATION           CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 101, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)\n#define FSCTL_SET_REPAIR                         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_GET_REPAIR                         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_WAIT_FOR_REPAIR                    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_INITIATE_REPAIR                    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_CSC_INTERNAL                       CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER,  FILE_ANY_ACCESS)\n#define FSCTL_SHRINK_VOLUME                      CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)\n#define FSCTL_SET_SHORT_NAME_BEHAVIOR            CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_DFSR_SET_GHOST_HANDLE_STATE        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_READ_DATA)\n#define FSCTL_TXFS_LIST_TRANSACTIONS             CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_READ_DATA)\n#define FSCTL_QUERY_PAGEFILE_ENCRYPTION          CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS)\n\n#define FSCTL_PIPE_ASSIGN_EVENT         CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_PIPE_DISCONNECT           CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_PIPE_LISTEN               CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_PIPE_PEEK                 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)\n#define FSCTL_PIPE_QUERY_EVENT          CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_PIPE_TRANSCEIVE           CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER,  FILE_READ_DATA | FILE_WRITE_DATA)\n#define FSCTL_PIPE_WAIT                 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_PIPE_IMPERSONATE          CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_PIPE_SET_CLIENT_PROCESS   CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_PIPE_GET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define FSCTL_PIPE_INTERNAL_READ        CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)\n#define FSCTL_PIPE_INTERNAL_WRITE       CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)\n#define FSCTL_PIPE_INTERNAL_TRANSCEIVE  CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)\n#define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)\n\n#define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE\n#define IOCTL_STORAGE_CHECK_VERIFY       CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_STORAGE_CHECK_VERIFY2      CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_STORAGE_MEDIA_REMOVAL      CTL_CODE(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_STORAGE_EJECT_MEDIA        CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_STORAGE_LOAD_MEDIA         CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_STORAGE_LOAD_MEDIA2        CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_STORAGE_RESERVE            CTL_CODE(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_STORAGE_RELEASE            CTL_CODE(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_STORAGE_FIND_NEW_DEVICES   CTL_CODE(IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_STORAGE_EJECTION_CONTROL   CTL_CODE(IOCTL_STORAGE_BASE, 0x0250, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_STORAGE_MCN_CONTROL        CTL_CODE(IOCTL_STORAGE_BASE, 0x0251, METHOD_BUFFERED, FILE_ANY_ACCESS)\n\n#define IOCTL_STORAGE_GET_MEDIA_TYPES         CTL_CODE(IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_STORAGE_GET_MEDIA_TYPES_EX      CTL_CODE(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER CTL_CODE(IOCTL_STORAGE_BASE, 0x0304, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_STORAGE_GET_HOTPLUG_INFO        CTL_CODE(IOCTL_STORAGE_BASE, 0x0305, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_STORAGE_SET_HOTPLUG_INFO        CTL_CODE(IOCTL_STORAGE_BASE, 0x0306, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)\n\n#define IOCTL_STORAGE_RESET_BUS          CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_STORAGE_RESET_DEVICE       CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_STORAGE_BREAK_RESERVATION  CTL_CODE(IOCTL_STORAGE_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_STORAGE_PERSISTENT_RESERVE_IN   CTL_CODE(IOCTL_STORAGE_BASE, 0x0406, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_STORAGE_PERSISTENT_RESERVE_OUT  CTL_CODE(IOCTL_STORAGE_BASE, 0x0407, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)\n\n#define IOCTL_STORAGE_GET_DEVICE_NUMBER  CTL_CODE(IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS)\n\n#define IOCTL_DISK_BASE                 FILE_DEVICE_DISK\n#define IOCTL_DISK_GET_DRIVE_GEOMETRY   CTL_CODE(IOCTL_DISK_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_DISK_GET_PARTITION_INFO   CTL_CODE(IOCTL_DISK_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_DISK_SET_PARTITION_INFO   CTL_CODE(IOCTL_DISK_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)\n#define IOCTL_DISK_GET_DRIVE_LAYOUT     CTL_CODE(IOCTL_DISK_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_DISK_SET_DRIVE_LAYOUT     CTL_CODE(IOCTL_DISK_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)\n#define IOCTL_DISK_VERIFY               CTL_CODE(IOCTL_DISK_BASE, 0x0005, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_DISK_FORMAT_TRACKS        CTL_CODE(IOCTL_DISK_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)\n#define IOCTL_DISK_REASSIGN_BLOCKS      CTL_CODE(IOCTL_DISK_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)\n#define IOCTL_DISK_PERFORMANCE          CTL_CODE(IOCTL_DISK_BASE, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_DISK_IS_WRITABLE          CTL_CODE(IOCTL_DISK_BASE, 0x0009, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_DISK_LOGGING              CTL_CODE(IOCTL_DISK_BASE, 0x000a, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_DISK_FORMAT_TRACKS_EX     CTL_CODE(IOCTL_DISK_BASE, 0x000b, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)\n#define IOCTL_DISK_HISTOGRAM_STRUCTURE  CTL_CODE(IOCTL_DISK_BASE, 0x000c, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_DISK_HISTOGRAM_DATA       CTL_CODE(IOCTL_DISK_BASE, 0x000d, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_DISK_HISTOGRAM_RESET      CTL_CODE(IOCTL_DISK_BASE, 0x000e, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_DISK_REQUEST_STRUCTURE    CTL_CODE(IOCTL_DISK_BASE, 0x000f, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_DISK_REQUEST_DATA         CTL_CODE(IOCTL_DISK_BASE, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define IOCTL_DISK_CHECK_VERIFY         CTL_CODE(IOCTL_DISK_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_DISK_MEDIA_REMOVAL        CTL_CODE(IOCTL_DISK_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_DISK_EJECT_MEDIA          CTL_CODE(IOCTL_DISK_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_DISK_LOAD_MEDIA           CTL_CODE(IOCTL_DISK_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_DISK_RESERVE              CTL_CODE(IOCTL_DISK_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_DISK_RELEASE              CTL_CODE(IOCTL_DISK_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_DISK_FIND_NEW_DEVICES     CTL_CODE(IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define IOCTL_DISK_GET_MEDIA_TYPES      CTL_CODE(IOCTL_DISK_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)\n\n\n#define IOCTL_DISK_CONTROLLER_NUMBER    CTL_CODE(IOCTL_DISK_BASE, 0x0011, METHOD_BUFFERED, FILE_ANY_ACCESS)\n#define SMART_GET_VERSION               CTL_CODE(IOCTL_DISK_BASE, 0x0020, METHOD_BUFFERED, FILE_READ_ACCESS)\n#define SMART_SEND_DRIVE_COMMAND        CTL_CODE(IOCTL_DISK_BASE, 0x0021, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)\n#define SMART_RCV_DRIVE_DATA            CTL_CODE(IOCTL_DISK_BASE, 0x0022, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)\n#define IOCTL_DISK_GET_DRIVE_GEOMETRY_EX CTL_CODE(IOCTL_DISK_BASE, 0x0028, METHOD_BUFFERED, FILE_ANY_ACCESS)\n\n#define IOCTL_VOLUME_BASE ((DWORD)'V')\n#define IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS      CTL_CODE(IOCTL_VOLUME_BASE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)\n\n#define IOCTL_SERIAL_LSRMST_INSERT      CTL_CODE(FILE_DEVICE_SERIAL_PORT,31,METHOD_BUFFERED,FILE_ANY_ACCESS)\n\n\n/* Return Codes... should these be the same as something somewhere? */\n#define PARTITION_ENTRY_UNUSED          0x00      /* Entry unused */\n#define PARTITION_FAT_12                0x01      /* 12-bit FAT entries */\n#define PARTITION_XENIX_1               0x02      /* Xenix */\n#define PARTITION_XENIX_2               0x03      /* Xenix */\n#define PARTITION_FAT_16                0x04      /* 16-bit FAT entries */\n#define PARTITION_EXTENDED              0x05      /* Extended partition entry */\n#define PARTITION_HUGE                  0x06      /* Huge partition MS-DOS V4 */\n#define PARTITION_IFS                   0x07      /* IFS Partition */\n#define PARTITION_FAT32                 0x0B      /* FAT32 */\n#define PARTITION_FAT32_XINT13          0x0C      /* FAT32 using extended int13 services */\n#define PARTITION_XINT13                0x0E      /* Win95 partition using extended int13 services */\n#define PARTITION_XINT13_EXTENDED       0x0F      /* Same as type 5 but uses extended int13 services */\n#define PARTITION_PREP                  0x41      /* PowerPC Reference Platform (PReP) Boot Partition */\n#define PARTITION_LDM                   0x42      /* Logical Disk Manager partition */\n#define PARTITION_UNIX                  0x63      /* Unix */\n\ntypedef enum _MEDIA_TYPE {\n    Unknown, F5_1Pt2_512, F3_1Pt44_512, F3_2Pt88_512, F3_20Pt8_512, F3_720_512, F5_360_512,\n    F5_320_512, F5_320_1024, F5_180_512, F5_160_512, RemovableMedia, FixedMedia, F3_120M_512,\n    F3_640_512, F5_640_512, F5_720_512, F3_1Pt2_512, F3_1Pt23_1024, F5_1Pt23_1024, F3_128Mb_512,\n    F3_230Mb_512, F8_256_128\n} MEDIA_TYPE, *PMEDIA_TYPE;\n\ntypedef struct _FORMAT_PARAMETERS {\n   MEDIA_TYPE           MediaType;\n   DWORD                StartCylinderNumber;\n   DWORD                EndCylinderNumber;\n   DWORD                StartHeadNumber;\n   DWORD                EndHeadNumber;\n} FORMAT_PARAMETERS, *PFORMAT_PARAMETERS;\n\ntypedef WORD   BAD_TRACK_NUMBER;\ntypedef WORD   *PBAD_TRACK_NUMBER;\n\ntypedef struct _FORMAT_EX_PARAMETERS {\n   MEDIA_TYPE           MediaType;\n   DWORD                StartCylinderNumber;\n   DWORD                EndCylinderNumber;\n   DWORD                StartHeadNumber;\n   DWORD                EndHeadNumber;\n   WORD                 FormatGapLength;\n   WORD                 SectorsPerTrack;\n   WORD                 SectorNumber[1];\n} FORMAT_EX_PARAMETERS, *PFORMAT_EX_PARAMETERS;\n\ntypedef struct _DISK_GEOMETRY {\n    LARGE_INTEGER       Cylinders;\n    MEDIA_TYPE          MediaType;\n    DWORD               TracksPerCylinder;\n    DWORD               SectorsPerTrack;\n    DWORD               BytesPerSector;\n} DISK_GEOMETRY, *PDISK_GEOMETRY;\n\ntypedef struct _DISK_GEOMETRY_EX {\n    DISK_GEOMETRY       Geometry;\n    LARGE_INTEGER       DiskSize;\n    BYTE                Data[1];\n} DISK_GEOMETRY_EX, *PDISK_GEOMETRY_EX;\n\ntypedef struct _PARTITION_INFORMATION {\n    LARGE_INTEGER       StartingOffset;\n    LARGE_INTEGER       PartitionLength;\n    DWORD               HiddenSectors;\n    DWORD               PartitionNumber;\n    BYTE                PartitionType;\n    BOOLEAN             BootIndicator;\n    BOOLEAN             RecognizedPartition;\n    BOOLEAN             RewritePartition;\n} PARTITION_INFORMATION, *PPARTITION_INFORMATION;\n\ntypedef struct _SET_PARTITION_INFORMATION {\n    BYTE                PartitionType;\n} SET_PARTITION_INFORMATION, *PSET_PARTITION_INFORMATION;\n\ntypedef struct _DRIVE_LAYOUT_INFORMATION {\n    DWORD               PartitionCount;\n    DWORD               Signature;\n    PARTITION_INFORMATION PartitionEntry[1];\n} DRIVE_LAYOUT_INFORMATION, *PDRIVE_LAYOUT_INFORMATION;\n\ntypedef struct _VERIFY_INFORMATION {\n    LARGE_INTEGER       StartingOffset;\n    DWORD               Length;\n} VERIFY_INFORMATION, *PVERIFY_INFORMATION;\n\ntypedef struct _REASSIGN_BLOCKS {\n    WORD                Reserved;\n    WORD                Count;\n    DWORD               BlockNumber[1];\n} REASSIGN_BLOCKS, *PREASSIGN_BLOCKS;\n\n/* Start: _WIN32_WINNT >= 0x0400 */\n\ntypedef struct _DISK_CONTROLLER_NUMBER {\n    DWORD               ControllerNumber;\n    DWORD               DiskNumber;\n} DISK_CONTROLLER_NUMBER, *PDISK_CONTROLLER_NUMBER;\n\n/* VOLUME_GET_VOLUME_DISK_EXTENTS */\ntypedef struct _DISK_EXTENT {\n    DWORD               DiskNumber;\n    LARGE_INTEGER       StartingOffset;\n    LARGE_INTEGER       ExtentLength;\n} DISK_EXTENT;\n\ntypedef struct _VOLUME_DISK_EXTENTS {\n    DWORD               NumberOfDiskExtents;\n    DISK_EXTENT         Extents[1];\n} VOLUME_DISK_EXTENTS;\n\ntypedef struct RETRIEVAL_POINTERS_BUFFER {\n    DWORD         ExtentCount;\n    LARGE_INTEGER StartingVcn;\n    struct {\n        LARGE_INTEGER NextVcn;\n        LARGE_INTEGER Lcn;\n    } Extents[1];\n} RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER;\n\n/* End: _WIN32_WINNT >= 0x0400 */\n\n/*\n *\tNT I/O-Manager\n */\n\n/*\n * structures for NtQueryVolumeInformationFile\n * (wdm.h)\n */\n\n/* FileFsVolumeInformation = 1 */\ntypedef struct _FILE_FS_VOLUME_INFORMATION {\n\tLARGE_INTEGER\tVolumeCreationTime;\n\tULONG\t\tVolumeSerialNumber;\n\tULONG\t\tVolumeLabelLength;\n\tBOOLEAN\t\tSupportsObjects;\n\tWCHAR\t\tVolumeLabel[1];\n} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;\n\n/* FileFsLabelInformation = 2 */\n/*\n unknown\n*/\n\n/* FileFsSizeInformation = 3 */\ntypedef struct _FILE_FS_SIZE_INFORMATION {\n\tLARGE_INTEGER\tTotalAllocationUnits;\n\tLARGE_INTEGER\tAvailableAllocationUnits;\n\tULONG\t\tSectorsPerAllocationUnit;\n\tULONG\t\tBytesPerSector;\n} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;\n\n/* FileFsDeviceInformation = 4 */\ntypedef struct _FILE_FS_DEVICE_INFORMATION {\n\tDEVICE_TYPE DeviceType;\n\tULONG Characteristics;\n} FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;\n\n/* FileFsAttributeInformation = 5 */\ntypedef struct _FILE_FS_ATTRIBUTE_INFORMATION {\n\tULONG\tFileSystemAttribute;\n\tLONG\tMaximumComponentNameLength;\n\tULONG\tFileSystemNameLength;\n\tWCHAR\tFileSystemName[1];\n} FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;\n\n/*FileFsControlInformation = 6 */\n/*\n unknown\n */\n\n/*FileFsFullSizeInformation = 7 */\ntypedef struct _FILE_FS_FULL_SIZE_INFORMATION {\n\tLARGE_INTEGER\tTotalAllocationUnits;\n\tLARGE_INTEGER\tCallerAvailableAllocationUnits;\n\tLARGE_INTEGER\tActualAvailableAllocationUnits;\n\tULONG\t\tSectorsPerAllocationUnit;\n\tULONG\t\tBytesPerSector;\n} FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION;\n\ntypedef struct _FILE_PIPE_WAIT_FOR_BUFFER {\n    LARGE_INTEGER   Timeout;\n    ULONG           NameLength;\n    BOOLEAN         TimeoutSpecified;\n    WCHAR           Name[1];\n} FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER;\n\ntypedef struct _FILE_PIPE_PEEK_BUFFER {\n    ULONG   NamedPipeState;\n    ULONG   ReadDataAvailable;\n    ULONG   NumberOfMessages;\n    ULONG   MessageLength;\n    CHAR    Data[1];\n} FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER;\n\n/* Device GUIDs */\n#ifdef DEFINE_GUID\n\nDEFINE_GUID(GUID_DEVINTERFACE_COMPORT, 0x86E0D1E0, 0x8089,\n 0x11D0, 0x9C, 0xE4, 0x08, 0x00, 0x3E, 0x30, 0x1F, 0x73);\nDEFINE_GUID(GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR, 0x4D36E978, 0xE325,\n 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18);\n\n/* obsolete GUID names */\n#define GUID_CLASS_COMPORT          GUID_DEVINTERFACE_COMPORT\n#define GUID_SERENUM_BUS_ENUMERATOR GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR\n\n#endif /* DEFINE_GUID */\n\n#endif\n"
  },
  {
    "path": "wine/windows/winldap.h",
    "content": "/*\n * Copyright 2005 Hans Leidekker\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINLDAP_H\n#define __WINE_WINLDAP_H\n\n#include <windef.h>\n#include <schnlsp.h>\n\n#ifndef LDAPAPI\n#define LDAPAPI __cdecl\n#endif\n\n\ntypedef enum {\n    LDAP_SUCCESS                    =   0x00,\n    LDAP_OPERATIONS_ERROR           =   0x01,\n    LDAP_PROTOCOL_ERROR             =   0x02,\n    LDAP_TIMELIMIT_EXCEEDED         =   0x03,\n    LDAP_SIZELIMIT_EXCEEDED         =   0x04,\n    LDAP_COMPARE_FALSE              =   0x05,\n    LDAP_COMPARE_TRUE               =   0x06,\n    LDAP_AUTH_METHOD_NOT_SUPPORTED  =   0x07,\n    LDAP_STRONG_AUTH_REQUIRED       =   0x08,\n    LDAP_REFERRAL_V2                =   0x09,\n    LDAP_PARTIAL_RESULTS            =   0x09,\n    LDAP_REFERRAL                   =   0x0a,\n    LDAP_ADMIN_LIMIT_EXCEEDED       =   0x0b,\n    LDAP_UNAVAILABLE_CRIT_EXTENSION =   0x0c,\n    LDAP_CONFIDENTIALITY_REQUIRED   =   0x0d,\n    LDAP_SASL_BIND_IN_PROGRESS      =   0x0e,\n\n    LDAP_NO_SUCH_ATTRIBUTE          =   0x10,\n    LDAP_UNDEFINED_TYPE             =   0x11,\n    LDAP_INAPPROPRIATE_MATCHING     =   0x12,\n    LDAP_CONSTRAINT_VIOLATION       =   0x13,\n    LDAP_ATTRIBUTE_OR_VALUE_EXISTS  =   0x14,\n    LDAP_INVALID_SYNTAX             =   0x15,\n\n    LDAP_NO_SUCH_OBJECT             =   0x20,\n    LDAP_ALIAS_PROBLEM              =   0x21,\n    LDAP_INVALID_DN_SYNTAX          =   0x22,\n    LDAP_IS_LEAF                    =   0x23,\n    LDAP_ALIAS_DEREF_PROBLEM        =   0x24,\n\n    LDAP_INAPPROPRIATE_AUTH         =   0x30,\n    LDAP_INVALID_CREDENTIALS        =   0x31,\n    LDAP_INSUFFICIENT_RIGHTS        =   0x32,\n    LDAP_BUSY                       =   0x33,\n    LDAP_UNAVAILABLE                =   0x34,\n    LDAP_UNWILLING_TO_PERFORM       =   0x35,\n    LDAP_LOOP_DETECT                =   0x36,\n    LDAP_SORT_CONTROL_MISSING       =   0x3C,\n    LDAP_OFFSET_RANGE_ERROR         =   0x3D,\n\n    LDAP_NAMING_VIOLATION           =   0x40,\n    LDAP_OBJECT_CLASS_VIOLATION     =   0x41,\n    LDAP_NOT_ALLOWED_ON_NONLEAF     =   0x42,\n    LDAP_NOT_ALLOWED_ON_RDN         =   0x43,\n    LDAP_ALREADY_EXISTS             =   0x44,\n    LDAP_NO_OBJECT_CLASS_MODS       =   0x45,\n    LDAP_RESULTS_TOO_LARGE          =   0x46,\n    LDAP_AFFECTS_MULTIPLE_DSAS      =   0x47,\n\n    LDAP_VIRTUAL_LIST_VIEW_ERROR    =   0x4c,\n\n    LDAP_OTHER                      =   0x50,\n    LDAP_SERVER_DOWN                =   0x51,\n    LDAP_LOCAL_ERROR                =   0x52,\n    LDAP_ENCODING_ERROR             =   0x53,\n    LDAP_DECODING_ERROR             =   0x54,\n    LDAP_TIMEOUT                    =   0x55,\n    LDAP_AUTH_UNKNOWN               =   0x56,\n    LDAP_FILTER_ERROR               =   0x57,\n    LDAP_USER_CANCELLED             =   0x58,\n    LDAP_PARAM_ERROR                =   0x59,\n    LDAP_NO_MEMORY                  =   0x5a,\n    LDAP_CONNECT_ERROR              =   0x5b,\n    LDAP_NOT_SUPPORTED              =   0x5c,\n    LDAP_CONTROL_NOT_FOUND          =   0x5d,\n    LDAP_NO_RESULTS_RETURNED        =   0x5e,\n    LDAP_MORE_RESULTS_TO_RETURN     =   0x5f,\n\n    LDAP_CLIENT_LOOP                =   0x60,\n    LDAP_REFERRAL_LIMIT_EXCEEDED    =   0x61\n} LDAP_RETCODE;\n\n#define LDAP_SCOPE_BASE         0x00\n#define LDAP_SCOPE_ONELEVEL     0x01\n#define LDAP_SCOPE_SUBTREE      0x02\n\ntypedef struct berelement\n{\n    PCHAR opaque;\n} BerElement;\n\n#define LDAP_OPT_API_INFO               0x00\n#define LDAP_OPT_DESC                   0x01\n#define LDAP_OPT_DEREF                  0x02\n#define LDAP_OPT_SIZELIMIT              0x03\n#define LDAP_OPT_TIMELIMIT              0x04\n#define LDAP_OPT_THREAD_FN_PTRS         0x05\n#define LDAP_OPT_REBIND_FN              0x06\n#define LDAP_OPT_REBIND_ARG             0x07\n#define LDAP_OPT_REFERRALS              0x08\n#define LDAP_OPT_RESTART                0x09\n#define LDAP_OPT_SSL                    0x0a\n#define LDAP_OPT_IO_FN_PTRS             0x0b\n#define LDAP_OPT_CACHE_FN_PTRS          0x0d\n#define LDAP_OPT_CACHE_STRATEGY         0x0e\n#define LDAP_OPT_CACHE_ENABLE           0x0f\n#define LDAP_OPT_REFERRAL_HOP_LIMIT     0x10\n#define LDAP_OPT_PROTOCOL_VERSION       0x11\n#define LDAP_OPT_VERSION                0x11\n#define LDAP_OPT_API_FEATURE_INFO       0x15\n#define LDAP_OPT_HOST_NAME              0x30\n#define LDAP_OPT_ERROR_NUMBER           0x31\n#define LDAP_OPT_ERROR_STRING           0x32\n#define LDAP_OPT_SERVER_ERROR           0x33\n#define LDAP_OPT_SERVER_EXT_ERROR       0x34\n#define LDAP_OPT_PING_KEEP_ALIVE        0x36\n#define LDAP_OPT_PING_WAIT_TIME         0x37\n#define LDAP_OPT_PING_LIMIT             0x38\n#define LDAP_OPT_DNSDOMAIN_NAME         0x3b\n#define LDAP_OPT_GETDSNAME_FLAGS        0x3d\n#define LDAP_OPT_HOST_REACHABLE         0x3e\n#define LDAP_OPT_PROMPT_CREDENTIALS     0x3f\n#define LDAP_OPT_TCP_KEEPALIVE          0x40\n#define LDAP_OPT_FAST_CONCURRENT_BIND   0x41\n#define LDAP_OPT_SEND_TIMEOUT           0x42\n#define LDAP_OPT_REFERRAL_CALLBACK      0x70\n#define LDAP_OPT_CLIENT_CERTIFICATE     0x80\n#define LDAP_OPT_SERVER_CERTIFICATE     0x81\n#define LDAP_OPT_AUTO_RECONNECT         0x91\n#define LDAP_OPT_SSPI_FLAGS             0x92\n#define LDAP_OPT_SSL_INFO               0x93\n#define LDAP_OPT_REF_DEREF_CONN_PER_MSG 0x94\n#define LDAP_OPT_TLS                    LDAP_OPT_SSL\n#define LDAP_OPT_TLS_INFO               LDAP_OPT_SSL_INFO\n#define LDAP_OPT_SIGN                   0x95\n#define LDAP_OPT_ENCRYPT                0x96\n#define LDAP_OPT_SASL_METHOD            0x97\n#define LDAP_OPT_AREC_EXCLUSIVE         0x98\n#define LDAP_OPT_SECURITY_CONTEXT       0x99\n#define LDAP_OPT_ROOTDSE_CACHE          0x9a\n\n#define LDAP_OPT_ON                     ((void *)1)\n#define LDAP_OPT_OFF                    ((void *)0)\n\n#define LDAP_VERSION1   1\n#define LDAP_VERSION2   2\n#define LDAP_VERSION3   3\n#define LDAP_VERSION    LDAP_VERSION2\n\n#define LDAP_MSG_ONE        0\n#define LDAP_MSG_ALL        1\n#define LDAP_MSG_RECEIVED   2\n\n#define LDAP_RES_BIND           0x61\n#define LDAP_RES_SEARCH_ENTRY   0x64\n#define LDAP_RES_SEARCH_RESULT  0x65\n#define LDAP_RES_MODIFY         0x67\n#define LDAP_RES_ADD            0x69\n#define LDAP_RES_DELETE         0x6b\n#define LDAP_RES_MODRDN         0x6d\n#define LDAP_RES_COMPARE        0x6f\n#define LDAP_RES_SESSION        0x72\n#define LDAP_RES_REFERRAL       0x73\n#define LDAP_RES_EXTENDED       0x78\n#define LDAP_RES_ANY            (-1)\n\ntypedef struct ldap\n{\n    struct\n    {\n        UINT_PTR sb_sd;\n        UCHAR Reserved1[41];\n        ULONG_PTR sb_naddr;\n        UCHAR Reserved2[24];\n    } ld_sb;\n\n    PCHAR ld_host;\n    ULONG ld_version;\n    UCHAR ld_lberoptions;\n    ULONG ld_deref;\n    ULONG ld_timelimit;\n    ULONG ld_sizelimit;\n    ULONG ld_errno;\n    PCHAR ld_matched;\n    PCHAR ld_error;\n    ULONG ld_msgid;\n    UCHAR Reserved3[25];\n    ULONG ld_cldaptries;\n    ULONG ld_cldaptimeout;\n    ULONG ld_refhoplimit;\n    ULONG ld_options;\n} LDAP, *PLDAP;\n\n#define LDAP_MOD_ADD        0x00\n#define LDAP_MOD_DELETE     0x01\n#define LDAP_MOD_REPLACE    0x02\n#define LDAP_MOD_BVALUES    0x80\n\ntypedef struct ldapmodA {\n    ULONG mod_op;\n    PCHAR mod_type;\n    union {\n        PCHAR *modv_strvals;\n        struct berval **modv_bvals;\n    } mod_vals;\n} LDAPModA, *PLDAPModA;\n\ntypedef struct ldapmodW {\n    ULONG mod_op;\n    PWCHAR mod_type;\n    union {\n        PWCHAR *modv_strvals;\n        struct berval **modv_bvals;\n    } mod_vals;\n} LDAPModW, *PLDAPModW;\n\nDECL_WINELIB_TYPE_AW(LDAPMod)\nDECL_WINELIB_TYPE_AW(PLDAPMod)\n\ntypedef struct l_timeval\n{\n    LONG tv_sec;\n    LONG tv_usec;\n} LDAP_TIMEVAL, *PLDAP_TIMEVAL;\n\ntypedef struct ldapmsg\n{\n    ULONG lm_msgid;\n    ULONG lm_msgtype;\n\n    PVOID lm_ber;\n\n    struct ldapmsg *lm_chain;\n    struct ldapmsg *lm_next;\n    ULONG lm_time;\n\n    PLDAP Connection;\n    PVOID Request;\n    ULONG lm_returncode;\n    USHORT lm_referral;\n    BOOLEAN lm_chased;\n    BOOLEAN lm_eom;\n    BOOLEAN ConnectionReferenced;\n} LDAPMessage, *PLDAPMessage;\n\n#define LAPI_MAJOR_VER1     1\n#define LAPI_MINOR_VER1     1\n\ntypedef struct ldap_version_info\n{\n    ULONG lv_size;\n    ULONG lv_major;\n    ULONG lv_minor;\n} LDAP_VERSION_INFO, *PLDAP_VERSION_INFO;\n\ntypedef struct berval\n{\n    ULONG bv_len;\n    PCHAR bv_val;\n} LDAP_BERVAL, *PLDAP_BERVAL, BERVAL, *PBERVAL, BerValue;\n\ntypedef struct ldapcontrolA\n{\n    PCHAR ldctl_oid;\n    struct berval ldctl_value;\n    BOOLEAN ldctl_iscritical;\n} LDAPControlA, *PLDAPControlA;\n\ntypedef struct ldapcontrolW\n{\n    PWCHAR ldctl_oid;\n    struct berval ldctl_value;\n    BOOLEAN ldctl_iscritical;\n} LDAPControlW, *PLDAPControlW;\n\nDECL_WINELIB_TYPE_AW(LDAPControl)\nDECL_WINELIB_TYPE_AW(PLDAPControl)\n\ntypedef struct ldapvlvinfo\n{\n    int ldvlv_version;\n    ULONG ldvlv_before_count;\n    ULONG ldvlv_after_count;\n    ULONG ldvlv_offset;\n    ULONG ldvlv_count;\n    PBERVAL ldvlv_attrvalue;\n    PBERVAL ldvlv_context;\n    VOID *ldvlv_extradata;\n} LDAPVLVInfo, *PLDAPVLVInfo;\n\ntypedef struct ldapsearch LDAPSearch, *PLDAPSearch;\n\ntypedef struct ldapsortkeyA\n{\n    PCHAR sk_attrtype;\n    PCHAR sk_matchruleoid;\n    BOOLEAN sk_reverseorder;\n} LDAPSortKeyA, *PLDAPSortKeyA;\n\ntypedef struct ldapsortkeyW\n{\n    PWCHAR sk_attrtype;\n    PWCHAR sk_matchruleoid;\n    BOOLEAN sk_reverseorder;\n} LDAPSortKeyW, *PLDAPSortKeyW;\n\nDECL_WINELIB_TYPE_AW(LDAPSortKey)\nDECL_WINELIB_TYPE_AW(PLDAPSortKey)\n\n#define LDAP_API_INFO_VERSION     1\n\ntypedef struct ldapapiinfoA\n{\n    int ldapai_info_version;\n    int ldapai_api_version;\n    int ldapai_protocol_version;\n    char **ldapai_extensions;\n    char *ldapai_vendor_name;\n    int ldapai_vendor_version;\n} LDAPAPIInfoA;\n\ntypedef struct ldapapiinfoW\n{\n    int ldapai_info_version;\n    int ldapai_api_version;\n    int ldapai_protocol_version;\n    PWCHAR *ldapai_extensions;\n    PWCHAR ldapai_vendor_name;\n    int ldapai_vendor_version;\n} LDAPAPIInfoW;\n\nDECL_WINELIB_TYPE_AW(LDAPAPIInfo)\n\n#define LDAP_FEATURE_INFO_VERSION    1\n\ntypedef struct ldap_apifeature_infoA\n{\n    int ldapaif_info_version;\n    char *ldapaif_name;\n    int ldapaif_version;\n} LDAPAPIFeatureInfoA;\n\ntypedef struct ldap_apifeature_infoW\n{\n    int ldapaif_info_version;\n    PWCHAR ldapaif_name;\n    int ldapaif_version;\n} LDAPAPIFeatureInfoW;\n\nDECL_WINELIB_TYPE_AW(LDAPAPIFeatureInfo)\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nLDAP * CDECL cldap_openA(PCHAR,ULONG);\nLDAP * CDECL cldap_openW(PWCHAR,ULONG);\n#define    cldap_open WINELIB_NAME_AW(cldap_open)\nULONG CDECL ldap_abandon(LDAP*,ULONG);\nULONG CDECL ldap_addA(LDAP*,PCHAR,LDAPModA*[]);\nULONG CDECL ldap_addW(LDAP*,PWCHAR,LDAPModW*[]);\n#define    ldap_add WINELIB_NAME_AW(ldap_add)\nULONG CDECL ldap_add_extA(LDAP*,PCHAR,LDAPModA*[],PLDAPControlA*,PLDAPControlA*,ULONG*);\nULONG CDECL ldap_add_extW(LDAP*,PWCHAR,LDAPModW*[],PLDAPControlW*,PLDAPControlW*,ULONG*);\n#define    ldap_add_ext WINELIB_NAME_AW(ldap_add_ext)\nULONG CDECL ldap_add_ext_sA(LDAP*,PCHAR,LDAPModA*[],PLDAPControlA*,PLDAPControlA*);\nULONG CDECL ldap_add_ext_sW(LDAP*,PWCHAR,LDAPModW*[],PLDAPControlW*,PLDAPControlW*);\n#define    ldap_add_ext_s WINELIB_NAME_AW(ldap_add_ext_s)\nULONG CDECL ldap_add_sA(LDAP*,PCHAR,LDAPModA*[]);\nULONG CDECL ldap_add_sW(LDAP*,PWCHAR,LDAPModW*[]);\n#define    ldap_add_s WINELIB_NAME_AW(ldap_add_s)\nULONG CDECL ldap_bindA(LDAP*,PCHAR,PCHAR,ULONG);\nULONG CDECL ldap_bindW(LDAP*,PWCHAR,PWCHAR,ULONG);\n#define    ldap_bind WINELIB_NAME_AW(ldap_bind)\nULONG CDECL ldap_bind_sA(LDAP*,PCHAR,PCHAR,ULONG);\nULONG CDECL ldap_bind_sW(LDAP*,PWCHAR,PWCHAR,ULONG);\n#define    ldap_bind_s WINELIB_NAME_AW(ldap_bind_s)\nULONG CDECL ldap_check_filterA(LDAP*,PCHAR);\nULONG CDECL ldap_check_filterW(LDAP*,PWCHAR);\n#define    ldap_check_filter WINELIB_NAME_AW(ldap_check_filter)\nULONG CDECL ldap_cleanup(HANDLE);\nULONG CDECL ldap_close_extended_op(LDAP*,ULONG);\nLDAP* CDECL ldap_conn_from_msg(LDAP*,LDAPMessage*);\nULONG CDECL ldap_compareA(LDAP*,PCHAR,PCHAR,PCHAR);\nULONG CDECL ldap_compareW(LDAP*,PWCHAR,PWCHAR,PWCHAR);\n#define    ldap_compare WINELIB_NAME_AW(ldap_compare)\nULONG CDECL ldap_compare_extA(LDAP*,PCHAR,PCHAR,PCHAR,struct berval*,PLDAPControlA*,PLDAPControlA*,ULONG*);\nULONG CDECL ldap_compare_extW(LDAP*,PWCHAR,PWCHAR,PWCHAR,struct berval*,PLDAPControlW*,PLDAPControlW*,ULONG*);\n#define    ldap_compare_ext WINELIB_NAME_AW(ldap_compare_ext)\nULONG CDECL ldap_compare_ext_sA(LDAP*,PCHAR,PCHAR,PCHAR,struct berval*,PLDAPControlA*,PLDAPControlA*);\nULONG CDECL ldap_compare_ext_sW(LDAP*,PWCHAR,PWCHAR,PWCHAR,struct berval*,PLDAPControlW*,PLDAPControlW*);\n#define    ldap_compare_ext_s WINELIB_NAME_AW(ldap_compare_ext_s)\nULONG CDECL ldap_compare_sA(LDAP*,PCHAR,PCHAR,PCHAR);\nULONG CDECL ldap_compare_sW(LDAP*,PWCHAR,PWCHAR,PWCHAR);\n#define    ldap_compare_s WINELIB_NAME_AW(ldap_compare_s)\nULONG CDECL ldap_connect(LDAP*,struct l_timeval*);\nULONG CDECL ldap_control_freeA(LDAPControlA*);\nULONG CDECL ldap_control_freeW(LDAPControlW*);\n#define    ldap_control_free WINELIB_NAME_AW(ldap_control_free)\nULONG CDECL ldap_controls_freeA(LDAPControlA**);\nULONG CDECL ldap_controls_freeW(LDAPControlW**);\n#define    ldap_controls_free WINELIB_NAME_AW(ldap_controls_free)\nULONG CDECL ldap_count_entries(LDAP*,LDAPMessage*);\nULONG CDECL ldap_count_references(LDAP*,LDAPMessage*);\nULONG CDECL ldap_count_values_len(struct berval**);\nULONG CDECL ldap_count_valuesA(PCHAR*);\nULONG CDECL ldap_count_valuesW(PWCHAR*);\n#define    ldap_count_values WINELIB_NAME_AW(ldap_count_values)\nULONG CDECL ldap_create_page_controlA(PLDAP,ULONG,struct berval*,UCHAR,PLDAPControlA*);\nULONG CDECL ldap_create_page_controlW(PLDAP,ULONG,struct berval*,UCHAR,PLDAPControlW*);\n#define    ldap_create_page_control WINELIB_NAME_AW(ldap_create_page_control)\nULONG CDECL ldap_create_sort_controlA(PLDAP,PLDAPSortKeyA*,UCHAR,PLDAPControlA*);\nULONG CDECL ldap_create_sort_controlW(PLDAP,PLDAPSortKeyW*,UCHAR,PLDAPControlW*);\n#define    ldap_create_sort_control WINELIB_NAME_AW(ldap_create_sort_control)\nINT CDECL  ldap_create_vlv_controlA(PLDAP,PLDAPVLVInfo,UCHAR,PLDAPControlA*);\nINT CDECL  ldap_create_vlv_controlW(PLDAP,PLDAPVLVInfo,UCHAR,PLDAPControlW*);\n#define    ldap_create_vlv_control WINELIB_NAME_AW(ldap_create_vlv_control)\nULONG CDECL ldap_deleteA(LDAP*,PCHAR);\nULONG CDECL ldap_deleteW(LDAP*,PWCHAR);\n#define    ldap_delete WINELIB_NAME_AW(ldap_delete)\nULONG CDECL ldap_delete_extA(LDAP*,PCHAR,PLDAPControlA*,PLDAPControlA*,ULONG*);\nULONG CDECL ldap_delete_extW(LDAP*,PWCHAR,PLDAPControlW*,PLDAPControlW*,ULONG*);\n#define    ldap_delete_ext WINELIB_NAME_AW(ldap_delete_ext)\nULONG CDECL ldap_delete_ext_sA(LDAP*,PCHAR,PLDAPControlA*,PLDAPControlA*);\nULONG CDECL ldap_delete_ext_sW(LDAP*,PWCHAR,PLDAPControlW*,PLDAPControlW*);\n#define    ldap_delete_ext_s WINELIB_NAME_AW(ldap_delete_ext_s)\nULONG CDECL ldap_delete_sA(LDAP*,PCHAR);\nULONG CDECL ldap_delete_sW(LDAP*,PWCHAR);\n#define    ldap_delete_s WINELIB_NAME_AW(ldap_delete_s)\nPCHAR CDECL ldap_dn2ufnA(PCHAR);\nPWCHAR CDECL ldap_dn2ufnW(PWCHAR);\n#define    ldap_dn2ufn WINELIB_NAME_AW(ldap_dn2ufn)\nULONG CDECL ldap_encode_sort_controlA(PLDAP,PLDAPSortKeyA*,PLDAPControlA,BOOLEAN);\nULONG CDECL ldap_encode_sort_controlW(PLDAP,PLDAPSortKeyW*,PLDAPControlW,BOOLEAN);\n#define    ldap_encode_sort_control WINELIB_NAME_AW(ldap_encode_sort_control)\nPCHAR CDECL ldap_err2stringA(ULONG);\nPWCHAR CDECL ldap_err2stringW(ULONG);\n#define    ldap_err2string WINELIB_NAME_AW(ldap_err2string)\nULONG CDECL ldap_escape_filter_elementA(PCHAR,ULONG,PCHAR,ULONG);\nULONG CDECL ldap_escape_filter_elementW(PCHAR,ULONG,PWCHAR,ULONG);\n#define    ldap_escape_filter_element WINELIB_NAME_AW(ldap_escape_filter_element)\nPCHAR* CDECL ldap_explode_dnA(PCHAR,ULONG);\nPWCHAR* CDECL ldap_explode_dnW(PWCHAR,ULONG);\n#define    ldap_explode_dn WINELIB_NAME_AW(ldap_explode_dn)\nULONG CDECL ldap_extended_operationA(LDAP*,PCHAR,struct berval*,PLDAPControlA*,PLDAPControlA*,ULONG*);\nULONG CDECL ldap_extended_operationW(LDAP*,PWCHAR,struct berval*,PLDAPControlW*,PLDAPControlW*,ULONG*);\n#define    ldap_extended_operation WINELIB_NAME_AW(ldap_extended_operation)\nULONG CDECL ldap_extended_operation_sA(LDAP*,PCHAR,struct berval*,PLDAPControlA*,PLDAPControlA*,PCHAR*,struct berval**);\nULONG CDECL ldap_extended_operation_sW(LDAP*,PWCHAR,struct berval*,PLDAPControlW*,PLDAPControlW*,PWCHAR*,struct berval**);\n#define    ldap_extended_operation_s WINELIB_NAME_AW(ldap_extended_operation_s)\nPCHAR CDECL ldap_first_attributeA(LDAP*,LDAPMessage*,BerElement**);\nPWCHAR CDECL ldap_first_attributeW(LDAP*,LDAPMessage*,BerElement**);\n#define    ldap_first_attribute WINELIB_NAME_AW(ldap_first_attribute)\nLDAPMessage* CDECL ldap_first_entry(LDAP*,LDAPMessage*);\nLDAPMessage* CDECL ldap_first_reference(LDAP*,LDAPMessage*);\nULONG CDECL ldap_free_controlsA(LDAPControlA**);\nULONG CDECL ldap_free_controlsW(LDAPControlW**);\n#define    ldap_free_controls WINELIB_NAME_AW(ldap_free_controls)\nPCHAR CDECL ldap_get_dnA(LDAP*,LDAPMessage*);\nPWCHAR CDECL ldap_get_dnW(LDAP*,LDAPMessage*);\n#define    ldap_get_dn WINELIB_NAME_AW(ldap_get_dn)\nULONG CDECL ldap_get_next_page(PLDAP,PLDAPSearch,ULONG,ULONG*);\nULONG CDECL ldap_get_next_page_s(PLDAP,PLDAPSearch,struct l_timeval*,ULONG,ULONG*,LDAPMessage**);\nULONG CDECL ldap_get_optionA(LDAP*,int,void*);\nULONG CDECL ldap_get_optionW(LDAP*,int,void*);\n#define    ldap_get_option WINELIB_NAME_AW(ldap_get_option)\nULONG CDECL ldap_get_paged_count(LDAP*,PLDAPSearch,ULONG*,LDAPMessage*);\nPCHAR* CDECL ldap_get_valuesA(LDAP*,LDAPMessage*,PCHAR);\nPWCHAR* CDECL ldap_get_valuesW(LDAP*,LDAPMessage*,PWCHAR);\n#define    ldap_get_values WINELIB_NAME_AW(ldap_get_values)\nstruct berval ** CDECL ldap_get_values_lenA(LDAP*,LDAPMessage*,PCHAR);\nstruct berval ** CDECL ldap_get_values_lenW(LDAP*,LDAPMessage*,PWCHAR);\n#define    ldap_get_values_len WINELIB_NAME_AW(ldap_get_values_len)\nLDAP* CDECL ldap_initA(const PCHAR,ULONG);\nLDAP* CDECL ldap_initW(const PWCHAR,ULONG);\n#define    ldap_init WINELIB_NAME_AW(ldap_init)\nVOID CDECL ldap_memfreeA(PCHAR);\nVOID CDECL ldap_memfreeW(PWCHAR);\n#define    ldap_memfree WINELIB_NAME_AW(ldap_memfree)\nULONG CDECL ldap_modifyA(LDAP*,PCHAR,LDAPModA*[]);\nULONG CDECL ldap_modifyW(LDAP*,PWCHAR,LDAPModW*[]);\n#define    ldap_modify WINELIB_NAME_AW(ldap_modify)\nULONG CDECL ldap_modify_extA(LDAP*,PCHAR,LDAPModA*[],PLDAPControlA*,PLDAPControlA*,ULONG*);\nULONG CDECL ldap_modify_extW(LDAP*,PWCHAR,LDAPModW*[],PLDAPControlW*,PLDAPControlW*,ULONG*);\n#define    ldap_modify_ext WINELIB_NAME_AW(ldap_modify_ext)\nULONG CDECL ldap_modify_ext_sA(LDAP*,PCHAR,LDAPModA*[],PLDAPControlA*,PLDAPControlA*);\nULONG CDECL ldap_modify_ext_sW(LDAP*,PWCHAR,LDAPModW*[],PLDAPControlW*,PLDAPControlW*);\n#define    ldap_modify_ext_s WINELIB_NAME_AW(ldap_modify_ext_s)\nULONG CDECL ldap_modify_sA(LDAP*,PCHAR,LDAPModA*[]);\nULONG CDECL ldap_modify_sW(LDAP*,PWCHAR,LDAPModW*[]);\n#define    ldap_modify_s WINELIB_NAME_AW(ldap_modify_s)\nULONG CDECL ldap_modrdnA(LDAP*,PCHAR,PCHAR);\nULONG CDECL ldap_modrdnW(LDAP*,PWCHAR,PWCHAR);\n#define    ldap_modrdn WINELIB_NAME_AW(ldap_modrdn)\nULONG CDECL ldap_modrdn2A(LDAP*,PCHAR,PCHAR,INT);\nULONG CDECL ldap_modrdn2W(LDAP*,PWCHAR,PWCHAR,INT);\n#define    ldap_modrdn2 WINELIB_NAME_AW(ldap_modrdn2)\nULONG CDECL ldap_modrdn2_sA(LDAP*,PCHAR,PCHAR,INT);\nULONG CDECL ldap_modrdn2_sW(LDAP*,PWCHAR,PWCHAR,INT);\n#define    ldap_modrdn2_s WINELIB_NAME_AW(ldap_modrdn2_s)\nULONG CDECL ldap_modrdn_sA(LDAP*,PCHAR,PCHAR);\nULONG CDECL ldap_modrdn_sW(LDAP*,PWCHAR,PWCHAR);\n#define    ldap_modrdn_s WINELIB_NAME_AW(ldap_modrdn_s)\nULONG CDECL ldap_msgfree(LDAPMessage*);\nPCHAR CDECL ldap_next_attributeA(LDAP*,LDAPMessage*,BerElement*);\nPWCHAR CDECL ldap_next_attributeW(LDAP*,LDAPMessage*,BerElement*);\n#define    ldap_next_attribute WINELIB_NAME_AW(ldap_next_attribute)\nLDAPMessage * CDECL ldap_next_entry(LDAP*,LDAPMessage*);\nLDAP * CDECL ldap_openA(PCHAR,ULONG);\nLDAP * CDECL ldap_openW(PWCHAR,ULONG);\n#define    ldap_open WINELIB_NAME_AW(ldap_open)\nULONG CDECL ldap_parse_extended_resultA(LDAP*,LDAPMessage*,PCHAR*,struct berval**,BOOLEAN);\nULONG CDECL ldap_parse_extended_resultW(LDAP*,LDAPMessage*,PWCHAR*,struct berval**,BOOLEAN);\n#define    ldap_parse_extended_result WINELIB_NAME_AW(ldap_parse_extended_result)\nULONG CDECL ldap_parse_page_controlA(LDAP*,PLDAPControlA*,ULONG*,struct berval**);\nULONG CDECL ldap_parse_page_controlW(LDAP*,PLDAPControlW*,ULONG*,struct berval**);\n#define    ldap_parse_page_control WINELIB_NAME_AW(ldap_parse_page_control)\nULONG CDECL ldap_parse_referenceA(LDAP*,LDAPMessage*,PCHAR**);\nULONG CDECL ldap_parse_referenceW(LDAP*,LDAPMessage*,PWCHAR**);\n#define    ldap_parse_reference WINELIB_NAME_AW(ldap_parse_reference)\nULONG CDECL ldap_result2error(LDAP*,LDAPMessage*,ULONG);\nULONG CDECL ldap_parse_resultA(LDAP*,LDAPMessage*,ULONG*,PCHAR*,PCHAR*,PCHAR**,PLDAPControlA**,BOOLEAN);\nULONG CDECL ldap_parse_resultW(LDAP*,LDAPMessage*,ULONG*,PWCHAR*,PWCHAR*,PWCHAR**,PLDAPControlW**,BOOLEAN);\n#define    ldap_parse_result WINELIB_NAME_AW(ldap_parse_result)\nULONG CDECL ldap_parse_sort_controlA(LDAP*,PLDAPControlA*,ULONG*,PCHAR*);\nULONG CDECL ldap_parse_sort_controlW(LDAP*,PLDAPControlW*,ULONG*,PWCHAR*);\n#define    ldap_parse_sort_control WINELIB_NAME_AW(ldap_parse_sort_control)\nINT CDECL ldap_parse_vlv_controlA(PLDAP,PLDAPControlA*,PULONG,PULONG,PBERVAL*,PINT);\nINT CDECL ldap_parse_vlv_controlW(PLDAP,PLDAPControlW*,PULONG,PULONG,PBERVAL*,PINT);\n#define    ldap_parse_vlv_control WINELIB_NAME_AW(ldap_parse_vlv_control)\nvoid CDECL ldap_perror(LDAP*,const PCHAR);\nULONG CDECL ldap_rename_extA(LDAP*,PCHAR,PCHAR,PCHAR,INT,PLDAPControlA*,PLDAPControlA*,ULONG*);\nULONG CDECL ldap_rename_extW(LDAP*,PWCHAR,PWCHAR,PWCHAR,INT,PLDAPControlW*,PLDAPControlW*,ULONG*);\n#define    ldap_rename_ext WINELIB_NAME_AW(ldap_rename_ext)\nULONG CDECL ldap_rename_ext_sA(LDAP*,PCHAR,PCHAR,PCHAR,INT,PLDAPControlA*,PLDAPControlA*);\nULONG CDECL ldap_rename_ext_sW(LDAP*,PWCHAR,PWCHAR,PWCHAR,INT,PLDAPControlW*,PLDAPControlW*);\n#define    ldap_rename_ext_s WINELIB_NAME_AW(ldap_rename_ext_s)\nULONG CDECL ldap_result(LDAP*,ULONG,ULONG,struct l_timeval*,LDAPMessage**);\nULONG CDECL ldap_result2error(LDAP*,LDAPMessage*,ULONG);\nULONG CDECL ldap_sasl_bindA(LDAP*,const PCHAR,const PCHAR,const BERVAL*,PLDAPControlA*,PLDAPControlA*,int*);\nULONG CDECL ldap_sasl_bindW(LDAP*,const PWCHAR,const PWCHAR,const BERVAL*,PLDAPControlW*,PLDAPControlW*,int*);\n#define    ldap_sasl_bind WINELIB_NAME_AW(ldap_sasl_bind)\nULONG CDECL ldap_sasl_bind_sA(LDAP*,const PCHAR,const PCHAR,const BERVAL*,PLDAPControlA*,PLDAPControlA*,PBERVAL*);\nULONG CDECL ldap_sasl_bind_sW(LDAP*,const PWCHAR,const PWCHAR,const BERVAL*,PLDAPControlW*,PLDAPControlW*,PBERVAL*);\n#define    ldap_sasl_bind_s WINELIB_NAME_AW(ldap_sasl_bind_s)\nULONG CDECL ldap_simple_bindA(LDAP*,PCHAR,PCHAR);\nULONG CDECL ldap_simple_bindW(LDAP*,PWCHAR,PWCHAR);\n#define    ldap_simple_bind WINELIB_NAME_AW(ldap_simple_bind)\nULONG CDECL ldap_simple_bind_sA(LDAP*,PCHAR,PCHAR);\nULONG CDECL ldap_simple_bind_sW(LDAP*,PWCHAR,PWCHAR);\n#define    ldap_simple_bind_s WINELIB_NAME_AW(ldap_simple_bind_s)\nULONG CDECL ldap_search_abandon_page(PLDAP,PLDAPSearch);\nULONG CDECL ldap_searchA(LDAP*,PCHAR,ULONG,PCHAR,PCHAR[],ULONG);\nULONG CDECL ldap_searchW(LDAP*,PWCHAR,ULONG,PWCHAR,PCHAR[],ULONG);\n#define    ldap_search WINELIB_NAME_AW(ldap_search)\nULONG CDECL ldap_search_extA(LDAP*,PCHAR,ULONG,PCHAR,PCHAR[],ULONG,PLDAPControlA*,\n    PLDAPControlA*,ULONG,ULONG,ULONG*);\nULONG CDECL ldap_search_extW(LDAP*,PWCHAR,ULONG,PWCHAR,PWCHAR[],ULONG,PLDAPControlW*,\n    PLDAPControlW*,ULONG,ULONG,ULONG*);\n#define    ldap_search_ext WINELIB_NAME_AW(ldap_search_ext)\nULONG CDECL ldap_search_ext_sA(LDAP*,PCHAR,ULONG,PCHAR,PCHAR[],ULONG,PLDAPControlA*,\n    PLDAPControlA*,struct l_timeval*,ULONG,LDAPMessage**);\nULONG CDECL ldap_search_ext_sW(LDAP*,PWCHAR,ULONG,PWCHAR,PWCHAR[],ULONG,PLDAPControlW*,\n    PLDAPControlW*,struct l_timeval*,ULONG,LDAPMessage**);\n#define    ldap_search_ext_s WINELIB_NAME_AW(ldap_search_ext_s)\nPLDAPSearch CDECL ldap_search_init_pageA(PLDAP,PCHAR,ULONG,PCHAR,PCHAR[],ULONG,PLDAPControlA*,\n    PLDAPControlA*,ULONG,ULONG,PLDAPSortKeyA*);\nPLDAPSearch CDECL ldap_search_init_pageW(PLDAP,PWCHAR,ULONG,PWCHAR,PWCHAR[],ULONG,PLDAPControlW*,\n    PLDAPControlW*,ULONG,ULONG, PLDAPSortKeyW*);\n#define    ldap_search_init_page WINELIB_NAME_AW(ldap_search_init_page)\nULONG CDECL ldap_search_sA(LDAP*,PCHAR,ULONG,PCHAR,PCHAR[],ULONG,LDAPMessage**);\nULONG CDECL ldap_search_sW(LDAP*,PWCHAR,ULONG,PWCHAR,PWCHAR[],ULONG,LDAPMessage**);\n#define    ldap_search_s WINELIB_NAME_AW(ldap_search_s)\nULONG CDECL ldap_search_stA(LDAP*,const PCHAR,ULONG,const PCHAR,PCHAR[],ULONG,\n    struct l_timeval*,LDAPMessage**);\nULONG CDECL ldap_search_stW(LDAP*,const PWCHAR,ULONG,const PWCHAR,PWCHAR[],ULONG,\n    struct l_timeval*,LDAPMessage**);\n#define    ldap_search_st WINELIB_NAME_AW(ldap_search_st)\nULONG CDECL ldap_set_optionA(LDAP*,int,void*);\nULONG CDECL ldap_set_optionW(LDAP*,int,void*);\n#define    ldap_set_option WINELIB_NAME_AW(ldap_set_option)\nLDAP * CDECL ldap_sslinitA(PCHAR,ULONG,int);\nLDAP * CDECL ldap_sslinitW(PWCHAR,ULONG,int);\n#define    ldap_sslinit WINELIB_NAME_AW(ldap_sslinit)\nULONG CDECL ldap_start_tls_sA(LDAP*,PULONG,LDAPMessage**,PLDAPControlA*,PLDAPControlA*);\nULONG CDECL ldap_start_tls_sW(LDAP*,PULONG,LDAPMessage**,PLDAPControlW*,PLDAPControlW*);\n#define    ldap_start_tls_s WINELIB_NAME_AW(ldap_start_tls_s)\nULONG CDECL ldap_startup(PLDAP_VERSION_INFO,HANDLE*);\nBOOLEAN CDECL ldap_stop_tls_s(LDAP*);\nULONG CDECL ldap_ufn2dnA(PCHAR,PCHAR*);\nULONG CDECL ldap_ufn2dnW(PWCHAR,PWCHAR*);\n#define    ldap_ufn2dn WINELIB_NAME_AW(ldap_ufn2dn)\nULONG CDECL ldap_unbind(LDAP*);\nULONG CDECL ldap_unbind_s(LDAP*);\nULONG CDECL ldap_value_freeA(PCHAR*);\nULONG CDECL ldap_value_freeW(PWCHAR*);\n#define    ldap_value_free WINELIB_NAME_AW(ldap_value_free)\nULONG CDECL ldap_value_free_len(struct berval**);\n\nBerElement* CDECL ber_alloc_t(INT);\nBERVAL* CDECL ber_bvdup(BERVAL*);\nvoid CDECL ber_bvecfree(PBERVAL*);\nvoid CDECL ber_bvfree(BERVAL*);\nULONG CDECL ber_first_element(BerElement*,ULONG*,CHAR**);\nINT CDECL ber_flatten(BerElement*,PBERVAL*);\nvoid CDECL ber_free(BerElement*,INT);\nBerElement* CDECL ber_init(BERVAL*);\nULONG CDECL ber_next_element(BerElement*,ULONG*,CHAR*);\nULONG CDECL ber_peek_tag(BerElement*,ULONG*);\nINT WINAPIV ber_printf(BerElement*,PCHAR,...);\nULONG CDECL ber_skip_tag(BerElement*,ULONG*);\nINT WINAPIV ber_scanf(BerElement*,PCHAR,...);\n\nULONG CDECL LdapGetLastError(void);\nULONG CDECL LdapMapErrorToWin32(ULONG);\nint CDECL LdapUnicodeToUTF8(LPCWSTR,int,LPSTR,int);\nint CDECL LdapUTF8ToUnicode(LPCSTR,int,LPWSTR,int);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* __WINE_WINLDAP_H */\n"
  },
  {
    "path": "wine/windows/winnetwk.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n\n#ifndef _WINNETWK_H_\n#define _WINNETWK_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*\n * Network types\n */\n\n#define WNNC_NET_MSNET      0x00010000\n#define WNNC_NET_LANMAN     0x00020000\n#define WNNC_NET_NETWARE    0x00030000\n#define WNNC_NET_VINES      0x00040000\n#define WNNC_NET_10NET      0x00050000\n#define WNNC_NET_LOCUS      0x00060000\n#define WNNC_NET_SUN_PC_NFS 0x00070000\n#define WNNC_NET_LANSTEP    0x00080000\n#define WNNC_NET_9TILES     0x00090000\n#define WNNC_NET_LANTASTIC  0x000A0000\n#define WNNC_NET_AS400      0x000B0000\n#define WNNC_NET_FTP_NFS    0x000C0000\n#define WNNC_NET_PATHWORKS  0x000D0000\n#define WNNC_NET_LIFENET    0x000E0000\n#define WNNC_NET_POWERLAN   0x000F0000\n#define WNNC_NET_BWNFS      0x00100000\n#define WNNC_NET_COGENT     0x00110000\n#define WNNC_NET_FARALLON   0x00120000\n#define WNNC_NET_APPLETALK  0x00130000\n#define WNNC_NET_INTERGRAPH 0x00140000\n\n/*\n *  Network resources\n */\n\n#define RESOURCE_CONNECTED      0x00000001\n#define RESOURCE_GLOBALNET      0x00000002\n#define RESOURCE_REMEMBERED     0x00000003\n#define RESOURCE_RECENT         0x00000004\n#define RESOURCE_CONTEXT        0x00000005\n\n#define RESOURCETYPE_ANY        0x00000000\n#define RESOURCETYPE_DISK       0x00000001\n#define RESOURCETYPE_PRINT      0x00000002\n#define RESOURCETYPE_RESERVED   0x00000008\n#define RESOURCETYPE_UNKNOWN    0xFFFFFFFF\n\n#define RESOURCEUSAGE_CONNECTABLE   0x00000001\n#define RESOURCEUSAGE_CONTAINER     0x00000002\n#define RESOURCEUSAGE_NOLOCALDEVICE 0x00000004\n#define RESOURCEUSAGE_SIBLING       0x00000008\n#define RESOURCEUSAGE_ATTACHED      0x00000010\n#define RESOURCEUSAGE_ALL           (RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED)\n#define RESOURCEUSAGE_RESERVED      0x80000000\n\n#define RESOURCEDISPLAYTYPE_GENERIC        0x00000000\n#define RESOURCEDISPLAYTYPE_DOMAIN         0x00000001\n#define RESOURCEDISPLAYTYPE_SERVER         0x00000002\n#define RESOURCEDISPLAYTYPE_SHARE          0x00000003\n#define RESOURCEDISPLAYTYPE_FILE           0x00000004\n#define RESOURCEDISPLAYTYPE_GROUP          0x00000005\n#define RESOURCEDISPLAYTYPE_NETWORK        0x00000006\n#define RESOURCEDISPLAYTYPE_ROOT           0x00000007\n#define RESOURCEDISPLAYTYPE_SHAREADMIN     0x00000008\n#define RESOURCEDISPLAYTYPE_DIRECTORY      0x00000009\n#define RESOURCEDISPLAYTYPE_TREE           0x0000000A\n\ntypedef struct {\n\tDWORD\tdwScope;\n\tDWORD\tdwType;\n\tDWORD\tdwDisplayType;\n\tDWORD\tdwUsage;\n\tLPSTR\tlpLocalName;\n\tLPSTR\tlpRemoteName;\n\tLPSTR\tlpComment ;\n\tLPSTR\tlpProvider;\n} NETRESOURCEA,*LPNETRESOURCEA;\n\ntypedef struct {\n\tDWORD\tdwScope;\n\tDWORD\tdwType;\n\tDWORD\tdwDisplayType;\n\tDWORD\tdwUsage;\n\tLPWSTR\tlpLocalName;\n\tLPWSTR\tlpRemoteName;\n\tLPWSTR\tlpComment ;\n\tLPWSTR\tlpProvider;\n} NETRESOURCEW,*LPNETRESOURCEW;\n\nDECL_WINELIB_TYPE_AW(NETRESOURCE)\nDECL_WINELIB_TYPE_AW(LPNETRESOURCE)\n\n\n/*\n *  Network connections\n */\n\n#define NETPROPERTY_PERSISTENT       1\n\n#define CONNECT_UPDATE_PROFILE      0x00000001\n#define CONNECT_UPDATE_RECENT       0x00000002\n#define CONNECT_TEMPORARY           0x00000004\n#define CONNECT_INTERACTIVE         0x00000008\n#define CONNECT_PROMPT              0x00000010\n#define CONNECT_NEED_DRIVE          0x00000020\n#define CONNECT_REFCOUNT            0x00000040\n#define CONNECT_REDIRECT            0x00000080\n#define CONNECT_LOCALDRIVE          0x00000100\n#define CONNECT_CURRENT_MEDIA       0x00000200\n\nDWORD WINAPI WNetAddConnectionA(LPCSTR,LPCSTR,LPCSTR);\nDWORD WINAPI WNetAddConnectionW(LPCWSTR,LPCWSTR,LPCWSTR);\n#define      WNetAddConnection WINELIB_NAME_AW(WNetAddConnection)\nDWORD WINAPI WNetAddConnection2A(LPNETRESOURCEA,LPCSTR,LPCSTR,DWORD);\nDWORD WINAPI WNetAddConnection2W(LPNETRESOURCEW,LPCWSTR,LPCWSTR,DWORD);\n#define      WNetAddConnection2 WINELIB_NAME_AW(WNetAddConnection2)\nDWORD WINAPI WNetAddConnection3A(HWND,LPNETRESOURCEA,LPCSTR,LPCSTR,DWORD);\nDWORD WINAPI WNetAddConnection3W(HWND,LPNETRESOURCEW,LPCWSTR,LPCWSTR,DWORD);\n#define      WNetAddConnection3 WINELIB_NAME_AW(WNetAddConnection3)\nDWORD WINAPI WNetCancelConnectionA(LPCSTR,BOOL);\nDWORD WINAPI WNetCancelConnectionW(LPCWSTR,BOOL);\n#define      WNetCancelConnection WINELIB_NAME_AW(WNetCancelConnection)\nDWORD WINAPI WNetCancelConnection2A(LPCSTR,DWORD,BOOL);\nDWORD WINAPI WNetCancelConnection2W(LPCWSTR,DWORD,BOOL);\n#define      WNetCancelConnection2 WINELIB_NAME_AW(WNetCancelConnection2)\nDWORD WINAPI WNetGetConnectionA(LPCSTR,LPSTR,LPDWORD);\nDWORD WINAPI WNetGetConnectionW(LPCWSTR,LPWSTR,LPDWORD);\n#define      WNetGetConnection WINELIB_NAME_AW(WNetGetConnection)\nDWORD WINAPI WNetGetLastErrorA(LPDWORD,LPSTR,DWORD,LPSTR,DWORD);\nDWORD WINAPI WNetGetLastErrorW(LPDWORD,LPWSTR,DWORD,LPWSTR,DWORD);\n#define      WNetGetLastError WINELIB_NAME_AW(WNetGetLastError)\nDWORD WINAPI WNetRestoreConnectionA(HWND,LPCSTR);\nDWORD WINAPI WNetRestoreConnectionW(HWND,LPCWSTR);\n#define      WNetRestoreConnection WINELIB_NAME_AW(WNetRestoreConnection)\nDWORD WINAPI WNetUseConnectionA(HWND,LPNETRESOURCEA,LPCSTR,LPCSTR,DWORD,LPSTR,LPDWORD,LPDWORD);\nDWORD WINAPI WNetUseConnectionW(HWND,LPNETRESOURCEW,LPCWSTR,LPCWSTR,DWORD,LPWSTR,LPDWORD,LPDWORD);\n#define      WNetUseConnection WINELIB_NAME_AW(WNetUseConnection)\nDWORD WINAPI WNetSetConnectionA(LPCSTR,DWORD,LPVOID);\nDWORD WINAPI WNetSetConnectionW(LPCWSTR,DWORD,LPVOID);\n#define      WNetSetConnection WINELIB_NAME_AW(WNetSetConnection)\n\n/*\n *  Network connection dialogs\n */\n\ntypedef struct {\n    DWORD cbStructure;       /* size of this structure in bytes */\n    HWND hwndOwner;          /* owner window for the dialog */\n    LPNETRESOURCEA lpConnRes;/* Requested Resource info    */\n    DWORD dwFlags;           /* flags (see below) */\n    DWORD dwDevNum;          /* number of devices connected to */\n} CONNECTDLGSTRUCTA, *LPCONNECTDLGSTRUCTA;\ntypedef struct {\n    DWORD cbStructure;       /* size of this structure in bytes */\n    HWND hwndOwner;          /* owner window for the dialog */\n    LPNETRESOURCEW lpConnRes;/* Requested Resource info    */\n    DWORD dwFlags;           /* flags (see below) */\n    DWORD dwDevNum;          /* number of devices connected to */\n} CONNECTDLGSTRUCTW, *LPCONNECTDLGSTRUCTW;\n\nDECL_WINELIB_TYPE_AW(CONNECTDLGSTRUCT)\nDECL_WINELIB_TYPE_AW(LPCONNECTDLGSTRUCT)\n\n#define CONNDLG_RO_PATH     0x00000001 /* Resource path should be read-only    */\n#define CONNDLG_CONN_POINT  0x00000002 /* Netware -style movable connection point enabled */\n#define CONNDLG_USE_MRU     0x00000004 /* Use MRU combobox  */\n#define CONNDLG_HIDE_BOX    0x00000008 /* Hide persistent connect checkbox  */\n#define CONNDLG_PERSIST     0x00000010 /* Force persistent connection */\n#define CONNDLG_NOT_PERSIST 0x00000020 /* Force connection NOT persistent */\n\ntypedef struct {\n    DWORD           cbStructure;      /* size of this structure in bytes */\n    HWND            hwndOwner;        /* owner window for the dialog */\n    LPSTR           lpLocalName;      /* local device name */\n    LPSTR           lpRemoteName;     /* network resource name */\n    DWORD           dwFlags;          /* flags */\n} DISCDLGSTRUCTA, *LPDISCDLGSTRUCTA;\ntypedef struct {\n    DWORD           cbStructure;      /* size of this structure in bytes */\n    HWND            hwndOwner;        /* owner window for the dialog */\n    LPWSTR          lpLocalName;      /* local device name */\n    LPWSTR          lpRemoteName;     /* network resource name */\n    DWORD           dwFlags;          /* flags */\n} DISCDLGSTRUCTW, *LPDISCDLGSTRUCTW;\n\nDECL_WINELIB_TYPE_AW(DISCDLGSTRUCT)\nDECL_WINELIB_TYPE_AW(LPDISCDLGSTRUCT)\n\n#define DISC_UPDATE_PROFILE         0x00000001\n#define DISC_NO_FORCE               0x00000040\n\nDWORD WINAPI WNetConnectionDialog(HWND,DWORD);\nDWORD WINAPI WNetDisconnectDialog(HWND,DWORD);\nDWORD WINAPI WNetConnectionDialog1A(LPCONNECTDLGSTRUCTA);\nDWORD WINAPI WNetConnectionDialog1W(LPCONNECTDLGSTRUCTW);\n#define      WNetConnectionDialog1 WINELIB_NAME_AW(WNetConnectionDialog1)\nDWORD WINAPI WNetDisconnectDialog1A(LPDISCDLGSTRUCTA);\nDWORD WINAPI WNetDisconnectDialog1W(LPDISCDLGSTRUCTW);\n#define      WNetDisconnectDialog1 WINELIB_NAME_AW(WNetDisconnectDialog1)\n\n/*\n *  Network browsing\n */\n\nDWORD WINAPI WNetOpenEnumA(DWORD,DWORD,DWORD,LPNETRESOURCEA,LPHANDLE);\nDWORD WINAPI WNetOpenEnumW(DWORD,DWORD,DWORD,LPNETRESOURCEW,LPHANDLE);\n#define      WNetOpenEnum WINELIB_NAME_AW(WNetOpenEnum)\nDWORD WINAPI WNetEnumResourceA(HANDLE,LPDWORD,LPVOID,LPDWORD);\nDWORD WINAPI WNetEnumResourceW(HANDLE,LPDWORD,LPVOID,LPDWORD);\n#define      WNetEnumResource WINELIB_NAME_AW(WNetEnumResource)\nDWORD WINAPI WNetGetResourceInformationA(LPNETRESOURCEA,LPVOID,LPDWORD,LPSTR*);\nDWORD WINAPI WNetGetResourceInformationW(LPNETRESOURCEW,LPVOID,LPDWORD,LPWSTR*);\n#define      WNetGetResourceInformation WINELIB_NAME_AW(WNetGetResourceInformation)\nDWORD WINAPI WNetGetResourceParentA(LPNETRESOURCEA,LPVOID,LPDWORD);\nDWORD WINAPI WNetGetResourceParentW(LPNETRESOURCEW,LPVOID,LPDWORD);\n#define      WNetGetResourceParent WINELIB_NAME_AW(WNetGetResourceParent)\nDWORD WINAPI WNetCloseEnum(HANDLE);\n\n/*\n *  Universal naming\n */\n\n#define UNIVERSAL_NAME_INFO_LEVEL   0x00000001\n#define REMOTE_NAME_INFO_LEVEL      0x00000002\n\ntypedef struct {\n    LPSTR    lpUniversalName;\n} UNIVERSAL_NAME_INFOA, *LPUNIVERSAL_NAME_INFOA;\ntypedef struct {\n    LPWSTR   lpUniversalName;\n} UNIVERSAL_NAME_INFOW, *LPUNIVERSAL_NAME_INFOW;\n\nDECL_WINELIB_TYPE_AW(UNIVERSAL_NAME_INFO)\nDECL_WINELIB_TYPE_AW(LPUNIVERSAL_NAME_INFO)\n\ntypedef struct {\n    LPSTR    lpUniversalName;\n    LPSTR    lpConnectionName;\n    LPSTR    lpRemainingPath;\n}REMOTE_NAME_INFOA, *LPREMOTE_NAME_INFOA;\ntypedef struct {\n    LPWSTR   lpUniversalName;\n    LPWSTR   lpConnectionName;\n    LPWSTR   lpRemainingPath;\n}REMOTE_NAME_INFOW, *LPREMOTE_NAME_INFOW;\n\nDECL_WINELIB_TYPE_AW(REMOTE_NAME_INFO)\nDECL_WINELIB_TYPE_AW(LPREMOTE_NAME_INFO)\n\nDWORD WINAPI WNetGetUniversalNameA(LPCSTR,DWORD,LPVOID,LPDWORD);\nDWORD WINAPI WNetGetUniversalNameW(LPCWSTR,DWORD,LPVOID,LPDWORD);\n#define      WNetGetUniversalName WINELIB_NAME_AW(WNetGetUniversalName)\n\n/*\n *  Other\n */\n\nDWORD WINAPI WNetGetUserA(LPCSTR,LPSTR,LPDWORD);\nDWORD WINAPI WNetGetUserW(LPCWSTR,LPWSTR,LPDWORD);\n#define      WNetGetUser WINELIB_NAME_AW(WNetGetUser)\n\n#define WNFMT_MULTILINE         0x01\n#define WNFMT_ABBREVIATED       0x02\n#define WNFMT_INENUM            0x10\n#define WNFMT_CONNECTION        0x20\n\nDWORD WINAPI WNetGetProviderNameA(DWORD,LPSTR,LPDWORD);\nDWORD WINAPI WNetGetProviderNameW(DWORD,LPWSTR,LPDWORD);\n#define      WNetGetProviderName WINELIB_NAME_AW(WNetGetProviderName)\n\ntypedef struct {\n    DWORD cbStructure;\n    DWORD dwProviderVersion;\n    DWORD dwStatus;\n    DWORD dwCharacteristics;\n    DWORD dwHandle;\n    WORD  wNetType;\n    DWORD dwPrinters;\n    DWORD dwDrives;\n} NETINFOSTRUCT, *LPNETINFOSTRUCT;\n\n#define NETINFO_DLL16       0x00000001\n#define NETINFO_DISKRED     0x00000004\n#define NETINFO_PRINTERRED  0x00000008\n\nDWORD WINAPI WNetGetNetworkInformationA(LPCSTR,LPNETINFOSTRUCT);\nDWORD WINAPI WNetGetNetworkInformationW(LPCWSTR,LPNETINFOSTRUCT);\n#define      WNetGetNetworkInformation WINELIB_NAME_AW(WNetGetNetworkInformation)\n\n\n/*\n *  Status codes\n */\n\n#define WN_SUCCESS                      NO_ERROR\n#define WN_NO_ERROR                     NO_ERROR\n#define WN_NOT_SUPPORTED                ERROR_NOT_SUPPORTED\n#define WN_CANCEL                       ERROR_CANCELLED\n#define WN_RETRY                        ERROR_RETRY\n#define WN_NET_ERROR                    ERROR_UNEXP_NET_ERR\n#define WN_MORE_DATA                    ERROR_MORE_DATA\n#define WN_BAD_POINTER                  ERROR_INVALID_ADDRESS\n#define WN_BAD_VALUE                    ERROR_INVALID_PARAMETER\n#define WN_BAD_USER                     ERROR_BAD_USERNAME\n#define WN_BAD_PASSWORD                 ERROR_INVALID_PASSWORD\n#define WN_ACCESS_DENIED                ERROR_ACCESS_DENIED\n#define WN_FUNCTION_BUSY                ERROR_BUSY\n#define WN_WINDOWS_ERROR                ERROR_UNEXP_NET_ERR\n#define WN_OUT_OF_MEMORY                ERROR_NOT_ENOUGH_MEMORY\n#define WN_NO_NETWORK                   ERROR_NO_NETWORK\n#define WN_EXTENDED_ERROR               ERROR_EXTENDED_ERROR\n#define WN_BAD_LEVEL                    ERROR_INVALID_LEVEL\n#define WN_BAD_HANDLE                   ERROR_INVALID_HANDLE\n#define WN_NOT_INITIALIZING             ERROR_ALREADY_INITIALIZED\n#define WN_NO_MORE_DEVICES              ERROR_NO_MORE_DEVICES\n\n#define WN_NOT_CONNECTED                ERROR_NOT_CONNECTED\n#define WN_OPEN_FILES                   ERROR_OPEN_FILES\n#define WN_DEVICE_IN_USE                ERROR_DEVICE_IN_USE\n#define WN_BAD_NETNAME                  ERROR_BAD_NET_NAME\n#define WN_BAD_LOCALNAME                ERROR_BAD_DEVICE\n#define WN_ALREADY_CONNECTED            ERROR_ALREADY_ASSIGNED\n#define WN_DEVICE_ERROR                 ERROR_GEN_FAILURE\n#define WN_CONNECTION_CLOSED            ERROR_CONNECTION_UNAVAIL\n#define WN_NO_NET_OR_BAD_PATH           ERROR_NO_NET_OR_BAD_PATH\n#define WN_BAD_PROVIDER                 ERROR_BAD_PROVIDER\n#define WN_CANNOT_OPEN_PROFILE          ERROR_CANNOT_OPEN_PROFILE\n#define WN_BAD_PROFILE                  ERROR_BAD_PROFILE\n#define WN_BAD_DEV_TYPE                 ERROR_BAD_DEV_TYPE\n#define WN_DEVICE_ALREADY_REMEMBERED    ERROR_DEVICE_ALREADY_REMEMBERED\n\n#define WN_NO_MORE_ENTRIES              ERROR_NO_MORE_ITEMS\n#define WN_NOT_CONTAINER                ERROR_NOT_CONTAINER\n\n#define WN_NOT_AUTHENTICATED            ERROR_NOT_AUTHENTICATED\n#define WN_NOT_LOGGED_ON                ERROR_NOT_LOGGED_ON\n#define WN_NOT_VALIDATED                ERROR_NO_LOGON_SERVERS\n\n\n/*\n *  Multinet (for Shell)\n */\n\ntypedef struct {\n\tDWORD\tcbStructure;\n\tDWORD\tdwFlags;\n\tDWORD\tdwSpeed;\n\tDWORD\tdwDelay;\n\tDWORD\tdwOptDataSize;\n} NETCONNECTINFOSTRUCT,*LPNETCONNECTINFOSTRUCT;\n\n#define WNCON_FORNETCARD        0x00000001\n#define WNCON_NOTROUTED         0x00000002\n#define WNCON_SLOWLINK          0x00000004\n#define WNCON_DYNAMIC           0x00000008\n\nDWORD WINAPI MultinetGetConnectionPerformanceA(LPNETRESOURCEA,LPNETCONNECTINFOSTRUCT);\nDWORD WINAPI MultinetGetConnectionPerformanceW(LPNETRESOURCEW,LPNETCONNECTINFOSTRUCT);\n#define      MultinetGetConnectionPerformance WINELIB_NAME_AW(MultinetGetConnectionPerformance)\nDWORD WINAPI MultinetGetErrorTextA(DWORD,DWORD,DWORD);\nDWORD WINAPI MultinetGetErrorTextW(DWORD,DWORD,DWORD);\n#define      MultinetGetErrorText WINELIB_NAME_AW(MultinetGetErrorText)\n\n/*\n * Password cache\n */\n\n/* WNetEnumCachedPasswords */\ntypedef struct tagPASSWORD_CACHE_ENTRY\n{\n\tWORD cbEntry;\n\tWORD cbResource;\n\tWORD cbPassword;\n\tBYTE iEntry;\n\tBYTE nType;\n\tBYTE abResource[1];\n} PASSWORD_CACHE_ENTRY;\n\ntypedef BOOL (CALLBACK *ENUMPASSWORDPROC)(PASSWORD_CACHE_ENTRY *, DWORD);\nUINT WINAPI WNetEnumCachedPasswords( LPSTR, WORD, BYTE, ENUMPASSWORDPROC, DWORD);\nDWORD WINAPI WNetGetCachedPassword( LPSTR, WORD, LPSTR, LPWORD, BYTE );\nDWORD WINAPI WNetCachePassword( LPSTR, WORD, LPSTR, WORD, BYTE, WORD );\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _WINNETWK_H_ */\n"
  },
  {
    "path": "wine/windows/winnls.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINNLS_H\n#define __WINE_WINNLS_H\n#ifndef NONLS\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef _NORMALIZE_\n# define WINNORMALIZEAPI DECLSPEC_IMPORT\n#else\n# define WINNORMALIZEAPI\n#endif\n\n/* Country codes */\n#define CTRY_DEFAULT            (0)\n#define CTRY_ALBANIA            (355)\n#define CTRY_ALGERIA            (213)\n#define CTRY_ARGENTINA          (54)\n#define CTRY_ARMENIA            (374)\n#define CTRY_AUSTRALIA          (61)\n#define CTRY_AUSTRIA            (43)\n#define CTRY_AZERBAIJAN         (994)\n#define CTRY_BAHRAIN            (973)\n#define CTRY_BELARUS            (375)\n#define CTRY_BELGIUM            (32)\n#define CTRY_BELIZE             (501)\n#define CTRY_BOLIVIA            (591)\n#define CTRY_BRAZIL             (55)\n#define CTRY_BRUNEI_DARUSSALAM  (673)\n#define CTRY_BULGARIA           (359)\n#define CTRY_CANADA             (2)\n#define CTRY_CARIBBEAN          (1)\n#define CTRY_CHILE              (56)\n#define CTRY_COLOMBIA           (57)\n#define CTRY_COSTA_RICA         (506)\n#define CTRY_CROATIA            (385)\n#define CTRY_CZECH              (420)\n#define CTRY_DENMARK            (45)\n#define CTRY_DOMINICAN_REPUBLIC (1)\n#define CTRY_ECUADOR            (593)\n#define CTRY_EGYPT              (20)\n#define CTRY_EL_SALVADOR        (503)\n#define CTRY_ESTONIA            (372)\n#define CTRY_FAEROE_ISLANDS     (298)\n#define CTRY_FINLAND            (358)\n#define CTRY_FRANCE             (33)\n#define CTRY_GEORGIA            (995)\n#define CTRY_GERMANY            (49)\n#define CTRY_GREECE             (30)\n#define CTRY_GUATEMALA          (502)\n#define CTRY_HONDURAS           (504)\n#define CTRY_HONG_KONG          (852)\n#define CTRY_HUNGARY            (36)\n#define CTRY_ICELAND            (354)\n#define CTRY_INDIA              (91)\n#define CTRY_INDONESIA          (62)\n#define CTRY_IRAN               (981)\n#define CTRY_IRAQ               (964)\n#define CTRY_IRELAND            (353)\n#define CTRY_ISRAEL             (972)\n#define CTRY_ITALY              (39)\n#define CTRY_JAMAICA            (1)\n#define CTRY_JAPAN              (81)\n#define CTRY_JORDAN             (962)\n#define CTRY_KAZAKSTAN          (7)\n#define CTRY_KENYA              (254)\n#define CTRY_KUWAIT             (965)\n#define CTRY_KYRGYZSTAN         (996)\n#define CTRY_LATVIA             (371)\n#define CTRY_LEBANON            (961)\n#define CTRY_LIBYA              (218)\n#define CTRY_LIECHTENSTEIN      (41)\n#define CTRY_LITHUANIA          (370)\n#define CTRY_LUXEMBOURG         (352)\n#define CTRY_MACAU              (853)\n#define CTRY_MACEDONIA          (389)\n#define CTRY_MALAYSIA           (60)\n#define CTRY_MALDIVES           (960)\n#define CTRY_MEXICO             (52)\n#define CTRY_MONACO             (33)\n#define CTRY_MONGOLIA           (976)\n#define CTRY_MOROCCO            (212)\n#define CTRY_NETHERLANDS        (31)\n#define CTRY_NEW_ZEALAND        (64)\n#define CTRY_NICARAGUA          (505)\n#define CTRY_NORWAY             (47)\n#define CTRY_OMAN               (968)\n#define CTRY_PAKISTAN           (92)\n#define CTRY_PANAMA             (507)\n#define CTRY_PARAGUAY           (595)\n#define CTRY_PERU               (51)\n#define CTRY_PHILIPPINES        (63)\n#define CTRY_POLAND             (48)\n#define CTRY_PORTUGAL           (351)\n#define CTRY_PRCHINA            (86)\n#define CTRY_PUERTO_RICO        (1)\n#define CTRY_QATAR              (974)\n#define CTRY_ROMANIA            (40)\n#define CTRY_RUSSIA             (7)\n#define CTRY_SAUDI_ARABIA       (966)\n#define CTRY_SERBIA             (381)\n#define CTRY_SINGAPORE          (65)\n#define CTRY_SLOVAK             (421)\n#define CTRY_SLOVENIA           (386)\n#define CTRY_SOUTH_AFRICA       (27)\n#define CTRY_SOUTH_KOREA        (82)\n#define CTRY_SPAIN              (34)\n#define CTRY_SWEDEN             (46)\n#define CTRY_SWITZERLAND        (41)\n#define CTRY_SYRIA              (963)\n#define CTRY_TAIWAN             (886)\n#define CTRY_TATARSTAN          (7)\n#define CTRY_THAILAND           (66)\n#define CTRY_TRINIDAD_Y_TOBAGO  (1)\n#define CTRY_TUNISIA            (216)\n#define CTRY_TURKEY             (90)\n#define CTRY_UAE                (971)\n#define CTRY_UKRAINE            (380)\n#define CTRY_UNITED_KINGDOM     (44)\n#define CTRY_UNITED_STATES      (1)\n#define CTRY_URUGUAY            (598)\n#define CTRY_UZBEKISTAN         (7)\n#define CTRY_VENEZUELA          (58)\n#define CTRY_VIET_NAM           (84)\n#define CTRY_YEMEN              (967)\n#define CTRY_ZIMBABWE           (263)\n\n#define MB_PRECOMPOSED              0x01\n#define MB_COMPOSITE                0x02\n#define MB_USEGLYPHCHARS            0x04\n#define MB_ERR_INVALID_CHARS        0x08\n\n#define LGRPID_INSTALLED            0x1\n#define LGRPID_SUPPORTED            0x2\n\n#define LCID_INSTALLED              0x1\n#define LCID_SUPPORTED              0x2\n#define LCID_ALTERNATE_SORTS        0x4\n\n#define LOCALE_ALL                  0x00\n#define LOCALE_WINDOWS              0x01\n#define LOCALE_SUPPLEMENTAL         0x02\n#define LOCALE_ALTERNATE_SORTS      0x04\n#define LOCALE_REPLACEMENT          0x08\n#define LOCALE_NEUTRALDATA          0x10\n#define LOCALE_SPECIFICDATA         0x20\n\n/* Locale flags */\n#define LOCALE_NOUSEROVERRIDE         0x80000000\n#define LOCALE_USE_CP_ACP             0x40000000\n#define LOCALE_RETURN_NUMBER          0x20000000\n#define LOCALE_RETURN_GENITIVE_NAMES  0x10000000\n\n/* Locale information types */\n#define LOCALE_ILANGUAGE            0x0001\n#define LOCALE_SLANGUAGE            0x0002\n#define LOCALE_SENGLANGUAGE         0x1001\n#define LOCALE_SENGLISHLANGUAGENAME 0x1001\n#define LOCALE_SABBREVLANGNAME      0x0003\n#define LOCALE_SNATIVELANGNAME      0x0004\n#define LOCALE_SNATIVELANGUAGENAME  0x0004\n#define LOCALE_ICOUNTRY             0x0005\n#define LOCALE_SCOUNTRY             0x0006\n#define LOCALE_SLOCALIZEDCOUNTRYNAME 0x0006\n#define LOCALE_SENGCOUNTRY          0x1002\n#define LOCALE_SENGLISHCOUNTRYNAME  0x1002\n#define LOCALE_SABBREVCTRYNAME      0x0007\n#define LOCALE_SNATIVECTRYNAME      0x0008\n#define LOCALE_SNATIVECOUNTRYNAME   0x0008\n#define LOCALE_IDEFAULTLANGUAGE     0x0009\n#define LOCALE_IDEFAULTCOUNTRY      0x000A\n#define LOCALE_IDEFAULTCODEPAGE     0x000B\n#define LOCALE_IDEFAULTANSICODEPAGE 0x1004\n#define LOCALE_IDEFAULTMACCODEPAGE  0x1011\n#define LOCALE_SLIST                0x000C\n#define LOCALE_IMEASURE             0x000D\n#define LOCALE_SDECIMAL             0x000E\n#define LOCALE_STHOUSAND            0x000F\n#define LOCALE_SGROUPING            0x0010\n#define LOCALE_IDIGITS              0x0011\n#define LOCALE_ILZERO               0x0012\n#define LOCALE_INEGNUMBER           0x1010\n#define LOCALE_SNATIVEDIGITS        0x0013\n#define LOCALE_SCURRENCY            0x0014\n#define LOCALE_SINTLSYMBOL          0x0015\n#define LOCALE_SMONDECIMALSEP       0x0016\n#define LOCALE_SMONTHOUSANDSEP      0x0017\n#define LOCALE_SMONGROUPING         0x0018\n#define LOCALE_ICURRDIGITS          0x0019\n#define LOCALE_IINTLCURRDIGITS      0x001A\n#define LOCALE_ICURRENCY            0x001B\n#define LOCALE_INEGCURR             0x001C\n#define LOCALE_SDATE                0x001D\n#define LOCALE_STIME                0x001E\n#define LOCALE_SSHORTDATE           0x001F\n#define LOCALE_SLONGDATE            0x0020\n#define LOCALE_STIMEFORMAT          0x1003\n#define LOCALE_IDATE                0x0021\n#define LOCALE_ILDATE               0x0022\n#define LOCALE_ITIME                0x0023\n#define LOCALE_ITIMEMARKPOSN        0x1005\n#define LOCALE_ICENTURY             0x0024\n#define LOCALE_ITLZERO              0x0025\n#define LOCALE_IDAYLZERO            0x0026\n#define LOCALE_IMONLZERO            0x0027\n#define LOCALE_S1159                0x0028\n#define LOCALE_S2359                0x0029\n#define LOCALE_ICALENDARTYPE        0x1009\n#define LOCALE_IOPTIONALCALENDAR    0x100B\n#define LOCALE_IFIRSTDAYOFWEEK      0x100C\n#define LOCALE_IFIRSTWEEKOFYEAR     0x100D\n#define LOCALE_SDAYNAME1            0x002A\n#define LOCALE_SDAYNAME2            0x002B\n#define LOCALE_SDAYNAME3            0x002C\n#define LOCALE_SDAYNAME4            0x002D\n#define LOCALE_SDAYNAME5            0x002E\n#define LOCALE_SDAYNAME6            0x002F\n#define LOCALE_SDAYNAME7            0x0030\n#define LOCALE_SABBREVDAYNAME1      0x0031\n#define LOCALE_SABBREVDAYNAME2      0x0032\n#define LOCALE_SABBREVDAYNAME3      0x0033\n#define LOCALE_SABBREVDAYNAME4      0x0034\n#define LOCALE_SABBREVDAYNAME5      0x0035\n#define LOCALE_SABBREVDAYNAME6      0x0036\n#define LOCALE_SABBREVDAYNAME7      0x0037\n#define LOCALE_SMONTHNAME1          0x0038\n#define LOCALE_SMONTHNAME2          0x0039\n#define LOCALE_SMONTHNAME3          0x003A\n#define LOCALE_SMONTHNAME4          0x003B\n#define LOCALE_SMONTHNAME5          0x003C\n#define LOCALE_SMONTHNAME6          0x003D\n#define LOCALE_SMONTHNAME7          0x003E\n#define LOCALE_SMONTHNAME8          0x003F\n#define LOCALE_SMONTHNAME9          0x0040\n#define LOCALE_SMONTHNAME10         0x0041\n#define LOCALE_SMONTHNAME11         0x0042\n#define LOCALE_SMONTHNAME12         0x0043\n#define LOCALE_SMONTHNAME13         0x100E\n#define LOCALE_SABBREVMONTHNAME1    0x0044\n#define LOCALE_SABBREVMONTHNAME2    0x0045\n#define LOCALE_SABBREVMONTHNAME3    0x0046\n#define LOCALE_SABBREVMONTHNAME4    0x0047\n#define LOCALE_SABBREVMONTHNAME5    0x0048\n#define LOCALE_SABBREVMONTHNAME6    0x0049\n#define LOCALE_SABBREVMONTHNAME7    0x004A\n#define LOCALE_SABBREVMONTHNAME8    0x004B\n#define LOCALE_SABBREVMONTHNAME9    0x004C\n#define LOCALE_SABBREVMONTHNAME10   0x004D\n#define LOCALE_SABBREVMONTHNAME11   0x004E\n#define LOCALE_SABBREVMONTHNAME12   0x004F\n#define LOCALE_SABBREVMONTHNAME13   0x100F\n#define LOCALE_SPOSITIVESIGN        0x0050\n#define LOCALE_SNEGATIVESIGN        0x0051\n#define LOCALE_IPOSSIGNPOSN         0x0052\n#define LOCALE_INEGSIGNPOSN         0x0053\n#define LOCALE_IPOSSYMPRECEDES      0x0054\n#define LOCALE_IPOSSEPBYSPACE       0x0055\n#define LOCALE_INEGSYMPRECEDES      0x0056\n#define LOCALE_INEGSEPBYSPACE       0x0057\n#define\tLOCALE_FONTSIGNATURE        0x0058\n#define LOCALE_SISO639LANGNAME      0x0059\n#define LOCALE_SISO3166CTRYNAME     0x005A\n#define LOCALE_IGEOID               0x005B\n#define LOCALE_SNAME                0x005C\n#define LOCALE_SDURATION            0x005D\n#define LOCALE_SKEYBOARDSTOINSTALL  0x005E\n#define LOCALE_SSHORTESTDAYNAME1    0x0060\n#define LOCALE_SSHORTESTDAYNAME2    0x0061\n#define LOCALE_SSHORTESTDAYNAME3    0x0062\n#define LOCALE_SSHORTESTDAYNAME4    0x0063\n#define LOCALE_SSHORTESTDAYNAME5    0x0064\n#define LOCALE_SSHORTESTDAYNAME6    0x0065\n#define LOCALE_SSHORTESTDAYNAME7    0x0066\n#define LOCALE_SISO639LANGNAME2     0x0067\n#define LOCALE_SISO3166CTRYNAME2    0x0068\n#define LOCALE_SNAN                 0x0069\n#define LOCALE_SPOSINFINITY         0x006A\n#define LOCALE_SNEGINFINITY         0x006B\n#define LOCALE_SSCRIPTS             0x006C\n#define LOCALE_SPARENT              0x006D\n#define LOCALE_SCONSOLEFALLBACKNAME 0x006E\n#define LOCALE_SLANGDISPLAYNAME     0x006F\n#define LOCALE_SLOCALIZEDLANGUAGENAME 0x006F\n#define LOCALE_IREADINGLAYOUT       0x0070\n#define LOCALE_INEUTRAL             0x0071\n#define LOCALE_SENGLISHDISPLAYNAME  0x0072\n#define LOCALE_SNATIVEDISPLAYNAME   0x0073\n#define LOCALE_INEGATIVEPERCENT     0x0074\n#define LOCALE_IPOSITIVEPERCENT     0x0075\n#define LOCALE_SPERCENT             0x0076\n#define LOCALE_SPERMILLE            0x0077\n#define LOCALE_SMONTHDAY            0x0078\n#define LOCALE_SSHORTTIME           0x0079\n#define LOCALE_SOPENTYPELANGUAGETAG 0X007A\n#define LOCALE_SSORTLOCALE          0x007B\n\n#define LOCALE_IDEFAULTEBCDICCODEPAGE 0x1012\n#define LOCALE_IPAPERSIZE             0x100A\n#define LOCALE_SENGCURRNAME           0x1007\n#define LOCALE_SNATIVECURRNAME        0x1008\n#define LOCALE_SYEARMONTH             0x1006\n#define LOCALE_SSORTNAME              0x1013\n#define LOCALE_IDIGITSUBSTITUTION     0x1014\n\n/* Locale name special values */\n#if defined(__GNUC__)\n# define LOCALE_NAME_INVARIANT      (const WCHAR []){ 0 }\n#elif defined(_MSC_VER)\n# define LOCALE_NAME_INVARIANT      L\"\"\n#else\nstatic const WCHAR LOCALE_NAME_INVARIANT[] = { 0 };\n#endif\n\n#if defined(__GNUC__)\n# define LOCALE_NAME_SYSTEM_DEFAULT      (const WCHAR []){'!','s','y','s','-','d','e','f','a','u','l','t','-','l','o','c','a','l','e',0}\n#elif defined(_MSC_VER)\n# define LOCALE_NAME_SYSTEM_DEFAULT      L\"!sys-default-locale\"\n#else\nstatic const WCHAR LOCALE_NAME_SYSTEM_DEFAULT[] = {'!','s','y','s','-','d','e','f','a','u','l','t','-','l','o','c','a','l','e',0};\n#endif\n\n#define LOCALE_NAME_USER_DEFAULT    NULL\n\n#define LOCALE_IDEFAULTUNIXCODEPAGE   0x1030 /* Wine extension */\n\n#define NORM_IGNORECASE            0x00000001\n#define NORM_IGNORENONSPACE        0x00000002\n#define NORM_IGNORESYMBOLS         0x00000004\n#define SORT_DIGITSASNUMBERS       0x00000008\n#define LINGUISTIC_IGNORECASE      0x00000010\n#define LINGUISTIC_IGNOREDIACRITIC 0x00000020\n#define SORT_STRINGSORT            0x00001000 /* Take punctuation into account */\n#define NORM_IGNOREKANATYPE        0x00010000\n#define NORM_IGNOREWIDTH           0x00020000\n#define NORM_LINGUISTIC_CASING     0x08000000\n#define FIND_STARTSWITH            0x00100000\n#define FIND_ENDSWITH              0x00200000\n#define FIND_FROMSTART             0x00400000\n#define FIND_FROMEND               0x00800000\n\n#define CP_ACP        0\n#define CP_OEMCP      1\n#define CP_MACCP      2\n#define CP_THREAD_ACP 3\n#define CP_SYMBOL     42\n#define CP_UTF7       65000\n#define CP_UTF8       65001\n\n#define CP_UNIXCP     65010 /* Wine extension */\n\n#define CP_INSTALLED 0x1\n#define CP_SUPPORTED 0x2\n\n#define HIGH_SURROGATE_START 0xd800\n#define HIGH_SURROGATE_END   0xdbff\n#define LOW_SURROGATE_START  0xdc00\n#define LOW_SURROGATE_END    0xdfff\n\n#define IS_HIGH_SURROGATE(ch)       ((ch) >= HIGH_SURROGATE_START && (ch) <= HIGH_SURROGATE_END)\n#define IS_LOW_SURROGATE(ch)        ((ch) >= LOW_SURROGATE_START  && (ch) <= LOW_SURROGATE_END)\n#define IS_SURROGATE_PAIR(high,low) (IS_HIGH_SURROGATE(high) && IS_LOW_SURROGATE(low))\n\n#define WC_DISCARDNS         0x0010\n#define WC_SEPCHARS          0x0020\n#define WC_DEFAULTCHAR       0x0040\n#define WC_ERR_INVALID_CHARS 0x0080\n#define WC_COMPOSITECHECK    0x0200\n#define WC_NO_BEST_FIT_CHARS 0x0400\n\n#define MAP_FOLDCZONE        0x0010\n#define MAP_PRECOMPOSED      0x0020\n#define MAP_COMPOSITE        0x0040\n#define MAP_FOLDDIGITS       0x0080\n#define MAP_EXPAND_LIGATURES 0x2000\n\n\n/* String mapping flags */\n#define LCMAP_LOWERCASE  0x00000100\t/* Make lower-case */\n#define LCMAP_UPPERCASE  0x00000200\t/* Make upper-case */\n#define LCMAP_SORTKEY    0x00000400\t/* Create a sort key */\n#define LCMAP_BYTEREV    0x00000800\t/* Reverse the result */\n\n#define LCMAP_HIRAGANA   0x00100000\t/* Transform Japanese katakana into hiragana */\n#define LCMAP_KATAKANA   0x00200000\t/* Transform Japanese hiragana into katakana */\n#define LCMAP_HALFWIDTH  0x00400000\t/* Use single byte chars in output */\n#define LCMAP_FULLWIDTH  0x00800000\t/* Use double byte chars in output */\n\n#define LCMAP_LINGUISTIC_CASING   0x01000000 /* Change case by using language context */\n#define LCMAP_SIMPLIFIED_CHINESE  0x02000000 /* Transform Chinese traditional into simplified */\n#define LCMAP_TRADITIONAL_CHINESE 0x04000000 /* Transform Chinese simplified into traditional */\n\n/* Date and time formatting flags */\n#define DATE_SHORTDATE          0x01  /* Short date format */\n#define DATE_LONGDATE           0x02  /* Long date format */\n#define DATE_USE_ALT_CALENDAR   0x04  /* Use an Alternate calendar */\n#define DATE_YEARMONTH          0x08  /* Year/month format */\n#define DATE_LTRREADING         0x10  /* Add LTR reading marks */\n#define DATE_RTLREADING         0x20  /* Add RTL reading marks */\n\n#define TIME_FORCE24HOURFORMAT  0x08  /* Always use 24 hour clock */\n#define TIME_NOTIMEMARKER       0x04  /* show no AM/PM */\n#define TIME_NOSECONDS          0x02  /* show no seconds */\n#define TIME_NOMINUTESORSECONDS 0x01  /* show no minutes either */\n\n/* Unicode char type flags */\n#define\tCT_CTYPE1\t\t0x0001\t/* usual ctype */\n#define\tCT_CTYPE2\t\t0x0002\t/* bidirectional layout info */\n#define\tCT_CTYPE3\t\t0x0004\t/* textprocessing info */\n\n/* Type 1 flags */\n#define C1_UPPER\t\t0x0001\n#define C1_LOWER\t\t0x0002\n#define C1_DIGIT\t\t0x0004\n#define C1_SPACE\t\t0x0008\n#define C1_PUNCT\t\t0x0010\n#define C1_CNTRL\t\t0x0020\n#define C1_BLANK\t\t0x0040\n#define C1_XDIGIT\t\t0x0080\n#define C1_ALPHA\t\t0x0100\n#define C1_DEFINED\t\t0x0200\n\n/* Type 2 flags */\n#define\tC2_LEFTTORIGHT\t\t0x0001\n#define\tC2_RIGHTTOLEFT\t\t0x0002\n#define\tC2_EUROPENUMBER\t\t0x0003\n#define\tC2_EUROPESEPARATOR\t0x0004\n#define\tC2_EUROPETERMINATOR\t0x0005\n#define\tC2_ARABICNUMBER\t\t0x0006\n#define\tC2_COMMONSEPARATOR\t0x0007\n#define\tC2_BLOCKSEPARATOR\t0x0008\n#define\tC2_SEGMENTSEPARATOR\t0x0009\n#define\tC2_WHITESPACE\t\t0x000A\n#define\tC2_OTHERNEUTRAL\t\t0x000B\n#define\tC2_NOTAPPLICABLE\t0x0000\n\n/* Type 3 flags */\n#define\tC3_NONSPACING\t\t0x0001\n#define\tC3_DIACRITIC\t\t0x0002\n#define\tC3_VOWELMARK\t\t0x0004\n#define\tC3_SYMBOL\t\t0x0008\n#define\tC3_KATAKANA\t\t0x0010\n#define\tC3_HIRAGANA\t\t0x0020\n#define\tC3_HALFWIDTH\t\t0x0040\n#define\tC3_FULLWIDTH\t\t0x0080\n#define\tC3_IDEOGRAPH\t\t0x0100\n#define\tC3_KASHIDA\t\t0x0200\n#define\tC3_LEXICAL\t\t0x0400\n#define\tC3_HIGHSURROGATE\t0x0800\n#define\tC3_LOWSURROGATE\t\t0x1000\n#define\tC3_ALPHA\t\t0x8000\n#define\tC3_NOTAPPLICABLE\t0x0000\n\n/* Code page information.\n */\n#define MAX_LEADBYTES     12\n#define MAX_DEFAULTCHAR   2\n\n/* Defines for calendar handling */\n#define CAL_NOUSEROVERRIDE        LOCALE_NOUSEROVERRIDE\n#define CAL_USE_CP_ACP            LOCALE_USE_CP_ACP\n#define CAL_RETURN_NUMBER         LOCALE_RETURN_NUMBER\n#define CAL_RETURN_GENITIVE_NAMES LOCALE_RETURN_GENITIVE_NAMES\n\n#define CAL_ICALINTVALUE       0x01\n#define CAL_SCALNAME           0x02\n#define CAL_IYEAROFFSETRANGE   0x03\n#define CAL_SERASTRING         0x04\n#define CAL_SSHORTDATE         0x05\n#define CAL_SLONGDATE          0x06\n#define CAL_SDAYNAME1          0x07\n#define CAL_SDAYNAME2          0x08\n#define CAL_SDAYNAME3          0x09\n#define CAL_SDAYNAME4          0x0a\n#define CAL_SDAYNAME5          0x0b\n#define CAL_SDAYNAME6          0x0c\n#define CAL_SDAYNAME7          0x0d\n#define CAL_SABBREVDAYNAME1    0x0e\n#define CAL_SABBREVDAYNAME2    0x0f\n#define CAL_SABBREVDAYNAME3    0x10\n#define CAL_SABBREVDAYNAME4    0x11\n#define CAL_SABBREVDAYNAME5    0x12\n#define CAL_SABBREVDAYNAME6    0x13\n#define CAL_SABBREVDAYNAME7    0x14\n#define CAL_SMONTHNAME1        0x15\n#define CAL_SMONTHNAME2        0x16\n#define CAL_SMONTHNAME3        0x17\n#define CAL_SMONTHNAME4        0x18\n#define CAL_SMONTHNAME5        0x19\n#define CAL_SMONTHNAME6        0x1a\n#define CAL_SMONTHNAME7        0x1b\n#define CAL_SMONTHNAME8        0x1c\n#define CAL_SMONTHNAME9        0x1d\n#define CAL_SMONTHNAME10       0x1e\n#define CAL_SMONTHNAME11       0x1f\n#define CAL_SMONTHNAME12       0x20\n#define CAL_SMONTHNAME13       0x21\n#define CAL_SABBREVMONTHNAME1  0x22\n#define CAL_SABBREVMONTHNAME2  0x23\n#define CAL_SABBREVMONTHNAME3  0x24\n#define CAL_SABBREVMONTHNAME4  0x25\n#define CAL_SABBREVMONTHNAME5  0x26\n#define CAL_SABBREVMONTHNAME6  0x27\n#define CAL_SABBREVMONTHNAME7  0x28\n#define CAL_SABBREVMONTHNAME8  0x29\n#define CAL_SABBREVMONTHNAME9  0x2a\n#define CAL_SABBREVMONTHNAME10 0x2b\n#define CAL_SABBREVMONTHNAME11 0x2c\n#define CAL_SABBREVMONTHNAME12 0x2d\n#define CAL_SABBREVMONTHNAME13 0x2e\n#define CAL_SYEARMONTH         0x2f\n#define CAL_ITWODIGITYEARMAX   0x30\n#define CAL_SSHORTESTDAYNAME1  0x31\n#define CAL_SSHORTESTDAYNAME2  0x32\n#define CAL_SSHORTESTDAYNAME3  0x33\n#define CAL_SSHORTESTDAYNAME4  0x34\n#define CAL_SSHORTESTDAYNAME5  0x35\n#define CAL_SSHORTESTDAYNAME6  0x36\n#define CAL_SSHORTESTDAYNAME7  0x37\n#define CAL_SMONTHDAY          0x38\n#define CAL_SABBREVERASTRING   0x39\n\n/* Calendar types */\n#define CAL_GREGORIAN              1\n#define CAL_GREGORIAN_US           2\n#define CAL_JAPAN                  3\n#define CAL_TAIWAN                 4\n#define CAL_KOREA                  5\n#define CAL_HIJRI                  6\n#define CAL_THAI                   7\n#define CAL_HEBREW                 8\n#define CAL_GREGORIAN_ME_FRENCH    9\n#define CAL_GREGORIAN_ARABIC       10\n#define CAL_GREGORIAN_XLIT_ENGLISH 11\n#define CAL_GREGORIAN_XLIT_FRENCH  12\n\n/* EnumCalendarInfo Flags */\n#define ENUM_ALL_CALENDARS 0xffffffff /* Enumerate all calendars within a locale */\n\n/* CompareString results */\n#define CSTR_LESS_THAN    1\n#define CSTR_EQUAL        2\n#define CSTR_GREATER_THAN 3\n\n/*\n * Language Group IDs.\n * Resources in kernel32 are LGRPID_xxx+0x2000 because low values were used by LOCALE_xxx\n * This is done because resources in win2k kernel32 / winxp kernel32 are not even\n * stored the same way.\n */\n#define LGRPID_WESTERN_EUROPE      0x01 /* Includes US and Africa */\n#define LGRPID_CENTRAL_EUROPE      0x02\n#define LGRPID_BALTIC              0x03\n#define LGRPID_GREEK               0x04\n#define LGRPID_CYRILLIC            0x05\n#define LGRPID_TURKISH             0x06\n#define LGRPID_JAPANESE            0x07\n#define LGRPID_KOREAN              0x08\n#define LGRPID_TRADITIONAL_CHINESE 0x09\n#define LGRPID_SIMPLIFIED_CHINESE  0x0A\n#define LGRPID_THAI                0x0B\n#define LGRPID_HEBREW              0x0C\n#define LGRPID_ARABIC              0x0D\n#define LGRPID_VIETNAMESE          0x0E\n#define LGRPID_INDIC               0x0F\n#define LGRPID_GEORGIAN            0x10\n#define LGRPID_ARMENIAN            0x11\n\n/* IDN defines. */\n#define IDN_ALLOW_UNASSIGNED        0x1\n#define IDN_USE_STD3_ASCII_RULES    0x2\n\n/* MUI defines. */\n#define MUI_LANGUAGE_ID                     0x04\n#define MUI_LANGUAGE_NAME                   0x08\n#define MUI_MERGE_SYSTEM_FALLBACK           0x10\n#define MUI_MERGE_USER_FALLBACK             0x20\n#define MUI_UI_FALLBACK                     MUI_MERGE_SYSTEM_FALLBACK | MUI_MERGE_USER_FALLBACK\n#define MUI_THREAD_LANGUAGES                0x40\n#define MUI_CONSOLE_FILTER                  0x100\n#define MUI_COMPLEX_SCRIPT_FILTER           0x200\n#define MUI_RESET_FILTERS                   0x001\n#define MUI_USER_PREFERRED_UI_LANGUAGES     0x10\n#define MUI_USE_INSTALLED_LANGUAGES         0x20\n#define MUI_USE_SEARCH_ALL_LANGUAGES        0x40\n#define MUI_LANG_NEUTRAL_PE_FILE            0x100\n#define MUI_NON_LANG_NEUTRAL_FILE           0x200\n#define MUI_MACHINE_LANGUAGE_SETTINGS       0x400\n#define MUI_FILETYPE_NOT_LANGUAGE_NEUTRAL   0x001\n#define MUI_FILETYPE_LANGUAGE_NEUTRAL_MAIN  0x002\n#define MUI_FILETYPE_LANGUAGE_NEUTRAL_MUI   0x004\n#define MUI_QUERY_TYPE                      0x001\n#define MUI_QUERY_CHECKSUM                  0x002\n#define MUI_QUERY_LANGUAGE_NAME             0x004\n#define MUI_QUERY_RESOURCE_TYPES            0x008\n#define MUI_FILEINFO_VERSION                0x001\n#define MUI_FULL_LANGUAGE                   0x01\n#define MUI_PARTIAL_LANGUAGE                0x02\n#define MUI_LIP_LANGUAGE                    0x04\n#define MUI_LANGUAGE_INSTALLED              0x20\n#define MUI_LANGUAGE_LICENSED               0x40\n\ntypedef struct _FILEMUIINFO {\n    DWORD dwSize;\n    DWORD dwVersion;\n    DWORD dwFileType;\n    BYTE pChecksum[16];\n    BYTE pServiceChecksum[16];\n    DWORD dwLanguageNameOffset;\n    DWORD dwTypeIDMainSize;\n    DWORD dwTypeIDMainOffset;\n    DWORD dwTypeNameMainOffset;\n    DWORD dwTypeIDMUISize;\n    DWORD dwTypeIDMUIOffset;\n    DWORD dwTypeNameMUIOffset;\n    BYTE abBuffer[8];\n} FILEMUIINFO, *PFILEMUIINFO;\n\n/* Types\n */\n\ntypedef enum _NORM_FORM {\n    NormalizationOther  = 0,\n    NormalizationC      = 0x1,\n    NormalizationD      = 0x2,\n    NormalizationKC     = 0x5,\n    NormalizationKD     = 0x6\n} NORM_FORM;\n\ntypedef DWORD CALID;\ntypedef DWORD CALTYPE;\ntypedef LONG  GEOID;\ntypedef DWORD GEOCLASS;\ntypedef DWORD GEOTYPE;\ntypedef DWORD LCTYPE;\ntypedef DWORD LGRPID;\n\ntypedef struct\n{\n    UINT MaxCharSize;\n    BYTE DefaultChar[MAX_DEFAULTCHAR];\n    BYTE LeadByte[MAX_LEADBYTES];\n} CPINFO, *LPCPINFO;\n\ntypedef struct\n{\n    UINT MaxCharSize;\n    BYTE DefaultChar[MAX_DEFAULTCHAR];\n    BYTE LeadByte[MAX_LEADBYTES];\n    WCHAR UnicodeDefaultChar;\n    UINT CodePage;\n    CHAR CodePageName[MAX_PATH];\n} CPINFOEXA, *LPCPINFOEXA;\n\ntypedef struct\n{\n    UINT MaxCharSize;\n    BYTE DefaultChar[MAX_DEFAULTCHAR];\n    BYTE LeadByte[MAX_LEADBYTES];\n    WCHAR UnicodeDefaultChar;\n    UINT CodePage;\n    WCHAR CodePageName[MAX_PATH];\n} CPINFOEXW, *LPCPINFOEXW;\n\nDECL_WINELIB_TYPE_AW(CPINFOEX)\nDECL_WINELIB_TYPE_AW(LPCPINFOEX)\n\ntypedef struct _numberfmtA {\n    UINT NumDigits;\n    UINT LeadingZero;\n    UINT Grouping;\n    LPSTR lpDecimalSep;\n    LPSTR lpThousandSep;\n    UINT NegativeOrder;\n} NUMBERFMTA, *LPNUMBERFMTA;\n\ntypedef struct _numberfmtW {\n    UINT NumDigits;\n    UINT LeadingZero;\n    UINT Grouping;\n    LPWSTR lpDecimalSep;\n    LPWSTR lpThousandSep;\n    UINT NegativeOrder;\n} NUMBERFMTW, *LPNUMBERFMTW;\n\nDECL_WINELIB_TYPE_AW(NUMBERFMT)\nDECL_WINELIB_TYPE_AW(LPNUMBERFMT)\n\ntypedef struct _currencyfmtA\n{\n    UINT NumDigits;\n    UINT LeadingZero;\n    UINT Grouping;\n    LPSTR lpDecimalSep;\n    LPSTR lpThousandSep;\n    UINT NegativeOrder;\n    UINT PositiveOrder;\n    LPSTR lpCurrencySymbol;\n} CURRENCYFMTA, *LPCURRENCYFMTA;\n\ntypedef struct _currencyfmtW\n{\n    UINT NumDigits;\n    UINT LeadingZero;\n    UINT Grouping;\n    LPWSTR lpDecimalSep;\n    LPWSTR lpThousandSep;\n    UINT NegativeOrder;\n    UINT PositiveOrder;\n    LPWSTR lpCurrencySymbol;\n} CURRENCYFMTW, *LPCURRENCYFMTW;\n\nDECL_WINELIB_TYPE_AW(CURRENCYFMT)\nDECL_WINELIB_TYPE_AW(LPCURRENCYFMT)\n\ntypedef struct _nlsversioninfo {\n    DWORD dwNLSVersionInfoSize;\n    DWORD dwNLSVersion;\n    DWORD dwDefinedVersion;\n} NLSVERSIONINFO, *LPNLSVERSIONINFO;\n\ntypedef struct _nlsversioninfoex {\n    DWORD dwNLSVersionInfoSize;\n    DWORD dwNLSVersion;\n    DWORD dwDefinedVersion;\n    DWORD dwEffectiveId;\n    GUID  guidCustomVersion;\n} NLSVERSIONINFOEX, *LPNLSVERSIONINFOEX;\n\n/* Define a bunch of callback types */\n\ntypedef BOOL    (CALLBACK *CALINFO_ENUMPROCEXEX)(LPWSTR,CALID,LPWSTR,LPARAM);\ntypedef BOOL    (CALLBACK *DATEFMT_ENUMPROCEXEX)(LPWSTR,CALID,LPARAM);\ntypedef BOOL    (CALLBACK *TIMEFMT_ENUMPROCEX)(LPWSTR,LPARAM);\n#if defined(STRICT)\ntypedef BOOL    (CALLBACK *CALINFO_ENUMPROCA)(LPSTR);\ntypedef BOOL    (CALLBACK *CALINFO_ENUMPROCW)(LPWSTR);\ntypedef BOOL    (CALLBACK *CALINFO_ENUMPROCEXA)(LPSTR,CALID);\ntypedef BOOL    (CALLBACK *CALINFO_ENUMPROCEXW)(LPWSTR,CALID);\ntypedef BOOL    (CALLBACK *CODEPAGE_ENUMPROCA)(LPSTR);\ntypedef BOOL    (CALLBACK *CODEPAGE_ENUMPROCW)(LPWSTR);\ntypedef BOOL    (CALLBACK *DATEFMT_ENUMPROCA)(LPSTR);\ntypedef BOOL    (CALLBACK *DATEFMT_ENUMPROCW)(LPWSTR);\ntypedef BOOL    (CALLBACK *DATEFMT_ENUMPROCEXA)(LPSTR,CALID);\ntypedef BOOL    (CALLBACK *DATEFMT_ENUMPROCEXW)(LPWSTR,CALID);\ntypedef BOOL    (CALLBACK *GEO_ENUMPROC)(GEOID);\ntypedef BOOL    (CALLBACK *LANGGROUPLOCALE_ENUMPROCA)(LGRPID,LCID,LPSTR,LONG_PTR);\ntypedef BOOL    (CALLBACK *LANGGROUPLOCALE_ENUMPROCW)(LGRPID,LCID,LPWSTR,LONG_PTR);\ntypedef BOOL    (CALLBACK *LANGUAGEGROUP_ENUMPROCA)(LGRPID,LPSTR,LPSTR,DWORD,LONG_PTR);\ntypedef BOOL    (CALLBACK *LANGUAGEGROUP_ENUMPROCW)(LGRPID,LPWSTR,LPWSTR,DWORD,LONG_PTR);\ntypedef BOOL    (CALLBACK *LOCALE_ENUMPROCA)(LPSTR);\ntypedef BOOL    (CALLBACK *LOCALE_ENUMPROCW)(LPWSTR);\ntypedef BOOL    (CALLBACK *LOCALE_ENUMPROCEX)(LPWSTR, DWORD, LPARAM);\ntypedef BOOL    (CALLBACK *TIMEFMT_ENUMPROCA)(LPSTR);\ntypedef BOOL    (CALLBACK *TIMEFMT_ENUMPROCW)(LPWSTR);\ntypedef BOOL    (CALLBACK *UILANGUAGE_ENUMPROCA)(LPSTR,LONG_PTR);\ntypedef BOOL    (CALLBACK *UILANGUAGE_ENUMPROCW)(LPWSTR,LONG_PTR);\n#else\ntypedef FARPROC CALINFO_ENUMPROCA;\ntypedef FARPROC CALINFO_ENUMPROCW;\ntypedef FARPROC CALINFO_ENUMPROCEXA;\ntypedef FARPROC CALINFO_ENUMPROCEXW;\ntypedef FARPROC CODEPAGE_ENUMPROCA;\ntypedef FARPROC CODEPAGE_ENUMPROCW;\ntypedef FARPROC DATEFMT_ENUMPROCA;\ntypedef FARPROC DATEFMT_ENUMPROCW;\ntypedef FARPROC DATEFMT_ENUMPROCEXA;\ntypedef FARPROC DATEFMT_ENUMPROCEXW;\ntypedef FARPROC GEO_ENUMPROC;\ntypedef FARPROC LANGGROUPLOCALE_ENUMPROCA;\ntypedef FARPROC LANGGROUPLOCALE_ENUMPROCW;\ntypedef FARPROC LANGUAGEGROUP_ENUMPROCA;\ntypedef FARPROC LANGUAGEGROUP_ENUMPROCW;\ntypedef FARPROC LOCALE_ENUMPROCA;\ntypedef FARPROC LOCALE_ENUMPROCW;\ntypedef FARPROC TIMEFMT_ENUMPROCA;\ntypedef FARPROC TIMEFMT_ENUMPROCW;\ntypedef FARPROC UILANGUAGE_ENUMPROCA;\ntypedef FARPROC UILANGUAGE_ENUMPROCW;\n#endif /* STRICT */\n\nDECL_WINELIB_TYPE_AW(CALINFO_ENUMPROC)\nDECL_WINELIB_TYPE_AW(CALINFO_ENUMPROCEX)\nDECL_WINELIB_TYPE_AW(CODEPAGE_ENUMPROC)\nDECL_WINELIB_TYPE_AW(DATEFMT_ENUMPROC)\nDECL_WINELIB_TYPE_AW(DATEFMT_ENUMPROCEX)\nDECL_WINELIB_TYPE_AW(LANGGROUPLOCALE_ENUMPROC)\nDECL_WINELIB_TYPE_AW(LANGUAGEGROUP_ENUMPROC)\nDECL_WINELIB_TYPE_AW(LOCALE_ENUMPROC)\nDECL_WINELIB_TYPE_AW(TIMEFMT_ENUMPROC)\nDECL_WINELIB_TYPE_AW(UILANGUAGE_ENUMPROC)\n\n/* Geographic Information types */\nenum SYSGEOTYPE\n{\n    GEO_NATION = 1,\n    GEO_LATITUDE,\n    GEO_LONGITUDE,\n    GEO_ISO2,\n    GEO_ISO3,\n    GEO_RFC1766,\n    GEO_LCID,\n    GEO_FRIENDLYNAME,\n    GEO_OFFICIALNAME,\n    GEO_TIMEZONES,\n    GEO_OFFICIALLANGUAGES,\n    GEO_ISO_UN_NUMBER,\n    GEO_PARENT,\n    GEO_DIALINGCODE,\n    GEO_CURRENCYCODE,\n    GEO_CURRENCYSYMBOL,\n    GEO_NAME,\n    GEO_ID\n};\n\nenum SYSGEOCLASS\n{\n    GEOCLASS_REGION = 14,\n    GEOCLASS_NATION = 16\n};\n\n#define GEOID_NOT_AVAILABLE (-1)\n\n\n/* NLS Functions.\n */\n\nWINBASEAPI INT         WINAPI CompareStringA(LCID,DWORD,LPCSTR,INT,LPCSTR,INT);\nWINBASEAPI INT         WINAPI CompareStringW(LCID,DWORD,LPCWSTR,INT,LPCWSTR,INT);\n#define                       CompareString WINELIB_NAME_AW(CompareString)\nWINBASEAPI INT         WINAPI CompareStringEx(LPCWSTR,DWORD,LPCWSTR,INT,LPCWSTR,INT,LPNLSVERSIONINFO,LPVOID,LPARAM);\nWINBASEAPI INT         WINAPI CompareStringOrdinal(const WCHAR *,INT,const WCHAR *,INT,BOOL);\nWINBASEAPI LCID        WINAPI ConvertDefaultLocale(LCID);\nWINBASEAPI BOOL        WINAPI EnumCalendarInfoA(CALINFO_ENUMPROCA,LCID,CALID,CALTYPE);\nWINBASEAPI BOOL        WINAPI EnumCalendarInfoW(CALINFO_ENUMPROCW,LCID,CALID,CALTYPE);\n#define                       EnumCalendarInfo WINELIB_NAME_AW(EnumCalendarInfo)\nWINBASEAPI BOOL        WINAPI EnumCalendarInfoExA(CALINFO_ENUMPROCEXA,LCID,CALID,CALTYPE);\nWINBASEAPI BOOL        WINAPI EnumCalendarInfoExW(CALINFO_ENUMPROCEXW,LCID,CALID,CALTYPE);\n#define                       EnumCalendarInfoEx WINELIB_NAME_AW(EnumCalendarInfoEx)\nWINBASEAPI BOOL        WINAPI EnumCalendarInfoExEx(CALINFO_ENUMPROCEXEX,LPCWSTR,CALID,LPCWSTR,CALTYPE,LPARAM);\nWINBASEAPI BOOL        WINAPI EnumDateFormatsA(DATEFMT_ENUMPROCA,LCID,DWORD);\nWINBASEAPI BOOL        WINAPI EnumDateFormatsW(DATEFMT_ENUMPROCW,LCID,DWORD);\n#define                       EnumDateFormats WINELIB_NAME_AW(EnumDateFormats)\nWINBASEAPI BOOL        WINAPI EnumDateFormatsExA(DATEFMT_ENUMPROCEXA,LCID,DWORD);\nWINBASEAPI BOOL        WINAPI EnumDateFormatsExW(DATEFMT_ENUMPROCEXW,LCID,DWORD);\n#define                       EnumDateFormatsEx WINELIB_NAME_AW(EnumDateFormatsEx)\nWINBASEAPI BOOL        WINAPI EnumDateFormatsExEx(DATEFMT_ENUMPROCEXEX,LPCWSTR,DWORD,LPARAM);\nWINBASEAPI BOOL        WINAPI EnumSystemCodePagesA(CODEPAGE_ENUMPROCA,DWORD);\nWINBASEAPI BOOL        WINAPI EnumSystemCodePagesW(CODEPAGE_ENUMPROCW,DWORD);\n#define                       EnumSystemCodePages WINELIB_NAME_AW(EnumSystemCodePages)\nWINBASEAPI BOOL        WINAPI EnumSystemGeoID(GEOCLASS,GEOID,GEO_ENUMPROC);\nWINBASEAPI BOOL        WINAPI EnumSystemLocalesA(LOCALE_ENUMPROCA,DWORD);\nWINBASEAPI BOOL        WINAPI EnumSystemLocalesW(LOCALE_ENUMPROCW,DWORD);\n#define                       EnumSystemLocales WINELIB_NAME_AW(EnumSystemLocales)\nWINBASEAPI BOOL        WINAPI EnumSystemLocalesEx(LOCALE_ENUMPROCEX,DWORD,LPARAM,LPVOID);\nWINBASEAPI BOOL        WINAPI EnumSystemLanguageGroupsA(LANGUAGEGROUP_ENUMPROCA,DWORD,LONG_PTR);\nWINBASEAPI BOOL        WINAPI EnumSystemLanguageGroupsW(LANGUAGEGROUP_ENUMPROCW,DWORD,LONG_PTR);\n#define                       EnumSystemLanguageGroups WINELIB_NAME_AW(EnumSystemLanguageGroups)\nWINBASEAPI BOOL        WINAPI EnumLanguageGroupLocalesA(LANGGROUPLOCALE_ENUMPROCA,LGRPID,DWORD,LONG_PTR);\nWINBASEAPI BOOL        WINAPI EnumLanguageGroupLocalesW(LANGGROUPLOCALE_ENUMPROCW,LGRPID,DWORD,LONG_PTR);\n#define                       EnumLanguageGroupLocales WINELIB_NAME_AW(EnumLanguageGroupLocales)\nWINBASEAPI BOOL        WINAPI EnumTimeFormatsA(TIMEFMT_ENUMPROCA,LCID,DWORD);\nWINBASEAPI BOOL        WINAPI EnumTimeFormatsW(TIMEFMT_ENUMPROCW,LCID,DWORD);\n#define                       EnumTimeFormats WINELIB_NAME_AW(EnumTimeFormats)\nWINBASEAPI BOOL        WINAPI EnumTimeFormatsEx(TIMEFMT_ENUMPROCEX,LPCWSTR,DWORD,LPARAM);\nWINBASEAPI BOOL        WINAPI EnumUILanguagesA(UILANGUAGE_ENUMPROCA,DWORD,LONG_PTR);\nWINBASEAPI BOOL        WINAPI EnumUILanguagesW(UILANGUAGE_ENUMPROCW,DWORD,LONG_PTR);\n#define                       EnumUILanguages WINELIB_NAME_AW(EnumUILanguages)\nWINBASEAPI INT         WINAPI FoldStringA(DWORD,LPCSTR,INT,LPSTR,INT);\nWINBASEAPI INT         WINAPI FoldStringW(DWORD,LPCWSTR,INT,LPWSTR,INT);\n#define                       FoldString WINELIB_NAME_AW(FoldString)\nWINBASEAPI UINT        WINAPI GetACP(void);\nWINBASEAPI BOOL        WINAPI GetCPInfo(UINT,LPCPINFO);\nWINBASEAPI BOOL        WINAPI GetCPInfoExA(UINT,DWORD,LPCPINFOEXA);\nWINBASEAPI BOOL        WINAPI GetCPInfoExW(UINT,DWORD,LPCPINFOEXW);\n#define                       GetCPInfoEx WINELIB_NAME_AW(GetCPInfoEx)\nWINBASEAPI INT         WINAPI GetCalendarInfoA(LCID,DWORD,DWORD,LPSTR,INT,LPDWORD);\nWINBASEAPI INT         WINAPI GetCalendarInfoW(LCID,DWORD,DWORD,LPWSTR,INT,LPDWORD);\n#define                       GetCalendarInfo WINELIB_NAME_AW(GetCalendarInfo)\nWINBASEAPI INT         WINAPI GetCurrencyFormatA(LCID,DWORD,LPCSTR,const CURRENCYFMTA*,LPSTR,INT);\nWINBASEAPI INT         WINAPI GetCurrencyFormatEx(LPCWSTR,DWORD,LPCWSTR,const CURRENCYFMTW*,LPWSTR,int);\nWINBASEAPI INT         WINAPI GetCurrencyFormatW(LCID,DWORD,LPCWSTR,const CURRENCYFMTW*,LPWSTR,INT);\n#define                       GetCurrencyFormat WINELIB_NAME_AW(GetCurrencyFormat)\nWINBASEAPI INT         WINAPI GetDateFormatA(LCID,DWORD,const SYSTEMTIME*,LPCSTR,LPSTR,INT);\nWINBASEAPI INT         WINAPI GetDateFormatEx(LPCWSTR,DWORD,const SYSTEMTIME*,LPCWSTR,LPWSTR,INT,LPCWSTR);\nWINBASEAPI INT         WINAPI GetDateFormatW(LCID,DWORD,const SYSTEMTIME*,LPCWSTR,LPWSTR,INT);\n#define                       GetDateFormat WINELIB_NAME_AW(GetDateFormat)\nWINBASEAPI BOOL        WINAPI GetFileMUIInfo(DWORD,PCWSTR,PFILEMUIINFO,DWORD*);\nWINBASEAPI BOOL        WINAPI GetFileMUIPath(DWORD,PCWSTR,PWSTR,PULONG,PWSTR,PULONG,PULONGLONG);\nWINBASEAPI INT         WINAPI GetGeoInfoA(GEOID,GEOTYPE,LPSTR,INT,LANGID);\nWINBASEAPI INT         WINAPI GetGeoInfoW(GEOID,GEOTYPE,LPWSTR,INT,LANGID);\n#define                       GetGeoInfo WINELIB_NAME_AW(GetGeoInfo)\nWINBASEAPI INT         WINAPI GetLocaleInfoA(LCID,LCTYPE,LPSTR,INT);\nWINBASEAPI INT         WINAPI GetLocaleInfoW(LCID,LCTYPE,LPWSTR,INT);\n#define                       GetLocaleInfo WINELIB_NAME_AW(GetLocaleInfo)\nWINBASEAPI INT         WINAPI GetLocaleInfoEx(LPCWSTR,LCTYPE,LPWSTR,INT);\nWINBASEAPI INT         WINAPI GetNumberFormatA(LCID,DWORD,LPCSTR,const NUMBERFMTA*,LPSTR,INT);\nWINBASEAPI INT         WINAPI GetNumberFormatW(LCID,DWORD,LPCWSTR,const NUMBERFMTW*,LPWSTR,INT);\n#define                       GetNumberFormat WINELIB_NAME_AW(GetNumberFormat)\nWINBASEAPI UINT        WINAPI GetOEMCP(void);\nWINBASEAPI BOOL        WINAPI GetProcessPreferredUILanguages(DWORD,PULONG,PZZWSTR,PULONG);\nWINBASEAPI BOOL        WINAPI GetStringTypeA(LCID,DWORD,LPCSTR,INT,LPWORD);\nWINBASEAPI BOOL        WINAPI GetStringTypeW(DWORD,LPCWSTR,INT,LPWORD);\nWINBASEAPI BOOL        WINAPI GetStringTypeExA(LCID,DWORD,LPCSTR,INT,LPWORD);\nWINBASEAPI BOOL        WINAPI GetStringTypeExW(LCID,DWORD,LPCWSTR,INT,LPWORD);\n#define                       GetStringTypeEx WINELIB_NAME_AW(GetStringTypeEx)\nWINBASEAPI LANGID      WINAPI GetSystemDefaultLangID(void);\nWINBASEAPI INT         WINAPI GetSystemDefaultLocaleName(LPWSTR,int);\nWINBASEAPI LCID        WINAPI GetSystemDefaultLCID(void);\nWINBASEAPI LANGID      WINAPI GetSystemDefaultUILanguage(void);\nWINBASEAPI BOOL        WINAPI GetSystemPreferredUILanguages(DWORD,ULONG*,WCHAR*,ULONG*);\nWINBASEAPI LCID        WINAPI GetThreadLocale(void);\nWINBASEAPI BOOL        WINAPI GetThreadPreferredUILanguages(DWORD,ULONG*,WCHAR*,ULONG*);\nWINBASEAPI LANGID      WINAPI GetThreadUILanguage(void);\nWINBASEAPI INT         WINAPI GetTimeFormatA(LCID,DWORD,const SYSTEMTIME*,LPCSTR,LPSTR,INT);\nWINBASEAPI INT         WINAPI GetTimeFormatEx(LPCWSTR,DWORD,const SYSTEMTIME*,LPCWSTR,LPWSTR,INT);\nWINBASEAPI INT         WINAPI GetTimeFormatW(LCID,DWORD,const SYSTEMTIME*,LPCWSTR,LPWSTR,INT);\n#define                       GetTimeFormat WINELIB_NAME_AW(GetTimeFormat)\nWINBASEAPI LANGID      WINAPI GetUserDefaultLangID(void);\nWINBASEAPI LCID        WINAPI GetUserDefaultLCID(void);\nWINBASEAPI INT         WINAPI GetUserDefaultLocaleName(LPWSTR,int);\nWINBASEAPI LANGID      WINAPI GetUserDefaultUILanguage(void);\nWINBASEAPI GEOID       WINAPI GetUserGeoID(GEOCLASS);\nWINNORMALIZEAPI INT    WINAPI IdnToAscii(DWORD,LPCWSTR,INT,LPWSTR,INT);\nWINNORMALIZEAPI INT    WINAPI IdnToNameprepUnicode(DWORD,LPCWSTR,INT,LPWSTR,INT);\nWINNORMALIZEAPI INT    WINAPI IdnToUnicode(DWORD,LPCWSTR,INT,LPWSTR,INT);\nWINBASEAPI BOOL        WINAPI IsDBCSLeadByte(BYTE);\nWINBASEAPI BOOL        WINAPI IsDBCSLeadByteEx(UINT,BYTE);\nWINNORMALIZEAPI BOOL   WINAPI IsNormalizedString(NORM_FORM,LPCWSTR,INT);\nWINBASEAPI BOOL        WINAPI IsValidCodePage(UINT);\nWINBASEAPI BOOL        WINAPI IsValidLanguageGroup(LGRPID,DWORD);\nWINBASEAPI BOOL        WINAPI IsValidLocale(LCID,DWORD);\nWINBASEAPI BOOL        WINAPI IsValidLocaleName(LPCWSTR);\nWINBASEAPI INT         WINAPI LCIDToLocaleName(LCID,LPWSTR,INT,DWORD);\nWINBASEAPI INT         WINAPI LCMapStringA(LCID,DWORD,LPCSTR,INT,LPSTR,INT);\nWINBASEAPI INT         WINAPI LCMapStringW(LCID,DWORD,LPCWSTR,INT,LPWSTR,INT);\n#define                       LCMapString WINELIB_NAME_AW(LCMapString)\nWINBASEAPI INT         WINAPI LCMapStringEx(LPCWSTR,DWORD,LPCWSTR,INT,LPWSTR,INT,LPNLSVERSIONINFO,LPVOID,LPARAM);\nWINBASEAPI LCID        WINAPI LocaleNameToLCID(LPCWSTR,DWORD);\nWINBASEAPI INT         WINAPI MultiByteToWideChar(UINT,DWORD,LPCSTR,INT,LPWSTR,INT);\nWINNORMALIZEAPI INT    WINAPI NormalizeString(NORM_FORM,LPCWSTR,INT,LPWSTR,INT);\nWINBASEAPI INT         WINAPI ResolveLocaleName(LPCWSTR,LPWSTR,INT);\nWINBASEAPI INT         WINAPI SetCalendarInfoA(LCID,CALID,CALTYPE,LPCSTR);\nWINBASEAPI INT         WINAPI SetCalendarInfoW(LCID,CALID,CALTYPE,LPCWSTR);\n#define                       SetCalendarInfo WINELIB_NAME_AW(SetCalendarInfo)\nWINBASEAPI BOOL        WINAPI SetLocaleInfoA(LCID,LCTYPE,LPCSTR);\nWINBASEAPI BOOL        WINAPI SetLocaleInfoW(LCID,LCTYPE,LPCWSTR);\n#define                       SetLocaleInfo WINELIB_NAME_AW(SetLocaleInfo)\nWINBASEAPI BOOL        WINAPI SetThreadLocale(LCID);\nWINBASEAPI LANGID      WINAPI SetThreadUILanguage(LANGID);\nWINBASEAPI BOOL        WINAPI SetUserGeoID(GEOID);\nWINBASEAPI INT         WINAPI WideCharToMultiByte(UINT,DWORD,LPCWSTR,INT,LPSTR,INT,LPCSTR,LPBOOL);\nWINBASEAPI INT         WINAPI FindNLSStringEx(const WCHAR *,DWORD,const WCHAR *,INT,const WCHAR *,INT,INT *,NLSVERSIONINFO *,void *,LPARAM);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* !NONLS */\n#endif  /* __WINE_WINNLS_H */\n"
  },
  {
    "path": "wine/windows/winnls32.h",
    "content": "/*\n * Copyright (C) 2005 Diego Petteno\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _WINNLS32_\n#define _WINNLS32_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nUINT        WINAPI WINNLSGetIMEHotkey(HWND);\nBOOL        WINAPI WINNLSEnableIME(HWND, BOOL);\nBOOL        WINAPI WINNLSGetEnableStatus(HWND);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* _WINNLS32_ */\n"
  },
  {
    "path": "wine/windows/winnt.h",
    "content": "/*\n * Win32 definitions for Windows NT\n *\n * Copyright 1996 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _WINNT_\n#define _WINNT_\n\n#include <basetsd.h>\n#include <guiddef.h>\n\n#ifndef RC_INVOKED\n#include <ctype.h>\n#include <stddef.h>\n#include <string.h>\n#endif\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifdef _NTSYSTEM_\n#define NTSYSAPI\n#else\n#define NTSYSAPI DECLSPEC_IMPORT\n#endif\n\n#define NTAPI __stdcall\n\n#ifndef MIDL_PASS\n# if defined(_MSC_VER)\n#  define DECLSPEC_IMPORT __declspec(dllimport)\n# elif defined(__MINGW32__) || defined(__CYGWIN__)\n#  define DECLSPEC_IMPORT __attribute__((dllimport))\n# else\n#  define DECLSPEC_IMPORT DECLSPEC_HIDDEN\n# endif\n#else\n# define DECLSPEC_IMPORT\n#endif\n\n#ifndef DECLSPEC_NORETURN\n# if defined(_MSC_VER) && (_MSC_VER >= 1200) && !defined(MIDL_PASS)\n#  define DECLSPEC_NORETURN __declspec(noreturn)\n# elif defined(__GNUC__)\n#  define DECLSPEC_NORETURN __attribute__((noreturn))\n# else\n#  define DECLSPEC_NORETURN\n# endif\n#endif\n\n#ifndef DECLSPEC_ALIGN\n# if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)\n#  define DECLSPEC_ALIGN(x) __declspec(align(x))\n# elif defined(__GNUC__)\n#  define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))\n# else\n#  define DECLSPEC_ALIGN(x)\n# endif\n#endif\n\n#ifndef DECLSPEC_CACHEALIGN\n# define DECLSPEC_CACHEALIGN DECLSPEC_ALIGN(128)\n#endif\n\n#ifndef DECLSPEC_UUID\n# if defined(_MSC_VER) && (_MSC_VER >= 1100) && defined (__cplusplus)\n#  define DECLSPEC_UUID(x) __declspec(uuid(x))\n# else\n#  define DECLSPEC_UUID(x)\n# endif\n#endif\n\n#ifndef DECLSPEC_NOVTABLE\n# if defined(_MSC_VER) && (_MSC_VER >= 1100) && defined(__cplusplus)\n#  define DECLSPEC_NOVTABLE __declspec(novtable)\n# else\n#  define DECLSPEC_NOVTABLE\n# endif\n#endif\n\n#ifndef DECLSPEC_SELECTANY\n#if defined(_MSC_VER) && (_MSC_VER >= 1100)\n#define DECLSPEC_SELECTANY __declspec(selectany)\n#else\n#define DECLSPEC_SELECTANY\n#endif\n#endif\n\n#ifndef NOP_FUNCTION\n# if defined(_MSC_VER) && (_MSC_VER >= 1210)\n#  define NOP_FUNCTION __noop\n# else\n#  define NOP_FUNCTION (void)0\n# endif\n#endif\n\n#ifndef DECLSPEC_ADDRSAFE\n# if defined(_MSC_VER) && (_MSC_VER >= 1200) && (defined(_M_ALPHA) || defined(_M_AXP64))\n#  define DECLSPEC_ADDRSAFE __declspec(address_safe)\n# else\n#  define DECLSPEC_ADDRSAFE\n# endif\n#endif\n\n#ifndef FORCEINLINE\n# if defined(_MSC_VER) && (_MSC_VER >= 1200)\n#  define FORCEINLINE __forceinline\n# elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))\n#  define FORCEINLINE inline __attribute__((always_inline))\n# else\n#  define FORCEINLINE inline\n# endif\n#endif\n\n#ifndef DECLSPEC_DEPRECATED\n# if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)\n#  define DECLSPEC_DEPRECATED __declspec(deprecated)\n#  define DEPRECATE_SUPPORTED\n# elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))\n#  define DECLSPEC_DEPRECATED __attribute__((deprecated))\n#  define DEPRECATE_SUPPORTED\n# else\n#  define DECLSPEC_DEPRECATED\n#  undef  DEPRECATE_SUPPORTED\n# endif\n#endif\n\n/* a couple of useful Wine extensions */\n\n#ifdef _MSC_VER\n# define DECLSPEC_EXPORT __declspec(dllexport)\n#elif defined(__MINGW32__)\n# define DECLSPEC_EXPORT __attribute__((dllexport))\n#elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3))) && !defined(__sun)\n# define DECLSPEC_EXPORT __attribute__((visibility (\"default\")))\n#else\n# define DECLSPEC_EXPORT\n#endif\n\n#if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__) || defined(__sun)\n# define DECLSPEC_HIDDEN\n#elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))\n# define DECLSPEC_HIDDEN __attribute__((visibility (\"hidden\")))\n#else\n# define DECLSPEC_HIDDEN\n#endif\n\n#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)))\n#define __WINE_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))\n#else\n#define __WINE_ALLOC_SIZE(x)\n#endif\n\n/* Anonymous union/struct handling */\n\n#ifndef NONAMELESSSTRUCT\n# ifdef __GNUC__\n   /* Anonymous struct support starts with gcc 2.96 or gcc/g++ 3.x */\n#  if (__GNUC__ < 2) || ((__GNUC__ == 2) && (defined(__cplusplus) || (__GNUC_MINOR__ < 96)))\n#   define NONAMELESSSTRUCT\n#  endif\n# elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)\n#  define NONAMELESSSTRUCT\n# endif\n#endif  /* NONAMELESSSTRUCT */\n\n#ifndef NONAMELESSUNION\n# ifdef __GNUC__\n   /* Anonymous unions support starts with gcc 2.96/g++ 2.95 */\n#  if (__GNUC__ < 2) || ((__GNUC__ == 2) && ((__GNUC_MINOR__ < 95) || ((__GNUC_MINOR__ == 95) && !defined(__cplusplus))))\n#   define NONAMELESSUNION\n#  endif\n# elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)\n#  define NONAMELESSUNION\n# endif\n#endif  /* NONAMELESSUNION */\n\n#undef DUMMYSTRUCTNAME\n#undef DUMMYSTRUCTNAME1\n#undef DUMMYSTRUCTNAME2\n#undef DUMMYSTRUCTNAME3\n#undef DUMMYSTRUCTNAME4\n#undef DUMMYSTRUCTNAME5\n#ifndef NONAMELESSSTRUCT\n#define DUMMYSTRUCTNAME\n#define DUMMYSTRUCTNAME1\n#define DUMMYSTRUCTNAME2\n#define DUMMYSTRUCTNAME3\n#define DUMMYSTRUCTNAME4\n#define DUMMYSTRUCTNAME5\n#else /* !defined(NONAMELESSSTRUCT) */\n#define DUMMYSTRUCTNAME   s\n#define DUMMYSTRUCTNAME1  s1\n#define DUMMYSTRUCTNAME2  s2\n#define DUMMYSTRUCTNAME3  s3\n#define DUMMYSTRUCTNAME4  s4\n#define DUMMYSTRUCTNAME5  s5\n#endif /* !defined(NONAMELESSSTRUCT) */\n\n#undef DUMMYUNIONNAME\n#undef DUMMYUNIONNAME1\n#undef DUMMYUNIONNAME2\n#undef DUMMYUNIONNAME3\n#undef DUMMYUNIONNAME4\n#undef DUMMYUNIONNAME5\n#undef DUMMYUNIONNAME6\n#undef DUMMYUNIONNAME7\n#undef DUMMYUNIONNAME8\n#ifndef NONAMELESSUNION\n#define DUMMYUNIONNAME\n#define DUMMYUNIONNAME1\n#define DUMMYUNIONNAME2\n#define DUMMYUNIONNAME3\n#define DUMMYUNIONNAME4\n#define DUMMYUNIONNAME5\n#define DUMMYUNIONNAME6\n#define DUMMYUNIONNAME7\n#define DUMMYUNIONNAME8\n#else /* !defined(NONAMELESSUNION) */\n#define DUMMYUNIONNAME   u\n#define DUMMYUNIONNAME1  u1\n#define DUMMYUNIONNAME2  u2\n#define DUMMYUNIONNAME3  u3\n#define DUMMYUNIONNAME4  u4\n#define DUMMYUNIONNAME5  u5\n#define DUMMYUNIONNAME6  u6\n#define DUMMYUNIONNAME7  u7\n#define DUMMYUNIONNAME8  u8\n#endif /* !defined(NONAMELESSUNION) */\n\n#undef __C89_NAMELESS\n#undef __C89_NAMELESSSTRUCTNAME\n#undef __C89_NAMELESSSTRUCTNAME1\n#undef __C89_NAMELESSSTRUCTNAME2\n#undef __C89_NAMELESSSTRUCTNAME3\n#undef __C89_NAMELESSSTRUCTNAME4\n#undef __C89_NAMELESSSTRUCTNAME5\n#undef __C89_NAMELESSUNIONNAME\n#undef __C89_NAMELESSUNIONNAME1\n#undef __C89_NAMELESSUNIONNAME2\n#undef __C89_NAMELESSUNIONNAME3\n#undef __C89_NAMELESSUNIONNAME4\n#undef __C89_NAMELESSUNIONNAME5\n#undef __C89_NAMELESSUNIONNAME6\n#undef __C89_NAMELESSUNIONNAME7\n#undef __C89_NAMELESSUNIONNAME8\n\n#if !defined(__WINESRC__) && !defined(WINE_NO_NAMELESS_EXTENSION)\n# ifdef __GNUC__\n   /* Anonymous structs support starts with gcc 2.96/g++ 2.95 */\n#  if (__GNUC__ > 2) || ((__GNUC__ == 2) && ((__GNUC_MINOR__ > 95) || ((__GNUC_MINOR__ == 95) && defined(__cplusplus))))\n#   define __C89_NAMELESS __extension__\n#  endif\n# elif defined(_MSC_VER)\n#  define __C89_NAMELESS\n# endif\n#endif\n\n#ifdef __C89_NAMELESS\n#  define __C89_NAMELESSSTRUCTNAME\n#  define __C89_NAMELESSSTRUCTNAME1\n#  define __C89_NAMELESSSTRUCTNAME2\n#  define __C89_NAMELESSSTRUCTNAME3\n#  define __C89_NAMELESSSTRUCTNAME4\n#  define __C89_NAMELESSSTRUCTNAME5\n#  define __C89_NAMELESSUNIONNAME\n#  define __C89_NAMELESSUNIONNAME1\n#  define __C89_NAMELESSUNIONNAME2\n#  define __C89_NAMELESSUNIONNAME3\n#  define __C89_NAMELESSUNIONNAME4\n#  define __C89_NAMELESSUNIONNAME5\n#  define __C89_NAMELESSUNIONNAME6\n#  define __C89_NAMELESSUNIONNAME7\n#  define __C89_NAMELESSUNIONNAME8\n#else\n#  define __C89_NAMELESS\n#  define __C89_NAMELESSSTRUCTNAME DUMMYSTRUCTNAME\n#  define __C89_NAMELESSSTRUCTNAME1 DUMMYSTRUCTNAME1\n#  define __C89_NAMELESSSTRUCTNAME2 DUMMYSTRUCTNAME2\n#  define __C89_NAMELESSSTRUCTNAME3 DUMMYSTRUCTNAME3\n#  define __C89_NAMELESSSTRUCTNAME4 DUMMYSTRUCTNAME4\n#  define __C89_NAMELESSSTRUCTNAME5 DUMMYSTRUCTNAME5\n#  define __C89_NAMELESSUNIONNAME DUMMYUNIONNAME\n#  define __C89_NAMELESSUNIONNAME1 DUMMYUNIONNAME1\n#  define __C89_NAMELESSUNIONNAME2 DUMMYUNIONNAME2\n#  define __C89_NAMELESSUNIONNAME3 DUMMYUNIONNAME3\n#  define __C89_NAMELESSUNIONNAME4 DUMMYUNIONNAME4\n#  define __C89_NAMELESSUNIONNAME5 DUMMYUNIONNAME5\n#  define __C89_NAMELESSUNIONNAME6 DUMMYUNIONNAME6\n#  define __C89_NAMELESSUNIONNAME7 DUMMYUNIONNAME7\n#  define __C89_NAMELESSUNIONNAME8 DUMMYUNIONNAME8\n#endif\n\n/* C99 restrict support */\n\n#if defined(ENABLE_RESTRICTED) && !defined(MIDL_PASS) && !defined(RC_INVOKED)\n# if defined(_MSC_VER) && defined(_M_MRX000)\n#  define RESTRICTED_POINTER __restrict\n# elif defined(__GNUC__) && ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 95)))\n#  define RESTRICTED_POINTER __restrict\n# else\n#  define RESTRICTED_POINTER\n# endif\n#else\n# define RESTRICTED_POINTER\n#endif\n\n/* C99 unaligned support */\n\n#ifndef UNALIGNED\n#if defined(_MSC_VER) && (defined(_M_MRX000) || defined(_M_ALPHA) || defined(_M_PPC) || defined(_M_IA64) || defined(_M_AMD64))\n# define UNALIGNED __unaligned\n# ifdef _WIN64\n#  define UNALIGNED64 __unaligned\n# else\n#  define UNALIGNED64\n# endif\n#else\n# define UNALIGNED\n# define UNALIGNED64\n#endif\n#endif\n\n/* Alignment macros */\n\n#if defined(_WIN64) || (defined(_MSC_VER) && defined(_M_ALPHA)) || defined(__alpha__)\n#define MAX_NATURAL_ALIGNMENT sizeof(ULONGLONG)\n#define MEMORY_ALLOCATION_ALIGNMENT 16\n#else\n#define MAX_NATURAL_ALIGNMENT sizeof(DWORD)\n#define MEMORY_ALLOCATION_ALIGNMENT 8\n#endif\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus)\n# define TYPE_ALIGNMENT(t) __alignof(t)\n#elif defined(__GNUC__)\n# define TYPE_ALIGNMENT(t) __alignof__(t)\n#else\n# define TYPE_ALIGNMENT(t) FIELD_OFFSET(struct { char x; t test; }, test)\n#endif\n\n#ifdef _WIN64\n# define PROBE_ALIGNMENT(_s) \\\n    (TYPE_ALIGNMENT(_s) > TYPE_ALIGNMENT(DWORD) ? \\\n    TYPE_ALIGNMENT(_s) : TYPE_ALIGNMENT(DWORD))\n# define PROBE_ALIGNMENT32(_s) TYPE_ALIGNMENT(DWORD)\n#else\n# define PROBE_ALIGNMENT(_s) TYPE_ALIGNMENT(DWORD)\n#endif\n\n/* Compile time assertion */\n\n#if defined(_MSC_VER)\n# define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]\n#else\n# define C_ASSERT(e) extern void __C_ASSERT__(int [(e)?1:-1])\n#endif\n\n/* Eliminate Microsoft C/C++ compiler warning 4715 */\n#if defined(_MSC_VER) && (_MSC_VER > 1200)\n# define DEFAULT_UNREACHABLE default: __assume(0)\n#elif defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5))))\n# define DEFAULT_UNREACHABLE default: __builtin_unreachable()\n#else\n# define DEFAULT_UNREACHABLE default:\n#endif\n\n/* Error Masks */\n#define APPLICATION_ERROR_MASK       0x20000000\n#define ERROR_SEVERITY_SUCCESS       0x00000000\n#define ERROR_SEVERITY_INFORMATIONAL 0x40000000\n#define ERROR_SEVERITY_WARNING       0x80000000\n#define ERROR_SEVERITY_ERROR         0xC0000000\n\n#ifdef __cplusplus\n#define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) \\\nextern \"C++\" { \\\n    inline ENUMTYPE operator | (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)|((int)b)); } \\\n    inline ENUMTYPE operator |= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) |= ((int)b)); } \\\n    inline ENUMTYPE operator & (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)&((int)b)); } \\\n    inline ENUMTYPE operator &= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) &= ((int)b)); } \\\n    inline ENUMTYPE operator ~ (ENUMTYPE a) { return (ENUMTYPE)(~((int)a)); } \\\n    inline ENUMTYPE operator ^ (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)^((int)b)); } \\\n    inline ENUMTYPE operator ^= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) ^= ((int)b)); } \\\n}\n#else\n#define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) /* */\n#endif\n\n/* Microsoft's macros for declaring functions */\n\n#ifdef __cplusplus\n# define EXTERN_C    extern \"C\"\n#else\n# define EXTERN_C    extern\n#endif\n\n#define STDMETHODCALLTYPE       __stdcall\n#define STDMETHODVCALLTYPE      __cdecl\n#define STDAPICALLTYPE          __stdcall\n#define STDAPIVCALLTYPE         __cdecl\n\n#define STDAPI                  EXTERN_C HRESULT STDAPICALLTYPE\n#define STDAPI_(type)           EXTERN_C type STDAPICALLTYPE\n#define STDMETHODIMP            HRESULT STDMETHODCALLTYPE\n#define STDMETHODIMP_(type)     type STDMETHODCALLTYPE\n#define STDAPIV                 EXTERN_C HRESULT STDAPIVCALLTYPE\n#define STDAPIV_(type)          EXTERN_C type STDAPIVCALLTYPE\n#define STDMETHODIMPV           HRESULT STDMETHODVCALLTYPE\n#define STDMETHODIMPV_(type)    type STDMETHODVCALLTYPE\n\n/* Define the basic types */\n#ifndef VOID\n#define VOID void\n#endif\ntypedef VOID           *PVOID;\ntypedef VOID           *PVOID64;\ntypedef BYTE            BOOLEAN,    *PBOOLEAN;\ntypedef char            CHAR,       *PCHAR;\ntypedef short           SHORT,      *PSHORT;\n#ifdef _MSC_VER\ntypedef long            LONG,       *PLONG;\n#else\ntypedef int             LONG,       *PLONG;\n#endif\n\n/* Some systems might have wchar_t, but we really need 16 bit characters */\n#ifdef WINE_UNICODE_NATIVE\ntypedef wchar_t         WCHAR,      *PWCHAR;\n#else\ntypedef unsigned short  WCHAR,      *PWCHAR;\n#endif\n\ntypedef ULONG           UCSCHAR;\n#define MIN_UCSCHAR                 (0)\n#define MAX_UCSCHAR                 (0x0010ffff)\n#define UCSCHAR_INVALID_CHARACTER   (0xffffffff)\n\n/* 'Extended/Wide' numerical types */\n#ifndef _ULONGLONG_\n# define _ULONGLONG_\n# ifdef _MSC_VER\ntypedef signed __int64   LONGLONG,  *PLONGLONG;\ntypedef unsigned __int64 ULONGLONG, *PULONGLONG;\n# else\ntypedef signed __int64   DECLSPEC_ALIGN(8) LONGLONG,   *PLONGLONG;\ntypedef unsigned __int64 DECLSPEC_ALIGN(8) ULONGLONG,  *PULONGLONG;\n# endif\n#endif\n\n#ifndef _DWORDLONG_\n# define _DWORDLONG_\n# ifdef _MSC_VER\ntypedef ULONGLONG DWORDLONG, *PDWORDLONG;\n# else\ntypedef ULONGLONG   DECLSPEC_ALIGN(8) DWORDLONG,   *PDWORDLONG;\n# endif\n#endif\n\n/* ANSI string types */\ntypedef CHAR           *PCH,        *LPCH,      *PNZCH;\ntypedef const CHAR     *PCCH,       *LPCCH,     *PCNZCH;\ntypedef CHAR           *PSTR,       *LPSTR,     *NPSTR;\ntypedef const CHAR     *PCSTR,      *LPCSTR;\ntypedef CHAR           *PZZSTR;\ntypedef const CHAR     *PCZZSTR;\n\n/* Unicode string types */\ntypedef const WCHAR    *PCWCHAR,    *LPCUWCHAR, *PCUWCHAR;\ntypedef WCHAR          *PWCH,       *LPWCH;\ntypedef const WCHAR    *PCWCH,      *LPCWCH;\ntypedef WCHAR          *PNZWCH,     *PUNZWCH;\ntypedef const WCHAR    *PCNZWCH,    *PCUNZWCH;\ntypedef WCHAR          *PWSTR,      *LPWSTR,    *NWPSTR;\ntypedef const WCHAR    *PCWSTR,     *LPCWSTR;\ntypedef WCHAR          *PZZWSTR,    *PUZZWSTR;\ntypedef const WCHAR    *PCZZWSTR,   *PCUZZWSTR;\ntypedef PWSTR          *PZPWSTR;\ntypedef PCWSTR         *PZPCWSTR;\n\n/* Neutral character and string types */\n/* These are only defined for Winelib, i.e. _not_ defined for\n * the emulator. The reason is they depend on the UNICODE\n * macro which only exists in the user's code.\n */\n#ifndef WINE_NO_UNICODE_MACROS\n# ifdef UNICODE\n# ifndef _TCHAR_DEFINED\ntypedef WCHAR           TCHAR,      *PTCHAR;\n# define _TCHAR_DEFINED\n#endif\ntypedef LPWCH           PTCH,        LPTCH;\ntypedef LPCWCH          PCTCH,       LPCTCH;\ntypedef LPWSTR          PTSTR,       LPTSTR;\ntypedef LPCWSTR         PCTSTR,      LPCTSTR;\ntypedef LPWSTR          PUTSTR,      LPUTSTR;\ntypedef LPCWSTR         PCUTSTR,     LPCUTSTR;\ntypedef PNZWCH          PNZTCH;\ntypedef PUNZWCH         PUNZTCH;\ntypedef PCNZWCH         PCNZTCH;\ntypedef PCUNZWCH        PCUNZTCH;\ntypedef PZZWSTR         PZZTSTR;\ntypedef PCZZWSTR        PCZZTSTR;\ntypedef PUZZWSTR        PUZZTSTR;\ntypedef PCUZZWSTR       PCUZZTSTR;\n# else  /* UNICODE */\n# ifndef _TCHAR_DEFINED\ntypedef CHAR            TCHAR,      *PTCHAR;\n# define _TCHAR_DEFINED\n# endif\ntypedef LPCH            PTCH,        LPTCH;\ntypedef LPCCH           PCTCH,       LPCTCH;\ntypedef LPSTR           PTSTR,       LPTSTR;\ntypedef LPCSTR          PCTSTR,      LPCTSTR;\ntypedef PNZCH           PNZTCH,      PUNZTCH;\ntypedef PCNZCH          PCNZTCH,     PCUNZTCH;\ntypedef PZZSTR          PZZTSTR,     PUZZTSTR;\ntypedef PCZZSTR         PCZZTSTR,    PCUZZTSTR;\n# endif /* UNICODE */\n#endif   /* WINE_NO_UNICODE_MACROS */\n\n/* UCS string types */\ntypedef UCSCHAR         *PUCSCHAR,  *PUUCSCHAR;\ntypedef const UCSCHAR   *PCUCSCHAR, *PCUUCSCHAR;\ntypedef UCSCHAR         *PUCSSTR,   *PUUCSSTR;\ntypedef const UCSCHAR   *PCUCSSTR,  *PCUUCSSTR;\n\n/* Misc common WIN32 types */\ntypedef char            CCHAR;\ntypedef DWORD           LCID,       *PLCID;\ntypedef WORD            LANGID;\ntypedef DWORD\t\tEXECUTION_STATE;\n#ifndef _HRESULT_DEFINED\n#define _HRESULT_DEFINED\ntypedef LONG            HRESULT;\n#endif\n\n/* Handle type */\n\ntypedef void *HANDLE;\ntypedef HANDLE *PHANDLE, *LPHANDLE;\n\n#ifdef STRICT\n#define DECLARE_HANDLE(a) typedef struct a##__ { int unused; } *a\n#else /*STRICT*/\n#define DECLARE_HANDLE(a) typedef HANDLE a\n#endif /*STRICT*/\n\ntypedef BYTE  FCHAR;\ntypedef WORD  FSHORT;\ntypedef DWORD FLONG;\n\n/* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */\n#ifndef __MSABI_LONG\n# if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)\n#  define __MSABI_LONG(x)         x ## l\n# else\n#  define __MSABI_LONG(x)         x\n# endif\n#endif\n\n/* Defines */\n\n#ifndef WIN32_NO_STATUS\n\n#define STATUS_WAIT_0                    ((DWORD) 0x00000000)\n#define STATUS_ABANDONED_WAIT_0          ((DWORD) 0x00000080)\n#define STATUS_USER_APC                  ((DWORD) 0x000000C0)\n#define STATUS_TIMEOUT                   ((DWORD) 0x00000102)\n#define STATUS_PENDING                   ((DWORD) 0x00000103)\n#define STATUS_SEGMENT_NOTIFICATION      ((DWORD) 0x40000005)\n#define STATUS_GUARD_PAGE_VIOLATION      ((DWORD) 0x80000001)\n#define STATUS_DATATYPE_MISALIGNMENT     ((DWORD) 0x80000002)\n#define STATUS_BREAKPOINT                ((DWORD) 0x80000003)\n#define STATUS_SINGLE_STEP               ((DWORD) 0x80000004)\n#define STATUS_ACCESS_VIOLATION          ((DWORD) 0xC0000005)\n#define STATUS_IN_PAGE_ERROR             ((DWORD) 0xC0000006)\n#define STATUS_INVALID_HANDLE            ((DWORD) 0xC0000008)\n#define STATUS_NO_MEMORY                 ((DWORD) 0xC0000017)\n#define STATUS_ILLEGAL_INSTRUCTION       ((DWORD) 0xC000001D)\n#define STATUS_NONCONTINUABLE_EXCEPTION  ((DWORD) 0xC0000025)\n#define STATUS_INVALID_DISPOSITION       ((DWORD) 0xC0000026)\n#define STATUS_ARRAY_BOUNDS_EXCEEDED     ((DWORD) 0xC000008C)\n#define STATUS_FLOAT_DENORMAL_OPERAND    ((DWORD) 0xC000008D)\n#define STATUS_FLOAT_DIVIDE_BY_ZERO      ((DWORD) 0xC000008E)\n#define STATUS_FLOAT_INEXACT_RESULT      ((DWORD) 0xC000008F)\n#define STATUS_FLOAT_INVALID_OPERATION   ((DWORD) 0xC0000090)\n#define STATUS_FLOAT_OVERFLOW            ((DWORD) 0xC0000091)\n#define STATUS_FLOAT_STACK_CHECK         ((DWORD) 0xC0000092)\n#define STATUS_FLOAT_UNDERFLOW           ((DWORD) 0xC0000093)\n#define STATUS_INTEGER_DIVIDE_BY_ZERO    ((DWORD) 0xC0000094)\n#define STATUS_INTEGER_OVERFLOW          ((DWORD) 0xC0000095)\n#define STATUS_PRIVILEGED_INSTRUCTION    ((DWORD) 0xC0000096)\n#define STATUS_STACK_OVERFLOW            ((DWORD) 0xC00000FD)\n#define STATUS_CONTROL_C_EXIT            ((DWORD) 0xC000013A)\n#define STATUS_FLOAT_MULTIPLE_FAULTS     ((DWORD) 0xC00002B4)\n#define STATUS_FLOAT_MULTIPLE_TRAPS      ((DWORD) 0xC00002B5)\n#define STATUS_REG_NAT_CONSUMPTION       ((DWORD) 0xC00002C9)\n#define STATUS_SXS_EARLY_DEACTIVATION    ((DWORD) 0xC015000F)\n#define STATUS_SXS_INVALID_DEACTIVATION  ((DWORD) 0xC0150010)\n\n/* status values for ContinueDebugEvent */\n#define DBG_EXCEPTION_HANDLED       ((DWORD) 0x00010001)\n#define DBG_CONTINUE                ((DWORD) 0x00010002)\n#define DBG_TERMINATE_THREAD        ((DWORD) 0x40010003)\n#define DBG_TERMINATE_PROCESS       ((DWORD) 0x40010004)\n#define DBG_CONTROL_C               ((DWORD) 0x40010005)\n#define DBG_PRINTEXCEPTION_C        ((DWORD) 0x40010006)\n#define DBG_RIPEXCEPTION            ((DWORD) 0x40010007)\n#define DBG_CONTROL_BREAK           ((DWORD) 0x40010008)\n#define DBG_COMMAND_EXCEPTION       ((DWORD) 0x40010009)\n#define DBG_EXCEPTION_NOT_HANDLED   ((DWORD) 0x80010001)\n\n#endif /* WIN32_NO_STATUS */\n\n/* Argument 1 passed to the DllEntryProc. */\n#define\tDLL_PROCESS_DETACH\t0\t/* detach process (unload library) */\n#define\tDLL_PROCESS_ATTACH\t1\t/* attach process (load library) */\n#define\tDLL_THREAD_ATTACH\t2\t/* attach new thread */\n#define\tDLL_THREAD_DETACH\t3\t/* detach thread */\n#ifdef __WINESRC__\n#define DLL_WINE_PREATTACH      8       /* called before process attach for Wine builtins */\n#endif\n\n/* u.x.wProcessorArchitecture (NT) */\n#define PROCESSOR_ARCHITECTURE_INTEL\t0\n#define PROCESSOR_ARCHITECTURE_MIPS\t1\n#define PROCESSOR_ARCHITECTURE_ALPHA\t2\n#define PROCESSOR_ARCHITECTURE_PPC\t3\n#define PROCESSOR_ARCHITECTURE_SHX\t4\n#define PROCESSOR_ARCHITECTURE_ARM\t5\n#define PROCESSOR_ARCHITECTURE_IA64     6\n#define PROCESSOR_ARCHITECTURE_ALPHA64  7\n#define PROCESSOR_ARCHITECTURE_MSIL     8\n#define PROCESSOR_ARCHITECTURE_AMD64    9\n#define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64    10\n#define PROCESSOR_ARCHITECTURE_NEUTRAL          11\n#define PROCESSOR_ARCHITECTURE_ARM64            12\n#define PROCESSOR_ARCHITECTURE_UNKNOWN\t0xFFFF\n\n/* dwProcessorType */\n#define PROCESSOR_INTEL_386      386\n#define PROCESSOR_INTEL_486      486\n#define PROCESSOR_INTEL_PENTIUM  586\n#define PROCESSOR_INTEL_860      860\n#define PROCESSOR_INTEL_IA64     2200\n#define PROCESSOR_AMD_X8664      8664\n#define PROCESSOR_MIPS_R2000     2000\n#define PROCESSOR_MIPS_R3000     3000\n#define PROCESSOR_MIPS_R4000     4000\n#define PROCESSOR_ALPHA_21064    21064\n#define PROCESSOR_PPC_601        601\n#define PROCESSOR_PPC_603        603\n#define PROCESSOR_PPC_604        604\n#define PROCESSOR_PPC_620        620\n#define PROCESSOR_HITACHI_SH3    10003\n#define PROCESSOR_HITACHI_SH3E   10004\n#define PROCESSOR_HITACHI_SH4    10005\n#define PROCESSOR_MOTOROLA_821   821\n#define PROCESSOR_SHx_SH3        103\n#define PROCESSOR_SHx_SH4        104\n#define PROCESSOR_STRONGARM      2577\n#define PROCESSOR_ARM720         1824    /* 0x720 */\n#define PROCESSOR_ARM820         2080    /* 0x820 */\n#define PROCESSOR_ARM920         2336    /* 0x920 */\n#define PROCESSOR_ARM_7TDMI      70001\n#define PROCESSOR_OPTIL          18767\n\n#ifdef _WIN64\n#define MAXIMUM_PROCESSORS       64\n#else\n#define MAXIMUM_PROCESSORS       32\n#endif\n\ntypedef struct _MEMORY_BASIC_INFORMATION\n{\n    LPVOID   BaseAddress;\n    LPVOID   AllocationBase;\n    DWORD    AllocationProtect;\n    SIZE_T   RegionSize;\n    DWORD    State;\n    DWORD    Protect;\n    DWORD    Type;\n} MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION;\n\n#define\tPAGE_NOACCESS\t\t0x01\n#define\tPAGE_READONLY\t\t0x02\n#define\tPAGE_READWRITE\t\t0x04\n#define\tPAGE_WRITECOPY\t\t0x08\n#define\tPAGE_EXECUTE\t\t0x10\n#define\tPAGE_EXECUTE_READ\t0x20\n#define\tPAGE_EXECUTE_READWRITE\t0x40\n#define\tPAGE_EXECUTE_WRITECOPY\t0x80\n#define\tPAGE_GUARD\t\t0x100\n#define\tPAGE_NOCACHE\t\t0x200\n#define\tPAGE_WRITECOMBINE\t0x400\n\n#define MEM_COMMIT              0x00001000\n#define MEM_RESERVE             0x00002000\n#define MEM_DECOMMIT            0x00004000\n#define MEM_RELEASE             0x00008000\n#define MEM_FREE                0x00010000\n#define MEM_PRIVATE             0x00020000\n#define MEM_MAPPED              0x00040000\n#define MEM_RESET               0x00080000\n#define MEM_TOP_DOWN            0x00100000\n#define MEM_WRITE_WATCH         0x00200000\n#define MEM_PHYSICAL            0x00400000\n#define MEM_LARGE_PAGES         0x20000000\n#define MEM_4MB_PAGES           0x80000000\n\n#define SEC_FILE                0x00800000\n#define SEC_IMAGE               0x01000000\n#define SEC_PROTECTED_IMAGE     0x02000000\n#define SEC_RESERVE             0x04000000\n#define SEC_COMMIT              0x08000000\n#define SEC_NOCACHE             0x10000000\n#define SEC_WRITECOMBINE        0x40000000\n#define SEC_LARGE_PAGES         0x80000000\n#define SEC_IMAGE_NO_EXECUTE    (SEC_IMAGE | SEC_NOCACHE)\n#define MEM_IMAGE               SEC_IMAGE\n\n#define WRITE_WATCH_FLAG_RESET  0x00000001\n\n#define AT_ROUND_TO_PAGE        0x40000000\n\n#define MINCHAR       0x80\n#define MAXCHAR       0x7f\n#define MINSHORT      0x8000\n#define MAXSHORT      0x7fff\n#define MINLONG       0x80000000\n#define MAXLONG       0x7fffffff\n#define MAXBYTE       0xff\n#define MAXWORD       0xffff\n#define MAXDWORD      0xffffffff\n#define MAXLONGLONG   (((LONGLONG)0x7fffffff << 32) | 0xffffffff)\n\n#define UNICODE_STRING_MAX_CHARS 32767\n\n#define FIELD_OFFSET(type, field) ((LONG)offsetof(type, field))\n\n#define CONTAINING_RECORD(address, type, field) \\\n  ((type *)((PCHAR)(address) - offsetof(type, field)))\n\n#ifdef __WINESRC__\n# define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))\n#endif\n\n/* Types */\n\ntypedef struct _LIST_ENTRY {\n  struct _LIST_ENTRY *Flink;\n  struct _LIST_ENTRY *Blink;\n} LIST_ENTRY, *PLIST_ENTRY, * RESTRICTED_POINTER PRLIST_ENTRY;\n\ntypedef struct _SINGLE_LIST_ENTRY {\n  struct _SINGLE_LIST_ENTRY *Next;\n} SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;\n\n#ifdef _WIN64\n\ntypedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY *PSLIST_ENTRY;\ntypedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY {\n    PSLIST_ENTRY Next;\n} SLIST_ENTRY;\n\ntypedef union DECLSPEC_ALIGN(16) _SLIST_HEADER {\n    struct {\n        ULONGLONG Alignment;\n        ULONGLONG Region;\n    } DUMMYSTRUCTNAME;\n    struct {\n        ULONGLONG Depth:16;\n        ULONGLONG Sequence:9;\n        ULONGLONG NextEntry:39;\n        ULONGLONG HeaderType:1;\n        ULONGLONG Init:1;\n        ULONGLONG Reserved:59;\n        ULONGLONG Region:3;\n    } Header8;\n    struct {\n        ULONGLONG Depth:16;\n        ULONGLONG Sequence:48;\n        ULONGLONG HeaderType:1;\n        ULONGLONG Init:1;\n        ULONGLONG Reserved:2;\n        ULONGLONG NextEntry:60;\n    } Header16;\n} SLIST_HEADER, *PSLIST_HEADER;\n\n#else\n\n#undef SLIST_ENTRY /* for Mac OS */\n#define SLIST_ENTRY SINGLE_LIST_ENTRY\n#define _SLIST_ENTRY _SINGLE_LIST_ENTRY\n#define PSLIST_ENTRY PSINGLE_LIST_ENTRY\n\ntypedef union _SLIST_HEADER {\n    ULONGLONG Alignment;\n    struct {\n        SLIST_ENTRY Next;\n        WORD Depth;\n        WORD Sequence;\n    } DUMMYSTRUCTNAME;\n} SLIST_HEADER, *PSLIST_HEADER;\n\n#endif\n\nNTSYSAPI PSLIST_ENTRY WINAPI RtlFirstEntrySList(const SLIST_HEADER*);\nNTSYSAPI VOID         WINAPI RtlInitializeSListHead(PSLIST_HEADER);\nNTSYSAPI PSLIST_ENTRY WINAPI RtlInterlockedFlushSList(PSLIST_HEADER);\nNTSYSAPI PSLIST_ENTRY WINAPI RtlInterlockedPopEntrySList(PSLIST_HEADER);\nNTSYSAPI PSLIST_ENTRY WINAPI RtlInterlockedPushEntrySList(PSLIST_HEADER, PSLIST_ENTRY);\nNTSYSAPI WORD         WINAPI RtlQueryDepthSList(PSLIST_HEADER);\n\n\n/* Heap flags */\n\n#define HEAP_NO_SERIALIZE               0x00000001\n#define HEAP_GROWABLE                   0x00000002\n#define HEAP_GENERATE_EXCEPTIONS        0x00000004\n#define HEAP_ZERO_MEMORY                0x00000008\n#define HEAP_REALLOC_IN_PLACE_ONLY      0x00000010\n#define HEAP_TAIL_CHECKING_ENABLED      0x00000020\n#define HEAP_FREE_CHECKING_ENABLED      0x00000040\n#define HEAP_DISABLE_COALESCE_ON_FREE   0x00000080\n#define HEAP_CREATE_ALIGN_16            0x00010000\n#define HEAP_CREATE_ENABLE_TRACING      0x00020000\n#define HEAP_CREATE_ENABLE_EXECUTE      0x00040000\n\n/* This flag allows it to create heaps shared by all processes under win95,\n   FIXME: correct name */\n#define HEAP_SHARED                     0x04000000\n\ntypedef enum _HEAP_INFORMATION_CLASS {\n    HeapCompatibilityInformation,\n} HEAP_INFORMATION_CLASS;\n\n/* Processor feature flags.  */\n#define PF_FLOATING_POINT_PRECISION_ERRATA\t0\n#define PF_FLOATING_POINT_EMULATED\t\t1\n#define PF_COMPARE_EXCHANGE_DOUBLE\t\t2\n#define PF_MMX_INSTRUCTIONS_AVAILABLE\t\t3\n#define PF_PPC_MOVEMEM_64BIT_OK\t\t\t4\n#define PF_ALPHA_BYTE_INSTRUCTIONS\t\t5\n#define PF_XMMI_INSTRUCTIONS_AVAILABLE\t\t6\n#define PF_3DNOW_INSTRUCTIONS_AVAILABLE\t\t7\n#define PF_RDTSC_INSTRUCTION_AVAILABLE\t\t8\n#define PF_PAE_ENABLED\t\t\t\t9\n#define PF_XMMI64_INSTRUCTIONS_AVAILABLE\t10\n#define PF_SSE_DAZ_MODE_AVAILABLE\t\t11\n#define PF_NX_ENABLED\t\t\t\t12\n#define PF_SSE3_INSTRUCTIONS_AVAILABLE\t\t13\n#define PF_COMPARE_EXCHANGE128\t\t\t14\n#define PF_COMPARE64_EXCHANGE128\t\t15\n#define PF_CHANNELS_ENABLED\t\t\t16\n#define PF_XSAVE_ENABLED\t\t\t17\n#define PF_ARM_VFP_32_REGISTERS_AVAILABLE       18\n#define PF_ARM_NEON_INSTRUCTIONS_AVAILABLE      19\n#define PF_SECOND_LEVEL_ADDRESS_TRANSLATION     20\n#define PF_VIRT_FIRMWARE_ENABLED                21\n#define PF_RDWRFSGSBASE_AVAILABLE               22\n#define PF_FASTFAIL_AVAILABLE                   23\n#define PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE     24\n#define PF_ARM_64BIT_LOADSTORE_ATOMIC           25\n#define PF_ARM_EXTERNAL_CACHE_AVAILABLE         26\n#define PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE      27\n#define PF_RDRAND_INSTRUCTION_AVAILABLE         28\n#define PF_ARM_V8_INSTRUCTIONS_AVAILABLE        29\n#define PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE 30\n#define PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE  31\n\n\n/* Execution state flags */\n#define ES_SYSTEM_REQUIRED    0x00000001\n#define ES_DISPLAY_REQUIRED   0x00000002\n#define ES_USER_PRESENT       0x00000004\n#define ES_CONTINUOUS         0x80000000\n\n/* The Win32 register context */\n\n/* i386 context definitions */\n#ifdef __i386__\n\n#define SIZE_OF_80387_REGISTERS      80\n\ntypedef struct _FLOATING_SAVE_AREA\n{\n    DWORD   ControlWord;\n    DWORD   StatusWord;\n    DWORD   TagWord;\n    DWORD   ErrorOffset;\n    DWORD   ErrorSelector;\n    DWORD   DataOffset;\n    DWORD   DataSelector;\n    BYTE    RegisterArea[SIZE_OF_80387_REGISTERS];\n    DWORD   Cr0NpxState;\n} FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;\n\n#define MAXIMUM_SUPPORTED_EXTENSION     512\n\ntypedef struct _CONTEXT\n{\n    DWORD   ContextFlags;  /* 000 */\n\n    /* These are selected by CONTEXT_DEBUG_REGISTERS */\n    DWORD   Dr0;           /* 004 */\n    DWORD   Dr1;           /* 008 */\n    DWORD   Dr2;           /* 00c */\n    DWORD   Dr3;           /* 010 */\n    DWORD   Dr6;           /* 014 */\n    DWORD   Dr7;           /* 018 */\n\n    /* These are selected by CONTEXT_FLOATING_POINT */\n    FLOATING_SAVE_AREA FloatSave; /* 01c */\n\n    /* These are selected by CONTEXT_SEGMENTS */\n    DWORD   SegGs;         /* 08c */\n    DWORD   SegFs;         /* 090 */\n    DWORD   SegEs;         /* 094 */\n    DWORD   SegDs;         /* 098 */\n\n    /* These are selected by CONTEXT_INTEGER */\n    DWORD   Edi;           /* 09c */\n    DWORD   Esi;           /* 0a0 */\n    DWORD   Ebx;           /* 0a4 */\n    DWORD   Edx;           /* 0a8 */\n    DWORD   Ecx;           /* 0ac */\n    DWORD   Eax;           /* 0b0 */\n\n    /* These are selected by CONTEXT_CONTROL */\n    DWORD   Ebp;           /* 0b4 */\n    DWORD   Eip;           /* 0b8 */\n    DWORD   SegCs;         /* 0bc */\n    DWORD   EFlags;        /* 0c0 */\n    DWORD   Esp;           /* 0c4 */\n    DWORD   SegSs;         /* 0c8 */\n\n    BYTE    ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];  /* 0xcc */\n} CONTEXT;\n\n#define CONTEXT_X86       0x00010000\n#define CONTEXT_i386      CONTEXT_X86\n#define CONTEXT_i486      CONTEXT_X86\n\n#define CONTEXT_CONTROL   (CONTEXT_i386 | 0x0001) /* SS:SP, CS:IP, FLAGS, BP */\n#define CONTEXT_INTEGER   (CONTEXT_i386 | 0x0002) /* AX, BX, CX, DX, SI, DI */\n#define CONTEXT_SEGMENTS  (CONTEXT_i386 | 0x0004) /* DS, ES, FS, GS */\n#define CONTEXT_FLOATING_POINT  (CONTEXT_i386 | 0x0008) /* 387 state */\n#define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x0010) /* DB 0-3,6,7 */\n#define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386 | 0x0020)\n#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)\n#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \\\n        CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | CONTEXT_EXTENDED_REGISTERS)\n\n#define EXCEPTION_READ_FAULT    0\n#define EXCEPTION_WRITE_FAULT   1\n#define EXCEPTION_EXECUTE_FAULT 8\n\n#endif  /* __i386__ */\n\ntypedef struct _LDT_ENTRY {\n    WORD\tLimitLow;\n    WORD\tBaseLow;\n    union {\n        struct {\n            BYTE    BaseMid;\n            BYTE    Flags1;\n            BYTE    Flags2;\n            BYTE    BaseHi;\n        } Bytes;\n        struct {\n            unsigned    BaseMid: 8;\n            unsigned    Type : 5;\n            unsigned    Dpl : 2;\n            unsigned    Pres : 1;\n            unsigned    LimitHi : 4;\n            unsigned    Sys : 1;\n            unsigned    Reserved_0 : 1;\n            unsigned    Default_Big : 1;\n            unsigned    Granularity : 1;\n            unsigned    BaseHi : 8;\n        } Bits;\n    } HighWord;\n} LDT_ENTRY, *PLDT_ENTRY, WOW64_LDT_ENTRY, *PWOW64_LDT_ENTRY;\n\n/* x86-64 context definitions */\n#if defined(__x86_64__)\n\n#define CONTEXT_AMD64   0x00100000\n\n#define CONTEXT_CONTROL   (CONTEXT_AMD64 | 0x0001)\n#define CONTEXT_INTEGER   (CONTEXT_AMD64 | 0x0002)\n#define CONTEXT_SEGMENTS  (CONTEXT_AMD64 | 0x0004)\n#define CONTEXT_FLOATING_POINT  (CONTEXT_AMD64 | 0x0008)\n#define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x0010)\n#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)\n#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)\n\n#define EXCEPTION_READ_FAULT    0\n#define EXCEPTION_WRITE_FAULT   1\n#define EXCEPTION_EXECUTE_FAULT 8\n\ntypedef struct DECLSPEC_ALIGN(16) _M128A {\n    ULONGLONG Low;\n    LONGLONG High;\n} M128A, *PM128A;\n\ntypedef struct _XMM_SAVE_AREA32 {\n    WORD ControlWord;        /* 000 */\n    WORD StatusWord;         /* 002 */\n    BYTE TagWord;            /* 004 */\n    BYTE Reserved1;          /* 005 */\n    WORD ErrorOpcode;        /* 006 */\n    DWORD ErrorOffset;       /* 008 */\n    WORD ErrorSelector;      /* 00c */\n    WORD Reserved2;          /* 00e */\n    DWORD DataOffset;        /* 010 */\n    WORD DataSelector;       /* 014 */\n    WORD Reserved3;          /* 016 */\n    DWORD MxCsr;             /* 018 */\n    DWORD MxCsr_Mask;        /* 01c */\n    M128A FloatRegisters[8]; /* 020 */\n    M128A XmmRegisters[16];  /* 0a0 */\n    BYTE Reserved4[96];      /* 1a0 */\n} XMM_SAVE_AREA32, *PXMM_SAVE_AREA32;\n\ntypedef struct DECLSPEC_ALIGN(16) _CONTEXT {\n    DWORD64 P1Home;          /* 000 */\n    DWORD64 P2Home;          /* 008 */\n    DWORD64 P3Home;          /* 010 */\n    DWORD64 P4Home;          /* 018 */\n    DWORD64 P5Home;          /* 020 */\n    DWORD64 P6Home;          /* 028 */\n\n    /* Control flags */\n    DWORD ContextFlags;      /* 030 */\n    DWORD MxCsr;             /* 034 */\n\n    /* Segment */\n    WORD SegCs;              /* 038 */\n    WORD SegDs;              /* 03a */\n    WORD SegEs;              /* 03c */\n    WORD SegFs;              /* 03e */\n    WORD SegGs;              /* 040 */\n    WORD SegSs;              /* 042 */\n    DWORD EFlags;            /* 044 */\n\n    /* Debug */\n    DWORD64 Dr0;             /* 048 */\n    DWORD64 Dr1;             /* 050 */\n    DWORD64 Dr2;             /* 058 */\n    DWORD64 Dr3;             /* 060 */\n    DWORD64 Dr6;             /* 068 */\n    DWORD64 Dr7;             /* 070 */\n\n    /* Integer */\n    DWORD64 Rax;             /* 078 */\n    DWORD64 Rcx;             /* 080 */\n    DWORD64 Rdx;             /* 088 */\n    DWORD64 Rbx;             /* 090 */\n    DWORD64 Rsp;             /* 098 */\n    DWORD64 Rbp;             /* 0a0 */\n    DWORD64 Rsi;             /* 0a8 */\n    DWORD64 Rdi;             /* 0b0 */\n    DWORD64 R8;              /* 0b8 */\n    DWORD64 R9;              /* 0c0 */\n    DWORD64 R10;             /* 0c8 */\n    DWORD64 R11;             /* 0d0 */\n    DWORD64 R12;             /* 0d8 */\n    DWORD64 R13;             /* 0e0 */\n    DWORD64 R14;             /* 0e8 */\n    DWORD64 R15;             /* 0f0 */\n\n    /* Counter */\n    DWORD64 Rip;             /* 0f8 */\n\n    /* Floating point */\n    union {\n        XMM_SAVE_AREA32 FltSave;  /* 100 */\n        struct {\n            M128A Header[2];      /* 100 */\n            M128A Legacy[8];      /* 120 */\n            M128A Xmm0;           /* 1a0 */\n            M128A Xmm1;           /* 1b0 */\n            M128A Xmm2;           /* 1c0 */\n            M128A Xmm3;           /* 1d0 */\n            M128A Xmm4;           /* 1e0 */\n            M128A Xmm5;           /* 1f0 */\n            M128A Xmm6;           /* 200 */\n            M128A Xmm7;           /* 210 */\n            M128A Xmm8;           /* 220 */\n            M128A Xmm9;           /* 230 */\n            M128A Xmm10;          /* 240 */\n            M128A Xmm11;          /* 250 */\n            M128A Xmm12;          /* 260 */\n            M128A Xmm13;          /* 270 */\n            M128A Xmm14;          /* 280 */\n            M128A Xmm15;          /* 290 */\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME;\n\n    /* Vector */\n    M128A VectorRegister[26];     /* 300 */\n    DWORD64 VectorControl;        /* 4a0 */\n\n    /* Debug control */\n    DWORD64 DebugControl;         /* 4a8 */\n    DWORD64 LastBranchToRip;      /* 4b0 */\n    DWORD64 LastBranchFromRip;    /* 4b8 */\n    DWORD64 LastExceptionToRip;   /* 4c0 */\n    DWORD64 LastExceptionFromRip; /* 4c8 */\n} CONTEXT;\n\ntypedef struct _RUNTIME_FUNCTION\n{\n    DWORD BeginAddress;\n    DWORD EndAddress;\n    DWORD UnwindData;\n} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;\n\n#define UNWIND_HISTORY_TABLE_SIZE 12\n\ntypedef struct _UNWIND_HISTORY_TABLE_ENTRY\n{\n    ULONG64 ImageBase;\n    PRUNTIME_FUNCTION FunctionEntry;\n} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;\n\n#define UNWIND_HISTORY_TABLE_NONE 0\n#define UNWIND_HISTORY_TABLE_GLOBAL 1\n#define UNWIND_HISTORY_TABLE_LOCAL 2\n\ntypedef struct _UNWIND_HISTORY_TABLE\n{\n    ULONG Count;\n    UCHAR Search;\n    ULONG64 LowAddress;\n    ULONG64 HighAddress;\n    UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];\n} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;\n\ntypedef struct _KNONVOLATILE_CONTEXT_POINTERS\n{\n    union\n    {\n        PM128A FloatingContext[16];\n        struct\n        {\n            PM128A Xmm0;\n            PM128A Xmm1;\n            PM128A Xmm2;\n            PM128A Xmm3;\n            PM128A Xmm4;\n            PM128A Xmm5;\n            PM128A Xmm6;\n            PM128A Xmm7;\n            PM128A Xmm8;\n            PM128A Xmm9;\n            PM128A Xmm10;\n            PM128A Xmm11;\n            PM128A Xmm12;\n            PM128A Xmm13;\n            PM128A Xmm14;\n            PM128A Xmm15;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME;\n\n    union\n    {\n        PULONG64 IntegerContext[16];\n        struct\n        {\n            PULONG64 Rax;\n            PULONG64 Rcx;\n            PULONG64 Rdx;\n            PULONG64 Rbx;\n            PULONG64 Rsp;\n            PULONG64 Rbp;\n            PULONG64 Rsi;\n            PULONG64 Rdi;\n            PULONG64 R8;\n            PULONG64 R9;\n            PULONG64 R10;\n            PULONG64 R11;\n            PULONG64 R12;\n            PULONG64 R13;\n            PULONG64 R14;\n            PULONG64 R15;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME2;\n} KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;\n\ntypedef PRUNTIME_FUNCTION (CALLBACK *PGET_RUNTIME_FUNCTION_CALLBACK)(DWORD64,PVOID);\n\nBOOLEAN CDECL            RtlAddFunctionTable(RUNTIME_FUNCTION*,DWORD,DWORD64);\nBOOLEAN CDECL            RtlDeleteFunctionTable(RUNTIME_FUNCTION*);\nBOOLEAN CDECL            RtlInstallFunctionTableCallback(DWORD64,DWORD64,DWORD,PGET_RUNTIME_FUNCTION_CALLBACK,PVOID,PCWSTR);\nPRUNTIME_FUNCTION WINAPI RtlLookupFunctionEntry(DWORD64,DWORD64*,UNWIND_HISTORY_TABLE*);\nPVOID WINAPI             RtlVirtualUnwind(ULONG,ULONG64,ULONG64,RUNTIME_FUNCTION*,CONTEXT*,PVOID*,ULONG64*,KNONVOLATILE_CONTEXT_POINTERS*);\n\n#define UNW_FLAG_NHANDLER  0\n#define UNW_FLAG_EHANDLER  1\n#define UNW_FLAG_UHANDLER  2\n#define UNW_FLAG_CHAININFO 4\n\n#endif /* __x86_64__ */\n\n/* IA64 context definitions */\n#ifdef __ia64__\n\n#define CONTEXT_IA64                  0x00080000\n#define CONTEXT_CONTROL               (CONTEXT_IA64 | 0x00000001)\n#define CONTEXT_LOWER_FLOATING_POINT  (CONTEXT_IA64 | 0x00000002)\n#define CONTEXT_HIGHER_FLOATING_POINT (CONTEXT_IA64 | 0x00000004)\n#define CONTEXT_INTEGER               (CONTEXT_IA64 | 0x00000008)\n#define CONTEXT_DEBUG                 (CONTEXT_IA64 | 0x00000010)\n#define CONTEXT_IA32_CONTROL          (CONTEXT_IA64 | 0x00000020)\n#define CONTEXT_FLOATING_POINT        (CONTEXT_LOWER_FLOATING_POINT | CONTEXT_HIGHER_FLOATING_POINT)\n#define CONTEXT_FULL                  (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_IA32_CONTROL)\n#define CONTEXT_ALL                   (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_DEBUG | CONTEXT_IA32_CONTROL)\n\n#define CONTEXT_EXCEPTION_ACTIVE      0x8000000\n#define CONTEXT_SERVICE_ACTIVE        0x10000000\n#define CONTEXT_EXCEPTION_REQUEST     0x40000000\n#define CONTEXT_EXCEPTION_REPORTING   0x80000000\n\ntypedef struct _CONTEXT\n{\n    DWORD ContextFlags;\n    DWORD Fill1[3];\n    ULONGLONG DbI0;\n    ULONGLONG DbI1;\n    ULONGLONG DbI2;\n    ULONGLONG DbI3;\n    ULONGLONG DbI4;\n    ULONGLONG DbI5;\n    ULONGLONG DbI6;\n    ULONGLONG DbI7;\n    ULONGLONG DbD0;\n    ULONGLONG DbD1;\n    ULONGLONG DbD2;\n    ULONGLONG DbD3;\n    ULONGLONG DbD4;\n    ULONGLONG DbD5;\n    ULONGLONG DbD6;\n    ULONGLONG DbD7;\n    FLOAT128 FltS0;\n    FLOAT128 FltS1;\n    FLOAT128 FltS2;\n    FLOAT128 FltS3;\n    FLOAT128 FltT0;\n    FLOAT128 FltT1;\n    FLOAT128 FltT2;\n    FLOAT128 FltT3;\n    FLOAT128 FltT4;\n    FLOAT128 FltT5;\n    FLOAT128 FltT6;\n    FLOAT128 FltT7;\n    FLOAT128 FltT8;\n    FLOAT128 FltT9;\n    FLOAT128 FltS4;\n    FLOAT128 FltS5;\n    FLOAT128 FltS6;\n    FLOAT128 FltS7;\n    FLOAT128 FltS8;\n    FLOAT128 FltS9;\n    FLOAT128 FltS10;\n    FLOAT128 FltS11;\n    FLOAT128 FltS12;\n    FLOAT128 FltS13;\n    FLOAT128 FltS14;\n    FLOAT128 FltS15;\n    FLOAT128 FltS16;\n    FLOAT128 FltS17;\n    FLOAT128 FltS18;\n    FLOAT128 FltS19;\n    FLOAT128 FltF32;\n    FLOAT128 FltF33;\n    FLOAT128 FltF34;\n    FLOAT128 FltF35;\n    FLOAT128 FltF36;\n    FLOAT128 FltF37;\n    FLOAT128 FltF38;\n    FLOAT128 FltF39;\n    FLOAT128 FltF40;\n    FLOAT128 FltF41;\n    FLOAT128 FltF42;\n    FLOAT128 FltF43;\n    FLOAT128 FltF44;\n    FLOAT128 FltF45;\n    FLOAT128 FltF46;\n    FLOAT128 FltF47;\n    FLOAT128 FltF48;\n    FLOAT128 FltF49;\n    FLOAT128 FltF50;\n    FLOAT128 FltF51;\n    FLOAT128 FltF52;\n    FLOAT128 FltF53;\n    FLOAT128 FltF54;\n    FLOAT128 FltF55;\n    FLOAT128 FltF56;\n    FLOAT128 FltF57;\n    FLOAT128 FltF58;\n    FLOAT128 FltF59;\n    FLOAT128 FltF60;\n    FLOAT128 FltF61;\n    FLOAT128 FltF62;\n    FLOAT128 FltF63;\n    FLOAT128 FltF64;\n    FLOAT128 FltF65;\n    FLOAT128 FltF66;\n    FLOAT128 FltF67;\n    FLOAT128 FltF68;\n    FLOAT128 FltF69;\n    FLOAT128 FltF70;\n    FLOAT128 FltF71;\n    FLOAT128 FltF72;\n    FLOAT128 FltF73;\n    FLOAT128 FltF74;\n    FLOAT128 FltF75;\n    FLOAT128 FltF76;\n    FLOAT128 FltF77;\n    FLOAT128 FltF78;\n    FLOAT128 FltF79;\n    FLOAT128 FltF80;\n    FLOAT128 FltF81;\n    FLOAT128 FltF82;\n    FLOAT128 FltF83;\n    FLOAT128 FltF84;\n    FLOAT128 FltF85;\n    FLOAT128 FltF86;\n    FLOAT128 FltF87;\n    FLOAT128 FltF88;\n    FLOAT128 FltF89;\n    FLOAT128 FltF90;\n    FLOAT128 FltF91;\n    FLOAT128 FltF92;\n    FLOAT128 FltF93;\n    FLOAT128 FltF94;\n    FLOAT128 FltF95;\n    FLOAT128 FltF96;\n    FLOAT128 FltF97;\n    FLOAT128 FltF98;\n    FLOAT128 FltF99;\n    FLOAT128 FltF100;\n    FLOAT128 FltF101;\n    FLOAT128 FltF102;\n    FLOAT128 FltF103;\n    FLOAT128 FltF104;\n    FLOAT128 FltF105;\n    FLOAT128 FltF106;\n    FLOAT128 FltF107;\n    FLOAT128 FltF108;\n    FLOAT128 FltF109;\n    FLOAT128 FltF110;\n    FLOAT128 FltF111;\n    FLOAT128 FltF112;\n    FLOAT128 FltF113;\n    FLOAT128 FltF114;\n    FLOAT128 FltF115;\n    FLOAT128 FltF116;\n    FLOAT128 FltF117;\n    FLOAT128 FltF118;\n    FLOAT128 FltF119;\n    FLOAT128 FltF120;\n    FLOAT128 FltF121;\n    FLOAT128 FltF122;\n    FLOAT128 FltF123;\n    FLOAT128 FltF124;\n    FLOAT128 FltF125;\n    FLOAT128 FltF126;\n    FLOAT128 FltF127;\n    ULONGLONG StFPSR;\n    ULONGLONG IntGp;\n    ULONGLONG IntT0;\n    ULONGLONG IntT1;\n    ULONGLONG IntS0;\n    ULONGLONG IntS1;\n    ULONGLONG IntS2;\n    ULONGLONG IntS3;\n    ULONGLONG IntV0;\n    ULONGLONG IntT2;\n    ULONGLONG IntT3;\n    ULONGLONG IntT4;\n    ULONGLONG IntSp;\n    ULONGLONG IntTeb;\n    ULONGLONG IntT5;\n    ULONGLONG IntT6;\n    ULONGLONG IntT7;\n    ULONGLONG IntT8;\n    ULONGLONG IntT9;\n    ULONGLONG IntT10;\n    ULONGLONG IntT11;\n    ULONGLONG IntT12;\n    ULONGLONG IntT13;\n    ULONGLONG IntT14;\n    ULONGLONG IntT15;\n    ULONGLONG IntT16;\n    ULONGLONG IntT17;\n    ULONGLONG IntT18;\n    ULONGLONG IntT19;\n    ULONGLONG IntT20;\n    ULONGLONG IntT21;\n    ULONGLONG IntT22;\n    ULONGLONG IntNats;\n    ULONGLONG Preds;\n    ULONGLONG BrRp;\n    ULONGLONG BrS0;\n    ULONGLONG BrS1;\n    ULONGLONG BrS2;\n    ULONGLONG BrS3;\n    ULONGLONG BrS4;\n    ULONGLONG BrT0;\n    ULONGLONG BrT1;\n    ULONGLONG ApUNAT;\n    ULONGLONG ApLC;\n    ULONGLONG ApEC;\n    ULONGLONG ApCCV;\n    ULONGLONG ApDCR;\n    ULONGLONG RsPFS;\n    ULONGLONG RsBSP;\n    ULONGLONG RsBSPSTORE;\n    ULONGLONG RsRSC;\n    ULONGLONG RsRNAT;\n    ULONGLONG StIPSR;\n    ULONGLONG StIIP;\n    ULONGLONG StIFS;\n    ULONGLONG StFCR;\n    ULONGLONG Eflag;\n    ULONGLONG SegCSD;\n    ULONGLONG SegSSD;\n    ULONGLONG Cflag;\n    ULONGLONG StFSR;\n    ULONGLONG StFIR;\n    ULONGLONG StFDR;\n    ULONGLONG UNUSEDPACK;\n} CONTEXT, *PCONTEXT;\n\ntypedef struct _RUNTIME_FUNCTION\n{\n    ULONG BeginAddress;\n    ULONG EndAddress;\n    ULONG UnwindInfoAddress;\n} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;\n\ntypedef struct _FRAME_POINTERS {\n  ULONGLONG MemoryStackFp;\n  ULONGLONG BackingStoreFp;\n} FRAME_POINTERS, *PFRAME_POINTERS;\n\n#define UNWIND_HISTORY_TABLE_SIZE 12\n\ntypedef struct _UNWIND_HISTORY_TABLE_ENTRY {\n  ULONG64 ImageBase;\n  ULONG64 Gp;\n  PRUNTIME_FUNCTION FunctionEntry;\n} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;\n\ntypedef struct _UNWIND_HISTORY_TABLE {\n  ULONG Count;\n  UCHAR Search;\n  ULONG64 LowAddress;\n  ULONG64 HighAddress;\n  UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];\n} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;\n\ntypedef struct _KNONVOLATILE_CONTEXT_POINTERS\n{\n    PFLOAT128  FltS0;\n    PFLOAT128  FltS1;\n    PFLOAT128  FltS2;\n    PFLOAT128  FltS3;\n    PFLOAT128  HighFloatingContext[10];\n    PFLOAT128  FltS4;\n    PFLOAT128  FltS5;\n    PFLOAT128  FltS6;\n    PFLOAT128  FltS7;\n    PFLOAT128  FltS8;\n    PFLOAT128  FltS9;\n    PFLOAT128  FltS10;\n    PFLOAT128  FltS11;\n    PFLOAT128  FltS12;\n    PFLOAT128  FltS13;\n    PFLOAT128  FltS14;\n    PFLOAT128  FltS15;\n    PFLOAT128  FltS16;\n    PFLOAT128  FltS17;\n    PFLOAT128  FltS18;\n    PFLOAT128  FltS19;\n    PULONGLONG IntS0;\n    PULONGLONG IntS1;\n    PULONGLONG IntS2;\n    PULONGLONG IntS3;\n    PULONGLONG IntSp;\n    PULONGLONG IntS0Nat;\n    PULONGLONG IntS1Nat;\n    PULONGLONG IntS2Nat;\n    PULONGLONG IntS3Nat;\n    PULONGLONG IntSpNat;\n    PULONGLONG Preds;\n    PULONGLONG BrRp;\n    PULONGLONG BrS0;\n    PULONGLONG BrS1;\n    PULONGLONG BrS2;\n    PULONGLONG BrS3;\n    PULONGLONG BrS4;\n    PULONGLONG ApUNAT;\n    PULONGLONG ApLC;\n    PULONGLONG ApEC;\n    PULONGLONG RsPFS;\n    PULONGLONG StFSR;\n    PULONGLONG StFIR;\n    PULONGLONG StFDR;\n    PULONGLONG Cflag;\n} KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;\n\nULONGLONG WINAPI RtlVirtualUnwind(ULONGLONG,ULONGLONG,RUNTIME_FUNCTION*,CONTEXT*,BOOLEAN*,FRAME_POINTERS*,KNONVOLATILE_CONTEXT_POINTERS*);\n\n#endif /* __ia64__ */\n\n/* Alpha context definitions */\n#if defined(_ALPHA_) || defined(__ALPHA__) || defined(__alpha__)\n\n#define CONTEXT_ALPHA   0x00020000\n\n#define CONTEXT_CONTROL         (CONTEXT_ALPHA | 0x00000001)\n#define CONTEXT_FLOATING_POINT  (CONTEXT_ALPHA | 0x00000002)\n#define CONTEXT_INTEGER         (CONTEXT_ALPHA | 0x00000004)\n#define CONTEXT_FULL  (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)\n\n#define EXCEPTION_READ_FAULT    0\n#define EXCEPTION_WRITE_FAULT   1\n#define EXCEPTION_EXECUTE_FAULT 8\n\ntypedef struct _CONTEXT\n{\n    /* selected by CONTEXT_FLOATING_POINT */\n    ULONGLONG FltF0;\n    ULONGLONG FltF1;\n    ULONGLONG FltF2;\n    ULONGLONG FltF3;\n    ULONGLONG FltF4;\n    ULONGLONG FltF5;\n    ULONGLONG FltF6;\n    ULONGLONG FltF7;\n    ULONGLONG FltF8;\n    ULONGLONG FltF9;\n    ULONGLONG FltF10;\n    ULONGLONG FltF11;\n    ULONGLONG FltF12;\n    ULONGLONG FltF13;\n    ULONGLONG FltF14;\n    ULONGLONG FltF15;\n    ULONGLONG FltF16;\n    ULONGLONG FltF17;\n    ULONGLONG FltF18;\n    ULONGLONG FltF19;\n    ULONGLONG FltF20;\n    ULONGLONG FltF21;\n    ULONGLONG FltF22;\n    ULONGLONG FltF23;\n    ULONGLONG FltF24;\n    ULONGLONG FltF25;\n    ULONGLONG FltF26;\n    ULONGLONG FltF27;\n    ULONGLONG FltF28;\n    ULONGLONG FltF29;\n    ULONGLONG FltF30;\n    ULONGLONG FltF31;\n\n    /* selected by CONTEXT_INTEGER */\n    ULONGLONG IntV0;\n    ULONGLONG IntT0;\n    ULONGLONG IntT1;\n    ULONGLONG IntT2;\n    ULONGLONG IntT3;\n    ULONGLONG IntT4;\n    ULONGLONG IntT5;\n    ULONGLONG IntT6;\n    ULONGLONG IntT7;\n    ULONGLONG IntS0;\n    ULONGLONG IntS1;\n    ULONGLONG IntS2;\n    ULONGLONG IntS3;\n    ULONGLONG IntS4;\n    ULONGLONG IntS5;\n    ULONGLONG IntFp;\n    ULONGLONG IntA0;\n    ULONGLONG IntA1;\n    ULONGLONG IntA2;\n    ULONGLONG IntA3;\n    ULONGLONG IntA4;\n    ULONGLONG IntA5;\n    ULONGLONG IntT8;\n    ULONGLONG IntT9;\n    ULONGLONG IntT10;\n    ULONGLONG IntT11;\n    ULONGLONG IntRa;\n    ULONGLONG IntT12;\n    ULONGLONG IntAt;\n    ULONGLONG IntGp;\n    ULONGLONG IntSp;\n    ULONGLONG IntZero;\n\n    /* selected by CONTEXT_FLOATING_POINT */\n    ULONGLONG Fpcr;\n    ULONGLONG SoftFpcr;\n\n    /* selected by CONTEXT_CONTROL */\n    ULONGLONG Fir;\n    DWORD Psr;\n    DWORD ContextFlags;\n    DWORD Fill[4];\n} CONTEXT;\n\n#define _QUAD_PSR_OFFSET   HighSoftFpcr\n#define _QUAD_FLAGS_OFFSET HighFir\n\n#endif  /* _ALPHA_ */\n\n#ifdef __arm__\n\n/* The following flags control the contents of the CONTEXT structure. */\n\n#define CONTEXT_ARM    0x0200000\n#define CONTEXT_CONTROL         (CONTEXT_ARM | 0x00000001)\n#define CONTEXT_INTEGER         (CONTEXT_ARM | 0x00000002)\n#define CONTEXT_FLOATING_POINT  (CONTEXT_ARM | 0x00000004)\n#define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM | 0x00000008)\n\n#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER)\n#define CONTEXT_ALL  (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)\n\n#define EXCEPTION_READ_FAULT    0\n#define EXCEPTION_WRITE_FAULT   1\n#define EXCEPTION_EXECUTE_FAULT 8\n\n#define ARM_MAX_BREAKPOINTS     8\n#define ARM_MAX_WATCHPOINTS     1\n\ntypedef struct _RUNTIME_FUNCTION\n{\n    DWORD BeginAddress;\n    union {\n        DWORD UnwindData;\n        struct {\n            DWORD Flag : 2;\n            DWORD FunctionLength : 11;\n            DWORD Ret : 2;\n            DWORD H : 1;\n            DWORD Reg : 3;\n            DWORD R : 1;\n            DWORD L : 1;\n            DWORD C : 1;\n            DWORD StackAdjust : 10;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME;\n} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;\n\n#define UNWIND_HISTORY_TABLE_SIZE 12\n\ntypedef struct _UNWIND_HISTORY_TABLE_ENTRY\n{\n    DWORD ImageBase;\n    PRUNTIME_FUNCTION FunctionEntry;\n} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;\n\ntypedef struct _UNWIND_HISTORY_TABLE\n{\n    DWORD Count;\n    BYTE  LocalHint;\n    BYTE  GlobalHint;\n    BYTE  Search;\n    BYTE  Once;\n    DWORD LowAddress;\n    DWORD HighAddress;\n    UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];\n} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;\n\ntypedef struct _NEON128\n{\n    ULONGLONG Low;\n    LONGLONG High;\n} NEON128, *PNEON128;\n\ntypedef struct _CONTEXT\n{\n    ULONG ContextFlags;             /* 000 */\n    /* CONTEXT_INTEGER */\n    ULONG R0;                       /* 004 */\n    ULONG R1;                       /* 008 */\n    ULONG R2;                       /* 00c */\n    ULONG R3;                       /* 010 */\n    ULONG R4;                       /* 014 */\n    ULONG R5;                       /* 018 */\n    ULONG R6;                       /* 01c */\n    ULONG R7;                       /* 020 */\n    ULONG R8;                       /* 024 */\n    ULONG R9;                       /* 028 */\n    ULONG R10;                      /* 02c */\n    ULONG R11;                      /* 030 */\n    ULONG R12;                      /* 034 */\n    /* CONTEXT_CONTROL */\n    ULONG Sp;                       /* 038 */\n    ULONG Lr;                       /* 03c */\n    ULONG Pc;                       /* 040 */\n    ULONG Cpsr;                     /* 044 */\n    /* CONTEXT_FLOATING_POINT */\n    ULONG Fpscr;                    /* 048 */\n    ULONG Padding;                  /* 04c */\n    union\n    {\n        NEON128 Q[16];\n        ULONGLONG D[32];\n        ULONG S[32];\n    } DUMMYUNIONNAME;               /* 050 */\n    /* CONTEXT_DEBUG_REGISTERS */\n    ULONG Bvr[ARM_MAX_BREAKPOINTS]; /* 150 */\n    ULONG Bcr[ARM_MAX_BREAKPOINTS]; /* 170 */\n    ULONG Wvr[ARM_MAX_WATCHPOINTS]; /* 190 */\n    ULONG Wcr[ARM_MAX_WATCHPOINTS]; /* 194 */\n    ULONG Padding2[2];              /* 198 */\n} CONTEXT;\n\nBOOLEAN CDECL            RtlAddFunctionTable(RUNTIME_FUNCTION*,DWORD,DWORD);\nBOOLEAN CDECL            RtlDeleteFunctionTable(RUNTIME_FUNCTION*);\nPRUNTIME_FUNCTION WINAPI RtlLookupFunctionEntry(ULONG_PTR,DWORD*,UNWIND_HISTORY_TABLE*);\n\n#endif /* __arm__ */\n\n#ifdef __aarch64__\n\n#define CONTEXT_ARM64           0x400000\n#define CONTEXT_CONTROL         (CONTEXT_ARM64 | 0x00000001)\n#define CONTEXT_INTEGER         (CONTEXT_ARM64 | 0x00000002)\n#define CONTEXT_FLOATING_POINT  (CONTEXT_ARM64 | 0x00000004)\n#define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM64 | 0x00000008)\n\n#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER)\n#define CONTEXT_ALL  (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)\n\n#define EXCEPTION_READ_FAULT    0\n#define EXCEPTION_WRITE_FAULT   1\n#define EXCEPTION_EXECUTE_FAULT 8\n\n#define ARM64_MAX_BREAKPOINTS   8\n#define ARM64_MAX_WATCHPOINTS   2\n\ntypedef struct _RUNTIME_FUNCTION\n{\n    DWORD BeginAddress;\n    union\n    {\n        DWORD UnwindData;\n        struct\n        {\n            DWORD Flag : 2;\n            DWORD FunctionLength : 11;\n            DWORD RegF : 3;\n            DWORD RegI : 4;\n            DWORD H : 1;\n            DWORD CR : 2;\n            DWORD FrameSize : 9;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME;\n} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;\n\n#define UNWIND_HISTORY_TABLE_SIZE 12\n\ntypedef struct _UNWIND_HISTORY_TABLE_ENTRY\n{\n    DWORD64 ImageBase;\n    PRUNTIME_FUNCTION FunctionEntry;\n} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;\n\ntypedef struct _UNWIND_HISTORY_TABLE\n{\n    DWORD   Count;\n    BYTE    LocalHint;\n    BYTE    GlobalHint;\n    BYTE    Search;\n    BYTE    Once;\n    DWORD64 LowAddress;\n    DWORD64 HighAddress;\n    UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];\n} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;\n\ntypedef union _NEON128\n{\n    struct\n    {\n        ULONGLONG Low;\n        LONGLONG High;\n    } DUMMYSTRUCTNAME;\n    double D[2];\n    float S[4];\n    WORD  H[8];\n    BYTE  B[16];\n} NEON128, *PNEON128;\n\ntypedef struct _CONTEXT\n{\n    ULONG ContextFlags;                 /* 000 */\n    /* CONTEXT_INTEGER */\n    ULONG Cpsr;                         /* 004 */\n    union\n    {\n        struct\n        {\n            DWORD64 X0;                 /* 008 */\n            DWORD64 X1;                 /* 010 */\n            DWORD64 X2;                 /* 018 */\n            DWORD64 X3;                 /* 020 */\n            DWORD64 X4;                 /* 028 */\n            DWORD64 X5;                 /* 030 */\n            DWORD64 X6;                 /* 038 */\n            DWORD64 X7;                 /* 040 */\n            DWORD64 X8;                 /* 048 */\n            DWORD64 X9;                 /* 050 */\n            DWORD64 X10;                /* 058 */\n            DWORD64 X11;                /* 060 */\n            DWORD64 X12;                /* 068 */\n            DWORD64 X13;                /* 070 */\n            DWORD64 X14;                /* 078 */\n            DWORD64 X15;                /* 080 */\n            DWORD64 X16;                /* 088 */\n            DWORD64 X17;                /* 090 */\n            DWORD64 X18;                /* 098 */\n            DWORD64 X19;                /* 0a0 */\n            DWORD64 X20;                /* 0a8 */\n            DWORD64 X21;                /* 0b0 */\n            DWORD64 X22;                /* 0b8 */\n            DWORD64 X23;                /* 0c0 */\n            DWORD64 X24;                /* 0c8 */\n            DWORD64 X25;                /* 0d0 */\n            DWORD64 X26;                /* 0d8 */\n            DWORD64 X27;                /* 0e0 */\n            DWORD64 X28;                /* 0e8 */\n            DWORD64 Fp;                 /* 0f0 */\n            DWORD64 Lr;                 /* 0f8 */\n        } DUMMYSTRUCTNAME;\n        DWORD64 X[31];                  /* 008 */\n    } DUMMYUNIONNAME;\n    /* CONTEXT_CONTROL */\n    DWORD64 Sp;                         /* 100 */\n    DWORD64 Pc;                         /* 108 */\n    /* CONTEXT_FLOATING_POINT */\n    NEON128 V[32];                      /* 110 */\n    DWORD Fpcr;                         /* 310 */\n    DWORD Fpsr;                         /* 314 */\n    /* CONTEXT_DEBUG_REGISTERS */\n    DWORD Bcr[ARM64_MAX_BREAKPOINTS];   /* 318 */\n    DWORD64 Bvr[ARM64_MAX_BREAKPOINTS]; /* 338 */\n    DWORD Wcr[ARM64_MAX_WATCHPOINTS];   /* 378 */\n    DWORD64 Wvr[ARM64_MAX_WATCHPOINTS]; /* 380 */\n} CONTEXT;\n\n#endif /* __aarch64__ */\n\n\n/* Mips context definitions */\n#if defined(_MIPS_) || defined(__MIPS__) || defined(__mips__)\n\n#define CONTEXT_R4000   0x00010000\n\n#define CONTEXT_CONTROL         (CONTEXT_R4000 | 0x00000001)\n#define CONTEXT_FLOATING_POINT  (CONTEXT_R4000 | 0x00000002)\n#define CONTEXT_INTEGER         (CONTEXT_R4000 | 0x00000004)\n\n#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)\n\n#define EXCEPTION_READ_FAULT    0\n#define EXCEPTION_WRITE_FAULT   1\n#define EXCEPTION_EXECUTE_FAULT 8\n\ntypedef struct _CONTEXT\n{\n    DWORD Argument[4];\n    /* These are selected by CONTEXT_FLOATING_POINT */\n    DWORD FltF0;\n    DWORD FltF1;\n    DWORD FltF2;\n    DWORD FltF3;\n    DWORD FltF4;\n    DWORD FltF5;\n    DWORD FltF6;\n    DWORD FltF7;\n    DWORD FltF8;\n    DWORD FltF9;\n    DWORD FltF10;\n    DWORD FltF11;\n    DWORD FltF12;\n    DWORD FltF13;\n    DWORD FltF14;\n    DWORD FltF15;\n    DWORD FltF16;\n    DWORD FltF17;\n    DWORD FltF18;\n    DWORD FltF19;\n    DWORD FltF20;\n    DWORD FltF21;\n    DWORD FltF22;\n    DWORD FltF23;\n    DWORD FltF24;\n    DWORD FltF25;\n    DWORD FltF26;\n    DWORD FltF27;\n    DWORD FltF28;\n    DWORD FltF29;\n    DWORD FltF30;\n    DWORD FltF31;\n\n    /* These are selected by CONTEXT_INTEGER */\n    DWORD IntZero;\n    DWORD IntAt;\n    DWORD IntV0;\n    DWORD IntV1;\n    DWORD IntA0;\n    DWORD IntA1;\n    DWORD IntA2;\n    DWORD IntA3;\n    DWORD IntT0;\n    DWORD IntT1;\n    DWORD IntT2;\n    DWORD IntT3;\n    DWORD IntT4;\n    DWORD IntT5;\n    DWORD IntT6;\n    DWORD IntT7;\n    DWORD IntS0;\n    DWORD IntS1;\n    DWORD IntS2;\n    DWORD IntS3;\n    DWORD IntS4;\n    DWORD IntS5;\n    DWORD IntS6;\n    DWORD IntS7;\n    DWORD IntT8;\n    DWORD IntT9;\n    DWORD IntK0;\n    DWORD IntK1;\n    DWORD IntGp;\n    DWORD IntSp;\n    DWORD IntS8;\n    DWORD IntRa;\n    DWORD IntLo;\n    DWORD IntHi;\n\n    /* These are selected by CONTEXT_FLOATING_POINT */\n    DWORD Fsr;\n\n    /* These are selected by CONTEXT_CONTROL */\n    DWORD Fir;\n    DWORD Psr;\n\n    DWORD ContextFlags;\n    DWORD Fill[2];\n} CONTEXT;\n\n#endif  /* _MIPS_ */\n\n/* PowerPC context definitions */\n#ifdef __powerpc__\n\n#define CONTEXT_CONTROL         0x0001\n#define CONTEXT_FLOATING_POINT  0x0002\n#define CONTEXT_INTEGER         0x0004\n#define CONTEXT_DEBUG_REGISTERS 0x0008\n#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)\n\n#define EXCEPTION_READ_FAULT    0\n#define EXCEPTION_WRITE_FAULT   1\n#define EXCEPTION_EXECUTE_FAULT 8\n\ntypedef struct\n{\n    /* These are selected by CONTEXT_FLOATING_POINT */\n    double Fpr0;\n    double Fpr1;\n    double Fpr2;\n    double Fpr3;\n    double Fpr4;\n    double Fpr5;\n    double Fpr6;\n    double Fpr7;\n    double Fpr8;\n    double Fpr9;\n    double Fpr10;\n    double Fpr11;\n    double Fpr12;\n    double Fpr13;\n    double Fpr14;\n    double Fpr15;\n    double Fpr16;\n    double Fpr17;\n    double Fpr18;\n    double Fpr19;\n    double Fpr20;\n    double Fpr21;\n    double Fpr22;\n    double Fpr23;\n    double Fpr24;\n    double Fpr25;\n    double Fpr26;\n    double Fpr27;\n    double Fpr28;\n    double Fpr29;\n    double Fpr30;\n    double Fpr31;\n    double Fpscr;\n\n    /* These are selected by CONTEXT_INTEGER */\n    DWORD Gpr0;\n    DWORD Gpr1;\n    DWORD Gpr2;\n    DWORD Gpr3;\n    DWORD Gpr4;\n    DWORD Gpr5;\n    DWORD Gpr6;\n    DWORD Gpr7;\n    DWORD Gpr8;\n    DWORD Gpr9;\n    DWORD Gpr10;\n    DWORD Gpr11;\n    DWORD Gpr12;\n    DWORD Gpr13;\n    DWORD Gpr14;\n    DWORD Gpr15;\n    DWORD Gpr16;\n    DWORD Gpr17;\n    DWORD Gpr18;\n    DWORD Gpr19;\n    DWORD Gpr20;\n    DWORD Gpr21;\n    DWORD Gpr22;\n    DWORD Gpr23;\n    DWORD Gpr24;\n    DWORD Gpr25;\n    DWORD Gpr26;\n    DWORD Gpr27;\n    DWORD Gpr28;\n    DWORD Gpr29;\n    DWORD Gpr30;\n    DWORD Gpr31;\n\n    DWORD Cr;\n    DWORD Xer;\n\n    /* These are selected by CONTEXT_CONTROL */\n    DWORD Msr;\n    DWORD Iar; /* Instruction Address Register , aka PC ... */\n    DWORD Lr;\n    DWORD Ctr;\n\n    DWORD ContextFlags;\n    \n    DWORD Dar;   /* Fault registers for coredump */\n    DWORD Dsisr; \n    DWORD Trap;  /* number of powerpc exception taken */\n\n    /* These are selected by CONTEXT_DEBUG_REGISTERS */\n    DWORD Dr0;\n    DWORD Dr1;\n    DWORD Dr2;\n    DWORD Dr3;\n    DWORD Dr4;\n    DWORD Dr5;\n    DWORD Dr6;\n    DWORD Dr7;\n} CONTEXT;\n\ntypedef struct _STACK_FRAME_HEADER\n{\n    DWORD BackChain;\n    DWORD GlueSaved1;\n    DWORD GlueSaved2;\n    DWORD Reserved1;\n    DWORD Spare1;\n    DWORD Spare2;\n\n    DWORD Parameter0;\n    DWORD Parameter1;\n    DWORD Parameter2;\n    DWORD Parameter3;\n    DWORD Parameter4;\n    DWORD Parameter5;\n    DWORD Parameter6;\n    DWORD Parameter7;\n} STACK_FRAME_HEADER,*PSTACK_FRAME_HEADER;\n\n#endif  /* __powerpc__ */\n\n#if !defined(CONTEXT_FULL) && !defined(RC_INVOKED)\n#error You need to define a CONTEXT for your CPU\n#endif\n\ntypedef CONTEXT *PCONTEXT;\n\nNTSYSAPI void WINAPI RtlCaptureContext(CONTEXT*);\n\n#define WOW64_CONTEXT_i386 0x00010000\n#define WOW64_CONTEXT_i486 0x00010000\n#define WOW64_CONTEXT_CONTROL (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000001))\n#define WOW64_CONTEXT_INTEGER (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000002))\n#define WOW64_CONTEXT_SEGMENTS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000004))\n#define WOW64_CONTEXT_FLOATING_POINT (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000008))\n#define WOW64_CONTEXT_DEBUG_REGISTERS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000010))\n#define WOW64_CONTEXT_EXTENDED_REGISTERS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000020))\n#define WOW64_CONTEXT_FULL (WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | WOW64_CONTEXT_SEGMENTS)\n#define WOW64_CONTEXT_ALL (WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | \\\n                           WOW64_CONTEXT_SEGMENTS | WOW64_CONTEXT_FLOATING_POINT | \\\n                           WOW64_CONTEXT_DEBUG_REGISTERS | WOW64_CONTEXT_EXTENDED_REGISTERS)\n\n#define WOW64_CONTEXT_XSTATE (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000040))\n\n#define WOW64_CONTEXT_EXCEPTION_ACTIVE      0x08000000\n#define WOW64_CONTEXT_SERVICE_ACTIVE        0x10000000\n#define WOW64_CONTEXT_EXCEPTION_REQUEST     0x40000000\n#define WOW64_CONTEXT_EXCEPTION_REPORTING   0x80000000\n\n#define WOW64_SIZE_OF_80387_REGISTERS 80\n#define WOW64_MAXIMUM_SUPPORTED_EXTENSION 512\n\ntypedef struct _WOW64_FLOATING_SAVE_AREA\n{\n    DWORD   ControlWord;\n    DWORD   StatusWord;\n    DWORD   TagWord;\n    DWORD   ErrorOffset;\n    DWORD   ErrorSelector;\n    DWORD   DataOffset;\n    DWORD   DataSelector;\n    BYTE    RegisterArea[WOW64_SIZE_OF_80387_REGISTERS];\n    DWORD   Cr0NpxState;\n} WOW64_FLOATING_SAVE_AREA, *PWOW64_FLOATING_SAVE_AREA;\n\n#include \"pshpack4.h\"\ntypedef struct _WOW64_CONTEXT\n{\n    DWORD ContextFlags;\n    DWORD Dr0;\n    DWORD Dr1;\n    DWORD Dr2;\n    DWORD Dr3;\n    DWORD Dr6;\n    DWORD Dr7;\n    WOW64_FLOATING_SAVE_AREA FloatSave;\n    DWORD SegGs;\n    DWORD SegFs;\n    DWORD SegEs;\n    DWORD SegDs;\n    DWORD Edi;\n    DWORD Esi;\n    DWORD Ebx;\n    DWORD Edx;\n    DWORD Ecx;\n    DWORD Eax;\n    DWORD Ebp;\n    DWORD Eip;\n    DWORD SegCs;\n    DWORD EFlags;\n    DWORD Esp;\n    DWORD SegSs;\n    BYTE ExtendedRegisters[WOW64_MAXIMUM_SUPPORTED_EXTENSION];\n} WOW64_CONTEXT, *PWOW64_CONTEXT;\n#include \"poppack.h\"\n\n\n/*\n * Product types\n */\n#define PRODUCT_UNDEFINED                               0x00000000\n#define PRODUCT_ULTIMATE                                0x00000001\n#define PRODUCT_HOME_BASIC                              0x00000002\n#define PRODUCT_HOME_PREMIUM                            0x00000003\n#define PRODUCT_ENTERPRISE                              0x00000004\n#define PRODUCT_HOME_BASIC_N                            0x00000005\n#define PRODUCT_BUSINESS                                0x00000006\n#define PRODUCT_STANDARD_SERVER                         0x00000007\n#define PRODUCT_DATACENTER_SERVER                       0x00000008\n#define PRODUCT_SMALLBUSINESS_SERVER                    0x00000009\n#define PRODUCT_ENTERPRISE_SERVER                       0x0000000A\n#define PRODUCT_STARTER                                 0x0000000B\n#define PRODUCT_DATACENTER_SERVER_CORE                  0x0000000C\n#define PRODUCT_STANDARD_SERVER_CORE                    0x0000000D\n#define PRODUCT_ENTERPRISE_SERVER_CORE                  0x0000000E\n#define PRODUCT_ENTERPRISE_SERVER_IA64                  0x0000000F\n#define PRODUCT_BUSINESS_N                              0x00000010\n#define PRODUCT_WEB_SERVER                              0x00000011\n#define PRODUCT_CLUSTER_SERVER                          0x00000012\n#define PRODUCT_HOME_SERVER                             0x00000013\n#define PRODUCT_STORAGE_EXPRESS_SERVER                  0x00000014\n#define PRODUCT_STORAGE_STANDARD_SERVER                 0x00000015\n#define PRODUCT_STORAGE_WORKGROUP_SERVER                0x00000016\n#define PRODUCT_STORAGE_ENTERPRISE_SERVER               0x00000017\n#define PRODUCT_SERVER_FOR_SMALLBUSINESS                0x00000018\n#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM            0x00000019\n#define PRODUCT_HOME_PREMIUM_N                          0x0000001A\n#define PRODUCT_ENTERPRISE_N                            0x0000001B\n#define PRODUCT_ULTIMATE_N                              0x0000001C\n#define PRODUCT_WEB_SERVER_CORE                         0x0000001D\n#define PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT        0x0000001E\n#define PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY          0x0000001F\n#define PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING         0x00000020\n#define PRODUCT_SERVER_FOUNDATION                       0x00000021\n#define PRODUCT_HOME_PREMIUM_SERVER                     0x00000022\n#define PRODUCT_SERVER_FOR_SMALLBUSINESS_V              0x00000023\n#define PRODUCT_STANDARD_SERVER_V                       0x00000024\n#define PRODUCT_DATACENTER_SERVER_V                     0x00000025\n#define PRODUCT_SERVER_V                                0x00000025\n#define PRODUCT_ENTERPRISE_SERVER_V                     0x00000026\n#define PRODUCT_DATACENTER_SERVER_CORE_V                0x00000027\n#define PRODUCT_STANDARD_SERVER_CORE_V                  0x00000028\n#define PRODUCT_ENTERPRISE_SERVER_CORE_V                0x00000029\n#define PRODUCT_HYPERV                                  0x0000002A\n#define PRODUCT_STORAGE_EXPRESS_SERVER_CORE             0x0000002B\n#define PRODUCT_STORAGE_STANDARD_SERVER_CORE            0x0000002C\n#define PRODUCT_STORAGE_WORKGROUP_SERVER_CORE           0x0000002D\n#define PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE          0x0000002E\n#define PRODUCT_STARTER_N                               0x0000002F\n#define PRODUCT_PROFESSIONAL                            0x00000030\n#define PRODUCT_PROFESSIONAL_N                          0x00000031\n#define PRODUCT_SB_SOLUTION_SERVER                      0x00000032\n#define PRODUCT_SERVER_FOR_SB_SOLUTIONS                 0x00000033\n#define PRODUCT_STANDARD_SERVER_SOLUTIONS               0x00000034\n#define PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE          0x00000035\n#define PRODUCT_SB_SOLUTION_SERVER_EM                   0x00000036\n#define PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM              0x00000037\n#define PRODUCT_SOLUTION_EMBEDDEDSERVER                 0x00000038\n#define PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE            0x00000039\n#define PRODUCT_PROFESSIONAL_EMBEDDED                   0x0000003A\n#define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT           0x0000003B\n#define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL           0x0000003C\n#define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC        0x0000003D\n#define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC        0x0000003E\n#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE       0x0000003F\n#define PRODUCT_CLUSTER_SERVER_V                        0x00000040\n#define PRODUCT_EMBEDDED                                0x00000041\n#define PRODUCT_STARTER_E                               0x00000042\n#define PRODUCT_HOME_BASIC_E                            0x00000043\n#define PRODUCT_HOME_PREMIUM_E                          0x00000044\n#define PRODUCT_PROFESSIONAL_E                          0x00000045\n#define PRODUCT_ENTERPRISE_E                            0x00000046\n#define PRODUCT_ULTIMATE_E                              0x00000047\n#define PRODUCT_ENTERPRISE_EVALUATION                   0x00000048\n#define PRODUCT_MULTIPOINT_STANDARD_SERVER              0x0000004C\n#define PRODUCT_MULTIPOINT_PREMIUM_SERVER               0x0000004D\n#define PRODUCT_STANDARD_EVALUATION_SERVER              0x0000004F\n#define PRODUCT_DATACENTER_EVALUATION_SERVER            0x00000050\n#define PRODUCT_ENTERPRISE_N_EVALUATION                 0x00000054\n#define PRODUCT_EMBEDDED_AUTOMOTIVE                     0x00000055\n#define PRODUCT_EMBEDDED_INDUSTRY_A                     0x00000056\n#define PRODUCT_THINPC                                  0x00000057\n#define PRODUCT_EMBEDDED_A                              0x00000058\n#define PRODUCT_EMBEDDED_INDUSTRY                       0x00000059\n#define PRODUCT_EMBEDDED_E                              0x0000005A\n#define PRODUCT_EMBEDDED_INDUSTRY_E                     0x0000005B\n#define PRODUCT_EMBEDDED_INDUSTRY_A_E                   0x0000005C\n#define PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER     0x0000005F\n#define PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER      0x00000060\n#define PRODUCT_CORE_ARM                                0x00000061\n#define PRODUCT_CORE_N                                  0x00000062\n#define PRODUCT_CORE_COUNTRYSPECIFIC                    0x00000063\n#define PRODUCT_CORE_SINGLELANGUAGE                     0x00000064\n#define PRODUCT_CORE_LANGUAGESPECIFIC                   0x00000064\n#define PRODUCT_CORE                                    0x00000065\n#define PRODUCT_PROFESSIONAL_WMC                        0x00000067\n#define PRODUCT_MOBILE_CORE                             0x00000068\n#define PRODUCT_EMBEDDED_INDUSTRY_EVAL                  0x00000069\n#define PRODUCT_EMBEDDED_INDUSTRY_E_EVAL                0x0000006A\n#define PRODUCT_EMBEDDED_EVAL                           0x0000006B\n#define PRODUCT_EMBEDDED_E_EVAL                         0x0000006C\n#define PRODUCT_NANO_SERVER                             0x0000006D\n#define PRODUCT_CLOUD_STORAGE_SERVER                    0x0000006E\n#define PRODUCT_CORE_CONNECTED                          0x0000006F\n#define PRODUCT_PROFESSIONAL_STUDENT                    0x00000070\n#define PRODUCT_CORE_CONNECTED_N                        0x00000071\n#define PRODUCT_PROFESSIONAL_STUDENT_N                  0x00000072\n#define PRODUCT_CORE_CONNECTED_SINGLELANGUAGE           0x00000073\n#define PRODUCT_CORE_CONNECTED_COUNTRYSPECIFIC          0x00000074\n#define PRODUCT_CONNECTED_CAR                           0x00000075\n#define PRODUCT_INDUSTRY_HANDHELD                       0x00000076\n#define PRODUCT_PPI_PRO                                 0x00000077\n#define PRODUCT_ARM64_SERVER                            0x00000078\n#define PRODUCT_EDUCATION                               0x00000079\n#define PRODUCT_EDUCATION_N                             0x0000007A\n#define PRODUCT_IOTUAP                                  0x0000007B\n#define PRODUCT_CLOUD_HOST_INFRASTRUCTURE_SERVER        0x0000007C\n#define PRODUCT_ENTERPRISE_S                            0x0000007D\n#define PRODUCT_ENTERPRISE_S_N                          0x0000007E\n#define PRODUCT_PROFESSIONAL_S                          0x0000007F\n#define PRODUCT_PROFESSIONAL_S_N                        0x00000080\n#define PRODUCT_ENTERPRISE_S_EVALUATION                 0x00000081\n#define PRODUCT_ENTERPRISE_S_N_EVALUATION               0x00000082\n#define PRODUCT_UNLICENSED                              0xABCDABCD\n\n\n/*\n * Language IDs\n */\n\n#define MAKELCID(l, s)\t\t(MAKELONG(l, s))\n\n#define MAKELANGID(p, s)        ((((WORD)(s))<<10) | (WORD)(p))\n#define PRIMARYLANGID(l)        ((WORD)(l) & 0x3ff)\n#define SUBLANGID(l)            ((WORD)(l) >> 10)\n\n#define LANGIDFROMLCID(lcid)\t((WORD)(lcid))\n#define SORTIDFROMLCID(lcid)\t((WORD)((((DWORD)(lcid)) >> 16) & 0x0f))\n\n#define LANG_SYSTEM_DEFAULT\t(MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT))\n#define LANG_USER_DEFAULT\t(MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT))\n#define LOCALE_SYSTEM_DEFAULT\t(MAKELCID(LANG_SYSTEM_DEFAULT, SORT_DEFAULT))\n#define LOCALE_USER_DEFAULT\t(MAKELCID(LANG_USER_DEFAULT, SORT_DEFAULT))\n#define LOCALE_NEUTRAL\t\t(MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),SORT_DEFAULT))\n#define LOCALE_INVARIANT\t(MAKELCID(MAKELANGID(LANG_INVARIANT,SUBLANG_NEUTRAL),SORT_DEFAULT))\n#define LOCALE_CUSTOM_DEFAULT      (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_CUSTOM_DEFAULT),SORT_DEFAULT))\n#define LOCALE_CUSTOM_UNSPECIFIED  (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_CUSTOM_UNSPECIFIED),SORT_DEFAULT))\n#define LOCALE_CUSTOM_UI_DEFAULT   (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_UI_CUSTOM_DEFAULT),SORT_DEFAULT))\n#define LOCALE_NAME_MAX_LENGTH     85\n\n\n#define UNREFERENCED_PARAMETER(u)\t(void)(u)\n#define DBG_UNREFERENCED_PARAMETER(u)\t(void)(u)\n#define DBG_UNREFERENCED_LOCAL_VARIABLE(u) (void)(u)\n\n#include <winnt.rh>\n\n\n/*\n * Definitions for IsTextUnicode()\n */\n\n#define IS_TEXT_UNICODE_ASCII16\t\t   0x0001\n#define IS_TEXT_UNICODE_STATISTICS         0x0002\n#define IS_TEXT_UNICODE_CONTROLS           0x0004\n#define IS_TEXT_UNICODE_SIGNATURE\t   0x0008\n#define IS_TEXT_UNICODE_UNICODE_MASK       0x000F\n#define IS_TEXT_UNICODE_REVERSE_ASCII16\t   0x0010\n#define IS_TEXT_UNICODE_REVERSE_STATISTICS 0x0020\n#define IS_TEXT_UNICODE_REVERSE_CONTROLS   0x0040\n#define IS_TEXT_UNICODE_REVERSE_SIGNATURE  0x0080\n#define IS_TEXT_UNICODE_REVERSE_MASK       0x00F0\n#define IS_TEXT_UNICODE_ILLEGAL_CHARS\t   0x0100\n#define IS_TEXT_UNICODE_ODD_LENGTH\t   0x0200\n#define IS_TEXT_UNICODE_DBCS_LEADBYTE      0x0400\n#define IS_TEXT_UNICODE_NOT_UNICODE_MASK   0x0F00\n#define IS_TEXT_UNICODE_NULL_BYTES         0x1000\n#define IS_TEXT_UNICODE_NOT_ASCII_MASK     0xF000\n\n#define MAXIMUM_WAIT_OBJECTS 64\n#define MAXIMUM_SUSPEND_COUNT 127\n\n#define WT_EXECUTEDEFAULT              0x00\n#define WT_EXECUTEINIOTHREAD           0x01\n#define WT_EXECUTEINUITHREAD           0x02\n#define WT_EXECUTEINWAITTHREAD         0x04\n#define WT_EXECUTEONLYONCE             0x08\n#define WT_EXECUTELONGFUNCTION         0x10\n#define WT_EXECUTEINTIMERTHREAD        0x20\n#define WT_EXECUTEINPERSISTENTIOTHREAD 0x40\n#define WT_EXECUTEINPERSISTENTTHREAD   0x80\n#define WT_EXECUTEINLONGTHREAD         0x10\n#define WT_EXECUTEDELETEWAIT           0x08\n#define WT_TRANSFER_IMPERSONATION      0x0100\n\n\n#define EXCEPTION_CONTINUABLE        0\n#define EXCEPTION_NONCONTINUABLE     0x01\n\n/*\n * The exception record used by Win32 to give additional information\n * about exception to exception handlers.\n */\n\n#define EXCEPTION_MAXIMUM_PARAMETERS 15\n\ntypedef struct _EXCEPTION_RECORD\n{\n    DWORD    ExceptionCode;\n    DWORD    ExceptionFlags;\n    struct  _EXCEPTION_RECORD *ExceptionRecord;\n\n    PVOID    ExceptionAddress;\n    DWORD    NumberParameters;\n    ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];\n} EXCEPTION_RECORD, *PEXCEPTION_RECORD;\n\n/*\n * The exception pointers structure passed to exception filters\n * in except() and the UnhandledExceptionFilter().\n */\n\ntypedef struct _EXCEPTION_POINTERS\n{\n  PEXCEPTION_RECORD  ExceptionRecord;\n  PCONTEXT           ContextRecord;\n} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;\n\n\n/*\n * The exception frame, used for registering exception handlers\n * Win32 cares only about this, but compilers generally emit\n * larger exception frames for their own use.\n */\n\nstruct _EXCEPTION_REGISTRATION_RECORD;\n\ntypedef DWORD (*PEXCEPTION_HANDLER)(PEXCEPTION_RECORD,struct _EXCEPTION_REGISTRATION_RECORD*,\n                                    PCONTEXT,struct _EXCEPTION_REGISTRATION_RECORD **);\n\ntypedef struct _EXCEPTION_REGISTRATION_RECORD\n{\n  struct _EXCEPTION_REGISTRATION_RECORD *Prev;\n  PEXCEPTION_HANDLER       Handler;\n} EXCEPTION_REGISTRATION_RECORD;\n\n/*\n * function pointer to an exception filter\n */\n\ntypedef LONG (CALLBACK *PVECTORED_EXCEPTION_HANDLER)(PEXCEPTION_POINTERS ExceptionInfo);\n\ntypedef struct _NT_TIB\n{\n\tstruct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;\n\tPVOID StackBase;\n\tPVOID StackLimit;\n\tPVOID SubSystemTib;\n\tunion {\n          PVOID FiberData;\n          DWORD Version;\n\t} DUMMYUNIONNAME;\n\tPVOID ArbitraryUserPointer;\n\tstruct _NT_TIB *Self;\n} NT_TIB, *PNT_TIB;\n\nstruct _TEB;\n\n#if defined(__i386__) && defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))\nstatic FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)\n{\n    struct _TEB *teb;\n    __asm__(\".byte 0x64\\n\\tmovl (0x18),%0\" : \"=r\" (teb));\n    return teb;\n}\n#elif defined(__i386__) && defined(_MSC_VER)\nstatic FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)\n{\n  struct _TEB *teb;\n  __asm mov eax, fs:[0x18];\n  __asm mov teb, eax;\n  return teb;\n}\n#elif defined(__x86_64__) && defined(__GNUC__)\nstatic FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)\n{\n    struct _TEB *teb;\n    __asm__(\".byte 0x65\\n\\tmovq (0x30),%0\" : \"=r\" (teb));\n    return teb;\n}\n#elif defined(__x86_64__) && defined(_MSC_VER)\n#pragma intrinsic(__readgsqword)\nstatic FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)\n{\n    return (struct _TEB *)__readgsqword(FIELD_OFFSET(NT_TIB, Self));\n}\n#else\nextern struct _TEB * WINAPI NtCurrentTeb(void);\n#endif\n\n#ifdef NONAMELESSUNION\n#define GetCurrentFiber()  (((NT_TIB *)NtCurrentTeb())->u.FiberData)\n#else\n#define GetCurrentFiber()  (((NT_TIB *)NtCurrentTeb())->FiberData)\n#endif\n#define GetFiberData()     (*(void **)GetCurrentFiber())\n\n#define TLS_MINIMUM_AVAILABLE 64\n\n#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE    (16 * 1024)\n\n#define IO_REPARSE_TAG_RESERVED_ZERO    0\n#define IO_REPARSE_TAG_RESERVED_ONE     1\n#define IO_REPARSE_TAG_RESERVED_TWO     2\n\n#define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_TWO\n\n#define IO_REPARSE_TAG_MOUNT_POINT      __MSABI_LONG(0xA0000003)\n#define IO_REPARSE_TAG_HSM              __MSABI_LONG(0xC0000004)\n#define IO_REPARSE_TAG_DRIVE_EXTENDER   __MSABI_LONG(0x80000005)\n#define IO_REPARSE_TAG_HSM2             __MSABI_LONG(0x80000006)\n#define IO_REPARSE_TAG_SIS              __MSABI_LONG(0x80000007)\n#define IO_REPARSE_TAG_WIM              __MSABI_LONG(0x80000008)\n#define IO_REPARSE_TAG_CSV              __MSABI_LONG(0x80000009)\n#define IO_REPARSE_TAG_DFS              __MSABI_LONG(0x8000000A)\n#define IO_REPARSE_TAG_FILTER_MANAGER   __MSABI_LONG(0x8000000B)\n#define IO_REPARSE_TAG_SYMLINK          __MSABI_LONG(0xA000000C)\n#define IO_REPARSE_TAG_IIS_CACHE        __MSABI_LONG(0xA0000010)\n#define IO_REPARSE_TAG_DFSR             __MSABI_LONG(0x80000012)\n#define IO_REPARSE_TAG_DEDUP            __MSABI_LONG(0x80000013)\n#define IO_REPARSE_TAG_NFS              __MSABI_LONG(0x80000014)\n#define IO_REPARSE_TAG_FILE_PLACEHOLDER __MSABI_LONG(0x80000015)\n#define IO_REPARSE_TAG_WOF              __MSABI_LONG(0x80000017)\n#define IO_REPARSE_TAG_WCI              __MSABI_LONG(0x80000018)\n#define IO_REPARSE_TAG_WCI_1            __MSABI_LONG(0x90001018)\n#define IO_REPARSE_TAG_GLOBAL_REPARSE   __MSABI_LONG(0xA0000019)\n#define IO_REPARSE_TAG_CLOUD            __MSABI_LONG(0x9000001A)\n#define IO_REPARSE_TAG_CLOUD_1          __MSABI_LONG(0x9000101A)\n#define IO_REPARSE_TAG_CLOUD_2          __MSABI_LONG(0x9000201A)\n#define IO_REPARSE_TAG_CLOUD_3          __MSABI_LONG(0x9000301A)\n#define IO_REPARSE_TAG_CLOUD_4          __MSABI_LONG(0x9000401A)\n#define IO_REPARSE_TAG_CLOUD_5          __MSABI_LONG(0x9000501A)\n#define IO_REPARSE_TAG_CLOUD_6          __MSABI_LONG(0x9000601A)\n#define IO_REPARSE_TAG_CLOUD_7          __MSABI_LONG(0x9000701A)\n#define IO_REPARSE_TAG_CLOUD_8          __MSABI_LONG(0x9000801A)\n#define IO_REPARSE_TAG_CLOUD_9          __MSABI_LONG(0x9000901A)\n#define IO_REPARSE_TAG_CLOUD_A          __MSABI_LONG(0x9000A01A)\n#define IO_REPARSE_TAG_CLOUD_B          __MSABI_LONG(0x9000B01A)\n#define IO_REPARSE_TAG_CLOUD_C          __MSABI_LONG(0x9000C01A)\n#define IO_REPARSE_TAG_CLOUD_D          __MSABI_LONG(0x9000D01A)\n#define IO_REPARSE_TAG_CLOUD_E          __MSABI_LONG(0x9000E01A)\n#define IO_REPARSE_TAG_CLOUD_F          __MSABI_LONG(0x9000F01A)\n#define IO_REPARSE_TAG_CLOUD_MASK       __MSABI_LONG(0x0000F000)\n#define IO_REPARSE_TAG_APPEXECLINK      __MSABI_LONG(0x8000001B)\n#define IO_REPARSE_TAG_GVFS             __MSABI_LONG(0x9000001C)\n#define IO_REPARSE_TAG_STORAGE_SYNC     __MSABI_LONG(0x8000001E)\n#define IO_REPARSE_TAG_WCI_TOMBSTONE    __MSABI_LONG(0xA000001F)\n#define IO_REPARSE_TAG_UNHANDLED        __MSABI_LONG(0x80000020)\n#define IO_REPARSE_TAG_ONEDRIVE         __MSABI_LONG(0x80000021)\n#define IO_REPARSE_TAG_GVFS_TOMBSTONE   __MSABI_LONG(0xA0000022)\n\n/*\n * File formats definitions\n */\n\n#include <pshpack2.h>\ntypedef struct _IMAGE_DOS_HEADER {\n    WORD  e_magic;      /* 00: MZ Header signature */\n    WORD  e_cblp;       /* 02: Bytes on last page of file */\n    WORD  e_cp;         /* 04: Pages in file */\n    WORD  e_crlc;       /* 06: Relocations */\n    WORD  e_cparhdr;    /* 08: Size of header in paragraphs */\n    WORD  e_minalloc;   /* 0a: Minimum extra paragraphs needed */\n    WORD  e_maxalloc;   /* 0c: Maximum extra paragraphs needed */\n    WORD  e_ss;         /* 0e: Initial (relative) SS value */\n    WORD  e_sp;         /* 10: Initial SP value */\n    WORD  e_csum;       /* 12: Checksum */\n    WORD  e_ip;         /* 14: Initial IP value */\n    WORD  e_cs;         /* 16: Initial (relative) CS value */\n    WORD  e_lfarlc;     /* 18: File address of relocation table */\n    WORD  e_ovno;       /* 1a: Overlay number */\n    WORD  e_res[4];     /* 1c: Reserved words */\n    WORD  e_oemid;      /* 24: OEM identifier (for e_oeminfo) */\n    WORD  e_oeminfo;    /* 26: OEM information; e_oemid specific */\n    WORD  e_res2[10];   /* 28: Reserved words */\n    DWORD e_lfanew;     /* 3c: Offset to extended header */\n} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;\n#include <poppack.h>\n\n#define IMAGE_DOS_SIGNATURE    0x5A4D     /* MZ   */\n#define IMAGE_OS2_SIGNATURE    0x454E     /* NE   */\n#define IMAGE_OS2_SIGNATURE_LE 0x454C     /* LE   */\n#define IMAGE_OS2_SIGNATURE_LX 0x584C     /* LX */\n#define IMAGE_VXD_SIGNATURE    0x454C     /* LE   */\n#define IMAGE_NT_SIGNATURE     0x00004550 /* PE00 */\n\n/*\n * This is the Windows executable (NE) header.\n * the name IMAGE_OS2_HEADER is misleading, but in the SDK this way.\n */\n#include <pshpack2.h>\ntypedef struct\n{\n    WORD  ne_magic;             /* 00 NE signature 'NE' */\n    BYTE  ne_ver;               /* 02 Linker version number */\n    BYTE  ne_rev;               /* 03 Linker revision number */\n    WORD  ne_enttab;            /* 04 Offset to entry table relative to NE */\n    WORD  ne_cbenttab;          /* 06 Length of entry table in bytes */\n    LONG  ne_crc;               /* 08 Checksum */\n    WORD  ne_flags;             /* 0c Flags about segments in this file */\n    WORD  ne_autodata;          /* 0e Automatic data segment number */\n    WORD  ne_heap;              /* 10 Initial size of local heap */\n    WORD  ne_stack;             /* 12 Initial size of stack */\n    DWORD ne_csip;              /* 14 Initial CS:IP */\n    DWORD ne_sssp;              /* 18 Initial SS:SP */\n    WORD  ne_cseg;              /* 1c # of entries in segment table */\n    WORD  ne_cmod;              /* 1e # of entries in module reference tab. */\n    WORD  ne_cbnrestab;         /* 20 Length of nonresident-name table     */\n    WORD  ne_segtab;            /* 22 Offset to segment table */\n    WORD  ne_rsrctab;           /* 24 Offset to resource table */\n    WORD  ne_restab;            /* 26 Offset to resident-name table */\n    WORD  ne_modtab;            /* 28 Offset to module reference table */\n    WORD  ne_imptab;            /* 2a Offset to imported name table */\n    DWORD ne_nrestab;           /* 2c Offset to nonresident-name table */\n    WORD  ne_cmovent;           /* 30 # of movable entry points */\n    WORD  ne_align;             /* 32 Logical sector alignment shift count */\n    WORD  ne_cres;              /* 34 # of resource segments */\n    BYTE  ne_exetyp;            /* 36 Flags indicating target OS */\n    BYTE  ne_flagsothers;       /* 37 Additional information flags */\n    WORD  ne_pretthunks;        /* 38 Offset to return thunks */\n    WORD  ne_psegrefbytes;      /* 3a Offset to segment ref. bytes */\n    WORD  ne_swaparea;          /* 3c Reserved by Microsoft */\n    WORD  ne_expver;            /* 3e Expected Windows version number */\n} IMAGE_OS2_HEADER, *PIMAGE_OS2_HEADER;\n#include <poppack.h>\n\n#include <pshpack2.h>\ntypedef struct _IMAGE_VXD_HEADER {\n  WORD  e32_magic;\n  BYTE  e32_border;\n  BYTE  e32_worder;\n  DWORD e32_level;\n  WORD  e32_cpu;\n  WORD  e32_os;\n  DWORD e32_ver;\n  DWORD e32_mflags;\n  DWORD e32_mpages;\n  DWORD e32_startobj;\n  DWORD e32_eip;\n  DWORD e32_stackobj;\n  DWORD e32_esp;\n  DWORD e32_pagesize;\n  DWORD e32_lastpagesize;\n  DWORD e32_fixupsize;\n  DWORD e32_fixupsum;\n  DWORD e32_ldrsize;\n  DWORD e32_ldrsum;\n  DWORD e32_objtab;\n  DWORD e32_objcnt;\n  DWORD e32_objmap;\n  DWORD e32_itermap;\n  DWORD e32_rsrctab;\n  DWORD e32_rsrccnt;\n  DWORD e32_restab;\n  DWORD e32_enttab;\n  DWORD e32_dirtab;\n  DWORD e32_dircnt;\n  DWORD e32_fpagetab;\n  DWORD e32_frectab;\n  DWORD e32_impmod;\n  DWORD e32_impmodcnt;\n  DWORD e32_impproc;\n  DWORD e32_pagesum;\n  DWORD e32_datapage;\n  DWORD e32_preload;\n  DWORD e32_nrestab;\n  DWORD e32_cbnrestab;\n  DWORD e32_nressum;\n  DWORD e32_autodata;\n  DWORD e32_debuginfo;\n  DWORD e32_debuglen;\n  DWORD e32_instpreload;\n  DWORD e32_instdemand;\n  DWORD e32_heapsize;\n  BYTE  e32_res3[12];\n  DWORD e32_winresoff;\n  DWORD e32_winreslen;\n  WORD  e32_devid;\n  WORD  e32_ddkver;\n} IMAGE_VXD_HEADER, *PIMAGE_VXD_HEADER;\n#include <poppack.h>\n\n/* These defines describe the meanings of the bits in the Characteristics\n   field */\n\n#define IMAGE_FILE_RELOCS_STRIPPED\t0x0001 /* No relocation info */\n#define IMAGE_FILE_EXECUTABLE_IMAGE\t0x0002\n#define IMAGE_FILE_LINE_NUMS_STRIPPED   0x0004\n#define IMAGE_FILE_LOCAL_SYMS_STRIPPED  0x0008\n#define IMAGE_FILE_AGGRESIVE_WS_TRIM\t0x0010\n#define IMAGE_FILE_LARGE_ADDRESS_AWARE\t0x0020\n#define IMAGE_FILE_16BIT_MACHINE\t0x0040\n#define IMAGE_FILE_BYTES_REVERSED_LO\t0x0080\n#define IMAGE_FILE_32BIT_MACHINE\t0x0100\n#define IMAGE_FILE_DEBUG_STRIPPED\t0x0200\n#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP\t0x0400\n#define IMAGE_FILE_NET_RUN_FROM_SWAP\t0x0800\n#define IMAGE_FILE_SYSTEM\t\t0x1000\n#define IMAGE_FILE_DLL\t\t\t0x2000\n#define IMAGE_FILE_UP_SYSTEM_ONLY\t0x4000\n#define IMAGE_FILE_BYTES_REVERSED_HI\t0x8000\n\n/* These are the settings of the Machine field. */\n#define\tIMAGE_FILE_MACHINE_UNKNOWN\t0\n#define\tIMAGE_FILE_MACHINE_I860\t\t0x014d\n#define\tIMAGE_FILE_MACHINE_I386\t\t0x014c\n#define\tIMAGE_FILE_MACHINE_R3000\t0x0162\n#define\tIMAGE_FILE_MACHINE_R4000\t0x0166\n#define\tIMAGE_FILE_MACHINE_R10000\t0x0168\n#define\tIMAGE_FILE_MACHINE_WCEMIPSV2\t0x0169\n#define\tIMAGE_FILE_MACHINE_ALPHA\t0x0184\n#define\tIMAGE_FILE_MACHINE_SH3\t\t0x01a2\n#define\tIMAGE_FILE_MACHINE_SH3DSP\t0x01a3\n#define\tIMAGE_FILE_MACHINE_SH3E\t\t0x01a4\n#define\tIMAGE_FILE_MACHINE_SH4\t\t0x01a6\n#define\tIMAGE_FILE_MACHINE_SH5\t\t0x01a8\n#define\tIMAGE_FILE_MACHINE_ARM\t\t0x01c0\n#define\tIMAGE_FILE_MACHINE_THUMB\t0x01c2\n#define\tIMAGE_FILE_MACHINE_ARMNT\t0x01c4\n#define\tIMAGE_FILE_MACHINE_ARM64\t0xaa64\n#define\tIMAGE_FILE_MACHINE_AM33\t\t0x01d3\n#define\tIMAGE_FILE_MACHINE_POWERPC\t0x01f0\n#define\tIMAGE_FILE_MACHINE_POWERPCFP\t0x01f1\n#define\tIMAGE_FILE_MACHINE_IA64\t\t0x0200\n#define\tIMAGE_FILE_MACHINE_MIPS16\t0x0266\n#define\tIMAGE_FILE_MACHINE_ALPHA64\t0x0284\n#define\tIMAGE_FILE_MACHINE_MIPSFPU\t0x0366\n#define\tIMAGE_FILE_MACHINE_MIPSFPU16\t0x0466\n#define\tIMAGE_FILE_MACHINE_AXP64\tIMAGE_FILE_MACHINE_ALPHA64\n#define\tIMAGE_FILE_MACHINE_TRICORE\t0x0520\n#define\tIMAGE_FILE_MACHINE_CEF\t\t0x0cef\n#define\tIMAGE_FILE_MACHINE_EBC\t\t0x0ebc\n#define\tIMAGE_FILE_MACHINE_AMD64\t0x8664\n#define\tIMAGE_FILE_MACHINE_M32R\t\t0x9041\n#define\tIMAGE_FILE_MACHINE_CEE\t\t0xc0ee\n\n#define\tIMAGE_SIZEOF_FILE_HEADER\t\t20\n#define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER\t56\n#define IMAGE_SIZEOF_STD_OPTIONAL_HEADER\t28\n#define IMAGE_SIZEOF_NT_OPTIONAL32_HEADER \t224\n#define IMAGE_SIZEOF_NT_OPTIONAL64_HEADER \t240\n#define IMAGE_SIZEOF_SHORT_NAME \t\t8\n#define IMAGE_SIZEOF_SECTION_HEADER \t\t40\n#define IMAGE_SIZEOF_SYMBOL \t\t\t18\n#define IMAGE_SIZEOF_AUX_SYMBOL \t\t18\n#define IMAGE_SIZEOF_RELOCATION \t\t10\n#define IMAGE_SIZEOF_BASE_RELOCATION \t\t8\n#define IMAGE_SIZEOF_LINENUMBER \t\t6\n#define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR \t60\n\n/* Possible Magic values */\n#define IMAGE_NT_OPTIONAL_HDR32_MAGIC      0x10b\n#define IMAGE_NT_OPTIONAL_HDR64_MAGIC      0x20b\n#define IMAGE_ROM_OPTIONAL_HDR_MAGIC       0x107\n\n#ifdef _WIN64\n#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL64_HEADER\n#define IMAGE_NT_OPTIONAL_HDR_MAGIC     IMAGE_NT_OPTIONAL_HDR64_MAGIC\n#else\n#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL32_HEADER\n#define IMAGE_NT_OPTIONAL_HDR_MAGIC     IMAGE_NT_OPTIONAL_HDR32_MAGIC\n#endif\n\n/* These are indexes into the DataDirectory array */\n#define IMAGE_FILE_EXPORT_DIRECTORY\t\t0\n#define IMAGE_FILE_IMPORT_DIRECTORY\t\t1\n#define IMAGE_FILE_RESOURCE_DIRECTORY\t\t2\n#define IMAGE_FILE_EXCEPTION_DIRECTORY\t\t3\n#define IMAGE_FILE_SECURITY_DIRECTORY\t\t4\n#define IMAGE_FILE_BASE_RELOCATION_TABLE\t5\n#define IMAGE_FILE_DEBUG_DIRECTORY\t\t6\n#define IMAGE_FILE_DESCRIPTION_STRING\t\t7\n#define IMAGE_FILE_MACHINE_VALUE\t\t8  /* Mips */\n#define IMAGE_FILE_THREAD_LOCAL_STORAGE\t\t9\n#define IMAGE_FILE_CALLBACK_DIRECTORY\t\t10\n\n/* Directory Entries, indices into the DataDirectory array */\n\n#define\tIMAGE_DIRECTORY_ENTRY_EXPORT\t\t0\n#define\tIMAGE_DIRECTORY_ENTRY_IMPORT\t\t1\n#define\tIMAGE_DIRECTORY_ENTRY_RESOURCE\t\t2\n#define\tIMAGE_DIRECTORY_ENTRY_EXCEPTION\t\t3\n#define\tIMAGE_DIRECTORY_ENTRY_SECURITY\t\t4\n#define\tIMAGE_DIRECTORY_ENTRY_BASERELOC\t\t5\n#define\tIMAGE_DIRECTORY_ENTRY_DEBUG\t\t6\n#define\tIMAGE_DIRECTORY_ENTRY_COPYRIGHT\t\t7\n#define\tIMAGE_DIRECTORY_ENTRY_GLOBALPTR\t\t8   /* (MIPS GP) */\n#define\tIMAGE_DIRECTORY_ENTRY_TLS\t\t9\n#define\tIMAGE_DIRECTORY_ENTRY_LOAD_CONFIG\t10\n#define\tIMAGE_DIRECTORY_ENTRY_BOUND_IMPORT\t11\n#define\tIMAGE_DIRECTORY_ENTRY_IAT\t\t12  /* Import Address Table */\n#define\tIMAGE_DIRECTORY_ENTRY_DELAY_IMPORT\t13\n#define\tIMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR\t14\n\n/* Subsystem Values */\n\n#define\tIMAGE_SUBSYSTEM_UNKNOWN\t\t\t0\n#define\tIMAGE_SUBSYSTEM_NATIVE\t\t\t1\n#define\tIMAGE_SUBSYSTEM_WINDOWS_GUI\t\t2\t/* Windows GUI subsystem */\n#define\tIMAGE_SUBSYSTEM_WINDOWS_CUI\t\t3\t/* Windows character subsystem */\n#define\tIMAGE_SUBSYSTEM_OS2_CUI\t\t\t5\n#define\tIMAGE_SUBSYSTEM_POSIX_CUI\t\t7\n#define\tIMAGE_SUBSYSTEM_NATIVE_WINDOWS\t\t8\t/* native Win9x driver */\n#define\tIMAGE_SUBSYSTEM_WINDOWS_CE_GUI\t\t9\t/* Windows CE subsystem */\n#define\tIMAGE_SUBSYSTEM_EFI_APPLICATION\t\t10\n#define\tIMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER\t11\n#define\tIMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER\t12\n#define\tIMAGE_SUBSYSTEM_EFI_ROM\t\t\t13\n#define\tIMAGE_SUBSYSTEM_XBOX\t\t\t14\n#define\tIMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION\t16\n\n/* DLL Characteristics */\n#define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE          0x0040\n#define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY       0x0080\n#define IMAGE_DLLCHARACTERISTICS_NX_COMPAT             0x0100\n#define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION          0x0200\n#define IMAGE_DLLCHARACTERISTICS_NO_SEH                0x0400\n#define IMAGE_DLLCHARACTERISTICS_NO_BIND               0x0800\n#define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER            0x2000\n#define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000\n\ntypedef struct _IMAGE_FILE_HEADER {\n  WORD  Machine;\n  WORD  NumberOfSections;\n  DWORD TimeDateStamp;\n  DWORD PointerToSymbolTable;\n  DWORD NumberOfSymbols;\n  WORD  SizeOfOptionalHeader;\n  WORD  Characteristics;\n} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;\n\ntypedef struct _IMAGE_DATA_DIRECTORY {\n  DWORD VirtualAddress;\n  DWORD Size;\n} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;\n\n#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16\n\ntypedef struct _IMAGE_OPTIONAL_HEADER64 {\n  WORD  Magic; /* 0x20b */\n  BYTE MajorLinkerVersion;\n  BYTE MinorLinkerVersion;\n  DWORD SizeOfCode;\n  DWORD SizeOfInitializedData;\n  DWORD SizeOfUninitializedData;\n  DWORD AddressOfEntryPoint;\n  DWORD BaseOfCode;\n  ULONGLONG ImageBase;\n  DWORD SectionAlignment;\n  DWORD FileAlignment;\n  WORD MajorOperatingSystemVersion;\n  WORD MinorOperatingSystemVersion;\n  WORD MajorImageVersion;\n  WORD MinorImageVersion;\n  WORD MajorSubsystemVersion;\n  WORD MinorSubsystemVersion;\n  DWORD Win32VersionValue;\n  DWORD SizeOfImage;\n  DWORD SizeOfHeaders;\n  DWORD CheckSum;\n  WORD Subsystem;\n  WORD DllCharacteristics;\n  ULONGLONG SizeOfStackReserve;\n  ULONGLONG SizeOfStackCommit;\n  ULONGLONG SizeOfHeapReserve;\n  ULONGLONG SizeOfHeapCommit;\n  DWORD LoaderFlags;\n  DWORD NumberOfRvaAndSizes;\n  IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];\n} IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64;\n\ntypedef struct _IMAGE_NT_HEADERS64 {\n  DWORD Signature;\n  IMAGE_FILE_HEADER FileHeader;\n  IMAGE_OPTIONAL_HEADER64 OptionalHeader;\n} IMAGE_NT_HEADERS64, *PIMAGE_NT_HEADERS64;\n\ntypedef struct _IMAGE_OPTIONAL_HEADER {\n\n  /* Standard fields */\n\n  WORD  Magic; /* 0x10b or 0x107 */\t/* 0x00 */\n  BYTE  MajorLinkerVersion;\n  BYTE  MinorLinkerVersion;\n  DWORD SizeOfCode;\n  DWORD SizeOfInitializedData;\n  DWORD SizeOfUninitializedData;\n  DWORD AddressOfEntryPoint;\t\t/* 0x10 */\n  DWORD BaseOfCode;\n  DWORD BaseOfData;\n\n  /* NT additional fields */\n\n  DWORD ImageBase;\n  DWORD SectionAlignment;\t\t/* 0x20 */\n  DWORD FileAlignment;\n  WORD  MajorOperatingSystemVersion;\n  WORD  MinorOperatingSystemVersion;\n  WORD  MajorImageVersion;\n  WORD  MinorImageVersion;\n  WORD  MajorSubsystemVersion;\t\t/* 0x30 */\n  WORD  MinorSubsystemVersion;\n  DWORD Win32VersionValue;\n  DWORD SizeOfImage;\n  DWORD SizeOfHeaders;\n  DWORD CheckSum;\t\t\t/* 0x40 */\n  WORD  Subsystem;\n  WORD  DllCharacteristics;\n  DWORD SizeOfStackReserve;\n  DWORD SizeOfStackCommit;\n  DWORD SizeOfHeapReserve;\t\t/* 0x50 */\n  DWORD SizeOfHeapCommit;\n  DWORD LoaderFlags;\n  DWORD NumberOfRvaAndSizes;\n  IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; /* 0x60 */\n  /* 0xE0 */\n} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;\n\ntypedef struct _IMAGE_NT_HEADERS {\n  DWORD Signature; /* \"PE\"\\0\\0 */\t/* 0x00 */\n  IMAGE_FILE_HEADER FileHeader;\t\t/* 0x04 */\n  IMAGE_OPTIONAL_HEADER32 OptionalHeader;\t/* 0x18 */\n} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;\n\n#ifdef _WIN64\ntypedef IMAGE_NT_HEADERS64  IMAGE_NT_HEADERS;\ntypedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS;\ntypedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER;\ntypedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER;\n#else\ntypedef IMAGE_NT_HEADERS32  IMAGE_NT_HEADERS;\ntypedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS;\ntypedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER;\ntypedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER;\n#endif\n\n#define IMAGE_SIZEOF_SHORT_NAME 8\n\ntypedef struct _IMAGE_SECTION_HEADER {\n  BYTE  Name[IMAGE_SIZEOF_SHORT_NAME];\n  union {\n    DWORD PhysicalAddress;\n    DWORD VirtualSize;\n  } Misc;\n  DWORD VirtualAddress;\n  DWORD SizeOfRawData;\n  DWORD PointerToRawData;\n  DWORD PointerToRelocations;\n  DWORD PointerToLinenumbers;\n  WORD  NumberOfRelocations;\n  WORD  NumberOfLinenumbers;\n  DWORD Characteristics;\n} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;\n\n#define\tIMAGE_SIZEOF_SECTION_HEADER 40\n\n#define IMAGE_FIRST_SECTION(ntheader) \\\n  ((PIMAGE_SECTION_HEADER)(ULONG_PTR)((const BYTE *)&((const IMAGE_NT_HEADERS *)(ntheader))->OptionalHeader + \\\n                           ((const IMAGE_NT_HEADERS *)(ntheader))->FileHeader.SizeOfOptionalHeader))\n\n/* These defines are for the Characteristics bitfield. */\n/* #define IMAGE_SCN_TYPE_REG\t\t\t0x00000000 - Reserved */\n/* #define IMAGE_SCN_TYPE_DSECT\t\t\t0x00000001 - Reserved */\n/* #define IMAGE_SCN_TYPE_NOLOAD\t\t0x00000002 - Reserved */\n/* #define IMAGE_SCN_TYPE_GROUP\t\t\t0x00000004 - Reserved */\n#define IMAGE_SCN_TYPE_NO_PAD\t\t\t0x00000008 /* Reserved */\n/* #define IMAGE_SCN_TYPE_COPY\t\t\t0x00000010 - Reserved */\n\n#define IMAGE_SCN_CNT_CODE\t\t\t0x00000020\n#define IMAGE_SCN_CNT_INITIALIZED_DATA\t\t0x00000040\n#define IMAGE_SCN_CNT_UNINITIALIZED_DATA\t0x00000080\n\n#define\tIMAGE_SCN_LNK_OTHER\t\t\t0x00000100\n#define\tIMAGE_SCN_LNK_INFO\t\t\t0x00000200\n/* #define\tIMAGE_SCN_TYPE_OVER\t\t0x00000400 - Reserved */\n#define\tIMAGE_SCN_LNK_REMOVE\t\t\t0x00000800\n#define\tIMAGE_SCN_LNK_COMDAT\t\t\t0x00001000\n\n/* \t\t\t\t\t\t0x00002000 - Reserved */\n/* #define IMAGE_SCN_MEM_PROTECTED \t\t0x00004000 - Obsolete */\n#define\tIMAGE_SCN_MEM_FARDATA\t\t\t0x00008000\n\n/* #define IMAGE_SCN_MEM_SYSHEAP\t\t0x00010000 - Obsolete */\n#define\tIMAGE_SCN_MEM_PURGEABLE\t\t\t0x00020000\n#define\tIMAGE_SCN_MEM_16BIT\t\t\t0x00020000\n#define\tIMAGE_SCN_MEM_LOCKED\t\t\t0x00040000\n#define\tIMAGE_SCN_MEM_PRELOAD\t\t\t0x00080000\n\n#define\tIMAGE_SCN_ALIGN_1BYTES\t\t\t0x00100000\n#define\tIMAGE_SCN_ALIGN_2BYTES\t\t\t0x00200000\n#define\tIMAGE_SCN_ALIGN_4BYTES\t\t\t0x00300000\n#define\tIMAGE_SCN_ALIGN_8BYTES\t\t\t0x00400000\n#define\tIMAGE_SCN_ALIGN_16BYTES\t\t\t0x00500000  /* Default */\n#define\tIMAGE_SCN_ALIGN_32BYTES\t\t\t0x00600000\n#define\tIMAGE_SCN_ALIGN_64BYTES\t\t\t0x00700000\n#define\tIMAGE_SCN_ALIGN_128BYTES\t\t0x00800000\n#define\tIMAGE_SCN_ALIGN_256BYTES\t\t0x00900000\n#define\tIMAGE_SCN_ALIGN_512BYTES\t\t0x00A00000\n#define\tIMAGE_SCN_ALIGN_1024BYTES\t\t0x00B00000\n#define\tIMAGE_SCN_ALIGN_2048BYTES\t\t0x00C00000\n#define\tIMAGE_SCN_ALIGN_4096BYTES\t\t0x00D00000\n#define\tIMAGE_SCN_ALIGN_8192BYTES\t\t0x00E00000\n/* \t\t\t\t\t\t0x00F00000 - Unused */\n#define\tIMAGE_SCN_ALIGN_MASK\t\t\t0x00F00000\n\n#define IMAGE_SCN_LNK_NRELOC_OVFL\t\t0x01000000\n\n\n#define IMAGE_SCN_MEM_DISCARDABLE\t\t0x02000000\n#define IMAGE_SCN_MEM_NOT_CACHED\t\t0x04000000\n#define IMAGE_SCN_MEM_NOT_PAGED\t\t\t0x08000000\n#define IMAGE_SCN_MEM_SHARED\t\t\t0x10000000\n#define IMAGE_SCN_MEM_EXECUTE\t\t\t0x20000000\n#define IMAGE_SCN_MEM_READ\t\t\t0x40000000\n#define IMAGE_SCN_MEM_WRITE\t\t\t0x80000000\n\n#include <pshpack2.h>\n\ntypedef struct _IMAGE_SYMBOL {\n    union {\n        BYTE    ShortName[8];\n        struct {\n            DWORD   Short;\n            DWORD   Long;\n        } Name;\n        DWORD   LongName[2];\n    } N;\n    DWORD   Value;\n    SHORT   SectionNumber;\n    WORD    Type;\n    BYTE    StorageClass;\n    BYTE    NumberOfAuxSymbols;\n} IMAGE_SYMBOL;\ntypedef IMAGE_SYMBOL *PIMAGE_SYMBOL;\n\n#define IMAGE_SIZEOF_SYMBOL 18\n\ntypedef struct _IMAGE_LINENUMBER {\n    union {\n        DWORD   SymbolTableIndex;\n        DWORD   VirtualAddress;\n    } Type;\n    WORD    Linenumber;\n} IMAGE_LINENUMBER;\ntypedef IMAGE_LINENUMBER *PIMAGE_LINENUMBER;\n\n#define IMAGE_SIZEOF_LINENUMBER  6\n\ntypedef union _IMAGE_AUX_SYMBOL {\n    struct {\n        DWORD    TagIndex;\n        union {\n            struct {\n                WORD    Linenumber;\n                WORD    Size;\n            } LnSz;\n           DWORD    TotalSize;\n        } Misc;\n        union {\n            struct {\n                DWORD    PointerToLinenumber;\n                DWORD    PointerToNextFunction;\n            } Function;\n            struct {\n                WORD     Dimension[4];\n            } Array;\n        } FcnAry;\n        WORD    TvIndex;\n    } Sym;\n    struct {\n        BYTE    Name[IMAGE_SIZEOF_SYMBOL];\n    } File;\n    struct {\n        DWORD   Length;\n        WORD    NumberOfRelocations;\n        WORD    NumberOfLinenumbers;\n        DWORD   CheckSum;\n        SHORT   Number;\n        BYTE    Selection;\n    } Section;\n} IMAGE_AUX_SYMBOL;\ntypedef IMAGE_AUX_SYMBOL *PIMAGE_AUX_SYMBOL;\n\n#define IMAGE_SIZEOF_AUX_SYMBOL 18\n\n#include <poppack.h>\n\n#define IMAGE_SYM_UNDEFINED           (SHORT)0\n#define IMAGE_SYM_ABSOLUTE            (SHORT)-1\n#define IMAGE_SYM_DEBUG               (SHORT)-2\n\n#define IMAGE_SYM_TYPE_NULL                 0x0000\n#define IMAGE_SYM_TYPE_VOID                 0x0001\n#define IMAGE_SYM_TYPE_CHAR                 0x0002\n#define IMAGE_SYM_TYPE_SHORT                0x0003\n#define IMAGE_SYM_TYPE_INT                  0x0004\n#define IMAGE_SYM_TYPE_LONG                 0x0005\n#define IMAGE_SYM_TYPE_FLOAT                0x0006\n#define IMAGE_SYM_TYPE_DOUBLE               0x0007\n#define IMAGE_SYM_TYPE_STRUCT               0x0008\n#define IMAGE_SYM_TYPE_UNION                0x0009\n#define IMAGE_SYM_TYPE_ENUM                 0x000A\n#define IMAGE_SYM_TYPE_MOE                  0x000B\n#define IMAGE_SYM_TYPE_BYTE                 0x000C\n#define IMAGE_SYM_TYPE_WORD                 0x000D\n#define IMAGE_SYM_TYPE_UINT                 0x000E\n#define IMAGE_SYM_TYPE_DWORD                0x000F\n#define IMAGE_SYM_TYPE_PCODE                0x8000\n\n#define IMAGE_SYM_DTYPE_NULL                0\n#define IMAGE_SYM_DTYPE_POINTER             1\n#define IMAGE_SYM_DTYPE_FUNCTION            2\n#define IMAGE_SYM_DTYPE_ARRAY               3\n\n#define IMAGE_SYM_CLASS_END_OF_FUNCTION     (BYTE )-1\n#define IMAGE_SYM_CLASS_NULL                0x0000\n#define IMAGE_SYM_CLASS_AUTOMATIC           0x0001\n#define IMAGE_SYM_CLASS_EXTERNAL            0x0002\n#define IMAGE_SYM_CLASS_STATIC              0x0003\n#define IMAGE_SYM_CLASS_REGISTER            0x0004\n#define IMAGE_SYM_CLASS_EXTERNAL_DEF        0x0005\n#define IMAGE_SYM_CLASS_LABEL               0x0006\n#define IMAGE_SYM_CLASS_UNDEFINED_LABEL     0x0007\n#define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT    0x0008\n#define IMAGE_SYM_CLASS_ARGUMENT            0x0009\n#define IMAGE_SYM_CLASS_STRUCT_TAG          0x000A\n#define IMAGE_SYM_CLASS_MEMBER_OF_UNION     0x000B\n#define IMAGE_SYM_CLASS_UNION_TAG           0x000C\n#define IMAGE_SYM_CLASS_TYPE_DEFINITION     0x000D\n#define IMAGE_SYM_CLASS_UNDEFINED_STATIC    0x000E\n#define IMAGE_SYM_CLASS_ENUM_TAG            0x000F\n#define IMAGE_SYM_CLASS_MEMBER_OF_ENUM      0x0010\n#define IMAGE_SYM_CLASS_REGISTER_PARAM      0x0011\n#define IMAGE_SYM_CLASS_BIT_FIELD           0x0012\n\n#define IMAGE_SYM_CLASS_FAR_EXTERNAL        0x0044\n#define IMAGE_SYM_CLASS_BLOCK               0x0064\n#define IMAGE_SYM_CLASS_FUNCTION            0x0065\n#define IMAGE_SYM_CLASS_END_OF_STRUCT       0x0066\n#define IMAGE_SYM_CLASS_FILE                0x0067\n#define IMAGE_SYM_CLASS_SECTION             0x0068\n#define IMAGE_SYM_CLASS_WEAK_EXTERNAL       0x0069\n\n#define N_BTMASK                            0x000F\n#define N_TMASK                             0x0030\n#define N_TMASK1                            0x00C0\n#define N_TMASK2                            0x00F0\n#define N_BTSHFT                            4\n#define N_TSHIFT                            2\n\n#define BTYPE(x) ((x) & N_BTMASK)\n\n#ifndef ISPTR\n#define ISPTR(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT))\n#endif\n\n#ifndef ISFCN\n#define ISFCN(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT))\n#endif\n\n#ifndef ISARY\n#define ISARY(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_ARRAY << N_BTSHFT))\n#endif\n\n#ifndef ISTAG\n#define ISTAG(x) ((x)==IMAGE_SYM_CLASS_STRUCT_TAG || (x)==IMAGE_SYM_CLASS_UNION_TAG || (x)==IMAGE_SYM_CLASS_ENUM_TAG)\n#endif\n\n#ifndef INCREF\n#define INCREF(x) ((((x)&~N_BTMASK)<<N_TSHIFT)|(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT)|((x)&N_BTMASK))\n#endif\n#ifndef DECREF\n#define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))\n#endif\n\n#define IMAGE_COMDAT_SELECT_NODUPLICATES    1\n#define IMAGE_COMDAT_SELECT_ANY             2\n#define IMAGE_COMDAT_SELECT_SAME_SIZE       3\n#define IMAGE_COMDAT_SELECT_EXACT_MATCH     4\n#define IMAGE_COMDAT_SELECT_ASSOCIATIVE     5\n#define IMAGE_COMDAT_SELECT_LARGEST         6\n#define IMAGE_COMDAT_SELECT_NEWEST          7\n\n#define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY  1\n#define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY    2\n#define IMAGE_WEAK_EXTERN_SEARCH_ALIAS      3\n\n/* Export module directory */\n\ntypedef struct _IMAGE_EXPORT_DIRECTORY {\n\tDWORD\tCharacteristics;\n\tDWORD\tTimeDateStamp;\n\tWORD\tMajorVersion;\n\tWORD\tMinorVersion;\n\tDWORD\tName;\n\tDWORD\tBase;\n\tDWORD\tNumberOfFunctions;\n\tDWORD\tNumberOfNames;\n\tDWORD\tAddressOfFunctions;\n\tDWORD\tAddressOfNames;\n\tDWORD\tAddressOfNameOrdinals;\n} IMAGE_EXPORT_DIRECTORY,*PIMAGE_EXPORT_DIRECTORY;\n\n/* Import name entry */\ntypedef struct _IMAGE_IMPORT_BY_NAME {\n\tWORD\tHint;\n\tBYTE\tName[1];\n} IMAGE_IMPORT_BY_NAME,*PIMAGE_IMPORT_BY_NAME;\n\n#include <pshpack8.h>\n/* Import thunk */\ntypedef struct _IMAGE_THUNK_DATA64 {\n\tunion {\n\t\tULONGLONG ForwarderString;\n\t\tULONGLONG Function;\n\t\tULONGLONG Ordinal;\n\t\tULONGLONG AddressOfData;\n\t} u1;\n} IMAGE_THUNK_DATA64,*PIMAGE_THUNK_DATA64;\n#include <poppack.h>\n\ntypedef struct _IMAGE_THUNK_DATA32 {\n\tunion {\n\t\tDWORD ForwarderString;\n\t\tDWORD Function;\n\t\tDWORD Ordinal;\n\t\tDWORD AddressOfData;\n\t} u1;\n} IMAGE_THUNK_DATA32,*PIMAGE_THUNK_DATA32;\n\n/* Import module directory */\n\ntypedef struct _IMAGE_IMPORT_DESCRIPTOR {\n\tunion {\n\t\tDWORD\tCharacteristics; /* 0 for terminating null import descriptor  */\n\t\tDWORD\tOriginalFirstThunk;\t/* RVA to original unbound IAT */\n\t} DUMMYUNIONNAME;\n\tDWORD\tTimeDateStamp;\t/* 0 if not bound,\n\t\t\t\t * -1 if bound, and real date\\time stamp\n\t\t\t\t *    in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT\n\t\t\t\t * (new BIND)\n\t\t\t\t * otherwise date/time stamp of DLL bound to\n\t\t\t\t * (Old BIND)\n\t\t\t\t */\n\tDWORD\tForwarderChain;\t/* -1 if no forwarders */\n\tDWORD\tName;\n\t/* RVA to IAT (if bound this IAT has actual addresses) */\n\tDWORD\tFirstThunk;\n} IMAGE_IMPORT_DESCRIPTOR,*PIMAGE_IMPORT_DESCRIPTOR;\n\n#define IMAGE_ORDINAL_FLAG64             (((ULONGLONG)0x80000000 << 32) | 0x00000000)\n#define IMAGE_ORDINAL_FLAG32             0x80000000\n#define IMAGE_SNAP_BY_ORDINAL64(ordinal) (((ordinal) & IMAGE_ORDINAL_FLAG64) != 0)\n#define IMAGE_SNAP_BY_ORDINAL32(ordinal) (((ordinal) & IMAGE_ORDINAL_FLAG32) != 0)\n#define IMAGE_ORDINAL64(ordinal)         ((ordinal) & 0xffff)\n#define IMAGE_ORDINAL32(ordinal)         ((ordinal) & 0xffff)\n\n#ifdef _WIN64\n#define IMAGE_ORDINAL_FLAG              IMAGE_ORDINAL_FLAG64\n#define IMAGE_SNAP_BY_ORDINAL(Ordinal)  IMAGE_SNAP_BY_ORDINAL64(Ordinal)\n#define IMAGE_ORDINAL(Ordinal)          IMAGE_ORDINAL64(Ordinal)\ntypedef IMAGE_THUNK_DATA64              IMAGE_THUNK_DATA;\ntypedef PIMAGE_THUNK_DATA64             PIMAGE_THUNK_DATA;\n#else\n#define IMAGE_ORDINAL_FLAG              IMAGE_ORDINAL_FLAG32\n#define IMAGE_SNAP_BY_ORDINAL(Ordinal)  IMAGE_SNAP_BY_ORDINAL32(Ordinal)\n#define IMAGE_ORDINAL(Ordinal)          IMAGE_ORDINAL32(Ordinal)\ntypedef IMAGE_THUNK_DATA32              IMAGE_THUNK_DATA;\ntypedef PIMAGE_THUNK_DATA32             PIMAGE_THUNK_DATA;\n#endif\n\ntypedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR\n{\n    DWORD   TimeDateStamp;\n    WORD    OffsetModuleName;\n    WORD    NumberOfModuleForwarderRefs;\n/* Array of zero or more IMAGE_BOUND_FORWARDER_REF follows */\n} IMAGE_BOUND_IMPORT_DESCRIPTOR,  *PIMAGE_BOUND_IMPORT_DESCRIPTOR;\n\ntypedef struct _IMAGE_BOUND_FORWARDER_REF\n{\n    DWORD   TimeDateStamp;\n    WORD    OffsetModuleName;\n    WORD    Reserved;\n} IMAGE_BOUND_FORWARDER_REF, *PIMAGE_BOUND_FORWARDER_REF;\n\ntypedef struct _IMAGE_BASE_RELOCATION\n{\n\tDWORD\tVirtualAddress;\n\tDWORD\tSizeOfBlock;\n\t/* WORD\tTypeOffset[1]; */\n} IMAGE_BASE_RELOCATION,*PIMAGE_BASE_RELOCATION;\n\n#include <pshpack2.h>\n\ntypedef struct _IMAGE_RELOCATION\n{\n    union {\n        DWORD   VirtualAddress;\n        DWORD   RelocCount;\n    } DUMMYUNIONNAME;\n    DWORD   SymbolTableIndex;\n    WORD    Type;\n} IMAGE_RELOCATION, *PIMAGE_RELOCATION;\n\n#include <poppack.h>\n\n#define IMAGE_SIZEOF_RELOCATION 10\n\ntypedef struct _IMAGE_DELAYLOAD_DESCRIPTOR\n{\n    union\n    {\n        DWORD AllAttributes;\n        struct\n        {\n            DWORD RvaBased:1;\n            DWORD ReservedAttributes:31;\n        } DUMMYSTRUCTNAME;\n    } Attributes;\n\n    DWORD DllNameRVA;\n    DWORD ModuleHandleRVA;\n    DWORD ImportAddressTableRVA;\n    DWORD ImportNameTableRVA;\n    DWORD BoundImportAddressTableRVA;\n    DWORD UnloadInformationTableRVA;\n    DWORD TimeDateStamp;\n} IMAGE_DELAYLOAD_DESCRIPTOR, *PIMAGE_DELAYLOAD_DESCRIPTOR;\ntypedef const IMAGE_DELAYLOAD_DESCRIPTOR *PCIMAGE_DELAYLOAD_DESCRIPTOR;\n\n/* generic relocation types */\n#define IMAGE_REL_BASED_ABSOLUTE \t\t0\n#define IMAGE_REL_BASED_HIGH\t\t\t1\n#define IMAGE_REL_BASED_LOW\t\t\t2\n#define IMAGE_REL_BASED_HIGHLOW\t\t\t3\n#define IMAGE_REL_BASED_HIGHADJ\t\t\t4\n#define IMAGE_REL_BASED_MIPS_JMPADDR\t\t5\n#define IMAGE_REL_BASED_ARM_MOV32A\t\t5 /* yes, 5 too */\n#define IMAGE_REL_BASED_ARM_MOV32\t\t5 /* yes, 5 too */\n#define IMAGE_REL_BASED_SECTION\t\t\t6\n#define\tIMAGE_REL_BASED_REL\t\t\t7\n#define\tIMAGE_REL_BASED_ARM_MOV32T\t\t7 /* yes, 7 too */\n#define IMAGE_REL_BASED_THUMB_MOV32\t\t7 /* yes, 7 too */\n#define IMAGE_REL_BASED_MIPS_JMPADDR16\t\t9\n#define IMAGE_REL_BASED_IA64_IMM64\t\t9 /* yes, 9 too */\n#define IMAGE_REL_BASED_DIR64\t\t\t10\n#define IMAGE_REL_BASED_HIGH3ADJ\t\t11\n\n/* I386 relocation types */\n#define\tIMAGE_REL_I386_ABSOLUTE\t\t\t0\n#define\tIMAGE_REL_I386_DIR16\t\t\t1\n#define\tIMAGE_REL_I386_REL16\t\t\t2\n#define\tIMAGE_REL_I386_DIR32\t\t\t6\n#define\tIMAGE_REL_I386_DIR32NB\t\t\t7\n#define\tIMAGE_REL_I386_SEG12\t\t\t9\n#define\tIMAGE_REL_I386_SECTION\t\t\t10\n#define\tIMAGE_REL_I386_SECREL\t\t\t11\n#define\tIMAGE_REL_I386_TOKEN\t\t\t12\n#define\tIMAGE_REL_I386_SECREL7\t\t\t13\n#define\tIMAGE_REL_I386_REL32\t\t\t20\n\n/* MIPS relocation types */\n#define IMAGE_REL_MIPS_ABSOLUTE\t\t0x0000\n#define IMAGE_REL_MIPS_REFHALF\t\t0x0001\n#define IMAGE_REL_MIPS_REFWORD\t\t0x0002\n#define IMAGE_REL_MIPS_JMPADDR\t\t0x0003\n#define IMAGE_REL_MIPS_REFHI\t\t0x0004\n#define IMAGE_REL_MIPS_REFLO\t\t0x0005\n#define IMAGE_REL_MIPS_GPREL\t\t0x0006\n#define IMAGE_REL_MIPS_LITERAL\t\t0x0007\n#define IMAGE_REL_MIPS_SECTION\t\t0x000A\n#define IMAGE_REL_MIPS_SECREL\t\t0x000B\n#define IMAGE_REL_MIPS_SECRELLO\t\t0x000C\n#define IMAGE_REL_MIPS_SECRELHI\t\t0x000D\n#define IMAGE_REL_MIPS_TOKEN\t\t0x000E\n#define IMAGE_REL_MIPS_JMPADDR16\t0x0010\n#define IMAGE_REL_MIPS_REFWORDNB\t0x0022\n#define IMAGE_REL_MIPS_PAIR\t\t0x0025\n\n/* ALPHA relocation types */\n#define IMAGE_REL_ALPHA_ABSOLUTE\t0x0000\n#define IMAGE_REL_ALPHA_REFLONG\t\t0x0001\n#define IMAGE_REL_ALPHA_REFQUAD\t\t0x0002\n#define IMAGE_REL_ALPHA_GPREL\t\t0x0003\n#define IMAGE_REL_ALPHA_LITERAL\t\t0x0004\n#define IMAGE_REL_ALPHA_LITUSE\t\t0x0005\n#define IMAGE_REL_ALPHA_GPDISP\t\t0x0006\n#define IMAGE_REL_ALPHA_BRADDR\t\t0x0007\n#define IMAGE_REL_ALPHA_HINT\t\t0x0008\n#define IMAGE_REL_ALPHA_INLINE_REFLONG\t0x0009\n#define IMAGE_REL_ALPHA_REFHI\t\t0x000A\n#define IMAGE_REL_ALPHA_REFLO\t\t0x000B\n#define IMAGE_REL_ALPHA_PAIR\t\t0x000C\n#define IMAGE_REL_ALPHA_MATCH\t\t0x000D\n#define IMAGE_REL_ALPHA_SECTION\t\t0x000E\n#define IMAGE_REL_ALPHA_SECREL\t\t0x000F\n#define IMAGE_REL_ALPHA_REFLONGNB\t0x0010\n#define IMAGE_REL_ALPHA_SECRELLO\t0x0011\n#define IMAGE_REL_ALPHA_SECRELHI\t0x0012\n#define IMAGE_REL_ALPHA_REFQ3\t\t0x0013\n#define IMAGE_REL_ALPHA_REFQ2\t\t0x0014\n#define IMAGE_REL_ALPHA_REFQ1\t\t0x0015\n#define IMAGE_REL_ALPHA_GPRELLO\t\t0x0016\n#define IMAGE_REL_ALPHA_GPRELHI\t\t0x0017\n\n/* PowerPC relocation types */\n#define IMAGE_REL_PPC_ABSOLUTE          0x0000\n#define IMAGE_REL_PPC_ADDR64            0x0001\n#define IMAGE_REL_PPC_ADDR            0x0002\n#define IMAGE_REL_PPC_ADDR24            0x0003\n#define IMAGE_REL_PPC_ADDR16            0x0004\n#define IMAGE_REL_PPC_ADDR14            0x0005\n#define IMAGE_REL_PPC_REL24             0x0006\n#define IMAGE_REL_PPC_REL14             0x0007\n#define IMAGE_REL_PPC_TOCREL16          0x0008\n#define IMAGE_REL_PPC_TOCREL14          0x0009\n#define IMAGE_REL_PPC_ADDR32NB          0x000A\n#define IMAGE_REL_PPC_SECREL            0x000B\n#define IMAGE_REL_PPC_SECTION           0x000C\n#define IMAGE_REL_PPC_IFGLUE            0x000D\n#define IMAGE_REL_PPC_IMGLUE            0x000E\n#define IMAGE_REL_PPC_SECREL16          0x000F\n#define IMAGE_REL_PPC_REFHI             0x0010\n#define IMAGE_REL_PPC_REFLO             0x0011\n#define IMAGE_REL_PPC_PAIR              0x0012\n#define IMAGE_REL_PPC_SECRELLO          0x0013\n#define IMAGE_REL_PPC_SECRELHI          0x0014\n#define IMAGE_REL_PPC_GPREL\t\t0x0015\n#define IMAGE_REL_PPC_TOKEN             0x0016\n#define IMAGE_REL_PPC_TYPEMASK          0x00FF\n/* modifier bits */\n#define IMAGE_REL_PPC_NEG               0x0100\n#define IMAGE_REL_PPC_BRTAKEN           0x0200\n#define IMAGE_REL_PPC_BRNTAKEN          0x0400\n#define IMAGE_REL_PPC_TOCDEFN           0x0800\n\n/* SH3 relocation types */\n#define IMAGE_REL_SH3_ABSOLUTE          0x0000\n#define IMAGE_REL_SH3_DIRECT16          0x0001\n#define IMAGE_REL_SH3_DIRECT          0x0002\n#define IMAGE_REL_SH3_DIRECT8           0x0003\n#define IMAGE_REL_SH3_DIRECT8_WORD      0x0004\n#define IMAGE_REL_SH3_DIRECT8_LONG      0x0005\n#define IMAGE_REL_SH3_DIRECT4           0x0006\n#define IMAGE_REL_SH3_DIRECT4_WORD      0x0007\n#define IMAGE_REL_SH3_DIRECT4_LONG      0x0008\n#define IMAGE_REL_SH3_PCREL8_WORD       0x0009\n#define IMAGE_REL_SH3_PCREL8_LONG       0x000A\n#define IMAGE_REL_SH3_PCREL12_WORD      0x000B\n#define IMAGE_REL_SH3_STARTOF_SECTION   0x000C\n#define IMAGE_REL_SH3_SIZEOF_SECTION    0x000D\n#define IMAGE_REL_SH3_SECTION           0x000E\n#define IMAGE_REL_SH3_SECREL            0x000F\n#define IMAGE_REL_SH3_DIRECT32_NB       0x0010\n#define IMAGE_REL_SH3_GPREL4_LONG       0x0011\n#define IMAGE_REL_SH3_TOKEN             0x0012\n\n/* ARM relocation types */\n#define IMAGE_REL_ARM_ABSOLUTE\t\t0x0000\n#define IMAGE_REL_ARM_ADDR\t\t0x0001\n#define IMAGE_REL_ARM_ADDR32NB\t\t0x0002\n#define IMAGE_REL_ARM_BRANCH24\t\t0x0003\n#define IMAGE_REL_ARM_BRANCH11\t\t0x0004\n#define IMAGE_REL_ARM_TOKEN\t\t0x0005\n#define IMAGE_REL_ARM_GPREL12\t\t0x0006\n#define IMAGE_REL_ARM_GPREL7\t\t0x0007\n#define IMAGE_REL_ARM_BLX24\t\t0x0008\n#define IMAGE_REL_ARM_BLX11\t\t0x0009\n#define IMAGE_REL_ARM_SECTION\t\t0x000E\n#define IMAGE_REL_ARM_SECREL\t\t0x000F\n#define IMAGE_REL_ARM_MOV32A\t\t0x0010\n#define IMAGE_REL_ARM_MOV32T\t\t0x0011\n#define IMAGE_REL_ARM_BRANCH20T\t0x0012\n#define IMAGE_REL_ARM_BRANCH24T\t0x0014\n#define IMAGE_REL_ARM_BLX23T\t\t0x0015\n\n/* ARM64 relocation types */\n#define IMAGE_REL_ARM64_ABSOLUTE        0x0000\n#define IMAGE_REL_ARM64_ADDR32          0x0001\n#define IMAGE_REL_ARM64_ADDR32NB        0x0002\n#define IMAGE_REL_ARM64_BRANCH26        0x0003\n#define IMAGE_REL_ARM64_PAGEBASE_REL21  0x0004\n#define IMAGE_REL_ARM64_REL21           0x0005\n#define IMAGE_REL_ARM64_PAGEOFFSET_12A  0x0006\n#define IMAGE_REL_ARM64_PAGEOFFSET_12L  0x0007\n#define IMAGE_REL_ARM64_SECREL          0x0008\n#define IMAGE_REL_ARM64_SECREL_LOW12A   0x0009\n#define IMAGE_REL_ARM64_SECREL_HIGH12A  0x000A\n#define IMAGE_REL_ARM64_SECREL_LOW12L   0x000B\n#define IMAGE_REL_ARM64_TOKEN           0x000C\n#define IMAGE_REL_ARM64_SECTION         0x000D\n#define IMAGE_REL_ARM64_ADDR64          0x000E\n\n/* IA64 relocation types */\n#define IMAGE_REL_IA64_ABSOLUTE\t\t0x0000\n#define IMAGE_REL_IA64_IMM14\t\t0x0001\n#define IMAGE_REL_IA64_IMM22\t\t0x0002\n#define IMAGE_REL_IA64_IMM64\t\t0x0003\n#define IMAGE_REL_IA64_DIR\t\t0x0004\n#define IMAGE_REL_IA64_DIR64\t\t0x0005\n#define IMAGE_REL_IA64_PCREL21B\t\t0x0006\n#define IMAGE_REL_IA64_PCREL21M\t\t0x0007\n#define IMAGE_REL_IA64_PCREL21F\t\t0x0008\n#define IMAGE_REL_IA64_GPREL22\t\t0x0009\n#define IMAGE_REL_IA64_LTOFF22\t\t0x000A\n#define IMAGE_REL_IA64_SECTION\t\t0x000B\n#define IMAGE_REL_IA64_SECREL22\t\t0x000C\n#define IMAGE_REL_IA64_SECREL64I\t0x000D\n#define IMAGE_REL_IA64_SECREL\t\t0x000E\n#define IMAGE_REL_IA64_LTOFF64\t\t0x000F\n#define IMAGE_REL_IA64_DIR32NB\t\t0x0010\n#define IMAGE_REL_IA64_SREL14\t\t0x0011\n#define IMAGE_REL_IA64_SREL22\t\t0x0012\n#define IMAGE_REL_IA64_SREL32\t\t0x0013\n#define IMAGE_REL_IA64_UREL32\t\t0x0014\n#define IMAGE_REL_IA64_PCREL60X\t0x0015\n#define IMAGE_REL_IA64_PCREL60B\t0x0016\n#define IMAGE_REL_IA64_PCREL60F\t0x0017\n#define IMAGE_REL_IA64_PCREL60I\t0x0018\n#define IMAGE_REL_IA64_PCREL60M\t0x0019\n#define IMAGE_REL_IA64_IMMGPREL64\t0x001A\n#define IMAGE_REL_IA64_TOKEN\t\t0x001B\n#define IMAGE_REL_IA64_GPREL32\t\t0x001C\n#define IMAGE_REL_IA64_ADDEND\t\t0x001F\n\n/* AMD64 relocation types */\n#define IMAGE_REL_AMD64_ABSOLUTE        0x0000\n#define IMAGE_REL_AMD64_ADDR64          0x0001\n#define IMAGE_REL_AMD64_ADDR32          0x0002\n#define IMAGE_REL_AMD64_ADDR32NB        0x0003\n#define IMAGE_REL_AMD64_REL32           0x0004\n#define IMAGE_REL_AMD64_REL32_1         0x0005\n#define IMAGE_REL_AMD64_REL32_2         0x0006\n#define IMAGE_REL_AMD64_REL32_3         0x0007\n#define IMAGE_REL_AMD64_REL32_4         0x0008\n#define IMAGE_REL_AMD64_REL32_5         0x0009\n#define IMAGE_REL_AMD64_SECTION         0x000A\n#define IMAGE_REL_AMD64_SECREL          0x000B\n#define IMAGE_REL_AMD64_SECREL7         0x000C\n#define IMAGE_REL_AMD64_TOKEN           0x000D\n#define IMAGE_REL_AMD64_SREL32          0x000E\n#define IMAGE_REL_AMD64_PAIR            0x000F\n#define IMAGE_REL_AMD64_SSPAN32         0x0010\n\n/* archive format */\n\n#define IMAGE_ARCHIVE_START_SIZE             8\n#define IMAGE_ARCHIVE_START                  \"!<arch>\\n\"\n#define IMAGE_ARCHIVE_END                    \"`\\n\"\n#define IMAGE_ARCHIVE_PAD                    \"\\n\"\n#define IMAGE_ARCHIVE_LINKER_MEMBER          \"/               \"\n#define IMAGE_ARCHIVE_LONGNAMES_MEMBER       \"//              \"\n\ntypedef struct _IMAGE_ARCHIVE_MEMBER_HEADER\n{\n    BYTE     Name[16];\n    BYTE     Date[12];\n    BYTE     UserID[6];\n    BYTE     GroupID[6];\n    BYTE     Mode[8];\n    BYTE     Size[10];\n    BYTE     EndHeader[2];\n} IMAGE_ARCHIVE_MEMBER_HEADER, *PIMAGE_ARCHIVE_MEMBER_HEADER;\n\n#define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60\n\ntypedef struct _IMPORT_OBJECT_HEADER\n{\n    WORD     Sig1;\n    WORD     Sig2;\n    WORD     Version;\n    WORD     Machine;\n    DWORD    TimeDateStamp;\n    DWORD    SizeOfData;\n    union\n    {\n        WORD Ordinal;\n        WORD Hint;\n    } DUMMYUNIONNAME;\n    WORD     Type : 2;\n    WORD     NameType : 3;\n    WORD     Reserved : 11;\n} IMPORT_OBJECT_HEADER;\n\n#define IMPORT_OBJECT_HDR_SIG2  0xffff\n\ntypedef enum IMPORT_OBJECT_TYPE\n{\n    IMPORT_OBJECT_CODE = 0,\n    IMPORT_OBJECT_DATA = 1,\n    IMPORT_OBJECT_CONST = 2\n} IMPORT_OBJECT_TYPE;\n\ntypedef enum IMPORT_OBJECT_NAME_TYPE\n{\n    IMPORT_OBJECT_ORDINAL = 0,\n    IMPORT_OBJECT_NAME = 1,\n    IMPORT_OBJECT_NAME_NO_PREFIX = 2,\n    IMPORT_OBJECT_NAME_UNDECORATE = 3\n} IMPORT_OBJECT_NAME_TYPE;\n\ntypedef struct _ANON_OBJECT_HEADER\n{\n    WORD     Sig1;\n    WORD     Sig2;\n    WORD     Version;\n    WORD     Machine;\n    DWORD    TimeDateStamp;\n    CLSID    ClassID;\n    DWORD    SizeOfData;\n} ANON_OBJECT_HEADER;\n\n/*\n * Resource directory stuff\n */\ntypedef struct _IMAGE_RESOURCE_DIRECTORY {\n\tDWORD\tCharacteristics;\n\tDWORD\tTimeDateStamp;\n\tWORD\tMajorVersion;\n\tWORD\tMinorVersion;\n\tWORD\tNumberOfNamedEntries;\n\tWORD\tNumberOfIdEntries;\n\t/*  IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[]; */\n} IMAGE_RESOURCE_DIRECTORY,*PIMAGE_RESOURCE_DIRECTORY;\n\n#define\tIMAGE_RESOURCE_NAME_IS_STRING\t\t0x80000000\n#define\tIMAGE_RESOURCE_DATA_IS_DIRECTORY\t0x80000000\n\ntypedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {\n\tunion {\n\t\tstruct {\n#ifdef BITFIELDS_BIGENDIAN\n\t\t\tunsigned NameIsString:1;\n\t\t\tunsigned NameOffset:31;\n#else\n\t\t\tunsigned NameOffset:31;\n\t\t\tunsigned NameIsString:1;\n#endif\n\t\t} DUMMYSTRUCTNAME;\n\t\tDWORD   Name;\n#ifdef WORDS_BIGENDIAN\n\t\tWORD    __pad;\n\t\tWORD    Id;\n#else\n\t\tWORD    Id;\n\t\tWORD    __pad;\n#endif\n\t} DUMMYUNIONNAME;\n\tunion {\n\t\tDWORD   OffsetToData;\n\t\tstruct {\n#ifdef BITFIELDS_BIGENDIAN\n\t\t\tunsigned DataIsDirectory:1;\n\t\t\tunsigned OffsetToDirectory:31;\n#else\n\t\t\tunsigned OffsetToDirectory:31;\n\t\t\tunsigned DataIsDirectory:1;\n#endif\n\t\t} DUMMYSTRUCTNAME2;\n\t} DUMMYUNIONNAME2;\n} IMAGE_RESOURCE_DIRECTORY_ENTRY,*PIMAGE_RESOURCE_DIRECTORY_ENTRY;\n\n\ntypedef struct _IMAGE_RESOURCE_DIRECTORY_STRING {\n\tWORD\tLength;\n\tCHAR\tNameString[ 1 ];\n} IMAGE_RESOURCE_DIRECTORY_STRING,*PIMAGE_RESOURCE_DIRECTORY_STRING;\n\ntypedef struct _IMAGE_RESOURCE_DIR_STRING_U {\n\tWORD\tLength;\n\tWCHAR\tNameString[ 1 ];\n} IMAGE_RESOURCE_DIR_STRING_U,*PIMAGE_RESOURCE_DIR_STRING_U;\n\ntypedef struct _IMAGE_RESOURCE_DATA_ENTRY {\n\tDWORD\tOffsetToData;\n\tDWORD\tSize;\n\tDWORD\tCodePage;\n\tDWORD\tReserved;\n} IMAGE_RESOURCE_DATA_ENTRY,*PIMAGE_RESOURCE_DATA_ENTRY;\n\n\ntypedef VOID (CALLBACK *PIMAGE_TLS_CALLBACK)(\n\tLPVOID DllHandle,DWORD Reason,LPVOID Reserved\n);\n\ntypedef struct _IMAGE_TLS_DIRECTORY64 {\n    ULONGLONG   StartAddressOfRawData;\n    ULONGLONG   EndAddressOfRawData;\n    ULONGLONG   AddressOfIndex;\n    ULONGLONG   AddressOfCallBacks;\n    DWORD       SizeOfZeroFill;\n    DWORD       Characteristics;\n} IMAGE_TLS_DIRECTORY64, *PIMAGE_TLS_DIRECTORY64;\n\ntypedef struct _IMAGE_TLS_DIRECTORY32 {\n    DWORD   StartAddressOfRawData;\n    DWORD   EndAddressOfRawData;\n    DWORD   AddressOfIndex;\n    DWORD   AddressOfCallBacks;\n    DWORD   SizeOfZeroFill;\n    DWORD   Characteristics;\n} IMAGE_TLS_DIRECTORY32, *PIMAGE_TLS_DIRECTORY32;\n\n#ifdef _WIN64\ntypedef IMAGE_TLS_DIRECTORY64           IMAGE_TLS_DIRECTORY;\ntypedef PIMAGE_TLS_DIRECTORY64          PIMAGE_TLS_DIRECTORY;\n#else\ntypedef IMAGE_TLS_DIRECTORY32           IMAGE_TLS_DIRECTORY;\ntypedef PIMAGE_TLS_DIRECTORY32          PIMAGE_TLS_DIRECTORY;\n#endif\n\ntypedef struct _IMAGE_DEBUG_DIRECTORY {\n  DWORD Characteristics;\n  DWORD TimeDateStamp;\n  WORD  MajorVersion;\n  WORD  MinorVersion;\n  DWORD Type;\n  DWORD SizeOfData;\n  DWORD AddressOfRawData;\n  DWORD PointerToRawData;\n} IMAGE_DEBUG_DIRECTORY, *PIMAGE_DEBUG_DIRECTORY;\n\n#define IMAGE_DEBUG_TYPE_UNKNOWN        0\n#define IMAGE_DEBUG_TYPE_COFF           1\n#define IMAGE_DEBUG_TYPE_CODEVIEW       2\n#define IMAGE_DEBUG_TYPE_FPO            3\n#define IMAGE_DEBUG_TYPE_MISC           4\n#define IMAGE_DEBUG_TYPE_EXCEPTION      5\n#define IMAGE_DEBUG_TYPE_FIXUP          6\n#define IMAGE_DEBUG_TYPE_OMAP_TO_SRC    7\n#define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC  8\n#define IMAGE_DEBUG_TYPE_BORLAND        9\n#define IMAGE_DEBUG_TYPE_RESERVED10    10\n#define IMAGE_DEBUG_TYPE_CLSID         11\n#define IMAGE_DEBUG_TYPE_VC_FEATURE    12\n#define IMAGE_DEBUG_TYPE_POGO          13\n#define IMAGE_DEBUG_TYPE_ILTCG         14\n#define IMAGE_DEBUG_TYPE_MPX           15\n\ntypedef enum ReplacesCorHdrNumericDefines\n{\n    COMIMAGE_FLAGS_ILONLY           = 0x00000001,\n    COMIMAGE_FLAGS_32BITREQUIRED    = 0x00000002,\n    COMIMAGE_FLAGS_IL_LIBRARY       = 0x00000004,\n    COMIMAGE_FLAGS_STRONGNAMESIGNED = 0x00000008,\n    COMIMAGE_FLAGS_NATIVE_ENTRYPOINT= 0x00000010,\n    COMIMAGE_FLAGS_TRACKDEBUGDATA   = 0x00010000,\n    COMIMAGE_FLAGS_32BITPREFERRED   = 0x00020000,\n\n    COR_VERSION_MAJOR_V2       = 2,\n    COR_VERSION_MAJOR          = COR_VERSION_MAJOR_V2,\n    COR_VERSION_MINOR          = 5,\n    COR_DELETED_NAME_LENGTH    = 8,\n    COR_VTABLEGAP_NAME_LENGTH  = 8,\n\n    NATIVE_TYPE_MAX_CB = 1,\n    COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE = 0xff,\n\n    IMAGE_COR_MIH_METHODRVA  = 0x01,\n    IMAGE_COR_MIH_EHRVA      = 0x02,\n    IMAGE_COR_MIH_BASICBLOCK = 0x08,\n\n    COR_VTABLE_32BIT             = 0x01,\n    COR_VTABLE_64BIT             = 0x02,\n    COR_VTABLE_FROM_UNMANAGED    = 0x04,\n    COR_VTABLE_CALL_MOST_DERIVED = 0x10,\n\n    IMAGE_COR_EATJ_THUNK_SIZE = 32,\n\n    MAX_CLASS_NAME   = 1024,\n    MAX_PACKAGE_NAME = 1024,\n} ReplacesCorHdrNumericDefines;\n\ntypedef struct IMAGE_COR20_HEADER\n{\n    DWORD cb;\n    WORD  MajorRuntimeVersion;\n    WORD  MinorRuntimeVersion;\n\n    IMAGE_DATA_DIRECTORY MetaData;\n    DWORD Flags;\n    union {\n        DWORD EntryPointToken;\n        DWORD EntryPointRVA;\n    } DUMMYUNIONNAME;\n\n    IMAGE_DATA_DIRECTORY Resources;\n    IMAGE_DATA_DIRECTORY StrongNameSignature;\n    IMAGE_DATA_DIRECTORY CodeManagerTable;\n    IMAGE_DATA_DIRECTORY VTableFixups;\n    IMAGE_DATA_DIRECTORY ExportAddressTableJumps;\n    IMAGE_DATA_DIRECTORY ManagedNativeHeader;\n\n} IMAGE_COR20_HEADER, *PIMAGE_COR20_HEADER;\n\ntypedef struct _IMAGE_COFF_SYMBOLS_HEADER {\n  DWORD NumberOfSymbols;\n  DWORD LvaToFirstSymbol;\n  DWORD NumberOfLinenumbers;\n  DWORD LvaToFirstLinenumber;\n  DWORD RvaToFirstByteOfCode;\n  DWORD RvaToLastByteOfCode;\n  DWORD RvaToFirstByteOfData;\n  DWORD RvaToLastByteOfData;\n} IMAGE_COFF_SYMBOLS_HEADER, *PIMAGE_COFF_SYMBOLS_HEADER;\n\n#define FRAME_FPO       0\n#define FRAME_TRAP      1\n#define FRAME_TSS       2\n#define FRAME_NONFPO    3\n\ntypedef struct _FPO_DATA {\n  DWORD ulOffStart;\n  DWORD cbProcSize;\n  DWORD cdwLocals;\n  WORD  cdwParams;\n  WORD  cbProlog : 8;\n  WORD  cbRegs   : 3;\n  WORD  fHasSEH  : 1;\n  WORD  fUseBP   : 1;\n  WORD  reserved : 1;\n  WORD  cbFrame  : 2;\n} FPO_DATA, *PFPO_DATA;\n\ntypedef struct _IMAGE_LOAD_CONFIG_DIRECTORY64 {\n  DWORD     Size;\n  DWORD     TimeDateStamp;\n  WORD      MajorVersion;\n  WORD      MinorVersion;\n  DWORD     GlobalFlagsClear;\n  DWORD     GlobalFlagsSet;\n  DWORD     CriticalSectionDefaultTimeout;\n  ULONGLONG DeCommitFreeBlockThreshold;\n  ULONGLONG DeCommitTotalFreeThreshold;\n  ULONGLONG LockPrefixTable;\n  ULONGLONG MaximumAllocationSize;\n  ULONGLONG VirtualMemoryThreshold;\n  ULONGLONG ProcessAffinityMask;\n  DWORD     ProcessHeapFlags;\n  WORD      CSDVersion;\n  WORD      Reserved1;\n  ULONGLONG EditList;\n  ULONGLONG SecurityCookie;\n  ULONGLONG SEHandlerTable;\n  ULONGLONG SEHandlerCount;\n} IMAGE_LOAD_CONFIG_DIRECTORY64, *PIMAGE_LOAD_CONFIG_DIRECTORY64;\n\ntypedef struct _IMAGE_LOAD_CONFIG_DIRECTORY32 {\n  DWORD Size;\n  DWORD TimeDateStamp;\n  WORD  MajorVersion;\n  WORD  MinorVersion;\n  DWORD GlobalFlagsClear;\n  DWORD GlobalFlagsSet;\n  DWORD CriticalSectionDefaultTimeout;\n  DWORD DeCommitFreeBlockThreshold;\n  DWORD DeCommitTotalFreeThreshold;\n  PVOID LockPrefixTable;\n  DWORD MaximumAllocationSize;\n  DWORD VirtualMemoryThreshold;\n  DWORD ProcessHeapFlags;\n  DWORD ProcessAffinityMask;\n  WORD  CSDVersion;\n  WORD  Reserved1;\n  PVOID EditList;\n  DWORD SecurityCookie;\n  DWORD SEHandlerTable;\n  DWORD SEHandlerCount;\n} IMAGE_LOAD_CONFIG_DIRECTORY32, *PIMAGE_LOAD_CONFIG_DIRECTORY32;\n\n#ifdef _WIN64\ntypedef IMAGE_LOAD_CONFIG_DIRECTORY64   IMAGE_LOAD_CONFIG_DIRECTORY;\ntypedef PIMAGE_LOAD_CONFIG_DIRECTORY64  PIMAGE_LOAD_CONFIG_DIRECTORY;\n#else\ntypedef IMAGE_LOAD_CONFIG_DIRECTORY32   IMAGE_LOAD_CONFIG_DIRECTORY;\ntypedef PIMAGE_LOAD_CONFIG_DIRECTORY32  PIMAGE_LOAD_CONFIG_DIRECTORY;\n#endif\n\ntypedef struct _IMAGE_FUNCTION_ENTRY {\n  DWORD StartingAddress;\n  DWORD EndingAddress;\n  DWORD EndOfPrologue;\n} IMAGE_FUNCTION_ENTRY, *PIMAGE_FUNCTION_ENTRY;\n\n#define IMAGE_DEBUG_MISC_EXENAME    1\n\ntypedef struct _IMAGE_DEBUG_MISC {\n    DWORD       DataType;\n    DWORD       Length;\n    BYTE        Unicode;\n    BYTE        Reserved[ 3 ];\n    BYTE        Data[ 1 ];\n} IMAGE_DEBUG_MISC, *PIMAGE_DEBUG_MISC;\n\n/* This is the structure that appears at the very start of a .DBG file. */\n\ntypedef struct _IMAGE_SEPARATE_DEBUG_HEADER {\n\tWORD\tSignature;\n\tWORD\tFlags;\n\tWORD\tMachine;\n\tWORD\tCharacteristics;\n\tDWORD\tTimeDateStamp;\n\tDWORD\tCheckSum;\n\tDWORD\tImageBase;\n\tDWORD\tSizeOfImage;\n\tDWORD\tNumberOfSections;\n\tDWORD\tExportedNamesSize;\n\tDWORD\tDebugDirectorySize;\n\tDWORD\tSectionAlignment;\n\tDWORD\tReserved[ 2 ];\n} IMAGE_SEPARATE_DEBUG_HEADER,*PIMAGE_SEPARATE_DEBUG_HEADER;\n\n#define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944\n\n\ntypedef struct tagMESSAGE_RESOURCE_ENTRY {\n\tWORD\tLength;\n\tWORD\tFlags;\n\tBYTE\tText[1];\n} MESSAGE_RESOURCE_ENTRY,*PMESSAGE_RESOURCE_ENTRY;\n#define\tMESSAGE_RESOURCE_UNICODE\t0x0001\n\ntypedef struct tagMESSAGE_RESOURCE_BLOCK {\n\tDWORD\tLowId;\n\tDWORD\tHighId;\n\tDWORD\tOffsetToEntries;\n} MESSAGE_RESOURCE_BLOCK,*PMESSAGE_RESOURCE_BLOCK;\n\ntypedef struct tagMESSAGE_RESOURCE_DATA {\n\tDWORD\t\t\tNumberOfBlocks;\n\tMESSAGE_RESOURCE_BLOCK\tBlocks[ 1 ];\n} MESSAGE_RESOURCE_DATA,*PMESSAGE_RESOURCE_DATA;\n\n/*\n * Here follows typedefs for security and tokens.\n */\n\n/*\n * First a constant for the following typedefs.\n */\n\n#define ANYSIZE_ARRAY   1\n\n/* FIXME:  Orphan.  What does it point to? */\ntypedef PVOID PACCESS_TOKEN;\ntypedef PVOID PSECURITY_DESCRIPTOR;\ntypedef PVOID PSID;\n\ntypedef enum _TOKEN_ELEVATION_TYPE {\n  TokenElevationTypeDefault = 1,\n  TokenElevationTypeFull,\n  TokenElevationTypeLimited\n} TOKEN_ELEVATION_TYPE, *PTOKEN_ELEVATION_TYPE;\n\n/*\n * TOKEN_INFORMATION_CLASS\n */\n\ntypedef enum _TOKEN_INFORMATION_CLASS {\n  TokenUser = 1,\n  TokenGroups,\n  TokenPrivileges,\n  TokenOwner,\n  TokenPrimaryGroup,\n  TokenDefaultDacl,\n  TokenSource,\n  TokenType,\n  TokenImpersonationLevel,\n  TokenStatistics,\n  TokenRestrictedSids,\n  TokenSessionId,\n  TokenGroupsAndPrivileges,\n  TokenSessionReference,\n  TokenSandBoxInert,\n  TokenAuditPolicy,\n  TokenOrigin,\n  TokenElevationType,\n  TokenLinkedToken,\n  TokenElevation,\n  TokenHasRestrictions,\n  TokenAccessInformation,\n  TokenVirtualizationAllowed,\n  TokenVirtualizationEnabled,\n  TokenIntegrityLevel,\n  TokenUIAccess,\n  TokenMandatoryPolicy,\n  TokenLogonSid,\n  TokenIsAppContainer,\n  TokenCapabilities,\n  TokenAppContainerSid,\n  TokenAppContainerNumber,\n  TokenUserClaimAttributes,\n  TokenDeviceClaimAttributes,\n  TokenRestrictedUserClaimAttributes,\n  TokenRestrictedDeviceClaimAttributes,\n  TokenDeviceGroups,\n  TokenRestrictedDeviceGroups,\n  TokenSecurityAttributes,\n  TokenIsRestricted,\n  TokenProcessTrustLevel,\n  MaxTokenInfoClass\n} TOKEN_INFORMATION_CLASS;\n\n#define TOKEN_TOKEN_ADJUST_DEFAULT   0x0080\n#define TOKEN_ADJUST_GROUPS          0x0040\n#define TOKEN_ADJUST_PRIVILEGES      0x0020\n#define TOKEN_ADJUST_SESSIONID       0x0100\n#define TOKEN_ASSIGN_PRIMARY         0x0001\n#define TOKEN_DUPLICATE              0x0002\n#define TOKEN_EXECUTE                STANDARD_RIGHTS_EXECUTE\n#define TOKEN_IMPERSONATE            0x0004\n#define TOKEN_QUERY                  0x0008\n#define TOKEN_QUERY_SOURCE           0x0010\n#define TOKEN_ADJUST_DEFAULT         0x0080\n#define TOKEN_READ                   (STANDARD_RIGHTS_READ|TOKEN_QUERY)\n#define TOKEN_WRITE                  (STANDARD_RIGHTS_WRITE     | \\\n\t\t\t\t\tTOKEN_ADJUST_PRIVILEGES | \\\n\t\t\t\t\tTOKEN_ADJUST_GROUPS | \\\n\t\t\t\t\tTOKEN_ADJUST_DEFAULT )\n#define TOKEN_ALL_ACCESS             (STANDARD_RIGHTS_REQUIRED | \\\n\t\t\t\t\tTOKEN_ASSIGN_PRIMARY | \\\n\t\t\t\t\tTOKEN_DUPLICATE | \\\n\t\t\t\t\tTOKEN_IMPERSONATE | \\\n\t\t\t\t\tTOKEN_QUERY | \\\n\t\t\t\t\tTOKEN_QUERY_SOURCE | \\\n\t\t\t\t\tTOKEN_ADJUST_PRIVILEGES | \\\n\t\t\t\t\tTOKEN_ADJUST_GROUPS | \\\n\t\t\t\t\tTOKEN_ADJUST_SESSIONID | \\\n\t\t\t\t\tTOKEN_ADJUST_DEFAULT )\n\n#ifndef _SECURITY_DEFINED\n#define _SECURITY_DEFINED\n\n\ntypedef DWORD ACCESS_MASK, *PACCESS_MASK;\n\ntypedef struct _GENERIC_MAPPING {\n    ACCESS_MASK GenericRead;\n    ACCESS_MASK GenericWrite;\n    ACCESS_MASK GenericExecute;\n    ACCESS_MASK GenericAll;\n} GENERIC_MAPPING, *PGENERIC_MAPPING;\n\n#ifndef SID_IDENTIFIER_AUTHORITY_DEFINED\n#define SID_IDENTIFIER_AUTHORITY_DEFINED\ntypedef struct {\n    BYTE Value[6];\n} SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY;\n#endif /* !defined(SID_IDENTIFIER_AUTHORITY_DEFINED) */\n\n#ifndef SID_DEFINED\n#define SID_DEFINED\ntypedef struct _SID {\n    BYTE Revision;\n    BYTE SubAuthorityCount;\n    SID_IDENTIFIER_AUTHORITY IdentifierAuthority;\n    DWORD SubAuthority[1];\n} SID,*PISID;\n#endif /* !defined(SID_DEFINED) */\n\n#define\tSID_REVISION\t\t\t(1)\t/* Current revision */\n#define\tSID_MAX_SUB_AUTHORITIES\t\t(15)\t/* current max subauths */\n#define\tSID_RECOMMENDED_SUB_AUTHORITIES\t(1)\t/* recommended subauths */\n\n#define SECURITY_MAX_SID_SIZE (sizeof(SID) - sizeof(DWORD) + (SID_MAX_SUB_AUTHORITIES * sizeof(DWORD)))\n\n/*\n * ACL\n */\n\n#define ACL_REVISION1 1\n#define ACL_REVISION2 2\n#define ACL_REVISION3 3\n#define ACL_REVISION4 4\n\n#define MIN_ACL_REVISION ACL_REVISION2\n#define MAX_ACL_REVISION ACL_REVISION4\n\n#define ACL_REVISION 2\n\ntypedef struct _ACL {\n    BYTE AclRevision;\n    BYTE Sbz1;\n    WORD AclSize;\n    WORD AceCount;\n    WORD Sbz2;\n} ACL, *PACL;\n\ntypedef enum _ACL_INFORMATION_CLASS\n{\n  AclRevisionInformation = 1, \n  AclSizeInformation\n} ACL_INFORMATION_CLASS;\n\ntypedef struct _ACL_REVISION_INFORMATION\n{\n    DWORD AclRevision;\n} ACL_REVISION_INFORMATION, *PACL_REVISION_INFORMATION;\n\ntypedef struct _ACL_SIZE_INFORMATION\n{\n    DWORD AceCount;\n    DWORD AclBytesInUse;\n    DWORD AclBytesFree;\n} ACL_SIZE_INFORMATION, *PACL_SIZE_INFORMATION;\n\n/* SECURITY_DESCRIPTOR */\n#define\tSECURITY_DESCRIPTOR_REVISION\t1\n#define\tSECURITY_DESCRIPTOR_REVISION1\t1\n\n\n/*\n * Privilege Names\n */\n#ifdef UNICODE\n#if defined(_MSC_VER)\n#define SE_CREATE_TOKEN_NAME            L\"SeCreateTokenPrivilege\"\n#define SE_ASSIGNPRIMARYTOKEN_NAME      L\"SeAssignPrimaryTokenPrivilege\"\n#define SE_LOCK_MEMORY_NAME             L\"SeLockMemoryPrivilege\"\n#define SE_INCREASE_QUOTA_NAME          L\"SeIncreaseQuotaPrivilege\"\n#define SE_UNSOLICITED_INPUT_NAME       L\"SeUnsolicitedInputPrivilege\"\n#define SE_MACHINE_ACCOUNT_NAME         L\"SeMachineAccountPrivilege\"\n#define SE_TCB_NAME                     L\"SeTcbPrivilege\"\n#define SE_SECURITY_NAME                L\"SeSecurityPrivilege\"\n#define SE_TAKE_OWNERSHIP_NAME          L\"SeTakeOwnershipPrivilege\"\n#define SE_LOAD_DRIVER_NAME             L\"SeLoadDriverPrivilege\"\n#define SE_SYSTEM_PROFILE_NAME          L\"SeSystemProfilePrivilege\"\n#define SE_SYSTEMTIME_NAME              L\"SeSystemtimePrivilege\"\n#define SE_PROF_SINGLE_PROCESS_NAME     L\"SeProfileSingleProcessPrivilege\"\n#define SE_INC_BASE_PRIORITY_NAME       L\"SeIncreaseBasePriorityPrivilege\"\n#define SE_CREATE_PAGEFILE_NAME         L\"SeCreatePagefilePrivilege\"\n#define SE_CREATE_PERMANENT_NAME        L\"SeCreatePermanentPrivilege\"\n#define SE_BACKUP_NAME                  L\"SeBackupPrivilege\"\n#define SE_RESTORE_NAME                 L\"SeRestorePrivilege\"\n#define SE_SHUTDOWN_NAME                L\"SeShutdownPrivilege\"\n#define SE_DEBUG_NAME                   L\"SeDebugPrivilege\"\n#define SE_AUDIT_NAME                   L\"SeAuditPrivilege\"\n#define SE_SYSTEM_ENVIRONMENT_NAME      L\"SeSystemEnvironmentPrivilege\"\n#define SE_CHANGE_NOTIFY_NAME           L\"SeChangeNotifyPrivilege\"\n#define SE_REMOTE_SHUTDOWN_NAME         L\"SeRemoteShutdownPrivilege\"\n#define SE_UNDOCK_NAME                  L\"SeUndockPrivilege\"\n#define SE_ENABLE_DELEGATION_NAME       L\"SeEnableDelegationPrivilege\"\n#define SE_MANAGE_VOLUME_NAME           L\"SeManageVolumePrivilege\"\n#define SE_IMPERSONATE_NAME             L\"SeImpersonatePrivilege\"\n#define SE_CREATE_GLOBAL_NAME           L\"SeCreateGlobalPrivilege\"\n#elif defined(__GNUC__)\n#define SE_CREATE_TOKEN_NAME (const WCHAR []){ 'S','e','C','r','e','a','t','e','T','o','k','e','n','P','r','i','v','i','l','e','g','e',0 }\n#define SE_ASSIGNPRIMARYTOKEN_NAME (const WCHAR []){ 'S','e','A','s','s','i','g','n','P','r','i','m','a','r','y','T','o','k','e','n','P','r','i','v','i','l','e','g','e',0 }\n#define SE_LOCK_MEMORY_NAME (const WCHAR []){ 'S','e','L','o','c','k','M','e','m','o','r','y','P','r','i','v','i','l','e','g','e',0 }\n#define SE_INCREASE_QUOTA_NAME (const WCHAR []){ 'S','e','I','n','c','r','e','a','s','e','Q','u','o','t','a','P','r','i','v','i','l','e','g','e',0 }\n#define SE_UNSOLICITED_INPUT_NAME (const WCHAR []){ 'S','e','U','n','s','o','l','i','c','i','t','e','d','I','n','p','u','t','P','r','i','v','i','l','e','g','e',0 }\n#define SE_MACHINE_ACCOUNT_NAME (const WCHAR []){ 'S','e','M','a','c','h','i','n','e','A','c','c','o','u','n','t','P','r','i','v','i','l','e','g','e',0 }\n#define SE_TCB_NAME (const WCHAR []){ 'S','e','T','c','b','P','r','i','v','i','l','e','g','e',0 }\n#define SE_SECURITY_NAME (const WCHAR []){ 'S','e','S','e','c','u','r','i','t','y','P','r','i','v','i','l','e','g','e',0 }\n#define SE_TAKE_OWNERSHIP_NAME (const WCHAR []){ 'S','e','T','a','k','e','O','w','n','e','r','s','h','i','p','P','r','i','v','i','l','e','g','e',0 }\n#define SE_LOAD_DRIVER_NAME (const WCHAR []){ 'S','e','L','o','a','d','D','r','i','v','e','r','P','r','i','v','i','l','e','g','e',0 }\n#define SE_SYSTEM_PROFILE_NAME (const WCHAR []){ 'S','e','S','y','s','t','e','m','P','r','o','f','i','l','e','P','r','i','v','i','l','e','g','e',0 }\n#define SE_SYSTEMTIME_NAME (const WCHAR []){ 'S','e','S','y','s','t','e','m','t','i','m','e','P','r','i','v','i','l','e','g','e',0 }\n#define SE_PROF_SINGLE_PROCESS_NAME (const WCHAR []){ 'S','e','P','r','o','f','i','l','e','S','i','n','g','l','e','P','r','o','c','e','s','s','P','r','i','v','i','l','e','g','e',0 }\n#define SE_INC_BASE_PRIORITY_NAME (const WCHAR []){ 'S','e','I','n','c','r','e','a','s','e','B','a','s','e','P','r','i','o','r','i','t','y','P','r','i','v','i','l','e','g','e',0 }\n#define SE_CREATE_PAGEFILE_NAME (const WCHAR []){ 'S','e','C','r','e','a','t','e','P','a','g','e','f','i','l','e','P','r','i','v','i','l','e','g','e',0 }\n#define SE_CREATE_PERMANENT_NAME (const WCHAR []){ 'S','e','C','r','e','a','t','e','P','e','r','m','a','n','e','n','t','P','r','i','v','i','l','e','g','e',0 }\n#define SE_BACKUP_NAME (const WCHAR []){ 'S','e','B','a','c','k','u','p','P','r','i','v','i','l','e','g','e',0 }\n#define SE_RESTORE_NAME (const WCHAR []){ 'S','e','R','e','s','t','o','r','e','P','r','i','v','i','l','e','g','e',0 }\n#define SE_SHUTDOWN_NAME (const WCHAR []){ 'S','e','S','h','u','t','d','o','w','n','P','r','i','v','i','l','e','g','e',0 }\n#define SE_DEBUG_NAME (const WCHAR []){ 'S','e','D','e','b','u','g','P','r','i','v','i','l','e','g','e',0 }\n#define SE_AUDIT_NAME (const WCHAR []){ 'S','e','A','u','d','i','t','P','r','i','v','i','l','e','g','e',0 }\n#define SE_SYSTEM_ENVIRONMENT_NAME (const WCHAR []){ 'S','e','S','y','s','t','e','m','E','n','v','i','r','o','n','m','e','n','t','P','r','i','v','i','l','e','g','e',0 }\n#define SE_CHANGE_NOTIFY_NAME (const WCHAR []){ 'S','e','C','h','a','n','g','e','N','o','t','i','f','y','P','r','i','v','i','l','e','g','e',0 }\n#define SE_REMOTE_SHUTDOWN_NAME (const WCHAR []){ 'S','e','R','e','m','o','t','e','S','h','u','t','d','o','w','n','P','r','i','v','i','l','e','g','e',0 }\n#define SE_UNDOCK_NAME (const WCHAR []){ 'S','e','U','n','d','o','c','k','P','r','i','v','i','l','e','g','e',0 }\n#define SE_ENABLE_DELEGATION_NAME (const WCHAR []){ 'S','e','E','n','a','b','l','e','D','e','l','e','g','a','t','i','o','n','P','r','i','v','i','l','e','g','e',0 }\n#define SE_MANAGE_VOLUME_NAME (const WCHAR []){ 'S','e','M','a','n','a','g','e','V','o','l','u','m','e','P','r','i','v','i','l','e','g','e',0 }\n#define SE_IMPERSONATE_NAME (const WCHAR []){ 'S','e','I','m','p','e','r','s','o','n','a','t','e','P','r','i','v','i','l','e','g','e',0 }\n#define SE_CREATE_GLOBAL_NAME (const WCHAR []){ 'S','e','C','r','e','a','t','e','G','l','o','b','a','l','P','r','i','v','i','l','e','g','e',0 }\n#else /* _MSC_VER/__GNUC__ */\nstatic const WCHAR SE_CREATE_TOKEN_NAME[] = { 'S','e','C','r','e','a','t','e','T','o','k','e','n','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_ASSIGNPRIMARYTOKEN_NAME[] = { 'S','e','A','s','s','i','g','n','P','r','i','m','a','r','y','T','o','k','e','n','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_LOCK_MEMORY_NAME[] = { 'S','e','L','o','c','k','M','e','m','o','r','y','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_INCREASE_QUOTA_NAME[] = { 'S','e','I','n','c','r','e','a','s','e','Q','u','o','t','a','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_UNSOLICITED_INPUT_NAME[] = { 'S','e','U','n','s','o','l','i','c','i','t','e','d','I','n','p','u','t','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_MACHINE_ACCOUNT_NAME[] = { 'S','e','M','a','c','h','i','n','e','A','c','c','o','u','n','t','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_TCB_NAME[] = { 'S','e','T','c','b','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_SECURITY_NAME[] = { 'S','e','S','e','c','u','r','i','t','y','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_TAKE_OWNERSHIP_NAME[] = { 'S','e','T','a','k','e','O','w','n','e','r','s','h','i','p','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_LOAD_DRIVER_NAME[] = { 'S','e','L','o','a','d','D','r','i','v','e','r','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_SYSTEM_PROFILE_NAME[] = { 'S','e','S','y','s','t','e','m','P','r','o','f','i','l','e','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_SYSTEMTIME_NAME[] = { 'S','e','S','y','s','t','e','m','t','i','m','e','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_PROF_SINGLE_PROCESS_NAME[] = { 'S','e','P','r','o','f','i','l','e','S','i','n','g','l','e','P','r','o','c','e','s','s','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_INC_BASE_PRIORITY_NAME[] = { 'S','e','I','n','c','r','e','a','s','e','B','a','s','e','P','r','i','o','r','i','t','y','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_CREATE_PAGEFILE_NAME[] = { 'S','e','C','r','e','a','t','e','P','a','g','e','f','i','l','e','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_CREATE_PERMANENT_NAME[] = { 'S','e','C','r','e','a','t','e','P','e','r','m','a','n','e','n','t','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_BACKUP_NAME[] = { 'S','e','B','a','c','k','u','p','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_RESTORE_NAME[] = { 'S','e','R','e','s','t','o','r','e','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_SHUTDOWN_NAME[] = { 'S','e','S','h','u','t','d','o','w','n','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_DEBUG_NAME[] = { 'S','e','D','e','b','u','g','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_AUDIT_NAME[] = { 'S','e','A','u','d','i','t','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_SYSTEM_ENVIRONMENT_NAME[] = { 'S','e','S','y','s','t','e','m','E','n','v','i','r','o','n','m','e','n','t','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_CHANGE_NOTIFY_NAME[] = { 'S','e','C','h','a','n','g','e','N','o','t','i','f','y','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_REMOTE_SHUTDOWN_NAME[] = { 'S','e','R','e','m','o','t','e','S','h','u','t','d','o','w','n','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_UNDOCK_NAME[] = { 'S','e','U','n','d','o','c','k','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_ENABLE_DELEGATION_NAME[] = { 'S','e','E','n','a','b','l','e','D','e','l','e','g','a','t','i','o','n','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_MANAGE_VOLUME_NAME[] = { 'S','e','M','a','n','a','g','e','V','o','l','u','m','e','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_IMPERSONATE_NAME[] = { 'S','e','I','m','p','e','r','s','o','n','a','t','e','P','r','i','v','i','l','e','g','e',0 };\nstatic const WCHAR SE_CREATE_GLOBAL_NAME[] = { 'S','e','C','r','e','a','t','e','G','l','o','b','a','l','P','r','i','v','i','l','e','g','e',0 };\n#endif\n#else /* UNICODE */\n#define SE_CREATE_TOKEN_NAME            \"SeCreateTokenPrivilege\"\n#define SE_ASSIGNPRIMARYTOKEN_NAME      \"SeAssignPrimaryTokenPrivilege\"\n#define SE_LOCK_MEMORY_NAME             \"SeLockMemoryPrivilege\"\n#define SE_INCREASE_QUOTA_NAME          \"SeIncreaseQuotaPrivilege\"\n#define SE_UNSOLICITED_INPUT_NAME       \"SeUnsolicitedInputPrivilege\"\n#define SE_MACHINE_ACCOUNT_NAME         \"SeMachineAccountPrivilege\"\n#define SE_TCB_NAME                     \"SeTcbPrivilege\"\n#define SE_SECURITY_NAME                \"SeSecurityPrivilege\"\n#define SE_TAKE_OWNERSHIP_NAME          \"SeTakeOwnershipPrivilege\"\n#define SE_LOAD_DRIVER_NAME             \"SeLoadDriverPrivilege\"\n#define SE_SYSTEM_PROFILE_NAME          \"SeSystemProfilePrivilege\"\n#define SE_SYSTEMTIME_NAME              \"SeSystemtimePrivilege\"\n#define SE_PROF_SINGLE_PROCESS_NAME     \"SeProfileSingleProcessPrivilege\"\n#define SE_INC_BASE_PRIORITY_NAME       \"SeIncreaseBasePriorityPrivilege\"\n#define SE_CREATE_PAGEFILE_NAME         \"SeCreatePagefilePrivilege\"\n#define SE_CREATE_PERMANENT_NAME        \"SeCreatePermanentPrivilege\"\n#define SE_BACKUP_NAME                  \"SeBackupPrivilege\"\n#define SE_RESTORE_NAME                 \"SeRestorePrivilege\"\n#define SE_SHUTDOWN_NAME                \"SeShutdownPrivilege\"\n#define SE_DEBUG_NAME                   \"SeDebugPrivilege\"\n#define SE_AUDIT_NAME                   \"SeAuditPrivilege\"\n#define SE_SYSTEM_ENVIRONMENT_NAME      \"SeSystemEnvironmentPrivilege\"\n#define SE_CHANGE_NOTIFY_NAME           \"SeChangeNotifyPrivilege\"\n#define SE_REMOTE_SHUTDOWN_NAME         \"SeRemoteShutdownPrivilege\"\n#define SE_UNDOCK_NAME                  \"SeUndockPrivilege\"\n#define SE_ENABLE_DELEGATION_NAME       \"SeEnableDelegationPrivilege\"\n#define SE_MANAGE_VOLUME_NAME           \"SeManageVolumePrivilege\"\n#define SE_IMPERSONATE_NAME             \"SeImpersonatePrivilege\"\n#define SE_CREATE_GLOBAL_NAME           \"SeCreateGlobalPrivilege\"\n#endif\n\n#define SE_GROUP_MANDATORY          0x00000001\n#define SE_GROUP_ENABLED_BY_DEFAULT 0x00000002\n#define SE_GROUP_ENABLED            0x00000004\n#define SE_GROUP_OWNER              0x00000008\n#define SE_GROUP_USE_FOR_DENY_ONLY  0x00000010\n#define SE_GROUP_INTEGRITY          0x00000020\n#define SE_GROUP_INTEGRITY_ENABLED  0x00000040\n#define SE_GROUP_LOGON_ID           0xC0000000\n#define SE_GROUP_RESOURCE           0x20000000\n#define SE_GROUP_VALID_ATTRIBUTES   0xE000007F\n\n#define SE_PRIVILEGE_ENABLED_BY_DEFAULT 0x00000001\n#define SE_PRIVILEGE_ENABLED \t\t0x00000002\n#define SE_PRIVILEGE_REMOVED\t\t0x00000004\n#define SE_PRIVILEGE_USED_FOR_ACCESS \t0x80000000\n\n#define PRIVILEGE_SET_ALL_NECESSARY     1\n\n#define SE_OWNER_DEFAULTED\t\t0x00000001\n#define SE_GROUP_DEFAULTED\t\t0x00000002\n#define SE_DACL_PRESENT\t\t\t0x00000004\n#define SE_DACL_DEFAULTED\t\t0x00000008\n#define SE_SACL_PRESENT\t\t\t0x00000010\n#define SE_SACL_DEFAULTED\t\t0x00000020\n#define SE_DACL_AUTO_INHERIT_REQ\t0x00000100\n#define SE_SACL_AUTO_INHERIT_REQ\t0x00000200\n#define SE_DACL_AUTO_INHERITED\t\t0x00000400\n#define SE_SACL_AUTO_INHERITED\t\t0x00000800\n#define SE_DACL_PROTECTED \t\t0x00001000\n#define SE_SACL_PROTECTED \t\t0x00002000\n#define SE_RM_CONTROL_VALID\t\t0x00004000\n#define SE_SELF_RELATIVE\t\t0x00008000\n\ntypedef DWORD SECURITY_INFORMATION, *PSECURITY_INFORMATION;\ntypedef WORD SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL;\n\n/* The security descriptor structure */\ntypedef struct {\n    BYTE Revision;\n    BYTE Sbz1;\n    SECURITY_DESCRIPTOR_CONTROL Control;\n    DWORD Owner;\n    DWORD Group;\n    DWORD Sacl;\n    DWORD Dacl;\n} SECURITY_DESCRIPTOR_RELATIVE, *PISECURITY_DESCRIPTOR_RELATIVE;\n\ntypedef struct {\n    BYTE Revision;\n    BYTE Sbz1;\n    SECURITY_DESCRIPTOR_CONTROL Control;\n    PSID Owner;\n    PSID Group;\n    PACL Sacl;\n    PACL Dacl;\n} SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;\n\n#define SECURITY_DESCRIPTOR_MIN_LENGTH   (sizeof(SECURITY_DESCRIPTOR))\n\n#endif /* _SECURITY_DEFINED */\n\n/*\n * SID_AND_ATTRIBUTES\n */\n\ntypedef struct _SID_AND_ATTRIBUTES {\n  PSID  Sid;\n  DWORD Attributes;\n} SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES;\n\n/* security entities */\n#define SECURITY_NULL_RID                       __MSABI_LONG(0x00000000)\n#define SECURITY_WORLD_RID                      __MSABI_LONG(0x00000000)\n#define SECURITY_LOCAL_RID                      __MSABI_LONG(0X00000000)\n\n#define SECURITY_NULL_SID_AUTHORITY\t\t{0,0,0,0,0,0}\n\n/* S-1-1 */\n#define SECURITY_WORLD_SID_AUTHORITY\t\t{0,0,0,0,0,1}\n\n/* S-1-2 */\n#define SECURITY_LOCAL_SID_AUTHORITY\t\t{0,0,0,0,0,2}\n\n/* S-1-3 */\n#define SECURITY_CREATOR_SID_AUTHORITY\t\t{0,0,0,0,0,3}\n#define SECURITY_CREATOR_OWNER_RID              __MSABI_LONG(0x00000000)\n#define SECURITY_CREATOR_GROUP_RID              __MSABI_LONG(0x00000001)\n#define SECURITY_CREATOR_OWNER_SERVER_RID       __MSABI_LONG(0x00000002)\n#define SECURITY_CREATOR_GROUP_SERVER_RID       __MSABI_LONG(0x00000003)\n\n/* S-1-4 */\n#define SECURITY_NON_UNIQUE_AUTHORITY\t\t{0,0,0,0,0,4}\n\n/* S-1-5 */\n#define SECURITY_NT_AUTHORITY\t\t\t{0,0,0,0,0,5}\n#define SECURITY_DIALUP_RID                     __MSABI_LONG(0x00000001)\n#define SECURITY_NETWORK_RID                    __MSABI_LONG(0x00000002)\n#define SECURITY_BATCH_RID                      __MSABI_LONG(0x00000003)\n#define SECURITY_INTERACTIVE_RID                __MSABI_LONG(0x00000004)\n#define SECURITY_LOGON_IDS_RID                  __MSABI_LONG(0x00000005)\n#define SECURITY_SERVICE_RID                    __MSABI_LONG(0x00000006)\n#define SECURITY_ANONYMOUS_LOGON_RID            __MSABI_LONG(0x00000007)\n#define SECURITY_PROXY_RID                      __MSABI_LONG(0x00000008)\n#define SECURITY_ENTERPRISE_CONTROLLERS_RID     __MSABI_LONG(0x00000009)\n#define SECURITY_SERVER_LOGON_RID               SECURITY_ENTERPRISE_CONTROLLERS_RID\n#define SECURITY_PRINCIPAL_SELF_RID             __MSABI_LONG(0x0000000A)\n#define SECURITY_AUTHENTICATED_USER_RID         __MSABI_LONG(0x0000000B)\n#define SECURITY_RESTRICTED_CODE_RID            __MSABI_LONG(0x0000000C)\n#define SECURITY_TERMINAL_SERVER_RID            __MSABI_LONG(0x0000000D)\n#define SECURITY_REMOTE_LOGON_RID               __MSABI_LONG(0x0000000E)\n#define SECURITY_THIS_ORGANIZATION_RID          __MSABI_LONG(0x0000000F)\n#define SECURITY_LOCAL_SYSTEM_RID               __MSABI_LONG(0x00000012)\n#define SECURITY_LOCAL_SERVICE_RID              __MSABI_LONG(0x00000013)\n#define SECURITY_NETWORK_SERVICE_RID            __MSABI_LONG(0x00000014)\n#define SECURITY_NT_NON_UNIQUE                  __MSABI_LONG(0x00000015)\n#define SECURITY_BUILTIN_DOMAIN_RID             __MSABI_LONG(0x00000020)\n\n#define SECURITY_PACKAGE_BASE_RID               __MSABI_LONG(0x00000040)\n#define SECURITY_PACKAGE_NTLM_RID               __MSABI_LONG(0x0000000A)\n#define SECURITY_PACKAGE_SCHANNEL_RID           __MSABI_LONG(0x0000000E)\n#define SECURITY_PACKAGE_DIGEST_RID             __MSABI_LONG(0x00000015)\n#define SECURITY_MAX_ALWAYS_FILTERED            __MSABI_LONG(0x000003E7)\n#define SECURITY_MIN_NEVER_FILTERED             __MSABI_LONG(0x000003E8)\n#define SECURITY_OTHER_ORGANIZATION_RID         __MSABI_LONG(0x000003E8)\n\n#define FOREST_USER_RID_MAX                     __MSABI_LONG(0x000001F3)\n#define DOMAIN_USER_RID_ADMIN                   __MSABI_LONG(0x000001F4)\n#define DOMAIN_USER_RID_GUEST                   __MSABI_LONG(0x000001F5)\n#define DOMAIN_USER_RID_KRBTGT                  __MSABI_LONG(0x000001F6)\n#define DOMAIN_USER_RID_MAX                     __MSABI_LONG(0x000003E7)\n\n#define DOMAIN_GROUP_RID_ADMINS                 __MSABI_LONG(0x00000200)\n#define DOMAIN_GROUP_RID_USERS                  __MSABI_LONG(0x00000201)\n#define DOMAIN_GROUP_RID_GUESTS                 __MSABI_LONG(0x00000202)\n#define DOMAIN_GROUP_RID_COMPUTERS              __MSABI_LONG(0x00000203)\n#define DOMAIN_GROUP_RID_CONTROLLERS            __MSABI_LONG(0x00000204)\n#define DOMAIN_GROUP_RID_CERT_ADMINS            __MSABI_LONG(0x00000205)\n#define DOMAIN_GROUP_RID_SCHEMA_ADMINS          __MSABI_LONG(0x00000206)\n#define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS      __MSABI_LONG(0x00000207)\n#define DOMAIN_GROUP_RID_POLICY_ADMINS          __MSABI_LONG(0x00000208)\n\n#define SECURITY_APP_PACKAGE_AUTHORITY {0,0,0,0,0,15}\n#define SECURITY_APP_PACKAGE_BASE_RID           __MSABI_LONG(0x000000002)\n#define SECURITY_BUILTIN_APP_PACKAGE_RID_COUNT  __MSABI_LONG(0x000000002)\n#define SECURITY_APP_PACKAGE_RID_COUNT          __MSABI_LONG(0x000000008)\n#define SECURITY_CAPABILITY_BASE_RID            __MSABI_LONG(0x000000003)\n#define SECURITY_CAPABILITY_APP_RID             __MSABI_LONG(0x000000400)\n#define SECURITY_BUILTIN_CAPABILITY_RID_COUNT   __MSABI_LONG(0x000000002)\n#define SECURITY_CAPABILITY_RID_COUNT           __MSABI_LONG(0x000000005)\n#define SECURITY_PARENT_PACKAGE_RID_COUNT       SECURITY_APP_PACKAGE_RID_COUNT\n#define SECURITY_CHILD_PACKAGE_RID_COUNT        __MSABI_LONG(0x00000000c)\n#define SECURITY_BUILTIN_PACKAGE_ANY_PACKAGE    __MSABI_LONG(0x000000001)\n\n#define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}\n#define SECURITY_MANDATORY_UNTRUSTED_RID        __MSABI_LONG(0x00000000)\n#define SECURITY_MANDATORY_LOW_RID              __MSABI_LONG(0x00001000)\n#define SECURITY_MANDATORY_MEDIUM_RID           __MSABI_LONG(0x00002000)\n#define SECURITY_MANDATORY_HIGH_RID             __MSABI_LONG(0x00003000)\n#define SECURITY_MANDATORY_SYSTEM_RID           __MSABI_LONG(0x00004000)\n#define SECURITY_MANDATORY_PROTECTED_PROCESS_RID __MSABI_LONG(0x00005000)\n\n#define DOMAIN_ALIAS_RID_ADMINS                 __MSABI_LONG(0x00000220)\n#define DOMAIN_ALIAS_RID_USERS                  __MSABI_LONG(0x00000221)\n#define DOMAIN_ALIAS_RID_GUESTS                 __MSABI_LONG(0x00000222)\n#define DOMAIN_ALIAS_RID_POWER_USERS            __MSABI_LONG(0x00000223)\n\n#define DOMAIN_ALIAS_RID_ACCOUNT_OPS            __MSABI_LONG(0x00000224)\n#define DOMAIN_ALIAS_RID_SYSTEM_OPS             __MSABI_LONG(0x00000225)\n#define DOMAIN_ALIAS_RID_PRINT_OPS              __MSABI_LONG(0x00000226)\n#define DOMAIN_ALIAS_RID_BACKUP_OPS             __MSABI_LONG(0x00000227)\n\n#define DOMAIN_ALIAS_RID_REPLICATOR             __MSABI_LONG(0x00000228)\n#define DOMAIN_ALIAS_RID_RAS_SERVERS            __MSABI_LONG(0x00000229)\n#define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS       __MSABI_LONG(0x0000022A)\n#define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS   __MSABI_LONG(0x0000022B)\n#define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS __MSABI_LONG(0x0000022C)\n#define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS __MSABI_LONG(0x0000022D)\n\n#define DOMAIN_ALIAS_RID_MONITORING_USERS       __MSABI_LONG(0x0000022E)\n#define DOMAIN_ALIAS_RID_LOGGING_USERS          __MSABI_LONG(0x0000022F)\n#define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS    __MSABI_LONG(0x00000230)\n#define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS     __MSABI_LONG(0x00000231)\n#define DOMAIN_ALIAS_RID_DCOM_USERS             __MSABI_LONG(0x00000232)\n\n#define SECURITY_SERVER_LOGON_RID\t\tSECURITY_ENTERPRISE_CONTROLLERS_RID\n\n#define SECURITY_PACKAGE_RID_COUNT              __MSABI_LONG(2)\n#define SECURITY_LOGON_IDS_RID_COUNT            __MSABI_LONG(3)\n\ntypedef enum {\n    WinNullSid                                  = 0,\n    WinWorldSid                                 = 1,\n    WinLocalSid                                 = 2,\n    WinCreatorOwnerSid                          = 3,\n    WinCreatorGroupSid                          = 4,\n    WinCreatorOwnerServerSid                    = 5,\n    WinCreatorGroupServerSid                    = 6,\n    WinNtAuthoritySid                           = 7,\n    WinDialupSid                                = 8,\n    WinNetworkSid                               = 9,\n    WinBatchSid                                 = 10,\n    WinInteractiveSid                           = 11,\n    WinServiceSid                               = 12,\n    WinAnonymousSid                             = 13,\n    WinProxySid                                 = 14,\n    WinEnterpriseControllersSid                 = 15,\n    WinSelfSid                                  = 16,\n    WinAuthenticatedUserSid                     = 17,\n    WinRestrictedCodeSid                        = 18,\n    WinTerminalServerSid                        = 19,\n    WinRemoteLogonIdSid                         = 20,\n    WinLogonIdsSid                              = 21,\n    WinLocalSystemSid                           = 22,\n    WinLocalServiceSid                          = 23,\n    WinNetworkServiceSid                        = 24,\n    WinBuiltinDomainSid                         = 25,\n    WinBuiltinAdministratorsSid                 = 26,\n    WinBuiltinUsersSid                          = 27,\n    WinBuiltinGuestsSid                         = 28,\n    WinBuiltinPowerUsersSid                     = 29,\n    WinBuiltinAccountOperatorsSid               = 30,\n    WinBuiltinSystemOperatorsSid                = 31,\n    WinBuiltinPrintOperatorsSid                 = 32,\n    WinBuiltinBackupOperatorsSid                = 33,\n    WinBuiltinReplicatorSid                     = 34,\n    WinBuiltinPreWindows2000CompatibleAccessSid = 35,\n    WinBuiltinRemoteDesktopUsersSid             = 36,\n    WinBuiltinNetworkConfigurationOperatorsSid  = 37,\n    WinAccountAdministratorSid                  = 38,\n    WinAccountGuestSid                          = 39,\n    WinAccountKrbtgtSid                         = 40,\n    WinAccountDomainAdminsSid                   = 41,\n    WinAccountDomainUsersSid                    = 42,\n    WinAccountDomainGuestsSid                   = 43,\n    WinAccountComputersSid                      = 44,\n    WinAccountControllersSid                    = 45,\n    WinAccountCertAdminsSid                     = 46,\n    WinAccountSchemaAdminsSid                   = 47,\n    WinAccountEnterpriseAdminsSid               = 48,\n    WinAccountPolicyAdminsSid                   = 49,\n    WinAccountRasAndIasServersSid               = 50,\n    WinNTLMAuthenticationSid                    = 51,\n    WinDigestAuthenticationSid                  = 52,\n    WinSChannelAuthenticationSid                = 53,\n    WinThisOrganizationSid                      = 54,\n    WinOtherOrganizationSid                     = 55,\n    WinBuiltinIncomingForestTrustBuildersSid    = 56,\n    WinBuiltinPerfMonitoringUsersSid            = 57,\n    WinBuiltinPerfLoggingUsersSid               = 58,\n    WinBuiltinAuthorizationAccessSid            = 59,\n    WinBuiltinTerminalServerLicenseServersSid   = 60,\n    WinBuiltinDCOMUsersSid                      = 61,\n    WinBuiltinIUsersSid                         = 62,\n    WinIUserSid                                 = 63,\n    WinBuiltinCryptoOperatorsSid                = 64,\n    WinUntrustedLabelSid                        = 65,\n    WinLowLabelSid                              = 66,\n    WinMediumLabelSid                           = 67,\n    WinHighLabelSid                             = 68,\n    WinSystemLabelSid                           = 69,\n    WinWriteRestrictedCodeSid                   = 70,\n    WinCreatorOwnerRightsSid                    = 71,\n    WinCacheablePrincipalsGroupSid              = 72,\n    WinNonCacheablePrincipalsGroupSid           = 73,\n    WinEnterpriseReadonlyControllersSid         = 74,\n    WinAccountReadonlyControllersSid            = 75,\n    WinBuiltinEventLogReadersGroup              = 76,\n    WinNewEnterpriseReadonlyControllersSid      = 77,\n    WinBuiltinCertSvcDComAccessGroup            = 78,\n    WinMediumPlusLabelSid                       = 79,\n    WinLocalLogonSid                            = 80,\n    WinConsoleLogonSid                          = 81,\n    WinThisOrganizationCertificateSid           = 82,\n    WinApplicationPackageAuthoritySid           = 83,\n    WinBuiltinAnyPackageSid                     = 84,\n    WinCapabilityInternetClientSid              = 85,\n    WinCapabilityInternetClientServerSid        = 86,\n    WinCapabilityPrivateNetworkClientServerSid  = 87,\n    WinCapabilityPicturesLibrarySid             = 88,\n    WinCapabilityVideosLibrarySid               = 89,\n    WinCapabilityMusicLibrarySid                = 90,\n    WinCapabilityDocumentsLibrarySid            = 91,\n    WinCapabilitySharedUserCertificatesSid      = 92,\n    WinCapabilityEnterpriseAuthenticationSid    = 93,\n    WinCapabilityRemovableStorageSid            = 94,\n    WinBuiltinRDSRemoteAccessServersSid         = 95,\n    WinBuiltinRDSEndpointServersSid             = 96,\n    WinBuiltinRDSManagementServersSid           = 97,\n    WinUserModeDriversSid                       = 98,\n    WinBuiltinHyperVAdminsSid                   = 99,\n    WinAccountCloneableControllersSid           = 100,\n    WinBuiltinAccessControlAssistanceOperatorsSid = 101,\n    WinBuiltinRemoteManagementUsersSid          = 102,\n    WinAuthenticationAuthorityAssertedSid       = 103,\n    WinAuthenticationServiceAssertedSid         = 104,\n    WinLocalAccountSid                          = 105,\n    WinLocalAccountAndAdministratorSid          = 106,\n    WinAccountProtectedUsersSid                 = 107,\n} WELL_KNOWN_SID_TYPE;\n\n/*\n * TOKEN_USER\n */\n\ntypedef struct _TOKEN_USER {\n    SID_AND_ATTRIBUTES User;\n} TOKEN_USER, *PTOKEN_USER;\n\n/*\n * TOKEN_GROUPS\n */\n\ntypedef struct _TOKEN_GROUPS {\n    DWORD GroupCount;\n    SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];\n} TOKEN_GROUPS, *PTOKEN_GROUPS;\n\n/*\n * LUID_AND_ATTRIBUTES\n */\n\ntypedef union _LARGE_INTEGER {\n    struct {\n#ifdef WORDS_BIGENDIAN\n        LONG     HighPart;\n        DWORD    LowPart;\n#else\n        DWORD    LowPart;\n        LONG     HighPart;\n#endif\n    } u;\n#ifndef NONAMELESSSTRUCT\n    struct {\n#ifdef WORDS_BIGENDIAN\n        LONG     HighPart;\n        DWORD    LowPart;\n#else\n        DWORD    LowPart;\n        LONG     HighPart;\n#endif\n    };\n#endif\n    LONGLONG QuadPart;\n} LARGE_INTEGER, *PLARGE_INTEGER;\n\ntypedef union _ULARGE_INTEGER {\n    struct {\n#ifdef WORDS_BIGENDIAN\n        DWORD    HighPart;\n        DWORD    LowPart;\n#else\n        DWORD    LowPart;\n        DWORD    HighPart;\n#endif\n    } u;\n#ifndef NONAMELESSSTRUCT\n    struct {\n#ifdef WORDS_BIGENDIAN\n        DWORD    HighPart;\n        DWORD    LowPart;\n#else\n        DWORD    LowPart;\n        DWORD    HighPart;\n#endif\n    };\n#endif\n    ULONGLONG QuadPart;\n} ULARGE_INTEGER, *PULARGE_INTEGER;\n\n/*\n * Locally Unique Identifier\n */\n\ntypedef struct _LUID {\n    DWORD LowPart;\n    LONG HighPart;\n} LUID, *PLUID;\n\n#include <pshpack4.h>\ntypedef struct _LUID_AND_ATTRIBUTES {\n  LUID   Luid;\n  DWORD  Attributes;\n} LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;\n#include <poppack.h>\n\n/*\n * PRIVILEGE_SET\n */\n\ntypedef struct _PRIVILEGE_SET {\n    DWORD PrivilegeCount;\n    DWORD Control;\n    LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];\n} PRIVILEGE_SET, *PPRIVILEGE_SET;\n\n/*\n * TOKEN_PRIVILEGES\n */\n\ntypedef struct _TOKEN_PRIVILEGES {\n  DWORD PrivilegeCount;\n  LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];\n} TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES;\n\n/*\n * TOKEN_OWNER\n */\n\ntypedef struct _TOKEN_OWNER {\n  PSID Owner;\n} TOKEN_OWNER, *PTOKEN_OWNER;\n\n/*\n * TOKEN_PRIMARY_GROUP\n */\n\ntypedef struct _TOKEN_PRIMARY_GROUP {\n  PSID PrimaryGroup;\n} TOKEN_PRIMARY_GROUP, *PTOKEN_PRIMARY_GROUP;\n\n\n/*\n * TOKEN_DEFAULT_DACL\n */\n\ntypedef struct _TOKEN_DEFAULT_DACL {\n  PACL DefaultDacl;\n} TOKEN_DEFAULT_DACL, *PTOKEN_DEFAULT_DACL;\n\n/*\n * TOKEN_SOURCE\n */\n\n#define TOKEN_SOURCE_LENGTH 8\n\ntypedef struct _TOKEN_SOURCE {\n  char SourceName[TOKEN_SOURCE_LENGTH];\n  LUID SourceIdentifier;\n} TOKEN_SOURCE, *PTOKEN_SOURCE;\n\n/*\n * TOKEN_TYPE\n */\n\ntypedef enum tagTOKEN_TYPE {\n  TokenPrimary = 1,\n  TokenImpersonation\n} TOKEN_TYPE;\n\n/*\n * SECURITY_IMPERSONATION_LEVEL\n */\n\ntypedef enum _SECURITY_IMPERSONATION_LEVEL {\n  SecurityAnonymous,\n  SecurityIdentification,\n  SecurityImpersonation,\n  SecurityDelegation\n} SECURITY_IMPERSONATION_LEVEL, *PSECURITY_IMPERSONATION_LEVEL;\n\n#define SECURITY_DYNAMIC_TRACKING   (TRUE)\n#define SECURITY_STATIC_TRACKING    (FALSE)\n\ntypedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE,\n\t* PSECURITY_CONTEXT_TRACKING_MODE;\n/*\n *\tQuality of Service\n */\n\ntypedef struct _SECURITY_QUALITY_OF_SERVICE {\n  DWORD\t\t\t\tLength;\n  SECURITY_IMPERSONATION_LEVEL\tImpersonationLevel;\n  SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;\n  BOOLEAN\t\t\tEffectiveOnly;\n} SECURITY_QUALITY_OF_SERVICE, *PSECURITY_QUALITY_OF_SERVICE;\n\n/*\n * TOKEN_STATISTICS\n */\n\n#include <pshpack4.h>\ntypedef struct _TOKEN_STATISTICS {\n  LUID  TokenId;\n  LUID  AuthenticationId;\n  LARGE_INTEGER ExpirationTime;\n  TOKEN_TYPE    TokenType;\n  SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;\n  DWORD DynamicCharged;\n  DWORD DynamicAvailable;\n  DWORD GroupCount;\n  DWORD PrivilegeCount;\n  LUID  ModifiedId;\n} TOKEN_STATISTICS;\n#include <poppack.h>\n\ntypedef struct _TOKEN_GROUPS_AND_PRIVILEGES {\n  DWORD                 SidCount;\n  DWORD                 SidLength;\n  PSID_AND_ATTRIBUTES   Sids;\n  DWORD                 RestrictedSidCount;\n  DWORD                 RestrictedSidLength;\n  PSID_AND_ATTRIBUTES   RestrictedSids;\n  DWORD                 PrivilegeCount;\n  DWORD                 PrivilegeLength;\n  PLUID_AND_ATTRIBUTES  Privileges;\n  LUID                  AuthenticationId;\n} TOKEN_GROUPS_AND_PRIVILEGES, * PTOKEN_GROUPS_AND_PRIVILEGES;\n\ntypedef struct _TOKEN_ORIGIN {\n  LUID  OriginatingLogonSession;\n} TOKEN_ORIGIN, * PTOKEN_ORIGIN;\n\ntypedef struct _TOKEN_LINKED_TOKEN {\n  HANDLE LinkedToken;\n} TOKEN_LINKED_TOKEN, * PTOKEN_LINKED_TOKEN;\n\ntypedef struct _TOKEN_ELEVATION {\n  DWORD TokenIsElevated;\n} TOKEN_ELEVATION, * PTOKEN_ELEVATION;\n\ntypedef struct _TOKEN_MANDATORY_LABEL {\n  SID_AND_ATTRIBUTES Label;\n} TOKEN_MANDATORY_LABEL, * PTOKEN_MANDATORY_LABEL;\n\ntypedef struct _TOKEN_APPCONTAINER_INFORMATION {\n  PSID TokenAppContainer;\n} TOKEN_APPCONTAINER_INFORMATION, * PTOKEN_APPCONTAINER_INFORMATION;\n\n/*\n *\tACLs of NT\n */\n\n/* ACEs, directly starting after an ACL */\ntypedef struct _ACE_HEADER {\n\tBYTE\tAceType;\n\tBYTE\tAceFlags;\n\tWORD\tAceSize;\n} ACE_HEADER,*PACE_HEADER;\n\n/* AceType */\n#define\tACCESS_ALLOWED_ACE_TYPE\t\t0\n#define\tACCESS_DENIED_ACE_TYPE\t\t1\n#define\tSYSTEM_AUDIT_ACE_TYPE\t\t2\n#define\tSYSTEM_ALARM_ACE_TYPE\t\t3\n#define SYSTEM_MANDATORY_LABEL_ACE_TYPE 0x11\n\n/* inherit AceFlags */\n#define\tOBJECT_INHERIT_ACE\t\t0x01\n#define\tCONTAINER_INHERIT_ACE\t\t0x02\n#define\tNO_PROPAGATE_INHERIT_ACE\t0x04\n#define\tINHERIT_ONLY_ACE\t\t0x08\n#define\tINHERITED_ACE\t\t        0x10\n#define\tVALID_INHERIT_FLAGS\t\t0x1F\n\n/* AceFlags mask for what events we (should) audit */\n#define\tSUCCESSFUL_ACCESS_ACE_FLAG\t0x40\n#define\tFAILED_ACCESS_ACE_FLAG\t\t0x80\n\n/* different ACEs depending on AceType\n * SidStart marks the begin of a SID\n * so the thing finally looks like this:\n * 0: ACE_HEADER\n * 4: ACCESS_MASK\n * 8... : SID\n */\ntypedef struct _ACCESS_ALLOWED_ACE {\n\tACE_HEADER\tHeader;\n\tDWORD\t\tMask;\n\tDWORD\t\tSidStart;\n} ACCESS_ALLOWED_ACE,*PACCESS_ALLOWED_ACE;\n\ntypedef struct _ACCESS_DENIED_ACE {\n\tACE_HEADER\tHeader;\n\tDWORD\t\tMask;\n\tDWORD\t\tSidStart;\n} ACCESS_DENIED_ACE,*PACCESS_DENIED_ACE;\n\ntypedef struct _SYSTEM_AUDIT_ACE {\n\tACE_HEADER\tHeader;\n\tDWORD\t\tMask;\n\tDWORD\t\tSidStart;\n} SYSTEM_AUDIT_ACE,*PSYSTEM_AUDIT_ACE;\n\ntypedef struct _SYSTEM_ALARM_ACE {\n\tACE_HEADER\tHeader;\n\tDWORD\t\tMask;\n\tDWORD\t\tSidStart;\n} SYSTEM_ALARM_ACE,*PSYSTEM_ALARM_ACE;\n\ntypedef struct _SYSTEM_MANDATORY_LABEL_ACE {\n    ACE_HEADER  Header;\n    ACCESS_MASK Mask;\n    DWORD       SidStart;\n} SYSTEM_MANDATORY_LABEL_ACE,*PSYSTEM_MANDATORY_LABEL_ACE;\n\n#define SYSTEM_MANDATORY_LABEL_NO_WRITE_UP      0x1\n#define SYSTEM_MANDATORY_LABEL_NO_READ_UP       0x2\n#define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP    0x4\n\ntypedef enum tagSID_NAME_USE {\n\tSidTypeUser = 1,\n\tSidTypeGroup,\n\tSidTypeDomain,\n\tSidTypeAlias,\n\tSidTypeWellKnownGroup,\n\tSidTypeDeletedAccount,\n\tSidTypeInvalid,\n\tSidTypeUnknown\n} SID_NAME_USE,*PSID_NAME_USE;\n\n#define ACE_OBJECT_TYPE_PRESENT 0x1\n#define ACE_INHERITED_OBJECT_TYPE_PRESENT   0x2\n\n/* Access rights */\n\n/* DELETE may be already defined via /usr/include/arpa/nameser_compat.h */\n#undef  DELETE\n#define DELETE                     0x00010000\n#define READ_CONTROL               0x00020000\n#define WRITE_DAC                  0x00040000\n#define WRITE_OWNER                0x00080000\n#define SYNCHRONIZE                0x00100000\n#define STANDARD_RIGHTS_REQUIRED   0x000f0000\n\n#define STANDARD_RIGHTS_READ       READ_CONTROL\n#define STANDARD_RIGHTS_WRITE      READ_CONTROL\n#define STANDARD_RIGHTS_EXECUTE    READ_CONTROL\n\n#define STANDARD_RIGHTS_ALL        0x001f0000\n\n#define SPECIFIC_RIGHTS_ALL        0x0000ffff\n\n#define GENERIC_READ               0x80000000\n#define GENERIC_WRITE              0x40000000\n#define GENERIC_EXECUTE            0x20000000\n#define GENERIC_ALL                0x10000000\n\n#define MAXIMUM_ALLOWED            0x02000000\n#define ACCESS_SYSTEM_SECURITY     0x01000000\n\n#define EVENT_QUERY_STATE          0x0001\n#define EVENT_MODIFY_STATE         0x0002\n#define EVENT_ALL_ACCESS           (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)\n\n#define SEMAPHORE_QUERY_STATE      0x0001\n#define SEMAPHORE_MODIFY_STATE     0x0002\n#define SEMAPHORE_ALL_ACCESS       (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)\n\n#define MUTANT_QUERY_STATE         0x0001\n#define MUTANT_ALL_ACCESS          (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|MUTANT_QUERY_STATE)\n\n#define JOB_OBJECT_ASSIGN_PROCESS           0x0001\n#define JOB_OBJECT_SET_ATTRIBUTES           0x0002\n#define JOB_OBJECT_QUERY                    0x0004\n#define JOB_OBJECT_TERMINATE                0x0008\n#define JOB_OBJECT_SET_SECURITY_ATTRIBUTES  0x0010\n#define JOB_OBJECT_ALL_ACCESS               (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1f)\n\n#define TIMER_QUERY_STATE          0x0001\n#define TIMER_MODIFY_STATE         0x0002\n#define TIMER_ALL_ACCESS           (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)\n\n#define PROCESS_TERMINATE                 0x0001\n#define PROCESS_CREATE_THREAD             0x0002\n#define PROCESS_VM_OPERATION              0x0008\n#define PROCESS_VM_READ                   0x0010\n#define PROCESS_VM_WRITE                  0x0020\n#define PROCESS_DUP_HANDLE                0x0040\n#define PROCESS_CREATE_PROCESS            0x0080\n#define PROCESS_SET_QUOTA                 0x0100\n#define PROCESS_SET_INFORMATION           0x0200\n#define PROCESS_QUERY_INFORMATION         0x0400\n#define PROCESS_SUSPEND_RESUME            0x0800\n#define PROCESS_QUERY_LIMITED_INFORMATION 0x1000\n#define PROCESS_SET_LIMITED_INFORMATION   0x2000\n#define PROCESS_ALL_ACCESS         (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xffff)\n\n#define THREAD_TERMINATE                  0x0001\n#define THREAD_SUSPEND_RESUME             0x0002\n#define THREAD_GET_CONTEXT                0x0008\n#define THREAD_SET_CONTEXT                0x0010\n#define THREAD_SET_INFORMATION            0x0020\n#define THREAD_QUERY_INFORMATION          0x0040\n#define THREAD_SET_THREAD_TOKEN           0x0080\n#define THREAD_IMPERSONATE                0x0100\n#define THREAD_DIRECT_IMPERSONATION       0x0200\n#define THREAD_SET_LIMITED_INFORMATION    0x0400\n#define THREAD_QUERY_LIMITED_INFORMATION  0x0800\n#define THREAD_RESUME                     0x1000\n#define THREAD_ALL_ACCESS          (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xffff)\n\n#define THREAD_BASE_PRIORITY_LOWRT  15\n#define THREAD_BASE_PRIORITY_MAX    2\n#define THREAD_BASE_PRIORITY_MIN   -2\n#define THREAD_BASE_PRIORITY_IDLE  -15\n\ntypedef struct _QUOTA_LIMITS {\n    SIZE_T PagedPoolLimit;\n    SIZE_T NonPagedPoolLimit;\n    SIZE_T MinimumWorkingSetSize;\n    SIZE_T MaximumWorkingSetSize;\n    SIZE_T PagefileLimit;\n    LARGE_INTEGER TimeLimit;\n} QUOTA_LIMITS, *PQUOTA_LIMITS;\n\n#define QUOTA_LIMITS_HARDWS_MIN_ENABLE  0x00000001\n#define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002\n#define QUOTA_LIMITS_HARDWS_MAX_ENABLE  0x00000004\n#define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008\n\ntypedef struct _QUOTA_LIMITS_EX {\n    SIZE_T PagedPoolLimit;\n    SIZE_T NonPagedPoolLimit;\n    SIZE_T MinimumWorkingSetSize;\n    SIZE_T MaximumWorkingSetSize;\n    SIZE_T PagefileLimit;\n    LARGE_INTEGER TimeLimit;\n    SIZE_T Reserved1;\n    SIZE_T Reserved2;\n    SIZE_T Reserved3;\n    SIZE_T Reserved4;\n    DWORD Flags;\n    DWORD Reserved5;\n} QUOTA_LIMITS_EX, *PQUOTA_LIMITS_EX;\n\n#define SECTION_QUERY              0x0001\n#define SECTION_MAP_WRITE          0x0002\n#define SECTION_MAP_READ           0x0004\n#define SECTION_MAP_EXECUTE        0x0008\n#define SECTION_EXTEND_SIZE        0x0010\n#define SECTION_MAP_EXECUTE_EXPLICIT 0x0020\n#define SECTION_ALL_ACCESS         (STANDARD_RIGHTS_REQUIRED|0x01f)\n\n#define FILE_READ_DATA            0x0001    /* file & pipe */\n#define FILE_LIST_DIRECTORY       0x0001    /* directory */\n#define FILE_WRITE_DATA           0x0002    /* file & pipe */\n#define FILE_ADD_FILE             0x0002    /* directory */\n#define FILE_APPEND_DATA          0x0004    /* file */\n#define FILE_ADD_SUBDIRECTORY     0x0004    /* directory */\n#define FILE_CREATE_PIPE_INSTANCE 0x0004    /* named pipe */\n#define FILE_READ_EA              0x0008    /* file & directory */\n#define FILE_READ_PROPERTIES      FILE_READ_EA\n#define FILE_WRITE_EA             0x0010    /* file & directory */\n#define FILE_WRITE_PROPERTIES     FILE_WRITE_EA\n#define FILE_EXECUTE              0x0020    /* file */\n#define FILE_TRAVERSE             0x0020    /* directory */\n#define FILE_DELETE_CHILD         0x0040    /* directory */\n#define FILE_READ_ATTRIBUTES      0x0080    /* all */\n#define FILE_WRITE_ATTRIBUTES     0x0100    /* all */\n#define FILE_ALL_ACCESS           (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1ff)\n\n#define FILE_GENERIC_READ         (STANDARD_RIGHTS_READ | FILE_READ_DATA | \\\n                                   FILE_READ_ATTRIBUTES | FILE_READ_EA | \\\n                                   SYNCHRONIZE)\n#define FILE_GENERIC_WRITE        (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | \\\n                                   FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | \\\n                                   FILE_APPEND_DATA | SYNCHRONIZE)\n#define FILE_GENERIC_EXECUTE      (STANDARD_RIGHTS_EXECUTE | FILE_EXECUTE | \\\n                                   FILE_READ_ATTRIBUTES | SYNCHRONIZE)\n\n#define DUPLICATE_CLOSE_SOURCE     0x00000001\n#define DUPLICATE_SAME_ACCESS      0x00000002\n\n/* File attribute flags */\n#define FILE_SHARE_READ                    0x00000001\n#define FILE_SHARE_WRITE                   0x00000002\n#define FILE_SHARE_DELETE                  0x00000004\n\n#define FILE_ATTRIBUTE_READONLY            0x00000001\n#define FILE_ATTRIBUTE_HIDDEN              0x00000002\n#define FILE_ATTRIBUTE_SYSTEM              0x00000004\n#define FILE_ATTRIBUTE_DIRECTORY           0x00000010\n#define FILE_ATTRIBUTE_ARCHIVE             0x00000020\n#define FILE_ATTRIBUTE_DEVICE              0x00000040\n#define FILE_ATTRIBUTE_NORMAL              0x00000080\n#define FILE_ATTRIBUTE_TEMPORARY           0x00000100\n#define FILE_ATTRIBUTE_SPARSE_FILE         0x00000200\n#define FILE_ATTRIBUTE_REPARSE_POINT       0x00000400\n#define FILE_ATTRIBUTE_COMPRESSED          0x00000800\n#define FILE_ATTRIBUTE_OFFLINE             0x00001000\n#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000\n#define FILE_ATTRIBUTE_ENCRYPTED           0x00004000\n#define FILE_ATTRIBUTE_INTEGRITY_STREAM    0x00008000\n#define FILE_ATTRIBUTE_VIRTUAL             0x00010000\n#define FILE_ATTRIBUTE_NO_SCRUB_DATA       0x00020000\n#define FILE_ATTRIBUTE_EA                  0x00040000\n\n/* File notification flags */\n#define FILE_NOTIFY_CHANGE_FILE_NAME    0x00000001\n#define FILE_NOTIFY_CHANGE_DIR_NAME     0x00000002\n#define FILE_NOTIFY_CHANGE_NAME         0x00000003\n#define FILE_NOTIFY_CHANGE_ATTRIBUTES   0x00000004\n#define FILE_NOTIFY_CHANGE_SIZE         0x00000008\n#define FILE_NOTIFY_CHANGE_LAST_WRITE   0x00000010\n#define FILE_NOTIFY_CHANGE_LAST_ACCESS  0x00000020\n#define FILE_NOTIFY_CHANGE_CREATION     0x00000040\n#define FILE_NOTIFY_CHANGE_EA           0x00000080\n#define FILE_NOTIFY_CHANGE_SECURITY     0x00000100\n#define FILE_NOTIFY_CHANGE_STREAM_NAME  0x00000200\n#define FILE_NOTIFY_CHANGE_STREAM_SIZE  0x00000400\n#define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800\n\n#define FILE_ACTION_ADDED               0x00000001\n#define FILE_ACTION_REMOVED             0x00000002\n#define FILE_ACTION_MODIFIED            0x00000003\n#define FILE_ACTION_RENAMED_OLD_NAME    0x00000004\n#define FILE_ACTION_RENAMED_NEW_NAME    0x00000005\n#define FILE_ACTION_ADDED_STREAM        0x00000006\n#define FILE_ACTION_REMOVED_STREAM      0x00000007\n#define FILE_ACTION_MODIFIED_STREAM     0x00000008\n#define FILE_ACTION_REMOVED_BY_DELETE   0x00000009\n#define FILE_ACTION_ID_NOT_TUNNELLED          0x0000000a\n#define FILE_ACTION_TUNNELLED_ID_COLLISION    0x0000000b\n\n#define FILE_CASE_SENSITIVE_SEARCH      0x00000001\n#define FILE_CASE_PRESERVED_NAMES       0x00000002\n#define FILE_UNICODE_ON_DISK            0x00000004\n#define FILE_PERSISTENT_ACLS            0x00000008\n#define FILE_FILE_COMPRESSION           0x00000010\n#define FILE_VOLUME_QUOTAS              0x00000020\n#define FILE_SUPPORTS_SPARSE_FILES      0x00000040\n#define FILE_SUPPORTS_REPARSE_POINTS    0x00000080\n#define FILE_SUPPORTS_REMOTE_STORAGE    0x00000100\n#define FILE_VOLUME_IS_COMPRESSED       0x00008000\n#define FILE_SUPPORTS_OBJECT_IDS        0x00010000\n#define FILE_SUPPORTS_ENCRYPTION        0x00020000\n#define FILE_NAMED_STREAMS              0x00040000\n#define FILE_READ_ONLY_VOLUME           0x00080000\n#define FILE_SEQUENTIAL_WRITE_ONCE      0x00100000\n#define FILE_SUPPORTS_TRANSACTIONS           0x00200000\n#define FILE_SUPPORTS_HARD_LINKS             0x00400000\n#define FILE_SUPPORTS_EXTENDED_ATTRIBUTES    0x00800000\n#define FILE_SUPPORTS_OPEN_BY_FILE_ID        0x01000000\n#define FILE_SUPPORTS_USN_JOURNAL            0x02000000\n#define FILE_SUPPORTS_INTEGRITY_STREAMS      0x04000000\n#define FILE_SUPPORTS_BLOCK_REFCOUNTING      0x08000000\n#define FILE_SUPPORTS_SPARSE_VDL             0x10000000\n\n/* File alignments (NT) */\n#define\tFILE_BYTE_ALIGNMENT\t\t0x00000000\n#define\tFILE_WORD_ALIGNMENT\t\t0x00000001\n#define\tFILE_LONG_ALIGNMENT\t\t0x00000003\n#define\tFILE_QUAD_ALIGNMENT\t\t0x00000007\n#define\tFILE_OCTA_ALIGNMENT\t\t0x0000000f\n#define\tFILE_32_BYTE_ALIGNMENT\t\t0x0000001f\n#define\tFILE_64_BYTE_ALIGNMENT\t\t0x0000003f\n#define\tFILE_128_BYTE_ALIGNMENT\t\t0x0000007f\n#define\tFILE_256_BYTE_ALIGNMENT\t\t0x000000ff\n#define\tFILE_512_BYTE_ALIGNMENT\t\t0x000001ff\n\n#define COMPRESSION_FORMAT_NONE         0\n#define COMPRESSION_FORMAT_DEFAULT      1\n#define COMPRESSION_FORMAT_LZNT1        2\n#define COMPRESSION_ENGINE_STANDARD     0\n#define COMPRESSION_ENGINE_MAXIMUM      256\n\n#define MAILSLOT_NO_MESSAGE             ((DWORD)-1)\n#define MAILSLOT_WAIT_FOREVER           ((DWORD)-1)\n\n#define REG_NONE\t\t0\t/* no type */\n#define REG_SZ\t\t\t1\t/* string type (ASCII) */\n#define REG_EXPAND_SZ\t\t2\t/* string, includes %ENVVAR% (expanded by caller) (ASCII) */\n#define REG_BINARY\t\t3\t/* binary format, callerspecific */\n/* YES, REG_DWORD == REG_DWORD_LITTLE_ENDIAN */\n#define REG_DWORD\t\t4\t/* DWORD in little endian format */\n#define REG_DWORD_LITTLE_ENDIAN\t4\t/* DWORD in little endian format */\n#define REG_DWORD_BIG_ENDIAN\t5\t/* DWORD in big endian format  */\n#define REG_LINK\t\t6\t/* symbolic link (UNICODE) */\n#define REG_MULTI_SZ\t\t7\t/* multiple strings, delimited by \\0, terminated by \\0\\0 (ASCII) */\n#define REG_RESOURCE_LIST\t8\t/* resource list? huh? */\n#define REG_FULL_RESOURCE_DESCRIPTOR\t9\t/* full resource descriptor? huh? */\n#define REG_RESOURCE_REQUIREMENTS_LIST\t10\n#define REG_QWORD\t\t11\t/* QWORD in little endian format */\n#define REG_QWORD_LITTLE_ENDIAN\t11\t/* QWORD in little endian format */\n\n/* ----------------------------- begin power management --------------------- */\n\ntypedef enum _LATENCY_TIME {\n\tLT_DONT_CARE,\n\tLT_LOWEST_LATENCY\n} LATENCY_TIME, *PLATENCY_TIME;\n\n#define DISCHARGE_POLICY_CRITICAL \t0\n#define DISCHARGE_POLICY_LOW\t\t1\n#define NUM_DISCHARGE_POLICIES\t\t4\n\n#define PO_THROTTLE_NONE\t\t0\n#define PO_THROTTLE_CONSTANT\t\t1\n#define PO_THROTTLE_DEGRADE\t\t2\n#define PO_THROTTLE_ADAPTIVE\t\t3\n\ntypedef enum _POWER_ACTION {\n\tPowerActionNone = 0,\n\tPowerActionReserved,\n\tPowerActionSleep,\n\tPowerActionHibernate,\n\tPowerActionShutdown,\n\tPowerActionShutdownReset,\n\tPowerActionShutdownOff,\n\tPowerActionWarmEject\n} POWER_ACTION,\n*PPOWER_ACTION;\n\ntypedef enum _POWER_PLATFORM_ROLE {\n    PlatformRoleUnspecified,\n    PlatformRoleDesktop,\n    PlatformRoleMobile,\n    PlatformRoleWorkstation,\n    PlatformRoleEnterpriseServer,\n    PlatformRoleSOHOServer,\n    PlatformRoleAppliancePC,\n    PlatformRolePerformanceServer,\n    PlatformRoleSlate,\n    PlatformRoleMaximum\n} POWER_PLATFORM_ROLE, *PPOWER_PLATFORM_ROLE;\n\ntypedef enum _SYSTEM_POWER_STATE {\n\tPowerSystemUnspecified = 0,\n\tPowerSystemWorking = 1,\n\tPowerSystemSleeping1 = 2,\n\tPowerSystemSleeping2 = 3,\n\tPowerSystemSleeping3 = 4,\n\tPowerSystemHibernate = 5,\n\tPowerSystemShutdown = 6,\n\tPowerSystemMaximum = 7\n} SYSTEM_POWER_STATE,\n*PSYSTEM_POWER_STATE;\n\ntypedef enum _DEVICE_POWER_STATE {\n    PowerDeviceUnspecified,\n    PowerDeviceD0,\n    PowerDeviceD1,\n    PowerDeviceD2,\n    PowerDeviceD3,\n    PowerDeviceMaximum\n} DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;\n\ntypedef enum _POWER_INFORMATION_LEVEL {\n        SystemPowerPolicyAc,\n        SystemPowerPolicyDc,\n        VerifySystemPolicyAc,\n        VerifySystemPolicyDc,\n        SystemPowerCapabilities,\n        SystemBatteryState,\n        SystemPowerStateHandler,\n        ProcessorStateHandler,\n        SystemPowerPolicyCurrent,\n        AdministratorPowerPolicy,\n        SystemReserveHiberFile,\n        ProcessorInformation,\n        SystemPowerInformation,\n        ProcessorStateHandler2,\n        LastWakeTime,\n        LastSleepTime,\n        SystemExecutionState,\n        SystemPowerStateNotifyHandler,\n        ProcessorPowerPolicyAc,\n        ProcessorPowerPolicyDc,\n        VerifyProcessorPowerPolicyAc,\n        VerifyProcessorPowerPolicyDc,\n        ProcessorPowerPolicyCurrent\n} POWER_INFORMATION_LEVEL;\n\ntypedef struct _ADMINISTRATOR_POWER_POLICY {\n\tSYSTEM_POWER_STATE MinSleep;\n\tSYSTEM_POWER_STATE MaxSleep;\n\tULONG MinVideoTimeout;\n\tULONG MaxVideoTimeout;\n\tULONG MinSpindownTimeout;\n\tULONG MaxSpindownTimeout;\n} ADMINISTRATOR_POWER_POLICY, *PADMINISTRATOR_POWER_POLICY;\n\ntypedef struct {\n\tULONG Granularity;\n\tULONG Capacity;\n} BATTERY_REPORTING_SCALE,\n*PBATTERY_REPORTING_SCALE;\n\ntypedef struct {\n\tPOWER_ACTION Action;\n\tULONG Flags;\n\tULONG EventCode;\n} POWER_ACTION_POLICY,\n*PPOWER_ACTION_POLICY;\n\ntypedef struct _PROCESSOR_POWER_INFORMATION {\n\tULONG Number;\n\tULONG MaxMhz;\n\tULONG CurrentMhz;\n\tULONG MhzLimit;\n\tULONG MaxIdleState;\n\tULONG CurrentIdleState;\n} PROCESSOR_POWER_INFORMATION,\n*PPROCESSOR_POWER_INFORMATION;\n\ntypedef struct _PROCESSOR_POWER_POLICY_INFO {\n\tULONG TimeCheck;\n\tULONG DemoteLimit;\n\tULONG PromoteLimit;\n\tUCHAR DemotePercent;\n\tUCHAR PromotePercent;\n\tUCHAR Spare[2];\n\tULONG AllowDemotion:1;\n\tULONG AllowPromotion:1;\n\tULONG Reserved:30;\n} PROCESSOR_POWER_POLICY_INFO,\n*PPROCESSOR_POWER_POLICY_INFO;\n\ntypedef struct _PROCESSOR_POWER_POLICY {\n\tDWORD Revision;\n\tBYTE DynamicThrottle;\n\tBYTE Spare[3];\n\tDWORD DisableCStates:1;\n\tDWORD Reserved:31;\n\tDWORD PolicyCount;\n\tPROCESSOR_POWER_POLICY_INFO Policy[3];\n} PROCESSOR_POWER_POLICY,\n*PPROCESSOR_POWER_POLICY;\n\ntypedef struct {\n\tBOOLEAN AcOnLine;\n\tBOOLEAN BatteryPresent;\n\tBOOLEAN Charging;\n\tBOOLEAN Discharging;\n\tBOOLEAN Spare1[4];\n\tULONG MaxCapacity;\n\tULONG RemainingCapacity;\n\tULONG Rate;\n\tULONG EstimatedTime;\n\tULONG DefaultAlert1;\n\tULONG DefaultAlert2;\n} SYSTEM_BATTERY_STATE,\n*PSYSTEM_BATTERY_STATE;\n\ntypedef struct {\n\tBOOLEAN PowerButtonPresent;\n\tBOOLEAN SleepButtonPresent;\n\tBOOLEAN LidPresent;\n\tBOOLEAN SystemS1;\n\tBOOLEAN SystemS2;\n\tBOOLEAN SystemS3;\n\tBOOLEAN SystemS4;\n\tBOOLEAN SystemS5;\n\tBOOLEAN HiberFilePresent;\n\tBOOLEAN FullWake;\n\tBOOLEAN VideoDimPresent;\n\tBOOLEAN ApmPresent;\n\tBOOLEAN UpsPresent;\n\tBOOLEAN ThermalControl;\n\tBOOLEAN ProcessorThrottle;\n\tUCHAR ProcessorMinThrottle;\n\tUCHAR ProcessorMaxThrottle;\n\tUCHAR spare2[4];\n\tBOOLEAN DiskSpinDown;\n\tUCHAR spare3[8];\n\tBOOLEAN SystemBatteriesPresent;\n\tBOOLEAN BatteriesAreShortTerm;\n\tBATTERY_REPORTING_SCALE BatteryScale[3];\n\tSYSTEM_POWER_STATE AcOnLineWake;\n\tSYSTEM_POWER_STATE SoftLidWake;\n\tSYSTEM_POWER_STATE RtcWake;\n\tSYSTEM_POWER_STATE MinDeviceWakeState;\n\tSYSTEM_POWER_STATE DefaultLowLatencyWake;\n} SYSTEM_POWER_CAPABILITIES,\n*PSYSTEM_POWER_CAPABILITIES;\n\ntypedef struct _SYSTEM_POWER_INFORMATION {\n\tULONG MaxIdlenessAllowed;\n\tULONG Idleness;\n\tULONG TimeRemaining;\n\tUCHAR CoolingMode;\n} SYSTEM_POWER_INFORMATION,\n*PSYSTEM_POWER_INFORMATION;\n\ntypedef struct _SYSTEM_POWER_LEVEL {\n\tBOOLEAN Enable;\n\tUCHAR Spare[3];\n\tULONG BatteryLevel;\n\tPOWER_ACTION_POLICY PowerPolicy;\n\tSYSTEM_POWER_STATE MinSystemState;\n} SYSTEM_POWER_LEVEL,\n*PSYSTEM_POWER_LEVEL;\n\ntypedef struct _SYSTEM_POWER_POLICY {\n\tULONG Revision;\n\tPOWER_ACTION_POLICY PowerButton;\n\tPOWER_ACTION_POLICY SleepButton;\n\tPOWER_ACTION_POLICY LidClose;\n\tSYSTEM_POWER_STATE LidOpenWake;\n\tULONG Reserved;\n\tPOWER_ACTION_POLICY Idle;\n\tULONG IdleTimeout;\n\tUCHAR IdleSensitivity;\n\tUCHAR DynamicThrottle;\n\tUCHAR Spare2[2];\n\tSYSTEM_POWER_STATE MinSleep;\n\tSYSTEM_POWER_STATE MaxSleep;\n\tSYSTEM_POWER_STATE ReducedLatencySleep;\n\tULONG WinLogonFlags;\n\tULONG Spare3;\n\tULONG DozeS4Timeout;\n\tULONG BroadcastCapacityResolution;\n\tSYSTEM_POWER_LEVEL DischargePolicy[NUM_DISCHARGE_POLICIES];\n\tULONG VideoTimeout;\n\tBOOLEAN VideoDimDisplay;\n\tULONG VideoReserved[3];\n\tULONG SpindownTimeout;\n\tBOOLEAN OptimizeForPower;\n\tUCHAR FanThrottleTolerance;\n\tUCHAR ForcedThrottle;\n\tUCHAR MinThrottle;\n\tPOWER_ACTION_POLICY OverThrottled;\n} SYSTEM_POWER_POLICY,\n*PSYSTEM_POWER_POLICY;\n\ntypedef union _FILE_SEGMENT_ELEMENT {\n\tPVOID64 Buffer;\n\tULONGLONG Alignment;\n} FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;\n\ntypedef struct _FILE_NOTIFY_INFORMATION {\n\tDWORD NextEntryOffset;\n\tDWORD Action;\n\tDWORD FileNameLength;\n\tWCHAR FileName[1];\n} FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION;\n\n/* ----------------------------- begin tape storage --------------------- */\n\n#define TAPE_FIXED_PARTITIONS     0\n#define TAPE_SELECT_PARTITIONS    1\n#define TAPE_INITIATOR_PARTITIONS 2\n#define TAPE_ERASE_SHORT 0\n#define TAPE_ERASE_LONG  1\n#define TAPE_LOAD    0\n#define TAPE_UNLOAD  1\n#define TAPE_TENSION 2\n#define TAPE_LOCK    3\n#define TAPE_UNLOCK  4\n#define TAPE_FORMAT  5\n#define TAPE_SETMARKS  0\n#define TAPE_FILEMARKS 1\n#define TAPE_SHORT_FILEMARKS 2\n#define TAPE_LONG_FILEMARKS  3\n#define TAPE_REWIND                0\n#define TAPE_ABSOLUTE_BLOCK        1\n#define TAPE_LOGICAL_BLOCK         2\n#define TAPE_PSEUDO_LOGICAL_BLOCK  3\n#define TAPE_SPACE_END_OF_DATA     4\n#define TAPE_SPACE_RELATIVE_BLOCKS 5\n#define TAPE_SPACE_FILEMARKS       6\n#define TAPE_SPACE_SEQUENTIAL_FMKS 7\n#define TAPE_SPACE_SETMARKS        8\n#define TAPE_SPACE_SEQUENTIAL_SMKS 9\n\ntypedef struct _TAPE_CREATE_PARTITION {\n    DWORD Method;\n    DWORD Count;\n    DWORD Size;\n} TAPE_CREATE_PARTITION, *PTAPE_CREATE_PARTITION;\n\ntypedef struct _TAPE_ERASE {\n    DWORD Type;\n    BOOLEAN Immediate;\n} TAPE_ERASE, *PTAPE_ERASE;\n\ntypedef struct _TAPE_PREPARE {\n    DWORD Operation;\n    BOOLEAN Immediate;\n} TAPE_PREPARE, *PTAPE_PREPARE;\n\ntypedef struct _TAPE_SET_DRIVE_PARAMETERS {\n    BOOLEAN ECC;\n    BOOLEAN Compression;\n    BOOLEAN DataPadding;\n    BOOLEAN ReportSetmarks;\n    ULONG EOTWarningZoneSize;\n} TAPE_SET_DRIVE_PARAMETERS, *PTAPE_SET_DRIVE_PARAMETERS;\n\ntypedef struct _TAPE_SET_MEDIA_PARAMETERS {\n    ULONG BlockSize;\n} TAPE_SET_MEDIA_PARAMETERS, *PTAPE_SET_MEDIA_PARAMETERS;\n\ntypedef struct _TAPE_WRITE_MARKS {\n    DWORD Type;\n    DWORD Count;\n    BOOLEAN Immediate;\n} TAPE_WRITE_MARKS, *PTAPE_WRITE_MARKS;\n\ntypedef struct _TAPE_GET_POSITION {\n    ULONG Type;\n    ULONG Partition;\n    ULONG OffsetLow;\n    ULONG OffsetHigh;\n} TAPE_GET_POSITION, *PTAPE_GET_POSITION;\n\ntypedef struct _TAPE_SET_POSITION {\n    ULONG Method;\n    ULONG Partition;\n    LARGE_INTEGER Offset;\n    BOOLEAN Immediate;\n} TAPE_SET_POSITION, *PTAPE_SET_POSITION;\n\ntypedef struct _TAPE_GET_DRIVE_PARAMETERS {\n    BOOLEAN ECC;\n    BOOLEAN Compression;\n    BOOLEAN DataPadding;\n    BOOLEAN ReportSetmarks;\n    DWORD DefaultBlockSize;\n    DWORD MaximumBlockSize;\n    DWORD MinimumBlockSize;\n    DWORD MaximumPartitionCount;\n    DWORD FeaturesLow;\n    DWORD FeaturesHigh;\n    DWORD EOTWarningZoneSize;\n} TAPE_GET_DRIVE_PARAMETERS, *PTAPE_GET_DRIVE_PARAMETERS;\n\ntypedef struct _TAPE_GET_MEDIA_PARAMETERS {\n    LARGE_INTEGER Capacity;\n    LARGE_INTEGER Remaining;\n    DWORD BlockSize;\n    DWORD PartitionCount;\n    BOOLEAN WriteProtected;\n} TAPE_GET_MEDIA_PARAMETERS, *PTAPE_GET_MEDIA_PARAMETERS;\n\n/* ----------------------------- begin registry ----------------------------- */\n\n/* Registry security values */\n#define OWNER_SECURITY_INFORMATION      0x00000001\n#define GROUP_SECURITY_INFORMATION      0x00000002\n#define DACL_SECURITY_INFORMATION       0x00000004\n#define SACL_SECURITY_INFORMATION       0x00000008\n#define LABEL_SECURITY_INFORMATION      0x00000010\n\n#define REG_OPTION_RESERVED             0x00000000\n#define REG_OPTION_NON_VOLATILE         0x00000000\n#define REG_OPTION_VOLATILE             0x00000001\n#define REG_OPTION_CREATE_LINK          0x00000002\n#define REG_OPTION_BACKUP_RESTORE       0x00000004 /* FIXME */\n#define REG_OPTION_OPEN_LINK            0x00000008\n#define REG_LEGAL_OPTION               (REG_OPTION_RESERVED | \\\n                                        REG_OPTION_NON_VOLATILE | \\\n                                        REG_OPTION_VOLATILE | \\\n                                        REG_OPTION_CREATE_LINK | \\\n                                        REG_OPTION_BACKUP_RESTORE | \\\n                                        REG_OPTION_OPEN_LINK)\n\n\n#define REG_CREATED_NEW_KEY\t0x00000001\n#define REG_OPENED_EXISTING_KEY\t0x00000002\n\n/* For RegNotifyChangeKeyValue */\n#define REG_NOTIFY_CHANGE_NAME       0x01\n#define REG_NOTIFY_CHANGE_ATTRIBUTES 0x02\n#define REG_NOTIFY_CHANGE_LAST_SET   0x04\n#define REG_NOTIFY_CHANGE_SECURITY   0x08\n#define REG_NOTIFY_THREAD_AGNOSTIC   0x10000000\n\n#define KEY_QUERY_VALUE\t\t0x00000001\n#define KEY_SET_VALUE\t\t0x00000002\n#define KEY_CREATE_SUB_KEY\t0x00000004\n#define KEY_ENUMERATE_SUB_KEYS\t0x00000008\n#define KEY_NOTIFY\t\t0x00000010\n#define KEY_CREATE_LINK\t\t0x00000020\n#define KEY_WOW64_64KEY         0x00000100\n#define KEY_WOW64_32KEY         0x00000200\n#define KEY_WOW64_RES           0x00000300\n\n/* for RegKeyRestore flags */\n#define REG_WHOLE_HIVE_VOLATILE 0x00000001\n#define REG_REFRESH_HIVE        0x00000002\n#define REG_NO_LAZY_FLUSH       0x00000004\n#define REG_FORCE_RESTORE       0x00000008\n\n#define KEY_READ\t      ((STANDARD_RIGHTS_READ|  \\\n\t\t\t\tKEY_QUERY_VALUE|  \\\n\t\t\t\tKEY_ENUMERATE_SUB_KEYS|  \\\n\t\t\t\tKEY_NOTIFY)  \\\n\t\t\t\t& (~SYNCHRONIZE)  \\\n\t\t\t      )\n#define KEY_WRITE\t      ((STANDARD_RIGHTS_WRITE|  \\\n\t\t\t\tKEY_SET_VALUE|  \\\n\t\t\t\tKEY_CREATE_SUB_KEY)  \\\n\t\t\t\t& (~SYNCHRONIZE)  \\\n\t\t\t      )\n#define KEY_EXECUTE           ((KEY_READ) & (~SYNCHRONIZE))\n#define KEY_ALL_ACCESS        ((STANDARD_RIGHTS_ALL|  \\\n\t\t\t\tKEY_QUERY_VALUE|  \\\n\t\t\t\tKEY_SET_VALUE|  \\\n\t\t\t\tKEY_CREATE_SUB_KEY|  \\\n\t\t\t\tKEY_ENUMERATE_SUB_KEYS|  \\\n\t\t\t\tKEY_NOTIFY|  \\\n\t\t\t\tKEY_CREATE_LINK)  \\\n\t\t\t\t& (~SYNCHRONIZE)  \\\n\t\t\t      )\n/* ------------------------------ end registry ------------------------------ */\n\n\n#define EVENTLOG_SUCCESS                0x0000\n#define EVENTLOG_ERROR_TYPE             0x0001\n#define EVENTLOG_WARNING_TYPE           0x0002\n#define EVENTLOG_INFORMATION_TYPE       0x0004\n#define EVENTLOG_AUDIT_SUCCESS          0x0008\n#define EVENTLOG_AUDIT_FAILURE          0x0010\n\n#define EVENTLOG_SEQUENTIAL_READ        0x0001\n#define EVENTLOG_SEEK_READ              0x0002\n#define EVENTLOG_FORWARDS_READ          0x0004\n#define EVENTLOG_BACKWARDS_READ         0x0008\n\ntypedef struct _EVENTLOGRECORD {\n    DWORD  Length;\n    DWORD  Reserved;\n    DWORD  RecordNumber;\n    DWORD  TimeGenerated;\n    DWORD  TimeWritten;\n    DWORD  EventID;\n    WORD   EventType;\n    WORD   NumStrings;\n    WORD   EventCategory;\n    WORD   ReservedFlags;\n    DWORD  ClosingRecordNumber;\n    DWORD  StringOffset;\n    DWORD  UserSidLength;\n    DWORD  UserSidOffset;\n    DWORD  DataLength;\n    DWORD  DataOffset;\n} EVENTLOGRECORD, *PEVENTLOGRECORD;\n\n#define SERVICE_BOOT_START   0x00000000\n#define SERVICE_SYSTEM_START 0x00000001\n#define SERVICE_AUTO_START   0x00000002\n#define SERVICE_DEMAND_START 0x00000003\n#define SERVICE_DISABLED     0x00000004\n\n#define SERVICE_ERROR_IGNORE   0x00000000\n#define SERVICE_ERROR_NORMAL   0x00000001\n#define SERVICE_ERROR_SEVERE   0x00000002\n#define SERVICE_ERROR_CRITICAL 0x00000003\n\n/* Service types */\n#define SERVICE_KERNEL_DRIVER      0x00000001\n#define SERVICE_FILE_SYSTEM_DRIVER 0x00000002\n#define SERVICE_ADAPTER            0x00000004\n#define SERVICE_RECOGNIZER_DRIVER  0x00000008\n\n#define SERVICE_DRIVER ( SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | \\\n                         SERVICE_RECOGNIZER_DRIVER )\n\n#define SERVICE_WIN32_OWN_PROCESS   0x00000010\n#define SERVICE_WIN32_SHARE_PROCESS 0x00000020\n#define SERVICE_WIN32  (SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS)\n\n#define SERVICE_INTERACTIVE_PROCESS 0x00000100\n\n#define SERVICE_TYPE_ALL ( SERVICE_WIN32 | SERVICE_ADAPTER | \\\n                           SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS )\n\n\ntypedef enum _CM_SERVICE_NODE_TYPE\n{\n  DriverType               = SERVICE_KERNEL_DRIVER,\n  FileSystemType           = SERVICE_FILE_SYSTEM_DRIVER,\n  Win32ServiceOwnProcess   = SERVICE_WIN32_OWN_PROCESS,\n  Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS,\n  AdapterType              = SERVICE_ADAPTER,\n  RecognizerType           = SERVICE_RECOGNIZER_DRIVER\n} SERVICE_NODE_TYPE;\n\ntypedef enum _CM_SERVICE_LOAD_TYPE\n{\n  BootLoad    = SERVICE_BOOT_START,\n  SystemLoad  = SERVICE_SYSTEM_START,\n  AutoLoad    = SERVICE_AUTO_START,\n  DemandLoad  = SERVICE_DEMAND_START,\n  DisableLoad = SERVICE_DISABLED\n} SERVICE_LOAD_TYPE;\n\ntypedef enum _CM_ERROR_CONTROL_TYPE\n{\n  IgnoreError   = SERVICE_ERROR_IGNORE,\n  NormalError   = SERVICE_ERROR_NORMAL,\n  SevereError   = SERVICE_ERROR_SEVERE,\n  CriticalError = SERVICE_ERROR_CRITICAL\n} SERVICE_ERROR_TYPE;\n\nNTSYSAPI SIZE_T WINAPI RtlCompareMemory(const VOID*, const VOID*, SIZE_T);\n\n#define RtlEqualMemory(Destination, Source, Length) (!memcmp((Destination),(Source),(Length)))\n#define RtlMoveMemory(Destination, Source, Length) memmove((Destination),(Source),(Length))\n#define RtlCopyMemory(Destination, Source, Length) memcpy((Destination),(Source),(Length))\n#define RtlFillMemory(Destination, Length, Fill) memset((Destination),(Fill),(Length))\n#define RtlZeroMemory(Destination, Length) memset((Destination),0,(Length))\n\nstatic FORCEINLINE void *RtlSecureZeroMemory(void *buffer, SIZE_T length)\n{\n    volatile char *ptr = (volatile char *)buffer;\n\n    while (length--) *ptr++ = 0;\n    return buffer;\n}\n\n#include <guiddef.h>\n\ntypedef struct _OBJECT_TYPE_LIST {\n    WORD   Level;\n    WORD   Sbz;\n    GUID *ObjectType;\n} OBJECT_TYPE_LIST, *POBJECT_TYPE_LIST;\n\ntypedef struct _RTL_CRITICAL_SECTION_DEBUG\n{\n  WORD   Type;\n  WORD   CreatorBackTraceIndex;\n  struct _RTL_CRITICAL_SECTION *CriticalSection;\n  LIST_ENTRY ProcessLocksList;\n  DWORD EntryCount;\n  DWORD ContentionCount;\n#ifdef __WINESRC__  /* in Wine we store the name here */\n  DWORD_PTR Spare[8/sizeof(DWORD_PTR)];\n#else\n  DWORD Spare[ 2 ];\n#endif\n} RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG, RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG;\n\ntypedef struct _RTL_CRITICAL_SECTION {\n    PRTL_CRITICAL_SECTION_DEBUG DebugInfo;\n    LONG LockCount;\n    LONG RecursionCount;\n    HANDLE OwningThread;\n    HANDLE LockSemaphore;\n    ULONG_PTR SpinCount;\n}  RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;\n\n#define RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO 0x1000000\n#define RTL_CRITICAL_SECTION_FLAG_DYNAMIC_SPIN  0x2000000\n#define RTL_CRITICAL_SECTION_FLAG_STATIC_INIT   0x4000000\n#define RTL_CRITICAL_SECTION_ALL_FLAG_BITS      0xFF000000\n#define RTL_CRITICAL_SECTION_FLAG_RESERVED      (RTL_CRITICAL_SECTION_ALL_FLAG_BITS & ~0x7000000)\n\ntypedef struct _RTL_SRWLOCK {\n    PVOID Ptr;\n} RTL_SRWLOCK, *PRTL_SRWLOCK;\n\n#define RTL_SRWLOCK_INIT {0}\n\ntypedef struct _RTL_CONDITION_VARIABLE {\n    PVOID Ptr;\n} RTL_CONDITION_VARIABLE, *PRTL_CONDITION_VARIABLE;\n#define RTL_CONDITION_VARIABLE_INIT {0}\n#define RTL_CONDITION_VARIABLE_LOCKMODE_SHARED  0x1\n\ntypedef VOID (NTAPI * WAITORTIMERCALLBACKFUNC) (PVOID, BOOLEAN );\ntypedef VOID (NTAPI * PFLS_CALLBACK_FUNCTION) ( PVOID );\n\n#define RTL_RUN_ONCE_INIT {0}\ntypedef union _RTL_RUN_ONCE {\n    PVOID Ptr;\n} RTL_RUN_ONCE, *PRTL_RUN_ONCE;\n\n#define RTL_RUN_ONCE_CHECK_ONLY     0x00000001\n#define RTL_RUN_ONCE_ASYNC          0x00000002\n#define RTL_RUN_ONCE_INIT_FAILED    0x00000004\n\ntypedef DWORD WINAPI RTL_RUN_ONCE_INIT_FN(PRTL_RUN_ONCE, PVOID, PVOID*);\ntypedef RTL_RUN_ONCE_INIT_FN *PRTL_RUN_ONCE_INIT_FN;\nNTSYSAPI VOID WINAPI RtlRunOnceInitialize(PRTL_RUN_ONCE);\nNTSYSAPI DWORD WINAPI RtlRunOnceExecuteOnce(PRTL_RUN_ONCE,PRTL_RUN_ONCE_INIT_FN,PVOID,PVOID*);\nNTSYSAPI DWORD WINAPI RtlRunOnceBeginInitialize(PRTL_RUN_ONCE, DWORD, PVOID*);\nNTSYSAPI DWORD WINAPI RtlRunOnceComplete(PRTL_RUN_ONCE, DWORD, PVOID);\n\n#include <pshpack8.h>\ntypedef struct _IO_COUNTERS {\n    ULONGLONG DECLSPEC_ALIGN(8) ReadOperationCount;\n    ULONGLONG DECLSPEC_ALIGN(8) WriteOperationCount;\n    ULONGLONG DECLSPEC_ALIGN(8) OtherOperationCount;\n    ULONGLONG DECLSPEC_ALIGN(8) ReadTransferCount;\n    ULONGLONG DECLSPEC_ALIGN(8) WriteTransferCount;\n    ULONGLONG DECLSPEC_ALIGN(8) OtherTransferCount;\n} IO_COUNTERS, *PIO_COUNTERS;\n#include <poppack.h>\n\ntypedef struct {\n\tDWORD dwOSVersionInfoSize;\n\tDWORD dwMajorVersion;\n\tDWORD dwMinorVersion;\n\tDWORD dwBuildNumber;\n\tDWORD dwPlatformId;\n\tCHAR szCSDVersion[128];\n} OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;\n\ntypedef struct {\n\tDWORD dwOSVersionInfoSize;\n\tDWORD dwMajorVersion;\n\tDWORD dwMinorVersion;\n\tDWORD dwBuildNumber;\n\tDWORD dwPlatformId;\n\tWCHAR szCSDVersion[128];\n} OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;\n\nDECL_WINELIB_TYPE_AW(OSVERSIONINFO)\nDECL_WINELIB_TYPE_AW(POSVERSIONINFO)\nDECL_WINELIB_TYPE_AW(LPOSVERSIONINFO)\n\ntypedef struct {\n\tDWORD dwOSVersionInfoSize;\n\tDWORD dwMajorVersion;\n\tDWORD dwMinorVersion;\n\tDWORD dwBuildNumber;\n\tDWORD dwPlatformId;\n\tCHAR szCSDVersion[128];\n\tWORD wServicePackMajor;\n\tWORD wServicePackMinor;\n\tWORD wSuiteMask;\n\tBYTE wProductType;\n\tBYTE wReserved;\n} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;\n\ntypedef struct {\n\tDWORD dwOSVersionInfoSize;\n\tDWORD dwMajorVersion;\n\tDWORD dwMinorVersion;\n\tDWORD dwBuildNumber;\n\tDWORD dwPlatformId;\n\tWCHAR szCSDVersion[128];\n\tWORD wServicePackMajor;\n\tWORD wServicePackMinor;\n\tWORD wSuiteMask;\n\tBYTE wProductType;\n\tBYTE wReserved;\n} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;\n\nDECL_WINELIB_TYPE_AW(OSVERSIONINFOEX)\nDECL_WINELIB_TYPE_AW(POSVERSIONINFOEX)\nDECL_WINELIB_TYPE_AW(LPOSVERSIONINFOEX)\n\nNTSYSAPI ULONGLONG WINAPI VerSetConditionMask(ULONGLONG,DWORD,BYTE);\n\n#define VER_SET_CONDITION(_m_,_t_,_c_) ((_m_)=VerSetConditionMask((_m_),(_t_),(_c_)))\n\n#define VER_PLATFORM_WIN32s                     0\n#define VER_PLATFORM_WIN32_WINDOWS              1\n#define VER_PLATFORM_WIN32_NT                   2\n\n#define\tVER_MINORVERSION\t\t\t0x00000001\n#define\tVER_MAJORVERSION\t\t\t0x00000002\n#define\tVER_BUILDNUMBER\t\t\t\t0x00000004\n#define\tVER_PLATFORMID\t\t\t\t0x00000008\n#define\tVER_SERVICEPACKMINOR\t\t\t0x00000010\n#define\tVER_SERVICEPACKMAJOR\t\t\t0x00000020\n#define\tVER_SUITENAME\t\t\t\t0x00000040\n#define\tVER_PRODUCT_TYPE\t\t\t0x00000080\n\n#define\tVER_NT_WORKSTATION\t\t\t1\n#define\tVER_NT_DOMAIN_CONTROLLER\t\t2\n#define\tVER_NT_SERVER\t\t\t\t3\n\n#define\tVER_SUITE_SMALLBUSINESS\t\t\t0x00000001\n#define\tVER_SUITE_ENTERPRISE\t\t\t0x00000002\n#define\tVER_SUITE_BACKOFFICE\t\t\t0x00000004\n#define\tVER_SUITE_COMMUNICATIONS\t\t0x00000008\n#define\tVER_SUITE_TERMINAL\t\t\t0x00000010\n#define\tVER_SUITE_SMALLBUSINESS_RESTRICTED\t0x00000020\n#define\tVER_SUITE_EMBEDDEDNT\t\t\t0x00000040\n#define\tVER_SUITE_DATACENTER\t\t\t0x00000080\n#define\tVER_SUITE_SINGLEUSERTS\t\t\t0x00000100\n#define\tVER_SUITE_PERSONAL\t\t\t0x00000200\n#define\tVER_SUITE_BLADE\t\t\t\t0x00000400\n#define\tVER_SUITE_EMBEDDED_RESTRICTED\t\t0x00000800\n#define\tVER_SUITE_SECURITY_APPLIANCE\t\t0x00001000\n#define VER_SUITE_STORAGE_SERVER                0x00002000\n#define VER_SUITE_COMPUTE_SERVER                0x00004000\n#define VER_SUITE_WH_SERVER                     0x00008000\n\n#define\tVER_EQUAL\t\t\t\t1\n#define\tVER_GREATER\t\t\t\t2\n#define\tVER_GREATER_EQUAL\t\t\t3\n#define\tVER_LESS\t\t\t\t4\n#define\tVER_LESS_EQUAL\t\t\t\t5\n#define\tVER_AND\t\t\t\t\t6\n#define\tVER_OR\t\t\t\t\t7\n\ntypedef struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION {\n    DWORD dwFlags;\n    DWORD ulFormatVersion;\n    DWORD ulAssemblyCount;\n    DWORD ulRootManifestPathType;\n    DWORD ulRootManifestPathChars;\n    DWORD ulRootConfigurationPathType;\n    DWORD ulRootConfigurationPathChars;\n    DWORD ulAppDirPathType;\n    DWORD ulAppDirPathChars;\n    PCWSTR lpRootManifestPath;\n    PCWSTR lpRootConfigurationPath;\n    PCWSTR lpAppDirPath;\n} ACTIVATION_CONTEXT_DETAILED_INFORMATION, *PACTIVATION_CONTEXT_DETAILED_INFORMATION;\n\ntypedef struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION {\n    DWORD ulFlags;\n    DWORD ulEncodedAssemblyIdentityLength;\n    DWORD ulManifestPathType;\n    DWORD ulManifestPathLength;\n    LARGE_INTEGER liManifestLastWriteTime;\n    DWORD ulPolicyPathType;\n    DWORD ulPolicyPathLength;\n    LARGE_INTEGER liPolicyLastWriteTime;\n    DWORD ulMetadataSatelliteRosterIndex;\n    DWORD ulManifestVersionMajor;\n    DWORD ulManifestVersionMinor;\n    DWORD ulPolicyVersionMajor;\n    DWORD ulPolicyVersionMinor;\n    DWORD ulAssemblyDirectoryNameLength;\n    PCWSTR lpAssemblyEncodedAssemblyIdentity;\n    PCWSTR lpAssemblyManifestPath;\n    PCWSTR lpAssemblyPolicyPath;\n    PCWSTR lpAssemblyDirectoryName;\n    DWORD  ulFileCount;\n} ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION, *PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;\n\ntypedef struct _ACTIVATION_CONTEXT_QUERY_INDEX {\n    DWORD ulAssemblyIndex;\n    DWORD ulFileIndexInAssembly;\n} ACTIVATION_CONTEXT_QUERY_INDEX, *PACTIVATION_CONTEXT_QUERY_INDEX;\n\ntypedef const struct _ACTIVATION_CONTEXT_QUERY_INDEX *PCACTIVATION_CONTEXT_QUERY_INDEX;\n\ntypedef struct _ASSEMBLY_FILE_DETAILED_INFORMATION {\n    DWORD ulFlags;\n    DWORD ulFilenameLength;\n    DWORD ulPathLength;\n    PCWSTR lpFileName;\n    PCWSTR lpFilePath;\n} ASSEMBLY_FILE_DETAILED_INFORMATION, *PASSEMBLY_FILE_DETAILED_INFORMATION;\n\ntypedef const ASSEMBLY_FILE_DETAILED_INFORMATION *PCASSEMBLY_FILE_DETAILED_INFORMATION;\n\ntypedef enum {\n    ACTCX_COMPATIBILITY_ELEMENT_TYPE_UNKNOWN = 0,\n    ACTCX_COMPATIBILITY_ELEMENT_TYPE_OS\n} ACTCTX_COMPATIBILITY_ELEMENT_TYPE;\n\ntypedef struct _COMPATIBILITY_CONTEXT_ELEMENT {\n    GUID Id;\n    ACTCTX_COMPATIBILITY_ELEMENT_TYPE Type;\n} COMPATIBILITY_CONTEXT_ELEMENT, *PCOMPATIBILITY_CONTEXT_ELEMENT;\n\n#if !defined(__WINESRC__) && (defined(_MSC_EXTENSIONS) || ((defined(__GNUC__) && __GNUC__ >= 3)))\ntypedef struct _ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION {\n    DWORD ElementCount;\n    COMPATIBILITY_CONTEXT_ELEMENT Elements[];\n} ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION, *PACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION;\n#endif\n\ntypedef enum {\n    ACTCTX_RUN_LEVEL_UNSPECIFIED = 0,\n    ACTCTX_RUN_LEVEL_AS_INVOKER,\n    ACTCTX_RUN_LEVEL_HIGHEST_AVAILABLE,\n    ACTCTX_RUN_LEVEL_REQUIRE_ADMIN,\n    ACTCTX_RUN_LEVEL_NUMBERS\n} ACTCTX_REQUESTED_RUN_LEVEL;\n\ntypedef struct _ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION {\n    DWORD ulFlags;\n    ACTCTX_REQUESTED_RUN_LEVEL RunLevel;\n    DWORD UiAccess;\n} ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION, *PACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION;\n\ntypedef const struct _ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION *PCACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION;\n\ntypedef enum _ACTIVATION_CONTEXT_INFO_CLASS {\n    ActivationContextBasicInformation                       = 1,\n    ActivationContextDetailedInformation                    = 2,\n    AssemblyDetailedInformationInActivationContext          = 3,\n    FileInformationInAssemblyOfAssemblyInActivationContext  = 4,\n    RunlevelInformationInActivationContext                  = 5,\n    CompatibilityInformationInActivationContext             = 6,\n    ActivationContextManifestResourceName                   = 7,\n    MaxActivationContextInfoClass,\n    AssemblyDetailedInformationInActivationContxt           = AssemblyDetailedInformationInActivationContext,\n    FileInformationInAssemblyOfAssemblyInActivationContxt   = FileInformationInAssemblyOfAssemblyInActivationContext\n} ACTIVATION_CONTEXT_INFO_CLASS;\n\n#define ACTIVATION_CONTEXT_PATH_TYPE_NONE         1\n#define ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE   2\n#define ACTIVATION_CONTEXT_PATH_TYPE_URL          3\n#define ACTIVATION_CONTEXT_PATH_TYPE_ASSEMBLYREF  4\n\n#define ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION          1\n#define ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION               2\n#define ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION      3\n#define ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION        4\n#define ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION     5\n#define ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION  6\n#define ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION        7\n#define ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE    8\n#define ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES                9\n#define ACTIVATION_CONTEXT_SECTION_APPLICATION_SETTINGS          10\n#define ACTIVATION_CONTEXT_SECTION_COMPATIBILITY_INFO            11\n\ntypedef enum _JOBOBJECTINFOCLASS\n{\n    JobObjectBasicAccountingInformation = 1,\n    JobObjectBasicLimitInformation,\n    JobObjectBasicProcessIdList,\n    JobObjectBasicUIRestrictions,\n    JobObjectSecurityLimitInformation,\n    JobObjectEndOfJobTimeInformation,\n    JobObjectAssociateCompletionPortInformation,\n    JobObjectBasicAndIoAccountingInformation,\n    JobObjectExtendedLimitInformation,\n    JobObjectJobSetInformation,\n    MaxJobObjectInfoClass\n} JOBOBJECTINFOCLASS;\n\ntypedef struct _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION {\n    LARGE_INTEGER TotalUserTime;\n    LARGE_INTEGER TotalKernelTime;\n    LARGE_INTEGER ThisPeriodTotalUserTime;\n    LARGE_INTEGER ThisPeriodTotalKernelTime;\n    DWORD         TotalPageFaultCount;\n    DWORD         TotalProcesses;\n    DWORD         ActiveProcesses;\n    DWORD         TotalTerminatedProcesses;\n} JOBOBJECT_BASIC_ACCOUNTING_INFORMATION, *PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION;\n\ntypedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION {\n    LARGE_INTEGER PerProcessUserTimeLimit;\n    LARGE_INTEGER PerJobUserTimeLimit;\n    DWORD         LimitFlags;\n    SIZE_T        MinimumWorkingSetSize;\n    SIZE_T        MaximumWorkingSetSize;\n    DWORD         ActiveProcessLimit;\n    ULONG_PTR     Affinity;\n    DWORD         PriorityClass;\n    DWORD         SchedulingClass;\n} JOBOBJECT_BASIC_LIMIT_INFORMATION, *PJOBOBJECT_BASIC_LIMIT_INFORMATION;\n\ntypedef struct _JOBOBJECT_BASIC_PROCESS_ID_LIST {\n    DWORD     NumberOfAssignedProcesses;\n    DWORD     NumberOfProcessIdsInList;\n    ULONG_PTR ProcessIdList[1];\n} JOBOBJECT_BASIC_PROCESS_ID_LIST, *PJOBOBJECT_BASIC_PROCESS_ID_LIST;\n\ntypedef struct _JOBOBJECT_BASIC_UI_RESTRICTIONS {\n    DWORD UIRestrictionsClass;\n} JOBOBJECT_BASIC_UI_RESTRICTIONS, *PJOBOBJECT_BASIC_UI_RESTRICTIONS;\n\ntypedef struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION {\n    DWORD             SecurityLimitFlags;\n    HANDLE            JobToken;\n    PTOKEN_GROUPS     SidsToDisable;\n    PTOKEN_PRIVILEGES PrivilegesToDelete;\n    PTOKEN_GROUPS     RestrictedSids;\n} JOBOBJECT_SECURITY_LIMIT_INFORMATION, *PJOBOBJECT_SECURITY_LIMIT_INFORMATION;\n\ntypedef struct _JOBOBJECT_END_OF_JOB_TIME_INFORMATION {\n    DWORD EndOfJobTimeAction;\n} JOBOBJECT_END_OF_JOB_TIME_INFORMATION, PJOBOBJECT_END_OF_JOB_TIME_INFORMATION;\n\ntypedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT {\n    PVOID  CompletionKey;\n    HANDLE CompletionPort;\n} JOBOBJECT_ASSOCIATE_COMPLETION_PORT, *PJOBOBJECT_ASSOCIATE_COMPLETION_PORT;\n\n#define JOB_OBJECT_MSG_END_OF_JOB_TIME              1\n#define JOB_OBJECT_MSG_END_OF_PROCESS_TIME          2\n#define JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT         3\n#define JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO          4\n#define JOB_OBJECT_MSG_NEW_PROCESS                  6\n#define JOB_OBJECT_MSG_EXIT_PROCESS                 7\n#define JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS        8\n#define JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT         9\n#define JOB_OBJECT_MSG_JOB_MEMORY_LIMIT             10\n\ntypedef struct JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION {\n    JOBOBJECT_BASIC_ACCOUNTING_INFORMATION BasicInfo;\n    IO_COUNTERS                            IoInfo;\n} JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION, *PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION;\n\ntypedef struct _JOBOBJECT_EXTENDED_LIMIT_INFORMATION {\n    JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation;\n    IO_COUNTERS                       IoInfo;\n    SIZE_T                            ProcessMemoryLimit;\n    SIZE_T                            JobMemoryLimit;\n    SIZE_T                            PeakProcessMemoryUsed;\n    SIZE_T                            PeakJobMemoryUsed;\n} JOBOBJECT_EXTENDED_LIMIT_INFORMATION, *PJOBOBJECT_EXTENDED_LIMIT_INFORMATION;\n\n#define JOB_OBJECT_LIMIT_WORKINGSET                 0x00000001\n#define JOB_OBJECT_LIMIT_PROCESS_TIME               0x00000002\n#define JOB_OBJECT_LIMIT_JOB_TIME                   0x00000004\n#define JOB_OBJECT_LIMIT_ACTIVE_PROCESS             0x00000008\n#define JOB_OBJECT_LIMIT_AFFINITY                   0x00000010\n#define JOB_OBJECT_LIMIT_PRIORITY_CLASS             0x00000020\n#define JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME          0x00000040\n#define JOB_OBJECT_LIMIT_SCHEDULING_CLASS           0x00000080\n#define JOB_OBJECT_LIMIT_PROCESS_MEMORY             0x00000100\n#define JOB_OBJECT_LIMIT_JOB_MEMORY                 0x00000200\n#define JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION 0x00000400\n#define JOB_OBJECT_LIMIT_BREAKAWAY_OK               0x00000800\n#define JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK        0x00001000\n#define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE          0x00002000\n#define JOB_OBJECT_LIMIT_SUBSET_AFFINITY            0x00004000\n\n#define JOB_OBJECT_LIMIT_VALID_FLAGS                0x0007ffff\n#define JOB_OBJECT_BASIC_LIMIT_VALID_FLAGS          0x000000ff\n#define JOB_OBJECT_EXTENDED_LIMIT_VALID_FLAGS       0x00007fff\n\ntypedef enum _LOGICAL_PROCESSOR_RELATIONSHIP\n{\n    RelationProcessorCore    = 0,\n    RelationNumaNode         = 1,\n    RelationCache            = 2,\n    RelationProcessorPackage = 3,\n    RelationGroup            = 4,\n    RelationAll              = 0xffff\n} LOGICAL_PROCESSOR_RELATIONSHIP;\n\n#define LTP_PC_SMT 0x1\n\ntypedef enum _PROCESSOR_CACHE_TYPE\n{\n    CacheUnified,\n    CacheInstruction,\n    CacheData,\n    CacheTrace\n} PROCESSOR_CACHE_TYPE;\n\ntypedef struct _PROCESSOR_GROUP_INFO\n{\n    BYTE MaximumProcessorCount;\n    BYTE ActiveProcessorCount;\n    BYTE Reserved[38];\n    KAFFINITY ActiveProcessorMask;\n} PROCESSOR_GROUP_INFO, *PPROCESSOR_GROUP_INFO;\n\ntypedef struct _CACHE_DESCRIPTOR\n{\n    BYTE Level;\n    BYTE Associativity;\n    WORD LineSize;\n    DWORD Size;\n    PROCESSOR_CACHE_TYPE Type;\n} CACHE_DESCRIPTOR, *PCACHE_DESCRIPTOR;\n\ntypedef struct _GROUP_AFFINITY\n{\n    KAFFINITY Mask;\n    WORD Group;\n    WORD Reserved[3];\n} GROUP_AFFINITY, *PGROUP_AFFINITY;\n\ntypedef struct _PROCESSOR_NUMBER\n{\n    WORD Group;\n    BYTE Number;\n    BYTE Reserved;\n} PROCESSOR_NUMBER, *PPROCESSOR_NUMBER;\n\ntypedef struct _PROCESSOR_RELATIONSHIP\n{\n    BYTE Flags;\n    BYTE EfficiencyClass;\n    BYTE Reserved[20];\n    WORD GroupCount;\n    GROUP_AFFINITY GroupMask[ANYSIZE_ARRAY];\n} PROCESSOR_RELATIONSHIP, *PPROCESSOR_RELATIONSHIP;\n\ntypedef struct _NUMA_NODE_RELATIONSHIP\n{\n    DWORD NodeNumber;\n    BYTE Reserved[20];\n    GROUP_AFFINITY GroupMask;\n} NUMA_NODE_RELATIONSHIP, *PNUMA_NODE_RELATIONSHIP;\n\ntypedef struct _CACHE_RELATIONSHIP\n{\n    BYTE Level;\n    BYTE Associativity;\n    WORD LineSize;\n    DWORD CacheSize;\n    PROCESSOR_CACHE_TYPE Type;\n    BYTE Reserved[20];\n    GROUP_AFFINITY GroupMask;\n} CACHE_RELATIONSHIP, *PCACHE_RELATIONSHIP;\n\ntypedef struct _GROUP_RELATIONSHIP\n{\n    WORD MaximumGroupCount;\n    WORD ActiveGroupCount;\n    BYTE Reserved[20];\n    PROCESSOR_GROUP_INFO GroupInfo[ANYSIZE_ARRAY];\n} GROUP_RELATIONSHIP, *PGROUP_RELATIONSHIP;\n\ntypedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION\n{\n    ULONG_PTR ProcessorMask;\n    LOGICAL_PROCESSOR_RELATIONSHIP Relationship;\n    union\n    {\n        struct\n        {\n            BYTE Flags;\n        } ProcessorCore;\n        struct\n        {\n            DWORD NodeNumber;\n        } NumaNode;\n        CACHE_DESCRIPTOR Cache;\n        ULONGLONG Reserved[2];\n    } DUMMYUNIONNAME;\n} SYSTEM_LOGICAL_PROCESSOR_INFORMATION, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION;\n\ntypedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX\n{\n    LOGICAL_PROCESSOR_RELATIONSHIP Relationship;\n    DWORD Size;\n    union\n    {\n        PROCESSOR_RELATIONSHIP Processor;\n        NUMA_NODE_RELATIONSHIP NumaNode;\n        CACHE_RELATIONSHIP Cache;\n        GROUP_RELATIONSHIP Group;\n    } DUMMYUNIONNAME;\n} SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX;\n\n/* Threadpool things */\ntypedef DWORD TP_VERSION,*PTP_VERSION;\n\ntypedef struct _TP_CALLBACK_INSTANCE TP_CALLBACK_INSTANCE,*PTP_CALLBACK_INSTANCE;\n\ntypedef VOID (CALLBACK *PTP_SIMPLE_CALLBACK)(PTP_CALLBACK_INSTANCE,PVOID);\n\ntypedef struct _TP_POOL TP_POOL,*PTP_POOL;\n\ntypedef enum _TP_CALLBACK_PRIORITY\n{\n\tTP_CALLBACK_PRIORITY_HIGH,\n\tTP_CALLBACK_PRIORITY_NORMAL,\n\tTP_CALLBACK_PRIORITY_LOW,\n\tTP_CALLBACK_PRIORITY_INVALID,\n\tTP_CALLBACK_PRIORITY_COUNT = TP_CALLBACK_PRIORITY_INVALID\n} TP_CALLBACK_PRIORITY;\n\ntypedef struct _TP_POOL_STACK_INFORMATION\n{\n\tSIZE_T StackReserve;\n\tSIZE_T StackCommit;\n} TP_POOL_STACK_INFORMATION,*PTP_POOL_STACK_INFORMATION;\n\ntypedef struct _TP_CLEANUP_GROUP TP_CLEANUP_GROUP,*PTP_CLEANUP_GROUP;\n\ntypedef VOID (CALLBACK *PTP_CLEANUP_GROUP_CANCEL_CALLBACK)(PVOID,PVOID);\n\ntypedef struct _TP_CALLBACK_ENVIRON_V1\n{\n\tTP_VERSION Version;\n\tPTP_POOL Pool;\n\tPTP_CLEANUP_GROUP CleanupGroup;\n\tPTP_CLEANUP_GROUP_CANCEL_CALLBACK CleanupGroupCancelCallback;\n\tPVOID RaceDll;\n\tstruct _ACTIVATION_CONTEXT* ActivationContext;\n\tPTP_SIMPLE_CALLBACK FinalizationCallback;\n\tunion\n\t{\n\t\tDWORD Flags;\n\t\tstruct\n\t\t{\n\t\t\tDWORD LongFunction:1;\n\t\t\tDWORD Persistent:1;\n\t\t\tDWORD Private:30;\n\t\t} s;\n\t} u;\n} TP_CALLBACK_ENVIRON_V1;\n\ntypedef struct _TP_CALLBACK_ENVIRON_V3\n{\n    TP_VERSION Version;\n    PTP_POOL Pool;\n    PTP_CLEANUP_GROUP CleanupGroup;\n    PTP_CLEANUP_GROUP_CANCEL_CALLBACK CleanupGroupCancelCallback;\n    PVOID RaceDll;\n    struct _ACTIVATION_CONTEXT *ActivationContext;\n    PTP_SIMPLE_CALLBACK FinalizationCallback;\n    union\n    {\n        DWORD Flags;\n        struct\n        {\n            DWORD LongFunction:1;\n            DWORD Persistent:1;\n            DWORD Private:30;\n        } s;\n    } u;\n    TP_CALLBACK_PRIORITY CallbackPriority;\n    DWORD Size;\n} TP_CALLBACK_ENVIRON_V3;\n\ntypedef struct _TP_WORK TP_WORK, *PTP_WORK;\ntypedef struct _TP_TIMER TP_TIMER, *PTP_TIMER;\n\ntypedef DWORD TP_WAIT_RESULT;\ntypedef struct _TP_WAIT TP_WAIT, *PTP_WAIT;\n\ntypedef struct _TP_IO TP_IO, *PTP_IO;\n\ntypedef TP_CALLBACK_ENVIRON_V1 TP_CALLBACK_ENVIRON, *PTP_CALLBACK_ENVIRON;\n\ntypedef VOID (CALLBACK *PTP_WORK_CALLBACK)(PTP_CALLBACK_INSTANCE,PVOID,PTP_WORK);\ntypedef VOID (CALLBACK *PTP_TIMER_CALLBACK)(PTP_CALLBACK_INSTANCE,PVOID,PTP_TIMER);\ntypedef VOID (CALLBACK *PTP_WAIT_CALLBACK)(PTP_CALLBACK_INSTANCE,PVOID,PTP_WAIT,TP_WAIT_RESULT);\ntypedef VOID (CALLBACK *PTP_WIN32_IO_CALLBACK)(PTP_CALLBACK_INSTANCE,PVOID,PVOID,ULONG,ULONG_PTR,PTP_IO);\n\n\nNTSYSAPI BOOLEAN NTAPI RtlGetProductInfo(DWORD,DWORD,DWORD,DWORD,PDWORD);\n\ntypedef enum _RTL_UMS_THREAD_INFO_CLASS\n{\n    UmsThreadInvalidInfoClass,\n    UmsThreadUserContext,\n    UmsThreadPriority,\n    UmsThreadAffinity,\n    UmsThreadTeb,\n    UmsThreadIsSuspended,\n    UmsThreadIsTerminated,\n    UmsThreadMaxInfoClass\n} RTL_UMS_THREAD_INFO_CLASS, *PRTL_UMS_THREAD_INFO_CLASS;\n\ntypedef enum _RTL_UMS_SCHEDULER_REASON\n{\n    UmsSchedulerStartup,\n    UmsSchedulerThreadBlocked,\n    UmsSchedulerThreadYield,\n} RTL_UMS_SCHEDULER_REASON, *PRTL_UMS_SCHEDULER_REASON;\n\ntypedef void (CALLBACK *PRTL_UMS_SCHEDULER_ENTRY_POINT)(RTL_UMS_SCHEDULER_REASON,ULONG_PTR,PVOID);\n\ntypedef enum _PROCESS_MITIGATION_POLICY\n{\n    ProcessDEPPolicy,\n    ProcessASLRPolicy,\n    ProcessDynamicCodePolicy,\n    ProcessStrictHandleCheckPolicy,\n    ProcessSystemCallDisablePolicy,\n    ProcessMitigationOptionsMask,\n    ProcessExtensionPointDisablePolicy,\n    ProcessControlFlowGuardPolicy,\n    ProcessSignaturePolicy,\n    ProcessFontDisablePolicy,\n    ProcessImageLoadPolicy,\n    ProcessSystemCallFilterPolicy,\n    ProcessPayloadRestrictionPolicy,\n    ProcessChildProcessPolicy,\n    ProcessSideChannelIsolationPolicy,\n    MaxProcessMitigationPolicy\n} PROCESS_MITIGATION_POLICY, *PPROCESS_MITIGATION_POLICY;\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* _WINNT_ */\n"
  },
  {
    "path": "wine/windows/winnt.rh",
    "content": "/*\n * Win32 definitions for Windows NT\n *\n * Copyright 1996 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n\n/* These are only defined for Winelib, i.e. _not_ defined for\n * the emulator. The reason is they depend on the UNICODE\n * macro which only exists in the user's code.\n */\n#ifndef WINE_NO_UNICODE_MACROS\n# ifdef UNICODE\n#  define __TEXT(string) L##string\n# else\n#  define __TEXT(string) string\n# endif\n# define TEXT(string) __TEXT(string)\n#endif\n\n\n/* Language definitions */\n#define LANG_NEUTRAL        0x00\n#define LANG_INVARIANT      0x7f\n\n#define LANG_AFRIKAANS      0x36\n#define LANG_ALBANIAN       0x1c\n#define LANG_ALSATIAN       0x84\n#define LANG_AMHARIC        0x5e\n#define LANG_ARABIC         0x01\n#define LANG_ARMENIAN       0x2b\n#define LANG_ASSAMESE       0x4d\n#define LANG_AZERI          0x2c\n#define LANG_BANGLA         0x45\n#define LANG_BASHKIR        0x6d\n#define LANG_BASQUE         0x2d\n#define LANG_BELARUSIAN     0x23\n#define LANG_BENGALI        0x45\n#define LANG_BOSNIAN        0x1a\n#define LANG_BOSNIAN_NEUTRAL      0x781a\n#define LANG_BRETON         0x7e\n#define LANG_BULGARIAN      0x02\n#define LANG_CATALAN        0x03\n#define LANG_CHINESE        0x04\n#define LANG_CHINESE_SIMPLIFIED   0x0004\n#define LANG_CHINESE_TRADITIONAL  0x7c04\n#define LANG_CORSICAN       0x83\n#define LANG_CROATIAN       0x1a\n#define LANG_CZECH          0x05\n#define LANG_DANISH         0x06\n#define LANG_DARI           0x8c\n#define LANG_DIVEHI         0x65\n#define LANG_DUTCH          0x13\n#define LANG_ENGLISH        0x09\n#define LANG_ESTONIAN       0x25\n#define LANG_FAEROESE       0x38\n#define LANG_FARSI          LANG_PERSIAN\n#define LANG_FILIPINO       0x64\n#define LANG_FINNISH        0x0b\n#define LANG_FRENCH         0x0c\n#define LANG_FRISIAN        0x62\n#define LANG_GALICIAN       0x56\n#define LANG_GEORGIAN       0x37\n#define LANG_GERMAN         0x07\n#define LANG_GREEK          0x08\n#define LANG_GREENLANDIC    0x6f\n#define LANG_GUJARATI       0x47\n#define LANG_HAUSA          0x68\n#define LANG_HEBREW         0x0d\n#define LANG_HINDI          0x39\n#define LANG_HUNGARIAN      0x0e\n#define LANG_ICELANDIC      0x0f\n#define LANG_IGBO           0x70\n#define LANG_INDONESIAN     0x21\n#define LANG_INUKTITUT      0x5d\n#define LANG_IRISH          0x3c\n#define LANG_ITALIAN        0x10\n#define LANG_JAPANESE       0x11\n#define LANG_KANNADA        0x4b\n#define LANG_KASHMIRI       0x60\n#define LANG_KAZAK          0x3f\n#define LANG_KHMER          0x53\n#define LANG_KICHE          0x86\n#define LANG_KINYARWANDA    0x87\n#define LANG_KONKANI        0x57\n#define LANG_KOREAN         0x12\n#define LANG_KYRGYZ         0x40\n#define LANG_LAO            0x54\n#define LANG_LATVIAN        0x26\n#define LANG_LITHUANIAN     0x27\n#define LANG_LOWER_SORBIAN  0x2e\n#define LANG_LUXEMBOURGISH  0x6e\n#define LANG_MACEDONIAN     0x2f\n#define LANG_MALAY          0x3e\n#define LANG_MALAYALAM      0x4c\n#define LANG_MALTESE        0x3a\n#define LANG_MANIPURI       0x58\n#define LANG_MAORI          0x81\n#define LANG_MAPUDUNGUN     0x7a\n#define LANG_MARATHI        0x4e\n#define LANG_MOHAWK         0x7c\n#define LANG_MONGOLIAN      0x50\n#define LANG_NEPALI         0x61\n#define LANG_NORWEGIAN      0x14\n#define LANG_OCCITAN        0x82\n#define LANG_ORIYA          0x48\n#define LANG_PASHTO         0x63\n#define LANG_PERSIAN        0x29\n#define LANG_POLISH         0x15\n#define LANG_PORTUGUESE     0x16\n#define LANG_PUNJABI        0x46\n#define LANG_QUECHUA        0x6b\n#define LANG_ROMANIAN       0x18\n#define LANG_ROMANSH        0x17\n#define LANG_RUSSIAN        0x19\n#define LANG_SAMI           0x3b\n#define LANG_SANSKRIT       0x4f\n#define LANG_SCOTTISH_GAELIC 0x91\n#define LANG_SERBIAN        0x1a\n#define LANG_SERBIAN_NEUTRAL      0x7c1a\n#define LANG_SINDHI         0x59\n#define LANG_SINHALESE      0x5b\n#define LANG_SLOVAK         0x1b\n#define LANG_SLOVENIAN      0x24\n#define LANG_SOTHO          0x6c\n#define LANG_SPANISH        0x0a\n#define LANG_SWAHILI        0x41\n#define LANG_SWEDISH        0x1d\n#define LANG_SYRIAC         0x5a\n#define LANG_TAJIK          0x28\n#define LANG_TAMAZIGHT      0x5f\n#define LANG_TAMIL          0x49\n#define LANG_TATAR          0x44\n#define LANG_TELUGU         0x4a\n#define LANG_THAI           0x1e\n#define LANG_TIBETAN        0x51\n#define LANG_TIGRIGNA       0x73\n#define LANG_TSWANA         0x32\n#define LANG_TURKISH        0x1f\n#define LANG_TURKMEN        0x42\n#define LANG_UIGHUR         0x80\n#define LANG_UKRAINIAN      0x22\n#define LANG_UPPER_SORBIAN  0x2e\n#define LANG_URDU           0x20\n#define LANG_UZBEK          0x43\n#define LANG_VIETNAMESE     0x2a\n#define LANG_WELSH          0x52\n#define LANG_WOLOF          0x88\n#define LANG_XHOSA          0x34\n#define LANG_YAKUT          0x85\n#define LANG_YI             0x78\n#define LANG_YORUBA         0x6a\n#define LANG_ZULU           0x35\n\n/* These are documented by the MSDN but are missing from the Windows header */\n#define LANG_MALAGASY       0x8d\n\n/* FIXME: these are not defined anywhere */\n#define LANG_SUTU           0x30\n#define LANG_TSONGA         0x31\n#define LANG_VENDA          0x33\n\n/* non standard; keep the number high enough (but < 0xff) */\n#define LANG_ESPERANTO\t\t\t 0x8f\n#define LANG_WALON\t\t\t 0x90\n#define LANG_CORNISH                     0x92\n#define LANG_MANX_GAELIC                 0x94\n\n/* Sublanguage definitions */\n#define SUBLANG_NEUTRAL                  0x00    /* language neutral */\n#define SUBLANG_DEFAULT                  0x01    /* user default */\n#define SUBLANG_SYS_DEFAULT              0x02    /* system default */\n#define SUBLANG_CUSTOM_DEFAULT           0x03\n#define SUBLANG_CUSTOM_UNSPECIFIED       0x04\n#define SUBLANG_UI_CUSTOM_DEFAULT        0x05\n\n#define SUBLANG_AFRIKAANS_SOUTH_AFRICA     0x01\n#define SUBLANG_ALBANIAN_ALBANIA           0x01\n#define SUBLANG_ALSATIAN_FRANCE            0x01\n#define SUBLANG_AMHARIC_ETHIOPIA           0x01\n#define SUBLANG_ARABIC_SAUDI_ARABIA        0x01\n#define SUBLANG_ARABIC_IRAQ                0x02\n#define SUBLANG_ARABIC_EGYPT               0x03\n#define SUBLANG_ARABIC_LIBYA               0x04\n#define SUBLANG_ARABIC_ALGERIA             0x05\n#define SUBLANG_ARABIC_MOROCCO             0x06\n#define SUBLANG_ARABIC_TUNISIA             0x07\n#define SUBLANG_ARABIC_OMAN                0x08\n#define SUBLANG_ARABIC_YEMEN               0x09\n#define SUBLANG_ARABIC_SYRIA               0x0a\n#define SUBLANG_ARABIC_JORDAN              0x0b\n#define SUBLANG_ARABIC_LEBANON             0x0c\n#define SUBLANG_ARABIC_KUWAIT              0x0d\n#define SUBLANG_ARABIC_UAE                 0x0e\n#define SUBLANG_ARABIC_BAHRAIN             0x0f\n#define SUBLANG_ARABIC_QATAR               0x10\n#define SUBLANG_ARMENIAN_ARMENIA           0x01\n#define SUBLANG_ASSAMESE_INDIA             0x01\n#define SUBLANG_AZERI_LATIN                0x01\n#define SUBLANG_AZERI_CYRILLIC             0x02\n#define SUBLANG_BANGLA_BANGLADESH          0x02\n#define SUBLANG_BANGLA_INDIA               0x01\n#define SUBLANG_BASHKIR_RUSSIA             0x01\n#define SUBLANG_BASQUE_BASQUE              0x01\n#define SUBLANG_BELARUSIAN_BELARUS         0x01\n#define SUBLANG_BENGALI_INDIA              0x01\n#define SUBLANG_BENGALI_BANGLADESH         0x02\n#define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN 0x05\n#define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x08\n#define SUBLANG_BRETON_FRANCE              0x01\n#define SUBLANG_BULGARIAN_BULGARIA         0x01\n#define SUBLANG_CATALAN_CATALAN            0x01\n#define SUBLANG_CHINESE_TRADITIONAL        0x01\n#define SUBLANG_CHINESE_SIMPLIFIED         0x02\n#define SUBLANG_CHINESE_HONGKONG           0x03\n#define SUBLANG_CHINESE_SINGAPORE          0x04\n#define SUBLANG_CHINESE_MACAU              0x05\n#define SUBLANG_CORSICAN_FRANCE            0x01\n#define SUBLANG_CROATIAN_CROATIA           0x01\n#define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN 0x04\n#define SUBLANG_CZECH_CZECH_REPUBLIC       0x01\n#define SUBLANG_DANISH_DENMARK             0x01\n#define SUBLANG_DARI_AFGHANISTAN           0x01\n#define SUBLANG_DIVEHI_MALDIVES            0x01\n#define SUBLANG_DUTCH                      0x01\n#define SUBLANG_DUTCH_BELGIAN              0x02\n#define SUBLANG_ENGLISH_US                 0x01\n#define SUBLANG_ENGLISH_UK                 0x02\n#define SUBLANG_ENGLISH_AUS                0x03\n#define SUBLANG_ENGLISH_CAN                0x04\n#define SUBLANG_ENGLISH_NZ                 0x05\n#define SUBLANG_ENGLISH_EIRE               0x06\n#define SUBLANG_ENGLISH_SOUTH_AFRICA       0x07\n#define SUBLANG_ENGLISH_JAMAICA            0x08\n#define SUBLANG_ENGLISH_CARIBBEAN          0x09\n#define SUBLANG_ENGLISH_BELIZE             0x0a\n#define SUBLANG_ENGLISH_TRINIDAD           0x0b\n#define SUBLANG_ENGLISH_ZIMBABWE           0x0c\n#define SUBLANG_ENGLISH_PHILIPPINES        0x0d\n#define SUBLANG_ENGLISH_INDIA              0x10\n#define SUBLANG_ENGLISH_MALAYSIA           0x11\n#define SUBLANG_ENGLISH_SINGAPORE          0x12\n#define SUBLANG_ESTONIAN_ESTONIA           0x01\n#define SUBLANG_FAEROESE_FAROE_ISLANDS     0x01\n#define SUBLANG_FILIPINO_PHILIPPINES       0x01\n#define SUBLANG_FINNISH_FINLAND            0x01\n#define SUBLANG_FRENCH                     0x01\n#define SUBLANG_FRENCH_BELGIAN             0x02\n#define SUBLANG_FRENCH_CANADIAN            0x03\n#define SUBLANG_FRENCH_SWISS               0x04\n#define SUBLANG_FRENCH_LUXEMBOURG          0x05\n#define SUBLANG_FRENCH_MONACO              0x06\n#define SUBLANG_FRISIAN_NETHERLANDS        0x01\n#define SUBLANG_GALICIAN_GALICIAN          0x01\n#define SUBLANG_GEORGIAN_GEORGIA           0x01\n#define SUBLANG_GERMAN                     0x01\n#define SUBLANG_GERMAN_SWISS               0x02\n#define SUBLANG_GERMAN_AUSTRIAN            0x03\n#define SUBLANG_GERMAN_LUXEMBOURG          0x04\n#define SUBLANG_GERMAN_LIECHTENSTEIN       0x05\n#define SUBLANG_GREEK_GREECE               0x01\n#define SUBLANG_GREENLANDIC_GREENLAND      0x01\n#define SUBLANG_GUJARATI_INDIA             0x01\n#define SUBLANG_HAUSA_NIGERIA_LATIN        0x01\n#define SUBLANG_HEBREW_ISRAEL              0x01\n#define SUBLANG_HINDI_INDIA                0x01\n#define SUBLANG_HUNGARIAN_HUNGARY          0x01\n#define SUBLANG_ICELANDIC_ICELAND          0x01\n#define SUBLANG_IGBO_NIGERIA               0x01\n#define SUBLANG_INDONESIAN_INDONESIA       0x01\n#define SUBLANG_INUKTITUT_CANADA           0x01\n#define SUBLANG_INUKTITUT_CANADA_LATIN     0x02\n#define SUBLANG_IRISH_IRELAND              0x02\n#define SUBLANG_ITALIAN                    0x01\n#define SUBLANG_ITALIAN_SWISS              0x02\n#define SUBLANG_JAPANESE_JAPAN             0x01\n#define SUBLANG_KANNADA_INDIA              0x01\n#define SUBLANG_KASHMIRI_SASIA             0x02\n#define SUBLANG_KASHMIRI_INDIA             0x02\n#define SUBLANG_KAZAK_KAZAKHSTAN           0x01\n#define SUBLANG_KHMER_CAMBODIA             0x01\n#define SUBLANG_KICHE_GUATEMALA            0x01\n#define SUBLANG_KINYARWANDA_RWANDA         0X01\n#define SUBLANG_KONKANI_INDIA              0x01\n#define SUBLANG_KOREAN                     0x01\n#define SUBLANG_KYRGYZ_KYRGYZSTAN          0x01\n#define SUBLANG_LAO_LAO                    0x01\n#define SUBLANG_LATVIAN_LATVIA             0x01\n#define SUBLANG_LITHUANIAN                 0x01\n#define SUBLANG_LOWER_SORBIAN_GERMANY      0x02\n#define SUBLANG_LUXEMBOURGISH_LUXEMBOURG   0x01\n#define SUBLANG_MACEDONIAN_MACEDONIA       0x01\n#define SUBLANG_MALAY_MALAYSIA             0x01\n#define SUBLANG_MALAY_BRUNEI_DARUSSALAM    0x02\n#define SUBLANG_MALAYALAM_INDIA            0x01\n#define SUBLANG_MALTESE_MALTA              0x01\n#define SUBLANG_MAORI_NEW_ZEALAND          0x01\n#define SUBLANG_MAPUDUNGUN_CHILE           0x01\n#define SUBLANG_MARATHI_INDIA              0x01\n#define SUBLANG_MOHAWK_MOHAWK              0x01\n#define SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA 0x01\n#define SUBLANG_MONGOLIAN_PRC              0x02\n#define SUBLANG_NEPALI_INDIA               0x02\n#define SUBLANG_NEPALI_NEPAL               0x01\n#define SUBLANG_NORWEGIAN_BOKMAL           0x01\n#define SUBLANG_NORWEGIAN_NYNORSK          0x02\n#define SUBLANG_OCCITAN_FRANCE             0x01\n#define SUBLANG_ORIYA_INDIA                0x01\n#define SUBLANG_PASHTO_AFGHANISTAN         0x01\n#define SUBLANG_PERSIAN_IRAN               0x01\n#define SUBLANG_POLISH_POLAND              0x01\n#define SUBLANG_PORTUGUESE                 0x02\n#define SUBLANG_PORTUGUESE_BRAZILIAN       0x01\n#define SUBLANG_PUNJABI_INDIA              0x01\n#define SUBLANG_QUECHUA_BOLIVIA            0x01\n#define SUBLANG_QUECHUA_ECUADOR            0x02\n#define SUBLANG_QUECHUA_PERU               0x03\n#define SUBLANG_ROMANIAN_ROMANIA           0x01\n#define SUBLANG_ROMANSH_SWITZERLAND        0x01\n#define SUBLANG_RUSSIAN_RUSSIA             0x01\n#define SUBLANG_SAMI_NORTHERN_NORWAY       0x01\n#define SUBLANG_SAMI_NORTHERN_SWEDEN       0x02\n#define SUBLANG_SAMI_NORTHERN_FINLAND      0x03\n#define SUBLANG_SAMI_LULE_NORWAY           0x04\n#define SUBLANG_SAMI_LULE_SWEDEN           0x05\n#define SUBLANG_SAMI_SOUTHERN_NORWAY       0x06\n#define SUBLANG_SAMI_SOUTHERN_SWEDEN       0x07\n#define SUBLANG_SAMI_SKOLT_FINLAND         0x08\n#define SUBLANG_SAMI_INARI_FINLAND         0x09\n#define SUBLANG_SANSKRIT_INDIA             0x01\n#define SUBLANG_SCOTTISH_GAELIC            0x01\n#define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_LATIN 0x06\n#define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x07\n#define SUBLANG_SERBIAN_CROATIA            0x01\n#define SUBLANG_SERBIAN_LATIN              0x02\n#define SUBLANG_SERBIAN_CYRILLIC           0x03\n#define SUBLANG_SERBIAN_SERBIA_LATIN       0x09\n#define SUBLANG_SERBIAN_SERBIA_CYRILLIC    0x0a\n#define SUBLANG_SERBIAN_MONTENEGRO_LATIN   0x0b\n#define SUBLANG_SERBIAN_MONTENEGRO_CYRILLIC 0x0c\n#define SUBLANG_SINDHI_INDIA               0x01\n#define SUBLANG_SINDHI_AFGHANISTAN         0x02\n#define SUBLANG_SINDHI_PAKISTAN            SUBLANG_SINDHI_AFGHANISTAN\n#define SUBLANG_SINHALESE_SRI_LANKA        0x01\n#define SUBLANG_SLOVAK_SLOVAKIA            0x01\n#define SUBLANG_SLOVENIAN_SLOVENIA         0x01\n#define SUBLANG_SOTHO_NORTHERN_SOUTH_AFRICA 0x01\n#define SUBLANG_SPANISH                    0x01\n#define SUBLANG_SPANISH_MEXICAN            0x02\n#define SUBLANG_SPANISH_MODERN             0x03\n#define SUBLANG_SPANISH_GUATEMALA          0x04\n#define SUBLANG_SPANISH_COSTA_RICA         0x05\n#define SUBLANG_SPANISH_PANAMA             0x06\n#define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07\n#define SUBLANG_SPANISH_VENEZUELA          0x08\n#define SUBLANG_SPANISH_COLOMBIA           0x09\n#define SUBLANG_SPANISH_PERU               0x0a\n#define SUBLANG_SPANISH_ARGENTINA          0x0b\n#define SUBLANG_SPANISH_ECUADOR            0x0c\n#define SUBLANG_SPANISH_CHILE              0x0d\n#define SUBLANG_SPANISH_URUGUAY            0x0e\n#define SUBLANG_SPANISH_PARAGUAY           0x0f\n#define SUBLANG_SPANISH_BOLIVIA            0x10\n#define SUBLANG_SPANISH_EL_SALVADOR        0x11\n#define SUBLANG_SPANISH_HONDURAS           0x12\n#define SUBLANG_SPANISH_NICARAGUA          0x13\n#define SUBLANG_SPANISH_PUERTO_RICO        0x14\n#define SUBLANG_SPANISH_US                 0x15\n#define SUBLANG_SWAHILI_KENYA              0x01\n#define SUBLANG_SWEDISH                    0x01\n#define SUBLANG_SWEDISH_FINLAND            0x02\n#define SUBLANG_SYRIAC_SYRIA               0x01\n#define SUBLANG_TAJIK_TAJIKISTAN           0x01\n#define SUBLANG_TAMAZIGHT_ALGERIA_LATIN    0x02\n#define SUBLANG_TAMIL_INDIA                0x01\n#define SUBLANG_TATAR_RUSSIA               0x01\n#define SUBLANG_TELUGU_INDIA               0x01\n#define SUBLANG_THAI_THAILAND              0x01\n#define SUBLANG_TIBETAN_PRC                0x01\n#define SUBLANG_TIBETAN_BHUTAN             0x02\n#define SUBLANG_TIGRIGNA_ERITREA           0x02\n#define SUBLANG_TSWANA_SOUTH_AFRICA        0x01\n#define SUBLANG_TURKISH_TURKEY             0x01\n#define SUBLANG_TURKMEN_TURKMENISTAN       0x01\n#define SUBLANG_UIGHUR_PRC                 0x01\n#define SUBLANG_UKRAINIAN_UKRAINE          0x01\n#define SUBLANG_UPPER_SORBIAN_GERMANY      0x01\n#define SUBLANG_URDU_PAKISTAN              0x01\n#define SUBLANG_URDU_INDIA                 0x02\n#define SUBLANG_UZBEK_LATIN                0x01\n#define SUBLANG_UZBEK_CYRILLIC             0x02\n#define SUBLANG_VIETNAMESE_VIETNAM         0x01\n#define SUBLANG_WELSH_UNITED_KINGDOM       0x01\n#define SUBLANG_WOLOF_SENEGAL              0x01\n#define SUBLANG_XHOSA_SOUTH_AFRICA         0x01\n#define SUBLANG_YAKUT_RUSSIA               0x01\n#define SUBLANG_YI_PRC                     0x01\n#define SUBLANG_YORUBA_NIGERIA             0x01\n#define SUBLANG_ZULU_SOUTH_AFRICA          0x01\n\n/* These are documented by the MSDN but are missing from the Windows header */\n#define SUBLANG_ENGLISH_IRELAND            SUBLANG_ENGLISH_EIRE\n#define SUBLANG_HAUSA_NIGERIA              SUBLANG_HAUSA_NIGERIA_LATIN\n#define SUBLANG_LAO_LAO_PDR                SUBLANG_LAO_LAO\n#define SUBLANG_PORTUGUESE_PORTUGAL        SUBLANG_PORTUGUESE\n#define SUBLANG_SWAHILI                    SUBLANG_SWAHILI_KENYA\n#define SUBLANG_SWEDISH_SWEDEN             SUBLANG_SWEDISH\n#define SUBLANG_SYRIAC                     SUBLANG_SYRIAC_SYRIA\n\n/* FIXME: these are not defined anywhere */\n#define SUBLANG_DUTCH_SURINAM              0x03\n#define SUBLANG_ROMANIAN_MOLDAVIA          0x02\n#define SUBLANG_RUSSIAN_MOLDAVIA           0x02\n#define SUBLANG_LITHUANIAN_CLASSIC         0x02\n#define SUBLANG_MANX_GAELIC                0x01\n\n\n/*\n * Sort definitions\n */\n\n#define SORT_DEFAULT                     0x0\n#define SORT_INVARIANT_MATH              0x1\n#define SORT_JAPANESE_XJIS               0x0\n#define SORT_JAPANESE_UNICODE            0x1\n#define SORT_JAPANESE_RADICALSTROKE      0x4\n#define SORT_CHINESE_BIG5                0x0\n#define SORT_CHINESE_PRCP                0x0\n#define SORT_CHINESE_UNICODE             0x1\n#define SORT_CHINESE_PRC                 0x2\n#define SORT_CHINESE_BOPOMOFO            0x3\n#define SORT_CHINESE_RADICALSTROKE       0x4\n#define SORT_KOREAN_KSC                  0x0\n#define SORT_KOREAN_UNICODE              0x1\n#define SORT_GERMAN_PHONE_BOOK           0x1\n#define SORT_HUNGARIAN_DEFAULT           0x0\n#define SORT_HUNGARIAN_TECHNICAL         0x1\n#define SORT_GEORGIAN_TRADITIONAL        0x0\n#define SORT_GEORGIAN_MODERN             0x1\n"
  },
  {
    "path": "wine/windows/winperf.h",
    "content": "/*\n * Performance Monitor\n *\n * Copyright 2007 Hans Leidekker\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _WINPERF_\n#define _WINPERF_\n\n#define PERF_SIZE_DWORD         0x00000000\n#define PERF_SIZE_LARGE         0x00000100\n#define PERF_SIZE_ZERO          0x00000200\n#define PERF_SIZE_VARIABLE_LEN  0x00000300\n\n#define PERF_TYPE_NUMBER        0x00000000\n#define PERF_TYPE_COUNTER       0x00000400\n#define PERF_TYPE_TEXT          0x00000800\n#define PERF_TYPE_ZERO          0x00000C00\n\n#define PERF_NUMBER_HEX         0x00000000\n#define PERF_NUMBER_DECIMAL     0x00010000\n#define PERF_NUMBER_DEC_1000    0x00020000\n\n#define PERF_COUNTER_VALUE      0x00000000\n#define PERF_COUNTER_RATE       0x00010000\n#define PERF_COUNTER_FRACTION   0x00020000\n#define PERF_COUNTER_BASE       0x00030000\n#define PERF_COUNTER_ELAPSED    0x00040000\n#define PERF_COUNTER_QUEUELEN   0x00050000\n#define PERF_COUNTER_HISTOGRAM  0x00060000\n#define PERF_COUNTER_PRECISION  0x00070000\n\n#define PERF_TEXT_UNICODE       0x00000000\n#define PERF_TEXT_ASCII         0x00010000\n\n#define PERF_TIMER_TICK         0x00000000\n#define PERF_TIMER_100NS        0x00100000\n#define PERF_OBJECT_TIMER       0x00200000\n\n#define PERF_DELTA_COUNTER      0x00400000\n#define PERF_DELTA_BASE         0x00800000\n#define PERF_INVERSE_COUNTER    0x01000000\n#define PERF_MULTI_COUNTER      0x02000000\n\n#define PERF_DISPLAY_NO_SUFFIX  0x00000000\n#define PERF_DISPLAY_PER_SEC    0x10000000\n#define PERF_DISPLAY_PERCENT    0x20000000\n#define PERF_DISPLAY_SECONDS    0x30000000\n#define PERF_DISPLAY_NOSHOW     0x40000000\n\n#define PERF_DETAIL_NOVICE      100\n#define PERF_DETAIL_ADVANCED    200\n#define PERF_DETAIL_EXPERT      300\n#define PERF_DETAIL_WIZARD      400\n\n#include <pshpack8.h>\n\n/* Performance data structure header\n * returned in answer to HKEY_PERFORMANCE_DATA request\n */\n\n#define PERF_DATA_VERSION 1\n#define PERF_DATA_REVISION 1\n\ntypedef struct _PERF_DATA_BLOCK\n{\n    WCHAR Signature[4];\n    DWORD LittleEndian;\n    DWORD Version;\n    DWORD Revision;\n    DWORD TotalByteLength;\n    DWORD HeaderLength;\n    DWORD NumObjectTypes;\n    DWORD DefaultObject;\n    SYSTEMTIME SystemTime;\n    LARGE_INTEGER PerfTime;\n    LARGE_INTEGER PerfFreq;\n    LARGE_INTEGER PerfTime100nSec;\n    DWORD SystemNameLength;\n    DWORD SystemNameOffset;\n} PERF_DATA_BLOCK, *PPERF_DATA_BLOCK;\n\n#define PERF_NO_INSTANCES -1\n\ntypedef struct _PERF_OBJECT_TYPE\n{\n    DWORD TotalByteLength;\n    DWORD DefinitionLength;\n    DWORD HeaderLength;\n    DWORD ObjectNameTitleIndex;\n#ifdef _WIN64\n    DWORD ObjectNameTitle;\n#else\n    LPWSTR ObjectNameTitle;\n#endif\n    DWORD ObjectHelpTitleIndex;\n#ifdef _WIN64\n    DWORD ObjectHelpTitle;\n#else\n    LPWSTR ObjectHelpTitle;\n#endif\n    DWORD DetailLevel;\n    DWORD NumCounters;\n    LONG DefaultCounter;\n    LONG NumInstances;\n    DWORD CodePage;\n    LARGE_INTEGER PerfTime;\n    LARGE_INTEGER PerfFreq;\n} PERF_OBJECT_TYPE, *PPERF_OBJECT_TYPE;\n\ntypedef struct _PERF_COUNTER_DEFINITION\n{\n    DWORD ByteLength;\n    DWORD CounterNameTitleIndex;\n#ifdef _WIN64\n    DWORD CounterNameTitle;\n#else\n    LPWSTR CounterNameTitle;\n#endif\n    DWORD CounterHelpTitleIndex;\n#ifdef _WIN64\n    DWORD CounterHelpTitle;\n#else\n    LPWSTR CounterHelpTitle;\n#endif\n    LONG DefaultScale;\n    DWORD DetailLevel;\n    DWORD CounterType;\n    DWORD CounterSize;\n    DWORD CounterOffset;\n} PERF_COUNTER_DEFINITION, *PPERF_COUNTER_DEFINITION;\n\n#define PERF_NO_UNIQUE_ID -1\n\ntypedef struct _PERF_INSTANCE_DEFINITION\n{\n    DWORD ByteLength;\n    DWORD ParentObjectTitleIndex;\n    DWORD ParentObjectInstance;\n    LONG UniqueID;\n    DWORD NameOffset;\n    DWORD NameLength;\n} PERF_INSTANCE_DEFINITION, *PPERF_INSTANCE_DEFINITION;\n\ntypedef struct _PERF_COUNTER_BLOCK\n{\n    DWORD ByteLength;\n} PERF_COUNTER_BLOCK, *PPERF_COUNTER_BLOCK;\n\n\n#include <poppack.h>\n\ntypedef DWORD (APIENTRY PM_OPEN_PROC)(LPWSTR);\ntypedef DWORD (APIENTRY PM_COLLECT_PROC)(LPWSTR,LPVOID *,LPDWORD,LPDWORD);\ntypedef DWORD (APIENTRY PM_CLOSE_PROC)(void);\ntypedef DWORD (APIENTRY PM_QUERY_PROC)(LPDWORD,LPVOID *,LPDWORD,LPDWORD);\n\n#endif /* _WINPERF_ */\n"
  },
  {
    "path": "wine/windows/winreg.h",
    "content": "/*\n * Win32 registry defines (see also winnt.h)\n *\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINREG_H\n#define __WINE_WINREG_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n#define HKEY_CLASSES_ROOT       ((HKEY)(LONG_PTR)(LONG)0x80000000)\n#define HKEY_CURRENT_USER       ((HKEY)(LONG_PTR)(LONG)0x80000001)\n#define HKEY_LOCAL_MACHINE      ((HKEY)(LONG_PTR)(LONG)0x80000002)\n#define HKEY_USERS              ((HKEY)(LONG_PTR)(LONG)0x80000003)\n#define HKEY_PERFORMANCE_DATA   ((HKEY)(LONG_PTR)(LONG)0x80000004)\n#define HKEY_CURRENT_CONFIG     ((HKEY)(LONG_PTR)(LONG)0x80000005)\n#define HKEY_DYN_DATA           ((HKEY)(LONG_PTR)(LONG)0x80000006)\n#define HKEY_PERFORMANCE_TEXT   ((HKEY)(LONG_PTR)(LONG)0x80000050)\n#define HKEY_PERFORMANCE_NLSTEXT ((HKEY)(LONG_PTR)(LONG)0x80000060)\n\n/*\n *\tregistry provider structs\n */\ntypedef struct value_entA\n{   LPSTR\tve_valuename;\n    DWORD\tve_valuelen;\n    DWORD_PTR\tve_valueptr;\n    DWORD\tve_type;\n} VALENTA, *PVALENTA;\n\ntypedef struct value_entW {\n    LPWSTR\tve_valuename;\n    DWORD\tve_valuelen;\n    DWORD_PTR\tve_valueptr;\n    DWORD\tve_type;\n} VALENTW, *PVALENTW;\n\ntypedef ACCESS_MASK REGSAM;\ntypedef LONG LSTATUS;\n\n/*\n * InitiateSystemShutdown() reasons\n */\n#include <reason.h>\n\n#define REASON_OTHER            (SHTDN_REASON_MAJOR_OTHER | SHTDN_REASON_MINOR_OTHER)\n#define REASON_UNKNOWN          SHTDN_REASON_UNKNOWN\n#define REASON_LEGACY_API       SHTDN_REASON_LEGACY_API\n#define REASON_PLANNED_FLAG     SHTDN_REASON_FLAG_PLANNED\n\n#define MAX_SHUTDOWN_TIMEOUT    (10*365*24*60*60)\n\n/*\n * RegGetValue() restrictions\n */\n\n#define RRF_RT_REG_NONE         (1 << 0)\n#define RRF_RT_REG_SZ           (1 << 1)\n#define RRF_RT_REG_EXPAND_SZ    (1 << 2)\n#define RRF_RT_REG_BINARY       (1 << 3)\n#define RRF_RT_REG_DWORD        (1 << 4)\n#define RRF_RT_REG_MULTI_SZ     (1 << 5)\n#define RRF_RT_REG_QWORD        (1 << 6)\n#define RRF_RT_DWORD            (RRF_RT_REG_BINARY | RRF_RT_REG_DWORD)\n#define RRF_RT_QWORD            (RRF_RT_REG_BINARY | RRF_RT_REG_QWORD)\n#define RRF_RT_ANY              0xffff\n#define RRF_NOEXPAND            (1 << 28)\n#define RRF_ZEROONFAILURE       (1 << 29)\n\nWINADVAPI BOOL      WINAPI AbortSystemShutdownA(LPSTR);\nWINADVAPI BOOL      WINAPI AbortSystemShutdownW(LPWSTR);\n#define                    AbortSystemShutdown WINELIB_NAME_AW(AbortSystemShutdown)\nWINADVAPI BOOL      WINAPI InitiateSystemShutdownA(LPSTR,LPSTR,DWORD,BOOL,BOOL);\nWINADVAPI BOOL      WINAPI InitiateSystemShutdownW(LPWSTR,LPWSTR,DWORD,BOOL,BOOL);\n#define                    InitiateSystemShutdown WINELIB_NAME_AW(InitiateSystemShutdown)\nWINADVAPI BOOL      WINAPI InitiateSystemShutdownExA(LPSTR,LPSTR,DWORD,BOOL,BOOL,DWORD);\nWINADVAPI BOOL      WINAPI InitiateSystemShutdownExW(LPWSTR,LPWSTR,DWORD,BOOL,BOOL,DWORD);\n#define                    InitiateSystemShutdownEx WINELIB_NAME_AW(InitiateSystemShutdownEx)\nWINADVAPI LSTATUS   WINAPI RegCloseKey(HKEY);\nWINADVAPI LSTATUS   WINAPI RegConnectRegistryA(LPCSTR,HKEY,PHKEY);\nWINADVAPI LSTATUS   WINAPI RegConnectRegistryW(LPCWSTR,HKEY,PHKEY);\n#define                    RegConnectRegistry WINELIB_NAME_AW(RegConnectRegistry)\nWINADVAPI LSTATUS   WINAPI RegCreateKeyA(HKEY,LPCSTR,PHKEY);\nWINADVAPI LSTATUS   WINAPI RegCreateKeyW(HKEY,LPCWSTR,PHKEY);\n#define                    RegCreateKey WINELIB_NAME_AW(RegCreateKey)\nWINADVAPI LSTATUS   WINAPI RegCreateKeyExA(HKEY,LPCSTR,DWORD,LPSTR,DWORD,REGSAM,LPSECURITY_ATTRIBUTES,PHKEY,LPDWORD);\nWINADVAPI LSTATUS   WINAPI RegCreateKeyExW(HKEY,LPCWSTR,DWORD,LPWSTR,DWORD,REGSAM,LPSECURITY_ATTRIBUTES,PHKEY,LPDWORD);\n#define                    RegCreateKeyEx WINELIB_NAME_AW(RegCreateKeyEx)\nWINADVAPI LSTATUS   WINAPI RegDeleteKeyA(HKEY,LPCSTR);\nWINADVAPI LSTATUS   WINAPI RegDeleteKeyW(HKEY,LPCWSTR);\n#define                    RegDeleteKey WINELIB_NAME_AW(RegDeleteKey)\nWINADVAPI LSTATUS   WINAPI RegDeleteKeyExA(HKEY,LPCSTR,REGSAM,DWORD);\nWINADVAPI LSTATUS   WINAPI RegDeleteKeyExW(HKEY,LPCWSTR,REGSAM,DWORD);\n#define                    RegDeleteKeyEx WINELIB_NAME_AW(RegDeleteKeyEx)\nWINADVAPI LSTATUS   WINAPI RegDeleteKeyValueA(HKEY,LPCSTR,LPCSTR);\nWINADVAPI LSTATUS   WINAPI RegDeleteKeyValueW(HKEY,LPCWSTR,LPCWSTR);\n#define                    RegDeleteKeyValue WINELIB_NAME_AW(RegDeleteKeyValue)\nWINADVAPI LSTATUS   WINAPI RegDeleteTreeA(HKEY,LPCSTR);\nWINADVAPI LSTATUS   WINAPI RegDeleteTreeW(HKEY,LPCWSTR);\n#define                    RegDeleteTree WINELIB_NAME_AW(RegDeleteTree)\nWINADVAPI LSTATUS   WINAPI RegDeleteValueA(HKEY,LPCSTR);\nWINADVAPI LSTATUS   WINAPI RegDeleteValueW(HKEY,LPCWSTR);\n#define                    RegDeleteValue WINELIB_NAME_AW(RegDeleteValue)\nWINADVAPI LSTATUS   WINAPI RegDisablePredefinedCache(void);\nWINADVAPI LSTATUS   WINAPI RegEnumKeyA(HKEY,DWORD,LPSTR,DWORD);\nWINADVAPI LSTATUS   WINAPI RegEnumKeyW(HKEY,DWORD,LPWSTR,DWORD);\n#define                    RegEnumKey WINELIB_NAME_AW(RegEnumKey)\nWINADVAPI LSTATUS   WINAPI RegEnumKeyExA(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPSTR,LPDWORD,LPFILETIME);\nWINADVAPI LSTATUS   WINAPI RegEnumKeyExW(HKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,LPWSTR,LPDWORD,LPFILETIME);\n#define                    RegEnumKeyEx WINELIB_NAME_AW(RegEnumKeyEx)\nWINADVAPI LSTATUS   WINAPI RegEnumValueA(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD);\nWINADVAPI LSTATUS   WINAPI RegEnumValueW(HKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD);\n#define                    RegEnumValue WINELIB_NAME_AW(RegEnumValue)\nWINADVAPI LSTATUS   WINAPI RegFlushKey(HKEY);\nWINADVAPI LSTATUS   WINAPI RegGetKeySecurity(HKEY,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,LPDWORD);\nWINADVAPI LSTATUS   WINAPI RegGetValueA(HKEY,LPCSTR,LPCSTR,DWORD,LPDWORD,PVOID,LPDWORD);\nWINADVAPI LSTATUS   WINAPI RegGetValueW(HKEY,LPCWSTR,LPCWSTR,DWORD,LPDWORD,PVOID,LPDWORD);\n#define                    RegGetValue WINELIB_NAME_AW(RegGetValue)\nWINADVAPI LSTATUS   WINAPI RegLoadKeyA(HKEY,LPCSTR,LPCSTR);\nWINADVAPI LSTATUS   WINAPI RegLoadKeyW(HKEY,LPCWSTR,LPCWSTR);\n#define                    RegLoadKey WINELIB_NAME_AW(RegLoadKey)\nWINADVAPI LSTATUS   WINAPI RegLoadMUIStringA(HKEY,LPCSTR,LPSTR,DWORD,LPDWORD,DWORD,LPCSTR);\nWINADVAPI LSTATUS   WINAPI RegLoadMUIStringW(HKEY,LPCWSTR,LPWSTR,DWORD,LPDWORD,DWORD,LPCWSTR);\n#define                    RegLoadMUIString WINELIB_NAME_AW(RegLoadMUIString)\nWINADVAPI LSTATUS   WINAPI RegNotifyChangeKeyValue(HKEY,BOOL,DWORD,HANDLE,BOOL);\nWINADVAPI LSTATUS   WINAPI RegOpenCurrentUser(REGSAM,PHKEY);\nWINADVAPI LSTATUS   WINAPI RegOpenKeyA(HKEY,LPCSTR,PHKEY);\nWINADVAPI LSTATUS   WINAPI RegOpenKeyW(HKEY,LPCWSTR,PHKEY);\n#define                    RegOpenKey WINELIB_NAME_AW(RegOpenKey)\nWINADVAPI LSTATUS   WINAPI RegOpenKeyExW(HKEY,LPCWSTR,DWORD,REGSAM,PHKEY);\nWINADVAPI LSTATUS   WINAPI RegOpenKeyExA(HKEY,LPCSTR,DWORD,REGSAM,PHKEY);\n#define                    RegOpenKeyEx WINELIB_NAME_AW(RegOpenKeyEx)\nWINADVAPI LSTATUS   WINAPI RegOpenUserClassesRoot(HANDLE,DWORD,REGSAM,PHKEY);\nWINADVAPI LSTATUS   WINAPI RegOverridePredefKey(HKEY,HKEY);\nWINADVAPI LSTATUS   WINAPI RegQueryInfoKeyW(HKEY,LPWSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPFILETIME);\nWINADVAPI LSTATUS   WINAPI RegQueryInfoKeyA(HKEY,LPSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPFILETIME);\n#define                    RegQueryInfoKey WINELIB_NAME_AW(RegQueryInfoKey)\nWINADVAPI LSTATUS   WINAPI RegQueryMultipleValuesA(HKEY,PVALENTA,DWORD,LPSTR,LPDWORD);\nWINADVAPI LSTATUS   WINAPI RegQueryMultipleValuesW(HKEY,PVALENTW,DWORD,LPWSTR,LPDWORD);\n#define                    RegQueryMultipleValues WINELIB_NAME_AW(RegQueryMultipleValues)\nWINADVAPI LSTATUS   WINAPI RegQueryValueA(HKEY,LPCSTR,LPSTR,LPLONG);\nWINADVAPI LSTATUS   WINAPI RegQueryValueW(HKEY,LPCWSTR,LPWSTR,LPLONG);\n#define                    RegQueryValue WINELIB_NAME_AW(RegQueryValue)\nWINADVAPI LSTATUS   WINAPI RegQueryValueExA(HKEY,LPCSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD);\nWINADVAPI LSTATUS   WINAPI RegQueryValueExW(HKEY,LPCWSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD);\n#define                    RegQueryValueEx WINELIB_NAME_AW(RegQueryValueEx)\nWINADVAPI LSTATUS   WINAPI RegReplaceKeyA(HKEY,LPCSTR,LPCSTR,LPCSTR);\nWINADVAPI LSTATUS   WINAPI RegReplaceKeyW(HKEY,LPCWSTR,LPCWSTR,LPCWSTR);\n#define                    RegReplaceKey WINELIB_NAME_AW(RegReplaceKey)\nWINADVAPI LSTATUS   WINAPI RegRestoreKeyA(HKEY,LPCSTR,DWORD);\nWINADVAPI LSTATUS   WINAPI RegRestoreKeyW(HKEY,LPCWSTR,DWORD);\n#define                    RegRestoreKey WINELIB_NAME_AW(RegRestoreKey)\nWINADVAPI LSTATUS   WINAPI RegSaveKeyA(HKEY,LPCSTR,LPSECURITY_ATTRIBUTES);\nWINADVAPI LSTATUS   WINAPI RegSaveKeyW(HKEY,LPCWSTR,LPSECURITY_ATTRIBUTES);\n#define                    RegSaveKey WINELIB_NAME_AW(RegSaveKey)\nWINADVAPI LSTATUS   WINAPI RegSaveKeyExA(HKEY,LPCSTR,LPSECURITY_ATTRIBUTES,DWORD);\nWINADVAPI LSTATUS   WINAPI RegSaveKeyExW(HKEY,LPCWSTR,LPSECURITY_ATTRIBUTES,DWORD);\n#define                    RegSaveKeyEx WINELIB_NAME_AW(RegSaveKeyEx)\nWINADVAPI LSTATUS   WINAPI RegSetKeySecurity(HKEY,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);\nWINADVAPI LSTATUS   WINAPI RegSetKeyValueA(HKEY,LPCSTR,LPCSTR,DWORD,const void*,DWORD);\nWINADVAPI LSTATUS   WINAPI RegSetKeyValueW(HKEY,LPCWSTR,LPCWSTR,DWORD,const void*,DWORD);\nWINADVAPI LSTATUS   WINAPI RegSetValueA(HKEY,LPCSTR,DWORD,LPCSTR,DWORD);\nWINADVAPI LSTATUS   WINAPI RegSetValueW(HKEY,LPCWSTR,DWORD,LPCWSTR,DWORD);\n#define                    RegSetValue WINELIB_NAME_AW(RegSetValue)\nWINADVAPI LSTATUS   WINAPI RegSetValueExA(HKEY,LPCSTR,DWORD,DWORD,const BYTE*,DWORD);\nWINADVAPI LSTATUS   WINAPI RegSetValueExW(HKEY,LPCWSTR,DWORD,DWORD,const BYTE*,DWORD);\n#define                    RegSetValueEx WINELIB_NAME_AW(RegSetValueEx)\nWINADVAPI LSTATUS   WINAPI RegUnLoadKeyA(HKEY,LPCSTR);\nWINADVAPI LSTATUS   WINAPI RegUnLoadKeyW(HKEY,LPCWSTR);\n#define                    RegUnLoadKey WINELIB_NAME_AW(RegUnLoadKey)\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif  /* __WINE_WINREG_H */\n"
  },
  {
    "path": "wine/windows/winresrc.h",
    "content": "/*\n * Copyright (C) 2002 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _WINRESRC_\n#define _WINRESRC_\n\n#ifndef WINVER\n#define WINVER 0x0500\n#endif\n\n#ifndef _WIN32_IE\n#define _WIN32_IE 0x0501\n#endif\n\n#ifndef _WIN32_WINDOWS\n#define _WIN32_WINDOWS 0x0410\n#endif\n\n#ifndef _WIN32_WINNT\n#define _WIN32_WINNT 0x0500\n#endif\n\n#include <winuser.rh>\n#include <commctrl.rh>\n#include <dde.rh>\n#include <winnt.rh>\n#include <dlgs.h>\n#include <winver.h>\n\n#endif /* _WINRESRC_ */\n"
  },
  {
    "path": "wine/windows/winsafer.h",
    "content": "/*\n * Winsafer definitions\n *\n * Copyright (C) 2009 Nikolay Sivov\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINSAFER_H\n#define __WINE_WINSAFER_H\n\n#include <guiddef.h>\n#include <wincrypt.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nDECLARE_HANDLE(SAFER_LEVEL_HANDLE);\n\n#define SAFER_SCOPEID_MACHINE  1\n#define SAFER_SCOPEID_USER     2\n\n#define SAFER_LEVELID_DISALLOWED   0x00000\n#define SAFER_LEVELID_UNTRUSTED    0x01000\n#define SAFER_LEVELID_CONSTRAINED  0x10000\n#define SAFER_LEVELID_NORMALUSER   0x20000\n#define SAFER_LEVELID_FULLYTRUSTED 0x40000\n\n#define SAFER_LEVEL_OPEN   1\n\nWINADVAPI BOOL WINAPI SaferCreateLevel(DWORD,DWORD,DWORD,SAFER_LEVEL_HANDLE*,LPVOID);\n\ntypedef enum _SAFER_POLICY_INFO_CLASS {\n    SaferPolicyLevelList = 1,\n    SaferPolicyEnableTransparentEnforcement,\n    SaferPolicyDefaultLevel,\n    SaferPolicyEvaluateUserScope,\n    SaferPolicyScopeFlags\n} SAFER_POLICY_INFO_CLASS;\n\ntypedef enum _SAFER_OBJECT_INFO_CLASS {\n    SaferObjectLevelId = 1,\n    SaferObjectScopeId,\n    SaferObjectFriendlyName,\n    SaferObjectDescription,\n    SaferObjectBuiltin,\n    SaferObjectDisallowed,\n    SaferObjectDisableMaxPrivilege,\n    SaferObjectInvertDeletedPrivileges,\n    SaferObjectDeletedPrivileges,\n    SaferObjectDefaultOwner,\n    SaferObjectSidsToDisable,\n    SaferObjectRestrictedSidsInverted,\n    SaferObjectRestrictedSidsAdded,\n    SaferObjectAllIdentificationGuids,\n    SaferObjectSingleIdentification,\n    SaferObjectExtendedError\n} SAFER_OBJECT_INFO_CLASS;\n\nWINADVAPI BOOL WINAPI SaferGetPolicyInformation(DWORD,SAFER_POLICY_INFO_CLASS,DWORD,PVOID,PDWORD,LPVOID);\nWINADVAPI BOOL WINAPI SaferSetLevelInformation(SAFER_LEVEL_HANDLE,SAFER_OBJECT_INFO_CLASS,LPVOID,DWORD);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_WINSAFER_H */\n"
  },
  {
    "path": "wine/windows/winscard.h",
    "content": "/*\n * Winscard definitions\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINSCARD_H\n#define __WINE_WINSCARD_H\n\n#include <wtypes.h>\n#include <winioctl.h>\n#include <winsmcrd.h>\n#include <scarderr.h>\n\n/* Valid scopes for contexts */\n#define SCARD_SCOPE_USER     0\n#define SCARD_SCOPE_TERMINAL 1\n#define SCARD_SCOPE_SYSTEM   2\n\n#ifndef _LPCBYTE_DEFINED\n#define _LPCBYTE_DEFINED\ntypedef const BYTE *LPCBYTE;\n#endif\n\ntypedef ULONG_PTR SCARDCONTEXT, *PSCARDCONTEXT, *LPSCARDCONTEXT;\ntypedef ULONG_PTR SCARDHANDLE,  *PSCARDHANDLE,  *LPSCARDHANDLE;\n\ntypedef struct _SCARD_ATRMASK\n{\n    DWORD cbAtr;\n    BYTE  rgbAtr[36];\n    BYTE  rgbMask[36];\n} SCARD_ATRMASK, *PSCARD_ATRMASK, *LPSCARD_ATRMASK;\n\ntypedef struct\n{\n    LPCSTR szReader;\n    LPVOID pvUserData;\n    DWORD  dwCurrentState;\n    DWORD  dwEventState;\n    DWORD  cbAtr;\n    BYTE   rgbAtr[36];\n} SCARD_READERSTATEA, *PSCARD_READERSTATEA, *LPSCARD_READERSTATEA;\ntypedef struct\n{\n    LPCWSTR szReader;\n    LPVOID  pvUserData;\n    DWORD   dwCurrentState;\n    DWORD   dwEventState;\n    DWORD   cbAtr;\n    BYTE    rgbAtr[36];\n} SCARD_READERSTATEW, *PSCARD_READERSTATEW, *LPSCARD_READERSTATEW;\nDECL_WINELIB_TYPE_AW(SCARD_READERSTATE)\nDECL_WINELIB_TYPE_AW(PSCARD_READERSTATE)\nDECL_WINELIB_TYPE_AW(LPSCARD_READERSTATE)\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nHANDLE      WINAPI SCardAccessStartedEvent(void);\nLONG        WINAPI SCardAddReaderToGroupA(SCARDCONTEXT,LPCSTR,LPCSTR);\nLONG        WINAPI SCardAddReaderToGroupW(SCARDCONTEXT,LPCWSTR,LPCWSTR);\n#define     SCardAddReaderToGroup WINELIB_NAME_AW(SCardAddReaderToGroup)\nLONG        WINAPI SCardBeginTransaction(SCARDHANDLE);\nLONG        WINAPI SCardCancel(SCARDCONTEXT);\nLONG        WINAPI SCardConnectA(SCARDCONTEXT,LPCSTR,DWORD,DWORD,LPSCARDHANDLE,LPDWORD);\nLONG        WINAPI SCardConnectW(SCARDCONTEXT,LPCWSTR,DWORD,DWORD,LPSCARDHANDLE,LPDWORD);\n#define     SCardConnect WINELIB_NAME_AW(SCardConnect)\nLONG        WINAPI SCardControl(SCARDHANDLE,DWORD,LPCVOID,DWORD,LPVOID,DWORD,LPDWORD);\nLONG        WINAPI SCardDisconnect(SCARDHANDLE,DWORD);\nLONG        WINAPI SCardEndTransaction(SCARDHANDLE,DWORD);\nLONG        WINAPI SCardEstablishContext(DWORD,LPCVOID,LPCVOID,LPSCARDCONTEXT);\nLONG        WINAPI SCardForgetCardTypeA(SCARDCONTEXT,LPCSTR);\nLONG        WINAPI SCardForgetCardTypeW(SCARDCONTEXT,LPCWSTR);\n#define     SCardForgetCardType WINELIB_NAME_AW(SCardForgetCardType)\nLONG        WINAPI SCardForgetReaderA(SCARDCONTEXT,LPCSTR);\nLONG        WINAPI SCardForgetReaderW(SCARDCONTEXT,LPCWSTR);\n#define     SCardForgetReader WINELIB_NAME_AW(SCardForgetReader)\nLONG        WINAPI SCardForgetReaderGroupA(SCARDCONTEXT,LPCSTR);\nLONG        WINAPI SCardForgetReaderGroupW(SCARDCONTEXT,LPCWSTR);\n#define     SCardForgetReaderGroup WINELIB_NAME_AW(SCardForgetReaderGroup)\nLONG        WINAPI SCardFreeMemory(SCARDCONTEXT,LPCVOID);\nLONG        WINAPI SCardGetAttrib(SCARDHANDLE,DWORD,LPBYTE,LPDWORD);\nLONG        WINAPI SCardGetCardTypeProviderNameA(SCARDCONTEXT,LPCSTR,DWORD,LPSTR,LPDWORD);\nLONG        WINAPI SCardGetCardTypeProviderNameW(SCARDCONTEXT,LPCWSTR,DWORD,LPWSTR,LPDWORD);\n#define     SCardGetCardTypeProviderName WINELIB_NAME_AW(SCardGetCardTypeProviderName)\nLONG        WINAPI SCardGetProviderIdA(SCARDCONTEXT,LPCSTR,LPGUID);\nLONG        WINAPI SCardGetProviderIdW(SCARDCONTEXT,LPCWSTR,LPGUID);\n#define     SCardGetProviderId WINELIB_NAME_AW(SCardGetProviderId)\nLONG        WINAPI SCardGetStatusChangeA(SCARDCONTEXT,DWORD,LPSCARD_READERSTATEA,DWORD);\nLONG        WINAPI SCardGetStatusChangeW(SCARDCONTEXT,DWORD,LPSCARD_READERSTATEW,DWORD);\n#define     SCardGetStatusChange WINELIB_NAME_AW(SCardGetStatusChange)\nLONG        WINAPI SCardIntroduceCardTypeA(SCARDCONTEXT,LPCSTR,LPCGUID,LPCGUID,DWORD,LPCBYTE,LPCBYTE,DWORD);\nLONG        WINAPI SCardIntroduceCardTypeW(SCARDCONTEXT,LPCWSTR,LPCGUID,LPCGUID,DWORD,LPCBYTE,LPCBYTE,DWORD);\n#define     SCardIntroduceCardType WINELIB_NAME_AW(SCardIntroduceCardType)\nLONG        WINAPI SCardIntroduceReaderA(SCARDCONTEXT,LPCSTR,LPCSTR);\nLONG        WINAPI SCardIntroduceReaderW(SCARDCONTEXT,LPCWSTR,LPCWSTR);\n#define     SCardIntroduceReader WINELIB_NAME_AW(SCardIntroduceReader)\nLONG        WINAPI SCardIntroduceReaderGroupA(SCARDCONTEXT,LPCSTR);\nLONG        WINAPI SCardIntroduceReaderGroupW(SCARDCONTEXT,LPCWSTR);\n#define     SCardIntroduceReaderGroup WINELIB_NAME_AW(SCardIntroduceReaderGroup)\nLONG        WINAPI SCardIsValidContext(SCARDCONTEXT);\nLONG        WINAPI SCardListCardsA(SCARDCONTEXT,LPCBYTE,LPCGUID,DWORD,LPSTR,LPDWORD);\nLONG        WINAPI SCardListCardsW(SCARDCONTEXT,LPCBYTE,LPCGUID,DWORD,LPWSTR,LPDWORD);\n#define     SCardListCards WINELIB_NAME_AW(SCardListCards)\nLONG        WINAPI SCardListInterfacesA(SCARDCONTEXT,LPCSTR,LPGUID,LPDWORD);\nLONG        WINAPI SCardListInterfacesW(SCARDCONTEXT,LPCWSTR,LPGUID,LPDWORD);\n#define     SCardListInterfaces WINELIB_NAME_AW(SCardListInterfaces)\nLONG        WINAPI SCardListReadersA(SCARDCONTEXT,const CHAR *,CHAR *,DWORD *);\nLONG        WINAPI SCardListReadersW(SCARDCONTEXT,const WCHAR *,WCHAR *,DWORD *);\n#define     SCardListReaders WINELIB_NAME_AW(SCardListReaders)\nLONG        WINAPI SCardListReaderGroupsA(SCARDCONTEXT,LPSTR,LPDWORD);\nLONG        WINAPI SCardListReaderGroupsW(SCARDCONTEXT,LPWSTR,LPDWORD);\n#define     SCardListReaderGroups WINELIB_NAME_AW(SCardListReaderGroups)\nLONG        WINAPI SCardLocateCardsA(SCARDCONTEXT,LPCSTR,LPSCARD_READERSTATEA,DWORD);\nLONG        WINAPI SCardLocateCardsW(SCARDCONTEXT,LPCWSTR,LPSCARD_READERSTATEW,DWORD);\n#define     SCardLocateCards WINELIB_NAME_AW(SCardLocateCards)\nLONG        WINAPI SCardLocateCardsByATRA(SCARDCONTEXT,LPSCARD_ATRMASK,DWORD,LPSCARD_READERSTATEA,DWORD);\nLONG        WINAPI SCardLocateCardsByATRW(SCARDCONTEXT,LPSCARD_ATRMASK,DWORD,LPSCARD_READERSTATEW,DWORD);\n#define     SCardLocateCardsByATR WINELIB_NAME_AW(SCardLocateCardsByATR)\nLONG        WINAPI SCardReconnect(SCARDHANDLE,DWORD,DWORD,DWORD,LPDWORD);\nLONG        WINAPI SCardReleaseContext(SCARDCONTEXT);\nvoid        WINAPI SCardReleaseStartedEvent(void);\nLONG        WINAPI SCardRemoveReaderFromGroupA(SCARDCONTEXT,LPCSTR,LPCSTR);\nLONG        WINAPI SCardRemoveReaderFromGroupW(SCARDCONTEXT,LPCWSTR,LPCWSTR);\n#define     SCardRemoveReaderFromGroup WINELIB_NAME_AW(SCardRemoveReaderFromGroup)\nLONG        WINAPI SCardSetAttrib(SCARDHANDLE,DWORD,LPCBYTE,DWORD);\nLONG        WINAPI SCardSetCardTypeProviderNameA(SCARDCONTEXT,LPCSTR,DWORD,LPCSTR);\nLONG        WINAPI SCardSetCardTypeProviderNameW(SCARDCONTEXT,LPCWSTR,DWORD,LPCWSTR);\n#define     SCardSetCardTypeProviderName WINELIB_NAME_AW(SCardSetCardTypeProviderName)\nLONG        WINAPI SCardState(SCARDHANDLE,LPDWORD,LPDWORD,LPBYTE,LPDWORD);\nLONG        WINAPI SCardStatusA(SCARDHANDLE,LPSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD);\nLONG        WINAPI SCardStatusW(SCARDHANDLE,LPWSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD);\n#define     SCardStatus WINELIB_NAME_AW(SCardStatus)\nLONG        WINAPI SCardTransmit(SCARDHANDLE,LPCSCARD_IO_REQUEST,LPCBYTE,DWORD,LPSCARD_IO_REQUEST,LPBYTE,LPDWORD);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* __WINE_WINSCARD_H */\n"
  },
  {
    "path": "wine/windows/winsmcrd.h",
    "content": "/*\n * Winscard definitions\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINSMCRD_H\n#define __WINE_WINSMCRD_H\n\n#define SCARD_PROTOCOL_UNDEFINED        0x00000000\n#define SCARD_PROTOCOL_OPTIMAL          0x00000000\n#define SCARD_PROTOCOL_T0               0x00000001\n#define SCARD_PROTOCOL_T1               0x00000002\n#define SCARD_PROTOCOL_RAW              0x00010000\n#define SCARD_PROTOCOL_DEFAULT          0x80000000\n#define SCARD_PROTOCOL_Tx               (SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1)\n\ntypedef struct _SCARD_IO_REQUEST\n{\n    DWORD dwProtocol;\n    DWORD cbPciLength;\n} SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST;\ntypedef const SCARD_IO_REQUEST *LPCSCARD_IO_REQUEST;\n\n#endif  /* __WINE_WINSMCRD_H */\n"
  },
  {
    "path": "wine/windows/winsnmp.h",
    "content": "/*\n * Copyright 2013 Hans Leidekker for CodeWeavers.\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINSNMP_H\n#define __WINE_WINSNMP_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef int          smiINT, *smiLPINT;\ntypedef smiINT       smiINT32, *smiLPINT32;\ntypedef unsigned int smiUINT32, *smiLPUINT32;\ntypedef smiUINT32    SNMPAPI_STATUS;\ntypedef HANDLE       HSNMP_SESSION;\n\n#define SNMPAPI_NO_SUPPORT  0\n#define SNMPAPI_V1_SUPPORT  1\n#define SNMPAPI_V2_SUPPORT  2\n#define SNMPAPI_M2M_SUPPORT 3\n\n#define SNMPAPI_TRANSLATED      0\n#define SNMPAPI_UNTRANSLATED_V1 1\n#define SNMPAPI_UNTRANSLATED_V2 2\n\n#define SNMPAPI_OFF 0\n#define SNMPAPI_ON  1\n\n#define SNMPAPI_FAILURE 0\n#define SNMPAPI_SUCCESS 1\n\nSNMPAPI_STATUS WINAPI SnmpCleanup(void);\nHSNMP_SESSION  WINAPI SnmpOpen(HWND,UINT);\nSNMPAPI_STATUS WINAPI SnmpSetRetransmitMode(smiUINT32);\nSNMPAPI_STATUS WINAPI SnmpSetTranslateMode(smiUINT32);\nSNMPAPI_STATUS WINAPI SnmpStartup(smiLPUINT32,smiLPUINT32,smiLPUINT32,smiLPUINT32,smiLPUINT32);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_WINSNMP_H */\n"
  },
  {
    "path": "wine/windows/winsock.h",
    "content": "/* WINSOCK.H--definitions to be used with the WINSOCK.DLL\n *\n * This header file corresponds to version 1.1 of the Windows Sockets\n * specification.\n *\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifdef __WINESRC__\n# ifndef __WINE_WINSOCK2__\n#  error Please use Winsock2 in Wine\n# endif\n#endif\n\n#ifndef __WINE_WINSOCKAPI_STDLIB_H\n#define __WINE_WINSOCKAPI_STDLIB_H\n\n/*\n * This section defines the items that conflict with the Unix headers.\n */\n#ifndef USE_WS_PREFIX\n/* We are not using the WS_ prefix we risk getting conflicts for\n * everything related to select.\n */\n# ifdef FD_CLR\n/* Too late, the Unix version of stdlib.h was included before winsock.h.\n * This means select and all the related stuff is already defined and we\n * cannot override types and function prototypes.\n * All we can do is disable all these symbols so that they are not used\n * inadvertently.\n */\n#  include <sys/types.h>\n#  undef FD_SETSIZE\n#  undef FD_CLR\n#  undef FD_SET\n#  undef FD_ZERO\n#  undef FD_ISSET\n\n#  define FD_SETSIZE Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library\n#  define FD_CLR     Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library\n#  define FD_SET     Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library\n#  define FD_ZERO    Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library\n#  define FD_ISSET   Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library\n#  define fd_set     Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library\n#  define select     Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library\n# elif defined(RLIM_INFINITY)\n/* On Darwin stdlib.h includes sys/resource.h which defines timeval but not the fd_set macros */\n#  define fd_set unix_fd_set\n#  include <sys/types.h>\n#  include <time.h>\n#  include <stdlib.h>\n#  undef fd_set\n#  undef FD_SETSIZE\n#  undef FD_CLR\n#  undef FD_SET\n#  undef FD_ZERO\n#  undef FD_ISSET\n#  define select     Include_winsock_h_before_sys_types_h_or_use_the_MSVCRT_library\n#  define timeval    Include_winsock_h_before_sys_types_h_or_use_the_MSVCRT_library\n# else  /* FD_CLR */\n/* stdlib.h has not been included yet so it's not too late. Include it now\n * making sure that none of the select symbols is affected. Then we can\n * define them with our own values.\n */\n#  define fd_set unix_fd_set\n#  define timeval unix_timeval\n#  define select unix_select\n#  define socklen_t unix_socklen_t\n#  define u_long unix_u_long\n#  include <sys/types.h>\n#  include <time.h>\n#  include <stdlib.h>\n#  undef fd_set\n#  undef timeval\n#  undef select\n#  undef socklen_t\n#  undef u_long\n#  undef FD_SETSIZE\n#  undef FD_CLR\n#  undef FD_SET\n#  undef FD_ZERO\n#  undef FD_ISSET\n#  undef _TIMEVAL_DEFINED\n\n#  define WS_DEFINE_SELECT\n# endif /* FD_CLR */\n\n#else\n# define WS_DEFINE_SELECT\n# include <sys/types.h>\n# include <stdlib.h>\n#endif /* !USE_WS_PREFIX */\n\n#endif /* __WINE_WINSOCKAPI_STDLIB_H */\n\n#include <windows.h>\n\n#ifndef _WINSOCKAPI_\n#define _WINSOCKAPI_\n\n#include <inaddr.h>\n\n#ifdef USE_WS_PREFIX\ntypedef unsigned char  WS_u_char;\ntypedef unsigned short WS_u_short;\ntypedef unsigned int   WS_u_int;\ntypedef ULONG          WS_u_long;\n#elif (defined(_MSC_VER) || defined(__MINGW32__) || defined(__WATCOMC__)) && !defined(_BSDTYPES_DEFINED)\n/* MinGW doesn't define the u_xxx types */\ntypedef unsigned char  u_char;\ntypedef unsigned short u_short;\ntypedef unsigned int   u_int;\ntypedef ULONG          u_long;\n#define _BSDTYPES_DEFINED\n#else\n#define u_long ULONG  /* make sure we don't use the system u_long */\n#endif\n\n#ifdef USE_WS_PREFIX\n# define WS(x)    WS_##x\n#else\n# define WS(x)    x\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n/*\n * Address families\n */\n#ifndef USE_WS_PREFIX\n#define AF_UNSPEC                  0\n#define AF_UNIX                    1\n#define AF_INET                    2\n#define AF_IMPLINK                 3\n#define AF_PUP                     4\n#define AF_CHAOS                   5\n#define AF_NS                      6\n#define AF_IPX                     AF_NS\n#define AF_ISO                     7\n#define AF_OSI                     AF_ISO\n#define AF_ECMA                    8\n#define AF_DATAKIT                 9\n#define AF_CCITT                   10\n#define AF_SNA                     11\n#define AF_DECnet                  12\n#define AF_DLI                     13\n#define AF_LAT                     14\n#define AF_HYLINK                  15\n#define AF_APPLETALK               16\n#define AF_NETBIOS                 17\n#define AF_VOICEVIEW               18\n#define AF_FIREFOX                 19\n#define AF_UNKNOWN1                20\n#define AF_BAN                     21\n#define AF_ATM                     22\n#define AF_INET6                   23\n#define AF_CLUSTER                 24\n#define AF_12844                   25\n#define AF_IRDA                    26\n#define AF_MAX                     27\n#define PF_UNSPEC                  AF_UNSPEC\n#define PF_UNIX                    AF_UNIX\n#define PF_INET                    AF_INET\n#define PF_IMPLINK                 AF_IMPLINK\n#define PF_PUP                     AF_PUP\n#define PF_CHAOS                   AF_CHAOS\n#define PF_NS                      AF_NS\n#define PF_IPX                     AF_IPX\n#define PF_ISO                     AF_ISO\n#define PF_OSI                     AF_OSI\n#define PF_ECMA                    AF_ECMA\n#define PF_DATAKIT                 AF_DATAKIT\n#define PF_CCITT                   AF_CCITT\n#define PF_SNA                     AF_SNA\n#define PF_DECnet                  AF_DECnet\n#define PF_DLI                     AF_DLI\n#define PF_LAT                     AF_LAT\n#define PF_HYLINK                  AF_HYLINK\n#define PF_APPLETALK               AF_APPLETALK\n#define PF_VOICEVIEW               AF_VOICEVIEW\n#define PF_FIREFOX                 AF_FIREFOX\n#define PF_UNKNOWN1                AF_UNKNOWN1\n#define PF_BAN                     AF_BAN\n#define PF_MAX                     AF_MAX\n#else /* USE_WS_PREFIX */\n#define WS_AF_UNSPEC               0\n#define WS_AF_UNIX                 1\n#define WS_AF_INET                 2\n#define WS_AF_IMPLINK              3\n#define WS_AF_PUP                  4\n#define WS_AF_CHAOS                5\n#define WS_AF_NS                   6\n#define WS_AF_IPX                  WS_AF_NS\n#define WS_AF_ISO                  7\n#define WS_AF_OSI                  AF_ISO\n#define WS_AF_ECMA                 8\n#define WS_AF_DATAKIT              9\n#define WS_AF_CCITT                10\n#define WS_AF_SNA                  11\n#define WS_AF_DECnet               12\n#define WS_AF_DLI                  13\n#define WS_AF_LAT                  14\n#define WS_AF_HYLINK               15\n#define WS_AF_APPLETALK            16\n#define WS_AF_NETBIOS              17\n#define WS_AF_VOICEVIEW            18\n#define WS_AF_FIREFOX              19\n#define WS_AF_UNKNOWN1             20\n#define WS_AF_BAN                  21\n#define WS_AF_ATM                  22\n#define WS_AF_INET6                23\n#define WS_AF_CLUSTER              24\n#define WS_AF_12844                25\n#define WS_AF_IRDA                 26\n#define WS_AF_MAX                  27\n#endif /* USE_WS_PREFIX */\n\n/*\n * Types\n */\n#ifndef USE_WS_PREFIX\n#define SOCK_STREAM                1\n#define SOCK_DGRAM                 2\n#define SOCK_RAW                   3\n#define SOCK_RDM                   4\n#define SOCK_SEQPACKET             5\n#else /* USE_WS_PREFIX */\n#define WS_SOCK_STREAM             1\n#define WS_SOCK_DGRAM              2\n#define WS_SOCK_RAW                3\n#define WS_SOCK_RDM                4\n#define WS_SOCK_SEQPACKET          5\n#endif /* USE_WS_PREFIX */\n\n\n/*\n * Protocols\n */\n#ifndef USE_WS_PREFIX\n#define IPPROTO_IP                 0\n#define IPPROTO_ICMP               1\n#define IPPROTO_IGMP               2\n#define IPPROTO_GGP                3\n#define IPPROTO_TCP                6\n#define IPPROTO_UDP                17\n#define IPPROTO_IDP                22\n#define IPPROTO_IPV6               41\n#define IPPROTO_ICMPV6             58\n#define IPPROTO_ND                 77\n#define IPPROTO_RAW                255\n#define IPPROTO_MAX                256\n#else /* USE_WS_PREFIX */\n#define WS_IPPROTO_IP              0\n#define WS_IPPROTO_ICMP            1\n#define WS_IPPROTO_IGMP            2\n#define WS_IPPROTO_GGP             3\n#define WS_IPPROTO_TCP             6\n#define WS_IPPROTO_UDP             17\n#define WS_IPPROTO_IDP             22\n#define WS_IPPROTO_IPV6            41\n#define WS_IPPROTO_ICMPV6          58\n#define WS_IPPROTO_ND              77\n#define WS_IPPROTO_RAW             255\n#define WS_IPPROTO_MAX             256\n#endif /* USE_WS_PREFIX */\n\ntypedef struct WS(protoent)\n{\n    char* p_name;\n    char** p_aliases;\n    short p_proto;\n} PROTOENT, *PPROTOENT, *LPPROTOENT;\n\n\n\n/*\n * Networks\n */\nstruct WS(netent)\n{\n    char* n_name;                  /* official name of net */\n    char** n_aliases;              /* alias list */\n    short n_addrtype;              /* net address type */\n    ULONG n_net;                   /* network # */\n};\n\n\n/*\n * Services\n */\n#ifndef USE_WS_PREFIX\n#define IPPORT_ECHO                7\n#define IPPORT_DISCARD             9\n#define IPPORT_SYSTAT              11\n#define IPPORT_DAYTIME             13\n#define IPPORT_NETSTAT             15\n#define IPPORT_FTP                 21\n#define IPPORT_TELNET              23\n#define IPPORT_SMTP                25\n#define IPPORT_TIMESERVER          37\n#define IPPORT_NAMESERVER          42\n#define IPPORT_WHOIS               43\n#define IPPORT_MTP                 57\n#define IPPORT_TFTP                69\n#define IPPORT_RJE                 77\n#define IPPORT_FINGER              79\n#define IPPORT_TTYLINK             87\n#define IPPORT_SUPDUP              95\n#define IPPORT_EXECSERVER          512\n#define IPPORT_LOGINSERVER         513\n#define IPPORT_CMDSERVER           514\n#define IPPORT_EFSSERVER           520\n#define IPPORT_BIFFUDP             512\n#define IPPORT_WHOSERVER           513\n#define IPPORT_ROUTESERVER         520\n#define IPPORT_RESERVED            1024\n#else /* USE_WS_PREFIX */\n#define WS_IPPORT_ECHO             7\n#define WS_IPPORT_DISCARD          9\n#define WS_IPPORT_SYSTAT           11\n#define WS_IPPORT_DAYTIME          13\n#define WS_IPPORT_NETSTAT          15\n#define WS_IPPORT_FTP              21\n#define WS_IPPORT_TELNET           23\n#define WS_IPPORT_SMTP             25\n#define WS_IPPORT_TIMESERVER       37\n#define WS_IPPORT_NAMESERVER       42\n#define WS_IPPORT_WHOIS            43\n#define WS_IPPORT_MTP              57\n#define WS_IPPORT_TFTP             69\n#define WS_IPPORT_RJE              77\n#define WS_IPPORT_FINGER           79\n#define WS_IPPORT_TTYLINK          87\n#define WS_IPPORT_SUPDUP           95\n#define WS_IPPORT_EXECSERVER       512\n#define WS_IPPORT_LOGINSERVER      513\n#define WS_IPPORT_CMDSERVER        514\n#define WS_IPPORT_EFSSERVER        520\n#define WS_IPPORT_BIFFUDP          512\n#define WS_IPPORT_WHOSERVER        513\n#define WS_IPPORT_ROUTESERVER      520\n#define WS_IPPORT_RESERVED         1024\n#endif /* USE_WS_PREFIX */\n\ntypedef struct WS(servent)\n{\n    char* s_name;                  /* official service name */\n    char** s_aliases;              /* alias list */\n#ifdef _WIN64\n    char* s_proto;                 /* protocol to use */\n    short s_port;                  /* port # */\n#else\n    short s_port;                  /* port # */\n    char* s_proto;                 /* protocol to use */\n#endif\n} SERVENT, *PSERVENT, *LPSERVENT;\n\n\n\n/*\n * Hosts\n */\n\ntypedef struct WS(hostent)\n{\n    char* h_name;                  /* official name of host */\n    char** h_aliases;              /* alias list */\n    short h_addrtype;              /* host address type */\n    short h_length;                /* length of address */\n    char** h_addr_list;            /* list of addresses from name server */\n#define h_addr h_addr_list[0]      /* address, for backward compat */\n} HOSTENT, *PHOSTENT, *LPHOSTENT;\n\n\n/*\n * Sockets\n */\n\ntypedef UINT_PTR SOCKET;\n\n/*\n * This is used instead of -1, since the\n * SOCKET type is unsigned.\n */\n#define INVALID_SOCKET             (SOCKET)(~0)\n#define SOCKET_ERROR               (-1)\n\ntypedef struct WS(sockaddr)\n{\n        WS(u_short) sa_family;\n        char        sa_data[14];\n} SOCKADDR, *PSOCKADDR, *LPSOCKADDR;\n\ntypedef struct WS(linger)\n{\n    WS(u_short) l_onoff;           /* option on/off */\n    WS(u_short) l_linger;          /* linger time */\n} LINGER, *PLINGER, *LPLINGER;\n\n/*\n * Select\n */\n\n#ifdef WS_DEFINE_SELECT\n/* Define our own version of select and the associated types and macros */\n\n# ifndef USE_WS_PREFIX\n#  ifndef FD_SETSIZE\n#   define FD_SETSIZE              64\n#  endif\n# else\n#  ifndef WS_FD_SETSIZE\n#   define WS_FD_SETSIZE           64\n#  endif\n# endif\n\ntypedef struct WS(fd_set)\n{\n    WS(u_int) fd_count;            /* how many are SET? */\n# ifndef USE_WS_PREFIX\n    SOCKET fd_array[FD_SETSIZE];   /* an array of SOCKETs */\n# else\n    SOCKET fd_array[WS_FD_SETSIZE];/* an array of SOCKETs */\n# endif\n} WS(fd_set), FD_SET, *PFD_SET, *LPFD_SET;\n\n#ifndef _TIMEVAL_DEFINED\n#define _TIMEVAL_DEFINED\ntypedef struct WS(timeval)\n{\n    LONG    tv_sec;                /* seconds */\n    LONG    tv_usec;               /* and microseconds */\n} TIMEVAL, *PTIMEVAL, *LPTIMEVAL;\n#endif\n\n#define __WS_FD_CLR(fd, set, cast) do { \\\n    unsigned int __i; \\\n    for (__i = 0; __i < ((cast*)(set))->fd_count ; __i++) \\\n    { \\\n        if (((cast*)(set))->fd_array[__i] == fd) \\\n        { \\\n            while (__i < ((cast*)(set))->fd_count-1) \\\n            { \\\n                ((cast*)(set))->fd_array[__i] = \\\n                    ((cast*)(set))->fd_array[__i+1]; \\\n                __i++; \\\n            } \\\n            ((cast*)(set))->fd_count--; \\\n            break; \\\n        } \\\n    } \\\n} while(0)\n#define __WS_FD_SET1(fd, set, cast) do { \\\n    if (((cast*)(set))->fd_count < FD_SETSIZE) \\\n        ((cast*)(set))->fd_array[((cast*)(set))->fd_count++]=(fd); \\\n} while(0)\n/* This version checks if the filedesc is already in the list, and appends it\n * only if it's not the case\n */\n#define __WS_FD_SET2(fd, set, cast) do { \\\n    unsigned int __i; \\\n    for (__i = 0; __i < ((cast*)(set))->fd_count ; __i++) \\\n    { \\\n        if (((cast*)(set))->fd_array[__i]==(fd)) \\\n            break; \\\n    } \\\n    if (__i == ((cast*)(set))->fd_count && ((cast*)(set))->fd_count < FD_SETSIZE) \\\n    { \\\n        ((cast*)(set))->fd_count++; \\\n        ((cast*)(set))->fd_array[__i]=(fd);\\\n    } \\\n} while(0)\n\n#ifndef __WINE_WINSOCK2__\n#define __WS_FD_SET(fd, set, cast) __WS_FD_SET1((fd),(set), cast)\n#else\n#define __WS_FD_SET(fd, set, cast) __WS_FD_SET2((fd),(set), cast)\n#endif\n\n#ifndef USE_WS_PREFIX\n#define FD_CLR(fd, set)      __WS_FD_CLR((fd),(set), fd_set)\n#define FD_SET(fd, set)      __WS_FD_SET((fd),(set), fd_set)\n#define FD_ZERO(set)         (((fd_set*)(set))->fd_count=0)\n#define FD_ISSET(fd, set)    __WSAFDIsSet((SOCKET)(fd), (fd_set*)(set))\n#else\n#define WS_FD_CLR(fd, set)   __WS_FD_CLR((fd),(set), WS_fd_set)\n#define WS_FD_SET(fd, set)   __WS_FD_SET((fd),(set), WS_fd_set)\n#define WS_FD_ZERO(set)      (((WS_fd_set*)(set))->fd_count=0)\n#define WS_FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (WS_fd_set*)(set))\n#endif\n\nint WINAPI __WSAFDIsSet(SOCKET,WS(fd_set)*);\n\n#endif /* WS_DEFINE_SELECT */\n\n/* we have to define hton/ntoh as macros to avoid conflicts with Unix headers */\n#ifndef USE_WS_PREFIX\n\n#undef htonl\n#undef htons\n#undef ntohl\n#undef ntohs\n\n#ifdef WORDS_BIGENDIAN\n\nstatic inline u_short __wine_ushort_noop(u_short s)\n{\n    return s;\n}\nstatic inline ULONG __wine_ulong_noop(ULONG l)\n{\n    return l;\n}\n#define htonl __wine_ulong_noop\n#define htons __wine_ushort_noop\n#define ntohl __wine_ulong_noop\n#define ntohs __wine_ushort_noop\n\n#else  /* WORDS_BIGENDIAN */\n\nstatic inline u_short __wine_ushort_swap(u_short s)\n{\n    return (s >> 8) | (s << 8);\n}\nstatic inline ULONG __wine_ulong_swap(ULONG l)\n{\n    return ((ULONG)__wine_ushort_swap((u_short)l) << 16) | __wine_ushort_swap((u_short)(l >> 16));\n}\n#define htonl __wine_ulong_swap\n#define htons __wine_ushort_swap\n#define ntohl __wine_ulong_swap\n#define ntohs __wine_ushort_swap\n\n#endif  /* WORDS_BIGENDIAN */\n\n#endif  /* USE_WS_PREFIX */\n\n/*\n * Internet address (old style... should be updated)\n */\n\n#ifndef USE_WS_PREFIX\n#define IN_CLASSA_NSHIFT           24\n#define IN_CLASSA_MAX              128\n#define IN_CLASSA_NET              0xff000000\n#define IN_CLASSA_HOST             0x00ffffff\n#define IN_CLASSA(i)               (((LONG)(i) & 0x80000000) == 0)\n#define IN_CLASSB_NSHIFT           16\n#define IN_CLASSB_MAX              65536\n#define IN_CLASSB_NET              0xffff0000\n#define IN_CLASSB_HOST             0x0000ffff\n#define IN_CLASSB(i)               (((LONG)(i) & 0xc0000000) == 0x80000000)\n#define IN_CLASSC_NSHIFT           8\n#define IN_CLASSC_NET              0xffffff00\n#define IN_CLASSC_HOST             0x000000ff\n#define IN_CLASSC(i)               (((LONG)(i) & 0xe0000000) == 0xc0000000)\n#else\n#define WS_IN_CLASSA_NSHIFT        24\n#define WS_IN_CLASSA_MAX           128\n#define WS_IN_CLASSA_NET           0xff000000\n#define WS_IN_CLASSA_HOST          0x00ffffff\n#define WS_IN_CLASSA(i)            (((LONG)(i) & 0x80000000) == 0)\n#define WS_IN_CLASSB_NSHIFT        16\n#define WS_IN_CLASSB_MAX           65536\n#define WS_IN_CLASSB_NET           0xffff0000\n#define WS_IN_CLASSB_HOST          0x0000ffff\n#define WS_IN_CLASSB(i)            (((LONG)(i) & 0xc0000000) == 0x80000000)\n#define WS_IN_CLASSC_NSHIFT        8\n#define WS_IN_CLASSC_NET           0xffffff00\n#define WS_IN_CLASSC_HOST          0x000000ff\n#define WS_IN_CLASSC(i)            (((LONG)(i) & 0xe0000000) == 0xc0000000)\n#endif /* USE_WS_PREFIX */\n\n#ifndef USE_WS_PREFIX\n#define INADDR_ANY                 ((ULONG)0x00000000)\n#define INADDR_LOOPBACK            0x7f000001\n#define INADDR_BROADCAST           ((ULONG)0xffffffff)\n#define INADDR_NONE                0xffffffff\n#else\n#define WS_INADDR_ANY              ((ULONG)0x00000000)\n#define WS_INADDR_LOOPBACK         0x7f000001\n#define WS_INADDR_BROADCAST        ((ULONG)0xffffffff)\n#define WS_INADDR_NONE             0xffffffff\n#endif /* USE_WS_PREFIX */\n\ntypedef struct WS(sockaddr_in)\n{\n    short              sin_family;\n    WS(u_short)        sin_port;\n    struct WS(in_addr) sin_addr;\n    char               sin_zero[8];\n} SOCKADDR_IN, *PSOCKADDR_IN, *LPSOCKADDR_IN;\n\n/*\n * Multicast group information\n */\n\n#if !defined(__WINE_WINSOCK2__)\nstruct WS(ip_mreq)\n{\n    struct WS(in_addr) imr_multiaddr;\n    struct WS(in_addr) imr_interface;\n};\n#endif\n\n/*\n * WSAStartup\n */\n#define WSADESCRIPTION_LEN      256\n#define WSASYS_STATUS_LEN       128\n\ntypedef struct WS(WSAData)\n{\n    WORD                    wVersion;\n    WORD                    wHighVersion;\n#ifdef _WIN64\n    WORD                    iMaxSockets;\n    WORD                    iMaxUdpDg;\n    char                   *lpVendorInfo;\n    char                    szDescription[WSADESCRIPTION_LEN+1];\n    char                    szSystemStatus[WSASYS_STATUS_LEN+1];\n#else\n    char                    szDescription[WSADESCRIPTION_LEN+1];\n    char                    szSystemStatus[WSASYS_STATUS_LEN+1];\n    WORD                    iMaxSockets;\n    WORD                    iMaxUdpDg;\n    char                   *lpVendorInfo;\n#endif\n} WSADATA, *LPWSADATA;\n\n\n\n/*\n * {get,set}sockopt\n */\n#ifndef USE_WS_PREFIX\n#define SOL_SOCKET                 0xffff\n#define SO_DEBUG                   0x0001\n#define SO_ACCEPTCONN              0x0002\n#define SO_REUSEADDR               0x0004\n#define SO_EXCLUSIVEADDRUSE        ((u_int)(~SO_REUSEADDR))\n#define SO_KEEPALIVE               0x0008\n#define SO_DONTROUTE               0x0010\n#define SO_BROADCAST               0x0020\n#define SO_USELOOPBACK             0x0040\n#define SO_LINGER                  0x0080\n#define SO_OOBINLINE               0x0100\n#define SO_DONTLINGER              ((u_int)(~SO_LINGER))\n#define SO_SNDBUF                  0x1001\n#define SO_RCVBUF                  0x1002\n#define SO_SNDLOWAT                0x1003\n#define SO_RCVLOWAT                0x1004\n#define SO_SNDTIMEO                0x1005\n#define SO_RCVTIMEO                0x1006\n#define SO_ERROR                   0x1007\n#define SO_TYPE                    0x1008\n#define SO_BSP_STATE               0x1009\n\n#define SO_RANDOMIZE_PORT          0x3005\n#define SO_PORT_SCALABILITY        0x3006\n#define SO_REUSE_UNICASTPORT       0x3007\n#define SO_REUSE_MULTICASTPORT     0x3008\n\n#define IOCPARM_MASK               0x7f\n#define IOC_VOID                   0x20000000\n#define IOC_OUT                    0x40000000\n#define IOC_IN                     0x80000000\n#define IOC_INOUT                  (IOC_IN|IOC_OUT)\n\n#define _IO(x,y)    (IOC_VOID|((x)<<8)|(y))\n#define _IOR(x,y,t) (IOC_OUT|(((UINT)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))\n#define _IOW(x,y,t) (IOC_IN|(((UINT)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))\n\n#else\n\n#define WS_SOL_SOCKET              0xffff\n#define WS_SO_DEBUG                0x0001\n#define WS_SO_ACCEPTCONN           0x0002\n#define WS_SO_REUSEADDR            0x0004\n#define WS_SO_EXCLUSIVEADDRUSE     ((WS_u_int)(~WS_SO_REUSEADDR))\n#define WS_SO_KEEPALIVE            0x0008\n#define WS_SO_DONTROUTE            0x0010\n#define WS_SO_BROADCAST            0x0020\n#define WS_SO_USELOOPBACK          0x0040\n#define WS_SO_LINGER               0x0080\n#define WS_SO_OOBINLINE            0x0100\n#define WS_SO_DONTLINGER           ((WS_u_int)(~WS_SO_LINGER))\n#define WS_SO_SNDBUF               0x1001\n#define WS_SO_RCVBUF               0x1002\n#define WS_SO_SNDLOWAT             0x1003\n#define WS_SO_RCVLOWAT             0x1004\n#define WS_SO_SNDTIMEO             0x1005\n#define WS_SO_RCVTIMEO             0x1006\n#define WS_SO_ERROR                0x1007\n#define WS_SO_TYPE                 0x1008\n#define WS_SO_BSP_STATE            0x1009\n\n#define WS_SO_RANDOMIZE_PORT       0x3005\n#define WS_SO_PORT_SCALABILITY     0x3006\n#define WS_SO_REUSE_UNICASTPORT    0x3007\n#define WS_SO_REUSE_MULTICASTPORT  0x3008\n\n#define WS_IOCPARM_MASK            0x7f\n#define WS_IOC_VOID                0x20000000\n#define WS_IOC_OUT                 0x40000000\n#define WS_IOC_IN                  0x80000000\n#define WS_IOC_INOUT               (WS_IOC_IN|WS_IOC_OUT)\n\n#define WS__IO(x,y)    (WS_IOC_VOID|((x)<<8)|(y))\n#define WS__IOR(x,y,t) (WS_IOC_OUT|(((LONG)sizeof(t)&WS_IOCPARM_MASK)<<16)|((x)<<8)|(y))\n#define WS__IOW(x,y,t) (WS_IOC_IN|(((LONG)sizeof(t)&WS_IOCPARM_MASK)<<16)|((x)<<8)|(y))\n\n#endif\n\n/* IPPROTO_TCP options */\n#ifndef USE_WS_PREFIX\n#define TCP_NODELAY                1\n#else\n#define WS_TCP_NODELAY             1\n#endif\n\n/* IPPROTO_IP options */\n#ifndef __WINE_WINSOCK2__    /* WinSock2 has different values for the IP_ constants */\n# ifndef USE_WS_PREFIX\n#  define IP_OPTIONS             1\n#  define IP_MULTICAST_IF        2\n#  define IP_MULTICAST_TTL       3\n#  define IP_MULTICAST_LOOP      4\n#  define IP_ADD_MEMBERSHIP      5\n#  define IP_DROP_MEMBERSHIP     6\n#  define IP_TTL                 7\n#  define IP_TOS                 8\n#  define IP_DONTFRAGMENT        9\n#  define IP_RECEIVE_BROADCAST   22\n# else\n#  define WS_IP_OPTIONS           1\n#  define WS_IP_MULTICAST_IF      2\n#  define WS_IP_MULTICAST_TTL     3\n#  define WS_IP_MULTICAST_LOOP    4\n#  define WS_IP_ADD_MEMBERSHIP    5\n#  define WS_IP_DROP_MEMBERSHIP   6\n#  define WS_IP_TTL               7\n#  define WS_IP_TOS               8\n#  define WS_IP_DONTFRAGMENT      9\n#  define WS_IP_RECEIVE_BROADCAST 22\n# endif\n#endif\n\n\n/*\n * Socket I/O flags (supported by spec 1.1)\n */\n#ifndef USE_WS_PREFIX\n#define FIONREAD                   _IOR('f', 127, ULONG)\n#define FIONBIO                    _IOW('f', 126, ULONG)\n#define FIOASYNC                   _IOW('f', 125, ULONG)\n#define SIOCSHIWAT                 _IOW('s',  0, ULONG)\n#define SIOCGHIWAT                 _IOR('s',  1, ULONG)\n#define SIOCSLOWAT                 _IOW('s',  2, ULONG)\n#define SIOCGLOWAT                 _IOR('s',  3, ULONG)\n#define SIOCATMARK                 _IOR('s',  7, ULONG)\n#else\n#define WS_FIONREAD                WS__IOR('f', 127, ULONG)\n#define WS_FIONBIO                 WS__IOW('f', 126, ULONG)\n#define WS_FIOASYNC                WS__IOW('f', 125, ULONG)\n#define WS_SIOCSHIWAT              WS__IOW('s',  0, ULONG)\n#define WS_SIOCGHIWAT              WS__IOR('s',  1, ULONG)\n#define WS_SIOCSLOWAT              WS__IOW('s',  2, ULONG)\n#define WS_SIOCGLOWAT              WS__IOR('s',  3, ULONG)\n#define WS_SIOCATMARK              WS__IOR('s',  7, ULONG)\n#endif\n\n/*\n * Maximum queue length specifiable by listen.\n */\n#ifndef USE_WS_PREFIX\n#define SOMAXCONN                  5\n\n#define MSG_OOB                    0x0001\n#define MSG_PEEK                   0x0002\n#define MSG_DONTROUTE              0x0004\n#define MSG_WAITALL                0x0008\n#define MSG_INTERRUPT              0x0010\n#define MSG_PARTIAL                0x8000\n#define MSG_MAXIOVLEN              16\n#else /* USE_WS_PREFIX */\n#define WS_SOMAXCONN               5\n\n#define WS_MSG_OOB                 0x0001\n#define WS_MSG_PEEK                0x0002\n#define WS_MSG_DONTROUTE           0x0004\n#define WS_MSG_WAITALL             0x0008\n#define WS_MSG_INTERRUPT           0x0010\n#define WS_MSG_PARTIAL             0x8000\n#define WS_MSG_MAXIOVLEN           16\n#endif /* USE_WS_PREFIX */\n\n/*\n * Define constant based on rfc883, used by gethostbyxxxx() calls.\n */\n#ifndef USE_WS_PREFIX\n#define MAXGETHOSTSTRUCT           1024\n#else\n#define MAXGETHOSTSTRUCT           1024\n#endif\n\n\n/*\n * Define flags to be used with the WSAAsyncSelect() call.\n */\n#define FD_READ                    0x00000001\n#define FD_WRITE                   0x00000002\n#define FD_OOB                     0x00000004\n#define FD_ACCEPT                  0x00000008\n#define FD_CONNECT                 0x00000010\n#define FD_CLOSE                   0x00000020\n\n/* internal per-socket flags */\n#ifdef __WINESRC__\n#define FD_WINE_LISTENING          0x10000000\n#define FD_WINE_NONBLOCKING        0x20000000\n#define FD_WINE_CONNECTED          0x40000000\n#define FD_WINE_RAW                0x80000000\n#define FD_WINE_INTERNAL           0xFFFF0000\n#endif\n\n/*\n * All Windows Sockets error constants are biased by WSABASEERR from\n * the \"normal\". They are also defined in winerror.h.\n */\n#define WSABASEERR                 10000\n/*\n * Windows Sockets definitions of regular Microsoft C error constants\n */\n#define WSAEINTR                   (WSABASEERR+4)\n#define WSAEBADF                   (WSABASEERR+9)\n#define WSAEACCES                  (WSABASEERR+13)\n#define WSAEFAULT                  (WSABASEERR+14)\n#define WSAEINVAL                  (WSABASEERR+22)\n#define WSAEMFILE                  (WSABASEERR+24)\n\n/*\n * Windows Sockets definitions of regular Berkeley error constants\n */\n#define WSAEWOULDBLOCK             (WSABASEERR+35)\n#define WSAEINPROGRESS             (WSABASEERR+36)\n#define WSAEALREADY                (WSABASEERR+37)\n#define WSAENOTSOCK                (WSABASEERR+38)\n#define WSAEDESTADDRREQ            (WSABASEERR+39)\n#define WSAEMSGSIZE                (WSABASEERR+40)\n#define WSAEPROTOTYPE              (WSABASEERR+41)\n#define WSAENOPROTOOPT             (WSABASEERR+42)\n#define WSAEPROTONOSUPPORT         (WSABASEERR+43)\n#define WSAESOCKTNOSUPPORT         (WSABASEERR+44)\n#define WSAEOPNOTSUPP              (WSABASEERR+45)\n#define WSAEPFNOSUPPORT            (WSABASEERR+46)\n#define WSAEAFNOSUPPORT            (WSABASEERR+47)\n#define WSAEADDRINUSE              (WSABASEERR+48)\n#define WSAEADDRNOTAVAIL           (WSABASEERR+49)\n#define WSAENETDOWN                (WSABASEERR+50)\n#define WSAENETUNREACH             (WSABASEERR+51)\n#define WSAENETRESET               (WSABASEERR+52)\n#define WSAECONNABORTED            (WSABASEERR+53)\n#define WSAECONNRESET              (WSABASEERR+54)\n#define WSAENOBUFS                 (WSABASEERR+55)\n#define WSAEISCONN                 (WSABASEERR+56)\n#define WSAENOTCONN                (WSABASEERR+57)\n#define WSAESHUTDOWN               (WSABASEERR+58)\n#define WSAETOOMANYREFS            (WSABASEERR+59)\n#define WSAETIMEDOUT               (WSABASEERR+60)\n#define WSAECONNREFUSED            (WSABASEERR+61)\n#define WSAELOOP                   (WSABASEERR+62)\n#define WSAENAMETOOLONG            (WSABASEERR+63)\n#define WSAEHOSTDOWN               (WSABASEERR+64)\n#define WSAEHOSTUNREACH            (WSABASEERR+65)\n#define WSAENOTEMPTY               (WSABASEERR+66)\n#define WSAEPROCLIM                (WSABASEERR+67)\n#define WSAEUSERS                  (WSABASEERR+68)\n#define WSAEDQUOT                  (WSABASEERR+69)\n#define WSAESTALE                  (WSABASEERR+70)\n#define WSAEREMOTE                 (WSABASEERR+71)\n\n/*\n * Extended Windows Sockets error constant definitions\n */\n#define WSASYSNOTREADY             (WSABASEERR+91)\n#define WSAVERNOTSUPPORTED         (WSABASEERR+92)\n#define WSANOTINITIALISED          (WSABASEERR+93)\n#define WSAEDISCON                 (WSABASEERR+101)\n#define WSAENOMORE                 (WSABASEERR+102)\n#define WSAECANCELLED              (WSABASEERR+103)\n#define WSAEINVALIDPROCTABLE       (WSABASEERR+104)\n#define WSAEINVALIDPROVIDER        (WSABASEERR+105)\n#define WSAEPROVIDERFAILEDINIT     (WSABASEERR+106)\n#define WSASYSCALLFAILURE          (WSABASEERR+107)\n#define WSASERVICE_NOT_FOUND       (WSABASEERR+108)\n#define WSATYPE_NOT_FOUND          (WSABASEERR+109)\n#define WSA_E_NO_MORE              (WSABASEERR+110)\n#define WSA_E_CANCELLED            (WSABASEERR+111)\n#define WSAEREFUSED                (WSABASEERR+112)\n\n/*\n * Error return codes from gethostbyname() and gethostbyaddr()\n * (when using the resolver). Note that these errors are\n * retrieved via WSAGetLastError() and must therefore follow\n * the rules for avoiding clashes with error numbers from\n * specific implementations or language run-time systems.\n * For this reason the codes are based at WSABASEERR+1001.\n * Note also that [WSA]NO_ADDRESS is defined only for\n * compatibility purposes.\n */\n\n#ifndef USE_WS_PREFIX\n#define h_errno                    WSAGetLastError()\n#else\n#define WS_h_errno                 WSAGetLastError()\n#endif\n\n/* Authoritative Answer: Host not found */\n#define WSAHOST_NOT_FOUND          (WSABASEERR+1001)\n\n/* Non-Authoritative: Host not found, or SERVERFAIL */\n#define WSATRY_AGAIN               (WSABASEERR+1002)\n\n/* Non recoverable errors, FORMERR, REFUSED, NOTIMP */\n#define WSANO_RECOVERY             (WSABASEERR+1003)\n\n/* Valid name, no data record of requested type */\n#define WSANO_DATA                 (WSABASEERR+1004)\n\n/* no address, look for MX record */\n#define WSANO_ADDRESS              WSANO_DATA\n\n#ifndef USE_WS_PREFIX\n#define HOST_NOT_FOUND             WSAHOST_NOT_FOUND\n#define TRY_AGAIN                  WSATRY_AGAIN\n#define NO_RECOVERY                WSANO_RECOVERY\n#define NO_DATA                    WSANO_DATA\n#define NO_ADDRESS                 WSANO_ADDRESS\n#endif /* USE_WS_PREFIX */\n\n\n\n/*\n * Windows message parameter composition and decomposition\n * macros.\n */\n\n/*\n * WSAMAKEASYNCREPLY is intended for use by the Windows Sockets implementation\n * when constructing the response to a WSAAsyncGetXByY() routine.\n */\n#define WSAMAKEASYNCREPLY(buflen,error)     MAKELONG(buflen,error)\n/*\n * WSAMAKESELECTREPLY is intended for use by the Windows Sockets implementation\n * when constructing the response to WSAAsyncSelect().\n */\n#define WSAMAKESELECTREPLY(event,error)     MAKELONG(event,error)\n/*\n * WSAGETASYNCBUFLEN is intended for use by the Windows Sockets application\n * to extract the buffer length from the lParam in the response\n * to a WSAGetXByY().\n */\n#define WSAGETASYNCBUFLEN(lParam)           LOWORD(lParam)\n/*\n * WSAGETASYNCERROR is intended for use by the Windows Sockets application\n * to extract the error code from the lParam in the response\n * to a WSAGetXByY().\n */\n#define WSAGETASYNCERROR(lParam)            HIWORD(lParam)\n/*\n * WSAGETSELECTEVENT is intended for use by the Windows Sockets application\n * to extract the event code from the lParam in the response\n * to a WSAAsyncSelect().\n */\n#define WSAGETSELECTEVENT(lParam)           LOWORD(lParam)\n/*\n * WSAGETSELECTERROR is intended for use by the Windows Sockets application\n * to extract the error code from the lParam in the response\n * to a WSAAsyncSelect().\n */\n#define WSAGETSELECTERROR(lParam)           HIWORD(lParam)\n\n\n\n/*\n * Prototypes\n *\n * Remember to keep this section in sync with the\n * \"Winsock Function Typedefs\" section in winsock2.h.\n */\n#if !defined(__WINE_WINSOCK2__) || WS_API_PROTOTYPES\nHANDLE WINAPI WSAAsyncGetHostByAddr(HWND,WS(u_int),const char*,int,int,char*,int);\nHANDLE WINAPI WSAAsyncGetHostByName(HWND,WS(u_int),const char*,char*,int);\nHANDLE WINAPI WSAAsyncGetProtoByName(HWND,WS(u_int),const char*,char*,int);\nHANDLE WINAPI WSAAsyncGetProtoByNumber(HWND,WS(u_int),int,char*,int);\nHANDLE WINAPI WSAAsyncGetServByName(HWND,WS(u_int),const char*,const char*,char*,int);\nHANDLE WINAPI WSAAsyncGetServByPort(HWND,WS(u_int),int,const char*,char*,int);\nint WINAPI WSAAsyncSelect(SOCKET,HWND,WS(u_int),LONG);\nint WINAPI WSACancelAsyncRequest(HANDLE);\nint WINAPI WSACancelBlockingCall(void);\nint WINAPI WSACleanup(void);\nint WINAPI WSAGetLastError(void);\nBOOL WINAPI WSAIsBlocking(void);\nFARPROC WINAPI WSASetBlockingHook(FARPROC);\nvoid WINAPI WSASetLastError(int);\nint WINAPI WSAStartup(WORD,LPWSADATA);\nint WINAPI WSAUnhookBlockingHook(void);\n\nSOCKET WINAPI WS(accept)(SOCKET,struct WS(sockaddr)*,int*);\nint WINAPI WS(bind)(SOCKET,const struct WS(sockaddr)*,int);\nint WINAPI WS(closesocket)(SOCKET);\nint WINAPI WS(connect)(SOCKET,const struct WS(sockaddr)*,int);\nstruct WS(hostent)* WINAPI WS(gethostbyaddr)(const char*,int,int);\nstruct WS(hostent)* WINAPI WS(gethostbyname)(const char*);\nint WINAPI WS(getpeername)(SOCKET,struct WS(sockaddr)*,int*);\nstruct WS(protoent)* WINAPI WS(getprotobyname)(const char*);\nstruct WS(protoent)* WINAPI WS(getprotobynumber)(int);\n#ifdef WS_DEFINE_SELECT\nint WINAPI WS(select)(int,WS(fd_set)*,WS(fd_set)*,WS(fd_set)*,const struct WS(timeval)*);\n#endif\nstruct WS(servent)* WINAPI WS(getservbyname)(const char*,const char*);\nstruct WS(servent)* WINAPI WS(getservbyport)(int,const char*);\nint WINAPI WS(getsockname)(SOCKET,struct WS(sockaddr)*,int*);\nint WINAPI WS(getsockopt)(SOCKET,int,int,char*,int*);\nULONG WINAPI WS(inet_addr)(const char*);\nchar* WINAPI WS(inet_ntoa)(struct WS(in_addr));\nint WINAPI WS(ioctlsocket)(SOCKET,LONG,ULONG*);\nint WINAPI WS(listen)(SOCKET,int);\nint WINAPI WS(recv)(SOCKET,char*,int,int);\nint WINAPI WS(recvfrom)(SOCKET,char*,int,int,struct WS(sockaddr)*,int*);\nint WINAPI WS(send)(SOCKET,const char*,int,int);\nint WINAPI WS(sendto)(SOCKET,const char*,int,int,const struct WS(sockaddr)*,int);\nint WINAPI WS(setsockopt)(SOCKET,int,int,const char*,int);\nint WINAPI WS(shutdown)(SOCKET,int);\nSOCKET WINAPI WS(socket)(int,int,int);\n\n#if defined(__MINGW32__) || defined (_MSC_VER)\n/* gethostname is not defined on Unix because of conflicts with unistd.h */\nint WINAPI WS(gethostname)(char*,int);\n#endif\n\n#endif /* !defined(__WINE_WINSOCK2__) || WS_API_PROTOTYPES */\n\n#ifdef __cplusplus\n}\n#endif\n\n#ifndef __WINE_WINSOCK2__\n#undef WS\n#undef WS_API_PROTOTYPES\n#undef WS_API_TYPEDEFS\n#endif\n\n#endif  /* _WINSOCKAPI_ */\n"
  },
  {
    "path": "wine/windows/winsock2.h",
    "content": "/*\n * Winsock 2 definitions - used for ws2_32.dll\n *\n * Copyright (C) 1999 Ove Kaaven\n * Copyright (C) 2001 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n * FIXME: Still missing required Winsock 2 definitions.\n */\n\n#ifndef _WINSOCK2API_\n#define _WINSOCK2API_\n\n/*\n * Setup phase\n */\n\n/* Everything common between winsock.h and winsock2.h */\n#ifndef INCL_WINSOCK_API_PROTOTYPES\n#define INCL_WINSOCK_API_PROTOTYPES 1\n#define WS_API_PROTOTYPES          1\n#else\n#define WS_API_PROTOTYPES          INCL_WINSOCK_API_PROTOTYPES\n#endif\n\n#ifndef INCL_WINSOCK_API_TYPEDEFS\n#define INCL_WINSOCK_API_TYPEDEFS  0\n#define WS_API_TYPEDEFS            0\n#else\n#define WS_API_TYPEDEFS            INCL_WINSOCK_API_TYPEDEFS\n#endif\n\n#define __WINE_WINSOCK2__\n#include <winsock.h>\n#undef  __WINE_WINSOCK2__\n\n#include <ws2def.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n\n#ifndef USE_WS_PREFIX\n#define SO_GROUP_ID                0x2001\n#define SO_GROUP_PRIORITY          0x2002\n#define SO_MAX_MSG_SIZE            0x2003\n#define SO_PROTOCOL_INFOA          0x2004\n#define SO_PROTOCOL_INFOW          0x2005\n#define SO_PROTOCOL_INFO           WINELIB_NAME_AW(WS_SO_PROTOCOL_INFO)\n#define PVD_CONFIG                 0x3001\n#define SO_CONDITIONAL_ACCEPT      0x3002\n#else\n#define WS_SO_GROUP_ID             0x2001\n#define WS_SO_GROUP_PRIORITY       0x2002\n#define WS_SO_MAX_MSG_SIZE         0x2003\n#define WS_SO_PROTOCOL_INFOA       0x2004\n#define WS_SO_PROTOCOL_INFOW       0x2005\n#define WS_SO_PROTOCOL_INFO        WINELIB_NAME_AW(WS_SO_PROTOCOL_INFO)\n#define WS_PVD_CONFIG              0x3001\n#define WS_SO_CONDITIONAL_ACCEPT   0x3002\n#endif\n\n/* protocol types */\n\n#define FROM_PROTOCOL_INFO       (-1)\n\n#ifndef USE_WS_PREFIX\n#define SOCK_STREAM                1\n#define SOCK_DGRAM                 2\n#define SOCK_RAW                   3\n#define SOCK_RDM                   4\n#define SOCK_SEQPACKET             5\n#else /* USE_WS_PREFIX */\n#define WS_SOCK_STREAM             1\n#define WS_SOCK_DGRAM              2\n#define WS_SOCK_RAW                3\n#define WS_SOCK_RDM                4\n#define WS_SOCK_SEQPACKET          5\n#endif /* USE_WS_PREFIX */\n\n/* option flags per socket */\n\n#define FD_MAX_EVENTS              10\n#define FD_READ_BIT                0\n#define FD_WRITE_BIT               1\n#define FD_OOB_BIT                 2\n#define FD_ACCEPT_BIT              3\n#define FD_CONNECT_BIT             4\n#define FD_CLOSE_BIT               5\n#define FD_QOS_BIT                 6\n#define FD_GROUP_QOS_BIT           7\n#define FD_ROUTING_INTERFACE_CHANGE_BIT 8\n#define FD_ADDRESS_LIST_CHANGE_BIT 9\n\n#define FD_QOS                      0x00000040\n#define FD_GROUP_QOS                0x00000080\n#define FD_ROUTING_INTERFACE_CHANGE 0x00000100\n#define FD_ADDRESS_LIST_CHANGE      0x00000200\n\n/* Constants for LPCONDITIONPROC */\n#define CF_ACCEPT                  0x0000\n#define CF_REJECT                  0x0001\n#define CF_DEFER                   0x0002\n\n/* Constants for shutdown() */\n#define SD_RECEIVE                 0x00\n#define SD_SEND                    0x01\n#define SD_BOTH                    0x02\n\n/* Constants for WSAPoll() */\n#ifndef USE_WS_PREFIX\n#ifndef __WINE_WINE_PORT_H\n#define POLLERR                    0x0001\n#define POLLHUP                    0x0002\n#define POLLNVAL                   0x0004\n#define POLLWRNORM                 0x0010\n#define POLLWRBAND                 0x0020\n#define POLLRDNORM                 0x0100\n#define POLLRDBAND                 0x0200\n#define POLLPRI                    0x0400\n#define POLLIN                     (POLLRDNORM|POLLRDBAND)\n#define POLLOUT                    (POLLWRNORM)\n#endif\n#else\n#define WS_POLLERR                 0x0001\n#define WS_POLLHUP                 0x0002\n#define WS_POLLNVAL                0x0004\n#define WS_POLLWRNORM              0x0010\n#define WS_POLLWRBAND              0x0020\n#define WS_POLLRDNORM              0x0100\n#define WS_POLLRDBAND              0x0200\n#define WS_POLLPRI                 0x0400\n#define WS_POLLIN                  (WS_POLLRDNORM|WS_POLLRDBAND)\n#define WS_POLLOUT                 (WS_POLLWRNORM)\n#endif\n\n/* Constants for WSAIoctl() */\n#ifdef USE_WS_PREFIX\n#define WS_IOC_UNIX                0x00000000\n#define WS_IOC_WS2                 0x08000000\n#define WS_IOC_PROTOCOL            0x10000000\n#define WS_IOC_VENDOR              0x18000000\n#define WS_IOC_VOID                0x20000000\n#define WS_IOC_OUT                 0x40000000\n#define WS_IOC_IN                  0x80000000\n#define WS_IOC_INOUT               (WS_IOC_IN|WS_IOC_OUT)\n#define _WSAIO(x,y)                (WS_IOC_VOID|(x)|(y))\n#define _WSAIOR(x,y)               (WS_IOC_OUT|(x)|(y))\n#define _WSAIOW(x,y)               (WS_IOC_IN|(x)|(y))\n#define _WSAIORW(x,y)              (WS_IOC_INOUT|(x)|(y))\n#define WS_SIO_ASSOCIATE_HANDLE               _WSAIOW(WS_IOC_WS2,1)\n#define WS_SIO_ENABLE_CIRCULAR_QUEUEING       _WSAIO(WS_IOC_WS2,2)\n#define WS_SIO_FIND_ROUTE                     _WSAIOR(WS_IOC_WS2,3)\n#define WS_SIO_FLUSH                          _WSAIO(WS_IOC_WS2,4)\n#define WS_SIO_GET_BROADCAST_ADDRESS          _WSAIOR(WS_IOC_WS2,5)\n#define WS_SIO_GET_EXTENSION_FUNCTION_POINTER _WSAIORW(WS_IOC_WS2,6)\n#define WS_SIO_GET_QOS                        _WSAIORW(WS_IOC_WS2,7)\n#define WS_SIO_GET_GROUP_QOS                  _WSAIORW(WS_IOC_WS2,8)\n#define WS_SIO_MULTIPOINT_LOOPBACK            _WSAIOW(WS_IOC_WS2,9)\n#define WS_SIO_MULTICAST_SCOPE                _WSAIOW(WS_IOC_WS2,10)\n#define WS_SIO_SET_QOS                        _WSAIOW(WS_IOC_WS2,11)\n#define WS_SIO_SET_GROUP_QOS                  _WSAIOW(WS_IOC_WS2,12)\n#define WS_SIO_TRANSLATE_HANDLE               _WSAIORW(WS_IOC_WS2,13)\n#define WS_SIO_ROUTING_INTERFACE_QUERY        _WSAIORW(WS_IOC_WS2,20)\n#define WS_SIO_ROUTING_INTERFACE_CHANGE       _WSAIOW(WS_IOC_WS2,21)\n#define WS_SIO_ADDRESS_LIST_QUERY             _WSAIOR(WS_IOC_WS2,22)\n#define WS_SIO_ADDRESS_LIST_CHANGE            _WSAIO(WS_IOC_WS2,23)\n#define WS_SIO_QUERY_TARGET_PNP_HANDLE        _WSAIOR(WS_IOC_WS2,24)\n#define WS_SIO_GET_INTERFACE_LIST             WS__IOR('t', 127, ULONG)\n#else /* USE_WS_PREFIX */\n#undef IOC_VOID\n#undef IOC_IN\n#undef IOC_OUT\n#undef IOC_INOUT\n#define IOC_UNIX                   0x00000000\n#define IOC_WS2                    0x08000000\n#define IOC_PROTOCOL               0x10000000\n#define IOC_VENDOR                 0x18000000\n#define IOC_VOID                   0x20000000\n#define IOC_OUT                    0x40000000\n#define IOC_IN                     0x80000000\n#define IOC_INOUT                  (IOC_IN|IOC_OUT)\n#define _WSAIO(x,y)                (IOC_VOID|(x)|(y))\n#define _WSAIOR(x,y)               (IOC_OUT|(x)|(y))\n#define _WSAIOW(x,y)               (IOC_IN|(x)|(y))\n#define _WSAIORW(x,y)              (IOC_INOUT|(x)|(y))\n#define SIO_ASSOCIATE_HANDLE       _WSAIOW(IOC_WS2,1)\n#define SIO_ENABLE_CIRCULAR_QUEUEING _WSAIO(IOC_WS2,2)\n#define SIO_FIND_ROUTE             _WSAIOR(IOC_WS2,3)\n#define SIO_FLUSH                  _WSAIO(IOC_WS2,4)\n#define SIO_GET_BROADCAST_ADDRESS  _WSAIOR(IOC_WS2,5)\n#define SIO_GET_EXTENSION_FUNCTION_POINTER  _WSAIORW(IOC_WS2,6)\n#define SIO_GET_QOS                _WSAIORW(IOC_WS2,7)\n#define SIO_GET_GROUP_QOS          _WSAIORW(IOC_WS2,8)\n#define SIO_MULTIPOINT_LOOPBACK    _WSAIOW(IOC_WS2,9)\n#define SIO_MULTICAST_SCOPE        _WSAIOW(IOC_WS2,10)\n#define SIO_SET_QOS                _WSAIOW(IOC_WS2,11)\n#define SIO_SET_GROUP_QOS          _WSAIOW(IOC_WS2,12)\n#define SIO_TRANSLATE_HANDLE       _WSAIORW(IOC_WS2,13)\n#define SIO_ROUTING_INTERFACE_QUERY _WSAIORW(IOC_WS2,20)\n#define SIO_ROUTING_INTERFACE_CHANGE _WSAIOW(IOC_WS2,21)\n#define SIO_ADDRESS_LIST_QUERY     _WSAIOR(IOC_WS2,22)\n#define SIO_ADDRESS_LIST_CHANGE    _WSAIO(IOC_WS2,23)\n#define SIO_QUERY_TARGET_PNP_HANDLE _WSAIOR(IOC_WS2,24)\n#define SIO_GET_INTERFACE_LIST     _IOR ('t', 127, ULONG)\n#endif /* USE_WS_PREFIX */\n\n/* Constants for WSAIoctl() */\n#define WSA_FLAG_OVERLAPPED             0x0001\n#define WSA_FLAG_MULTIPOINT_C_ROOT      0x0002\n#define WSA_FLAG_MULTIPOINT_C_LEAF      0x0004\n#define WSA_FLAG_MULTIPOINT_D_ROOT      0x0008\n#define WSA_FLAG_MULTIPOINT_D_LEAF      0x0010\n#define WSA_FLAG_ACCESS_SYSTEM_SECURITY 0x0040\n#define WSA_FLAG_NO_HANDLE_INHERIT      0x0080\n#define WSA_FLAG_REGISTERED_IO          0x0100\n\n/* Constants for WSAJoinLeaf() */\n#define JL_SENDER_ONLY    0x01\n#define JL_RECEIVER_ONLY  0x02\n#define JL_BOTH           0x04\n\n/* Constants for WSALookupServiceBegin() */\n#define LUP_DEEP                0x0001\n#define LUP_RETURN_NAME         0x0010\n#define LUP_RETURN_TYPE         0x0020\n#define LUP_RETURN_VERSION      0x0040\n#define LUP_RETURN_COMMENT      0x0080\n#define LUP_RETURN_ADDR         0x0100\n#define LUP_RETURN_BLOB         0x0200\n#define LUP_RETURN_ALIASES      0x0400\n#define LUP_RETURN_QUERY_STRING 0x0800\n#define LUP_RETURN_ALL          (LUP_RETURN_ADDR|LUP_RETURN_BLOB|LUP_RETURN_ALIASES|LUP_RETURN_QUERY_STRING \\\n                                |LUP_RETURN_NAME|LUP_RETURN_TYPE|LUP_RETURN_VERSION|LUP_RETURN_COMMENT)\n\n/* Constants for dwNameSpace from struct WSANAMESPACE_INFO */\n#define NS_ALL         0\n#define NS_SAP         1\n#define NS_NDS         2\n#define NS_PEER_BROWSE 3\n#define NS_SLP         5\n#define NS_DHCP        6\n#define NS_TCPIP_LOCAL 10\n#define NS_TCPIP_HOSTS 11\n#define NS_DNS         12\n#define NS_NETBT       13\n#define NS_WINS        14\n#define NS_NLA         15\n#define NS_BTH         16\n#define NS_NBP         20\n#define NS_MS          30\n#define NS_STDA        31\n#define NS_NTDS        32\n#define NS_EMAIL       37\n#define NS_PNRPNAME    38\n#define NS_PNRPCLOUD   39\n#define NS_X500        40\n#define NS_NIS         41\n#define NS_NISPLUS     42\n#define NS_WRQ         50\n#define NS_NETDES      60\n\n#ifndef GUID_DEFINED\n#include <guiddef.h>\n#endif\n\n#define MAX_PROTOCOL_CHAIN         7\n#define BASE_PROTOCOL              1\n#define LAYERED_PROTOCOL           0\n\ntypedef struct _WSAPROTOCOLCHAIN\n{\n    int ChainLen;                  /* the length of the chain,     */\n                                   /* length = 0 means layered protocol, */\n                                   /* length = 1 means base protocol, */\n                                   /* length > 1 means protocol chain */\n    DWORD ChainEntries[MAX_PROTOCOL_CHAIN]; /* a list of dwCatalogEntryIds */\n} WSAPROTOCOLCHAIN, * LPWSAPROTOCOLCHAIN;\n\n/* constants used in dwProviderFlags from struct WSAPROTOCOL_INFO */\n#define PFL_MULTIPLE_PROTO_ENTRIES          0x00000001\n#define PFL_RECOMMENDED_PROTO_ENTRY         0x00000002\n#define PFL_HIDDEN                          0x00000004\n#define PFL_MATCHES_PROTOCOL_ZERO           0x00000008\n\n#define XP1_CONNECTIONLESS                  0x00000001\n#define XP1_GUARANTEED_DELIVERY             0x00000002\n#define XP1_GUARANTEED_ORDER                0x00000004\n#define XP1_MESSAGE_ORIENTED                0x00000008\n#define XP1_PSEUDO_STREAM                   0x00000010\n#define XP1_GRACEFUL_CLOSE                  0x00000020\n#define XP1_EXPEDITED_DATA                  0x00000040\n#define XP1_CONNECT_DATA                    0x00000080\n#define XP1_DISCONNECT_DATA                 0x00000100\n#define XP1_SUPPORT_BROADCAST               0x00000200\n#define XP1_SUPPORT_MULTIPOINT              0x00000400\n#define XP1_MULTIPOINT_CONTROL_PLANE        0x00000800\n#define XP1_MULTIPOINT_DATA_PLANE           0x00001000\n#define XP1_QOS_SUPPORTED                   0x00002000\n#define XP1_INTERRUPT                       0x00004000\n#define XP1_UNI_SEND                        0x00008000\n#define XP1_UNI_RECV                        0x00010000\n#define XP1_IFS_HANDLES                     0x00020000\n#define XP1_PARTIAL_MESSAGE                 0x00040000\n\n#define BIGENDIAN                           0x0000\n#define LITTLEENDIAN                        0x0001\n\n#define SECURITY_PROTOCOL_NONE              0x0000\n\ntypedef struct /*WS(pollfd)*/\n{\n    SOCKET fd;\n    SHORT events;\n    SHORT revents;\n} WSAPOLLFD;\n\n#define WSAPROTOCOL_LEN  255\ntypedef struct _WSAPROTOCOL_INFOA\n{\n    DWORD dwServiceFlags1;\n    DWORD dwServiceFlags2;\n    DWORD dwServiceFlags3;\n    DWORD dwServiceFlags4;\n    DWORD dwProviderFlags;\n    GUID ProviderId;\n    DWORD dwCatalogEntryId;\n    WSAPROTOCOLCHAIN ProtocolChain;\n    int iVersion;\n    int iAddressFamily;\n    int iMaxSockAddr;\n    int iMinSockAddr;\n    int iSocketType;\n    int iProtocol;\n    int iProtocolMaxOffset;\n    int iNetworkByteOrder;\n    int iSecurityScheme;\n    DWORD dwMessageSize;\n    DWORD dwProviderReserved;\n    CHAR szProtocol[WSAPROTOCOL_LEN+1];\n} WSAPROTOCOL_INFOA, * LPWSAPROTOCOL_INFOA;\n\ntypedef struct _WSAPROTOCOL_INFOW\n{\n    DWORD dwServiceFlags1;\n    DWORD dwServiceFlags2;\n    DWORD dwServiceFlags3;\n    DWORD dwServiceFlags4;\n    DWORD dwProviderFlags;\n    GUID ProviderId;\n    DWORD dwCatalogEntryId;\n    WSAPROTOCOLCHAIN ProtocolChain;\n    int iVersion;\n    int iAddressFamily;\n    int iMaxSockAddr;\n    int iMinSockAddr;\n    int iSocketType;\n    int iProtocol;\n    int iProtocolMaxOffset;\n    int iNetworkByteOrder;\n    int iSecurityScheme;\n    DWORD dwMessageSize;\n    DWORD dwProviderReserved;\n    WCHAR szProtocol[WSAPROTOCOL_LEN+1];\n} WSAPROTOCOL_INFOW, *LPWSAPROTOCOL_INFOW;\n\nDECL_WINELIB_TYPE_AW(WSAPROTOCOL_INFO)\nDECL_WINELIB_TYPE_AW(LPWSAPROTOCOL_INFO)\n\ntypedef struct _WSANETWORKEVENTS\n{\n    LONG lNetworkEvents;\n    int iErrorCode[FD_MAX_EVENTS];\n} WSANETWORKEVENTS, *LPWSANETWORKEVENTS;\n\ntypedef struct _WSANSClassInfoA\n{\n    LPSTR lpszName;\n    DWORD dwNameSpace;\n    DWORD dwValueType;\n    DWORD dwValueSize;\n    LPVOID lpValue;\n} WSANSCLASSINFOA, *PWSANSCLASSINFOA, *LPWSANSCLASSINFOA;\n\ntypedef struct _WSANSClassInfoW\n{\n    LPSTR lpszName;\n    DWORD dwNameSpace;\n    DWORD dwValueType;\n    DWORD dwValueSize;\n    LPVOID lpValue;\n} WSANSCLASSINFOW, *PWSANSCLASSINFOW, *LPWSANSCLASSINFOW;\n\nDECL_WINELIB_TYPE_AW(WSANSCLASSINFO)\nDECL_WINELIB_TYPE_AW(PWSANSCLASSINFO)\nDECL_WINELIB_TYPE_AW(LPWSANSCLASSINFO)\n\ntypedef struct _WSAServiceClassInfoA\n{\n    LPGUID lpServiceClassId;\n    LPSTR lpszServiceClassName;\n    DWORD dwCount;\n    LPWSANSCLASSINFOA lpClassInfos;\n} WSASERVICECLASSINFOA, *PWSASERVICECLASSINFOA, *LPWSASERVICECLASSINFOA;\n\ntypedef struct _WSAServiceClassInfoW\n{\n    LPGUID lpServiceClassId;\n    LPWSTR lpszServiceClassName;\n    DWORD dwCount;\n    LPWSANSCLASSINFOW lpClassInfos;\n} WSASERVICECLASSINFOW, *PWSASERVICECLASSINFOW, *LPWSASERVICECLASSINFOW;\n\n\nDECL_WINELIB_TYPE_AW(WSASERVICECLASSINFO)\nDECL_WINELIB_TYPE_AW(PWSASERVICECLASSINFO)\nDECL_WINELIB_TYPE_AW(LPWSASERVICECLASSINFO)\n\n#define WSAEVENT      HANDLE\n#define LPWSAEVENT    LPHANDLE\n#define WSAOVERLAPPED OVERLAPPED\ntypedef struct _OVERLAPPED* LPWSAOVERLAPPED;\n\n#define WSA_IO_PENDING             (ERROR_IO_PENDING)\n#define WSA_IO_INCOMPLETE          (ERROR_IO_INCOMPLETE)\n#define WSA_INVALID_HANDLE         (ERROR_INVALID_HANDLE)\n#define WSA_INVALID_PARAMETER      (ERROR_INVALID_PARAMETER)\n#define WSA_NOT_ENOUGH_MEMORY      (ERROR_NOT_ENOUGH_MEMORY)\n#define WSA_OPERATION_ABORTED      (ERROR_OPERATION_ABORTED)\n\n#define WSA_INVALID_EVENT          ((WSAEVENT)NULL)\n#define WSA_MAXIMUM_WAIT_EVENTS    (MAXIMUM_WAIT_OBJECTS)\n#define WSA_WAIT_FAILED            ((DWORD)-1)\n#define WSA_WAIT_EVENT_0           (WAIT_OBJECT_0)\n#define WSA_WAIT_IO_COMPLETION     (WAIT_IO_COMPLETION)\n#define WSA_WAIT_TIMEOUT           (WAIT_TIMEOUT)\n#define WSA_INFINITE               (INFINITE)\n\ntypedef unsigned int   GROUP;\n#define SG_UNCONSTRAINED_GROUP   0x01\n#define SG_CONSTRAINED_GROUP     0x02\n\n/*\n * FLOWSPEC and SERVICETYPE should eventually move to qos.h\n */\n\ntypedef ULONG   SERVICETYPE;\n\ntypedef struct _FLOWSPEC {\n       unsigned int      TokenRate;\n       unsigned int      TokenBucketSize;\n       unsigned int      PeakBandwidth;\n       unsigned int      Latency;\n       unsigned int      DelayVariation;\n       SERVICETYPE       ServiceType;\n       unsigned int      MaxSduSize;\n       unsigned int      MinimumPolicedSize;\n   } FLOWSPEC, *PFLOWSPEC, *LPFLOWSPEC;\n\ntypedef struct _QUALITYOFSERVICE {\n        FLOWSPEC           SendingFlowspec;\n        FLOWSPEC           ReceivingFlowspec;\n        WSABUF             ProviderSpecific;\n   } QOS, *LPQOS;\n\ntypedef int (CALLBACK *LPCONDITIONPROC)\n(\n    LPWSABUF lpCallerId,\n    LPWSABUF lpCallerData,\n    LPQOS lpSQOS,\n    LPQOS lpGQOS,\n    LPWSABUF lpCalleeId,\n    LPWSABUF lpCalleeData,\n    GROUP *g,\n    DWORD_PTR dwCallbackData\n);\n\ntypedef void (CALLBACK *LPWSAOVERLAPPED_COMPLETION_ROUTINE)\n(\n    DWORD dwError,\n    DWORD cbTransferred,\n    LPWSAOVERLAPPED lpOverlapped,\n    DWORD dwFlags\n);\n\n#ifndef _tagBLOB_DEFINED\n#define _tagBLOB_DEFINED\n#define _BLOB_DEFINED\n#define _LPBLOB_DEFINED\ntypedef struct _BLOB {\n        ULONG   cbSize;\n        BYTE   *pBlobData;\n} BLOB, *LPBLOB;\n#endif\n\n/*   addressfamily protocol pairs */\ntypedef struct _AFPROTOCOLS {\n        INT     iAddressFamily;\n        INT     iProtocol;\n} AFPROTOCOLS, *PAFPROTOCOLS, *LPAFPROTOCOLS;\n\n/* client query definitions */\ntypedef enum _WSAEcomparator {\n        COMP_EQUAL = 0,\n        COMP_NOTLESS\n} WSAECOMPARATOR, *PWSAECOMPARATOR, *LPWSAECOMPARATOR;\n\ntypedef struct _WSAVersion {\n        DWORD           dwVersion;\n        WSAECOMPARATOR  ecHow;\n} WSAVERSION, *PWSAVERSION, *LPWSAVERSION;\n\n\ntypedef struct _WSAQuerySetA {\n        DWORD           dwSize;\n        LPSTR           lpszServiceInstanceName;\n        LPGUID          lpServiceClassId;\n        LPWSAVERSION    lpVersion;\n        LPSTR           lpszComment;\n        DWORD           dwNameSpace;\n        LPGUID          lpNSProviderId;\n        LPSTR           lpszContext;\n        DWORD           dwNumberOfProtocols;\n        LPAFPROTOCOLS   lpafpProtocols;\n        LPSTR           lpszQueryString;\n        DWORD           dwNumberOfCsAddrs;\n        LPCSADDR_INFO   lpcsaBuffer;\n        DWORD           dwOutputFlags;\n        LPBLOB          lpBlob;\n} WSAQUERYSETA, *PWSAQUERYSETA, *LPWSAQUERYSETA;\n\ntypedef struct _WSAQuerySetW {\n        DWORD           dwSize;\n        LPWSTR          lpszServiceInstanceName;\n        LPGUID          lpServiceClassId;\n        LPWSAVERSION    lpVersion;\n        LPWSTR          lpszComment;\n        DWORD           dwNameSpace;\n        LPGUID          lpNSProviderId;\n        LPWSTR          lpszContext;\n        DWORD           dwNumberOfProtocols;\n        LPAFPROTOCOLS   lpafpProtocols;\n        LPWSTR          lpszQueryString;\n        DWORD           dwNumberOfCsAddrs;\n        LPCSADDR_INFO   lpcsaBuffer;\n        DWORD           dwOutputFlags;\n        LPBLOB          lpBlob;\n} WSAQUERYSETW, *PWSAQUERYSETW, *LPWSAQUERYSETW;\n\nDECL_WINELIB_TYPE_AW(WSAQUERYSET)\nDECL_WINELIB_TYPE_AW(PWSAQUERYSET)\nDECL_WINELIB_TYPE_AW(LPWSAQUERYSET)\n\ntypedef enum _WSAESETSERVICEOP {\n        RNRSERVICE_REGISTER = 0,\n        RNRSERVICE_DEREGISTER,\n        RNRSERVICE_DELETE\n} WSAESETSERVICEOP, *PWSAESETSERVICEOP, *LPWSAESETSERVICEOP;\n\ntypedef struct _WSANAMESPACE_INFOA {\n        GUID    NSProviderId;\n        DWORD   dwNameSpace;\n        BOOL    fActive;\n        DWORD   dwVersion;\n        LPSTR   lpszIdentifier;\n} WSANAMESPACE_INFOA, *PWSANAMESPACE_INFOA, *LPWSANAMESPACE_INFOA;\n\ntypedef struct _WSANAMESPACE_INFOW {\n        GUID    NSProviderId;\n        DWORD   dwNameSpace;\n        BOOL    fActive;\n        DWORD   dwVersion;\n        LPWSTR  lpszIdentifier;\n} WSANAMESPACE_INFOW, *PWSANAMESPACE_INFOW, *LPWSANAMESPACE_INFOW;\n\nDECL_WINELIB_TYPE_AW(WSANAMESPACE_INFO)\nDECL_WINELIB_TYPE_AW(PWSANAMESPACE_INFO)\nDECL_WINELIB_TYPE_AW(LPWSANAMESPACE_INFO)\n\ntypedef enum _WSACOMPLETIONTYPE {\n    NSP_NOTIFY_IMMEDIATELY = 0,\n    NSP_NOTIFY_HWND = 1,\n    NSP_NOTIFY_EVENT = 2,\n    NSP_NOTIFY_PORT = 3,\n    NSP_NOTIFY_APC = 4\n} WSACOMPLETIONTYPE, * PWSACOMPLETIONTYPE, * LPWSACOMPLETIONTYPE;\n\ntypedef struct _WSACOMPLETION {\n    WSACOMPLETIONTYPE Type;\n    union {\n        struct {\n            HWND hWnd;\n            UINT uMsg;\n            WPARAM context;\n        } WindowMessage;\n        struct {\n            LPWSAOVERLAPPED lpOverlapped;\n        } Event;\n        struct {\n            LPWSAOVERLAPPED lpOverlapped;\n            LPWSAOVERLAPPED_COMPLETION_ROUTINE lpfnCompletionProc;\n        } Apc;\n        struct {\n            LPWSAOVERLAPPED lpOverlapped;\n            HANDLE hPort;\n            ULONG_PTR Key;\n        } Port;\n    } Parameters;\n} WSACOMPLETION, *PWSACOMPLETION, *LPWSACOMPLETION;\n\n/*\n * Winsock Function Typedefs\n *\n * Remember to keep this section in sync with the\n * \"Prototypes\" section in winsock.h.\n */\n#if WS_API_TYPEDEFS\ntypedef HANDLE (WINAPI *LPFN_WSAASYNCGETHOSTBYADDR)(HWND,WS(u_int),const char*,int,int,char*,int);\ntypedef HANDLE (WINAPI *LPFN_WSAASYNCGETHOSTBYNAME)(HWND,WS(u_int),const char*,char*,int);\ntypedef HANDLE (WINAPI *LPFN_WSAASYNCGETPROTOBYNAME)(HWND,WS(u_int),const char*,char*,int);\ntypedef HANDLE (WINAPI *LPFN_WSAASYNCGETPROTOBYNUMBER)(HWND,WS(u_int),int,char*,int);\ntypedef HANDLE (WINAPI *LPFN_WSAASYNCGETSERVBYNAME)(HWND,WS(u_int),const char*,const char*,char*,int);\ntypedef HANDLE (WINAPI *LPFN_WSAASYNCGETSERVBYPORT)(HWND,WS(u_int),int,const char*,char*,int);\ntypedef int (WINAPI *LPFN_WSAASYNCSELECT)(SOCKET,HWND,WS(u_int),LONG);\ntypedef int (WINAPI *LPFN_WSACANCELASYNCREQUEST)(HANDLE);\ntypedef int (WINAPI *LPFN_WSACANCELBLOCKINGCALL)(void);\ntypedef int (WINAPI *LPFN_WSACLEANUP)(void);\ntypedef int (WINAPI *LPFN_WSAGETLASTERROR)(void);\ntypedef BOOL (WINAPI *LPFN_WSAISBLOCKING)(void);\ntypedef FARPROC (WINAPI *LPFN_WSASETBLOCKINGHOOK)(FARPROC);\ntypedef void (WINAPI *LPFN_WSASETLASTERROR)(int);\ntypedef int (WINAPI *LPFN_WSASTARTUP)(WORD,LPWSADATA);\ntypedef int (WINAPI *LPFN_WSAUNHOOKBLOCKINGHOOK)(void);\n\ntypedef SOCKET (WINAPI *LPFN_ACCEPT)(SOCKET,struct WS(sockaddr)*,int*);\ntypedef int (WINAPI *LPFN_BIND)(SOCKET,const struct WS(sockaddr)*,int);\ntypedef int (WINAPI *LPFN_CLOSESOCKET)(SOCKET);\ntypedef int (WINAPI *LPFN_CONNECT)(SOCKET,const struct WS(sockaddr)*,int);\ntypedef struct WS(hostent)* (WINAPI *LPFN_GETHOSTBYADDR)(const char*,int,int);\ntypedef struct WS(hostent)* (WINAPI *LPFN_GETHOSTBYNAME)(const char*);\ntypedef int (WINAPI *LPFN_GETHOSTNAME)(char*,int);\ntypedef int (WINAPI *LPFN_GETPEERNAME)(SOCKET,struct WS(sockaddr)*,int*);\ntypedef struct WS(protoent)* (WINAPI *LPFN_GETPROTOBYNAME)(const char*);\ntypedef struct WS(protoent)* (WINAPI *LPFN_GETPROTOBYNUMBER)(int);\n#ifdef WS_DEFINE_SELECT\ntypedef int (WINAPI* LPFN_SELECT)(int,WS(fd_set)*,WS(fd_set)*,WS(fd_set)*,const struct WS(timeval)*);\n#endif\ntypedef struct WS(servent)* (WINAPI *LPFN_GETSERVBYNAME)(const char*,const char*);\ntypedef struct WS(servent)* (WINAPI *LPFN_GETSERVBYPORT)(int,const char*);\ntypedef int (WINAPI *LPFN_GETSOCKNAME)(SOCKET,struct WS(sockaddr)*,int*);\ntypedef int (WINAPI *LPFN_GETSOCKOPT)(SOCKET,int,int,char*,int*);\ntypedef ULONG (WINAPI *LPFN_HTONL)(ULONG);\ntypedef WS(u_short) (WINAPI *LPFN_HTONS)(WS(u_short));\ntypedef ULONG (WINAPI *LPFN_INET_ADDR)(const char*);\ntypedef char* (WINAPI *LPFN_INET_NTOA)(struct WS(in_addr));\ntypedef int (WINAPI *LPFN_IOCTLSOCKET)(SOCKET,LONG,ULONG*);\ntypedef int (WINAPI *LPFN_LISTEN)(SOCKET,int);\ntypedef ULONG (WINAPI *LPFN_NTOHL)(ULONG);\ntypedef WS(u_short) (WINAPI *LPFN_NTOHS)(WS(u_short));\ntypedef int (WINAPI *LPFN_RECV)(SOCKET,char*,int,int);\ntypedef int (WINAPI *LPFN_RECVFROM)(SOCKET,char*,int,int,struct WS(sockaddr)*,int*);\ntypedef int (WINAPI *LPFN_SEND)(SOCKET,const char*,int,int);\ntypedef int (WINAPI *LPFN_SENDTO)(SOCKET,const char*,int,int,const struct WS(sockaddr)*,int);\ntypedef int (WINAPI *LPFN_SETSOCKOPT)(SOCKET,int,int,const char*,int);\ntypedef int (WINAPI *LPFN_SHUTDOWN)(SOCKET,int);\ntypedef SOCKET (WINAPI *LPFN_SOCKET)(int,int,int);\n#endif /* WS_API_TYPEDEFS */\n\n\n\n/*\n * Winsock2 Prototypes\n *\n * Remember to keep this section in sync with the\n * \"Winsock2 Function Typedefs\" section below.\n */\n#if WS_API_PROTOTYPES\nSOCKET WINAPI WSAAccept(SOCKET,struct WS(sockaddr)*,LPINT,LPCONDITIONPROC,DWORD_PTR);\nINT WINAPI WSAAddressToStringA(LPSOCKADDR,DWORD,LPWSAPROTOCOL_INFOA,LPSTR,LPDWORD);\nINT WINAPI WSAAddressToStringW(LPSOCKADDR,DWORD,LPWSAPROTOCOL_INFOW,LPWSTR,LPDWORD);\n#define WSAAddressToString         WINELIB_NAME_AW(WSAAddressToString)\nBOOL WINAPI WSACloseEvent(WSAEVENT);\nint WINAPI WSAConnect(SOCKET,const struct WS(sockaddr)*,int,LPWSABUF,LPWSABUF,LPQOS,LPQOS);\nWSAEVENT WINAPI WSACreateEvent(void);\nINT WINAPI WSADuplicateSocketA(SOCKET,DWORD,LPWSAPROTOCOL_INFOA);\nINT WINAPI WSADuplicateSocketW(SOCKET,DWORD,LPWSAPROTOCOL_INFOW);\n#define WSADuplicateSocket         WINELIB_NAME_AW(WSADuplicateSocket)\nINT WINAPI WSAEnumNameSpaceProvidersA(LPDWORD,LPWSANAMESPACE_INFOA);\nINT WINAPI WSAEnumNameSpaceProvidersW(LPDWORD,LPWSANAMESPACE_INFOW);\n#define WSAEnumNameSpaceProviders  WINELIB_NAME_AW(WSAEnumNameSpaceProviders)\nint WINAPI WSAEnumNetworkEvents(SOCKET,WSAEVENT,LPWSANETWORKEVENTS);\nint WINAPI WSAEnumProtocolsA(LPINT,LPWSAPROTOCOL_INFOA,LPDWORD);\nint WINAPI WSAEnumProtocolsW(LPINT,LPWSAPROTOCOL_INFOW,LPDWORD);\n#define WSAEnumProtocols           WINELIB_NAME_AW(WSAEnumProtocols)\nint WINAPI WSAEventSelect(SOCKET,WSAEVENT,LONG);\nBOOL WINAPI WSAGetOverlappedResult(SOCKET,LPWSAOVERLAPPED,LPDWORD,BOOL,LPDWORD);\nBOOL WINAPI WSAGetQOSByName(SOCKET,LPWSABUF,LPQOS);\nINT WINAPI WSAGetServiceClassInfoA(LPGUID,LPGUID,LPDWORD,LPWSASERVICECLASSINFOA);\nINT WINAPI WSAGetServiceClassInfoW(LPGUID,LPGUID,LPDWORD,LPWSASERVICECLASSINFOW);\n#define WSAGetServiceClassInfo     WINELIB_NAME_AW(WSAGetServiceClassInfo)\nINT WINAPI WSAGetServiceClassNameByClassIdA(LPGUID,LPSTR,LPDWORD);\nINT WINAPI WSAGetServiceClassNameByClassIdW(LPGUID,LPWSTR,LPDWORD);\n#define WSAGetServiceClassNameByClassId WINELIB_NAME_AW(WSAGetServiceClassNameByClassId)\nint WINAPI WSAHtonl(SOCKET,ULONG,ULONG*);\nint WINAPI WSAHtons(SOCKET,WS(u_short),WS(u_short)*);\nint WINAPI WSAInstallServiceClassA(LPWSASERVICECLASSINFOA);\nint WINAPI WSAInstallServiceClassW(LPWSASERVICECLASSINFOW);\n#define WSAInstallServiceClass     WINELIB_NAME_AW(WSAInstallServiceClass)\nint WINAPI WSAIoctl(SOCKET,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);\nSOCKET WINAPI WSAJoinLeaf(SOCKET,const struct WS(sockaddr)*,int,LPWSABUF,LPWSABUF,LPQOS,LPQOS,DWORD);\nINT WINAPI WSALookupServiceBeginA(LPWSAQUERYSETA,DWORD,LPHANDLE);\nINT WINAPI WSALookupServiceBeginW(LPWSAQUERYSETW,DWORD,LPHANDLE);\n#define WSALookupServiceBegin      WINELIB_NAME_AW(WSALookupServiceBegin)\nINT WINAPI WSALookupServiceEnd(HANDLE);\nINT WINAPI WSALookupServiceNextA(HANDLE,DWORD,LPDWORD,LPWSAQUERYSETA);\nINT WINAPI WSALookupServiceNextW(HANDLE,DWORD,LPDWORD,LPWSAQUERYSETW);\n#define WSALookupServiceNext       WINELIB_NAME_AW(WSALookupServiceNext) \nint WINAPI WSANSPIoctl(HANDLE,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSACOMPLETION);\nint WINAPI WSANtohl(SOCKET,ULONG,ULONG*);\nint WINAPI WSANtohs(SOCKET,WS(u_short),WS(u_short)*);\nint WINAPI WSAPoll(WSAPOLLFD*,ULONG,int);\nINT WINAPI WSAProviderConfigChange(LPHANDLE,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);\nint WINAPI WSARecv(SOCKET,LPWSABUF,DWORD,LPDWORD,LPDWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);\nint WINAPI WSARecvDisconnect(SOCKET,LPWSABUF);\nint WINAPI WSARecvFrom(SOCKET,LPWSABUF,DWORD,LPDWORD,LPDWORD,struct WS(sockaddr)*,LPINT,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);\nINT WINAPI WSARemoveServiceClass(LPGUID);\nBOOL WINAPI WSAResetEvent(WSAEVENT);\nint WINAPI WSASend(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);\nint WINAPI WSASendDisconnect(SOCKET,LPWSABUF);\nint WINAPI WSASendTo(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,const struct WS(sockaddr)*,int,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);\nBOOL WINAPI WSASetEvent(WSAEVENT);\nINT WINAPI WSASetServiceA(LPWSAQUERYSETA,WSAESETSERVICEOP,DWORD);\nINT WINAPI WSASetServiceW(LPWSAQUERYSETW,WSAESETSERVICEOP,DWORD);\n#define WSASetService   WINELIB_NAME_AW(WSASetService)\nSOCKET WINAPI WSASocketA(int,int,int,LPWSAPROTOCOL_INFOA,GROUP,DWORD);\nSOCKET WINAPI WSASocketW(int,int,int,LPWSAPROTOCOL_INFOW,GROUP,DWORD);\n#define WSASocket WINELIB_NAME_AW(WSASocket)\nINT WINAPI WSAStringToAddressA(LPSTR,INT,LPWSAPROTOCOL_INFOA,LPSOCKADDR,LPINT);\nINT WINAPI WSAStringToAddressW(LPWSTR,INT,LPWSAPROTOCOL_INFOW,LPSOCKADDR,LPINT);\n#define WSAStringToAddress WINELIB_NAME_AW(WSAStringToAddress)\nDWORD WINAPI WSAWaitForMultipleEvents(DWORD,const WSAEVENT*,BOOL,DWORD,BOOL);\n#endif /* WS_API_PROTOTYPES */\n\n\n\n/*\n * Winsock2 Function Typedefs\n *\n * Remember to keep this section in sync with the\n * \"Winsock2 Prototypes\" section above.\n */\n#if WS_API_TYPEDEFS\ntypedef SOCKET (WINAPI *LPFN_WSAACCEPT)(SOCKET,struct WS(sockaddr)*,LPINT,LPCONDITIONPROC,DWORD_PTR);\ntypedef INT (WINAPI *LPFN_WSAADDRESSTOSTRINGA)(LPSOCKADDR,DWORD,LPWSAPROTOCOL_INFOA,LPSTR,LPDWORD);\ntypedef INT (WINAPI *LPFN_WSAADDRESSTOSTRINGW)(LPSOCKADDR,DWORD,LPWSAPROTOCOL_INFOW,LPWSTR,LPDWORD);\n#define LPFN_WSAADDRESSTOSTRING    WINELIB_NAME_AW(LPFN_WSAADDRESSTOSTRING)\ntypedef BOOL (WINAPI *LPFN_WSACLOSEEVENT)(WSAEVENT);\ntypedef int (WINAPI *LPFN_WSACONNECT)(SOCKET,const struct WS(sockaddr)*,int,LPWSABUF,LPWSABUF,LPQOS,LPQOS);\ntypedef WSAEVENT (WINAPI *LPFN_WSACREATEEVENT)(void);\ntypedef INT (WINAPI *LPFN_WSADUPLICATESOCKETA)(SOCKET,DWORD,LPWSAPROTOCOL_INFOA);\ntypedef INT (WINAPI *LPFN_WSADUPLICATESOCKETW)(SOCKET,DWORD,LPWSAPROTOCOL_INFOW);\n#define LPFN_WSADUPLICATESOCKET    WINELIB_NAME_AW(LPFN_WSADUPLICATESOCKET)\ntypedef INT (WINAPI *LPFN_WSAENUMNAMESPACEPROVIDERSA)(LPDWORD,LPWSANAMESPACE_INFOA);\ntypedef INT (WINAPI *LPFN_WSAENUMNAMESPACEPROVIDERSW)(LPDWORD,LPWSANAMESPACE_INFOW);\n#define LPFN_WSAENUMNAMESPACEPROVIDERS WINELIB_NAME_AW(LPFN_WSAENUMNAMESPACEPROVIDERS)\ntypedef int (WINAPI *LPFN_WSAENUMNETWORKEVENTS)(SOCKET,WSAEVENT,LPWSANETWORKEVENTS);\ntypedef int (WINAPI *LPFN_WSAENUMPROTOCOLSA)(LPINT,LPWSAPROTOCOL_INFOA,LPDWORD);\ntypedef int (WINAPI *LPFN_WSAENUMPROTOCOLSW)(LPINT,LPWSAPROTOCOL_INFOW,LPDWORD);\n#define LPFN_WSAENUMPROTOCOLS      WINELIB_NAME_AW(LPFN_WSAENUMPROTOCOLS)\ntypedef int (WINAPI *LPFN_WSAEVENTSELECT)(SOCKET,WSAEVENT,LONG);\ntypedef BOOL (WINAPI *LPFN_WSAGETOVERLAPPEDRESULT)(SOCKET,LPWSAOVERLAPPED,LPDWORD,BOOL,LPDWORD);\ntypedef BOOL (WINAPI *LPFN_WSAGETQOSBYNAME)(SOCKET,LPWSABUF,LPQOS);\ntypedef INT (WINAPI *LPFN_WSAGETSERVICECLASSINFOA)(LPGUID,LPGUID,LPDWORD,LPWSASERVICECLASSINFOA);\ntypedef INT (WINAPI *LPFN_WSAGETSERVICECLASSINFOW)(LPGUID,LPGUID,LPDWORD,LPWSASERVICECLASSINFOW);\n#define LPFN_LPFNWSAGETSERVICECLASSINFO WINELIB_NAME_AW(LPFN_LPFNWSAGETSERVICECLASSINFO)\ntypedef INT (WINAPI *LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDA)(LPGUID,LPSTR,LPDWORD);\ntypedef INT (WINAPI *LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDW)(LPGUID,LPWSTR,LPDWORD);\n#define LPFN_WSAGETSERVICECLASSNAMEBYCLASSID WINELIB_NAME_AW(LPFN_WSAGETSERVICECLASSNAMEBYCLASSID)\ntypedef int (WINAPI *LPFN_WSAHTONL)(SOCKET,ULONG,ULONG*);\ntypedef int (WINAPI *LPFN_WSAHTONS)(SOCKET,WS(u_short),WS(u_short)*);\ntypedef int (WINAPI *LPFN_WSAINSTALLSERVICECLASSA)(LPWSASERVICECLASSINFOA);\ntypedef int (WINAPI *LPFN_WSAINSTALLSERVICECLASSW)(LPWSASERVICECLASSINFOW);\ntypedef int (WINAPI *LPFN_WSAIOCTL)(SOCKET,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);\ntypedef int (WINAPI *LPFN_WSAJOINLEAF)(SOCKET,const struct WS(sockaddr)*,int,LPWSABUF,LPWSABUF,LPQOS,LPQOS,DWORD);\ntypedef INT (WINAPI *LPFN_WSALOOKUPSERVICEBEGINA)(LPWSAQUERYSETA,DWORD,LPHANDLE);\ntypedef INT (WINAPI *LPFN_WSALOOKUPSERVICEBEGINW)(LPWSAQUERYSETW,DWORD,LPHANDLE);\n#define LPFN_WSALOOKUPSERVICEBEGIN WINELIB_NAME_AW(LPFN_WSALOOKUPSERVICEBEGIN)\ntypedef INT (WINAPI *LPFN_WSALOOKUPSERVICEEND)(HANDLE);\ntypedef INT (WINAPI *LPFN_WSALOOKUPSERVICENEXTA)(HANDLE,DWORD,LPDWORD,LPWSAQUERYSETA);\ntypedef INT (WINAPI *LPFN_WSALOOKUPSERVICENEXTW)(HANDLE,DWORD,LPDWORD,LPWSAQUERYSETW);\n#define LPFN_WSALOOKUPSERVICENEXT WINELIB_NAME_AW(LPFN_WSALOOKUPSERVICENEXT)\ntypedef int (WINAPI *LPFN_WSANSPIOCTL)(HANDLE,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSACOMPLETION);\ntypedef int (WINAPI *LPFN_WSANTOHL)(SOCKET,ULONG,ULONG*);\ntypedef int (WINAPI *LPFN_WSANTOHS)(SOCKET,WS(u_short),WS(u_short)*);\ntypedef INT (WINAPI *LPFN_WSAPROVIDERCONFIGCHANGE)(LPHANDLE,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);\ntypedef int (WINAPI *LPFN_WSAPOLL)(WSAPOLLFD*,ULONG,int);\ntypedef int (WINAPI *LPFN_WSARECV)(SOCKET,LPWSABUF,DWORD,LPDWORD,LPDWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);\ntypedef int (WINAPI *LPFN_WSARECVDISCONNECT)(SOCKET,LPWSABUF);\ntypedef int (WINAPI *LPFN_WSARECVFROM)(SOCKET,LPWSABUF,DWORD,LPDWORD,LPDWORD,struct WS(sockaddr)*,LPINT,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);\ntypedef INT (WINAPI *LPFN_WSAREMOVESERVICECLASS)(LPGUID);\ntypedef BOOL (WINAPI *LPFN_WSARESETEVENT)(WSAEVENT);\ntypedef int (WINAPI *LPFN_WSASEND)(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);\ntypedef int (WINAPI *LPFN_WSASENDDISCONNECT)(SOCKET,LPWSABUF);\ntypedef int (WINAPI *LPFN_WSASENDTO)(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,const struct WS(sockaddr)*,int,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);\ntypedef BOOL (WINAPI *LPFN_WSASETEVENT)(WSAEVENT);\ntypedef INT (WINAPI *LPFN_WSASETSERVICEA)(LPWSAQUERYSETA,WSAESETSERVICEOP,DWORD);\ntypedef INT (WINAPI *LPFN_WSASETSERVICEW)(LPWSAQUERYSETW,WSAESETSERVICEOP,DWORD);\n#define LPFN_WSASETSERVICE WINELIB_NAME_AW(LPFN_WSASETSERVICE)\ntypedef SOCKET (WINAPI *LPFN_WSASOCKETA)(int,int,int,LPWSAPROTOCOL_INFOA,GROUP,DWORD);\ntypedef SOCKET (WINAPI *LPFN_WSASOCKETW)(int,int,int,LPWSAPROTOCOL_INFOW,GROUP,DWORD);\ntypedef INT (WINAPI *LPFN_WSASTRINGTOADDRESSA)(LPSTR,INT,LPWSAPROTOCOL_INFOA,LPSOCKADDR,LPINT);\ntypedef INT (WINAPI *LPFN_WSASTRINGTOADDRESSW)(LPSTR,INT,LPWSAPROTOCOL_INFOA,LPSOCKADDR,LPINT);\n#define LPFN_WSASOCKET             WINELIB_NAME_AW(LPFN_WSASOCKET)\n#define LPFN_WSASTRINGTOADDRESS    WINELIB_NAME_AW(LPFN_WSASTRINGTOADDRESS)\ntypedef DWORD (WINAPI *LPFN_WSAWAITFORMULTIPLEEVENTS)(DWORD,const WSAEVENT*,BOOL,DWORD,BOOL);\n#endif /* WS_API_TYPEDEFS */\n\n\n/* Condition function return values */\n#define CF_ACCEPT       0x0000\n#define CF_REJECT       0x0001\n#define CF_DEFER        0x0002\n\n#ifdef __cplusplus\n}\n#endif\n\n#undef WS\n#undef WS_API_PROTOTYPES\n#undef WS_API_TYPEDEFS\n\n#endif /* __WINSOCK2API__ */\n"
  },
  {
    "path": "wine/windows/winspool.h",
    "content": "/* Definitions for printing\n *\n * Copyright 1998 Huw Davies, Andreas Mohr\n *\n * Portions Copyright (c) 1999 Corel Corporation\n *                             (Paul Quinn, Albert Den Haan)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef __WINE_WINSPOOL_H\n#define __WINE_WINSPOOL_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* DEFINES */\n\n#define PRINTER_ATTRIBUTE_QUEUED            0x00000001\n#define PRINTER_ATTRIBUTE_DIRECT            0x00000002\n#define PRINTER_ATTRIBUTE_DEFAULT           0x00000004\n#define PRINTER_ATTRIBUTE_SHARED            0x00000008\n#define PRINTER_ATTRIBUTE_NETWORK           0x00000010\n#define PRINTER_ATTRIBUTE_HIDDEN            0x00000020\n#define PRINTER_ATTRIBUTE_LOCAL             0x00000040\n#define PRINTER_ATTRIBUTE_ENABLE_DEVQ       0x00000080\n#define PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS   0x00000100\n#define PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST 0x00000200\n#define PRINTER_ATTRIBUTE_WORK_OFFLINE      0x00000400\n#define PRINTER_ATTRIBUTE_ENABLE_BIDI       0x00000800\n#define PRINTER_ATTRIBUTE_RAW_ONLY          0x00001000\n#define PRINTER_ATTRIBUTE_PUBLISHED         0x00002000\n\n#define PRINTER_CONTROL_PAUSE      1\n#define PRINTER_CONTROL_RESUME     2\n#define PRINTER_CONTROL_PURGE      3\n#define PRINTER_CONTROL_SET_STATUS 4\n\n#define PRINTER_ENUM_DEFAULT     0x00000001\n#define PRINTER_ENUM_LOCAL       0x00000002\n#define PRINTER_ENUM_CONNECTIONS 0x00000004\n#define PRINTER_ENUM_FAVORITE    0x00000004\n#define PRINTER_ENUM_NAME        0x00000008\n#define PRINTER_ENUM_REMOTE      0x00000010\n#define PRINTER_ENUM_SHARED      0x00000020\n#define PRINTER_ENUM_NETWORK     0x00000040\n\n#define PRINTER_ENUM_EXPAND      0x00004000\n#define PRINTER_ENUM_CONTAINER   0x00008000\n\n#define PRINTER_ENUM_ICONMASK    0x00ff0000\n#define PRINTER_ENUM_ICON1       0x00010000\n#define PRINTER_ENUM_ICON2       0x00020000\n#define PRINTER_ENUM_ICON3       0x00040000\n#define PRINTER_ENUM_ICON4       0x00080000\n#define PRINTER_ENUM_ICON5       0x00100000\n#define PRINTER_ENUM_ICON6       0x00200000\n#define PRINTER_ENUM_ICON7       0x00400000\n#define PRINTER_ENUM_ICON8       0x00800000\n#define PRINTER_ENUM_HIDE        0x01000000\n\n\n/* various printer statuses */\n#define PRINTER_STATUS_PAUSED            0x00000001\n#define PRINTER_STATUS_ERROR             0x00000002\n#define PRINTER_STATUS_PENDING_DELETION  0x00000004\n#define PRINTER_STATUS_PAPER_JAM         0x00000008\n#define PRINTER_STATUS_PAPER_OUT         0x00000010\n#define PRINTER_STATUS_MANUAL_FEED       0x00000020\n#define PRINTER_STATUS_PAPER_PROBLEM     0x00000040\n#define PRINTER_STATUS_OFFLINE           0x00000080\n#define PRINTER_STATUS_IO_ACTIVE         0x00000100\n#define PRINTER_STATUS_BUSY              0x00000200\n#define PRINTER_STATUS_PRINTING          0x00000400\n#define PRINTER_STATUS_OUTPUT_BIN_FULL   0x00000800\n#define PRINTER_STATUS_NOT_AVAILABLE     0x00001000\n#define PRINTER_STATUS_WAITING           0x00002000\n#define PRINTER_STATUS_PROCESSING        0x00004000\n#define PRINTER_STATUS_INITIALIZING      0x00008000\n#define PRINTER_STATUS_WARMING_UP        0x00010000\n#define PRINTER_STATUS_TONER_LOW         0x00020000\n#define PRINTER_STATUS_NO_TONER          0x00040000\n#define PRINTER_STATUS_PAGE_PUNT         0x00080000\n#define PRINTER_STATUS_USER_INTERVENTION 0x00100000\n#define PRINTER_STATUS_OUT_OF_MEMORY     0x00200000\n#define PRINTER_STATUS_DOOR_OPEN         0x00400000\n#define PRINTER_STATUS_SERVER_UNKNOWN    0x00800000\n#define PRINTER_STATUS_POWER_SAVE        0x01000000\n#define PRINTER_STATUS_SERVER_OFFLINE    0x02000000\n#define PRINTER_STATUS_DRIVER_UPDATE_NEEDED 0x04000000\n\n#define NO_PRIORITY  0\n#define MAX_PRIORITY 99\n#define MIN_PRIORITY 1\n#define DEF_PRIORITY 1\n\n#define JOB_CONTROL_PAUSE             1\n#define JOB_CONTROL_RESUME            2\n#define JOB_CONTROL_CANCEL            3\n#define JOB_CONTROL_RESTART           4\n#define JOB_CONTROL_DELETE            5\n#define JOB_CONTROL_SENT_TO_PRINTER   6\n#define JOB_CONTROL_LAST_PAGE_EJECTED 7\n\n#define JOB_STATUS_PAUSED       0x0001\n#define JOB_STATUS_ERROR        0x0002\n#define JOB_STATUS_DELETING     0x0004\n#define JOB_STATUS_SPOOLING     0x0008\n#define JOB_STATUS_PRINTING     0x0010\n#define JOB_STATUS_OFFLINE      0x0020\n#define JOB_STATUS_PAPEROUT     0x0040\n#define JOB_STATUS_PRINTED      0x0080\n#define JOB_STATUS_DELETED      0x0100\n#define JOB_STATUS_BLOCKED_DEVQ 0x0200\n#define JOB_STATUS_USER_INTERVENTION 0x0400\n\n#define JOB_POSITION_UNSPECIFIED 1\n\n#define DI_CHANNEL 1\n#define DI_READ_SPOOL_JOB 3\n\n#define FORM_USER    0\n#define FORM_BUILTIN 1\n#define FORM_PRINTER 2\n\n#define PORT_TYPE_WRITE        1\n#define PORT_TYPE_READ         2\n#define PORT_TYPE_REDIRECTED   4\n#define PORT_TYPE_NET_ATTACHED 8\n\n#define PORT_STATUS_TYPE_ERROR   1\n#define PORT_STATUS_TYPE_WARNING 2\n#define PORT_STATUS_TYPE_INFO    3\n\n#define PORT_STATUS_OFFLINE           1\n#define PORT_STATUS_PAPER_JAM         2\n#define PORT_STATUS_PAPER_OUT         3\n#define PORT_STATUS_OUTPUT_BIN_FULL   4\n#define PORT_STATUS_PAPER_PROBLEM     5\n#define PORT_STATUS_NO_TONER          6\n#define PORT_STATUS_DOOR_OPEN         7\n#define PORT_STATUS_USER_INTERVENTION 8\n#define PORT_STATUS_OUT_OF_MEMORY     9\n#define PORT_STATUS_TONER_LOW         10\n#define PORT_STATUS_WARMING_UP        11\n#define PORT_STATUS_POWER_SAVE        12\n\n#define PRINTER_NOTIFY_TYPE 0\n#define JOB_NOTIFY_TYPE     1\n\n#define PRINTER_NOTIFY_FIELD_SERVER_NAME     0x00\n#define PRINTER_NOTIFY_FIELD_PRINTER_NAME    0x01\n#define PRINTER_NOTIFY_FIELD_SHARE_NAME      0x02\n#define PRINTER_NOTIFY_FIELD_PORT_NAME       0x03\n#define PRINTER_NOTIFY_FIELD_DRIVER_NAME     0x04\n#define PRINTER_NOTIFY_FIELD_COMMENT         0x05\n#define PRINTER_NOTIFY_FIELD_LOCATION        0x06\n#define PRINTER_NOTIFY_FIELD_DEVMODE         0x07\n#define PRINTER_NOTIFY_FIELD_SEPFILE         0x08\n#define PRINTER_NOTIFY_FIELD_PRINT_PROCESSOR 0x09\n#define PRINTER_NOTIFY_FIELD_PARAMETERS      0x0a\n#define PRINTER_NOTIFY_FIELD_DATATYPE        0x0b\n#define PRINTER_NOTIFY_FIELD_SECURITY_DESCRIPTOR 0x0c\n#define PRINTER_NOTIFY_FIELD_ATTRIBUTES      0x0d\n#define PRINTER_NOTIFY_FIELD_PRIORITY        0x0e\n#define PRINTER_NOTIFY_FIELD_DEFAULT_PRIORITY 0x0f\n#define PRINTER_NOTIFY_FIELD_START_TIME      0x10\n#define PRINTER_NOTIFY_FIELD_UNTIL_TIME      0x11\n#define PRINTER_NOTIFY_FIELD_STATUS          0x12\n#define PRINTER_NOTIFY_FIELD_STATUS_STRING   0x13\n#define PRINTER_NOTIFY_FIELD_CJOBS           0x14\n#define PRINTER_NOTIFY_FIELD_AVERAGE_PPM     0x15\n#define PRINTER_NOTIFY_FIELD_TOTAL_PAGES     0x16\n#define PRINTER_NOTIFY_FIELD_PAGES_PRINTED   0x17\n#define PRINTER_NOTIFY_FIELD_TOTAL_BYTES     0x18\n#define PRINTER_NOTIFY_FIELD_BYTES_PRINTED   0x19\n\n#define JOB_NOTIFY_FIELD_PRINTER_NAME    0x00\n#define JOB_NOTIFY_FIELD_MACHINE_NAME    0x01\n#define JOB_NOTIFY_FIELD_PORT_NAME       0x02\n#define JOB_NOTIFY_FIELD_USER_NAME       0x03\n#define JOB_NOTIFY_FIELD_NOTIFY_NAME     0x04\n#define JOB_NOTIFY_FIELD_DATATYPE        0x05\n#define JOB_NOTIFY_FIELD_PRINT_PROCESSOR 0x06\n#define JOB_NOTIFY_FIELD_PARAMETERS      0x07\n#define JOB_NOTIFY_FIELD_DRIVER_NAME     0x08\n#define JOB_NOTIFY_FIELD_DEVMODE         0x09\n#define JOB_NOTIFY_FIELD_STATUS          0x0a\n#define JOB_NOTIFY_FIELD_STATUS_STRING   0x0b\n#define JOB_NOTIFY_FIELD_SECURITY_DESCRIPTOR 0x0c\n#define JOB_NOTIFY_FIELD_DOCUMENT        0x0d\n#define JOB_NOTIFY_FIELD_PRIORITY        0x0e\n#define JOB_NOTIFY_FIELD_POSITION        0x0f\n#define JOB_NOTIFY_FIELD_SUBMITTED       0x10\n#define JOB_NOTIFY_FIELD_START_TIME      0x11\n#define JOB_NOTIFY_FIELD_UNTIL_TIME      0x12\n#define JOB_NOTIFY_FIELD_TIME            0x13\n#define JOB_NOTIFY_FIELD_TOTAL_PAGES     0x14\n#define JOB_NOTIFY_FIELD_PAGES_PRINTED   0x15\n#define JOB_NOTIFY_FIELD_TOTAL_BYTES     0x16\n#define JOB_NOTIFY_FIELD_BYTES_PRINTED   0x17\n\n#define PRINTER_NOTIFY_OPTIONS_REFRESH   1\n#define PRINTER_NOTIFY_INFO_DISCARDED    1\n\n#define PRINTER_CHANGE_ADD_PRINTER               0x00000001\n#define PRINTER_CHANGE_SET_PRINTER               0x00000002\n#define PRINTER_CHANGE_DELETE_PRINTER            0x00000004\n#define PRINTER_CHANGE_FAILED_CONNECTION_PRINTER 0x00000008\n#define PRINTER_CHANGE_PRINTER                   0x000000ff\n#define PRINTER_CHANGE_ADD_JOB                   0x00000100\n#define PRINTER_CHANGE_SET_JOB                   0x00000200\n#define PRINTER_CHANGE_DELETE_JOB                0x00000400\n#define PRINTER_CHANGE_WRITE_JOB                 0x00000800\n#define PRINTER_CHANGE_JOB                       0x0000ff00\n#define PRINTER_CHANGE_ADD_FORM                  0x00010000\n#define PRINTER_CHANGE_SET_FORM                  0x00020000\n#define PRINTER_CHANGE_DELETE_FORM               0x00040000\n#define PRINTER_CHANGE_FORM                      0x00070000\n#define PRINTER_CHANGE_ADD_PORT                  0x00100000\n#define PRINTER_CHANGE_CONFIGURE_PORT            0x00200000\n#define PRINTER_CHANGE_DELETE_PORT               0x00400000\n#define PRINTER_CHANGE_PORT                      0x00700000\n#define PRINTER_CHANGE_ADD_PRINT_PROCESSOR       0x01000000\n#define PRINTER_CHANGE_DELETE_PRINTER_PROCESSOR  0x04000000\n#define PRINTER_CHANGE_PRINT_PROCESSOR           0x07000000\n#define PRINTER_CHANGE_ADD_PRINTER_DRIVER        0x10000000\n#define PRINTER_CHANGE_SET_PRINTER_DRIVER        0x20000000\n#define PRINTER_CHANGE_DELETE_PRINTER_DRIVER     0x40000000\n#define PRINTER_CHANGE_PRINTER_DRIVER            0x70000000\n#define PRINTER_CHANGE_TIMEOUT                   0x80000000\n#define PRINTER_CHANGE_ALL                       0x7777ffff\n\n#define PRINTER_ERROR_INFORMATION   0x80000000\n#define PRINTER_ERROR_WARNING       0x40000000\n#define PRINTER_ERROR_SEVERE        0x20000000\n\n#define PRINTER_ERROR_OUTODPAPER    0x00000001\n#define PRINTER_ERROR_JAM           0x00000002\n#define PRINTER_ERROR_OUTOFTONER    0x00000004\n\n/* Access Rights for Printserver, Printers and Printjobs */\n#define SERVER_ACCESS_ADMINISTER    0x00000001\n#define SERVER_ACCESS_ENUMERATE     0x00000002\n#define SERVER_READ        (STANDARD_RIGHTS_READ | SERVER_ACCESS_ENUMERATE)\n#define SERVER_WRITE       (STANDARD_RIGHTS_WRITE | \\\n                            SERVER_ACCESS_ADMINISTER | SERVER_ACCESS_ENUMERATE)\n#define SERVER_EXECUTE     (STANDARD_RIGHTS_EXECUTE |  SERVER_ACCESS_ENUMERATE)\n#define SERVER_ALL_ACCESS  (STANDARD_RIGHTS_REQUIRED | \\\n                            SERVER_ACCESS_ADMINISTER | SERVER_ACCESS_ENUMERATE)\n\n#define PRINTER_ACCESS_ADMINISTER   0x00000004\n#define PRINTER_ACCESS_USE          0x00000008\n#define PRINTER_READ        (STANDARD_RIGHTS_READ | PRINTER_ACCESS_USE)\n#define PRINTER_WRITE       (STANDARD_RIGHTS_WRITE | PRINTER_ACCESS_USE)\n#define PRINTER_EXECUTE     (STANDARD_RIGHTS_EXECUTE | PRINTER_ACCESS_USE)\n#define PRINTER_ALL_ACCESS  (STANDARD_RIGHTS_REQUIRED | \\\n                             PRINTER_ACCESS_ADMINISTER | PRINTER_ACCESS_USE)\n\n#define JOB_ACCESS_ADMINISTER       0x00000010\n#define JOB_READ            (STANDARD_RIGHTS_READ | JOB_ACCESS_ADMINISTER)\n#define JOB_WRITE           (STANDARD_RIGHTS_WRITE | JOB_ACCESS_ADMINISTER)\n#define JOB_EXECUTE         (STANDARD_RIGHTS_EXECUTE | JOB_ACCESS_ADMINISTER)\n#define JOB_ALL_ACCESS      (STANDARD_RIGHTS_REQUIRED | JOB_ACCESS_ADMINISTER)\n\n\n/* Flags for printer drivers */\n#define DRIVER_KERNELMODE       0x00000001\n#define DRIVER_USERMODE         0x00000002\n\n#define APD_STRICT_UPGRADE      0x00000001\n#define APD_STRICT_DOWNGRADE    0x00000002\n#define APD_COPY_ALL_FILES      0x00000004\n#define APD_COPY_NEW_FILES      0x00000008\n#define APD_COPY_FROM_DIRECTORY 0x00000010\n\n#define DPD_DELETE_UNUSED_FILES     0x00000001\n#define DPD_DELETE_SPECIFIC_VERSION 0x00000002\n#define DPD_DELETE_ALL_FILES        0x00000004\n\n/* dwAction for PRINTER_INFO_7 */\n#define DSPRINT_PUBLISH     0x00000001\n#define DSPRINT_UPDATE      0x00000002\n#define DSPRINT_UNPUBLISH   0x00000004\n#define DSPRINT_REPUBLISH   0x00000008\n#define DSPRINT_PENDING     0x80000000\n\n#define UPDP_SILENT_UPLOAD      0x00000001\n#define UPDP_UPLOAD_ALWAYS      0x00000002\n#define UPDP_CHECK_DRIVERSTORE  0x00000004\n\n/* ##################################### */\n\n/* TYPES */\ntypedef struct _PRINTER_DEFAULTSA {\n  LPSTR        pDatatype;\n  LPDEVMODEA pDevMode;\n  ACCESS_MASK  DesiredAccess;\n} PRINTER_DEFAULTSA, *LPPRINTER_DEFAULTSA;\n\ntypedef struct _PRINTER_DEFAULTSW {\n  LPWSTR       pDatatype;\n  LPDEVMODEW pDevMode;\n  ACCESS_MASK  DesiredAccess;\n} PRINTER_DEFAULTSW, *LPPRINTER_DEFAULTSW;\n\nDECL_WINELIB_TYPE_AW(PRINTER_DEFAULTS)\nDECL_WINELIB_TYPE_AW(LPPRINTER_DEFAULTS)\n\ntypedef struct _DRIVER_INFO_1A {\n  LPSTR     pName;\n} DRIVER_INFO_1A, *PDRIVER_INFO_1A, *LPDRIVER_INFO_1A;\n\ntypedef struct _DRIVER_INFO_1W {\n  LPWSTR    pName;\n} DRIVER_INFO_1W, *PDRIVER_INFO_1W, *LPDRIVER_INFO_1W;\n\nDECL_WINELIB_TYPE_AW(DRIVER_INFO_1)\nDECL_WINELIB_TYPE_AW(PDRIVER_INFO_1)\nDECL_WINELIB_TYPE_AW(LPDRIVER_INFO_1)\n\ntypedef struct _DRIVER_INFO_2A {\n  DWORD     cVersion;\n  LPSTR     pName;\n  LPSTR     pEnvironment;\n  LPSTR     pDriverPath;\n  LPSTR     pDataFile;\n  LPSTR     pConfigFile;\n} DRIVER_INFO_2A, *PDRIVER_INFO_2A, *LPDRIVER_INFO_2A;\n\ntypedef struct _DRIVER_INFO_2W {\n  DWORD     cVersion;\n  LPWSTR    pName;\n  LPWSTR    pEnvironment;\n  LPWSTR    pDriverPath;\n  LPWSTR    pDataFile;\n  LPWSTR    pConfigFile;\n} DRIVER_INFO_2W, *PDRIVER_INFO_2W, *LPDRIVER_INFO_2W;\n\nDECL_WINELIB_TYPE_AW(DRIVER_INFO_2)\nDECL_WINELIB_TYPE_AW(PDRIVER_INFO_2)\nDECL_WINELIB_TYPE_AW(LPDRIVER_INFO_2)\n\ntypedef struct _DRIVER_INFO_3A {\n  DWORD cVersion;\n  LPSTR pName;\n  LPSTR pEnvironment;\n  LPSTR pDriverPath;\n  LPSTR pDataFile;\n  LPSTR pConfigFile;\n  LPSTR pHelpFile;\n  LPSTR pDependentFiles;\n  LPSTR pMonitorName;\n  LPSTR pDefaultDataType;\n} DRIVER_INFO_3A, *PDRIVER_INFO_3A, *LPDRIVER_INFO_3A;\n\ntypedef struct _DRIVER_INFO_3W {\n  DWORD cVersion;\n  LPWSTR pName;\n  LPWSTR pEnvironment;\n  LPWSTR pDriverPath;\n  LPWSTR pDataFile;\n  LPWSTR pConfigFile;\n  LPWSTR pHelpFile;\n  LPWSTR pDependentFiles;\n  LPWSTR pMonitorName;\n  LPWSTR pDefaultDataType;\n} DRIVER_INFO_3W, *PDRIVER_INFO_3W, *LPDRIVER_INFO_3W;\n\nDECL_WINELIB_TYPE_AW(DRIVER_INFO_3)\nDECL_WINELIB_TYPE_AW(PDRIVER_INFO_3)\nDECL_WINELIB_TYPE_AW(LPDRIVER_INFO_3)\n\ntypedef struct _DRIVER_INFO_4A {\n  DWORD cVersion;\n  LPSTR pName;\n  LPSTR pEnvironment;\n  LPSTR pDriverPath;\n  LPSTR pDataFile;\n  LPSTR pConfigFile;\n  LPSTR pHelpFile;\n  LPSTR pDependentFiles;\n  LPSTR pMonitorName;\n  LPSTR pDefaultDataType;\n  LPSTR pszzPreviousNames;\n} DRIVER_INFO_4A, *PDRIVER_INFO_4A, *LPDRIVER_INFO_4A;\n\ntypedef struct _DRIVER_INFO_4W {\n  DWORD cVersion;\n  LPWSTR pName;\n  LPWSTR pEnvironment;\n  LPWSTR pDriverPath;\n  LPWSTR pDataFile;\n  LPWSTR pConfigFile;\n  LPWSTR pHelpFile;\n  LPWSTR pDependentFiles;\n  LPWSTR pMonitorName;\n  LPWSTR pDefaultDataType;\n  LPWSTR pszzPreviousNames;\n} DRIVER_INFO_4W, *PDRIVER_INFO_4W, *LPDRIVER_INFO_4W;\n\nDECL_WINELIB_TYPE_AW(DRIVER_INFO_4)\nDECL_WINELIB_TYPE_AW(PDRIVER_INFO_4)\nDECL_WINELIB_TYPE_AW(LPDRIVER_INFO_4)\n\n\ntypedef struct _DRIVER_INFO_5A {\n  DWORD cVersion;\n  LPSTR pName;\n  LPSTR pEnvironment;\n  LPSTR pDriverPath;\n  LPSTR pDataFile;\n  LPSTR pConfigFile;\n  DWORD dwDriverAttributes;\n  DWORD dwConfigVersion;\n  DWORD dwDriverVersion;\n} DRIVER_INFO_5A, *PDRIVER_INFO_5A, *LPDRIVER_INFO_5A;\n\ntypedef struct _DRIVER_INFO_5W {\n  DWORD  cVersion;\n  LPWSTR pName;\n  LPWSTR pEnvironment;\n  LPWSTR pDriverPath;\n  LPWSTR pDataFile;\n  LPWSTR pConfigFile;\n  DWORD  dwDriverAttributes;\n  DWORD  dwConfigVersion;\n  DWORD  dwDriverVersion;\n} DRIVER_INFO_5W, *PDRIVER_INFO_5W, *LPDRIVER_INFO_5W;\n\nDECL_WINELIB_TYPE_AW(DRIVER_INFO_5)\nDECL_WINELIB_TYPE_AW(PDRIVER_INFO_5)\nDECL_WINELIB_TYPE_AW(LPDRIVER_INFO_5)\n\ntypedef struct _DRIVER_INFO_6A {\n  DWORD     cVersion;\n  LPSTR     pName;\n  LPSTR     pEnvironment;\n  LPSTR     pDriverPath;\n  LPSTR     pDataFile;\n  LPSTR     pConfigFile;\n  LPSTR     pHelpFile;\n  LPSTR     pDependentFiles;\n  LPSTR     pMonitorName;\n  LPSTR     pDefaultDataType;\n  LPSTR     pszzPreviousNames;\n  FILETIME  ftDriverDate;\n  DWORDLONG dwlDriverVersion;\n  LPSTR     pszMfgName;\n  LPSTR     pszOEMUrl;\n  LPSTR     pszHardwareID;\n  LPSTR     pszProvider;\n} DRIVER_INFO_6A, *PDRIVER_INFO_6A, *LPDRIVER_INFO_6A;\n\ntypedef struct _DRIVER_INFO_6W {\n  DWORD     cVersion;\n  LPWSTR    pName;\n  LPWSTR    pEnvironment;\n  LPWSTR    pDriverPath;\n  LPWSTR    pDataFile;\n  LPWSTR    pConfigFile;\n  LPWSTR    pHelpFile;\n  LPWSTR    pDependentFiles;\n  LPWSTR    pMonitorName;\n  LPWSTR    pDefaultDataType;\n  LPWSTR    pszzPreviousNames;\n  FILETIME  ftDriverDate;\n  DWORDLONG dwlDriverVersion;\n  LPWSTR    pszMfgName;\n  LPWSTR    pszOEMUrl;\n  LPWSTR    pszHardwareID;\n  LPWSTR    pszProvider;\n} DRIVER_INFO_6W, *PDRIVER_INFO_6W, *LPDRIVER_INFO_6W;\n\nDECL_WINELIB_TYPE_AW(DRIVER_INFO_6)\nDECL_WINELIB_TYPE_AW(PDRIVER_INFO_6)\nDECL_WINELIB_TYPE_AW(LPDRIVER_INFO_6)\n\n/* DRIVER_INFO_7 is not defined in native winspool.h and not found in the www */\n\ntypedef struct _DRIVER_INFO_8A {\n  DWORD     cVersion;\n  LPSTR     pName;\n  LPSTR     pEnvironment;\n  LPSTR     pDriverPath;\n  LPSTR     pDataFile;\n  LPSTR     pConfigFile;\n  LPSTR     pHelpFile;\n  LPSTR     pDependentFiles;\n  LPSTR     pMonitorName;\n  LPSTR     pDefaultDataType;\n  LPSTR     pszzPreviousNames;\n  FILETIME  ftDriverDate;\n  DWORDLONG dwlDriverVersion;\n  LPSTR     pszMfgName;\n  LPSTR     pszOEMUrl;\n  LPSTR     pszHardwareID;\n  LPSTR     pszProvider;\n  LPSTR     pszPrintProcessor;\n  LPSTR     pszVendorSetup;\n  LPSTR     pszzColorProfiles;\n  LPSTR     pszInfPath;\n  DWORD     dwPrinterDriverAttributes;\n  LPSTR     pszzCoreDriverDependencies;\n  FILETIME  ftMinInboxDriverVerDate;\n  DWORDLONG dwlMinInboxDriverVerVersion;\n} DRIVER_INFO_8A, *PDRIVER_INFO_8A, *LPDRIVER_INFO_8A;\n\ntypedef struct _DRIVER_INFO_8W {\n  DWORD     cVersion;\n  LPWSTR    pName;\n  LPWSTR    pEnvironment;\n  LPWSTR    pDriverPath;\n  LPWSTR    pDataFile;\n  LPWSTR    pConfigFile;\n  LPWSTR    pHelpFile;\n  LPWSTR    pDependentFiles;\n  LPWSTR    pMonitorName;\n  LPWSTR    pDefaultDataType;\n  LPWSTR    pszzPreviousNames;\n  FILETIME  ftDriverDate;\n  DWORDLONG dwlDriverVersion;\n  LPWSTR    pszMfgName;\n  LPWSTR    pszOEMUrl;\n  LPWSTR    pszHardwareID;\n  LPWSTR    pszProvider;\n  LPWSTR    pszPrintProcessor;\n  LPWSTR    pszVendorSetup;\n  LPWSTR    pszzColorProfiles;\n  LPWSTR    pszInfPath;\n  DWORD     dwPrinterDriverAttributes;\n  LPWSTR    pszzCoreDriverDependencies;\n  FILETIME  ftMinInboxDriverVerDate;\n  DWORDLONG dwlMinInboxDriverVerVersion;\n} DRIVER_INFO_8W, *PDRIVER_INFO_8W, *LPDRIVER_INFO_8W;\n\nDECL_WINELIB_TYPE_AW(DRIVER_INFO_8)\nDECL_WINELIB_TYPE_AW(PDRIVER_INFO_8)\nDECL_WINELIB_TYPE_AW(LPDRIVER_INFO_8)\n\n\ntypedef struct _PRINTER_INFO_1A {\n  DWORD   Flags;\n  LPSTR   pDescription;\n  LPSTR   pName;\n  LPSTR   pComment;\n} PRINTER_INFO_1A, *PPRINTER_INFO_1A, *LPPRINTER_INFO_1A;\n\ntypedef struct _PRINTER_INFO_1W {\n  DWORD   Flags;\n  LPWSTR  pDescription;\n  LPWSTR  pName;\n  LPWSTR  pComment;\n} PRINTER_INFO_1W, *PPRINTER_INFO_1W, *LPPRINTER_INFO_1W;\n\nDECL_WINELIB_TYPE_AW(PRINTER_INFO_1)\nDECL_WINELIB_TYPE_AW(PPRINTER_INFO_1)\nDECL_WINELIB_TYPE_AW(LPPRINTER_INFO_1)\n\n/* FIXME: winspool.h declares some structure members with the name Status.\n * unfortunately <X11/ICE/ICElib.h> #defines Status to the type 'int'\n * therefore the following hack */\n#ifndef Status\n\ntypedef struct _PRINTER_INFO_2A {\n  LPSTR     pServerName;\n  LPSTR     pPrinterName;\n  LPSTR     pShareName;\n  LPSTR     pPortName;\n  LPSTR     pDriverName;\n  LPSTR     pComment;\n  LPSTR     pLocation;\n  LPDEVMODEA pDevMode;\n  LPSTR     pSepFile;\n  LPSTR     pPrintProcessor;\n  LPSTR     pDatatype;\n  LPSTR     pParameters;\n  PSECURITY_DESCRIPTOR pSecurityDescriptor;\n  DWORD   Attributes;\n  DWORD   Priority;\n  DWORD   DefaultPriority;\n  DWORD   StartTime;\n  DWORD   UntilTime;\n  DWORD   Status;\n  DWORD   cJobs;\n  DWORD   AveragePPM;\n} PRINTER_INFO_2A, *PPRINTER_INFO_2A, *LPPRINTER_INFO_2A;\n\ntypedef struct _PRINTER_INFO_2W {\n  LPWSTR    pServerName;\n  LPWSTR    pPrinterName;\n  LPWSTR    pShareName;\n  LPWSTR    pPortName;\n  LPWSTR    pDriverName;\n  LPWSTR    pComment;\n  LPWSTR    pLocation;\n  LPDEVMODEW pDevMode;\n  LPWSTR    pSepFile;\n  LPWSTR    pPrintProcessor;\n  LPWSTR    pDatatype;\n  LPWSTR    pParameters;\n  PSECURITY_DESCRIPTOR pSecurityDescriptor;\n  DWORD   Attributes;\n  DWORD   Priority;\n  DWORD   DefaultPriority;\n  DWORD   StartTime;\n  DWORD   UntilTime;\n  DWORD   Status;\n  DWORD   cJobs;\n  DWORD   AveragePPM;\n} PRINTER_INFO_2W, *PPRINTER_INFO_2W, *LPPRINTER_INFO_2W;\n\nDECL_WINELIB_TYPE_AW(PRINTER_INFO_2)\nDECL_WINELIB_TYPE_AW(PPRINTER_INFO_2)\nDECL_WINELIB_TYPE_AW(LPPRINTER_INFO_2)\n\ntypedef struct _PRINTER_INFO_3 {\n  PSECURITY_DESCRIPTOR pSecurityDescriptor;\n} PRINTER_INFO_3, *PPRINTER_INFO_3, *LPPRINTER_INFO_3;\n\ntypedef struct _PRINTER_INFO_4A {\n  LPSTR     pPrinterName;\n  LPSTR     pServerName;\n  DWORD     Attributes;\n} PRINTER_INFO_4A, *PPRINTER_INFO_4A, *LPPRINTER_INFO_4A;\n\ntypedef struct _PRINTER_INFO_4W {\n  LPWSTR     pPrinterName;\n  LPWSTR     pServerName;\n  DWORD     Attributes;\n} PRINTER_INFO_4W, *PPRINTER_INFO_4W, *LPPRINTER_INFO_4W;\n\nDECL_WINELIB_TYPE_AW(PRINTER_INFO_4)\nDECL_WINELIB_TYPE_AW(PPRINTER_INFO_4)\nDECL_WINELIB_TYPE_AW(LPPRINTER_INFO_4)\n\ntypedef struct _PRINTER_INFO_5A {\n  LPSTR     pPrinterName;\n  LPSTR     pPortName;\n  DWORD     Attributes;\n  DWORD     DeviceNotSelectedTimeout;\n  DWORD     TransmissionRetryTimeout;\n} PRINTER_INFO_5A, *PPRINTER_INFO_5A, *LPPRINTER_INFO_5A;\n\ntypedef struct _PRINTER_INFO_5W {\n  LPWSTR    pPrinterName;\n  LPWSTR    pPortName;\n  DWORD     Attributes;\n  DWORD     DeviceNotSelectedTimeout;\n  DWORD     TransmissionRetryTimeout;\n} PRINTER_INFO_5W, *PPRINTER_INFO_5W, *LPPRINTER_INFO_5W;\n\nDECL_WINELIB_TYPE_AW(PRINTER_INFO_5)\nDECL_WINELIB_TYPE_AW(PPRINTER_INFO_5)\nDECL_WINELIB_TYPE_AW(LPPRINTER_INFO_5)\n\ntypedef struct _PRINTER_INFO_6 {\n  DWORD dwStatus;\n} PRINTER_INFO_6, *PPRINTER_INFO_6, *LPPRINTER_INFO_6;\n\ntypedef struct _PRINTER_INFO_7A {\n  LPSTR     pszObjectGUID;\n  DWORD     dwAction;\n} PRINTER_INFO_7A, *PPRINTER_INFO_7A, *LPPRINTER_INFO_7A;\n\ntypedef struct _PRINTER_INFO_7W {\n  LPWSTR    pszObjectGUID;\n  DWORD     dwAction;\n} PRINTER_INFO_7W, *PPRINTER_INFO_7W, *LPPRINTER_INFO_7W;\n\nDECL_WINELIB_TYPE_AW(PRINTER_INFO_7)\nDECL_WINELIB_TYPE_AW(PPRINTER_INFO_7)\nDECL_WINELIB_TYPE_AW(LPPRINTER_INFO_7)\n\ntypedef struct _PRINTER_INFO_8A {\n  LPDEVMODEA pDevMode;\n} PRINTER_INFO_8A, *PPRINTER_INFO_8A, *LPPRINTER_INFO_8A;\n\ntypedef struct _PRINTER_INFO_8W {\n  LPDEVMODEW pDevMode;\n} PRINTER_INFO_8W, *PPRINTER_INFO_8W, *LPPRINTER_INFO_8W;\n\nDECL_WINELIB_TYPE_AW(PRINTER_INFO_8)\nDECL_WINELIB_TYPE_AW(PPRINTER_INFO_8)\nDECL_WINELIB_TYPE_AW(LPPRINTER_INFO_8)\n\ntypedef struct _PRINTER_INFO_9A {\n  LPDEVMODEA pDevMode;\n} PRINTER_INFO_9A, *PPRINTER_INFO_9A, *LPPRINTER_INFO_9A;\n\ntypedef struct _PRINTER_INFO_9W {\n  LPDEVMODEW pDevMode;\n} PRINTER_INFO_9W, *PPRINTER_INFO_9W, *LPPRINTER_INFO_9W;\n\nDECL_WINELIB_TYPE_AW(PRINTER_INFO_9)\nDECL_WINELIB_TYPE_AW(PPRINTER_INFO_9)\nDECL_WINELIB_TYPE_AW(LPPRINTER_INFO_9)\n\n\ntypedef struct _JOB_INFO_1A {\n  DWORD JobId;\n  LPSTR pPrinterName;\n  LPSTR pMachineName;\n  LPSTR pUserName;\n  LPSTR pDocument;\n  LPSTR pDatatype;\n  LPSTR pStatus;\n  DWORD Status;\n  DWORD Priority;\n  DWORD Position;\n  DWORD TotalPages;\n  DWORD PagesPrinted;\n  SYSTEMTIME Submitted;\n} JOB_INFO_1A, *PJOB_INFO_1A, *LPJOB_INFO_1A;\n\ntypedef struct _JOB_INFO_1W {\n  DWORD JobId;\n  LPWSTR pPrinterName;\n  LPWSTR pMachineName;\n  LPWSTR pUserName;\n  LPWSTR pDocument;\n  LPWSTR pDatatype;\n  LPWSTR pStatus;\n  DWORD Status;\n  DWORD Priority;\n  DWORD Position;\n  DWORD TotalPages;\n  DWORD PagesPrinted;\n  SYSTEMTIME Submitted;\n} JOB_INFO_1W, *PJOB_INFO_1W, *LPJOB_INFO_1W;\n\nDECL_WINELIB_TYPE_AW(JOB_INFO_1)\nDECL_WINELIB_TYPE_AW(PJOB_INFO_1)\nDECL_WINELIB_TYPE_AW(LPJOB_INFO_1)\n\ntypedef struct _JOB_INFO_2A {\n  DWORD JobId;\n  LPSTR pPrinterName;\n  LPSTR pMachineName;\n  LPSTR pUserName;\n  LPSTR pDocument;\n  LPSTR pNotifyName;\n  LPSTR pDatatype;\n  LPSTR pPrintProcessor;\n  LPSTR pParameters;\n  LPSTR pDriverName;\n  LPDEVMODEA pDevMode;\n  LPSTR pStatus;\n  PSECURITY_DESCRIPTOR pSecurityDescriptor;\n  DWORD Status;\n  DWORD Priority;\n  DWORD Position;\n  DWORD StartTime;\n  DWORD UntilTime;\n  DWORD TotalPages;\n  DWORD Size;\n  SYSTEMTIME Submitted;\n  DWORD Time;\n  DWORD PagesPrinted;\n} JOB_INFO_2A, *PJOB_INFO_2A, *LPJOB_INFO_2A;\n\ntypedef struct _JOB_INFO_2W {\n  DWORD JobId;\n  LPWSTR pPrinterName;\n  LPWSTR pMachineName;\n  LPWSTR pUserName;\n  LPWSTR pDocument;\n  LPWSTR pNotifyName;\n  LPWSTR pDatatype;\n  LPWSTR pPrintProcessor;\n  LPWSTR pParameters;\n  LPWSTR pDriverName;\n  LPDEVMODEW pDevMode;\n  LPWSTR pStatus;\n  PSECURITY_DESCRIPTOR pSecurityDescriptor;\n  DWORD Status;\n  DWORD Priority;\n  DWORD Position;\n  DWORD StartTime;\n  DWORD UntilTime;\n  DWORD TotalPages;\n  DWORD Size;\n  SYSTEMTIME Submitted;\n  DWORD Time;\n  DWORD PagesPrinted;\n} JOB_INFO_2W, *PJOB_INFO_2W, *LPJOB_INFO_2W;\n\nDECL_WINELIB_TYPE_AW(JOB_INFO_2)\nDECL_WINELIB_TYPE_AW(PJOB_INFO_2)\nDECL_WINELIB_TYPE_AW(LPJOB_INFO_2)\n\ntypedef struct _JOB_INFO_3 {\n  DWORD JobId;\n  DWORD NextJobId;\n  DWORD Reserved;\n} JOB_INFO_3, *PJOB_INFO_3, *LPJOB_INFO_3;\n\ntypedef struct _ADDJOB_INFO_1A {\n  LPSTR Path;\n  DWORD JobId;\n} ADDJOB_INFO_1A, *PADDJOB_INFO_1A, *LPADDJOB_INFO_1A;\n\ntypedef struct _ADDJOB_INFO_1W {\n  LPWSTR Path;\n  DWORD  JobId;\n} ADDJOB_INFO_1W, *PADDJOB_INFO_1W, *LPADDJOB_INFO_1W;\n\nDECL_WINELIB_TYPE_AW(ADDJOB_INFO_1)\nDECL_WINELIB_TYPE_AW(PADDJOB_INFO_1)\nDECL_WINELIB_TYPE_AW(LPADDJOB_INFO_1)\n\ntypedef struct _DOC_INFO_1A {\n  LPSTR pDocName;\n  LPSTR pOutputFile;\n  LPSTR pDatatype;\n} DOC_INFO_1A, *PDOC_INFO_1A, *LPDOC_INFO_1A;\n\ntypedef struct _DOC_INFO_1W {\n  LPWSTR pDocName;\n  LPWSTR pOutputFile;\n  LPWSTR pDatatype;\n} DOC_INFO_1W, *PDOC_INFO_1W, *LPDOC_INFO_1W;\n\nDECL_WINELIB_TYPE_AW(DOC_INFO_1)\nDECL_WINELIB_TYPE_AW(PDOC_INFO_1)\nDECL_WINELIB_TYPE_AW(LPDOC_INFO_1)\n\ntypedef struct _DOC_INFO_2A {\n  LPSTR pDocName;\n  LPSTR pOutputFile;\n  LPSTR pDatatype;\n  DWORD dwMode;\n  DWORD JobId;\n} DOC_INFO_2A, *PDOC_INFO_2A, *LPDOC_INFO_2A;\n\ntypedef struct _DOC_INFO_2W {\n  LPWSTR pDocName;\n  LPWSTR pOutputFile;\n  LPWSTR pDatatype;\n  DWORD dwMode;\n  DWORD JobId;\n} DOC_INFO_2W, *PDOC_INFO_2W, *LPDOC_INFO_2W;\n\nDECL_WINELIB_TYPE_AW(DOC_INFO_2)\nDECL_WINELIB_TYPE_AW(PDOC_INFO_2)\nDECL_WINELIB_TYPE_AW(LPDOC_INFO_2)\n\ntypedef struct _FORM_INFO_1A {\n  DWORD Flags;\n  LPSTR pName;\n  SIZEL Size;\n  RECTL ImageableArea;\n} FORM_INFO_1A, *PFORM_INFO_1A, *LPFORM_INFO_1A;\n\ntypedef struct _FORM_INFO_1W {\n  DWORD Flags;\n  LPWSTR pName;\n  SIZEL Size;\n  RECTL ImageableArea;\n} FORM_INFO_1W, *PFORM_INFO_1W, *LPFORM_INFO_1W;\n\nDECL_WINELIB_TYPE_AW(FORM_INFO_1)\nDECL_WINELIB_TYPE_AW(PFORM_INFO_1)\nDECL_WINELIB_TYPE_AW(LPFORM_INFO_1)\n\ntypedef struct _FORM_INFO_2A {\n  DWORD  Flags;\n  LPSTR  pName;\n  SIZEL  Size;\n  RECTL  ImageableArea;\n  LPCSTR pKeyword;\n  DWORD  StringType;\n  LPSTR  pMuiDll;\n  DWORD  dwResourceId;\n  LPSTR  pDisplayName;\n  LANGID wLangId;\n} FORM_INFO_2A, *PFORM_INFO_2A, *LPFORM_INFO_2A;\n\ntypedef struct _FORM_INFO_2W {\n  DWORD  Flags;\n  LPWSTR pName;\n  SIZEL  Size;\n  RECTL  ImageableArea;\n  LPCSTR pKeyword;\n  DWORD  StringType;\n  LPWSTR pMuiDll;\n  DWORD  dwResourceId;\n  LPWSTR pDisplayName;\n  LANGID wLangId;\n} FORM_INFO_2W, *PFORM_INFO_2W, *LPFORM_INFO_2W;\n\nDECL_WINELIB_TYPE_AW(FORM_INFO_2)\nDECL_WINELIB_TYPE_AW(PFORM_INFO_2)\nDECL_WINELIB_TYPE_AW(LPFORM_INFO_2)\n\ntypedef struct _PRINTPROCESSOR_INFO_1A {\n  LPSTR pName;\n} PRINTPROCESSOR_INFO_1A, *PPRINTPROCESSOR_INFO_1A,\n  *LPPRINTPROCESSOR_INFO_1A;\n\ntypedef struct _PRINTPROCESSOR_INFO_1W {\n  LPWSTR pName;\n} PRINTPROCESSOR_INFO_1W, *PPRINTPROCESSOR_INFO_1W,\n  *LPPRINTPROCESSOR_INFO_1W;\n\nDECL_WINELIB_TYPE_AW(PRINTPROCESSOR_INFO_1)\nDECL_WINELIB_TYPE_AW(PPRINTPROCESSOR_INFO_1)\nDECL_WINELIB_TYPE_AW(LPPRINTPROCESSOR_INFO_1)\n\ntypedef struct _PORT_INFO_1A {\n  LPSTR pName;\n} PORT_INFO_1A, *PPORT_INFO_1A, *LPPORT_INFO_1A;\n\ntypedef struct _PORT_INFO_1W {\n  LPWSTR pName;\n} PORT_INFO_1W, *PPORT_INFO_1W, *LPPORT_INFO_1W;\n\nDECL_WINELIB_TYPE_AW(PORT_INFO_1)\nDECL_WINELIB_TYPE_AW(PPORT_INFO_1)\nDECL_WINELIB_TYPE_AW(LPPORT_INFO_1)\n\ntypedef struct _PORT_INFO_2A {\n  LPSTR pPortName;\n  LPSTR pMonitorName;\n  LPSTR pDescription;\n  DWORD fPortType;\n  DWORD Reserved;\n} PORT_INFO_2A, *PPORT_INFO_2A, *LPPORT_INFO_2A;\n\ntypedef struct _PORT_INFO_2W {\n  LPWSTR pPortName;\n  LPWSTR pMonitorName;\n  LPWSTR pDescription;\n  DWORD  fPortType;\n  DWORD  Reserved;\n} PORT_INFO_2W, *PPORT_INFO_2W, *LPPORT_INFO_2W;\n\nDECL_WINELIB_TYPE_AW(PORT_INFO_2)\nDECL_WINELIB_TYPE_AW(PPORT_INFO_2)\nDECL_WINELIB_TYPE_AW(LPPORT_INFO_2)\n\ntypedef struct _PORT_INFO_3A {\n  DWORD dwStatus;\n  LPSTR pszStatus;\n  DWORD dwSeverity;\n} PORT_INFO_3A, *PPORT_INFO_3A, *LPPORT_INFO_3A;\n\ntypedef struct _PORT_INFO_3W {\n  DWORD  dwStatus;\n  LPWSTR pszStatus;\n  DWORD  dwSeverity;\n} PORT_INFO_3W, *PPORT_INFO_3W, *LPPORT_INFO_3W;\n\nDECL_WINELIB_TYPE_AW(PORT_INFO_3)\nDECL_WINELIB_TYPE_AW(PPORT_INFO_3)\nDECL_WINELIB_TYPE_AW(LPPORT_INFO_3)\n\ntypedef struct _MONITOR_INFO_1A {\n  LPSTR pName;\n} MONITOR_INFO_1A, *PMONITOR_INFO_1A, *LPMONITOR_INFO_1A;\n\ntypedef struct _MONITOR_INFO_1W {\n  LPWSTR pName;\n} MONITOR_INFO_1W, *PMONITOR_INFO_1W, *LPMONITOR_INFO_1W;\n\nDECL_WINELIB_TYPE_AW(MONITOR_INFO_1)\nDECL_WINELIB_TYPE_AW(PMONITOR_INFO_1)\nDECL_WINELIB_TYPE_AW(LPMONITOR_INFO_1)\n\n#endif /* Status */\n\n\ntypedef struct _MONITOR_INFO_2A {\n  LPSTR pName;\n  LPSTR pEnvironment;\n  LPSTR pDLLName;\n} MONITOR_INFO_2A, *PMONITOR_INFO_2A, *LPMONITOR_INFO_2A;\n\ntypedef struct _MONITOR_INFO_2W {\n  LPWSTR pName;\n  LPWSTR pEnvironment;\n  LPWSTR pDLLName;\n} MONITOR_INFO_2W, *PMONITOR_INFO_2W, *LPMONITOR_INFO_2W;\n\nDECL_WINELIB_TYPE_AW(MONITOR_INFO_2)\nDECL_WINELIB_TYPE_AW(PMONITOR_INFO_2)\nDECL_WINELIB_TYPE_AW(LPMONITOR_INFO_2)\n\ntypedef struct _DATATYPES_INFO_1A {\n  LPSTR pName;\n} DATATYPES_INFO_1A, *PDATATYPES_INFO_1A, *LPDATATYPES_INFO_1A;\n\ntypedef struct _DATATYPES_INFO_1W {\n  LPWSTR pName;\n} DATATYPES_INFO_1W, *PDATATYPES_INFO_1W, *LPDATATYPES_INFO_1W;\n\nDECL_WINELIB_TYPE_AW(DATATYPES_INFO_1)\nDECL_WINELIB_TYPE_AW(PDATATYPES_INFO_1)\nDECL_WINELIB_TYPE_AW(LPDATATYPES_INFO_1)\n\ntypedef struct _PRINTER_NOTIFY_OPTIONS_TYPE {\n  WORD  Type;\n  WORD  Reserved0;\n  DWORD Reserved1;\n  DWORD Reserved2;\n  DWORD Count;\n  PWORD pFields;\n} PRINTER_NOTIFY_OPTIONS_TYPE, *PPRINTER_NOTIFY_OPTIONS_TYPE,\n*LPPRINTER_NOTIFY_OPTIONS_TYPE;\n\ntypedef struct _PRINTER_NOTIFY_OPTIONS {\n  DWORD Version;\n  DWORD Flags;\n  DWORD Count;\n  PPRINTER_NOTIFY_OPTIONS_TYPE pTypes;\n} PRINTER_NOTIFY_OPTIONS, *PPRINTER_NOTIFY_OPTIONS, *LPPRINTER_NOTIFY_OPTIONS;\n\ntypedef struct _PRINTER_NOTIFY_INFO_DATA {\n  WORD Type;\n  WORD Field;\n  DWORD Reserved;\n  DWORD Id;\n  union {\n    DWORD adwData[2];\n    struct {\n      DWORD cbBuf;\n      LPVOID pBuf;\n    } Data;\n  } NotifyData;\n} PRINTER_NOTIFY_INFO_DATA, *PPRINTER_NOTIFY_INFO_DATA,\n*LPPRINTER_NOTIFY_INFO_DATA;\n\ntypedef struct _PRINTER_NOTIFY_INFO {\n  DWORD Version;\n  DWORD Flags;\n  DWORD Count;\n  PRINTER_NOTIFY_INFO_DATA aData[1];\n} PRINTER_NOTIFY_INFO, *PPRINTER_NOTIFY_INFO, *LPPRINTER_NOTIFY_INFO;\n\ntypedef struct _PROVIDOR_INFO_1A {\n  LPSTR pName;\n  LPSTR pEnvironment;\n  LPSTR pDLLName;\n} PROVIDOR_INFO_1A, *PPROVIDOR_INFO_1A, *LPPROVIDOR_INFO_1A;\n\ntypedef struct _PROVIDOR_INFO_1W {\n  LPWSTR pName;\n  LPWSTR pEnvironment;\n  LPWSTR pDLLName;\n} PROVIDOR_INFO_1W, *PPROVIDOR_INFO_1W, *LPPROVIDOR_INFO_1W;\n\nDECL_WINELIB_TYPE_AW(PROVIDOR_INFO_1)\nDECL_WINELIB_TYPE_AW(PPROVIDOR_INFO_1)\nDECL_WINELIB_TYPE_AW(LPPROVIDOR_INFO_1)\n\ntypedef struct _PRINTER_ENUM_VALUESA {\n  LPSTR\t pValueName;\n  DWORD  cbValueName;\n  DWORD  dwType;\n  LPBYTE pData;\n  DWORD  cbData;\n} PRINTER_ENUM_VALUESA, *PPRINTER_ENUM_VALUESA;\n\ntypedef struct _PRINTER_ENUM_VALUESW {\n  LPWSTR pValueName;\n  DWORD  cbValueName;\n  DWORD  dwType;\n  LPBYTE pData;\n  DWORD  cbData;\n} PRINTER_ENUM_VALUESW, *PPRINTER_ENUM_VALUESW;\n\nDECL_WINELIB_TYPE_AW(PRINTER_ENUM_VALUES)\nDECL_WINELIB_TYPE_AW(PPRINTER_ENUM_VALUES)\n\ntypedef enum {\n BIDI_NULL = 0,\n BIDI_INT,\n BIDI_FLOAT,\n BIDI_BOOL,\n BIDI_STRING,\n BIDI_TEXT,\n BIDI_ENUM,\n BIDI_BLOB\n} BIDI_TYPE;\n\ntypedef struct _BINARY_CONTAINER {\n DWORD  cbBuf;\n LPBYTE pData;\n} BINARY_CONTAINER, *PBINARY_CONTAINER;\n\ntypedef struct _BIDI_DATA {\n DWORD  dwBidiType;\n union\n {\n   BOOL             bData;\n   INT              iData;\n   LPWSTR           sData;\n   FLOAT            fData;\n   BINARY_CONTAINER biData;\n } u;\n} BIDI_DATA, *LPBIDI_DATA, *PBIDI_DATA;\n\ntypedef struct _BIDI_REQUEST_DATA {\n DWORD      dwReqNumber;\n LPWSTR     pSchema;\n BIDI_DATA  data;\n} BIDI_REQUEST_DATA, *LPBIDI_REQUEST_DATA, *PBIDI_REQUEST_DATA;\n\ntypedef struct _BIDI_REQUEST_CONTAINER {\n DWORD              Version;\n DWORD              Flags;\n DWORD              Count;\n BIDI_REQUEST_DATA  aData[1];\n} BIDI_REQUEST_CONTAINER, *LPBIDI_REQUEST_CONTAINER, *PBIDI_REQUEST_CONTAINER;\n\ntypedef struct _BIDI_RESPONSE_DATA {\n DWORD      dwResult;\n DWORD      dwReqNumber;\n LPWSTR     pSchema;\n BIDI_DATA  data;\n} BIDI_RESPONSE_DATA, *LPBIDI_RESPONSE_DATA, *PBIDI_RESPONSE_DATA;\n\ntypedef struct _BIDI_RESPONSE_CONTAINER {\n DWORD              Version;\n DWORD              Flags;\n DWORD              Count;\n BIDI_RESPONSE_DATA aData[1];\n} BIDI_RESPONSE_CONTAINER, *LPBIDI_RESPONSE_CONTAINER, *PBIDI_RESPONSE_CONTAINER;\n\n/* string constants */\n\n#define SPLREG_DEFAULT_SPOOL_DIRECTORYA \"DefaultSpoolDirectory\"\n#ifdef _MSC_VER\n#define SPLREG_DEFAULT_SPOOL_DIRECTORYW L\"DefaultSpoolDirectory\"\n#elif defined(__GNUC__)\n#define SPLREG_DEFAULT_SPOOL_DIRECTORYW (const WCHAR[]){'D','e','f','a','u','l','t','S','p','o','o','l','D','i','r','e','c','t','o','r','y',0}\n#else\nstatic const WCHAR SPLREG_DEFAULT_SPOOL_DIRECTORYW[] = {'D','e','f','a','u','l','t','S','p','o','o','l','D','i','r','e','c','t','o','r','y',0};\n#endif\n#define SPLREG_DEFAULT_SPOOL_DIRECTORY WINELIB_NAME_AW(SPLREG_DEFAULT_SPOOL_DIRECTORY)\n\n#define SPLREG_PORT_THREAD_PRIORITY_DEFAULTA \"PortThreadPriorityDefault\"\n#ifdef _MSC_VER\n#define SPLREG_PORT_THREAD_PRIORITY_DEFAULTW L\"PortThreadPriorityDefault\"\n#elif defined(__GNUC__)\n#define SPLREG_PORT_THREAD_PRIORITY_DEFAULTW (const WCHAR[]){'P','o','r','t','T','h','r','e','a','d','P','r','i','o','r','i','t','y','D','e','f','a','u','l','t',0}\n#else\nstatic const WCHAR SPLREG_PORT_THREAD_PRIORITY_DEFAULTW[] = {'P','o','r','t','T','h','r','e','a','d','P','r','i','o','r','i','t','y','D','e','f','a','u','l','t',0};\n#endif\n#define SPLREG_PORT_THREAD_PRIORITY_DEFAULT WINELIB_NAME_AW(SPLREG_PORT_THREAD_PRIORITY_DEFAULT)\n\n#define SPLREG_PORT_THREAD_PRIORITYA \"PortThreadPriority\"\n#ifdef _MSC_VER\n#define SPLREG_PORT_THREAD_PRIORITYW L\"PortThreadPriority\"\n#elif defined(__GNUC__)\n#define SPLREG_PORT_THREAD_PRIORITYW (const WCHAR[]){'P','o','r','t','T','h','r','e','a','d','P','r','i','o','r','i','t','y',0}\n#else\nstatic const WCHAR SPLREG_PORT_THREAD_PRIORITYW[] = {'P','o','r','t','T','h','r','e','a','d','P','r','i','o','r','i','t','y',0};\n#endif\n#define SPLREG_PORT_THREAD_PRIORITY WINELIB_NAME_AW(SPLREG_PORT_THREAD_PRIORITY)\n\n#define SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULTA \"SchedulerThreadPriorityDefault\"\n#ifdef _MSC_VER\n#define SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULTW L\"SchedulerThreadPriorityDefault\"\n#elif defined(__GNUC__)\n#define SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULTW (const WCHAR[]){'S','c','h','e','d','u','l','e','r','T','h','r','e','a','d','P','r','i','o','r','i','t','y','D','e','f','a','u','l','t',0}\n#else\nstatic const WCHAR SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULTW[] = {'S','c','h','e','d','u','l','e','r','T','h','r','e','a','d','P','r','i','o','r','i','t','y','D','e','f','a','u','l','t',0};\n#endif\n#define SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULT WINELIB_NAME_AW(SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULT)\n\n#define SPLREG_SCHEDULER_THREAD_PRIORITYA \"SchedulerThreadPriority\"\n#ifdef _MSC_VER\n#define SPLREG_SCHEDULER_THREAD_PRIORITYW L\"SchedulerThreadPriority\"\n#elif defined(__GNUC__)\n#define SPLREG_SCHEDULER_THREAD_PRIORITYW (const WCHAR[]){'S','c','h','e','d','u','l','e','r','T','h','r','e','a','d','P','r','i','o','r','i','t','y',0}\n#else\nstatic const WCHAR SPLREG_SCHEDULER_THREAD_PRIORITYW[] = {'S','c','h','e','d','u','l','e','r','T','h','r','e','a','d','P','r','i','o','r','i','t','y',0};\n#endif\n#define SPLREG_SCHEDULER_THREAD_PRIORITY WINELIB_NAME_AW(SPLREG_SCHEDULER_THREAD_PRIORITY)\n\n#define SPLREG_BEEP_ENABLEDA \"BeepEnabled\"\n#ifdef _MSC_VER\n#define SPLREG_BEEP_ENABLEDW L\"BeepEnabled\"\n#elif defined(__GNUC__)\n#define SPLREG_BEEP_ENABLEDW (const WCHAR[]){'B','e','e','p','E','n','a','b','l','e','d',0}\n#else\nstatic const WCHAR SPLREG_BEEP_ENABLEDW[] = {'B','e','e','p','E','n','a','b','l','e','d',0};\n#endif\n#define SPLREG_BEEP_ENABLED WINELIB_NAME_AW(SPLREG_BEEP_ENABLED)\n\n#define SPLREG_NET_POPUPA \"NetPopup\"\n#ifdef _MSC_VER\n#define SPLREG_NET_POPUPW L\"NetPopup\"\n#elif defined(__GNUC__)\n#define SPLREG_NET_POPUPW (const WCHAR[]){'N','e','t','P','o','p','u','p',0}\n#else\nstatic const WCHAR SPLREG_NET_POPUPW[] = {'N','e','t','P','o','p','u','p',0};\n#endif\n#define SPLREG_NET_POPUP WINELIB_NAME_AW(SPLREG_NET_POPUP)\n\n#define SPLREG_RETRY_POPUPA \"RetryPopup\"\n#ifdef _MSC_VER\n#define SPLREG_RETRY_POPUPW L\"RetryPopup\"\n#elif defined(__GNUC__)\n#define SPLREG_RETRY_POPUPW (const WCHAR[]){'R','e','t','r','y','P','o','p','u','p',0}\n#else\nstatic const WCHAR SPLREG_RETRY_POPUPW[] = {'R','e','t','r','y','P','o','p','u','p',0};\n#endif\n#define SPLREG_RETRY_POPUP WINELIB_NAME_AW(SPLREG_RETRY_POPUP)\n\n#define SPLREG_NET_POPUP_TO_COMPUTERA \"NetPopupToComputer\"\n#ifdef _MSC_VER\n#define SPLREG_NET_POPUP_TO_COMPUTERW L\"NetPopupToComputer\"\n#elif defined(__GNUC__)\n#define SPLREG_NET_POPUP_TO_COMPUTERW (const WCHAR[]){'N','e','t','P','o','p','u','p','T','o','C','o','m','p','u','t','e','r',0}\n#else\nstatic const WCHAR SPLREG_NET_POPUP_TO_COMPUTERW[] = {'N','e','t','P','o','p','u','p','T','o','C','o','m','p','u','t','e','r',0};\n#endif\n#define SPLREG_NET_POPUP_TO_COMPUTER WINELIB_NAME_AW(SPLREG_NET_POPUP_TO_COMPUTER)\n\n#define SPLREG_EVENT_LOGA \"EventLog\"\n#ifdef _MSC_VER\n#define SPLREG_EVENT_LOGW L\"EventLog\"\n#elif defined(__GNUC__)\n#define SPLREG_EVENT_LOGW (const WCHAR[]){'E','v','e','n','t','L','o','g',0}\n#else\nstatic const WCHAR SPLREG_EVENT_LOGW[] = {'E','v','e','n','t','L','o','g',0};\n#endif\n#define SPLREG_EVENT_LOG WINELIB_NAME_AW(SPLREG_EVENT_LOG)\n\n#define SPLREG_MAJOR_VERSIONA \"MajorVersion\"\n#ifdef _MSC_VER\n#define SPLREG_MAJOR_VERSIONW L\"MajorVersion\"\n#elif defined(__GNUC__)\n#define SPLREG_MAJOR_VERSIONW (const WCHAR[]){'M','a','j','o','r','V','e','r','s','i','o','n',0}\n#else\nstatic const WCHAR SPLREG_MAJOR_VERSIONW[] = {'M','a','j','o','r','V','e','r','s','i','o','n',0};\n#endif\n#define SPLREG_MAJOR_VERSION WINELIB_NAME_AW(SPLREG_MAJOR_VERSION)\n\n#define SPLREG_MINOR_VERSIONA \"MinorVersion\"\n#ifdef _MSC_VER\n#define SPLREG_MINOR_VERSIONW L\"MinorVersion\"\n#elif defined(__GNUC__)\n#define SPLREG_MINOR_VERSIONW (const WCHAR[]){'M','i','n','o','r','V','e','r','s','i','o','n',0}\n#else\nstatic const WCHAR SPLREG_MINOR_VERSIONW[] = {'M','i','n','o','r','V','e','r','s','i','o','n',0};\n#endif\n#define SPLREG_MINOR_VERSION WINELIB_NAME_AW(SPLREG_MINOR_VERSION)\n\n#define SPLREG_ARCHITECTUREA \"Architecture\"\n#ifdef _MSC_VER\n#define SPLREG_ARCHITECTUREW L\"Architecture\"\n#elif defined(__GNUC__)\n#define SPLREG_ARCHITECTUREW (const WCHAR[]){'A','r','c','h','i','t','e','c','t','u','r','e',0}\n#else\nstatic const WCHAR SPLREG_ARCHITECTUREW[] = {'A','r','c','h','i','t','e','c','t','u','r','e',0};\n#endif\n#define SPLREG_ARCHITECTURE WINELIB_NAME_AW(SPLREG_ARCHITECTURE)\n\n#define SPLREG_OS_VERSIONA \"OSVersion\"\n#ifdef _MSC_VER\n#define SPLREG_OS_VERSIONW L\"OSVersion\"\n#elif defined(__GNUC__)\n#define SPLREG_OS_VERSIONW (const WCHAR[]){'O','S','V','e','r','s','i','o','n',0}\n#else\nstatic const WCHAR SPLREG_OS_VERSIONW[] = {'O','S','V','e','r','s','i','o','n',0};\n#endif\n#define SPLREG_OS_VERSION WINELIB_NAME_AW(SPLREG_OS_VERSION)\n\n#define SPLREG_OS_VERSIONEXA \"OSVersionEx\"\n#ifdef _MSC_VER\n#define SPLREG_OS_VERSIONEXW L\"OSVersionEx\"\n#elif defined(__GNUC__)\n#define SPLREG_OS_VERSIONEXW (const WCHAR[]){'O','S','V','e','r','s','i','o','n','E','x',0}\n#else\nstatic const WCHAR SPLREG_OS_VERSIONEXW[] = {'O','S','V','e','r','s','i','o','n','E','x',0};\n#endif\n#define SPLREG_OS_VERSIONEX WINELIB_NAME_AW(SPLREG_OS_VERSIONEX)\n\n#define SPLREG_DS_PRESENTA \"DsPresent\"\n#ifdef _MSC_VER\n#define SPLREG_DS_PRESENTW L\"DsPresent\"\n#elif defined(__GNUC__)\n#define SPLREG_DS_PRESENTW (const WCHAR[]){'D','s','P','r','e','s','e','n','t',0}\n#else\nstatic const WCHAR SPLREG_DS_PRESENTW[] = {'D','s','P','r','e','s','e','n','t',0};\n#endif\n#define SPLREG_DS_PRESENT WINELIB_NAME_AW(SPLREG_DS_PRESENT)\n\n#define SPLREG_DS_PRESENT_FOR_USERA \"DsPresentForUser\"\n#ifdef _MSC_VER\n#define SPLREG_DS_PRESENT_FOR_USERW L\"DsPresentForUser\"\n#elif defined(__GNUC__)\n#define SPLREG_DS_PRESENT_FOR_USERW (const WCHAR[]){'D','s','P','r','e','s','e','n','t','F','o','r','U','s','e','r',0}\n#else\nstatic const WCHAR SPLREG_DS_PRESENT_FOR_USERW[] = {'D','s','P','r','e','s','e','n','t','F','o','r','U','s','e','r',0};\n#endif\n#define SPLREG_DS_PRESENT_FOR_USER WINELIB_NAME_AW(SPLREG_DS_PRESENT_FOR_USER)\n\n#define SPLREG_REMOTE_FAXA \"RemoteFax\"\n#ifdef _MSC_VER\n#define SPLREG_REMOTE_FAXW L\"RemoteFax\"\n#elif defined(__GNUC__)\n#define SPLREG_REMOTE_FAXW (const WCHAR[]){'R','e','m','o','t','e','F','a','x',0}\n#else\nstatic const WCHAR SPLREG_REMOTE_FAXW[] = {'R','e','m','o','t','e','F','a','x',0};\n#endif\n#define SPLREG_REMOTE_FAX WINELIB_NAME_AW(SPLREG_REMOTE_FAX)\n\n#define SPLREG_RESTART_JOB_ON_POOL_ERRORA \"RestartJobOnPoolError\"\n#ifdef _MSC_VER\n#define SPLREG_RESTART_JOB_ON_POOL_ERRORW L\"RestartJobOnPoolError\"\n#elif defined(__GNUC__)\n#define SPLREG_RESTART_JOB_ON_POOL_ERRORW (const WCHAR[]){'R','e','s','t','a','r','t','J','o','b','O','n','P','o','o','l','E','r','r','o','r',0}\n#else\nstatic const WCHAR SPLREG_RESTART_JOB_ON_POOL_ERRORW[] = {'R','e','s','t','a','r','t','J','o','b','O','n','P','o','o','l','E','r','r','o','r',0};\n#endif\n#define SPLREG_RESTART_JOB_ON_POOL_ERROR WINELIB_NAME_AW(SPLREG_RESTART_JOB_ON_POOL_ERROR)\n\n#define SPLREG_RESTART_JOB_ON_POOL_ENABLEDA \"RestartJobOnPoolEnabled\"\n#ifdef _MSC_VER\n#define SPLREG_RESTART_JOB_ON_POOL_ENABLEDW L\"RestartJobOnPoolEnabled\"\n#elif defined(__GNUC__)\n#define SPLREG_RESTART_JOB_ON_POOL_ENABLEDW (const WCHAR[]){'R','e','s','t','a','r','t','J','o','b','O','n','P','o','o','l','E','n','a','b','l','e','d',0}\n#else\nstatic const WCHAR SPLREG_RESTART_JOB_ON_POOL_ENABLEDW[] = {'R','e','s','t','a','r','t','J','o','b','O','n','P','o','o','l','E','n','a','b','l','e','d',0};\n#endif\n#define SPLREG_RESTART_JOB_ON_POOL_ENABLED WINELIB_NAME_AW(SPLREG_RESTART_JOB_ON_POOL_ENABLED)\n\n#define SPLREG_DNS_MACHINE_NAMEA \"DNSMachineName\"\n#ifdef _MSC_VER\n#define SPLREG_DNS_MACHINE_NAMEW L\"DNSMachineName\"\n#elif defined(__GNUC__)\n#define SPLREG_DNS_MACHINE_NAMEW (const WCHAR[]){'D','N','S','M','a','c','h','i','n','e','N','a','m','e',0}\n#else\nstatic const WCHAR SPLREG_DNS_MACHINE_NAMEW[] = {'D','N','S','M','a','c','h','i','n','e','N','a','m','e',0};\n#endif\n#define SPLREG_DNS_MACHINE_NAME WINELIB_NAME_AW(SPLREG_DNS_MACHINE_NAME)\n\n#define SPLREG_ALLOW_USER_MANAGEFORMSA \"AllowUserManageForms\"\n#ifdef _MSC_VER\n#define SPLREG_ALLOW_USER_MANAGEFORMSW L\"AllowUserManageForms\"\n#elif defined(__GNUC__)\n#define SPLREG_ALLOW_USER_MANAGEFORMSW (const WCHAR[]){'A','l','l','o','w','U','s','e','r','M','a','n','a','g','e','F','o','r','m','s',0}\n#else\nstatic const WCHAR SPLREG_ALLOW_USER_MANAGEFORMSW[] = {'A','l','l','o','w','U','s','e','r','M','a','n','a','g','e','F','o','r','m','s',0};\n#endif\n#define SPLREG_ALLOW_USER_MANAGEFORMS WINELIB_NAME_AW(SPLREG_ALLOW_USER_MANAGEFORMS)\n\n#define SPLREG_WEBSHAREMGMTA \"WebShareMgmt\"\n#ifdef _MSC_VER\n#define SPLREG_WEBSHAREMGMTW L\"WebShareMgmt\"\n#elif defined(__GNUC__)\n#define SPLREG_WEBSHAREMGMTW (const WCHAR[]){'W','e','b','S','h','a','r','e','M','g','m','t',0}\n#else\nstatic const WCHAR SPLREG_WEBSHAREMGMTW[] = {'W','e','b','S','h','a','r','e','M','g','m','t',0};\n#endif\n#define SPLREG_WEBSHAREMGMT WINELIB_NAME_AW(SPLREG_WEBSHAREMGMT)\n\n#define SPLREG_PRINT_DRIVER_ISOLATION_GROUPSA \"PrintDriverIsolationGroups\"\n#ifdef _MSC_VER\n#define SPLREG_PRINT_DRIVER_ISOLATION_GROUPSW L\"PrintDriverIsolationGroups\"\n#elif defined(__GNUC__)\n#define SPLREG_PRINT_DRIVER_ISOLATION_GROUPSW (const WCHAR[]){'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','G','r','o','u','p','s',0}\n#else\nstatic const WCHAR SPLREG_PRINT_DRIVER_ISOLATION_GROUPSW[] = {'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','G','r','o','u','p','s',0};\n#endif\n#define SPLREG_PRINT_DRIVER_ISOLATION_GROUPS WINELIB_NAME_AW(SPLREG_PRINT_DRIVER_ISOLATION_GROUPS)\n\n#define SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLEA \"PrintDriverIsolationTimeBeforeRecycle\"\n#ifdef _MSC_VER\n#define SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLEW L\"PrintDriverIsolationTimeBeforeRecycle\"\n#elif defined(__GNUC__)\n#define SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLEW (const WCHAR[]){'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','T','i','m','e','B','e','f','o','r','e','R','e','c','y','c','l','e',0}\n#else\nstatic const WCHAR SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLEW[] = {'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','T','i','m','e','B','e','f','o','r','e','R','e','c','y','c','l','e',0};\n#endif\n#define SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLE WINELIB_NAME_AW(SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLE)\n\n#define SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLEA \"PrintDriverIsolationMaxobjsBeforeRecycle\"\n#ifdef _MSC_VER\n#define SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLEW L\"PrintDriverIsolationMaxobjsBeforeRecycle\"\n#elif defined(__GNUC__)\n#define SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLEW (const WCHAR[]){'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','M','a','x','o','b','j','s','B','e','f','o','r','e','R','e','c','y','c','l','e',0}\n#else\nstatic const WCHAR SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLEW[] = {'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','M','a','x','o','b','j','s','B','e','f','o','r','e','R','e','c','y','c','l','e',0};\n#endif\n#define SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLE WINELIB_NAME_AW(SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLE)\n\n#define SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUTA \"PrintDriverIsolationIdleTimeout\"\n#ifdef _MSC_VER\n#define SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUTW L\"PrintDriverIsolationIdleTimeout\"\n#elif defined(__GNUC__)\n#define SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUTW (const WCHAR[]){'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','I','d','l','e','T','i','m','e','o','u','t',0}\n#else\nstatic const WCHAR SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUTW[] = {'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','I','d','l','e','T','i','m','e','o','u','t',0};\n#endif\n#define SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUT WINELIB_NAME_AW(SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUT)\n\n#define SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICYA \"PrintDriverIsolationExecutionPolicy\"\n#ifdef _MSC_VER\n#define SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICYW L\"PrintDriverIsolationExecutionPolicy\"\n#elif defined(__GNUC__)\n#define SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICYW (const WCHAR[]){'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','E','x','e','c','u','t','i','o','n','P','o','l','i','c','y',0}\n#else\nstatic const WCHAR SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICYW[] = {'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','E','x','e','c','u','t','i','o','n','P','o','l','i','c','y',0};\n#endif\n#define SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICY WINELIB_NAME_AW(SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICY)\n\n#define SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICYA \"PrintDriverIsolationOverrideCompat\"\n#ifdef _MSC_VER\n#define SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICYW L\"PrintDriverIsolationOverrideCompat\"\n#elif defined(__GNUC__)\n#define SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICYW (const WCHAR[]){'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','O','v','e','r','r','i','d','e','C','o','m','p','a','t',0}\n#else\nstatic const WCHAR SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICYW[] = {'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','O','v','e','r','r','i','d','e','C','o','m','p','a','t',0};\n#endif\n#define SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICY WINELIB_NAME_AW(SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICY)\n\n/* DECLARATIONS */\nINT WINAPI DeviceCapabilitiesA(LPCSTR pDevice,LPCSTR pPort,WORD fwCapability,\n\t\t\t       LPSTR pOutput, LPDEVMODEA pDevMode);\nINT WINAPI DeviceCapabilitiesW(LPCWSTR pDevice, LPCWSTR pPort,\n\t\t\t       WORD fwCapability, LPWSTR pOutput,\n\t\t\t       const DEVMODEW *pDevMode);\n\n#define DeviceCapabilities WINELIB_NAME_AW(DeviceCapabilities)\n\nLONG WINAPI DocumentPropertiesA(HWND hWnd,HANDLE hPrinter,\n                                LPSTR pDeviceName, LPDEVMODEA pDevModeOutput,\n\t\t\t\tLPDEVMODEA pDevModeInput,DWORD fMode );\nLONG WINAPI DocumentPropertiesW(HWND hWnd, HANDLE hPrinter,\n\t\t\t\tLPWSTR pDeviceName,\n\t\t\t\tLPDEVMODEW pDevModeOutput,\n\t\t\t\tLPDEVMODEW pDevModeInput, DWORD fMode);\n\n#define DocumentProperties WINELIB_NAME_AW(DocumentProperties)\n\nBOOL WINAPI OpenPrinterA(LPSTR lpPrinterName,HANDLE *phPrinter,\n\t\t\t     LPPRINTER_DEFAULTSA pDefault);\nBOOL WINAPI OpenPrinterW(LPWSTR lpPrinterName,HANDLE *phPrinter,\n\t\t\t     LPPRINTER_DEFAULTSW pDefault);\n\n#define OpenPrinter WINELIB_NAME_AW(OpenPrinter)\n\nBOOL WINAPI ResetPrinterA(HANDLE hPrinter, LPPRINTER_DEFAULTSA pDefault);\nBOOL WINAPI ResetPrinterW(HANDLE hPrinter, LPPRINTER_DEFAULTSW pDefault);\n#define ResetPrinter WINELIB_NAME_AW(ResetPrinter)\n\nBOOL WINAPI ClosePrinter (HANDLE phPrinter);\n\nBOOL WINAPI EnumJobsA(HANDLE hPrinter, DWORD FirstJob, DWORD NoJobs,\n\t\t      DWORD Level, LPBYTE pJob, DWORD cbBuf, LPDWORD pcbNeeded,\n\t\t      LPDWORD pcReturned);\nBOOL WINAPI EnumJobsW(HANDLE hPrinter, DWORD FirstJob, DWORD NoJobs,\n\t\t      DWORD Level, LPBYTE pJob, DWORD cbBuf, LPDWORD pcbNeeded,\n\t\t      LPDWORD pcReturned);\n#define EnumJobs WINELIB_NAME_AW(EnumJobs)\n\nBOOL  WINAPI EnumPrintersA(DWORD dwType, LPSTR lpszName,\n\t\t\t       DWORD dwLevel, LPBYTE lpbPrinters,\n\t\t\t       DWORD cbBuf, LPDWORD lpdwNeeded,\n\t\t\t       LPDWORD lpdwReturned);\nBOOL  WINAPI EnumPrintersW(DWORD dwType, LPWSTR lpszName,\n\t\t\t       DWORD dwLevel, LPBYTE lpbPrinters,\n\t\t\t       DWORD cbBuf, LPDWORD lpdwNeeded,\n\t\t\t       LPDWORD lpdwReturned);\n#define EnumPrinters WINELIB_NAME_AW(EnumPrinters)\n\nBOOL WINAPI PrinterProperties(HWND hWnd, HANDLE hPrinter);\n\nBOOL WINAPI GetPrinterDriverDirectoryA(LPSTR,LPSTR,DWORD,LPBYTE,DWORD,LPDWORD);\nBOOL WINAPI GetPrinterDriverDirectoryW(LPWSTR,LPWSTR,DWORD,LPBYTE,DWORD,LPDWORD);\n#define GetPrinterDriverDirectory WINELIB_NAME_AW(GetPrinterDriverDirectory)\n\nBOOL WINAPI GetPrinterDriverA(HANDLE hPrinter, LPSTR pEnvironment,\n\t\t\t      DWORD Level, LPBYTE pDriverInfo,\n\t\t\t      DWORD cbBuf, LPDWORD pcbNeeded);\nBOOL WINAPI GetPrinterDriverW(HANDLE hPrinter, LPWSTR pEnvironment,\n\t\t\t      DWORD Level, LPBYTE pDriverInfo,\n\t\t\t      DWORD cbBuf, LPDWORD pcbNeeded);\n#define GetPrinterDriver WINELIB_NAME_AW(GetPrinterDriver)\n\nBOOL WINAPI SetJobA(HANDLE hPrinter, DWORD JobID, DWORD Level, LPBYTE pJob,\n\t\t    DWORD Command);\nBOOL WINAPI SetJobW(HANDLE hPrinter, DWORD JobID, DWORD Level, LPBYTE pJob,\n\t\t    DWORD Command);\n#define SetJob WINELIB_NAME_AW(SetJob)\n\nBOOL WINAPI GetJobA(HANDLE hPrinter, DWORD JobID, DWORD Level, LPBYTE pJob,\n\t\t    DWORD cbBuf, LPDWORD pcbNeeded);\nBOOL WINAPI GetJobW(HANDLE hPrinter, DWORD JobID, DWORD Level, LPBYTE pJob,\n\t\t    DWORD cbBuf, LPDWORD pcbNeeded);\n#define GetJob WINELIB_NAME_AW(GetJob)\n\nHANDLE WINAPI AddPrinterA(LPSTR pName, DWORD Level, LPBYTE pPrinter);\nHANDLE WINAPI AddPrinterW(LPWSTR pName, DWORD Level, LPBYTE pPrinter);\n#define AddPrinter WINELIB_NAME_AW(AddPrinter)\n\nBOOL WINAPI DeletePrinter(HANDLE hPrinter);\n\nBOOL WINAPI SetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter,\n\t\t\tDWORD Command);\nBOOL WINAPI SetPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter,\n\t\t\tDWORD Command);\n#define SetPrinter WINELIB_NAME_AW(SetPrinter)\n\nBOOL WINAPI GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter,\n\t\t\tDWORD cbBuf, LPDWORD pcbNeeded);\nBOOL WINAPI GetPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter,\n\t\t\tDWORD cbBuf, LPDWORD pcbNeeded);\n#define GetPrinter WINELIB_NAME_AW(GetPrinter)\n\nBOOL WINAPI AddPrinterDriverA(LPSTR pName, DWORD Level, LPBYTE pDriverInfo);\nBOOL WINAPI AddPrinterDriverW(LPWSTR pName, DWORD Level, LPBYTE pDriverInfo);\n#define AddPrinterDriver WINELIB_NAME_AW(AddPrinterDriver)\n\nBOOL WINAPI AddPrinterDriverExA(LPSTR pName, DWORD Level, LPBYTE pDriverInfo,\n                                DWORD dwFileCopyFlags);\nBOOL WINAPI AddPrinterDriverExW(LPWSTR pName, DWORD Level, LPBYTE pDriverInfo,\n                                DWORD dwFileCopyFlags);\n#define AddPrinterDriverEx WINELIB_NAME_AW(AddPrinterDriverEx)\n\nBOOL WINAPI EnumPrinterDriversA(LPSTR pName, LPSTR pEnvironment, DWORD Level,\n\t\t\t\tLPBYTE pDriverInfo, DWORD cbBuf,\n\t\t\t\tLPDWORD pcbNeeded, LPDWORD pcbReturned);\nBOOL WINAPI EnumPrinterDriversW(LPWSTR pName, LPWSTR pEnvironment, DWORD Level,\n\t\t\t\tLPBYTE pDriverInfo, DWORD cbBuf,\n\t\t\t\tLPDWORD pcbNeeded, LPDWORD pcbReturned);\n#define EnumPrinterDrivers WINELIB_NAME_AW(EnumPrinterDrivers)\n\nBOOL WINAPI GetDefaultPrinterA(LPSTR pName, LPDWORD pcbNameSize);\nBOOL WINAPI GetDefaultPrinterW(LPWSTR pName, LPDWORD pcbNameSize);\n#define GetDefaultPrinter WINELIB_NAME_AW(GetDefaultPrinter)\n\nBOOL WINAPI SetDefaultPrinterA(LPCSTR);\nBOOL WINAPI SetDefaultPrinterW(LPCWSTR);\n#define SetDefaultPrinter WINELIB_NAME_AW(SetDefaultPrinter)\n\nBOOL WINAPI DeletePrinterDriverA(LPSTR pName, LPSTR pEnvironment,\n\t\t\t\t LPSTR pDriverName);\nBOOL WINAPI DeletePrinterDriverW(LPWSTR pName, LPWSTR pEnvironment,\n\t\t\t\t LPWSTR pDriverName);\n#define DeletePrinterDriver WINELIB_NAME_AW(DeletePrinterDriver)\n\nBOOL WINAPI DeletePrinterDriverExA(LPSTR pName, LPSTR pEnvironment,\n                                   LPSTR pDriverName, DWORD dwDeleteFlag, DWORD dwVersionFlag);\nBOOL WINAPI DeletePrinterDriverExW(LPWSTR pName, LPWSTR pEnvironment,\n                                   LPWSTR pDriverName, DWORD dwDeleteFlag, DWORD dwVersionFlag);\n#define DeletePrinterDriverEx WINELIB_NAME_AW(DeletePrinterDriverEx)\n\nBOOL WINAPI AddPrintProcessorA(LPSTR pName, LPSTR pEnvironment,\n\t\t\t       LPSTR pPathName, LPSTR pPrintProcessorName);\nBOOL WINAPI AddPrintProcessorW(LPWSTR pName, LPWSTR pEnvironment,\n\t\t\t       LPWSTR pPathName, LPWSTR pPrintProcessorName);\n#define AddPrintProcessor WINELIB_NAME_AW(AddPrintProcessor)\n\nBOOL WINAPI EnumPrintProcessorsA(LPSTR pName, LPSTR pEnvironment,\n\t\t\t\t DWORD Level, LPBYTE pPrintProcessorInfo,\n\t\t\t\t DWORD cbBuf, LPDWORD pcbNeeded,\n\t\t\t\t LPDWORD pcbReturned);\nBOOL WINAPI EnumPrintProcessorsW(LPWSTR pName, LPWSTR pEnvironment,\n\t\t\t\t DWORD Level, LPBYTE pPrintProcessorInfo,\n\t\t\t\t DWORD cbBuf, LPDWORD pcbNeeded,\n\t\t\t\t LPDWORD pcbReturned);\n#define EnumPrintProcessors WINELIB_NAME_AW(EnumPrintProcessors)\n\nBOOL WINAPI GetPrintProcessorDirectoryA(LPSTR pName, LPSTR pEnvironment,\n\t\t\t\t\tDWORD Level,\n\t\t\t\t\tLPBYTE pPrintProcessorInfo,\n\t\t\t\t\tDWORD cbBuf, LPDWORD pcbNeeded);\n\nBOOL WINAPI GetPrintProcessorDirectoryW(LPWSTR pName, LPWSTR pEnvironment,\n\t\t\t\t\tDWORD Level,\n\t\t\t\t\tLPBYTE pPrintProcessorInfo,\n\t\t\t\t\tDWORD cbBuf, LPDWORD pcbNeeded);\n#define GetPrintProcessorDirectory WINELIB_NAME_AW(GetPrintProcessorDirectory)\n\nBOOL WINAPI EnumPrintProcessorDatatypesA(LPSTR pName,\n\t\t\t\t\t LPSTR pPrintProcessorName,\n\t\t\t\t\t DWORD Level, LPBYTE pDatatypes,\n\t\t\t\t\t DWORD cbBuf, LPDWORD pcbNeeded,\n\t\t\t\t\t LPDWORD pcbReturned);\nBOOL WINAPI EnumPrintProcessorDatatypesW(LPWSTR pName,\n\t\t\t\t\t LPWSTR pPrintProcessorName,\n\t\t\t\t\t DWORD Level, LPBYTE pDatatypes,\n\t\t\t\t\t DWORD cbBuf, LPDWORD pcbNeeded,\n\t\t\t\t\t LPDWORD pcbReturned);\n#define EnumPrintProcessorDatatypes WINELIB_NAME_AW(EnumPrintProcessorDatatypes)\n\nBOOL WINAPI DeletePrintProcessorA(LPSTR pName, LPSTR pEnvironment,\n\t\t\t\t  LPSTR pPrintProcessorName);\nBOOL WINAPI DeletePrintProcessorW(LPWSTR pName, LPWSTR pEnvironment,\n\t\t\t\t  LPWSTR pPrintProcessorName);\n#define DeletePrintProcessor WINELIB_NAME_AW(DeletePrintProcessor)\n\nDWORD WINAPI StartDocPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pDocInfo);\nDWORD WINAPI StartDocPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pDocInfo);\n#define StartDocPrinter WINELIB_NAME_AW(StartDocPrinter)\n\nBOOL WINAPI StartPagePrinter(HANDLE hPrinter);\nBOOL WINAPI WritePrinter(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf,\n\t\t\t LPDWORD pcWritten);\nBOOL WINAPI EndPagePrinter(HANDLE hPrinter);\nBOOL WINAPI AbortPrinter(HANDLE hPrinter);\nBOOL WINAPI ReadPrinter(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf,\n\t\t\tLPDWORD pNoBytesRead);\nBOOL WINAPI EndDocPrinter(HANDLE hPrinter);\n\nBOOL WINAPI AddJobA(HANDLE hPrinter, DWORD Level, LPBYTE pData, DWORD cbBuf,\n\t\t    LPDWORD pcbNeeded);\nBOOL WINAPI AddJobW(HANDLE hPrinter, DWORD Level, LPBYTE pData, DWORD cbBuf,\n\t\t    LPDWORD pcbNeeded);\n#define AddJob WINELIB_NAME_AW(AddJob)\n\nBOOL WINAPI ScheduleJob(HANDLE hPrinter, DWORD JobID);\n\nLONG WINAPI AdvancedDocumentPropertiesA(HWND hWnd, HANDLE hPrinter,\n\t\t\t\t\tLPSTR pDeviceName,\n\t\t\t\t\tPDEVMODEA pDevModeOutput,\n\t\t\t\t\tPDEVMODEA pDevModeInput);\nLONG WINAPI AdvancedDocumentPropertiesW(HWND hWnd, HANDLE hPrinter,\n\t\t\t\t\tLPWSTR pDeviceName,\n\t\t\t\t\tPDEVMODEW pDevModeOutput,\n\t\t\t\t\tPDEVMODEW pDevModeInput);\n#define AdvancedDocumentProperties WINELIB_NAME_AW(AdvancedDocumentProperties)\n\nDWORD WINAPI GetPrinterDataA(HANDLE hPrinter, LPSTR pValueName, LPDWORD pType,\n\t\t\t     LPBYTE pData, DWORD nSize, LPDWORD pcbNeeded);\nDWORD WINAPI GetPrinterDataW(HANDLE hPrinter, LPWSTR pValueName, LPDWORD pType,\n\t\t\t     LPBYTE pData, DWORD nSize, LPDWORD pcbNeeded);\n#define GetPrinterData WINELIB_NAME_AW(GetPrinterData)\n\nDWORD WINAPI GetPrinterDataExA(HANDLE hPrinter, LPCSTR pKeyName,\n\t\t\t       LPCSTR pValueName, LPDWORD pType,\n\t\t\t       LPBYTE pData, DWORD nSize, LPDWORD pcbNeeded);\nDWORD WINAPI GetPrinterDataExW(HANDLE hPrinter, LPCWSTR pKeyName,\n\t\t\t       LPCWSTR pValueName, LPDWORD pType,\n\t\t\t       LPBYTE pData, DWORD nSize, LPDWORD pcbNeeded);\n#define GetPrinterDataEx WINELIB_NAME_AW(GetPrinterDataEx)\n\nDWORD WINAPI DeletePrinterDataExA(HANDLE hPrinter, LPCSTR pKeyName,\n                                  LPCSTR pValueName);\nDWORD WINAPI DeletePrinterDataExW(HANDLE hPrinter, LPCWSTR pKeyName,\n                                  LPCWSTR pValueName);\n#define DeletePrinterDataEx WINELIB_NAME_AW(DeletePrinterDataEx)\n\nDWORD WINAPI SetPrinterDataA(HANDLE hPrinter, LPSTR pValueName, DWORD Type,\n\t\t\t     LPBYTE pData, DWORD cbData);\nDWORD WINAPI SetPrinterDataW(HANDLE hPrinter, LPWSTR pValueName, DWORD Type,\n\t\t\t     LPBYTE pData, DWORD cbData);\n#define SetPrinterData WINELIB_NAME_AW(SetPrinterData)\n\nDWORD WINAPI SetPrinterDataExA(HANDLE hPrinter, LPCSTR pKeyName,\n\t\t\t       LPCSTR pValueName, DWORD Type,\n\t\t\t       LPBYTE pData, DWORD cbData);\nDWORD WINAPI SetPrinterDataExW(HANDLE hPrinter, LPCWSTR pKeyName,\n\t\t\t       LPCWSTR pValueName, DWORD Type,\n\t\t\t       LPBYTE pData, DWORD cbData);\n#define SetPrinterDataEx WINELIB_NAME_AW(SetPrinterDataEx)\n\nDWORD WINAPI WaitForPrinterChange(HANDLE hPrinter, DWORD Flags);\nHANDLE WINAPI FindFirstPrinterChangeNotification(HANDLE hPrinter,\n\t\t\t\t\t\t DWORD fdwFlags,\n\t\t\t\t\t\t DWORD fdwOptions,\n\t\t\t\t\t\t LPVOID pPrinterNotifyOptions);\nBOOL WINAPI FindNextPrinterChangeNotification(HANDLE hChange,\n\t\t\t\t\t      PDWORD pdwChange,\n\t\t\t\t\t      LPVOID pvReserved,\n\t\t\t\t\t      LPVOID *ppPrinterNotifyInfo);\nBOOL WINAPI FreePrinterNotifyInfo(PPRINTER_NOTIFY_INFO pPrinterNotifyInfo);\nBOOL WINAPI FindClosePrinterChangeNotification(HANDLE hChange);\n\nDWORD WINAPI PrinterMessageBoxA(HANDLE hPrinter, DWORD Error, HWND hWnd,\n\t\t\t\tLPSTR pText, LPSTR pCaption, DWORD dwType);\nDWORD WINAPI PrinterMessageBoxW(HANDLE hPrinter, DWORD Error, HWND hWnd,\n\t\t\t\tLPWSTR pText, LPWSTR pCaption, DWORD dwType);\n#define PrinterMessageBox WINELIB_NAME_AW(PrinterMessageBox)\n\nBOOL WINAPI AddFormA(HANDLE hPrinter, DWORD Level, LPBYTE pForm);\nBOOL WINAPI AddFormW(HANDLE hPrinter, DWORD Level, LPBYTE pForm);\n#define AddForm WINELIB_NAME_AW(AddForm)\n\nBOOL WINAPI DeleteFormA(HANDLE hPrinter, LPSTR pFormName);\nBOOL WINAPI DeleteFormW(HANDLE hPrinter, LPWSTR pFormName);\n#define DeleteForm WINELIB_NAME_AW(DeleteForm)\n\nBOOL WINAPI GetFormA(HANDLE hPrinter, LPSTR pFormName, DWORD Level,\n\t\t     LPBYTE pForm, DWORD cbBuf, LPDWORD pcbNeeded);\nBOOL WINAPI GetFormW(HANDLE hPrinter, LPWSTR pFormName, DWORD Level,\n\t\t     LPBYTE pForm, DWORD cbBuf, LPDWORD pcbNeeded);\n#define GetForm WINELIB_NAME_AW(GetForm)\n\nBOOL WINAPI SetFormA(HANDLE hPrinter, LPSTR pFormName, DWORD Level,\n\t\t     LPBYTE pForm);\nBOOL WINAPI SetFormW(HANDLE hPrinter, LPWSTR pFormName, DWORD Level,\n\t\t     LPBYTE pForm);\n#define SetForm WINELIB_NAME_AW(SetForm)\n\nBOOL WINAPI EnumFormsA(HANDLE hPrinter, DWORD Level, LPBYTE pForm, DWORD cbBuf,\n\t\t       LPDWORD pcbNeeded, LPDWORD pcReturned);\nBOOL WINAPI EnumFormsW(HANDLE hPrinter, DWORD Level, LPBYTE pForm, DWORD cbBuf,\n\t\t       LPDWORD pcbNeeded, LPDWORD pcReturned);\n#define EnumForms WINELIB_NAME_AW(EnumForms)\n\nBOOL WINAPI EnumMonitorsA(LPSTR pName, DWORD Level, LPBYTE pMonitors,\n\t\t\t  DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);\nBOOL WINAPI EnumMonitorsW(LPWSTR pName, DWORD Level, LPBYTE pMonitors,\n\t\t\t  DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);\n#define EnumMonitors WINELIB_NAME_AW(EnumMonitors)\n\nDWORD WINAPI EnumPrinterDataA( HANDLE hPrinter, DWORD dwIndex, LPSTR pValueName,\n    DWORD cbValueName, LPDWORD pcbValueName, LPDWORD pType, LPBYTE pData,\n    DWORD cbData, LPDWORD pcbData );\nDWORD WINAPI EnumPrinterDataW( HANDLE hPrinter, DWORD dwIndex, LPWSTR pValueName,\n    DWORD cbValueName, LPDWORD pcbValueName, LPDWORD pType, LPBYTE pData,\n    DWORD cbData, LPDWORD pcbData );\n#define EnumPrinterData WINELIB_NAME_AW(EnumPrinterData)\n\nBOOL WINAPI AddMonitorA(LPSTR pName, DWORD Level, LPBYTE pMonitors);\nBOOL WINAPI AddMonitorW(LPWSTR pName, DWORD Level, LPBYTE pMonitors);\n#define AddMonitor WINELIB_NAME_AW(AddMonitor)\n\nBOOL WINAPI DeleteMonitorA(LPSTR pName, LPSTR pEnvironment,\n\t\t\t   LPSTR pMonitorName);\nBOOL WINAPI DeleteMonitorW(LPWSTR pName, LPWSTR pEnvironment,\n\t\t\t   LPWSTR pMonitorName);\n#define DeleteMonitor WINELIB_NAME_AW(DeleteMonitor)\n\nBOOL WINAPI EnumPortsA(LPSTR pName, DWORD Level, LPBYTE pPorts,\n\t\t       DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);\nBOOL WINAPI EnumPortsW(LPWSTR pName, DWORD Level, LPBYTE pPorts,\n\t\t       DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);\n#define EnumPorts WINELIB_NAME_AW(EnumPorts)\n\nBOOL WINAPI AddPortA(LPSTR pName, HWND hWnd, LPSTR pMonitorName);\nBOOL WINAPI AddPortW(LPWSTR pName, HWND hWnd, LPWSTR pMonitorName);\n#define AddPort WINELIB_NAME_AW(AddPort)\n\nBOOL WINAPI AddPortExA(LPSTR, DWORD, LPBYTE, LPSTR);\nBOOL WINAPI AddPortExW(LPWSTR, DWORD, LPBYTE, LPWSTR);\n#define AddPortEx WINELIB_NAME_AW(AddPortEx)\n\nBOOL WINAPI ConfigurePortA(LPSTR pName, HWND hWnd, LPSTR pPortName);\nBOOL WINAPI ConfigurePortW(LPWSTR pName, HWND hWnd, LPWSTR pPortName);\n#define ConfigurePort WINELIB_NAME_AW(ConfigurePort)\n\nBOOL WINAPI DeletePortA(LPSTR pName, HWND hWnd, LPSTR pPortName);\nBOOL WINAPI DeletePortW(LPWSTR pName, HWND hWnd, LPWSTR pPortName);\n#define DeletePort WINELIB_NAME_AW(DeletePort)\n\nBOOL WINAPI SetPortA(LPSTR pName, LPSTR pPortName, DWORD dwLevel,\n\t\t     LPBYTE pPortInfo);\nBOOL WINAPI SetPortW(LPWSTR pName, LPWSTR pPortName, DWORD dwLevel,\n\t\t     LPBYTE pPortInfo);\n#define SetPort WINELIB_NAME_AW(SetPort)\n\nBOOL WINAPI AddPrinterConnectionA(LPSTR pName);\nBOOL WINAPI AddPrinterConnectionW(LPWSTR pName);\n#define AddPrinterConnection WINELIB_NAME_AW(AddPrinterConnection)\n\nBOOL WINAPI DeletePrinterConnectionA(LPSTR pName);\nBOOL WINAPI DeletePrinterConnectionW(LPWSTR pName);\n#define DeletePrinterConnection WINELIB_NAME_AW(DeletePrinterConnection)\n\nHANDLE WINAPI ConnectToPrinterDlg(HWND hwnd, DWORD Flags);\n\nBOOL WINAPI AddPrintProvidorA(LPSTR pName, DWORD Level, LPBYTE pProvidorInfo);\nBOOL WINAPI AddPrintProvidorW(LPWSTR pName, DWORD Level, LPBYTE pProvidorInfo);\n#define AddPrintProvidor WINELIB_NAME_AW(AddPrintProvidor)\n\nBOOL WINAPI DeletePrintProvidorA(LPSTR pName, LPSTR pEnvironment,\n\t\t\t\t LPSTR pPrintProvidorName);\nBOOL WINAPI DeletePrintProvidorW(LPWSTR pName, LPWSTR pEnvironment,\n\t\t\t\t LPWSTR pPrintProvidorName);\n#define DeletePrintProvidor WINELIB_NAME_AW(DeletePrintProvidor)\n\nDWORD WINAPI EnumPrinterKeyA(HANDLE printer, const CHAR *key,\n                             CHAR *subkey, DWORD size, DWORD *needed);\nDWORD WINAPI EnumPrinterKeyW(HANDLE printer, const WCHAR *key,\n                             WCHAR *subkey, DWORD size, DWORD *needed);\n#define EnumPrinterKey WINELIB_NAME_AW(EnumPrinterKey)\n\nDWORD WINAPI EnumPrinterDataExA(HANDLE hPrinter, LPCSTR pKeyName,\n\t\t\t\tLPBYTE pEnumValues, DWORD cbEnumValues,\n\t\t\t\tLPDWORD pcbEnumValues, LPDWORD pnEnumValues);\nDWORD WINAPI EnumPrinterDataExW(HANDLE hPrinter, LPCWSTR pKeyName,\n\t\t\t\tLPBYTE pEnumValues, DWORD cbEnumValues,\n\t\t\t\tLPDWORD pcbEnumValues, LPDWORD pnEnumValues);\n#define EnumPrinterDataEx WINELIB_NAME_AW(EnumPrinterDataEx)\n\nLONG WINAPI ExtDeviceMode( HWND hWnd, HANDLE hInst, LPDEVMODEA pDevModeOutput,\n    LPSTR pDeviceName, LPSTR pPort, LPDEVMODEA pDevModeInput, LPSTR pProfile,\n    DWORD fMode);\n\nLPSTR WINAPI StartDocDlgA(HANDLE hPrinter, DOCINFOA *doc);\nLPWSTR WINAPI StartDocDlgW(HANDLE hPrinter, DOCINFOW *doc);\n#define StartDocDlg WINELIB_NAME_AW(StartDocDlg)\n\nHRESULT WINAPI UploadPrinterDriverPackageA(LPCSTR,LPCSTR,LPCSTR,DWORD,HWND,LPSTR,PULONG);\nHRESULT WINAPI UploadPrinterDriverPackageW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,HWND,LPWSTR,PULONG);\n#define UploadPrinterDriverPackage WINELIB_NAME_AW(UploadPrinterDriverPackage)\n\nBOOL WINAPI XcvDataW(HANDLE hXcv, LPCWSTR pszDataName, PBYTE pInputData,\n    DWORD cbInputData, PBYTE pOutputData, DWORD cbOutputData,\n    PDWORD pcbOutputNeeded, PDWORD pdwStatus);\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif\n\n#endif  /* __WINE_WINSPOOL_H */\n"
  },
  {
    "path": "wine/windows/winstring.h",
    "content": "/*\n * Copyright (C) 2014 Martin Storsjo\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINSTRING_H\n#define __WINE_WINSTRING_H\n\n#include <hstring.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nHRESULT WINAPI WindowsCompareStringOrdinal(HSTRING str1, HSTRING str2, INT32 *order);\nHRESULT WINAPI WindowsConcatString(HSTRING str1, HSTRING str2, HSTRING *out);\nHRESULT WINAPI WindowsCreateString(LPCWSTR ptr, UINT32 len, HSTRING *out);\nHRESULT WINAPI WindowsCreateStringReference(LPCWSTR ptr, UINT32 len,\n                                            HSTRING_HEADER *header, HSTRING *out);\nHRESULT WINAPI WindowsDeleteString(HSTRING str);\nHRESULT WINAPI WindowsDeleteStringBuffer(HSTRING_BUFFER buf);\nHRESULT WINAPI WindowsDuplicateString(HSTRING str, HSTRING *out);\nUINT32  WINAPI WindowsGetStringLen(HSTRING str);\nLPCWSTR WINAPI WindowsGetStringRawBuffer(HSTRING str, UINT32 *len);\nBOOL    WINAPI WindowsIsStringEmpty(HSTRING str);\nHRESULT WINAPI WindowsPreallocateStringBuffer(UINT32 len, WCHAR **outptr, HSTRING_BUFFER *out);\nHRESULT WINAPI WindowsPromoteStringBuffer(HSTRING_BUFFER buf, HSTRING *out);\nHRESULT WINAPI WindowsReplaceString(HSTRING haystack, HSTRING needle, HSTRING replacement,\n                                    HSTRING *out);\nHRESULT WINAPI WindowsStringHasEmbeddedNull(HSTRING str, BOOL *out);\nHRESULT WINAPI WindowsSubstring(HSTRING str, UINT32 pos, HSTRING *out);\nHRESULT WINAPI WindowsSubstringWithSpecifiedLength(HSTRING str, UINT32 pos,\n                                                   UINT32 len, HSTRING *out);\nHRESULT WINAPI WindowsTrimStringEnd(HSTRING str, HSTRING charstr, HSTRING *out);\nHRESULT WINAPI WindowsTrimStringStart(HSTRING str, HSTRING charstr, HSTRING *out);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* __WINE_WINSTRING_H */\n"
  },
  {
    "path": "wine/windows/winsvc.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINSVC_H\n#define __WINE_WINSVC_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n#ifdef _ADVAPI32_\n#define WINADVAPI\n#else\n#define WINADVAPI DECLSPEC_IMPORT\n#endif\n\n/* Service database names */\n#define SERVICES_ACTIVE_DATABASEA     \"ServicesActive\"\n#define SERVICES_FAILED_DATABASEA     \"ServicesFailed\"\n\n#if defined(__GNUC__)\n# define SERVICES_ACTIVE_DATABASEW    (const WCHAR []){ 'S','e','r','v','i','c','e','s','A','c','t','i','v','e',0 }\n# define SERVICES_FAILED_DATABASEW    (const WCHAR []){ 'S','e','r','v','i','c','e','s','F','a','i','l','e','d',0 }\n#elif defined(_MSC_VER)\n# define SERVICES_ACTIVE_DATABASEW    L\"ServicesActive\"\n# define SERVICES_FAILED_DATABASEW    L\"ServicesFailed\"\n#else\nstatic const WCHAR SERVICES_ACTIVE_DATABASEW[] = { 'S','e','r','v','i','c','e','s','A','c','t','i','v','e',0 };\nstatic const WCHAR SERVICES_FAILED_DATABASEW[] = { 'S','e','r','v','i','c','e','s','F','a','i','l','e','d',0 };\n#endif\n\n#define SERVICES_ACTIVE_DATABASE      WINELIB_NAME_AW( SERVICES_ACTIVE_DATABASE )\n#define SERVICES_FAILED_DATABASE      WINELIB_NAME_AW( SERVICES_FAILED_DATABASE )\n\n/* Service State requests */\n#define SERVICE_ACTIVE                        0x00000001\n#define SERVICE_INACTIVE                      0x00000002\n#define SERVICE_STATE_ALL                     (SERVICE_ACTIVE | SERVICE_INACTIVE)\n\n/* Controls */\n#define SERVICE_CONTROL_STOP                  0x00000001\n#define SERVICE_CONTROL_PAUSE                 0x00000002\n#define SERVICE_CONTROL_CONTINUE              0x00000003\n#define SERVICE_CONTROL_INTERROGATE           0x00000004\n#define SERVICE_CONTROL_SHUTDOWN              0x00000005\n#define SERVICE_CONTROL_PARAMCHANGE           0x00000006\n#define SERVICE_CONTROL_NETBINDADD            0x00000007\n#define SERVICE_CONTROL_NETBINDREMOVE         0x00000008\n#define SERVICE_CONTROL_NETBINDENABLE         0x00000009\n#define SERVICE_CONTROL_NETBINDDISABLE        0x0000000A\n#define SERVICE_CONTROL_DEVICEEVENT           0x0000000B\n#define SERVICE_CONTROL_HARDWAREPROFILECHANGE 0x0000000C\n#define SERVICE_CONTROL_POWEREVENT            0x0000000D\n#define SERVICE_CONTROL_SESSIONCHANGE         0x0000000E\n#define SERVICE_CONTROL_PRESHUTDOWN           0x0000000F\n\n/* Service State */\n#define SERVICE_STOPPED          0x00000001\n#define SERVICE_START_PENDING    0x00000002\n#define SERVICE_STOP_PENDING     0x00000003\n#define SERVICE_RUNNING          0x00000004\n#define SERVICE_CONTINUE_PENDING 0x00000005\n#define SERVICE_PAUSE_PENDING    0x00000006\n#define SERVICE_PAUSED           0x00000007\n\n/* Controls Accepted */\n#define SERVICE_ACCEPT_STOP                  0x00000001\n#define SERVICE_ACCEPT_PAUSE_CONTINUE        0x00000002\n#define SERVICE_ACCEPT_SHUTDOWN              0x00000004\n#define SERVICE_ACCEPT_PARAMCHANGE           0x00000008\n#define SERVICE_ACCEPT_NETBINDCHANGE         0x00000010\n#define SERVICE_ACCEPT_HARDWAREPROFILECHANGE 0x00000020\n#define SERVICE_ACCEPT_POWEREVENT            0x00000040\n#define SERVICE_ACCEPT_SESSIONCHANGE         0x00000080\n#define SERVICE_ACCEPT_PRESHUTDOWN           0x00000100\n\n/* Service Control Manager Object access types */\n#define SC_MANAGER_CONNECT            0x0001\n#define SC_MANAGER_CREATE_SERVICE     0x0002\n#define SC_MANAGER_ENUMERATE_SERVICE  0x0004\n#define SC_MANAGER_LOCK               0x0008\n#define SC_MANAGER_QUERY_LOCK_STATUS  0x0010\n#define SC_MANAGER_MODIFY_BOOT_CONFIG 0x0020\n#define SC_MANAGER_ALL_ACCESS         ( STANDARD_RIGHTS_REQUIRED      | \\\n                                        SC_MANAGER_CONNECT            | \\\n                                        SC_MANAGER_CREATE_SERVICE     | \\\n                                        SC_MANAGER_ENUMERATE_SERVICE  | \\\n                                        SC_MANAGER_LOCK               | \\\n                                        SC_MANAGER_QUERY_LOCK_STATUS  | \\\n                                        SC_MANAGER_MODIFY_BOOT_CONFIG )\n\n#define SERVICE_QUERY_CONFIG         0x0001\n#define SERVICE_CHANGE_CONFIG        0x0002\n#define SERVICE_QUERY_STATUS         0x0004\n#define SERVICE_ENUMERATE_DEPENDENTS 0x0008\n#define SERVICE_START                0x0010\n#define SERVICE_STOP                 0x0020\n#define SERVICE_PAUSE_CONTINUE       0x0040\n#define SERVICE_INTERROGATE          0x0080\n#define SERVICE_USER_DEFINED_CONTROL 0x0100\n\n#define SERVICE_ALL_ACCESS           ( STANDARD_RIGHTS_REQUIRED     | \\\n                                       SERVICE_QUERY_CONFIG         | \\\n                                       SERVICE_CHANGE_CONFIG        | \\\n                                       SERVICE_QUERY_STATUS         | \\\n                                       SERVICE_ENUMERATE_DEPENDENTS | \\\n                                       SERVICE_START                | \\\n                                       SERVICE_STOP                 | \\\n                                       SERVICE_PAUSE_CONTINUE       | \\\n                                       SERVICE_INTERROGATE          | \\\n                                       SERVICE_USER_DEFINED_CONTROL )\n\n#define SERVICE_NO_CHANGE 0xffffffff\n\n\n/* Handle types */\n\nDECLARE_HANDLE(SC_HANDLE);\ntypedef SC_HANDLE *LPSC_HANDLE;\nDECLARE_HANDLE(SERVICE_STATUS_HANDLE);\ntypedef LPVOID SC_LOCK;\n\n/* Service status structure */\n\ntypedef struct _SERVICE_STATUS {\n  DWORD dwServiceType;\n  DWORD dwCurrentState;\n  DWORD dwControlsAccepted;\n  DWORD dwWin32ExitCode;\n  DWORD dwServiceSpecificExitCode;\n  DWORD dwCheckPoint;\n  DWORD dwWaitHint;\n} SERVICE_STATUS, *LPSERVICE_STATUS;\n\n/* Service status process structure */\n\ntypedef struct _SERVICE_STATUS_PROCESS\n{\n  DWORD dwServiceType;\n  DWORD dwCurrentState;\n  DWORD dwControlsAccepted;\n  DWORD dwWin32ExitCode;\n  DWORD dwServiceSpecificExitCode;\n  DWORD dwCheckPoint;\n  DWORD dwWaitHint;\n  DWORD dwProcessId;\n  DWORD dwServiceFlags;\n} SERVICE_STATUS_PROCESS, *LPSERVICE_STATUS_PROCESS;\n\n#define SERVICE_NOTIFY_STATUS_CHANGE 2\n\n#define SERVICE_NOTIFY_STOPPED 0x1\n#define SERVICE_NOTIFY_START_PENDING 0x2\n#define SERVICE_NOTIFY_STOP_PENDING 0x4\n#define SERVICE_NOTIFY_RUNNING 0x8\n#define SERVICE_NOTIFY_CONTINUE_PENDING 0x10\n#define SERVICE_NOTIFY_PAUSE_PENDING 0x20\n#define SERVICE_NOTIFY_PAUSED 0x40\n#define SERVICE_NOTIFY_CREATED 0x80\n#define SERVICE_NOTIFY_DELETED 0x100\n#define SERVICE_NOTIFY_DELETE_PENDING 0x200\n\ntypedef void (CALLBACK *PFN_SC_NOTIFY_CALLBACK)(void *);\n\ntypedef struct _SERVICE_NOTIFY_2A {\n    DWORD dwVersion;\n    PFN_SC_NOTIFY_CALLBACK pfnNotifyCallback;\n    void *pContext;\n    DWORD dwNotificationStatus;\n    SERVICE_STATUS_PROCESS ServiceStatus;\n    DWORD dwNotificationTriggered;\n    char *pszServiceNames;\n} SERVICE_NOTIFY_2A, SERVICE_NOTIFYA;\n\ntypedef struct _SERVICE_NOTIFY_2W {\n    DWORD dwVersion;\n    PFN_SC_NOTIFY_CALLBACK pfnNotifyCallback;\n    void *pContext;\n    DWORD dwNotificationStatus;\n    SERVICE_STATUS_PROCESS ServiceStatus;\n    DWORD dwNotificationTriggered;\n    WCHAR *pszServiceNames;\n} SERVICE_NOTIFY_2W, SERVICE_NOTIFYW;\n\nDWORD WINAPI NotifyServiceStatusChangeW(SC_HANDLE,DWORD,SERVICE_NOTIFYW*);\n\ntypedef enum _SC_STATUS_TYPE {\n  SC_STATUS_PROCESS_INFO      = 0\n} SC_STATUS_TYPE;\n\n/* Service main function prototype */\n\ntypedef VOID (CALLBACK *LPSERVICE_MAIN_FUNCTIONA)(DWORD,LPSTR*);\ntypedef VOID (CALLBACK *LPSERVICE_MAIN_FUNCTIONW)(DWORD,LPWSTR*);\nDECL_WINELIB_TYPE_AW(LPSERVICE_MAIN_FUNCTION)\n\n/* Service start table */\n\ntypedef struct _SERVICE_TABLE_ENTRYA {\n    LPSTR                    lpServiceName;\n    LPSERVICE_MAIN_FUNCTIONA lpServiceProc;\n} SERVICE_TABLE_ENTRYA, *LPSERVICE_TABLE_ENTRYA;\n\ntypedef struct _SERVICE_TABLE_ENTRYW {\n  LPWSTR                   lpServiceName;\n  LPSERVICE_MAIN_FUNCTIONW lpServiceProc;\n} SERVICE_TABLE_ENTRYW, *LPSERVICE_TABLE_ENTRYW;\n\nDECL_WINELIB_TYPE_AW(SERVICE_TABLE_ENTRY)\nDECL_WINELIB_TYPE_AW(LPSERVICE_TABLE_ENTRY)\n\n/* Service status enumeration structure */\n\ntypedef struct _ENUM_SERVICE_STATUSA {\n  LPSTR          lpServiceName;\n  LPSTR          lpDisplayName;\n  SERVICE_STATUS ServiceStatus;\n} ENUM_SERVICE_STATUSA, *LPENUM_SERVICE_STATUSA;\n\ntypedef struct _ENUM_SERVICE_STATUSW {\n    LPWSTR         lpServiceName;\n    LPWSTR         lpDisplayName;\n    SERVICE_STATUS ServiceStatus;\n} ENUM_SERVICE_STATUSW, *LPENUM_SERVICE_STATUSW;\n\nDECL_WINELIB_TYPE_AW(ENUM_SERVICE_STATUS)\nDECL_WINELIB_TYPE_AW(LPENUM_SERVICE_STATUS)\n\ntypedef struct _ENUM_SERVICE_STATUS_PROCESSA {\n  LPSTR          lpServiceName;\n  LPSTR          lpDisplayName;\n  SERVICE_STATUS_PROCESS ServiceStatusProcess;\n} ENUM_SERVICE_STATUS_PROCESSA, *LPENUM_SERVICE_STATUS_PROCESSA;\n\ntypedef struct _ENUM_SERVICE_STATUS_PROCESSW {\n    LPWSTR         lpServiceName;\n    LPWSTR         lpDisplayName;\n    SERVICE_STATUS_PROCESS ServiceStatusProcess;\n} ENUM_SERVICE_STATUS_PROCESSW, *LPENUM_SERVICE_STATUS_PROCESSW;\n\nDECL_WINELIB_TYPE_AW(ENUM_SERVICE_STATUS_PROCESS)\nDECL_WINELIB_TYPE_AW(LPENUM_SERVICE_STATUS_PROCESS)\n\ntypedef enum _SC_ENUM_TYPE {\n    SC_ENUM_PROCESS_INFO      = 0\n} SC_ENUM_TYPE;\n\ntypedef struct _QUERY_SERVICE_CONFIGA {\n    DWORD   dwServiceType;\n    DWORD   dwStartType;\n    DWORD   dwErrorControl;\n    LPSTR   lpBinaryPathName;\n    LPSTR   lpLoadOrderGroup;\n    DWORD   dwTagId;\n    LPSTR   lpDependencies;\n    LPSTR   lpServiceStartName;\n    LPSTR   lpDisplayName;\n} QUERY_SERVICE_CONFIGA, *LPQUERY_SERVICE_CONFIGA;\n\ntypedef struct _QUERY_SERVICE_CONFIGW {\n    DWORD   dwServiceType;\n    DWORD   dwStartType;\n    DWORD   dwErrorControl;\n    LPWSTR  lpBinaryPathName;\n    LPWSTR  lpLoadOrderGroup;\n    DWORD   dwTagId;\n    LPWSTR  lpDependencies;\n    LPWSTR  lpServiceStartName;\n    LPWSTR  lpDisplayName;\n} QUERY_SERVICE_CONFIGW, *LPQUERY_SERVICE_CONFIGW;\n\n/* defines and structures for ChangeServiceConfig2 */\n#define SERVICE_CONFIG_DESCRIPTION              1\n#define SERVICE_CONFIG_FAILURE_ACTIONS          2\n#define SERVICE_CONFIG_DELAYED_AUTO_START_INFO  3\n#define SERVICE_CONFIG_FAILURE_ACTIONS_FLAG     4\n#define SERVICE_CONFIG_SERVICE_SID_INFO         5\n#define SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO 6\n#define SERVICE_CONFIG_PRESHUTDOWN_INFO         7\n\n\ntypedef struct _SERVICE_DESCRIPTIONA {\n   LPSTR lpDescription;\n} SERVICE_DESCRIPTIONA,*LPSERVICE_DESCRIPTIONA;\n\ntypedef struct _SERVICE_DESCRIPTIONW {\n   LPWSTR lpDescription;\n} SERVICE_DESCRIPTIONW,*LPSERVICE_DESCRIPTIONW;\n\nDECL_WINELIB_TYPE_AW(SERVICE_DESCRIPTION)\nDECL_WINELIB_TYPE_AW(LPSERVICE_DESCRIPTION)\n\ntypedef enum _SC_ACTION_TYPE {\n    SC_ACTION_NONE        = 0,\n    SC_ACTION_RESTART     = 1,\n    SC_ACTION_REBOOT      = 2,\n    SC_ACTION_RUN_COMMAND = 3\n} SC_ACTION_TYPE;\n\ntypedef struct _SC_ACTION {\n   SC_ACTION_TYPE  Type;\n   DWORD       Delay;\n} SC_ACTION,*LPSC_ACTION;\n\ntypedef struct _SERVICE_FAILURE_ACTIONSA {\n   DWORD   dwResetPeriod;\n   LPSTR   lpRebootMsg;\n   LPSTR   lpCommand;\n   DWORD   cActions;\n   SC_ACTION * lpsaActions;\n} SERVICE_FAILURE_ACTIONSA,*LPSERVICE_FAILURE_ACTIONSA;\n\ntypedef struct _SERVICE_FAILURE_ACTIONSW {\n   DWORD   dwResetPeriod;\n   LPWSTR  lpRebootMsg;\n   LPWSTR  lpCommand;\n   DWORD   cActions;\n   SC_ACTION * lpsaActions;\n} SERVICE_FAILURE_ACTIONSW,*LPSERVICE_FAILURE_ACTIONSW;\n\nDECL_WINELIB_TYPE_AW(SERVICE_FAILURE_ACTIONS)\nDECL_WINELIB_TYPE_AW(LPSERVICE_FAILURE_ACTIONS)\n\ntypedef struct _SERVICE_DELAYED_AUTO_START_INFO {\n    BOOL fDelayedAutostart;\n} SERVICE_DELAYED_AUTO_START_INFO,*LPSERVICE_DELAYED_AUTO_START_INFO;\n\ntypedef struct _SERVICE_FAILURE_ACTIONS_FLAG {\n    BOOL fFailureActionsOnNonCrashFailures;\n} SERVICE_FAILURE_ACTIONS_FLAG,*LPSERVICE_FAILURE_ACTIONS_FLAG;\n\ntypedef struct _SERVICE_SID_INFO {\n    DWORD dwServiceSidType;\n} SERVICE_SID_INFO,*LPSERVICE_SID_INFO;\n\ntypedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOA {\n    LPSTR pmszRequiredPrivileges;\n} SERVICE_REQUIRED_PRIVILEGES_INFOA,*LPSERVICE_REQUIRED_PRIVILEGES_INFOA;\n\ntypedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOW {\n    LPWSTR pmszRequiredPrivileges;\n} SERVICE_REQUIRED_PRIVILEGES_INFOW,*LPSERVICE_REQUIRED_PRIVILEGES_INFOW;\n\nDECL_WINELIB_TYPE_AW(SERVICE_REQUIRED_PRIVILEGES_INFO)\nDECL_WINELIB_TYPE_AW(LPSERVICE_REQUIRED_PRIVILEGES_INFO)\n\ntypedef struct _SERVICE_PRESHUTDOWN_INFO {\n    DWORD dwPreshutdownTimeout;\n} SERVICE_PRESHUTDOWN_INFO,*LPSERVICE_PRESHUTDOWN_INFO;\n\ntypedef struct _QUERY_SERVICE_LOCK_STATUSA\n{\n  DWORD fIsLocked;\n  LPSTR lpLockOwner;\n  DWORD dwLockDuration;\n} QUERY_SERVICE_LOCK_STATUSA, *LPQUERY_SERVICE_LOCK_STATUSA;\n\ntypedef struct _QUERY_SERVICE_LOCK_STATUSW\n{\n  DWORD fIsLocked;\n  LPWSTR lpLockOwner;\n  DWORD dwLockDuration;\n} QUERY_SERVICE_LOCK_STATUSW, *LPQUERY_SERVICE_LOCK_STATUSW;\n\nDECL_WINELIB_TYPE_AW(QUERY_SERVICE_LOCK_STATUS)\n\n/* Service control handler function prototype */\n\ntypedef VOID (WINAPI *LPHANDLER_FUNCTION)(DWORD);\ntypedef DWORD (WINAPI *LPHANDLER_FUNCTION_EX)(DWORD,DWORD,LPVOID,LPVOID);\n\n/* API function prototypes */\n\nWINADVAPI BOOL        WINAPI ChangeServiceConfigA(SC_HANDLE,DWORD,DWORD,DWORD,LPCSTR,LPCSTR,LPDWORD,LPCSTR,LPCSTR,LPCSTR,LPCSTR);\nWINADVAPI BOOL        WINAPI ChangeServiceConfigW(SC_HANDLE,DWORD,DWORD,DWORD,LPCWSTR,LPCWSTR,LPDWORD,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);\n#define                      ChangeServiceConfig WINELIB_NAME_AW(ChangeServiceConfig)\nWINADVAPI BOOL        WINAPI ChangeServiceConfig2A(SC_HANDLE,DWORD,LPVOID);\nWINADVAPI BOOL        WINAPI ChangeServiceConfig2W(SC_HANDLE,DWORD,LPVOID);\n#define                      ChangeServiceConfig2 WINELIB_NAME_AW(ChangeServiceConfig2)\nWINADVAPI BOOL        WINAPI CloseServiceHandle(SC_HANDLE);\nWINADVAPI BOOL        WINAPI ControlService(SC_HANDLE,DWORD,LPSERVICE_STATUS);\nWINADVAPI SC_HANDLE   WINAPI CreateServiceA(SC_HANDLE,LPCSTR,LPCSTR,DWORD,DWORD,DWORD,DWORD,LPCSTR,LPCSTR,LPDWORD,LPCSTR,LPCSTR,LPCSTR);\nWINADVAPI SC_HANDLE   WINAPI CreateServiceW(SC_HANDLE,LPCWSTR,LPCWSTR,DWORD,DWORD,DWORD,DWORD,LPCWSTR,LPCWSTR,LPDWORD,LPCWSTR,LPCWSTR,LPCWSTR);\n#define                      CreateService WINELIB_NAME_AW(CreateService)\nWINADVAPI BOOL        WINAPI DeleteService(SC_HANDLE);\nWINADVAPI BOOL        WINAPI EnumDependentServicesA(SC_HANDLE,DWORD,LPENUM_SERVICE_STATUSA,DWORD,LPDWORD,LPDWORD);\nWINADVAPI BOOL        WINAPI EnumDependentServicesW(SC_HANDLE,DWORD,LPENUM_SERVICE_STATUSW,DWORD,LPDWORD,LPDWORD);\n#define                      EnumDependentServices WINELIB_NAME_AW(EnumDependentServices)\nWINADVAPI BOOL        WINAPI EnumServicesStatusA(SC_HANDLE,DWORD,DWORD,LPENUM_SERVICE_STATUSA,DWORD,LPDWORD,LPDWORD,LPDWORD);\nWINADVAPI BOOL        WINAPI EnumServicesStatusW(SC_HANDLE,DWORD,DWORD,LPENUM_SERVICE_STATUSW,DWORD,LPDWORD,LPDWORD,LPDWORD);\n#define                      EnumServicesStatus WINELIB_NAME_AW(EnumServicesStatus)\nWINADVAPI BOOL        WINAPI EnumServicesStatusExA(SC_HANDLE,SC_ENUM_TYPE,DWORD,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD,LPDWORD,LPCSTR);\nWINADVAPI BOOL        WINAPI EnumServicesStatusExW(SC_HANDLE,SC_ENUM_TYPE,DWORD,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD,LPDWORD,LPCWSTR);\n#define                      EnumServicesStatus WINELIB_NAME_AW(EnumServicesStatus)\nWINADVAPI BOOL        WINAPI GetServiceDisplayNameA(SC_HANDLE,LPCSTR,LPSTR,LPDWORD);\nWINADVAPI BOOL        WINAPI GetServiceDisplayNameW(SC_HANDLE,LPCWSTR,LPWSTR,LPDWORD);\n#define                      GetServiceDisplayName WINELIB_NAME_AW(GetServiceDisplayName)\nWINADVAPI BOOL        WINAPI GetServiceKeyNameA(SC_HANDLE,LPCSTR,LPSTR,LPDWORD);\nWINADVAPI BOOL        WINAPI GetServiceKeyNameW(SC_HANDLE,LPCWSTR,LPWSTR,LPDWORD);\n#define                      GetServiceKeyName WINELIB_NAME_AW(GetServiceKeyName)\nWINADVAPI SC_LOCK     WINAPI LockServiceDatabase(SC_HANDLE);\nWINADVAPI BOOL        WINAPI NotifyBootConfigStatus(BOOL);\nWINADVAPI SC_HANDLE   WINAPI OpenSCManagerA(LPCSTR,LPCSTR,DWORD);\nWINADVAPI SC_HANDLE   WINAPI OpenSCManagerW(LPCWSTR,LPCWSTR,DWORD);\n#define                      OpenSCManager WINELIB_NAME_AW(OpenSCManager)\nWINADVAPI SC_HANDLE   WINAPI OpenServiceA(SC_HANDLE,LPCSTR,DWORD);\nWINADVAPI SC_HANDLE   WINAPI OpenServiceW(SC_HANDLE,LPCWSTR,DWORD);\n#define                      OpenService WINELIB_NAME_AW(OpenService)\nWINADVAPI BOOL        WINAPI QueryServiceStatus(SC_HANDLE,LPSERVICE_STATUS);\nWINADVAPI BOOL        WINAPI QueryServiceStatusEx(SC_HANDLE,SC_STATUS_TYPE,LPBYTE,DWORD,LPDWORD);\nWINADVAPI BOOL        WINAPI QueryServiceConfigA(SC_HANDLE,LPQUERY_SERVICE_CONFIGA,DWORD,LPDWORD);\nWINADVAPI BOOL        WINAPI QueryServiceConfigW(SC_HANDLE,LPQUERY_SERVICE_CONFIGW,DWORD,LPDWORD);\n#define                      QueryServiceConfig WINELIB_NAME_AW(QueryServiceConfig)\nWINADVAPI BOOL        WINAPI QueryServiceConfig2A(SC_HANDLE,DWORD,LPBYTE,DWORD,LPDWORD);\nWINADVAPI BOOL        WINAPI QueryServiceConfig2W(SC_HANDLE,DWORD,LPBYTE,DWORD,LPDWORD);\n#define                      QueryServiceConfig2 WINELIB_NAME_AW(QueryServiceConfig2)\nWINADVAPI BOOL        WINAPI QueryServiceLockStatusA(SC_HANDLE,LPQUERY_SERVICE_LOCK_STATUSA,DWORD,LPDWORD);\nWINADVAPI BOOL        WINAPI QueryServiceLockStatusW(SC_HANDLE,LPQUERY_SERVICE_LOCK_STATUSW,DWORD,LPDWORD);\n#define                      QueryServiceLockStatus WINELIB_NAME_AW(QueryServiceLockStatus)\nWINADVAPI BOOL        WINAPI QueryServiceObjectSecurity(SC_HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD);\nWINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerA(LPCSTR,LPHANDLER_FUNCTION);\nWINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerW(LPCWSTR,LPHANDLER_FUNCTION);\n#define                      RegisterServiceCtrlHandler WINELIB_NAME_AW(RegisterServiceCtrlHandler)\nWINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExA(LPCSTR,LPHANDLER_FUNCTION_EX,LPVOID);\nWINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExW(LPCWSTR,LPHANDLER_FUNCTION_EX,LPVOID);\n#define                      RegisterServiceCtrlHandlerEx WINELIB_NAME_AW(RegisterServiceCtrlHandlerEx)\nWINADVAPI BOOL        WINAPI SetServiceObjectSecurity(SC_HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);\nWINADVAPI BOOL        WINAPI SetServiceStatus(SERVICE_STATUS_HANDLE,LPSERVICE_STATUS);\nWINADVAPI BOOL        WINAPI StartServiceA(SC_HANDLE,DWORD,LPCSTR*);\nWINADVAPI BOOL        WINAPI StartServiceW(SC_HANDLE,DWORD,LPCWSTR*);\n#define                      StartService WINELIB_NAME_AW(StartService)\nWINADVAPI BOOL        WINAPI StartServiceCtrlDispatcherA(const SERVICE_TABLE_ENTRYA*);\nWINADVAPI BOOL        WINAPI StartServiceCtrlDispatcherW(const SERVICE_TABLE_ENTRYW*);\n#define                      StartServiceCtrlDispatcher WINELIB_NAME_AW(StartServiceCtrlDispatcher)\nWINADVAPI BOOL        WINAPI UnlockServiceDatabase(SC_LOCK);\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif /* !defined(__WINE_WINSVC_H) */\n"
  },
  {
    "path": "wine/windows/winsxs.idl",
    "content": "/*\n * Copyright 2010 Hans Leidekker for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"objidl.idl\";\nimport \"oleidl.idl\";\n\ninterface IAssemblyCache;\ninterface IAssemblyCacheItem;\ninterface IAssemblyName;\n\ntypedef struct _FUSION_INSTALL_REFERENCE_\n{\n    DWORD   cbSize;\n    DWORD   dwFlags;\n    GUID    guidScheme;\n    LPCWSTR szIdentifier;\n    LPCWSTR szNonCannonicalData;\n} FUSION_INSTALL_REFERENCE, *LPFUSION_INSTALL_REFERENCE;\n\ntypedef struct _ASSEMBLY_INFO\n{\n    ULONG          cbAssemblyInfo;\n    DWORD          dwAssemblyFlags;\n    ULARGE_INTEGER uliAssemblySizeInKB;\n    LPWSTR         pszCurrentAssemblyPathBuf;\n    ULONG          cchBuf;\n} ASSEMBLY_INFO;\n\ntypedef const struct _FUSION_INSTALL_REFERENCE_ *LPCFUSION_INSTALL_REFERENCE;\n\n[\n    object,\n    uuid(e707dcde-d1cd-11d2-bab9-00c04f8eceae),\n    pointer_default(unique),\n    local\n]\ninterface IAssemblyCache : IUnknown\n{\n    HRESULT UninstallAssembly(\n        [in] DWORD flags,\n        [in] LPCWSTR name,\n        [in] LPCFUSION_INSTALL_REFERENCE ref,\n        [out, optional] ULONG *disp);\n\n    HRESULT QueryAssemblyInfo(\n        [in] DWORD flags,\n        [in] LPCWSTR name,\n        [in, out] ASSEMBLY_INFO *info);\n\n    HRESULT CreateAssemblyCacheItem(\n        [in] DWORD flags,\n        [in] PVOID reserved,\n        [out] IAssemblyCacheItem **item,\n        [in, optional] LPCWSTR name);\n\n    HRESULT Reserved(\n        [out] IUnknown **reserved);\n\n    HRESULT InstallAssembly(\n        [in] DWORD flags,\n        [in] LPCWSTR path,\n        [in] LPCFUSION_INSTALL_REFERENCE ref);\n}\n\n[\n    object,\n    uuid(9e3aaeb4-d1cd-11d2-bab9-00c04f8eceae),\n    pointer_default(unique),\n    local\n]\ninterface IAssemblyCacheItem : IUnknown\n{\n    HRESULT CreateStream(\n        [in] DWORD flags,\n        [in] LPCWSTR name,\n        [in] DWORD format,\n        [in] DWORD format_flags,\n        [out] IStream **stream,\n        [in, optional] ULARGE_INTEGER *max_size);\n\n    HRESULT Commit(\n        [in] DWORD flags,\n        [out, optional] ULONG *disp);\n\n    HRESULT AbortItem();\n}\n\n[\n    object,\n    uuid(cd193bc0-b4bc-11D2-9833-00c04fc31d2e),\n    pointer_default(unique),\n    local\n]\ninterface IAssemblyName : IUnknown\n{\n    typedef [public] enum\n    {\n        ASM_NAME_PUBLIC_KEY,\n        ASM_NAME_PUBLIC_KEY_TOKEN,\n        ASM_NAME_HASH_VALUE,\n        ASM_NAME_NAME,\n        ASM_NAME_MAJOR_VERSION,\n        ASM_NAME_MINOR_VERSION,\n        ASM_NAME_BUILD_NUMBER,\n        ASM_NAME_REVISION_NUMBER,\n        ASM_NAME_CULTURE,\n        ASM_NAME_PROCESSOR_ID_ARRAY,\n        ASM_NAME_OSINFO_ARRAY,\n        ASM_NAME_HASH_ALGID,\n        ASM_NAME_ALIAS,\n        ASM_NAME_CODEBASE_URL,\n        ASM_NAME_CODEBASE_LASTMOD,\n        ASM_NAME_NULL_PUBLIC_KEY,\n        ASM_NAME_NULL_PUBLIC_KEY_TOKEN,\n        ASM_NAME_CUSTOM,\n        ASM_NAME_NULL_CUSTOM,\n        ASM_NAME_MVID,\n        ASM_NAME_MAX_PARAMS\n    } ASM_NAME;\n\n    typedef [public] enum\n    {\n        ASM_DISPLAYF_VERSION               = 0x1,\n        ASM_DISPLAYF_CULTURE               = 0x2,\n        ASM_DISPLAYF_PUBLIC_KEY_TOKEN      = 0x4,\n        ASM_DISPLAYF_PUBLIC_KEY            = 0x8,\n        ASM_DISPLAYF_CUSTOM                = 0x10,\n        ASM_DISPLAYF_PROCESSORARCHITECTURE = 0x20,\n        ASM_DISPLAYF_LANGUAGEID            = 0x40\n    } ASM_DISPLAY_FLAGS;\n\n    HRESULT SetProperty(\n        [in] DWORD id,\n        [in] LPVOID property,\n        [in] DWORD size);\n\n    HRESULT GetProperty(\n        [in] DWORD id,\n        [out] LPVOID buffer,\n        [in][out] LPDWORD buflen);\n\n    HRESULT Finalize();\n\n    HRESULT GetDisplayName(\n        [out] LPWSTR buffer,\n        [in][out] LPDWORD buflen,\n        [in] DWORD flags);\n\n    HRESULT Reserved(\n        [in] REFIID riid,\n        [in] IUnknown *pUnkReserved1,\n        [in] IUnknown *pUnkReserved2,\n        [in] LPCOLESTR szReserved,\n        [in] LONGLONG llReserved,\n        [in] LPVOID pvReserved,\n        [in] DWORD cbReserved,\n        [out] LPVOID *ppReserved);\n\n    HRESULT GetName(\n        [in][out] LPDWORD buflen,\n        [out] LPWSTR buffer);\n\n    HRESULT GetVersion(\n        [out] LPDWORD hi,\n        [out] LPDWORD low);\n\n    HRESULT IsEqual(\n        [in] IAssemblyName *name,\n        [in] DWORD flags);\n\n    HRESULT Clone(\n        [out] IAssemblyName **name);\n}\n\ntypedef [unique] IAssemblyName *LPASSEMBLYNAME;\ntypedef [public] enum\n{\n    CANOF_PARSE_DISPLAY_NAME = 0x1,\n    CANOF_SET_DEFAULT_VALUES = 0x2\n} CREATE_ASM_NAME_OBJ_FLAGS;\n\ncpp_quote(\"HRESULT WINAPI CreateAssemblyCache(IAssemblyCache**,DWORD);\")\ncpp_quote(\"HRESULT WINAPI CreateAssemblyNameObject(LPASSEMBLYNAME *,LPCWSTR,DWORD,LPVOID);\")\n"
  },
  {
    "path": "wine/windows/wintab.h",
    "content": "/*\n * Copyright (C) 1991-1998 by LCS/Telegraphics\n * Copyright (C) 2002 Patrik Stridvall\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINTAB_H\n#define __WINE_WINTAB_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n/***********************************************************************\n * Messages \n */\n#ifndef NOWTMESSAGES\n\n#define WT_DEFBASE    0x7FF0\n#define WT_MAXOFFSET  0xF\n\n#define _WT_PACKET(b)      ((b)+0)\n#define _WT_CTXOPEN(b)     ((b)+1)\n#define _WT_CTXCLOSE(b)    ((b)+2)\n#define _WT_CTXUPDATE(b)   ((b)+3)\n#define _WT_CTXOVERLAP(b)  ((b)+4)\n#define _WT_PROXIMITY(b)   ((b)+5)\n#define _WT_INFOCHANGE(b)  ((b)+6)\n#define _WT_CSRCHANGE(b)   ((b)+7)  /* 1.1 */\n#define _WT_MAX(b)         ((b)+WT_MAXOFFSET)\n\n#define WT_PACKET      _WT_PACKET(WT_DEFBASE)\n#define WT_CTXOPEN     _WT_CTXOPEN(WT_DEFBASE)\n#define WT_CTXCLOSE    _WT_CTXCLOSE(WT_DEFBASE)\n#define WT_CTXUPDATE   _WT_CTXUPDATE(WT_DEFBASE)\n#define WT_CTXOVERLAP  _WT_CTXOVERLAP(WT_DEFBASE)\n#define WT_PROXIMITY   _WT_PROXIMITY(WT_DEFBASE)\n#define WT_INFOCHANGE  _WT_INFOCHANGE(WT_DEFBASE)\n#define WT_CSRCHANGE   _WT_CSRCHANGE(WT_DEFBASE)  /* 1.1 */\n#define WT_MAX         _WT_MAX(WT_DEFBASE)\n\n#endif\n\n/***********************************************************************\n * COMMON DATA DEFS\n */\n\nDECLARE_HANDLE(HMGR);     /* manager handle */\nDECLARE_HANDLE(HCTX);     /* context handle */\nDECLARE_HANDLE(HWTHOOK);  /* hook handle */\n\ntypedef DWORD WTPKT;   /* packet mask */\n\n#ifndef NOWTPKT\n\n/* WTPKT bits */\n#define PK_CONTEXT           0x0001  /* reporting context */\n#define PK_STATUS            0x0002  /* status bits */\n#define PK_TIME              0x0004  /* time stamp */\n#define PK_CHANGED           0x0008  /* change bit vector */\n#define PK_SERIAL_NUMBER     0x0010  /* packet serial number */\n#define PK_CURSOR            0x0020  /* reporting cursor */\n#define PK_BUTTONS           0x0040  /* button information */\n#define PK_X                 0x0080  /* x axis */\n#define PK_Y                 0x0100  /* y axis */\n#define PK_Z                 0x0200  /* z axis */\n#define PK_NORMAL_PRESSURE   0x0400  /* normal or tip pressure */\n#define PK_TANGENT_PRESSURE  0x0800  /* tangential or barrel pressure */\n#define PK_ORIENTATION       0x1000  /* orientation info: tilts */\n#define PK_ROTATION          0x2000  /* rotation info; 1.1 */\n\n#endif\n\ntypedef DWORD FIX32; /* fixed-point arithmetic type */\n\n#ifndef NOFIX32\n\n#define INT(x) HIWORD(x)\n#define FRAC(x) LOWORD(x)\n\n#define CASTFIX32(x) ((FIX32)((x)*65536L))\n\n#define ROUND(x) (INT(x) + (FRAC(x) > (WORD)0x8000))\n\n#define FIX_MUL(c, a, b) \\\n    (c = (((DWORD)FRAC(a) * FRAC(b)) >> 16) + \\\n           (DWORD)INT(a) * FRAC(b) + \\\n           (DWORD)INT(b) * FRAC(a) + \\\n          ((DWORD)INT(a) * INT(b) << 16))\n\n#ifdef _WINDLL\n# define FIX_DIV_SC static\n#else\n# define FIX_DIV_SC\n# endif\n\n#define FIX_DIV(c, a, b) \\\n    { \\\n        FIX_DIV_SC DWORD temp, rem, btemp; \\\n        \\\n        /* fraction done bytewise */ \\\n        temp = ((a / b) << 16); \\\n        rem = a % b;   \\\n        btemp = b; \\\n        if (INT(btemp) < 256) { \\\n            rem <<= 8; \\\n        } else { \\\n            btemp >>= 8; \\\n        } \\\n        temp += ((rem / btemp) << 8); \\\n        rem %= btemp; \\\n        rem <<= 8; \\\n        temp += rem / btemp; \\\n        c = temp; \\\n    }\n\n#endif\n\n/***********************************************************************\n * INFO DATA DEFS\n */\n\n#ifndef NOWTINFO\n\n#ifndef NOWTAXIS\n\ntypedef struct tagAXIS {\n    LONG   axMin;\n    LONG   axMax;\n    UINT   axUnits;\n    FIX32  axResolution;\n} AXIS, *PAXIS, *NPAXIS, *LPAXIS;\n\n/* unit specifiers */\n#define TU_NONE         0\n#define TU_INCHES       1\n#define TU_CENTIMETERS  2\n#define TU_CIRCLE       3\n\n#endif\n\n#ifndef NOWTSYSBUTTONS\n\n/* system button assignment values */\n#define SBN_NONE       0x00\n#define SBN_LCLICK     0x01\n#define SBN_LDBLCLICK  0x02\n#define SBN_LDRAG      0x03\n#define SBN_RCLICK     0x04\n#define SBN_RDBLCLICK  0x05\n#define SBN_RDRAG      0x06\n#define SBN_MCLICK     0x07\n#define SBN_MDBLCLICK  0x08\n#define SBN_MDRAG      0x09\n\n/* for Pen Windows */\n#define SBN_PTCLICK     0x10\n#define SBN_PTDBLCLICK  0x20\n#define SBN_PTDRAG      0x30\n#define SBN_PNCLICK     0x40\n#define SBN_PNDBLCLICK  0x50\n#define SBN_PNDRAG      0x60\n#define SBN_P1CLICK     0x70\n#define SBN_P1DBLCLICK  0x80\n#define SBN_P1DRAG      0x90\n#define SBN_P2CLICK     0xA0\n#define SBN_P2DBLCLICK  0xB0\n#define SBN_P2DRAG      0xC0\n#define SBN_P3CLICK     0xD0\n#define SBN_P3DBLCLICK  0xE0\n#define SBN_P3DRAG      0xF0\n\n#endif\n\n#ifndef NOWTCAPABILITIES\n\n/* hardware capabilities */\n#define HWC_INTEGRATED      0x0001\n#define HWC_TOUCH           0x0002\n#define HWC_HARDPROX        0x0004\n#define HWC_PHYSID_CURSORS  0x0008  /* 1.1 */\n#endif\n\n#ifndef NOWTIFC\n\n#ifndef NOWTCURSORS \n\n/* cursor capabilities */\n#define CRC_MULTIMODE  0x0001  /* 1.1 */\n#define CRC_AGGREGATE  0x0002  /* 1.1 */\n#define CRC_INVERT     0x0004  /* 1.1 */\n\n#endif \n\n/* info categories */\n#define WTI_INTERFACE    1\n#define IFC_WINTABID     1\n#define IFC_SPECVERSION  2\n#define IFC_IMPLVERSION  3\n#define IFC_NDEVICES     4\n#define IFC_NCURSORS     5\n#define IFC_NCONTEXTS    6\n#define IFC_CTXOPTIONS   7\n#define IFC_CTXSAVESIZE  8\n#define IFC_NEXTENSIONS  9\n#define IFC_NMANAGERS    10\n#define IFC_MAX          10\n\n#endif\n\n#ifndef NOWTSTATUS\n\n#define WTI_STATUS     2\n#define STA_CONTEXTS   1\n#define STA_SYSCTXS    2\n#define STA_PKTRATE    3\n#define STA_PKTDATA    4\n#define STA_MANAGERS   5\n#define STA_SYSTEM     6\n#define STA_BUTTONUSE  7\n#define STA_SYSBTNUSE  8\n#define STA_MAX        8\n\n#endif\n\n#ifndef NOWTDEFCONTEXT\n\n#define WTI_DEFCONTEXT  3\n#define WTI_DEFSYSCTX   4\n#define WTI_DDCTXS      400 /* 1.1 */\n#define WTI_DSCTXS      500 /* 1.1 */\n#define CTX_NAME        1\n#define CTX_OPTIONS     2\n#define CTX_STATUS      3\n#define CTX_LOCKS       4\n#define CTX_MSGBASE     5\n#define CTX_DEVICE      6\n#define CTX_PKTRATE     7\n#define CTX_PKTDATA     8\n#define CTX_PKTMODE     9\n#define CTX_MOVEMASK    10\n#define CTX_BTNDNMASK   11\n#define CTX_BTNUPMASK   12\n#define CTX_INORGX      13\n#define CTX_INORGY      14\n#define CTX_INORGZ      15\n#define CTX_INEXTX      16\n#define CTX_INEXTY      17\n#define CTX_INEXTZ      18\n#define CTX_OUTORGX     19\n#define CTX_OUTORGY     20\n#define CTX_OUTORGZ     21\n#define CTX_OUTEXTX     22\n#define CTX_OUTEXTY     23\n#define CTX_OUTEXTZ     24\n#define CTX_SENSX       25\n#define CTX_SENSY       26\n#define CTX_SENSZ       27\n#define CTX_SYSMODE     28\n#define CTX_SYSORGX     29\n#define CTX_SYSORGY     30\n#define CTX_SYSEXTX     31\n#define CTX_SYSEXTY     32\n#define CTX_SYSSENSX    33\n#define CTX_SYSSENSY    34\n#define CTX_MAX         34\n\n#endif\n\n#ifndef NOWTDEVICES\n\n#define WTI_DEVICES      100\n#define DVC_NAME         1\n#define DVC_HARDWARE     2\n#define DVC_NCSRTYPES    3\n#define DVC_FIRSTCSR     4\n#define DVC_PKTRATE      5\n#define DVC_PKTDATA      6\n#define DVC_PKTMODE      7\n#define DVC_CSRDATA      8\n#define DVC_XMARGIN      9\n#define DVC_YMARGIN      10\n#define DVC_ZMARGIN      11\n#define DVC_X            12\n#define DVC_Y            13\n#define DVC_Z            14\n#define DVC_NPRESSURE    15\n#define DVC_TPRESSURE    16\n#define DVC_ORIENTATION  17\n#define DVC_ROTATION     18  /* 1.1 */\n#define DVC_PNPID        19  /* 1.1 */\n#define DVC_MAX          19\n\n#endif\n\n#ifndef NOWTCURSORS\n\n#define WTI_CURSORS      200\n#define CSR_NAME         1\n#define CSR_ACTIVE       2\n#define CSR_PKTDATA      3\n#define CSR_BUTTONS      4\n#define CSR_BUTTONBITS   5\n#define CSR_BTNNAMES     6\n#define CSR_BUTTONMAP    7\n#define CSR_SYSBTNMAP    8\n#define CSR_NPBUTTON     9\n#define CSR_NPBTNMARKS   10\n#define CSR_NPRESPONSE   11\n#define CSR_TPBUTTON     12\n#define CSR_TPBTNMARKS   13\n#define CSR_TPRESPONSE   14\n#define CSR_PHYSID       15  /* 1.1 */\n#define CSR_MODE         16  /* 1.1 */\n#define CSR_MINPKTDATA   17  /* 1.1 */\n#define CSR_MINBUTTONS   18  /* 1.1 */\n#define CSR_CAPABILITIES 19  /* 1.1 */\n/* from http://www.wacomeng.com/devsupport/ibmpc/wacomwindevfaq.html */\n#define CSR_TYPE        20\n#define CSR_MAX         20\n\n#endif\n\n#ifndef NOWTEXTENSIONS\n\n#define WTI_EXTENSIONS  300\n#define EXT_NAME        1\n#define EXT_TAG         2\n#define EXT_MASK        3\n#define EXT_SIZE        4\n#define EXT_AXES        5\n#define EXT_DEFAULT     6\n#define EXT_DEFCONTEXT  7\n#define EXT_DEFSYSCTX   8\n#define EXT_CURSORS     9 \n#define EXT_MAX         109  /* Allow 100 cursors */\n\n#endif\n\n#endif\n\n/***********************************************************************\n * CONTEXT DATA DEFS\n */\n\n#define LCNAMELEN 40\n#define LC_NAMELEN 40\n\ntypedef struct tagLOGCONTEXTA {\n    char   lcName[LCNAMELEN];\n    UINT   lcOptions;\n    UINT   lcStatus;\n    UINT   lcLocks;\n    UINT   lcMsgBase;\n    UINT   lcDevice;\n    UINT   lcPktRate;\n    WTPKT  lcPktData;\n    WTPKT  lcPktMode;\n    WTPKT  lcMoveMask;\n    DWORD  lcBtnDnMask;\n    DWORD  lcBtnUpMask;\n    LONG   lcInOrgX;\n    LONG   lcInOrgY;\n    LONG   lcInOrgZ;\n    LONG   lcInExtX;\n    LONG   lcInExtY;\n    LONG   lcInExtZ;\n    LONG   lcOutOrgX;\n    LONG   lcOutOrgY;\n    LONG   lcOutOrgZ;\n    LONG   lcOutExtX;\n    LONG   lcOutExtY;\n    LONG   lcOutExtZ;\n    FIX32  lcSensX;\n    FIX32  lcSensY;\n    FIX32  lcSensZ;\n    BOOL   lcSysMode;\n    int    lcSysOrgX;\n    int    lcSysOrgY;\n    int    lcSysExtX;\n    int    lcSysExtY;\n    FIX32  lcSysSensX;\n    FIX32  lcSysSensY;\n} LOGCONTEXTA, *PLOGCONTEXTA, *NPLOGCONTEXTA, *LPLOGCONTEXTA;\n\ntypedef struct tagLOGCONTEXTW {\n    WCHAR  lcName[LCNAMELEN];\n    UINT   lcOptions;\n    UINT   lcStatus;\n    UINT   lcLocks;\n    UINT   lcMsgBase;\n    UINT   lcDevice;\n    UINT   lcPktRate;\n    WTPKT  lcPktData;\n    WTPKT  lcPktMode;\n    WTPKT  lcMoveMask;\n    DWORD  lcBtnDnMask;\n    DWORD  lcBtnUpMask;\n    LONG   lcInOrgX;\n    LONG   lcInOrgY;\n    LONG   lcInOrgZ;\n    LONG   lcInExtX;\n    LONG   lcInExtY;\n    LONG   lcInExtZ;\n    LONG   lcOutOrgX;\n    LONG   lcOutOrgY;\n    LONG   lcOutOrgZ;\n    LONG   lcOutExtX;\n    LONG   lcOutExtY;\n    LONG   lcOutExtZ;\n    FIX32  lcSensX;\n    FIX32  lcSensY;\n    FIX32  lcSensZ;\n    BOOL   lcSysMode;\n    int    lcSysOrgX;\n    int    lcSysOrgY;\n    int    lcSysExtX;\n    int    lcSysExtY;\n    FIX32  lcSysSensX;\n    FIX32  lcSysSensY;\n} LOGCONTEXTW, *PLOGCONTEXTW, *NPLOGCONTEXTW, *LPLOGCONTEXTW;\n\nDECL_WINELIB_TYPE_AW(LOGCONTEXT)\nDECL_WINELIB_TYPE_AW(PLOGCONTEXT)\nDECL_WINELIB_TYPE_AW(NPLOGCONTEXT)\nDECL_WINELIB_TYPE_AW(LPLOGCONTEXT)\n\n/* context option values */\n#define CXO_SYSTEM       0x0001\n#define CXO_PEN          0x0002\n#define CXO_MESSAGES     0x0004\n#define CXO_MARGIN       0x8000\n#define CXO_MGNINSIDE    0x4000\n#define CXO_CSRMESSAGES  0x0008  /* 1.1 */\n\n/* context status values */\n#define CXS_DISABLED  0x0001\n#define CXS_OBSCURED  0x0002\n#define CXS_ONTOP     0x0004\n\n/* context lock values */\n#define CXL_INSIZE       0x0001\n#define CXL_INASPECT     0x0002\n#define CXL_SENSITIVITY  0x0004\n#define CXL_MARGIN       0x0008\n#define CXL_SYSOUT       0x0010\n\n/***********************************************************************\n * EVENT DATA DEFS\n */\n\n/* For packet structure definition, see pktdef.h */\n\n/* packet status values */\n#define TPS_PROXIMITY  0x0001\n#define TPS_QUEUE_ERR  0x0002\n#define TPS_MARGIN     0x0004\n#define TPS_GRAB       0x0008\n#define TPS_INVERT     0x0010  /* 1.1 */\n\ntypedef struct tagORIENTATION {\n    int orAzimuth;\n    int orAltitude;\n    int orTwist;\n} ORIENTATION, *PORIENTATION, *NPORIENTATION, *LPORIENTATION;\n\ntypedef struct tagROTATION {  /* 1.1 */\n    int roPitch;\n    int roRoll;\n    int roYaw;\n} ROTATION, *PROTATION, *NPROTATION, *LPROTATION;\n\n/* grandfather in obsolete member names. */\n#define rotPitch  roPitch\n#define rotRoll   roRoll\n#define rotYaw    roYaw\n\n/* relative buttons */\n#define TBN_NONE  0\n#define TBN_UP    1\n#define TBN_DOWN  2\n\n/***********************************************************************\n * DEVICE CONFIG CONSTANTS\n */\n\n#ifndef NOWTDEVCFG\n\n#define WTDC_NONE     0\n#define WTDC_CANCEL   1\n#define WTDC_OK       2\n#define WTDC_RESTART  3\n\n#endif\n\n/***********************************************************************\n * HOOK CONSTANTS\n */\n\n#ifndef NOWTHOOKS\n\n#define WTH_PLAYBACK  1\n#define WTH_RECORD    2\n\n#define WTHC_GETLPLPFN   (-3)\n#define WTHC_LPLPFNNEXT  (-2)\n#define WTHC_LPFNNEXT    (-1)\n#define WTHC_ACTION      0\n#define WTHC_GETNEXT     1\n#define WTHC_SKIP        2\n\n#endif\n\n/***********************************************************************\n * PREFERENCE FUNCTION CONSTANTS\n */\n\n#ifndef NOWTPREF\n\n#define WTP_LPDEFAULT  ((LPVOID)-1L)\n#define WTP_DWDEFAULT  ((DWORD)-1L)\n\n#endif\n\n/***********************************************************************\n * EXTENSION TAGS AND CONSTANTS\n */\n\n#ifndef NOWTEXTENSIONS\n\n/* constants for use with pktdef.h */\n#define PKEXT_ABSOLUTE    1\n#define PKEXT_RELATIVE    2\n\n/* Extension tags. */\n#define WTX_OBT       0  /* Out of bounds tracking */\n#define WTX_FKEYS     1  /* Function keys */\n#define WTX_TILT      2  /* Raw Cartesian tilt; 1.1 */\n#define WTX_CSRMASK   3  /* select input by cursor type; 1.1 */\n#define WTX_XBTNMASK  4  /* Extended button mask; 1.1 */\n\ntypedef struct tagXBTNMASK {\n    BYTE xBtnDnMask[32];\n    BYTE xBtnUpMask[32];\n} XBTNMASK;\n\ntypedef struct tagTILT {  /* 1.1 */\n    int tiltX;\n    int tiltY;\n} TILT;\n\n#endif\n\n/***********************************************************************\n * Functions\n */\n\n#ifndef NOWTCALLBACKS\n\n#ifndef NOWTMANAGERFXNS\n\n/* callback function types */\ntypedef BOOL (WINAPI * WTENUMPROC)(HCTX, LPARAM);  /* changed CALLBACK->WINAPI, 1.1 */\ntypedef BOOL (WINAPI * WTCONFIGPROC)(HCTX, HWND);\ntypedef LRESULT (WINAPI * WTHOOKPROC)(int, WPARAM, LPARAM);\ntypedef WTHOOKPROC *LPWTHOOKPROC;\n\n#endif\n\n#endif\n\n#ifndef NOWTFUNCTIONS\n\n#ifndef NOWTBASICFXNS\n/* BASIC FUNCTIONS */\n\n#define ORD_WTInfoA       20\n#define ORD_WTInfoW       1020\n#define ORD_WTInfo        WINELIB_NAME_AW(ORD_WTInfo)\n#define ORD_WTOpenA       21\n#define ORD_WTOpenW       1021\n#define ORD_WTOpen        WINELIB_NAME_AW(ORD_WTOpen)\n#define ORD_WTClose       22\n#define ORD_WTPacketsGet  23\n#define ORD_WTPacket      24\n\nUINT WINAPI WTInfoA(UINT, UINT, LPVOID);\nUINT WINAPI WTInfoW(UINT, UINT, LPVOID);\n#define WTInfo WINELIB_NAME_AW(WTInfo)\nHCTX WINAPI WTOpenA(HWND, LPLOGCONTEXTA, BOOL);\nHCTX WINAPI WTOpenW(HWND, LPLOGCONTEXTW, BOOL);\n#define WTOpen WINELIB_NAME_AW(WTOpen)\nBOOL WINAPI WTClose(HCTX);\nint  WINAPI WTPacketsGet(HCTX, int, LPVOID);\nBOOL WINAPI WTPacket(HCTX, UINT, LPVOID);\n\n#endif\n\n#ifndef NOWTVISIBILITYFXNS\n/* VISIBILITY FUNCTIONS */\n\n#define ORD_WTEnable   40\n#define ORD_WTOverlap  41\n\nBOOL WINAPI WTEnable(HCTX, BOOL);\nBOOL WINAPI WTOverlap(HCTX, BOOL);\n\n#endif\n\n#ifndef NOWTCTXEDITFXNS\n/* CONTEXT EDITING FUNCTIONS */\n\n#define ORD_WTConfig   60\n#define ORD_WTGetA     61\n#define ORD_WTGetW     1061\n#define ORD_WTGet      WINELIB_NAME_AW(ORD_WTGet)\n#define ORD_WTSetA     62\n#define ORD_WTSetW     1062\n#define ORD_WTSet      WINELIB_NAME_AW(ORD_WTSet)\n#define ORD_WTExtGet   63\n#define ORD_WTExtSet   64\n#define ORD_WTSave     65\n#define ORD_WTRestore  66\n\nBOOL WINAPI WTConfig(HCTX, HWND);\nBOOL WINAPI WTGetA(HCTX, LPLOGCONTEXTA);\nBOOL WINAPI WTGetW(HCTX, LPLOGCONTEXTW);\n#define WTGet WINELIB_NAME_AW(WTGet)\nBOOL WINAPI WTSetA(HCTX, LPLOGCONTEXTA);\nBOOL WINAPI WTSetW(HCTX, LPLOGCONTEXTW);\n#define WTSet WINELIB_NAME_AW(WTSet)\nBOOL WINAPI WTExtGet(HCTX, UINT, LPVOID);\nBOOL WINAPI WTExtSet(HCTX, UINT, LPVOID);\nBOOL WINAPI WTSave(HCTX, LPVOID);\nHCTX WINAPI WTRestore(HWND, LPVOID, BOOL);\n\n#endif\n\n#ifndef NOWTQUEUEFXNS\n/* ADVANCED PACKET AND QUEUE FUNCTIONS */\n\n#define ORD_WTPacketsPeek   80\n#define ORD_WTDataGet       81\n#define ORD_WTDataPeek      82\n#define ORD_WTQueueSizeGet  84\n#define ORD_WTQueueSizeSet  85\n\nint WINAPI WTPacketsPeek(HCTX, int, LPVOID);\nint WINAPI WTDataGet(HCTX, UINT, UINT, int, LPVOID, LPINT);\nint WINAPI WTDataPeek(HCTX, UINT, UINT, int, LPVOID, LPINT);\nint WINAPI WTQueueSizeGet(HCTX);\nBOOL WINAPI WTQueueSizeSet(HCTX, int);\n\n#endif\n\n#ifndef NOWTHMGRFXNS\n/* MANAGER HANDLE FUNCTIONS */\n\n#define ORD_WTMgrOpen   100\n#define ORD_WTMgrClose  101\n\nHMGR WINAPI WTMgrOpen(HWND, UINT);\nBOOL WINAPI WTMgrClose(HMGR);\n\n#endif\n\n#ifndef NOWTMGRCTXFXNS\n/* MANAGER CONTEXT FUNCTIONS */\n\n#define ORD_WTMgrContextEnum   120\n#define ORD_WTMgrContextOwner  121\n#define ORD_WTMgrDefContext    122\n#define ORD_WTMgrDefContextEx  206\n\nBOOL WINAPI WTMgrContextEnum(HMGR, WTENUMPROC, LPARAM);\nHWND WINAPI WTMgrContextOwner(HMGR, HCTX);\nHCTX WINAPI WTMgrDefContext(HMGR, BOOL);\nHCTX WINAPI WTMgrDefContextEx(HMGR, UINT, BOOL);  /* 1.1 */\n\n#endif\n\n#ifndef NOWTMGRCONFIGFXNS\n/* MANAGER CONFIG BOX  FUNCTIONS */\n\n#define ORD_WTMgrDeviceConfig 140\n\nUINT WINAPI WTMgrDeviceConfig(HMGR, UINT, HWND);\n\n#endif\n\n#ifndef NOWTMGRHOOKFXNS\n/* MANAGER PACKET HOOK FUNCTIONS */\n\n/* OBSOLETE IN WIN32! */\n\n#endif\n\n#ifndef NOWTMGRPREFFXNS\n/* MANAGER PREFERENCE DATA FUNCTIONS */\n\n#define ORD_WTMgrExt                  180\n#define ORD_WTMgrCsrEnable            181\n#define ORD_WTMgrCsrButtonMap         182\n#define ORD_WTMgrCsrPressureBtnMarks  183\n#define ORD_WTMgrCsrPressureResponse  184\n#define ORD_WTMgrCsrExt               185\n\nBOOL WINAPI WTMgrExt(HMGR, UINT, LPVOID);\nBOOL WINAPI WTMgrCsrEnable(HMGR, UINT, BOOL);\nBOOL WINAPI WTMgrCsrButtonMap(HMGR, UINT, LPBYTE, LPBYTE);\nBOOL WINAPI WTMgrCsrPressureBtnMarks(HMGR, UINT, DWORD, DWORD);\nBOOL WINAPI WTMgrCsrPressureResponse(HMGR, UINT, UINT *, UINT *);\nBOOL WINAPI WTMgrCsrExt(HMGR, UINT, UINT, LPVOID);\n\n#endif\n\n/***********************************************************************\n * Win32 replacements for non-portable functions.\n */\n\n#ifndef NOWTQUEUEFXNS\n/* ADVANCED PACKET AND QUEUE FUNCTIONS */\n\n#define ORD_WTQueuePacketsEx  200\n\nBOOL WINAPI WTQueuePacketsEx(HCTX, UINT *, UINT *);\n\n#endif\n\n#ifndef NOWTMGRCONFIGFXNS\n/* MANAGER CONFIG BOX FUNCTIONS */\n\n#define ORD_WTMgrConfigReplaceExA  202\n#define ORD_WTMgrConfigReplaceExW  1202\n#define ORD_WTMgrConfigReplaceEx   WINELIB_NAME_AW(ORD_WTMgrConfigReplaceEx)\n\nBOOL WINAPI WTMgrConfigReplaceExA(HMGR, BOOL, LPSTR, LPSTR);\nBOOL WINAPI WTMgrConfigReplaceExW(HMGR, BOOL, LPWSTR, LPSTR);\n#define WTMgrConfigReplaceEx WINELIB_NAME_AW(WTMgrConfigReplaceEx)\n\n#endif\n\n#ifndef NOWTMGRHOOKFXNS\n/* MANAGER PACKET HOOK FUNCTIONS */\n\n#define ORD_WTMgrPacketHookExA   203\n#define ORD_WTMgrPacketHookExW   1203\n#define ORD_WTMgrPacketHookEx    WINELIB_NAME_AW(ORD_WTMgrPacketHookEx)\n#define ORD_WTMgrPacketUnhook    204\n#define ORD_WTMgrPacketHookNext  205\n\nHWTHOOK WINAPI WTMgrPacketHookExA(HMGR, int, LPSTR, LPSTR);\nHWTHOOK WINAPI WTMgrPacketHookExW(HMGR, int, LPWSTR, LPSTR);\n#define WTMgrPacketHookEx WINELIB_NAME_AW(WTMgrPacketHookEx)\nBOOL    WINAPI WTMgrPacketUnhook(HWTHOOK);\nLRESULT WINAPI WTMgrPacketHookNext(HWTHOOK, int, WPARAM, LPARAM);\n\n#endif\n\n#ifndef NOWTMGRPREFFXNS\n/* MANAGER PREFERENCE DATA FUNCTIONS */\n\n#define ORD_WTMgrCsrPressureBtnMarksEx  201\n\nBOOL WINAPI WTMgrCsrPressureBtnMarksEx(HMGR, UINT, UINT *, UINT *);\n\n#endif\n\n#endif\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif /* defined(__WINE_WINTAB_H */\n"
  },
  {
    "path": "wine/windows/wintabx.h",
    "content": "/*\n * Copyright (C) 1991-1998 by LCS/Telegraphics\n * Copyright (C) 2002 Patrik Stridvall\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINTABX_H\n#define __WINE_WINTABX_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n/***********************************************************************\n * Wintab message crackers\n */\n\n#ifndef HANDLE_MSG\n# define HANDLE_MSG(hwnd, message, fn) \\\n    case (message): return HANDLE_##message((hwnd), (wParam), (lParam), (fn))\n#endif\n\n/* void Cls_OnWintabPacket(HWND hwnd, HCTX hCtx, UINT sn) */\n#define HANDLE_WT_PACKET(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HCTX)(lParam), (UINT)(wParam)), 0L)\n#define FORWARD__WT_PACKET(hwnd, bs, hCtx, sn, fn) \\\n    (void)(fn)((hwnd), _WT_PACKET(bs), (WPARAM)(UINT)(sn), (LPARAM)(HCTX)(hCtx))\n#define FORWARD_WT_PACKET(hwnd, hCtx, sn, fn) \\\n    FORWARD__WT_PACKET(hwnd, WT_DEFBASE, hCtx, sn, fn)\n\n/* void Cls_OnWintabCtxOpen(HWND hwnd, HCTX hCtx, UINT sf) */\n#define HANDLE_WT_CTXOPEN(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HCTX)(wParam), (UINT)(lParam)), 0L)\n#define FORWARD__WT_CTXOPEN(hwnd, bs, hCtx, sf, fn) \\\n    (void)(fn)((hwnd), _WT_CTXOPEN(bs), (WPARAM)(HCTX)(hCtx), (LPARAM)(UINT)(sf))\n#define FORWARD_WT_CTXOPEN(hwnd, hCtx, sf, fn) \\\n    FORWARD__WT_CTXOPEN(hwnd, WT_DEFBASE, hCtx, sf, fn)\n\n/* void Cls_OnWintabCtxClose(HWND hwnd, HCTX hCtx, UINT sf) */\n#define HANDLE_WT_CTXCLOSE(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HCTX)(wParam), (UINT)(lParam)), 0L)\n#define FORWARD__WT_CTXCLOSE(hwnd, bs, hCtx, sf, fn) \\\n    (void)(fn)((hwnd), _WT_CTXCLOSE(bs), (WPARAM)(HCTX)(hCtx), (LPARAM)(UINT)(sf))\n#define FORWARD_WT_CTXCLOSE(hwnd, hCtx, sf, fn) \\\n    FORWARD__WT_CTXCLOSE(hwnd, WT_DEFBASE, hCtx, sf, fn)\n\n/* void Cls_OnWintabCtxUpdate(HWND hwnd, HCTX hCtx, UINT sf) */\n#define HANDLE_WT_CTXUPDATE(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HCTX)(wParam), (UINT)(lParam)), 0L)\n#define FORWARD__WT_CTXUPDATE(hwnd, bs, hCtx, sf, fn) \\\n    (void)(fn)((hwnd), _WT_CTXUPDATE(bs), (WPARAM)(HCTX)(hCtx), (LPARAM)(UINT)(sf))\n#define FORWARD_WT_CTXUPDATE(hwnd, hCtx, sf, fn) \\\n    FORWARD__WT_CTXUPDATE(hwnd, WT_DEFBASE, hCtx, sf, fn)\n\n/* void Cls_OnWintabCtxOverlap(HWND hwnd, HCTX hCtx, UINT sf) */\n#define HANDLE_WT_CTXOVERLAP(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HCTX)(wParam), (UINT)(lParam)), 0L)\n#define FORWARD__WT_CTXOVERLAP(hwnd, bs, hCtx, sf, fn) \\\n    (void)(fn)((hwnd), _WT_CTXOVERLAP(bs), (WPARAM)(HCTX)(hCtx), (LPARAM)(UINT)(sf))\n#define FORWARD_WT_CTXOVERLAP(hwnd, hCtx, sf, fn) \\\n    FORWARD__WT_CTXOVERLAP(hwnd, WT_DEFBASE, hCtx, sf, fn)\n\n/* void Cls_OnWintabProximity(HWND hwnd, HCTX hCtx, BOOL cp, BOOL hp) */\n#define HANDLE_WT_PROXIMITY(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HCTX)(wParam), (BOOL)LOWORD(lParam),  (BOOL)HIWORD(lParam)), 0L)\n#define FORWARD__WT_PROXIMITY(hwnd, bs, hCtx, cp, hp, fn) \\\n    (void)(fn)((hwnd), _WT_PROXIMITY(bs), (WPARAM)(HCTX)(hCtx), MAKELPARAM((cp), (hp))\n#define FORWARD_WT_PROXIMITY(hwnd, hCtx, sf, fn) \\\n    FORWARD__WT_PROXIMITY(hwnd, WT_DEFBASE, hCtx, cp, hp, fn)\n\n/* void Cls_OnWintabInfoChange(HWND hwnd, HMGR hMgr, UINT c, UINT i) */\n#define HANDLE_WT_INFOCHANGE(hwnd, wParam, lParam, fn) \\\n    ((fn)((hwnd), (HMGR)(wParam), (UINT)LOWORD(lParam),  (UINT)HIWORD(lParam)), 0L)\n#define FORWARD__WT_INFOCHANGE(hwnd, bs, hMgr, cp, hp, fn) \\\n    (void)(fn)((hwnd), _WT_INFOCHANGE(bs), (WPARAM)(HMGR)(hMgr), MAKELPARAM((c), (i))\n#define FORWARD_WT_INFOCHANGE(hwnd, hMgr, sf, fn) \\\n    FORWARD__WT_INFOCHANGE(hwnd, WT_DEFBASE, hMgr, cp, hp, fn)\n\n/***********************************************************************\n * Alternate porting layer macros\n */\n\n#define GET_WT_PACKET_HCTX(wp, lp)    ((HCTX)lp)\n#define GET_WT_PACKET_SERIAL(wp, lp)  (wp)\n#define GET_WT_PACKET_MPS(h, s)       (s), (LPARAM)(h)\n\n#define GET_WT_CTXOPEN_HCTX(wp, lp)    ((HCTX)wp)\n#define GET_WT_CTXOPEN_STATUS(wp, lp)  ((UINT)lp)\n#define GET_WT_CTXOPEN_MPS(h, s)       (WPARAM)(h), (LPARAM)(s)\n\n#define GET_WT_CTXCLOSE_HCTX(wp, lp)    ((HCTX)wp)\n#define GET_WT_CTXCLOSE_STATUS(wp, lp)  ((UINT)lp)\n#define GET_WT_CTXCLOSE_MPS(h, s)       (WPARAM)(h), (LPARAM)(s)\n\n#define GET_WT_CTXUPDATE_HCTX(wp, lp)    ((HCTX)wp)\n#define GET_WT_CTXUPDATE_STATUS(wp, lp)  ((UINT)lp)\n#define GET_WT_CTXUPDATE_MPS(h, s)       (WPARAM)(h), (LPARAM)(s)\n\n#define GET_WT_CTXOVERLAP_HCTX(wp, lp)    ((HCTX)wp)\n#define GET_WT_CTXOVERLAP_STATUS(wp, lp)  ((UINT)lp)\n#define GET_WT_CTXOVERLAP_MPS(h, s)       (WPARAM)(h), (LPARAM)(s)\n\n#define GET_WT_PROXIMITY_HCTX(wp, lp)      ((HCTX)wp)\n#define GET_WT_PROXIMITY_CTXPROX(wp, lp)   LOWORD(lp)\n#define GET_WT_PROXIMITY_HARDPROX(wp, lp)  HIWORD(lp)\n#define GET_WT_PROXIMITY_MPS(h, fc, fh)    (WPARAM)(h), MAKELONG(fc, fh)\n\n#define GET_WT_INFOCHANGE_HMGR(wp, lp)      ((HMGR)wp)\n#define GET_WT_INFOCHANGE_CATEGORY(wp, lp)  LOWORD(lp)\n#define GET_WT_INFOCHANGE_INDEX(wp, lp)     HIWORD(lp)\n#define GET_WT_INFOCHANGE_MPS(h, c, i)      (WPARAM)(h), MAKELONG(c, i)\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif /* defined(__WINE_WINTABX_H */\n"
  },
  {
    "path": "wine/windows/winternl.h",
    "content": "/*\n * Internal NT APIs and data structures\n *\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINTERNL_H\n#define __WINE_WINTERNL_H\n\n#include <ntdef.h>\n#include <windef.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n\n/**********************************************************************\n * Fundamental types and data structures\n */\n\n#ifndef WINE_NTSTATUS_DECLARED\n#define WINE_NTSTATUS_DECLARED\ntypedef LONG NTSTATUS;\n#endif\n\ntypedef const char *PCSZ;\n\ntypedef short CSHORT;\ntypedef CSHORT *PCSHORT;\n\n#ifndef __STRING_DEFINED__\n#define __STRING_DEFINED__\ntypedef struct _STRING {\n  USHORT Length;\n  USHORT MaximumLength;\n  PCHAR Buffer;\n} STRING, *PSTRING;\n#endif\n\ntypedef STRING ANSI_STRING;\ntypedef PSTRING PANSI_STRING;\ntypedef const STRING *PCANSI_STRING;\n\ntypedef STRING OEM_STRING;\ntypedef PSTRING POEM_STRING;\ntypedef const STRING *PCOEM_STRING;\n\n#ifndef __UNICODE_STRING_DEFINED__\n#define __UNICODE_STRING_DEFINED__\ntypedef struct _UNICODE_STRING {\n  USHORT Length;        /* bytes */\n  USHORT MaximumLength; /* bytes */\n  PWSTR  Buffer;\n} UNICODE_STRING, *PUNICODE_STRING;\n#endif\n\ntypedef const UNICODE_STRING *PCUNICODE_STRING;\n\n#ifndef _FILETIME_\n#define _FILETIME_\n/* 64 bit number of 100 nanoseconds intervals since January 1, 1601 */\ntypedef struct _FILETIME\n{\n#ifdef WORDS_BIGENDIAN\n  DWORD  dwHighDateTime;\n  DWORD  dwLowDateTime;\n#else\n  DWORD  dwLowDateTime;\n  DWORD  dwHighDateTime;\n#endif\n} FILETIME, *PFILETIME, *LPFILETIME;\n#endif /* _FILETIME_ */\n\n/*\n * RTL_SYSTEM_TIME and RTL_TIME_ZONE_INFORMATION are the same as\n * the SYSTEMTIME and TIME_ZONE_INFORMATION structures defined\n * in winbase.h, however we need to define them separately so\n * winternl.h doesn't depend on winbase.h.  They are used by\n * RtlQueryTimeZoneInformation and RtlSetTimeZoneInformation.\n * The names are guessed; if anybody knows the real names, let me know.\n */\ntypedef struct _RTL_SYSTEM_TIME {\n    WORD wYear;\n    WORD wMonth;\n    WORD wDayOfWeek;\n    WORD wDay;\n    WORD wHour;\n    WORD wMinute;\n    WORD wSecond;\n    WORD wMilliseconds;\n} RTL_SYSTEM_TIME, *PRTL_SYSTEM_TIME;\n\ntypedef struct _RTL_TIME_ZONE_INFORMATION {\n    LONG Bias;\n    WCHAR StandardName[32];\n    RTL_SYSTEM_TIME StandardDate;\n    LONG StandardBias;\n    WCHAR DaylightName[32];\n    RTL_SYSTEM_TIME DaylightDate;\n    LONG DaylightBias;\n} RTL_TIME_ZONE_INFORMATION, *PRTL_TIME_ZONE_INFORMATION;\n\ntypedef struct _RTL_TIME_DYNAMIC_ZONE_INFORMATION\n{\n    LONG Bias;\n    WCHAR StandardName[32];\n    RTL_SYSTEM_TIME StandardDate;\n    LONG StandardBias;\n    WCHAR DaylightName[32];\n    RTL_SYSTEM_TIME DaylightDate;\n    LONG DaylightBias;\n    WCHAR TimeZoneKeyName[128];\n    BOOLEAN DynamicDaylightTimeDisabled;\n} RTL_DYNAMIC_TIME_ZONE_INFORMATION, *PRTL_DYNAMIC_TIME_ZONE_INFORMATION;\n\ntypedef struct _CLIENT_ID\n{\n   HANDLE UniqueProcess;\n   HANDLE UniqueThread;\n} CLIENT_ID, *PCLIENT_ID;\n\ntypedef struct _CURDIR\n{\n    UNICODE_STRING DosPath;\n    PVOID Handle;\n} CURDIR, *PCURDIR;\n\ntypedef struct RTL_DRIVE_LETTER_CURDIR\n{\n    USHORT              Flags;\n    USHORT              Length;\n    ULONG               TimeStamp;\n    UNICODE_STRING      DosPath;\n} RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;\n\ntypedef struct _RTL_RELATIVE_NAME\n{\n    UNICODE_STRING RelativeName;\n    HANDLE         ContainerDirectory;\n    void          *CurDirRef;\n} RTL_RELATIVE_NAME, *PRTL_RELATIVE_NAME;\n\ntypedef struct tagRTL_BITMAP {\n    ULONG  SizeOfBitMap; /* Number of bits in the bitmap */\n    PULONG Buffer; /* Bitmap data, assumed sized to a DWORD boundary */\n} RTL_BITMAP, *PRTL_BITMAP;\n\ntypedef const RTL_BITMAP *PCRTL_BITMAP;\n\ntypedef struct tagRTL_BITMAP_RUN {\n    ULONG StartingIndex; /* Bit position at which run starts */\n    ULONG NumberOfBits;  /* Size of the run in bits */\n} RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;\n\ntypedef const RTL_BITMAP_RUN *PCRTL_BITMAP_RUN;\n\ntypedef struct _RTL_USER_PROCESS_PARAMETERS\n{\n    ULONG               AllocationSize;\n    ULONG               Size;\n    ULONG               Flags;\n    ULONG               DebugFlags;\n    HANDLE              ConsoleHandle;\n    ULONG               ConsoleFlags;\n    HANDLE              hStdInput;\n    HANDLE              hStdOutput;\n    HANDLE              hStdError;\n    CURDIR              CurrentDirectory;\n    UNICODE_STRING      DllPath;\n    UNICODE_STRING      ImagePathName;\n    UNICODE_STRING      CommandLine;\n    PWSTR               Environment;\n    ULONG               dwX;\n    ULONG               dwY;\n    ULONG               dwXSize;\n    ULONG               dwYSize;\n    ULONG               dwXCountChars;\n    ULONG               dwYCountChars;\n    ULONG               dwFillAttribute;\n    ULONG               dwFlags;\n    ULONG               wShowWindow;\n    UNICODE_STRING      WindowTitle;\n    UNICODE_STRING      Desktop;\n    UNICODE_STRING      ShellInfo;\n    UNICODE_STRING      RuntimeInfo;\n    RTL_DRIVE_LETTER_CURDIR DLCurrentDirectory[0x20];\n} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;\n\n/* value for Flags field (FIXME: not the correct name) */\n#define PROCESS_PARAMS_FLAG_NORMALIZED 1\n\ntypedef struct _PEB_LDR_DATA\n{\n    ULONG               Length;\n    BOOLEAN             Initialized;\n    PVOID               SsHandle;\n    LIST_ENTRY          InLoadOrderModuleList;\n    LIST_ENTRY          InMemoryOrderModuleList;\n    LIST_ENTRY          InInitializationOrderModuleList;\n    PVOID               EntryInProgress;\n} PEB_LDR_DATA, *PPEB_LDR_DATA;\n\ntypedef struct _GDI_TEB_BATCH\n{\n    ULONG  Offset;\n    HANDLE HDC;\n    ULONG  Buffer[0x136];\n} GDI_TEB_BATCH;\n\ntypedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME\n{\n    struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME *Previous;\n    struct _ACTIVATION_CONTEXT                 *ActivationContext;\n    ULONG                                       Flags;\n} RTL_ACTIVATION_CONTEXT_STACK_FRAME, *PRTL_ACTIVATION_CONTEXT_STACK_FRAME;\n\ntypedef struct _ACTIVATION_CONTEXT_STACK\n{\n    ULONG                               Flags;\n    ULONG                               NextCookieSequenceNumber;\n    RTL_ACTIVATION_CONTEXT_STACK_FRAME *ActiveFrame;\n    LIST_ENTRY                          FrameListCache;\n} ACTIVATION_CONTEXT_STACK, *PACTIVATION_CONTEXT_STACK;\n\ntypedef struct _TEB_ACTIVE_FRAME_CONTEXT\n{\n    ULONG       Flags;\n    const char *FrameName;\n} TEB_ACTIVE_FRAME_CONTEXT, *PTEB_ACTIVE_FRAME_CONTEXT;\n\ntypedef struct _TEB_ACTIVE_FRAME_CONTEXT_EX\n{\n    TEB_ACTIVE_FRAME_CONTEXT BasicContext;\n    const char              *SourceLocation;\n} TEB_ACTIVE_FRAME_CONTEXT_EX, *PTEB_ACTIVE_FRAME_CONTEXT_EX;\n\ntypedef struct _TEB_ACTIVE_FRAME\n{\n    ULONG                     Flags;\n    struct _TEB_ACTIVE_FRAME *Previous;\n    TEB_ACTIVE_FRAME_CONTEXT *Context;\n} TEB_ACTIVE_FRAME, *PTEB_ACTIVE_FRAME;\n\ntypedef struct _TEB_ACTIVE_FRAME_EX\n{\n    TEB_ACTIVE_FRAME BasicFrame;\n    void            *ExtensionIdentifier;\n} TEB_ACTIVE_FRAME_EX, *PTEB_ACTIVE_FRAME_EX;\n\n#define TEB_ACTIVE_FRAME_CONTEXT_FLAG_EXTENDED 0x00000001\n#define TEB_ACTIVE_FRAME_FLAG_EXTENDED         0x00000001\n\n/***********************************************************************\n * PEB data structure\n */\ntypedef struct _PEB\n{                                                                 /* win32/win64 */\n    BOOLEAN                      InheritedAddressSpace;             /* 000/000 */\n    BOOLEAN                      ReadImageFileExecOptions;          /* 001/001 */\n    BOOLEAN                      BeingDebugged;                     /* 002/002 */\n    BOOLEAN                      SpareBool;                         /* 003/003 */\n    HANDLE                       Mutant;                            /* 004/008 */\n    HMODULE                      ImageBaseAddress;                  /* 008/010 */\n    PPEB_LDR_DATA                LdrData;                           /* 00c/018 */\n    RTL_USER_PROCESS_PARAMETERS *ProcessParameters;                 /* 010/020 */\n    PVOID                        SubSystemData;                     /* 014/028 */\n    HANDLE                       ProcessHeap;                       /* 018/030 */\n    PRTL_CRITICAL_SECTION        FastPebLock;                       /* 01c/038 */\n    PVOID /*PPEBLOCKROUTINE*/    FastPebLockRoutine;                /* 020/040 */\n    PVOID /*PPEBLOCKROUTINE*/    FastPebUnlockRoutine;              /* 024/048 */\n    ULONG                        EnvironmentUpdateCount;            /* 028/050 */\n    PVOID                        KernelCallbackTable;               /* 02c/058 */\n    ULONG                        Reserved[2];                       /* 030/060 */\n    PVOID /*PPEB_FREE_BLOCK*/    FreeList;                          /* 038/068 */\n    ULONG                        TlsExpansionCounter;               /* 03c/070 */\n    PRTL_BITMAP                  TlsBitmap;                         /* 040/078 */\n    ULONG                        TlsBitmapBits[2];                  /* 044/080 */\n    PVOID                        ReadOnlySharedMemoryBase;          /* 04c/088 */\n    PVOID                        ReadOnlySharedMemoryHeap;          /* 050/090 */\n    PVOID                       *ReadOnlyStaticServerData;          /* 054/098 */\n    PVOID                        AnsiCodePageData;                  /* 058/0a0 */\n    PVOID                        OemCodePageData;                   /* 05c/0a8 */\n    PVOID                        UnicodeCaseTableData;              /* 060/0b0 */\n    ULONG                        NumberOfProcessors;                /* 064/0b8 */\n    ULONG                        NtGlobalFlag;                      /* 068/0bc */\n    LARGE_INTEGER                CriticalSectionTimeout;            /* 070/0c0 */\n    SIZE_T                       HeapSegmentReserve;                /* 078/0c8 */\n    SIZE_T                       HeapSegmentCommit;                 /* 07c/0d0 */\n    SIZE_T                       HeapDeCommitTotalFreeThreshold;    /* 080/0d8 */\n    SIZE_T                       HeapDeCommitFreeBlockThreshold;    /* 084/0e0 */\n    ULONG                        NumberOfHeaps;                     /* 088/0e8 */\n    ULONG                        MaximumNumberOfHeaps;              /* 08c/0ec */\n    PVOID                       *ProcessHeaps;                      /* 090/0f0 */\n    PVOID                        GdiSharedHandleTable;              /* 094/0f8 */\n    PVOID                        ProcessStarterHelper;              /* 098/100 */\n    PVOID                        GdiDCAttributeList;                /* 09c/108 */\n    PVOID                        LoaderLock;                        /* 0a0/110 */\n    ULONG                        OSMajorVersion;                    /* 0a4/118 */\n    ULONG                        OSMinorVersion;                    /* 0a8/11c */\n    ULONG                        OSBuildNumber;                     /* 0ac/120 */\n    ULONG                        OSPlatformId;                      /* 0b0/124 */\n    ULONG                        ImageSubSystem;                    /* 0b4/128 */\n    ULONG                        ImageSubSystemMajorVersion;        /* 0b8/12c */\n    ULONG                        ImageSubSystemMinorVersion;        /* 0bc/130 */\n    ULONG                        ImageProcessAffinityMask;          /* 0c0/134 */\n    HANDLE                       GdiHandleBuffer[28];               /* 0c4/138 */\n    ULONG                        unknown[6];                        /* 134/218 */\n    PVOID                        PostProcessInitRoutine;            /* 14c/230 */\n    PRTL_BITMAP                  TlsExpansionBitmap;                /* 150/238 */\n    ULONG                        TlsExpansionBitmapBits[32];        /* 154/240 */\n    ULONG                        SessionId;                         /* 1d4/2c0 */\n    ULARGE_INTEGER               AppCompatFlags;                    /* 1d8/2c8 */\n    ULARGE_INTEGER               AppCompatFlagsUser;                /* 1e0/2d0 */\n    PVOID                        ShimData;                          /* 1e8/2d8 */\n    PVOID                        AppCompatInfo;                     /* 1ec/2e0 */\n    UNICODE_STRING               CSDVersion;                        /* 1f0/2e8 */\n    PVOID                        ActivationContextData;             /* 1f8/2f8 */\n    PVOID                        ProcessAssemblyStorageMap;         /* 1fc/300 */\n    PVOID                        SystemDefaultActivationData;       /* 200/308 */\n    PVOID                        SystemAssemblyStorageMap;          /* 204/310 */\n    SIZE_T                       MinimumStackCommit;                /* 208/318 */\n    PVOID                       *FlsCallback;                       /* 20c/320 */\n    LIST_ENTRY                   FlsListHead;                       /* 210/328 */\n    PRTL_BITMAP                  FlsBitmap;                         /* 218/338 */\n    ULONG                        FlsBitmapBits[4];                  /* 21c/340 */\n} PEB, *PPEB;\n\n\n/***********************************************************************\n * TEB data structure\n */\ntypedef struct _TEB\n{                                                                 /* win32/win64 */\n    NT_TIB                       Tib;                               /* 000/0000 */\n    PVOID                        EnvironmentPointer;                /* 01c/0038 */\n    CLIENT_ID                    ClientId;                          /* 020/0040 */\n    PVOID                        ActiveRpcHandle;                   /* 028/0050 */\n    PVOID                        ThreadLocalStoragePointer;         /* 02c/0058 */\n    PPEB                         Peb;                               /* 030/0060 */\n    ULONG                        LastErrorValue;                    /* 034/0068 */\n    ULONG                        CountOfOwnedCriticalSections;      /* 038/006c */\n    PVOID                        CsrClientThread;                   /* 03c/0070 */\n    PVOID                        Win32ThreadInfo;                   /* 040/0078 */\n    ULONG                        Win32ClientInfo[31];               /* 044/0080 used for user32 private data in Wine */\n    PVOID                        WOW32Reserved;                     /* 0c0/0100 */\n    ULONG                        CurrentLocale;                     /* 0c4/0108 */\n    ULONG                        FpSoftwareStatusRegister;          /* 0c8/010c */\n    PVOID                        SystemReserved1[54];               /* 0cc/0110 used for kernel32 private data in Wine */\n    LONG                         ExceptionCode;                     /* 1a4/02c0 */\n    ACTIVATION_CONTEXT_STACK     ActivationContextStack;            /* 1a8/02c8 */\n    BYTE                         SpareBytes1[24];                   /* 1bc/02e8 */\n    PVOID                        SystemReserved2[10];               /* 1d4/0300 used for ntdll platform-specific private data in Wine */\n    GDI_TEB_BATCH                GdiTebBatch;                       /* 1fc/0350 used for ntdll private data in Wine */\n    HANDLE                       gdiRgn;                            /* 6dc/0838 */\n    HANDLE                       gdiPen;                            /* 6e0/0840 */\n    HANDLE                       gdiBrush;                          /* 6e4/0848 */\n    CLIENT_ID                    RealClientId;                      /* 6e8/0850 */\n    HANDLE                       GdiCachedProcessHandle;            /* 6f0/0860 */\n    ULONG                        GdiClientPID;                      /* 6f4/0868 */\n    ULONG                        GdiClientTID;                      /* 6f8/086c */\n    PVOID                        GdiThreadLocaleInfo;               /* 6fc/0870 */\n    ULONG                        UserReserved[5];                   /* 700/0878 */\n    PVOID                        glDispatchTable[280];              /* 714/0890 */\n    PVOID                        glReserved1[26];                   /* b74/1150 */\n    PVOID                        glReserved2;                       /* bdc/1220 */\n    PVOID                        glSectionInfo;                     /* be0/1228 */\n    PVOID                        glSection;                         /* be4/1230 */\n    PVOID                        glTable;                           /* be8/1238 */\n    PVOID                        glCurrentRC;                       /* bec/1240 */\n    PVOID                        glContext;                         /* bf0/1248 */\n    ULONG                        LastStatusValue;                   /* bf4/1250 */\n    UNICODE_STRING               StaticUnicodeString;               /* bf8/1258 used by advapi32 */\n    WCHAR                        StaticUnicodeBuffer[261];          /* c00/1268 used by advapi32 */\n    PVOID                        DeallocationStack;                 /* e0c/1478 */\n    PVOID                        TlsSlots[64];                      /* e10/1480 */\n    LIST_ENTRY                   TlsLinks;                          /* f10/1680 */\n    PVOID                        Vdm;                               /* f18/1690 */\n    PVOID                        ReservedForNtRpc;                  /* f1c/1698 */\n    PVOID                        DbgSsReserved[2];                  /* f20/16a0 */\n    ULONG                        HardErrorDisabled;                 /* f28/16b0 */\n    PVOID                        Instrumentation[16];               /* f2c/16b8 */\n    PVOID                        WinSockData;                       /* f6c/1738 */\n    ULONG                        GdiBatchCount;                     /* f70/1740 */\n    ULONG                        Spare2;                            /* f74/1744 */\n    PVOID                        Spare3;                            /* f78/1748 */\n    PVOID                        Spare4;                            /* f7c/1750 */\n    PVOID                        ReservedForOle;                    /* f80/1758 */\n    ULONG                        WaitingOnLoaderLock;               /* f84/1760 */\n    PVOID                        Reserved5[3];                      /* f88/1768 */\n    PVOID                       *TlsExpansionSlots;                 /* f94/1780 */\n#ifdef _WIN64\n    PVOID                        DeallocationBStore;                /*    /1788 */\n    PVOID                        BStoreLimit;                       /*    /1790 */\n#endif\n    ULONG                        ImpersonationLocale;               /* f98/1798 */\n    ULONG                        IsImpersonating;                   /* f9c/179c */\n    PVOID                        NlsCache;                          /* fa0/17a0 */\n    PVOID                        ShimData;                          /* fa4/17a8 */\n    ULONG                        HeapVirtualAffinity;               /* fa8/17b0 */\n    PVOID                        CurrentTransactionHandle;          /* fac/17b8 */\n    TEB_ACTIVE_FRAME            *ActiveFrame;                       /* fb0/17c0 */\n    PVOID                       *FlsSlots;                          /* fb4/17c8 */\n} TEB, *PTEB;\n\n/***********************************************************************\n * Enums\n */\n\ntypedef enum _FILE_INFORMATION_CLASS {\n    FileDirectoryInformation = 1,\n    FileFullDirectoryInformation,\n    FileBothDirectoryInformation,\n    FileBasicInformation,\n    FileStandardInformation,\n    FileInternalInformation,\n    FileEaInformation,\n    FileAccessInformation,\n    FileNameInformation,\n    FileRenameInformation,\n    FileLinkInformation,\n    FileNamesInformation,\n    FileDispositionInformation,\n    FilePositionInformation,\n    FileFullEaInformation,\n    FileModeInformation,\n    FileAlignmentInformation,\n    FileAllInformation,\n    FileAllocationInformation,\n    FileEndOfFileInformation,\n    FileAlternateNameInformation,\n    FileStreamInformation,\n    FilePipeInformation,\n    FilePipeLocalInformation,\n    FilePipeRemoteInformation,\n    FileMailslotQueryInformation,\n    FileMailslotSetInformation,\n    FileCompressionInformation,\n    FileObjectIdInformation,\n    FileCompletionInformation,\n    FileMoveClusterInformation,\n    FileQuotaInformation,\n    FileReparsePointInformation,\n    FileNetworkOpenInformation,\n    FileAttributeTagInformation,\n    FileTrackingInformation,\n    FileIdBothDirectoryInformation,\n    FileIdFullDirectoryInformation,\n    FileValidDataLengthInformation,\n    FileShortNameInformation,\n    FileIoCompletionNotificationInformation,\n    FileIoStatusBlockRangeInformation,\n    FileIoPriorityHintInformation,\n    FileSfioReserveInformation,\n    FileSfioVolumeInformation,\n    FileHardLinkInformation,\n    FileProcessIdsUsingFileInformation,\n    FileNormalizedNameInformation,\n    FileNetworkPhysicalNameInformation,\n    FileIdGlobalTxDirectoryInformation,\n    FileIsRemoteDeviceInformation,\n    FileAttributeCacheInformation,\n    FileNumaNodeInformation,\n    FileStandardLinkInformation,\n    FileRemoteProtocolInformation,\n    FileRenameInformationBypassAccessCheck,\n    FileLinkInformationBypassAccessCheck,\n    FileVolumeNameInformation,\n    FileIdInformation,\n    FileIdExtdDirectoryInformation,\n    FileReplaceCompletionInformation,\n    FileHardLinkFullIdInformation,\n    FileIdExtdBothDirectoryInformation,\n    FileMaximumInformation\n} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;\n\ntypedef struct _FILE_DIRECTORY_INFORMATION {\n    ULONG               NextEntryOffset;\n    ULONG               FileIndex;\n    LARGE_INTEGER       CreationTime;\n    LARGE_INTEGER       LastAccessTime;\n    LARGE_INTEGER       LastWriteTime;\n    LARGE_INTEGER       ChangeTime;\n    LARGE_INTEGER       EndOfFile;\n    LARGE_INTEGER       AllocationSize;\n    ULONG               FileAttributes;\n    ULONG               FileNameLength;\n    WCHAR               FileName[ANYSIZE_ARRAY];\n} FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;\n\ntypedef struct _FILE_FULL_DIRECTORY_INFORMATION {\n    ULONG               NextEntryOffset;\n    ULONG               FileIndex;\n    LARGE_INTEGER       CreationTime;\n    LARGE_INTEGER       LastAccessTime;\n    LARGE_INTEGER       LastWriteTime;\n    LARGE_INTEGER       ChangeTime;\n    LARGE_INTEGER       EndOfFile;\n    LARGE_INTEGER       AllocationSize;\n    ULONG               FileAttributes;\n    ULONG               FileNameLength;\n    ULONG               EaSize;\n    WCHAR               FileName[ANYSIZE_ARRAY];\n} FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION,\n  FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;\n\ntypedef struct _FILE_ID_FULL_DIRECTORY_INFORMATION {\n    ULONG               NextEntryOffset;\n    ULONG               FileIndex;\n    LARGE_INTEGER       CreationTime;\n    LARGE_INTEGER       LastAccessTime;\n    LARGE_INTEGER       LastWriteTime;\n    LARGE_INTEGER       ChangeTime;\n    LARGE_INTEGER       EndOfFile;\n    LARGE_INTEGER       AllocationSize;\n    ULONG               FileAttributes;\n    ULONG               FileNameLength;\n    ULONG               EaSize;\n    LARGE_INTEGER       FileId;\n    WCHAR               FileName[ANYSIZE_ARRAY];\n} FILE_ID_FULL_DIRECTORY_INFORMATION, *PFILE_ID_FULL_DIRECTORY_INFORMATION;\n\ntypedef struct _FILE_BOTH_DIRECTORY_INFORMATION {\n    ULONG               NextEntryOffset;\n    ULONG               FileIndex;\n    LARGE_INTEGER       CreationTime;\n    LARGE_INTEGER       LastAccessTime;\n    LARGE_INTEGER       LastWriteTime;\n    LARGE_INTEGER       ChangeTime;\n    LARGE_INTEGER       EndOfFile;\n    LARGE_INTEGER       AllocationSize;\n    ULONG               FileAttributes;\n    ULONG               FileNameLength;\n    ULONG               EaSize;\n    CHAR                ShortNameLength;\n    WCHAR               ShortName[12];\n    WCHAR               FileName[ANYSIZE_ARRAY];\n} FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION,\n  FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;\n\ntypedef struct _FILE_ID_BOTH_DIRECTORY_INFORMATION {\n    ULONG               NextEntryOffset;\n    ULONG               FileIndex;\n    LARGE_INTEGER       CreationTime;\n    LARGE_INTEGER       LastAccessTime;\n    LARGE_INTEGER       LastWriteTime;\n    LARGE_INTEGER       ChangeTime;\n    LARGE_INTEGER       EndOfFile;\n    LARGE_INTEGER       AllocationSize;\n    ULONG               FileAttributes;\n    ULONG               FileNameLength;\n    ULONG               EaSize;\n    CHAR                ShortNameLength;\n    WCHAR               ShortName[12];\n    LARGE_INTEGER       FileId;\n    WCHAR               FileName[ANYSIZE_ARRAY];\n} FILE_ID_BOTH_DIRECTORY_INFORMATION, *PFILE_ID_BOTH_DIRECTORY_INFORMATION;\n\ntypedef struct _FILE_ID_GLOBAL_TX_DIR_INFORMATION {\n    ULONG               NextEntryOffset;\n    ULONG               FileIndex;\n    LARGE_INTEGER       CreationTime;\n    LARGE_INTEGER       LastAccessTime;\n    LARGE_INTEGER       LastWriteTime;\n    LARGE_INTEGER       ChangeTime;\n    LARGE_INTEGER       EndOfFile;\n    LARGE_INTEGER       AllocationSize;\n    ULONG               FileAttributes;\n    ULONG               FileNameLength;\n    LARGE_INTEGER       FileId;\n    GUID                LockingTransactionId;\n    ULONG               TxInfoFlags;\n    WCHAR               FileName[ANYSIZE_ARRAY];\n} FILE_ID_GLOBAL_TX_DIR_INFORMATION, *PFILE_ID_GLOBAL_TX_DIR_INFORMATION;\n\ntypedef struct _FILE_BASIC_INFORMATION {\n    LARGE_INTEGER CreationTime;\n    LARGE_INTEGER LastAccessTime;\n    LARGE_INTEGER LastWriteTime;\n    LARGE_INTEGER ChangeTime;\n    ULONG FileAttributes;\n} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;\n\ntypedef struct _FILE_STANDARD_INFORMATION {\n    LARGE_INTEGER AllocationSize;\n    LARGE_INTEGER EndOfFile;\n    ULONG NumberOfLinks;\n    BOOLEAN DeletePending;\n    BOOLEAN Directory;\n} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;\n\ntypedef struct _FILE_INTERNAL_INFORMATION {\n    LARGE_INTEGER IndexNumber;\n} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;\n\ntypedef struct _FILE_ID_128 {\n    UCHAR Identifier[16];\n} FILE_ID_128, *PFILE_ID_128;\n\ntypedef struct _FILE_ID_INFORMATION {\n    ULONGLONG VolumeSerialNumber;\n    FILE_ID_128 FileId;\n} FILE_ID_INFORMATION, *PFILE_ID_INFORMATION;\n\ntypedef struct _FILE_EA_INFORMATION {\n    ULONG EaSize;\n} FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;\n\ntypedef struct _FILE_ACCESS_INFORMATION {\n    ACCESS_MASK AccessFlags;\n} FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;\n\ntypedef struct _FILE_NAME_INFORMATION {\n    ULONG FileNameLength;\n    WCHAR FileName[1];\n} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;\n\ntypedef struct _FILE_RENAME_INFORMATION {\n    BOOLEAN Replace;\n    HANDLE RootDir;\n    ULONG FileNameLength;\n    WCHAR FileName[1];\n} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;\n\ntypedef struct _FILE_LINK_INFORMATION {\n    BOOLEAN ReplaceIfExists;\n    HANDLE RootDirectory;\n    ULONG FileNameLength;\n    WCHAR FileName[1];\n} FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;\n\ntypedef struct _FILE_NAMES_INFORMATION {\n    ULONG NextEntryOffset;\n    ULONG FileIndex;\n    ULONG FileNameLength;\n    WCHAR FileName[1];\n} FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;\n\ntypedef struct _FILE_DISPOSITION_INFORMATION {\n    BOOLEAN DoDeleteFile;\n} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;\n\ntypedef struct _FILE_POSITION_INFORMATION {\n    LARGE_INTEGER CurrentByteOffset;\n} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;\n\ntypedef struct _FILE_ALIGNMENT_INFORMATION {\n    ULONG AlignmentRequirement;\n} FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;\n\ntypedef struct _FILE_ALLOCATION_INFORMATION {\n    LARGE_INTEGER AllocationSize;\n} FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;\n\ntypedef struct _FILE_END_OF_FILE_INFORMATION {\n    LARGE_INTEGER EndOfFile;\n} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;\n\ntypedef struct _FILE_NETWORK_OPEN_INFORMATION {\n    LARGE_INTEGER CreationTime;\n    LARGE_INTEGER LastAccessTime;\n    LARGE_INTEGER LastWriteTime;\n    LARGE_INTEGER ChangeTime;\n    LARGE_INTEGER AllocationSize;\n    LARGE_INTEGER EndOfFile;\n    ULONG FileAttributes;\n} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;\n\ntypedef struct _FILE_FULL_EA_INFORMATION {\n    ULONG NextEntryOffset;\n    UCHAR Flags;\n    UCHAR EaNameLength;\n    USHORT EaValueLength;\n    CHAR EaName[1];\n} FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;\n\ntypedef struct _FILE_MODE_INFORMATION {\n    ULONG Mode;\n} FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;\n\ntypedef struct _FILE_STREAM_INFORMATION\n{\n    ULONG NextEntryOffset;\n    ULONG StreamNameLength;\n    LARGE_INTEGER StreamSize;\n    LARGE_INTEGER StreamAllocationSize;\n    WCHAR StreamName[1];\n} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;\n\ntypedef struct _FILE_ATTRIBUTE_TAG_INFORMATION\n{\n    ULONG FileAttributes;\n    ULONG ReparseTag;\n} FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;\n\ntypedef struct _FILE_MAILSLOT_QUERY_INFORMATION {\n    ULONG MaximumMessageSize;\n    ULONG MailslotQuota;\n    ULONG NextMessageSize;\n    ULONG MessagesAvailable;\n    LARGE_INTEGER ReadTimeout;\n} FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;\n\ntypedef struct _FILE_MAILSLOT_SET_INFORMATION {\n    LARGE_INTEGER ReadTimeout;\n} FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;\n\ntypedef struct _FILE_PIPE_INFORMATION {\n    ULONG ReadMode;\n    ULONG CompletionMode;\n} FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION;\n\ntypedef struct _FILE_PIPE_LOCAL_INFORMATION {\n    ULONG NamedPipeType;\n    ULONG NamedPipeConfiguration;\n    ULONG MaximumInstances;\n    ULONG CurrentInstances;\n    ULONG InboundQuota;\n    ULONG ReadDataAvailable;\n    ULONG OutboundQuota;\n    ULONG WriteQuotaAvailable;\n    ULONG NamedPipeState;\n    ULONG NamedPipeEnd;\n} FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;\n\n#define FILE_PIPE_DISCONNECTED_STATE        0x00000001\n#define FILE_PIPE_LISTENING_STATE           0x00000002\n#define FILE_PIPE_CONNECTED_STATE           0x00000003\n#define FILE_PIPE_CLOSING_STATE             0x00000004\n\ntypedef struct _FILE_OBJECTID_INFORMATION {\n    LONGLONG FileReference;\n    UCHAR ObjectId[16];\n    union {\n        struct {\n            UCHAR BirthVolumeId[16];\n            UCHAR BirthObjectId[16];\n            UCHAR DomainId[16];\n        } DUMMYSTRUCTNAME;\n        UCHAR ExtendedInfo[48];\n    } DUMMYUNIONNAME;\n} FILE_OBJECTID_INFORMATION, *PFILE_OBJECTID_INFORMATION;\n\ntypedef struct _FILE_QUOTA_INFORMATION {\n    ULONG NextEntryOffset;\n    ULONG SidLength;\n    LARGE_INTEGER ChangeTime;\n    LARGE_INTEGER QuotaUsed;\n    LARGE_INTEGER QuotaThreshold;\n    LARGE_INTEGER QuotaLimit;\n    SID Sid;\n} FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION;\n\ntypedef struct _FILE_REPARSE_POINT_INFORMATION {\n    LONGLONG FileReference;\n    ULONG Tag;\n} FILE_REPARSE_POINT_INFORMATION, *PFILE_REPARSE_POINT_INFORMATION;\n\ntypedef struct _FILE_ALL_INFORMATION {\n    FILE_BASIC_INFORMATION     BasicInformation;\n    FILE_STANDARD_INFORMATION  StandardInformation;\n    FILE_INTERNAL_INFORMATION  InternalInformation;\n    FILE_EA_INFORMATION        EaInformation;\n    FILE_ACCESS_INFORMATION    AccessInformation;\n    FILE_POSITION_INFORMATION  PositionInformation;\n    FILE_MODE_INFORMATION      ModeInformation;\n    FILE_ALIGNMENT_INFORMATION AlignmentInformation;\n    FILE_NAME_INFORMATION      NameInformation;\n} FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;\n\ntypedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION {\n    ULONG Flags;\n} FILE_IO_COMPLETION_NOTIFICATION_INFORMATION, *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION;\n\n#define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1\n#define FILE_SKIP_SET_EVENT_ON_HANDLE        0x2\n#define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO  0x4\n\ntypedef enum _FSINFOCLASS {\n    FileFsVolumeInformation = 1,\n    FileFsLabelInformation,\n    FileFsSizeInformation,\n    FileFsDeviceInformation,\n    FileFsAttributeInformation,\n    FileFsControlInformation,\n    FileFsFullSizeInformation,\n    FileFsObjectIdInformation,\n    FileFsMaximumInformation\n} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;\n\ntypedef enum _KEY_INFORMATION_CLASS {\n    KeyBasicInformation,\n    KeyNodeInformation,\n    KeyFullInformation,\n    KeyNameInformation,\n    KeyCachedInformation,\n    KeyFlagsInformation,\n    KeyVirtualizationInformation,\n    KeyHandleTagsInformation,\n    MaxKeyInfoClass\n} KEY_INFORMATION_CLASS;\n\ntypedef enum _KEY_VALUE_INFORMATION_CLASS {\n    KeyValueBasicInformation,\n    KeyValueFullInformation,\n    KeyValuePartialInformation,\n    KeyValueFullInformationAlign64,\n    KeyValuePartialInformationAlign64\n} KEY_VALUE_INFORMATION_CLASS;\n\ntypedef enum _OBJECT_INFORMATION_CLASS {\n    ObjectBasicInformation,\n    ObjectNameInformation,\n    ObjectTypeInformation,\n    ObjectAllInformation,\n    ObjectDataInformation\n} OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;\n\ntypedef enum _PROCESSINFOCLASS {\n    ProcessBasicInformation = 0,\n    ProcessQuotaLimits = 1,\n    ProcessIoCounters = 2,\n    ProcessVmCounters = 3,\n    ProcessTimes = 4,\n    ProcessBasePriority = 5,\n    ProcessRaisePriority = 6,\n    ProcessDebugPort = 7,\n    ProcessExceptionPort = 8,\n    ProcessAccessToken = 9,\n    ProcessLdtInformation = 10,\n    ProcessLdtSize = 11,\n    ProcessDefaultHardErrorMode = 12,\n    ProcessIoPortHandlers = 13,\n    ProcessPooledUsageAndLimits = 14,\n    ProcessWorkingSetWatch = 15,\n    ProcessUserModeIOPL = 16,\n    ProcessEnableAlignmentFaultFixup = 17,\n    ProcessPriorityClass = 18,\n    ProcessWx86Information = 19,\n    ProcessHandleCount = 20,\n    ProcessAffinityMask = 21,\n    ProcessPriorityBoost = 22,\n    ProcessDeviceMap = 23,\n    ProcessSessionInformation = 24,\n    ProcessForegroundInformation = 25,\n    ProcessWow64Information = 26,\n    ProcessImageFileName = 27,\n    ProcessLUIDDeviceMapsEnabled = 28,\n    ProcessBreakOnTermination = 29,\n    ProcessDebugObjectHandle = 30,\n    ProcessDebugFlags = 31,\n    ProcessHandleTracing = 32,\n    ProcessExecuteFlags = 34,\n    ProcessTlsInformation = 35,\n    ProcessCookie = 36,\n    ProcessImageInformation = 37,\n    ProcessCycleTime = 38,\n    ProcessPagePriority = 39,\n    ProcessInstrumentationCallback = 40,\n    ProcessThreadStackAllocation = 41,\n    ProcessWorkingSetWatchEx = 42,\n    ProcessImageFileNameWin32 = 43,\n    MaxProcessInfoClass\n} PROCESSINFOCLASS, PROCESS_INFORMATION_CLASS;\n\n#define MEM_EXECUTE_OPTION_DISABLE   0x01\n#define MEM_EXECUTE_OPTION_ENABLE    0x02\n#define MEM_EXECUTE_OPTION_DISABLE_THUNK_EMULATION 0x04\n#define MEM_EXECUTE_OPTION_PERMANENT 0x08\n\ntypedef enum _SECTION_INHERIT {\n    ViewShare = 1,\n    ViewUnmap = 2\n} SECTION_INHERIT;\n\ntypedef enum _SYSTEM_INFORMATION_CLASS {\n    SystemBasicInformation = 0,\n    SystemCpuInformation = 1,\n    SystemPerformanceInformation = 2,\n    SystemTimeOfDayInformation = 3, /* was SystemTimeInformation */\n    Unknown4,\n    SystemProcessInformation = 5,\n    Unknown6,\n    Unknown7,\n    SystemProcessorPerformanceInformation = 8,\n    Unknown9,\n    Unknown10,\n    SystemModuleInformation = 11,\n    Unknown12,\n    Unknown13,\n    Unknown14,\n    Unknown15,\n    SystemHandleInformation = 16,\n    Unknown17,\n    SystemPageFileInformation = 18,\n    Unknown19,\n    Unknown20,\n    SystemCacheInformation = 21,\n    Unknown22,\n    SystemInterruptInformation = 23,\n    SystemDpcBehaviourInformation = 24,\n    SystemFullMemoryInformation = 25,\n    SystemNotImplemented6 = 25,\n    SystemLoadImage = 26,\n    SystemUnloadImage = 27,\n    SystemTimeAdjustmentInformation = 28,\n    SystemTimeAdjustment = 28,\n    SystemSummaryMemoryInformation = 29,\n    SystemNotImplemented7 = 29,\n    SystemNextEventIdInformation = 30,\n    SystemNotImplemented8 = 30,\n    SystemEventIdsInformation = 31,\n    SystemCrashDumpInformation = 32,\n    SystemExceptionInformation = 33,\n    SystemCrashDumpStateInformation = 34,\n    SystemKernelDebuggerInformation = 35,\n    SystemContextSwitchInformation = 36,\n    SystemRegistryQuotaInformation = 37,\n    SystemCurrentTimeZoneInformation = 44,\n    SystemTimeZoneInformation = 44,\n    SystemLookasideInformation = 45,\n    SystemSetTimeSlipEvent = 46,\n    SystemCreateSession = 47,\n    SystemDeleteSession = 48,\n    SystemInvalidInfoClass4 = 49,\n    SystemRangeStartInformation = 50,\n    SystemVerifierInformation = 51,\n    SystemAddVerifier = 52,\n    SystemSessionProcessesInformation\t= 53,\n    SystemLoadGdiDriverInSystemSpace = 54,\n    SystemNumaProcessorMap = 55,\n    SystemPrefetcherInformation = 56,\n    SystemExtendedProcessInformation = 57,\n    SystemRecommendedSharedDataAlignment = 58,\n    SystemComPlusPackage = 59,\n    SystemNumaAvailableMemory = 60,\n    SystemProcessorPowerInformation = 61,\n    SystemEmulationBasicInformation = 62,\n    SystemEmulationProcessorInformation = 63,\n    SystemExtendedHandleInformation = 64,\n    SystemLostDelayedWriteInformation = 65,\n    SystemBigPoolInformation = 66,\n    SystemSessionPoolTagInformation = 67,\n    SystemSessionMappedViewInformation = 68,\n    SystemHotpatchInformation = 69,\n    SystemObjectSecurityMode = 70,\n    SystemWatchdogTimerHandler = 71,\n    SystemWatchdogTimerInformation = 72,\n    SystemLogicalProcessorInformation = 73,\n    SystemWow64SharedInformation = 74,\n    SystemRegisterFirmwareTableInformationHandler = 75,\n    SystemFirmwareTableInformation = 76,\n    SystemModuleInformationEx = 77,\n    SystemVerifierTriageInformation = 78,\n    SystemSuperfetchInformation = 79,\n    SystemMemoryListInformation = 80,\n    SystemFileCacheInformationEx = 81,\n    SystemLogicalProcessorInformationEx = 107,\n    SystemInformationClassMax\n} SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;\n\ntypedef enum _THREADINFOCLASS {\n    ThreadBasicInformation,\n    ThreadTimes,\n    ThreadPriority,\n    ThreadBasePriority,\n    ThreadAffinityMask,\n    ThreadImpersonationToken,\n    ThreadDescriptorTableEntry,\n    ThreadEnableAlignmentFaultFixup,\n    ThreadEventPair_Reusable,\n    ThreadQuerySetWin32StartAddress,\n    ThreadZeroTlsCell,\n    ThreadPerformanceCount,\n    ThreadAmILastThread,\n    ThreadIdealProcessor,\n    ThreadPriorityBoost,\n    ThreadSetTlsArrayAddress,\n    ThreadIsIoPending,\n    ThreadHideFromDebugger,\n    ThreadBreakOnTermination,\n    ThreadSwitchLegacyState,\n    ThreadIsTerminated,\n    ThreadLastSystemCall,\n    ThreadIoPriority,\n    ThreadCycleTime,\n    ThreadPagePriority,\n    ThreadActualBasePriority,\n    ThreadTebInformation,\n    ThreadCSwitchMon,\n    ThreadCSwitchPmu,\n    ThreadWow64Context,\n    ThreadGroupInformation,\n    ThreadUmsInformation,\n    ThreadCounterProfiling,\n    ThreadIdealProcessorEx,\n    MaxThreadInfoClass\n} THREADINFOCLASS;\n\ntypedef struct _THREAD_BASIC_INFORMATION\n{\n    NTSTATUS  ExitStatus;\n    PVOID     TebBaseAddress;\n    CLIENT_ID ClientId;\n    ULONG_PTR AffinityMask;\n    LONG      Priority;\n    LONG      BasePriority;\n} THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;\n\ntypedef struct _THREAD_DESCRIPTOR_INFORMATION\n{\n    DWORD       Selector;\n    LDT_ENTRY   Entry;\n} THREAD_DESCRIPTOR_INFORMATION, *PTHREAD_DESCRIPTOR_INFORMATION;\n\ntypedef struct _KERNEL_USER_TIMES {\n    LARGE_INTEGER  CreateTime;\n    LARGE_INTEGER  ExitTime;\n    LARGE_INTEGER  KernelTime;\n    LARGE_INTEGER  UserTime;\n} KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;\n\ntypedef enum _WINSTATIONINFOCLASS {\n    WinStationInformation = 8\n} WINSTATIONINFOCLASS;\n\ntypedef enum _MEMORY_INFORMATION_CLASS {\n    MemoryBasicInformation,\n    MemoryWorkingSetList,\n    MemorySectionName,\n    MemoryBasicVlmInformation\n} MEMORY_INFORMATION_CLASS;\n\ntypedef struct _MEMORY_SECTION_NAME\n{\n    UNICODE_STRING SectionFileName;\n} MEMORY_SECTION_NAME, *PMEMORY_SECTION_NAME;\n\ntypedef enum _MUTANT_INFORMATION_CLASS\n{\n    MutantBasicInformation\n} MUTANT_INFORMATION_CLASS, *PMUTANT_INFORMATION_CLASS;\n\ntypedef struct _MUTANT_BASIC_INFORMATION {\n    LONG        CurrentCount;\n    BOOLEAN     OwnedByCaller;\n    BOOLEAN     AbandonedState;\n} MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION;\n\ntypedef enum _TIMER_INFORMATION_CLASS\n{\n    TimerBasicInformation = 0\n} TIMER_INFORMATION_CLASS;\n\ntypedef struct _TIMER_BASIC_INFORMATION\n{\n    LARGE_INTEGER RemainingTime;\n    BOOLEAN       TimerState;\n} TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION;\n\n\n/* return type of RtlDetermineDosPathNameType_U (FIXME: not the correct names) */\ntypedef enum\n{\n    INVALID_PATH = 0,\n    UNC_PATH,              /* \"//foo\" */\n    ABSOLUTE_DRIVE_PATH,   /* \"c:/foo\" */\n    RELATIVE_DRIVE_PATH,   /* \"c:foo\" */\n    ABSOLUTE_PATH,         /* \"/foo\" */\n    RELATIVE_PATH,         /* \"foo\" */\n    DEVICE_PATH,           /* \"//./foo\" */\n    UNC_DOT_PATH           /* \"//.\" */\n} DOS_PATHNAME_TYPE;\n\n\n/***********************************************************************\n * Types and data structures\n */\n\n/* This is used by NtQuerySystemInformation */\ntypedef struct _SYSTEM_THREAD_INFORMATION\n{                                    /* win32/win64 */\n    LARGE_INTEGER KernelTime;          /* 00/00 */\n    LARGE_INTEGER UserTime;            /* 08/08 */\n    LARGE_INTEGER CreateTime;          /* 10/10 */\n    DWORD         dwTickCount;         /* 18/18 */\n    LPVOID        StartAddress;        /* 1c/20 */\n    CLIENT_ID     ClientId;            /* 20/28 */\n    DWORD         dwCurrentPriority;   /* 28/38 */\n    DWORD         dwBasePriority;      /* 2c/3c */\n    DWORD         dwContextSwitches;   /* 30/40 */\n    DWORD         dwThreadState;       /* 34/44 */\n    DWORD         dwWaitReason;        /* 38/48 */\n    DWORD         dwUnknown;           /* 3c/4c */\n} SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION;\n\ntypedef struct _IO_STATUS_BLOCK {\n  union {\n    NTSTATUS Status;\n    PVOID Pointer;\n  } DUMMYUNIONNAME;\n\n  ULONG_PTR Information;\n} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;\n\ntypedef void (WINAPI * PIO_APC_ROUTINE)(PVOID,PIO_STATUS_BLOCK,ULONG);\n\ntypedef struct _KEY_BASIC_INFORMATION {\n    LARGE_INTEGER LastWriteTime;\n    ULONG         TitleIndex;\n    ULONG         NameLength;\n    WCHAR         Name[1];\n} KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;\n\ntypedef struct _KEY_NODE_INFORMATION\n{\n    LARGE_INTEGER LastWriteTime;\n    ULONG         TitleIndex;\n    ULONG         ClassOffset;\n    ULONG         ClassLength;\n    ULONG         NameLength;\n    WCHAR         Name[1];\n   /* Class[1]; */\n} KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;\n\ntypedef struct _KEY_FULL_INFORMATION\n{\n    LARGE_INTEGER LastWriteTime;\n    ULONG         TitleIndex;\n    ULONG         ClassOffset;\n    ULONG         ClassLength;\n    ULONG         SubKeys;\n    ULONG         MaxNameLen;\n    ULONG         MaxClassLen;\n    ULONG         Values;\n    ULONG         MaxValueNameLen;\n    ULONG         MaxValueDataLen;\n    WCHAR         Class[1];\n} KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;\n\ntypedef struct _KEY_NAME_INFORMATION {\n    ULONG         NameLength;\n    WCHAR         Name[1];\n} KEY_NAME_INFORMATION, *PKEY_NAME_INFORMATION;\n\ntypedef struct _KEY_CACHED_INFORMATION\n{\n    LARGE_INTEGER LastWriteTime;\n    ULONG         TitleIndex;\n    ULONG         SubKeys;\n    ULONG         MaxNameLen;\n    ULONG         Values;\n    ULONG         MaxValueNameLen;\n    ULONG         MaxValueDataLen;\n    ULONG         NameLength;\n} KEY_CACHED_INFORMATION, *PKEY_CACHED_INFORMATION;\n\ntypedef struct _KEY_VALUE_ENTRY\n{\n    PUNICODE_STRING ValueName;\n    ULONG           DataLength;\n    ULONG           DataOffset;\n    ULONG           Type;\n} KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;\n\ntypedef struct _KEY_VALUE_BASIC_INFORMATION {\n    ULONG TitleIndex;\n    ULONG Type;\n    ULONG NameLength;\n    WCHAR Name[1];\n} KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;\n\ntypedef struct _KEY_VALUE_FULL_INFORMATION {\n    ULONG TitleIndex;\n    ULONG Type;\n    ULONG DataOffset;\n    ULONG DataLength;\n    ULONG NameLength;\n    WCHAR Name[1];\n} KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;\n\ntypedef struct _KEY_VALUE_PARTIAL_INFORMATION {\n    ULONG TitleIndex;\n    ULONG Type;\n    ULONG DataLength;\n    UCHAR Data[1];\n} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;\n\n#ifndef __OBJECT_ATTRIBUTES_DEFINED__\n#define __OBJECT_ATTRIBUTES_DEFINED__\ntypedef struct _OBJECT_ATTRIBUTES {\n  ULONG Length;\n  HANDLE RootDirectory;\n  PUNICODE_STRING ObjectName;\n  ULONG Attributes;\n  PVOID SecurityDescriptor;       /* type SECURITY_DESCRIPTOR */\n  PVOID SecurityQualityOfService; /* type SECURITY_QUALITY_OF_SERVICE */\n} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;\n#endif\n\ntypedef struct _OBJECT_DATA_INFORMATION {\n    BOOLEAN InheritHandle;\n    BOOLEAN ProtectFromClose;\n} OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;\n\ntypedef struct _OBJECT_BASIC_INFORMATION {\n    ULONG  Attributes;\n    ACCESS_MASK  GrantedAccess;\n    ULONG  HandleCount;\n    ULONG  PointerCount;\n    ULONG  PagedPoolUsage;\n    ULONG  NonPagedPoolUsage;\n    ULONG  Reserved[3];\n    ULONG  NameInformationLength;\n    ULONG  TypeInformationLength;\n    ULONG  SecurityDescriptorLength;\n    LARGE_INTEGER  CreateTime;\n} OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;\n\ntypedef struct _OBJECT_NAME_INFORMATION {\n    UNICODE_STRING Name;\n} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;\n\ntypedef struct __OBJECT_TYPE_INFORMATION {\n    UNICODE_STRING TypeName;\n    ULONG Reserved [22];\n} OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;\n\ntypedef struct _PROCESS_BASIC_INFORMATION {\n#ifdef __WINESRC__\n    DWORD_PTR ExitStatus;\n    PPEB PebBaseAddress;\n    DWORD_PTR AffinityMask;\n    DWORD_PTR BasePriority;\n    ULONG_PTR UniqueProcessId;\n    ULONG_PTR InheritedFromUniqueProcessId;\n#else\n    PVOID Reserved1;\n    PPEB PebBaseAddress;\n    PVOID Reserved2[2];\n    ULONG_PTR UniqueProcessId;\n    PVOID Reserved3;\n#endif\n} PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;\n\n#define PROCESS_PRIOCLASS_IDLE          1\n#define PROCESS_PRIOCLASS_NORMAL        2\n#define PROCESS_PRIOCLASS_HIGH          3\n#define PROCESS_PRIOCLASS_REALTIME      4\n#define PROCESS_PRIOCLASS_BELOW_NORMAL  5\n#define PROCESS_PRIOCLASS_ABOVE_NORMAL  6\n\ntypedef struct _PROCESS_PRIORITY_CLASS {\n    BOOLEAN     Foreground;\n    UCHAR       PriorityClass;\n} PROCESS_PRIORITY_CLASS, *PPROCESS_PRIORITY_CLASS;\n\ntypedef struct _RTL_HEAP_DEFINITION {\n    ULONG Length; /* = sizeof(RTL_HEAP_DEFINITION) */\n\n    ULONG Unknown[11];\n} RTL_HEAP_DEFINITION, *PRTL_HEAP_DEFINITION;\n\ntypedef struct _RTL_RWLOCK {\n    RTL_CRITICAL_SECTION rtlCS;\n\n    HANDLE hSharedReleaseSemaphore;\n    UINT   uSharedWaiters;\n\n    HANDLE hExclusiveReleaseSemaphore;\n    UINT   uExclusiveWaiters;\n\n    INT    iNumberActive;\n    HANDLE hOwningThreadId;\n    DWORD  dwTimeoutBoost;\n    PVOID  pDebugInfo;\n} RTL_RWLOCK, *LPRTL_RWLOCK;\n\n/* System Information Class 0x00 */\n\ntypedef struct _SYSTEM_BASIC_INFORMATION {\n#ifdef __WINESRC__\n    DWORD     unknown;\n    ULONG     KeMaximumIncrement;\n    ULONG     PageSize;\n    ULONG     MmNumberOfPhysicalPages;\n    ULONG     MmLowestPhysicalPage;\n    ULONG     MmHighestPhysicalPage;\n    ULONG_PTR AllocationGranularity;\n    PVOID     LowestUserAddress;\n    PVOID     HighestUserAddress;\n    ULONG_PTR ActiveProcessorsAffinityMask;\n    BYTE      NumberOfProcessors;\n#else\n    BYTE Reserved1[24];\n    PVOID Reserved2[4];\n    CCHAR NumberOfProcessors;\n#endif\n} SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;\n\n/* System Information Class 0x01 */\n\ntypedef struct _SYSTEM_CPU_INFORMATION {\n    WORD Architecture;\n    WORD Level;\n    WORD Revision;       /* combination of CPU model and stepping */\n    WORD Reserved;       /* always zero */\n    DWORD FeatureSet;    /* see bit flags below */\n} SYSTEM_CPU_INFORMATION, *PSYSTEM_CPU_INFORMATION;\n\n/* definitions of bits in the Feature set for the x86 processors */\n#define CPU_FEATURE_VME    0x00000005   /* Virtual 86 Mode Extensions */\n#define CPU_FEATURE_TSC    0x00000002   /* Time Stamp Counter available */\n#define CPU_FEATURE_CMOV   0x00000008   /* Conditional Move instruction*/\n#define CPU_FEATURE_PGE    0x00000014   /* Page table Entry Global bit */ \n#define CPU_FEATURE_PSE    0x00000024   /* Page Size Extension */\n#define CPU_FEATURE_MTRR   0x00000040   /* Memory Type Range Registers */\n#define CPU_FEATURE_CX8    0x00000080   /* Compare and eXchange 8 byte instr. */\n#define CPU_FEATURE_MMX    0x00000100   /* Multi Media eXtensions */\n#define CPU_FEATURE_X86    0x00000200   /* seems to be always ON, on the '86 */\n#define CPU_FEATURE_PAT    0x00000400   /* Page Attribute Table */\n#define CPU_FEATURE_FXSR   0x00000800   /* FXSAVE and FXSTORE instructions */\n#define CPU_FEATURE_SEP    0x00001000   /* SYSENTER and SYSEXIT instructions */\n#define CPU_FEATURE_SSE    0x00002000   /* SSE extensions (ext. MMX) */\n#define CPU_FEATURE_3DNOW  0x00004000   /* 3DNOW instructions available */\n#define CPU_FEATURE_SSE2   0x00010000   /* SSE2 extensions (XMMI64) */\n#define CPU_FEATURE_DS     0x00020000   /* Debug Store */\n#define CPU_FEATURE_HTT    0x00040000   /* Hyper Threading Technology */\n\n/* System Information Class 0x02 */\n\n/* Documented in \"Windows NT/2000 Native API Reference\" by Gary Nebbett. */\ntypedef struct _SYSTEM_PERFORMANCE_INFORMATION {\n    LARGE_INTEGER IdleTime;\n    LARGE_INTEGER ReadTransferCount;\n    LARGE_INTEGER WriteTransferCount;\n    LARGE_INTEGER OtherTransferCount;\n    ULONG ReadOperationCount;\n    ULONG WriteOperationCount;\n    ULONG OtherOperationCount;\n    ULONG AvailablePages;\n    ULONG TotalCommittedPages;\n    ULONG TotalCommitLimit;\n    ULONG PeakCommitment;\n    ULONG PageFaults;\n    ULONG WriteCopyFaults;\n    ULONG TransitionFaults;\n    ULONG Reserved1;\n    ULONG DemandZeroFaults;\n    ULONG PagesRead;\n    ULONG PageReadIos;\n    ULONG Reserved2[2];\n    ULONG PagefilePagesWritten;\n    ULONG PagefilePageWriteIos;\n    ULONG MappedFilePagesWritten;\n    ULONG MappedFilePageWriteIos;\n    ULONG PagedPoolUsage;\n    ULONG NonPagedPoolUsage;\n    ULONG PagedPoolAllocs;\n    ULONG PagedPoolFrees;\n    ULONG NonPagedPoolAllocs;\n    ULONG NonPagedPoolFrees;\n    ULONG TotalFreeSystemPtes;\n    ULONG SystemCodePage;\n    ULONG TotalSystemDriverPages;\n    ULONG TotalSystemCodePages;\n    ULONG SmallNonPagedLookasideListAllocateHits;\n    ULONG SmallPagedLookasideListAllocateHits;\n    ULONG Reserved3;\n    ULONG MmSystemCachePage;\n    ULONG PagedPoolPage;\n    ULONG SystemDriverPage;\n    ULONG FastReadNoWait;\n    ULONG FastReadWait;\n    ULONG FastReadResourceMiss;\n    ULONG FastReadNotPossible;\n    ULONG FastMdlReadNoWait;\n    ULONG FastMdlReadWait;\n    ULONG FastMdlReadResourceMiss;\n    ULONG FastMdlReadNotPossible;\n    ULONG MapDataNoWait;\n    ULONG MapDataWait;\n    ULONG MapDataNoWaitMiss;\n    ULONG MapDataWaitMiss;\n    ULONG PinMappedDataCount;\n    ULONG PinReadNoWait;\n    ULONG PinReadWait;\n    ULONG PinReadNoWaitMiss;\n    ULONG PinReadWaitMiss;\n    ULONG CopyReadNoWait;\n    ULONG CopyReadWait;\n    ULONG CopyReadNoWaitMiss;\n    ULONG CopyReadWaitMiss;\n    ULONG MdlReadNoWait;\n    ULONG MdlReadWait;\n    ULONG MdlReadNoWaitMiss;\n    ULONG MdlReadWaitMiss;\n    ULONG ReadAheadIos;\n    ULONG LazyWriteIos;\n    ULONG LazyWritePages;\n    ULONG DataFlushes;\n    ULONG DataPages;\n    ULONG ContextSwitches;\n    ULONG FirstLevelTbFills;\n    ULONG SecondLevelTbFills;\n    ULONG SystemCalls;\n} SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;\n\n/* System Information Class 0x03 */\n\ntypedef struct _SYSTEM_TIMEOFDAY_INFORMATION {\n#ifdef __WINESRC__\n    LARGE_INTEGER liKeBootTime;\n    LARGE_INTEGER liKeSystemTime;\n    LARGE_INTEGER liExpTimeZoneBias;\n    ULONG uCurrentTimeZoneId;\n    DWORD dwUnknown1[5];\n#else\n    BYTE Reserved1[48];\n#endif\n} SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION; /* was SYSTEM_TIME_INFORMATION */\n\n/* System Information Class 0x08 */\n\ntypedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {\n    LARGE_INTEGER IdleTime;\n    LARGE_INTEGER KernelTime;\n    LARGE_INTEGER UserTime;\n    LARGE_INTEGER Reserved1[2];\n    ULONG Reserved2;\n} SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;\n\n/* System Information Class 0x0b */\n\ntypedef struct _SYSTEM_DRIVER_INFORMATION {\n    PVOID pvAddress;\n    DWORD dwUnknown1;\n    DWORD dwUnknown2;\n    DWORD dwEntryIndex;\n    DWORD dwUnknown3;\n    char szName[MAX_PATH + 1];\n} SYSTEM_DRIVER_INFORMATION, *PSYSTEM_DRIVER_INFORMATION;\n\n/* System Information Class 0x10 */\n\ntypedef struct _SYSTEM_HANDLE_ENTRY {\n    ULONG  OwnerPid;\n    BYTE   ObjectType;\n    BYTE   HandleFlags;\n    USHORT HandleValue;\n    PVOID  ObjectPointer;\n    ULONG  AccessMask;\n} SYSTEM_HANDLE_ENTRY, *PSYSTEM_HANDLE_ENTRY;\n\ntypedef struct _SYSTEM_HANDLE_INFORMATION {\n    ULONG               Count;\n    SYSTEM_HANDLE_ENTRY Handle[1];\n} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;\n\n/* System Information Class 0x15 */\n\ntypedef struct _SYSTEM_CACHE_INFORMATION {\n    ULONG CurrentSize;\n    ULONG PeakSize;\n    ULONG PageFaultCount;\n    ULONG MinimumWorkingSet;\n    ULONG MaximumWorkingSet;\n    ULONG unused[4];\n#ifdef _WIN64\n    ULONG unknown64[7];\n#endif\n} SYSTEM_CACHE_INFORMATION, *PSYSTEM_CACHE_INFORMATION;\n\n/* System Information Class 0x17 */\n\ntypedef struct _SYSTEM_INTERRUPT_INFORMATION {\n    BYTE Reserved1[24];\n} SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION;\n\ntypedef struct _SYSTEM_CONFIGURATION_INFO {\n    union {\n        ULONG\tOemId;\n        struct {\n\t    WORD ProcessorArchitecture;\n\t    WORD Reserved;\n\t} tag1;\n    } tag2;\n    ULONG PageSize;\n    PVOID MinimumApplicationAddress;\n    PVOID MaximumApplicationAddress;\n    ULONG ActiveProcessorMask;\n    ULONG NumberOfProcessors;\n    ULONG ProcessorType;\n    ULONG AllocationGranularity;\n    WORD  ProcessorLevel;\n    WORD  ProcessorRevision;\n} SYSTEM_CONFIGURATION_INFO, *PSYSTEM_CONFIGURATION_INFO;\n\ntypedef struct _SYSTEM_EXCEPTION_INFORMATION {\n    BYTE Reserved1[16];\n} SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION;\n\ntypedef struct _SYSTEM_LOOKASIDE_INFORMATION {\n    BYTE Reserved1[32];\n} SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION;\n\ntypedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION {\n\tBOOLEAN  DebuggerEnabled;\n\tBOOLEAN  DebuggerNotPresent;\n} SYSTEM_KERNEL_DEBUGGER_INFORMATION, *PSYSTEM_KERNEL_DEBUGGER_INFORMATION;\n\n/* System Information Class 0x05 */\n\ntypedef struct _VM_COUNTERS_ {\n    SIZE_T PeakVirtualSize;\n    SIZE_T VirtualSize;\n    ULONG  PageFaultCount;\n    SIZE_T PeakWorkingSetSize;\n    SIZE_T WorkingSetSize;\n    SIZE_T QuotaPeakPagedPoolUsage;\n    SIZE_T QuotaPagedPoolUsage;\n    SIZE_T QuotaPeakNonPagedPoolUsage;\n    SIZE_T QuotaNonPagedPoolUsage;\n    SIZE_T PagefileUsage;\n    SIZE_T PeakPagefileUsage;\n    SIZE_T PrivatePageCount;\n} VM_COUNTERS, *PVM_COUNTERS;\n\ntypedef struct _SYSTEM_PROCESS_INFORMATION {\n#ifdef __WINESRC__                  /* win32/win64 */\n    ULONG NextEntryOffset;             /* 00/00 */\n    DWORD dwThreadCount;               /* 04/04 */\n    DWORD dwUnknown1[6];               /* 08/08 */\n    LARGE_INTEGER CreationTime;        /* 20/20 */\n    LARGE_INTEGER UserTime;            /* 28/28 */\n    LARGE_INTEGER KernelTime;          /* 30/30 */\n    UNICODE_STRING ProcessName;        /* 38/38 */\n    DWORD dwBasePriority;              /* 40/48 */\n    HANDLE UniqueProcessId;            /* 44/50 */\n    HANDLE ParentProcessId;            /* 48/58 */\n    ULONG HandleCount;                 /* 4c/60 */\n    ULONG SessionId;                   /* 50/64 */\n    DWORD dwUnknown4;                  /* 54/68 */\n    VM_COUNTERS vmCounters;            /* 58/70 */\n    IO_COUNTERS ioCounters;            /* 88/d0 */\n    SYSTEM_THREAD_INFORMATION ti[1];   /* b8/100 */\n#else\n    ULONG NextEntryOffset;             /* 00/00 */\n    BYTE Reserved1[52];                /* 04/04 */\n    PVOID Reserved2[3];                /* 38/38 */\n    HANDLE UniqueProcessId;            /* 44/50 */\n    PVOID Reserved3;                   /* 48/58 */\n    ULONG HandleCount;                 /* 4c/60 */\n    BYTE Reserved4[4];                 /* 50/64 */\n    PVOID Reserved5[11];               /* 54/68 */\n    SIZE_T PeakPagefileUsage;          /* 80/c0 */\n    SIZE_T PrivatePageCount;           /* 84/c8 */\n    LARGE_INTEGER Reserved6[6];        /* 88/d0 */\n#endif\n} SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;\n\ntypedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {\n    ULONG RegistryQuotaAllowed;\n    ULONG RegistryQuotaUsed;\n    PVOID Reserved1;\n} SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;\n\ntypedef struct _SYSTEM_TIME_ADJUSTMENT {\n    ULONG   TimeAdjustment;\n    BOOLEAN TimeAdjustmentDisabled;\n} SYSTEM_TIME_ADJUSTMENT, *PSYSTEM_TIME_ADJUSTMENT;\n\ntypedef enum _SYSTEM_FIRMWARE_TABLE_ACTION\n{\n    SystemFirmwareTable_Enumerate = 0,\n    SystemFirmwareTable_Get = 1\n} SYSTEM_FIRMWARE_TABLE_ACTION, *PSYSTEM_FIRMWARE_TABLE_ACTION;\n\n/* System Information Class 0x4C */\n\ntypedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION\n{\n    ULONG ProviderSignature;\n    SYSTEM_FIRMWARE_TABLE_ACTION Action;\n    ULONG TableID;\n    ULONG TableBufferLength;\n    UCHAR TableBuffer[1];\n} SYSTEM_FIRMWARE_TABLE_INFORMATION, *PSYSTEM_FIRMWARE_TABLE_INFORMATION;\n\ntypedef struct _TIME_FIELDS\n{   CSHORT Year;\n    CSHORT Month;\n    CSHORT Day;\n    CSHORT Hour;\n    CSHORT Minute;\n    CSHORT Second;\n    CSHORT Milliseconds;\n    CSHORT Weekday;\n} TIME_FIELDS, *PTIME_FIELDS;\n\ntypedef struct _WINSTATIONINFORMATIONW {\n  BYTE Reserved2[70];\n  ULONG LogonId;\n  BYTE Reserved3[1140];\n} WINSTATIONINFORMATIONW, *PWINSTATIONINFORMATIONW;\n\ntypedef BOOLEAN (WINAPI * PWINSTATIONQUERYINFORMATIONW)(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG);\n\ntypedef struct _LDR_RESOURCE_INFO\n{\n    ULONG_PTR Type;\n    ULONG_PTR Name;\n    ULONG Language;\n} LDR_RESOURCE_INFO, *PLDR_RESOURCE_INFO;\n\n\n/* debug buffer definitions */\n\ntypedef struct _DEBUG_BUFFER {\n  HANDLE SectionHandle;\n  PVOID  SectionBase;\n  PVOID  RemoteSectionBase;\n  ULONG  SectionBaseDelta;\n  HANDLE EventPairHandle;\n  ULONG  Unknown[2];\n  HANDLE RemoteThreadHandle;\n  ULONG  InfoClassMask;\n  ULONG  SizeOfInfo;\n  ULONG  AllocatedSize;\n  ULONG  SectionSize;\n  PVOID  ModuleInformation;\n  PVOID  BackTraceInformation;\n  PVOID  HeapInformation;\n  PVOID  LockInformation;\n  PVOID  Reserved[8];\n} DEBUG_BUFFER, *PDEBUG_BUFFER;\n\n#define PDI_MODULES                       0x01\n#define PDI_BACKTRACE                     0x02\n#define PDI_HEAPS                         0x04\n#define PDI_HEAP_TAGS                     0x08\n#define PDI_HEAP_BLOCKS                   0x10\n#define PDI_LOCKS                         0x20\n\ntypedef struct _DEBUG_MODULE_INFORMATION {\n  ULONG  Reserved[2];\n  ULONG  Base;\n  ULONG  Size;\n  ULONG  Flags;\n  USHORT Index;\n  USHORT Unknown;\n  USHORT LoadCount;\n  USHORT ModuleNameOffset;\n  CHAR   ImageName[256];\n} DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;\n\ntypedef struct _DEBUG_HEAP_INFORMATION {\n  ULONG  Base;\n  ULONG  Flags;\n  USHORT Granularity;\n  USHORT Unknown;\n  ULONG  Allocated;\n  ULONG  Committed;\n  ULONG  TagCount;\n  ULONG  BlockCount;\n  ULONG  Reserved[7];\n  PVOID  Tags;\n  PVOID  Blocks;\n} DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION;\n\ntypedef struct _DEBUG_LOCK_INFORMATION {\n  PVOID  Address;\n  USHORT Type;\n  USHORT CreatorBackTraceIndex;\n  ULONG  OwnerThreadId;\n  ULONG  ActiveCount;\n  ULONG  ContentionCount;\n  ULONG  EntryCount;\n  ULONG  RecursionCount;\n  ULONG  NumberOfSharedWaiters;\n  ULONG  NumberOfExclusiveWaiters;\n} DEBUG_LOCK_INFORMATION, *PDEBUG_LOCK_INFORMATION;\n\ntypedef struct _PORT_MESSAGE_HEADER {\n  USHORT DataSize;\n  USHORT MessageSize;\n  USHORT MessageType;\n  USHORT VirtualRangesOffset;\n  CLIENT_ID ClientId;\n  ULONG MessageId;\n  ULONG SectionSize;\n} PORT_MESSAGE_HEADER, *PPORT_MESSAGE_HEADER, PORT_MESSAGE, *PPORT_MESSAGE;\n\ntypedef unsigned short RTL_ATOM, *PRTL_ATOM;\n\n/* Wine doesn't implement atom table as NT does:\n * - in NT, atom tables are user space tables, which ntdll directly accesses\n * - on Wine, (even local) atom tables are wineserver objects, hence a HANDLE\n */\ntypedef struct atom_table *RTL_ATOM_TABLE, **PRTL_ATOM_TABLE;\n\ntypedef enum _ATOM_INFORMATION_CLASS {\n   AtomBasicInformation         = 0,\n   AtomTableInformation         = 1,\n} ATOM_INFORMATION_CLASS;\n\ntypedef struct _ATOM_BASIC_INFORMATION {\n   USHORT       ReferenceCount;\n   USHORT       Pinned;\n   USHORT       NameLength;\n   WCHAR        Name[1];\n} ATOM_BASIC_INFORMATION, *PATOM_BASIC_INFORMATION;\n\n/* FIXME: names probably not correct */\ntypedef struct _RTL_HANDLE\n{\n    struct _RTL_HANDLE * Next;\n} RTL_HANDLE;\n\n/* FIXME: names probably not correct */\ntypedef struct _RTL_HANDLE_TABLE\n{\n    ULONG MaxHandleCount;  /* 0x00 */\n    ULONG HandleSize;      /* 0x04 */\n    ULONG Unused[2];       /* 0x08-0x0c */\n    PVOID NextFree;        /* 0x10 */\n    PVOID FirstHandle;     /* 0x14 */\n    PVOID ReservedMemory;  /* 0x18 */\n    PVOID MaxHandle;       /* 0x1c */\n} RTL_HANDLE_TABLE;\n\n/***********************************************************************\n * Defines\n */\n\n/* flags for NtCreateFile and NtOpenFile */\n#define FILE_DIRECTORY_FILE             0x00000001\n#define FILE_WRITE_THROUGH              0x00000002\n#define FILE_SEQUENTIAL_ONLY            0x00000004\n#define FILE_NO_INTERMEDIATE_BUFFERING  0x00000008\n#define FILE_SYNCHRONOUS_IO_ALERT       0x00000010\n#define FILE_SYNCHRONOUS_IO_NONALERT    0x00000020\n#define FILE_NON_DIRECTORY_FILE         0x00000040\n#define FILE_CREATE_TREE_CONNECTION     0x00000080\n#define FILE_COMPLETE_IF_OPLOCKED       0x00000100\n#define FILE_NO_EA_KNOWLEDGE            0x00000200\n#define FILE_OPEN_FOR_RECOVERY          0x00000400\n#define FILE_RANDOM_ACCESS              0x00000800\n#define FILE_DELETE_ON_CLOSE            0x00001000\n#define FILE_OPEN_BY_FILE_ID            0x00002000\n#define FILE_OPEN_FOR_BACKUP_INTENT     0x00004000\n#define FILE_NO_COMPRESSION             0x00008000\n#define FILE_RESERVE_OPFILTER           0x00100000\n#define FILE_TRANSACTED_MODE            0x00200000\n#define FILE_OPEN_OFFLINE_FILE          0x00400000\n#define FILE_OPEN_FOR_FREE_SPACE_QUERY  0x00800000\n\n#define FILE_ATTRIBUTE_VALID_FLAGS      0x00007fb7\n#define FILE_ATTRIBUTE_VALID_SET_FLAGS  0x000031a7\n\n/* status for NtCreateFile or NtOpenFile */\n#define FILE_SUPERSEDED                 0\n#define FILE_OPENED                     1\n#define FILE_CREATED                    2\n#define FILE_OVERWRITTEN                3\n#define FILE_EXISTS                     4\n#define FILE_DOES_NOT_EXIST             5\n\n/* disposition for NtCreateFile */\n#define FILE_SUPERSEDE                  0\n#define FILE_OPEN                       1\n#define FILE_CREATE                     2\n#define FILE_OPEN_IF                    3\n#define FILE_OVERWRITE                  4\n#define FILE_OVERWRITE_IF               5\n#define FILE_MAXIMUM_DISPOSITION        5\n\n/* Characteristics of a File System */\n#define FILE_REMOVABLE_MEDIA                      0x00000001\n#define FILE_READ_ONLY_DEVICE                     0x00000002\n#define FILE_FLOPPY_DISKETTE                      0x00000004\n#define FILE_WRITE_ONE_MEDIA                      0x00000008\n#define FILE_REMOTE_DEVICE                        0x00000010\n#define FILE_DEVICE_IS_MOUNTED                    0x00000020\n#define FILE_VIRTUAL_VOLUME                       0x00000040\n#define FILE_AUTOGENERATED_DEVICE_NAME            0x00000080\n#define FILE_DEVICE_SECURE_OPEN                   0x00000100\n#define FILE_CHARACTERISTIC_PNP_DEVICE            0x00000800\n#define FILE_CHARACTERISTIC_TS_DEVICE             0x00001000\n#define FILE_CHARACTERISTIC_WEBDAV_DEVICE         0x00002000\n#define FILE_CHARACTERISTIC_CSV                   0x00010000\n#define FILE_DEVICE_ALLOW_APPCONTAINER_TRAVERSAL  0x00020000\n#define FILE_PORTABLE_DEVICE                      0x00040000\n\n/* options for NtCreateNamedPipeFile */\n#define FILE_PIPE_INBOUND               0x00000000\n#define FILE_PIPE_OUTBOUND              0x00000001\n#define FILE_PIPE_FULL_DUPLEX           0x00000002\n\n/* options for pipe's type */\n#define FILE_PIPE_TYPE_MESSAGE          0x00000001\n#define FILE_PIPE_TYPE_BYTE             0x00000000\n/* options for pipe's message mode */\n#define FILE_PIPE_MESSAGE_MODE          0x00000001\n#define FILE_PIPE_BYTE_STREAM_MODE      0x00000000\n/* options for pipe's blocking mode */\n#define FILE_PIPE_COMPLETE_OPERATION    0x00000001\n#define FILE_PIPE_QUEUE_OPERATION       0x00000000\n/* and client / server end */\n#define FILE_PIPE_SERVER_END            0x00000001\n#define FILE_PIPE_CLIENT_END            0x00000000\n\n#define INTERNAL_TS_ACTIVE_CONSOLE_ID ( *((volatile ULONG*)(0x7ffe02d8)) )\n\n#define LOGONID_CURRENT    ((ULONG)-1)\n\n#define OBJ_INHERIT          0x00000002\n#define OBJ_PERMANENT        0x00000010\n#define OBJ_EXCLUSIVE        0x00000020\n#define OBJ_CASE_INSENSITIVE 0x00000040\n#define OBJ_OPENIF           0x00000080\n#define OBJ_OPENLINK         0x00000100\n#define OBJ_KERNEL_HANDLE    0x00000200\n#define OBJ_VALID_ATTRIBUTES 0x000003F2\n\n#define SERVERNAME_CURRENT ((HANDLE)NULL)\n\ntypedef void (CALLBACK *PNTAPCFUNC)(ULONG_PTR,ULONG_PTR,ULONG_PTR); /* FIXME: not the right name */\ntypedef void (CALLBACK *PRTL_THREAD_START_ROUTINE)(LPVOID); /* FIXME: not the right name */\ntypedef DWORD (CALLBACK *PRTL_WORK_ITEM_ROUTINE)(LPVOID); /* FIXME: not the right name */\ntypedef void (NTAPI *RTL_WAITORTIMERCALLBACKFUNC)(PVOID,BOOLEAN); /* FIXME: not the right name */\n\n\n/* DbgPrintEx default levels */\n#define DPFLTR_ERROR_LEVEL     0\n#define DPFLTR_WARNING_LEVEL   1\n#define DPFLTR_TRACE_LEVEL     2\n#define DPFLTR_INFO_LEVEL      3\n#define DPFLTR_MASK    0x8000000\n\n/* Well-known LUID values */\n#define SE_MIN_WELL_KNOWN_PRIVILEGE       2\n#define SE_CREATE_TOKEN_PRIVILEGE         2\n#define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE   3\n#define SE_LOCK_MEMORY_PRIVILEGE          4\n#define SE_INCREASE_QUOTA_PRIVILEGE       5\n#define SE_UNSOLICITED_INPUT_PRIVILEGE    6 /* obsolete */\n#define SE_MACHINE_ACCOUNT_PRIVILEGE      6\n#define SE_TCB_PRIVILEGE                  7\n#define SE_SECURITY_PRIVILEGE             8\n#define SE_TAKE_OWNERSHIP_PRIVILEGE       9\n#define SE_LOAD_DRIVER_PRIVILEGE         10\n#define SE_SYSTEM_PROFILE_PRIVILEGE      11\n#define SE_SYSTEMTIME_PRIVILEGE          12\n#define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13\n#define SE_INC_BASE_PRIORITY_PRIVILEGE   14\n#define SE_CREATE_PAGEFILE_PRIVILEGE     15\n#define SE_CREATE_PERMANENT_PRIVILEGE    16\n#define SE_BACKUP_PRIVILEGE              17\n#define SE_RESTORE_PRIVILEGE             18\n#define SE_SHUTDOWN_PRIVILEGE            19\n#define SE_DEBUG_PRIVILEGE               20\n#define SE_AUDIT_PRIVILEGE               21\n#define SE_SYSTEM_ENVIRONMENT_PRIVILEGE  22\n#define SE_CHANGE_NOTIFY_PRIVILEGE       23\n#define SE_REMOTE_SHUTDOWN_PRIVILEGE     24\n#define SE_UNDOCK_PRIVILEGE              25\n#define SE_SYNC_AGENT_PRIVILEGE          26\n#define SE_ENABLE_DELEGATION_PRIVILEGE   27\n#define SE_MANAGE_VOLUME_PRIVILEGE       28\n#define SE_IMPERSONATE_PRIVILEGE         29\n#define SE_CREATE_GLOBAL_PRIVILEGE       30\n#define SE_MAX_WELL_KNOWN_PRIVILEGE      SE_CREATE_GLOBAL_PRIVILEGE\n\n/* NtGlobalFlag bits */\n#define FLG_STOP_ON_EXCEPTION            0x00000001\n#define FLG_SHOW_LDR_SNAPS               0x00000002\n#define FLG_DEBUG_INITIAL_COMMAND        0x00000004\n#define FLG_STOP_ON_HUNG_GUI             0x00000008\n#define FLG_HEAP_ENABLE_TAIL_CHECK       0x00000010\n#define FLG_HEAP_ENABLE_FREE_CHECK       0x00000020\n#define FLG_HEAP_VALIDATE_PARAMETERS     0x00000040\n#define FLG_HEAP_VALIDATE_ALL            0x00000080\n#define FLG_APPLICATION_VERIFIER         0x00000100\n#define FLG_POOL_ENABLE_TAGGING          0x00000400\n#define FLG_HEAP_ENABLE_TAGGING          0x00000800\n#define FLG_USER_STACK_TRACE_DB          0x00001000\n#define FLG_KERNEL_STACK_TRACE_DB        0x00002000\n#define FLG_MAINTAIN_OBJECT_TYPELIST     0x00004000\n#define FLG_HEAP_ENABLE_TAG_BY_DLL       0x00008000\n#define FLG_DISABLE_STACK_EXTENSION      0x00010000\n#define FLG_ENABLE_CSRDEBUG              0x00020000\n#define FLG_ENABLE_KDEBUG_SYMBOL_LOAD    0x00040000\n#define FLG_DISABLE_PAGE_KERNEL_STACKS   0x00080000\n#define FLG_ENABLE_SYSTEM_CRIT_BREAKS    0x00100000\n#define FLG_HEAP_DISABLE_COALESCING      0x00200000\n#define FLG_ENABLE_CLOSE_EXCEPTIONS      0x00400000\n#define FLG_ENABLE_EXCEPTION_LOGGING     0x00800000\n#define FLG_ENABLE_HANDLE_TYPE_TAGGING   0x01000000\n#define FLG_HEAP_PAGE_ALLOCS             0x02000000\n#define FLG_DEBUG_INITIAL_COMMAND_EX     0x04000000\n#define FLG_DISABLE_DBGPRINT             0x08000000\n#define FLG_CRITSEC_EVENT_CREATION       0x10000000\n#define FLG_LDR_TOP_DOWN                 0x20000000\n#define FLG_ENABLE_HANDLE_EXCEPTIONS     0x40000000\n#define FLG_DISABLE_PROTDLLS             0x80000000\n\n/* Rtl*Registry* functions structs and defines */\n#define RTL_REGISTRY_ABSOLUTE             0\n#define RTL_REGISTRY_SERVICES             1\n#define RTL_REGISTRY_CONTROL              2\n#define RTL_REGISTRY_WINDOWS_NT           3\n#define RTL_REGISTRY_DEVICEMAP            4\n#define RTL_REGISTRY_USER                 5\n\n#define RTL_REGISTRY_HANDLE       0x40000000\n#define RTL_REGISTRY_OPTIONAL     0x80000000\n\n#define RTL_QUERY_REGISTRY_SUBKEY         0x00000001\n#define RTL_QUERY_REGISTRY_TOPKEY         0x00000002\n#define RTL_QUERY_REGISTRY_REQUIRED       0x00000004\n#define RTL_QUERY_REGISTRY_NOVALUE        0x00000008\n#define RTL_QUERY_REGISTRY_NOEXPAND       0x00000010\n#define RTL_QUERY_REGISTRY_DIRECT         0x00000020\n#define RTL_QUERY_REGISTRY_DELETE         0x00000040\n\ntypedef NTSTATUS (WINAPI *PRTL_QUERY_REGISTRY_ROUTINE)( PCWSTR ValueName,\n                                                        ULONG  ValueType,\n                                                        PVOID  ValueData,\n                                                        ULONG  ValueLength,\n                                                        PVOID  Context,\n                                                        PVOID  EntryContext);\n\ntypedef struct _RTL_QUERY_REGISTRY_TABLE\n{\n  PRTL_QUERY_REGISTRY_ROUTINE  QueryRoutine;\n  ULONG  Flags;\n  PWSTR  Name;\n  PVOID  EntryContext;\n  ULONG  DefaultType;\n  PVOID  DefaultData;\n  ULONG  DefaultLength;\n} RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;\n\ntypedef struct _KEY_MULTIPLE_VALUE_INFORMATION\n{\n  PUNICODE_STRING ValueName;\n  ULONG DataLength;\n  ULONG DataOffset;\n  ULONG Type;\n} KEY_MULTIPLE_VALUE_INFORMATION, *PKEY_MULTIPLE_VALUE_INFORMATION;\n\ntypedef VOID (CALLBACK *PRTL_OVERLAPPED_COMPLETION_ROUTINE)(DWORD,DWORD,LPVOID);\n\ntypedef VOID (CALLBACK *PTIMER_APC_ROUTINE) ( PVOID, ULONG, LONG );\n\ntypedef enum _EVENT_INFORMATION_CLASS {\n  EventBasicInformation\n} EVENT_INFORMATION_CLASS, *PEVENT_INFORMATION_CLASS;\n\ntypedef struct _EVENT_BASIC_INFORMATION {\n  EVENT_TYPE EventType;\n  LONG EventState;\n} EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION;\n\ntypedef enum _SEMAPHORE_INFORMATION_CLASS {\n  SemaphoreBasicInformation\n} SEMAPHORE_INFORMATION_CLASS, *PSEMAPHORE_INFORMATION_CLASS;\n\ntypedef struct _SEMAPHORE_BASIC_INFORMATION {\n  ULONG CurrentCount;\n  ULONG MaximumCount;\n} SEMAPHORE_BASIC_INFORMATION, *PSEMAPHORE_BASIC_INFORMATION;\n\ntypedef enum _SECTION_INFORMATION_CLASS\n{\n  SectionBasicInformation,\n  SectionImageInformation,\n} SECTION_INFORMATION_CLASS;\n\ntypedef struct _SECTION_BASIC_INFORMATION {\n  PVOID BaseAddress;\n  ULONG Attributes;\n  LARGE_INTEGER Size;\n} SECTION_BASIC_INFORMATION, *PSECTION_BASIC_INFORMATION;\n\ntypedef struct _SECTION_IMAGE_INFORMATION {\n  PVOID TransferAddress;\n  ULONG ZeroBits;\n  SIZE_T MaximumStackSize;\n  SIZE_T CommittedStackSize;\n  ULONG SubSystemType;\n  WORD SubsystemVersionLow;\n  WORD SubsystemVersionHigh;\n  ULONG GpValue;\n  USHORT ImageCharacteristics;\n  USHORT DllCharacteristics;\n  USHORT Machine;\n  BOOLEAN ImageContainsCode;\n  union\n  {\n      UCHAR ImageFlags;\n      struct\n      {\n          UCHAR ComPlusNativeReady        : 1;\n          UCHAR ComPlusILOnly             : 1;\n          UCHAR ImageDynamicallyRelocated : 1;\n          UCHAR ImageMappedFlat           : 1;\n          UCHAR BaseBelow4gb              : 1;\n          UCHAR Reserved                  : 3;\n      } DUMMYSTRUCTNAME;\n  } DUMMYUNIONNAME;\n  ULONG LoaderFlags;\n  ULONG ImageFileSize;\n  ULONG CheckSum;\n} SECTION_IMAGE_INFORMATION, *PSECTION_IMAGE_INFORMATION;\n\ntypedef struct _LPC_SECTION_WRITE {\n  ULONG Length;\n  HANDLE SectionHandle;\n  ULONG SectionOffset;\n  ULONG ViewSize;\n  PVOID ViewBase;\n  PVOID TargetViewBase;\n} LPC_SECTION_WRITE, *PLPC_SECTION_WRITE;\n\ntypedef struct _LPC_SECTION_READ {\n  ULONG Length;\n  ULONG ViewSize;\n  PVOID ViewBase;\n} LPC_SECTION_READ, *PLPC_SECTION_READ;\n\ntypedef struct _LPC_MESSAGE {\n  USHORT DataSize;\n  USHORT MessageSize;\n  USHORT MessageType;\n  USHORT VirtualRangesOffset;\n  CLIENT_ID ClientId;\n  ULONG_PTR MessageId;\n  ULONG_PTR SectionSize;\n  UCHAR Data[ANYSIZE_ARRAY];\n} LPC_MESSAGE, *PLPC_MESSAGE;\n\ntypedef struct _RTL_USER_PROCESS_INFORMATION\n{\n  ULONG Length;\n  HANDLE Process;\n  HANDLE Thread;\n  CLIENT_ID ClientId;\n  SECTION_IMAGE_INFORMATION ImageInformation;\n} RTL_USER_PROCESS_INFORMATION, *PRTL_USER_PROCESS_INFORMATION;\n\ntypedef enum _SHUTDOWN_ACTION {\n  ShutdownNoReboot,\n  ShutdownReboot,\n  ShutdownPowerOff\n} SHUTDOWN_ACTION, *PSHUTDOWN_ACTION;\n\ntypedef enum _KPROFILE_SOURCE {\n  ProfileTime,\n  ProfileAlignmentFixup,\n  ProfileTotalIssues,\n  ProfilePipelineDry,\n  ProfileLoadInstructions,\n  ProfilePipelineFrozen,\n  ProfileBranchInstructions,\n  ProfileTotalNonissues,\n  ProfileDcacheMisses,\n  ProfileIcacheMisses,\n  ProfileCacheMisses,\n  ProfileBranchMispredictions,\n  ProfileStoreInstructions,\n  ProfileFpInstructions,\n  ProfileIntegerInstructions,\n  Profile2Issue,\n  Profile3Issue,\n  Profile4Issue,\n  ProfileSpecialInstructions,\n  ProfileTotalCycles,\n  ProfileIcacheIssues,\n  ProfileDcacheAccesses,\n  ProfileMemoryBarrierCycles,\n  ProfileLoadLinkedIssues,\n  ProfileMaximum\n} KPROFILE_SOURCE, *PKPROFILE_SOURCE;\n\ntypedef struct _DIRECTORY_BASIC_INFORMATION {\n  UNICODE_STRING ObjectName;\n  UNICODE_STRING ObjectTypeName;\n} DIRECTORY_BASIC_INFORMATION, *PDIRECTORY_BASIC_INFORMATION;\n\ntypedef struct _INITIAL_TEB {\n  PVOID StackBase;\n  PVOID StackLimit;\n  PVOID StackCommit;\n  PVOID StackCommitMax;\n  PVOID StackReserved;\n} INITIAL_TEB, *PINITIAL_TEB;\n\ntypedef enum _PORT_INFORMATION_CLASS {\n  PortNoInformation\n} PORT_INFORMATION_CLASS, *PPORT_INFORMATION_CLASS;\n\ntypedef enum _IO_COMPLETION_INFORMATION_CLASS {\n  IoCompletionBasicInformation\n} IO_COMPLETION_INFORMATION_CLASS, *PIO_COMPLETION_INFORMATION_CLASS;\n\ntypedef struct _FILE_COMPLETION_INFORMATION {\n    HANDLE CompletionPort;\n    ULONG_PTR CompletionKey;\n} FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;\n\n#define IO_COMPLETION_QUERY_STATE  0x0001\n#define IO_COMPLETION_MODIFY_STATE 0x0002\n#define IO_COMPLETION_ALL_ACCESS   (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)\n\ntypedef enum _HARDERROR_RESPONSE_OPTION {\n  OptionAbortRetryIgnore,\n  OptionOk,\n  OptionOkCancel,\n  OptionRetryCancel,\n  OptionYesNo,\n  OptionYesNoCancel,\n  OptionShutdownSystem\n} HARDERROR_RESPONSE_OPTION, *PHARDERROR_RESPONSE_OPTION;\n\ntypedef enum _HARDERROR_RESPONSE {\n  ResponseReturnToCaller,\n  ResponseNotHandled,\n  ResponseAbort,\n  ResponseCancel,\n  ResponseIgnore,\n  ResponseNo,\n  ResponseOk,\n  ResponseRetry,\n  ResponseYes\n} HARDERROR_RESPONSE, *PHARDERROR_RESPONSE;\n\ntypedef enum _SYSDBG_COMMAND {\n  SysDbgQueryModuleInformation,\n  SysDbgQueryTraceInformation,\n  SysDbgSetTracepoint,\n  SysDbgSetSpecialCall,\n  SysDbgClearSpecialCalls,\n  SysDbgQuerySpecialCalls,\n  SysDbgBreakPoint,\n  SysDbgQueryVersion,\n  SysDbgReadVirtual,\n  SysDbgWriteVirtual,\n  SysDbgReadPhysical,\n  SysDbgWritePhysical,\n  SysDbgReadControlSpace,\n  SysDbgWriteControlSpace,\n  SysDbgReadIoSpace,\n  SysDbgWriteIoSpace,\n  SysDbgReadMsr,\n  SysDbgWriteMsr,\n  SysDbgReadBusData,\n  SysDbgWriteBusData\n} SYSDBG_COMMAND, *PSYSDBG_COMMAND;\n\n\n/*************************************************************************\n * Loader structures\n *\n * Those are not part of standard Winternl.h\n */\ntypedef struct _LDR_MODULE\n{\n    LIST_ENTRY          InLoadOrderModuleList;\n    LIST_ENTRY          InMemoryOrderModuleList;\n    LIST_ENTRY          InInitializationOrderModuleList;\n    void*               BaseAddress;\n    void*               EntryPoint;\n    ULONG               SizeOfImage;\n    UNICODE_STRING      FullDllName;\n    UNICODE_STRING      BaseDllName;\n    ULONG               Flags;\n    SHORT               LoadCount;\n    SHORT               TlsIndex;\n    HANDLE              SectionHandle;\n    ULONG               CheckSum;\n    ULONG               TimeDateStamp;\n    HANDLE              ActivationContext;\n} LDR_MODULE, *PLDR_MODULE;\n\ntypedef struct _LDR_DLL_LOADED_NOTIFICATION_DATA\n{\n    ULONG Flags;\n    const UNICODE_STRING *FullDllName;\n    const UNICODE_STRING *BaseDllName;\n    void *DllBase;\n    ULONG SizeOfImage;\n} LDR_DLL_LOADED_NOTIFICATION_DATA, *PLDR_DLL_LOADED_NOTIFICATION_DATA;\n\ntypedef struct _LDR_DLL_UNLOADED_NOTIFICATION_DATA\n{\n    ULONG Flags;\n    const UNICODE_STRING *FullDllName;\n    const UNICODE_STRING *BaseDllName;\n    void *DllBase;\n    ULONG SizeOfImage;\n} LDR_DLL_UNLOADED_NOTIFICATION_DATA, *PLDR_DLL_UNLOADED_NOTIFICATION_DATA;\n\ntypedef union _LDR_DLL_NOTIFICATION_DATA\n{\n    LDR_DLL_LOADED_NOTIFICATION_DATA Loaded;\n    LDR_DLL_UNLOADED_NOTIFICATION_DATA Unloaded;\n} LDR_DLL_NOTIFICATION_DATA, *PLDR_DLL_NOTIFICATION_DATA;\n\ntypedef void (CALLBACK *PLDR_DLL_NOTIFICATION_FUNCTION)(ULONG, LDR_DLL_NOTIFICATION_DATA*, void*);\n\n/* those defines are (some of the) regular LDR_MODULE.Flags values */\n#define LDR_IMAGE_IS_DLL                0x00000004\n#define LDR_LOAD_IN_PROGRESS            0x00001000\n#define LDR_UNLOAD_IN_PROGRESS          0x00002000\n#define LDR_NO_DLL_CALLS                0x00040000\n#define LDR_PROCESS_ATTACHED            0x00080000\n#define LDR_COR_IMAGE                   0x00400000\n#define LDR_COR_ILONLY                  0x01000000\n\n/* these ones is Wine specific */\n#define LDR_DONT_RESOLVE_REFS           0x40000000\n#define LDR_WINE_INTERNAL               0x80000000\n\n/* flag for LdrAddRefDll */\n#define LDR_ADDREF_DLL_PIN              0x00000001\n\n#define LDR_DLL_NOTIFICATION_REASON_LOADED   1\n#define LDR_DLL_NOTIFICATION_REASON_UNLOADED 2\n\n/* FIXME: to be checked */\n#define MAXIMUM_FILENAME_LENGTH 256\n\ntypedef struct _SYSTEM_MODULE\n{\n    PVOID               Reserved1;                      /* 00/00 */\n    PVOID               Reserved2;                      /* 04/08 */\n    PVOID               ImageBaseAddress;               /* 08/10 */\n    ULONG               ImageSize;                      /* 0c/18 */\n    ULONG               Flags;                          /* 10/1c */\n    WORD                Id;                             /* 14/20 */\n    WORD                Rank;                           /* 16/22 */\n    WORD                Unknown;                        /* 18/24 */\n    WORD                NameOffset;                     /* 1a/26 */\n    BYTE                Name[MAXIMUM_FILENAME_LENGTH];  /* 1c/28 */\n} SYSTEM_MODULE, *PSYSTEM_MODULE;\n\ntypedef struct _SYSTEM_MODULE_INFORMATION\n{\n    ULONG               ModulesCount;\n    SYSTEM_MODULE       Modules[1]; /* FIXME: should be Modules[0] */\n} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;\n\n#define THREAD_CREATE_FLAGS_CREATE_SUSPENDED        0x00000001\n#define THREAD_CREATE_FLAGS_SKIP_THREAD_ATTACH      0x00000002\n#define THREAD_CREATE_FLAGS_HIDE_FROM_DEBUGGER      0x00000004\n#define THREAD_CREATE_FLAGS_HAS_SECURITY_DESCRIPTOR 0x00000010\n#define THREAD_CREATE_FLAGS_ACCESS_CHECK_IN_TARGET  0x00000020\n#define THREAD_CREATE_FLAGS_INITIAL_THREAD          0x00000080\n\n/***********************************************************************\n * Function declarations\n */\n\n#if defined(__i386__) && defined(__GNUC__)\nstatic inline void WINAPI DbgBreakPoint(void) { __asm__ __volatile__(\"int3\"); }\nstatic inline void WINAPI DbgUserBreakPoint(void) { __asm__ __volatile__(\"int3\"); }\n#else  /* __i386__ && __GNUC__ */\nNTSYSAPI void WINAPI DbgBreakPoint(void);\nNTSYSAPI void WINAPI DbgUserBreakPoint(void);\n#endif  /* __i386__ && __GNUC__ */\nNTSYSAPI NTSTATUS WINAPIV DbgPrint(LPCSTR fmt, ...);\nNTSYSAPI NTSTATUS WINAPIV DbgPrintEx(ULONG iComponentId, ULONG Level, LPCSTR fmt, ...);\nNTSYSAPI NTSTATUS  WINAPI LdrAccessResource(HMODULE,const IMAGE_RESOURCE_DATA_ENTRY*,void**,PULONG);\nNTSYSAPI NTSTATUS  WINAPI LdrAddRefDll(ULONG,HMODULE);\nNTSYSAPI NTSTATUS  WINAPI LdrFindResourceDirectory_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DIRECTORY**);\nNTSYSAPI NTSTATUS  WINAPI LdrFindResource_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DATA_ENTRY**);\nNTSYSAPI NTSTATUS  WINAPI LdrDisableThreadCalloutsForDll(HMODULE);\nNTSYSAPI NTSTATUS  WINAPI LdrFindEntryForAddress(const void*, PLDR_MODULE*);\nNTSYSAPI NTSTATUS  WINAPI LdrGetDllHandle(LPCWSTR, ULONG, const UNICODE_STRING*, HMODULE*);\nNTSYSAPI NTSTATUS  WINAPI LdrGetProcedureAddress(HMODULE, const ANSI_STRING*, ULONG, void**);\nNTSYSAPI void      WINAPI LdrInitializeThunk(void*,ULONG_PTR,ULONG_PTR,ULONG_PTR);\nNTSYSAPI NTSTATUS  WINAPI LdrLoadDll(LPCWSTR, DWORD, const UNICODE_STRING*, HMODULE*);\nNTSYSAPI NTSTATUS  WINAPI LdrLockLoaderLock(ULONG,ULONG*,ULONG_PTR*);\nIMAGE_BASE_RELOCATION * WINAPI LdrProcessRelocationBlock(void*,UINT,USHORT*,INT_PTR);\nNTSYSAPI NTSTATUS  WINAPI LdrQueryImageFileExecutionOptions(const UNICODE_STRING*,LPCWSTR,ULONG,void*,ULONG,ULONG*);\nNTSYSAPI NTSTATUS  WINAPI LdrQueryProcessModuleInformation(SYSTEM_MODULE_INFORMATION*, ULONG, ULONG*);\nNTSYSAPI void      WINAPI LdrShutdownProcess(void);\nNTSYSAPI void      WINAPI LdrShutdownThread(void);\nNTSYSAPI NTSTATUS  WINAPI LdrUnloadDll(HMODULE);\nNTSYSAPI NTSTATUS  WINAPI LdrUnlockLoaderLock(ULONG,ULONG_PTR);\nNTSYSAPI NTSTATUS  WINAPI NtAcceptConnectPort(PHANDLE,ULONG,PLPC_MESSAGE,BOOLEAN,PLPC_SECTION_WRITE,PLPC_SECTION_READ);\nNTSYSAPI NTSTATUS  WINAPI NtAccessCheck(PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,PGENERIC_MAPPING,PPRIVILEGE_SET,PULONG,PULONG,NTSTATUS*);\nNTSYSAPI NTSTATUS  WINAPI NtAccessCheckAndAuditAlarm(PUNICODE_STRING,HANDLE,PUNICODE_STRING,PUNICODE_STRING,PSECURITY_DESCRIPTOR,ACCESS_MASK,PGENERIC_MAPPING,BOOLEAN,PACCESS_MASK,PBOOLEAN,PBOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI NtAddAtom(const WCHAR*,ULONG,RTL_ATOM*);\nNTSYSAPI NTSTATUS  WINAPI NtAdjustGroupsToken(HANDLE,BOOLEAN,PTOKEN_GROUPS,ULONG,PTOKEN_GROUPS,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtAdjustPrivilegesToken(HANDLE,BOOLEAN,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);\nNTSYSAPI NTSTATUS  WINAPI NtAlertResumeThread(HANDLE,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtAlertThread(HANDLE ThreadHandle);\nNTSYSAPI NTSTATUS  WINAPI NtAllocateLocallyUniqueId(PLUID lpLuid);\nNTSYSAPI NTSTATUS  WINAPI NtAllocateUuids(PULARGE_INTEGER,PULONG,PULONG,PUCHAR);\nNTSYSAPI NTSTATUS  WINAPI NtAllocateVirtualMemory(HANDLE,PVOID*,ULONG,SIZE_T*,ULONG,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtAreMappedFilesTheSame(PVOID,PVOID);\nNTSYSAPI NTSTATUS  WINAPI NtAssignProcessToJobObject(HANDLE,HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtCallbackReturn(PVOID,ULONG,NTSTATUS);\nNTSYSAPI NTSTATUS  WINAPI NtCancelIoFile(HANDLE,PIO_STATUS_BLOCK);\nNTSYSAPI NTSTATUS  WINAPI NtCancelIoFileEx(HANDLE,PIO_STATUS_BLOCK,PIO_STATUS_BLOCK);\nNTSYSAPI NTSTATUS  WINAPI NtCancelTimer(HANDLE, BOOLEAN*);\nNTSYSAPI NTSTATUS  WINAPI NtClearEvent(HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtClose(HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtCloseObjectAuditAlarm(PUNICODE_STRING,HANDLE,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI NtCompleteConnectPort(HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PLPC_SECTION_READ,PULONG,PVOID,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtContinue(PCONTEXT,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI NtCreateDirectoryObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);\nNTSYSAPI NTSTATUS  WINAPI NtCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,EVENT_TYPE,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI NtCreateEventPair(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);\nNTSYSAPI NTSTATUS  WINAPI NtCreateFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,PLARGE_INTEGER,ULONG,ULONG,ULONG,ULONG,PVOID,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtCreateIoCompletion(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtCreateJobObject(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);\nNTSYSAPI NTSTATUS  WINAPI NtCreateKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtCreateKeyTransacted(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,HANDLE,ULONG*);\nNTSYSAPI NTSTATUS  WINAPI NtCreateKeyedEvent(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtCreateMailslotFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,PLARGE_INTEGER);\nNTSYSAPI NTSTATUS  WINAPI NtCreateMutant(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI NtCreateNamedPipeFile(PHANDLE,ULONG,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,PLARGE_INTEGER);\nNTSYSAPI NTSTATUS  WINAPI NtCreatePagingFile(PUNICODE_STRING,PLARGE_INTEGER,PLARGE_INTEGER,PLARGE_INTEGER);\nNTSYSAPI NTSTATUS  WINAPI NtCreatePort(PHANDLE,POBJECT_ATTRIBUTES,ULONG,ULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtCreateProcess(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,HANDLE,BOOLEAN,HANDLE,HANDLE,HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtCreateProfile(PHANDLE,HANDLE,PVOID,ULONG,ULONG,PVOID,ULONG,KPROFILE_SOURCE,KAFFINITY);\nNTSYSAPI NTSTATUS  WINAPI NtCreateSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const LARGE_INTEGER*,ULONG,ULONG,HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtCreateSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,LONG,LONG);\nNTSYSAPI NTSTATUS  WINAPI NtCreateSymbolicLinkObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PUNICODE_STRING);\nNTSYSAPI NTSTATUS  WINAPI NtCreateThread(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,HANDLE,PCLIENT_ID,PCONTEXT,PINITIAL_TEB,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI NtCreateTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, TIMER_TYPE);\nNTSYSAPI NTSTATUS  WINAPI NtCreateToken(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,TOKEN_TYPE,PLUID,PLARGE_INTEGER,PTOKEN_USER,PTOKEN_GROUPS,PTOKEN_PRIVILEGES,PTOKEN_OWNER,PTOKEN_PRIMARY_GROUP,PTOKEN_DEFAULT_DACL,PTOKEN_SOURCE);\nNTSYSAPI NTSTATUS  WINAPI NtDelayExecution(BOOLEAN,const LARGE_INTEGER*);\nNTSYSAPI NTSTATUS  WINAPI NtDeleteAtom(RTL_ATOM);\nNTSYSAPI NTSTATUS  WINAPI NtDeleteFile(POBJECT_ATTRIBUTES);\nNTSYSAPI NTSTATUS  WINAPI NtDeleteKey(HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtDeleteValueKey(HANDLE,const UNICODE_STRING *);\nNTSYSAPI NTSTATUS  WINAPI NtDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtDisplayString(PUNICODE_STRING);\nNTSYSAPI NTSTATUS  WINAPI NtDuplicateObject(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtDuplicateToken(HANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,SECURITY_IMPERSONATION_LEVEL,TOKEN_TYPE,PHANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtEnumerateKey(HANDLE,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);\nNTSYSAPI NTSTATUS  WINAPI NtEnumerateValueKey(HANDLE,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtExtendSection(HANDLE,PLARGE_INTEGER);\nNTSYSAPI NTSTATUS  WINAPI NtFindAtom(const WCHAR*,ULONG,RTL_ATOM*);\nNTSYSAPI NTSTATUS  WINAPI NtFlushBuffersFile(HANDLE,IO_STATUS_BLOCK*);\nNTSYSAPI NTSTATUS  WINAPI NtFlushInstructionCache(HANDLE,LPCVOID,SIZE_T);\nNTSYSAPI NTSTATUS  WINAPI NtFlushKey(HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtFlushVirtualMemory(HANDLE,LPCVOID*,SIZE_T*,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtFlushWriteBuffer(VOID);\nNTSYSAPI NTSTATUS  WINAPI NtFreeVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtFsControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtGetContextThread(HANDLE,CONTEXT*);\nNTSYSAPI ULONG     WINAPI NtGetCurrentProcessorNumber(void);\nNTSYSAPI NTSTATUS  WINAPI NtGetPlugPlayEvent(ULONG,ULONG,PVOID,ULONG);\nNTSYSAPI ULONG     WINAPI NtGetTickCount(VOID);\nNTSYSAPI NTSTATUS  WINAPI NtGetWriteWatch(HANDLE,ULONG,PVOID,SIZE_T,PVOID*,ULONG_PTR*,ULONG*);\nNTSYSAPI NTSTATUS  WINAPI NtImpersonateAnonymousToken(HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtImpersonateClientOfPort(HANDLE,PPORT_MESSAGE);\nNTSYSAPI NTSTATUS  WINAPI NtImpersonateThread(HANDLE,HANDLE,PSECURITY_QUALITY_OF_SERVICE);\nNTSYSAPI NTSTATUS  WINAPI NtInitializeRegistry(BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI NtInitiatePowerAction(POWER_ACTION,SYSTEM_POWER_STATE,ULONG,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI NtIsProcessInJob(HANDLE,HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtListenPort(HANDLE,PLPC_MESSAGE);\nNTSYSAPI NTSTATUS  WINAPI NtLoadDriver(const UNICODE_STRING *);\nNTSYSAPI NTSTATUS  WINAPI NtLoadKey(const OBJECT_ATTRIBUTES *,OBJECT_ATTRIBUTES *);\nNTSYSAPI NTSTATUS  WINAPI NtLockFile(HANDLE,HANDLE,PIO_APC_ROUTINE,void*,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,ULONG*,BOOLEAN,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI NtLockVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtMakeTemporaryObject(HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,SIZE_T,const LARGE_INTEGER*,SIZE_T*,SECTION_INHERIT,ULONG,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtNotifyChangeDirectoryFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,ULONG,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI NtNotifyChangeKey(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI NtNotifyChangeMultipleKeys(HANDLE,ULONG,OBJECT_ATTRIBUTES*,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI NtOpenDirectoryObject(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);\nNTSYSAPI NTSTATUS  WINAPI NtOpenEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);\nNTSYSAPI NTSTATUS  WINAPI NtOpenEventPair(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);\nNTSYSAPI NTSTATUS  WINAPI NtOpenFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtOpenIoCompletion(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);\nNTSYSAPI NTSTATUS  WINAPI NtOpenJobObject(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);\nNTSYSAPI NTSTATUS  WINAPI NtOpenKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);\nNTSYSAPI NTSTATUS  WINAPI NtOpenKeyEx(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtOpenKeyTransacted(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtOpenKeyTransactedEx(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtOpenKeyedEvent(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);\nNTSYSAPI NTSTATUS  WINAPI NtOpenMutant(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);\nNTSYSAPI NTSTATUS  WINAPI NtOpenObjectAuditAlarm(PUNICODE_STRING,PHANDLE,PUNICODE_STRING,PUNICODE_STRING,PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,ACCESS_MASK,PPRIVILEGE_SET,BOOLEAN,BOOLEAN,PBOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI NtOpenProcess(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);\nNTSYSAPI NTSTATUS  WINAPI NtOpenProcessToken(HANDLE,DWORD,HANDLE *);\nNTSYSAPI NTSTATUS  WINAPI NtOpenProcessTokenEx(HANDLE,DWORD,DWORD,HANDLE *);\nNTSYSAPI NTSTATUS  WINAPI NtOpenSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);\nNTSYSAPI NTSTATUS  WINAPI NtOpenSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);\nNTSYSAPI NTSTATUS  WINAPI NtOpenSymbolicLinkObject(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);\nNTSYSAPI NTSTATUS  WINAPI NtOpenThread(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);\nNTSYSAPI NTSTATUS  WINAPI NtOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *);\nNTSYSAPI NTSTATUS  WINAPI NtOpenThreadTokenEx(HANDLE,DWORD,BOOLEAN,DWORD,HANDLE *);\nNTSYSAPI NTSTATUS  WINAPI NtOpenTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*);\nNTSYSAPI NTSTATUS  WINAPI NtPowerInformation(POWER_INFORMATION_LEVEL,PVOID,ULONG,PVOID,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtPrivilegeCheck(HANDLE,PPRIVILEGE_SET,PBOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI NtPrivilegeObjectAuditAlarm(PUNICODE_STRING,HANDLE,HANDLE,ULONG,PPRIVILEGE_SET,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI NtPrivilegedServiceAuditAlarm(PUNICODE_STRING,PUNICODE_STRING,HANDLE,PPRIVILEGE_SET,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI NtProtectVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG,ULONG*);\nNTSYSAPI NTSTATUS  WINAPI NtPulseEvent(HANDLE,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtQueueApcThread(HANDLE,PNTAPCFUNC,ULONG_PTR,ULONG_PTR,ULONG_PTR);\nNTSYSAPI NTSTATUS  WINAPI NtQueryAttributesFile(const OBJECT_ATTRIBUTES*,FILE_BASIC_INFORMATION*);\nNTSYSAPI NTSTATUS  WINAPI NtQueryDefaultLocale(BOOLEAN,LCID*);\nNTSYSAPI NTSTATUS  WINAPI NtQueryDefaultUILanguage(LANGID*);\nNTSYSAPI NTSTATUS  WINAPI NtQueryDirectoryFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS,BOOLEAN,PUNICODE_STRING,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI NtQueryDirectoryObject(HANDLE,PDIRECTORY_BASIC_INFORMATION,ULONG,BOOLEAN,BOOLEAN,PULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtQueryEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,BOOLEAN,PVOID,ULONG,PULONG,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI NtQueryEvent(HANDLE,EVENT_INFORMATION_CLASS,PVOID,ULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtQueryFullAttributesFile(const OBJECT_ATTRIBUTES*,FILE_NETWORK_OPEN_INFORMATION*);\nNTSYSAPI NTSTATUS  WINAPI NtQueryInformationAtom(RTL_ATOM,ATOM_INFORMATION_CLASS,PVOID,ULONG,ULONG*);\nNTSYSAPI NTSTATUS  WINAPI NtQueryInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,LONG,FILE_INFORMATION_CLASS);\nNTSYSAPI NTSTATUS  WINAPI NtQueryInformationJobObject(HANDLE,JOBOBJECTINFOCLASS,PVOID,ULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtQueryInformationPort(HANDLE,PORT_INFORMATION_CLASS,PVOID,ULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtQueryInformationProcess(HANDLE,PROCESSINFOCLASS,PVOID,ULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtQueryInformationToken(HANDLE,TOKEN_INFORMATION_CLASS,PVOID,ULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtQueryInstallUILanguage(LANGID*);\nNTSYSAPI NTSTATUS  WINAPI NtQueryIntervalProfile(KPROFILE_SOURCE,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtQueryIoCompletion(HANDLE,IO_COMPLETION_INFORMATION_CLASS,PVOID,ULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtQueryKey(HANDLE,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);\nNTSYSAPI NTSTATUS  WINAPI NtQueryMultipleValueKey(HANDLE,PKEY_MULTIPLE_VALUE_INFORMATION,ULONG,PVOID,ULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtQueryMutant(HANDLE,MUTANT_INFORMATION_CLASS,PVOID,ULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtQueryObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG, PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtQueryOpenSubKeys(POBJECT_ATTRIBUTES,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtQueryPerformanceCounter(PLARGE_INTEGER, PLARGE_INTEGER);\nNTSYSAPI NTSTATUS  WINAPI NtQuerySecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,ULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtQuerySection(HANDLE,SECTION_INFORMATION_CLASS,PVOID,SIZE_T,SIZE_T*);\nNTSYSAPI NTSTATUS  WINAPI NtQuerySemaphore(HANDLE,SEMAPHORE_INFORMATION_CLASS,PVOID,ULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtQuerySymbolicLinkObject(HANDLE,PUNICODE_STRING,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtQuerySystemEnvironmentValue(PUNICODE_STRING,PWCHAR,ULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtQuerySystemInformationEx(SYSTEM_INFORMATION_CLASS,void*,ULONG,void*,ULONG,ULONG*);\nNTSYSAPI NTSTATUS  WINAPI NtQuerySystemTime(PLARGE_INTEGER);\nNTSYSAPI NTSTATUS  WINAPI NtQueryTimer(HANDLE,TIMER_INFORMATION_CLASS,PVOID,ULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtQueryTimerResolution(PULONG,PULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtQueryValueKey(HANDLE,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);\nNTSYSAPI NTSTATUS  WINAPI NtQueryLicenseValue(const UNICODE_STRING *,ULONG *,PVOID,ULONG,ULONG *);\nNTSYSAPI NTSTATUS  WINAPI NtQueryVirtualMemory(HANDLE,LPCVOID,MEMORY_INFORMATION_CLASS,PVOID,SIZE_T,SIZE_T*);\nNTSYSAPI NTSTATUS  WINAPI NtQueryVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);\nNTSYSAPI NTSTATUS  WINAPI NtRaiseException(PEXCEPTION_RECORD,PCONTEXT,BOOL);\nNTSYSAPI NTSTATUS  WINAPI NtRaiseHardError(NTSTATUS,ULONG,PUNICODE_STRING,PVOID*,HARDERROR_RESPONSE_OPTION,PHARDERROR_RESPONSE);\nNTSYSAPI NTSTATUS  WINAPI NtReadFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,PLARGE_INTEGER,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtReadFileScatter(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,FILE_SEGMENT_ELEMENT*,ULONG,PLARGE_INTEGER,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtReadRequestData(HANDLE,PLPC_MESSAGE,ULONG,PVOID,ULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtReadVirtualMemory(HANDLE,const void*,void*,SIZE_T,SIZE_T*);\nNTSYSAPI NTSTATUS  WINAPI NtRegisterThreadTerminatePort(HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtReleaseKeyedEvent(HANDLE,const void*,BOOLEAN,const LARGE_INTEGER*);\nNTSYSAPI NTSTATUS  WINAPI NtReleaseMutant(HANDLE,PLONG);\nNTSYSAPI NTSTATUS  WINAPI NtReleaseSemaphore(HANDLE,ULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtRemoveIoCompletion(HANDLE,PULONG_PTR,PULONG_PTR,PIO_STATUS_BLOCK,PLARGE_INTEGER);\nNTSYSAPI NTSTATUS  WINAPI NtRenameKey(HANDLE,UNICODE_STRING*);\nNTSYSAPI NTSTATUS  WINAPI NtReplaceKey(POBJECT_ATTRIBUTES,HANDLE,POBJECT_ATTRIBUTES);\nNTSYSAPI NTSTATUS  WINAPI NtReplyPort(HANDLE,PLPC_MESSAGE);\nNTSYSAPI NTSTATUS  WINAPI NtReplyWaitReceivePort(HANDLE,PULONG,PLPC_MESSAGE,PLPC_MESSAGE);\nNTSYSAPI NTSTATUS  WINAPI NtReplyWaitReceivePortEx(HANDLE,PVOID*,PPORT_MESSAGE,PPORT_MESSAGE,PLARGE_INTEGER);\nNTSYSAPI NTSTATUS  WINAPI NtReplyWaitReplyPort(HANDLE,PLPC_MESSAGE);\nNTSYSAPI NTSTATUS  WINAPI NtRequestPort(HANDLE,PLPC_MESSAGE);\nNTSYSAPI NTSTATUS  WINAPI NtRequestWaitReplyPort(HANDLE,PLPC_MESSAGE,PLPC_MESSAGE);\nNTSYSAPI NTSTATUS  WINAPI NtResetEvent(HANDLE,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtResetWriteWatch(HANDLE,PVOID,SIZE_T);\nNTSYSAPI NTSTATUS  WINAPI NtRestoreKey(HANDLE,HANDLE,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtResumeThread(HANDLE,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtSaveKey(HANDLE,HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtSecureConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PSID,PLPC_SECTION_READ,PULONG,PVOID,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtSetContextThread(HANDLE,const CONTEXT*);\nNTSYSAPI NTSTATUS  WINAPI NtSetDefaultHardErrorPort(HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtSetDefaultLocale(BOOLEAN,LCID);\nNTSYSAPI NTSTATUS  WINAPI NtSetDefaultUILanguage(LANGID);\nNTSYSAPI NTSTATUS  WINAPI NtSetEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtSetEvent(HANDLE,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtSetHighEventPair(HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtSetHighWaitLowEventPair(HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtSetHighWaitLowThread(VOID);\nNTSYSAPI NTSTATUS  WINAPI NtSetInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS);\nNTSYSAPI NTSTATUS  WINAPI NtSetInformationJobObject(HANDLE,JOBOBJECTINFOCLASS,PVOID,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtSetInformationKey(HANDLE,const int,PVOID,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtSetInformationObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtSetInformationProcess(HANDLE,PROCESS_INFORMATION_CLASS,PVOID,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtSetInformationThread(HANDLE,THREADINFOCLASS,LPCVOID,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtSetInformationToken(HANDLE,TOKEN_INFORMATION_CLASS,PVOID,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtSetIntervalProfile(ULONG,KPROFILE_SOURCE);\nNTSYSAPI NTSTATUS  WINAPI NtSetIoCompletion(HANDLE,ULONG_PTR,ULONG_PTR,NTSTATUS,SIZE_T);\nNTSYSAPI NTSTATUS  WINAPI NtSetLdtEntries(ULONG,ULONG,ULONG,ULONG,ULONG,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtSetLowEventPair(HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtSetLowWaitHighEventPair(HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtSetLowWaitHighThread(VOID);\nNTSYSAPI NTSTATUS  WINAPI NtSetSecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);\nNTSYSAPI NTSTATUS  WINAPI NtSetSystemEnvironmentValue(PUNICODE_STRING,PUNICODE_STRING);\nNTSYSAPI NTSTATUS  WINAPI NtSetSystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtSetSystemPowerState(POWER_ACTION,SYSTEM_POWER_STATE,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtSetSystemTime(const LARGE_INTEGER*,LARGE_INTEGER*);\nNTSYSAPI NTSTATUS  WINAPI NtSetTimer(HANDLE, const LARGE_INTEGER*, PTIMER_APC_ROUTINE, PVOID, BOOLEAN, ULONG, BOOLEAN*);\nNTSYSAPI NTSTATUS  WINAPI NtSetTimerResolution(ULONG,BOOLEAN,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtSetValueKey(HANDLE,const UNICODE_STRING *,ULONG,ULONG,const void *,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtSetVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);\nNTSYSAPI NTSTATUS  WINAPI NtSignalAndWaitForSingleObject(HANDLE,HANDLE,BOOLEAN,const LARGE_INTEGER*);\nNTSYSAPI NTSTATUS  WINAPI NtShutdownSystem(SHUTDOWN_ACTION);\nNTSYSAPI NTSTATUS  WINAPI NtStartProfile(HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtStopProfile(HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtSuspendThread(HANDLE,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtSystemDebugControl(SYSDBG_COMMAND,PVOID,ULONG,PVOID,ULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtTerminateJobObject(HANDLE,NTSTATUS);\nNTSYSAPI NTSTATUS  WINAPI NtTerminateProcess(HANDLE,LONG);\nNTSYSAPI NTSTATUS  WINAPI NtTerminateThread(HANDLE,LONG);\nNTSYSAPI NTSTATUS  WINAPI NtTestAlert(VOID);\nNTSYSAPI NTSTATUS  WINAPI NtUnloadDriver(const UNICODE_STRING *);\nNTSYSAPI NTSTATUS  WINAPI NtUnloadKey(POBJECT_ATTRIBUTES);\nNTSYSAPI NTSTATUS  WINAPI NtUnloadKeyEx(POBJECT_ATTRIBUTES,HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtUnlockFile(HANDLE,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtUnlockVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG);\nNTSYSAPI NTSTATUS  WINAPI NtUnmapViewOfSection(HANDLE,PVOID);\nNTSYSAPI NTSTATUS  WINAPI NtVdmControl(ULONG,PVOID);\nNTSYSAPI NTSTATUS  WINAPI NtWaitForKeyedEvent(HANDLE,const void*,BOOLEAN,const LARGE_INTEGER*);\nNTSYSAPI NTSTATUS  WINAPI NtWaitForSingleObject(HANDLE,BOOLEAN,const LARGE_INTEGER*);\nNTSYSAPI NTSTATUS  WINAPI NtWaitForMultipleObjects(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,const LARGE_INTEGER*);\nNTSYSAPI NTSTATUS  WINAPI NtWaitHighEventPair(HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtWaitLowEventPair(HANDLE);\nNTSYSAPI NTSTATUS  WINAPI NtWriteFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,const void*,ULONG,PLARGE_INTEGER,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtWriteFileGather(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,FILE_SEGMENT_ELEMENT*,ULONG,PLARGE_INTEGER,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtWriteRequestData(HANDLE,PLPC_MESSAGE,ULONG,PVOID,ULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI NtWriteVirtualMemory(HANDLE,void*,const void*,SIZE_T,SIZE_T*);\nNTSYSAPI NTSTATUS  WINAPI NtYieldExecution(void);\n\nNTSYSAPI void      WINAPI RtlAcquirePebLock(void);\nNTSYSAPI BYTE      WINAPI RtlAcquireResourceExclusive(LPRTL_RWLOCK,BYTE);\nNTSYSAPI BYTE      WINAPI RtlAcquireResourceShared(LPRTL_RWLOCK,BYTE);\nNTSYSAPI void      WINAPI RtlAcquireSRWLockExclusive(RTL_SRWLOCK*);\nNTSYSAPI void      WINAPI RtlAcquireSRWLockShared(RTL_SRWLOCK*);\nNTSYSAPI NTSTATUS  WINAPI RtlActivateActivationContext(DWORD,HANDLE,ULONG_PTR*);\nNTSYSAPI NTSTATUS  WINAPI RtlAddAce(PACL,DWORD,DWORD,PACE_HEADER,DWORD);\nNTSYSAPI NTSTATUS  WINAPI RtlAddAccessAllowedAce(PACL,DWORD,DWORD,PSID);\nNTSYSAPI NTSTATUS  WINAPI RtlAddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID);\nNTSYSAPI NTSTATUS  WINAPI RtlAddAccessAllowedObjectAce(PACL,DWORD,DWORD,DWORD,GUID*,GUID*,PSID);\nNTSYSAPI NTSTATUS  WINAPI RtlAddAccessDeniedAce(PACL,DWORD,DWORD,PSID);\nNTSYSAPI NTSTATUS  WINAPI RtlAddAccessDeniedAceEx(PACL,DWORD,DWORD,DWORD,PSID);\nNTSYSAPI NTSTATUS  WINAPI RtlAddAccessDeniedObjectAce(PACL,DWORD,DWORD,DWORD,GUID*,GUID*,PSID);\nNTSYSAPI NTSTATUS  WINAPI RtlAddAtomToAtomTable(RTL_ATOM_TABLE,const WCHAR*,RTL_ATOM*);\nNTSYSAPI NTSTATUS  WINAPI RtlAddAuditAccessAce(PACL,DWORD,DWORD,PSID,BOOL,BOOL);\nNTSYSAPI NTSTATUS  WINAPI RtlAddAuditAccessAceEx(PACL,DWORD,DWORD,DWORD,PSID,BOOL,BOOL);\nNTSYSAPI NTSTATUS  WINAPI RtlAddAuditAccessObjectAce(PACL,DWORD,DWORD,DWORD,GUID*,GUID*,PSID,BOOL,BOOL);\nNTSYSAPI NTSTATUS  WINAPI RtlAddMandatoryAce(PACL,DWORD,DWORD,DWORD,DWORD,PSID);\nNTSYSAPI void      WINAPI RtlAddRefActivationContext(HANDLE);\nNTSYSAPI PVOID     WINAPI RtlAddVectoredExceptionHandler(ULONG,PVECTORED_EXCEPTION_HANDLER);\nNTSYSAPI NTSTATUS  WINAPI RtlAdjustPrivilege(ULONG,BOOLEAN,BOOLEAN,PBOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI RtlAllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID *);\nNTSYSAPI RTL_HANDLE * WINAPI RtlAllocateHandle(RTL_HANDLE_TABLE *,ULONG *);\nNTSYSAPI PVOID     WINAPI RtlAllocateHeap(HANDLE,ULONG,SIZE_T) __WINE_ALLOC_SIZE(3);\nNTSYSAPI WCHAR     WINAPI RtlAnsiCharToUnicodeChar(LPSTR *);\nNTSYSAPI DWORD     WINAPI RtlAnsiStringToUnicodeSize(const STRING *);\nNTSYSAPI NTSTATUS  WINAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING,PCANSI_STRING,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI RtlAppendAsciizToString(STRING *,LPCSTR);\nNTSYSAPI NTSTATUS  WINAPI RtlAppendStringToString(STRING *,const STRING *);\nNTSYSAPI NTSTATUS  WINAPI RtlAppendUnicodeStringToString(UNICODE_STRING *,const UNICODE_STRING *);\nNTSYSAPI NTSTATUS  WINAPI RtlAppendUnicodeToString(UNICODE_STRING *,LPCWSTR);\nNTSYSAPI BOOLEAN   WINAPI RtlAreAllAccessesGranted(ACCESS_MASK,ACCESS_MASK);\nNTSYSAPI BOOLEAN   WINAPI RtlAreAnyAccessesGranted(ACCESS_MASK,ACCESS_MASK);\nNTSYSAPI BOOLEAN   WINAPI RtlAreBitsSet(PCRTL_BITMAP,ULONG,ULONG);\nNTSYSAPI BOOLEAN   WINAPI RtlAreBitsClear(PCRTL_BITMAP,ULONG,ULONG);\nNTSYSAPI NTSTATUS  WINAPI RtlCharToInteger(PCSZ,ULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI RtlCheckRegistryKey(ULONG, PWSTR);\nNTSYSAPI void      WINAPI RtlClearAllBits(PRTL_BITMAP);\nNTSYSAPI void      WINAPI RtlClearBits(PRTL_BITMAP,ULONG,ULONG);\nNTSYSAPI NTSTATUS  WINAPI RtlCreateActivationContext(HANDLE*,const void*);\nNTSYSAPI PDEBUG_BUFFER WINAPI RtlCreateQueryDebugBuffer(ULONG,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI RtlCreateRegistryKey(ULONG,PWSTR);\nNTSYSAPI ULONG     WINAPI RtlCompactHeap(HANDLE,ULONG);\nNTSYSAPI LONG      WINAPI RtlCompareString(const STRING*,const STRING*,BOOLEAN);\nNTSYSAPI LONG      WINAPI RtlCompareUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);\nNTSYSAPI LONG      WINAPI RtlCompareUnicodeStrings(const WCHAR*,SIZE_T,const WCHAR*,SIZE_T,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI RtlCompressBuffer(USHORT,PUCHAR,ULONG,PUCHAR,ULONG,ULONG,PULONG,PVOID);\nNTSYSAPI DWORD     WINAPI RtlComputeCrc32(DWORD,const BYTE*,INT);\nNTSYSAPI NTSTATUS  WINAPI RtlConvertSidToUnicodeString(PUNICODE_STRING,PSID,BOOLEAN);\nNTSYSAPI void      WINAPI RtlCopyLuid(PLUID,const LUID*);\nNTSYSAPI void      WINAPI RtlCopyLuidAndAttributesArray(ULONG,const LUID_AND_ATTRIBUTES*,PLUID_AND_ATTRIBUTES);\nNTSYSAPI BOOLEAN   WINAPI RtlCopySid(DWORD,PSID,PSID);\nNTSYSAPI NTSTATUS  WINAPI RtlCopySecurityDescriptor(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR);\nNTSYSAPI void      WINAPI RtlCopyString(STRING*,const STRING*);\nNTSYSAPI void      WINAPI RtlCopyUnicodeString(UNICODE_STRING*,const UNICODE_STRING*);\nNTSYSAPI NTSTATUS  WINAPI RtlCreateAcl(PACL,DWORD,DWORD);\nNTSYSAPI NTSTATUS  WINAPI RtlCreateAtomTable(ULONG,RTL_ATOM_TABLE*);\nNTSYSAPI NTSTATUS  WINAPI RtlCreateEnvironment(BOOLEAN, PWSTR*);\nNTSYSAPI HANDLE    WINAPI RtlCreateHeap(ULONG,PVOID,SIZE_T,SIZE_T,PVOID,PRTL_HEAP_DEFINITION);\nNTSYSAPI NTSTATUS  WINAPI RtlCreateProcessParameters(RTL_USER_PROCESS_PARAMETERS**,const UNICODE_STRING*,const UNICODE_STRING*,const UNICODE_STRING*,const UNICODE_STRING*,PWSTR,const UNICODE_STRING*,const UNICODE_STRING*,const UNICODE_STRING*,const UNICODE_STRING*);\nNTSYSAPI NTSTATUS  WINAPI RtlCreateSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);\nNTSYSAPI NTSTATUS  WINAPI RtlCreateTimerQueue(PHANDLE);\nNTSYSAPI NTSTATUS  WINAPI RtlCreateTimer(PHANDLE, HANDLE, RTL_WAITORTIMERCALLBACKFUNC, PVOID, DWORD, DWORD, ULONG);\nNTSYSAPI BOOLEAN   WINAPI RtlCreateUnicodeString(PUNICODE_STRING,LPCWSTR);\nNTSYSAPI BOOLEAN   WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING,LPCSTR);\nNTSYSAPI NTSTATUS  WINAPI RtlCreateUserProcess(UNICODE_STRING*,ULONG,RTL_USER_PROCESS_PARAMETERS*,SECURITY_DESCRIPTOR*,SECURITY_DESCRIPTOR*,HANDLE,BOOLEAN,HANDLE,HANDLE,RTL_USER_PROCESS_INFORMATION*);\nNTSYSAPI NTSTATUS  WINAPI RtlCreateUserThread(HANDLE,const SECURITY_DESCRIPTOR*,BOOLEAN,PVOID,SIZE_T,SIZE_T,PRTL_THREAD_START_ROUTINE,void*,HANDLE*,CLIENT_ID*);\nNTSYSAPI void      WINAPI RtlDeactivateActivationContext(DWORD,ULONG_PTR);\nNTSYSAPI PVOID     WINAPI RtlDecodePointer(PVOID);\nNTSYSAPI NTSTATUS  WINAPI RtlDecompressBuffer(USHORT,PUCHAR,ULONG,PUCHAR,ULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI RtlDeleteAce(PACL,DWORD);\nNTSYSAPI NTSTATUS  WINAPI RtlDeleteAtomFromAtomTable(RTL_ATOM_TABLE,RTL_ATOM);\nNTSYSAPI NTSTATUS  WINAPI RtlDeleteCriticalSection(RTL_CRITICAL_SECTION *);\nNTSYSAPI NTSTATUS  WINAPI RtlDeleteRegistryValue(ULONG, PCWSTR, PCWSTR);\nNTSYSAPI void      WINAPI RtlDeleteResource(LPRTL_RWLOCK);\nNTSYSAPI NTSTATUS  WINAPI RtlDeleteSecurityObject(PSECURITY_DESCRIPTOR*);\nNTSYSAPI NTSTATUS  WINAPI RtlDeleteTimer(HANDLE, HANDLE, HANDLE);\nNTSYSAPI NTSTATUS  WINAPI RtlDeleteTimerQueueEx(HANDLE, HANDLE);\nNTSYSAPI PRTL_USER_PROCESS_PARAMETERS WINAPI RtlDeNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);\nNTSYSAPI NTSTATUS  WINAPI RtlDeregisterWait(HANDLE);\nNTSYSAPI NTSTATUS  WINAPI RtlDeregisterWaitEx(HANDLE,HANDLE);\nNTSYSAPI NTSTATUS  WINAPI RtlDestroyAtomTable(RTL_ATOM_TABLE);\nNTSYSAPI NTSTATUS  WINAPI RtlDestroyEnvironment(PWSTR);\nNTSYSAPI NTSTATUS  WINAPI RtlDestroyHandleTable(RTL_HANDLE_TABLE *);\nNTSYSAPI HANDLE    WINAPI RtlDestroyHeap(HANDLE);\nNTSYSAPI void      WINAPI RtlDestroyProcessParameters(RTL_USER_PROCESS_PARAMETERS*);\nNTSYSAPI NTSTATUS  WINAPI RtlDestroyQueryDebugBuffer(PDEBUG_BUFFER);\nNTSYSAPI DOS_PATHNAME_TYPE WINAPI RtlDetermineDosPathNameType_U(PCWSTR);\nNTSYSAPI BOOLEAN   WINAPI RtlDllShutdownInProgress(void);\nNTSYSAPI BOOLEAN   WINAPI RtlDoesFileExists_U(LPCWSTR);\nNTSYSAPI BOOLEAN   WINAPI RtlDosPathNameToNtPathName_U(PCWSTR,PUNICODE_STRING,PWSTR*,CURDIR*);\nNTSYSAPI NTSTATUS  WINAPI RtlDosPathNameToNtPathName_U_WithStatus(PCWSTR,PUNICODE_STRING,PWSTR*,CURDIR*);\nNTSYSAPI ULONG     WINAPI RtlDosSearchPath_U(LPCWSTR, LPCWSTR, LPCWSTR, ULONG, LPWSTR, LPWSTR*);\nNTSYSAPI WCHAR     WINAPI RtlDowncaseUnicodeChar(WCHAR);\nNTSYSAPI NTSTATUS  WINAPI RtlDowncaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);\nNTSYSAPI void      WINAPI RtlDumpResource(LPRTL_RWLOCK);\nNTSYSAPI NTSTATUS  WINAPI RtlDuplicateUnicodeString(int,const UNICODE_STRING*,UNICODE_STRING*);\nNTSYSAPI NTSTATUS  WINAPI RtlEmptyAtomTable(RTL_ATOM_TABLE,BOOLEAN);\nNTSYSAPI PVOID     WINAPI RtlEncodePointer(PVOID);\nNTSYSAPI NTSTATUS  WINAPI RtlEnterCriticalSection(RTL_CRITICAL_SECTION *);\nNTSYSAPI void      WINAPI RtlEraseUnicodeString(UNICODE_STRING*);\nNTSYSAPI NTSTATUS  WINAPI RtlEqualComputerName(const UNICODE_STRING*,const UNICODE_STRING*);\nNTSYSAPI NTSTATUS  WINAPI RtlEqualDomainName(const UNICODE_STRING*,const UNICODE_STRING*);\nNTSYSAPI BOOLEAN   WINAPI RtlEqualLuid(const LUID*,const LUID*);\nNTSYSAPI BOOL      WINAPI RtlEqualPrefixSid(PSID,PSID);\nNTSYSAPI BOOL      WINAPI RtlEqualSid(PSID,PSID);\nNTSYSAPI BOOLEAN   WINAPI RtlEqualString(const STRING*,const STRING*,BOOLEAN);\nNTSYSAPI BOOLEAN   WINAPI RtlEqualUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);\nNTSYSAPI void      DECLSPEC_NORETURN WINAPI RtlExitUserProcess(ULONG);\nNTSYSAPI void      DECLSPEC_NORETURN WINAPI RtlExitUserThread(ULONG);\nNTSYSAPI NTSTATUS  WINAPI RtlExpandEnvironmentStrings(const WCHAR*,WCHAR*,SIZE_T,WCHAR*,SIZE_T,SIZE_T*);\nNTSYSAPI NTSTATUS  WINAPI RtlExpandEnvironmentStrings_U(PCWSTR, const UNICODE_STRING*, UNICODE_STRING*, ULONG*);\nNTSYSAPI NTSTATUS  WINAPI RtlFindActivationContextSectionString(ULONG,const GUID*,ULONG,const UNICODE_STRING*,PVOID);\nNTSYSAPI NTSTATUS  WINAPI RtlFindActivationContextSectionGuid(ULONG,const GUID*,ULONG,const GUID*,PVOID);\nNTSYSAPI NTSTATUS  WINAPI RtlFindCharInUnicodeString(int,const UNICODE_STRING*,const UNICODE_STRING*,USHORT*);\nNTSYSAPI ULONG     WINAPI RtlFindClearBits(PCRTL_BITMAP,ULONG,ULONG);\nNTSYSAPI ULONG     WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP,ULONG,ULONG);\nNTSYSAPI ULONG     WINAPI RtlFindClearRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);\nNTSYSAPI ULONG     WINAPI RtlFindLastBackwardRunSet(PCRTL_BITMAP,ULONG,PULONG);\nNTSYSAPI ULONG     WINAPI RtlFindLastBackwardRunClear(PCRTL_BITMAP,ULONG,PULONG);\nNTSYSAPI CCHAR     WINAPI RtlFindLeastSignificantBit(ULONGLONG);\nNTSYSAPI ULONG     WINAPI RtlFindLongestRunSet(PCRTL_BITMAP,PULONG);\nNTSYSAPI ULONG     WINAPI RtlFindLongestRunClear(PCRTL_BITMAP,PULONG);\nNTSYSAPI NTSTATUS  WINAPI RtlFindMessage(HMODULE,ULONG,ULONG,ULONG,const MESSAGE_RESOURCE_ENTRY**);\nNTSYSAPI CCHAR     WINAPI RtlFindMostSignificantBit(ULONGLONG);\nNTSYSAPI ULONG     WINAPI RtlFindNextForwardRunSet(PCRTL_BITMAP,ULONG,PULONG);\nNTSYSAPI ULONG     WINAPI RtlFindNextForwardRunClear(PCRTL_BITMAP,ULONG,PULONG);\nNTSYSAPI ULONG     WINAPI RtlFindSetBits(PCRTL_BITMAP,ULONG,ULONG);\nNTSYSAPI ULONG     WINAPI RtlFindSetBitsAndClear(PRTL_BITMAP,ULONG,ULONG);\nNTSYSAPI ULONG     WINAPI RtlFindSetRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);\nNTSYSAPI BOOLEAN   WINAPI RtlFirstFreeAce(PACL,PACE_HEADER *);\nNTSYSAPI NTSTATUS  WINAPI RtlFormatCurrentUserKeyPath(PUNICODE_STRING);\nNTSYSAPI NTSTATUS  WINAPI RtlFormatMessage(LPWSTR,UCHAR,BOOLEAN,BOOLEAN,BOOLEAN,__ms_va_list *,LPWSTR,ULONG);\nNTSYSAPI void      WINAPI RtlFreeAnsiString(PANSI_STRING);\nNTSYSAPI BOOLEAN   WINAPI RtlFreeHandle(RTL_HANDLE_TABLE *,RTL_HANDLE *);\nNTSYSAPI BOOLEAN   WINAPI RtlFreeHeap(HANDLE,ULONG,PVOID);\nNTSYSAPI void      WINAPI RtlFreeOemString(POEM_STRING);\nNTSYSAPI DWORD     WINAPI RtlFreeSid(PSID);\nNTSYSAPI void      WINAPI RtlFreeThreadActivationContextStack(void);\nNTSYSAPI void      WINAPI RtlFreeUnicodeString(PUNICODE_STRING);\nNTSYSAPI NTSTATUS  WINAPI RtlGetAce(PACL,DWORD,LPVOID *);\nNTSYSAPI NTSTATUS  WINAPI RtlGetActiveActivationContext(HANDLE*);\nNTSYSAPI NTSTATUS  WINAPI RtlGetCompressionWorkSpaceSize(USHORT,PULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI RtlGetControlSecurityDescriptor(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR_CONTROL,LPDWORD);\nNTSYSAPI ULONG     WINAPI RtlGetCurrentDirectory_U(ULONG, LPWSTR);\nNTSYSAPI PEB *     WINAPI RtlGetCurrentPeb(void);\nNTSYSAPI NTSTATUS  WINAPI RtlGetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);\nNTSYSAPI TEB_ACTIVE_FRAME * WINAPI RtlGetFrame(void);\nNTSYSAPI ULONG     WINAPI RtlGetFullPathName_U(PCWSTR,ULONG,PWSTR,PWSTR*);\nNTSYSAPI NTSTATUS  WINAPI RtlGetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI RtlGetLastNtStatus(void);\nNTSYSAPI DWORD     WINAPI RtlGetLastWin32Error(void);\nNTSYSAPI DWORD     WINAPI RtlGetLongestNtPathLength(void);\nNTSYSAPI ULONG     WINAPI RtlGetNtGlobalFlags(void);\nNTSYSAPI BOOLEAN   WINAPI RtlGetNtProductType(LPDWORD);\nNTSYSAPI NTSTATUS  WINAPI RtlGetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);\nNTSYSAPI ULONG     WINAPI RtlGetProcessHeaps(ULONG,HANDLE*);\nNTSYSAPI DWORD     WINAPI RtlGetThreadErrorMode(void);\nNTSYSAPI NTSTATUS  WINAPI RtlGetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI RtlGetVersion(RTL_OSVERSIONINFOEXW*);\nNTSYSAPI NTSTATUS  WINAPI RtlGUIDFromString(PUNICODE_STRING,GUID*);\nNTSYSAPI PSID_IDENTIFIER_AUTHORITY WINAPI RtlIdentifierAuthoritySid(PSID);\nNTSYSAPI PVOID     WINAPI RtlImageDirectoryEntryToData(HMODULE,BOOL,WORD,ULONG *);\nNTSYSAPI PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE);\nNTSYSAPI PIMAGE_SECTION_HEADER WINAPI RtlImageRvaToSection(const IMAGE_NT_HEADERS *,HMODULE,DWORD);\nNTSYSAPI PVOID     WINAPI RtlImageRvaToVa(const IMAGE_NT_HEADERS *,HMODULE,DWORD,IMAGE_SECTION_HEADER **);\nNTSYSAPI NTSTATUS  WINAPI RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);\nNTSYSAPI void      WINAPI RtlInitString(PSTRING,PCSZ);\nNTSYSAPI void      WINAPI RtlInitAnsiString(PANSI_STRING,PCSZ);\nNTSYSAPI NTSTATUS  WINAPI RtlInitAnsiStringEx(PANSI_STRING,PCSZ);\nNTSYSAPI void      WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);\nNTSYSAPI NTSTATUS  WINAPI RtlInitUnicodeStringEx(PUNICODE_STRING,PCWSTR);\nNTSYSAPI void      WINAPI RtlInitializeBitMap(PRTL_BITMAP,PULONG,ULONG);\nNTSYSAPI void      WINAPI RtlInitializeConditionVariable(RTL_CONDITION_VARIABLE *);\nNTSYSAPI NTSTATUS  WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION *);\nNTSYSAPI NTSTATUS  WINAPI RtlInitializeCriticalSectionAndSpinCount(RTL_CRITICAL_SECTION *,ULONG);\nNTSYSAPI NTSTATUS  WINAPI RtlInitializeCriticalSectionEx(RTL_CRITICAL_SECTION *,ULONG,ULONG);\nNTSYSAPI void      WINAPI RtlInitializeHandleTable(ULONG,ULONG,RTL_HANDLE_TABLE *);\nNTSYSAPI void      WINAPI RtlInitializeResource(LPRTL_RWLOCK);\nNTSYSAPI void      WINAPI RtlInitializeSRWLock(RTL_SRWLOCK*);\nNTSYSAPI BOOL      WINAPI RtlInitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);\nNTSYSAPI NTSTATUS  WINAPI RtlInt64ToUnicodeString(ULONGLONG,ULONG,UNICODE_STRING *);\nNTSYSAPI NTSTATUS  WINAPI RtlIntegerToChar(ULONG,ULONG,ULONG,PCHAR);\nNTSYSAPI NTSTATUS  WINAPI RtlIntegerToUnicodeString(ULONG,ULONG,UNICODE_STRING *);\nNTSYSAPI BOOLEAN   WINAPI RtlIsActivationContextActive(HANDLE);\nNTSYSAPI BOOL      WINAPI RtlIsCriticalSectionLocked(RTL_CRITICAL_SECTION *);\nNTSYSAPI BOOL      WINAPI RtlIsCriticalSectionLockedByThread(RTL_CRITICAL_SECTION *);\nNTSYSAPI ULONG     WINAPI RtlIsDosDeviceName_U(PCWSTR);\nNTSYSAPI BOOLEAN   WINAPI RtlIsNameLegalDOS8Dot3(const UNICODE_STRING*,POEM_STRING,PBOOLEAN);\nNTSYSAPI BOOLEAN   WINAPI RtlIsTextUnicode(LPCVOID,INT,INT *);\nNTSYSAPI BOOLEAN   WINAPI RtlIsValidHandle(const RTL_HANDLE_TABLE *, const RTL_HANDLE *);\nNTSYSAPI BOOLEAN   WINAPI RtlIsValidIndexHandle(const RTL_HANDLE_TABLE *, ULONG Index, RTL_HANDLE **);\nNTSYSAPI NTSTATUS  WINAPI RtlLeaveCriticalSection(RTL_CRITICAL_SECTION *);\nNTSYSAPI DWORD     WINAPI RtlLengthRequiredSid(DWORD);\nNTSYSAPI ULONG     WINAPI RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR);\nNTSYSAPI DWORD     WINAPI RtlLengthSid(PSID);\nNTSYSAPI NTSTATUS  WINAPI RtlLocalTimeToSystemTime(const LARGE_INTEGER*,PLARGE_INTEGER);\nNTSYSAPI BOOLEAN   WINAPI RtlLockHeap(HANDLE);\nNTSYSAPI NTSTATUS  WINAPI RtlLookupAtomInAtomTable(RTL_ATOM_TABLE,const WCHAR*,RTL_ATOM*);\nNTSYSAPI NTSTATUS  WINAPI RtlMakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD);\nNTSYSAPI void      WINAPI RtlMapGenericMask(PACCESS_MASK,const GENERIC_MAPPING*);\nNTSYSAPI NTSTATUS  WINAPI RtlMultiByteToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);\nNTSYSAPI NTSTATUS  WINAPI RtlMultiByteToUnicodeSize(DWORD*,LPCSTR,UINT);\nNTSYSAPI NTSTATUS  WINAPI RtlNewSecurityObject(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,BOOLEAN,HANDLE,PGENERIC_MAPPING);\nNTSYSAPI PRTL_USER_PROCESS_PARAMETERS WINAPI RtlNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);\nNTSYSAPI ULONG     WINAPI RtlNtStatusToDosError(NTSTATUS);\nNTSYSAPI ULONG     WINAPI RtlNtStatusToDosErrorNoTeb(NTSTATUS);\nNTSYSAPI ULONG     WINAPI RtlNumberOfSetBits(PCRTL_BITMAP);\nNTSYSAPI ULONG     WINAPI RtlNumberOfClearBits(PCRTL_BITMAP);\nNTSYSAPI UINT      WINAPI RtlOemStringToUnicodeSize(const STRING*);\nNTSYSAPI NTSTATUS  WINAPI RtlOemStringToUnicodeString(UNICODE_STRING*,const STRING*,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI RtlOemToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);\nNTSYSAPI NTSTATUS  WINAPI RtlOpenCurrentUser(ACCESS_MASK,PHANDLE);\nNTSYSAPI PVOID     WINAPI RtlPcToFileHeader(PVOID,PVOID*);\nNTSYSAPI NTSTATUS  WINAPI RtlPinAtomInAtomTable(RTL_ATOM_TABLE,RTL_ATOM);\nNTSYSAPI void      WINAPI RtlPopFrame(TEB_ACTIVE_FRAME*);\nNTSYSAPI BOOLEAN   WINAPI RtlPrefixString(const STRING*,const STRING*,BOOLEAN);\nNTSYSAPI BOOLEAN   WINAPI RtlPrefixUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);\nNTSYSAPI void      WINAPI RtlPushFrame(TEB_ACTIVE_FRAME*);\nNTSYSAPI NTSTATUS  WINAPI RtlQueryActivationContextApplicationSettings(DWORD,HANDLE,const WCHAR*,const WCHAR*,WCHAR*,SIZE_T,SIZE_T*);\nNTSYSAPI NTSTATUS  WINAPI RtlQueryAtomInAtomTable(RTL_ATOM_TABLE,RTL_ATOM,ULONG*,ULONG*,WCHAR*,ULONG*);\nNTSYSAPI NTSTATUS  WINAPI RtlQueryDynamicTimeZoneInformation(RTL_DYNAMIC_TIME_ZONE_INFORMATION*);\nNTSYSAPI NTSTATUS  WINAPI RtlQueryEnvironmentVariable_U(PWSTR,PUNICODE_STRING,PUNICODE_STRING);\nNTSYSAPI NTSTATUS  WINAPI RtlQueryHeapInformation(HANDLE,HEAP_INFORMATION_CLASS,PVOID,SIZE_T,PSIZE_T);\nNTSYSAPI NTSTATUS  WINAPI RtlQueryInformationAcl(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS);\nNTSYSAPI NTSTATUS  WINAPI RtlQueryInformationActivationContext(ULONG,HANDLE,PVOID,ULONG,PVOID,SIZE_T,SIZE_T*);\nNTSYSAPI NTSTATUS  WINAPI RtlQueryProcessDebugInformation(ULONG,ULONG,PDEBUG_BUFFER);\nNTSYSAPI NTSTATUS  WINAPI RtlQueryRegistryValues(ULONG, PCWSTR, PRTL_QUERY_REGISTRY_TABLE, PVOID, PVOID);\nNTSYSAPI NTSTATUS  WINAPI RtlQueryTimeZoneInformation(RTL_TIME_ZONE_INFORMATION*);\nNTSYSAPI NTSTATUS  WINAPI RtlQueryUnbiasedInterruptTime(ULONGLONG*);\nNTSYSAPI NTSTATUS  WINAPI RtlQueueWorkItem(PRTL_WORK_ITEM_ROUTINE,PVOID,ULONG);\nNTSYSAPI void      WINAPI RtlRaiseException(PEXCEPTION_RECORD);\nNTSYSAPI void      WINAPI RtlRaiseStatus(NTSTATUS);\nNTSYSAPI ULONG     WINAPI RtlRandom(PULONG);\nNTSYSAPI PVOID     WINAPI RtlReAllocateHeap(HANDLE,ULONG,PVOID,SIZE_T);\nNTSYSAPI NTSTATUS  WINAPI RtlRegisterWait(PHANDLE,HANDLE,RTL_WAITORTIMERCALLBACKFUNC,PVOID,ULONG,ULONG);\nNTSYSAPI void      WINAPI RtlReleaseActivationContext(HANDLE);\nNTSYSAPI void      WINAPI RtlReleasePebLock(void);\nNTSYSAPI void      WINAPI RtlReleaseResource(LPRTL_RWLOCK);\nNTSYSAPI void      WINAPI RtlReleaseSRWLockExclusive(RTL_SRWLOCK*);\nNTSYSAPI void      WINAPI RtlReleaseSRWLockShared(RTL_SRWLOCK*);\nNTSYSAPI ULONG     WINAPI RtlRemoveVectoredExceptionHandler(PVOID);\nNTSYSAPI void      WINAPI RtlRestoreLastWin32Error(DWORD);\nNTSYSAPI void      WINAPI RtlSecondsSince1970ToTime(DWORD,LARGE_INTEGER *);\nNTSYSAPI void      WINAPI RtlSecondsSince1980ToTime(DWORD,LARGE_INTEGER *);\nNTSYSAPI NTSTATUS  WINAPI RtlSelfRelativeToAbsoluteSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PDWORD,PACL,PDWORD,PACL,PDWORD,PSID,PDWORD,PSID,PDWORD);\nNTSYSAPI void      WINAPI RtlSetAllBits(PRTL_BITMAP);\nNTSYSAPI void      WINAPI RtlSetBits(PRTL_BITMAP,ULONG,ULONG);\nNTSYSAPI ULONG     WINAPI RtlSetCriticalSectionSpinCount(RTL_CRITICAL_SECTION*,ULONG);\nNTSYSAPI NTSTATUS  WINAPI RtlSetControlSecurityDescriptor(PSECURITY_DESCRIPTOR,SECURITY_DESCRIPTOR_CONTROL,SECURITY_DESCRIPTOR_CONTROL);\nNTSYSAPI NTSTATUS  WINAPI RtlSetCurrentDirectory_U(const UNICODE_STRING*);\nNTSYSAPI void      WINAPI RtlSetCurrentEnvironment(PWSTR, PWSTR*);\nNTSYSAPI NTSTATUS  WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI RtlSetEnvironmentVariable(PWSTR*,PUNICODE_STRING,PUNICODE_STRING);\nNTSYSAPI NTSTATUS  WINAPI RtlSetHeapInformation(HANDLE,HEAP_INFORMATION_CLASS,PVOID,SIZE_T);\nNTSYSAPI NTSTATUS  WINAPI RtlSetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI RtlSetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI RtlSetIoCompletionCallback(HANDLE,PRTL_OVERLAPPED_COMPLETION_ROUTINE,ULONG);\nNTSYSAPI void      WINAPI RtlSetLastWin32Error(DWORD);\nNTSYSAPI void      WINAPI RtlSetLastWin32ErrorAndNtStatusFromNtStatus(NTSTATUS);\nNTSYSAPI NTSTATUS  WINAPI RtlSetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI RtlSetThreadErrorMode(DWORD,LPDWORD);\nNTSYSAPI NTSTATUS  WINAPI RtlSetTimeZoneInformation(const RTL_TIME_ZONE_INFORMATION*);\nNTSYSAPI SIZE_T    WINAPI RtlSizeHeap(HANDLE,ULONG,const void*);\nNTSYSAPI NTSTATUS  WINAPI RtlSleepConditionVariableCS(RTL_CONDITION_VARIABLE*,RTL_CRITICAL_SECTION*,const LARGE_INTEGER*);\nNTSYSAPI NTSTATUS  WINAPI RtlSleepConditionVariableSRW(RTL_CONDITION_VARIABLE*,RTL_SRWLOCK*,const LARGE_INTEGER*,ULONG);\nNTSYSAPI NTSTATUS  WINAPI RtlStringFromGUID(REFGUID,PUNICODE_STRING);\nNTSYSAPI LPDWORD   WINAPI RtlSubAuthoritySid(PSID,DWORD);\nNTSYSAPI LPBYTE    WINAPI RtlSubAuthorityCountSid(PSID);\nNTSYSAPI NTSTATUS  WINAPI RtlSystemTimeToLocalTime(const LARGE_INTEGER*,PLARGE_INTEGER);\nNTSYSAPI void      WINAPI RtlTimeToTimeFields(const LARGE_INTEGER*,PTIME_FIELDS);\nNTSYSAPI BOOLEAN   WINAPI RtlTimeFieldsToTime(PTIME_FIELDS,PLARGE_INTEGER);\nNTSYSAPI void      WINAPI RtlTimeToElapsedTimeFields(const LARGE_INTEGER *,PTIME_FIELDS);\nNTSYSAPI BOOLEAN   WINAPI RtlTimeToSecondsSince1970(const LARGE_INTEGER *,LPDWORD);\nNTSYSAPI BOOLEAN   WINAPI RtlTimeToSecondsSince1980(const LARGE_INTEGER *,LPDWORD);\nNTSYSAPI BOOLEAN   WINAPI RtlTryAcquireSRWLockExclusive(RTL_SRWLOCK *);\nNTSYSAPI BOOLEAN   WINAPI RtlTryAcquireSRWLockShared(RTL_SRWLOCK *);\nNTSYSAPI BOOL      WINAPI RtlTryEnterCriticalSection(RTL_CRITICAL_SECTION *);\nNTSYSAPI ULONGLONG __cdecl RtlUlonglongByteSwap(ULONGLONG);\nNTSYSAPI DWORD     WINAPI RtlUnicodeStringToAnsiSize(const UNICODE_STRING*);\nNTSYSAPI NTSTATUS  WINAPI RtlUnicodeStringToAnsiString(PANSI_STRING,PCUNICODE_STRING,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI RtlUnicodeStringToInteger(const UNICODE_STRING *,ULONG,ULONG *);\nNTSYSAPI DWORD     WINAPI RtlUnicodeStringToOemSize(const UNICODE_STRING*);\nNTSYSAPI NTSTATUS  WINAPI RtlUnicodeStringToOemString(POEM_STRING,PCUNICODE_STRING,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI RtlUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);\nNTSYSAPI NTSTATUS  WINAPI RtlUnicodeToMultiByteSize(PULONG,PCWSTR,ULONG);\nNTSYSAPI NTSTATUS  WINAPI RtlUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);\nNTSYSAPI ULONG     WINAPI RtlUniform(PULONG);\nNTSYSAPI BOOLEAN   WINAPI RtlUnlockHeap(HANDLE);\nNTSYSAPI void      WINAPI RtlUnwind(PVOID,PVOID,PEXCEPTION_RECORD,PVOID);\n#ifdef __x86_64__\nNTSYSAPI void      WINAPI RtlUnwindEx(PVOID,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE);\n#elif defined(__ia64__)\nNTSYSAPI void      WINAPI RtlUnwind2(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT);\nNTSYSAPI void      WINAPI RtlUnwindEx(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE);\n#endif\nNTSYSAPI WCHAR     WINAPI RtlUpcaseUnicodeChar(WCHAR);\nNTSYSAPI NTSTATUS  WINAPI RtlUpcaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING *,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI RtlUpcaseUnicodeStringToAnsiString(STRING*,const UNICODE_STRING*,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI RtlUpcaseUnicodeStringToCountedOemString(STRING*,const UNICODE_STRING*,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI RtlUpcaseUnicodeStringToOemString(STRING*,const UNICODE_STRING*,BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI RtlUpcaseUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);\nNTSYSAPI NTSTATUS  WINAPI RtlUpcaseUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);\nNTSYSAPI NTSTATUS  WINAPI RtlUpdateTimer(HANDLE, HANDLE, DWORD, DWORD);\nNTSYSAPI CHAR      WINAPI RtlUpperChar(CHAR);\nNTSYSAPI void      WINAPI RtlUpperString(STRING *,const STRING *);\nNTSYSAPI NTSTATUS  WINAPI RtlValidSecurityDescriptor(PSECURITY_DESCRIPTOR);\nNTSYSAPI BOOLEAN   WINAPI RtlValidRelativeSecurityDescriptor(PSECURITY_DESCRIPTOR,ULONG,SECURITY_INFORMATION);\nNTSYSAPI BOOLEAN   WINAPI RtlValidAcl(PACL);\nNTSYSAPI BOOLEAN   WINAPI RtlValidSid(PSID);\nNTSYSAPI BOOLEAN   WINAPI RtlValidateHeap(HANDLE,ULONG,LPCVOID);\nNTSYSAPI NTSTATUS  WINAPI RtlVerifyVersionInfo(const RTL_OSVERSIONINFOEXW*,DWORD,DWORDLONG);\nNTSYSAPI void      WINAPI RtlWakeAllConditionVariable(RTL_CONDITION_VARIABLE *);\nNTSYSAPI void      WINAPI RtlWakeConditionVariable(RTL_CONDITION_VARIABLE *);\nNTSYSAPI NTSTATUS  WINAPI RtlWalkHeap(HANDLE,PVOID);\nNTSYSAPI NTSTATUS  WINAPI RtlWow64EnableFsRedirection(BOOLEAN);\nNTSYSAPI NTSTATUS  WINAPI RtlWow64EnableFsRedirectionEx(ULONG,ULONG*);\n#ifdef __x86_64__\nNTSYSAPI NTSTATUS  WINAPI RtlWow64GetThreadContext(HANDLE, WOW64_CONTEXT *);\nNTSYSAPI NTSTATUS  WINAPI RtlWow64SetThreadContext(HANDLE, const WOW64_CONTEXT *);\n#endif\nNTSYSAPI NTSTATUS  WINAPI RtlWriteRegistryValue(ULONG,PCWSTR,PCWSTR,ULONG,PVOID,ULONG);\nNTSYSAPI NTSTATUS  WINAPI RtlZombifyActivationContext(HANDLE);\nNTSYSAPI NTSTATUS  WINAPI RtlpNtCreateKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);\nNTSYSAPI NTSTATUS  WINAPI RtlpNtEnumerateSubKey(HANDLE,UNICODE_STRING *, ULONG);\nNTSYSAPI NTSTATUS  WINAPI RtlpWaitForCriticalSection(RTL_CRITICAL_SECTION *);\nNTSYSAPI NTSTATUS  WINAPI RtlpUnWaitCriticalSection(RTL_CRITICAL_SECTION *);\nNTSYSAPI NTSTATUS  WINAPI vDbgPrintEx(ULONG,ULONG,LPCSTR,__ms_va_list);\nNTSYSAPI NTSTATUS  WINAPI vDbgPrintExWithPrefix(LPCSTR,ULONG,ULONG,LPCSTR,__ms_va_list);\n\n/* 32-bit only functions */\n\n#ifndef _WIN64\nNTSYSAPI LONGLONG  WINAPI RtlConvertLongToLargeInteger(LONG);\nNTSYSAPI ULONGLONG WINAPI RtlConvertUlongToLargeInteger(ULONG);\nNTSYSAPI LONGLONG  WINAPI RtlEnlargedIntegerMultiply(INT,INT);\nNTSYSAPI ULONGLONG WINAPI RtlEnlargedUnsignedMultiply(UINT,UINT);\nNTSYSAPI UINT      WINAPI RtlEnlargedUnsignedDivide(ULONGLONG,UINT,UINT *);\nNTSYSAPI LONGLONG  WINAPI RtlExtendedMagicDivide(LONGLONG,LONGLONG,INT);\nNTSYSAPI LONGLONG  WINAPI RtlExtendedIntegerMultiply(LONGLONG,INT);\nNTSYSAPI LONGLONG  WINAPI RtlExtendedLargeIntegerDivide(LONGLONG,INT,INT *);\nNTSYSAPI LONGLONG  WINAPI RtlLargeIntegerAdd(LONGLONG,LONGLONG);\nNTSYSAPI LONGLONG  WINAPI RtlLargeIntegerArithmeticShift(LONGLONG,INT);\nNTSYSAPI ULONGLONG WINAPI RtlLargeIntegerDivide( ULONGLONG,ULONGLONG,ULONGLONG *);\nNTSYSAPI LONGLONG  WINAPI RtlLargeIntegerNegate(LONGLONG);\nNTSYSAPI LONGLONG  WINAPI RtlLargeIntegerShiftLeft(LONGLONG,INT);\nNTSYSAPI LONGLONG  WINAPI RtlLargeIntegerShiftRight(LONGLONG,INT);\nNTSYSAPI LONGLONG  WINAPI RtlLargeIntegerSubtract(LONGLONG,LONGLONG);\nNTSYSAPI NTSTATUS  WINAPI RtlLargeIntegerToChar(const ULONGLONG *,ULONG,ULONG,PCHAR);\n#endif\n\n/* Threadpool functions */\n\nNTSYSAPI NTSTATUS  WINAPI TpAllocCleanupGroup(TP_CLEANUP_GROUP **);\nNTSYSAPI NTSTATUS  WINAPI TpAllocPool(TP_POOL **,PVOID);\nNTSYSAPI NTSTATUS  WINAPI TpAllocTimer(TP_TIMER **,PTP_TIMER_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *);\nNTSYSAPI NTSTATUS  WINAPI TpAllocWait(TP_WAIT **,PTP_WAIT_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *);\nNTSYSAPI NTSTATUS  WINAPI TpAllocWork(TP_WORK **,PTP_WORK_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *);\nNTSYSAPI void      WINAPI TpCallbackLeaveCriticalSectionOnCompletion(TP_CALLBACK_INSTANCE *,RTL_CRITICAL_SECTION *);\nNTSYSAPI NTSTATUS  WINAPI TpCallbackMayRunLong(TP_CALLBACK_INSTANCE *);\nNTSYSAPI void      WINAPI TpCallbackReleaseMutexOnCompletion(TP_CALLBACK_INSTANCE *,HANDLE);\nNTSYSAPI void      WINAPI TpCallbackReleaseSemaphoreOnCompletion(TP_CALLBACK_INSTANCE *,HANDLE,DWORD);\nNTSYSAPI void      WINAPI TpCallbackSetEventOnCompletion(TP_CALLBACK_INSTANCE *,HANDLE);\nNTSYSAPI void      WINAPI TpCallbackUnloadDllOnCompletion(TP_CALLBACK_INSTANCE *,HMODULE);\nNTSYSAPI void      WINAPI TpDisassociateCallback(TP_CALLBACK_INSTANCE *);\nNTSYSAPI BOOL      WINAPI TpIsTimerSet(TP_TIMER *);\nNTSYSAPI void      WINAPI TpPostWork(TP_WORK *);\nNTSYSAPI void      WINAPI TpReleaseCleanupGroup(TP_CLEANUP_GROUP *);\nNTSYSAPI void      WINAPI TpReleaseCleanupGroupMembers(TP_CLEANUP_GROUP *,BOOL,PVOID);\nNTSYSAPI void      WINAPI TpReleasePool(TP_POOL *);\nNTSYSAPI void      WINAPI TpReleaseTimer(TP_TIMER *);\nNTSYSAPI void      WINAPI TpReleaseWait(TP_WAIT *);\nNTSYSAPI void      WINAPI TpReleaseWork(TP_WORK *);\nNTSYSAPI void      WINAPI TpSetPoolMaxThreads(TP_POOL *,DWORD);\nNTSYSAPI BOOL      WINAPI TpSetPoolMinThreads(TP_POOL *,DWORD);\nNTSYSAPI void      WINAPI TpSetTimer(TP_TIMER *, LARGE_INTEGER *,LONG,LONG);\nNTSYSAPI void      WINAPI TpSetWait(TP_WAIT *,HANDLE,LARGE_INTEGER *);\nNTSYSAPI NTSTATUS  WINAPI TpSimpleTryPost(PTP_SIMPLE_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *);\nNTSYSAPI void      WINAPI TpWaitForTimer(TP_TIMER *,BOOL);\nNTSYSAPI void      WINAPI TpWaitForWait(TP_WAIT *,BOOL);\nNTSYSAPI void      WINAPI TpWaitForWork(TP_WORK *,BOOL);\n\n/* Wine internal functions */\n\nNTSYSAPI NTSTATUS CDECL wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *unix_name_ret,\n                                                   UINT disposition, BOOLEAN check_case );\nNTSYSAPI NTSTATUS CDECL wine_unix_to_nt_file_name( const ANSI_STRING *name, UNICODE_STRING *nt );\n\n\n/***********************************************************************\n * Inline functions\n */\n\n#define InitializeObjectAttributes(p,n,a,r,s) \\\n    do { \\\n        (p)->Length = sizeof(OBJECT_ATTRIBUTES); \\\n        (p)->RootDirectory = r; \\\n        (p)->Attributes = a; \\\n        (p)->ObjectName = n; \\\n        (p)->SecurityDescriptor = s; \\\n        (p)->SecurityQualityOfService = NULL; \\\n    } while (0)\n\n#define NtCurrentProcess() ((HANDLE)-1)\n\n#define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))\n#define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))\n#define RtlStoreUlong(p,v)  do { ULONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)\n#define RtlStoreUlonglong(p,v) do { ULONGLONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)\n#define RtlRetrieveUlong(p,s) memcpy((p), (s), sizeof(ULONG))\n#define RtlRetrieveUlonglong(p,s) memcpy((p), (s), sizeof(ULONGLONG))\n#define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))\n\nstatic inline BOOLEAN RtlCheckBit(PCRTL_BITMAP lpBits, ULONG ulBit)\n{\n    if (lpBits && ulBit < lpBits->SizeOfBitMap &&\n        lpBits->Buffer[ulBit >> 5] & (1 << (ulBit & 31)))\n        return TRUE;\n    return FALSE;\n}\n\n/* These are implemented as __fastcall, so we can't let Winelib apps link with them */\nstatic inline USHORT RtlUshortByteSwap(USHORT s)\n{\n    return (s >> 8) | (s << 8);\n}\nstatic inline ULONG RtlUlongByteSwap(ULONG i)\n{\n#if defined(__i386__) && defined(__GNUC__)\n    ULONG ret;\n    __asm__(\"bswap %0\" : \"=r\" (ret) : \"0\" (i) );\n    return ret;\n#else\n    return ((ULONG)RtlUshortByteSwap((USHORT)i) << 16) | RtlUshortByteSwap((USHORT)(i >> 16));\n#endif\n}\n\n/* list manipulation macros */\n#define InitializeListHead(le)  (void)((le)->Flink = (le)->Blink = (le))\n#define InsertHeadList(le,e)    do { PLIST_ENTRY f = (le)->Flink; (e)->Flink = f; (e)->Blink = (le); f->Blink = (e); (le)->Flink = (e); } while (0)\n#define InsertTailList(le,e)    do { PLIST_ENTRY b = (le)->Blink; (e)->Flink = (le); (e)->Blink = b; b->Flink = (e); (le)->Blink = (e); } while (0)\n#define IsListEmpty(le)         ((le)->Flink == (le))\n#define RemoveEntryList(e)      do { PLIST_ENTRY f = (e)->Flink, b = (e)->Blink; f->Blink = b; b->Flink = f; (e)->Flink = (e)->Blink = NULL; } while (0)\nstatic inline PLIST_ENTRY RemoveHeadList(PLIST_ENTRY le)\n{\n    PLIST_ENTRY f, b, e;\n\n    e = le->Flink;\n    f = le->Flink->Flink;\n    b = le->Flink->Blink;\n    f->Blink = b;\n    b->Flink = f;\n\n    if (e != le) e->Flink = e->Blink = NULL;\n    return e;\n}\nstatic inline PLIST_ENTRY RemoveTailList(PLIST_ENTRY le)\n{\n    PLIST_ENTRY f, b, e;\n\n    e = le->Blink;\n    f = le->Blink->Flink;\n    b = le->Blink->Blink;\n    f->Blink = b;\n    b->Flink = f;\n\n    if (e != le) e->Flink = e->Blink = NULL;\n    return e;\n}\n\n\n#ifdef __WINESRC__\n\n/* FIXME: private structure for vm86 mode, stored in teb->GdiTebBatch */\ntypedef struct\n{\n    DWORD        dpmi_vif;\n    DWORD        vm86_pending;\n} WINE_VM86_TEB_INFO;\n\nstatic inline WINE_VM86_TEB_INFO *get_vm86_teb_info(void)\n{\n    return (WINE_VM86_TEB_INFO *)&NtCurrentTeb()->GdiTebBatch;\n}\n\n/* The thread information for 16-bit threads */\n/* NtCurrentTeb()->SubSystemTib points to this */\ntypedef struct\n{\n    void           *unknown;    /* 00 unknown */\n    UNICODE_STRING *exe_name;   /* 04 exe module name */\n\n    /* the following fields do not exist under Windows */\n    UNICODE_STRING  exe_str;    /* exe name string pointed to by exe_name */\n    CURDIR          curdir;     /* current directory */\n    WCHAR           curdir_buffer[MAX_PATH];\n} WIN16_SUBSYSTEM_TIB;\n\n#endif /* __WINESRC__ */\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif  /* __WINE_WINTERNL_H */\n"
  },
  {
    "path": "wine/windows/wintrust.h",
    "content": "/*\n * Copyright (C) 2004 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINTRUST_H\n#define __WINE_WINTRUST_H\n\n#include <wincrypt.h>\n\n\n#include <pshpack8.h>\n\ntypedef struct WINTRUST_FILE_INFO_\n{\n    DWORD   cbStruct;\n    LPCWSTR pcwszFilePath;\n    HANDLE  hFile;\n    GUID*   pgKnownSubject;\n} WINTRUST_FILE_INFO, *PWINTRUST_FILE_INFO;\n\ntypedef struct WINTRUST_CATALOG_INFO_\n{\n    DWORD         cbStruct;\n    DWORD         dwCatalogVersion;\n    LPCWSTR       pcwszCatalogFilePath;\n    LPCWSTR       pcwszMemberTag;\n    LPCWSTR       pcwszMemberFilePath;\n    HANDLE        hMemberFile;\n    BYTE*         pbCalculatedFileHash;\n    DWORD         cbCalculatedFileHash;\n    PCCTL_CONTEXT pcCatalogContext;\n} WINTRUST_CATALOG_INFO, *PWINTRUST_CATALOG_INFO;\n\ntypedef struct WINTRUST_BLOB_INFO_\n{\n    DWORD   cbStruct;\n    GUID    gSubject;\n    LPCWSTR pcwszDisplayName;\n    DWORD   cbMemObject;\n    BYTE*   pbMemObject;\n    DWORD   cbMemSignedMsg;\n    BYTE*   pbMemSignedMsg;\n} WINTRUST_BLOB_INFO, *PWINTRUST_BLOB_INFO;\n\ntypedef struct WINTRUST_SGNR_INFO_\n{\n    DWORD             cbStruct;\n    LPCWSTR           pcwszDisplayName;\n    CMSG_SIGNER_INFO* psSignerInfo;\n    DWORD             chStores;\n    HCERTSTORE*       pahStores;\n} WINTRUST_SGNR_INFO, *PWINTRUST_SGNR_INFO;\n\ntypedef struct WINTRUST_CERT_INFO_\n{\n    DWORD         cbStruct;\n    LPCWSTR       pcwszDisplayName;\n    CERT_CONTEXT* psCertContext;\n    DWORD         chStores;\n    HCERTSTORE*   pahStores;\n    DWORD         dwFlags;\n    FILETIME*     psftVerifyAsOf;\n} WINTRUST_CERT_INFO, *PWINTRUST_CERT_INFO;\n\n#define WTCI_DONT_OPEN_STORES 0x00000001\n#define WTCI_OPEN_ONLY_ROOT   0x00000002\n\n/* dwUIChoice */\n#define WTD_UI_ALL                1\n#define WTD_UI_NONE               2\n#define WTD_UI_NOBAD              3\n#define WTD_UI_NOGOOD             4\n/* fdwRevocationChecks */\n#define WTD_REVOKE_NONE           0\n#define WTD_REVOKE_WHOLECHAIN     1\n/* dwUnionChoice */\n#define WTD_CHOICE_FILE           1\n#define WTD_CHOICE_CATALOG        2\n#define WTD_CHOICE_BLOB           3\n#define WTD_CHOICE_SIGNER         4\n#define WTD_CHOICE_CERT           5\n\ntypedef struct _WINTRUST_DATA\n{\n    DWORD  cbStruct;\n    LPVOID pPolicyCallbackData;\n    LPVOID pSIPClientData;\n    DWORD  dwUIChoice;\n    DWORD  fdwRevocationChecks;\n    DWORD  dwUnionChoice;\n    union\n    {\n        struct WINTRUST_FILE_INFO_*    pFile;\n        struct WINTRUST_CATALOG_INFO_* pCatalog;\n        struct WINTRUST_BLOB_INFO_*    pBlob;\n        struct WINTRUST_SGNR_INFO_*    pSgnr;\n        struct WINTRUST_CERT_INFO_*    pCert;\n    } DUMMYUNIONNAME;\n\n    DWORD  dwStateAction;\n    HANDLE hWVTStateData;\n    WCHAR* pwszURLReference;\n    DWORD  dwProvFlags;\n    DWORD  dwUIContext;\n    struct WINTRUST_SIGNATURE_SETTINGS_ *pSignatureSettings;\n} WINTRUST_DATA, *PWINTRUST_DATA;\n\n#define WTD_STATEACTION_IGNORE           0\n#define WTD_STATEACTION_VERIFY           1\n#define WTD_STATEACTION_CLOSE            2\n#define WTD_STATEACTION_AUTO_CACHE       3\n#define WTD_STATEACTION_AUTO_CACHE_FLUSH 4\n\n#define WTD_PROV_FLAGS_MASK                     0x0000ffff\n#define WTD_USE_IE4_TRUST_FLAG                  0x00000001\n#define WTD_NO_IE4_CHAIN_FLAG                   0x00000002\n#define WTD_NO_POLICY_USAGE_FLAG                0x00000004\n#define WTD_REVOCATION_CHECK_NONE               0x00000010\n#define WTD_REVOCATION_CHECK_END_CERT           0x00000020\n#define WTD_REVOCATION_CHECK_CHAIN              0x00000040\n#define WTD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x00000080\n#define WTD_SAFER_FLAG                          0x00000100\n#define WTD_HASH_ONLY_FLAG                      0x00000200\n#define WTD_USE_DEFAULT_OSVER_CHECK             0x00000400\n#define WTD_LIFETIME_SIGNING_FLAG               0x00000800\n#define WTD_CACHE_ONLY_URL_RETRIEVAL            0x00001000\n\n#define WTD_UICONTEXT_EXECUTE 0\n#define WTD_UICONTEXT_INSTALL 1\n\ntypedef struct WINTRUST_SIGNATURE_SETTINGS_\n{\n    DWORD cbStruct;\n    DWORD dwIndex;\n    DWORD dwFlags;\n    DWORD cSecondarySigs;\n    DWORD dwVerifiedSigIndex;\n    CERT_STRONG_SIGN_PARA *pCryptoPolicy;\n} WINTRUST_SIGNATURE_SETTINGS, *PWINTRUST_SIGNATURE_SETTINGS;\n\n#define WSS_VERIFY_SPECIFIC               0x00000001\n#define WSS_GET_SECONDARY_SIG_COUNT       0x00000002\n#define WSS_VERIFY_SEALING                0x00000004\n#define WSS_INPUT_FLAG_MASK               0x00000007\n\n#define WSS_OUT_SEALING_STATUS_VERIFIED   0x80000000\n#define WSS_OUT_HAS_SEALING_INTENT        0x40000000\n#define WSS_OUT_FILE_SUPPORTS_SEAL        0x20000000\n#define WSS_OUTPUT_FLAG_MASK              0xe0000000\n\ntypedef struct _CRYPT_TRUST_REG_ENTRY\n{\n    DWORD cbStruct;\n    WCHAR *pwszDLLName;\n    WCHAR *pwszFunctionName;\n} CRYPT_TRUST_REG_ENTRY, *PCRYPT_TRUST_REG_ENTRY;\n\ntypedef struct _CRYPT_REGISTER_ACTIONID\n{\n    DWORD cbStruct;\n    CRYPT_TRUST_REG_ENTRY sInitProvider;\n    CRYPT_TRUST_REG_ENTRY sObjectProvider;\n    CRYPT_TRUST_REG_ENTRY sSignatureProvider;\n    CRYPT_TRUST_REG_ENTRY sCertificateProvider;\n    CRYPT_TRUST_REG_ENTRY sCertificatePolicyProvider;\n    CRYPT_TRUST_REG_ENTRY sFinalPolicyProvider;\n    CRYPT_TRUST_REG_ENTRY sTestPolicyProvider;\n    CRYPT_TRUST_REG_ENTRY sCleanupProvider;\n} CRYPT_REGISTER_ACTIONID, *PCRYPT_REGISTER_ACTIONID;\n\ntypedef struct _CRYPT_PROVIDER_REGDEFUSAGE\n{\n    DWORD cbStruct;\n    GUID  *pgActionID;\n    WCHAR *pwszDllName;\n    char  *pwszLoadCallbackDataFunctionName;\n    char  *pwszFreeCallbackDataFunctionName;\n} CRYPT_PROVIDER_REGDEFUSAGE, *PCRYPT_PROVIDER_REGDEFUSAGE;\n\ntypedef struct _CRYPT_PROVUI_DATA {\n    DWORD cbStruct;\n    DWORD dwFinalError;\n    WCHAR *pYesButtonText;\n    WCHAR *pNoButtonText;\n    WCHAR *pMoreInfoButtonText;\n    WCHAR *pAdvancedLinkText;\n    WCHAR *pCopyActionText;\n    WCHAR *pCopyActionTextNoTS;\n    WCHAR *pCopyActionTextNotSigned;\n} CRYPT_PROVUI_DATA, *PCRYPT_PROVUI_DATA;\n\ntypedef struct _CRYPT_PROVIDER_CERT {\n    DWORD               cbStruct;\n    PCCERT_CONTEXT      pCert;\n    BOOL                fCommercial;\n    BOOL                fTrustedRoot;\n    BOOL                fSelfSigned;\n    BOOL                fTestCert;\n    DWORD               dwRevokedReason;\n    DWORD               dwConfidence;\n    DWORD               dwError;\n    CTL_CONTEXT        *pTrustListContext;\n    BOOL                fTrustListSignerCert;\n    PCCTL_CONTEXT       pCtlContext;\n    DWORD               dwCtlError;\n    BOOL                fIsCyclic;\n    PCERT_CHAIN_ELEMENT pChainElement;\n} CRYPT_PROVIDER_CERT, *PCRYPT_PROVIDER_CERT;\n\n#define CERT_CONFIDENCE_SIG       0x10000000\n#define CERT_CONFIDENCE_TIME      0x01000000\n#define CERT_CONFIDENCE_TIMENEST  0x00100000\n#define CERT_CONFIDENCE_AUTHIDEXT 0x00010000\n#define CERT_CONFIDENCE_HYGIENE   0x00001000\n#define CERT_CONFIDENCE_HIGHEST   0x11111000\n\ntypedef struct _CRYPT_PROVIDER_SGNR {\n    DWORD                cbStruct;\n    FILETIME             sftVerifyAsOf;\n    DWORD                csCertChain;\n    CRYPT_PROVIDER_CERT *pasCertChain;\n    DWORD                dwSignerType;\n    CMSG_SIGNER_INFO    *psSigner;\n    DWORD                dwError;\n    DWORD                csCounterSigners;\n    struct _CRYPT_PROVIDER_SGNR *pasCounterSigners;\n    PCCERT_CHAIN_CONTEXT pChainContext;\n} CRYPT_PROVIDER_SGNR, *PCRYPT_PROVIDER_SGNR;\n\n#define SGNR_TYPE_TIMESTAMP 0x00000010\n\ntypedef struct _CRYPT_PROVIDER_PRIVDATA {\n    DWORD cbStruct;\n    GUID  gProviderID;\n    DWORD cbProvData;\n    void *pvProvData;\n} CRYPT_PROVIDER_PRIVDATA, *PCRYPT_PROVIDER_PRIVDATA;\n\nstruct _CRYPT_PROVIDER_DATA;\n\n#define TRUSTERROR_STEP_WVTPARAMS               0\n#define TRUSTERROR_STEP_FILEIO                  2\n#define TRUSTERROR_STEP_SIP                     3\n#define TRUSTERROR_STEP_SIPSUBJINFO             5\n#define TRUSTERROR_STEP_CATALOGFILE             6\n#define TRUSTERROR_STEP_CERTSTORE               7\n#define TRUSTERROR_STEP_MESSAGE                 8\n#define TRUSTERROR_STEP_MSG_SIGNERCOUNT         9\n#define TRUSTERROR_STEP_MSG_INNERCNTTYPE       10\n#define TRUSTERROR_STEP_MSG_INNERCNT           11\n#define TRUSTERROR_STEP_MSG_STORE              12\n#define TRUSTERROR_STEP_MSG_SIGNERINFO         13\n#define TRUSTERROR_STEP_MSG_SIGNERCERT         14\n#define TRUSTERROR_STEP_MSG_CERTCHAIN          15\n#define TRUSTERROR_STEP_MSG_COUNTERSIGINFO     16\n#define TRUSTERROR_STEP_MSG_COUNTERSIGCERT     17\n#define TRUSTERROR_STEP_VERIFY_MSGHASH         18\n#define TRUSTERROR_STEP_VERIFY_MSGINDIRECTDATA 19\n#define TRUSTERROR_STEP_FINAL_WVTINIT          30\n#define TRUSTERROR_STEP_FINAL_INITPROV         31\n#define TRUSTERROR_STEP_FINAL_OBJPROV          32\n#define TRUSTERROR_STEP_FINAL_SIGPROV          33\n#define TRUSTERROR_STEP_FINAL_CERTPROV         34\n#define TRUSTERROR_STEP_FINAL_CERTCHKPROV      35\n#define TRUSTERROR_STEP_FINAL_POLICYPROV       36\n#define TRUSTERROR_STEP_FINAL_UIPROV           37\n\n#define TRUSTERROR_MAX_STEPS                   38\n\ntypedef void * (__WINE_ALLOC_SIZE(1) WINAPI *PFN_CPD_MEM_ALLOC)(DWORD cbSize);\ntypedef void (WINAPI *PFN_CPD_MEM_FREE)(void *pvMem2Free);\ntypedef BOOL (WINAPI *PFN_CPD_ADD_STORE)(struct _CRYPT_PROVIDER_DATA *pProvData,\n HCERTSTORE hStore2Add);\ntypedef BOOL (WINAPI *PFN_CPD_ADD_SGNR)(struct _CRYPT_PROVIDER_DATA *pProvData,\n BOOL fCounterSigner, DWORD idxSigner, struct _CRYPT_PROVIDER_SGNR *pSgnr2Add);\ntypedef BOOL (WINAPI *PFN_CPD_ADD_CERT)(struct _CRYPT_PROVIDER_DATA *pProvData,\n DWORD idxSigner, BOOL fCounterSigner, DWORD idxCounterSigner,\n PCCERT_CONTEXT pCert2Add);\ntypedef BOOL (WINAPI *PFN_CPD_ADD_PRIVDATA)(struct _CRYPT_PROVIDER_DATA *pProvData,\n struct _CRYPT_PROVIDER_PRIVDATA *pPrivData2Add);\ntypedef HRESULT (WINAPI *PFN_PROVIDER_INIT_CALL)(\n struct _CRYPT_PROVIDER_DATA *pProvData);\ntypedef HRESULT (WINAPI *PFN_PROVIDER_OBJTRUST_CALL)(\n struct _CRYPT_PROVIDER_DATA *pProvData);\ntypedef HRESULT (WINAPI *PFN_PROVIDER_SIGTRUST_CALL)(\n struct _CRYPT_PROVIDER_DATA *pProvData);\ntypedef HRESULT (WINAPI *PFN_PROVIDER_CERTTRUST_CALL)(\n struct _CRYPT_PROVIDER_DATA *pProvData);\ntypedef HRESULT (WINAPI *PFN_PROVIDER_FINALPOLICY_CALL)(\n struct _CRYPT_PROVIDER_DATA *pProvData);\ntypedef HRESULT (WINAPI *PFN_PROVIDER_TESTFINALPOLICY_CALL)(\n struct _CRYPT_PROVIDER_DATA *pProvData);\ntypedef HRESULT (WINAPI *PFN_PROVIDER_CLEANUP_CALL)(\n struct _CRYPT_PROVIDER_DATA *pProvData);\ntypedef BOOL (WINAPI *PFN_PROVIDER_CERTCHKPOLICY_CALL)(\n struct _CRYPT_PROVIDER_DATA *pProvData, DWORD idxSigner,\n BOOL fCounterSignerChain, DWORD idxCounterSigner);\n\ntypedef struct _CRYPT_PROVIDER_FUNCTIONS {\n    DWORD cbStruct;\n    PFN_CPD_MEM_ALLOC    pfnAlloc;\n    PFN_CPD_MEM_FREE     pfnFree;\n    PFN_CPD_ADD_STORE    pfnAddStore2Chain;\n    PFN_CPD_ADD_SGNR     pfnAddSgnr2Chain;\n    PFN_CPD_ADD_CERT     pfnAddCert2Chain;\n    PFN_CPD_ADD_PRIVDATA pfnAddPrivData2Chain;\n    PFN_PROVIDER_INIT_CALL            pfnInitialize;\n    PFN_PROVIDER_OBJTRUST_CALL        pfnObjectTrust;\n    PFN_PROVIDER_SIGTRUST_CALL        pfnSignatureTrust;\n    PFN_PROVIDER_CERTTRUST_CALL       pfnCertificateTrust;\n    PFN_PROVIDER_FINALPOLICY_CALL     pfnFinalPolicy;\n    PFN_PROVIDER_CERTCHKPOLICY_CALL   pfnCertCheckPolicy;\n    PFN_PROVIDER_TESTFINALPOLICY_CALL pfnTestFinalPolicy;\n    struct _CRYPT_PROVUI_FUNCS       *psUIpfns;\n    PFN_PROVIDER_CLEANUP_CALL         pfnCleanupPolicy;\n} CRYPT_PROVIDER_FUNCTIONS, *PCRYPT_PROVIDER_FUNCTIONS;\n\nstruct SIP_DISPATCH_INFO_;\nstruct SIP_SUBJECTINFO_;\nstruct SIP_INDIRECT_DATA_;\n\ntypedef struct _PROVDATA_SIP {\n    DWORD cbStruct;\n    GUID  gSubject;\n    struct SIP_DISPATCH_INFO_ *pSip;\n    struct SIP_DISPATCH_INFO_ *pCATSip;\n    struct SIP_SUBJECTINFO_   *psSipSubjectInfo;\n    struct SIP_SUBJECTINFO_   *psSipCATSubjectInfo;\n    struct SIP_INDIRECT_DATA_ *psIndirectData;\n} PROVDATA_SIP, *PPROVDATA_SIP;\n\ntypedef struct _CRYPT_PROVIDER_DATA {\n    DWORD                     cbStruct;\n    WINTRUST_DATA            *pWintrustData;\n    BOOL                      fOpenedFile;\n    HWND                      hWndParent;\n    GUID                     *pgActionID;\n    HCRYPTPROV                hProv;\n    DWORD                     dwError;\n    DWORD                     dwRegSecuritySettings;\n    DWORD                     dwRegPolicySettings;\n    CRYPT_PROVIDER_FUNCTIONS *psPfns;\n    DWORD                     cdwTrustStepErrors;\n    DWORD                    *padwTrustStepErrors;\n    DWORD                     chStores;\n    HCERTSTORE               *pahStores;\n    DWORD                     dwEncoding;\n    HCRYPTMSG                 hMsg;\n    DWORD                     csSigners;\n    CRYPT_PROVIDER_SGNR      *pasSigners;\n    DWORD                     csProvPrivData;\n    CRYPT_PROVIDER_PRIVDATA  *pasProvPrivData;\n    DWORD                     dwSubjectChoice;\n    union {\n        struct _PROVDATA_SIP        *pPDSip;\n    } DUMMYUNIONNAME;\n    char                     *pszUsageOID;\n    BOOL                      fRecallWithState;\n    FILETIME                  sftSystemTime;\n    char                      *pszCTLSignerUsageOID;\n    DWORD                     dwProvFlags;\n    DWORD                     dwFinalError;\n    PCERT_USAGE_MATCH         pRequestUsage;\n    DWORD                     dwTrustPubSettings;\n    DWORD                     dwUIStateFlags;\n    struct _CRYPT_PROVIDER_SIGSTATE     *pSigState;\n    struct WINTRUST_SIGNATURE_SETTINGS_ *pSigSettings;\n} CRYPT_PROVIDER_DATA, *PCRYPT_PROVIDER_DATA;\n\n#define CPD_CHOICE_SIP 1\n\n#define CPD_USE_NT5_CHAIN_FLAG                  0x80000000\n#define CPD_REVOCATION_CHECK_NONE               0x00010000\n#define CPD_REVOCATION_CHECK_END_CERT           0x00020000\n#define CPD_REVOCATION_CHECK_CHAIN              0x00040000\n#define CPD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x00080000\n\n#define CPD_UISTATE_MODE_PROMPT 0x00000000\n#define CPD_UISTATE_MODE_BLOCK  0x00000001\n#define CPD_UISTATE_MODE_ALLOW  0x00000002\n#define CPD_UISTATE_MODE_MASK   0x00000003\n\ntypedef struct _CRYPT_PROVIDER_SIGSTATE\n{\n    DWORD cbStruct;\n    HCRYPTMSG *rhSecondarySigs;\n    HCRYPTMSG hPrimarySig;\n    BOOL fFirstAttemptMade;\n    BOOL fNoMoreSigs;\n    DWORD cSecondarySigs;\n    DWORD dwCurrentIndex;\n    BOOL fSupportMultiSig;\n    DWORD dwCryptoPolicySupport;\n    DWORD iAttemptCount;\n    BOOL fCheckedSealing;\n    struct _SEALING_SIGNATURE_ATTRIBUTE *pSealingSignature;\n} CRYPT_PROVIDER_SIGSTATE, *PCRYPT_PROVIDER_SIGSTATE;\n\n/* Flags for dwCryptoPolicySupport */\n#define WSS_OBJTRUST_SUPPORT       0x00000001\n#define WSS_SIGTRUST_SUPPORT       0x00000002\n#define WSS_CERTTRUST_SUPPORT      0x00000004\n\ntypedef BOOL (*PFN_PROVUI_CALL)(HWND hWndSecurityDialog,\n struct _CRYPT_PROVIDER_DATA *pProvData);\n\ntypedef struct _CRYPT_PROVUI_FUNCS {\n    DWORD cbStruct;\n    CRYPT_PROVUI_DATA *psUIData;\n    PFN_PROVUI_CALL pfnOnMoreInfoClick;\n    PFN_PROVUI_CALL pfnOnMoreInfoClickDefault;\n    PFN_PROVUI_CALL pfnOnAdvancedClick;\n    PFN_PROVUI_CALL pfnOnAdvancedClickDefault;\n} CRYPT_PROVUI_FUNCS, *PCRYPT_PROVUI_FUNCS;\n\n#include <poppack.h>\n\n#define WVT_OFFSETOF(t,f)     ((ULONG)(offsetof(t, f)))\n#define WVT_ISINSTRUCT(t,s,f) (WVT_OFFSETOF(t,f) + sizeof(((t*)0)->f) <= (s))\n#define WVT_IS_CBSTRUCT_GT_MEMBEROFFSET(t,s,f) WVT_ISINSTRUCT(t,s,f)\n\n#define WTPF_TRUSTTEST            0x00000020\n#define WTPF_TESTCANBEVALID       0x00000080\n#define WTPF_IGNOREEXPIRATION     0x00000100\n#define WTPF_IGNOREREVOKATION     0x00000200\n#define WTPF_OFFLINEOK_IND        0x00000400\n#define WTPF_OFFLINEOK_COM        0x00000800\n#define WTPF_OFFLINEOKNBU_IND     0x00001000\n#define WTPF_OFFLINEOKNBU_COM     0x00002000\n#define WTPF_VERIFY_V1_OFF        0x00010000\n#define WTPF_IGNOREREVOCATIONONTS 0x00020000\n#define WTPF_ALLOWONLYPERTRUST    0x00040000\n\n#define WT_ADD_ACTION_ID_RET_RESULT_FLAG 1\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#if defined(__GNUC__)\n#define WT_PROVIDER_CERTTRUST_FUNCTION (const WCHAR []) \\\n    {'W','i','n','t','r','u','s','t','C','e','r','t','i','f','i','c','a','t','e','T','r','u','s','t', 0}\n#elif defined(_MSC_VER)\n#define WT_PROVIDER_CERTTRUST_FUNCTION L\"WintrustCertificateTrust\"\n#else\nstatic const WCHAR WT_PROVIDER_CERTTRUST_FUNCTION[] =\n    {'W','i','n','t','r','u','s','t','C','e','r','t','i','f','i','c','a','t','e','T','r','u','s','t', 0};\n#endif\n\nBOOL      WINAPI WintrustAddActionID(GUID*,DWORD,CRYPT_REGISTER_ACTIONID*);\nBOOL      WINAPI WintrustRemoveActionID(GUID*);\nBOOL      WINAPI WintrustLoadFunctionPointers(GUID*,CRYPT_PROVIDER_FUNCTIONS*);\nBOOL      WINAPI WintrustAddDefaultForUsage(const char*,CRYPT_PROVIDER_REGDEFUSAGE*);\nvoid      WINAPI WintrustGetRegPolicyFlags(DWORD*);\nBOOL      WINAPI WintrustSetRegPolicyFlags(DWORD);\nLONG      WINAPI WinVerifyTrust(HWND,GUID*,LPVOID);\nHRESULT   WINAPI WinVerifyTrustEx(HWND,GUID*,WINTRUST_DATA*);\n\nCRYPT_PROVIDER_CERT * WINAPI WTHelperGetProvCertFromChain(\n CRYPT_PROVIDER_SGNR *pSgnr, DWORD idxCert);\nCRYPT_PROVIDER_SGNR * WINAPI WTHelperGetProvSignerFromChain(\n CRYPT_PROVIDER_DATA *pProvData, DWORD idxSigner, BOOL fCounterSigner,\n DWORD idxCounterSigner);\nCRYPT_PROVIDER_DATA * WINAPI WTHelperProvDataFromStateData(HANDLE hStateData);\nCRYPT_PROVIDER_PRIVDATA * WINAPI WTHelperGetProvPrivateDataFromChain(CRYPT_PROVIDER_DATA *,GUID *);\n\n#define SPC_INDIRECT_DATA_OBJID      \"1.3.6.1.4.1.311.2.1.4\"\n#define SPC_SP_AGENCY_INFO_OBJID     \"1.3.6.1.4.1.311.2.1.10\"\n#define SPC_STATEMENT_TYPE_OBJID     \"1.3.6.1.4.1.311.2.1.11\"\n#define SPC_SP_OPUS_INFO_OBJID       \"1.3.6.1.4.1.311.2.1.12\"\n#define SPC_CERT_EXTENSIONS_OBJID    \"1.3.6.1.4.1.311.2.1.14\"\n#define SPC_PE_IMAGE_DATA_OBJID      \"1.3.6.1.4.1.311.2.1.15\"\n#define SPC_RAW_FILE_DATA_OBJID      \"1.3.6.1.4.1.311.2.1.18\"\n#define SPC_STRUCTURED_STORAGE_DATA_OBJID \"1.3.6.1.4.1.311.2.1.19\"\n#define SPC_JAVA_CLASS_DATA_OBJID    \"1.3.6.1.4.1.311.2.1.20\"\n#define SPC_INDIVIDUAL_SP_KEY_PURPOSE_OBJID \"1.3.6.1.4.1.311.2.1.21\"\n#define SPC_COMMERCIAL_SP_KEY_PURPOSE_OBJID \"1.3.6.1.4.1.311.2.1.22\"\n#define SPC_CAB_DATA_OBJID           \"1.3.6.1.4.1.311.2.1.25\"\n#define SPC_GLUE_RDN_OBJID           \"1.3.6.1.4.1.311.2.1.25\"\n#define SPC_MINIMAL_CRITERIA_OBJID   \"1.3.6.1.4.1.311.2.1.26\"\n#define SPC_FINANCIAL_CRITERIA_OBJID \"1.3.6.1.4.1.311.2.1.27\"\n#define SPC_LINK_OBJID               \"1.3.6.1.4.1.311.2.1.28\"\n#define SPC_SIGINFO_OBJID            \"1.3.6.1.4.1.311.2.1.30\"\n#define CAT_NAMEVALUE_OBJID          \"1.3.6.1.4.1.311.12.2.1\"\n#define CAT_MEMBERINFO_OBJID         \"1.3.6.1.4.1.311.12.2.2\"\n\n#define SPC_SP_AGENCY_INFO_STRUCT        ((LPCSTR) 2000)\n#define SPC_MINIMAL_CRITERIA_STRUCT      ((LPCSTR) 2001)\n#define SPC_FINANCIAL_CRITERIA_STRUCT    ((LPCSTR) 2002)\n#define SPC_INDIRECT_DATA_CONTENT_STRUCT ((LPCSTR) 2003)\n#define SPC_PE_IMAGE_DATA_STRUCT         ((LPCSTR) 2004)\n#define SPC_LINK_STRUCT                  ((LPCSTR) 2005)\n#define SPC_STATEMENT_TYPE_STRUCT        ((LPCSTR) 2006)\n#define SPC_SP_OPUS_INFO_STRUCT          ((LPCSTR) 2007)\n#define SPC_CAB_DATA_STRUCT              ((LPCSTR) 2008)\n#define SPC_JAVA_CLASS_DATA_STRUCT       ((LPCSTR) 2009)\n#define SPC_SIGINFO_STRUCT               ((LPCSTR) 2130)\n#define CAT_NAMEVALUE_STRUCT             ((LPCSTR) 2221)\n#define CAT_MEMBERINFO_STRUCT            ((LPCSTR) 2222)\n\n#define SPC_UUID_LENGTH 16\ntypedef BYTE SPC_UUID[SPC_UUID_LENGTH];\n\ntypedef struct _SPC_SERIALIZED_OBJECT\n{\n    SPC_UUID        ClassId;\n    CRYPT_DATA_BLOB SerializedData;\n} SPC_SERIALIZED_OBJECT, *PSPC_SERIALIZED_OBJECT;\n\ntypedef struct SPC_SIGINFO_\n{\n    DWORD dwSipVersion;\n    GUID  gSIPGuid;\n    DWORD dwReserved1;\n    DWORD dwReserved2;\n    DWORD dwReserved3;\n    DWORD dwReserved4;\n    DWORD dwReserved5;\n} SPC_SIGINFO, *PSPC_SIGINFO;\n\n#define SPC_URL_LINK_CHOICE     1\n#define SPC_MONIKER_LINK_CHOICE 2\n#define SPC_FILE_LINK_CHOICE    3\n\ntypedef struct SPC_LINK_\n{\n    DWORD dwLinkChoice;\n    union\n    {\n        LPWSTR                pwszUrl;\n        SPC_SERIALIZED_OBJECT Moniker;\n        LPWSTR                pwszFile;\n    } DUMMYUNIONNAME;\n} SPC_LINK, *PSPC_LINK;\n\ntypedef struct _SPC_PE_IMAGE_DATA\n{\n    CRYPT_BIT_BLOB Flags;\n    PSPC_LINK      pFile;\n} SPC_PE_IMAGE_DATA, *PSPC_PE_IMAGE_DATA;\n\ntypedef struct _SPC_INDIRECT_DATA_CONTENT\n{\n    CRYPT_ATTRIBUTE_TYPE_VALUE Data;\n    CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm;\n    CRYPT_HASH_BLOB            Digest;\n} SPC_INDIRECT_DATA_CONTENT, *PSPC_INDIRECT_DATA_CONTENT;\n\ntypedef struct _SPC_FINANCIAL_CRITERIA\n{\n    BOOL fFinancialInfoAvailable;\n    BOOL fMeetsCriteria;\n} SPC_FINANCIAL_CRITERIA, *PSPC_FINANCIAL_CRITERIA;\n\ntypedef struct _SPC_IMAGE\n{\n    struct SPC_LINK_ *pImageLink;\n    CRYPT_DATA_BLOB   Bitmap;\n    CRYPT_DATA_BLOB   Metafile;\n    CRYPT_DATA_BLOB   EnhancedMetafile;\n    CRYPT_DATA_BLOB   GifFile;\n} SPC_IMAGE, *PSPC_IMAGE;\n\ntypedef struct _SPC_SP_AGENCY_INFO\n{\n    struct SPC_LINK_ *pPolicyInformation;\n    LPWSTR            pwszPolicyDisplayText;\n    PSPC_IMAGE        pLogoImage;\n    struct SPC_LINK_ *pLogoLink;\n} SPC_SP_AGENCY_INFO, *PSPC_SP_AGENCY_INFO;\n\ntypedef struct _SPC_STATEMENT_TYPE\n{\n    DWORD  cKeyPurposeId;\n    LPSTR *rgpszKeyPurposeId;\n} SPC_STATEMENT_TYPE, *PSPC_STATEMENT_TYPE;\n\ntypedef struct _SPC_SP_OPUS_INFO\n{\n    LPCWSTR           pwszProgramName;\n    struct SPC_LINK_ *pMoreInfo;\n    struct SPC_LINK_ *pPublisherInfo;\n} SPC_SP_OPUS_INFO, *PSPC_SP_OPUS_INFO;\n\ntypedef struct _CAT_NAMEVALUE\n{\n    LPWSTR          pwszTag;\n    DWORD           fdwFlags;\n    CRYPT_DATA_BLOB Value;\n} CAT_NAMEVALUE, *PCAT_NAMEVALUE;\n\ntypedef struct _CAT_MEMBERINFO\n{\n    LPWSTR pwszSubjGuid;\n    DWORD  dwCertVersion;\n} CAT_MEMBERINFO, *PCAT_MEMBERINFO;\n\n/* PSDK protects the remaining defines with WT_DEFINE_ALL_APIS, but it's\n * defined by default.  No need to protect against bad headers from old PSDKs.\n */\n\ntypedef struct _WIN_CERTIFICATE {\n  DWORD dwLength;\n  WORD  wRevision;                   /*  WIN_CERT_REVISION_xxx */\n  WORD  wCertificateType;            /*  WIN_CERT_TYPE_xxx */\n  BYTE  bCertificate[ANYSIZE_ARRAY];\n} WIN_CERTIFICATE, *LPWIN_CERTIFICATE;\n\n#define WIN_CERT_REVISION_1_0 0x0100\n#define WIN_CERT_REVISION_2_0 0x0200\n\n#define WIN_CERT_TYPE_X509             0x0001 /* X.509 Certificate */\n#define WIN_CERT_TYPE_PKCS_SIGNED_DATA 0x0002 /* PKCS SignedData */\n#define WIN_CERT_TYPE_RESERVED_1       0x0003 /* Reserved */\n#define WIN_CERT_TYPE_TS_STACK_SIGNED  0x0004\n\ntypedef LPVOID WIN_TRUST_SUBJECT;\n\ntypedef struct _WIN_TRUST_ACTDATA_CONTEXT_WITH_SUBJECT\n{\n    HANDLE            hClientToken;\n    GUID             *SubjectType;\n    WIN_TRUST_SUBJECT Subject;\n} WIN_TRUST_ACTDATA_CONTEXT_WITH_SUBJECT,\n *LPWIN_TRUST_ACTDATA_CONTEXT_WITH_SUBJECT;\n\ntypedef struct _WIN_TRUST_ACTDATA_CONTEXT_SUBJECT_ONLY\n{\n    GUID             *SubjectType;\n    WIN_TRUST_SUBJECT Subject;\n} WIN_TRUST_ACTDATA_CONTEXT_SUBJECT_ONLY,\n *LPWIN_TRUST_ACTDATA_CONTEXT_SUBJECT_ONLY;\n\ntypedef struct _WIN_TRUST_SUBJECT_FILE\n{\n    HANDLE  hFile;\n    LPCWSTR lpPath;\n} WIN_TRUST_SUBJECT_FILE, *LPWIN_TRUST_SUBJECT_FILE;\n\ntypedef struct _WIN_TRUST_SUBJECT_FILE_AND_DISPLAY\n{\n    HANDLE  hFile;\n    LPCWSTR lpPath;\n    LPCWSTR lpDisplayName;\n} WIN_TRUST_SUBJECT_FILE_AND_DISPLAY, *LPWIN_TRUST_SUBJECT_FILE_AND_DISPLAY;\n\n#define WIN_SPUB_ACTION_PUBLISHED_SOFTWARE \\\n     { 0x64b9d180, 0x8da2, 0x11cf, { 0x87,0x36,0x00,0xaa,0x00,0xa4,0x85,0xeb }}\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/winuser.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _WINUSER_\n#define _WINUSER_\n\n#if !defined(_USER32_)\n#define WINUSERAPI DECLSPEC_IMPORT\n#else\n#define WINUSERAPI\n#endif\n\n#ifndef RC_INVOKED\n#include <stdarg.h>\n#endif\n#include <winuser.rh>\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Define a bunch of callback types */\n\n#if defined(STRICT)\ntypedef INT_PTR (CALLBACK *DLGPROC)(HWND,UINT,WPARAM,LPARAM);\ntypedef BOOL    (CALLBACK *DRAWSTATEPROC)(HDC,LPARAM,WPARAM,int,int);\ntypedef INT     (CALLBACK *EDITWORDBREAKPROCA)(LPSTR,INT,INT,INT);\ntypedef INT     (CALLBACK *EDITWORDBREAKPROCW)(LPWSTR,INT,INT,INT);\ntypedef BOOL    (CALLBACK *GRAYSTRINGPROC)(HDC,LPARAM,INT);\ntypedef LRESULT (CALLBACK *HOOKPROC)(INT,WPARAM,LPARAM);\ntypedef BOOL    (CALLBACK *NAMEENUMPROCA)(LPSTR,LPARAM);\ntypedef BOOL    (CALLBACK *NAMEENUMPROCW)(LPWSTR,LPARAM);\ntypedef BOOL    (CALLBACK *PROPENUMPROCA)(HWND,LPCSTR,HANDLE);\ntypedef BOOL    (CALLBACK *PROPENUMPROCW)(HWND,LPCWSTR,HANDLE);\ntypedef BOOL    (CALLBACK *PROPENUMPROCEXA)(HWND,LPSTR,HANDLE,ULONG_PTR);\ntypedef BOOL    (CALLBACK *PROPENUMPROCEXW)(HWND,LPWSTR,HANDLE,ULONG_PTR);\ntypedef VOID    (CALLBACK *SENDASYNCPROC)(HWND,UINT,ULONG_PTR,LRESULT);\ntypedef VOID    (CALLBACK *TIMERPROC)(HWND,UINT,UINT_PTR,DWORD);\ntypedef VOID    (CALLBACK *WINEVENTPROC)(HWINEVENTHOOK,DWORD,HWND,LONG,LONG,\n                                         DWORD,DWORD);\ntypedef BOOL    (CALLBACK *WNDENUMPROC)(HWND,LPARAM);\n\n#else\ntypedef FARPROC DLGPROC;\ntypedef FARPROC DRAWSTATEPROC;\ntypedef FARPROC EDITWORDBREAKPROCA;\ntypedef FARPROC EDITWORDBREAKPROCW;\ntypedef FARPROC GRAYSTRINGPROC;\ntypedef FARPROC HOOKPROC;\ntypedef FARPROC NAMEENUMPROCA;\ntypedef FARPROC NAMEENUMPROCW;\ntypedef FARPROC PROPENUMPROCA;\ntypedef FARPROC PROPENUMPROCW;\ntypedef FARPROC PROPENUMPROCEXA;\ntypedef FARPROC PROPENUMPROCEXW;\ntypedef FARPROC SENDASYNCPROC;\ntypedef FARPROC TIMERPROC;\ntypedef FARPROC WINEVENTPROC;\ntypedef FARPROC WNDENUMPROC;\n#endif /* STRICT */\n\ntypedef NAMEENUMPROCA WINSTAENUMPROCA;\ntypedef NAMEENUMPROCA DESKTOPENUMPROCA;\ntypedef NAMEENUMPROCW WINSTAENUMPROCW;\ntypedef NAMEENUMPROCW DESKTOPENUMPROCW;\n\ntypedef LRESULT (CALLBACK *WNDPROC)(HWND,UINT,WPARAM,LPARAM);\n\nDECL_WINELIB_TYPE_AW(DESKTOPENUMPROC)\nDECL_WINELIB_TYPE_AW(EDITWORDBREAKPROC)\nDECL_WINELIB_TYPE_AW(NAMEENUMPROC)\nDECL_WINELIB_TYPE_AW(PROPENUMPROC)\nDECL_WINELIB_TYPE_AW(PROPENUMPROCEX)\nDECL_WINELIB_TYPE_AW(WINSTAENUMPROC)\n\n\ntypedef HANDLE HDWP;\ntypedef void* HPOWERNOTIFY;\n\n#define UOI_FLAGS       1\n#define UOI_NAME        2\n#define UOI_TYPE        3\n#define UOI_USER_SID    4\n\n#define WSF_VISIBLE     1\n#define DF_ALLOWOTHERACCOUNTHOOK  1\n\ntypedef struct tagUSEROBJECTFLAGS {\n    BOOL fInherit;\n    BOOL fReserved;\n    DWORD dwFlags;\n} USEROBJECTFLAGS, *PUSEROBJECTFLAGS;\n\ntypedef struct tagBSMINFO {\n    UINT  cbSize;\n    HDESK hdesk;\n    HWND  hwnd;\n    LUID  luid;\n} BSMINFO, *PBSMINFO;\n\n/* Window stations */\n#define WINSTA_ENUMDESKTOPS         0x0001\n#define WINSTA_READATTRIBUTES       0x0002\n#define WINSTA_ACCESSCLIPBOARD      0x0004\n#define WINSTA_CREATEDESKTOP        0x0008\n#define WINSTA_WRITEATTRIBUTES      0x0010\n#define WINSTA_ACCESSGLOBALATOMS    0x0020\n#define WINSTA_EXITWINDOWS          0x0040\n#define WINSTA_ENUMERATE            0x0100\n#define WINSTA_READSCREEN           0x0200\n#define WINSTA_ALL_ACCESS           0x037f\n\n/* Desktops */\n#define DESKTOP_READOBJECTS         0x0001\n#define DESKTOP_CREATEWINDOW        0x0002\n#define DESKTOP_CREATEMENU          0x0004\n#define DESKTOP_HOOKCONTROL         0x0008\n#define DESKTOP_JOURNALRECORD       0x0010\n#define DESKTOP_JOURNALPLAYBACK     0x0020\n#define DESKTOP_ENUMERATE           0x0040\n#define DESKTOP_WRITEOBJECTS        0x0080\n#define DESKTOP_SWITCHDESKTOP       0x0100\n\n\n/* flags for FILTERKEYS dwFlags field */\n#define FKF_AVAILABLE       0x00000002\n#define FKF_CLICKON         0x00000040\n#define FKF_FILTERKEYSON    0x00000001\n#define FKF_HOTKEYACTIVE    0x00000004\n#define FKF_HOTKEYSOUND     0x00000010\n#define FKF_CONFIRMHOTKEY   0x00000008\n#define FKF_INDICATOR       0x00000020\n\ntypedef struct tagFILTERKEYS\n{\n    UINT   cbSize;\n    DWORD  dwFlags;\n    DWORD  iWaitMSec;\n    DWORD  iDelayMSec;\n    DWORD  iRepeatMSec;\n    DWORD  iBounceMSec;\n} FILTERKEYS, *LPFILTERKEYS;\n\n/* flags for TOGGLEKEYS dwFlags field */\n#define TKF_AVAILABLE       0x00000002\n#define TKF_CONFIRMHOTKEY   0x00000008\n#define TKF_HOTKEYACTIVE    0x00000004\n#define TKF_HOTKEYSOUND     0x00000010\n#define TKF_TOGGLEKEYSON    0x00000001\n\ntypedef struct tagTOGGLEKEYS\n{\n    DWORD   cbSize;\n    DWORD   dwFlags;\n} TOGGLEKEYS, *LPTOGGLEKEYS;\n\n/* flags for MOUSEKEYS dwFlags field */\n#define MKF_AVAILABLE       0x00000002\n#define MKF_CONFIRMHOTKEY   0x00000008\n#define MKF_HOTKEYACTIVE    0x00000004\n#define MKF_HOTKEYSOUND     0x00000010\n#define MKF_INDICATOR       0x00000020\n#define MKF_MOUSEKEYSON     0x00000001\n#define MKF_MODIFIERS       0x00000040\n#define MKF_REPLACENUMBERS  0x00000080\n\ntypedef struct tagMOUSEKEYS\n{\n    UINT    cbSize;\n    DWORD   dwFlags;\n    DWORD   iMaxSpeed;\n    DWORD   iTimeToMaxSpeed;\n    DWORD   iCtrlSpeed;\n    DWORD   dwReserved1;\n    DWORD   dwReserved2;\n} MOUSEKEYS, *LPMOUSEKEYS;\n\n/* struct and defines for GetMouseMovePointsEx */\n#define GMMP_USE_DISPLAY_POINTS 1\n#define GMMP_USE_HIGH_RESOLUTION_POINTS 2\n\ntypedef struct tagMOUSEMOVEPOINT {\n    int x;\n    int y;\n    DWORD time;\n    ULONG_PTR dwExtraInfo;\n} MOUSEMOVEPOINT,*PMOUSEMOVEPOINT,*LPMOUSEMOVEPOINT;\n\n/* flags for STICKYKEYS dwFlags field */\n#define SKF_AUDIBLEFEEDBACK 0x00000040\n#define SKF_AVAILABLE       0x00000002\n#define SKF_CONFIRMHOTKEY   0x00000008\n#define SKF_HOTKEYACTIVE    0x00000004\n#define SKF_HOTKEYSOUND     0x00000010\n#define SKF_INDICATOR       0x00000020\n#define SKF_STICKYKEYSON    0x00000001\n#define SKF_TRISTATE        0x00000080\n#define SKF_TWOKEYSOFF      0x00000100\n\ntypedef struct tagSTICKYKEYS\n{\n    DWORD   cbSize;\n    DWORD   dwFlags;\n} STICKYKEYS, *LPSTICKYKEYS;\n\n/* flags for ACCESSTIMEOUT dwFlags field */\n#define ATF_ONOFFFEEDBACK   0x00000002\n#define ATF_AVAILABLE       0x00000004\n#define ATF_TIMEOUTON       0x00000001\n\ntypedef struct tagACCESSTIMEOUT\n{\n    UINT    cbSize;\n    DWORD   dwFlags;\n    DWORD   iTimeOutMSec;\n} ACCESSTIMEOUT, *LPACCESSTIMEOUT;\n\n/* flags for SERIALKEYS dwFlags field */\n#define SERKF_ACTIVE        0x00000008\n#define SERKF_AVAILABLE     0x00000002\n#define SERKF_INDICATOR     0x00000004\n#define SERKF_SERIALKEYSON  0x00000001\n\ntypedef struct tagSERIALKEYSA\n{\n    UINT  cbSize;\n    DWORD  dwFlags;\n    LPSTR  lpszActivePort;\n    LPSTR  lpszPort;\n    UINT  iBaudRate;\n    UINT  iPortState;\n    UINT  iActive;\n} SERIALKEYSA, *LPSERIALKEYSA;\n\ntypedef struct tagSERIALKEYSW {\n    UINT  cbSize;\n    DWORD   dwFlags;\n    LPWSTR  lpszActivePort;\n    LPWSTR  lpszPort;\n    UINT   iBaudRate;\n    UINT   iPortState;\n    UINT   iActive;\n} SERIALKEYSW,*LPSERIALKEYSW;\n\nDECL_WINELIB_TYPE_AW(SERIALKEYS)\nDECL_WINELIB_TYPE_AW(LPSERIALKEYS)\n\n/* flags for SOUNDSENTRY dwFlags field */\n#define SSF_AVAILABLE       0x00000002\n#define SSF_SOUNDSENTRYON   0x00000001\n\n#define SSTF_BORDER         0x00000002\n#define SSTF_CHARS          0x00000001\n#define SSTF_DISPLAY        0x00000003\n#define SSTF_NONE           0x00000000\n\n#define SSGF_DISPLAY        0x00000003\n#define SSGF_NONE           0x00000000\n\n#define SSWF_DISPLAY        0x00000003\n#define SSWF_NONE           0x00000000\n#define SSWF_TITLE          0x00000001\n#define SSWF_WINDOW         0x00000002\n\ntypedef struct tagSOUNDSENTRYA\n{\n    UINT  cbSize;\n    DWORD  dwFlags;\n    DWORD  iFSTextEffect;\n    DWORD  iFSTextEffectMSec;\n    DWORD  iFSTextEffectColorBits;\n    DWORD  iFSGrafEffect;\n    DWORD  iFSGrafEffectMSec;\n    DWORD  iFSGrafEffectColor;\n    DWORD  iWindowsEffect;\n    DWORD  iWindowsEffectMSec;\n    LPSTR  lpszWindowsEffectDLL;\n    DWORD  iWindowsEffectOrdinal;\n} SOUNDSENTRYA, *LPSOUNDSENTRYA;\n\ntypedef struct tagSOUNDSENTRYW\n{\n    UINT  cbSize;\n    DWORD  dwFlags;\n    DWORD  iFSTextEffect;\n    DWORD  iFSTextEffectMSec;\n    DWORD  iFSTextEffectColorBits;\n    DWORD  iFSGrafEffect;\n    DWORD  iFSGrafEffectMSec;\n    DWORD  iFSGrafEffectColor;\n    DWORD  iWindowsEffect;\n    DWORD  iWindowsEffectMSec;\n    LPWSTR  lpszWindowsEffectDLL;\n    DWORD  iWindowsEffectOrdinal;\n} SOUNDSENTRYW, *LPSOUNDSENTRYW;\n\nDECL_WINELIB_TYPE_AW(SOUNDSENTRY)\nDECL_WINELIB_TYPE_AW(LPSOUNDSENTRY)\n\n/* flags for HIGHCONTRAST dwFlags field */\n#define HCF_HIGHCONTRASTON  0x00000001\n#define HCF_AVAILABLE       0x00000002\n#define HCF_HOTKEYACTIVE    0x00000004\n#define HCF_CONFIRMHOTKEY   0x00000008\n#define HCF_HOTKEYSOUND     0x00000010\n#define HCF_INDICATOR       0x00000020\n#define HCF_HOTKEYAVAILABLE 0x00000040\n\ntypedef struct tagHIGHCONTRASTA\n{\n    UINT  cbSize;\n    DWORD   dwFlags;\n    LPSTR   lpszDefaultScheme;\n} HIGHCONTRASTA, *LPHIGHCONTRASTA;\n\ntypedef struct tagHIGHCONTRASTW\n{\n    UINT  cbSize;\n    DWORD   dwFlags;\n    LPWSTR  lpszDefaultScheme;\n} HIGHCONTRASTW, *LPHIGHCONTRASTW;\n\nDECL_WINELIB_TYPE_AW(HIGHCONTRAST)\nDECL_WINELIB_TYPE_AW(LPHIGHCONTRAST)\n\ntypedef struct tagEVENTMSG\n{\n    UINT  message;\n    UINT  paramL;\n    UINT  paramH;\n    DWORD   time;\n    HWND  hwnd;\n} EVENTMSG, *PEVENTMSG, *LPEVENTMSG;\n\n/* WH_KEYBOARD_LL structure */\ntypedef struct tagKBDLLHOOKSTRUCT\n{\n    DWORD   vkCode;\n    DWORD   scanCode;\n    DWORD   flags;\n    DWORD   time;\n    ULONG_PTR dwExtraInfo;\n} KBDLLHOOKSTRUCT, *LPKBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;\n\n#define LLKHF_EXTENDED   (KF_EXTENDED >> 8)\n#define LLKHF_INJECTED   0x00000010\n#define LLKHF_ALTDOWN    (KF_ALTDOWN >> 8)\n#define LLKHF_UP         (KF_UP >> 8)\n\n/* WH_MOUSE_LL structure */\ntypedef struct tagMSLLHOOKSTRUCT\n{\n    POINT   pt;\n    DWORD   mouseData;\n    DWORD   flags;\n    DWORD   time;\n    ULONG_PTR dwExtraInfo;\n} MSLLHOOKSTRUCT, *LPMSLLHOOKSTRUCT, *PMSLLHOOKSTRUCT;\n\n#define LLMHF_INJECTED  0x00000001\n\n    /* Mouse hook structure */\n\ntypedef struct\n{\n    POINT pt;\n    HWND  hwnd;\n    UINT  wHitTestCode;\n    ULONG_PTR dwExtraInfo;\n} MOUSEHOOKSTRUCT, *PMOUSEHOOKSTRUCT, *LPMOUSEHOOKSTRUCT;\n\ntypedef struct\n{\n    struct { /* MOUSEHOOKSTRUCT */\n        POINT pt;\n        HWND  hwnd;\n        UINT  wHitTestCode;\n        ULONG_PTR dwExtraInfo;\n    } DUMMYSTRUCTNAME;\n    DWORD mouseData;\n} MOUSEHOOKSTRUCTEX, *PMOUSEHOOKSTRUCTEX, *LPMOUSEHOOKSTRUCTEX;\n\n\n    /* Hardware hook structure */\n\ntypedef struct\n{\n    HWND    hwnd;\n    UINT    message;\n    WPARAM  wParam;\n    LPARAM  lParam;\n} HARDWAREHOOKSTRUCT, *PHARDWAREHOOKSTRUCT, *LPHARDWAREHOOKSTRUCT;\n\n\n  /* Debug hook structure */\n\ntypedef struct tagDEBUGHOOKINFO\n{\n    DWORD       idThread;\n    DWORD       idThreadInstaller;\n    LPARAM      lParam;\n    WPARAM    wParam;\n    INT       code;\n} DEBUGHOOKINFO, *PDEBUGHOOKINFO, *LPDEBUGHOOKINFO;\n\n#define HKL_PREV   0\n#define HKL_NEXT   1\n\n#define KLF_ACTIVATE       0x00000001\n#define KLF_SUBSTITUTE_OK  0x00000002\n#define KLF_UNLOADPREVIOUS 0x00000004\n#define KLF_REORDER        0x00000008\n#define KLF_REPLACELANG    0x00000010\n#define KLF_NOTELLSHELL    0x00000080\n#define KLF_SETFORPROCESS  0x00000100\n#define KLF_SHIFTLOCK      0x00010000\n#define KLF_RESET          0x40000000\n\n#define KL_NAMELENGTH      9\n\ntypedef struct tagMOUSEINPUT\n{\n    LONG    dx;\n    LONG    dy;\n    DWORD   mouseData;\n    DWORD   dwFlags;\n    DWORD   time;\n    ULONG_PTR dwExtraInfo;\n} MOUSEINPUT, *PMOUSEINPUT, *LPMOUSEINPUT;\n\ntypedef struct tagKEYBDINPUT\n{\n    WORD    wVk;\n    WORD    wScan;\n    DWORD   dwFlags;\n    DWORD   time;\n    ULONG_PTR dwExtraInfo;\n} KEYBDINPUT, *PKEYBDINPUT, *LPKEYBDINPUT;\n\ntypedef struct tagHARDWAREINPUT\n{\n    DWORD   uMsg;\n    WORD    wParamL;\n    WORD    wParamH;\n} HARDWAREINPUT, *PHARDWAREINPUT, *LPHARDWAREINPUT;\n\n#define INPUT_MOUSE     0\n#define INPUT_KEYBOARD  1\n#define INPUT_HARDWARE  2\n\ntypedef struct tagINPUT\n{\n    DWORD type;\n    union\n    {\n        MOUSEINPUT      mi;\n        KEYBDINPUT      ki;\n        HARDWAREINPUT   hi;\n    } DUMMYUNIONNAME;\n} INPUT, *PINPUT, *LPINPUT;\n\nDECLARE_HANDLE(HRAWINPUT);\n\ntypedef struct tagRAWINPUTDEVICELIST\n{\n    HANDLE hDevice;\n    DWORD dwType;\n} RAWINPUTDEVICELIST, *PRAWINPUTDEVICELIST;\n\ntypedef struct tagRAWHID {\n    DWORD dwSizeHid;\n    DWORD dwCount;\n    BYTE bRawData[1];\n} RAWHID, *LPRAWHID;\n\ntypedef struct tagRAWKEYBOARD {\n    USHORT MakeCode;\n    USHORT Flags;\n    USHORT Reserved;\n    USHORT VKey;\n    UINT Message;\n    ULONG ExtraInformation;\n} RAWKEYBOARD, *PRAWKEYBOARD, *LPRAWKEYBOARD;\n\ntypedef struct tagRAWMOUSE {\n    USHORT usFlags;\n    union {\n        ULONG ulButtons;\n        struct {\n            USHORT usButtonFlags;\n            USHORT usButtonData;\n        } DUMMYSTRUCTNAME;\n    } DUMMYUNIONNAME;\n    ULONG ulRawButtons;\n    LONG  lLastX;\n    LONG  lLastY;\n    ULONG ulExtraInformation;\n} RAWMOUSE, *PRAWMOUSE, *LPRAWMOUSE;\n\ntypedef struct tagRAWINPUTHEADER {\n    DWORD dwType;\n    DWORD dwSize;\n    HANDLE hDevice;\n    WPARAM wParam;\n} RAWINPUTHEADER, *PRAWINPUTHEADER;\n\ntypedef struct tagRAWINPUT {\n    RAWINPUTHEADER header;\n    union {\n        RAWMOUSE    mouse;\n        RAWKEYBOARD keyboard;\n        RAWHID      hid;\n    } data;\n} RAWINPUT, *PRAWINPUT, *LPRAWINPUT;\n\ntypedef struct tagRAWINPUTDEVICE {\n    USHORT usUsagePage;\n    USHORT usUsage;\n    DWORD dwFlags;\n    HWND hwndTarget;\n} RAWINPUTDEVICE, *PRAWINPUTDEVICE, *LPRAWINPUTDEVICE;\n\ntypedef struct tagRID_DEVICE_INFO_MOUSE {\n    DWORD dwId;\n    DWORD dwNumberOfButtons;\n    DWORD dwSampleRate;\n    BOOL fHasHorizontalWheel;\n} RID_DEVICE_INFO_MOUSE, *PRID_DEVICE_INFO_MOUSE;\n\ntypedef struct tagRID_DEVICE_INFO_KEYBOARD {\n    DWORD dwType;\n    DWORD dwSubType;\n    DWORD dwKeyboardMode;\n    DWORD dwNumberOfFunctionKeys;\n    DWORD dwNumberOfIndicators;\n    DWORD dwNumberOfKeysTotal;\n} RID_DEVICE_INFO_KEYBOARD, *PRID_DEVICE_INFO_KEYBOARD;\n\ntypedef struct tagRID_DEVICE_INFO_HID {\n    DWORD dwVendorId;\n    DWORD dwProductId;\n    DWORD dwVersionNumber;\n    USHORT usUsagePage;\n    USHORT usUsage;\n} RID_DEVICE_INFO_HID, *PRID_DEVICE_INFO_HID;\n\ntypedef struct tagRID_DEVICE_INFO {\n    DWORD    cbSize;\n    DWORD    dwType;\n    union {\n        RID_DEVICE_INFO_MOUSE     mouse;\n        RID_DEVICE_INFO_KEYBOARD  keyboard;\n        RID_DEVICE_INFO_HID       hid;\n    } DUMMYUNIONNAME;\n} RID_DEVICE_INFO, *PRID_DEVICE_INFO, *LPRID_DEVICE_INFO;\n\n#define GET_RAWINPUT_CODE_WPARAM(wParam) ((wParam) & 0xff)\n\n#define RIM_INPUT     0\n#define RIM_INPUTSINK 1\n\n#define RIM_TYPEMOUSE    0\n#define RIM_TYPEKEYBOARD 1\n#define RIM_TYPEHID      2\n\n#define RI_MOUSE_LEFT_BUTTON_DOWN   0x0001\n#define RI_MOUSE_LEFT_BUTTON_UP     0x0002\n#define RI_MOUSE_RIGHT_BUTTON_DOWN  0x0004\n#define RI_MOUSE_RIGHT_BUTTON_UP    0x0008\n#define RI_MOUSE_MIDDLE_BUTTON_DOWN 0x0010\n#define RI_MOUSE_MIDDLE_BUTTON_UP   0x0020\n\n#define RI_MOUSE_BUTTON_1_DOWN RI_MOUSE_LEFT_BUTTON_DOWN\n#define RI_MOUSE_BUTTON_1_UP   RI_MOUSE_LEFT_BUTTON_UP\n#define RI_MOUSE_BUTTON_2_DOWN RI_MOUSE_RIGHT_BUTTON_DOWN\n#define RI_MOUSE_BUTTON_2_UP   RI_MOUSE_RIGHT_BUTTON_UP\n#define RI_MOUSE_BUTTON_3_DOWN RI_MOUSE_MIDDLE_BUTTON_DOWN\n#define RI_MOUSE_BUTTON_3_UP   RI_MOUSE_MIDDLE_BUTTON_UP\n\n#define RI_MOUSE_BUTTON_4_DOWN    0x0040\n#define RI_MOUSE_BUTTON_4_UP      0x0080\n#define RI_MOUSE_BUTTON_5_DOWN    0x0100\n#define RI_MOUSE_BUTTON_5_UP      0x0200\n#define RI_MOUSE_WHEEL            0x0400\n#define RI_MOUSE_HORIZONTAL_WHEEL 0x0800\n\n#define MOUSE_MOVE_RELATIVE      0x00\n#define MOUSE_MOVE_ABSOLUTE      0x01\n#define MOUSE_VIRTUAL_DESKTOP    0x02\n#define MOUSE_ATTRIBUTES_CHANGED 0x04\n#define MOUSE_MOVE_NOCOALESCE    0x08\n\n#define KEYBOARD_OVERRUN_MAKE_CODE 0xFF\n\n#define RI_KEY_MAKE            0x00\n#define RI_KEY_BREAK           0x01\n#define RI_KEY_E0              0x02\n#define RI_KEY_E1              0x04\n#define RI_KEY_TERMSRV_SET_LED 0x08\n#define RI_KEY_TERMSRV_SHADOW  0x10\n\n#define RAWINPUT_ALIGN(x) (((x) + sizeof(DWORD_PTR) - 1) & ~(sizeof(DWORD_PTR) - 1))\n#define NEXTRAWINPUTBLOCK(ptr) ((PRAWINPUT)RAWINPUT_ALIGN((ULONG_PTR)((PBYTE)(ptr) + (ptr)->header.dwSize)))\n\n#define RID_INPUT  0x10000003\n#define RID_HEADER 0x10000005\n\n#define RIDI_PREPARSEDDATA 0x20000005\n#define RIDI_DEVICENAME    0x20000007\n#define RIDI_DEVICEINFO    0x2000000b\n\n#define RIDEV_REMOVE       0x00000001\n#define RIDEV_EXCLUDE      0x00000010\n#define RIDEV_PAGEONLY     0x00000020\n#define RIDEV_NOLEGACY     0x00000030\n#define RIDEV_INPUTSINK    0x00000100\n#define RIDEV_CAPTUREMOUSE 0x00000200\n#define RIDEV_NOHOTKEYS    0x00000200\n#define RIDEV_APPKEYS      0x00000400\n#define RIDEV_EXINPUTSINK  0x00001000\n#define RIDEV_DEVNOTIFY    0x00002000\n#define RIDEV_EXMODEMASK   0x000000F0\n\n#define RIDEV_EXMODE(mode) ((mode) & RIDEV_EXMODEMASK)\n\ntypedef struct tagGESTURECONFIG {\n    DWORD dwID;\n    DWORD dwWant;\n    DWORD dwBlock;\n} GESTURECONFIG, *PGESTURECONFIG;\n\n#define GIDC_ARRIVAL 1\n#define GIDC_REMOVAL 2\n\n#if (_WIN32_WINNT >= 0x0601)\n#define GET_DEVICE_CHANGE_WPARAM(wParam) (LOWORD(wParam))\n#elif (_WIN32_WINNT >= 0x0501)\n#define GET_DEVICE_CHANGE_LPARAM(lParam) (LOWORD(lParam))\n#endif\n\ntypedef struct tagGUITHREADINFO\n{\n    DWORD   cbSize;\n    DWORD   flags;\n    HWND    hwndActive;\n    HWND    hwndFocus;\n    HWND    hwndCapture;\n    HWND    hwndMenuOwner;\n    HWND    hwndMoveSize;\n    HWND    hwndCaret;\n    RECT    rcCaret;\n} GUITHREADINFO, *PGUITHREADINFO, *LPGUITHREADINFO;\n\n#define GUI_CARETBLINKING   0x00000001\n#define GUI_INMOVESIZE      0x00000002\n#define GUI_INMENUMODE      0x00000004\n#define GUI_SYSTEMMENUMODE  0x00000008\n#define GUI_POPUPMENUMODE   0x00000010\n#define GUI_16BITTASK       0x00000020\n\n\n/***** Dialogs *****/\n\n/* Gcc on Solaris has a version of this that we don't care about */\n#undef FSHIFT\n\n#define\tFVIRTKEY\tTRUE          /* Assumed to be == TRUE */\n#define\tFNOINVERT\t0x02\n#define\tFSHIFT\t\t0x04\n#define\tFCONTROL\t0x08\n#define\tFALT\t\t0x10\n\n\ntypedef struct tagANIMATIONINFO\n{\n       UINT          cbSize;\n       INT           iMinAnimate;\n} ANIMATIONINFO, *LPANIMATIONINFO;\n\ntypedef struct tagNMHDR\n{\n    HWND  hwndFrom;\n    UINT_PTR idFrom;\n    UINT  code;\n} NMHDR, *LPNMHDR;\n\ntypedef struct tagDRAWTEXTPARAMS\n{\n\tUINT\tcbSize;\n\tINT\tiTabLength;\n\tINT\tiLeftMargin;\n\tINT\tiRightMargin;\n\tUINT\tuiLengthDrawn;\n} DRAWTEXTPARAMS,*LPDRAWTEXTPARAMS;\n\ntypedef struct\n{\n  LPARAM        lParam;\n  WPARAM      wParam;\n  UINT        message;\n  HWND        hwnd;\n} CWPSTRUCT, *PCWPSTRUCT, *LPCWPSTRUCT;\n\ntypedef struct\n{\n  LRESULT       lResult;\n  LPARAM        lParam;\n  WPARAM      wParam;\n  DWORD         message;\n  HWND        hwnd;\n} CWPRETSTRUCT, *PCWPRETSTRUCT, *LPCWPRETSTRUCT;\n\ntypedef struct tagWINDOWPLACEMENT\n{\n    UINT   length;\n    UINT   flags;\n    UINT   showCmd;\n    POINT  ptMinPosition;\n    POINT  ptMaxPosition;\n    RECT   rcNormalPosition;\n} WINDOWPLACEMENT, *PWINDOWPLACEMENT, *LPWINDOWPLACEMENT;\n\n\n  /* WINDOWPLACEMENT flags */\n#define WPF_SETMINPOSITION      0x0001\n#define WPF_RESTORETOMAXIMIZED  0x0002\n\n/***** Dialogs *****/\n\n#define IS_INTRESOURCE(x)   (((ULONG_PTR)(x) >> 16) == 0)\n#define MAKEINTRESOURCEA(i) (LPSTR)((ULONG_PTR)((WORD)(i)))\n#define MAKEINTRESOURCEW(i) (LPWSTR)((ULONG_PTR)((WORD)(i)))\n\n#ifndef RC_INVOKED\n# ifdef WINE_NO_UNICODE_MACROS /* force using a cast */\n#  define MAKEINTRESOURCE(i) ((ULONG_PTR)((WORD)(i)))\n# else\n#  define MAKEINTRESOURCE WINELIB_NAME_AW(MAKEINTRESOURCE)\n# endif\n#endif\n\n/* Predefined resource types */\n#define RT_CURSOR         MAKEINTRESOURCE(1)\n#define RT_BITMAP         MAKEINTRESOURCE(2)\n#define RT_ICON           MAKEINTRESOURCE(3)\n#define RT_MENU           MAKEINTRESOURCE(4)\n#define RT_DIALOG         MAKEINTRESOURCE(5)\n#define RT_STRING         MAKEINTRESOURCE(6)\n#define RT_FONTDIR        MAKEINTRESOURCE(7)\n#define RT_FONT           MAKEINTRESOURCE(8)\n#define RT_ACCELERATOR    MAKEINTRESOURCE(9)\n#define RT_RCDATA         MAKEINTRESOURCE(10)\n#define RT_MESSAGETABLE   MAKEINTRESOURCE(11)\n#define RT_GROUP_CURSOR   MAKEINTRESOURCE(12)\n#define RT_GROUP_ICON     MAKEINTRESOURCE(14)\n#define RT_VERSION        MAKEINTRESOURCE(16)\n#define RT_DLGINCLUDE     MAKEINTRESOURCE(17)\n#define RT_PLUGPLAY       MAKEINTRESOURCE(19)\n#define RT_VXD            MAKEINTRESOURCE(20)\n#define RT_ANICURSOR      MAKEINTRESOURCE(21)\n#define RT_ANIICON        MAKEINTRESOURCE(22)\n#define RT_HTML           MAKEINTRESOURCE(23)\n\n#ifdef RC_INVOKED\n#define RT_MANIFEST                                        24\n#define CREATEPROCESS_MANIFEST_RESOURCE_ID                 1\n#define ISOLATIONAWARE_MANIFEST_RESOURCE_ID                2\n#define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID 3\n#define MINIMUM_RESERVED_MANIFEST_RESOURCE_ID              1\n#define MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID              16\n#else\n#define RT_MANIFEST                                        MAKEINTRESOURCE(24)\n#define CREATEPROCESS_MANIFEST_RESOURCE_ID                 MAKEINTRESOURCE(1)\n#define ISOLATIONAWARE_MANIFEST_RESOURCE_ID                MAKEINTRESOURCE(2)\n#define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(3)\n#define MINIMUM_RESERVED_MANIFEST_RESOURCE_ID              MAKEINTRESOURCE(1)\n#define MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID              MAKEINTRESOURCE(16)\n#endif\n\n  /* cbWndExtra bytes for dialog class */\n#define DLGWINDOWEXTRA      30\n\n\n  /* Dialog messages */\n#define DM_GETDEFID         (WM_USER+0)\n#define DM_SETDEFID         (WM_USER+1)\n#define DM_REPOSITION       (WM_USER+2)\n\n#define DC_HASDEFID         0x534b\n\n/* Bit flags for DRAWITEMSTRUCT.CtlType */\n#define ODT_MENU        1\n#define ODT_LISTBOX     2\n#define ODT_COMBOBOX    3\n#define ODT_BUTTON      4\n#define ODT_STATIC      5\n\n/* Bit flags for DRAWITEMSTRUCT.itemAction */\n#define ODA_DRAWENTIRE 0x1\n#define ODA_SELECT     0x2\n#define ODA_FOCUS      0x4\n\n/* Bit flags for DRAWITEMSTRUCT.itemState */\n#define ODS_SELECTED     0x0001 /* Selected */\n#define ODS_GRAYED       0x0002 /* Grayed (Menus only) */\n#define ODS_DISABLED     0x0004 /* Disabled */\n#define ODS_CHECKED      0x0008 /* Checked (Menus only) */\n#define ODS_FOCUS        0x0010 /* Has focus */\n#define ODS_DEFAULT      0x0020 /* Default */\n#define ODS_HOTLIGHT     0x0040 /* Highlighted when under mouse */\n#define ODS_INACTIVE     0x0080 /* Inactive */\n#define ODS_NOACCEL      0x0100 /* No keyboard accelerator */\n#define ODS_NOFOCUSRECT  0x0200 /* No focus rectangle */\n#define ODS_COMBOBOXEDIT 0x1000 /* Edit of a combo box */\n\n#ifndef NOCOLOR\n\n#define COLOR_SCROLLBAR\t\t    0\n#define COLOR_BACKGROUND\t    1\n#define COLOR_ACTIVECAPTION\t    2\n#define COLOR_INACTIVECAPTION\t    3\n#define COLOR_MENU\t\t    4\n#define COLOR_WINDOW\t\t    5\n#define COLOR_WINDOWFRAME\t    6\n#define COLOR_MENUTEXT\t\t    7\n#define COLOR_WINDOWTEXT\t    8\n#define COLOR_CAPTIONTEXT  \t    9\n#define COLOR_ACTIVEBORDER\t   10\n#define COLOR_INACTIVEBORDER\t   11\n#define COLOR_APPWORKSPACE\t   12\n#define COLOR_HIGHLIGHT\t\t   13\n#define COLOR_HIGHLIGHTTEXT\t   14\n#define COLOR_BTNFACE              15\n#define COLOR_BTNSHADOW            16\n#define COLOR_GRAYTEXT             17\n#define COLOR_BTNTEXT\t\t   18\n#define COLOR_INACTIVECAPTIONTEXT  19\n#define COLOR_BTNHIGHLIGHT         20\n/* win95 colors */\n#define COLOR_3DDKSHADOW           21\n#define COLOR_3DLIGHT              22\n#define COLOR_INFOTEXT             23\n#define COLOR_INFOBK               24\n#define COLOR_DESKTOP              COLOR_BACKGROUND\n#define COLOR_3DFACE               COLOR_BTNFACE\n#define COLOR_3DSHADOW             COLOR_BTNSHADOW\n#define COLOR_3DHIGHLIGHT          COLOR_BTNHIGHLIGHT\n#define COLOR_3DHILIGHT            COLOR_BTNHIGHLIGHT\n#define COLOR_BTNHILIGHT           COLOR_BTNHIGHLIGHT\n/* win98 colors */\n#define COLOR_ALTERNATEBTNFACE         25  /* undocumented, constant name unknown */\n#define COLOR_HOTLIGHT                 26\n#define COLOR_GRADIENTACTIVECAPTION    27\n#define COLOR_GRADIENTINACTIVECAPTION  28\n/* win2k/xp colors */\n#define COLOR_MENUHILIGHT              29\n#define COLOR_MENUBAR                  30\n\n  /* WM_CTLCOLOR values */\n#define CTLCOLOR_MSGBOX             0\n#define CTLCOLOR_EDIT               1\n#define CTLCOLOR_LISTBOX            2\n#define CTLCOLOR_BTN                3\n#define CTLCOLOR_DLG                4\n#define CTLCOLOR_SCROLLBAR          5\n#define CTLCOLOR_STATIC             6\n\nWINUSERAPI COLORREF WINAPI GetSysColor(INT);\nWINUSERAPI BOOL     WINAPI SetSysColors(INT,const INT*,const COLORREF*);\n\n#endif /* NOCOLOR */\n\n/* IMESTATUS type */\n#define EMSIS_COMPOSITIONSTRING 1\n\n/* IMESTATUS type specific data */\n#define EIMES_GETCOMPSTRATONCE         0x0001\n#define EIMES_CANCELCOMPSTRINFOCUS     0x0002\n#define EIMES_COMPLETECOMPSTRKILLFOCUS 0x0004\n\n/* EDITWORDBREAKPROC code values */\n#define WB_LEFT         0\n#define WB_RIGHT        1\n#define WB_ISDELIMITER  2\n\n/* Edit control notification codes */\n#define EN_SETFOCUS     0x0100\n#define EN_KILLFOCUS    0x0200\n#define EN_CHANGE       0x0300\n#define EN_UPDATE       0x0400\n#define EN_ERRSPACE     0x0500\n#define EN_MAXTEXT      0x0501\n#define EN_HSCROLL      0x0601\n#define EN_VSCROLL      0x0602\n\n/* New since win95 : EM_SETMARGIN parameters */\n#define EC_LEFTMARGIN\t0x0001\n#define EC_RIGHTMARGIN\t0x0002\n#define EC_USEFONTINFO\t0xffff\n\n\n  /* GetSystemMetrics() codes */\n#define SM_CXSCREEN\t       0\n#define SM_CYSCREEN            1\n#define SM_CXVSCROLL           2\n#define SM_CYHSCROLL\t       3\n#define SM_CYCAPTION\t       4\n#define SM_CXBORDER\t       5\n#define SM_CYBORDER\t       6\n#define SM_CXDLGFRAME\t       7\n#define SM_CYDLGFRAME\t       8\n#define SM_CYVTHUMB\t       9\n#define SM_CXHTHUMB\t      10\n#define SM_CXICON\t      11\n#define SM_CYICON\t      12\n#define SM_CXCURSOR\t      13\n#define SM_CYCURSOR\t      14\n#define SM_CYMENU\t      15\n#define SM_CXFULLSCREEN       16\n#define SM_CYFULLSCREEN       17\n#define SM_CYKANJIWINDOW      18\n#define SM_MOUSEPRESENT       19\n#define SM_CYVSCROLL\t      20\n#define SM_CXHSCROLL\t      21\n#define SM_DEBUG\t      22\n#define SM_SWAPBUTTON\t      23\n#define SM_RESERVED1\t      24\n#define SM_RESERVED2\t      25\n#define SM_RESERVED3\t      26\n#define SM_RESERVED4\t      27\n#define SM_CXMIN\t      28\n#define SM_CYMIN\t      29\n#define SM_CXSIZE\t      30\n#define SM_CYSIZE\t      31\n#define SM_CXFRAME\t      32\n#define SM_CYFRAME\t      33\n#define SM_CXMINTRACK\t      34\n#define SM_CYMINTRACK\t      35\n#define SM_CXDOUBLECLK        36\n#define SM_CYDOUBLECLK        37\n#define SM_CXICONSPACING      38\n#define SM_CYICONSPACING      39\n#define SM_MENUDROPALIGNMENT  40\n#define SM_PENWINDOWS         41\n#define SM_DBCSENABLED        42\n#define SM_CMOUSEBUTTONS      43\n#define SM_CXFIXEDFRAME\t      SM_CXDLGFRAME\n#define SM_CYFIXEDFRAME\t      SM_CYDLGFRAME\n#define SM_CXSIZEFRAME\t      SM_CXFRAME\n#define SM_CYSIZEFRAME\t      SM_CYFRAME\n#define SM_SECURE\t      44\n#define SM_CXEDGE\t      45\n#define SM_CYEDGE\t      46\n#define SM_CXMINSPACING\t      47\n#define SM_CYMINSPACING\t      48\n#define SM_CXSMICON\t      49\n#define SM_CYSMICON\t      50\n#define SM_CYSMCAPTION\t      51\n#define SM_CXSMSIZE\t      52\n#define SM_CYSMSIZE\t      53\n#define SM_CXMENUSIZE\t      54\n#define SM_CYMENUSIZE\t      55\n#define SM_ARRANGE\t      56\n#define SM_CXMINIMIZED\t      57\n#define SM_CYMINIMIZED\t      58\n#define SM_CXMAXTRACK\t      59\n#define SM_CYMAXTRACK\t      60\n#define SM_CXMAXIMIZED\t      61\n#define SM_CYMAXIMIZED\t      62\n#define SM_NETWORK\t      63\n#define SM_CLEANBOOT\t      67\n#define SM_CXDRAG\t      68\n#define SM_CYDRAG\t      69\n#define SM_SHOWSOUNDS\t      70\n#define SM_CXMENUCHECK\t      71\n#define SM_CYMENUCHECK\t      72\n#define SM_SLOWMACHINE\t      73\n#define SM_MIDEASTENABLED     74\n#define SM_MOUSEWHEELPRESENT  75\n#define SM_XVIRTUALSCREEN     76\n#define SM_YVIRTUALSCREEN     77\n#define SM_CXVIRTUALSCREEN    78\n#define SM_CYVIRTUALSCREEN    79\n#define SM_CMONITORS          80\n#define SM_SAMEDISPLAYFORMAT  81\n#define SM_IMMENABLED         82\n#define SM_CXFOCUSBORDER      83\n#define SM_CYFOCUSBORDER      84\n#define SM_TABLETPC           86\n#define SM_MEDIACENTER        87\n#define SM_STARTER            88\n#define SM_SERVERR2           89\n#define SM_CMETRICS           90\n#define SM_MOUSEHORIZONTALWHEELPRESENT 91\n#define SM_CXPADDEDBORDER     92\n\n#define SM_REMOTESESSION        0x1000\n#define SM_SHUTTINGDOWN         0x2000\n#define SM_REMOTECONTROL        0x2001\n#define SM_CARETBLINKINGENABLED 0x2002\n\n#define PMB_ACTIVE      0x00000001\n\n\n/* wParam for WM_POWERBROADCAST */\n#define PBT_APMQUERYSUSPEND       0x0000\n#define PBT_APMQUERYSTANDBY       0x0001\n#define PBT_APMQUERYSUSPENDFAILED 0x0002\n#define PBT_APMQUERYSTANDBYFAILED 0x0003\n#define PBT_APMSUSPEND            0x0004\n#define PBT_APMSTANDBY            0x0005\n#define PBT_APMRESUMECRITICAL     0x0006\n#define PBT_APMRESUMESUSPEND      0x0007\n#define PBT_APMRESUMESTANDBY      0x0008\n#define PBT_APMBATTERYLOW         0x0009\n#define PBT_APMPOWERSTATUSCHANGE  0x000A\n#define PBT_APMOEMEVENT           0x000B\n#define PBT_APMRESUMEAUTOMATIC    0x0012\n\n#define PBTF_APMRESUMEFROMFAILURE       0x00000001\n\n\n/* MsgWaitForMultipleObjectsEx flags */\n#define MWMO_WAITALL         0x0001\n#define MWMO_ALERTABLE       0x0002\n#define MWMO_INPUTAVAILABLE  0x0004\n\n/* WM_GETDLGCODE values */\n#define DLGC_WANTARROWS      0x0001\n#define DLGC_WANTTAB         0x0002\n#define DLGC_WANTALLKEYS     0x0004\n#define DLGC_WANTMESSAGE     0x0004\n#define DLGC_HASSETSEL       0x0008\n#define DLGC_DEFPUSHBUTTON   0x0010\n#define DLGC_UNDEFPUSHBUTTON 0x0020\n#define DLGC_RADIOBUTTON     0x0040\n#define DLGC_WANTCHARS       0x0080\n#define DLGC_STATIC          0x0100\n#define DLGC_BUTTON          0x2000\n\n/* Used for EnumDisplaySettingsEx */\n#define ENUM_CURRENT_SETTINGS  ((DWORD) -1)\n#define ENUM_REGISTRY_SETTINGS ((DWORD) -2)\n\n#define EDS_RAWMODE       0x00000002\n#define EDS_ROTATEDMODE   0x00000004\n\n/* Used for PrintWindow */\n#define PW_CLIENTONLY   0x00000001\n\n/****** Window classes ******/\n\ntypedef struct tagCREATESTRUCTA\n{\n    LPVOID      lpCreateParams;\n    HINSTANCE hInstance;\n    HMENU     hMenu;\n    HWND      hwndParent;\n    INT       cy;\n    INT       cx;\n    INT       y;\n    INT       x;\n    LONG        style;\n    LPCSTR      lpszName;\n    LPCSTR      lpszClass;\n    DWORD       dwExStyle;\n} CREATESTRUCTA, *LPCREATESTRUCTA;\n\ntypedef struct tagCREATESTRUCTW\n{\n    LPVOID      lpCreateParams;\n    HINSTANCE hInstance;\n    HMENU     hMenu;\n    HWND      hwndParent;\n    INT       cy;\n    INT       cx;\n    INT       y;\n    INT       x;\n    LONG        style;\n    LPCWSTR     lpszName;\n    LPCWSTR     lpszClass;\n    DWORD       dwExStyle;\n} CREATESTRUCTW, *LPCREATESTRUCTW;\n\nDECL_WINELIB_TYPE_AW(CREATESTRUCT)\nDECL_WINELIB_TYPE_AW(LPCREATESTRUCT)\n\ntypedef struct tagPAINTSTRUCT\n{\n    HDC   hdc;\n    BOOL  fErase;\n    RECT  rcPaint;\n    BOOL  fRestore;\n    BOOL  fIncUpdate;\n    BYTE  rgbReserved[32];\n} PAINTSTRUCT, *PPAINTSTRUCT, *LPPAINTSTRUCT;\n\ntypedef struct tagCLIENTCREATESTRUCT\n{\n    HMENU   hWindowMenu;\n    UINT    idFirstChild;\n} CLIENTCREATESTRUCT, *LPCLIENTCREATESTRUCT;\n\n\ntypedef struct tagMDICREATESTRUCTA\n{\n    LPCSTR       szClass;\n    LPCSTR       szTitle;\n    HINSTANCE  hOwner;\n    INT        x;\n    INT        y;\n    INT        cx;\n    INT        cy;\n    DWORD        style;\n    LPARAM       lParam;\n} MDICREATESTRUCTA, *LPMDICREATESTRUCTA;\n\ntypedef struct tagMDICREATESTRUCTW\n{\n    LPCWSTR      szClass;\n    LPCWSTR      szTitle;\n    HINSTANCE  hOwner;\n    INT        x;\n    INT        y;\n    INT        cx;\n    INT        cy;\n    DWORD        style;\n    LPARAM       lParam;\n} MDICREATESTRUCTW, *LPMDICREATESTRUCTW;\n\nDECL_WINELIB_TYPE_AW(MDICREATESTRUCT)\nDECL_WINELIB_TYPE_AW(LPMDICREATESTRUCT)\n\n#define MDITILE_VERTICAL     0x0000\n#define MDITILE_HORIZONTAL   0x0001\n#define MDITILE_SKIPDISABLED 0x0002\n#define MDITILE_ZORDER       0x0004\n\n#define MDIS_ALLCHILDSTYLES  0x0001\n\ntypedef struct tagSTYLESTRUCT {\n    DWORD   styleOld;\n    DWORD   styleNew;\n} STYLESTRUCT, *LPSTYLESTRUCT;\n\n#define WC_DIALOG  MAKEINTATOM(0x8002)\n\n  /* Offsets for GetWindowLong() and GetWindowWord() */\n#define GWL_EXSTYLE         (-20)\n#define GWL_STYLE           (-16)\n#if !defined _WIN64 && !defined __WINESRC__\n# define GWL_USERDATA        (-21)\n# define GWL_ID              (-12)\n# define GWL_HWNDPARENT      (-8)\n# define GWL_HINSTANCE       (-6)\n# define GWL_WNDPROC         (-4)\n# define DWL_MSGRESULT       0\n# define DWL_DLGPROC         4\n# define DWL_USER            8\n#endif /* _WIN64 && __WINESRC__ */\n\n  /* Offsets for GetWindowLongPtr() and SetWindowLongPtr() */\n#define GWLP_USERDATA        (-21)\n#define GWLP_ID              (-12)\n#define GWLP_HWNDPARENT      (-8)\n#define GWLP_HINSTANCE       (-6)\n#define GWLP_WNDPROC         (-4)\n#define DWLP_MSGRESULT       0\n#define DWLP_DLGPROC         DWLP_MSGRESULT + sizeof(LRESULT)\n#define DWLP_USER            DWLP_DLGPROC + sizeof(DLGPROC)\n\n  /* GetWindow() constants */\n#define GW_HWNDFIRST\t0\n#define GW_HWNDLAST\t1\n#define GW_HWNDNEXT\t2\n#define GW_HWNDPREV\t3\n#define GW_OWNER\t4\n#define GW_CHILD\t5\n\n/* GetAncestor() constants */\n#define GA_PARENT       1\n#define GA_ROOT         2\n#define GA_ROOTOWNER    3\n\n  /* WM_GETMINMAXINFO struct */\ntypedef struct tagMINMAXINFO\n{\n    POINT   ptReserved;\n    POINT   ptMaxSize;\n    POINT   ptMaxPosition;\n    POINT   ptMinTrackSize;\n    POINT   ptMaxTrackSize;\n} MINMAXINFO, *PMINMAXINFO, *LPMINMAXINFO;\n\n\n  /* RedrawWindow() flags */\n#define RDW_INVALIDATE       0x0001\n#define RDW_INTERNALPAINT    0x0002\n#define RDW_ERASE            0x0004\n#define RDW_VALIDATE         0x0008\n#define RDW_NOINTERNALPAINT  0x0010\n#define RDW_NOERASE          0x0020\n#define RDW_NOCHILDREN       0x0040\n#define RDW_ALLCHILDREN      0x0080\n#define RDW_UPDATENOW        0x0100\n#define RDW_ERASENOW         0x0200\n#define RDW_FRAME            0x0400\n#define RDW_NOFRAME          0x0800\n\n/* debug flags */\n#define DBGFILL_ALLOC  0xfd\n#define DBGFILL_FREE   0xfb\n#define DBGFILL_BUFFER 0xf9\n#define DBGFILL_STACK  0xf7\n\n  /* WM_WINDOWPOSCHANGING/CHANGED struct */\ntypedef struct tagWINDOWPOS\n{\n    HWND  hwnd;\n    HWND  hwndInsertAfter;\n    INT   x;\n    INT   y;\n    INT   cx;\n    INT   cy;\n    UINT  flags;\n} WINDOWPOS, *PWINDOWPOS, *LPWINDOWPOS;\n\n\n  /* WM_NCCALCSIZE parameter structure */\ntypedef struct\n{\n    RECT       rgrc[3];\n    WINDOWPOS *lppos;\n} NCCALCSIZE_PARAMS, *LPNCCALCSIZE_PARAMS;\n\n\n#define PRF_CHECKVISIBLE    __MSABI_LONG(0x00000001)\n#define PRF_NONCLIENT       __MSABI_LONG(0x00000002)\n#define PRF_CLIENT          __MSABI_LONG(0x00000004)\n#define PRF_ERASEBKGND      __MSABI_LONG(0x00000008)\n#define PRF_CHILDREN        __MSABI_LONG(0x00000010)\n#define PRF_OWNED           __MSABI_LONG(0x00000020)\n\n  /* Offsets for GetClassLong() and GetClassWord() */\n#if !defined _WIN64 && !defined __WINESRC__\n# define GCL_MENUNAME       (-8)\n# define GCL_HBRBACKGROUND  (-10)\n# define GCL_HCURSOR        (-12)\n# define GCL_HICON          (-14)\n# define GCL_HMODULE        (-16)\n# define GCL_WNDPROC        (-24)\n# define GCL_HICONSM        (-34)\n#endif /* _WIN64 && __WINESRC__ */\n\n#define GCL_CBWNDEXTRA      (-18)\n#define GCL_CBCLSEXTRA      (-20)\n#define GCL_STYLE           (-26)\n#define GCW_ATOM            (-32)\n\n#define GCLP_MENUNAME       (-8)\n#define GCLP_HBRBACKGROUND  (-10)\n#define GCLP_HCURSOR        (-12)\n#define GCLP_HICON          (-14)\n#define GCLP_HMODULE        (-16)\n#define GCLP_WNDPROC        (-24)\n#define GCLP_HICONSM        (-34)\n\n/* BroadcastSystemMessage flags */\n#define BSM_ALLCOMPONENTS        0x00000000\n#define BSM_VXDS                 0x00000001\n#define BSM_NETDRIVER            0x00000002\n#define BSM_INSTALLABLEDRIVERS   0x00000004\n#define BSM_APPLICATIONS         0x00000008\n#define BSM_ALLDESKTOPS          0x00000010\n\n#define BSF_QUERY                0x00000001\n#define BSF_IGNORECURRENTTASK    0x00000002\n#define BSF_FLUSHDISK            0x00000004\n#define BSF_NOHANG               0x00000008\n#define BSF_POSTMESSAGE          0x00000010\n#define BSF_FORCEIFHUNG          0x00000020\n#define BSF_NOTIMEOUTIFNOTHUNG   0x00000040\n#define BSF_ALLOWSFW             0x00000080\n#define BSF_SENDNOTIFYMESSAGE    0x00000100\n#define BSF_RETURNHDESK          0x00000200\n#define BSF_LUID                 0x00000400\n\n#define BROADCAST_QUERY_DENY     0x424D5144\n\n/***** Window hooks *****/\n\n  /* Hook values */\n#define WH_MIN\t\t    (-1)\n#define WH_MSGFILTER\t    (-1)\n#define WH_JOURNALRECORD    0\n#define WH_JOURNALPLAYBACK  1\n#define WH_KEYBOARD\t    2\n#define WH_GETMESSAGE\t    3\n#define WH_CALLWNDPROC\t    4\n#define WH_CBT\t\t    5\n#define WH_SYSMSGFILTER\t    6\n#define WH_MOUSE\t    7\n#define WH_HARDWARE\t    8\n#define WH_DEBUG\t    9\n#define WH_SHELL            10\n#define WH_FOREGROUNDIDLE   11\n#define WH_CALLWNDPROCRET   12\n#define WH_KEYBOARD_LL      13\n#define WH_MOUSE_LL         14\n#define WH_MAX              14\n\n#define WH_MINHOOK          WH_MIN\n#define WH_MAXHOOK          WH_MAX\n\n  /* Hook action codes */\n#define HC_ACTION           0\n#define HC_GETNEXT          1\n#define HC_SKIP             2\n#define HC_NOREMOVE         3\n#define HC_NOREM            HC_NOREMOVE\n#define HC_SYSMODALON       4\n#define HC_SYSMODALOFF      5\n\n  /* CallMsgFilter() values */\n#define MSGF_DIALOGBOX      0\n#define MSGF_MESSAGEBOX     1\n#define MSGF_MENU           2\n#define MSGF_MOVE           3\n#define MSGF_SIZE           4\n#define MSGF_SCROLLBAR      5\n#define MSGF_NEXTWINDOW     6\n#define MSGF_MAX            8\n#define MSGF_USER           0x1000\n#define MSGF_DDEMGR         0x8001\n\ntypedef struct tagWNDCLASSA\n{\n    UINT      style;\n    WNDPROC   lpfnWndProc;\n    INT       cbClsExtra;\n    INT       cbWndExtra;\n    HINSTANCE hInstance;\n    HICON     hIcon;\n    HCURSOR   hCursor;\n    HBRUSH    hbrBackground;\n    LPCSTR      lpszMenuName;\n    LPCSTR      lpszClassName;\n} WNDCLASSA, *PWNDCLASSA, *LPWNDCLASSA;\n\ntypedef struct tagWNDCLASSW\n{\n    UINT      style;\n    WNDPROC   lpfnWndProc;\n    INT       cbClsExtra;\n    INT       cbWndExtra;\n    HINSTANCE hInstance;\n    HICON     hIcon;\n    HCURSOR   hCursor;\n    HBRUSH    hbrBackground;\n    LPCWSTR     lpszMenuName;\n    LPCWSTR     lpszClassName;\n} WNDCLASSW, *PWNDCLASSW, *LPWNDCLASSW;\n\nDECL_WINELIB_TYPE_AW(WNDCLASS)\nDECL_WINELIB_TYPE_AW(PWNDCLASS)\nDECL_WINELIB_TYPE_AW(LPWNDCLASS)\n\ntypedef struct tagCOPYDATASTRUCT {\n    ULONG_PTR dwData;\n    DWORD cbData;\n    PVOID lpData;\n} COPYDATASTRUCT, *PCOPYDATASTRUCT;\n\ntypedef struct tagMDINEXTMENU {\n    HMENU hmenuIn;\n    HMENU hmenuNext;\n    HWND  hwndNext;\n} MDINEXTMENU, *PMDINEXTMENU, *LPMDINEXTMENU;\n\ntypedef struct tagMULTIKEYHELPA\n{\n    DWORD   mkSize;\n    CHAR    mkKeylist;\n    CHAR    szKeyphrase[1];\n} MULTIKEYHELPA, *PMULTIKEYHELPA, *LPMULTIKEYHELPA;\n\ntypedef struct tagMULTIKEYHELPW\n{\n    DWORD   mkSize;\n    WCHAR   mkKeylist;\n    WCHAR   szKeyphrase[1];\n} MULTIKEYHELPW, *PMULTIKEYHELPW, *LPMULTIKEYHELPW;\n\nDECL_WINELIB_TYPE_AW(MULTIKEYHELP)\nDECL_WINELIB_TYPE_AW(PMULTIKEYHELP)\nDECL_WINELIB_TYPE_AW(LPMULTIKEYHELP)\n\ntypedef struct tagHELPWININFOA {\n\tint wStructSize;\n\tint x;\n\tint y;\n\tint dx;\n\tint dy;\n\tint wMax;\n\tCHAR rgchMember[2];\n} HELPWININFOA, *PHELPWININFOA, *LPHELPWININFOA;\n\ntypedef struct tagHELPWININFOW {\n\tint wStructSize;\n\tint x;\n\tint y;\n\tint dx;\n\tint dy;\n\tint wMax;\n\tWCHAR rgchMember[2];\n} HELPWININFOW, *PHELPWININFOW, *LPHELPWININFOW;\n\nDECL_WINELIB_TYPE_AW(HELPWININFO)\nDECL_WINELIB_TYPE_AW(PHELPWININFO)\nDECL_WINELIB_TYPE_AW(LPHELPWININFO)\n\n\n     /* ChangeDisplaySettings return codes */\n\n#define DISP_CHANGE_SUCCESSFUL 0\n#define DISP_CHANGE_RESTART    1\n#define DISP_CHANGE_FAILED     (-1)\n#define DISP_CHANGE_BADMODE    (-2)\n#define DISP_CHANGE_NOTUPDATED (-3)\n#define DISP_CHANGE_BADFLAGS   (-4)\n#define DISP_CHANGE_BADPARAM   (-5)\n#define DISP_CHANGE_BADDUALVIEW (-6)\n\n/* ChangeDisplaySettings.dwFlags */\n#define\tCDS_UPDATEREGISTRY\t0x00000001\n#define\tCDS_TEST\t\t0x00000002\n#define\tCDS_FULLSCREEN\t\t0x00000004\n#define\tCDS_GLOBAL\t\t0x00000008\n#define\tCDS_SET_PRIMARY\t\t0x00000010\n#define\tCDS_VIDEOPARAMETERS\t0x00000020\n#define\tCDS_NORESET\t\t0x10000000\n#define\tCDS_SETRECT\t\t0x20000000\n#define\tCDS_RESET\t\t0x40000000\n\ntypedef struct tagWNDCLASSEXA\n{\n    UINT      cbSize;\n    UINT      style;\n    WNDPROC   lpfnWndProc;\n    INT       cbClsExtra;\n    INT       cbWndExtra;\n    HINSTANCE hInstance;\n    HICON     hIcon;\n    HCURSOR   hCursor;\n    HBRUSH    hbrBackground;\n    LPCSTR      lpszMenuName;\n    LPCSTR      lpszClassName;\n    HICON     hIconSm;\n} WNDCLASSEXA, *PWNDCLASSEXA, *LPWNDCLASSEXA;\n\ntypedef struct tagWNDCLASSEXW\n{\n    UINT      cbSize;\n    UINT      style;\n    WNDPROC   lpfnWndProc;\n    INT       cbClsExtra;\n    INT       cbWndExtra;\n    HINSTANCE hInstance;\n    HICON     hIcon;\n    HCURSOR   hCursor;\n    HBRUSH    hbrBackground;\n    LPCWSTR     lpszMenuName;\n    LPCWSTR     lpszClassName;\n    HICON     hIconSm;\n} WNDCLASSEXW, *PWNDCLASSEXW, *LPWNDCLASSEXW;\n\nDECL_WINELIB_TYPE_AW(WNDCLASSEX)\nDECL_WINELIB_TYPE_AW(PWNDCLASSEX)\nDECL_WINELIB_TYPE_AW(LPWNDCLASSEX)\n\ntypedef struct tagMSG\n{\n    HWND    hwnd;\n    UINT    message;\n    WPARAM  wParam;\n    LPARAM    lParam;\n    DWORD     time;\n    POINT   pt;\n} MSG, *PMSG, *LPMSG;\n\n#define POINTSTOPOINT(pt, pts) { (pt).x = (pts).x; (pt).y = (pts).y; }\n#define POINTTOPOINTS(pt)      (MAKELONG((short)((pt).x), (short)((pt).y)))\n\n#define MAKELPARAM(low,high)   ((LPARAM)(DWORD)MAKELONG(low,high))\n#define MAKEWPARAM(low,high)   ((WPARAM)(DWORD)MAKELONG(low,high))\n#define MAKELRESULT(low,high)  ((LRESULT)(DWORD)MAKELONG(low,high))\n\n/* Cursors / Icons */\n\ntypedef struct _ICONINFO {\n\tBOOL\t\tfIcon;\n\tDWORD\t\txHotspot;\n\tDWORD\t\tyHotspot;\n\tHBITMAP\thbmMask;\n\tHBITMAP\thbmColor;\n} ICONINFO, *PICONINFO;\n\ntypedef struct _ICONINFOEXA\n{\n    DWORD     cbSize;\n    BOOL      fIcon;\n    DWORD     xHotspot;\n    DWORD     yHotspot;\n    HBITMAP   hbmMask;\n    HBITMAP   hbmColor;\n    WORD      wResID;\n    CHAR      szModName[MAX_PATH];\n    CHAR      szResName[MAX_PATH];\n} ICONINFOEXA, *PICONINFOEXA;\n\ntypedef struct _ICONINFOEXW\n{\n    DWORD     cbSize;\n    BOOL      fIcon;\n    DWORD     xHotspot;\n    DWORD     yHotspot;\n    HBITMAP   hbmMask;\n    HBITMAP   hbmColor;\n    WORD      wResID;\n    WCHAR     szModName[MAX_PATH];\n    WCHAR     szResName[MAX_PATH];\n} ICONINFOEXW, *PICONINFOEXW;\n\nDECL_WINELIB_TYPE_AW(ICONINFOEX)\nDECL_WINELIB_TYPE_AW(PICONINFOEX)\n\ntypedef struct tagCURSORINFO\n{\n    DWORD cbSize;\n    DWORD flags;\n    HCURSOR hCursor;\n    POINT ptScreenPos;\n} CURSORINFO, *PCURSORINFO, *LPCURSORINFO;\n\n#define CURSOR_SHOWING 0x00000001\n#define CURSOR_SUPPRESSED 0x00000002\n\n/* this is the 6 byte accel struct used in Win32 when presented to the user */\ntypedef struct tagACCEL\n{\n#ifdef WORDS_BIGENDIAN\n    WORD   fVirt;\n    WORD   key;\n    DWORD  cmd;\n#else\n    BYTE   fVirt;\n    WORD   key;\n    WORD   cmd;\n#endif\n} ACCEL, *LPACCEL;\n\n\n/* Flags for TrackPopupMenu */\n#define TPM_LEFTBUTTON    0x0000\n#define TPM_RECURSE       0x0001\n#define TPM_RIGHTBUTTON   0x0002\n#define TPM_LEFTALIGN     0x0000\n#define TPM_CENTERALIGN   0x0004\n#define TPM_RIGHTALIGN    0x0008\n#define TPM_TOPALIGN      0x0000\n#define TPM_VCENTERALIGN  0x0010\n#define TPM_BOTTOMALIGN   0x0020\n#define TPM_HORIZONTAL    0x0000\n#define TPM_VERTICAL      0x0040\n#define TPM_NONOTIFY      0x0080\n#define TPM_RETURNCMD     0x0100\n#define TPM_HORPOSANIMATION 0x0400\n#define TPM_HORNEGANIMATION 0x0800\n#define TPM_VERPOSANIMATION 0x1000\n#define TPM_VERNEGANIMATION 0x2000\n#define TPM_NOANIMATION     0x4000\n#define TPM_LAYOUTRTL       0x8000\n\ntypedef struct tagTPMPARAMS\n{\n    UINT   cbSize;\n    RECT   rcExclude;\n} TPMPARAMS, *LPTPMPARAMS;\n\n\n/*\n * Combobox information\n */\ntypedef struct tagCOMBOBOXINFO\n{\n    DWORD cbSize;\n    RECT  rcItem;\n    RECT  rcButton;\n    DWORD stateButton;\n    HWND  hwndCombo;\n    HWND  hwndItem;\n    HWND  hwndList;\n} COMBOBOXINFO, *PCOMBOBOXINFO, *LPCOMBOBOXINFO;\n\ntypedef struct tagMENUITEMINFOA {\n  UINT    cbSize;\n  UINT    fMask;\n  UINT    fType;\n  UINT    fState;\n  UINT    wID;\n  HMENU   hSubMenu;\n  HBITMAP hbmpChecked;\n  HBITMAP hbmpUnchecked;\n  ULONG_PTR dwItemData;\n  LPSTR   dwTypeData;\n  UINT    cch;\n  HBITMAP hbmpItem;\n} MENUITEMINFOA, *LPMENUITEMINFOA;\n\ntypedef struct tagMENUITEMINFOW {\n  UINT    cbSize;\n  UINT    fMask;\n  UINT    fType;\n  UINT    fState;\n  UINT    wID;\n  HMENU   hSubMenu;\n  HBITMAP hbmpChecked;\n  HBITMAP hbmpUnchecked;\n  ULONG_PTR dwItemData;\n  LPWSTR  dwTypeData;\n  UINT    cch;\n  HBITMAP hbmpItem;\n} MENUITEMINFOW, *LPMENUITEMINFOW;\n\nDECL_WINELIB_TYPE_AW(MENUITEMINFO)\nDECL_WINELIB_TYPE_AW(LPMENUITEMINFO)\ntypedef const MENUITEMINFOA *LPCMENUITEMINFOA;\ntypedef const MENUITEMINFOW *LPCMENUITEMINFOW;\nDECL_WINELIB_TYPE_AW(LPCMENUITEMINFO)\n\ntypedef struct tagMENUBARINFO {\n  DWORD cbSize;\n  RECT  rcBar;\n  HMENU hMenu;\n  HWND  hwndMenu;\n  BOOL  fBarFocused:1;\n  BOOL  fFocused:1;\n} MENUBARINFO, *PMENUBARINFO, *LPMENUBARINFO;\n\ntypedef struct tagMENUINFO {\n  DWORD   cbSize;\n  DWORD   fMask;\n  DWORD   dwStyle;\n  UINT    cyMax;\n  HBRUSH  hbrBack;\n  DWORD   dwContextHelpID;\n  ULONG_PTR dwMenuData;\n} MENUINFO, *LPMENUINFO;\n\ntypedef const MENUINFO *LPCMENUINFO;\n\n#define MIM_MAXHEIGHT\t\t0x00000001\n#define MIM_BACKGROUND\t\t0x00000002\n#define MIM_HELPID\t\t0x00000004\n#define MIM_MENUDATA\t\t0x00000008\n#define MIM_STYLE\t\t0x00000010\n#define MIM_APPLYTOSUBMENUS\t0x80000000\n\n#define MNS_NOCHECK             0x80000000\n#define MNS_MODELESS            0x40000000\n#define MNS_DRAGDROP            0x20000000\n#define MNS_AUTODISMISS         0x10000000\n#define MNS_NOTIFYBYPOS         0x08000000\n#define MNS_CHECKORBMP          0x04000000\n\ntypedef struct {\n  WORD versionNumber;\n  WORD offset;\n} MENUITEMTEMPLATEHEADER, *PMENUITEMTEMPLATEHEADER;\n\n\ntypedef struct {\n  WORD mtOption;\n  WORD mtID;\n  WCHAR mtString[1];\n} MENUITEMTEMPLATE, *PMENUITEMTEMPLATE;\n\n\ntypedef VOID   MENUTEMPLATE;\ntypedef PVOID *LPMENUTEMPLATE;\n\n/* Field specifiers for MENUITEMINFO[AW] type.  */\n#define MIIM_STATE       0x00000001\n#define MIIM_ID          0x00000002\n#define MIIM_SUBMENU     0x00000004\n#define MIIM_CHECKMARKS  0x00000008\n#define MIIM_TYPE        0x00000010\n#define MIIM_DATA        0x00000020\n#define MIIM_STRING      0x00000040\n#define MIIM_BITMAP      0x00000080\n#define MIIM_FTYPE       0x00000100\n\n#define HBMMENU_CALLBACK\t((HBITMAP) -1)\n#define HBMMENU_SYSTEM\t\t((HBITMAP)  1)\n#define HBMMENU_MBAR_RESTORE\t((HBITMAP)  2)\n#define HBMMENU_MBAR_MINIMIZE\t((HBITMAP)  3)\n#define HBMMENU_MBAR_CLOSE\t((HBITMAP)  5)\n#define HBMMENU_MBAR_CLOSE_D\t((HBITMAP)  6)\n#define HBMMENU_MBAR_MINIMIZE_D\t((HBITMAP)  7)\n#define HBMMENU_POPUP_CLOSE\t((HBITMAP)  8)\n#define HBMMENU_POPUP_RESTORE\t((HBITMAP)  9)\n#define HBMMENU_POPUP_MAXIMIZE\t((HBITMAP) 10)\n#define HBMMENU_POPUP_MINIMIZE\t((HBITMAP) 11)\n\n/* WM_H/VSCROLL commands */\n#define SB_LINEUP           0\n#define SB_LINELEFT         0\n#define SB_LINEDOWN         1\n#define SB_LINERIGHT        1\n#define SB_PAGEUP           2\n#define SB_PAGELEFT         2\n#define SB_PAGEDOWN         3\n#define SB_PAGERIGHT        3\n#define SB_THUMBPOSITION    4\n#define SB_THUMBTRACK       5\n#define SB_TOP              6\n#define SB_LEFT             6\n#define SB_BOTTOM           7\n#define SB_RIGHT            7\n#define SB_ENDSCROLL        8\n\n/* Scroll bar selection constants */\n#define SB_HORZ             0\n#define SB_VERT             1\n#define SB_CTL              2\n#define SB_BOTH             3\n\n/* EnableScrollBar() flags */\n#define ESB_ENABLE_BOTH     0x0000\n#define ESB_DISABLE_BOTH    0x0003\n\n#define ESB_DISABLE_LEFT    0x0001\n#define ESB_DISABLE_RIGHT   0x0002\n\n#define ESB_DISABLE_UP      0x0001\n#define ESB_DISABLE_DOWN    0x0002\n\n#define ESB_DISABLE_LTUP    ESB_DISABLE_LEFT\n#define ESB_DISABLE_RTDN    ESB_DISABLE_RIGHT\n\n/* Static Control Messages */\n#define STM_SETICON       0x0170\n#define STM_GETICON       0x0171\n#define STM_SETIMAGE        0x0172\n#define STM_GETIMAGE        0x0173\n#define STM_MSGMAX          0x0174\n\n#define STN_CLICKED         0\n#define STN_DBLCLK          1\n#define STN_ENABLE          2\n#define STN_DISABLE         3\n\n/* Scrollbar messages */\n#define SBM_SETPOS             0x00e0\n#define SBM_GETPOS             0x00e1\n#define SBM_SETRANGE           0x00e2\n#define SBM_GETRANGE           0x00e3\n#define SBM_ENABLE_ARROWS      0x00e4\n#define SBM_SETRANGEREDRAW     0x00e6\n#define SBM_SETSCROLLINFO      0x00e9\n#define SBM_GETSCROLLINFO      0x00ea\n#define SBM_GETSCROLLBARINFO   0x00eb\n\n/* Scrollbar info */\ntypedef struct tagSCROLLINFO\n{\n    UINT    cbSize;\n    UINT    fMask;\n    INT     nMin;\n    INT     nMax;\n    UINT    nPage;\n    INT     nPos;\n    INT     nTrackPos;\n} SCROLLINFO, *LPSCROLLINFO;\n\ntypedef const SCROLLINFO *LPCSCROLLINFO;\n\n#define CCHILDREN_SCROLLBAR 5\n\ntypedef struct tagSCROLLBARINFO\n{\n    DWORD   cbSize;             /* Size of SCROLLBARINFO struct */\n    RECT    rcScrollBar;        /* Coordinates of the scroll bar */\n    INT     dxyLineButton;      /* Height or width */\n    INT     xyThumbTop;         /* Position of the top or the left */\n    INT     xyThumbBottom;      /* Position of the bottom or the right */\n    INT     reserved;\n    DWORD   rgstate[CCHILDREN_SCROLLBAR+1];\n} SCROLLBARINFO, *PSCROLLBARINFO, *LPSCROLLBARINFO;\n\n/* GetScrollInfo() flags */\n#define SIF_RANGE           0x0001\n#define SIF_PAGE            0x0002\n#define SIF_POS             0x0004\n#define SIF_DISABLENOSCROLL 0x0008\n#define SIF_TRACKPOS        0x0010\n#define SIF_ALL             (SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS)\n\n/* Listbox messages */\n#define LB_ADDSTRING           0x0180\n#define LB_INSERTSTRING        0x0181\n#define LB_DELETESTRING        0x0182\n#define LB_SELITEMRANGEEX      0x0183\n#define LB_RESETCONTENT        0x0184\n#define LB_SETSEL              0x0185\n#define LB_SETCURSEL           0x0186\n#define LB_GETSEL              0x0187\n#define LB_GETCURSEL           0x0188\n#define LB_GETTEXT             0x0189\n#define LB_GETTEXTLEN          0x018a\n#define LB_GETCOUNT            0x018b\n#define LB_SELECTSTRING        0x018c\n#define LB_DIR                 0x018d\n#define LB_GETTOPINDEX         0x018e\n#define LB_FINDSTRING          0x018f\n#define LB_GETSELCOUNT         0x0190\n#define LB_GETSELITEMS         0x0191\n#define LB_SETTABSTOPS         0x0192\n#define LB_GETHORIZONTALEXTENT 0x0193\n#define LB_SETHORIZONTALEXTENT 0x0194\n#define LB_SETCOLUMNWIDTH      0x0195\n#define LB_ADDFILE             0x0196\n#define LB_SETTOPINDEX         0x0197\n#define LB_GETITEMRECT         0x0198\n#define LB_GETITEMDATA         0x0199\n#define LB_SETITEMDATA         0x019a\n#define LB_SELITEMRANGE        0x019b\n#define LB_SETANCHORINDEX      0x019c\n#define LB_GETANCHORINDEX      0x019d\n#define LB_SETCARETINDEX       0x019e\n#define LB_GETCARETINDEX       0x019f\n#define LB_SETITEMHEIGHT       0x01a0\n#define LB_GETITEMHEIGHT       0x01a1\n#define LB_FINDSTRINGEXACT     0x01a2\n#define LB_CARETON             0x01a3\n#define LB_CARETOFF            0x01a4\n#define LB_SETLOCALE           0x01a5\n#define LB_GETLOCALE           0x01a6\n#define LB_SETCOUNT            0x01a7\n#define LB_INITSTORAGE         0x01a8\n#define LB_ITEMFROMPOINT       0x01a9\n#define LB_GETLISTBOXINFO      0x01b2\n#define LB_MSGMAX              0x01b3\n\n/* Listbox notification codes */\n#define LBN_ERRSPACE        (-2)\n#define LBN_SELCHANGE       1\n#define LBN_DBLCLK          2\n#define LBN_SELCANCEL       3\n#define LBN_SETFOCUS        4\n#define LBN_KILLFOCUS       5\n\n/* Listbox message return values */\n#define LB_OKAY             0\n#define LB_ERR              (-1)\n#define LB_ERRSPACE         (-2)\n\n#define LB_CTLCODE          __MSABI_LONG(0)\n\n/* Combo box messages */\n#define CB_GETEDITSEL            0x0140\n#define CB_LIMITTEXT             0x0141\n#define CB_SETEDITSEL            0x0142\n#define CB_ADDSTRING             0x0143\n#define CB_DELETESTRING          0x0144\n#define CB_DIR                   0x0145\n#define CB_GETCOUNT              0x0146\n#define CB_GETCURSEL             0x0147\n#define CB_GETLBTEXT             0x0148\n#define CB_GETLBTEXTLEN          0x0149\n#define CB_INSERTSTRING          0x014a\n#define CB_RESETCONTENT          0x014b\n#define CB_FINDSTRING            0x014c\n#define CB_SELECTSTRING          0x014d\n#define CB_SETCURSEL             0x014e\n#define CB_SHOWDROPDOWN          0x014f\n#define CB_GETITEMDATA           0x0150\n#define CB_SETITEMDATA           0x0151\n#define CB_GETDROPPEDCONTROLRECT 0x0152\n#define CB_SETITEMHEIGHT         0x0153\n#define CB_GETITEMHEIGHT         0x0154\n#define CB_SETEXTENDEDUI         0x0155\n#define CB_GETEXTENDEDUI         0x0156\n#define CB_GETDROPPEDSTATE       0x0157\n#define CB_FINDSTRINGEXACT       0x0158\n#define CB_SETLOCALE             0x0159\n#define CB_GETLOCALE             0x015a\n#define CB_GETTOPINDEX           0x015b\n#define CB_SETTOPINDEX           0x015c\n#define CB_GETHORIZONTALEXTENT   0x015d\n#define CB_SETHORIZONTALEXTENT   0x015e\n#define CB_GETDROPPEDWIDTH       0x015f\n#define CB_SETDROPPEDWIDTH       0x0160\n#define CB_INITSTORAGE           0x0161\n#define CB_MULTIPLEADDSTRING     0x0163\n#define CB_GETCOMBOBOXINFO       0x0164\n#define CB_MSGMAX                0x0165\n\n/* Combo box notification codes */\n#define CBN_ERRSPACE        (-1)\n#define CBN_SELCHANGE       1\n#define CBN_DBLCLK          2\n#define CBN_SETFOCUS        3\n#define CBN_KILLFOCUS       4\n#define CBN_EDITCHANGE      5\n#define CBN_EDITUPDATE      6\n#define CBN_DROPDOWN        7\n#define CBN_CLOSEUP         8\n#define CBN_SELENDOK        9\n#define CBN_SELENDCANCEL    10\n\n/* Combo box message return values */\n#define CB_OKAY             0\n#define CB_ERR              (-1)\n#define CB_ERRSPACE         (-2)\n\n#define MB_OK\t\t\t0x00000000\n#define MB_OKCANCEL\t\t0x00000001\n#define MB_ABORTRETRYIGNORE\t0x00000002\n#define MB_YESNOCANCEL\t\t0x00000003\n#define MB_YESNO\t\t0x00000004\n#define MB_RETRYCANCEL\t\t0x00000005\n#define MB_CANCELTRYCONTINUE\t0x00000006\n#define MB_TYPEMASK\t\t0x0000000F\n\n#define MB_ICONHAND\t\t0x00000010\n#define MB_ICONQUESTION\t\t0x00000020\n#define MB_ICONEXCLAMATION\t0x00000030\n#define MB_ICONASTERISK\t\t0x00000040\n#define\tMB_USERICON\t\t0x00000080\n#define MB_ICONMASK\t\t0x000000F0\n\n#define MB_ICONINFORMATION\tMB_ICONASTERISK\n#define MB_ICONSTOP\t\tMB_ICONHAND\n#define MB_ICONWARNING\t\tMB_ICONEXCLAMATION\n#define MB_ICONERROR\t\tMB_ICONHAND\n\n#define MB_DEFBUTTON1\t\t0x00000000\n#define MB_DEFBUTTON2\t\t0x00000100\n#define MB_DEFBUTTON3\t\t0x00000200\n#define MB_DEFBUTTON4\t\t0x00000300\n#define MB_DEFMASK\t\t0x00000F00\n\n#define MB_APPLMODAL\t\t0x00000000\n#define MB_SYSTEMMODAL\t\t0x00001000\n#define MB_TASKMODAL\t\t0x00002000\n#define MB_MODEMASK\t\t0x00003000\n\n#define MB_HELP\t\t\t0x00004000\n#define MB_NOFOCUS\t\t0x00008000\n#define MB_MISCMASK\t\t0x0000C000\n\n#define MB_SETFOREGROUND\t0x00010000\n#define MB_DEFAULT_DESKTOP_ONLY\t0x00020000\n#define MB_SERVICE_NOTIFICATION\t0x00040000\n#define MB_TOPMOST\t\t0x00040000\n#define MB_RIGHT\t\t0x00080000\n#define MB_RTLREADING\t\t0x00100000\n\n#define\tHELPINFO_WINDOW\t\t0x0001\n#define\tHELPINFO_MENUITEM\t0x0002\n\n/* Structure pointed to by lParam of WM_HELP */\ntypedef struct tagHELPINFO\n{\n    UINT\tcbSize;\t\t/* Size in bytes of this struct  */\n    INT\tiContextType;\t/* Either HELPINFO_WINDOW or HELPINFO_MENUITEM */\n    INT\tiCtrlId;\t/* Control Id or a Menu item Id. */\n    HANDLE\thItemHandle;\t/* hWnd of control or hMenu.     */\n    DWORD_PTR\tdwContextId;\t/* Context Id associated with this item */\n    POINT\tMousePos;\t/* Mouse Position in screen co-ordinates */\n}  HELPINFO,*LPHELPINFO;\n\ntypedef void (CALLBACK *MSGBOXCALLBACK)(LPHELPINFO lpHelpInfo);\n\ntypedef struct tagMSGBOXPARAMSA\n{\n    UINT\tcbSize;\n    HWND\thwndOwner;\n    HINSTANCE\thInstance;\n    LPCSTR\tlpszText;\n    LPCSTR\tlpszCaption;\n    DWORD\tdwStyle;\n    LPCSTR\tlpszIcon;\n    DWORD_PTR\tdwContextHelpId;\n    MSGBOXCALLBACK\tlpfnMsgBoxCallback;\n    DWORD\tdwLanguageId;\n} MSGBOXPARAMSA, *PMSGBOXPARAMSA, *LPMSGBOXPARAMSA;\n\ntypedef struct tagMSGBOXPARAMSW\n{\n    UINT\tcbSize;\n    HWND\thwndOwner;\n    HINSTANCE\thInstance;\n    LPCWSTR\tlpszText;\n    LPCWSTR\tlpszCaption;\n    DWORD\tdwStyle;\n    LPCWSTR\tlpszIcon;\n    DWORD_PTR\tdwContextHelpId;\n    MSGBOXCALLBACK\tlpfnMsgBoxCallback;\n    DWORD\tdwLanguageId;\n} MSGBOXPARAMSW, *PMSGBOXPARAMSW, *LPMSGBOXPARAMSW;\n\nDECL_WINELIB_TYPE_AW(MSGBOXPARAMS)\nDECL_WINELIB_TYPE_AW(PMSGBOXPARAMS)\nDECL_WINELIB_TYPE_AW(LPMSGBOXPARAMS)\n\n#define MONITOR_DEFAULTTONULL       0x00000000\n#define MONITOR_DEFAULTTOPRIMARY    0x00000001\n#define MONITOR_DEFAULTTONEAREST    0x00000002\n\n#define MONITORINFOF_PRIMARY        0x00000001\n\n#ifndef CCHDEVICENAME\n#define CCHDEVICENAME 32\n#endif\n\ntypedef struct tagMONITORINFO\n{\n    DWORD cbSize;\n    RECT  rcMonitor;\n    RECT  rcWork;\n    DWORD dwFlags;\n} MONITORINFO, *LPMONITORINFO;\n\ntypedef struct tagMONITORINFOEXA\n{   /* the 4 first entries are the same as MONITORINFO */\n    DWORD\tcbSize;\t\n    RECT\trcMonitor;\n    RECT\trcWork;\n    DWORD\tdwFlags;\n    CHAR        szDevice[CCHDEVICENAME];\n} MONITORINFOEXA, *LPMONITORINFOEXA;\n\ntypedef struct tagMONITORINFOEXW\n{   /* the 4 first entries are the same as MONITORINFO */\n    DWORD\tcbSize;\n    RECT\trcMonitor;\n    RECT\trcWork;\n    DWORD\tdwFlags;\n    WCHAR       szDevice[CCHDEVICENAME];\n} MONITORINFOEXW, *LPMONITORINFOEXW;\n\nDECL_WINELIB_TYPE_AW(MONITORINFOEX)\nDECL_WINELIB_TYPE_AW(LPMONITORINFOEX)\n\ntypedef BOOL  (CALLBACK *MONITORENUMPROC)(HMONITOR,HDC,LPRECT,LPARAM);\n\n#include <pshpack2.h>\n\ntypedef struct tagDLGTEMPLATE\n{\n    DWORD style;\n    DWORD dwExtendedStyle;\n    WORD cdit;\n    short x;\n    short y;\n    short cx;\n    short cy;\n} DLGTEMPLATE;\n\ntypedef DLGTEMPLATE *LPDLGTEMPLATEA;\ntypedef DLGTEMPLATE *LPDLGTEMPLATEW;\nDECL_WINELIB_TYPE_AW(LPDLGTEMPLATE)\ntypedef const DLGTEMPLATE *LPCDLGTEMPLATEA;\ntypedef const DLGTEMPLATE *LPCDLGTEMPLATEW;\nDECL_WINELIB_TYPE_AW(LPCDLGTEMPLATE)\n\ntypedef struct tagDLGITEMTEMPLATE\n{\n    DWORD style;\n    DWORD dwExtendedStyle;\n    short x;\n    short y;\n    short cx;\n    short cy;\n    WORD id;\n} DLGITEMTEMPLATE;\n\ntypedef DLGITEMTEMPLATE *PDLGITEMTEMPLATEA;\ntypedef DLGITEMTEMPLATE *PDLGITEMTEMPLATEW;\nDECL_WINELIB_TYPE_AW(PDLGITEMTEMPLATE)\ntypedef DLGITEMTEMPLATE *LPDLGITEMTEMPLATEA;\ntypedef DLGITEMTEMPLATE *LPDLGITEMTEMPLATEW;\nDECL_WINELIB_TYPE_AW(LPDLGITEMTEMPLATE)\n\n#include <poppack.h>\n\n  /* CBT hook values */\n#define HCBT_MOVESIZE\t    0\n#define HCBT_MINMAX\t    1\n#define HCBT_QS \t    2\n#define HCBT_CREATEWND\t    3\n#define HCBT_DESTROYWND\t    4\n#define HCBT_ACTIVATE\t    5\n#define HCBT_CLICKSKIPPED   6\n#define HCBT_KEYSKIPPED     7\n#define HCBT_SYSCOMMAND\t    8\n#define HCBT_SETFOCUS\t    9\n\n  /* CBT hook structures */\n\ntypedef struct tagCBT_CREATEWNDA\n{\n    CREATESTRUCTA *lpcs;\n    HWND           hwndInsertAfter;\n} CBT_CREATEWNDA, *LPCBT_CREATEWNDA;\n\ntypedef struct tagCBT_CREATEWNDW\n{\n    CREATESTRUCTW *lpcs;\n    HWND           hwndInsertAfter;\n} CBT_CREATEWNDW, *LPCBT_CREATEWNDW;\n\nDECL_WINELIB_TYPE_AW(CBT_CREATEWND)\nDECL_WINELIB_TYPE_AW(LPCBT_CREATEWND)\n\ntypedef struct tagCBTACTIVATESTRUCT\n{\n    BOOL    fMouse;\n    HWND    hWndActive;\n} CBTACTIVATESTRUCT, *LPCBTACTIVATESTRUCT;\n\n\ntypedef struct tagDROPSTRUCT\n{\n    HWND      hwndSource;\n    HWND      hwndSink;\n    DWORD     wFmt;\n    ULONG_PTR dwData;\n    POINT     ptDrop;\n    DWORD     dwControlData;\n} DROPSTRUCT, *PDROPSTRUCT, *LPDROPSTRUCT;\n\n#define DOF_EXECUTABLE  0x8001\n#define DOF_DOCUMENT    0x8002\n#define DOF_DIRECTORY   0x8003\n#define DOF_MULTIPLE    0x8004\n#define DOF_PROGMAN     0x0001\n#define DOF_SHELLDATA   0x0002\n\n/* modifiers for RegisterHotKey */\n#define\tMOD_ALT\t\t0x0001\n#define\tMOD_CONTROL\t0x0002\n#define\tMOD_SHIFT\t0x0004\n#define\tMOD_WIN\t\t0x0008\n\n/* ids for RegisterHotKey */\n#define\tIDHOT_SNAPWINDOW\t(-1)    /* SHIFT-PRINTSCRN  */\n#define\tIDHOT_SNAPDESKTOP\t(-2)    /* PRINTSCRN        */\n\n  /* keybd_event flags */\n#define KEYEVENTF_EXTENDEDKEY        0x0001\n#define KEYEVENTF_KEYUP              0x0002\n#define KEYEVENTF_UNICODE            0x0004\n#define KEYEVENTF_SCANCODE           0x0008\n\n  /* mouse_event flags */\n#define MOUSEEVENTF_MOVE            0x0001\n#define MOUSEEVENTF_LEFTDOWN        0x0002\n#define MOUSEEVENTF_LEFTUP          0x0004\n#define MOUSEEVENTF_RIGHTDOWN       0x0008\n#define MOUSEEVENTF_RIGHTUP         0x0010\n#define MOUSEEVENTF_MIDDLEDOWN      0x0020\n#define MOUSEEVENTF_MIDDLEUP        0x0040\n#define MOUSEEVENTF_XDOWN           0x0080\n#define MOUSEEVENTF_XUP             0x0100\n#define MOUSEEVENTF_WHEEL           0x0800\n#define MOUSEEVENTF_HWHEEL          0x1000\n#define MOUSEEVENTF_MOVE_NOCOALESCE 0x2000\n#define MOUSEEVENTF_VIRTUALDESK     0x4000\n#define MOUSEEVENTF_ABSOLUTE        0x8000\n\n/* ExitWindows() flags */\n#define EW_RESTARTWINDOWS   0x0042\n#define EW_REBOOTSYSTEM     0x0043\n#define EW_EXITANDEXECAPP   0x0044\n\n/* ExitWindowsEx() flags */\n#define EWX_LOGOFF           0\n#define EWX_SHUTDOWN         1\n#define EWX_REBOOT           2\n#define EWX_FORCE            4\n#define EWX_POWEROFF         8\n#define EWX_FORCEIFHUNG     16\n\n/* SetLastErrorEx types */\n#define\tSLE_ERROR\t0x00000001\n#define\tSLE_MINORERROR\t0x00000002\n#define\tSLE_WARNING\t0x00000003\n\n/* Predefined resources */\n#define IDI_APPLICATION    MAKEINTRESOURCE(32512)\n#define IDI_HAND           MAKEINTRESOURCE(32513)\n#define IDI_QUESTION       MAKEINTRESOURCE(32514)\n#define IDI_EXCLAMATION    MAKEINTRESOURCE(32515)\n#define IDI_ASTERISK       MAKEINTRESOURCE(32516)\n#define IDI_WINLOGO        MAKEINTRESOURCE(32517)\n\n#define IDI_WARNING        IDI_EXCLAMATION\n#define IDI_ERROR          IDI_HAND\n#define IDI_INFORMATION    IDI_ASTERISK\n\n#define IDC_ARROW          MAKEINTRESOURCE(32512)\n#define IDC_IBEAM          MAKEINTRESOURCE(32513)\n#define IDC_WAIT           MAKEINTRESOURCE(32514)\n#define IDC_CROSS          MAKEINTRESOURCE(32515)\n#define IDC_UPARROW        MAKEINTRESOURCE(32516)\n#define IDC_PEN            MAKEINTRESOURCE(32631)\n#define IDC_SIZE           MAKEINTRESOURCE(32640)\n#define IDC_ICON           MAKEINTRESOURCE(32641)\n#define IDC_SIZENWSE       MAKEINTRESOURCE(32642)\n#define IDC_SIZENESW       MAKEINTRESOURCE(32643)\n#define IDC_SIZEWE         MAKEINTRESOURCE(32644)\n#define IDC_SIZENS         MAKEINTRESOURCE(32645)\n#define IDC_SIZEALL        MAKEINTRESOURCE(32646)\n#define IDC_NO             MAKEINTRESOURCE(32648)\n#define IDC_HAND           MAKEINTRESOURCE(32649)\n#define IDC_APPSTARTING    MAKEINTRESOURCE(32650)\n#define IDC_HELP           MAKEINTRESOURCE(32651)\n\n#define MNC_IGNORE 0\n#define MNC_CLOSE 1\n#define MNC_EXECUTE 2\n#define MNC_SELECT 3\n\n/* SystemParametersInfo */\n#define SPI_GETBEEP               1\n#define SPI_SETBEEP               2\n#define SPI_GETMOUSE              3\n#define SPI_SETMOUSE              4\n#define SPI_GETBORDER             5\n#define SPI_SETBORDER             6\n#define SPI_GETKEYBOARDSPEED      10\n#define SPI_SETKEYBOARDSPEED      11\n#define SPI_LANGDRIVER            12\n#define SPI_ICONHORIZONTALSPACING 13\n#define SPI_GETSCREENSAVETIMEOUT  14\n#define SPI_SETSCREENSAVETIMEOUT  15\n#define SPI_GETSCREENSAVEACTIVE   16\n#define SPI_SETSCREENSAVEACTIVE   17\n#define SPI_GETGRIDGRANULARITY    18\n#define SPI_SETGRIDGRANULARITY    19\n#define SPI_SETDESKWALLPAPER      20\n#define SPI_SETDESKPATTERN        21\n#define SPI_GETKEYBOARDDELAY      22\n#define SPI_SETKEYBOARDDELAY      23\n#define SPI_ICONVERTICALSPACING   24\n#define SPI_GETICONTITLEWRAP      25\n#define SPI_SETICONTITLEWRAP      26\n#define SPI_GETMENUDROPALIGNMENT  27\n#define SPI_SETMENUDROPALIGNMENT  28\n#define SPI_SETDOUBLECLKWIDTH     29\n#define SPI_SETDOUBLECLKHEIGHT    30\n#define SPI_GETICONTITLELOGFONT   31\n#define SPI_SETDOUBLECLICKTIME    32\n#define SPI_SETMOUSEBUTTONSWAP    33\n#define SPI_SETICONTITLELOGFONT   34\n#define SPI_GETFASTTASKSWITCH     35\n#define SPI_SETFASTTASKSWITCH     36\n#define SPI_SETDRAGFULLWINDOWS    37\n#define SPI_GETDRAGFULLWINDOWS    38\n#define SPI_GETNONCLIENTMETRICS   41\n#define SPI_SETNONCLIENTMETRICS   42\n#define SPI_GETMINIMIZEDMETRICS   43\n#define SPI_SETMINIMIZEDMETRICS   44\n#define SPI_GETICONMETRICS        45\n#define SPI_SETICONMETRICS        46\n#define SPI_SETWORKAREA           47\n#define SPI_GETWORKAREA           48\n#define SPI_SETPENWINDOWS         49\n#define SPI_GETFILTERKEYS         50\n#define SPI_SETFILTERKEYS         51\n#define SPI_GETTOGGLEKEYS         52\n#define SPI_SETTOGGLEKEYS         53\n#define SPI_GETMOUSEKEYS          54\n#define SPI_SETMOUSEKEYS          55\n#define SPI_GETSHOWSOUNDS         56\n#define SPI_SETSHOWSOUNDS         57\n#define SPI_GETSTICKYKEYS         58\n#define SPI_SETSTICKYKEYS         59\n#define SPI_GETACCESSTIMEOUT      60\n#define SPI_SETACCESSTIMEOUT      61\n#define SPI_GETSERIALKEYS         62\n#define SPI_SETSERIALKEYS         63\n#define SPI_GETSOUNDSENTRY        64\n#define SPI_SETSOUNDSENTRY        65\n#define SPI_GETHIGHCONTRAST       66\n#define SPI_SETHIGHCONTRAST       67\n#define SPI_GETKEYBOARDPREF       68\n#define SPI_SETKEYBOARDPREF       69\n#define SPI_GETSCREENREADER       70\n#define SPI_SETSCREENREADER       71\n#define SPI_GETANIMATION          72\n#define SPI_SETANIMATION          73\n#define SPI_GETFONTSMOOTHING      74\n#define SPI_SETFONTSMOOTHING      75\n#define SPI_SETDRAGWIDTH          76\n#define SPI_SETDRAGHEIGHT         77\n#define SPI_SETHANDHELD           78\n#define SPI_GETLOWPOWERTIMEOUT    79\n#define SPI_GETPOWEROFFTIMEOUT    80\n#define SPI_SETLOWPOWERTIMEOUT    81\n#define SPI_SETPOWEROFFTIMEOUT    82\n#define SPI_GETLOWPOWERACTIVE     83\n#define SPI_GETPOWEROFFACTIVE     84\n#define SPI_SETLOWPOWERACTIVE     85\n#define SPI_SETPOWEROFFACTIVE     86\n#define SPI_SETCURSORS            87\n#define SPI_SETICONS              88\n#define SPI_GETDEFAULTINPUTLANG   89\n#define SPI_SETDEFAULTINPUTLANG   90\n#define SPI_SETLANGTOGGLE         91\n#define SPI_GETWINDOWSEXTENSION   92\n#define SPI_SETMOUSETRAILS        93\n#define SPI_GETMOUSETRAILS        94\n#define SPI_GETSNAPTODEFBUTTON    95\n#define SPI_SETSNAPTODEFBUTTON    96\n#define SPI_SETSCREENSAVERRUNNING 97\n#define SPI_SCREENSAVERRUNNING    SPI_SETSCREENSAVERRUNNING\n#define SPI_GETMOUSEHOVERWIDTH    98\n#define SPI_SETMOUSEHOVERWIDTH    99\n#define SPI_GETMOUSEHOVERHEIGHT   100\n#define SPI_SETMOUSEHOVERHEIGHT   101\n#define SPI_GETMOUSEHOVERTIME     102\n#define SPI_SETMOUSEHOVERTIME     103\n#define SPI_GETWHEELSCROLLLINES   104\n#define SPI_SETWHEELSCROLLLINES   105\n#define SPI_GETMENUSHOWDELAY      106\n#define SPI_SETMENUSHOWDELAY      107\n#define SPI_GETWHEELSCROLLCHARS   108\n#define SPI_SETWHEELSCROLLCHARS   109\n#define SPI_GETSHOWIMEUI          110\n#define SPI_SETSHOWIMEUI          111\n#define SPI_GETMOUSESPEED         112\n#define SPI_SETMOUSESPEED         113\n#define SPI_GETSCREENSAVERRUNNING 114\n#define SPI_GETDESKWALLPAPER      115\n#define SPI_GETAUDIODESCRIPTION   116\n#define SPI_SETAUDIODESCRIPTION   117\n\n#define SPI_GETACTIVEWINDOWTRACKING    0x1000\n#define SPI_SETACTIVEWINDOWTRACKING    0x1001\n#define SPI_GETMENUANIMATION           0x1002\n#define SPI_SETMENUANIMATION           0x1003\n#define SPI_GETCOMBOBOXANIMATION       0x1004\n#define SPI_SETCOMBOBOXANIMATION       0x1005\n#define SPI_GETLISTBOXSMOOTHSCROLLING  0x1006\n#define SPI_SETLISTBOXSMOOTHSCROLLING  0x1007\n#define SPI_GETGRADIENTCAPTIONS        0x1008\n#define SPI_SETGRADIENTCAPTIONS        0x1009\n#define SPI_GETKEYBOARDCUES            0x100A\n#define SPI_SETKEYBOARDCUES            0x100B\n#define SPI_GETMENUUNDERLINES          SPI_GETKEYBOARDCUES\n#define SPI_SETMENUUNDERLINES          SPI_SETKEYBOARDCUES\n#define SPI_GETACTIVEWNDTRKZORDER      0x100C\n#define SPI_SETACTIVEWNDTRKZORDER      0x100D\n#define SPI_GETHOTTRACKING             0x100E\n#define SPI_SETHOTTRACKING             0x100F\n#define SPI_GETMENUFADE                0x1012\n#define SPI_SETMENUFADE                0x1013\n#define SPI_GETSELECTIONFADE           0x1014\n#define SPI_SETSELECTIONFADE           0x1015\n#define SPI_GETTOOLTIPANIMATION        0x1016\n#define SPI_SETTOOLTIPANIMATION        0x1017\n#define SPI_GETTOOLTIPFADE             0x1018\n#define SPI_SETTOOLTIPFADE             0x1019\n#define SPI_GETCURSORSHADOW            0x101A\n#define SPI_SETCURSORSHADOW            0x101B\n#define SPI_GETMOUSESONAR              0x101C\n#define SPI_SETMOUSESONAR              0x101D\n#define SPI_GETMOUSECLICKLOCK          0x101E\n#define SPI_SETMOUSECLICKLOCK          0x101F\n#define SPI_GETMOUSEVANISH             0x1020\n#define SPI_SETMOUSEVANISH             0x1021\n#define SPI_GETFLATMENU                0x1022\n#define SPI_SETFLATMENU                0x1023\n#define SPI_GETDROPSHADOW              0x1024\n#define SPI_SETDROPSHADOW              0x1025\n#define SPI_GETBLOCKSENDINPUTRESETS    0x1026\n#define SPI_SETBLOCKSENDINPUTRESETS    0x1027\n#define SPI_GETUIEFFECTS               0x103E\n#define SPI_SETUIEFFECTS               0x103F\n#define SPI_GETDISABLEOVERLAPPEDCONTENT 0x1040\n#define SPI_SETDISABLEOVERLAPPEDCONTENT 0x1041\n#define SPI_GETCLIENTAREAANIMATION     0x1042\n#define SPI_SETCLIENTAREAANIMATION     0x1043\n#define SPI_GETCLEARTYPE               0x1048\n#define SPI_SETCLEARTYPE               0x1049\n#define SPI_GETSPEECHRECOGNITION       0x104A\n#define SPI_SETSPEECHRECOGNITION       0x104B\n#define SPI_GETFOREGROUNDLOCKTIMEOUT   0x2000\n#define SPI_SETFOREGROUNDLOCKTIMEOUT   0x2001\n#define SPI_GETACTIVEWNDTRKTIMEOUT     0x2002\n#define SPI_SETACTIVEWNDTRKTIMEOUT     0x2003\n#define SPI_GETFOREGROUNDFLASHCOUNT    0x2004\n#define SPI_SETFOREGROUNDFLASHCOUNT    0x2005\n#define SPI_GETCARETWIDTH              0x2006\n#define SPI_SETCARETWIDTH              0x2007\n#define SPI_GETMOUSECLICKLOCKTIME      0x2008\n#define SPI_SETMOUSECLICKLOCKTIME      0x2009\n#define SPI_GETFONTSMOOTHINGTYPE       0x200A\n#define SPI_SETFONTSMOOTHINGTYPE       0x200B\n#define SPI_GETFONTSMOOTHINGCONTRAST   0x200C\n#define SPI_SETFONTSMOOTHINGCONTRAST   0x200D\n#define SPI_GETFOCUSBORDERWIDTH        0x200E\n#define SPI_SETFOCUSBORDERWIDTH        0x200F\n#define SPI_GETFOCUSBORDERHEIGHT       0x2010\n#define SPI_SETFOCUSBORDERHEIGHT       0x2011\n#define SPI_GETFONTSMOOTHINGORIENTATION 0x2012\n#define SPI_SETFONTSMOOTHINGORIENTATION 0x2013\n\n#define FE_FONTSMOOTHINGSTANDARD       0x0001\n#define FE_FONTSMOOTHINGCLEARTYPE      0x0002\n#define FE_FONTSMOOTHINGDOCKING        0x8000\n\n#define FE_FONTSMOOTHINGORIENTATIONBGR 0x0000\n#define FE_FONTSMOOTHINGORIENTATIONRGB 0x0001\n\n#define SETWALLPAPER_DEFAULT           ((LPWSTR)-1)\n\n/* SystemParametersInfo flags */\n\n#define SPIF_UPDATEINIFILE              1\n#define SPIF_SENDWININICHANGE           2\n#define SPIF_SENDCHANGE                 SPIF_SENDWININICHANGE\n\n#if defined(_WINGDI_) && !defined(NOGDI)\ntypedef struct tagNONCLIENTMETRICSA {\n\tUINT\t\tcbSize;\n\tINT\t\tiBorderWidth;\n\tINT\t\tiScrollWidth;\n\tINT\t\tiScrollHeight;\n\tINT\t\tiCaptionWidth;\n\tINT\t\tiCaptionHeight;\n\tLOGFONTA\tlfCaptionFont;\n\tINT\t\tiSmCaptionWidth;\n\tINT\t\tiSmCaptionHeight;\n\tLOGFONTA\tlfSmCaptionFont;\n\tINT\t\tiMenuWidth;\n\tINT\t\tiMenuHeight;\n\tLOGFONTA\tlfMenuFont;\n\tLOGFONTA\tlfStatusFont;\n\tLOGFONTA\tlfMessageFont;\n\tINT\t\tiPaddedBorderWidth;\n} NONCLIENTMETRICSA, *PNONCLIENTMETRICSA, *LPNONCLIENTMETRICSA;\n\ntypedef struct tagNONCLIENTMETRICSW {\n\tUINT\t\tcbSize;\n\tINT\t\tiBorderWidth;\n\tINT\t\tiScrollWidth;\n\tINT\t\tiScrollHeight;\n\tINT\t\tiCaptionWidth;\n\tINT\t\tiCaptionHeight;\n\tLOGFONTW\tlfCaptionFont;\n\tINT\t\tiSmCaptionWidth;\n\tINT\t\tiSmCaptionHeight;\n\tLOGFONTW\tlfSmCaptionFont;\n\tINT\t\tiMenuWidth;\n\tINT\t\tiMenuHeight;\n\tLOGFONTW\tlfMenuFont;\n\tLOGFONTW\tlfStatusFont;\n\tLOGFONTW\tlfMessageFont;\n\tINT\t\tiPaddedBorderWidth;\n} NONCLIENTMETRICSW, *PNONCLIENTMETRICSW, *LPNONCLIENTMETRICSW;\n\nDECL_WINELIB_TYPE_AW(NONCLIENTMETRICS)\nDECL_WINELIB_TYPE_AW(PNONCLIENTMETRICS)\nDECL_WINELIB_TYPE_AW(LPNONCLIENTMETRICS)\n\ntypedef struct tagICONMETRICSA {\n    UINT cbSize;\n    int iHorzSpacing;\n    int iVertSpacing;\n    int iTitleWrap;\n    LOGFONTA lfFont;\n} ICONMETRICSA, *PICONMETRICSA, *LPICONMETRICSA;\n\ntypedef struct tagICONMETRICSW {\n    UINT cbSize;\n    int iHorzSpacing;\n    int iVertSpacing;\n    int iTitleWrap;\n    LOGFONTW lfFont;\n} ICONMETRICSW, *PICONMETRICSW, *LPICONMETRICSW;\n\nDECL_WINELIB_TYPE_AW(ICONMETRICS)\nDECL_WINELIB_TYPE_AW(PICONMETRICS)\nDECL_WINELIB_TYPE_AW(LPICONMETRICS)\n\ntypedef struct tagUPDATELAYEREDWINDOWINFO\n{\n    DWORD                cbSize;\n    HDC                  hdcDst;\n    POINT const*         pptDst;\n    SIZE const*          psize;\n    HDC                  hdcSrc;\n    POINT const*         pptSrc;\n    COLORREF             crKey;\n    BLENDFUNCTION const* pblend;\n    DWORD                dwFlags;\n    RECT const*          prcDirty;\n} UPDATELAYEREDWINDOWINFO, *PUPDATELAYEREDWINDOWINFO;\n\n#endif /* defined(_WINGDI_) && !defined(NOGDI) */\n\n#define ARW_BOTTOMLEFT              __MSABI_LONG(0x0000)\n#define ARW_BOTTOMRIGHT             __MSABI_LONG(0x0001)\n#define ARW_TOPLEFT                 __MSABI_LONG(0x0002)\n#define ARW_TOPRIGHT                __MSABI_LONG(0x0003)\n#define ARW_STARTMASK               __MSABI_LONG(0x0003)\n#define ARW_STARTRIGHT              __MSABI_LONG(0x0001)\n#define ARW_STARTTOP                __MSABI_LONG(0x0002)\n\n#define ARW_LEFT                    __MSABI_LONG(0x0000)\n#define ARW_RIGHT                   __MSABI_LONG(0x0000)\n#define ARW_UP                      __MSABI_LONG(0x0004)\n#define ARW_DOWN                    __MSABI_LONG(0x0004)\n#define ARW_HIDE                    __MSABI_LONG(0x0008)\n\ntypedef struct tagMINIMIZEDMETRICS {\n    UINT cbSize;\n    int iWidth;\n    int iHorzGap;\n    int iVertGap;\n    int iArrange;\n} MINIMIZEDMETRICS, *PMINIMIZEDMETRICS, *LPMINIMIZEDMETRICS;\n\n/* Window affinity */\n#define WDA_NONE     0x0\n#define WDA_MONITOR  0x1\n\n/* Window scrolling */\n#define SW_SCROLLCHILDREN      0x0001\n#define SW_INVALIDATE          0x0002\n#define SW_ERASE               0x0004\n\n/* CreateWindow() coordinates */\n#define CW_USEDEFAULT ((INT)0x80000000)\n\n/* ChildWindowFromPointEx Flags */\n#define CWP_ALL                0x0000\n#define CWP_SKIPINVISIBLE      0x0001\n#define CWP_SKIPDISABLED       0x0002\n#define CWP_SKIPTRANSPARENT    0x0004\n\n  /* PeekMessage() options */\n#define PM_NOREMOVE       0x0000\n#define PM_REMOVE         0x0001\n#define PM_NOYIELD        0x0002\n#define PM_QS_INPUT       (QS_INPUT << 16)\n#define PM_QS_POSTMESSAGE ((QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER) << 16)\n#define PM_QS_PAINT       (QS_PAINT << 16)\n#define PM_QS_SENDMESSAGE (QS_SENDMESSAGE << 16)\n\n/* SetTimer() limits */\n#define USER_TIMER_MINIMUM 0x0000000A\n#define USER_TIMER_MAXIMUM 0x7FFFFFFF\n\n/* SetCoalescableTimer() tolerances */\n#define TIMERV_DEFAULT_COALESCING   0\n#define TIMERV_NO_COALESCING        0xFFFFFFFF\n#define TIMERV_COALESCING_MIN       1\n#define TIMERV_COALESCING_MAX       0x7FFFFFF5\n\n/* AnimateWindow() flags */\n#define AW_SLIDE        0x00040000\n#define AW_ACTIVATE     0x00020000\n#define AW_BLEND        0x00080000\n#define AW_HIDE         0x00010000\n#define AW_CENTER       0x00000010\n#define AW_HOR_POSITIVE 0x00000001\n#define AW_HOR_NEGATIVE 0x00000002\n#define AW_VER_POSITIVE 0x00000004\n#define AW_VER_NEGATIVE 0x00000008\n\n/* FlashWindowEx() flags */\n#define FLASHW_STOP      0x00000000\n#define FLASHW_CAPTION   0x00000001\n#define FLASHW_TRAY      0x00000002\n#define FLASHW_ALL       (FLASHW_CAPTION|FLASHW_TRAY)\n#define FLASHW_TIMER     0x00000004\n#define FLASHW_TIMERNOFG 0x0000000C\n\ntypedef struct {\n    UINT cbSize;\n    HWND hwnd;\n    DWORD dwFlags;\n    UINT uCount;\n    DWORD dwTimeout;\n} FLASHWINFO, *PFLASHWINFO;\n\n/* SetLayeredWindowAttributes() flags */\n#define LWA_COLORKEY        0x00000001\n#define LWA_ALPHA           0x00000002\n\n/* UpdateLayeredWindow() flags */\n#define ULW_COLORKEY        0x00000001\n#define ULW_ALPHA           0x00000002\n#define ULW_OPAQUE          0x00000004\n#define ULW_EX_NORESIZE     0x00000008\n\n/* SetWindowPos() and WINDOWPOS flags */\n#define SWP_NOSIZE          0x0001\n#define SWP_NOMOVE          0x0002\n#define SWP_NOZORDER        0x0004\n#define SWP_NOREDRAW        0x0008\n#define SWP_NOACTIVATE      0x0010\n#define SWP_FRAMECHANGED    0x0020  /* The frame changed: send WM_NCCALCSIZE */\n#define SWP_SHOWWINDOW      0x0040\n#define SWP_HIDEWINDOW      0x0080\n#define SWP_NOCOPYBITS      0x0100\n#define SWP_NOOWNERZORDER   0x0200  /* Don't do owner Z ordering */\n\n#define SWP_DRAWFRAME       SWP_FRAMECHANGED\n#define SWP_NOREPOSITION    SWP_NOOWNERZORDER\n\n#define SWP_NOSENDCHANGING  0x0400\n#define SWP_DEFERERASE      0x2000\n#define SWP_ASYNCWINDOWPOS  0x4000\n\n/* undocumented SWP flags - from SDK 3.1 */\n#define SWP_NOCLIENTSIZE    0x0800\n#define SWP_NOCLIENTMOVE    0x1000\n#define SWP_STATECHANGED    0x8000\n\n#define HWND_DESKTOP        ((HWND)0)\n#define HWND_BROADCAST      ((HWND)0xffff)\n\n/* SetWindowPos() hwndInsertAfter field values */\n#define HWND_TOP            ((HWND)0)\n#define HWND_BOTTOM         ((HWND)1)\n#define HWND_TOPMOST        ((HWND)-1)\n#define HWND_NOTOPMOST      ((HWND)-2)\n#define HWND_MESSAGE        ((HWND)-3)\n\n/* GetDCEx flags */\n#define DCX_WINDOW           0x00000001\n#define DCX_CACHE            0x00000002\n#define DCX_NORESETATTRS     0x00000004\n#define DCX_CLIPCHILDREN     0x00000008\n#define DCX_CLIPSIBLINGS     0x00000010\n#define DCX_PARENTCLIP       0x00000020\n#define DCX_EXCLUDERGN       0x00000040\n#define DCX_INTERSECTRGN     0x00000080\n#define DCX_EXCLUDEUPDATE    0x00000100\n#define DCX_INTERSECTUPDATE  0x00000200\n#define DCX_LOCKWINDOWUPDATE 0x00000400\n#define DCX_USESTYLE         0x00010000\n#define DCX_NORECOMPUTE      0x00100000\n#define DCX_VALIDATE         0x00200000\n\n\n\n/* for GetMenuDefaultItem */\n#define GMDI_USEDISABLED    __MSABI_LONG(0x0001)\n#define GMDI_GOINTOPOPUPS   __MSABI_LONG(0x0002)\n\n/* DrawText() flags */\n#define DT_TOP                  0x00000000\n#define DT_LEFT                 0x00000000\n#define DT_CENTER               0x00000001\n#define DT_RIGHT                0x00000002\n#define DT_VCENTER              0x00000004\n#define DT_BOTTOM               0x00000008\n#define DT_WORDBREAK            0x00000010\n#define DT_SINGLELINE           0x00000020\n#define DT_EXPANDTABS           0x00000040\n#define DT_TABSTOP              0x00000080\n#define DT_NOCLIP               0x00000100\n#define DT_EXTERNALLEADING      0x00000200\n#define DT_CALCRECT             0x00000400\n#define DT_NOPREFIX             0x00000800\n#define DT_INTERNAL             0x00001000\n#define DT_EDITCONTROL          0x00002000\n#define DT_PATH_ELLIPSIS        0x00004000\n#define DT_END_ELLIPSIS         0x00008000\n#define DT_MODIFYSTRING         0x00010000\n#define DT_RTLREADING           0x00020000\n#define DT_WORD_ELLIPSIS        0x00040000\n#define DT_NOFULLWIDTHCHARBREAK 0x00080000\n#define DT_HIDEPREFIX           0x00100000\n#define DT_PREFIXONLY           0x00200000\n\n/* DrawCaption()/DrawCaptionTemp() flags */\n#define DC_ACTIVE\t\t0x0001\n#define DC_SMALLCAP\t\t0x0002\n#define DC_ICON\t\t\t0x0004\n#define DC_TEXT\t\t\t0x0008\n#define DC_INBUTTON\t\t0x0010\n#define DC_GRADIENT             0x0020\n#define DC_BUTTONS              0x1000\n\n/* DrawEdge() flags */\n#define BDR_RAISEDOUTER    0x0001\n#define BDR_SUNKENOUTER    0x0002\n#define BDR_RAISEDINNER    0x0004\n#define BDR_SUNKENINNER    0x0008\n\n#define BDR_OUTER          0x0003\n#define BDR_INNER          0x000c\n#define BDR_RAISED         0x0005\n#define BDR_SUNKEN         0x000a\n\n#define EDGE_RAISED        (BDR_RAISEDOUTER | BDR_RAISEDINNER)\n#define EDGE_SUNKEN        (BDR_SUNKENOUTER | BDR_SUNKENINNER)\n#define EDGE_ETCHED        (BDR_SUNKENOUTER | BDR_RAISEDINNER)\n#define EDGE_BUMP          (BDR_RAISEDOUTER | BDR_SUNKENINNER)\n\n/* border flags */\n#define BF_LEFT            0x0001\n#define BF_TOP             0x0002\n#define BF_RIGHT           0x0004\n#define BF_BOTTOM          0x0008\n#define BF_DIAGONAL        0x0010\n#define BF_MIDDLE          0x0800  /* Fill in the middle */\n#define BF_SOFT            0x1000  /* For softer buttons */\n#define BF_ADJUST          0x2000  /* Calculate the space left over */\n#define BF_FLAT            0x4000  /* For flat rather than 3D borders */\n#define BF_MONO            0x8000  /* For monochrome borders */\n#define BF_TOPLEFT         (BF_TOP | BF_LEFT)\n#define BF_TOPRIGHT        (BF_TOP | BF_RIGHT)\n#define BF_BOTTOMLEFT      (BF_BOTTOM | BF_LEFT)\n#define BF_BOTTOMRIGHT     (BF_BOTTOM | BF_RIGHT)\n#define BF_RECT            (BF_LEFT | BF_TOP | BF_RIGHT | BF_BOTTOM)\n#define BF_DIAGONAL_ENDTOPRIGHT     (BF_DIAGONAL | BF_TOP | BF_RIGHT)\n#define BF_DIAGONAL_ENDTOPLEFT      (BF_DIAGONAL | BF_TOP | BF_LEFT)\n#define BF_DIAGONAL_ENDBOTTOMLEFT   (BF_DIAGONAL | BF_BOTTOM | BF_LEFT)\n#define BF_DIAGONAL_ENDBOTTOMRIGHT  (BF_DIAGONAL | BF_BOTTOM | BF_RIGHT)\n\n/* DrawFrameControl() uType's */\n\n#define DFC_CAPTION             1\n#define DFC_MENU                2\n#define DFC_SCROLL              3\n#define DFC_BUTTON              4\n#define DFC_POPUPMENU           5\n\n/* uState's */\n\n#define DFCS_CAPTIONCLOSE       0x0000\n#define DFCS_CAPTIONMIN         0x0001\n#define DFCS_CAPTIONMAX         0x0002\n#define DFCS_CAPTIONRESTORE     0x0003\n#define DFCS_CAPTIONHELP        0x0004\t\t/* Windows 95 only */\n\n#define DFCS_MENUARROW          0x0000\n#define DFCS_MENUCHECK          0x0001\n#define DFCS_MENUBULLET         0x0002\n#define DFCS_MENUARROWRIGHT     0x0004\n\n#define DFCS_SCROLLUP            0x0000\n#define DFCS_SCROLLDOWN          0x0001\n#define DFCS_SCROLLLEFT          0x0002\n#define DFCS_SCROLLRIGHT         0x0003\n#define DFCS_SCROLLCOMBOBOX      0x0005\n#define DFCS_SCROLLSIZEGRIP      0x0008\n#define DFCS_SCROLLSIZEGRIPRIGHT 0x0010\n\n#define DFCS_BUTTONCHECK        0x0000\n#define DFCS_BUTTONRADIOIMAGE   0x0001\n#define DFCS_BUTTONRADIOMASK    0x0002\t\t/* to draw nonsquare button */\n#define DFCS_BUTTONRADIO        0x0004\n#define DFCS_BUTTON3STATE       0x0008\n#define DFCS_BUTTONPUSH         0x0010\n\n/* additional state of the control */\n\n#define DFCS_INACTIVE           0x0100\n#define DFCS_PUSHED             0x0200\n#define DFCS_CHECKED            0x0400\n#define DFCS_TRANSPARENT        0x0800\n#define DFCS_HOT                0x1000\n#define DFCS_ADJUSTRECT         0x2000\t\t/* exclude surrounding edge */\n#define DFCS_FLAT               0x4000\n#define DFCS_MONO               0x8000\n\n\n/* Image type */\n#define\tDST_COMPLEX\t0x0000\n#define\tDST_TEXT\t0x0001\n#define\tDST_PREFIXTEXT\t0x0002\n#define\tDST_ICON\t0x0003\n#define\tDST_BITMAP\t0x0004\n\n/* State type */\n#define\tDSS_NORMAL\t0x0000\n#define\tDSS_UNION\t0x0010  /* Gray string appearance */\n#define\tDSS_DISABLED\t0x0020\n#define\tDSS_DEFAULT\t0x0040  /* Make it bold */\n#define\tDSS_MONO\t0x0080\n#define\tDSS_HIDEPREFIX\t0x0200\n#define\tDSS_PREFIXONLY\t0x0400\n#define\tDSS_RIGHT\t0x8000\n\n/* UserObjectInformation classes */\n#define UOI_FLAGS 1\n#define UOI_NAME 2\n#define UOI_TYPE 3\n#define UOI_USER_SID 4\n\n\n/* Sent as the lParam of a WM_DRAWITEM message to instruct how an\n * owner drawn control is to be drawn */\ntypedef struct tagDRAWITEMSTRUCT\n{\n    UINT      CtlType;    /* Type of control (ODT_* flags from \"winuser.h\") */\n    UINT      CtlID;      /* Control ID */\n    UINT      itemID;     /* Menu item ID */\n    UINT      itemAction; /* Action to perform (ODA_* flags from \"winuser.h\") */\n    UINT      itemState;  /* Item state (ODS_* flags from \"winuser.h\") */\n    HWND      hwndItem;   /* Control window */\n    HDC       hDC;        /* Device context to draw to */\n    RECT      rcItem;     /* Position of the control in hDC */\n    ULONG_PTR itemData;   /* Extra data added by the application, if any */\n} DRAWITEMSTRUCT, *PDRAWITEMSTRUCT, *LPDRAWITEMSTRUCT;\n\n\ntypedef struct tagMEASUREITEMSTRUCT\n{\n    UINT      CtlType;\n    UINT      CtlID;\n    UINT      itemID;\n    UINT      itemWidth;\n    UINT      itemHeight;\n    ULONG_PTR itemData;\n} MEASUREITEMSTRUCT, *PMEASUREITEMSTRUCT, *LPMEASUREITEMSTRUCT;\n\n\ntypedef struct tagDELETEITEMSTRUCT\n{\n    UINT     CtlType;\n    UINT     CtlID;\n    UINT     itemID;\n    HWND     hwndItem;\n    ULONG_PTR itemData;\n} DELETEITEMSTRUCT, *PDELETEITEMSTRUCT, *LPDELETEITEMSTRUCT;\n\n\ntypedef struct tagCOMPAREITEMSTRUCT\n{\n    UINT      CtlType;\n    UINT      CtlID;\n    HWND      hwndItem;\n    UINT      itemID1;\n    ULONG_PTR itemData1;\n    UINT      itemID2;\n    ULONG_PTR itemData2;\n    DWORD     dwLocaleId;\n} COMPAREITEMSTRUCT, *PCOMPAREITEMSTRUCT, *LPCOMPAREITEMSTRUCT;\n\n\n/* WM_KEYUP/DOWN/CHAR HIWORD(lParam) flags */\n#define KF_EXTENDED         0x0100\n#define KF_DLGMODE          0x0800\n#define KF_MENUMODE         0x1000\n#define KF_ALTDOWN          0x2000\n#define KF_REPEAT           0x4000\n#define KF_UP               0x8000\n\n\n/* MapVirtualKey translation types */\n#define MAPVK_VK_TO_VSC     0\n#define MAPVK_VSC_TO_VK     1\n#define MAPVK_VK_TO_CHAR    2\n#define MAPVK_VSC_TO_VK_EX  3\n#define MAPVK_VK_TO_VSC_EX  4\n\n\n\ntypedef struct tagTRACKMOUSEEVENT {\n    DWORD cbSize;\n    DWORD dwFlags;\n    HWND  hwndTrack;\n    DWORD dwHoverTime;\n} TRACKMOUSEEVENT, *LPTRACKMOUSEEVENT;\n\n  /* Queue status flags */\n#define QS_KEY\t\t0x0001\n#define QS_MOUSEMOVE\t0x0002\n#define QS_MOUSEBUTTON\t0x0004\n#define QS_MOUSE\t(QS_MOUSEMOVE | QS_MOUSEBUTTON)\n#define QS_POSTMESSAGE\t0x0008\n#define QS_TIMER\t0x0010\n#define QS_PAINT\t0x0020\n#define QS_SENDMESSAGE\t0x0040\n#define QS_HOTKEY\t0x0080\n#define QS_ALLPOSTMESSAGE 0x0100\n#define QS_RAWINPUT       0x0400\n#define QS_INPUT\t(QS_MOUSE | QS_KEY | QS_RAWINPUT)\n#define QS_ALLEVENTS\t(QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY)\n#define QS_ALLINPUT     (QS_ALLEVENTS | QS_SENDMESSAGE)\n\n/* Extra (undocumented) queue wake bits - see \"Undoc. Windows\" */\n#define QS_SMRESULT      0x8000\n\n/* InSendMessageEx flags */\n#define ISMEX_NOSEND      0x00000000\n#define ISMEX_SEND        0x00000001\n#define ISMEX_NOTIFY      0x00000002\n#define ISMEX_CALLBACK    0x00000004\n#define ISMEX_REPLIED     0x00000008\n\n#define DDL_READWRITE\t0x0000\n#define DDL_READONLY\t0x0001\n#define DDL_HIDDEN\t0x0002\n#define DDL_SYSTEM\t0x0004\n#define DDL_DIRECTORY\t0x0010\n#define DDL_ARCHIVE\t0x0020\n\n#define DDL_POSTMSGS\t0x2000\n#define DDL_DRIVES\t0x4000\n#define DDL_EXCLUSIVE\t0x8000\n\n  /* Shell hook values */\n#define HSHELL_WINDOWCREATED       1\n#define HSHELL_WINDOWDESTROYED     2\n#define HSHELL_ACTIVATESHELLWINDOW 3\n#define HSHELL_WINDOWACTIVATED     4\n#define HSHELL_GETMINRECT          5\n#define HSHELL_REDRAW              6\n#define HSHELL_TASKMAN             7\n#define HSHELL_LANGUAGE            8\n#define HSHELL_SYSMENU             9\n#define HSHELL_ENDTASK             10\n#define HSHELL_ACCESSIBILITYSTATE  11\n#define HSHELL_APPCOMMAND          12\n#define HSHELL_WINDOWREPLACED      13\n#define HSHELL_WINDOWREPLACING     14\n\n#define HSHELL_HIGHBIT             0x8000\n#define HSHELL_FLASH               (HSHELL_REDRAW|HSHELL_HIGHBIT)\n#define HSHELL_RUDEAPPACTIVATED    (HSHELL_WINDOWACTIVATED|HSHELL_HIGHBIT)\n\n/* App commands */\n#define APPCOMMAND_BROWSER_BACKWARD                  1\n#define APPCOMMAND_BROWSER_FORWARD                   2\n#define APPCOMMAND_BROWSER_REFRESH                   3\n#define APPCOMMAND_BROWSER_STOP                      4\n#define APPCOMMAND_BROWSER_SEARCH                    5\n#define APPCOMMAND_BROWSER_FAVORITES                 6\n#define APPCOMMAND_BROWSER_HOME                      7\n#define APPCOMMAND_VOLUME_MUTE                       8\n#define APPCOMMAND_VOLUME_DOWN                       9\n#define APPCOMMAND_VOLUME_UP                         10\n#define APPCOMMAND_MEDIA_NEXTTRACK                   11\n#define APPCOMMAND_MEDIA_PREVIOUSTRACK               12\n#define APPCOMMAND_MEDIA_STOP                        13\n#define APPCOMMAND_MEDIA_PLAY_PAUSE                  14\n#define APPCOMMAND_LAUNCH_MAIL                       15\n#define APPCOMMAND_LAUNCH_MEDIA_SELECT               16\n#define APPCOMMAND_LAUNCH_APP1                       17\n#define APPCOMMAND_LAUNCH_APP2                       18\n#define APPCOMMAND_BASS_DOWN                         19\n#define APPCOMMAND_BASS_BOOST                        20\n#define APPCOMMAND_BASS_UP                           21\n#define APPCOMMAND_TREBLE_DOWN                       22\n#define APPCOMMAND_TREBLE_UP                         23\n#define APPCOMMAND_MICROPHONE_VOLUME_MUTE            24\n#define APPCOMMAND_MICROPHONE_VOLUME_DOWN            25\n#define APPCOMMAND_MICROPHONE_VOLUME_UP              26\n#define APPCOMMAND_HELP                              27\n#define APPCOMMAND_FIND                              28\n#define APPCOMMAND_NEW                               29\n#define APPCOMMAND_OPEN                              30\n#define APPCOMMAND_CLOSE                             31\n#define APPCOMMAND_SAVE                              32\n#define APPCOMMAND_PRINT                             33\n#define APPCOMMAND_UNDO                              34\n#define APPCOMMAND_REDO                              35\n#define APPCOMMAND_COPY                              36\n#define APPCOMMAND_CUT                               37\n#define APPCOMMAND_PASTE                             38\n#define APPCOMMAND_REPLY_TO_MAIL                     39\n#define APPCOMMAND_FORWARD_MAIL                      40\n#define APPCOMMAND_SEND_MAIL                         41\n#define APPCOMMAND_SPELL_CHECK                       42\n#define APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE 43\n#define APPCOMMAND_MIC_ON_OFF_TOGGLE                 44\n#define APPCOMMAND_CORRECTION_LIST                   45\n#define APPCOMMAND_MEDIA_PLAY                        46\n#define APPCOMMAND_MEDIA_PAUSE                       47\n#define APPCOMMAND_MEDIA_RECORD                      48\n#define APPCOMMAND_MEDIA_FAST_FORWARD                49\n#define APPCOMMAND_MEDIA_REWIND                      50\n#define APPCOMMAND_MEDIA_CHANNEL_UP                  51\n#define APPCOMMAND_MEDIA_CHANNEL_DOWN                52\n#define APPCOMMAND_DELETE                            53\n#define APPCOMMAND_DWM_FLIP3D                        54\n\n#define FAPPCOMMAND_MOUSE 0x8000\n#define FAPPCOMMAND_KEY   0\n#define FAPPCOMMAND_OEM   0x1000\n#define FAPPCOMMAND_MASK  0xF000\n\n#define GET_APPCOMMAND_LPARAM(lParam) ((short)(HIWORD(lParam) & ~FAPPCOMMAND_MASK))\n#define GET_DEVICE_LPARAM(lParam)     ((WORD)(HIWORD(lParam) & FAPPCOMMAND_MASK))\n#define GET_MOUSEORKEY_LPARAM         GET_DEVICE_LPARAM\n#define GET_FLAGS_LPARAM(lParam)      (LOWORD(lParam))\n#define GET_KEYSTATE_LPARAM(lParam)   GET_FLAGS_LPARAM(lParam)\n\n\n/* types of LoadImage */\n#define IMAGE_BITMAP\t0\n#define IMAGE_ICON\t1\n#define IMAGE_CURSOR\t2\n#define IMAGE_ENHMETAFILE\t3\n\n/* loadflags to LoadImage */\n#define LR_DEFAULTCOLOR\t\t0x0000\n#define LR_MONOCHROME\t\t0x0001\n#define LR_COLOR\t\t0x0002\n#define LR_COPYRETURNORG\t0x0004\n#define LR_COPYDELETEORG\t0x0008\n#define LR_LOADFROMFILE\t\t0x0010\n#define LR_LOADTRANSPARENT\t0x0020\n#define LR_DEFAULTSIZE\t\t0x0040\n#define LR_VGA_COLOR\t\t0x0080\n#define LR_LOADMAP3DCOLORS\t0x1000\n#define\tLR_CREATEDIBSECTION\t0x2000\n#define LR_COPYFROMRESOURCE\t0x4000\n#define LR_SHARED\t\t0x8000\n\n/* Flags for DrawIconEx.  */\n#define DI_MASK                 0x0001\n#define DI_IMAGE                0x0002\n#define DI_NORMAL               (DI_MASK | DI_IMAGE)\n#define DI_COMPAT               0x0004\n#define DI_DEFAULTSIZE          0x0008\n#define DI_NOMIRROR             0x0010\n\n/* RegisterDeviceNotification stuff */\ntypedef  PVOID           HDEVNOTIFY;\ntypedef  HDEVNOTIFY     *PHDEVNOTIFY;\n\n#define DEVICE_NOTIFY_WINDOW_HANDLE     0x00000000\n\n/* used for GetWindowInfo() */\n\n#define WS_ACTIVECAPTION    0x0001\n\ntypedef struct tagWINDOWINFO {\n    DWORD cbSize;\n    RECT  rcWindow;\n    RECT  rcClient;\n    DWORD dwStyle;\n    DWORD dwExStyle;\n    DWORD dwWindowStatus;\n    UINT  cxWindowBorders;\n    UINT  cyWindowBorders;\n    ATOM  atomWindowType;\n    WORD  wCreatorVersion;\n} WINDOWINFO, *PWINDOWINFO, *LPWINDOWINFO;\n\n/* used for GetTitleBarInfo() */\n\n#define CCHILDREN_TITLEBAR      5\n\ntypedef struct tagTITLEBARINFO {\n    DWORD cbSize;\n    RECT  rcTitleBar;\n    DWORD rgstate[CCHILDREN_TITLEBAR+1];\n} TITLEBARINFO, *PTITLEBARINFO, *LPTITLEBARINFO;\n\n/* used by GetLastInputInfo */\ntypedef struct tagLASTINPUTINFO {\n    UINT cbSize;\n    DWORD dwTime;\n} LASTINPUTINFO, *PLASTINPUTINFO;\n\n/* used by GetAltTabInfo */\ntypedef struct\n{\n    DWORD cbSize;\n    INT cItems;\n    INT cColumns;\n    INT cRows;\n    INT iColFocus;\n    INT iRowFocus;\n    INT cxItem;\n    INT cyItem;\n    POINT ptStart;\n} ALTTABINFO, *PALTTABINFO, *LPALTTABINFO;\n\n/* SetWinEventHook() flags */\n#define WINEVENT_OUTOFCONTEXT   0x0\n#define WINEVENT_SKIPOWNTHREAD  0x1\n#define WINEVENT_SKIPOWNPROCESS 0x2\n#define WINEVENT_INCONTEXT      0x4\n\n#define ENDSESSION_LOGOFF    0x80000000\n\n/* Object Id's */\n#define CHILDID_SELF      0\n#define INDEXID_OBJECT    0\n#define INDEXID_CONTAINER 0\n\n/* System object Id's */\n#define OBJID_WINDOW            0\n#define OBJID_SYSMENU           -1\n#define OBJID_TITLEBAR          -2\n#define OBJID_MENU              -3\n#define OBJID_CLIENT            -4\n#define OBJID_VSCROLL           -5\n#define OBJID_HSCROLL           -6\n#define OBJID_SIZEGRIP          -7\n#define OBJID_CARET             -8\n#define OBJID_CURSOR            -9\n#define OBJID_ALERT             -10\n#define OBJID_SOUND             -11\n#define OBJID_QUERYCLASSNAMEIDX -12\n#define OBJID_NATIVEOM          -16\n\n/* User event Id limits */\n#define EVENT_MIN 0x00000001\n#define EVENT_MAX 0x7FFFFFFF\n\n/* System events */\n#define EVENT_SYSTEM_SOUND            0x01\n#define EVENT_SYSTEM_ALERT            0x02\n#define EVENT_SYSTEM_FOREGROUND       0x03\n#define EVENT_SYSTEM_MENUSTART        0x04\n#define EVENT_SYSTEM_MENUEND          0x05\n#define EVENT_SYSTEM_MENUPOPUPSTART   0x06\n#define EVENT_SYSTEM_MENUPOPUPEND     0x07\n#define EVENT_SYSTEM_CAPTURESTART     0x08\n#define EVENT_SYSTEM_CAPTUREEND       0x09\n#define EVENT_SYSTEM_MOVESIZESTART    0x0A\n#define EVENT_SYSTEM_MOVESIZEEND      0x0B\n#define EVENT_SYSTEM_CONTEXTHELPSTART 0x0C\n#define EVENT_SYSTEM_CONTEXTHELPEND   0x0D\n#define EVENT_SYSTEM_DRAGDROPSTART    0x0E\n#define EVENT_SYSTEM_DRAGDROPEND      0x0F\n#define EVENT_SYSTEM_DIALOGSTART      0x10\n#define EVENT_SYSTEM_DIALOGEND        0x11\n#define EVENT_SYSTEM_SCROLLINGSTART   0x12\n#define EVENT_SYSTEM_SCROLLINGEND     0x13\n#define EVENT_SYSTEM_SWITCHSTART      0x14\n#define EVENT_SYSTEM_SWITCHEND        0x15\n#define EVENT_SYSTEM_MINIMIZESTART    0x16\n#define EVENT_SYSTEM_MINIMIZEEND      0x17\n\n/* Console events */\n#define EVENT_CONSOLE_CARET             0x4001\n#define EVENT_CONSOLE_UPDATE_REGION     0x4002\n#define EVENT_CONSOLE_UPDATE_SIMPLE     0x4003\n#define EVENT_CONSOLE_UPDATE_SCROLL     0x4004\n#define EVENT_CONSOLE_LAYOUT            0x4005\n#define EVENT_CONSOLE_START_APPLICATION 0x4006\n#define EVENT_CONSOLE_END_APPLICATION   0x4007\n\n#define CONSOLE_APPLICATION_16BIT 0x1\n#define CONSOLE_CARET_SELECTION   0x1\n#define CONSOLE_CARET_VISIBLE     0x2\n\n/* Object events */\n#define EVENT_OBJECT_CREATE            0x8000\n#define EVENT_OBJECT_DESTROY           0x8001\n#define EVENT_OBJECT_SHOW              0x8002\n#define EVENT_OBJECT_HIDE              0x8003\n#define EVENT_OBJECT_REORDER           0x8004\n#define EVENT_OBJECT_FOCUS             0x8005\n#define EVENT_OBJECT_SELECTION         0x8006\n#define EVENT_OBJECT_SELECTIONADD      0x8007\n#define EVENT_OBJECT_SELECTIONREMOVE   0x8008\n#define EVENT_OBJECT_SELECTIONWITHIN   0x8009\n#define EVENT_OBJECT_STATECHANGE       0x800A\n#define EVENT_OBJECT_LOCATIONCHANGE    0x800B\n#define EVENT_OBJECT_NAMECHANGE        0x800C\n#define EVENT_OBJECT_DESCRIPTIONCHANGE 0x800D\n#define EVENT_OBJECT_VALUECHANGE       0x800E\n#define EVENT_OBJECT_PARENTCHANGE      0x800F\n#define EVENT_OBJECT_HELPCHANGE        0x8010\n#define EVENT_OBJECT_DEFACTIONCHANGE   0x8011\n#define EVENT_OBJECT_ACCELERATORCHANGE 0x8012\n\n/* Sound events */\n#define SOUND_SYSTEM_STARTUP      1\n#define SOUND_SYSTEM_SHUTDOWN     2\n#define SOUND_SYSTEM_BEEP         3\n#define SOUND_SYSTEM_ERROR        4\n#define SOUND_SYSTEM_QUESTION     5\n#define SOUND_SYSTEM_WARNING      6\n#define SOUND_SYSTEM_INFORMATION  7\n#define SOUND_SYSTEM_MAXIMIZE     8\n#define SOUND_SYSTEM_MINIMIZE     9\n#define SOUND_SYSTEM_RESTOREUP   10\n#define SOUND_SYSTEM_RESTOREDOWN 11\n#define SOUND_SYSTEM_APPSTART    12\n#define SOUND_SYSTEM_FAULT       13\n#define SOUND_SYSTEM_APPEND      14\n#define SOUND_SYSTEM_MENUCOMMAND 15\n#define SOUND_SYSTEM_MENUPOPUP   16\n#define CSOUND_SYSTEM            16\n\n/* Alert events */\n#define ALERT_SYSTEM_INFORMATIONAL 1\n#define ALERT_SYSTEM_WARNING       2\n#define ALERT_SYSTEM_ERROR         3\n#define ALERT_SYSTEM_QUERY         4\n#define ALERT_SYSTEM_CRITICAL      5\n#define CALERT_SYSTEM              6\n\n/* System state flags */\n#define STATE_SYSTEM_UNAVAILABLE     0x00000001\n#define STATE_SYSTEM_SELECTED        0x00000002\n#define STATE_SYSTEM_FOCUSED         0x00000004\n#define STATE_SYSTEM_PRESSED         0x00000008\n#define STATE_SYSTEM_CHECKED         0x00000010\n#define STATE_SYSTEM_MIXED           0x00000020\n#define STATE_SYSTEM_INDETERMINATE   STATE_SYSTEM_MIXED\n#define STATE_SYSTEM_READONLY        0x00000040\n#define STATE_SYSTEM_HOTTRACKED      0x00000080\n#define STATE_SYSTEM_DEFAULT         0x00000100\n#define STATE_SYSTEM_EXPANDED        0x00000200\n#define STATE_SYSTEM_COLLAPSED       0x00000400\n#define STATE_SYSTEM_BUSY            0x00000800\n#define STATE_SYSTEM_FLOATING        0x00001000\n#define STATE_SYSTEM_MARQUEED        0x00002000\n#define STATE_SYSTEM_ANIMATED        0x00004000\n#define STATE_SYSTEM_INVISIBLE       0x00008000\n#define STATE_SYSTEM_OFFSCREEN       0x00010000\n#define STATE_SYSTEM_SIZEABLE        0x00020000\n#define STATE_SYSTEM_MOVEABLE        0x00040000\n#define STATE_SYSTEM_SELFVOICING     0x00080000\n#define STATE_SYSTEM_FOCUSABLE       0x00100000\n#define STATE_SYSTEM_SELECTABLE      0x00200000\n#define STATE_SYSTEM_LINKED          0x00400000\n#define STATE_SYSTEM_TRAVERSED       0x00800000\n#define STATE_SYSTEM_MULTISELECTABLE 0x01000000\n#define STATE_SYSTEM_EXTSELECTABLE   0x02000000\n#define STATE_SYSTEM_ALERT_LOW       0x04000000\n#define STATE_SYSTEM_ALERT_MEDIUM    0x08000000\n#define STATE_SYSTEM_ALERT_HIGH      0x10000000\n#define STATE_SYSTEM_PROTECTED       0x20000000\n#define STATE_SYSTEM_VALID           0x3FFFFFFF\n\n/* Lock codes for LockSetForegroundWindow */\n#define LSFW_LOCK   1\n#define LSFW_UNLOCK 2\n\n/* Values for AllowSetForegroundWindow */\n#define ASFW_ANY    ((DWORD)-1)\n\n#define     EnumTaskWindows(handle,proc,lparam) \\\n            EnumThreadWindows(handle,proc,lparam)\n#define     OemToAnsiA OemToCharA\n#define     OemToAnsiW OemToCharW\n#define     OemToAnsi WINELIB_NAME_AW(OemToAnsi)\n#define     OemToAnsiBuffA OemToCharBuffA\n#define     OemToAnsiBuffW OemToCharBuffW\n#define     OemToAnsiBuff WINELIB_NAME_AW(OemToAnsiBuff)\n#define     AnsiToOemA CharToOemA\n#define     AnsiToOemW CharToOemW\n#define     AnsiToOem WINELIB_NAME_AW(AnsiToOem)\n#define     AnsiToOemBuffA CharToOemBuffA\n#define     AnsiToOemBuffW CharToOemBuffW\n#define     AnsiToOemBuff WINELIB_NAME_AW(AnsiToOemBuff)\n\n/* ChangeWindowMessageFilter flags */\n#define  MSGFLT_ADD    1\n#define  MSGFLT_REMOVE 2\n\n/* ChangeWindowMessageFilterEx defines */\n#define  MSGFLTINFO_NONE                     0\n#define  MSGFLTINFO_ALREADYALLOWED_FORWND    1\n#define  MSGFLTINFO_ALREADYDISALLOWED_FORWND 2\n#define  MSGFLTINFO_ALLOWED_HIGHER           3\n\ntypedef struct tagCHANGEFILTERSTRUCT\n{\n    DWORD cbSize;\n    DWORD ExtStatus;\n} CHANGEFILTERSTRUCT, *PCHANGEFILTERSTRUCT;\n\n/* Actions for ChangeWindowMessageFilterEx */\n#define  MSGFLT_RESET    0\n#define  MSGFLT_ALLOW    1\n#define  MSGFLT_DISALLOW 2\n\n#define USER_DEFAULT_SCREEN_DPI 96\n\ntypedef enum tagAR_STATE {\n    AR_ENABLED       = 0x0,\n    AR_DISABLED      = 0x1,\n    AR_SUPPRESSED    = 0x2,\n    AR_REMOTESESSION = 0x4,\n    AR_MULTIMON      = 0x8,\n    AR_NOSENSOR      = 0x10,\n    AR_NOT_SUPPORTED = 0x20,\n    AR_DOCKED        = 0x40,\n    AR_LAPTOP        = 0x80\n} AR_STATE, *PAR_STATE;\n\ntypedef enum ORIENTATION_PREFERENCE {\n    ORIENTATION_PREFERENCE_NONE              = 0x0,\n    ORIENTATION_PREFERENCE_LANDSCAPE         = 0x1,\n    ORIENTATION_PREFERENCE_PORTRAIT          = 0x2,\n    ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED = 0x4,\n    ORIENTATION_PREFERENCE_PORTRAIT_FLIPPED  = 0x8\n} ORIENTATION_PREFERENCE;\n\n/* Touch input definitions */\nDECLARE_HANDLE(HTOUCHINPUT);\n\ntypedef struct tagTOUCHINPUT {\n    LONG      x;\n    LONG      y;\n    HANDLE    hSource;\n    DWORD     dwID;\n    DWORD     dwFlags;\n    DWORD     dwMask;\n    DWORD     dwTime;\n    ULONG_PTR dwExtraInfo;\n    DWORD     cxContact;\n    DWORD     cyContact;\n} TOUCHINPUT, *PTOUCHINPUT;\ntypedef TOUCHINPUT const * PCTOUCHINPUT;\n\n/* Gesture definitions */\nDECLARE_HANDLE(HGESTUREINFO);\n\ntypedef struct tagGESTUREINFO {\n    UINT      cbSize;\n    DWORD     dwFlags;\n    DWORD     dwID;\n    HWND      hwndTarget;\n    POINTS    ptsLocation;\n    DWORD     dwInstanceID;\n    DWORD     dwSequenceID;\n    ULONGLONG ullArguments;\n    UINT      cbExtraArgs;\n} GESTUREINFO, *PGESTUREINFO;\ntypedef GESTUREINFO const * PCGESTUREINFO;\n\n#define POINTER_DEVICE_PRODUCT_STRING_MAX 520\n\ntypedef enum tagPOINTER_DEVICE_TYPE {\n    POINTER_DEVICE_TYPE_INTEGRATED_PEN = 0x00000001,\n    POINTER_DEVICE_TYPE_EXTERNAL_PEN   = 0x00000002,\n    POINTER_DEVICE_TYPE_TOUCH          = 0x00000003,\n    POINTER_DEVICE_TYPE_TOUCH_PAD      = 0x00000004,\n    POINTER_DEVICE_TYPE_MAX            = 0xFFFFFFFF\n} POINTER_DEVICE_TYPE;\n\ntypedef struct tagPOINTER_DEVICE_INFO {\n    DWORD               displayOrientation;\n    HANDLE              device;\n    POINTER_DEVICE_TYPE pointerDeviceType;\n    HMONITOR            monitor;\n    ULONG               startingCursorId;\n    USHORT              maxActiveContacts;\n    WCHAR               productString[POINTER_DEVICE_PRODUCT_STRING_MAX];\n} POINTER_DEVICE_INFO;\n\nenum tagPOINTER_INPUT_TYPE\n{\n    PT_POINTER = 1,\n    PT_TOUCH,\n    PT_PEN,\n    PT_MOUSE,\n    PT_TOUCHPAD,\n};\ntypedef DWORD POINTER_INPUT_TYPE;\n\ntypedef struct tagAUDIODESCRIPTION\n{\n    UINT cbSize;\n    BOOL Enabled;\n    LCID Locale;\n} AUDIODESCRIPTION, *LPAUDIODESCRIPTION;\n\n#if defined(_WINGDI_) && !defined(NOGDI)\nWINUSERAPI LONG        WINAPI ChangeDisplaySettingsA(LPDEVMODEA,DWORD);\nWINUSERAPI LONG        WINAPI ChangeDisplaySettingsW(LPDEVMODEW,DWORD);\n#define                       ChangeDisplaySettings WINELIB_NAME_AW(ChangeDisplaySettings)\nWINUSERAPI LONG        WINAPI ChangeDisplaySettingsExA(LPCSTR,LPDEVMODEA,HWND,DWORD,LPVOID);\nWINUSERAPI LONG        WINAPI ChangeDisplaySettingsExW(LPCWSTR,LPDEVMODEW,HWND,DWORD,LPVOID);\n#define                       ChangeDisplaySettingsEx WINELIB_NAME_AW(ChangeDisplaySettingsEx)\nWINUSERAPI HDESK       WINAPI CreateDesktopA(LPCSTR,LPCSTR,LPDEVMODEA,DWORD,ACCESS_MASK,LPSECURITY_ATTRIBUTES);\nWINUSERAPI HDESK       WINAPI CreateDesktopW(LPCWSTR,LPCWSTR,LPDEVMODEW,DWORD,ACCESS_MASK,LPSECURITY_ATTRIBUTES);\n#define                       CreateDesktop WINELIB_NAME_AW(CreateDesktop)\nWINUSERAPI LONG        WINAPI DisplayConfigGetDeviceInfo(DISPLAYCONFIG_DEVICE_INFO_HEADER *);\nWINUSERAPI BOOL        WINAPI EnumDisplayDevicesA(LPCSTR,DWORD,LPDISPLAY_DEVICEA,DWORD);\nWINUSERAPI BOOL        WINAPI EnumDisplayDevicesW(LPCWSTR,DWORD,LPDISPLAY_DEVICEW,DWORD);\n#define                       EnumDisplayDevices WINELIB_NAME_AW(EnumDisplayDevices)\nWINUSERAPI BOOL        WINAPI EnumDisplaySettingsA(LPCSTR,DWORD,LPDEVMODEA);\nWINUSERAPI BOOL        WINAPI EnumDisplaySettingsW(LPCWSTR,DWORD,LPDEVMODEW);\n#define                       EnumDisplaySettings WINELIB_NAME_AW(EnumDisplaySettings)\nWINUSERAPI BOOL        WINAPI EnumDisplaySettingsExA(LPCSTR,DWORD,LPDEVMODEA,DWORD);\nWINUSERAPI BOOL        WINAPI EnumDisplaySettingsExW(LPCWSTR,DWORD,LPDEVMODEW,DWORD);\n#define                       EnumDisplaySettingsEx WINELIB_NAME_AW(EnumDisplaySettingsEx)\nWINUSERAPI LONG        WINAPI GetDisplayConfigBufferSizes(UINT32,UINT32*,UINT32*);\nWINUSERAPI BOOL        WINAPI UpdateLayeredWindow(HWND,HDC,POINT*,SIZE*,HDC,POINT*,COLORREF,BLENDFUNCTION*,DWORD);\nWINUSERAPI BOOL        WINAPI UpdateLayeredWindowIndirect(HWND,UPDATELAYEREDWINDOWINFO const*);\n#endif /* defined(_WINGDI_) && !defined(NOGDI) */\n\nWINUSERAPI HKL         WINAPI ActivateKeyboardLayout(HKL,UINT);\nWINUSERAPI BOOL        WINAPI AddClipboardFormatListener(HWND);\nWINUSERAPI BOOL        WINAPI AdjustWindowRect(LPRECT,DWORD,BOOL);\nWINUSERAPI BOOL        WINAPI AdjustWindowRectEx(LPRECT,DWORD,BOOL,DWORD);\nWINUSERAPI BOOL        WINAPI AdjustWindowRectExForDpi(RECT*,DWORD,BOOL,DWORD,UINT);\nWINUSERAPI BOOL        WINAPI AllowSetForegroundWindow(DWORD);\nWINUSERAPI BOOL        WINAPI AnimateWindow(HWND,DWORD,DWORD);\n#define                       AnsiLowerA CharLowerA\n#define                       AnsiLowerW CharLowerW\n#define                       AnsiLower WINELIB_NAME_AW(AnsiLower)\n#define                       AnsiLowerBuffA CharLowerBuffA\n#define                       AnsiLowerBuffW CharLowerBuffW\n#define                       AnsiLowerBuff WINELIB_NAME_AW(AnsiLowerBuff)\n#define                       AnsiNextA CharNextA\n#define                       AnsiNextW CharNextW\n#define                       AnsiNext WINELIB_NAME_AW(AnsiNext)\n#define                       AnsiPrevA CharPrevA\n#define                       AnsiPrevW CharPrevW\n#define                       AnsiPrev WINELIB_NAME_AW(AnsiPrev)\n#define                       AnsiUpperA CharUpperA\n#define                       AnsiUpperW CharUpperW\n#define                       AnsiUpper WINELIB_NAME_AW(AnsiUpper)\n#define                       AnsiUpperBuffA CharUpperBuffA\n#define                       AnsiUpperBuffW CharUpperBuffW\n#define                       AnsiUpperBuff WINELIB_NAME_AW(AnsiUpperBuff)\nWINUSERAPI BOOL        WINAPI AnyPopup(void);\nWINUSERAPI BOOL        WINAPI AppendMenuA(HMENU,UINT,UINT_PTR,LPCSTR);\nWINUSERAPI BOOL        WINAPI AppendMenuW(HMENU,UINT,UINT_PTR,LPCWSTR);\n#define                       AppendMenu WINELIB_NAME_AW(AppendMenu)\nWINUSERAPI BOOL        WINAPI AreDpiAwarenessContextsEqual(DPI_AWARENESS_CONTEXT,DPI_AWARENESS_CONTEXT);\nWINUSERAPI UINT        WINAPI ArrangeIconicWindows(HWND);\nWINUSERAPI BOOL        WINAPI AttachThreadInput(DWORD,DWORD,BOOL);\nWINUSERAPI HDWP        WINAPI BeginDeferWindowPos(INT);\nWINUSERAPI HDC         WINAPI BeginPaint(HWND,LPPAINTSTRUCT);\nWINUSERAPI BOOL        WINAPI BlockInput(BOOL);\nWINUSERAPI BOOL        WINAPI BringWindowToTop(HWND);\nWINUSERAPI LONG        WINAPI BroadcastSystemMessageA(DWORD,LPDWORD,UINT,WPARAM,LPARAM);\nWINUSERAPI LONG        WINAPI BroadcastSystemMessageW(DWORD,LPDWORD,UINT,WPARAM,LPARAM);\n#define                       BroadcastSystemMessage WINELIB_NAME_AW(BroadcastSystemMessage)\nWINUSERAPI LONG        WINAPI BroadcastSystemMessageExA(DWORD,LPDWORD,UINT,WPARAM,LPARAM,PBSMINFO);\nWINUSERAPI LONG        WINAPI BroadcastSystemMessageExW(DWORD,LPDWORD,UINT,WPARAM,LPARAM,PBSMINFO);\n#define                       BroadcastSystemMessageEx WINELIB_NAME_AW(BroadcastSystemMessageEx)\nWINUSERAPI void        WINAPI CalcChildScroll(HWND, INT);\nWINUSERAPI BOOL        WINAPI CallMsgFilterA(LPMSG,INT);\nWINUSERAPI BOOL        WINAPI CallMsgFilterW(LPMSG,INT);\n#define                       CallMsgFilter WINELIB_NAME_AW(CallMsgFilter)\nWINUSERAPI LRESULT     WINAPI CallNextHookEx(HHOOK,INT,WPARAM,LPARAM);\nWINUSERAPI LRESULT     WINAPI CallWindowProcA(WNDPROC,HWND,UINT,WPARAM,LPARAM);\nWINUSERAPI LRESULT     WINAPI CallWindowProcW(WNDPROC,HWND,UINT,WPARAM,LPARAM);\n#define                       CallWindowProc WINELIB_NAME_AW(CallWindowProc)\nWINUSERAPI WORD        WINAPI CascadeWindows(HWND, UINT, const RECT *, UINT, const HWND *);\nWINUSERAPI BOOL        WINAPI ChangeClipboardChain(HWND,HWND);\nWINUSERAPI BOOL        WINAPI ChangeMenuA(HMENU,UINT,LPCSTR,UINT,UINT);\nWINUSERAPI BOOL        WINAPI ChangeMenuW(HMENU,UINT,LPCWSTR,UINT,UINT);\n#define                       ChangeMenu WINELIB_NAME_AW(ChangeMenu)\nWINUSERAPI BOOL        WINAPI ChangeWindowMessageFilter(UINT,DWORD);\nWINUSERAPI BOOL        WINAPI ChangeWindowMessageFilterEx(HWND,UINT,DWORD,CHANGEFILTERSTRUCT*);\nWINUSERAPI LPSTR       WINAPI CharLowerA(LPSTR);\nWINUSERAPI LPWSTR      WINAPI CharLowerW(LPWSTR);\n#define                       CharLower WINELIB_NAME_AW(CharLower)\nWINUSERAPI DWORD       WINAPI CharLowerBuffA(LPSTR,DWORD);\nWINUSERAPI DWORD       WINAPI CharLowerBuffW(LPWSTR,DWORD);\n#define                       CharLowerBuff WINELIB_NAME_AW(CharLowerBuff)\nWINUSERAPI LPSTR       WINAPI CharNextA(LPCSTR);\nWINUSERAPI LPWSTR      WINAPI CharNextW(LPCWSTR);\n#define                       CharNext WINELIB_NAME_AW(CharNext)\nWINUSERAPI LPSTR       WINAPI CharNextExA(WORD,LPCSTR,DWORD);\n/* no CharNextExW (doesn't make sense) */\nWINUSERAPI LPSTR       WINAPI CharPrevA(LPCSTR,LPCSTR);\nWINUSERAPI LPWSTR      WINAPI CharPrevW(LPCWSTR,LPCWSTR);\n#define                       CharPrev WINELIB_NAME_AW(CharPrev)\nWINUSERAPI LPSTR       WINAPI CharPrevExA(WORD,LPCSTR,LPCSTR,DWORD);\n/* no CharPrevExW (doesn't make sense) */\nWINUSERAPI LPSTR       WINAPI CharUpperA(LPSTR);\nWINUSERAPI LPWSTR      WINAPI CharUpperW(LPWSTR);\n#define                       CharUpper WINELIB_NAME_AW(CharUpper)\nWINUSERAPI DWORD       WINAPI CharUpperBuffA(LPSTR,DWORD);\nWINUSERAPI DWORD       WINAPI CharUpperBuffW(LPWSTR,DWORD);\n#define                       CharUpperBuff WINELIB_NAME_AW(CharUpperBuff)\nWINUSERAPI BOOL        WINAPI CharToOemA(LPCSTR,LPSTR);\nWINUSERAPI BOOL        WINAPI CharToOemW(LPCWSTR,LPSTR);\n#define                       CharToOem WINELIB_NAME_AW(CharToOem)\nWINUSERAPI BOOL        WINAPI CharToOemBuffA(LPCSTR,LPSTR,DWORD);\nWINUSERAPI BOOL        WINAPI CharToOemBuffW(LPCWSTR,LPSTR,DWORD);\n#define                       CharToOemBuff WINELIB_NAME_AW(CharToOemBuff)\nWINUSERAPI BOOL        WINAPI CheckDlgButton(HWND,INT,UINT);\nWINUSERAPI DWORD       WINAPI CheckMenuItem(HMENU,UINT,UINT);\nWINUSERAPI BOOL        WINAPI CheckMenuRadioItem(HMENU,UINT,UINT,UINT,UINT);\nWINUSERAPI BOOL        WINAPI CheckRadioButton(HWND,int,int,int);\nWINUSERAPI HWND        WINAPI ChildWindowFromPoint(HWND,POINT);\nWINUSERAPI HWND        WINAPI ChildWindowFromPointEx(HWND,POINT,UINT);\nWINUSERAPI BOOL        WINAPI ClientToScreen(HWND,LPPOINT);\nWINUSERAPI BOOL        WINAPI ClipCursor(const RECT*);\nWINUSERAPI BOOL        WINAPI CloseClipboard(void);\nWINUSERAPI BOOL        WINAPI CloseDesktop(HDESK);\nWINUSERAPI BOOL        WINAPI CloseTouchInputHandle(HTOUCHINPUT);\nWINUSERAPI BOOL        WINAPI CloseWindow(HWND);\nWINUSERAPI BOOL        WINAPI CloseWindowStation(HWINSTA);\nWINUSERAPI INT         WINAPI CopyAcceleratorTableA(HACCEL,LPACCEL,INT);\nWINUSERAPI INT         WINAPI CopyAcceleratorTableW(HACCEL,LPACCEL,INT);\n#define                       CopyAcceleratorTable WINELIB_NAME_AW(CopyAcceleratorTable)\n#define                       CopyCursor(cur) ((HCURSOR)CopyIcon((HICON)(cur)))\nWINUSERAPI HICON       WINAPI CopyIcon(HICON);\nWINUSERAPI HANDLE      WINAPI CopyImage(HANDLE,UINT,INT,INT,UINT);\nWINUSERAPI BOOL        WINAPI CopyRect(RECT*,const RECT*);\nWINUSERAPI INT         WINAPI CountClipboardFormats(void);\nWINUSERAPI HACCEL      WINAPI CreateAcceleratorTableA(LPACCEL,INT);\nWINUSERAPI HACCEL      WINAPI CreateAcceleratorTableW(LPACCEL,INT);\n#define                       CreateAcceleratorTable WINELIB_NAME_AW(CreateAcceleratorTable)\nWINUSERAPI HICON       WINAPI CreateIconIndirect(PICONINFO);\nWINUSERAPI BOOL        WINAPI CreateCaret(HWND,HBITMAP,INT,INT);\nWINUSERAPI HCURSOR     WINAPI CreateCursor(HINSTANCE,INT,INT,INT,INT,LPCVOID,LPCVOID);\n#define                       CreateDialogA(inst,ptr,hwnd,dlg) CreateDialogParamA(inst,ptr,hwnd,dlg,0)\n#define                       CreateDialogW(inst,ptr,hwnd,dlg) CreateDialogParamW(inst,ptr,hwnd,dlg,0)\n#define                       CreateDialog WINELIB_NAME_AW(CreateDialog)\n#define                       CreateDialogIndirectA(inst,ptr,hwnd,dlg) CreateDialogIndirectParamA(inst,ptr,hwnd,dlg,0)\n#define                       CreateDialogIndirectW(inst,ptr,hwnd,dlg) CreateDialogIndirectParamW(inst,ptr,hwnd,dlg,0)\n#define                       CreateDialogIndirect WINELIB_NAME_AW(CreateDialogIndirect)\nWINUSERAPI HWND        WINAPI CreateDialogIndirectParamA(HINSTANCE,LPCDLGTEMPLATEA,HWND,DLGPROC,LPARAM);\nWINUSERAPI HWND        WINAPI CreateDialogIndirectParamW(HINSTANCE,LPCDLGTEMPLATEW,HWND,DLGPROC,LPARAM);\n#define                       CreateDialogIndirectParam WINELIB_NAME_AW(CreateDialogIndirectParam)\nWINUSERAPI HWND        WINAPI CreateDialogParamA(HINSTANCE,LPCSTR,HWND,DLGPROC,LPARAM);\nWINUSERAPI HWND        WINAPI CreateDialogParamW(HINSTANCE,LPCWSTR,HWND,DLGPROC,LPARAM);\n#define                       CreateDialogParam WINELIB_NAME_AW(CreateDialogParam)\nWINUSERAPI HICON       WINAPI CreateIcon(HINSTANCE,INT,INT,BYTE,BYTE,LPCVOID,LPCVOID);\nWINUSERAPI HICON       WINAPI CreateIconFromResource(LPBYTE,UINT,BOOL,DWORD);\nWINUSERAPI HICON       WINAPI CreateIconFromResourceEx(LPBYTE,UINT,BOOL,DWORD,INT,INT,UINT);\nWINUSERAPI HMENU       WINAPI CreateMenu(void);\nWINUSERAPI HMENU       WINAPI CreatePopupMenu(void);\n#define                       CreateWindowA(className,titleName,style,x,y,width,height,parent,menu,instance,param) CreateWindowExA(0,className,titleName,style,x,y,width,height,parent,menu,instance,param)\n#define                       CreateWindowW(className,titleName,style,x,y,width,height,parent,menu,instance,param) CreateWindowExW(0,className,titleName,style,x,y,width,height,parent,menu,instance,param)\n#define                       CreateWindow WINELIB_NAME_AW(CreateWindow)\nWINUSERAPI HWND        WINAPI CreateWindowExA(DWORD,LPCSTR,LPCSTR,DWORD,INT,INT,INT,INT,HWND,HMENU,HINSTANCE,LPVOID);\nWINUSERAPI HWND        WINAPI CreateWindowExW(DWORD,LPCWSTR,LPCWSTR,DWORD,INT,INT,INT,INT,HWND,HMENU,HINSTANCE,LPVOID);\n#define                       CreateWindowEx WINELIB_NAME_AW(CreateWindowEx)\nWINUSERAPI HWINSTA     WINAPI CreateWindowStationA(LPCSTR,DWORD,ACCESS_MASK,LPSECURITY_ATTRIBUTES);\nWINUSERAPI HWINSTA     WINAPI CreateWindowStationW(LPCWSTR,DWORD,ACCESS_MASK,LPSECURITY_ATTRIBUTES);\n#define                       CreateWindowStation WINELIB_NAME_AW(CreateWindowStation)\nWINUSERAPI HWND        WINAPI CreateMDIWindowA(LPCSTR,LPCSTR,DWORD,INT,INT,INT,INT,HWND,HINSTANCE,LPARAM);\nWINUSERAPI HWND        WINAPI CreateMDIWindowW(LPCWSTR,LPCWSTR,DWORD,INT,INT,INT,INT,HWND,HINSTANCE,LPARAM);\n#define                       CreateMDIWindow WINELIB_NAME_AW(CreateMDIWindow)\nWINUSERAPI LRESULT     WINAPI DefDlgProcA(HWND,UINT,WPARAM,LPARAM);\nWINUSERAPI LRESULT     WINAPI DefDlgProcW(HWND,UINT,WPARAM,LPARAM);\n#define                       DefDlgProc WINELIB_NAME_AW(DefDlgProc)\nWINUSERAPI HDWP        WINAPI DeferWindowPos(HDWP,HWND,HWND,INT,INT,INT,INT,UINT);\nWINUSERAPI LRESULT     WINAPI DefFrameProcA(HWND,HWND,UINT,WPARAM,LPARAM);\nWINUSERAPI LRESULT     WINAPI DefFrameProcW(HWND,HWND,UINT,WPARAM,LPARAM);\n#define                       DefFrameProc WINELIB_NAME_AW(DefFrameProc)\n#define                       DefHookProc(code,wparam,lparam,phhook) CallNextHookEx(*(phhook),code,wparam,lparam)\nWINUSERAPI LRESULT     WINAPI DefMDIChildProcA(HWND,UINT,WPARAM,LPARAM);\nWINUSERAPI LRESULT     WINAPI DefMDIChildProcW(HWND,UINT,WPARAM,LPARAM);\n#define                       DefMDIChildProc WINELIB_NAME_AW(DefMDIChildProc)\nWINUSERAPI LRESULT     WINAPI DefRawInputProc(PRAWINPUT*,INT,UINT);\nWINUSERAPI LRESULT     WINAPI DefWindowProcA(HWND,UINT,WPARAM,LPARAM);\nWINUSERAPI LRESULT     WINAPI DefWindowProcW(HWND,UINT,WPARAM,LPARAM);\n#define                       DefWindowProc WINELIB_NAME_AW(DefWindowProc)\nWINUSERAPI BOOL        WINAPI DeleteMenu(HMENU,UINT,UINT);\nWINUSERAPI BOOL        WINAPI DeregisterShellHookWindow(HWND);\nWINUSERAPI BOOL        WINAPI DestroyAcceleratorTable(HACCEL);\nWINUSERAPI BOOL        WINAPI DestroyCaret(void);\nWINUSERAPI BOOL        WINAPI DestroyCursor(HCURSOR);\nWINUSERAPI BOOL        WINAPI DestroyIcon(HICON);\nWINUSERAPI BOOL        WINAPI DestroyMenu(HMENU);\nWINUSERAPI BOOL        WINAPI DestroyWindow(HWND);\n#define                       DialogBoxA(inst,template,owner,func) DialogBoxParamA(inst,template,owner,func,0)\n#define                       DialogBoxW(inst,template,owner,func) DialogBoxParamW(inst,template,owner,func,0)\n#define                       DialogBox WINELIB_NAME_AW(DialogBox)\n#define                       DialogBoxIndirectA(inst,template,owner,func) DialogBoxIndirectParamA(inst,template,owner,func,0)\n#define                       DialogBoxIndirectW(inst,template,owner,func) DialogBoxIndirectParamW(inst,template,owner,func,0)\n#define                       DialogBoxIndirect WINELIB_NAME_AW(DialogBoxIndirect)\nWINUSERAPI INT_PTR     WINAPI DialogBoxIndirectParamA(HINSTANCE,LPCDLGTEMPLATEA,HWND,DLGPROC,LPARAM);\nWINUSERAPI INT_PTR     WINAPI DialogBoxIndirectParamW(HINSTANCE,LPCDLGTEMPLATEW,HWND,DLGPROC,LPARAM);\n#define                       DialogBoxIndirectParam WINELIB_NAME_AW(DialogBoxIndirectParam)\nWINUSERAPI INT_PTR     WINAPI DialogBoxParamA(HINSTANCE,LPCSTR,HWND,DLGPROC,LPARAM);\nWINUSERAPI INT_PTR     WINAPI DialogBoxParamW(HINSTANCE,LPCWSTR,HWND,DLGPROC,LPARAM);\n#define                       DialogBoxParam WINELIB_NAME_AW(DialogBoxParam)\nWINUSERAPI VOID        WINAPI DisableProcessWindowsGhosting(VOID);\nWINUSERAPI LRESULT     WINAPI DispatchMessageA(const MSG*);\nWINUSERAPI LRESULT     WINAPI DispatchMessageW(const MSG*);\n#define                       DispatchMessage WINELIB_NAME_AW(DispatchMessage)\nWINUSERAPI INT         WINAPI DlgDirListA(HWND,LPSTR,INT,INT,UINT);\nWINUSERAPI INT         WINAPI DlgDirListW(HWND,LPWSTR,INT,INT,UINT);\n#define                       DlgDirList WINELIB_NAME_AW(DlgDirList)\nWINUSERAPI INT         WINAPI DlgDirListComboBoxA(HWND,LPSTR,INT,INT,UINT);\nWINUSERAPI INT         WINAPI DlgDirListComboBoxW(HWND,LPWSTR,INT,INT,UINT);\n#define                       DlgDirListComboBox WINELIB_NAME_AW(DlgDirListComboBox)\nWINUSERAPI BOOL        WINAPI DlgDirSelectComboBoxExA(HWND,LPSTR,INT,INT);\nWINUSERAPI BOOL        WINAPI DlgDirSelectComboBoxExW(HWND,LPWSTR,INT,INT);\n#define                       DlgDirSelectComboBoxEx WINELIB_NAME_AW(DlgDirSelectComboBoxEx)\nWINUSERAPI BOOL        WINAPI DlgDirSelectExA(HWND,LPSTR,INT,INT);\nWINUSERAPI BOOL        WINAPI DlgDirSelectExW(HWND,LPWSTR,INT,INT);\n#define                       DlgDirSelectEx WINELIB_NAME_AW(DlgDirSelectEx)\nWINUSERAPI BOOL        WINAPI DragDetect(HWND,POINT);\nWINUSERAPI DWORD       WINAPI DragObject(HWND,HWND,UINT,ULONG_PTR,HCURSOR);\nWINUSERAPI BOOL        WINAPI DrawAnimatedRects(HWND,int,const RECT*,const RECT*);\nWINUSERAPI BOOL        WINAPI DrawCaption(HWND,HDC,const RECT*,UINT);\nWINUSERAPI BOOL        WINAPI DrawCaptionTempA(HWND,HDC,const RECT*,HFONT,HICON,LPCSTR,UINT);\nWINUSERAPI BOOL        WINAPI DrawCaptionTempW(HWND,HDC,const RECT*,HFONT,HICON,LPCWSTR,UINT);\n#define                       DrawCaptionTemp WINELIB_NAME_AW(DrawCaptionTemp)\nWINUSERAPI BOOL        WINAPI DrawEdge(HDC,LPRECT,UINT,UINT);\nWINUSERAPI BOOL        WINAPI DrawFocusRect(HDC,const RECT*);\nWINUSERAPI BOOL        WINAPI DrawFrameControl(HDC,LPRECT,UINT,UINT);\nWINUSERAPI BOOL        WINAPI DrawIcon(HDC,INT,INT,HICON);\nWINUSERAPI BOOL        WINAPI DrawIconEx(HDC,INT,INT,HICON,INT,INT,UINT,HBRUSH,UINT);\nWINUSERAPI BOOL        WINAPI DrawMenuBar(HWND);\nWINUSERAPI BOOL        WINAPI DrawStateA(HDC,HBRUSH,DRAWSTATEPROC,LPARAM,WPARAM,INT,INT,INT,INT,UINT);\nWINUSERAPI BOOL        WINAPI DrawStateW(HDC,HBRUSH,DRAWSTATEPROC,LPARAM,WPARAM,INT,INT,INT,INT,UINT);\n#define                       DrawState WINELIB_NAME_AW(DrawState)\nWINUSERAPI INT         WINAPI DrawTextA(HDC,LPCSTR,INT,LPRECT,UINT);\nWINUSERAPI INT         WINAPI DrawTextW(HDC,LPCWSTR,INT,LPRECT,UINT);\n#define                       DrawText WINELIB_NAME_AW(DrawText)\nWINUSERAPI INT         WINAPI DrawTextExA(HDC,LPSTR,INT,LPRECT,UINT,LPDRAWTEXTPARAMS);\nWINUSERAPI INT         WINAPI DrawTextExW(HDC,LPWSTR,INT,LPRECT,UINT,LPDRAWTEXTPARAMS);\n#define                       DrawTextEx WINELIB_NAME_AW(DrawTextEx)\nWINUSERAPI BOOL        WINAPI EmptyClipboard(void);\nWINUSERAPI BOOL        WINAPI EnableMenuItem(HMENU,UINT,UINT);\nWINUSERAPI BOOL        WINAPI EnableMouseInPointer(BOOL);\nWINUSERAPI BOOL        WINAPI EnableScrollBar(HWND,UINT,UINT);\nWINUSERAPI BOOL        WINAPI EnableWindow(HWND,BOOL);\nWINUSERAPI BOOL        WINAPI EndDeferWindowPos(HDWP);\nWINUSERAPI BOOL        WINAPI EndDialog(HWND,INT_PTR);\nWINUSERAPI BOOL        WINAPI EndMenu(void);\nWINUSERAPI BOOL        WINAPI EndPaint(HWND,const PAINTSTRUCT*);\nWINUSERAPI BOOL        WINAPI EnumChildWindows(HWND,WNDENUMPROC,LPARAM);\nWINUSERAPI UINT        WINAPI EnumClipboardFormats(UINT);\nWINUSERAPI BOOL        WINAPI EnumDesktopsA(HWINSTA,DESKTOPENUMPROCA,LPARAM);\nWINUSERAPI BOOL        WINAPI EnumDesktopsW(HWINSTA,DESKTOPENUMPROCW,LPARAM);\n#define                       EnumDesktops WINELIB_NAME_AW(EnumDesktops)\nWINUSERAPI BOOL        WINAPI EnumDesktopWindows(HDESK,WNDENUMPROC,LPARAM);\nWINUSERAPI BOOL        WINAPI EnumDisplayMonitors(HDC,LPRECT,MONITORENUMPROC,LPARAM);\nWINUSERAPI INT         WINAPI EnumPropsA(HWND,PROPENUMPROCA);\nWINUSERAPI INT         WINAPI EnumPropsW(HWND,PROPENUMPROCW);\n#define                       EnumProps WINELIB_NAME_AW(EnumProps)\nWINUSERAPI INT         WINAPI EnumPropsExA(HWND,PROPENUMPROCEXA,LPARAM);\nWINUSERAPI INT         WINAPI EnumPropsExW(HWND,PROPENUMPROCEXW,LPARAM);\n#define                       EnumPropsEx WINELIB_NAME_AW(EnumPropsEx)\nWINUSERAPI BOOL        WINAPI EnumThreadWindows(DWORD,WNDENUMPROC,LPARAM);\nWINUSERAPI BOOL        WINAPI EnumWindows(WNDENUMPROC,LPARAM);\nWINUSERAPI BOOL        WINAPI EnumWindowStationsA(WINSTAENUMPROCA,LPARAM);\nWINUSERAPI BOOL        WINAPI EnumWindowStationsW(WINSTAENUMPROCW,LPARAM);\n#define                       EnumWindowStations WINELIB_NAME_AW(EnumWindowStations)\nWINUSERAPI INT         WINAPI ExcludeUpdateRgn(HDC,HWND);\n#define                       ExitWindows(a,b) ExitWindowsEx(EWX_LOGOFF,0xffffffff)\nWINUSERAPI BOOL        WINAPI ExitWindowsEx(UINT,DWORD);\nWINUSERAPI INT         WINAPI FillRect(HDC,const RECT*,HBRUSH);\nWINUSERAPI HWND        WINAPI FindWindowA(LPCSTR,LPCSTR);\nWINUSERAPI HWND        WINAPI FindWindowW(LPCWSTR,LPCWSTR);\n#define                       FindWindow WINELIB_NAME_AW(FindWindow)\nWINUSERAPI HWND        WINAPI FindWindowExA(HWND,HWND,LPCSTR,LPCSTR);\nWINUSERAPI HWND        WINAPI FindWindowExW(HWND,HWND,LPCWSTR,LPCWSTR);\n#define                       FindWindowEx WINELIB_NAME_AW(FindWindowEx)\nWINUSERAPI BOOL        WINAPI FlashWindow(HWND,BOOL);\nWINUSERAPI BOOL        WINAPI FlashWindowEx(PFLASHWINFO);\nWINUSERAPI INT         WINAPI FrameRect(HDC,const RECT*,HBRUSH);\nWINUSERAPI HWND        WINAPI GetActiveWindow(void);\nWINUSERAPI BOOL        WINAPI GetAltTabInfoA(HWND,INT,PALTTABINFO,LPSTR,UINT);\nWINUSERAPI BOOL        WINAPI GetAltTabInfoW(HWND,INT,PALTTABINFO,LPWSTR,UINT);\n#define                       GetAltTabInfo WINELIB_NAME_AW(GetAltTabInfo)\nWINUSERAPI HWND        WINAPI GetAncestor(HWND,UINT);\nWINUSERAPI DWORD       WINAPI GetAppCompatFlags(HTASK);\nWINUSERAPI SHORT       WINAPI GetAsyncKeyState(INT);\nWINUSERAPI BOOL        WINAPI GetAutoRotationState(AR_STATE*);\nWINUSERAPI DPI_AWARENESS WINAPI GetAwarenessFromDpiAwarenessContext(DPI_AWARENESS_CONTEXT);\nWINUSERAPI HWND        WINAPI GetCapture(void);\nWINUSERAPI UINT        WINAPI GetCaretBlinkTime(void);\nWINUSERAPI BOOL        WINAPI GetCaretPos(LPPOINT);\nWINUSERAPI BOOL        WINAPI GetClassInfoA(HINSTANCE,LPCSTR,WNDCLASSA *);\nWINUSERAPI BOOL        WINAPI GetClassInfoW(HINSTANCE,LPCWSTR,WNDCLASSW *);\n#define                       GetClassInfo WINELIB_NAME_AW(GetClassInfo)\nWINUSERAPI BOOL        WINAPI GetClassInfoExA(HINSTANCE,LPCSTR,WNDCLASSEXA *);\nWINUSERAPI BOOL        WINAPI GetClassInfoExW(HINSTANCE,LPCWSTR,WNDCLASSEXW *);\n#define                       GetClassInfoEx WINELIB_NAME_AW(GetClassInfoEx)\nWINUSERAPI DWORD       WINAPI GetClassLongA(HWND,INT);\nWINUSERAPI DWORD       WINAPI GetClassLongW(HWND,INT);\n#define                       GetClassLong WINELIB_NAME_AW(GetClassLong)\n#ifdef _WIN64\nWINUSERAPI ULONG_PTR   WINAPI GetClassLongPtrA(HWND,INT);\nWINUSERAPI ULONG_PTR   WINAPI GetClassLongPtrW(HWND,INT);\n#else\n#define                       GetClassLongPtrA GetClassLongA\n#define                       GetClassLongPtrW GetClassLongW\n#endif\n#define                       GetClassLongPtr WINELIB_NAME_AW(GetClassLongPtr)\nWINUSERAPI INT         WINAPI GetClassNameA(HWND,LPSTR,INT);\nWINUSERAPI INT         WINAPI GetClassNameW(HWND,LPWSTR,INT);\n#define                       GetClassName WINELIB_NAME_AW(GetClassName)\nWINUSERAPI WORD        WINAPI GetClassWord(HWND,INT);\nWINUSERAPI BOOL        WINAPI GetClientRect(HWND,LPRECT);\nWINUSERAPI HANDLE      WINAPI GetClipboardData(UINT);\nWINUSERAPI INT         WINAPI GetClipboardFormatNameA(UINT,LPSTR,INT);\nWINUSERAPI INT         WINAPI GetClipboardFormatNameW(UINT,LPWSTR,INT);\n#define                       GetClipboardFormatName WINELIB_NAME_AW(GetClipboardFormatName)\nWINUSERAPI HWND        WINAPI GetClipboardOwner(void);\nWINUSERAPI DWORD       WINAPI GetClipboardSequenceNumber(VOID);\nWINUSERAPI HWND        WINAPI GetClipboardViewer(void);\nWINUSERAPI BOOL        WINAPI GetClipCursor(LPRECT);\nWINUSERAPI BOOL        WINAPI GetComboBoxInfo(HWND,PCOMBOBOXINFO);\nWINUSERAPI HCURSOR     WINAPI GetCursor(void);\nWINUSERAPI BOOL        WINAPI GetCursorInfo(PCURSORINFO);\nWINUSERAPI HCURSOR     WINAPI GetCursorFrameInfo(HCURSOR,DWORD,DWORD,DWORD*,DWORD*);\nWINUSERAPI BOOL        WINAPI GetCursorPos(LPPOINT);\nWINUSERAPI HDC         WINAPI GetDC(HWND);\nWINUSERAPI HDC         WINAPI GetDCEx(HWND,HRGN,DWORD);\nWINUSERAPI HWND        WINAPI GetDesktopWindow(void);\nWINUSERAPI DWORD       WINAPI GetDialogBaseUnits(void);\nWINUSERAPI BOOL        WINAPI GetDisplayAutoRotationPreferences(ORIENTATION_PREFERENCE*);\nWINUSERAPI INT         WINAPI GetDlgCtrlID(HWND);\nWINUSERAPI HWND        WINAPI GetDlgItem(HWND,INT);\nWINUSERAPI UINT        WINAPI GetDlgItemInt(HWND,INT,BOOL*,BOOL);\nWINUSERAPI UINT        WINAPI GetDlgItemTextA(HWND,INT,LPSTR,INT);\nWINUSERAPI UINT        WINAPI GetDlgItemTextW(HWND,INT,LPWSTR,INT);\n#define                       GetDlgItemText WINELIB_NAME_AW(GetDlgItemText)\nWINUSERAPI UINT        WINAPI GetDoubleClickTime(void);\nWINUSERAPI BOOL        WINAPI GetDpiForMonitorInternal(HMONITOR,UINT,UINT*,UINT*);\nWINUSERAPI UINT        WINAPI GetDpiForWindow(HWND);\nWINUSERAPI UINT        WINAPI GetDpiForSystem(void);\nWINUSERAPI HWND        WINAPI GetFocus(void);\nWINUSERAPI HWND        WINAPI GetForegroundWindow(void);\nWINUSERAPI BOOL        WINAPI GetGestureConfig(HWND,DWORD,DWORD,UINT*,GESTURECONFIG*,UINT);\nWINUSERAPI BOOL        WINAPI GetGestureInfo(HGESTUREINFO,PGESTUREINFO);\nWINUSERAPI BOOL        WINAPI GetGUIThreadInfo(DWORD,GUITHREADINFO*);\nWINUSERAPI DWORD       WINAPI GetGuiResources(HANDLE,DWORD);\nWINUSERAPI BOOL        WINAPI GetIconInfo(HICON,PICONINFO);\nWINUSERAPI BOOL        WINAPI GetIconInfoExA(HICON,ICONINFOEXA*);\nWINUSERAPI BOOL        WINAPI GetIconInfoExW(HICON,ICONINFOEXW*);\n#define                       GetIconInfoEx WINELIB_NAME_AW(GetIconInfoEx)\nWINUSERAPI BOOL        WINAPI GetInputState(void);\nWINUSERAPI UINT        WINAPI GetInternalWindowPos(HWND,LPRECT,LPPOINT);\nWINUSERAPI UINT        WINAPI GetKBCodePage(void);\nWINUSERAPI HKL         WINAPI GetKeyboardLayout(DWORD);\nWINUSERAPI UINT        WINAPI GetKeyboardLayoutList(INT,HKL *);\nWINUSERAPI BOOL        WINAPI GetKeyboardState(LPBYTE);\nWINUSERAPI INT         WINAPI GetKeyboardType(INT);\nWINUSERAPI INT         WINAPI GetKeyNameTextA(LONG,LPSTR,INT);\nWINUSERAPI INT         WINAPI GetKeyNameTextW(LONG,LPWSTR,INT);\n#define                       GetKeyNameText WINELIB_NAME_AW(GetKeyNameText)\nWINUSERAPI BOOL        WINAPI GetKeyboardLayoutNameA(LPSTR);\nWINUSERAPI BOOL        WINAPI GetKeyboardLayoutNameW(LPWSTR);\n#define                       GetKeyboardLayoutName WINELIB_NAME_AW(GetKeyboardLayoutName)\nWINUSERAPI SHORT       WINAPI GetKeyState(INT);\nWINUSERAPI HWND        WINAPI GetLastActivePopup(HWND);\nWINUSERAPI BOOL        WINAPI GetLastInputInfo(PLASTINPUTINFO);\nWINUSERAPI DWORD       WINAPI GetListBoxInfo(HWND);\nWINUSERAPI UINT        WINAPI GetRawInputBuffer(PRAWINPUT,PUINT,UINT);\nWINUSERAPI UINT        WINAPI GetRawInputData(HRAWINPUT,UINT,LPVOID,PUINT,UINT);\nWINUSERAPI UINT        WINAPI GetRawInputDeviceInfoA(HANDLE,UINT,LPVOID,PUINT);\nWINUSERAPI UINT        WINAPI GetRawInputDeviceInfoW(HANDLE,UINT,LPVOID,PUINT);\n#define                       GetRawInputDeviceInfo WINELIB_NAME_AW(GetRawInputDeviceInfo)\nWINUSERAPI UINT        WINAPI GetRawInputDeviceList(PRAWINPUTDEVICELIST,PUINT,UINT);\nWINUSERAPI UINT        WINAPI GetRegisteredRawInputDevices(PRAWINPUTDEVICE,PUINT,UINT);\nWINUSERAPI BOOL        WINAPI GetLayeredWindowAttributes(HWND,COLORREF*,BYTE*,DWORD*);\nWINUSERAPI HMENU       WINAPI GetMenu(HWND);\nWINUSERAPI BOOL        WINAPI GetMenuBarInfo(HWND,LONG,LONG,PMENUBARINFO);\nWINUSERAPI DWORD       WINAPI GetMenuCheckMarkDimensions(void);\nWINUSERAPI DWORD       WINAPI GetMenuContextHelpId(HMENU);\nWINUSERAPI UINT        WINAPI GetMenuDefaultItem(HMENU,UINT,UINT);\nWINUSERAPI BOOL        WINAPI GetMenuInfo(HMENU,LPMENUINFO);\nWINUSERAPI INT         WINAPI GetMenuItemCount(HMENU);\nWINUSERAPI UINT        WINAPI GetMenuItemID(HMENU,INT);\nWINUSERAPI BOOL        WINAPI GetMenuItemInfoA(HMENU,UINT,BOOL,MENUITEMINFOA*);\nWINUSERAPI BOOL        WINAPI GetMenuItemInfoW(HMENU,UINT,BOOL,MENUITEMINFOW*);\n#define                       GetMenuItemInfo WINELIB_NAME_AW(GetMenuItemInfo)\nWINUSERAPI BOOL        WINAPI GetMenuItemRect(HWND,HMENU,UINT,LPRECT);\nWINUSERAPI UINT        WINAPI GetMenuState(HMENU,UINT,UINT);\nWINUSERAPI INT         WINAPI GetMenuStringA(HMENU,UINT,LPSTR,INT,UINT);\nWINUSERAPI INT         WINAPI GetMenuStringW(HMENU,UINT,LPWSTR,INT,UINT);\n#define                       GetMenuString WINELIB_NAME_AW(GetMenuString)\nWINUSERAPI BOOL        WINAPI GetMessageA(LPMSG,HWND,UINT,UINT);\nWINUSERAPI BOOL        WINAPI GetMessageW(LPMSG,HWND,UINT,UINT);\n#define                       GetMessage WINELIB_NAME_AW(GetMessage)\nWINUSERAPI LPARAM      WINAPI GetMessageExtraInfo(void);\nWINUSERAPI DWORD       WINAPI GetMessagePos(void);\nWINUSERAPI LONG        WINAPI GetMessageTime(void);\nWINUSERAPI BOOL        WINAPI GetMonitorInfoA(HMONITOR,LPMONITORINFO);\nWINUSERAPI BOOL        WINAPI GetMonitorInfoW(HMONITOR,LPMONITORINFO);\n#define                       GetMonitorInfo WINELIB_NAME_AW(GetMonitorInfo)\nWINUSERAPI HWND        WINAPI GetNextDlgGroupItem(HWND,HWND,BOOL);\nWINUSERAPI HWND        WINAPI GetNextDlgTabItem(HWND,HWND,BOOL);\n#define                       GetNextWindow GetWindow\nWINUSERAPI HWND        WINAPI GetOpenClipboardWindow(void);\nWINUSERAPI HWND        WINAPI GetParent(HWND);\nWINUSERAPI BOOL        WINAPI GetPhysicalCursorPos(POINT*);\nWINUSERAPI INT         WINAPI GetPriorityClipboardFormat(UINT*,INT);\nWINUSERAPI BOOL        WINAPI GetProcessDefaultLayout(DWORD*);\nWINUSERAPI BOOL        WINAPI GetProcessDpiAwarenessInternal(HANDLE,DPI_AWARENESS*);\nWINUSERAPI HANDLE      WINAPI GetPropA(HWND,LPCSTR);\nWINUSERAPI HANDLE      WINAPI GetPropW(HWND,LPCWSTR);\n#define                       GetProp WINELIB_NAME_AW(GetProp)\nWINUSERAPI DWORD       WINAPI GetQueueStatus(UINT);\nWINUSERAPI BOOL        WINAPI GetScrollInfo(HWND,INT,LPSCROLLINFO);\nWINUSERAPI BOOL        WINAPI GetScrollBarInfo(HWND,LONG,LPSCROLLBARINFO);\nWINUSERAPI INT         WINAPI GetScrollPos(HWND,INT);\nWINUSERAPI BOOL        WINAPI GetScrollRange(HWND,INT,LPINT,LPINT);\nWINUSERAPI HWND        WINAPI GetShellWindow(void);\nWINUSERAPI HMENU       WINAPI GetSubMenu(HMENU,INT);\nWINUSERAPI HBRUSH      WINAPI GetSysColorBrush(INT);\n#define                       GetSysModalWindow() ((HWND)0)\nWINUSERAPI HMENU       WINAPI GetSystemMenu(HWND,BOOL);\nWINUSERAPI INT         WINAPI GetSystemMetrics(INT);\nWINUSERAPI INT         WINAPI GetSystemMetricsForDpi(INT,UINT);\nWINUSERAPI DWORD       WINAPI GetTabbedTextExtentA(HDC,LPCSTR,INT,INT,const INT*);\nWINUSERAPI DWORD       WINAPI GetTabbedTextExtentW(HDC,LPCWSTR,INT,INT,const INT*);\n#define                       GetTabbedTextExtent WINELIB_NAME_AW(GetTabbedTextExtent)\nWINUSERAPI BOOL        WINAPI GetTitleBarInfo(HWND,PTITLEBARINFO);\nWINUSERAPI HDESK       WINAPI GetThreadDesktop(DWORD);\nWINUSERAPI DPI_AWARENESS_CONTEXT WINAPI GetThreadDpiAwarenessContext(void);\nWINUSERAPI HWND        WINAPI GetTopWindow(HWND);\nWINUSERAPI BOOL        WINAPI GetTouchInputInfo(HTOUCHINPUT,UINT,TOUCHINPUT*,int);\nWINUSERAPI BOOL        WINAPI GetUpdateRect(HWND,LPRECT,BOOL);\nWINUSERAPI INT         WINAPI GetUpdateRgn(HWND,HRGN,BOOL);\nWINUSERAPI BOOL        WINAPI GetUpdatedClipboardFormats(UINT*,UINT,UINT*);\nWINUSERAPI BOOL        WINAPI GetUserObjectInformationA(HANDLE,INT,LPVOID,DWORD,LPDWORD);\nWINUSERAPI BOOL        WINAPI GetUserObjectInformationW(HANDLE,INT,LPVOID,DWORD,LPDWORD);\n#define                       GetUserObjectInformation WINELIB_NAME_AW(GetUserObjectInformation)\nWINUSERAPI BOOL        WINAPI GetUserObjectSecurity(HANDLE,PSECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD);\nWINUSERAPI HWND        WINAPI GetWindow(HWND,UINT);\nWINUSERAPI DWORD       WINAPI GetWindowContextHelpId(HWND);\nWINUSERAPI HDC         WINAPI GetWindowDC(HWND);\nWINUSERAPI BOOL        WINAPI GetWindowDisplayAffinity(HWND,DWORD*);\nWINUSERAPI DPI_AWARENESS_CONTEXT WINAPI GetWindowDpiAwarenessContext(HWND);\nWINUSERAPI BOOL        WINAPI GetWindowInfo(HWND, PWINDOWINFO);\nWINUSERAPI LONG        WINAPI GetWindowLongA(HWND,INT);\nWINUSERAPI LONG        WINAPI GetWindowLongW(HWND,INT);\n#define                       GetWindowLong WINELIB_NAME_AW(GetWindowLong)\n#ifdef _WIN64\nWINUSERAPI LONG_PTR    WINAPI GetWindowLongPtrA(HWND,INT);\nWINUSERAPI LONG_PTR    WINAPI GetWindowLongPtrW(HWND,INT);\n#else\n#define                       GetWindowLongPtrA GetWindowLongA\n#define                       GetWindowLongPtrW GetWindowLongW\n#endif\n#define                       GetWindowLongPtr WINELIB_NAME_AW(GetWindowLongPtr)\nWINUSERAPI UINT        WINAPI GetWindowModuleFileNameA(HWND,LPSTR,UINT);\nWINUSERAPI UINT        WINAPI GetWindowModuleFileNameW(HWND,LPWSTR,UINT);\n#define                       GetWindowModuleFileName WINELIB_NAME_AW(GetWindowModuleFileName)\nWINUSERAPI BOOL        WINAPI GetWindowPlacement(HWND,LPWINDOWPLACEMENT);\nWINUSERAPI BOOL        WINAPI GetWindowRect(HWND,LPRECT);\nWINUSERAPI INT         WINAPI GetWindowRgnBox(HWND,LPRECT);\nWINUSERAPI INT         WINAPI GetWindowRgn(HWND,HRGN);\nWINUSERAPI HWINSTA     WINAPI GetProcessWindowStation(void);\n#define                       GetWindowTask(hwnd) ((HTASK)GetWindowThreadProcessId(hwnd,NULL))\nWINUSERAPI INT         WINAPI GetWindowTextA(HWND,LPSTR,INT);\nWINUSERAPI INT         WINAPI GetWindowTextW(HWND,LPWSTR,INT);\n#define                       GetWindowText WINELIB_NAME_AW(GetWindowText)\nWINUSERAPI INT         WINAPI GetWindowTextLengthA(HWND);\nWINUSERAPI INT         WINAPI GetWindowTextLengthW(HWND);\n#define                       GetWindowTextLength WINELIB_NAME_AW(GetWindowTextLength)\nWINUSERAPI DWORD       WINAPI GetWindowThreadProcessId(HWND,LPDWORD);\nWINUSERAPI WORD        WINAPI GetWindowWord(HWND,INT);\nWINUSERAPI BOOL        WINAPI GrayStringA(HDC,HBRUSH,GRAYSTRINGPROC,LPARAM,INT,INT,INT,INT,INT);\nWINUSERAPI BOOL        WINAPI GrayStringW(HDC,HBRUSH,GRAYSTRINGPROC,LPARAM,INT,INT,INT,INT,INT);\n#define                       GrayString WINELIB_NAME_AW(GrayString)\nWINUSERAPI BOOL        WINAPI HideCaret(HWND);\nWINUSERAPI BOOL        WINAPI HiliteMenuItem(HWND,HMENU,UINT,UINT);\nWINUSERAPI BOOL        WINAPI InSendMessage(void);\nWINUSERAPI DWORD       WINAPI InSendMessageEx(LPVOID);\nWINUSERAPI BOOL        WINAPI InsertMenuA(HMENU,UINT,UINT,UINT_PTR,LPCSTR);\nWINUSERAPI BOOL        WINAPI InsertMenuW(HMENU,UINT,UINT,UINT_PTR,LPCWSTR);\n#define                       InsertMenu WINELIB_NAME_AW(InsertMenu)\nWINUSERAPI BOOL        WINAPI InsertMenuItemA(HMENU,UINT,BOOL,const MENUITEMINFOA*);\nWINUSERAPI BOOL        WINAPI InsertMenuItemW(HMENU,UINT,BOOL,const MENUITEMINFOW*);\n#define                       InsertMenuItem WINELIB_NAME_AW(InsertMenuItem)\nWINUSERAPI INT         WINAPI InternalGetWindowText(HWND,LPWSTR,INT);\nWINUSERAPI BOOL        WINAPI IntersectRect(LPRECT,const RECT*,const RECT*);\nWINUSERAPI BOOL        WINAPI InvalidateRect(HWND,const RECT*,BOOL);\nWINUSERAPI BOOL        WINAPI InvalidateRgn(HWND,HRGN,BOOL);\nWINUSERAPI BOOL        WINAPI InvertRect(HDC,const RECT*);\nWINUSERAPI BOOL        WINAPI IsCharAlphaA(CHAR);\nWINUSERAPI BOOL        WINAPI IsCharAlphaW(WCHAR);\n#define                       IsCharAlpha WINELIB_NAME_AW(IsCharAlpha)\nWINUSERAPI BOOL        WINAPI IsCharAlphaNumericA(CHAR);\nWINUSERAPI BOOL        WINAPI IsCharAlphaNumericW(WCHAR);\n#define                       IsCharAlphaNumeric WINELIB_NAME_AW(IsCharAlphaNumeric)\nWINUSERAPI BOOL        WINAPI IsCharLowerA(CHAR);\nWINUSERAPI BOOL        WINAPI IsCharLowerW(WCHAR);\n#define                       IsCharLower WINELIB_NAME_AW(IsCharLower)\nWINUSERAPI BOOL        WINAPI IsCharUpperA(CHAR);\nWINUSERAPI BOOL        WINAPI IsCharUpperW(WCHAR);\n#define                       IsCharUpper WINELIB_NAME_AW(IsCharUpper)\nWINUSERAPI BOOL        WINAPI IsChild(HWND,HWND);\nWINUSERAPI BOOL        WINAPI IsClipboardFormatAvailable(UINT);\nWINUSERAPI BOOL        WINAPI IsDialogMessageA(HWND,LPMSG);\nWINUSERAPI BOOL        WINAPI IsDialogMessageW(HWND,LPMSG);\n#define                       IsDialogMessage WINELIB_NAME_AW(IsDialogMessage)\nWINUSERAPI UINT        WINAPI IsDlgButtonChecked(HWND,int);\nWINUSERAPI BOOL        WINAPI IsGUIThread(BOOL);\nWINUSERAPI BOOL        WINAPI IsHungAppWindow(HWND);\nWINUSERAPI BOOL        WINAPI IsIconic(HWND);\nWINUSERAPI BOOL        WINAPI IsMenu(HMENU);\nWINUSERAPI BOOL        WINAPI IsProcessDPIAware(void);\nWINUSERAPI BOOL        WINAPI IsTouchWindow(HWND,PULONG);\nWINUSERAPI BOOL        WINAPI IsValidDpiAwarenessContext(DPI_AWARENESS_CONTEXT);\nWINUSERAPI BOOL        WINAPI IsWinEventHookInstalled(DWORD);\nWINUSERAPI BOOL        WINAPI IsWindow(HWND);\nWINUSERAPI BOOL        WINAPI IsWindowEnabled(HWND);\nWINUSERAPI BOOL        WINAPI IsWindowUnicode(HWND);\nWINUSERAPI BOOL        WINAPI IsWindowVisible(HWND);\nWINUSERAPI BOOL        WINAPI IsZoomed(HWND);\nWINUSERAPI BOOL        WINAPI KillSystemTimer(HWND,UINT_PTR);\nWINUSERAPI BOOL        WINAPI KillTimer(HWND,UINT_PTR);\nWINUSERAPI HACCEL      WINAPI LoadAcceleratorsA(HINSTANCE,LPCSTR);\nWINUSERAPI HACCEL      WINAPI LoadAcceleratorsW(HINSTANCE,LPCWSTR);\n#define                       LoadAccelerators WINELIB_NAME_AW(LoadAccelerators)\nWINUSERAPI HBITMAP     WINAPI LoadBitmapA(HINSTANCE,LPCSTR);\nWINUSERAPI HBITMAP     WINAPI LoadBitmapW(HINSTANCE,LPCWSTR);\n#define                       LoadBitmap WINELIB_NAME_AW(LoadBitmap)\nWINUSERAPI HCURSOR     WINAPI LoadCursorA(HINSTANCE,LPCSTR);\nWINUSERAPI HCURSOR     WINAPI LoadCursorW(HINSTANCE,LPCWSTR);\n#define                       LoadCursor WINELIB_NAME_AW(LoadCursor)\nWINUSERAPI HCURSOR     WINAPI LoadCursorFromFileA(LPCSTR);\nWINUSERAPI HCURSOR     WINAPI LoadCursorFromFileW(LPCWSTR);\n#define                       LoadCursorFromFile WINELIB_NAME_AW(LoadCursorFromFile)\nWINUSERAPI HICON       WINAPI LoadIconA(HINSTANCE,LPCSTR);\nWINUSERAPI HICON       WINAPI LoadIconW(HINSTANCE,LPCWSTR);\n#define                       LoadIcon WINELIB_NAME_AW(LoadIcon)\nWINUSERAPI HANDLE      WINAPI LoadImageA(HINSTANCE,LPCSTR,UINT,INT,INT,UINT);\nWINUSERAPI HANDLE      WINAPI LoadImageW(HINSTANCE,LPCWSTR,UINT,INT,INT,UINT);\n#define                       LoadImage WINELIB_NAME_AW(LoadImage)\nWINUSERAPI HKL         WINAPI LoadKeyboardLayoutA(LPCSTR,UINT);\nWINUSERAPI HKL         WINAPI LoadKeyboardLayoutW(LPCWSTR,UINT);\n#define                       LoadKeyboardLayout WINELIB_NAME_AW(LoadKeyboardLayout)\nWINUSERAPI HMENU       WINAPI LoadMenuA(HINSTANCE,LPCSTR);\nWINUSERAPI HMENU       WINAPI LoadMenuW(HINSTANCE,LPCWSTR);\n#define                       LoadMenu WINELIB_NAME_AW(LoadMenu)\nWINUSERAPI HMENU       WINAPI LoadMenuIndirectA(LPCVOID);\nWINUSERAPI HMENU       WINAPI LoadMenuIndirectW(LPCVOID);\n#define                       LoadMenuIndirect WINELIB_NAME_AW(LoadMenuIndirect)\nWINUSERAPI INT         WINAPI LoadStringA(HINSTANCE,UINT,LPSTR,INT);\nWINUSERAPI INT         WINAPI LoadStringW(HINSTANCE,UINT,LPWSTR,INT);\n#define                       LoadString WINELIB_NAME_AW(LoadString)\nWINUSERAPI BOOL        WINAPI LogicalToPhysicalPoint(HWND,POINT*);\nWINUSERAPI BOOL        WINAPI LogicalToPhysicalPointForPerMonitorDPI(HWND,POINT*);\nWINUSERAPI BOOL        WINAPI LockSetForegroundWindow(UINT);\nWINUSERAPI BOOL        WINAPI LockWindowUpdate(HWND);\nWINUSERAPI BOOL        WINAPI LockWorkStation(void);\nWINUSERAPI INT         WINAPI LookupIconIdFromDirectory(LPBYTE,BOOL);\nWINUSERAPI INT         WINAPI LookupIconIdFromDirectoryEx(LPBYTE,BOOL,INT,INT,UINT);\nWINUSERAPI UINT        WINAPI MapVirtualKeyA(UINT,UINT);\nWINUSERAPI UINT        WINAPI MapVirtualKeyW(UINT,UINT);\n#define                       MapVirtualKey WINELIB_NAME_AW(MapVirtualKey)\nWINUSERAPI UINT        WINAPI MapVirtualKeyExA(UINT,UINT,HKL);\nWINUSERAPI UINT        WINAPI MapVirtualKeyExW(UINT,UINT,HKL);\n#define                       MapVirtualKeyEx WINELIB_NAME_AW(MapVirtualKeyEx)\nWINUSERAPI BOOL        WINAPI MapDialogRect(HWND,LPRECT);\nWINUSERAPI INT         WINAPI MapWindowPoints(HWND,HWND,LPPOINT,UINT);\nWINUSERAPI INT         WINAPI MenuItemFromPoint(HWND,HMENU,POINT);\nWINUSERAPI BOOL        WINAPI MessageBeep(UINT);\nWINUSERAPI INT         WINAPI MessageBoxA(HWND,LPCSTR,LPCSTR,UINT);\nWINUSERAPI INT         WINAPI MessageBoxW(HWND,LPCWSTR,LPCWSTR,UINT);\n#define                       MessageBox WINELIB_NAME_AW(MessageBox)\nWINUSERAPI INT         WINAPI MessageBoxExA(HWND,LPCSTR,LPCSTR,UINT,WORD);\nWINUSERAPI INT         WINAPI MessageBoxExW(HWND,LPCWSTR,LPCWSTR,UINT,WORD);\n#define                       MessageBoxEx WINELIB_NAME_AW(MessageBoxEx)\nWINUSERAPI INT         WINAPI MessageBoxIndirectA(LPMSGBOXPARAMSA);\nWINUSERAPI INT         WINAPI MessageBoxIndirectW(LPMSGBOXPARAMSW);\n#define                       MessageBoxIndirect WINELIB_NAME_AW(MessageBoxIndirect)\nWINUSERAPI BOOL        WINAPI ModifyMenuA(HMENU,UINT,UINT,UINT_PTR,LPCSTR);\nWINUSERAPI BOOL        WINAPI ModifyMenuW(HMENU,UINT,UINT,UINT_PTR,LPCWSTR);\n#define                       ModifyMenu WINELIB_NAME_AW(ModifyMenu)\nWINUSERAPI HMONITOR    WINAPI MonitorFromPoint(POINT,DWORD);\nWINUSERAPI HMONITOR    WINAPI MonitorFromRect(const RECT*,DWORD);\nWINUSERAPI HMONITOR    WINAPI MonitorFromWindow(HWND,DWORD);\nWINUSERAPI BOOL        WINAPI MoveWindow(HWND,INT,INT,INT,INT,BOOL);\nWINUSERAPI DWORD       WINAPI MsgWaitForMultipleObjects(DWORD,const HANDLE*,BOOL,DWORD,DWORD);\nWINUSERAPI DWORD       WINAPI MsgWaitForMultipleObjectsEx(DWORD,const HANDLE*,DWORD,DWORD,DWORD);\nWINUSERAPI VOID        WINAPI NotifyWinEvent(DWORD,HWND,LONG,LONG);\nWINUSERAPI DWORD       WINAPI OemKeyScan(WORD);\nWINUSERAPI BOOL        WINAPI OemToCharA(LPCSTR,LPSTR);\nWINUSERAPI BOOL        WINAPI OemToCharW(LPCSTR,LPWSTR);\n#define                       OemToChar WINELIB_NAME_AW(OemToChar)\nWINUSERAPI BOOL        WINAPI OemToCharBuffA(LPCSTR,LPSTR,DWORD);\nWINUSERAPI BOOL        WINAPI OemToCharBuffW(LPCSTR,LPWSTR,DWORD);\n#define                       OemToCharBuff WINELIB_NAME_AW(OemToCharBuff)\nWINUSERAPI BOOL        WINAPI OpenClipboard(HWND);\nWINUSERAPI HDESK       WINAPI OpenDesktopA(LPCSTR,DWORD,BOOL,ACCESS_MASK);\nWINUSERAPI HDESK       WINAPI OpenDesktopW(LPCWSTR,DWORD,BOOL,ACCESS_MASK);\n#define                       OpenDesktop WINELIB_NAME_AW(OpenDesktop)\nWINUSERAPI BOOL        WINAPI OpenIcon(HWND);\nWINUSERAPI HDESK       WINAPI OpenInputDesktop(DWORD,BOOL,ACCESS_MASK);\nWINUSERAPI HWINSTA     WINAPI OpenWindowStationA(LPCSTR,BOOL,ACCESS_MASK);\nWINUSERAPI HWINSTA     WINAPI OpenWindowStationW(LPCWSTR,BOOL,ACCESS_MASK);\n#define                       OpenWindowStation WINELIB_NAME_AW(OpenWindowStation)\nWINUSERAPI BOOL        WINAPI PaintDesktop(HDC);\nWINUSERAPI BOOL        WINAPI PeekMessageA(LPMSG,HWND,UINT,UINT,UINT);\nWINUSERAPI BOOL        WINAPI PeekMessageW(LPMSG,HWND,UINT,UINT,UINT);\n#define                       PeekMessage WINELIB_NAME_AW(PeekMessage)\nWINUSERAPI BOOL        WINAPI PhysicalToLogicalPoint(HWND,POINT*);\nWINUSERAPI BOOL        WINAPI PhysicalToLogicalPointForPerMonitorDPI(HWND,POINT*);\n#define                       PostAppMessageA(thread,msg,wparam,lparam) PostThreadMessageA((DWORD)(thread),msg,wparam,lparam)\n#define                       PostAppMessageW(thread,msg,wparam,lparam) PostThreadMessageW((DWORD)(thread),msg,wparam,lparam)\n#define                       PostAppMessage WINELIB_NAME_AW(PostAppMessage)\nWINUSERAPI BOOL        WINAPI PostMessageA(HWND,UINT,WPARAM,LPARAM);\nWINUSERAPI BOOL        WINAPI PostMessageW(HWND,UINT,WPARAM,LPARAM);\n#define                       PostMessage WINELIB_NAME_AW(PostMessage)\nWINUSERAPI void        WINAPI PostQuitMessage(INT);\nWINUSERAPI BOOL        WINAPI PostThreadMessageA(DWORD,UINT,WPARAM,LPARAM);\nWINUSERAPI BOOL        WINAPI PostThreadMessageW(DWORD,UINT,WPARAM,LPARAM);\n#define                       PostThreadMessage WINELIB_NAME_AW(PostThreadMessage)\nWINUSERAPI BOOL        WINAPI PrintWindow(HWND,HDC,UINT);\nWINUSERAPI UINT        WINAPI PrivateExtractIconExA(LPCSTR,int,HICON*,HICON*,UINT);\nWINUSERAPI UINT        WINAPI PrivateExtractIconExW(LPCWSTR,int,HICON*,HICON*,UINT);\nWINUSERAPI UINT        WINAPI PrivateExtractIconsA(LPCSTR,int,int,int,HICON*,UINT*,UINT,UINT);\nWINUSERAPI UINT        WINAPI PrivateExtractIconsW(LPCWSTR,int,int,int,HICON*,UINT*,UINT,UINT);\nWINUSERAPI BOOL        WINAPI PtInRect(const RECT*,POINT);\nWINUSERAPI HWND        WINAPI RealChildWindowFromPoint(HWND,POINT);\nWINUSERAPI UINT        WINAPI RealGetWindowClassA(HWND,LPSTR,UINT);\nWINUSERAPI UINT        WINAPI RealGetWindowClassW(HWND,LPWSTR,UINT);\n#define                       RealGetWindowClass WINELIB_NAME_AW(RealGetWindowClass)\nWINUSERAPI BOOL        WINAPI RedrawWindow(HWND,const RECT*,HRGN,UINT);\nWINUSERAPI ATOM        WINAPI RegisterClassA(const WNDCLASSA *);\nWINUSERAPI ATOM        WINAPI RegisterClassW(const WNDCLASSW *);\n#define                       RegisterClass WINELIB_NAME_AW(RegisterClass)\nWINUSERAPI ATOM        WINAPI RegisterClassExA(const WNDCLASSEXA *);\nWINUSERAPI ATOM        WINAPI RegisterClassExW(const WNDCLASSEXW *);\n#define                       RegisterClassEx WINELIB_NAME_AW(RegisterClassEx)\nWINUSERAPI UINT        WINAPI RegisterClipboardFormatA(LPCSTR);\nWINUSERAPI UINT        WINAPI RegisterClipboardFormatW(LPCWSTR);\n#define                       RegisterClipboardFormat WINELIB_NAME_AW(RegisterClipboardFormat)\nWINUSERAPI HDEVNOTIFY  WINAPI RegisterDeviceNotificationA(HANDLE,LPVOID,DWORD);\nWINUSERAPI HDEVNOTIFY  WINAPI RegisterDeviceNotificationW(HANDLE,LPVOID,DWORD);\n#define                       RegisterDeviceNotification WINELIB_NAME_AW(RegisterDeviceNotification)\nWINUSERAPI BOOL        WINAPI RegisterHotKey(HWND,INT,UINT,UINT);\nWINUSERAPI BOOL        WINAPI RegisterPointerDeviceNotifications(HWND,BOOL);\nWINUSERAPI HPOWERNOTIFY WINAPI RegisterPowerSettingNotification(HANDLE,LPCGUID,DWORD);\nWINUSERAPI BOOL        WINAPI RegisterRawInputDevices(PRAWINPUTDEVICE,UINT,UINT);\nWINUSERAPI BOOL        WINAPI RegisterShellHookWindow(HWND);\nWINUSERAPI BOOL        WINAPI RegisterTouchWindow(HWND,ULONG);\nWINUSERAPI UINT        WINAPI RegisterWindowMessageA(LPCSTR);\nWINUSERAPI UINT        WINAPI RegisterWindowMessageW(LPCWSTR);\n#define                       RegisterWindowMessage WINELIB_NAME_AW(RegisterWindowMessage)\nWINUSERAPI BOOL        WINAPI ReleaseCapture(void);\nWINUSERAPI INT         WINAPI ReleaseDC(HWND,HDC);\nWINUSERAPI BOOL        WINAPI RemoveClipboardFormatListener(HWND);\nWINUSERAPI BOOL        WINAPI RemoveMenu(HMENU,UINT,UINT);\nWINUSERAPI HANDLE      WINAPI RemovePropA(HWND,LPCSTR);\nWINUSERAPI HANDLE      WINAPI RemovePropW(HWND,LPCWSTR);\n#define                       RemoveProp WINELIB_NAME_AW(RemoveProp)\nWINUSERAPI BOOL        WINAPI ReplyMessage(LRESULT);\nWINUSERAPI BOOL        WINAPI ScreenToClient(HWND,LPPOINT);\nWINUSERAPI VOID        WINAPI ScrollChildren(HWND,UINT,WPARAM,LPARAM);\nWINUSERAPI BOOL        WINAPI ScrollDC(HDC,INT,INT,const RECT*,const RECT*,HRGN,LPRECT);\nWINUSERAPI BOOL        WINAPI ScrollWindow(HWND,INT,INT,const RECT*,const RECT*);\nWINUSERAPI INT         WINAPI ScrollWindowEx(HWND,INT,INT,const RECT*,const RECT*,HRGN,LPRECT,UINT);\nWINUSERAPI LRESULT     WINAPI SendDlgItemMessageA(HWND,INT,UINT,WPARAM,LPARAM);\nWINUSERAPI LRESULT     WINAPI SendDlgItemMessageW(HWND,INT,UINT,WPARAM,LPARAM);\n#define                       SendDlgItemMessage WINELIB_NAME_AW(SendDlgItemMessage)\nWINUSERAPI UINT        WINAPI SendInput(UINT,LPINPUT,int);\nWINUSERAPI LRESULT     WINAPI SendMessageA(HWND,UINT,WPARAM,LPARAM);\nWINUSERAPI LRESULT     WINAPI SendMessageW(HWND,UINT,WPARAM,LPARAM);\n#define                       SendMessage WINELIB_NAME_AW(SendMessage)\nWINUSERAPI BOOL        WINAPI SendMessageCallbackA(HWND,UINT,WPARAM,LPARAM,SENDASYNCPROC,ULONG_PTR);\nWINUSERAPI BOOL        WINAPI SendMessageCallbackW(HWND,UINT,WPARAM,LPARAM,SENDASYNCPROC,ULONG_PTR);\n#define                       SendMessageCallback WINELIB_NAME_AW(SendMessageCallback)\nWINUSERAPI LRESULT     WINAPI SendMessageTimeoutA(HWND,UINT,WPARAM,LPARAM,UINT,UINT,PDWORD_PTR);\nWINUSERAPI LRESULT     WINAPI SendMessageTimeoutW(HWND,UINT,WPARAM,LPARAM,UINT,UINT,PDWORD_PTR);\n#define                       SendMessageTimeout WINELIB_NAME_AW(SendMessageTimeout)\nWINUSERAPI BOOL        WINAPI SendNotifyMessageA(HWND,UINT,WPARAM,LPARAM);\nWINUSERAPI BOOL        WINAPI SendNotifyMessageW(HWND,UINT,WPARAM,LPARAM);\n#define                       SendNotifyMessage WINELIB_NAME_AW(SendNotifyMessage)\nWINUSERAPI HWND        WINAPI SetActiveWindow(HWND);\nWINUSERAPI HWND        WINAPI SetCapture(HWND);\nWINUSERAPI BOOL        WINAPI SetCaretBlinkTime(UINT);\nWINUSERAPI BOOL        WINAPI SetCaretPos(INT,INT);\nWINUSERAPI DWORD       WINAPI SetClassLongA(HWND,INT,LONG);\nWINUSERAPI DWORD       WINAPI SetClassLongW(HWND,INT,LONG);\n#define                       SetClassLong WINELIB_NAME_AW(SetClassLong)\n#ifdef _WIN64\nWINUSERAPI ULONG_PTR   WINAPI SetClassLongPtrA(HWND,INT,LONG_PTR);\nWINUSERAPI ULONG_PTR   WINAPI SetClassLongPtrW(HWND,INT,LONG_PTR);\n#else\n#define                       SetClassLongPtrA SetClassLongA\n#define                       SetClassLongPtrW SetClassLongW\n#endif\n#define                       SetClassLongPtr WINELIB_NAME_AW(SetClassLongPtr)\nWINUSERAPI WORD        WINAPI SetClassWord(HWND,INT,WORD);\nWINUSERAPI HANDLE      WINAPI SetClipboardData(UINT,HANDLE);\nWINUSERAPI HWND        WINAPI SetClipboardViewer(HWND);\nWINUSERAPI UINT_PTR    WINAPI SetCoalescableTimer(HWND,UINT_PTR,UINT,TIMERPROC,ULONG);\nWINUSERAPI HCURSOR     WINAPI SetCursor(HCURSOR);\nWINUSERAPI BOOL        WINAPI SetCursorPos(INT,INT);\nWINUSERAPI VOID        WINAPI SetDebugErrorLevel(DWORD);\nWINUSERAPI BOOL        WINAPI SetDeskWallPaper(LPCSTR);\nWINUSERAPI BOOL        WINAPI SetDlgItemInt(HWND,INT,UINT,BOOL);\nWINUSERAPI BOOL        WINAPI SetDlgItemTextA(HWND,INT,LPCSTR);\nWINUSERAPI BOOL        WINAPI SetDlgItemTextW(HWND,INT,LPCWSTR);\n#define                       SetDlgItemText WINELIB_NAME_AW(SetDlgItemText)\nWINUSERAPI BOOL        WINAPI SetDoubleClickTime(UINT);\nWINUSERAPI HWND        WINAPI SetFocus(HWND);\nWINUSERAPI BOOL        WINAPI SetForegroundWindow(HWND);\nWINUSERAPI BOOL        WINAPI SetGestureConfig(HWND,DWORD,UINT,PGESTURECONFIG,UINT);\nWINUSERAPI void        WINAPI SetInternalWindowPos(HWND,UINT,LPRECT,LPPOINT);\nWINUSERAPI BOOL        WINAPI SetKeyboardState(LPBYTE);\nWINUSERAPI VOID        WINAPI SetLastErrorEx(DWORD,DWORD);\nWINUSERAPI BOOL        WINAPI SetLayeredWindowAttributes(HWND,COLORREF,BYTE,DWORD);\nWINUSERAPI BOOL        WINAPI SetMenu(HWND,HMENU);\nWINUSERAPI BOOL        WINAPI SetMenuContextHelpId(HMENU,DWORD);\nWINUSERAPI BOOL        WINAPI SetMenuDefaultItem(HMENU,UINT,UINT);\nWINUSERAPI BOOL        WINAPI SetMenuInfo(HMENU,LPCMENUINFO);\nWINUSERAPI BOOL        WINAPI SetMenuItemBitmaps(HMENU,UINT,UINT,HBITMAP,HBITMAP);\nWINUSERAPI BOOL        WINAPI SetMenuItemInfoA(HMENU,UINT,BOOL,const MENUITEMINFOA*);\nWINUSERAPI BOOL        WINAPI SetMenuItemInfoW(HMENU,UINT,BOOL,const MENUITEMINFOW*);\n#define                       SetMenuItemInfo WINELIB_NAME_AW(SetMenuItemInfo)\nWINUSERAPI LPARAM      WINAPI SetMessageExtraInfo(LPARAM);\nWINUSERAPI BOOL        WINAPI SetMessageQueue(INT);\nWINUSERAPI HWND        WINAPI SetParent(HWND,HWND);\nWINUSERAPI BOOL        WINAPI SetPhysicalCursorPos(INT,INT);\nWINUSERAPI BOOL        WINAPI SetProcessDPIAware(void);\nWINUSERAPI BOOL        WINAPI SetProcessDefaultLayout(DWORD);\nWINUSERAPI BOOL        WINAPI SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT);\nWINUSERAPI BOOL        WINAPI SetProcessDpiAwarenessInternal(DPI_AWARENESS);\nWINUSERAPI BOOL        WINAPI SetProcessWindowStation(HWINSTA);\nWINUSERAPI BOOL        WINAPI SetPropA(HWND,LPCSTR,HANDLE);\nWINUSERAPI BOOL        WINAPI SetPropW(HWND,LPCWSTR,HANDLE);\n#define                       SetProp WINELIB_NAME_AW(SetProp)\nWINUSERAPI INT         WINAPI SetScrollInfo(HWND,INT,const SCROLLINFO*,BOOL);\nWINUSERAPI INT         WINAPI SetScrollPos(HWND,INT,INT,BOOL);\nWINUSERAPI BOOL        WINAPI SetScrollRange(HWND,INT,INT,INT,BOOL);\n#define                       SetSysModalWindow(hwnd) ((HWND)0)\nWINUSERAPI BOOL        WINAPI SetSystemCursor(HCURSOR,DWORD);\nWINUSERAPI BOOL        WINAPI SetSystemMenu(HWND,HMENU);\nWINUSERAPI UINT_PTR    WINAPI SetSystemTimer(HWND,UINT_PTR,UINT,TIMERPROC);\nWINUSERAPI BOOL        WINAPI SetThreadDesktop(HDESK);\nWINUSERAPI DPI_AWARENESS_CONTEXT WINAPI SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT);\nWINUSERAPI UINT_PTR    WINAPI SetTimer(HWND,UINT_PTR,UINT,TIMERPROC);\nWINUSERAPI BOOL        WINAPI SetUserObjectInformationA(HANDLE,INT,LPVOID,DWORD);\nWINUSERAPI BOOL        WINAPI SetUserObjectInformationW(HANDLE,INT,LPVOID,DWORD);\n#define                       SetUserObjectInformation WINELIB_NAME_AW(SetUserObjectInformation)\nWINUSERAPI BOOL        WINAPI SetUserObjectSecurity(HANDLE,PSECURITY_INFORMATION,PSECURITY_DESCRIPTOR);\nWINUSERAPI BOOL        WINAPI SetWindowContextHelpId(HWND,DWORD);\nWINUSERAPI BOOL        WINAPI SetWindowDisplayAffinity(HWND,DWORD);\nWINUSERAPI LONG        WINAPI SetWindowLongA(HWND,INT,LONG);\nWINUSERAPI LONG        WINAPI SetWindowLongW(HWND,INT,LONG);\n#define                       SetWindowLong WINELIB_NAME_AW(SetWindowLong)\n#ifdef _WIN64\nWINUSERAPI LONG_PTR    WINAPI SetWindowLongPtrA(HWND,INT,LONG_PTR);\nWINUSERAPI LONG_PTR    WINAPI SetWindowLongPtrW(HWND,INT,LONG_PTR);\n#else\n#define                       SetWindowLongPtrA SetWindowLongA\n#define                       SetWindowLongPtrW SetWindowLongW\n#endif\n#define                       SetWindowLongPtr WINELIB_NAME_AW(SetWindowLongPtr)\nWINUSERAPI BOOL        WINAPI SetWindowPlacement(HWND,const WINDOWPLACEMENT*);\nWINUSERAPI HHOOK       WINAPI SetWindowsHookA(INT,HOOKPROC);\nWINUSERAPI HHOOK       WINAPI SetWindowsHookW(INT,HOOKPROC);\n#define                       SetWindowsHook WINELIB_NAME_AW(SetWindowsHook)\nWINUSERAPI HHOOK       WINAPI SetWindowsHookExA(INT,HOOKPROC,HINSTANCE,DWORD);\nWINUSERAPI HHOOK       WINAPI SetWindowsHookExW(INT,HOOKPROC,HINSTANCE,DWORD);\n#define                       SetWindowsHookEx WINELIB_NAME_AW(SetWindowsHookEx)\nWINUSERAPI BOOL        WINAPI SetWindowPos(HWND,HWND,INT,INT,INT,INT,UINT);\nWINUSERAPI INT         WINAPI SetWindowRgn(HWND,HRGN,BOOL);\nWINUSERAPI BOOL        WINAPI SetWindowTextA(HWND,LPCSTR);\nWINUSERAPI BOOL        WINAPI SetWindowTextW(HWND,LPCWSTR);\n#define                       SetWindowText WINELIB_NAME_AW(SetWindowText)\nWINUSERAPI WORD        WINAPI SetWindowWord(HWND,INT,WORD);\nWINUSERAPI HWINEVENTHOOK WINAPI SetWinEventHook(DWORD,DWORD,HMODULE,WINEVENTPROC,DWORD,DWORD,DWORD);\nWINUSERAPI BOOL        WINAPI ShowCaret(HWND);\nWINUSERAPI INT         WINAPI ShowCursor(BOOL);\nWINUSERAPI BOOL        WINAPI ShowScrollBar(HWND,INT,BOOL);\nWINUSERAPI BOOL        WINAPI ShowOwnedPopups(HWND,BOOL);\nWINUSERAPI BOOL        WINAPI ShowWindow(HWND,INT);\nWINUSERAPI BOOL        WINAPI ShowWindowAsync(HWND,INT);\nWINUSERAPI BOOL        WINAPI ShutdownBlockReasonCreate(HWND,LPCWSTR);\nWINUSERAPI BOOL        WINAPI ShutdownBlockReasonDestroy(HWND);\nWINUSERAPI BOOL        WINAPI SubtractRect(LPRECT,const RECT*,const RECT*);\nWINUSERAPI BOOL        WINAPI SwapMouseButton(BOOL);\nWINUSERAPI BOOL        WINAPI SwitchDesktop(HDESK);\nWINUSERAPI VOID        WINAPI SwitchToThisWindow(HWND,BOOL);\nWINUSERAPI BOOL        WINAPI SystemParametersInfoA(UINT,UINT,LPVOID,UINT);\nWINUSERAPI BOOL        WINAPI SystemParametersInfoW(UINT,UINT,LPVOID,UINT);\n#define                       SystemParametersInfo WINELIB_NAME_AW(SystemParametersInfo)\nWINUSERAPI BOOL        WINAPI SystemParametersInfoForDpi(UINT,UINT,void*,UINT,UINT);\nWINUSERAPI LONG        WINAPI TabbedTextOutA(HDC,INT,INT,LPCSTR,INT,INT,const INT*,INT);\nWINUSERAPI LONG        WINAPI TabbedTextOutW(HDC,INT,INT,LPCWSTR,INT,INT,const INT*,INT);\n#define                       TabbedTextOut WINELIB_NAME_AW(TabbedTextOut)\nWINUSERAPI WORD        WINAPI TileWindows (HWND,UINT,const RECT *,UINT,const HWND *);\nWINUSERAPI INT         WINAPI ToAscii(UINT,UINT,const BYTE *,LPWORD,UINT);\nWINUSERAPI INT         WINAPI ToAsciiEx(UINT,UINT,const BYTE *,LPWORD,UINT,HKL);\nWINUSERAPI INT         WINAPI ToUnicode(UINT,UINT,const BYTE *,LPWSTR,int,UINT);\nWINUSERAPI INT         WINAPI ToUnicodeEx(UINT,UINT,const BYTE *,LPWSTR,int,UINT,HKL);\nWINUSERAPI BOOL        WINAPI TrackMouseEvent(LPTRACKMOUSEEVENT);\nWINUSERAPI BOOL        WINAPI TrackPopupMenu(HMENU,UINT,INT,INT,INT,HWND,const RECT*);\nWINUSERAPI BOOL        WINAPI TrackPopupMenuEx(HMENU,UINT,INT,INT,HWND,LPTPMPARAMS);\nWINUSERAPI INT         WINAPI TranslateAcceleratorA(HWND,HACCEL,LPMSG);\nWINUSERAPI INT         WINAPI TranslateAcceleratorW(HWND,HACCEL,LPMSG);\n#define                       TranslateAccelerator WINELIB_NAME_AW(TranslateAccelerator)\nWINUSERAPI BOOL        WINAPI TranslateMDISysAccel(HWND,LPMSG);\nWINUSERAPI BOOL        WINAPI TranslateMessage(const MSG*);\nWINUSERAPI BOOL        WINAPI UnhookWinEvent(HWINEVENTHOOK);\nWINUSERAPI BOOL        WINAPI UnhookWindowsHook(INT,HOOKPROC);\nWINUSERAPI BOOL        WINAPI UnhookWindowsHookEx(HHOOK);\nWINUSERAPI BOOL        WINAPI UnloadKeyboardLayout(HKL);\nWINUSERAPI BOOL        WINAPI UnionRect(LPRECT,const RECT*,const RECT*);\nWINUSERAPI BOOL        WINAPI UnregisterClassA(LPCSTR,HINSTANCE);\nWINUSERAPI BOOL        WINAPI UnregisterClassW(LPCWSTR,HINSTANCE);\n#define                       UnregisterClass WINELIB_NAME_AW(UnregisterClass)\nWINUSERAPI BOOL        WINAPI UnregisterDeviceNotification(HDEVNOTIFY);\nWINUSERAPI BOOL        WINAPI UnregisterHotKey(HWND,INT);\nWINUSERAPI BOOL        WINAPI UnregisterPowerSettingNotification(HPOWERNOTIFY);\nWINUSERAPI BOOL        WINAPI UnregisterTouchWindow(HWND);\nWINUSERAPI BOOL        WINAPI UpdateWindow(HWND);\nWINUSERAPI BOOL        WINAPI UserHandleGrantAccess(HANDLE,HANDLE,BOOL);\nWINUSERAPI UINT        WINAPI UserRealizePalette(HDC);\nWINUSERAPI BOOL        WINAPI ValidateRect(HWND,const RECT*);\nWINUSERAPI BOOL        WINAPI ValidateRgn(HWND,HRGN);\nWINUSERAPI SHORT       WINAPI VkKeyScanA(CHAR);\nWINUSERAPI SHORT       WINAPI VkKeyScanW(WCHAR);\n#define                       VkKeyScan WINELIB_NAME_AW(VkKeyScan)\nWINUSERAPI WORD        WINAPI VkKeyScanExA(CHAR, HKL);\nWINUSERAPI WORD        WINAPI VkKeyScanExW(WCHAR, HKL);\n#define                       VkKeyScanEx WINELIB_NAME_AW(VkKeyScanEx)\nWINUSERAPI DWORD       WINAPI WaitForInputIdle(HANDLE,DWORD);\nWINUSERAPI BOOL        WINAPI WaitMessage(void);\nWINUSERAPI HWND        WINAPI WindowFromDC(HDC);\nWINUSERAPI HWND        WINAPI WindowFromPoint(POINT);\nWINUSERAPI BOOL        WINAPI WinHelpA(HWND,LPCSTR,UINT,ULONG_PTR);\nWINUSERAPI BOOL        WINAPI WinHelpW(HWND,LPCWSTR,UINT,ULONG_PTR);\n#define                       WinHelp WINELIB_NAME_AW(WinHelp)\nWINUSERAPI VOID        WINAPI keybd_event(BYTE,BYTE,DWORD,ULONG_PTR);\nWINUSERAPI VOID        WINAPI mouse_event(DWORD,DWORD,DWORD,DWORD,ULONG_PTR);\nWINUSERAPI INT        WINAPIV wsprintfA(LPSTR,LPCSTR,...);\nWINUSERAPI INT        WINAPIV wsprintfW(LPWSTR,LPCWSTR,...);\n#define                       wsprintf WINELIB_NAME_AW(wsprintf)\nWINUSERAPI INT         WINAPI wvsprintfA(LPSTR,LPCSTR,__ms_va_list);\nWINUSERAPI INT         WINAPI wvsprintfW(LPWSTR,LPCWSTR,__ms_va_list);\n#define                       wvsprintf WINELIB_NAME_AW(wvsprintf)\n\n#if !defined(__WINESRC__) || defined(WINE_NO_INLINE_RECT)\n\nWINUSERAPI BOOL        WINAPI EqualRect(const RECT*,const RECT*);\nWINUSERAPI BOOL        WINAPI InflateRect(LPRECT,INT,INT);\nWINUSERAPI BOOL        WINAPI IsRectEmpty(const RECT*);\nWINUSERAPI BOOL        WINAPI OffsetRect(LPRECT,INT,INT);\nWINUSERAPI BOOL        WINAPI SetRect(LPRECT,INT,INT,INT,INT);\nWINUSERAPI BOOL        WINAPI SetRectEmpty(LPRECT);\n\n#else\n\n/* Inline versions of common RECT helpers */\n\nstatic inline BOOL WINAPI EqualRect(const RECT *rect1, const RECT *rect2)\n{\n    if (!rect1 || !rect2) return FALSE;\n    return ((rect1->left == rect2->left) && (rect1->right == rect2->right) &&\n            (rect1->top == rect2->top) && (rect1->bottom == rect2->bottom));\n}\n\nstatic inline BOOL WINAPI InflateRect(LPRECT rect, INT x, INT y)\n{\n    if (!rect) return FALSE;\n    rect->left   -= x;\n    rect->top    -= y;\n    rect->right  += x;\n    rect->bottom += y;\n    return TRUE;\n}\n\nstatic inline BOOL WINAPI IsRectEmpty(const RECT *rect)\n{\n    if (!rect) return TRUE;\n    return ((rect->left >= rect->right) || (rect->top >= rect->bottom));\n}\n\nstatic inline BOOL WINAPI OffsetRect(LPRECT rect, INT x, INT y)\n{\n    if (!rect) return FALSE;\n    rect->left   += x;\n    rect->right  += x;\n    rect->top    += y;\n    rect->bottom += y;\n    return TRUE;\n}\n\nstatic inline BOOL WINAPI SetRect(LPRECT rect, INT left, INT top, INT right, INT bottom)\n{\n    if (!rect) return FALSE;\n    rect->left   = left;\n    rect->right  = right;\n    rect->top    = top;\n    rect->bottom = bottom;\n    return TRUE;\n}\n\nstatic inline BOOL WINAPI SetRectEmpty(LPRECT rect)\n{\n    if (!rect) return FALSE;\n    rect->left = rect->right = rect->top = rect->bottom = 0;\n    return TRUE;\n}\n\n#endif /* !defined(__WINESRC__) || defined(WINE_NO_INLINE_RECT) */\n\n/* Undocumented functions */\n\n/* NOTE: This is SYSTEM.3, not USER.182, which is also named KillSystemTimer */\nWORD        WINAPI SYSTEM_KillSystemTimer( WORD );\n\n#ifdef __WINESRC__\nWINUSERAPI BOOL CDECL __wine_send_input( HWND hwnd, const INPUT *input );\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _WINUSER_ */\n"
  },
  {
    "path": "wine/windows/winuser.rh",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n/* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */\n#ifndef __MSABI_LONG\n# if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)\n#  define __MSABI_LONG(x)         x ## l\n# else\n#  define __MSABI_LONG(x)         x\n# endif\n#endif\n\n#ifdef RC_INVOKED\n# define MAKEINTRESOURCE(i)       i\n#endif\n\n\n#define RT_MANIFEST                                        MAKEINTRESOURCE(24)\n#define CREATEPROCESS_MANIFEST_RESOURCE_ID                 MAKEINTRESOURCE(1)\n#define ISOLATIONAWARE_MANIFEST_RESOURCE_ID                MAKEINTRESOURCE(2)\n#define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(3)\n#define MINIMUM_RESERVED_MANIFEST_RESOURCE_ID              MAKEINTRESOURCE(1)\n#define MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID              MAKEINTRESOURCE(16)\n\n\n/*** ShowWindow() codes ***/\n#define SW_HIDE                0\n#define SW_SHOWNORMAL          1\n#define SW_NORMAL              SW_SHOWNORMAL\n#define SW_SHOWMINIMIZED       2\n#define SW_SHOWMAXIMIZED       3\n#define SW_MAXIMIZE            SW_SHOWMAXIMIZED\n#define SW_SHOWNOACTIVATE      4\n#define SW_SHOW                5\n#define SW_MINIMIZE            6\n#define SW_SHOWMINNOACTIVE     7\n#define SW_SHOWNA              8\n#define SW_RESTORE             9\n#define SW_SHOWDEFAULT         10\n#define SW_FORCEMINIMIZE       11\n#define SW_MAX                 11\n#define SW_NORMALNA            0xCC /* Undocumented. Flag in MinMaximize */\n\n/* Obsolete ShowWindow() codes for compatibility */\n#define HIDE_WINDOW            SW_HIDE\n#define SHOW_OPENWINDOW        SW_SHOWNORMAL\n#define SHOW_ICONWINDOW        SW_SHOWMINIMIZED\n#define SHOW_FULLSCREEN        SW_SHOWMAXIMIZED\n#define SHOW_OPENNOACTIVATE    SW_SHOWNOACTIVATE\n\n/* WM_SHOWWINDOW lParam codes */\n#define SW_PARENTCLOSING       1\n#define SW_OTHERZOOM           2\n#define SW_PARENTOPENING       3\n#define SW_OTHERUNZOOM         4\n\n\n/*** Virtual key codes ***/\n#define VK_LBUTTON             0x01\n#define VK_RBUTTON             0x02\n#define VK_CANCEL              0x03\n#define VK_MBUTTON             0x04\n#define VK_XBUTTON1            0x05\n#define VK_XBUTTON2            0x06\n/*                             0x07  Undefined */\n#define VK_BACK                0x08\n#define VK_TAB                 0x09\n/*                             0x0A-0x0B  Undefined */\n#define VK_CLEAR               0x0C\n#define VK_RETURN              0x0D\n/*                             0x0E-0x0F  Undefined */\n#define VK_SHIFT               0x10\n#define VK_CONTROL             0x11\n#define VK_MENU                0x12\n#define VK_PAUSE               0x13\n#define VK_CAPITAL             0x14\n\n#define VK_KANA                0x15\n#define VK_HANGEUL             VK_KANA\n#define VK_HANGUL              VK_KANA\n#define VK_JUNJA               0x17\n#define VK_FINAL               0x18\n#define VK_HANJA               0x19\n#define VK_KANJI               VK_HANJA\n\n/*                             0x1A       Undefined */\n#define VK_ESCAPE              0x1B\n\n#define VK_CONVERT             0x1C\n#define VK_NONCONVERT          0x1D\n#define VK_ACCEPT              0x1E\n#define VK_MODECHANGE          0x1F\n\n#define VK_SPACE               0x20\n#define VK_PRIOR               0x21\n#define VK_NEXT                0x22\n#define VK_END                 0x23\n#define VK_HOME                0x24\n#define VK_LEFT                0x25\n#define VK_UP                  0x26\n#define VK_RIGHT               0x27\n#define VK_DOWN                0x28\n#define VK_SELECT              0x29\n#define VK_PRINT               0x2A /* OEM specific in Windows 3.1 SDK */\n#define VK_EXECUTE             0x2B\n#define VK_SNAPSHOT            0x2C\n#define VK_INSERT              0x2D\n#define VK_DELETE              0x2E\n#define VK_HELP                0x2F\n/* VK_0 - VK-9                 0x30-0x39  Use ASCII instead */\n/*                             0x3A-0x40  Undefined */\n/* VK_A - VK_Z                 0x41-0x5A  Use ASCII instead */\n#define VK_LWIN                0x5B\n#define VK_RWIN                0x5C\n#define VK_APPS                0x5D\n/*                             0x5E Unassigned */\n#define VK_SLEEP               0x5F\n#define VK_NUMPAD0             0x60\n#define VK_NUMPAD1             0x61\n#define VK_NUMPAD2             0x62\n#define VK_NUMPAD3             0x63\n#define VK_NUMPAD4             0x64\n#define VK_NUMPAD5             0x65\n#define VK_NUMPAD6             0x66\n#define VK_NUMPAD7             0x67\n#define VK_NUMPAD8             0x68\n#define VK_NUMPAD9             0x69\n#define VK_MULTIPLY            0x6A\n#define VK_ADD                 0x6B\n#define VK_SEPARATOR           0x6C\n#define VK_SUBTRACT            0x6D\n#define VK_DECIMAL             0x6E\n#define VK_DIVIDE              0x6F\n#define VK_F1                  0x70\n#define VK_F2                  0x71\n#define VK_F3                  0x72\n#define VK_F4                  0x73\n#define VK_F5                  0x74\n#define VK_F6                  0x75\n#define VK_F7                  0x76\n#define VK_F8                  0x77\n#define VK_F9                  0x78\n#define VK_F10                 0x79\n#define VK_F11                 0x7A\n#define VK_F12                 0x7B\n#define VK_F13                 0x7C\n#define VK_F14                 0x7D\n#define VK_F15                 0x7E\n#define VK_F16                 0x7F\n#define VK_F17                 0x80\n#define VK_F18                 0x81\n#define VK_F19                 0x82\n#define VK_F20                 0x83\n#define VK_F21                 0x84\n#define VK_F22                 0x85\n#define VK_F23                 0x86\n#define VK_F24                 0x87\n/*                             0x88-0x8F  Unassigned */\n#define VK_NUMLOCK             0x90\n#define VK_SCROLL              0x91\n#define VK_OEM_NEC_EQUAL       0x92\n#define VK_OEM_FJ_JISHO        0x92\n#define VK_OEM_FJ_MASSHOU      0x93\n#define VK_OEM_FJ_TOUROKU      0x94\n#define VK_OEM_FJ_LOYA         0x95\n#define VK_OEM_FJ_ROYA         0x96\n/*                             0x97-0x9F  Unassigned */\n/*\n * differencing between right and left shift/control/alt key.\n * Used only by GetAsyncKeyState() and GetKeyState().\n */\n#define VK_LSHIFT              0xA0\n#define VK_RSHIFT              0xA1\n#define VK_LCONTROL            0xA2\n#define VK_RCONTROL            0xA3\n#define VK_LMENU               0xA4\n#define VK_RMENU               0xA5\n\n#define VK_BROWSER_BACK        0xA6\n#define VK_BROWSER_FORWARD     0xA7\n#define VK_BROWSER_REFRESH     0xA8\n#define VK_BROWSER_STOP        0xA9\n#define VK_BROWSER_SEARCH      0xAA\n#define VK_BROWSER_FAVORITES   0xAB\n#define VK_BROWSER_HOME        0xAC\n#define VK_VOLUME_MUTE         0xAD\n#define VK_VOLUME_DOWN         0xAE\n#define VK_VOLUME_UP           0xAF\n#define VK_MEDIA_NEXT_TRACK    0xB0\n#define VK_MEDIA_PREV_TRACK    0xB1\n#define VK_MEDIA_STOP          0xB2\n#define VK_MEDIA_PLAY_PAUSE    0xB3\n#define VK_LAUNCH_MAIL         0xB4\n#define VK_LAUNCH_MEDIA_SELECT 0xB5\n#define VK_LAUNCH_APP1         0xB6\n#define VK_LAUNCH_APP2         0xB7\n\n/*                             0xB8-0xB9  Unassigned */\n#define VK_OEM_1               0xBA\n#define VK_OEM_PLUS            0xBB\n#define VK_OEM_COMMA           0xBC\n#define VK_OEM_MINUS           0xBD\n#define VK_OEM_PERIOD          0xBE\n#define VK_OEM_2               0xBF\n#define VK_OEM_3               0xC0\n/*                             0xC1-0xDA  Unassigned */\n#define VK_OEM_4               0xDB\n#define VK_OEM_5               0xDC\n#define VK_OEM_6               0xDD\n#define VK_OEM_7               0xDE\n#define VK_OEM_8               0xDF\n/*                             0xE0       OEM specific */\n#define VK_OEM_AX              0xE1  /* \"AX\" key on Japanese AX keyboard */\n#define VK_OEM_102             0xE2  /* \"<>\" or \"\\|\" on RT 102-key keyboard */\n#define VK_ICO_HELP            0xE3  /* Help key on ICO */\n#define VK_ICO_00              0xE4  /* 00 key on ICO */\n#define VK_PROCESSKEY          0xE5\n#define VK_ICO_CLEAR           0xE6\n\n#define VK_PACKET              0xE7\n/*                             0xE8       Unassigned */\n\n#define VK_OEM_RESET           0xE9\n#define VK_OEM_JUMP            0xEA\n#define VK_OEM_PA1             0xEB\n#define VK_OEM_PA2             0xEC\n#define VK_OEM_PA3             0xED\n#define VK_OEM_WSCTRL          0xEE\n#define VK_OEM_CUSEL           0xEF\n#define VK_OEM_ATTN            0xF0\n#define VK_OEM_FINISH          0xF1\n#define VK_OEM_COPY            0xF2\n#define VK_OEM_AUTO            0xF3\n#define VK_OEM_ENLW            0xF4\n#define VK_OEM_BACKTAB         0xF5\n#define VK_ATTN                0xF6\n#define VK_CRSEL               0xF7\n#define VK_EXSEL               0xF8\n#define VK_EREOF               0xF9\n#define VK_PLAY                0xFA\n#define VK_ZOOM                0xFB\n#define VK_NONAME              0xFC\n#define VK_PA1                 0xFD\n#define VK_OEM_CLEAR           0xFE\n/*                             0xFF       Unassigned */\n\n\n/*** Messages ***/\n#ifndef NOWINMESSAGES\n#define WM_NULL                0x0000\n#define WM_CREATE              0x0001\n#define WM_DESTROY             0x0002\n#define WM_MOVE                0x0003\n#define WM_SIZEWAIT            0x0004 /* DDK / Win16 */\n#define WM_SIZE                0x0005\n#define WM_ACTIVATE            0x0006\n\n/* WM_ACTIVATE wParam values */\n#define WA_INACTIVE            0\n#define WA_ACTIVE              1\n#define WA_CLICKACTIVE         2\n\n#define WM_SETFOCUS            0x0007\n#define WM_KILLFOCUS           0x0008\n#define WM_SETVISIBLE          0x0009 /* DDK / Win16 */\n#define WM_ENABLE              0x000a\n#define WM_SETREDRAW           0x000b\n#define WM_SETTEXT             0x000c\n#define WM_GETTEXT             0x000d\n#define WM_GETTEXTLENGTH       0x000e\n#define WM_PAINT               0x000f\n#define WM_CLOSE               0x0010\n#define WM_QUERYENDSESSION     0x0011\n#define WM_QUIT                0x0012\n#define WM_QUERYOPEN           0x0013\n#define WM_ERASEBKGND          0x0014\n#define WM_SYSCOLORCHANGE      0x0015\n#define WM_ENDSESSION          0x0016\n#define WM_SYSTEMERROR         0x0017 /* DDK / Win16 */\n#define WM_SHOWWINDOW          0x0018\n#define WM_CTLCOLOR            0x0019 /* Added from windowsx.h */\n#define WM_WININICHANGE        0x001a\n#define WM_SETTINGCHANGE       WM_WININICHANGE\n#define WM_DEVMODECHANGE       0x001b\n#define WM_ACTIVATEAPP         0x001c\n#define WM_FONTCHANGE          0x001d\n#define WM_TIMECHANGE          0x001e\n#define WM_CANCELMODE          0x001f\n#define WM_SETCURSOR           0x0020\n#define WM_MOUSEACTIVATE       0x0021\n#define WM_CHILDACTIVATE       0x0022\n#define WM_QUEUESYNC           0x0023\n#define WM_GETMINMAXINFO       0x0024\n\n#define WM_PAINTICON           0x0026\n#define WM_ICONERASEBKGND      0x0027\n#define WM_NEXTDLGCTL          0x0028\n#define WM_ALTTABACTIVE        0x0029 /* DDK / Win16 */\n#define WM_SPOOLERSTATUS       0x002a\n#define WM_DRAWITEM            0x002b\n#define WM_MEASUREITEM         0x002c\n#define WM_DELETEITEM          0x002d\n#define WM_VKEYTOITEM          0x002e\n#define WM_CHARTOITEM          0x002f\n#define WM_SETFONT             0x0030\n#define WM_GETFONT             0x0031\n#define WM_SETHOTKEY           0x0032\n#define WM_GETHOTKEY           0x0033\n#define WM_FILESYSCHANGE       0x0034 /* DDK / Win16 */\n#define WM_ISACTIVEICON        0x0035 /* DDK / Win16 */\n#define WM_QUERYPARKICON       0x0036 /* Undocumented */\n#define WM_QUERYDRAGICON       0x0037\n#define WM_QUERYSAVESTATE      0x0038 /* Undocumented */\n#define WM_COMPAREITEM         0x0039\n#define WM_TESTING             0x003a /* DDK / Win16 */\n\n#define WM_GETOBJECT           0x003d\n\n#define WM_ACTIVATESHELLWINDOW 0x003e /* FIXME: Wine-only */\n\n#define WM_COMPACTING          0x0041\n\n#define WM_COMMNOTIFY          0x0044\n#define WM_WINDOWPOSCHANGING   0x0046\n#define WM_WINDOWPOSCHANGED    0x0047\n\n#define WM_POWER               0x0048\n\n/* For WM_POWER */\n#define PWR_OK                 1\n#define PWR_FAIL               (-1)\n#define PWR_SUSPENDREQUEST     1\n#define PWR_SUSPENDRESUME      2\n#define PWR_CRITICALRESUME     3\n\n/* Win32 4.0 messages */\n#define WM_COPYDATA            0x004a\n#define WM_CANCELJOURNAL       0x004b\n#define WM_KEYF1               0x004d /* DDK / Win16 */\n#define WM_NOTIFY              0x004e\n#define WM_INPUTLANGCHANGEREQUEST 0x0050\n#define WM_INPUTLANGCHANGE     0x0051\n#define WM_TCARD               0x0052\n#define WM_HELP                0x0053\n#define WM_USERCHANGED         0x0054\n#define WM_NOTIFYFORMAT        0x0055\n\n/* WM_NOTIFYFORMAT commands and return values */\n#define NFR_ANSI               1\n#define NFR_UNICODE            2\n#define NF_QUERY               3\n#define NF_REQUERY             4\n\n#define WM_CONTEXTMENU         0x007b\n#define WM_STYLECHANGING       0x007c\n#define WM_STYLECHANGED        0x007d\n#define WM_DISPLAYCHANGE       0x007e\n#define WM_GETICON             0x007f\n#define WM_SETICON             0x0080\n\n/* Non-client system messages */\n#define WM_NCCREATE            0x0081\n#define WM_NCDESTROY           0x0082\n#define WM_NCCALCSIZE          0x0083\n#define WM_NCHITTEST           0x0084\n#define WM_NCPAINT             0x0085\n#define WM_NCACTIVATE          0x0086\n\n#define WM_GETDLGCODE          0x0087\n#define WM_SYNCPAINT           0x0088\n#define WM_SYNCTASK            0x0089 /* DDK / Win16 */\n\n/* Non-client mouse messages */\n#define WM_NCMOUSEMOVE         0x00a0\n#define WM_NCLBUTTONDOWN       0x00a1\n#define WM_NCLBUTTONUP         0x00a2\n#define WM_NCLBUTTONDBLCLK     0x00a3\n#define WM_NCRBUTTONDOWN       0x00a4\n#define WM_NCRBUTTONUP         0x00a5\n#define WM_NCRBUTTONDBLCLK     0x00a6\n#define WM_NCMBUTTONDOWN       0x00a7\n#define WM_NCMBUTTONUP         0x00a8\n#define WM_NCMBUTTONDBLCLK     0x00a9\n\n#define WM_NCXBUTTONDOWN       0x00ab\n#define WM_NCXBUTTONUP         0x00ac\n#define WM_NCXBUTTONDBLCLK     0x00ad\n\n/* Raw input */\n#define WM_INPUT_DEVICE_CHANGE 0x00fe\n#define WM_INPUT               0x00ff\n\n/* Keyboard messages */\n#define WM_KEYFIRST            0x0100\n#define WM_KEYDOWN             WM_KEYFIRST\n#define WM_KEYUP               0x0101\n#define WM_CHAR                0x0102\n#define WM_DEADCHAR            0x0103\n#define WM_SYSKEYDOWN          0x0104\n#define WM_SYSKEYUP            0x0105\n#define WM_SYSCHAR             0x0106\n#define WM_SYSDEADCHAR         0x0107\n#define WM_UNICHAR             0x0109\n#define WM_KEYLAST             WM_UNICHAR\n\n#define UNICODE_NOCHAR         0xffff\n\n/* Win32 4.0 messages for IME */\n#define WM_IME_STARTCOMPOSITION 0x010d\n#define WM_IME_ENDCOMPOSITION  0x010e\n#define WM_IME_COMPOSITION     0x010f\n#define WM_IME_KEYLAST         0x010f\n\n#define WM_INITDIALOG          0x0110\n#define WM_COMMAND             0x0111\n#define WM_SYSCOMMAND          0x0112\n#define WM_TIMER               0x0113\n\n/* Scroll messages */\n#define WM_HSCROLL             0x0114\n#define WM_VSCROLL             0x0115\n\n/* Menu messages */\n#define WM_INITMENU            0x0116\n#define WM_INITMENUPOPUP       0x0117\n#define WM_GESTURE             0x0119\n#define WM_GESTURENOTIFY       0x011A\n\n#define WM_MENUSELECT          0x011F\n#define WM_MENUCHAR            0x0120\n#define WM_ENTERIDLE           0x0121\n\n#define WM_MENURBUTTONUP       0x0122\n#define WM_MENUDRAG            0x0123\n#define WM_MENUGETOBJECT       0x0124\n#define WM_UNINITMENUPOPUP     0x0125\n#define WM_MENUCOMMAND         0x0126\n\n#define WM_CHANGEUISTATE       0x0127\n#define WM_UPDATEUISTATE       0x0128\n#define WM_QUERYUISTATE        0x0129\n\n/* UI flags for WM_*UISTATE */\n/* for low-order word of wparam */\n#define UIS_SET                1\n#define UIS_CLEAR              2\n#define UIS_INITIALIZE         3\n/* for hi-order word of wparam */\n#define UISF_HIDEFOCUS         0x1\n#define UISF_HIDEACCEL         0x2\n#define UISF_ACTIVE            0x4\n\n#define WM_LBTRACKPOINT        0x0131 /* DDK / Win16 */\n\n/* Win32 CTLCOLOR messages */\n#define WM_CTLCOLORMSGBOX      0x0132\n#define WM_CTLCOLOREDIT        0x0133\n#define WM_CTLCOLORLISTBOX     0x0134\n#define WM_CTLCOLORBTN         0x0135\n#define WM_CTLCOLORDLG         0x0136\n#define WM_CTLCOLORSCROLLBAR   0x0137\n#define WM_CTLCOLORSTATIC      0x0138\n\n#define MN_GETHMENU            0x01E1\n\n/* Mouse messages */\n#define WM_MOUSEFIRST          0x0200\n#define WM_MOUSEMOVE           WM_MOUSEFIRST\n#define WM_LBUTTONDOWN         0x0201\n#define WM_LBUTTONUP           0x0202\n#define WM_LBUTTONDBLCLK       0x0203\n#define WM_RBUTTONDOWN         0x0204\n#define WM_RBUTTONUP           0x0205\n#define WM_RBUTTONDBLCLK       0x0206\n#define WM_MBUTTONDOWN         0x0207\n#define WM_MBUTTONUP           0x0208\n#define WM_MBUTTONDBLCLK       0x0209\n#define WM_MOUSEWHEEL          0x020A\n#define WM_XBUTTONDOWN         0x020B\n#define WM_XBUTTONUP           0x020C\n#define WM_XBUTTONDBLCLK       0x020D\n#define WM_MOUSEHWHEEL         0x020E\n#define WM_MOUSELAST           WM_MOUSEHWHEEL\n\n/* Macros for the mouse messages */\n#define WHEEL_DELTA            120\n#define GET_WHEEL_DELTA_WPARAM(wParam) ((short)HIWORD(wParam))\n#define WHEEL_PAGESCROLL       (UINT_MAX)\n\n#define GET_KEYSTATE_WPARAM(wParam)     (LOWORD(wParam))\n#define GET_NCHITTEST_WPARAM(wParam)    ((short)LOWORD(wParam))\n#define GET_XBUTTON_WPARAM(wParam)      (HIWORD(wParam))\n#define XBUTTON1               0x0001\n#define XBUTTON2               0x0002\n\n#define WM_PARENTNOTIFY        0x0210\n#define WM_ENTERMENULOOP       0x0211\n#define WM_EXITMENULOOP        0x0212\n#define WM_NEXTMENU            0x0213\n\n/* Win32 4.0 messages */\n#define WM_SIZING              0x0214\n#define WM_CAPTURECHANGED      0x0215\n#define WM_MOVING              0x0216\n#define WM_POWERBROADCAST      0x0218\n#define WM_DEVICECHANGE        0x0219\n/* MDI messages */\n#define WM_MDICREATE           0x0220\n#define WM_MDIDESTROY          0x0221\n#define WM_MDIACTIVATE         0x0222\n#define WM_MDIRESTORE          0x0223\n#define WM_MDINEXT             0x0224\n#define WM_MDIMAXIMIZE         0x0225\n#define WM_MDITILE             0x0226\n#define WM_MDICASCADE          0x0227\n#define WM_MDIICONARRANGE      0x0228\n#define WM_MDIGETACTIVE        0x0229\n\n/* D&D messages */\n#define WM_DROPOBJECT          0x022A /* DDK / Win16 */\n#define WM_QUERYDROPOBJECT     0x022B /* DDK / Win16 */\n#define WM_BEGINDRAG           0x022C /* DDK / Win16 */\n#define WM_DRAGLOOP            0x022D /* DDK / Win16 */\n#define WM_DRAGSELECT          0x022E /* DDK / Win16 */\n#define WM_DRAGMOVE            0x022F /* DDK / Win16 */\n\n#define WM_MDISETMENU          0x0230\n#define WM_ENTERSIZEMOVE       0x0231\n#define WM_EXITSIZEMOVE        0x0232\n#define WM_DROPFILES           0x0233\n#define WM_MDIREFRESHMENU      0x0234\n\n#define WM_POINTERDEVICECHANGE     0x0238\n#define WM_POINTERDEVICEINRANGE    0x0239\n#define WM_POINTERDEVICEOUTOFRANGE 0x023a\n\n#define WM_TOUCH               0x0240\n#define WM_NCPOINTERUPDATE     0x0241\n#define WM_NCPOINTERDOWN       0x0242\n#define WM_NCPOINTERUP         0x0243\n#define WM_POINTERUPDATE       0x0245\n#define WM_POINTERDOWN         0x0246\n#define WM_POINTERUP           0x0247\n#define WM_POINTERENTER        0x0249\n#define WM_POINTERLEAVE        0x024a\n#define WM_POINTERACTIVATE     0x024b\n#define WM_POINTERCAPTURECHANGED 0x024c\n#define WM_TOUCHHITTESTING     0x024d\n#define WM_POINTERWHEEL        0x024e\n#define WM_POINTERHWHEEL       0x024f\n\n#define WM_POINTERROUTEDTO     0x0251\n#define WM_POINTERROUTEDAWAY   0x0252\n#define WM_POINTERROUTEDRELEASED 0x0253\n\n/* Win32 4.0 messages for IME */\n#define WM_IME_SETCONTEXT      0x0281\n#define WM_IME_NOTIFY          0x0282\n#define WM_IME_CONTROL         0x0283\n#define WM_IME_COMPOSITIONFULL 0x0284\n#define WM_IME_SELECT          0x0285\n#define WM_IME_CHAR            0x0286\n/* Win32 5.0 messages for IME */\n#define WM_IME_REQUEST         0x0288\n\n/* Win32 4.0 messages for IME */\n#define WM_IME_KEYDOWN         0x0290\n#define WM_IME_KEYUP           0x0291\n\n#define WM_NCMOUSEHOVER        0x02A0\n#define WM_MOUSEHOVER          0x02A1\n#define WM_MOUSELEAVE          0x02A3\n#define WM_NCMOUSELEAVE        0x02A2\n\n#define WM_WTSSESSION_CHANGE   0x02B1\n\n#define WM_TABLET_FIRST        0x02c0\n#define WM_TABLET_LAST         0x02df\n\n#define WM_DPICHANGED          0x02e0\n#define WM_DPICHANGED_BEFOREPARENT 0x02e2\n#define WM_DPICHANGED_AFTERPARENT  0x02e3\n#define WM_GETDPISCALEDSIZE    0x02e4\n\n/* Clipboard command messages */\n#define WM_CUT                 0x0300\n#define WM_COPY                0x0301\n#define WM_PASTE               0x0302\n#define WM_CLEAR               0x0303\n#define WM_UNDO                0x0304\n\n/* Clipboard owner messages */\n#define WM_RENDERFORMAT        0x0305\n#define WM_RENDERALLFORMATS    0x0306\n#define WM_DESTROYCLIPBOARD    0x0307\n\n/* Clipboard viewer messages */\n#define WM_DRAWCLIPBOARD       0x0308\n#define WM_PAINTCLIPBOARD      0x0309\n#define WM_VSCROLLCLIPBOARD    0x030A\n#define WM_SIZECLIPBOARD       0x030B\n#define WM_ASKCBFORMATNAME     0x030C\n#define WM_CHANGECBCHAIN       0x030D\n#define WM_HSCROLLCLIPBOARD    0x030E\n\n#define WM_QUERYNEWPALETTE     0x030F\n#define WM_PALETTEISCHANGING   0x0310\n#define WM_PALETTECHANGED      0x0311\n#define WM_HOTKEY              0x0312\n\n#define WM_PRINT               0x0317\n#define WM_PRINTCLIENT         0x0318\n#define WM_APPCOMMAND          0x0319\n#define WM_THEMECHANGED        0x031A\n#define WM_CLIPBOARDUPDATE     0x031D\n\n#define WM_DWMCOMPOSITIONCHANGED 0x031E\n#define WM_DWMNCRENDERINGCHANGED 0x031F\n#define WM_DWMCOLORIZATIONCOLORCHANGED 0x0320\n#define WM_DWMWINDOWMAXIMIZEDCHANGE 0x0321\n#define WM_DWMSENDICONICTHUMBNAIL 0x0323\n#define WM_DWMSENDICONICLIVEPREVIEWBITMAP 0x0326\n\n#define WM_GETTITLEBARINFOEX   0x033F\n\n#define WM_HANDHELDFIRST       0x0358\n#define WM_HANDHELDLAST        0x035F\n\n#define WM_AFXFIRST            0x0360\n#define WM_AFXLAST             0x037F\n\n#define WM_PENWINFIRST         0x0380\n#define WM_PENWINLAST          0x038F\n\n#define WM_USER                0x0400\n\n#define WM_APP                 0x8000\n\n\n/* wParam for WM_SIZING message */\n#define WMSZ_LEFT              1\n#define WMSZ_RIGHT             2\n#define WMSZ_TOP               3\n#define WMSZ_TOPLEFT           4\n#define WMSZ_TOPRIGHT          5\n#define WMSZ_BOTTOM            6\n#define WMSZ_BOTTOMLEFT        7\n#define WMSZ_BOTTOMRIGHT       8\n\n/* WM_NCHITTEST return codes */\n#define HTERROR                (-2)\n#define HTTRANSPARENT          (-1)\n#define HTNOWHERE              0\n#define HTCLIENT               1\n#define HTCAPTION              2\n#define HTSYSMENU              3\n#define HTSIZE                 4\n#define HTGROWBOX              HTSIZE\n#define HTMENU                 5\n#define HTHSCROLL              6\n#define HTVSCROLL              7\n#define HTMINBUTTON            8\n#define HTREDUCE               HTMINBUTTON\n#define HTMAXBUTTON            9\n#define HTZOOM                 HTMAXBUTTON\n#define HTLEFT                 10\n#define HTSIZEFIRST            HTLEFT\n#define HTRIGHT                11\n#define HTTOP                  12\n#define HTTOPLEFT              13\n#define HTTOPRIGHT             14\n#define HTBOTTOM               15\n#define HTBOTTOMLEFT           16\n#define HTBOTTOMRIGHT          17\n#define HTSIZELAST             HTBOTTOMRIGHT\n#define HTBORDER               18\n#define HTOBJECT               19\n#define HTCLOSE                20\n#define HTHELP                 21\n\n/* SendMessageTimeout flags */\n#define SMTO_NORMAL            0x0000\n#define SMTO_BLOCK             0x0001\n#define SMTO_ABORTIFHUNG       0x0002\n#define SMTO_NOTIMEOUTIFNOTHUNG 0x0008\n#define SMTO_ERRORONEXIT       0x0020\n\n/* WM_MOUSEACTIVATE return values */\n#define MA_ACTIVATE            1\n#define MA_ACTIVATEANDEAT      2\n#define MA_NOACTIVATE          3\n#define MA_NOACTIVATEANDEAT    4\n\n/* WM_GETICON/WM_SETICON params values */\n#define ICON_SMALL             0\n#define ICON_BIG               1\n#define ICON_SMALL2            2\n\n/* WM_SIZE message wParam values */\n#define SIZE_RESTORED          0\n#define SIZE_MINIMIZED         1\n#define SIZE_MAXIMIZED         2\n#define SIZE_MAXSHOW           3\n#define SIZE_MAXHIDE           4\n#define SIZENORMAL             SIZE_RESTORED\n#define SIZEICONIC             SIZE_MINIMIZED\n#define SIZEFULLSCREEN         SIZE_MAXIMIZED\n#define SIZEZOOMSHOW           SIZE_MAXSHOW\n#define SIZEZOOMHIDE           SIZE_MAXHIDE\n\n/* WM_NCCALCSIZE return flags */\n#define WVR_ALIGNTOP           0x0010\n#define WVR_ALIGNLEFT          0x0020\n#define WVR_ALIGNBOTTOM        0x0040\n#define WVR_ALIGNRIGHT         0x0080\n#define WVR_HREDRAW            0x0100\n#define WVR_VREDRAW            0x0200\n#define WVR_REDRAW             (WVR_HREDRAW | WVR_VREDRAW)\n#define WVR_VALIDRECTS         0x0400\n\n/* Key status flags for mouse events */\n#ifndef NOKEYSTATES\n#define MK_LBUTTON             0x0001\n#define MK_RBUTTON             0x0002\n#define MK_SHIFT               0x0004\n#define MK_CONTROL             0x0008\n#define MK_MBUTTON             0x0010\n#define MK_XBUTTON1            0x0020\n#define MK_XBUTTON2            0x0040\n#endif /* NOKEYSTATES */\n\n#ifndef NOTRACKMOUSEEVENT\n#define TME_HOVER              0x00000001\n#define TME_LEAVE              0x00000002\n#define TME_NONCLIENT          0x00000010\n#define TME_QUERY              0x40000000\n#define TME_CANCEL             0x80000000\n#define HOVER_DEFAULT          0xFFFFFFFF\n#endif /* NOTRACKMOUSEEVENT */\n\n#endif /* NOWINMESSAGES */\n\n\n/*** Window Styles ***/\n#ifndef NOWINSTYLES\n#define WS_OVERLAPPED          __MSABI_LONG(0x00000000)\n#define WS_POPUP               __MSABI_LONG(0x80000000)\n#define WS_CHILD               __MSABI_LONG(0x40000000)\n#define WS_MINIMIZE            __MSABI_LONG(0x20000000)\n#define WS_VISIBLE             __MSABI_LONG(0x10000000)\n#define WS_DISABLED            __MSABI_LONG(0x08000000)\n#define WS_CLIPSIBLINGS        __MSABI_LONG(0x04000000)\n#define WS_CLIPCHILDREN        __MSABI_LONG(0x02000000)\n#define WS_MAXIMIZE            __MSABI_LONG(0x01000000)\n#define WS_BORDER              __MSABI_LONG(0x00800000)\n#define WS_DLGFRAME            __MSABI_LONG(0x00400000)\n#define WS_VSCROLL             __MSABI_LONG(0x00200000)\n#define WS_HSCROLL             __MSABI_LONG(0x00100000)\n#define WS_SYSMENU             __MSABI_LONG(0x00080000)\n#define WS_THICKFRAME          __MSABI_LONG(0x00040000)\n#define WS_GROUP               __MSABI_LONG(0x00020000)\n#define WS_TABSTOP             __MSABI_LONG(0x00010000)\n#define WS_MINIMIZEBOX         __MSABI_LONG(0x00020000)\n#define WS_MAXIMIZEBOX         __MSABI_LONG(0x00010000)\n#define WS_CAPTION             (WS_BORDER | WS_DLGFRAME)\n#define WS_TILED               WS_OVERLAPPED\n#define WS_ICONIC              WS_MINIMIZE\n#define WS_SIZEBOX             WS_THICKFRAME\n#define WS_OVERLAPPEDWINDOW    (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME| WS_MINIMIZEBOX | WS_MAXIMIZEBOX)\n#define WS_POPUPWINDOW         (WS_POPUP | WS_BORDER | WS_SYSMENU)\n#define WS_CHILDWINDOW         WS_CHILD\n#define WS_TILEDWINDOW         WS_OVERLAPPEDWINDOW\n#endif /* NOWINSTYLES */\n\n\n/*** Window extended styles ***/\n#ifndef NOWINSTYLES\n#define WS_EX_DLGMODALFRAME    __MSABI_LONG(0x00000001)\n#define WS_EX_DRAGDETECT       __MSABI_LONG(0x00000002) /* Undocumented */\n#define WS_EX_NOPARENTNOTIFY   __MSABI_LONG(0x00000004)\n#define WS_EX_TOPMOST          __MSABI_LONG(0x00000008)\n#define WS_EX_ACCEPTFILES      __MSABI_LONG(0x00000010)\n#define WS_EX_TRANSPARENT      __MSABI_LONG(0x00000020)\n#define WS_EX_MDICHILD         __MSABI_LONG(0x00000040)\n#define WS_EX_TOOLWINDOW       __MSABI_LONG(0x00000080)\n#define WS_EX_WINDOWEDGE       __MSABI_LONG(0x00000100)\n#define WS_EX_CLIENTEDGE       __MSABI_LONG(0x00000200)\n#define WS_EX_CONTEXTHELP      __MSABI_LONG(0x00000400)\n#define WS_EX_RIGHT            __MSABI_LONG(0x00001000)\n#define WS_EX_LEFT             __MSABI_LONG(0x00000000)\n#define WS_EX_RTLREADING       __MSABI_LONG(0x00002000)\n#define WS_EX_LTRREADING       __MSABI_LONG(0x00000000)\n#define WS_EX_LEFTSCROLLBAR    __MSABI_LONG(0x00004000)\n#define WS_EX_RIGHTSCROLLBAR   __MSABI_LONG(0x00000000)\n#define WS_EX_CONTROLPARENT    __MSABI_LONG(0x00010000)\n#define WS_EX_STATICEDGE       __MSABI_LONG(0x00020000)\n#define WS_EX_APPWINDOW        __MSABI_LONG(0x00040000)\n#define WS_EX_LAYERED          __MSABI_LONG(0x00080000)\n#define WS_EX_NOINHERITLAYOUT  __MSABI_LONG(0x00100000)\n#define WS_EX_LAYOUTRTL        __MSABI_LONG(0x00400000)\n#define WS_EX_COMPOSITED       __MSABI_LONG(0x02000000)\n#define WS_EX_NOACTIVATE       __MSABI_LONG(0x08000000)\n\n#define WS_EX_OVERLAPPEDWINDOW (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE)\n#define WS_EX_PALETTEWINDOW    (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST)\n#endif /* NOWINSTYLES */\n\n\n/*** Class styles ***/\n#ifndef NOWINSTYLES\n#define CS_VREDRAW             0x00000001\n#define CS_HREDRAW             0x00000002\n#define CS_KEYCVTWINDOW        0x00000004 /* DDK / Win16 */\n#define CS_DBLCLKS             0x00000008\n#define CS_OWNDC               0x00000020\n#define CS_CLASSDC             0x00000040\n#define CS_PARENTDC            0x00000080\n#define CS_NOKEYCVT            0x00000100 /* DDK / Win16 */\n#define CS_NOCLOSE             0x00000200\n#define CS_SAVEBITS            0x00000800\n#define CS_BYTEALIGNCLIENT     0x00001000\n#define CS_BYTEALIGNWINDOW     0x00002000\n#define CS_GLOBALCLASS         0x00004000\n#define CS_IME                 0x00010000\n#define CS_DROPSHADOW          0x00020000\n#endif /* NOWINSTYLES */\n\n\n/*** Predefined Clipboard Formats ***/\n#ifndef NOCLIPBOARD\n#define CF_TEXT                1\n#define CF_BITMAP              2\n#define CF_METAFILEPICT        3\n#define CF_SYLK                4\n#define CF_DIF                 5\n#define CF_TIFF                6\n#define CF_OEMTEXT             7\n#define CF_DIB                 8\n#define CF_PALETTE             9\n#define CF_PENDATA             10\n#define CF_RIFF                11\n#define CF_WAVE                12\n#define CF_UNICODETEXT         13\n#define CF_ENHMETAFILE         14\n#define CF_HDROP               15\n#define CF_LOCALE              16\n#define CF_DIBV5               17\n#define CF_MAX                 18\n\n#define CF_OWNERDISPLAY        0x0080\n#define CF_DSPTEXT             0x0081\n#define CF_DSPBITMAP           0x0082\n#define CF_DSPMETAFILEPICT     0x0083\n#define CF_DSPENHMETAFILE      0x008E\n\n/* \"Private\" formats don't get GlobalFree()'d */\n#define CF_PRIVATEFIRST        0x0200\n#define CF_PRIVATELAST         0x02FF\n\n/* \"GDIOBJ\" formats do get DeleteObject()'d */\n#define CF_GDIOBJFIRST         0x0300\n#define CF_GDIOBJLAST          0x03FF\n#endif /* NOCLIPBOARD */\n\n\n/*** Menu flags ***/\n#ifndef NOMENUS\n#define MF_INSERT              __MSABI_LONG(0x00000000)\n#define MF_CHANGE              __MSABI_LONG(0x00000080)\n#define MF_APPEND              __MSABI_LONG(0x00000100)\n#define MF_DELETE              __MSABI_LONG(0x00000200)\n#define MF_REMOVE              __MSABI_LONG(0x00001000)\n#define MF_END                 __MSABI_LONG(0x00000080)\n\n#define MF_ENABLED             __MSABI_LONG(0x00000000)\n#define MF_GRAYED              __MSABI_LONG(0x00000001)\n#define MF_DISABLED            __MSABI_LONG(0x00000002)\n#define MF_STRING              __MSABI_LONG(0x00000000)\n#define MF_BITMAP              __MSABI_LONG(0x00000004)\n#define MF_UNCHECKED           __MSABI_LONG(0x00000000)\n#define MF_CHECKED             __MSABI_LONG(0x00000008)\n#define MF_POPUP               __MSABI_LONG(0x00000010)\n#define MF_MENUBARBREAK        __MSABI_LONG(0x00000020)\n#define MF_MENUBREAK           __MSABI_LONG(0x00000040)\n#define MF_UNHILITE            __MSABI_LONG(0x00000000)\n#define MF_HILITE              __MSABI_LONG(0x00000080)\n#define MF_OWNERDRAW           __MSABI_LONG(0x00000100)\n#define MF_USECHECKBITMAPS     __MSABI_LONG(0x00000200)\n#define MF_BYCOMMAND           __MSABI_LONG(0x00000000)\n#define MF_BYPOSITION          __MSABI_LONG(0x00000400)\n#define MF_SEPARATOR           __MSABI_LONG(0x00000800)\n#define MF_DEFAULT             __MSABI_LONG(0x00001000)\n#define MF_SYSMENU             __MSABI_LONG(0x00002000)\n#define MF_HELP                __MSABI_LONG(0x00004000)\n#define MF_RIGHTJUSTIFY        __MSABI_LONG(0x00004000)\n#define MF_MOUSESELECT         __MSABI_LONG(0x00008000)\n\n/* Flags for extended menu item types */\n#define MFT_STRING             MF_STRING\n#define MFT_BITMAP             MF_BITMAP\n#define MFT_MENUBARBREAK       MF_MENUBARBREAK\n#define MFT_MENUBREAK          MF_MENUBREAK\n#define MFT_OWNERDRAW          MF_OWNERDRAW\n#define MFT_RADIOCHECK         __MSABI_LONG(0x00000200)\n#define MFT_SEPARATOR          MF_SEPARATOR\n#define MFT_RIGHTORDER         __MSABI_LONG(0x00002000)\n#define MFT_RIGHTJUSTIFY       MF_RIGHTJUSTIFY\n\n/* Flags for extended menu item states */\n#define MFS_GRAYED             __MSABI_LONG(0x00000003)\n#define MFS_DISABLED           MFS_GRAYED\n#define MFS_CHECKED            MF_CHECKED\n#define MFS_HILITE             MF_HILITE\n#define MFS_ENABLED            MF_ENABLED\n#define MFS_UNCHECKED          MF_UNCHECKED\n#define MFS_UNHILITE           MF_UNHILITE\n#define MFS_DEFAULT            MF_DEFAULT\n\n/* DDK / Win16 defines */\n#define MFS_MASK               __MSABI_LONG(0x0000108B)\n#define MFS_HOTTRACKDRAWN      __MSABI_LONG(0x10000000)\n#define MFS_CACHEDBMP          __MSABI_LONG(0x20000000)\n#define MFS_BOTTOMGAPDROP      __MSABI_LONG(0x40000000)\n#define MFS_TOPGAPDROP         __MSABI_LONG(0x80000000)\n#define MFS_GAPDROP            (MFS_BOTTOMGAPDROP | MFS_TOPGAPDROP)\n#endif /* NOMENUS */\n\n\n/*** WM_SYSCOMMAND parameters ***/\n#ifndef NOSYSCOMMANDS\n/* At least HP-UX defines it in /usr/include/sys/signal.h */\n# ifdef SC_SIZE\n#  undef SC_SIZE\n# endif\n#define SC_SIZE                0xf000\n#define SC_MOVE                0xf010\n#define SC_MINIMIZE            0xf020\n#define SC_MAXIMIZE            0xf030\n#define SC_NEXTWINDOW          0xf040\n#define SC_PREVWINDOW          0xf050\n#define SC_CLOSE               0xf060\n#define SC_VSCROLL             0xf070\n#define SC_HSCROLL             0xf080\n#define SC_MOUSEMENU           0xf090\n#define SC_KEYMENU             0xf100\n#define SC_ARRANGE             0xf110\n#define SC_RESTORE             0xf120\n#define SC_TASKLIST            0xf130\n#define SC_SCREENSAVE          0xf140\n#define SC_HOTKEY              0xf150\n\n/* Win32 4.0 */\n#define SC_DEFAULT             0xf160\n#define SC_MONITORPOWER        0xf170\n#define SC_CONTEXTHELP         0xf180\n#define SC_SEPARATOR           0xf00f\n\n#define GET_SC_WPARAM(wParam)  ((int)wParam & 0xfff0)\n#define SCF_ISSECURE           0x0001\n\n/* Obsolete names */\n#define SC_ICON               SC_MINIMIZE\n#define SC_ZOOM               SC_MAXIMIZE\n#endif /* NOSYSCOMMANDS */\n\n\n/*** OEM Resource Ordinal Numbers ***/\n#ifdef OEMRESOURCE\n#define OBM_RDRVERT            32559\n#define OBM_RDRHORZ            32660\n#define OBM_RDR2DIM            32661\n#define OBM_TRTYPE             32732 /* FIXME: Wine-only */\n#define OBM_LFARROWI           32734\n#define OBM_RGARROWI           32735\n#define OBM_DNARROWI           32736\n#define OBM_UPARROWI           32737\n#define OBM_COMBO              32738\n#define OBM_MNARROW            32739\n#define OBM_LFARROWD           32740\n#define OBM_RGARROWD           32741\n#define OBM_DNARROWD           32742\n#define OBM_UPARROWD           32743\n#define OBM_RESTORED           32744\n#define OBM_ZOOMD              32745\n#define OBM_REDUCED            32746\n#define OBM_RESTORE            32747\n#define OBM_ZOOM               32748\n#define OBM_REDUCE             32749\n#define OBM_LFARROW            32750\n#define OBM_RGARROW            32751\n#define OBM_DNARROW            32752\n#define OBM_UPARROW            32753\n#define OBM_CLOSE              32754\n#define OBM_OLD_RESTORE        32755\n#define OBM_OLD_ZOOM           32756\n#define OBM_OLD_REDUCE         32757\n#define OBM_BTNCORNERS         32758\n#define OBM_CHECKBOXES         32759\n#define OBM_CHECK              32760\n#define OBM_BTSIZE             32761\n#define OBM_OLD_LFARROW        32762\n#define OBM_OLD_RGARROW        32763\n#define OBM_OLD_DNARROW        32764\n#define OBM_OLD_UPARROW        32765\n#define OBM_SIZE               32766\n#define OBM_OLD_CLOSE          32767\n\n#define OCR_NORMAL             32512\n#define OCR_IBEAM              32513\n#define OCR_WAIT               32514\n#define OCR_CROSS              32515\n#define OCR_UP                 32516\n#define OCR_PEN                32631\n#define OCR_SIZE               32640\n#define OCR_ICON               32641\n#define OCR_SIZENWSE           32642\n#define OCR_SIZENESW           32643\n#define OCR_SIZEWE             32644\n#define OCR_SIZENS             32645\n#define OCR_SIZEALL            32646\n#define OCR_ICOCUR             32647\n#define OCR_NO                 32648\n#define OCR_HAND               32649\n#define OCR_APPSTARTING        32650\n#define OCR_HELP               32651 /* DDK / Win16 */\n#define OCR_RDRVERT            32652 /* DDK / Win16 */\n#define OCR_RDRHORZ            32653 /* DDK / Win16 */\n#define OCR_RDR2DIM            32654 /* DDK / Win16 */\n#define OCR_RDRNORTH           32655 /* DDK / Win16 */\n#define OCR_RDRSOUTH           32656 /* DDK / Win16 */\n#define OCR_RDRWEST            32657 /* DDK / Win16 */\n#define OCR_RDREAST            32658 /* DDK / Win16 */\n#define OCR_RDRNORTHWEST       32659 /* DDK / Win16 */\n#define OCR_RDRNORTHEAST       32660 /* DDK / Win16 */\n#define OCR_RDRSOUTHWEST       32661 /* DDK / Win16 */\n#define OCR_RDRSOUTHEAST       32662 /* DDK / Win16 */\n\n#define OIC_SAMPLE             32512\n#define OIC_HAND               32513\n#define OIC_ERROR              OIC_HAND\n#define OIC_QUES               32514\n#define OIC_BANG               32515\n#define OIC_WARNING            OIC_BANG\n#define OIC_NOTE               32516\n#define OIC_INFORMATION        OIC_NOTE\n#define OIC_WINLOGO            32517\n#define OIC_SHIELD             32518\n#endif /* OEMRESOURCE */\n\n\n/*** Predefined resources ***/\n#ifndef NOICONS\n#define IDI_APPLICATION        MAKEINTRESOURCE(32512)\n#define IDI_HAND               MAKEINTRESOURCE(32513)\n#define IDI_QUESTION           MAKEINTRESOURCE(32514)\n#define IDI_EXCLAMATION        MAKEINTRESOURCE(32515)\n#define IDI_ASTERISK           MAKEINTRESOURCE(32516)\n#define IDI_WINLOGO            MAKEINTRESOURCE(32517)\n#define IDI_SHIELD             MAKEINTRESOURCE(32518)\n\n#define IDI_WARNING            IDI_EXCLAMATION\n#define IDI_ERROR              IDI_HAND\n#define IDI_INFORMATION        IDI_ASTERISK\n#endif /* NOICONS */\n\n\n/*** Standard dialog button IDs ***/\n#define IDOK                   1\n#define IDCANCEL               2\n#define IDABORT                3\n#define IDRETRY                4\n#define IDIGNORE               5\n#define IDYES                  6\n#define IDNO                   7\n#define IDCLOSE                8\n#define IDHELP                 9\n#define IDTRYAGAIN             10\n#define IDCONTINUE             11\n#ifndef IDTIMEOUT\n#define IDTIMEOUT              32000\n#endif\n\n\n/*** Edit control styles ***/\n#ifndef NOWINSTYLES\n#define ES_LEFT                __MSABI_LONG(0x00000000)\n#define ES_CENTER              __MSABI_LONG(0x00000001)\n#define ES_RIGHT               __MSABI_LONG(0x00000002)\n#define ES_MULTILINE           __MSABI_LONG(0x00000004)\n#define ES_UPPERCASE           __MSABI_LONG(0x00000008)\n#define ES_LOWERCASE           __MSABI_LONG(0x00000010)\n#define ES_PASSWORD            __MSABI_LONG(0x00000020)\n#define ES_AUTOVSCROLL         __MSABI_LONG(0x00000040)\n#define ES_AUTOHSCROLL         __MSABI_LONG(0x00000080)\n#define ES_NOHIDESEL           __MSABI_LONG(0x00000100)\n#define ES_COMBO               __MSABI_LONG(0x00000200) /* Undocumented. Parent is a combobox */\n#define ES_OEMCONVERT          __MSABI_LONG(0x00000400)\n#define ES_READONLY            __MSABI_LONG(0x00000800)\n#define ES_WANTRETURN          __MSABI_LONG(0x00001000)\n#define ES_NUMBER              __MSABI_LONG(0x00002000)\n#endif /* NOWINSTYLES */\n\n\n/*** Edit control messages ***/\n#ifndef NOWINMESSAGES\n#define EM_GETSEL              0x00b0\n#define EM_SETSEL              0x00b1\n#define EM_GETRECT             0x00b2\n#define EM_SETRECT             0x00b3\n#define EM_SETRECTNP           0x00b4\n#define EM_SCROLL              0x00b5\n#define EM_LINESCROLL          0x00b6\n#define EM_SCROLLCARET         0x00b7\n#define EM_GETMODIFY           0x00b8\n#define EM_SETMODIFY           0x00b9\n#define EM_GETLINECOUNT        0x00ba\n#define EM_LINEINDEX           0x00bb\n#define EM_SETHANDLE           0x00bc\n#define EM_GETHANDLE           0x00bd\n#define EM_GETTHUMB            0x00be\n/* Unassigned 0x00bf and 0x00c0 */\n#define EM_LINELENGTH          0x00c1\n#define EM_REPLACESEL          0x00c2\n#define EM_SETFONT             0x00c3 /* DDK / Win16 */\n#define EM_GETLINE             0x00c4\n#define EM_LIMITTEXT           0x00c5\n#define EM_SETLIMITTEXT        EM_LIMITTEXT\n#define EM_CANUNDO             0x00c6\n#define EM_UNDO                0x00c7\n#define EM_FMTLINES            0x00c8\n#define EM_LINEFROMCHAR        0x00c9\n#define EM_SETWORDBREAK        0x00ca /* DDK / Win16 */\n#define EM_SETTABSTOPS         0x00cb\n#define EM_SETPASSWORDCHAR     0x00cc\n#define EM_EMPTYUNDOBUFFER     0x00cd\n#define EM_GETFIRSTVISIBLELINE 0x00ce\n#define EM_SETREADONLY         0x00cf\n#define EM_SETWORDBREAKPROC    0x00d0\n#define EM_GETWORDBREAKPROC    0x00d1\n#define EM_GETPASSWORDCHAR     0x00d2\n#define EM_SETMARGINS          0x00d3\n#define EM_GETMARGINS          0x00d4\n#define EM_GETLIMITTEXT        0x00d5\n#define EM_POSFROMCHAR         0x00d6\n#define EM_CHARFROMPOS         0x00d7\n#define EM_SETIMESTATUS        0x00d8\n#define EM_GETIMESTATUS        0x00d9\n#endif /* NOWINMESSAGES */\n\n\n/*** Button control styles ***/\n#define BS_PUSHBUTTON          __MSABI_LONG(0x00000000)\n#define BS_DEFPUSHBUTTON       __MSABI_LONG(0x00000001)\n#define BS_CHECKBOX            __MSABI_LONG(0x00000002)\n#define BS_AUTOCHECKBOX        __MSABI_LONG(0x00000003)\n#define BS_RADIOBUTTON         __MSABI_LONG(0x00000004)\n#define BS_3STATE              __MSABI_LONG(0x00000005)\n#define BS_AUTO3STATE          __MSABI_LONG(0x00000006)\n#define BS_GROUPBOX            __MSABI_LONG(0x00000007)\n#define BS_USERBUTTON          __MSABI_LONG(0x00000008)\n#define BS_AUTORADIOBUTTON     __MSABI_LONG(0x00000009)\n#define BS_PUSHBOX             __MSABI_LONG(0x0000000A)\n#define BS_OWNERDRAW           __MSABI_LONG(0x0000000B)\n#define BS_TYPEMASK            __MSABI_LONG(0x0000000F)\n#define BS_LEFTTEXT            __MSABI_LONG(0x00000020)\n#define BS_RIGHTBUTTON         BS_LEFTTEXT\n\n#define BS_TEXT                __MSABI_LONG(0x00000000)\n#define BS_ICON                __MSABI_LONG(0x00000040)\n#define BS_BITMAP              __MSABI_LONG(0x00000080)\n#define BS_LEFT                __MSABI_LONG(0x00000100)\n#define BS_RIGHT               __MSABI_LONG(0x00000200)\n#define BS_CENTER              __MSABI_LONG(0x00000300)\n#define BS_TOP                 __MSABI_LONG(0x00000400)\n#define BS_BOTTOM              __MSABI_LONG(0x00000800)\n#define BS_VCENTER             __MSABI_LONG(0x00000C00)\n#define BS_PUSHLIKE            __MSABI_LONG(0x00001000)\n#define BS_MULTILINE           __MSABI_LONG(0x00002000)\n#define BS_NOTIFY              __MSABI_LONG(0x00004000)\n#define BS_FLAT                __MSABI_LONG(0x00008000)\n\n\n/*** Button notification codes ***/\n#define BN_CLICKED             0\n#define BN_PAINT               1\n#define BN_HILITE              2\n#define BN_PUSHED              BN_HILITE\n#define BN_UNHILITE            3\n#define BN_UNPUSHED            BN_UNHILITE\n#define BN_DISABLE             4\n#define BN_DOUBLECLICKED       5\n#define BN_DBLCLK              BN_DOUBLECLICKED\n#define BN_SETFOCUS            6\n#define BN_KILLFOCUS           7\n\n\n/*** Win32 button control messages ***/\n#define BM_GETCHECK            0x00f0\n#define BM_SETCHECK            0x00f1\n#define BM_GETSTATE            0x00f2\n#define BM_SETSTATE            0x00f3\n#define BM_SETSTYLE            0x00f4\n#define BM_CLICK               0x00f5\n#define BM_GETIMAGE            0x00f6\n#define BM_SETIMAGE            0x00f7\n#define BM_SETDONTCLICK        0x00f8\n\n/* Button states */\n#define BST_UNCHECKED          0x0000\n#define BST_CHECKED            0x0001\n#define BST_INDETERMINATE      0x0002\n#define BST_PUSHED             0x0004\n#define BST_FOCUS              0x0008\n\n/*** Static Control Styles ***/\n#define SS_LEFT                __MSABI_LONG(0x00000000)\n#define SS_CENTER              __MSABI_LONG(0x00000001)\n#define SS_RIGHT               __MSABI_LONG(0x00000002)\n#define SS_ICON                __MSABI_LONG(0x00000003)\n#define SS_BLACKRECT           __MSABI_LONG(0x00000004)\n#define SS_GRAYRECT            __MSABI_LONG(0x00000005)\n#define SS_WHITERECT           __MSABI_LONG(0x00000006)\n#define SS_BLACKFRAME          __MSABI_LONG(0x00000007)\n#define SS_GRAYFRAME           __MSABI_LONG(0x00000008)\n#define SS_WHITEFRAME          __MSABI_LONG(0x00000009)\n#define SS_USERITEM            __MSABI_LONG(0x0000000A)\n#define SS_SIMPLE              __MSABI_LONG(0x0000000B)\n#define SS_LEFTNOWORDWRAP      __MSABI_LONG(0x0000000C)\n#define SS_OWNERDRAW           __MSABI_LONG(0x0000000D)\n#define SS_BITMAP              __MSABI_LONG(0x0000000E)\n#define SS_ENHMETAFILE         __MSABI_LONG(0x0000000F)\n#define SS_ETCHEDHORZ          __MSABI_LONG(0x00000010)\n#define SS_ETCHEDVERT          __MSABI_LONG(0x00000011)\n#define SS_ETCHEDFRAME         __MSABI_LONG(0x00000012)\n#define SS_TYPEMASK            __MSABI_LONG(0x0000001F)\n\n#define SS_REALSIZECONTROL     __MSABI_LONG(0x00000040)\n#define SS_NOPREFIX            __MSABI_LONG(0x00000080)\n#define SS_NOTIFY              __MSABI_LONG(0x00000100)\n#define SS_CENTERIMAGE         __MSABI_LONG(0x00000200)\n#define SS_RIGHTJUST           __MSABI_LONG(0x00000400)\n#define SS_REALSIZEIMAGE       __MSABI_LONG(0x00000800)\n#define SS_SUNKEN              __MSABI_LONG(0x00001000)\n#define SS_EDITCONTROL         __MSABI_LONG(0x00002000)\n#define SS_ENDELLIPSIS         __MSABI_LONG(0x00004000)\n#define SS_PATHELLIPSIS        __MSABI_LONG(0x00008000)\n#define SS_WORDELLIPSIS        __MSABI_LONG(0x0000C000)\n#define SS_ELLIPSISMASK        SS_WORDELLIPSIS\n\n\n/*** Dialog styles ***/\n#define DS_ABSALIGN            __MSABI_LONG(0x00000001)\n#define DS_SYSMODAL            __MSABI_LONG(0x00000002)\n#define DS_3DLOOK              __MSABI_LONG(0x00000004) /* win95 */\n#define DS_FIXEDSYS            __MSABI_LONG(0x00000008) /* win95 */\n#define DS_NOFAILCREATE        __MSABI_LONG(0x00000010) /* win95 */\n#define DS_LOCALEDIT           __MSABI_LONG(0x00000020)\n#define DS_SETFONT             __MSABI_LONG(0x00000040)\n#define DS_MODALFRAME          __MSABI_LONG(0x00000080)\n#define DS_NOIDLEMSG           __MSABI_LONG(0x00000100)\n#define DS_SETFOREGROUND       __MSABI_LONG(0x00000200) /* win95 */\n#define DS_CONTROL             __MSABI_LONG(0x00000400) /* win95 */\n#define DS_CENTER              __MSABI_LONG(0x00000800) /* win95 */\n#define DS_CENTERMOUSE         __MSABI_LONG(0x00001000) /* win95 */\n#define DS_CONTEXTHELP         __MSABI_LONG(0x00002000) /* win95 */\n#define DS_USEPIXELS           __MSABI_LONG(0x00008000)\n#define DS_SHELLFONT           (DS_SETFONT | DS_FIXEDSYS)\n\n\n/*** Listbox styles ***/\n#ifndef NOWINSTYLES\n#define LBS_NOTIFY             __MSABI_LONG(0x00000001)\n#define LBS_SORT               __MSABI_LONG(0x00000002)\n#define LBS_NOREDRAW           __MSABI_LONG(0x00000004)\n#define LBS_MULTIPLESEL        __MSABI_LONG(0x00000008)\n#define LBS_OWNERDRAWFIXED     __MSABI_LONG(0x00000010)\n#define LBS_OWNERDRAWVARIABLE  __MSABI_LONG(0x00000020)\n#define LBS_HASSTRINGS         __MSABI_LONG(0x00000040)\n#define LBS_USETABSTOPS        __MSABI_LONG(0x00000080)\n#define LBS_NOINTEGRALHEIGHT   __MSABI_LONG(0x00000100)\n#define LBS_MULTICOLUMN        __MSABI_LONG(0x00000200)\n#define LBS_WANTKEYBOARDINPUT  __MSABI_LONG(0x00000400)\n#define LBS_EXTENDEDSEL        __MSABI_LONG(0x00000800)\n#define LBS_DISABLENOSCROLL    __MSABI_LONG(0x00001000)\n#define LBS_NODATA             __MSABI_LONG(0x00002000)\n#define LBS_NOSEL              __MSABI_LONG(0x00004000)\n#define LBS_COMBOBOX           __MSABI_LONG(0x00008000)\n#define LBS_STANDARD           (LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER)\n#endif /* NOWINSTYLES */\n\n/*** Combo box styles ***/\n#ifndef NOWINSTYLES\n#define CBS_SIMPLE             __MSABI_LONG(0x00000001)\n#define CBS_DROPDOWN           __MSABI_LONG(0x00000002)\n#define CBS_DROPDOWNLIST       __MSABI_LONG(0x00000003)\n#define CBS_OWNERDRAWFIXED     __MSABI_LONG(0x00000010)\n#define CBS_OWNERDRAWVARIABLE  __MSABI_LONG(0x00000020)\n#define CBS_AUTOHSCROLL        __MSABI_LONG(0x00000040)\n#define CBS_OEMCONVERT         __MSABI_LONG(0x00000080)\n#define CBS_SORT               __MSABI_LONG(0x00000100)\n#define CBS_HASSTRINGS         __MSABI_LONG(0x00000200)\n#define CBS_NOINTEGRALHEIGHT   __MSABI_LONG(0x00000400)\n#define CBS_DISABLENOSCROLL    __MSABI_LONG(0x00000800)\n\n#define CBS_UPPERCASE          __MSABI_LONG(0x00002000)\n#define CBS_LOWERCASE          __MSABI_LONG(0x00004000)\n#endif /* NOWINSTYLES */\n\n\n/*** Scrollbar styles ***/\n#ifndef NOWINSTYLES\n#define SBS_HORZ               __MSABI_LONG(0x00000000)\n#define SBS_VERT               __MSABI_LONG(0x00000001)\n#define SBS_TOPALIGN           __MSABI_LONG(0x00000002)\n#define SBS_LEFTALIGN          __MSABI_LONG(0x00000002)\n#define SBS_BOTTOMALIGN        __MSABI_LONG(0x00000004)\n#define SBS_RIGHTALIGN         __MSABI_LONG(0x00000004)\n#define SBS_SIZEBOXTOPLEFTALIGN __MSABI_LONG(0x00000002)\n#define SBS_SIZEBOXBOTTOMRIGHTALIGN __MSABI_LONG(0x00000004)\n#define SBS_SIZEBOX            __MSABI_LONG(0x00000008)\n#define SBS_SIZEGRIP           __MSABI_LONG(0x00000010)\n#endif /* NOWINSTYLES */\n\n/*** WinHelp commands ***/\n#define HELP_CONTEXT           __MSABI_LONG(0x00000001)\n#define HELP_QUIT              __MSABI_LONG(0x00000002)\n#define HELP_INDEX             __MSABI_LONG(0x00000003)\n#define HELP_CONTENTS          HELP_INDEX\n#define HELP_HELPONHELP        __MSABI_LONG(0x00000004)\n#define HELP_SETINDEX          __MSABI_LONG(0x00000005)\n#define HELP_SETCONTENTS       HELP_SETINDEX\n#define HELP_CONTEXTPOPUP      __MSABI_LONG(0x00000008)\n#define HELP_FORCEFILE         __MSABI_LONG(0x00000009)\n#define HELP_KEY               __MSABI_LONG(0x00000101)\n#define HELP_COMMAND           __MSABI_LONG(0x00000102)\n#define HELP_PARTIALKEY        __MSABI_LONG(0x00000105)\n#define HELP_MULTIKEY          __MSABI_LONG(0x00000201)\n#define HELP_SETWINPOS         __MSABI_LONG(0x00000203)\n\n#define HELP_CONTEXTMENU       0x000a\n#define HELP_FINDER            0x000b\n#define HELP_WM_HELP           0x000c\n#define HELP_SETPOPUP_POS      0x000d\n#define HELP_TCARD_DATA        0x0010\n#define HELP_TCARD_OTHER_CALLER 0x0011\n#define HELP_TCARD             0x8000\n\n#define IDH_NO_HELP            28440\n#define IDH_MISSING_CONTEXT    28441\n#define IDH_GENERIC_HELP_BUTTON 28442\n#define IDH_OK                 28443\n#define IDH_CANCEL             28444\n#define IDH_HELP               28445\n"
  },
  {
    "path": "wine/windows/winver.h",
    "content": "/* Definitions for the VERsion info library (VER.DLL)\n *\n * Copyright 1996 Marcus Meissner\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINVER_H\n#define __WINE_WINVER_H\n\n/* FIXME: #include <specstrings.h> */\n#include <verrsrc.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\n#ifndef RC_INVOKED\n\n/* function prototypes */\n\nDWORD       WINAPI VerFindFileA(DWORD,LPCSTR,LPCSTR,LPCSTR,LPSTR,PUINT,LPSTR,PUINT);\nDWORD       WINAPI VerFindFileW(DWORD,LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,PUINT,LPWSTR,PUINT);\n#define     VerFindFile WINELIB_NAME_AW(VerFindFile)\nDWORD       WINAPI VerInstallFileA(DWORD,LPCSTR,LPCSTR,LPCSTR,LPCSTR,LPCSTR,LPSTR,PUINT);\nDWORD       WINAPI VerInstallFileW(DWORD,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,PUINT);\n#define     VerInstallFile WINELIB_NAME_AW(VerInstallFile)\nDWORD       WINAPI VerLanguageNameA(DWORD,LPSTR,DWORD);\nDWORD       WINAPI VerLanguageNameW(DWORD,LPWSTR,DWORD);\n#define     VerLanguageName WINELIB_NAME_AW(VerLanguageName)\nBOOL        WINAPI VerQueryValueA(LPCVOID,LPCSTR,LPVOID*,PUINT);\nBOOL        WINAPI VerQueryValueW(LPCVOID,LPCWSTR,LPVOID*,PUINT);\n#define     VerQueryValue WINELIB_NAME_AW(VerQueryValue)\nDWORD       WINAPI GetFileVersionInfoSizeA(LPCSTR,LPDWORD);\nDWORD       WINAPI GetFileVersionInfoSizeW(LPCWSTR,LPDWORD);\n#define     GetFileVersionInfoSize WINELIB_NAME_AW(GetFileVersionInfoSize)\nBOOL        WINAPI GetFileVersionInfoA(LPCSTR,DWORD,DWORD,LPVOID);\nBOOL        WINAPI GetFileVersionInfoW(LPCWSTR,DWORD,DWORD,LPVOID);\n#define     GetFileVersionInfo WINELIB_NAME_AW(GetFileVersionInfo)\nDWORD       WINAPI GetFileVersionInfoSizeExA(DWORD,LPCSTR,LPDWORD);\nDWORD       WINAPI GetFileVersionInfoSizeExW(DWORD,LPCWSTR,LPDWORD);\n#define     GetFileVersionInfoSizeEx WINELIB_NAME_AW(GetFileVersionInfoSizeEx)\nBOOL        WINAPI GetFileVersionInfoExA(DWORD,LPCSTR,DWORD,DWORD,LPVOID);\nBOOL        WINAPI GetFileVersionInfoExW(DWORD,LPCWSTR,DWORD,DWORD,LPVOID);\n#define     GetFileVersionInfoEx WINELIB_NAME_AW(GetFileVersionInfoEx)\n\n#endif /* RC_INVOKED */\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#endif /* __WINE_WINVER_H */\n"
  },
  {
    "path": "wine/windows/wlanapi.h",
    "content": "/*\n * Copyright (C) 2016 Austin English\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _WLAN_WLANAPI_H\n#define _WLAN_WLANAPI_H\n\ntypedef enum _WLAN_INTERFACE_STATE\n{\n    wlan_interface_state_not_ready,\n    wlan_interface_state_connected,\n    wlan_interface_state_ad_hoc_network_formed,\n    wlan_interface_state_disconnecting,\n    wlan_interface_state_disconnected,\n    wlan_interface_state_associating,\n    wlan_interface_state_discovering,\n    wlan_interface_state_authenticating\n} WLAN_INTERFACE_STATE, *PWLAN_INTERFACE_STATE;\n\ntypedef struct _WLAN_INTERFACE_INFO\n{\n    GUID InterfaceGuid;\n    WCHAR strInterfaceDescription[256];\n    WLAN_INTERFACE_STATE isState;\n} WLAN_INTERFACE_INFO, *PWLAN_INTERFACE_INFO;\n\ntypedef struct _WLAN_INTERFACE_INFO_LIST\n{\n    DWORD dwNumberOfItems;\n    DWORD dwIndex;\n    WLAN_INTERFACE_INFO InterfaceInfo[1];\n} WLAN_INTERFACE_INFO_LIST, *PWLAN_INTERFACE_INFO_LIST;\n\n#define DOT11_SSID_MAX_LENGTH 32\ntypedef struct _DOT11_SSID\n{\n    DWORD uSSIDLength;\n    UCHAR ucSSID[DOT11_SSID_MAX_LENGTH];\n} DOT11_SSID;\n\ntypedef struct _WLAN_RAW_DATA\n{\n    DWORD dwDataSize;\n    BYTE DataBlob[1];\n} WLAN_RAW_DATA, *PWLAN_RAW_DATA;\n\ntypedef struct _WLAN_NOTIFICATION_DATA\n{\n    DWORD NotificationSource;\n    DWORD NotificationCode;\n    GUID InterfaceGuid;\n    DWORD dwDataSize;\n    PVOID pData;\n} WLAN_NOTIFICATION_DATA, *PWLAN_NOTIFICATION_DATA;\n\ntypedef void (WINAPI *WLAN_NOTIFICATION_CALLBACK)(WLAN_NOTIFICATION_DATA *, void *);\n\ntypedef enum _DOT11_BSS_TYPE\n{\n    dot11_BSS_type_infrastructure = 0x01,\n    dot11_BSS_type_independent = 0x02,\n    dot11_BSS_type_any = 0x03\n} DOT11_BSS_TYPE, *PDOT11_BSS_TYPE;\n\ntypedef DWORD WLAN_REASON_CODE, *PWLAN_REASON_CODE, WLAN_SIGNAL_QUALITY;\n\ntypedef enum _DOT11_AUTH_ALGORITHM\n{\n    DOT11_AUTH_ALGO_80211_OPEN = 0x01,\n    DOT11_AUTH_ALGO_80211_SHARED_KEY = 0x02,\n    DOT11_AUTH_ALGO_WPA = 0x03,\n    DOT11_AUTH_ALGO_WPA_PSK = 0x04,\n    DOT11_AUTH_ALGO_WPA_NONE = 0x05,\n    DOT11_AUTH_ALGO_RSNA = 0x06,\n    DOT11_AUTH_ALGO_RSNA_PSK = 0x07,\n    DOT11_AUTH_ALGO_IHV_START = 0x80000000,\n    DOT11_AUTH_ALGO_IHV_END = 0xFFFFFFFF\n} DOT11_AUTH_ALGORITHM, *PDOT11_AUTH_ALGORITHM;\n\ntypedef enum _DOT11_CIPHER_ALGORITHM\n{\n    DOT11_CIPHER_ALGO_NONE = 0x00,\n    DOT11_CIPHER_ALGO_WEP40 = 0x01,\n    DOT11_CIPHER_ALGO_TKIP = 0x02,\n    DOT11_CIPHER_ALGO_CCMP = 0x04,\n    DOT11_CIPHER_ALGO_WEP104 = 0x05,\n    DOT11_CIPHER_ALGO_WPA_USE_GROUP = 0x100,\n    DOT11_CIPHER_ALGO_RSN_USE_GROUP = 0x100,\n    DOT11_CIPHER_ALGO_WEP = 0x101,\n    DOT11_CIPHER_ALGO_IHV_START = 0x80000000,\n    DOT11_CIPHER_ALGO_IHV_END = 0xFFFFFFFF\n} DOT11_CIPHER_ALGORITHM, *PDOT11_CIPHER_ALGORITHM;\n\ntypedef enum _DOT11_PHY_TYPE\n{\n    dot11_phy_type_unknown = 0x00,\n    dot11_phy_type_any = 0x00,\n    dot11_phy_type_fhss = 0x01,\n    dot11_phy_type_dsss = 0x02,\n    dot11_phy_type_irbaseband = 0x03,\n    dot11_phy_type_ofdm = 0x04,\n    dot11_phy_type_hrdsss = 0x05,\n    dot11_phy_type_erp = 0x06,\n    dot11_phy_type_ht = 0x07,\n    dot11_phy_type_vht = 0x08,\n    dot11_phy_type_IHV_start = 0x80000000,\n    dot11_phy_type_IHV_end = 0xFFFFFFFF\n} DOT11_PHY_TYPE, *PDOT11_PHY_TYPE;\n\n#define WLAN_MAX_PHY_TYPE_NUMBER 8\n\ntypedef struct _WLAN_AVAILABLE_NETWORK\n{\n    WCHAR strProfileName[256];\n    DOT11_SSID dot11Ssid;\n    DOT11_BSS_TYPE dot11BssType;\n    ULONG uNumberOfBssids;\n    BOOL bNetworkConnectable;\n    WLAN_REASON_CODE wlanNotConnectableReason;\n    ULONG uNumberOfPhyTypes;\n    DOT11_PHY_TYPE dot11PhyTypes[WLAN_MAX_PHY_TYPE_NUMBER];\n    BOOL bMorePhyTypes;\n    WLAN_SIGNAL_QUALITY wlanSignalQuality;\n    BOOL bSecurityEnabled;\n    DOT11_AUTH_ALGORITHM dot11DefaultAuthAlgorithm;\n    DOT11_CIPHER_ALGORITHM dot11DefaultCipherAlgorithm;\n    DWORD dwFlags;\n    DWORD dwReserved;\n} WLAN_AVAILABLE_NETWORK, *PWLAN_AVAILABLE_NETWORK;\n\ntypedef struct _WLAN_AVAILABLE_NETWORK_LIST\n{\n    DWORD dwNumberOfItems;\n    DWORD dwIndex;\n    WLAN_AVAILABLE_NETWORK Network[1];\n} WLAN_AVAILABLE_NETWORK_LIST, *PWLAN_AVAILABLE_NETWORK_LIST;\n\nDWORD WINAPI WlanCloseHandle(HANDLE, void *);\nDWORD WINAPI WlanEnumInterfaces(HANDLE, void *, WLAN_INTERFACE_INFO_LIST **);\nDWORD WINAPI WlanOpenHandle(DWORD, void *, DWORD *, HANDLE *);\nvoid *WINAPI WlanAllocateMemory(DWORD);\nvoid WINAPI WlanFreeMemory(void *);\nDWORD WINAPI WlanScan(HANDLE, const GUID *, const DOT11_SSID *, const WLAN_RAW_DATA *, void *);\nDWORD WINAPI WlanRegisterNotification(HANDLE, DWORD, BOOL, WLAN_NOTIFICATION_CALLBACK, void *, void *, DWORD *);\nDWORD WINAPI WlanGetAvailableNetworkList(HANDLE, const GUID *, DWORD, void *, WLAN_AVAILABLE_NETWORK_LIST **);\n\n#endif /* _WLAN_WLANAPI_H */\n"
  },
  {
    "path": "wine/windows/wmcodecdsp.idl",
    "content": "/*\n * Copyright 2018 Zebediah Figura\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"mediaobj.idl\";\nimport \"strmif.idl\";\n\n[\n    uuid(bbeea841-0a63-4f52-a7ab-a9b3a84ed38a)\n]\ncoclass CMP3DecMediaObject {}\n"
  },
  {
    "path": "wine/windows/wmdrmsdk.idl",
    "content": "/*\n * Copyright 2017 Alistair Leslie-Hughes\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"mfobjects.idl\";\nimport \"mfidl.idl\";\n\ntypedef struct _DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS\n{\n    WORD wCompressedDigitalVideo;\n    WORD wUncompressedDigitalVideo;\n    WORD wAnalogVideo;\n    WORD wCompressedDigitalAudio;\n    WORD wUncompressedDigitalAudio;\n} DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS;\n\ntypedef struct _DRM_VIDEO_OUTPUT_PROTECTION\n{\n    GUID guidId;\n    BYTE bConfigData;\n} DRM_VIDEO_OUTPUT_PROTECTION;\n\ntypedef struct _DRM_VIDEO_OUTPUT_PROTECTION_IDS\n{\n    WORD                        cEntries;\n    DRM_VIDEO_OUTPUT_PROTECTION *rgVop;\n} DRM_VIDEO_OUTPUT_PROTECTION_IDS;\n\ntypedef struct _DRM_OPL_OUTPUT_IDS\n{\n    WORD cIds;\n    GUID *rgIds;\n} DRM_OPL_OUTPUT_IDS;\n\ntypedef struct __tagDRM_COPY_OPL\n{\n    WORD               wMinimumCopyLevel;\n    DRM_OPL_OUTPUT_IDS oplIdIncludes;\n    DRM_OPL_OUTPUT_IDS oplIdExcludes;\n} DRM_COPY_OPL;\n\ntypedef struct __tagDRM_PLAY_OPL\n{\n    DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS minOPL;\n    DRM_OPL_OUTPUT_IDS                   oplIdReserved;\n    DRM_VIDEO_OUTPUT_PROTECTION_IDS      vopi;\n} DRM_PLAY_OPL;\n\n\n[\n    uuid(82435be0-f7c1-4df9-8103-eeabebf3d6e1),\n    version(1.0)\n]\nlibrary WMDRMContentEnablerLib\n{\n    importlib(\"stdole2.tlb\");\n\n    [\n        uuid(82435bdf-f7c1-4df9-8103-eeabebf3d6e1)\n    ]\n    coclass WMDRMContentEnablerActivate\n    {\n        [default] interface IPersistStream;\n    }\n}\n"
  },
  {
    "path": "wine/windows/wmistr.h",
    "content": "/*\n * Copyright (C) 2005 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _WMISTR_\n#define _WMISTR_\n\n#define WNODE_FLAG_ALL_DATA              0x00000001\n#define WNODE_FLAG_SINGLE_INSTANCE       0x00000002\n#define WNODE_FLAG_SINGLE_ITEM           0x00000004\n#define WNODE_FLAG_EVENT_ITEM            0x00000008\n#define WNODE_FLAG_FIXED_INSTANCE_SIZE   0x00000010\n#define WNODE_FLAG_TOO_SMALL             0x00000020\n#define WNODE_FLAG_INSTANCES_SAME        0x00000040\n#define WNODE_FLAG_STATIC_INSTANCE_NAMES 0x00000080\n#define WNODE_FLAG_USE_TIMESTAMP         0x00000200\n#define WNODE_FLAG_EVENT_REFERENCE       0x00002000\n#define WNODE_FLAG_METHOD_ITEM           0x00008000\n#define WNODE_FLAG_PDO_INSTANCE_NAMES    0x00010000\n#define WNODE_FLAG_TRACED_GUID           0x00020000\n#define WNODE_FLAG_LOG_WNODE             0x00040000\n#define WNODE_FLAG_USE_GUID_PTR          0x00080000\n#define WNODE_FLAG_USE_MOF_PTR           0x00100000\n#define WNODE_FLAG_SEVERITY_MASK         0xFF000000\n\ntypedef enum\n{\n    WMI_GET_ALL_DATA = 0,\n    WMI_GET_SINGLE_INSTANCE = 1,\n    WMI_SET_SINGLE_INSTANCE = 2,\n    WMI_SET_SINGLE_ITEM = 3,\n    WMI_ENABLE_EVENTS = 4,\n    WMI_DISABLE_EVENTS = 5,\n    WMI_ENABLE_CONNECTION = 6,\n    WMI_DISABLE_CONNECTION = 7,\n    WMI_REGINFO = 8,\n    WMI_EXECUTE_METHOD = 9,\n} WMIDPREQUESTCODE;\n\ntypedef struct _WNODE_HEADER\n{\n    ULONG BufferSize;\n    ULONG ProvicerId;\n    union\n    {\n        ULONG64 HistoricalContext;\n        struct\n        {\n            ULONG Version;\n            ULONG Linkage;\n        } DUMMYSTRUCTNAME;\n\n    } DUMMYUNIONNAME;\n    union\n    {\n        HANDLE KernelHandle;\n        LARGE_INTEGER TimeStamp;\n    } DUMMYUNIONNAME2;\n    GUID Guid;\n    ULONG ClientContext;\n    ULONG Flags;\n} WNODE_HEADER, *PWNODE_HEADER;\n\n#endif /* _WMISTR_ */\n"
  },
  {
    "path": "wine/windows/wmium.h",
    "content": "/*\n * Copyright (C) 2016 Austin English\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _WMIUM_\n#define _WMIUM_\n\n#ifdef _WMI_SOURCE_\n#define WMIAPI __stdcall\n#else\n#define WMIAPI DECLSPEC_IMPORT __stdcall\n#endif\n\n#include <guiddef.h>\n#include <basetsd.h>\n#include <wmistr.h>\n\ntypedef PVOID WMIHANDLE, *PWMIHANDLE, MOFHANDLE, *PMOFHANDLE;\n\n#define MOFCI_RESERVED0  0x00000001\n#define MOFCI_RESERVED1  0x00000002\n#define MOFCI_RESERVED2  0x00000004\n\ntypedef struct\n{\n    char *ImagePath;\n    char *ResourceName;\n    ULONG ResourceSize;\n    UCHAR *ResourceBuffer;\n} MOFRESOURCEINFOA, *PMOFRESOURCEINFOA;\n\ntypedef struct\n{\n    WCHAR *ImagePath;\n    WCHAR *ResourceName;\n    ULONG ResourceSize;\n    UCHAR *ResourceBuffer;\n} MOFRESOURCEINFOW, *PMOFRESOURCEINFOW;\n\nDECL_WINELIB_TYPE_AW(MOFRESOURCEINFO)\nDECL_WINELIB_TYPE_AW(PMOFRESOURCEINFO)\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define NOTIFICATION_TRACE_FLAG       0x00010000\n#define NOTIFICATION_CALLBACK_DIRECT  0x00000004\n#define NOTIFICATION_CHECK_ACCESS     0x00000008\n\ntypedef void (WINAPI *NOTIFICATIONCALLBACK)(WNODE_HEADER *, UINT_PTR);\n\ntypedef struct _WMIGUIDINFORMATION\n{\n    ULONG Size;\n    BOOLEAN IsExpensive;\n    BOOLEAN IsEventOnly;\n} WMIGUIDINFORMATION, *PWMIGUIDINFORMATION;\n\nDEFINE_GUID(GUID_REGISTRATION_CHANGE_NOTIFICATION,  0xb48d49a1, 0xe777, 0x11d0, 0xa5, 0xc, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0x10);\nDEFINE_GUID(GUID_MOF_RESOURCE_ADDED_NOTIFICATION,   0xb48d49a2, 0xe777, 0x11d0, 0xa5, 0xc, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0x10);\nDEFINE_GUID(GUID_MOF_RESOURCE_REMOVED_NOTIFICATION, 0xb48d49a3, 0xe777, 0x11d0, 0xa5, 0xc, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0x10);\n\nULONG WMIAPI WmiCloseBlock(WMIHANDLE);\nULONG WMIAPI WmiDevInstToInstanceNameA(char *,  ULONG, char *,  ULONG);\nULONG WMIAPI WmiDevInstToInstanceNameW(WCHAR *, ULONG, WCHAR *, ULONG);\n#define      WmiDevInstToInstanceName WINELIB_NAME_AW(WmiDevInstToInstanceName)\nULONG WMIAPI WmiEnumerateGuids(GUID *, ULONG *);\nULONG WMIAPI WmiExecuteMethodA(WMIHANDLE, const char *,  ULONG, ULONG, void *, ULONG *, void *);\nULONG WMIAPI WmiExecuteMethodW(WMIHANDLE, const WCHAR *, ULONG, ULONG, void *, ULONG *, void *);\n#define      WmiExecuteMethod WINELIB_NAME_AW(WmiExecuteMethod)\nULONG WMIAPI WmiFileHandleToInstanceNameA(WMIHANDLE, HANDLE, ULONG *, char *);\nULONG WMIAPI WmiFileHandleToInstanceNameW(WMIHANDLE, HANDLE, ULONG *, WCHAR *);\n#define      WmiFileHandleToInstanceName WINELIB_NAME_AW(WmiFileHandleToInstanceName)\nvoid  WMIAPI WmiFreeBuffer(void *);\n#define WmiInsertTimestamp(WnodeHeader) GetSystemTimeAsFileTime((FILETIME *)&((WNODE_HEADER *)WnodeHeader)->TimeStamp)\nULONG WMIAPI WmiMofEnumerateResourcesA(MOFHANDLE, ULONG *, MOFRESOURCEINFOA **);\nULONG WMIAPI WmiMofEnumerateResourcesW(MOFHANDLE, ULONG *, MOFRESOURCEINFOW **);\n#define      WmiMofEnumerateResources WINELIB_NAME_AW(WmiMofEnumerateResources)\nULONG WMIAPI WmiNotificationRegistrationA(GUID *, BOOLEAN, void *, ULONG_PTR, ULONG);\nULONG WMIAPI WmiNotificationRegistrationW(GUID *, BOOLEAN, void *, ULONG_PTR, ULONG);\n#define      WmiNotificationRegistration WINELIB_NAME_AW(WmiNotificationRegistration)\nULONG WMIAPI WmiOpenBlock(GUID *, ULONG, WMIHANDLE *);\nULONG WMIAPI WmiQueryAllDataA(WMIHANDLE, ULONG *, void *);\nULONG WMIAPI WmiQueryAllDataW(WMIHANDLE, ULONG *, void *);\n#define      WmiQueryAllData WINELIB_NAME_AW(WmiQueryAllData)\nULONG WMIAPI WmiQueryGuidInformation(WMIHANDLE, WMIGUIDINFORMATION *);\nULONG WMIAPI WmiQuerySingleInstanceA(WMIHANDLE, const char *, ULONG *, void *);\nULONG WMIAPI WmiQuerySingleInstanceW(WMIHANDLE, const WCHAR *, ULONG *, void *);\n#define      WmiQuerySingleInstance WINELIB_NAME_AW(WmiQuerySingleInstance)\nULONG WMIAPI WmiSetSingleInstanceA(WMIHANDLE, const char *,  ULONG, ULONG, void *);\nULONG WMIAPI WmiSetSingleInstanceW(WMIHANDLE, const WCHAR *, ULONG, ULONG, void *);\n#define      WmiSetSingleInstance WINELIB_NAME_AW(WmiSetSingleInstance)\nULONG WMIAPI WmiSetSingleItemA(WMIHANDLE, const char *,  ULONG, ULONG, ULONG, void *);\nULONG WMIAPI WmiSetSingleItemW(WMIHANDLE, const WCHAR *, ULONG, ULONG, ULONG, void *);\n#define      WmiSetSingleItem WINELIB_NAME_AW(WmiSetSingleItem)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* _WMIUM_ */\n"
  },
  {
    "path": "wine/windows/wmiutils.idl",
    "content": "/*\n * Copyright 2012 Hans Leidekker for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\n\ninterface IWbemPath;\ninterface IWbemPathKeyList;\n\ntypedef [v1_enum] enum tag_WBEM_PATH_STATUS_FLAG\n{\n    WBEMPATH_INFO_ANON_LOCAL_MACHINE    = 0x1,\n    WBEMPATH_INFO_HAS_MACHINE_NAME      = 0x2,\n    WBEMPATH_INFO_IS_CLASS_REF          = 0x4,\n    WBEMPATH_INFO_IS_INST_REF           = 0x8,\n    WBEMPATH_INFO_HAS_SUBSCOPES         = 0x10,\n    WBEMPATH_INFO_IS_COMPOUND           = 0x20,\n    WBEMPATH_INFO_HAS_V2_REF_PATHS      = 0x40,\n    WBEMPATH_INFO_HAS_IMPLIED_KEY       = 0x80,\n    WBEMPATH_INFO_CONTAINS_SINGLETON    = 0x100,\n    WBEMPATH_INFO_V1_COMPLIANT          = 0x200,\n    WBEMPATH_INFO_V2_COMPLIANT          = 0x400,\n    WBEMPATH_INFO_CIM_COMPLIANT         = 0x800,\n    WBEMPATH_INFO_IS_SINGLETON          = 0x1000,\n    WBEMPATH_INFO_IS_PARENT             = 0x2000,\n    WBEMPATH_INFO_SERVER_NAMESPACE_ONLY = 0x4000,\n    WBEMPATH_INFO_NATIVE_PATH           = 0x8000,\n    WBEMPATH_INFO_WMI_PATH              = 0x10000,\n    WBEMPATH_INFO_PATH_HAD_SERVER       = 0x20000\n} tag_WBEM_PATH_STATUS_FLAG;\n\ntypedef [v1_enum] enum tag_WBEM_PATH_CREATE_FLAG\n{\n    WBEMPATH_CREATE_ACCEPT_RELATIVE     = 0x1,\n    WBEMPATH_CREATE_ACCEPT_ABSOLUTE     = 0x2,\n    WBEMPATH_CREATE_ACCEPT_ALL          = 0x4,\n    WBEMPATH_TREAT_SINGLE_IDENT_AS_NS   = 0x8\n} tag_WBEM_PATH_CREATE_FLAG;\n\ntypedef [v1_enum] enum tag_WBEM_GET_TEXT_FLAGS\n{\n    WBEMPATH_COMPRESSED                     = 0x1,\n    WBEMPATH_GET_RELATIVE_ONLY              = 0x2,\n    WBEMPATH_GET_SERVER_TOO                 = 0x4,\n    WBEMPATH_GET_SERVER_AND_NAMESPACE_ONLY  = 0x8,\n    WBEMPATH_GET_NAMESPACE_ONLY             = 0x10,\n    WBEMPATH_GET_ORIGINAL                   = 0x20\n} tag_WBEM_GET_TEXT_FLAGS;\n\n[\n    local,\n    object,\n    uuid(9ae62877-7544-4bb0-aa26-a13824659ed6)\n]\ninterface IWbemPathKeyList : IUnknown\n{\n    HRESULT GetCount(\n        [out] ULONG *puKeyCount);\n\n    HRESULT SetKey(\n        [in,string] LPCWSTR wszName,\n        [in] ULONG uFlags,\n        [in] ULONG uCimType,\n        [in] LPVOID pKeyVal);\n\n    HRESULT SetKey2(\n        [in,string] LPCWSTR wszName,\n        [in] ULONG uFlags,\n        [in] ULONG uCimType,\n        [in] VARIANT *pKeyVal);\n\n    HRESULT GetKey(\n        [in] ULONG uKeyIx,\n        [in] ULONG uFlags,\n        [in,out] ULONG *puNameBufSize,\n        [in,out] LPWSTR pszKeyName,\n        [in,out] ULONG *puKeyValBufSize,\n        [in,out] LPVOID pKeyVal,\n        [out] ULONG *puApparentCimType);\n\n    HRESULT GetKey2(\n        [in] ULONG uKeyIx,\n        [in] ULONG uFlags,\n        [in,out] ULONG *puNameBufSize,\n        [in,out] LPWSTR pszKeyName,\n        [in,out] VARIANT *pKeyValue,\n        [out] ULONG *puApparentCimType);\n\n    HRESULT RemoveKey(\n        [in,string] LPCWSTR wszName,\n        [in] ULONG uFlags);\n\n    HRESULT RemoveAllKeys(\n        [in] ULONG uFlags);\n\n    HRESULT MakeSingleton([in] boolean bSet);\n\n    HRESULT GetInfo(\n        [in] ULONG uRequestedInfo,\n        [out] ULONGLONG *puResponse);\n\n    HRESULT GetText(\n        [in] long lFlags,\n        [in,out] ULONG *puBuffLength,\n        [in,out,string] LPWSTR pszText);\n}\n\ncpp_quote(\"#ifdef WINE_NO_UNICODE_MACROS\")\ncpp_quote(\"#undef GetClassName\")\ncpp_quote(\"#endif\")\n\n[\n    local,\n    object,\n    uuid(3bc15af2-736c-477e-9e51-238af8667dcc)\n]\ninterface IWbemPath : IUnknown\n{\n    HRESULT SetText(\n        [in] ULONG uMode,\n        [in] LPCWSTR pszPath);\n\n    HRESULT GetText(\n        [in] long lFlags,\n        [in,out] ULONG *puBuffLength,\n        [in,out,string] LPWSTR pszText);\n\n    HRESULT GetInfo(\n        [in] ULONG uRequestedInfo,\n        [out] ULONGLONG *puResponse);\n\n    HRESULT SetServer(\n        [in,string] LPCWSTR Name);\n\n    HRESULT GetServer(\n        [in,out] ULONG *puNameBufLength,\n        [in,out,string] LPWSTR pName);\n\n    HRESULT GetNamespaceCount(\n        [out] ULONG *puCount);\n\n    HRESULT SetNamespaceAt(\n        [in] ULONG uIndex,\n        [in,string] LPCWSTR pszName);\n\n    HRESULT GetNamespaceAt(\n        [in] ULONG uIndex,\n        [in,out] ULONG *puNameBufLength,\n        [in,out,string] LPWSTR pName);\n\n    HRESULT RemoveNamespaceAt(\n        [in] ULONG uIndex);\n\n    HRESULT RemoveAllNamespaces();\n\n    HRESULT GetScopeCount(\n        [out] ULONG *puCount);\n\n    HRESULT SetScope(\n        [in] ULONG uIndex,\n        [in] LPWSTR pszClass);\n\n    HRESULT SetScopeFromText(\n        [in] ULONG uIndex,\n        [in] LPWSTR pszText);\n\n    HRESULT GetScope(\n        [in] ULONG uIndex,\n        [in,out] ULONG *puClassNameBufSize,\n        [in,out] LPWSTR pszClass,\n        [out] IWbemPathKeyList **pKeyList);\n\n    HRESULT GetScopeAsText(\n        [in] ULONG uIndex,\n        [in,out] ULONG *puTextBufSize,\n        [in,out] LPWSTR pszText);\n\n    HRESULT RemoveScope(\n        [in] ULONG uIndex);\n\n    HRESULT RemoveAllScopes();\n\n    HRESULT SetClassName(\n        [in,string] LPCWSTR Name);\n\n    HRESULT GetClassName(\n        [in,out] ULONG *puBuffLength,\n        [in,out,string] LPWSTR pszName);\n\n    HRESULT GetKeyList(\n        [out] IWbemPathKeyList **pOut);\n\n    HRESULT CreateClassPart(\n        [in] long lFlags,\n        [in,string] LPCWSTR Name);\n\n    HRESULT DeleteClassPart(\n        [in] long lFlags);\n\n    BOOL IsRelative(\n        [in,string] LPWSTR wszMachine,\n        [in,string] LPWSTR wszNamespace);\n\n    BOOL IsRelativeOrChild(\n        [in,string] LPWSTR wszMachine,\n        [in,string] LPWSTR wszNamespace,\n        [in] long lFlags);\n\n    BOOL IsLocal(\n        [in,string] LPCWSTR wszMachine);\n\n    BOOL IsSameClassName(\n        [in,string] LPCWSTR wszClass);\n}\n\n[\n    uuid(cf4cc405-e2c5-4ddd-b3ce-5e7582d8c9fa)\n]\ncoclass WbemDefPath\n{\n    interface IWbemPath;\n}\n"
  },
  {
    "path": "wine/windows/wmp.idl",
    "content": "/*\n * Copyright 2014 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\n\n#ifndef __WIDL__\n#define threading(model)\n#define progid(str)\n#define vi_progid(str)\n#endif\n\n[\n    helpstring(\"Windows Media Player\"),\n    version(1.0),\n    uuid(6bf52a50-394a-11d3-b153-00c04f79Faa6)\n]\nlibrary WMPLib {\n    importlib(\"stdole2.tlb\");\n\n    typedef enum {\n        wmposUndefined,\n        wmposPlaylistChanging,\n        wmposPlaylistLocating,\n        wmposPlaylistConnecting,\n        wmposPlaylistLoading,\n        wmposPlaylistOpening,\n        wmposPlaylistOpenNoMedia,\n        wmposPlaylistChanged,\n        wmposMediaChanging,\n        wmposMediaLocating,\n        wmposMediaConnecting,\n        wmposMediaLoading,\n        wmposMediaOpening,\n        wmposMediaOpen,\n        wmposBeginCodecAcquisition,\n        wmposEndCodecAcquisition,\n        wmposBeginLicenseAcquisition,\n        wmposEndLicenseAcquisition,\n        wmposBeginIndividualization,\n        wmposEndIndividualization,\n        wmposMediaWaiting,\n        wmposOpeningUnknownURL\n    } WMPOpenState;\n\n    typedef enum {\n        wmppsUndefined,\n        wmppsStopped,\n        wmppsPaused,\n        wmppsPlaying,\n        wmppsScanForward,\n        wmppsScanReverse,\n        wmppsBuffering,\n        wmppsWaiting,\n        wmppsMediaEnded,\n        wmppsTransitioning,\n        wmppsReady,\n        wmppsReconnecting,\n        wmppsLast\n    } WMPPlayState;\n\n    typedef enum {\n        wmplcUnknown,\n        wmplcClear,\n        wmplcInfoChange,\n        wmplcMove,\n        wmplcDelete,\n        wmplcInsert,\n        wmplcAppend,\n        wmplcPrivate,\n        wmplcNameChange,\n        wmplcMorph,\n        wmplcSort,\n        wmplcLast\n    } WMPPlaylistChangeEventType;\n\n    typedef enum {\n        wmpdsUnknown,\n        wmpdsPartnershipExists,\n        wmpdsPartnershipDeclined,\n        wmpdsPartnershipAnother,\n        wmpdsManualDevice,\n        wmpdsNewDevice,\n        wmpdsLast\n    } WMPDeviceStatus;\n\n    typedef enum {\n        wmpssUnknown,\n        wmpssSynchronizing,\n        wmpssStopped,\n        wmpssEstimating,\n        wmpssLast\n    } WMPSyncState;\n\n    typedef enum {\n        wmprsUnknown,\n        wmprsRipping,\n        wmprsStopped\n    } WMPRipState;\n\n    typedef enum {\n        wmpbfAudioCD,\n        wmpbfDataCD\n    } WMPBurnFormat;\n\n    typedef enum {\n        wmpbsUnknown,\n        wmpbsBusy,\n        wmpbsReady,\n        wmpbsWaitingForDisc,\n        wmpbsRefreshStatusPending,\n        wmpbsPreparingToBurn,\n        wmpbsBurning,\n        wmpbsStopped,\n        wmpbsErasing,\n        wmpbsDownloading\n    } WMPBurnState;\n\n    typedef enum {\n        wmpltUnknown,\n        wmpltAll,\n        wmpltLocal,\n        wmpltRemote,\n        wmpltDisc,\n        wmpltPortableDevice\n    } WMPLibraryType;\n\n    typedef enum {\n        wmpfssUnknown,\n        wmpfssScanning,\n        wmpfssUpdating,\n        wmpfssStopped\n    } WMPFolderScanState;\n\n    typedef enum {\n        wmpsccetUnknown,\n        wmpsccetInsert,\n        wmpsccetChange,\n        wmpsccetDelete,\n        wmpsccetClear,\n        wmpsccetBeginUpdates,\n        wmpsccetEndUpdates\n    } WMPStringCollectionChangeEventType;\n\n    interface IWMPMedia;\n\n    [\n        odl,\n        uuid(d5f0f4f1-130c-11d3-b14e-00c04f79Faa6),\n        dual,\n        oleautomation\n    ]\n    interface IWMPPlaylist : IDispatch\n    {\n        [id(0x00c9), propget]\n        HRESULT count([out, retval] long *plCount);\n\n        [id(0x00ca), propget]\n        HRESULT name([out, retval] BSTR *pbstrName);\n        [id(0x00ca), propput]\n        HRESULT name([in] BSTR pbstrName);\n\n        [id(0x00d2), propget]\n        HRESULT attributeCount([out, retval] long *plCount);\n\n        [id(0x00d3), propget]\n        HRESULT attributeName(\n            [in] long lIndex,\n            [out, retval] BSTR *pbstrAttributeName);\n\n        [id(0x00d4), propget]\n        HRESULT Item(\n            [in] long lIndex,\n            [out, retval] IWMPMedia** ppIWMPMedia);\n\n        [id(0x00cb)]\n        HRESULT getItemInfo(\n            [in] BSTR bstrName,\n            [out, retval] BSTR *pbstrVal);\n\n        [id(0x00cc)]\n        HRESULT setItemInfo(\n            [in] BSTR bstrName,\n            [in] BSTR bstrValue);\n\n        [id(0x00d5), propget]\n        HRESULT isIdentical(\n            [in] IWMPPlaylist *pIWMPPlaylist,\n            [out, retval] VARIANT_BOOL *pvbool);\n\n        [id(0x00cd)]\n        HRESULT clear();\n\n        [id(0x00ce)]\n        HRESULT insertItem(\n            [in] long lIndex,\n            [in] IWMPMedia *pIWMPMedia);\n\n        [id(0x00cf)]\n        HRESULT appendItem([in] IWMPMedia *pIWMPMedia);\n\n        [id(0x00d0)]\n        HRESULT removeItem([in] IWMPMedia *pIWMPMedia);\n\n        [id(0x00d1)]\n        HRESULT moveItem(\n            long lIndexOld,\n            long lIndexNew);\n    }\n\n    [\n        odl,\n        uuid(94d55e95-3Fac-11d3-b155-00c04f79faa6),\n        dual,\n        oleautomation\n    ]\n    interface IWMPMedia : IDispatch\n    {\n        [id(0x02fb), propget]\n        HRESULT isIdentical(\n            [in] IWMPMedia *pIWMPMedia,\n            [out, retval] VARIANT_BOOL *pvbool);\n\n        [id(0x02ef), propget]\n        HRESULT sourceURL([out, retval] BSTR *pbstrSourceURL);\n\n        [id(0x02fc), propget]\n        HRESULT name([out, retval] BSTR *pbstrName);\n        [id(0x02fc), propput]\n        HRESULT name([in] BSTR pbstrName);\n\n        [id(0x02f0), propget]\n        HRESULT imageSourceWidth([out, retval] long *pWidth);\n\n        [id(0x02f1), propget]\n        HRESULT imageSourceHeight([out, retval] long *pHeight);\n\n        [id(0x02f2), propget]\n        HRESULT markerCount([out, retval] long *pMarkerCount);\n\n        [id(0x02f3)]\n        HRESULT getMarkerTime(\n            [in] long MarkerNum,\n            [out, retval] double *pMarkerTime);\n\n        [id(0x02f4)]\n        HRESULT getMarkerName(\n            [in] long MarkerNum,\n            [out, retval] BSTR *pbstrMarkerName);\n\n        [id(0x02f5), propget]\n        HRESULT duration([out, retval] double *pDuration);\n\n        [id(0x02f6), propget]\n        HRESULT durationString([out, retval] BSTR *pbstrDuration);\n\n        [id(0x02f7), propget]\n        HRESULT attributeCount([out, retval] long *plCount);\n\n        [id(0x02f8)]\n        HRESULT getAttributeName(\n            [in] long lIndex,\n            [out, retval] BSTR *pbstrItemName);\n\n        [id(0x02f9)]\n        HRESULT getItemInfo(\n            [in] BSTR bstrItemName,\n            [out, retval] BSTR *pbstrVal);\n\n        [id(0x02fa)]\n        HRESULT setItemInfo(\n            [in] BSTR bstrItemName,\n            [in] BSTR bstrVal);\n\n        [id(0x02fd)]\n        HRESULT getItemInfoByAtom(\n            [in] long lAtom,\n            [out, retval] BSTR *pbstrVal);\n\n        [id(0x02fe)]\n        HRESULT isMemberOf(\n            [in] IWMPPlaylist *pPlaylist,\n            [out, retval] VARIANT_BOOL *pvarfIsMemberOf);\n\n        [id(0x02ff)]\n        HRESULT isReadOnlyItem(\n            [in] BSTR bstrItemName,\n            [out, retval] VARIANT_BOOL *pvarfIsReadOnly);\n    }\n\n    [\n        odl,\n        uuid(74c09E02-f828-11d2-a74b-00a0c905f36e),\n        dual,\n        oleautomation\n    ]\n    interface IWMPControls : IDispatch {\n        [id(0x003e), propget]\n        HRESULT isAvailable(\n            [in] BSTR bstrItem,\n            [out, retval] VARIANT_BOOL *pIsAvailable);\n\n        [id(0x0033)]\n        HRESULT play();\n\n        [id(0x0034)]\n        HRESULT stop();\n\n        [id(0x0035)]\n        HRESULT pause();\n\n        [id(0x0036)]\n        HRESULT fastForward();\n\n        [id(0x0037)]\n        HRESULT fastReverse();\n\n        [id(0x0038), propget]\n        HRESULT currentPosition([out, retval] double *pdCurrentPosition);\n        [id(0x0038), propput]\n        HRESULT currentPosition([in] double pdCurrentPosition);\n\n        [id(0x0039), propget]\n        HRESULT currentPositionString([out, retval] BSTR *pbstrCurrentPosition);\n\n        [id(0x003a)]\n        HRESULT next();\n\n        [id(0x003b)]\n        HRESULT previous();\n\n        [id(0x003c)]\n        HRESULT currentItem([out, retval] IWMPMedia **ppIWMPMedia);\n\n        [id(0x003c), propput]\n        HRESULT currentItem([in] IWMPMedia *ppIWMPMedia);\n\n        [id(0x003d), propget]\n        HRESULT currentMarker([out, retval] long *plMarker);\n\n        [id(0x003d), propput]\n        HRESULT currentMarker([in] long plMarker);\n\n        [id(0x003f)]\n        HRESULT playItem([in] IWMPMedia *pIWMPMedia);\n    }\n\n    [\n        odl,\n        uuid(9104d1ab-80c9-4fed-abf0-2e6417a6df14),\n        dual,\n        oleautomation\n    ]\n    interface IWMPSettings : IDispatch\n    {\n        [id(0x0071), propget]\n        HRESULT isAvailable(\n            [in] BSTR bstrItem,\n            [out, retval] VARIANT_BOOL *pIsAvailable);\n\n        [id(0x0065), propget]\n        HRESULT autoStart([out, retval] VARIANT_BOOL *pfAutoStart);\n        [id(0x0065), propput]\n        HRESULT autoStart([in] VARIANT_BOOL pfAutoStart);\n\n        [id(0x006c), propget]\n        HRESULT baseURL([out, retval] BSTR *pbstrBaseURL);\n        [id(0x006c), propput]\n        HRESULT baseURL([in] BSTR pbstrBaseURL);\n\n        [id(0x006d), propget]\n        HRESULT defaultFrame([out, retval] BSTR *pbstrDefaultFrame);\n        [id(0x006d), propput]\n        HRESULT defaultFrame([in] BSTR pbstrDefaultFrame);\n\n        [id(0x0067), propget]\n        HRESULT invokeURLs([out, retval] VARIANT_BOOL *pfInvokeURLs);\n        [id(0x0067), propput]\n        HRESULT invokeURLs([in] VARIANT_BOOL pfInvokeURLs);\n\n        [id(0x0068), propget]\n        HRESULT mute([out, retval] VARIANT_BOOL *pfMute);\n        [id(0x0068), propput]\n        HRESULT mute([in] VARIANT_BOOL pfMute);\n\n        [id(0x0069), propget]\n        HRESULT playCount([out, retval] long *plCount);\n        [id(0x0069), propput]\n        HRESULT playCount([in] long plCount);\n\n        [id(0x006a), propget]\n        HRESULT rate([out, retval] double *pdRate);\n        [id(0x006a), propput]\n        HRESULT rate([in] double pdRate);\n\n        [id(0x0066), propget]\n        HRESULT balance([out, retval] long *plBalance);\n        [id(0x0066), propput]\n        HRESULT balance([in] long plBalance);\n\n        [id(0x006b), propget]\n        HRESULT volume([out, retval] long *plVolume);\n        [id(0x006b), propput]\n        HRESULT volume([in] long plVolume);\n\n        [id(0x006e)]\n        HRESULT getMode(\n            [in] BSTR bstrMode,\n            [out, retval] VARIANT_BOOL *pvarfMode);\n\n        [id(0x006f)]\n        HRESULT setMode(\n            [in] BSTR bstrMode,\n            [in] VARIANT_BOOL varfMode);\n\n        [id(0x0070), propget]\n        HRESULT enableErrorDialogs([out, retval] VARIANT_BOOL *pfEnableErrorDialogs);\n\n        [id(0x0070), propput]\n        HRESULT enableErrorDialogs([in] VARIANT_BOOL pfEnableErrorDialogs);\n    }\n\n    [\n        odl,\n        uuid(4a976298-8c0d-11d3-b389-00c04f68574b),\n        dual,\n        oleautomation\n    ]\n    interface IWMPStringCollection : IDispatch\n    {\n        [id(0x0191), propget]\n        HRESULT count([out, retval] long *plCount);\n\n        [id(0x0192)]\n        HRESULT Item(\n            [in] long lIndex,\n            [out, retval] BSTR *pbstrString);\n    }\n\n    [\n        odl,\n        uuid(8363bc22-b4b4-4b19-989d-1cd765749dd1),\n        dual,\n        oleautomation\n    ]\n    interface IWMPMediaCollection : IDispatch\n    {\n        [id(0x01c4)]\n        HRESULT add(\n            [in] BSTR bstrURL,\n            [out, retval] IWMPMedia **ppItem);\n\n        [id(0x01c5)]\n        HRESULT getAll([out, retval] IWMPPlaylist **ppMediaItems);\n\n        [id(0x01c6)]\n        HRESULT getByName(\n            [in] BSTR bstrName,\n            [out, retval] IWMPPlaylist **ppMediaItems);\n\n        [id(0x01c7)]\n        HRESULT getByGenre(\n            [in] BSTR bstrGenre,\n            [out, retval] IWMPPlaylist **ppMediaItems);\n\n        [id(0x01c8)]\n        HRESULT getByAuthor(\n            [in] BSTR bstrAuthor,\n            [out, retval] IWMPPlaylist **ppMediaItems);\n\n        [id(0x01c9)]\n        HRESULT getByAlbum(\n            [in] BSTR bstrAlbum,\n            [out, retval] IWMPPlaylist **ppMediaItems);\n\n        [id(0x01ca)]\n        HRESULT getByAttribute(\n            [in] BSTR bstrAttribute,\n            [in] BSTR bstrValue,\n            [out, retval] IWMPPlaylist **ppMediaItems);\n\n        [id(0x01cb)]\n        HRESULT remove(\n            [in] IWMPMedia *pItem,\n            [in] VARIANT_BOOL varfDeleteFile);\n\n        [id(0x01cd)]\n        HRESULT getAttributeStringCollection(\n            [in] BSTR bstrAttribute,\n            [in] BSTR bstrMediaType,\n            [out, retval] IWMPStringCollection **ppStringCollection);\n\n        [id(0x01d6)]\n        HRESULT getMediaAtom(\n            [in] BSTR bstrItemName,\n            [out, retval] long *plAtom);\n\n        [id(0x01d7)]\n        HRESULT setDeleted(\n            [in] IWMPMedia *pItem,\n            [in] VARIANT_BOOL varfIsDeleted);\n\n        [id(0x01d8)]\n        HRESULT isDeleted(\n            [in] IWMPMedia *pItem,\n            [out, retval] VARIANT_BOOL *pvarfIsDeleted);\n    }\n\n    [\n        odl,\n        uuid(679409c0-99f7-11d3-9fb7-00105aa620bb),\n        dual,\n        oleautomation\n    ]\n    interface IWMPPlaylistArray : IDispatch\n    {\n        [id(0x01f5), propget]\n        HRESULT count([out, retval] long *plCount);\n\n        [id(0x01f6)]\n        HRESULT Item(\n            [in] long lIndex,\n            [out, retval] IWMPPlaylist **ppItem);\n    }\n\n    [\n        odl,\n        uuid(10a13217-23a7-439b-b1c0-d847c79b7774),\n        dual,\n        oleautomation\n    ]\n    interface IWMPPlaylistCollection : IDispatch\n    {\n        [id(0x0228)]\n        HRESULT newPlaylist(\n            [in] BSTR bstrName,\n            [out, retval] IWMPPlaylist **ppItem);\n\n        [id(0x0229)]\n        HRESULT getAll([out, retval] IWMPPlaylistArray **ppPlaylistArray);\n\n        [id(0x022a)]\n        HRESULT getByName(\n            [in] BSTR bstrName,\n            [out, retval] IWMPPlaylistArray **ppPlaylistArray);\n\n        [id(0x022c)]\n        HRESULT remove([in] IWMPPlaylist *pItem);\n\n        [id(0x0230)]\n        HRESULT setDeleted(\n            [in] IWMPPlaylist *pItem,\n            [in] VARIANT_BOOL varfIsDeleted);\n\n        [id(0x0231)]\n        HRESULT isDeleted(\n            [in] IWMPPlaylist *pItem,\n            [out, retval] VARIANT_BOOL *pvarfIsDeleted);\n\n        [id(0x0232)]\n        HRESULT importPlaylist(\n            [in] IWMPPlaylist *pItem,\n            [out, retval] IWMPPlaylist **ppImportedItem);\n    }\n\n    [\n        odl,\n        uuid(ec21b779-edef-462d-bba4-ad9dde2b29a7),\n        dual,\n        oleautomation\n    ]\n    interface IWMPNetwork : IDispatch\n    {\n        [id(0x0321), propget]\n        HRESULT bandWidth([out, retval] long *plBandwidth);\n\n        [id(0x0322), propget]\n        HRESULT recoveredPackets([out, retval] long *plRecoveredPackets);\n\n        [id(0x0323), propget]\n        HRESULT sourceProtocol([out, retval] BSTR *pbstrSourceProtocol);\n\n        [id(0x0324), propget]\n        HRESULT receivedPackets([out, retval] long *plReceivedPackets);\n\n        [id(0x0325), propget]\n        HRESULT lostPackets([out, retval] long *plLostPackets);\n\n        [id(0x0326), propget]\n        HRESULT receptionQuality([out, retval] long *plReceptionQuality);\n\n        [id(0x0327), propget]\n        HRESULT bufferingCount([out, retval] long *plBufferingCount);\n\n        [id(0x0328), propget]\n        HRESULT bufferingProgress([out, retval] long *plBufferingProgress);\n\n        [id(0x0329), propget]\n        HRESULT bufferingTime([out, retval] long *plBufferingTime);\n\n        [id(0x0329), propput]\n        HRESULT bufferingTime([in] long plBufferingTime);\n\n        [id(0x032a), propget]\n        HRESULT frameRate([out, retval] long *plFrameRate);\n\n        [id(0x032b), propget]\n        HRESULT maxBitRate([out, retval] long *plBitRate);\n\n        [id(0x032c), propget]\n        HRESULT bitRate([out, retval] long *plBitRate);\n\n        [id(0x032d)]\n        HRESULT getProxySettings(\n            [in] BSTR bstrProtocol,\n            [out, retval] long *plProxySetting);\n\n        [id(0x032e)]\n        HRESULT setProxySettings(\n            [in] BSTR bstrProtocol,\n            [in] long lProxySetting);\n\n        [id(0x032f)]\n        HRESULT getProxyName(\n            [in] BSTR bstrProtocol,\n            [out, retval] BSTR *pbstrProxyName);\n\n        [id(0x0330)]\n        HRESULT setProxyName(\n            [in] BSTR bstrProtocol,\n            [in] BSTR bstrProxyName);\n\n        [id(0x0331)]\n        HRESULT getProxyPort(\n            [in] BSTR bstrProtocol,\n            [out, retval] long *lProxyPort);\n\n        [id(0x0332)]\n        HRESULT setProxyPort(\n            [in] BSTR bstrProtocol,\n            [in] long lProxyPort);\n\n        [id(0x0333)]\n        HRESULT getProxyExceptionList(\n            [in] BSTR bstrProtocol,\n            [out, retval] BSTR *pbstrExceptionList);\n\n        [id(0x0334)]\n        HRESULT setProxyExceptionList(\n            [in] BSTR bstrProtocol,\n            [in] BSTR pbstrExceptionList);\n\n        [id(0x0335)]\n        HRESULT getProxyBypassForLocal(\n            [in] BSTR bstrProtocol,\n            [out, retval] VARIANT_BOOL *pfBypassForLocal);\n\n        [id(0x0336)]\n        HRESULT setProxyBypassForLocal(\n            [in] BSTR bstrProtocol,\n            [in] VARIANT_BOOL fBypassForLocal);\n\n        [id(0x0337), propget]\n        HRESULT maxBandwidth([out, retval] long *lMaxBandwidth);\n        [id(0x0337), propput]\n        HRESULT maxBandwidth([in] long lMaxBandwidth);\n\n        [id(0x0338), propget]\n        HRESULT downloadProgress([out, retval] long *plDownloadProgress);\n\n        [id(0x0339), propget]\n        HRESULT encodedFrameRate([out, retval] long *plFrameRate);\n\n        [id(0x033a), propget]\n        HRESULT framesSkipped([out, retval] long *plFrames);\n    }\n\n    [\n        odl,\n        uuid(cfab6e98-8730-11d3-b388-00c04f68574b),\n        dual,\n        oleautomation\n    ]\n    interface IWMPCdrom : IDispatch\n    {\n        [id(0x00fb), propget]\n        HRESULT driveSpecifier([out, retval] BSTR *pbstrDrive);\n\n        [id(0x00fc), propget]\n        HRESULT Playlist([out, retval] IWMPPlaylist **ppPlaylist);\n\n        [id(0x00fd)]\n        HRESULT eject();\n    }\n\n    [\n        odl,\n        uuid(ee4c8fe2-34b2-11d3-a3bf-006097c9b344),\n        dual,\n        oleautomation\n    ]\n    interface IWMPCdromCollection : IDispatch\n    {\n        [id(0x012d), propget]\n        HRESULT count([out, retval] long *plCount);\n\n        [id(0x012e)]\n        HRESULT Item(\n            [in] long lIndex,\n            [out, retval] IWMPCdrom **ppItem);\n\n        [id(0x012f)]\n        HRESULT getByDriveSpecifier(\n            [in] BSTR bstrDriveSpecifier,\n            [out, retval] IWMPCdrom **ppCdrom);\n    }\n\n    [\n        odl,\n        uuid(8da61686-4668-4a5c-ae5d-803193293dbe),\n        dual,\n        oleautomation\n    ]\n    interface IWMPDVD : IDispatch\n    {\n        [id(0x03e9), propget]\n        HRESULT isAvailable(\n            [in] BSTR bstrItem,\n            [out, retval] VARIANT_BOOL *pIsAvailable);\n\n        [id(0x03ea), propget]\n        HRESULT domain([out, retval] BSTR *strDomain);\n\n        [id(0x03eb)]\n        HRESULT topMenu();\n\n        [id(0x03ec)]\n        HRESULT titleMenu();\n\n        [id(0x03ed)]\n        HRESULT back();\n\n        [id(0x03ee)]\n        HRESULT resume();\n    }\n\n    [\n        odl,\n        uuid(4f2df574-c588-11d3-9ed0-00c04fb6e937),\n        dual,\n        oleautomation\n    ]\n    interface IWMPClosedCaption : IDispatch\n    {\n        [id(0x03b7), propget]\n        HRESULT SAMIStyle([out, retval] BSTR *pbstrSAMIStyle);\n        [id(0x03b7), propput]\n        HRESULT SAMIStyle([in] BSTR pbstrSAMIStyle);\n\n        [id(0x03b8), propget]\n        HRESULT SAMILang([out, retval] BSTR *pbstrSAMILang);\n\n        [id(0x03b8), propput]\n        HRESULT SAMILang([in] BSTR pbstrSAMILang);\n\n        [id(0x03b9), propget]\n        HRESULT SAMIFileName([out, retval] BSTR *pbstrSAMIFileName);\n\n        [id(0x03b9), propput]\n        HRESULT SAMIFileName([in] BSTR pbstrSAMIFileName);\n\n        [id(0x03ba), propget]\n        HRESULT captioningId([out, retval] BSTR *pbstrCaptioningID);\n\n        [id(0x03ba), propput]\n        HRESULT captioningId([in] BSTR pbstrCaptioningID);\n    }\n\n    [\n        odl,\n        uuid(3614c646-3b3b-4de7-a81e-930e3f2127b3),\n        dual,\n        oleautomation\n    ]\n    interface IWMPErrorItem : IDispatch\n    {\n        [id(0x0385), propget]\n        HRESULT errorCode([out, retval] long *phr);\n\n        [id(0x0386), propget]\n        HRESULT errorDescription([out, retval] BSTR *pbstrDescription);\n\n        [id(0x0387), propget]\n        HRESULT errorContext([out, retval] VARIANT *pvarContext);\n\n        [id(0x0388), propget]\n        HRESULT remedy([out, retval] long *plRemedy);\n\n        [id(0x0389), propget]\n        HRESULT customUrl([out, retval] BSTR *pbstrCustomUrl);\n    }\n\n    [\n        odl,\n        uuid(a12dcf7d-14ab-4c1b-a8cd-63909f06025b),\n        dual,\n        oleautomation\n    ]\n    interface IWMPError : IDispatch\n    {\n        [id(0x0353)]\n        HRESULT clearErrorQueue();\n\n        [id(0x0354), propget]\n        HRESULT errorCount([out, retval] long *plNumErrors);\n\n        [id(0x0355), propget]\n        HRESULT Item(\n            [in] long dwIndex,\n            [out, retval] IWMPErrorItem **ppErrorItem);\n\n        [id(0x0356)]\n        HRESULT webHelp();\n    }\n\n    [\n        odl,\n        uuid(40897764-ceab-47be-ad4a-8e28537f9bbf),\n        dual,\n        oleautomation\n    ]\n    interface IWMPPlayerApplication : IDispatch\n    {\n        [id(0x044d)]\n        HRESULT switchToPlayerApplication();\n\n        [id(0x044e)]\n        HRESULT switchToControl();\n\n        [id(0x044f), propget]\n        HRESULT playerDocked([out, retval] VARIANT_BOOL* pbPlayerDocked);\n\n        [id(0x0450), propget]\n        HRESULT hasDisplay([out, retval] VARIANT_BOOL *pbHasDisplay);\n    }\n\n    [\n        odl,\n        uuid(d84cca99-cce2-11d2-9ecc-0000f8085981),\n        dual,\n        oleautomation\n    ]\n    interface IWMPCore : IDispatch\n    {\n        [id(0x0003)]\n        HRESULT close();\n\n        [id(0x0001), propget]\n        HRESULT URL([out, retval] BSTR *pbstrURL);\n        [id(0x0001), propput]\n        HRESULT URL([in] BSTR pbstrURL);\n\n        [id(0x0002), propget]\n        HRESULT openState([out, retval] WMPOpenState *pwmpos);\n\n        [id(0x000a), propget]\n        HRESULT playState([out, retval] WMPPlayState *pwmpps);\n\n        [id(0x0004), propget]\n        HRESULT controls([out, retval] IWMPControls **ppControl);\n\n        [id(0x0005), propget]\n        HRESULT settings([out, retval] IWMPSettings **ppSettings);\n\n        [id(0x0006), propget]\n        HRESULT currentMedia([out, retval] IWMPMedia **ppMedia);\n        [id(0x0006), propput]\n        HRESULT currentMedia([in] IWMPMedia *ppMedia);\n\n        [id(0x0008), propget]\n        HRESULT mediaCollection([out, retval] IWMPMediaCollection **ppMediaCollection);\n\n        [id(0x0009), propget]\n        HRESULT playlistCollection([out, retval] IWMPPlaylistCollection **ppPlaylistCollection);\n\n        [id(0x000b), propget]\n        HRESULT versionInfo([out, retval] BSTR *pbstrVersionInfo);\n\n        [id(0x000c)]\n        HRESULT launchURL([in] BSTR bstrURL);\n\n        [id(0x0007), propget]\n        HRESULT network([out, retval] IWMPNetwork **ppQNI);\n\n        [id(0x000d), propget]\n        HRESULT currentPlaylist([out, retval] IWMPPlaylist **ppPL);\n        [id(0x000d), propput]\n        HRESULT currentPlaylist([in] IWMPPlaylist *ppPL);\n\n        [id(0x000e), propget]\n        HRESULT cdromCollection([out, retval] IWMPCdromCollection **ppCdromCollection);\n\n        [id(0x000f), propget]\n        HRESULT closedCaption([out, retval] IWMPClosedCaption **ppClosedCaption);\n\n        [id(0x0010), propget]\n        HRESULT isOnline([out, retval] VARIANT_BOOL *pfOnline);\n\n        [id(0x0011), propget]\n        HRESULT Error([out, retval] IWMPError **ppError);\n\n        [id(0x0012), propget]\n        HRESULT status([out, retval] BSTR *pbstrStatus);\n    }\n\n    [\n        odl,\n        uuid(bc17e5B7-7561-4c18-bb90-17d485775659),\n        dual,\n        oleautomation\n    ]\n    interface IWMPCore2 : IWMPCore {\n        [id(0x0028), propget]\n        HRESULT dvd([out, retval] IWMPDVD **ppDVD);\n    }\n\n    [\n        odl,\n        uuid(7587c667-628f-499f-88e7-6A6f4e888464),\n        dual,\n        oleautomation\n    ]\n    interface IWMPCore3 : IWMPCore2\n    {\n        [id(0x0029)]\n        HRESULT newPlaylist(\n            [in] BSTR bstrName,\n            [in] BSTR bstrURL,\n            [out, retval] IWMPPlaylist **ppPlaylist);\n\n        [id(0x002a)]\n        HRESULT newMedia(\n            [in] BSTR bstrURL,\n            [out, retval] IWMPMedia **ppMedia);\n    }\n\n    [\n        odl,\n        uuid(6c497d62-8919-413c-82db-e935fb3ec584),\n        dual,\n        oleautomation\n    ]\n    interface IWMPPlayer4 : IWMPCore3\n    {\n        [id(0x0013), propget]\n        HRESULT enabled([out, retval] VARIANT_BOOL *pbEnabled);\n        [id(0x0013), propput]\n        HRESULT enabled([in] VARIANT_BOOL pbEnabled);\n\n        [id(0x0015), propget]\n        HRESULT fullScreen([out, retval] VARIANT_BOOL *pbFullScreen);\n        [id(0x0015), propput]\n        HRESULT fullScreen(VARIANT_BOOL pbFullScreen);\n\n        [id(0x0016), propget]\n        HRESULT enableContextMenu([out, retval] VARIANT_BOOL *pbEnableContextMenu);\n        [id(0x0016), propput]\n        HRESULT enableContextMenu(VARIANT_BOOL pbEnableContextMenu);\n\n        [id(0x0017), propput]\n        HRESULT uiMode([in] BSTR pbstrMode);\n        [id(0x0017), propget]\n        HRESULT uiMode([out, retval] BSTR *pbstrMode);\n\n        [id(0x0018), propget]\n        HRESULT stretchToFit([out, retval] VARIANT_BOOL *pbEnabled);\n        [id(0x0018), propput]\n        HRESULT stretchToFit([in] VARIANT_BOOL pbEnabled);\n\n        [id(0x0019), propget]\n        HRESULT windowlessVideo([out, retval] VARIANT_BOOL *pbEnabled);\n        [id(0x0019), propput]\n        HRESULT windowlessVideo([in] VARIANT_BOOL pbEnabled);\n\n        [id(0x001a), propget]\n        HRESULT isRemote([out, retval] VARIANT_BOOL *pvarfIsRemote);\n\n        [id(0x001b), propget]\n        HRESULT playerApplication([out, retval] IWMPPlayerApplication **ppIWMPPlayerApplication);\n\n        [id(0x001c)]\n        HRESULT openPlayer([in] BSTR bstrURL);\n    }\n\n    [\n      odl,\n      uuid(6BF52A4F-394A-11D3-B153-00C04F79FAA6),\n      dual,\n      oleautomation\n    ]\n    interface IWMPPlayer : IWMPCore {\n        [id(0x00000013), propget]\n        HRESULT enabled([out, retval] VARIANT_BOOL* pbEnabled);\n        [id(0x00000013), propput]\n        HRESULT enabled([in] VARIANT_BOOL pbEnabled);\n        [id(0x00000015), propget]\n        HRESULT fullScreen([out, retval] VARIANT_BOOL* pbFullScreen);\n        [id(0x00000015), propput]\n        HRESULT fullScreen(VARIANT_BOOL pbFullScreen);\n        [id(0x00000016), propget]\n        HRESULT enableContextMenu([out, retval] VARIANT_BOOL* pbEnableContextMenu);\n        [id(0x00000016), propput]\n        HRESULT enableContextMenu(VARIANT_BOOL pbEnableContextMenu);\n        [id(0x00000017), propput]\n        HRESULT uiMode([in] BSTR pbstrMode);\n        [id(0x00000017), propget]\n        HRESULT uiMode([out, retval] BSTR* pbstrMode);\n    };\n\n    [\n        odl,\n        uuid(82a2986c-0293-4fd0-b279-b21b86c058be),\n        oleautomation\n    ]\n    interface IWMPSyncDevice : IUnknown\n    {\n        [propget]\n        HRESULT friendlyName([out, retval] BSTR *name);\n\n        [propput]\n        HRESULT friendlyName([in] BSTR name);\n\n        [propget]\n        HRESULT deviceName([out, retval] BSTR *name);\n\n        [propget]\n        HRESULT deviceId([out, retval] BSTR *device);\n\n        [propget]\n        HRESULT partnershipIndex([out, retval] long *index);\n\n        [propget]\n        HRESULT connected([out, retval] VARIANT_BOOL *connected);\n\n        [propget]\n        HRESULT status([out, retval] WMPDeviceStatus *status);\n\n        [propget]\n        HRESULT syncState([out, retval] WMPSyncState *state);\n\n        [propget]\n        HRESULT progress([out, retval] long *progress);\n\n        HRESULT getItemInfo(\n            [in] BSTR name,\n            [out, retval] BSTR *val);\n\n        HRESULT createPartnership([in] VARIANT_BOOL showui);\n\n        HRESULT deletePartnership();\n\n        HRESULT start();\n\n        HRESULT stop();\n\n        HRESULT showSettings();\n\n        HRESULT isIdentical(\n            [in] IWMPSyncDevice *device,\n            [out, retval] VARIANT_BOOL *ret);\n    }\n\n    [\n        odl,\n        uuid(88afb4b2-140a-44d2-91e6-4543da467cd1),\n        oleautomation\n    ]\n    interface IWMPSyncDevice2 : IWMPSyncDevice\n    {\n        HRESULT setItemInfo(\n            [in] BSTR name,\n            [in] BSTR val);\n    }\n\n    [\n      odl,\n      uuid(56e2294f-69ed-4629-a869-aea72c0dcc2c),\n      oleautomation\n    ]\n    interface IWMPCdromRip : IUnknown\n    {\n        [propget]\n        HRESULT ripState([out, retval] WMPRipState *state);\n\n        [propget]\n        HRESULT ripProgress([out, retval] long *progress);\n\n        HRESULT startRip();\n\n        HRESULT stopRip();\n    }\n\n    [\n        odl,\n        uuid(bd94dbeb-417f-4928-aa06-087d56ed9b59),\n        oleautomation\n    ]\n    interface IWMPCdromBurn : IUnknown\n    {\n        HRESULT isAvailable(\n            [in] BSTR item,\n            [out, retval] VARIANT_BOOL *available);\n\n        HRESULT getItemInfo(\n            [in] BSTR item,\n            [out, retval] BSTR *val);\n\n        [propget]\n        HRESULT label([out, retval] BSTR *label);\n\n        [propput]\n        HRESULT label([in] BSTR label);\n\n        [propget]\n        HRESULT burnFormat([out, retval] WMPBurnFormat *format);\n\n        [propput]\n        HRESULT burnFormat([in] WMPBurnFormat format);\n\n        [propget]\n        HRESULT burnPlaylist([out, retval] IWMPPlaylist **playlist);\n\n        [propput]\n        HRESULT burnPlaylist([in] IWMPPlaylist *playlist);\n\n        HRESULT refreshStatus();\n\n        [propget]\n        HRESULT burnState([out, retval] WMPBurnState *state);\n\n        [propget]\n        HRESULT burnProgress([out, retval] long *progress);\n\n        HRESULT startBurn();\n\n        HRESULT stopBurn();\n\n        HRESULT erase();\n    }\n\n    [\n        odl,\n        uuid(3df47861-7df1-4c1f-a81b-4c26f0f7a7c6),\n        oleautomation\n    ]\n    interface IWMPLibrary : IUnknown\n    {\n        [propget]\n        HRESULT name([out, retval] BSTR *name);\n\n        [propget]\n        HRESULT type([out, retval] WMPLibraryType *type);\n\n        [propget]\n        HRESULT mediaCollection([out, retval] IWMPMediaCollection **collection);\n\n        HRESULT isIdentical(\n            [in] IWMPLibrary *wmplibrary,\n            [out, retval] VARIANT_BOOL *ret);\n    }\n\n    [\n        uuid(19a6627b-da9e-47c1-bb23-00b5e668236a),\n        odl\n    ]\n    interface IWMPEvents : IUnknown\n    {\n        void OpenStateChange([in] long state);\n\n        void PlayStateChange([in] long state);\n\n        void AudioLanguageChange([in] long lang);\n\n        void StatusChange();\n\n        void ScriptCommand(\n            [in] BSTR type,\n            [in] BSTR param);\n\n        void NewStream();\n\n        void Disconnect([in] long result);\n\n        void Buffering([in] VARIANT_BOOL start);\n\n        void Error();\n\n        void Warning(\n            [in] long warning,\n            [in] long param,\n            [in] BSTR description);\n\n        void EndOfStream([in] long result);\n\n        void PositionChange(\n            [in] double old_position,\n            [in] double new_position);\n\n        void MarkerHit([in] long marker);\n\n        void DurationUnitChange([in] long duration);\n\n        void CdromMediaChange([in] long num);\n\n        void PlaylistChange(\n            [in] IDispatch *playlist,\n            [in] WMPPlaylistChangeEventType change);\n\n        void CurrentPlaylistChange([in] WMPPlaylistChangeEventType change);\n\n        void CurrentPlaylistItemAvailable([in] BSTR item);\n\n        void MediaChange([in] IDispatch *item);\n\n        void CurrentMediaItemAvailable([in] BSTR name);\n\n        void CurrentItemChange([in] IDispatch *media);\n\n        void MediaCollectionChange();\n\n        void MediaCollectionAttributeStringAdded(\n            [in] BSTR name,\n            [in] BSTR val);\n\n        void MediaCollectionAttributeStringRemoved(\n            [in] BSTR name,\n            [in] BSTR val);\n\n        void MediaCollectionAttributeStringChanged(\n            [in] BSTR name,\n            [in] BSTR old_val,\n            [in] BSTR new_val);\n\n        void PlaylistCollectionChange();\n\n        void PlaylistCollectionPlaylistAdded([in] BSTR name);\n\n        void PlaylistCollectionPlaylistRemoved([in] BSTR name);\n\n        void PlaylistCollectionPlaylistSetAsDeleted(\n            [in] BSTR name,\n            [in] VARIANT_BOOL deleted);\n\n        void ModeChange(\n            [in] BSTR ModeName,\n            [in] VARIANT_BOOL value);\n\n        void MediaError([in] IDispatch *media);\n\n        void OpenPlaylistSwitch([in] IDispatch *item);\n\n        void DomainChange([in] BSTR domain);\n\n        void SwitchedToPlayerApplication();\n\n        void SwitchedToControl();\n\n        void PlayerDockedStateChange();\n\n        void PlayerReconnect();\n\n        void Click(\n            [in] short button,\n            [in] short shift_state,\n            [in] long x,\n            [in] long y);\n\n        void DoubleClick(\n            [in] short button,\n            [in] short shift_state,\n            [in] long fX,\n            [in] long fY);\n\n        void KeyDown(\n            [in] short keycode,\n            [in] short shift_state);\n\n        void KeyPress([in] short ascii);\n\n        void KeyUp(\n            [in] short keycode,\n            [in] short shift_state);\n\n        void MouseDown(\n            [in] short button,\n            [in] short nShiftState,\n            [in] long x,\n            [in] long y);\n\n        void MouseMove(\n            [in] short button,\n            [in] short shift_state,\n            [in] long x,\n            [in] long y);\n\n        void MouseUp(\n            [in] short button,\n            [in] short shift_state,\n            [in] long x,\n            [in] long y);\n    }\n\n    [\n        uuid(1e7601fa-47ea-4107-9ea9-9004ed9684ff),\n        odl\n    ]\n    interface IWMPEvents2 : IWMPEvents\n    {\n        void DeviceConnect([in] IWMPSyncDevice *device);\n\n        void DeviceDisconnect([in] IWMPSyncDevice *device);\n\n        void DeviceStatusChange(\n            [in] IWMPSyncDevice *device,\n            [in] WMPDeviceStatus status);\n\n        void DeviceSyncStateChange(\n            [in] IWMPSyncDevice *device,\n            [in] WMPSyncState state);\n\n        void DeviceSyncError(\n            [in] IWMPSyncDevice *device,\n            [in] IDispatch *media);\n\n        void CreatePartnershipComplete(\n            [in] IWMPSyncDevice *device,\n            [in] HRESULT result);\n    }\n\n    [\n        uuid(1f504270-a66b-4223-8e96-26a06c63d69f),\n        odl\n    ]\n    interface IWMPEvents3 : IWMPEvents2\n    {\n        void CdromRipStateChange(\n            [in] IWMPCdromRip *rip,\n            [in] WMPRipState state);\n\n        void CdromRipMediaError(\n            [in] IWMPCdromRip *rip,\n            [in] IDispatch *media);\n\n        void CdromBurnStateChange(\n            [in] IWMPCdromBurn *burn,\n            [in] WMPBurnState state);\n\n        void CdromBurnMediaError(\n            [in] IWMPCdromBurn *burn,\n            [in] IDispatch *media);\n\n        void CdromBurnError(\n            [in] IWMPCdromBurn *burn,\n            [in] HRESULT error);\n\n        void LibraryConnect(\n            [in] IWMPLibrary *wmplibrary);\n\n        void LibraryDisconnect(\n            [in] IWMPLibrary *wmplibrary);\n\n        void FolderScanStateChange(\n            [in] WMPFolderScanState state);\n\n        void StringCollectionChange(\n            [in] IDispatch *collection,\n            [in] WMPStringCollectionChangeEventType change,\n            [in] long index);\n\n        void MediaCollectionMediaAdded(\n            [in] IDispatch *media);\n\n        void MediaCollectionMediaRemoved(\n            [in] IDispatch *media);\n    }\n\n    [\n        uuid(26dabcfa-306b-404d-9a6f-630a8405048d),\n        odl\n    ]\n    interface IWMPEvents4 : IWMPEvents3\n    {\n        void DeviceEstimation(\n            [in] IWMPSyncDevice *device,\n            [in] HRESULT result,\n            [in] LONGLONG used_space,\n            [in] LONGLONG estimated_space);\n    }\n\n    [\n        hidden,\n        uuid(6bf52a51-394a-11d3-b153-00c04f79faa6)\n    ]\n    interface _WMPOCXEvents : IDispatch\n    {}\n\n    [\n        helpstring(\"Windows Media Player\"),\n        threading(apartment),\n        progid(\"WMPlayer.OCX.7\"),\n        vi_progid(\"WMPlayer.OCX\"),\n        uuid(6bf52a52-394a-11d3-b153-00c04f79faa6)\n     ]\n     coclass WindowsMediaPlayer\n     {\n        [default] interface IWMPPlayer4;\n        /* interface IWMPPlayer3; */\n        /* interface IWMPPlayer2; */\n        interface IWMPPlayer;\n        interface IWMPControls;\n        interface IWMPSettings;\n        interface IWMPPlaylist;\n        interface IWMPMedia;\n        interface IWMPMediaCollection;\n        interface IWMPPlaylistCollection;\n        interface IWMPCdromCollection;\n        interface IWMPError;\n        interface IWMPErrorItem;\n        /* interface IWMPErrorItem2; */\n        interface IWMPClosedCaption;\n        interface IWMPDVD;\n        /* interface IWMPControls2; */\n        /* interface IWMPMedia2; */\n        /* interface IWMPMedia3; */\n        /* interface IWMPMetadataPicture; */\n        /* interface IWMPMetadataText; */\n        /* interface IWMPSettings2; */\n        /* interface IWMPControls3; */\n        /* interface IWMPClosedCaption2; */\n        /* interface IWMPMediaCollection2; */\n        /* interface IWMPStringCollection2; */\n        [default, source] dispinterface _WMPOCXEvents;\n     }\n}\n"
  },
  {
    "path": "wine/windows/wmpids.h",
    "content": "/*\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n/* WMPCoreEvents */\n#define DISPID_WMPCOREEVENT_OPENSTATECHANGE     5001\n#define DISPID_WMPCOREEVENT_STATUSCHANGE        5002\n\n#define DISPID_WMPCOREEVENT_PLAYSTATECHANGE     5101\n\n#define DISPID_WMPCOREEVENT_MEDIACHANGE         5802\n#define DISPID_WMPCOREEVENT_CURRENTITEMCHANGE   5806\n"
  },
  {
    "path": "wine/windows/wmsbuffer.idl",
    "content": "/*\n * Copyright 2012 André Hentschel\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"objidl.idl\";\n\n[\n    object,\n    uuid(e1cd3524-03d7-11d2-9eed-006097d2d7cf),\n    pointer_default(unique),\n    local\n]\ninterface INSSBuffer : IUnknown\n{\n    HRESULT GetLength(\n        [out] DWORD *pdwLength);\n    HRESULT SetLength(\n        [in] DWORD dwLength);\n\n    HRESULT GetMaxLength(\n        [out] DWORD *pdwLength);\n\n    HRESULT GetBuffer(\n        [out] BYTE **ppdwBuffer);\n\n    HRESULT GetBufferAndLength(\n        [out] BYTE **ppdwBuffer,\n        [out] DWORD *pdwLength);\n}\n"
  },
  {
    "path": "wine/windows/wmsdk.h",
    "content": "/*\n * Copyright (C) 2016 Austin English\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n/* Unlikely to ever be needed on Wine, currently unimplemented */\n/* #include <winapifamily.h> */\n\n#include \"wmsdkidl.h\"\n\n/* Currently unimplemented */\n/* #include \"asferr.h\" */\n#include \"nserror.h\"\n"
  },
  {
    "path": "wine/windows/wmsdkidl.idl",
    "content": "/*\n * Copyright 2012 André Hentschel\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"wmsbuffer.idl\";\nimport \"drmexternals.idl\";\n\ntypedef struct _WMMediaType\n{\n    GUID majortype;\n    GUID subtype;\n    BOOL bFixedSizeSamples;\n    BOOL bTemporalCompression;\n    ULONG lSampleSize;\n    GUID formattype;\n    IUnknown *pUnk;\n    ULONG cbFormat;\n    [size_is(cbFormat)] BYTE *pbFormat;\n} WM_MEDIA_TYPE;\n\ntypedef struct _WMWriterStatistics\n{\n    QWORD qwSampleCount;\n    QWORD qwByteCount;\n    QWORD qwDroppedSampleCount;\n    QWORD qwDroppedByteCount;\n    DWORD dwCurrentBitrate;\n    DWORD dwAverageBitrate;\n    DWORD dwExpectedBitrate;\n    DWORD dwCurrentSampleRate;\n    DWORD dwAverageSampleRate;\n    DWORD dwExpectedSampleRate;\n} WM_WRITER_STATISTICS;\n\ntypedef struct _WMWriterStatisticsEx\n{\n    DWORD dwBitratePlusOverhead;\n    DWORD dwCurrentSampleDropRateInQueue;\n    DWORD dwCurrentSampleDropRateInCodec;\n    DWORD dwCurrentSampleDropRateInMultiplexer;\n    DWORD dwTotalSampleDropsInQueue;\n    DWORD dwTotalSampleDropsInCodec;\n    DWORD dwTotalSampleDropsInMultiplexer;\n} WM_WRITER_STATISTICS_EX;\n\ntypedef struct _WMReaderStatistics\n{\n    DWORD cbSize;\n    DWORD dwBandwidth;\n    DWORD cPacketsReceived;\n    DWORD cPacketsRecovered;\n    DWORD cPacketsLost;\n    WORD wQuality;\n} WM_READER_STATISTICS;\n\ntypedef struct _WMReaderClientInfo\n{\n    DWORD cbSize;\n    WCHAR *wszLang;\n    WCHAR *wszBrowserUserAgent;\n    WCHAR *wszBrowserWebPage;\n    QWORD qwReserved;\n    LPARAM *pReserved;\n    WCHAR *wszHostExe;\n    QWORD qwHostVersion;\n    WCHAR *wszPlayerUserAgent;\n} WM_READER_CLIENTINFO;\n\ntypedef enum WMT_ATTR_DATATYPE\n{\n    WMT_TYPE_DWORD      = 0,\n    WMT_TYPE_STRING     = 1,\n    WMT_TYPE_BINARY     = 2,\n    WMT_TYPE_BOOL       = 3,\n    WMT_TYPE_QWORD      = 4,\n    WMT_TYPE_WORD       = 5,\n    WMT_TYPE_GUID       = 6,\n} WMT_ATTR_DATATYPE;\n\ntypedef enum WMT_STATUS\n{\n    WMT_ERROR                       =  0,\n    WMT_OPENED                      =  1,\n    WMT_BUFFERING_START             =  2,\n    WMT_BUFFERING_STOP              =  3,\n    WMT_EOF                         =  4,\n    WMT_END_OF_FILE                 =  4,\n    WMT_END_OF_SEGMENT              =  5,\n    WMT_END_OF_STREAMING            =  6,\n    WMT_LOCATING                    =  7,\n    WMT_CONNECTING                  =  8,\n    WMT_NO_RIGHTS                   =  9,\n    WMT_MISSING_CODEC               = 10,\n    WMT_STARTED                     = 11,\n    WMT_STOPPED                     = 12,\n    WMT_CLOSED                      = 13,\n    WMT_STRIDING                    = 14,\n    WMT_TIMER                       = 15,\n    WMT_INDEX_PROGRESS              = 16,\n    WMT_SAVEAS_START                = 17,\n    WMT_SAVEAS_STOP                 = 18,\n    WMT_NEW_SOURCEFLAGS             = 19,\n    WMT_NEW_METADATA                = 20,\n    WMT_BACKUPRESTORE_BEGIN         = 21,\n    WMT_SOURCE_SWITCH               = 22,\n    WMT_ACQUIRE_LICENSE             = 23,\n    WMT_INDIVIDUALIZE               = 24,\n    WMT_NEEDS_INDIVIDUALIZATION     = 25,\n    WMT_NO_RIGHTS_EX                = 26,\n    WMT_BACKUPRESTORE_END           = 27,\n    WMT_BACKUPRESTORE_CONNECTING    = 28,\n    WMT_BACKUPRESTORE_DISCONNECTING = 29,\n    WMT_ERROR_WITHURL               = 30,\n    WMT_RESTRICTED_LICENSE          = 31,\n    WMT_CLIENT_CONNECT              = 32,\n    WMT_CLIENT_DISCONNECT           = 33,\n    WMT_NATIVE_OUTPUT_PROPS_CHANGED = 34,\n    WMT_RECONNECT_START             = 35,\n    WMT_RECONNECT_END               = 36,\n    WMT_CLIENT_CONNECT_EX           = 37,\n    WMT_CLIENT_DISCONNECT_EX        = 38,\n    WMT_SET_FEC_SPAN                = 39,\n    WMT_PREROLL_READY               = 40,\n    WMT_PREROLL_COMPLETE            = 41,\n    WMT_CLIENT_PROPERTIES           = 42,\n    WMT_LICENSEURL_SIGNATURE_STATE  = 43,\n    WMT_INIT_PLAYLIST_BURN          = 44,\n    WMT_TRANSCRYPTOR_INIT           = 45,\n    WMT_TRANSCRYPTOR_SEEKED         = 46,\n    WMT_TRANSCRYPTOR_READ           = 47,\n    WMT_TRANSCRYPTOR_CLOSED         = 48,\n    WMT_PROXIMITY_RESULT            = 49,\n    WMT_PROXIMITY_COMPLETED         = 50,\n    WMT_CONTENT_ENABLER             = 51\n} WMT_STATUS;\n\ntypedef enum WMT_STREAM_SELECTION\n{\n    WMT_OFF               = 0,\n    WMT_CLEANPOINT_ONLY   = 1,\n    WMT_ON                = 2,\n} WMT_STREAM_SELECTION;\n\ntypedef enum WMT_VERSION\n{\n    WMT_VER_4_0 = 0x00040000,\n    WMT_VER_7_0 = 0x00070000,\n    WMT_VER_8_0 = 0x00080000,\n    WMT_VER_9_0 = 0x00090000\n} WMT_VERSION;\n\ntypedef enum WMT_PLAY_MODE\n{\n    WMT_PLAY_MODE_AUTOSELECT,\n    WMT_PLAY_MODE_LOCAL,\n    WMT_PLAY_MODE_DOWNLOAD,\n    WMT_PLAY_MODE_STREAMING\n} WMT_PLAY_MODE;\n\ntypedef enum tagWMT_OFFSET_FORMAT\n{\n    WMT_OFFSET_FORMAT_100NS,\n    WMT_OFFSET_FORMAT_FRAME_NUMBERS,\n    WMT_OFFSET_FORMAT_PLAYLIST_OFFSET,\n    WMT_OFFSET_FORMAT_TIMECODE,\n    WMT_OFFSET_FORMAT_100NS_APPROXIMATE\n} WMT_OFFSET_FORMAT;\n\ntypedef enum WMT_CODEC_INFO_TYPE\n{\n    WMT_CODECINFO_AUDIO   = 0,\n    WMT_CODECINFO_VIDEO   = 1,\n    WMT_CODECINFO_UNKNOWN = 0xFFFFFFFF,\n} WMT_CODEC_INFO_TYPE;\n\ntypedef enum WMT_PROXY_SETTINGS\n{\n    WMT_PROXY_SETTING_NONE     = 0,\n    WMT_PROXY_SETTING_MANUAL   = 1,\n    WMT_PROXY_SETTING_AUTO     = 2,\n    WMT_PROXY_SETTING_BROWSER  = 3,\n    WMT_PROXY_SETTING_MAX\n} WMT_PROXY_SETTINGS;\n\ntypedef enum tagWMT_STORAGE_FORMAT\n{\n    WMT_Storage_Format_MP3  = 0,\n    WMT_Storage_Format_V1   = 1\n} WMT_STORAGE_FORMAT;\n\n#include <pshpack2.h>\ntypedef struct _WMStreamPrioritizationRecord\n{\n    WORD wStreamNumber;\n    BOOL fMandatory;\n} WM_STREAM_PRIORITY_RECORD;\n#include <poppack.h>\n\ntypedef struct _WM_PORT_NUMBER_RANGE\n{\n    WORD wPortBegin;\n    WORD wPortEnd;\n} WM_PORT_NUMBER_RANGE;\n\ntypedef LPCWSTR LPCWSTR_WMSDK_TYPE_SAFE;\n\n[\n    object,\n    uuid(6d7cdc70-9888-11d3-8edc-00c04f6109cf),\n    pointer_default(unique),\n    local\n]\ninterface IWMStatusCallback : IUnknown\n{\n    HRESULT OnStatus(\n        [in] WMT_STATUS Status,\n        [in] HRESULT hr,\n        [in] WMT_ATTR_DATATYPE dwType,\n        [in] BYTE *pValue,\n        [in] void *pvContext);\n}\n\n[\n    object,\n    uuid(96406bd8-2b2b-11d3-b36b-00c04f6108ff),\n    pointer_default(unique),\n    local\n]\ninterface IWMReaderCallback : IWMStatusCallback\n{\n    HRESULT OnSample(\n        [in] DWORD dwOutputNum,\n        [in] QWORD cnsSampleTime,\n        [in] QWORD cnsSampleDuration,\n        [in] DWORD dwFlags,\n        [in] INSSBuffer *pSample,\n        [in] void *pvContext);\n}\n\n[\n    object,\n    uuid(96406Bdd-2b2b-11d3-b36b-00c04f6108ff),\n    pointer_default(unique),\n    local\n]\ninterface IWMStreamList : IUnknown\n{\n    HRESULT GetStreams(\n        [out, size_is(*pcStreams)] WORD *pwStreamNumArray,\n        [in, out] WORD *pcStreams);\n\n    HRESULT AddStream([in] WORD wStreamNum);\n    HRESULT RemoveStream([in] WORD wStreamNum);\n}\n\n[\n    object,\n    uuid(96406Bde-2b2b-11d3-b36b-00c04f6108ff),\n    pointer_default(unique),\n    local\n]\ninterface IWMMutualExclusion : IWMStreamList\n{\n    HRESULT GetType([out] GUID *pguidType);\n    HRESULT SetType([in] REFGUID guidType);\n}\n\n[\n    object,\n    uuid(ad694af1-f8d9-42f8-bc47-70311b0c4f9e),\n    pointer_default(unique),\n    local\n]\ninterface IWMBandwidthSharing : IWMStreamList\n{\n    HRESULT GetType([out] GUID *guid);\n    HRESULT SetType([in] REFGUID guid);\n\n    HRESULT GetBandwidth(\n        [out] DWORD *bitrate,\n        [out] DWORD *buffer);\n\n    HRESULT SetBandwidth(\n        [in] DWORD bitrate,\n        [in] DWORD buffer);\n}\n\n[\n    object,\n    uuid(8c1c6090-f9a8-4748-8ec3-dd1108ba1e77),\n    pointer_default(unique),\n    local\n]\ninterface IWMStreamPrioritization : IUnknown\n{\n    HRESULT GetPriorityRecords(\n        [out] WM_STREAM_PRIORITY_RECORD *array,\n        [in, out] WORD *records);\n\n    HRESULT SetPriorityRecords(\n        [in] WM_STREAM_PRIORITY_RECORD *array,\n        [in] WORD records);\n}\n\n[\n    object,\n    uuid(96406Bdc-2b2b-11d3-b36b-00c04f6108ff),\n    pointer_default(unique),\n    local\n]\ninterface IWMStreamConfig : IUnknown\n{\n    HRESULT GetStreamType([out] GUID *pguidStreamType);\n    HRESULT GetStreamNumber([out] WORD *pwStreamNum);\n    HRESULT SetStreamNumber([in] WORD wStreamNum);\n\n    HRESULT GetStreamName(\n        [out, size_is(*pcchStreamName)] WCHAR *pwszStreamName,\n        [in, out] WORD *pcchStreamName);\n\n    HRESULT SetStreamName([in] LPCWSTR_WMSDK_TYPE_SAFE pwszStreamName);\n\n    HRESULT GetConnectionName(\n        [out, size_is(*pcchInputName)] WCHAR *pwszInputName,\n        [in, out] WORD *pcchInputName);\n\n    HRESULT SetConnectionName([in] LPCWSTR_WMSDK_TYPE_SAFE pwszInputName);\n    HRESULT GetBitrate([out] DWORD *pdwBitrate);\n    HRESULT SetBitrate([in] DWORD pdwBitrate);\n    HRESULT GetBufferWindow([out] DWORD *pmsBufferWindow);\n    HRESULT SetBufferWindow([in] DWORD msBufferWindow);\n}\n\n[\n    object,\n    uuid(96406bdb-2b2b-11d3-b36b-00c04f6108ff),\n    pointer_default(unique),\n    local\n]\ninterface IWMProfile : IUnknown\n{\n    HRESULT GetVersion(\n        [out] WMT_VERSION *pdwVersion);\n\n    HRESULT GetName(\n        [out, size_is(*pcchName)] WCHAR *pwszName,\n        [in, out] DWORD *pcchName);\n\n    HRESULT SetName(\n        [in] const WCHAR *pwszName);\n\n    HRESULT GetDescription(\n        [out, size_is(*pcchDescription)] WCHAR *pwszDescription,\n        [in, out] DWORD *pcchDescription);\n\n    HRESULT SetDescription(\n        [in] const WCHAR *pwszDescription);\n\n    HRESULT GetStreamCount(\n        [out] DWORD *pcStreams);\n\n    HRESULT GetStream(\n        [in] DWORD dwStreamIndex,\n        [out] IWMStreamConfig **ppConfig);\n\n    HRESULT GetStreamByNumber(\n        [in] WORD wStreamNum,\n        [out] IWMStreamConfig **ppConfig);\n\n    HRESULT RemoveStream(\n        [in] IWMStreamConfig *pConfig);\n\n    HRESULT RemoveStreamByNumber(\n        [in] WORD wStreamNum);\n\n    HRESULT AddStream(\n        [in] IWMStreamConfig *pConfig);\n\n    HRESULT ReconfigStream(\n        [in] IWMStreamConfig *pConfig);\n\n    HRESULT CreateNewStream(\n        [in] REFGUID guidStreamType,\n        [out] IWMStreamConfig **ppConfig);\n\n    HRESULT GetMutualExclusionCount(\n        [out] DWORD *pcME);\n\n    HRESULT GetMutualExclusion(\n        [in] DWORD dwMEIndex,\n        [out] IWMMutualExclusion **ppME);\n\n    HRESULT RemoveMutualExclusion(\n        [in] IWMMutualExclusion *pME);\n\n    HRESULT AddMutualExclusion(\n        [in] IWMMutualExclusion *pME);\n\n    HRESULT CreateNewMutualExclusion(\n        [out] IWMMutualExclusion **ppME);\n}\n\n[\n    object,\n    uuid(07e72d33-d94e-4be7-8843-60ae5ff7e5f5),\n    pointer_default(unique),\n    local\n]\ninterface IWMProfile2 : IWMProfile\n{\n    HRESULT GetProfileID([out] GUID *guid);\n}\n\n[\n    object,\n    uuid(00ef96cc-a461-4546-8bcd-c9a28f0e06f5),\n    pointer_default(unique),\n    local\n]\ninterface IWMProfile3 : IWMProfile2\n{\n    HRESULT GetStorageFormat([out] WMT_STORAGE_FORMAT *storage);\n    HRESULT SetStorageFormat([in] WMT_STORAGE_FORMAT storage);\n\n    HRESULT GetBandwidthSharingCount([out] DWORD *count);\n\n    HRESULT GetBandwidthSharing(\n        [in] DWORD index,\n        [out] IWMBandwidthSharing **bandwidth);\n\n    HRESULT RemoveBandwidthSharing([in] IWMBandwidthSharing *bandwidth);\n\n    HRESULT AddBandwidthSharing([in] IWMBandwidthSharing *bandwidth);\n\n    HRESULT CreateNewBandwidthSharing([out] IWMBandwidthSharing **bandwidth);\n\n    HRESULT GetStreamPrioritization([out] IWMStreamPrioritization **stream);\n\n    HRESULT SetStreamPrioritization([in] IWMStreamPrioritization *stream);\n\n    HRESULT RemoveStreamPrioritization();\n\n    HRESULT CreateNewStreamPrioritization([out] IWMStreamPrioritization **stream);\n\n    HRESULT GetExpectedPacketCount(\n        [in] QWORD duration,\n        [out] QWORD *packets);\n}\n\n[\n    object,\n    uuid(d16679f2-6ca0-472d-8d31-2f5d55aee155),\n    pointer_default(unique),\n    local\n]\ninterface IWMProfileManager : IUnknown\n{\n    HRESULT CreateEmptyProfile(\n        [in] WMT_VERSION dwVersion,\n        [out] IWMProfile **ppProfile);\n\n    HRESULT LoadProfileByID(\n        [in] REFGUID guidProfile,\n        [out] IWMProfile **ppProfile);\n\n    HRESULT LoadProfileByData(\n        [in] const WCHAR *pwszProfile,\n        [out] IWMProfile **ppProfile);\n\n    HRESULT SaveProfile(\n        [in] IWMProfile *pIWMProfile,\n        [in] WCHAR *pwszProfile,\n        [in, out] DWORD *pdwLength);\n\n    HRESULT GetSystemProfileCount(\n        [out] DWORD *pcProfiles);\n\n    HRESULT LoadSystemProfile(\n        [in] DWORD dwProfileIndex,\n        [out] IWMProfile **ppProfile);\n}\n\n[\n    object,\n    uuid(7a924e51-73c1-494d-8019-23d37ed9b89a),\n    pointer_default(unique),\n    local\n]\ninterface IWMProfileManager2 : IWMProfileManager\n{\n    HRESULT GetSystemProfileVersion(WMT_VERSION *version);\n    HRESULT SetSystemProfileVersion(WMT_VERSION version);\n};\n\ncpp_quote(\"HRESULT WINAPI WMCreateProfileManager(IWMProfileManager**);\")\n\n[\n    object,\n    uuid(a970f41e-34de-4a98-b3ba-e4b3ca7528f0),\n    pointer_default(unique),\n    local\n]\ninterface IWMCodecInfo : IUnknown\n{\n    HRESULT GetCodecInfoCount(\n        [in] REFGUID guid,\n        [out] DWORD *count);\n\n    HRESULT GetCodecFormatCount(\n        [in] REFGUID guid,\n        [in] DWORD codecindex,\n        [out] DWORD *formatcount);\n\n    HRESULT GetCodecFormat(\n        [in] REFGUID guid,\n        [in] DWORD codecindex,\n        [in] DWORD formatindex,\n        [out] IWMStreamConfig **streamconfig);\n}\n\n[\n    object,\n    uuid(aa65e273-b686-4056-91ec-dd768d4df710),\n    pointer_default(unique),\n    local\n]\ninterface IWMCodecInfo2 : IWMCodecInfo\n{\n    HRESULT GetCodecName(\n        [in] REFGUID guid,\n        [in] DWORD codecindex,\n        [out, size_is(*namesize)] WCHAR *name,\n        [in, out] DWORD *namesize);\n\n    HRESULT GetCodecFormatDesc(\n        [in] REFGUID guid,\n        [in] DWORD codecindex,\n        [in] DWORD formatindex,\n        [out] IWMStreamConfig **streamconfig,\n        [out, size_is(*descrsize)] WCHAR *description,\n        [in, out] DWORD *descrsize);\n}\n\n[\n    object,\n    uuid(7e51f487-4d93-4f98-8ab4-27d0565adc51),\n    pointer_default(unique),\n    local\n]\ninterface IWMCodecInfo3 : IWMCodecInfo2\n{\n    HRESULT GetCodecFormatProp(\n        [in] REFGUID guid,\n        [in] DWORD codecindex,\n        [in] DWORD formatindex,\n        [in] const WCHAR *name,\n        [out] WMT_ATTR_DATATYPE *type,\n        [out, size_is(*size)] BYTE *value,\n        [in, out] DWORD *size);\n\n    HRESULT GetCodecProp(\n        [in] REFGUID guid,\n        [in] DWORD codecindex,\n        [in] const WCHAR *name,\n        [out] WMT_ATTR_DATATYPE *type,\n        [out, size_is(*size)] BYTE *value,\n        [in, out] DWORD *size);\n\n    HRESULT SetCodecEnumerationSetting(\n        [in] REFGUID guid,\n        [in] DWORD codecindex,\n        [in] const WCHAR *name,\n        [in] WMT_ATTR_DATATYPE type,\n        [in, size_is(size)] const BYTE *value,\n        [in] DWORD size);\n\n    HRESULT GetCodecEnumerationSetting(\n        [in] REFGUID guid,\n        [in] DWORD codecindex,\n        [in] const WCHAR *name,\n        [out] WMT_ATTR_DATATYPE *type,\n        [out, size_is(*size)] BYTE *value,\n        [in, out] DWORD *size);\n}\n\ncpp_quote(\"static const WCHAR g_wszNumPasses[] = {'_','P','A','S','S','E','S','U','S','E','D',0};\")\ncpp_quote(\"static const WCHAR g_wszVBREnabled[] = {'_','V','B','R','E','N','A','B','L','E','D',0};\")\n\n[\n    object,\n    uuid(96406bce-2b2b-11d3-b36b-00c04f6108ff),\n    pointer_default(unique),\n    local\n]\ninterface IWMMediaProps : IUnknown\n{\n    HRESULT GetType(\n        [out] GUID *pguidType);\n\n    HRESULT GetMediaType(\n        [out] WM_MEDIA_TYPE *pType,\n        [in, out] DWORD *pcbType);\n\n    HRESULT SetMediaType(\n        [in] WM_MEDIA_TYPE *pType);\n}\n\n[\n    object,\n    uuid(96406bd7-2b2b-11d3-b36b-00c04f6108ff),\n    pointer_default(unique),\n    local\n]\ninterface IWMOutputMediaProps : IWMMediaProps\n{\n    HRESULT GetStreamGroupName(\n        [out, size_is(*pcchName)] WCHAR *pwszName,\n        [in, out] WORD *pcchName);\n\n    HRESULT GetConnectionName(\n        [out, size_is(*pcchName)] WCHAR *pwszName,\n        [in, out] WORD *pcchName);\n}\n\n[\n    object,\n    uuid(96406bd9-2b2b-11d3-b36b-00c04f6108ff),\n    pointer_default(unique),\n    local\n]\ninterface IWMMetadataEditor : IUnknown\n{\n    HRESULT Open(\n        [in] const WCHAR *pwszFilename);\n\n    HRESULT Close();\n\n    HRESULT Flush();\n}\n\n[\n    object,\n    uuid(96406bd6-2b2b-11d3-b36b-00c04f6108ff),\n    pointer_default(unique),\n    local\n]\ninterface IWMReader : IUnknown\n{\n    HRESULT Open(\n        [in] const WCHAR *pwszURL,\n        [in] IWMReaderCallback *pCallback,\n        [in] void *pvContext);\n\n    HRESULT Close();\n\n    HRESULT GetOutputCount(\n        [out] DWORD *pcOutputs);\n\n    HRESULT GetOutputProps(\n        [in] DWORD dwOutputNum,\n        [out] IWMOutputMediaProps **ppOutput);\n\n    HRESULT SetOutputProps(\n        [in] DWORD dwOutputNum,\n        [in] IWMOutputMediaProps *pOutput);\n\n    HRESULT GetOutputFormatCount(\n        [in] DWORD dwOutputNumber,\n        [out] DWORD *pcFormats);\n\n    HRESULT GetOutputFormat(\n        [in] DWORD dwOutputNumber,\n        [in] DWORD dwFormatNumber,\n        [out] IWMOutputMediaProps** ppProps);\n\n    HRESULT Start(\n        [in] QWORD cnsStart,\n        [in] QWORD cnsDuration,\n        [in] float fRate,\n        [in] void *pvContext);\n\n    HRESULT Stop();\n\n    HRESULT Pause();\n\n    HRESULT Resume();\n}\n\n[\n    object,\n    uuid(e5b7ca9a-0f1c-4f66-9002-74ec50d8b304),\n    pointer_default(unique),\n    local\n]\ninterface IWMPlayerHook : IUnknown\n{\n    HRESULT PreDecode();\n}\n\n[\n    object,\n    uuid(96406bea-2b2b-11d3-b36b-00c04f6108ff),\n    pointer_default(unique),\n    local\n]\ninterface IWMReaderAdvanced : IUnknown\n{\n    HRESULT SetUserProvidedClock(\n        [in] BOOL fUserClock);\n\n    HRESULT GetUserProvidedClock(\n        [out] BOOL *pfUserClock);\n\n    HRESULT DeliverTime(\n        [in] QWORD cnsTime);\n\n    HRESULT SetManualStreamSelection(\n        [in] BOOL fSelection);\n\n    HRESULT GetManualStreamSelection(\n        [out] BOOL *pfSelection);\n\n    HRESULT SetStreamsSelected(\n        [in] WORD cStreamCount,\n        [in] WORD *pwStreamNumbers,\n        [in] WMT_STREAM_SELECTION *pSelections);\n\n    HRESULT GetStreamSelected(\n        [in] WORD wStreamNum,\n        [out] WMT_STREAM_SELECTION *pSelection);\n\n    HRESULT SetReceiveSelectionCallbacks(\n        [in] BOOL fGetCallbacks);\n\n    HRESULT GetReceiveSelectionCallbacks(\n        [out] BOOL *pfGetCallbacks);\n\n    HRESULT SetReceiveStreamSamples(\n        [in] WORD wStreamNum,\n        [in] BOOL fReceiveStreamSamples);\n\n    HRESULT GetReceiveStreamSamples(\n        [in] WORD wStreamNum,\n        [out] BOOL *pfReceiveStreamSamples);\n\n    HRESULT SetAllocateForOutput(\n        [in] DWORD dwOutputNum,\n        [in] BOOL fAllocate);\n\n    HRESULT GetAllocateForOutput(\n        [in] DWORD dwOutputNum,\n        [out] BOOL *pfAllocate);\n\n    HRESULT SetAllocateForStream(\n        [in] WORD wStreamNum,\n        [in] BOOL fAllocate);\n\n    HRESULT GetAllocateForStream(\n        [in] WORD dwStreamNum,\n        [out] BOOL *pfAllocate);\n\n    HRESULT GetStatistics(\n        [in, out] WM_READER_STATISTICS *pStatistics);\n\n    HRESULT SetClientInfo(\n        [in] WM_READER_CLIENTINFO *pClientInfo);\n\n    HRESULT GetMaxOutputSampleSize(\n        [in] DWORD dwOutput,\n        [out] DWORD *pcbMax);\n\n    HRESULT GetMaxStreamSampleSize(\n        [in] WORD wStream,\n        [out] DWORD *pcbMax);\n\n    HRESULT NotifyLateDelivery(\n        QWORD cnsLateness);\n}\n\n[\n    object,\n    uuid(ae14a945-b90c-4d0d-9127-80d665f7d73e),\n    pointer_default(unique),\n    local\n]\ninterface IWMReaderAdvanced2 : IWMReaderAdvanced\n{\n    HRESULT SetPlayMode(\n        [in] WMT_PLAY_MODE Mode);\n\n    HRESULT GetPlayMode(\n        [out] WMT_PLAY_MODE *pMode);\n\n    HRESULT GetBufferProgress(\n        [out] DWORD *pdwPercent,\n        [out] QWORD *pcnsBuffering);\n\n    HRESULT GetDownloadProgress(\n        [out] DWORD *pdwPercent,\n        [out] QWORD *pqwBytesDownloaded,\n        [out] QWORD *pcnsDownload);\n\n    HRESULT GetSaveAsProgress(\n        [out] DWORD *pdwPercent);\n\n    HRESULT SaveFileAs(\n        [in] const WCHAR *pwszFilename);\n\n    HRESULT GetProtocolName(\n        [out, size_is(*pcchProtocol)] WCHAR *pwszProtocol,\n        [in, out] DWORD *pcchProtocol);\n\n    HRESULT StartAtMarker(\n        [in] WORD wMarkerIndex,\n        [in] QWORD cnsDuration,\n        [in] float fRate,\n        [in] void *pvContext);\n\n    HRESULT GetOutputSetting(\n        [in] DWORD dwOutputNum,\n        [in] LPCWSTR pszName,\n        [out] WMT_ATTR_DATATYPE *pType,\n        [out, size_is(*pcbLength)] BYTE *pValue,\n        [in, out] WORD *pcbLength);\n\n    HRESULT SetOutputSetting(\n        [in] DWORD dwOutputNum,\n        [in] LPCWSTR pszName,\n        [in] WMT_ATTR_DATATYPE Type,\n        [in, size_is(cbLength)] const BYTE *pValue,\n        [in] WORD cbLength);\n\n    HRESULT Preroll(\n        [in] QWORD cnsStart,\n        [in] QWORD cnsDuration,\n        [in] float fRate);\n\n    HRESULT SetLogClientID(\n        [in] BOOL fLogClientID);\n\n    HRESULT GetLogClientID(\n        [out] BOOL *pfLogClientID);\n\n    HRESULT StopBuffering();\n\n    HRESULT OpenStream(\n        [in] IStream *pStream,\n        [in] IWMReaderCallback *pCallback,\n        [in] void *pvContext);\n}\n\n[\n    object,\n    uuid(5dc0674b-f04B-4a4e-9f2a-b1afde2c8100),\n    pointer_default(unique),\n    local\n]\ninterface IWMReaderAdvanced3 : IWMReaderAdvanced2\n{\n    HRESULT StopNetStreaming();\n\n    HRESULT StartAtPosition(\n        [in] WORD wStreamNum,\n        [in] void *pvOffsetStart,\n        [in] void *pvDuration,\n        [in] WMT_OFFSET_FORMAT dwOffsetFormat,\n        [in] float fRate,\n        [in] void *pvContext);\n}\n\n[\n    object,\n    uuid(945a76a2-12ae-4d48-bd3c-cd1d90399b85),\n    pointer_default(unique),\n    local\n]\ninterface IWMReaderAdvanced4 : IWMReaderAdvanced3\n{\n    HRESULT GetLanguageCount(\n        [in] DWORD dwOutputNum,\n        [out] WORD *pwLanguageCount);\n\n    HRESULT GetLanguage(\n        [in] DWORD dwOutputNum,\n        [in] WORD wLanguage,\n        [out, size_is(*pcchLanguageStringLength)] WCHAR *pwszLanguageString,\n        [in, out] WORD *pcchLanguageStringLength);\n\n    HRESULT GetMaxSpeedFactor(\n        [out] double *pdblFactor);\n\n    HRESULT IsUsingFastCache(\n        [out] BOOL *pfUsingFastCache);\n\n    HRESULT AddLogParam(\n        [in] LPCWSTR wszNameSpace,\n        [in] LPCWSTR wszName,\n        [in] LPCWSTR wszValue);\n\n    HRESULT SendLogParams();\n\n    HRESULT CanSaveFileAs(\n        [out] BOOL *pfCanSave);\n\n    HRESULT CancelSaveFileAs();\n\n    HRESULT GetURL(\n        [out, size_is(*pcchURL)] WCHAR *pwszURL,\n        [in, out] DWORD *pcchURL);\n}\n\n[\n    object,\n    uuid(24c44db0-55d1-49ae-a5cc-f13815e36363),\n    pointer_default(unique),\n    local\n]\ninterface IWMReaderAdvanced5 : IWMReaderAdvanced4\n{\n    HRESULT SetPlayerHook(\n        [in] DWORD dwOutputNum,\n        [in] IWMPlayerHook *pHook);\n}\n\n[\n    object,\n    uuid(18a2e7f8-428f-4acd-8a00-e64639bc93de),\n    pointer_default(unique),\n    local\n]\ninterface IWMReaderAdvanced6 : IWMReaderAdvanced5\n{\n    HRESULT SetProtectStreamSamples(\n        [in, size_is(cbCertificate)] BYTE *pbCertificate,\n        [in] DWORD cbCertificate,\n        [in] DWORD dwCertificateType,\n        [in] DWORD dwFlags,\n        [out, size_is(*pcbInitializationVector)] BYTE *pbInitializationVector,\n        [in, out] DWORD *pcbInitializationVector);\n}\n\n[\n    object,\n    uuid(9397f121-7705-4dc9-b049-98b698188414),\n    pointer_default( unique ),\n    local\n]\ninterface IWMSyncReader : IUnknown\n{\n    HRESULT Open(\n        [in] const WCHAR *pwszFilename);\n\n    HRESULT Close();\n\n    HRESULT SetRange(\n        [in] QWORD cnsStartTime,\n        [in] LONGLONG cnsDuration);\n\n    HRESULT SetRangeByFrame(\n        [in] WORD wStreamNum,\n        [in] QWORD qwFrameNumber,\n        [in] LONGLONG cFramesToRead);\n\n    HRESULT GetNextSample(\n        [in] WORD wStreamNum,\n        [out] INSSBuffer **ppSample,\n        [out] QWORD *pcnsSampleTime,\n        [out] QWORD *pcnsDuration,\n        [out] DWORD *pdwFlags,\n        [out] DWORD *pdwOutputNum,\n        [out] WORD *pwStreamNum);\n\n    HRESULT SetStreamsSelected(\n        [in] WORD cStreamCount,\n        [in] WORD *pwStreamNumbers,\n        [in] WMT_STREAM_SELECTION *pSelections);\n\n    HRESULT GetStreamSelected(\n        [in] WORD wStreamNum,\n        [out] WMT_STREAM_SELECTION *pSelection);\n\n    HRESULT SetReadStreamSamples(\n        [in] WORD wStreamNum,\n        [in] BOOL fCompressed);\n\n    HRESULT GetReadStreamSamples(\n        [in] WORD wStreamNum,\n        [out] BOOL *pfCompressed);\n\n    HRESULT GetOutputSetting(\n        [in] DWORD dwOutputNum,\n        [in] LPCWSTR pszName,\n        [out] WMT_ATTR_DATATYPE *pType,\n        [out, size_is(*pcbLength)] BYTE *pValue,\n        [in, out] WORD *pcbLength);\n\n    HRESULT SetOutputSetting(\n        [in] DWORD dwOutputNum,\n        [in] LPCWSTR pszName,\n        [in] WMT_ATTR_DATATYPE Type,\n        [in, size_is(cbLength)] const BYTE *pValue,\n        [in] WORD cbLength);\n\n    HRESULT GetOutputCount(\n        [out] DWORD *pcOutputs);\n\n    HRESULT GetOutputProps(\n        [in] DWORD dwOutputNum,\n        [out] IWMOutputMediaProps **ppOutput);\n\n    HRESULT SetOutputProps(\n        [in] DWORD dwOutputNum,\n        [in] IWMOutputMediaProps *pOutput);\n\n    HRESULT GetOutputFormatCount(\n        [in] DWORD dwOutputNum,\n        [out] DWORD *pcFormats);\n\n    HRESULT GetOutputFormat(\n        [in] DWORD dwOutputNum,\n        [in] DWORD dwFormatNum,\n        [out] IWMOutputMediaProps **ppProps);\n\n    HRESULT GetOutputNumberForStream(\n        [in] WORD wStreamNum,\n        [out] DWORD *pdwOutputNum);\n\n    HRESULT GetStreamNumberForOutput(\n        [in] DWORD dwOutputNum,\n        [out] WORD *pwStreamNum);\n\n    HRESULT GetMaxOutputSampleSize(\n        [in] DWORD dwOutput,\n        [out] DWORD *pcbMax);\n\n    HRESULT GetMaxStreamSampleSize(\n        [in] WORD wStream,\n        [out] DWORD *pcbMax);\n\n    HRESULT OpenStream(\n        [in] IStream *pStream);\n}\n\n[\n    object,\n    uuid(96406bd5-2b2b-11d3-b36b-00c04f6108ff),\n    pointer_default(unique),\n    local\n]\ninterface IWMInputMediaProps : IWMMediaProps\n{\n    HRESULT GetConnectionName(\n        [out, size_is(*pcchName)] WCHAR *pwszName,\n        [in, out] WORD *pcchName);\n\n    HRESULT GetGroupName(\n        [out, size_is(*pcchName)] WCHAR *pwszName,\n        [in, out] WORD *pcchName);\n}\n\n[\n    object,\n    uuid(96406be4-2b2b-11d3-b36b-00c04f6108ff),\n    pointer_default(unique),\n    local\n]\ninterface IWMWriterSink : IUnknown\n{\n    HRESULT OnHeader(\n        [in] INSSBuffer *pHeader);\n\n    HRESULT IsRealTime(\n        [out] BOOL *pfRealTime);\n\n    HRESULT AllocateDataUnit(\n        [in] DWORD cbDataUnit,\n        [out] INSSBuffer **ppDataUnit);\n\n    HRESULT OnDataUnit(\n        [in] INSSBuffer *pDataUnit);\n\n    HRESULT OnEndWriting();\n}\n\n[\n    object,\n    uuid(96406bd4-2b2b-11d3-b36b-00c04f6108ff),\n    pointer_default(unique),\n    local\n]\ninterface IWMWriter : IUnknown\n{\n    HRESULT SetProfileByID(\n        [in] REFGUID guidProfile);\n\n    HRESULT SetProfile(\n        [in] IWMProfile *pProfile);\n\n    HRESULT SetOutputFilename(\n        [in] const WCHAR *pwszFilename);\n\n    HRESULT GetInputCount(\n        [out] DWORD *pcInputs);\n\n    HRESULT GetInputProps(\n        [in] DWORD dwInputNum,\n        [out] IWMInputMediaProps **ppInput);\n\n    HRESULT SetInputProps(\n        [in] DWORD dwInputNum,\n        [in] IWMInputMediaProps *pInput);\n\n    HRESULT GetInputFormatCount(\n        [in] DWORD dwInputNumber,\n        [out] DWORD *pcFormats);\n\n    HRESULT GetInputFormat(\n        [in] DWORD dwInputNumber,\n        [in] DWORD dwFormatNumber,\n        [out] IWMInputMediaProps **pProps);\n\n    HRESULT BeginWriting();\n\n    HRESULT EndWriting();\n\n    HRESULT AllocateSample(\n        [in] DWORD dwSampleSize,\n        [out] INSSBuffer **ppSample);\n\n    HRESULT WriteSample(\n        [in] DWORD dwInputNum,\n        [in] QWORD cnsSampleTime,\n        [in] DWORD dwFlags,\n        [in] INSSBuffer *pSample);\n\n    HRESULT Flush();\n}\n\n[\n    object,\n    uuid(96406be3-2b2b-11d3-b36b-00C04f6108ff),\n    pointer_default(unique),\n    local\n]\ninterface IWMWriterAdvanced : IUnknown\n{\n    HRESULT GetSinkCount(\n        [out] DWORD *pcSinks);\n\n    HRESULT GetSink(\n        [in] DWORD dwSinkNum,\n        [out] IWMWriterSink **ppSink);\n\n    HRESULT AddSink(\n        [in] IWMWriterSink *pSink);\n\n    HRESULT RemoveSink(\n        [in] IWMWriterSink *pSink);\n\n    HRESULT WriteStreamSample(\n        [in] WORD wStreamNum,\n        [in] QWORD cnsSampleTime,\n        [in] DWORD msSampleSendTime,\n        [in] QWORD cnsSampleDuration,\n        [in] DWORD dwFlags,\n        [in] INSSBuffer *pSample);\n\n    HRESULT SetLiveSource(\n        BOOL fIsLiveSource);\n\n    HRESULT IsRealTime(\n        [out] BOOL *pfRealTime);\n\n    HRESULT GetWriterTime(\n        [out] QWORD *pCurrentTime);\n\n    HRESULT GetStatistics(\n        [in] WORD wStreamNum,\n        [out] WM_WRITER_STATISTICS *pStats);\n\n    HRESULT SetSyncTolerance(\n        [in] DWORD msWindow);\n\n    HRESULT GetSyncTolerance(\n        [out] DWORD *pmsWindow);\n}\n\n[\n    object,\n    uuid(962dc1ec-c046-4db8-9cc7-26ceae500817),\n    pointer_default(unique),\n    local\n]\ninterface IWMWriterAdvanced2 : IWMWriterAdvanced\n{\n    HRESULT GetInputSetting(\n        [in] DWORD dwInputNum,\n        [in] LPCWSTR pszName,\n        [out] WMT_ATTR_DATATYPE *pType,\n        [out, size_is(*pcbLength)] BYTE *pValue,\n        [in, out] WORD *pcbLength);\n\n    HRESULT SetInputSetting(\n        [in] DWORD dwInputNum,\n        [in] LPCWSTR pszName,\n        [in] WMT_ATTR_DATATYPE Type,\n        [in, size_is(cbLength)] const BYTE *pValue,\n        [in] WORD cbLength);\n}\n\n[\n    object,\n    uuid(2cd6492d-7c37-4e76-9d3b-59261183a22e),\n    pointer_default(unique),\n    local\n]\ninterface IWMWriterAdvanced3 : IWMWriterAdvanced2\n{\n    HRESULT GetStatisticsEx(\n        [in] WORD wStreamNum,\n        [out] WM_WRITER_STATISTICS_EX *pStats);\n\n    HRESULT SetNonBlocking();\n}\n\n[\n    object,\n    uuid(96406bda-2b2b-11d3-b36b-00c04f6108ff),\n    pointer_default(unique),\n    local\n]\ninterface IWMHeaderInfo : IUnknown\n{\n    HRESULT GetAttributeCount(\n        [in] WORD stream_num,\n        [out] WORD *attributes );\n\n    HRESULT GetAttributeByIndex(\n        [in] WORD index,\n        [in, out] WORD *stream_num,\n        [out, size_is( *name_len )] WCHAR *name,\n        [in, out] WORD *name_len,\n        [out] WMT_ATTR_DATATYPE *type,\n        [out, size_is( *length )] BYTE *value,\n        [in, out] WORD *length );\n\n    HRESULT GetAttributeByName(\n        [in, out] WORD *stream_num,\n        [in] LPCWSTR name,\n        [out] WMT_ATTR_DATATYPE *type,\n        [out, size_is( *length )] BYTE *value,\n        [in, out] WORD *length );\n\n    HRESULT SetAttribute(\n        [in] WORD stream_num,\n        [in] LPCWSTR name,\n        [in] WMT_ATTR_DATATYPE type,\n        [in, size_is( length )] const BYTE *value,\n        [in] WORD length );\n\n    HRESULT GetMarkerCount(\n        [out] WORD *markers );\n\n    HRESULT GetMarker(\n        [in] WORD index,\n        [out, size_is( *marker_len )] WCHAR *marker_name,\n        [in, out] WORD *marker_len,\n        [out] QWORD *marker_time );\n\n    HRESULT AddMarker(\n        [in] LPCWSTR_WMSDK_TYPE_SAFE marker_name,\n        [in] QWORD marker_time );\n\n    HRESULT RemoveMarker(\n        [in] WORD index );\n\n    HRESULT GetScriptCount(\n        [out] WORD *scripts );\n\n    HRESULT GetScript(\n        [in] WORD index,\n        [out, size_is( *type_len )] WCHAR *type,\n        [in, out] WORD *type_len,\n        [out, size_is( *command_len )] WCHAR *command,\n        [in, out] WORD *command_len,\n        [out] QWORD *script_time );\n\n    HRESULT AddScript(\n        [in] LPCWSTR_WMSDK_TYPE_SAFE type,\n        [in] LPCWSTR_WMSDK_TYPE_SAFE command,\n        [in] QWORD script_time );\n\n    HRESULT RemoveScript(\n        [in] WORD index );\n}\n\n[\n    object,\n    uuid(15cf9781-454e-482e-b393-85fae487a810),\n    pointer_default(unique),\n    local\n]\ninterface IWMHeaderInfo2 : IWMHeaderInfo\n{\n    HRESULT GetCodecInfoCount(\n        [out] DWORD *codec_infos );\n\n    HRESULT GetCodecInfo(\n        [in] DWORD   index,\n        [in, out] WORD *name_len,\n        [out, size_is( *name_len )] WCHAR *name,\n        [in, out] WORD *description_len,\n        [out, size_is( *description_len )] WCHAR *description,\n        [out] WMT_CODEC_INFO_TYPE *codec_type,\n        [in, out] WORD *codec_info_cnt,\n        [out, size_is( *codec_info_cnt )] BYTE *codec_info );\n}\n\n[\n    object,\n    uuid(15cc68e3-27cc-4ecd-b222-3f5d02d80bd5),\n    pointer_default(unique),\n    local\n]\ninterface IWMHeaderInfo3 : IWMHeaderInfo2\n{\n    HRESULT GetAttributeCountEx(\n        [in] WORD stream_num,\n        [out] WORD *attributes );\n\n    HRESULT GetAttributeIndices(\n        [in] WORD stream_num,\n        [in] LPCWSTR name,\n        [in] WORD *lang_index,\n        [out, size_is( *count )] WORD *indices,\n        [in, out] WORD *count );\n\n   HRESULT GetAttributeByIndexEx(\n        [in] WORD stream_num,\n        [in] WORD index,\n        [out, size_is( *name_len )] LPWSTR name,\n        [in, out] WORD *name_len,\n        [out] WMT_ATTR_DATATYPE *type,\n        [out] WORD *lang_index,\n        [out, size_is( *data_len )] BYTE *value,\n        [in, out] DWORD *data_len );\n\n    HRESULT ModifyAttribute(\n        [in] WORD stream_num,\n        [in] WORD index,\n        [in] WMT_ATTR_DATATYPE type,\n        [in] WORD lang_index,\n        [in, size_is( length )] const BYTE *value,\n        [in] DWORD length );\n\n    HRESULT AddAttribute(\n        [in] WORD stream_num,\n        [in] LPCWSTR name,\n        [out] WORD *index,\n        [in] WMT_ATTR_DATATYPE type,\n        [in] WORD lang_index,\n        [in, size_is( length )] const BYTE *value,\n        [in] DWORD length );\n\n    HRESULT DeleteAttribute(\n        [in] WORD stream_num,\n        [in] WORD index );\n\n    HRESULT AddCodecInfo(\n        [in] LPCWSTR_WMSDK_TYPE_SAFE name,\n        [in] LPCWSTR_WMSDK_TYPE_SAFE description,\n        [in] WMT_CODEC_INFO_TYPE codec_type,\n        [in] WORD codec_info_cnt,\n        [in, size_is( codec_info_cnt )] BYTE *codec_info );\n}\n\n[\n    object,\n    uuid(96406bec-2b2b-11d3-b36b-00c04f6108ff),\n    pointer_default(unique),\n    local\n]\ninterface IWMReaderNetworkConfig : IUnknown\n{\n    HRESULT GetBufferingTime([out] QWORD *buffering_time);\n    HRESULT SetBufferingTime([in] QWORD buffering_time);\n\n    HRESULT GetUDPPortRanges(\n        [out, size_is( *ranges )] WM_PORT_NUMBER_RANGE *array,\n        [in, out] DWORD *ranges);\n\n    HRESULT SetUDPPortRanges(\n        [in, size_is( ranges )] WM_PORT_NUMBER_RANGE *array,\n        [in] DWORD ranges);\n\n    HRESULT GetProxySettings(\n        [in] const WCHAR *protocol,\n        [out] WMT_PROXY_SETTINGS *proxy);\n\n    HRESULT SetProxySettings(\n        [in] LPCWSTR protocol,\n        [in] WMT_PROXY_SETTINGS proxy);\n\n    HRESULT GetProxyHostName(\n        [in] const WCHAR *protocol,\n        [out, size_is( *size )] WCHAR *hostname,\n        [in, out] DWORD *size);\n\n    HRESULT SetProxyHostName(\n        [in] const WCHAR *protocol,\n        [in] const WCHAR *hostname);\n\n    HRESULT GetProxyPort(\n        [in] const WCHAR *protocol,\n        [out] DWORD *port);\n\n    HRESULT SetProxyPort(\n        [in] const WCHAR *protocol,\n        [in] DWORD port);\n\n    HRESULT GetProxyExceptionList(\n        [in] const WCHAR *protocol,\n        [out, size_is( *count )] WCHAR *exceptions,\n        [in, out] DWORD *count);\n\n    HRESULT SetProxyExceptionList(\n        [in] const WCHAR *protocol,\n        [in] const WCHAR *exceptions);\n\n    HRESULT GetProxyBypassForLocal(\n        [in] const WCHAR *protocol,\n        [out] BOOL *bypass);\n\n    HRESULT SetProxyBypassForLocal(\n        [in] const WCHAR *protocol,\n        [in] BOOL bypass);\n\n    HRESULT GetForceRerunAutoProxyDetection([out] BOOL *detection);\n    HRESULT SetForceRerunAutoProxyDetection([in] BOOL detection);\n\n    HRESULT GetEnableMulticast([out] BOOL *multicast);\n    HRESULT SetEnableMulticast([in] BOOL multicast);\n\n    HRESULT GetEnableHTTP([out] BOOL *enable);\n    HRESULT SetEnableHTTP([in] BOOL enable);\n\n    HRESULT GetEnableUDP([out] BOOL *enable);\n    HRESULT SetEnableUDP([in] BOOL enable);\n\n    HRESULT GetEnableTCP([out] BOOL *enable);\n    HRESULT SetEnableTCP([in] BOOL enable);\n\n    HRESULT ResetProtocolRollover();\n\n    HRESULT GetConnectionBandwidth([out] DWORD *bandwidth);\n    HRESULT SetConnectionBandwidth([in] DWORD bandwidth);\n\n    HRESULT GetNumProtocolsSupported([out] DWORD *protocols);\n\n    HRESULT GetSupportedProtocolName(\n        [in]  DWORD protocol_num,\n        [out, size_is( *size )] WCHAR *protocol,\n        [in, out] DWORD *size);\n\n    HRESULT AddLoggingUrl([in] const WCHAR *url);\n\n    HRESULT GetLoggingUrl(\n        [in] DWORD index,\n        [out, size_is( *size )] WCHAR *url,\n        [in, out] DWORD *size);\n\n    HRESULT GetLoggingUrlCount([out] DWORD *count);\n\n    HRESULT ResetLoggingUrlList();\n}\n\n[\n    object,\n    uuid(d979a853-042b-4050-8387-c939db22013f),\n    pointer_default(unique),\n    local\n]\ninterface IWMReaderNetworkConfig2 : IWMReaderNetworkConfig\n{\n    HRESULT GetEnableContentCaching([out] BOOL *enable);\n    HRESULT SetEnableContentCaching([in] BOOL enable);\n\n    HRESULT GetEnableFastCache([out] BOOL *enable);\n    HRESULT SetEnableFastCache([in] BOOL enable);\n\n    HRESULT GetAcceleratedStreamingDuration([out] QWORD *duration);\n    HRESULT SetAcceleratedStreamingDuration([in] QWORD duration);\n\n    HRESULT GetAutoReconnectLimit([out] DWORD *limit);\n    HRESULT SetAutoReconnectLimit([in] DWORD limit);\n\n    HRESULT GetEnableResends([out] BOOL *enable);\n    HRESULT SetEnableResends([in] BOOL enable);\n\n    HRESULT GetEnableThinning([out] BOOL *enable);\n    HRESULT SetEnableThinning([in] BOOL enable);\n\n    HRESULT GetMaxNetPacketSize([out] DWORD *packet_size);\n}\n\n[\n    object,\n    uuid(96406bed-2b2b-11d3-b36b-00c04f6108ff),\n    pointer_default(unique),\n    local\n]\n\ninterface IWMReaderStreamClock : IUnknown\n{\n    HRESULT GetTime([in] QWORD *now);\n\n    HRESULT SetTimer([in] QWORD when,\n                     [in] void *param,\n                     [out] DWORD *id);\n\n    HRESULT KillTimer([in] DWORD id);\n}\n\n[\n    object,\n    uuid(cdfb97ab-188f-40b3-b643-5b7903975c59),\n    pointer_default(unique),\n    local\n]\ninterface IWMPacketSize : IUnknown\n{\n    HRESULT GetMaxPacketSize([out] DWORD *size);\n    HRESULT SetMaxPacketSize([in] DWORD size);\n}\n\n[\n    object,\n    uuid(8bfc2b9e-b646-4233-a877-1c6a079669dc),\n    pointer_default(unique),\n    local\n]\ninterface IWMPacketSize2 : IWMPacketSize\n{\n    HRESULT GetMinPacketSize([out] DWORD *size);\n    HRESULT SetMinPacketSize([in] DWORD size);\n}\n\n[\n    object,\n    uuid(d2827540-3ee7-432c-b14c-dc17f085d3b3),\n    pointer_default(unique),\n    local\n]\ninterface IWMDRMReader : IUnknown\n{\n    HRESULT AcquireLicense([in] DWORD flags);\n    HRESULT CancelLicenseAcquisition();\n\n    HRESULT Individualize([in] DWORD flags);\n    HRESULT CancelIndividualization();\n\n    HRESULT MonitorLicenseAcquisition();\n    HRESULT CancelMonitorLicenseAcquisition();\n\n    HRESULT SetDRMProperty(\n        [in] const WCHAR *name,\n        [in] WMT_ATTR_DATATYPE type,\n        [in, size_is( length )] const BYTE *value,\n        [in] WORD length);\n\n    HRESULT GetDRMProperty(\n        [in] const WCHAR *name,\n        [out] WMT_ATTR_DATATYPE *type,\n        [out, size_is( *length )] BYTE *value,\n        [in, out] WORD *length);\n}\n\n[\n    object,\n    uuid(befe7a75-9f1d-4075-b9d9-a3c37bda49a0),\n    pointer_default(unique),\n    local\n]\ninterface IWMDRMReader2 : IWMDRMReader\n{\n    HRESULT SetEvaluateOutputLevelLicenses([in] BOOL evaluate);\n    HRESULT GetPlayOutputLevels(\n        [out, size_is( *length )] DRM_PLAY_OPL *play,\n        [in, out] DWORD *length,\n        [out] DWORD *level);\n\n    HRESULT GetCopyOutputLevels(\n        [out, size_is( *length )] DRM_COPY_OPL *copy,\n        [in, out] DWORD *length,\n        [out] DWORD *level);\n\n    HRESULT TryNextLicense();\n}\n\n[\n    object,\n    uuid(e08672de-f1e7-4ff4-a0a3-fc4b08e4caf8),\n    pointer_default(unique),\n    local\n]\ninterface IWMDRMReader3 : IWMDRMReader2\n{\n    HRESULT GetInclusionList(\n        [out] GUID **guids,\n        [out] DWORD *count);\n}\n\n[\n    object,\n    uuid(bddc4d08-944d-4d52-a612-46c3fda07dd4),\n    pointer_default( unique ),\n    local\n]\ninterface IWMReaderAccelerator : IUnknown\n{\n    HRESULT GetCodecInterface(\n        [in] DWORD output,\n        [in] REFIID riid,\n        [out] void **codec);\n\n    HRESULT Notify(\n        [in] DWORD output,\n        [in] WM_MEDIA_TYPE *subtype);\n}\n\n[\n    object,\n    uuid(f369e2f0-e081-4fe6-8450-b810b2f410d1),\n    pointer_default(unique),\n    local\n]\ninterface IWMReaderTimecode : IUnknown\n{\n    HRESULT GetTimecodeRangeCount(\n        [in] WORD num,\n        [out] WORD *count);\n\n    HRESULT GetTimecodeRangeBounds(\n        [in] WORD stream,\n        [in] WORD range,\n        [out] DWORD *start_timecode,\n        [out] DWORD *end_timecode);\n}\n\n[\n    object,\n    uuid(fdbe5592-81a1-41ea-93bd-735cad1adc05),\n    pointer_default(unique),\n    local\n]\ninterface IWMReaderTypeNegotiation : IUnknown\n{\n    HRESULT TryOutputProps(\n        [in] DWORD output,\n        [in] IWMOutputMediaProps *props);\n}\n\n[\n    object,\n    uuid(df683f00-2d49-4d8e-92b7-fb19f6a0dc57),\n    pointer_default(unique),\n    local\n]\ninterface IWMLanguageList : IUnknown\n{\n    HRESULT GetLanguageCount(\n        [out] WORD *count);\n\n    HRESULT GetLanguageDetails(\n        [in] WORD index,\n        [out, size_is( *length )] WCHAR *language,\n        [in, out] WORD *length);\n\n    HRESULT AddLanguageByRFC1766String(\n        [in] LPCWSTR_WMSDK_TYPE_SAFE language,\n        [out] WORD *index);\n}\n\n[\n    object,\n    uuid(f28c0300-9baa-4477-a846-1744d9cbf533),\n    pointer_default(unique),\n    local\n]\ninterface IWMReaderPlaylistBurn : IUnknown\n{\n    HRESULT InitPlaylistBurn(\n        [in] DWORD count,\n        [in] LPCWSTR_WMSDK_TYPE_SAFE *filenames,\n        [in] IWMStatusCallback *callback,\n        [in] void *context);\n\n    HRESULT GetInitResults(\n        [in] DWORD count,\n        [out] HRESULT *stat);\n\n    HRESULT Cancel();\n\n    HRESULT EndPlaylistBurn([in] HRESULT result);\n}\n\n[\n    object,\n    uuid(72995a79-5090-42a4-9c8c-d9d0b6d34be5),\n    pointer_default(unique),\n    local\n]\ninterface IWMPropertyVault : IUnknown\n{\n    HRESULT GetPropertyCount([in] DWORD *count);\n\n    HRESULT GetPropertyByName(\n        [in] const WCHAR *name,\n        [out] WMT_ATTR_DATATYPE *type,\n        [out, size_is( *size )] BYTE *value,\n        [in, out] DWORD *size);\n\n    HRESULT SetProperty(\n        [in] const WCHAR *name,\n        [in] WMT_ATTR_DATATYPE type,\n        [in] BYTE *value,\n        [in] DWORD size);\n\n    HRESULT GetPropertyByIndex(\n        [in] DWORD index,\n        [out, size_is( *pdwNameLen )] WCHAR *name,\n        [in, out]  DWORD *length,\n        [out] WMT_ATTR_DATATYPE *type,\n        [out, size_is( *size )] BYTE *value,\n        [in, out] DWORD *size);\n\n    HRESULT CopyPropertiesFrom([in] IWMPropertyVault *vault);\n\n    HRESULT Clear();\n};\n\n[\n    object,\n    uuid(fc54a285-38c4-45b5-aa23-85b9f7cb424b),\n    pointer_default(unique),\n    local\n]\ninterface IWMWriterPreprocess : IUnknown\n{\n    HRESULT GetMaxPreprocessingPasses(\n        [in] DWORD input,\n        [in] DWORD flags,\n        [out] DWORD *passes);\n\n    HRESULT SetNumPreprocessingPasses(\n        [in] DWORD input,\n        [in] DWORD flags,\n        [in] DWORD passes);\n\n    HRESULT BeginPreprocessingPass(\n        [in] DWORD input,\n        [in] DWORD flags);\n\n    HRESULT PreprocessSample(\n        [in] DWORD input,\n        [in] QWORD sample_time,\n        [in] DWORD flags,\n        [in] INSSBuffer *sample);\n\n    HRESULT EndPreprocessingPass(\n        [in] DWORD input,\n        [in] DWORD flags);\n};\n\ncpp_quote(\"HRESULT WINAPI WMCreateWriter(IUnknown*,IWMWriter**);\")\ncpp_quote(\"HRESULT WINAPI WMCreateReader(IUnknown*,DWORD,IWMReader**);\")\n\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_Base,   0x00000000,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIATYPE_Video,     0x73646976,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_RGB1,   0xe436eb78,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_RGB4,   0xe436eb79,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_RGB8,   0xe436eb7a,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_RGB565, 0xe436eb7b,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_RGB555, 0xe436eb7c,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_RGB24,  0xe436eb7d,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_RGB32,  0xe436eb7e,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_I420,   0x30323449,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_IYUV,   0x56555949,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_YV12,   0x32315659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_YUY2,   0x32595559,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_P422,   0x32323450,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_UYVY,   0x59565955,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_YVYU,   0x55595659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_YVU9,   0x39555659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_VIDEOIMAGE, 0x1d4a45f2,0xe5f6,0x4b44,0x83,0x88,0xf0,0xae,0x5c,0x0e,0x0c,0x37);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_MP43,   0x3334504d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_MP4S,   0x5334504d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_M4S2,   0x3253344d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_WMV1,   0x31564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_WMV2,   0x32564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_MSS1,   0x3153534d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_MPEG2_VIDEO, 0xe06d8026,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIATYPE_Audio,     0x73647561,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_PCM,    0x00000001,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_DRM,    0x00000009,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_WMAudioV9,        0x00000162,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_WMAudio_Lossless, 0x00000163,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_MSS2,   0x3253534d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_WMSP1,  0x0000000a,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_WMSP2,  0x0000000b,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_WMV3,   0x33564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_WMVP,   0x50564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_WVP2,   0x32505657,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_WMVA,   0x41564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\ncpp_quote(\"EXTERN_GUID(WMMEDIASUBTYPE_WVC1,   0x31435657,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);\")\n"
  },
  {
    "path": "wine/windows/wnaspi32.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WNASPI32_H__\n#define __WNASPI32_H__\n\n/* This file should be 100% source compatible according to MS docs and\n * Adaptec docs */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* #ifdef __cplusplus */\n\n/* SCSI Miscellaneous Stuff */\n#define SENSE_LEN\t\t\t14\n#define SRB_DIR_SCSI\t\t\t0x00\n#define SRB_POSTING\t\t\t0x01\n#define SRB_ENABLE_RESIDUAL_COUNT\t0x04\n#define SRB_DIR_IN\t\t\t0x08\n#define SRB_DIR_OUT\t\t\t0x10\n\n/* ASPI Command Definitions */\n#define SC_HA_INQUIRY\t\t\t0x00\n#define SC_GET_DEV_TYPE\t\t\t0x01\n#define SC_EXEC_SCSI_CMD\t\t0x02\n#define SC_ABORT_SRB\t\t\t0x03\n#define SC_RESET_DEV\t\t\t0x04\n#define SC_SET_HA_PARMS\t\t\t0x05\n#define SC_GET_DISK_INFO\t\t0x06\n\n/* SRB status codes */\n#define SS_PENDING\t\t\t0x00\n#define SS_COMP\t\t\t\t0x01\n#define SS_ABORTED\t\t\t0x02\n#define SS_ABORT_FAIL\t\t\t0x03\n#define SS_ERR\t\t\t\t0x04\n\n#define SS_INVALID_CMD\t\t\t0x80\n#define SS_INVALID_HA\t\t\t0x81\n#define SS_NO_DEVICE\t\t\t0x82\n\n#define SS_INVALID_SRB\t\t\t0xE0\n#define SS_OLD_MANAGER\t\t\t0xE1\n#define SS_BUFFER_ALIGN\t\t\t0xE1 /* Win32 */\n#define SS_ILLEGAL_MODE\t\t\t0xE2\n#define SS_NO_ASPI\t\t\t0xE3\n#define SS_FAILED_INIT\t\t\t0xE4\n#define SS_ASPI_IS_BUSY\t\t\t0xE5\n#define SS_BUFFER_TO_BIG\t\t0xE6\n#define SS_MISMATCHED_COMPONENTS\t0xE7 /* DLLs/EXE version mismatch */\n#define SS_NO_ADAPTERS\t\t\t0xE8\n#define SS_INSUFFICIENT_RESOURCES\t0xE9\n#define SS_ASPI_IS_SHUTDOWN\t\t0xEA\n#define SS_BAD_INSTALL\t\t\t0xEB\n\n\n/* Host status codes */\n#define HASTAT_OK\t\t\t0x00\n#define HASTAT_SEL_TO\t\t\t0x11\n#define HASTAT_DO_DU\t\t\t0x12\n#define HASTAT_BUS_FREE\t\t\t0x13\n#define HASTAT_PHASE_ERR\t\t0x14\n\n#define HASTAT_TIMEOUT\t\t\t0x09\n#define HASTAT_COMMAND_TIMEOUT\t\t0x0B\n#define HASTAT_MESSAGE_REJECT\t\t0x0D\n#define HASTAT_BUS_RESET\t\t0x0E\n#define HASTAT_PARITY_ERROR\t\t0x0F\n#define HASTAT_REQUEST_SENSE_FAILED\t0x10\n\n\n/* Additional definitions */\n/* SCSI Miscellaneous Stuff */\n#define SRB_EVENT_NOTIFY\t\t0x40\n#define RESIDUAL_COUNT_SUPPORTED\t0x02\n#define MAX_SRB_TIMEOUT\t\t\t1080001u\n#define DEFAULT_SRB_TIMEOUT\t\t1080001u\n\n/* These are defined by MS but not adaptec */\n#define SRB_DATA_SG_LIST\t\t0x02\n#define WM_ASPIPOST\t\t\t0x4D42\n\n\n/* ASPI Command Definitions */\n#define SC_RESCAN_SCSI_BUS\t\t0x07\n#define SC_GETSET_TIMEOUTS\t\t0x08\n\n/* SRB Status.. MS defined */\n#define SS_SECURITY_VIOLATION\t\t0xE2 /* Replaces SS_INVALID_MODE */\n/*** END DEFS */\n\n#include <pshpack1.h>\n\n/* SRB - HOST ADAPTER INQUIRY - SC_HA_INQUIRY */\ntypedef struct tagSRB32_HaInquiry {\n BYTE  SRB_Cmd;                 /* 00 ASPI command code = SC_HA_INQUIRY */\n BYTE  SRB_Status;              /* 01 ASPI command status byte */\n BYTE  SRB_HaId;                /* 02 ASPI host adapter number */\n BYTE  SRB_Flags;               /* 03 ASPI request flags */\n DWORD  SRB_Hdr_Rsvd;           /* 04 Reserved, MUST = 0 */\n BYTE  HA_Count;                /* 08 Number of host adapters present */\n BYTE  HA_SCSI_ID;              /* 09 SCSI ID of host adapter */\n BYTE  HA_ManagerId[16];        /* 0A String describing the manager */\n BYTE  HA_Identifier[16];       /* 1A String describing the host adapter */\n BYTE  HA_Unique[16];           /* 2A Host Adapter Unique parameters */\n WORD  HA_Rsvd1;\n} SRB_HaInquiry, *PSRB_HaInquiry;\n\n/* SRB - GET DEVICE TYPE - SC_GET_DEV_TYPE */\ntypedef struct tagSRB32_GDEVBlock {\n BYTE  SRB_Cmd;                 /* 00 ASPI command code = SC_GET_DEV_TYPE */\n BYTE  SRB_Status;              /* 01 ASPI command status byte */\n BYTE  SRB_HaId;                /* 02 ASPI host adapter number */\n BYTE  SRB_Flags;               /* 03 Reserved */\n DWORD  SRB_Hdr_Rsvd;           /* 04 Reserved */\n BYTE  SRB_Target;              /* 08 Target's SCSI ID */\n BYTE  SRB_Lun;                 /* 09 Target's LUN number */\n BYTE  SRB_DeviceType;          /* 0A Target's peripheral device type */\n BYTE  SRB_Rsvd1;\n} SRB_GDEVBlock, *PSRB_GDEVBlock;\n\n/* SRB - EXECUTE SCSI COMMAND - SC_EXEC_SCSI_CMD */\ntypedef struct tagSRB32_ExecSCSICmd {\n  BYTE        SRB_Cmd;            /* 00 ASPI command code = SC_EXEC_SCSI_CMD */\n  BYTE        SRB_Status;         /* 01 ASPI command status byte */\n  BYTE        SRB_HaId;           /* 02 ASPI host adapter number */\n  BYTE        SRB_Flags;          /* 03 ASPI request flags */\n  DWORD       SRB_Hdr_Rsvd;       /* 04 Reserved */\n  BYTE        SRB_Target;         /* 08 Target's SCSI ID */\n  BYTE        SRB_Lun;            /* 09 Target's LUN number */\n  WORD        SRB_Rsvd1;          /* 0A Reserved for Alignment */\n  DWORD       SRB_BufLen;         /* 0C Data Allocation Length */\n  BYTE        *SRB_BufPointer;    /* 10 Data Buffer Point */\n  BYTE        SRB_SenseLen;       /* 14 Sense Allocation Length */\n  BYTE        SRB_CDBLen;         /* 15 CDB Length */\n  BYTE        SRB_HaStat;         /* 16 Host Adapter Status */\n  BYTE        SRB_TargStat;       /* 17 Target Status */\n  void        (*SRB_PostProc)( struct tagSRB32_ExecSCSICmd * ); /* 18 Post routine */\n  void        *SRB_Rsvd2;         /* 1C Reserved */\n  BYTE        SRB_Rsvd3[16];      /* 20 Reserved for expansion */\n  BYTE        CDBByte[16];        /* 30 SCSI CDB */\n  BYTE        SenseArea[SENSE_LEN+2];  /* 40 Request sense buffer - var length */\n} SRB_ExecSCSICmd, *PSRB_ExecSCSICmd;\n\n/* SRB - ABORT AN ARB - SC_ABORT_SRB */\ntypedef struct tagSRB32_Abort {\n  BYTE        SRB_Cmd;            /* 00 ASPI command code = SC_ABORT_SRB */\n  BYTE        SRB_Status;         /* 01 ASPI command status byte */\n  BYTE        SRB_HaId;           /* 02 ASPI host adapter number */\n  BYTE        SRB_Flags;          /* 03 Reserved */\n  DWORD       SRB_Hdr_Rsvd;       /* 04 Reserved, MUST = 0 */\n  VOID       *SRB_ToAbort;        /* 08 Pointer to SRB to abort */\n} SRB_Abort, *PSRB_Abort;\n\n/* SRB - BUS DEVICE RESET - SC_RESET_DEV */\ntypedef struct tagSRB32_BusDeviceReset {\n BYTE         SRB_Cmd;                  /* 00 ASPI cmd code = SC_RESET_DEV */\n BYTE         SRB_Status;               /* 01 ASPI command status byte */\n BYTE         SRB_HaId;                 /* 02 ASPI host adapter number */\n BYTE         SRB_Flags;                /* 03 Reserved */\n DWORD        SRB_Hdr_Rsvd;             /* 04 Reserved */\n BYTE         SRB_Target;               /* 08 Target's SCSI ID */\n BYTE         SRB_Lun;                  /* 09 Target's LUN number */\n BYTE         SRB_Rsvd1[12];            /* 0A Reserved for Alignment */\n BYTE         SRB_HaStat;               /* 16 Host Adapter Status */\n BYTE         SRB_TargStat;             /* 17 Target Status */\n void         (*SRB_PostProc)( struct tagSRB32_BusDeviceReset * ); /* 18 Post routine */\n void         *SRB_Rsvd2;               /* 1c Reserved */\n BYTE         SRB_Rsvd3[32];            /* 20 Reserved */\n} SRB_BusDeviceReset, *PSRB_BusDeviceReset;\n\n/* SRB - GET DISK INFORMATION - SC_GET_DISK_INFO */\ntypedef struct tagSRB32_GetDiskInfo {\n BYTE         SRB_Cmd;                  /* 00 ASPI cmd code = SC_RESET_DEV */\n BYTE         SRB_Status;               /* 01 ASPI command status byte */\n BYTE         SRB_HaId;                 /* 02 ASPI host adapter number */\n BYTE         SRB_Flags;                /* 03 Reserved */\n DWORD        SRB_Hdr_Rsvd;             /* 04 Reserved */\n BYTE         SRB_Target;               /* 08 Target's SCSI ID */\n BYTE         SRB_Lun;                  /* 09 Target's LUN number */\n BYTE         SRB_DriveFlags;           /* 0A Driver flags */\n BYTE         SRB_Int13HDriveInfo;      /* 0B Host Adapter Status */\n BYTE         SRB_Heads;                /* 0C Preferred number of heads trans */\n BYTE         SRB_Sectors;              /* 0D Preferred number of sectors trans */\n BYTE         SRB_Rsvd1[10];            /* 0E Reserved */\n} SRB_GetDiskInfo, *PSRB_GetDiskInfo;\n\ntypedef struct tagSRB32_GetSetTimeouts {\n BYTE         SRB_Cmd;                  /* 00 ASPI cmd code = SC_GETSET_TIMEOUTS */\n BYTE         SRB_Status;               /* 01 ASPI command status byte */\n BYTE         SRB_HaId;                 /* 02 ASPI host adapter number */\n BYTE         SRB_Flags;                /* 03 Reserved */\n DWORD        SRB_Hdr_Rsvd;             /* 04 Reserved */\n BYTE         SRB_Target;               /* 08 Target's SCSI ID */\n BYTE         SRB_Lun;                  /* 09 Target's LUN number */\n DWORD        SRB_Timeout;              /* 10 Target's Timeout value */\n} SRB_GetSetTimeouts, *PSRB_GetSetTimeouts;\n\n/* SRB header */\ntypedef struct tagSRB32_Header {\n BYTE         SRB_Cmd;                  /* 00 ASPI cmd code = SC_RESET_DEV */\n BYTE         SRB_Status;               /* 01 ASPI command status byte */\n BYTE         SRB_HaId;                 /* 02 ASPI host adapter number */\n BYTE         SRB_Flags;                /* 03 Reserved */\n DWORD        SRB_Hdr_Rsvd;             /* 04 Reserved */\n} SRB_Header, *PSRB_Header;\n\ntypedef union tagSRB32 {\n    SRB_Header          common;\n    SRB_HaInquiry       inquiry;\n    SRB_ExecSCSICmd     cmd;\n    SRB_Abort           abort;\n    SRB_BusDeviceReset  reset;\n    SRB_GDEVBlock       devtype;\n    SRB_GetDiskInfo\tdiskinfo;\n} SRB, *PSRB, *LPSRB;\n\ntypedef struct tagASPI32BUFF {\n    LPBYTE AB_BufPointer;\t/* pointer to buffer */\n    DWORD AB_BufLen;\t\t/* length of buffer */\n    DWORD AB_ZeroFill;\t\t/* set to 1 if zeroing */\n    DWORD AB_Reserved;\t\t/* 0 */\n} ASPI32BUFF, *PASPI32BUFF;\n\n#include <poppack.h>\n\n/* Prototypes */\nextern DWORD __cdecl SendASPI32Command (PSRB);\nextern DWORD __cdecl GetASPI32SupportInfo (void);\nextern DWORD __cdecl GetASPI32DLLVersion(void);\nextern BOOL  __cdecl GetASPI32Buffer(PASPI32BUFF pab);\n\n#ifdef __cplusplus\n}\n#endif /* #ifdef __cplusplus */\n\n#endif /* __WNASPI32_H__ */\n"
  },
  {
    "path": "wine/windows/wownt32.h",
    "content": "/*\n * WOW Generic Thunk API\n *\n * Copyright (C) 1999 Ulrich Weigand\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _WOWNT32_H_\n#define _WOWNT32_H_\n\n#ifdef __WINESRC__\n/* under Wine use the kernel functions directly so we don't have to import wow32 */\n#define WOWCallback16 K32WOWCallback16\n#define WOWCallback16Ex K32WOWCallback16Ex\n#define WOWDirectedYield16 K32WOWDirectedYield16\n#define WOWGetVDMPointer K32WOWGetVDMPointer\n#define WOWGetVDMPointerFix K32WOWGetVDMPointerFix\n#define WOWGetVDMPointerUnfix K32WOWGetVDMPointerUnfix\n#define WOWGlobalAlloc16 K32WOWGlobalAlloc16\n#define WOWGlobalAllocLock16 K32WOWGlobalAllocLock16\n#define WOWGlobalFree16 K32WOWGlobalFree16\n#define WOWGlobalLock16 K32WOWGlobalLock16\n#define WOWGlobalLockSize16 K32WOWGlobalLockSize16\n#define WOWGlobalUnlock16 K32WOWGlobalUnlock16\n#define WOWGlobalUnlockFree16 K32WOWGlobalUnlockFree16\n#define WOWHandle16 K32WOWHandle16\n#define WOWHandle32 K32WOWHandle32\n#define WOWYield16 K32WOWYield16\n#endif\n\nLPVOID WINAPI WOWGetVDMPointer(DWORD,DWORD,BOOL);\nLPVOID WINAPI WOWGetVDMPointerFix(DWORD,DWORD,BOOL);\nVOID   WINAPI WOWGetVDMPointerUnfix(DWORD);\n\nWORD   WINAPI WOWGlobalAlloc16(WORD,DWORD);\nWORD   WINAPI WOWGlobalFree16(WORD);\nDWORD  WINAPI WOWGlobalLock16(WORD);\nBOOL   WINAPI WOWGlobalUnlock16(WORD);\nDWORD  WINAPI WOWGlobalAllocLock16(WORD,DWORD,WORD *);\nWORD   WINAPI WOWGlobalUnlockFree16(DWORD);\nDWORD  WINAPI WOWGlobalLockSize16(WORD,PDWORD);\n\nVOID   WINAPI WOWYield16(VOID);\nVOID   WINAPI WOWDirectedYield16(WORD);\n\ntypedef enum\n{\n    WOW_TYPE_HWND,\n    WOW_TYPE_HMENU,\n    WOW_TYPE_HDWP,\n    WOW_TYPE_HDROP,\n    WOW_TYPE_HDC,\n    WOW_TYPE_HFONT,\n    WOW_TYPE_HMETAFILE,\n    WOW_TYPE_HRGN,\n    WOW_TYPE_HBITMAP,\n    WOW_TYPE_HBRUSH,\n    WOW_TYPE_HPALETTE,\n    WOW_TYPE_HPEN,\n    WOW_TYPE_HACCEL,\n    WOW_TYPE_HTASK,\n    WOW_TYPE_FULLHWND\n\n} WOW_HANDLE_TYPE;\n\nHANDLE WINAPI WOWHandle32(WORD,WOW_HANDLE_TYPE);\nWORD   WINAPI WOWHandle16(HANDLE,WOW_HANDLE_TYPE);\n\n#if 0 && defined(__WINESRC__)\n/* under Wine we use optimized versions where we can */\n#define HWND_32(h16)      ((HWND)      (ULONG_PTR)(h16))\n#define HMENU_32(h16)     ((HMENU)     (ULONG_PTR)(h16))\n#define HDWP_32(h16)      ((HDWP)      (ULONG_PTR)(h16))\n#define HDROP_32(h16)     ((HDROP)     (ULONG_PTR)(h16))\n#define HDC_32(h16)       ((HDC)       (ULONG_PTR)(h16))\n#define HFONT_32(h16)     ((HFONT)     (ULONG_PTR)(h16))\n#define HRGN_32(h16)      ((HRGN)      (ULONG_PTR)(h16))\n#define HBITMAP_32(h16)   ((HBITMAP)   (ULONG_PTR)(h16))\n#define HBRUSH_32(h16)    ((HBRUSH)    (ULONG_PTR)(h16))\n#define HPALETTE_32(h16)  ((HPALETTE)  (ULONG_PTR)(h16))\n#define HPEN_32(h16)      ((HPEN)      (ULONG_PTR)(h16))\n#define HACCEL_32(h16)    ((HACCEL)    (ULONG_PTR)(h16))\n\n#define HWND_16(h32)      (LOWORD(h32))\n#define HMENU_16(h32)     (LOWORD(h32))\n#define HDWP_16(h32)      (LOWORD(h32))\n#define HDROP_16(h32)     (LOWORD(h32))\n#define HDC_16(h32)       (LOWORD(h32))\n#define HFONT_16(h32)     (LOWORD(h32))\n#define HRGN_16(h32)      (LOWORD(h32))\n#define HBITMAP_16(h32)   (LOWORD(h32))\n#define HBRUSH_16(h32)    (LOWORD(h32))\n#define HPALETTE_16(h32)  (LOWORD(h32))\n#define HPEN_16(h32)      (LOWORD(h32))\n#define HACCEL_16(h32)    (LOWORD(h32))\n\n#else  /* __WINESRC__ */\n\n#define HWND_32(h16)      ((HWND)      (WOWHandle32(h16, WOW_TYPE_HWND)))\n#define HMENU_32(h16)     ((HMENU)     (WOWHandle32(h16, WOW_TYPE_HMENU)))\n#define HDWP_32(h16)      ((HDWP)      (WOWHandle32(h16, WOW_TYPE_HDWP)))\n#define HDROP_32(h16)     ((HDROP)     (WOWHandle32(h16, WOW_TYPE_HDROP)))\n#define HDC_32(h16)       ((HDC)       (WOWHandle32(h16, WOW_TYPE_HDC)))\n#define HFONT_32(h16)     ((HFONT)     (WOWHandle32(h16, WOW_TYPE_HFONT)))\n#define HRGN_32(h16)      ((HRGN)      (WOWHandle32(h16, WOW_TYPE_HRGN)))\n#define HBITMAP_32(h16)   ((HBITMAP)   (WOWHandle32(h16, WOW_TYPE_HBITMAP)))\n#define HBRUSH_32(h16)    ((HBRUSH)    (WOWHandle32(h16, WOW_TYPE_HBRUSH)))\n#define HPALETTE_32(h16)  ((HPALETTE)  (WOWHandle32(h16, WOW_TYPE_HPALETTE)))\n#define HPEN_32(h16)      ((HPEN)      (WOWHandle32(h16, WOW_TYPE_HPEN)))\n#define HACCEL_32(h16)    ((HACCEL)    (WOWHandle32(h16, WOW_TYPE_HACCEL)))\n\n#define HWND_16(h32)      (WOWHandle16(h32, WOW_TYPE_HWND))\n#define HMENU_16(h32)     (WOWHandle16(h32, WOW_TYPE_HMENU))\n#define HDWP_16(h32)      (WOWHandle16(h32, WOW_TYPE_HDWP))\n#define HDROP_16(h32)     (WOWHandle16(h32, WOW_TYPE_HDROP))\n#define HDC_16(h32)       (WOWHandle16(h32, WOW_TYPE_HDC))\n#define HFONT_16(h32)     (WOWHandle16(h32, WOW_TYPE_HFONT))\n#define HRGN_16(h32)      (WOWHandle16(h32, WOW_TYPE_HRGN))\n#define HBITMAP_16(h32)   (WOWHandle16(h32, WOW_TYPE_HBITMAP))\n#define HBRUSH_16(h32)    (WOWHandle16(h32, WOW_TYPE_HBRUSH))\n#define HPALETTE_16(h32)  (WOWHandle16(h32, WOW_TYPE_HPALETTE))\n#define HPEN_16(h32)      (WOWHandle16(h32, WOW_TYPE_HPEN))\n#define HACCEL_16(h32)    (WOWHandle16(h32, WOW_TYPE_HACCEL))\n\n#endif  /* __WINESRC__ */\n\n#define HMETAFILE_32(h16) ((HMETAFILE)(WOWHandle32(h16, WOW_TYPE_HMETAFILE)))\n#define HTASK_32(h16)     ((DWORD)(WOWHandle32(h16, WOW_TYPE_HTASK)))\n#define FULLHWND_32(h16)  ((HWND)(WOWHandle32(h16, WOW_TYPE_FULLHWND)))\n\n#define HMETAFILE_16(h32) (WOWHandle16(h32, WOW_TYPE_HMETAFILE))\n#define HTASK_16(h32)     (WOWHandle16((HANDLE)(h32), WOW_TYPE_HTASK))\n\n#define WCB16_PASCAL     0\n#define WCB16_CDECL      1\n#define WCB16_MAX_CBARGS 16\n\n/* Wine extensions: call register function, context ptr is passed in the return value LPDWORD */\n#define WCB16_REGS       2\n#define WCB16_REGS_LONG  4  /* function uses 32-bit lret */\n\nDWORD WINAPI WOWCallback16(DWORD,DWORD);\nBOOL  WINAPI WOWCallback16Ex(DWORD,DWORD,DWORD,LPVOID,LPDWORD);\n\n#endif /* _WOWNT32_H_ */\n"
  },
  {
    "path": "wine/windows/wpcapi.idl",
    "content": "/*\n * Copyright 2011 Jacek Caban for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\n\n#ifndef __WIDL__\n#define threading(model)\n#endif\n\ntypedef [v1_enum] enum tagWPCFLAG_RESTRICTION {\n    WPCFLAG_NO_RESTRICTION    = 0x0000,\n    WPCFLAG_LOGGING_REQUIRED  = 0x0001,\n    WPCFLAG_WEB_FILTERED      = 0x0002,\n    WPCFLAG_HOURS_RESTRICTED  = 0x0004,\n    WPCFLAG_GAMES_BLOCKED     = 0x0008,\n    WPCFLAG_APPS_RESTRICTED   = 0x0010\n} WPCFLAG_RESTRICTION;\n\n[\n    uuid(8fdf6ca1-0189-47e4-b670-1a8a4636e340),\n    object\n]\ninterface IWPCSettings : IUnknown\n{\n    HRESULT IsLoggingRequired(\n            [out] BOOL *pfRequired);\n\n    HRESULT GetLastSettingsChangeTime(\n            [out] SYSTEMTIME *pTime) ;\n\n    HRESULT GetRestrictions(\n            [out] DWORD *pdwRestrictions);\n}\n\n[\n    uuid(95e87780-e158-489e-b452-bbb850790715),\n    object\n]\ninterface IWPCGamesSettings : IWPCSettings\n{\n    HRESULT IsBlocked(\n            [in] GUID guidAppID,\n            [out] DWORD *pdwReasons);\n}\n\n[\n    uuid(ffccbdb8-0992-4c30-b0f1-1cbb09c240aa),\n    object\n]\ninterface IWPCWebSettings : IWPCSettings\n{\n    typedef enum tagWPCFLAG_WEB_SETTING {\n        WPCFLAG_WEB_SETTING_NOTBLOCKED = 0,\n        WPCFLAG_WEB_SETTING_DOWNLOADSBLOCKED = 1\n    } WPCFLAG_WEB_SETTING;\n\n    HRESULT GetSettings(\n            [out] DWORD *pdwSettings);\n\n    HRESULT RequestURLOverride(\n            [in] HWND hWnd,\n            [in] LPCWSTR pcszURL,\n            [in] DWORD cURLs,\n            [in] LPCWSTR *ppcszSubURLs,\n            [out] BOOL *pfChanged);\n}\n\ntypedef enum tagWPCFLAG_VISIBILITY {\n    WPCFLAG_WPC_VISIBLE = 0,\n    WPCFLAG_WPC_HIDDEN = 1\n} WPCFLAG_VISIBILITY;\n\n[\n    uuid(4FF40A0F-3F3B-4d7c-A41B-4F39D7B44D05),\n    object\n]\ninterface IWindowsParentalControlsCore : IUnknown\n{\n    HRESULT GetVisibility(\n            [out] WPCFLAG_VISIBILITY *peVisibility) ;\n\n    HRESULT GetUserSettings(\n            [in] LPCWSTR pcszSID,\n            [out] IWPCSettings **ppSettings);\n\n    HRESULT GetWebSettings(\n            [in] LPCWSTR pcszSID,\n            [out] IWPCWebSettings **ppSettings);\n\n    HRESULT GetWebFilterInfo(\n            [out] GUID *pguidID,\n            [in] LPWSTR *ppszName);\n}\n\n[\n    uuid(28b4d88b-e072-49e6-804d-26edbe21a7b9),\n    object\n]\ninterface IWindowsParentalControls : IWindowsParentalControlsCore\n{\n    HRESULT GetGamesSettings(\n            [in] LPCWSTR pcszSID,\n            [out] IWPCGamesSettings **ppSettings) ;\n}\n\n[\n    helpstring(\"WindowsParentalControls class\"),\n    threading(both),\n    uuid(e77cc89b-7401-4c04-8ced-149db35add04)\n]\ncoclass WindowsParentalControls\n{\n    [default] interface IWindowsParentalControls;\n}\n"
  },
  {
    "path": "wine/windows/ws2def.h",
    "content": "/*\n * Copyright (C) 2009 Robert Shearman\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _WS2DEF_\n#define _WS2DEF_\n\n#include <inaddr.h>\n\n#ifdef USE_WS_PREFIX\n#define WS(x)    WS_##x\n#else\n#define WS(x)    x\n#endif\n\ntypedef USHORT ADDRESS_FAMILY;\n\n#ifndef __CSADDR_DEFINED__\n#define __CSADDR_DEFINED__\n\ntypedef struct _SOCKET_ADDRESS {\n        LPSOCKADDR      lpSockaddr;\n        INT             iSockaddrLength;\n} SOCKET_ADDRESS, *PSOCKET_ADDRESS, *LPSOCKET_ADDRESS;\n\ntypedef struct _CSADDR_INFO {\n        SOCKET_ADDRESS  LocalAddr;\n        SOCKET_ADDRESS  RemoteAddr;\n        INT             iSocketType;\n        INT             iProtocol;\n} CSADDR_INFO, *PCSADDR_INFO, *LPCSADDR_INFO;\n#endif\n\n#ifdef USE_WS_PREFIX\n#define WS__SS_MAXSIZE 128\n#define WS__SS_ALIGNSIZE (sizeof(__int64))\n#define WS__SS_PAD1SIZE (WS__SS_ALIGNSIZE - sizeof(short))\n#define WS__SS_PAD2SIZE (WS__SS_MAXSIZE - 2 * WS__SS_ALIGNSIZE)\n#else\n#define _SS_MAXSIZE 128\n#define _SS_ALIGNSIZE (sizeof(__int64))\n#define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof(short))\n#define _SS_PAD2SIZE (_SS_MAXSIZE - 2 * _SS_ALIGNSIZE)\n#endif\n\ntypedef struct WS(sockaddr_storage) {\n        short ss_family;\n        char __ss_pad1[WS(_SS_PAD1SIZE)];\n        __int64 DECLSPEC_ALIGN(8) __ss_align;\n        char __ss_pad2[WS(_SS_PAD2SIZE)];\n} SOCKADDR_STORAGE, *PSOCKADDR_STORAGE, *LPSOCKADDR_STORAGE;\n\n/*socket address list */\ntypedef struct _SOCKET_ADDRESS_LIST {\n        INT             iAddressCount;\n        SOCKET_ADDRESS  Address[1];\n} SOCKET_ADDRESS_LIST, *LPSOCKET_ADDRESS_LIST;\n\ntypedef enum {\n    ScopeLevelInterface    = 1,\n    ScopeLevelLink         = 2,\n    ScopeLevelSubnet       = 3,\n    ScopeLevelAdmin        = 4,\n    ScopeLevelSite         = 5,\n    ScopeLevelOrganization = 8,\n    ScopeLevelGlobal       = 14,\n    ScopeLevelCount        = 16,\n} SCOPE_LEVEL;\n\ntypedef struct\n{\n    union {\n        struct {\n            ULONG Zone  : 28;\n            ULONG Level : 4;\n        } DUMMYSTRUCTNAME;\n        ULONG Value;\n    } DUMMYUNIONNAME;\n} SCOPE_ID, *PSCOPE_ID;\n\ntypedef struct _WSABUF\n{\n    ULONG len;\n    CHAR* buf;\n} WSABUF, *LPWSABUF;\n\ntypedef struct _WSAMSG {\n    LPSOCKADDR  name;\n    INT         namelen;\n    LPWSABUF    lpBuffers;\n    DWORD       dwBufferCount;\n    WSABUF      Control;\n    DWORD       dwFlags;\n} WSAMSG, *PWSAMSG, *LPWSAMSG;\n\n/*\n * Macros for retrieving control message data returned by WSARecvMsg()\n */\n#define WSA_CMSG_DATA(cmsg)     ((UCHAR*)((WSACMSGHDR*)(cmsg)+1))\n#define WSA_CMSG_FIRSTHDR(mhdr) ((mhdr)->Control.len >= sizeof(WSACMSGHDR) ? (WSACMSGHDR *) (mhdr)->Control.buf : (WSACMSGHDR *) 0)\n#define WSA_CMSG_ALIGN(len)     (((len) + sizeof(SIZE_T) - 1) & ~(sizeof(SIZE_T) - 1))\n/*\n * Next Header: If the response is too short (or the next message in the response\n * is too short) then return NULL, otherwise return the next control message.\n */\n#define WSA_CMSG_NXTHDR(mhdr,cmsg) \\\n        (!(cmsg) ? WSA_CMSG_FIRSTHDR(mhdr) : \\\n         ((mhdr)->Control.len < sizeof(WSACMSGHDR) ? NULL : \\\n         (((unsigned char*)(((WSACMSGHDR*)((unsigned char*)cmsg + WSA_CMSG_ALIGN(cmsg->cmsg_len)))+1) > ((unsigned char*)(mhdr)->Control.buf + (mhdr)->Control.len)) ? NULL : \\\n          (((unsigned char*)cmsg + WSA_CMSG_ALIGN(cmsg->cmsg_len)+WSA_CMSG_ALIGN(((WSACMSGHDR*)((unsigned char*)cmsg + WSA_CMSG_ALIGN(cmsg->cmsg_len)))->cmsg_len) > ((unsigned char*)(mhdr)->Control.buf + (mhdr)->Control.len)) ? NULL : \\\n           (WSACMSGHDR*)((unsigned char*)cmsg + WSA_CMSG_ALIGN(cmsg->cmsg_len))))))\n\ntypedef struct addrinfoexA {\n    int ai_flags;\n    int ai_family;\n    int ai_socktype;\n    int ai_protocol;\n    SIZE_T ai_addrlen;\n    char *ai_canonname;\n    struct WS(sockaddr) *ai_addr;\n    void *ai_blob;\n    SIZE_T ai_bloblen;\n    GUID *ai_provider;\n    struct addrinfoexA *ai_next;\n} ADDRINFOEXA, *PADDRINFOEXA, *LPADDRINFOEXA;\n\ntypedef struct addrinfoexW {\n    int ai_flags;\n    int ai_family;\n    int ai_socktype;\n    int ai_protocol;\n    SIZE_T ai_addrlen;\n    WCHAR *ai_canonname;\n    struct WS(sockaddr) *ai_addr;\n    void *ai_blob;\n    SIZE_T ai_bloblen;\n    GUID *ai_provider;\n    struct addrinfoexW *ai_next;\n} ADDRINFOEXW, *PADDRINFOEXW, *LPADDRINFOEXW;\n\n#endif /* _WS2DEF_ */\n"
  },
  {
    "path": "wine/windows/ws2ipdef.h",
    "content": "/*\n * Copyright (C) 2009 Robert Shearman\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WS2IPDEF__\n#define __WS2IPDEF__\n\n#include <in6addr.h>\n\n#ifdef USE_WS_PREFIX\n#define WS(x)    WS_##x\n#else\n#define WS(x)    x\n#endif\n\ntypedef struct WS(sockaddr_in6_old)\n{\n   SHORT    sin6_family;\n   USHORT   sin6_port;\n   ULONG    sin6_flowinfo;\n   IN6_ADDR sin6_addr;\n} SOCKADDR_IN6_OLD,*PSOCKADDR_IN6_OLD, *LPSOCKADDR_IN6_OLD;\n\ntypedef union sockaddr_gen\n{\n   struct WS(sockaddr) Address;\n   struct WS(sockaddr_in)  AddressIn;\n   struct WS(sockaddr_in6_old) AddressIn6;\n} WS(sockaddr_gen);\n\n/* Structure to keep interface specific information */\ntypedef struct _INTERFACE_INFO\n{\n    ULONG             iiFlags;             /* Interface flags */\n    WS(sockaddr_gen)  iiAddress;           /* Interface address */\n    WS(sockaddr_gen)  iiBroadcastAddress;  /* Broadcast address */\n    WS(sockaddr_gen)  iiNetmask;           /* Network mask */\n} INTERFACE_INFO, * LPINTERFACE_INFO;\n\n/* Possible flags for the  iiFlags - bitmask  */\n#ifndef USE_WS_PREFIX\n#define IFF_UP                0x00000001 /* Interface is up */\n#define IFF_BROADCAST         0x00000002 /* Broadcast is  supported */\n#define IFF_LOOPBACK          0x00000004 /* this is loopback interface */\n#define IFF_POINTTOPOINT      0x00000008 /* this is point-to-point interface */\n#define IFF_MULTICAST         0x00000010 /* multicast is supported */\n#else\n#define WS_IFF_UP             0x00000001 /* Interface is up */\n#define WS_IFF_BROADCAST      0x00000002 /* Broadcast is  supported */\n#define WS_IFF_LOOPBACK       0x00000004 /* this is loopback interface */\n#define WS_IFF_POINTTOPOINT   0x00000008 /* this is point-to-point interface */\n#define WS_IFF_MULTICAST      0x00000010 /* multicast is supported */\n#endif /* USE_WS_PREFIX */\n\n#ifndef USE_WS_PREFIX\n#define IP_OPTIONS                      1\n#define IP_HDRINCL                      2\n#define IP_TOS                          3\n#define IP_TTL                          4\n#define IP_MULTICAST_IF                 9\n#define IP_MULTICAST_TTL                10\n#define IP_MULTICAST_LOOP               11\n#define IP_ADD_MEMBERSHIP               12\n#define IP_DROP_MEMBERSHIP              13\n#define IP_DONTFRAGMENT                 14\n#define IP_ADD_SOURCE_MEMBERSHIP        15\n#define IP_DROP_SOURCE_MEMBERSHIP       16\n#define IP_BLOCK_SOURCE                 17\n#define IP_UNBLOCK_SOURCE               18\n#define IP_PKTINFO                      19\n#define IP_HOPLIMIT                     21\n#define IP_RECEIVE_BROADCAST            22\n#define IP_RECVIF                       24\n#define IP_RECVDSTADDR                  25\n#define IP_IFLIST                       28\n#define IP_ADD_IFLIST                   29\n#define IP_DEL_IFLIST                   30\n#define IP_UNICAST_IF                   31\n#define IP_RTHDR                        32\n#define IP_RECVRTHDR                    38\n#else\n#define WS_IP_OPTIONS                   1\n#define WS_IP_HDRINCL                   2\n#define WS_IP_TOS                       3\n#define WS_IP_TTL                       4\n#define WS_IP_MULTICAST_IF              9\n#define WS_IP_MULTICAST_TTL             10\n#define WS_IP_MULTICAST_LOOP            11\n#define WS_IP_ADD_MEMBERSHIP            12\n#define WS_IP_DROP_MEMBERSHIP           13\n#define WS_IP_DONTFRAGMENT              14\n#define WS_IP_ADD_SOURCE_MEMBERSHIP     15\n#define WS_IP_DROP_SOURCE_MEMBERSHIP    16\n#define WS_IP_BLOCK_SOURCE              17\n#define WS_IP_UNBLOCK_SOURCE            18\n#define WS_IP_PKTINFO                   19\n#define WS_IP_HOPLIMIT                  21\n#define WS_IP_RECEIVE_BROADCAST         22\n#define WS_IP_RECVIF                    24\n#define WS_IP_RECVDSTADDR               25\n#define WS_IP_IFLIST                    28\n#define WS_IP_ADD_IFLIST                29\n#define WS_IP_DEL_IFLIST                30\n#define WS_IP_UNICAST_IF                31\n#define WS_IP_RTHDR                     32\n#define WS_IP_RECVRTHDR                 38\n#endif /* USE_WS_PREFIX */\n\ntypedef struct WS(sockaddr_in6)\n{\n   SHORT    sin6_family;\n   USHORT   sin6_port;\n   ULONG    sin6_flowinfo;\n   IN6_ADDR sin6_addr;\n   ULONG    sin6_scope_id;\n} SOCKADDR_IN6,*PSOCKADDR_IN6, *LPSOCKADDR_IN6;\n\ntypedef struct WS(sockaddr_in6_pair)\n{\n    PSOCKADDR_IN6 SourceAddress;\n    PSOCKADDR_IN6 DestinationAddress;\n} SOCKADDR_IN6_PAIR, *PSOCKADDR_IN6_PAIR;\n\ntypedef union _SOCKADDR_INET\n{\n    SOCKADDR_IN     Ipv4;\n    SOCKADDR_IN6    Ipv6;\n    ADDRESS_FAMILY  si_family;\n} SOCKADDR_INET, *PSOCKADDR_INET;\n\n/*\n * Multicast group information\n */\n\ntypedef struct WS(ip_mreq)\n{\n    struct WS(in_addr) imr_multiaddr;\n    struct WS(in_addr) imr_interface;\n} WS(IP_MREQ), *WS(PIP_MREQ);\n\ntypedef struct WS(ipv6_mreq)\n{\n    struct WS(in6_addr) ipv6mr_multiaddr;\n    unsigned int ipv6mr_interface;\n} WS(IPV6_MREQ), *WS(PIPV6_MREQ);\n\ntypedef struct WS(ip_mreq_source) {\n    struct WS(in_addr) imr_multiaddr;\n    struct WS(in_addr) imr_sourceaddr;\n    struct WS(in_addr) imr_interface;\n} WS(IP_MREQ_SOURCE), *WS(PIP_MREQ_SOURCE);\n\ntypedef struct WS(ip_msfilter) {\n    struct WS(in_addr) imsf_multiaddr;\n    struct WS(in_addr) imsf_interface;\n    ULONG              imsf_fmode;\n    ULONG              imsf_numsrc;\n    struct WS(in_addr) imsf_slist[1];\n} WS(IP_MSFILTER), *WS(PIP_MSFILTER);\n\ntypedef struct WS(in_pktinfo) {\n    IN_ADDR ipi_addr;\n    UINT    ipi_ifindex;\n} IN_PKTINFO, *PIN_PKTINFO;\n\n#ifndef USE_WS_PREFIX\n#define IPV6_OPTIONS                    1\n#define IPV6_HDRINCL                    2\n#define IPV6_UNICAST_HOPS               4\n#define IPV6_MULTICAST_IF               9\n#define IPV6_MULTICAST_HOPS             10\n#define IPV6_MULTICAST_LOOP             11\n#define IPV6_ADD_MEMBERSHIP             12\n#define IPV6_JOIN_GROUP                 IPV6_ADD_MEMBERSHIP\n#define IPV6_DROP_MEMBERSHIP            13\n#define IPV6_LEAVE_GROUP                IPV6_DROP_MEMBERSHIP\n#define IPV6_DONTFRAG                   14\n#define IPV6_PKTINFO                    19\n#define IPV6_HOPLIMIT                   21\n#define IPV6_PROTECTION_LEVEL           23\n#define IPV6_RECVIF                     24\n#define IPV6_RECVDSTADDR                25\n#define IPV6_CHECKSUM                   26\n#define IPV6_V6ONLY                     27\n#define IPV6_IFLIST                     28\n#define IPV6_ADD_IFLIST                 29\n#define IPV6_DEL_IFLIST                 30\n#define IPV6_UNICAST_IF                 31\n#define IPV6_RTHDR                      32\n#define IPV6_RECVRTHDR                  38\n#else\n#define WS_IPV6_OPTIONS                 1\n#define WS_IPV6_HDRINCL                 2\n#define WS_IPV6_UNICAST_HOPS            4\n#define WS_IPV6_MULTICAST_IF            9\n#define WS_IPV6_MULTICAST_HOPS          10\n#define WS_IPV6_MULTICAST_LOOP          11\n#define WS_IPV6_ADD_MEMBERSHIP          12\n#define WS_IPV6_DROP_MEMBERSHIP         13\n#define WS_IPV6_LEAVE_GROUP             WS_IPV6_DROP_MEMBERSHIP\n#define WS_IPV6_DONTFRAG                14\n#define WS_IPV6_PKTINFO                 19\n#define WS_IPV6_HOPLIMIT                21\n#define WS_IPV6_PROTECTION_LEVEL        23\n#define WS_IPV6_RECVIF                  24\n#define WS_IPV6_RECVDSTADDR             25\n#define WS_IPV6_CHECKSUM                26\n#define WS_IPV6_V6ONLY                  27\n#define WS_IPV6_IFLIST                  28\n#define WS_IPV6_ADD_IFLIST              29\n#define WS_IPV6_DEL_IFLIST              30\n#define WS_IPV6_UNICAST_IF              31\n#define WS_IPV6_RTHDR                   32\n#define WS_IPV6_RECVRTHDR               38\n#endif /* USE_WS_PREFIX */\n\n#ifndef USE_WS_PREFIX\n#define TCP_OFFLOAD_NO_PREFERENCE       0\n#define TCP_OFFLOAD_NOT_PREFERRED       1\n#define TCP_OFFLOAD_PREFERRED           2\n#else\n#define WS_TCP_OFFLOAD_NO_PREFERENCE    0\n#define WS_TCP_OFFLOAD_NOT_PREFERRED    1\n#define WS_TCP_OFFLOAD_PREFERRED        2\n#endif /* USE_WS_PREFIX */\n\n#ifndef USE_WS_PREFIX\n/* TCP_NODELAY is defined elsewhere */\n#define TCP_EXPEDITED_1122              2\n#define TCP_KEEPALIVE                   3\n#define TCP_MAXSEG                      4\n#define TCP_MAXRT                       5\n#define TCP_STDURG                      6\n#define TCP_NOURG                       7\n#define TCP_ATMARK                      8\n#define TCP_NOSYNRETRIES                9\n#define TCP_TIMESTAMPS                  10\n#define TCP_OFFLOAD_PREFERENCE          11\n#define TCP_CONGESTION_ALGORITHM        12\n#define TCP_DELAY_FIN_ACK               13\n#else\n/* WS_TCP_NODELAY is defined elsewhere */\n#define WS_TCP_EXPEDITED_1122           2\n#define WS_TCP_KEEPALIVE                3\n#define WS_TCP_MAXSEG                   4\n#define WS_TCP_MAXRT                    5\n#define WS_TCP_STDURG                   6\n#define WS_TCP_NOURG                    7\n#define WS_TCP_ATMARK                   8\n#define WS_TCP_NOSYNRETRIES             9\n#define WS_TCP_TIMESTAMPS               10\n#define WS_TCP_OFFLOAD_PREFERENCE       11\n#define WS_TCP_CONGESTION_ALGORITHM     12\n#define WS_TCP_DELAY_FIN_ACK            13\n#endif /* USE_WS_PREFIX */\n\n#ifndef USE_WS_PREFIX\n#define INET_ADDRSTRLEN         22\n#define INET6_ADDRSTRLEN        65\n#define IN6ADDR_ANY_INIT        { 0 }\n#define IN6ADDR_LOOPBACK_INIT   { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }\n#else\n#define WS_INET_ADDRSTRLEN      22\n#define WS_INET6_ADDRSTRLEN     65\n#define WS_IN6ADDR_ANY_INIT     { 0 }\n#define WS_IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }\n#endif /* USE_WS_PREFIX */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nstatic inline BOOLEAN WS(IN6_IS_ADDR_LOOPBACK) ( const IN6_ADDR *a )\n{\n    return ((a->s6_words[0] == 0) &&\n            (a->s6_words[1] == 0) &&\n            (a->s6_words[2] == 0) &&\n            (a->s6_words[3] == 0) &&\n            (a->s6_words[4] == 0) &&\n            (a->s6_words[5] == 0) &&\n            (a->s6_words[6] == 0) &&\n            (a->s6_words[7] == 0x0100));\n}\n\nstatic inline BOOLEAN WS(IN6_IS_ADDR_MULTICAST) ( const IN6_ADDR *a )\n{\n    return (a->s6_bytes[0] == 0xff);\n}\n\nstatic inline BOOLEAN WS(IN6_IS_ADDR_UNSPECIFIED) ( const IN6_ADDR *a )\n{\n    return ((a->s6_words[0] == 0) &&\n            (a->s6_words[1] == 0) &&\n            (a->s6_words[2] == 0) &&\n            (a->s6_words[3] == 0) &&\n            (a->s6_words[4] == 0) &&\n            (a->s6_words[5] == 0) &&\n            (a->s6_words[6] == 0) &&\n            (a->s6_words[7] == 0));\n}\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WS2IPDEF__ */\n"
  },
  {
    "path": "wine/windows/ws2spi.h",
    "content": "/*\n * WS2SPI.H -- definitions to be used with the WinSock service provider.\n *\n * Copyright (C) 2001 Patrik Stridvall\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _WINSOCK2SPI_\n#define _WINSOCK2SPI_\n\n#ifndef _WINSOCK2API_\n#include <winsock2.h>\n#endif /* !defined(_WINSOCK2API_) */\n\n#include <pshpack4.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* defined(__cplusplus) */\n\ntypedef BOOL (WINAPI *LPWPUPOSTMESSAGE)(HWND,UINT,WPARAM,LPARAM);\n\nWSAEVENT WINAPI WPUCompleteOverlappedRequest(SOCKET,LPWSAOVERLAPPED,DWORD,DWORD,LPINT);\nINT      WINAPI WSCInstallProvider(const LPGUID,LPCWSTR,const LPWSAPROTOCOL_INFOW,\n                                   DWORD,LPINT);\nINT      WINAPI WSCDeinstallProvider(LPGUID,LPINT);\nINT      WINAPI WSCEnableNSProvider(LPGUID,BOOL);\nINT      WINAPI WSCEnumProtocols(LPINT,LPWSAPROTOCOL_INFOW,LPDWORD,LPINT);\nINT      WINAPI WSCGetProviderPath(LPGUID,LPWSTR,LPINT,LPINT);\nINT      WINAPI WSCInstallNameSpace(LPWSTR,LPWSTR,DWORD,DWORD,LPGUID);\nINT      WINAPI WSCUnInstallNameSpace(LPGUID);\nINT      WINAPI WSCUpdateProvider(LPGUID, const WCHAR *, const LPWSAPROTOCOL_INFOW, DWORD, LPINT);\nINT      WINAPI WSCWriteProviderOrder(LPDWORD,DWORD);\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif /* defined(__cplusplus) */\n\n#include <poppack.h>\n\n#endif /* !defined(_WINSOCK2SPI_) */\n"
  },
  {
    "path": "wine/windows/ws2tcpip.h",
    "content": "/*\n * Copyright (C) 2001 Francois Gouget\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WS2TCPIP__\n#define __WS2TCPIP__\n\n#include <winsock2.h>\n#include <ws2ipdef.h>\n#include <limits.h>\n\n#ifdef USE_WS_PREFIX\n#define WS(x)    WS_##x\n#else\n#define WS(x)    x\n#endif\n\n/* for addrinfo calls */\ntypedef struct WS(addrinfo)\n{\n    int                ai_flags;\n    int                ai_family;\n    int                ai_socktype;\n    int                ai_protocol;\n    SIZE_T             ai_addrlen;\n    char *             ai_canonname;\n    struct WS(sockaddr)*   ai_addr;\n    struct WS(addrinfo)*   ai_next;\n} ADDRINFOA, *PADDRINFOA;\n\ntypedef struct WS(addrinfoW)\n{\n    int                ai_flags;\n    int                ai_family;\n    int                ai_socktype;\n    int                ai_protocol;\n    SIZE_T             ai_addrlen;\n    PWSTR              ai_canonname;\n    struct WS(sockaddr)*   ai_addr;\n    struct WS(addrinfoW)*   ai_next;\n} ADDRINFOW, *PADDRINFOW;\n\n#ifdef USE_WS_PREFIX\ntypedef int WS_socklen_t;\n#else\n#define socklen_t int  /* avoid conflicts with the system's socklen_t typedef */\n#endif\n\ntypedef ADDRINFOA ADDRINFO, *LPADDRINFO;\n\n/* Possible Windows flags for getaddrinfo() */\n#ifndef USE_WS_PREFIX\n# define AI_PASSIVE                0x00000001\n# define AI_CANONNAME              0x00000002\n# define AI_NUMERICHOST            0x00000004\n# define AI_NUMERICSERV            0x00000008\n# define AI_ADDRCONFIG             0x00000400\n# define AI_V4MAPPED               0x00000800\n# define AI_NON_AUTHORITATIVE      0x00004000\n# define AI_SECURE                 0x00008000\n# define AI_RETURN_PREFERRED_NAMES 0x00010000\n# define AI_DISABLE_IDN_ENCODING   0x00080000\n/* getaddrinfo error codes */\n# define EAI_AGAIN\tWSATRY_AGAIN\n# define EAI_BADFLAGS\tWSAEINVAL\n# define EAI_FAIL\tWSANO_RECOVERY\n# define EAI_FAMILY\tWSAEAFNOSUPPORT\n# define EAI_MEMORY\tWSA_NOT_ENOUGH_MEMORY\n# define EAI_NODATA\tEAI_NONAME\n# define EAI_NONAME\tWSAHOST_NOT_FOUND\n# define EAI_SERVICE\tWSATYPE_NOT_FOUND\n# define EAI_SOCKTYPE\tWSAESOCKTNOSUPPORT\n#else\n# define WS_AI_PASSIVE                0x00000001\n# define WS_AI_CANONNAME              0x00000002\n# define WS_AI_NUMERICHOST            0x00000004\n# define WS_AI_NUMERICSERV            0x00000008\n# define WS_AI_ADDRCONFIG             0x00000400\n# define WS_AI_V4MAPPED               0x00000800\n# define WS_AI_NON_AUTHORITATIVE      0x00004000\n# define WS_AI_SECURE                 0x00008000\n# define WS_AI_RETURN_PREFERRED_NAMES 0x00010000\n# define WS_AI_DISABLE_IDN_ENCODING   0x00080000\n/* getaddrinfo error codes */\n# define WS_EAI_AGAIN\tWSATRY_AGAIN\n# define WS_EAI_BADFLAGS\tWSAEINVAL\n# define WS_EAI_FAIL\tWSANO_RECOVERY\n# define WS_EAI_FAMILY\tWSAEAFNOSUPPORT\n# define WS_EAI_MEMORY\tWSA_NOT_ENOUGH_MEMORY\n# define WS_EAI_NODATA\tWS_EAI_NONAME\n# define WS_EAI_NONAME\tWSAHOST_NOT_FOUND\n# define WS_EAI_SERVICE\tWSATYPE_NOT_FOUND\n# define WS_EAI_SOCKTYPE\tWSAESOCKTNOSUPPORT\n#endif\n\n#ifndef USE_WS_PREFIX\n# define NI_MAXHOST         1025\n# define NI_MAXSERV         32\n#else\n# define WS_NI_MAXHOST      1025\n# define WS_NI_MAXSERV      32\n#endif\n\n/* Possible Windows flags for getnameinfo() */\n#ifndef USE_WS_PREFIX\n# define NI_NOFQDN          0x01\n# define NI_NUMERICHOST     0x02\n# define NI_NAMEREQD        0x04\n# define NI_NUMERICSERV     0x08\n# define NI_DGRAM           0x10\n#else\n# define WS_NI_NOFQDN       0x01\n# define WS_NI_NUMERICHOST  0x02\n# define WS_NI_NAMEREQD     0x04\n# define WS_NI_NUMERICSERV  0x08\n# define WS_NI_DGRAM        0x10\n#endif\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define GAI_STRERROR_BUFFER_SIZE        1024\n\nstatic inline char *gai_strerrorA(int errcode)\n{\n    static char buffer[GAI_STRERROR_BUFFER_SIZE + 1];\n\n    /* FIXME: should format message from system, ignoring inserts in neutral\n     * language */\n    buffer[0] = '\\0';\n\n    return buffer;\n}\n\nstatic inline WCHAR *gai_strerrorW(int errcode)\n{\n    static WCHAR buffer[GAI_STRERROR_BUFFER_SIZE + 1];\n\n    /* FIXME: should format message from system, ignoring inserts in neutral\n     * language */\n    buffer[0] = '\\0';\n\n    return buffer;\n}\n\n#ifdef USE_WS_PREFIX\n# define WS_gai_strerror WINELIB_NAME_AW(gai_strerror)\n#elif defined(WINE_NO_UNICODE_MACROS)\n# define gai_strerror gai_strerrorA\n#else\n# define gai_strerror WINELIB_NAME_AW(gai_strerror)\n#endif\n\ntypedef void (CALLBACK *LPLOOKUPSERVICE_COMPLETION_ROUTINE)(DWORD,DWORD,WSAOVERLAPPED*);\n\nvoid WINAPI WS(freeaddrinfo)(LPADDRINFO);\n#define     FreeAddrInfoA WS(freeaddrinfo)\nvoid WINAPI FreeAddrInfoW(PADDRINFOW);\n#define     FreeAddrInfo WINELIB_NAME_AW(FreeAddrInfo)\nvoid WINAPI FreeAddrInfoExW(ADDRINFOEXW*);\nint WINAPI  WS(getaddrinfo)(const char*,const char*,const struct WS(addrinfo)*,struct WS(addrinfo)**);\n#define     GetAddrInfoA WS(getaddrinfo)\nint WINAPI  GetAddrInfoW(PCWSTR,PCWSTR,const ADDRINFOW*,PADDRINFOW*);\n#define     GetAddrInfo WINELIB_NAME_AW(GetAddrInfo)\nint WINAPI  GetAddrInfoExA(const char*,const char*,DWORD,GUID*,const ADDRINFOEXA*,ADDRINFOEXA**,struct timeval*,\n                           OVERLAPPED*,LPLOOKUPSERVICE_COMPLETION_ROUTINE,HANDLE*);\nint WINAPI  GetAddrInfoExW(const WCHAR*,const WCHAR*,DWORD,GUID*, const ADDRINFOEXW*,ADDRINFOEXW**,struct timeval*,\n                           OVERLAPPED*,LPLOOKUPSERVICE_COMPLETION_ROUTINE,HANDLE*);\n#define     GetAddrInfoEx WINELIB_NAME_AW(GetAddrInfoExW)\nint WINAPI  GetAddrInfoExOverlappedResult(OVERLAPPED*);\nint WINAPI  GetAddrInfoExCancel(HANDLE*);\nint WINAPI  WS(getnameinfo)(const SOCKADDR*,WS(socklen_t),PCHAR,DWORD,PCHAR,DWORD,INT);\n#define     GetNameInfoA WS(getnameinfo)\nINT WINAPI  GetNameInfoW(const SOCKADDR*,WS(socklen_t),PWCHAR,DWORD,PWCHAR,DWORD,INT);\n#define     GetNameInfo WINELIB_NAME_AW(GetNameInfo)\nPCSTR WINAPI WS(inet_ntop)(INT,PVOID,PSTR,SIZE_T);\n#define     InetNtopA WS(inet_ntop)\nPCWSTR WINAPI InetNtopW(INT,PVOID,PWSTR,SIZE_T);\n#define     InetNtop WINELIB_NAME_AW(InetNtop)\nint WINAPI  WS(inet_pton)(INT,PCSTR,PVOID);\n#define     InetPtonA WS(inet_pton)\nint WINAPI  InetPtonW(INT,PCWSTR,PVOID);\n#define     InetPton WINELIB_NAME_AW(InetPton)\n\n/*\n * Ws2tcpip Function Typedefs\n *\n * Remember to keep this section in sync with the\n * prototypes above.\n */\n#if INCL_WINSOCK_API_TYPEDEFS\n\ntypedef void (WINAPI *LPFN_FREEADDRINFO)(LPADDRINFO);\n#define LPFN_FREEADDRINFOA LPFN_FREEADDRINFO\ntypedef void (WINAPI *LPFN_FREEADDRINFOW)(PADDRINFOW);\n#define LPFN_FREEADDRINFOT WINELIB_NAME_AW(LPFN_FREEADDRINFO)\ntypedef int (WINAPI *LPFN_GETADDRINFO)(const char*,const char*,const struct WS(addrinfo)*,struct WS(addrinfo)**);\n#define LPFN_GETADDRINFOA LPFN_GETADDRINFO\ntypedef int (WINAPI *LPFN_GETADDRINFOW)(PCWSTR,PCWSTR,const ADDRINFOW*,PADDRINFOW*);\n#define LPFN_GETADDRINFOT WINELIB_NAME_AW(LPFN_GETADDRINFO)\ntypedef int (WINAPI *LPFN_GETNAMEINFO)(const struct sockaddr*,socklen_t,char*,DWORD,char*,DWORD,int);\n#define LPFN_GETNAMEINFOA LPFN_GETNAMEINFO\ntypedef int (WINAPI *LPFN_GETNAMEINFOW)(const SOCKADDR*,socklen_t,PWCHAR,DWORD,PWCHAR,DWORD,INT);\n#define LPFN_GETNAMEINFOT WINELIB_NAME_AW(LPFN_GETNAMEINFO)\n\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WS2TCPIP__ */\n"
  },
  {
    "path": "wine/windows/wsdapi.h",
    "content": "/*\n * Copyright 2017 Owen Rudge for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef WSDAPI_H\n#define WSDAPI_H\n\n#include <wsdbase.h>\n#include <wsdxml.h>\n#include <wsdxmldom.h>\n#include <wsdtypes.h>\n#include <wsddisco.h>\n#include <wsdutil.h>\n\n#endif\n"
  },
  {
    "path": "wine/windows/wsdbase.idl",
    "content": "/*\n * Copyright 2017 Owen Rudge for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"objidl.idl\";\n\ncpp_quote(\"#define WSDAPI_ADDRESSFAMILY_IPV4 1\")\ncpp_quote(\"#define WSDAPI_ADDRESSFAMILY_IPV6 2\")\n\ninterface IWSDAddress;\ninterface IWSDUdpAddress;\ninterface IWSDMessageParameters;\n\ncpp_quote(\"HRESULT WINAPI WSDCreateUdpAddress(IWSDUdpAddress **ppAddress);\")\n\n#ifndef SOCKADDR_STORAGE\ncpp_quote(\"#if 1\")\ncpp_quote(\"#ifndef __CSADDR_DEFINED__\")\ncpp_quote(\"typedef struct SOCKADDR_STORAGE SOCKADDR_STORAGE;\")\ncpp_quote(\"#endif\")\ncpp_quote(\"#else\")\ntypedef void SOCKADDR_STORAGE;\ncpp_quote(\"#endif\")\n#endif\n\n[\nuuid(b9574c6c-12a6-4f74-93a1-3318ff605759),\nobject,\nlocal\n]\ninterface IWSDAddress : IUnknown\n{\n    HRESULT Serialize([out, size_is(cchLength)] LPWSTR pszBuffer, [in] DWORD cchLength, [in] BOOL fSafe);\n    HRESULT Deserialize([in] LPCWSTR pszBuffer);\n}\n\n[\nuuid(70d23498-4ee6-4340-a3df-d845d2235467),\nobject,\nlocal\n]\ninterface IWSDTransportAddress : IWSDAddress\n{\n    HRESULT GetPort([out] WORD *pwPort);\n    HRESULT SetPort([in] WORD wPort);\n    HRESULT GetTransportAddress([out] LPCWSTR *ppszAddress);\n    HRESULT GetTransportAddressEx([in] BOOL fSafe, [out] LPCWSTR *ppszAddress);\n    HRESULT SetTransportAddress([in] LPCWSTR pszAddress);\n}\n\ntypedef enum _WSDUdpMessageType\n{\n    ONE_WAY,\n    TWO_WAY\n} WSDUdpMessageType;\n\n[\nuuid(74d6124a-a441-4f78-a1eb-97a8d1996893),\nobject,\nlocal\n]\ninterface IWSDUdpAddress : IWSDTransportAddress\n{\n    HRESULT SetSockaddr([in] const SOCKADDR_STORAGE *pSockAddr);\n    HRESULT GetSockaddr([out] SOCKADDR_STORAGE *pSockAddr);\n    HRESULT SetExclusive(BOOL fExclusive);\n    HRESULT GetExclusive();\n    HRESULT SetMessageType([in] WSDUdpMessageType messageType);\n    HRESULT GetMessageType([out] WSDUdpMessageType* pMessageType);\n    HRESULT SetTTL([in] DWORD dwTTL);\n    HRESULT GetTTL([out] DWORD *pdwTTL);\n    HRESULT SetAlias([in] const GUID* pAlias);\n    HRESULT GetAlias([out] GUID *pAlias);\n}\n\n[\nuuid(1fafe8a2-e6fc-4b80-b6cf-b7d45c416d7c),\nobject\n]\ninterface IWSDMessageParameters : IUnknown\n{\n    HRESULT GetLocalAddress([out] IWSDAddress** ppAddress);\n    HRESULT SetLocalAddress([in] IWSDAddress* pAddress);\n    HRESULT GetRemoteAddress([out] IWSDAddress** ppAddress);\n    HRESULT SetRemoteAddress([in] IWSDAddress* pAddress);\n    HRESULT GetLowerParameters([out] IWSDMessageParameters** ppTxParams);\n}\n\ncpp_quote(\"HRESULT WINAPI WSDCreateUdpMessageParameters(IWSDUdpMessageParameters **ppTxParams);\")\n\ntypedef struct _WSDUdpRetransmitParams\n{\n    ULONG ulSendDelay;\n    ULONG ulRepeat;\n    ULONG ulRepeatMinDelay;\n    ULONG ulRepeatMaxDelay;\n    ULONG ulRepeatUpperDelay;\n} WSDUdpRetransmitParams;\n\n[\nuuid(9934149f-8f0c-447b-aa0b-73124b0ca7f0),\nobject\n]\ninterface IWSDUdpMessageParameters : IWSDMessageParameters\n{\n    HRESULT SetRetransmitParams([in] const WSDUdpRetransmitParams *pParams);\n    HRESULT GetRetransmitParams([out] WSDUdpRetransmitParams *pParams);\n}\n"
  },
  {
    "path": "wine/windows/wsddisco.idl",
    "content": "/*\n * Copyright 2017 Owen Rudge for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"objidl.idl\";\nimport \"wsdxmldom.h\";\nimport \"wsdtypes.h\";\n\ninterface IWSDScopeMatchingRule;\ninterface IWSDiscoveryPublisherNotify;\ninterface IWSDiscoveryPublisher;\ninterface IWSDXMLContext;\n\n[\nuuid(fcafe424-fef5-481a-bd9f-33ce0574256f),\nobject,\nlocal,\nrestricted,\npointer_default(unique)\n]\ninterface IWSDScopeMatchingRule : IUnknown\n{\n  HRESULT GetScopeRule([out] LPCWSTR *ppszScopeMatchingRule);\n  HRESULT MatchScopes([in] LPCWSTR pszScope1, [in] LPCWSTR pszScope2, [out] BOOL *pfMatch);\n}\n\n[\nuuid(e67651b0-337a-4b3c-9758-733388568251),\nobject,\nlocal,\nrestricted,\npointer_default(unique)\n]\ninterface IWSDiscoveryPublisherNotify : IUnknown\n{\n  HRESULT ProbeHandler([in] const WSD_SOAP_MESSAGE *pSoap, [in] IWSDMessageParameters *pMessageParameters);\n  HRESULT ResolveHandler([in] const WSD_SOAP_MESSAGE *pSoap, [in] IWSDMessageParameters *pMessageParameters);\n}\n\n[\nuuid(AE01E1A8-3ff9-4148-8116-057cc616fe13),\nobject,\nlocal,\nrestricted,\npointer_default(unique)\n]\ninterface IWSDiscoveryPublisher : IUnknown\n{\n    HRESULT SetAddressFamily([in] DWORD dwAddressFamily);\n    HRESULT RegisterNotificationSink([in] IWSDiscoveryPublisherNotify *pSink);\n    HRESULT UnRegisterNotificationSink([in] IWSDiscoveryPublisherNotify *pSink);\n\n    HRESULT Publish([in] LPCWSTR pszId, [in] ULONGLONG ullMetadataVersion, [in] ULONGLONG ullInstanceId, [in] ULONGLONG ullMessageNumber,\n        [in, optional] LPCWSTR pszSessionId, [in, optional] const WSD_NAME_LIST *pTypesList, [in, optional] const WSD_URI_LIST *pScopesList,\n        [in, optional] const WSD_URI_LIST *pXAddrsList);\n\n    HRESULT UnPublish([in] LPCWSTR pszId, [in] ULONGLONG ullInstanceId, [in] ULONGLONG ullMessageNumber, [in, optional] LPCWSTR pszSessionId,\n        [in, optional] const WSDXML_ELEMENT *pAny);\n\n    HRESULT MatchProbe([in] const WSD_SOAP_MESSAGE *pProbeMessage, [in] IWSDMessageParameters *pMessageParameters, [in] LPCWSTR pszId,\n        [in] ULONGLONG ullMetadataVersion, [in] ULONGLONG ullInstanceId, [in] ULONGLONG ullMessageNumber, [in, optional] LPCWSTR pszSessionId,\n        [in, optional] const WSD_NAME_LIST *pTypesList, [in, optional] const WSD_URI_LIST *pScopesList, [in, optional] const WSD_URI_LIST *pXAddrsList);\n\n    HRESULT MatchResolve([in] const WSD_SOAP_MESSAGE *pResolveMessage, [in] IWSDMessageParameters *pMessageParameters, [in] LPCWSTR pszId,\n        [in] ULONGLONG ullMetadataVersion, [in] ULONGLONG ullInstanceId, [in] ULONGLONG ullMessageNumber, [in, optional] LPCWSTR pszSessionId,\n        [in, optional] const WSD_NAME_LIST *pTypesList, [in, optional] const WSD_URI_LIST *pScopesList, [in, optional] const WSD_URI_LIST *pXAddrsList);\n\n    HRESULT PublishEx([in] LPCWSTR pszId, [in] ULONGLONG ullMetadataVersion, [in] ULONGLONG ullInstanceId, [in] ULONGLONG ullMessageNumber,\n        [in, optional] LPCWSTR pszSessionId, [in, optional] const WSD_NAME_LIST *pTypesList, [in, optional] const WSD_URI_LIST *pScopesList,\n        [in, optional] const WSD_URI_LIST *pXAddrsList, [in, optional] const WSDXML_ELEMENT *pHeaderAny,\n        [in, optional] const WSDXML_ELEMENT *pReferenceParameterAny, [in, optional] const WSDXML_ELEMENT *pPolicyAny,\n        [in, optional] const WSDXML_ELEMENT *pEndpointReferenceAny, [in, optional] const WSDXML_ELEMENT *pAny);\n\n    HRESULT MatchProbeEx([in] const WSD_SOAP_MESSAGE *pProbeMessage, [in] IWSDMessageParameters *pMessageParameters, [in] LPCWSTR pszId,\n        [in] ULONGLONG ullMetadataVersion, [in] ULONGLONG ullInstanceId, [in] ULONGLONG ullMessageNumber, [in, optional] LPCWSTR pszSessionId,\n        [in, optional] const WSD_NAME_LIST *pTypesList, [in, optional] const WSD_URI_LIST *pScopesList, [in, optional] const WSD_URI_LIST *pXAddrsList,\n        [in, optional] const WSDXML_ELEMENT *pHeaderAny, [in, optional] const WSDXML_ELEMENT *pReferenceParameterAny,\n        [in, optional] const WSDXML_ELEMENT *pPolicyAny, [in, optional] const WSDXML_ELEMENT *pEndpointReferenceAny,\n        [in, optional] const WSDXML_ELEMENT *pAny);\n\n    HRESULT MatchResolveEx([in] const WSD_SOAP_MESSAGE *pResolveMessage, [in] IWSDMessageParameters *pMessageParameters, [in] LPCWSTR pszId,\n        [in] ULONGLONG ullMetadataVersion, [in] ULONGLONG ullInstanceId, [in] ULONGLONG ullMessageNumber, [in, optional] LPCWSTR pszSessionId,\n        [in, optional] const WSD_NAME_LIST *pTypesList, [in, optional] const WSD_URI_LIST *pScopesList, [in, optional] const WSD_URI_LIST *pXAddrsList,\n        [in, optional] const WSDXML_ELEMENT *pHeaderAny, [in, optional] const WSDXML_ELEMENT *pReferenceParameterAny,\n        [in, optional] const WSDXML_ELEMENT *pPolicyAny, [in, optional] const WSDXML_ELEMENT *pEndpointReferenceAny,\n        [in, optional] const WSDXML_ELEMENT *pAny);\n\n    HRESULT RegisterScopeMatchingRule([in] IWSDScopeMatchingRule *pScopeMatchingRule);\n    HRESULT UnRegisterScopeMatchingRule([in] IWSDScopeMatchingRule *pScopeMatchingRule);\n    HRESULT GetXMLContext([out] IWSDXMLContext **ppContext);\n}\n\ncpp_quote(\"HRESULT WINAPI WSDCreateDiscoveryPublisher(IWSDXMLContext* pContext, IWSDiscoveryPublisher **ppPublisher);\")\n"
  },
  {
    "path": "wine/windows/wsdtypes.h",
    "content": "/*\n * Copyright 2017 Owen Rudge for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef WSDTYPES_H\n#define WSDTYPES_H\n\ninterface IWSDMessageParameters;\n\ntypedef struct _WSD_APP_SEQUENCE WSD_APP_SEQUENCE;\ntypedef struct _WSD_HEADER_RELATESTO WSD_HEADER_RELATESTO;\ntypedef struct _WSD_SOAP_HEADER WSD_SOAP_HEADER;\ntypedef struct _WSD_SOAP_MESSAGE WSD_SOAP_MESSAGE;\ntypedef struct _WSD_NAME_LIST WSD_NAME_LIST;\ntypedef struct _WSD_REFERENCE_PARAMETERS WSD_REFERENCE_PARAMETERS;\ntypedef struct _WSD_REFERENCE_PROPERTIES WSD_REFERENCE_PROPERTIES;\ntypedef struct _WSD_ENDPOINT_REFERENCE WSD_ENDPOINT_REFERENCE;\ntypedef struct _WSD_URI_LIST WSD_URI_LIST;\ntypedef struct _WSD_PROBE WSD_PROBE;\ntypedef struct _WSD_SCOPES WSD_SCOPES;\n\nstruct _WSD_APP_SEQUENCE\n{\n  ULONGLONG InstanceId;\n  const WCHAR *SequenceId;\n  ULONGLONG MessageNumber;\n};\n\nstruct _WSD_NAME_LIST\n{\n    WSD_NAME_LIST *Next;\n    WSDXML_NAME *Element;\n};\n\nstruct _WSD_REFERENCE_PARAMETERS\n{\n    WSDXML_ELEMENT *Any;\n};\n\nstruct _WSD_REFERENCE_PROPERTIES\n{\n    WSDXML_ELEMENT *Any;\n};\n\nstruct _WSD_ENDPOINT_REFERENCE\n{\n    const WCHAR *Address;\n    WSD_REFERENCE_PROPERTIES ReferenceProperties;\n    WSD_REFERENCE_PARAMETERS ReferenceParameters;\n    WSDXML_NAME *PortType;\n    WSDXML_NAME *ServiceName;\n    WSDXML_ELEMENT *Any;\n};\n\nstruct _WSD_URI_LIST\n{\n    WSD_URI_LIST *Next;\n    const WCHAR *Element;\n};\n\nstruct _WSD_HEADER_RELATESTO\n{\n    WSDXML_NAME *RelationshipType;\n    const WCHAR *MessageID;\n};\n\nstruct _WSD_SOAP_HEADER\n{\n    const WCHAR *To;\n    const WCHAR *Action;\n    const WCHAR *MessageID;\n    WSD_HEADER_RELATESTO RelatesTo;\n    WSD_ENDPOINT_REFERENCE *ReplyTo;\n    WSD_ENDPOINT_REFERENCE *From;\n    WSD_ENDPOINT_REFERENCE *FaultTo;\n    WSD_APP_SEQUENCE *AppSequence;\n    WSDXML_ELEMENT *AnyHeaders;\n};\n\nstruct _WSD_SOAP_MESSAGE\n{\n    WSD_SOAP_HEADER Header;\n    void *Body;\n    WSDXML_TYPE *BodyType;\n};\n\nstruct _WSD_PROBE\n{\n    WSD_NAME_LIST *Types;\n    WSD_SCOPES *Scopes;\n    WSDXML_ELEMENT *Any;\n};\n\nstruct _WSD_SCOPES\n{\n    const WCHAR *MatchBy;\n    WSD_URI_LIST *Scopes;\n};\n\n#endif\n"
  },
  {
    "path": "wine/windows/wsdutil.h",
    "content": "/*\n * Copyright 2017 Owen Rudge for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef WSDUTIL_H\n#define WSDUTIL_H\n\nvoid * WINAPI WSDAllocateLinkedMemory(void *pParent, SIZE_T cbSize);\nvoid WINAPI WSDAttachLinkedMemory(void *pParent, void *pChild);\nvoid WINAPI WSDDetachLinkedMemory(void *pVoid);\nvoid WINAPI WSDFreeLinkedMemory(void *pVoid);\n\nHRESULT WINAPI WSDXMLAddChild(WSDXML_ELEMENT *pParent, WSDXML_ELEMENT *pChild);\nHRESULT WINAPI WSDXMLAddSibling(WSDXML_ELEMENT *pFirst, WSDXML_ELEMENT *pSecond);\nHRESULT WINAPI WSDXMLBuildAnyForSingleElement(WSDXML_NAME *pElementName, LPCWSTR pszText, WSDXML_ELEMENT **ppAny);\nHRESULT WINAPI WSDXMLCleanupElement(WSDXML_ELEMENT *pAny);\nHRESULT WINAPI WSDXMLGetValueFromAny(const WCHAR *pszNamespace, const WCHAR *pszName, WSDXML_ELEMENT *pAny, LPCWSTR *ppszValue);\n\n#endif\n"
  },
  {
    "path": "wine/windows/wsdxml.idl",
    "content": "/*\n * Copyright 2017 Owen Rudge for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\nimport \"wsdxmldom.h\";\n\ninterface IWSDXMLContext;\n\n[\nuuid(75d8f3ee-3e5a-43b4-a15a-bcf6887460c0),\nobject,\nlocal,\nrestricted,\npointer_default(unique)\n]\ninterface IWSDXMLContext : IUnknown\n{\n    HRESULT AddNamespace([in] LPCWSTR pszUri, [in] LPCWSTR pszSuggestedPrefix, [out] WSDXML_NAMESPACE** ppNamespace);\n\n    HRESULT AddNameToNamespace([in] LPCWSTR pszUri, [in] LPCWSTR pszName, [out] WSDXML_NAME** ppName);\n\n    HRESULT SetNamespaces([in, size_is(wNamespacesCount)] const PCWSDXML_NAMESPACE* pNamespaces, [in] WORD wNamespacesCount, [in] BYTE bLayerNumber);\n\n    HRESULT SetTypes([in, size_is(dwTypesCount)] const PCWSDXML_TYPE* pTypes, [in] DWORD dwTypesCount, [in] BYTE bLayerNumber);\n}\n\ncpp_quote(\"HRESULT WINAPI WSDXMLCreateContext(IWSDXMLContext **ppContext);\")\n"
  },
  {
    "path": "wine/windows/wsdxmldom.h",
    "content": "/*\n * Copyright 2017 Owen Rudge for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WSDXMLDOM_H__\n#define __WSDXMLDOM_H__\n\ntypedef struct _WSDXML_TYPE WSDXML_TYPE;\ntypedef struct _WSDXML_NAMESPACE WSDXML_NAMESPACE;\ntypedef struct _WSDXML_NAME WSDXML_NAME;\ntypedef struct _WSDXML_PREFIX_MAPPING WSDXML_PREFIX_MAPPING;\ntypedef struct _WSDXML_ATTRIBUTE WSDXML_ATTRIBUTE;\ntypedef struct _WSDXML_NODE WSDXML_NODE;\ntypedef struct _WSDXML_ELEMENT WSDXML_ELEMENT;\ntypedef struct _WSDXML_TEXT WSDXML_TEXT;\n\ntypedef const WSDXML_NAMESPACE *PCWSDXML_NAMESPACE;\ntypedef const WSDXML_TYPE *PCWSDXML_TYPE;\n\nstruct _WSDXML_TYPE\n{\n    const WCHAR *Uri;\n    const BYTE *Table;\n};\n\nstruct _WSDXML_NAMESPACE\n{\n    const WCHAR *Uri;\n    const WCHAR *PreferredPrefix;\n    WSDXML_NAME *Names;\n    WORD NamesCount;\n    WORD Encoding;\n};\n\nstruct _WSDXML_NAME\n{\n    WSDXML_NAMESPACE *Space;\n    WCHAR *LocalName;\n};\n\nstruct _WSDXML_PREFIX_MAPPING\n{\n    DWORD Refs;\n    WSDXML_PREFIX_MAPPING *Next;\n    WSDXML_NAMESPACE *Space;\n    WCHAR *Prefix;\n};\n\nstruct _WSDXML_ATTRIBUTE\n{\n    WSDXML_ELEMENT *Element;\n    WSDXML_ATTRIBUTE *Next;\n    WSDXML_NAME *Name;\n    WCHAR *Value;\n};\n\nstruct _WSDXML_NODE\n{\n    enum\n    {\n        ElementType,\n        TextType\n    } Type;\n    WSDXML_ELEMENT *Parent;\n    WSDXML_NODE *Next;\n};\n\nstruct _WSDXML_ELEMENT\n{\n    WSDXML_NODE Node;\n    WSDXML_NAME *Name;\n    WSDXML_ATTRIBUTE *FirstAttribute;\n    WSDXML_NODE *FirstChild;\n    WSDXML_PREFIX_MAPPING *PrefixMappings;\n};\n\nstruct _WSDXML_TEXT\n{\n    WSDXML_NODE Node;\n    WCHAR *Text;\n};\n\n#endif /* __WSDXMLDOM_H__ */\n"
  },
  {
    "path": "wine/windows/wshisotp.h",
    "content": "/*\n * Copyright (C) 2001 Stefan Leichter\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _WINE_WSHISOTP_\n#define _WINE_WSHISOTP_\n\n\n/*\n * constants\n */\n#define ISOPROTO_TP4       29\n#define ISOPROTO_TP        ISOPROTO_TP4\n\n\n#endif /* _WINE_WSHISOTP_ */\n"
  },
  {
    "path": "wine/windows/wsipx.h",
    "content": "/*\n * Copyright (C) 2001 Stefan Leichter\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _WINE_WSIPX_\n#define _WINE_WSIPX_\n\n#ifdef USE_WS_PREFIX\n# define WS(x)    WS_##x\n#else\n# define WS(x)    x\n#endif\n\ntypedef struct WS_sockaddr_ipx\n{\n    short sa_family;\n    char sa_netnum[4];\n    char sa_nodenum[6];\n    unsigned short sa_socket;\n} SOCKADDR_IPX, *PSOCKADDR_IPX, *LPSOCKADDR_IPX;\n\n/*\n * constants\n */\n#ifndef USE_WS_PREFIX\n#define NSPROTO_IPX                 1000\n#define NSPROTO_SPX                 1256\n#define NSPROTO_SPXII               1257\n#else\n#define WS_NSPROTO_IPX              1000\n#define WS_NSPROTO_SPX              1256\n#define WS_NSPROTO_SPXII            1257\n#endif\n\n#undef WS\n#endif /* _WINE_WSIPX_ */\n"
  },
  {
    "path": "wine/windows/wsnwlink.h",
    "content": "/*\n * Copyright (C) 2003,2004 Roderick Colenbrander\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _WSNWLINK_\n#define _WSNWLINK_\n\n#ifdef USE_WS_PREFIX\n#define WS(x)    WS_##x\n#else\n#define WS(x)    x\n#endif\n\n#ifndef USE_WS_PREFIX\n#define IPX_PTYPE 0x4000\n#define IPX_FILTERPTYPE 0x4001\n#define IPX_DSTYPE 0x4002\n#define IPX_STOPFILTERPTYPE 0x4003\n#define IPX_EXTENDED_ADDRESS 0x4004\n#define IPX_RECVHDR 0x4005\n#define IPX_MAXSIZE 0x4006\n#define IPX_ADDRESS 0x4007\n#define IPX_GETNETINFO 0x4008\n#define IPX_GETNETINFO_NORIP 0x4009\n#define IPX_SPXGETCONNECTIONSTATUS 0x400b\n#define IPX_ADDRESS_NOTIFY 0x400c\n#define IPX_MAX_ADAPTER_NUM 0x400d\n#define IPX_RERIPNETNUMBER 0x400e\n#define IPX_RECEIVE_BROADCAST 0x400f\n#define IPX_IMMEDIATESPXACK 0x4010\n#else\n#define WS_IPX_PTYPE 0x4000\n#define WS_IPX_FILTERPTYPE 0x4001\n#define WS_IPX_DSTYPE 0x4002\n#define WS_IPX_STOPFILTERPTYPE 0x4003\n#define WS_IPX_EXTENDED_ADDRESS 0x4004\n#define WS_IPX_RECVHDR 0x4005\n#define WS_IPX_MAXSIZE 0x4006\n#define WS_IPX_ADDRESS 0x4007\n#define WS_IPX_GETNETINFO 0x4008\n#define WS_IPX_GETNETINFO_NORIP 0x4009\n#define WS_IPX_SPXGETCONNECTIONSTATUS 0x400b\n#define WS_IPX_ADDRESS_NOTIFY 0x400c\n#define WS_IPX_MAX_ADAPTER_NUM 0x400d\n#define WS_IPX_RERIPNETNUMBER 0x400e\n#define WS_IPX_RECEIVE_BROADCAST 0x400f\n#define WS_IPX_IMMEDIATESPXACK 0x4010\n#endif /* USE_WS_PREFIX */\n\ntypedef struct _IPX_ADDRESS_DATA {\n    INT   adapternum;\n    UCHAR netnum[4];\n    UCHAR nodenum[6];\n    BOOLEAN wan;\n    BOOLEAN status;\n    INT maxpkt;\n    ULONG linkspeed;\n} IPX_ADDRESS_DATA, *PIPX_ADDRESS_DATA;\n\n#endif /* _WSNWLINK_ */\n"
  },
  {
    "path": "wine/windows/wtsapi32.h",
    "content": "/*\n * Copyright 2005 Ulrich Czekalla (For CodeWeavers)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WTSAPI32_H\n#define __WINE_WTSAPI32_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\ntypedef enum _WTS_VIRTUAL_CLASS\n{\n    WTSVirtualClientData,\n    WTSVirtualFileHandle\n} WTS_VIRTUAL_CLASS;\n\ntypedef enum tagWTS_INFO_CLASS\n{\n    WTSInitialProgram,\n    WTSApplicationName,\n    WTSWorkingDirectory,\n    WTSOEMId,\n    WTSSessionId,\n    WTSUserName,\n    WTSWinStationName,\n    WTSDomainName,\n    WTSConnectState,\n    WTSClientBuildNumber,\n    WTSClientName,\n    WTSClientDirectory,\n    WTSClientProductId,\n    WTSClientHardwareId,\n    WTSClientAddress,\n    WTSClientDisplay,\n    WTSClientProtocolType,\n} WTS_INFO_CLASS;\n\ntypedef enum _WTS_CONNECTSTATE_CLASS\n{\n    WTSActive,\n    WTSConnected,\n    WTSConnectQuery,\n    WTSShadow,\n    WTSDisconnected,\n    WTSIdle,\n    WTSListen,\n    WTSReset,\n    WTSDown,\n    WTSInit\n} WTS_CONNECTSTATE_CLASS;\n\ntypedef enum _WTS_CONFIG_CLASS\n{\n    WTSUserConfigInitialProgram,\n    WTSUserConfigWorkingDirectory,\n    WTSUserConfigInheritInitialProgram,\n    WTSUserConfigAllowLogonTerminalServer,\n    WTSUserConfigTimeoutSettingsConnections,\n    WTSUserConfigTimeoutSettingsDisconnections,\n    WTSUserConfigTimeoutSettingsIdle,\n    WTSUserConfigDeviceClientDrives,\n    WTSUserConfigDeviceClientPrinters,\n    WTSUserConfigDeviceClientDefaultPrinter,\n    WTSUserConfigBrokenTimeoutSettings,\n    WTSUserConfigModemCallbackSettings,\n    WTSUserConfigModemCallbackPhoneNumber,\n    WTSUserConfigShadowSettings,\n    WTSUserConfigTerminalServerProfilePath,\n    WTSUserConfigTerminalServerHomeDirectory,\n    WTSUserConfigfTerminalServerRemoteHomeDir\n} WTS_CONFIG_CLASS;\n\ntypedef struct _WTS_PROCESS_INFOA\n{\n    DWORD SessionId;\n    DWORD ProcessId;\n    LPSTR pProcessName;\n    PSID pUserSid;\n} WTS_PROCESS_INFOA, *PWTS_PROCESS_INFOA;\n\ntypedef struct _WTS_PROCESS_INFOW\n{\n    DWORD SessionId;\n    DWORD ProcessId;\n    LPWSTR pProcessName;\n    PSID pUserSid;\n} WTS_PROCESS_INFOW, *PWTS_PROCESS_INFOW;\n\nDECL_WINELIB_TYPE_AW(WTS_PROCESS_INFO)\nDECL_WINELIB_TYPE_AW(PWTS_PROCESS_INFO)\n\ntypedef struct _WTS_SESSION_INFOA\n{\n    DWORD SessionId;\n    LPSTR pWinStationName;\n    WTS_CONNECTSTATE_CLASS State;\n} WTS_SESSION_INFOA, *PWTS_SESSION_INFOA;\n\ntypedef struct _WTS_SESSION_INFOW\n{\n    DWORD SessionId;\n    LPWSTR pWinStationName;\n    WTS_CONNECTSTATE_CLASS State;\n} WTS_SESSION_INFOW, *PWTS_SESSION_INFOW;\n\nDECL_WINELIB_TYPE_AW(WTS_SESSION_INFO)\nDECL_WINELIB_TYPE_AW(PWTS_SESSION_INFO)\n\ntypedef struct _WTS_SERVER_INFOA\n{\n    LPSTR pServerName;\n} WTS_SERVER_INFOA, *PWTS_SERVER_INFOA;\n\ntypedef struct _WTS_SERVER_INFOW\n{\n    LPWSTR pServerName;\n} WTS_SERVER_INFOW, *PWTS_SERVER_INFOW;\n\nDECL_WINELIB_TYPE_AW(WTS_SERVER_INFO)\nDECL_WINELIB_TYPE_AW(PWTS_SERVER_INFO)\n\n#define WTS_CURRENT_SERVER_HANDLE ((HANDLE)NULL)\n#define WTS_CURRENT_SESSION (~0u)\n\nvoid WINAPI WTSCloseServer(HANDLE);\nBOOL WINAPI WTSConnectSessionA(ULONG, ULONG, PSTR, BOOL);\nBOOL WINAPI WTSConnectSessionW(ULONG, ULONG, PWSTR, BOOL);\n#define     WTSConnectSession WINELIB_NAME_AW(WTSConnectSession)\nBOOL WINAPI WTSDisconnectSession(HANDLE, DWORD, BOOL);\nBOOL WINAPI WTSEnableChildSessions(BOOL);\nBOOL WINAPI WTSEnumerateProcessesA(HANDLE, DWORD, DWORD, PWTS_PROCESS_INFOA *, DWORD *);\nBOOL WINAPI WTSEnumerateProcessesW(HANDLE, DWORD, DWORD, PWTS_PROCESS_INFOW *, DWORD *);\n#define     WTSEnumerateProcesses WINELIB_NAME_AW(WTSEnumerateProcesses)\nBOOL WINAPI WTSEnumerateServersA( LPSTR, DWORD, DWORD, PWTS_SERVER_INFOA*, DWORD*);\nBOOL WINAPI WTSEnumerateServersW( LPWSTR, DWORD, DWORD, PWTS_SERVER_INFOW*, DWORD*);\n#define     WTSEnumerateServers WINELIB_NAME_AW(WTSEnumerateServers)\nBOOL WINAPI WTSEnumerateSessionsA(HANDLE, DWORD, DWORD, PWTS_SESSION_INFOA *, DWORD *);\nBOOL WINAPI WTSEnumerateSessionsW(HANDLE, DWORD, DWORD, PWTS_SESSION_INFOW *, DWORD *);\n#define     WTSEnumerateSessions WINELIB_NAME_AW(WTSEnumerateSessions)\nvoid WINAPI WTSFreeMemory(PVOID);\nHANDLE WINAPI WTSOpenServerA(LPSTR);\nHANDLE WINAPI WTSOpenServerW(LPWSTR);\n#define     WTSOpenServer WINELIB_NAME_AW(WTSOpenServer)\nBOOL WINAPI WTSQuerySessionInformationA(HANDLE, DWORD, WTS_INFO_CLASS, LPSTR *, DWORD *);\nBOOL WINAPI WTSQuerySessionInformationW(HANDLE, DWORD, WTS_INFO_CLASS, LPWSTR *, DWORD *);\n#define     WTSQuerySessionInformation WINELIB_NAME_AW(WTSQuerySessionInformation)\nBOOL WINAPI WTSQueryUserConfigA(LPSTR,LPSTR,WTS_CONFIG_CLASS,LPSTR*,DWORD*);\nBOOL WINAPI WTSQueryUserConfigW(LPWSTR,LPWSTR,WTS_CONFIG_CLASS,LPWSTR*,DWORD*);\n#define     WTSQueryUserConfig WINELIB_NAME_AW(WTSQueryUserConfig)\nBOOL WINAPI WTSQueryUserToken(ULONG, PHANDLE);\nBOOL WINAPI WTSRegisterSessionNotification(HWND, DWORD);\nBOOL WINAPI WTSRegisterSessionNotificationEx(HANDLE, HWND, DWORD);\nBOOL WINAPI WTSStartRemoteControlSessionA(LPSTR, ULONG, BYTE, USHORT);\nBOOL WINAPI WTSStartRemoteControlSessionW(LPWSTR, ULONG, BYTE, USHORT);\n#define     WTSStartRemoteControlSession WINELIB_NAME_AW(WTSStartRemoteControlSession)\nBOOL WINAPI WTSStopRemoteControlSession(ULONG);\nBOOL WINAPI WTSTerminateProcess(HANDLE, DWORD, DWORD);\nBOOL WINAPI WTSUnRegisterSessionNotification(HWND);\nBOOL WINAPI WTSUnRegisterSessionNotificationEx(HANDLE, HWND);\nBOOL WINAPI WTSWaitSystemEvent(HANDLE, DWORD, DWORD*);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "wine/windows/wtypes.idl",
    "content": "/*\n * Basic types used by COM interfaces\n *\n * Copyright 2002 Ove Kaaven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"basetsd.h\";\nimport \"guiddef.h\";\n\n[\n  uuid(D3980A60-910C-1068-9341-00DD010F2F1C),\n  version(0.1),\n  pointer_default(unique)\n]\n\ninterface IWinTypes\n{\n\n/******************** BASIC WIN32 TYPES ********************/\ncpp_quote(\"#if 0 /* winnt.h */\") /* don't redefine these */\n\ntypedef unsigned char BYTE;\ntypedef unsigned short WORD;\ntypedef unsigned long DWORD;\ntypedef long BOOL;\ntypedef unsigned char UCHAR;\ntypedef int INT;\ntypedef unsigned int UINT;\ntypedef short SHORT;\ntypedef unsigned short USHORT;\ntypedef long LONG;\ntypedef unsigned long ULONG;\ntypedef float FLOAT;\n\ntypedef void *PVOID, *LPVOID;\n\ntypedef DWORD *LPDWORD;\n\ntypedef char CHAR;\ntypedef [string] CHAR *LPSTR;\ntypedef [string] const CHAR *LPCSTR;\n\ntypedef wchar_t WCHAR;\ntypedef [string] WCHAR *LPWSTR;\ntypedef [string] const WCHAR *LPCWSTR;\n\ntypedef boolean BOOLEAN;\n\ntypedef DWORD COLORREF;\n\ntypedef void *HANDLE;\n#define DECLARE_HANDLE(name) typedef void *name\n#define DECLARE_WIREM_HANDLE(name) typedef [wire_marshal(wire##name)] void*name\n\nDECLARE_HANDLE(HMODULE);\nDECLARE_HANDLE(HINSTANCE);\nDECLARE_HANDLE(HRGN);\nDECLARE_HANDLE(HTASK);\nDECLARE_HANDLE(HKEY);\nDECLARE_HANDLE(HDESK);\nDECLARE_HANDLE(HMF);\nDECLARE_HANDLE(HEMF);\nDECLARE_HANDLE(HPEN);\nDECLARE_HANDLE(HRSRC);\nDECLARE_HANDLE(HSTR);\nDECLARE_HANDLE(HWINSTA);\nDECLARE_HANDLE(HKL);\nDECLARE_HANDLE(HGDIOBJ);\n\ntypedef HANDLE HDWP;\n\ntypedef LONG_PTR LRESULT;\n\ntypedef LONG HRESULT;\ntypedef DWORD LCID;\ntypedef USHORT LANGID;\n\ntypedef unsigned __int64 DWORDLONG;\ntypedef __int64 LONGLONG;\ntypedef unsigned __int64 ULONGLONG;\n\ntypedef struct _LARGE_INTEGER {\n  LONGLONG QuadPart;\n} LARGE_INTEGER;\n\ntypedef struct _ULARGE_INTEGER {\n  ULONGLONG QuadPart;\n} ULARGE_INTEGER;\n\ntypedef struct _SID_IDENTIFIER_AUTHORITY {\n  UCHAR Value[6];\n} SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY;\n\ntypedef struct _SID {\n  UCHAR Revision;\n  UCHAR SubAuthorityCount;\n  SID_IDENTIFIER_AUTHORITY IdentifierAuthority;\n  [size_is(SubAuthorityCount)] ULONG SubAuthority[*];\n} SID, *PSID;\n\ntypedef USHORT SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL;\n\ntypedef struct _ACL {\n  UCHAR AclRevision;\n  UCHAR Sbz1;\n  USHORT AclSize;\n  USHORT AceCount;\n  USHORT Sbz2;\n} ACL;\ntypedef ACL *PACL;\n\ntypedef struct _SECURITY_DESCRIPTOR {\n  UCHAR Revision;\n  UCHAR Sbz1;\n  SECURITY_DESCRIPTOR_CONTROL Control;\n  PSID Owner;\n  PSID Group;\n  PACL Sacl;\n  PACL Dacl;\n} SECURITY_DESCRIPTOR, *PSECURITY_DESCRIPTOR;\n\ntypedef struct _SECURITY_ATTRIBUTES\n{\n    DWORD nLength;\n    [size_is(nLength)] LPVOID lpSecurityDescriptor;\n    BOOL bInheritHandle;\n} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;\n\ntypedef struct tagSIZE\n{\n    LONG cx;\n    LONG cy;\n} SIZE, *PSIZE, *LPSIZE;\ntypedef SIZE SIZEL, *PSIZEL, *LPSIZEL;\n\ntypedef struct tagPOINT\n{\n    LONG  x;\n    LONG  y;\n} POINT, *PPOINT, *LPPOINT;\n\ntypedef struct _POINTL\n{\n    LONG x;\n    LONG y;\n} POINTL, *PPOINTL;\n\ntypedef struct tagRECT\n{\n    LONG left;\n    LONG top;\n    LONG right;\n    LONG bottom;\n} RECT, *PRECT, *LPRECT;\ntypedef const RECT *LPCRECT;\n\ntypedef struct _RECTL\n{\n    LONG left;\n    LONG top;\n    LONG right;\n    LONG bottom;\n} RECTL, *PRECTL, *LPRECTL;\ntypedef const RECTL *LPCRECTL;\n\ntypedef UINT_PTR WPARAM;\ntypedef LONG_PTR LPARAM;\n\ncpp_quote(\"#endif /* winnt.h */\")\n\ncpp_quote(\"#ifdef _MSC_VER\") /* for IDL and MSVC only */\ntypedef double DOUBLE;\ncpp_quote(\"#else\")\ncpp_quote(\"typedef double DECLSPEC_ALIGN(8) DOUBLE;\")\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#ifndef _PALETTEENTRY_DEFINED\")\ncpp_quote(\"#define _PALETTEENTRY_DEFINED\")\ntypedef struct tagPALETTEENTRY {\n  BYTE peRed;\n  BYTE peGreen;\n  BYTE peBlue;\n  BYTE peFlags;\n} PALETTEENTRY, *PPALETTEENTRY, *LPPALETTEENTRY;\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#ifndef _LOGPALETTE_DEFINED\")\ncpp_quote(\"#define _LOGPALETTE_DEFINED\")\ntypedef struct tagLOGPALETTE\n{\n  WORD palVersion;\n  WORD palNumEntries;\n  [size_is(palNumEntries)] PALETTEENTRY palPalEntry[*];\n} LOGPALETTE, *PLOGPALETTE, *LPLOGPALETTE;\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#ifndef _SYSTEMTIME_\")\ncpp_quote(\"#define _SYSTEMTIME_\")\ntypedef struct _SYSTEMTIME{\n        WORD wYear;\n        WORD wMonth;\n        WORD wDayOfWeek;\n        WORD wDay;\n        WORD wHour;\n        WORD wMinute;\n        WORD wSecond;\n        WORD wMilliseconds;\n} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#ifndef _FILETIME_\")\ncpp_quote(\"#define _FILETIME_\")\ntypedef struct _FILETIME {\n  DWORD dwLowDateTime;\n  DWORD dwHighDateTime;\n} FILETIME, *PFILETIME, *LPFILETIME;\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#ifndef _TEXTMETRIC_DEFINED\")\ncpp_quote(\"#define _TEXTMETRIC_DEFINED\")\ntypedef struct tagTEXTMETRICA\n{\n    LONG      tmHeight;\n    LONG      tmAscent;\n    LONG      tmDescent;\n    LONG      tmInternalLeading;\n    LONG      tmExternalLeading;\n    LONG      tmAveCharWidth;\n    LONG      tmMaxCharWidth;\n    LONG      tmWeight;\n    LONG      tmOverhang;\n    LONG      tmDigitizedAspectX;\n    LONG      tmDigitizedAspectY;\n    BYTE      tmFirstChar;\n    BYTE      tmLastChar;\n    BYTE      tmDefaultChar;\n    BYTE      tmBreakChar;\n    BYTE      tmItalic;\n    BYTE      tmUnderlined;\n    BYTE      tmStruckOut;\n    BYTE      tmPitchAndFamily;\n    BYTE      tmCharSet;\n} TEXTMETRICA, *LPTEXTMETRICA, *PTEXTMETRICA;\n\ntypedef struct tagTEXTMETRICW\n{\n    LONG      tmHeight;\n    LONG      tmAscent;\n    LONG      tmDescent;\n    LONG      tmInternalLeading;\n    LONG      tmExternalLeading;\n    LONG      tmAveCharWidth;\n    LONG      tmMaxCharWidth;\n    LONG      tmWeight;\n    LONG      tmOverhang;\n    LONG      tmDigitizedAspectX;\n    LONG      tmDigitizedAspectY;\n    WCHAR     tmFirstChar;\n    WCHAR     tmLastChar;\n    WCHAR     tmDefaultChar;\n    WCHAR     tmBreakChar;\n    BYTE      tmItalic;\n    BYTE      tmUnderlined;\n    BYTE      tmStruckOut;\n    BYTE      tmPitchAndFamily;\n    BYTE      tmCharSet;\n} TEXTMETRICW, *LPTEXTMETRICW, *PTEXTMETRICW;\ncpp_quote(\"#endif\")\n\n/******************** BASIC COM/OLE TYPES ********************/\n\ntypedef WCHAR OLECHAR;\ntypedef [string] OLECHAR *LPOLESTR;\ntypedef [string] const OLECHAR *LPCOLESTR;\ncpp_quote(\"#ifndef __WINESRC__\")\ncpp_quote(\"#define OLESTR(str) L##str\")\ncpp_quote(\"#endif\")\n\ntypedef LONG SCODE;\n\ntypedef struct _COAUTHIDENTITY {\n  [size_is(UserLength+1)] USHORT *User;\n  ULONG UserLength;\n  [size_is(DomainLength+1)] USHORT *Domain;\n  ULONG DomainLength;\n  [size_is(PasswordLength+1)] USHORT *Password;\n  ULONG PasswordLength;\n  ULONG Flags;\n} COAUTHIDENTITY;\n\ntypedef struct _COAUTHINFO {\n  DWORD dwAuthnSvc;\n  DWORD dwAuthzSvc;\n  LPWSTR pwszServerPrincName;\n  DWORD dwAuthnLevel;\n  DWORD dwImpersonationLevel;\n  COAUTHIDENTITY *pAuthIdentityData;\n  DWORD dwCapabilities;\n} COAUTHINFO;\n\ntypedef enum tagMEMCTX {\n  MEMCTX_TASK      = 1,\n  MEMCTX_SHARED    = 2,\n  MEMCTX_MACSYSTEM = 3,\n  MEMCTX_UNKNOWN   = -1,\n  MEMCTX_SAME      = -2\n} MEMCTX;\n\ncpp_quote(\"#ifndef _ROT_COMPARE_MAX_DEFINED\")\ncpp_quote(\"#define _ROT_COMPARE_MAX_DEFINED\")\ncpp_quote(\"#define ROT_COMPARE_MAX 2048\")\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#ifndef _ROTFLAGS_DEFINED\")\ncpp_quote(\"#define _ROTFLAGS_DEFINED\")\ncpp_quote(\"#define ROTFLAGS_REGISTRATIONKEEPSALIVE 0x1\")\ncpp_quote(\"#define ROTFLAGS_ALLOWANYCLIENT 0x2\")\ncpp_quote(\"#endif\")\n\ntypedef enum tagCLSCTX {\n  CLSCTX_INPROC_SERVER        = 0x1,\n  CLSCTX_INPROC_HANDLER       = 0x2,\n  CLSCTX_LOCAL_SERVER         = 0x4,\n  CLSCTX_INPROC_SERVER16      = 0x8,\n  CLSCTX_REMOTE_SERVER        = 0x10,\n  CLSCTX_INPROC_HANDLER16     = 0x20,\n  CLSCTX_INPROC_SERVERX86     = 0x40,\n  CLSCTX_INPROC_HANDLERX86    = 0x80,\n  CLSCTX_ESERVER_HANDLER      = 0x100,\n  CLSCTX_NO_CODE_DOWNLOAD     = 0x400,\n  CLSCTX_NO_CUSTOM_MARSHAL    = 0x1000,\n  CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000,\n  CLSCTX_NO_FAILURE_LOG       = 0x4000,\n  CLSCTX_DISABLE_AAA          = 0x8000,\n  CLSCTX_ENABLE_AAA           = 0x10000,\n  CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000\n} CLSCTX;\n\ncpp_quote(\"#define CLSCTX_INPROC (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER)\")\ncpp_quote(\"#define CLSCTX_ALL (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)\")\ncpp_quote(\"#define CLSCTX_SERVER (CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)\")\n\ntypedef enum tagMSHLFLAGS {\n  MSHLFLAGS_NORMAL      = 0,\n  MSHLFLAGS_TABLESTRONG = 1,\n  MSHLFLAGS_TABLEWEAK   = 2,\n  MSHLFLAGS_NOPING      = 4\n} MSHLFLAGS;\n\ntypedef enum tagMSHCTX {\n  MSHCTX_LOCAL            = 0,\n  MSHCTX_NOSHAREDMEM      = 1,\n  MSHCTX_DIFFERENTMACHINE = 2,\n  MSHCTX_INPROC           = 3,\n  MSHCTX_CROSSCTX         = 4\n} MSHCTX;\n\n/******************** BLOB TYPES ********************/\n\ntypedef struct _BYTE_BLOB {\n  unsigned long clSize;\n  [size_is(clSize)] byte abData[];\n} BYTE_BLOB;\ntypedef [unique] BYTE_BLOB *UP_BYTE_BLOB;\n\ntypedef struct _FLAGGED_BYTE_BLOB {\n  unsigned long fFlags;\n  unsigned long clSize;\n  [size_is(clSize)] byte abData[];\n} FLAGGED_BYTE_BLOB;\ntypedef [unique] FLAGGED_BYTE_BLOB *UP_FLAGGED_BYTE_BLOB;\n\ntypedef struct _FLAGGED_WORD_BLOB {\n  unsigned long fFlags;\n  unsigned long clSize;\n  [size_is(clSize)] unsigned short asData[];\n} FLAGGED_WORD_BLOB;\ntypedef [unique] FLAGGED_WORD_BLOB *UP_FLAGGED_WORD_BLOB;\n\ntypedef struct _BYTE_SIZEDARR {\n  unsigned long clSize;\n  [size_is(clSize)] byte *pData;\n} BYTE_SIZEDARR;\n\ntypedef struct _SHORT_SIZEDARR {\n  unsigned long clSize;\n  [size_is(clSize)] unsigned short *pData;\n} WORD_SIZEDARR;\n\ntypedef struct _LONG_SIZEDARR {\n  unsigned long clSize;\n  [size_is(clSize)] unsigned long *pData;\n} DWORD_SIZEDARR;\n\ntypedef struct _HYPER_SIZEDARR {\n  unsigned long clSize;\n  [size_is(clSize)] hyper *pData;\n} HYPER_SIZEDARR;\n\n/******************** GDI TYPES ********************/\n\nconst unsigned long WDT_INPROC_CALL   = 0x48746457;\nconst unsigned long WDT_REMOTE_CALL   = 0x52746457;\nconst unsigned long WDT_INPROC64_CALL = 0x50746457;\n\ntypedef union _userCLIPFORMAT switch(long fContext) u {\n  case WDT_INPROC_CALL: DWORD dwValue;\n  case WDT_REMOTE_CALL: LPWSTR pwszName;\n} userCLIPFORMAT;\n\ntypedef [unique] userCLIPFORMAT *wireCLIPFORMAT;\ntypedef [wire_marshal(wireCLIPFORMAT)] WORD CLIPFORMAT;\n\ntypedef struct tagRemHGLOBAL {\n  long fNullHGlobal;\n  unsigned long cbData;\n  [size_is(cbData)] byte data[];\n} RemHGLOBAL;\n\ntypedef union _userHGLOBAL switch(long fContext) u {\n  case WDT_INPROC_CALL: long               hInproc;\n  case WDT_REMOTE_CALL: FLAGGED_BYTE_BLOB *hRemote;\n  case WDT_INPROC64_CALL: __int64          hInproc64;\n} userHGLOBAL;\n\ntypedef [unique] userHGLOBAL *wireHGLOBAL;\n\ntypedef struct tagRemHMETAFILEPICT {\n  long mm;\n  long xExt;\n  long yExt;\n  unsigned long cbData;\n  [size_is(cbData)] byte data[];\n} RemHMETAFILEPICT;\n\ntypedef union _userHMETAFILE switch(long fContext) u {\n  case WDT_INPROC_CALL: long       hInproc;\n  case WDT_REMOTE_CALL: BYTE_BLOB *hRemote;\n  case WDT_INPROC64_CALL: __int64  hInproc64;\n} userHMETAFILE;\n\ntypedef [unique] userHMETAFILE *wireHMETAFILE;\n\ntypedef struct _remoteMETAFILEPICT {\n  long mm;\n  long xExt;\n  long yExt;\n  userHMETAFILE *hMF;\n} remoteMETAFILEPICT;\n\ntypedef union _userHMETAFILEPICT switch(long fContext) u {\n  case WDT_INPROC_CALL: long                hInproc;\n  case WDT_REMOTE_CALL: remoteMETAFILEPICT *hRemote;\n  case WDT_INPROC64_CALL: __int64           hInproc64;\n} userHMETAFILEPICT;\n\ntypedef [unique] userHMETAFILEPICT *wireHMETAFILEPICT;\n\ntypedef struct tagRemHENHMETAFILE {\n  unsigned long cbData;\n  [size_is(cbData)] byte data[];\n} RemHENHMETAFILE;\n\ntypedef union _userHENHMETAFILE switch(long fContext) u {\n  case WDT_INPROC_CALL: long       hInproc;\n  case WDT_REMOTE_CALL: BYTE_BLOB *hRemote;\n  case WDT_INPROC64_CALL: __int64  hInproc64;\n} userHENHMETAFILE;\n\ntypedef [unique] userHENHMETAFILE *wireHENHMETAFILE;\n\ntypedef struct tagRemHBITMAP\n{\n  unsigned long cbData;\n  [size_is(cbData)] byte data[];\n} RemHBITMAP;\n\ntypedef struct _userBITMAP {\n  LONG bmType;\n  LONG bmWidth;\n  LONG bmHeight;\n  LONG bmWidthBytes;\n  WORD bmPlanes;\n  WORD bmBitsPixel;\n  ULONG cbSize;\n  [size_is(cbSize)] byte pBuffer[];\n} userBITMAP;\n\ntypedef union _userHBITMAP switch(long fContext) u {\n  case WDT_INPROC_CALL: long        hInproc;\n  case WDT_REMOTE_CALL: userBITMAP *hRemote;\n  case WDT_INPROC64_CALL: __int64   hInproc64;\n} userHBITMAP;\n\ntypedef [unique] userHBITMAP *wireHBITMAP;\n\ntypedef struct tagRemHPALETTE {\n  unsigned long cbData;\n  [size_is(cbData)] byte data[];\n} RemHPALETTE;\n\ntypedef struct tagrpcLOGPALETTE {\n  WORD palVersion;\n  WORD palNumEntries;\n  [size_is(palNumEntries)] PALETTEENTRY palPalEntry[];\n} rpcLOGPALETTE;\n\ntypedef union _userHPALETTE switch(long fContext) u {\n  case WDT_INPROC_CALL: long           hInproc;\n  case WDT_REMOTE_CALL: rpcLOGPALETTE *hRemote;\n  case WDT_INPROC64_CALL: __int64      hInproc64;\n} userHPALETTE;\n\ntypedef [unique] userHPALETTE *wireHPALETTE;\n\ncpp_quote(\"#if 0\")\nDECLARE_WIREM_HANDLE(HGLOBAL);\ntypedef HGLOBAL HLOCAL;\nDECLARE_WIREM_HANDLE(HBITMAP);\nDECLARE_WIREM_HANDLE(HPALETTE);\nDECLARE_WIREM_HANDLE(HENHMETAFILE);\nDECLARE_WIREM_HANDLE(HMETAFILE);\ncpp_quote(\"#endif\")\nDECLARE_WIREM_HANDLE(HMETAFILEPICT);\n\ntypedef union _RemotableHandle switch (long fContext) u\n{\n    case WDT_INPROC_CALL: long hInproc;\n    case WDT_REMOTE_CALL: long hRemote;\n} RemotableHandle;\n\ntypedef [unique] RemotableHandle *wireHACCEL;\ntypedef [unique] RemotableHandle *wireHBRUSH;\ntypedef [unique] RemotableHandle *wireHDC;\ntypedef [unique] RemotableHandle *wireHFONT;\ntypedef [unique] RemotableHandle *wireHICON;\ntypedef [unique] RemotableHandle *wireHMENU;\ntypedef [unique] RemotableHandle *wireHWND;\n\ncpp_quote(\"#if 0\") /* for IDL only (C/C++ defs are in windef.h) */\nDECLARE_WIREM_HANDLE(HACCEL);\nDECLARE_WIREM_HANDLE(HBRUSH);\nDECLARE_WIREM_HANDLE(HDC);\nDECLARE_WIREM_HANDLE(HFONT);\nDECLARE_WIREM_HANDLE(HICON);\nDECLARE_WIREM_HANDLE(HMENU);\nDECLARE_WIREM_HANDLE(HWND);\n\ntypedef HICON HCURSOR;\n\ntypedef struct tagMSG\n{\n    HWND   hwnd;\n    UINT   message;\n    WPARAM wParam;\n    LPARAM lParam;\n    DWORD  time;\n    POINT  pt;\n} MSG, *PMSG, *NPMSG, *LPMSG;\n\ncpp_quote(\"#endif\")\n\n/******************** GUID TYPES ********************/\n\ncpp_quote(\"#if 0\") /* for IDL only (C/C++ defs are in guiddef.h) */\ntypedef GUID *REFGUID;\ntypedef IID *REFIID;\ntypedef CLSID *REFCLSID;\ntypedef FMTID *REFFMTID;\ncpp_quote(\"#endif\")\n\n/******************** MISC TYPES ********************/\n\ntypedef enum tagDVASPECT {\n  DVASPECT_CONTENT   = 1,\n  DVASPECT_THUMBNAIL = 2,\n  DVASPECT_ICON      = 4,\n  DVASPECT_DOCPRINT  = 8\n} DVASPECT;\n\ntypedef enum tagSTGC {\n  STGC_DEFAULT       = 0,\n  STGC_OVERWRITE     = 1,\n  STGC_ONLYIFCURRENT = 2,\n  STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 4,\n  STGC_CONSOLIDATE   = 8\n} STGC;\n\ntypedef enum tagSTGMOVE {\n  STGMOVE_MOVE        = 0,\n  STGMOVE_COPY        = 1,\n  STGMOVE_SHALLOWCOPY = 2\n} STGMOVE;\n\ntypedef enum tagSTATFLAG {\n  STATFLAG_DEFAULT = 0,\n  STATFLAG_NONAME  = 1,\n  STATFLAG_NOOPEN  = 2\n} STATFLAG;\n\n/******************** OLE Automation ********************/\n\ncpp_quote(\"#ifdef _MSC_VER\") /* for IDL and MSVC only */\ntypedef double DATE;\ncpp_quote(\"#else\")\ncpp_quote(\"typedef double DECLSPEC_ALIGN(8) DATE;\")\ncpp_quote(\"#endif\")\n\ncpp_quote(\"#if 0\") /* for IDL only */\ntypedef struct tagCY {\n  LONGLONG int64;\n} CY;\ncpp_quote(\"#else\") /* C/C++ defs */\ncpp_quote(\"#ifndef _tagCY_DEFINED\")\ncpp_quote(\"#define _tagCY_DEFINED\")\ncpp_quote(\"typedef union tagCY {\")\ncpp_quote(\"    struct {\")\ncpp_quote(\"#ifdef WORDS_BIGENDIAN\")\ncpp_quote(\"        LONG  Hi;\")\ncpp_quote(\"        ULONG Lo;\")\ncpp_quote(\"#else\")\ncpp_quote(\"        ULONG Lo;\")\ncpp_quote(\"        LONG  Hi;\")\ncpp_quote(\"#endif\")\ncpp_quote(\"    } DUMMYSTRUCTNAME;\")\ncpp_quote(\"    LONGLONG int64;\")\ncpp_quote(\"} CY;\")\ncpp_quote(\"#endif\")\ncpp_quote(\"#endif\")\n\ntypedef CY *LPCY;\n\ncpp_quote(\"#if 0\") /* for IDL only */\ntypedef struct tagDEC {\n  USHORT wReserved;\n  BYTE scale;\n  BYTE sign;\n  ULONG Hi32;\n  ULONGLONG Lo64;\n} DECIMAL;\ncpp_quote(\"#else\") /* C/C++ defs */\ncpp_quote(\"typedef struct tagDEC {\")\ncpp_quote(\"  USHORT wReserved;\")\ncpp_quote(\"  union {\")\ncpp_quote(\"    struct {\")\ncpp_quote(\"      BYTE scale;\")\ncpp_quote(\"      BYTE sign;\")\ncpp_quote(\"    } DUMMYSTRUCTNAME;\")\ncpp_quote(\"    USHORT signscale;\")\ncpp_quote(\"  } DUMMYUNIONNAME;\")\ncpp_quote(\"  ULONG Hi32;\")\ncpp_quote(\"  union {\")\ncpp_quote(\"    struct {\")\ncpp_quote(\"#ifdef WORDS_BIGENDIAN\")\ncpp_quote(\"      ULONG Mid32;\")\ncpp_quote(\"      ULONG Lo32;\")\ncpp_quote(\"#else\")\ncpp_quote(\"      ULONG Lo32;\")\ncpp_quote(\"      ULONG Mid32;\")\ncpp_quote(\"#endif\")\ncpp_quote(\"    } DUMMYSTRUCTNAME1;\")\ncpp_quote(\"    ULONGLONG Lo64;\")\ncpp_quote(\"  } DUMMYUNIONNAME1;\")\ncpp_quote(\"} DECIMAL;\")\ncpp_quote(\"#endif\")\ncpp_quote(\"#define DECIMAL_NEG ((BYTE)0x80)\")\ncpp_quote(\"#define DECIMAL_SETZERO(d) do{ memset(((char*)&(d)) + sizeof(USHORT), 0, sizeof(ULONG) * 3u + sizeof(USHORT)); }while (0)\")\n\ntypedef DECIMAL *LPDECIMAL;\n\ntypedef [unique] FLAGGED_WORD_BLOB *wireBSTR;\ntypedef [wire_marshal(wireBSTR)] OLECHAR *BSTR;\ntypedef BSTR *LPBSTR;\n\ntypedef short VARIANT_BOOL;\ntypedef VARIANT_BOOL _VARIANT_BOOL;\ncpp_quote(\"#define VARIANT_TRUE  ((VARIANT_BOOL)0xFFFF)\")\ncpp_quote(\"#define VARIANT_FALSE ((VARIANT_BOOL)0x0000)\")\n\ntypedef struct tagBSTRBLOB {\n  ULONG cbSize;\n  [size_is(cbSize)] BYTE *pData;\n} BSTRBLOB, *LPBSTRBLOB;\n\ncpp_quote(\"#ifndef _tagBLOB_DEFINED\")\ncpp_quote(\"#define _tagBLOB_DEFINED\")\ncpp_quote(\"#define _BLOB_DEFINED\")\ncpp_quote(\"#define _LPBLOB_DEFINED\")\ntypedef struct tagBLOB {\n  ULONG cbSize;\n  [size_is(cbSize)] BYTE *pBlobData;\n} BLOB, *LPBLOB;\ncpp_quote(\"#endif\")\n\ntypedef struct tagCLIPDATA {\n  ULONG cbSize;\n  long ulClipFmt;\n  [size_is(cbSize-sizeof(long))] BYTE *pClipData;\n} CLIPDATA;\ncpp_quote(\"#define CBPCLIPDATA(cb) ((cb).cbSize - sizeof((cb).ulClipFmt))\")\n\ntypedef ULONG PROPID;\n\n/******************** VARTYPE ********************/\n\ntypedef unsigned short VARTYPE;\nenum VARENUM {\n  VT_EMPTY           = 0,\n  VT_NULL            = 1,\n  VT_I2              = 2,\n  VT_I4              = 3,\n  VT_R4              = 4,\n  VT_R8              = 5,\n  VT_CY              = 6,\n  VT_DATE            = 7,\n  VT_BSTR            = 8,\n  VT_DISPATCH        = 9,\n  VT_ERROR           = 10,\n  VT_BOOL            = 11,\n  VT_VARIANT         = 12,\n  VT_UNKNOWN         = 13,\n  VT_DECIMAL         = 14,\n  VT_I1              = 16,\n  VT_UI1             = 17,\n  VT_UI2             = 18,\n  VT_UI4             = 19,\n  VT_I8              = 20,\n  VT_UI8             = 21,\n  VT_INT             = 22,\n  VT_UINT            = 23,\n  VT_VOID            = 24,\n  VT_HRESULT         = 25,\n  VT_PTR             = 26,\n  VT_SAFEARRAY       = 27,\n  VT_CARRAY          = 28,\n  VT_USERDEFINED     = 29,\n  VT_LPSTR           = 30,\n  VT_LPWSTR          = 31,\n  VT_RECORD          = 36,\n  VT_INT_PTR         = 37,\n  VT_UINT_PTR        = 38,\n  VT_FILETIME        = 64,\n  VT_BLOB            = 65,\n  VT_STREAM          = 66,\n  VT_STORAGE         = 67,\n  VT_STREAMED_OBJECT = 68,\n  VT_STORED_OBJECT   = 69,\n  VT_BLOB_OBJECT     = 70,\n  VT_CF              = 71,\n  VT_CLSID           = 72,\n  VT_VERSIONED_STREAM= 73,\n  VT_BSTR_BLOB       = 0x0fff,\n  VT_VECTOR          = 0x1000,\n  VT_ARRAY           = 0x2000,\n  VT_BYREF           = 0x4000,\n  VT_RESERVED        = 0x8000,\n  VT_ILLEGAL         = 0xffff,\n  VT_ILLEGALMASKED   = 0x0fff,\n  VT_TYPEMASK        = 0x0fff\n};\n\ntypedef struct tagCSPLATFORM\n{\n    DWORD dwPlatformId;\n    DWORD dwVersionHi;\n    DWORD dwVersionLo;\n    DWORD dwProcessorArch;\n} CSPLATFORM;\n\ntypedef struct tagQUERYCONTEXT\n{\n    DWORD dwContext;\n    CSPLATFORM Platform;\n    LCID Locale;\n    DWORD dwVersionHi;\n    DWORD dwVersionLo;\n} QUERYCONTEXT;\n\ntypedef [v1_enum] enum tagTYSPEC \n{\n    TYSPEC_CLSID,\n    TYSPEC_FILEEXT,\n    TYSPEC_MIMETYPE,\n    TYSPEC_PROGID,\n    TYSPEC_FILENAME,\n    TYSPEC_PACKAGENAME,\n    TYSPEC_OBJECTID\n} TYSPEC;\n\ntypedef union switch(DWORD tyspec)\n{\n    case TYSPEC_CLSID:\n        CLSID clsid;\n    case TYSPEC_FILEEXT:\n        LPOLESTR pFileExt;\n    case TYSPEC_MIMETYPE:\n        LPOLESTR pMimeType;\n    case TYSPEC_PROGID:\n        LPOLESTR pProgId;\n    case TYSPEC_FILENAME:\n        LPOLESTR pFileName;\n    case TYSPEC_PACKAGENAME:\n        struct\n        {\n            LPOLESTR pPackageName;\n            GUID PolicyId;\n        } ByName;\n    case TYSPEC_OBJECTID:\n        struct\n        {\n            GUID ObjectId;\n            GUID PolicyId;\n        } ByObjectId;\n} uCLSSPEC;\n\ncpp_quote(\"#ifndef PROPERTYKEY_DEFINED\")\ncpp_quote(\"#define PROPERTYKEY_DEFINED\")\ntypedef struct _tagpropertykey\n{\n    GUID fmtid;\n    DWORD pid;\n} PROPERTYKEY;\ncpp_quote(\"#endif /*PROPERTYKEY_DEFINED*/\")\n\n} /* interface IWinTypes */\n"
  },
  {
    "path": "wine/windows/wuapi.idl",
    "content": "/*\n * Copyright 2008 Hans Leidekker for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"oaidl.idl\";\n\n#ifndef __WIDL__\n#define threading(model)\n#define progid(str)\n#define vi_progid(str)\n#endif\n\n[\n    helpstring(\"WUAPI 2.0 Type Library\"),\n    uuid(b596cc9f-56e5-419e-a622-e01bb457431e),\n    version(2.0)\n]\nlibrary WUApiLib {\n\nimportlib(\"stdole2.tlb\");\n\ninterface ICategoryCollection;\ninterface IStringCollection;\ninterface IUpdateCollection;\ninterface IUpdateDownloader;\ninterface IUpdateInstaller;\ninterface IUpdateSearcher;\n\ntypedef [public] enum tagDownloadPriority\n{\n    dpLow    = 1,\n    dpNormal = 2,\n    dpHigh   = 3,\n} DownloadPriority;\n\ntypedef [public] enum tagServerSelection\n{\n    ssDefault       = 0,\n    ssManagedServer = 1,\n    ssWindowsUpdate = 2,\n    ssOthers        = 3,\n} ServerSelection;\n\ntypedef [public] enum tagAutomaticUpdatesNotificationLevel\n{\n    aunlNotConfigured,\n    aunlDisabled,\n    aunlNotifyBeforeDownload,\n    aunlNotifyBeforeInstallation,\n    aunlScheduledInstallation,\n} AutomaticUpdatesNotificationLevel;\n\ntypedef [public] enum tagAutomaticUpdatesScheduledInstallationDay\n{\n    ausidEveryDay,\n    ausidEverySunday,\n    ausidEveryMonday,\n    ausidEveryTuesday,\n    ausidEveryWednesday,\n    ausidEveryThursday,\n    ausidEveryFriday,\n    ausidEverySaturday,\n} AutomaticUpdatesScheduledInstallationDay;\n\ntypedef [public] enum tagDownloadPhase\n{\n    dphInitializing,\n    dphDownloading,\n    dphVerifying,\n} DownloadPhase;\n\ntypedef [public] enum tagOperationResultCode\n{\n    orcNotStarted,\n    orcInProgress,\n    orcSucceeded,\n    orcSucceededWithErrors,\n    orcFailed,\n    orcAborted,\n} OperationResultCode;\n\ntypedef [public] enum tagUpdateExceptionContext\n{\n    uecGeneral = 1,\n    uecWindowsDriver,\n    uecWindowsInstaller\n} UpdateExceptionContext;\n\ntypedef [public] enum tagInstallationImpact\n{\n    iiNormal,\n    iiMinor,\n    iiRequiresExclusiveHandling\n} InstallationImpact;\n\ntypedef [public] enum tagInstallationRebootBehavior\n{\n    irbNeverReboots,\n    irbAlwaysRequiresReboot,\n    irbCanRequestReboot\n} InstallationRebootBehavior;\n\ntypedef [public] enum tagUpdateType\n{\n    utSoftware = 1,\n    utDriver\n} UpdateType;\n\ntypedef [public] enum tagUpdateOperation\n{\n    uoInstallation = 1,\n    uoUninstallation\n} UpdateOperation;\n\ntypedef [public] enum tagDeploymentAction\n{\n    daNone,\n    daInstallation,\n    daUninstallation,\n    daDetection\n} DeploymentAction;\n\n[\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(2ee48f22-af3c-405f-8970-f71be12ee9a2),\n    pointer_default(unique)\n]\ninterface IAutomaticUpdatesSettings : IDispatch\n{\n    [propget, id(0x60020001)]\n    HRESULT NotificationLevel( [out, retval] AutomaticUpdatesNotificationLevel *retval );\n\n    [propput, id(0x60020001)]\n    HRESULT NotificationLevel( [in] AutomaticUpdatesNotificationLevel value );\n\n    [propget, id(0x60020002)]\n    HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval );\n\n    [propget, id(0x60020003)]\n    HRESULT Required( [out, retval] VARIANT_BOOL *retval );\n\n    [propget, id(0x60020004)]\n    HRESULT ScheduledInstallationDay( [out, retval] AutomaticUpdatesScheduledInstallationDay *retval );\n\n    [propput, id(0x60020004)]\n    HRESULT ScheduledInstallationDay( [in] AutomaticUpdatesScheduledInstallationDay value );\n\n    [propget, id(0x60020005)]\n    HRESULT ScheduledInstallationTime( [out, retval] LONG *retval );\n\n    [propput, id(0x60020005)]\n    HRESULT ScheduledInstallationTime( [in] LONG value );\n\n    [id(0x60020006)]\n    HRESULT Refresh();\n\n    [id(0x60020007)]\n    HRESULT Save();\n}\n\n[\n    object,\n    uuid(673425bf-c082-4c7c-bdfd-569464b8e0ce),\n    oleautomation,\n    dual,\n    nonextensible,\n    pointer_default(unique),\n    hidden\n]\ninterface IAutomaticUpdates : IDispatch\n{\n    HRESULT DetectNow();\n    HRESULT Pause();\n    HRESULT Resume();\n    HRESULT ShowSettingsDialog();\n\n    [propget]\n    HRESULT Settings(\n        [out, retval] IAutomaticUpdatesSettings **retval);\n\n    [propget]\n    HRESULT ServiceEnabled(\n        [out, retval] VARIANT_BOOL *retval);\n\n    HRESULT EnableService();\n}\n\n[\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(174c81fe-aecd-4dae-b8a0-2c6318dd86a8),\n    pointer_default(unique),\n]\ninterface IWebProxy : IDispatch\n{\n    [propget, id(0x60020001)]\n    HRESULT Address( [out, retval] BSTR *retval );\n\n    [propput, id(0x60020001)]\n    HRESULT Address( [in] BSTR value );\n\n    [propget, id(0x60020002)]\n    HRESULT BypassList( [out, retval] IStringCollection **retval );\n\n    [propput, id(0x60020002)]\n    HRESULT BypassList( [in] IStringCollection *value );\n\n    [propget, id(0x60020003)]\n    HRESULT BypassProxyOnLocal( [out, retval] VARIANT_BOOL *retval );\n\n    [propput, id(0x60020003)]\n    HRESULT BypassProxyOnLocal( [in] VARIANT_BOOL value );\n\n    [propget, id(0x60020004)]\n    HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval );\n\n    [propget, id(0x60020005)]\n    HRESULT UserName( [out, retval] BSTR *retval );\n\n    [propput, id(0x60020005)]\n    HRESULT UserName( [in] BSTR value );\n\n    [id(0x60020006)]\n    HRESULT SetPassword( [in] BSTR value );\n\n    [id(0x60020007)]\n    HRESULT PromptForCredentials( [in, unique] IUnknown *parentWindow,\n                                  [in] BSTR title );\n\n    [restricted, id(0x60020008)]\n    HRESULT PromptForCredentialsFromHwnd( [in, unique] HWND parentWindow,\n                                          [in] BSTR title );\n\n    [propget, id(0x60020009)]\n    HRESULT AutoDetect( [out, retval] VARIANT_BOOL *retval );\n\n    [propput, id(0x60020009)]\n    HRESULT AutoDetect( [in] VARIANT_BOOL value );\n}\n\n[\n    object,\n    uuid(816858a4-260d-4260-933a-2585f1abc76b),\n    oleautomation,\n    dual,\n    nonextensible,\n    pointer_default(unique),\n]\ninterface IUpdateSession : IDispatch\n{\n    [propget]\n    HRESULT ClientApplicationID(\n        [out, retval] BSTR *retval);\n\n    [propput]\n    HRESULT ClientApplicationID(\n        [in] BSTR value);\n\n    [propget]\n    HRESULT ReadOnly(\n        [out, retval] VARIANT_BOOL *retval);\n\n    [propget]\n    HRESULT WebProxy(\n        [out, retval] IWebProxy **retval);\n\n    [propput]\n    HRESULT WebProxy(\n        [in, unique] IWebProxy *value);\n\n    HRESULT CreateUpdateSearcher(\n        [out, retval] IUpdateSearcher **retval);\n\n    HRESULT CreateUpdateDownloader(\n        [out, retval] IUpdateDownloader **retval);\n\n    HRESULT CreateUpdateInstaller(\n        [out, retval] IUpdateInstaller **retval);\n}\n\n[\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(7c907864-346c-4aeb-8f3f-57da289f969f),\n    pointer_default(unique),\n]\ninterface IImageInformation : IDispatch\n{\n    [propget, id(0x60020001)]\n    HRESULT AltText( [out, retval] BSTR *retval );\n\n    [propget, id(0x60020002)]\n    HRESULT Height( [out, retval] LONG *retval );\n\n    [propget, id(0x60020003)]\n    HRESULT Source( [out, retval] BSTR *retval );\n\n    [propget, id(0x60020004)]\n    HRESULT Width( [out, retval] LONG *retval );\n}\n\n[\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(81ddc1b8-9d35-47a6-b471-5b80f519223b),\n    pointer_default(unique),\n]\ninterface ICategory : IDispatch\n{\n    [propget, id(DISPID_VALUE)]\n    HRESULT Name( [out, retval] BSTR *retval );\n\n    [propget, id(0x60020001)]\n    HRESULT CategoryID( [out, retval] BSTR *retval );\n\n    [propget, id(0x60020002)]\n    HRESULT Children( [out, retval] ICategoryCollection **retval );\n\n    [propget, id(0x60020003)]\n    HRESULT Description( [out, retval] BSTR *retval );\n\n    [propget, id(0x60020004)]\n    HRESULT Image( [out, retval] IImageInformation **retval );\n\n    [propget, id(0x60020005)]\n    HRESULT Order( [out, retval] LONG *retval );\n\n    [propget, id(0x60020006)]\n    HRESULT Parent( [out, retval] ICategory **retval );\n\n    [propget, id(0x60020007)]\n    HRESULT Type( [out, retval] BSTR *retval );\n\n    [propget, id(0x60020008)]\n    HRESULT Updates( [out, retval] IUpdateCollection **retval );\n}\n\n[\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(3a56bfb8-576c-43f7-9335-fe4838fd7e37),\n    pointer_default(unique),\n]\ninterface ICategoryCollection : IDispatch\n{\n    [propget, id(DISPID_VALUE)]\n    HRESULT Item( [in] LONG index,\n                [out, retval] ICategory **retval );\n\n    [propget, id(DISPID_NEWENUM)]\n    HRESULT _NewEnum( [out, retval] IUnknown **retval );\n\n    [propget, id(0x60020001)]\n    HRESULT Count( [out, retval] LONG *retval );\n}\n\n[\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(eff90582-2ddc-480f-a06d-60f3fbc362c3),\n    pointer_default(unique),\n    hidden\n]\ninterface IStringCollection : IDispatch\n{\n    [propget, id(DISPID_VALUE)]\n    HRESULT Item( [in] LONG index,\n                  [out, retval] BSTR *retval );\n\n    [propput, id(DISPID_VALUE)]\n    HRESULT Item( [in] LONG index,\n                [in] BSTR value );\n\n    [propget, id(DISPID_NEWENUM)]\n    HRESULT _NewEnum( [out, retval] IUnknown **retval );\n\n    [propget, id(0x60020001)]\n    HRESULT Count( [out, retval] LONG *retval );\n\n    [propget, id(0x60020002)]\n    HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval );\n\n    [id(0x60020003)]\n    HRESULT Add( [in] BSTR value,\n                 [out, retval] LONG *retval );\n\n    [id(0x60020004)]\n    HRESULT Clear();\n\n    [id(0x60020005)]\n    HRESULT Copy( [out, retval] IStringCollection **retval );\n\n    [id(0x60020006)]\n    HRESULT Insert( [in] LONG index,\n                    [in] BSTR value );\n\n    [id(0x60020007)]\n    HRESULT RemoveAt( [in] LONG index );\n}\n\n[\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(a376dd5e-09d4-427f-af7c-fed5b6e1c1d6),\n    pointer_default(unique),\n]\ninterface IUpdateException : IDispatch\n{\n    [propget, id(DISPID_VALUE)]\n    HRESULT Message( [out, retval] BSTR *retval );\n\n    [propget, id(0x60020001)]\n    HRESULT HResult( [out, retval] LONG *retval );\n\n    [propget, id(0x60020002)]\n    HRESULT Context( [out, retval] UpdateExceptionContext *retval );\n}\n\n[\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(503626a3-8e14-4729-9355-0fe664bd2321),\n    pointer_default(unique),\n]\ninterface IUpdateExceptionCollection : IDispatch\n{\n    [propget, id(DISPID_VALUE)]\n    HRESULT Item( [in] LONG index,\n                  [out, retval] IUpdateException **retval );\n\n    [propget, id(DISPID_NEWENUM)]\n    HRESULT _NewEnum( [out, retval] IUnknown **retval );\n\n    [propget, id(0x60020001)]\n    HRESULT Count( [out, retval] LONG *retval );\n}\n\n[\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(46297823-9940-4c09-aed9-cd3ea6d05968),\n    pointer_default(unique)\n]\ninterface IUpdateIdentity : IDispatch\n{\n    [propget, id(0x60020002)]\n    HRESULT RevisionNumber( [out, retval] LONG *retval );\n\n    [propget, id(0x60020003)]\n    HRESULT UpdateID( [out, retval] BSTR *retval );\n}\n\n[\n    ,\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(d9a59339-e245-4dbd-9686-4d5763e39624),\n    pointer_default(unique),\n]\ninterface IInstallationBehavior : IDispatch\n{\n    [propget, id(0x60020001)]\n    HRESULT CanRequestUserInput( [out, retval] VARIANT_BOOL *retval );\n\n    [propget, id(0x60020002)]\n    HRESULT Impact( [out, retval] InstallationImpact *retval );\n\n    [propget, id(0x60020003)]\n    HRESULT RebootBehavior( [out, retval] InstallationRebootBehavior *retval );\n\n    [propget, id(0x60020004)]\n    HRESULT RequiresNetworkConnectivity( [out, retval] VARIANT_BOOL *retval );\n}\n\n[\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(54a2cb2d-9a0c-48b6-8a50-9abb69ee2d02),\n    pointer_default(unique),\n]\ninterface IUpdateDownloadContent : IDispatch\n{\n    [propget, id(0x60020001)]\n    HRESULT DownloadUrl( [out, retval] BSTR *retval );\n}\n\n[\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(bc5513c8-b3b8-4bf7-a4d4-361c0d8c88ba),\n    pointer_default(unique),\n]\ninterface IUpdateDownloadContentCollection : IDispatch\n{\n    [propget, id(DISPID_VALUE)]\n    HRESULT Item( [in] LONG index,\n                  [out, retval] IUpdateDownloadContent **retval );\n\n    [propget, id(DISPID_NEWENUM)]\n    HRESULT _NewEnum( [out, retval] IUnknown **retval );\n\n    [propget, id(0x60020001)]\n    HRESULT Count( [out, retval] LONG *retval );\n}\n\n[\n\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(6a92b07a-d821-4682-b423-5c805022cc4d),\n    pointer_default(unique),\n]\ninterface IUpdate : IDispatch\n{\n    [propget, id(DISPID_VALUE)]\n    HRESULT Title( [out, retval] BSTR *retval );\n\n    [propget, id(0x60020001)]\n    HRESULT AutoSelectOnWebSites( [out, retval] VARIANT_BOOL *retval );\n\n    [propget, id(0x60020002)]\n    HRESULT BundledUpdates( [out, retval] IUpdateCollection **retval );\n\n    [propget, id(0x60020003)]\n    HRESULT CanRequireSource( [out, retval] VARIANT_BOOL *retval );\n\n    [propget, id(0x60020004)]\n    HRESULT Categories( [out, retval] ICategoryCollection **retval );\n\n    [propget, id(0x60020005)]\n    HRESULT Deadline( [out, retval] VARIANT *retval );\n\n    [propget, id(0x60020006)]\n    HRESULT DeltaCompressedContentAvailable( [out, retval] VARIANT_BOOL *retval );\n\n    [propget, id(0x60020007)]\n    HRESULT DeltaCompressedContentPreferred( [out, retval] VARIANT_BOOL *retval );\n\n    [propget, id(0x60020008)]\n    HRESULT Description( [out, retval] BSTR *retval );\n\n    [propget, id(0x60020009)]\n    HRESULT EulaAccepted( [out, retval] VARIANT_BOOL *retval );\n\n    [propget, id(0x6002000a)]\n    HRESULT EulaText( [out, retval] BSTR *retval );\n\n    [propget, id(0x6002000b)]\n    HRESULT HandlerID( [out, retval] BSTR *retval );\n\n    [propget, id(0x6002000c)]\n    HRESULT Identity( [out, retval] IUpdateIdentity **retval );\n\n    [propget, id(0x6002000d)]\n    HRESULT Image( [out, retval] IImageInformation **retval );\n\n    [propget, id(0x6002000e)]\n    HRESULT InstallationBehavior( [out, retval] IInstallationBehavior **retval );\n\n    [propget, id(0x6002000f)]\n    HRESULT IsBeta( [out, retval] VARIANT_BOOL *retval );\n\n    [propget, id(0x60020010)]\n    HRESULT IsDownloaded( [out, retval] VARIANT_BOOL *retval );\n\n    [propget, id(0x60020011)]\n    HRESULT IsHidden( [out, retval] VARIANT_BOOL *retval );\n\n    [propput, id(0x60020011)]\n    HRESULT IsHidden( [in] VARIANT_BOOL value );\n\n    [propget, id(0x60020012)]\n    HRESULT IsInstalled( [out, retval] VARIANT_BOOL *retval );\n\n    [propget, id(0x60020013)]\n    HRESULT IsMandatory( [out, retval] VARIANT_BOOL *retval );\n\n    [propget, id(0x60020014)]\n    HRESULT IsUninstallable( [out, retval] VARIANT_BOOL *retval );\n\n    [propget, id(0x60020015)]\n    HRESULT Languages( [out, retval] IStringCollection **retval );\n\n    [propget, id(0x60020016)]\n    HRESULT LastDeploymentChangeTime( [out, retval] DATE *retval );\n\n    [propget, id(0x60020017)]\n    HRESULT MaxDownloadSize( [out, retval] DECIMAL *retval );\n\n    [propget, id(0x60020018)]\n    HRESULT MinDownloadSize( [out, retval] DECIMAL *retval );\n\n    [propget, id(0x60020019)]\n    HRESULT MoreInfoUrls( [out, retval] IStringCollection **retval );\n\n    [propget, id(0x6002001a)]\n    HRESULT MsrcSeverity( [out, retval] BSTR *retval );\n\n    [propget, id(0x6002001b)]\n    HRESULT RecommendedCpuSpeed( [out, retval] LONG *retval );\n\n    [propget, id(0x6002001c)]\n    HRESULT RecommendedHardDiskSpace( [out, retval] LONG *retval );\n\n    [propget, id(0x6002001d)]\n    HRESULT RecommendedMemory( [out, retval] LONG *retval );\n\n    [propget, id(0x6002001e)]\n    HRESULT ReleaseNotes( [out, retval] BSTR *retval );\n\n    [propget, id(0x6002001f)]\n    HRESULT SecurityBulletinIDs( [out, retval] IStringCollection **retval );\n\n    [propget, id(0x60020021)]\n    HRESULT SupersededUpdateIDs( [out, retval] IStringCollection **retval );\n\n    [propget, id(0x60020022)]\n    HRESULT SupportUrl( [out, retval] BSTR *retval );\n\n    [propget, id(0x60020023)]\n    HRESULT Type( [out, retval] UpdateType *retval );\n\n    [propget, id(0x60020024)]\n    HRESULT UninstallationNotes( [out, retval] BSTR *retval );\n\n    [propget, id(0x60020025)]\n    HRESULT UninstallationBehavior( [out, retval] IInstallationBehavior **retval );\n\n    [propget, id(0x60020026)]\n    HRESULT UninstallationSteps( [out, retval] IStringCollection **retval );\n\n    [propget, id(0x60020028)]\n    HRESULT KBArticleIDs( [out, retval] IStringCollection **retval );\n\n    [id(0x60020027)]\n    HRESULT AcceptEula();\n\n    [propget, id(0x60020029)]\n    HRESULT DeploymentAction( [out, retval] DeploymentAction *retval );\n\n    [id(0x6002002a)]\n    HRESULT CopyFromCache( [in, ref] BSTR path,\n                           [in] VARIANT_BOOL toExtractCabFiles );\n\n    [propget, id(0x6002002b)]\n    HRESULT DownloadPriority( [out, retval] DownloadPriority *retval );\n\n    [propget, id(0x6002002c)]\n    HRESULT DownloadContents( [out, retval] IUpdateDownloadContentCollection **retval );\n}\n\n[\n\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(07f7438c-7709-4ca5-b518-91279288134e),\n    pointer_default(unique),\n    hidden\n]\ninterface IUpdateCollection : IDispatch\n{\n    [propget, id(DISPID_VALUE)]\n    HRESULT Item( [in] LONG index,\n                  [out, retval] IUpdate **retval );\n\n    [propput, id(DISPID_VALUE)]\n    HRESULT Item( [in] LONG index,\n                  [in] IUpdate *value );\n\n    [propget, id(DISPID_NEWENUM)]\n    HRESULT _NewEnum( [out, retval] IUnknown **retval );\n\n    [propget, id(0x60020001)]\n    HRESULT Count( [out, retval] LONG *retval );\n\n    [propget, id(0x60020002)]\n    HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval );\n\n    [id(0x60020003)]\n    HRESULT Add( [in] IUpdate *value,\n                 [out, retval] LONG *retval );\n\n    [id(0x60020004)]\n    HRESULT Clear();\n\n    [id(0x60020005)]\n    HRESULT Copy( [out, retval] IUpdateCollection **retval );\n\n    [id(0x60020006)]\n    HRESULT Insert( [in] LONG index,\n                [in] IUpdate *value );\n\n    [id(0x60020007)]\n    HRESULT RemoveAt( [in] LONG index );\n}\n\n[\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(7366ea16-7a1a-4ea2-b042-973d3e9cd99b),\n    pointer_default(unique),\n]\ninterface ISearchJob : IDispatch\n{\n    [propget, id(0x60020001)]\n    HRESULT AsyncState( [out, retval] VARIANT *retval );\n\n    [propget, id(0x60020002)]\n    HRESULT IsCompleted( [out, retval] VARIANT_BOOL *retval );\n\n    [id(0x60020003)]\n    HRESULT CleanUp();\n\n    [id(0x60020004)]\n    HRESULT RequestAbort();\n}\n\n[\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(d40cff62-e08c-4498-941a-01e25f0fd33c),\n    pointer_default(unique),\n]\ninterface ISearchResult : IDispatch\n{\n    [propget, id(0x60020001)]\n    HRESULT ResultCode( [out, retval] OperationResultCode *retval );\n\n    [propget, id(0x60020002)]\n    HRESULT RootCategories( [out, retval] ICategoryCollection **retval );\n\n    [propget, id(0x60020003)]\n    HRESULT Updates( [out, retval] IUpdateCollection **retval );\n\n    [propget, id(0x60020004)]\n    HRESULT Warnings( [out, retval] IUpdateExceptionCollection **retval );\n}\n\n[\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(be56a644-af0e-4e0e-a311-c1d8e695cbff),\n    pointer_default(unique),\n]\ninterface IUpdateHistoryEntry : IDispatch\n{\n    [propget, id(0x60020001)]\n    HRESULT Operation( [out, retval] UpdateOperation *retval );\n\n    [propget, id(0x60020002)]\n    HRESULT ResultCode( [out, retval] OperationResultCode *retval );\n\n    [propget, id(0x60020003)]\n    HRESULT HResult( [out, retval] LONG *retval );\n\n    [propget, id(0x60020004)]\n    HRESULT Date( [out, retval] DATE *retval );\n\n    [propget, id(0x60020005)]\n    HRESULT UpdateIdentity( [out, retval] IUpdateIdentity **retval );\n\n    [propget, id(0x60020006)]\n    HRESULT Title( [out, retval] BSTR *retval );\n\n    [propget, id(0x60020007)]\n    HRESULT Description( [out, retval] BSTR *retval );\n\n    [propget, id(0x60020008)]\n    HRESULT UnmappedResultCode( [out, retval] LONG *retval );\n\n    [propget, id(0x60020009)]\n    HRESULT ClientApplicationID( [out, retval] BSTR *retval );\n\n    [propget, id(0x6002000a)]\n    HRESULT ServerSelection( [out, retval] ServerSelection *retval );\n\n    [propget, id(0x6002000b)]\n    HRESULT ServiceID( [out, retval] BSTR *retval );\n\n    [propget, id(0x6002000c)]\n    HRESULT UninstallationSteps( [out, retval] IStringCollection **retval );\n\n    [propget, id(0x6002000d)]\n    HRESULT UninstallationNotes( [out, retval] BSTR *retval );\n\n    [propget, id(0x6002000e)]\n    HRESULT SupportUrl( [out, retval] BSTR *retval );\n}\n\n[\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(a7f04f3c-a290-435b-aadf-a116c3357a5c),\n    pointer_default(unique),\n]\ninterface IUpdateHistoryEntryCollection : IDispatch\n{\n    [propget, id(DISPID_VALUE)]\n    HRESULT Item( [in] LONG index,\n                  [out, retval] IUpdateHistoryEntry **retval );\n\n    [propget, id(DISPID_NEWENUM)]\n    HRESULT _NewEnum( [out, retval] IUnknown **retval );\n\n    [propget, id(0x60020001)]\n    HRESULT Count( [out, retval] LONG *retval );\n}\n\n[\n    object,\n    uuid(8f45abf1-f9ae-4b95-a933-f0f66e5056ea),\n    oleautomation,\n    dual,\n    nonextensible,\n    pointer_default(unique),\n]\ninterface IUpdateSearcher : IDispatch\n{\n    [propget]\n    HRESULT CanAutomaticallyUpgradeService(\n        [out, retval] VARIANT_BOOL *retval);\n\n    [propput]\n    HRESULT CanAutomaticallyUpgradeService(\n        [in] VARIANT_BOOL value);\n\n    [propget]\n    HRESULT ClientApplicationID(\n        [out, retval] BSTR *retval);\n\n    [propput]\n    HRESULT ClientApplicationID(\n        [in] BSTR value);\n\n    [propget]\n    HRESULT IncludePotentiallySupersededUpdates(\n        [out, retval] VARIANT_BOOL *retval);\n\n    [propput]\n    HRESULT IncludePotentiallySupersededUpdates(\n        [in] VARIANT_BOOL value);\n\n    [propget]\n    HRESULT ServerSelection(\n        [out, retval] ServerSelection *retval);\n\n    [propput]\n    HRESULT ServerSelection(\n        [in] ServerSelection value);\n\n    HRESULT BeginSearch(\n        [in] BSTR criteria,\n        [in] IUnknown *onCompleted,\n        [in] VARIANT state,\n        [out, retval] ISearchJob **retval);\n\n    HRESULT EndSearch(\n        [in] ISearchJob *searchJob,\n        [out, retval] ISearchResult **retval);\n\n    HRESULT EscapeString(\n        [in] BSTR unescaped,\n        [out, retval] BSTR *retval);\n\n    HRESULT QueryHistory(\n        [in] LONG startIndex,\n        [in] LONG count,\n        [out, retval] IUpdateHistoryEntryCollection **retval);\n\n    HRESULT Search(\n        [in] BSTR criteria,\n        [out, retval] ISearchResult **retval);\n\n    [propget]\n    HRESULT Online(\n        [out, retval] VARIANT_BOOL *retval);\n\n    [propput]\n    HRESULT Online(\n        [in] VARIANT_BOOL value);\n\n    HRESULT GetTotalHistoryCount(\n        [out, retval] LONG *retval);\n\n    [propget]\n    HRESULT ServiceID(\n        [out, retval] BSTR *retval);\n\n    [propput]\n    HRESULT ServiceID(\n        [in] BSTR value);\n}\n\n[\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(bf99af76-b575-42ad-8aa4-33cbb5477af1),\n    pointer_default(unique),\n]\ninterface IUpdateDownloadResult : IDispatch\n{\n    [propget, id(0x60020001)]\n    HRESULT HResult( [out, retval] LONG *retval );\n\n    [propget, id(0x60020002)]\n    HRESULT ResultCode( [out, retval] OperationResultCode *retval );\n}\n\n[\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(d31a5bac-f719-4178-9dbb-5e2cb47fd18a),\n    pointer_default(unique),\n]\ninterface IDownloadProgress : IDispatch\n{\n    [propget, id(0x60020001)]\n    HRESULT CurrentUpdateBytesDownloaded( [out, retval] DECIMAL *retval );\n\n    [propget, id(0x60020002)]\n    HRESULT CurrentUpdateBytesToDownload( [out, retval] DECIMAL *retval );\n\n    [propget, id(0x60020003)]\n    HRESULT CurrentUpdateIndex( [out, retval] LONG *retval );\n\n    [propget, id(0x60020004)]\n    HRESULT PercentComplete( [out, retval] LONG *retval );\n\n    [propget, id(0x60020005)]\n    HRESULT TotalBytesDownloaded( [out, retval] DECIMAL *retval );\n\n    [propget, id(0x60020006)]\n    HRESULT TotalBytesToDownload( [out, retval] DECIMAL *retval );\n\n    [id(0x60020007)]\n    HRESULT GetUpdateResult( [in] LONG updateIndex,\n                             [out, retval] IUpdateDownloadResult **retval );\n\n\n    [propget, id(0x60020008)]\n    HRESULT CurrentUpdateDownloadPhase( [out, retval] DownloadPhase *retval );\n\n    [propget, id(0x60020009)]\n    HRESULT CurrentUpdatePercentComplete( [out, retval] LONG *retval );\n}\n\n[\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(c574de85-7358-43f6-aae8-8697e62d8ba7),\n    pointer_default(unique),\n]\ninterface IDownloadJob : IDispatch\n{\n    [propget, id(0x60020001)]\n    HRESULT AsyncState( [out, retval] VARIANT *retval );\n\n    [propget, id(0x60020002)]\n    HRESULT IsCompleted( [out, retval] VARIANT_BOOL *retval );\n\n    [propget, id(0x60020003)]\n    HRESULT Updates( [out, retval] IUpdateCollection **retval );\n\n    [id(0x60020004)]\n    HRESULT CleanUp();\n\n    [id(0x60020005)]\n    HRESULT GetProgress( [out, retval] IDownloadProgress **retval );\n\n    [id(0x60020006)]\n    HRESULT RequestAbort();\n}\n\n[\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(daa4fdd0-4727-4dbe-a1e7-745dca317144),\n    pointer_default(unique),\n]\ninterface IDownloadResult : IDispatch\n{\n    [propget, id(0x60020001)]\n    HRESULT HResult( [out, retval] LONG *retval );\n\n    [propget, id(0x60020002)]\n    HRESULT ResultCode( [out, retval] OperationResultCode *retval );\n\n    [id(0x60020003)]\n    HRESULT GetUpdateResult( [in] LONG updateIndex,\n                             [out, retval] IUpdateDownloadResult **retval );\n}\n\n[\n    object,\n    uuid(68f1c6f9-7ecc-4666-a464-247fe12496c3),\n    oleautomation,\n    dual,\n    nonextensible,\n    pointer_default(unique),\n    hidden\n]\ninterface IUpdateDownloader : IDispatch\n{\n    [propget]\n    HRESULT ClientApplicationID(\n        [out, retval] BSTR *retval);\n\n    [propput]\n    HRESULT ClientApplicationID(\n        [in] BSTR value);\n\n    [propget]\n    HRESULT IsForced(\n        [out, retval] VARIANT_BOOL *retval);\n\n    [propput]\n    HRESULT IsForced(\n        [in] VARIANT_BOOL value);\n\n    [propget]\n    HRESULT Priority(\n        [out, retval] DownloadPriority *retval);\n\n    [propput]\n    HRESULT Priority(\n        [in] DownloadPriority value);\n\n    [propget]\n    HRESULT Updates(\n        [out, retval] IUpdateCollection **retval);\n\n    [propput]\n    HRESULT Updates(\n        [in] IUpdateCollection *value);\n\n    HRESULT BeginDownload(\n        [in] IUnknown *onProgressChanged,\n        [in] IUnknown *onCompleted,\n        [in] VARIANT state,\n        [out, retval] IDownloadJob **retval);\n\n    HRESULT Download(\n        [out, retval] IDownloadResult **retval);\n\n    HRESULT EndDownload(\n        [in] IDownloadJob *value,\n        [out, retval] IDownloadResult **retval);\n}\n\n[\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(d940f0f8-3cbb-4fd0-993f-471e7f2328ad),\n    pointer_default(unique),\n]\ninterface IUpdateInstallationResult : IDispatch\n{\n    [propget, id(0x60020001)]\n    HRESULT HResult( [out, retval] LONG *retval );\n\n    [propget, id(0x60020002)]\n    HRESULT RebootRequired( [out, retval] VARIANT_BOOL *retval );\n\n    [propget, id(0x60020003)]\n    HRESULT ResultCode( [out, retval] OperationResultCode *retval );\n}\n\n[\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(345c8244-43a3-4e32-a368-65f073b76f36),\n    pointer_default(unique),\n]\ninterface IInstallationProgress : IDispatch\n{\n    [propget, id(0x60020001)]\n    HRESULT CurrentUpdateIndex( [out, retval] LONG *retval );\n\n    [propget, id(0x60020002)]\n    HRESULT CurrentUpdatePercentComplete( [out, retval] LONG *retval );\n\n    [propget, id(0x60020003)]\n    HRESULT PercentComplete( [out, retval] LONG *retval );\n\n    [id(0x60020004)]\n    HRESULT GetUpdateResult( [in] LONG updateIndex,\n                             [out, retval] IUpdateInstallationResult **retval );\n}\n\n[\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(5c209f0b-bad5-432a-9556-4699bed2638a),\n    pointer_default(unique),\n]\ninterface IInstallationJob : IDispatch\n{\n    [propget, id(0x60020001)]\n    HRESULT AsyncState( [out, retval] VARIANT *retval );\n\n    [propget, id(0x60020002)]\n    HRESULT IsCompleted( [out, retval] VARIANT_BOOL *retval );\n\n    [propget, id(0x60020003)]\n    HRESULT Updates( [out, retval] IUpdateCollection **retval );\n\n    [id(0x60020004)]\n    HRESULT CleanUp();\n\n    [id(0x60020005)]\n    HRESULT GetProgress( [out, retval] IInstallationProgress **retval );\n\n    [id(0x60020006)]\n    HRESULT RequestAbort();\n}\n\n[\n    object,\n    oleautomation,\n    dual,\n    nonextensible,\n    uuid(a43c56d6-7451-48d4-af96-b6cd2d0d9b7a),\n    pointer_default(unique),\n]\ninterface IInstallationResult : IDispatch\n{\n    [propget, id(0x60020001)]\n    HRESULT HResult( [out, retval] LONG *retval );\n\n    [propget, id(0x60020002)]\n    HRESULT RebootRequired( [out, retval] VARIANT_BOOL *retval );\n\n    [propget, id(0x60020003)]\n    HRESULT ResultCode( [out, retval] OperationResultCode *retval );\n\n    [id(0x60020004)]\n    HRESULT GetUpdateResult( [in] LONG updateIndex,\n                             [out, retval] IUpdateInstallationResult **retval );\n}\n\n[\n    object,\n    uuid(7b929c68-ccdc-4226-96b1-8724600b54c2),\n    oleautomation,\n    dual,\n    nonextensible,\n    pointer_default(unique),\n]\ninterface IUpdateInstaller : IDispatch\n{\n    [propget]\n    HRESULT ClientApplicationID(\n        [out, retval] BSTR *retval);\n\n    [propput]\n    HRESULT ClientApplicationID(\n        [in] BSTR value);\n\n    [propget]\n    HRESULT IsForced(\n        [out, retval] VARIANT_BOOL *retval);\n\n    [propput]\n    HRESULT IsForced(\n        [in] VARIANT_BOOL value);\n\n    [propget, restricted]\n    HRESULT ParentHwnd(\n        [out, retval] HWND *retval);\n\n    [propput, restricted]\n    HRESULT ParentHwnd(\n        [in, unique] HWND value);\n\n    [propput]\n    HRESULT ParentWindow(\n        [in, unique] IUnknown *value);\n\n    [propget]\n    HRESULT ParentWindow(\n        [out, retval] IUnknown **retval);\n\n    [propget]\n    HRESULT Updates(\n        [out, retval] IUpdateCollection **retval);\n\n    [propput]\n    HRESULT Updates(\n        [in] IUpdateCollection *value);\n\n    HRESULT BeginInstall(\n        [in] IUnknown *onProgressChanged,\n        [in] IUnknown *onCompleted,\n        [in] VARIANT state,\n        [out, retval] IInstallationJob **retval);\n\n    HRESULT BeginUninstall(\n        [in] IUnknown *onProgressChanged,\n        [in] IUnknown *onCompleted,\n        [in] VARIANT state,\n        [out, retval] IInstallationJob **retval);\n\n    HRESULT EndInstall(\n        [in] IInstallationJob *value,\n        [out, retval] IInstallationResult **retval);\n\n    HRESULT EndUninstall(\n        [in] IInstallationJob *value,\n        [out, retval] IInstallationResult **retval);\n\n    HRESULT Install(\n        [out, retval] IInstallationResult **retval);\n\n    HRESULT RunWizard(\n        [in, defaultvalue(\"\")] BSTR dialogTitle,\n        [out, retval] IInstallationResult **retval);\n\n    [propget]\n    HRESULT IsBusy(\n        [out, retval] VARIANT_BOOL *retval);\n\n    HRESULT Uninstall(\n        [out, retval] IInstallationResult **retval);\n\n    [propget]\n    HRESULT AllowSourcePrompts(\n        [out, retval] VARIANT_BOOL *retval);\n\n    [propput]\n    HRESULT AllowSourcePrompts(\n        [in] VARIANT_BOOL value);\n\n    [propget]\n    HRESULT RebootRequiredBeforeInstallation(\n        [out, retval] VARIANT_BOOL *retval);\n}\n\n[\n    object,\n    uuid(ADE87BF7-7B56-4275-8FAB-B9B0E591844B),\n    oleautomation,\n    hidden,\n    dual,\n    nonextensible,\n    pointer_default(unique),\n]\ninterface ISystemInformation : IDispatch\n{\n    [propget]\n    HRESULT OemHardwareSupportLink(\n        [out, retval] BSTR *retval);\n\n    [propget]\n    HRESULT RebootRequired(\n        [out, retval] VARIANT_BOOL *retval);\n}\n\n[\n    helpstring(\"AutomaticUpdates Class\"),\n    threading(both),\n    progid(\"Microsoft.Update.AutoUpdate.1\"),\n    vi_progid(\"Microsoft.Update.AutoUpdate\"),\n    uuid(bfe18e9c-6d87-4450-b37c-e02f0b373803)\n]\ncoclass AutomaticUpdates { interface IAutomaticUpdates; }\n\n[\n    helpstring(\"UpdateSession Class\"),\n    threading(both),\n    progid(\"Microsoft.Update.Session.1\"),\n    vi_progid(\"Microsoft.Update.Session\"),\n    uuid(4cb43d7f-7eee-4906-8698-60da1c38f2fe)\n]\ncoclass UpdateSession { interface IUpdateSession; }\n\n[\n    helpstring(\"SystemInformation Class\"),\n    threading(both),\n    progid(\"Microsoft.Update.SystemInfo.1\"),\n    vi_progid(\"Microsoft.Update.SystemInfo\"),\n    uuid(C01B9BA0-BEA7-41BA-B604-D0A36F469133)\n]\ncoclass SystemInformation { interface ISystemInformation; }\n\n} /* WUApiLib */\n"
  },
  {
    "path": "wine/windows/x3daudio.h",
    "content": "/*\n * Copyright (c) 2015 Andrew Eikum for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _X3DAUDIO_H\n#define _X3DAUDIO_H\n\ntypedef struct X3DAUDIO_VECTOR {\n    float x, y, z;\n} X3DAUDIO_VECTOR;\n\ntypedef struct X3DAUDIO_CONE {\n    float InnerAngle;\n    float OuterAngle;\n    float InnerVolume;\n    float OuterVolume;\n    float InnerLPF;\n    float OuterLPF;\n    float InnerReverb;\n    float OuterReverb;\n} X3DAUDIO_CONE;\n\ntypedef struct X3DAUDIO_DISTANCE_CURVE_POINT {\n    float Distance;\n    float DSPSetting;\n} X3DAUDIO_DISTANCE_CURVE_POINT;\n\ntypedef struct X3DAUDIO_DISTANCE_CURVE {\n    X3DAUDIO_DISTANCE_CURVE_POINT *pPoints;\n    UINT32 PointCount;\n} X3DAUDIO_DISTANCE_CURVE;\n\ntypedef struct X3DAUDIO_LISTENER {\n    X3DAUDIO_VECTOR OrientFront;\n    X3DAUDIO_VECTOR OrientTop;\n    X3DAUDIO_VECTOR Position;\n    X3DAUDIO_VECTOR Velocity;\n    X3DAUDIO_CONE *pCone;\n} X3DAUDIO_LISTENER;\n\ntypedef struct X3DAUDIO_EMITTER {\n    X3DAUDIO_CONE *pCone;\n    X3DAUDIO_VECTOR OrientFront;\n    X3DAUDIO_VECTOR OrientTop;\n    X3DAUDIO_VECTOR Position;\n    X3DAUDIO_VECTOR Velocity;\n    float InnerRadius;\n    float InnerRadiusAngle;\n    UINT32 ChannelCount;\n    float ChannelRadius;\n    float *pChannelAzimuths;\n    X3DAUDIO_DISTANCE_CURVE *pVolumeCurve;\n    X3DAUDIO_DISTANCE_CURVE *pLFECurve;\n    X3DAUDIO_DISTANCE_CURVE *pLPFDirectCurve;\n    X3DAUDIO_DISTANCE_CURVE *pLPFReverbCurve;\n    X3DAUDIO_DISTANCE_CURVE *pReverbCurve;\n    float CurveDistanceScalar;\n    float DopplerScalar;\n} X3DAUDIO_EMITTER;\n\ntypedef struct X3DAUDIO_DSP_SETTINGS {\n    float *pMatrixCoefficients;\n    float *pDelayTimes;\n    UINT32 SrcChannelCount;\n    UINT32 DstChannelCount;\n    float LPFDirectCoefficient;\n    float LPFReverbCoefficient;\n    float ReverbLevel;\n    float DopplerFactor;\n    float EmitterToListenerAngle;\n    float EmitterToListenerDistance;\n    float EmitterVelocityComponent;\n    float ListenerVelocityComponent;\n} X3DAUDIO_DSP_SETTINGS;\n\n#define X3DAUDIO_HANDLE_BYTESIZE 20\ntypedef BYTE X3DAUDIO_HANDLE[X3DAUDIO_HANDLE_BYTESIZE];\n\nHRESULT CDECL X3DAudioInitialize(UINT32, float, X3DAUDIO_HANDLE);\nvoid CDECL X3DAudioCalculate(const X3DAUDIO_HANDLE, const X3DAUDIO_LISTENER *,\n        const X3DAUDIO_EMITTER *, UINT32, X3DAUDIO_DSP_SETTINGS *);\n\n#endif\n"
  },
  {
    "path": "wine/windows/xapo.idl",
    "content": "/*\n * Copyright (c) 2015 Andrew Eikum for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\n\n#define XAPO_REGISTRATION_STRING_LENGTH 256\n\ncpp_quote(\"#if 0\")\ntypedef struct WAVEFORMATEX\n{\n    WORD wFormatTag;\n    WORD nChannels;\n    DWORD nSamplesPerSec;\n    DWORD nAvgBytesPerSec;\n    WORD nBlockAlign;\n    WORD wBitsPerSample;\n    WORD cbSize;\n} WAVEFORMATEX;\n\ntypedef struct {\n    WAVEFORMATEX    Format;\n    union {\n        WORD        wValidBitsPerSample;\n        WORD        wSamplesPerBlock;\n        WORD        wReserved;\n    } Samples;\n    DWORD           dwChannelMask;\n    GUID            SubFormat;\n} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;\ncpp_quote(\"#else\")\ncpp_quote(\"#include <mmreg.h>\")\ncpp_quote(\"#endif\")\n\ntypedef struct XAPO_REGISTRATION_PROPERTIES\n{\n    CLSID clsid;\n    WCHAR FriendlyName[XAPO_REGISTRATION_STRING_LENGTH];\n    WCHAR CopyrightInfo[XAPO_REGISTRATION_STRING_LENGTH];\n    UINT32 MajorVersion;\n    UINT32 MinorVersion;\n    UINT32 Flags;\n    UINT32 MinInputBufferCount;\n    UINT32 MaxInputBufferCount;\n    UINT32 MinOutputBufferCount;\n    UINT32 MaxOutputBufferCount;\n} XAPO_REGISTRATION_PROPERTIES;\n\ntypedef struct XAPO20_REGISTRATION_PROPERTIES\n{\n    CLSID clsid;\n    WCHAR FriendlyName[XAPO_REGISTRATION_STRING_LENGTH];\n    WCHAR CopyrightInfo[XAPO_REGISTRATION_STRING_LENGTH];\n    UINT32 MajorVersion;\n    UINT32 MinorVersion;\n    UINT32 Flags;\n    UINT32 MinInputBufferCount;\n    UINT32 MaxInputBufferCount;\n    UINT32 MinOutputBufferCount;\n    UINT32 MaxOutputBufferCount;\n    UINT32 InterfaceCount;\n    IID InterfaceArray[1];\n} XAPO20_REGISTRATION_PROPERTIES;\n\ntypedef struct XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS {\n    const WAVEFORMATEX *pFormat;\n    UINT32 MaxFrameCount;\n} XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS;\n\ntypedef enum XAPO_BUFFER_FLAGS {\n    XAPO_BUFFER_SILENT,\n    XAPO_BUFFER_VALID\n} XAPO_BUFFER_FLAGS;\n\ntypedef struct XAPO_PROCESS_BUFFER_PARAMETERS {\n    void *pBuffer;\n    XAPO_BUFFER_FLAGS BufferFlags;\n    UINT32 ValidFrameCount;\n} XAPO_PROCESS_BUFFER_PARAMETERS;\n\n/* XAudio2 2.8 version of IXAPO */\n[\n    object,\n    local,\n    uuid(a410b984-9839-4819-a0be-2856ae6b3adb)\n]\ninterface IXAPO : IUnknown\n{\n    HRESULT GetRegistrationProperties([out] XAPO_REGISTRATION_PROPERTIES **props);\n\n    HRESULT IsInputFormatSupported(const WAVEFORMATEX *output_fmt,\n        const WAVEFORMATEX *input_fmt, WAVEFORMATEX **supported_fmt);\n\n    HRESULT IsOutputFormatSupported(const WAVEFORMATEX *input_fmt,\n        const WAVEFORMATEX *output_fmt, WAVEFORMATEX **supported_fmt);\n\n    HRESULT Initialize(const void *data, UINT32 data_len);\n\n    void Reset(void);\n\n    HRESULT LockForProcess(UINT32 in_params_count, const XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS *in_params,\n        UINT32 out_params_count, const XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS *out_params);\n\n    void UnlockForProcess(void);\n\n    void Process(UINT32 in_params_count, const XAPO_PROCESS_BUFFER_PARAMETERS *in_params,\n        UINT32 out_params_count, const XAPO_PROCESS_BUFFER_PARAMETERS *out_params,\n        BOOL enabled);\n\n    UINT32 CalcInputFrames(UINT32 output_frames);\n\n    UINT32 CalcOutputFrames(UINT32 input_frames);\n}\n\n/* XAudio2 2.7 version of IXAPO is identical to 2.8 */\ncpp_quote(\"DEFINE_GUID(IID_IXAPO27, 0xa90bc001, 0xe897, 0xe897, 0x55, 0xe4, 0x9e, 0x47, 0x00, 0x00, 0x00, 0x00);\")\n\n\n/* XAudio2 2.8 version of IXAPOParameters */\n[\n    object,\n    local,\n    uuid(26d95c66-80f2-499a-ad54-5ae7f01c6d98)\n]\ninterface IXAPOParameters : IUnknown\n{\n    void SetParameters(const void *params, UINT32 params_len);\n\n    void GetParameters(void *params, UINT32 params_len);\n}\n\n/* XAudio2 2.7 version of IXAPOParameters is identical to 2.8 */\ncpp_quote(\"DEFINE_GUID(IID_IXAPO27Parameters, 0xa90bc001, 0xe897, 0xe897, 0x55, 0xe4, 0x9e, 0x47, 0x00, 0x00, 0x00, 0x01);\")\n"
  },
  {
    "path": "wine/windows/xapofx.h",
    "content": "/*\n * Copyright (c) 2015 Andrew Eikum for CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n/* CLSIDs used by CreateFX, but never registered */\n\n#ifndef _XAPOFX_H\n#define _XAPOFX_H\n\n/* xapofx 1.0 through 1.5 */\nDEFINE_GUID(CLSID_FXEQ27, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0x55, 0x00, 0x00, 0x00, 0x00);\n/* xaudio >= 2.8 */\nDEFINE_GUID(CLSID_FXEQ, 0xf5e01117, 0xd6c4, 0x485a, 0xa3, 0xf5, 0x69, 0x51, 0x96, 0xf3, 0xdb, 0xfa);\n\n/* xapofx 1.0 through 1.5 */\nDEFINE_GUID(CLSID_FXMasteringLimiter27, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0x55, 0x00, 0x00, 0x00, 0x01);\n/* xaudio >= 2.8 */\nDEFINE_GUID(CLSID_FXMasteringLimiter, 0xc4137916, 0x2be1, 0x46fd, 0x85, 0x99, 0x44, 0x15, 0x36, 0xf4, 0x98, 0x56);\n\n/* xapofx 1.0 through 1.5 */\nDEFINE_GUID(CLSID_FXReverb27, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0x55, 0x00, 0x00, 0x00, 0x02);\n/* xaudio >= 2.8 */\nDEFINE_GUID(CLSID_FXReverb, 0x7d9aca56, 0xcb68, 0x4807, 0xb6, 0x32, 0xb1, 0x37, 0x35, 0x2e, 0x85, 0x96);\n\n/* xapofx 1.0 through 1.5 */\nDEFINE_GUID(CLSID_FXEcho27, 0xa90bc001, 0xe897, 0xe897, 0x74, 0x39, 0x43, 0x55, 0x00, 0x00, 0x00, 0x03);\n/* xaudio >= 2.8 */\nDEFINE_GUID(CLSID_FXEcho, 0x5039d740, 0xf736, 0x449a, 0x84, 0xd3, 0xa5, 0x62, 0x02, 0x55, 0x7b, 0x87);\n\n#endif\n"
  },
  {
    "path": "wine/windows/xaudio2.idl",
    "content": "/*\n * Copyright (c) 2015 Mark Harmstone\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\nimport \"mmdeviceapi.idl\";\n\nimport \"audiosessiontypes.h\";\n\ncpp_quote(\"#include <pshpack1.h>\")\n\n[\n    uuid(fac23f48-31f5-45a8-b49b-5225d61401aa)\n]\ncoclass XAudio20 {\n    interface IUnknown;\n}\n\n[\n    uuid(e21a7345-eb21-468e-be50-804db97cf708)\n]\ncoclass XAudio21 {\n    interface IUnknown;\n}\n\n[\n    uuid(b802058a-464a-42db-bc10-b650d6f2586a)\n]\ncoclass XAudio22 {\n    interface IUnknown;\n}\n\n[\n    uuid(4c5e637a-16c7-4de3-9c46-5ed22181962d)\n]\ncoclass XAudio23 {\n    interface IUnknown;\n}\n\n[\n    uuid(03219e78-5bc3-44d1-b92e-f63d89cc6526)\n]\ncoclass XAudio24 {\n    interface IUnknown;\n}\n\n[\n    uuid(4c9b6dde-6809-46e6-a278-9b6a97588670)\n]\ncoclass XAudio25 {\n    interface IUnknown;\n}\n\n[\n    uuid(3eda9b49-2085-498b-9bb2-39a6778493de)\n]\ncoclass XAudio26 {\n    interface IUnknown;\n}\n\n[\n    uuid(5a508685-a254-4fba-9b82-9a24b00306af)\n]\ncoclass XAudio27 {\n    interface IUnknown;\n}\n\n[\n    uuid(db05ea35-0329-4d4b-a53a-6dead03d3852)\n]\ncoclass XAudio2Debug {\n    interface IUnknown;\n}\n\ncpp_quote(\"#if 0\")\ntypedef struct WAVEFORMATEX\n{\n    WORD wFormatTag;\n    WORD nChannels;\n    DWORD nSamplesPerSec;\n    DWORD nAvgBytesPerSec;\n    WORD nBlockAlign;\n    WORD wBitsPerSample;\n    WORD cbSize;\n} WAVEFORMATEX;\n\ntypedef struct {\n    WAVEFORMATEX    Format;\n    union {\n        WORD        wValidBitsPerSample;\n        WORD        wSamplesPerBlock;\n        WORD        wReserved;\n    } Samples;\n    DWORD           dwChannelMask;\n    GUID            SubFormat;\n} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;\ncpp_quote(\"#else\")\ncpp_quote(\"#include <mmreg.h>\")\ncpp_quote(\"#endif\")\n\ninterface IXAudio2Voice;\n\ntypedef enum XAUDIO2_WINDOWS_PROCESSOR_SPECIFIER\n{\n    Processor1  = 0x00000001,\n    Processor2  = 0x00000002,\n    Processor3  = 0x00000004,\n    Processor4  = 0x00000008,\n    Processor5  = 0x00000010,\n    Processor6  = 0x00000020,\n    Processor7  = 0x00000040,\n    Processor8  = 0x00000080,\n    Processor9  = 0x00000100,\n    Processor10 = 0x00000200,\n    Processor11 = 0x00000400,\n    Processor12 = 0x00000800,\n    Processor13 = 0x00001000,\n    Processor14 = 0x00002000,\n    Processor15 = 0x00004000,\n    Processor16 = 0x00008000,\n    Processor17 = 0x00010000,\n    Processor18 = 0x00020000,\n    Processor19 = 0x00040000,\n    Processor20 = 0x00080000,\n    Processor21 = 0x00100000,\n    Processor22 = 0x00200000,\n    Processor23 = 0x00400000,\n    Processor24 = 0x00800000,\n    Processor25 = 0x01000000,\n    Processor26 = 0x02000000,\n    Processor27 = 0x04000000,\n    Processor28 = 0x08000000,\n    Processor29 = 0x10000000,\n    Processor30 = 0x20000000,\n    Processor31 = 0x40000000,\n    Processor32 = 0x80000000,\n    XAUDIO2_ANY_PROCESSOR = 0xffffffff,\n    XAUDIO2_DEFAULT_PROCESSOR = XAUDIO2_ANY_PROCESSOR\n} XAUDIO2_WINDOWS_PROCESSOR_SPECIFIER, XAUDIO2_PROCESSOR;\n\ntypedef struct XAUDIO2_PERFORMANCE_DATA\n{\n    UINT64 AudioCyclesSinceLastQuery;\n    UINT64 TotalCyclesSinceLastQuery;\n    UINT32 MinimumCyclesPerQuantum;\n    UINT32 MaximumCyclesPerQuantum;\n    UINT32 MemoryUsageInBytes;\n    UINT32 CurrentLatencyInSamples;\n    UINT32 GlitchesSinceEngineStarted;\n    UINT32 ActiveSourceVoiceCount;\n    UINT32 TotalSourceVoiceCount;\n    UINT32 ActiveSubmixVoiceCount;\n    UINT32 ActiveResamplerCount;\n    UINT32 ActiveMatrixMixCount;\n    UINT32 ActiveXmaSourceVoices;\n    UINT32 ActiveXmaStreams;\n} XAUDIO2_PERFORMANCE_DATA;\n\ntypedef struct XAUDIO22_PERFORMANCE_DATA\n{\n    UINT64 AudioCyclesSinceLastQuery;\n    UINT64 TotalCyclesSinceLastQuery;\n    UINT32 MinimumCyclesPerQuantum;\n    UINT32 MaximumCyclesPerQuantum;\n    UINT32 MemoryUsageInBytes;\n    UINT32 CurrentLatencyInSamples;\n    UINT32 GlitchesSinceEngineStarted;\n    UINT32 ActiveSourceVoiceCount;\n    UINT32 TotalSourceVoiceCount;\n    UINT32 ActiveSubmixVoiceCount;\n    UINT32 TotalSubmixVoiceCount;\n    UINT32 ActiveXmaSourceVoices;\n    UINT32 ActiveXmaStreams;\n} XAUDIO22_PERFORMANCE_DATA;\n\ntypedef struct XAUDIO20_PERFORMANCE_DATA\n{\n    UINT64 AudioCyclesSinceLastQuery;\n    UINT64 TotalCyclesSinceLastQuery;\n    UINT32 MinimumCyclesPerQuantum;\n    UINT32 MaximumCyclesPerQuantum;\n    UINT32 MemoryUsageInBytes;\n    UINT32 CurrentLatencyInSamples;\n    UINT32 GlitchesSinceLastQuery;\n    UINT32 ActiveSourceVoiceCount;\n    UINT32 TotalSourceVoiceCount;\n    UINT32 ActiveSubmixVoiceCount;\n    UINT32 TotalSubmixVoiceCount;\n    UINT32 ActiveXmaSourceVoices;\n    UINT32 ActiveXmaStreams;\n} XAUDIO20_PERFORMANCE_DATA;\n\ntypedef enum XAUDIO2_DEVICE_ROLE\n{\n    NotDefaultDevice            = 0x0,\n    DefaultConsoleDevice        = 0x1,\n    DefaultMultimediaDevice     = 0x2,\n    DefaultCommunicationsDevice = 0x4,\n    DefaultGameDevice           = 0x8,\n    GlobalDefaultDevice         = 0xf,\n    InvalidDeviceRole = ~GlobalDefaultDevice\n} XAUDIO2_DEVICE_ROLE;\n\ntypedef struct XAUDIO2_DEVICE_DETAILS\n{\n    WCHAR DeviceID[256];\n    WCHAR DisplayName[256];\n    XAUDIO2_DEVICE_ROLE Role;\n    WAVEFORMATEXTENSIBLE OutputFormat;\n} XAUDIO2_DEVICE_DETAILS;\n\ntypedef struct XAUDIO27_VOICE_DETAILS\n{\n    UINT32 CreationFlags;\n    UINT32 InputChannels;\n    UINT32 InputSampleRate;\n} XAUDIO27_VOICE_DETAILS;\n\ntypedef struct XAUDIO2_VOICE_DETAILS\n{\n    UINT32 CreationFlags;\n    UINT32 ActiveFlags;\n    UINT32 InputChannels;\n    UINT32 InputSampleRate;\n} XAUDIO2_VOICE_DETAILS;\n\ntypedef struct XAUDIO2_SEND_DESCRIPTOR\n{\n    UINT32 Flags;\n    IXAudio2Voice* pOutputVoice;\n} XAUDIO2_SEND_DESCRIPTOR;\n\n/* XAudio2 2.3's XAUDIO2_VOICE_SENDS struct */\ntypedef struct XAUDIO23_VOICE_SENDS\n{\n    UINT32 OutputCount;\n    IXAudio2Voice **pOutputVoices;\n} XAUDIO23_VOICE_SENDS;\n\ntypedef struct XAUDIO2_VOICE_SENDS\n{\n    UINT32 SendCount;\n    XAUDIO2_SEND_DESCRIPTOR* pSends;\n} XAUDIO2_VOICE_SENDS;\n\ntypedef struct XAUDIO2_EFFECT_DESCRIPTOR\n{\n    IUnknown* pEffect;\n    BOOL InitialState;\n    UINT32 OutputChannels;\n} XAUDIO2_EFFECT_DESCRIPTOR;\n\ntypedef struct XAUDIO2_EFFECT_CHAIN\n{\n    UINT32 EffectCount;\n    XAUDIO2_EFFECT_DESCRIPTOR* pEffectDescriptors;\n} XAUDIO2_EFFECT_CHAIN;\n\nconst UINT32 XAUDIO2_MAX_BUFFER_BYTES = 0x80000000;\nconst UINT32 XAUDIO2_MAX_QUEUED_BUFFERS = 64;\nconst UINT32 XAUDIO2_MAX_BUFFERS_SYSTEM = 2;\nconst UINT32 XAUDIO2_MAX_AUDIO_CHANNELS = 64;\nconst UINT32 XAUDIO2_MIN_SAMPLE_RATE = 1000;\nconst UINT32 XAUDIO2_MAX_SAMPLE_RATE = 200000;\nconst float XAUDIO2_MAX_VOLUME_LEVEL = 16777216.0;\nconst float XAUDIO2_MIN_FREQ_RATIO = (1/1024.0);\nconst float XAUDIO2_MAX_FREQ_RATIO = 1024.0;\nconst float XAUDIO2_DEFAULT_FREQ_RATIO = 2.0;\nconst float XAUDIO2_MAX_FILTER_ONEOVERQ = 1.5;\nconst float XAUDIO2_MAX_FILTER_FREQUENCY = 1.0;\nconst UINT32 XAUDIO2_MAX_LOOP_COUNT = 254;\nconst UINT32 XAUDIO20_MAX_LOOP_COUNT = 0x100000; /* xaudio 2.0 */\n\nconst UINT32 XAUDIO2_COMMIT_NOW = 0;\nconst UINT32 XAUDIO2_COMMIT_ALL = 0;\nconst UINT32 XAUDIO2_INVALID_OPSET = 0xffffffff;\nconst UINT32 XAUDIO2_NO_LOOP_REGION = 0;\nconst UINT32 XAUDIO2_LOOP_INFINITE = 255;\nconst UINT32 XAUDIO20_LOOP_INFINITE = ((UINT)-1); /* xaudio 2.0 */\nconst UINT32 XAUDIO2_DEFAULT_CHANNELS = 0;\nconst UINT32 XAUDIO2_DEFAULT_SAMPLERATE = 0;\n\n[\n    object,\n    local\n]\ninterface IXAudio2EngineCallback\n{\n    void OnProcessingPassStart();\n\n    void OnProcessingPassEnd();\n\n    void OnCriticalError([in] HRESULT Error);\n}\n\ntypedef enum XAUDIO2_FILTER_TYPE\n{\n    LowPassFilter,\n    BandPassFilter,\n    HighPassFilter,\n    NotchFilter\n} XAUDIO2_FILTER_TYPE;\n\ntypedef struct XAUDIO2_FILTER_PARAMETERS\n{\n    XAUDIO2_FILTER_TYPE Type;\n    float Frequency;\n    float OneOverQ;\n} XAUDIO2_FILTER_PARAMETERS;\n\n/* XAudio 2.0's IXAudio2Voice */\n/* XAudio2 2.0's IXAudio2Voice interface. Actually called\n * IXAudio2Voice in the Mar 2008 DX SDK */\n[\n    object,\n    local\n]\ninterface IXAudio20Voice\n{\n    void GetVoiceDetails([out] XAUDIO27_VOICE_DETAILS* pVoiceDetails);\n\n    HRESULT SetOutputVoices([in] const XAUDIO23_VOICE_SENDS* pSendList);\n\n    HRESULT SetEffectChain([in] const XAUDIO2_EFFECT_CHAIN* pEffectChain);\n\n    HRESULT EnableEffect(\n        [in] UINT32 EffectIndex,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    HRESULT DisableEffect(\n        [in] UINT32 EffectIndex,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetEffectState(\n        [in] UINT32 EffectIndex,\n        [out] BOOL* pEnabled);\n\n    HRESULT SetEffectParameters(\n        [in] UINT32 EffectIndex,\n        [in] const void* pParameters,\n        [in] UINT32 ParametersByteSize,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    HRESULT GetEffectParameters(\n        [in] UINT32 EffectIndex,\n        [out] void* pParameters,\n        [in] UINT32 ParametersByteSize);\n\n    HRESULT SetFilterParameters(\n        [in] const XAUDIO2_FILTER_PARAMETERS* pParameters,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetFilterParameters([out] XAUDIO2_FILTER_PARAMETERS* pParameters);\n\n    HRESULT SetVolume(\n        [in] float Volume,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetVolume([out] float* pVolume);\n\n    HRESULT SetChannelVolumes(\n        [in] UINT32 Channels,\n        [in, size_is(Channels)] const float* pVolumes,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetChannelVolumes(\n        [in] UINT32 Channels,\n        [out, size_is(Channels)] float* pVolumes);\n\n    HRESULT SetOutputMatrix(\n        [in] IXAudio2Voice* pDestinationVoice,\n        [in] UINT32 SourceChannels,\n        [in] UINT32 DestinationChannels,\n        [in, size_is(SourceChannels * DestinationChannels)] const float* pLevelMatrix,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    HRESULT GetOutputMatrix(\n        [in] IXAudio2Voice* pDestinationVoice,\n        [in] UINT32 SourceChannels,\n        [in] UINT32 DestinationChannels,\n        [out, size_is(SourceChannels * DestinationChannels)] float* pLevelMatrix);\n\n    void DestroyVoice();\n}\n\n/* XAudio 2.3's IXAudio2Voice */\n/* XAudio2 2.3's IXAudio2Voice interface. Actually called\n * IXAudio2Voice in the Nov 2008 DX SDK */\n[\n    object,\n    local\n]\ninterface IXAudio23Voice\n{\n    void GetVoiceDetails([out] XAUDIO27_VOICE_DETAILS* pVoiceDetails);\n\n    HRESULT SetOutputVoices([in] const XAUDIO23_VOICE_SENDS* pSendList);\n\n    HRESULT SetEffectChain([in] const XAUDIO2_EFFECT_CHAIN* pEffectChain);\n\n    HRESULT EnableEffect(\n        [in] UINT32 EffectIndex,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    HRESULT DisableEffect(\n        [in] UINT32 EffectIndex,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetEffectState(\n        [in] UINT32 EffectIndex,\n        [out] BOOL* pEnabled);\n\n    HRESULT SetEffectParameters(\n        [in] UINT32 EffectIndex,\n        [in] const void* pParameters,\n        [in] UINT32 ParametersByteSize,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    HRESULT GetEffectParameters(\n        [in] UINT32 EffectIndex,\n        [out] void* pParameters,\n        [in] UINT32 ParametersByteSize);\n\n    HRESULT SetFilterParameters(\n        [in] const XAUDIO2_FILTER_PARAMETERS* pParameters,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetFilterParameters([out] XAUDIO2_FILTER_PARAMETERS* pParameters);\n\n    HRESULT SetVolume(\n        [in] float Volume,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetVolume([out] float* pVolume);\n\n    HRESULT SetChannelVolumes(\n        [in] UINT32 Channels,\n        [in, size_is(Channels)] const float* pVolumes,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetChannelVolumes(\n        [in] UINT32 Channels,\n        [out, size_is(Channels)] float* pVolumes);\n\n    HRESULT SetOutputMatrix(\n        [in] IXAudio2Voice* pDestinationVoice,\n        [in] UINT32 SourceChannels,\n        [in] UINT32 DestinationChannels,\n        [in, size_is(SourceChannels * DestinationChannels)] const float* pLevelMatrix,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetOutputMatrix(\n        [in] IXAudio2Voice* pDestinationVoice,\n        [in] UINT32 SourceChannels,\n        [in] UINT32 DestinationChannels,\n        [out, size_is(SourceChannels * DestinationChannels)] float* pLevelMatrix);\n\n    void DestroyVoice();\n}\n\n/* XAudio 2.7's IXAudio2Voice */\n/* XAudio2 2.7's IXAudio2Voice interface. Actually called\n * IXAudio2Voice in the Jun 2010 DX SDK */\n[\n    object,\n    local\n]\ninterface IXAudio27Voice\n{\n    void GetVoiceDetails([out] XAUDIO27_VOICE_DETAILS* pVoiceDetails);\n\n    HRESULT SetOutputVoices([in] const XAUDIO2_VOICE_SENDS* pSendList);\n\n    HRESULT SetEffectChain([in] const XAUDIO2_EFFECT_CHAIN* pEffectChain);\n\n    HRESULT EnableEffect(\n        [in] UINT32 EffectIndex,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    HRESULT DisableEffect(\n        [in] UINT32 EffectIndex,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetEffectState(\n        [in] UINT32 EffectIndex,\n        [out] BOOL* pEnabled);\n\n    HRESULT SetEffectParameters(\n        [in] UINT32 EffectIndex,\n        [in] const void* pParameters,\n        [in] UINT32 ParametersByteSize,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    HRESULT GetEffectParameters(\n        [in] UINT32 EffectIndex,\n        [out] void* pParameters,\n        [in] UINT32 ParametersByteSize);\n\n    HRESULT SetFilterParameters(\n        [in] const XAUDIO2_FILTER_PARAMETERS* pParameters,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetFilterParameters([out] XAUDIO2_FILTER_PARAMETERS* pParameters);\n\n    HRESULT SetOutputFilterParameters(\n        [in] IXAudio2Voice* pDestinationVoice,\n        [in] const XAUDIO2_FILTER_PARAMETERS* pParameters,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetOutputFilterParameters(\n        [in] IXAudio2Voice* pDestinationVoice,\n        [out] XAUDIO2_FILTER_PARAMETERS* pParameters);\n\n    HRESULT SetVolume(\n        [in] float Volume,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetVolume([out] float* pVolume);\n\n    HRESULT SetChannelVolumes(\n        [in] UINT32 Channels,\n        [in, size_is(Channels)] const float* pVolumes,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetChannelVolumes(\n        [in] UINT32 Channels,\n        [out, size_is(Channels)] float* pVolumes);\n\n    HRESULT SetOutputMatrix(\n        [in] IXAudio2Voice* pDestinationVoice,\n        [in] UINT32 SourceChannels,\n        [in] UINT32 DestinationChannels,\n        [in, size_is(SourceChannels * DestinationChannels)] const float* pLevelMatrix,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetOutputMatrix(\n        [in] IXAudio2Voice* pDestinationVoice,\n        [in] UINT32 SourceChannels,\n        [in] UINT32 DestinationChannels,\n        [out, size_is(SourceChannels * DestinationChannels)] float* pLevelMatrix);\n\n    void DestroyVoice();\n}\n\n[\n    object,\n    local\n]\ninterface IXAudio2Voice\n{\n    void GetVoiceDetails([out] XAUDIO2_VOICE_DETAILS* pVoiceDetails);\n\n    HRESULT SetOutputVoices([in] const XAUDIO2_VOICE_SENDS* pSendList);\n\n    HRESULT SetEffectChain([in] const XAUDIO2_EFFECT_CHAIN* pEffectChain);\n\n    HRESULT EnableEffect(\n        [in] UINT32 EffectIndex,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    HRESULT DisableEffect(\n        [in] UINT32 EffectIndex,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetEffectState(\n        [in] UINT32 EffectIndex,\n        [out] BOOL* pEnabled);\n\n    HRESULT SetEffectParameters(\n        [in] UINT32 EffectIndex,\n        [in] const void* pParameters,\n        [in] UINT32 ParametersByteSize,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    HRESULT GetEffectParameters(\n        [in] UINT32 EffectIndex,\n        [out] void* pParameters,\n        [in] UINT32 ParametersByteSize);\n\n    HRESULT SetFilterParameters(\n        [in] const XAUDIO2_FILTER_PARAMETERS* pParameters,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetFilterParameters([out] XAUDIO2_FILTER_PARAMETERS* pParameters);\n\n    HRESULT SetOutputFilterParameters(\n        [in] IXAudio2Voice* pDestinationVoice,\n        [in] const XAUDIO2_FILTER_PARAMETERS* pParameters,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetOutputFilterParameters(\n        [in] IXAudio2Voice* pDestinationVoice,\n        [out] XAUDIO2_FILTER_PARAMETERS* pParameters);\n\n    HRESULT SetVolume(\n        [in] float Volume,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetVolume([out] float* pVolume);\n\n    HRESULT SetChannelVolumes(\n        [in] UINT32 Channels,\n        [in, size_is(Channels)] const float* pVolumes,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetChannelVolumes(\n        [in] UINT32 Channels,\n        [out, size_is(Channels)] float* pVolumes);\n\n    HRESULT SetOutputMatrix(\n        [in] IXAudio2Voice* pDestinationVoice,\n        [in] UINT32 SourceChannels,\n        [in] UINT32 DestinationChannels,\n        [in, size_is(SourceChannels * DestinationChannels)] const float* pLevelMatrix,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetOutputMatrix(\n        [in] IXAudio2Voice* pDestinationVoice,\n        [in] UINT32 SourceChannels,\n        [in] UINT32 DestinationChannels,\n        [out, size_is(SourceChannels * DestinationChannels)] float* pLevelMatrix);\n\n    void DestroyVoice();\n}\n\ntypedef struct XAUDIO2_BUFFER\n{\n    UINT32 Flags;\n    UINT32 AudioBytes;\n    const BYTE* pAudioData;\n    UINT32 PlayBegin;\n    UINT32 PlayLength;\n    UINT32 LoopBegin;\n    UINT32 LoopLength;\n    UINT32 LoopCount;\n    void* pContext;\n} XAUDIO2_BUFFER;\n\ntypedef struct XAUDIO2_BUFFER_WMA\n{\n    const UINT32* pDecodedPacketCumulativeBytes;\n    UINT32 PacketCount;\n} XAUDIO2_BUFFER_WMA;\n\ntypedef struct XAUDIO2_VOICE_STATE\n{\n    void* pCurrentBufferContext;\n    UINT32 BuffersQueued;\n    UINT64 SamplesPlayed;\n} XAUDIO2_VOICE_STATE;\n\n[\n    local\n]\n/* XAudio2 2.0's IXAudio2SourceVoice interface. Actually called\n * IXAudio2SourceVoice in the Mar 2008 DX SDK */\ninterface IXAudio20SourceVoice : IXAudio20Voice\n{\n    HRESULT Start(\n        [in, defaultvalue(0)] UINT32 Flags,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    HRESULT Stop(\n        [in, defaultvalue(0)] UINT32 Flags,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    HRESULT SubmitSourceBuffer(\n        [in] const XAUDIO2_BUFFER* pBuffer,\n        [in, defaultvalue(NULL)] const XAUDIO2_BUFFER_WMA* pBufferWMA);\n\n    HRESULT FlushSourceBuffers();\n\n    HRESULT Discontinuity();\n\n    HRESULT ExitLoop([in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetState([out] XAUDIO2_VOICE_STATE* pVoiceState);\n\n    HRESULT SetFrequencyRatio(\n        [in] float Ratio,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetFrequencyRatio([out] float* pRatio);\n}\n\n[\n    local\n]\n/* XAudio2 2.3's IXAudio2SourceVoice interface. Actually called\n * IXAudio2SourceVoice in the Nov 2008 DX SDK */\ninterface IXAudio23SourceVoice : IXAudio23Voice\n{\n    HRESULT Start(\n        [in, defaultvalue(0)] UINT32 Flags,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    HRESULT Stop(\n        [in, defaultvalue(0)] UINT32 Flags,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    HRESULT SubmitSourceBuffer(\n        [in] const XAUDIO2_BUFFER* pBuffer,\n        [in, defaultvalue(NULL)] const XAUDIO2_BUFFER_WMA* pBufferWMA);\n\n    HRESULT FlushSourceBuffers();\n\n    HRESULT Discontinuity();\n\n    HRESULT ExitLoop([in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetState([out] XAUDIO2_VOICE_STATE* pVoiceState);\n\n    HRESULT SetFrequencyRatio(\n        [in] float Ratio,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetFrequencyRatio([out] float* pRatio);\n}\n\n[\n    local\n]\n/* XAudio2 2.7's IXAudio2SourceVoice interface. Actually called\n * IXAudio2SourceVoice in the Jun 2010 DX SDK */\ninterface IXAudio27SourceVoice : IXAudio27Voice\n{\n    HRESULT Start(\n        [in, defaultvalue(0)] UINT32 Flags,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    HRESULT Stop(\n        [in, defaultvalue(0)] UINT32 Flags,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    HRESULT SubmitSourceBuffer(\n        [in] const XAUDIO2_BUFFER* pBuffer,\n        [in, defaultvalue(NULL)] const XAUDIO2_BUFFER_WMA* pBufferWMA);\n\n    HRESULT FlushSourceBuffers();\n\n    HRESULT Discontinuity();\n\n    HRESULT ExitLoop([in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetState([out] XAUDIO2_VOICE_STATE* pVoiceState);\n\n    HRESULT SetFrequencyRatio(\n        [in] float Ratio,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetFrequencyRatio([out] float* pRatio);\n\n    HRESULT SetSourceSampleRate([in] UINT32 NewSourceSampleRate);\n}\n\n[\n    local\n]\n/* XAudio2 2.8's IXAudio2SourceVoice interface. */\ninterface IXAudio2SourceVoice : IXAudio2Voice\n{\n    HRESULT Start(\n        [in, defaultvalue(0)] UINT32 Flags,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    HRESULT Stop(\n        [in, defaultvalue(0)] UINT32 Flags,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    HRESULT SubmitSourceBuffer(\n        [in] const XAUDIO2_BUFFER* pBuffer,\n        [in, defaultvalue(NULL)] const XAUDIO2_BUFFER_WMA* pBufferWMA);\n\n    HRESULT FlushSourceBuffers();\n\n    HRESULT Discontinuity();\n\n    HRESULT ExitLoop([in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetState([out] XAUDIO2_VOICE_STATE* pVoiceState, [in, defaultvalue(0)] UINT32 Flags);\n\n    HRESULT SetFrequencyRatio(\n        [in] float Ratio,\n        [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet);\n\n    void GetFrequencyRatio([out] float* pRatio);\n\n    HRESULT SetSourceSampleRate([in] UINT32 NewSourceSampleRate);\n}\n\n[\n    local\n]\n/* XAudio2 2.0's IXAudio2SubmixVoice interface. Actually called\n * IXAudio2SubmixVoice in the Mar 2008 DX SDK */\ninterface IXAudio20SubmixVoice : IXAudio20Voice\n{\n}\n\n[\n    local\n]\n/* XAudio2 2.3's IXAudio2SubmixVoice interface. Actually called\n * IXAudio2SubmixVoice in the Nov 2008 DX SDK */\ninterface IXAudio23SubmixVoice : IXAudio23Voice\n{\n}\n\n[\n    local\n]\n/* XAudio2 2.7's IXAudio2SubmixVoice interface. Actually called\n * IXAudio2SubmixVoice in the Jun 2010 DX SDK */\ninterface IXAudio27SubmixVoice : IXAudio27Voice\n{\n}\n\n[\n    local\n]\ninterface IXAudio2SubmixVoice : IXAudio2Voice\n{\n}\n\n[\n    local\n]\n/* XAudio2 2.0's IXAudio2MasteringVoice interface. Actually called\n * IXAudio2MasteringVoice in the Mar 2008 DX SDK */\ninterface IXAudio20MasteringVoice : IXAudio20Voice\n{\n}\n\n[\n    local\n]\n/* XAudio2 2.3's IXAudio2MasteringVoice interface. Actually called\n * IXAudio2MasteringVoice in the Nov 2008 DX SDK */\ninterface IXAudio23MasteringVoice : IXAudio23Voice\n{\n}\n\n[\n    local\n]\n/* XAudio2 2.7's IXAudio2MasteringVoice interface. Actually called\n * IXAudio2MasteringVoice in the Jun 2010 DX SDK */\ninterface IXAudio27MasteringVoice : IXAudio27Voice\n{\n}\n\n[\n    local\n]\ninterface IXAudio2MasteringVoice : IXAudio2Voice\n{\n    /* not present in XAudio2 2.7 */\n    void GetChannelMask([out] DWORD *pChannelMask);\n}\n\n[\n    object,\n    local\n]\ninterface IXAudio20VoiceCallback\n{\n    void OnVoiceProcessingPassStart();\n\n    void OnVoiceProcessingPassEnd();\n\n    void OnStreamEnd();\n\n    void OnBufferStart([in] void* pBufferContext);\n\n    void OnBufferEnd([in] void* pBufferContext);\n\n    void OnLoopEnd([in] void* pBufferContext);\n\n    void OnVoiceError(\n        [in] void* pBuffercontext,\n        [in] HRESULT Error);\n}\n\n[\n    object,\n    local\n]\ninterface IXAudio2VoiceCallback\n{\n    void OnVoiceProcessingPassStart([in] UINT32 BytesRequired);\n\n    void OnVoiceProcessingPassEnd();\n\n    void OnStreamEnd();\n\n    void OnBufferStart([in] void* pBufferContext);\n\n    void OnBufferEnd([in] void* pBufferContext);\n\n    void OnLoopEnd([in] void* pBufferContext);\n\n    void OnVoiceError(\n        [in] void* pBuffercontext,\n        [in] HRESULT Error);\n}\n\ntypedef struct XAUDIO2_DEBUG_CONFIGURATION\n{\n    UINT32 TraceMask;\n    UINT32 BreakMask;\n    BOOL LogThreadID;\n    BOOL LogFileline;\n    BOOL LogFunctionName;\n    BOOL LogTiming;\n} XAUDIO2_DEBUG_CONFIGURATION;\n\n[\n    object,\n    uuid(8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb), /* all versions before 28 share IID_IXAudio */\n]\n/* XAudio2 2.0's IXAudio2 interface. Actually called IXAudio2 in the Mar 2008\n * DX SDK */\ninterface IXAudio20 : IUnknown\n{\n    HRESULT GetDeviceCount([out] UINT32* pCount);\n\n    HRESULT GetDeviceDetails(\n        [in] UINT32 Index,\n        [out] XAUDIO2_DEVICE_DETAILS* pDeviceDetails);\n\n    HRESULT Initialize(\n        [in, defaultvalue(0)] UINT32 Flags,\n        [in, defaultvalue(XAUDIO2_DEFAULT_PROCESSOR)] XAUDIO2_PROCESSOR XAudio2Processor);\n\n    HRESULT RegisterForCallbacks([in] IXAudio2EngineCallback* pCallback);\n\n    void UnregisterForCallbacks([in] IXAudio2EngineCallback* pCallback);\n\n    HRESULT CreateSourceVoice(\n        [out] IXAudio2SourceVoice** ppSourceVoice,\n        [in] const WAVEFORMATEX* pSourceFormat,\n        [in, defaultvalue(0)] UINT32 Flags,\n        [in, defaultvalue(XAUDIO2_DEFAULT_FREQ_RATIO)] float MaxFrequencyRatio,\n        [in, defaultvalue(NULL)] IXAudio2VoiceCallback* pCallback,\n        [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList,\n        [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain);\n\n    HRESULT CreateSubmixVoice(\n        [out] IXAudio2SubmixVoice** ppSubmixVoice,\n        [in] UINT32 InputChannels,\n        [in] UINT32 InputSampleRate,\n        [in, defaultvalue(0)] UINT32 Flags,\n        [in, defaultvalue(0)] UINT32 ProcessingStage,\n        [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList,\n        [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain);\n\n    HRESULT CreateMasteringVoice(\n        [out] IXAudio2MasteringVoice** ppMasteringVoice,\n        [in, defaultvalue(XAUDIO2_DEFAULT_CHANNELS)] UINT32 InputChannels,\n        [in, defaultvalue(XAUDIO2_DEFAULT_SAMPLERATE)] UINT32 InputSampleRate,\n        [in, defaultvalue(0)] UINT32 Flags,\n        [in, defaultvalue(0)] UINT32 DeviceIndex,\n        [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain);\n\n    HRESULT StartEngine();\n\n    void StopEngine();\n\n    HRESULT CommitChanges([in] UINT32 OperationSet);\n\n    void GetPerformanceData([out] XAUDIO20_PERFORMANCE_DATA* pPerfData);\n\n    [local] void SetDebugConfiguration(\n        [in] const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration,\n        [in, defaultvalue(NULL)] void* pReserved);\n}\n\n[\n    object,\n    uuid(8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb), /* all versions before 28 share IID_IXAudio */\n]\n/* XAudio2 2.2's IXAudio2 interface. Actually called IXAudio2 in the Jun 2010\n * DX SDK */\ninterface IXAudio22 : IUnknown\n{\n    HRESULT GetDeviceCount([out] UINT32* pCount);\n\n    HRESULT GetDeviceDetails(\n        [in] UINT32 Index,\n        [out] XAUDIO2_DEVICE_DETAILS* pDeviceDetails);\n\n    HRESULT Initialize(\n        [in, defaultvalue(0)] UINT32 Flags,\n        [in, defaultvalue(XAUDIO2_DEFAULT_PROCESSOR)] XAUDIO2_PROCESSOR XAudio2Processor);\n\n    HRESULT RegisterForCallbacks([in] IXAudio2EngineCallback* pCallback);\n\n    void UnregisterForCallbacks([in] IXAudio2EngineCallback* pCallback);\n\n    HRESULT CreateSourceVoice(\n        [out] IXAudio2SourceVoice** ppSourceVoice,\n        [in] const WAVEFORMATEX* pSourceFormat,\n        [in, defaultvalue(0)] UINT32 Flags,\n        [in, defaultvalue(XAUDIO2_DEFAULT_FREQ_RATIO)] float MaxFrequencyRatio,\n        [in, defaultvalue(NULL)] IXAudio2VoiceCallback* pCallback,\n        [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList,\n        [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain);\n\n    HRESULT CreateSubmixVoice(\n        [out] IXAudio2SubmixVoice** ppSubmixVoice,\n        [in] UINT32 InputChannels,\n        [in] UINT32 InputSampleRate,\n        [in, defaultvalue(0)] UINT32 Flags,\n        [in, defaultvalue(0)] UINT32 ProcessingStage,\n        [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList,\n        [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain);\n\n    HRESULT CreateMasteringVoice(\n        [out] IXAudio2MasteringVoice** ppMasteringVoice,\n        [in, defaultvalue(XAUDIO2_DEFAULT_CHANNELS)] UINT32 InputChannels,\n        [in, defaultvalue(XAUDIO2_DEFAULT_SAMPLERATE)] UINT32 InputSampleRate,\n        [in, defaultvalue(0)] UINT32 Flags,\n        [in, defaultvalue(0)] UINT32 DeviceIndex,\n        [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain);\n\n    HRESULT StartEngine();\n\n    void StopEngine();\n\n    HRESULT CommitChanges([in] UINT32 OperationSet);\n\n    void GetPerformanceData([out] XAUDIO22_PERFORMANCE_DATA* pPerfData);\n\n    [local] void SetDebugConfiguration(\n        [in] const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration,\n        [in, defaultvalue(NULL)] void* pReserved);\n}\n\n[\n    object,\n    uuid(8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb),\n]\n/* XAudio2 2.7's IXAudio2 interface. Actually called IXAudio2 in the Jun 2010\n * DX SDK */\ninterface IXAudio27 : IUnknown\n{\n    HRESULT GetDeviceCount([out] UINT32* pCount);\n\n    HRESULT GetDeviceDetails(\n        [in] UINT32 Index,\n        [out] XAUDIO2_DEVICE_DETAILS* pDeviceDetails);\n\n    HRESULT Initialize(\n        [in, defaultvalue(0)] UINT32 Flags,\n        [in, defaultvalue(XAUDIO2_DEFAULT_PROCESSOR)] XAUDIO2_PROCESSOR XAudio2Processor);\n\n    HRESULT RegisterForCallbacks([in] IXAudio2EngineCallback* pCallback);\n\n    void UnregisterForCallbacks([in] IXAudio2EngineCallback* pCallback);\n\n    HRESULT CreateSourceVoice(\n        [out] IXAudio2SourceVoice** ppSourceVoice,\n        [in] const WAVEFORMATEX* pSourceFormat,\n        [in, defaultvalue(0)] UINT32 Flags,\n        [in, defaultvalue(XAUDIO2_DEFAULT_FREQ_RATIO)] float MaxFrequencyRatio,\n        [in, defaultvalue(NULL)] IXAudio2VoiceCallback* pCallback,\n        [in, defaultvalue(NULL)] const XAUDIO2_VOICE_SENDS* pSendList,\n        [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain);\n\n    HRESULT CreateSubmixVoice(\n        [out] IXAudio2SubmixVoice** ppSubmixVoice,\n        [in] UINT32 InputChannels,\n        [in] UINT32 InputSampleRate,\n        [in, defaultvalue(0)] UINT32 Flags,\n        [in, defaultvalue(0)] UINT32 ProcessingStage,\n        [in, defaultvalue(NULL)] const XAUDIO2_VOICE_SENDS* pSendList,\n        [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain);\n\n    HRESULT CreateMasteringVoice(\n        [out] IXAudio2MasteringVoice** ppMasteringVoice,\n        [in, defaultvalue(XAUDIO2_DEFAULT_CHANNELS)] UINT32 InputChannels,\n        [in, defaultvalue(XAUDIO2_DEFAULT_SAMPLERATE)] UINT32 InputSampleRate,\n        [in, defaultvalue(0)] UINT32 Flags,\n        [in, defaultvalue(0)] UINT32 DeviceIndex,\n        [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain);\n\n    HRESULT StartEngine();\n\n    void StopEngine();\n\n    HRESULT CommitChanges([in] UINT32 OperationSet);\n\n    void GetPerformanceData([out] XAUDIO2_PERFORMANCE_DATA* pPerfData);\n\n    [local] void SetDebugConfiguration(\n        [in] const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration,\n        [in, defaultvalue(NULL)] void* pReserved);\n}\n\n/* XAudio2 2.8's IXAudio2 is identical to 2.9's */\ncpp_quote(\"DEFINE_GUID(IID_IXAudio28, 0x60d8dac8, 0x5aa1, 0x4e8e, 0xb5, 0x97, 0x2f, 0x5e, 0x28, 0x83, 0xd4, 0x84);\")\n\n[\n    object,\n    uuid(2b02e3cf-2e0b-4ec3-be45-1b2a3fe7210d)\n]\n/* XAudio2 2.9's IXAudio2 interface. */\ninterface IXAudio2 : IUnknown\n{\n    HRESULT RegisterForCallbacks([in] IXAudio2EngineCallback* pCallback);\n\n    void UnregisterForCallbacks([in] IXAudio2EngineCallback* pCallback);\n\n    HRESULT CreateSourceVoice(\n        [out] IXAudio2SourceVoice** ppSourceVoice,\n        [in] const WAVEFORMATEX* pSourceFormat,\n        [in, defaultvalue(0)] UINT32 Flags,\n        [in, defaultvalue(XAUDIO2_DEFAULT_FREQ_RATIO)] float MaxFrequencyRatio,\n        [in, defaultvalue(NULL)] IXAudio2VoiceCallback* pCallback,\n        [in, defaultvalue(NULL)] const XAUDIO2_VOICE_SENDS* pSendList,\n        [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain);\n\n    HRESULT CreateSubmixVoice(\n        [out] IXAudio2SubmixVoice** ppSubmixVoice,\n        [in] UINT32 InputChannels,\n        [in] UINT32 InputSampleRate,\n        [in, defaultvalue(0)] UINT32 Flags,\n        [in, defaultvalue(0)] UINT32 ProcessingStage,\n        [in, defaultvalue(NULL)] const XAUDIO2_VOICE_SENDS* pSendList,\n        [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain);\n\n    HRESULT CreateMasteringVoice(\n        [out] IXAudio2MasteringVoice** ppMasteringVoice,\n        [in, defaultvalue(XAUDIO2_DEFAULT_CHANNELS)] UINT32 InputChannels,\n        [in, defaultvalue(XAUDIO2_DEFAULT_SAMPLERATE)] UINT32 InputSampleRate,\n        [in, defaultvalue(0)] UINT32 Flags,\n        [in, defaultvalue(NULL)] LPCWSTR DeviceId,\n        [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain,\n        [in, defaultvalue(AudioCategory_GameEffects)] AUDIO_STREAM_CATEGORY StreamCategory);\n\n    HRESULT StartEngine();\n\n    void StopEngine();\n\n    HRESULT CommitChanges([in] UINT32 OperationSet);\n\n    void GetPerformanceData([out] XAUDIO2_PERFORMANCE_DATA* pPerfData);\n\n    [local] void SetDebugConfiguration(\n        [in] const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration,\n        [in, defaultvalue(NULL)] void* pReserved);\n}\n\nconst UINT32 XAUDIO2_DEBUG_ENGINE = 1;\nconst UINT32 XAUDIO2_VOICE_NOPITCH = 2;\nconst UINT32 XAUDIO2_VOICE_NOSRC = 4;\nconst UINT32 XAUDIO2_VOICE_USEFILTER = 8;\nconst UINT32 XAUDIO2_VOICE_MUSIC = 16;\nconst UINT32 XAUDIO2_PLAY_TAILS = 32;\nconst UINT32 XAUDIO2_END_OF_STREAM = 64;\nconst UINT32 XAUDIO2_SEND_USEFILTER = 128;\nconst UINT32 XAUDIO2_VOICE_NOSAMPLESPLAYED = 256;\n\nconst XAUDIO2_FILTER_TYPE XAUDIO2_DEFAULT_FILTER_TYPE = LowPassFilter;\nconst float XAUDIO2_DEFAULT_FILTER_FREQUENCY = XAUDIO2_MAX_FILTER_FREQUENCY;\nconst float XAUDIO2_DEFAULT_FILTER_ONEOVERQ = 1.0;\nconst UINT32 XAUDIO2_QUANTUM_NUMERATOR = 1;\nconst UINT32 XAUDIO2_QUANTUM_DENOMINATOR = 100;\nconst float XAUDIO2_QUANTUM_MS = (1000.0 * XAUDIO2_QUANTUM_NUMERATOR / XAUDIO2_QUANTUM_DENOMINATOR);\n\nconst HRESULT XAUDIO2_E_INVALID_CALL = 0x88960001;\nconst HRESULT XAUDIO2_E_XMA_DECODER_ERROR = 0x88960002;\nconst HRESULT XAUDIO2_E_XAPO_CREATION_FAILED = 0x88960003;\nconst HRESULT XAUDIO2_E_DEVICE_INVALIDATED = 0x88960004;\n\n/* xaudio 2.0 error codes */\nconst HRESULT XAUDIO20_E_XMA_DECODER_ERROR = 0x88960001;\nconst HRESULT XAUDIO20_E_XAPO_CREATION_FAILED = 0x88960002;\nconst HRESULT XAUDIO20_E_DEVICE_INVALIDATED = 0x88960003;\n\ncpp_quote(\"#ifdef XAUDIO2_HELPER_FUNCTIONS\")\ncpp_quote(\"#define _USE_MATH_DEFINES\")\ncpp_quote(\"#include <math.h>\")\ncpp_quote(\"inline static float XAudio2DecibelsToAmplitudeRatio(float decibels) { return powf(10.0f, decibels/20.0f); }\")\ncpp_quote(\"inline static float XAudio2AmplitudeRatioToDecibels(float volume) { if (volume == 0) { return -3.402823466e+38f; } return 20.0f * log10f(volume); }\")\ncpp_quote(\"inline static float XAudio2SemitonesToFrequencyRatio(float semitones) { return powf(2.0f, semitones/12.0f); }\")\ncpp_quote(\"inline static float XAudio2FrequencyRatioToSemitones(float freqratio) { return 39.86313713864835f * log10f(freqratio); }\")\ncpp_quote(\"inline static float XAudio2CutoffFrequencyToRadians(float cutofffreq, UINT32 samplerate) { if ((UINT32)(cutofffreq * 6.0f) >= samplerate) { return XAUDIO2_MAX_FILTER_FREQUENCY; } return 2.0f * sinf((float)M_PI * cutofffreq / samplerate); }\")\ncpp_quote(\"inline static float XAudio2RadiansToCutoffFrequency(float radians, float samplerate) { return samplerate * asinf(radians/2.0f) / (float)M_PI; }\")\ncpp_quote(\"#endif\")\n\ncpp_quote(\"HRESULT WINAPI XAudio2Create(IXAudio2** pxaudio2, UINT32 flags, XAUDIO2_PROCESSOR processor);\")\n\ncpp_quote(\"#include <poppack.h>\")\n"
  },
  {
    "path": "wine/windows/xaudio2fx.idl",
    "content": "/*\n * Copyright (c) 2015 Andrew Eikum\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\n\n[\n    uuid(c0c56f46-29b1-44e9-9939-a32ce86867e2)\n]\ncoclass AudioVolumeMeter20 {\n    interface IUnknown;\n}\n\n[\n    uuid(c1e3f122-a2ea-442c-854f-20d98f8357a1)\n]\ncoclass AudioVolumeMeter21 {\n    interface IUnknown;\n}\n\n[\n    uuid(f5ca7b34-8055-42c0-b836-216129eb7e30)\n]\ncoclass AudioVolumeMeter22 {\n    interface IUnknown;\n}\n\n[\n    uuid(e180344b-ac83-4483-959e-18a5c56a5e19)\n]\ncoclass AudioVolumeMeter23 {\n    interface IUnknown;\n}\n\n[\n    uuid(c7338b95-52b8-4542-aa79-42eb016c8c1c)\n]\ncoclass AudioVolumeMeter24 {\n    interface IUnknown;\n}\n\n[\n    uuid(2139e6da-c341-4774-9ac3-b4e026347f64)\n]\ncoclass AudioVolumeMeter25 {\n    interface IUnknown;\n}\n\n[\n    uuid(e48c5a3f-93ef-43bb-a092-2c7ceb946f27)\n]\ncoclass AudioVolumeMeter26 {\n    interface IUnknown;\n}\n\n[\n    uuid(cac1105f-619b-4d04-831a-44e1cbf12d57)\n]\ncoclass AudioVolumeMeter27 {\n    interface IUnknown;\n}\n\n[\n    uuid(6f6ea3a9-2cf5-41cf-91c1-2170b1540063)\n]\ncoclass AudioReverb20 {\n    interface IUnknown;\n}\n\n[\n    uuid(f4769300-b949-4df9-b333-00d33932e9a6)\n]\ncoclass AudioReverb21 {\n    interface IUnknown;\n}\n\n[\n    uuid(629cf0de-3ecc-41e7-9926-f7e43eebec51)\n]\ncoclass AudioReverb22 {\n    interface IUnknown;\n}\n\n[\n    uuid(9cab402c-1d37-44b4-886d-fa4f36170a4c)\n]\ncoclass AudioReverb23 {\n    interface IUnknown;\n}\n\n[\n    uuid(8bb7778b-645b-4475-9a73-1de3170bd3af)\n]\ncoclass AudioReverb24 {\n    interface IUnknown;\n}\n\n[\n    uuid(d06df0d0-8518-441e-822f-5451d5c595b8)\n]\ncoclass AudioReverb25 {\n    interface IUnknown;\n}\n\n[\n    uuid(cecec95a-d894-491a-bee3-5e106fb59f2d)\n]\ncoclass AudioReverb26 {\n    interface IUnknown;\n}\n\n[\n    uuid(6a93130e-1d53-41d1-a9cf-e758800bb179)\n]\ncoclass AudioReverb27 {\n    interface IUnknown;\n}\n"
  },
  {
    "path": "wine/windows/xcmc.h",
    "content": "/*\n * Copyright (C) 2004 Chris Morgan\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _XCMC_H\n#define _XCMC_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef char                CMC_sint8;\ntypedef short               CMC_sint16;\ntypedef LONG                CMC_sint32;\ntypedef unsigned short int  CMC_uint16;\ntypedef ULONG               CMC_uint32;\ntypedef void*               CMC_buffer;\ntypedef char*               CMC_string;\n\ntypedef CMC_uint16          CMC_boolean;\ntypedef CMC_sint32          CMC_enum;\ntypedef CMC_uint32          CMC_return_code;\ntypedef CMC_uint32          CMC_flags;\ntypedef CMC_string          CMC_object_identifier;\ntypedef CMC_uint32          CMC_session_id;\ntypedef CMC_uint32          CMC_ui_id;\n\n#define CMC_FALSE   ((CMC_boolean)0)\n#define CMC_TRUE    ((CMC_boolean)1)\n\n#define CMC_SUCCESS                         ((CMC_return_code) 0)\n\n#define CMC_E_AMBIGUOUS_RECIPIENT           ((CMC_return_code) 1)\n#define CMC_E_ATTACHMENT_NOT_FOUND          ((CMC_return_code) 2)\n#define CMC_E_ATTACHMENT_OPEN_FAILURE       ((CMC_return_code) 3)\n#define CMC_E_ATTACHMENT_READ_FAILURE       ((CMC_return_code) 4)\n#define CMC_E_ATTACHMENT_WRITE_FAILURE      ((CMC_return_code) 5)\n#define CMC_E_COUNTED_STRING_UNSUPPORTED    ((CMC_return_code) 6)\n#define CMC_E_DISK_FULL                     ((CMC_return_code) 7)\n#define CMC_E_FAILURE                       ((CMC_return_code) 8)\n#define CMC_E_INSUFFICIENT_MEMORY           ((CMC_return_code) 9)\n#define CMC_E_INVALID_CONFIGURATION         ((CMC_return_code) 10)\n#define CMC_E_INVALID_ENUM                  ((CMC_return_code) 11)\n#define CMC_E_INVALID_FLAG                  ((CMC_return_code) 12)\n#define CMC_E_INVALID_MEMORY                ((CMC_return_code) 13)\n#define CMC_E_INVALID_MESSAGE_PARAMETER     ((CMC_return_code) 14)\n#define CMC_E_INVALID_MESSAGE_REFERENCE     ((CMC_return_code) 15)\n#define CMC_E_INVALID_PARAMETER             ((CMC_return_code) 16)\n#define CMC_E_INVALID_SESSION_ID            ((CMC_return_code) 17)\n#define CMC_E_INVALID_UI_ID                 ((CMC_return_code) 18)\n#define CMC_E_LOGON_FAILURE                 ((CMC_return_code) 19)\n#define CMC_E_MESSAGE_IN_USE                ((CMC_return_code) 20)\n#define CMC_E_NOT_SUPPORTED                 ((CMC_return_code) 21)\n#define CMC_E_PASSWORD_REQUIRED             ((CMC_return_code) 22)\n#define CMC_E_RECIPIENT_NOT_FOUND           ((CMC_return_code) 23)\n#define CMC_E_SERVICE_UNAVAILABLE           ((CMC_return_code) 24)\n#define CMC_E_TEXT_TOO_LARGE                ((CMC_return_code) 25)\n#define CMC_E_TOO_MANY_FILES                ((CMC_return_code) 26)\n#define CMC_E_TOO_MANY_RECIPIENTS           ((CMC_return_code) 27)\n#define CMC_E_UNABLE_TO_NOT_MARK_AS_READ    ((CMC_return_code) 28)\n#define CMC_E_UNRECOGNIZED_MESSAGE_TYPE     ((CMC_return_code) 29)\n#define CMC_E_UNSUPPORTED_ACTION            ((CMC_return_code) 30)\n#define CMC_E_UNSUPPORTED_CHARACTER_SET     ((CMC_return_code) 31)\n#define CMC_E_UNSUPPORTED_DATA_EXT          ((CMC_return_code) 32)\n#define CMC_E_UNSUPPORTED_FLAG              ((CMC_return_code) 33)\n#define CMC_E_UNSUPPORTED_FUNCTION_EXT      ((CMC_return_code) 34)\n#define CMC_E_UNSUPPORTED_VERSION           ((CMC_return_code) 35)\n#define CMC_E_USER_CANCEL                   ((CMC_return_code) 36)\n#define CMC_E_USER_NOT_LOGGED_ON            ((CMC_return_code) 37)\n\n#define CMC_ERROR_DISPLAYED                 ((CMC_return_code) 0x00008000)\n#define CMC_ERROR_RSV_MASK                  ((CMC_return_code) 0x0000FFFF)\n#define CMC_ERROR_IMPL_MASK                 ((CMC_return_code) 0xFFFF0000)\n\ntypedef struct {\n    CMC_uint32          length;\n    char                string[1];\n} CMC_counted_string;\n\ntypedef CMC_counted_string CMC_message_reference;\n\ntypedef struct {\n    CMC_sint8  second;\n    CMC_sint8  minute;\n    CMC_sint8  hour;\n    CMC_sint8  day;\n    CMC_sint8  month;\n    CMC_sint8  year;\n    CMC_sint8  isdst;\n    CMC_sint8  unused1;\n    CMC_sint16 tmzone;\n    CMC_sint16 unused2;\n} CMC_time;\n\n#define CMC_NO_TIMEZONE ((CMC_sint16) 0x8000)\n\n\ntypedef struct {\n    CMC_uint32 item_code;\n    CMC_uint32 item_data;\n    CMC_buffer item_reference;\n    CMC_flags  extension_flags;\n} CMC_extension;\n\n#define CMC_EXT_REQUIRED                    ((CMC_flags) 0x00010000)\n#define CMC_EXT_OUTPUT                      ((CMC_flags) 0x00020000)\n#define CMC_EXT_LAST_ELEMENT                ((CMC_flags) 0x80000000)\n#define CMC_EXT_RSV_FLAG_MASK               ((CMC_flags) 0xFFFF0000)\n#define CMC_EXT_ITEM_FLAG_MASK              ((CMC_flags) 0x0000FFFF)\n\n\ntypedef struct CMC_attachment_s {\n    CMC_string              attach_title;\n    CMC_object_identifier   attach_type;\n    CMC_string              attach_filename;\n    CMC_flags               attach_flags;\n    CMC_extension          *attach_extensions;\n} CMC_attachment;\n\n#define CMC_ATT_APP_OWNS_FILE  ((CMC_flags) 1)\n#define CMC_ATT_LAST_ELEMENT   ((CMC_flags) 0x80000000)\n\n#define CMC_ATT_OID_BINARY      \"? ? ? ? ? ?\"\n#define CMC_ATT_OID_TEXT        \"? ? ? ? ? ?\"\n\n\ntypedef struct {\n    CMC_string              name;\n    CMC_enum                name_type;\n    CMC_string              address;\n    CMC_enum                role;\n    CMC_flags               recip_flags;\n    CMC_extension          *recip_extensions;\n} CMC_recipient;\n\n#define CMC_TYPE_UNKNOWN                    ((CMC_enum) 0)\n#define CMC_TYPE_INDIVIDUAL                 ((CMC_enum) 1)\n#define CMC_TYPE_GROUP                      ((CMC_enum) 2)\n\n#define CMC_ROLE_TO                         ((CMC_enum) 0)\n#define CMC_ROLE_CC                         ((CMC_enum) 1)\n#define CMC_ROLE_BCC                        ((CMC_enum) 2)\n#define CMC_ROLE_ORIGINATOR                 ((CMC_enum) 3)\n#define CMC_ROLE_AUTHORIZING_USER           ((CMC_enum) 4)\n\n#define CMC_RECIP_IGNORE                    ((CMC_flags) 1)\n#define CMC_RECIP_LIST_TRUNCATED            ((CMC_flags) 2)\n#define CMC_RECIP_LAST_ELEMENT              ((CMC_flags) 0x80000000)\n\n\ntypedef struct {\n    CMC_message_reference  *message_reference;\n    CMC_string              message_type;\n    CMC_string              subject;\n    CMC_time                time_sent;\n    CMC_string              text_note;\n    CMC_recipient          *recipients;\n    CMC_attachment         *attachments;\n    CMC_flags               message_flags;\n    CMC_extension          *message_extensions;\n} CMC_message;\n\n#define CMC_MSG_READ                        ((CMC_flags) 1)\n#define CMC_MSG_TEXT_NOTE_AS_FILE           ((CMC_flags) 2)\n#define CMC_MSG_UNSENT                      ((CMC_flags) 4)\n#define CMC_MSG_LAST_ELEMENT                ((CMC_flags) 0x80000000)\n\n\ntypedef struct {\n    CMC_message_reference  *message_reference;\n    CMC_string              message_type;\n    CMC_string              subject;\n    CMC_time                time_sent;\n    CMC_uint32              byte_length;\n    CMC_recipient          *originator;\n    CMC_flags               summary_flags;\n    CMC_extension          *message_summary_extensions;\n} CMC_message_summary;\n\n#define CMC_SUM_READ                        ((CMC_flags) 1)\n#define CMC_SUM_UNSENT                      ((CMC_flags) 2)\n#define CMC_SUM_LAST_ELEMENT                ((CMC_flags) 0x80000000)\n\n#define CMC_ERROR_UI_ALLOWED                ((CMC_flags) 0x01000000)\n#define CMC_LOGON_UI_ALLOWED                ((CMC_flags) 0x02000000)\n#define CMC_COUNTED_STRING_TYPE             ((CMC_flags) 0x04000000)\n\nCMC_return_code WINAPI cmc_send(\n    CMC_session_id          session,\n    CMC_message            *message,\n    CMC_flags               send_flags,\n    CMC_ui_id               ui_id,\n    CMC_extension          *send_extensions\n);\n\n#define CMC_SEND_UI_REQUESTED               ((CMC_flags) 1)\n\n\nCMC_return_code WINAPI cmc_send_documents(\n    CMC_string              recipient_addresses,\n    CMC_string              subject,\n    CMC_string              text_note,\n    CMC_flags               send_doc_flags,\n    CMC_string              file_paths,\n    CMC_string              file_names,\n    CMC_string              delimiter,\n    CMC_ui_id               ui_id\n);\n\n#define CMC_FIRST_ATTACH_AS_TEXT_NOTE       ((CMC_flags) 2)\n\n\nCMC_return_code WINAPI cmc_act_on(\n    CMC_session_id          session,\n    CMC_message_reference  *message_reference,\n    CMC_enum                operation,\n    CMC_flags               act_on_flags,\n    CMC_ui_id               ui_id,\n    CMC_extension          *act_on_extensions\n);\n\n#define CMC_ACT_ON_EXTENDED                 ((CMC_enum) 0)\n#define CMC_ACT_ON_DELETE                   ((CMC_enum) 1)\n\n\nCMC_return_code WINAPI cmc_list(\n    CMC_session_id          session,\n    CMC_string              message_type,\n    CMC_flags               list_flags,\n    CMC_message_reference  *seed,\n    CMC_uint32             *count,\n    CMC_ui_id               ui_id,\n    CMC_message_summary   **result,\n    CMC_extension          *list_extensions\n);\n\n#define CMC_LIST_UNREAD_ONLY                ((CMC_flags) 1)\n#define CMC_LIST_MSG_REFS_ONLY              ((CMC_flags) 2)\n#define CMC_LIST_COUNT_ONLY                 ((CMC_flags) 4)\n\n#define CMC_LENGTH_UNKNOWN          0xFFFFFFFF\n\n\nCMC_return_code WINAPI cmc_read(\n    CMC_session_id          session,\n    CMC_message_reference  *message_reference,\n    CMC_flags               read_flags,\n    CMC_message           **message,\n    CMC_ui_id               ui_id,\n    CMC_extension          *read_extensions\n);\n\n#define CMC_DO_NOT_MARK_AS_READ             ((CMC_flags) 1)\n#define CMC_MSG_AND_ATT_HDRS_ONLY           ((CMC_flags) 2)\n#define CMC_READ_FIRST_UNREAD_MESSAGE       ((CMC_flags) 4)\n\n\nCMC_return_code WINAPI cmc_look_up(\n    CMC_session_id          session,\n    CMC_recipient          *recipient_in,\n    CMC_flags               look_up_flags,\n    CMC_ui_id               ui_id,\n    CMC_uint32             *count,\n    CMC_recipient         **recipient_out,\n    CMC_extension          *look_up_extensions\n);\n\n#define CMC_LOOKUP_RESOLVE_PREFIX_SEARCH    ((CMC_flags) 1)\n#define CMC_LOOKUP_RESOLVE_IDENTITY         ((CMC_flags) 2)\n#define CMC_LOOKUP_RESOLVE_UI               ((CMC_flags) 4)\n#define CMC_LOOKUP_DETAILS_UI               ((CMC_flags) 8)\n#define CMC_LOOKUP_ADDRESSING_UI            ((CMC_flags) 16)\n\n\nCMC_return_code WINAPI cmc_free( CMC_buffer memory );\n\nCMC_return_code WINAPI cmc_logoff(\n    CMC_session_id          session,\n    CMC_ui_id               ui_id,\n    CMC_flags               logoff_flags,\n    CMC_extension          *logoff_extensions\n);\n\nCMC_return_code WINAPI cmc_logon(\n    CMC_string              service,\n    CMC_string              user,\n    CMC_string              password,\n    CMC_object_identifier   character_set,\n    CMC_ui_id               ui_id,\n    CMC_uint16              caller_cmc_version,\n    CMC_flags               logon_flags,\n    CMC_session_id         *session,\n    CMC_extension          *logon_extensions\n);\n\n#define CMC_VERSION         ((CMC_uint16) 100)\n\nCMC_return_code WINAPI cmc_query_configuration(\n    CMC_session_id          session,\n    CMC_enum                item,\n    CMC_buffer              reference,\n    CMC_extension          *config_extensions\n);\n\n#define CMC_CONFIG_CHARACTER_SET            ((CMC_enum) 1)\n#define CMC_CONFIG_LINE_TERM                ((CMC_enum) 2)\n#define CMC_CONFIG_DEFAULT_SERVICE          ((CMC_enum) 3)\n#define CMC_CONFIG_DEFAULT_USER             ((CMC_enum) 4)\n#define CMC_CONFIG_REQ_PASSWORD             ((CMC_enum) 5)\n#define CMC_CONFIG_REQ_SERVICE              ((CMC_enum) 6)\n#define CMC_CONFIG_REQ_USER                 ((CMC_enum) 7)\n#define CMC_CONFIG_UI_AVAIL                 ((CMC_enum) 8)\n#define CMC_CONFIG_SUP_NOMKMSGREAD          ((CMC_enum) 9)\n#define CMC_CONFIG_SUP_COUNTED_STR          ((CMC_enum) 10)\n#define CMC_CONFIG_VER_IMPLEM               ((CMC_enum) 11)\n#define CMC_CONFIG_VER_SPEC                 ((CMC_enum) 12)\n\n#define CMC_LINE_TERM_CRLF                  ((CMC_enum) 0)\n#define CMC_LINE_TERM_CR                    ((CMC_enum) 1)\n#define CMC_LINE_TERM_LF                    ((CMC_enum) 2)\n\n#define CMC_REQUIRED_NO                     ((CMC_enum) 0)\n#define CMC_REQUIRED_YES                    ((CMC_enum) 1)\n#define CMC_REQUIRED_OPT                    ((CMC_enum) 2)\n\n#define CMC_CHAR_CP437                      \"1 2 840 113556 3 2 437\"\n#define CMC_CHAR_CP850                      \"1 2 840 113556 3 2 85\"\n#define CMC_CHAR_CP1252                     \"1 2 840 113556 3 2 1252\"\n#define CMC_CHAR_ISTRING                    \"1 2 840 113556 3 2 0\"\n#define CMC_CHAR_UNICODE                    \"1 2 840 113556 3 2 1\"\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* #ifndef _XCMC_H */\n"
  },
  {
    "path": "wine/windows/xinput.h",
    "content": "/*\n * The Wine project - Xinput Joystick Library\n * Copyright 2008 Andrew Fenn\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_XINPUT_H\n#define __WINE_XINPUT_H\n\n#include <windef.h>\n\n/*\n * Bitmasks for the joysticks buttons, determines what has\n * been pressed on the joystick, these need to be mapped\n * to whatever device you're using instead of an xbox 360\n * joystick\n */\n\n#define XINPUT_GAMEPAD_DPAD_UP          0x0001\n#define XINPUT_GAMEPAD_DPAD_DOWN        0x0002\n#define XINPUT_GAMEPAD_DPAD_LEFT        0x0004\n#define XINPUT_GAMEPAD_DPAD_RIGHT       0x0008\n#define XINPUT_GAMEPAD_START            0x0010\n#define XINPUT_GAMEPAD_BACK             0x0020\n#define XINPUT_GAMEPAD_LEFT_THUMB       0x0040\n#define XINPUT_GAMEPAD_RIGHT_THUMB      0x0080\n#define XINPUT_GAMEPAD_LEFT_SHOULDER    0x0100\n#define XINPUT_GAMEPAD_RIGHT_SHOULDER   0x0200\n#define XINPUT_GAMEPAD_A                0x1000\n#define XINPUT_GAMEPAD_B                0x2000\n#define XINPUT_GAMEPAD_X                0x4000\n#define XINPUT_GAMEPAD_Y                0x8000\n\n/*\n * Defines the flags used to determine if the user is pushing\n * down on a button, not holding a button, etc\n */\n\n#define XINPUT_KEYSTROKE_KEYDOWN        0x0001\n#define XINPUT_KEYSTROKE_KEYUP          0x0002\n#define XINPUT_KEYSTROKE_REPEAT         0x0004\n\n/*\n * Defines the codes which are returned by XInputGetKeystroke\n */\n\n#define VK_PAD_A                        0x5800\n#define VK_PAD_B                        0x5801\n#define VK_PAD_X                        0x5802\n#define VK_PAD_Y                        0x5803\n#define VK_PAD_RSHOULDER                0x5804\n#define VK_PAD_LSHOULDER                0x5805\n#define VK_PAD_LTRIGGER                 0x5806\n#define VK_PAD_RTRIGGER                 0x5807\n#define VK_PAD_DPAD_UP                  0x5810\n#define VK_PAD_DPAD_DOWN                0x5811\n#define VK_PAD_DPAD_LEFT                0x5812\n#define VK_PAD_DPAD_RIGHT               0x5813\n#define VK_PAD_START                    0x5814\n#define VK_PAD_BACK                     0x5815\n#define VK_PAD_LTHUMB_PRESS             0x5816\n#define VK_PAD_RTHUMB_PRESS             0x5817\n#define VK_PAD_LTHUMB_UP                0x5820\n#define VK_PAD_LTHUMB_DOWN              0x5821\n#define VK_PAD_LTHUMB_RIGHT             0x5822\n#define VK_PAD_LTHUMB_LEFT              0x5823\n#define VK_PAD_LTHUMB_UPLEFT            0x5824\n#define VK_PAD_LTHUMB_UPRIGHT           0x5825\n#define VK_PAD_LTHUMB_DOWNRIGHT         0x5826\n#define VK_PAD_LTHUMB_DOWNLEFT          0x5827\n#define VK_PAD_RTHUMB_UP                0x5830\n#define VK_PAD_RTHUMB_DOWN              0x5831\n#define VK_PAD_RTHUMB_RIGHT             0x5832\n#define VK_PAD_RTHUMB_LEFT              0x5833\n#define VK_PAD_RTHUMB_UPLEFT            0x5834\n#define VK_PAD_RTHUMB_UPRIGHT           0x5835\n#define VK_PAD_RTHUMB_DOWNRIGHT         0x5836\n#define VK_PAD_RTHUMB_DOWNLEFT          0x5837\n\n/*\n * Deadzones are for analogue joystick controls on the joypad\n * which determine when input should be assumed to be in the\n * middle of the pad. This is a threshold to stop a joypad\n * controlling the game when the player isn't touching the\n * controls.\n */\n\n#define XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE  7849\n#define XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE 8689\n#define XINPUT_GAMEPAD_TRIGGER_THRESHOLD    30\n\n\n/*\n * Defines what type of abilities the type of joystick has\n * DEVTYPE_GAMEPAD is available for all joysticks, however\n * there may be more specific identifiers for other joysticks\n * which are being used.\n */\n\n#define XINPUT_DEVTYPE_GAMEPAD          0x01\n#define XINPUT_DEVSUBTYPE_GAMEPAD       0x01\n#define XINPUT_DEVSUBTYPE_WHEEL         0x02\n#define XINPUT_DEVSUBTYPE_ARCADE_STICK  0x03\n#define XINPUT_DEVSUBTYPE_FLIGHT_SICK   0x04\n#define XINPUT_DEVSUBTYPE_DANCE_PAD     0x05\n#define XINPUT_DEVSUBTYPE_GUITAR        0x06\n#define XINPUT_DEVSUBTYPE_DRUM_KIT      0x08\n\n/*\n * These are used with the XInputGetCapabilities function to\n * determine the abilities to the joystick which has been\n * plugged in.\n */\n\n#define XINPUT_CAPS_VOICE_SUPPORTED     0x0004\n#define XINPUT_FLAG_GAMEPAD             0x00000001\n\n/*\n * Defines the status of the battery if one is used in the\n * attached joystick. The first two define if the joystick\n * supports a battery. Disconnected means that the joystick\n * isn't connected. Wired shows that the joystick is a wired\n * joystick.\n */\n\n#define BATTERY_DEVTYPE_GAMEPAD         0x00\n#define BATTERY_DEVTYPE_HEADSET         0x01\n#define BATTERY_TYPE_DISCONNECTED       0x00\n#define BATTERY_TYPE_WIRED              0x01\n#define BATTERY_TYPE_ALKALINE           0x02\n#define BATTERY_TYPE_NIMH               0x03\n#define BATTERY_TYPE_UNKNOWN            0xFF\n#define BATTERY_LEVEL_EMPTY             0x00\n#define BATTERY_LEVEL_LOW               0x01\n#define BATTERY_LEVEL_MEDIUM            0x02\n#define BATTERY_LEVEL_FULL              0x03\n\n/*\n * How many joysticks can be used with this library. Games that\n * use the xinput library will not go over this number.\n */\n\n#define XUSER_MAX_COUNT                 4\n#define XUSER_INDEX_ANY                 0x000000FF\n\n#define XINPUT_CAPS_FFB_SUPPORTED       0x0001\n\n/*\n * Defines the structure of an xbox 360 joystick.\n */\n\ntypedef struct _XINPUT_GAMEPAD {\n    WORD wButtons;\n    BYTE bLeftTrigger;\n    BYTE bRightTrigger;\n    SHORT sThumbLX;\n    SHORT sThumbLY;\n    SHORT sThumbRX;\n    SHORT sThumbRY;\n} XINPUT_GAMEPAD, *PXINPUT_GAMEPAD;\n\ntypedef struct _XINPUT_STATE {\n    DWORD dwPacketNumber;\n    XINPUT_GAMEPAD Gamepad;\n} XINPUT_STATE, *PXINPUT_STATE;\n\n/*\n * Defines the structure of how much vibration is set on both the\n * right and left motors in a joystick. If you're not using a 360\n * joystick you will have to map these to your device.\n */\n\ntypedef struct _XINPUT_VIBRATION {\n    WORD wLeftMotorSpeed;\n    WORD wRightMotorSpeed;\n} XINPUT_VIBRATION, *PXINPUT_VIBRATION;\n\n/*\n * Defines the structure for what kind of abilities the joystick has\n * such abilities are things such as if the joystick has the ability\n * to send and receive audio, if the joystick is in fact a driving\n * wheel or perhaps if the joystick is some kind of dance pad or\n * guitar.\n */\n\ntypedef struct _XINPUT_CAPABILITIES {\n    BYTE Type;\n    BYTE SubType;\n    WORD Flags;\n    XINPUT_GAMEPAD Gamepad;\n    XINPUT_VIBRATION Vibration;\n} XINPUT_CAPABILITIES, *PXINPUT_CAPABILITIES;\n\n/*\n * Defines the structure for a joystick input event which is\n * retrieved using the function XInputGetKeystroke\n */\ntypedef struct _XINPUT_KEYSTROKE {\n    WORD VirtualKey;\n    WCHAR Unicode;\n    WORD Flags;\n    BYTE UserIndex;\n    BYTE HidCode;\n} XINPUT_KEYSTROKE, *PXINPUT_KEYSTROKE;\n\ntypedef struct _XINPUT_BATTERY_INFORMATION\n{\n    BYTE BatteryType;\n    BYTE BatteryLevel;\n} XINPUT_BATTERY_INFORMATION, *PXINPUT_BATTERY_INFORMATION;\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nvoid WINAPI XInputEnable(BOOL);\nDWORD WINAPI XInputSetState(DWORD, XINPUT_VIBRATION*);\nDWORD WINAPI XInputGetState(DWORD, XINPUT_STATE*);\nDWORD WINAPI XInputGetKeystroke(DWORD, DWORD, PXINPUT_KEYSTROKE);\nDWORD WINAPI XInputGetCapabilities(DWORD, DWORD, XINPUT_CAPABILITIES*);\nDWORD WINAPI XInputGetDSoundAudioDeviceGuids(DWORD, GUID*, GUID*);\nDWORD WINAPI XInputGetBatteryInformation(DWORD, BYTE, XINPUT_BATTERY_INFORMATION*);\n\nDWORD WINAPI XInputGetStateEx(DWORD, XINPUT_STATE*);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __WINE_XINPUT_H */\n"
  },
  {
    "path": "wine/windows/xmldom.h",
    "content": "/*\n * Copyright 2010 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n/* xmldom.idl is included by msxml.idl so it doesn't need a stand-alone header */\n#include <msxml.h>\n"
  },
  {
    "path": "wine/windows/xmldom.idl",
    "content": "/*\n * Copyright (C) 2005 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n#include <xmldomdid.h>\n#include <idispids.h>\n\n#if !defined(progid) && !defined(__WIDL__)\n#define threading(model)\n#define progid(str)\n#define vi_progid(str)\n#endif\n\ninterface IXMLDOMImplementation;\ninterface IXMLDOMNode;\ninterface IXMLDOMDocumentFragment;\ninterface IXMLDOMDocument;\ninterface IXMLDOMNodeList;\ninterface IXMLDOMNamedNodeMap;\ninterface IXMLDOMCharacterData;\ninterface IXMLDOMAttribute;\ninterface IXMLDOMElement;\ninterface IXMLDOMText;\ninterface IXMLDOMComment;\ninterface IXMLDOMProcessingInstruction;\ninterface IXMLDOMCDATASection;\ninterface IXMLDOMDocumentType;\ninterface IXMLDOMNotation;\ninterface IXMLDOMEntity;\ninterface IXMLDOMEntityReference;\ninterface IXMLDOMParseError;\n\ncpp_quote(\"#ifndef __MSXML_DOMNODETYPE_DEFINED\")\ncpp_quote(\"#define __MSXML_DOMNODETYPE_DEFINED\")\ntypedef enum tagDOMNodeType {\n    NODE_INVALID,\n    NODE_ELEMENT,\n    NODE_ATTRIBUTE,\n    NODE_TEXT,\n    NODE_CDATA_SECTION,\n    NODE_ENTITY_REFERENCE,\n    NODE_ENTITY,\n    NODE_PROCESSING_INSTRUCTION,\n    NODE_COMMENT,\n    NODE_DOCUMENT,\n    NODE_DOCUMENT_TYPE,\n    NODE_DOCUMENT_FRAGMENT,\n    NODE_NOTATION\n} DOMNodeType;\ncpp_quote(\"#endif\")\n\n[\nlocal,\nobject,\nodl,\ndual,\noleautomation,\n/*nonextensible,*/\nuuid(2933bf80-7b36-11d2-b20e-00c04f983e60),\npointer_default(unique)\n]\ninterface IXMLDOMNode : IDispatch\n{\n    [propget, id(DISPID_DOM_NODE_NODENAME)]\n    HRESULT nodeName( [out,retval] BSTR *name );\n\n    [propget, id(DISPID_DOM_NODE_NODEVALUE)]\n    HRESULT nodeValue( [out,retval] VARIANT *value );\n\n    [propput, id(DISPID_DOM_NODE_NODEVALUE)]\n    HRESULT nodeValue( [in] VARIANT value );\n\n    [propget, id(DISPID_DOM_NODE_NODETYPE)]\n    HRESULT nodeType( [out,retval] DOMNodeType *type );\n\n    [propget, id(DISPID_DOM_NODE_PARENTNODE)]\n    HRESULT parentNode( [out,retval] IXMLDOMNode **parent );\n\n    [propget, id(DISPID_DOM_NODE_CHILDNODES)]\n    HRESULT childNodes( [out,retval] IXMLDOMNodeList **childList );\n\n    [propget, id(DISPID_DOM_NODE_FIRSTCHILD)]\n    HRESULT firstChild( [out,retval] IXMLDOMNode **firstChild );\n\n    [propget, id(DISPID_DOM_NODE_LASTCHILD)]\n    HRESULT lastChild( [out,retval] IXMLDOMNode **lastChild );\n\n    [propget, id(DISPID_DOM_NODE_PREVIOUSSIBLING)]\n    HRESULT previousSibling( [out,retval] IXMLDOMNode **previousSibling );\n\n    [propget, id(DISPID_DOM_NODE_NEXTSIBLING)]\n    HRESULT nextSibling( [out,retval] IXMLDOMNode **nextSibling );\n\n    [propget, id(DISPID_DOM_NODE_ATTRIBUTES)]\n    HRESULT attributes( [out,retval] IXMLDOMNamedNodeMap **attributeMap );\n\n    [id(DISPID_DOM_NODE_INSERTBEFORE)]\n    HRESULT insertBefore( [in] IXMLDOMNode * newChild,\n                          [in] VARIANT refChild,\n                          [out,retval] IXMLDOMNode **outNewChild );\n\n    [id(DISPID_DOM_NODE_REPLACECHILD)]\n    HRESULT replaceChild( [in] IXMLDOMNode *newChild,\n                          [in] IXMLDOMNode *oldChild,\n                          [out,retval] IXMLDOMNode **outOldChild );\n\n    [id(DISPID_DOM_NODE_REMOVECHILD)]\n    HRESULT removeChild( [in] IXMLDOMNode *childNode,\n                         [out,retval] IXMLDOMNode **oldChild );\n\n    [id(DISPID_DOM_NODE_APPENDCHILD)]\n    HRESULT appendChild( [in] IXMLDOMNode *newChild,\n                         [out,retval] IXMLDOMNode **outNewChild );\n\n    [id(DISPID_DOM_NODE_HASCHILDNODES)]\n    HRESULT hasChildNodes( [out,retval] VARIANT_BOOL *hasChild );\n\n    [propget, id(DISPID_DOM_NODE_OWNERDOC)]\n    HRESULT ownerDocument( [out,retval] IXMLDOMDocument **DOMDocument );\n\n    [id(DISPID_DOM_NODE_CLONENODE)]\n    HRESULT cloneNode( [in] VARIANT_BOOL deep,\n                       [out,retval] IXMLDOMNode **cloneRoot );\n\n    [propget, id(DISPID_XMLDOM_NODE_STRINGTYPE)]\n    HRESULT nodeTypeString( [out,retval] BSTR *nodeType );\n\n    [propget, id(DISPID_XMLDOM_NODE_TEXT)]\n    HRESULT text( [out,retval] BSTR *text );\n\n    [propput, id(DISPID_XMLDOM_NODE_TEXT)]\n    HRESULT text( [in] BSTR text );\n\n    [propget, id(DISPID_XMLDOM_NODE_SPECIFIED)]\n    HRESULT specified( [out,retval] VARIANT_BOOL *isSpecified );\n\n    [propget, id(DISPID_XMLDOM_NODE_DEFINITION)]\n    HRESULT definition( [out,retval] IXMLDOMNode **definitionNode );\n\n    [propget, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)]\n    HRESULT nodeTypedValue( [out,retval] VARIANT *typedValue );\n\n    [propput, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)]\n    HRESULT nodeTypedValue( [in] VARIANT typedValue );\n\n    [propget, id(DISPID_XMLDOM_NODE_DATATYPE)]\n    HRESULT dataType( [out,retval] VARIANT *dataTypeName );\n\n    [propput, id(DISPID_XMLDOM_NODE_DATATYPE)]\n    HRESULT dataType( [in] BSTR dataTypeName );\n\n    [propget, id(DISPID_XMLDOM_NODE_XML)]\n    HRESULT xml( [out,retval] BSTR *xmlString );\n\n    [id(DISPID_XMLDOM_NODE_TRANSFORMNODE)]\n    HRESULT transformNode( [in] IXMLDOMNode *styleSheet,\n                           [out,retval] BSTR *xmlString );\n\n    [id(DISPID_XMLDOM_NODE_SELECTNODES)]\n    HRESULT selectNodes( [in] BSTR queryString,\n                         [out,retval] IXMLDOMNodeList **resultList );\n\n    [id(DISPID_XMLDOM_NODE_SELECTSINGLENODE)]\n    HRESULT selectSingleNode( [in] BSTR queryString,\n                              [out,retval] IXMLDOMNode **resultNode );\n\n    [propget, id(DISPID_XMLDOM_NODE_PARSED)]\n    HRESULT parsed( [out,retval] VARIANT_BOOL *isParsed );\n\n    [propget, id(DISPID_XMLDOM_NODE_NAMESPACE)]\n    HRESULT namespaceURI( [out,retval] BSTR *namespaceURI );\n\n    [propget, id(DISPID_XMLDOM_NODE_PREFIX)]\n    HRESULT prefix( [out,retval] BSTR *prefixString );\n\n    [propget, id(DISPID_XMLDOM_NODE_BASENAME)]\n    HRESULT baseName( [out,retval] BSTR *nameString );\n\n    [id(DISPID_XMLDOM_NODE_TRANSFORMNODETOOBJECT)]\n    HRESULT transformNodeToObject( [in] IXMLDOMNode *stylesheet,\n                                   [in] VARIANT outputObject );\n}\n\n[\nlocal,\nobject,\nodl,\ndual,\n/*nonextensible,*/\noleautomation,\nuuid(2933bf81-7b36-11d2-b20e-00c04f983e60),\npointer_default(unique)\n]\ninterface IXMLDOMDocument : IXMLDOMNode\n{\n    [propget, id(DISPID_DOM_DOCUMENT_DOCTYPE)]\n    HRESULT doctype( [out,retval] IXMLDOMDocumentType **documentType );\n\n    [propget, id(DISPID_DOM_DOCUMENT_IMPLEMENTATION)]\n    HRESULT implementation( [out,retval] IXMLDOMImplementation **impl );\n\n    [propget, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)]\n    HRESULT documentElement( [out,retval] IXMLDOMElement **DOMElement );\n\n    [propputref, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)]\n    HRESULT documentElement( [in] IXMLDOMElement *DOMElement );\n\n    [id(DISPID_DOM_DOCUMENT_CREATEELEMENT)]\n    HRESULT createElement( [in] BSTR tagname,\n                           [out,retval] IXMLDOMElement **element );\n\n    [id(DISPID_DOM_DOCUMENT_CREATEDOCUMENTFRAGMENT)]\n    HRESULT createDocumentFragment( [out,retval] IXMLDOMDocumentFragment **docFrag );\n\n    [id(DISPID_DOM_DOCUMENT_CREATETEXTNODE)]\n    HRESULT createTextNode( [in] BSTR data,\n                            [out,retval] IXMLDOMText **text );\n\n    [id(DISPID_DOM_DOCUMENT_CREATECOMMENT)]\n    HRESULT createComment( [in] BSTR data,\n                           [out,retval] IXMLDOMComment **comment );\n\n    [id(DISPID_DOM_DOCUMENT_CREATECDATASECTION)]\n    HRESULT createCDATASection( [in] BSTR data,\n                                [out,retval] IXMLDOMCDATASection **cdata );\n\n    [id(DISPID_DOM_DOCUMENT_CREATEPROCESSINGINSTRUCTION)]\n    HRESULT createProcessingInstruction( [in] BSTR target,\n                                         [in] BSTR data,\n                                         [out,retval] IXMLDOMProcessingInstruction **pi );\n\n    [id(DISPID_DOM_DOCUMENT_CREATEATTRIBUTE)]\n    HRESULT createAttribute( [in] BSTR name,\n                             [out,retval] IXMLDOMAttribute **attribute );\n\n    [id(DISPID_DOM_DOCUMENT_CREATEENTITYREFERENCE)]\n    HRESULT createEntityReference( [in] BSTR name,\n                                   [out,retval] IXMLDOMEntityReference **entityRef );\n\n    [id(DISPID_DOM_DOCUMENT_GETELEMENTSBYTAGNAME)]\n    HRESULT getElementsByTagName( [in] BSTR tagName,\n                                  [out,retval] IXMLDOMNodeList **resultList );\n\n    [id(DISPID_XMLDOM_DOCUMENT_CREATENODE)]\n    HRESULT createNode( [in] VARIANT Type,\n                        [in] BSTR name,\n                        [in] BSTR namespaceURI,\n                        [out,retval] IXMLDOMNode **node );\n\n    [id(DISPID_XMLDOM_DOCUMENT_NODEFROMID)]\n    HRESULT nodeFromID( [in] BSTR idString,\n                        [out,retval] IXMLDOMNode **node );\n\n    [id(DISPID_XMLDOM_DOCUMENT_LOAD)]\n    HRESULT load( [in] VARIANT xmlSource,\n                  [out,retval] VARIANT_BOOL *isSuccessful );\n\n    [propget, id(DISPID_READYSTATE)]\n    HRESULT readyState( [out,retval] LONG *value );\n\n    [propget, id(DISPID_XMLDOM_DOCUMENT_PARSEERROR)]\n    HRESULT parseError( [out,retval] IXMLDOMParseError **errorObj );\n\n    [propget, id(DISPID_XMLDOM_DOCUMENT_URL)]\n    HRESULT url( [out,retval] BSTR *urlString );\n\n    /* FIXME: these is meant to be async, but widl parses that as a keyword */\n    [propget, id(DISPID_XMLDOM_DOCUMENT_ASYNC)]\n    HRESULT async( [out,retval] VARIANT_BOOL *isAsync );\n\n    [propput, id(DISPID_XMLDOM_DOCUMENT_ASYNC)]\n    HRESULT async( [in] VARIANT_BOOL isAsync );\n\n    [id(DISPID_XMLDOM_DOCUMENT_ABORT)]\n    HRESULT abort();\n\n    [id(DISPID_XMLDOM_DOCUMENT_LOADXML)]\n    HRESULT loadXML( [in] BSTR bstrXML,\n                     [out,retval] VARIANT_BOOL *isSuccessful );\n\n    [id(DISPID_XMLDOM_DOCUMENT_SAVE)]\n    HRESULT save( [in] VARIANT destination );\n\n    [propget, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)]\n    HRESULT validateOnParse( [out,retval] VARIANT_BOOL *isValidating );\n\n    [propput, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)]\n    HRESULT validateOnParse( [in] VARIANT_BOOL isValidating );\n\n    [propget, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)]\n    HRESULT resolveExternals( [out,retval] VARIANT_BOOL *isResolving );\n\n    [propput, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)]\n    HRESULT resolveExternals( [in] VARIANT_BOOL isValidating );\n\n    [propget, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)]\n    HRESULT preserveWhiteSpace( [out,retval] VARIANT_BOOL *isPreserving );\n\n    [propput, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)]\n    HRESULT preserveWhiteSpace( [in] VARIANT_BOOL isPreserving );\n\n    [propput, id(DISPID_XMLDOM_DOCUMENT_ONREADYSTATECHANGE)]\n    HRESULT onreadystatechange( [in] VARIANT readystatechangeSink );\n\n    [propput, id(DISPID_XMLDOM_DOCUMENT_ONDATAAVAILABLE)]\n    HRESULT ondataavailable( [in] VARIANT ondataavailableSink );\n\n    [propput, id(DISPID_XMLDOM_DOCUMENT_ONTRANSFORMNODE)]\n    HRESULT ontransformnode( [in] VARIANT ontransformnodeSink );\n}\n\n[\nlocal,\nobject,\nodl,\ndual,\n/*nonextensible,*/\noleautomation,\nuuid(2933bf82-7b36-11d2-b20e-00c04f983e60),\npointer_default(unique)\n]\ninterface IXMLDOMNodeList : IDispatch\n{\n    [propget, id(DISPID_VALUE)]\n    HRESULT item( [in] LONG index,\n                  [out,retval] IXMLDOMNode **listItem );\n\n    [propget, id(DISPID_DOM_NODELIST_LENGTH)]\n    HRESULT length( [out,retval] LONG *listLength );\n\n    [id(DISPID_XMLDOM_NODELIST_NEXTNODE)]\n    HRESULT nextNode( [out,retval] IXMLDOMNode **nextItem );\n\n    [id(DISPID_XMLDOM_NODELIST_RESET)]\n    HRESULT reset();\n\n    [id(DISPID_NEWENUM)]\n    HRESULT _newEnum( [out,retval] IUnknown **ppUnk );\n}\n\n[\nlocal,\nobject,\nodl,\ndual,\n/*nonextensible,*/\noleautomation,\nuuid(2933bf83-7b36-11d2-b20e-00c04f983e60),\npointer_default(unique)\n]\ninterface IXMLDOMNamedNodeMap : IDispatch\n{\n    [id(DISPID_DOM_NAMEDNODEMAP_GETNAMEDITEM)]\n    HRESULT getNamedItem( [in] BSTR name,\n                          [out,retval] IXMLDOMNode **namedItem );\n\n    [id(DISPID_DOM_NAMEDNODEMAP_SETNAMEDITEM)]\n    HRESULT setNamedItem( [in] IXMLDOMNode *newItem,\n                          [out,retval] IXMLDOMNode **namedItem );\n\n    [id(DISPID_DOM_NAMEDNODEMAP_REMOVENAMEDITEM)]\n    HRESULT removeNamedItem( [in] BSTR name,\n                             [out,retval] IXMLDOMNode **namedItem );\n\n    [propget, id(DISPID_VALUE)]\n    HRESULT item( [in] LONG index,\n                  [out,retval] IXMLDOMNode **listItem );\n\n    [propget, id(DISPID_DOM_NODELIST_LENGTH)]\n    HRESULT length( [out,retval] LONG *listLength );\n\n    [id(DISPID_XMLDOM_NAMEDNODEMAP_GETQUALIFIEDITEM)]\n    HRESULT getQualifiedItem( [in] BSTR baseName,\n                              [in] BSTR namespaceURI,\n                              [out,retval] IXMLDOMNode **qualifiedItem );\n\n    [id(DISPID_XMLDOM_NAMEDNODEMAP_REMOVEQUALIFIEDITEM)]\n    HRESULT removeQualifiedItem( [in] BSTR baseName,\n                                 [in] BSTR namespaceURI,\n                                 [out,retval] IXMLDOMNode **qualifiedItem );\n\n    [id(DISPID_XMLDOM_NAMEDNODEMAP_NEXTNODE)]\n    HRESULT nextNode( [out,retval] IXMLDOMNode **nextItem );\n\n    [id(DISPID_XMLDOM_NAMEDNODEMAP_RESET)]\n    HRESULT reset();\n\n    [id(DISPID_NEWENUM)]\n    HRESULT _newEnum( [out,retval] IUnknown **ppUnk );\n}\n\n[\nlocal,\nobject,\nodl,\ndual,\n/*nonextensible,*/\noleautomation,\nuuid(3efaa413-272f-11d2-836f-0000f87a7782),\npointer_default(unique)\n]\ninterface IXMLDOMDocumentFragment : IXMLDOMNode\n{\n    /* empty */\n}\n\n[\nlocal,\nobject,\nodl,\ndual,\n/*nonextensible,*/\noleautomation,\nuuid(2933bf84-7b36-11d2-b20e-00c04f983e60),\npointer_default(unique)\n]\ninterface IXMLDOMCharacterData : IXMLDOMNode\n{\n    [propget, id(DISPID_DOM_DATA_DATA)]\n    HRESULT data( [out,retval] BSTR *data );\n\n    [propput, id(DISPID_DOM_DATA_DATA)]\n    HRESULT data( [in] BSTR data );\n\n    [propget, id(DISPID_DOM_DATA_LENGTH)]\n    HRESULT length( [out,retval] LONG *dataLength );\n\n    [id(DISPID_DOM_DATA_SUBSTRING)]\n    HRESULT substringData( [in] LONG offset,\n                           [in] LONG count,\n                           [out,retval] BSTR *data );\n\n    [id(DISPID_DOM_DATA_APPEND)]\n    HRESULT appendData( [in] BSTR data );\n\n    [id(DISPID_DOM_DATA_INSERT)]\n    HRESULT insertData( [in] LONG offset,\n                        [in] BSTR data );\n\n    [id(DISPID_DOM_DATA_DELETE)]\n    HRESULT deleteData( [in] LONG offset,\n                        [in] LONG count );\n\n    [id(DISPID_DOM_DATA_REPLACE)]\n    HRESULT replaceData( [in] LONG offset,\n                         [in] LONG count,\n                         [in] BSTR data );\n}\n\n[\nlocal,\nobject,\nodl,\ndual,\n/*nonextensible,*/\noleautomation,\nuuid(2933bf85-7b36-11d2-b20e-00c04f983e60),\npointer_default(unique)\n]\ninterface IXMLDOMAttribute : IXMLDOMNode\n{\n    [propget,id(DISPID_DOM_ATTRIBUTE_GETNAME)]\n    HRESULT name( [out,retval] BSTR *attributeName );\n\n    [propget,id(DISPID_DOM_ATTRIBUTE_VALUE)]\n    HRESULT value( [out,retval] VARIANT *attributeValue );\n\n    [propput,id(DISPID_DOM_ATTRIBUTE_VALUE)]\n    HRESULT value( [in] VARIANT attributeValue );\n}\n\n[\nlocal,\nobject,\nodl,\ndual,\n/*nonextensible,*/\noleautomation,\nuuid(2933bf86-7b36-11d2-b20e-00c04f983e60),\npointer_default(unique)\n]\ninterface IXMLDOMElement : IXMLDOMNode\n{\n    [propget, id(DISPID_DOM_ELEMENT_GETTAGNAME)]\n    HRESULT tagName( [out,retval] BSTR *tagName );\n\n    [id(DISPID_DOM_ELEMENT_GETATTRIBUTE)]\n    HRESULT getAttribute( [in] BSTR name,\n                          [out,retval] VARIANT * value );\n\n    [id(DISPID_DOM_ELEMENT_SETATTRIBUTE)]\n    HRESULT setAttribute( [in] BSTR name,\n                          [in] VARIANT value );\n\n    [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTE)]\n    HRESULT removeAttribute( [in] BSTR name );\n\n    [id(DISPID_DOM_ELEMENT_GETATTRIBUTENODE)]\n    HRESULT getAttributeNode( [in] BSTR name,\n                              [out, retval] IXMLDOMAttribute ** attributeNode );\n\n    [id(DISPID_DOM_ELEMENT_SETATTRIBUTENODE)]\n    HRESULT setAttributeNode( [in] IXMLDOMAttribute *DOMAttribute,\n                              [out, retval] IXMLDOMAttribute ** attributeNode );\n\n    [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTENODE)]\n    HRESULT removeAttributeNode( [in] IXMLDOMAttribute *DOMAttribute,\n                              [out, retval] IXMLDOMAttribute ** attributeNode );\n\n    [id(DISPID_DOM_ELEMENT_GETELEMENTSBYTAGNAME)]\n    HRESULT getElementsByTagName( [in] BSTR tagName,\n                              [out, retval] IXMLDOMNodeList ** resultList );\n\n    [id(DISPID_DOM_ELEMENT_NORMALIZE)]\n    HRESULT normalize();\n}\n\n[\nlocal,\nobject,\nodl,\ndual,\n/*nonextensible,*/\noleautomation,\nuuid(2933bf87-7b36-11d2-b20e-00c04f983e60),\npointer_default(unique)\n]\ninterface IXMLDOMText : IXMLDOMCharacterData\n{\n    [id(DISPID_DOM_TEXT_SPLITTEXT)]\n    HRESULT splitText( [in] LONG offset,\n                       [out,retval] IXMLDOMText **rightHandTextNode );\n}\n\n[\nlocal,\nobject,\nodl,\ndual,\n/*nonextensible,*/\noleautomation,\nuuid(2933bf88-7b36-11d2-b20e-00c04f983e60),\npointer_default(unique)\n]\ninterface IXMLDOMComment : IXMLDOMCharacterData\n{\n    /* empty */\n}\n\n[\nlocal,\nobject,\nodl,\ndual,\n/*nonextensible,*/\noleautomation,\nuuid(2933bf89-7b36-11d2-b20e-00c04f983e60),\npointer_default(unique)\n]\ninterface IXMLDOMProcessingInstruction : IXMLDOMNode\n{\n    [propget, id(DISPID_DOM_PI_TARGET)]\n    HRESULT target( [out, retval] BSTR *name );\n\n    [propget, id(DISPID_DOM_PI_DATA)]\n    HRESULT data( [out, retval] BSTR *value );\n\n    [propput, id(DISPID_DOM_PI_DATA)]\n    HRESULT data( [in] BSTR value );\n}\n\n[\nlocal,\nobject,\nodl,\ndual,\n/*nonextensible,*/\noleautomation,\nuuid(2933bf8a-7b36-11d2-b20e-00c04f983e60),\npointer_default(unique)\n]\ninterface IXMLDOMCDATASection : IXMLDOMText\n{\n    /* empty */\n}\n\n[\nlocal,\nobject,\nodl,\ndual,\n/*nonextensible,*/\noleautomation,\nuuid(2933bf8b-7b36-11d2-b20e-00c04f983e60),\npointer_default(unique)\n]\ninterface IXMLDOMDocumentType : IXMLDOMNode\n{\n    [propget, id(DISPID_DOM_DOCUMENTTYPE_NAME)]\n    HRESULT name( [out,retval] BSTR *rootName );\n\n    [propget, id(DISPID_DOM_DOCUMENTTYPE_ENTITIES)]\n    HRESULT entities( [out,retval] IXMLDOMNamedNodeMap **entityMap );\n\n    [propget, id(DISPID_DOM_DOCUMENTTYPE_NOTATIONS)]\n    HRESULT notations( [out,retval] IXMLDOMNamedNodeMap **notationMap );\n}\n\n[\nlocal,\nobject,\nodl,\ndual,\nnonextensible,\noleautomation,\nuuid(2933bf8c-7b36-11d2-b20e-00c04f983e60),\npointer_default(unique)\n]\ninterface IXMLDOMNotation : IXMLDOMNode\n{\n    [propget, id(DISPID_DOM_NOTATION_PUBLICID)]\n    HRESULT publicId([out, retval] VARIANT *publicId);\n\n    [propget, id(DISPID_DOM_NOTATION_SYSTEMID)]\n    HRESULT systemId([out, retval] VARIANT *systemId);\n}\n\n[\nlocal,\nobject,\nodl,\ndual,\nnonextensible,\noleautomation,\nuuid(2933bf8d-7b36-11d2-b20e-00c04f983e60),\npointer_default(unique)\n]\ninterface IXMLDOMEntity : IXMLDOMNode\n{\n    [propget, id(DISPID_DOM_ENTITY_PUBLICID)]\n    HRESULT publicId([out, retval] VARIANT *publicId);\n\n    [propget, id(DISPID_DOM_ENTITY_SYSTEMID)]\n    HRESULT systemId([out, retval] VARIANT *systemId);\n\n    [propget, id(DISPID_DOM_ENTITY_NOTATIONNAME)]\n    HRESULT notationName([out, retval] BSTR *name);\n}\n\n[\nlocal,\nobject,\nodl,\ndual,\nnonextensible,\noleautomation,\nuuid(2933bf8e-7b36-11d2-b20e-00c04f983e60),\npointer_default(unique)\n]\ninterface IXMLDOMEntityReference : IXMLDOMNode\n{\n}\n\n[\nlocal,\nobject,\nodl,\ndual,\nnonextensible,\noleautomation,\nuuid(2933bf8f-7b36-11d2-b20e-00c04f983e60),\npointer_default(unique)\n]\ninterface IXMLDOMImplementation : IDispatch\n{\n    [id(DISPID_DOM_IMPLEMENTATION_HASFEATURE)]\n    HRESULT hasFeature([in] BSTR feature, [in] BSTR version, [out, retval] VARIANT_BOOL *pbool);\n}\n\n[\nlocal,\nobject,\nodl,\ndual,\noleautomation,\n/*nonextensible,*/\nhelpstring(\"structure for reporting parse errors\"),\npointer_default(unique),\nuuid (3efaa426-272f-11d2-836f-0000f87a7782)\n]\ninterface IXMLDOMParseError : IDispatch\n{\n    [propget, id(DISPID_VALUE)]\n    HRESULT errorCode([retval, out] LONG *errCode);\n\n    [propget, id(DISPID_DOM_ERROR_URL)]\n    HRESULT url([retval, out] BSTR *p);\n\n    [propget, id(DISPID_DOM_ERROR_REASON)]\n    HRESULT reason([retval, out] BSTR *p);\n\n    [propget, id(DISPID_DOM_ERROR_SRCTEXT)]\n    HRESULT srcText([retval, out] BSTR *p);\n\n    [propget, id(DISPID_DOM_ERROR_LINE)]\n    HRESULT line([retval, out] LONG *lineNo);\n\n    [propget, id(DISPID_DOM_ERROR_LINEPOS)]\n    HRESULT linepos([retval, out] LONG * linePos);\n\n    [propget, id(DISPID_DOM_ERROR_FILEPOS)]\n    HRESULT filepos([retval, out] LONG * filePos);\n}\n\n[\n    hidden,\n    uuid(3efaa427-272f-11d2-836f-0000f87a7782)\n]\ndispinterface XMLDOMDocumentEvents\n{\n    properties:\n    methods:\n    [id(DISPID_XMLDOMEVENT_ONDATAAVAILABLE)]\n    HRESULT ondataavailable();\n\n    [id(DISPID_XMLDOMEVENT_ONREADYSTATECHANGE)]\n    HRESULT onreadystatechange();\n}\n\n[\n    helpstring(\"XML DOM Document\"),\n    progid(\"Microsoft.XMLDOM.1.0\"),\n    vi_progid(\"Microsoft.XMLDOM\"),\n    threading(both),\n    version(1.0),\n    uuid(2933bf90-7b36-11d2-b20e-00c04f983e60)\n]\ncoclass DOMDocument\n{\n    [default] interface IXMLDOMDocument;\n    [default, source] dispinterface XMLDOMDocumentEvents;\n}\n\n[\n    helpstring(\"Free Threaded XML DOM Document\"),\n    progid(\"Microsoft.FreeThreadedXMLDOM.1.0\"),\n    vi_progid(\"Microsoft.FreeThreadedXMLDOM\"),\n    threading(both),\n    version(1.0),\n    uuid(2933bf91-7b36-11d2-b20e-00c04f983e60)\n]\ncoclass DOMFreeThreadedDocument\n{\n    [default] interface IXMLDOMDocument;\n    [default, source] dispinterface XMLDOMDocumentEvents;\n}\n\n[\nobject,\nuuid(ed8c108d-4349-11d2-91a4-00c04f7969e8),\nodl,\ndual,\noleautomation,\npointer_default(unique)\n]\ninterface IXMLHttpRequest : IDispatch\n{\n    [id(1)]\n    HRESULT open([in] BSTR bstrMethod, [in] BSTR bstrUrl,\n                 [in, optional] VARIANT varAsync,\n                 [in, optional] VARIANT varUser,\n                 [in, optional] VARIANT varPassword);\n    [id(2)]\n    HRESULT setRequestHeader([in] BSTR bstrHeader, [in] BSTR bstrValue);\n\n    [id(3)]\n    HRESULT getResponseHeader([in] BSTR bstrHeader, [out, retval] BSTR *pbstrValue);\n\n    [id(4)]\n    HRESULT getAllResponseHeaders([out, retval] BSTR *pbstrHeaders);\n\n    [id(5)]\n    HRESULT send([in, optional] VARIANT varBody);\n\n    [id(6)]\n    HRESULT abort();\n\n    [propget, id(7)]\n    HRESULT status([out, retval] LONG *plStatus);\n\n    [propget, id(8)]\n    HRESULT statusText([out, retval] BSTR *bstrStatus);\n\n    [propget, id(9)]\n    HRESULT responseXML([out, retval] IDispatch **ppBody);\n\n    [propget, id(10)]\n    HRESULT responseText([out, retval] BSTR *pbstrBody);\n\n    [propget, id(11)]\n    HRESULT responseBody([out, retval] VARIANT *pvarBody);\n\n    [propget, id(12)]\n    HRESULT responseStream([out, retval] VARIANT *pvarBody);\n\n    [propget, id(13)]\n    HRESULT readyState([out, retval] LONG *plState);\n\n    [propput, id(14)]\n    HRESULT onreadystatechange([in] IDispatch *pReadyStateSink);\n}\n\n[\n    helpstring(\"XML HTTP Request\"),\n    progid(\"Microsoft.XMLHTTP.1.0\"),\n    vi_progid(\"Microsoft.XMLHTTP\"),\n    threading(apartment),\n    version(1.0),\n    uuid(ed8c108e-4349-11d2-91a4-00c04f7969e8)\n]\ncoclass XMLHTTPRequest\n{\n    [default] interface IXMLHttpRequest;\n}\n"
  },
  {
    "path": "wine/windows/xmldomdid.h",
    "content": "/*\n * Copyright (C) 2005 Mike McCormack\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __XMLDOMDID_H__\n#define __XMLDOMDID_H__\n\n#define DISPID_DOM_BASE                     0x00000001\n#define DISPID_DOM_COLLECTION_BASE          0x000f4240\n#define DISPID_DOM_COLLECTION_MAX           0x002dc6bf\n\n#define DISPID_DOM_NODE                                 0x00000001\n#define DISPID_DOM_NODE_NODENAME                        0x00000002\n#define DISPID_DOM_NODE_NODEVALUE                       0x00000003\n#define DISPID_DOM_NODE_NODETYPE                        0x00000004\n#define DISPID_DOM_NODE_NODETYPEENUM                    0x00000005\n#define DISPID_DOM_NODE_PARENTNODE                      0x00000006\n#define DISPID_DOM_NODE_CHILDNODES                      0x00000007\n#define DISPID_DOM_NODE_FIRSTCHILD                      0x00000008\n#define DISPID_DOM_NODE_LASTCHILD                       0x00000009\n#define DISPID_DOM_NODE_PREVIOUSSIBLING                 0x0000000a\n#define DISPID_DOM_NODE_NEXTSIBLING                     0x0000000b\n#define DISPID_DOM_NODE_ATTRIBUTES                      0x0000000c\n#define DISPID_DOM_NODE_INSERTBEFORE                    0x0000000d\n#define DISPID_DOM_NODE_REPLACECHILD                    0x0000000e\n#define DISPID_DOM_NODE_REMOVECHILD                     0x0000000f\n#define DISPID_DOM_NODE_APPENDCHILD                     0x00000010\n#define DISPID_DOM_NODE_HASCHILDNODES                   0x00000011\n#define DISPID_DOM_NODE_OWNERDOC                        0x00000012\n#define DISPID_DOM_NODE_CLONENODE                       0x00000013\n\n#define DISPID_XMLDOM_NODE                              0x00000014\n#define DISPID_XMLDOM_NODE_STRINGTYPE                   0x00000015\n#define DISPID_XMLDOM_NODE_SPECIFIED                    0x00000016\n#define DISPID_XMLDOM_NODE_DEFINITION                   0x00000017\n#define DISPID_XMLDOM_NODE_TEXT                         0x00000018\n#define DISPID_XMLDOM_NODE_NODETYPEDVALUE               0x00000019\n#define DISPID_XMLDOM_NODE_DATATYPE                     0x0000001a\n#define DISPID_XMLDOM_NODE_XML                          0x0000001b\n#define DISPID_XMLDOM_NODE_TRANSFORMNODE                0x0000001c\n#define DISPID_XMLDOM_NODE_SELECTNODES                  0x0000001d\n#define DISPID_XMLDOM_NODE_SELECTSINGLENODE             0x0000001e\n#define DISPID_XMLDOM_NODE_PARSED                       0x0000001f\n#define DISPID_XMLDOM_NODE_NAMESPACE                    0x00000020\n#define DISPID_XMLDOM_NODE_PREFIX                       0x00000021\n#define DISPID_XMLDOM_NODE_BASENAME                     0x00000022\n#define DISPID_XMLDOM_NODE_TRANSFORMNODETOOBJECT        0x00000023\n#define DISPID_XMLDOM_NODE__TOP                         0x00000024\n\n#define DISPID_DOM_DOCUMENT                             0x00000025\n#define DISPID_DOM_DOCUMENT_DOCTYPE                     0x00000026\n#define DISPID_DOM_DOCUMENT_IMPLEMENTATION              0x00000027\n#define DISPID_DOM_DOCUMENT_DOCUMENTELEMENT             0x00000028\n#define DISPID_DOM_DOCUMENT_CREATEELEMENT               0x00000029\n#define DISPID_DOM_DOCUMENT_CREATEDOCUMENTFRAGMENT      0x0000002a\n#define DISPID_DOM_DOCUMENT_CREATETEXTNODE              0x0000002b\n#define DISPID_DOM_DOCUMENT_CREATECOMMENT               0x0000002c\n#define DISPID_DOM_DOCUMENT_CREATECDATASECTION          0x0000002d\n#define DISPID_DOM_DOCUMENT_CREATEPROCESSINGINSTRUCTION 0x0000002e\n#define DISPID_DOM_DOCUMENT_CREATEATTRIBUTE             0x0000002f\n#define DISPID_DOM_DOCUMENT_CREATEENTITY                0x00000030\n#define DISPID_DOM_DOCUMENT_CREATEENTITYREFERENCE       0x00000031\n#define DISPID_DOM_DOCUMENT_GETELEMENTSBYTAGNAME        0x00000032\n#define DISPID_DOM_DOCUMENT_TOP                         0x00000033\n\n#define DISPID_XMLDOM_DOCUMENT                          0x00000034\n#define DISPID_XMLDOM_DOCUMENT_DOCUMENTNODE             0x00000035\n#define DISPID_XMLDOM_DOCUMENT_CREATENODE               0x00000036\n#define DISPID_XMLDOM_DOCUMENT_CREATENODEEX             0x00000037\n#define DISPID_XMLDOM_DOCUMENT_NODEFROMID               0x00000038\n#define DISPID_XMLDOM_DOCUMENT_DOCUMENTNAMESPACES       0x00000039\n#define DISPID_XMLDOM_DOCUMENT_LOAD                     0x0000003a\n#define DISPID_XMLDOM_DOCUMENT_PARSEERROR               0x0000003b\n#define DISPID_XMLDOM_DOCUMENT_URL                      0x0000003c\n#define DISPID_XMLDOM_DOCUMENT_ASYNC                    0x0000003d\n#define DISPID_XMLDOM_DOCUMENT_ABORT                    0x0000003e\n#define DISPID_XMLDOM_DOCUMENT_LOADXML                  0x0000003f\n#define DISPID_XMLDOM_DOCUMENT_SAVE                     0x00000040\n#define DISPID_XMLDOM_DOCUMENT_VALIDATE                 0x00000041\n#define DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE         0x00000042\n#define DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE       0x00000043\n#define DISPID_XMLDOM_DOCUMENT_ONREADYSTATECHANGE       0x00000044\n#define DISPID_XMLDOM_DOCUMENT_ONDATAAVAILABLE          0x00000045\n#define DISPID_XMLDOM_DOCUMENT_ONTRANSFORMNODE          0x00000046\n#define DISPID_XMLDOM_DOCUMENT__TOP                     0x00000047\n\n#define DISPID_DOM_NODELIST                             0x00000048\n#define DISPID_DOM_NODELIST_ITEM                        0x00000049\n#define DISPID_DOM_NODELIST_LENGTH                      0x0000004a\n#define DISPID_XMLDOM_NODELIST                          0x0000004b\n#define DISPID_XMLDOM_NODELIST_NEXTNODE                 0x0000004c\n#define DISPID_XMLDOM_NODELIST_RESET                    0x0000004d\n#define DISPID_XMLDOM_NODELIST_NEWENUM                  0x0000004e\n#define DISPID_XMLDOM_NODELIST__TOP                     0x0000004f\n\n#define DISPID_DOM_NAMEDNODEMAP                         0x00000050\n#define DISPID_DOM_NAMEDNODEMAP_GETNAMEDITEM            0x00000053\n#define DISPID_DOM_NAMEDNODEMAP_SETNAMEDITEM            0x00000054\n#define DISPID_DOM_NAMEDNODEMAP_REMOVENAMEDITEM         0x00000055\n#define DISPID_XMLDOM_NAMEDNODEMAP                      0x00000056\n#define DISPID_XMLDOM_NAMEDNODEMAP_GETQUALIFIEDITEM     0x00000057\n#define DISPID_XMLDOM_NAMEDNODEMAP_REMOVEQUALIFIEDITEM  0x00000058\n#define DISPID_XMLDOM_NAMEDNODEMAP_NEXTNODE             0x00000059\n#define DISPID_XMLDOM_NAMEDNODEMAP_RESET                0x0000005a\n#define DISPID_XMLDOM_NAMEDNODEMAP_NEWENUM              0x0000005b\n#define DISPID_XMLDOM_NAMEDNODEMAP__TOP                 0x0000005c\n\n#define DISPID_DOM_W3CWRAPPERS                          0x0000005d\n\n#define DISPID_DOM_DOCUMENTFRAGMENT                     0x0000005e\n#define DISPID_DOM_DOCUMENTFRAGMENT__TOP                0x0000005f\n\n#define DISPID_DOM_ELEMENT                              0x00000060\n#define DISPID_DOM_ELEMENT_GETTAGNAME                   0x00000061\n#define DISPID_DOM_ELEMENT_GETATTRIBUTES                0x00000062\n#define DISPID_DOM_ELEMENT_GETATTRIBUTE                 0x00000063\n#define DISPID_DOM_ELEMENT_SETATTRIBUTE                 0x00000064\n#define DISPID_DOM_ELEMENT_REMOVEATTRIBUTE              0x00000065\n#define DISPID_DOM_ELEMENT_GETATTRIBUTENODE             0x00000066\n#define DISPID_DOM_ELEMENT_SETATTRIBUTENODE             0x00000067\n#define DISPID_DOM_ELEMENT_REMOVEATTRIBUTENODE          0x00000068\n#define DISPID_DOM_ELEMENT_GETELEMENTSBYTAGNAME         0x00000069\n#define DISPID_DOM_ELEMENT_NORMALIZE                    0x0000006a\n#define DISPID_DOM_ELEMENT__TOP                         0x0000006b\n\n#define DISPID_DOM_DATA                0x0000006c\n#define DISPID_DOM_DATA_DATA           0x0000006d\n#define DISPID_DOM_DATA_LENGTH         0x0000006e\n#define DISPID_DOM_DATA_SUBSTRING      0x0000006f\n#define DISPID_DOM_DATA_APPEND         0x00000070\n#define DISPID_DOM_DATA_INSERT         0x00000071\n#define DISPID_DOM_DATA_DELETE         0x00000072\n#define DISPID_DOM_DATA_REPLACE        0x00000073\n#define DISPID_DOM_DATA__TOP           0x00000074\n\n#define DISPID_DOM_ATTRIBUTE           0x00000075\n#define DISPID_DOM_ATTRIBUTE_GETNAME   0x00000076\n#define DISPID_DOM_ATTRIBUTE_SPECIFIED 0x00000077\n#define DISPID_DOM_ATTRIBUTE_VALUE     0x00000078\n#define DISPID_DOM_ATTRIBUTE__TOP      0x00000079\n\n#define DISPID_DOM_TEXT                0x0000007a\n#define DISPID_DOM_TEXT_SPLITTEXT      0x0000007b\n#define DISPID_DOM_TEXT_JOINTEXT       0x0000007c\n#define DISPID_DOM_TEXT__TOP           0x0000007d\n\n#define DISPID_DOM_PI                  0x0000007e\n#define DISPID_DOM_PI_TARGET           0x0000007f\n#define DISPID_DOM_PI_DATA             0x00000080\n#define DISPID_DOM_PI__TOP             0x00000081\n\n#define DISPID_DOM_DOCUMENTTYPE                    0x00000082\n#define DISPID_DOM_DOCUMENTTYPE_NAME               0x00000083\n#define DISPID_DOM_DOCUMENTTYPE_ENTITIES           0x00000084\n#define DISPID_DOM_DOCUMENTTYPE_NOTATIONS          0x00000085\n#define DISPID_DOM_DOCUMENTTYPE__TOP               0x00000086\n\n#define DISPID_DOM_NOTATION            0x00000087\n#define DISPID_DOM_NOTATION_PUBLICID   0x00000088\n#define DISPID_DOM_NOTATION_SYSTEMID   0x00000089\n#define DISPID_DOM_NOTATION__TOP       0x0000008a\n\n#define DISPID_DOM_ENTITY              0x0000008b\n#define DISPID_DOM_ENTITY_PUBLICID     0x0000008c\n#define DISPID_DOM_ENTITY_SYSTEMID     0x0000008d\n#define DISPID_DOM_ENTITY_NOTATIONNAME 0x0000008e\n#define DISPID_DOM_ENTITY__TOP         0x0000008f\n\n#define DISPID_DOM_W3CWRAPPERS_TOP     0x0000008f\n\n#define DISPID_DOM_IMPLEMENTATION              0x00000090\n#define DISPID_DOM_IMPLEMENTATION_HASFEATURE   0x00000091\n#define DISPID_DOM_IMPLEMENTATION__TOP         0x00000092\n\n#define DISPID_DOM__TOP                0x000000af\n\n#define  DISPID_DOM_ERROR              0x000000b0\n#define  DISPID_DOM_ERROR_ERRORCODE    0x000000b1\n#define  DISPID_DOM_ERROR_URL          0x000000b2\n#define  DISPID_DOM_ERROR_REASON       0x000000b3\n#define  DISPID_DOM_ERROR_SRCTEXT      0x000000b4\n#define  DISPID_DOM_ERROR_LINE         0x000000b5\n#define  DISPID_DOM_ERROR_LINEPOS      0x000000b6\n#define  DISPID_DOM_ERROR_FILEPOS      0x000000b7\n#define  DISPID_DOM_ERROR__TOP         0x000000b8\n\n#define  DISPID_XTLRUNTIME                     0x000000b9\n#define  DISPID_XTLRUNTIME_UNIQUEID            0x000000ba\n#define  DISPID_XTLRUNTIME_DEPTH               0x000000bb\n#define  DISPID_XTLRUNTIME_CHILDNUMBER         0x000000bc\n#define  DISPID_XTLRUNTIME_ANCESTORCHILDNUMBER 0x000000bd\n#define  DISPID_XTLRUNTIME_ABSOLUTECHILDNUMBER 0x000000be\n#define  DISPID_XTLRUNTIME_FORMATINDEX         0x000000bf\n#define  DISPID_XTLRUNTIME_FORMATNUMBER        0x000000c0\n#define  DISPID_XTLRUNTIME_FORMATDATE          0x000000c1\n#define  DISPID_XTLRUNTIME_FORMATTIME          0x000000c2\n#define  DISPID_XTLRUNTIME__TOP                0x000000c3\n\n#define  DISPID_XMLDOMEVENT                    0x000000c4\n#define  DISPID_XMLDOMEVENT_ONREADYSTATECHANGE DISPID_READYSTATECHANGE\n#define  DISPID_XMLDOMEVENT_ONDATAAVAILABLE    0x000000c5\n#define  DISPID_XMLDOMEVENT__TOP               0x000000c6\n\n#endif /* __XMLDOMDID_H__ */\n"
  },
  {
    "path": "wine/windows/xmldso.idl",
    "content": "/*\n * Copyright (C) 2005 Vijay Kiran Kamuju\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#if 0\n#pragma makedep install\n#endif\n\n#include <idispids.h>\n#include <xmldsodid.h>\n\n#if !defined(progid) && !defined(__WIDL__)\n#define threading(model)\n#define progid(str)\n#define vi_progid(str)\n#endif\n\ninterface IXMLDOMDocument;\n\n[\nlocal,\nobject,\nodl,\ndual,\noleautomation,\nuuid(310afa62-0575-11d2-9ca9-0060b0ec3d39),\npointer_default(unique)\n]\ninterface IXMLDSOControl : IDispatch\n{\n\t[propget,id(DISPID_XMLDSO_DOCUMENT)] \n        HRESULT XMLDocument([out, retval] IXMLDOMDocument** ppDoc);\n\n\t[propput,id(DISPID_XMLDSO_DOCUMENT)] \n        HRESULT XMLDocument([in] IXMLDOMDocument* ppDoc);\n\n\t[propget,id(DISPID_XMLDSO_JAVADSOCOMPATIBLE)] \n        HRESULT JavaDSOCompatible([out, retval] BOOL* fJavaDSOCompatible);\n\n\t[propput,id(DISPID_XMLDSO_JAVADSOCOMPATIBLE)] \n        HRESULT JavaDSOCompatible([in]  BOOL fJavaDSOCompatible);\n\n\t[propget, id(DISPID_READYSTATE)] \n        HRESULT readyState([out, retval] long *state);\n}\n\n[\n    helpstring(\"XML Data Source Object\"),\n    progid(\"Microsoft.XMLDSO.1.0\"),\n    vi_progid(\"Microsoft.XMLDSO\"),\n    threading(apartment),\n    version(1.0),\n    uuid(550dda30-0541-11d2-9ca9-0060b0ec3d39)\n]\ncoclass XMLDSOControl\n{\n\t[default] interface IXMLDSOControl;\n}\n"
  },
  {
    "path": "wine/windows/xmldsodid.h",
    "content": "/*\n * Copyright (C) 2005 Vijay Kiran Kamuju\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __XMLDSODID_H__\n#define __XMLDSODID_H__\n\n#define DISPID_XOBJ_MIN                 0x00010000\n#define DISPID_XOBJ_MAX                 0x0001FFFF\n#define DISPID_XOBJ_BASE                0x00010000\n\n#define  DISPID_XMLDSO                      0x00010000\n#define  DISPID_XMLDSO_DOCUMENT             0x00010001\n#define  DISPID_XMLDSO_JAVADSOCOMPATIBLE    0x00010002\n\n#endif /* __XMLDSODID_H__ */\n"
  },
  {
    "path": "wine/windows/xmllite.idl",
    "content": "/*\n * Copyright (C) 2010 Nikolay Sivov\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nimport \"unknwn.idl\";\nimport \"objidl.idl\";\nimport \"oaidl.idl\";\n\ntypedef enum XmlNodeType {\n    XmlNodeType_None                  = 0,\n    XmlNodeType_Element               = 1,\n    XmlNodeType_Attribute             = 2,\n    XmlNodeType_Text                  = 3,\n    XmlNodeType_CDATA                 = 4,\n    XmlNodeType_ProcessingInstruction = 7,\n    XmlNodeType_Comment               = 8,\n    XmlNodeType_DocumentType          = 10,\n    XmlNodeType_Whitespace            = 13,\n    XmlNodeType_EndElement            = 15,\n    XmlNodeType_XmlDeclaration        = 17,\n    _XmlNodeType_Last                 = 17\n} XmlNodeType;\n\n/* IXmlReader */\n[\n  local,\n  object,\n  uuid(7279fc81-709d-4095-b63d-69fe4b0d9030),\n  pointer_default(unique)\n]\ninterface IXmlReader : IUnknown\n{\n    HRESULT SetInput( [in] IUnknown *input);\n    HRESULT GetProperty( [in] UINT property, [out] LONG_PTR *value);\n    HRESULT SetProperty( [in] UINT property, [in] LONG_PTR value);\n    HRESULT Read( [out] XmlNodeType *node_type);\n    HRESULT GetNodeType( [out] XmlNodeType *node_type);\n    HRESULT MoveToFirstAttribute(void);\n    HRESULT MoveToNextAttribute(void);\n    HRESULT MoveToAttributeByName( [in] LPCWSTR local_name,\n                                   [in] LPCWSTR namespaceUri);\n    HRESULT MoveToElement(void);\n    HRESULT GetQualifiedName( [out] LPCWSTR *qualifiedName,\n                              [out] UINT *qualifiedName_length);\n    HRESULT GetNamespaceUri( [out] LPCWSTR *namespaceUri,\n                             [out] UINT *nnamespaceUri_length);\n    HRESULT GetLocalName( [out] LPCWSTR *local_name,\n                          [out] UINT *locale_name_length);\n    HRESULT GetPrefix( [out] LPCWSTR *prefix,\n                       [out] UINT *prefix_length);\n    HRESULT GetValue( [out] LPCWSTR *value,\n                      [out] UINT *value_length);\n    HRESULT ReadValueChunk( [out] WCHAR *buffer,\n                            [in]  UINT chunk_size,\n                            [in,out] UINT *read);\n    HRESULT GetBaseUri( [out] LPCWSTR *baseUri,\n                        [out] UINT *baseUri_length);\n    BOOL IsDefault(void);\n    BOOL IsEmptyElement(void);\n    HRESULT GetLineNumber( [out] UINT *lineNumber);\n    HRESULT GetLinePosition( [out] UINT *linePosition);\n    HRESULT GetAttributeCount( [out] UINT *attributeCount);\n    HRESULT GetDepth( [out] UINT *depth);\n    BOOL IsEOF(void);\n}\n\n/* IXmlResolver */\n[\n  local,\n  object,\n  uuid(7279fc82-709d-4095-b63d-69fe4b0d9030),\n  pointer_default(unique)\n]\ninterface IXmlResolver : IUnknown\n{\n    HRESULT ResolveUri([in] LPCWSTR base_uri,\n                       [in] LPCWSTR public_id,\n                       [in] LPCWSTR system_id,\n                       [out] IUnknown **input);\n}\n\n/* IXmlReader state */\ntypedef enum XmlReadState\n{\n    XmlReadState_Initial,\n    XmlReadState_Interactive,\n    XmlReadState_Error,\n    XmlReadState_EndOfFile,\n    XmlReadState_Closed\n} XmlReadState;\n\n/* conformance levels */\ntypedef enum XmlConformanceLevel\n{\n    XmlConformanceLevel_Auto,\n    XmlConformanceLevel_Fragment,\n    XmlConformanceLevel_Document,\n    _XmlConformanceLevel_Last = XmlConformanceLevel_Document\n} XmlConformanceLevel;\n\n/* DTD processing mode */\ntypedef enum DtdProcessing\n{\n    DtdProcessing_Prohibit,\n    DtdProcessing_Parse,\n    _DtdProcessing_Last = DtdProcessing_Parse\n} DtdProcessing;\n\n/* IXmlReader properties */\ntypedef enum XmlReaderProperty\n{\n    XmlReaderProperty_MultiLanguage,\n    XmlReaderProperty_ConformanceLevel,\n    XmlReaderProperty_RandomAccess,\n    XmlReaderProperty_XmlResolver,\n    XmlReaderProperty_DtdProcessing,\n    XmlReaderProperty_ReadState,\n    XmlReaderProperty_MaxElementDepth,\n    XmlReaderProperty_MaxEntityExpansion,\n    _XmlReaderProperty_Last = XmlReaderProperty_MaxEntityExpansion\n} XmlReaderProperty;\n\n/* reader error codes */\ntypedef enum XmlError\n{\n    MX_E_MX = 0xc00cee00,\n    MX_E_INPUTEND,\n    MX_E_ENCODING,\n    MX_E_ENCODINGSWITCH,\n    MX_E_ENCODINGSIGNATURE,\n    WC_E_WC = 0xc00cee20,\n    WC_E_WHITESPACE,\n    WC_E_SEMICOLON,\n    WC_E_GREATERTHAN,\n    WC_E_QUOTE,\n    WC_E_EQUAL,\n    WC_E_LESSTHAN,\n    WC_E_HEXDIGIT,\n    WC_E_DIGIT,\n    WC_E_LEFTBRACKET,\n    WC_E_LEFTPAREN,\n    WC_E_XMLCHARACTER,\n    WC_E_NAMECHARACTER,\n    WC_E_SYNTAX,\n    WC_E_CDSECT,\n    WC_E_COMMENT,\n    WC_E_CONDSECT,\n    WC_E_DECLATTLIST,\n    WC_E_DECLDOCTYPE,\n    WC_E_DECLELEMENT,\n    WC_E_DECLENTITY,\n    WC_E_DECLNOTATION,\n    WC_E_NDATA,\n    WC_E_PUBLIC,\n    WC_E_SYSTEM,\n    WC_E_NAME,\n    WC_E_ROOTELEMENT,\n    WC_E_ELEMENTMATCH,\n    WC_E_UNIQUEATTRIBUTE,\n    WC_E_TEXTXMLDECL,\n    WC_E_LEADINGXML,\n    WC_E_TEXTDECL,\n    WC_E_XMLDECL,\n    WC_E_ENCNAME,\n    WC_E_PUBLICID,\n    WC_E_PESINTERNALSUBSET,\n    WC_E_PESBETWEENDECLS,\n    WC_E_NORECURSION,\n    WC_E_ENTITYCONTENT,\n    WC_E_UNDECLAREDENTITY,\n    WC_E_PARSEDENTITY,\n    WC_E_NOEXTERNALENTITYREF,\n    WC_E_PI,\n    WC_E_SYSTEMID,\n    WC_E_QUESTIONMARK,\n    WC_E_CDSECTEND,\n    WC_E_MOREDATA,\n    WC_E_DTDPROHIBITED,\n    WC_E_INVALIDXMLSPACE,\n    NC_E_NC = 0xc00cee60,\n    NC_E_QNAMECHARACTER,\n    NC_E_QNAMECOLON,\n    NC_E_NAMECOLON,\n    NC_E_DECLAREDPREFIX,\n    NC_E_UNDECLAREDPREFIX,\n    NC_E_EMPTYURI,\n    NC_E_XMLPREFIXRESERVED,\n    NC_E_XMLNSPREFIXRESERVED,\n    NC_E_XMLURIRESERVED,\n    NC_E_XMLNSURIRESERVED,\n    SC_E_SC = 0xc00cee80,\n    SC_E_MAXELEMENTDEPTH,\n    SC_E_MAXENTITYEXPANSION,\n    WR_E_WR = 0xc00cef00,\n    WR_E_NONWHITESPACE,\n    WR_E_NSPREFIXDECLARED,\n    WR_E_NSPREFIXWITHEMPTYNSURI,\n    WR_E_DUPLICATEATTRIBUTE,\n    WR_E_XMLNSPREFIXDECLARATION,\n    WR_E_XMLPREFIXDECLARATION,\n    WR_E_XMLURIDECLARATION,\n    WR_E_XMLNSURIDECLARATION,\n    WR_E_NAMESPACEUNDECLARED,\n    WR_E_INVALIDXMLSPACE,\n    WR_E_INVALIDACTION,\n    WR_E_INVALIDSURROGATEPAIR,\n    XML_E_INVALID_DECIMAL = 0xc00ce01d,\n    XML_E_INVALID_HEXIDECIMAL,\n    XML_E_INVALID_UNICODE,\n    XML_E_INVALIDENCODING = 0xc00ce06e\n} XmlError;\n\n/* IXmlReader construction */\ncpp_quote(\"STDAPI CreateXmlReader(REFIID riid, void **ppvObject, IMalloc *pMalloc);\")\n\ncpp_quote(\"typedef IUnknown IXmlReaderInput;\")\ncpp_quote(\"STDAPI CreateXmlReaderInputWithEncodingName(IUnknown *stream, IMalloc *pMalloc,\")\ncpp_quote(\"                                            LPCWSTR encoding, BOOL hint,\")\ncpp_quote(\"                                            LPCWSTR base_uri, IXmlReaderInput **ppInput);\")\n\ntypedef enum XmlStandalone\n{\n    XmlStandalone_Omit,\n    XmlStandalone_Yes,\n    XmlStandalone_No,\n    _XmlStandalone_Last = XmlStandalone_No\n} XmlStandalone;\n\ntypedef enum XmlWriterProperty\n{\n    XmlWriterProperty_MultiLanguage,\n    XmlWriterProperty_Indent,\n    XmlWriterProperty_ByteOrderMark,\n    XmlWriterProperty_OmitXmlDeclaration,\n    XmlWriterProperty_ConformanceLevel,\n    _XmlWriterProperty_Last = XmlWriterProperty_OmitXmlDeclaration\n} XmlWriterProperty;\n\n/* IXmlWriter */\n[\n  local,\n  object,\n  uuid(7279FC88-709D-4095-B63D-69FE4B0D9030),\n  pointer_default(unique)\n]\ninterface IXmlWriter : IUnknown\n{\n    HRESULT SetOutput([in] IUnknown *pOutput);\n    HRESULT GetProperty([in] UINT nProperty, [out] LONG_PTR *ppValue);\n    HRESULT SetProperty([in] UINT nProperty, [in] LONG_PTR pValue);\n    HRESULT WriteAttributes([in] IXmlReader *pReader, [in] BOOL fWriteDefaultAttributes);\n    HRESULT WriteAttributeString([in] LPCWSTR pwszPrefix, [in] LPCWSTR pwszLocalName,\n                                 [in] LPCWSTR pwszNamespaceUri, [in] LPCWSTR pwszValue);\n    HRESULT WriteCData([in] LPCWSTR pwszText);\n    HRESULT WriteCharEntity([in] WCHAR wch);\n    HRESULT WriteChars([in] const WCHAR *pwch, [in] UINT cwch);\n    HRESULT WriteComment([in] LPCWSTR pwszComment);\n    HRESULT WriteDocType([in] LPCWSTR pwszName, [in] LPCWSTR pwszPublicId,\n                         [in] LPCWSTR pwszSystemId, [in] LPCWSTR pwszSubset);\n    HRESULT WriteElementString([in] LPCWSTR pwszPrefix, [in] LPCWSTR pwszLocalName,\n                               [in] LPCWSTR pwszNamespaceUri, [in] LPCWSTR pwszValue);\n    HRESULT WriteEndDocument();\n    HRESULT WriteEndElement();\n    HRESULT WriteEntityRef([in] LPCWSTR pwszName);\n    HRESULT WriteFullEndElement();\n    HRESULT WriteName([in] LPCWSTR pwszName);\n    HRESULT WriteNmToken([in] LPCWSTR pwszNmToken);\n    HRESULT WriteNode([in] IXmlReader *pReader, [in] BOOL fWriteDefaultAttributes);\n    HRESULT WriteNodeShallow([in] IXmlReader *pReader, [in] BOOL fWriteDefaultAttributes);\n    HRESULT WriteProcessingInstruction([in] LPCWSTR pwszName, [in] LPCWSTR pwszText);\n    HRESULT WriteQualifiedName([in] LPCWSTR pwszLocalName, [in] LPCWSTR pwszNamespaceUri);\n    HRESULT WriteRaw([in] LPCWSTR pwszData);\n    HRESULT WriteRawChars([in] const WCHAR *pwch, [in] UINT cwch);\n    HRESULT WriteStartDocument([in] XmlStandalone standalone);\n    HRESULT WriteStartElement([in] LPCWSTR pwszPrefix, [in] LPCWSTR pwszLocalName,\n                              [in]  LPCWSTR pwszNamespaceUri);\n    HRESULT WriteString([in] LPCWSTR pwszText);\n    HRESULT WriteSurrogateCharEntity([in] WCHAR wchLow, [in] WCHAR wchHigh);\n    HRESULT WriteWhitespace([in] LPCWSTR pwszWhitespace);\n    HRESULT Flush();\n}\n\n/* IXmlWriter construction */\ncpp_quote(\"STDAPI CreateXmlWriter(REFIID riid, void **ppvObject, IMalloc *pMalloc);\")\n\ncpp_quote(\"typedef IUnknown IXmlWriterOutput;\")\ncpp_quote(\"STDAPI CreateXmlWriterOutputWithEncodingName(IUnknown *stream, IMalloc *pMalloc,\")\ncpp_quote(\"                                             LPCWSTR encoding, IXmlWriterOutput **output);\")\ncpp_quote(\"STDAPI CreateXmlWriterOutputWithEncodingCodePage(IUnknown *stream, IMalloc *pMalloc,\")\ncpp_quote(\"    UINT codepage, IXmlWriterOutput **output);\")\n"
  },
  {
    "path": "wine/windows/zmouse.h",
    "content": "/*\n * Scroll wheel mouse definitions\n *\n * Copyright (C) 2000 CodeWeavers\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_ZMOUSE_H\n#define __WINE_ZMOUSE_H\n\n#define MSH_MOUSEWHEEL \"MSWHEEL_ROLLMSG\"\n\n#define MOUSEZ_CLASSNAME  \"MouseZ\"\n#define MOUSEZ_TITLE      \"Magellan MSWHEEL\"\n\n#define MSH_WHEELMODULE_CLASS (MOUSEZ_CLASSNAME)\n#define MSH_WHEELMODULE_TITLE (MOUSEZ_TITLE)\n\n#define MSH_WHEELSUPPORT \"MSH_WHEELSUPPORT_MSG\"\n\n#define MSH_SCROLL_LINES \"MSH_SCROLL_LINES_MSG\"\n\n#define WHEEL_DELTA      120\n\n#ifndef WHEEL_PAGESCROLL\n#define WHEEL_PAGESCROLL  (UINT_MAX)\n#endif\n\n#ifndef SPI_SETWHEELSCROLLLINES\n#define SPI_SETWHEELSCROLLLINES   105\n#endif\n\n#endif  /* __WINE_ZMOUSE_H */\n"
  },
  {
    "path": "wine/wine/config.h",
    "content": "/* include/config.h.  Generated from config.h.in by configure.  */\n/* include/config.h.in.  Generated from configure.ac by autoheader.  */\n\n#ifndef __WINE_CONFIG_H\n#define __WINE_CONFIG_H\n#ifndef WINE_CROSSTEST\n\n/* Define to a function attribute for Microsoft hotpatch assembly prefix. */\n#define DECLSPEC_HOTPATCH __attribute__((__ms_hook_prologue__))\n\n/* Define to the file extension for executables. */\n#define EXEEXT \".exe\"\n\n/* Define to 1 if you have the `acosh' function. */\n/* #undef HAVE_ACOSH */\n\n/* Define to 1 if you have the `acoshf' function. */\n/* #undef HAVE_ACOSHF */\n\n/* Define to 1 if you have the <alias.h> header file. */\n/* #undef HAVE_ALIAS_H */\n\n/* Define to 1 if you have the <alsa/asoundlib.h> header file. */\n/* #undef HAVE_ALSA_ASOUNDLIB_H */\n\n/* Define to 1 if you have the <AL/al.h> header file. */\n/* #undef HAVE_AL_AL_H */\n\n/* Define to 1 if you have the <ApplicationServices/ApplicationServices.h>\n   header file. */\n/* #undef HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H */\n\n/* Define to 1 if you have the <arpa/inet.h> header file. */\n#define HAVE_ARPA_INET_H 1\n\n/* Define to 1 if you have the <arpa/nameser.h> header file. */\n#define HAVE_ARPA_NAMESER_H 1\n\n/* Define to 1 if you have the `asctime_r' function. */\n#define HAVE_ASCTIME_R 1\n\n/* Define to 1 if you have the `asinh' function. */\n/* #undef HAVE_ASINH */\n\n/* Define to 1 if you have the `asinhf' function. */\n/* #undef HAVE_ASINHF */\n\n/* Define to 1 if you have the <asm/types.h> header file. */\n#define HAVE_ASM_TYPES_H 1\n\n/* Define to 1 if you have the <asm/user.h> header file. */\n/* #undef HAVE_ASM_USER_H */\n\n/* Define to 1 if you have the `atanh' function. */\n/* #undef HAVE_ATANH */\n\n/* Define to 1 if you have the `atanhf' function. */\n/* #undef HAVE_ATANHF */\n\n/* Define to 1 if you have the <AudioToolbox/AudioConverter.h> header file. */\n/* #undef HAVE_AUDIOTOOLBOX_AUDIOCONVERTER_H */\n\n/* Define to 1 if you have the <AudioUnit/AudioComponent.h> header file. */\n/* #undef HAVE_AUDIOUNIT_AUDIOCOMPONENT_H */\n\n/* Define to 1 if you have the <AudioUnit/AudioUnit.h> header file. */\n/* #undef HAVE_AUDIOUNIT_AUDIOUNIT_H */\n\n/* Define to 1 if you have the `AUGraphAddNode' function. */\n/* #undef HAVE_AUGRAPHADDNODE */\n\n/* Define to 1 if you have the <capi20.h> header file. */\n/* #undef HAVE_CAPI20_H */\n\n/* Define to 1 if you have the <Carbon/Carbon.h> header file. */\n/* #undef HAVE_CARBON_CARBON_H */\n\n/* Define to 1 if you have the `cbrt' function. */\n#define HAVE_CBRT 1\n\n/* Define to 1 if you have the `cbrtf' function. */\n#define HAVE_CBRTF 1\n\n/* Define to 1 if you have the `chsize' function. */\n/* #undef HAVE_CHSIZE */\n\n/* Define to 1 if you have the `clock_gettime' function. */\n#define HAVE_CLOCK_GETTIME 1\n\n/* Define to 1 if you have the <CL/cl.h> header file. */\n/* #undef HAVE_CL_CL_H */\n\n/* Define to 1 if you have the <CommonCrypto/CommonCryptor.h> header file. */\n/* #undef HAVE_COMMONCRYPTO_COMMONCRYPTOR_H */\n\n/* Define to 1 if you have the <CoreAudio/CoreAudio.h> header file. */\n/* #undef HAVE_COREAUDIO_COREAUDIO_H */\n\n/* Define to 1 if you have the <CoreServices/CoreServices.h> header file. */\n/* #undef HAVE_CORESERVICES_CORESERVICES_H */\n\n/* Define to 1 if you have the <cups/cups.h> header file. */\n/* #undef HAVE_CUPS_CUPS_H */\n\n/* Define to 1 if you have the <cups/ppd.h> header file. */\n/* #undef HAVE_CUPS_PPD_H */\n\n/* Define to 1 if you have the <curses.h> header file. */\n#define HAVE_CURSES_H 1\n\n/* Define if you have the daylight variable */\n#define HAVE_DAYLIGHT 1\n\n/* Define to 1 if you have the <direct.h> header file. */\n/* #undef HAVE_DIRECT_H */\n\n/* Define to 1 if you have the <dirent.h> header file. */\n#define HAVE_DIRENT_H 1\n\n/* Define to 1 if you have the <DiskArbitration/DiskArbitration.h> header\n   file. */\n/* #undef HAVE_DISKARBITRATION_DISKARBITRATION_H */\n\n/* Define to 1 if you have the `dladdr' function. */\n/* #undef HAVE_DLADDR */\n\n/* Define to 1 if you have the <dlfcn.h> header file. */\n#define HAVE_DLFCN_H 1\n\n/* Define to 1 if you have the `dlopen' function. */\n#define HAVE_DLOPEN 1\n\n/* Define to 1 if you have the <EGL/egl.h> header file. */\n/* #undef HAVE_EGL_EGL_H */\n\n/* Define to 1 if you have the <elf.h> header file. */\n#define HAVE_ELF_H 1\n\n/* Define to 1 if you have the `epoll_create' function. */\n/* #undef HAVE_EPOLL_CREATE */\n\n/* Define to 1 if you have the `erf' function. */\n/* #undef HAVE_ERF */\n\n/* Define to 1 if you have the `erfc' function. */\n/* #undef HAVE_ERFC */\n\n/* Define to 1 if you have the `erfcf' function. */\n/* #undef HAVE_ERFCF */\n\n/* Define to 1 if you have the `erff' function. */\n/* #undef HAVE_ERFF */\n\n/* Define to 1 if you have the `exp2' function. */\n#define HAVE_EXP2 1\n\n/* Define to 1 if you have the `exp2f' function. */\n#define HAVE_EXP2F 1\n\n/* Define to 1 if you have the `expm1' function. */\n/* #undef HAVE_EXPM1 */\n\n/* Define to 1 if you have the `expm1f' function. */\n/* #undef HAVE_EXPM1F */\n\n/* Define to 1 if you have the `fallocate' function. */\n/* #undef HAVE_FALLOCATE */\n\n/* Define to 1 if you have the `ffs' function. */\n#define HAVE_FFS 1\n\n/* Define to 1 if you have the `finitef' function. */\n#define HAVE_FINITEF 1\n\n/* Define to 1 if you have the <float.h> header file. */\n#define HAVE_FLOAT_H 1\n\n/* Define to 1 if you have the `fnmatch' function. */\n#define HAVE_FNMATCH 1\n\n/* Define to 1 if you have the <fnmatch.h> header file. */\n#define HAVE_FNMATCH_H 1\n\n/* Define to 1 if you have the <fontconfig/fontconfig.h> header file. */\n#define HAVE_FONTCONFIG_FONTCONFIG_H 1\n\n/* Define to 1 if you have the `fork' function. */\n#define HAVE_FORK 1\n\n/* Define to 1 if you have the `fpclass' function. */\n/* #undef HAVE_FPCLASS */\n\n/* Define if FreeType 2 is installed */\n/* #undef HAVE_FREETYPE */\n\n/* Define to 1 if the system has the type `fsblkcnt_t'. */\n#define HAVE_FSBLKCNT_T 1\n\n/* Define to 1 if the system has the type `fsfilcnt_t'. */\n#define HAVE_FSFILCNT_T 1\n\n/* Define to 1 if you have the `fstatfs' function. */\n#define HAVE_FSTATFS 1\n\n/* Define to 1 if you have the `fstatvfs' function. */\n#define HAVE_FSTATVFS 1\n\n/* Define to 1 if you have the <ft2build.h> header file. */\n/* #undef HAVE_FT2BUILD_H */\n\n/* Define to 1 if you have the `ftruncate' function. */\n#define HAVE_FTRUNCATE 1\n\n/* Define to 1 if the system has the type `FT_TrueTypeEngineType'. */\n/* #undef HAVE_FT_TRUETYPEENGINETYPE */\n\n/* Define to 1 if you have the `futimens' function. */\n#define HAVE_FUTIMENS 1\n\n/* Define to 1 if you have the `futimes' function. */\n#define HAVE_FUTIMES 1\n\n/* Define to 1 if you have the `futimesat' function. */\n#define HAVE_FUTIMESAT 1\n\n/* Define to 1 if you have the `getaddrinfo' function. */\n#define HAVE_GETADDRINFO 1\n\n/* Define to 1 if you have the `getattrlist' function. */\n/* #undef HAVE_GETATTRLIST */\n\n/* Define to 1 if you have the `getauxval' function. */\n/* #undef HAVE_GETAUXVAL */\n\n/* Define to 1 if you have the `getifaddrs' function. */\n/* #undef HAVE_GETIFADDRS */\n\n/* Define to 1 if you have the `getnameinfo' function. */\n#define HAVE_GETNAMEINFO 1\n\n/* Define to 1 if you have the `getnetbyname' function. */\n/* #undef HAVE_GETNETBYNAME */\n\n/* Define to 1 if you have the <getopt.h> header file. */\n#define HAVE_GETOPT_H 1\n\n/* Define to 1 if you have the `getopt_long_only' function. */\n#define HAVE_GETOPT_LONG_ONLY 1\n\n/* Define to 1 if you have the `getprotobyname' function. */\n#define HAVE_GETPROTOBYNAME 1\n\n/* Define to 1 if you have the `getprotobynumber' function. */\n#define HAVE_GETPROTOBYNUMBER 1\n\n/* Define to 1 if you have the `getpwuid' function. */\n#define HAVE_GETPWUID 1\n\n/* Define to 1 if you have the `getservbyport' function. */\n#define HAVE_GETSERVBYPORT 1\n\n/* Define to 1 if you have the <gettext-po.h> header file. */\n#define HAVE_GETTEXT_PO_H 1\n\n/* Define to 1 if you have the `gettimeofday' function. */\n#define HAVE_GETTIMEOFDAY 1\n\n/* Define to 1 if you have the `getuid' function. */\n#define HAVE_GETUID 1\n\n/* Define to 1 if you have the `gnutls_cipher_init' function. */\n/* #undef HAVE_GNUTLS_CIPHER_INIT */\n\n/* Define if we have the libgphoto2 development environment */\n/* #undef HAVE_GPHOTO2 */\n\n/* Define if we have the libgphoto2_port development environment */\n/* #undef HAVE_GPHOTO2_PORT */\n\n/* Define to 1 if you have the <grp.h> header file. */\n#define HAVE_GRP_H 1\n\n/* Define to 1 if you have the <gsm/gsm.h> header file. */\n#define HAVE_GSM_GSM_H 1\n\n/* Define to 1 if you have the <gsm.h> header file. */\n/* #undef HAVE_GSM_H */\n\n/* Define to 1 if you have the <gssapi/gssapi_ext.h> header file. */\n/* #undef HAVE_GSSAPI_GSSAPI_EXT_H */\n\n/* Define to 1 if you have the <gssapi/gssapi.h> header file. */\n/* #undef HAVE_GSSAPI_GSSAPI_H */\n\n/* Define to 1 if you have the <ieeefp.h> header file. */\n#define HAVE_IEEEFP_H 1\n\n/* Define to 1 if you have the <ifaddrs.h> header file. */\n#define HAVE_IFADDRS_H 1\n\n/* Define to 1 if you have the `if_nameindex' function. */\n#define HAVE_IF_NAMEINDEX 1\n\n/* Define to 1 if you have the `inet_addr' function. */\n#define HAVE_INET_ADDR 1\n\n/* Define to 1 if you have the <inet/mib2.h> header file. */\n/* #undef HAVE_INET_MIB2_H */\n\n/* Define to 1 if you have the `inet_network' function. */\n#define HAVE_INET_NETWORK 1\n\n/* Define to 1 if you have the `inet_ntop' function. */\n#define HAVE_INET_NTOP 1\n\n/* Define to 1 if you have the `inet_pton' function. */\n#define HAVE_INET_PTON 1\n\n/* Define to 1 if you have the <inttypes.h> header file. */\n#define HAVE_INTTYPES_H 1\n\n/* Define to 1 if you have the `IOHIDManagerCreate' function. */\n/* #undef HAVE_IOHIDMANAGERCREATE */\n\n/* Define to 1 if you have the <IOKit/hid/IOHIDLib.h> header file. */\n/* #undef HAVE_IOKIT_HID_IOHIDLIB_H */\n\n/* Define to 1 if you have the <IOKit/IOKitLib.h> header file. */\n/* #undef HAVE_IOKIT_IOKITLIB_H */\n\n/* Define to 1 if you have the <io.h> header file. */\n#define HAVE_IO_H 1\n\n/* Define to 1 if you have the `isfinite' function. */\n#define HAVE_ISFINITE 1\n\n/* Define to 1 if you have the `isinf' function. */\n#define HAVE_ISINF 1\n\n/* Define to 1 if you have the `isnan' function. */\n#define HAVE_ISNAN 1\n\n/* Define to 1 if you have the `isnanf' function. */\n#define HAVE_ISNANF 1\n\n/* Define to 1 if you have the `j0' function. */\n/* #undef HAVE_J0 */\n\n/* Define to 1 if you have the `j1' function. */\n/* #undef HAVE_J1 */\n\n/* Define to 1 if you have the `jn' function. */\n/* #undef HAVE_JN */\n\n/* Define to 1 if you have the <jpeglib.h> header file. */\n#define HAVE_JPEGLIB_H 1\n\n/* Define to 1 if you have the `kqueue' function. */\n/* #undef HAVE_KQUEUE */\n\n/* Define to 1 if you have the <krb5/krb5.h> header file. */\n/* #undef HAVE_KRB5_KRB5_H */\n\n/* Define to 1 if you have the <kstat.h> header file. */\n/* #undef HAVE_KSTAT_H */\n\n/* Define to 1 if you have the <lber.h> header file. */\n#define HAVE_LBER_H 1\n\n/* Define if you have the LittleCMS development environment */\n#define HAVE_LCMS2 1\n\n/* Define to 1 if you have the <lcms2.h> header file. */\n#define HAVE_LCMS2_H 1\n\n/* Define if you have the OpenLDAP development environment */\n#define HAVE_LDAP 1\n\n/* Define to 1 if you have the `ldap_count_references' function. */\n#define HAVE_LDAP_COUNT_REFERENCES 1\n\n/* Define to 1 if you have the `ldap_first_reference' function. */\n#define HAVE_LDAP_FIRST_REFERENCE 1\n\n/* Define to 1 if you have the <ldap.h> header file. */\n#define HAVE_LDAP_H 1\n\n/* Define to 1 if you have the `ldap_next_reference' function. */\n#define HAVE_LDAP_NEXT_REFERENCE 1\n\n/* Define to 1 if you have the `ldap_parse_reference' function. */\n#define HAVE_LDAP_PARSE_REFERENCE 1\n\n/* Define to 1 if you have the `ldap_parse_sortresponse_control' function. */\n#define HAVE_LDAP_PARSE_SORTRESPONSE_CONTROL 1\n\n/* Define to 1 if you have the `ldap_parse_sort_control' function. */\n/* #undef HAVE_LDAP_PARSE_SORT_CONTROL */\n\n/* Define to 1 if you have the `ldap_parse_vlvresponse_control' function. */\n#define HAVE_LDAP_PARSE_VLVRESPONSE_CONTROL 1\n\n/* Define to 1 if you have the `ldap_parse_vlv_control' function. */\n/* #undef HAVE_LDAP_PARSE_VLV_CONTROL */\n\n/* Define to 1 if you have the `lgamma' function. */\n/* #undef HAVE_LGAMMA */\n\n/* Define to 1 if you have the `lgammaf' function. */\n/* #undef HAVE_LGAMMAF */\n\n/* Define to 1 if you have the `gettextpo' library (-lgettextpo). */\n#define HAVE_LIBGETTEXTPO 1\n\n/* Define to 1 if you have the `i386' library (-li386). */\n/* #undef HAVE_LIBI386 */\n\n/* Define to 1 if you have the `kstat' library (-lkstat). */\n/* #undef HAVE_LIBKSTAT */\n\n/* Define to 1 if you have the `ossaudio' library (-lossaudio). */\n/* #undef HAVE_LIBOSSAUDIO */\n\n/* Define to 1 if you have the `procstat' library (-lprocstat). */\n/* #undef HAVE_LIBPROCSTAT */\n\n/* Define to 1 if you have the <libprocstat.h> header file. */\n/* #undef HAVE_LIBPROCSTAT_H */\n\n/* Define to 1 if you have the <libproc.h> header file. */\n/* #undef HAVE_LIBPROC_H */\n\n/* Define to 1 if you have the <libudev.h> header file. */\n/* #undef HAVE_LIBUDEV_H */\n\n/* Define to 1 if you have the <libunwind.h> header file. */\n/* #undef HAVE_LIBUNWIND_H */\n\n/* Define to 1 if you have the <libv4l1.h> header file. */\n/* #undef HAVE_LIBV4L1_H */\n\n/* Define if you have the libxml2 library */\n#define HAVE_LIBXML2 1\n\n/* Define to 1 if you have the <libxml/parser.h> header file. */\n#define HAVE_LIBXML_PARSER_H 1\n\n/* Define to 1 if you have the <libxml/SAX2.h> header file. */\n#define HAVE_LIBXML_SAX2_H 1\n\n/* Define to 1 if you have the <libxml/xmlsave.h> header file. */\n#define HAVE_LIBXML_XMLSAVE_H 1\n\n/* Define if you have the X Shape extension */\n/* #undef HAVE_LIBXSHAPE */\n\n/* Define to 1 if you have the <libxslt/pattern.h> header file. */\n#define HAVE_LIBXSLT_PATTERN_H 1\n\n/* Define to 1 if you have the <libxslt/transform.h> header file. */\n#define HAVE_LIBXSLT_TRANSFORM_H 1\n\n/* Define if you have the X Shm extension */\n/* #undef HAVE_LIBXXSHM */\n\n/* Define to 1 if you have the <link.h> header file. */\n/* #undef HAVE_LINK_H */\n\n/* Define if <linux/joystick.h> defines the Linux 2.2 joystick API */\n/* #undef HAVE_LINUX_22_JOYSTICK_API */\n\n/* Define to 1 if you have the <linux/capi.h> header file. */\n/* #undef HAVE_LINUX_CAPI_H */\n\n/* Define to 1 if you have the <linux/cdrom.h> header file. */\n/* #undef HAVE_LINUX_CDROM_H */\n\n/* Define to 1 if you have the <linux/compiler.h> header file. */\n/* #undef HAVE_LINUX_COMPILER_H */\n\n/* Define to 1 if you have the <linux/filter.h> header file. */\n/* #undef HAVE_LINUX_FILTER_H */\n\n/* Define if Linux-style gethostbyname_r and gethostbyaddr_r are available */\n/* #undef HAVE_LINUX_GETHOSTBYNAME_R_6 */\n\n/* Define to 1 if you have the <linux/hdreg.h> header file. */\n/* #undef HAVE_LINUX_HDREG_H */\n\n/* Define to 1 if you have the <linux/hidraw.h> header file. */\n/* #undef HAVE_LINUX_HIDRAW_H */\n\n/* Define to 1 if you have the <linux/input.h> header file. */\n/* #undef HAVE_LINUX_INPUT_H */\n\n/* Define to 1 if you have the <linux/ioctl.h> header file. */\n/* #undef HAVE_LINUX_IOCTL_H */\n\n/* Define to 1 if you have the <linux/ipx.h> header file. */\n/* #undef HAVE_LINUX_IPX_H */\n\n/* Define to 1 if you have the <linux/irda.h> header file. */\n/* #undef HAVE_LINUX_IRDA_H */\n\n/* Define to 1 if you have the <linux/joystick.h> header file. */\n/* #undef HAVE_LINUX_JOYSTICK_H */\n\n/* Define to 1 if you have the <linux/major.h> header file. */\n/* #undef HAVE_LINUX_MAJOR_H */\n\n/* Define to 1 if you have the <linux/param.h> header file. */\n/* #undef HAVE_LINUX_PARAM_H */\n\n/* Define to 1 if you have the <linux/rtnetlink.h> header file. */\n/* #undef HAVE_LINUX_RTNETLINK_H */\n\n/* Define to 1 if you have the <linux/serial.h> header file. */\n/* #undef HAVE_LINUX_SERIAL_H */\n\n/* Define to 1 if you have the <linux/types.h> header file. */\n/* #undef HAVE_LINUX_TYPES_H */\n\n/* Define to 1 if you have the <linux/ucdrom.h> header file. */\n/* #undef HAVE_LINUX_UCDROM_H */\n\n/* Define to 1 if you have the <linux/videodev2.h> header file. */\n/* #undef HAVE_LINUX_VIDEODEV2_H */\n\n/* Define to 1 if you have the <linux/videodev.h> header file. */\n/* #undef HAVE_LINUX_VIDEODEV_H */\n\n/* Define to 1 if you have the `llrint' function. */\n#define HAVE_LLRINT 1\n\n/* Define to 1 if you have the `llrintf' function. */\n#define HAVE_LLRINTF 1\n\n/* Define to 1 if you have the `llround' function. */\n#define HAVE_LLROUND 1\n\n/* Define to 1 if you have the `llroundf' function. */\n#define HAVE_LLROUNDF 1\n\n/* Define to 1 if you have the `log1p' function. */\n/* #undef HAVE_LOG1P */\n\n/* Define to 1 if you have the `log1pf' function. */\n/* #undef HAVE_LOG1PF */\n\n/* Define to 1 if you have the `log2' function. */\n#define HAVE_LOG2 1\n\n/* Define to 1 if you have the `log2f' function. */\n#define HAVE_LOG2F 1\n\n/* Define to 1 if the system has the type `long long'. */\n#define HAVE_LONG_LONG 1\n\n/* Define to 1 if you have the `lrint' function. */\n#define HAVE_LRINT 1\n\n/* Define to 1 if you have the `lrintf' function. */\n#define HAVE_LRINTF 1\n\n/* Define to 1 if you have the `lround' function. */\n#define HAVE_LROUND 1\n\n/* Define to 1 if you have the `lroundf' function. */\n#define HAVE_LROUNDF 1\n\n/* Define to 1 if you have the `lstat' function. */\n#define HAVE_LSTAT 1\n\n/* Define to 1 if you have the <lwp.h> header file. */\n/* #undef HAVE_LWP_H */\n\n/* Define to 1 if you have the <machine/cpu.h> header file. */\n/* #undef HAVE_MACHINE_CPU_H */\n\n/* Define to 1 if you have the <machine/limits.h> header file. */\n/* #undef HAVE_MACHINE_LIMITS_H */\n\n/* Define to 1 if you have the <machine/sysarch.h> header file. */\n/* #undef HAVE_MACHINE_SYSARCH_H */\n\n/* Define to 1 if you have the <mach/machine.h> header file. */\n/* #undef HAVE_MACH_MACHINE_H */\n\n/* Define to 1 if you have the <mach/mach.h> header file. */\n/* #undef HAVE_MACH_MACH_H */\n\n/* Define to 1 if you have the <mach-o/dyld_images.h> header file. */\n/* #undef HAVE_MACH_O_DYLD_IMAGES_H */\n\n/* Define to 1 if you have the <mach-o/loader.h> header file. */\n/* #undef HAVE_MACH_O_LOADER_H */\n\n/* Define to 1 if you have the <mach-o/nlist.h> header file. */\n/* #undef HAVE_MACH_O_NLIST_H */\n\n/* Define to 1 if you have the `memmove' function. */\n#define HAVE_MEMMOVE 1\n\n/* Define to 1 if you have the <memory.h> header file. */\n#define HAVE_MEMORY_H 1\n\n/* Define to 1 if you have the <Metal/Metal.h> header file. */\n/* #undef HAVE_METAL_METAL_H */\n\n/* Define to 1 if you have the `mmap' function. */\n#define HAVE_MMAP 1\n\n/* Define to 1 if you have the <mntent.h> header file. */\n#define HAVE_MNTENT_H 1\n\n/* Define to 1 if the system has the type `mode_t'. */\n#define HAVE_MODE_T 1\n\n/* Define to 1 if you have the `mousemask' function. */\n#define HAVE_MOUSEMASK 1\n\n/* Define to 1 if you have the <mpg123.h> header file. */\n/* #undef HAVE_MPG123_H */\n\n/* Define to 1 if you have the <ncurses.h> header file. */\n#define HAVE_NCURSES_H 1\n\n/* Define to 1 if you have the `nearbyint' function. */\n/* #undef HAVE_NEARBYINT */\n\n/* Define to 1 if you have the `nearbyintf' function. */\n/* #undef HAVE_NEARBYINTF */\n\n/* Define to 1 if you have the <netdb.h> header file. */\n#define HAVE_NETDB_H 1\n\n/* Define to 1 if you have the <netinet/icmp_var.h> header file. */\n/* #undef HAVE_NETINET_ICMP_VAR_H */\n\n/* Define to 1 if you have the <netinet/if_ether.h> header file. */\n/* #undef HAVE_NETINET_IF_ETHER_H */\n\n/* Define to 1 if you have the <netinet/if_inarp.h> header file. */\n/* #undef HAVE_NETINET_IF_INARP_H */\n\n/* Define to 1 if you have the <netinet/in.h> header file. */\n#define HAVE_NETINET_IN_H 1\n\n/* Define to 1 if you have the <netinet/in_pcb.h> header file. */\n/* #undef HAVE_NETINET_IN_PCB_H */\n\n/* Define to 1 if you have the <netinet/in_systm.h> header file. */\n#define HAVE_NETINET_IN_SYSTM_H 1\n\n/* Define to 1 if you have the <netinet/ip.h> header file. */\n#define HAVE_NETINET_IP_H 1\n\n/* Define to 1 if you have the <netinet/ip_icmp.h> header file. */\n#define HAVE_NETINET_IP_ICMP_H 1\n\n/* Define to 1 if you have the <netinet/ip_var.h> header file. */\n/* #undef HAVE_NETINET_IP_VAR_H */\n\n/* Define to 1 if you have the <netinet/tcp_fsm.h> header file. */\n/* #undef HAVE_NETINET_TCP_FSM_H */\n\n/* Define to 1 if you have the <netinet/tcp.h> header file. */\n#define HAVE_NETINET_TCP_H 1\n\n/* Define to 1 if you have the <netinet/tcp_timer.h> header file. */\n/* #undef HAVE_NETINET_TCP_TIMER_H */\n\n/* Define to 1 if you have the <netinet/tcp_var.h> header file. */\n/* #undef HAVE_NETINET_TCP_VAR_H */\n\n/* Define to 1 if you have the <netinet/udp.h> header file. */\n#define HAVE_NETINET_UDP_H 1\n\n/* Define to 1 if you have the <netinet/udp_var.h> header file. */\n/* #undef HAVE_NETINET_UDP_VAR_H */\n\n/* Define to 1 if you have the <netipx/ipx.h> header file. */\n/* #undef HAVE_NETIPX_IPX_H */\n\n/* Define to 1 if you have the <net/if_arp.h> header file. */\n/* #undef HAVE_NET_IF_ARP_H */\n\n/* Define to 1 if you have the <net/if_dl.h> header file. */\n/* #undef HAVE_NET_IF_DL_H */\n\n/* Define to 1 if you have the <net/if.h> header file. */\n#define HAVE_NET_IF_H 1\n\n/* Define to 1 if you have the <net/if_types.h> header file. */\n/* #undef HAVE_NET_IF_TYPES_H */\n\n/* Define to 1 if you have the <net/route.h> header file. */\n/* #undef HAVE_NET_ROUTE_H */\n\n/* Define to 1 if `_msg_ptr' is a member of `ns_msg'. */\n#define HAVE_NS_MSG__MSG_PTR 1\n\n/* Define to 1 if the system has the type `off_t'. */\n#define HAVE_OFF_T 1\n\n/* Define if mkdir takes only one argument */\n/* #undef HAVE_ONE_ARG_MKDIR */\n\n/* Define to 1 if OpenAL is available */\n/* #undef HAVE_OPENAL */\n\n/* Define to 1 if you have the <OpenAL/al.h> header file. */\n/* #undef HAVE_OPENAL_AL_H */\n\n/* Define to 1 if you have the <OpenCL/opencl.h> header file. */\n/* #undef HAVE_OPENCL_OPENCL_H */\n\n/* Define to 1 if `numaudioengines' is a member of `oss_sysinfo'. */\n/* #undef HAVE_OSS_SYSINFO_NUMAUDIOENGINES */\n\n/* Define to 1 if you have the <pcap/pcap.h> header file. */\n/* #undef HAVE_PCAP_PCAP_H */\n\n/* Define to 1 if you have the `pclose' function. */\n#define HAVE_PCLOSE 1\n\n/* Define to 1 if the system has the type `pid_t'. */\n#define HAVE_PID_T 1\n\n/* Define to 1 if you have the `pipe2' function. */\n#define HAVE_PIPE2 1\n\n/* Define to 1 if you have the <png.h> header file. */\n#define HAVE_PNG_H 1\n\n/* Define to 1 if you have the `poll' function. */\n#define HAVE_POLL 1\n\n/* Define to 1 if you have the <poll.h> header file. */\n#define HAVE_POLL_H 1\n\n/* Define to 1 if you have the `popen' function. */\n#define HAVE_POPEN 1\n\n/* Define to 1 if you have the `port_create' function. */\n/* #undef HAVE_PORT_CREATE */\n\n/* Define to 1 if you have the <port.h> header file. */\n/* #undef HAVE_PORT_H */\n\n/* Define to 1 if you have the `powl' function. */\n/* #undef HAVE_POWL */\n\n/* Define if we can use ppdev.h for parallel port access */\n/* #undef HAVE_PPDEV */\n\n/* Define to 1 if you have the `prctl' function. */\n/* #undef HAVE_PRCTL */\n\n/* Define to 1 if you have the `pread' function. */\n#define HAVE_PREAD 1\n\n/* Define to 1 if you have the <process.h> header file. */\n#define HAVE_PROCESS_H 1\n\n/* Define to 1 if you have the `proc_pidinfo' function. */\n/* #undef HAVE_PROC_PIDINFO */\n\n/* Define to 1 if you have the `pthread_attr_get_np' function. */\n/* #undef HAVE_PTHREAD_ATTR_GET_NP */\n\n/* Define to 1 if you have the `pthread_getattr_np' function. */\n#define HAVE_PTHREAD_GETATTR_NP 1\n\n/* Define to 1 if you have the `pthread_getthreadid_np' function. */\n/* #undef HAVE_PTHREAD_GETTHREADID_NP */\n\n/* Define to 1 if you have the `pthread_get_stackaddr_np' function. */\n/* #undef HAVE_PTHREAD_GET_STACKADDR_NP */\n\n/* Define to 1 if you have the `pthread_get_stacksize_np' function. */\n/* #undef HAVE_PTHREAD_GET_STACKSIZE_NP */\n\n/* Define to 1 if you have the <pthread.h> header file. */\n#define HAVE_PTHREAD_H 1\n\n/* Define to 1 if you have the <pthread_np.h> header file. */\n/* #undef HAVE_PTHREAD_NP_H */\n\n/* Define to 1 if you have the <pulse/pulseaudio.h> header file. */\n/* #undef HAVE_PULSE_PULSEAUDIO_H */\n\n/* Define to 1 if you have the <pwd.h> header file. */\n#define HAVE_PWD_H 1\n\n/* Define to 1 if you have the `pwrite' function. */\n#define HAVE_PWRITE 1\n\n/* Define to 1 if you have the <QuickTime/ImageCompression.h> header file. */\n/* #undef HAVE_QUICKTIME_IMAGECOMPRESSION_H */\n\n/* Define to 1 if you have the `readdir' function. */\n#define HAVE_READDIR 1\n\n/* Define to 1 if you have the `readlink' function. */\n#define HAVE_READLINK 1\n\n/* Define to 1 if you have the `remainder' function. */\n/* #undef HAVE_REMAINDER */\n\n/* Define to 1 if you have the `remainderf' function. */\n/* #undef HAVE_REMAINDERF */\n\n/* Define to 1 if the system has the type `request_sense'. */\n/* #undef HAVE_REQUEST_SENSE */\n\n/* Define if you have the resolver library and header */\n#define HAVE_RESOLV 1\n\n/* Define to 1 if you have the <resolv.h> header file. */\n#define HAVE_RESOLV_H 1\n\n/* Define to 1 if you have the `rint' function. */\n#define HAVE_RINT 1\n\n/* Define to 1 if you have the `rintf' function. */\n#define HAVE_RINTF 1\n\n/* Define to 1 if you have the `round' function. */\n#define HAVE_ROUND 1\n\n/* Define to 1 if you have the `roundf' function. */\n#define HAVE_ROUNDF 1\n\n/* Define to 1 if you have the <sched.h> header file. */\n#define HAVE_SCHED_H 1\n\n/* Define to 1 if you have the `sched_setaffinity' function. */\n/* #undef HAVE_SCHED_SETAFFINITY */\n\n/* Define to 1 if you have the `sched_yield' function. */\n#define HAVE_SCHED_YIELD 1\n\n/* Define to 1 if `cmd' is a member of `scsireq_t'. */\n/* #undef HAVE_SCSIREQ_T_CMD */\n\n/* Define to 1 if you have the <scsi/scsi.h> header file. */\n/* #undef HAVE_SCSI_SCSI_H */\n\n/* Define to 1 if you have the <scsi/scsi_ioctl.h> header file. */\n/* #undef HAVE_SCSI_SCSI_IOCTL_H */\n\n/* Define to 1 if you have the <scsi/sg.h> header file. */\n/* #undef HAVE_SCSI_SG_H */\n\n/* Define to 1 if you have the <SDL2/SDL.h> header file. */\n/* #undef HAVE_SDL2_SDL_H */\n\n/* Define to 1 if you have the <Security/Security.h> header file. */\n/* #undef HAVE_SECURITY_SECURITY_H */\n\n/* Define to 1 if you have the `select' function. */\n#define HAVE_SELECT 1\n\n/* Define to 1 if you have the `sendmsg' function. */\n#define HAVE_SENDMSG 1\n\n/* Define to 1 if you have the `setproctitle' function. */\n/* #undef HAVE_SETPROCTITLE */\n\n/* Define to 1 if you have the `setprogname' function. */\n/* #undef HAVE_SETPROGNAME */\n\n/* Define to 1 if you have the `setrlimit' function. */\n#define HAVE_SETRLIMIT 1\n\n/* Define to 1 if you have the `settimeofday' function. */\n#define HAVE_SETTIMEOFDAY 1\n\n/* Define to 1 if `interface_id' is a member of `sg_io_hdr_t'. */\n/* #undef HAVE_SG_IO_HDR_T_INTERFACE_ID */\n\n/* Define if sigaddset is supported */\n#define HAVE_SIGADDSET 1\n\n/* Define to 1 if you have the `sigaltstack' function. */\n/* #undef HAVE_SIGALTSTACK */\n\n/* Define to 1 if `si_fd' is a member of `siginfo_t'. */\n/* #undef HAVE_SIGINFO_T_SI_FD */\n\n/* Define to 1 if you have the `sigprocmask' function. */\n#define HAVE_SIGPROCMASK 1\n\n/* Define to 1 if the system has the type `sigset_t'. */\n#define HAVE_SIGSET_T 1\n\n/* Define to 1 if the system has the type `size_t'. */\n#define HAVE_SIZE_T 1\n\n/* Define to 1 if you have the `snprintf' function. */\n#define HAVE_SNPRINTF 1\n\n/* Define to 1 if you have the `socketpair' function. */\n#define HAVE_SOCKETPAIR 1\n\n/* Define to 1 if the system has the type `ssize_t'. */\n#define HAVE_SSIZE_T 1\n\n/* Define to 1 if you have the `SSLCopyPeerCertificates' function. */\n/* #undef HAVE_SSLCOPYPEERCERTIFICATES */\n\n/* Define to 1 if you have the `statfs' function. */\n#define HAVE_STATFS 1\n\n/* Define to 1 if you have the `statvfs' function. */\n#define HAVE_STATVFS 1\n\n/* Define to 1 if you have the <stdbool.h> header file. */\n#define HAVE_STDBOOL_H 1\n\n/* Define to 1 if you have the <stdint.h> header file. */\n#define HAVE_STDINT_H 1\n\n/* Define to 1 if you have the <stdlib.h> header file. */\n#define HAVE_STDLIB_H 1\n\n/* Define to 1 if you have the `strcasecmp' function. */\n#define HAVE_STRCASECMP 1\n\n/* Define to 1 if you have the `strdup' function. */\n#define HAVE_STRDUP 1\n\n/* Define to 1 if you have the `strerror' function. */\n#define HAVE_STRERROR 1\n\n/* Define to 1 if you have the <strings.h> header file. */\n#define HAVE_STRINGS_H 1\n\n/* Define to 1 if you have the <string.h> header file. */\n#define HAVE_STRING_H 1\n\n/* Define to 1 if you have the `strncasecmp' function. */\n#define HAVE_STRNCASECMP 1\n\n/* Define to 1 if you have the `strnlen' function. */\n/* #undef HAVE_STRNLEN */\n\n/* Define to 1 if you have the <stropts.h> header file. */\n/* #undef HAVE_STROPTS_H */\n\n/* Define to 1 if you have the `strtold' function. */\n#define HAVE_STRTOLD 1\n\n/* Define to 1 if you have the `strtoll' function. */\n#define HAVE_STRTOLL 1\n\n/* Define to 1 if you have the `strtoull' function. */\n#define HAVE_STRTOULL 1\n\n/* Define to 1 if `d_reclen' is a member of `struct dirent'. */\n/* #undef HAVE_STRUCT_DIRENT_D_RECLEN */\n\n/* Define to 1 if `direction' is a member of `struct ff_effect'. */\n/* #undef HAVE_STRUCT_FF_EFFECT_DIRECTION */\n\n/* Define to 1 if `icps_inhist' is a member of `struct icmpstat'. */\n/* #undef HAVE_STRUCT_ICMPSTAT_ICPS_INHIST */\n\n/* Define to 1 if `icps_outhist' is a member of `struct icmpstat'. */\n/* #undef HAVE_STRUCT_ICMPSTAT_ICPS_OUTHIST */\n\n/* Define to 1 if `ifr_hwaddr' is a member of `struct ifreq'. */\n#define HAVE_STRUCT_IFREQ_IFR_HWADDR 1\n\n/* Define to 1 if `ips_total' is a member of `struct ipstat'. */\n/* #undef HAVE_STRUCT_IPSTAT_IPS_TOTAL */\n\n/* Define to 1 if `ips_total' is a member of `struct ip_stats'. */\n/* #undef HAVE_STRUCT_IP_STATS_IPS_TOTAL */\n\n/* Define to 1 if the system has the type `struct link_map'. */\n/* #undef HAVE_STRUCT_LINK_MAP */\n\n/* Define to 1 if `msg_accrights' is a member of `struct msghdr'. */\n/* #undef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS */\n\n/* Define to 1 if `mt_blkno' is a member of `struct mtget'. */\n#define HAVE_STRUCT_MTGET_MT_BLKNO 1\n\n/* Define to 1 if `mt_blksiz' is a member of `struct mtget'. */\n/* #undef HAVE_STRUCT_MTGET_MT_BLKSIZ */\n\n/* Define to 1 if `mt_gstat' is a member of `struct mtget'. */\n#define HAVE_STRUCT_MTGET_MT_GSTAT 1\n\n/* Define to 1 if `name' is a member of `struct option'. */\n#define HAVE_STRUCT_OPTION_NAME 1\n\n/* Define to 1 if the system has the type `struct r_debug'. */\n/* #undef HAVE_STRUCT_R_DEBUG */\n\n/* Define to 1 if `sin6_scope_id' is a member of `struct sockaddr_in6'. */\n#define HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID 1\n\n/* Define to 1 if `sa_len' is a member of `struct sockaddr'. */\n/* #undef HAVE_STRUCT_SOCKADDR_SA_LEN */\n\n/* Define to 1 if `sun_len' is a member of `struct sockaddr_un'. */\n/* #undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN */\n\n/* Define to 1 if `f_bavail' is a member of `struct statfs'. */\n#define HAVE_STRUCT_STATFS_F_BAVAIL 1\n\n/* Define to 1 if `f_bfree' is a member of `struct statfs'. */\n#define HAVE_STRUCT_STATFS_F_BFREE 1\n\n/* Define to 1 if `f_favail' is a member of `struct statfs'. */\n/* #undef HAVE_STRUCT_STATFS_F_FAVAIL */\n\n/* Define to 1 if `f_ffree' is a member of `struct statfs'. */\n#define HAVE_STRUCT_STATFS_F_FFREE 1\n\n/* Define to 1 if `f_frsize' is a member of `struct statfs'. */\n/* #undef HAVE_STRUCT_STATFS_F_FRSIZE */\n\n/* Define to 1 if `f_namelen' is a member of `struct statfs'. */\n#define HAVE_STRUCT_STATFS_F_NAMELEN 1\n\n/* Define to 1 if `f_blocks' is a member of `struct statvfs'. */\n#define HAVE_STRUCT_STATVFS_F_BLOCKS 1\n\n/* Define to 1 if `st_atim' is a member of `struct stat'. */\n#define HAVE_STRUCT_STAT_ST_ATIM 1\n\n/* Define to 1 if `st_atimespec' is a member of `struct stat'. */\n/* #undef HAVE_STRUCT_STAT_ST_ATIMESPEC */\n\n/* Define to 1 if `st_birthtim' is a member of `struct stat'. */\n#define HAVE_STRUCT_STAT_ST_BIRTHTIM 1\n\n/* Define to 1 if `st_birthtime' is a member of `struct stat'. */\n#define HAVE_STRUCT_STAT_ST_BIRTHTIME 1\n\n/* Define to 1 if `st_birthtimespec' is a member of `struct stat'. */\n/* #undef HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC */\n\n/* Define to 1 if `st_blocks' is a member of `struct stat'. */\n#define HAVE_STRUCT_STAT_ST_BLOCKS 1\n\n/* Define to 1 if `st_ctim' is a member of `struct stat'. */\n#define HAVE_STRUCT_STAT_ST_CTIM 1\n\n/* Define to 1 if `st_ctimespec' is a member of `struct stat'. */\n/* #undef HAVE_STRUCT_STAT_ST_CTIMESPEC */\n\n/* Define to 1 if `st_mtim' is a member of `struct stat'. */\n#define HAVE_STRUCT_STAT_ST_MTIM 1\n\n/* Define to 1 if `st_mtimespec' is a member of `struct stat'. */\n/* #undef HAVE_STRUCT_STAT_ST_MTIMESPEC */\n\n/* Define to 1 if `__st_birthtim' is a member of `struct stat'. */\n/* #undef HAVE_STRUCT_STAT___ST_BIRTHTIM */\n\n/* Define to 1 if `__st_birthtime' is a member of `struct stat'. */\n/* #undef HAVE_STRUCT_STAT___ST_BIRTHTIME */\n\n/* Define to 1 if `tcps_connattempt' is a member of `struct tcpstat'. */\n/* #undef HAVE_STRUCT_TCPSTAT_TCPS_CONNATTEMPT */\n\n/* Define to 1 if `tcps_connattempt' is a member of `struct tcp_stats'. */\n/* #undef HAVE_STRUCT_TCP_STATS_TCPS_CONNATTEMPT */\n\n/* Define to 1 if `udps_ipackets' is a member of `struct udpstat'. */\n/* #undef HAVE_STRUCT_UDPSTAT_UDPS_IPACKETS */\n\n/* Define to 1 if the system has the type `struct xinpgen'. */\n/* #undef HAVE_STRUCT_XINPGEN */\n\n/* Define to 1 if the system has the type `struct __res_state'. */\n#define HAVE_STRUCT___RES_STATE 1\n\n/* Define to 1 if `_u._ext.nscount6' is a member of `struct __res_state'. */\n/* #undef HAVE_STRUCT___RES_STATE__U__EXT_NSCOUNT6 */\n\n/* Define to 1 if you have the `symlink' function. */\n#define HAVE_SYMLINK 1\n\n/* Define to 1 if you have the <syscall.h> header file. */\n/* #undef HAVE_SYSCALL_H */\n\n/* Define to 1 if you have the `sysinfo' function. */\n/* #undef HAVE_SYSINFO */\n\n/* Define to 1 if you have the <sys/asoundlib.h> header file. */\n/* #undef HAVE_SYS_ASOUNDLIB_H */\n\n/* Define to 1 if you have the <sys/attr.h> header file. */\n/* #undef HAVE_SYS_ATTR_H */\n\n/* Define to 1 if you have the <sys/auxv.h> header file. */\n/* #undef HAVE_SYS_AUXV_H */\n\n/* Define to 1 if you have the <sys/cdio.h> header file. */\n/* #undef HAVE_SYS_CDIO_H */\n\n/* Define to 1 if you have the <sys/elf32.h> header file. */\n#define HAVE_SYS_ELF32_H 1\n\n/* Define to 1 if you have the <sys/epoll.h> header file. */\n/* #undef HAVE_SYS_EPOLL_H */\n\n/* Define to 1 if you have the <sys/event.h> header file. */\n/* #undef HAVE_SYS_EVENT_H */\n\n/* Define to 1 if you have the <sys/exec_elf.h> header file. */\n/* #undef HAVE_SYS_EXEC_ELF_H */\n\n/* Define to 1 if you have the <sys/filio.h> header file. */\n/* #undef HAVE_SYS_FILIO_H */\n\n/* Define to 1 if you have the <sys/inotify.h> header file. */\n/* #undef HAVE_SYS_INOTIFY_H */\n\n/* Define to 1 if you have the <sys/ioctl.h> header file. */\n#define HAVE_SYS_IOCTL_H 1\n\n/* Define to 1 if you have the <sys/ipc.h> header file. */\n#define HAVE_SYS_IPC_H 1\n\n/* Define to 1 if you have the <sys/limits.h> header file. */\n/* #undef HAVE_SYS_LIMITS_H */\n\n/* Define to 1 if you have the <sys/link.h> header file. */\n/* #undef HAVE_SYS_LINK_H */\n\n/* Define to 1 if you have the <sys/mman.h> header file. */\n#define HAVE_SYS_MMAN_H 1\n\n/* Define to 1 if you have the <sys/modem.h> header file. */\n/* #undef HAVE_SYS_MODEM_H */\n\n/* Define to 1 if you have the <sys/mount.h> header file. */\n#define HAVE_SYS_MOUNT_H 1\n\n/* Define to 1 if you have the <sys/msg.h> header file. */\n#define HAVE_SYS_MSG_H 1\n\n/* Define to 1 if you have the <sys/mtio.h> header file. */\n#define HAVE_SYS_MTIO_H 1\n\n/* Define to 1 if you have the <sys/param.h> header file. */\n#define HAVE_SYS_PARAM_H 1\n\n/* Define to 1 if you have the <sys/poll.h> header file. */\n#define HAVE_SYS_POLL_H 1\n\n/* Define to 1 if you have the <sys/prctl.h> header file. */\n/* #undef HAVE_SYS_PRCTL_H */\n\n/* Define to 1 if you have the <sys/protosw.h> header file. */\n/* #undef HAVE_SYS_PROTOSW_H */\n\n/* Define to 1 if you have the <sys/ptrace.h> header file. */\n/* #undef HAVE_SYS_PTRACE_H */\n\n/* Define to 1 if you have the <sys/queue.h> header file. */\n#define HAVE_SYS_QUEUE_H 1\n\n/* Define to 1 if you have the <sys/resource.h> header file. */\n#define HAVE_SYS_RESOURCE_H 1\n\n/* Define to 1 if you have the <sys/scsiio.h> header file. */\n/* #undef HAVE_SYS_SCSIIO_H */\n\n/* Define to 1 if you have the <sys/shm.h> header file. */\n#define HAVE_SYS_SHM_H 1\n\n/* Define to 1 if you have the <sys/signal.h> header file. */\n#define HAVE_SYS_SIGNAL_H 1\n\n/* Define to 1 if you have the <sys/socketvar.h> header file. */\n/* #undef HAVE_SYS_SOCKETVAR_H */\n\n/* Define to 1 if you have the <sys/socket.h> header file. */\n#define HAVE_SYS_SOCKET_H 1\n\n/* Define to 1 if you have the <sys/sockio.h> header file. */\n/* #undef HAVE_SYS_SOCKIO_H */\n\n/* Define to 1 if you have the <sys/statfs.h> header file. */\n#define HAVE_SYS_STATFS_H 1\n\n/* Define to 1 if you have the <sys/statvfs.h> header file. */\n#define HAVE_SYS_STATVFS_H 1\n\n/* Define to 1 if you have the <sys/stat.h> header file. */\n#define HAVE_SYS_STAT_H 1\n\n/* Define to 1 if you have the <sys/strtio.h> header file. */\n/* #undef HAVE_SYS_STRTIO_H */\n\n/* Define to 1 if you have the <sys/syscall.h> header file. */\n/* #undef HAVE_SYS_SYSCALL_H */\n\n/* Define to 1 if you have the <sys/sysctl.h> header file. */\n/* #undef HAVE_SYS_SYSCTL_H */\n\n/* Define to 1 if you have the <sys/sysinfo.h> header file. */\n/* #undef HAVE_SYS_SYSINFO_H */\n\n/* Define to 1 if you have the <sys/thr.h> header file. */\n/* #undef HAVE_SYS_THR_H */\n\n/* Define to 1 if you have the <sys/tihdr.h> header file. */\n/* #undef HAVE_SYS_TIHDR_H */\n\n/* Define to 1 if you have the <sys/timeout.h> header file. */\n/* #undef HAVE_SYS_TIMEOUT_H */\n\n/* Define to 1 if you have the <sys/times.h> header file. */\n#define HAVE_SYS_TIMES_H 1\n\n/* Define to 1 if you have the <sys/time.h> header file. */\n#define HAVE_SYS_TIME_H 1\n\n/* Define to 1 if you have the <sys/types.h> header file. */\n#define HAVE_SYS_TYPES_H 1\n\n/* Define to 1 if you have the <sys/ucontext.h> header file. */\n/* #undef HAVE_SYS_UCONTEXT_H */\n\n/* Define to 1 if you have the <sys/uio.h> header file. */\n#define HAVE_SYS_UIO_H 1\n\n/* Define to 1 if you have the <sys/un.h> header file. */\n#define HAVE_SYS_UN_H 1\n\n/* Define to 1 if you have the <sys/user.h> header file. */\n/* #undef HAVE_SYS_USER_H */\n\n/* Define to 1 if you have the <sys/utsname.h> header file. */\n#define HAVE_SYS_UTSNAME_H 1\n\n/* Define to 1 if you have the <sys/vfs.h> header file. */\n#define HAVE_SYS_VFS_H 1\n\n/* Define to 1 if you have the <sys/vm86.h> header file. */\n/* #undef HAVE_SYS_VM86_H */\n\n/* Define to 1 if you have the <sys/vnode.h> header file. */\n/* #undef HAVE_SYS_VNODE_H */\n\n/* Define to 1 if you have the <sys/wait.h> header file. */\n#define HAVE_SYS_WAIT_H 1\n\n/* Define to 1 if you have the `tcdrain' function. */\n#define HAVE_TCDRAIN 1\n\n/* Define to 1 if you have the <termios.h> header file. */\n#define HAVE_TERMIOS_H 1\n\n/* Define to 1 if you have the `thr_kill2' function. */\n/* #undef HAVE_THR_KILL2 */\n\n/* Define to 1 if you have the <tiffio.h> header file. */\n#define HAVE_TIFFIO_H 1\n\n/* Define to 1 if you have the `timegm' function. */\n#define HAVE_TIMEGM 1\n\n/* Define if you have the timezone variable */\n#define HAVE_TIMEZONE 1\n\n/* Define to 1 if you have the `trunc' function. */\n#define HAVE_TRUNC 1\n\n/* Define to 1 if you have the `truncf' function. */\n#define HAVE_TRUNCF 1\n\n/* Define to 1 if you have the `udev' library (-ludev). */\n/* #undef HAVE_UDEV */\n\n/* Define to 1 if you have the <unistd.h> header file. */\n#define HAVE_UNISTD_H 1\n\n/* Define to 1 if you have the `usleep' function. */\n#define HAVE_USLEEP 1\n\n/* Define to 1 if you have the <utime.h> header file. */\n#define HAVE_UTIME_H 1\n\n/* Define to 1 if you have the <valgrind/memcheck.h> header file. */\n/* #undef HAVE_VALGRIND_MEMCHECK_H */\n\n/* Define to 1 if you have the <valgrind/valgrind.h> header file. */\n/* #undef HAVE_VALGRIND_VALGRIND_H */\n\n/* Define to 1 if you have the `vsnprintf' function. */\n#define HAVE_VSNPRINTF 1\n\n/* Define to 1 if you have the <X11/extensions/shape.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_SHAPE_H */\n\n/* Define to 1 if you have the <X11/extensions/Xcomposite.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XCOMPOSITE_H */\n\n/* Define to 1 if you have the <X11/extensions/xf86vmode.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XF86VMODE_H */\n\n/* Define to 1 if you have the <X11/extensions/xf86vmproto.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XF86VMPROTO_H */\n\n/* Define to 1 if you have the <X11/extensions/Xfixes.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XFIXES_H */\n\n/* Define to 1 if you have the <X11/extensions/Xinerama.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XINERAMA_H */\n\n/* Define to 1 if you have the <X11/extensions/XInput2.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XINPUT2_H */\n\n/* Define to 1 if you have the <X11/extensions/XInput.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XINPUT_H */\n\n/* Define to 1 if you have the <X11/extensions/Xrandr.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XRANDR_H */\n\n/* Define to 1 if you have the <X11/extensions/Xrender.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XRENDER_H */\n\n/* Define to 1 if you have the <X11/extensions/XShm.h> header file. */\n/* #undef HAVE_X11_EXTENSIONS_XSHM_H */\n\n/* Define to 1 if you have the <X11/Xcursor/Xcursor.h> header file. */\n/* #undef HAVE_X11_XCURSOR_XCURSOR_H */\n\n/* Define to 1 if you have the <X11/XKBlib.h> header file. */\n/* #undef HAVE_X11_XKBLIB_H */\n\n/* Define to 1 if you have the <X11/Xlib.h> header file. */\n/* #undef HAVE_X11_XLIB_H */\n\n/* Define to 1 if you have the <X11/Xutil.h> header file. */\n/* #undef HAVE_X11_XUTIL_H */\n\n/* Define to 1 if `xcookie' is a member of `XEvent'. */\n/* #undef HAVE_XEVENT_XCOOKIE */\n\n/* Define to 1 if `callback' is a member of `XICCallback'. */\n/* #undef HAVE_XICCALLBACK_CALLBACK */\n\n/* Define if you have the XKB extension */\n/* #undef HAVE_XKB */\n\n/* Define if libxml2 has the xmlDocProperties enum */\n#define HAVE_XMLDOC_PROPERTIES 1\n\n/* Define if libxml2 has the xmlFirstElementChild function */\n#define HAVE_XMLFIRSTELEMENTCHILD 1\n\n/* Define if libxml2 has the xmlNewDocPI function */\n#define HAVE_XMLNEWDOCPI 1\n\n/* Define if libxml2 has the xmlReadMemory function */\n#define HAVE_XMLREADMEMORY 1\n\n/* Define if libxml2 has the xmlSchemaSetParserStructuredErrors function */\n#define HAVE_XMLSCHEMASSETPARSERSTRUCTUREDERRORS 1\n\n/* Define if libxml2 has the xmlSchemaSetValidStructuredErrors function */\n#define HAVE_XMLSCHEMASSETVALIDSTRUCTUREDERRORS 1\n\n/* Define if Xrender has the XRenderCreateLinearGradient function */\n/* #undef HAVE_XRENDERCREATELINEARGRADIENT */\n\n/* Define if Xrender has the XRenderSetPictureTransform function */\n/* #undef HAVE_XRENDERSETPICTURETRANSFORM */\n\n/* Define if Xrandr has the XRRGetScreenResources function */\n/* #undef HAVE_XRRGETSCREENRESOURCES */\n\n/* Define to 1 if you have the `y0' function. */\n/* #undef HAVE_Y0 */\n\n/* Define to 1 if you have the `y1' function. */\n/* #undef HAVE_Y1 */\n\n/* Define to 1 if you have the `yn' function. */\n/* #undef HAVE_YN */\n\n/* Define to 1 if you have the `z' library (-lz). */\n#define HAVE_ZLIB 1\n\n/* Define to 1 if you have the <zlib.h> header file. */\n#define HAVE_ZLIB_H 1\n\n/* Define to 1 if you have the `_finite' function. */\n/* #undef HAVE__FINITE */\n\n/* Define to 1 if you have the `_isnan' function. */\n/* #undef HAVE__ISNAN */\n\n/* Define to 1 if you have the `_pclose' function. */\n/* #undef HAVE__PCLOSE */\n\n/* Define to 1 if you have the `_popen' function. */\n/* #undef HAVE__POPEN */\n\n/* Define to 1 if you have the `_snprintf' function. */\n/* #undef HAVE__SNPRINTF */\n\n/* Define to 1 if you have the `_spawnvp' function. */\n/* #undef HAVE__SPAWNVP */\n\n/* Define to 1 if you have the `_strdup' function. */\n/* #undef HAVE__STRDUP */\n\n/* Define to 1 if you have the `_stricmp' function. */\n/* #undef HAVE__STRICMP */\n\n/* Define to 1 if you have the `_strnicmp' function. */\n/* #undef HAVE__STRNICMP */\n\n/* Define to 1 if you have the `_strtoi64' function. */\n/* #undef HAVE__STRTOI64 */\n\n/* Define to 1 if you have the `_strtoui64' function. */\n/* #undef HAVE__STRTOUI64 */\n\n/* Define to 1 if you have the `_vsnprintf' function. */\n/* #undef HAVE__VSNPRINTF */\n\n/* Define to 1 if you have the `__builtin_clz' built-in function. */\n#define HAVE___BUILTIN_CLZ 1\n\n/* Define to 1 if you have the `__builtin_popcount' built-in function. */\n/* #undef HAVE___BUILTIN_POPCOUNT */\n\n/* Define to 1 if you have the `__clear_cache' (potentially built-in)\n   function. */\n/* #undef HAVE___CLEAR_CACHE */\n\n/* Define to 1 if you have the `__res_getservers' function. */\n/* #undef HAVE___RES_GETSERVERS */\n\n/* Define to 1 if you have the `__res_get_state' function. */\n/* #undef HAVE___RES_GET_STATE */\n\n/* Define to 1 if `major', `minor', and `makedev' are declared in <mkdev.h>.\n   */\n/* #undef MAJOR_IN_MKDEV */\n\n/* Define to 1 if `major', `minor', and `makedev' are declared in\n   <sysmacros.h>. */\n/* #undef MAJOR_IN_SYSMACROS */\n\n/* Define to the address where bug reports for this package should be sent. */\n#define PACKAGE_BUGREPORT \"wine-devel@winehq.org\"\n\n/* Define to the full name of this package. */\n#define PACKAGE_NAME \"Wine\"\n\n/* Define to the full name and version of this package. */\n#define PACKAGE_STRING \"Wine 1.7.35\"\n\n/* Define to the one symbol short name of this package. */\n#define PACKAGE_TARNAME \"wine\"\n\n/* Define to the home page for this package. */\n#define PACKAGE_URL \"http://www.winehq.org\"\n\n/* Define to the version of this package. */\n#define PACKAGE_VERSION \"1.7.35\"\n\n/* Define to the soname of the libcapi20 library. */\n/* #undef SONAME_LIBCAPI20 */\n\n/* Define to the soname of the libcups library. */\n/* #undef SONAME_LIBCUPS */\n\n/* Define to the soname of the libcurses library. */\n/* #undef SONAME_LIBCURSES */\n\n/* Define to the soname of the libdbus-1 library. */\n#define SONAME_LIBDBUS_1 \"\tcygdbus-1-3.dll\"\n\n/* Define to the soname of the libEGL library. */\n/* #undef SONAME_LIBEGL */\n\n/* Define to the soname of the libfontconfig library. */\n#define SONAME_LIBFONTCONFIG \"\tcygfontconfig-1.dll\"\n\n/* Define to the soname of the libfreetype library. */\n/* #undef SONAME_LIBFREETYPE */\n\n/* Define to the soname of the libGL library. */\n/* #undef SONAME_LIBGL */\n\n/* Define to the soname of the libGLESv2 library. */\n/* #undef SONAME_LIBGLESV2 */\n\n/* Define to the soname of the libGLU library. */\n/* #undef SONAME_LIBGLU */\n\n/* Define to the soname of the libgnutls library. */\n#define SONAME_LIBGNUTLS \"\tcyggnutls-28.dll\"\n\n/* Define to the soname of the libgsm library. */\n#define SONAME_LIBGSM \"\tcyggsm-1.dll\"\n\n/* Define to the soname of the libgssapi_krb5 library. */\n/* #undef SONAME_LIBGSSAPI_KRB5 */\n\n/* Define to the soname of the libhal library. */\n/* #undef SONAME_LIBHAL */\n\n/* Define to the soname of the libjpeg library. */\n#define SONAME_LIBJPEG \"\tcygjpeg-8.dll\"\n\n/* Define to the soname of the libkrb5 library. */\n/* #undef SONAME_LIBKRB5 */\n\n/* Define to the soname of the libMoltenVK library. */\n/* #undef SONAME_LIBMOLTENVK */\n\n/* Define to the soname of the libncurses library. */\n#define SONAME_LIBNCURSES \"\tcygncursesw-10.dll\"\n\n/* Define to the soname of the libnetapi library. */\n#define SONAME_LIBNETAPI \"libnetapi.dll\"\n\n/* Define to the soname of the libodbc library. */\n#define SONAME_LIBODBC \"\tcygiodbc-2.dll\"\n\n/* Define to the soname of the libopenal library. */\n/* #undef SONAME_LIBOPENAL */\n\n/* Define to the soname of the libOSMesa library. */\n/* #undef SONAME_LIBOSMESA */\n\n/* Define to the soname of the libpng library. */\n#define SONAME_LIBPNG \"\tcygpng15-15.dll\"\n\n/* Define to the soname of the libsane library. */\n/* #undef SONAME_LIBSANE */\n\n/* Define to the soname of the libSDL2 library. */\n/* #undef SONAME_LIBSDL2 */\n\n/* Define to the soname of the libtiff library. */\n#define SONAME_LIBTIFF \"\tcygtiff-5.dll\"\n\n/* Define to the soname of the libv4l1 library. */\n/* #undef SONAME_LIBV4L1 */\n\n/* Define to the soname of the libvkd3d library. */\n/* #undef SONAME_LIBVKD3D */\n\n/* Define to the soname of the libvulkan library. */\n/* #undef SONAME_LIBVULKAN */\n\n/* Define to the soname of the libX11 library. */\n/* #undef SONAME_LIBX11 */\n\n/* Define to the soname of the libXcomposite library. */\n/* #undef SONAME_LIBXCOMPOSITE */\n\n/* Define to the soname of the libXcursor library. */\n/* #undef SONAME_LIBXCURSOR */\n\n/* Define to the soname of the libXext library. */\n/* #undef SONAME_LIBXEXT */\n\n/* Define to the soname of the libXfixes library. */\n/* #undef SONAME_LIBXFIXES */\n\n/* Define to the soname of the libXi library. */\n/* #undef SONAME_LIBXI */\n\n/* Define to the soname of the libXinerama library. */\n/* #undef SONAME_LIBXINERAMA */\n\n/* Define to the soname of the libXrandr library. */\n/* #undef SONAME_LIBXRANDR */\n\n/* Define to the soname of the libXrender library. */\n/* #undef SONAME_LIBXRENDER */\n\n/* Define to the soname of the libxslt library. */\n#define SONAME_LIBXSLT \"\tcygxslt-1.dll\"\n\n/* Define to the soname of the libXxf86vm library. */\n/* #undef SONAME_LIBXXF86VM */\n\n/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */\n/* #undef STAT_MACROS_BROKEN */\n\n/* Define to 1 if you have the ANSI C header files. */\n#define STDC_HEADERS 1\n\n/* Define to 1 if the X Window System is missing or not being used. */\n#define X_DISPLAY_MISSING 1\n\n/* Enable large inode numbers on Mac OS X 10.5.  */\n#ifndef _DARWIN_USE_64_BIT_INODE\n# define _DARWIN_USE_64_BIT_INODE 1\n#endif\n\n/* Number of bits in a file offset, on hosts where this is settable. */\n/* #undef _FILE_OFFSET_BITS */\n\n/* Define for large files, on AIX-style hosts. */\n/* #undef _LARGE_FILES */\n\n/* Define to a macro to output a .cfi assembly pseudo-op */\n#define __ASM_CFI(str) str\n\n/* Define to a macro to define an assembly function */\n#define __ASM_DEFINE_FUNC(name,suffix,code) asm(\".text\\n\\t.align 4\\n\\t.globl \" #name suffix \"\\n\\t.def \" #name suffix \"; .scl 2; .type 32; .endef\\n\" #name suffix \":\\n\\t.cfi_startproc\\n\\t\" code \"\\n\\t.cfi_endproc\");\n\n/* Define to a macro to generate an assembly function directive */\n#define __ASM_FUNC(name) \".def \" __ASM_NAME(name) \"; .scl 2; .type 32; .endef\"\n\n/* Define to a macro to generate an assembly function with C calling\n   convention */\n#define __ASM_GLOBAL_FUNC(name,code) __ASM_DEFINE_FUNC(name,\"\",code)\n\n/* Define to a macro to generate an assembly name from a C symbol */\n#define __ASM_NAME(name) name\n\n/* Define to a macro to generate an stdcall suffix */\n#define __ASM_STDCALL(args) \"\"\n\n/* Define to a macro to generate an assembly function with stdcall calling\n   convention */\n#define __ASM_STDCALL_FUNC(name,args,code) __ASM_DEFINE_FUNC(name,__ASM_STDCALL(args),code)\n\n/* Define to `__inline__' or `__inline' if that's what the C compiler\n   calls it, or to nothing if 'inline' is not supported under any name.  */\n#ifndef __cplusplus\n/* #undef inline */\n#endif\n\n#endif /* WINE_CROSSTEST */\n#endif /* __WINE_CONFIG_H */\n"
  },
  {
    "path": "wine/wine/debug.h",
    "content": "/*\n * Wine debugging interface\n *\n * Copyright 1999 Patrik Stridvall\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINE_DEBUG_H\n#define __WINE_WINE_DEBUG_H\n\n#include <stdarg.h>\n#include <windef.h>\n#ifndef GUID_DEFINED\n#include <guiddef.h>\n#endif\n\n#ifdef __WINE_WINE_TEST_H\n#error This file should not be used in Wine tests\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nstruct _GUID;\n\n/*\n * Internal definitions (do not use these directly)\n */\n\nenum __wine_debug_class\n{\n    __WINE_DBCL_FIXME,\n    __WINE_DBCL_ERR,\n    __WINE_DBCL_WARN,\n    __WINE_DBCL_TRACE,\n\n    __WINE_DBCL_INIT = 7  /* lazy init flag */\n};\n\nstruct __wine_debug_channel\n{\n    unsigned char flags;\n    char name[15];\n};\n\n#ifndef WINE_NO_TRACE_MSGS\n# define __WINE_GET_DEBUGGING_TRACE(dbch) ((dbch)->flags & (1 << __WINE_DBCL_TRACE))\n#else\n# define __WINE_GET_DEBUGGING_TRACE(dbch) 0\n#endif\n\n#ifndef WINE_NO_DEBUG_MSGS\n# define __WINE_GET_DEBUGGING_WARN(dbch)  ((dbch)->flags & (1 << __WINE_DBCL_WARN))\n# define __WINE_GET_DEBUGGING_FIXME(dbch) ((dbch)->flags & (1 << __WINE_DBCL_FIXME))\n#else\n# define __WINE_GET_DEBUGGING_WARN(dbch)  0\n# define __WINE_GET_DEBUGGING_FIXME(dbch) 0\n#endif\n\n/* define error macro regardless of what is configured */\n#define __WINE_GET_DEBUGGING_ERR(dbch)  ((dbch)->flags & (1 << __WINE_DBCL_ERR))\n\n#define __WINE_GET_DEBUGGING(dbcl,dbch)  __WINE_GET_DEBUGGING##dbcl(dbch)\n\n#define __WINE_IS_DEBUG_ON(dbcl,dbch) \\\n  (__WINE_GET_DEBUGGING##dbcl(dbch) && (__wine_dbg_get_channel_flags(dbch) & (1 << __WINE_DBCL##dbcl)))\n\n#ifdef __GNUC__\n\n#define __WINE_DPRINTF(dbcl,dbch) \\\n  do { if(__WINE_GET_DEBUGGING(dbcl,(dbch))) { \\\n       struct __wine_debug_channel * const __dbch = (dbch); \\\n       const enum __wine_debug_class __dbcl = __WINE_DBCL##dbcl; \\\n       __WINE_DBG_LOG\n\n#define __WINE_DBG_LOG(args...) \\\n    wine_dbg_log( __dbcl, __dbch, __FUNCTION__, args); } } while(0)\n\n#define __WINE_PRINTF_ATTR(fmt,args) __attribute__((format (printf,fmt,args)))\n\n\n#ifdef WINE_NO_TRACE_MSGS\n#define WINE_TRACE(args...) do { } while(0)\n#define WINE_TRACE_(ch) WINE_TRACE\n#endif\n\n#ifdef WINE_NO_DEBUG_MSGS\n#define WINE_WARN(args...) do { } while(0)\n#define WINE_WARN_(ch) WINE_WARN\n#define WINE_FIXME(args...) do { } while(0)\n#define WINE_FIXME_(ch) WINE_FIXME\n#endif\n\n#elif defined(__SUNPRO_C)\n\n#define __WINE_DPRINTF(dbcl,dbch) \\\n  do { if(__WINE_GET_DEBUGGING(dbcl,(dbch))) { \\\n       struct __wine_debug_channel * const __dbch = (dbch); \\\n       const enum __WINE_DEBUG_CLASS __dbcl = __WINE_DBCL##dbcl; \\\n       __WINE_DBG_LOG\n\n#define __WINE_DBG_LOG(...) \\\n   wine_dbg_log( __dbcl, __dbch, __func__, __VA_ARGS__); } } while(0)\n\n#define __WINE_PRINTF_ATTR(fmt,args)\n\n#ifdef WINE_NO_TRACE_MSGS\n#define WINE_TRACE(...) do { } while(0)\n#define WINE_TRACE_(ch) WINE_TRACE\n#endif\n\n#ifdef WINE_NO_DEBUG_MSGS\n#define WINE_WARN(...) do { } while(0)\n#define WINE_WARN_(ch) WINE_WARN\n#define WINE_FIXME(...) do { } while(0)\n#define WINE_FIXME_(ch) WINE_FIXME\n#endif\n\n#elif defined(_MSC_VER)\n\n#define __WINE_DPRINTF(dbcl,dbch) \\\n  do { if(__WINE_GET_DEBUGGING(dbcl,(dbch))) { \\\n       struct __wine_debug_channel * const __dbch = (dbch); \\\n       const enum __wine_debug_class __dbcl = __WINE_DBCL##dbcl; \\\n       __WINE_DBG_LOG\n\n#define __WINE_DBG_LOG(...) \\\n   wine_dbg_log( __dbcl, __dbch, __FUNCTION__, __VA_ARGS__); } } while(0)\n\n#define __WINE_PRINTF_ATTR(fmt,args)\n\n#ifdef WINE_NO_TRACE_MSGS\n#define WINE_TRACE(...) do { } while(0)\n#define WINE_TRACE_(ch) WINE_TRACE\n#endif\n\n#ifdef WINE_NO_DEBUG_MSGS\n#define WINE_WARN(...) do { } while(0)\n#define WINE_WARN_(ch) WINE_WARN\n#define WINE_FIXME(...) do { } while(0)\n#define WINE_FIXME_(ch) WINE_FIXME\n#endif\n\n#else  /* !__GNUC__ && !__SUNPRO_C && !_MSC_VER */\n\n#define __WINE_DPRINTF(dbcl,dbch) \\\n    (!__WINE_GET_DEBUGGING(dbcl,(dbch)) || \\\n     (wine_dbg_log(__WINE_DBCL##dbcl,(dbch),__FILE__,\"%d: \",__LINE__) == -1)) ? \\\n     (void)0 : (void)wine_dbg_printf\n\n#define __WINE_PRINTF_ATTR(fmt, args)\n\n#endif  /* !__GNUC__ && !__SUNPRO_C && !_MSC_VER */\n\nstruct __wine_debug_functions\n{\n    char * (*get_temp_buffer)( size_t n );\n    void   (*release_temp_buffer)( char *buffer, size_t n );\n    const char * (*dbgstr_an)( const char * s, int n );\n    const char * (*dbgstr_wn)( const WCHAR *s, int n );\n    int (*dbg_vprintf)( const char *format, va_list args );\n    int (*dbg_vlog)( enum __wine_debug_class cls, struct __wine_debug_channel *channel,\n                     const char *function, const char *format, va_list args );\n};\n\nextern unsigned char __wine_dbg_get_channel_flags( struct __wine_debug_channel *channel );\nextern int __wine_dbg_set_channel_flags( struct __wine_debug_channel *channel,\n                                         unsigned char set, unsigned char clear );\nextern void __wine_dbg_set_functions( const struct __wine_debug_functions *new_funcs,\n                                      struct __wine_debug_functions *old_funcs, size_t size );\n\n/*\n * Exported definitions and macros\n */\n\n/* These functions return a printable version of a string, including\n   quotes.  The string will be valid for some time, but not indefinitely\n   as strings are re-used.  */\nextern const char *wine_dbgstr_an( const char * s, int n );\nextern const char *wine_dbgstr_wn( const WCHAR *s, int n );\nextern const char *wine_dbg_sprintf( const char *format, ... ) __WINE_PRINTF_ATTR(1,2);\n\nextern int wine_dbg_printf( const char *format, ... ) __WINE_PRINTF_ATTR(1,2);\nextern int wine_dbg_log( enum __wine_debug_class cls, struct __wine_debug_channel *ch, const char *func,\n                         const char *format, ... ) __WINE_PRINTF_ATTR(4,5);\n\nstatic inline const char *wine_dbgstr_a( const char *s )\n{\n    return wine_dbgstr_an( s, -1 );\n}\n\nstatic inline const char *wine_dbgstr_w( const WCHAR *s )\n{\n    return wine_dbgstr_wn( s, -1 );\n}\n\nstatic inline const char *wine_dbgstr_guid( const GUID *id )\n{\n    if (!id) return \"(null)\";\n    if (!((ULONG_PTR)id >> 16)) return wine_dbg_sprintf( \"<guid-0x%04hx>\", (WORD)(ULONG_PTR)id );\n    return wine_dbg_sprintf( \"{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\",\n                             id->Data1, id->Data2, id->Data3,\n                             id->Data4[0], id->Data4[1], id->Data4[2], id->Data4[3],\n                             id->Data4[4], id->Data4[5], id->Data4[6], id->Data4[7] );\n}\n\nstatic inline const char *wine_dbgstr_point( const POINT *pt )\n{\n    if (!pt) return \"(null)\";\n    return wine_dbg_sprintf( \"(%d,%d)\", pt->x, pt->y );\n}\n\nstatic inline const char *wine_dbgstr_rect( const RECT *rect )\n{\n    if (!rect) return \"(null)\";\n    return wine_dbg_sprintf( \"(%d,%d)-(%d,%d)\", rect->left, rect->top,\n                             rect->right, rect->bottom );\n}\n\nstatic inline const char *wine_dbgstr_longlong( ULONGLONG ll )\n{\n    if (sizeof(ll) > sizeof(unsigned long) && ll >> 32)\n        return wine_dbg_sprintf( \"%lx%08lx\", (unsigned long)(ll >> 32), (unsigned long)ll );\n    else return wine_dbg_sprintf( \"%lx\", (unsigned long)ll );\n}\n\n#if defined(__oaidl_h__) && defined(V_VT)\n\nstatic inline const char *wine_dbgstr_vt( VARTYPE vt )\n{\n    static const char *const variant_types[] =\n    {\n        \"VT_EMPTY\",\"VT_NULL\",\"VT_I2\",\"VT_I4\",\"VT_R4\",\"VT_R8\",\"VT_CY\",\"VT_DATE\",\n        \"VT_BSTR\",\"VT_DISPATCH\",\"VT_ERROR\",\"VT_BOOL\",\"VT_VARIANT\",\"VT_UNKNOWN\",\n        \"VT_DECIMAL\",\"15\",\"VT_I1\",\"VT_UI1\",\"VT_UI2\",\"VT_UI4\",\"VT_I8\",\"VT_UI8\",\n        \"VT_INT\",\"VT_UINT\",\"VT_VOID\",\"VT_HRESULT\",\"VT_PTR\",\"VT_SAFEARRAY\",\n        \"VT_CARRAY\",\"VT_USERDEFINED\",\"VT_LPSTR\",\"VT_LPWSTR\",\"32\",\"33\",\"34\",\"35\",\n        \"VT_RECORD\",\"VT_INT_PTR\",\"VT_UINT_PTR\",\"39\",\"40\",\"41\",\"42\",\"43\",\"44\",\"45\",\n        \"46\",\"47\",\"48\",\"49\",\"50\",\"51\",\"52\",\"53\",\"54\",\"55\",\"56\",\"57\",\"58\",\"59\",\"60\",\n        \"61\",\"62\",\"63\",\"VT_FILETIME\",\"VT_BLOB\",\"VT_STREAM\",\"VT_STORAGE\",\n        \"VT_STREAMED_OBJECT\",\"VT_STORED_OBJECT\",\"VT_BLOB_OBJECT\",\"VT_CF\",\"VT_CLSID\",\n        \"VT_VERSIONED_STREAM\"\n    };\n\n    static const char *const variant_flags[16] =\n    {\n        \"\",\n        \"|VT_VECTOR\",\n        \"|VT_ARRAY\",\n        \"|VT_VECTOR|VT_ARRAY\",\n        \"|VT_BYREF\",\n        \"|VT_VECTOR|VT_BYREF\",\n        \"|VT_ARRAY|VT_BYREF\",\n        \"|VT_VECTOR|VT_ARRAY|VT_BYREF\",\n        \"|VT_RESERVED\",\n        \"|VT_VECTOR|VT_RESERVED\",\n        \"|VT_ARRAY|VT_RESERVED\",\n        \"|VT_VECTOR|VT_ARRAY|VT_RESERVED\",\n        \"|VT_BYREF|VT_RESERVED\",\n        \"|VT_VECTOR|VT_BYREF|VT_RESERVED\",\n        \"|VT_ARRAY|VT_BYREF|VT_RESERVED\",\n        \"|VT_VECTOR|VT_ARRAY|VT_BYREF|VT_RESERVED\",\n    };\n\n    if (vt & ~VT_TYPEMASK)\n        return wine_dbg_sprintf( \"%s%s\", wine_dbgstr_vt(vt&VT_TYPEMASK), variant_flags[vt>>12] );\n\n    if (vt < sizeof(variant_types)/sizeof(*variant_types))\n        return variant_types[vt];\n\n    if (vt == VT_BSTR_BLOB)\n        return \"VT_BSTR_BLOB\";\n\n    return wine_dbg_sprintf( \"vt(invalid %x)\", vt );\n}\n\nstatic inline const char *wine_dbgstr_variant( const VARIANT *v )\n{\n    if (!v)\n        return \"(null)\";\n\n    if (V_VT(v) & VT_BYREF) {\n        if (V_VT(v) == (VT_VARIANT|VT_BYREF))\n            return wine_dbg_sprintf( \"%p {VT_VARIANT|VT_BYREF: %s}\", v, wine_dbgstr_variant(V_VARIANTREF(v)) );\n        if (V_VT(v) == (VT_BSTR|VT_BYREF))\n            return wine_dbg_sprintf( \"%p {VT_BSTR|VT_BYREF: %s}\", v, V_BSTRREF(v) ? wine_dbgstr_w(*V_BSTRREF(v)) : \"(none)\" );\n        return wine_dbg_sprintf( \"%p {%s %p}\", v, wine_dbgstr_vt(V_VT(v)), V_BYREF(v) );\n    }\n\n    if (V_ISARRAY(v) || V_ISVECTOR(v))\n        return wine_dbg_sprintf( \"%p {%s %p}\", v, wine_dbgstr_vt(V_VT(v)), V_ARRAY(v) );\n\n    switch(V_VT(v)) {\n    case VT_EMPTY:\n        return wine_dbg_sprintf( \"%p {VT_EMPTY}\", v );\n    case VT_NULL:\n        return wine_dbg_sprintf( \"%p {VT_NULL}\", v );\n    case VT_I2:\n        return wine_dbg_sprintf( \"%p {VT_I2: %d}\", v, V_I2(v) );\n    case VT_I4:\n        return wine_dbg_sprintf( \"%p {VT_I4: %d}\", v, V_I4(v) );\n    case VT_R4:\n        return wine_dbg_sprintf( \"%p {VT_R4: %f}\", v, V_R4(v) );\n    case VT_R8:\n        return wine_dbg_sprintf( \"%p {VT_R8: %lf}\", v, V_R8(v) );\n    case VT_CY:\n        return wine_dbg_sprintf( \"%p {VT_CY: %s}\", v, wine_dbgstr_longlong(V_CY(v).int64) );\n    case VT_DATE:\n        return wine_dbg_sprintf( \"%p {VT_DATE: %lf}\", v, V_DATE(v) );\n    case VT_LPSTR:\n        return wine_dbg_sprintf( \"%p {VT_LPSTR: %s}\", v, wine_dbgstr_a((const char *)V_BSTR(v)) );\n    case VT_LPWSTR:\n        return wine_dbg_sprintf( \"%p {VT_LPWSTR: %s}\", v, wine_dbgstr_w(V_BSTR(v)) );\n    case VT_BSTR:\n        return wine_dbg_sprintf( \"%p {VT_BSTR: %s}\", v, wine_dbgstr_w(V_BSTR(v)) );\n    case VT_DISPATCH:\n        return wine_dbg_sprintf( \"%p {VT_DISPATCH: %p}\", v, V_DISPATCH(v) );\n    case VT_ERROR:\n        return wine_dbg_sprintf( \"%p {VT_ERROR: %08x}\", v, V_ERROR(v) );\n    case VT_BOOL:\n        return wine_dbg_sprintf( \"%p {VT_BOOL: %x}\", v, V_BOOL(v) );\n    case VT_UNKNOWN:\n        return wine_dbg_sprintf( \"%p {VT_UNKNOWN: %p}\", v, V_UNKNOWN(v) );\n    case VT_I1:\n        return wine_dbg_sprintf( \"%p {VT_I1: %d}\", v, V_I1(v) );\n    case VT_UI1:\n        return wine_dbg_sprintf( \"%p {VT_UI1: %u}\", v, V_UI1(v) );\n    case VT_UI2:\n        return wine_dbg_sprintf( \"%p {VT_UI2: %d}\", v, V_UI2(v) );\n    case VT_UI4:\n        return wine_dbg_sprintf( \"%p {VT_UI4: %d}\", v, V_UI4(v) );\n    case VT_I8:\n        return wine_dbg_sprintf( \"%p {VT_I8: %s}\", v, wine_dbgstr_longlong(V_I8(v)) );\n    case VT_UI8:\n        return wine_dbg_sprintf( \"%p {VT_UI8: %s}\", v, wine_dbgstr_longlong(V_UI8(v)) );\n    case VT_INT:\n        return wine_dbg_sprintf( \"%p {VT_INT: %d}\", v, V_INT(v) );\n    case VT_UINT:\n        return wine_dbg_sprintf( \"%p {VT_UINT: %u}\", v, V_UINT(v) );\n    case VT_VOID:\n        return wine_dbg_sprintf( \"%p {VT_VOID}\", v );\n    case VT_RECORD:\n        return wine_dbg_sprintf( \"%p {VT_RECORD: %p %p}\", v, V_RECORD(v), V_RECORDINFO(v) );\n    default:\n        return wine_dbg_sprintf( \"%p {vt %s}\", v, wine_dbgstr_vt(V_VT(v)) );\n    }\n}\n\n#endif /* defined(__oaidl_h__) && defined(V_VT) */\n\n#ifndef WINE_TRACE\n#define WINE_TRACE                 __WINE_DPRINTF(_TRACE,__wine_dbch___default)\n#define WINE_TRACE_(ch)            __WINE_DPRINTF(_TRACE,&__wine_dbch_##ch)\n#endif\n#define WINE_TRACE_ON(ch)          __WINE_IS_DEBUG_ON(_TRACE,&__wine_dbch_##ch)\n\n#ifndef WINE_WARN\n#define WINE_WARN                  __WINE_DPRINTF(_WARN,__wine_dbch___default)\n#define WINE_WARN_(ch)             __WINE_DPRINTF(_WARN,&__wine_dbch_##ch)\n#endif\n#define WINE_WARN_ON(ch)           __WINE_IS_DEBUG_ON(_WARN,&__wine_dbch_##ch)\n\n#ifndef WINE_FIXME\n#define WINE_FIXME                 __WINE_DPRINTF(_FIXME,__wine_dbch___default)\n#define WINE_FIXME_(ch)            __WINE_DPRINTF(_FIXME,&__wine_dbch_##ch)\n#endif\n#define WINE_FIXME_ON(ch)          __WINE_IS_DEBUG_ON(_FIXME,&__wine_dbch_##ch)\n\n#define WINE_ERR                   __WINE_DPRINTF(_ERR,__wine_dbch___default)\n#define WINE_ERR_(ch)              __WINE_DPRINTF(_ERR,&__wine_dbch_##ch)\n#define WINE_ERR_ON(ch)            __WINE_IS_DEBUG_ON(_ERR,&__wine_dbch_##ch)\n\n#define WINE_DECLARE_DEBUG_CHANNEL(ch) \\\n    static struct __wine_debug_channel __wine_dbch_##ch = { ~0, #ch }\n#define WINE_DEFAULT_DEBUG_CHANNEL(ch) \\\n    static struct __wine_debug_channel __wine_dbch_##ch = { ~0, #ch }; \\\n    static struct __wine_debug_channel * const __wine_dbch___default = &__wine_dbch_##ch\n\n#define WINE_DPRINTF               wine_dbg_printf\n#define WINE_MESSAGE               wine_dbg_printf\n\n#ifdef __WINESRC__\n/* Wine uses shorter names that are very likely to conflict with other software */\n\nstatic inline const char *debugstr_an( const char * s, int n ) { return wine_dbgstr_an( s, n ); }\nstatic inline const char *debugstr_wn( const WCHAR *s, int n ) { return wine_dbgstr_wn( s, n ); }\nstatic inline const char *debugstr_guid( const struct _GUID *id ) { return wine_dbgstr_guid(id); }\nstatic inline const char *debugstr_a( const char *s )  { return wine_dbgstr_an( s, -1 ); }\nstatic inline const char *debugstr_w( const WCHAR *s ) { return wine_dbgstr_wn( s, -1 ); }\n\n#if defined(__oaidl_h__) && defined(V_VT)\nstatic inline const char *debugstr_vt( VARTYPE vt ) { return wine_dbgstr_vt( vt ); }\nstatic inline const char *debugstr_variant( const VARIANT *v ) { return wine_dbgstr_variant( v ); }\n#endif\n\n#define TRACE                      WINE_TRACE\n#define TRACE_(ch)                 WINE_TRACE_(ch)\n#define TRACE_ON(ch)               WINE_TRACE_ON(ch)\n\n#define WARN                       WINE_WARN\n#define WARN_(ch)                  WINE_WARN_(ch)\n#define WARN_ON(ch)                WINE_WARN_ON(ch)\n\n#define FIXME                      WINE_FIXME\n#define FIXME_(ch)                 WINE_FIXME_(ch)\n#define FIXME_ON(ch)               WINE_FIXME_ON(ch)\n\n#undef ERR  /* Solaris got an 'ERR' define in <sys/reg.h> */\n#define ERR                        WINE_ERR\n#define ERR_(ch)                   WINE_ERR_(ch)\n#define ERR_ON(ch)                 WINE_ERR_ON(ch)\n\n#define DPRINTF                    WINE_DPRINTF\n#define MESSAGE                    WINE_MESSAGE\n\n#endif /* __WINESRC__ */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* __WINE_WINE_DEBUG_H */\n"
  },
  {
    "path": "wine/wine/exception.h",
    "content": "/*\n * Wine exception handling\n *\n * Copyright (c) 1999 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINE_EXCEPTION_H\n#define __WINE_WINE_EXCEPTION_H\n\n#include <setjmp.h>\ntypedef jmp_buf sigjmp_buf;\n#include <windef.h>\n#include <excpt.h>\n#define DECLSPEC_HIDDEN\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* The following definitions allow using exceptions in Wine and Winelib code\n *\n * They should be used like this:\n *\n * __TRY\n * {\n *     do some stuff that can raise an exception\n * }\n * __EXCEPT(filter_func)\n * {\n *     handle the exception here\n * }\n * __ENDTRY\n *\n * or\n *\n * __TRY\n * {\n *     do some stuff that can raise an exception\n * }\n * __FINALLY(finally_func)\n *\n * The filter_func and finally_func functions must be defined like this:\n *\n * LONG CALLBACK filter_func( PEXCEPTION_POINTERS __eptr ) { ... }\n *\n * void CALLBACK finally_func( BOOL __normal ) { ... }\n *\n * The filter function must return one of the EXCEPTION_* code; it can\n * use GetExceptionInformation() and GetExceptionCode() to retrieve the\n * exception info.\n *\n * Warning: Inside a __TRY or __EXCEPT block, 'break' or 'continue' statements\n *          break out of the current block, but avoid using them because they\n *          won't work when compiling with native exceptions. You cannot use\n *          'return', 'goto', or 'longjmp' to leave a __TRY block either, as\n *          this will surely crash. You can use 'return', 'goto', or 'longjmp'\n *          to leave an __EXCEPT block though.\n *\n * -- AJ\n */\n\n#ifndef __GNUC__\n#define __attribute__(x) /* nothing */\n#endif\n\n/* Define this if you want to use your compiler built-in __try/__except support.\n * This is only useful when compiling to a native Windows binary, as the built-in\n * compiler exceptions will most certainly not work under Winelib.\n */\n#ifdef USE_COMPILER_EXCEPTIONS\n\n#define __TRY __try\n#define __EXCEPT(func) __except((func)(GetExceptionInformation()))\n#define __EXCEPT_CTX(func, ctx) __except((func)(GetExceptionInformation(), ctx))\n#define __FINALLY(func) __finally { (func)(!AbnormalTermination()); }\n#define __FINALLY_CTX(func, ctx) __finally { (func)(!AbnormalTermination(), ctx); }\n#define __ENDTRY /*nothing*/\n#define __EXCEPT_PAGE_FAULT __except(GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION)\n#define __EXCEPT_ALL __except(EXCEPTION_EXECUTE_HANDLER)\n\n#else  /* USE_COMPILER_EXCEPTIONS */\n\n#if defined(__MINGW32__) || defined(__CYGWIN__) || defined(__WINE_SETJMP_H)\n#define sigjmp_buf jmp_buf\n#define sigsetjmp(buf,sigs) setjmp(buf)\n#define siglongjmp(buf,val) longjmp(buf,val)\n#endif\n\n\textern void DECLSPEC_NORETURN __wine_rtl_unwind(EXCEPTION_REGISTRATION_RECORD* frame, EXCEPTION_RECORD *record,\n                               void (*target)(void) ) DECLSPEC_HIDDEN ;\nextern DWORD __wine_exception_handler( EXCEPTION_RECORD *record,\n                                       EXCEPTION_REGISTRATION_RECORD *frame,\n                                       CONTEXT *context,\n                                       EXCEPTION_REGISTRATION_RECORD **pdispatcher ) DECLSPEC_HIDDEN;\nextern DWORD __wine_exception_ctx_handler( EXCEPTION_RECORD *record,\n                                           EXCEPTION_REGISTRATION_RECORD *frame,\n                                           CONTEXT *context,\n                                           EXCEPTION_REGISTRATION_RECORD **pdispatcher ) DECLSPEC_HIDDEN;\nextern DWORD __wine_exception_handler_page_fault( EXCEPTION_RECORD *record,\n                                                  EXCEPTION_REGISTRATION_RECORD *frame,\n                                                  CONTEXT *context,\n                                                  EXCEPTION_REGISTRATION_RECORD **pdispatcher ) DECLSPEC_HIDDEN;\nextern DWORD __wine_exception_handler_all( EXCEPTION_RECORD *record,\n                                           EXCEPTION_REGISTRATION_RECORD *frame,\n                                           CONTEXT *context,\n                                           EXCEPTION_REGISTRATION_RECORD **pdispatcher ) DECLSPEC_HIDDEN;\nextern DWORD __wine_finally_handler( EXCEPTION_RECORD *record,\n                                     EXCEPTION_REGISTRATION_RECORD *frame,\n                                     CONTEXT *context,\n                                     EXCEPTION_REGISTRATION_RECORD **pdispatcher ) DECLSPEC_HIDDEN;\nextern DWORD __wine_finally_ctx_handler( EXCEPTION_RECORD *record,\n                                         EXCEPTION_REGISTRATION_RECORD *frame,\n                                         CONTEXT *context,\n                                         EXCEPTION_REGISTRATION_RECORD **pdispatcher ) DECLSPEC_HIDDEN;\n\n#define __TRY \\\n    do { __WINE_FRAME __f; \\\n         int __first = 1; \\\n         for (;;) if (!__first) \\\n         { \\\n             do {\n\n#define __EXCEPT(func) \\\n             } while(0); \\\n             __wine_pop_frame( &__f.frame ); \\\n             break; \\\n         } else { \\\n             __f.frame.Handler = __wine_exception_handler; \\\n             __f.u.filter = (func); \\\n             if (sigsetjmp( __f.jmp, 0 )) { \\\n                 const __WINE_FRAME * const __eptr __attribute__((unused)) = &__f; \\\n                 do {\n\n#define __EXCEPT_CTX(func, context) \\\n             } while(0); \\\n             __wine_pop_frame( &__f.frame ); \\\n             break; \\\n         } else { \\\n             __f.frame.Handler = __wine_exception_ctx_handler; \\\n             __f.u.filter_ctx = (func); \\\n             __f.ctx = context; \\\n             if (sigsetjmp( __f.jmp, 0 )) { \\\n                 const __WINE_FRAME * const __eptr __attribute__((unused)) = &__f; \\\n                 do {\n\n/* convenience handler for page fault exceptions */\n#define __EXCEPT_PAGE_FAULT \\\n             } while(0); \\\n             __wine_pop_frame( &__f.frame ); \\\n             break; \\\n         } else { \\\n             __f.frame.Handler = __wine_exception_handler_page_fault; \\\n             if (sigsetjmp( __f.jmp, 0 )) { \\\n                 const __WINE_FRAME * const __eptr __attribute__((unused)) = &__f; \\\n                 do {\n\n/* convenience handler for all exception */\n#define __EXCEPT_ALL \\\n             } while(0); \\\n             __wine_pop_frame( &__f.frame ); \\\n             break; \\\n         } else { \\\n             __f.frame.Handler = __wine_exception_handler_all; \\\n             if (sigsetjmp( __f.jmp, 0 )) { \\\n                 const __WINE_FRAME * const __eptr __attribute__((unused)) = &__f; \\\n                 do {\n\n#define __ENDTRY \\\n                 } while (0); \\\n                 break; \\\n             } \\\n             __wine_push_frame( &__f.frame ); \\\n             __first = 0; \\\n         } \\\n    } while (0);\n\n#define __FINALLY(func) \\\n             } while(0); \\\n             __wine_pop_frame( &__f.frame ); \\\n             (func)(1); \\\n             break; \\\n         } else { \\\n             __f.frame.Handler = __wine_finally_handler; \\\n             __f.u.finally_func = (func); \\\n             __wine_push_frame( &__f.frame ); \\\n             __first = 0; \\\n         } \\\n    } while (0);\n\n#define __FINALLY_CTX(func, context) \\\n             } while(0); \\\n             __wine_pop_frame( &__f.frame ); \\\n             (func)(1, context); \\\n             break; \\\n         } else { \\\n             __f.frame.Handler = __wine_finally_ctx_handler; \\\n             __f.u.finally_func_ctx = (func); \\\n             __f.ctx = context; \\\n             __wine_push_frame( &__f.frame ); \\\n             __first = 0; \\\n         } \\\n    } while (0);\n\n\ntypedef LONG (CALLBACK *__WINE_FILTER)(PEXCEPTION_POINTERS);\ntypedef LONG (CALLBACK *__WINE_FILTER_CTX)(PEXCEPTION_POINTERS, void*);\ntypedef void (CALLBACK *__WINE_FINALLY)(BOOL);\ntypedef void (CALLBACK *__WINE_FINALLY_CTX)(BOOL, void*);\n\n#define GetExceptionInformation() (__eptr)\n#define GetExceptionCode()        (__eptr->ExceptionRecord->ExceptionCode)\n#define AbnormalTermination()     (!__normal)\n\ntypedef struct __tagWINE_FRAME\n{\n    EXCEPTION_REGISTRATION_RECORD frame;\n    union\n    {\n        /* exception data */\n        __WINE_FILTER filter;\n        __WINE_FILTER_CTX filter_ctx;\n        /* finally data */\n        __WINE_FINALLY finally_func;\n        __WINE_FINALLY_CTX finally_func_ctx;\n    } u;\n    void *ctx;\n    sigjmp_buf jmp;\n    /* hack to make GetExceptionCode() work in handler */\n    DWORD ExceptionCode;\n    const struct __tagWINE_FRAME *ExceptionRecord;\n} __WINE_FRAME;\n\n#endif /* USE_COMPILER_EXCEPTIONS */\n#define Prev Next\nstatic inline EXCEPTION_REGISTRATION_RECORD *__wine_push_frame( EXCEPTION_REGISTRATION_RECORD *frame )\n{\n#if defined(__GNUC__) && defined(__i386__)\n    EXCEPTION_REGISTRATION_RECORD *prev;\n    __asm__ __volatile__(\".byte 0x64\\n\\tmovl (0),%0\"\n                         \"\\n\\tmovl %0,(%1)\"\n                         \"\\n\\t.byte 0x64\\n\\tmovl %1,(0)\"\n                         : \"=&r\" (prev) : \"r\" (frame) : \"memory\" );\n    return prev;\n#else\n    NT_TIB *teb = (NT_TIB *)NtCurrentTeb();\n    frame->Prev = teb->ExceptionList;\n    teb->ExceptionList = frame;\n    return frame->Prev;\n#endif\n}\n\nstatic inline EXCEPTION_REGISTRATION_RECORD *__wine_pop_frame( EXCEPTION_REGISTRATION_RECORD *frame )\n{\n#if defined(__GNUC__) && defined(__i386__)\n    __asm__ __volatile__(\".byte 0x64\\n\\tmovl %0,(0)\"\n                         : : \"r\" (frame->Prev) : \"memory\" );\n    return frame->Prev;\n\n#else\n    NT_TIB *teb = (NT_TIB *)NtCurrentTeb();\n    teb->ExceptionList = frame->Prev;\n    return frame->Prev;\n#endif\n}\n\nstatic inline EXCEPTION_REGISTRATION_RECORD *__wine_get_frame(void)\n{\n#if defined(__GNUC__) && defined(__i386__)\n    EXCEPTION_REGISTRATION_RECORD *ret;\n    __asm__ __volatile__(\".byte 0x64\\n\\tmovl (0),%0\" : \"=r\" (ret) );\n    return ret;\n#else\n    NT_TIB *teb = (NT_TIB *)NtCurrentTeb();\n    return teb->ExceptionList;\n#endif\n}\n\n/* Exception handling flags - from OS/2 2.0 exception handling */\n\n/* Win32 seems to use the same flags as ExceptionFlags in an EXCEPTION_RECORD */\n#define EH_NONCONTINUABLE   0x01\n#define EH_UNWINDING        0x02\n#define EH_EXIT_UNWIND      0x04\n#define EH_STACK_INVALID    0x08\n#define EH_NESTED_CALL      0x10\n#define EH_TARGET_UNWIND    0x20\n#define EH_COLLIDED_UNWIND  0x40\n\n/* Wine-specific exceptions codes */\n\n#define EXCEPTION_WINE_STUB       0x80000100  /* stub entry point called */\n#define EXCEPTION_WINE_ASSERTION  0x80000101  /* assertion failed */\n\n/* unhandled return status from vm86 mode */\n#define EXCEPTION_VM86_INTx       0x80000110\n#define EXCEPTION_VM86_STI        0x80000111\n#define EXCEPTION_VM86_PICRETURN  0x80000112\n\nextern void __wine_enter_vm86( CONTEXT *context );\n#undef Prev\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* __WINE_WINE_EXCEPTION_H */\n"
  },
  {
    "path": "wine/wine/heap.h",
    "content": "/*\n * Wine heap memory allocation wrappers\n *\n * Copyright 2006 Jacek Caban for CodeWeavers\n * Copyright 2013, 2018 Michael Stefaniuc\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINE_HEAP_H\n#define __WINE_WINE_HEAP_H\n\n#include <winbase.h>\n\nstatic inline void * __WINE_ALLOC_SIZE(1) heap_alloc(SIZE_T len)\n{\n    return HeapAlloc(GetProcessHeap(), 0, len);\n}\n\nstatic inline void * __WINE_ALLOC_SIZE(1) heap_alloc_zero(SIZE_T len)\n{\n    return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len);\n}\n\nstatic inline void * __WINE_ALLOC_SIZE(2) heap_realloc(void *mem, SIZE_T len)\n{\n    if (!mem)\n        return HeapAlloc(GetProcessHeap(), 0, len);\n    return HeapReAlloc(GetProcessHeap(), 0, mem, len);\n}\n\nstatic inline void heap_free(void *mem)\n{\n    HeapFree(GetProcessHeap(), 0, mem);\n}\n\nstatic inline void *heap_calloc(SIZE_T count, SIZE_T size)\n{\n    SIZE_T len = count * size;\n\n    if (size && len / size != count)\n        return NULL;\n    return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len);\n}\n\n#endif  /* __WINE_WINE_HEAP_H */\n"
  },
  {
    "path": "wine/wine/library.h",
    "content": "/*\n * Definitions for the Wine library\n *\n * Copyright 2000 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINE_LIBRARY_H\n#define __WINE_WINE_LIBRARY_H\n\n#include <stdarg.h>\n#include <sys/types.h>\n\n#include <windef.h>\n#include <winbase.h>\n\n#ifdef __WINE_WINE_TEST_H\n#error This file should not be used in Wine tests\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* configuration */\n\nextern const char *wine_get_build_dir(void);\nextern const char *wine_get_config_dir(void);\nextern const char *wine_get_data_dir(void);\nextern const char *wine_get_server_dir(void);\nextern const char *wine_get_user_name(void);\nextern const char *wine_get_version(void);\nextern const char *wine_get_build_id(void);\nextern void wine_init_argv0_path( const char *argv0 );\nextern void wine_exec_wine_binary( const char *name, char **argv, const char *env_var );\n\n/* dll loading */\n\ntypedef void (*load_dll_callback_t)( void *, const char * );\n\nextern void *wine_dlopen( const char *filename, int flag, char *error, size_t errorsize );\nextern void *wine_dlsym( void *handle, const char *symbol, char *error, size_t errorsize );\nextern int wine_dlclose( void *handle, char *error, size_t errorsize );\nextern void wine_dll_set_callback( load_dll_callback_t load );\nextern void *wine_dll_load( const char *filename, char *error, int errorsize, int *file_exists );\nextern void *wine_dll_load_main_exe( const char *name, char *error, int errorsize,\n                                     int test_only, int *file_exists );\nextern void wine_dll_unload( void *handle );\nextern const char *wine_dll_enum_load_path( unsigned int index );\nextern int wine_dll_get_owner( const char *name, char *buffer, int size, int *file_exists );\n\nextern int __wine_main_argc;\nextern char **__wine_main_argv;\nextern WCHAR **__wine_main_wargv;\nextern void __wine_dll_register( const IMAGE_NT_HEADERS *header, const char *filename );\nextern void wine_init( int argc, char *argv[], char *error, int error_size );\n\n/* portability */\n\nextern void DECLSPEC_NORETURN wine_switch_to_stack( void (*func)(void *), void *arg, void *stack );\nextern int wine_call_on_stack( int (*func)(void *), void *arg, void *stack );\n\n/* memory mappings */\n\nextern void *wine_anon_mmap( void *start, size_t size, int prot, int flags );\nextern void wine_mmap_add_reserved_area( void *addr, size_t size );\nextern void wine_mmap_remove_reserved_area( void *addr, size_t size, int unmap );\nextern int wine_mmap_is_in_reserved_area( void *addr, size_t size );\nextern int wine_mmap_enum_reserved_areas( int (*enum_func)(void *base, size_t size, void *arg),\n                                          void *arg, int top_down );\n\n#ifdef __i386__\n\n/* LDT management */\n\nextern void wine_ldt_init_locking( void (*lock_func)(void), void (*unlock_func)(void) );\nextern void wine_ldt_get_entry( unsigned short sel, LDT_ENTRY *entry );\nextern int wine_ldt_set_entry( unsigned short sel, const LDT_ENTRY *entry );\nextern int wine_ldt_is_system( unsigned short sel );\nextern void *wine_ldt_get_ptr( unsigned short sel, unsigned long offset );\nextern unsigned short wine_ldt_alloc_entries( int count );\nextern unsigned short wine_ldt_realloc_entries( unsigned short sel, int oldcount, int newcount );\nextern void wine_ldt_free_entries( unsigned short sel, int count );\nextern unsigned short wine_ldt_alloc_fs(void);\nextern void wine_ldt_init_fs( unsigned short sel, const LDT_ENTRY *entry );\nextern void wine_ldt_free_fs( unsigned short sel );\n\n/* the local copy of the LDT */\n__declspec(dllimport) struct __wine_ldt_copy\n{\n    void         *base[8192];  /* base address or 0 if entry is free   */\n    unsigned long limit[8192]; /* limit in bytes or 0 if entry is free */\n    unsigned char flags[8192]; /* flags (defined below) */\n} wine_ldt_copy;\n\n#define WINE_LDT_FLAGS_DATA      0x13  /* Data segment */\n#define WINE_LDT_FLAGS_STACK     0x17  /* Stack segment */\n#define WINE_LDT_FLAGS_CODE      0x1b  /* Code segment */\n#define WINE_LDT_FLAGS_TYPE_MASK 0x1f  /* Mask for segment type */\n#define WINE_LDT_FLAGS_32BIT     0x40  /* Segment is 32-bit (code or stack) */\n#define WINE_LDT_FLAGS_ALLOCATED 0x80  /* Segment is allocated (no longer free) */\n\n/* helper functions to manipulate the LDT_ENTRY structure */\nstatic inline void wine_ldt_set_base( LDT_ENTRY *ent, const void *base )\n{\n    ent->BaseLow               = (WORD)(ULONG_PTR)base;\n    ent->HighWord.Bits.BaseMid = (BYTE)((ULONG_PTR)base >> 16);\n    ent->HighWord.Bits.BaseHi  = (BYTE)((ULONG_PTR)base >> 24);\n}\nstatic inline void wine_ldt_set_limit( LDT_ENTRY *ent, unsigned int limit )\n{\n    if ((ent->HighWord.Bits.Granularity = (limit >= 0x100000))) limit >>= 12;\n    ent->LimitLow = (WORD)limit;\n    ent->HighWord.Bits.LimitHi = (limit >> 16);\n}\nstatic inline void *wine_ldt_get_base( const LDT_ENTRY *ent )\n{\n    return (void *)(ent->BaseLow |\n                    (ULONG_PTR)ent->HighWord.Bits.BaseMid << 16 |\n                    (ULONG_PTR)ent->HighWord.Bits.BaseHi << 24);\n}\nstatic inline unsigned int wine_ldt_get_limit( const LDT_ENTRY *ent )\n{\n    unsigned int limit = ent->LimitLow | (ent->HighWord.Bits.LimitHi << 16);\n    if (ent->HighWord.Bits.Granularity) limit = (limit << 12) | 0xfff;\n    return limit;\n}\nstatic inline void wine_ldt_set_flags( LDT_ENTRY *ent, unsigned char flags )\n{\n    ent->HighWord.Bits.Dpl         = 3;\n    ent->HighWord.Bits.Pres        = 1;\n    ent->HighWord.Bits.Type        = flags;\n    ent->HighWord.Bits.Sys         = 0;\n    ent->HighWord.Bits.Reserved_0  = 0;\n    ent->HighWord.Bits.Default_Big = (flags & WINE_LDT_FLAGS_32BIT) != 0;\n}\nstatic inline unsigned char wine_ldt_get_flags( const LDT_ENTRY *ent )\n{\n    unsigned char ret = (unsigned char)ent->HighWord.Bits.Type;\n    if (ent->HighWord.Bits.Default_Big) ret |= WINE_LDT_FLAGS_32BIT;\n    return ret;\n}\nstatic inline int wine_ldt_is_empty( const LDT_ENTRY *ent )\n{\n    const DWORD *dw = (const DWORD *)ent;\n    return (dw[0] | dw[1]) == 0;\n}\n\n/* winnt.h*/\n\n#undef FORCEINLINE\n#ifndef FORCEINLINE\n# if defined(_MSC_VER) && (_MSC_VER >= 1200)\n#  define FORCEINLINE __forceinline\n# elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))\n#  define FORCEINLINE inline __attribute__((always_inline))\n# else\n#  define FORCEINLINE inline\n# endif\n#endif\n\n/* segment register access */\n\n#define USE_SREG_WORKAROUND 1\n# if !USE_SREG_WORKAROUND && (defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2))))\n#  define __DEFINE_GET_SEG(seg) \\\n    static FORCEINLINE unsigned short wine_get_##seg(void) \\\n    { unsigned short res; __asm__ __volatile__(\"movw %%\" #seg \",%w0\" : \"=r\"(res)); return res; }\n#  define __DEFINE_SET_SEG(seg) \\\n    static FORCEINLINE void wine_set_##seg(unsigned int val) \\\n    { __asm__(\"movw %w0,%%\" #seg : : \"r\" (val)); }\n# elif !USE_SREG_WORKAROUND && defined(_MSC_VER)\n#  define __DEFINE_GET_SEG(seg) \\\n    static inline unsigned short wine_get_##seg(void) \\\n    { unsigned short res; __asm { mov res, seg } return res; }\n#  define __DEFINE_SET_SEG(seg) \\\n    static inline void wine_set_##seg(unsigned int val) { __asm { mov seg, val } }\n# else  /* __GNUC__ || _MSC_VER */\n#  define __DEFINE_GET_SEG(seg) extern unsigned short wine_get_##seg(void);\n#  define __DEFINE_SET_SEG(seg) extern void wine_set_##seg(unsigned int);\n# endif /* __GNUC__ || _MSC_VER */\n\n__DEFINE_GET_SEG(cs)\n__DEFINE_GET_SEG(ds)\n__DEFINE_GET_SEG(es)\n__DEFINE_GET_SEG(fs)\n__DEFINE_GET_SEG(gs)\n__DEFINE_GET_SEG(ss)\n__DEFINE_SET_SEG(fs)\n__DEFINE_SET_SEG(gs)\n#undef __DEFINE_GET_SEG\n#undef __DEFINE_SET_SEG\n\n#endif  /* __i386__ */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* __WINE_WINE_LIBRARY_H */\n"
  },
  {
    "path": "wine/wine/list.h",
    "content": "/*\n * Linked lists support\n *\n * Copyright (C) 2002 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_SERVER_LIST_H\n#define __WINE_SERVER_LIST_H\n\n#include <stddef.h>\n\nstruct list\n{\n    struct list *next;\n    struct list *prev;\n};\n\n/* Define a list like so:\n *\n *   struct gadget\n *   {\n *       struct list  entry;   <-- doesn't have to be the first item in the struct\n *       int          a, b;\n *   };\n *\n *   static struct list global_gadgets = LIST_INIT( global_gadgets );\n *\n * or\n *\n *   struct some_global_thing\n *   {\n *       struct list gadgets;\n *   };\n *\n *   list_init( &some_global_thing->gadgets );\n *\n * Manipulate it like this:\n *\n *   list_add_head( &global_gadgets, &new_gadget->entry );\n *   list_remove( &new_gadget->entry );\n *   list_add_after( &some_random_gadget->entry, &new_gadget->entry );\n *\n * And to iterate over it:\n *\n *   struct gadget *gadget;\n *   LIST_FOR_EACH_ENTRY( gadget, &global_gadgets, struct gadget, entry )\n *   {\n *       ...\n *   }\n *\n */\n\n/* add an element after the specified one */\nstatic inline void list_add_after( struct list *elem, struct list *to_add )\n{\n    to_add->next = elem->next;\n    to_add->prev = elem;\n    elem->next->prev = to_add;\n    elem->next = to_add;\n}\n\n/* add an element before the specified one */\nstatic inline void list_add_before( struct list *elem, struct list *to_add )\n{\n    to_add->next = elem;\n    to_add->prev = elem->prev;\n    elem->prev->next = to_add;\n    elem->prev = to_add;\n}\n\n/* add element at the head of the list */\nstatic inline void list_add_head( struct list *list, struct list *elem )\n{\n    list_add_after( list, elem );\n}\n\n/* add element at the tail of the list */\nstatic inline void list_add_tail( struct list *list, struct list *elem )\n{\n    list_add_before( list, elem );\n}\n\n/* remove an element from its list */\nstatic inline void list_remove( struct list *elem )\n{\n    elem->next->prev = elem->prev;\n    elem->prev->next = elem->next;\n}\n\n/* get the next element */\nstatic inline struct list *list_next( const struct list *list, const struct list *elem )\n{\n    struct list *ret = elem->next;\n    if (elem->next == list) ret = NULL;\n    return ret;\n}\n\n/* get the previous element */\nstatic inline struct list *list_prev( const struct list *list, const struct list *elem )\n{\n    struct list *ret = elem->prev;\n    if (elem->prev == list) ret = NULL;\n    return ret;\n}\n\n/* get the first element */\nstatic inline struct list *list_head( const struct list *list )\n{\n    return list_next( list, list );\n}\n\n/* get the last element */\nstatic inline struct list *list_tail( const struct list *list )\n{\n    return list_prev( list, list );\n}\n\n/* check if a list is empty */\nstatic inline int list_empty( const struct list *list )\n{\n    return list->next == list;\n}\n\n/* initialize a list */\nstatic inline void list_init( struct list *list )\n{\n    list->next = list->prev = list;\n}\n\n/* count the elements of a list */\nstatic inline unsigned int list_count( const struct list *list )\n{\n    unsigned count = 0;\n    const struct list *ptr;\n    for (ptr = list->next; ptr != list; ptr = ptr->next) count++;\n    return count;\n}\n\n/* move all elements from src to the tail of dst */\nstatic inline void list_move_tail( struct list *dst, struct list *src )\n{\n    if (list_empty(src)) return;\n\n    dst->prev->next = src->next;\n    src->next->prev = dst->prev;\n    dst->prev = src->prev;\n    src->prev->next = dst;\n    list_init(src);\n}\n\n/* move all elements from src to the head of dst */\nstatic inline void list_move_head( struct list *dst, struct list *src )\n{\n    if (list_empty(src)) return;\n\n    dst->next->prev = src->prev;\n    src->prev->next = dst->next;\n    dst->next = src->next;\n    src->next->prev = dst;\n    list_init(src);\n}\n\n/* iterate through the list */\n#define LIST_FOR_EACH(cursor,list) \\\n    for ((cursor) = (list)->next; (cursor) != (list); (cursor) = (cursor)->next)\n\n/* iterate through the list, with safety against removal */\n#define LIST_FOR_EACH_SAFE(cursor, cursor2, list) \\\n    for ((cursor) = (list)->next, (cursor2) = (cursor)->next; \\\n         (cursor) != (list); \\\n         (cursor) = (cursor2), (cursor2) = (cursor)->next)\n\n/* iterate through the list using a list entry */\n#define LIST_FOR_EACH_ENTRY(elem, list, type, field) \\\n    for ((elem) = LIST_ENTRY((list)->next, type, field); \\\n         &(elem)->field != (list); \\\n         (elem) = LIST_ENTRY((elem)->field.next, type, field))\n\n/* iterate through the list using a list entry, with safety against removal */\n#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field) \\\n    for ((cursor) = LIST_ENTRY((list)->next, type, field), \\\n         (cursor2) = LIST_ENTRY((cursor)->field.next, type, field); \\\n         &(cursor)->field != (list); \\\n         (cursor) = (cursor2), \\\n         (cursor2) = LIST_ENTRY((cursor)->field.next, type, field))\n\n/* iterate through the list in reverse order */\n#define LIST_FOR_EACH_REV(cursor,list) \\\n    for ((cursor) = (list)->prev; (cursor) != (list); (cursor) = (cursor)->prev)\n\n/* iterate through the list in reverse order, with safety against removal */\n#define LIST_FOR_EACH_SAFE_REV(cursor, cursor2, list) \\\n    for ((cursor) = (list)->prev, (cursor2) = (cursor)->prev; \\\n         (cursor) != (list); \\\n         (cursor) = (cursor2), (cursor2) = (cursor)->prev)\n\n/* iterate through the list in reverse order using a list entry */\n#define LIST_FOR_EACH_ENTRY_REV(elem, list, type, field) \\\n    for ((elem) = LIST_ENTRY((list)->prev, type, field); \\\n         &(elem)->field != (list); \\\n         (elem) = LIST_ENTRY((elem)->field.prev, type, field))\n\n/* iterate through the list in reverse order using a list entry, with safety against removal */\n#define LIST_FOR_EACH_ENTRY_SAFE_REV(cursor, cursor2, list, type, field) \\\n    for ((cursor) = LIST_ENTRY((list)->prev, type, field), \\\n         (cursor2) = LIST_ENTRY((cursor)->field.prev, type, field); \\\n         &(cursor)->field != (list); \\\n         (cursor) = (cursor2), \\\n         (cursor2) = LIST_ENTRY((cursor)->field.prev, type, field))\n\n/* macros for statically initialized lists */\n#undef LIST_INIT\n#define LIST_INIT(list)  { &(list), &(list) }\n\n/* get pointer to object containing list element */\n#undef LIST_ENTRY\n#define LIST_ENTRY(elem, type, field) \\\n    ((type *)((char *)(elem) - offsetof(type, field)))\n\n#endif  /* __WINE_SERVER_LIST_H */\n"
  },
  {
    "path": "wine/wine/mmsystem16.h",
    "content": "/*\n * MMSYSTEM - Multimedia Wine Extension ... :-)\n *\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINE_MMSYSTEM16_H\n#define __WINE_WINE_MMSYSTEM16_H\n\n//#include \"winuser.rh\"\n#include \"windef.h\"\n#include \"wine/windef16.h\"\n#define DECL_WINELIB_TYPE_AW(x)\n//#include \"mmsystem.h\"\n#ifdef _MSC_VER\n#include <mmeapi.h>\n#else\n#endif\n#include <MMSYSTEM.H>\n#ifdef _MSC_VER\n#include <mmddk.h>\n#else\n#include \"../windows/mmddk.h\"\n#endif\n#define DRV_QUERYDRVENTRY (DRV_RESERVED + 1) //undefined\n#define DRV_SUCCESS\t\t0x0001\n#define DRV_FAILURE\t\t0x0000\n#define MCI_SOUND                       0x0812\n#define DRV_EXITAPPLICATION     0x000C\n\ntypedef struct tagMCI_SOUND_PARMSW {\n    DWORD_PTR   dwCallback;\n    LPCWSTR     lpstrSoundName;\n} MCI_SOUND_PARMSW, *LPMCI_SOUND_PARMSW;\nBOOL            WINAPI  mciExecute(LPCSTR);\n#include <pshpack1.h>\n//include/mmsystem.h\ntypedef LPCSTR          HPCSTR;         /* a huge version of LPCSTR */\n#define DECLSPEC_HIDDEN\n\n\ntypedef UINT16\tMMVERSION16;\ntypedef UINT16\tMCIDEVICEID16;\ntypedef\tUINT16\tMMRESULT16;\n\ntypedef struct {\n    UINT16    wType;\t\t/* indicates the contents of the union */\n    union {\n\tDWORD ms;\t\t/* milliseconds */\n\tDWORD sample;\t\t/* samples */\n\tDWORD cb;\t\t/* byte count */\n\tstruct {\t\t/* SMPTE */\n\t    BYTE hour;\t\t/* hours */\n\t    BYTE min;\t\t/* minutes */\n\t    BYTE sec;\t\t/* seconds */\n\t    BYTE frame;\t\t/* frames  */\n\t    BYTE fps;\t\t/* frames per second */\n\t    BYTE dummy;\t\t/* pad */\n\t} smpte;\n\tstruct {\t\t/* MIDI */\n\t    DWORD songptrpos;\t/* song pointer position */\n\t} midi;\n    } u;\n} MMTIME16,  *LPMMTIME16;\n\ntypedef struct {\n    DWORD   dwDCISize;\n    SEGPTR  lpszDCISectionName;\n    SEGPTR  lpszDCIAliasName;\n} DRVCONFIGINFO16, *LPDRVCONFIGINFO16;\n\n/* GetDriverInfo16 references this structure, so this a struct defined\n * in the Win16 API.\n * GetDriverInfo has been deprecated in Win32.\n */\ntypedef struct\n{\n    UINT16       length;\n    HDRVR16      hDriver;\n    HINSTANCE16  hModule;\n    CHAR         szAliasName[128];\n} DRIVERINFOSTRUCT16, *LPDRIVERINFOSTRUCT16;\n\nLRESULT   WINAPI DefDriverProc16(DWORD,HDRVR16,UINT16,LPARAM,LPARAM);\nHDRVR16   WINAPI OpenDriver16(LPCSTR,LPCSTR,LPARAM);\nLRESULT   WINAPI CloseDriver16(HDRVR16,LPARAM,LPARAM);\nLRESULT   WINAPI SendDriverMessage16(HDRVR16,UINT16,LPARAM,LPARAM);\nHMODULE16 WINAPI GetDriverModuleHandle16(HDRVR16);\nHDRVR16   WINAPI GetNextDriver16(HDRVR16,DWORD);\nBOOL16    WINAPI GetDriverInfo16(HDRVR16,DRIVERINFOSTRUCT16 *);\n\ntypedef void (CALLBACK *LPDRVCALLBACK16) (HDRVR16,UINT16,DWORD,DWORD,DWORD);\ntypedef LPDRVCALLBACK16 LPWAVECALLBACK16;\n\nUINT16    WINAPI mmsystemGetVersion16(void);\nBOOL16    WINAPI sndPlaySound16(LPCSTR,UINT16);\n\ntypedef struct {\n    WORD\twMid;\t\t\t/* manufacturer ID */\n    WORD\twPid;\t\t\t/* product ID */\n    MMVERSION16\tvDriverVersion;\t\t/* version of the driver */\n    CHAR\tszPname[MAXPNAMELEN];\t/* product name (0 terminated string) */\n    DWORD\tdwFormats;\t\t/* formats supported */\n    WORD\twChannels;\t\t/* number of sources supported */\n    DWORD\tdwSupport;\t\t/* functionality supported by driver */\n} WAVEOUTCAPS16, *LPWAVEOUTCAPS16;\n\ntypedef struct {\n    WORD\twMid;\t\t\t/* manufacturer ID */\n    WORD\twPid;\t\t\t/* product ID */\n    MMVERSION16\tvDriverVersion;\t\t/* version of the driver */\n    CHAR\tszPname[MAXPNAMELEN];\t/* product name (0 terminated string) */\n    DWORD\tdwFormats;\t\t/* formats supported */\n    WORD\twChannels;\t\t/* number of channels supported */\n} WAVEINCAPS16, *LPWAVEINCAPS16;\n\ntypedef struct {\n\tHWAVE16\t\t\thWave;\n\tLPWAVEFORMATEX\t\tlpFormat;\n\tDWORD\t\t\tdwCallback;\n\tDWORD\t\t\tdwInstance;\n\tUINT16\t\t\tuMappedDeviceID;\n        DWORD\t\t\tdnDevNode;\n} WAVEOPENDESC16, *LPWAVEOPENDESC16;\n\nUINT16    WINAPI waveOutGetNumDevs16(void);\nUINT16    WINAPI waveOutGetDevCaps16(UINT16,LPWAVEOUTCAPS16,UINT16);\nUINT16    WINAPI waveOutGetVolume16(UINT16,DWORD*);\nUINT16    WINAPI waveOutSetVolume16(UINT16,DWORD);\nUINT16    WINAPI waveOutGetErrorText16(UINT16,LPSTR,UINT16);\nUINT16    WINAPI waveOutOpen16(HWAVEOUT16*,UINT16,const WAVEFORMATEX *,DWORD,DWORD,DWORD);\nUINT16    WINAPI waveOutClose16(HWAVEOUT16);\nUINT16    WINAPI waveOutPrepareHeader16(HWAVEOUT16,SEGPTR,UINT16);\nUINT16    WINAPI waveOutUnprepareHeader16(HWAVEOUT16,SEGPTR,UINT16);\nUINT16    WINAPI waveOutWrite16(HWAVEOUT16,SEGPTR,UINT16);\nUINT16    WINAPI waveOutPause16(HWAVEOUT16);\nUINT16    WINAPI waveOutRestart16(HWAVEOUT16);\nUINT16    WINAPI waveOutReset16(HWAVEOUT16);\nUINT16    WINAPI waveOutBreakLoop16(HWAVEOUT16);\nUINT16    WINAPI waveOutGetPosition16(HWAVEOUT16,LPMMTIME16,UINT16);\nUINT16    WINAPI waveOutGetPitch16(HWAVEOUT16,DWORD*);\nUINT16    WINAPI waveOutSetPitch16(HWAVEOUT16,DWORD);\nUINT16    WINAPI waveOutGetPlaybackRate16(HWAVEOUT16,DWORD*);\nUINT16    WINAPI waveOutSetPlaybackRate16(HWAVEOUT16,DWORD);\nUINT16    WINAPI waveOutGetID16(HWAVEOUT16,UINT16*);\nDWORD     WINAPI waveOutMessage16(HWAVEOUT16,UINT16,DWORD,DWORD);\nUINT16    WINAPI waveInGetNumDevs16(void);\nUINT16    WINAPI waveInGetDevCaps16(UINT16,LPWAVEINCAPS16,UINT16);\nUINT16    WINAPI waveInGetErrorText16(UINT16,LPSTR,UINT16);\nUINT16    WINAPI waveInOpen16(HWAVEIN16*,UINT16,const WAVEFORMATEX *,DWORD,DWORD,DWORD);\nUINT16    WINAPI waveInClose16(HWAVEIN16);\nUINT16    WINAPI waveInPrepareHeader16(HWAVEIN16,SEGPTR,UINT16);\nUINT16    WINAPI waveInUnprepareHeader16(HWAVEIN16,SEGPTR,UINT16);\nUINT16    WINAPI waveInAddBuffer16(HWAVEIN16,SEGPTR,UINT16);\nUINT16    WINAPI waveInStart16(HWAVEIN16);\nUINT16    WINAPI waveInStop16(HWAVEIN16);\nUINT16    WINAPI waveInReset16(HWAVEIN16);\nUINT16    WINAPI waveInGetPosition16(HWAVEIN16,LPMMTIME16,UINT16);\nUINT16    WINAPI waveInGetID16(HWAVEIN16,UINT16*);\nDWORD     WINAPI waveInMessage16(HWAVEIN16,UINT16,DWORD,DWORD);\n\ntypedef LPDRVCALLBACK16 LPMIDICALLBACK16;\n\ntypedef struct {\n    WORD\twMid;\t\t/* manufacturer ID */\n    WORD\twPid;\t\t/* product ID */\n    MMVERSION16\tvDriverVersion;\t/* version of the driver */\n    CHAR\tszPname[MAXPNAMELEN];/* product name (NULL terminated string) */\n    WORD\twTechnology;\t/* type of device */\n    WORD\twVoices;\t/* # of voices (internal synth only) */\n    WORD\twNotes;\t\t/* max # of notes (internal synth only) */\n    WORD\twChannelMask;\t/* channels used (internal synth only) */\n    DWORD\tdwSupport;\t/* functionality supported by driver */\n} MIDIOUTCAPS16, *LPMIDIOUTCAPS16;\n\ntypedef struct {\n    WORD\twMid;\t\t/* manufacturer ID */\n    WORD\twPid;\t\t/* product ID */\n    MMVERSION16\tvDriverVersion;\t/* version of the driver */\n    CHAR\tszPname[MAXPNAMELEN];/* product name (NULL terminated string) */\n    DWORD\tdwSupport;\t/* included in win95 and higher */\n} MIDIINCAPS16, *LPMIDIINCAPS16;\n\ntypedef struct midihdr16_tag {\n    LPSTR\tlpData;\t\t/* pointer to locked data block */\n    DWORD\tdwBufferLength;\t/* length of data in data block */\n    DWORD\tdwBytesRecorded;/* used for input only */\n    DWORD\tdwUser;\t\t/* for client's use */\n    DWORD\tdwFlags;\t/* assorted flags (see defines) */\n    struct midihdr16_tag *lpNext;\t/* reserved for driver */\n    DWORD\treserved;\t/* reserved for driver */\n} MIDIHDR16, *LPMIDIHDR16;\n\ntypedef struct {\n    HMIDI16         hMidi;\n    DWORD           dwCallback;\n    DWORD           dwInstance;\n    UINT16          reserved;\n    DWORD           dnDevNode;\n    DWORD           cIds;\n    MIDIOPENSTRMID  rgIds;\n} MIDIOPENDESC16, *LPMIDIOPENDESC16;\n\nUINT16     WINAPI midiOutGetNumDevs16(void);\nUINT16     WINAPI midiOutGetDevCaps16(UINT16,LPMIDIOUTCAPS16,UINT16);\nUINT16     WINAPI midiOutGetVolume16(UINT16,DWORD*);\nUINT16     WINAPI midiOutSetVolume16(UINT16,DWORD);\nUINT16     WINAPI midiOutGetErrorText16(UINT16,LPSTR,UINT16);\nUINT16     WINAPI midiOutOpen16(HMIDIOUT16*,UINT16,DWORD,DWORD,DWORD);\nUINT16     WINAPI midiOutClose16(HMIDIOUT16);\nUINT16     WINAPI midiOutPrepareHeader16(HMIDIOUT16,SEGPTR,UINT16);\nUINT16     WINAPI midiOutUnprepareHeader16(HMIDIOUT16,SEGPTR,UINT16);\nUINT16     WINAPI midiOutShortMsg16(HMIDIOUT16,DWORD);\nUINT16     WINAPI midiOutLongMsg16(HMIDIOUT16,SEGPTR,UINT16);\nUINT16     WINAPI midiOutReset16(HMIDIOUT16);\nUINT16     WINAPI midiOutCachePatches16(HMIDIOUT16,UINT16,WORD*,UINT16);\nUINT16     WINAPI midiOutCacheDrumPatches16(HMIDIOUT16,UINT16,WORD*,UINT16);\nUINT16     WINAPI midiOutGetID16(HMIDIOUT16,UINT16*);\nDWORD      WINAPI midiOutMessage16(HMIDIOUT16,UINT16,DWORD,DWORD);\nUINT16     WINAPI midiInGetNumDevs16(void);\nUINT16     WINAPI midiInGetDevCaps16(UINT16,LPMIDIINCAPS16,UINT16);\nUINT16     WINAPI midiInGetErrorText16(UINT16,LPSTR,UINT16);\nUINT16     WINAPI midiInOpen16(HMIDIIN16*,UINT16,DWORD,DWORD,DWORD);\nUINT16     WINAPI midiInClose16(HMIDIIN16);\nUINT16     WINAPI midiInPrepareHeader16(HMIDIIN16,SEGPTR,UINT16);\nUINT16     WINAPI midiInUnprepareHeader16(HMIDIIN16,SEGPTR,UINT16);\nUINT16     WINAPI midiInAddBuffer16(HMIDIIN16,SEGPTR,UINT16);\nUINT16     WINAPI midiInStart16(HMIDIIN16);\nUINT16     WINAPI midiInStop16(HMIDIIN16);\nUINT16     WINAPI midiInReset16(HMIDIIN16);\nUINT16     WINAPI midiInGetID16(HMIDIIN16,UINT16*);\nDWORD      WINAPI midiInMessage16(HMIDIIN16,UINT16,DWORD,DWORD);\nMMRESULT16 WINAPI midiStreamClose16(HMIDISTRM16 hms);\nMMRESULT16 WINAPI midiStreamOpen16(HMIDISTRM16*,LPUINT16,DWORD,DWORD,DWORD,DWORD);\nMMRESULT16 WINAPI midiStreamOut16(HMIDISTRM16,LPMIDIHDR16,UINT16);\nMMRESULT16 WINAPI midiStreamPause16(HMIDISTRM16);\nMMRESULT16 WINAPI midiStreamPosition16(HMIDISTRM16,LPMMTIME16,UINT16);\nMMRESULT16 WINAPI midiStreamProperty16(HMIDISTRM16,LPBYTE,DWORD);\nMMRESULT16 WINAPI midiStreamRestart16(HMIDISTRM16);\nMMRESULT16 WINAPI midiStreamStop16(HMIDISTRM16);\n\ntypedef struct {\n    WORD\twMid;\t\t\t/* manufacturer ID */\n    WORD\twPid;\t\t\t/* product ID */\n    MMVERSION16\tvDriverVersion;\t\t/* version of the driver */\n    CHAR\tszPname[MAXPNAMELEN];\t/* product name (NULL terminated string) */\n    WORD\twTechnology;\t\t/* type of device */\n    DWORD\tdwSupport;\t\t/* functionality supported by driver */\n} AUXCAPS16, *LPAUXCAPS16;\n\ntypedef void (CALLBACK *LPTIMECALLBACK16)(UINT16,UINT16,DWORD,DWORD,DWORD);\n\ntypedef struct {\n    UINT16\twPeriodMin;\t/* minimum period supported  */\n    UINT16\twPeriodMax;\t/* maximum period supported  */\n} TIMECAPS16,*LPTIMECAPS16;\n\ntypedef struct {\n    WORD wMid;                  /* manufacturer ID */\n    WORD wPid;                  /* product ID */\n    char szPname[MAXPNAMELEN];\t/* product name (NULL terminated string) */\n    UINT16 wXmin;               /* minimum x position value */\n    UINT16 wXmax;               /* maximum x position value */\n    UINT16 wYmin;               /* minimum y position value */\n    UINT16 wYmax;               /* maximum y position value */\n    UINT16 wZmin;               /* minimum z position value */\n    UINT16 wZmax;               /* maximum z position value */\n    UINT16 wNumButtons;         /* number of buttons */\n    UINT16 wPeriodMin;          /* minimum message period when captured */\n    UINT16 wPeriodMax;          /* maximum message period when captured */\n                                /* win95,nt4 additions: */\n    UINT16 wRmin;\t\t/* minimum r position value */\n    UINT16 wRmax;\t\t/* maximum r position value */\n    UINT16 wUmin;\t\t/* minimum u (5th axis) position value */\n    UINT16 wUmax;\t\t/* maximum u (5th axis) position value */\n    UINT16 wVmin;\t\t/* minimum v (6th axis) position value */\n    UINT16 wVmax;\t\t/* maximum v (6th axis) position value */\n    UINT16 wCaps;\t\t/* joystick capabilities */\n    UINT16 wMaxAxes;\t\t/* maximum number of axes supported */\n    UINT16 wNumAxes;\t\t/* number of axes in use */\n    UINT16 wMaxButtons;\t\t/* maximum number of buttons supported */\n    CHAR szRegKey[MAXPNAMELEN]; /* registry key */\n    CHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME]; /* OEM VxD in use */\n} JOYCAPS16, *LPJOYCAPS16;\n\ntypedef struct {\n    UINT16 wXpos;                 /* x position */\n    UINT16 wYpos;                 /* y position */\n    UINT16 wZpos;                 /* z position */\n    UINT16 wButtons;              /* button states */\n} JOYINFO16, *LPJOYINFO16;\n\ntypedef struct {\n    WORD         wMid;                  /* manufacturer id */\n    WORD         wPid;                  /* product id */\n    MMVERSION16  vDriverVersion;        /* version of the driver */\n    CHAR         szPname[MAXPNAMELEN];  /* product name */\n    DWORD        fdwSupport;            /* misc. support bits */\n    DWORD        cDestinations;         /* count of destinations */\n} MIXERCAPS16,*LPMIXERCAPS16;\n\ntypedef struct tMIXEROPENDESC16\n{\n\tHMIXEROBJ16\t\thmx;\n        LPVOID\t\t\tpReserved0;\n\tDWORD\t\t\tdwCallback;\n\tDWORD\t\t\tdwInstance;\n} MIXEROPENDESC16, *LPMIXEROPENDESC16;\n\ntypedef struct {\n    DWORD\tcbStruct;\t\t/* size of MIXERLINE structure */\n    DWORD\tdwDestination;\t\t/* zero based destination index */\n    DWORD\tdwSource;\t\t/* zero based source index (if source) */\n    DWORD\tdwLineID;\t\t/* unique line id for mixer device */\n    DWORD\tfdwLine;\t\t/* state/information about line */\n    DWORD\tdwUser;\t\t\t/* driver specific information */\n    DWORD\tdwComponentType;\t/* component type line connects to */\n    DWORD\tcChannels;\t\t/* number of channels line supports */\n    DWORD\tcConnections;\t\t/* number of connections [possible] */\n    DWORD\tcControls;\t\t/* number of controls at this line */\n    CHAR\tszShortName[MIXER_SHORT_NAME_CHARS];\n    CHAR\tszName[MIXER_LONG_NAME_CHARS];\n    struct {\n\tDWORD\tdwType;\t\t\t/* MIXERLINE_TARGETTYPE_xxxx */\n\tDWORD\tdwDeviceID;\t\t/* target device ID of device type */\n\tWORD\twMid;\t\t\t/* of target device */\n\tWORD\twPid;\t\t\t/*      \" */\n\tMMVERSION16\tvDriverVersion;\t/*      \" */\n\tCHAR\tszPname[MAXPNAMELEN];\t/*      \" */\n    } Target;\n} MIXERLINE16, *LPMIXERLINE16;\n\ntypedef struct {\n    DWORD\t\tcbStruct;           /* size in bytes of MIXERCONTROL */\n    DWORD\t\tdwControlID;        /* unique control id for mixer device */\n    DWORD\t\tdwControlType;      /* MIXERCONTROL_CONTROLTYPE_xxx */\n    DWORD\t\tfdwControl;         /* MIXERCONTROL_CONTROLF_xxx */\n    DWORD\t\tcMultipleItems;     /* if MIXERCONTROL_CONTROLF_MULTIPLE set */\n    CHAR\t\tszShortName[MIXER_SHORT_NAME_CHARS];\n    CHAR\t\tszName[MIXER_LONG_NAME_CHARS];\n    union {\n\tstruct {\n\t    LONG\tlMinimum;\t/* signed minimum for this control */\n\t    LONG\tlMaximum;\t/* signed maximum for this control */\n\t} s;\n\tstruct {\n\t    DWORD\tdwMinimum;\t/* unsigned minimum for this control */\n\t    DWORD\tdwMaximum;\t/* unsigned maximum for this control */\n\t} s1;\n\tDWORD       \tdwReserved[6];\n    } Bounds;\n    union {\n\tDWORD\t\tcSteps;\t\t/* # of steps between min & max */\n\tDWORD\t\tcbCustomData;\t/* size in bytes of custom data */\n\tDWORD\t\tdwReserved[6];\t/* !!! needed? we have cbStruct.... */\n    } Metrics;\n} MIXERCONTROL16, *LPMIXERCONTROL16;\n\ntypedef struct {\n    DWORD\tcbStruct;\t/* size in bytes of MIXERLINECONTROLS */\n    DWORD\tdwLineID;\t/* line id (from MIXERLINE.dwLineID) */\n    union {\n\tDWORD\tdwControlID;\t/* MIXER_GETLINECONTROLSF_ONEBYID */\n\tDWORD\tdwControlType;\t/* MIXER_GETLINECONTROLSF_ONEBYTYPE */\n    } u;\n    DWORD\tcControls;\t/* count of controls pmxctrl points to */\n    DWORD\tcbmxctrl;\t/* size in bytes of _one_ MIXERCONTROL */\n    SEGPTR\tpamxctrl;\t/* pointer to first MIXERCONTROL array */\n} MIXERLINECONTROLS16, *LPMIXERLINECONTROLS16;\n\ntypedef struct {\n    DWORD\tcbStruct;\t/* size in bytes of MIXERCONTROLDETAILS */\n    DWORD\tdwControlID;\t/* control id to get/set details on */\n    DWORD\tcChannels;\t/* number of channels in paDetails array */\n    union {\n        HWND16\thwndOwner;\t/* for MIXER_SETCONTROLDETAILSF_CUSTOM */\n        DWORD\tcMultipleItems;\t/* if _MULTIPLE, the number of items per channel */\n    } u;\n    DWORD\tcbDetails;\t/* size of _one_ details_XX struct */\n    LPVOID\tpaDetails;\t/* pointer to array of details_XX structs */\n} MIXERCONTROLDETAILS16,*LPMIXERCONTROLDETAILS16;\n\ntypedef struct {\n    DWORD\tdwParam1;\n    DWORD\tdwParam2;\n    CHAR\tszName[MIXER_LONG_NAME_CHARS];\n} MIXERCONTROLDETAILS_LISTTEXT16,*LPMIXERCONTROLDETAILS_LISTTEXT16;\n\ntypedef LRESULT (CALLBACK *LPMMIOPROC16)(LPSTR lpmmioinfo,UINT16 uMessage,\n\t\t\t\t\t LPARAM lParam1,LPARAM lParam2);\n\ntypedef struct {\n        DWORD\t\tdwFlags;\t/* general status flags */\n        FOURCC\t\tfccIOProc;\t/* pointer to I/O procedure */\n        LPMMIOPROC16\tpIOProc;\t/* pointer to I/O procedure */\n        UINT16\t\twErrorRet;\t/* place for error to be returned */\n        HTASK16\t\thTask;\t\t/* alternate local task */\n        /* fields maintained by MMIO functions during buffered I/O */\n        LONG\t\tcchBuffer;\t/* size of I/O buffer (or 0L) */\n        HPSTR\t\tpchBuffer;\t/* start of I/O buffer (or NULL) */\n        HPSTR\t\tpchNext;\t/* pointer to next byte to read/write */\n        HPSTR\t\tpchEndRead;\t/* pointer to last valid byte to read */\n        HPSTR\t\tpchEndWrite;\t/* pointer to last byte to write */\n        LONG\t\tlBufOffset;\t/* disk offset of start of buffer */\n        /* fields maintained by I/O procedure */\n        LONG\t\tlDiskOffset;\t/* disk offset of next read or write */\n        DWORD\t\tadwInfo[3];\t/* data specific to type of MMIOPROC */\n        /* other fields maintained by MMIO */\n        DWORD\t\tdwReserved1;\t/* reserved for MMIO use */\n        DWORD\t\tdwReserved2;\t/* reserved for MMIO use */\n        HMMIO16\t\thmmio;\t\t/* handle to open file */\n} MMIOINFO16, *LPMMIOINFO16;\n\ntypedef UINT16 (CALLBACK *YIELDPROC16)(UINT16,DWORD);\n\nUINT16\t\tWINAPI auxGetNumDevs16(void);\nUINT16\t\tWINAPI auxGetDevCaps16 (UINT16,LPAUXCAPS16,UINT16);\nUINT16\t\tWINAPI auxSetVolume16(UINT16,DWORD);\nUINT16\t\tWINAPI auxGetVolume16(UINT16,LPDWORD);\nDWORD\t\tWINAPI auxOutMessage16(UINT16,UINT16,DWORD,DWORD);\nMMRESULT16\tWINAPI timeGetSystemTime16(LPMMTIME16,UINT16);\nMMRESULT16\tWINAPI timeSetEvent16(UINT16,UINT16,LPTIMECALLBACK16,DWORD,UINT16);\nMMRESULT16\tWINAPI timeKillEvent16(UINT16);\nMMRESULT16\tWINAPI timeGetDevCaps16(LPTIMECAPS16,UINT16);\nMMRESULT16\tWINAPI timeBeginPeriod16(UINT16);\nMMRESULT16\tWINAPI timeEndPeriod16(UINT16);\nMMRESULT16\tWINAPI joyGetDevCaps16 (UINT16,LPJOYCAPS16,UINT16);\nUINT16\t\tWINAPI joyGetNumDevs16(void);\nMMRESULT16\tWINAPI joyGetPos16(UINT16,LPJOYINFO16);\nMMRESULT16\tWINAPI joyGetPosEx16(UINT16,LPJOYINFOEX);\nMMRESULT16\tWINAPI joyGetThreshold16(UINT16,UINT16*);\nMMRESULT16\tWINAPI joyReleaseCapture16(UINT16);\nMMRESULT16\tWINAPI joySetCapture16(HWND16,UINT16,UINT16,BOOL16);\nMMRESULT16\tWINAPI joySetThreshold16(UINT16,UINT16);\nUINT16\t\tWINAPI mixerGetNumDevs16(void);\nUINT16\t\tWINAPI mixerOpen16(LPHMIXER16,UINT16,DWORD,DWORD,DWORD);\nUINT16\t\tWINAPI mixerClose16(HMIXER16);\nDWORD\t\tWINAPI mixerMessage16(HMIXER16,UINT16,DWORD,DWORD);\nUINT16\t\tWINAPI mixerGetDevCaps16(UINT16,LPMIXERCAPS16,UINT16);\nUINT16\t\tWINAPI mixerGetLineInfo16(HMIXEROBJ16,LPMIXERLINE16,DWORD);\nUINT16\t\tWINAPI mixerGetID16(HMIXEROBJ16,LPUINT16,DWORD);\nUINT16\t\tWINAPI mixerGetLineControls16(HMIXEROBJ16,LPMIXERLINECONTROLS16,DWORD);\nUINT16\t\tWINAPI mixerGetControlDetails16(HMIXEROBJ16,LPMIXERCONTROLDETAILS16,DWORD);\nUINT16\t\tWINAPI mixerSetControlDetails16(HMIXEROBJ16,LPMIXERCONTROLDETAILS16,DWORD);\nLPMMIOPROC16\tWINAPI mmioInstallIOProc16(FOURCC,LPMMIOPROC16,DWORD);\nFOURCC \t\tWINAPI mmioStringToFOURCC16(LPCSTR,UINT16);\nHMMIO16\t\tWINAPI mmioOpen16(LPSTR,MMIOINFO16*,DWORD);\nUINT16 \t\tWINAPI mmioRename16(LPCSTR,LPCSTR,MMIOINFO16*,DWORD);\nMMRESULT16 \tWINAPI mmioClose16(HMMIO16,UINT16);\nLONG \t\tWINAPI mmioRead16(HMMIO16,HPSTR,LONG);\nLONG \t\tWINAPI mmioWrite16(HMMIO16,HPCSTR,LONG);\nLONG \t\tWINAPI mmioSeek16(HMMIO16,LONG,INT16);\nMMRESULT16\tWINAPI mmioGetInfo16(HMMIO16,MMIOINFO16*,UINT16);\nMMRESULT16 \tWINAPI mmioSetInfo16(HMMIO16,const MMIOINFO16*,UINT16);\nUINT16 \t\tWINAPI mmioSetBuffer16(HMMIO16,SEGPTR,LONG,UINT16);\nUINT16 \t\tWINAPI mmioFlush16(HMMIO16,UINT16);\nUINT16 \t\tWINAPI mmioAdvance16(HMMIO16,MMIOINFO16*,UINT16);\nLRESULT\t\tWINAPI mmioSendMessage16(HMMIO16,UINT16,LPARAM,LPARAM);\nUINT16\t\tWINAPI mmioDescend16(HMMIO16,MMCKINFO*,const MMCKINFO*,UINT16);\nUINT16\t\tWINAPI mmioAscend16(HMMIO16,MMCKINFO*,UINT16);\nUINT16\t\tWINAPI mmioCreateChunk16(HMMIO16,MMCKINFO*,UINT16);\nDWORD\t\tWINAPI mciSendCommand16(UINT16,UINT16,DWORD,DWORD);\nDWORD\t\tWINAPI mciSendString16(LPCSTR,LPSTR,UINT16,HWND16);\nUINT16\t\tWINAPI mciGetDeviceID16(LPCSTR);\nUINT16\t\tWINAPI mciGetDeviceIDFromElementID16(DWORD,LPCSTR);\nBOOL16\t\tWINAPI mciGetErrorString16 (DWORD,LPSTR,UINT16);\nBOOL16\t\tWINAPI mciSetYieldProc16(UINT16,YIELDPROC16,DWORD);\nHTASK16\t\tWINAPI mciGetCreatorTask16(UINT16);\nYIELDPROC16\tWINAPI mciGetYieldProc16(UINT16,DWORD*);\nDWORD \t\tWINAPI mciGetDriverData16(UINT16 uDeviceID);\nBOOL16\t\tWINAPI mciSetDriverData16(UINT16 uDeviceID, DWORD dwData);\nUINT16\t\tWINAPI mciDriverYield16(UINT16 uDeviceID);\nBOOL16\t\tWINAPI mciDriverNotify16(HWND16 hwndCallback, UINT16 uDeviceID,\n\t\t\t\t\t  UINT16 uStatus);\nUINT16\t\tWINAPI mciLoadCommandResource16(HINSTANCE16 hInstance,\n\t\t\t\t\t LPCSTR lpResName, UINT16 uType);\nBOOL16\t\tWINAPI mciFreeCommandResource16(UINT16 uTable);\n\nHINSTANCE16\tWINAPI mmTaskCreate16(SEGPTR spProc, HINSTANCE16 *lphMmTask, DWORD dwPmt);\nvoid    \tWINAPI mmTaskBlock16(HINSTANCE16 hInst);\nLRESULT \tWINAPI mmTaskSignal16(HTASK16 ht);\nvoid    \tWINAPI mmTaskYield16(void);\nLRESULT \tWINAPI mmThreadCreate16(FARPROC16 fpThreadAddr, LPHANDLE16 lpHndl,\n\t\t\t\t\t DWORD dwPmt, DWORD dwFlags);\nvoid \t\tWINAPI mmThreadSignal16(HANDLE16 hndl);\nvoid    \tWINAPI mmThreadBlock16(HANDLE16 hndl);\nHANDLE16 \tWINAPI mmThreadGetTask16(HANDLE16 hndl);\nBOOL16   \tWINAPI mmThreadIsValid16(HANDLE16 hndl);\nBOOL16  \tWINAPI mmThreadIsCurrent16(HANDLE16 hndl);\n\nBOOL16\t\tWINAPI DriverCallback16(DWORD dwCallBack, UINT16 uFlags, HANDLE16 hDev,\n\t\t\t\t\t WORD wMsg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2);\n\ntypedef struct {\n    DWORD\tdwCallback;\n    WORD\twDeviceID;\n    WORD\twReserved0;\n    SEGPTR\tlpstrDeviceType;\n    SEGPTR\tlpstrElementName;\n    SEGPTR\tlpstrAlias;\n} MCI_OPEN_PARMS16, *LPMCI_OPEN_PARMS16;\n\ntypedef struct {\n    DWORD   dwCallback;\n    SEGPTR  lpstrReturn;\n    DWORD   dwRetSize;\n} MCI_INFO_PARMS16, *LPMCI_INFO_PARMS16;\n\ntypedef struct {\n    DWORD\tdwCallback;\n    SEGPTR\tlpstrReturn;\n    DWORD\tdwRetSize;\n    DWORD\tdwNumber;\n    WORD\twDeviceType;\n    WORD\twReserved0;\n} MCI_SYSINFO_PARMS16, *LPMCI_SYSINFO_PARMS16;\n\ntypedef struct {\n    DWORD\tdwCallback;\n    UINT16\tnVirtKey;\n    WORD\twReserved0;\n    HWND16\thwndBreak;\n    WORD\twReserved1;\n} MCI_BREAK_PARMS16, *LPMCI_BREAK_PARMS16;\n\ntypedef struct {\n    DWORD\tdwCallback;\n    SEGPTR\tlpfilename;\n} MCI_LOAD_PARMS16, *LPMCI_LOAD_PARMS16;\n\ntypedef struct {\n    DWORD\tdwCallback;\n    SEGPTR      lpstrSoundName;\n} MCI_SOUND_PARMS16, *LPMCI_SOUND_PARMS16;\n\ntypedef struct {\n    DWORD\tdwCallback;\n    SEGPTR\tlpstrCommand;\n} MCI_VD_ESCAPE_PARMS16, *LPMCI_VD_ESCAPE_PARMS16;\n\ntypedef struct {\n    UINT16\t\t\twDeviceID;\t\t/* device ID */\n    SEGPTR\t\t\tlpstrParams;\t\t/* parameter string for entry in SYSTEM.INI */\n    UINT16\t\t\twCustomCommandTable;\t/* custom command table (0xFFFF if none)\n\t\t\t\t\t\t\t * filled in by the driver */\n    UINT16\t\t\twType;\t\t\t/* driver type (filled in by the driver) */\n} MCI_OPEN_DRIVER_PARMS16, *LPMCI_OPEN_DRIVER_PARMS16;\n\ntypedef struct {\n    DWORD\t\tdwCallback;\n    MCIDEVICEID16\twDeviceID;\n    WORD\t\twReserved0;\n    SEGPTR\t\tlpstrDeviceType;\n    SEGPTR\t\tlpstrElementName;\n    SEGPTR\t\tlpstrAlias;\n    DWORD\t\tdwBufferSeconds;\n} MCI_WAVE_OPEN_PARMS16, *LPMCI_WAVE_OPEN_PARMS16;\n\ntypedef struct {\n    DWORD\tdwCallback;\n    DWORD\tdwTimeFormat;\n    DWORD\tdwAudio;\n    UINT16\twInput;\n    UINT16\twReserved0;\n    UINT16\twOutput;\n    UINT16\twReserved1;\n    UINT16\twFormatTag;\n    UINT16\twReserved2;\n    UINT16\tnChannels;\n    UINT16\twReserved3;\n    DWORD\tnSamplesPerSec;\n    DWORD\tnAvgBytesPerSec;\n    UINT16\tnBlockAlign;\n    UINT16\twReserved4;\n    UINT16\twBitsPerSample;\n    UINT16\twReserved5;\n} MCI_WAVE_SET_PARMS16, * LPMCI_WAVE_SET_PARMS16;\n\ntypedef struct {\n    DWORD   dwCallback;\n    UINT16  wDeviceID;\n    UINT16  wReserved0;\n    SEGPTR  lpstrDeviceType;\n    SEGPTR  lpstrElementName;\n    SEGPTR  lpstrAlias;\n    DWORD   dwStyle;\n    HWND16  hWndParent;\n    UINT16  wReserved1;\n} MCI_ANIM_OPEN_PARMS16, *LPMCI_ANIM_OPEN_PARMS16;\n\ntypedef struct {\n    DWORD\tdwCallback;\n    HWND16\thWnd;\n    WORD\twReserved1;\n    WORD\tnCmdShow;\n    WORD\twReserved2;\n    SEGPTR\tlpstrText;\n} MCI_ANIM_WINDOW_PARMS16, *LPMCI_ANIM_WINDOW_PARMS16;\n\ntypedef struct {\n    DWORD   dwCallback;\n#ifdef MCI_USE_OFFEXT\n    POINT16 ptOffset;\n    POINT16 ptExtent;\n#else   /* ifdef MCI_USE_OFFEXT */\n    RECT16  rc;\n#endif  /* ifdef MCI_USE_OFFEXT */\n} MCI_ANIM_RECT_PARMS16, *LPMCI_ANIM_RECT_PARMS16;\n\ntypedef struct {\n    DWORD   dwCallback;\n    RECT16  rc;\n    HDC16   hDC;\n} MCI_ANIM_UPDATE_PARMS16, *LPMCI_ANIM_UPDATE_PARMS16;\n\ntypedef struct {\n    DWORD\t\tdwCallback;\n    MCIDEVICEID16\twDeviceID;\n    WORD\t\twReserved0;\n    SEGPTR\t\tlpstrDeviceType;\n    SEGPTR\t\tlpstrElementName;\n    SEGPTR\t\tlpstrAlias;\n    DWORD\t\tdwStyle;\n    HWND16\t\thWndParent;\n    WORD\t\twReserved1;\n} MCI_OVLY_OPEN_PARMS16, *LPMCI_OVLY_OPEN_PARMS16;\n\ntypedef struct {\n    DWORD\tdwCallback;\n    HWND16\thWnd;\n    WORD\twReserved1;\n    UINT16\tnCmdShow;\n    WORD\twReserved2;\n    SEGPTR\tlpstrText;\n} MCI_OVLY_WINDOW_PARMS16, *LPMCI_OVLY_WINDOW_PARMS16;\n\ntypedef struct {\n    DWORD   dwCallback;\n#ifdef MCI_USE_OFFEXT\n    POINT16 ptOffset;\n    POINT16 ptExtent;\n#else   /* ifdef MCI_USE_OFFEXT */\n    RECT16  rc;\n#endif  /* ifdef MCI_USE_OFFEXT */\n} MCI_OVLY_RECT_PARMS16, *LPMCI_OVLY_RECT_PARMS16;\n\ntypedef struct {\n    DWORD   dwCallback;\n    SEGPTR  lpfilename;\n    RECT16  rc;\n} MCI_OVLY_SAVE_PARMS16, *LPMCI_OVLY_SAVE_PARMS16;\n\ntypedef struct {\n    DWORD\tdwCallback;\n    SEGPTR\tlpfilename;\n    RECT16\trc;\n} MCI_OVLY_LOAD_PARMS16, *LPMCI_OVLY_LOAD_PARMS16;\n\n/* from digitalv / 16 bit */\ntypedef struct {\n    DWORD   dwCallback;\n    RECT16  rc;\n} MCI_DGV_RECT_PARMS16, *LPMCI_DGV_RECT_PARMS16;\n\ntypedef struct {\n    DWORD   dwCallback;\n    SEGPTR  lpstrFileName;\n    RECT16  rc;\n} MCI_DGV_CAPTURE_PARMS16, *LPMCI_DGV_CAPTURE_PARMS16;\n\ntypedef struct {\n    DWORD   dwCallback;\n    DWORD   dwFrom;\n    DWORD   dwTo;\n    RECT16  rc;\n    DWORD   dwAudioStream;\n    DWORD   dwVideoStream;\n} MCI_DGV_COPY_PARMS16, *LPMCI_DGV_COPY_PARMS16;\n\ntypedef struct {\n    DWORD   dwCallback;\n    DWORD   dwFrom;\n    DWORD   dwTo;\n    RECT16  rc;\n    DWORD   dwAudioStream;\n    DWORD   dwVideoStream;\n} MCI_DGV_CUT_PARMS16, * LPMCI_DGV_CUT_PARMS16;\n\ntypedef struct {\n    DWORD   dwCallback;\n    DWORD   dwFrom;\n    DWORD   dwTo;\n    RECT16  rc;\n    DWORD   dwAudioStream;\n    DWORD   dwVideoStream;\n} MCI_DGV_DELETE_PARMS16, * LPMCI_DGV_DELETE_PARMS16;\n\ntypedef MCI_DGV_RECT_PARMS16 MCI_DGV_FREEZE_PARMS16, * LPMCI_DGV_FREEZE_PARMS16;\n\ntypedef struct  {\n    DWORD   dwCallback;\n    SEGPTR  lpstrReturn;\n    DWORD   dwRetSize;\n    DWORD   dwItem;\n} MCI_DGV_INFO_PARMS16, * LPMCI_DGV_INFO_PARMS16;\n\ntypedef struct {\n    DWORD   dwCallback;\n    SEGPTR  lpstrReturn;\n    DWORD   dwLength;\n    DWORD   dwNumber;\n    DWORD   dwItem;\n    SEGPTR  lpstrAlgorithm;\n} MCI_DGV_LIST_PARMS16, *LPMCI_DGV_LIST_PARMS16;\n\ntypedef MCI_LOAD_PARMS16  MCI_DGV_LOAD_PARMS16 , * LPMCI_DGV_LOAD_PARMS16;\n\ntypedef struct {\n    DWORD   dwCallback;\n    UINT16  wDeviceID;\n    UINT16  wReserved0;\n    SEGPTR  lpstrDeviceType;\n    SEGPTR  lpstrElementName;\n    SEGPTR  lpstrAlias;\n    DWORD   dwStyle;\n    HWND16  hWndParent;\n    UINT16  wReserved1;\n} MCI_DGV_OPEN_PARMS16, *LPMCI_DGV_OPEN_PARMS16;\n\ntypedef struct {\n    DWORD   dwCallback;\n    DWORD   dwTo;\n    RECT16  rc;\n    DWORD   dwAudioStream;\n    DWORD   dwVideoStream;\n} MCI_DGV_PASTE_PARMS16, * LPMCI_DGV_PASTE_PARMS16;\n\ntypedef MCI_DGV_RECT_PARMS16 MCI_DGV_PUT_PARMS16, * LPMCI_DGV_PUT_PARMS16;\n\ntypedef struct {\n    DWORD       dwCallback;\n    DWORD       dwItem;\n    SEGPTR      lpstrName;\n    SEGPTR      lpstrAlgorithm;\n    DWORD       dwHandle;\n} MCI_DGV_QUALITY_PARMS16, *LPMCI_DGV_QUALITY_PARMS16;\n\ntypedef struct {\n    DWORD   dwCallback;\n    DWORD   dwFrom;\n    DWORD   dwTo;\n    RECT16  rc;\n    DWORD   dwAudioStream;\n    DWORD   dwVideoStream;\n} MCI_DGV_RECORD_PARMS16, * LPMCI_DGV_RECORD_PARMS16;\n\ntypedef struct {\n    DWORD   dwCallback;\n    SEGPTR  lpstrPath;\n    DWORD   dwSize;\n} MCI_DGV_RESERVE_PARMS16, *LPMCI_DGV_RESERVE_PARMS16A;\n\ntypedef struct {\n    DWORD   dwCallback;\n    SEGPTR  lpstrFileName;\n    RECT16  rc;\n} MCI_DGV_RESTORE_PARMS16, *LPMCI_DGV_RESTORE_PARMS16;\n\ntypedef struct {\n    DWORD   dwCallback;\n    SEGPTR  lpstrFileName;\n    RECT16  rc;\n} MCI_DGV_SAVE_PARMS16, *LPMCI_DGV_SAVE_PARMS16;\n\ntypedef struct {\n    DWORD   dwCallback;\n    DWORD   dwItem;\n    DWORD   dwValue;\n    DWORD   dwOver;\n    SEGPTR  lpstrAlgorithm;\n    SEGPTR  lpstrQuality;\n} MCI_DGV_SETAUDIO_PARMS16, *LPMCI_DGV_SETAUDIO_PARMS16;\n\ntypedef struct {\n    DWORD   dwCallback;\n    DWORD   dwItem;\n    DWORD   dwValue;\n    DWORD   dwOver;\n    SEGPTR  lpstrAlgorithm;\n    SEGPTR  lpstrQuality;\n    DWORD   dwSourceNumber;\n} MCI_DGV_SETVIDEO_PARMS16, *LPMCI_DGV_SETVIDEO_PARMS16;\n\ntypedef struct {\n    DWORD   dwCallback;\n    DWORD   dwReturn;\n    DWORD   dwItem;\n    DWORD   dwTrack;\n    SEGPTR  lpstrDrive;\n    DWORD   dwReference;\n} MCI_DGV_STATUS_PARMS16, *LPMCI_DGV_STATUS_PARMS16;\n\ntypedef struct {\n    DWORD   dwCallback;\n    RECT16  rc;\n    HDC16   hDC;\n    UINT16  wReserved0;\n} MCI_DGV_UPDATE_PARMS16, * LPMCI_DGV_UPDATE_PARMS16;\n\ntypedef MCI_DGV_RECT_PARMS16 MCI_DGV_UNFREEZE_PARMS16, * LPMCI_DGV_UNFREEZE_PARMS16;\n\ntypedef MCI_DGV_RECT_PARMS16 MCI_DGV_WHERE_PARMS16, * LPMCI_DGV_WHERE_PARMS16;\n\ntypedef struct {\n    DWORD   dwCallback;\n    HWND16  hWnd;\n    UINT16  wReserved1;\n    UINT16  nCmdShow;\n    UINT16  wReserved2;\n    SEGPTR  lpstrText;\n} MCI_DGV_WINDOW_PARMS16, *LPMCI_DGV_WINDOW_PARMS16;\n\n#include <poppack.h>\n\n#endif  /* __WINE_WINE_MMSYSTEM16_H */\n"
  },
  {
    "path": "wine/wine/port.h",
    "content": "/*\n * Wine porting definitions\n *\n * Copyright 1996 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINE_PORT_H\n#define __WINE_WINE_PORT_H\n\n#ifndef __WINE_CONFIG_H\n# error You must include config.h to use this header\n#endif\n\n#ifdef __WINE_BASETSD_H\n# error You must include port.h before all other headers\n#endif\n\n#ifndef _GNU_SOURCE\n# define _GNU_SOURCE  /* for pread/pwrite, isfinite */\n#endif\n#include <fcntl.h>\n#include <math.h>\n#include <sys/types.h>\n#include <sys/stat.h>\n#ifdef HAVE_DIRECT_H\n# include <direct.h>\n#endif\n#ifdef HAVE_IO_H\n# include <io.h>\n#endif\n#ifdef HAVE_PROCESS_H\n# include <process.h>\n#endif\n#include <string.h>\n#include <stdlib.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n\n\n/****************************************************************\n * Type definitions\n */\n\n#if !defined(_MSC_VER) && !defined(__int64)\n#  if defined(__x86_64__) || defined(__aarch64__) || defined(_WIN64)\n#    define __int64 long\n#  else\n#    define __int64 long long\n#  endif\n#endif\n\n#ifndef HAVE_MODE_T\ntypedef int mode_t;\n#endif\n#ifndef HAVE_OFF_T\ntypedef long off_t;\n#endif\n#ifndef HAVE_PID_T\ntypedef int pid_t;\n#endif\n#ifndef HAVE_SIZE_T\ntypedef unsigned int size_t;\n#endif\n#ifndef HAVE_SSIZE_T\ntypedef int ssize_t;\n#endif\n#ifndef HAVE_FSBLKCNT_T\ntypedef unsigned long fsblkcnt_t;\n#endif\n#ifndef HAVE_FSFILCNT_T\ntypedef unsigned long fsfilcnt_t;\n#endif\n\n#ifndef HAVE_STRUCT_STATVFS_F_BLOCKS\nstruct statvfs\n{\n    unsigned long f_bsize;\n    unsigned long f_frsize;\n    fsblkcnt_t    f_blocks;\n    fsblkcnt_t    f_bfree;\n    fsblkcnt_t    f_bavail;\n    fsfilcnt_t    f_files;\n    fsfilcnt_t    f_ffree;\n    fsfilcnt_t    f_favail;\n    unsigned long f_fsid;\n    unsigned long f_flag;\n    unsigned long f_namemax;\n};\n#endif /* HAVE_STRUCT_STATVFS_F_BLOCKS */\n\n\n/****************************************************************\n * Macro definitions\n */\n\n#ifdef HAVE_DLFCN_H\n#include <dlfcn.h>\n#else\n#define RTLD_LAZY    0x001\n#define RTLD_NOW     0x002\n#define RTLD_GLOBAL  0x100\n#endif\n\n#ifdef HAVE_ONE_ARG_MKDIR\n#define mkdir(path,mode) mkdir(path)\n#endif\n\n#if !defined(HAVE_FTRUNCATE) && defined(HAVE_CHSIZE)\n#define ftruncate chsize\n#endif\n\n#if !defined(HAVE_POPEN) && defined(HAVE__POPEN)\n#define popen _popen\n#endif\n\n#if !defined(HAVE_PCLOSE) && defined(HAVE__PCLOSE)\n#define pclose _pclose\n#endif\n\n#if !defined(HAVE_STRDUP) && defined(HAVE__STRDUP)\n#define strdup _strdup\n#endif\n\n#if !defined(HAVE_SNPRINTF) && defined(HAVE__SNPRINTF)\n#define snprintf _snprintf\n#endif\n\n#if !defined(HAVE_VSNPRINTF) && defined(HAVE__VSNPRINTF)\n#define vsnprintf _vsnprintf\n#endif\n\n#if !defined(HAVE_STRTOLL) && defined(HAVE__STRTOI64)\n#define strtoll _strtoi64\n#endif\n\n#if !defined(HAVE_STRTOULL) && defined(HAVE__STRTOUI64)\n#define strtoull _strtoui64\n#endif\n\n#ifndef S_ISLNK\n# define S_ISLNK(mod) (0)\n#endif\n\n#ifndef S_ISSOCK\n# define S_ISSOCK(mod) (0)\n#endif\n\n#ifndef S_ISDIR\n# define S_ISDIR(mod) (((mod) & _S_IFMT) == _S_IFDIR)\n#endif\n\n#ifndef S_ISCHR\n# define S_ISCHR(mod) (((mod) & _S_IFMT) == _S_IFCHR)\n#endif\n\n#ifndef S_ISFIFO\n# define S_ISFIFO(mod) (((mod) & _S_IFMT) == _S_IFIFO)\n#endif\n\n#ifndef S_ISREG\n# define S_ISREG(mod) (((mod) & _S_IFMT) == _S_IFREG)\n#endif\n\n/* So we open files in 64 bit access mode on Linux */\n#ifndef O_LARGEFILE\n# define O_LARGEFILE 0\n#endif\n\n#ifndef O_NONBLOCK\n# define O_NONBLOCK 0\n#endif\n\n#ifndef O_BINARY\n# define O_BINARY 0\n#endif\n\n\n/****************************************************************\n * Constants\n */\n\n#ifndef M_PI\n#define M_PI 3.14159265358979323846\n#endif\n\n#ifndef M_PI_2\n#define M_PI_2 1.570796326794896619\n#endif\n\n#ifndef INFINITY\nstatic inline float __port_infinity(void)\n{\n    static const unsigned __inf_bytes = 0x7f800000;\n    return *(const float *)&__inf_bytes;\n}\n#define INFINITY __port_infinity()\n#endif\n\n#ifndef NAN\nstatic inline float __port_nan(void)\n{\n    static const unsigned __nan_bytes = 0x7fc00000;\n    return *(const float *)&__nan_bytes;\n}\n#define NAN __port_nan()\n#endif\n\n\n/****************************************************************\n * Function definitions (only when using libwine_port)\n */\n\n#ifndef NO_LIBWINE_PORT\n\n#ifndef HAVE_FSTATVFS\nint fstatvfs( int fd, struct statvfs *buf );\n#endif\n\n#ifndef HAVE_GETOPT_LONG_ONLY\nextern char *optarg;\nextern int optind;\nextern int opterr;\nextern int optopt;\nstruct option;\n\n#ifndef HAVE_STRUCT_OPTION_NAME\nstruct option\n{\n    const char *name;\n    int has_arg;\n    int *flag;\n    int val;\n};\n#endif\n\nextern int getopt_long (int ___argc, char *const *___argv,\n                        const char *__shortopts,\n                        const struct option *__longopts, int *__longind);\nextern int getopt_long_only (int ___argc, char *const *___argv,\n                             const char *__shortopts,\n                             const struct option *__longopts, int *__longind);\n#endif  /* HAVE_GETOPT_LONG_ONLY */\n\n#ifndef HAVE_FFS\nint ffs( int x );\n#endif\n\n#ifndef HAVE_ISFINITE\nint isfinite(double x);\n#endif\n\n#ifndef HAVE_ISINF\nint isinf(double x);\n#endif\n\n#ifndef HAVE_ISNAN\nint isnan(double x);\n#endif\n\n#ifndef HAVE_LLRINT\n__int64 llrint(double x);\n#endif\n\n#ifndef HAVE_LLRINTF\n__int64 llrintf(float x);\n#endif\n\n#ifndef HAVE_LRINT\nlong lrint(double x);\n#endif\n\n#ifndef HAVE_LRINTF\nlong lrintf(float x);\n#endif\n\n#ifndef HAVE_LSTAT\nint lstat(const char *file_name, struct stat *buf);\n#endif /* HAVE_LSTAT */\n\n#ifndef HAVE_MEMMOVE\nvoid *memmove(void *dest, const void *src, size_t len);\n#endif /* !defined(HAVE_MEMMOVE) */\n\n#ifndef HAVE_POLL\nstruct pollfd\n{\n    int fd;\n    short events;\n    short revents;\n};\n#define POLLIN   0x01\n#define POLLPRI  0x02\n#define POLLOUT  0x04\n#define POLLERR  0x08\n#define POLLHUP  0x10\n#define POLLNVAL 0x20\nint poll( struct pollfd *fds, unsigned int count, int timeout );\n#endif /* HAVE_POLL */\n\n#ifndef HAVE_PREAD\nssize_t pread( int fd, void *buf, size_t count, off_t offset );\n#endif /* HAVE_PREAD */\n\n#ifndef HAVE_PWRITE\nssize_t pwrite( int fd, const void *buf, size_t count, off_t offset );\n#endif /* HAVE_PWRITE */\n\n#ifndef HAVE_READLINK\nint readlink( const char *path, char *buf, size_t size );\n#endif /* HAVE_READLINK */\n\n#ifndef HAVE_RINT\ndouble rint(double x);\n#endif\n\n#ifndef HAVE_RINTF\nfloat rintf(float x);\n#endif\n\n#ifndef HAVE_STATVFS\nint statvfs( const char *path, struct statvfs *buf );\n#endif\n\n#ifndef HAVE_STRNCASECMP\n# ifndef HAVE__STRNICMP\nint strncasecmp(const char *str1, const char *str2, size_t n);\n# else\n# define strncasecmp _strnicmp\n# endif\n#endif /* !defined(HAVE_STRNCASECMP) */\n\n#ifndef HAVE_STRNLEN\nsize_t strnlen( const char *str, size_t maxlen );\n#endif /* !defined(HAVE_STRNLEN) */\n\n#ifndef HAVE_STRERROR\nconst char *strerror(int err);\n#endif /* !defined(HAVE_STRERROR) */\n\n#ifndef HAVE_STRCASECMP\n# ifndef HAVE__STRICMP\nint strcasecmp(const char *str1, const char *str2);\n# else\n# define strcasecmp _stricmp\n# endif\n#endif /* !defined(HAVE_STRCASECMP) */\n\n#ifndef HAVE_SYMLINK\nint symlink(const char *from, const char *to);\n#endif\n\n#ifndef HAVE_USLEEP\nint usleep (unsigned int useconds);\n#endif /* !defined(HAVE_USLEEP) */\n\n#ifdef __i386__\nstatic inline void *memcpy_unaligned( void *dst, const void *src, size_t size )\n{\n    return memcpy( dst, src, size );\n}\n#else\nextern void *memcpy_unaligned( void *dst, const void *src, size_t size );\n#endif /* __i386__ */\n\nextern int mkstemps(char *template, int suffix_len);\n\n/* Process creation flags */\n#ifndef _P_WAIT\n# define _P_WAIT    0\n# define _P_NOWAIT  1\n# define _P_OVERLAY 2\n# define _P_NOWAITO 3\n# define _P_DETACH  4\n#endif\n#ifndef HAVE__SPAWNVP\n//extern int _spawnvp(int mode, const char *cmdname, const char * const argv[]);\n#endif\n\n/* Interlocked functions */\n\n#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))\n\nstatic inline int interlocked_cmpxchg( int *dest, int xchg, int compare )\n{\n    int ret;\n    __asm__ __volatile__( \"lock; cmpxchgl %2,(%1)\"\n                          : \"=a\" (ret) : \"r\" (dest), \"r\" (xchg), \"0\" (compare) : \"memory\" );\n    return ret;\n}\n\nstatic inline void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare )\n{\n    void *ret;\n#ifdef __x86_64__\n    __asm__ __volatile__( \"lock; cmpxchgq %2,(%1)\"\n                          : \"=a\" (ret) : \"r\" (dest), \"r\" (xchg), \"0\" (compare) : \"memory\" );\n#else\n    __asm__ __volatile__( \"lock; cmpxchgl %2,(%1)\"\n                          : \"=a\" (ret) : \"r\" (dest), \"r\" (xchg), \"0\" (compare) : \"memory\" );\n#endif\n    return ret;\n}\n\nstatic inline int interlocked_xchg( int *dest, int val )\n{\n    int ret;\n    __asm__ __volatile__( \"lock; xchgl %0,(%1)\"\n                          : \"=r\" (ret) : \"r\" (dest), \"0\" (val) : \"memory\" );\n    return ret;\n}\n\nstatic inline void *interlocked_xchg_ptr( void **dest, void *val )\n{\n    void *ret;\n#ifdef __x86_64__\n    __asm__ __volatile__( \"lock; xchgq %0,(%1)\"\n                          : \"=r\" (ret) :\"r\" (dest), \"0\" (val) : \"memory\" );\n#else\n    __asm__ __volatile__( \"lock; xchgl %0,(%1)\"\n                          : \"=r\" (ret) : \"r\" (dest), \"0\" (val) : \"memory\" );\n#endif\n    return ret;\n}\n\nstatic inline int interlocked_xchg_add( int *dest, int incr )\n{\n    int ret;\n    __asm__ __volatile__( \"lock; xaddl %0,(%1)\"\n                          : \"=r\" (ret) : \"r\" (dest), \"0\" (incr) : \"memory\" );\n    return ret;\n}\n\n#ifdef __x86_64__\nstatic inline unsigned char interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high,\n                                                    __int64 xchg_low, __int64 *compare )\n{\n    unsigned char ret;\n    __asm__ __volatile__( \"lock cmpxchg16b %0; setz %b2\"\n                          : \"=m\" (dest[0]), \"=m\" (dest[1]), \"=r\" (ret),\n                            \"=a\" (compare[0]), \"=d\" (compare[1])\n                          : \"m\" (dest[0]), \"m\" (dest[1]), \"3\" (compare[0]), \"4\" (compare[1]),\n                            \"c\" (xchg_high), \"b\" (xchg_low) );\n    return ret;\n}\n#endif\n\n#else  /* __GNUC__ */\n\n#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4\nstatic inline int interlocked_cmpxchg( int *dest, int xchg, int compare )\n{\n    return __sync_val_compare_and_swap( dest, compare, xchg );\n}\n\nstatic inline int interlocked_xchg_add( int *dest, int incr )\n{\n    return __sync_fetch_and_add( dest, incr );\n}\n\nstatic inline int interlocked_xchg( int *dest, int val )\n{\n    int ret;\n    do ret = *dest; while (!__sync_bool_compare_and_swap( dest, ret, val ));\n    return ret;\n}\n#else\nextern int interlocked_cmpxchg( int *dest, int xchg, int compare );\nextern int interlocked_xchg_add( int *dest, int incr );\nextern int interlocked_xchg( int *dest, int val );\n#endif\n\n#if (defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) && __SIZEOF_POINTER__ == 4) \\\n || (defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) && __SIZEOF_POINTER__ == 8)\nstatic inline void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare )\n{\n    return __sync_val_compare_and_swap( dest, compare, xchg );\n}\n\nstatic inline void *interlocked_xchg_ptr( void **dest, void *val )\n{\n    void *ret;\n    do ret = *dest; while (!__sync_bool_compare_and_swap( dest, ret, val ));\n    return ret;\n}\n#else\nextern void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare );\nextern void *interlocked_xchg_ptr( void **dest, void *val );\n#endif\n\n#if defined(__x86_64__) || defined(__aarch64__) || defined(_WIN64)\nextern unsigned char interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high,\n                                             __int64 xchg_low, __int64 *compare );\n#endif\n\n#endif  /* __GNUC__ */\n\n#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8\nstatic inline __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare )\n{\n    return __sync_val_compare_and_swap( dest, compare, xchg );\n}\n#else\nextern __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare );\n#endif\n\n#else /* NO_LIBWINE_PORT */\n\n#define __WINE_NOT_PORTABLE(func) func##_is_not_portable func##_is_not_portable\n\n#define ffs                     __WINE_NOT_PORTABLE(ffs)\n#define fstatvfs                __WINE_NOT_PORTABLE(fstatvfs)\n#define getopt_long             __WINE_NOT_PORTABLE(getopt_long)\n#define getopt_long_only        __WINE_NOT_PORTABLE(getopt_long_only)\n#define interlocked_cmpxchg     __WINE_NOT_PORTABLE(interlocked_cmpxchg)\n#define interlocked_cmpxchg_ptr __WINE_NOT_PORTABLE(interlocked_cmpxchg_ptr)\n#define interlocked_xchg        __WINE_NOT_PORTABLE(interlocked_xchg)\n#define interlocked_xchg_ptr    __WINE_NOT_PORTABLE(interlocked_xchg_ptr)\n#define interlocked_xchg_add    __WINE_NOT_PORTABLE(interlocked_xchg_add)\n#define lstat                   __WINE_NOT_PORTABLE(lstat)\n#define memcpy_unaligned        __WINE_NOT_PORTABLE(memcpy_unaligned)\n#undef memmove\n#define memmove                 __WINE_NOT_PORTABLE(memmove)\n#define pread                   __WINE_NOT_PORTABLE(pread)\n#define pwrite                  __WINE_NOT_PORTABLE(pwrite)\n#define spawnvp                 __WINE_NOT_PORTABLE(spawnvp)\n#define statvfs                 __WINE_NOT_PORTABLE(statvfs)\n#define strcasecmp              __WINE_NOT_PORTABLE(strcasecmp)\n#define strerror                __WINE_NOT_PORTABLE(strerror)\n#define strncasecmp             __WINE_NOT_PORTABLE(strncasecmp)\n#define strnlen                 __WINE_NOT_PORTABLE(strnlen)\n#define usleep                  __WINE_NOT_PORTABLE(usleep)\n\n#endif /* NO_LIBWINE_PORT */\n\n#endif /* !defined(__WINE_WINE_PORT_H) */\n"
  },
  {
    "path": "wine/wine/server.h",
    "content": "/*\n * Definitions for the client side of the Wine server communication\n *\n * Copyright (C) 1998 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINE_SERVER_H\n#define __WINE_WINE_SERVER_H\n\n#include <stdarg.h>\n#include <windef.h>\n#include <winbase.h>\n#include <winternl.h>\n#include <wine/server_protocol.h>\n\n/* client communication functions */\n\nstruct __server_iovec\n{\n    const void  *ptr;\n    data_size_t  size;\n};\n\n#define __SERVER_MAX_DATA 5\n\nstruct __server_request_info\n{\n    union\n    {\n        union generic_request req;    /* request structure */\n        union generic_reply   reply;  /* reply structure */\n    } u;\n    unsigned int          data_count; /* count of request data pointers */\n    void                 *reply_data; /* reply data pointer */\n    struct __server_iovec data[__SERVER_MAX_DATA];  /* request variable size data */\n};\n\nextern unsigned int wine_server_call( void *req_ptr );\nextern void CDECL wine_server_send_fd( int fd );\nextern int CDECL wine_server_fd_to_handle( int fd, unsigned int access, unsigned int attributes, HANDLE *handle );\nextern int CDECL wine_server_handle_to_fd( HANDLE handle, unsigned int access, int *unix_fd, unsigned int *options );\nextern void CDECL wine_server_release_fd( HANDLE handle, int unix_fd );\n\n/* do a server call and set the last error code */\nstatic inline unsigned int wine_server_call_err( void *req_ptr )\n{\n    unsigned int res = wine_server_call( req_ptr );\n    if (res) SetLastError( RtlNtStatusToDosError(res) );\n    return res;\n}\n\n/* get the size of the variable part of the returned reply */\nstatic inline data_size_t wine_server_reply_size( const void *reply )\n{\n    return ((const struct reply_header *)reply)->reply_size;\n}\n\n/* add some data to be sent along with the request */\nstatic inline void wine_server_add_data( void *req_ptr, const void *ptr, data_size_t size )\n{\n    struct __server_request_info * const req = req_ptr;\n    if (size)\n    {\n        req->data[req->data_count].ptr = ptr;\n        req->data[req->data_count++].size = size;\n        req->u.req.request_header.request_size += size;\n    }\n}\n\n/* set the pointer and max size for the reply var data */\nstatic inline void wine_server_set_reply( void *req_ptr, void *ptr, data_size_t max_size )\n{\n    struct __server_request_info * const req = req_ptr;\n    req->reply_data = ptr;\n    req->u.req.request_header.reply_size = max_size;\n}\n\n/* convert an object handle to a server handle */\nstatic inline obj_handle_t wine_server_obj_handle( HANDLE handle )\n{\n    if ((int)(INT_PTR)handle != (INT_PTR)handle) return 0xfffffff0;  /* some invalid handle */\n    return (INT_PTR)handle;\n}\n\n/* convert a user handle to a server handle */\nstatic inline user_handle_t wine_server_user_handle( HANDLE handle )\n{\n    return (UINT_PTR)handle;\n}\n\n/* convert a server handle to a generic handle */\nstatic inline HANDLE wine_server_ptr_handle( obj_handle_t handle )\n{\n    return (HANDLE)(INT_PTR)(int)handle;\n}\n\n/* convert a client pointer to a server client_ptr_t */\nstatic inline client_ptr_t wine_server_client_ptr( const void *ptr )\n{\n    return (client_ptr_t)(ULONG_PTR)ptr;\n}\n\n/* convert a server client_ptr_t to a real pointer */\nstatic inline void *wine_server_get_ptr( client_ptr_t ptr )\n{\n    return (void *)(ULONG_PTR)ptr;\n}\n\n\n/* macros for server requests */\n\n#define SERVER_START_REQ(type) \\\n    do { \\\n        struct __server_request_info __req; \\\n        struct type##_request * const req = &__req.u.req.type##_request; \\\n        const struct type##_reply * const reply = &__req.u.reply.type##_reply; \\\n        memset( &__req.u.req, 0, sizeof(__req.u.req) ); \\\n        __req.u.req.request_header.req = REQ_##type; \\\n        __req.data_count = 0; \\\n        (void)reply; \\\n        do\n\n#define SERVER_END_REQ \\\n        while(0); \\\n    } while(0)\n\n\n#endif  /* __WINE_WINE_SERVER_H */\n"
  },
  {
    "path": "wine/wine/server_protocol.h",
    "content": "/*\n * Wine server protocol definitions\n *\n * This file is automatically generated; DO NO EDIT!\n * Edit server/protocol.def instead and re-run tools/make_requests\n */\n\n#ifndef __WINE_WINE_SERVER_PROTOCOL_H\n#define __WINE_WINE_SERVER_PROTOCOL_H\n\n#include <stdarg.h>\n#include <stdlib.h>\n#include <time.h>\n\n#include <windef.h>\n#include <winbase.h>\n\ntypedef unsigned int obj_handle_t;\ntypedef unsigned int user_handle_t;\ntypedef unsigned int atom_t;\ntypedef unsigned int process_id_t;\ntypedef unsigned int thread_id_t;\ntypedef unsigned int data_size_t;\ntypedef unsigned int ioctl_code_t;\ntypedef unsigned __int64 lparam_t;\ntypedef unsigned __int64 apc_param_t;\ntypedef unsigned __int64 mem_size_t;\ntypedef unsigned __int64 file_pos_t;\ntypedef unsigned __int64 client_ptr_t;\ntypedef unsigned __int64 affinity_t;\ntypedef client_ptr_t mod_handle_t;\n\nstruct request_header\n{\n    int          req;\n    data_size_t  request_size;\n    data_size_t  reply_size;\n};\n\nstruct reply_header\n{\n    unsigned int error;\n    data_size_t  reply_size;\n};\n\n\n\nstruct request_max_size\n{\n    int pad[16];\n};\n\n#define FIRST_USER_HANDLE 0x0020\n#define LAST_USER_HANDLE  0xffef\n\n\n\ntypedef union\n{\n    int code;\n    struct\n    {\n        int              code;\n        int              first;\n        unsigned int     exc_code;\n        unsigned int     flags;\n        client_ptr_t     record;\n        client_ptr_t     address;\n        int              nb_params;\n        int              __pad;\n        client_ptr_t     params[15];\n    } exception;\n    struct\n    {\n        int          code;\n        obj_handle_t handle;\n        client_ptr_t teb;\n        client_ptr_t start;\n    } create_thread;\n    struct\n    {\n        int          code;\n        obj_handle_t file;\n        obj_handle_t process;\n        obj_handle_t thread;\n        mod_handle_t base;\n        int          dbg_offset;\n        int          dbg_size;\n        client_ptr_t teb;\n        client_ptr_t start;\n        client_ptr_t name;\n        int          unicode;\n    } create_process;\n    struct\n    {\n        int          code;\n        int          exit_code;\n    } exit;\n    struct\n    {\n        int          code;\n        obj_handle_t handle;\n        mod_handle_t base;\n        int          dbg_offset;\n        int          dbg_size;\n        client_ptr_t name;\n        int          unicode;\n    } load_dll;\n    struct\n    {\n        int          code;\n        int          __pad;\n        mod_handle_t base;\n    } unload_dll;\n} debug_event_t;\n\n\nenum cpu_type\n{\n    CPU_x86, CPU_x86_64, CPU_POWERPC, CPU_ARM, CPU_ARM64\n};\ntypedef int cpu_type_t;\n\n\ntypedef struct\n{\n    cpu_type_t       cpu;\n    unsigned int     flags;\n    union\n    {\n        struct { unsigned int eip, ebp, esp, eflags, cs, ss; } i386_regs;\n        struct { unsigned __int64 rip, rbp, rsp;\n                 unsigned int cs, ss, flags, __pad; } x86_64_regs;\n        struct { unsigned int iar, msr, ctr, lr, dar, dsisr, trap, __pad; } powerpc_regs;\n        struct { unsigned int sp, lr, pc, cpsr; } arm_regs;\n        struct { unsigned __int64 sp, pc, pstate; } arm64_regs;\n    } ctl;\n    union\n    {\n        struct { unsigned int eax, ebx, ecx, edx, esi, edi; } i386_regs;\n        struct { unsigned __int64 rax,rbx, rcx, rdx, rsi, rdi,\n                                  r8, r9, r10, r11, r12, r13, r14, r15; } x86_64_regs;\n        struct { unsigned int gpr[32], cr, xer; } powerpc_regs;\n        struct { unsigned int r[13]; } arm_regs;\n        struct { unsigned __int64 x[31]; } arm64_regs;\n    } integer;\n    union\n    {\n        struct { unsigned int ds, es, fs, gs; } i386_regs;\n        struct { unsigned int ds, es, fs, gs; } x86_64_regs;\n    } seg;\n    union\n    {\n        struct { unsigned int ctrl, status, tag, err_off, err_sel, data_off, data_sel, cr0npx;\n                 unsigned char regs[80]; } i386_regs;\n        struct { struct { unsigned __int64 low, high; } fpregs[32]; } x86_64_regs;\n        struct { double fpr[32], fpscr; } powerpc_regs;\n        struct { unsigned __int64 d[32]; unsigned int fpscr; } arm_regs;\n        struct { unsigned __int64 d[64]; unsigned int fpcr, fpsr; } arm64_regs;\n    } fp;\n    union\n    {\n        struct { unsigned int dr0, dr1, dr2, dr3, dr6, dr7; } i386_regs;\n        struct { unsigned __int64 dr0, dr1, dr2, dr3, dr6, dr7; } x86_64_regs;\n        struct { unsigned int dr[8]; } powerpc_regs;\n        struct { unsigned int bvr[8], bcr[8], wvr[1], wcr[1]; } arm_regs;\n        struct { unsigned __int64 bvr[8], wvr[2]; unsigned int bcr[8], wcr[2]; } arm64_regs;\n    } debug;\n    union\n    {\n        unsigned char i386_regs[512];\n    } ext;\n} context_t;\n\n#define SERVER_CTX_CONTROL            0x01\n#define SERVER_CTX_INTEGER            0x02\n#define SERVER_CTX_SEGMENTS           0x04\n#define SERVER_CTX_FLOATING_POINT     0x08\n#define SERVER_CTX_DEBUG_REGISTERS    0x10\n#define SERVER_CTX_EXTENDED_REGISTERS 0x20\n\n\nstruct send_fd\n{\n    thread_id_t tid;\n    int         fd;\n};\n\n\nstruct wake_up_reply\n{\n    client_ptr_t cookie;\n    int          signaled;\n    int          __pad;\n};\n\n\ntypedef __int64 timeout_t;\n#define TIMEOUT_INFINITE (((timeout_t)0x7fffffff) << 32 | 0xffffffff)\n\n\ntypedef struct\n{\n    unsigned int debug_flags;\n    unsigned int console_flags;\n    obj_handle_t console;\n    obj_handle_t hstdin;\n    obj_handle_t hstdout;\n    obj_handle_t hstderr;\n    unsigned int x;\n    unsigned int y;\n    unsigned int xsize;\n    unsigned int ysize;\n    unsigned int xchars;\n    unsigned int ychars;\n    unsigned int attribute;\n    unsigned int flags;\n    unsigned int show;\n    data_size_t  curdir_len;\n    data_size_t  dllpath_len;\n    data_size_t  imagepath_len;\n    data_size_t  cmdline_len;\n    data_size_t  title_len;\n    data_size_t  desktop_len;\n    data_size_t  shellinfo_len;\n    data_size_t  runtime_len;\n\n\n\n\n\n\n\n\n} startup_info_t;\n\n\ntypedef struct\n{\n    atom_t         atom;\n    int            string;\n    lparam_t       data;\n} property_data_t;\n\n\ntypedef struct\n{\n    int  left;\n    int  top;\n    int  right;\n    int  bottom;\n} rectangle_t;\n\n\ntypedef struct\n{\n    obj_handle_t    handle;\n    obj_handle_t    event;\n    client_ptr_t    iosb;\n    client_ptr_t    user;\n    client_ptr_t    apc;\n    apc_param_t     apc_context;\n} async_data_t;\n\n\n\nstruct hardware_msg_data\n{\n    lparam_t        info;\n    unsigned int    hw_id;\n    unsigned int    flags;\n    union\n    {\n        int type;\n        struct\n        {\n            int            type;\n            unsigned int   message;\n            unsigned short vkey;\n            unsigned short scan;\n        } kbd;\n        struct\n        {\n            int            type;\n            int            x;\n            int            y;\n            unsigned int   data;\n        } mouse;\n    } rawinput;\n};\n\nstruct callback_msg_data\n{\n    client_ptr_t    callback;\n    lparam_t        data;\n    lparam_t        result;\n};\n\nstruct winevent_msg_data\n{\n    user_handle_t   hook;\n    thread_id_t     tid;\n    client_ptr_t    hook_proc;\n\n};\n\ntypedef union\n{\n    int type;\n    struct\n    {\n        int            type;\n        unsigned short vkey;\n        unsigned short scan;\n        unsigned int   flags;\n        unsigned int   time;\n        lparam_t       info;\n    } kbd;\n    struct\n    {\n        int            type;\n        int            x;\n        int            y;\n        unsigned int   data;\n        unsigned int   flags;\n        unsigned int   time;\n        lparam_t       info;\n    } mouse;\n    struct\n    {\n        int            type;\n        unsigned int   msg;\n        lparam_t       lparam;\n    } hw;\n} hw_input_t;\n\ntypedef union\n{\n    unsigned char            bytes[1];\n    struct hardware_msg_data hardware;\n    struct callback_msg_data callback;\n    struct winevent_msg_data winevent;\n} message_data_t;\n\n\ntypedef struct\n{\n    WCHAR          ch;\n    unsigned short attr;\n} char_info_t;\n\n\nstruct filesystem_event\n{\n    int         action;\n    data_size_t len;\n    char        name[1];\n};\n\ntypedef struct\n{\n    unsigned int low_part;\n    int          high_part;\n} luid_t;\n\n#define MAX_ACL_LEN 65535\n\nstruct security_descriptor\n{\n    unsigned int control;\n    data_size_t  owner_len;\n    data_size_t  group_len;\n    data_size_t  sacl_len;\n    data_size_t  dacl_len;\n\n\n\n\n};\n\nstruct object_attributes\n{\n    obj_handle_t rootdir;\n    unsigned int attributes;\n    data_size_t  sd_len;\n    data_size_t  name_len;\n\n\n};\n\nstruct token_groups\n{\n    unsigned int count;\n\n\n};\n\nenum select_op\n{\n    SELECT_NONE,\n    SELECT_WAIT,\n    SELECT_WAIT_ALL,\n    SELECT_SIGNAL_AND_WAIT,\n    SELECT_KEYED_EVENT_WAIT,\n    SELECT_KEYED_EVENT_RELEASE\n};\n\ntypedef union\n{\n    enum select_op op;\n    struct\n    {\n        enum select_op  op;\n        obj_handle_t    handles[MAXIMUM_WAIT_OBJECTS];\n    } wait;\n    struct\n    {\n        enum select_op  op;\n        obj_handle_t    wait;\n        obj_handle_t    signal;\n    } signal_and_wait;\n    struct\n    {\n        enum select_op  op;\n        obj_handle_t    handle;\n        client_ptr_t    key;\n    } keyed_event;\n} select_op_t;\n\nenum apc_type\n{\n    APC_NONE,\n    APC_USER,\n    APC_TIMER,\n    APC_ASYNC_IO,\n    APC_VIRTUAL_ALLOC,\n    APC_VIRTUAL_FREE,\n    APC_VIRTUAL_QUERY,\n    APC_VIRTUAL_PROTECT,\n    APC_VIRTUAL_FLUSH,\n    APC_VIRTUAL_LOCK,\n    APC_VIRTUAL_UNLOCK,\n    APC_MAP_VIEW,\n    APC_UNMAP_VIEW,\n    APC_CREATE_THREAD\n};\n\ntypedef union\n{\n    enum apc_type type;\n    struct\n    {\n        enum apc_type    type;\n        int              __pad;\n        client_ptr_t     func;\n        apc_param_t      args[3];\n    } user;\n    struct\n    {\n        enum apc_type    type;\n        int              __pad;\n        client_ptr_t     func;\n        timeout_t        time;\n        client_ptr_t     arg;\n    } timer;\n    struct\n    {\n        enum apc_type    type;\n        unsigned int     status;\n        client_ptr_t     user;\n        client_ptr_t     sb;\n    } async_io;\n    struct\n    {\n        enum apc_type    type;\n        unsigned int     op_type;\n        client_ptr_t     addr;\n        mem_size_t       size;\n        unsigned int     zero_bits;\n        unsigned int     prot;\n    } virtual_alloc;\n    struct\n    {\n        enum apc_type    type;\n        unsigned int     op_type;\n        client_ptr_t     addr;\n        mem_size_t       size;\n    } virtual_free;\n    struct\n    {\n        enum apc_type    type;\n        int              __pad;\n        client_ptr_t     addr;\n    } virtual_query;\n    struct\n    {\n        enum apc_type    type;\n        unsigned int     prot;\n        client_ptr_t     addr;\n        mem_size_t       size;\n    } virtual_protect;\n    struct\n    {\n        enum apc_type    type;\n        int              __pad;\n        client_ptr_t     addr;\n        mem_size_t       size;\n    } virtual_flush;\n    struct\n    {\n        enum apc_type    type;\n        int              __pad;\n        client_ptr_t     addr;\n        mem_size_t       size;\n    } virtual_lock;\n    struct\n    {\n        enum apc_type    type;\n        int              __pad;\n        client_ptr_t     addr;\n        mem_size_t       size;\n    } virtual_unlock;\n    struct\n    {\n        enum apc_type    type;\n        obj_handle_t     handle;\n        client_ptr_t     addr;\n        mem_size_t       size;\n        file_pos_t       offset;\n        unsigned int     alloc_type;\n        unsigned short   zero_bits;\n        unsigned short   prot;\n    } map_view;\n    struct\n    {\n        enum apc_type    type;\n        int              __pad;\n        client_ptr_t     addr;\n    } unmap_view;\n    struct\n    {\n        enum apc_type    type;\n        int              suspend;\n        client_ptr_t     func;\n        client_ptr_t     arg;\n        mem_size_t       reserve;\n        mem_size_t       commit;\n    } create_thread;\n} apc_call_t;\n\ntypedef union\n{\n    enum apc_type type;\n    struct\n    {\n        enum apc_type    type;\n        unsigned int     status;\n        unsigned int     total;\n    } async_io;\n    struct\n    {\n        enum apc_type    type;\n        unsigned int     status;\n        client_ptr_t     addr;\n        mem_size_t       size;\n    } virtual_alloc;\n    struct\n    {\n        enum apc_type    type;\n        unsigned int     status;\n        client_ptr_t     addr;\n        mem_size_t       size;\n    } virtual_free;\n    struct\n    {\n        enum apc_type    type;\n        unsigned int     status;\n        client_ptr_t     base;\n        client_ptr_t     alloc_base;\n        mem_size_t       size;\n        unsigned short   state;\n        unsigned short   prot;\n        unsigned short   alloc_prot;\n        unsigned short   alloc_type;\n    } virtual_query;\n    struct\n    {\n        enum apc_type    type;\n        unsigned int     status;\n        client_ptr_t     addr;\n        mem_size_t       size;\n        unsigned int     prot;\n    } virtual_protect;\n    struct\n    {\n        enum apc_type    type;\n        unsigned int     status;\n        client_ptr_t     addr;\n        mem_size_t       size;\n    } virtual_flush;\n    struct\n    {\n        enum apc_type    type;\n        unsigned int     status;\n        client_ptr_t     addr;\n        mem_size_t       size;\n    } virtual_lock;\n    struct\n    {\n        enum apc_type    type;\n        unsigned int     status;\n        client_ptr_t     addr;\n        mem_size_t       size;\n    } virtual_unlock;\n    struct\n    {\n        enum apc_type    type;\n        unsigned int     status;\n        client_ptr_t     addr;\n        mem_size_t       size;\n    } map_view;\n    struct\n    {\n        enum apc_type    type;\n        unsigned int     status;\n    } unmap_view;\n    struct\n    {\n        enum apc_type    type;\n        unsigned int     status;\n        thread_id_t      tid;\n        obj_handle_t     handle;\n    } create_thread;\n} apc_result_t;\n\ntypedef union\n{\n    unsigned int         major;\n    struct\n    {\n        unsigned int     major;\n        unsigned int     access;\n        unsigned int     sharing;\n        unsigned int     options;\n        client_ptr_t     device;\n    } create;\n    struct\n    {\n        unsigned int     major;\n        int              __pad;\n        client_ptr_t     file;\n    } close;\n    struct\n    {\n        unsigned int     major;\n        unsigned int     key;\n        client_ptr_t     file;\n        file_pos_t       pos;\n    } read;\n    struct\n    {\n        unsigned int     major;\n        unsigned int     key;\n        client_ptr_t     file;\n        file_pos_t       pos;\n    } write;\n    struct\n    {\n        unsigned int     major;\n        int              __pad;\n        client_ptr_t     file;\n    } flush;\n    struct\n    {\n        unsigned int     major;\n        ioctl_code_t     code;\n        client_ptr_t     file;\n    } ioctl;\n} irp_params_t;\n\n\ntypedef struct\n{\n    client_ptr_t   base;\n    client_ptr_t   entry_point;\n    mem_size_t     map_size;\n    mem_size_t     stack_size;\n    mem_size_t     stack_commit;\n    unsigned int   zerobits;\n    unsigned int   subsystem;\n    unsigned short subsystem_low;\n    unsigned short subsystem_high;\n    unsigned int   gp;\n    unsigned short image_charact;\n    unsigned short dll_charact;\n    unsigned short machine;\n    unsigned char  contains_code;\n    unsigned char  image_flags;\n    unsigned int   loader_flags;\n    unsigned int   header_size;\n    unsigned int   file_size;\n    unsigned int   checksum;\n} pe_image_info_t;\n#define IMAGE_FLAGS_ComPlusNativeReady        0x01\n#define IMAGE_FLAGS_ComPlusILOnly             0x02\n#define IMAGE_FLAGS_ImageDynamicallyRelocated 0x04\n#define IMAGE_FLAGS_ImageMappedFlat           0x08\n#define IMAGE_FLAGS_BaseBelow4gb              0x10\n\nstruct rawinput_device\n{\n    unsigned short usage_page;\n    unsigned short usage;\n    unsigned int   flags;\n    user_handle_t  target;\n};\n\n\n\n\n\nstruct new_process_request\n{\n    struct request_header __header;\n    int          inherit_all;\n    unsigned int create_flags;\n    int          socket_fd;\n    obj_handle_t exe_file;\n    unsigned int process_access;\n    unsigned int process_attr;\n    unsigned int thread_access;\n    unsigned int thread_attr;\n    cpu_type_t   cpu;\n    data_size_t  info_size;\n    /* VARARG(info,startup_info,info_size); */\n    /* VARARG(env,unicode_str); */\n    char __pad_52[4];\n};\nstruct new_process_reply\n{\n    struct reply_header __header;\n    obj_handle_t info;\n    process_id_t pid;\n    obj_handle_t phandle;\n    thread_id_t  tid;\n    obj_handle_t thandle;\n    char __pad_28[4];\n};\n\n\n\nstruct get_new_process_info_request\n{\n    struct request_header __header;\n    obj_handle_t info;\n};\nstruct get_new_process_info_reply\n{\n    struct reply_header __header;\n    int          success;\n    int          exit_code;\n};\n\n\n\nstruct new_thread_request\n{\n    struct request_header __header;\n    unsigned int access;\n    unsigned int attributes;\n    int          suspend;\n    int          request_fd;\n    char __pad_28[4];\n};\nstruct new_thread_reply\n{\n    struct reply_header __header;\n    thread_id_t  tid;\n    obj_handle_t handle;\n};\n\n\n\nstruct get_startup_info_request\n{\n    struct request_header __header;\n    char __pad_12[4];\n};\nstruct get_startup_info_reply\n{\n    struct reply_header __header;\n    obj_handle_t exe_file;\n    data_size_t  info_size;\n    /* VARARG(info,startup_info,info_size); */\n    /* VARARG(env,unicode_str); */\n};\n\n\n\nstruct init_process_done_request\n{\n    struct request_header __header;\n    int          gui;\n    mod_handle_t module;\n    client_ptr_t ldt_copy;\n    client_ptr_t entry;\n};\nstruct init_process_done_reply\n{\n    struct reply_header __header;\n    int          suspend;\n    char __pad_12[4];\n};\n\n\n\nstruct init_thread_request\n{\n    struct request_header __header;\n    int          unix_pid;\n    int          unix_tid;\n    int          debug_level;\n    client_ptr_t teb;\n    client_ptr_t entry;\n    int          reply_fd;\n    int          wait_fd;\n    cpu_type_t   cpu;\n    char __pad_52[4];\n};\nstruct init_thread_reply\n{\n    struct reply_header __header;\n    process_id_t pid;\n    thread_id_t  tid;\n    timeout_t    server_start;\n    data_size_t  info_size;\n    int          version;\n    unsigned int all_cpus;\n    int          suspend;\n};\n\n\n\nstruct terminate_process_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    int          exit_code;\n    char __pad_20[4];\n};\nstruct terminate_process_reply\n{\n    struct reply_header __header;\n    int          self;\n    char __pad_12[4];\n};\n\n\n\nstruct terminate_thread_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    int          exit_code;\n    char __pad_20[4];\n};\nstruct terminate_thread_reply\n{\n    struct reply_header __header;\n    int          self;\n    int          last;\n};\n\n\n\nstruct get_process_info_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct get_process_info_reply\n{\n    struct reply_header __header;\n    process_id_t pid;\n    process_id_t ppid;\n    affinity_t   affinity;\n    client_ptr_t peb;\n    timeout_t    start_time;\n    timeout_t    end_time;\n    int          exit_code;\n    int          priority;\n    cpu_type_t   cpu;\n    short int    debugger_present;\n    short int    debug_children;\n};\n\n\n\nstruct get_process_vm_counters_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct get_process_vm_counters_reply\n{\n    struct reply_header __header;\n    mem_size_t peak_virtual_size;\n    mem_size_t virtual_size;\n    mem_size_t peak_working_set_size;\n    mem_size_t working_set_size;\n    mem_size_t pagefile_usage;\n    mem_size_t peak_pagefile_usage;\n};\n\n\n\nstruct set_process_info_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    int          mask;\n    int          priority;\n    affinity_t   affinity;\n};\nstruct set_process_info_reply\n{\n    struct reply_header __header;\n};\n#define SET_PROCESS_INFO_PRIORITY 0x01\n#define SET_PROCESS_INFO_AFFINITY 0x02\n\n\n\nstruct get_thread_info_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    thread_id_t  tid_in;\n    char __pad_20[4];\n};\nstruct get_thread_info_reply\n{\n    struct reply_header __header;\n    process_id_t pid;\n    thread_id_t  tid;\n    client_ptr_t teb;\n    client_ptr_t entry_point;\n    affinity_t   affinity;\n    int          exit_code;\n    int          priority;\n    int          last;\n    char __pad_52[4];\n};\n\n\n\nstruct get_thread_times_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct get_thread_times_reply\n{\n    struct reply_header __header;\n    timeout_t    creation_time;\n    timeout_t    exit_time;\n};\n\n\n\nstruct set_thread_info_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    int          mask;\n    int          priority;\n    affinity_t   affinity;\n    client_ptr_t entry_point;\n    obj_handle_t token;\n    char __pad_44[4];\n};\nstruct set_thread_info_reply\n{\n    struct reply_header __header;\n};\n#define SET_THREAD_INFO_PRIORITY   0x01\n#define SET_THREAD_INFO_AFFINITY   0x02\n#define SET_THREAD_INFO_TOKEN      0x04\n#define SET_THREAD_INFO_ENTRYPOINT 0x08\n\n\n\nstruct get_dll_info_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    mod_handle_t base_address;\n};\nstruct get_dll_info_reply\n{\n    struct reply_header __header;\n    client_ptr_t entry_point;\n    data_size_t  filename_len;\n    /* VARARG(filename,unicode_str); */\n    char __pad_20[4];\n};\n\n\n\nstruct suspend_thread_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct suspend_thread_reply\n{\n    struct reply_header __header;\n    int          count;\n    char __pad_12[4];\n};\n\n\n\nstruct resume_thread_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct resume_thread_reply\n{\n    struct reply_header __header;\n    int          count;\n    char __pad_12[4];\n};\n\n\n\nstruct load_dll_request\n{\n    struct request_header __header;\n    data_size_t  dbg_offset;\n    mod_handle_t base;\n    client_ptr_t name;\n    data_size_t  dbg_size;\n    /* VARARG(filename,unicode_str); */\n    char __pad_36[4];\n};\nstruct load_dll_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct unload_dll_request\n{\n    struct request_header __header;\n    char __pad_12[4];\n    mod_handle_t base;\n};\nstruct unload_dll_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct queue_apc_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    apc_call_t   call;\n};\nstruct queue_apc_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    int          self;\n};\n\n\n\nstruct get_apc_result_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct get_apc_result_reply\n{\n    struct reply_header __header;\n    apc_result_t result;\n};\n\n\n\nstruct close_handle_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct close_handle_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct set_handle_info_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    int          flags;\n    int          mask;\n};\nstruct set_handle_info_reply\n{\n    struct reply_header __header;\n    int          old_flags;\n    char __pad_12[4];\n};\n\n\n\nstruct dup_handle_request\n{\n    struct request_header __header;\n    obj_handle_t src_process;\n    obj_handle_t src_handle;\n    obj_handle_t dst_process;\n    unsigned int access;\n    unsigned int attributes;\n    unsigned int options;\n    char __pad_36[4];\n};\nstruct dup_handle_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    int          self;\n    int          closed;\n    char __pad_20[4];\n};\n#define DUP_HANDLE_CLOSE_SOURCE  DUPLICATE_CLOSE_SOURCE\n#define DUP_HANDLE_SAME_ACCESS   DUPLICATE_SAME_ACCESS\n#define DUP_HANDLE_MAKE_GLOBAL   0x80000000\n\n\n\nstruct open_process_request\n{\n    struct request_header __header;\n    process_id_t pid;\n    unsigned int access;\n    unsigned int attributes;\n};\nstruct open_process_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct open_thread_request\n{\n    struct request_header __header;\n    thread_id_t  tid;\n    unsigned int access;\n    unsigned int attributes;\n};\nstruct open_thread_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct select_request\n{\n    struct request_header __header;\n    int          flags;\n    client_ptr_t cookie;\n    timeout_t    timeout;\n    obj_handle_t prev_apc;\n    /* VARARG(result,apc_result); */\n    /* VARARG(data,select_op); */\n    char __pad_36[4];\n};\nstruct select_reply\n{\n    struct reply_header __header;\n    timeout_t    timeout;\n    apc_call_t   call;\n    obj_handle_t apc_handle;\n    char __pad_60[4];\n};\n#define SELECT_ALERTABLE     1\n#define SELECT_INTERRUPTIBLE 2\n\n\n\nstruct create_event_request\n{\n    struct request_header __header;\n    unsigned int access;\n    int          manual_reset;\n    int          initial_state;\n    /* VARARG(objattr,object_attributes); */\n};\nstruct create_event_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\nstruct event_op_request\n{\n    struct request_header __header;\n    obj_handle_t  handle;\n    int           op;\n    char __pad_20[4];\n};\nstruct event_op_reply\n{\n    struct reply_header __header;\n};\nenum event_op { PULSE_EVENT, SET_EVENT, RESET_EVENT };\n\nstruct query_event_request\n{\n    struct request_header __header;\n    obj_handle_t  handle;\n};\nstruct query_event_reply\n{\n    struct reply_header __header;\n    int          manual_reset;\n    int          state;\n};\n\n\nstruct open_event_request\n{\n    struct request_header __header;\n    unsigned int access;\n    unsigned int attributes;\n    obj_handle_t rootdir;\n    /* VARARG(name,unicode_str); */\n};\nstruct open_event_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct create_keyed_event_request\n{\n    struct request_header __header;\n    unsigned int access;\n    /* VARARG(objattr,object_attributes); */\n};\nstruct create_keyed_event_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\nstruct open_keyed_event_request\n{\n    struct request_header __header;\n    unsigned int access;\n    unsigned int attributes;\n    obj_handle_t rootdir;\n    /* VARARG(name,unicode_str); */\n};\nstruct open_keyed_event_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct create_mutex_request\n{\n    struct request_header __header;\n    unsigned int access;\n    int          owned;\n    /* VARARG(objattr,object_attributes); */\n    char __pad_20[4];\n};\nstruct create_mutex_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct release_mutex_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct release_mutex_reply\n{\n    struct reply_header __header;\n    unsigned int prev_count;\n    char __pad_12[4];\n};\n\n\n\nstruct open_mutex_request\n{\n    struct request_header __header;\n    unsigned int access;\n    unsigned int attributes;\n    obj_handle_t rootdir;\n    /* VARARG(name,unicode_str); */\n};\nstruct open_mutex_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct query_mutex_request\n{\n    struct request_header __header;\n    obj_handle_t  handle;\n};\nstruct query_mutex_reply\n{\n    struct reply_header __header;\n    unsigned int count;\n    int          owned;\n    int          abandoned;\n    char __pad_20[4];\n};\n\n\n\nstruct create_semaphore_request\n{\n    struct request_header __header;\n    unsigned int access;\n    unsigned int initial;\n    unsigned int max;\n    /* VARARG(objattr,object_attributes); */\n};\nstruct create_semaphore_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct release_semaphore_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    unsigned int count;\n    char __pad_20[4];\n};\nstruct release_semaphore_reply\n{\n    struct reply_header __header;\n    unsigned int prev_count;\n    char __pad_12[4];\n};\n\nstruct query_semaphore_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct query_semaphore_reply\n{\n    struct reply_header __header;\n    unsigned int current;\n    unsigned int max;\n};\n\n\nstruct open_semaphore_request\n{\n    struct request_header __header;\n    unsigned int access;\n    unsigned int attributes;\n    obj_handle_t rootdir;\n    /* VARARG(name,unicode_str); */\n};\nstruct open_semaphore_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct create_file_request\n{\n    struct request_header __header;\n    unsigned int access;\n    unsigned int sharing;\n    int          create;\n    unsigned int options;\n    unsigned int attrs;\n    /* VARARG(objattr,object_attributes); */\n    /* VARARG(filename,string); */\n};\nstruct create_file_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct open_file_object_request\n{\n    struct request_header __header;\n    unsigned int access;\n    unsigned int attributes;\n    obj_handle_t rootdir;\n    unsigned int sharing;\n    unsigned int options;\n    /* VARARG(filename,unicode_str); */\n};\nstruct open_file_object_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct alloc_file_handle_request\n{\n    struct request_header __header;\n    unsigned int access;\n    unsigned int attributes;\n    int          fd;\n};\nstruct alloc_file_handle_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct get_handle_unix_name_request\n{\n    struct request_header __header;\n    obj_handle_t   handle;\n};\nstruct get_handle_unix_name_reply\n{\n    struct reply_header __header;\n    data_size_t    name_len;\n    /* VARARG(name,string); */\n    char __pad_12[4];\n};\n\n\n\nstruct get_handle_fd_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct get_handle_fd_reply\n{\n    struct reply_header __header;\n    int          type;\n    int          cacheable;\n    unsigned int access;\n    unsigned int options;\n};\nenum server_fd_type\n{\n    FD_TYPE_INVALID,\n    FD_TYPE_FILE,\n    FD_TYPE_DIR,\n    FD_TYPE_SOCKET,\n    FD_TYPE_SERIAL,\n    FD_TYPE_PIPE,\n    FD_TYPE_MAILSLOT,\n    FD_TYPE_CHAR,\n    FD_TYPE_DEVICE,\n    FD_TYPE_NB_TYPES\n};\n\n\n\nstruct get_directory_cache_entry_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct get_directory_cache_entry_reply\n{\n    struct reply_header __header;\n    int          entry;\n    /* VARARG(free,ints); */\n    char __pad_12[4];\n};\n\n\n\nstruct flush_request\n{\n    struct request_header __header;\n    char __pad_12[4];\n    async_data_t   async;\n};\nstruct flush_reply\n{\n    struct reply_header __header;\n    obj_handle_t event;\n    char __pad_12[4];\n};\n\n\nstruct get_file_info_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    unsigned int info_class;\n    char __pad_20[4];\n};\nstruct get_file_info_reply\n{\n    struct reply_header __header;\n    /* VARARG(data,bytes); */\n};\n\n\nstruct get_volume_info_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    unsigned int info_class;\n    char __pad_20[4];\n};\nstruct get_volume_info_reply\n{\n    struct reply_header __header;\n    /* VARARG(data,bytes); */\n};\n\n\nstruct lock_file_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    file_pos_t   offset;\n    file_pos_t   count;\n    int          shared;\n    int          wait;\n};\nstruct lock_file_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    int          overlapped;\n};\n\n\n\nstruct unlock_file_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    file_pos_t   offset;\n    file_pos_t   count;\n};\nstruct unlock_file_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct create_socket_request\n{\n    struct request_header __header;\n    unsigned int access;\n    unsigned int attributes;\n    int          family;\n    int          type;\n    int          protocol;\n    unsigned int flags;\n    char __pad_36[4];\n};\nstruct create_socket_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct accept_socket_request\n{\n    struct request_header __header;\n    obj_handle_t lhandle;\n    unsigned int access;\n    unsigned int attributes;\n};\nstruct accept_socket_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct accept_into_socket_request\n{\n    struct request_header __header;\n    obj_handle_t lhandle;\n    obj_handle_t ahandle;\n    char __pad_20[4];\n};\nstruct accept_into_socket_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct set_socket_event_request\n{\n    struct request_header __header;\n    obj_handle_t  handle;\n    unsigned int  mask;\n    obj_handle_t  event;\n    user_handle_t window;\n    unsigned int  msg;\n};\nstruct set_socket_event_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct get_socket_event_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    int          service;\n    obj_handle_t c_event;\n};\nstruct get_socket_event_reply\n{\n    struct reply_header __header;\n    unsigned int mask;\n    unsigned int pmask;\n    unsigned int state;\n    /* VARARG(errors,ints); */\n    char __pad_20[4];\n};\n\n\n\nstruct get_socket_info_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct get_socket_info_reply\n{\n    struct reply_header __header;\n    int family;\n    int type;\n    int protocol;\n    char __pad_20[4];\n};\n\n\n\nstruct enable_socket_event_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    unsigned int mask;\n    unsigned int sstate;\n    unsigned int cstate;\n    char __pad_28[4];\n};\nstruct enable_socket_event_reply\n{\n    struct reply_header __header;\n};\n\nstruct set_socket_deferred_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    obj_handle_t deferred;\n    char __pad_20[4];\n};\nstruct set_socket_deferred_reply\n{\n    struct reply_header __header;\n};\n\n\nstruct alloc_console_request\n{\n    struct request_header __header;\n    unsigned int access;\n    unsigned int attributes;\n    process_id_t pid;\n    int          input_fd;\n    char __pad_28[4];\n};\nstruct alloc_console_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle_in;\n    obj_handle_t event;\n};\n\n\n\nstruct free_console_request\n{\n    struct request_header __header;\n    char __pad_12[4];\n};\nstruct free_console_reply\n{\n    struct reply_header __header;\n};\n\n\n#define CONSOLE_RENDERER_NONE_EVENT        0x00\n#define CONSOLE_RENDERER_TITLE_EVENT       0x01\n#define CONSOLE_RENDERER_ACTIVE_SB_EVENT   0x02\n#define CONSOLE_RENDERER_SB_RESIZE_EVENT   0x03\n#define CONSOLE_RENDERER_UPDATE_EVENT      0x04\n#define CONSOLE_RENDERER_CURSOR_POS_EVENT  0x05\n#define CONSOLE_RENDERER_CURSOR_GEOM_EVENT 0x06\n#define CONSOLE_RENDERER_DISPLAY_EVENT     0x07\n#define CONSOLE_RENDERER_EXIT_EVENT        0x08\nstruct console_renderer_event\n{\n    short event;\n    union\n    {\n        struct\n        {\n            short top;\n            short bottom;\n        } update;\n        struct\n        {\n            short width;\n            short height;\n        } resize;\n        struct\n        {\n            short x;\n            short y;\n        } cursor_pos;\n        struct\n        {\n            short visible;\n            short size;\n        } cursor_geom;\n        struct\n        {\n            short left;\n            short top;\n            short width;\n            short height;\n        } display;\n    } u;\n};\n\n\nstruct get_console_renderer_events_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct get_console_renderer_events_reply\n{\n    struct reply_header __header;\n    /* VARARG(data,bytes); */\n};\n\n\n\nstruct open_console_request\n{\n    struct request_header __header;\n    obj_handle_t from;\n\n    unsigned int access;\n    unsigned int attributes;\n    int          share;\n    char __pad_28[4];\n};\nstruct open_console_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct attach_console_request\n{\n    struct request_header __header;\n    process_id_t pid;\n};\nstruct attach_console_reply\n{\n    struct reply_header __header;\n    obj_handle_t std_in;\n    obj_handle_t std_out;\n    obj_handle_t std_err;\n    char __pad_20[4];\n};\n\n\n\nstruct get_console_wait_event_request\n{\n    struct request_header __header;\n    char __pad_12[4];\n};\nstruct get_console_wait_event_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\nstruct get_console_mode_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct get_console_mode_reply\n{\n    struct reply_header __header;\n    int          mode;\n    char __pad_12[4];\n};\n\n\n\nstruct set_console_mode_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    int          mode;\n    char __pad_20[4];\n};\nstruct set_console_mode_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct set_console_input_info_request\n{\n    struct request_header __header;\n    obj_handle_t  handle;\n    int           mask;\n    obj_handle_t  active_sb;\n    int           history_mode;\n    int           history_size;\n    int           edition_mode;\n    int           input_cp;\n    int           output_cp;\n    user_handle_t win;\n    /* VARARG(title,unicode_str); */\n};\nstruct set_console_input_info_reply\n{\n    struct reply_header __header;\n};\n#define SET_CONSOLE_INPUT_INFO_ACTIVE_SB        0x01\n#define SET_CONSOLE_INPUT_INFO_TITLE            0x02\n#define SET_CONSOLE_INPUT_INFO_HISTORY_MODE     0x04\n#define SET_CONSOLE_INPUT_INFO_HISTORY_SIZE     0x08\n#define SET_CONSOLE_INPUT_INFO_EDITION_MODE     0x10\n#define SET_CONSOLE_INPUT_INFO_INPUT_CODEPAGE   0x20\n#define SET_CONSOLE_INPUT_INFO_OUTPUT_CODEPAGE  0x40\n#define SET_CONSOLE_INPUT_INFO_WIN              0x80\n\n\n\nstruct get_console_input_info_request\n{\n    struct request_header __header;\n    obj_handle_t  handle;\n};\nstruct get_console_input_info_reply\n{\n    struct reply_header __header;\n    int           history_mode;\n    int           history_size;\n    int           history_index;\n    int           edition_mode;\n    int           input_cp;\n    int           output_cp;\n    user_handle_t win;\n    /* VARARG(title,unicode_str); */\n    char __pad_36[4];\n};\n\n\n\nstruct append_console_input_history_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    /* VARARG(line,unicode_str); */\n};\nstruct append_console_input_history_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct get_console_input_history_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    int          index;\n    char __pad_20[4];\n};\nstruct get_console_input_history_reply\n{\n    struct reply_header __header;\n    int          total;\n    /* VARARG(line,unicode_str); */\n    char __pad_12[4];\n};\n\n\n\nstruct create_console_output_request\n{\n    struct request_header __header;\n    obj_handle_t handle_in;\n    unsigned int access;\n    unsigned int attributes;\n    unsigned int share;\n    int          fd;\n};\nstruct create_console_output_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle_out;\n    char __pad_12[4];\n};\n\n\n\nstruct set_console_output_info_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    int          mask;\n    short int    cursor_size;\n    short int    cursor_visible;\n    short int    cursor_x;\n    short int    cursor_y;\n    short int    width;\n    short int    height;\n    short int    attr;\n    short int    popup_attr;\n    short int    win_left;\n    short int    win_top;\n    short int    win_right;\n    short int    win_bottom;\n    short int    max_width;\n    short int    max_height;\n    short int    font_width;\n    short int    font_height;\n    /* VARARG(colors,uints); */\n    char __pad_52[4];\n};\nstruct set_console_output_info_reply\n{\n    struct reply_header __header;\n};\n#define SET_CONSOLE_OUTPUT_INFO_CURSOR_GEOM     0x0001\n#define SET_CONSOLE_OUTPUT_INFO_CURSOR_POS      0x0002\n#define SET_CONSOLE_OUTPUT_INFO_SIZE            0x0004\n#define SET_CONSOLE_OUTPUT_INFO_ATTR            0x0008\n#define SET_CONSOLE_OUTPUT_INFO_DISPLAY_WINDOW  0x0010\n#define SET_CONSOLE_OUTPUT_INFO_MAX_SIZE        0x0020\n#define SET_CONSOLE_OUTPUT_INFO_FONT            0x0040\n#define SET_CONSOLE_OUTPUT_INFO_COLORTABLE      0x0080\n#define SET_CONSOLE_OUTPUT_INFO_POPUP_ATTR      0x0100\n\n\n\nstruct get_console_output_info_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct get_console_output_info_reply\n{\n    struct reply_header __header;\n    short int    cursor_size;\n    short int    cursor_visible;\n    short int    cursor_x;\n    short int    cursor_y;\n    short int    width;\n    short int    height;\n    short int    attr;\n    short int    popup_attr;\n    short int    win_left;\n    short int    win_top;\n    short int    win_right;\n    short int    win_bottom;\n    short int    max_width;\n    short int    max_height;\n    short int    font_width;\n    short int    font_height;\n    /* VARARG(colors,uints); */\n};\n\n\nstruct write_console_input_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    /* VARARG(rec,input_records); */\n};\nstruct write_console_input_reply\n{\n    struct reply_header __header;\n    int          written;\n    char __pad_12[4];\n};\n\n\n\nstruct read_console_input_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    int          flush;\n    char __pad_20[4];\n};\nstruct read_console_input_reply\n{\n    struct reply_header __header;\n    int          read;\n    /* VARARG(rec,input_records); */\n    char __pad_12[4];\n};\n\n\n\nstruct write_console_output_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    int          x;\n    int          y;\n    int          mode;\n    int          wrap;\n    /* VARARG(data,bytes); */\n};\nstruct write_console_output_reply\n{\n    struct reply_header __header;\n    int          written;\n    int          width;\n    int          height;\n    char __pad_20[4];\n};\nenum char_info_mode\n{\n    CHAR_INFO_MODE_TEXT,\n    CHAR_INFO_MODE_ATTR,\n    CHAR_INFO_MODE_TEXTATTR,\n    CHAR_INFO_MODE_TEXTSTDATTR\n};\n\n\n\nstruct fill_console_output_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    int          x;\n    int          y;\n    int          mode;\n    int          count;\n    int          wrap;\n    char_info_t  data;\n};\nstruct fill_console_output_reply\n{\n    struct reply_header __header;\n    int          written;\n    char __pad_12[4];\n};\n\n\n\nstruct read_console_output_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    int          x;\n    int          y;\n    int          mode;\n    int          wrap;\n};\nstruct read_console_output_reply\n{\n    struct reply_header __header;\n    int          width;\n    int          height;\n    /* VARARG(data,bytes); */\n};\n\n\n\nstruct move_console_output_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    short int    x_src;\n    short int    y_src;\n    short int    x_dst;\n    short int    y_dst;\n    short int    w;\n    short int    h;\n    char __pad_28[4];\n};\nstruct move_console_output_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct send_console_signal_request\n{\n    struct request_header __header;\n    int          signal;\n    process_id_t group_id;\n    char __pad_20[4];\n};\nstruct send_console_signal_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct read_directory_changes_request\n{\n    struct request_header __header;\n    unsigned int filter;\n    int          subtree;\n    int          want_data;\n    async_data_t async;\n};\nstruct read_directory_changes_reply\n{\n    struct reply_header __header;\n};\n\n\nstruct read_change_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct read_change_reply\n{\n    struct reply_header __header;\n    /* VARARG(events,filesystem_event); */\n};\n\n\n\nstruct create_mapping_request\n{\n    struct request_header __header;\n    unsigned int access;\n    unsigned int flags;\n    unsigned int file_access;\n    mem_size_t   size;\n    obj_handle_t file_handle;\n    /* VARARG(objattr,object_attributes); */\n    char __pad_36[4];\n};\nstruct create_mapping_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct open_mapping_request\n{\n    struct request_header __header;\n    unsigned int access;\n    unsigned int attributes;\n    obj_handle_t rootdir;\n    /* VARARG(name,unicode_str); */\n};\nstruct open_mapping_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct get_mapping_info_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    unsigned int access;\n    char __pad_20[4];\n};\nstruct get_mapping_info_reply\n{\n    struct reply_header __header;\n    mem_size_t   size;\n    unsigned int flags;\n    obj_handle_t shared_file;\n    /* VARARG(image,pe_image_info); */\n};\n\n\n\nstruct map_view_request\n{\n    struct request_header __header;\n    obj_handle_t mapping;\n    unsigned int access;\n    char __pad_20[4];\n    client_ptr_t base;\n    mem_size_t   size;\n    file_pos_t   start;\n};\nstruct map_view_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct unmap_view_request\n{\n    struct request_header __header;\n    char __pad_12[4];\n    client_ptr_t base;\n};\nstruct unmap_view_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct get_mapping_committed_range_request\n{\n    struct request_header __header;\n    char __pad_12[4];\n    client_ptr_t base;\n    file_pos_t   offset;\n};\nstruct get_mapping_committed_range_reply\n{\n    struct reply_header __header;\n    mem_size_t   size;\n    int          committed;\n    char __pad_20[4];\n};\n\n\n\nstruct add_mapping_committed_range_request\n{\n    struct request_header __header;\n    char __pad_12[4];\n    client_ptr_t base;\n    file_pos_t   offset;\n    mem_size_t   size;\n};\nstruct add_mapping_committed_range_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct is_same_mapping_request\n{\n    struct request_header __header;\n    char __pad_12[4];\n    client_ptr_t base1;\n    client_ptr_t base2;\n};\nstruct is_same_mapping_reply\n{\n    struct reply_header __header;\n};\n\n\n#define SNAP_PROCESS    0x00000001\n#define SNAP_THREAD     0x00000002\n\nstruct create_snapshot_request\n{\n    struct request_header __header;\n    unsigned int attributes;\n    unsigned int flags;\n    char __pad_20[4];\n};\nstruct create_snapshot_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct next_process_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    int          reset;\n    char __pad_20[4];\n};\nstruct next_process_reply\n{\n    struct reply_header __header;\n    int          count;\n    process_id_t pid;\n    process_id_t ppid;\n    int          threads;\n    int          priority;\n    int          handles;\n    int          unix_pid;\n    /* VARARG(filename,unicode_str); */\n    char __pad_36[4];\n};\n\n\n\nstruct next_thread_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    int          reset;\n    char __pad_20[4];\n};\nstruct next_thread_reply\n{\n    struct reply_header __header;\n    int          count;\n    process_id_t pid;\n    thread_id_t  tid;\n    int          base_pri;\n    int          delta_pri;\n    char __pad_28[4];\n};\n\n\n\nstruct wait_debug_event_request\n{\n    struct request_header __header;\n    int           get_handle;\n};\nstruct wait_debug_event_reply\n{\n    struct reply_header __header;\n    process_id_t  pid;\n    thread_id_t   tid;\n    obj_handle_t  wait;\n    /* VARARG(event,debug_event); */\n    char __pad_20[4];\n};\n\n\n\nstruct queue_exception_event_request\n{\n    struct request_header __header;\n    int           first;\n    unsigned int  code;\n    unsigned int  flags;\n    client_ptr_t  record;\n    client_ptr_t  address;\n    data_size_t   len;\n    /* VARARG(params,uints64,len); */\n    /* VARARG(context,context); */\n    char __pad_44[4];\n};\nstruct queue_exception_event_reply\n{\n    struct reply_header __header;\n    obj_handle_t     handle;\n    char __pad_12[4];\n};\n\n\n\nstruct get_exception_status_request\n{\n    struct request_header __header;\n    obj_handle_t     handle;\n};\nstruct get_exception_status_reply\n{\n    struct reply_header __header;\n    /* VARARG(context,context); */\n};\n\n\n\nstruct continue_debug_event_request\n{\n    struct request_header __header;\n    process_id_t pid;\n    thread_id_t  tid;\n    int          status;\n};\nstruct continue_debug_event_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct debug_process_request\n{\n    struct request_header __header;\n    process_id_t pid;\n    int          attach;\n    char __pad_20[4];\n};\nstruct debug_process_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct debug_break_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct debug_break_reply\n{\n    struct reply_header __header;\n    int          self;\n    char __pad_12[4];\n};\n\n\n\nstruct set_debugger_kill_on_exit_request\n{\n    struct request_header __header;\n    int          kill_on_exit;\n};\nstruct set_debugger_kill_on_exit_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct read_process_memory_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    client_ptr_t addr;\n};\nstruct read_process_memory_reply\n{\n    struct reply_header __header;\n    /* VARARG(data,bytes); */\n};\n\n\n\nstruct write_process_memory_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    client_ptr_t addr;\n    /* VARARG(data,bytes); */\n};\nstruct write_process_memory_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct create_key_request\n{\n    struct request_header __header;\n    unsigned int access;\n    unsigned int options;\n    /* VARARG(objattr,object_attributes); */\n    /* VARARG(class,unicode_str); */\n    char __pad_20[4];\n};\nstruct create_key_reply\n{\n    struct reply_header __header;\n    obj_handle_t hkey;\n    int          created;\n};\n\n\nstruct open_key_request\n{\n    struct request_header __header;\n    obj_handle_t parent;\n    unsigned int access;\n    unsigned int attributes;\n    /* VARARG(name,unicode_str); */\n};\nstruct open_key_reply\n{\n    struct reply_header __header;\n    obj_handle_t hkey;\n    char __pad_12[4];\n};\n\n\n\nstruct delete_key_request\n{\n    struct request_header __header;\n    obj_handle_t hkey;\n};\nstruct delete_key_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct flush_key_request\n{\n    struct request_header __header;\n    obj_handle_t hkey;\n};\nstruct flush_key_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct enum_key_request\n{\n    struct request_header __header;\n    obj_handle_t hkey;\n    int          index;\n    int          info_class;\n};\nstruct enum_key_reply\n{\n    struct reply_header __header;\n    int          subkeys;\n    int          max_subkey;\n    int          max_class;\n    int          values;\n    int          max_value;\n    int          max_data;\n    timeout_t    modif;\n    data_size_t  total;\n    data_size_t  namelen;\n    /* VARARG(name,unicode_str,namelen); */\n    /* VARARG(class,unicode_str); */\n};\n\n\n\nstruct set_key_value_request\n{\n    struct request_header __header;\n    obj_handle_t hkey;\n    int          type;\n    data_size_t  namelen;\n    /* VARARG(name,unicode_str,namelen); */\n    /* VARARG(data,bytes); */\n};\nstruct set_key_value_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct get_key_value_request\n{\n    struct request_header __header;\n    obj_handle_t hkey;\n    /* VARARG(name,unicode_str); */\n};\nstruct get_key_value_reply\n{\n    struct reply_header __header;\n    int          type;\n    data_size_t  total;\n    /* VARARG(data,bytes); */\n};\n\n\n\nstruct enum_key_value_request\n{\n    struct request_header __header;\n    obj_handle_t hkey;\n    int          index;\n    int          info_class;\n};\nstruct enum_key_value_reply\n{\n    struct reply_header __header;\n    int          type;\n    data_size_t  total;\n    data_size_t  namelen;\n    /* VARARG(name,unicode_str,namelen); */\n    /* VARARG(data,bytes); */\n    char __pad_20[4];\n};\n\n\n\nstruct delete_key_value_request\n{\n    struct request_header __header;\n    obj_handle_t hkey;\n    /* VARARG(name,unicode_str); */\n};\nstruct delete_key_value_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct load_registry_request\n{\n    struct request_header __header;\n    obj_handle_t file;\n    /* VARARG(objattr,object_attributes); */\n};\nstruct load_registry_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct unload_registry_request\n{\n    struct request_header __header;\n    obj_handle_t hkey;\n};\nstruct unload_registry_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct save_registry_request\n{\n    struct request_header __header;\n    obj_handle_t hkey;\n    obj_handle_t file;\n    char __pad_20[4];\n};\nstruct save_registry_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct set_registry_notification_request\n{\n    struct request_header __header;\n    obj_handle_t hkey;\n    obj_handle_t event;\n    int          subtree;\n    unsigned int filter;\n    char __pad_28[4];\n};\nstruct set_registry_notification_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct create_timer_request\n{\n    struct request_header __header;\n    unsigned int access;\n    int          manual;\n    /* VARARG(objattr,object_attributes); */\n    char __pad_20[4];\n};\nstruct create_timer_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct open_timer_request\n{\n    struct request_header __header;\n    unsigned int access;\n    unsigned int attributes;\n    obj_handle_t rootdir;\n    /* VARARG(name,unicode_str); */\n};\nstruct open_timer_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\nstruct set_timer_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    timeout_t    expire;\n    client_ptr_t callback;\n    client_ptr_t arg;\n    int          period;\n    char __pad_44[4];\n};\nstruct set_timer_reply\n{\n    struct reply_header __header;\n    int          signaled;\n    char __pad_12[4];\n};\n\n\nstruct cancel_timer_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct cancel_timer_reply\n{\n    struct reply_header __header;\n     int         signaled;\n    char __pad_12[4];\n};\n\n\nstruct get_timer_info_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct get_timer_info_reply\n{\n    struct reply_header __header;\n    timeout_t    when;\n    int          signaled;\n    char __pad_20[4];\n};\n\n\n\nstruct get_thread_context_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    unsigned int flags;\n    int          suspend;\n};\nstruct get_thread_context_reply\n{\n    struct reply_header __header;\n    int          self;\n    /* VARARG(context,context); */\n    char __pad_12[4];\n};\n\n\n\nstruct set_thread_context_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    int          suspend;\n    /* VARARG(context,context); */\n    char __pad_20[4];\n};\nstruct set_thread_context_reply\n{\n    struct reply_header __header;\n    int          self;\n    char __pad_12[4];\n};\n\n\n\nstruct get_selector_entry_request\n{\n    struct request_header __header;\n    obj_handle_t  handle;\n    int           entry;\n    char __pad_20[4];\n};\nstruct get_selector_entry_reply\n{\n    struct reply_header __header;\n    unsigned int  base;\n    unsigned int  limit;\n    unsigned char flags;\n    char __pad_17[7];\n};\n\n\n\nstruct add_atom_request\n{\n    struct request_header __header;\n    obj_handle_t  table;\n    /* VARARG(name,unicode_str); */\n};\nstruct add_atom_reply\n{\n    struct reply_header __header;\n    atom_t        atom;\n    char __pad_12[4];\n};\n\n\n\nstruct delete_atom_request\n{\n    struct request_header __header;\n    obj_handle_t  table;\n    atom_t        atom;\n    char __pad_20[4];\n};\nstruct delete_atom_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct find_atom_request\n{\n    struct request_header __header;\n    obj_handle_t table;\n    /* VARARG(name,unicode_str); */\n};\nstruct find_atom_reply\n{\n    struct reply_header __header;\n    atom_t       atom;\n    char __pad_12[4];\n};\n\n\n\nstruct get_atom_information_request\n{\n    struct request_header __header;\n    obj_handle_t table;\n    atom_t       atom;\n    char __pad_20[4];\n};\nstruct get_atom_information_reply\n{\n    struct reply_header __header;\n    int          count;\n    int          pinned;\n    data_size_t  total;\n    /* VARARG(name,unicode_str); */\n    char __pad_20[4];\n};\n\n\n\nstruct set_atom_information_request\n{\n    struct request_header __header;\n    obj_handle_t table;\n    atom_t       atom;\n    int          pinned;\n};\nstruct set_atom_information_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct empty_atom_table_request\n{\n    struct request_header __header;\n    obj_handle_t table;\n    int          if_pinned;\n    char __pad_20[4];\n};\nstruct empty_atom_table_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct init_atom_table_request\n{\n    struct request_header __header;\n    int          entries;\n};\nstruct init_atom_table_reply\n{\n    struct reply_header __header;\n    obj_handle_t table;\n    char __pad_12[4];\n};\n\n\n\nstruct get_msg_queue_request\n{\n    struct request_header __header;\n    char __pad_12[4];\n};\nstruct get_msg_queue_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct set_queue_fd_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct set_queue_fd_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct set_queue_mask_request\n{\n    struct request_header __header;\n    unsigned int wake_mask;\n    unsigned int changed_mask;\n    int          skip_wait;\n};\nstruct set_queue_mask_reply\n{\n    struct reply_header __header;\n    unsigned int wake_bits;\n    unsigned int changed_bits;\n};\n\n\n\nstruct get_queue_status_request\n{\n    struct request_header __header;\n    unsigned int clear_bits;\n};\nstruct get_queue_status_reply\n{\n    struct reply_header __header;\n    unsigned int wake_bits;\n    unsigned int changed_bits;\n};\n\n\n\nstruct get_process_idle_event_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct get_process_idle_event_reply\n{\n    struct reply_header __header;\n    obj_handle_t event;\n    char __pad_12[4];\n};\n\n\n\nstruct send_message_request\n{\n    struct request_header __header;\n    thread_id_t     id;\n    int             type;\n    int             flags;\n    user_handle_t   win;\n    unsigned int    msg;\n    lparam_t        wparam;\n    lparam_t        lparam;\n    timeout_t       timeout;\n    /* VARARG(data,message_data); */\n};\nstruct send_message_reply\n{\n    struct reply_header __header;\n};\n\nstruct post_quit_message_request\n{\n    struct request_header __header;\n    int             exit_code;\n};\nstruct post_quit_message_reply\n{\n    struct reply_header __header;\n};\n\nenum message_type\n{\n    MSG_ASCII,\n    MSG_UNICODE,\n    MSG_NOTIFY,\n    MSG_CALLBACK,\n    MSG_CALLBACK_RESULT,\n    MSG_OTHER_PROCESS,\n    MSG_POSTED,\n    MSG_HARDWARE,\n    MSG_WINEVENT,\n    MSG_HOOK_LL\n};\n#define SEND_MSG_ABORT_IF_HUNG  0x01\n\n\n\nstruct send_hardware_message_request\n{\n    struct request_header __header;\n    user_handle_t   win;\n    hw_input_t      input;\n    unsigned int    flags;\n    char __pad_52[4];\n};\nstruct send_hardware_message_reply\n{\n    struct reply_header __header;\n    int             wait;\n    int             prev_x;\n    int             prev_y;\n    int             new_x;\n    int             new_y;\n    /* VARARG(keystate,bytes); */\n    char __pad_28[4];\n};\n#define SEND_HWMSG_INJECTED    0x01\n\n\n\nstruct get_message_request\n{\n    struct request_header __header;\n    unsigned int    flags;\n    user_handle_t   get_win;\n    unsigned int    get_first;\n    unsigned int    get_last;\n    unsigned int    hw_id;\n    unsigned int    wake_mask;\n    unsigned int    changed_mask;\n};\nstruct get_message_reply\n{\n    struct reply_header __header;\n    user_handle_t   win;\n    unsigned int    msg;\n    lparam_t        wparam;\n    lparam_t        lparam;\n    int             type;\n    int             x;\n    int             y;\n    unsigned int    time;\n    unsigned int    active_hooks;\n    data_size_t     total;\n    /* VARARG(data,message_data); */\n};\n\n\n\nstruct reply_message_request\n{\n    struct request_header __header;\n    int             remove;\n    lparam_t        result;\n    /* VARARG(data,bytes); */\n};\nstruct reply_message_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct accept_hardware_message_request\n{\n    struct request_header __header;\n    unsigned int    hw_id;\n    int             remove;\n    char __pad_20[4];\n};\nstruct accept_hardware_message_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct get_message_reply_request\n{\n    struct request_header __header;\n    int             cancel;\n};\nstruct get_message_reply_reply\n{\n    struct reply_header __header;\n    lparam_t        result;\n    /* VARARG(data,bytes); */\n};\n\n\n\nstruct set_win_timer_request\n{\n    struct request_header __header;\n    user_handle_t   win;\n    unsigned int    msg;\n    unsigned int    rate;\n    lparam_t        id;\n    lparam_t        lparam;\n};\nstruct set_win_timer_reply\n{\n    struct reply_header __header;\n    lparam_t        id;\n};\n\n\n\nstruct kill_win_timer_request\n{\n    struct request_header __header;\n    user_handle_t   win;\n    lparam_t        id;\n    unsigned int    msg;\n    char __pad_28[4];\n};\nstruct kill_win_timer_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct is_window_hung_request\n{\n    struct request_header __header;\n    user_handle_t   win;\n};\nstruct is_window_hung_reply\n{\n    struct reply_header __header;\n    int is_hung;\n    char __pad_12[4];\n};\n\n\n\nstruct get_serial_info_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    int          flags;\n    char __pad_20[4];\n};\nstruct get_serial_info_reply\n{\n    struct reply_header __header;\n    unsigned int eventmask;\n    unsigned int cookie;\n    unsigned int pending_write;\n    char __pad_20[4];\n};\n\n\n\nstruct set_serial_info_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    int          flags;\n    char __pad_20[4];\n};\nstruct set_serial_info_reply\n{\n    struct reply_header __header;\n};\n#define SERIALINFO_PENDING_WRITE 0x04\n#define SERIALINFO_PENDING_WAIT  0x08\n\n\n\nstruct register_async_request\n{\n    struct request_header __header;\n    int          type;\n    async_data_t async;\n    int          count;\n    char __pad_60[4];\n};\nstruct register_async_reply\n{\n    struct reply_header __header;\n};\n#define ASYNC_TYPE_READ  0x01\n#define ASYNC_TYPE_WRITE 0x02\n#define ASYNC_TYPE_WAIT  0x03\n\n\n\nstruct cancel_async_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    client_ptr_t iosb;\n    int          only_thread;\n    char __pad_28[4];\n};\nstruct cancel_async_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct get_async_result_request\n{\n    struct request_header __header;\n    char __pad_12[4];\n    client_ptr_t   user_arg;\n};\nstruct get_async_result_reply\n{\n    struct reply_header __header;\n    data_size_t    size;\n    /* VARARG(out_data,bytes); */\n    char __pad_12[4];\n};\n\n\n\nstruct read_request\n{\n    struct request_header __header;\n    char __pad_12[4];\n    async_data_t   async;\n    file_pos_t     pos;\n};\nstruct read_reply\n{\n    struct reply_header __header;\n    obj_handle_t   wait;\n    unsigned int   options;\n    /* VARARG(data,bytes); */\n};\n\n\n\nstruct write_request\n{\n    struct request_header __header;\n    char __pad_12[4];\n    async_data_t   async;\n    file_pos_t     pos;\n    /* VARARG(data,bytes); */\n};\nstruct write_reply\n{\n    struct reply_header __header;\n    obj_handle_t   wait;\n    unsigned int   options;\n    data_size_t    size;\n    char __pad_20[4];\n};\n\n\n\nstruct ioctl_request\n{\n    struct request_header __header;\n    ioctl_code_t   code;\n    async_data_t   async;\n    /* VARARG(in_data,bytes); */\n};\nstruct ioctl_reply\n{\n    struct reply_header __header;\n    obj_handle_t   wait;\n    unsigned int   options;\n    /* VARARG(out_data,bytes); */\n};\n\n\n\nstruct set_irp_result_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    unsigned int status;\n    data_size_t  size;\n    client_ptr_t file_ptr;\n    /* VARARG(data,bytes); */\n};\nstruct set_irp_result_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct create_named_pipe_request\n{\n    struct request_header __header;\n    unsigned int   access;\n    unsigned int   options;\n    unsigned int   sharing;\n    unsigned int   maxinstances;\n    unsigned int   outsize;\n    unsigned int   insize;\n    char __pad_36[4];\n    timeout_t      timeout;\n    unsigned int   flags;\n    /* VARARG(objattr,object_attributes); */\n    char __pad_52[4];\n};\nstruct create_named_pipe_reply\n{\n    struct reply_header __header;\n    obj_handle_t   handle;\n    char __pad_12[4];\n};\n\n\n#define NAMED_PIPE_MESSAGE_STREAM_WRITE 0x0001\n#define NAMED_PIPE_MESSAGE_STREAM_READ  0x0002\n#define NAMED_PIPE_NONBLOCKING_MODE     0x0004\n#define NAMED_PIPE_SERVER_END           0x8000\n\n\nstruct get_named_pipe_info_request\n{\n    struct request_header __header;\n    obj_handle_t   handle;\n};\nstruct get_named_pipe_info_reply\n{\n    struct reply_header __header;\n    unsigned int   flags;\n    unsigned int   sharing;\n    unsigned int   maxinstances;\n    unsigned int   instances;\n    unsigned int   outsize;\n    unsigned int   insize;\n};\n\n\nstruct set_named_pipe_info_request\n{\n    struct request_header __header;\n    obj_handle_t   handle;\n    unsigned int   flags;\n    char __pad_20[4];\n};\nstruct set_named_pipe_info_reply\n{\n    struct reply_header __header;\n};\n\n\nstruct create_window_request\n{\n    struct request_header __header;\n    user_handle_t  parent;\n    user_handle_t  owner;\n    atom_t         atom;\n    mod_handle_t   instance;\n    int            dpi;\n    int            awareness;\n    /* VARARG(class,unicode_str); */\n};\nstruct create_window_reply\n{\n    struct reply_header __header;\n    user_handle_t  handle;\n    user_handle_t  parent;\n    user_handle_t  owner;\n    int            extra;\n    client_ptr_t   class_ptr;\n    int            dpi;\n    int            awareness;\n};\n\n\n\nstruct destroy_window_request\n{\n    struct request_header __header;\n    user_handle_t  handle;\n};\nstruct destroy_window_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct get_desktop_window_request\n{\n    struct request_header __header;\n    int            force;\n};\nstruct get_desktop_window_reply\n{\n    struct reply_header __header;\n    user_handle_t  top_window;\n    user_handle_t  msg_window;\n};\n\n\n\nstruct set_window_owner_request\n{\n    struct request_header __header;\n    user_handle_t  handle;\n    user_handle_t  owner;\n    char __pad_20[4];\n};\nstruct set_window_owner_reply\n{\n    struct reply_header __header;\n    user_handle_t  full_owner;\n    user_handle_t  prev_owner;\n};\n\n\n\nstruct get_window_info_request\n{\n    struct request_header __header;\n    user_handle_t  handle;\n};\nstruct get_window_info_reply\n{\n    struct reply_header __header;\n    user_handle_t  full_handle;\n    user_handle_t  last_active;\n    process_id_t   pid;\n    thread_id_t    tid;\n    atom_t         atom;\n    int            is_unicode;\n    int            dpi;\n    int            awareness;\n};\n\n\n\nstruct set_window_info_request\n{\n    struct request_header __header;\n    unsigned short flags;\n    short int      is_unicode;\n    user_handle_t  handle;\n    unsigned int   style;\n    unsigned int   ex_style;\n    unsigned int   id;\n    mod_handle_t   instance;\n    lparam_t       user_data;\n    int            extra_offset;\n    data_size_t    extra_size;\n    lparam_t       extra_value;\n};\nstruct set_window_info_reply\n{\n    struct reply_header __header;\n    unsigned int   old_style;\n    unsigned int   old_ex_style;\n    mod_handle_t   old_instance;\n    lparam_t       old_user_data;\n    lparam_t       old_extra_value;\n    unsigned int   old_id;\n    char __pad_44[4];\n};\n#define SET_WIN_STYLE     0x01\n#define SET_WIN_EXSTYLE   0x02\n#define SET_WIN_ID        0x04\n#define SET_WIN_INSTANCE  0x08\n#define SET_WIN_USERDATA  0x10\n#define SET_WIN_EXTRA     0x20\n#define SET_WIN_UNICODE   0x40\n\n\n\nstruct set_parent_request\n{\n    struct request_header __header;\n    user_handle_t  handle;\n    user_handle_t  parent;\n    char __pad_20[4];\n};\nstruct set_parent_reply\n{\n    struct reply_header __header;\n    user_handle_t  old_parent;\n    user_handle_t  full_parent;\n    int            dpi;\n    int            awareness;\n};\n\n\n\nstruct get_window_parents_request\n{\n    struct request_header __header;\n    user_handle_t  handle;\n};\nstruct get_window_parents_reply\n{\n    struct reply_header __header;\n    int            count;\n    /* VARARG(parents,user_handles); */\n    char __pad_12[4];\n};\n\n\n\nstruct get_window_children_request\n{\n    struct request_header __header;\n    obj_handle_t   desktop;\n    user_handle_t  parent;\n    atom_t         atom;\n    thread_id_t    tid;\n    /* VARARG(class,unicode_str); */\n    char __pad_28[4];\n};\nstruct get_window_children_reply\n{\n    struct reply_header __header;\n    int            count;\n    /* VARARG(children,user_handles); */\n    char __pad_12[4];\n};\n\n\n\nstruct get_window_children_from_point_request\n{\n    struct request_header __header;\n    user_handle_t  parent;\n    int            x;\n    int            y;\n    int            dpi;\n    char __pad_28[4];\n};\nstruct get_window_children_from_point_reply\n{\n    struct reply_header __header;\n    int            count;\n    /* VARARG(children,user_handles); */\n    char __pad_12[4];\n};\n\n\n\nstruct get_window_tree_request\n{\n    struct request_header __header;\n    user_handle_t  handle;\n};\nstruct get_window_tree_reply\n{\n    struct reply_header __header;\n    user_handle_t  parent;\n    user_handle_t  owner;\n    user_handle_t  next_sibling;\n    user_handle_t  prev_sibling;\n    user_handle_t  first_sibling;\n    user_handle_t  last_sibling;\n    user_handle_t  first_child;\n    user_handle_t  last_child;\n};\n\n\nstruct set_window_pos_request\n{\n    struct request_header __header;\n    unsigned short swp_flags;\n    unsigned short paint_flags;\n    user_handle_t  handle;\n    user_handle_t  previous;\n    rectangle_t    window;\n    rectangle_t    client;\n    /* VARARG(valid,rectangles); */\n};\nstruct set_window_pos_reply\n{\n    struct reply_header __header;\n    unsigned int   new_style;\n    unsigned int   new_ex_style;\n    user_handle_t  surface_win;\n    int            needs_update;\n};\n#define SET_WINPOS_PAINT_SURFACE 0x01\n#define SET_WINPOS_PIXEL_FORMAT  0x02\n\n\nstruct get_window_rectangles_request\n{\n    struct request_header __header;\n    user_handle_t  handle;\n    int            relative;\n    int            dpi;\n};\nstruct get_window_rectangles_reply\n{\n    struct reply_header __header;\n    rectangle_t    window;\n    rectangle_t    client;\n};\nenum coords_relative\n{\n    COORDS_CLIENT,\n    COORDS_WINDOW,\n    COORDS_PARENT,\n    COORDS_SCREEN\n};\n\n\n\nstruct get_window_text_request\n{\n    struct request_header __header;\n    user_handle_t  handle;\n};\nstruct get_window_text_reply\n{\n    struct reply_header __header;\n    data_size_t    length;\n    /* VARARG(text,unicode_str); */\n    char __pad_12[4];\n};\n\n\n\nstruct set_window_text_request\n{\n    struct request_header __header;\n    user_handle_t  handle;\n    /* VARARG(text,unicode_str); */\n};\nstruct set_window_text_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct get_windows_offset_request\n{\n    struct request_header __header;\n    user_handle_t  from;\n    user_handle_t  to;\n    int            dpi;\n};\nstruct get_windows_offset_reply\n{\n    struct reply_header __header;\n    int            x;\n    int            y;\n    int            mirror;\n    char __pad_20[4];\n};\n\n\n\nstruct get_visible_region_request\n{\n    struct request_header __header;\n    user_handle_t  window;\n    unsigned int   flags;\n    char __pad_20[4];\n};\nstruct get_visible_region_reply\n{\n    struct reply_header __header;\n    user_handle_t  top_win;\n    rectangle_t    top_rect;\n    rectangle_t    win_rect;\n    unsigned int   paint_flags;\n    data_size_t    total_size;\n    /* VARARG(region,rectangles); */\n    char __pad_52[4];\n};\n\n\n\nstruct get_surface_region_request\n{\n    struct request_header __header;\n    user_handle_t  window;\n};\nstruct get_surface_region_reply\n{\n    struct reply_header __header;\n    rectangle_t    visible_rect;\n    data_size_t    total_size;\n    /* VARARG(region,rectangles); */\n    char __pad_28[4];\n};\n\n\n\nstruct get_window_region_request\n{\n    struct request_header __header;\n    user_handle_t  window;\n};\nstruct get_window_region_reply\n{\n    struct reply_header __header;\n    data_size_t    total_size;\n    /* VARARG(region,rectangles); */\n    char __pad_12[4];\n};\n\n\n\nstruct set_window_region_request\n{\n    struct request_header __header;\n    user_handle_t  window;\n    int            redraw;\n    /* VARARG(region,rectangles); */\n    char __pad_20[4];\n};\nstruct set_window_region_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct get_update_region_request\n{\n    struct request_header __header;\n    user_handle_t  window;\n    user_handle_t  from_child;\n    unsigned int   flags;\n};\nstruct get_update_region_reply\n{\n    struct reply_header __header;\n    user_handle_t  child;\n    unsigned int   flags;\n    data_size_t    total_size;\n    /* VARARG(region,rectangles); */\n    char __pad_20[4];\n};\n#define UPDATE_NONCLIENT       0x001\n#define UPDATE_ERASE           0x002\n#define UPDATE_PAINT           0x004\n#define UPDATE_INTERNALPAINT   0x008\n#define UPDATE_ALLCHILDREN     0x010\n#define UPDATE_NOCHILDREN      0x020\n#define UPDATE_NOREGION        0x040\n#define UPDATE_DELAYED_ERASE   0x080\n#define UPDATE_CLIPCHILDREN    0x100\n\n\n\nstruct update_window_zorder_request\n{\n    struct request_header __header;\n    user_handle_t  window;\n    rectangle_t    rect;\n};\nstruct update_window_zorder_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct redraw_window_request\n{\n    struct request_header __header;\n    user_handle_t  window;\n    unsigned int   flags;\n    /* VARARG(region,rectangles); */\n    char __pad_20[4];\n};\nstruct redraw_window_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct set_window_property_request\n{\n    struct request_header __header;\n    user_handle_t  window;\n    lparam_t       data;\n    atom_t         atom;\n    /* VARARG(name,unicode_str); */\n    char __pad_28[4];\n};\nstruct set_window_property_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct remove_window_property_request\n{\n    struct request_header __header;\n    user_handle_t  window;\n    atom_t         atom;\n    /* VARARG(name,unicode_str); */\n    char __pad_20[4];\n};\nstruct remove_window_property_reply\n{\n    struct reply_header __header;\n    lparam_t       data;\n};\n\n\n\nstruct get_window_property_request\n{\n    struct request_header __header;\n    user_handle_t  window;\n    atom_t         atom;\n    /* VARARG(name,unicode_str); */\n    char __pad_20[4];\n};\nstruct get_window_property_reply\n{\n    struct reply_header __header;\n    lparam_t       data;\n};\n\n\n\nstruct get_window_properties_request\n{\n    struct request_header __header;\n    user_handle_t  window;\n};\nstruct get_window_properties_reply\n{\n    struct reply_header __header;\n    int            total;\n    /* VARARG(props,properties); */\n    char __pad_12[4];\n};\n\n\n\nstruct create_winstation_request\n{\n    struct request_header __header;\n    unsigned int flags;\n    unsigned int access;\n    unsigned int attributes;\n    obj_handle_t rootdir;\n    /* VARARG(name,unicode_str); */\n    char __pad_28[4];\n};\nstruct create_winstation_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct open_winstation_request\n{\n    struct request_header __header;\n    unsigned int access;\n    unsigned int attributes;\n    obj_handle_t rootdir;\n    /* VARARG(name,unicode_str); */\n};\nstruct open_winstation_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct close_winstation_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct close_winstation_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct get_process_winstation_request\n{\n    struct request_header __header;\n    char __pad_12[4];\n};\nstruct get_process_winstation_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct set_process_winstation_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct set_process_winstation_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct enum_winstation_request\n{\n    struct request_header __header;\n    unsigned int index;\n};\nstruct enum_winstation_reply\n{\n    struct reply_header __header;\n    unsigned int next;\n    /* VARARG(name,unicode_str); */\n    char __pad_12[4];\n};\n\n\n\nstruct create_desktop_request\n{\n    struct request_header __header;\n    unsigned int flags;\n    unsigned int access;\n    unsigned int attributes;\n    /* VARARG(name,unicode_str); */\n};\nstruct create_desktop_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct open_desktop_request\n{\n    struct request_header __header;\n    obj_handle_t winsta;\n    unsigned int flags;\n    unsigned int access;\n    unsigned int attributes;\n    /* VARARG(name,unicode_str); */\n    char __pad_28[4];\n};\nstruct open_desktop_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct open_input_desktop_request\n{\n    struct request_header __header;\n    unsigned int flags;\n    unsigned int access;\n    unsigned int attributes;\n};\nstruct open_input_desktop_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct close_desktop_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct close_desktop_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct get_thread_desktop_request\n{\n    struct request_header __header;\n    thread_id_t  tid;\n};\nstruct get_thread_desktop_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct set_thread_desktop_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct set_thread_desktop_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct enum_desktop_request\n{\n    struct request_header __header;\n    obj_handle_t winstation;\n    unsigned int index;\n    char __pad_20[4];\n};\nstruct enum_desktop_reply\n{\n    struct reply_header __header;\n    unsigned int next;\n    /* VARARG(name,unicode_str); */\n    char __pad_12[4];\n};\n\n\n\nstruct set_user_object_info_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    unsigned int flags;\n    unsigned int obj_flags;\n};\nstruct set_user_object_info_reply\n{\n    struct reply_header __header;\n    int          is_desktop;\n    unsigned int old_obj_flags;\n    /* VARARG(name,unicode_str); */\n};\n#define SET_USER_OBJECT_SET_FLAGS       1\n#define SET_USER_OBJECT_GET_FULL_NAME   2\n\n\n\nstruct register_hotkey_request\n{\n    struct request_header __header;\n    user_handle_t  window;\n    int            id;\n    unsigned int   flags;\n    unsigned int   vkey;\n    char __pad_28[4];\n};\nstruct register_hotkey_reply\n{\n    struct reply_header __header;\n    int            replaced;\n    unsigned int   flags;\n    unsigned int   vkey;\n    char __pad_20[4];\n};\n\n\n\nstruct unregister_hotkey_request\n{\n    struct request_header __header;\n    user_handle_t  window;\n    int            id;\n    char __pad_20[4];\n};\nstruct unregister_hotkey_reply\n{\n    struct reply_header __header;\n    unsigned int   flags;\n    unsigned int   vkey;\n};\n\n\n\nstruct attach_thread_input_request\n{\n    struct request_header __header;\n    thread_id_t    tid_from;\n    thread_id_t    tid_to;\n    int            attach;\n};\nstruct attach_thread_input_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct get_thread_input_request\n{\n    struct request_header __header;\n    thread_id_t    tid;\n};\nstruct get_thread_input_reply\n{\n    struct reply_header __header;\n    user_handle_t  focus;\n    user_handle_t  capture;\n    user_handle_t  active;\n    user_handle_t  foreground;\n    user_handle_t  menu_owner;\n    user_handle_t  move_size;\n    user_handle_t  caret;\n    user_handle_t  cursor;\n    int            show_count;\n    rectangle_t    rect;\n    char __pad_60[4];\n};\n\n\n\nstruct get_last_input_time_request\n{\n    struct request_header __header;\n    char __pad_12[4];\n};\nstruct get_last_input_time_reply\n{\n    struct reply_header __header;\n    unsigned int time;\n    char __pad_12[4];\n};\n\n\n\nstruct get_key_state_request\n{\n    struct request_header __header;\n    thread_id_t    tid;\n    int            key;\n    char __pad_20[4];\n};\nstruct get_key_state_reply\n{\n    struct reply_header __header;\n    unsigned char  state;\n    /* VARARG(keystate,bytes); */\n    char __pad_9[7];\n};\n\n\nstruct set_key_state_request\n{\n    struct request_header __header;\n    thread_id_t    tid;\n    int            async;\n    /* VARARG(keystate,bytes); */\n    char __pad_20[4];\n};\nstruct set_key_state_reply\n{\n    struct reply_header __header;\n};\n\n\nstruct set_foreground_window_request\n{\n    struct request_header __header;\n    user_handle_t  handle;\n};\nstruct set_foreground_window_reply\n{\n    struct reply_header __header;\n    user_handle_t  previous;\n    int            send_msg_old;\n    int            send_msg_new;\n    char __pad_20[4];\n};\n\n\nstruct set_focus_window_request\n{\n    struct request_header __header;\n    user_handle_t  handle;\n};\nstruct set_focus_window_reply\n{\n    struct reply_header __header;\n    user_handle_t  previous;\n    char __pad_12[4];\n};\n\n\nstruct set_active_window_request\n{\n    struct request_header __header;\n    user_handle_t  handle;\n};\nstruct set_active_window_reply\n{\n    struct reply_header __header;\n    user_handle_t  previous;\n    char __pad_12[4];\n};\n\n\nstruct set_capture_window_request\n{\n    struct request_header __header;\n    user_handle_t  handle;\n    unsigned int   flags;\n    char __pad_20[4];\n};\nstruct set_capture_window_reply\n{\n    struct reply_header __header;\n    user_handle_t  previous;\n    user_handle_t  full_handle;\n};\n#define CAPTURE_MENU     0x01\n#define CAPTURE_MOVESIZE 0x02\n\n\n\nstruct set_caret_window_request\n{\n    struct request_header __header;\n    user_handle_t  handle;\n    int            width;\n    int            height;\n};\nstruct set_caret_window_reply\n{\n    struct reply_header __header;\n    user_handle_t  previous;\n    rectangle_t    old_rect;\n    int            old_hide;\n    int            old_state;\n    char __pad_36[4];\n};\n\n\n\nstruct set_caret_info_request\n{\n    struct request_header __header;\n    unsigned int   flags;\n    user_handle_t  handle;\n    int            x;\n    int            y;\n    int            hide;\n    int            state;\n    char __pad_36[4];\n};\nstruct set_caret_info_reply\n{\n    struct reply_header __header;\n    user_handle_t  full_handle;\n    rectangle_t    old_rect;\n    int            old_hide;\n    int            old_state;\n    char __pad_36[4];\n};\n#define SET_CARET_POS        0x01\n#define SET_CARET_HIDE       0x02\n#define SET_CARET_STATE      0x04\nenum caret_state\n{\n    CARET_STATE_OFF,\n    CARET_STATE_ON,\n    CARET_STATE_TOGGLE,\n    CARET_STATE_ON_IF_MOVED\n};\n\n\n\nstruct set_hook_request\n{\n    struct request_header __header;\n    int            id;\n    process_id_t   pid;\n    thread_id_t    tid;\n    int            event_min;\n    int            event_max;\n    client_ptr_t   proc;\n    int            flags;\n    int            unicode;\n    /* VARARG(module,unicode_str); */\n};\nstruct set_hook_reply\n{\n    struct reply_header __header;\n    user_handle_t  handle;\n    unsigned int   active_hooks;\n};\n\n\n\nstruct remove_hook_request\n{\n    struct request_header __header;\n    user_handle_t  handle;\n    client_ptr_t   proc;\n    int            id;\n    char __pad_28[4];\n};\nstruct remove_hook_reply\n{\n    struct reply_header __header;\n    unsigned int   active_hooks;\n    char __pad_12[4];\n};\n\n\n\nstruct start_hook_chain_request\n{\n    struct request_header __header;\n    int            id;\n    int            event;\n    user_handle_t  window;\n    int            object_id;\n    int            child_id;\n};\nstruct start_hook_chain_reply\n{\n    struct reply_header __header;\n    user_handle_t  handle;\n    process_id_t   pid;\n    thread_id_t    tid;\n    int            unicode;\n    client_ptr_t   proc;\n    unsigned int   active_hooks;\n    /* VARARG(module,unicode_str); */\n    char __pad_36[4];\n};\n\n\n\nstruct finish_hook_chain_request\n{\n    struct request_header __header;\n    int            id;\n};\nstruct finish_hook_chain_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct get_hook_info_request\n{\n    struct request_header __header;\n    user_handle_t  handle;\n    int            get_next;\n    int            event;\n    user_handle_t  window;\n    int            object_id;\n    int            child_id;\n    char __pad_36[4];\n};\nstruct get_hook_info_reply\n{\n    struct reply_header __header;\n    user_handle_t  handle;\n    int            id;\n    process_id_t   pid;\n    thread_id_t    tid;\n    client_ptr_t   proc;\n    int            unicode;\n    /* VARARG(module,unicode_str); */\n    char __pad_36[4];\n};\n\n\n\nstruct create_class_request\n{\n    struct request_header __header;\n    int            local;\n    atom_t         atom;\n    unsigned int   style;\n    mod_handle_t   instance;\n    int            extra;\n    int            win_extra;\n    client_ptr_t   client_ptr;\n    data_size_t    name_offset;\n    /* VARARG(name,unicode_str); */\n    char __pad_52[4];\n};\nstruct create_class_reply\n{\n    struct reply_header __header;\n    atom_t         atom;\n    char __pad_12[4];\n};\n\n\n\nstruct destroy_class_request\n{\n    struct request_header __header;\n    atom_t         atom;\n    mod_handle_t   instance;\n    /* VARARG(name,unicode_str); */\n};\nstruct destroy_class_reply\n{\n    struct reply_header __header;\n    client_ptr_t   client_ptr;\n};\n\n\n\nstruct set_class_info_request\n{\n    struct request_header __header;\n    user_handle_t  window;\n    unsigned int   flags;\n    atom_t         atom;\n    unsigned int   style;\n    int            win_extra;\n    mod_handle_t   instance;\n    int            extra_offset;\n    data_size_t    extra_size;\n    lparam_t       extra_value;\n};\nstruct set_class_info_reply\n{\n    struct reply_header __header;\n    atom_t         old_atom;\n    atom_t         base_atom;\n    mod_handle_t   old_instance;\n    lparam_t       old_extra_value;\n    unsigned int   old_style;\n    int            old_extra;\n    int            old_win_extra;\n    char __pad_44[4];\n};\n#define SET_CLASS_ATOM      0x0001\n#define SET_CLASS_STYLE     0x0002\n#define SET_CLASS_WINEXTRA  0x0004\n#define SET_CLASS_INSTANCE  0x0008\n#define SET_CLASS_EXTRA     0x0010\n\n\n\nstruct open_clipboard_request\n{\n    struct request_header __header;\n    user_handle_t  window;\n};\nstruct open_clipboard_reply\n{\n    struct reply_header __header;\n    user_handle_t  owner;\n    char __pad_12[4];\n};\n\n\n\nstruct close_clipboard_request\n{\n    struct request_header __header;\n    char __pad_12[4];\n};\nstruct close_clipboard_reply\n{\n    struct reply_header __header;\n    user_handle_t  viewer;\n    user_handle_t  owner;\n};\n\n\n\nstruct empty_clipboard_request\n{\n    struct request_header __header;\n    char __pad_12[4];\n};\nstruct empty_clipboard_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct set_clipboard_data_request\n{\n    struct request_header __header;\n    unsigned int   format;\n    unsigned int   lcid;\n    /* VARARG(data,bytes); */\n    char __pad_20[4];\n};\nstruct set_clipboard_data_reply\n{\n    struct reply_header __header;\n    unsigned int   seqno;\n    char __pad_12[4];\n};\n\n\n\nstruct get_clipboard_data_request\n{\n    struct request_header __header;\n    unsigned int   format;\n    int            render;\n    int            cached;\n    unsigned int   seqno;\n    char __pad_28[4];\n};\nstruct get_clipboard_data_reply\n{\n    struct reply_header __header;\n    unsigned int   from;\n    user_handle_t  owner;\n    unsigned int   seqno;\n    data_size_t    total;\n    /* VARARG(data,bytes); */\n};\n\n\n\nstruct get_clipboard_formats_request\n{\n    struct request_header __header;\n    unsigned int   format;\n};\nstruct get_clipboard_formats_reply\n{\n    struct reply_header __header;\n    unsigned int   count;\n    /* VARARG(formats,uints); */\n    char __pad_12[4];\n};\n\n\n\nstruct enum_clipboard_formats_request\n{\n    struct request_header __header;\n    unsigned int   previous;\n};\nstruct enum_clipboard_formats_reply\n{\n    struct reply_header __header;\n    unsigned int   format;\n    char __pad_12[4];\n};\n\n\n\nstruct release_clipboard_request\n{\n    struct request_header __header;\n    user_handle_t  owner;\n};\nstruct release_clipboard_reply\n{\n    struct reply_header __header;\n    user_handle_t  viewer;\n    user_handle_t  owner;\n};\n\n\n\nstruct get_clipboard_info_request\n{\n    struct request_header __header;\n    char __pad_12[4];\n};\nstruct get_clipboard_info_reply\n{\n    struct reply_header __header;\n    user_handle_t  window;\n    user_handle_t  owner;\n    user_handle_t  viewer;\n    unsigned int   seqno;\n};\n\n\n\nstruct set_clipboard_viewer_request\n{\n    struct request_header __header;\n    user_handle_t  viewer;\n    user_handle_t  previous;\n    char __pad_20[4];\n};\nstruct set_clipboard_viewer_reply\n{\n    struct reply_header __header;\n    user_handle_t  old_viewer;\n    user_handle_t  owner;\n};\n\n\n\nstruct add_clipboard_listener_request\n{\n    struct request_header __header;\n    user_handle_t  window;\n};\nstruct add_clipboard_listener_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct remove_clipboard_listener_request\n{\n    struct request_header __header;\n    user_handle_t  window;\n};\nstruct remove_clipboard_listener_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct open_token_request\n{\n    struct request_header __header;\n    obj_handle_t   handle;\n    unsigned int   access;\n    unsigned int   attributes;\n    unsigned int   flags;\n    char __pad_28[4];\n};\nstruct open_token_reply\n{\n    struct reply_header __header;\n    obj_handle_t   token;\n    char __pad_12[4];\n};\n#define OPEN_TOKEN_THREAD   1\n#define OPEN_TOKEN_AS_SELF  2\n\n\n\nstruct set_global_windows_request\n{\n    struct request_header __header;\n    unsigned int   flags;\n    user_handle_t  shell_window;\n    user_handle_t  shell_listview;\n    user_handle_t  progman_window;\n    user_handle_t  taskman_window;\n};\nstruct set_global_windows_reply\n{\n    struct reply_header __header;\n    user_handle_t  old_shell_window;\n    user_handle_t  old_shell_listview;\n    user_handle_t  old_progman_window;\n    user_handle_t  old_taskman_window;\n};\n#define SET_GLOBAL_SHELL_WINDOWS   0x01\n#define SET_GLOBAL_PROGMAN_WINDOW  0x02\n#define SET_GLOBAL_TASKMAN_WINDOW  0x04\n\n\nstruct adjust_token_privileges_request\n{\n    struct request_header __header;\n    obj_handle_t  handle;\n    int           disable_all;\n    int           get_modified_state;\n    /* VARARG(privileges,LUID_AND_ATTRIBUTES); */\n};\nstruct adjust_token_privileges_reply\n{\n    struct reply_header __header;\n    unsigned int  len;\n    /* VARARG(privileges,LUID_AND_ATTRIBUTES); */\n    char __pad_12[4];\n};\n\n\nstruct get_token_privileges_request\n{\n    struct request_header __header;\n    obj_handle_t  handle;\n};\nstruct get_token_privileges_reply\n{\n    struct reply_header __header;\n    unsigned int  len;\n    /* VARARG(privileges,LUID_AND_ATTRIBUTES); */\n    char __pad_12[4];\n};\n\n\nstruct check_token_privileges_request\n{\n    struct request_header __header;\n    obj_handle_t  handle;\n    int           all_required;\n    /* VARARG(privileges,LUID_AND_ATTRIBUTES); */\n    char __pad_20[4];\n};\nstruct check_token_privileges_reply\n{\n    struct reply_header __header;\n    int           has_privileges;\n    /* VARARG(privileges,LUID_AND_ATTRIBUTES); */\n    char __pad_12[4];\n};\n\nstruct duplicate_token_request\n{\n    struct request_header __header;\n    obj_handle_t  handle;\n    unsigned int  access;\n    int           primary;\n    int           impersonation_level;\n    /* VARARG(objattr,object_attributes); */\n    char __pad_28[4];\n};\nstruct duplicate_token_reply\n{\n    struct reply_header __header;\n    obj_handle_t  new_handle;\n    char __pad_12[4];\n};\n\nstruct access_check_request\n{\n    struct request_header __header;\n    obj_handle_t    handle;\n    unsigned int    desired_access;\n    unsigned int    mapping_read;\n    unsigned int    mapping_write;\n    unsigned int    mapping_execute;\n    unsigned int    mapping_all;\n    /* VARARG(sd,security_descriptor); */\n    char __pad_36[4];\n};\nstruct access_check_reply\n{\n    struct reply_header __header;\n    unsigned int    access_granted;\n    unsigned int    access_status;\n    unsigned int    privileges_len;\n    /* VARARG(privileges,LUID_AND_ATTRIBUTES); */\n    char __pad_20[4];\n};\n\nstruct get_token_sid_request\n{\n    struct request_header __header;\n    obj_handle_t    handle;\n    unsigned int    which_sid;\n    char __pad_20[4];\n};\nstruct get_token_sid_reply\n{\n    struct reply_header __header;\n    data_size_t     sid_len;\n    /* VARARG(sid,SID); */\n    char __pad_12[4];\n};\n\nstruct get_token_groups_request\n{\n    struct request_header __header;\n    obj_handle_t    handle;\n};\nstruct get_token_groups_reply\n{\n    struct reply_header __header;\n    data_size_t     user_len;\n    /* VARARG(user,token_groups); */\n    char __pad_12[4];\n};\n\nstruct get_token_default_dacl_request\n{\n    struct request_header __header;\n    obj_handle_t    handle;\n};\nstruct get_token_default_dacl_reply\n{\n    struct reply_header __header;\n    data_size_t     acl_len;\n    /* VARARG(acl,ACL); */\n    char __pad_12[4];\n};\n\nstruct set_token_default_dacl_request\n{\n    struct request_header __header;\n    obj_handle_t    handle;\n    /* VARARG(acl,ACL); */\n};\nstruct set_token_default_dacl_reply\n{\n    struct reply_header __header;\n};\n\nstruct set_security_object_request\n{\n    struct request_header __header;\n    obj_handle_t    handle;\n    unsigned int    security_info;\n    /* VARARG(sd,security_descriptor); */\n    char __pad_20[4];\n};\nstruct set_security_object_reply\n{\n    struct reply_header __header;\n};\n\nstruct get_security_object_request\n{\n    struct request_header __header;\n    obj_handle_t    handle;\n    unsigned int    security_info;\n    char __pad_20[4];\n};\nstruct get_security_object_reply\n{\n    struct reply_header __header;\n    unsigned int    sd_len;\n    /* VARARG(sd,security_descriptor); */\n    char __pad_12[4];\n};\n\n\nstruct handle_info\n{\n    process_id_t owner;\n    obj_handle_t handle;\n    unsigned int access;\n};\n\n\nstruct get_system_handles_request\n{\n    struct request_header __header;\n    char __pad_12[4];\n};\nstruct get_system_handles_reply\n{\n    struct reply_header __header;\n    unsigned int    count;\n    /* VARARG(data,handle_infos); */\n    char __pad_12[4];\n};\n\n\n\nstruct create_mailslot_request\n{\n    struct request_header __header;\n    unsigned int   access;\n    timeout_t      read_timeout;\n    unsigned int   max_msgsize;\n    /* VARARG(objattr,object_attributes); */\n    char __pad_28[4];\n};\nstruct create_mailslot_reply\n{\n    struct reply_header __header;\n    obj_handle_t   handle;\n    char __pad_12[4];\n};\n\n\n\nstruct set_mailslot_info_request\n{\n    struct request_header __header;\n    obj_handle_t   handle;\n    timeout_t      read_timeout;\n    unsigned int   flags;\n    char __pad_28[4];\n};\nstruct set_mailslot_info_reply\n{\n    struct reply_header __header;\n    timeout_t      read_timeout;\n    unsigned int   max_msgsize;\n    char __pad_20[4];\n};\n#define MAILSLOT_SET_READ_TIMEOUT  1\n\n\n\nstruct create_directory_request\n{\n    struct request_header __header;\n    unsigned int   access;\n    /* VARARG(objattr,object_attributes); */\n};\nstruct create_directory_reply\n{\n    struct reply_header __header;\n    obj_handle_t   handle;\n    char __pad_12[4];\n};\n\n\n\nstruct open_directory_request\n{\n    struct request_header __header;\n    unsigned int   access;\n    unsigned int   attributes;\n    obj_handle_t   rootdir;\n    /* VARARG(directory_name,unicode_str); */\n};\nstruct open_directory_reply\n{\n    struct reply_header __header;\n    obj_handle_t   handle;\n    char __pad_12[4];\n};\n\n\n\nstruct get_directory_entry_request\n{\n    struct request_header __header;\n    obj_handle_t   handle;\n    unsigned int   index;\n    char __pad_20[4];\n};\nstruct get_directory_entry_reply\n{\n    struct reply_header __header;\n    data_size_t    name_len;\n    /* VARARG(name,unicode_str,name_len); */\n    /* VARARG(type,unicode_str); */\n    char __pad_12[4];\n};\n\n\n\nstruct create_symlink_request\n{\n    struct request_header __header;\n    unsigned int   access;\n    /* VARARG(objattr,object_attributes); */\n    /* VARARG(target_name,unicode_str); */\n};\nstruct create_symlink_reply\n{\n    struct reply_header __header;\n    obj_handle_t   handle;\n    char __pad_12[4];\n};\n\n\n\nstruct open_symlink_request\n{\n    struct request_header __header;\n    unsigned int   access;\n    unsigned int   attributes;\n    obj_handle_t   rootdir;\n    /* VARARG(name,unicode_str); */\n};\nstruct open_symlink_reply\n{\n    struct reply_header __header;\n    obj_handle_t   handle;\n    char __pad_12[4];\n};\n\n\n\nstruct query_symlink_request\n{\n    struct request_header __header;\n    obj_handle_t   handle;\n};\nstruct query_symlink_reply\n{\n    struct reply_header __header;\n    data_size_t    total;\n    /* VARARG(target_name,unicode_str); */\n    char __pad_12[4];\n};\n\n\n\nstruct get_object_info_request\n{\n    struct request_header __header;\n    obj_handle_t   handle;\n};\nstruct get_object_info_reply\n{\n    struct reply_header __header;\n    unsigned int   access;\n    unsigned int   ref_count;\n    unsigned int   handle_count;\n    data_size_t    total;\n    /* VARARG(name,unicode_str); */\n};\n\n\n\nstruct get_object_type_request\n{\n    struct request_header __header;\n    obj_handle_t   handle;\n};\nstruct get_object_type_reply\n{\n    struct reply_header __header;\n    data_size_t    total;\n    /* VARARG(type,unicode_str); */\n    char __pad_12[4];\n};\n\n\n\nstruct unlink_object_request\n{\n    struct request_header __header;\n    obj_handle_t   handle;\n};\nstruct unlink_object_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct get_token_impersonation_level_request\n{\n    struct request_header __header;\n    obj_handle_t   handle;\n};\nstruct get_token_impersonation_level_reply\n{\n    struct reply_header __header;\n    int            impersonation_level;\n    char __pad_12[4];\n};\n\n\nstruct allocate_locally_unique_id_request\n{\n    struct request_header __header;\n    char __pad_12[4];\n};\nstruct allocate_locally_unique_id_reply\n{\n    struct reply_header __header;\n    luid_t         luid;\n};\n\n\n\nstruct create_device_manager_request\n{\n    struct request_header __header;\n    unsigned int access;\n    unsigned int attributes;\n    char __pad_20[4];\n};\nstruct create_device_manager_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct create_device_request\n{\n    struct request_header __header;\n    unsigned int access;\n    unsigned int attributes;\n    obj_handle_t rootdir;\n    client_ptr_t user_ptr;\n    obj_handle_t manager;\n    /* VARARG(name,unicode_str); */\n    char __pad_36[4];\n};\nstruct create_device_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct delete_device_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct delete_device_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct get_next_device_request_request\n{\n    struct request_header __header;\n    obj_handle_t manager;\n    obj_handle_t prev;\n    unsigned int status;\n};\nstruct get_next_device_request_reply\n{\n    struct reply_header __header;\n    irp_params_t params;\n    obj_handle_t next;\n    process_id_t client_pid;\n    thread_id_t  client_tid;\n    data_size_t  in_size;\n    data_size_t  out_size;\n    /* VARARG(next_data,bytes); */\n    char __pad_52[4];\n};\n\n\n\nstruct make_process_system_request\n{\n    struct request_header __header;\n    char __pad_12[4];\n};\nstruct make_process_system_reply\n{\n    struct reply_header __header;\n    obj_handle_t event;\n    char __pad_12[4];\n};\n\n\n\nstruct get_token_statistics_request\n{\n    struct request_header __header;\n    obj_handle_t   handle;\n};\nstruct get_token_statistics_reply\n{\n    struct reply_header __header;\n    luid_t         token_id;\n    luid_t         modified_id;\n    int            primary;\n    int            impersonation_level;\n    int            group_count;\n    int            privilege_count;\n};\n\n\n\nstruct create_completion_request\n{\n    struct request_header __header;\n    unsigned int access;\n    unsigned int concurrent;\n    /* VARARG(objattr,object_attributes); */\n    char __pad_20[4];\n};\nstruct create_completion_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct open_completion_request\n{\n    struct request_header __header;\n    unsigned int access;\n    unsigned int attributes;\n    obj_handle_t rootdir;\n    /* VARARG(filename,unicode_str); */\n};\nstruct open_completion_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct add_completion_request\n{\n    struct request_header __header;\n    obj_handle_t  handle;\n    apc_param_t   ckey;\n    apc_param_t   cvalue;\n    apc_param_t   information;\n    unsigned int  status;\n    char __pad_44[4];\n};\nstruct add_completion_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct remove_completion_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n};\nstruct remove_completion_reply\n{\n    struct reply_header __header;\n    apc_param_t   ckey;\n    apc_param_t   cvalue;\n    apc_param_t   information;\n    unsigned int  status;\n    char __pad_36[4];\n};\n\n\n\nstruct query_completion_request\n{\n    struct request_header __header;\n    obj_handle_t  handle;\n};\nstruct query_completion_reply\n{\n    struct reply_header __header;\n    unsigned int  depth;\n    char __pad_12[4];\n};\n\n\n\nstruct set_completion_info_request\n{\n    struct request_header __header;\n    obj_handle_t  handle;\n    apc_param_t   ckey;\n    obj_handle_t  chandle;\n    char __pad_28[4];\n};\nstruct set_completion_info_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct add_fd_completion_request\n{\n    struct request_header __header;\n    obj_handle_t   handle;\n    apc_param_t    cvalue;\n    apc_param_t    information;\n    unsigned int   status;\n    char __pad_36[4];\n};\nstruct add_fd_completion_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct set_fd_disp_info_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    int          unlink;\n    char __pad_20[4];\n};\nstruct set_fd_disp_info_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct set_fd_name_info_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    obj_handle_t rootdir;\n    int          link;\n    /* VARARG(filename,string); */\n};\nstruct set_fd_name_info_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct get_window_layered_info_request\n{\n    struct request_header __header;\n    user_handle_t  handle;\n};\nstruct get_window_layered_info_reply\n{\n    struct reply_header __header;\n    unsigned int   color_key;\n    unsigned int   alpha;\n    unsigned int   flags;\n    char __pad_20[4];\n};\n\n\n\nstruct set_window_layered_info_request\n{\n    struct request_header __header;\n    user_handle_t  handle;\n    unsigned int   color_key;\n    unsigned int   alpha;\n    unsigned int   flags;\n    char __pad_28[4];\n};\nstruct set_window_layered_info_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct alloc_user_handle_request\n{\n    struct request_header __header;\n    char __pad_12[4];\n};\nstruct alloc_user_handle_reply\n{\n    struct reply_header __header;\n    user_handle_t  handle;\n    char __pad_12[4];\n};\n\n\n\nstruct free_user_handle_request\n{\n    struct request_header __header;\n    user_handle_t  handle;\n};\nstruct free_user_handle_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct set_cursor_request\n{\n    struct request_header __header;\n    unsigned int   flags;\n    user_handle_t  handle;\n    int            show_count;\n    int            x;\n    int            y;\n    rectangle_t    clip;\n    unsigned int   clip_msg;\n    char __pad_52[4];\n};\nstruct set_cursor_reply\n{\n    struct reply_header __header;\n    user_handle_t  prev_handle;\n    int            prev_count;\n    int            prev_x;\n    int            prev_y;\n    int            new_x;\n    int            new_y;\n    rectangle_t    new_clip;\n    unsigned int   last_change;\n    char __pad_52[4];\n};\n#define SET_CURSOR_HANDLE 0x01\n#define SET_CURSOR_COUNT  0x02\n#define SET_CURSOR_POS    0x04\n#define SET_CURSOR_CLIP   0x08\n#define SET_CURSOR_NOCLIP 0x10\n\n\n\nstruct update_rawinput_devices_request\n{\n    struct request_header __header;\n    /* VARARG(devices,rawinput_devices); */\n    char __pad_12[4];\n};\nstruct update_rawinput_devices_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct get_suspend_context_request\n{\n    struct request_header __header;\n    char __pad_12[4];\n};\nstruct get_suspend_context_reply\n{\n    struct reply_header __header;\n    /* VARARG(context,context); */\n};\n\n\n\nstruct set_suspend_context_request\n{\n    struct request_header __header;\n    /* VARARG(context,context); */\n    char __pad_12[4];\n};\nstruct set_suspend_context_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct create_job_request\n{\n    struct request_header __header;\n    unsigned int access;\n    /* VARARG(objattr,object_attributes); */\n};\nstruct create_job_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct open_job_request\n{\n    struct request_header __header;\n    unsigned int access;\n    unsigned int attributes;\n    obj_handle_t rootdir;\n    /* VARARG(name,unicode_str); */\n};\nstruct open_job_reply\n{\n    struct reply_header __header;\n    obj_handle_t handle;\n    char __pad_12[4];\n};\n\n\n\nstruct assign_job_request\n{\n    struct request_header __header;\n    obj_handle_t job;\n    obj_handle_t process;\n    char __pad_20[4];\n};\nstruct assign_job_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct process_in_job_request\n{\n    struct request_header __header;\n    obj_handle_t job;\n    obj_handle_t process;\n    char __pad_20[4];\n};\nstruct process_in_job_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct set_job_limits_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    unsigned int limit_flags;\n    char __pad_20[4];\n};\nstruct set_job_limits_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct set_job_completion_port_request\n{\n    struct request_header __header;\n    obj_handle_t job;\n    obj_handle_t port;\n    char __pad_20[4];\n    client_ptr_t key;\n};\nstruct set_job_completion_port_reply\n{\n    struct reply_header __header;\n};\n\n\n\nstruct terminate_job_request\n{\n    struct request_header __header;\n    obj_handle_t handle;\n    int          status;\n    char __pad_20[4];\n};\nstruct terminate_job_reply\n{\n    struct reply_header __header;\n};\n\n\nenum request\n{\n    REQ_new_process,\n    REQ_get_new_process_info,\n    REQ_new_thread,\n    REQ_get_startup_info,\n    REQ_init_process_done,\n    REQ_init_thread,\n    REQ_terminate_process,\n    REQ_terminate_thread,\n    REQ_get_process_info,\n    REQ_get_process_vm_counters,\n    REQ_set_process_info,\n    REQ_get_thread_info,\n    REQ_get_thread_times,\n    REQ_set_thread_info,\n    REQ_get_dll_info,\n    REQ_suspend_thread,\n    REQ_resume_thread,\n    REQ_load_dll,\n    REQ_unload_dll,\n    REQ_queue_apc,\n    REQ_get_apc_result,\n    REQ_close_handle,\n    REQ_set_handle_info,\n    REQ_dup_handle,\n    REQ_open_process,\n    REQ_open_thread,\n    REQ_select,\n    REQ_create_event,\n    REQ_event_op,\n    REQ_query_event,\n    REQ_open_event,\n    REQ_create_keyed_event,\n    REQ_open_keyed_event,\n    REQ_create_mutex,\n    REQ_release_mutex,\n    REQ_open_mutex,\n    REQ_query_mutex,\n    REQ_create_semaphore,\n    REQ_release_semaphore,\n    REQ_query_semaphore,\n    REQ_open_semaphore,\n    REQ_create_file,\n    REQ_open_file_object,\n    REQ_alloc_file_handle,\n    REQ_get_handle_unix_name,\n    REQ_get_handle_fd,\n    REQ_get_directory_cache_entry,\n    REQ_flush,\n    REQ_get_file_info,\n    REQ_get_volume_info,\n    REQ_lock_file,\n    REQ_unlock_file,\n    REQ_create_socket,\n    REQ_accept_socket,\n    REQ_accept_into_socket,\n    REQ_set_socket_event,\n    REQ_get_socket_event,\n    REQ_get_socket_info,\n    REQ_enable_socket_event,\n    REQ_set_socket_deferred,\n    REQ_alloc_console,\n    REQ_free_console,\n    REQ_get_console_renderer_events,\n    REQ_open_console,\n    REQ_attach_console,\n    REQ_get_console_wait_event,\n    REQ_get_console_mode,\n    REQ_set_console_mode,\n    REQ_set_console_input_info,\n    REQ_get_console_input_info,\n    REQ_append_console_input_history,\n    REQ_get_console_input_history,\n    REQ_create_console_output,\n    REQ_set_console_output_info,\n    REQ_get_console_output_info,\n    REQ_write_console_input,\n    REQ_read_console_input,\n    REQ_write_console_output,\n    REQ_fill_console_output,\n    REQ_read_console_output,\n    REQ_move_console_output,\n    REQ_send_console_signal,\n    REQ_read_directory_changes,\n    REQ_read_change,\n    REQ_create_mapping,\n    REQ_open_mapping,\n    REQ_get_mapping_info,\n    REQ_map_view,\n    REQ_unmap_view,\n    REQ_get_mapping_committed_range,\n    REQ_add_mapping_committed_range,\n    REQ_is_same_mapping,\n    REQ_create_snapshot,\n    REQ_next_process,\n    REQ_next_thread,\n    REQ_wait_debug_event,\n    REQ_queue_exception_event,\n    REQ_get_exception_status,\n    REQ_continue_debug_event,\n    REQ_debug_process,\n    REQ_debug_break,\n    REQ_set_debugger_kill_on_exit,\n    REQ_read_process_memory,\n    REQ_write_process_memory,\n    REQ_create_key,\n    REQ_open_key,\n    REQ_delete_key,\n    REQ_flush_key,\n    REQ_enum_key,\n    REQ_set_key_value,\n    REQ_get_key_value,\n    REQ_enum_key_value,\n    REQ_delete_key_value,\n    REQ_load_registry,\n    REQ_unload_registry,\n    REQ_save_registry,\n    REQ_set_registry_notification,\n    REQ_create_timer,\n    REQ_open_timer,\n    REQ_set_timer,\n    REQ_cancel_timer,\n    REQ_get_timer_info,\n    REQ_get_thread_context,\n    REQ_set_thread_context,\n    REQ_get_selector_entry,\n    REQ_add_atom,\n    REQ_delete_atom,\n    REQ_find_atom,\n    REQ_get_atom_information,\n    REQ_set_atom_information,\n    REQ_empty_atom_table,\n    REQ_init_atom_table,\n    REQ_get_msg_queue,\n    REQ_set_queue_fd,\n    REQ_set_queue_mask,\n    REQ_get_queue_status,\n    REQ_get_process_idle_event,\n    REQ_send_message,\n    REQ_post_quit_message,\n    REQ_send_hardware_message,\n    REQ_get_message,\n    REQ_reply_message,\n    REQ_accept_hardware_message,\n    REQ_get_message_reply,\n    REQ_set_win_timer,\n    REQ_kill_win_timer,\n    REQ_is_window_hung,\n    REQ_get_serial_info,\n    REQ_set_serial_info,\n    REQ_register_async,\n    REQ_cancel_async,\n    REQ_get_async_result,\n    REQ_read,\n    REQ_write,\n    REQ_ioctl,\n    REQ_set_irp_result,\n    REQ_create_named_pipe,\n    REQ_get_named_pipe_info,\n    REQ_set_named_pipe_info,\n    REQ_create_window,\n    REQ_destroy_window,\n    REQ_get_desktop_window,\n    REQ_set_window_owner,\n    REQ_get_window_info,\n    REQ_set_window_info,\n    REQ_set_parent,\n    REQ_get_window_parents,\n    REQ_get_window_children,\n    REQ_get_window_children_from_point,\n    REQ_get_window_tree,\n    REQ_set_window_pos,\n    REQ_get_window_rectangles,\n    REQ_get_window_text,\n    REQ_set_window_text,\n    REQ_get_windows_offset,\n    REQ_get_visible_region,\n    REQ_get_surface_region,\n    REQ_get_window_region,\n    REQ_set_window_region,\n    REQ_get_update_region,\n    REQ_update_window_zorder,\n    REQ_redraw_window,\n    REQ_set_window_property,\n    REQ_remove_window_property,\n    REQ_get_window_property,\n    REQ_get_window_properties,\n    REQ_create_winstation,\n    REQ_open_winstation,\n    REQ_close_winstation,\n    REQ_get_process_winstation,\n    REQ_set_process_winstation,\n    REQ_enum_winstation,\n    REQ_create_desktop,\n    REQ_open_desktop,\n    REQ_open_input_desktop,\n    REQ_close_desktop,\n    REQ_get_thread_desktop,\n    REQ_set_thread_desktop,\n    REQ_enum_desktop,\n    REQ_set_user_object_info,\n    REQ_register_hotkey,\n    REQ_unregister_hotkey,\n    REQ_attach_thread_input,\n    REQ_get_thread_input,\n    REQ_get_last_input_time,\n    REQ_get_key_state,\n    REQ_set_key_state,\n    REQ_set_foreground_window,\n    REQ_set_focus_window,\n    REQ_set_active_window,\n    REQ_set_capture_window,\n    REQ_set_caret_window,\n    REQ_set_caret_info,\n    REQ_set_hook,\n    REQ_remove_hook,\n    REQ_start_hook_chain,\n    REQ_finish_hook_chain,\n    REQ_get_hook_info,\n    REQ_create_class,\n    REQ_destroy_class,\n    REQ_set_class_info,\n    REQ_open_clipboard,\n    REQ_close_clipboard,\n    REQ_empty_clipboard,\n    REQ_set_clipboard_data,\n    REQ_get_clipboard_data,\n    REQ_get_clipboard_formats,\n    REQ_enum_clipboard_formats,\n    REQ_release_clipboard,\n    REQ_get_clipboard_info,\n    REQ_set_clipboard_viewer,\n    REQ_add_clipboard_listener,\n    REQ_remove_clipboard_listener,\n    REQ_open_token,\n    REQ_set_global_windows,\n    REQ_adjust_token_privileges,\n    REQ_get_token_privileges,\n    REQ_check_token_privileges,\n    REQ_duplicate_token,\n    REQ_access_check,\n    REQ_get_token_sid,\n    REQ_get_token_groups,\n    REQ_get_token_default_dacl,\n    REQ_set_token_default_dacl,\n    REQ_set_security_object,\n    REQ_get_security_object,\n    REQ_get_system_handles,\n    REQ_create_mailslot,\n    REQ_set_mailslot_info,\n    REQ_create_directory,\n    REQ_open_directory,\n    REQ_get_directory_entry,\n    REQ_create_symlink,\n    REQ_open_symlink,\n    REQ_query_symlink,\n    REQ_get_object_info,\n    REQ_get_object_type,\n    REQ_unlink_object,\n    REQ_get_token_impersonation_level,\n    REQ_allocate_locally_unique_id,\n    REQ_create_device_manager,\n    REQ_create_device,\n    REQ_delete_device,\n    REQ_get_next_device_request,\n    REQ_make_process_system,\n    REQ_get_token_statistics,\n    REQ_create_completion,\n    REQ_open_completion,\n    REQ_add_completion,\n    REQ_remove_completion,\n    REQ_query_completion,\n    REQ_set_completion_info,\n    REQ_add_fd_completion,\n    REQ_set_fd_disp_info,\n    REQ_set_fd_name_info,\n    REQ_get_window_layered_info,\n    REQ_set_window_layered_info,\n    REQ_alloc_user_handle,\n    REQ_free_user_handle,\n    REQ_set_cursor,\n    REQ_update_rawinput_devices,\n    REQ_get_suspend_context,\n    REQ_set_suspend_context,\n    REQ_create_job,\n    REQ_open_job,\n    REQ_assign_job,\n    REQ_process_in_job,\n    REQ_set_job_limits,\n    REQ_set_job_completion_port,\n    REQ_terminate_job,\n    REQ_NB_REQUESTS\n};\n\nunion generic_request\n{\n    struct request_max_size max_size;\n    struct request_header request_header;\n    struct new_process_request new_process_request;\n    struct get_new_process_info_request get_new_process_info_request;\n    struct new_thread_request new_thread_request;\n    struct get_startup_info_request get_startup_info_request;\n    struct init_process_done_request init_process_done_request;\n    struct init_thread_request init_thread_request;\n    struct terminate_process_request terminate_process_request;\n    struct terminate_thread_request terminate_thread_request;\n    struct get_process_info_request get_process_info_request;\n    struct get_process_vm_counters_request get_process_vm_counters_request;\n    struct set_process_info_request set_process_info_request;\n    struct get_thread_info_request get_thread_info_request;\n    struct get_thread_times_request get_thread_times_request;\n    struct set_thread_info_request set_thread_info_request;\n    struct get_dll_info_request get_dll_info_request;\n    struct suspend_thread_request suspend_thread_request;\n    struct resume_thread_request resume_thread_request;\n    struct load_dll_request load_dll_request;\n    struct unload_dll_request unload_dll_request;\n    struct queue_apc_request queue_apc_request;\n    struct get_apc_result_request get_apc_result_request;\n    struct close_handle_request close_handle_request;\n    struct set_handle_info_request set_handle_info_request;\n    struct dup_handle_request dup_handle_request;\n    struct open_process_request open_process_request;\n    struct open_thread_request open_thread_request;\n    struct select_request select_request;\n    struct create_event_request create_event_request;\n    struct event_op_request event_op_request;\n    struct query_event_request query_event_request;\n    struct open_event_request open_event_request;\n    struct create_keyed_event_request create_keyed_event_request;\n    struct open_keyed_event_request open_keyed_event_request;\n    struct create_mutex_request create_mutex_request;\n    struct release_mutex_request release_mutex_request;\n    struct open_mutex_request open_mutex_request;\n    struct query_mutex_request query_mutex_request;\n    struct create_semaphore_request create_semaphore_request;\n    struct release_semaphore_request release_semaphore_request;\n    struct query_semaphore_request query_semaphore_request;\n    struct open_semaphore_request open_semaphore_request;\n    struct create_file_request create_file_request;\n    struct open_file_object_request open_file_object_request;\n    struct alloc_file_handle_request alloc_file_handle_request;\n    struct get_handle_unix_name_request get_handle_unix_name_request;\n    struct get_handle_fd_request get_handle_fd_request;\n    struct get_directory_cache_entry_request get_directory_cache_entry_request;\n    struct flush_request flush_request;\n    struct get_file_info_request get_file_info_request;\n    struct get_volume_info_request get_volume_info_request;\n    struct lock_file_request lock_file_request;\n    struct unlock_file_request unlock_file_request;\n    struct create_socket_request create_socket_request;\n    struct accept_socket_request accept_socket_request;\n    struct accept_into_socket_request accept_into_socket_request;\n    struct set_socket_event_request set_socket_event_request;\n    struct get_socket_event_request get_socket_event_request;\n    struct get_socket_info_request get_socket_info_request;\n    struct enable_socket_event_request enable_socket_event_request;\n    struct set_socket_deferred_request set_socket_deferred_request;\n    struct alloc_console_request alloc_console_request;\n    struct free_console_request free_console_request;\n    struct get_console_renderer_events_request get_console_renderer_events_request;\n    struct open_console_request open_console_request;\n    struct attach_console_request attach_console_request;\n    struct get_console_wait_event_request get_console_wait_event_request;\n    struct get_console_mode_request get_console_mode_request;\n    struct set_console_mode_request set_console_mode_request;\n    struct set_console_input_info_request set_console_input_info_request;\n    struct get_console_input_info_request get_console_input_info_request;\n    struct append_console_input_history_request append_console_input_history_request;\n    struct get_console_input_history_request get_console_input_history_request;\n    struct create_console_output_request create_console_output_request;\n    struct set_console_output_info_request set_console_output_info_request;\n    struct get_console_output_info_request get_console_output_info_request;\n    struct write_console_input_request write_console_input_request;\n    struct read_console_input_request read_console_input_request;\n    struct write_console_output_request write_console_output_request;\n    struct fill_console_output_request fill_console_output_request;\n    struct read_console_output_request read_console_output_request;\n    struct move_console_output_request move_console_output_request;\n    struct send_console_signal_request send_console_signal_request;\n    struct read_directory_changes_request read_directory_changes_request;\n    struct read_change_request read_change_request;\n    struct create_mapping_request create_mapping_request;\n    struct open_mapping_request open_mapping_request;\n    struct get_mapping_info_request get_mapping_info_request;\n    struct map_view_request map_view_request;\n    struct unmap_view_request unmap_view_request;\n    struct get_mapping_committed_range_request get_mapping_committed_range_request;\n    struct add_mapping_committed_range_request add_mapping_committed_range_request;\n    struct is_same_mapping_request is_same_mapping_request;\n    struct create_snapshot_request create_snapshot_request;\n    struct next_process_request next_process_request;\n    struct next_thread_request next_thread_request;\n    struct wait_debug_event_request wait_debug_event_request;\n    struct queue_exception_event_request queue_exception_event_request;\n    struct get_exception_status_request get_exception_status_request;\n    struct continue_debug_event_request continue_debug_event_request;\n    struct debug_process_request debug_process_request;\n    struct debug_break_request debug_break_request;\n    struct set_debugger_kill_on_exit_request set_debugger_kill_on_exit_request;\n    struct read_process_memory_request read_process_memory_request;\n    struct write_process_memory_request write_process_memory_request;\n    struct create_key_request create_key_request;\n    struct open_key_request open_key_request;\n    struct delete_key_request delete_key_request;\n    struct flush_key_request flush_key_request;\n    struct enum_key_request enum_key_request;\n    struct set_key_value_request set_key_value_request;\n    struct get_key_value_request get_key_value_request;\n    struct enum_key_value_request enum_key_value_request;\n    struct delete_key_value_request delete_key_value_request;\n    struct load_registry_request load_registry_request;\n    struct unload_registry_request unload_registry_request;\n    struct save_registry_request save_registry_request;\n    struct set_registry_notification_request set_registry_notification_request;\n    struct create_timer_request create_timer_request;\n    struct open_timer_request open_timer_request;\n    struct set_timer_request set_timer_request;\n    struct cancel_timer_request cancel_timer_request;\n    struct get_timer_info_request get_timer_info_request;\n    struct get_thread_context_request get_thread_context_request;\n    struct set_thread_context_request set_thread_context_request;\n    struct get_selector_entry_request get_selector_entry_request;\n    struct add_atom_request add_atom_request;\n    struct delete_atom_request delete_atom_request;\n    struct find_atom_request find_atom_request;\n    struct get_atom_information_request get_atom_information_request;\n    struct set_atom_information_request set_atom_information_request;\n    struct empty_atom_table_request empty_atom_table_request;\n    struct init_atom_table_request init_atom_table_request;\n    struct get_msg_queue_request get_msg_queue_request;\n    struct set_queue_fd_request set_queue_fd_request;\n    struct set_queue_mask_request set_queue_mask_request;\n    struct get_queue_status_request get_queue_status_request;\n    struct get_process_idle_event_request get_process_idle_event_request;\n    struct send_message_request send_message_request;\n    struct post_quit_message_request post_quit_message_request;\n    struct send_hardware_message_request send_hardware_message_request;\n    struct get_message_request get_message_request;\n    struct reply_message_request reply_message_request;\n    struct accept_hardware_message_request accept_hardware_message_request;\n    struct get_message_reply_request get_message_reply_request;\n    struct set_win_timer_request set_win_timer_request;\n    struct kill_win_timer_request kill_win_timer_request;\n    struct is_window_hung_request is_window_hung_request;\n    struct get_serial_info_request get_serial_info_request;\n    struct set_serial_info_request set_serial_info_request;\n    struct register_async_request register_async_request;\n    struct cancel_async_request cancel_async_request;\n    struct get_async_result_request get_async_result_request;\n    struct read_request read_request;\n    struct write_request write_request;\n    struct ioctl_request ioctl_request;\n    struct set_irp_result_request set_irp_result_request;\n    struct create_named_pipe_request create_named_pipe_request;\n    struct get_named_pipe_info_request get_named_pipe_info_request;\n    struct set_named_pipe_info_request set_named_pipe_info_request;\n    struct create_window_request create_window_request;\n    struct destroy_window_request destroy_window_request;\n    struct get_desktop_window_request get_desktop_window_request;\n    struct set_window_owner_request set_window_owner_request;\n    struct get_window_info_request get_window_info_request;\n    struct set_window_info_request set_window_info_request;\n    struct set_parent_request set_parent_request;\n    struct get_window_parents_request get_window_parents_request;\n    struct get_window_children_request get_window_children_request;\n    struct get_window_children_from_point_request get_window_children_from_point_request;\n    struct get_window_tree_request get_window_tree_request;\n    struct set_window_pos_request set_window_pos_request;\n    struct get_window_rectangles_request get_window_rectangles_request;\n    struct get_window_text_request get_window_text_request;\n    struct set_window_text_request set_window_text_request;\n    struct get_windows_offset_request get_windows_offset_request;\n    struct get_visible_region_request get_visible_region_request;\n    struct get_surface_region_request get_surface_region_request;\n    struct get_window_region_request get_window_region_request;\n    struct set_window_region_request set_window_region_request;\n    struct get_update_region_request get_update_region_request;\n    struct update_window_zorder_request update_window_zorder_request;\n    struct redraw_window_request redraw_window_request;\n    struct set_window_property_request set_window_property_request;\n    struct remove_window_property_request remove_window_property_request;\n    struct get_window_property_request get_window_property_request;\n    struct get_window_properties_request get_window_properties_request;\n    struct create_winstation_request create_winstation_request;\n    struct open_winstation_request open_winstation_request;\n    struct close_winstation_request close_winstation_request;\n    struct get_process_winstation_request get_process_winstation_request;\n    struct set_process_winstation_request set_process_winstation_request;\n    struct enum_winstation_request enum_winstation_request;\n    struct create_desktop_request create_desktop_request;\n    struct open_desktop_request open_desktop_request;\n    struct open_input_desktop_request open_input_desktop_request;\n    struct close_desktop_request close_desktop_request;\n    struct get_thread_desktop_request get_thread_desktop_request;\n    struct set_thread_desktop_request set_thread_desktop_request;\n    struct enum_desktop_request enum_desktop_request;\n    struct set_user_object_info_request set_user_object_info_request;\n    struct register_hotkey_request register_hotkey_request;\n    struct unregister_hotkey_request unregister_hotkey_request;\n    struct attach_thread_input_request attach_thread_input_request;\n    struct get_thread_input_request get_thread_input_request;\n    struct get_last_input_time_request get_last_input_time_request;\n    struct get_key_state_request get_key_state_request;\n    struct set_key_state_request set_key_state_request;\n    struct set_foreground_window_request set_foreground_window_request;\n    struct set_focus_window_request set_focus_window_request;\n    struct set_active_window_request set_active_window_request;\n    struct set_capture_window_request set_capture_window_request;\n    struct set_caret_window_request set_caret_window_request;\n    struct set_caret_info_request set_caret_info_request;\n    struct set_hook_request set_hook_request;\n    struct remove_hook_request remove_hook_request;\n    struct start_hook_chain_request start_hook_chain_request;\n    struct finish_hook_chain_request finish_hook_chain_request;\n    struct get_hook_info_request get_hook_info_request;\n    struct create_class_request create_class_request;\n    struct destroy_class_request destroy_class_request;\n    struct set_class_info_request set_class_info_request;\n    struct open_clipboard_request open_clipboard_request;\n    struct close_clipboard_request close_clipboard_request;\n    struct empty_clipboard_request empty_clipboard_request;\n    struct set_clipboard_data_request set_clipboard_data_request;\n    struct get_clipboard_data_request get_clipboard_data_request;\n    struct get_clipboard_formats_request get_clipboard_formats_request;\n    struct enum_clipboard_formats_request enum_clipboard_formats_request;\n    struct release_clipboard_request release_clipboard_request;\n    struct get_clipboard_info_request get_clipboard_info_request;\n    struct set_clipboard_viewer_request set_clipboard_viewer_request;\n    struct add_clipboard_listener_request add_clipboard_listener_request;\n    struct remove_clipboard_listener_request remove_clipboard_listener_request;\n    struct open_token_request open_token_request;\n    struct set_global_windows_request set_global_windows_request;\n    struct adjust_token_privileges_request adjust_token_privileges_request;\n    struct get_token_privileges_request get_token_privileges_request;\n    struct check_token_privileges_request check_token_privileges_request;\n    struct duplicate_token_request duplicate_token_request;\n    struct access_check_request access_check_request;\n    struct get_token_sid_request get_token_sid_request;\n    struct get_token_groups_request get_token_groups_request;\n    struct get_token_default_dacl_request get_token_default_dacl_request;\n    struct set_token_default_dacl_request set_token_default_dacl_request;\n    struct set_security_object_request set_security_object_request;\n    struct get_security_object_request get_security_object_request;\n    struct get_system_handles_request get_system_handles_request;\n    struct create_mailslot_request create_mailslot_request;\n    struct set_mailslot_info_request set_mailslot_info_request;\n    struct create_directory_request create_directory_request;\n    struct open_directory_request open_directory_request;\n    struct get_directory_entry_request get_directory_entry_request;\n    struct create_symlink_request create_symlink_request;\n    struct open_symlink_request open_symlink_request;\n    struct query_symlink_request query_symlink_request;\n    struct get_object_info_request get_object_info_request;\n    struct get_object_type_request get_object_type_request;\n    struct unlink_object_request unlink_object_request;\n    struct get_token_impersonation_level_request get_token_impersonation_level_request;\n    struct allocate_locally_unique_id_request allocate_locally_unique_id_request;\n    struct create_device_manager_request create_device_manager_request;\n    struct create_device_request create_device_request;\n    struct delete_device_request delete_device_request;\n    struct get_next_device_request_request get_next_device_request_request;\n    struct make_process_system_request make_process_system_request;\n    struct get_token_statistics_request get_token_statistics_request;\n    struct create_completion_request create_completion_request;\n    struct open_completion_request open_completion_request;\n    struct add_completion_request add_completion_request;\n    struct remove_completion_request remove_completion_request;\n    struct query_completion_request query_completion_request;\n    struct set_completion_info_request set_completion_info_request;\n    struct add_fd_completion_request add_fd_completion_request;\n    struct set_fd_disp_info_request set_fd_disp_info_request;\n    struct set_fd_name_info_request set_fd_name_info_request;\n    struct get_window_layered_info_request get_window_layered_info_request;\n    struct set_window_layered_info_request set_window_layered_info_request;\n    struct alloc_user_handle_request alloc_user_handle_request;\n    struct free_user_handle_request free_user_handle_request;\n    struct set_cursor_request set_cursor_request;\n    struct update_rawinput_devices_request update_rawinput_devices_request;\n    struct get_suspend_context_request get_suspend_context_request;\n    struct set_suspend_context_request set_suspend_context_request;\n    struct create_job_request create_job_request;\n    struct open_job_request open_job_request;\n    struct assign_job_request assign_job_request;\n    struct process_in_job_request process_in_job_request;\n    struct set_job_limits_request set_job_limits_request;\n    struct set_job_completion_port_request set_job_completion_port_request;\n    struct terminate_job_request terminate_job_request;\n};\nunion generic_reply\n{\n    struct request_max_size max_size;\n    struct reply_header reply_header;\n    struct new_process_reply new_process_reply;\n    struct get_new_process_info_reply get_new_process_info_reply;\n    struct new_thread_reply new_thread_reply;\n    struct get_startup_info_reply get_startup_info_reply;\n    struct init_process_done_reply init_process_done_reply;\n    struct init_thread_reply init_thread_reply;\n    struct terminate_process_reply terminate_process_reply;\n    struct terminate_thread_reply terminate_thread_reply;\n    struct get_process_info_reply get_process_info_reply;\n    struct get_process_vm_counters_reply get_process_vm_counters_reply;\n    struct set_process_info_reply set_process_info_reply;\n    struct get_thread_info_reply get_thread_info_reply;\n    struct get_thread_times_reply get_thread_times_reply;\n    struct set_thread_info_reply set_thread_info_reply;\n    struct get_dll_info_reply get_dll_info_reply;\n    struct suspend_thread_reply suspend_thread_reply;\n    struct resume_thread_reply resume_thread_reply;\n    struct load_dll_reply load_dll_reply;\n    struct unload_dll_reply unload_dll_reply;\n    struct queue_apc_reply queue_apc_reply;\n    struct get_apc_result_reply get_apc_result_reply;\n    struct close_handle_reply close_handle_reply;\n    struct set_handle_info_reply set_handle_info_reply;\n    struct dup_handle_reply dup_handle_reply;\n    struct open_process_reply open_process_reply;\n    struct open_thread_reply open_thread_reply;\n    struct select_reply select_reply;\n    struct create_event_reply create_event_reply;\n    struct event_op_reply event_op_reply;\n    struct query_event_reply query_event_reply;\n    struct open_event_reply open_event_reply;\n    struct create_keyed_event_reply create_keyed_event_reply;\n    struct open_keyed_event_reply open_keyed_event_reply;\n    struct create_mutex_reply create_mutex_reply;\n    struct release_mutex_reply release_mutex_reply;\n    struct open_mutex_reply open_mutex_reply;\n    struct query_mutex_reply query_mutex_reply;\n    struct create_semaphore_reply create_semaphore_reply;\n    struct release_semaphore_reply release_semaphore_reply;\n    struct query_semaphore_reply query_semaphore_reply;\n    struct open_semaphore_reply open_semaphore_reply;\n    struct create_file_reply create_file_reply;\n    struct open_file_object_reply open_file_object_reply;\n    struct alloc_file_handle_reply alloc_file_handle_reply;\n    struct get_handle_unix_name_reply get_handle_unix_name_reply;\n    struct get_handle_fd_reply get_handle_fd_reply;\n    struct get_directory_cache_entry_reply get_directory_cache_entry_reply;\n    struct flush_reply flush_reply;\n    struct get_file_info_reply get_file_info_reply;\n    struct get_volume_info_reply get_volume_info_reply;\n    struct lock_file_reply lock_file_reply;\n    struct unlock_file_reply unlock_file_reply;\n    struct create_socket_reply create_socket_reply;\n    struct accept_socket_reply accept_socket_reply;\n    struct accept_into_socket_reply accept_into_socket_reply;\n    struct set_socket_event_reply set_socket_event_reply;\n    struct get_socket_event_reply get_socket_event_reply;\n    struct get_socket_info_reply get_socket_info_reply;\n    struct enable_socket_event_reply enable_socket_event_reply;\n    struct set_socket_deferred_reply set_socket_deferred_reply;\n    struct alloc_console_reply alloc_console_reply;\n    struct free_console_reply free_console_reply;\n    struct get_console_renderer_events_reply get_console_renderer_events_reply;\n    struct open_console_reply open_console_reply;\n    struct attach_console_reply attach_console_reply;\n    struct get_console_wait_event_reply get_console_wait_event_reply;\n    struct get_console_mode_reply get_console_mode_reply;\n    struct set_console_mode_reply set_console_mode_reply;\n    struct set_console_input_info_reply set_console_input_info_reply;\n    struct get_console_input_info_reply get_console_input_info_reply;\n    struct append_console_input_history_reply append_console_input_history_reply;\n    struct get_console_input_history_reply get_console_input_history_reply;\n    struct create_console_output_reply create_console_output_reply;\n    struct set_console_output_info_reply set_console_output_info_reply;\n    struct get_console_output_info_reply get_console_output_info_reply;\n    struct write_console_input_reply write_console_input_reply;\n    struct read_console_input_reply read_console_input_reply;\n    struct write_console_output_reply write_console_output_reply;\n    struct fill_console_output_reply fill_console_output_reply;\n    struct read_console_output_reply read_console_output_reply;\n    struct move_console_output_reply move_console_output_reply;\n    struct send_console_signal_reply send_console_signal_reply;\n    struct read_directory_changes_reply read_directory_changes_reply;\n    struct read_change_reply read_change_reply;\n    struct create_mapping_reply create_mapping_reply;\n    struct open_mapping_reply open_mapping_reply;\n    struct get_mapping_info_reply get_mapping_info_reply;\n    struct map_view_reply map_view_reply;\n    struct unmap_view_reply unmap_view_reply;\n    struct get_mapping_committed_range_reply get_mapping_committed_range_reply;\n    struct add_mapping_committed_range_reply add_mapping_committed_range_reply;\n    struct is_same_mapping_reply is_same_mapping_reply;\n    struct create_snapshot_reply create_snapshot_reply;\n    struct next_process_reply next_process_reply;\n    struct next_thread_reply next_thread_reply;\n    struct wait_debug_event_reply wait_debug_event_reply;\n    struct queue_exception_event_reply queue_exception_event_reply;\n    struct get_exception_status_reply get_exception_status_reply;\n    struct continue_debug_event_reply continue_debug_event_reply;\n    struct debug_process_reply debug_process_reply;\n    struct debug_break_reply debug_break_reply;\n    struct set_debugger_kill_on_exit_reply set_debugger_kill_on_exit_reply;\n    struct read_process_memory_reply read_process_memory_reply;\n    struct write_process_memory_reply write_process_memory_reply;\n    struct create_key_reply create_key_reply;\n    struct open_key_reply open_key_reply;\n    struct delete_key_reply delete_key_reply;\n    struct flush_key_reply flush_key_reply;\n    struct enum_key_reply enum_key_reply;\n    struct set_key_value_reply set_key_value_reply;\n    struct get_key_value_reply get_key_value_reply;\n    struct enum_key_value_reply enum_key_value_reply;\n    struct delete_key_value_reply delete_key_value_reply;\n    struct load_registry_reply load_registry_reply;\n    struct unload_registry_reply unload_registry_reply;\n    struct save_registry_reply save_registry_reply;\n    struct set_registry_notification_reply set_registry_notification_reply;\n    struct create_timer_reply create_timer_reply;\n    struct open_timer_reply open_timer_reply;\n    struct set_timer_reply set_timer_reply;\n    struct cancel_timer_reply cancel_timer_reply;\n    struct get_timer_info_reply get_timer_info_reply;\n    struct get_thread_context_reply get_thread_context_reply;\n    struct set_thread_context_reply set_thread_context_reply;\n    struct get_selector_entry_reply get_selector_entry_reply;\n    struct add_atom_reply add_atom_reply;\n    struct delete_atom_reply delete_atom_reply;\n    struct find_atom_reply find_atom_reply;\n    struct get_atom_information_reply get_atom_information_reply;\n    struct set_atom_information_reply set_atom_information_reply;\n    struct empty_atom_table_reply empty_atom_table_reply;\n    struct init_atom_table_reply init_atom_table_reply;\n    struct get_msg_queue_reply get_msg_queue_reply;\n    struct set_queue_fd_reply set_queue_fd_reply;\n    struct set_queue_mask_reply set_queue_mask_reply;\n    struct get_queue_status_reply get_queue_status_reply;\n    struct get_process_idle_event_reply get_process_idle_event_reply;\n    struct send_message_reply send_message_reply;\n    struct post_quit_message_reply post_quit_message_reply;\n    struct send_hardware_message_reply send_hardware_message_reply;\n    struct get_message_reply get_message_reply;\n    struct reply_message_reply reply_message_reply;\n    struct accept_hardware_message_reply accept_hardware_message_reply;\n    struct get_message_reply_reply get_message_reply_reply;\n    struct set_win_timer_reply set_win_timer_reply;\n    struct kill_win_timer_reply kill_win_timer_reply;\n    struct is_window_hung_reply is_window_hung_reply;\n    struct get_serial_info_reply get_serial_info_reply;\n    struct set_serial_info_reply set_serial_info_reply;\n    struct register_async_reply register_async_reply;\n    struct cancel_async_reply cancel_async_reply;\n    struct get_async_result_reply get_async_result_reply;\n    struct read_reply read_reply;\n    struct write_reply write_reply;\n    struct ioctl_reply ioctl_reply;\n    struct set_irp_result_reply set_irp_result_reply;\n    struct create_named_pipe_reply create_named_pipe_reply;\n    struct get_named_pipe_info_reply get_named_pipe_info_reply;\n    struct set_named_pipe_info_reply set_named_pipe_info_reply;\n    struct create_window_reply create_window_reply;\n    struct destroy_window_reply destroy_window_reply;\n    struct get_desktop_window_reply get_desktop_window_reply;\n    struct set_window_owner_reply set_window_owner_reply;\n    struct get_window_info_reply get_window_info_reply;\n    struct set_window_info_reply set_window_info_reply;\n    struct set_parent_reply set_parent_reply;\n    struct get_window_parents_reply get_window_parents_reply;\n    struct get_window_children_reply get_window_children_reply;\n    struct get_window_children_from_point_reply get_window_children_from_point_reply;\n    struct get_window_tree_reply get_window_tree_reply;\n    struct set_window_pos_reply set_window_pos_reply;\n    struct get_window_rectangles_reply get_window_rectangles_reply;\n    struct get_window_text_reply get_window_text_reply;\n    struct set_window_text_reply set_window_text_reply;\n    struct get_windows_offset_reply get_windows_offset_reply;\n    struct get_visible_region_reply get_visible_region_reply;\n    struct get_surface_region_reply get_surface_region_reply;\n    struct get_window_region_reply get_window_region_reply;\n    struct set_window_region_reply set_window_region_reply;\n    struct get_update_region_reply get_update_region_reply;\n    struct update_window_zorder_reply update_window_zorder_reply;\n    struct redraw_window_reply redraw_window_reply;\n    struct set_window_property_reply set_window_property_reply;\n    struct remove_window_property_reply remove_window_property_reply;\n    struct get_window_property_reply get_window_property_reply;\n    struct get_window_properties_reply get_window_properties_reply;\n    struct create_winstation_reply create_winstation_reply;\n    struct open_winstation_reply open_winstation_reply;\n    struct close_winstation_reply close_winstation_reply;\n    struct get_process_winstation_reply get_process_winstation_reply;\n    struct set_process_winstation_reply set_process_winstation_reply;\n    struct enum_winstation_reply enum_winstation_reply;\n    struct create_desktop_reply create_desktop_reply;\n    struct open_desktop_reply open_desktop_reply;\n    struct open_input_desktop_reply open_input_desktop_reply;\n    struct close_desktop_reply close_desktop_reply;\n    struct get_thread_desktop_reply get_thread_desktop_reply;\n    struct set_thread_desktop_reply set_thread_desktop_reply;\n    struct enum_desktop_reply enum_desktop_reply;\n    struct set_user_object_info_reply set_user_object_info_reply;\n    struct register_hotkey_reply register_hotkey_reply;\n    struct unregister_hotkey_reply unregister_hotkey_reply;\n    struct attach_thread_input_reply attach_thread_input_reply;\n    struct get_thread_input_reply get_thread_input_reply;\n    struct get_last_input_time_reply get_last_input_time_reply;\n    struct get_key_state_reply get_key_state_reply;\n    struct set_key_state_reply set_key_state_reply;\n    struct set_foreground_window_reply set_foreground_window_reply;\n    struct set_focus_window_reply set_focus_window_reply;\n    struct set_active_window_reply set_active_window_reply;\n    struct set_capture_window_reply set_capture_window_reply;\n    struct set_caret_window_reply set_caret_window_reply;\n    struct set_caret_info_reply set_caret_info_reply;\n    struct set_hook_reply set_hook_reply;\n    struct remove_hook_reply remove_hook_reply;\n    struct start_hook_chain_reply start_hook_chain_reply;\n    struct finish_hook_chain_reply finish_hook_chain_reply;\n    struct get_hook_info_reply get_hook_info_reply;\n    struct create_class_reply create_class_reply;\n    struct destroy_class_reply destroy_class_reply;\n    struct set_class_info_reply set_class_info_reply;\n    struct open_clipboard_reply open_clipboard_reply;\n    struct close_clipboard_reply close_clipboard_reply;\n    struct empty_clipboard_reply empty_clipboard_reply;\n    struct set_clipboard_data_reply set_clipboard_data_reply;\n    struct get_clipboard_data_reply get_clipboard_data_reply;\n    struct get_clipboard_formats_reply get_clipboard_formats_reply;\n    struct enum_clipboard_formats_reply enum_clipboard_formats_reply;\n    struct release_clipboard_reply release_clipboard_reply;\n    struct get_clipboard_info_reply get_clipboard_info_reply;\n    struct set_clipboard_viewer_reply set_clipboard_viewer_reply;\n    struct add_clipboard_listener_reply add_clipboard_listener_reply;\n    struct remove_clipboard_listener_reply remove_clipboard_listener_reply;\n    struct open_token_reply open_token_reply;\n    struct set_global_windows_reply set_global_windows_reply;\n    struct adjust_token_privileges_reply adjust_token_privileges_reply;\n    struct get_token_privileges_reply get_token_privileges_reply;\n    struct check_token_privileges_reply check_token_privileges_reply;\n    struct duplicate_token_reply duplicate_token_reply;\n    struct access_check_reply access_check_reply;\n    struct get_token_sid_reply get_token_sid_reply;\n    struct get_token_groups_reply get_token_groups_reply;\n    struct get_token_default_dacl_reply get_token_default_dacl_reply;\n    struct set_token_default_dacl_reply set_token_default_dacl_reply;\n    struct set_security_object_reply set_security_object_reply;\n    struct get_security_object_reply get_security_object_reply;\n    struct get_system_handles_reply get_system_handles_reply;\n    struct create_mailslot_reply create_mailslot_reply;\n    struct set_mailslot_info_reply set_mailslot_info_reply;\n    struct create_directory_reply create_directory_reply;\n    struct open_directory_reply open_directory_reply;\n    struct get_directory_entry_reply get_directory_entry_reply;\n    struct create_symlink_reply create_symlink_reply;\n    struct open_symlink_reply open_symlink_reply;\n    struct query_symlink_reply query_symlink_reply;\n    struct get_object_info_reply get_object_info_reply;\n    struct get_object_type_reply get_object_type_reply;\n    struct unlink_object_reply unlink_object_reply;\n    struct get_token_impersonation_level_reply get_token_impersonation_level_reply;\n    struct allocate_locally_unique_id_reply allocate_locally_unique_id_reply;\n    struct create_device_manager_reply create_device_manager_reply;\n    struct create_device_reply create_device_reply;\n    struct delete_device_reply delete_device_reply;\n    struct get_next_device_request_reply get_next_device_request_reply;\n    struct make_process_system_reply make_process_system_reply;\n    struct get_token_statistics_reply get_token_statistics_reply;\n    struct create_completion_reply create_completion_reply;\n    struct open_completion_reply open_completion_reply;\n    struct add_completion_reply add_completion_reply;\n    struct remove_completion_reply remove_completion_reply;\n    struct query_completion_reply query_completion_reply;\n    struct set_completion_info_reply set_completion_info_reply;\n    struct add_fd_completion_reply add_fd_completion_reply;\n    struct set_fd_disp_info_reply set_fd_disp_info_reply;\n    struct set_fd_name_info_reply set_fd_name_info_reply;\n    struct get_window_layered_info_reply get_window_layered_info_reply;\n    struct set_window_layered_info_reply set_window_layered_info_reply;\n    struct alloc_user_handle_reply alloc_user_handle_reply;\n    struct free_user_handle_reply free_user_handle_reply;\n    struct set_cursor_reply set_cursor_reply;\n    struct update_rawinput_devices_reply update_rawinput_devices_reply;\n    struct get_suspend_context_reply get_suspend_context_reply;\n    struct set_suspend_context_reply set_suspend_context_reply;\n    struct create_job_reply create_job_reply;\n    struct open_job_reply open_job_reply;\n    struct assign_job_reply assign_job_reply;\n    struct process_in_job_reply process_in_job_reply;\n    struct set_job_limits_reply set_job_limits_reply;\n    struct set_job_completion_port_reply set_job_completion_port_reply;\n    struct terminate_job_reply terminate_job_reply;\n};\n\n#define SERVER_PROTOCOL_VERSION 559\n\n#endif /* __WINE_WINE_SERVER_PROTOCOL_H */\n"
  },
  {
    "path": "wine/wine/unicode.h",
    "content": "/*\n * Wine internal Unicode definitions\n *\n * Copyright 2000 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINE_UNICODE_H\n#define __WINE_WINE_UNICODE_H\n\n#include <stdarg.h>\n\n#include <windef.h>\n#include <winbase.h>\n#include <winnls.h>\n\n#ifdef __WINE_WINE_TEST_H\n#error This file should not be used in Wine tests\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef WINE_UNICODE_API\n# if defined(_MSC_VER)\n#  define WINE_UNICODE_API DECLSPEC_IMPORT\n# else\n#  define WINE_UNICODE_API\n# endif\n#endif\n\n#ifndef WINE_UNICODE_INLINE\n#define WINE_UNICODE_INLINE static inline\n#endif\n\n/* code page info common to SBCS and DBCS */\nstruct cp_info\n{\n    unsigned int          codepage;          /* codepage id */\n    unsigned int          char_size;         /* char size (1 or 2 bytes) */\n    WCHAR                 def_char;          /* default char value (can be double-byte) */\n    WCHAR                 def_unicode_char;  /* default Unicode char value */\n    const char           *name;              /* code page name */\n};\n\nstruct sbcs_table\n{\n    struct cp_info        info;\n    const WCHAR          *cp2uni;            /* code page -> Unicode map */\n    const WCHAR          *cp2uni_glyphs;     /* code page -> Unicode map with glyph chars */\n    const unsigned char  *uni2cp_low;        /* Unicode -> code page map */\n    const unsigned short *uni2cp_high;\n};\n\nstruct dbcs_table\n{\n    struct cp_info        info;\n    const WCHAR          *cp2uni;            /* code page -> Unicode map */\n    const unsigned char  *cp2uni_leadbytes;\n    const unsigned short *uni2cp_low;        /* Unicode -> code page map */\n    const unsigned short *uni2cp_high;\n    unsigned char         lead_bytes[12];    /* lead bytes ranges */\n};\n\nunion cptable\n{\n    struct cp_info    info;\n    struct sbcs_table sbcs;\n    struct dbcs_table dbcs;\n};\n\nextern const union cptable *wine_cp_get_table( unsigned int codepage );\nextern const union cptable *wine_cp_enum_table( unsigned int index );\n\nextern int wine_cp_mbstowcs( const union cptable *table, int flags,\n                             const char *src, int srclen,\n                             WCHAR *dst, int dstlen );\nextern int wine_cp_wcstombs( const union cptable *table, int flags,\n                             const WCHAR *src, int srclen,\n                             char *dst, int dstlen, const char *defchar, int *used );\nextern int wine_cpsymbol_mbstowcs( const char *src, int srclen, WCHAR *dst, int dstlen );\nextern int wine_cpsymbol_wcstombs( const WCHAR *src, int srclen, char *dst, int dstlen );\nextern int wine_utf8_mbstowcs( int flags, const char *src, int srclen, WCHAR *dst, int dstlen );\nextern int wine_utf8_wcstombs( int flags, const WCHAR *src, int srclen, char *dst, int dstlen );\n\nextern int wine_compare_string( int flags, const WCHAR *str1, int len1, const WCHAR *str2, int len2 );\nextern int wine_get_sortkey( int flags, const WCHAR *src, int srclen, char *dst, int dstlen );\nextern int wine_fold_string( int flags, const WCHAR *src, int srclen , WCHAR *dst, int dstlen );\n\nextern int strcmpiW( const WCHAR *str1, const WCHAR *str2 );\nextern int strncmpiW( const WCHAR *str1, const WCHAR *str2, int n );\nextern int memicmpW( const WCHAR *str1, const WCHAR *str2, int n );\nextern WCHAR *strstrW( const WCHAR *str, const WCHAR *sub );\nextern long int strtolW( const WCHAR *nptr, WCHAR **endptr, int base );\nextern unsigned long int strtoulW( const WCHAR *nptr, WCHAR **endptr, int base );\nextern int sprintfW( WCHAR *str, const WCHAR *format, ... );\nextern int snprintfW( WCHAR *str, size_t len, const WCHAR *format, ... );\nextern int vsprintfW( WCHAR *str, const WCHAR *format, va_list valist );\nextern int vsnprintfW( WCHAR *str, size_t len, const WCHAR *format, va_list valist );\n\nWINE_UNICODE_INLINE int wine_is_dbcs_leadbyte( const union cptable *table, unsigned char ch )\n{\n    return (table->info.char_size == 2) && (table->dbcs.cp2uni_leadbytes[ch]);\n}\n\nWINE_UNICODE_INLINE WCHAR tolowerW( WCHAR ch )\n{\n    extern WINE_UNICODE_API const WCHAR wine_casemap_lower[];\n    return ch + wine_casemap_lower[wine_casemap_lower[ch >> 8] + (ch & 0xff)];\n}\n\nWINE_UNICODE_INLINE WCHAR toupperW( WCHAR ch )\n{\n    extern WINE_UNICODE_API const WCHAR wine_casemap_upper[];\n    return ch + wine_casemap_upper[wine_casemap_upper[ch >> 8] + (ch & 0xff)];\n}\n\n/* the character type contains the C1_* flags in the low 12 bits */\n/* and the C2_* type in the high 4 bits */\nWINE_UNICODE_INLINE unsigned short get_char_typeW( WCHAR ch )\n{\n    extern WINE_UNICODE_API const unsigned short wine_wctype_table[];\n    return wine_wctype_table[wine_wctype_table[ch >> 8] + (ch & 0xff)];\n}\n\nWINE_UNICODE_INLINE int iscntrlW( WCHAR wc )\n{\n    return get_char_typeW(wc) & C1_CNTRL;\n}\n\nWINE_UNICODE_INLINE int ispunctW( WCHAR wc )\n{\n    return get_char_typeW(wc) & C1_PUNCT;\n}\n\nWINE_UNICODE_INLINE int isspaceW( WCHAR wc )\n{\n    return get_char_typeW(wc) & C1_SPACE;\n}\n\nWINE_UNICODE_INLINE int isdigitW( WCHAR wc )\n{\n    return get_char_typeW(wc) & C1_DIGIT;\n}\n\nWINE_UNICODE_INLINE int isxdigitW( WCHAR wc )\n{\n    return get_char_typeW(wc) & C1_XDIGIT;\n}\n\nWINE_UNICODE_INLINE int islowerW( WCHAR wc )\n{\n    return get_char_typeW(wc) & C1_LOWER;\n}\n\nWINE_UNICODE_INLINE int isupperW( WCHAR wc )\n{\n    return get_char_typeW(wc) & C1_UPPER;\n}\n\nWINE_UNICODE_INLINE int isalnumW( WCHAR wc )\n{\n    return get_char_typeW(wc) & (C1_ALPHA|C1_DIGIT|C1_LOWER|C1_UPPER);\n}\n\nWINE_UNICODE_INLINE int isalphaW( WCHAR wc )\n{\n    return get_char_typeW(wc) & (C1_ALPHA|C1_LOWER|C1_UPPER);\n}\n\nWINE_UNICODE_INLINE int isgraphW( WCHAR wc )\n{\n    return get_char_typeW(wc) & (C1_ALPHA|C1_PUNCT|C1_DIGIT|C1_LOWER|C1_UPPER);\n}\n\nWINE_UNICODE_INLINE int isprintW( WCHAR wc )\n{\n    return get_char_typeW(wc) & (C1_ALPHA|C1_BLANK|C1_PUNCT|C1_DIGIT|C1_LOWER|C1_UPPER);\n}\n\n/* some useful string manipulation routines */\n\nWINE_UNICODE_INLINE unsigned int strlenW( const WCHAR *str )\n{\n    const WCHAR *s = str;\n    while (*s) s++;\n    return s - str;\n}\n\nWINE_UNICODE_INLINE WCHAR *strcpyW( WCHAR *dst, const WCHAR *src )\n{\n    WCHAR *p = dst;\n    while ((*p++ = *src++));\n    return dst;\n}\n\n/* strncpy doesn't do what you think, don't use it */\n#define strncpyW(d,s,n) error do_not_use_strncpyW_use_lstrcpynW_or_memcpy_instead\n\nWINE_UNICODE_INLINE int strcmpW( const WCHAR *str1, const WCHAR *str2 )\n{\n    while (*str1 && (*str1 == *str2)) { str1++; str2++; }\n    return *str1 - *str2;\n}\n\nWINE_UNICODE_INLINE int strncmpW( const WCHAR *str1, const WCHAR *str2, int n )\n{\n    if (n <= 0) return 0;\n    while ((--n > 0) && *str1 && (*str1 == *str2)) { str1++; str2++; }\n    return *str1 - *str2;\n}\n\nWINE_UNICODE_INLINE WCHAR *strcatW( WCHAR *dst, const WCHAR *src )\n{\n    strcpyW( dst + strlenW(dst), src );\n    return dst;\n}\n\nWINE_UNICODE_INLINE WCHAR *strchrW( const WCHAR *str, WCHAR ch )\n{\n    do { if (*str == ch) return (WCHAR *)(ULONG_PTR)str; } while (*str++);\n    return NULL;\n}\n\nWINE_UNICODE_INLINE WCHAR *strrchrW( const WCHAR *str, WCHAR ch )\n{\n    WCHAR *ret = NULL;\n    do { if (*str == ch) ret = (WCHAR *)(ULONG_PTR)str; } while (*str++);\n    return ret;\n}\n\nWINE_UNICODE_INLINE WCHAR *strpbrkW( const WCHAR *str, const WCHAR *accept )\n{\n    for ( ; *str; str++) if (strchrW( accept, *str )) return (WCHAR *)(ULONG_PTR)str;\n    return NULL;\n}\n\nWINE_UNICODE_INLINE size_t strspnW( const WCHAR *str, const WCHAR *accept )\n{\n    const WCHAR *ptr;\n    for (ptr = str; *ptr; ptr++) if (!strchrW( accept, *ptr )) break;\n    return ptr - str;\n}\n\nWINE_UNICODE_INLINE size_t strcspnW( const WCHAR *str, const WCHAR *reject )\n{\n    const WCHAR *ptr;\n    for (ptr = str; *ptr; ptr++) if (strchrW( reject, *ptr )) break;\n    return ptr - str;\n}\n\nWINE_UNICODE_INLINE WCHAR *strlwrW( WCHAR *str )\n{\n    WCHAR *ret;\n    for (ret = str; *str; str++) *str = tolowerW(*str);\n    return ret;\n}\n\nWINE_UNICODE_INLINE WCHAR *struprW( WCHAR *str )\n{\n    WCHAR *ret;\n    for (ret = str; *str; str++) *str = toupperW(*str);\n    return ret;\n}\n\nWINE_UNICODE_INLINE WCHAR *memchrW( const WCHAR *ptr, WCHAR ch, size_t n )\n{\n    const WCHAR *end;\n    for (end = ptr + n; ptr < end; ptr++) if (*ptr == ch) return (WCHAR *)(ULONG_PTR)ptr;\n    return NULL;\n}\n\nWINE_UNICODE_INLINE WCHAR *memrchrW( const WCHAR *ptr, WCHAR ch, size_t n )\n{\n    const WCHAR *end;\n    WCHAR *ret = NULL;\n    for (end = ptr + n; ptr < end; ptr++) if (*ptr == ch) ret = (WCHAR *)(ULONG_PTR)ptr;\n    return ret;\n}\n\nWINE_UNICODE_INLINE long int atolW( const WCHAR *str )\n{\n    return strtolW( str, (WCHAR **)0, 10 );\n}\n\nWINE_UNICODE_INLINE int atoiW( const WCHAR *str )\n{\n    return (int)atolW( str );\n}\n\n#undef WINE_UNICODE_INLINE\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  /* __WINE_WINE_UNICODE_H */\n"
  },
  {
    "path": "wine/wine/winaspi.h",
    "content": "/*\n * This file should be source compatible with the Adaptec winaspi.h\n * All DOS ASPI structures are the same as WINASPI\n *\n * Copyright (C) 2000 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINASPI_H__\n#define __WINASPI_H__\n\n/* Include base aspi defs */\n#include <windows/wnaspi32.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* #ifdef __cplusplus */\n\n/* WINE SCSI Stuff */\n#define ASPI_DOS        1\n#define ASPI_WIN16      2\n\n#include <pshpack1.h>\n\n/* SRB HA_INQUIRY */\n\ntypedef struct tagSRB16_HaInquiry {\n  BYTE\tSRB_Cmd;\n  BYTE\tSRB_Status;\n  BYTE\tSRB_HaId;\n  BYTE\tSRB_Flags;\n  WORD\tSRB_55AASignature;\n  WORD\tSRB_ExtBufferSize;\n  BYTE\tHA_Count;\n  BYTE\tHA_SCSI_ID;\n  BYTE\tHA_ManagerId[16];\n  BYTE\tHA_Identifier[16];\n  BYTE\tHA_Unique[16];\n  BYTE\tHA_ExtBuffer[4];\n} SRB_HaInquiry16, *PSRB_HaInquiry16, *LPSRB_HaInquiry16;\n\ntypedef struct tagSRB16_GDEVBlock {\n  BYTE        SRB_Cmd;            /* ASPI command code = SC_GET_DEV_TYPE */\n  BYTE        SRB_Status;         /* ASPI command status byte */\n  BYTE        SRB_HaId;           /* ASPI host adapter number */\n  BYTE        SRB_Flags;          /* ASPI request flags */\n  DWORD       SRB_Hdr_Rsvd;       /* Reserved, MUST = 0 */\n  BYTE        SRB_Target;         /* Target's SCSI ID */\n  BYTE        SRB_Lun;            /* Target's LUN number */\n  BYTE        SRB_DeviceType;     /* Target's peripheral device type */\n} SRB_GDEVBlock16, *PSRB_GDEVBlock16, *LPSRB_GDEVBlock16;\n\n\ntypedef struct tagSRB16_ExecSCSICmd {\n  BYTE        SRB_Cmd;                /* ASPI command code\t      (W)  */\n  BYTE        SRB_Status;             /* ASPI command status byte     (R)  */\n  BYTE        SRB_HaId;               /* ASPI host adapter number     (W)  */\n  BYTE        SRB_Flags;              /* ASPI request flags\t      (W)  */\n  DWORD       SRB_Hdr_Rsvd;           /* Reserved, MUST = 0\t      (-)  */\n  BYTE        SRB_Target;             /* Target's SCSI ID\t      (W)  */\n  BYTE        SRB_Lun;                /* Target's LUN number\t      (W)  */\n  DWORD       SRB_BufLen;             /* Data Allocation LengthPG     (W/R)*/\n  BYTE        SRB_SenseLen;           /* Sense Allocation Length      (W)  */\n  SEGPTR      SRB_BufPointer;         /* Data Buffer Pointer\t      (W)  */\n  DWORD       SRB_Rsvd1;              /* Reserved, MUST = 0\t      (-/W)*/\n  BYTE        SRB_CDBLen;             /* CDB Length = 6\t\t      (W)  */\n  BYTE        SRB_HaStat;             /* Host Adapter Status\t      (R)  */\n  BYTE        SRB_TargStat;           /* Target Status\t\t      (R)  */\n  FARPROC16   SRB_PostProc;\t      /* Post routine\t\t      (W)  */\n  BYTE        SRB_Rsvd2[34];          /* Reserved, MUST = 0                */\n  BYTE\t\tCDBByte[1];\t      /* SCSI CBD - variable length   (W)  */\n  /* variable example for 6 byte cbd\n   * BYTE        CDBByte[6];             * SCSI CDB                    (W) *\n   * BYTE        SenseArea6[SENSE_LEN];  * Request Sense buffer \t(R) *\n   */\n} SRB_ExecSCSICmd16, *PSRB_ExecSCSICmd16, *LPSRB_ExecSCSICmd16;\n\ntypedef struct tagSRB16_Abort {\n  BYTE        SRB_Cmd;            /* ASPI command code = SC_ABORT_SRB */\n  BYTE        SRB_Status;         /* ASPI command status byte */\n  BYTE        SRB_HaId;           /* ASPI host adapter number */\n  BYTE        SRB_Flags;          /* ASPI request flags */\n  DWORD       SRB_Hdr_Rsvd;       /* Reserved, MUST = 0 */\n  SEGPTR      SRB_ToAbort;        /* Pointer to SRB to abort */\n} SRB_Abort16, *PSRB_Abort16, *LPSRB_Abort16;\n\n\ntypedef struct tagSRB16_BusDeviceReset {\n  BYTE        SRB_Cmd;            /* ASPI command code = SC_RESET_DEV */\n  BYTE        SRB_Status;         /* ASPI command status byte */\n  BYTE        SRB_HaId;           /* ASPI host adapter number */\n  BYTE        SRB_Flags;          /* ASPI request flags */\n  DWORD       SRB_Hdr_Rsvd;       /* Reserved, MUST = 0 */\n  BYTE        SRB_Target;         /* Target's SCSI ID */\n  BYTE        SRB_Lun;            /* Target's LUN number */\n  BYTE        SRB_ResetRsvd1[14]; /* Reserved, MUST = 0 */\n  BYTE        SRB_HaStat;         /* Host Adapter Status */\n  BYTE        SRB_TargStat;       /* Target Status */\n  FARPROC16   SRB_PostProc;       /* Post routine */\n  BYTE        SRB_ResetRsvd2[34]; /* Reserved, MUST = 0 */\n} SRB_BusDeviceReset16, *PSRB_BusDeviceReset16, *LPSRB_BusDeviceReset16;\n\n\ntypedef struct tagSRB16_Common {\n  BYTE        SRB_Cmd;            /* ASPI command code = SC_ABORT_SRB */\n  BYTE        SRB_Status;         /* ASPI command status byte */\n  BYTE        SRB_HaId;           /* ASPI host adapter number */\n  BYTE        SRB_Flags;          /* ASPI request flags */\n  DWORD       SRB_Hdr_Rsvd;       /* Reserved, MUST = 0 */\n} SRB_Common16, *PSRB_Common16, *LPSRB_Common16;\n\ntypedef union tagSRB16 {\n    SRB_Common16          common;\n    SRB_HaInquiry16       inquiry;\n    SRB_ExecSCSICmd16     cmd;\n    SRB_Abort16           abort;\n    SRB_BusDeviceReset16  reset;\n    SRB_GDEVBlock16       devtype;\n} SRB16, *LPSRB16;\n\n#include <poppack.h>\n\nextern WORD WINAPI SendASPICommand16(SEGPTR);\nextern WORD WINAPI GetASPISupportInfo16(void);\n\n#ifdef __cplusplus\n}\n#endif /* #ifdef __cplusplus */\n\n#endif /* __WINE_WINASPI_H */\n"
  },
  {
    "path": "wine/wine/winbase16.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINE_WINBASE16_H\n#define __WINE_WINE_WINBASE16_H\n\n#include <stdarg.h>\n#include <windef.h>\n#include <winbase.h>\n#include <winnls.h>\n#include <wine/windef16.h>\n#include <wine/library.h>\n\n#include <pshpack1.h>\n\n/* Process database (i.e. a normal DOS PSP) */\ntypedef struct\n{\n    WORD      int20;            /* 00 int 20h instruction */\n    WORD      nextParagraph;    /* 02 Segment of next paragraph */\n    BYTE      reserved1;\n    BYTE      dispatcher[5];    /* 05 Long call to DOS */\n    FARPROC16 savedint22;       /* 0a Saved int 22h handler */\n    FARPROC16 savedint23;       /* 0e Saved int 23h handler */\n    FARPROC16 savedint24;       /* 12 Saved int 24h handler */\n    WORD      parentPSP;        /* 16 Selector of parent PSP */\n    BYTE      fileHandles[20];  /* 18 Open file handles */\n    HANDLE16  environment;      /* 2c Selector of environment */\n    DWORD     saveStack;        /* 2e SS:SP on last int21 call */\n    WORD      nbFiles;          /* 32 Number of file handles */\n    SEGPTR    fileHandlesPtr;   /* 34 Pointer to file handle table */\n    HANDLE16  hFileHandles;     /* 38 Handle to fileHandlesPtr */\n    WORD      reserved3[17];\n    BYTE      fcb1[16];         /* 5c First FCB */\n    BYTE      fcb2[20];         /* 6c Second FCB */\n    BYTE      cmdLine[128];     /* 80 Command-line (first byte is len)*/\n    BYTE      padding[16];      /* Some apps access beyond the end of the cmd line */\n} PDB16;\n\n/* Task database. See 'Windows Internals' p. 226.\n * Note that 16-bit OLE 2 libs like to read it directly\n * so we have to keep entry offsets as they are.\n */\ntypedef struct _TDB\n{\n    HTASK16   hNext;              /* 00 Selector of next TDB */\n    DWORD     ss_sp;              /* 02 Stack pointer of task */\n    WORD      nEvents;            /* 06 Events for this task */\n    INT16     priority;           /* 08 Task priority, -32..15 */\n    WORD      unused1;            /* 0a */\n    HTASK16   hSelf;              /* 0c Selector of this TDB */\n    HANDLE16  hPrevInstance;      /* 0e Previous instance of module */\n    DWORD     unused2;            /* 10 */\n    WORD      ctrlword8087;       /* 14 80x87 control word */\n    WORD      flags;              /* 16 Task flags */\n    UINT16    error_mode;         /* 18 Error mode (see SetErrorMode)*/\n    WORD      version;            /* 1a Expected Windows version */\n    HANDLE16  hInstance;          /* 1c Instance handle for task */\n    HMODULE16 hModule;            /* 1e Module handle */\n    HQUEUE16  hQueue;             /* 20 Selector of task queue */\n    HTASK16   hParent;            /* 22 Selector of TDB of parent */\n    WORD      signal_flags;       /* 24 Flags for signal handler */\n    FARPROC16 sighandler;         /* 26 Signal handler */\n    FARPROC16 userhandler;        /* 2a USER signal handler */\n    FARPROC16 discardhandler;     /* 2e Handler for GlobalNotify() */\n    FARPROC16 int0;               /* 32 int 0 (divide by 0) handler */\n    FARPROC16 int2;               /* 36 int 2 (NMI) handler */\n    FARPROC16 int4;               /* 3a int 4 (INTO) handler */\n    FARPROC16 int6;               /* 3e int 6 (invalid opc) handler */\n    FARPROC16 int7;               /* 42 int 7 (coprocessor) handler */\n    FARPROC16 int3e;              /* 46 int 3e (80x87 emu) handler */\n    FARPROC16 int75;              /* 4a int 75 (80x87 error) handler */\n    DWORD     compat_flags;       /* 4e Compatibility flags */\n    BYTE      unused4[2];         /* 52 */\n    struct _TEB *teb;             /* 54 Pointer to thread database */\n    BYTE      unused5[8];         /* 58 */\n    HANDLE16  hPDB;               /* 60 Selector of PDB (i.e. PSP) */\n    SEGPTR    dta;                /* 62 Current DTA */\n    BYTE      curdrive;           /* 66 Current drive */\n    CHAR      curdir[65];         /* 67 Current directory */\n    WORD      nCmdShow;           /* a8 cmdShow parameter to WinMain */\n    HTASK16   hYieldTo;           /* aa Next task to schedule */\n    DWORD     dlls_to_init;       /* ac Ptr to DLLs to initialize */\n    HANDLE16  hCSAlias;           /* b0 Code segment for this TDB */\n    WORD      thunks[8*4];        /* b2 Make proc instance thunks */\n    CHAR      module_name[8];     /* f2 Module name for task */\n    WORD      magic;              /* fa TDB signature */\n    HANDLE    hEvent;             /* fc scheduler event handle */\n    PDB16     pdb;                /* 100 PDB for this task */\n} TDB;\n\n/* TDB flags */\n#define TDBF_WINOLDAP   0x0001\n#define TDBF_OS2APP     0x0008\n#define TDBF_WIN32      0x0010\n\n/* Windows 3.1 USER signals */\n#define USIG16_TERMINATION      0x0020\n#define USIG16_DLL_LOAD         0x0040\n#define USIG16_DLL_UNLOAD       0x0080\n#define USIG16_GPF              0x0666\n\ntypedef struct _SEGINFO {\n    UINT16    offSegment;\n    UINT16    cbSegment;\n    UINT16    flags;\n    UINT16    cbAlloc;\n    HGLOBAL16 h;\n    UINT16    alignShift;\n    UINT16    reserved[2];\n} SEGINFO;\n\n/* GetWinFlags */\n\n#define WF_PMODE \t0x0001\n#define WF_CPU286 \t0x0002\n#define\tWF_CPU386\t0x0004\n#define\tWF_CPU486 \t0x0008\n#define\tWF_STANDARD\t0x0010\n#define\tWF_WIN286 \t0x0010\n#define\tWF_ENHANCED\t0x0020\n#define\tWF_WIN386\t0x0020\n#define\tWF_CPU086\t0x0040\n#define\tWF_CPU186\t0x0080\n#define\tWF_LARGEFRAME\t0x0100\n#define\tWF_SMALLFRAME\t0x0200\n#define\tWF_80x87\t0x0400\n#define\tWF_PAGING\t0x0800\n#define\tWF_HASCPUID     0x2000\n#define\tWF_WIN32WOW     0x4000\t/* undoc */\n#define\tWF_WLO          0x8000\n\n/* Parameters for LoadModule() */\ntypedef struct\n{\n    HGLOBAL16 hEnvironment; /* Environment segment */\n    SEGPTR    cmdLine;      /* Command-line */\n    SEGPTR    showCmd;      /* Code for ShowWindow() */\n    SEGPTR    reserved;\n} LOADPARAMS16;\n\n/* Debugging support (DEBUG SYSTEM ONLY) */\ntypedef struct\n{\n    WORD    flags;\n    DWORD   dwOptions;\n    DWORD   dwFilter;\n    CHAR    achAllocModule[8];\n    DWORD   dwAllocBreak;\n    DWORD   dwAllocCount;\n} WINDEBUGINFO16, *LPWINDEBUGINFO16;\n\n/* definitions specific to Wine 16-bit relaying support */\n\n/* 32-bit stack layout after __wine_call_to_16() */\ntypedef struct _STACK32FRAME\n{\n    DWORD   restore_addr;   /* 00 return address for restoring code selector */\n    DWORD   codeselector;   /* 04 code selector to restore */\n    EXCEPTION_REGISTRATION_RECORD frame;  /* 08 Exception frame */\n    SEGPTR  frame16;        /* 10 16-bit frame from last CallFrom16() */\n    DWORD   edi;            /* 14 saved registers */\n    DWORD   esi;            /* 18 */\n    DWORD   ebx;            /* 1c */\n    DWORD   ebp;            /* 20 saved 32-bit frame pointer */\n    DWORD   retaddr;        /* 24 return address */\n    DWORD   target;         /* 28 target address / CONTEXT86 pointer */\n    DWORD   nb_args;        /* 2c number of 16-bit argument bytes */\n} STACK32FRAME;\n\n/* 16-bit stack layout after __wine_call_from_16() */\ntypedef struct _STACK16FRAME\n{\n    STACK32FRAME *frame32;        /* 00 32-bit frame from last CallTo16() */\n    DWORD         edx;            /* 04 saved registers */\n    DWORD         ecx;            /* 08 */\n    DWORD         ebp;            /* 0c */\n    WORD          ds;             /* 10 */\n    WORD          es;             /* 12 */\n    WORD          fs;             /* 14 */\n    WORD          gs;             /* 16 */\n    DWORD         callfrom_ip;    /* 18 callfrom tail IP */\n    DWORD         module_cs;      /* 1c module code segment */\n    DWORD         relay;          /* 20 relay function address */\n    WORD          entry_ip;       /* 22 entry point IP */\n    DWORD         entry_point;    /* 26 API entry point to call, reused as mutex count */\n    WORD          bp;             /* 2a 16-bit stack frame chain */\n    WORD          ip;             /* 2c return address */\n    WORD          cs;             /* 2e */\n} STACK16FRAME;\n\n/* argument type flags for relay debugging */\nenum arg_types\n{\n    ARG_NONE = 0, /* indicates end of arg list */\n    ARG_WORD,     /* unsigned word */\n    ARG_SWORD,    /* signed word */\n    ARG_LONG,     /* long or segmented pointer */\n    ARG_PTR,      /* linear pointer */\n    ARG_STR,      /* linear pointer to null-terminated string */\n    ARG_SEGSTR,   /* segmented pointer to null-terminated string */\n    ARG_VARARG    /* start of varargs */\n};\n\n#define INVALID_HANDLE_VALUE16  ((HANDLE16) -1)\n#define INFINITE16      0xFFFF\n\ntypedef struct {\n        DWORD dwOSVersionInfoSize;\n        DWORD dwMajorVersion;\n        DWORD dwMinorVersion;\n        DWORD dwBuildNumber;\n        DWORD dwPlatformId;\n        CHAR szCSDVersion[128];\n} OSVERSIONINFO16;\n\n\n/*\n * NE Header FORMAT FLAGS\n */\n#define NE_FFLAGS_SINGLEDATA    0x0001\n#define NE_FFLAGS_MULTIPLEDATA  0x0002\n#define NE_FFLAGS_WIN32         0x0010\n#define NE_FFLAGS_BUILTIN       0x0020  /* Wine built-in module */\n#define NE_FFLAGS_FRAMEBUF      0x0100  /* OS/2 fullscreen app */\n#define NE_FFLAGS_CONSOLE       0x0200  /* OS/2 console app */\n#define NE_FFLAGS_GUI           0x0300  /* right, (NE_FFLAGS_FRAMEBUF | NE_FFLAGS_CONSOLE) */\n#define NE_FFLAGS_SELFLOAD      0x0800\n#define NE_FFLAGS_LINKERROR     0x2000\n#define NE_FFLAGS_CALLWEP       0x4000\n#define NE_FFLAGS_LIBMODULE     0x8000\n\n/*\n * NE Header OPERATING SYSTEM\n */\n#define NE_OSFLAGS_UNKNOWN      0x00\n#define NE_OSFLAGS_OS2          0x01\n#define NE_OSFLAGS_WINDOWS      0x02\n\n/*\n * NE Header ADDITIONAL FLAGS\n */\n#define NE_AFLAGS_WIN2_PROTMODE 0x02\n#define NE_AFLAGS_WIN2_PROFONTS 0x04\n#define NE_AFLAGS_FASTLOAD      0x08\n\n/*\n * Segment Flags\n */\n#define NE_SEGFLAGS_DATA        0x0001\n#define NE_SEGFLAGS_ALLOCATED   0x0002\n#define NE_SEGFLAGS_LOADED      0x0004\n#define NE_SEGFLAGS_ITERATED    0x0008\n#define NE_SEGFLAGS_MOVEABLE    0x0010\n#define NE_SEGFLAGS_SHAREABLE   0x0020\n#define NE_SEGFLAGS_PRELOAD     0x0040\n#define NE_SEGFLAGS_EXECUTEONLY 0x0080\n#define NE_SEGFLAGS_READONLY    0x0080\n#define NE_SEGFLAGS_RELOC_DATA  0x0100\n#define NE_SEGFLAGS_SELFLOAD    0x0800\n#define NE_SEGFLAGS_DISCARDABLE 0x1000\n#define NE_SEGFLAGS_32BIT       0x2000\n\n/*\n * Resource table structures.\n */\ntypedef struct\n{\n    WORD     offset;\n    WORD     length;\n    WORD     flags;\n    WORD     id;\n    HANDLE16 handle;\n    WORD     usage;\n} NE_NAMEINFO;\n\ntypedef struct\n{\n    WORD        type_id;   /* Type identifier */\n    WORD        count;     /* Number of resources of this type */\n    FARPROC16   resloader; /* SetResourceHandler() */\n    /*\n     * Name info array.\n     */\n} NE_TYPEINFO;\n\n#define NE_RSCTYPE_CURSOR             0x8001\n#define NE_RSCTYPE_BITMAP             0x8002\n#define NE_RSCTYPE_ICON               0x8003\n#define NE_RSCTYPE_MENU               0x8004\n#define NE_RSCTYPE_DIALOG             0x8005\n#define NE_RSCTYPE_STRING             0x8006\n#define NE_RSCTYPE_FONTDIR            0x8007\n#define NE_RSCTYPE_FONT               0x8008\n#define NE_RSCTYPE_ACCELERATOR        0x8009\n#define NE_RSCTYPE_RCDATA             0x800a\n#define NE_RSCTYPE_GROUP_CURSOR       0x800c\n#define NE_RSCTYPE_GROUP_ICON         0x800e\n#define NE_RSCTYPE_SCALABLE_FONTPATH  0x80cc   /* Resource found in .fot files */\n\n#include <poppack.h>\n\n#define __AHSHIFT  3  /* don't change! */\n#define __AHINCR   (1 << __AHSHIFT)\n\n/* undocumented functions */\n\ntypedef struct tagSYSLEVEL\n{\n    CRITICAL_SECTION crst;\n    INT              level;\n} SYSLEVEL;\n\n/* [GS]etProcessDword offsets */\n#define  GPD_APP_COMPAT_FLAGS    (-56)\n#define  GPD_LOAD_DONE_EVENT     (-52)\n#define  GPD_HINSTANCE16         (-48)\n#define  GPD_WINDOWS_VERSION     (-44)\n#define  GPD_THDB                (-40)\n#define  GPD_PDB                 (-36)\n#define  GPD_STARTF_SHELLDATA    (-32)\n#define  GPD_STARTF_HOTKEY       (-28)\n#define  GPD_STARTF_SHOWWINDOW   (-24)\n#define  GPD_STARTF_SIZE         (-20)\n#define  GPD_STARTF_POSITION     (-16)\n#define  GPD_STARTF_FLAGS        (-12)\n#define  GPD_PARENT              (- 8)\n#define  GPD_FLAGS               (- 4)\n#define  GPD_USERDATA            (  0)\n\nWORD        WINAPI AllocCStoDSAlias16(WORD);\nWORD        WINAPI AllocDStoCSAlias16(WORD);\nHGLOBAL16   WINAPI AllocResource16(HINSTANCE16,HRSRC16,DWORD);\nWORD        WINAPI AllocSelector16(WORD);\nWORD        WINAPI AllocSelectorArray16(WORD);\nVOID        WINAPI DirectedYield16(HTASK16);\nHGLOBAL16   WINAPI DirectResAlloc16(HINSTANCE16,WORD,UINT16);\nBOOL16      WINAPI DeleteDosFileHandle(HANDLE);\nHANDLE      WINAPI DosFileHandleToWin32Handle(HFILE);\nHANDLE16    WINAPI FarGetOwner16(HGLOBAL16);\nVOID        WINAPI FarSetOwner16(HGLOBAL16,HANDLE16);\nFARPROC16   WINAPI FileCDR16(FARPROC16);\nWORD        WINAPI FreeSelector16(WORD);\nHANDLE16    WINAPI GetAtomHandle16(ATOM);\nDWORD       WINAPI GetCodeHandle16(FARPROC16);\nBOOL16      WINAPI GetCodeInfo16(FARPROC16,SEGINFO*);\nDWORD       WINAPI GetCurrentPDB16(void);\nHTASK16     WINAPI GetCurrentTask(void);\nSEGPTR      WINAPI GetDOSEnvironment16(void);\nHMODULE16   WINAPI GetExePtr(HANDLE16);\nWORD        WINAPI GetExeVersion16(void);\nWORD        WINAPI GetExpWinVer16(HMODULE16);\nHQUEUE16    WINAPI GetFastQueue16(void);\nDWORD       WINAPI GetHeapSpaces16(HMODULE16);\nINT16       WINAPI GetInstanceData16(HINSTANCE16,WORD,INT16);\nBOOL16      WINAPI GetModuleName16(HINSTANCE16,LPSTR,INT16);\nINT16       WINAPI GetModuleUsage16(HINSTANCE16);\nUINT16      WINAPI GetNumTasks16(void);\nVOID        WINAPI GetpWin16Lock(SYSLEVEL**);\nSEGPTR      WINAPI GetpWin16Lock16(void);\nDWORD       WINAPI GetProcessDword(DWORD,INT);\nDWORD       WINAPI GetSelectorLimit16(WORD);\nFARPROC16   WINAPI GetSetKernelDOSProc16(FARPROC16 DosProc);\nHINSTANCE16 WINAPI GetTaskDS16(void);\nHQUEUE16    WINAPI GetTaskQueue16(HTASK16);\nHQUEUE16    WINAPI GetThreadQueue16(DWORD);\nDWORD       WINAPI GetWinFlags16(void);\nDWORD       WINAPI GlobalDOSAlloc16(DWORD);\nWORD        WINAPI GlobalDOSFree16(WORD);\nvoid        WINAPI GlobalFreeAll16(HGLOBAL16);\nDWORD       WINAPI GlobalHandleNoRIP16(WORD);\nWORD        WINAPI GlobalHandleToSel16(HGLOBAL16);\nHGLOBAL16   WINAPI GlobalLRUNewest16(HGLOBAL16);\nHGLOBAL16   WINAPI GlobalLRUOldest16(HGLOBAL16);\nVOID        WINAPI GlobalNotify16(FARPROC16);\nWORD        WINAPI GlobalPageLock16(HGLOBAL16);\nWORD        WINAPI GlobalPageUnlock16(HGLOBAL16);\nSEGPTR      WINAPI HasGPHandler16(SEGPTR);\nBOOL16      WINAPI IsSharedSelector16(HANDLE16);\nBOOL16      WINAPI IsTask16(HTASK16);\nHTASK16     WINAPI IsTaskLocked16(void);\nVOID        WINAPI LogError16(UINT16, LPVOID);\nVOID        WINAPI LogParamError16(UINT16,FARPROC16,LPVOID);\nWORD        WINAPI LocalCountFree16(void);\nWORD        WINAPI LocalHandleDelta16(WORD);\nWORD        WINAPI LocalHeapSize16(void);\nBOOL16      WINAPI LocalInit16(HANDLE16,WORD,WORD);\nFARPROC16   WINAPI LocalNotify16(FARPROC16);\nHTASK16     WINAPI LockCurrentTask16(BOOL16);\nDWORD       WINAPI MapLS(LPCVOID);\nLPVOID      WINAPI MapSL(DWORD);\nVOID        WINAPI OldYield16(void);\nVOID        WINAPI WIN32_OldYield16(void);\nVOID        WINAPI PostEvent16(HTASK16);\nWORD        WINAPI PrestoChangoSelector16(WORD,WORD);\nVOID        WINAPI ReleaseThunkLock(DWORD*);\nVOID        WINAPI RestoreThunkLock(DWORD);\nWORD        WINAPI SelectorAccessRights16(WORD,WORD,WORD);\nvoid        WINAPI SetFastQueue16(DWORD,HQUEUE16);\nVOID        WINAPI SetPriority16(HTASK16,INT16);\nFARPROC16   WINAPI SetResourceHandler16(HINSTANCE16,LPCSTR,FARPROC16);\nWORD        WINAPI SetSelectorLimit16(WORD,DWORD);\nHQUEUE16    WINAPI SetTaskQueue16(HTASK16,HQUEUE16);\nHQUEUE16    WINAPI SetThreadQueue16(DWORD,HQUEUE16);\nVOID        WINAPI SwitchStackTo16(WORD,WORD,WORD);\nVOID        WINAPI UnMapLS(DWORD);\nBOOL16      WINAPI WaitEvent16(HTASK16);\nHFILE       WINAPI Win32HandleToDosFileHandle(HANDLE);\nVOID        WINAPI WriteOutProfiles16(void);\nVOID        WINAPI hmemcpy16(LPVOID,LPCVOID,LONG);\nVOID        WINAPI _CheckNotSysLevel(SYSLEVEL *lock);\nDWORD       WINAPI _ConfirmSysLevel(SYSLEVEL*);\nDWORD       WINAPI _ConfirmWin16Lock(void);\nVOID        WINAPI _CreateSysLevel(SYSLEVEL*,INT);\nVOID        WINAPI _EnterSysLevel(SYSLEVEL*);\nVOID        WINAPI _EnterWin16Lock(void);\nVOID        WINAPI _LeaveSysLevel(SYSLEVEL*);\nVOID        WINAPI _LeaveWin16Lock(void);\n\n\nINT16       WINAPI AccessResource16(HINSTANCE16,HRSRC16);\nATOM        WINAPI AddAtom16(LPCSTR);\nINT16       WINAPI CompareString16(LCID,DWORD,LPCSTR,INT16,LPCSTR,INT16);\nBOOL16      WINAPI CreateDirectory16(LPCSTR,LPVOID);\nBOOL16      WINAPI DefineHandleTable16(WORD);\nATOM        WINAPI DeleteAtom16(ATOM);\nBOOL16      WINAPI DeleteFile16(LPCSTR);\nvoid        WINAPI ExitKernel16(void);\nvoid        WINAPI FatalAppExit16(UINT16,LPCSTR);\nATOM        WINAPI FindAtom16(LPCSTR);\nBOOL16      WINAPI FindClose16(HANDLE16);\nVOID        WINAPI FreeLibrary16(HINSTANCE16);\nHANDLE16    WINAPI FindFirstFile16(LPCSTR,LPWIN32_FIND_DATAA);\nBOOL16      WINAPI FindNextFile16(HANDLE16,LPWIN32_FIND_DATAA);\nHRSRC16     WINAPI FindResource16(HINSTANCE16,LPCSTR,LPCSTR);\nBOOL16      WINAPI FreeModule16(HMODULE16);\nvoid        WINAPI FreeProcInstance16(FARPROC16);\nBOOL16      WINAPI FreeResource16(HGLOBAL16);\nUINT16      WINAPI GetAtomName16(ATOM,LPSTR,INT16);\nUINT16      WINAPI GetCurrentDirectory16(UINT16,LPSTR);\nBOOL16      WINAPI GetDiskFreeSpace16(LPCSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD);\nUINT16      WINAPI GetDriveType16(UINT16); /* yes, the arguments differ */\nINT16       WINAPI GetLocaleInfo16(LCID,LCTYPE,LPSTR,INT16);\nDWORD       WINAPI GetFileAttributes16(LPCSTR);\nDWORD       WINAPI GetFreeSpace16(UINT16);\nINT16       WINAPI GetModuleFileName16(HINSTANCE16,LPSTR,INT16);\nHMODULE16   WINAPI GetModuleHandle16(LPCSTR);\nUINT16      WINAPI GetPrivateProfileInt16(LPCSTR,LPCSTR,INT16,LPCSTR);\nINT16       WINAPI GetPrivateProfileSection16(LPCSTR,LPSTR,UINT16,LPCSTR);\nWORD        WINAPI GetPrivateProfileSectionNames16(LPSTR,UINT16,LPCSTR);\nINT16       WINAPI GetPrivateProfileString16(LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT16,LPCSTR);\nBOOL16      WINAPI GetPrivateProfileStruct16(LPCSTR,LPCSTR,LPVOID,UINT16,LPCSTR);\nFARPROC16   WINAPI GetProcAddress16(HMODULE16,LPCSTR);\nUINT16      WINAPI GetProfileInt16(LPCSTR,LPCSTR,INT16);\nINT16       WINAPI GetProfileSection16(LPCSTR,LPSTR,UINT16);\nWORD        WINAPI GetProfileSectionNames16(LPSTR,WORD);\nINT16       WINAPI GetProfileString16(LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT16);\nDWORD       WINAPI GetSelectorBase(WORD);\nBOOL16      WINAPI GetStringType16(LCID,DWORD,LPCSTR,INT16,LPWORD);\nUINT16      WINAPI GetSystemDirectory16(LPSTR,UINT16);\nUINT16      WINAPI GetTempFileName16(BYTE,LPCSTR,UINT16,LPSTR);\nDWORD       WINAPI GetVersion16(void);\nBOOL16      WINAPI GetVersionEx16(OSVERSIONINFO16*);\nBOOL16      WINAPI GetWinDebugInfo16(LPWINDEBUGINFO16,UINT16);\nUINT16      WINAPI GetWindowsDirectory16(LPSTR,UINT16);\nHGLOBAL16   WINAPI GlobalAlloc16(UINT16,DWORD);\nDWORD       WINAPI GlobalCompact16(DWORD);\nLPVOID      WINAPI GlobalLock16(HGLOBAL16);\nWORD        WINAPI GlobalFix16(HGLOBAL16);\nUINT16      WINAPI GlobalFlags16(HGLOBAL16);\nHGLOBAL16   WINAPI GlobalFree16(HGLOBAL16);\nDWORD       WINAPI GlobalHandle16(WORD);\nHGLOBAL16   WINAPI GlobalReAlloc16(HGLOBAL16,DWORD,UINT16);\nDWORD       WINAPI GlobalSize16(HGLOBAL16);\nVOID        WINAPI GlobalUnfix16(HGLOBAL16);\nBOOL16      WINAPI GlobalUnlock16(HGLOBAL16);\nBOOL16      WINAPI GlobalUnWire16(HGLOBAL16);\nSEGPTR      WINAPI GlobalWire16(HGLOBAL16);\nWORD        WINAPI InitAtomTable16(WORD);\nvoid        WINAPI InitTask16(CONTEXT*);\nBOOL16      WINAPI IsBadCodePtr16(SEGPTR);\nBOOL16      WINAPI IsBadHugeReadPtr16(SEGPTR,DWORD);\nBOOL16      WINAPI IsBadHugeWritePtr16(SEGPTR,DWORD);\nBOOL16      WINAPI IsBadReadPtr16(SEGPTR,UINT16);\nBOOL16      WINAPI IsBadStringPtr16(SEGPTR,UINT16);\nBOOL16      WINAPI IsBadWritePtr16(SEGPTR,UINT16);\nBOOL16      WINAPI IsDBCSLeadByte16(BYTE);\nHINSTANCE16 WINAPI LoadLibrary16(LPCSTR);\nHINSTANCE16 WINAPI LoadModule16(LPCSTR,LPVOID);\nHGLOBAL16   WINAPI LoadResource16(HINSTANCE16,HRSRC16);\nHLOCAL16    WINAPI LocalAlloc16(UINT16,WORD);\nUINT16      WINAPI LocalCompact16(UINT16);\nUINT16      WINAPI LocalFlags16(HLOCAL16);\nHLOCAL16    WINAPI LocalFree16(HLOCAL16);\nHLOCAL16    WINAPI LocalHandle16(WORD);\nSEGPTR      WINAPI LocalLock16(HLOCAL16);\nHLOCAL16    WINAPI LocalReAlloc16(HLOCAL16,WORD,UINT16);\nUINT16      WINAPI LocalShrink16(HGLOBAL16,UINT16);\nUINT16      WINAPI LocalSize16(HLOCAL16);\nBOOL16      WINAPI LocalUnlock16(HLOCAL16);\nLPVOID      WINAPI LockResource16(HGLOBAL16);\nHGLOBAL16   WINAPI LockSegment16(HGLOBAL16);\nFARPROC16   WINAPI MakeProcInstance16(FARPROC16,HANDLE16);\nHFILE16     WINAPI OpenFile16(LPCSTR,OFSTRUCT*,UINT16);\nDWORD       WINAPI RegCloseKey16(HKEY);\nDWORD       WINAPI RegCreateKey16(HKEY,LPCSTR,PHKEY);\nDWORD       WINAPI RegDeleteKey16(HKEY,LPCSTR);\nDWORD       WINAPI RegDeleteValue16(HKEY,LPSTR);\nDWORD       WINAPI RegEnumKey16(HKEY,DWORD,LPSTR,DWORD);\nDWORD       WINAPI RegEnumValue16(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD);\nDWORD       WINAPI RegOpenKey16(HKEY,LPCSTR,PHKEY);\nDWORD       WINAPI RegQueryValue16(HKEY,LPCSTR,LPSTR,LPDWORD);\nDWORD       WINAPI RegQueryValueEx16(HKEY,LPCSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD);\nDWORD       WINAPI RegSetValue16(HKEY,LPCSTR,DWORD,LPCSTR,DWORD);\nDWORD       WINAPI RegSetValueEx16(HKEY,LPCSTR,DWORD,DWORD,const BYTE*,DWORD);\nBOOL16      WINAPI RemoveDirectory16(LPCSTR);\nBOOL16      WINAPI SetCurrentDirectory16(LPCSTR);\nUINT16      WINAPI SetErrorMode16(UINT16);\nBOOL16      WINAPI SetFileAttributes16(LPCSTR,DWORD);\nUINT16      WINAPI SetHandleCount16(UINT16);\nWORD        WINAPI SetSelectorBase(WORD,DWORD);\nLONG        WINAPI SetSwapAreaSize16(WORD);\nBOOL16      WINAPI SetWinDebugInfo16(LPWINDEBUGINFO16);\nDWORD       WINAPI SizeofResource16(HMODULE16,HRSRC16);\nvoid        WINAPI UnlockSegment16(HGLOBAL16);\nBOOL16      WINAPI WritePrivateProfileString16(LPCSTR,LPCSTR,LPCSTR,LPCSTR);\nBOOL16      WINAPI WriteProfileString16(LPCSTR,LPCSTR,LPCSTR);\n/* Yield16 will only be available from kernel module, use WOWYield instead */\nVOID        WINAPI Yield16(void);\nSEGPTR      WINAPI lstrcat16(SEGPTR,LPCSTR);\nSEGPTR      WINAPI lstrcatn16(SEGPTR,LPCSTR,INT16);\nSEGPTR      WINAPI lstrcpy16(SEGPTR,LPCSTR);\nSEGPTR      WINAPI lstrcpyn16(SEGPTR,LPCSTR,INT16);\nINT16       WINAPI lstrlen16(LPCSTR);\nHINSTANCE16 WINAPI WinExec16(LPCSTR,UINT16);\nLONG        WINAPI _hread16(HFILE16,LPVOID,LONG);\nLONG        WINAPI _hwrite16(HFILE16,LPCSTR,LONG);\nHFILE16     WINAPI _lcreat16(LPCSTR,INT16);\nHFILE16     WINAPI _lclose16(HFILE16);\nLONG        WINAPI _llseek16(HFILE16,LONG,INT16);\nHFILE16     WINAPI _lopen16(LPCSTR,INT16);\nUINT16      WINAPI _lread16(HFILE16,LPVOID,UINT16);\nUINT16      WINAPI _lwrite16(HFILE16,LPCSTR,UINT16);\nBOOL16      WINAPI WritePrivateProfileSection16(LPCSTR,LPCSTR,LPCSTR);\nBOOL16      WINAPI WritePrivateProfileStruct16(LPCSTR,LPCSTR,LPVOID,UINT16,LPCSTR);\nBOOL16      WINAPI WriteProfileSection16(LPCSTR,LPCSTR);\n\n//config\n\nDWORD WINAPI krnl386_get_config_string(LPCSTR appname, LPCSTR keyname, LPCSTR def, LPSTR ret, DWORD size);\nDWORD WINAPI krnl386_get_config_int(LPCSTR appname, LPCSTR keyname, INT def);\nBOOL WINAPI krnl386_get_compat_mode(const LPCSTR mode);\nvoid WINAPI krnl386_set_compat_path(const LPCSTR path);\n#endif /* __WINE_WINE_WINBASE16_H */\n"
  },
  {
    "path": "wine/wine/windef16.h",
    "content": "/*\n * Basic type definitions for 16 bit variations on Windows types.\n * These types are provided mostly to insure compatibility with\n * 16 bit windows code.\n *\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINDEF16_H\n#define __WINE_WINDEF16_H\n\n#ifndef RC_INVOKED\n#include <stdarg.h>\n#endif\n#include <windef.h>\n#include <winbase.h>\n\n/* Standard data types */\n\ntypedef unsigned short  BOOL16;\ntypedef DWORD           SEGPTR;\n\ntypedef UINT16          HANDLE16;\ntypedef HANDLE16       *LPHANDLE16;\n\ntypedef UINT16          WPARAM16;\ntypedef INT16          *LPINT16;\ntypedef UINT16         *LPUINT16;\n\ntypedef WORD            CATCHBUF[9];\ntypedef WORD           *LPCATCHBUF;\n\n#define MAKESEGPTR(seg,off) ((SEGPTR)MAKELONG(off,seg))\n#define SELECTOROF(ptr)     (HIWORD(ptr))\n#define OFFSETOF(ptr)       (LOWORD(ptr))\n\ntypedef WORD *VA_LIST16;\n\n#define __VA_ROUNDED16(type) \\\n    ((sizeof(type) + sizeof(WORD) - 1) / sizeof(WORD) * sizeof(WORD))\n#define VA_ARG16(list,type) \\\n    (((list) = (VA_LIST16)((char *)(list) + __VA_ROUNDED16(type))), \\\n     *((type *)(void *)((char *)(list) - __VA_ROUNDED16(type))))\n\n#define HFILE_ERROR16   ((HFILE16)-1)\n\n#define DECLARE_HANDLE16(a) \\\n\ttypedef HANDLE16 a##16; \\\n\ttypedef a##16 *P##a##16; \\\n\ttypedef a##16 *NP##a##16; \\\n\ttypedef a##16 *LP##a##16\n\nDECLARE_HANDLE16(HACMDRIVERID);\nDECLARE_HANDLE16(HACMDRIVER);\nDECLARE_HANDLE16(HACMOBJ);\nDECLARE_HANDLE16(HACMSTREAM);\nDECLARE_HANDLE16(HMETAFILEPICT);\n\nDECLARE_HANDLE16(HACCEL);\nDECLARE_HANDLE16(HBITMAP);\nDECLARE_HANDLE16(HBRUSH);\nDECLARE_HANDLE16(HCOLORSPACE);\nDECLARE_HANDLE16(HCURSOR);\nDECLARE_HANDLE16(HDC);\nDECLARE_HANDLE16(HDROP);\nDECLARE_HANDLE16(HDRVR);\nDECLARE_HANDLE16(HDWP);\nDECLARE_HANDLE16(HENHMETAFILE);\nDECLARE_HANDLE16(HFILE);\nDECLARE_HANDLE16(HFONT);\nDECLARE_HANDLE16(HICON);\nDECLARE_HANDLE16(HINSTANCE);\nDECLARE_HANDLE16(HKEY);\nDECLARE_HANDLE16(HMENU);\nDECLARE_HANDLE16(HMETAFILE);\nDECLARE_HANDLE16(HMIDI);\nDECLARE_HANDLE16(HMIDIIN);\nDECLARE_HANDLE16(HMIDIOUT);\nDECLARE_HANDLE16(HMIDISTRM);\nDECLARE_HANDLE16(HMIXER);\nDECLARE_HANDLE16(HMIXEROBJ);\nDECLARE_HANDLE16(HMMIO);\nDECLARE_HANDLE16(HPALETTE);\nDECLARE_HANDLE16(HPEN);\nDECLARE_HANDLE16(HQUEUE);\nDECLARE_HANDLE16(HRGN);\nDECLARE_HANDLE16(HRSRC);\nDECLARE_HANDLE16(HTASK);\nDECLARE_HANDLE16(HWAVE);\nDECLARE_HANDLE16(HWAVEIN);\nDECLARE_HANDLE16(HWAVEOUT);\nDECLARE_HANDLE16(HWINSTA);\nDECLARE_HANDLE16(HDESK);\nDECLARE_HANDLE16(HWND);\nDECLARE_HANDLE16(HKL);\nDECLARE_HANDLE16(HIC);\nDECLARE_HANDLE16(HRASCONN);\n#undef DECLARE_HANDLE16\n\ntypedef HINSTANCE16 HMODULE16;\ntypedef HANDLE16 HGDIOBJ16;\ntypedef HANDLE16 HGLOBAL16;\ntypedef HANDLE16 HLOCAL16;\n\n#include <pshpack1.h>\n\n/* The SIZE structure */\n\ntypedef struct\n{\n    INT16  cx;\n    INT16  cy;\n} SIZE16, *PSIZE16, *LPSIZE16;\n\n/* The POINT structure */\n\ntypedef struct\n{\n    INT16  x;\n    INT16  y;\n} POINT16, *PPOINT16, *LPPOINT16;\n\n/* The RECT structure */\n\ntypedef struct\n{\n    INT16  left;\n    INT16  top;\n    INT16  right;\n    INT16  bottom;\n} RECT16, *LPRECT16;\n\n#include <poppack.h>\n\n/* Callback function pointers types */\n\ntypedef LRESULT (CALLBACK *DRIVERPROC16)(DWORD,HDRVR16,UINT16,LPARAM,LPARAM);\ntypedef BOOL16  (CALLBACK *DLGPROC16)(HWND16,UINT16,WPARAM16,LPARAM);\ntypedef INT16   (CALLBACK *EDITWORDBREAKPROC16)(LPSTR,INT16,INT16,INT16);\ntypedef BOOL16  (CALLBACK *GRAYSTRINGPROC16)(HDC16,LPARAM,INT16);\ntypedef LRESULT (CALLBACK *HOOKPROC16)(INT16,WPARAM16,LPARAM);\ntypedef BOOL16  (CALLBACK *PROPENUMPROC16)(HWND16,SEGPTR,HANDLE16);\ntypedef VOID    (CALLBACK *TIMERPROC16)(HWND16,UINT16,UINT16,DWORD);\ntypedef LRESULT (CALLBACK *WNDENUMPROC16)(HWND16,LPARAM);\ntypedef LRESULT (CALLBACK *WNDPROC16)(HWND16,UINT16,WPARAM16,LPARAM);\n\n#ifdef WINE_STRICT_PROTOTYPES\ntypedef LRESULT (CALLBACK *FARPROC16)(void);\ntypedef INT16   (CALLBACK *PROC16)(void);\n#else\ntypedef LRESULT (CALLBACK *FARPROC16)();\ntypedef INT16   (CALLBACK *PROC16)();\n#endif\n\n#endif /* __WINE_WINDEF16_H */\n"
  },
  {
    "path": "wine/wine/wine_common_ver.rc",
    "content": "/*\n * Copyright 2001 Dmitry Timoshkov\n * Copyright 2004 Ivan Leo Puoti\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"winresrc.h\"\n\n/*\nAssign WINE_FILEVERSION and WINE_FILEVERSION_STR high enough number\nto make sure that programs, relying on the version numbers, will\nnever complain.\n*/\n\n#ifndef WINE_FILEVERSION_MAJOR\n#define WINE_FILEVERSION_MAJOR 10\n#endif\n\n#ifndef WINE_FILEVERSION_MINOR\n#define WINE_FILEVERSION_MINOR 0\n#endif\n\n#ifndef WINE_FILEVERSION_BUILD\n#define WINE_FILEVERSION_BUILD 0\n#endif\n\n#ifndef WINE_FILEVERSION_PLATFORMID\n#define WINE_FILEVERSION_PLATFORMID 0\n#endif\n\n#ifndef WINE_FILEVERSION\n#define WINE_FILEVERSION WINE_FILEVERSION_MAJOR,WINE_FILEVERSION_MINOR,\\\n                         WINE_FILEVERSION_BUILD,WINE_FILEVERSION_PLATFORMID\n#endif\n\n#define WINE_VER_STRINGIZE2(x) #x\n#define WINE_VER_STRINGIZE(x) WINE_VER_STRINGIZE2(x)\n#define WINE_VER_HEXPREFIX2(x) 0x ## x\n#define WINE_VER_HEXPREFIX(x) WINE_VER_HEXPREFIX2(x)\n\n#ifndef WINE_FILEVERSION_STR\n#define WINE_FILEVERSION_STR WINE_VER_STRINGIZE(WINE_FILEVERSION_MAJOR.WINE_FILEVERSION_MINOR.WINE_FILEVERSION_BUILD.WINE_FILEVERSION_PLATFORMID)\n#endif\n\n#ifndef WINE_FILEDESCRIPTION_STR\n#define WINE_FILEDESCRIPTION_STR \"Wine core dll\"\n#endif\n\n#ifndef WINE_FILENAME\n#define WINE_FILENAME \"\"\n#endif\n\n#ifndef WINE_FILENAME_STR\n#define WINE_FILENAME_STR \"\"\n#endif\n\n#ifndef WINE_FILETYPE\n#define WINE_FILETYPE VFT_DLL\n#endif\n\n#ifndef WINE_FILESUBTYPE\n#define WINE_FILESUBTYPE VFT2_UNKNOWN\n#endif\n\n#ifndef WINE_LEGALCOPYRIGHT\n#define WINE_LEGALCOPYRIGHT \"Copyright (c) 1993-2018 the Wine project authors (see the file AUTHORS for a complete list)\"\n#endif\n\n#ifndef WINE_PRODUCTVERSION\n#define WINE_PRODUCTVERSION 1,0,0,0\n#endif\n\n#ifndef WINE_PRODUCTVERSION_STR\n#define WINE_PRODUCTVERSION_STR \"1.0\"\n#endif\n\n#ifndef WINE_PRODUCTNAME_STR\n#define WINE_PRODUCTNAME_STR \"Wine\"\n#endif\n\n#ifndef WINE_EXTRAVALUES\n#define WINE_EXTRAVALUES\n#endif\n\n#ifndef WINE_CODEPAGE\n#ifdef _WIN32\n#define WINE_CODEPAGE 04B0 /* CP1200 (Unicode) */\n#else\n#define WINE_CODEPAGE 04E4 /* CP1252 for Win16 */\n#endif\n#endif\n\n#ifndef WINE_CODEPAGE_STR\n#define WINE_CODEPAGE_STR WINE_VER_STRINGIZE(WINE_CODEPAGE)\n#endif\n\n#ifndef WINE_CODEPAGE_HEX\n#define WINE_CODEPAGE_HEX WINE_VER_HEXPREFIX(WINE_CODEPAGE)\n#endif\n\nVS_VERSION_INFO VERSIONINFO\nFILEVERSION    WINE_FILEVERSION\nPRODUCTVERSION WINE_PRODUCTVERSION\nFILEFLAGSMASK  63\nFILEFLAGS      0\nFILEOS         VOS_UNKNOWN\nFILETYPE       WINE_FILETYPE\nFILESUBTYPE    WINE_FILESUBTYPE\n{\n    BLOCK \"StringFileInfo\"\n    {\n        /* LANG_ENGLISH/SUBLANG_DEFAULT, WINE_CODEPAGE */\n\tBLOCK \"0409\" WINE_CODEPAGE_STR\n\t{\n\t    VALUE \"CompanyName\", \"Microsoft Corporation\" /* GameGuard depends on this */\n\t    VALUE \"FileDescription\", WINE_FILEDESCRIPTION_STR\n\t    VALUE \"FileVersion\", WINE_FILEVERSION_STR\n\t    VALUE \"InternalName\", WINE_FILENAME\n\t    VALUE \"LegalCopyright\", WINE_LEGALCOPYRIGHT\n\t    VALUE \"OriginalFilename\", WINE_FILENAME_STR\n\t    VALUE \"ProductName\", WINE_PRODUCTNAME_STR\n\t    VALUE \"ProductVersion\", WINE_PRODUCTVERSION_STR\n\t    WINE_EXTRAVALUES\n\t}\n    }\n    BLOCK \"VarFileInfo\"\n    {\n        /* LANG_ENGLISH/SUBLANG_DEFAULT, WINE_CODEPAGE */\n\tVALUE \"Translation\", 0x0409, WINE_CODEPAGE_HEX\n    }\n}\n"
  },
  {
    "path": "wine/wine/wingdi16.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINE_WINGDI16_H\n#define __WINE_WINE_WINGDI16_H\n\n#include <stdarg.h>\n#include <windef.h>\n#include <winbase.h>\n#include <wingdi.h>\n#include <wine/winbase16.h>\n\n#include <pshpack1.h>\n\ntypedef HANDLE16 HPQ16;\ntypedef HANDLE16 HPJOB16;\n\ntypedef struct\n{\n    WORD   wFirst;\n    WORD   wSecond;\n    INT16  iKernAmount;\n} KERNINGPAIR16, *LPKERNINGPAIR16;\n\ntypedef struct\n{\n    INT16  bmType;\n    INT16  bmWidth;\n    INT16  bmHeight;\n    INT16  bmWidthBytes;\n    BYTE   bmPlanes;\n    BYTE   bmBitsPixel;\n    SEGPTR bmBits;\n} BITMAP16, *LPBITMAP16;\n\ntypedef struct\n{\n    UINT16     lbStyle;\n    COLORREF   lbColor;\n    INT16      lbHatch;\n} LOGBRUSH16, *LPLOGBRUSH16;\n\ntypedef struct\n{\n    INT16  lfHeight;\n    INT16  lfWidth;\n    INT16  lfEscapement;\n    INT16  lfOrientation;\n    INT16  lfWeight;\n    BYTE   lfItalic;\n    BYTE   lfUnderline;\n    BYTE   lfStrikeOut;\n    BYTE   lfCharSet;\n    BYTE   lfOutPrecision;\n    BYTE   lfClipPrecision;\n    BYTE   lfQuality;\n    BYTE   lfPitchAndFamily;\n    CHAR   lfFaceName[LF_FACESIZE];\n} LOGFONT16, *LPLOGFONT16;\n\ntypedef struct\n{\n  LOGFONT16  elfLogFont;\n  BYTE       elfFullName[LF_FULLFACESIZE];\n  BYTE       elfStyle[LF_FACESIZE];\n} ENUMLOGFONT16, *LPENUMLOGFONT16;\n\ntypedef struct\n{\n  LOGFONT16  elfLogFont;\n  BYTE       elfFullName[LF_FULLFACESIZE];\n  BYTE       elfStyle[LF_FACESIZE];\n  BYTE       elfScript[LF_FACESIZE];\n} ENUMLOGFONTEX16, *LPENUMLOGFONTEX16;\n\ntypedef struct\n{\n    INT16  txfHeight;\n    INT16  txfWidth;\n    INT16  txfEscapement;\n    INT16  txfOrientation;\n    INT16  txfWeight;\n    CHAR   txfItalic;\n    CHAR   txfUnderline;\n    CHAR   txfStrikeOut;\n    CHAR   txfOutPrecision;\n    CHAR   txfClipPrecision;\n    INT16  txfAccelerator;\n    INT16  txfOverhang;\n} TEXTXFORM16, *LPTEXTXFORM16;\n\ntypedef struct\n{\n    INT16 dfType;\n    INT16 dfPoints;\n    INT16 dfVertRes;\n    INT16 dfHorizRes;\n    INT16 dfAscent;\n    INT16 dfInternalLeading;\n    INT16 dfExternalLeading;\n    CHAR  dfItalic;\n    CHAR  dfUnderline;\n    CHAR  dfStrikeOut;\n    INT16 dfWeight;\n    BYTE  dfCharSet;\n    INT16 dfPixWidth;\n    INT16 dfPixHeight;\n    CHAR  dfPitchAndFamily;\n    INT16 dfAvgWidth;\n    INT16 dfMaxWidth;\n    CHAR  dfFirstChar;\n    CHAR  dfLastChar;\n    CHAR  dfDefaultChar;\n    CHAR  dfBreakChar;\n    INT16 dfWidthBytes;\n    LONG  dfDevice;\n    LONG  dfFace;\n    LONG  dfBitsPointer;\n    LONG  dfBitsOffset;\n    CHAR  dfReserved;\n    /* Fields, introduced for Windows 3.x fonts */\n    LONG  dfFlags;\n    INT16 dfAspace;\n    INT16 dfBspace;\n    INT16 dfCspace;\n    LONG  dfColorPointer;\n    LONG  dfReserved1[4];\n} FONTINFO16, *LPFONTINFO16;\n\ntypedef struct {\n    WORD   dfVersion;\n    DWORD  dfSize;\n    CHAR   dfCopyright[60];\n    WORD   dfType;\n    WORD   dfPoints;\n    WORD   dfVertRes;\n    WORD   dfHorizRes;\n    WORD   dfAscent;\n    WORD   dfInternalLeading;\n    WORD   dfExternalLeading;\n    BYTE   dfItalic;\n    BYTE   dfUnderline;\n    BYTE   dfStrikeOut;\n    WORD   dfWeight;\n    BYTE   dfCharSet;\n    WORD   dfPixWidth;\n    WORD   dfPixHeight;\n    BYTE   dfPitchAndFamily;\n    WORD   dfAvgWidth;\n    WORD   dfMaxWidth;\n    BYTE   dfFirstChar;\n    BYTE   dfLastChar;\n    BYTE   dfDefaultChar;\n    BYTE   dfBreakChar;\n    WORD   dfWidthBytes;\n    DWORD  dfDevice;\n    DWORD  dfFace;\n    DWORD  dfReserved;\n    CHAR   szDeviceName[60]; /* FIXME: length unknown */\n    CHAR   szFaceName[60];   /* ditto */\n} FONTDIR16, *LPFONTDIR16;\n\ntypedef struct\n{\n    INT16     tmHeight;\n    INT16     tmAscent;\n    INT16     tmDescent;\n    INT16     tmInternalLeading;\n    INT16     tmExternalLeading;\n    INT16     tmAveCharWidth;\n    INT16     tmMaxCharWidth;\n    INT16     tmWeight;\n    BYTE      tmItalic;\n    BYTE      tmUnderlined;\n    BYTE      tmStruckOut;\n    BYTE      tmFirstChar;\n    BYTE      tmLastChar;\n    BYTE      tmDefaultChar;\n    BYTE      tmBreakChar;\n    BYTE      tmPitchAndFamily;\n    BYTE      tmCharSet;\n    INT16     tmOverhang;\n    INT16     tmDigitizedAspectX;\n    INT16     tmDigitizedAspectY;\n} TEXTMETRIC16, *LPTEXTMETRIC16;\n\ntypedef struct _OUTLINETEXTMETRIC16\n{\n    UINT16          otmSize;\n    TEXTMETRIC16    otmTextMetrics;\n    BYTE            otmFiller;\n    PANOSE          otmPanoseNumber;\n    UINT16          otmfsSelection;\n    UINT16          otmfsType;\n    INT16           otmsCharSlopeRise;\n    INT16           otmsCharSlopeRun;\n    INT16           otmItalicAngle;\n    UINT16          otmEMSquare;\n    INT16           otmAscent;\n    INT16           otmDescent;\n    UINT16          otmLineGap;\n    UINT16          otmsCapEmHeight;\n    UINT16          otmsXHeight;\n    RECT16          otmrcFontBox;\n    INT16           otmMacAscent;\n    INT16           otmMacDescent;\n    UINT16          otmMacLineGap;\n    UINT16          otmusMinimumPPEM;\n    POINT16         otmptSubscriptSize;\n    POINT16         otmptSubscriptOffset;\n    POINT16         otmptSuperscriptSize;\n    POINT16         otmptSuperscriptOffset;\n    UINT16          otmsStrikeoutSize;\n    INT16           otmsStrikeoutPosition;\n    INT16           otmsUnderscorePosition; /* sic */\n    INT16           otmsUnderscoreSize; /* sic */\n    /* near char pointer */\n    WORD            otmpFamilyName;\n    WORD            otmpFaceName;\n    WORD            otmpStyleName;\n    WORD            otmpFullName;\n} OUTLINETEXTMETRIC16,*LPOUTLINETEXTMETRIC16;\n\ntypedef struct\n{\n    INT16     tmHeight;\n    INT16     tmAscent;\n    INT16     tmDescent;\n    INT16     tmInternalLeading;\n    INT16     tmExternalLeading;\n    INT16     tmAveCharWidth;\n    INT16     tmMaxCharWidth;\n    INT16     tmWeight;\n    BYTE      tmItalic;\n    BYTE      tmUnderlined;\n    BYTE      tmStruckOut;\n    BYTE      tmFirstChar;\n    BYTE      tmLastChar;\n    BYTE      tmDefaultChar;\n    BYTE      tmBreakChar;\n    BYTE      tmPitchAndFamily;\n    BYTE      tmCharSet;\n    INT16     tmOverhang;\n    INT16     tmDigitizedAspectX;\n    INT16     tmDigitizedAspectY;\n    DWORD     ntmFlags;\n    UINT16    ntmSizeEM;\n    UINT16    ntmCellHeight;\n    UINT16    ntmAvgWidth;\n} NEWTEXTMETRIC16,*LPNEWTEXTMETRIC16;\n\ntypedef struct\n{\n    NEWTEXTMETRIC16\tntmTm;\n    FONTSIGNATURE       ntmFontSig;\n} NEWTEXTMETRICEX16,*LPNEWTEXTMETRICEX16;\n\ntypedef INT16 (CALLBACK *FONTENUMPROC16)(SEGPTR,SEGPTR,UINT16,LPARAM);\ntypedef VOID  (CALLBACK *LINEDDAPROC16)(INT16,INT16,LPARAM);\ntypedef INT16 (CALLBACK *GOBJENUMPROC16)(SEGPTR,LPARAM);\n\n\ntypedef struct\n{\n    UINT16\tgmBlackBoxX;\n    UINT16\tgmBlackBoxY;\n    POINT16\tgmptGlyphOrigin;\n    INT16\tgmCellIncX;\n    INT16\tgmCellIncY;\n} GLYPHMETRICS16, *LPGLYPHMETRICS16;\n\ntypedef struct\n{\n    INT16   abcA;\n    UINT16  abcB;\n    INT16   abcC;\n} ABC16, *LPABC16;\n\ntypedef struct\n{\n    UINT16   lopnStyle;\n    POINT16  lopnWidth;\n    COLORREF lopnColor;\n} LOGPEN16, *LPLOGPEN16;\n\ntypedef struct\n{\n    HGDIOBJ16 objectHandle[1];\n} HANDLETABLE16, *LPHANDLETABLE16;\n\ntypedef struct\n{\n    INT16        mm;\n    INT16        xExt;\n    INT16        yExt;\n    HMETAFILE16  hMF;\n} METAFILEPICT16, *LPMETAFILEPICT16;\n\ntypedef INT16 (CALLBACK *MFENUMPROC16)(HDC16,HANDLETABLE16*,METARECORD*,\n                                       INT16,LPARAM);\ntypedef struct\n{\n    INT16    cbSize;\n    SEGPTR   lpszDocName;\n    SEGPTR   lpszOutput;\n    SEGPTR   lpszDatatype;\n    DWORD    fwType;\n} DOCINFO16, *LPDOCINFO16;\n\ntypedef BOOL16 (CALLBACK *ABORTPROC16)(HDC16, INT16);\n\n#define INT_PD_DEFAULT_DEVMODE  1\n#define INT_PD_DEFAULT_MODEL    2\n\n/* Escape: CLIP_TO_PATH modes */\n#define CLIP_SAVE 0\n#define CLIP_RESTORE 1\n#define CLIP_INCLUSIVE 2\n#define CLIP_EXCLUSIVE 3\n\n/* Escape: END_PATH info */\nstruct PATH_INFO {\n    short RenderMode;\n    BYTE FillMode;\n    BYTE BkMode;\n    LOGPEN16 Pen;\n    LOGBRUSH16 Brush;\n    DWORD BkColor;\n};\n\n/* RenderMode */\n#define RENDERMODE_NO_DISPLAY 0\n#define RENDERMODE_OPEN 1\n#define RENDERMODE_CLOSED 2\n\n/* For DRAWPATTERNRECT Escape, 16bit mode */\ntypedef struct _DRAWPATRECT16\n{\n    POINT16\tptPosition;\n    POINT16\tptSize;\n    WORD\twStyle;\n    WORD\twPattern;\n} DRAWPATRECT16, *PDRAWPATRECT16;\n\n#include <poppack.h>\n\n\nINT16       WINAPI AbortDoc16(HDC16);\nBOOL16      WINAPI AbortPath16(HDC16);\nINT16       WINAPI AddFontResource16(LPCSTR);\nvoid        WINAPI AnimatePalette16(HPALETTE16,UINT16,UINT16,const PALETTEENTRY*);\nBOOL16      WINAPI Arc16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16,INT16,INT16);\nBOOL16      WINAPI BeginPath16(HDC16);\nBOOL16      WINAPI BitBlt16(HDC16,INT16,INT16,INT16,INT16,HDC16,INT16,INT16,DWORD);\nBOOL16      WINAPI Chord16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16,INT16,INT16);\nBOOL16      WINAPI CloseFigure16(HDC16);\nINT16       WINAPI CloseJob16(HPJOB16);\nHMETAFILE16 WINAPI CloseMetaFile16(HDC16);\nINT16       WINAPI CombineRgn16(HRGN16,HRGN16,HRGN16,INT16);\nHMETAFILE16 WINAPI CopyMetaFile16(HMETAFILE16,LPCSTR);\nHBITMAP16   WINAPI CreateBitmap16(INT16,INT16,UINT16,UINT16,LPCVOID);\nHBITMAP16   WINAPI CreateBitmapIndirect16(const BITMAP16*);\nHBRUSH16    WINAPI CreateBrushIndirect16(const LOGBRUSH16*);\nHBITMAP16   WINAPI CreateCompatibleBitmap16(HDC16,INT16,INT16);\nHDC16       WINAPI CreateCompatibleDC16(HDC16);\nHDC16       WINAPI CreateDC16(LPCSTR,LPCSTR,LPCSTR,SEGPTR);\nHBITMAP16   WINAPI CreateDIBitmap16(HDC16,const BITMAPINFOHEADER*,DWORD,\n                                    LPCVOID,const BITMAPINFO*,UINT16);\nHBRUSH16    WINAPI CreateDIBPatternBrush16(HGLOBAL16,UINT16);\nHBITMAP16   WINAPI CreateDIBSection16 (HDC16, const BITMAPINFO *, UINT16,\n\t\t\t\t       SEGPTR *, HANDLE, DWORD offset);\nHBITMAP16   WINAPI CreateDiscardableBitmap16(HDC16,INT16,INT16);\nHRGN16      WINAPI CreateEllipticRgn16(INT16,INT16,INT16,INT16);\nHRGN16      WINAPI CreateEllipticRgnIndirect16(const RECT16 *);\nHFONT16     WINAPI CreateFont16(INT16,INT16,INT16,INT16,INT16,BYTE,BYTE,BYTE,\n                                BYTE,BYTE,BYTE,BYTE,BYTE,LPCSTR);\nHFONT16     WINAPI CreateFontIndirect16(const LOGFONT16*);\nHPALETTE16  WINAPI CreateHalftonePalette16(HDC16);\nHBRUSH16    WINAPI CreateHatchBrush16(INT16,COLORREF);\nHDC16       WINAPI CreateIC16(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*);\nHDC16       WINAPI CreateMetaFile16(LPCSTR);\nHPALETTE16  WINAPI CreatePalette16(const LOGPALETTE*);\nHBRUSH16    WINAPI CreatePatternBrush16(HBITMAP16);\nHPEN16      WINAPI CreatePen16(INT16,INT16,COLORREF);\nHPEN16      WINAPI CreatePenIndirect16(const LOGPEN16*);\nHRGN16      WINAPI CreatePolyPolygonRgn16(const POINT16*,const INT16*,INT16,INT16);\nHRGN16      WINAPI CreatePolygonRgn16(const POINT16*,INT16,INT16);\nHRGN16      WINAPI CreateRectRgn16(INT16,INT16,INT16,INT16);\nHRGN16      WINAPI CreateRectRgnIndirect16(const RECT16*);\nHRGN16      WINAPI CreateRoundRectRgn16(INT16,INT16,INT16,INT16,INT16,INT16);\nBOOL16      WINAPI CreateScalableFontResource16(UINT16,LPCSTR,LPCSTR,LPCSTR);\nHBRUSH16    WINAPI CreateSolidBrush16(COLORREF);\nVOID        WINAPI Death16(HDC16);\nBOOL16      WINAPI DeleteDC16(HDC16);\nINT16       WINAPI DeleteJob16(HPJOB16,INT16);\nBOOL16      WINAPI DeleteMetaFile16(HMETAFILE16);\nBOOL16      WINAPI DeleteObject16(HGDIOBJ16);\nBOOL16      WINAPI DPtoLP16(HDC16,LPPOINT16,INT16);\nDWORD       WINAPI DrvGetPrinterData16(LPSTR,LPSTR,LPDWORD,LPBYTE,int cbData,LPDWORD);\nDWORD       WINAPI DrvSetPrinterData16(LPSTR,LPSTR,DWORD,LPBYTE,DWORD);\nBOOL16      WINAPI Ellipse16(HDC16,INT16,INT16,INT16,INT16);\nINT16       WINAPI EndDoc16(HDC16);\nINT16       WINAPI EndPage16(HDC16);\nBOOL16      WINAPI EndPath16(HDC16);\nINT16       WINAPI EndSpoolPage16(HPJOB16);\nINT16       WINAPI EnumFontFamilies16(HDC16,LPCSTR,FONTENUMPROC16,LPARAM);\nINT16       WINAPI EnumFontFamiliesEx16(HDC16,LPLOGFONT16,FONTENUMPROC16,LPARAM,DWORD);\nINT16       WINAPI EnumFonts16(HDC16,LPCSTR,FONTENUMPROC16,LPARAM);\nBOOL16      WINAPI EnumMetaFile16(HDC16,HMETAFILE16,MFENUMPROC16,LPARAM);\nINT16       WINAPI EnumObjects16(HDC16,INT16,GOBJENUMPROC16,LPARAM);\nBOOL16      WINAPI EqualRgn16(HRGN16,HRGN16);\nINT16       WINAPI Escape16(HDC16,INT16,INT16,SEGPTR,LPVOID);\nINT16       WINAPI ExcludeClipRect16(HDC16,INT16,INT16,INT16,INT16);\nINT16       WINAPI ExcludeVisRect16(HDC16,INT16,INT16,INT16,INT16);\nHPEN16      WINAPI ExtCreatePen16(DWORD,DWORD,const LOGBRUSH16*,DWORD,const DWORD*);\nBOOL16      WINAPI ExtFloodFill16(HDC16,INT16,INT16,COLORREF,UINT16);\nBOOL16      WINAPI ExtTextOut16(HDC16,INT16,INT16,UINT16,const RECT16*,\n                                LPCSTR,UINT16,const INT16*);\nBOOL16      WINAPI FastWindowFrame16(HDC16,const RECT16*,INT16,INT16,DWORD);\nBOOL16      WINAPI FillPath16(HDC16);\nBOOL16      WINAPI FillRgn16(HDC16,HRGN16,HBRUSH16);\nBOOL16      WINAPI FlattenPath16(HDC16);\nBOOL16      WINAPI FloodFill16(HDC16,INT16,INT16,COLORREF);\nBOOL16      WINAPI FrameRgn16(HDC16,HRGN16,HBRUSH16,INT16,INT16);\nUINT16      WINAPI GDIRealizePalette16(HDC16);\nDWORD       WINAPI GdiSeeGdiDo16(WORD,WORD,WORD,WORD);\nHPALETTE16  WINAPI GDISelectPalette16(HDC16,HPALETTE16,WORD);\nINT16       WINAPI GetArcDirection16(HDC16);\nBOOL16      WINAPI GetAspectRatioFilterEx16(HDC16,LPSIZE16);\nLONG        WINAPI GetBitmapBits16(HBITMAP16,LONG,LPVOID);\nDWORD       WINAPI GetBitmapDimension16(HBITMAP16);\nBOOL16      WINAPI GetBitmapDimensionEx16(HBITMAP16,LPSIZE16);\nDWORD       WINAPI GetBrushOrg16(HDC16);\nBOOL16      WINAPI GetBrushOrgEx16(HDC16,LPPOINT16);\nCOLORREF    WINAPI GetBkColor16(HDC16);\nINT16       WINAPI GetBkMode16(HDC16);\nUINT16      WINAPI GetBoundsRect16(HDC16,LPRECT16,UINT16);\nBOOL16      WINAPI GetCharABCWidths16(HDC16,UINT16,UINT16,LPABC16);\nBOOL16      WINAPI GetCharWidth16(HDC16,UINT16,UINT16,LPINT16);\nINT16       WINAPI GetClipBox16(HDC16,LPRECT16);\nHRGN16      WINAPI GetClipRgn16(HDC16);\nHFONT16     WINAPI GetCurLogFont16(HDC16);\nDWORD       WINAPI GetCurrentPosition16(HDC16);\nBOOL16      WINAPI GetCurrentPositionEx16(HDC16,LPPOINT16);\nDWORD       WINAPI GetDCHook16(HDC16,FARPROC16*);\nDWORD       WINAPI GetDCOrg16(HDC16);\nHDC16       WINAPI GetDCState16(HDC16);\nINT16       WINAPI GetDeviceCaps16(HDC16,INT16);\nUINT16      WINAPI GetDIBColorTable16(HDC16,UINT16,UINT16,RGBQUAD*);\nINT16       WINAPI GetDIBits16(HDC16,HBITMAP16,UINT16,UINT16,LPVOID,LPBITMAPINFO,UINT16);\nINT16       WINAPI GetEnvironment16(LPCSTR,LPDEVMODEA,UINT16);\nDWORD       WINAPI GetFontData16(HDC16,DWORD,DWORD,LPVOID,DWORD);\nDWORD       WINAPI GetFontLanguageInfo16(HDC16);\nDWORD       WINAPI GetGlyphOutline16(HDC16,UINT16,UINT16,LPGLYPHMETRICS16,DWORD,LPVOID,const MAT2*);\nINT16       WINAPI GetKerningPairs16(HDC16,INT16,LPKERNINGPAIR16);\nINT16       WINAPI GetMapMode16(HDC16);\nHMETAFILE16 WINAPI GetMetaFile16(LPCSTR);\nHGLOBAL16   WINAPI GetMetaFileBits16(HMETAFILE16);\nDWORD       WINAPI GetNearestColor16(HDC16,DWORD);\nUINT16      WINAPI GetNearestPaletteIndex16(HPALETTE16,COLORREF);\nINT16       WINAPI GetObject16(HANDLE16,INT16,LPVOID);\nUINT16      WINAPI GetOutlineTextMetrics16(HDC16,UINT16,LPOUTLINETEXTMETRIC16);\nUINT16      WINAPI GetPaletteEntries16(HPALETTE16,UINT16,UINT16,LPPALETTEENTRY);\nINT16       WINAPI GetPath16(HDC16,LPPOINT16,LPBYTE,INT16);\nCOLORREF    WINAPI GetPixel16(HDC16,INT16,INT16);\nINT16       WINAPI GetPolyFillMode16(HDC16);\nBOOL16      WINAPI GetRasterizerCaps16(LPRASTERIZER_STATUS,UINT16);\nDWORD       WINAPI GetRegionData16(HRGN16,DWORD,LPRGNDATA);\nINT16       WINAPI GetRelAbs16(HDC16);\nINT16       WINAPI GetRgnBox16(HRGN16,LPRECT16);\nINT16       WINAPI GetROP216(HDC16);\nDWORD       WINAPI GetSpoolJob16(int,LONG);\nHGDIOBJ16   WINAPI GetStockObject16(INT16);\nINT16       WINAPI GetStretchBltMode16(HDC16);\nUINT16      WINAPI GetSystemPaletteEntries16(HDC16,UINT16,UINT16,LPPALETTEENTRY);\nUINT16      WINAPI GetSystemPaletteUse16(HDC16);\nUINT16      WINAPI GetTextAlign16(HDC16);\nINT16       WINAPI GetTextCharacterExtra16(HDC16);\nUINT16      WINAPI GetTextCharset16(HDC16);\nCOLORREF    WINAPI GetTextColor16(HDC16);\nDWORD       WINAPI GetTextExtent16(HDC16,LPCSTR,INT16);\nBOOL16      WINAPI GetTextExtentPoint16(HDC16,LPCSTR,INT16,LPSIZE16);\nINT16       WINAPI GetTextFace16(HDC16,INT16,LPSTR);\nBOOL16      WINAPI GetTextMetrics16(HDC16,LPTEXTMETRIC16);\nDWORD       WINAPI GetViewportExt16(HDC16);\nBOOL16      WINAPI GetViewportExtEx16(HDC16,LPSIZE16);\nBOOL16      WINAPI GetViewportOrgEx16(HDC16,LPPOINT16);\nDWORD       WINAPI GetViewportOrg16(HDC16);\nDWORD       WINAPI GetWindowExt16(HDC16);\nDWORD       WINAPI GetWindowOrg16(HDC16);\nBOOL16      WINAPI GetWindowExtEx16(HDC16,LPSIZE16);\nBOOL16      WINAPI GetWindowOrgEx16(HDC16,LPPOINT16);\nHRGN16      WINAPI InquireVisRgn16(HDC16);\nINT16       WINAPI IntersectClipRect16(HDC16,INT16,INT16,INT16,INT16);\nINT16       WINAPI IntersectVisRect16(HDC16,INT16,INT16,INT16,INT16);\nBOOL16      WINAPI InvertRgn16(HDC16,HRGN16);\nBOOL16      WINAPI IsDCCurrentPalette16(HDC16);\nBOOL16      WINAPI IsGDIObject16(HGDIOBJ16);\nBOOL16      WINAPI IsValidMetaFile16(HMETAFILE16);\nVOID        WINAPI LineDDA16(INT16,INT16,INT16,INT16,LINEDDAPROC16,LPARAM);\nBOOL16      WINAPI LineTo16(HDC16,INT16,INT16);\nBOOL16      WINAPI LPtoDP16(HDC16,LPPOINT16,INT16);\nDWORD       WINAPI MoveTo16(HDC16,INT16,INT16);\nBOOL16      WINAPI MoveToEx16(HDC16,INT16,INT16,LPPOINT16);\nINT16       WINAPI MulDiv16(INT16,INT16,INT16);\nINT16       WINAPI OffsetClipRgn16(HDC16,INT16,INT16);\nINT16       WINAPI OffsetRgn16(HRGN16,INT16,INT16);\nDWORD       WINAPI OffsetViewportOrg16(HDC16,INT16,INT16);\nBOOL16      WINAPI OffsetViewportOrgEx16(HDC16,INT16,INT16,LPPOINT16);\nINT16       WINAPI OffsetVisRgn16(HDC16,INT16,INT16);\nDWORD       WINAPI OffsetWindowOrg16(HDC16,INT16,INT16);\nBOOL16      WINAPI OffsetWindowOrgEx16(HDC16,INT16,INT16,LPPOINT16);\nHANDLE16    WINAPI OpenJob16(LPCSTR,LPCSTR,HDC16);\nBOOL16      WINAPI PaintRgn16(HDC16,HRGN16);\nBOOL16      WINAPI PatBlt16(HDC16,INT16,INT16,INT16,INT16,DWORD);\nHRGN16      WINAPI PathToRegion16(HDC16);\nBOOL16      WINAPI Pie16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16,INT16,INT16);\nBOOL16      WINAPI PlayMetaFile16(HDC16,HMETAFILE16);\nVOID        WINAPI PlayMetaFileRecord16(HDC16,LPHANDLETABLE16,LPMETARECORD,UINT16);\nBOOL16      WINAPI PolyBezier16(HDC16,const POINT16*,INT16);\nBOOL16      WINAPI PolyBezierTo16(HDC16,const POINT16*,INT16);\nBOOL16      WINAPI PolyPolygon16(HDC16,const POINT16*,const INT16*,UINT16);\nBOOL16      WINAPI Polygon16(HDC16,const POINT16*,INT16);\nBOOL16      WINAPI Polyline16(HDC16,const POINT16*,INT16);\nBOOL16      WINAPI PtInRegion16(HRGN16,INT16,INT16);\nBOOL16      WINAPI PtVisible16(HDC16,INT16,INT16);\nBOOL16      WINAPI QueryAbort16(HDC16,INT16);\nUINT16      WINAPI RealizeDefaultPalette16(HDC16);\nBOOL16      WINAPI Rectangle16(HDC16,INT16,INT16,INT16,INT16);\nBOOL16      WINAPI RectInRegion16(HRGN16,const RECT16 *);\nBOOL16      WINAPI RectVisible16(HDC16,const RECT16*);\nBOOL16      WINAPI RemoveFontResource16(LPCSTR);\nHDC16       WINAPI ResetDC16(HDC16,const DEVMODEA *);\nBOOL16      WINAPI ResizePalette16(HPALETTE16,UINT16);\nBOOL16      WINAPI RestoreDC16(HDC16,INT16);\nINT16       WINAPI RestoreVisRgn16(HDC16);\nVOID        WINAPI Resurrection16(HDC16,WORD,WORD,WORD,WORD,WORD,WORD);\nBOOL16      WINAPI RoundRect16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16);\nINT16       WINAPI SaveDC16(HDC16);\nHRGN16      WINAPI SaveVisRgn16(HDC16);\nDWORD       WINAPI ScaleViewportExt16(HDC16,INT16,INT16,INT16,INT16);\nBOOL16      WINAPI ScaleViewportExtEx16(HDC16,INT16,INT16,INT16,INT16,LPSIZE16);\nDWORD       WINAPI ScaleWindowExt16(HDC16,INT16,INT16,INT16,INT16);\nBOOL16      WINAPI ScaleWindowExtEx16(HDC16,INT16,INT16,INT16,INT16,LPSIZE16);\nBOOL16      WINAPI SelectClipPath16(HDC16,INT16);\nINT16       WINAPI SelectClipRgn16(HDC16,HRGN16);\nHGDIOBJ16   WINAPI SelectObject16(HDC16,HGDIOBJ16);\nINT16       WINAPI SelectVisRgn16(HDC16,HRGN16);\nINT16       WINAPI SetAbortProc16(HDC16,ABORTPROC16);\nINT16       WINAPI SetArcDirection16(HDC16,INT16);\nLONG        WINAPI SetBitmapBits16(HBITMAP16,LONG,LPCVOID);\nDWORD       WINAPI SetBitmapDimension16(HBITMAP16,INT16,INT16);\nBOOL16      WINAPI SetBitmapDimensionEx16(HBITMAP16,INT16,INT16,LPSIZE16);\nCOLORREF    WINAPI SetBkColor16(HDC16,COLORREF);\nINT16       WINAPI SetBkMode16(HDC16,INT16);\nUINT16      WINAPI SetBoundsRect16(HDC16,const RECT16*,UINT16);\nDWORD       WINAPI SetBrushOrg16(HDC16,INT16,INT16);\nBOOL16      WINAPI SetDCHook16(HDC16,FARPROC16,DWORD);\nDWORD       WINAPI SetDCOrg16(HDC16,INT16,INT16);\nVOID        WINAPI SetDCState16(HDC16,HDC16);\nUINT16      WINAPI SetDIBColorTable16(HDC16,UINT16,UINT16,RGBQUAD*);\nINT16       WINAPI SetDIBits16(HDC16,HBITMAP16,UINT16,UINT16,LPCVOID,const BITMAPINFO*,UINT16);\nINT16       WINAPI SetDIBitsToDevice16(HDC16,INT16,INT16,INT16,INT16,INT16,\n                         INT16,UINT16,UINT16,LPCVOID,const BITMAPINFO*,UINT16);\nINT16       WINAPI SetEnvironment16(LPCSTR,LPDEVMODEA,UINT16);\nWORD        WINAPI SetHookFlags16(HDC16,WORD);\nINT16       WINAPI SetMapMode16(HDC16,INT16);\nDWORD       WINAPI SetMapperFlags16(HDC16,DWORD);\nHMETAFILE16 WINAPI SetMetaFileBits16(HGLOBAL16);\nUINT16      WINAPI SetPaletteEntries16(HPALETTE16,UINT16,UINT16,const PALETTEENTRY*);\nCOLORREF    WINAPI SetPixel16(HDC16,INT16,INT16,COLORREF);\nINT16       WINAPI SetPolyFillMode16(HDC16,INT16);\nVOID        WINAPI SetRectRgn16(HRGN16,INT16,INT16,INT16,INT16);\nINT16       WINAPI SetRelAbs16(HDC16,INT16);\nINT16       WINAPI SetROP216(HDC16,INT16);\nINT16       WINAPI SetStretchBltMode16(HDC16,INT16);\nUINT16      WINAPI SetSystemPaletteUse16(HDC16,UINT16);\nUINT16      WINAPI SetTextAlign16(HDC16,UINT16);\nINT16       WINAPI SetTextCharacterExtra16(HDC16,INT16);\nCOLORREF    WINAPI SetTextColor16(HDC16,COLORREF);\nINT16       WINAPI SetTextJustification16(HDC16,INT16,INT16);\nDWORD       WINAPI SetViewportExt16(HDC16,INT16,INT16);\nBOOL16      WINAPI SetViewportExtEx16(HDC16,INT16,INT16,LPSIZE16);\nDWORD       WINAPI SetViewportOrg16(HDC16,INT16,INT16);\nBOOL16      WINAPI SetViewportOrgEx16(HDC16,INT16,INT16,LPPOINT16);\nDWORD       WINAPI SetWindowExt16(HDC16,INT16,INT16);\nBOOL16      WINAPI SetWindowExtEx16(HDC16,INT16,INT16,LPSIZE16);\nDWORD       WINAPI SetWindowOrg16(HDC16,INT16,INT16);\nBOOL16      WINAPI SetWindowOrgEx16(HDC16,INT16,INT16,LPPOINT16);\nINT16       WINAPI StartDoc16(HDC16,const DOCINFO16*);\nINT16       WINAPI StartPage16(HDC16);\nINT16       WINAPI StartSpoolPage16(HPJOB16);\nBOOL16      WINAPI StretchBlt16(HDC16,INT16,INT16,INT16,INT16,HDC16,INT16,\n                                INT16,INT16,INT16,DWORD);\nINT16       WINAPI StretchDIBits16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16,\n                       INT16,INT16,const VOID*,const BITMAPINFO*,UINT16,DWORD);\nBOOL16      WINAPI StrokeAndFillPath16(HDC16);\nBOOL16      WINAPI StrokePath16(HDC16);\nBOOL16      WINAPI TextOut16(HDC16,INT16,INT16,LPCSTR,INT16);\nBOOL16      WINAPI UnrealizeObject16(HGDIOBJ16);\nINT16       WINAPI UpdateColors16(HDC16);\nBOOL16      WINAPI WidenPath16(HDC16);\nINT16       WINAPI WriteDialog16(HPJOB16,LPSTR,INT16);\nINT16       WINAPI WriteSpool16(HPJOB16,LPSTR,INT16);\n\n#endif /* __WINE_WINE_WINGDI16_H */\n"
  },
  {
    "path": "wine/wine/winnet16.h",
    "content": "/*\n * Definitions for windows network service\n *\n * Copyright 1997 Andreas Mohr\n * Copyright 1999 Ulrich Weigand\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINNET16_H\n#define __WINE_WINNET16_H\n\n#include <windef.h>\n#include <wine/windef16.h>\n\n#include <pshpack1.h>\n\n/*\n * Remote printing\n */\n\ntypedef struct\n{\n    WORD    pqName;\n    WORD    pqComment;\n    WORD    pqStatus;\n    WORD    pqJobcount;\n    WORD    pqPrinters;\n\n} QUEUESTRUCT16, *LPQUEUESTRUCT16;\n\n#define WNPRQ_ACTIVE    0x0\n#define WNPRQ_PAUSE     0x1\n#define WNPRQ_ERROR     0x2\n#define WNPRQ_PENDING   0x3\n#define WNPRQ_PROBLEM   0x4\n\ntypedef struct\n{\n    WORD    pjId;\n    WORD    pjUsername;\n    WORD    pjParms;\n    WORD    pjPosition;\n    WORD    pjStatus;\n    DWORD   pjSubmitted;\n    DWORD   pjSize;\n    WORD    pjCopies;\n    WORD    pjComment;\n\n} JOBSTRUCT16, *LPJOBSTRUCT16;\n\n#include <poppack.h>\n\n#define WNPRJ_QSTATUS           0x0007\n#define WNPRJ_DEVSTATUS         0x0FF8\n\n#define WNPRJ_QS_QUEUED         0x0000\n#define WNPRJ_QS_PAUSED         0x0001\n#define WNPRJ_QS_SPOOLING       0x0002\n#define WNPRJ_QS_PRINTING       0x0003\n\n#define WNPRJ_DS_COMPLETE       0x0008\n#define WNPRJ_DS_INTERV         0x0010\n#define WNPRJ_DS_ERROR          0x0020\n#define WNPRJ_DS_DESTOFFLINE    0x0040\n#define WNPRJ_DS_DESTPAUSED     0x0080\n#define WNPRJ_DS_NOTIFY         0x0100\n#define WNPRJ_DS_DESTNOPAPER    0x0200\n#define WNPRJ_DS_DESTFORMCHG    0x0400\n#define WNPRJ_DS_DESTCRTCHG     0x0800\n#define WNPRJ_DS_DESTPENCHG     0x1000\n\n#define SP_QUEUECHANGED         0x0500\n\n#define WNJ_NULL_JOBID  0\n\nWORD WINAPI WNetOpenJob16(LPSTR,LPSTR,WORD,LPINT16);\nWORD WINAPI WNetCloseJob16(WORD,LPINT16,LPSTR);\nWORD WINAPI WNetWriteJob16(HANDLE16,LPSTR,LPINT16);\nWORD WINAPI WNetAbortJob16(LPSTR,WORD);\nWORD WINAPI WNetHoldJob16(LPSTR,WORD);\nWORD WINAPI WNetReleaseJob16(LPSTR,WORD);\nWORD WINAPI WNetCancelJob16(LPSTR,WORD);\nWORD WINAPI WNetSetJobCopies16(LPSTR,WORD,WORD);\n\nWORD WINAPI WNetWatchQueue16(HWND16,LPSTR,LPSTR,WORD);\nWORD WINAPI WNetUnwatchQueue16(LPSTR);\nWORD WINAPI WNetLockQueueData16(LPSTR,LPSTR,LPQUEUESTRUCT16 *);\nWORD WINAPI WNetUnlockQueueData16(LPSTR);\n\n\n/*\n * Connections\n */\n\nWORD WINAPI WNetAddConnection16(LPCSTR,LPCSTR,LPCSTR);\nWORD WINAPI WNetCancelConnection16(LPSTR,BOOL16);\nWORD WINAPI WNetGetConnection16(LPSTR,LPSTR,UINT16 *);\nWORD WINAPI WNetRestoreConnection16(HWND16,LPSTR);\n\n/*\n * Capabilities\n */\n\nWORD WINAPI WNetGetCaps16(WORD);\n\n#define WNNC16_SPEC_VERSION                       0x01\n#define WNNC16_NET_TYPE                           0x02\n#define WNNC16_DRIVER_VERSION                     0x03\n#define WNNC16_USER                               0x04\n#define WNNC16_CONNECTION                         0x06\n#define WNNC16_PRINTING                           0x07\n#define WNNC16_DIALOG                             0x08\n#define WNNC16_ADMIN                              0x09\n#define WNNC16_ERROR                              0x0a\n#define WNNC16_PRINTMGREXT                        0x0b\n\n#define WNNC16_NET_NONE                           0x0\n#define WNNC16_NET_MSNet                          0x1\n#define WNNC16_NET_LanMan                         0x2\n#define WNNC16_NET_NetWare                        0x3\n#define WNNC16_NET_Vines                          0x4\n#define WNNC16_NET_10NET                          0x5\n#define WNNC16_NET_Locus                          0x6\n#define WNNC16_NET_SUN_PC_NFS                     0x7\n#define WNNC16_NET_LANstep                        0x8\n#define WNNC16_NET_9TILES                         0x9\n#define WNNC16_NET_LANtastic                      0xa\n#define WNNC16_NET_AS400                          0xb\n#define WNNC16_NET_FTP_NFS                        0xc\n#define WNNC16_NET_PATHWORKS                      0xd\n#define WNNC16_NET_LifeNet                        0xe\n#define WNNC16_NET_POWERLan                       0xf\n#define WNNC16_NET_MultiNet                       0x8000\n\n#define WNNC16_SUBNET_NONE                        0x00\n#define WNNC16_SUBNET_MSNet                       0x01\n#define WNNC16_SUBNET_LanMan                      0x02\n#define WNNC16_SUBNET_WinWorkgroups               0x04\n#define WNNC16_SUBNET_NetWare                     0x08\n#define WNNC16_SUBNET_Vines                       0x10\n#define WNNC16_SUBNET_Other                       0x80\n\n#define WNNC16_CON_AddConnection                  0x0001\n#define WNNC16_CON_CancelConnection               0x0002\n#define WNNC16_CON_GetConnections                 0x0004\n#define WNNC16_CON_AutoConnect                    0x0008\n#define WNNC16_CON_BrowseDialog                   0x0010\n#define WNNC16_CON_RestoreConnection              0x0020\n\n#define WNNC16_PRT_OpenJob                        0x0002\n#define WNNC16_PRT_CloseJob                       0x0004\n#define WNNC16_PRT_HoldJob                        0x0010\n#define WNNC16_PRT_ReleaseJob                     0x0020\n#define WNNC16_PRT_CancelJob                      0x0040\n#define WNNC16_PRT_SetJobCopies                   0x0080\n#define WNNC16_PRT_WatchQueue                     0x0100\n#define WNNC16_PRT_UnwatchQueue                   0x0200\n#define WNNC16_PRT_LockQueueData                  0x0400\n#define WNNC16_PRT_UnlockQueueData                0x0800\n#define WNNC16_PRT_ChangeMsg                      0x1000\n#define WNNC16_PRT_AbortJob                       0x2000\n#define WNNC16_PRT_NoArbitraryLock                0x4000\n#define WNNC16_PRT_WriteJob                       0x8000\n\n#define WNNC16_DLG_DeviceMode                     0x0001\n#define WNNC16_DLG_BrowseDialog                   0x0002\n#define WNNC16_DLG_ConnectDialog                  0x0004\n#define WNNC16_DLG_DisconnectDialog               0x0008\n#define WNNC16_DLG_ViewQueueDialog                0x0010\n#define WNNC16_DLG_PropertyDialog                 0x0020\n#define WNNC16_DLG_ConnectionDialog               0x0040\n#define WNNC16_DLG_PrinterConnectDialog           0x0080\n#define WNNC16_DLG_SharesDialog                   0x0100\n#define WNNC16_DLG_ShareAsDialog                  0x0200\n\n#define WNNC16_ADM_GetDirectoryType               0x0001\n#define WNNC16_ADM_DirectoryNotify                0x0002\n#define WNNC16_ADM_LongNames                      0x0004\n#define WNNC16_ADM_SetDefaultDrive                0x0008\n\n#define WNNC16_ERR_GetError                       0x0001\n#define WNNC16_ERR_GetErrorText                   0x0002\n\n\n/*\n * Get User\n */\n\nWORD WINAPI WNetGetUser16(LPSTR,LPINT16);\n\n\n/*\n * Browsing\n */\n\n#define WNBD_CONN_UNKNOWN       0x0\n#define WNBD_CONN_DISKTREE      0x1\n#define WNBD_CONN_PRINTQ        0x3\n#define WNBD_MAX_LENGTH         0x80\n\n#define WNTYPE_DRIVE            1\n#define WNTYPE_FILE             2\n#define WNTYPE_PRINTER          3\n#define WNTYPE_COMM             4\n\n#define WNPS_FILE               0\n#define WNPS_DIR                1\n#define WNPS_MULT               2\n\nWORD WINAPI WNetDeviceMode16(HWND16);\nWORD WINAPI WNetBrowseDialog16(HWND16,WORD,LPSTR);\nWORD WINAPI WNetConnectDialog16(HWND16,WORD);\nWORD WINAPI WNetDisconnectDialog16(HWND16,WORD);\nWORD WINAPI WNetConnectionDialog16(HWND16,WORD);\nWORD WINAPI WNetViewQueueDialog16(HWND16,LPSTR);\nWORD WINAPI WNetPropertyDialog16(HWND16,WORD,WORD,LPSTR,WORD);\nWORD WINAPI WNetGetPropertyText16(WORD,WORD,LPSTR,LPSTR,WORD,WORD);\n\n\n/*\n * Admin\n */\n\n#define WNDT_NORMAL   0\n#define WNDT_NETWORK  1\n\n#define WNDN_MKDIR    1\n#define WNDN_RMDIR    2\n#define WNDN_MVDIR    3\n\nWORD WINAPI WNetGetDirectoryType16(LPSTR,LPINT16);\nWORD WINAPI WNetDirectoryNotify16(HWND16,LPSTR,WORD);\n\n\n/*\n * Status codes\n */\n\nWORD WINAPI WNetGetError16(LPINT16);\nWORD WINAPI WNetGetErrorText16(WORD,LPSTR,LPINT16);\nWORD WINAPI WNetErrorText16(WORD,LPSTR,WORD);\n\n#define WN16_SUCCESS                      0x0000\n#define WN16_NOT_SUPPORTED                0x0001\n#define WN16_NET_ERROR                    0x0002\n#define WN16_MORE_DATA                    0x0003\n#define WN16_BAD_POINTER                  0x0004\n#define WN16_BAD_VALUE                    0x0005\n#define WN16_BAD_PASSWORD                 0x0006\n#define WN16_ACCESS_DENIED                0x0007\n#define WN16_FUNCTION_BUSY                0x0008\n#define WN16_WINDOWS_ERROR                0x0009\n#define WN16_BAD_USER                     0x000A\n#define WN16_OUT_OF_MEMORY                0x000B\n#define WN16_CANCEL                       0x000C\n#define WN16_CONTINUE                     0x000D\n#define WN16_NOT_CONNECTED                0x0030\n#define WN16_OPEN_FILES                   0x0031\n#define WN16_BAD_NETNAME                  0x0032\n#define WN16_BAD_LOCALNAME                0x0033\n#define WN16_ALREADY_CONNECTED            0x0034\n#define WN16_DEVICE_ERROR                 0x0035\n#define WN16_CONNECTION_CLOSED            0x0036\n#define WN16_BAD_JOBID                    0x0040\n#define WN16_JOB_NOT_FOUND                0x0041\n#define WN16_JOB_NOT_HELD                 0x0042\n#define WN16_BAD_QUEUE                    0x0043\n#define WN16_BAD_FILE_HANDLE              0x0044\n#define WN16_CANT_SET_COPIES              0x0045\n#define WN16_ALREADY_LOCKED               0x0046\n#define WN16_NO_ERROR                     0x0050\n\n\n\n#endif /* __WINE_WINNET16_H */\n"
  },
  {
    "path": "wine/wine/winuser16.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINE_WINUSER16_H\n#define __WINE_WINE_WINUSER16_H\n\n#include <wine/wingdi16.h> /* wingdi.h needed for COLORREF */\n#include <winuser.h> /* winuser.h needed for MSGBOXCALLBACK */\n\n#include <pshpack1.h>\n\ntypedef struct tagCOMSTAT16\n{\n    BYTE   status;\n    UINT16 cbInQue;\n    UINT16 cbOutQue;\n} COMSTAT16,*LPCOMSTAT16;\n\ntypedef struct tagDCB16\n{\n    BYTE   Id;\n    UINT16 BaudRate;\n    BYTE   ByteSize;\n    BYTE   Parity;\n    BYTE   StopBits;\n    UINT16 RlsTimeout;\n    UINT16 CtsTimeout;\n    UINT16 DsrTimeout;\n\n    unsigned fBinary        :1;\n    unsigned fRtsDisable    :1;\n    unsigned fParity        :1;\n    unsigned fOutxCtsFlow   :1;\n    unsigned fOutxDsrFlow   :1;\n    unsigned fDummy         :2;\n    unsigned fDtrDisable    :1;\n\n    unsigned fOutX          :1;\n    unsigned fInX           :1;\n    unsigned fPeChar        :1;\n    unsigned fNull          :1;\n    unsigned fChEvt         :1;\n    unsigned fDtrflow       :1;\n    unsigned fRtsflow       :1;\n    unsigned fDummy2        :1;\n\n    CHAR   XonChar;\n    CHAR   XoffChar;\n    UINT16 XonLim;\n    UINT16 XoffLim;\n    CHAR   PeChar;\n    CHAR   EofChar;\n    CHAR   EvtChar;\n    UINT16 TxDelay;\n} DCB16, *LPDCB16;\n\n\ntypedef struct\n{\n   LPARAM   lParam;\n   WPARAM16 wParam;\n   UINT16   message;\n   HWND16   hwnd;\n} CWPSTRUCT16, *LPCWPSTRUCT16;\n\ntypedef struct\n{\n  LRESULT       lResult;\n  LPARAM        lParam;\n  WPARAM16      wParam;\n  DWORD         message;\n  HWND16        hwnd;\n} CWPRETSTRUCT16, *LPCWPRETSTRUCT16;\n\n  /* SetWindowPlacement() struct */\ntypedef struct\n{\n    UINT16   length;\n    UINT16   flags;\n    UINT16   showCmd;\n    POINT16  ptMinPosition;\n    POINT16  ptMaxPosition;\n    RECT16   rcNormalPosition;\n} WINDOWPLACEMENT16, *LPWINDOWPLACEMENT16;\n\n/****** Window classes ******/\n\ntypedef struct\n{\n    UINT16      style;\n    WNDPROC16   lpfnWndProc;\n    INT16       cbClsExtra;\n    INT16       cbWndExtra;\n    HANDLE16    hInstance;\n    HICON16     hIcon;\n    HCURSOR16   hCursor;\n    HBRUSH16    hbrBackground;\n    SEGPTR      lpszMenuName;\n    SEGPTR      lpszClassName;\n} WNDCLASS16, *LPWNDCLASS16;\n\ntypedef struct\n{\n    UINT      cbSize;\n    UINT      style;\n    WNDPROC16   lpfnWndProc;\n    INT16       cbClsExtra;\n    INT16       cbWndExtra;\n    HANDLE16    hInstance;\n    HICON16     hIcon;\n    HCURSOR16   hCursor;\n    HBRUSH16    hbrBackground;\n    SEGPTR      lpszMenuName;\n    SEGPTR      lpszClassName;\n    HICON16     hIconSm;\n} WNDCLASSEX16, *LPWNDCLASSEX16;\n\ntypedef struct\n{\n    HWND16    hwnd;\n    UINT16    message;\n    WPARAM16  wParam;\n    LPARAM    lParam;\n    DWORD     time;\n    POINT16   pt;\n} MSG16, *LPMSG16;\n\ntypedef struct\n{\n    MSG16 msg;\n    WORD wParamHigh;\n} MSG32_16, *LPMSG16_32;\n\n/* Cursors / Icons */\n\ntypedef struct tagCURSORICONINFO\n{\n    POINT16 ptHotSpot;\n    WORD    nWidth;\n    WORD    nHeight;\n    WORD    nWidthBytes;\n    BYTE    bPlanes;\n    BYTE    bBitsPerPixel;\n} CURSORICONINFO;\n\ntypedef struct {\n\tBOOL16\t\tfIcon;\n\tWORD\t\txHotspot;\n\tWORD\t\tyHotspot;\n\tHBITMAP16\thbmMask;\n\tHBITMAP16\thbmColor;\n} ICONINFO16,*LPICONINFO16;\n\ntypedef struct\n{\n    BYTE   fVirt;\n    WORD   key;\n    WORD   cmd;\n} ACCEL16, *LPACCEL16;\n\n/* FIXME: not sure this one is correct */\ntypedef struct {\n  UINT16    cbSize;\n  UINT16    fMask;\n  UINT16    fType;\n  UINT16    fState;\n  UINT16    wID;\n  HMENU16   hSubMenu;\n  HBITMAP16 hbmpChecked;\n  HBITMAP16 hbmpUnchecked;\n  DWORD     dwItemData;\n  SEGPTR    dwTypeData;\n  UINT16    cch;\n} MENUITEMINFO16, *LPMENUITEMINFO16;\n\n/* DrawState defines ... */\ntypedef BOOL16 (CALLBACK *DRAWSTATEPROC16)(HDC16,LPARAM,WPARAM16,INT16,INT16);\n\n/* Listbox messages */\n#define LB_ADDSTRING16           (WM_USER+1)\n#define LB_INSERTSTRING16        (WM_USER+2)\n#define LB_DELETESTRING16        (WM_USER+3)\n#define LB_SELITEMRANGEEX16      (WM_USER+4)\n#define LB_RESETCONTENT16        (WM_USER+5)\n#define LB_SETSEL16              (WM_USER+6)\n#define LB_SETCURSEL16           (WM_USER+7)\n#define LB_GETSEL16              (WM_USER+8)\n#define LB_GETCURSEL16           (WM_USER+9)\n#define LB_GETTEXT16             (WM_USER+10)\n#define LB_GETTEXTLEN16          (WM_USER+11)\n#define LB_GETCOUNT16            (WM_USER+12)\n#define LB_SELECTSTRING16        (WM_USER+13)\n#define LB_DIR16                 (WM_USER+14)\n#define LB_GETTOPINDEX16         (WM_USER+15)\n#define LB_FINDSTRING16          (WM_USER+16)\n#define LB_GETSELCOUNT16         (WM_USER+17)\n#define LB_GETSELITEMS16         (WM_USER+18)\n#define LB_SETTABSTOPS16         (WM_USER+19)\n#define LB_GETHORIZONTALEXTENT16 (WM_USER+20)\n#define LB_SETHORIZONTALEXTENT16 (WM_USER+21)\n#define LB_SETCOLUMNWIDTH16      (WM_USER+22)\n#define LB_ADDFILE16             (WM_USER+23)\n#define LB_SETTOPINDEX16         (WM_USER+24)\n#define LB_GETITEMRECT16         (WM_USER+25)\n#define LB_GETITEMDATA16         (WM_USER+26)\n#define LB_SETITEMDATA16         (WM_USER+27)\n#define LB_SELITEMRANGE16        (WM_USER+28)\n#define LB_SETANCHORINDEX16      (WM_USER+29)\n#define LB_GETANCHORINDEX16      (WM_USER+30)\n#define LB_SETCARETINDEX16       (WM_USER+31)\n#define LB_GETCARETINDEX16       (WM_USER+32)\n#define LB_SETITEMHEIGHT16       (WM_USER+33)\n#define LB_GETITEMHEIGHT16       (WM_USER+34)\n#define LB_FINDSTRINGEXACT16     (WM_USER+35)\n#define LB_CARETON16             (WM_USER+36)\n#define LB_CARETOFF16            (WM_USER+37)\n\n/* Combo box messages */\n#define CB_GETEDITSEL16            (WM_USER+0)\n#define CB_LIMITTEXT16             (WM_USER+1)\n#define CB_SETEDITSEL16            (WM_USER+2)\n#define CB_ADDSTRING16             (WM_USER+3)\n#define CB_DELETESTRING16          (WM_USER+4)\n#define CB_DIR16                   (WM_USER+5)\n#define CB_GETCOUNT16              (WM_USER+6)\n#define CB_GETCURSEL16             (WM_USER+7)\n#define CB_GETLBTEXT16             (WM_USER+8)\n#define CB_GETLBTEXTLEN16          (WM_USER+9)\n#define CB_INSERTSTRING16          (WM_USER+10)\n#define CB_RESETCONTENT16          (WM_USER+11)\n#define CB_FINDSTRING16            (WM_USER+12)\n#define CB_SELECTSTRING16          (WM_USER+13)\n#define CB_SETCURSEL16             (WM_USER+14)\n#define CB_SHOWDROPDOWN16          (WM_USER+15)\n#define CB_GETITEMDATA16           (WM_USER+16)\n#define CB_SETITEMDATA16           (WM_USER+17)\n#define CB_GETDROPPEDCONTROLRECT16 (WM_USER+18)\n#define CB_SETITEMHEIGHT16         (WM_USER+19)\n#define CB_GETITEMHEIGHT16         (WM_USER+20)\n#define CB_SETEXTENDEDUI16         (WM_USER+21)\n#define CB_GETEXTENDEDUI16         (WM_USER+22)\n#define CB_GETDROPPEDSTATE16       (WM_USER+23)\n#define CB_FINDSTRINGEXACT16       (WM_USER+24)\n\ntypedef struct /* not sure if the 16bit version is correct */\n{\n    UINT\tcbSize;\n    HWND16\thwndOwner;\n    HINSTANCE16\thInstance;\n    SEGPTR\tlpszText;\n    SEGPTR\tlpszCaption;\n    DWORD\tdwStyle;\n    SEGPTR\tlpszIcon;\n    DWORD\tdwContextHelpId;\n    MSGBOXCALLBACK\tlpfnMsgBoxCallback;\n    DWORD\tdwLanguageId;\n} MSGBOXPARAMS16,*LPMSGBOXPARAMS16;\n\n  /* Windows */\n\ntypedef struct\n{\n    SEGPTR      lpCreateParams;\n    HINSTANCE16 hInstance;\n    HMENU16     hMenu;\n    HWND16      hwndParent;\n    INT16       cy;\n    INT16       cx;\n    INT16       y;\n    INT16       x;\n    LONG        style;\n    SEGPTR      lpszName;\n    SEGPTR      lpszClass;\n    DWORD       dwExStyle;\n} CREATESTRUCT16, *LPCREATESTRUCT16;\n\ntypedef struct\n{\n    HDC16   hdc;\n    BOOL16  fErase;\n    RECT16  rcPaint;\n    BOOL16  fRestore;\n    BOOL16  fIncUpdate;\n    BYTE    rgbReserved[16];\n} PAINTSTRUCT16, *LPPAINTSTRUCT16;\n\ntypedef struct\n{\n    HMENU16   hWindowMenu;\n    UINT16    idFirstChild;\n} CLIENTCREATESTRUCT16, *LPCLIENTCREATESTRUCT16;\n\ntypedef struct\n{\n    SEGPTR       szClass;\n    SEGPTR       szTitle;\n    HINSTANCE16  hOwner;\n    INT16        x;\n    INT16        y;\n    INT16        cx;\n    INT16        cy;\n    DWORD        style;\n    LPARAM       lParam;\n} MDICREATESTRUCT16, *LPMDICREATESTRUCT16;\n\n  /* WM_GETMINMAXINFO struct */\ntypedef struct\n{\n    POINT16   ptReserved;\n    POINT16   ptMaxSize;\n    POINT16   ptMaxPosition;\n    POINT16   ptMinTrackSize;\n    POINT16   ptMaxTrackSize;\n} MINMAXINFO16;\n\n  /* WM_WINDOWPOSCHANGING/CHANGED struct */\ntypedef struct tagWINDOWPOS16\n{\n    HWND16  hwnd;\n    HWND16  hwndInsertAfter;\n    INT16   x;\n    INT16   y;\n    INT16   cx;\n    INT16   cy;\n    UINT16  flags;\n} WINDOWPOS16, *LPWINDOWPOS16;\n\n  /* WM_NCCALCSIZE parameter structure */\ntypedef struct\n{\n    RECT16  rgrc[3];\n    SEGPTR  lppos;\n} NCCALCSIZE_PARAMS16, *LPNCCALCSIZE_PARAMS16;\n\ntypedef struct {\n\tUINT16\t\tcbSize;\n\tINT16\t\tiBorderWidth;\n\tINT16\t\tiScrollWidth;\n\tINT16\t\tiScrollHeight;\n\tINT16\t\tiCaptionWidth;\n\tINT16\t\tiCaptionHeight;\n\tLOGFONT16\tlfCaptionFont;\n\tINT16\t\tiSmCaptionWidth;\n\tINT16\t\tiSmCaptionHeight;\n\tLOGFONT16\tlfSmCaptionFont;\n\tINT16\t\tiMenuWidth;\n\tINT16\t\tiMenuHeight;\n\tLOGFONT16\tlfMenuFont;\n\tLOGFONT16\tlfStatusFont;\n\tLOGFONT16\tlfMessageFont;\n} NONCLIENTMETRICS16,*LPNONCLIENTMETRICS16;\n\n  /* Journalling hook structure */\n\ntypedef struct\n{\n    UINT16  message;\n    UINT16  paramL;\n    UINT16  paramH;\n    DWORD   time;\n} EVENTMSG16, *LPEVENTMSG16;\n\n  /* Mouse hook structure */\n\ntypedef struct\n{\n    POINT16 pt;\n    HWND16  hwnd;\n    UINT16  wHitTestCode;\n    DWORD   dwExtraInfo;\n} MOUSEHOOKSTRUCT16, *LPMOUSEHOOKSTRUCT16;\n\n  /* Hardware hook structure */\n\ntypedef struct\n{\n    HWND16    hWnd;\n    UINT16    wMessage;\n    WPARAM16  wParam;\n    LPARAM    lParam;\n} HARDWAREHOOKSTRUCT16, *LPHARDWAREHOOKSTRUCT16;\n\n/* Scrollbar messages */\n#define SBM_SETPOS16             (WM_USER+0)\n#define SBM_GETPOS16             (WM_USER+1)\n#define SBM_SETRANGE16           (WM_USER+2)\n#define SBM_GETRANGE16           (WM_USER+3)\n#define SBM_ENABLE_ARROWS16      (WM_USER+4)\n\n  /* CBT hook structures */\n\ntypedef struct\n{\n    CREATESTRUCT16  *lpcs;\n    HWND16           hwndInsertAfter;\n} CBT_CREATEWND16, *LPCBT_CREATEWND16;\n\ntypedef struct\n{\n    BOOL16    fMouse;\n    HWND16    hWndActive;\n} CBTACTIVATESTRUCT16, *LPCBTACTIVATESTRUCT16;\n\n  /* Debug hook structure */\n\ntypedef struct\n{\n    HMODULE16   hModuleHook;\n    LPARAM      reserved;\n    LPARAM      lParam;\n    WPARAM16    wParam;\n    INT16       code;\n} DEBUGHOOKINFO16, *LPDEBUGHOOKINFO16;\n\n#define GETMAXLPT\t8\n#define GETMAXCOM\t9\n#define GETBASEIRQ\t10\n\n/* GetFreeSystemResources() parameters */\n\n#define GFSR_SYSTEMRESOURCES   0x0000\n#define GFSR_GDIRESOURCES      0x0001\n#define GFSR_USERRESOURCES     0x0002\n\n/* CreateWindow() coordinates */\n#define CW_USEDEFAULT16 ((INT16)0x8000)\n\n/* Win16 button control messages */\n#define BM_GETCHECK16          (WM_USER+0)\n#define BM_SETCHECK16          (WM_USER+1)\n#define BM_GETSTATE16          (WM_USER+2)\n#define BM_SETSTATE16          (WM_USER+3)\n#define BM_SETSTYLE16          (WM_USER+4)\n\n/* Static Control Messages */\n#define STM_SETICON16       (WM_USER+0)\n#define STM_GETICON16       (WM_USER+1)\n\n/* Edit control messages */\n#define EM_GETSEL16                (WM_USER+0)\n#define EM_SETSEL16                (WM_USER+1)\n#define EM_GETRECT16               (WM_USER+2)\n#define EM_SETRECT16               (WM_USER+3)\n#define EM_SETRECTNP16             (WM_USER+4)\n#define EM_SCROLL16                (WM_USER+5)\n#define EM_LINESCROLL16            (WM_USER+6)\n#define EM_SCROLLCARET16           (WM_USER+7)\n#define EM_GETMODIFY16             (WM_USER+8)\n#define EM_SETMODIFY16             (WM_USER+9)\n#define EM_GETLINECOUNT16          (WM_USER+10)\n#define EM_LINEINDEX16             (WM_USER+11)\n#define EM_SETHANDLE16             (WM_USER+12)\n#define EM_GETHANDLE16             (WM_USER+13)\n#define EM_GETTHUMB16              (WM_USER+14)\n#define EM_LINELENGTH16            (WM_USER+17)\n#define EM_REPLACESEL16            (WM_USER+18)\n#define EM_GETLINE16               (WM_USER+20)\n#define EM_LIMITTEXT16             (WM_USER+21)\n#define EM_CANUNDO16               (WM_USER+22)\n#define EM_UNDO16                  (WM_USER+23)\n#define EM_FMTLINES16              (WM_USER+24)\n#define EM_LINEFROMCHAR16          (WM_USER+25)\n#define EM_SETTABSTOPS16           (WM_USER+27)\n#define EM_SETPASSWORDCHAR16       (WM_USER+28)\n#define EM_EMPTYUNDOBUFFER16       (WM_USER+29)\n#define EM_GETFIRSTVISIBLELINE16   (WM_USER+30)\n#define EM_SETREADONLY16           (WM_USER+31)\n#define EM_SETWORDBREAKPROC16      (WM_USER+32)\n#define EM_GETWORDBREAKPROC16      (WM_USER+33)\n#define EM_GETPASSWORDCHAR16       (WM_USER+34)\n\ntypedef struct\n{\n    UINT16      CtlType;\n    UINT16      CtlID;\n    UINT16      itemID;\n    UINT16      itemAction;\n    UINT16      itemState;\n    HWND16      hwndItem;\n    HDC16       hDC;\n    RECT16      rcItem;\n    DWORD       itemData;\n} DRAWITEMSTRUCT16, *PDRAWITEMSTRUCT16, *LPDRAWITEMSTRUCT16;\n\ntypedef struct\n{\n    UINT16      CtlType;\n    UINT16      CtlID;\n    UINT16      itemID;\n    UINT16      itemWidth;\n    UINT16      itemHeight;\n    DWORD       itemData;\n} MEASUREITEMSTRUCT16, *PMEASUREITEMSTRUCT16, *LPMEASUREITEMSTRUCT16;\n\ntypedef struct\n{\n    UINT16     CtlType;\n    UINT16     CtlID;\n    UINT16     itemID;\n    HWND16     hwndItem;\n    DWORD      itemData;\n} DELETEITEMSTRUCT16, *LPDELETEITEMSTRUCT16;\n\ntypedef struct\n{\n    UINT16      CtlType;\n    UINT16      CtlID;\n    HWND16      hwndItem;\n    UINT16      itemID1;\n    DWORD       itemData1;\n    UINT16      itemID2;\n    DWORD       itemData2;\n} COMPAREITEMSTRUCT16, *LPCOMPAREITEMSTRUCT16;\n\n/* DragObject stuff */\n\ntypedef struct\n{\n    HWND16     hWnd;\n    HWND16     hScope;\n    WORD       wFlags;\n    HANDLE16   hList;\n    HANDLE16   hOfStruct;\n    POINT16    pt;\n    LONG       l;\n} DRAGINFO16, *LPDRAGINFO16;\n\n/* undocumented */\ntypedef struct tagCOPYDATASTRUCT16 {\n    DWORD dwData;\n    DWORD cbData;\n    SEGPTR lpData;\n} COPYDATASTRUCT16, *PCOPYDATASTRUCT16;\n\n#define DRAGOBJ_PROGRAM    0x0001\n#define DRAGOBJ_DATA       0x0002\n#define DRAGOBJ_DIRECTORY  0x0004\n#define DRAGOBJ_MULTIPLE   0x0008\n#define DRAGOBJ_EXTERNAL   0x8000\n\n#define DRAG_PRINT 0x544E5250\n#define DRAG_FILE  0x454C4946\n\n/* internal structure */\ntypedef struct\n{\n    HQUEUE16 next; /* 00h */\n    HTASK16 hTask; /* 02h */\n    WORD cbMessage; /* 04h */\n    WORD cMessage; /* 06h */\n    WORD read; /* 08h */\n    WORD write; /* 0Ah */\n    WORD cbSize; /* 0Ch */\n    DWORD time; /* 0Eh */\n    POINT16 pos; /* 12h */\n    WORD unknown_16_1; /* 16h */\n    DWORD extraInfo; /* 18h */\n    WORD unknown_1C; /* 1Ch */\n    DWORD lParam; /* 1Eh */\n    WPARAM16 wParam; /* 22h */\n    UINT16 message; /* 24h */\n    HWND16 hWnd; /* 26h */\n    DWORD lResult; /* 28h */\n    WORD quitFlag; /* 2Ch */\n    WORD exitCode; /* 2Eh */\n    WORD flags; /* 30h */\n    DWORD unknown_32; /* 32h */\n    WORD expVer; /* 36h */\n    HQUEUE16 sendingQueue; /* 38h */\n    WORD sendMessageInternal[2]; /* 3Ah */\n    WORD cPaint; /* 3Eh */\n    WORD cTimer; /* 40h */\n    WORD changeBits; /* 42h */\n    WORD wakeBits; /* 44h */\n    WORD wakeMask; /* 46h */\n    WORD sendMessagesInternal[3]; /* 48h */\n    WORD hookCurrent; /* 4Eh USER heap */\n    WORD hooks[12]; /* 50h USER heap */\n    WORD unknown[3];\n    BYTE messages[1];\n} QUEUE16;\n\n/* LocalSize_DS(LOWORD(hhook), hinst_user) -> 16 */\n/* 12 <= size <= 16 */\ntypedef struct\n{\n    WORD next; /* 00 USER heap */\n    SEGPTR proc; /* 02 */\n    INT16 id; /* 06 */\n    HQUEUE16 hQueue; /* 08 */\n    HMODULE16 hModule; /* 0A */\n    WORD unknown1; /* 0C */\n    WORD unknown2; /* 0E */\n} HOOK16;\n#include <poppack.h>\n\n/* WM_COMMNOTIFY flags */\n#define CN_RECEIVE\t0x0001\n#define CN_TRANSMIT\t0x0002\n#define CN_EVENT\t0x0004\n\nBOOL16      WINAPI CheckMenuRadioItem16(HMENU16,UINT16,UINT16,UINT16,UINT16);\nHICON16     WINAPI CopyImage16(HANDLE16,UINT16,INT16,INT16,UINT16);\nHICON16     WINAPI CreateIconFromResource16(LPBYTE,UINT16,BOOL16,DWORD);\nBOOL16      WINAPI EnumChildWindows16(HWND16,WNDENUMPROC16,LPARAM);\nINT16       WINAPI EnumProps16(HWND16,PROPENUMPROC16);\nBOOL16      WINAPI EnumWindows16(WNDENUMPROC16,LPARAM);\nDWORD       WINAPI GetAppCompatFlags16(HTASK16);\nINT16       WINAPI GetKBCodePage16(void);\nINT16       WINAPI GetKeyboardType16(INT16);\nINT16       WINAPI GetKeyNameText16(LONG,LPSTR,INT16);\nINT16       WINAPI GetWindowRgn16(HWND16,HRGN16);\nBOOL16      WINAPI IsWindow16(HWND16);\nINT16       WINAPI LookupIconIdFromDirectory16(LPBYTE,BOOL16);\nUINT16      WINAPI MapVirtualKey16(UINT16,UINT16);\nFARPROC16   WINAPI SetWindowsHook16(INT16,HOOKPROC16);\nHHOOK       WINAPI SetWindowsHookEx16(INT16,HOOKPROC16,HINSTANCE16,HTASK16);\nBOOL16      WINAPI UnhookWindowsHook16(INT16,HOOKPROC16);\nBOOL16      WINAPI UnhookWindowsHookEx16(HHOOK);\nVOID        WINAPI CalcChildScroll16(HWND16,WORD);\nVOID        WINAPI CascadeChildWindows16(HWND16,WORD);\nINT16       WINAPI CloseComm16(INT16);\nHGLOBAL16   WINAPI CreateCursorIconIndirect16(HINSTANCE16,CURSORICONINFO*,\n                                            LPCVOID,LPCVOID);\nBOOL16      WINAPI DCHook16(HDC16,WORD,DWORD,LPARAM);\nBOOL16      WINAPI DlgDirSelect16(HWND16,LPSTR,INT16);\nBOOL16      WINAPI DlgDirSelectComboBox16(HWND16,LPSTR,INT16);\nDWORD       WINAPI DumpIcon16(SEGPTR,WORD*,SEGPTR*,SEGPTR*);\nBOOL16      WINAPI EnableCommNotification16(INT16,HWND16,INT16,INT16);\nBOOL16      WINAPI EnableHardwareInput16(BOOL16);\nVOID        WINAPI FillWindow16(HWND16,HWND16,HDC16,HBRUSH16);\nINT16       WINAPI FlushComm16(INT16,INT16);\nUINT16      WINAPI GetCommEventMask16(INT16,UINT16);\nHBRUSH16    WINAPI GetControlBrush16(HWND16,HDC16,UINT16);\nHWND16      WINAPI GetDesktopHwnd16(void);\nWORD        WINAPI GetIconID16(HGLOBAL16,DWORD);\nFARPROC16   WINAPI GetMouseEventProc16(void);\nINT16       WINAPI InitApp16(HINSTANCE16);\nBOOL16      WINAPI IsUserIdle16(void);\nHGLOBAL16   WINAPI LoadCursorIconHandler16(HGLOBAL16,HMODULE16,HRSRC16);\nHGLOBAL16   WINAPI LoadDIBCursorHandler16(HGLOBAL16,HMODULE16,HRSRC16);\nHGLOBAL16   WINAPI LoadDIBIconHandler16(HGLOBAL16,HMODULE16,HRSRC16);\nHICON16     WINAPI LoadIconHandler16(HGLOBAL16,BOOL16);\nHMENU16     WINAPI LookupMenuHandle16(HMENU16,INT16);\nINT16       WINAPI OpenComm16(LPCSTR,UINT16,UINT16);\nVOID        WINAPI PaintRect16(HWND16,HWND16,HDC16,HBRUSH16,const RECT16*);\nINT16       WINAPI ReadComm16(INT16,LPSTR,INT16);\nSEGPTR      WINAPI SetCommEventMask16(INT16,UINT16);\nBOOL16      WINAPI SetDeskPattern(void);\nVOID        WINAPI TileChildWindows16(HWND16,WORD);\nINT16       WINAPI UngetCommChar16(INT16,CHAR);\nVOID        WINAPI UserYield16(void);\nINT16       WINAPI WriteComm16(INT16,LPSTR,INT16);\nBOOL16      WINAPI AdjustWindowRect16(LPRECT16,DWORD,BOOL16);\nBOOL16      WINAPI AdjustWindowRectEx16(LPRECT16,DWORD,BOOL16,DWORD);\nSEGPTR      WINAPI AnsiLower16(SEGPTR);\nUINT16      WINAPI AnsiLowerBuff16(LPSTR,UINT16);\nSEGPTR      WINAPI AnsiNext16(SEGPTR);\nSEGPTR      WINAPI AnsiPrev16(SEGPTR,SEGPTR);\nSEGPTR      WINAPI AnsiUpper16(SEGPTR);\nUINT16      WINAPI AnsiUpperBuff16(LPSTR,UINT16);\nBOOL16      WINAPI AnyPopup16(void);\nBOOL16      WINAPI AppendMenu16(HMENU16,UINT16,UINT16,SEGPTR);\nUINT16      WINAPI ArrangeIconicWindows16(HWND16);\nHDWP16      WINAPI BeginDeferWindowPos16(INT16);\nHDC16       WINAPI BeginPaint16(HWND16,LPPAINTSTRUCT16);\nBOOL16      WINAPI BringWindowToTop16(HWND16);\nBOOL16      WINAPI CallMsgFilter16(MSG16*,INT16);\nBOOL16      WINAPI CallMsgFilter32_16(MSG32_16*,INT16,BOOL16);\nLRESULT     WINAPI CallNextHookEx16(HHOOK,INT16,WPARAM16,LPARAM);\nLRESULT     WINAPI CallWindowProc16(WNDPROC16,HWND16,UINT16,WPARAM16,LPARAM);\nBOOL16      WINAPI ChangeClipboardChain16(HWND16,HWND16);\nBOOL16      WINAPI ChangeMenu16(HMENU16,UINT16,SEGPTR,UINT16,UINT16);\nBOOL16      WINAPI CheckDlgButton16(HWND16,INT16,UINT16);\nBOOL16      WINAPI CheckMenuItem16(HMENU16,UINT16,UINT16);\nBOOL16      WINAPI CheckRadioButton16(HWND16,UINT16,UINT16,UINT16);\nHWND16      WINAPI ChildWindowFromPoint16(HWND16,POINT16);\nHWND16      WINAPI ChildWindowFromPointEx16(HWND16,POINT16,UINT16);\nINT16       WINAPI ClearCommBreak16(INT16);\nVOID        WINAPI ClientToScreen16(HWND16,LPPOINT16);\nBOOL16      WINAPI ClipCursor16(const RECT16*);\nBOOL16      WINAPI CloseClipboard16(void);\nBOOL16      WINAPI CloseWindow16(HWND16);\nvoid        WINAPI ControlPanelInfo16(INT16, WORD, LPSTR);\nHCURSOR16   WINAPI CopyCursor16(HINSTANCE16,HCURSOR16);\nHICON16     WINAPI CopyIcon16(HINSTANCE16,HICON16);\nBOOL16      WINAPI CopyRect16(RECT16*,const RECT16*);\nINT16       WINAPI CountClipboardFormats16(void);\nVOID        WINAPI CreateCaret16(HWND16,HBITMAP16,INT16,INT16);\nHCURSOR16   WINAPI CreateCursor16(HINSTANCE16,INT16,INT16,INT16,INT16,LPCVOID,LPCVOID);\nHWND16      WINAPI CreateDialog16(HINSTANCE16,LPCSTR,HWND16,DLGPROC16);\nHWND16      WINAPI CreateDialogIndirect16(HINSTANCE16,SEGPTR,HWND16,DLGPROC16);\nHWND16      WINAPI CreateDialogIndirectParam16(HINSTANCE16,SEGPTR,HWND16,\n                                               DLGPROC16,LPARAM);\nHWND16      WINAPI CreateDialogParam16(HINSTANCE16,LPCSTR,HWND16,DLGPROC16,LPARAM);\nHICON16     WINAPI CreateIcon16(HINSTANCE16,INT16,INT16,BYTE,BYTE,LPCVOID,LPCVOID);\nHICON16     WINAPI CreateIconFromResourceEx16(LPBYTE,UINT16,BOOL16,DWORD,INT16,INT16,UINT16);\nHMENU16     WINAPI CreateMenu16(void);\nHMENU16     WINAPI CreatePopupMenu16(void);\nHWND16      WINAPI CreateWindow16(LPCSTR,LPCSTR,DWORD,INT16,INT16,INT16,INT16,\n                                  HWND16,HMENU16,HINSTANCE16,LPVOID);\nHWND16      WINAPI CreateWindowEx16(DWORD,LPCSTR,LPCSTR,DWORD,INT16,INT16,\n                                INT16,INT16,HWND16,HMENU16,HINSTANCE16,LPVOID);\nLRESULT     WINAPI DefDlgProc16(HWND16,UINT16,WPARAM16,LPARAM);\nHDWP16      WINAPI DeferWindowPos16(HDWP16,HWND16,HWND16,INT16,INT16,INT16,INT16,UINT16);\nLRESULT     WINAPI DefFrameProc16(HWND16,HWND16,UINT16,WPARAM16,LPARAM);\nLRESULT     WINAPI DefHookProc16(INT16,WPARAM16,LPARAM,HHOOK*);\nLRESULT     WINAPI DefMDIChildProc16(HWND16,UINT16,WPARAM16,LPARAM);\nLRESULT     WINAPI DefWindowProc16(HWND16,UINT16,WPARAM16,LPARAM);\nBOOL16      WINAPI DeleteMenu16(HMENU16,UINT16,UINT16);\nVOID        WINAPI DestroyCaret16(void);\nBOOL16      WINAPI DestroyCursor16(HCURSOR16);\nBOOL16      WINAPI DestroyIcon16(HICON16);\nBOOL16      WINAPI DestroyMenu16(HMENU16);\nBOOL16      WINAPI DestroyWindow16(HWND16);\nINT16       WINAPI DialogBox16(HINSTANCE16,LPCSTR,HWND16,DLGPROC16);\nINT16       WINAPI DialogBoxIndirect16(HINSTANCE16,HANDLE16,HWND16,DLGPROC16);\nINT16       WINAPI DialogBoxIndirectParam16(HINSTANCE16,HANDLE16,HWND16,DLGPROC16,LPARAM);\nINT16       WINAPI DialogBoxParam16(HINSTANCE16,LPCSTR,HWND16,DLGPROC16,LPARAM);\nLONG        WINAPI DispatchMessage16(const MSG16*);\nLONG        WINAPI DispatchMessage32_16(const MSG32_16*,BOOL16);\nINT16       WINAPI DlgDirList16(HWND16,LPSTR,INT16,INT16,UINT16);\nINT16       WINAPI DlgDirListComboBox16(HWND16,LPSTR,INT16,INT16,UINT16);\nBOOL16      WINAPI DlgDirSelectComboBoxEx16(HWND16,LPSTR,INT16,INT16);\nBOOL16      WINAPI DlgDirSelectEx16(HWND16,LPSTR,INT16,INT16);\nBOOL16      WINAPI DragDetect16(HWND16,POINT16);\nDWORD       WINAPI DragObject16(HWND16,HWND16,UINT16,HANDLE16,WORD,HCURSOR16);\nBOOL16      WINAPI DrawAnimatedRects16(HWND16,INT16,const RECT16*,const RECT16*);\nBOOL16      WINAPI DrawCaption16(HWND16,HDC16,const RECT16*,UINT16);\nBOOL16      WINAPI DrawCaptionTemp16(HWND16,HDC16, const RECT16*,HFONT16,HICON16,LPCSTR,UINT16);\nBOOL16      WINAPI DrawEdge16(HDC16,LPRECT16,UINT16,UINT16);\nvoid        WINAPI DrawFocusRect16(HDC16,const RECT16*);\nBOOL16      WINAPI DrawFrameControl16(HDC16,LPRECT16,UINT16,UINT16);\nBOOL16      WINAPI DrawIcon16(HDC16,INT16,INT16,HICON16);\nBOOL16      WINAPI DrawIconEx16(HDC16,INT16,INT16,HICON16,INT16,INT16,\n\t\t\t\tUINT16,HBRUSH16,UINT16);\nVOID        WINAPI DrawMenuBar16(HWND16);\nINT16       WINAPI DrawText16(HDC16,LPCSTR,INT16,LPRECT16,UINT16);\nBOOL16      WINAPI EmptyClipboard16(void);\nBOOL16      WINAPI EnableMenuItem16(HMENU16,UINT16,UINT16);\nBOOL16      WINAPI EnableScrollBar16(HWND16,INT16,UINT16);\nBOOL16      WINAPI EnableWindow16(HWND16,BOOL16);\nBOOL16      WINAPI EndDeferWindowPos16(HDWP16);\nBOOL16      WINAPI EndDialog16(HWND16,INT16);\nBOOL16      WINAPI EndPaint16(HWND16,const PAINTSTRUCT16*);\nUINT16      WINAPI EnumClipboardFormats16(UINT16);\nBOOL16      WINAPI EqualRect16(const RECT16*,const RECT16*);\nLONG        WINAPI EscapeCommFunction16(UINT16,UINT16);\nINT16       WINAPI ExcludeUpdateRgn16(HDC16,HWND16);\nBOOL16      WINAPI ExitWindows16(DWORD,UINT16);\nINT16       WINAPI FillRect16(HDC16,const RECT16*,HBRUSH16);\nHWND16      WINAPI FindWindow16(LPCSTR,LPCSTR);\nHWND16      WINAPI FindWindowEx16(HWND16,HWND16,LPCSTR,LPCSTR);\nBOOL16      WINAPI FlashWindow16(HWND16,BOOL16);\nDWORD       WINAPI FormatMessage16(DWORD,SEGPTR,WORD,WORD,LPSTR,WORD,LPDWORD);\nINT16       WINAPI FrameRect16(HDC16,const RECT16*,HBRUSH16);\nHWND16      WINAPI GetActiveWindow16(void);\nINT16       WINAPI GetAsyncKeyState16(INT16);\nHWND16      WINAPI GetCapture16(void);\nUINT16      WINAPI GetCaretBlinkTime16(void);\nVOID        WINAPI GetCaretPos16(LPPOINT16);\nBOOL16      WINAPI GetClassInfo16(HINSTANCE16,SEGPTR,WNDCLASS16 *);\nBOOL16      WINAPI GetClassInfoEx16(HINSTANCE16,SEGPTR,WNDCLASSEX16 *);\nLONG        WINAPI GetClassLong16(HWND16,INT16);\nINT16       WINAPI GetClassName16(HWND16,LPSTR,INT16);\nWORD        WINAPI GetClassWord16(HWND16,INT16);\nvoid        WINAPI GetClientRect16(HWND16,LPRECT16);\nHANDLE16    WINAPI GetClipboardData16(UINT16);\nINT16       WINAPI GetClipboardFormatName16(UINT16,LPSTR,INT16);\nHWND16      WINAPI GetClipboardOwner16(void);\nHWND16      WINAPI GetClipboardViewer16(void);\nvoid        WINAPI GetClipCursor16(LPRECT16);\nDWORD       WINAPI GetCurrentTime16(void);\nHCURSOR16   WINAPI GetCursor16(void);\nBOOL16      WINAPI GetCursorPos16(LPPOINT16);\nHDC16       WINAPI GetDC16(HWND16);\nHDC16       WINAPI GetDCEx16(HWND16,HRGN16,DWORD);\nHWND16      WINAPI GetDesktopWindow16(void);\nINT16       WINAPI GetDlgCtrlID16(HWND16);\nHWND16      WINAPI GetDlgItem16(HWND16,INT16);\nUINT16      WINAPI GetDlgItemInt16(HWND16,INT16,BOOL16*,BOOL16);\nINT16       WINAPI GetDlgItemText16(HWND16,INT16,SEGPTR,UINT16);\nUINT16      WINAPI GetDoubleClickTime16(void);\nHWND16      WINAPI GetFocus16(void);\nHWND16      WINAPI GetForegroundWindow16(void);\nBOOL16      WINAPI GetIconInfo16(HICON16,LPICONINFO16);\nBOOL16      WINAPI GetInputState16(void);\nUINT16      WINAPI GetInternalWindowPos16(HWND16,LPRECT16,LPPOINT16);\nINT16       WINAPI GetKeyboardLayoutName16(LPSTR);\nINT16       WINAPI GetKeyState16(INT16);\nHWND16      WINAPI GetLastActivePopup16(HWND16);\nHMENU16     WINAPI GetMenu16(HWND16);\nDWORD       WINAPI GetMenuContextHelpId16(HMENU16);\nINT16       WINAPI GetMenuItemCount16(HMENU16);\nUINT16      WINAPI GetMenuItemID16(HMENU16,INT16);\nBOOL16      WINAPI GetMenuItemRect16(HWND16,HMENU16,UINT16,LPRECT16);\nUINT16      WINAPI GetMenuState16(HMENU16,UINT16,UINT16);\nINT16       WINAPI GetMenuString16(HMENU16,UINT16,LPSTR,INT16,UINT16);\nBOOL16      WINAPI GetMessage16(MSG16*,HWND16,UINT16,UINT16);\nBOOL16      WINAPI GetMessage32_16(MSG32_16*,HWND16,UINT16,UINT16,BOOL16);\nHWND16      WINAPI GetNextDlgGroupItem16(HWND16,HWND16,BOOL16);\nHWND16      WINAPI GetNextDlgTabItem16(HWND16,HWND16,BOOL16);\nHWND16      WINAPI GetNextWindow16(HWND16,WORD);\nHWND16      WINAPI GetOpenClipboardWindow16(void);\nHWND16      WINAPI GetParent16(HWND16);\nINT16       WINAPI GetPriorityClipboardFormat16(UINT16*,INT16);\nHANDLE16    WINAPI GetProp16(HWND16,LPCSTR);\nDWORD       WINAPI GetQueueStatus16(UINT16);\nBOOL16      WINAPI GetScrollInfo16(HWND16,INT16,LPSCROLLINFO);\nINT16       WINAPI GetScrollPos16(HWND16,INT16);\nBOOL16      WINAPI GetScrollRange16(HWND16,INT16,LPINT16,LPINT16);\nHWND16      WINAPI GetShellWindow16(void);\nHMENU16     WINAPI GetSubMenu16(HMENU16,INT16);\nCOLORREF    WINAPI GetSysColor16(INT16);\nHBRUSH16    WINAPI GetSysColorBrush16(INT16);\nHWND16      WINAPI GetSysModalWindow16(void);\nHMENU16     WINAPI GetSystemMenu16(HWND16,BOOL16);\nINT16       WINAPI GetSystemMetrics16(INT16);\nDWORD       WINAPI GetTabbedTextExtent16(HDC16,LPCSTR,INT16,INT16,const INT16*);\nHWND16      WINAPI GetTopWindow16(HWND16);\nBOOL16      WINAPI GetUpdateRect16(HWND16,LPRECT16,BOOL16);\nINT16       WINAPI GetUpdateRgn16(HWND16,HRGN16,BOOL16);\nHWND16      WINAPI GetWindow16(HWND16,WORD);\nHDC16       WINAPI GetWindowDC16(HWND16);\nLONG        WINAPI GetWindowLong16(HWND16,INT16);\nBOOL16      WINAPI GetWindowPlacement16(HWND16,LPWINDOWPLACEMENT16);\nvoid        WINAPI GetWindowRect16(HWND16,LPRECT16);\nHTASK16     WINAPI GetWindowTask16(HWND16);\nINT16       WINAPI GetWindowText16(HWND16,SEGPTR,INT16);\nINT16       WINAPI GetWindowTextLength16(HWND16);\nWORD        WINAPI GetWindowWord16(HWND16,INT16);\nATOM        WINAPI GlobalAddAtom16(LPCSTR);\nATOM        WINAPI GlobalDeleteAtom16(ATOM);\nATOM        WINAPI GlobalFindAtom16(LPCSTR);\nUINT16      WINAPI GlobalGetAtomName16(ATOM,LPSTR,INT16);\nVOID        WINAPI HideCaret16(HWND16);\nBOOL16      WINAPI HiliteMenuItem16(HWND16,HMENU16,UINT16,UINT16);\nDWORD       WINAPI IconSize16(void);\nvoid        WINAPI InflateRect16(LPRECT16,INT16,INT16);\nHQUEUE16    WINAPI InitThreadInput16(WORD,WORD);\nBOOL16      WINAPI InSendMessage16(void);\nBOOL16      WINAPI InsertMenu16(HMENU16,UINT16,UINT16,UINT16,SEGPTR);\nBOOL16      WINAPI InsertMenuItem16(HMENU16,UINT16,BOOL16,const MENUITEMINFO16*);\nBOOL16      WINAPI IntersectRect16(LPRECT16,const RECT16*,const RECT16*);\nvoid        WINAPI InvalidateRect16(HWND16,const RECT16*,BOOL16);\nvoid        WINAPI InvalidateRgn16(HWND16,HRGN16,BOOL16);\nvoid        WINAPI InvertRect16(HDC16,const RECT16*);\nBOOL16      WINAPI IsCharAlpha16(CHAR);\nBOOL16      WINAPI IsCharAlphaNumeric16(CHAR);\nBOOL16      WINAPI IsCharLower16(CHAR);\nBOOL16      WINAPI IsCharUpper16(CHAR);\nBOOL16      WINAPI IsChild16(HWND16,HWND16);\nBOOL16      WINAPI IsClipboardFormatAvailable16(UINT16);\nUINT16      WINAPI IsDlgButtonChecked16(HWND16,UINT16);\nBOOL16      WINAPI IsIconic16(HWND16);\nBOOL16      WINAPI IsMenu16(HMENU16);\nBOOL16      WINAPI IsRectEmpty16(const RECT16*);\nBOOL16      WINAPI IsWindowEnabled16(HWND16);\nBOOL16      WINAPI IsWindowVisible16(HWND16);\nBOOL16      WINAPI IsZoomed16(HWND16);\nBOOL16      WINAPI KillSystemTimer16(HWND16,UINT16);\nBOOL16      WINAPI KillTimer16(HWND16,UINT16);\nHBITMAP16   WINAPI LoadBitmap16(HANDLE16,LPCSTR);\nHCURSOR16   WINAPI LoadCursor16(HINSTANCE16,LPCSTR);\nHICON16     WINAPI LoadIcon16(HINSTANCE16,LPCSTR);\nHANDLE16    WINAPI LoadImage16(HINSTANCE16,LPCSTR,UINT16,INT16,INT16,UINT16);\nHMENU16     WINAPI LoadMenu16(HINSTANCE16,LPCSTR);\nHMENU16     WINAPI LoadMenuIndirect16(SEGPTR);\nINT16       WINAPI LoadString16(HINSTANCE16,UINT16,LPSTR,INT16);\nBOOL16      WINAPI LockWindowUpdate16(HWND16);\nINT16       WINAPI LookupIconIdFromDirectoryEx16(LPBYTE,BOOL16,INT16,INT16,UINT16);\nvoid        WINAPI MapDialogRect16(HWND16,LPRECT16);\nvoid        WINAPI MapWindowPoints16(HWND16,HWND16,LPPOINT16,UINT16);\nVOID        WINAPI MessageBeep16(UINT16);\nINT16       WINAPI MessageBox16(HWND16,LPCSTR,LPCSTR,UINT16);\nINT16       WINAPI MessageBoxIndirect16(LPMSGBOXPARAMS16);\nBOOL16      WINAPI ModifyMenu16(HMENU16,UINT16,UINT16,UINT16,SEGPTR);\nBOOL16      WINAPI MoveWindow16(HWND16,INT16,INT16,INT16,INT16,BOOL16);\nvoid        WINAPI OffsetRect16(LPRECT16,INT16,INT16);\nBOOL16      WINAPI OpenClipboard16(HWND16);\nBOOL16      WINAPI OpenIcon16(HWND16);\nBOOL16      WINAPI PeekMessage16(MSG16*,HWND16,UINT16,UINT16,UINT16);\nBOOL16      WINAPI PeekMessage32_16(MSG32_16*,HWND16,UINT16,UINT16,UINT16,BOOL16);\nBOOL16      WINAPI PostAppMessage16(HTASK16,UINT16,WPARAM16,LPARAM);\nBOOL16      WINAPI PostMessage16(HWND16,UINT16,WPARAM16,LPARAM);\nvoid        WINAPI PostQuitMessage16(INT16);\nBOOL16      WINAPI PtInRect16(const RECT16*,POINT16);\nUINT16      WINAPI RealizePalette16(HDC16);\nBOOL16      WINAPI RedrawWindow16(HWND16,const RECT16*,HRGN16,UINT16);\nBOOL16      WINAPI RegisterClass16(const WNDCLASS16*);\nATOM        WINAPI RegisterClassEx16(const WNDCLASSEX16*);\nUINT16      WINAPI RegisterClipboardFormat16(LPCSTR);\nBOOL        WINAPI RegisterShellHook16(HWND16,UINT16);\nINT16       WINAPI ReleaseDC16(HWND16,HDC16);\nBOOL16      WINAPI RemoveMenu16(HMENU16,UINT16,UINT16);\nHANDLE16    WINAPI RemoveProp16(HWND16,LPCSTR);\nVOID        WINAPI ReplyMessage16(LRESULT);\nvoid        WINAPI ScreenToClient16(HWND16,LPPOINT16);\nVOID        WINAPI ScrollChildren16(HWND16,UINT16,WPARAM16,LPARAM);\nBOOL16      WINAPI ScrollDC16(HDC16,INT16,INT16,const RECT16*,const RECT16*,\n                      HRGN16,LPRECT16);\nvoid        WINAPI ScrollWindow16(HWND16,INT16,INT16,const RECT16*,const RECT16*);\nINT16       WINAPI ScrollWindowEx16(HWND16,INT16,INT16,const RECT16*,\n                                    const RECT16*,HRGN16,LPRECT16,UINT16);\nHPALETTE16  WINAPI SelectPalette16(HDC16,HPALETTE16,BOOL16);\nLRESULT     WINAPI SendDlgItemMessage16(HWND16,INT16,UINT16,WPARAM16,LPARAM);\nLRESULT     WINAPI SendMessage16(HWND16,UINT16,WPARAM16,LPARAM);\nHWND16      WINAPI SetActiveWindow16(HWND16);\nHWND16      WINAPI SetCapture16(HWND16);\nVOID        WINAPI SetCaretBlinkTime16(UINT16);\nVOID        WINAPI SetCaretPos16(INT16,INT16);\nLONG        WINAPI SetClassLong16(HWND16,INT16,LONG);\nWORD        WINAPI SetClassWord16(HWND16,INT16,WORD);\nHANDLE16    WINAPI SetClipboardData16(UINT16,HANDLE16);\nHWND16      WINAPI SetClipboardViewer16(HWND16);\nINT16       WINAPI SetCommBreak16(INT16);\nHCURSOR16   WINAPI SetCursor16(HCURSOR16);\nvoid        WINAPI SetCursorPos16(INT16,INT16);\nBOOL16      WINAPI SetDeskWallPaper16(LPCSTR);\nvoid        WINAPI SetDlgItemInt16(HWND16,INT16,UINT16,BOOL16);\nvoid        WINAPI SetDlgItemText16(HWND16,INT16,SEGPTR);\nVOID        WINAPI SetDoubleClickTime16(UINT16);\nHWND16      WINAPI SetFocus16(HWND16);\nBOOL16      WINAPI SetForegroundWindow16(HWND16);\nvoid        WINAPI SetInternalWindowPos16(HWND16,UINT16,LPRECT16,LPPOINT16);\nBOOL16      WINAPI SetMenu16(HWND16,HMENU16);\nBOOL16      WINAPI SetMenuContextHelpId16(HMENU16,DWORD);\nBOOL16      WINAPI SetMenuItemBitmaps16(HMENU16,UINT16,UINT16,HBITMAP16,HBITMAP16);\nBOOL16      WINAPI SetMessageQueue16(INT16);\nHWND16      WINAPI SetParent16(HWND16,HWND16);\nBOOL16      WINAPI SetProp16(HWND16,LPCSTR,HANDLE16);\nvoid        WINAPI SetRect16(LPRECT16,INT16,INT16,INT16,INT16);\nvoid        WINAPI SetRectEmpty16(LPRECT16);\nINT16       WINAPI SetScrollInfo16(HWND16,INT16,const SCROLLINFO*,BOOL16);\nINT16       WINAPI SetScrollPos16(HWND16,INT16,INT16,BOOL16);\nvoid        WINAPI SetScrollRange16(HWND16,INT16,INT16,INT16,BOOL16);\nVOID        WINAPI SetSysColors16(INT16,const INT16*,const COLORREF*);\nHWND16      WINAPI SetSysModalWindow16(HWND16);\nBOOL16      WINAPI SetSystemMenu16(HWND16,HMENU16);\nUINT16      WINAPI SetSystemTimer16(HWND16,UINT16,UINT16,TIMERPROC16);\nUINT16      WINAPI SetTimer16(HWND16,UINT16,UINT16,TIMERPROC16);\nLONG        WINAPI SetWindowLong16(HWND16,INT16,LONG);\nBOOL16      WINAPI SetWindowPlacement16(HWND16,const WINDOWPLACEMENT16*);\nBOOL16      WINAPI SetWindowPos16(HWND16,HWND16,INT16,INT16,INT16,INT16,WORD);\nINT16       WINAPI SetWindowRgn16(HWND16,HRGN16,BOOL16);\nBOOL16      WINAPI SetWindowText16(HWND16,SEGPTR);\nWORD        WINAPI SetWindowWord16(HWND16,INT16,WORD);\nVOID        WINAPI ShowCaret16(HWND16);\nINT16       WINAPI ShowCursor16(BOOL16);\nvoid        WINAPI ShowScrollBar16(HWND16,INT16,BOOL16);\nVOID        WINAPI ShowOwnedPopups16(HWND16,BOOL16);\nBOOL16      WINAPI ShowWindow16(HWND16,INT16);\nBOOL16      WINAPI SubtractRect16(LPRECT16,const RECT16*,const RECT16*);\nBOOL16      WINAPI SwapMouseButton16(BOOL16);\nVOID        WINAPI SwitchToThisWindow16(HWND16,BOOL16);\nBOOL16      WINAPI SystemParametersInfo16(UINT16,UINT16,LPVOID,UINT16);\nLONG        WINAPI TabbedTextOut16(HDC16,INT16,INT16,LPCSTR,INT16,INT16,const INT16*,INT16);\nBOOL16      WINAPI TrackPopupMenu16(HMENU16,UINT16,INT16,INT16,INT16,HWND16,const RECT16*);\nINT16       WINAPI TranslateAccelerator16(HWND16,HACCEL16,LPMSG16);\nBOOL16      WINAPI TranslateMDISysAccel16(HWND16,LPMSG16);\nBOOL16      WINAPI TranslateMessage16(const MSG16*);\nBOOL16      WINAPI TranslateMessage32_16(const MSG32_16*,BOOL16);\nINT16       WINAPI TransmitCommChar16(INT16,CHAR);\nBOOL16      WINAPI UnionRect16(LPRECT16,const RECT16*,const RECT16*);\nBOOL16      WINAPI UnregisterClass16(LPCSTR,HINSTANCE16);\nVOID        WINAPI UpdateWindow16(HWND16);\nVOID        WINAPI ValidateRect16(HWND16,const RECT16*);\nVOID        WINAPI ValidateRgn16(HWND16,HRGN16);\nHWND16      WINAPI WindowFromDC16(HDC16);\nHWND16      WINAPI WindowFromPoint16(POINT16);\nBOOL16      WINAPI WinHelp16(HWND16,LPCSTR,UINT16,DWORD);\nWORD        WINAPI WNetAddConnection16(LPCSTR,LPCSTR,LPCSTR);\nINT16       WINAPI wvsprintf16(LPSTR,LPCSTR,VA_LIST16);\nBOOL16      WINAPI DrawState16A(HDC16,HBRUSH16,DRAWSTATEPROC16,LPARAM,WPARAM16,INT16,INT16,INT16,INT16,UINT16);\nBOOL16      WINAPI IsDialogMessage16(HWND16,SEGPTR);\nINT16       WINAPI GetCommError16(INT16,LPCOMSTAT16);\nINT16       WINAPI BuildCommDCB16(LPCSTR,LPDCB16);\nINT16       WINAPI GetCommState16(INT16,LPDCB16);\nINT16       WINAPI SetCommState16(LPDCB16);\nINT16       WINAPI lstrcmp16(LPCSTR,LPCSTR);\nINT16       WINAPI lstrcmpi16(LPCSTR,LPCSTR);\n\n/* undocumented functions */\n\nvoid        WINAPI ConvertDialog32To16(LPCVOID,DWORD,LPVOID);\nBOOL16      WINAPI EnumTaskWindows16(HTASK16,WNDENUMPROC16,LPARAM);\nBOOL16      WINAPI GrayString16(HDC16,HBRUSH16,GRAYSTRINGPROC16,LPARAM,\n                                INT16,INT16,INT16,INT16,INT16);\nDWORD       WINAPI GetFileResourceSize16(LPCSTR,LPCSTR,LPCSTR,LPDWORD);\nDWORD       WINAPI GetFileResource16(LPCSTR,LPCSTR,LPCSTR,DWORD,DWORD,LPVOID);\nFARPROC16   WINAPI SetTaskSignalProc(HTASK16,FARPROC16);\n\n#endif /* __WINE_WINE_WINUSER16_H */\n"
  },
  {
    "path": "wine/wine/wpp.h",
    "content": "/*\n * Exported functions of the Wine preprocessor\n *\n * Copyright 2002 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WPP_H\n#define __WINE_WPP_H\n\n#include <stdio.h>\n#include <stdarg.h>\n\nstruct wpp_callbacks\n{\n    /* I/O callbacks */\n\n    /* Looks for a file to include, returning the path where it is found */\n    /* The type param is true for local (#include \"filename.h\") includes */\n    /* parent_name is the directory of the parent source file, includepath\n     * is an array of additional include paths */\n    char *(*lookup)( const char *filename, int type, const char *parent_name,\n                     char **include_path, int include_path_count );\n    /* Opens an include file */\n    void *(*open)( const char *filename, int type );\n    /* Closes a previously opened file */\n    void (*close)( void *file );\n    /* Reads buffer from the input */\n    int (*read)( void *file, char *buffer, unsigned int len );\n    /* Writes buffer to the output */\n    void (*write)( const char *buffer, unsigned int len );\n\n    /* Error callbacks */\n    void (*error)( const char *file, int line, int col, const char *near, const char *msg, va_list ap );\n    void (*warning)( const char *file, int line, int col, const char *near, const char *msg, va_list ap );\n};\n\n/* Return value == 0 means successful execution */\nextern int wpp_add_define( const char *name, const char *value );\nextern void wpp_del_define( const char *name );\nextern int wpp_add_cmdline_define( const char *value );\nextern void wpp_set_debug( int lex_debug, int parser_debug, int msg_debug );\nextern void wpp_set_pedantic( int on );\nextern int wpp_add_include_path( const char *path );\nextern char *wpp_find_include( const char *name, const char *parent_name );\nextern int wpp_parse( const char *input, FILE *output );\nextern void wpp_set_callbacks( const struct wpp_callbacks *callbacks );\n\n#endif  /* __WINE_WPP_H */\n"
  },
  {
    "path": "wine/wine.def",
    "content": "LIBRARY libwine.dll\n\nEXPORTS\n    __wine_dbg_get_channel_flags\n    __wine_dbg_set_channel_flags\n    __wine_dbg_set_functions\n    ;__wine_dll_register\n    ;__wine_main_argc\n    ;__wine_main_argv\n    ;__wine_main_environ\n    ;__wine_main_wargv\n    atoiW\n    atolW\n    get_char_typeW\n    isalnumW\n    isalphaW\n    iscntrlW\n    isdigitW\n    isgraphW\n    islowerW\n    isprintW\n    ispunctW\n    isspaceW\n    isupperW\n    isxdigitW\n    memchrW\n    memicmpW\n    memrchrW\n    snprintfW\n    sprintfW\n    strcatW\n    strchrW\n    strcmpW\n    strcmpiW\n    strcpyW\n    strcspnW\n    strlenW\n    strlwrW\n    strncmpW\n    strncmpiW\n    strpbrkW\n    strrchrW\n    strspnW\n    strstrW\n    strtolW\n    strtoulW\n    struprW\n    tolowerW\n    toupperW\n    vsnprintfW\n    vsprintfW\n    ;wine_call_on_stack\n    wine_casemap_lower\n    wine_casemap_upper\n    ;wine_compare_string\n    ;wine_cp_enum_table\n    ;wine_cp_get_table\n    ;wine_cp_mbstowcs\n    ;wine_cp_wcstombs\n    ;wine_cpsymbol_mbstowcs\n    ;wine_cpsymbol_wcstombs\n    wine_dbg_log\n    wine_dbg_printf\n    wine_dbg_sprintf\n    wine_dbgstr_an\n    wine_dbgstr_wn\n    ;wine_dlclose\n    ;wine_dll_enum_load_path\n    ;wine_dll_get_owner\n    ;wine_dll_load\n    ;wine_dll_load_main_exe\n    ;wine_dll_set_callback\n    ;wine_dll_unload\n    ;wine_dlopen\n    ;wine_dlsym\n    ;wine_exec_wine_binary\n    ;wine_fold_string\n    ;wine_get_build_dir\n    ;wine_get_build_id\n    ;wine_get_config_dir\n    ;wine_get_data_dir\n    wine_get_server_dir\n    ;wine_get_sortkey\n    ;wine_get_user_name\n    ;wine_get_version\n    ;wine_init\n    ;wine_init_argv0_path\n    wine_is_dbcs_leadbyte\n    ;wine_pthread_get_functions\n    ;wine_pthread_set_functions\n    ;wine_switch_to_stack\n    ;wine_utf8_mbstowcs\n    ;wine_utf8_wcstombs\n    wine_wctype_table\n\n\t;add\n\twine_ldt_get_ptr\n\twine_ldt_set_entry\n\twine_ldt_get_entry\n\twine_ldt_alloc_entries\n\twine_ldt_is_system\n\twine_ldt_copy\tDATA\n\twine_ldt_realloc_entries\n\twine_ldt_free_entries\n\twine_ldt DATA\n\n\tset_intel_vt_x_workaround\n\n    wine_get_cs\n    wine_get_ds\n    wine_get_es\n    wine_get_fs\n    wine_get_gs\n    wine_get_ss\n"
  },
  {
    "path": "wine/wine.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"casemap.c\" />\n    <ClCompile Include=\"config.c\" />\n    <ClCompile Include=\"debug.c\" />\n    <ClCompile Include=\"ldt.c\" />\n    <ClCompile Include=\"ldt2.c\" />\n    <ClCompile Include=\"string.c\" />\n    <ClCompile Include=\"wctype.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"wine.def\" />\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{C978A6C2-F788-4F5E-8E14-73C1B6B521CE}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>wine</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetName>libwine</TargetName>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <TargetName>libwine</TargetName>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;_X86_;__i386__;__WINESRC__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>wine.def</ModuleDefinitionFile>\n      <GenerateMapFile>true</GenerateMapFile>\n      <AdditionalDependencies>shlwapi.lib</AdditionalDependencies>\n      <DelayLoadDLLs>shlwapi.dll;user32.lib;</DelayLoadDLLs>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;_X86_;__i386__;__WINESRC__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ModuleDefinitionFile>wine.def</ModuleDefinitionFile>\n      <AdditionalDependencies>shlwapi.lib</AdditionalDependencies>\n      <DelayLoadDLLs>shlwapi.dll;user32.lib;</DelayLoadDLLs>\n    </Link>\n  </ItemDefinitionGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "wine/wine.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"ソース ファイル\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"ヘッダー ファイル\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"リソース ファイル\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"debug.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"ldt.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"string.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"casemap.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"wctype.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"ldt2.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"config.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"wine.def\">\n      <Filter>ソース ファイル</Filter>\n    </None>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "wine/winuser.rh",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n/* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */\n#ifndef __MSABI_LONG\n# if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)\n#  define __MSABI_LONG(x)         x ## l\n# else\n#  define __MSABI_LONG(x)         x\n# endif\n#endif\n\n#ifdef RC_INVOKED\n# define MAKEINTRESOURCE(i)       i\n#endif\n\n\n#define RT_MANIFEST                                        MAKEINTRESOURCE(24)\n#define CREATEPROCESS_MANIFEST_RESOURCE_ID                 MAKEINTRESOURCE(1)\n#define ISOLATIONAWARE_MANIFEST_RESOURCE_ID                MAKEINTRESOURCE(2)\n#define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(3)\n#define MINIMUM_RESERVED_MANIFEST_RESOURCE_ID              MAKEINTRESOURCE(1)\n#define MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID              MAKEINTRESOURCE(16)\n\n\n/*** ShowWindow() codes ***/\n#define SW_HIDE                0\n#define SW_SHOWNORMAL          1\n#define SW_NORMAL              SW_SHOWNORMAL\n#define SW_SHOWMINIMIZED       2\n#define SW_SHOWMAXIMIZED       3\n#define SW_MAXIMIZE            SW_SHOWMAXIMIZED\n#define SW_SHOWNOACTIVATE      4\n#define SW_SHOW                5\n#define SW_MINIMIZE            6\n#define SW_SHOWMINNOACTIVE     7\n#define SW_SHOWNA              8\n#define SW_RESTORE             9\n#define SW_SHOWDEFAULT         10\n#define SW_FORCEMINIMIZE       11\n#define SW_MAX                 11\n#define SW_NORMALNA            0xCC /* Undocumented. Flag in MinMaximize */\n\n/* Obsolete ShowWindow() codes for compatibility */\n#define HIDE_WINDOW            SW_HIDE\n#define SHOW_OPENWINDOW        SW_SHOWNORMAL\n#define SHOW_ICONWINDOW        SW_SHOWMINIMIZED\n#define SHOW_FULLSCREEN        SW_SHOWMAXIMIZED\n#define SHOW_OPENNOACTIVATE    SW_SHOWNOACTIVATE\n\n/* WM_SHOWWINDOW lParam codes */\n#define SW_PARENTCLOSING       1\n#define SW_OTHERZOOM           2\n#define SW_PARENTOPENING       3\n#define SW_OTHERUNZOOM         4\n\n\n/*** Virtual key codes ***/\n#define VK_LBUTTON             0x01\n#define VK_RBUTTON             0x02\n#define VK_CANCEL              0x03\n#define VK_MBUTTON             0x04\n#define VK_XBUTTON1            0x05\n#define VK_XBUTTON2            0x06\n/*                             0x07  Undefined */\n#define VK_BACK                0x08\n#define VK_TAB                 0x09\n/*                             0x0A-0x0B  Undefined */\n#define VK_CLEAR               0x0C\n#define VK_RETURN              0x0D\n/*                             0x0E-0x0F  Undefined */\n#define VK_SHIFT               0x10\n#define VK_CONTROL             0x11\n#define VK_MENU                0x12\n#define VK_PAUSE               0x13\n#define VK_CAPITAL             0x14\n\n#define VK_KANA                0x15\n#define VK_HANGEUL             VK_KANA\n#define VK_HANGUL              VK_KANA\n#define VK_JUNJA               0x17\n#define VK_FINAL               0x18\n#define VK_HANJA               0x19\n#define VK_KANJI               VK_HANJA\n\n/*                             0x1A       Undefined */\n#define VK_ESCAPE              0x1B\n\n#define VK_CONVERT             0x1C\n#define VK_NONCONVERT          0x1D\n#define VK_ACCEPT              0x1E\n#define VK_MODECHANGE          0x1F\n\n#define VK_SPACE               0x20\n#define VK_PRIOR               0x21\n#define VK_NEXT                0x22\n#define VK_END                 0x23\n#define VK_HOME                0x24\n#define VK_LEFT                0x25\n#define VK_UP                  0x26\n#define VK_RIGHT               0x27\n#define VK_DOWN                0x28\n#define VK_SELECT              0x29\n#define VK_PRINT               0x2A /* OEM specific in Windows 3.1 SDK */\n#define VK_EXECUTE             0x2B\n#define VK_SNAPSHOT            0x2C\n#define VK_INSERT              0x2D\n#define VK_DELETE              0x2E\n#define VK_HELP                0x2F\n/* VK_0 - VK-9                 0x30-0x39  Use ASCII instead */\n/*                             0x3A-0x40  Undefined */\n/* VK_A - VK_Z                 0x41-0x5A  Use ASCII instead */\n#define VK_LWIN                0x5B\n#define VK_RWIN                0x5C\n#define VK_APPS                0x5D\n/*                             0x5E Unassigned */\n#define VK_SLEEP               0x5F\n#define VK_NUMPAD0             0x60\n#define VK_NUMPAD1             0x61\n#define VK_NUMPAD2             0x62\n#define VK_NUMPAD3             0x63\n#define VK_NUMPAD4             0x64\n#define VK_NUMPAD5             0x65\n#define VK_NUMPAD6             0x66\n#define VK_NUMPAD7             0x67\n#define VK_NUMPAD8             0x68\n#define VK_NUMPAD9             0x69\n#define VK_MULTIPLY            0x6A\n#define VK_ADD                 0x6B\n#define VK_SEPARATOR           0x6C\n#define VK_SUBTRACT            0x6D\n#define VK_DECIMAL             0x6E\n#define VK_DIVIDE              0x6F\n#define VK_F1                  0x70\n#define VK_F2                  0x71\n#define VK_F3                  0x72\n#define VK_F4                  0x73\n#define VK_F5                  0x74\n#define VK_F6                  0x75\n#define VK_F7                  0x76\n#define VK_F8                  0x77\n#define VK_F9                  0x78\n#define VK_F10                 0x79\n#define VK_F11                 0x7A\n#define VK_F12                 0x7B\n#define VK_F13                 0x7C\n#define VK_F14                 0x7D\n#define VK_F15                 0x7E\n#define VK_F16                 0x7F\n#define VK_F17                 0x80\n#define VK_F18                 0x81\n#define VK_F19                 0x82\n#define VK_F20                 0x83\n#define VK_F21                 0x84\n#define VK_F22                 0x85\n#define VK_F23                 0x86\n#define VK_F24                 0x87\n/*                             0x88-0x8F  Unassigned */\n#define VK_NUMLOCK             0x90\n#define VK_SCROLL              0x91\n#define VK_OEM_NEC_EQUAL       0x92\n#define VK_OEM_FJ_JISHO        0x92\n#define VK_OEM_FJ_MASSHOU      0x93\n#define VK_OEM_FJ_TOUROKU      0x94\n#define VK_OEM_FJ_LOYA         0x95\n#define VK_OEM_FJ_ROYA         0x96\n/*                             0x97-0x9F  Unassigned */\n/*\n * differencing between right and left shift/control/alt key.\n * Used only by GetAsyncKeyState() and GetKeyState().\n */\n#define VK_LSHIFT              0xA0\n#define VK_RSHIFT              0xA1\n#define VK_LCONTROL            0xA2\n#define VK_RCONTROL            0xA3\n#define VK_LMENU               0xA4\n#define VK_RMENU               0xA5\n\n#define VK_BROWSER_BACK        0xA6\n#define VK_BROWSER_FORWARD     0xA7\n#define VK_BROWSER_REFRESH     0xA8\n#define VK_BROWSER_STOP        0xA9\n#define VK_BROWSER_SEARCH      0xAA\n#define VK_BROWSER_FAVORITES   0xAB\n#define VK_BROWSER_HOME        0xAC\n#define VK_VOLUME_MUTE         0xAD\n#define VK_VOLUME_DOWN         0xAE\n#define VK_VOLUME_UP           0xAF\n#define VK_MEDIA_NEXT_TRACK    0xB0\n#define VK_MEDIA_PREV_TRACK    0xB1\n#define VK_MEDIA_STOP          0xB2\n#define VK_MEDIA_PLAY_PAUSE    0xB3\n#define VK_LAUNCH_MAIL         0xB4\n#define VK_LAUNCH_MEDIA_SELECT 0xB5\n#define VK_LAUNCH_APP1         0xB6\n#define VK_LAUNCH_APP2         0xB7\n\n/*                             0xB8-0xB9  Unassigned */\n#define VK_OEM_1               0xBA\n#define VK_OEM_PLUS            0xBB\n#define VK_OEM_COMMA           0xBC\n#define VK_OEM_MINUS           0xBD\n#define VK_OEM_PERIOD          0xBE\n#define VK_OEM_2               0xBF\n#define VK_OEM_3               0xC0\n/*                             0xC1-0xDA  Unassigned */\n#define VK_OEM_4               0xDB\n#define VK_OEM_5               0xDC\n#define VK_OEM_6               0xDD\n#define VK_OEM_7               0xDE\n#define VK_OEM_8               0xDF\n/*                             0xE0       OEM specific */\n#define VK_OEM_AX              0xE1  /* \"AX\" key on Japanese AX keyboard */\n#define VK_OEM_102             0xE2  /* \"<>\" or \"\\|\" on RT 102-key keyboard */\n#define VK_ICO_HELP            0xE3  /* Help key on ICO */\n#define VK_ICO_00              0xE4  /* 00 key on ICO */\n#define VK_PROCESSKEY          0xE5\n#define VK_ICO_CLEAR           0xE6\n\n#define VK_PACKET              0xE7\n/*                             0xE8       Unassigned */\n\n#define VK_OEM_RESET           0xE9\n#define VK_OEM_JUMP            0xEA\n#define VK_OEM_PA1             0xEB\n#define VK_OEM_PA2             0xEC\n#define VK_OEM_PA3             0xED\n#define VK_OEM_WSCTRL          0xEE\n#define VK_OEM_CUSEL           0xEF\n#define VK_OEM_ATTN            0xF0\n#define VK_OEM_FINISH          0xF1\n#define VK_OEM_COPY            0xF2\n#define VK_OEM_AUTO            0xF3\n#define VK_OEM_ENLW            0xF4\n#define VK_OEM_BACKTAB         0xF5\n#define VK_ATTN                0xF6\n#define VK_CRSEL               0xF7\n#define VK_EXSEL               0xF8\n#define VK_EREOF               0xF9\n#define VK_PLAY                0xFA\n#define VK_ZOOM                0xFB\n#define VK_NONAME              0xFC\n#define VK_PA1                 0xFD\n#define VK_OEM_CLEAR           0xFE\n/*                             0xFF       Unassigned */\n\n\n/*** Messages ***/\n#ifndef NOWINMESSAGES\n#define WM_NULL                0x0000\n#define WM_CREATE              0x0001\n#define WM_DESTROY             0x0002\n#define WM_MOVE                0x0003\n#define WM_SIZEWAIT            0x0004 /* DDK / Win16 */\n#define WM_SIZE                0x0005\n#define WM_ACTIVATE            0x0006\n\n/* WM_ACTIVATE wParam values */\n#define WA_INACTIVE            0\n#define WA_ACTIVE              1\n#define WA_CLICKACTIVE         2\n\n#define WM_SETFOCUS            0x0007\n#define WM_KILLFOCUS           0x0008\n#define WM_SETVISIBLE          0x0009 /* DDK / Win16 */\n#define WM_ENABLE              0x000a\n#define WM_SETREDRAW           0x000b\n#define WM_SETTEXT             0x000c\n#define WM_GETTEXT             0x000d\n#define WM_GETTEXTLENGTH       0x000e\n#define WM_PAINT               0x000f\n#define WM_CLOSE               0x0010\n#define WM_QUERYENDSESSION     0x0011\n#define WM_QUIT                0x0012\n#define WM_QUERYOPEN           0x0013\n#define WM_ERASEBKGND          0x0014\n#define WM_SYSCOLORCHANGE      0x0015\n#define WM_ENDSESSION          0x0016\n#define WM_SYSTEMERROR         0x0017 /* DDK / Win16 */\n#define WM_SHOWWINDOW          0x0018\n#define WM_CTLCOLOR            0x0019 /* Added from windowsx.h */\n#define WM_WININICHANGE        0x001a\n#define WM_SETTINGCHANGE       WM_WININICHANGE\n#define WM_DEVMODECHANGE       0x001b\n#define WM_ACTIVATEAPP         0x001c\n#define WM_FONTCHANGE          0x001d\n#define WM_TIMECHANGE          0x001e\n#define WM_CANCELMODE          0x001f\n#define WM_SETCURSOR           0x0020\n#define WM_MOUSEACTIVATE       0x0021\n#define WM_CHILDACTIVATE       0x0022\n#define WM_QUEUESYNC           0x0023\n#define WM_GETMINMAXINFO       0x0024\n\n#define WM_PAINTICON           0x0026\n#define WM_ICONERASEBKGND      0x0027\n#define WM_NEXTDLGCTL          0x0028\n#define WM_ALTTABACTIVE        0x0029 /* DDK / Win16 */\n#define WM_SPOOLERSTATUS       0x002a\n#define WM_DRAWITEM            0x002b\n#define WM_MEASUREITEM         0x002c\n#define WM_DELETEITEM          0x002d\n#define WM_VKEYTOITEM          0x002e\n#define WM_CHARTOITEM          0x002f\n#define WM_SETFONT             0x0030\n#define WM_GETFONT             0x0031\n#define WM_SETHOTKEY           0x0032\n#define WM_GETHOTKEY           0x0033\n#define WM_FILESYSCHANGE       0x0034 /* DDK / Win16 */\n#define WM_ISACTIVEICON        0x0035 /* DDK / Win16 */\n#define WM_QUERYPARKICON       0x0036 /* Undocumented */\n#define WM_QUERYDRAGICON       0x0037\n#define WM_QUERYSAVESTATE      0x0038 /* Undocumented */\n#define WM_COMPAREITEM         0x0039\n#define WM_TESTING             0x003a /* DDK / Win16 */\n\n#define WM_GETOBJECT           0x003d\n\n#define WM_ACTIVATESHELLWINDOW 0x003e /* FIXME: Wine-only */\n\n#define WM_COMPACTING          0x0041\n\n#define WM_COMMNOTIFY          0x0044\n#define WM_WINDOWPOSCHANGING   0x0046\n#define WM_WINDOWPOSCHANGED    0x0047\n\n#define WM_POWER               0x0048\n\n/* For WM_POWER */\n#define PWR_OK                 1\n#define PWR_FAIL               (-1)\n#define PWR_SUSPENDREQUEST     1\n#define PWR_SUSPENDRESUME      2\n#define PWR_CRITICALRESUME     3\n\n/* Win32 4.0 messages */\n#define WM_COPYDATA            0x004a\n#define WM_CANCELJOURNAL       0x004b\n#define WM_KEYF1               0x004d /* DDK / Win16 */\n#define WM_NOTIFY              0x004e\n#define WM_INPUTLANGCHANGEREQUEST 0x0050\n#define WM_INPUTLANGCHANGE     0x0051\n#define WM_TCARD               0x0052\n#define WM_HELP                0x0053\n#define WM_USERCHANGED         0x0054\n#define WM_NOTIFYFORMAT        0x0055\n\n/* WM_NOTIFYFORMAT commands and return values */\n#define NFR_ANSI               1\n#define NFR_UNICODE            2\n#define NF_QUERY               3\n#define NF_REQUERY             4\n\n#define WM_CONTEXTMENU         0x007b\n#define WM_STYLECHANGING       0x007c\n#define WM_STYLECHANGED        0x007d\n#define WM_DISPLAYCHANGE       0x007e\n#define WM_GETICON             0x007f\n#define WM_SETICON             0x0080\n\n/* Non-client system messages */\n#define WM_NCCREATE            0x0081\n#define WM_NCDESTROY           0x0082\n#define WM_NCCALCSIZE          0x0083\n#define WM_NCHITTEST           0x0084\n#define WM_NCPAINT             0x0085\n#define WM_NCACTIVATE          0x0086\n\n#define WM_GETDLGCODE          0x0087\n#define WM_SYNCPAINT           0x0088\n#define WM_SYNCTASK            0x0089 /* DDK / Win16 */\n\n/* Non-client mouse messages */\n#define WM_NCMOUSEMOVE         0x00a0\n#define WM_NCLBUTTONDOWN       0x00a1\n#define WM_NCLBUTTONUP         0x00a2\n#define WM_NCLBUTTONDBLCLK     0x00a3\n#define WM_NCRBUTTONDOWN       0x00a4\n#define WM_NCRBUTTONUP         0x00a5\n#define WM_NCRBUTTONDBLCLK     0x00a6\n#define WM_NCMBUTTONDOWN       0x00a7\n#define WM_NCMBUTTONUP         0x00a8\n#define WM_NCMBUTTONDBLCLK     0x00a9\n\n#define WM_NCXBUTTONDOWN       0x00ab\n#define WM_NCXBUTTONUP         0x00ac\n#define WM_NCXBUTTONDBLCLK     0x00ad\n\n/* Raw input */\n#define WM_INPUT_DEVICE_CHANGE 0x00fe\n#define WM_INPUT               0x00ff\n\n/* Keyboard messages */\n#define WM_KEYFIRST            0x0100\n#define WM_KEYDOWN             WM_KEYFIRST\n#define WM_KEYUP               0x0101\n#define WM_CHAR                0x0102\n#define WM_DEADCHAR            0x0103\n#define WM_SYSKEYDOWN          0x0104\n#define WM_SYSKEYUP            0x0105\n#define WM_SYSCHAR             0x0106\n#define WM_SYSDEADCHAR         0x0107\n#define WM_UNICHAR             0x0109\n#define WM_KEYLAST             WM_UNICHAR\n\n#define UNICODE_NOCHAR         0xffff\n\n/* Win32 4.0 messages for IME */\n#define WM_IME_STARTCOMPOSITION 0x010d\n#define WM_IME_ENDCOMPOSITION  0x010e\n#define WM_IME_COMPOSITION     0x010f\n#define WM_IME_KEYLAST         0x010f\n\n#define WM_INITDIALOG          0x0110\n#define WM_COMMAND             0x0111\n#define WM_SYSCOMMAND          0x0112\n#define WM_TIMER               0x0113\n\n/* Scroll messages */\n#define WM_HSCROLL             0x0114\n#define WM_VSCROLL             0x0115\n\n/* Menu messages */\n#define WM_INITMENU            0x0116\n#define WM_INITMENUPOPUP       0x0117\n#define WM_GESTURE             0x0119\n#define WM_GESTURENOTIFY       0x011A\n\n#define WM_MENUSELECT          0x011F\n#define WM_MENUCHAR            0x0120\n#define WM_ENTERIDLE           0x0121\n\n#define WM_MENURBUTTONUP       0x0122\n#define WM_MENUDRAG            0x0123\n#define WM_MENUGETOBJECT       0x0124\n#define WM_UNINITMENUPOPUP     0x0125\n#define WM_MENUCOMMAND         0x0126\n\n#define WM_CHANGEUISTATE       0x0127\n#define WM_UPDATEUISTATE       0x0128\n#define WM_QUERYUISTATE        0x0129\n\n/* UI flags for WM_*UISTATE */\n/* for low-order word of wparam */\n#define UIS_SET                1\n#define UIS_CLEAR              2\n#define UIS_INITIALIZE         3\n/* for hi-order word of wparam */\n#define UISF_HIDEFOCUS         0x1\n#define UISF_HIDEACCEL         0x2\n#define UISF_ACTIVE            0x4\n\n#define WM_LBTRACKPOINT        0x0131 /* DDK / Win16 */\n\n/* Win32 CTLCOLOR messages */\n#define WM_CTLCOLORMSGBOX      0x0132\n#define WM_CTLCOLOREDIT        0x0133\n#define WM_CTLCOLORLISTBOX     0x0134\n#define WM_CTLCOLORBTN         0x0135\n#define WM_CTLCOLORDLG         0x0136\n#define WM_CTLCOLORSCROLLBAR   0x0137\n#define WM_CTLCOLORSTATIC      0x0138\n\n#define MN_GETHMENU            0x01E1\n\n/* Mouse messages */\n#define WM_MOUSEFIRST          0x0200\n#define WM_MOUSEMOVE           WM_MOUSEFIRST\n#define WM_LBUTTONDOWN         0x0201\n#define WM_LBUTTONUP           0x0202\n#define WM_LBUTTONDBLCLK       0x0203\n#define WM_RBUTTONDOWN         0x0204\n#define WM_RBUTTONUP           0x0205\n#define WM_RBUTTONDBLCLK       0x0206\n#define WM_MBUTTONDOWN         0x0207\n#define WM_MBUTTONUP           0x0208\n#define WM_MBUTTONDBLCLK       0x0209\n#define WM_MOUSEWHEEL          0x020A\n#define WM_XBUTTONDOWN         0x020B\n#define WM_XBUTTONUP           0x020C\n#define WM_XBUTTONDBLCLK       0x020D\n#define WM_MOUSEHWHEEL         0x020E\n#define WM_MOUSELAST           WM_MOUSEHWHEEL\n\n/* Macros for the mouse messages */\n#define WHEEL_DELTA            120\n#define GET_WHEEL_DELTA_WPARAM(wParam) ((short)HIWORD(wParam))\n#define WHEEL_PAGESCROLL       (UINT_MAX)\n\n#define GET_KEYSTATE_WPARAM(wParam)     (LOWORD(wParam))\n#define GET_NCHITTEST_WPARAM(wParam)    ((short)LOWORD(wParam))\n#define GET_XBUTTON_WPARAM(wParam)      (HIWORD(wParam))\n#define XBUTTON1               0x0001\n#define XBUTTON2               0x0002\n\n#define WM_PARENTNOTIFY        0x0210\n#define WM_ENTERMENULOOP       0x0211\n#define WM_EXITMENULOOP        0x0212\n#define WM_NEXTMENU            0x0213\n\n/* Win32 4.0 messages */\n#define WM_SIZING              0x0214\n#define WM_CAPTURECHANGED      0x0215\n#define WM_MOVING              0x0216\n#define WM_POWERBROADCAST      0x0218\n#define WM_DEVICECHANGE        0x0219\n/* MDI messages */\n#define WM_MDICREATE           0x0220\n#define WM_MDIDESTROY          0x0221\n#define WM_MDIACTIVATE         0x0222\n#define WM_MDIRESTORE          0x0223\n#define WM_MDINEXT             0x0224\n#define WM_MDIMAXIMIZE         0x0225\n#define WM_MDITILE             0x0226\n#define WM_MDICASCADE          0x0227\n#define WM_MDIICONARRANGE      0x0228\n#define WM_MDIGETACTIVE        0x0229\n\n/* D&D messages */\n#define WM_DROPOBJECT          0x022A /* DDK / Win16 */\n#define WM_QUERYDROPOBJECT     0x022B /* DDK / Win16 */\n#define WM_BEGINDRAG           0x022C /* DDK / Win16 */\n#define WM_DRAGLOOP            0x022D /* DDK / Win16 */\n#define WM_DRAGSELECT          0x022E /* DDK / Win16 */\n#define WM_DRAGMOVE            0x022F /* DDK / Win16 */\n\n#define WM_MDISETMENU          0x0230\n#define WM_ENTERSIZEMOVE       0x0231\n#define WM_EXITSIZEMOVE        0x0232\n#define WM_DROPFILES           0x0233\n#define WM_MDIREFRESHMENU      0x0234\n\n#define WM_POINTERDEVICECHANGE     0x0238\n#define WM_POINTERDEVICEINRANGE    0x0239\n#define WM_POINTERDEVICEOUTOFRANGE 0x023a\n\n#define WM_TOUCH               0x0240\n#define WM_NCPOINTERUPDATE     0x0241\n#define WM_NCPOINTERDOWN       0x0242\n#define WM_NCPOINTERUP         0x0243\n#define WM_POINTERUPDATE       0x0245\n#define WM_POINTERDOWN         0x0246\n#define WM_POINTERUP           0x0247\n#define WM_POINTERENTER        0x0249\n#define WM_POINTERLEAVE        0x024a\n#define WM_POINTERACTIVATE     0x024b\n#define WM_POINTERCAPTURECHANGED 0x024c\n#define WM_TOUCHHITTESTING     0x024d\n#define WM_POINTERWHEEL        0x024e\n#define WM_POINTERHWHEEL       0x024f\n\n#define WM_POINTERROUTEDTO     0x0251\n#define WM_POINTERROUTEDAWAY   0x0252\n#define WM_POINTERROUTEDRELEASED 0x0253\n\n/* Win32 4.0 messages for IME */\n#define WM_IME_SETCONTEXT      0x0281\n#define WM_IME_NOTIFY          0x0282\n#define WM_IME_CONTROL         0x0283\n#define WM_IME_COMPOSITIONFULL 0x0284\n#define WM_IME_SELECT          0x0285\n#define WM_IME_CHAR            0x0286\n/* Win32 5.0 messages for IME */\n#define WM_IME_REQUEST         0x0288\n\n/* Win32 4.0 messages for IME */\n#define WM_IME_KEYDOWN         0x0290\n#define WM_IME_KEYUP           0x0291\n\n#define WM_NCMOUSEHOVER        0x02A0\n#define WM_MOUSEHOVER          0x02A1\n#define WM_MOUSELEAVE          0x02A3\n#define WM_NCMOUSELEAVE        0x02A2\n\n#define WM_WTSSESSION_CHANGE   0x02B1\n\n#define WM_TABLET_FIRST        0x02c0\n#define WM_TABLET_LAST         0x02df\n\n#define WM_DPICHANGED          0x02e0\n#define WM_DPICHANGED_BEFOREPARENT 0x02e2\n#define WM_DPICHANGED_AFTERPARENT  0x02e3\n#define WM_GETDPISCALEDSIZE    0x02e4\n\n/* Clipboard command messages */\n#define WM_CUT                 0x0300\n#define WM_COPY                0x0301\n#define WM_PASTE               0x0302\n#define WM_CLEAR               0x0303\n#define WM_UNDO                0x0304\n\n/* Clipboard owner messages */\n#define WM_RENDERFORMAT        0x0305\n#define WM_RENDERALLFORMATS    0x0306\n#define WM_DESTROYCLIPBOARD    0x0307\n\n/* Clipboard viewer messages */\n#define WM_DRAWCLIPBOARD       0x0308\n#define WM_PAINTCLIPBOARD      0x0309\n#define WM_VSCROLLCLIPBOARD    0x030A\n#define WM_SIZECLIPBOARD       0x030B\n#define WM_ASKCBFORMATNAME     0x030C\n#define WM_CHANGECBCHAIN       0x030D\n#define WM_HSCROLLCLIPBOARD    0x030E\n\n#define WM_QUERYNEWPALETTE     0x030F\n#define WM_PALETTEISCHANGING   0x0310\n#define WM_PALETTECHANGED      0x0311\n#define WM_HOTKEY              0x0312\n\n#define WM_PRINT               0x0317\n#define WM_PRINTCLIENT         0x0318\n#define WM_APPCOMMAND          0x0319\n#define WM_THEMECHANGED        0x031A\n#define WM_CLIPBOARDUPDATE     0x031D\n\n#define WM_DWMCOMPOSITIONCHANGED 0x031E\n#define WM_DWMNCRENDERINGCHANGED 0x031F\n#define WM_DWMCOLORIZATIONCOLORCHANGED 0x0320\n#define WM_DWMWINDOWMAXIMIZEDCHANGE 0x0321\n#define WM_DWMSENDICONICTHUMBNAIL 0x0323\n#define WM_DWMSENDICONICLIVEPREVIEWBITMAP 0x0326\n\n#define WM_GETTITLEBARINFOEX   0x033F\n\n#define WM_HANDHELDFIRST       0x0358\n#define WM_HANDHELDLAST        0x035F\n\n#define WM_AFXFIRST            0x0360\n#define WM_AFXLAST             0x037F\n\n#define WM_PENWINFIRST         0x0380\n#define WM_PENWINLAST          0x038F\n\n#define WM_USER                0x0400\n\n#define WM_APP                 0x8000\n\n\n/* wParam for WM_SIZING message */\n#define WMSZ_LEFT              1\n#define WMSZ_RIGHT             2\n#define WMSZ_TOP               3\n#define WMSZ_TOPLEFT           4\n#define WMSZ_TOPRIGHT          5\n#define WMSZ_BOTTOM            6\n#define WMSZ_BOTTOMLEFT        7\n#define WMSZ_BOTTOMRIGHT       8\n\n/* WM_NCHITTEST return codes */\n#define HTERROR                (-2)\n#define HTTRANSPARENT          (-1)\n#define HTNOWHERE              0\n#define HTCLIENT               1\n#define HTCAPTION              2\n#define HTSYSMENU              3\n#define HTSIZE                 4\n#define HTGROWBOX              HTSIZE\n#define HTMENU                 5\n#define HTHSCROLL              6\n#define HTVSCROLL              7\n#define HTMINBUTTON            8\n#define HTREDUCE               HTMINBUTTON\n#define HTMAXBUTTON            9\n#define HTZOOM                 HTMAXBUTTON\n#define HTLEFT                 10\n#define HTSIZEFIRST            HTLEFT\n#define HTRIGHT                11\n#define HTTOP                  12\n#define HTTOPLEFT              13\n#define HTTOPRIGHT             14\n#define HTBOTTOM               15\n#define HTBOTTOMLEFT           16\n#define HTBOTTOMRIGHT          17\n#define HTSIZELAST             HTBOTTOMRIGHT\n#define HTBORDER               18\n#define HTOBJECT               19\n#define HTCLOSE                20\n#define HTHELP                 21\n\n/* SendMessageTimeout flags */\n#define SMTO_NORMAL            0x0000\n#define SMTO_BLOCK             0x0001\n#define SMTO_ABORTIFHUNG       0x0002\n#define SMTO_NOTIMEOUTIFNOTHUNG 0x0008\n#define SMTO_ERRORONEXIT       0x0020\n\n/* WM_MOUSEACTIVATE return values */\n#define MA_ACTIVATE            1\n#define MA_ACTIVATEANDEAT      2\n#define MA_NOACTIVATE          3\n#define MA_NOACTIVATEANDEAT    4\n\n/* WM_GETICON/WM_SETICON params values */\n#define ICON_SMALL             0\n#define ICON_BIG               1\n#define ICON_SMALL2            2\n\n/* WM_SIZE message wParam values */\n#define SIZE_RESTORED          0\n#define SIZE_MINIMIZED         1\n#define SIZE_MAXIMIZED         2\n#define SIZE_MAXSHOW           3\n#define SIZE_MAXHIDE           4\n#define SIZENORMAL             SIZE_RESTORED\n#define SIZEICONIC             SIZE_MINIMIZED\n#define SIZEFULLSCREEN         SIZE_MAXIMIZED\n#define SIZEZOOMSHOW           SIZE_MAXSHOW\n#define SIZEZOOMHIDE           SIZE_MAXHIDE\n\n/* WM_NCCALCSIZE return flags */\n#define WVR_ALIGNTOP           0x0010\n#define WVR_ALIGNLEFT          0x0020\n#define WVR_ALIGNBOTTOM        0x0040\n#define WVR_ALIGNRIGHT         0x0080\n#define WVR_HREDRAW            0x0100\n#define WVR_VREDRAW            0x0200\n#define WVR_REDRAW             (WVR_HREDRAW | WVR_VREDRAW)\n#define WVR_VALIDRECTS         0x0400\n\n/* Key status flags for mouse events */\n#ifndef NOKEYSTATES\n#define MK_LBUTTON             0x0001\n#define MK_RBUTTON             0x0002\n#define MK_SHIFT               0x0004\n#define MK_CONTROL             0x0008\n#define MK_MBUTTON             0x0010\n#define MK_XBUTTON1            0x0020\n#define MK_XBUTTON2            0x0040\n#endif /* NOKEYSTATES */\n\n#ifndef NOTRACKMOUSEEVENT\n#define TME_HOVER              0x00000001\n#define TME_LEAVE              0x00000002\n#define TME_NONCLIENT          0x00000010\n#define TME_QUERY              0x40000000\n#define TME_CANCEL             0x80000000\n#define HOVER_DEFAULT          0xFFFFFFFF\n#endif /* NOTRACKMOUSEEVENT */\n\n#endif /* NOWINMESSAGES */\n\n\n/*** Window Styles ***/\n#ifndef NOWINSTYLES\n#define WS_OVERLAPPED          __MSABI_LONG(0x00000000)\n#define WS_POPUP               __MSABI_LONG(0x80000000)\n#define WS_CHILD               __MSABI_LONG(0x40000000)\n#define WS_MINIMIZE            __MSABI_LONG(0x20000000)\n#define WS_VISIBLE             __MSABI_LONG(0x10000000)\n#define WS_DISABLED            __MSABI_LONG(0x08000000)\n#define WS_CLIPSIBLINGS        __MSABI_LONG(0x04000000)\n#define WS_CLIPCHILDREN        __MSABI_LONG(0x02000000)\n#define WS_MAXIMIZE            __MSABI_LONG(0x01000000)\n#define WS_BORDER              __MSABI_LONG(0x00800000)\n#define WS_DLGFRAME            __MSABI_LONG(0x00400000)\n#define WS_VSCROLL             __MSABI_LONG(0x00200000)\n#define WS_HSCROLL             __MSABI_LONG(0x00100000)\n#define WS_SYSMENU             __MSABI_LONG(0x00080000)\n#define WS_THICKFRAME          __MSABI_LONG(0x00040000)\n#define WS_GROUP               __MSABI_LONG(0x00020000)\n#define WS_TABSTOP             __MSABI_LONG(0x00010000)\n#define WS_MINIMIZEBOX         __MSABI_LONG(0x00020000)\n#define WS_MAXIMIZEBOX         __MSABI_LONG(0x00010000)\n#define WS_CAPTION             (WS_BORDER | WS_DLGFRAME)\n#define WS_TILED               WS_OVERLAPPED\n#define WS_ICONIC              WS_MINIMIZE\n#define WS_SIZEBOX             WS_THICKFRAME\n#define WS_OVERLAPPEDWINDOW    (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME| WS_MINIMIZEBOX | WS_MAXIMIZEBOX)\n#define WS_POPUPWINDOW         (WS_POPUP | WS_BORDER | WS_SYSMENU)\n#define WS_CHILDWINDOW         WS_CHILD\n#define WS_TILEDWINDOW         WS_OVERLAPPEDWINDOW\n#endif /* NOWINSTYLES */\n\n\n/*** Window extended styles ***/\n#ifndef NOWINSTYLES\n#define WS_EX_DLGMODALFRAME    __MSABI_LONG(0x00000001)\n#define WS_EX_DRAGDETECT       __MSABI_LONG(0x00000002) /* Undocumented */\n#define WS_EX_NOPARENTNOTIFY   __MSABI_LONG(0x00000004)\n#define WS_EX_TOPMOST          __MSABI_LONG(0x00000008)\n#define WS_EX_ACCEPTFILES      __MSABI_LONG(0x00000010)\n#define WS_EX_TRANSPARENT      __MSABI_LONG(0x00000020)\n#define WS_EX_MDICHILD         __MSABI_LONG(0x00000040)\n#define WS_EX_TOOLWINDOW       __MSABI_LONG(0x00000080)\n#define WS_EX_WINDOWEDGE       __MSABI_LONG(0x00000100)\n#define WS_EX_CLIENTEDGE       __MSABI_LONG(0x00000200)\n#define WS_EX_CONTEXTHELP      __MSABI_LONG(0x00000400)\n#define WS_EX_RIGHT            __MSABI_LONG(0x00001000)\n#define WS_EX_LEFT             __MSABI_LONG(0x00000000)\n#define WS_EX_RTLREADING       __MSABI_LONG(0x00002000)\n#define WS_EX_LTRREADING       __MSABI_LONG(0x00000000)\n#define WS_EX_LEFTSCROLLBAR    __MSABI_LONG(0x00004000)\n#define WS_EX_RIGHTSCROLLBAR   __MSABI_LONG(0x00000000)\n#define WS_EX_CONTROLPARENT    __MSABI_LONG(0x00010000)\n#define WS_EX_STATICEDGE       __MSABI_LONG(0x00020000)\n#define WS_EX_APPWINDOW        __MSABI_LONG(0x00040000)\n#define WS_EX_LAYERED          __MSABI_LONG(0x00080000)\n#define WS_EX_NOINHERITLAYOUT  __MSABI_LONG(0x00100000)\n#define WS_EX_LAYOUTRTL        __MSABI_LONG(0x00400000)\n#define WS_EX_COMPOSITED       __MSABI_LONG(0x02000000)\n#define WS_EX_NOACTIVATE       __MSABI_LONG(0x08000000)\n\n#define WS_EX_OVERLAPPEDWINDOW (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE)\n#define WS_EX_PALETTEWINDOW    (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST)\n#endif /* NOWINSTYLES */\n\n\n/*** Class styles ***/\n#ifndef NOWINSTYLES\n#define CS_VREDRAW             0x00000001\n#define CS_HREDRAW             0x00000002\n#define CS_KEYCVTWINDOW        0x00000004 /* DDK / Win16 */\n#define CS_DBLCLKS             0x00000008\n#define CS_OWNDC               0x00000020\n#define CS_CLASSDC             0x00000040\n#define CS_PARENTDC            0x00000080\n#define CS_NOKEYCVT            0x00000100 /* DDK / Win16 */\n#define CS_NOCLOSE             0x00000200\n#define CS_SAVEBITS            0x00000800\n#define CS_BYTEALIGNCLIENT     0x00001000\n#define CS_BYTEALIGNWINDOW     0x00002000\n#define CS_GLOBALCLASS         0x00004000\n#define CS_IME                 0x00010000\n#define CS_DROPSHADOW          0x00020000\n#endif /* NOWINSTYLES */\n\n\n/*** Predefined Clipboard Formats ***/\n#ifndef NOCLIPBOARD\n#define CF_TEXT                1\n#define CF_BITMAP              2\n#define CF_METAFILEPICT        3\n#define CF_SYLK                4\n#define CF_DIF                 5\n#define CF_TIFF                6\n#define CF_OEMTEXT             7\n#define CF_DIB                 8\n#define CF_PALETTE             9\n#define CF_PENDATA             10\n#define CF_RIFF                11\n#define CF_WAVE                12\n#define CF_UNICODETEXT         13\n#define CF_ENHMETAFILE         14\n#define CF_HDROP               15\n#define CF_LOCALE              16\n#define CF_DIBV5               17\n#define CF_MAX                 18\n\n#define CF_OWNERDISPLAY        0x0080\n#define CF_DSPTEXT             0x0081\n#define CF_DSPBITMAP           0x0082\n#define CF_DSPMETAFILEPICT     0x0083\n#define CF_DSPENHMETAFILE      0x008E\n\n/* \"Private\" formats don't get GlobalFree()'d */\n#define CF_PRIVATEFIRST        0x0200\n#define CF_PRIVATELAST         0x02FF\n\n/* \"GDIOBJ\" formats do get DeleteObject()'d */\n#define CF_GDIOBJFIRST         0x0300\n#define CF_GDIOBJLAST          0x03FF\n#endif /* NOCLIPBOARD */\n\n\n/*** Menu flags ***/\n#ifndef NOMENUS\n#define MF_INSERT              __MSABI_LONG(0x00000000)\n#define MF_CHANGE              __MSABI_LONG(0x00000080)\n#define MF_APPEND              __MSABI_LONG(0x00000100)\n#define MF_DELETE              __MSABI_LONG(0x00000200)\n#define MF_REMOVE              __MSABI_LONG(0x00001000)\n#define MF_END                 __MSABI_LONG(0x00000080)\n\n#define MF_ENABLED             __MSABI_LONG(0x00000000)\n#define MF_GRAYED              __MSABI_LONG(0x00000001)\n#define MF_DISABLED            __MSABI_LONG(0x00000002)\n#define MF_STRING              __MSABI_LONG(0x00000000)\n#define MF_BITMAP              __MSABI_LONG(0x00000004)\n#define MF_UNCHECKED           __MSABI_LONG(0x00000000)\n#define MF_CHECKED             __MSABI_LONG(0x00000008)\n#define MF_POPUP               __MSABI_LONG(0x00000010)\n#define MF_MENUBARBREAK        __MSABI_LONG(0x00000020)\n#define MF_MENUBREAK           __MSABI_LONG(0x00000040)\n#define MF_UNHILITE            __MSABI_LONG(0x00000000)\n#define MF_HILITE              __MSABI_LONG(0x00000080)\n#define MF_OWNERDRAW           __MSABI_LONG(0x00000100)\n#define MF_USECHECKBITMAPS     __MSABI_LONG(0x00000200)\n#define MF_BYCOMMAND           __MSABI_LONG(0x00000000)\n#define MF_BYPOSITION          __MSABI_LONG(0x00000400)\n#define MF_SEPARATOR           __MSABI_LONG(0x00000800)\n#define MF_DEFAULT             __MSABI_LONG(0x00001000)\n#define MF_SYSMENU             __MSABI_LONG(0x00002000)\n#define MF_HELP                __MSABI_LONG(0x00004000)\n#define MF_RIGHTJUSTIFY        __MSABI_LONG(0x00004000)\n#define MF_MOUSESELECT         __MSABI_LONG(0x00008000)\n\n/* Flags for extended menu item types */\n#define MFT_STRING             MF_STRING\n#define MFT_BITMAP             MF_BITMAP\n#define MFT_MENUBARBREAK       MF_MENUBARBREAK\n#define MFT_MENUBREAK          MF_MENUBREAK\n#define MFT_OWNERDRAW          MF_OWNERDRAW\n#define MFT_RADIOCHECK         __MSABI_LONG(0x00000200)\n#define MFT_SEPARATOR          MF_SEPARATOR\n#define MFT_RIGHTORDER         __MSABI_LONG(0x00002000)\n#define MFT_RIGHTJUSTIFY       MF_RIGHTJUSTIFY\n\n/* Flags for extended menu item states */\n#define MFS_GRAYED             __MSABI_LONG(0x00000003)\n#define MFS_DISABLED           MFS_GRAYED\n#define MFS_CHECKED            MF_CHECKED\n#define MFS_HILITE             MF_HILITE\n#define MFS_ENABLED            MF_ENABLED\n#define MFS_UNCHECKED          MF_UNCHECKED\n#define MFS_UNHILITE           MF_UNHILITE\n#define MFS_DEFAULT            MF_DEFAULT\n\n/* DDK / Win16 defines */\n#define MFS_MASK               __MSABI_LONG(0x0000108B)\n#define MFS_HOTTRACKDRAWN      __MSABI_LONG(0x10000000)\n#define MFS_CACHEDBMP          __MSABI_LONG(0x20000000)\n#define MFS_BOTTOMGAPDROP      __MSABI_LONG(0x40000000)\n#define MFS_TOPGAPDROP         __MSABI_LONG(0x80000000)\n#define MFS_GAPDROP            (MFS_BOTTOMGAPDROP | MFS_TOPGAPDROP)\n#endif /* NOMENUS */\n\n\n/*** WM_SYSCOMMAND parameters ***/\n#ifndef NOSYSCOMMANDS\n/* At least HP-UX defines it in /usr/include/sys/signal.h */\n# ifdef SC_SIZE\n#  undef SC_SIZE\n# endif\n#define SC_SIZE                0xf000\n#define SC_MOVE                0xf010\n#define SC_MINIMIZE            0xf020\n#define SC_MAXIMIZE            0xf030\n#define SC_NEXTWINDOW          0xf040\n#define SC_PREVWINDOW          0xf050\n#define SC_CLOSE               0xf060\n#define SC_VSCROLL             0xf070\n#define SC_HSCROLL             0xf080\n#define SC_MOUSEMENU           0xf090\n#define SC_KEYMENU             0xf100\n#define SC_ARRANGE             0xf110\n#define SC_RESTORE             0xf120\n#define SC_TASKLIST            0xf130\n#define SC_SCREENSAVE          0xf140\n#define SC_HOTKEY              0xf150\n\n/* Win32 4.0 */\n#define SC_DEFAULT             0xf160\n#define SC_MONITORPOWER        0xf170\n#define SC_CONTEXTHELP         0xf180\n#define SC_SEPARATOR           0xf00f\n\n#define GET_SC_WPARAM(wParam)  ((int)wParam & 0xfff0)\n#define SCF_ISSECURE           0x0001\n\n/* Obsolete names */\n#define SC_ICON               SC_MINIMIZE\n#define SC_ZOOM               SC_MAXIMIZE\n#endif /* NOSYSCOMMANDS */\n\n\n/*** OEM Resource Ordinal Numbers ***/\n#ifdef OEMRESOURCE\n#define OBM_RDRVERT            32559\n#define OBM_RDRHORZ            32660\n#define OBM_RDR2DIM            32661\n#define OBM_TRTYPE             32732 /* FIXME: Wine-only */\n#define OBM_LFARROWI           32734\n#define OBM_RGARROWI           32735\n#define OBM_DNARROWI           32736\n#define OBM_UPARROWI           32737\n#define OBM_COMBO              32738\n#define OBM_MNARROW            32739\n#define OBM_LFARROWD           32740\n#define OBM_RGARROWD           32741\n#define OBM_DNARROWD           32742\n#define OBM_UPARROWD           32743\n#define OBM_RESTORED           32744\n#define OBM_ZOOMD              32745\n#define OBM_REDUCED            32746\n#define OBM_RESTORE            32747\n#define OBM_ZOOM               32748\n#define OBM_REDUCE             32749\n#define OBM_LFARROW            32750\n#define OBM_RGARROW            32751\n#define OBM_DNARROW            32752\n#define OBM_UPARROW            32753\n#define OBM_CLOSE              32754\n#define OBM_OLD_RESTORE        32755\n#define OBM_OLD_ZOOM           32756\n#define OBM_OLD_REDUCE         32757\n#define OBM_BTNCORNERS         32758\n#define OBM_CHECKBOXES         32759\n#define OBM_CHECK              32760\n#define OBM_BTSIZE             32761\n#define OBM_OLD_LFARROW        32762\n#define OBM_OLD_RGARROW        32763\n#define OBM_OLD_DNARROW        32764\n#define OBM_OLD_UPARROW        32765\n#define OBM_SIZE               32766\n#define OBM_OLD_CLOSE          32767\n\n#define OCR_NORMAL             32512\n#define OCR_IBEAM              32513\n#define OCR_WAIT               32514\n#define OCR_CROSS              32515\n#define OCR_UP                 32516\n#define OCR_PEN                32631\n#define OCR_SIZE               32640\n#define OCR_ICON               32641\n#define OCR_SIZENWSE           32642\n#define OCR_SIZENESW           32643\n#define OCR_SIZEWE             32644\n#define OCR_SIZENS             32645\n#define OCR_SIZEALL            32646\n#define OCR_ICOCUR             32647\n#define OCR_NO                 32648\n#define OCR_HAND               32649\n#define OCR_APPSTARTING        32650\n#define OCR_HELP               32651 /* DDK / Win16 */\n#define OCR_RDRVERT            32652 /* DDK / Win16 */\n#define OCR_RDRHORZ            32653 /* DDK / Win16 */\n#define OCR_RDR2DIM            32654 /* DDK / Win16 */\n#define OCR_RDRNORTH           32655 /* DDK / Win16 */\n#define OCR_RDRSOUTH           32656 /* DDK / Win16 */\n#define OCR_RDRWEST            32657 /* DDK / Win16 */\n#define OCR_RDREAST            32658 /* DDK / Win16 */\n#define OCR_RDRNORTHWEST       32659 /* DDK / Win16 */\n#define OCR_RDRNORTHEAST       32660 /* DDK / Win16 */\n#define OCR_RDRSOUTHWEST       32661 /* DDK / Win16 */\n#define OCR_RDRSOUTHEAST       32662 /* DDK / Win16 */\n\n#define OIC_SAMPLE             32512\n#define OIC_HAND               32513\n#define OIC_ERROR              OIC_HAND\n#define OIC_QUES               32514\n#define OIC_BANG               32515\n#define OIC_WARNING            OIC_BANG\n#define OIC_NOTE               32516\n#define OIC_INFORMATION        OIC_NOTE\n#define OIC_WINLOGO            32517\n#define OIC_SHIELD             32518\n#endif /* OEMRESOURCE */\n\n\n/*** Predefined resources ***/\n#ifndef NOICONS\n#define IDI_APPLICATION        MAKEINTRESOURCE(32512)\n#define IDI_HAND               MAKEINTRESOURCE(32513)\n#define IDI_QUESTION           MAKEINTRESOURCE(32514)\n#define IDI_EXCLAMATION        MAKEINTRESOURCE(32515)\n#define IDI_ASTERISK           MAKEINTRESOURCE(32516)\n#define IDI_WINLOGO            MAKEINTRESOURCE(32517)\n#define IDI_SHIELD             MAKEINTRESOURCE(32518)\n\n#define IDI_WARNING            IDI_EXCLAMATION\n#define IDI_ERROR              IDI_HAND\n#define IDI_INFORMATION        IDI_ASTERISK\n#endif /* NOICONS */\n\n\n/*** Standard dialog button IDs ***/\n#define IDOK                   1\n#define IDCANCEL               2\n#define IDABORT                3\n#define IDRETRY                4\n#define IDIGNORE               5\n#define IDYES                  6\n#define IDNO                   7\n#define IDCLOSE                8\n#define IDHELP                 9\n#define IDTRYAGAIN             10\n#define IDCONTINUE             11\n#ifndef IDTIMEOUT\n#define IDTIMEOUT              32000\n#endif\n\n\n/*** Edit control styles ***/\n#ifndef NOWINSTYLES\n#define ES_LEFT                __MSABI_LONG(0x00000000)\n#define ES_CENTER              __MSABI_LONG(0x00000001)\n#define ES_RIGHT               __MSABI_LONG(0x00000002)\n#define ES_MULTILINE           __MSABI_LONG(0x00000004)\n#define ES_UPPERCASE           __MSABI_LONG(0x00000008)\n#define ES_LOWERCASE           __MSABI_LONG(0x00000010)\n#define ES_PASSWORD            __MSABI_LONG(0x00000020)\n#define ES_AUTOVSCROLL         __MSABI_LONG(0x00000040)\n#define ES_AUTOHSCROLL         __MSABI_LONG(0x00000080)\n#define ES_NOHIDESEL           __MSABI_LONG(0x00000100)\n#define ES_COMBO               __MSABI_LONG(0x00000200) /* Undocumented. Parent is a combobox */\n#define ES_OEMCONVERT          __MSABI_LONG(0x00000400)\n#define ES_READONLY            __MSABI_LONG(0x00000800)\n#define ES_WANTRETURN          __MSABI_LONG(0x00001000)\n#define ES_NUMBER              __MSABI_LONG(0x00002000)\n#endif /* NOWINSTYLES */\n\n\n/*** Edit control messages ***/\n#ifndef NOWINMESSAGES\n#define EM_GETSEL              0x00b0\n#define EM_SETSEL              0x00b1\n#define EM_GETRECT             0x00b2\n#define EM_SETRECT             0x00b3\n#define EM_SETRECTNP           0x00b4\n#define EM_SCROLL              0x00b5\n#define EM_LINESCROLL          0x00b6\n#define EM_SCROLLCARET         0x00b7\n#define EM_GETMODIFY           0x00b8\n#define EM_SETMODIFY           0x00b9\n#define EM_GETLINECOUNT        0x00ba\n#define EM_LINEINDEX           0x00bb\n#define EM_SETHANDLE           0x00bc\n#define EM_GETHANDLE           0x00bd\n#define EM_GETTHUMB            0x00be\n/* Unassigned 0x00bf and 0x00c0 */\n#define EM_LINELENGTH          0x00c1\n#define EM_REPLACESEL          0x00c2\n#define EM_SETFONT             0x00c3 /* DDK / Win16 */\n#define EM_GETLINE             0x00c4\n#define EM_LIMITTEXT           0x00c5\n#define EM_SETLIMITTEXT        EM_LIMITTEXT\n#define EM_CANUNDO             0x00c6\n#define EM_UNDO                0x00c7\n#define EM_FMTLINES            0x00c8\n#define EM_LINEFROMCHAR        0x00c9\n#define EM_SETWORDBREAK        0x00ca /* DDK / Win16 */\n#define EM_SETTABSTOPS         0x00cb\n#define EM_SETPASSWORDCHAR     0x00cc\n#define EM_EMPTYUNDOBUFFER     0x00cd\n#define EM_GETFIRSTVISIBLELINE 0x00ce\n#define EM_SETREADONLY         0x00cf\n#define EM_SETWORDBREAKPROC    0x00d0\n#define EM_GETWORDBREAKPROC    0x00d1\n#define EM_GETPASSWORDCHAR     0x00d2\n#define EM_SETMARGINS          0x00d3\n#define EM_GETMARGINS          0x00d4\n#define EM_GETLIMITTEXT        0x00d5\n#define EM_POSFROMCHAR         0x00d6\n#define EM_CHARFROMPOS         0x00d7\n#define EM_SETIMESTATUS        0x00d8\n#define EM_GETIMESTATUS        0x00d9\n#endif /* NOWINMESSAGES */\n\n\n/*** Button control styles ***/\n#define BS_PUSHBUTTON          __MSABI_LONG(0x00000000)\n#define BS_DEFPUSHBUTTON       __MSABI_LONG(0x00000001)\n#define BS_CHECKBOX            __MSABI_LONG(0x00000002)\n#define BS_AUTOCHECKBOX        __MSABI_LONG(0x00000003)\n#define BS_RADIOBUTTON         __MSABI_LONG(0x00000004)\n#define BS_3STATE              __MSABI_LONG(0x00000005)\n#define BS_AUTO3STATE          __MSABI_LONG(0x00000006)\n#define BS_GROUPBOX            __MSABI_LONG(0x00000007)\n#define BS_USERBUTTON          __MSABI_LONG(0x00000008)\n#define BS_AUTORADIOBUTTON     __MSABI_LONG(0x00000009)\n#define BS_PUSHBOX             __MSABI_LONG(0x0000000A)\n#define BS_OWNERDRAW           __MSABI_LONG(0x0000000B)\n#define BS_TYPEMASK            __MSABI_LONG(0x0000000F)\n#define BS_LEFTTEXT            __MSABI_LONG(0x00000020)\n#define BS_RIGHTBUTTON         BS_LEFTTEXT\n\n#define BS_TEXT                __MSABI_LONG(0x00000000)\n#define BS_ICON                __MSABI_LONG(0x00000040)\n#define BS_BITMAP              __MSABI_LONG(0x00000080)\n#define BS_LEFT                __MSABI_LONG(0x00000100)\n#define BS_RIGHT               __MSABI_LONG(0x00000200)\n#define BS_CENTER              __MSABI_LONG(0x00000300)\n#define BS_TOP                 __MSABI_LONG(0x00000400)\n#define BS_BOTTOM              __MSABI_LONG(0x00000800)\n#define BS_VCENTER             __MSABI_LONG(0x00000C00)\n#define BS_PUSHLIKE            __MSABI_LONG(0x00001000)\n#define BS_MULTILINE           __MSABI_LONG(0x00002000)\n#define BS_NOTIFY              __MSABI_LONG(0x00004000)\n#define BS_FLAT                __MSABI_LONG(0x00008000)\n\n\n/*** Button notification codes ***/\n#define BN_CLICKED             0\n#define BN_PAINT               1\n#define BN_HILITE              2\n#define BN_PUSHED              BN_HILITE\n#define BN_UNHILITE            3\n#define BN_UNPUSHED            BN_UNHILITE\n#define BN_DISABLE             4\n#define BN_DOUBLECLICKED       5\n#define BN_DBLCLK              BN_DOUBLECLICKED\n#define BN_SETFOCUS            6\n#define BN_KILLFOCUS           7\n\n\n/*** Win32 button control messages ***/\n#define BM_GETCHECK            0x00f0\n#define BM_SETCHECK            0x00f1\n#define BM_GETSTATE            0x00f2\n#define BM_SETSTATE            0x00f3\n#define BM_SETSTYLE            0x00f4\n#define BM_CLICK               0x00f5\n#define BM_GETIMAGE            0x00f6\n#define BM_SETIMAGE            0x00f7\n#define BM_SETDONTCLICK        0x00f8\n\n/* Button states */\n#define BST_UNCHECKED          0x0000\n#define BST_CHECKED            0x0001\n#define BST_INDETERMINATE      0x0002\n#define BST_PUSHED             0x0004\n#define BST_FOCUS              0x0008\n\n/*** Static Control Styles ***/\n#define SS_LEFT                __MSABI_LONG(0x00000000)\n#define SS_CENTER              __MSABI_LONG(0x00000001)\n#define SS_RIGHT               __MSABI_LONG(0x00000002)\n#define SS_ICON                __MSABI_LONG(0x00000003)\n#define SS_BLACKRECT           __MSABI_LONG(0x00000004)\n#define SS_GRAYRECT            __MSABI_LONG(0x00000005)\n#define SS_WHITERECT           __MSABI_LONG(0x00000006)\n#define SS_BLACKFRAME          __MSABI_LONG(0x00000007)\n#define SS_GRAYFRAME           __MSABI_LONG(0x00000008)\n#define SS_WHITEFRAME          __MSABI_LONG(0x00000009)\n#define SS_USERITEM            __MSABI_LONG(0x0000000A)\n#define SS_SIMPLE              __MSABI_LONG(0x0000000B)\n#define SS_LEFTNOWORDWRAP      __MSABI_LONG(0x0000000C)\n#define SS_OWNERDRAW           __MSABI_LONG(0x0000000D)\n#define SS_BITMAP              __MSABI_LONG(0x0000000E)\n#define SS_ENHMETAFILE         __MSABI_LONG(0x0000000F)\n#define SS_ETCHEDHORZ          __MSABI_LONG(0x00000010)\n#define SS_ETCHEDVERT          __MSABI_LONG(0x00000011)\n#define SS_ETCHEDFRAME         __MSABI_LONG(0x00000012)\n#define SS_TYPEMASK            __MSABI_LONG(0x0000001F)\n\n#define SS_REALSIZECONTROL     __MSABI_LONG(0x00000040)\n#define SS_NOPREFIX            __MSABI_LONG(0x00000080)\n#define SS_NOTIFY              __MSABI_LONG(0x00000100)\n#define SS_CENTERIMAGE         __MSABI_LONG(0x00000200)\n#define SS_RIGHTJUST           __MSABI_LONG(0x00000400)\n#define SS_REALSIZEIMAGE       __MSABI_LONG(0x00000800)\n#define SS_SUNKEN              __MSABI_LONG(0x00001000)\n#define SS_EDITCONTROL         __MSABI_LONG(0x00002000)\n#define SS_ENDELLIPSIS         __MSABI_LONG(0x00004000)\n#define SS_PATHELLIPSIS        __MSABI_LONG(0x00008000)\n#define SS_WORDELLIPSIS        __MSABI_LONG(0x0000C000)\n#define SS_ELLIPSISMASK        SS_WORDELLIPSIS\n\n\n/*** Dialog styles ***/\n#define DS_ABSALIGN            __MSABI_LONG(0x00000001)\n#define DS_SYSMODAL            __MSABI_LONG(0x00000002)\n#define DS_3DLOOK              __MSABI_LONG(0x00000004) /* win95 */\n#define DS_FIXEDSYS            __MSABI_LONG(0x00000008) /* win95 */\n#define DS_NOFAILCREATE        __MSABI_LONG(0x00000010) /* win95 */\n#define DS_LOCALEDIT           __MSABI_LONG(0x00000020)\n#define DS_SETFONT             __MSABI_LONG(0x00000040)\n#define DS_MODALFRAME          __MSABI_LONG(0x00000080)\n#define DS_NOIDLEMSG           __MSABI_LONG(0x00000100)\n#define DS_SETFOREGROUND       __MSABI_LONG(0x00000200) /* win95 */\n#define DS_CONTROL             __MSABI_LONG(0x00000400) /* win95 */\n#define DS_CENTER              __MSABI_LONG(0x00000800) /* win95 */\n#define DS_CENTERMOUSE         __MSABI_LONG(0x00001000) /* win95 */\n#define DS_CONTEXTHELP         __MSABI_LONG(0x00002000) /* win95 */\n#define DS_USEPIXELS           __MSABI_LONG(0x00008000)\n#define DS_SHELLFONT           (DS_SETFONT | DS_FIXEDSYS)\n\n\n/*** Listbox styles ***/\n#ifndef NOWINSTYLES\n#define LBS_NOTIFY             __MSABI_LONG(0x00000001)\n#define LBS_SORT               __MSABI_LONG(0x00000002)\n#define LBS_NOREDRAW           __MSABI_LONG(0x00000004)\n#define LBS_MULTIPLESEL        __MSABI_LONG(0x00000008)\n#define LBS_OWNERDRAWFIXED     __MSABI_LONG(0x00000010)\n#define LBS_OWNERDRAWVARIABLE  __MSABI_LONG(0x00000020)\n#define LBS_HASSTRINGS         __MSABI_LONG(0x00000040)\n#define LBS_USETABSTOPS        __MSABI_LONG(0x00000080)\n#define LBS_NOINTEGRALHEIGHT   __MSABI_LONG(0x00000100)\n#define LBS_MULTICOLUMN        __MSABI_LONG(0x00000200)\n#define LBS_WANTKEYBOARDINPUT  __MSABI_LONG(0x00000400)\n#define LBS_EXTENDEDSEL        __MSABI_LONG(0x00000800)\n#define LBS_DISABLENOSCROLL    __MSABI_LONG(0x00001000)\n#define LBS_NODATA             __MSABI_LONG(0x00002000)\n#define LBS_NOSEL              __MSABI_LONG(0x00004000)\n#define LBS_COMBOBOX           __MSABI_LONG(0x00008000)\n#define LBS_STANDARD           (LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER)\n#endif /* NOWINSTYLES */\n\n/*** Combo box styles ***/\n#ifndef NOWINSTYLES\n#define CBS_SIMPLE             __MSABI_LONG(0x00000001)\n#define CBS_DROPDOWN           __MSABI_LONG(0x00000002)\n#define CBS_DROPDOWNLIST       __MSABI_LONG(0x00000003)\n#define CBS_OWNERDRAWFIXED     __MSABI_LONG(0x00000010)\n#define CBS_OWNERDRAWVARIABLE  __MSABI_LONG(0x00000020)\n#define CBS_AUTOHSCROLL        __MSABI_LONG(0x00000040)\n#define CBS_OEMCONVERT         __MSABI_LONG(0x00000080)\n#define CBS_SORT               __MSABI_LONG(0x00000100)\n#define CBS_HASSTRINGS         __MSABI_LONG(0x00000200)\n#define CBS_NOINTEGRALHEIGHT   __MSABI_LONG(0x00000400)\n#define CBS_DISABLENOSCROLL    __MSABI_LONG(0x00000800)\n\n#define CBS_UPPERCASE          __MSABI_LONG(0x00002000)\n#define CBS_LOWERCASE          __MSABI_LONG(0x00004000)\n#endif /* NOWINSTYLES */\n\n\n/*** Scrollbar styles ***/\n#ifndef NOWINSTYLES\n#define SBS_HORZ               __MSABI_LONG(0x00000000)\n#define SBS_VERT               __MSABI_LONG(0x00000001)\n#define SBS_TOPALIGN           __MSABI_LONG(0x00000002)\n#define SBS_LEFTALIGN          __MSABI_LONG(0x00000002)\n#define SBS_BOTTOMALIGN        __MSABI_LONG(0x00000004)\n#define SBS_RIGHTALIGN         __MSABI_LONG(0x00000004)\n#define SBS_SIZEBOXTOPLEFTALIGN __MSABI_LONG(0x00000002)\n#define SBS_SIZEBOXBOTTOMRIGHTALIGN __MSABI_LONG(0x00000004)\n#define SBS_SIZEBOX            __MSABI_LONG(0x00000008)\n#define SBS_SIZEGRIP           __MSABI_LONG(0x00000010)\n#endif /* NOWINSTYLES */\n\n/*** WinHelp commands ***/\n#define HELP_CONTEXT           __MSABI_LONG(0x00000001)\n#define HELP_QUIT              __MSABI_LONG(0x00000002)\n#define HELP_INDEX             __MSABI_LONG(0x00000003)\n#define HELP_CONTENTS          HELP_INDEX\n#define HELP_HELPONHELP        __MSABI_LONG(0x00000004)\n#define HELP_SETINDEX          __MSABI_LONG(0x00000005)\n#define HELP_SETCONTENTS       HELP_SETINDEX\n#define HELP_CONTEXTPOPUP      __MSABI_LONG(0x00000008)\n#define HELP_FORCEFILE         __MSABI_LONG(0x00000009)\n#define HELP_KEY               __MSABI_LONG(0x00000101)\n#define HELP_COMMAND           __MSABI_LONG(0x00000102)\n#define HELP_PARTIALKEY        __MSABI_LONG(0x00000105)\n#define HELP_MULTIKEY          __MSABI_LONG(0x00000201)\n#define HELP_SETWINPOS         __MSABI_LONG(0x00000203)\n\n#define HELP_CONTEXTMENU       0x000a\n#define HELP_FINDER            0x000b\n#define HELP_WM_HELP           0x000c\n#define HELP_SETPOPUP_POS      0x000d\n#define HELP_TCARD_DATA        0x0010\n#define HELP_TCARD_OTHER_CALLER 0x0011\n#define HELP_TCARD             0x8000\n\n#define IDH_NO_HELP            28440\n#define IDH_MISSING_CONTEXT    28441\n#define IDH_GENERIC_HELP_BUTTON 28442\n#define IDH_OK                 28443\n#define IDH_CANCEL             28444\n#define IDH_HELP               28445\n"
  },
  {
    "path": "winecrt0/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c)\nadd_library(winecrt0 ${SOURCE})\ninclude_directories(../wine)\n\nadd_definitions(-D_X86_ -D__i386__ -D__WINESRC__ -DNtCurrentTeb=NtCurrentTeb__)\n\n"
  },
  {
    "path": "winecrt0/crt0_private.h",
    "content": "/*\n * crt0 library private definitions\n *\n * Copyright 2005 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_CRT0_PRIVATE_H__\n#define __WINE_CRT0_PRIVATE_H__\n\n#if defined(__APPLE__) || defined(__ANDROID__)\nstatic inline void _init(int argc, char **argv, char **envp ) { /* nothing */ }\nstatic inline void _fini(void) { /* nothing */ }\n#else\n#define DECLSPEC_HIDDEN\nextern void _init(int argc, char **argv, char **envp ) DECLSPEC_HIDDEN;\nextern void _fini(void) DECLSPEC_HIDDEN;\n#endif\n\nenum init_state\n{\n    NO_INIT_DONE,      /* no initialization done yet */\n    DLL_REGISTERED,    /* the dll has been registered */\n    CONSTRUCTORS_DONE  /* the constructors have been run (implies dll registered too) */\n};\n\nextern enum init_state __wine_spec_init_state DECLSPEC_HIDDEN;\n\n#endif /* __WINE_CRT0_PRIVATE_H__ */\n"
  },
  {
    "path": "winecrt0/dll_entry.c",
    "content": "/*\n * Default entry point for a dll\n *\n * Copyright 2005 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/library.h\"\n#include \"crt0_private.h\"\n\nextern BOOL WINAPI DECLSPEC_HIDDEN DllMain( HINSTANCE inst, DWORD reason, LPVOID reserved );\n\nBOOL /*WINAPI*/ DECLSPEC_HIDDEN __wine_spec_dll_entry( HINSTANCE inst, DWORD reason, LPVOID reserved )\n{\n    /*static BOOL call_fini;\n    BOOL ret;\n\n    if (reason == DLL_PROCESS_ATTACH && __wine_spec_init_state != CONSTRUCTORS_DONE)\n    {\n        call_fini = TRUE;\n        _init( __wine_main_argc, __wine_main_argv, NULL );\n    }\n\n    ret = DllMain( inst, reason, reserved );\n\n    if (reason == DLL_PROCESS_DETACH && call_fini) _fini();\n    \n    return ret;\n    */\n    return 0;\n}\n"
  },
  {
    "path": "winecrt0/exception.c",
    "content": "/*\n * Support functions for Wine exception handling\n *\n * Copyright (c) 1999, 2010 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n#ifndef _MSC_VER\n#include \"config.h\"\n#include <stdarg.h>\n#include \"winternl.h\"\n#include \"wine/exception.h\"\n\n#if defined(__x86_64__) && defined(__ASM_GLOBAL_FUNC)\nextern void __wine_unwind_trampoline(void);\n/* we need an extra call to make sure the stack is correctly aligned */\n__ASM_GLOBAL_FUNC( __wine_unwind_trampoline, \"callq *%rax\" );\n#endif\n\n/* wrapper for RtlUnwind since it clobbers registers on Windows */\nvoid __wine_rtl_unwind( EXCEPTION_REGISTRATION_RECORD* frame, EXCEPTION_RECORD *record,\n                        void (*target)(void) )\n{\n#if defined(__GNUC__) && defined(__i386__)\n    int dummy1, dummy2, dummy3, dummy4;\n    __asm__ __volatile__(\"pushl %%ebp\\n\\t\"\n                         \"pushl %%ebx\\n\\t\"\n                         \"pushl $0\\n\\t\"\n                         \"pushl %3\\n\\t\"\n                         \"pushl %2\\n\\t\"\n                         \"pushl %1\\n\\t\"\n                         \"call *%0\\n\\t\"\n                         \"popl %%ebx\\n\\t\"\n                         \"popl %%ebp\"\n                         : \"=a\" (dummy1), \"=S\" (dummy2), \"=D\" (dummy3), \"=c\" (dummy4)\n                         : \"0\" (RtlUnwind), \"1\" (frame), \"2\" (target), \"3\" (record)\n                         : \"edx\", \"memory\" );\n#elif defined(__x86_64__) && defined(__ASM_GLOBAL_FUNC)\n    RtlUnwind( frame, __wine_unwind_trampoline, record, target );\n#else\n    RtlUnwind( frame, target, record, 0 );\n#endif\n    for (;;) target();\n}\n\nstatic void DECLSPEC_NORETURN unwind_target(void)\n{\n    __WINE_FRAME *wine_frame = (__WINE_FRAME *)__wine_get_frame();\n    __wine_pop_frame( &wine_frame->frame );\n    siglongjmp( wine_frame->jmp, 1 );\n}\n\nstatic void DECLSPEC_NORETURN unwind_frame( EXCEPTION_RECORD *record,\n                                            EXCEPTION_REGISTRATION_RECORD *frame )\n{\n    __WINE_FRAME *wine_frame = (__WINE_FRAME *)frame;\n\n    /* hack to make GetExceptionCode() work in handler */\n    wine_frame->ExceptionCode   = record->ExceptionCode;\n    wine_frame->ExceptionRecord = wine_frame;\n\n    __wine_rtl_unwind( frame, record, unwind_target );\n}\n\nDWORD __wine_exception_handler( EXCEPTION_RECORD *record,\n                                EXCEPTION_REGISTRATION_RECORD *frame,\n                                CONTEXT *context,\n                                EXCEPTION_REGISTRATION_RECORD **pdispatcher )\n{\n    __WINE_FRAME *wine_frame = (__WINE_FRAME *)frame;\n    EXCEPTION_POINTERS ptrs;\n\n    if (record->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND | EH_NESTED_CALL))\n        return ExceptionContinueSearch;\n\n    ptrs.ExceptionRecord = record;\n    ptrs.ContextRecord = context;\n    switch(wine_frame->u.filter( &ptrs ))\n    {\n    case EXCEPTION_CONTINUE_SEARCH:\n        return ExceptionContinueSearch;\n    case EXCEPTION_CONTINUE_EXECUTION:\n        return ExceptionContinueExecution;\n    case EXCEPTION_EXECUTE_HANDLER:\n        break;\n    }\n    unwind_frame( record, frame );\n}\n\nDWORD __wine_exception_ctx_handler( EXCEPTION_RECORD *record,\n                                    EXCEPTION_REGISTRATION_RECORD *frame,\n                                    CONTEXT *context,\n                                    EXCEPTION_REGISTRATION_RECORD **pdispatcher )\n{\n    __WINE_FRAME *wine_frame = (__WINE_FRAME *)frame;\n    EXCEPTION_POINTERS ptrs;\n\n    if (record->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND | EH_NESTED_CALL))\n        return ExceptionContinueSearch;\n\n    ptrs.ExceptionRecord = record;\n    ptrs.ContextRecord = context;\n    switch(wine_frame->u.filter_ctx( &ptrs, wine_frame->ctx ))\n    {\n    case EXCEPTION_CONTINUE_SEARCH:\n        return ExceptionContinueSearch;\n    case EXCEPTION_CONTINUE_EXECUTION:\n        return ExceptionContinueExecution;\n    case EXCEPTION_EXECUTE_HANDLER:\n        break;\n    }\n    unwind_frame( record, frame );\n}\n\nDWORD __wine_exception_handler_page_fault( EXCEPTION_RECORD *record,\n                                           EXCEPTION_REGISTRATION_RECORD *frame,\n                                           CONTEXT *context,\n                                           EXCEPTION_REGISTRATION_RECORD **pdispatcher )\n{\n    if (record->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND | EH_NESTED_CALL))\n        return ExceptionContinueSearch;\n    if (record->ExceptionCode != STATUS_ACCESS_VIOLATION)\n        return ExceptionContinueSearch;\n    unwind_frame( record, frame );\n}\n\nDWORD __wine_exception_handler_all( EXCEPTION_RECORD *record,\n                                    EXCEPTION_REGISTRATION_RECORD *frame,\n                                    CONTEXT *context,\n                                    EXCEPTION_REGISTRATION_RECORD **pdispatcher )\n{\n    if (record->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND | EH_NESTED_CALL))\n        return ExceptionContinueSearch;\n    unwind_frame( record, frame );\n}\n\nDWORD __wine_finally_handler( EXCEPTION_RECORD *record,\n                              EXCEPTION_REGISTRATION_RECORD *frame,\n                              CONTEXT *context,\n                              EXCEPTION_REGISTRATION_RECORD **pdispatcher )\n{\n    if (record->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND))\n    {\n        __WINE_FRAME *wine_frame = (__WINE_FRAME *)frame;\n        wine_frame->u.finally_func( FALSE );\n    }\n    return ExceptionContinueSearch;\n}\n\nDWORD __wine_finally_ctx_handler( EXCEPTION_RECORD *record,\n                                  EXCEPTION_REGISTRATION_RECORD *frame,\n                                  CONTEXT *context,\n                                  EXCEPTION_REGISTRATION_RECORD **pdispatcher )\n{\n    if (record->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND))\n    {\n        __WINE_FRAME *wine_frame = (__WINE_FRAME *)frame;\n        wine_frame->u.finally_func_ctx( FALSE, wine_frame->ctx );\n    }\n    return ExceptionContinueSearch;\n}\n#endif\n"
  },
  {
    "path": "winecrt0/exe16_entry.c",
    "content": "/*\n * Default entry point for a 16-bit exe\n *\n * Copyright 2009 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wownt32.h\"\n#include \"wine/winbase16.h\"\n#define DECLSPEC_HIDDEN\n#include \"../krnl386/kernel16_private.h\"\n\n#ifdef __i386__\nextern WORD WINAPI WinMain16( HINSTANCE16 inst, HINSTANCE16 prev, LPSTR cmdline, WORD show );\n\nvoid WINAPI DECLSPEC_HIDDEN __wine_spec_exe16_entry( CONTEXT *context )\n{\n\tHMODULE krnl386 = LoadLibraryA(\"krnl386.exe16\");\n    PDB16 *psp;\n    WORD len;\n    LPSTR cmdline;\n\n    /*InitTask16*/((void(WINAPI*)(CONTEXT*))GetProcAddress(krnl386, \"InitTask16\"))( context );\n\n    psp = /*MapSL*/((LPVOID(WINAPI*)(DWORD))GetProcAddress(krnl386, \"MapSL\"))( WOWGlobalLock16( context->SegEs ));\n    len = psp->cmdLine[0];\n    cmdline = HeapAlloc( GetProcessHeap(), 0, len + 1 );\n    memcpy( cmdline, psp->cmdLine + 1, len );\n    cmdline[len] = 0;\n\n    SetEvent(kernel_get_thread_data()->idle_event);\n    ExitThread( WinMain16( context->Edi, context->Esi, cmdline, context->Edx ));\n}\n\n#endif  /* __i386__ */\n"
  },
  {
    "path": "winecrt0/init.c",
    "content": "/*\n * Initialization code for spec files\n *\n * Copyright 2005 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/library.h\"\n#include \"crt0_private.h\"\n\nenum init_state __wine_spec_init_state = NO_INIT_DONE;\n\nextern const IMAGE_NT_HEADERS __wine_spec_nt_header;\nextern const char __wine_spec_file_name[];\n\nvoid DECLSPEC_HIDDEN __wine_spec_init(void)\n{\n    __wine_spec_init_state = DLL_REGISTERED;\n    //__wine_dll_register( &__wine_spec_nt_header, __wine_spec_file_name );\n}\n\nvoid DECLSPEC_HIDDEN __wine_spec_init_ctor(void)\n{\n    if (__wine_spec_init_state == NO_INIT_DONE) __wine_spec_init();\n    __wine_spec_init_state = CONSTRUCTORS_DONE;\n}\n"
  },
  {
    "path": "winecrt0/stub.c",
    "content": "/*\n * Common handling of stub functions\n *\n * Copyright 2005 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <stdarg.h>\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wine/exception.h\"\n\nvoid DECLSPEC_HIDDEN __wine_spec_unimplemented_stub( const char *module, const char *function )\n{\n    ULONG_PTR args[2];\n\n    args[0] = (ULONG_PTR)module;\n    args[1] = (ULONG_PTR)function;\n    for (;;) RaiseException( EXCEPTION_WINE_STUB, EXCEPTION_NONCONTINUABLE, 2, args );\n}\n"
  },
  {
    "path": "winecrt0/winecrt0.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"dll_entry.c\" />\n    <ClCompile Include=\"exe16_entry.c\" />\n    <ClCompile Include=\"init.c\" />\n    <ClCompile Include=\"stub.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"crt0_private.h\" />\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{583655C3-2633-4597-BD31-C5AA1EC78AD2}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>winecrt0</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"Shared\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup />\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;WIN32;_WINDOWS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n    </Link>\n    <Lib>\n      <AdditionalDependencies>$(OutDir)libwine.lib</AdditionalDependencies>\n    </Lib>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;WIN32;_WINDOWS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n    </Link>\n    <Lib>\n      <AdditionalDependencies>$(OutDir)libwine.lib</AdditionalDependencies>\n    </Lib>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n    </Link>\n  </ItemDefinitionGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "winecrt0/winecrt0.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"ソース ファイル\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"ヘッダー ファイル\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"リソース ファイル\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"exe16_entry.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"init.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"stub.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"dll_entry.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"crt0_private.h\">\n      <Filter>ヘッダー ファイル</Filter>\n    </ClInclude>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "wing/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(wing SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/wing.def wing.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(wing.dll16 wing)\ntarget_link_libraries(wing libwine winecrt0 krnl386)\nset_target_properties(wing PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "wing/Makefile.in",
    "content": "MODULE    = wing.dll16\nIMPORTS   = gdi32\nEXTRADLLFLAGS = -m16\n\nC_SRCS = wing.c\n"
  },
  {
    "path": "wing/wing.c",
    "content": "/*\n * WinG support\n *\n * Copyright (C) Robert Pouliot <krynos@clic.net>\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include <stdarg.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n#include \"wownt32.h\"\n#include \"wine/wingdi16.h\"\n#include \"wine/list.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(wing);\n\nstruct dib_segptr_bits\n{\n    struct list entry;\n    HBITMAP   bmp;\n    WORD      sel;\n    WORD      count;\n    BOOL      topdown;\n};\n\nstatic struct list dib_segptr_list = LIST_INIT( dib_segptr_list );\n\n/* remove saved bits for bitmaps that no longer exist */\nstatic void cleanup_segptr_bits(void)\n{\n    unsigned int i;\n    struct dib_segptr_bits *bits, *next;\n\n    LIST_FOR_EACH_ENTRY_SAFE( bits, next, &dib_segptr_list, struct dib_segptr_bits, entry )\n    {\n        if (GetObjectType( bits->bmp ) == OBJ_BITMAP) continue;\n        for (i = 0; i < bits->count; i++) FreeSelector16( bits->sel + (i << __AHSHIFT) );\n        list_remove( &bits->entry );\n        HeapFree( GetProcessHeap(), 0, bits );\n    }\n}\n\nstatic SEGPTR alloc_segptr_bits( HBITMAP bmp, void *bits32, BOOL topdown )\n{\n    DIBSECTION dib;\n    unsigned int i, size;\n    struct dib_segptr_bits *bits;\n\n    cleanup_segptr_bits();\n\n    if (!(bits = HeapAlloc( GetProcessHeap(), 0, sizeof(*bits) ))) return 0;\n\n    GetObjectW( bmp, sizeof(dib), &dib );\n    size = dib.dsBm.bmHeight * dib.dsBm.bmWidthBytes;\n\n    /* calculate number of sel's needed for size with 64K steps */\n    bits->bmp   = bmp;\n    bits->count = (size + 0xffff) / 0x10000;\n    bits->sel   = AllocSelectorArray16( bits->count );\n    bits->topdown = topdown;\n\n    for (i = 0; i < bits->count; i++)\n    {\n        SetSelectorBase(bits->sel + (i << __AHSHIFT), (DWORD)bits32 + i * 0x10000);\n        SetSelectorLimit16(bits->sel + (i << __AHSHIFT), size - 1); /* yep, limit is correct */\n        size -= 0x10000;\n    }\n    list_add_head( &dib_segptr_list, &bits->entry );\n    return MAKESEGPTR( bits->sel, 0 );\n}\n\n/*************************************************************************\n * WING {WING}\n *\n * The Windows Game dll provides a number of functions designed to allow\n * programmers to bypass Gdi and write directly to video memory. The intention\n * was to bolster the use of Windows as a gaming platform and remove the\n * need for Dos based games using 32 bit Dos extenders.\n *\n * This initial approach could not compete with the performance of Dos games\n * (such as Doom and Warcraft) at the time, and so this dll was eventually\n * superseded by DirectX. It should not be used by new applications, and is\n * provided only for compatibility with older Windows programs.\n */\n\ntypedef enum WING_DITHER_TYPE\n{\n  WING_DISPERSED_4x4, WING_DISPERSED_8x8, WING_CLUSTERED_4x4\n} WING_DITHER_TYPE;\n\n/***********************************************************************\n *          WinGCreateDC\t(WING.1001)\n *\n * Create a new WinG device context.\n *\n * PARAMS\n *  None.\n *\n * RETURNS\n *  Success: A handle to the created device context.\n *  Failure: A NULL handle.\n */\nHDC16 WINAPI WinGCreateDC16(void)\n{\n    TRACE(\"(void)\\n\");\n    return HDC_16( CreateCompatibleDC( 0 ));\n}\n\n/***********************************************************************\n *  WinGRecommendDIBFormat    (WING.1002)\n *\n * Get the recommended format of bitmaps for the current display.\n *\n * PARAMS\n *  bmpi [O] Destination for format information\n *\n * RETURNS\n *  Success: TRUE. bmpi is filled with the best (fastest) bitmap format\n *  Failure: FALSE, if bmpi is NULL.\n */\nBOOL16 WINAPI WinGRecommendDIBFormat16(BITMAPINFO *bmpi)\n{\n    TRACE(\"(%p)\\n\", bmpi);\n\n    if (!bmpi)\n\treturn FALSE;\n\n    bmpi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\n    bmpi->bmiHeader.biWidth = 1;\n    bmpi->bmiHeader.biHeight = 1;\n    bmpi->bmiHeader.biPlanes = 1;\n    bmpi->bmiHeader.biBitCount = 8;\n    bmpi->bmiHeader.biCompression = BI_RGB;\n    bmpi->bmiHeader.biSizeImage = 0;\n    bmpi->bmiHeader.biXPelsPerMeter = 0;\n    bmpi->bmiHeader.biYPelsPerMeter = 0;\n    bmpi->bmiHeader.biClrUsed = 0;\n    bmpi->bmiHeader.biClrImportant = 0;\n\n    return TRUE;\n}\n\n/***********************************************************************\n *        WinGCreateBitmap    (WING.1003)\n *\n * Create a new WinG bitmap.\n *\n * PARAMS\n *  hdc  [I] WinG device context\n *  bmpi [I] Information about the bitmap\n *  bits [I] Location of the bitmap image data\n *\n * RETURNS\n *  Success: A handle to the created bitmap.\n *  Failure: A NULL handle.\n */\nHBITMAP16 WINAPI WinGCreateBitmap16(HDC16 hdc, BITMAPINFO *bmpi, SEGPTR *bits)\n{\n    LPVOID bits32;\n    HBITMAP hbitmap;\n    LONG oldheight = bmpi->bmiHeader.biHeight;\n    DWORD oldsize = bmpi->bmiHeader.biSizeImage;\n    bmpi->bmiHeader.biSizeImage = 0;\n\n    if (oldheight >= 32768)\n        bmpi->bmiHeader.biHeight = (INT16)(oldheight & 0xffff);\n\n    TRACE(\"(%d,%p,%p): create %dx%dx%d bitmap\\n\", hdc, bmpi, bits,\n          bmpi->bmiHeader.biWidth, bmpi->bmiHeader.biHeight, bmpi->bmiHeader.biPlanes);\n\n    hbitmap = CreateDIBSection( HDC_32(hdc), bmpi, DIB_RGB_COLORS, &bits32, 0, 0 );\n    if (hbitmap)\n    {\n        SEGPTR segptr = alloc_segptr_bits( hbitmap, bits32, (bmpi->bmiHeader.biHeight < 0) );\n        if (bits) *bits = segptr;\n    }\n    bmpi->bmiHeader.biHeight = oldheight;\n    bmpi->bmiHeader.biSizeImage = oldsize;\n    return HBITMAP_16(hbitmap);\n}\n\n/***********************************************************************\n *  WinGGetDIBPointer   (WING.1004)\n */\nSEGPTR WINAPI WinGGetDIBPointer16(HBITMAP16 hWinGBitmap, BITMAPINFO* bmpi)\n{\n    struct dib_segptr_bits *bits;\n\n    LIST_FOR_EACH_ENTRY( bits, &dib_segptr_list, struct dib_segptr_bits, entry )\n        if (HBITMAP_16(bits->bmp) == hWinGBitmap)\n        {\n            DIBSECTION dib;\n            if (bmpi && (GetObjectA(bits->bmp, sizeof(DIBSECTION), &dib) == sizeof(DIBSECTION)))\n            {\n                memcpy(bmpi, &(dib.dsBmih), sizeof(BITMAPINFOHEADER));\n                if (bits->topdown) bmpi->bmiHeader.biHeight = -bmpi->bmiHeader.biHeight;\n            }\n            return MAKESEGPTR( bits->sel, 0 );\n        }\n\n    return 0;\n}\n\n/***********************************************************************\n *  WinGSetDIBColorTable   (WING.1006)\n *\n * Set all or part of the color table for a WinG device context.\n *\n * PARAMS\n *  hdc    [I] WinG device context\n *  start  [I] Start color\n *  num    [I] Number of entries to set\n *  colors [I] Array of color data\n *\n * RETURNS\n *  The number of entries set.\n */\nUINT16 WINAPI WinGSetDIBColorTable16(HDC16 hdc, UINT16 start, UINT16 num, RGBQUAD *colors)\n{\n    TRACE(\"(%d,%d,%d,%p)\\n\", hdc, start, num, colors);\n    return SetDIBColorTable( HDC_32(hdc), start, num, colors );\n}\n\n/***********************************************************************\n *  WinGGetDIBColorTable   (WING.1005)\n *\n * Get all or part of the color table for a WinG device context.\n *\n * PARAMS\n *  hdc    [I] WinG device context\n *  start  [I] Start color\n *  num    [I] Number of entries to set\n *  colors [O] Destination for the array of color data\n *\n * RETURNS\n *  The number of entries retrieved.\n */\nUINT16 WINAPI WinGGetDIBColorTable16(HDC16 hdc, UINT16 start, UINT16 num, RGBQUAD *colors)\n{\n    TRACE(\"(%d,%d,%d,%p)\\n\", hdc, start, num, colors);\n    return GetDIBColorTable( HDC_32(hdc), start, num, colors );\n}\n\ntypedef struct {\n  WORD         palVersion;\n  WORD         palNumEntries;\n  PALETTEENTRY palPalEntry[256];\n} logpalette_8bpp;\n\nstatic const logpalette_8bpp wing_halftone_pal = {0x300, 0x100,\n{{0x00,0x00,0x00,0x04}, {0x80,0x00,0x00,0x04}, {0x00,0x80,0x00,0x04}, {0x80,0x80,0x00,0x04},\n{0x00,0x00,0x80,0x04}, {0x80,0x00,0x80,0x04}, {0x00,0x80,0x80,0x04}, {0xC0,0xC0,0xC0,0x04},\n{0xC0,0xDC,0xC0,0x04}, {0xA6,0xCA,0xF0,0x04}, {0x04,0x04,0x04,0x04}, {0x08,0x08,0x08,0x04},\n{0x0C,0x0C,0x0C,0x04}, {0x11,0x11,0x11,0x04}, {0x16,0x16,0x16,0x04}, {0x1C,0x1C,0x1C,0x04},\n{0x22,0x22,0x22,0x04}, {0x29,0x29,0x29,0x04}, {0x55,0x55,0x55,0x04}, {0x4D,0x4D,0x4D,0x04},\n{0x42,0x42,0x42,0x04}, {0x39,0x39,0x39,0x04}, {0x81,0x81,0x81,0x04}, {0x81,0x00,0x00,0x04},\n{0x00,0x81,0x00,0x04}, {0x81,0x81,0x00,0x04}, {0x00,0x00,0x81,0x04}, {0x81,0x00,0x81,0x04},\n{0x00,0x81,0x81,0x04}, {0x33,0x00,0x00,0x04}, {0x66,0x00,0x00,0x04}, {0x99,0x00,0x00,0x04},\n{0xCC,0x00,0x00,0x04}, {0x00,0x33,0x00,0x04}, {0x33,0x33,0x00,0x04}, {0x66,0x33,0x00,0x04},\n{0x99,0x33,0x00,0x04}, {0xCC,0x33,0x00,0x04}, {0xFF,0x33,0x00,0x04}, {0x00,0x66,0x00,0x04},\n{0x33,0x66,0x00,0x04}, {0x66,0x66,0x00,0x04}, {0x99,0x66,0x00,0x04}, {0xCC,0x66,0x00,0x04},\n{0xFF,0x66,0x00,0x04}, {0x00,0x99,0x00,0x04}, {0x33,0x99,0x00,0x04}, {0x66,0x99,0x00,0x04},\n{0x99,0x99,0x00,0x04}, {0xCC,0x99,0x00,0x04}, {0xFF,0x99,0x00,0x04}, {0x00,0xCC,0x00,0x04},\n{0x33,0xCC,0x00,0x04}, {0x66,0xCC,0x00,0x04}, {0x99,0xCC,0x00,0x04}, {0xCC,0xCC,0x00,0x04},\n{0xFF,0xCC,0x00,0x04}, {0x66,0xFF,0x00,0x04}, {0x99,0xFF,0x00,0x04}, {0xCC,0xFF,0x00,0x04},\n{0x00,0x00,0x33,0x04}, {0x33,0x00,0x33,0x04}, {0x66,0x00,0x33,0x04}, {0x99,0x00,0x33,0x04},\n{0xCC,0x00,0x33,0x04}, {0xFF,0x00,0x33,0x04}, {0x00,0x33,0x33,0x04}, {0x33,0x33,0x33,0x04},\n{0x66,0x33,0x33,0x04}, {0x99,0x33,0x33,0x04}, {0xCC,0x33,0x33,0x04}, {0xFF,0x33,0x33,0x04},\n{0x00,0x66,0x33,0x04}, {0x33,0x66,0x33,0x04}, {0x66,0x66,0x33,0x04}, {0x99,0x66,0x33,0x04},\n{0xCC,0x66,0x33,0x04}, {0xFF,0x66,0x33,0x04}, {0x00,0x99,0x33,0x04}, {0x33,0x99,0x33,0x04},\n{0x66,0x99,0x33,0x04}, {0x99,0x99,0x33,0x04}, {0xCC,0x99,0x33,0x04}, {0xFF,0x99,0x33,0x04},\n{0x00,0xCC,0x33,0x04}, {0x33,0xCC,0x33,0x04}, {0x66,0xCC,0x33,0x04}, {0x99,0xCC,0x33,0x04},\n{0xCC,0xCC,0x33,0x04}, {0xFF,0xCC,0x33,0x04}, {0x33,0xFF,0x33,0x04}, {0x66,0xFF,0x33,0x04},\n{0x99,0xFF,0x33,0x04}, {0xCC,0xFF,0x33,0x04}, {0xFF,0xFF,0x33,0x04}, {0x00,0x00,0x66,0x04},\n{0x33,0x00,0x66,0x04}, {0x66,0x00,0x66,0x04}, {0x99,0x00,0x66,0x04}, {0xCC,0x00,0x66,0x04},\n{0xFF,0x00,0x66,0x04}, {0x00,0x33,0x66,0x04}, {0x33,0x33,0x66,0x04}, {0x66,0x33,0x66,0x04},\n{0x99,0x33,0x66,0x04}, {0xCC,0x33,0x66,0x04}, {0xFF,0x33,0x66,0x04}, {0x00,0x66,0x66,0x04},\n{0x33,0x66,0x66,0x04}, {0x66,0x66,0x66,0x04}, {0x99,0x66,0x66,0x04}, {0xCC,0x66,0x66,0x04},\n{0x00,0x99,0x66,0x04}, {0x33,0x99,0x66,0x04}, {0x66,0x99,0x66,0x04}, {0x99,0x99,0x66,0x04},\n{0xCC,0x99,0x66,0x04}, {0xFF,0x99,0x66,0x04}, {0x00,0xCC,0x66,0x04}, {0x33,0xCC,0x66,0x04},\n{0x99,0xCC,0x66,0x04}, {0xCC,0xCC,0x66,0x04}, {0xFF,0xCC,0x66,0x04}, {0x00,0xFF,0x66,0x04},\n{0x33,0xFF,0x66,0x04}, {0x99,0xFF,0x66,0x04}, {0xCC,0xFF,0x66,0x04}, {0xFF,0x00,0xCC,0x04},\n{0xCC,0x00,0xFF,0x04}, {0x00,0x99,0x99,0x04}, {0x99,0x33,0x99,0x04}, {0x99,0x00,0x99,0x04},\n{0xCC,0x00,0x99,0x04}, {0x00,0x00,0x99,0x04}, {0x33,0x33,0x99,0x04}, {0x66,0x00,0x99,0x04},\n{0xCC,0x33,0x99,0x04}, {0xFF,0x00,0x99,0x04}, {0x00,0x66,0x99,0x04}, {0x33,0x66,0x99,0x04},\n{0x66,0x33,0x99,0x04}, {0x99,0x66,0x99,0x04}, {0xCC,0x66,0x99,0x04}, {0xFF,0x33,0x99,0x04},\n{0x33,0x99,0x99,0x04}, {0x66,0x99,0x99,0x04}, {0x99,0x99,0x99,0x04}, {0xCC,0x99,0x99,0x04},\n{0xFF,0x99,0x99,0x04}, {0x00,0xCC,0x99,0x04}, {0x33,0xCC,0x99,0x04}, {0x66,0xCC,0x66,0x04},\n{0x99,0xCC,0x99,0x04}, {0xCC,0xCC,0x99,0x04}, {0xFF,0xCC,0x99,0x04}, {0x00,0xFF,0x99,0x04},\n{0x33,0xFF,0x99,0x04}, {0x66,0xCC,0x99,0x04}, {0x99,0xFF,0x99,0x04}, {0xCC,0xFF,0x99,0x04},\n{0xFF,0xFF,0x99,0x04}, {0x00,0x00,0xCC,0x04}, {0x33,0x00,0x99,0x04}, {0x66,0x00,0xCC,0x04},\n{0x99,0x00,0xCC,0x04}, {0xCC,0x00,0xCC,0x04}, {0x00,0x33,0x99,0x04}, {0x33,0x33,0xCC,0x04},\n{0x66,0x33,0xCC,0x04}, {0x99,0x33,0xCC,0x04}, {0xCC,0x33,0xCC,0x04}, {0xFF,0x33,0xCC,0x04},\n{0x00,0x66,0xCC,0x04}, {0x33,0x66,0xCC,0x04}, {0x66,0x66,0x99,0x04}, {0x99,0x66,0xCC,0x04},\n{0xCC,0x66,0xCC,0x04}, {0xFF,0x66,0x99,0x04}, {0x00,0x99,0xCC,0x04}, {0x33,0x99,0xCC,0x04},\n{0x66,0x99,0xCC,0x04}, {0x99,0x99,0xCC,0x04}, {0xCC,0x99,0xCC,0x04}, {0xFF,0x99,0xCC,0x04},\n{0x00,0xCC,0xCC,0x04}, {0x33,0xCC,0xCC,0x04}, {0x66,0xCC,0xCC,0x04}, {0x99,0xCC,0xCC,0x04},\n{0xCC,0xCC,0xCC,0x04}, {0xFF,0xCC,0xCC,0x04}, {0x00,0xFF,0xCC,0x04}, {0x33,0xFF,0xCC,0x04},\n{0x66,0xFF,0x99,0x04}, {0x99,0xFF,0xCC,0x04}, {0xCC,0xFF,0xCC,0x04}, {0xFF,0xFF,0xCC,0x04},\n{0x33,0x00,0xCC,0x04}, {0x66,0x00,0xFF,0x04}, {0x99,0x00,0xFF,0x04}, {0x00,0x33,0xCC,0x04},\n{0x33,0x33,0xFF,0x04}, {0x66,0x33,0xFF,0x04}, {0x99,0x33,0xFF,0x04}, {0xCC,0x33,0xFF,0x04},\n{0xFF,0x33,0xFF,0x04}, {0x00,0x66,0xFF,0x04}, {0x33,0x66,0xFF,0x04}, {0x66,0x66,0xCC,0x04},\n{0x99,0x66,0xFF,0x04}, {0xCC,0x66,0xFF,0x04}, {0xFF,0x66,0xCC,0x04}, {0x00,0x99,0xFF,0x04},\n{0x33,0x99,0xFF,0x04}, {0x66,0x99,0xFF,0x04}, {0x99,0x99,0xFF,0x04}, {0xCC,0x99,0xFF,0x04},\n{0xFF,0x99,0xFF,0x04}, {0x00,0xCC,0xFF,0x04}, {0x33,0xCC,0xFF,0x04}, {0x66,0xCC,0xFF,0x04},\n{0x99,0xCC,0xFF,0x04}, {0xCC,0xCC,0xFF,0x04}, {0xFF,0xCC,0xFF,0x04}, {0x33,0xFF,0xFF,0x04},\n{0x66,0xFF,0xCC,0x04}, {0x99,0xFF,0xFF,0x04}, {0xCC,0xFF,0xFF,0x04}, {0xFF,0x66,0x66,0x04},\n{0x66,0xFF,0x66,0x04}, {0xFF,0xFF,0x66,0x04}, {0x66,0x66,0xFF,0x04}, {0xFF,0x66,0xFF,0x04},\n{0x66,0xFF,0xFF,0x04}, {0xC1,0xC1,0xC1,0x04}, {0x5F,0x5F,0x5F,0x04}, {0x77,0x77,0x77,0x04},\n{0x86,0x86,0x86,0x04}, {0x96,0x96,0x96,0x04}, {0xCB,0xCB,0xCB,0x04}, {0xB2,0xB2,0xB2,0x04},\n{0xD7,0xD7,0xD7,0x04}, {0xDD,0xDD,0xDD,0x04}, {0xE3,0xE3,0xE3,0x04}, {0xEA,0xEA,0xEA,0x04},\n{0xF1,0xF1,0xF1,0x04}, {0xF8,0xF8,0xF8,0x04}, {0xFF,0xFB,0xF0,0x04}, {0xA0,0xA0,0xA4,0x04},\n{0x80,0x80,0x80,0x04}, {0xFF,0x00,0x00,0x04}, {0x00,0xFF,0x00,0x04}, {0xFF,0xFF,0x00,0x04},\n{0x00,0x00,0xFF,0x04}, {0xFF,0x00,0xFF,0x04}, {0x00,0xFF,0xFF,0x04}, {0xFF,0xFF,0xFF,0x04}}};\n\n/***********************************************************************\n *  WinGCreateHalfTonePalette   (WING.1007)\n *\n * Create a half tone palette.\n *\n * PARAMS\n *  None.\n *\n * RETURNS\n *  Success: A handle to the created palette.\n *  Failure: A NULL handle.\n */\nHPALETTE16 WINAPI WinGCreateHalfTonePalette16(void)\n{\n    HPALETTE16 ret = HPALETTE_16( CreatePalette( (const LOGPALETTE *)&wing_halftone_pal ));\n    TRACE(\"(void)\\n\");\n    return ret;\n}\n\n/***********************************************************************\n *  WinGCreateHalfToneBrush   (WING.1008)\n *\n * Create a half tone brush for a WinG device context.\n *\n * PARAMS\n *  winDC [I] WinG device context\n *  col   [I] Color\n *  type  [I] Desired dithering type.\n *\n * RETURNS\n *  Success: A handle to the created brush.\n *  Failure: A NULL handle.\n */\nHBRUSH16 WINAPI WinGCreateHalfToneBrush16(HDC16 winDC, COLORREF col,\n                                            WING_DITHER_TYPE type)\n{\n    TRACE(\"(%d,%d,%d)\\n\", winDC, col, type);\n    return HBRUSH_16( CreateSolidBrush( col ));\n}\n\n/***********************************************************************\n *  WinGStretchBlt   (WING.1009)\n *\n * See StretchBlt16.\n */\nBOOL16 WINAPI WinGStretchBlt16(HDC16 destDC, INT16 xDest, INT16 yDest,\n                               INT16 widDest, INT16 heiDest,\n                               HDC16 srcDC, INT16 xSrc, INT16 ySrc,\n                               INT16 widSrc, INT16 heiSrc)\n{\n    BOOL retval;\n    TRACE(\"(%d,%d,...)\\n\", destDC, srcDC);\n    SetStretchBltMode( HDC_32(destDC), COLORONCOLOR );\n    retval = StretchBlt( HDC_32(destDC), xDest, yDest, widDest, heiDest,\n                         HDC_32(srcDC), xSrc, ySrc, widSrc, heiSrc, SRCCOPY );\n    SetStretchBltMode( HDC_32(destDC), BLACKONWHITE );\n    return retval;\n}\n\n/***********************************************************************\n *  WinGBitBlt   (WING.1010)\n *\n * See BitBlt16.\n */\nBOOL16 WINAPI WinGBitBlt16(HDC16 destDC, INT16 xDest, INT16 yDest,\n                           INT16 widDest, INT16 heiDest, HDC16 srcDC,\n                           INT16 xSrc, INT16 ySrc)\n{\n    TRACE(\"(%d,%d,...)\\n\", destDC, srcDC);\n    return BitBlt( HDC_32(destDC), xDest, yDest, widDest, heiDest, HDC_32(srcDC), xSrc, ySrc, SRCCOPY );\n}\n"
  },
  {
    "path": "wing/wing.def",
    "content": "; File generated automatically from wing.dll16.spec; do not edit!\n\nLIBRARY wing.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "wing/wing.dll16.spec",
    "content": "1001 pascal -ret16 WinGCreateDC() WinGCreateDC16\n1002 pascal -ret16 WinGRecommendDIBFormat(ptr) WinGRecommendDIBFormat16\n1003 pascal -ret16 WinGCreateBitmap(word ptr ptr) WinGCreateBitmap16\n1004 pascal WinGGetDIBPointer(word ptr) WinGGetDIBPointer16\n1005 pascal -ret16 WinGGetDIBColorTable(word word word ptr) WinGGetDIBColorTable16\n1006 pascal -ret16 WinGSetDIBColorTable(word word word ptr) WinGSetDIBColorTable16\n1007 pascal -ret16 WinGCreateHalfTonePalette() WinGCreateHalfTonePalette16\n1008 pascal -ret16 WinGCreateHalfToneBrush(word word word) WinGCreateHalfToneBrush16\n1009 pascal -ret16 WinGStretchBlt(word word word word word word word word word word) WinGStretchBlt16\n1010 pascal -ret16 WinGBitBlt(word word word word word word word word) WinGBitBlt16\n\n# Seem that 1299 is the limit... weird...\n#1500 stub WINGINITIALIZETHUNK16\n#1501 stub WINGTHUNK16\n\n#2000 stub REGISTERWINGPAL\n#2001 stub EXCEPTIONHANDLER\n"
  },
  {
    "path": "wing/wing.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>wing</RootNamespace>\n    <ProjectGuid>{90402A90-8D53-4843-BF11-7AE93361ED13}</ProjectGuid>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\ngdi32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\nwing.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\nwing.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\ngdi32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"wing.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"wing.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"wing.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" WING &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" WING &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"wing.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "winhlp32/CMakeLists.txt",
    "content": "include_directories(../wine ./)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -DPSAPI_VERSION=1)\nflex_target(winhlp_scanner macro.lex.l ${CMAKE_CURRENT_BINARY_DIR}/lex.yy.c COMPILE_FLAGS)\nadd_executable(winhlp32 WIN32 callback.c hlpfile.c macro.c string.c winhelp.c winhlp32.rc ${FLEX_winhlp_scanner_OUTPUTS})\ntarget_link_libraries(winhlp32 libwine comctl32.lib psapi.lib)\n"
  },
  {
    "path": "winhlp32/Makefile.in",
    "content": "MODULE    = winhlp32.exe\nAPPMODE   = -mwindows\nIMPORTS   = user32 gdi32\nDELAYIMPORTS = shell32 comctl32 comdlg32\n\nC_SRCS = \\\n\tcallback.c \\\n\thlpfile.c \\\n\tmacro.c \\\n\tstring.c \\\n\twinhelp.c\n\nLEX_SRCS = macro.lex.l\n\nRC_SRCS = winhlp32.rc\n\nSVG_SRCS = winhelp.svg\n"
  },
  {
    "path": "winhlp32/callback.c",
    "content": "/*\n * Help Viewer - DLL callback into WineHelp\n *\n * Copyright 2004 Eric Pouech\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#define WIN32_LEAN_AND_MEAN\n\n#include <stdio.h>\n\n#include \"windows.h\"\n#include \"winhelp.h\"\n\n#ifdef _DEBUG\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(winhelp);\n#else\n#define WINE_TRACE(...)\n#define WINE_WARN(...)\n#define WINE_FIXME(...)\n#define WINE_ERR(...)\n#define debugstr_a(...)\n#endif\n\nstatic WORD CALLBACK WHD_GetFSError(void)\n{\n    WINE_FIXME(\"()\\n\");\n    return 0;\n}\n\nstatic HANDLE CALLBACK WHD_Open(LPSTR name, BYTE flags)\n{\n    unsigned    mode = 0;\n\n    WINE_FIXME(\"(%s %x)\\n\", debugstr_a(name), flags);\n    switch (flags)\n    {\n    case 0: mode = GENERIC_READ | GENERIC_WRITE; break;\n    case 2: mode = GENERIC_READ; break;\n    default: WINE_FIXME(\"Undocumented flags %x\\n\", flags);\n    }\n    return CreateFileA(name, mode, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,\n                      OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);\n}\n\nstatic WORD CALLBACK WHD_Close(HANDLE fs)\n{\n    WINE_FIXME(\"(%p)\\n\", fs);\n    CloseHandle(fs);\n    return 0;\n}\n\nstatic HANDLE CALLBACK WHD_OpenBag(HANDLE fs, LPSTR name, BYTE flags)\n{\n    WINE_FIXME(\"(%p %s %x)\\n\", fs, debugstr_a(name), flags);\n    return NULL;\n}\n\nstatic HANDLE CALLBACK WHD_CloseBag(HANDLE bag)\n{\n    WINE_FIXME(\"()\\n\");\n    return NULL;\n}\n\nstatic LONG CALLBACK WHD_ReadBag(HANDLE bag, BYTE* ptr, LONG len)\n{\n    WINE_FIXME(\"()\\n\");\n    return 0;\n}\n\nstatic LONG CALLBACK WHD_TellBag(HANDLE bag)\n{\n    WINE_FIXME(\"()\\n\");\n    return 0;\n}\n\nstatic LONG CALLBACK WHD_SeekBag(HANDLE bag, LONG offset, WORD whence)\n{\n    WINE_FIXME(\"()\\n\");\n    return 0;\n}\n\nstatic BOOL CALLBACK WHD_IsEofBag(HANDLE bag)\n{\n    WINE_FIXME(\"()\\n\");\n    return FALSE;\n}\n\nstatic LONG CALLBACK WHD_SizeBag(HANDLE bag)\n{\n    WINE_FIXME(\"()\\n\");\n    return 0;\n}\n\nstatic BOOL CALLBACK WHD_Access(HANDLE fs, LPSTR name, BYTE flags)\n{\n    WINE_FIXME(\"()\\n\");\n    return FALSE;\n}\n\nstatic WORD CALLBACK WHD_LLInfoFromBag(HANDLE bag, WORD opt, LPWORD p1, LPLONG p2, LPLONG p3)\n{\n    WINE_FIXME(\"()\\n\");\n    return 0;\n}\n\nstatic WORD CALLBACK WHD_LLInfoFromFile(HANDLE fs, LPSTR name, WORD opt, LPWORD p1, LPLONG p2, LPLONG p3)\n{\n    WINE_FIXME(\"()\\n\");\n    return 0;\n}\n\nstatic void CALLBACK WHD_Error(int err)\n{\n    WINE_FIXME(\"()\\n\");\n}\n\nstatic void CALLBACK WHD_ErrorString(LPSTR err)\n{\n    WINE_FIXME(\"()\\n\");\n}\n\nstatic ULONG_PTR CALLBACK WHD_GetInfo(WORD what, HWND hnd)\n{\n    ULONG_PTR ret = 0;\n\n    WINE_TRACE(\"(%x %p)\\n\", what, hnd);\n    switch (what)\n    {\n    case 0: break;\n    case 1: /* instance */ ret = (ULONG_PTR)Globals.hInstance; break;\n    case 3: /* current window */ ret = (ULONG_PTR)Globals.active_win->hMainWnd; break;\n    case 2: /* main window */\n    case 4: /* handle to opened file */\n    case 5: /* foreground color */\n    case 6: /* background color */\n    case 7: /* topic number */\n    case 8: /* current opened file name */\n        WINE_FIXME(\"NIY %u\\n\", what);\n        break;\n    default:\n        WINE_FIXME(\"Undocumented %u\\n\", what);\n        break;\n    }\n    return ret;\n}\n\nstatic LONG CALLBACK WHD_API(LPSTR x, WORD xx, DWORD xxx)\n{\n    WINE_FIXME(\"()\\n\");\n    return 0;\n}\n\nconst struct winhelp_callbacks Callbacks =\n{\n    WHD_GetFSError,\n    WHD_Open,\n    WHD_Close,\n    WHD_OpenBag,\n    WHD_CloseBag,\n    WHD_ReadBag,\n    WHD_TellBag,\n    WHD_SeekBag,\n    WHD_IsEofBag,\n    WHD_SizeBag,\n    WHD_Access,\n    WHD_LLInfoFromBag,\n    WHD_LLInfoFromFile,\n    WHD_Error,\n    WHD_ErrorString,\n    WHD_GetInfo,\n    WHD_API\n};\n"
  },
  {
    "path": "winhlp32/hlpfile.c",
    "content": "/*\n * Help Viewer\n *\n * Copyright    1996 Ulrich Schmid\n *              2002, 2008 Eric Pouech\n *              2007 Kirill K. Smirnov\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n#include <stdio.h>\n#include <string.h>\n\n#include \"windows.h\"\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n#include \"winhelp.h\"\n\n#ifdef _DEBUG\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(winhelp);\n#else\n#define WINE_TRACE(...)\n#define WINE_WARN(...)\n#define WINE_FIXME(...)\n#define WINE_ERR(...)\n#define debugstr_a(...)\n#endif\n\nstatic inline unsigned short GET_USHORT(const BYTE* buffer, unsigned i)\n{\n    return (BYTE)buffer[i] + 0x100 * (BYTE)buffer[i + 1];\n}\n\nstatic inline short GET_SHORT(const BYTE* buffer, unsigned i)\n{\n    return (BYTE)buffer[i] + 0x100 * (signed char)buffer[i+1];\n}\n\nstatic inline unsigned GET_UINT(const BYTE* buffer, unsigned i)\n{\n    return GET_USHORT(buffer, i) + 0x10000 * GET_USHORT(buffer, i + 2);\n}\n\nstatic HLPFILE *first_hlpfile = 0;\n\n\n/**************************************************************************\n * HLPFILE_BPTreeSearch\n *\n * Searches for an element in B+ tree\n *\n * PARAMS\n *     buf        [I] pointer to the embedded file structured as a B+ tree\n *     key        [I] pointer to data to find\n *     comp       [I] compare function\n *\n * RETURNS\n *     Pointer to block identified by key, or NULL if failure.\n *\n */\nvoid* HLPFILE_BPTreeSearch(BYTE* buf, const void* key,\n                           HLPFILE_BPTreeCompare comp)\n{\n    unsigned magic;\n    unsigned page_size;\n    unsigned cur_page;\n    unsigned level;\n    BYTE *pages, *ptr, *newptr;\n    int i, entries;\n    int ret;\n\n    magic = GET_USHORT(buf, 9);\n    if (magic != 0x293B)\n    {\n        WINE_ERR(\"Invalid magic in B+ tree: 0x%x\\n\", magic);\n        return NULL;\n    }\n    page_size = GET_USHORT(buf, 9+4);\n    cur_page  = GET_USHORT(buf, 9+26);\n    level     = GET_USHORT(buf, 9+32);\n    pages     = buf + 9 + 38;\n    while (--level > 0)\n    {\n        ptr = pages + cur_page*page_size;\n        entries = GET_SHORT(ptr, 2);\n        ptr += 6;\n        for (i = 0; i < entries; i++)\n        {\n            if (comp(ptr, key, 0, (void **)&newptr) > 0) break;\n            ptr = newptr;\n        }\n        cur_page = GET_USHORT(ptr-2, 0);\n    }\n    ptr = pages + cur_page*page_size;\n    entries = GET_SHORT(ptr, 2);\n    ptr += 8;\n    for (i = 0; i < entries; i++)\n    {\n        ret = comp(ptr, key, 1, (void **)&newptr);\n        if (ret == 0) return ptr;\n        if (ret > 0) return NULL;\n        ptr = newptr;\n    }\n    return NULL;\n}\n\n/**************************************************************************\n * HLPFILE_BPTreeEnum\n *\n * Enumerates elements in B+ tree.\n *\n * PARAMS\n *     buf        [I]  pointer to the embedded file structured as a B+ tree\n *     cb         [I]  compare function\n *     cookie     [IO] cookie for cb function\n */\nvoid HLPFILE_BPTreeEnum(BYTE* buf, HLPFILE_BPTreeCallback cb, void* cookie)\n{\n    unsigned magic;\n    unsigned page_size;\n    unsigned cur_page;\n    unsigned level;\n    BYTE *pages, *ptr, *newptr;\n    int i, entries;\n\n    magic = GET_USHORT(buf, 9);\n    if (magic != 0x293B)\n    {\n        WINE_ERR(\"Invalid magic in B+ tree: 0x%x\\n\", magic);\n        return;\n    }\n    page_size = GET_USHORT(buf, 9+4);\n    cur_page  = GET_USHORT(buf, 9+26);\n    level     = GET_USHORT(buf, 9+32);\n    pages     = buf + 9 + 38;\n    while (--level > 0)\n    {\n        ptr = pages + cur_page*page_size;\n        cur_page = GET_USHORT(ptr, 4);\n    }\n    while (cur_page != 0xFFFF)\n    {\n        ptr = pages + cur_page*page_size;\n        entries = GET_SHORT(ptr, 2);\n        ptr += 8;\n        for (i = 0; i < entries; i++)\n        {\n            cb(ptr, (void **)&newptr, cookie);\n            ptr = newptr;\n        }\n        cur_page = GET_USHORT(pages+cur_page*page_size, 6);\n    }\n}\n\n\n/***********************************************************************\n *\n *           HLPFILE_UncompressedLZ77_Size\n */\nstatic INT HLPFILE_UncompressedLZ77_Size(const BYTE *ptr, const BYTE *end)\n{\n    int  i, newsize = 0;\n\n    while (ptr < end)\n    {\n        int mask = *ptr++;\n        for (i = 0; i < 8 && ptr < end; i++, mask >>= 1)\n\t{\n            if (mask & 1)\n\t    {\n                int code = GET_USHORT(ptr, 0);\n                int len  = 3 + (code >> 12);\n                newsize += len;\n                ptr     += 2;\n\t    }\n            else newsize++, ptr++;\n\t}\n    }\n\n    return newsize;\n}\n\n/***********************************************************************\n *\n *           HLPFILE_UncompressLZ77\n */\nstatic BYTE *HLPFILE_UncompressLZ77(const BYTE *ptr, const BYTE *end, BYTE *newptr)\n{\n    int i;\n\n    while (ptr < end)\n    {\n        int mask = *ptr++;\n        for (i = 0; i < 8 && ptr < end; i++, mask >>= 1)\n\t{\n            if (mask & 1)\n\t    {\n                int code   = GET_USHORT(ptr, 0);\n                int len    = 3 + (code >> 12);\n                int offset = code & 0xfff;\n                /*\n                 * We must copy byte-by-byte here. We cannot use memcpy nor\n                 * memmove here. Just example:\n                 * a[]={1,2,3,4,5,6,7,8,9,10}\n                 * newptr=a+2;\n                 * offset=1;\n                 * We expect:\n                 * {1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 11, 12}\n                 */\n                for (; len>0; len--, newptr++) *newptr = *(newptr-offset-1);\n                ptr    += 2;\n\t    }\n            else *newptr++ = *ptr++;\n\t}\n    }\n\n    return newptr;\n}\n\n/***********************************************************************\n *\n *           HLPFILE_Uncompress2\n */\n\nstatic void HLPFILE_Uncompress2(HLPFILE* hlpfile, const BYTE *ptr, const BYTE *end, BYTE *newptr, const BYTE *newend)\n{\n    BYTE *phptr, *phend;\n    UINT code;\n    UINT index;\n\n    while (ptr < end && newptr < newend)\n    {\n        if (!*ptr || *ptr >= 0x10)\n            *newptr++ = *ptr++;\n        else\n\t{\n            code  = 0x100 * ptr[0] + ptr[1];\n            index = (code - 0x100) / 2;\n\n            phptr = (BYTE*)hlpfile->phrases_buffer + hlpfile->phrases_offsets[index];\n            phend = (BYTE*)hlpfile->phrases_buffer + hlpfile->phrases_offsets[index + 1];\n\n            if (newptr + (phend - phptr) > newend)\n            {\n                WINE_FIXME(\"buffer overflow %p > %p for %lu bytes\\n\",\n                           newptr, newend, (SIZE_T)(phend - phptr));\n                return;\n            }\n            memcpy(newptr, phptr, phend - phptr);\n            newptr += phend - phptr;\n            if (code & 1) *newptr++ = ' ';\n\n            ptr += 2;\n\t}\n    }\n    if (newptr > newend) WINE_FIXME(\"buffer overflow %p > %p\\n\", newptr, newend);\n}\n\n/******************************************************************\n *\t\tHLPFILE_Uncompress3\n *\n *\n */\nstatic BOOL HLPFILE_Uncompress3(HLPFILE* hlpfile, char* dst, const char* dst_end,\n                                const BYTE* src, const BYTE* src_end)\n{\n    unsigned int idx, len;\n\n    for (; src < src_end; src++)\n    {\n        if ((*src & 1) == 0)\n        {\n            idx = *src / 2;\n            if (idx > hlpfile->num_phrases)\n            {\n                WINE_ERR(\"index in phrases %d/%d\\n\", idx, hlpfile->num_phrases);\n                len = 0;\n            }\n            else\n            {\n                len = hlpfile->phrases_offsets[idx + 1] - hlpfile->phrases_offsets[idx];\n                if (dst + len <= dst_end)\n                    memcpy(dst, &hlpfile->phrases_buffer[hlpfile->phrases_offsets[idx]], len);\n            }\n        }\n        else if ((*src & 0x03) == 0x01)\n        {\n            idx = (*src + 1) * 64;\n            idx += *++src;\n            if (idx > hlpfile->num_phrases)\n            {\n                WINE_ERR(\"index in phrases %d/%d\\n\", idx, hlpfile->num_phrases);\n                len = 0;\n            }\n            else\n            {\n                len = hlpfile->phrases_offsets[idx + 1] - hlpfile->phrases_offsets[idx];\n                if (dst + len <= dst_end)\n                    memcpy(dst, &hlpfile->phrases_buffer[hlpfile->phrases_offsets[idx]], len);\n            }\n        }\n        else if ((*src & 0x07) == 0x03)\n        {\n            len = (*src / 8) + 1;\n            if (dst + len <= dst_end)\n                memcpy(dst, src + 1, len);\n            src += len;\n        }\n        else\n        {\n            len = (*src / 16) + 1;\n            if (dst + len <= dst_end)\n                memset(dst, ((*src & 0x0F) == 0x07) ? ' ' : 0, len);\n        }\n        dst += len;\n    }\n\n    if (dst > dst_end) WINE_ERR(\"buffer overflow (%p > %p)\\n\", dst, dst_end);\n    return TRUE;\n}\n\n/******************************************************************\n *\t\tHLPFILE_UncompressRLE\n *\n *\n */\nstatic void HLPFILE_UncompressRLE(const BYTE* src, const BYTE* end, BYTE* dst, unsigned dstsz)\n{\n    BYTE        ch;\n    BYTE*       sdst = dst + dstsz;\n\n    while (src < end)\n    {\n        ch = *src++;\n        if (ch & 0x80)\n        {\n            ch &= 0x7F;\n            if (dst + ch <= sdst)\n                memcpy(dst, src, ch);\n            src += ch;\n        }\n        else\n        {\n            if (dst + ch <= sdst)\n                memset(dst, (char)*src, ch);\n            src++;\n        }\n        dst += ch;\n    }\n    if (dst != sdst)\n        WINE_WARN(\"Buffer X-flow: d(%lu) instead of d(%u)\\n\",\n                  (SIZE_T)(dst - (sdst - dstsz)), dstsz);\n}\n\n\n/******************************************************************\n *\t\tHLPFILE_PageByOffset\n *\n *\n */\nHLPFILE_PAGE *HLPFILE_PageByOffset(HLPFILE* hlpfile, LONG offset, ULONG* relative)\n{\n    HLPFILE_PAGE*       page;\n    HLPFILE_PAGE*       found;\n\n    if (!hlpfile) return 0;\n\n    WINE_TRACE(\"<%s>[%x]\\n\", debugstr_a(hlpfile->lpszPath), offset);\n\n    if (offset == 0xFFFFFFFF) return NULL;\n    page = NULL;\n\n    for (found = NULL, page = hlpfile->first_page; page; page = page->next)\n    {\n        if (page->offset <= offset && (!found || found->offset < page->offset))\n        {\n            *relative = offset;\n            found = page;\n        }\n    }\n    if (!found)\n        WINE_ERR(\"Page of offset %u not found in file %s\\n\",\n                 offset, debugstr_a(hlpfile->lpszPath));\n    return found;\n}\n\n/***********************************************************************\n *\n *           HLPFILE_Contents\n */\nstatic HLPFILE_PAGE* HLPFILE_Contents(HLPFILE *hlpfile, ULONG* relative)\n{\n    HLPFILE_PAGE*       page = NULL;\n    *relative = 0;\n\n    if (!hlpfile) return NULL;\n    \n    if (hlpfile->cnt_page)\n        page = hlpfile->cnt_page;\n    else if (hlpfile->version <= 16)\n        page = HLPFILE_PageByOffset(hlpfile, hlpfile->TOMap[0], relative);\n    else\n        page = HLPFILE_PageByOffset(hlpfile, hlpfile->contents_start, relative);\n    if (!page)\n        page = hlpfile->first_page;\n    return page;\n}\n\n/**************************************************************************\n * comp_PageByHash\n *\n * HLPFILE_BPTreeCompare function for '|CONTEXT' B+ tree file\n *\n */\nstatic int comp_PageByHash(void *p, const void *key,\n                           int leaf, void** next)\n{\n    LONG lKey = (LONG_PTR)key;\n    LONG lTest = (INT)GET_UINT(p, 0);\n\n    *next = (char *)p+(leaf?8:6);\n    WINE_TRACE(\"Comparing '%d' with '%d'\\n\", lKey, lTest);\n    if (lTest < lKey) return -1;\n    if (lTest > lKey) return 1;\n    return 0;\n}\n\n/***********************************************************************\n *\n *           HLPFILE_PageByHash\n */\nHLPFILE_PAGE *HLPFILE_PageByHash(HLPFILE* hlpfile, LONG lHash, ULONG* relative)\n{\n    BYTE *ptr;\n\n    if (!hlpfile) return NULL;\n    if (!lHash) return HLPFILE_Contents(hlpfile, relative);\n\n    WINE_TRACE(\"<%s>[%x]\\n\", debugstr_a(hlpfile->lpszPath), lHash);\n\n    /* For win 3.0 files hash values are really page numbers */\n    if (hlpfile->version <= 16)\n    {\n        if (lHash >= hlpfile->wTOMapLen) return NULL;\n        return HLPFILE_PageByOffset(hlpfile, hlpfile->TOMap[lHash], relative);\n    }\n\n    ptr = HLPFILE_BPTreeSearch(hlpfile->Context, LongToPtr(lHash), comp_PageByHash);\n    if (!ptr)\n    {\n        WINE_ERR(\"Page of hash %x not found in file %s\\n\", lHash, debugstr_a(hlpfile->lpszPath));\n        return NULL;\n    }\n\n    return HLPFILE_PageByOffset(hlpfile, GET_UINT(ptr, 4), relative);\n}\n\n/***********************************************************************\n *\n *           HLPFILE_PageByMap\n */\nHLPFILE_PAGE *HLPFILE_PageByMap(HLPFILE* hlpfile, LONG lMap, ULONG* relative)\n{\n    unsigned int i;\n\n    if (!hlpfile) return 0;\n\n    WINE_TRACE(\"<%s>[%x]\\n\", debugstr_a(hlpfile->lpszPath), lMap);\n\n    for (i = 0; i < hlpfile->wMapLen; i++)\n    {\n        if (hlpfile->Map[i].lMap == lMap)\n            return HLPFILE_PageByOffset(hlpfile, hlpfile->Map[i].offset, relative);\n    }\n\n    WINE_ERR(\"Page of Map %x not found in file %s\\n\", lMap, debugstr_a(hlpfile->lpszPath));\n    return NULL;\n}\n\n/**************************************************************************\n * comp_FindSubFile\n *\n * HLPFILE_BPTreeCompare function for HLPFILE directory.\n *\n */\nstatic int comp_FindSubFile(void *p, const void *key,\n                            int leaf, void** next)\n{\n    *next = (char *)p+strlen(p)+(leaf?5:3);\n    WINE_TRACE(\"Comparing %s with %s\\n\", debugstr_a((char *)p), debugstr_a((const char *)key));\n    return strcmp(p, key);\n}\n\n/***********************************************************************\n *\n *           HLPFILE_FindSubFile\n */\nstatic BOOL HLPFILE_FindSubFile(HLPFILE* hlpfile, LPCSTR name, BYTE **subbuf, BYTE **subend)\n{\n    BYTE *ptr;\n\n    WINE_TRACE(\"looking for file %s\\n\", debugstr_a(name));\n    ptr = HLPFILE_BPTreeSearch(hlpfile->file_buffer + GET_UINT(hlpfile->file_buffer, 4),\n                               name, comp_FindSubFile);\n    if (!ptr)\n    {   /* Subfiles with bitmap images are usually prefixed with '|', but sometimes not.\n           Unfortunately, there is no consensus among different pieces of unofficial\n           documentation. So remove leading '|' and try again. */\n        CHAR c = *name++;\n        if (c == '|')\n        {\n            WINE_TRACE(\"not found. try %s\\n\", debugstr_a(name));\n            ptr = HLPFILE_BPTreeSearch(hlpfile->file_buffer + GET_UINT(hlpfile->file_buffer, 4),\n                                       name, comp_FindSubFile);\n        }\n    }\n    if (!ptr) return FALSE;\n    *subbuf = hlpfile->file_buffer + GET_UINT(ptr, strlen(name)+1);\n    if (*subbuf >= hlpfile->file_buffer + hlpfile->file_buffer_size)\n    {\n        WINE_ERR(\"internal file %s does not fit\\n\", debugstr_a(name));\n        return FALSE;\n    }\n    *subend = *subbuf + GET_UINT(*subbuf, 0);\n    if (*subend > hlpfile->file_buffer + hlpfile->file_buffer_size)\n    {\n        WINE_ERR(\"internal file %s does not fit\\n\", debugstr_a(name));\n        return FALSE;\n    }\n    if (GET_UINT(*subbuf, 0) < GET_UINT(*subbuf, 4) + 9)\n    {\n        WINE_ERR(\"invalid size provided for internal file %s\\n\", debugstr_a(name));\n        return FALSE;\n    }\n    return TRUE;\n}\n\n/***********************************************************************\n *\n *           HLPFILE_Hash\n */\nLONG HLPFILE_Hash(LPCSTR lpszContext)\n{\n    LONG lHash = 0;\n    CHAR c;\n    static char hashtab[] =\n        {\n            0x00, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,\n            0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,\n            0xF0, 0x0B, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0x0C, 0xFF,\n            0x0A, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,\n            0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,\n            0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0D,\n            0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,\n            0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,\n            0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,\n            0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,\n            0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,\n            0x80, 0x81, 0x82, 0x83, 0x0B, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,\n            0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,\n            0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,\n            0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,\n            0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF\n        };\n\n    if (!*lpszContext) return 1;\n    while ((c = *lpszContext++))\n    {\n        lHash = lHash * 43 + hashtab[c];\n    }\n    return lHash;\n}\n\nstatic LONG fetch_long(const BYTE** ptr)\n{\n    LONG        ret;\n\n    if (*(*ptr) & 1)\n    {\n        ret = (*(const ULONG*)(*ptr) - 0x80000000) / 2;\n        (*ptr) += 4;\n    }\n    else\n    {\n        ret = (*(const USHORT*)(*ptr) - 0x8000) / 2;\n        (*ptr) += 2;\n    }\n\n    return ret;\n}\n\nstatic ULONG fetch_ulong(const BYTE** ptr)\n{\n    ULONG        ret;\n\n    if (*(*ptr) & 1)\n    {\n        ret = *(const ULONG*)(*ptr) / 2;\n        (*ptr) += 4;\n    }\n    else\n    {\n        ret = *(const USHORT*)(*ptr) / 2;\n        (*ptr) += 2;\n    }\n    return ret;\n}    \n\nstatic short fetch_short(const BYTE** ptr)\n{\n    short       ret;\n\n    if (*(*ptr) & 1)\n    {\n        ret = (*(const unsigned short*)(*ptr) - 0x8000) / 2;\n        (*ptr) += 2;\n    }\n    else\n    {\n        ret = (*(const unsigned char*)(*ptr) - 0x80) / 2;\n        (*ptr)++;\n    }\n    return ret;\n}\n\nstatic unsigned short fetch_ushort(const BYTE** ptr)\n{\n    unsigned short ret;\n\n    if (*(*ptr) & 1)\n    {\n        ret = *(const unsigned short*)(*ptr) / 2;\n        (*ptr) += 2;\n    }\n    else\n    {\n        ret = *(const unsigned char*)(*ptr) / 2;\n        (*ptr)++;\n    }\n    return ret;\n}\n\n/******************************************************************\n *\t\tHLPFILE_DecompressGfx\n *\n * Decompress the data part of a bitmap or a metafile\n */\nstatic const BYTE*      HLPFILE_DecompressGfx(const BYTE* src, unsigned csz, unsigned sz, BYTE packing,\n                                              BYTE** alloc)\n{\n    const BYTE* dst;\n    BYTE*       tmp;\n    unsigned    sz77;\n\n    WINE_TRACE(\"Unpacking (%d) from %u bytes to %u bytes\\n\", packing, csz, sz);\n\n    switch (packing)\n    {\n    case 0: /* uncompressed */\n        if (sz != csz)\n            WINE_WARN(\"Bogus gfx sizes (uncompressed): %u / %u\\n\", sz, csz);\n        dst = src;\n        *alloc = NULL;\n        break;\n    case 1: /* RunLen */\n        dst = *alloc = HeapAlloc(GetProcessHeap(), 0, sz);\n        if (!dst) return NULL;\n        HLPFILE_UncompressRLE(src, src + csz, *alloc, sz);\n        break;\n    case 2: /* LZ77 */\n        sz77 = HLPFILE_UncompressedLZ77_Size(src, src + csz);\n        dst = *alloc = HeapAlloc(GetProcessHeap(), 0, sz77);\n        if (!dst) return NULL;\n        HLPFILE_UncompressLZ77(src, src + csz, *alloc);\n        if (sz77 != sz)\n            WINE_WARN(\"Bogus gfx sizes (LZ77): %u / %u\\n\", sz77, sz);\n        break;\n    case 3: /* LZ77 then RLE */\n        sz77 = HLPFILE_UncompressedLZ77_Size(src, src + csz);\n        tmp = HeapAlloc(GetProcessHeap(), 0, sz77);\n        if (!tmp) return FALSE;\n        HLPFILE_UncompressLZ77(src, src + csz, tmp);\n        dst = *alloc = HeapAlloc(GetProcessHeap(), 0, sz);\n        if (!dst)\n        {\n            HeapFree(GetProcessHeap(), 0, tmp);\n            return FALSE;\n        }\n        HLPFILE_UncompressRLE(tmp, tmp + sz77, *alloc, sz);\n        HeapFree(GetProcessHeap(), 0, tmp);\n        break;\n    default:\n        WINE_FIXME(\"Unsupported packing %u\\n\", packing);\n        return NULL;\n    }\n    return dst;\n}\n\nstatic BOOL HLPFILE_RtfAddRawString(struct RtfData* rd, const char* str, size_t sz)\n{\n    if (rd->ptr + sz >= rd->data + rd->allocated)\n    {\n        char*   new = HeapReAlloc(GetProcessHeap(), 0, rd->data, rd->allocated *= 2);\n        if (!new) return FALSE;\n        rd->ptr = new + (rd->ptr - rd->data);\n        rd->data = new;\n    }\n    memcpy(rd->ptr, str, sz);\n    rd->ptr += sz;\n\n    return TRUE;\n}\n\nstatic BOOL HLPFILE_RtfAddControl(struct RtfData* rd, const char* str)\n{\n    WINE_TRACE(\"%s\\n\", debugstr_a(str));\n    if (*str == '\\\\' || *str == '{') rd->in_text = FALSE;\n    else if (*str == '}') rd->in_text = TRUE;\n    return HLPFILE_RtfAddRawString(rd, str, strlen(str));\n}\n\nstatic BOOL HLPFILE_RtfAddText(struct RtfData* rd, const char* str)\n{\n    const char* p;\n    const char* last;\n    const char* replace;\n    unsigned    rlen;\n\n    if (!rd->in_text)\n    {\n        if (!HLPFILE_RtfAddRawString(rd, \" \", 1)) return FALSE;\n        rd->in_text = TRUE;\n    }\n    for (last = p = str; *p; p++)\n    {\n        if (*p & 0x80) /* escape non-ASCII chars */\n        {\n            static char         xx[8];\n            rlen = sprintf(xx, \"\\\\'%x\", *(const BYTE*)p);\n            replace = xx;\n        }\n        else switch (*p)\n        {\n        case '{':  rlen = 2; replace = \"\\\\{\";  break;\n        case '}':  rlen = 2; replace = \"\\\\}\";  break;\n        case '\\\\': rlen = 2; replace = \"\\\\\\\\\"; break;\n        default:   continue;\n        }\n        if ((p != last && !HLPFILE_RtfAddRawString(rd, last, p - last)) ||\n            !HLPFILE_RtfAddRawString(rd, replace, rlen)) return FALSE;\n        last = p + 1;\n    }\n    return HLPFILE_RtfAddRawString(rd, last, p - last);\n}\n\n/******************************************************************\n *\t\tRtfAddHexBytes\n *\n */\nstatic BOOL HLPFILE_RtfAddHexBytes(struct RtfData* rd, const void* _ptr, unsigned sz)\n{\n    char        tmp[512];\n    unsigned    i, step;\n    const BYTE* ptr = _ptr;\n    static const char* _2hex = \"0123456789abcdef\";\n\n    if (!rd->in_text)\n    {\n        if (!HLPFILE_RtfAddRawString(rd, \" \", 1)) return FALSE;\n        rd->in_text = TRUE;\n    }\n    for (; sz; sz -= step)\n    {\n        step = min(256, sz);\n        for (i = 0; i < step; i++)\n        {\n            tmp[2 * i + 0] = _2hex[*ptr >> 4];\n            tmp[2 * i + 1] = _2hex[*ptr++ & 0xF];\n        }\n        if (!HLPFILE_RtfAddRawString(rd, tmp, 2 * step)) return FALSE;\n    }\n    return TRUE;\n}\n\nstatic HLPFILE_LINK*       HLPFILE_AllocLink(struct RtfData* rd, int cookie,\n                                             const char* str, unsigned len, LONG hash,\n                                             BOOL clrChange, BOOL bHotSpot, unsigned wnd);\n\n/******************************************************************\n *\t\tHLPFILE_AddHotSpotLinks\n *\n */\nstatic void HLPFILE_AddHotSpotLinks(struct RtfData* rd, HLPFILE* file,\n                                    const BYTE* start, ULONG hs_size, ULONG hs_offset, float coorddiv)\n{\n    unsigned    i, hs_num;\n    ULONG       hs_macro;\n    const char* str;\n\n    if (hs_size == 0 || hs_offset == 0) return;\n\n    start += hs_offset;\n    /* always 1 ?? */\n    hs_num = GET_USHORT(start, 1);\n    hs_macro = GET_UINT(start, 3);\n\n    str = (const char*)start + 7 + 15 * hs_num + hs_macro;\n    /* FIXME: should use hs_size to prevent out of bounds reads */\n    for (i = 0; i < hs_num; i++)\n    {\n        HLPFILE_HOTSPOTLINK*    hslink;\n\n        WINE_TRACE(\"%02x-%02x%02x {%s,%s}\\n\",\n                   start[7 + 15 * i + 0], start[7 + 15 * i + 1], start[7 + 15 * i + 2],\n                   debugstr_a(str), debugstr_a(str + strlen(str) + 1));\n        /* str points to two null terminated strings:\n         * hotspot name, then link name\n         */\n        str += strlen(str) + 1;     /* skip hotspot name */\n\n        hslink = NULL;\n        switch (start[7 + 15 * i + 0])\n        /* The next two chars always look like 0x04 0x00 ???\n         * What are they for ?\n         */\n        {\n        case 0xC8:\n        case 0xCC:\n            hslink = (HLPFILE_HOTSPOTLINK*)\n                HLPFILE_AllocLink(rd, hlp_link_macro, str, -1, 0, FALSE, TRUE, -2);\n            break;\n\n        case 0xE2:\n        case 0xE3:\n        case 0xE6:\n        case 0xE7:\n            hslink = (HLPFILE_HOTSPOTLINK*)\n                HLPFILE_AllocLink(rd, (start[7 + 15 * i + 0] & 1) ? hlp_link_link : hlp_link_popup,\n                                  file->lpszPath, -1, HLPFILE_Hash(str),\n                                  FALSE, TRUE, -2);\n            break;\n\n        case 0xEE:\n        case 0xEF:\n            {\n                const char* win = strchr(str, '>');\n                int wnd = -1;\n                char* tgt = NULL;\n\n                if (win)\n                {\n                    for (wnd = file->numWindows - 1; wnd >= 0; wnd--)\n                    {\n                        if (!stricmp(win + 1, file->windows[wnd].name)) break;\n                    }\n                    if (wnd == -1)\n                        WINE_WARN(\"Couldn't find window info for %s\\n\", debugstr_a(win));\n                    if ((tgt = HeapAlloc(GetProcessHeap(), 0, win - str + 1)))\n                    {\n                        memcpy(tgt, str, win - str);\n                        tgt[win - str] = '\\0';\n                    }\n                }\n                hslink = (HLPFILE_HOTSPOTLINK*)\n                    HLPFILE_AllocLink(rd, (start[7 + 15 * i + 0] & 1) ? hlp_link_link : hlp_link_popup,\n                                      file->lpszPath, -1, HLPFILE_Hash(tgt ? tgt : str), FALSE, TRUE, wnd);\n                HeapFree(GetProcessHeap(), 0, tgt);\n                break;\n            }\n        default:\n            WINE_FIXME(\"unknown hotsport target 0x%x\\n\", start[7 + 15 * i + 0]);\n        }\n        if (hslink)\n        {\n            hslink->x      = GET_USHORT(start, 7 + 15 * i + 3) / coorddiv;\n            hslink->y      = GET_USHORT(start, 7 + 15 * i + 5) / coorddiv;\n            hslink->width  = GET_USHORT(start, 7 + 15 * i + 7) / coorddiv;\n            hslink->height = GET_USHORT(start, 7 + 15 * i + 9) / coorddiv;\n            hslink->imgidx = rd->imgcnt;\n            hslink->next = rd->first_hs;\n            rd->first_hs = hslink;\n            /* target = GET_UINT(start, 7 + 15 * i + 11); */\n        }\n        str += strlen(str) + 1;\n    }\n}\n\n/******************************************************************\n *             HLPFILE_RtfAddTransparentBitmap\n *\n * We'll transform a transparent bitmap into an metafile that\n * we then transform into RTF\n */\nstatic BOOL HLPFILE_RtfAddTransparentBitmap(struct RtfData* rd, const BITMAPINFO* bi,\n                                            const void* pict, unsigned nc)\n{\n    HDC                 hdc, hdcMask, hdcMem, hdcEMF;\n    HBITMAP             hbm, hbmMask, hbmOldMask, hbmOldMem;\n    HENHMETAFILE        hEMF;\n    BOOL                ret = FALSE;\n    void*               data;\n    UINT                sz;\n\n    hbm = CreateDIBitmap(hdc = GetDC(0), &bi->bmiHeader,\n                         CBM_INIT, pict, bi, DIB_RGB_COLORS);\n\n    hdcMem = CreateCompatibleDC(hdc);\n    hbmOldMem = SelectObject(hdcMem, hbm);\n\n    /* create the mask bitmap from the main bitmap */\n    hdcMask = CreateCompatibleDC(hdc);\n    hbmMask = CreateBitmap(bi->bmiHeader.biWidth, bi->bmiHeader.biHeight, 1, 1, NULL);\n    hbmOldMask = SelectObject(hdcMask, hbmMask);\n    SetBkColor(hdcMem,\n               RGB(bi->bmiColors[nc - 1].rgbRed,\n                   bi->bmiColors[nc - 1].rgbGreen,\n                   bi->bmiColors[nc - 1].rgbBlue));\n    BitBlt(hdcMask, 0, 0, bi->bmiHeader.biWidth, bi->bmiHeader.biHeight, hdcMem, 0, 0, SRCCOPY);\n\n    /* sets to RGB(0,0,0) the transparent bits in main bitmap */\n    SetBkColor(hdcMem, RGB(0,0,0));\n    SetTextColor(hdcMem, RGB(255,255,255));\n    BitBlt(hdcMem, 0, 0, bi->bmiHeader.biWidth, bi->bmiHeader.biHeight, hdcMask, 0, 0, SRCAND);\n\n    SelectObject(hdcMask, hbmOldMask);\n    DeleteDC(hdcMask);\n\n    SelectObject(hdcMem, hbmOldMem);\n    DeleteDC(hdcMem);\n\n    /* we create the bitmap on the fly */\n    hdcEMF = CreateEnhMetaFileW(NULL, NULL, NULL, NULL);\n    hdcMem = CreateCompatibleDC(hdcEMF);\n\n    /* sets to RGB(0,0,0) the transparent bits in final bitmap */\n    hbmOldMem = SelectObject(hdcMem, hbmMask);\n    SetBkColor(hdcEMF, RGB(255, 255, 255));\n    SetTextColor(hdcEMF, RGB(0, 0, 0));\n    BitBlt(hdcEMF, 0, 0, bi->bmiHeader.biWidth, bi->bmiHeader.biHeight, hdcMem, 0, 0, SRCAND);\n\n    /* and copy the remaining bits of main bitmap */\n    SelectObject(hdcMem, hbm);\n    BitBlt(hdcEMF, 0, 0, bi->bmiHeader.biWidth, bi->bmiHeader.biHeight, hdcMem, 0, 0, SRCPAINT);\n    SelectObject(hdcMem, hbmOldMem);\n    DeleteDC(hdcMem);\n\n    /* do the cleanup */\n    ReleaseDC(0, hdc);\n    DeleteObject(hbmMask);\n    DeleteObject(hbm);\n\n    hEMF = CloseEnhMetaFile(hdcEMF);\n\n    /* generate rtf stream */\n    sz = GetEnhMetaFileBits(hEMF, 0, NULL);\n    if (sz && (data = HeapAlloc(GetProcessHeap(), 0, sz)))\n    {\n        if (sz == GetEnhMetaFileBits(hEMF, sz, data))\n        {\n            ret = HLPFILE_RtfAddControl(rd, \"{\\\\pict\\\\emfblip\") &&\n                HLPFILE_RtfAddHexBytes(rd, data, sz) &&\n                HLPFILE_RtfAddControl(rd, \"}\");\n        }\n        HeapFree(GetProcessHeap(), 0, data);\n    }\n    DeleteEnhMetaFile(hEMF);\n\n    return ret;\n}\n/******************************************************************\n *             HLPFILE_RtfAddBitmap\n *\n */\nstatic BOOL HLPFILE_RtfAddBitmap(struct RtfData* rd, HLPFILE* file, const BYTE* beg, BYTE type, BYTE pack)\n{\n    const BYTE*         ptr;\n    const BYTE*         pict_beg;\n    BYTE*               alloc = NULL;\n    BITMAPINFO*         bi;\n    ULONG               off, csz;\n    unsigned            nc = 0;\n    BOOL                clrImportant = FALSE;\n    BOOL                ret = FALSE;\n    char                tmp[256];\n    unsigned            hs_size, hs_offset;\n\n    bi = HeapAlloc(GetProcessHeap(), 0, sizeof(*bi));\n    if (!bi) return FALSE;\n\n    ptr = beg + 2; /* for type and pack */\n\n    bi->bmiHeader.biSize          = sizeof(bi->bmiHeader);\n    bi->bmiHeader.biXPelsPerMeter = fetch_ulong(&ptr);\n    bi->bmiHeader.biYPelsPerMeter = fetch_ulong(&ptr);\n    bi->bmiHeader.biPlanes        = fetch_ushort(&ptr);\n    bi->bmiHeader.biBitCount      = fetch_ushort(&ptr);\n    bi->bmiHeader.biWidth         = fetch_ulong(&ptr);\n    bi->bmiHeader.biHeight        = fetch_ulong(&ptr);\n    bi->bmiHeader.biClrUsed       = fetch_ulong(&ptr);\n    clrImportant  = fetch_ulong(&ptr);\n    bi->bmiHeader.biClrImportant  = (clrImportant > 1) ? clrImportant : 0;\n    bi->bmiHeader.biCompression   = BI_RGB;\n    if (bi->bmiHeader.biBitCount > 32) WINE_FIXME(\"Unknown bit count %u\\n\", bi->bmiHeader.biBitCount);\n    if (bi->bmiHeader.biPlanes != 1) WINE_FIXME(\"Unsupported planes %u\\n\", bi->bmiHeader.biPlanes);\n    bi->bmiHeader.biSizeImage = (((bi->bmiHeader.biWidth * bi->bmiHeader.biBitCount + 31) & ~31) / 8) * bi->bmiHeader.biHeight;\n    WINE_TRACE(\"planes=%d bc=%d size=(%d,%d)\\n\",\n               bi->bmiHeader.biPlanes, bi->bmiHeader.biBitCount,\n               bi->bmiHeader.biWidth, bi->bmiHeader.biHeight);\n\n    csz = fetch_ulong(&ptr);\n    hs_size = fetch_ulong(&ptr);\n\n    off = GET_UINT(ptr, 0); ptr += 4;\n    hs_offset = GET_UINT(ptr, 0); ptr += 4;\n    HLPFILE_AddHotSpotLinks(rd, file, beg, hs_size, hs_offset, 1);\n\n    /* now read palette info */\n    if (type == 0x06)\n    {\n        unsigned i;\n\n        nc = bi->bmiHeader.biClrUsed;\n        /* not quite right, especially for bitfields type of compression */\n        if (!nc && bi->bmiHeader.biBitCount <= 8)\n            nc = 1 << bi->bmiHeader.biBitCount;\n\n        bi = HeapReAlloc(GetProcessHeap(), 0, bi, sizeof(*bi) + nc * sizeof(RGBQUAD));\n        if (!bi) return FALSE;\n        for (i = 0; i < nc; i++)\n        {\n            bi->bmiColors[i].rgbBlue     = ptr[0];\n            bi->bmiColors[i].rgbGreen    = ptr[1];\n            bi->bmiColors[i].rgbRed      = ptr[2];\n            bi->bmiColors[i].rgbReserved = 0;\n            ptr += 4;\n        }\n    }\n    pict_beg = HLPFILE_DecompressGfx(beg + off, csz, bi->bmiHeader.biSizeImage, pack, &alloc);\n\n    if (clrImportant == 1 && nc > 0)\n    {\n        ret = HLPFILE_RtfAddTransparentBitmap(rd, bi, pict_beg, nc);\n        goto done;\n    }\n    if (!HLPFILE_RtfAddControl(rd, \"{\\\\pict\")) goto done;\n    if (type == 0x06)\n    {\n        /* 96dpi: 15twips = 1px */\n        sprintf(tmp, \"\\\\dibitmap0\\\\picw%d\\\\pich%d\\\\picwgoal%d\\\\pichgoal%d\",\n                bi->bmiHeader.biWidth, bi->bmiHeader.biHeight,\n                bi->bmiHeader.biWidth * 15, bi->bmiHeader.biHeight * 15);\n        if (!HLPFILE_RtfAddControl(rd, tmp)) goto done;\n        if (!HLPFILE_RtfAddHexBytes(rd, bi, sizeof(bi->bmiHeader) + nc * sizeof(RGBQUAD))) goto done;\n    }\n    else\n    {\n        /* 96dpi: 15twips = 1px */\n        sprintf(tmp, \"\\\\wbitmap0\\\\wbmbitspixel%d\\\\wbmplanes%d\\\\picw%d\\\\pich%d\\\\picwgoal%d\\\\pichgoal%d\",\n                bi->bmiHeader.biBitCount, bi->bmiHeader.biPlanes,\n                bi->bmiHeader.biWidth, bi->bmiHeader.biHeight,\n                bi->bmiHeader.biWidth * 15, bi->bmiHeader.biHeight * 15);\n        if (!HLPFILE_RtfAddControl(rd, tmp)) goto done;\n    }\n    if (!HLPFILE_RtfAddHexBytes(rd, pict_beg, bi->bmiHeader.biSizeImage)) goto done;\n    if (!HLPFILE_RtfAddControl(rd, \"}\")) goto done;\n\n    ret = TRUE;\ndone:\n    HeapFree(GetProcessHeap(), 0, bi);\n    HeapFree(GetProcessHeap(), 0, alloc);\n\n    return ret;\n}\n\n/******************************************************************\n *\t\tHLPFILE_RtfAddMetaFile\n *\n */\nstatic BOOL     HLPFILE_RtfAddMetaFile(struct RtfData* rd, HLPFILE* file, const BYTE* beg, BYTE pack)\n{\n    ULONG               size, csize, off, hs_offset, hs_size;\n    const BYTE*         ptr;\n    const BYTE*         bits;\n    BYTE*               alloc = NULL;\n    char                tmp[256];\n    unsigned            mm;\n    BOOL                ret;\n\n    WINE_TRACE(\"Loading metafile\\n\");\n\n    ptr = beg + 2; /* for type and pack */\n\n    mm = fetch_ushort(&ptr); /* mapping mode */\n    sprintf(tmp, \"\\\\sl0{\\\\pict\\\\wmetafile%d\\\\picw%d\\\\pich%d\",\n            mm, GET_USHORT(ptr, 0), GET_USHORT(ptr, 2));\n    if (!HLPFILE_RtfAddControl(rd, tmp)) return FALSE;\n    ptr += 4;\n\n    size = fetch_ulong(&ptr); /* decompressed size */\n    csize = fetch_ulong(&ptr); /* compressed size */\n    hs_size = fetch_ulong(&ptr); /* hotspot size */\n    off = GET_UINT(ptr, 0);\n    hs_offset = GET_UINT(ptr, 4);\n    ptr += 8;\n\n    // WMF type uses MM_HIMETRIC units for size\n    HLPFILE_AddHotSpotLinks(rd, file, beg, hs_size, hs_offset, mm == 8 ? 26.2f : 1);\n\n    WINE_TRACE(\"sz=%u csz=%u offs=%u/%u,%u/%u\\n\",\n               size, csize, off, (ULONG)(ptr - beg), hs_size, hs_offset);\n\n    bits = HLPFILE_DecompressGfx(beg + off, csize, size, pack, &alloc);\n    if (!bits) return FALSE;\n\n    ret = HLPFILE_RtfAddHexBytes(rd, bits, size) &&\n        HLPFILE_RtfAddControl(rd, \"}\");\n\n    HeapFree(GetProcessHeap(), 0, alloc);\n\n    return ret;\n}\n\n/******************************************************************\n *\t\tHLPFILE_RtfAddGfxByAddr\n *\n */\nstatic  BOOL    HLPFILE_RtfAddGfxByAddr(struct RtfData* rd, HLPFILE *hlpfile,\n                                        const BYTE* ref, ULONG size)\n{\n    unsigned    i, numpict;\n\n    numpict = GET_USHORT(ref, 2);\n    WINE_TRACE(\"Got picture magic=%04x #=%d\\n\", GET_USHORT(ref, 0), numpict);\n\n    for (i = 0; i < numpict; i++)\n    {\n        const BYTE*     beg;\n        const BYTE*     ptr;\n        BYTE            type, pack;\n\n        WINE_TRACE(\"Offset[%d] = %x\\n\", i, GET_UINT(ref, (1 + i) * 4));\n        beg = ptr = ref + GET_UINT(ref, (1 + i) * 4);\n\n        type = *ptr++;\n        pack = *ptr++;\n\n        switch (type)\n        {\n        case 5: /* device dependent bmp */\n        case 6: /* device independent bmp */\n            HLPFILE_RtfAddBitmap(rd, hlpfile, beg, type, pack);\n            break;\n        case 8:\n            HLPFILE_RtfAddMetaFile(rd, hlpfile, beg, pack);\n            break;\n        default: WINE_FIXME(\"Unknown type %u\\n\", type); return FALSE;\n        }\n\n        /* FIXME: hotspots */\n\n        /* FIXME: implement support for multiple picture format */\n        if (numpict != 1) WINE_FIXME(\"Supporting only one bitmap format per logical bitmap (for now). Using first format\\n\");\n        break;\n    }\n    rd->imgcnt++;\n    return TRUE;\n}\n\n/******************************************************************\n *\t\tHLPFILE_RtfAddGfxByIndex\n *\n *\n */\nstatic  BOOL    HLPFILE_RtfAddGfxByIndex(struct RtfData* rd, HLPFILE *hlpfile,\n                                         unsigned index)\n{\n    char        tmp[16];\n    BYTE        *ref, *end;\n\n    WINE_TRACE(\"Loading picture #%d\\n\", index);\n\n    sprintf(tmp, \"|bm%u\", index);\n\n    if (!HLPFILE_FindSubFile(hlpfile, tmp, &ref, &end)) {WINE_WARN(\"no sub file\\n\"); return FALSE;}\n\n    ref += 9;\n    return HLPFILE_RtfAddGfxByAddr(rd, hlpfile, ref, end - ref);\n}\n\n/******************************************************************\n *\t\tHLPFILE_AllocLink2\n *\n *\n */\nstatic HLPFILE_LINK*       HLPFILE_AllocLink2(struct RtfData* rd, int cookie,\n                                              const char* str, unsigned len, LONG hash,\n                                              BOOL clrChange, BOOL bHotSpot, unsigned wnd,\n                                              const char* windowName)\n{\n    HLPFILE_LINK*  link;\n    char*          link_str;\n    unsigned       asz = bHotSpot ? sizeof(HLPFILE_HOTSPOTLINK) : sizeof(HLPFILE_LINK);\n\n    /* FIXME: should build a string table for the attributes.link.lpszPath\n     * they are reallocated for each link\n     */\n    if (len == -1) len = strlen(str);\n    link = HeapAlloc(GetProcessHeap(), 0, asz + len + 1 + (windowName ? strlen(windowName) + 1 : 0));\n    if (!link) return NULL;\n\n    link->cookie     = cookie;\n    link->string     = link_str = (char*)link + asz;\n    memcpy(link_str, str, len);\n    link_str[len] = '\\0';\n    link->hash       = hash;\n    link->bClrChange = clrChange;\n    link->bHotSpot   = bHotSpot;\n    link->window     = wnd;\n    link->next       = rd->first_link;\n    rd->first_link   = link;\n    link->cpMin      = rd->char_pos;\n    rd->force_color  = clrChange;\n    if (rd->current_link) WINE_FIXME(\"Pending link\\n\");\n    if (bHotSpot)\n        link->cpMax = rd->char_pos;\n    else\n        rd->current_link = link;\n    if (windowName)\n    {\n        link->windowName = (const char*)link + asz + len + 1;\n        memcpy(link->windowName, windowName, strlen(windowName) + 1);\n    }\n    else\n    {\n        link->windowName = NULL;\n    }\n\n    WINE_TRACE(\"Link[%d] to %s@%08x:%d\\n\",\n               link->cookie, debugstr_a(link->string), link->hash, link->window);\n    return link;\n}\n\n/******************************************************************\n *\t\tHLPFILE_AllocLink\n *\n *\n */\nstatic HLPFILE_LINK*       HLPFILE_AllocLink(struct RtfData* rd, int cookie,\n                                             const char* str, unsigned len, LONG hash,\n                                             BOOL clrChange, BOOL bHotSpot, unsigned wnd)\n{\n    return HLPFILE_AllocLink2(rd, cookie, str, len, hash, clrChange, bHotSpot, wnd, NULL);\n}\n\nstatic unsigned HLPFILE_HalfPointsScale(HLPFILE_PAGE* page, unsigned pts)\n{\n    return pts * page->file->scale - page->file->rounderr;\n}\n\n/***********************************************************************\n *\n *           HLPFILE_BrowseParagraph\n */\nstatic BOOL HLPFILE_BrowseParagraph(HLPFILE_PAGE* page, struct RtfData* rd,\n                                    BYTE *buf, BYTE* end, unsigned* parlen)\n{\n    UINT               textsize;\n    const BYTE        *format, *format_end;\n    char              *text, *text_base, *text_end;\n    LONG               size, blocksize, datalen;\n    unsigned short     bits;\n    unsigned           ncol = 1;\n    short              nc, lastcol, table_width, lastfont = 0;\n    char               tmp[256];\n    BOOL               ret = FALSE;\n    HLPFILE_ROW       *lastrow;\n\n    if (buf + 0x19 > end) {WINE_WARN(\"header too small\\n\"); return FALSE;};\n\n    *parlen = 0;\n    blocksize = GET_UINT(buf, 0);\n    size = GET_UINT(buf, 0x4);\n    datalen = GET_UINT(buf, 0x10);\n    text = text_base = HeapAlloc(GetProcessHeap(), 0, size);\n    if (!text) return FALSE;\n    if (size > blocksize - datalen)\n    {\n        /* need to decompress */\n        if (page->file->hasPhrases)\n            HLPFILE_Uncompress2(page->file, buf + datalen, end, (BYTE*)text, (BYTE*)text + size);\n        else if (page->file->hasPhrases40)\n            HLPFILE_Uncompress3(page->file, text, text + size, buf + datalen, end);\n        else\n        {\n            WINE_FIXME(\"Text size is too long, splitting\\n\");\n            size = blocksize - datalen;\n            memcpy(text, buf + datalen, size);\n        }\n    }\n    else\n        memcpy(text, buf + datalen, size);\n\n    text_end = text + size;\n\n    format = buf + 0x15;\n    format_end = buf + GET_UINT(buf, 0x10);\n\n    WINE_TRACE(\"Record type (buf[0x14]) = 0x%x\\n\", buf[0x14]);\n\n    if (buf[0x14] == HLP_DISPLAY || buf[0x14] == HLP_TABLE)\n    {\n        fetch_long(&format);\n        *parlen = fetch_ushort(&format);\n    }\n\n    if (buf[0x14] == HLP_TABLE)\n    {\n        unsigned char    type;\n\n        ncol = *format++;\n\n        type = *format++;\n        if (type == 0 || type == 2)\n        {\n            table_width = GET_SHORT(format, 0);\n            format += 2;\n            HLPFILE_ROW* row = HeapAlloc(GetProcessHeap(), 0, sizeof(HLPFILE_ROW) + 2 * ncol);\n            row->cols = ncol;\n            row->prev = NULL;\n            if (page->first_var_row) page->first_var_row->prev = row;\n            row->next = page->first_var_row;\n            page->first_var_row = row;\n            if (!HLPFILE_RtfAddControl(rd, \"{\\\\v\\\\pard var_wid_row}\")) goto done;\n        }\n        else\n            table_width = 32767;\n        if (!HLPFILE_RtfAddControl(rd, \"\\\\trowd\")) goto done;\n        WINE_TRACE(\"New table: cols=%d type=%x width=%d\\n\",\n                   ncol, type, table_width);\n        if (ncol > 1)\n        {\n            int     pos, width;\n            sprintf(tmp, \"\\\\trgaph%d\\\\trleft%d\",\n                    MulDiv(HLPFILE_HalfPointsScale(page, GET_SHORT(format, 6)), table_width, 32767),\n                    MulDiv(HLPFILE_HalfPointsScale(page, GET_SHORT(format, 2) - GET_SHORT(format, 6)), table_width, 32767) - 1);\n            if (!HLPFILE_RtfAddControl(rd, tmp)) goto done;\n            pos = GET_SHORT(format, 6) / 2;\n            for (nc = 0; nc < ncol; nc++)\n            {\n                WINE_TRACE(\"column(%d/%d) gap=%d width=%d\\n\",\n                           nc, ncol, GET_SHORT(format, nc*4),\n                           GET_SHORT(format, nc*4+2));\n                pos += GET_SHORT(format, nc * 4) + GET_SHORT(format, nc * 4 + 2);\n                width = MulDiv(HLPFILE_HalfPointsScale(page, pos), table_width, 32767);\n                sprintf(tmp, \"\\\\clbrdrl\\\\brdrw1\\\\brdrcf2\\\\clbrdrt\\\\brdrw1\\\\brdrcf2\\\\clbrdrr\\\\brdrw1\\\\brdrcf2\\\\clbrdrb\\\\brdrw1\\\\brdrcf2\\\\cellx%d\", width);\n                if (!HLPFILE_RtfAddControl(rd, tmp)) goto done;\n                if (type == 0 || type == 2)\n                    page->first_var_row->width[nc] = width;\n            }\n        }\n        else\n        {\n            int twidth, cwidth;\n            WINE_TRACE(\"column(0/%d) gap=%d width=%d\\n\",\n                       ncol, GET_SHORT(format, 0), GET_SHORT(format, 2));\n            twidth = MulDiv(HLPFILE_HalfPointsScale(page, GET_SHORT(format, 2)), table_width, 32767) - 1;\n            cwidth = MulDiv(HLPFILE_HalfPointsScale(page, GET_SHORT(format, 0)), table_width, 32767);\n            sprintf(tmp, \"\\\\trleft%d\\\\clbrdrl\\\\brdrw1\\\\brdrcf2\\\\clbrdrt\\\\brdrw1\\\\brdrcf2\\\\clbrdrr\\\\brdrw1\\\\brdrcf2\\\\clbrdrb\\\\brdrw1\\\\brdrcf2\\\\cellx%d \",\n                       twidth, cwidth);\n            if (!HLPFILE_RtfAddControl(rd, tmp)) goto done;\n            if (type == 0 || type == 2)\n                page->first_var_row->width[0] = cwidth;\n        }\n        format += ncol * 4;\n    }\n\n    lastcol = -1;\n    for (nc = 0; nc < ncol; /**/)\n    {\n        BYTE brdr;\n        WINE_TRACE(\"looking for format at offset %lu in column %d\\n\", (SIZE_T)(format - (buf + 0x15)), nc);\n        if (!HLPFILE_RtfAddControl(rd, \"\\\\pard\")) goto done;\n        if (buf[0x14] == HLP_TABLE)\n        {\n            nc = lastcol = GET_SHORT(format, 0);\n            if (nc == -1) /* last column */\n            {\n                if (!HLPFILE_RtfAddControl(rd, \"\\\\row\")) goto done;\n                rd->char_pos += 2;\n                break;\n            }\n            format += 5;\n            if (!HLPFILE_RtfAddControl(rd, \"\\\\intbl\")) goto done;\n        }\n        else nc++;\n        if (buf[0x14] == HLP_DISPLAY30)\n            format += 6;\n        else\n            format += 4;\n        bits = GET_USHORT(format, 0); format += 2;\n        if (bits & 0x0001) fetch_long(&format);\n        if (bits & 0x0002)\n        {\n            sprintf(tmp, \"\\\\sb%d\", HLPFILE_HalfPointsScale(page, fetch_short(&format)));\n            if (!HLPFILE_RtfAddControl(rd, tmp)) goto done;\n        }\n        if (bits & 0x0004)\n        {\n            sprintf(tmp, \"\\\\sa%d\", HLPFILE_HalfPointsScale(page, fetch_short(&format)));\n            if (!HLPFILE_RtfAddControl(rd, tmp)) goto done;\n        }\n        if (bits & 0x0008)\n        {\n            sprintf(tmp, \"\\\\sl%d\", HLPFILE_HalfPointsScale(page, fetch_short(&format)));\n            if (!HLPFILE_RtfAddControl(rd, tmp)) goto done;\n        }\n        if (bits & 0x0010)\n        {\n            sprintf(tmp, \"\\\\li%d\", HLPFILE_HalfPointsScale(page, fetch_short(&format)));\n            if (!HLPFILE_RtfAddControl(rd, tmp)) goto done;\n        }\n        if (bits & 0x0020)\n        {\n            sprintf(tmp, \"\\\\ri%d\", HLPFILE_HalfPointsScale(page, fetch_short(&format)));\n            if (!HLPFILE_RtfAddControl(rd, tmp)) goto done;\n        }\n        if (bits & 0x0040)\n        {\n            sprintf(tmp, \"\\\\fi%d\", HLPFILE_HalfPointsScale(page, fetch_short(&format)));\n            if (!HLPFILE_RtfAddControl(rd, tmp)) goto done;\n        }\n        /* prevents contents from being cut off */\n        if (!HLPFILE_RtfAddControl(rd, \"\\\\slmult1\")) goto done;\n        if (bits & 0x0100)\n        {\n            short       w;\n            brdr = *format++;\n            // richedit won't display any borders except as part of a table\n            if ((brdr & 0x03) && (buf[0x14] != HLP_TABLE) && !HLPFILE_RtfAddControl(rd, \"{\\\\pard\\\\trowd\\\\clbrdrl\\\\brdrw1\\\\brdrcf2\\\\clbrdrt\\\\brdrw1\\\\brdrcf2\\\\clbrdrr\\\\brdrw1\\\\brdrcf2\\\\clbrdrb\\\\brdrw1\\\\cellx100000\\\\intbl\\\\f0\\\\fs0\\\\cell\\\\row\\\\pard}\")) goto done;\n/*\n            if ((brdr & 0x01) && !HLPFILE_RtfAddControl(rd, \"\\\\box\")) goto done;\n            if ((brdr & 0x02) && !HLPFILE_RtfAddControl(rd, \"\\\\brdrt\")) goto done;\n            if ((brdr & 0x04) && !HLPFILE_RtfAddControl(rd, \"\\\\brdrl\")) goto done;\n            if ((brdr & 0x08) && !HLPFILE_RtfAddControl(rd, \"\\\\brdrb\")) goto done;\n            if ((brdr & 0x10) && !HLPFILE_RtfAddControl(rd, \"\\\\brdrr\")) goto done;\n            if ((brdr & 0x20) && !HLPFILE_RtfAddControl(rd, \"\\\\brdrth\")) goto done;\n            if (!(brdr & 0x20) && !HLPFILE_RtfAddControl(rd, \"\\\\brdrs\")) goto done;\n            if ((brdr & 0x40) && !HLPFILE_RtfAddControl(rd, \"\\\\brdrdb\")) goto done; */\n            /* 0x80: unknown */\n\n            w = GET_SHORT(format, 0); format += 2;\n/*          if (w)\n            {\n                sprintf(tmp, \"\\\\brdrw%d\", HLPFILE_HalfPointsScale(page, w));\n                if (!HLPFILE_RtfAddControl(rd, tmp)) goto done;\n            } */\n        }\n        if (bits & 0x0200)\n        {\n            int                 i, ntab = fetch_short(&format);\n            unsigned            tab, ts;\n            const char*         kind;\n\n            for (i = 0; i < ntab; i++)\n            {\n                tab = fetch_ushort(&format);\n                ts = (tab & 0x4000) ? fetch_ushort(&format) : 0 /* left */;\n                switch (ts)\n                {\n                default: WINE_FIXME(\"Unknown tab style %x\\n\", ts);\n                /* fall through */\n                case 0: kind = \"\"; break;\n                case 1: kind = \"\\\\tqr\"; break;\n                case 2: kind = \"\\\\tqc\"; break;\n                }\n                /* FIXME: do kind */\n                sprintf(tmp, \"%s\\\\tx%d\",\n                        kind, HLPFILE_HalfPointsScale(page, tab & 0x3FFF));\n                if (!HLPFILE_RtfAddControl(rd, tmp)) goto done;\n            }\n        }\n        switch (bits & 0xc00)\n        {\n        default: WINE_FIXME(\"Unsupported alignment 0xC00\\n\"); break;\n        case 0: if (!HLPFILE_RtfAddControl(rd, \"\\\\ql\")) goto done; break;\n        case 0x400: if (!HLPFILE_RtfAddControl(rd, \"\\\\qr\")) goto done; break;\n        case 0x800: if (!HLPFILE_RtfAddControl(rd, \"\\\\qc\")) goto done; break;\n        }\n\n        /* 0x1000 doesn't need space */\n        if ((bits & 0x1000) && !HLPFILE_RtfAddControl(rd, \"\\\\keep\")) goto done;\n        if ((bits & 0xE080) != 0) \n            WINE_FIXME(\"Unsupported bits %04x, potential trouble ahead\\n\", bits);\n\n        while (text < text_end && format < format_end)\n        {\n            WINE_TRACE(\"Got text: %s (%p/%p - %p/%p)\\n\", debugstr_a(text), text, text_end, format, format_end);\n            textsize = strlen(text);\n            if (textsize)\n            {\n                if (rd->force_color)\n                {\n                    if ((rd->current_link->cookie == hlp_link_popup) ?\n                        !HLPFILE_RtfAddControl(rd, \"{\\\\uld\\\\cf1\") :\n                        !HLPFILE_RtfAddControl(rd, \"{\\\\ul\\\\cf1\")) goto done;\n                }\n                if (!HLPFILE_RtfAddText(rd, text)) goto done;\n                if (rd->force_color && !HLPFILE_RtfAddControl(rd, \"}\")) goto done;\n                rd->char_pos += MultiByteToWideChar(rd->code_page, 0, text, textsize, NULL, 0);\n            }\n            /* else: null text, keep on storing attributes */\n            text += textsize + 1;\n\n            WINE_TRACE(\"format=0x%02x\\n\", *format);\n\t    if (*format == 0xff)\n            {\n                format++;\n                break;\n            }\n\n            switch (*format)\n            {\n            case 0x20:\n                WINE_FIXME(\"NIY20\\n\");\n                format += 5;\n                break;\n\n            case 0x21:\n                WINE_FIXME(\"NIY21\\n\");\n                format += 3;\n                break;\n\n\t    case 0x80:\n                {\n                    unsigned    font = GET_USHORT(format, 1);\n                    unsigned    fs;\n\n                    WINE_TRACE(\"Changing font to %d\\n\", font);\n                    format += 3;\n                    /* Font size in hlpfile is given in the same units as\n                       rtf control word \\fs uses (half-points). */\n                    switch (rd->font_scale)\n                    {\n                    case 0: fs = page->file->fonts[font].LogFont.lfHeight - 4; break;\n                    default:\n                    case 1: fs = page->file->fonts[font].LogFont.lfHeight; break;\n                    case 2: fs = page->file->fonts[font].LogFont.lfHeight + 4; break;\n                    }\n                    /* FIXME: colors are missing, at a minimum; also, the bold attribute loses information */\n\n                    sprintf(tmp, \"\\\\f%d\\\\cf%d\\\\fs%d%s%s%s%s\",\n                            font + 1, font + 3, fs,\n                            page->file->fonts[font].LogFont.lfWeight > 400 ? \"\\\\b\" : \"\\\\b0\",\n                            page->file->fonts[font].LogFont.lfItalic ? \"\\\\i\" : \"\\\\i0\",\n                            page->file->fonts[font].LogFont.lfUnderline ? \"\\\\ul\" : \"\\\\ul0\",\n                            page->file->fonts[font].LogFont.lfStrikeOut ? \"\\\\strike\" : \"\\\\strike0\");\n                    if (!HLPFILE_RtfAddControl(rd, tmp)) goto done;\n                    lastfont = font;\n                }\n               break;\n\n\t    case 0x81:\n                if (!HLPFILE_RtfAddControl(rd, \"\\\\line\")) goto done;\n                format += 1;\n                rd->char_pos++;\n                break;\n\n\t    case 0x82:\n                if (buf[0x14] == HLP_TABLE)\n                {\n                    if (format[1] != 0xFF)\n                    {\n                        if (!HLPFILE_RtfAddControl(rd, \"\\\\par\\\\intbl\")) goto done;\n                    }\n                    else if (GET_SHORT(format, 2) == -1)\n                    {\n                        if (!HLPFILE_RtfAddControl(rd, \"\\\\cell\\\\intbl\\\\row\")) goto done;\n                        rd->char_pos += 2;\n                    }\n                    else if (GET_SHORT(format, 2) == lastcol)\n                    {\n                        if (!HLPFILE_RtfAddControl(rd, \"\\\\par\\\\pard\")) goto done;\n                    }\n                    else\n                    {\n                        if (!HLPFILE_RtfAddControl(rd, \"\\\\cell\\\\pard\")) goto done;\n                    }\n                }\n                else if (!HLPFILE_RtfAddControl(rd, \"\\\\par\")) goto done;\n                format += 1;\n                rd->char_pos++;\n                break;\n\n\t    case 0x83:\n                if (!HLPFILE_RtfAddControl(rd, \"\\\\tab\")) goto done;\n                format += 1;\n                rd->char_pos++;\n                break;\n\n#if 0\n\t    case 0x84:\n                format += 3;\n                break;\n#endif\n\n\t    case 0x86:\n\t    case 0x87:\n\t    case 0x88:\n                {\n                    BYTE    token = format[0];\n                    BYTE    type = format[1];\n\n                    /* FIXME: we don't use 'BYTE    pos = (*format - 0x86);' for the image position */\n                    format += 2;\n                    size = fetch_long(&format);\n\n                    switch (type)\n                    {\n                    case 0x22:\n                        fetch_ushort(&format); /* hot spot */\n                        /* fall through */\n                    case 0x03:\n                        switch (GET_SHORT(format, 0))\n                        {\n                        case 0:\n                            HLPFILE_RtfAddGfxByIndex(rd, page->file, GET_SHORT(format, 2));\n                            rd->char_pos++;\n                            break;\n                        case 1:\n                            WINE_FIXME(\"does it work ??? %x<%u>#%u\\n\",\n                                       GET_SHORT(format, 0),\n                                       size, GET_SHORT(format, 2));\n                            HLPFILE_RtfAddGfxByAddr(rd, page->file, format + 2, size - 4);\n                            rd->char_pos++;\n                           break;\n                        default:\n                            WINE_FIXME(\"??? %u\\n\", GET_SHORT(format, 0));\n                            break;\n                        }\n                        break;\n                    case 0x05:\n                        if (format[6] == '!')\n                        {\n                            char *curr = (char *)format + 7;\n                            char *search = curr;\n                            while (*search && (*search != ',')) search++;\n                            if (!*search)\n                            {\n                                WINE_FIXME(\"Button parse error %s\", curr);\n                                break;\n                            }\n                            WINE_TRACE(\"button => %s\\n\", debugstr_a(curr));\n                            HLPFILE_AllocLink(rd, hlp_link_macro, search + 1,\n                                        -1, 0, TRUE, FALSE, -2);\n                            sprintf(tmp, \"{\\\\field{\\\\*\\\\fldinst{ HYPERLINK \\\"%p\\\" }}{\\\\fldrslt{\", rd->current_link);\n                            if (!HLPFILE_RtfAddControl(rd, tmp)) goto done;\n                            if (curr == search)\n                            {\n                                if (!HLPFILE_RtfAddControl(rd, \"\\\\u9744}}}\")) goto done;\n                            }\n                            else\n                            {\n                                int len = search - curr;\n                                memcpy(tmp, curr, len);\n                                tmp[len] = 0;\n                                strcat(tmp, \"}}}\");\n                                if (!HLPFILE_RtfAddControl(rd, tmp)) goto done;\n                            }\n                        }\n                        else\n                            WINE_FIXME(\"Got an embedded element %s\\n\", debugstr_a((char *)format + 6));\n                        break;\n                    default:\n                        WINE_FIXME(\"Got a type %d picture\\n\", type);\n                        break;\n                    }\n                    format += size;\n                    if (token == 0x88)\n                        if (!HLPFILE_RtfAddControl(rd, \"\\\\qr\\\\par\\\\pard\")) goto done;\n                }\n                break;\n\n    \t    case 0x89:\n            {\n                unsigned fs;\n                format += 1;\n                if (!rd->current_link)\n                    WINE_FIXME(\"No existing link\\n\");\n                if (!HLPFILE_RtfAddControl(rd, \"}}}\")) goto done;\n                rd->current_link->cpMax = rd->char_pos;\n                rd->current_link = NULL;\n                rd->force_color = FALSE;\n                \n                // fix the font\n                switch (rd->font_scale)\n                {\n                    case 0: fs = page->file->fonts[lastfont].LogFont.lfHeight - 4; break;\n                    default:\n                    case 1: fs = page->file->fonts[lastfont].LogFont.lfHeight; break;\n                    case 2: fs = page->file->fonts[lastfont].LogFont.lfHeight + 4; break;\n                }\n                sprintf(tmp, \"\\\\f%d\\\\cf%d\\\\fs%d%s%s%s%s\",\n                            lastfont + 1, lastfont + 3, fs,\n                            page->file->fonts[lastfont].LogFont.lfWeight > 400 ? \"\\\\b\" : \"\\\\b0\",\n                            page->file->fonts[lastfont].LogFont.lfItalic ? \"\\\\i\" : \"\\\\i0\",\n                            page->file->fonts[lastfont].LogFont.lfUnderline ? \"\\\\ul\" : \"\\\\ul0\",\n                            page->file->fonts[lastfont].LogFont.lfStrikeOut ? \"\\\\strike\" : \"\\\\strike0\");\n                if (!HLPFILE_RtfAddControl(rd, tmp)) goto done;\n                break;\n            }\n\n            case 0x8B:\n                if (!HLPFILE_RtfAddControl(rd, \"\\\\~\")) goto done;\n                format += 1;\n                rd->char_pos++;\n                break;\n\n            case 0x8C:\n                if (!HLPFILE_RtfAddControl(rd, \"\\\\_\")) goto done;\n                /* FIXME: it could be that hyphen is also in input stream !! */\n                format += 1;\n                rd->char_pos++;\n                break;\n\n#if 0\n\t    case 0xA9:\n                format += 2;\n                break;\n#endif\n\n            case 0xC8:\n            case 0xCC:\n                WINE_TRACE(\"macro => %s\\n\", debugstr_a((char *)format + 3));\n                HLPFILE_AllocLink(rd, hlp_link_macro, (const char*)format + 3,\n                                  GET_USHORT(format, 1), 0, !(*format & 4), FALSE, -2);\n                sprintf(tmp, \"{\\\\field{\\\\*\\\\fldinst{ HYPERLINK \\\"%p\\\" }}{\\\\fldrslt{\", rd->current_link);\n                if (!HLPFILE_RtfAddControl(rd, tmp)) goto done;\n                format += 3 + GET_USHORT(format, 1);\n                break;\n\n            case 0xE0:\n            case 0xE1:\n                WINE_WARN(\"jump topic 1 => %u\\n\", GET_UINT(format, 1));\n                HLPFILE_AllocLink(rd, (*format & 1) ? hlp_link_link : hlp_link_popup,\n                                  page->file->lpszPath, -1, GET_UINT(format, 1), TRUE, FALSE, -2);\n                sprintf(tmp, \"{\\\\field{\\\\*\\\\fldinst{ HYPERLINK \\\"%p\\\" }}{\\\\fldrslt{\", rd->current_link);\n                if (!HLPFILE_RtfAddControl(rd, tmp)) goto done;\n                format += 5;\n                break;\n\n\t    case 0xE2:\n\t    case 0xE3:\n            case 0xE6:\n            case 0xE7:\n                WINE_WARN(\"jump topic 1 => %u\\n\", GET_UINT(format, 1));\n                HLPFILE_AllocLink(rd, (*format & 1) ? hlp_link_link : hlp_link_popup,\n                                  page->file->lpszPath, -1, GET_UINT(format, 1),\n                                  !(*format & 4), FALSE, -2);\n                sprintf(tmp, \"{\\\\field{\\\\*\\\\fldinst{ HYPERLINK \\\"%p\\\" }}{\\\\fldrslt{\", rd->current_link);\n                if (!HLPFILE_RtfAddControl(rd, tmp)) goto done;\n                format += 5;\n                break;\n\n\t    case 0xEA:\n            case 0xEB:\n            case 0xEE:\n            case 0xEF:\n                {\n                    const char*       ptr = (const char*) format + 8;\n                    BYTE        type = format[3];\n                    int         wnd = -1;\n\n                    switch (type)\n                    {\n                    case 1:\n                        wnd = *ptr;\n                        /* fall through */\n                    case 0:\n                        ptr = page->file->lpszPath;\n                        break;\n                    case 6:\n                        for (wnd = page->file->numWindows - 1; wnd >= 0; wnd--)\n                        {\n                            if (!stricmp(ptr, page->file->windows[wnd].name)) break;\n                        }\n                        if (wnd == -1)\n                            WINE_WARN(\"Couldn't find window info for %s\\n\", debugstr_a(ptr));\n                        ptr += strlen(ptr) + 1;\n                        /* fall through */\n                    case 4:\n                        break;\n                    default:\n                        WINE_WARN(\"Unknown link type %d\\n\", type);\n                        break;\n                    }\n                    HLPFILE_AllocLink(rd, (*format & 1) ? hlp_link_link : hlp_link_popup,\n                                      ptr, -1, GET_UINT(format, 4), !(*format & 4), FALSE, wnd);\n                    sprintf(tmp, \"{\\\\field{\\\\*\\\\fldinst{ HYPERLINK \\\"%p\\\" }}{\\\\fldrslt{\", rd->current_link);\n                    if (!HLPFILE_RtfAddControl(rd, tmp)) goto done;\n                }\n                format += 3 + GET_USHORT(format, 1);\n                break;\n\n\t    default:\n                WINE_WARN(\"format %02x\\n\", *format);\n                format++;\n\t    }\n\t}\n        if (bits & 0x0100)\n        {\n            if (buf[0x14] == HLP_TABLE)\n            {\n                WINE_FIXME(\"border in table\\n\");\n            }\n            else\n            if ((brdr & 0x09) && !HLPFILE_RtfAddControl(rd, \"{\\\\pard\\\\trowd\\\\clbrdrl\\\\brdrw1\\\\brdrcf2\\\\clbrdrt\\\\brdrw1\\\\brdrcf2\\\\clbrdrr\\\\brdrw1\\\\brdrcf2\\\\clbrdrb\\\\brdrw1\\\\cellx100000\\\\intbl\\\\f0\\\\fs0\\\\cell\\\\row\\\\pard}\")) goto done;\n        }\n    }\n    ret = TRUE;\ndone:\n\n    HeapFree(GetProcessHeap(), 0, text_base);\n    return ret;\n}\n\n/******************************************************************\n *\t\tHLPFILE_BrowsePage\n *\n */\nBOOL    HLPFILE_BrowsePage(HLPFILE_PAGE* page, struct RtfData* rd,\n                           unsigned font_scale, unsigned relative, HLPFILE_WINDOWINFO* info)\n{\n    HLPFILE     *hlpfile = page->file;\n    BYTE        *buf, *end;\n    DWORD       ref = page->reference;\n    unsigned    index, old_index = hlpfile->version <= 16 ? -1 : page->offset >> 15;\n    unsigned    offset, count = 0, offs = page->offset & 0x7fff;\n    unsigned    cpg, parlen;\n    char        tmp[1024];\n    const char* ck = NULL;\n    BOOL        found = FALSE;\n\n    if (page == page->file->cnt_page)\n    {\n        memset(rd, 0, sizeof(struct RtfData));\n        rd->data = HeapAlloc(GetProcessHeap(), 0, page->offset);\n        memcpy(rd->data, page->file->cnt_rtf, page->offset);\n        rd->ptr = rd->data + page->offset;\n        return TRUE;\n    }\n\n    rd->in_text = TRUE;\n    rd->data = rd->ptr = HeapAlloc(GetProcessHeap(), 0, rd->allocated = 32768);\n    rd->char_pos = 0;\n    rd->first_link = rd->current_link = NULL;\n    rd->first_hs = NULL;\n    rd->force_color = FALSE;\n    rd->font_scale = font_scale;\n    rd->relative = relative;\n    rd->char_pos_rel = 0;\n    rd->imgcnt = 0;\n\n    switch (hlpfile->charset)\n    {\n    case DEFAULT_CHARSET:\n    case ANSI_CHARSET:          cpg = 1252; break;\n    case SHIFTJIS_CHARSET:      cpg = 932; break;\n    case HANGEUL_CHARSET:       cpg = 949; break;\n    case GB2312_CHARSET:        cpg = 936; break;\n    case CHINESEBIG5_CHARSET:   cpg = 950; break;\n    case GREEK_CHARSET:         cpg = 1253; break;\n    case TURKISH_CHARSET:       cpg = 1254; break;\n    case HEBREW_CHARSET:        cpg = 1255; break;\n    case ARABIC_CHARSET:        cpg = 1256; break;\n    case BALTIC_CHARSET:        cpg = 1257; break;\n    case VIETNAMESE_CHARSET:    cpg = 1258; break;\n    case RUSSIAN_CHARSET:       cpg = 1251; break;\n    case EE_CHARSET:            cpg = 1250; break;\n    case THAI_CHARSET:          cpg = 874; break;\n    case JOHAB_CHARSET:         cpg = 1361; break;\n    case MAC_CHARSET:           ck = \"mac\"; break;\n    default:\n        WINE_FIXME(\"Unsupported charset %u\\n\", hlpfile->charset);\n        cpg = 1252;\n    }\n    if (ck)\n    {\n        rd->code_page = CP_MACCP;\n        sprintf(tmp, \"{\\\\rtf1\\\\%s\\\\deff1\", ck);\n        if (!HLPFILE_RtfAddControl(rd, tmp)) return FALSE;\n    }\n    else\n    {\n        if (hlpfile->charset == DEFAULT_CHARSET)\n        {\n            rd->code_page = CP_ACP;\n        }\n        else\n        {\n            rd->code_page = cpg;\n        }\n        sprintf(tmp, \"{\\\\rtf1\\\\ansi\\\\ansicpg%d\\\\deff1\", cpg);\n        if (!HLPFILE_RtfAddControl(rd, tmp)) return FALSE;\n    }\n\n    /* generate font table */\n    if (!HLPFILE_RtfAddControl(rd, \"{\\\\fonttbl\")) return FALSE;\n    if (!HLPFILE_RtfAddControl(rd, \"{\\\\f0 Arial;}\")) return FALSE;\n    for (index = 0; index < hlpfile->numFonts; index++)\n    {\n        const char* family;\n        const char* face = hlpfile->fonts[index].LogFont.lfFaceName;\n        switch (hlpfile->fonts[index].LogFont.lfPitchAndFamily & 0xF0)\n        {\n        case FF_MODERN:     family = \"modern\";  break;\n        case FF_ROMAN:      family = \"roman\";   break;\n        case FF_SWISS:      family = \"swiss\";   break;\n        case FF_SCRIPT:     family = \"script\";  break;\n        case FF_DECORATIVE: family = \"decor\";   break;\n        default:            family = \"nil\";     break;\n        }\n        if (!*face)\n            face = \"System\"; /* winhelp.exe: System, winhlp32.exe: GUI font? */\n        sprintf(tmp, \"{\\\\f%d\\\\f%s\\\\fprq%d\\\\fcharset%d %s;}\",\n                index + 1, family,\n                hlpfile->fonts[index].LogFont.lfPitchAndFamily & 0x0F,\n                hlpfile->fonts[index].LogFont.lfCharSet,\n                face);\n        if (!HLPFILE_RtfAddControl(rd, tmp)) return FALSE;\n    }\n    if (!HLPFILE_RtfAddControl(rd, \"}\")) return FALSE;\n    /* generate color table */\n    if (!HLPFILE_RtfAddControl(rd, \"{\\\\colortbl ;\\\\red0\\\\green128\\\\blue0;\")) return FALSE;\n    sprintf(tmp, \"\\\\red%d\\\\green%d\\\\blue%d;\",\n            GetRValue(info->sr_color),\n            GetGValue(info->sr_color),\n            GetBValue(info->sr_color));\n    if (!HLPFILE_RtfAddControl(rd, tmp)) return FALSE;\n    for (index = 0; index < hlpfile->numFonts; index++)\n    {\n        sprintf(tmp, \"\\\\red%d\\\\green%d\\\\blue%d;\",\n                GetRValue(hlpfile->fonts[index].color),\n                GetGValue(hlpfile->fonts[index].color),\n                GetBValue(hlpfile->fonts[index].color));\n        if (!HLPFILE_RtfAddControl(rd, tmp)) return FALSE;\n    }\n    if (!HLPFILE_RtfAddControl(rd, \"}\")) return FALSE;\n\n    do\n    {\n        if (hlpfile->version <= 16)\n        {\n            index  = (ref - 0x0C) / hlpfile->dsize;\n            offset = (ref - 0x0C) % hlpfile->dsize;\n        }\n        else\n        {\n            index  = (ref - 0x0C) >> 14;\n            offset = (ref - 0x0C) & 0x3FFF;\n        }\n\n        if (hlpfile->version <= 16 && index != old_index && old_index != -1)\n        {\n            /* we jumped to the next block, adjust pointers */\n            ref -= 12;\n            offset -= 12;\n        }\n\n        if (index >= hlpfile->topic_maplen) {WINE_WARN(\"maplen\\n\"); break;}\n        buf = hlpfile->topic_map[index] + offset;\n        if (buf + 0x15 >= hlpfile->topic_end) {WINE_WARN(\"extra\\n\"); break;}\n        end = min(buf + GET_UINT(buf, 0), hlpfile->topic_end);\n        if (index != old_index) {offs = 0; old_index = index;}\n\n        switch (buf[0x14])\n        {\n        case HLP_TOPICHDR:\n            if (count++) goto done;\n            break;\n        case HLP_DISPLAY30:\n        case HLP_DISPLAY:\n        case HLP_TABLE:\n            if ((relative <= index * 0x8000 + offs) && !found)\n            {\n                sprintf(tmp, \"{\\\\v\\\\pard scroll_%x}\", relative);\n                if (!HLPFILE_RtfAddControl(rd, tmp)) return FALSE;\n                found = TRUE;\n                rd->char_pos_rel = rd->char_pos;\n            }\n            if (!HLPFILE_BrowseParagraph(page, rd, buf, end, &parlen)) return FALSE;\n\n            offs += parlen;\n            break;\n        default:\n            WINE_ERR(\"buf[0x14] = %x\\n\", buf[0x14]);\n        }\n        if (hlpfile->version <= 16)\n        {\n            ref += GET_UINT(buf, 0xc);\n            if (GET_UINT(buf, 0xc) == 0)\n                break;\n        }\n        else\n            ref = GET_UINT(buf, 0xc);\n    } while (ref != 0xffffffff);\ndone:\n    page->first_link = rd->first_link;\n    page->first_hs = rd->first_hs;\n    return HLPFILE_RtfAddControl(rd, \"}\");\n}\n\n/******************************************************************\n *\t\tHLPFILE_ReadFont\n *\n *\n */\nstatic BOOL HLPFILE_ReadFont(HLPFILE* hlpfile)\n{\n    BYTE        *ref, *end;\n    unsigned    i, len, idx;\n    unsigned    face_num, dscr_num, face_offset, dscr_offset;\n    BYTE        flag, family;\n\n    if (!HLPFILE_FindSubFile(hlpfile, \"|FONT\", &ref, &end))\n    {\n        WINE_WARN(\"no subfile FONT\\n\");\n        hlpfile->numFonts = 0;\n        hlpfile->fonts = NULL;\n        return FALSE;\n    }\n\n    ref += 9;\n\n    face_num    = GET_USHORT(ref, 0);\n    dscr_num    = GET_USHORT(ref, 2);\n    face_offset = GET_USHORT(ref, 4);\n    dscr_offset = GET_USHORT(ref, 6);\n\n    WINE_TRACE(\"Got NumFacenames=%u@%u NumDesc=%u@%u\\n\",\n               face_num, face_offset, dscr_num, dscr_offset);\n\n    hlpfile->numFonts = dscr_num;\n    hlpfile->fonts = HeapAlloc(GetProcessHeap(), 0, sizeof(HLPFILE_FONT) * dscr_num);\n\n    len = (dscr_offset - face_offset) / face_num;\n\n    /* mvb font */\n    if (face_offset >= 16)\n    {\n        hlpfile->scale = 1;\n        hlpfile->rounderr = 0;\n        WINE_FIXME(\"mvb font: not implemented\\n\");\n        return FALSE;\n    }\n    /* new font */\n    if (face_offset >= 12)\n    {\n        hlpfile->scale = 1;\n        hlpfile->rounderr = 0;\n        WINE_FIXME(\"new font: not implemented\\n\");\n        return FALSE;\n    }\n    /* old font */\n    hlpfile->scale = 10;\n    hlpfile->rounderr = 5;\n/* EPP     for (i = face_offset; i < dscr_offset; i += len) */\n/* EPP         WINE_FIXME(\"[%d]: %*s\\n\", i / len, len, ref + i); */\n    for (i = 0; i < dscr_num; i++)\n    {\n        flag = ref[dscr_offset + i * 11 + 0];\n        family = ref[dscr_offset + i * 11 + 2];\n\n        hlpfile->fonts[i].LogFont.lfHeight = ref[dscr_offset + i * 11 + 1];\n        hlpfile->fonts[i].LogFont.lfWidth = 0;\n        hlpfile->fonts[i].LogFont.lfEscapement = 0;\n        hlpfile->fonts[i].LogFont.lfOrientation = 0;\n        hlpfile->fonts[i].LogFont.lfWeight = (flag & 1) ? 700 : 400;\n        hlpfile->fonts[i].LogFont.lfItalic = (flag & 2) != 0;\n        hlpfile->fonts[i].LogFont.lfUnderline = (flag & 4) != 0;\n        hlpfile->fonts[i].LogFont.lfStrikeOut = (flag & 8) != 0;\n        hlpfile->fonts[i].LogFont.lfCharSet = hlpfile->charset;\n        hlpfile->fonts[i].LogFont.lfOutPrecision = OUT_DEFAULT_PRECIS;\n        hlpfile->fonts[i].LogFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;\n        hlpfile->fonts[i].LogFont.lfQuality = DEFAULT_QUALITY;\n        hlpfile->fonts[i].LogFont.lfPitchAndFamily = DEFAULT_PITCH;\n\n        switch (family)\n        {\n        case 0x01: hlpfile->fonts[i].LogFont.lfPitchAndFamily |= FF_MODERN;     break;\n        case 0x02: hlpfile->fonts[i].LogFont.lfPitchAndFamily |= FF_ROMAN;      break;\n        case 0x03: hlpfile->fonts[i].LogFont.lfPitchAndFamily |= FF_SWISS;      break;\n        case 0x04: hlpfile->fonts[i].LogFont.lfPitchAndFamily |= FF_SCRIPT;     break;\n        case 0x05: hlpfile->fonts[i].LogFont.lfPitchAndFamily |= FF_DECORATIVE; break;\n        default: WINE_FIXME(\"Unknown family %u\\n\", family);\n        }\n        idx = GET_USHORT(ref, dscr_offset + i * 11 + 3);\n\n        if (idx < face_num)\n        {\n            memcpy(hlpfile->fonts[i].LogFont.lfFaceName, ref + face_offset + idx * len, min(len, LF_FACESIZE - 1));\n            hlpfile->fonts[i].LogFont.lfFaceName[min(len, LF_FACESIZE - 1)] = '\\0';\n        }\n        else\n        {\n            WINE_FIXME(\"Too high face ref (%u/%u)\\n\", idx, face_num);\n            strcpy(hlpfile->fonts[i].LogFont.lfFaceName, \"Helv\");\n        }\n        hlpfile->fonts[i].hFont = 0;\n        hlpfile->fonts[i].color = RGB(ref[dscr_offset + i * 11 + 5],\n                                      ref[dscr_offset + i * 11 + 6],\n                                      ref[dscr_offset + i * 11 + 7]);\n        if (!hlpfile->fonts[i].LogFont.lfHeight) // uses default createfont height\n        {\n            HFONT font;\n            if (font = CreateFontIndirectA(&hlpfile->fonts[i].LogFont))\n            {\n                HDC hdc = CreateCompatibleDC(NULL);\n                HFONT oldfont = SelectObject(hdc, font);\n                TEXTMETRICA tm;\n                if (GetTextMetricsA(hdc, &tm))\n                    hlpfile->fonts[i].LogFont.lfHeight = (tm.tmHeight * 72 * 2) / GetDeviceCaps(hdc, LOGPIXELSY);\n                SelectObject(hdc, oldfont);\n                DeleteDC(hdc);\n                DeleteObject(font);\n            }\n        }\n\t\n#define X(b,s) ((flag & (1 << b)) ? \"-\"s: \"\")\n        WINE_TRACE(\"Font[%d]: flags=%02x%s%s%s%s%s%s pSize=%u family=%u face=%s[%u] color=%08x\\n\",\n                   i, flag,\n                   X(0, \"bold\"),\n                   X(1, \"italic\"),\n                   X(2, \"underline\"),\n                   X(3, \"strikeOut\"),\n                   X(4, \"dblUnderline\"),\n                   X(5, \"smallCaps\"),\n                   ref[dscr_offset + i * 11 + 1],\n                   family,\n                   debugstr_a(hlpfile->fonts[i].LogFont.lfFaceName), idx,\n                   GET_UINT(ref, dscr_offset + i * 11 + 5) & 0x00FFFFFF);\n    }\n    return TRUE;\n}\n\n/***********************************************************************\n *\n *           HLPFILE_ReadFileToBuffer\n */\nstatic BOOL HLPFILE_ReadFileToBuffer(HLPFILE* hlpfile, HFILE hFile)\n{\n    BYTE  header[16], dummy[1];\n\n    if (_hread(hFile, header, 16) != 16) {WINE_WARN(\"header\\n\"); return FALSE;};\n\n    /* sanity checks */\n    if (GET_UINT(header, 0) != 0x00035F3F)\n    {WINE_WARN(\"wrong header\\n\"); return FALSE;};\n\n    hlpfile->file_buffer_size = GET_UINT(header, 12);\n    hlpfile->file_buffer = HeapAlloc(GetProcessHeap(), 0, hlpfile->file_buffer_size + 1);\n    if (!hlpfile->file_buffer) return FALSE;\n\n    memcpy(hlpfile->file_buffer, header, 16);\n    if (_hread(hFile, hlpfile->file_buffer + 16, hlpfile->file_buffer_size - 16) !=hlpfile->file_buffer_size - 16)\n    {WINE_WARN(\"filesize1\\n\"); return FALSE;};\n\n    if (_hread(hFile, dummy, 1) != 0) WINE_WARN(\"filesize2\\n\");\n\n    hlpfile->file_buffer[hlpfile->file_buffer_size] = '\\0'; /* FIXME: was '0', sounds backwards to me */\n\n    return TRUE;\n}\n\n/***********************************************************************\n *\n *           HLPFILE_SystemCommands\n */\nstatic BOOL HLPFILE_SystemCommands(HLPFILE* hlpfile)\n{\n    BYTE *buf, *ptr, *end;\n    HLPFILE_MACRO *macro, **m;\n    LPSTR p;\n    int len;\n    unsigned short magic, minor, major, flags, lcid = 0;\n\n    hlpfile->lpszTitle = NULL;\n    hlpfile->lpszCntPath = NULL;\n\n    if (!HLPFILE_FindSubFile(hlpfile, \"|SYSTEM\", &buf, &end)) return FALSE;\n\n    magic = GET_USHORT(buf + 9, 0);\n    minor = GET_USHORT(buf + 9, 2);\n    major = GET_USHORT(buf + 9, 4);\n    /* gen date on 4 bytes */\n    flags = GET_USHORT(buf + 9, 10);\n    WINE_TRACE(\"Got system header: magic=%04x version=%d.%d flags=%04x\\n\",\n               magic, major, minor, flags);\n    if (magic != 0x036C || major != 1)\n    {WINE_WARN(\"Wrong system header\\n\"); return FALSE;}\n    if (minor <= 16)\n    {\n        hlpfile->tbsize = 0x800;\n        hlpfile->compressed = FALSE;\n    }\n    else if (flags == 0)\n    {\n        hlpfile->tbsize = 0x1000;\n        hlpfile->compressed = FALSE;\n    }\n    else if (flags == 4)\n    {\n        hlpfile->tbsize = 0x1000;\n        hlpfile->compressed = TRUE;\n    }\n    else\n    {\n        hlpfile->tbsize = 0x800;\n        hlpfile->compressed = TRUE;\n    }\n\n    if (hlpfile->compressed)\n        hlpfile->dsize = 0x4000;\n    else\n        hlpfile->dsize = hlpfile->tbsize - 0x0C;\n\n    hlpfile->version = minor;\n    hlpfile->flags = flags;\n    hlpfile->charset = DEFAULT_CHARSET;\n    hlpfile->codepage = GetACP();\n\n    if (hlpfile->version <= 16)\n    {\n        char *str = (char*)buf + 0x15;\n        if (*str == 0)\n        {\n            str = strrchr(hlpfile->lpszPath, '\\\\') + 1;\n            if (str == 1)\n                str = hlpfile->lpszPath;\n        }\n\n        hlpfile->lpszTitle = HeapAlloc(GetProcessHeap(), 0, strlen(str) + 1);\n        if (!hlpfile->lpszTitle) return FALSE;\n        strcpy(hlpfile->lpszTitle, str);\n        WINE_TRACE(\"Title: %s\\n\", debugstr_a(hlpfile->lpszTitle));\n    }\n    else\n    {\n        for (ptr = buf + 0x15; ptr + 4 <= end; ptr += GET_USHORT(ptr, 2) + 4)\n        {\n            char *str = (char*) ptr + 4;\n            switch (GET_USHORT(ptr, 0))\n    \t{\n\t    case 1:\n                if (hlpfile->lpszTitle) {WINE_WARN(\"title\\n\"); break;}\n                hlpfile->lpszTitle = HeapAlloc(GetProcessHeap(), 0, strlen(str) + 1);\n                if (!hlpfile->lpszTitle) return FALSE;\n                strcpy(hlpfile->lpszTitle, str);\n                WINE_TRACE(\"Title: %s\\n\", debugstr_a(hlpfile->lpszTitle));\n                break;\n\n    \tcase 2:\n                if (hlpfile->lpszCopyright) {WINE_WARN(\"copyright\\n\"); break;}\n                hlpfile->lpszCopyright = HeapAlloc(GetProcessHeap(), 0, strlen(str) + 1);\n                if (!hlpfile->lpszCopyright) return FALSE;\n                strcpy(hlpfile->lpszCopyright, str);\n                WINE_TRACE(\"Copyright: %s\\n\", debugstr_a(hlpfile->lpszCopyright));\n                break;\n\n    \tcase 3:\n               if (GET_USHORT(ptr, 2) != 4) {WINE_WARN(\"system3\\n\");break;}\n               hlpfile->contents_start = GET_UINT(ptr, 4);\n               WINE_TRACE(\"Setting contents start at %08lx\\n\", hlpfile->contents_start);\n               break;\n\n        case 4:\n               macro = HeapAlloc(GetProcessHeap(), 0, sizeof(HLPFILE_MACRO) + strlen(str) + 1);\n               if (!macro) break;\n               p = (char*)macro + sizeof(HLPFILE_MACRO);\n               strcpy(p, str);\n               macro->lpszMacro = p;\n               macro->next = 0;\n               for (m = &hlpfile->first_macro; *m; m = &(*m)->next);\n               *m = macro;\n               break;\n\n        case 5:\n               if (GET_USHORT(ptr, 4 + 4) != 1)\n                       WINE_FIXME(\"More than one icon, picking up first\\n\");\n               /* 0x16 is sizeof(CURSORICONDIR), see user32/user_private.h */\n               hlpfile->hIcon = CreateIconFromResourceEx(ptr + 4 + 0x16,\n                               GET_USHORT(ptr, 2) - 0x16, TRUE,\n                               0x30000, 0, 0, 0);\n               break;\n\n        case 6:\n               if (GET_USHORT(ptr, 2) != 90) {WINE_WARN(\"system6\\n\");break;}\n\n               if (hlpfile->windows) \n                       hlpfile->windows = HeapReAlloc(GetProcessHeap(), 0, hlpfile->windows, \n                                       sizeof(HLPFILE_WINDOWINFO) * ++hlpfile->numWindows);\n               else \n                       hlpfile->windows = HeapAlloc(GetProcessHeap(), 0, \n                                       sizeof(HLPFILE_WINDOWINFO) * ++hlpfile->numWindows);\n\n               if (hlpfile->windows)\n               {\n                       HLPFILE_WINDOWINFO* wi = &hlpfile->windows[hlpfile->numWindows - 1];\n\n                       flags = GET_USHORT(ptr, 4);\n                       if (flags & 0x0001) strcpy(wi->type, &str[2]);\n                       else wi->type[0] = '\\0';\n                       if (flags & 0x0002) strcpy(wi->name, &str[12]);\n                       else wi->name[0] = '\\0';\n                       if (flags & 0x0004) strcpy(wi->caption, &str[21]);\n                       else lstrcpynA(wi->caption, hlpfile->lpszTitle, sizeof(wi->caption));\n                       wi->origin.x = (flags & 0x0008) ? GET_USHORT(ptr, 76) : CW_USEDEFAULT;\n                       wi->origin.y = (flags & 0x0010) ? GET_USHORT(ptr, 78) : CW_USEDEFAULT;\n                       wi->size.cx = (flags & 0x0020) ? GET_USHORT(ptr, 80) : CW_USEDEFAULT;\n                       wi->size.cy = (flags & 0x0040) ? GET_USHORT(ptr, 82) : CW_USEDEFAULT;\n                       wi->style = (flags & 0x0080) ? GET_USHORT(ptr, 84) : SW_SHOW;\n                       wi->win_style = WS_OVERLAPPEDWINDOW;\n                       wi->sr_color = (flags & 0x0100) ? GET_UINT(ptr, 86) : 0xFFFFFF;\n                       wi->nsr_color = (flags & 0x0200) ? GET_UINT(ptr, 90) : 0xFFFFFF;\n                       wi->flags = flags;\n                       WINE_TRACE(\"System-Window: flags=%c%c%c%c%c%c%c%c type=%s name=%s caption=%s (%d,%d)x(%d,%d)\\n\",\n                                       flags & 0x0001 ? 'T' : 't',\n                                       flags & 0x0002 ? 'N' : 'n',\n                                       flags & 0x0004 ? 'C' : 'c',\n                                       flags & 0x0008 ? 'X' : 'x',\n                                       flags & 0x0010 ? 'Y' : 'y',\n                                       flags & 0x0020 ? 'W' : 'w',\n                                       flags & 0x0040 ? 'H' : 'h',\n                                       flags & 0x0080 ? 'S' : 's',\n                                       debugstr_a(wi->type), debugstr_a(wi->name), debugstr_a(wi->caption), wi->origin.x, wi->origin.y,\n                                       wi->size.cx, wi->size.cy);\n               }\n               break;\n        case 8:\n               WINE_WARN(\"Citation: %s\\n\", debugstr_a((char *)ptr + 4));\n               break;\n        case 9:\n               lcid = GET_USHORT(ptr, 12);\n               break;\n        case 10:\n               len = strlen(hlpfile->lpszPath);\n               if (hlpfile->lpszCntPath) {WINE_WARN(\"cnt\\n\"); break;}\n               hlpfile->lpszCntPath = HeapAlloc(GetProcessHeap(), 0, len + 1);\n               if (!hlpfile->lpszCntPath) return FALSE;\n               lstrcpyA(hlpfile->lpszCntPath, hlpfile->lpszPath);\n               hlpfile->lpszCntPath[len-3] = 'C';\n               hlpfile->lpszCntPath[len-2] = 'N';\n               hlpfile->lpszCntPath[len-1] = 'T';\n               WINE_TRACE(\"CNT: '%s'\\n\", hlpfile->lpszCntPath);\n               break;               \n        case 11:\n               hlpfile->charset = ptr[4];\n               WINE_TRACE(\"Charset: %d\\n\", hlpfile->charset);\n               break;\n        default:\n               WINE_WARN(\"Unsupported SystemRecord[%d]\\n\", GET_USHORT(ptr, 0));\n        }\n        }\n    }\n    if (!lcid && (hlpfile->charset == DEFAULT_CHARSET))\n    {\n        BYTE *cbuf, *cend;\n        if (HLPFILE_FindSubFile(hlpfile, \"|CHARSET\", &cbuf, &cend) && ((cend - cbuf) >= 11))\n            hlpfile->charset = *(WORD *)(cbuf + 9);\n        if (((hlpfile->charset == DEFAULT_CHARSET) || (hlpfile->charset == ANSI_CHARSET)) && HLPFILE_FindSubFile(hlpfile, \"|FONT\", &cbuf, &cend))\n        {\n            cbuf += 9;\n            unsigned fnum = GET_USHORT(cbuf, 0);\n            unsigned foff = GET_USHORT(cbuf, 4);\n            unsigned len = (GET_USHORT(cbuf, 6) - foff) / fnum;\n            BYTE *pos = cbuf + foff;\n            for (int i = 0; i < fnum; i++, pos += len)\n            {\n                if (strstr(pos, \"\\xb2\\xd3\\xa9\\xfa\\xc5\\xe9\")) // MingLiU\n                {\n                    hlpfile->charset = CHINESEBIG5_CHARSET;\n                    break;\n                }\n                if (!strcmp(pos, \"CFShouSung\"))\n                    hlpfile->charset = GB2312_CHARSET; // don't break because big5 files have this font too\n                if (strstr(pos, \"\\x83\\x53\\x56\\x83\\x63\\x83\\x4e\") || // Gothic\n                    strstr(pos, \"\\x96\\xbe\\x92\\xa9\")) // Mincho\n                {\n                    hlpfile->charset = SHIFTJIS_CHARSET;\n                    break;\n                }\n                if (strstr(pos, \"\\xb8\\xed\\xc1\\xb6\") || // Myeongjo\n                    strstr(pos, \"\\xb0\\xed\\xb5\\xf1\") || // Gothic\n                    strstr(pos, \"\\xb9\\xd9\\xc5\\xc1\")) // Batang\n                {\n                    hlpfile->charset = HANGEUL_CHARSET;\n                    break;\n                }\n                if (strstr(pos, \"Arabic\"))\n                {\n                    hlpfile->charset = ARABIC_CHARSET;\n                    break;\n                }\n                if (!strcmp(pos, \"Arial Cyr\"))\n                {\n                    hlpfile->charset = RUSSIAN_CHARSET;\n                    break;\n                }\n                if (strstr(pos, \"Thai\") || !strcmp(pos, \"CordiaUPC\"))\n                {\n                    hlpfile->charset = THAI_CHARSET;\n                    break;\n                }\n            }\n        }\n    }\n    if ((hlpfile->charset != DEFAULT_CHARSET) && (hlpfile->charset != ANSI_CHARSET))\n    {\n        CHARSETINFO info;\n        TranslateCharsetInfo(hlpfile->charset, &info, TCI_SRCCHARSET);\n        hlpfile->codepage = info.ciACP;\n    }\n    else if (lcid)\n    {\n        CHARSETINFO info;\n        if (TranslateCharsetInfo(lcid, &info, TCI_SRCLOCALE))\n        {\n            hlpfile->codepage = info.ciACP;\n            hlpfile->charset = info.ciCharset;\n        }\n    }\n    if (!hlpfile->lpszCntPath)\n    {\n        len = strlen(hlpfile->lpszPath);\n        hlpfile->lpszCntPath = HeapAlloc(GetProcessHeap(), 0, len+1);\n        lstrcpyA(hlpfile->lpszCntPath, hlpfile->lpszPath);\n        hlpfile->lpszCntPath[len-3] = 'C';\n        hlpfile->lpszCntPath[len-2] = 'N';\n        hlpfile->lpszCntPath[len-1] = 'T';\n        WINE_TRACE(\"CNT not found, assuming '%s'\\n\", hlpfile->lpszCntPath);\n    }\n    if (!hlpfile->lpszTitle)\n        hlpfile->lpszTitle = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 128);\n    return TRUE;\n}\n\n/***********************************************************************\n *\n *           HLPFILE_GetContext\n */\nstatic BOOL HLPFILE_GetContext(HLPFILE *hlpfile)\n{\n    BYTE                *cbuf, *cend;\n    unsigned            clen;\n\n    if (!HLPFILE_FindSubFile(hlpfile, \"|CONTEXT\",  &cbuf, &cend))\n    {WINE_WARN(\"context0\\n\"); return FALSE;}\n\n    clen = cend - cbuf;\n    hlpfile->Context = HeapAlloc(GetProcessHeap(), 0, clen);\n    if (!hlpfile->Context) return FALSE;\n    memcpy(hlpfile->Context, cbuf, clen);\n\n    return TRUE;\n}\n\n/***********************************************************************\n *\n *           HLPFILE_GetTreeData\n */\nHLPFILE_XW *HLPFILE_GetTreeData(HLPFILE *hlpfile, char keyfile)\n{\n    BYTE                *cbuf, *cend;\n    unsigned            clen;\n    char                tree[] = \"|xWBTREE\";\n    char                data[] = \"|xWDATA\";\n    HLPFILE_XW          *xw = NULL;\n\n    keyfile = toupper(keyfile);\n\n    for (int i = 0; i < 5; i++)\n    {\n        if (hlpfile->xw[i].id == keyfile)\n            return &hlpfile->xw[i];\n        if (!hlpfile->xw[i].id)\n        {\n            xw = &hlpfile->xw[i];\n            break;\n        }\n    }\n    if (!xw)\n        return NULL;\n    tree[1] = keyfile;\n    data[1] = keyfile;\n\n    if (!HLPFILE_FindSubFile(hlpfile, tree, &cbuf, &cend)) return FALSE;\n    clen = cend - cbuf;\n    xw->tree = HeapAlloc(GetProcessHeap(), 0, clen);\n    if (!xw->tree) return FALSE;\n    memcpy(xw->tree, cbuf, clen);\n\n    if (!HLPFILE_FindSubFile(hlpfile, data, &cbuf, &cend))\n    {\n        WINE_ERR(\"corrupted help file: %s present but %s absent\\n\", tree, data);\n        HeapFree(GetProcessHeap(), 0, xw->tree);\n        return NULL;\n    }\n    clen = cend - cbuf;\n    xw->data = HeapAlloc(GetProcessHeap(), 0, clen);\n    if (!xw->data)\n    {\n        HeapFree(GetProcessHeap(), 0, xw->tree);\n        return NULL;\n    }\n    memcpy(xw->data, cbuf, clen);\n    xw->id = keyfile;\n\n    return xw;\n}\n/***********************************************************************\n *\n *           HLPFILE_GetKeywords\n */\nstatic BOOL HLPFILE_GetKeywords(HLPFILE *hlpfile)\n{\n    return HLPFILE_GetTreeData(hlpfile, 'K') ? TRUE : FALSE;\n}\n\n\n/***********************************************************************\n *\n *           HLPFILE_GetMap\n */\nstatic BOOL HLPFILE_GetMap(HLPFILE *hlpfile)\n{\n    BYTE                *cbuf, *cend;\n    unsigned            entries, i;\n\n    if (!HLPFILE_FindSubFile(hlpfile, \"|CTXOMAP\",  &cbuf, &cend))\n    {WINE_WARN(\"no map section\\n\"); return FALSE;}\n\n    entries = GET_USHORT(cbuf, 9);\n    hlpfile->Map = HeapAlloc(GetProcessHeap(), 0, entries * sizeof(HLPFILE_MAP));\n    if (!hlpfile->Map) return FALSE;\n    hlpfile->wMapLen = entries;\n    for (i = 0; i < entries; i++)\n    {\n        hlpfile->Map[i].lMap = GET_UINT(cbuf+11,i*8);\n        hlpfile->Map[i].offset = GET_UINT(cbuf+11,i*8+4);\n    }\n    return TRUE;\n}\n\n/***********************************************************************\n *\n *           HLPFILE_GetTOMap\n */\nstatic BOOL HLPFILE_GetTOMap(HLPFILE *hlpfile)\n{\n    BYTE                *cbuf, *cend;\n    unsigned            clen;\n\n    if (!HLPFILE_FindSubFile(hlpfile, \"|TOMAP\",  &cbuf, &cend))\n    {WINE_WARN(\"no tomap section\\n\"); return FALSE;}\n\n    clen = cend - cbuf - 9;\n    hlpfile->TOMap = HeapAlloc(GetProcessHeap(), 0, clen);\n    if (!hlpfile->TOMap) return FALSE;\n    memcpy(hlpfile->TOMap, cbuf+9, clen);\n    hlpfile->wTOMapLen = clen/4;\n    return TRUE;\n}\n\n/***********************************************************************\n *\n *           HLPFILE_GetTree\n */\nstatic BOOL HLPFILE_GetTree(HLPFILE *hlpfile, char *name, BYTE **buf)\n{\n    BYTE                *cbuf, *cend;\n    unsigned            clen;\n\n    if (!HLPFILE_FindSubFile(hlpfile, name,  &cbuf, &cend))\n    {WINE_WARN(\"no %s section\\n\", name); return FALSE;}\n\n    clen = cend - cbuf;\n    *buf = HeapAlloc(GetProcessHeap(), 0, clen);\n    if (!*buf) return FALSE;\n    memcpy(*buf, cbuf, clen);\n    return TRUE;\n}\n\n\n/***********************************************************************\n *\n *           DeleteMacro\n */\nstatic void HLPFILE_DeleteMacro(HLPFILE_MACRO* macro)\n{\n    HLPFILE_MACRO*      next;\n\n    while (macro)\n    {\n        next = macro->next;\n        HeapFree(GetProcessHeap(), 0, macro);\n        macro = next;\n    }\n}\n\nstatic void HLPFILE_DeleteLink(HLPFILE_LINK *link)\n{\n    HLPFILE_LINK*       next;\n\n    while(link)\n    {\n        next = link->next;\n        HeapFree(GetProcessHeap(), 0, link);\n        link = next;\n    }\n}\n\nstatic void HLPFILE_DeleteRow(HLPFILE_ROW *row)\n{\n    HLPFILE_ROW*       next;\n\n    while(row)\n    {\n        next = row->next;\n        HeapFree(GetProcessHeap(), 0, row);\n        row = next;\n    }\n}\n\n/***********************************************************************\n *\n *           DeletePage\n */\nstatic void HLPFILE_DeletePage(HLPFILE_PAGE* page)\n{\n    HLPFILE_PAGE* next;\n\n    while (page)\n    {\n        next = page->next;\n        HLPFILE_DeleteMacro(page->first_macro);\n        HLPFILE_DeleteLink(page->first_link);\n        HLPFILE_DeleteRow(page->first_var_row);\n        HeapFree(GetProcessHeap(), 0, page);\n        page = next;\n    }\n}\n\n/***********************************************************************\n *\n *           HLPFILE_FreeHlpFile\n */\nvoid HLPFILE_FreeHlpFile(HLPFILE* hlpfile)\n{\n    unsigned i;\n\n    if (!hlpfile || --hlpfile->wRefCount > 0) return;\n\n    if (hlpfile->next) hlpfile->next->prev = hlpfile->prev;\n    if (hlpfile->prev) hlpfile->prev->next = hlpfile->next;\n    else first_hlpfile = hlpfile->next;\n\n    if (hlpfile->numFonts)\n    {\n        for (i = 0; i < hlpfile->numFonts; i++)\n        {\n            DeleteObject(hlpfile->fonts[i].hFont);\n        }\n        HeapFree(GetProcessHeap(), 0, hlpfile->fonts);\n    }\n\n    if (hlpfile->numBmps)\n    {\n        for (i = 0; i < hlpfile->numBmps; i++)\n        {\n            DeleteObject(hlpfile->bmps[i]);\n        }\n        HeapFree(GetProcessHeap(), 0, hlpfile->bmps);\n    }\n\n    HLPFILE_DeletePage(hlpfile->first_page);\n    HLPFILE_DeleteMacro(hlpfile->first_macro);\n\n    DestroyIcon(hlpfile->hIcon);\n    if (hlpfile->numWindows)    HeapFree(GetProcessHeap(), 0, hlpfile->windows);\n    if (hlpfile->lpszCntPath)   HeapFree(GetProcessHeap(), 0, hlpfile->lpszCntPath);\n    HeapFree(GetProcessHeap(), 0, hlpfile->Context);\n    HeapFree(GetProcessHeap(), 0, hlpfile->Map);\n    HeapFree(GetProcessHeap(), 0, hlpfile->lpszTitle);\n    HeapFree(GetProcessHeap(), 0, hlpfile->lpszCopyright);\n    HeapFree(GetProcessHeap(), 0, hlpfile->file_buffer);\n    HeapFree(GetProcessHeap(), 0, hlpfile->phrases_offsets);\n    HeapFree(GetProcessHeap(), 0, hlpfile->phrases_buffer);\n    HeapFree(GetProcessHeap(), 0, hlpfile->topic_map);\n    HeapFree(GetProcessHeap(), 0, hlpfile->help_on_file);\n    for (int i = 0; i < 5; i++)\n    {\n        if (hlpfile->xw[i].id)\n        {\n            HeapFree(GetProcessHeap(), 0, hlpfile->xw[i].tree);\n            HeapFree(GetProcessHeap(), 0, hlpfile->xw[i].data);\n        }\n    }\n    if (hlpfile->TOMap)\n        HeapFree(GetProcessHeap(), 0, hlpfile->TOMap);\n    if (hlpfile->ttlbtree)\n        HeapFree(GetProcessHeap(), 0, hlpfile->ttlbtree);\n    if (hlpfile->viola)\n        HeapFree(GetProcessHeap(), 0, hlpfile->viola);\n    if (hlpfile->rose)\n        HeapFree(GetProcessHeap(), 0, hlpfile->rose);\n    if (hlpfile->cnt_page)\n    {\n        HeapFree(GetProcessHeap(), 0, hlpfile->cnt_rtf);\n        HLPFILE_DeletePage(hlpfile->cnt_page);\n    }\n    HeapFree(GetProcessHeap(), 0, hlpfile);\n}\n\n/***********************************************************************\n *\n *           HLPFILE_UncompressLZ77_Phrases\n */\nstatic BOOL HLPFILE_UncompressLZ77_Phrases(HLPFILE* hlpfile)\n{\n    UINT i, num, dec_size, head_size;\n    BYTE *buf, *end;\n\n    if (!HLPFILE_FindSubFile(hlpfile, \"|Phrases\", &buf, &end)) return FALSE;\n\n    if (hlpfile->version <= 16)\n        head_size = 13;\n    else\n        head_size = 17;\n\n    num = hlpfile->num_phrases = GET_USHORT(buf, 9);\n    if (buf + 2 * num + 0x13 >= end) {WINE_WARN(\"1a\\n\"); return FALSE;};\n\n    if (hlpfile->version <= 16)\n        dec_size = end - buf - 15 - 2 * num;\n    else\n        dec_size = HLPFILE_UncompressedLZ77_Size(buf + 0x13 + 2 * num, end);\n\n    hlpfile->phrases_offsets = HeapAlloc(GetProcessHeap(), 0, sizeof(unsigned) * (num + 1));\n    hlpfile->phrases_buffer  = HeapAlloc(GetProcessHeap(), 0, dec_size);\n    if (!hlpfile->phrases_offsets || !hlpfile->phrases_buffer)\n    {\n        HeapFree(GetProcessHeap(), 0, hlpfile->phrases_offsets);\n        HeapFree(GetProcessHeap(), 0, hlpfile->phrases_buffer);\n        return FALSE;\n    }\n\n    for (i = 0; i <= num; i++)\n        hlpfile->phrases_offsets[i] = GET_USHORT(buf, head_size + 2 * i) - 2 * num - 2;\n\n    if (hlpfile->version <= 16)\n        memcpy(hlpfile->phrases_buffer, buf + 15 + 2*num, dec_size);\n    else\n        HLPFILE_UncompressLZ77(buf + 0x13 + 2 * num, end, (BYTE*)hlpfile->phrases_buffer);\n\n    hlpfile->hasPhrases = TRUE;\n    return TRUE;\n}\n\n/***********************************************************************\n *\n *           HLPFILE_Uncompress_Phrases40\n */\nstatic BOOL HLPFILE_Uncompress_Phrases40(HLPFILE* hlpfile)\n{\n    UINT num;\n    INT dec_size, cpr_size;\n    BYTE *buf_idx, *end_idx;\n    BYTE *buf_phs, *end_phs;\n    ULONG* ptr, mask = 0;\n    unsigned int i;\n    unsigned short bc, n;\n\n    if (!HLPFILE_FindSubFile(hlpfile, \"|PhrIndex\", &buf_idx, &end_idx) ||\n        !HLPFILE_FindSubFile(hlpfile, \"|PhrImage\", &buf_phs, &end_phs)) return FALSE;\n\n    ptr = (ULONG*)(buf_idx + 9 + 28);\n    bc = GET_USHORT(buf_idx, 9 + 24) & 0x0F;\n    num = hlpfile->num_phrases = GET_USHORT(buf_idx, 9 + 4);\n\n    WINE_TRACE(\"Index: Magic=%08x #entries=%u CpsdSize=%u PhrImgSize=%u\\n\"\n               \"\\tPhrImgCprsdSize=%u 0=%u bc=%x ukn=%x\\n\",\n               GET_UINT(buf_idx, 9 + 0),\n               GET_UINT(buf_idx, 9 + 4),\n               GET_UINT(buf_idx, 9 + 8),\n               GET_UINT(buf_idx, 9 + 12),\n               GET_UINT(buf_idx, 9 + 16),\n               GET_UINT(buf_idx, 9 + 20),\n               GET_USHORT(buf_idx, 9 + 24),\n               GET_USHORT(buf_idx, 9 + 26));\n\n    dec_size = GET_UINT(buf_idx, 9 + 12);\n    cpr_size = GET_UINT(buf_idx, 9 + 16);\n\n    if (dec_size != cpr_size &&\n        dec_size != HLPFILE_UncompressedLZ77_Size(buf_phs + 9, end_phs))\n    {\n        WINE_WARN(\"size mismatch %u %u\\n\",\n                  dec_size, HLPFILE_UncompressedLZ77_Size(buf_phs + 9, end_phs));\n        dec_size = max(dec_size, HLPFILE_UncompressedLZ77_Size(buf_phs + 9, end_phs));\n    }\n\n    hlpfile->phrases_offsets = HeapAlloc(GetProcessHeap(), 0, sizeof(unsigned) * (num + 1));\n    hlpfile->phrases_buffer  = HeapAlloc(GetProcessHeap(), 0, dec_size);\n    if (!hlpfile->phrases_offsets || !hlpfile->phrases_buffer)\n    {\n        HeapFree(GetProcessHeap(), 0, hlpfile->phrases_offsets);\n        HeapFree(GetProcessHeap(), 0, hlpfile->phrases_buffer);\n        return FALSE;\n    }\n\n#define getbit() ((mask <<= 1) ? (*ptr & mask) != 0: (*++ptr & (mask=1)) != 0)\n\n    hlpfile->phrases_offsets[0] = 0;\n    ptr--; /* as we'll first increment ptr because mask is 0 on first getbit() call */\n    for (i = 0; i < num; i++)\n    {\n        for (n = 1; getbit(); n += 1 << bc);\n        if (getbit()) n++;\n        if (bc > 1 && getbit()) n += 2;\n        if (bc > 2 && getbit()) n += 4;\n        if (bc > 3 && getbit()) n += 8;\n        if (bc > 4 && getbit()) n += 16;\n        hlpfile->phrases_offsets[i + 1] = hlpfile->phrases_offsets[i] + n;\n    }\n#undef getbit\n\n    if (dec_size == cpr_size)\n        memcpy(hlpfile->phrases_buffer, buf_phs + 9, dec_size);\n    else\n        HLPFILE_UncompressLZ77(buf_phs + 9, end_phs, (BYTE*)hlpfile->phrases_buffer);\n\n    hlpfile->hasPhrases40 = TRUE;\n    return TRUE;\n}\n\n/***********************************************************************\n *\n *           HLPFILE_Uncompress_Topic\n */\nstatic BOOL HLPFILE_Uncompress_Topic(HLPFILE* hlpfile)\n{\n    BYTE *buf, *ptr, *end, *newptr;\n    unsigned int i, newsize = 0;\n    unsigned int topic_size;\n\n    if (!HLPFILE_FindSubFile(hlpfile, \"|TOPIC\", &buf, &end))\n    {WINE_WARN(\"topic0\\n\"); return FALSE;}\n\n    buf += 9; /* Skip file header */\n    topic_size = end - buf;\n    if (hlpfile->compressed)\n    {\n        hlpfile->topic_maplen = (topic_size - 1) / hlpfile->tbsize + 1;\n\n        for (i = 0; i < hlpfile->topic_maplen; i++)\n        {\n            ptr = buf + i * hlpfile->tbsize;\n\n            /* I don't know why, it's necessary for printman.hlp */\n            if (ptr + 0x44 > end) ptr = end - 0x44;\n\n            newsize += HLPFILE_UncompressedLZ77_Size(ptr + 0xc, min(end, ptr + hlpfile->tbsize));\n        }\n\n        hlpfile->topic_map = HeapAlloc(GetProcessHeap(), 0,\n                                       hlpfile->topic_maplen * sizeof(hlpfile->topic_map[0]) + newsize);\n        if (!hlpfile->topic_map) return FALSE;\n        newptr = (BYTE*)(hlpfile->topic_map + hlpfile->topic_maplen);\n        hlpfile->topic_end = newptr + newsize;\n\n        for (i = 0; i < hlpfile->topic_maplen; i++)\n        {\n            ptr = buf + i * hlpfile->tbsize;\n            if (ptr + 0x44 > end) ptr = end - 0x44;\n\n            hlpfile->topic_map[i] = newptr;\n            newptr = HLPFILE_UncompressLZ77(ptr + 0xc, min(end, ptr + hlpfile->tbsize), newptr);\n        }\n    }\n    else\n    {\n        /* basically, we need to copy the TopicBlockSize byte pages\n         * (removing the first 0x0C) in one single area in memory\n         */\n        hlpfile->topic_maplen = (topic_size - 1) / hlpfile->tbsize + 1;\n        hlpfile->topic_map = HeapAlloc(GetProcessHeap(), 0,\n                                       hlpfile->topic_maplen * (sizeof(hlpfile->topic_map[0]) + hlpfile->dsize));\n        if (!hlpfile->topic_map) return FALSE;\n        newptr = (BYTE*)(hlpfile->topic_map + hlpfile->topic_maplen);\n        hlpfile->topic_end = newptr + topic_size;\n\n        for (i = 0; i < hlpfile->topic_maplen; i++)\n        {\n            hlpfile->topic_map[i] = newptr + i * hlpfile->dsize;\n            memcpy(hlpfile->topic_map[i], buf + i * hlpfile->tbsize + 0x0C, hlpfile->dsize);\n        }\n    }\n    return TRUE;\n}\n\n/***********************************************************************\n *\n *           HLPFILE_AddPage\n */\nstatic BOOL HLPFILE_AddPage(HLPFILE *hlpfile, const BYTE *buf, const BYTE *end, unsigned ref, unsigned offset)\n{\n    HLPFILE_PAGE* page;\n    const BYTE*   title;\n    UINT          titlesize, blocksize, datalen;\n    char*         ptr;\n    char*         temp;\n    HLPFILE_MACRO*macro;\n\n    blocksize = GET_UINT(buf, 0);\n    datalen = GET_UINT(buf, 0x10);\n    title = buf + datalen;\n    if (title > end) {WINE_WARN(\"page2\\n\"); return FALSE;};\n\n    titlesize = GET_UINT(buf, 4);\n    page = HeapAlloc(GetProcessHeap(), 0, sizeof(HLPFILE_PAGE) + titlesize * 2 + 2);\n    if (!page) return FALSE;\n    page->lpszTitle = (char*)page + sizeof(HLPFILE_PAGE);\n    temp = HeapAlloc(GetProcessHeap(), 0, titlesize + 1);\n\n    if (titlesize > blocksize - datalen)\n    {\n        /* need to decompress */\n        if (hlpfile->hasPhrases)\n            HLPFILE_Uncompress2(hlpfile, title, end, (BYTE*)temp, (BYTE*)temp + titlesize);\n        else if (hlpfile->hasPhrases40)\n            HLPFILE_Uncompress3(hlpfile, temp, temp + titlesize, title, end);\n        else\n        {\n            WINE_FIXME(\"Text size is too long, splitting\\n\");\n            titlesize = blocksize - datalen;\n            memcpy(temp, title, titlesize);\n        }\n    }\n    else\n        memcpy(temp, title, titlesize);\n\n    temp[titlesize] = '\\0';\n    MultiByteToWideChar(hlpfile->codepage, 0, temp, -1, page->lpszTitle, titlesize + 1);\n\n    if (hlpfile->first_page)\n    {\n        hlpfile->last_page->next = page;\n        page->prev = hlpfile->last_page;\n        hlpfile->last_page = page;\n    }\n    else\n    {\n        hlpfile->first_page = page;\n        hlpfile->last_page = page;\n        page->prev = NULL;\n    }\n\n    page->file            = hlpfile;\n    page->next            = NULL;\n    page->first_macro     = NULL;\n    page->first_link      = NULL;\n    page->first_var_row   = NULL;\n    page->wNumber         = GET_UINT(buf, 0x21);\n    page->offset          = offset;\n    page->reference       = ref;\n\n    page->browse_bwd = GET_UINT(buf, 0x19);\n    page->browse_fwd = GET_UINT(buf, 0x1D);\n\n    if (hlpfile->version <= 16)\n    {\n        if (page->browse_bwd == 0xFFFF || page->browse_bwd == 0xFFFFFFFF)\n            page->browse_bwd = 0xFFFFFFFF;\n        else\n            page->browse_bwd = hlpfile->TOMap[page->browse_bwd];\n\n        if (page->browse_fwd == 0xFFFF || page->browse_fwd == 0xFFFFFFFF)\n            page->browse_fwd = 0xFFFFFFFF;\n        else\n            page->browse_fwd = hlpfile->TOMap[page->browse_fwd];\n    }\n\n    WINE_TRACE(\"Added page[%d]: title=%s %08x << %08x >> %08x\\n\",\n               page->wNumber, debugstr_a(page->lpszTitle),\n               page->browse_bwd, page->offset, page->browse_fwd);\n\n    /* now load macros */\n    ptr = temp + strlen(temp) + 1;\n    while (ptr < temp + titlesize)\n    {\n        unsigned len = strlen(ptr);\n        char*    macro_str;\n\n        WINE_TRACE(\"macro: %s\\n\", debugstr_a(ptr));\n        macro = HeapAlloc(GetProcessHeap(), 0, sizeof(HLPFILE_MACRO) + len + 1);\n        macro->lpszMacro = macro_str = (char*)(macro + 1);\n        memcpy(macro_str, ptr, len + 1);\n        /* FIXME: shall we really link macro in reverse order ??\n         * may produce strange results when played at page opening\n         */\n        macro->next = page->first_macro;\n        page->first_macro = macro;\n        ptr += len + 1;\n    }\n    HeapFree(GetProcessHeap(), 0, temp);\n\n    return TRUE;\n}\n\n/***********************************************************************\n *\n *           HLPFILE_SkipParagraph\n */\nstatic BOOL HLPFILE_SkipParagraph(HLPFILE *hlpfile, const BYTE *buf, const BYTE *end, unsigned* len)\n{\n    const BYTE  *tmp;\n\n    if (!hlpfile->first_page) {WINE_WARN(\"no page\\n\"); return FALSE;};\n    if (buf + 0x19 > end) {WINE_WARN(\"header too small\\n\"); return FALSE;};\n\n    tmp = buf + 0x15;\n    if (buf[0x14] == HLP_DISPLAY || buf[0x14] == HLP_TABLE)\n    {\n        fetch_long(&tmp);\n        *len = fetch_ushort(&tmp);\n    }\n    else *len = end-buf-15;\n\n    return TRUE;\n}\n\n/***********************************************************************\n *\n *           HLPFILE_ReadCntFile\n *\n */\nstatic void HLPFILE_ReadCntFile(HLPFILE *hlpfile)\n{\n    char *str, *next_str;\n    char *buf;\n    int l, len, read, curl = 1;\n    struct RtfData rd = {0};\n    HANDLE h;\n    char tmp[256];\n    WCHAR tmpW[256];\n    HLPFILE_PAGE *cnt;\n    BOOL cnt_found = FALSE;\n\n    rd.in_text = TRUE;\n\n    h = CreateFileA(hlpfile->lpszCntPath, GENERIC_READ, FILE_SHARE_READ,\n                   NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);\n    if (h == INVALID_HANDLE_VALUE) return NULL;\n\n    len = GetFileSize(h, NULL);\n    if (len == INVALID_FILE_SIZE)\n    {\n        CloseHandle(h);\n        return;\n    }\n    buf = HeapAlloc(GetProcessHeap(), 0, len + 1);\n    buf[len] = 0;\n    if (!buf)\n    {\n        CloseHandle(h);\n        return;\n    }\n    if (!ReadFile(h, buf, len, &read, NULL))\n    {\n        CloseHandle(h);\n        HeapFree(GetProcessHeap(), 0, buf);\n        return;\n    }\n    CloseHandle(h);\n    rd.ptr = rd.data = HeapAlloc(GetProcessHeap(), 0, 1024);\n    rd.allocated = 1024;\n    cnt = (HLPFILE_PAGE *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(HLPFILE_PAGE));\n    if (!HLPFILE_RtfAddControl(&rd, \"{\\\\rtf1\\\\ansi\\\\urtf0\\\\deff0{\\\\fonttbl{\\\\f0\\\\fcharset0 Times New Roman;}}\")) goto errexit;\n    if (!HLPFILE_RtfAddControl(&rd, \"{\\\\stylesheet{ Normal;}{\\\\s1 heading 1;}{\\\\s2 heading 2;}{\\\\s3 heading 3;}{\\\\s4 heading 4;}{\\\\s5 heading 5;}{\\\\s6 heading 6;}{\\\\s7 heading 7;}{\\\\s8 heading 8;}{\\\\s9 heading 9;}}\")) goto errexit;\n    if (!HLPFILE_RtfAddControl(&rd, \"\\\\viewkind2\")) goto errexit;\n    str = buf;\n    while (str)\n    {\n        unsigned char *start, *end;\n\n        next_str = strchr(str, '\\n');\n        if (next_str)\n        {\n            end = next_str-1;\n            while (end > str && isspace(*end)) *end--=0;\n            next_str++;\n        }\n\n        start = str;\n        while (isspace(*start)) start++;\n        if (*start == ':' || *start == 0)\n        {\n            // TODO: handle index\n            if (!strncmp(start, \":Title \", 7))\n            {\n                start += 7;\n                while (isspace(*start)) start++;\n                len = strlen(start);\n                cnt = HeapReAlloc(GetProcessHeap(), 0, cnt, sizeof(HLPFILE_PAGE) + (len + 1) * 2);\n                cnt->lpszTitle = ((BYTE *)cnt) + sizeof(HLPFILE_PAGE);\n                MultiByteToWideChar(hlpfile->codepage, 0, start, -1, cnt->lpszTitle, len);\n            }\n            str = next_str;\n            continue;\n        }\n        l = strtol(start, NULL, 10);\n        if ((l <= 0) || (l > 9))\n        {\n            str = next_str;\n            continue;\n        }\n\tcnt_found = TRUE;\n        while (isdigit(*start)) start++;\n        while (isspace(*start)) start++;\n        end = strchr(start, '=');\n        while (end && (*(end - 1) == '\\\\')) end = strchr(end + 1, '=');\n        if (!end)\n        {\n            if (l > curl) curl++;\n            else curl = l;\n        }\n        else if (l < curl) curl = l + 1;\n        if (curl == 1)\n            sprintf(tmp, \"\\\\pard\\\\s%d \", curl);\n        else            \n            sprintf(tmp, \"\\\\pard\\\\collapsed\\\\s%d \", curl);\n        if (!HLPFILE_RtfAddControl(&rd, tmp)) goto errexit;\n        if (end)\n        {\n            char *index = end + 1;\n            char *file = strchr(index, '@');\n            char *wnd = strchr(index, '>');\n            *end = 0;\n            if (file)\n            {\n                *file = 0;\n                file++;\n            }\n            if (wnd)\n            {\n                *wnd = 0;\n                wnd++;\n            }\n            HLPFILE_AllocLink2(&rd, hlp_link_link, file ? file : hlpfile->lpszPath, -1, HLPFILE_Hash(index), FALSE, FALSE, -2, wnd);\n            sprintf(tmp, \"{\\\\field{\\\\*\\\\fldinst{ HYPERLINK \\\"%p\\\" }}{\\\\fldrslt{\", rd.current_link);\n            if (!HLPFILE_RtfAddControl(&rd, tmp)) goto errexit;\n            rd.current_link = NULL;\n        }\n        else curl++;\n        // outline only works with utf8 codepage\n        MultiByteToWideChar(hlpfile->codepage, 0, start, -1, tmpW, 256);\n        tmpW[255] = 0;\n        WideCharToMultiByte(CP_UTF8, 0, tmpW, -1, tmp, 256, NULL, NULL);\n        tmp[255] = 0;\n        if (!HLPFILE_RtfAddControl(&rd, tmp)) goto errexit;\n        if (end && !HLPFILE_RtfAddControl(&rd, \"}}}\")) goto errexit;\n        if (!HLPFILE_RtfAddControl(&rd, \"\\\\par\")) goto errexit;\n        str = next_str;\n    }\n    if (!cnt_found) goto errexit; // empty cnt file\n    if (!HLPFILE_RtfAddControl(&rd, \"}\")) goto errexit;\n    hlpfile->cnt_rtf = rd.data;\n    hlpfile->cnt_page = cnt;\n    cnt->file = hlpfile;\n    cnt->first_link = rd.first_link;\n    cnt->offset = rd.ptr - rd.data;\n    if (!cnt->lpszTitle) \n        cnt->lpszTitle = (WCHAR*)L\"Contents\";\n    HeapFree(GetProcessHeap(), 0, buf);\n    return;\nerrexit:\n    HeapFree(GetProcessHeap(), 0, buf);\n    HeapFree(GetProcessHeap(), 0, rd.data);\n    HeapFree(GetProcessHeap(), 0, cnt);\n    return;\n}\n\n/***********************************************************************\n *\n *           HLPFILE_DoReadHlpFile\n */\nstatic BOOL HLPFILE_DoReadHlpFile(HLPFILE *hlpfile, LPCSTR lpszPath)\n{\n    BOOL        ret;\n    HFILE       hFile;\n    OFSTRUCT    ofs;\n    BYTE*       buf;\n    DWORD       ref = 0x0C;\n    unsigned    index, old_index, offset, len, offs, topicoffset;\n\n    hFile = OpenFile(lpszPath, &ofs, OF_READ);\n    if (hFile == HFILE_ERROR) return FALSE;\n\n    ret = HLPFILE_ReadFileToBuffer(hlpfile, hFile);\n    _lclose(hFile);\n    if (!ret) return FALSE;\n\n    if (!HLPFILE_SystemCommands(hlpfile)) return FALSE;\n\n    if (hlpfile->version <= 16 && !HLPFILE_GetTOMap(hlpfile)) return FALSE;\n\n    /* load phrases support */\n    if (!HLPFILE_UncompressLZ77_Phrases(hlpfile))\n        HLPFILE_Uncompress_Phrases40(hlpfile);\n\n    if (!HLPFILE_Uncompress_Topic(hlpfile)) return FALSE;\n    if (!HLPFILE_ReadFont(hlpfile)) return FALSE;\n\n    old_index = -1;\n    offs = 0;\n    do\n    {\n        BYTE*   end;\n\n        if (hlpfile->version <= 16)\n        {\n            index  = (ref - 0x0C) / hlpfile->dsize;\n            offset = (ref - 0x0C) % hlpfile->dsize;\n        }\n        else\n        {\n            index  = (ref - 0x0C) >> 14;\n            offset = (ref - 0x0C) & 0x3FFF;\n        }\n\n        if (hlpfile->version <= 16 && index != old_index && old_index != -1)\n        {\n            /* we jumped to the next block, adjust pointers */\n            ref -= 12;\n            offset -= 12;\n        }\n\n        WINE_TRACE(\"ref=%08x => [%u/%u]\\n\", ref, index, offset);\n\n        if (index >= hlpfile->topic_maplen) {WINE_WARN(\"maplen\\n\"); break;}\n        buf = hlpfile->topic_map[index] + offset;\n        if (buf + 0x15 >= hlpfile->topic_end) {WINE_WARN(\"extra\\n\"); break;}\n        end = min(buf + GET_UINT(buf, 0), hlpfile->topic_end);\n        if (index != old_index) {offs = 0; old_index = index;}\n\n        switch (buf[0x14])\n\t{\n\tcase HLP_TOPICHDR: /* Topic Header */\n            if (hlpfile->version <= 16)\n                topicoffset = ref + index * 12;\n            else\n                topicoffset = index * 0x8000 + offs;\n            if (!HLPFILE_AddPage(hlpfile, buf, end, ref, topicoffset)) return FALSE;\n            break;\n\n\tcase HLP_DISPLAY30:\n\tcase HLP_DISPLAY:\n\tcase HLP_TABLE:\n            if (!HLPFILE_SkipParagraph(hlpfile, buf, end, &len)) return FALSE;\n            offs += len;\n            break;\n\n\tdefault:\n            WINE_ERR(\"buf[0x14] = %x\\n\", buf[0x14]);\n\t}\n\n        if (hlpfile->version <= 16)\n        {\n            ref += GET_UINT(buf, 0xc);\n            if (GET_UINT(buf, 0xc) == 0)\n                break;\n        }\n        else\n            ref = GET_UINT(buf, 0xc);\n    } while (ref != 0xffffffff);\n\n    HLPFILE_GetKeywords(hlpfile);\n    HLPFILE_GetMap(hlpfile);\n    HLPFILE_GetTree(hlpfile, \"|TTLBTREE\", &hlpfile->ttlbtree);\n    HLPFILE_GetTree(hlpfile, \"|Viola\", &hlpfile->viola);\n    HLPFILE_GetTree(hlpfile, \"|Rose\", &hlpfile->rose);\n    HLPFILE_ReadCntFile(hlpfile);\n    if (hlpfile->version <= 16) return TRUE;\n    return HLPFILE_GetContext(hlpfile);\n}\n\n/***********************************************************************\n *\n *           HLPFILE_ReadHlpFile\n */\nHLPFILE *HLPFILE_ReadHlpFile(LPCSTR lpszPath)\n{\n    HLPFILE*      hlpfile;\n\n    for (hlpfile = first_hlpfile; hlpfile; hlpfile = hlpfile->next)\n    {\n        if (!strcmp(lpszPath, hlpfile->lpszPath))\n        {\n            hlpfile->wRefCount++;\n            return hlpfile;\n        }\n    }\n\n    hlpfile = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,\n                        sizeof(HLPFILE) + strlen(lpszPath) + 1);\n    if (!hlpfile) return 0;\n\n    hlpfile->lpszPath           = (char*)hlpfile + sizeof(HLPFILE);\n    hlpfile->contents_start     = 0xFFFFFFFF;\n    hlpfile->next               = first_hlpfile;\n    hlpfile->wRefCount          = 1;\n\n    strcpy(hlpfile->lpszPath, lpszPath);\n\n    first_hlpfile = hlpfile;\n    if (hlpfile->next) hlpfile->next->prev = hlpfile;\n\n    if (!HLPFILE_DoReadHlpFile(hlpfile, lpszPath))\n    {\n        HLPFILE_FreeHlpFile(hlpfile);\n        hlpfile = 0;\n    }\n\n    return hlpfile;\n}\n"
  },
  {
    "path": "winhlp32/hlpfile.h",
    "content": "/*\n * Help Viewer\n *\n * Copyright    1996 Ulrich Schmid\n *              2002, 2008 Eric Pouech\n *              2007 Kirill K. Smirnov\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\nstruct tagHelpFile;\n\ntypedef struct \n{\n    char        type[10];\n    char        name[9];\n    char        caption[51];\n    POINT       origin;\n    SIZE        size;\n    int         style;\n    WORD        flags;\n    DWORD       win_style;\n    COLORREF    sr_color;       /* color for scrollable region */\n    COLORREF    nsr_color;      /* color for non scrollable region */\n} HLPFILE_WINDOWINFO;\n\ntypedef struct tagHlpFileLink\n{\n    enum {hlp_link_link, hlp_link_popup, hlp_link_macro} cookie;\n    LPCSTR      string;         /* name of the file to for the link (NULL if same file) */\n    LONG        hash;           /* topic index */\n    unsigned    bClrChange : 1; /* true if the link is green & underlined */\n    unsigned    bHotSpot : 1;   /* true if the link is an hotspot (actually HLPFILE_HOTSPOTLINK) */\n    unsigned    window;         /* window number for displaying the link (-1 is current) */\n    DWORD       cpMin;\n    DWORD       cpMax;\n    struct tagHlpFileLink* next;\n    LPCSTR      windowName;\n} HLPFILE_LINK;\n\ntypedef struct tagHlpFileHotSpotLink\n{\n    HLPFILE_LINK link;\n    unsigned    x;\n    unsigned    y;\n    unsigned    width;\n    unsigned    height;\n    unsigned\timgidx;\n    struct tagHlpFileHotSpotLink *next; /* don't have to walk all the links */\n} HLPFILE_HOTSPOTLINK;\n\ntypedef struct tagHlpFileMacro\n{\n    LPCSTR                      lpszMacro;\n    struct tagHlpFileMacro*     next;\n} HLPFILE_MACRO;\n\ntypedef struct tagHlpFileRow\n{\n    char cols;\n    long cpos;\n    struct tagHlpFileRow* next;\n    struct tagHlpFileRow* prev;\n    WORD width[1];\n} HLPFILE_ROW;\n\ntypedef struct tagHlpFilePage\n{\n    WCHAR*                      lpszTitle;\n    HLPFILE_MACRO*              first_macro;\n\n    HLPFILE_LINK*               first_link;\n    HLPFILE_HOTSPOTLINK*        first_hs;\n    HLPFILE_ROW*                first_var_row;\n\n    unsigned                    wNumber;\n    unsigned                    offset;\n    DWORD                       reference;\n    struct tagHlpFilePage*      next;\n    struct tagHlpFilePage*      prev;\n\n    DWORD                       browse_bwd;\n    DWORD                       browse_fwd;\n\n    struct tagHlpFileFile*      file;\n} HLPFILE_PAGE;\n\ntypedef struct\n{\n    LONG                        lMap;\n    unsigned long               offset;\n} HLPFILE_MAP;\n\ntypedef struct\n{\n    LOGFONTA                    LogFont;\n    HFONT                       hFont;\n    COLORREF                    color;\n} HLPFILE_FONT;\n\ntypedef struct\n{\n    char id;\n    BYTE *tree;\n    BYTE *data;\n} HLPFILE_XW;\n\ntypedef struct tagHlpFileFile\n{\n    BYTE*                       file_buffer;\n    UINT                        file_buffer_size;\n    LPSTR                       lpszPath;\n    LPSTR                       lpszTitle;\n    LPSTR                       lpszCopyright;\n    LPSTR                       lpszCntPath;\n    HLPFILE_PAGE*               first_page;\n    HLPFILE_PAGE*               last_page;\n    HLPFILE_MACRO*              first_macro;\n    BYTE*                       Context;\n    HLPFILE_XW                  xw[5];\n    unsigned                    wMapLen;\n    HLPFILE_MAP*                Map;\n    unsigned                    wTOMapLen;\n    unsigned*                   TOMap;\n    unsigned long               contents_start;\n    BYTE*                       ttlbtree;\n    BYTE*                       rose;\n    BYTE*                       viola;\n\n    BYTE*                       cnt_rtf;\n    HLPFILE_PAGE*               cnt_page;\n\n    struct tagHlpFileFile*      prev;\n    struct tagHlpFileFile*      next;\n\n    unsigned                    wRefCount;\n\n    unsigned short              version;\n    unsigned short              flags;\n    unsigned short              charset;\n    unsigned short              codepage;\n    unsigned short              tbsize;     /* topic block size */\n    unsigned short              dsize;      /* decompress size */\n    BOOL                        compressed;\n    BOOL                        hasPhrases;   /* file has |Phrases */\n    BOOL                        hasPhrases40; /* file has |PhrIndex/|PhrImage */\n    UINT                        num_phrases;\n    unsigned*                   phrases_offsets;\n    char*                       phrases_buffer;\n\n    BYTE**                      topic_map;\n    BYTE*                       topic_end;\n    UINT                        topic_maplen;\n\n    unsigned                    numBmps;\n    HBITMAP*                    bmps;\n\n    unsigned                    numFonts;\n    HLPFILE_FONT*               fonts;\n\n    unsigned                    numWindows;\n    HLPFILE_WINDOWINFO*         windows;\n    HICON                       hIcon;\n\n    BOOL                        has_popup_color;\n    COLORREF                    popup_color;\n\n    LPSTR                       help_on_file;\n\n    int                         scale;\n    int                         rounderr;\n} HLPFILE;\n\n/*\n * Compare function type for HLPFILE_BPTreeSearch function.\n *\n * PARAMS\n *     p       [I] pointer to testing block (key + data)\n *     key     [I] pointer to key value to look for\n *     leaf    [I] whether this function called for index of leaf page\n *     next    [O] pointer to pointer to next block\n */\ntypedef int (*HLPFILE_BPTreeCompare)(void *p, const void *key,\n                                     int leaf, void **next);\n\n/*\n * Callback function type for HLPFILE_BPTreeEnum function.\n *\n * PARAMS\n *     p       [I]  pointer to data block\n *     next    [O]  pointer to pointer to next block\n *     cookie  [IO] cookie data\n */\ntypedef void (*HLPFILE_BPTreeCallback)(void *p, void **next, void *cookie);\n\nHLPFILE*      HLPFILE_ReadHlpFile(LPCSTR lpszPath);\nHLPFILE_PAGE* HLPFILE_PageByHash(HLPFILE* hlpfile, LONG lHash, ULONG* relative);\nHLPFILE_PAGE* HLPFILE_PageByMap(HLPFILE* hlpfile, LONG lMap, ULONG* relative);\nHLPFILE_PAGE* HLPFILE_PageByOffset(HLPFILE* hlpfile, LONG offset, ULONG* relative);\nLONG          HLPFILE_Hash(LPCSTR lpszContext);\nvoid          HLPFILE_FreeHlpFile(HLPFILE*);\nHLPFILE_XW *HLPFILE_GetTreeData(HLPFILE *hlpfile, char keyfile);\nvoid  HLPFILE_BPTreeEnum(BYTE*, HLPFILE_BPTreeCallback cb, void *cookie);\n\nstruct RtfData {\n    BOOL        in_text;\n    char*       data;           /* RTF stream start */\n    char*       ptr;            /* current position in stream */\n    unsigned    allocated;      /* overall allocated size */\n    unsigned    char_pos;       /* current char position (in richedit) */\n    char*       where;          /* pointer to feed back richedit */\n    unsigned    font_scale;     /* how to scale fonts */\n    HLPFILE_LINK*first_link;\n    HLPFILE_LINK*current_link;\n    HLPFILE_HOTSPOTLINK*first_hs;\n    BOOL        force_color;\n    unsigned    relative;       /* offset within page to lookup for */\n    unsigned    char_pos_rel;   /* char_pos correspondinf to relative */\n    unsigned    code_page;\n    unsigned\timgcnt;\n};\n\nBOOL          HLPFILE_BrowsePage(HLPFILE_PAGE*, struct RtfData* rd,\n                                 unsigned font_scale, unsigned relative,\n\t\t\t\t HLPFILE_WINDOWINFO* info);\n\n#define HLP_DISPLAY30 0x01     /* version 3.0 displayable information */\n#define HLP_TOPICHDR  0x02     /* topic header information */\n#define HLP_DISPLAY   0x20     /* version 3.1 displayable information */\n#define HLP_TABLE     0x23     /* version 3.1 table */\n"
  },
  {
    "path": "winhlp32/macro.c",
    "content": "/*\n * Help Viewer\n *\n * Copyright 1996 Ulrich Schmid\n * Copyright 2002, 2008 Eric Pouech\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#define WIN32_LEAN_AND_MEAN\n\n#include <stdio.h>\n\n#include \"windows.h\"\n#include \"commdlg.h\"\n#include \"shellapi.h\"\n#include \"winhelp.h\"\n\n#ifdef _DEBUG\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(winhelp);\n#else\n#define WINE_TRACE(...)\n#define WINE_WARN(...)\n#define WINE_FIXME(...)\n#define WINE_ERR(...)\n#define debugstr_a(...)\n#endif\n\n\n/**************************************************/\n/*               Macro table                      */\n/**************************************************/\nstruct MacroDesc {\n    const char* name;\n    const char* alias;\n    BOOL        isBool;\n    const char* arguments;\n    void       *fn;\n};\n\nstatic struct MacroDesc*MACRO_Loaded /* = NULL */;\nstatic unsigned         MACRO_NumLoaded /* = 0 */;\n\n/*******      helper functions     *******/\n\nstatic char* StrDup(const char* str)\n{\n    char* dst;\n    dst=HeapAlloc(GetProcessHeap(),0,strlen(str)+1);\n    strcpy(dst, str);\n    return dst;\n}\n\nstatic WINHELP_BUTTON**        MACRO_LookupButton(WINHELP_WINDOW* win, LPCSTR name)\n{\n    WINHELP_BUTTON**    b;\n\n    for (b = &win->first_button; *b; b = &(*b)->next)\n        if (!lstrcmpiA(name, (*b)->lpszID)) break;\n    return b;\n}\n\nstatic BOOL MACRO_Load(struct MacroDesc *macro)\n{\n    void               *fn = NULL;\n    WINHELP_DLL*        dll;\n    char *              dll_name = macro->alias;\n    BOOL                ret = TRUE;\n\n    if (!dll_name)\n        return FALSE;\n\n    /* FIXME: are the registered DLLs global or linked to the current file ???\n     * We assume globals (as we did for macros, but is this really the case ???)\n     */\n    for (dll = Globals.dlls; dll; dll = dll->next)\n    {\n        if (!strcmp(dll->name, dll_name)) break;\n    }\n    if (!dll)\n    {\n        HANDLE hLib = LoadLibraryA(dll_name);\n\n        /* FIXME: the library will not be unloaded until exit of program \n         * We don't send the DW_TERM message\n         */\n        WINE_TRACE(\"Loading %s\\n\", debugstr_a(dll_name));\n        /* FIXME: should look in the directory where current hlpfile\n         * is loaded from\n         */\n        if (hLib == NULL)\n        {\n            /* FIXME: internationalisation for error messages */\n            WINE_FIXME(\"Cannot find dll %s\\n\", debugstr_a(dll_name));\n            ret = FALSE;\n        }\n        else if ((dll = HeapAlloc(GetProcessHeap(), 0, sizeof(*dll))))\n        {\n            dll->hLib = hLib;\n            dll->name = StrDup(dll_name); /* FIXME: never freed */\n            dll->next = Globals.dlls;\n            Globals.dlls = dll;\n            dll->handler = (WINHELP_LDLLHandler)GetProcAddress(dll->hLib, \"LDLLHandler\");\n            dll->class = dll->handler ? (dll->handler)(DW_WHATMSG, 0, 0) : DC_NOMSG;\n            WINE_TRACE(\"Got class %x for DLL %s\\n\", dll->class, debugstr_a(dll_name));\n            if (dll->class & DC_INITTERM) dll->handler(DW_INIT, 0, 0);\n            if (dll->class & DC_CALLBACKS) dll->handler(DW_CALLBACKS, (LONG_PTR)&Callbacks, 0);\n        }\n        else WINE_WARN(\"OOM\\n\");\n    }\n    if (dll && !(fn = GetProcAddress(dll->hLib, macro->name)))\n    {\n        /* FIXME: internationalisation for error messages */\n        WINE_FIXME(\"Cannot find proc %s in dll %s\\n\", debugstr_a(dll_name), debugstr_a(macro->name));\n        ret = FALSE;\n    }\n    HeapFree(GetProcessHeap(),0,dll_name);\n    macro->alias = NULL;\n    macro->fn = fn;\n    return ret;\n}\n\nstatic int MACRO_DoLookUp(struct MacroDesc* start, const char* name, struct lexret* lr, unsigned len)\n{\n    struct MacroDesc*   md;\n\n    for (md = start; md->name && len != 0; md++, len--)\n    {\n        if (strcasecmp(md->name, name) == 0 || (md->alias != NULL && strcasecmp(md->alias, name) == 0))\n        {\n            if (lr)\n            {\n                lr->proto = md->arguments;\n                lr->function = md->fn;\n                if (!md->fn)\n                    MACRO_Load(md);\n            }\n            return md->isBool ? BOOL_FUNCTION : VOID_FUNCTION;\n        }\n    }\n    return EMPTY;\n}\n\n/******* some forward declarations *******/\nstatic void CALLBACK MACRO_JumpID(LPCSTR lpszPathWindow, LPCSTR topic_id);\n\n/******* real macro implementation *******/\n\nvoid CALLBACK MACRO_CreateButton(LPCSTR id, LPCSTR name, LPCSTR macro)\n{\n    WINHELP_WINDOW *win = MACRO_CurrentWindow();\n    WINHELP_BUTTON *button, **b;\n    LONG            size;\n    LPSTR           ptr;\n\n    WINE_TRACE(\"(%s, %s, %s)\\n\", debugstr_a(id), debugstr_a(name), debugstr_a(macro));\n\n    size = sizeof(WINHELP_BUTTON) + strlen(id) + strlen(name) + strlen(macro) + 3;\n\n    button = HeapAlloc(GetProcessHeap(), 0, size);\n    if (!button) return;\n\n    button->next  = 0;\n    button->hWnd  = 0;\n\n    ptr = (char*)button + sizeof(WINHELP_BUTTON);\n\n    strcpy(ptr, id);\n    button->lpszID = ptr;\n    ptr += strlen(id) + 1;\n\n    strcpy(ptr, name);\n    button->lpszName = ptr;\n    ptr += strlen(name) + 1;\n\n    strcpy(ptr, macro);\n    button->lpszMacro = ptr;\n\n    button->wParam = WH_FIRST_BUTTON;\n    for (b = &win->first_button; *b; b = &(*b)->next)\n        button->wParam = max(button->wParam, (*b)->wParam + 1);\n    *b = button;\n\n    WINHELP_LayoutMainWindow(win);\n}\n\nstatic void CALLBACK MACRO_DestroyButton(LPCSTR str)\n{\n    WINE_FIXME(\"(%s)\\n\", debugstr_a(str));\n}\n\nvoid CALLBACK MACRO_DisableButton(LPCSTR id)\n{\n    WINHELP_BUTTON**    b;\n\n    WINE_TRACE(\"(%s)\\n\", debugstr_a(id));\n\n    b = MACRO_LookupButton(MACRO_CurrentWindow(), id);\n    if (!*b) {WINE_FIXME(\"Couldn't find button %s\\n\", debugstr_a(id)); return;}\n\n    EnableWindow((*b)->hWnd, FALSE);\n}\n\nstatic void CALLBACK MACRO_EnableButton(LPCSTR id)\n{\n    WINHELP_BUTTON**    b;\n\n    WINE_TRACE(\"(%s)\\n\", debugstr_a(id));\n\n    b = MACRO_LookupButton(MACRO_CurrentWindow(), id);\n    if (!*b) {WINE_FIXME(\"Couldn't find button %s\\n\", debugstr_a(id)); return;}\n\n    EnableWindow((*b)->hWnd, TRUE);\n}\n\nvoid CALLBACK MACRO_JumpContents(LPCSTR lpszPath, LPCSTR lpszWindow)\n{\n    HLPFILE*    hlpfile;\n\n    WINE_TRACE(\"(%s, %s)\\n\", debugstr_a(lpszPath), debugstr_a(lpszWindow));\n    if ((hlpfile = WINHELP_LookupHelpFile(lpszPath)))\n        WINHELP_OpenHelpWindow(HLPFILE_PageByHash, hlpfile, 0,\n                               WINHELP_GetWindowInfo(hlpfile, lpszWindow),\n                               SW_NORMAL);\n}\n\n\nvoid CALLBACK MACRO_About(void)\n{\n    WCHAR name[256];\n    HICON icon = LoadImageW( Globals.hInstance, MAKEINTRESOURCEW(IDI_WINHELP),\n                             IMAGE_ICON, 48, 48, LR_SHARED );\n    LoadStringW( Globals.hInstance, STID_WINE_HELP, name, ARRAY_SIZE( name ));\n    ShellAboutW( MACRO_CurrentWindow()->hMainWnd, name, NULL, icon );\n}\n\nstatic void CALLBACK MACRO_AddAccelerator(LONG u1, LONG u2, LPCSTR str)\n{\n    WINE_FIXME(\"(%u, %u, %s)\\n\", u1, u2, debugstr_a(str));\n}\n\nstatic void CALLBACK MACRO_ALink(LPCSTR keywords, LONG type, LPCSTR topic, LPCSTR window)\n{\n    WINE_TRACE(\"(%s, %u, %s, %s)\\n\", debugstr_a(keywords), type, debugstr_a(topic), debugstr_a(window));\n    WINHELP_SearchKey('A', keywords, type, topic, window, MACRO_CurrentWindow(), MACRO_CurrentWindow()->page->file);\n}\n\nvoid CALLBACK MACRO_Annotate(void)\n{\n    WINE_FIXME(\"()\\n\");\n}\n\nstatic void CALLBACK MACRO_AppendItem(LPCSTR str1, LPCSTR str2, LPCSTR str3, LPCSTR str4)\n{\n    WINE_FIXME(\"(%s, %s, %s, %s)\\n\", debugstr_a(str1), debugstr_a(str2), debugstr_a(str3), debugstr_a(str4));\n}\n\nstatic void CALLBACK MACRO_Back(void)\n{\n    WINHELP_WINDOW* win = MACRO_CurrentWindow();\n\n    WINE_TRACE(\"()\\n\");\n\n    if (win && win->back.index >= 2)\n        WINHELP_CreateHelpWindow(&win->back.set[--win->back.index - 1], SW_SHOW, FALSE);\n}\n\nstatic void CALLBACK MACRO_BackFlush(void)\n{\n    WINHELP_WINDOW* win = MACRO_CurrentWindow();\n\n    WINE_TRACE(\"()\\n\");\n\n    if (win) WINHELP_DeleteBackSet(win);\n}\n\nvoid CALLBACK MACRO_BookmarkDefine(void)\n{\n    WINE_FIXME(\"()\\n\");\n}\n\nstatic void CALLBACK MACRO_BookmarkMore(void)\n{\n    WINE_FIXME(\"()\\n\");\n}\n\nstatic void CALLBACK MACRO_BrowseButtons(void)\n{\n    HLPFILE_PAGE*       page = MACRO_CurrentWindow()->page;\n    ULONG               relative;\n\n    WINE_TRACE(\"()\\n\");\n\n    MACRO_CreateButton(\"BTN_PREV\", \"&<<\", \"Prev()\");\n    MACRO_CreateButton(\"BTN_NEXT\", \"&>>\", \"Next()\");\n\n    if (!HLPFILE_PageByOffset(page->file, page->browse_bwd, &relative))\n        MACRO_DisableButton(\"BTN_PREV\");\n    if (!HLPFILE_PageByOffset(page->file, page->browse_fwd, &relative))\n        MACRO_DisableButton(\"BTN_NEXT\");\n}\n\nstatic void CALLBACK MACRO_ChangeButtonBinding(LPCSTR id, LPCSTR macro)\n{\n    WINHELP_WINDOW*     win = MACRO_CurrentWindow();\n    WINHELP_BUTTON*     button;\n    WINHELP_BUTTON**    b;\n    LONG                size;\n    LPSTR               ptr;\n\n    WINE_TRACE(\"(%s, %s)\\n\", debugstr_a(id), debugstr_a(macro));\n\n    b = MACRO_LookupButton(win, id);\n    if (!*b) {WINE_FIXME(\"Couldn't find button %s\\n\", debugstr_a(id)); return;}\n\n    size = sizeof(WINHELP_BUTTON) + strlen(id) +\n        strlen((*b)->lpszName) + strlen(macro) + 3;\n\n    button = HeapAlloc(GetProcessHeap(), 0, size);\n    if (!button) return;\n\n    button->next  = (*b)->next;\n    button->hWnd  = (*b)->hWnd;\n    button->wParam = (*b)->wParam;\n\n    ptr = (char*)button + sizeof(WINHELP_BUTTON);\n\n    strcpy(ptr, id);\n    button->lpszID = ptr;\n    ptr += strlen(id) + 1;\n\n    strcpy(ptr, (*b)->lpszName);\n    button->lpszName = ptr;\n    ptr += strlen((*b)->lpszName) + 1;\n\n    strcpy(ptr, macro);\n    button->lpszMacro = ptr;\n\n    *b = button;\n\n    WINHELP_LayoutMainWindow(win);\n}\n\nstatic void CALLBACK MACRO_ChangeEnable(LPCSTR id, LPCSTR macro)\n{\n    WINE_TRACE(\"(%s, %s)\\n\", debugstr_a(id), debugstr_a(macro));\n\n    MACRO_ChangeButtonBinding(id, macro);\n    MACRO_EnableButton(id);\n}\n\nstatic void CALLBACK MACRO_ChangeItemBinding(LPCSTR str1, LPCSTR str2)\n{\n    WINE_FIXME(\"(%s, %s)\\n\", debugstr_a(str1), debugstr_a(str2));\n}\n\nstatic void CALLBACK MACRO_CheckItem(LPCSTR str)\n{\n    WINE_FIXME(\"(%s)\\n\", debugstr_a(str));\n}\n\nstatic void CALLBACK MACRO_CloseSecondarys(void)\n{\n    WINHELP_WINDOW *win;\n    WINHELP_WINDOW *next;\n\n    WINE_TRACE(\"()\\n\");\n    for (win = Globals.win_list; win; win = next)\n    {\n        next = win->next;\n        if (lstrcmpiA(win->info->name, \"main\"))\n            WINHELP_ReleaseWindow(win);\n    }\n}\n\nstatic void CALLBACK MACRO_CloseWindow(LPCSTR lpszWindow)\n{\n    WINHELP_WINDOW *win;\n    WINHELP_WINDOW *next;\n\n    WINE_TRACE(\"(%s)\\n\", debugstr_a(lpszWindow));\n\n    if (!lpszWindow || !lpszWindow[0])\n    {\n        WINHELP_ReleaseWindow(MACRO_CurrentWindow());\n        return;\n    }\n\n    for (win = Globals.win_list; win; win = next)\n    {\n        next = win->next;\n        if (!lstrcmpiA(win->info->name, lpszWindow))\n            WINHELP_ReleaseWindow(win);\n    }\n}\n\nstatic void CALLBACK MACRO_Compare(LPCSTR str)\n{\n    WINE_FIXME(\"(%s)\\n\", debugstr_a(str));\n}\n\nstatic void CALLBACK MACRO_Contents(void)\n{\n    HLPFILE_PAGE*       page = MACRO_CurrentWindow()->page;\n\n    WINE_TRACE(\"()\\n\");\n\n    if (page)\n        MACRO_JumpContents(page->file->lpszPath, NULL);\n}\n\nstatic void CALLBACK MACRO_ControlPanel(LPCSTR str1, LPCSTR str2, LONG u)\n{\n    WINE_FIXME(\"(%s, %s, %u)\\n\", debugstr_a(str1), debugstr_a(str2), u);\n}\n\nvoid CALLBACK MACRO_CopyDialog(void)\n{\n    WINE_FIXME(\"()\\n\");\n}\n\nstatic void CALLBACK MACRO_CopyTopic(void)\n{\n    WINE_FIXME(\"()\\n\");\n}\n\nstatic void CALLBACK MACRO_DeleteItem(LPCSTR str)\n{\n    WINE_FIXME(\"(%s)\\n\", debugstr_a(str));\n}\n\nstatic void CALLBACK MACRO_DeleteMark(LPCSTR str)\n{\n    WINE_FIXME(\"(%s)\\n\", debugstr_a(str));\n}\n\nstatic void CALLBACK MACRO_DisableItem(LPCSTR str)\n{\n    WINE_FIXME(\"(%s)\\n\", debugstr_a(str));\n}\n\nstatic void CALLBACK MACRO_EnableItem(LPCSTR str)\n{\n    WINE_FIXME(\"(%s)\\n\", debugstr_a(str));\n}\n\nstatic void CALLBACK MACRO_EndMPrint(void)\n{\n    WINE_FIXME(\"()\\n\");\n}\n\nstatic void CALLBACK MACRO_ExecFile(LPCSTR pgm, LPCSTR args, LONG cmd_show, LPCSTR topic)\n{\n    HINSTANCE ret = 0;\n    char buffer[256];\n    HWND hwnd = Globals.active_win ? Globals.active_win->hMainWnd : NULL;\n\n    WINE_TRACE(\"(%s, %s, %u, %s)\\n\",\n               debugstr_a(pgm), debugstr_a(args), cmd_show, debugstr_a(topic));\n\n    strcpy(buffer, \"The help file is asking to run the program below.  Say no if you don't recognize it.\\n\");\n    strncat(buffer, pgm, 256 - strlen(buffer));\n    int but = MessageBoxA(hwnd, buffer, \"Notice\", MB_YESNO | MB_ICONWARNING | MB_DEFBUTTON2);\n    if (but == IDYES)\n        ret = ShellExecuteA(hwnd, \"open\", pgm, args, \".\", cmd_show);\n    if ((DWORD_PTR)ret < 32)\n    {\n        WINE_WARN(\"Failed with %p\\n\", ret);\n        if (topic) MACRO_JumpID(NULL, topic);\n    }\n}\n\nstatic void CALLBACK MACRO_ExecProgram(LPCSTR str, LONG u)\n{\n    HWND hwnd = Globals.active_win ? Globals.active_win->hMainWnd : NULL;\n    char buffer[256];\n    WINE_TRACE(\"(%s, %u)\\n\", debugstr_a(str), u);\n    strcpy(buffer, \"The help file is asking to run the program below.  Say no if you don't recognize it.\\n\");\n    strncat(buffer, str, 256 - strlen(buffer));\n    int ret = MessageBoxA(hwnd, buffer, \"Notice\", MB_YESNO | MB_ICONWARNING | MB_DEFBUTTON2);\n    if (ret == IDYES)\n    {\n        STARTUPINFOA si = {0};\n        PROCESS_INFORMATION pi;\n        si.cb = sizeof(STARTUPINFOA);\n        si.dwFlags = STARTF_USESHOWWINDOW;\n        si.wShowWindow = u;\n        CreateProcessA(NULL, str, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);\n        CloseHandle(pi.hProcess);\n        CloseHandle(pi.hThread);\n    }\n}\n\nvoid CALLBACK MACRO_Exit(void)\n{\n    WINE_TRACE(\"()\\n\");\n\n    while (Globals.win_list)\n        WINHELP_ReleaseWindow(Globals.win_list);\n}\n\nstatic void CALLBACK MACRO_ExtAbleItem(LPCSTR str, LONG u)\n{\n    WINE_FIXME(\"(%s, %u)\\n\", debugstr_a(str), u);\n}\n\nstatic void CALLBACK MACRO_ExtInsertItem(LPCSTR str1, LPCSTR str2, LPCSTR str3, LPCSTR str4, LONG u1, LONG u2)\n{\n    WINE_FIXME(\"(%s, %s, %s, %s, %u, %u)\\n\", debugstr_a(str1), debugstr_a(str2), debugstr_a(str3), debugstr_a(str4), u1, u2);\n}\n\nstatic void CALLBACK MACRO_ExtInsertMenu(LPCSTR str1, LPCSTR str2, LPCSTR str3, LONG u1, LONG u2)\n{\n    WINE_FIXME(\"(%s, %s, %s, %u, %u)\\n\", debugstr_a(str1), debugstr_a(str2), debugstr_a(str3), u1, u2);\n}\n\nstatic BOOL CALLBACK MACRO_FileExist(LPCSTR str)\n{\n    WINE_TRACE(\"(%s)\\n\", debugstr_a(str));\n    return GetFileAttributesA(str) != INVALID_FILE_ATTRIBUTES;\n}\n\nvoid CALLBACK MACRO_FileOpen(void)\n{\n    char szFile[MAX_PATH];\n\n    if (WINHELP_GetOpenFileName(szFile, MAX_PATH))\n    {\n        MACRO_JumpContents(szFile, \"main\");\n    }\n}\n\nstatic void CALLBACK MACRO_Find(void)\n{\n    WINE_FIXME(\"()\\n\");\n}\n\nstatic void CALLBACK MACRO_Finder(void)\n{\n    WINHELP_CreateIndexWindow(FALSE);\n}\n\nstatic void CALLBACK MACRO_FloatingMenu(void)\n{\n    WINE_FIXME(\"()\\n\");\n}\n\nstatic void CALLBACK MACRO_Flush(void)\n{\n    WINE_FIXME(\"()\\n\");\n}\n\nstatic void CALLBACK MACRO_FocusWindow(LPCSTR lpszWindow)\n{\n    WINHELP_WINDOW *win;\n\n    WINE_TRACE(\"(%s)\\n\", debugstr_a(lpszWindow));\n\n    if (!lpszWindow || !lpszWindow[0]) lpszWindow = \"main\";\n\n    for (win = Globals.win_list; win; win = win->next)\n        if (!lstrcmpiA(win->info->name, lpszWindow))\n            SetFocus(win->hMainWnd);\n}\n\nstatic void CALLBACK MACRO_Generate(LPCSTR str, LONG w, LONG l)\n{\n    WINE_FIXME(\"(%s, %x, %x)\\n\", debugstr_a(str), w, l);\n}\n\nstatic void CALLBACK MACRO_GotoMark(LPCSTR str)\n{\n    WINE_FIXME(\"(%s)\\n\", debugstr_a(str));\n}\n\nvoid CALLBACK MACRO_HelpOn(void)\n{\n    WINHELP_WINDOW *win = MACRO_CurrentWindow();\n    LPCSTR      file = NULL;\n\n    WINE_TRACE(\"()\\n\");\n    if (win && win->page && win->page->file)\n        file = win->page->file->help_on_file;\n\n    if (!file)\n        file = (Globals.wVersion > 4) ? \"winhlp32.hlp\" : \"winhelp.hlp\";\n\n    MACRO_JumpContents(file, NULL);\n}\n\nvoid CALLBACK MACRO_HelpOnTop(void)\n{\n    static BOOL on_top = FALSE;\n    WINHELP_WINDOW *win;\n    HWND main_wnd = NULL;\n    HMENU menu;\n\n    for (win = Globals.win_list; win; win = win->next)\n        if (!lstrcmpiA(win->info->name, \"main\"))\n            main_wnd = win->hMainWnd;\n    if (!main_wnd)\n    {\n        WINE_ERR(\"could not find the main window!\\n\");\n        return;\n    }\n    menu = GetMenu(main_wnd);\n\n    on_top = !on_top;\n    if (on_top) {\n        CheckMenuItem(menu, MNID_HELP_HELPTOP, MF_BYCOMMAND|MF_CHECKED);\n        SetWindowPos(main_wnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);\n    } else {\n        CheckMenuItem(menu, MNID_HELP_HELPTOP, MF_BYCOMMAND|MF_UNCHECKED);\n        SetWindowPos(main_wnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);\n    }\n}\n\nvoid CALLBACK MACRO_History(void)\n{\n    WINE_TRACE(\"()\\n\");\n\n    if (Globals.active_win && !Globals.active_win->hHistoryWnd)\n    {\n        const WCHAR name[] = {'H','i','s','t','o','r','y',0};\n        HWND hWnd = CreateWindowW(HISTORY_WIN_CLASS_NAME, name, WS_OVERLAPPEDWINDOW,\n                                 0, 0, 0, 0, 0, 0, Globals.hInstance, Globals.active_win);\n        ShowWindow(hWnd, SW_NORMAL);\n    }\n}\n\nstatic void CALLBACK MACRO_IfThen(BOOL b, LPCSTR t)\n{\n    if (b) MACRO_ExecuteMacro(MACRO_CurrentWindow(), t);\n}\n\nstatic void CALLBACK MACRO_IfThenElse(BOOL b, LPCSTR t, LPCSTR f)\n{\n    if (b) MACRO_ExecuteMacro(MACRO_CurrentWindow(), t);\n    else MACRO_ExecuteMacro(MACRO_CurrentWindow(), f);\n}\n\nstatic BOOL CALLBACK MACRO_InitMPrint(void)\n{\n    WINE_FIXME(\"()\\n\");\n    return FALSE;\n}\n\nstatic void CALLBACK MACRO_InsertItem(LPCSTR str1, LPCSTR str2, LPCSTR str3, LPCSTR str4, LONG u)\n{\n    WINE_FIXME(\"(%s, %s, %s, %s, %u)\\n\", debugstr_a(str1), debugstr_a(str2), debugstr_a(str3), debugstr_a(str4), u);\n}\n\nstatic void CALLBACK MACRO_InsertMenu(LPCSTR str1, LPCSTR str2, LONG u)\n{\n    WINE_FIXME(\"(%s, %s, %u)\\n\", debugstr_a(str1), debugstr_a(str2), u);\n}\n\nstatic BOOL CALLBACK MACRO_IsBook(void)\n{\n    WINE_TRACE(\"()\\n\");\n    return Globals.isBook;\n}\n\nstatic BOOL CALLBACK MACRO_IsMark(LPCSTR str)\n{\n    WINE_FIXME(\"(%s)\\n\", debugstr_a(str));\n    return FALSE;\n}\n\nstatic BOOL CALLBACK MACRO_IsNotMark(LPCSTR str)\n{\n    WINE_FIXME(\"(%s)\\n\", debugstr_a(str));\n    return TRUE;\n}\n\nvoid CALLBACK MACRO_JumpContext(LPCSTR lpszPath, LPCSTR lpszWindow, LONG context)\n{\n    HLPFILE*    hlpfile;\n\n    WINE_TRACE(\"(%s, %s, %d)\\n\", debugstr_a(lpszPath), debugstr_a(lpszWindow), context);\n    if ((hlpfile = WINHELP_LookupHelpFile(lpszPath)))\n        /* Some madness: what user calls 'context', hlpfile calls 'map' */\n        WINHELP_OpenHelpWindow(HLPFILE_PageByMap, hlpfile, context,\n                               WINHELP_GetWindowInfo(hlpfile, lpszWindow),\n                               SW_NORMAL);\n}\n\nvoid CALLBACK MACRO_JumpHash(LPCSTR lpszPath, LPCSTR lpszWindow, LONG lHash)\n{\n    HLPFILE*    hlpfile;\n\n    WINE_TRACE(\"(%s, %s, %u)\\n\", debugstr_a(lpszPath), debugstr_a(lpszWindow), lHash);\n    if (!lpszPath || !lpszPath[0])\n        hlpfile = MACRO_CurrentWindow()->page->file;\n    else\n        hlpfile = WINHELP_LookupHelpFile(lpszPath);\n    if (hlpfile)\n        WINHELP_OpenHelpWindow(HLPFILE_PageByHash, hlpfile, lHash,\n                               WINHELP_GetWindowInfo(hlpfile, lpszWindow),\n                               SW_NORMAL);\n}\n\nstatic void CALLBACK MACRO_JumpHelpOn(void)\n{\n    WINE_FIXME(\"()\\n\");\n}\n\nstatic void CALLBACK MACRO_JumpID(LPCSTR lpszPathWindow, LPCSTR topic_id)\n{\n    LPSTR       ptr;\n\n    WINE_TRACE(\"(%s, %s)\\n\", debugstr_a(lpszPathWindow), debugstr_a(topic_id));\n    if (lpszPathWindow && (ptr = strchr(lpszPathWindow, '>')) != NULL)\n    {\n        LPSTR   tmp;\n        size_t  sz;\n\n        tmp = HeapAlloc(GetProcessHeap(), 0, strlen(lpszPathWindow) + 1);\n        if (tmp)\n        {\n            strcpy(tmp, lpszPathWindow);\n            tmp[ptr - lpszPathWindow] = '\\0';\n            ptr += tmp - lpszPathWindow; /* ptr now points to '>' in tmp buffer */\n            /* in some cases, we have a trailing space that we need to get rid of */\n            /* FIXME: check if it has to be done in lexer rather than here */\n            for (sz = strlen(ptr + 1); sz >= 1 && ptr[sz] == ' '; sz--) ptr[sz] = '\\0';\n            MACRO_JumpHash(tmp, ptr + 1, HLPFILE_Hash(topic_id));\n            HeapFree(GetProcessHeap(), 0, tmp);\n        }\n    }\n    else\n        MACRO_JumpHash(lpszPathWindow, NULL, HLPFILE_Hash(topic_id));\n}\n\n/* FIXME: this macros is wrong\n * it should only contain 2 strings, path & window are coded as path>window\n */\nstatic void CALLBACK MACRO_JumpKeyword(LPCSTR lpszPath, LPCSTR lpszWindow, LPCSTR keyword)\n{\n    WINE_FIXME(\"(%s, %s, %s)\\n\", debugstr_a(lpszPath), debugstr_a(lpszWindow), debugstr_a(keyword));\n}\n\nstatic void CALLBACK MACRO_KLink(LPCSTR keywords, LONG type, LPCSTR topic, LPCSTR window)\n{\n    WINE_TRACE(\"(%s, %u, %s, %s)\\n\", debugstr_a(keywords), type, debugstr_a(topic), debugstr_a(window));\n    WINHELP_SearchKey('K', keywords, type, topic, window, MACRO_CurrentWindow(), MACRO_CurrentWindow()->page->file);\n}\n\nstatic void CALLBACK MACRO_Menu(void)\n{\n    WINE_FIXME(\"()\\n\");\n}\n\nstatic void CALLBACK MACRO_MPrintHash(LONG u)\n{\n    WINE_FIXME(\"(%u)\\n\", u);\n}\n\nstatic void CALLBACK MACRO_MPrintID(LPCSTR str)\n{\n    WINE_FIXME(\"(%s)\\n\", debugstr_a(str));\n}\n\nstatic void CALLBACK MACRO_Next(void)\n{\n    WINHELP_WNDPAGE     wp;\n\n    WINE_TRACE(\"()\\n\");\n    wp.page = MACRO_CurrentWindow()->page;\n    wp.page = HLPFILE_PageByOffset(wp.page->file, wp.page->browse_fwd, &wp.relative);\n    if (wp.page)\n    {\n        wp.page->file->wRefCount++;\n        wp.wininfo = MACRO_CurrentWindow()->info;\n        WINHELP_CreateHelpWindow(&wp, SW_NORMAL, TRUE);\n    }\n}\n\nstatic void CALLBACK MACRO_NoShow(void)\n{\n    WINE_FIXME(\"()\\n\");\n}\n\nvoid CALLBACK MACRO_PopupContext(LPCSTR str, LONG u)\n{\n    WINE_FIXME(\"(%s, %u)\\n\", debugstr_a(str), u);\n}\n\nstatic void CALLBACK MACRO_PopupHash(LPCSTR str, LONG u)\n{\n    WINE_FIXME(\"(%s, %u)\\n\", debugstr_a(str), u);\n}\n\nstatic void CALLBACK MACRO_PopupId(LPCSTR str1, LPCSTR str2)\n{\n    WINE_FIXME(\"(%s, %s)\\n\", debugstr_a(str1), debugstr_a(str2));\n}\n\nstatic void CALLBACK MACRO_PositionWindow(LONG i1, LONG i2, LONG u1, LONG u2, LONG u3, LPCSTR str)\n{\n    WINE_FIXME(\"(%i, %i, %u, %u, %u, %s)\\n\", i1, i2, u1, u2, u3, debugstr_a(str));\n}\n\nstatic void CALLBACK MACRO_Prev(void)\n{\n    WINHELP_WNDPAGE     wp;\n\n    WINE_TRACE(\"()\\n\");\n    wp.page = MACRO_CurrentWindow()->page;\n    wp.page = HLPFILE_PageByOffset(wp.page->file, wp.page->browse_bwd, &wp.relative);\n    if (wp.page)\n    {\n        wp.page->file->wRefCount++;\n        wp.wininfo = MACRO_CurrentWindow()->info;\n        WINHELP_CreateHelpWindow(&wp, SW_NORMAL, TRUE);\n    }\n}\n\nvoid CALLBACK MACRO_Print(void)\n{\n    PRINTDLGW printer;\n\n    WINE_TRACE(\"()\\n\");\n\n    printer.lStructSize         = sizeof(printer);\n    printer.hwndOwner           = MACRO_CurrentWindow()->hMainWnd;\n    printer.hInstance           = Globals.hInstance;\n    printer.hDevMode            = 0;\n    printer.hDevNames           = 0;\n    printer.hDC                 = 0;\n    printer.Flags               = 0;\n    printer.nFromPage           = 0;\n    printer.nToPage             = 0;\n    printer.nMinPage            = 0;\n    printer.nMaxPage            = 0;\n    printer.nCopies             = 0;\n    printer.lCustData           = 0;\n    printer.lpfnPrintHook       = 0;\n    printer.lpfnSetupHook       = 0;\n    printer.lpPrintTemplateName = 0;\n    printer.lpSetupTemplateName = 0;\n    printer.hPrintTemplate      = 0;\n    printer.hSetupTemplate      = 0;\n\n    if (PrintDlgW(&printer)) {\n        WINE_FIXME(\"Print()\\n\");\n    }\n}\n\nvoid CALLBACK MACRO_PrinterSetup(void)\n{\n    WINE_FIXME(\"()\\n\");\n}\n\nstatic void CALLBACK MACRO_RegisterRoutine(LPCSTR dll_name, LPCSTR proc, LPCSTR args)\n{\n    int                 size;\n\n    WINE_TRACE(\"(%s, %s, %s)\\n\", debugstr_a(dll_name), debugstr_a(proc), debugstr_a(args));\n\n    if (MACRO_Loaded && MACRO_DoLookUp(MACRO_Loaded, proc, NULL, MACRO_NumLoaded) != EMPTY)\n        return;\n\n    size = ++MACRO_NumLoaded * sizeof(struct MacroDesc);\n    if (!MACRO_Loaded) MACRO_Loaded = HeapAlloc(GetProcessHeap(), 0, size);\n    else MACRO_Loaded = HeapReAlloc(GetProcessHeap(), 0, MACRO_Loaded, size);\n    MACRO_Loaded[MACRO_NumLoaded - 1].name      = StrDup(proc); /* FIXME: never freed */\n    MACRO_Loaded[MACRO_NumLoaded - 1].alias     = StrDup(dll_name);\n    MACRO_Loaded[MACRO_NumLoaded - 1].isBool    = FALSE;\n    MACRO_Loaded[MACRO_NumLoaded - 1].arguments = StrDup(args); /* FIXME: never freed */\n    MACRO_Loaded[MACRO_NumLoaded - 1].fn        = NULL;\n    WINE_TRACE(\"Added %s(%s)\\n\", debugstr_a(proc), debugstr_a(args));\n}\n\nstatic void CALLBACK MACRO_RemoveAccelerator(LONG u1, LONG u2)\n{\n    WINE_FIXME(\"(%u, %u)\\n\", u1, u2);\n}\n\nstatic void CALLBACK MACRO_ResetMenu(void)\n{\n    WINE_FIXME(\"()\\n\");\n}\n\nstatic void CALLBACK MACRO_SaveMark(LPCSTR str)\n{\n    WINE_FIXME(\"(%s)\\n\", debugstr_a(str));\n}\n\nstatic void CALLBACK MACRO_Search(void)\n{\n    WINHELP_CreateIndexWindow(TRUE);\n}\n\nvoid CALLBACK MACRO_SetContents(LPCSTR str, LONG u)\n{\n    WINE_FIXME(\"(%s, %u)\\n\", debugstr_a(str), u);\n}\n\nstatic void CALLBACK MACRO_SetHelpOnFile(LPCSTR str)\n{\n    HLPFILE_PAGE*       page = MACRO_CurrentWindow()->page;\n\n    WINE_TRACE(\"(%s)\\n\", debugstr_a(str));\n\n    HeapFree(GetProcessHeap(), 0, page->file->help_on_file);\n    page->file->help_on_file = HeapAlloc(GetProcessHeap(), 0, strlen(str) + 1);\n    if (page->file->help_on_file)\n        strcpy(page->file->help_on_file, str);\n}\n\nstatic void CALLBACK MACRO_SetPopupColor(LONG rgb)\n{\n    HLPFILE_PAGE*       page = MACRO_CurrentWindow()->page;\n\n    WINE_TRACE(\"(%d)\\n\", rgb);\n    page->file->has_popup_color = TRUE;\n    page->file->popup_color = rgb;\n}\n\nstatic void CALLBACK MACRO_ShellExecute(LPCSTR str1, LPCSTR str2, LONG u1, LONG u2, LPCSTR str3, LPCSTR str4)\n{\n    WINE_FIXME(\"(%s, %s, %u, %u, %s, %s)\\n\", debugstr_a(str1), debugstr_a(str2), u1, u2, debugstr_a(str3), debugstr_a(str4));\n}\n\nstatic void CALLBACK MACRO_ShortCut(LPCSTR str1, LPCSTR str2, LONG w, LONG l, LPCSTR str)\n{\n    WINE_FIXME(\"(%s, %s, %x, %x, %s)\\n\", debugstr_a(str1), debugstr_a(str2), w, l, debugstr_a(str));\n}\n\nstatic void CALLBACK MACRO_TCard(LONG u)\n{\n    WINE_FIXME(\"(%u)\\n\", u);\n}\n\nstatic void CALLBACK MACRO_Test(LONG u)\n{\n    WINE_FIXME(\"(%u)\\n\", u);\n}\n\nstatic BOOL CALLBACK MACRO_TestALink(LPCSTR str)\n{\n    WINE_FIXME(\"(%s)\\n\", debugstr_a(str));\n    return FALSE;\n}\n\nstatic BOOL CALLBACK MACRO_TestKLink(LPCSTR str)\n{\n    WINE_FIXME(\"(%s)\\n\", debugstr_a(str));\n    return FALSE;\n}\n\nstatic void CALLBACK MACRO_UncheckItem(LPCSTR str)\n{\n    WINE_FIXME(\"(%s)\\n\", debugstr_a(str));\n}\n\nstatic void CALLBACK MACRO_UpdateWindow(LPCSTR str1, LPCSTR str2)\n{\n    WINE_FIXME(\"(%s, %s)\\n\", debugstr_a(str1), debugstr_a(str2));\n}\n\n\n/**************************************************/\n/*               Macro table                      */\n/**************************************************/\n\n/* types:\n *      U:      32 bit unsigned int\n *      I:      32 bit signed int\n *      S:      string\n *      v:      unknown (32 bit entity)\n */\n\nstatic struct MacroDesc MACRO_Builtins[] = {\n    {\"About\",               NULL, 0, \"\",       MACRO_About},\n    {\"AddAccelerator\",      \"AA\", 0, \"UUS\",    MACRO_AddAccelerator},\n    {\"ALink\",               \"AL\", 0, \"SUSS\",   MACRO_ALink},\n    {\"Annotate\",            NULL, 0, \"\",       MACRO_Annotate},\n    {\"AppendItem\",          NULL, 0, \"SSSS\",   MACRO_AppendItem},\n    {\"Back\",                NULL, 0, \"\",       MACRO_Back},\n    {\"BackFlush\",           \"BF\", 0, \"\",       MACRO_BackFlush},\n    {\"BookmarkDefine\",      NULL, 0, \"\",       MACRO_BookmarkDefine},\n    {\"BookmarkMore\",        NULL, 0, \"\",       MACRO_BookmarkMore},\n    {\"BrowseButtons\",       NULL, 0, \"\",       MACRO_BrowseButtons},\n    {\"ChangeButtonBinding\", \"CBB\",0, \"SS\",     MACRO_ChangeButtonBinding},\n    {\"ChangeEnable\",        \"CE\", 0, \"SS\",     MACRO_ChangeEnable},\n    {\"ChangeItemBinding\",   \"CIB\",0, \"SS\",     MACRO_ChangeItemBinding},\n    {\"CheckItem\",           \"CI\", 0, \"S\",      MACRO_CheckItem},\n    {\"CloseSecondarys\",     \"CS\", 0, \"\",       MACRO_CloseSecondarys},\n    {\"CloseWindow\",         \"CW\", 0, \"S\",      MACRO_CloseWindow},\n    {\"Compare\",             NULL, 0, \"S\",      MACRO_Compare},\n    {\"Contents\",            NULL, 0, \"\",       MACRO_Contents},\n    {\"ControlPanel\",        NULL, 0, \"SSU\",    MACRO_ControlPanel},\n    {\"CopyDialog\",          NULL, 0, \"\",       MACRO_CopyDialog},\n    {\"CopyTopic\",           \"CT\", 0, \"\",       MACRO_CopyTopic},\n    {\"CreateButton\",        \"CB\", 0, \"SSS\",    MACRO_CreateButton},\n    {\"DeleteItem\",          NULL, 0, \"S\",      MACRO_DeleteItem},\n    {\"DeleteMark\",          NULL, 0, \"S\",      MACRO_DeleteMark},\n    {\"DestroyButton\",       NULL, 0, \"S\",      MACRO_DestroyButton},\n    {\"DisableButton\",       \"DB\", 0, \"S\",      MACRO_DisableButton},\n    {\"DisableItem\",         \"DI\", 0, \"S\",      MACRO_DisableItem},\n    {\"EnableButton\",        \"EB\", 0, \"S\",      MACRO_EnableButton},\n    {\"EnableItem\",          \"EI\", 0, \"S\",      MACRO_EnableItem},\n    {\"EndMPrint\",           NULL, 0, \"\",       MACRO_EndMPrint},\n    {\"ExecFile\",            \"EF\", 0, \"SSUS\",   MACRO_ExecFile},\n    {\"ExecProgram\",         \"EP\", 0, \"SU\",     MACRO_ExecProgram},\n    {\"Exit\",                NULL, 0, \"\",       MACRO_Exit},\n    {\"ExtAbleItem\",         NULL, 0, \"SU\",     MACRO_ExtAbleItem},\n    {\"ExtInsertItem\",       NULL, 0, \"SSSSUU\", MACRO_ExtInsertItem},\n    {\"ExtInsertMenu\",       NULL, 0, \"SSSUU\",  MACRO_ExtInsertMenu},\n    {\"FileExist\",           \"FE\", 1, \"S\",      MACRO_FileExist},\n    {\"FileOpen\",            \"FO\", 0, \"\",       MACRO_FileOpen},\n    {\"Find\",                NULL, 0, \"\",       MACRO_Find},\n    {\"Finder\",              \"FD\", 0, \"\",       MACRO_Finder},\n    {\"FloatingMenu\",        NULL, 0, \"\",       MACRO_FloatingMenu},\n    {\"Flush\",               \"FH\", 0, \"\",       MACRO_Flush},\n    {\"FocusWindow\",         NULL, 0, \"S\",      MACRO_FocusWindow},\n    {\"Generate\",            NULL, 0, \"SUU\",    MACRO_Generate},\n    {\"GotoMark\",            NULL, 0, \"S\",      MACRO_GotoMark},\n    {\"HelpOn\",              NULL, 0, \"\",       MACRO_HelpOn},\n    {\"HelpOnTop\",           NULL, 0, \"\",       MACRO_HelpOnTop},\n    {\"History\",             NULL, 0, \"\",       MACRO_History},\n    {\"InitMPrint\",          NULL, 1, \"\",       MACRO_InitMPrint},\n    {\"InsertItem\",          NULL, 0, \"SSSSU\",  MACRO_InsertItem},\n    {\"InsertMenu\",          NULL, 0, \"SSU\",    MACRO_InsertMenu},\n    {\"IfThen\",              \"IF\", 0, \"BS\",     MACRO_IfThen},\n    {\"IfThenElse\",          \"IE\", 0, \"BSS\",    MACRO_IfThenElse},\n    {\"IsBook\",              NULL, 1, \"\",       MACRO_IsBook},\n    {\"IsMark\",              NULL, 1, \"S\",      MACRO_IsMark},\n    {\"IsNotMark\",           \"NM\", 1, \"S\",      MACRO_IsNotMark},\n    {\"JumpContents\",        NULL, 0, \"SS\",     MACRO_JumpContents},\n    {\"JumpContext\",         \"JC\", 0, \"SSU\",    MACRO_JumpContext},\n    {\"JumpHash\",            \"JH\", 0, \"SSU\",    MACRO_JumpHash},\n    {\"JumpHelpOn\",          NULL, 0, \"\",       MACRO_JumpHelpOn},\n    {\"JumpID\",              \"JI\", 0, \"SS\",     MACRO_JumpID},\n    {\"JumpKeyword\",         \"JK\", 0, \"SSS\",    MACRO_JumpKeyword},\n    {\"KLink\",               \"KL\", 0, \"SUSS\",   MACRO_KLink},\n    {\"Menu\",                \"MU\", 0, \"\",       MACRO_Menu},\n    {\"MPrintHash\",          NULL, 0, \"U\",      MACRO_MPrintHash},\n    {\"MPrintID\",            NULL, 0, \"S\",      MACRO_MPrintID},\n    {\"Next\",                NULL, 0, \"\",       MACRO_Next},\n    {\"NoShow\",              \"NS\", 0, \"\",       MACRO_NoShow},\n    {\"PopupContext\",        \"PC\", 0, \"SU\",     MACRO_PopupContext},\n    {\"PopupHash\",           NULL, 0, \"SU\",     MACRO_PopupHash},\n    {\"PopupId\",             \"PI\", 0, \"SS\",     MACRO_PopupId},\n    {\"PositionWindow\",      \"PW\", 0, \"IIUUUS\", MACRO_PositionWindow},\n    {\"Prev\",                NULL, 0, \"\",       MACRO_Prev},\n    {\"Print\",               NULL, 0, \"\",       MACRO_Print},\n    {\"PrinterSetup\",        NULL, 0, \"\",       MACRO_PrinterSetup},\n    {\"RegisterRoutine\",     \"RR\", 0, \"SSS\",    MACRO_RegisterRoutine},\n    {\"RemoveAccelerator\",   \"RA\", 0, \"UU\",     MACRO_RemoveAccelerator},\n    {\"ResetMenu\",           NULL, 0, \"\",       MACRO_ResetMenu},\n    {\"SaveMark\",            NULL, 0, \"S\",      MACRO_SaveMark},\n    {\"Search\",              NULL, 0, \"\",       MACRO_Search},\n    {\"SetContents\",         NULL, 0, \"SU\",     MACRO_SetContents},\n    {\"SetHelpOnFile\",       NULL, 0, \"S\",      MACRO_SetHelpOnFile},\n    {\"SetPopupColor\",       \"SPC\",0, \"U\",      MACRO_SetPopupColor},\n    {\"ShellExecute\",        \"SE\", 0, \"SSUUSS\", MACRO_ShellExecute},\n    {\"ShortCut\",            \"SH\", 0, \"SSUUS\",  MACRO_ShortCut},\n    {\"TCard\",               NULL, 0, \"U\",      MACRO_TCard},\n    {\"Test\",                NULL, 0, \"U\",      MACRO_Test},\n    {\"TestALink\",           NULL, 1, \"S\",      MACRO_TestALink},\n    {\"TestKLink\",           NULL, 1, \"S\",      MACRO_TestKLink},\n    {\"UncheckItem\",         \"UI\", 0, \"S\",      MACRO_UncheckItem},\n    {\"UpdateWindow\",        \"UW\", 0, \"SS\",     MACRO_UpdateWindow},\n    {NULL,                  NULL, 0, NULL,     NULL}\n};\n\nint MACRO_Lookup(const char* name, struct lexret* lr)\n{\n    int ret;\n\n    if ((ret = MACRO_DoLookUp(MACRO_Builtins, name, lr, -1)) != EMPTY)\n        return ret;\n    if (MACRO_Loaded && (ret = MACRO_DoLookUp(MACRO_Loaded, name, lr, MACRO_NumLoaded)) != EMPTY)\n        return ret;\n    if (!strcmp(name, \"hwndApp\"))\n    {\n        WINHELP_WINDOW* win;\n        lr->integer = 0;\n        for (win = Globals.win_list; win; win = win->next)\n        {\n            if (!strcmp(win->info->name, \"main\"))\n            {\n                lr->integer = (LONG_PTR)win->hMainWnd;\n                break;\n            }\n        }\n        return INTEGER;\n    }\n    if (!strcmp(name, \"hwndContext\"))\n    {\n        lr->integer = Globals.active_win ?\n            (LONG_PTR)Globals.active_win->hMainWnd : 0;\n        return INTEGER;\n    }\n    if (!strcmp(name, \"qchPath\"))\n    {\n        if (Globals.active_win && Globals.active_win->page)\n        {\n            lr->string = Globals.active_win->page->file->lpszPath;\n            return STRING;\n        }\n        return EMPTY;\n    }\n    if (!strcmp(name, \"qError\") || !strcmp(name, \"lTopicNo\") ||\n        !strcmp(name, \"hfs\") || !strcmp(name, \"coForeground\") || !strcmp(name, \"coBackground\"))\n    {\n        WINE_FIXME(\"keyword %s not substituted in macro parsing\\n\", debugstr_a(name));\n        return EMPTY;\n    }\n\n    lr->string = name;\n    return IDENTIFIER;\n}\n"
  },
  {
    "path": "winhlp32/macro.h",
    "content": "/*\n * Help Viewer\n *\n * Copyright 1996 Ulrich Schmid\n * Copyright 2002 Eric Pouech\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n\nstruct lexret {\n  LPCSTR        proto;\n  BOOL          bool;\n  LONG          integer;\n  LPCSTR        string;\n  FARPROC       function;\n};\n\nextern struct lexret yylval;\nstruct tagWinHelp;\n\nBOOL            MACRO_ExecuteMacro(struct tagWinHelp*, LPCSTR);\nint             MACRO_Lookup(const char* name, struct lexret* lr);\nstruct tagWinHelp* MACRO_CurrentWindow(void);\n\nenum token_types {EMPTY, VOID_FUNCTION, BOOL_FUNCTION, INTEGER, STRING, IDENTIFIER};\nvoid CALLBACK MACRO_About(void);\nvoid CALLBACK MACRO_Annotate(void);\nvoid CALLBACK MACRO_BookmarkDefine(void);\nvoid CALLBACK MACRO_CopyDialog(void);\nvoid CALLBACK MACRO_CreateButton(LPCSTR, LPCSTR, LPCSTR);\nvoid CALLBACK MACRO_DisableButton(LPCSTR);\nvoid CALLBACK MACRO_Exit(void);\nvoid CALLBACK MACRO_FileOpen(void);\nvoid CALLBACK MACRO_HelpOn(void);\nvoid CALLBACK MACRO_HelpOnTop(void);\nvoid CALLBACK MACRO_History(void);\nvoid CALLBACK MACRO_JumpContents(LPCSTR, LPCSTR);\nvoid CALLBACK MACRO_JumpContext(LPCSTR, LPCSTR, LONG);\nvoid CALLBACK MACRO_JumpHash(LPCSTR, LPCSTR, LONG);\nvoid CALLBACK MACRO_PopupContext(LPCSTR, LONG);\nvoid CALLBACK MACRO_Print(void);\nvoid CALLBACK MACRO_PrinterSetup(void);\nvoid CALLBACK MACRO_SetContents(LPCSTR, LONG);\n\n/* Local Variables:    */\n/* c-file-style: \"GNU\" */\n/* End:                */\n"
  },
  {
    "path": "winhlp32/macro.lex.l",
    "content": "%{ /* -*-C-*- */\n/*\n * Help Viewer\n *\n * Copyright 1996 Ulrich Schmid\n * Copyright 2002,2008 Eric Pouech\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n%}\n%option noinput nounput never-interactive 8bit\n%x quote\n%{\n#include \"config.h\"\n#include <assert.h>\n#include <stdarg.h>\n\n#define YY_NO_UNISTD_H\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n#include \"winhelp.h\"\n\n#ifdef _DEBUG\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(winhelp);\n#else\n#define WINE_TRACE(...)\n#define WINE_WARN(...)\n#define WINE_FIXME(...)\n#define WINE_ERR(...)\n#define debugstr_a(...)\n#endif\n\nstruct lex_data {\n    YY_BUFFER_STATE state;\n    LPCSTR   macroptr;\n    LPSTR    strptr;\n    int      quote_stack[32];\n    unsigned quote_stk_idx;\n    LPSTR    cache_string[32];\n    int      cache_used;\n    WINHELP_WINDOW* window;\n};\nstatic struct lex_data* lex_data = NULL;\n\nstruct lexret  yylval;\n\n#define YY_INPUT(buf,result,max_size)\\\n  if ((result = *lex_data->macroptr ? 1 : 0)) buf[0] = *lex_data->macroptr++;\n\n%}\n%%\n\n[-+]?[0-9]+             yylval.integer = strtol(yytext, NULL, 10);\treturn INTEGER;\n[-+]?0[xX][0-9a-f]+\tyylval.integer = strtol(yytext, NULL, 16);\treturn INTEGER;\n\n[a-zA-Z][_0-9a-zA-Z]*   return MACRO_Lookup(yytext, &yylval);\n\n\\`\t    |\n\\\"\t    |\n\\'          |\n<quote>\\`   |\n<quote>\\\"   |\n<quote>\\'   {\n    if (lex_data->quote_stk_idx == 0 ||\n        (yytext[0] == '\\\"' && lex_data->quote_stack[lex_data->quote_stk_idx - 1] != '\\\"') ||\n        (yytext[0] == '`'))\n    {\n        /* opening a new one */\n        if (lex_data->quote_stk_idx == 0)\n        {\n            assert(lex_data->cache_used < ARRAY_SIZE(lex_data->cache_string));\n            lex_data->strptr = lex_data->cache_string[lex_data->cache_used] = HeapAlloc(GetProcessHeap(), 0, strlen(lex_data->macroptr) + 1);\n            yylval.string = lex_data->strptr;\n            lex_data->cache_used++;\n            BEGIN(quote);\n        }\n        else *lex_data->strptr++ = yytext[0];\n        lex_data->quote_stack[lex_data->quote_stk_idx++] = yytext[0];\n        assert(lex_data->quote_stk_idx < ARRAY_SIZE(lex_data->quote_stack));\n    }\n    else\n    {\n        if (yytext[0] == '`') assert(0);\n        /* close the current quote */\n        if (--lex_data->quote_stk_idx == 0)\n        {\n            BEGIN INITIAL;\n            *lex_data->strptr++ = '\\0';\n            return STRING;\n        }\n        else *lex_data->strptr++ = yytext[0];\n    }\n}\n\n<quote>.                *lex_data->strptr++ = yytext[0];\n<quote>\\\\.\t        *lex_data->strptr++ = yytext[1];\n<quote><<EOF>>\t        return 0;\n\n\" \"\n.\t\t\treturn yytext[0];\n%%\n\n#if 0\n/* all code for testing macros */\n#include \"winhelp.h\"\nstatic CHAR szTestMacro[256];\n\nstatic LRESULT CALLBACK MACRO_TestDialogProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)\n{\n    if (msg == WM_COMMAND && wParam == IDOK)\n    {\n        GetDlgItemText(hDlg, 99, szTestMacro, sizeof(szTestMacro));\n        EndDialog(hDlg, IDOK);\n        return TRUE;\n    }\n    return FALSE;\n}\n\nvoid macro_test(void)\n{\n    WNDPROC lpfnDlg = MakeProcInstance(MACRO_TestDialogProc, Globals.hInstance);\n    DialogBox(Globals.hInstance, STRING_DIALOG_TEST, Globals.active_win->hMainWnd, (DLGPROC)lpfnDlg);\n    FreeProcInstance(lpfnDlg);\n    macro = szTestMacro;\n}\n#endif\n\n/* small helper function for debug messages */\nstatic const char* ts(int t)\n{\n    static char c[2] = {0,0};\n\n    switch (t)\n    {\n    case EMPTY: return \"EMPTY\";\n    case VOID_FUNCTION: return \"VOID_FUNCTION\";\n    case BOOL_FUNCTION: return \"BOOL_FUNCTION\";\n    case INTEGER: return \"INTEGER\";\n    case STRING: return \"STRING\";\n    case IDENTIFIER: return \"IDENTIFIER\";\n    default: c[0] = (char)t; return c;\n    }\n}\n\nstatic int MACRO_CallBoolFunc(void *fn, const char* args, void** ret);\n\n/******************************************************************\n *\t\tMACRO_CheckArgs\n *\n * checks number of arguments against prototype, and stores arguments on\n * stack pa for later call\n * returns -1 on error, otherwise the number of pushed parameters\n */\nstatic int MACRO_CheckArgs(void* pa[], unsigned max, const char* args)\n{\n    int t;\n    unsigned int len = 0, idx = 0;\n\n    WINE_TRACE(\"Checking %s\\n\", debugstr_a(args));\n\n    if (yylex() != '(') {WINE_WARN(\"missing (\\n\");return -1;}\n\n    if (*args)\n    {\n        len = strlen(args);\n        for (;;)\n        {\n            t = yylex();\n            WINE_TRACE(\"Got %s <=> %c\\n\", debugstr_a(ts(t)), *args);\n\n            switch (*args)\n            {\n            case 'S': \n                if (t != STRING)\n                {WINE_WARN(\"missing S\\n\");return -1;}\n                pa[idx] = (void*)yylval.string;  \n                break;\n            case 'U':\n            case 'I':\n                if (t != INTEGER)\n                {WINE_WARN(\"missing U\\n\");return -1;}   \n                pa[idx] = LongToPtr(yylval.integer);\n                break;\n            case 'B':\n                if (t != BOOL_FUNCTION) \n                {WINE_WARN(\"missing B\\n\");return -1;}   \n                if (MACRO_CallBoolFunc(yylval.function, yylval.proto, &pa[idx]) == 0)\n                    return -1;\n                break;\n            default: \n                WINE_WARN(\"unexpected %s while args is %c\\n\", debugstr_a(ts(t)), *args);\n                return -1;\n            }\n            idx++;\n            if (*++args == '\\0') break;\n            t = yylex();\n            if (t == ')') goto CheckArgs_end;\n            if (t != ',') {WINE_WARN(\"missing ,\\n\");return -1;}\n            if (idx >= max) {WINE_FIXME(\"stack overflow (%d)\\n\", max);return -1;}\n        }\n    }\n    if (yylex() != ')') {WINE_WARN(\"missing )\\n\");return -1;}\n\nCheckArgs_end:\n    while (len > idx) pa[--len] = NULL;\n    return idx;\n}\n\n/******************************************************************\n *\t\tMACRO_CallBoolFunc\n *\n * Invokes boolean function fn, which arguments are defined by args\n * stores bool result into ret\n */\nstatic int MACRO_CallBoolFunc(void *fn, const char* args, void** ret)\n{\n    void*       pa[2];\n    int         idx = MACRO_CheckArgs(pa, ARRAY_SIZE(pa), args);\n\n    if (idx < 0) return 0;\n    if (!fn)     return 1;\n\n    WINE_TRACE(\"calling with %u pmts\\n\", idx);\n\n    switch (strlen(args))\n    {\n    case 0:\n    {\n        BOOL (WINAPI *func)(void) = fn;\n        *ret = (void *)(ULONG_PTR)func();\n        break;\n    }\n    case 1:\n    {\n        BOOL (WINAPI *func)(void *) = fn;\n        *ret = (void *)(ULONG_PTR)func( pa[0]);\n        break;\n    }\n    default: WINE_FIXME(\"NIY\\n\");\n    }\n\n    return 1;\n}\n\n/******************************************************************\n *\t\tMACRO_CallVoidFunc\n *\n *\n */\nstatic int MACRO_CallVoidFunc(void *fn, const char* args)\n{\n    void*       pa[6];\n    int         idx = MACRO_CheckArgs(pa, ARRAY_SIZE(pa), args);\n\n    if (idx < 0) return 0;\n    if (!fn)     return 1;\n\n    WINE_TRACE(\"calling %p with %u pmts\\n\", fn, idx);\n\n    switch (strlen(args))\n    {\n    case 0:\n    {\n        void (WINAPI *func)(void) = fn;\n        func();\n        break;\n    }\n    case 1:\n    {\n        void (WINAPI *func)(void*) = fn;\n        func( pa[0] );\n        break;\n    }\n    case 2:\n    {\n        void (WINAPI *func)(void*,void*) = fn;\n        func( pa[0], pa[1] );\n        break;\n    }\n    case 3:\n    {\n        void (WINAPI *func)(void*,void*,void*) = fn;\n        func( pa[0], pa[1], pa[2] );\n        break;\n    }\n    case 4:\n    {\n        void (WINAPI *func)(void*,void*,void*,void*) = fn;\n        func( pa[0], pa[1], pa[2], pa[3] );\n        break;\n    }\n    case 5:\n    {\n        void (WINAPI *func)(void*,void*,void*,void*,void*) = fn;\n        func( pa[0], pa[1], pa[2], pa[3], pa[4] );\n        break;\n    }\n    case 6:\n    {\n        void (WINAPI *func)(void*,void*,void*,void*,void*,void*) = fn;\n        func( pa[0], pa[1], pa[2], pa[3], pa[4], pa[5] );\n        break;\n    }\n    default: WINE_FIXME(\"NIY\\n\");\n    }\n\n    return 1;\n}\n\nBOOL MACRO_ExecuteMacro(WINHELP_WINDOW* window, LPCSTR macro)\n{\n    struct lex_data     curr_lex_data, *prev_lex_data;\n    BOOL ret = TRUE;\n    int t;\n\n    WINE_TRACE(\"%s\\n\", debugstr_a(macro));\n\n    prev_lex_data = lex_data;\n    lex_data = &curr_lex_data;\n\n    memset(lex_data, 0, sizeof(*lex_data));\n    lex_data->macroptr = macro;\n    lex_data->window = WINHELP_GrabWindow(window);\n    lex_data->state = yy_create_buffer(NULL, YY_BUF_SIZE);\n    yy_switch_to_buffer(lex_data->state);\n\n    while ((t = yylex()) != EMPTY)\n    {\n        switch (t)\n        {\n        case VOID_FUNCTION:\n            WINE_TRACE(\"got type void func(%s)\\n\", debugstr_a(yylval.proto));\n            MACRO_CallVoidFunc(yylval.function, yylval.proto);\n            yy_switch_to_buffer(lex_data->state);\n            break;\n        case BOOL_FUNCTION:\n            WINE_WARN(\"got type bool func(%s)\\n\", debugstr_a(yylval.proto));\n            break;\n        default:\n            WINE_WARN(\"got unexpected type %s\\n\", debugstr_a(ts(t)));\n            YY_FLUSH_BUFFER;\n            ret = FALSE;\n            goto done;\n        }\n        switch (t = yylex())\n        {\n        case EMPTY:     goto done;\n        case ';':       break;\n        default:        ret = FALSE; YY_FLUSH_BUFFER; goto done;\n        }\n    }\n\ndone:\n    for (t = 0; t < lex_data->cache_used; t++)\n        HeapFree(GetProcessHeap(), 0, lex_data->cache_string[t]);\n        yy_delete_buffer(lex_data->state);\n    lex_data = prev_lex_data;\n    WINHELP_ReleaseWindow(window);\n\n    return ret;\n}\n\nWINHELP_WINDOW* MACRO_CurrentWindow(void)\n{\n    return lex_data ? lex_data->window : Globals.active_win;\n}\n\n#ifndef yywrap\nint yywrap(void) { return 1; }\n#endif\n"
  },
  {
    "path": "winhlp32/string.c",
    "content": "/*\n * Help Viewer\n *\n * Copyright 1996 Ulrich Schmid\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n/* Class names */\n#include \"windef.h\"\n\nconst WCHAR MAIN_WIN_CLASS_NAME[]       = {'M','S','_','W','I','N','H','E','L','P',0};\nconst WCHAR BUTTON_BOX_WIN_CLASS_NAME[] = {'W','H','B','u','t','t','o','n','B','o','x',0};\nconst WCHAR HISTORY_WIN_CLASS_NAME[]    = {'W','H','H','i','s','t','o','r','y',0};\nconst WCHAR STRING_BUTTON[]             = {'B','U','T','T','O','N',0};\n\n/* Resource names */\nconst char STRING_DIALOG_TEST[]        = \"DIALOG_TEST\";\n\n/* Local Variables:    */\n/* c-file-style: \"GNU\" */\n/* End:                */\n"
  },
  {
    "path": "winhlp32/tom.h",
    "content": "/*** Autogenerated by WIDL 1.7.35 from tom.idl - Do not edit ***/\n\n#ifndef __REQUIRED_RPCNDR_H_VERSION__\n#define __REQUIRED_RPCNDR_H_VERSION__ 475\n#endif\n\n#include <rpc.h>\n#include <rpcndr.h>\n\n#ifndef COM_NO_WINDOWS_H\n#include <windows.h>\n#include <ole2.h>\n#endif\n\n#ifndef __tom_h__\n#define __tom_h__\n\n/* Forward declarations */\n\n#ifndef __ITextDocument_FWD_DEFINED__\n#define __ITextDocument_FWD_DEFINED__\ntypedef interface ITextDocument ITextDocument;\n#ifdef __cplusplus\ninterface ITextDocument;\n#endif /* __cplusplus */\n#endif\n\n#ifndef __ITextDocument2Old_FWD_DEFINED__\n#define __ITextDocument2Old_FWD_DEFINED__\ntypedef interface ITextDocument2Old ITextDocument2Old;\n#ifdef __cplusplus\ninterface ITextDocument2Old;\n#endif /* __cplusplus */\n#endif\n\n#ifndef __ITextRow_FWD_DEFINED__\n#define __ITextRow_FWD_DEFINED__\ntypedef interface ITextRow ITextRow;\n#ifdef __cplusplus\ninterface ITextRow;\n#endif /* __cplusplus */\n#endif\n\n#ifndef __ITextRange2_FWD_DEFINED__\n#define __ITextRange2_FWD_DEFINED__\ntypedef interface ITextRange2 ITextRange2;\n#ifdef __cplusplus\ninterface ITextRange2;\n#endif /* __cplusplus */\n#endif\n\n#ifndef __ITextSelection2_FWD_DEFINED__\n#define __ITextSelection2_FWD_DEFINED__\ntypedef interface ITextSelection2 ITextSelection2;\n#ifdef __cplusplus\ninterface ITextSelection2;\n#endif /* __cplusplus */\n#endif\n\n#ifndef __ITextDocument2_FWD_DEFINED__\n#define __ITextDocument2_FWD_DEFINED__\ntypedef interface ITextDocument2 ITextDocument2;\n#ifdef __cplusplus\ninterface ITextDocument2;\n#endif /* __cplusplus */\n#endif\n\n#ifndef __ITextRange_FWD_DEFINED__\n#define __ITextRange_FWD_DEFINED__\ntypedef interface ITextRange ITextRange;\n#ifdef __cplusplus\ninterface ITextRange;\n#endif /* __cplusplus */\n#endif\n\n#ifndef __ITextSelection_FWD_DEFINED__\n#define __ITextSelection_FWD_DEFINED__\ntypedef interface ITextSelection ITextSelection;\n#ifdef __cplusplus\ninterface ITextSelection;\n#endif /* __cplusplus */\n#endif\n\n#ifndef __ITextFont_FWD_DEFINED__\n#define __ITextFont_FWD_DEFINED__\ntypedef interface ITextFont ITextFont;\n#ifdef __cplusplus\ninterface ITextFont;\n#endif /* __cplusplus */\n#endif\n\n#ifndef __ITextPara_FWD_DEFINED__\n#define __ITextPara_FWD_DEFINED__\ntypedef interface ITextPara ITextPara;\n#ifdef __cplusplus\ninterface ITextPara;\n#endif /* __cplusplus */\n#endif\n\n#ifndef __ITextStoryRanges_FWD_DEFINED__\n#define __ITextStoryRanges_FWD_DEFINED__\ntypedef interface ITextStoryRanges ITextStoryRanges;\n#ifdef __cplusplus\ninterface ITextStoryRanges;\n#endif /* __cplusplus */\n#endif\n\n/* Headers for imported files */\n\n#include <oaidl.h>\n#include <ocidl.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifdef WINE_NO_UNICODE_MACROS\n#undef FindText\n#endif\ntypedef enum tagTomConstants {\n    tomFalse = (int)0,\n    tomTrue = (int)-1,\n    tomUndefined = (int)-9999999,\n    tomToggle = (int)-9999998,\n    tomAutoColor = (int)-9999997,\n    tomDefault = (int)-9999996,\n    tomSuspend = (int)-9999995,\n    tomResume = (int)-9999994,\n    tomApplyNow = (int)0,\n    tomApplyLater = (int)1,\n    tomTrackParms = (int)2,\n    tomCacheParms = (int)3,\n    tomApplyTmp = (int)4,\n    tomDisableSmartFont = (int)8,\n    tomEnableSmartFont = (int)9,\n    tomUsePoints = (int)10,\n    tomUseTwips = (int)11,\n    tomBackward = (int)0xc0000001,\n    tomForward = (int)0x3fffffff,\n    tomMove = (int)0,\n    tomExtend = (int)1,\n    tomNoSelection = (int)0,\n    tomSelectionIP = (int)1,\n    tomSelectionNormal = (int)2,\n    tomSelectionFrame = (int)3,\n    tomSelectionColumn = (int)4,\n    tomSelectionRow = (int)5,\n    tomSelectionBlock = (int)6,\n    tomSelectionInlineShape = (int)7,\n    tomSelectionShape = (int)8,\n    tomSelStartActive = (int)1,\n    tomSelAtEOL = (int)2,\n    tomSelOvertype = (int)4,\n    tomSelActive = (int)8,\n    tomSelReplace = (int)16,\n    tomEnd = (int)0,\n    tomStart = (int)32,\n    tomCollapseEnd = (int)0,\n    tomCollapseStart = (int)1,\n    tomClientCoord = (int)256,\n    tomNone = (int)0,\n    tomSingle = (int)1,\n    tomWords = (int)2,\n    tomDouble = (int)3,\n    tomDotted = (int)4,\n    tomDash = (int)5,\n    tomDashDot = (int)6,\n    tomDashDotDot = (int)7,\n    tomWave = (int)8,\n    tomThick = (int)9,\n    tomHair = (int)10,\n    tomLineSpaceSingle = (int)0,\n    tomLineSpace1pt5 = (int)1,\n    tomLineSpaceDouble = (int)2,\n    tomLineSpaceAtLeast = (int)3,\n    tomLineSpaceExactly = (int)4,\n    tomLineSpaceMultiple = (int)5,\n    tomAlignLeft = (int)0,\n    tomAlignCenter = (int)1,\n    tomAlignRight = (int)2,\n    tomAlignJustify = (int)3,\n    tomAlignDecimal = (int)3,\n    tomAlignBar = (int)4,\n    tomAlignInterWord = (int)3,\n    tomAlignInterLetter = (int)4,\n    tomAlignScaled = (int)5,\n    tomAlignGlyphs = (int)6,\n    tomAlignSnapGrid = (int)7,\n    tomSpaces = (int)0,\n    tomDots = (int)1,\n    tomDashes = (int)2,\n    tomLines = (int)3,\n    tomThickLines = (int)4,\n    tomEquals = (int)5,\n    tomTabBack = (int)-3,\n    tomTabNext = (int)-2,\n    tomTabHere = (int)-1,\n    tomListBullet = (int)1,\n    tomListNumberAsArabic = (int)2,\n    tomListNumberAsLCLetter = (int)3,\n    tomListNumberAsUCLetter = (int)4,\n    tomListNumberAsLCRoman = (int)5,\n    tomListNumberAsUCRoman = (int)6,\n    tomListNumberAsSequence = (int)7,\n    tomListParentheses = (int)0x10000,\n    tomListPeriod = (int)0x20000,\n    tomListPlain = (int)0x30000,\n    tomCharacter = (int)1,\n    tomWord = (int)2,\n    tomSentence = (int)3,\n    tomParagraph = (int)4,\n    tomLine = (int)5,\n    tomStory = (int)6,\n    tomScreen = (int)7,\n    tomSection = (int)8,\n    tomColumn = (int)9,\n    tomRow = (int)10,\n    tomWindow = (int)11,\n    tomCell = (int)12,\n    tomCharFormat = (int)13,\n    tomParaFormat = (int)14,\n    tomTable = (int)15,\n    tomObject = (int)16,\n    tomMatchWord = (int)2,\n    tomMatchCase = (int)4,\n    tomMatchPattern = (int)8,\n    tomUnknownStory = (int)0,\n    tomMainTextStory = (int)1,\n    tomFootnotesStory = (int)2,\n    tomEndnotesStory = (int)3,\n    tomCommentsStory = (int)4,\n    tomTextFrameStory = (int)5,\n    tomEvenPagesHeaderStory = (int)6,\n    tomPrimaryHeaderStory = (int)7,\n    tomEvenPagesFooterStory = (int)8,\n    tomPrimaryFooterStory = (int)9,\n    tomFirstPageHeaderStory = (int)10,\n    tomFirstPageFooterStory = (int)11,\n    tomNoAnimation = (int)0,\n    tomLasVegasLights = (int)1,\n    tomBlinkingBackground = (int)2,\n    tomSparkleText = (int)3,\n    tomMarchingBlackAnts = (int)4,\n    tomMarchingRedAnts = (int)5,\n    tomShimmer = (int)6,\n    tomWipeDown = (int)7,\n    tomWipeRight = (int)8,\n    tomAnimationMax = (int)8,\n    tomLowerCase = (int)0,\n    tomUpperCase = (int)1,\n    tomTitleCase = (int)2,\n    tomSentenceCase = (int)4,\n    tomToggleCase = (int)5,\n    tomReadOnly = (int)0x100,\n    tomShareDenyRead = (int)0x200,\n    tomShareDenyWrite = (int)0x400,\n    tomPasteFile = (int)0x1000,\n    tomCreateNew = (int)0x10,\n    tomCreateAlways = (int)0x20,\n    tomOpenExisting = (int)0x30,\n    tomOpenAlways = (int)0x40,\n    tomTruncateExisting = (int)0x50,\n    tomRTF = (int)0x1,\n    tomText = (int)0x2,\n    tomHTML = (int)0x3,\n    tomWordDocument = (int)0x4,\n    tomBold = (int)0x80000001,\n    tomItalic = (int)0x80000002,\n    tomUnderline = (int)0x80000004,\n    tomStrikeout = (int)0x80000008,\n    tomProtected = (int)0x80000010,\n    tomLink = (int)0x80000020,\n    tomSmallCaps = (int)0x80000040,\n    tomAllCaps = (int)0x80000080,\n    tomHidden = (int)0x80000100,\n    tomOutline = (int)0x80000200,\n    tomShadow = (int)0x80000400,\n    tomEmboss = (int)0x80000800,\n    tomImprint = (int)0x80001000,\n    tomDisabled = (int)0x80002000,\n    tomRevised = (int)0x80004000,\n    tomNormalCaret = (int)0,\n    tomKoreanBlockCaret = (int)0x1,\n    tomIncludeInset = (int)0x1,\n    tomIgnoreCurrentFont = (int)0,\n    tomMatchFontCharset = (int)0x1,\n    tomMatchFontSignature = (int)0x2,\n    tomCharset = (int)0x80000000,\n    tomRE10Mode = (int)0x1,\n    tomNoIME = (int)0x80000,\n    tomSelfIME = (int)0x40000,\n    tomRowApplyDefault = (int)0,\n    tomCellStructureChangeOnly = (int)0x1\n} tomConstants;\n#ifndef __ITextRange_FWD_DEFINED__\n#define __ITextRange_FWD_DEFINED__\ntypedef interface ITextRange ITextRange;\n#ifdef __cplusplus\ninterface ITextRange;\n#endif /* __cplusplus */\n#endif\n\n#ifndef __ITextSelection_FWD_DEFINED__\n#define __ITextSelection_FWD_DEFINED__\ntypedef interface ITextSelection ITextSelection;\n#ifdef __cplusplus\ninterface ITextSelection;\n#endif /* __cplusplus */\n#endif\n\n#ifndef __ITextStoryRanges_FWD_DEFINED__\n#define __ITextStoryRanges_FWD_DEFINED__\ntypedef interface ITextStoryRanges ITextStoryRanges;\n#ifdef __cplusplus\ninterface ITextStoryRanges;\n#endif /* __cplusplus */\n#endif\n\n/*****************************************************************************\n * ITextDocument interface\n */\n#ifndef __ITextDocument_INTERFACE_DEFINED__\n#define __ITextDocument_INTERFACE_DEFINED__\n\nDEFINE_GUID(IID_ITextDocument, 0x8cc497c0, 0xa1df, 0x11ce, 0x80,0x98, 0x00,0xaa,0x00,0x47,0xbe,0x5d);\n#if defined(__cplusplus) && !defined(CINTERFACE)\nMIDL_INTERFACE(\"8cc497c0-a1df-11ce-8098-00aa0047be5d\")\nITextDocument : public IDispatch\n{\n    virtual HRESULT STDMETHODCALLTYPE GetName(\n        BSTR *pName) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetSelection(\n        ITextSelection **ppSel) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetStoryCount(\n        LONG *pCount) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetStoryRanges(\n        ITextStoryRanges **ppStories) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetSaved(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetSaved(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetDefaultTabStop(\n        float *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetDefaultTabStop(\n        float Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE New(\n        ) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Open(\n        VARIANT *pVar,\n        LONG Flags,\n        LONG CodePage) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Save(\n        VARIANT *pVar,\n        LONG Flags,\n        LONG CodePage) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Freeze(\n        LONG *pCount) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Unfreeze(\n        LONG *pCount) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE BeginEditCollection(\n        ) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE EndEditCollection(\n        ) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Undo(\n        LONG Count,\n        LONG *prop) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Redo(\n        LONG Count,\n        LONG *prop) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Range(\n        LONG cp1,\n        LONG cp2,\n        ITextRange **ppRange) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE RangeFromPoint(\n        LONG x,\n        LONG y,\n        ITextRange **ppRange) = 0;\n\n};\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(ITextDocument, 0x8cc497c0, 0xa1df, 0x11ce, 0x80,0x98, 0x00,0xaa,0x00,0x47,0xbe,0x5d)\n#endif\n#else\ntypedef struct ITextDocumentVtbl {\n    BEGIN_INTERFACE\n\n    /*** IUnknown methods ***/\n    HRESULT (STDMETHODCALLTYPE *QueryInterface)(\n        ITextDocument *This,\n        REFIID riid,\n        void **ppvObject);\n\n    ULONG (STDMETHODCALLTYPE *AddRef)(\n        ITextDocument *This);\n\n    ULONG (STDMETHODCALLTYPE *Release)(\n        ITextDocument *This);\n\n    /*** IDispatch methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(\n        ITextDocument *This,\n        UINT *pctinfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(\n        ITextDocument *This,\n        UINT iTInfo,\n        LCID lcid,\n        ITypeInfo **ppTInfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(\n        ITextDocument *This,\n        REFIID riid,\n        LPOLESTR *rgszNames,\n        UINT cNames,\n        LCID lcid,\n        DISPID *rgDispId);\n\n    HRESULT (STDMETHODCALLTYPE *Invoke)(\n        ITextDocument *This,\n        DISPID dispIdMember,\n        REFIID riid,\n        LCID lcid,\n        WORD wFlags,\n        DISPPARAMS *pDispParams,\n        VARIANT *pVarResult,\n        EXCEPINFO *pExcepInfo,\n        UINT *puArgErr);\n\n    /*** ITextDocument methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetName)(\n        ITextDocument *This,\n        BSTR *pName);\n\n    HRESULT (STDMETHODCALLTYPE *GetSelection)(\n        ITextDocument *This,\n        ITextSelection **ppSel);\n\n    HRESULT (STDMETHODCALLTYPE *GetStoryCount)(\n        ITextDocument *This,\n        LONG *pCount);\n\n    HRESULT (STDMETHODCALLTYPE *GetStoryRanges)(\n        ITextDocument *This,\n        ITextStoryRanges **ppStories);\n\n    HRESULT (STDMETHODCALLTYPE *GetSaved)(\n        ITextDocument *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetSaved)(\n        ITextDocument *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetDefaultTabStop)(\n        ITextDocument *This,\n        float *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetDefaultTabStop)(\n        ITextDocument *This,\n        float Value);\n\n    HRESULT (STDMETHODCALLTYPE *New)(\n        ITextDocument *This);\n\n    HRESULT (STDMETHODCALLTYPE *Open)(\n        ITextDocument *This,\n        VARIANT *pVar,\n        LONG Flags,\n        LONG CodePage);\n\n    HRESULT (STDMETHODCALLTYPE *Save)(\n        ITextDocument *This,\n        VARIANT *pVar,\n        LONG Flags,\n        LONG CodePage);\n\n    HRESULT (STDMETHODCALLTYPE *Freeze)(\n        ITextDocument *This,\n        LONG *pCount);\n\n    HRESULT (STDMETHODCALLTYPE *Unfreeze)(\n        ITextDocument *This,\n        LONG *pCount);\n\n    HRESULT (STDMETHODCALLTYPE *BeginEditCollection)(\n        ITextDocument *This);\n\n    HRESULT (STDMETHODCALLTYPE *EndEditCollection)(\n        ITextDocument *This);\n\n    HRESULT (STDMETHODCALLTYPE *Undo)(\n        ITextDocument *This,\n        LONG Count,\n        LONG *prop);\n\n    HRESULT (STDMETHODCALLTYPE *Redo)(\n        ITextDocument *This,\n        LONG Count,\n        LONG *prop);\n\n    HRESULT (STDMETHODCALLTYPE *Range)(\n        ITextDocument *This,\n        LONG cp1,\n        LONG cp2,\n        ITextRange **ppRange);\n\n    HRESULT (STDMETHODCALLTYPE *RangeFromPoint)(\n        ITextDocument *This,\n        LONG x,\n        LONG y,\n        ITextRange **ppRange);\n\n    END_INTERFACE\n} ITextDocumentVtbl;\n\ninterface ITextDocument {\n    CONST_VTBL ITextDocumentVtbl* lpVtbl;\n};\n\n#ifdef COBJMACROS\n#ifndef WIDL_C_INLINE_WRAPPERS\n/*** IUnknown methods ***/\n#define ITextDocument_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)\n#define ITextDocument_AddRef(This) (This)->lpVtbl->AddRef(This)\n#define ITextDocument_Release(This) (This)->lpVtbl->Release(This)\n/*** IDispatch methods ***/\n#define ITextDocument_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)\n#define ITextDocument_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)\n#define ITextDocument_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\n#define ITextDocument_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\n/*** ITextDocument methods ***/\n#define ITextDocument_GetName(This,pName) (This)->lpVtbl->GetName(This,pName)\n#define ITextDocument_GetSelection(This,ppSel) (This)->lpVtbl->GetSelection(This,ppSel)\n#define ITextDocument_GetStoryCount(This,pCount) (This)->lpVtbl->GetStoryCount(This,pCount)\n#define ITextDocument_GetStoryRanges(This,ppStories) (This)->lpVtbl->GetStoryRanges(This,ppStories)\n#define ITextDocument_GetSaved(This,pValue) (This)->lpVtbl->GetSaved(This,pValue)\n#define ITextDocument_SetSaved(This,Value) (This)->lpVtbl->SetSaved(This,Value)\n#define ITextDocument_GetDefaultTabStop(This,pValue) (This)->lpVtbl->GetDefaultTabStop(This,pValue)\n#define ITextDocument_SetDefaultTabStop(This,Value) (This)->lpVtbl->SetDefaultTabStop(This,Value)\n#define ITextDocument_New(This) (This)->lpVtbl->New(This)\n#define ITextDocument_Open(This,pVar,Flags,CodePage) (This)->lpVtbl->Open(This,pVar,Flags,CodePage)\n#define ITextDocument_Save(This,pVar,Flags,CodePage) (This)->lpVtbl->Save(This,pVar,Flags,CodePage)\n#define ITextDocument_Freeze(This,pCount) (This)->lpVtbl->Freeze(This,pCount)\n#define ITextDocument_Unfreeze(This,pCount) (This)->lpVtbl->Unfreeze(This,pCount)\n#define ITextDocument_BeginEditCollection(This) (This)->lpVtbl->BeginEditCollection(This)\n#define ITextDocument_EndEditCollection(This) (This)->lpVtbl->EndEditCollection(This)\n#define ITextDocument_Undo(This,Count,prop) (This)->lpVtbl->Undo(This,Count,prop)\n#define ITextDocument_Redo(This,Count,prop) (This)->lpVtbl->Redo(This,Count,prop)\n#define ITextDocument_Range(This,cp1,cp2,ppRange) (This)->lpVtbl->Range(This,cp1,cp2,ppRange)\n#define ITextDocument_RangeFromPoint(This,x,y,ppRange) (This)->lpVtbl->RangeFromPoint(This,x,y,ppRange)\n#else\n/*** IUnknown methods ***/\nstatic FORCEINLINE HRESULT ITextDocument_QueryInterface(ITextDocument* This,REFIID riid,void **ppvObject) {\n    return This->lpVtbl->QueryInterface(This,riid,ppvObject);\n}\nstatic FORCEINLINE ULONG ITextDocument_AddRef(ITextDocument* This) {\n    return This->lpVtbl->AddRef(This);\n}\nstatic FORCEINLINE ULONG ITextDocument_Release(ITextDocument* This) {\n    return This->lpVtbl->Release(This);\n}\n/*** IDispatch methods ***/\nstatic FORCEINLINE HRESULT ITextDocument_GetTypeInfoCount(ITextDocument* This,UINT *pctinfo) {\n    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);\n}\nstatic FORCEINLINE HRESULT ITextDocument_GetTypeInfo(ITextDocument* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {\n    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);\n}\nstatic FORCEINLINE HRESULT ITextDocument_GetIDsOfNames(ITextDocument* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {\n    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);\n}\nstatic FORCEINLINE HRESULT ITextDocument_Invoke(ITextDocument* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {\n    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);\n}\n/*** ITextDocument methods ***/\nstatic FORCEINLINE HRESULT ITextDocument_GetName(ITextDocument* This,BSTR *pName) {\n    return This->lpVtbl->GetName(This,pName);\n}\nstatic FORCEINLINE HRESULT ITextDocument_GetSelection(ITextDocument* This,ITextSelection **ppSel) {\n    return This->lpVtbl->GetSelection(This,ppSel);\n}\nstatic FORCEINLINE HRESULT ITextDocument_GetStoryCount(ITextDocument* This,LONG *pCount) {\n    return This->lpVtbl->GetStoryCount(This,pCount);\n}\nstatic FORCEINLINE HRESULT ITextDocument_GetStoryRanges(ITextDocument* This,ITextStoryRanges **ppStories) {\n    return This->lpVtbl->GetStoryRanges(This,ppStories);\n}\nstatic FORCEINLINE HRESULT ITextDocument_GetSaved(ITextDocument* This,LONG *pValue) {\n    return This->lpVtbl->GetSaved(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextDocument_SetSaved(ITextDocument* This,LONG Value) {\n    return This->lpVtbl->SetSaved(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextDocument_GetDefaultTabStop(ITextDocument* This,float *pValue) {\n    return This->lpVtbl->GetDefaultTabStop(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextDocument_SetDefaultTabStop(ITextDocument* This,float Value) {\n    return This->lpVtbl->SetDefaultTabStop(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextDocument_New(ITextDocument* This) {\n    return This->lpVtbl->New(This);\n}\nstatic FORCEINLINE HRESULT ITextDocument_Open(ITextDocument* This,VARIANT *pVar,LONG Flags,LONG CodePage) {\n    return This->lpVtbl->Open(This,pVar,Flags,CodePage);\n}\nstatic FORCEINLINE HRESULT ITextDocument_Save(ITextDocument* This,VARIANT *pVar,LONG Flags,LONG CodePage) {\n    return This->lpVtbl->Save(This,pVar,Flags,CodePage);\n}\nstatic FORCEINLINE HRESULT ITextDocument_Freeze(ITextDocument* This,LONG *pCount) {\n    return This->lpVtbl->Freeze(This,pCount);\n}\nstatic FORCEINLINE HRESULT ITextDocument_Unfreeze(ITextDocument* This,LONG *pCount) {\n    return This->lpVtbl->Unfreeze(This,pCount);\n}\nstatic FORCEINLINE HRESULT ITextDocument_BeginEditCollection(ITextDocument* This) {\n    return This->lpVtbl->BeginEditCollection(This);\n}\nstatic FORCEINLINE HRESULT ITextDocument_EndEditCollection(ITextDocument* This) {\n    return This->lpVtbl->EndEditCollection(This);\n}\nstatic FORCEINLINE HRESULT ITextDocument_Undo(ITextDocument* This,LONG Count,LONG *prop) {\n    return This->lpVtbl->Undo(This,Count,prop);\n}\nstatic FORCEINLINE HRESULT ITextDocument_Redo(ITextDocument* This,LONG Count,LONG *prop) {\n    return This->lpVtbl->Redo(This,Count,prop);\n}\nstatic FORCEINLINE HRESULT ITextDocument_Range(ITextDocument* This,LONG cp1,LONG cp2,ITextRange **ppRange) {\n    return This->lpVtbl->Range(This,cp1,cp2,ppRange);\n}\nstatic FORCEINLINE HRESULT ITextDocument_RangeFromPoint(ITextDocument* This,LONG x,LONG y,ITextRange **ppRange) {\n    return This->lpVtbl->RangeFromPoint(This,x,y,ppRange);\n}\n#endif\n#endif\n\n#endif\n\n\n#endif  /* __ITextDocument_INTERFACE_DEFINED__ */\n\n/*****************************************************************************\n * ITextDocument2Old interface\n */\n#ifndef __ITextDocument2Old_INTERFACE_DEFINED__\n#define __ITextDocument2Old_INTERFACE_DEFINED__\n\nDEFINE_GUID(IID_ITextDocument2Old, 0x01c25500, 0x4268, 0x11d1, 0x88,0x3a, 0x3c,0x8b,0x00,0xc1,0x00,0x00);\n#if defined(__cplusplus) && !defined(CINTERFACE)\nMIDL_INTERFACE(\"01c25500-4268-11d1-883a-3c8b00c10000\")\nITextDocument2Old : public ITextDocument\n{\n    virtual HRESULT STDMETHODCALLTYPE AttachMsgFilter(\n        IUnknown *filter) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetEffectColor(\n        LONG index,\n        COLORREF cr) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetEffectColor(\n        LONG index,\n        COLORREF *cr) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetCaretType(\n        LONG *type) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetCaretType(\n        LONG type) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetImmContext(\n        LONG *context) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE ReleaseImmContext(\n        LONG context) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetPreferredFont(\n        LONG cp,\n        LONG codepage,\n        LONG option,\n        LONG current_codepage,\n        LONG current_fontsize,\n        BSTR *bstr,\n        LONG *pitch_family,\n        LONG *new_fontsize) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetNotificationMode(\n        LONG *mode) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetNotificationMode(\n        LONG mode) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetClientRect(\n        LONG type,\n        LONG *left,\n        LONG *top,\n        LONG *right,\n        LONG *bottom) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetSelectionEx(\n        ITextSelection **selection) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetWindow(\n        LONG *hwnd) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetFEFlags(\n        LONG *flags) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE UpdateWindow(\n        ) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE CheckTextLimit(\n        LONG cch,\n        LONG *exceed) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE IMEInProgress(\n        LONG mode) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SysBeep(\n        ) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Update(\n        LONG mode) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Notify(\n        LONG notify) = 0;\n\n};\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(ITextDocument2Old, 0x01c25500, 0x4268, 0x11d1, 0x88,0x3a, 0x3c,0x8b,0x00,0xc1,0x00,0x00)\n#endif\n#else\ntypedef struct ITextDocument2OldVtbl {\n    BEGIN_INTERFACE\n\n    /*** IUnknown methods ***/\n    HRESULT (STDMETHODCALLTYPE *QueryInterface)(\n        ITextDocument2Old *This,\n        REFIID riid,\n        void **ppvObject);\n\n    ULONG (STDMETHODCALLTYPE *AddRef)(\n        ITextDocument2Old *This);\n\n    ULONG (STDMETHODCALLTYPE *Release)(\n        ITextDocument2Old *This);\n\n    /*** IDispatch methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(\n        ITextDocument2Old *This,\n        UINT *pctinfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(\n        ITextDocument2Old *This,\n        UINT iTInfo,\n        LCID lcid,\n        ITypeInfo **ppTInfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(\n        ITextDocument2Old *This,\n        REFIID riid,\n        LPOLESTR *rgszNames,\n        UINT cNames,\n        LCID lcid,\n        DISPID *rgDispId);\n\n    HRESULT (STDMETHODCALLTYPE *Invoke)(\n        ITextDocument2Old *This,\n        DISPID dispIdMember,\n        REFIID riid,\n        LCID lcid,\n        WORD wFlags,\n        DISPPARAMS *pDispParams,\n        VARIANT *pVarResult,\n        EXCEPINFO *pExcepInfo,\n        UINT *puArgErr);\n\n    /*** ITextDocument methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetName)(\n        ITextDocument2Old *This,\n        BSTR *pName);\n\n    HRESULT (STDMETHODCALLTYPE *GetSelection)(\n        ITextDocument2Old *This,\n        ITextSelection **ppSel);\n\n    HRESULT (STDMETHODCALLTYPE *GetStoryCount)(\n        ITextDocument2Old *This,\n        LONG *pCount);\n\n    HRESULT (STDMETHODCALLTYPE *GetStoryRanges)(\n        ITextDocument2Old *This,\n        ITextStoryRanges **ppStories);\n\n    HRESULT (STDMETHODCALLTYPE *GetSaved)(\n        ITextDocument2Old *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetSaved)(\n        ITextDocument2Old *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetDefaultTabStop)(\n        ITextDocument2Old *This,\n        float *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetDefaultTabStop)(\n        ITextDocument2Old *This,\n        float Value);\n\n    HRESULT (STDMETHODCALLTYPE *New)(\n        ITextDocument2Old *This);\n\n    HRESULT (STDMETHODCALLTYPE *Open)(\n        ITextDocument2Old *This,\n        VARIANT *pVar,\n        LONG Flags,\n        LONG CodePage);\n\n    HRESULT (STDMETHODCALLTYPE *Save)(\n        ITextDocument2Old *This,\n        VARIANT *pVar,\n        LONG Flags,\n        LONG CodePage);\n\n    HRESULT (STDMETHODCALLTYPE *Freeze)(\n        ITextDocument2Old *This,\n        LONG *pCount);\n\n    HRESULT (STDMETHODCALLTYPE *Unfreeze)(\n        ITextDocument2Old *This,\n        LONG *pCount);\n\n    HRESULT (STDMETHODCALLTYPE *BeginEditCollection)(\n        ITextDocument2Old *This);\n\n    HRESULT (STDMETHODCALLTYPE *EndEditCollection)(\n        ITextDocument2Old *This);\n\n    HRESULT (STDMETHODCALLTYPE *Undo)(\n        ITextDocument2Old *This,\n        LONG Count,\n        LONG *prop);\n\n    HRESULT (STDMETHODCALLTYPE *Redo)(\n        ITextDocument2Old *This,\n        LONG Count,\n        LONG *prop);\n\n    HRESULT (STDMETHODCALLTYPE *Range)(\n        ITextDocument2Old *This,\n        LONG cp1,\n        LONG cp2,\n        ITextRange **ppRange);\n\n    HRESULT (STDMETHODCALLTYPE *RangeFromPoint)(\n        ITextDocument2Old *This,\n        LONG x,\n        LONG y,\n        ITextRange **ppRange);\n\n    /*** ITextDocument2Old methods ***/\n    HRESULT (STDMETHODCALLTYPE *AttachMsgFilter)(\n        ITextDocument2Old *This,\n        IUnknown *filter);\n\n    HRESULT (STDMETHODCALLTYPE *SetEffectColor)(\n        ITextDocument2Old *This,\n        LONG index,\n        COLORREF cr);\n\n    HRESULT (STDMETHODCALLTYPE *GetEffectColor)(\n        ITextDocument2Old *This,\n        LONG index,\n        COLORREF *cr);\n\n    HRESULT (STDMETHODCALLTYPE *GetCaretType)(\n        ITextDocument2Old *This,\n        LONG *type);\n\n    HRESULT (STDMETHODCALLTYPE *SetCaretType)(\n        ITextDocument2Old *This,\n        LONG type);\n\n    HRESULT (STDMETHODCALLTYPE *GetImmContext)(\n        ITextDocument2Old *This,\n        LONG *context);\n\n    HRESULT (STDMETHODCALLTYPE *ReleaseImmContext)(\n        ITextDocument2Old *This,\n        LONG context);\n\n    HRESULT (STDMETHODCALLTYPE *GetPreferredFont)(\n        ITextDocument2Old *This,\n        LONG cp,\n        LONG codepage,\n        LONG option,\n        LONG current_codepage,\n        LONG current_fontsize,\n        BSTR *bstr,\n        LONG *pitch_family,\n        LONG *new_fontsize);\n\n    HRESULT (STDMETHODCALLTYPE *GetNotificationMode)(\n        ITextDocument2Old *This,\n        LONG *mode);\n\n    HRESULT (STDMETHODCALLTYPE *SetNotificationMode)(\n        ITextDocument2Old *This,\n        LONG mode);\n\n    HRESULT (STDMETHODCALLTYPE *GetClientRect)(\n        ITextDocument2Old *This,\n        LONG type,\n        LONG *left,\n        LONG *top,\n        LONG *right,\n        LONG *bottom);\n\n    HRESULT (STDMETHODCALLTYPE *GetSelectionEx)(\n        ITextDocument2Old *This,\n        ITextSelection **selection);\n\n    HRESULT (STDMETHODCALLTYPE *GetWindow)(\n        ITextDocument2Old *This,\n        LONG *hwnd);\n\n    HRESULT (STDMETHODCALLTYPE *GetFEFlags)(\n        ITextDocument2Old *This,\n        LONG *flags);\n\n    HRESULT (STDMETHODCALLTYPE *UpdateWindow)(\n        ITextDocument2Old *This);\n\n    HRESULT (STDMETHODCALLTYPE *CheckTextLimit)(\n        ITextDocument2Old *This,\n        LONG cch,\n        LONG *exceed);\n\n    HRESULT (STDMETHODCALLTYPE *IMEInProgress)(\n        ITextDocument2Old *This,\n        LONG mode);\n\n    HRESULT (STDMETHODCALLTYPE *SysBeep)(\n        ITextDocument2Old *This);\n\n    HRESULT (STDMETHODCALLTYPE *Update)(\n        ITextDocument2Old *This,\n        LONG mode);\n\n    HRESULT (STDMETHODCALLTYPE *Notify)(\n        ITextDocument2Old *This,\n        LONG notify);\n\n    END_INTERFACE\n} ITextDocument2OldVtbl;\n\ninterface ITextDocument2Old {\n    CONST_VTBL ITextDocument2OldVtbl* lpVtbl;\n};\n\n#ifdef COBJMACROS\n#ifndef WIDL_C_INLINE_WRAPPERS\n/*** IUnknown methods ***/\n#define ITextDocument2Old_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)\n#define ITextDocument2Old_AddRef(This) (This)->lpVtbl->AddRef(This)\n#define ITextDocument2Old_Release(This) (This)->lpVtbl->Release(This)\n/*** IDispatch methods ***/\n#define ITextDocument2Old_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)\n#define ITextDocument2Old_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)\n#define ITextDocument2Old_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\n#define ITextDocument2Old_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\n/*** ITextDocument methods ***/\n#define ITextDocument2Old_GetName(This,pName) (This)->lpVtbl->GetName(This,pName)\n#define ITextDocument2Old_GetSelection(This,ppSel) (This)->lpVtbl->GetSelection(This,ppSel)\n#define ITextDocument2Old_GetStoryCount(This,pCount) (This)->lpVtbl->GetStoryCount(This,pCount)\n#define ITextDocument2Old_GetStoryRanges(This,ppStories) (This)->lpVtbl->GetStoryRanges(This,ppStories)\n#define ITextDocument2Old_GetSaved(This,pValue) (This)->lpVtbl->GetSaved(This,pValue)\n#define ITextDocument2Old_SetSaved(This,Value) (This)->lpVtbl->SetSaved(This,Value)\n#define ITextDocument2Old_GetDefaultTabStop(This,pValue) (This)->lpVtbl->GetDefaultTabStop(This,pValue)\n#define ITextDocument2Old_SetDefaultTabStop(This,Value) (This)->lpVtbl->SetDefaultTabStop(This,Value)\n#define ITextDocument2Old_New(This) (This)->lpVtbl->New(This)\n#define ITextDocument2Old_Open(This,pVar,Flags,CodePage) (This)->lpVtbl->Open(This,pVar,Flags,CodePage)\n#define ITextDocument2Old_Save(This,pVar,Flags,CodePage) (This)->lpVtbl->Save(This,pVar,Flags,CodePage)\n#define ITextDocument2Old_Freeze(This,pCount) (This)->lpVtbl->Freeze(This,pCount)\n#define ITextDocument2Old_Unfreeze(This,pCount) (This)->lpVtbl->Unfreeze(This,pCount)\n#define ITextDocument2Old_BeginEditCollection(This) (This)->lpVtbl->BeginEditCollection(This)\n#define ITextDocument2Old_EndEditCollection(This) (This)->lpVtbl->EndEditCollection(This)\n#define ITextDocument2Old_Undo(This,Count,prop) (This)->lpVtbl->Undo(This,Count,prop)\n#define ITextDocument2Old_Redo(This,Count,prop) (This)->lpVtbl->Redo(This,Count,prop)\n#define ITextDocument2Old_Range(This,cp1,cp2,ppRange) (This)->lpVtbl->Range(This,cp1,cp2,ppRange)\n#define ITextDocument2Old_RangeFromPoint(This,x,y,ppRange) (This)->lpVtbl->RangeFromPoint(This,x,y,ppRange)\n/*** ITextDocument2Old methods ***/\n#define ITextDocument2Old_AttachMsgFilter(This,filter) (This)->lpVtbl->AttachMsgFilter(This,filter)\n#define ITextDocument2Old_SetEffectColor(This,index,cr) (This)->lpVtbl->SetEffectColor(This,index,cr)\n#define ITextDocument2Old_GetEffectColor(This,index,cr) (This)->lpVtbl->GetEffectColor(This,index,cr)\n#define ITextDocument2Old_GetCaretType(This,type) (This)->lpVtbl->GetCaretType(This,type)\n#define ITextDocument2Old_SetCaretType(This,type) (This)->lpVtbl->SetCaretType(This,type)\n#define ITextDocument2Old_GetImmContext(This,context) (This)->lpVtbl->GetImmContext(This,context)\n#define ITextDocument2Old_ReleaseImmContext(This,context) (This)->lpVtbl->ReleaseImmContext(This,context)\n#define ITextDocument2Old_GetPreferredFont(This,cp,codepage,option,current_codepage,current_fontsize,bstr,pitch_family,new_fontsize) (This)->lpVtbl->GetPreferredFont(This,cp,codepage,option,current_codepage,current_fontsize,bstr,pitch_family,new_fontsize)\n#define ITextDocument2Old_GetNotificationMode(This,mode) (This)->lpVtbl->GetNotificationMode(This,mode)\n#define ITextDocument2Old_SetNotificationMode(This,mode) (This)->lpVtbl->SetNotificationMode(This,mode)\n#define ITextDocument2Old_GetClientRect(This,type,left,top,right,bottom) (This)->lpVtbl->GetClientRect(This,type,left,top,right,bottom)\n#define ITextDocument2Old_GetSelectionEx(This,selection) (This)->lpVtbl->GetSelectionEx(This,selection)\n#define ITextDocument2Old_GetWindow(This,hwnd) (This)->lpVtbl->GetWindow(This,hwnd)\n#define ITextDocument2Old_GetFEFlags(This,flags) (This)->lpVtbl->GetFEFlags(This,flags)\n#define ITextDocument2Old_UpdateWindow(This) (This)->lpVtbl->UpdateWindow(This)\n#define ITextDocument2Old_CheckTextLimit(This,cch,exceed) (This)->lpVtbl->CheckTextLimit(This,cch,exceed)\n#define ITextDocument2Old_IMEInProgress(This,mode) (This)->lpVtbl->IMEInProgress(This,mode)\n#define ITextDocument2Old_SysBeep(This) (This)->lpVtbl->SysBeep(This)\n#define ITextDocument2Old_Update(This,mode) (This)->lpVtbl->Update(This,mode)\n#define ITextDocument2Old_Notify(This,notify) (This)->lpVtbl->Notify(This,notify)\n#else\n/*** IUnknown methods ***/\nstatic FORCEINLINE HRESULT ITextDocument2Old_QueryInterface(ITextDocument2Old* This,REFIID riid,void **ppvObject) {\n    return This->lpVtbl->QueryInterface(This,riid,ppvObject);\n}\nstatic FORCEINLINE ULONG ITextDocument2Old_AddRef(ITextDocument2Old* This) {\n    return This->lpVtbl->AddRef(This);\n}\nstatic FORCEINLINE ULONG ITextDocument2Old_Release(ITextDocument2Old* This) {\n    return This->lpVtbl->Release(This);\n}\n/*** IDispatch methods ***/\nstatic FORCEINLINE HRESULT ITextDocument2Old_GetTypeInfoCount(ITextDocument2Old* This,UINT *pctinfo) {\n    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_GetTypeInfo(ITextDocument2Old* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {\n    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_GetIDsOfNames(ITextDocument2Old* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {\n    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_Invoke(ITextDocument2Old* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {\n    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);\n}\n/*** ITextDocument methods ***/\nstatic FORCEINLINE HRESULT ITextDocument2Old_GetName(ITextDocument2Old* This,BSTR *pName) {\n    return This->lpVtbl->GetName(This,pName);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_GetSelection(ITextDocument2Old* This,ITextSelection **ppSel) {\n    return This->lpVtbl->GetSelection(This,ppSel);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_GetStoryCount(ITextDocument2Old* This,LONG *pCount) {\n    return This->lpVtbl->GetStoryCount(This,pCount);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_GetStoryRanges(ITextDocument2Old* This,ITextStoryRanges **ppStories) {\n    return This->lpVtbl->GetStoryRanges(This,ppStories);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_GetSaved(ITextDocument2Old* This,LONG *pValue) {\n    return This->lpVtbl->GetSaved(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_SetSaved(ITextDocument2Old* This,LONG Value) {\n    return This->lpVtbl->SetSaved(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_GetDefaultTabStop(ITextDocument2Old* This,float *pValue) {\n    return This->lpVtbl->GetDefaultTabStop(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_SetDefaultTabStop(ITextDocument2Old* This,float Value) {\n    return This->lpVtbl->SetDefaultTabStop(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_New(ITextDocument2Old* This) {\n    return This->lpVtbl->New(This);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_Open(ITextDocument2Old* This,VARIANT *pVar,LONG Flags,LONG CodePage) {\n    return This->lpVtbl->Open(This,pVar,Flags,CodePage);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_Save(ITextDocument2Old* This,VARIANT *pVar,LONG Flags,LONG CodePage) {\n    return This->lpVtbl->Save(This,pVar,Flags,CodePage);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_Freeze(ITextDocument2Old* This,LONG *pCount) {\n    return This->lpVtbl->Freeze(This,pCount);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_Unfreeze(ITextDocument2Old* This,LONG *pCount) {\n    return This->lpVtbl->Unfreeze(This,pCount);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_BeginEditCollection(ITextDocument2Old* This) {\n    return This->lpVtbl->BeginEditCollection(This);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_EndEditCollection(ITextDocument2Old* This) {\n    return This->lpVtbl->EndEditCollection(This);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_Undo(ITextDocument2Old* This,LONG Count,LONG *prop) {\n    return This->lpVtbl->Undo(This,Count,prop);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_Redo(ITextDocument2Old* This,LONG Count,LONG *prop) {\n    return This->lpVtbl->Redo(This,Count,prop);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_Range(ITextDocument2Old* This,LONG cp1,LONG cp2,ITextRange **ppRange) {\n    return This->lpVtbl->Range(This,cp1,cp2,ppRange);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_RangeFromPoint(ITextDocument2Old* This,LONG x,LONG y,ITextRange **ppRange) {\n    return This->lpVtbl->RangeFromPoint(This,x,y,ppRange);\n}\n/*** ITextDocument2Old methods ***/\nstatic FORCEINLINE HRESULT ITextDocument2Old_AttachMsgFilter(ITextDocument2Old* This,IUnknown *filter) {\n    return This->lpVtbl->AttachMsgFilter(This,filter);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_SetEffectColor(ITextDocument2Old* This,LONG index,COLORREF cr) {\n    return This->lpVtbl->SetEffectColor(This,index,cr);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_GetEffectColor(ITextDocument2Old* This,LONG index,COLORREF *cr) {\n    return This->lpVtbl->GetEffectColor(This,index,cr);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_GetCaretType(ITextDocument2Old* This,LONG *type) {\n    return This->lpVtbl->GetCaretType(This,type);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_SetCaretType(ITextDocument2Old* This,LONG type) {\n    return This->lpVtbl->SetCaretType(This,type);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_GetImmContext(ITextDocument2Old* This,LONG *context) {\n    return This->lpVtbl->GetImmContext(This,context);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_ReleaseImmContext(ITextDocument2Old* This,LONG context) {\n    return This->lpVtbl->ReleaseImmContext(This,context);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_GetPreferredFont(ITextDocument2Old* This,LONG cp,LONG codepage,LONG option,LONG current_codepage,LONG current_fontsize,BSTR *bstr,LONG *pitch_family,LONG *new_fontsize) {\n    return This->lpVtbl->GetPreferredFont(This,cp,codepage,option,current_codepage,current_fontsize,bstr,pitch_family,new_fontsize);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_GetNotificationMode(ITextDocument2Old* This,LONG *mode) {\n    return This->lpVtbl->GetNotificationMode(This,mode);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_SetNotificationMode(ITextDocument2Old* This,LONG mode) {\n    return This->lpVtbl->SetNotificationMode(This,mode);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_GetClientRect(ITextDocument2Old* This,LONG type,LONG *left,LONG *top,LONG *right,LONG *bottom) {\n    return This->lpVtbl->GetClientRect(This,type,left,top,right,bottom);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_GetSelectionEx(ITextDocument2Old* This,ITextSelection **selection) {\n    return This->lpVtbl->GetSelectionEx(This,selection);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_GetWindow(ITextDocument2Old* This,LONG *hwnd) {\n    return This->lpVtbl->GetWindow(This,hwnd);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_GetFEFlags(ITextDocument2Old* This,LONG *flags) {\n    return This->lpVtbl->GetFEFlags(This,flags);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_UpdateWindow(ITextDocument2Old* This) {\n    return This->lpVtbl->UpdateWindow(This);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_CheckTextLimit(ITextDocument2Old* This,LONG cch,LONG *exceed) {\n    return This->lpVtbl->CheckTextLimit(This,cch,exceed);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_IMEInProgress(ITextDocument2Old* This,LONG mode) {\n    return This->lpVtbl->IMEInProgress(This,mode);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_SysBeep(ITextDocument2Old* This) {\n    return This->lpVtbl->SysBeep(This);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_Update(ITextDocument2Old* This,LONG mode) {\n    return This->lpVtbl->Update(This,mode);\n}\nstatic FORCEINLINE HRESULT ITextDocument2Old_Notify(ITextDocument2Old* This,LONG notify) {\n    return This->lpVtbl->Notify(This,notify);\n}\n#endif\n#endif\n\n#endif\n\n\n#endif  /* __ITextDocument2Old_INTERFACE_DEFINED__ */\n\n#ifndef __ITextDisplays_FWD_DEFINED__\n#define __ITextDisplays_FWD_DEFINED__\ntypedef interface ITextDisplays ITextDisplays;\n#ifdef __cplusplus\ninterface ITextDisplays;\n#endif /* __cplusplus */\n#endif\n\n#ifndef __ITextFont2_FWD_DEFINED__\n#define __ITextFont2_FWD_DEFINED__\ntypedef interface ITextFont2 ITextFont2;\n#ifdef __cplusplus\ninterface ITextFont2;\n#endif /* __cplusplus */\n#endif\n\n#ifndef __ITextPara2_FWD_DEFINED__\n#define __ITextPara2_FWD_DEFINED__\ntypedef interface ITextPara2 ITextPara2;\n#ifdef __cplusplus\ninterface ITextPara2;\n#endif /* __cplusplus */\n#endif\n\n#ifndef __ITextStory_FWD_DEFINED__\n#define __ITextStory_FWD_DEFINED__\ntypedef interface ITextStory ITextStory;\n#ifdef __cplusplus\ninterface ITextStory;\n#endif /* __cplusplus */\n#endif\n\n#ifndef __ITextStoryRanges2_FWD_DEFINED__\n#define __ITextStoryRanges2_FWD_DEFINED__\ntypedef interface ITextStoryRanges2 ITextStoryRanges2;\n#ifdef __cplusplus\ninterface ITextStoryRanges2;\n#endif /* __cplusplus */\n#endif\n\n#ifndef __ITextStrings_FWD_DEFINED__\n#define __ITextStrings_FWD_DEFINED__\ntypedef interface ITextStrings ITextStrings;\n#ifdef __cplusplus\ninterface ITextStrings;\n#endif /* __cplusplus */\n#endif\n\n/*****************************************************************************\n * ITextRow interface\n */\n#ifndef __ITextRow_INTERFACE_DEFINED__\n#define __ITextRow_INTERFACE_DEFINED__\n\nDEFINE_GUID(IID_ITextRow, 0xc241f5ef, 0x7206, 0x11d8, 0xa2,0xc7, 0x00,0xa0,0xd1,0xd6,0xc6,0xb3);\n#if defined(__cplusplus) && !defined(CINTERFACE)\nMIDL_INTERFACE(\"c241f5ef-7206-11d8-a2c7-00a0d1d6c6b3\")\nITextRow : public IDispatch\n{\n    virtual HRESULT STDMETHODCALLTYPE GetAlignment(\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetAlignment(\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetCellCount(\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetCellCount(\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetCellCountCache(\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetCellCountCache(\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetCellIndex(\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetCellIndex(\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetCellMargin(\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetCellMargin(\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetHeight(\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetHeight(\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetIndent(\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetIndent(\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetKeepTogether(\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetKeepTogether(\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetKeepWithNext(\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetKeepWithNext(\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetNestLevel(\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetRTL(\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetRTL(\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetCellAlignment(\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetCellAlignment(\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetCellColorBack(\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetCellColorBack(\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetCellColorFore(\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetCellColorFore(\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetCellMergeFlags(\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetCellMergeFlags(\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetCellShading(\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetCellShading(\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetCellVerticalText(\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetCellVerticalText(\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetCellWidth(\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetCellWidth(\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetCellBorderColors(\n        LONG *left,\n        LONG *top,\n        LONG *right,\n        LONG *bottom) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetCellBorderWidths(\n        LONG *left,\n        LONG *top,\n        LONG *right,\n        LONG *bottom) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetCellBorderColors(\n        LONG left,\n        LONG top,\n        LONG right,\n        LONG bottom) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetCellBorderWidths(\n        LONG left,\n        LONG top,\n        LONG right,\n        LONG bottom) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Apply(\n        LONG row,\n        LONG flags) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE CanChange(\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetProperty(\n        LONG type,\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Insert(\n        LONG row) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE IsEqual(\n        ITextRow *row,\n        LONG *r) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Reset(\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetProperty(\n        LONG type,\n        LONG value) = 0;\n\n};\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(ITextRow, 0xc241f5ef, 0x7206, 0x11d8, 0xa2,0xc7, 0x00,0xa0,0xd1,0xd6,0xc6,0xb3)\n#endif\n#else\ntypedef struct ITextRowVtbl {\n    BEGIN_INTERFACE\n\n    /*** IUnknown methods ***/\n    HRESULT (STDMETHODCALLTYPE *QueryInterface)(\n        ITextRow *This,\n        REFIID riid,\n        void **ppvObject);\n\n    ULONG (STDMETHODCALLTYPE *AddRef)(\n        ITextRow *This);\n\n    ULONG (STDMETHODCALLTYPE *Release)(\n        ITextRow *This);\n\n    /*** IDispatch methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(\n        ITextRow *This,\n        UINT *pctinfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(\n        ITextRow *This,\n        UINT iTInfo,\n        LCID lcid,\n        ITypeInfo **ppTInfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(\n        ITextRow *This,\n        REFIID riid,\n        LPOLESTR *rgszNames,\n        UINT cNames,\n        LCID lcid,\n        DISPID *rgDispId);\n\n    HRESULT (STDMETHODCALLTYPE *Invoke)(\n        ITextRow *This,\n        DISPID dispIdMember,\n        REFIID riid,\n        LCID lcid,\n        WORD wFlags,\n        DISPPARAMS *pDispParams,\n        VARIANT *pVarResult,\n        EXCEPINFO *pExcepInfo,\n        UINT *puArgErr);\n\n    /*** ITextRow methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetAlignment)(\n        ITextRow *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *SetAlignment)(\n        ITextRow *This,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *GetCellCount)(\n        ITextRow *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *SetCellCount)(\n        ITextRow *This,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *GetCellCountCache)(\n        ITextRow *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *SetCellCountCache)(\n        ITextRow *This,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *GetCellIndex)(\n        ITextRow *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *SetCellIndex)(\n        ITextRow *This,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *GetCellMargin)(\n        ITextRow *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *SetCellMargin)(\n        ITextRow *This,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *GetHeight)(\n        ITextRow *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *SetHeight)(\n        ITextRow *This,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *GetIndent)(\n        ITextRow *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *SetIndent)(\n        ITextRow *This,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *GetKeepTogether)(\n        ITextRow *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *SetKeepTogether)(\n        ITextRow *This,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *GetKeepWithNext)(\n        ITextRow *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *SetKeepWithNext)(\n        ITextRow *This,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *GetNestLevel)(\n        ITextRow *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *GetRTL)(\n        ITextRow *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *SetRTL)(\n        ITextRow *This,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *GetCellAlignment)(\n        ITextRow *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *SetCellAlignment)(\n        ITextRow *This,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *GetCellColorBack)(\n        ITextRow *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *SetCellColorBack)(\n        ITextRow *This,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *GetCellColorFore)(\n        ITextRow *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *SetCellColorFore)(\n        ITextRow *This,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *GetCellMergeFlags)(\n        ITextRow *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *SetCellMergeFlags)(\n        ITextRow *This,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *GetCellShading)(\n        ITextRow *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *SetCellShading)(\n        ITextRow *This,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *GetCellVerticalText)(\n        ITextRow *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *SetCellVerticalText)(\n        ITextRow *This,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *GetCellWidth)(\n        ITextRow *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *SetCellWidth)(\n        ITextRow *This,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *GetCellBorderColors)(\n        ITextRow *This,\n        LONG *left,\n        LONG *top,\n        LONG *right,\n        LONG *bottom);\n\n    HRESULT (STDMETHODCALLTYPE *GetCellBorderWidths)(\n        ITextRow *This,\n        LONG *left,\n        LONG *top,\n        LONG *right,\n        LONG *bottom);\n\n    HRESULT (STDMETHODCALLTYPE *SetCellBorderColors)(\n        ITextRow *This,\n        LONG left,\n        LONG top,\n        LONG right,\n        LONG bottom);\n\n    HRESULT (STDMETHODCALLTYPE *SetCellBorderWidths)(\n        ITextRow *This,\n        LONG left,\n        LONG top,\n        LONG right,\n        LONG bottom);\n\n    HRESULT (STDMETHODCALLTYPE *Apply)(\n        ITextRow *This,\n        LONG row,\n        LONG flags);\n\n    HRESULT (STDMETHODCALLTYPE *CanChange)(\n        ITextRow *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *GetProperty)(\n        ITextRow *This,\n        LONG type,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *Insert)(\n        ITextRow *This,\n        LONG row);\n\n    HRESULT (STDMETHODCALLTYPE *IsEqual)(\n        ITextRow *This,\n        ITextRow *row,\n        LONG *r);\n\n    HRESULT (STDMETHODCALLTYPE *Reset)(\n        ITextRow *This,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *SetProperty)(\n        ITextRow *This,\n        LONG type,\n        LONG value);\n\n    END_INTERFACE\n} ITextRowVtbl;\n\ninterface ITextRow {\n    CONST_VTBL ITextRowVtbl* lpVtbl;\n};\n\n#ifdef COBJMACROS\n#ifndef WIDL_C_INLINE_WRAPPERS\n/*** IUnknown methods ***/\n#define ITextRow_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)\n#define ITextRow_AddRef(This) (This)->lpVtbl->AddRef(This)\n#define ITextRow_Release(This) (This)->lpVtbl->Release(This)\n/*** IDispatch methods ***/\n#define ITextRow_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)\n#define ITextRow_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)\n#define ITextRow_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\n#define ITextRow_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\n/*** ITextRow methods ***/\n#define ITextRow_GetAlignment(This,value) (This)->lpVtbl->GetAlignment(This,value)\n#define ITextRow_SetAlignment(This,value) (This)->lpVtbl->SetAlignment(This,value)\n#define ITextRow_GetCellCount(This,value) (This)->lpVtbl->GetCellCount(This,value)\n#define ITextRow_SetCellCount(This,value) (This)->lpVtbl->SetCellCount(This,value)\n#define ITextRow_GetCellCountCache(This,value) (This)->lpVtbl->GetCellCountCache(This,value)\n#define ITextRow_SetCellCountCache(This,value) (This)->lpVtbl->SetCellCountCache(This,value)\n#define ITextRow_GetCellIndex(This,value) (This)->lpVtbl->GetCellIndex(This,value)\n#define ITextRow_SetCellIndex(This,value) (This)->lpVtbl->SetCellIndex(This,value)\n#define ITextRow_GetCellMargin(This,value) (This)->lpVtbl->GetCellMargin(This,value)\n#define ITextRow_SetCellMargin(This,value) (This)->lpVtbl->SetCellMargin(This,value)\n#define ITextRow_GetHeight(This,value) (This)->lpVtbl->GetHeight(This,value)\n#define ITextRow_SetHeight(This,value) (This)->lpVtbl->SetHeight(This,value)\n#define ITextRow_GetIndent(This,value) (This)->lpVtbl->GetIndent(This,value)\n#define ITextRow_SetIndent(This,value) (This)->lpVtbl->SetIndent(This,value)\n#define ITextRow_GetKeepTogether(This,value) (This)->lpVtbl->GetKeepTogether(This,value)\n#define ITextRow_SetKeepTogether(This,value) (This)->lpVtbl->SetKeepTogether(This,value)\n#define ITextRow_GetKeepWithNext(This,value) (This)->lpVtbl->GetKeepWithNext(This,value)\n#define ITextRow_SetKeepWithNext(This,value) (This)->lpVtbl->SetKeepWithNext(This,value)\n#define ITextRow_GetNestLevel(This,value) (This)->lpVtbl->GetNestLevel(This,value)\n#define ITextRow_GetRTL(This,value) (This)->lpVtbl->GetRTL(This,value)\n#define ITextRow_SetRTL(This,value) (This)->lpVtbl->SetRTL(This,value)\n#define ITextRow_GetCellAlignment(This,value) (This)->lpVtbl->GetCellAlignment(This,value)\n#define ITextRow_SetCellAlignment(This,value) (This)->lpVtbl->SetCellAlignment(This,value)\n#define ITextRow_GetCellColorBack(This,value) (This)->lpVtbl->GetCellColorBack(This,value)\n#define ITextRow_SetCellColorBack(This,value) (This)->lpVtbl->SetCellColorBack(This,value)\n#define ITextRow_GetCellColorFore(This,value) (This)->lpVtbl->GetCellColorFore(This,value)\n#define ITextRow_SetCellColorFore(This,value) (This)->lpVtbl->SetCellColorFore(This,value)\n#define ITextRow_GetCellMergeFlags(This,value) (This)->lpVtbl->GetCellMergeFlags(This,value)\n#define ITextRow_SetCellMergeFlags(This,value) (This)->lpVtbl->SetCellMergeFlags(This,value)\n#define ITextRow_GetCellShading(This,value) (This)->lpVtbl->GetCellShading(This,value)\n#define ITextRow_SetCellShading(This,value) (This)->lpVtbl->SetCellShading(This,value)\n#define ITextRow_GetCellVerticalText(This,value) (This)->lpVtbl->GetCellVerticalText(This,value)\n#define ITextRow_SetCellVerticalText(This,value) (This)->lpVtbl->SetCellVerticalText(This,value)\n#define ITextRow_GetCellWidth(This,value) (This)->lpVtbl->GetCellWidth(This,value)\n#define ITextRow_SetCellWidth(This,value) (This)->lpVtbl->SetCellWidth(This,value)\n#define ITextRow_GetCellBorderColors(This,left,top,right,bottom) (This)->lpVtbl->GetCellBorderColors(This,left,top,right,bottom)\n#define ITextRow_GetCellBorderWidths(This,left,top,right,bottom) (This)->lpVtbl->GetCellBorderWidths(This,left,top,right,bottom)\n#define ITextRow_SetCellBorderColors(This,left,top,right,bottom) (This)->lpVtbl->SetCellBorderColors(This,left,top,right,bottom)\n#define ITextRow_SetCellBorderWidths(This,left,top,right,bottom) (This)->lpVtbl->SetCellBorderWidths(This,left,top,right,bottom)\n#define ITextRow_Apply(This,row,flags) (This)->lpVtbl->Apply(This,row,flags)\n#define ITextRow_CanChange(This,value) (This)->lpVtbl->CanChange(This,value)\n#define ITextRow_GetProperty(This,type,value) (This)->lpVtbl->GetProperty(This,type,value)\n#define ITextRow_Insert(This,row) (This)->lpVtbl->Insert(This,row)\n#define ITextRow_IsEqual(This,row,r) (This)->lpVtbl->IsEqual(This,row,r)\n#define ITextRow_Reset(This,value) (This)->lpVtbl->Reset(This,value)\n#define ITextRow_SetProperty(This,type,value) (This)->lpVtbl->SetProperty(This,type,value)\n#else\n/*** IUnknown methods ***/\nstatic FORCEINLINE HRESULT ITextRow_QueryInterface(ITextRow* This,REFIID riid,void **ppvObject) {\n    return This->lpVtbl->QueryInterface(This,riid,ppvObject);\n}\nstatic FORCEINLINE ULONG ITextRow_AddRef(ITextRow* This) {\n    return This->lpVtbl->AddRef(This);\n}\nstatic FORCEINLINE ULONG ITextRow_Release(ITextRow* This) {\n    return This->lpVtbl->Release(This);\n}\n/*** IDispatch methods ***/\nstatic FORCEINLINE HRESULT ITextRow_GetTypeInfoCount(ITextRow* This,UINT *pctinfo) {\n    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);\n}\nstatic FORCEINLINE HRESULT ITextRow_GetTypeInfo(ITextRow* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {\n    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);\n}\nstatic FORCEINLINE HRESULT ITextRow_GetIDsOfNames(ITextRow* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {\n    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);\n}\nstatic FORCEINLINE HRESULT ITextRow_Invoke(ITextRow* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {\n    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);\n}\n/*** ITextRow methods ***/\nstatic FORCEINLINE HRESULT ITextRow_GetAlignment(ITextRow* This,LONG *value) {\n    return This->lpVtbl->GetAlignment(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_SetAlignment(ITextRow* This,LONG value) {\n    return This->lpVtbl->SetAlignment(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_GetCellCount(ITextRow* This,LONG *value) {\n    return This->lpVtbl->GetCellCount(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_SetCellCount(ITextRow* This,LONG value) {\n    return This->lpVtbl->SetCellCount(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_GetCellCountCache(ITextRow* This,LONG *value) {\n    return This->lpVtbl->GetCellCountCache(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_SetCellCountCache(ITextRow* This,LONG value) {\n    return This->lpVtbl->SetCellCountCache(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_GetCellIndex(ITextRow* This,LONG *value) {\n    return This->lpVtbl->GetCellIndex(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_SetCellIndex(ITextRow* This,LONG value) {\n    return This->lpVtbl->SetCellIndex(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_GetCellMargin(ITextRow* This,LONG *value) {\n    return This->lpVtbl->GetCellMargin(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_SetCellMargin(ITextRow* This,LONG value) {\n    return This->lpVtbl->SetCellMargin(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_GetHeight(ITextRow* This,LONG *value) {\n    return This->lpVtbl->GetHeight(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_SetHeight(ITextRow* This,LONG value) {\n    return This->lpVtbl->SetHeight(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_GetIndent(ITextRow* This,LONG *value) {\n    return This->lpVtbl->GetIndent(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_SetIndent(ITextRow* This,LONG value) {\n    return This->lpVtbl->SetIndent(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_GetKeepTogether(ITextRow* This,LONG *value) {\n    return This->lpVtbl->GetKeepTogether(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_SetKeepTogether(ITextRow* This,LONG value) {\n    return This->lpVtbl->SetKeepTogether(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_GetKeepWithNext(ITextRow* This,LONG *value) {\n    return This->lpVtbl->GetKeepWithNext(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_SetKeepWithNext(ITextRow* This,LONG value) {\n    return This->lpVtbl->SetKeepWithNext(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_GetNestLevel(ITextRow* This,LONG *value) {\n    return This->lpVtbl->GetNestLevel(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_GetRTL(ITextRow* This,LONG *value) {\n    return This->lpVtbl->GetRTL(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_SetRTL(ITextRow* This,LONG value) {\n    return This->lpVtbl->SetRTL(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_GetCellAlignment(ITextRow* This,LONG *value) {\n    return This->lpVtbl->GetCellAlignment(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_SetCellAlignment(ITextRow* This,LONG value) {\n    return This->lpVtbl->SetCellAlignment(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_GetCellColorBack(ITextRow* This,LONG *value) {\n    return This->lpVtbl->GetCellColorBack(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_SetCellColorBack(ITextRow* This,LONG value) {\n    return This->lpVtbl->SetCellColorBack(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_GetCellColorFore(ITextRow* This,LONG *value) {\n    return This->lpVtbl->GetCellColorFore(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_SetCellColorFore(ITextRow* This,LONG value) {\n    return This->lpVtbl->SetCellColorFore(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_GetCellMergeFlags(ITextRow* This,LONG *value) {\n    return This->lpVtbl->GetCellMergeFlags(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_SetCellMergeFlags(ITextRow* This,LONG value) {\n    return This->lpVtbl->SetCellMergeFlags(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_GetCellShading(ITextRow* This,LONG *value) {\n    return This->lpVtbl->GetCellShading(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_SetCellShading(ITextRow* This,LONG value) {\n    return This->lpVtbl->SetCellShading(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_GetCellVerticalText(ITextRow* This,LONG *value) {\n    return This->lpVtbl->GetCellVerticalText(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_SetCellVerticalText(ITextRow* This,LONG value) {\n    return This->lpVtbl->SetCellVerticalText(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_GetCellWidth(ITextRow* This,LONG *value) {\n    return This->lpVtbl->GetCellWidth(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_SetCellWidth(ITextRow* This,LONG value) {\n    return This->lpVtbl->SetCellWidth(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_GetCellBorderColors(ITextRow* This,LONG *left,LONG *top,LONG *right,LONG *bottom) {\n    return This->lpVtbl->GetCellBorderColors(This,left,top,right,bottom);\n}\nstatic FORCEINLINE HRESULT ITextRow_GetCellBorderWidths(ITextRow* This,LONG *left,LONG *top,LONG *right,LONG *bottom) {\n    return This->lpVtbl->GetCellBorderWidths(This,left,top,right,bottom);\n}\nstatic FORCEINLINE HRESULT ITextRow_SetCellBorderColors(ITextRow* This,LONG left,LONG top,LONG right,LONG bottom) {\n    return This->lpVtbl->SetCellBorderColors(This,left,top,right,bottom);\n}\nstatic FORCEINLINE HRESULT ITextRow_SetCellBorderWidths(ITextRow* This,LONG left,LONG top,LONG right,LONG bottom) {\n    return This->lpVtbl->SetCellBorderWidths(This,left,top,right,bottom);\n}\nstatic FORCEINLINE HRESULT ITextRow_Apply(ITextRow* This,LONG row,LONG flags) {\n    return This->lpVtbl->Apply(This,row,flags);\n}\nstatic FORCEINLINE HRESULT ITextRow_CanChange(ITextRow* This,LONG *value) {\n    return This->lpVtbl->CanChange(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_GetProperty(ITextRow* This,LONG type,LONG *value) {\n    return This->lpVtbl->GetProperty(This,type,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_Insert(ITextRow* This,LONG row) {\n    return This->lpVtbl->Insert(This,row);\n}\nstatic FORCEINLINE HRESULT ITextRow_IsEqual(ITextRow* This,ITextRow *row,LONG *r) {\n    return This->lpVtbl->IsEqual(This,row,r);\n}\nstatic FORCEINLINE HRESULT ITextRow_Reset(ITextRow* This,LONG value) {\n    return This->lpVtbl->Reset(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRow_SetProperty(ITextRow* This,LONG type,LONG value) {\n    return This->lpVtbl->SetProperty(This,type,value);\n}\n#endif\n#endif\n\n#endif\n\n\n#endif  /* __ITextRow_INTERFACE_DEFINED__ */\n\n/*****************************************************************************\n * ITextRange2 interface\n */\n#ifndef __ITextRange2_INTERFACE_DEFINED__\n#define __ITextRange2_INTERFACE_DEFINED__\n\nDEFINE_GUID(IID_ITextRange2, 0xc241f5e2, 0x7206, 0x11d8, 0xa2,0xc7, 0x00,0xa0,0xd1,0xd6,0xc6,0xb3);\n#if defined(__cplusplus) && !defined(CINTERFACE)\nMIDL_INTERFACE(\"c241f5e2-7206-11d8-a2c7-00a0d1d6c6b3\")\nITextRange2 : public ITextSelection\n{\n    virtual HRESULT STDMETHODCALLTYPE GetCch(\n        LONG *count) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetCells(\n        IUnknown **cells) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetColumn(\n        IUnknown **column) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetCount(\n        LONG *count) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetDuplicate2(\n        ITextRange2 **range) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetFont2(\n        ITextFont2 **font) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetFont2(\n        ITextFont2 *font) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetFormattedText2(\n        ITextRange2 **range) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetFormattedText2(\n        ITextRange2 *range) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetGravity(\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetGravity(\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetPara2(\n        ITextPara2 **para) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetPara2(\n        ITextPara2 *para) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetRow(\n        ITextRow **row) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetStartPara(\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetTable(\n        IUnknown **table) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetURL(\n        BSTR *url) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetURL(\n        BSTR url) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE AddSubrange(\n        LONG cp1,\n        LONG cp2,\n        LONG activate) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE BuildUpMath(\n        LONG flags) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE DeleteSubrange(\n        LONG first,\n        LONG lim) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Find(\n        ITextRange2 *range,\n        LONG count,\n        LONG flags,\n        LONG *delta) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetChar2(\n        LONG *ch,\n        LONG offset) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetDropCap(\n        LONG *line,\n        LONG *pos) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetInlineObject(\n        LONG *type,\n        LONG *align,\n        LONG *ch,\n        LONG *ch1,\n        LONG *ch2,\n        LONG *count,\n        LONG *texstyle,\n        LONG *ccol,\n        LONG *level) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetProperty(\n        LONG type,\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetRect(\n        LONG type,\n        LONG *left,\n        LONG *top,\n        LONG *right,\n        LONG *bottom,\n        LONG *hit) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetSubrange(\n        LONG subrange,\n        LONG *first,\n        LONG *limit) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetText2(\n        LONG flags,\n        BSTR *str) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE HexToUnicode(\n        ) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE InsertTable(\n        LONG col,\n        LONG row,\n        LONG autofit) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Linearize(\n        LONG flags) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetActiveSubrange(\n        LONG anchor,\n        LONG active) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetDropCap(\n        LONG line,\n        LONG pos) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetProperty(\n        LONG type,\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetText2(\n        LONG flags,\n        BSTR str) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE UnicodeToHex(\n        ) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetInlineObject(\n        LONG type,\n        LONG align,\n        LONG ch,\n        LONG ch1,\n        LONG ch2,\n        LONG count,\n        LONG texstyle,\n        LONG ccol) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetMathFunctionType(\n        BSTR str,\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE InsertImage(\n        LONG width,\n        LONG height,\n        LONG ascent,\n        LONG type,\n        BSTR alttext,\n        IStream *stream) = 0;\n\n};\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(ITextRange2, 0xc241f5e2, 0x7206, 0x11d8, 0xa2,0xc7, 0x00,0xa0,0xd1,0xd6,0xc6,0xb3)\n#endif\n#else\ntypedef struct ITextRange2Vtbl {\n    BEGIN_INTERFACE\n\n    /*** IUnknown methods ***/\n    HRESULT (STDMETHODCALLTYPE *QueryInterface)(\n        ITextRange2 *This,\n        REFIID riid,\n        void **ppvObject);\n\n    ULONG (STDMETHODCALLTYPE *AddRef)(\n        ITextRange2 *This);\n\n    ULONG (STDMETHODCALLTYPE *Release)(\n        ITextRange2 *This);\n\n    /*** IDispatch methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(\n        ITextRange2 *This,\n        UINT *pctinfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(\n        ITextRange2 *This,\n        UINT iTInfo,\n        LCID lcid,\n        ITypeInfo **ppTInfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(\n        ITextRange2 *This,\n        REFIID riid,\n        LPOLESTR *rgszNames,\n        UINT cNames,\n        LCID lcid,\n        DISPID *rgDispId);\n\n    HRESULT (STDMETHODCALLTYPE *Invoke)(\n        ITextRange2 *This,\n        DISPID dispIdMember,\n        REFIID riid,\n        LCID lcid,\n        WORD wFlags,\n        DISPPARAMS *pDispParams,\n        VARIANT *pVarResult,\n        EXCEPINFO *pExcepInfo,\n        UINT *puArgErr);\n\n    /*** ITextRange methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetText)(\n        ITextRange2 *This,\n        BSTR *pbstr);\n\n    HRESULT (STDMETHODCALLTYPE *SetText)(\n        ITextRange2 *This,\n        BSTR bstr);\n\n    HRESULT (STDMETHODCALLTYPE *GetChar)(\n        ITextRange2 *This,\n        LONG *pch);\n\n    HRESULT (STDMETHODCALLTYPE *SetChar)(\n        ITextRange2 *This,\n        LONG ch);\n\n    HRESULT (STDMETHODCALLTYPE *GetDuplicate)(\n        ITextRange2 *This,\n        ITextRange **ppRange);\n\n    HRESULT (STDMETHODCALLTYPE *GetFormattedText)(\n        ITextRange2 *This,\n        ITextRange **ppRange);\n\n    HRESULT (STDMETHODCALLTYPE *SetFormattedText)(\n        ITextRange2 *This,\n        ITextRange *pRange);\n\n    HRESULT (STDMETHODCALLTYPE *GetStart)(\n        ITextRange2 *This,\n        LONG *pcpFirst);\n\n    HRESULT (STDMETHODCALLTYPE *SetStart)(\n        ITextRange2 *This,\n        LONG cpFirst);\n\n    HRESULT (STDMETHODCALLTYPE *GetEnd)(\n        ITextRange2 *This,\n        LONG *pcpLim);\n\n    HRESULT (STDMETHODCALLTYPE *SetEnd)(\n        ITextRange2 *This,\n        LONG cpLim);\n\n    HRESULT (STDMETHODCALLTYPE *GetFont)(\n        ITextRange2 *This,\n        ITextFont **pFont);\n\n    HRESULT (STDMETHODCALLTYPE *SetFont)(\n        ITextRange2 *This,\n        ITextFont *pFont);\n\n    HRESULT (STDMETHODCALLTYPE *GetPara)(\n        ITextRange2 *This,\n        ITextPara **ppPara);\n\n    HRESULT (STDMETHODCALLTYPE *SetPara)(\n        ITextRange2 *This,\n        ITextPara *pPara);\n\n    HRESULT (STDMETHODCALLTYPE *GetStoryLength)(\n        ITextRange2 *This,\n        LONG *pcch);\n\n    HRESULT (STDMETHODCALLTYPE *GetStoryType)(\n        ITextRange2 *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *Collapse)(\n        ITextRange2 *This,\n        LONG bStart);\n\n    HRESULT (STDMETHODCALLTYPE *Expand)(\n        ITextRange2 *This,\n        LONG Unit,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *GetIndex)(\n        ITextRange2 *This,\n        LONG Unit,\n        LONG *pIndex);\n\n    HRESULT (STDMETHODCALLTYPE *SetIndex)(\n        ITextRange2 *This,\n        LONG Unit,\n        LONG Index,\n        LONG Extend);\n\n    HRESULT (STDMETHODCALLTYPE *SetRange)(\n        ITextRange2 *This,\n        LONG anchor,\n        LONG active);\n\n    HRESULT (STDMETHODCALLTYPE *InRange)(\n        ITextRange2 *This,\n        ITextRange *pRange,\n        LONG *pb);\n\n    HRESULT (STDMETHODCALLTYPE *InStory)(\n        ITextRange2 *This,\n        ITextRange *pRange,\n        LONG *pb);\n\n    HRESULT (STDMETHODCALLTYPE *IsEqual)(\n        ITextRange2 *This,\n        ITextRange *pRange,\n        LONG *pb);\n\n    HRESULT (STDMETHODCALLTYPE *Select)(\n        ITextRange2 *This);\n\n    HRESULT (STDMETHODCALLTYPE *StartOf)(\n        ITextRange2 *This,\n        LONG Unit,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *EndOf)(\n        ITextRange2 *This,\n        LONG Unit,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *Move)(\n        ITextRange2 *This,\n        LONG Unit,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveStart)(\n        ITextRange2 *This,\n        LONG Unit,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveEnd)(\n        ITextRange2 *This,\n        LONG Unit,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveWhile)(\n        ITextRange2 *This,\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveStartWhile)(\n        ITextRange2 *This,\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveEndWhile)(\n        ITextRange2 *This,\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveUntil)(\n        ITextRange2 *This,\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveStartUntil)(\n        ITextRange2 *This,\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveEndUntil)(\n        ITextRange2 *This,\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *FindText)(\n        ITextRange2 *This,\n        BSTR bstr,\n        LONG cch,\n        LONG Flags,\n        LONG *pLength);\n\n    HRESULT (STDMETHODCALLTYPE *FindTextStart)(\n        ITextRange2 *This,\n        BSTR bstr,\n        LONG cch,\n        LONG Flags,\n        LONG *pLength);\n\n    HRESULT (STDMETHODCALLTYPE *FindTextEnd)(\n        ITextRange2 *This,\n        BSTR bstr,\n        LONG cch,\n        LONG Flags,\n        LONG *pLength);\n\n    HRESULT (STDMETHODCALLTYPE *Delete)(\n        ITextRange2 *This,\n        LONG Unit,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *Cut)(\n        ITextRange2 *This,\n        VARIANT *pVar);\n\n    HRESULT (STDMETHODCALLTYPE *Copy)(\n        ITextRange2 *This,\n        VARIANT *pVar);\n\n    HRESULT (STDMETHODCALLTYPE *Paste)(\n        ITextRange2 *This,\n        VARIANT *pVar,\n        LONG Format);\n\n    HRESULT (STDMETHODCALLTYPE *CanPaste)(\n        ITextRange2 *This,\n        VARIANT *pVar,\n        LONG Format,\n        LONG *pb);\n\n    HRESULT (STDMETHODCALLTYPE *CanEdit)(\n        ITextRange2 *This,\n        LONG *pb);\n\n    HRESULT (STDMETHODCALLTYPE *ChangeCase)(\n        ITextRange2 *This,\n        LONG Type);\n\n    HRESULT (STDMETHODCALLTYPE *GetPoint)(\n        ITextRange2 *This,\n        LONG Type,\n        LONG *cx,\n        LONG *cy);\n\n    HRESULT (STDMETHODCALLTYPE *SetPoint)(\n        ITextRange2 *This,\n        LONG x,\n        LONG y,\n        LONG Type,\n        LONG Extend);\n\n    HRESULT (STDMETHODCALLTYPE *ScrollIntoView)(\n        ITextRange2 *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetEmbeddedObject)(\n        ITextRange2 *This,\n        IUnknown **ppv);\n\n    /*** ITextSelection methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetFlags)(\n        ITextRange2 *This,\n        LONG *pFlags);\n\n    HRESULT (STDMETHODCALLTYPE *SetFlags)(\n        ITextRange2 *This,\n        LONG Flags);\n\n    HRESULT (STDMETHODCALLTYPE *GetType)(\n        ITextRange2 *This,\n        LONG *pType);\n\n    HRESULT (STDMETHODCALLTYPE *MoveLeft)(\n        ITextRange2 *This,\n        LONG Unit,\n        LONG Count,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveRight)(\n        ITextRange2 *This,\n        LONG Unit,\n        LONG Count,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveUp)(\n        ITextRange2 *This,\n        LONG Unit,\n        LONG Count,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveDown)(\n        ITextRange2 *This,\n        LONG Unit,\n        LONG Count,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *HomeKey)(\n        ITextRange2 *This,\n        LONG Unit,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *EndKey)(\n        ITextRange2 *This,\n        LONG Unit,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *TypeText)(\n        ITextRange2 *This,\n        BSTR bstr);\n\n    /*** ITextRange2 methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetCch)(\n        ITextRange2 *This,\n        LONG *count);\n\n    HRESULT (STDMETHODCALLTYPE *GetCells)(\n        ITextRange2 *This,\n        IUnknown **cells);\n\n    HRESULT (STDMETHODCALLTYPE *GetColumn)(\n        ITextRange2 *This,\n        IUnknown **column);\n\n    HRESULT (STDMETHODCALLTYPE *GetCount)(\n        ITextRange2 *This,\n        LONG *count);\n\n    HRESULT (STDMETHODCALLTYPE *GetDuplicate2)(\n        ITextRange2 *This,\n        ITextRange2 **range);\n\n    HRESULT (STDMETHODCALLTYPE *GetFont2)(\n        ITextRange2 *This,\n        ITextFont2 **font);\n\n    HRESULT (STDMETHODCALLTYPE *SetFont2)(\n        ITextRange2 *This,\n        ITextFont2 *font);\n\n    HRESULT (STDMETHODCALLTYPE *GetFormattedText2)(\n        ITextRange2 *This,\n        ITextRange2 **range);\n\n    HRESULT (STDMETHODCALLTYPE *SetFormattedText2)(\n        ITextRange2 *This,\n        ITextRange2 *range);\n\n    HRESULT (STDMETHODCALLTYPE *GetGravity)(\n        ITextRange2 *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *SetGravity)(\n        ITextRange2 *This,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *GetPara2)(\n        ITextRange2 *This,\n        ITextPara2 **para);\n\n    HRESULT (STDMETHODCALLTYPE *SetPara2)(\n        ITextRange2 *This,\n        ITextPara2 *para);\n\n    HRESULT (STDMETHODCALLTYPE *GetRow)(\n        ITextRange2 *This,\n        ITextRow **row);\n\n    HRESULT (STDMETHODCALLTYPE *GetStartPara)(\n        ITextRange2 *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *GetTable)(\n        ITextRange2 *This,\n        IUnknown **table);\n\n    HRESULT (STDMETHODCALLTYPE *GetURL)(\n        ITextRange2 *This,\n        BSTR *url);\n\n    HRESULT (STDMETHODCALLTYPE *SetURL)(\n        ITextRange2 *This,\n        BSTR url);\n\n    HRESULT (STDMETHODCALLTYPE *AddSubrange)(\n        ITextRange2 *This,\n        LONG cp1,\n        LONG cp2,\n        LONG activate);\n\n    HRESULT (STDMETHODCALLTYPE *BuildUpMath)(\n        ITextRange2 *This,\n        LONG flags);\n\n    HRESULT (STDMETHODCALLTYPE *DeleteSubrange)(\n        ITextRange2 *This,\n        LONG first,\n        LONG lim);\n\n    HRESULT (STDMETHODCALLTYPE *Find)(\n        ITextRange2 *This,\n        ITextRange2 *range,\n        LONG count,\n        LONG flags,\n        LONG *delta);\n\n    HRESULT (STDMETHODCALLTYPE *GetChar2)(\n        ITextRange2 *This,\n        LONG *ch,\n        LONG offset);\n\n    HRESULT (STDMETHODCALLTYPE *GetDropCap)(\n        ITextRange2 *This,\n        LONG *line,\n        LONG *pos);\n\n    HRESULT (STDMETHODCALLTYPE *GetInlineObject)(\n        ITextRange2 *This,\n        LONG *type,\n        LONG *align,\n        LONG *ch,\n        LONG *ch1,\n        LONG *ch2,\n        LONG *count,\n        LONG *texstyle,\n        LONG *ccol,\n        LONG *level);\n\n    HRESULT (STDMETHODCALLTYPE *GetProperty)(\n        ITextRange2 *This,\n        LONG type,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *GetRect)(\n        ITextRange2 *This,\n        LONG type,\n        LONG *left,\n        LONG *top,\n        LONG *right,\n        LONG *bottom,\n        LONG *hit);\n\n    HRESULT (STDMETHODCALLTYPE *GetSubrange)(\n        ITextRange2 *This,\n        LONG subrange,\n        LONG *first,\n        LONG *limit);\n\n    HRESULT (STDMETHODCALLTYPE *GetText2)(\n        ITextRange2 *This,\n        LONG flags,\n        BSTR *str);\n\n    HRESULT (STDMETHODCALLTYPE *HexToUnicode)(\n        ITextRange2 *This);\n\n    HRESULT (STDMETHODCALLTYPE *InsertTable)(\n        ITextRange2 *This,\n        LONG col,\n        LONG row,\n        LONG autofit);\n\n    HRESULT (STDMETHODCALLTYPE *Linearize)(\n        ITextRange2 *This,\n        LONG flags);\n\n    HRESULT (STDMETHODCALLTYPE *SetActiveSubrange)(\n        ITextRange2 *This,\n        LONG anchor,\n        LONG active);\n\n    HRESULT (STDMETHODCALLTYPE *SetDropCap)(\n        ITextRange2 *This,\n        LONG line,\n        LONG pos);\n\n    HRESULT (STDMETHODCALLTYPE *SetProperty)(\n        ITextRange2 *This,\n        LONG type,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *SetText2)(\n        ITextRange2 *This,\n        LONG flags,\n        BSTR str);\n\n    HRESULT (STDMETHODCALLTYPE *UnicodeToHex)(\n        ITextRange2 *This);\n\n    HRESULT (STDMETHODCALLTYPE *SetInlineObject)(\n        ITextRange2 *This,\n        LONG type,\n        LONG align,\n        LONG ch,\n        LONG ch1,\n        LONG ch2,\n        LONG count,\n        LONG texstyle,\n        LONG ccol);\n\n    HRESULT (STDMETHODCALLTYPE *GetMathFunctionType)(\n        ITextRange2 *This,\n        BSTR str,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *InsertImage)(\n        ITextRange2 *This,\n        LONG width,\n        LONG height,\n        LONG ascent,\n        LONG type,\n        BSTR alttext,\n        IStream *stream);\n\n    END_INTERFACE\n} ITextRange2Vtbl;\n\ninterface ITextRange2 {\n    CONST_VTBL ITextRange2Vtbl* lpVtbl;\n};\n\n#ifdef COBJMACROS\n#ifndef WIDL_C_INLINE_WRAPPERS\n/*** IUnknown methods ***/\n#define ITextRange2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)\n#define ITextRange2_AddRef(This) (This)->lpVtbl->AddRef(This)\n#define ITextRange2_Release(This) (This)->lpVtbl->Release(This)\n/*** IDispatch methods ***/\n#define ITextRange2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)\n#define ITextRange2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)\n#define ITextRange2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\n#define ITextRange2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\n/*** ITextRange methods ***/\n#define ITextRange2_GetText(This,pbstr) (This)->lpVtbl->GetText(This,pbstr)\n#define ITextRange2_SetText(This,bstr) (This)->lpVtbl->SetText(This,bstr)\n#define ITextRange2_GetChar(This,pch) (This)->lpVtbl->GetChar(This,pch)\n#define ITextRange2_SetChar(This,ch) (This)->lpVtbl->SetChar(This,ch)\n#define ITextRange2_GetDuplicate(This,ppRange) (This)->lpVtbl->GetDuplicate(This,ppRange)\n#define ITextRange2_GetFormattedText(This,ppRange) (This)->lpVtbl->GetFormattedText(This,ppRange)\n#define ITextRange2_SetFormattedText(This,pRange) (This)->lpVtbl->SetFormattedText(This,pRange)\n#define ITextRange2_GetStart(This,pcpFirst) (This)->lpVtbl->GetStart(This,pcpFirst)\n#define ITextRange2_SetStart(This,cpFirst) (This)->lpVtbl->SetStart(This,cpFirst)\n#define ITextRange2_GetEnd(This,pcpLim) (This)->lpVtbl->GetEnd(This,pcpLim)\n#define ITextRange2_SetEnd(This,cpLim) (This)->lpVtbl->SetEnd(This,cpLim)\n#define ITextRange2_GetFont(This,pFont) (This)->lpVtbl->GetFont(This,pFont)\n#define ITextRange2_SetFont(This,pFont) (This)->lpVtbl->SetFont(This,pFont)\n#define ITextRange2_GetPara(This,ppPara) (This)->lpVtbl->GetPara(This,ppPara)\n#define ITextRange2_SetPara(This,pPara) (This)->lpVtbl->SetPara(This,pPara)\n#define ITextRange2_GetStoryLength(This,pcch) (This)->lpVtbl->GetStoryLength(This,pcch)\n#define ITextRange2_GetStoryType(This,pValue) (This)->lpVtbl->GetStoryType(This,pValue)\n#define ITextRange2_Collapse(This,bStart) (This)->lpVtbl->Collapse(This,bStart)\n#define ITextRange2_Expand(This,Unit,pDelta) (This)->lpVtbl->Expand(This,Unit,pDelta)\n#define ITextRange2_GetIndex(This,Unit,pIndex) (This)->lpVtbl->GetIndex(This,Unit,pIndex)\n#define ITextRange2_SetIndex(This,Unit,Index,Extend) (This)->lpVtbl->SetIndex(This,Unit,Index,Extend)\n#define ITextRange2_SetRange(This,anchor,active) (This)->lpVtbl->SetRange(This,anchor,active)\n#define ITextRange2_InRange(This,pRange,pb) (This)->lpVtbl->InRange(This,pRange,pb)\n#define ITextRange2_InStory(This,pRange,pb) (This)->lpVtbl->InStory(This,pRange,pb)\n#define ITextRange2_IsEqual(This,pRange,pb) (This)->lpVtbl->IsEqual(This,pRange,pb)\n#define ITextRange2_Select(This) (This)->lpVtbl->Select(This)\n#define ITextRange2_StartOf(This,Unit,Extend,pDelta) (This)->lpVtbl->StartOf(This,Unit,Extend,pDelta)\n#define ITextRange2_EndOf(This,Unit,Extend,pDelta) (This)->lpVtbl->EndOf(This,Unit,Extend,pDelta)\n#define ITextRange2_Move(This,Unit,Count,pDelta) (This)->lpVtbl->Move(This,Unit,Count,pDelta)\n#define ITextRange2_MoveStart(This,Unit,Count,pDelta) (This)->lpVtbl->MoveStart(This,Unit,Count,pDelta)\n#define ITextRange2_MoveEnd(This,Unit,Count,pDelta) (This)->lpVtbl->MoveEnd(This,Unit,Count,pDelta)\n#define ITextRange2_MoveWhile(This,Cset,Count,pDelta) (This)->lpVtbl->MoveWhile(This,Cset,Count,pDelta)\n#define ITextRange2_MoveStartWhile(This,Cset,Count,pDelta) (This)->lpVtbl->MoveStartWhile(This,Cset,Count,pDelta)\n#define ITextRange2_MoveEndWhile(This,Cset,Count,pDelta) (This)->lpVtbl->MoveEndWhile(This,Cset,Count,pDelta)\n#define ITextRange2_MoveUntil(This,Cset,Count,pDelta) (This)->lpVtbl->MoveUntil(This,Cset,Count,pDelta)\n#define ITextRange2_MoveStartUntil(This,Cset,Count,pDelta) (This)->lpVtbl->MoveStartUntil(This,Cset,Count,pDelta)\n#define ITextRange2_MoveEndUntil(This,Cset,Count,pDelta) (This)->lpVtbl->MoveEndUntil(This,Cset,Count,pDelta)\n#define ITextRange2_FindText(This,bstr,cch,Flags,pLength) (This)->lpVtbl->FindText(This,bstr,cch,Flags,pLength)\n#define ITextRange2_FindTextStart(This,bstr,cch,Flags,pLength) (This)->lpVtbl->FindTextStart(This,bstr,cch,Flags,pLength)\n#define ITextRange2_FindTextEnd(This,bstr,cch,Flags,pLength) (This)->lpVtbl->FindTextEnd(This,bstr,cch,Flags,pLength)\n#define ITextRange2_Delete(This,Unit,Count,pDelta) (This)->lpVtbl->Delete(This,Unit,Count,pDelta)\n#define ITextRange2_Cut(This,pVar) (This)->lpVtbl->Cut(This,pVar)\n#define ITextRange2_Copy(This,pVar) (This)->lpVtbl->Copy(This,pVar)\n#define ITextRange2_Paste(This,pVar,Format) (This)->lpVtbl->Paste(This,pVar,Format)\n#define ITextRange2_CanPaste(This,pVar,Format,pb) (This)->lpVtbl->CanPaste(This,pVar,Format,pb)\n#define ITextRange2_CanEdit(This,pb) (This)->lpVtbl->CanEdit(This,pb)\n#define ITextRange2_ChangeCase(This,Type) (This)->lpVtbl->ChangeCase(This,Type)\n#define ITextRange2_GetPoint(This,Type,cx,cy) (This)->lpVtbl->GetPoint(This,Type,cx,cy)\n#define ITextRange2_SetPoint(This,x,y,Type,Extend) (This)->lpVtbl->SetPoint(This,x,y,Type,Extend)\n#define ITextRange2_ScrollIntoView(This,Value) (This)->lpVtbl->ScrollIntoView(This,Value)\n#define ITextRange2_GetEmbeddedObject(This,ppv) (This)->lpVtbl->GetEmbeddedObject(This,ppv)\n/*** ITextSelection methods ***/\n#define ITextRange2_GetFlags(This,pFlags) (This)->lpVtbl->GetFlags(This,pFlags)\n#define ITextRange2_SetFlags(This,Flags) (This)->lpVtbl->SetFlags(This,Flags)\n#define ITextRange2_GetType(This,pType) (This)->lpVtbl->GetType(This,pType)\n#define ITextRange2_MoveLeft(This,Unit,Count,Extend,pDelta) (This)->lpVtbl->MoveLeft(This,Unit,Count,Extend,pDelta)\n#define ITextRange2_MoveRight(This,Unit,Count,Extend,pDelta) (This)->lpVtbl->MoveRight(This,Unit,Count,Extend,pDelta)\n#define ITextRange2_MoveUp(This,Unit,Count,Extend,pDelta) (This)->lpVtbl->MoveUp(This,Unit,Count,Extend,pDelta)\n#define ITextRange2_MoveDown(This,Unit,Count,Extend,pDelta) (This)->lpVtbl->MoveDown(This,Unit,Count,Extend,pDelta)\n#define ITextRange2_HomeKey(This,Unit,Extend,pDelta) (This)->lpVtbl->HomeKey(This,Unit,Extend,pDelta)\n#define ITextRange2_EndKey(This,Unit,Extend,pDelta) (This)->lpVtbl->EndKey(This,Unit,Extend,pDelta)\n#define ITextRange2_TypeText(This,bstr) (This)->lpVtbl->TypeText(This,bstr)\n/*** ITextRange2 methods ***/\n#define ITextRange2_GetCch(This,count) (This)->lpVtbl->GetCch(This,count)\n#define ITextRange2_GetCells(This,cells) (This)->lpVtbl->GetCells(This,cells)\n#define ITextRange2_GetColumn(This,column) (This)->lpVtbl->GetColumn(This,column)\n#define ITextRange2_GetCount(This,count) (This)->lpVtbl->GetCount(This,count)\n#define ITextRange2_GetDuplicate2(This,range) (This)->lpVtbl->GetDuplicate2(This,range)\n#define ITextRange2_GetFont2(This,font) (This)->lpVtbl->GetFont2(This,font)\n#define ITextRange2_SetFont2(This,font) (This)->lpVtbl->SetFont2(This,font)\n#define ITextRange2_GetFormattedText2(This,range) (This)->lpVtbl->GetFormattedText2(This,range)\n#define ITextRange2_SetFormattedText2(This,range) (This)->lpVtbl->SetFormattedText2(This,range)\n#define ITextRange2_GetGravity(This,value) (This)->lpVtbl->GetGravity(This,value)\n#define ITextRange2_SetGravity(This,value) (This)->lpVtbl->SetGravity(This,value)\n#define ITextRange2_GetPara2(This,para) (This)->lpVtbl->GetPara2(This,para)\n#define ITextRange2_SetPara2(This,para) (This)->lpVtbl->SetPara2(This,para)\n#define ITextRange2_GetRow(This,row) (This)->lpVtbl->GetRow(This,row)\n#define ITextRange2_GetStartPara(This,value) (This)->lpVtbl->GetStartPara(This,value)\n#define ITextRange2_GetTable(This,table) (This)->lpVtbl->GetTable(This,table)\n#define ITextRange2_GetURL(This,url) (This)->lpVtbl->GetURL(This,url)\n#define ITextRange2_SetURL(This,url) (This)->lpVtbl->SetURL(This,url)\n#define ITextRange2_AddSubrange(This,cp1,cp2,activate) (This)->lpVtbl->AddSubrange(This,cp1,cp2,activate)\n#define ITextRange2_BuildUpMath(This,flags) (This)->lpVtbl->BuildUpMath(This,flags)\n#define ITextRange2_DeleteSubrange(This,first,lim) (This)->lpVtbl->DeleteSubrange(This,first,lim)\n#define ITextRange2_Find(This,range,count,flags,delta) (This)->lpVtbl->Find(This,range,count,flags,delta)\n#define ITextRange2_GetChar2(This,ch,offset) (This)->lpVtbl->GetChar2(This,ch,offset)\n#define ITextRange2_GetDropCap(This,line,pos) (This)->lpVtbl->GetDropCap(This,line,pos)\n#define ITextRange2_GetInlineObject(This,type,align,ch,ch1,ch2,count,texstyle,ccol,level) (This)->lpVtbl->GetInlineObject(This,type,align,ch,ch1,ch2,count,texstyle,ccol,level)\n#define ITextRange2_GetProperty(This,type,value) (This)->lpVtbl->GetProperty(This,type,value)\n#define ITextRange2_GetRect(This,type,left,top,right,bottom,hit) (This)->lpVtbl->GetRect(This,type,left,top,right,bottom,hit)\n#define ITextRange2_GetSubrange(This,subrange,first,limit) (This)->lpVtbl->GetSubrange(This,subrange,first,limit)\n#define ITextRange2_GetText2(This,flags,str) (This)->lpVtbl->GetText2(This,flags,str)\n#define ITextRange2_HexToUnicode(This) (This)->lpVtbl->HexToUnicode(This)\n#define ITextRange2_InsertTable(This,col,row,autofit) (This)->lpVtbl->InsertTable(This,col,row,autofit)\n#define ITextRange2_Linearize(This,flags) (This)->lpVtbl->Linearize(This,flags)\n#define ITextRange2_SetActiveSubrange(This,anchor,active) (This)->lpVtbl->SetActiveSubrange(This,anchor,active)\n#define ITextRange2_SetDropCap(This,line,pos) (This)->lpVtbl->SetDropCap(This,line,pos)\n#define ITextRange2_SetProperty(This,type,value) (This)->lpVtbl->SetProperty(This,type,value)\n#define ITextRange2_SetText2(This,flags,str) (This)->lpVtbl->SetText2(This,flags,str)\n#define ITextRange2_UnicodeToHex(This) (This)->lpVtbl->UnicodeToHex(This)\n#define ITextRange2_SetInlineObject(This,type,align,ch,ch1,ch2,count,texstyle,ccol) (This)->lpVtbl->SetInlineObject(This,type,align,ch,ch1,ch2,count,texstyle,ccol)\n#define ITextRange2_GetMathFunctionType(This,str,value) (This)->lpVtbl->GetMathFunctionType(This,str,value)\n#define ITextRange2_InsertImage(This,width,height,ascent,type,alttext,stream) (This)->lpVtbl->InsertImage(This,width,height,ascent,type,alttext,stream)\n#else\n/*** IUnknown methods ***/\nstatic FORCEINLINE HRESULT ITextRange2_QueryInterface(ITextRange2* This,REFIID riid,void **ppvObject) {\n    return This->lpVtbl->QueryInterface(This,riid,ppvObject);\n}\nstatic FORCEINLINE ULONG ITextRange2_AddRef(ITextRange2* This) {\n    return This->lpVtbl->AddRef(This);\n}\nstatic FORCEINLINE ULONG ITextRange2_Release(ITextRange2* This) {\n    return This->lpVtbl->Release(This);\n}\n/*** IDispatch methods ***/\nstatic FORCEINLINE HRESULT ITextRange2_GetTypeInfoCount(ITextRange2* This,UINT *pctinfo) {\n    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetTypeInfo(ITextRange2* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {\n    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetIDsOfNames(ITextRange2* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {\n    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);\n}\nstatic FORCEINLINE HRESULT ITextRange2_Invoke(ITextRange2* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {\n    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);\n}\n/*** ITextRange methods ***/\nstatic FORCEINLINE HRESULT ITextRange2_GetText(ITextRange2* This,BSTR *pbstr) {\n    return This->lpVtbl->GetText(This,pbstr);\n}\nstatic FORCEINLINE HRESULT ITextRange2_SetText(ITextRange2* This,BSTR bstr) {\n    return This->lpVtbl->SetText(This,bstr);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetChar(ITextRange2* This,LONG *pch) {\n    return This->lpVtbl->GetChar(This,pch);\n}\nstatic FORCEINLINE HRESULT ITextRange2_SetChar(ITextRange2* This,LONG ch) {\n    return This->lpVtbl->SetChar(This,ch);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetDuplicate(ITextRange2* This,ITextRange **ppRange) {\n    return This->lpVtbl->GetDuplicate(This,ppRange);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetFormattedText(ITextRange2* This,ITextRange **ppRange) {\n    return This->lpVtbl->GetFormattedText(This,ppRange);\n}\nstatic FORCEINLINE HRESULT ITextRange2_SetFormattedText(ITextRange2* This,ITextRange *pRange) {\n    return This->lpVtbl->SetFormattedText(This,pRange);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetStart(ITextRange2* This,LONG *pcpFirst) {\n    return This->lpVtbl->GetStart(This,pcpFirst);\n}\nstatic FORCEINLINE HRESULT ITextRange2_SetStart(ITextRange2* This,LONG cpFirst) {\n    return This->lpVtbl->SetStart(This,cpFirst);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetEnd(ITextRange2* This,LONG *pcpLim) {\n    return This->lpVtbl->GetEnd(This,pcpLim);\n}\nstatic FORCEINLINE HRESULT ITextRange2_SetEnd(ITextRange2* This,LONG cpLim) {\n    return This->lpVtbl->SetEnd(This,cpLim);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetFont(ITextRange2* This,ITextFont **pFont) {\n    return This->lpVtbl->GetFont(This,pFont);\n}\nstatic FORCEINLINE HRESULT ITextRange2_SetFont(ITextRange2* This,ITextFont *pFont) {\n    return This->lpVtbl->SetFont(This,pFont);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetPara(ITextRange2* This,ITextPara **ppPara) {\n    return This->lpVtbl->GetPara(This,ppPara);\n}\nstatic FORCEINLINE HRESULT ITextRange2_SetPara(ITextRange2* This,ITextPara *pPara) {\n    return This->lpVtbl->SetPara(This,pPara);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetStoryLength(ITextRange2* This,LONG *pcch) {\n    return This->lpVtbl->GetStoryLength(This,pcch);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetStoryType(ITextRange2* This,LONG *pValue) {\n    return This->lpVtbl->GetStoryType(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextRange2_Collapse(ITextRange2* This,LONG bStart) {\n    return This->lpVtbl->Collapse(This,bStart);\n}\nstatic FORCEINLINE HRESULT ITextRange2_Expand(ITextRange2* This,LONG Unit,LONG *pDelta) {\n    return This->lpVtbl->Expand(This,Unit,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetIndex(ITextRange2* This,LONG Unit,LONG *pIndex) {\n    return This->lpVtbl->GetIndex(This,Unit,pIndex);\n}\nstatic FORCEINLINE HRESULT ITextRange2_SetIndex(ITextRange2* This,LONG Unit,LONG Index,LONG Extend) {\n    return This->lpVtbl->SetIndex(This,Unit,Index,Extend);\n}\nstatic FORCEINLINE HRESULT ITextRange2_SetRange(ITextRange2* This,LONG anchor,LONG active) {\n    return This->lpVtbl->SetRange(This,anchor,active);\n}\nstatic FORCEINLINE HRESULT ITextRange2_InRange(ITextRange2* This,ITextRange *pRange,LONG *pb) {\n    return This->lpVtbl->InRange(This,pRange,pb);\n}\nstatic FORCEINLINE HRESULT ITextRange2_InStory(ITextRange2* This,ITextRange *pRange,LONG *pb) {\n    return This->lpVtbl->InStory(This,pRange,pb);\n}\nstatic FORCEINLINE HRESULT ITextRange2_IsEqual(ITextRange2* This,ITextRange *pRange,LONG *pb) {\n    return This->lpVtbl->IsEqual(This,pRange,pb);\n}\nstatic FORCEINLINE HRESULT ITextRange2_Select(ITextRange2* This) {\n    return This->lpVtbl->Select(This);\n}\nstatic FORCEINLINE HRESULT ITextRange2_StartOf(ITextRange2* This,LONG Unit,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->StartOf(This,Unit,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange2_EndOf(ITextRange2* This,LONG Unit,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->EndOf(This,Unit,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange2_Move(ITextRange2* This,LONG Unit,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->Move(This,Unit,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange2_MoveStart(ITextRange2* This,LONG Unit,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveStart(This,Unit,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange2_MoveEnd(ITextRange2* This,LONG Unit,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveEnd(This,Unit,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange2_MoveWhile(ITextRange2* This,VARIANT *Cset,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveWhile(This,Cset,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange2_MoveStartWhile(ITextRange2* This,VARIANT *Cset,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveStartWhile(This,Cset,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange2_MoveEndWhile(ITextRange2* This,VARIANT *Cset,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveEndWhile(This,Cset,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange2_MoveUntil(ITextRange2* This,VARIANT *Cset,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveUntil(This,Cset,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange2_MoveStartUntil(ITextRange2* This,VARIANT *Cset,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveStartUntil(This,Cset,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange2_MoveEndUntil(ITextRange2* This,VARIANT *Cset,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveEndUntil(This,Cset,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange2_FindText(ITextRange2* This,BSTR bstr,LONG cch,LONG Flags,LONG *pLength) {\n    return This->lpVtbl->FindText(This,bstr,cch,Flags,pLength);\n}\nstatic FORCEINLINE HRESULT ITextRange2_FindTextStart(ITextRange2* This,BSTR bstr,LONG cch,LONG Flags,LONG *pLength) {\n    return This->lpVtbl->FindTextStart(This,bstr,cch,Flags,pLength);\n}\nstatic FORCEINLINE HRESULT ITextRange2_FindTextEnd(ITextRange2* This,BSTR bstr,LONG cch,LONG Flags,LONG *pLength) {\n    return This->lpVtbl->FindTextEnd(This,bstr,cch,Flags,pLength);\n}\nstatic FORCEINLINE HRESULT ITextRange2_Delete(ITextRange2* This,LONG Unit,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->Delete(This,Unit,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange2_Cut(ITextRange2* This,VARIANT *pVar) {\n    return This->lpVtbl->Cut(This,pVar);\n}\nstatic FORCEINLINE HRESULT ITextRange2_Copy(ITextRange2* This,VARIANT *pVar) {\n    return This->lpVtbl->Copy(This,pVar);\n}\nstatic FORCEINLINE HRESULT ITextRange2_Paste(ITextRange2* This,VARIANT *pVar,LONG Format) {\n    return This->lpVtbl->Paste(This,pVar,Format);\n}\nstatic FORCEINLINE HRESULT ITextRange2_CanPaste(ITextRange2* This,VARIANT *pVar,LONG Format,LONG *pb) {\n    return This->lpVtbl->CanPaste(This,pVar,Format,pb);\n}\nstatic FORCEINLINE HRESULT ITextRange2_CanEdit(ITextRange2* This,LONG *pb) {\n    return This->lpVtbl->CanEdit(This,pb);\n}\nstatic FORCEINLINE HRESULT ITextRange2_ChangeCase(ITextRange2* This,LONG Type) {\n    return This->lpVtbl->ChangeCase(This,Type);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetPoint(ITextRange2* This,LONG Type,LONG *cx,LONG *cy) {\n    return This->lpVtbl->GetPoint(This,Type,cx,cy);\n}\nstatic FORCEINLINE HRESULT ITextRange2_SetPoint(ITextRange2* This,LONG x,LONG y,LONG Type,LONG Extend) {\n    return This->lpVtbl->SetPoint(This,x,y,Type,Extend);\n}\nstatic FORCEINLINE HRESULT ITextRange2_ScrollIntoView(ITextRange2* This,LONG Value) {\n    return This->lpVtbl->ScrollIntoView(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetEmbeddedObject(ITextRange2* This,IUnknown **ppv) {\n    return This->lpVtbl->GetEmbeddedObject(This,ppv);\n}\n/*** ITextSelection methods ***/\nstatic FORCEINLINE HRESULT ITextRange2_GetFlags(ITextRange2* This,LONG *pFlags) {\n    return This->lpVtbl->GetFlags(This,pFlags);\n}\nstatic FORCEINLINE HRESULT ITextRange2_SetFlags(ITextRange2* This,LONG Flags) {\n    return This->lpVtbl->SetFlags(This,Flags);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetType(ITextRange2* This,LONG *pType) {\n    return This->lpVtbl->GetType(This,pType);\n}\nstatic FORCEINLINE HRESULT ITextRange2_MoveLeft(ITextRange2* This,LONG Unit,LONG Count,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->MoveLeft(This,Unit,Count,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange2_MoveRight(ITextRange2* This,LONG Unit,LONG Count,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->MoveRight(This,Unit,Count,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange2_MoveUp(ITextRange2* This,LONG Unit,LONG Count,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->MoveUp(This,Unit,Count,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange2_MoveDown(ITextRange2* This,LONG Unit,LONG Count,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->MoveDown(This,Unit,Count,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange2_HomeKey(ITextRange2* This,LONG Unit,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->HomeKey(This,Unit,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange2_EndKey(ITextRange2* This,LONG Unit,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->EndKey(This,Unit,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange2_TypeText(ITextRange2* This,BSTR bstr) {\n    return This->lpVtbl->TypeText(This,bstr);\n}\n/*** ITextRange2 methods ***/\nstatic FORCEINLINE HRESULT ITextRange2_GetCch(ITextRange2* This,LONG *count) {\n    return This->lpVtbl->GetCch(This,count);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetCells(ITextRange2* This,IUnknown **cells) {\n    return This->lpVtbl->GetCells(This,cells);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetColumn(ITextRange2* This,IUnknown **column) {\n    return This->lpVtbl->GetColumn(This,column);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetCount(ITextRange2* This,LONG *count) {\n    return This->lpVtbl->GetCount(This,count);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetDuplicate2(ITextRange2* This,ITextRange2 **range) {\n    return This->lpVtbl->GetDuplicate2(This,range);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetFont2(ITextRange2* This,ITextFont2 **font) {\n    return This->lpVtbl->GetFont2(This,font);\n}\nstatic FORCEINLINE HRESULT ITextRange2_SetFont2(ITextRange2* This,ITextFont2 *font) {\n    return This->lpVtbl->SetFont2(This,font);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetFormattedText2(ITextRange2* This,ITextRange2 **range) {\n    return This->lpVtbl->GetFormattedText2(This,range);\n}\nstatic FORCEINLINE HRESULT ITextRange2_SetFormattedText2(ITextRange2* This,ITextRange2 *range) {\n    return This->lpVtbl->SetFormattedText2(This,range);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetGravity(ITextRange2* This,LONG *value) {\n    return This->lpVtbl->GetGravity(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRange2_SetGravity(ITextRange2* This,LONG value) {\n    return This->lpVtbl->SetGravity(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetPara2(ITextRange2* This,ITextPara2 **para) {\n    return This->lpVtbl->GetPara2(This,para);\n}\nstatic FORCEINLINE HRESULT ITextRange2_SetPara2(ITextRange2* This,ITextPara2 *para) {\n    return This->lpVtbl->SetPara2(This,para);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetRow(ITextRange2* This,ITextRow **row) {\n    return This->lpVtbl->GetRow(This,row);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetStartPara(ITextRange2* This,LONG *value) {\n    return This->lpVtbl->GetStartPara(This,value);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetTable(ITextRange2* This,IUnknown **table) {\n    return This->lpVtbl->GetTable(This,table);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetURL(ITextRange2* This,BSTR *url) {\n    return This->lpVtbl->GetURL(This,url);\n}\nstatic FORCEINLINE HRESULT ITextRange2_SetURL(ITextRange2* This,BSTR url) {\n    return This->lpVtbl->SetURL(This,url);\n}\nstatic FORCEINLINE HRESULT ITextRange2_AddSubrange(ITextRange2* This,LONG cp1,LONG cp2,LONG activate) {\n    return This->lpVtbl->AddSubrange(This,cp1,cp2,activate);\n}\nstatic FORCEINLINE HRESULT ITextRange2_BuildUpMath(ITextRange2* This,LONG flags) {\n    return This->lpVtbl->BuildUpMath(This,flags);\n}\nstatic FORCEINLINE HRESULT ITextRange2_DeleteSubrange(ITextRange2* This,LONG first,LONG lim) {\n    return This->lpVtbl->DeleteSubrange(This,first,lim);\n}\nstatic FORCEINLINE HRESULT ITextRange2_Find(ITextRange2* This,ITextRange2 *range,LONG count,LONG flags,LONG *delta) {\n    return This->lpVtbl->Find(This,range,count,flags,delta);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetChar2(ITextRange2* This,LONG *ch,LONG offset) {\n    return This->lpVtbl->GetChar2(This,ch,offset);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetDropCap(ITextRange2* This,LONG *line,LONG *pos) {\n    return This->lpVtbl->GetDropCap(This,line,pos);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetInlineObject(ITextRange2* This,LONG *type,LONG *align,LONG *ch,LONG *ch1,LONG *ch2,LONG *count,LONG *texstyle,LONG *ccol,LONG *level) {\n    return This->lpVtbl->GetInlineObject(This,type,align,ch,ch1,ch2,count,texstyle,ccol,level);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetProperty(ITextRange2* This,LONG type,LONG *value) {\n    return This->lpVtbl->GetProperty(This,type,value);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetRect(ITextRange2* This,LONG type,LONG *left,LONG *top,LONG *right,LONG *bottom,LONG *hit) {\n    return This->lpVtbl->GetRect(This,type,left,top,right,bottom,hit);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetSubrange(ITextRange2* This,LONG subrange,LONG *first,LONG *limit) {\n    return This->lpVtbl->GetSubrange(This,subrange,first,limit);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetText2(ITextRange2* This,LONG flags,BSTR *str) {\n    return This->lpVtbl->GetText2(This,flags,str);\n}\nstatic FORCEINLINE HRESULT ITextRange2_HexToUnicode(ITextRange2* This) {\n    return This->lpVtbl->HexToUnicode(This);\n}\nstatic FORCEINLINE HRESULT ITextRange2_InsertTable(ITextRange2* This,LONG col,LONG row,LONG autofit) {\n    return This->lpVtbl->InsertTable(This,col,row,autofit);\n}\nstatic FORCEINLINE HRESULT ITextRange2_Linearize(ITextRange2* This,LONG flags) {\n    return This->lpVtbl->Linearize(This,flags);\n}\nstatic FORCEINLINE HRESULT ITextRange2_SetActiveSubrange(ITextRange2* This,LONG anchor,LONG active) {\n    return This->lpVtbl->SetActiveSubrange(This,anchor,active);\n}\nstatic FORCEINLINE HRESULT ITextRange2_SetDropCap(ITextRange2* This,LONG line,LONG pos) {\n    return This->lpVtbl->SetDropCap(This,line,pos);\n}\nstatic FORCEINLINE HRESULT ITextRange2_SetProperty(ITextRange2* This,LONG type,LONG value) {\n    return This->lpVtbl->SetProperty(This,type,value);\n}\nstatic FORCEINLINE HRESULT ITextRange2_SetText2(ITextRange2* This,LONG flags,BSTR str) {\n    return This->lpVtbl->SetText2(This,flags,str);\n}\nstatic FORCEINLINE HRESULT ITextRange2_UnicodeToHex(ITextRange2* This) {\n    return This->lpVtbl->UnicodeToHex(This);\n}\nstatic FORCEINLINE HRESULT ITextRange2_SetInlineObject(ITextRange2* This,LONG type,LONG align,LONG ch,LONG ch1,LONG ch2,LONG count,LONG texstyle,LONG ccol) {\n    return This->lpVtbl->SetInlineObject(This,type,align,ch,ch1,ch2,count,texstyle,ccol);\n}\nstatic FORCEINLINE HRESULT ITextRange2_GetMathFunctionType(ITextRange2* This,BSTR str,LONG *value) {\n    return This->lpVtbl->GetMathFunctionType(This,str,value);\n}\nstatic FORCEINLINE HRESULT ITextRange2_InsertImage(ITextRange2* This,LONG width,LONG height,LONG ascent,LONG type,BSTR alttext,IStream *stream) {\n    return This->lpVtbl->InsertImage(This,width,height,ascent,type,alttext,stream);\n}\n#endif\n#endif\n\n#endif\n\n\n#endif  /* __ITextRange2_INTERFACE_DEFINED__ */\n\n/*****************************************************************************\n * ITextSelection2 interface\n */\n#ifndef __ITextSelection2_INTERFACE_DEFINED__\n#define __ITextSelection2_INTERFACE_DEFINED__\n\nDEFINE_GUID(IID_ITextSelection2, 0xc241f5e1, 0x7206, 0x11d8, 0xa2,0xc7, 0x00,0xa0,0xd1,0xd6,0xc6,0xb3);\n#if defined(__cplusplus) && !defined(CINTERFACE)\nMIDL_INTERFACE(\"c241f5e1-7206-11d8-a2c7-00a0d1d6c6b3\")\nITextSelection2 : public ITextRange2\n{\n};\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(ITextSelection2, 0xc241f5e1, 0x7206, 0x11d8, 0xa2,0xc7, 0x00,0xa0,0xd1,0xd6,0xc6,0xb3)\n#endif\n#else\ntypedef struct ITextSelection2Vtbl {\n    BEGIN_INTERFACE\n\n    /*** IUnknown methods ***/\n    HRESULT (STDMETHODCALLTYPE *QueryInterface)(\n        ITextSelection2 *This,\n        REFIID riid,\n        void **ppvObject);\n\n    ULONG (STDMETHODCALLTYPE *AddRef)(\n        ITextSelection2 *This);\n\n    ULONG (STDMETHODCALLTYPE *Release)(\n        ITextSelection2 *This);\n\n    /*** IDispatch methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(\n        ITextSelection2 *This,\n        UINT *pctinfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(\n        ITextSelection2 *This,\n        UINT iTInfo,\n        LCID lcid,\n        ITypeInfo **ppTInfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(\n        ITextSelection2 *This,\n        REFIID riid,\n        LPOLESTR *rgszNames,\n        UINT cNames,\n        LCID lcid,\n        DISPID *rgDispId);\n\n    HRESULT (STDMETHODCALLTYPE *Invoke)(\n        ITextSelection2 *This,\n        DISPID dispIdMember,\n        REFIID riid,\n        LCID lcid,\n        WORD wFlags,\n        DISPPARAMS *pDispParams,\n        VARIANT *pVarResult,\n        EXCEPINFO *pExcepInfo,\n        UINT *puArgErr);\n\n    /*** ITextRange methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetText)(\n        ITextSelection2 *This,\n        BSTR *pbstr);\n\n    HRESULT (STDMETHODCALLTYPE *SetText)(\n        ITextSelection2 *This,\n        BSTR bstr);\n\n    HRESULT (STDMETHODCALLTYPE *GetChar)(\n        ITextSelection2 *This,\n        LONG *pch);\n\n    HRESULT (STDMETHODCALLTYPE *SetChar)(\n        ITextSelection2 *This,\n        LONG ch);\n\n    HRESULT (STDMETHODCALLTYPE *GetDuplicate)(\n        ITextSelection2 *This,\n        ITextRange **ppRange);\n\n    HRESULT (STDMETHODCALLTYPE *GetFormattedText)(\n        ITextSelection2 *This,\n        ITextRange **ppRange);\n\n    HRESULT (STDMETHODCALLTYPE *SetFormattedText)(\n        ITextSelection2 *This,\n        ITextRange *pRange);\n\n    HRESULT (STDMETHODCALLTYPE *GetStart)(\n        ITextSelection2 *This,\n        LONG *pcpFirst);\n\n    HRESULT (STDMETHODCALLTYPE *SetStart)(\n        ITextSelection2 *This,\n        LONG cpFirst);\n\n    HRESULT (STDMETHODCALLTYPE *GetEnd)(\n        ITextSelection2 *This,\n        LONG *pcpLim);\n\n    HRESULT (STDMETHODCALLTYPE *SetEnd)(\n        ITextSelection2 *This,\n        LONG cpLim);\n\n    HRESULT (STDMETHODCALLTYPE *GetFont)(\n        ITextSelection2 *This,\n        ITextFont **pFont);\n\n    HRESULT (STDMETHODCALLTYPE *SetFont)(\n        ITextSelection2 *This,\n        ITextFont *pFont);\n\n    HRESULT (STDMETHODCALLTYPE *GetPara)(\n        ITextSelection2 *This,\n        ITextPara **ppPara);\n\n    HRESULT (STDMETHODCALLTYPE *SetPara)(\n        ITextSelection2 *This,\n        ITextPara *pPara);\n\n    HRESULT (STDMETHODCALLTYPE *GetStoryLength)(\n        ITextSelection2 *This,\n        LONG *pcch);\n\n    HRESULT (STDMETHODCALLTYPE *GetStoryType)(\n        ITextSelection2 *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *Collapse)(\n        ITextSelection2 *This,\n        LONG bStart);\n\n    HRESULT (STDMETHODCALLTYPE *Expand)(\n        ITextSelection2 *This,\n        LONG Unit,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *GetIndex)(\n        ITextSelection2 *This,\n        LONG Unit,\n        LONG *pIndex);\n\n    HRESULT (STDMETHODCALLTYPE *SetIndex)(\n        ITextSelection2 *This,\n        LONG Unit,\n        LONG Index,\n        LONG Extend);\n\n    HRESULT (STDMETHODCALLTYPE *SetRange)(\n        ITextSelection2 *This,\n        LONG anchor,\n        LONG active);\n\n    HRESULT (STDMETHODCALLTYPE *InRange)(\n        ITextSelection2 *This,\n        ITextRange *pRange,\n        LONG *pb);\n\n    HRESULT (STDMETHODCALLTYPE *InStory)(\n        ITextSelection2 *This,\n        ITextRange *pRange,\n        LONG *pb);\n\n    HRESULT (STDMETHODCALLTYPE *IsEqual)(\n        ITextSelection2 *This,\n        ITextRange *pRange,\n        LONG *pb);\n\n    HRESULT (STDMETHODCALLTYPE *Select)(\n        ITextSelection2 *This);\n\n    HRESULT (STDMETHODCALLTYPE *StartOf)(\n        ITextSelection2 *This,\n        LONG Unit,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *EndOf)(\n        ITextSelection2 *This,\n        LONG Unit,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *Move)(\n        ITextSelection2 *This,\n        LONG Unit,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveStart)(\n        ITextSelection2 *This,\n        LONG Unit,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveEnd)(\n        ITextSelection2 *This,\n        LONG Unit,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveWhile)(\n        ITextSelection2 *This,\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveStartWhile)(\n        ITextSelection2 *This,\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveEndWhile)(\n        ITextSelection2 *This,\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveUntil)(\n        ITextSelection2 *This,\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveStartUntil)(\n        ITextSelection2 *This,\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveEndUntil)(\n        ITextSelection2 *This,\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *FindText)(\n        ITextSelection2 *This,\n        BSTR bstr,\n        LONG cch,\n        LONG Flags,\n        LONG *pLength);\n\n    HRESULT (STDMETHODCALLTYPE *FindTextStart)(\n        ITextSelection2 *This,\n        BSTR bstr,\n        LONG cch,\n        LONG Flags,\n        LONG *pLength);\n\n    HRESULT (STDMETHODCALLTYPE *FindTextEnd)(\n        ITextSelection2 *This,\n        BSTR bstr,\n        LONG cch,\n        LONG Flags,\n        LONG *pLength);\n\n    HRESULT (STDMETHODCALLTYPE *Delete)(\n        ITextSelection2 *This,\n        LONG Unit,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *Cut)(\n        ITextSelection2 *This,\n        VARIANT *pVar);\n\n    HRESULT (STDMETHODCALLTYPE *Copy)(\n        ITextSelection2 *This,\n        VARIANT *pVar);\n\n    HRESULT (STDMETHODCALLTYPE *Paste)(\n        ITextSelection2 *This,\n        VARIANT *pVar,\n        LONG Format);\n\n    HRESULT (STDMETHODCALLTYPE *CanPaste)(\n        ITextSelection2 *This,\n        VARIANT *pVar,\n        LONG Format,\n        LONG *pb);\n\n    HRESULT (STDMETHODCALLTYPE *CanEdit)(\n        ITextSelection2 *This,\n        LONG *pb);\n\n    HRESULT (STDMETHODCALLTYPE *ChangeCase)(\n        ITextSelection2 *This,\n        LONG Type);\n\n    HRESULT (STDMETHODCALLTYPE *GetPoint)(\n        ITextSelection2 *This,\n        LONG Type,\n        LONG *cx,\n        LONG *cy);\n\n    HRESULT (STDMETHODCALLTYPE *SetPoint)(\n        ITextSelection2 *This,\n        LONG x,\n        LONG y,\n        LONG Type,\n        LONG Extend);\n\n    HRESULT (STDMETHODCALLTYPE *ScrollIntoView)(\n        ITextSelection2 *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetEmbeddedObject)(\n        ITextSelection2 *This,\n        IUnknown **ppv);\n\n    /*** ITextSelection methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetFlags)(\n        ITextSelection2 *This,\n        LONG *pFlags);\n\n    HRESULT (STDMETHODCALLTYPE *SetFlags)(\n        ITextSelection2 *This,\n        LONG Flags);\n\n    HRESULT (STDMETHODCALLTYPE *GetType)(\n        ITextSelection2 *This,\n        LONG *pType);\n\n    HRESULT (STDMETHODCALLTYPE *MoveLeft)(\n        ITextSelection2 *This,\n        LONG Unit,\n        LONG Count,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveRight)(\n        ITextSelection2 *This,\n        LONG Unit,\n        LONG Count,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveUp)(\n        ITextSelection2 *This,\n        LONG Unit,\n        LONG Count,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveDown)(\n        ITextSelection2 *This,\n        LONG Unit,\n        LONG Count,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *HomeKey)(\n        ITextSelection2 *This,\n        LONG Unit,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *EndKey)(\n        ITextSelection2 *This,\n        LONG Unit,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *TypeText)(\n        ITextSelection2 *This,\n        BSTR bstr);\n\n    /*** ITextRange2 methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetCch)(\n        ITextSelection2 *This,\n        LONG *count);\n\n    HRESULT (STDMETHODCALLTYPE *GetCells)(\n        ITextSelection2 *This,\n        IUnknown **cells);\n\n    HRESULT (STDMETHODCALLTYPE *GetColumn)(\n        ITextSelection2 *This,\n        IUnknown **column);\n\n    HRESULT (STDMETHODCALLTYPE *GetCount)(\n        ITextSelection2 *This,\n        LONG *count);\n\n    HRESULT (STDMETHODCALLTYPE *GetDuplicate2)(\n        ITextSelection2 *This,\n        ITextRange2 **range);\n\n    HRESULT (STDMETHODCALLTYPE *GetFont2)(\n        ITextSelection2 *This,\n        ITextFont2 **font);\n\n    HRESULT (STDMETHODCALLTYPE *SetFont2)(\n        ITextSelection2 *This,\n        ITextFont2 *font);\n\n    HRESULT (STDMETHODCALLTYPE *GetFormattedText2)(\n        ITextSelection2 *This,\n        ITextRange2 **range);\n\n    HRESULT (STDMETHODCALLTYPE *SetFormattedText2)(\n        ITextSelection2 *This,\n        ITextRange2 *range);\n\n    HRESULT (STDMETHODCALLTYPE *GetGravity)(\n        ITextSelection2 *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *SetGravity)(\n        ITextSelection2 *This,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *GetPara2)(\n        ITextSelection2 *This,\n        ITextPara2 **para);\n\n    HRESULT (STDMETHODCALLTYPE *SetPara2)(\n        ITextSelection2 *This,\n        ITextPara2 *para);\n\n    HRESULT (STDMETHODCALLTYPE *GetRow)(\n        ITextSelection2 *This,\n        ITextRow **row);\n\n    HRESULT (STDMETHODCALLTYPE *GetStartPara)(\n        ITextSelection2 *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *GetTable)(\n        ITextSelection2 *This,\n        IUnknown **table);\n\n    HRESULT (STDMETHODCALLTYPE *GetURL)(\n        ITextSelection2 *This,\n        BSTR *url);\n\n    HRESULT (STDMETHODCALLTYPE *SetURL)(\n        ITextSelection2 *This,\n        BSTR url);\n\n    HRESULT (STDMETHODCALLTYPE *AddSubrange)(\n        ITextSelection2 *This,\n        LONG cp1,\n        LONG cp2,\n        LONG activate);\n\n    HRESULT (STDMETHODCALLTYPE *BuildUpMath)(\n        ITextSelection2 *This,\n        LONG flags);\n\n    HRESULT (STDMETHODCALLTYPE *DeleteSubrange)(\n        ITextSelection2 *This,\n        LONG first,\n        LONG lim);\n\n    HRESULT (STDMETHODCALLTYPE *Find)(\n        ITextSelection2 *This,\n        ITextRange2 *range,\n        LONG count,\n        LONG flags,\n        LONG *delta);\n\n    HRESULT (STDMETHODCALLTYPE *GetChar2)(\n        ITextSelection2 *This,\n        LONG *ch,\n        LONG offset);\n\n    HRESULT (STDMETHODCALLTYPE *GetDropCap)(\n        ITextSelection2 *This,\n        LONG *line,\n        LONG *pos);\n\n    HRESULT (STDMETHODCALLTYPE *GetInlineObject)(\n        ITextSelection2 *This,\n        LONG *type,\n        LONG *align,\n        LONG *ch,\n        LONG *ch1,\n        LONG *ch2,\n        LONG *count,\n        LONG *texstyle,\n        LONG *ccol,\n        LONG *level);\n\n    HRESULT (STDMETHODCALLTYPE *GetProperty)(\n        ITextSelection2 *This,\n        LONG type,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *GetRect)(\n        ITextSelection2 *This,\n        LONG type,\n        LONG *left,\n        LONG *top,\n        LONG *right,\n        LONG *bottom,\n        LONG *hit);\n\n    HRESULT (STDMETHODCALLTYPE *GetSubrange)(\n        ITextSelection2 *This,\n        LONG subrange,\n        LONG *first,\n        LONG *limit);\n\n    HRESULT (STDMETHODCALLTYPE *GetText2)(\n        ITextSelection2 *This,\n        LONG flags,\n        BSTR *str);\n\n    HRESULT (STDMETHODCALLTYPE *HexToUnicode)(\n        ITextSelection2 *This);\n\n    HRESULT (STDMETHODCALLTYPE *InsertTable)(\n        ITextSelection2 *This,\n        LONG col,\n        LONG row,\n        LONG autofit);\n\n    HRESULT (STDMETHODCALLTYPE *Linearize)(\n        ITextSelection2 *This,\n        LONG flags);\n\n    HRESULT (STDMETHODCALLTYPE *SetActiveSubrange)(\n        ITextSelection2 *This,\n        LONG anchor,\n        LONG active);\n\n    HRESULT (STDMETHODCALLTYPE *SetDropCap)(\n        ITextSelection2 *This,\n        LONG line,\n        LONG pos);\n\n    HRESULT (STDMETHODCALLTYPE *SetProperty)(\n        ITextSelection2 *This,\n        LONG type,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *SetText2)(\n        ITextSelection2 *This,\n        LONG flags,\n        BSTR str);\n\n    HRESULT (STDMETHODCALLTYPE *UnicodeToHex)(\n        ITextSelection2 *This);\n\n    HRESULT (STDMETHODCALLTYPE *SetInlineObject)(\n        ITextSelection2 *This,\n        LONG type,\n        LONG align,\n        LONG ch,\n        LONG ch1,\n        LONG ch2,\n        LONG count,\n        LONG texstyle,\n        LONG ccol);\n\n    HRESULT (STDMETHODCALLTYPE *GetMathFunctionType)(\n        ITextSelection2 *This,\n        BSTR str,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *InsertImage)(\n        ITextSelection2 *This,\n        LONG width,\n        LONG height,\n        LONG ascent,\n        LONG type,\n        BSTR alttext,\n        IStream *stream);\n\n    END_INTERFACE\n} ITextSelection2Vtbl;\n\ninterface ITextSelection2 {\n    CONST_VTBL ITextSelection2Vtbl* lpVtbl;\n};\n\n#ifdef COBJMACROS\n#ifndef WIDL_C_INLINE_WRAPPERS\n/*** IUnknown methods ***/\n#define ITextSelection2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)\n#define ITextSelection2_AddRef(This) (This)->lpVtbl->AddRef(This)\n#define ITextSelection2_Release(This) (This)->lpVtbl->Release(This)\n/*** IDispatch methods ***/\n#define ITextSelection2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)\n#define ITextSelection2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)\n#define ITextSelection2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\n#define ITextSelection2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\n/*** ITextRange methods ***/\n#define ITextSelection2_GetText(This,pbstr) (This)->lpVtbl->GetText(This,pbstr)\n#define ITextSelection2_SetText(This,bstr) (This)->lpVtbl->SetText(This,bstr)\n#define ITextSelection2_GetChar(This,pch) (This)->lpVtbl->GetChar(This,pch)\n#define ITextSelection2_SetChar(This,ch) (This)->lpVtbl->SetChar(This,ch)\n#define ITextSelection2_GetDuplicate(This,ppRange) (This)->lpVtbl->GetDuplicate(This,ppRange)\n#define ITextSelection2_GetFormattedText(This,ppRange) (This)->lpVtbl->GetFormattedText(This,ppRange)\n#define ITextSelection2_SetFormattedText(This,pRange) (This)->lpVtbl->SetFormattedText(This,pRange)\n#define ITextSelection2_GetStart(This,pcpFirst) (This)->lpVtbl->GetStart(This,pcpFirst)\n#define ITextSelection2_SetStart(This,cpFirst) (This)->lpVtbl->SetStart(This,cpFirst)\n#define ITextSelection2_GetEnd(This,pcpLim) (This)->lpVtbl->GetEnd(This,pcpLim)\n#define ITextSelection2_SetEnd(This,cpLim) (This)->lpVtbl->SetEnd(This,cpLim)\n#define ITextSelection2_GetFont(This,pFont) (This)->lpVtbl->GetFont(This,pFont)\n#define ITextSelection2_SetFont(This,pFont) (This)->lpVtbl->SetFont(This,pFont)\n#define ITextSelection2_GetPara(This,ppPara) (This)->lpVtbl->GetPara(This,ppPara)\n#define ITextSelection2_SetPara(This,pPara) (This)->lpVtbl->SetPara(This,pPara)\n#define ITextSelection2_GetStoryLength(This,pcch) (This)->lpVtbl->GetStoryLength(This,pcch)\n#define ITextSelection2_GetStoryType(This,pValue) (This)->lpVtbl->GetStoryType(This,pValue)\n#define ITextSelection2_Collapse(This,bStart) (This)->lpVtbl->Collapse(This,bStart)\n#define ITextSelection2_Expand(This,Unit,pDelta) (This)->lpVtbl->Expand(This,Unit,pDelta)\n#define ITextSelection2_GetIndex(This,Unit,pIndex) (This)->lpVtbl->GetIndex(This,Unit,pIndex)\n#define ITextSelection2_SetIndex(This,Unit,Index,Extend) (This)->lpVtbl->SetIndex(This,Unit,Index,Extend)\n#define ITextSelection2_SetRange(This,anchor,active) (This)->lpVtbl->SetRange(This,anchor,active)\n#define ITextSelection2_InRange(This,pRange,pb) (This)->lpVtbl->InRange(This,pRange,pb)\n#define ITextSelection2_InStory(This,pRange,pb) (This)->lpVtbl->InStory(This,pRange,pb)\n#define ITextSelection2_IsEqual(This,pRange,pb) (This)->lpVtbl->IsEqual(This,pRange,pb)\n#define ITextSelection2_Select(This) (This)->lpVtbl->Select(This)\n#define ITextSelection2_StartOf(This,Unit,Extend,pDelta) (This)->lpVtbl->StartOf(This,Unit,Extend,pDelta)\n#define ITextSelection2_EndOf(This,Unit,Extend,pDelta) (This)->lpVtbl->EndOf(This,Unit,Extend,pDelta)\n#define ITextSelection2_Move(This,Unit,Count,pDelta) (This)->lpVtbl->Move(This,Unit,Count,pDelta)\n#define ITextSelection2_MoveStart(This,Unit,Count,pDelta) (This)->lpVtbl->MoveStart(This,Unit,Count,pDelta)\n#define ITextSelection2_MoveEnd(This,Unit,Count,pDelta) (This)->lpVtbl->MoveEnd(This,Unit,Count,pDelta)\n#define ITextSelection2_MoveWhile(This,Cset,Count,pDelta) (This)->lpVtbl->MoveWhile(This,Cset,Count,pDelta)\n#define ITextSelection2_MoveStartWhile(This,Cset,Count,pDelta) (This)->lpVtbl->MoveStartWhile(This,Cset,Count,pDelta)\n#define ITextSelection2_MoveEndWhile(This,Cset,Count,pDelta) (This)->lpVtbl->MoveEndWhile(This,Cset,Count,pDelta)\n#define ITextSelection2_MoveUntil(This,Cset,Count,pDelta) (This)->lpVtbl->MoveUntil(This,Cset,Count,pDelta)\n#define ITextSelection2_MoveStartUntil(This,Cset,Count,pDelta) (This)->lpVtbl->MoveStartUntil(This,Cset,Count,pDelta)\n#define ITextSelection2_MoveEndUntil(This,Cset,Count,pDelta) (This)->lpVtbl->MoveEndUntil(This,Cset,Count,pDelta)\n#define ITextSelection2_FindText(This,bstr,cch,Flags,pLength) (This)->lpVtbl->FindText(This,bstr,cch,Flags,pLength)\n#define ITextSelection2_FindTextStart(This,bstr,cch,Flags,pLength) (This)->lpVtbl->FindTextStart(This,bstr,cch,Flags,pLength)\n#define ITextSelection2_FindTextEnd(This,bstr,cch,Flags,pLength) (This)->lpVtbl->FindTextEnd(This,bstr,cch,Flags,pLength)\n#define ITextSelection2_Delete(This,Unit,Count,pDelta) (This)->lpVtbl->Delete(This,Unit,Count,pDelta)\n#define ITextSelection2_Cut(This,pVar) (This)->lpVtbl->Cut(This,pVar)\n#define ITextSelection2_Copy(This,pVar) (This)->lpVtbl->Copy(This,pVar)\n#define ITextSelection2_Paste(This,pVar,Format) (This)->lpVtbl->Paste(This,pVar,Format)\n#define ITextSelection2_CanPaste(This,pVar,Format,pb) (This)->lpVtbl->CanPaste(This,pVar,Format,pb)\n#define ITextSelection2_CanEdit(This,pb) (This)->lpVtbl->CanEdit(This,pb)\n#define ITextSelection2_ChangeCase(This,Type) (This)->lpVtbl->ChangeCase(This,Type)\n#define ITextSelection2_GetPoint(This,Type,cx,cy) (This)->lpVtbl->GetPoint(This,Type,cx,cy)\n#define ITextSelection2_SetPoint(This,x,y,Type,Extend) (This)->lpVtbl->SetPoint(This,x,y,Type,Extend)\n#define ITextSelection2_ScrollIntoView(This,Value) (This)->lpVtbl->ScrollIntoView(This,Value)\n#define ITextSelection2_GetEmbeddedObject(This,ppv) (This)->lpVtbl->GetEmbeddedObject(This,ppv)\n/*** ITextSelection methods ***/\n#define ITextSelection2_GetFlags(This,pFlags) (This)->lpVtbl->GetFlags(This,pFlags)\n#define ITextSelection2_SetFlags(This,Flags) (This)->lpVtbl->SetFlags(This,Flags)\n#define ITextSelection2_GetType(This,pType) (This)->lpVtbl->GetType(This,pType)\n#define ITextSelection2_MoveLeft(This,Unit,Count,Extend,pDelta) (This)->lpVtbl->MoveLeft(This,Unit,Count,Extend,pDelta)\n#define ITextSelection2_MoveRight(This,Unit,Count,Extend,pDelta) (This)->lpVtbl->MoveRight(This,Unit,Count,Extend,pDelta)\n#define ITextSelection2_MoveUp(This,Unit,Count,Extend,pDelta) (This)->lpVtbl->MoveUp(This,Unit,Count,Extend,pDelta)\n#define ITextSelection2_MoveDown(This,Unit,Count,Extend,pDelta) (This)->lpVtbl->MoveDown(This,Unit,Count,Extend,pDelta)\n#define ITextSelection2_HomeKey(This,Unit,Extend,pDelta) (This)->lpVtbl->HomeKey(This,Unit,Extend,pDelta)\n#define ITextSelection2_EndKey(This,Unit,Extend,pDelta) (This)->lpVtbl->EndKey(This,Unit,Extend,pDelta)\n#define ITextSelection2_TypeText(This,bstr) (This)->lpVtbl->TypeText(This,bstr)\n/*** ITextRange2 methods ***/\n#define ITextSelection2_GetCch(This,count) (This)->lpVtbl->GetCch(This,count)\n#define ITextSelection2_GetCells(This,cells) (This)->lpVtbl->GetCells(This,cells)\n#define ITextSelection2_GetColumn(This,column) (This)->lpVtbl->GetColumn(This,column)\n#define ITextSelection2_GetCount(This,count) (This)->lpVtbl->GetCount(This,count)\n#define ITextSelection2_GetDuplicate2(This,range) (This)->lpVtbl->GetDuplicate2(This,range)\n#define ITextSelection2_GetFont2(This,font) (This)->lpVtbl->GetFont2(This,font)\n#define ITextSelection2_SetFont2(This,font) (This)->lpVtbl->SetFont2(This,font)\n#define ITextSelection2_GetFormattedText2(This,range) (This)->lpVtbl->GetFormattedText2(This,range)\n#define ITextSelection2_SetFormattedText2(This,range) (This)->lpVtbl->SetFormattedText2(This,range)\n#define ITextSelection2_GetGravity(This,value) (This)->lpVtbl->GetGravity(This,value)\n#define ITextSelection2_SetGravity(This,value) (This)->lpVtbl->SetGravity(This,value)\n#define ITextSelection2_GetPara2(This,para) (This)->lpVtbl->GetPara2(This,para)\n#define ITextSelection2_SetPara2(This,para) (This)->lpVtbl->SetPara2(This,para)\n#define ITextSelection2_GetRow(This,row) (This)->lpVtbl->GetRow(This,row)\n#define ITextSelection2_GetStartPara(This,value) (This)->lpVtbl->GetStartPara(This,value)\n#define ITextSelection2_GetTable(This,table) (This)->lpVtbl->GetTable(This,table)\n#define ITextSelection2_GetURL(This,url) (This)->lpVtbl->GetURL(This,url)\n#define ITextSelection2_SetURL(This,url) (This)->lpVtbl->SetURL(This,url)\n#define ITextSelection2_AddSubrange(This,cp1,cp2,activate) (This)->lpVtbl->AddSubrange(This,cp1,cp2,activate)\n#define ITextSelection2_BuildUpMath(This,flags) (This)->lpVtbl->BuildUpMath(This,flags)\n#define ITextSelection2_DeleteSubrange(This,first,lim) (This)->lpVtbl->DeleteSubrange(This,first,lim)\n#define ITextSelection2_Find(This,range,count,flags,delta) (This)->lpVtbl->Find(This,range,count,flags,delta)\n#define ITextSelection2_GetChar2(This,ch,offset) (This)->lpVtbl->GetChar2(This,ch,offset)\n#define ITextSelection2_GetDropCap(This,line,pos) (This)->lpVtbl->GetDropCap(This,line,pos)\n#define ITextSelection2_GetInlineObject(This,type,align,ch,ch1,ch2,count,texstyle,ccol,level) (This)->lpVtbl->GetInlineObject(This,type,align,ch,ch1,ch2,count,texstyle,ccol,level)\n#define ITextSelection2_GetProperty(This,type,value) (This)->lpVtbl->GetProperty(This,type,value)\n#define ITextSelection2_GetRect(This,type,left,top,right,bottom,hit) (This)->lpVtbl->GetRect(This,type,left,top,right,bottom,hit)\n#define ITextSelection2_GetSubrange(This,subrange,first,limit) (This)->lpVtbl->GetSubrange(This,subrange,first,limit)\n#define ITextSelection2_GetText2(This,flags,str) (This)->lpVtbl->GetText2(This,flags,str)\n#define ITextSelection2_HexToUnicode(This) (This)->lpVtbl->HexToUnicode(This)\n#define ITextSelection2_InsertTable(This,col,row,autofit) (This)->lpVtbl->InsertTable(This,col,row,autofit)\n#define ITextSelection2_Linearize(This,flags) (This)->lpVtbl->Linearize(This,flags)\n#define ITextSelection2_SetActiveSubrange(This,anchor,active) (This)->lpVtbl->SetActiveSubrange(This,anchor,active)\n#define ITextSelection2_SetDropCap(This,line,pos) (This)->lpVtbl->SetDropCap(This,line,pos)\n#define ITextSelection2_SetProperty(This,type,value) (This)->lpVtbl->SetProperty(This,type,value)\n#define ITextSelection2_SetText2(This,flags,str) (This)->lpVtbl->SetText2(This,flags,str)\n#define ITextSelection2_UnicodeToHex(This) (This)->lpVtbl->UnicodeToHex(This)\n#define ITextSelection2_SetInlineObject(This,type,align,ch,ch1,ch2,count,texstyle,ccol) (This)->lpVtbl->SetInlineObject(This,type,align,ch,ch1,ch2,count,texstyle,ccol)\n#define ITextSelection2_GetMathFunctionType(This,str,value) (This)->lpVtbl->GetMathFunctionType(This,str,value)\n#define ITextSelection2_InsertImage(This,width,height,ascent,type,alttext,stream) (This)->lpVtbl->InsertImage(This,width,height,ascent,type,alttext,stream)\n#else\n/*** IUnknown methods ***/\nstatic FORCEINLINE HRESULT ITextSelection2_QueryInterface(ITextSelection2* This,REFIID riid,void **ppvObject) {\n    return This->lpVtbl->QueryInterface(This,riid,ppvObject);\n}\nstatic FORCEINLINE ULONG ITextSelection2_AddRef(ITextSelection2* This) {\n    return This->lpVtbl->AddRef(This);\n}\nstatic FORCEINLINE ULONG ITextSelection2_Release(ITextSelection2* This) {\n    return This->lpVtbl->Release(This);\n}\n/*** IDispatch methods ***/\nstatic FORCEINLINE HRESULT ITextSelection2_GetTypeInfoCount(ITextSelection2* This,UINT *pctinfo) {\n    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetTypeInfo(ITextSelection2* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {\n    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetIDsOfNames(ITextSelection2* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {\n    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_Invoke(ITextSelection2* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {\n    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);\n}\n/*** ITextRange methods ***/\nstatic FORCEINLINE HRESULT ITextSelection2_GetText(ITextSelection2* This,BSTR *pbstr) {\n    return This->lpVtbl->GetText(This,pbstr);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_SetText(ITextSelection2* This,BSTR bstr) {\n    return This->lpVtbl->SetText(This,bstr);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetChar(ITextSelection2* This,LONG *pch) {\n    return This->lpVtbl->GetChar(This,pch);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_SetChar(ITextSelection2* This,LONG ch) {\n    return This->lpVtbl->SetChar(This,ch);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetDuplicate(ITextSelection2* This,ITextRange **ppRange) {\n    return This->lpVtbl->GetDuplicate(This,ppRange);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetFormattedText(ITextSelection2* This,ITextRange **ppRange) {\n    return This->lpVtbl->GetFormattedText(This,ppRange);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_SetFormattedText(ITextSelection2* This,ITextRange *pRange) {\n    return This->lpVtbl->SetFormattedText(This,pRange);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetStart(ITextSelection2* This,LONG *pcpFirst) {\n    return This->lpVtbl->GetStart(This,pcpFirst);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_SetStart(ITextSelection2* This,LONG cpFirst) {\n    return This->lpVtbl->SetStart(This,cpFirst);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetEnd(ITextSelection2* This,LONG *pcpLim) {\n    return This->lpVtbl->GetEnd(This,pcpLim);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_SetEnd(ITextSelection2* This,LONG cpLim) {\n    return This->lpVtbl->SetEnd(This,cpLim);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetFont(ITextSelection2* This,ITextFont **pFont) {\n    return This->lpVtbl->GetFont(This,pFont);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_SetFont(ITextSelection2* This,ITextFont *pFont) {\n    return This->lpVtbl->SetFont(This,pFont);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetPara(ITextSelection2* This,ITextPara **ppPara) {\n    return This->lpVtbl->GetPara(This,ppPara);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_SetPara(ITextSelection2* This,ITextPara *pPara) {\n    return This->lpVtbl->SetPara(This,pPara);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetStoryLength(ITextSelection2* This,LONG *pcch) {\n    return This->lpVtbl->GetStoryLength(This,pcch);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetStoryType(ITextSelection2* This,LONG *pValue) {\n    return This->lpVtbl->GetStoryType(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_Collapse(ITextSelection2* This,LONG bStart) {\n    return This->lpVtbl->Collapse(This,bStart);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_Expand(ITextSelection2* This,LONG Unit,LONG *pDelta) {\n    return This->lpVtbl->Expand(This,Unit,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetIndex(ITextSelection2* This,LONG Unit,LONG *pIndex) {\n    return This->lpVtbl->GetIndex(This,Unit,pIndex);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_SetIndex(ITextSelection2* This,LONG Unit,LONG Index,LONG Extend) {\n    return This->lpVtbl->SetIndex(This,Unit,Index,Extend);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_SetRange(ITextSelection2* This,LONG anchor,LONG active) {\n    return This->lpVtbl->SetRange(This,anchor,active);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_InRange(ITextSelection2* This,ITextRange *pRange,LONG *pb) {\n    return This->lpVtbl->InRange(This,pRange,pb);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_InStory(ITextSelection2* This,ITextRange *pRange,LONG *pb) {\n    return This->lpVtbl->InStory(This,pRange,pb);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_IsEqual(ITextSelection2* This,ITextRange *pRange,LONG *pb) {\n    return This->lpVtbl->IsEqual(This,pRange,pb);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_Select(ITextSelection2* This) {\n    return This->lpVtbl->Select(This);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_StartOf(ITextSelection2* This,LONG Unit,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->StartOf(This,Unit,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_EndOf(ITextSelection2* This,LONG Unit,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->EndOf(This,Unit,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_Move(ITextSelection2* This,LONG Unit,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->Move(This,Unit,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_MoveStart(ITextSelection2* This,LONG Unit,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveStart(This,Unit,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_MoveEnd(ITextSelection2* This,LONG Unit,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveEnd(This,Unit,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_MoveWhile(ITextSelection2* This,VARIANT *Cset,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveWhile(This,Cset,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_MoveStartWhile(ITextSelection2* This,VARIANT *Cset,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveStartWhile(This,Cset,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_MoveEndWhile(ITextSelection2* This,VARIANT *Cset,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveEndWhile(This,Cset,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_MoveUntil(ITextSelection2* This,VARIANT *Cset,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveUntil(This,Cset,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_MoveStartUntil(ITextSelection2* This,VARIANT *Cset,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveStartUntil(This,Cset,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_MoveEndUntil(ITextSelection2* This,VARIANT *Cset,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveEndUntil(This,Cset,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_FindText(ITextSelection2* This,BSTR bstr,LONG cch,LONG Flags,LONG *pLength) {\n    return This->lpVtbl->FindText(This,bstr,cch,Flags,pLength);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_FindTextStart(ITextSelection2* This,BSTR bstr,LONG cch,LONG Flags,LONG *pLength) {\n    return This->lpVtbl->FindTextStart(This,bstr,cch,Flags,pLength);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_FindTextEnd(ITextSelection2* This,BSTR bstr,LONG cch,LONG Flags,LONG *pLength) {\n    return This->lpVtbl->FindTextEnd(This,bstr,cch,Flags,pLength);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_Delete(ITextSelection2* This,LONG Unit,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->Delete(This,Unit,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_Cut(ITextSelection2* This,VARIANT *pVar) {\n    return This->lpVtbl->Cut(This,pVar);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_Copy(ITextSelection2* This,VARIANT *pVar) {\n    return This->lpVtbl->Copy(This,pVar);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_Paste(ITextSelection2* This,VARIANT *pVar,LONG Format) {\n    return This->lpVtbl->Paste(This,pVar,Format);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_CanPaste(ITextSelection2* This,VARIANT *pVar,LONG Format,LONG *pb) {\n    return This->lpVtbl->CanPaste(This,pVar,Format,pb);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_CanEdit(ITextSelection2* This,LONG *pb) {\n    return This->lpVtbl->CanEdit(This,pb);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_ChangeCase(ITextSelection2* This,LONG Type) {\n    return This->lpVtbl->ChangeCase(This,Type);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetPoint(ITextSelection2* This,LONG Type,LONG *cx,LONG *cy) {\n    return This->lpVtbl->GetPoint(This,Type,cx,cy);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_SetPoint(ITextSelection2* This,LONG x,LONG y,LONG Type,LONG Extend) {\n    return This->lpVtbl->SetPoint(This,x,y,Type,Extend);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_ScrollIntoView(ITextSelection2* This,LONG Value) {\n    return This->lpVtbl->ScrollIntoView(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetEmbeddedObject(ITextSelection2* This,IUnknown **ppv) {\n    return This->lpVtbl->GetEmbeddedObject(This,ppv);\n}\n/*** ITextSelection methods ***/\nstatic FORCEINLINE HRESULT ITextSelection2_GetFlags(ITextSelection2* This,LONG *pFlags) {\n    return This->lpVtbl->GetFlags(This,pFlags);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_SetFlags(ITextSelection2* This,LONG Flags) {\n    return This->lpVtbl->SetFlags(This,Flags);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetType(ITextSelection2* This,LONG *pType) {\n    return This->lpVtbl->GetType(This,pType);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_MoveLeft(ITextSelection2* This,LONG Unit,LONG Count,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->MoveLeft(This,Unit,Count,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_MoveRight(ITextSelection2* This,LONG Unit,LONG Count,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->MoveRight(This,Unit,Count,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_MoveUp(ITextSelection2* This,LONG Unit,LONG Count,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->MoveUp(This,Unit,Count,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_MoveDown(ITextSelection2* This,LONG Unit,LONG Count,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->MoveDown(This,Unit,Count,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_HomeKey(ITextSelection2* This,LONG Unit,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->HomeKey(This,Unit,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_EndKey(ITextSelection2* This,LONG Unit,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->EndKey(This,Unit,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_TypeText(ITextSelection2* This,BSTR bstr) {\n    return This->lpVtbl->TypeText(This,bstr);\n}\n/*** ITextRange2 methods ***/\nstatic FORCEINLINE HRESULT ITextSelection2_GetCch(ITextSelection2* This,LONG *count) {\n    return This->lpVtbl->GetCch(This,count);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetCells(ITextSelection2* This,IUnknown **cells) {\n    return This->lpVtbl->GetCells(This,cells);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetColumn(ITextSelection2* This,IUnknown **column) {\n    return This->lpVtbl->GetColumn(This,column);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetCount(ITextSelection2* This,LONG *count) {\n    return This->lpVtbl->GetCount(This,count);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetDuplicate2(ITextSelection2* This,ITextRange2 **range) {\n    return This->lpVtbl->GetDuplicate2(This,range);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetFont2(ITextSelection2* This,ITextFont2 **font) {\n    return This->lpVtbl->GetFont2(This,font);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_SetFont2(ITextSelection2* This,ITextFont2 *font) {\n    return This->lpVtbl->SetFont2(This,font);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetFormattedText2(ITextSelection2* This,ITextRange2 **range) {\n    return This->lpVtbl->GetFormattedText2(This,range);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_SetFormattedText2(ITextSelection2* This,ITextRange2 *range) {\n    return This->lpVtbl->SetFormattedText2(This,range);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetGravity(ITextSelection2* This,LONG *value) {\n    return This->lpVtbl->GetGravity(This,value);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_SetGravity(ITextSelection2* This,LONG value) {\n    return This->lpVtbl->SetGravity(This,value);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetPara2(ITextSelection2* This,ITextPara2 **para) {\n    return This->lpVtbl->GetPara2(This,para);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_SetPara2(ITextSelection2* This,ITextPara2 *para) {\n    return This->lpVtbl->SetPara2(This,para);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetRow(ITextSelection2* This,ITextRow **row) {\n    return This->lpVtbl->GetRow(This,row);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetStartPara(ITextSelection2* This,LONG *value) {\n    return This->lpVtbl->GetStartPara(This,value);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetTable(ITextSelection2* This,IUnknown **table) {\n    return This->lpVtbl->GetTable(This,table);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetURL(ITextSelection2* This,BSTR *url) {\n    return This->lpVtbl->GetURL(This,url);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_SetURL(ITextSelection2* This,BSTR url) {\n    return This->lpVtbl->SetURL(This,url);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_AddSubrange(ITextSelection2* This,LONG cp1,LONG cp2,LONG activate) {\n    return This->lpVtbl->AddSubrange(This,cp1,cp2,activate);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_BuildUpMath(ITextSelection2* This,LONG flags) {\n    return This->lpVtbl->BuildUpMath(This,flags);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_DeleteSubrange(ITextSelection2* This,LONG first,LONG lim) {\n    return This->lpVtbl->DeleteSubrange(This,first,lim);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_Find(ITextSelection2* This,ITextRange2 *range,LONG count,LONG flags,LONG *delta) {\n    return This->lpVtbl->Find(This,range,count,flags,delta);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetChar2(ITextSelection2* This,LONG *ch,LONG offset) {\n    return This->lpVtbl->GetChar2(This,ch,offset);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetDropCap(ITextSelection2* This,LONG *line,LONG *pos) {\n    return This->lpVtbl->GetDropCap(This,line,pos);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetInlineObject(ITextSelection2* This,LONG *type,LONG *align,LONG *ch,LONG *ch1,LONG *ch2,LONG *count,LONG *texstyle,LONG *ccol,LONG *level) {\n    return This->lpVtbl->GetInlineObject(This,type,align,ch,ch1,ch2,count,texstyle,ccol,level);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetProperty(ITextSelection2* This,LONG type,LONG *value) {\n    return This->lpVtbl->GetProperty(This,type,value);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetRect(ITextSelection2* This,LONG type,LONG *left,LONG *top,LONG *right,LONG *bottom,LONG *hit) {\n    return This->lpVtbl->GetRect(This,type,left,top,right,bottom,hit);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetSubrange(ITextSelection2* This,LONG subrange,LONG *first,LONG *limit) {\n    return This->lpVtbl->GetSubrange(This,subrange,first,limit);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetText2(ITextSelection2* This,LONG flags,BSTR *str) {\n    return This->lpVtbl->GetText2(This,flags,str);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_HexToUnicode(ITextSelection2* This) {\n    return This->lpVtbl->HexToUnicode(This);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_InsertTable(ITextSelection2* This,LONG col,LONG row,LONG autofit) {\n    return This->lpVtbl->InsertTable(This,col,row,autofit);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_Linearize(ITextSelection2* This,LONG flags) {\n    return This->lpVtbl->Linearize(This,flags);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_SetActiveSubrange(ITextSelection2* This,LONG anchor,LONG active) {\n    return This->lpVtbl->SetActiveSubrange(This,anchor,active);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_SetDropCap(ITextSelection2* This,LONG line,LONG pos) {\n    return This->lpVtbl->SetDropCap(This,line,pos);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_SetProperty(ITextSelection2* This,LONG type,LONG value) {\n    return This->lpVtbl->SetProperty(This,type,value);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_SetText2(ITextSelection2* This,LONG flags,BSTR str) {\n    return This->lpVtbl->SetText2(This,flags,str);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_UnicodeToHex(ITextSelection2* This) {\n    return This->lpVtbl->UnicodeToHex(This);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_SetInlineObject(ITextSelection2* This,LONG type,LONG align,LONG ch,LONG ch1,LONG ch2,LONG count,LONG texstyle,LONG ccol) {\n    return This->lpVtbl->SetInlineObject(This,type,align,ch,ch1,ch2,count,texstyle,ccol);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_GetMathFunctionType(ITextSelection2* This,BSTR str,LONG *value) {\n    return This->lpVtbl->GetMathFunctionType(This,str,value);\n}\nstatic FORCEINLINE HRESULT ITextSelection2_InsertImage(ITextSelection2* This,LONG width,LONG height,LONG ascent,LONG type,BSTR alttext,IStream *stream) {\n    return This->lpVtbl->InsertImage(This,width,height,ascent,type,alttext,stream);\n}\n#endif\n#endif\n\n#endif\n\n\n#endif  /* __ITextSelection2_INTERFACE_DEFINED__ */\n\n/*****************************************************************************\n * ITextDocument2 interface\n */\n#ifndef __ITextDocument2_INTERFACE_DEFINED__\n#define __ITextDocument2_INTERFACE_DEFINED__\n\nDEFINE_GUID(IID_ITextDocument2, 0xc241f5e0, 0x7206, 0x11d8, 0xa2,0xc7, 0x00,0xa0,0xd1,0xd6,0xc6,0xb3);\n#if defined(__cplusplus) && !defined(CINTERFACE)\nMIDL_INTERFACE(\"c241f5e0-7206-11d8-a2c7-00a0d1d6c6b3\")\nITextDocument2 : public ITextDocument\n{\n    virtual HRESULT STDMETHODCALLTYPE GetCaretType(\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetCaretType(\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetDisplays(\n        ITextDisplays **displays) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetDocumentFont(\n        ITextFont2 **font) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetDocumentFont(\n        ITextFont2 *font) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetDocumentPara(\n        ITextPara2 **para) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetDocumentPara(\n        ITextPara2 *para) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetEastAsianFlags(\n        LONG *flags) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetGenerator(\n        BSTR *bstr) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetIMEInProgress(\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetNotificationMode(\n        LONG *mode) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetNotificationMode(\n        LONG mode) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetSelection2(\n        ITextSelection2 **selection) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetStoryRanges2(\n        ITextStoryRanges2 **stories) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetTypographyOptions(\n        LONG *options) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetVersion(\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetWindow(\n        LONG *hwnd) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE AttachMsgFilter(\n        IUnknown *filter) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE CheckTextLimit(\n        LONG cch,\n        LONG *exceed) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetCallManager(\n        IUnknown **manager) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetClientRect(\n        LONG type,\n        LONG *left,\n        LONG *top,\n        LONG *right,\n        LONG *bottom) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetEffectColor(\n        LONG index,\n        COLORREF *cr) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetImmContext(\n        LONG *context) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetPreferredFont(\n        LONG cp,\n        LONG codepage,\n        LONG option,\n        LONG current_codepage,\n        LONG current_fontsize,\n        BSTR *bstr,\n        LONG *pitch_family,\n        LONG *new_fontsize) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetProperty(\n        LONG type,\n        LONG *value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetStrings(\n        ITextStrings **strings) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Notify(\n        LONG notify) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Range2(\n        LONG cp_active,\n        LONG cp_anchor,\n        ITextRange2 **range) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE RangeFromPoint2(\n        LONG x,\n        LONG y,\n        LONG type,\n        ITextRange2 **range) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE ReleaseCallManager(\n        IUnknown *manager) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE ReleaseImmContext(\n        LONG context) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetEffectColor(\n        LONG index,\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetProperty(\n        LONG type,\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetTypographyOptions(\n        LONG options,\n        LONG mask) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SysBeep(\n        ) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Update(\n        LONG value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE UpdateWindow(\n        ) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetMathProperties(\n        LONG *options) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetMathProperties(\n        LONG options,\n        LONG mask) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetActiveStory(\n        ITextStory **story) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetActiveStory(\n        ITextStory *story) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetMainStory(\n        ITextStory **story) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetNewStory(\n        ITextStory **story) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetStory(\n        LONG index,\n        ITextStory **story) = 0;\n\n};\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(ITextDocument2, 0xc241f5e0, 0x7206, 0x11d8, 0xa2,0xc7, 0x00,0xa0,0xd1,0xd6,0xc6,0xb3)\n#endif\n#else\ntypedef struct ITextDocument2Vtbl {\n    BEGIN_INTERFACE\n\n    /*** IUnknown methods ***/\n    HRESULT (STDMETHODCALLTYPE *QueryInterface)(\n        ITextDocument2 *This,\n        REFIID riid,\n        void **ppvObject);\n\n    ULONG (STDMETHODCALLTYPE *AddRef)(\n        ITextDocument2 *This);\n\n    ULONG (STDMETHODCALLTYPE *Release)(\n        ITextDocument2 *This);\n\n    /*** IDispatch methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(\n        ITextDocument2 *This,\n        UINT *pctinfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(\n        ITextDocument2 *This,\n        UINT iTInfo,\n        LCID lcid,\n        ITypeInfo **ppTInfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(\n        ITextDocument2 *This,\n        REFIID riid,\n        LPOLESTR *rgszNames,\n        UINT cNames,\n        LCID lcid,\n        DISPID *rgDispId);\n\n    HRESULT (STDMETHODCALLTYPE *Invoke)(\n        ITextDocument2 *This,\n        DISPID dispIdMember,\n        REFIID riid,\n        LCID lcid,\n        WORD wFlags,\n        DISPPARAMS *pDispParams,\n        VARIANT *pVarResult,\n        EXCEPINFO *pExcepInfo,\n        UINT *puArgErr);\n\n    /*** ITextDocument methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetName)(\n        ITextDocument2 *This,\n        BSTR *pName);\n\n    HRESULT (STDMETHODCALLTYPE *GetSelection)(\n        ITextDocument2 *This,\n        ITextSelection **ppSel);\n\n    HRESULT (STDMETHODCALLTYPE *GetStoryCount)(\n        ITextDocument2 *This,\n        LONG *pCount);\n\n    HRESULT (STDMETHODCALLTYPE *GetStoryRanges)(\n        ITextDocument2 *This,\n        ITextStoryRanges **ppStories);\n\n    HRESULT (STDMETHODCALLTYPE *GetSaved)(\n        ITextDocument2 *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetSaved)(\n        ITextDocument2 *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetDefaultTabStop)(\n        ITextDocument2 *This,\n        float *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetDefaultTabStop)(\n        ITextDocument2 *This,\n        float Value);\n\n    HRESULT (STDMETHODCALLTYPE *New)(\n        ITextDocument2 *This);\n\n    HRESULT (STDMETHODCALLTYPE *Open)(\n        ITextDocument2 *This,\n        VARIANT *pVar,\n        LONG Flags,\n        LONG CodePage);\n\n    HRESULT (STDMETHODCALLTYPE *Save)(\n        ITextDocument2 *This,\n        VARIANT *pVar,\n        LONG Flags,\n        LONG CodePage);\n\n    HRESULT (STDMETHODCALLTYPE *Freeze)(\n        ITextDocument2 *This,\n        LONG *pCount);\n\n    HRESULT (STDMETHODCALLTYPE *Unfreeze)(\n        ITextDocument2 *This,\n        LONG *pCount);\n\n    HRESULT (STDMETHODCALLTYPE *BeginEditCollection)(\n        ITextDocument2 *This);\n\n    HRESULT (STDMETHODCALLTYPE *EndEditCollection)(\n        ITextDocument2 *This);\n\n    HRESULT (STDMETHODCALLTYPE *Undo)(\n        ITextDocument2 *This,\n        LONG Count,\n        LONG *prop);\n\n    HRESULT (STDMETHODCALLTYPE *Redo)(\n        ITextDocument2 *This,\n        LONG Count,\n        LONG *prop);\n\n    HRESULT (STDMETHODCALLTYPE *Range)(\n        ITextDocument2 *This,\n        LONG cp1,\n        LONG cp2,\n        ITextRange **ppRange);\n\n    HRESULT (STDMETHODCALLTYPE *RangeFromPoint)(\n        ITextDocument2 *This,\n        LONG x,\n        LONG y,\n        ITextRange **ppRange);\n\n    /*** ITextDocument2 methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetCaretType)(\n        ITextDocument2 *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *SetCaretType)(\n        ITextDocument2 *This,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *GetDisplays)(\n        ITextDocument2 *This,\n        ITextDisplays **displays);\n\n    HRESULT (STDMETHODCALLTYPE *GetDocumentFont)(\n        ITextDocument2 *This,\n        ITextFont2 **font);\n\n    HRESULT (STDMETHODCALLTYPE *SetDocumentFont)(\n        ITextDocument2 *This,\n        ITextFont2 *font);\n\n    HRESULT (STDMETHODCALLTYPE *GetDocumentPara)(\n        ITextDocument2 *This,\n        ITextPara2 **para);\n\n    HRESULT (STDMETHODCALLTYPE *SetDocumentPara)(\n        ITextDocument2 *This,\n        ITextPara2 *para);\n\n    HRESULT (STDMETHODCALLTYPE *GetEastAsianFlags)(\n        ITextDocument2 *This,\n        LONG *flags);\n\n    HRESULT (STDMETHODCALLTYPE *GetGenerator)(\n        ITextDocument2 *This,\n        BSTR *bstr);\n\n    HRESULT (STDMETHODCALLTYPE *SetIMEInProgress)(\n        ITextDocument2 *This,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *GetNotificationMode)(\n        ITextDocument2 *This,\n        LONG *mode);\n\n    HRESULT (STDMETHODCALLTYPE *SetNotificationMode)(\n        ITextDocument2 *This,\n        LONG mode);\n\n    HRESULT (STDMETHODCALLTYPE *GetSelection2)(\n        ITextDocument2 *This,\n        ITextSelection2 **selection);\n\n    HRESULT (STDMETHODCALLTYPE *GetStoryRanges2)(\n        ITextDocument2 *This,\n        ITextStoryRanges2 **stories);\n\n    HRESULT (STDMETHODCALLTYPE *GetTypographyOptions)(\n        ITextDocument2 *This,\n        LONG *options);\n\n    HRESULT (STDMETHODCALLTYPE *GetVersion)(\n        ITextDocument2 *This,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *GetWindow)(\n        ITextDocument2 *This,\n        LONG *hwnd);\n\n    HRESULT (STDMETHODCALLTYPE *AttachMsgFilter)(\n        ITextDocument2 *This,\n        IUnknown *filter);\n\n    HRESULT (STDMETHODCALLTYPE *CheckTextLimit)(\n        ITextDocument2 *This,\n        LONG cch,\n        LONG *exceed);\n\n    HRESULT (STDMETHODCALLTYPE *GetCallManager)(\n        ITextDocument2 *This,\n        IUnknown **manager);\n\n    HRESULT (STDMETHODCALLTYPE *GetClientRect)(\n        ITextDocument2 *This,\n        LONG type,\n        LONG *left,\n        LONG *top,\n        LONG *right,\n        LONG *bottom);\n\n    HRESULT (STDMETHODCALLTYPE *GetEffectColor)(\n        ITextDocument2 *This,\n        LONG index,\n        COLORREF *cr);\n\n    HRESULT (STDMETHODCALLTYPE *GetImmContext)(\n        ITextDocument2 *This,\n        LONG *context);\n\n    HRESULT (STDMETHODCALLTYPE *GetPreferredFont)(\n        ITextDocument2 *This,\n        LONG cp,\n        LONG codepage,\n        LONG option,\n        LONG current_codepage,\n        LONG current_fontsize,\n        BSTR *bstr,\n        LONG *pitch_family,\n        LONG *new_fontsize);\n\n    HRESULT (STDMETHODCALLTYPE *GetProperty)(\n        ITextDocument2 *This,\n        LONG type,\n        LONG *value);\n\n    HRESULT (STDMETHODCALLTYPE *GetStrings)(\n        ITextDocument2 *This,\n        ITextStrings **strings);\n\n    HRESULT (STDMETHODCALLTYPE *Notify)(\n        ITextDocument2 *This,\n        LONG notify);\n\n    HRESULT (STDMETHODCALLTYPE *Range2)(\n        ITextDocument2 *This,\n        LONG cp_active,\n        LONG cp_anchor,\n        ITextRange2 **range);\n\n    HRESULT (STDMETHODCALLTYPE *RangeFromPoint2)(\n        ITextDocument2 *This,\n        LONG x,\n        LONG y,\n        LONG type,\n        ITextRange2 **range);\n\n    HRESULT (STDMETHODCALLTYPE *ReleaseCallManager)(\n        ITextDocument2 *This,\n        IUnknown *manager);\n\n    HRESULT (STDMETHODCALLTYPE *ReleaseImmContext)(\n        ITextDocument2 *This,\n        LONG context);\n\n    HRESULT (STDMETHODCALLTYPE *SetEffectColor)(\n        ITextDocument2 *This,\n        LONG index,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *SetProperty)(\n        ITextDocument2 *This,\n        LONG type,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *SetTypographyOptions)(\n        ITextDocument2 *This,\n        LONG options,\n        LONG mask);\n\n    HRESULT (STDMETHODCALLTYPE *SysBeep)(\n        ITextDocument2 *This);\n\n    HRESULT (STDMETHODCALLTYPE *Update)(\n        ITextDocument2 *This,\n        LONG value);\n\n    HRESULT (STDMETHODCALLTYPE *UpdateWindow)(\n        ITextDocument2 *This);\n\n    HRESULT (STDMETHODCALLTYPE *GetMathProperties)(\n        ITextDocument2 *This,\n        LONG *options);\n\n    HRESULT (STDMETHODCALLTYPE *SetMathProperties)(\n        ITextDocument2 *This,\n        LONG options,\n        LONG mask);\n\n    HRESULT (STDMETHODCALLTYPE *GetActiveStory)(\n        ITextDocument2 *This,\n        ITextStory **story);\n\n    HRESULT (STDMETHODCALLTYPE *SetActiveStory)(\n        ITextDocument2 *This,\n        ITextStory *story);\n\n    HRESULT (STDMETHODCALLTYPE *GetMainStory)(\n        ITextDocument2 *This,\n        ITextStory **story);\n\n    HRESULT (STDMETHODCALLTYPE *GetNewStory)(\n        ITextDocument2 *This,\n        ITextStory **story);\n\n    HRESULT (STDMETHODCALLTYPE *GetStory)(\n        ITextDocument2 *This,\n        LONG index,\n        ITextStory **story);\n\n    END_INTERFACE\n} ITextDocument2Vtbl;\n\ninterface ITextDocument2 {\n    CONST_VTBL ITextDocument2Vtbl* lpVtbl;\n};\n\n#ifdef COBJMACROS\n#ifndef WIDL_C_INLINE_WRAPPERS\n/*** IUnknown methods ***/\n#define ITextDocument2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)\n#define ITextDocument2_AddRef(This) (This)->lpVtbl->AddRef(This)\n#define ITextDocument2_Release(This) (This)->lpVtbl->Release(This)\n/*** IDispatch methods ***/\n#define ITextDocument2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)\n#define ITextDocument2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)\n#define ITextDocument2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\n#define ITextDocument2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\n/*** ITextDocument methods ***/\n#define ITextDocument2_GetName(This,pName) (This)->lpVtbl->GetName(This,pName)\n#define ITextDocument2_GetSelection(This,ppSel) (This)->lpVtbl->GetSelection(This,ppSel)\n#define ITextDocument2_GetStoryCount(This,pCount) (This)->lpVtbl->GetStoryCount(This,pCount)\n#define ITextDocument2_GetStoryRanges(This,ppStories) (This)->lpVtbl->GetStoryRanges(This,ppStories)\n#define ITextDocument2_GetSaved(This,pValue) (This)->lpVtbl->GetSaved(This,pValue)\n#define ITextDocument2_SetSaved(This,Value) (This)->lpVtbl->SetSaved(This,Value)\n#define ITextDocument2_GetDefaultTabStop(This,pValue) (This)->lpVtbl->GetDefaultTabStop(This,pValue)\n#define ITextDocument2_SetDefaultTabStop(This,Value) (This)->lpVtbl->SetDefaultTabStop(This,Value)\n#define ITextDocument2_New(This) (This)->lpVtbl->New(This)\n#define ITextDocument2_Open(This,pVar,Flags,CodePage) (This)->lpVtbl->Open(This,pVar,Flags,CodePage)\n#define ITextDocument2_Save(This,pVar,Flags,CodePage) (This)->lpVtbl->Save(This,pVar,Flags,CodePage)\n#define ITextDocument2_Freeze(This,pCount) (This)->lpVtbl->Freeze(This,pCount)\n#define ITextDocument2_Unfreeze(This,pCount) (This)->lpVtbl->Unfreeze(This,pCount)\n#define ITextDocument2_BeginEditCollection(This) (This)->lpVtbl->BeginEditCollection(This)\n#define ITextDocument2_EndEditCollection(This) (This)->lpVtbl->EndEditCollection(This)\n#define ITextDocument2_Undo(This,Count,prop) (This)->lpVtbl->Undo(This,Count,prop)\n#define ITextDocument2_Redo(This,Count,prop) (This)->lpVtbl->Redo(This,Count,prop)\n#define ITextDocument2_Range(This,cp1,cp2,ppRange) (This)->lpVtbl->Range(This,cp1,cp2,ppRange)\n#define ITextDocument2_RangeFromPoint(This,x,y,ppRange) (This)->lpVtbl->RangeFromPoint(This,x,y,ppRange)\n/*** ITextDocument2 methods ***/\n#define ITextDocument2_GetCaretType(This,value) (This)->lpVtbl->GetCaretType(This,value)\n#define ITextDocument2_SetCaretType(This,value) (This)->lpVtbl->SetCaretType(This,value)\n#define ITextDocument2_GetDisplays(This,displays) (This)->lpVtbl->GetDisplays(This,displays)\n#define ITextDocument2_GetDocumentFont(This,font) (This)->lpVtbl->GetDocumentFont(This,font)\n#define ITextDocument2_SetDocumentFont(This,font) (This)->lpVtbl->SetDocumentFont(This,font)\n#define ITextDocument2_GetDocumentPara(This,para) (This)->lpVtbl->GetDocumentPara(This,para)\n#define ITextDocument2_SetDocumentPara(This,para) (This)->lpVtbl->SetDocumentPara(This,para)\n#define ITextDocument2_GetEastAsianFlags(This,flags) (This)->lpVtbl->GetEastAsianFlags(This,flags)\n#define ITextDocument2_GetGenerator(This,bstr) (This)->lpVtbl->GetGenerator(This,bstr)\n#define ITextDocument2_SetIMEInProgress(This,value) (This)->lpVtbl->SetIMEInProgress(This,value)\n#define ITextDocument2_GetNotificationMode(This,mode) (This)->lpVtbl->GetNotificationMode(This,mode)\n#define ITextDocument2_SetNotificationMode(This,mode) (This)->lpVtbl->SetNotificationMode(This,mode)\n#define ITextDocument2_GetSelection2(This,selection) (This)->lpVtbl->GetSelection2(This,selection)\n#define ITextDocument2_GetStoryRanges2(This,stories) (This)->lpVtbl->GetStoryRanges2(This,stories)\n#define ITextDocument2_GetTypographyOptions(This,options) (This)->lpVtbl->GetTypographyOptions(This,options)\n#define ITextDocument2_GetVersion(This,value) (This)->lpVtbl->GetVersion(This,value)\n#define ITextDocument2_GetWindow(This,hwnd) (This)->lpVtbl->GetWindow(This,hwnd)\n#define ITextDocument2_AttachMsgFilter(This,filter) (This)->lpVtbl->AttachMsgFilter(This,filter)\n#define ITextDocument2_CheckTextLimit(This,cch,exceed) (This)->lpVtbl->CheckTextLimit(This,cch,exceed)\n#define ITextDocument2_GetCallManager(This,manager) (This)->lpVtbl->GetCallManager(This,manager)\n#define ITextDocument2_GetClientRect(This,type,left,top,right,bottom) (This)->lpVtbl->GetClientRect(This,type,left,top,right,bottom)\n#define ITextDocument2_GetEffectColor(This,index,cr) (This)->lpVtbl->GetEffectColor(This,index,cr)\n#define ITextDocument2_GetImmContext(This,context) (This)->lpVtbl->GetImmContext(This,context)\n#define ITextDocument2_GetPreferredFont(This,cp,codepage,option,current_codepage,current_fontsize,bstr,pitch_family,new_fontsize) (This)->lpVtbl->GetPreferredFont(This,cp,codepage,option,current_codepage,current_fontsize,bstr,pitch_family,new_fontsize)\n#define ITextDocument2_GetProperty(This,type,value) (This)->lpVtbl->GetProperty(This,type,value)\n#define ITextDocument2_GetStrings(This,strings) (This)->lpVtbl->GetStrings(This,strings)\n#define ITextDocument2_Notify(This,notify) (This)->lpVtbl->Notify(This,notify)\n#define ITextDocument2_Range2(This,cp_active,cp_anchor,range) (This)->lpVtbl->Range2(This,cp_active,cp_anchor,range)\n#define ITextDocument2_RangeFromPoint2(This,x,y,type,range) (This)->lpVtbl->RangeFromPoint2(This,x,y,type,range)\n#define ITextDocument2_ReleaseCallManager(This,manager) (This)->lpVtbl->ReleaseCallManager(This,manager)\n#define ITextDocument2_ReleaseImmContext(This,context) (This)->lpVtbl->ReleaseImmContext(This,context)\n#define ITextDocument2_SetEffectColor(This,index,value) (This)->lpVtbl->SetEffectColor(This,index,value)\n#define ITextDocument2_SetProperty(This,type,value) (This)->lpVtbl->SetProperty(This,type,value)\n#define ITextDocument2_SetTypographyOptions(This,options,mask) (This)->lpVtbl->SetTypographyOptions(This,options,mask)\n#define ITextDocument2_SysBeep(This) (This)->lpVtbl->SysBeep(This)\n#define ITextDocument2_Update(This,value) (This)->lpVtbl->Update(This,value)\n#define ITextDocument2_UpdateWindow(This) (This)->lpVtbl->UpdateWindow(This)\n#define ITextDocument2_GetMathProperties(This,options) (This)->lpVtbl->GetMathProperties(This,options)\n#define ITextDocument2_SetMathProperties(This,options,mask) (This)->lpVtbl->SetMathProperties(This,options,mask)\n#define ITextDocument2_GetActiveStory(This,story) (This)->lpVtbl->GetActiveStory(This,story)\n#define ITextDocument2_SetActiveStory(This,story) (This)->lpVtbl->SetActiveStory(This,story)\n#define ITextDocument2_GetMainStory(This,story) (This)->lpVtbl->GetMainStory(This,story)\n#define ITextDocument2_GetNewStory(This,story) (This)->lpVtbl->GetNewStory(This,story)\n#define ITextDocument2_GetStory(This,index,story) (This)->lpVtbl->GetStory(This,index,story)\n#else\n/*** IUnknown methods ***/\nstatic FORCEINLINE HRESULT ITextDocument2_QueryInterface(ITextDocument2* This,REFIID riid,void **ppvObject) {\n    return This->lpVtbl->QueryInterface(This,riid,ppvObject);\n}\nstatic FORCEINLINE ULONG ITextDocument2_AddRef(ITextDocument2* This) {\n    return This->lpVtbl->AddRef(This);\n}\nstatic FORCEINLINE ULONG ITextDocument2_Release(ITextDocument2* This) {\n    return This->lpVtbl->Release(This);\n}\n/*** IDispatch methods ***/\nstatic FORCEINLINE HRESULT ITextDocument2_GetTypeInfoCount(ITextDocument2* This,UINT *pctinfo) {\n    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetTypeInfo(ITextDocument2* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {\n    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetIDsOfNames(ITextDocument2* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {\n    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_Invoke(ITextDocument2* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {\n    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);\n}\n/*** ITextDocument methods ***/\nstatic FORCEINLINE HRESULT ITextDocument2_GetName(ITextDocument2* This,BSTR *pName) {\n    return This->lpVtbl->GetName(This,pName);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetSelection(ITextDocument2* This,ITextSelection **ppSel) {\n    return This->lpVtbl->GetSelection(This,ppSel);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetStoryCount(ITextDocument2* This,LONG *pCount) {\n    return This->lpVtbl->GetStoryCount(This,pCount);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetStoryRanges(ITextDocument2* This,ITextStoryRanges **ppStories) {\n    return This->lpVtbl->GetStoryRanges(This,ppStories);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetSaved(ITextDocument2* This,LONG *pValue) {\n    return This->lpVtbl->GetSaved(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_SetSaved(ITextDocument2* This,LONG Value) {\n    return This->lpVtbl->SetSaved(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetDefaultTabStop(ITextDocument2* This,float *pValue) {\n    return This->lpVtbl->GetDefaultTabStop(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_SetDefaultTabStop(ITextDocument2* This,float Value) {\n    return This->lpVtbl->SetDefaultTabStop(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_New(ITextDocument2* This) {\n    return This->lpVtbl->New(This);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_Open(ITextDocument2* This,VARIANT *pVar,LONG Flags,LONG CodePage) {\n    return This->lpVtbl->Open(This,pVar,Flags,CodePage);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_Save(ITextDocument2* This,VARIANT *pVar,LONG Flags,LONG CodePage) {\n    return This->lpVtbl->Save(This,pVar,Flags,CodePage);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_Freeze(ITextDocument2* This,LONG *pCount) {\n    return This->lpVtbl->Freeze(This,pCount);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_Unfreeze(ITextDocument2* This,LONG *pCount) {\n    return This->lpVtbl->Unfreeze(This,pCount);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_BeginEditCollection(ITextDocument2* This) {\n    return This->lpVtbl->BeginEditCollection(This);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_EndEditCollection(ITextDocument2* This) {\n    return This->lpVtbl->EndEditCollection(This);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_Undo(ITextDocument2* This,LONG Count,LONG *prop) {\n    return This->lpVtbl->Undo(This,Count,prop);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_Redo(ITextDocument2* This,LONG Count,LONG *prop) {\n    return This->lpVtbl->Redo(This,Count,prop);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_Range(ITextDocument2* This,LONG cp1,LONG cp2,ITextRange **ppRange) {\n    return This->lpVtbl->Range(This,cp1,cp2,ppRange);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_RangeFromPoint(ITextDocument2* This,LONG x,LONG y,ITextRange **ppRange) {\n    return This->lpVtbl->RangeFromPoint(This,x,y,ppRange);\n}\n/*** ITextDocument2 methods ***/\nstatic FORCEINLINE HRESULT ITextDocument2_GetCaretType(ITextDocument2* This,LONG *value) {\n    return This->lpVtbl->GetCaretType(This,value);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_SetCaretType(ITextDocument2* This,LONG value) {\n    return This->lpVtbl->SetCaretType(This,value);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetDisplays(ITextDocument2* This,ITextDisplays **displays) {\n    return This->lpVtbl->GetDisplays(This,displays);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetDocumentFont(ITextDocument2* This,ITextFont2 **font) {\n    return This->lpVtbl->GetDocumentFont(This,font);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_SetDocumentFont(ITextDocument2* This,ITextFont2 *font) {\n    return This->lpVtbl->SetDocumentFont(This,font);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetDocumentPara(ITextDocument2* This,ITextPara2 **para) {\n    return This->lpVtbl->GetDocumentPara(This,para);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_SetDocumentPara(ITextDocument2* This,ITextPara2 *para) {\n    return This->lpVtbl->SetDocumentPara(This,para);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetEastAsianFlags(ITextDocument2* This,LONG *flags) {\n    return This->lpVtbl->GetEastAsianFlags(This,flags);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetGenerator(ITextDocument2* This,BSTR *bstr) {\n    return This->lpVtbl->GetGenerator(This,bstr);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_SetIMEInProgress(ITextDocument2* This,LONG value) {\n    return This->lpVtbl->SetIMEInProgress(This,value);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetNotificationMode(ITextDocument2* This,LONG *mode) {\n    return This->lpVtbl->GetNotificationMode(This,mode);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_SetNotificationMode(ITextDocument2* This,LONG mode) {\n    return This->lpVtbl->SetNotificationMode(This,mode);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetSelection2(ITextDocument2* This,ITextSelection2 **selection) {\n    return This->lpVtbl->GetSelection2(This,selection);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetStoryRanges2(ITextDocument2* This,ITextStoryRanges2 **stories) {\n    return This->lpVtbl->GetStoryRanges2(This,stories);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetTypographyOptions(ITextDocument2* This,LONG *options) {\n    return This->lpVtbl->GetTypographyOptions(This,options);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetVersion(ITextDocument2* This,LONG *value) {\n    return This->lpVtbl->GetVersion(This,value);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetWindow(ITextDocument2* This,LONG *hwnd) {\n    return This->lpVtbl->GetWindow(This,hwnd);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_AttachMsgFilter(ITextDocument2* This,IUnknown *filter) {\n    return This->lpVtbl->AttachMsgFilter(This,filter);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_CheckTextLimit(ITextDocument2* This,LONG cch,LONG *exceed) {\n    return This->lpVtbl->CheckTextLimit(This,cch,exceed);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetCallManager(ITextDocument2* This,IUnknown **manager) {\n    return This->lpVtbl->GetCallManager(This,manager);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetClientRect(ITextDocument2* This,LONG type,LONG *left,LONG *top,LONG *right,LONG *bottom) {\n    return This->lpVtbl->GetClientRect(This,type,left,top,right,bottom);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetEffectColor(ITextDocument2* This,LONG index,COLORREF *cr) {\n    return This->lpVtbl->GetEffectColor(This,index,cr);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetImmContext(ITextDocument2* This,LONG *context) {\n    return This->lpVtbl->GetImmContext(This,context);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetPreferredFont(ITextDocument2* This,LONG cp,LONG codepage,LONG option,LONG current_codepage,LONG current_fontsize,BSTR *bstr,LONG *pitch_family,LONG *new_fontsize) {\n    return This->lpVtbl->GetPreferredFont(This,cp,codepage,option,current_codepage,current_fontsize,bstr,pitch_family,new_fontsize);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetProperty(ITextDocument2* This,LONG type,LONG *value) {\n    return This->lpVtbl->GetProperty(This,type,value);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetStrings(ITextDocument2* This,ITextStrings **strings) {\n    return This->lpVtbl->GetStrings(This,strings);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_Notify(ITextDocument2* This,LONG notify) {\n    return This->lpVtbl->Notify(This,notify);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_Range2(ITextDocument2* This,LONG cp_active,LONG cp_anchor,ITextRange2 **range) {\n    return This->lpVtbl->Range2(This,cp_active,cp_anchor,range);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_RangeFromPoint2(ITextDocument2* This,LONG x,LONG y,LONG type,ITextRange2 **range) {\n    return This->lpVtbl->RangeFromPoint2(This,x,y,type,range);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_ReleaseCallManager(ITextDocument2* This,IUnknown *manager) {\n    return This->lpVtbl->ReleaseCallManager(This,manager);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_ReleaseImmContext(ITextDocument2* This,LONG context) {\n    return This->lpVtbl->ReleaseImmContext(This,context);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_SetEffectColor(ITextDocument2* This,LONG index,LONG value) {\n    return This->lpVtbl->SetEffectColor(This,index,value);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_SetProperty(ITextDocument2* This,LONG type,LONG value) {\n    return This->lpVtbl->SetProperty(This,type,value);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_SetTypographyOptions(ITextDocument2* This,LONG options,LONG mask) {\n    return This->lpVtbl->SetTypographyOptions(This,options,mask);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_SysBeep(ITextDocument2* This) {\n    return This->lpVtbl->SysBeep(This);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_Update(ITextDocument2* This,LONG value) {\n    return This->lpVtbl->Update(This,value);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_UpdateWindow(ITextDocument2* This) {\n    return This->lpVtbl->UpdateWindow(This);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetMathProperties(ITextDocument2* This,LONG *options) {\n    return This->lpVtbl->GetMathProperties(This,options);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_SetMathProperties(ITextDocument2* This,LONG options,LONG mask) {\n    return This->lpVtbl->SetMathProperties(This,options,mask);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetActiveStory(ITextDocument2* This,ITextStory **story) {\n    return This->lpVtbl->GetActiveStory(This,story);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_SetActiveStory(ITextDocument2* This,ITextStory *story) {\n    return This->lpVtbl->SetActiveStory(This,story);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetMainStory(ITextDocument2* This,ITextStory **story) {\n    return This->lpVtbl->GetMainStory(This,story);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetNewStory(ITextDocument2* This,ITextStory **story) {\n    return This->lpVtbl->GetNewStory(This,story);\n}\nstatic FORCEINLINE HRESULT ITextDocument2_GetStory(ITextDocument2* This,LONG index,ITextStory **story) {\n    return This->lpVtbl->GetStory(This,index,story);\n}\n#endif\n#endif\n\n#endif\n\n\n#endif  /* __ITextDocument2_INTERFACE_DEFINED__ */\n\n#ifndef __ITextFont_FWD_DEFINED__\n#define __ITextFont_FWD_DEFINED__\ntypedef interface ITextFont ITextFont;\n#ifdef __cplusplus\ninterface ITextFont;\n#endif /* __cplusplus */\n#endif\n\n#ifndef __ITextPara_FWD_DEFINED__\n#define __ITextPara_FWD_DEFINED__\ntypedef interface ITextPara ITextPara;\n#ifdef __cplusplus\ninterface ITextPara;\n#endif /* __cplusplus */\n#endif\n\n/*****************************************************************************\n * ITextRange interface\n */\n#ifndef __ITextRange_INTERFACE_DEFINED__\n#define __ITextRange_INTERFACE_DEFINED__\n\nDEFINE_GUID(IID_ITextRange, 0x8cc497c2, 0xa1df, 0x11ce, 0x80,0x98, 0x00,0xaa,0x00,0x47,0xbe,0x5d);\n#if defined(__cplusplus) && !defined(CINTERFACE)\nMIDL_INTERFACE(\"8cc497c2-a1df-11ce-8098-00aa0047be5d\")\nITextRange : public IDispatch\n{\n    virtual HRESULT STDMETHODCALLTYPE GetText(\n        BSTR *pbstr) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetText(\n        BSTR bstr) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetChar(\n        LONG *pch) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetChar(\n        LONG ch) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetDuplicate(\n        ITextRange **ppRange) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetFormattedText(\n        ITextRange **ppRange) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetFormattedText(\n        ITextRange *pRange) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetStart(\n        LONG *pcpFirst) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetStart(\n        LONG cpFirst) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetEnd(\n        LONG *pcpLim) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetEnd(\n        LONG cpLim) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetFont(\n        ITextFont **pFont) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetFont(\n        ITextFont *pFont) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetPara(\n        ITextPara **ppPara) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetPara(\n        ITextPara *pPara) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetStoryLength(\n        LONG *pcch) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetStoryType(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Collapse(\n        LONG bStart) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Expand(\n        LONG Unit,\n        LONG *pDelta) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetIndex(\n        LONG Unit,\n        LONG *pIndex) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetIndex(\n        LONG Unit,\n        LONG Index,\n        LONG Extend) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetRange(\n        LONG anchor,\n        LONG active) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE InRange(\n        ITextRange *pRange,\n        LONG *pb) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE InStory(\n        ITextRange *pRange,\n        LONG *pb) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE IsEqual(\n        ITextRange *pRange,\n        LONG *pb) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Select(\n        ) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE StartOf(\n        LONG Unit,\n        LONG Extend,\n        LONG *pDelta) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE EndOf(\n        LONG Unit,\n        LONG Extend,\n        LONG *pDelta) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Move(\n        LONG Unit,\n        LONG Count,\n        LONG *pDelta) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE MoveStart(\n        LONG Unit,\n        LONG Count,\n        LONG *pDelta) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE MoveEnd(\n        LONG Unit,\n        LONG Count,\n        LONG *pDelta) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE MoveWhile(\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE MoveStartWhile(\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE MoveEndWhile(\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE MoveUntil(\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE MoveStartUntil(\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE MoveEndUntil(\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE FindText(\n        BSTR bstr,\n        LONG cch,\n        LONG Flags,\n        LONG *pLength) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE FindTextStart(\n        BSTR bstr,\n        LONG cch,\n        LONG Flags,\n        LONG *pLength) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE FindTextEnd(\n        BSTR bstr,\n        LONG cch,\n        LONG Flags,\n        LONG *pLength) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Delete(\n        LONG Unit,\n        LONG Count,\n        LONG *pDelta) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Cut(\n        VARIANT *pVar) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Copy(\n        VARIANT *pVar) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Paste(\n        VARIANT *pVar,\n        LONG Format) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE CanPaste(\n        VARIANT *pVar,\n        LONG Format,\n        LONG *pb) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE CanEdit(\n        LONG *pb) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE ChangeCase(\n        LONG Type) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetPoint(\n        LONG Type,\n        LONG *cx,\n        LONG *cy) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetPoint(\n        LONG x,\n        LONG y,\n        LONG Type,\n        LONG Extend) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE ScrollIntoView(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetEmbeddedObject(\n        IUnknown **ppv) = 0;\n\n};\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(ITextRange, 0x8cc497c2, 0xa1df, 0x11ce, 0x80,0x98, 0x00,0xaa,0x00,0x47,0xbe,0x5d)\n#endif\n#else\ntypedef struct ITextRangeVtbl {\n    BEGIN_INTERFACE\n\n    /*** IUnknown methods ***/\n    HRESULT (STDMETHODCALLTYPE *QueryInterface)(\n        ITextRange *This,\n        REFIID riid,\n        void **ppvObject);\n\n    ULONG (STDMETHODCALLTYPE *AddRef)(\n        ITextRange *This);\n\n    ULONG (STDMETHODCALLTYPE *Release)(\n        ITextRange *This);\n\n    /*** IDispatch methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(\n        ITextRange *This,\n        UINT *pctinfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(\n        ITextRange *This,\n        UINT iTInfo,\n        LCID lcid,\n        ITypeInfo **ppTInfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(\n        ITextRange *This,\n        REFIID riid,\n        LPOLESTR *rgszNames,\n        UINT cNames,\n        LCID lcid,\n        DISPID *rgDispId);\n\n    HRESULT (STDMETHODCALLTYPE *Invoke)(\n        ITextRange *This,\n        DISPID dispIdMember,\n        REFIID riid,\n        LCID lcid,\n        WORD wFlags,\n        DISPPARAMS *pDispParams,\n        VARIANT *pVarResult,\n        EXCEPINFO *pExcepInfo,\n        UINT *puArgErr);\n\n    /*** ITextRange methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetText)(\n        ITextRange *This,\n        BSTR *pbstr);\n\n    HRESULT (STDMETHODCALLTYPE *SetText)(\n        ITextRange *This,\n        BSTR bstr);\n\n    HRESULT (STDMETHODCALLTYPE *GetChar)(\n        ITextRange *This,\n        LONG *pch);\n\n    HRESULT (STDMETHODCALLTYPE *SetChar)(\n        ITextRange *This,\n        LONG ch);\n\n    HRESULT (STDMETHODCALLTYPE *GetDuplicate)(\n        ITextRange *This,\n        ITextRange **ppRange);\n\n    HRESULT (STDMETHODCALLTYPE *GetFormattedText)(\n        ITextRange *This,\n        ITextRange **ppRange);\n\n    HRESULT (STDMETHODCALLTYPE *SetFormattedText)(\n        ITextRange *This,\n        ITextRange *pRange);\n\n    HRESULT (STDMETHODCALLTYPE *GetStart)(\n        ITextRange *This,\n        LONG *pcpFirst);\n\n    HRESULT (STDMETHODCALLTYPE *SetStart)(\n        ITextRange *This,\n        LONG cpFirst);\n\n    HRESULT (STDMETHODCALLTYPE *GetEnd)(\n        ITextRange *This,\n        LONG *pcpLim);\n\n    HRESULT (STDMETHODCALLTYPE *SetEnd)(\n        ITextRange *This,\n        LONG cpLim);\n\n    HRESULT (STDMETHODCALLTYPE *GetFont)(\n        ITextRange *This,\n        ITextFont **pFont);\n\n    HRESULT (STDMETHODCALLTYPE *SetFont)(\n        ITextRange *This,\n        ITextFont *pFont);\n\n    HRESULT (STDMETHODCALLTYPE *GetPara)(\n        ITextRange *This,\n        ITextPara **ppPara);\n\n    HRESULT (STDMETHODCALLTYPE *SetPara)(\n        ITextRange *This,\n        ITextPara *pPara);\n\n    HRESULT (STDMETHODCALLTYPE *GetStoryLength)(\n        ITextRange *This,\n        LONG *pcch);\n\n    HRESULT (STDMETHODCALLTYPE *GetStoryType)(\n        ITextRange *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *Collapse)(\n        ITextRange *This,\n        LONG bStart);\n\n    HRESULT (STDMETHODCALLTYPE *Expand)(\n        ITextRange *This,\n        LONG Unit,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *GetIndex)(\n        ITextRange *This,\n        LONG Unit,\n        LONG *pIndex);\n\n    HRESULT (STDMETHODCALLTYPE *SetIndex)(\n        ITextRange *This,\n        LONG Unit,\n        LONG Index,\n        LONG Extend);\n\n    HRESULT (STDMETHODCALLTYPE *SetRange)(\n        ITextRange *This,\n        LONG anchor,\n        LONG active);\n\n    HRESULT (STDMETHODCALLTYPE *InRange)(\n        ITextRange *This,\n        ITextRange *pRange,\n        LONG *pb);\n\n    HRESULT (STDMETHODCALLTYPE *InStory)(\n        ITextRange *This,\n        ITextRange *pRange,\n        LONG *pb);\n\n    HRESULT (STDMETHODCALLTYPE *IsEqual)(\n        ITextRange *This,\n        ITextRange *pRange,\n        LONG *pb);\n\n    HRESULT (STDMETHODCALLTYPE *Select)(\n        ITextRange *This);\n\n    HRESULT (STDMETHODCALLTYPE *StartOf)(\n        ITextRange *This,\n        LONG Unit,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *EndOf)(\n        ITextRange *This,\n        LONG Unit,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *Move)(\n        ITextRange *This,\n        LONG Unit,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveStart)(\n        ITextRange *This,\n        LONG Unit,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveEnd)(\n        ITextRange *This,\n        LONG Unit,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveWhile)(\n        ITextRange *This,\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveStartWhile)(\n        ITextRange *This,\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveEndWhile)(\n        ITextRange *This,\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveUntil)(\n        ITextRange *This,\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveStartUntil)(\n        ITextRange *This,\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveEndUntil)(\n        ITextRange *This,\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *FindText)(\n        ITextRange *This,\n        BSTR bstr,\n        LONG cch,\n        LONG Flags,\n        LONG *pLength);\n\n    HRESULT (STDMETHODCALLTYPE *FindTextStart)(\n        ITextRange *This,\n        BSTR bstr,\n        LONG cch,\n        LONG Flags,\n        LONG *pLength);\n\n    HRESULT (STDMETHODCALLTYPE *FindTextEnd)(\n        ITextRange *This,\n        BSTR bstr,\n        LONG cch,\n        LONG Flags,\n        LONG *pLength);\n\n    HRESULT (STDMETHODCALLTYPE *Delete)(\n        ITextRange *This,\n        LONG Unit,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *Cut)(\n        ITextRange *This,\n        VARIANT *pVar);\n\n    HRESULT (STDMETHODCALLTYPE *Copy)(\n        ITextRange *This,\n        VARIANT *pVar);\n\n    HRESULT (STDMETHODCALLTYPE *Paste)(\n        ITextRange *This,\n        VARIANT *pVar,\n        LONG Format);\n\n    HRESULT (STDMETHODCALLTYPE *CanPaste)(\n        ITextRange *This,\n        VARIANT *pVar,\n        LONG Format,\n        LONG *pb);\n\n    HRESULT (STDMETHODCALLTYPE *CanEdit)(\n        ITextRange *This,\n        LONG *pb);\n\n    HRESULT (STDMETHODCALLTYPE *ChangeCase)(\n        ITextRange *This,\n        LONG Type);\n\n    HRESULT (STDMETHODCALLTYPE *GetPoint)(\n        ITextRange *This,\n        LONG Type,\n        LONG *cx,\n        LONG *cy);\n\n    HRESULT (STDMETHODCALLTYPE *SetPoint)(\n        ITextRange *This,\n        LONG x,\n        LONG y,\n        LONG Type,\n        LONG Extend);\n\n    HRESULT (STDMETHODCALLTYPE *ScrollIntoView)(\n        ITextRange *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetEmbeddedObject)(\n        ITextRange *This,\n        IUnknown **ppv);\n\n    END_INTERFACE\n} ITextRangeVtbl;\n\ninterface ITextRange {\n    CONST_VTBL ITextRangeVtbl* lpVtbl;\n};\n\n#ifdef COBJMACROS\n#ifndef WIDL_C_INLINE_WRAPPERS\n/*** IUnknown methods ***/\n#define ITextRange_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)\n#define ITextRange_AddRef(This) (This)->lpVtbl->AddRef(This)\n#define ITextRange_Release(This) (This)->lpVtbl->Release(This)\n/*** IDispatch methods ***/\n#define ITextRange_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)\n#define ITextRange_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)\n#define ITextRange_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\n#define ITextRange_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\n/*** ITextRange methods ***/\n#define ITextRange_GetText(This,pbstr) (This)->lpVtbl->GetText(This,pbstr)\n#define ITextRange_SetText(This,bstr) (This)->lpVtbl->SetText(This,bstr)\n#define ITextRange_GetChar(This,pch) (This)->lpVtbl->GetChar(This,pch)\n#define ITextRange_SetChar(This,ch) (This)->lpVtbl->SetChar(This,ch)\n#define ITextRange_GetDuplicate(This,ppRange) (This)->lpVtbl->GetDuplicate(This,ppRange)\n#define ITextRange_GetFormattedText(This,ppRange) (This)->lpVtbl->GetFormattedText(This,ppRange)\n#define ITextRange_SetFormattedText(This,pRange) (This)->lpVtbl->SetFormattedText(This,pRange)\n#define ITextRange_GetStart(This,pcpFirst) (This)->lpVtbl->GetStart(This,pcpFirst)\n#define ITextRange_SetStart(This,cpFirst) (This)->lpVtbl->SetStart(This,cpFirst)\n#define ITextRange_GetEnd(This,pcpLim) (This)->lpVtbl->GetEnd(This,pcpLim)\n#define ITextRange_SetEnd(This,cpLim) (This)->lpVtbl->SetEnd(This,cpLim)\n#define ITextRange_GetFont(This,pFont) (This)->lpVtbl->GetFont(This,pFont)\n#define ITextRange_SetFont(This,pFont) (This)->lpVtbl->SetFont(This,pFont)\n#define ITextRange_GetPara(This,ppPara) (This)->lpVtbl->GetPara(This,ppPara)\n#define ITextRange_SetPara(This,pPara) (This)->lpVtbl->SetPara(This,pPara)\n#define ITextRange_GetStoryLength(This,pcch) (This)->lpVtbl->GetStoryLength(This,pcch)\n#define ITextRange_GetStoryType(This,pValue) (This)->lpVtbl->GetStoryType(This,pValue)\n#define ITextRange_Collapse(This,bStart) (This)->lpVtbl->Collapse(This,bStart)\n#define ITextRange_Expand(This,Unit,pDelta) (This)->lpVtbl->Expand(This,Unit,pDelta)\n#define ITextRange_GetIndex(This,Unit,pIndex) (This)->lpVtbl->GetIndex(This,Unit,pIndex)\n#define ITextRange_SetIndex(This,Unit,Index,Extend) (This)->lpVtbl->SetIndex(This,Unit,Index,Extend)\n#define ITextRange_SetRange(This,anchor,active) (This)->lpVtbl->SetRange(This,anchor,active)\n#define ITextRange_InRange(This,pRange,pb) (This)->lpVtbl->InRange(This,pRange,pb)\n#define ITextRange_InStory(This,pRange,pb) (This)->lpVtbl->InStory(This,pRange,pb)\n#define ITextRange_IsEqual(This,pRange,pb) (This)->lpVtbl->IsEqual(This,pRange,pb)\n#define ITextRange_Select(This) (This)->lpVtbl->Select(This)\n#define ITextRange_StartOf(This,Unit,Extend,pDelta) (This)->lpVtbl->StartOf(This,Unit,Extend,pDelta)\n#define ITextRange_EndOf(This,Unit,Extend,pDelta) (This)->lpVtbl->EndOf(This,Unit,Extend,pDelta)\n#define ITextRange_Move(This,Unit,Count,pDelta) (This)->lpVtbl->Move(This,Unit,Count,pDelta)\n#define ITextRange_MoveStart(This,Unit,Count,pDelta) (This)->lpVtbl->MoveStart(This,Unit,Count,pDelta)\n#define ITextRange_MoveEnd(This,Unit,Count,pDelta) (This)->lpVtbl->MoveEnd(This,Unit,Count,pDelta)\n#define ITextRange_MoveWhile(This,Cset,Count,pDelta) (This)->lpVtbl->MoveWhile(This,Cset,Count,pDelta)\n#define ITextRange_MoveStartWhile(This,Cset,Count,pDelta) (This)->lpVtbl->MoveStartWhile(This,Cset,Count,pDelta)\n#define ITextRange_MoveEndWhile(This,Cset,Count,pDelta) (This)->lpVtbl->MoveEndWhile(This,Cset,Count,pDelta)\n#define ITextRange_MoveUntil(This,Cset,Count,pDelta) (This)->lpVtbl->MoveUntil(This,Cset,Count,pDelta)\n#define ITextRange_MoveStartUntil(This,Cset,Count,pDelta) (This)->lpVtbl->MoveStartUntil(This,Cset,Count,pDelta)\n#define ITextRange_MoveEndUntil(This,Cset,Count,pDelta) (This)->lpVtbl->MoveEndUntil(This,Cset,Count,pDelta)\n#define ITextRange_FindText(This,bstr,cch,Flags,pLength) (This)->lpVtbl->FindText(This,bstr,cch,Flags,pLength)\n#define ITextRange_FindTextStart(This,bstr,cch,Flags,pLength) (This)->lpVtbl->FindTextStart(This,bstr,cch,Flags,pLength)\n#define ITextRange_FindTextEnd(This,bstr,cch,Flags,pLength) (This)->lpVtbl->FindTextEnd(This,bstr,cch,Flags,pLength)\n#define ITextRange_Delete(This,Unit,Count,pDelta) (This)->lpVtbl->Delete(This,Unit,Count,pDelta)\n#define ITextRange_Cut(This,pVar) (This)->lpVtbl->Cut(This,pVar)\n#define ITextRange_Copy(This,pVar) (This)->lpVtbl->Copy(This,pVar)\n#define ITextRange_Paste(This,pVar,Format) (This)->lpVtbl->Paste(This,pVar,Format)\n#define ITextRange_CanPaste(This,pVar,Format,pb) (This)->lpVtbl->CanPaste(This,pVar,Format,pb)\n#define ITextRange_CanEdit(This,pb) (This)->lpVtbl->CanEdit(This,pb)\n#define ITextRange_ChangeCase(This,Type) (This)->lpVtbl->ChangeCase(This,Type)\n#define ITextRange_GetPoint(This,Type,cx,cy) (This)->lpVtbl->GetPoint(This,Type,cx,cy)\n#define ITextRange_SetPoint(This,x,y,Type,Extend) (This)->lpVtbl->SetPoint(This,x,y,Type,Extend)\n#define ITextRange_ScrollIntoView(This,Value) (This)->lpVtbl->ScrollIntoView(This,Value)\n#define ITextRange_GetEmbeddedObject(This,ppv) (This)->lpVtbl->GetEmbeddedObject(This,ppv)\n#else\n/*** IUnknown methods ***/\nstatic FORCEINLINE HRESULT ITextRange_QueryInterface(ITextRange* This,REFIID riid,void **ppvObject) {\n    return This->lpVtbl->QueryInterface(This,riid,ppvObject);\n}\nstatic FORCEINLINE ULONG ITextRange_AddRef(ITextRange* This) {\n    return This->lpVtbl->AddRef(This);\n}\nstatic FORCEINLINE ULONG ITextRange_Release(ITextRange* This) {\n    return This->lpVtbl->Release(This);\n}\n/*** IDispatch methods ***/\nstatic FORCEINLINE HRESULT ITextRange_GetTypeInfoCount(ITextRange* This,UINT *pctinfo) {\n    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);\n}\nstatic FORCEINLINE HRESULT ITextRange_GetTypeInfo(ITextRange* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {\n    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);\n}\nstatic FORCEINLINE HRESULT ITextRange_GetIDsOfNames(ITextRange* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {\n    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);\n}\nstatic FORCEINLINE HRESULT ITextRange_Invoke(ITextRange* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {\n    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);\n}\n/*** ITextRange methods ***/\nstatic FORCEINLINE HRESULT ITextRange_GetText(ITextRange* This,BSTR *pbstr) {\n    return This->lpVtbl->GetText(This,pbstr);\n}\nstatic FORCEINLINE HRESULT ITextRange_SetText(ITextRange* This,BSTR bstr) {\n    return This->lpVtbl->SetText(This,bstr);\n}\nstatic FORCEINLINE HRESULT ITextRange_GetChar(ITextRange* This,LONG *pch) {\n    return This->lpVtbl->GetChar(This,pch);\n}\nstatic FORCEINLINE HRESULT ITextRange_SetChar(ITextRange* This,LONG ch) {\n    return This->lpVtbl->SetChar(This,ch);\n}\nstatic FORCEINLINE HRESULT ITextRange_GetDuplicate(ITextRange* This,ITextRange **ppRange) {\n    return This->lpVtbl->GetDuplicate(This,ppRange);\n}\nstatic FORCEINLINE HRESULT ITextRange_GetFormattedText(ITextRange* This,ITextRange **ppRange) {\n    return This->lpVtbl->GetFormattedText(This,ppRange);\n}\nstatic FORCEINLINE HRESULT ITextRange_SetFormattedText(ITextRange* This,ITextRange *pRange) {\n    return This->lpVtbl->SetFormattedText(This,pRange);\n}\nstatic FORCEINLINE HRESULT ITextRange_GetStart(ITextRange* This,LONG *pcpFirst) {\n    return This->lpVtbl->GetStart(This,pcpFirst);\n}\nstatic FORCEINLINE HRESULT ITextRange_SetStart(ITextRange* This,LONG cpFirst) {\n    return This->lpVtbl->SetStart(This,cpFirst);\n}\nstatic FORCEINLINE HRESULT ITextRange_GetEnd(ITextRange* This,LONG *pcpLim) {\n    return This->lpVtbl->GetEnd(This,pcpLim);\n}\nstatic FORCEINLINE HRESULT ITextRange_SetEnd(ITextRange* This,LONG cpLim) {\n    return This->lpVtbl->SetEnd(This,cpLim);\n}\nstatic FORCEINLINE HRESULT ITextRange_GetFont(ITextRange* This,ITextFont **pFont) {\n    return This->lpVtbl->GetFont(This,pFont);\n}\nstatic FORCEINLINE HRESULT ITextRange_SetFont(ITextRange* This,ITextFont *pFont) {\n    return This->lpVtbl->SetFont(This,pFont);\n}\nstatic FORCEINLINE HRESULT ITextRange_GetPara(ITextRange* This,ITextPara **ppPara) {\n    return This->lpVtbl->GetPara(This,ppPara);\n}\nstatic FORCEINLINE HRESULT ITextRange_SetPara(ITextRange* This,ITextPara *pPara) {\n    return This->lpVtbl->SetPara(This,pPara);\n}\nstatic FORCEINLINE HRESULT ITextRange_GetStoryLength(ITextRange* This,LONG *pcch) {\n    return This->lpVtbl->GetStoryLength(This,pcch);\n}\nstatic FORCEINLINE HRESULT ITextRange_GetStoryType(ITextRange* This,LONG *pValue) {\n    return This->lpVtbl->GetStoryType(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextRange_Collapse(ITextRange* This,LONG bStart) {\n    return This->lpVtbl->Collapse(This,bStart);\n}\nstatic FORCEINLINE HRESULT ITextRange_Expand(ITextRange* This,LONG Unit,LONG *pDelta) {\n    return This->lpVtbl->Expand(This,Unit,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange_GetIndex(ITextRange* This,LONG Unit,LONG *pIndex) {\n    return This->lpVtbl->GetIndex(This,Unit,pIndex);\n}\nstatic FORCEINLINE HRESULT ITextRange_SetIndex(ITextRange* This,LONG Unit,LONG Index,LONG Extend) {\n    return This->lpVtbl->SetIndex(This,Unit,Index,Extend);\n}\nstatic FORCEINLINE HRESULT ITextRange_SetRange(ITextRange* This,LONG anchor,LONG active) {\n    return This->lpVtbl->SetRange(This,anchor,active);\n}\nstatic FORCEINLINE HRESULT ITextRange_InRange(ITextRange* This,ITextRange *pRange,LONG *pb) {\n    return This->lpVtbl->InRange(This,pRange,pb);\n}\nstatic FORCEINLINE HRESULT ITextRange_InStory(ITextRange* This,ITextRange *pRange,LONG *pb) {\n    return This->lpVtbl->InStory(This,pRange,pb);\n}\nstatic FORCEINLINE HRESULT ITextRange_IsEqual(ITextRange* This,ITextRange *pRange,LONG *pb) {\n    return This->lpVtbl->IsEqual(This,pRange,pb);\n}\nstatic FORCEINLINE HRESULT ITextRange_Select(ITextRange* This) {\n    return This->lpVtbl->Select(This);\n}\nstatic FORCEINLINE HRESULT ITextRange_StartOf(ITextRange* This,LONG Unit,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->StartOf(This,Unit,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange_EndOf(ITextRange* This,LONG Unit,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->EndOf(This,Unit,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange_Move(ITextRange* This,LONG Unit,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->Move(This,Unit,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange_MoveStart(ITextRange* This,LONG Unit,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveStart(This,Unit,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange_MoveEnd(ITextRange* This,LONG Unit,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveEnd(This,Unit,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange_MoveWhile(ITextRange* This,VARIANT *Cset,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveWhile(This,Cset,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange_MoveStartWhile(ITextRange* This,VARIANT *Cset,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveStartWhile(This,Cset,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange_MoveEndWhile(ITextRange* This,VARIANT *Cset,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveEndWhile(This,Cset,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange_MoveUntil(ITextRange* This,VARIANT *Cset,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveUntil(This,Cset,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange_MoveStartUntil(ITextRange* This,VARIANT *Cset,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveStartUntil(This,Cset,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange_MoveEndUntil(ITextRange* This,VARIANT *Cset,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveEndUntil(This,Cset,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange_FindText(ITextRange* This,BSTR bstr,LONG cch,LONG Flags,LONG *pLength) {\n    return This->lpVtbl->FindText(This,bstr,cch,Flags,pLength);\n}\nstatic FORCEINLINE HRESULT ITextRange_FindTextStart(ITextRange* This,BSTR bstr,LONG cch,LONG Flags,LONG *pLength) {\n    return This->lpVtbl->FindTextStart(This,bstr,cch,Flags,pLength);\n}\nstatic FORCEINLINE HRESULT ITextRange_FindTextEnd(ITextRange* This,BSTR bstr,LONG cch,LONG Flags,LONG *pLength) {\n    return This->lpVtbl->FindTextEnd(This,bstr,cch,Flags,pLength);\n}\nstatic FORCEINLINE HRESULT ITextRange_Delete(ITextRange* This,LONG Unit,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->Delete(This,Unit,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextRange_Cut(ITextRange* This,VARIANT *pVar) {\n    return This->lpVtbl->Cut(This,pVar);\n}\nstatic FORCEINLINE HRESULT ITextRange_Copy(ITextRange* This,VARIANT *pVar) {\n    return This->lpVtbl->Copy(This,pVar);\n}\nstatic FORCEINLINE HRESULT ITextRange_Paste(ITextRange* This,VARIANT *pVar,LONG Format) {\n    return This->lpVtbl->Paste(This,pVar,Format);\n}\nstatic FORCEINLINE HRESULT ITextRange_CanPaste(ITextRange* This,VARIANT *pVar,LONG Format,LONG *pb) {\n    return This->lpVtbl->CanPaste(This,pVar,Format,pb);\n}\nstatic FORCEINLINE HRESULT ITextRange_CanEdit(ITextRange* This,LONG *pb) {\n    return This->lpVtbl->CanEdit(This,pb);\n}\nstatic FORCEINLINE HRESULT ITextRange_ChangeCase(ITextRange* This,LONG Type) {\n    return This->lpVtbl->ChangeCase(This,Type);\n}\nstatic FORCEINLINE HRESULT ITextRange_GetPoint(ITextRange* This,LONG Type,LONG *cx,LONG *cy) {\n    return This->lpVtbl->GetPoint(This,Type,cx,cy);\n}\nstatic FORCEINLINE HRESULT ITextRange_SetPoint(ITextRange* This,LONG x,LONG y,LONG Type,LONG Extend) {\n    return This->lpVtbl->SetPoint(This,x,y,Type,Extend);\n}\nstatic FORCEINLINE HRESULT ITextRange_ScrollIntoView(ITextRange* This,LONG Value) {\n    return This->lpVtbl->ScrollIntoView(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextRange_GetEmbeddedObject(ITextRange* This,IUnknown **ppv) {\n    return This->lpVtbl->GetEmbeddedObject(This,ppv);\n}\n#endif\n#endif\n\n#endif\n\n\n#endif  /* __ITextRange_INTERFACE_DEFINED__ */\n\n/*****************************************************************************\n * ITextSelection interface\n */\n#ifndef __ITextSelection_INTERFACE_DEFINED__\n#define __ITextSelection_INTERFACE_DEFINED__\n\nDEFINE_GUID(IID_ITextSelection, 0x8cc497c1, 0xa1df, 0x11ce, 0x80,0x98, 0x00,0xaa,0x00,0x47,0xbe,0x5d);\n#if defined(__cplusplus) && !defined(CINTERFACE)\nMIDL_INTERFACE(\"8cc497c1-a1df-11ce-8098-00aa0047be5d\")\nITextSelection : public ITextRange\n{\n    virtual HRESULT STDMETHODCALLTYPE GetFlags(\n        LONG *pFlags) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetFlags(\n        LONG Flags) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetType(\n        LONG *pType) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE MoveLeft(\n        LONG Unit,\n        LONG Count,\n        LONG Extend,\n        LONG *pDelta) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE MoveRight(\n        LONG Unit,\n        LONG Count,\n        LONG Extend,\n        LONG *pDelta) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE MoveUp(\n        LONG Unit,\n        LONG Count,\n        LONG Extend,\n        LONG *pDelta) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE MoveDown(\n        LONG Unit,\n        LONG Count,\n        LONG Extend,\n        LONG *pDelta) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE HomeKey(\n        LONG Unit,\n        LONG Extend,\n        LONG *pDelta) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE EndKey(\n        LONG Unit,\n        LONG Extend,\n        LONG *pDelta) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE TypeText(\n        BSTR bstr) = 0;\n\n};\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(ITextSelection, 0x8cc497c1, 0xa1df, 0x11ce, 0x80,0x98, 0x00,0xaa,0x00,0x47,0xbe,0x5d)\n#endif\n#else\ntypedef struct ITextSelectionVtbl {\n    BEGIN_INTERFACE\n\n    /*** IUnknown methods ***/\n    HRESULT (STDMETHODCALLTYPE *QueryInterface)(\n        ITextSelection *This,\n        REFIID riid,\n        void **ppvObject);\n\n    ULONG (STDMETHODCALLTYPE *AddRef)(\n        ITextSelection *This);\n\n    ULONG (STDMETHODCALLTYPE *Release)(\n        ITextSelection *This);\n\n    /*** IDispatch methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(\n        ITextSelection *This,\n        UINT *pctinfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(\n        ITextSelection *This,\n        UINT iTInfo,\n        LCID lcid,\n        ITypeInfo **ppTInfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(\n        ITextSelection *This,\n        REFIID riid,\n        LPOLESTR *rgszNames,\n        UINT cNames,\n        LCID lcid,\n        DISPID *rgDispId);\n\n    HRESULT (STDMETHODCALLTYPE *Invoke)(\n        ITextSelection *This,\n        DISPID dispIdMember,\n        REFIID riid,\n        LCID lcid,\n        WORD wFlags,\n        DISPPARAMS *pDispParams,\n        VARIANT *pVarResult,\n        EXCEPINFO *pExcepInfo,\n        UINT *puArgErr);\n\n    /*** ITextRange methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetText)(\n        ITextSelection *This,\n        BSTR *pbstr);\n\n    HRESULT (STDMETHODCALLTYPE *SetText)(\n        ITextSelection *This,\n        BSTR bstr);\n\n    HRESULT (STDMETHODCALLTYPE *GetChar)(\n        ITextSelection *This,\n        LONG *pch);\n\n    HRESULT (STDMETHODCALLTYPE *SetChar)(\n        ITextSelection *This,\n        LONG ch);\n\n    HRESULT (STDMETHODCALLTYPE *GetDuplicate)(\n        ITextSelection *This,\n        ITextRange **ppRange);\n\n    HRESULT (STDMETHODCALLTYPE *GetFormattedText)(\n        ITextSelection *This,\n        ITextRange **ppRange);\n\n    HRESULT (STDMETHODCALLTYPE *SetFormattedText)(\n        ITextSelection *This,\n        ITextRange *pRange);\n\n    HRESULT (STDMETHODCALLTYPE *GetStart)(\n        ITextSelection *This,\n        LONG *pcpFirst);\n\n    HRESULT (STDMETHODCALLTYPE *SetStart)(\n        ITextSelection *This,\n        LONG cpFirst);\n\n    HRESULT (STDMETHODCALLTYPE *GetEnd)(\n        ITextSelection *This,\n        LONG *pcpLim);\n\n    HRESULT (STDMETHODCALLTYPE *SetEnd)(\n        ITextSelection *This,\n        LONG cpLim);\n\n    HRESULT (STDMETHODCALLTYPE *GetFont)(\n        ITextSelection *This,\n        ITextFont **pFont);\n\n    HRESULT (STDMETHODCALLTYPE *SetFont)(\n        ITextSelection *This,\n        ITextFont *pFont);\n\n    HRESULT (STDMETHODCALLTYPE *GetPara)(\n        ITextSelection *This,\n        ITextPara **ppPara);\n\n    HRESULT (STDMETHODCALLTYPE *SetPara)(\n        ITextSelection *This,\n        ITextPara *pPara);\n\n    HRESULT (STDMETHODCALLTYPE *GetStoryLength)(\n        ITextSelection *This,\n        LONG *pcch);\n\n    HRESULT (STDMETHODCALLTYPE *GetStoryType)(\n        ITextSelection *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *Collapse)(\n        ITextSelection *This,\n        LONG bStart);\n\n    HRESULT (STDMETHODCALLTYPE *Expand)(\n        ITextSelection *This,\n        LONG Unit,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *GetIndex)(\n        ITextSelection *This,\n        LONG Unit,\n        LONG *pIndex);\n\n    HRESULT (STDMETHODCALLTYPE *SetIndex)(\n        ITextSelection *This,\n        LONG Unit,\n        LONG Index,\n        LONG Extend);\n\n    HRESULT (STDMETHODCALLTYPE *SetRange)(\n        ITextSelection *This,\n        LONG anchor,\n        LONG active);\n\n    HRESULT (STDMETHODCALLTYPE *InRange)(\n        ITextSelection *This,\n        ITextRange *pRange,\n        LONG *pb);\n\n    HRESULT (STDMETHODCALLTYPE *InStory)(\n        ITextSelection *This,\n        ITextRange *pRange,\n        LONG *pb);\n\n    HRESULT (STDMETHODCALLTYPE *IsEqual)(\n        ITextSelection *This,\n        ITextRange *pRange,\n        LONG *pb);\n\n    HRESULT (STDMETHODCALLTYPE *Select)(\n        ITextSelection *This);\n\n    HRESULT (STDMETHODCALLTYPE *StartOf)(\n        ITextSelection *This,\n        LONG Unit,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *EndOf)(\n        ITextSelection *This,\n        LONG Unit,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *Move)(\n        ITextSelection *This,\n        LONG Unit,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveStart)(\n        ITextSelection *This,\n        LONG Unit,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveEnd)(\n        ITextSelection *This,\n        LONG Unit,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveWhile)(\n        ITextSelection *This,\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveStartWhile)(\n        ITextSelection *This,\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveEndWhile)(\n        ITextSelection *This,\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveUntil)(\n        ITextSelection *This,\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveStartUntil)(\n        ITextSelection *This,\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveEndUntil)(\n        ITextSelection *This,\n        VARIANT *Cset,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *FindText)(\n        ITextSelection *This,\n        BSTR bstr,\n        LONG cch,\n        LONG Flags,\n        LONG *pLength);\n\n    HRESULT (STDMETHODCALLTYPE *FindTextStart)(\n        ITextSelection *This,\n        BSTR bstr,\n        LONG cch,\n        LONG Flags,\n        LONG *pLength);\n\n    HRESULT (STDMETHODCALLTYPE *FindTextEnd)(\n        ITextSelection *This,\n        BSTR bstr,\n        LONG cch,\n        LONG Flags,\n        LONG *pLength);\n\n    HRESULT (STDMETHODCALLTYPE *Delete)(\n        ITextSelection *This,\n        LONG Unit,\n        LONG Count,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *Cut)(\n        ITextSelection *This,\n        VARIANT *pVar);\n\n    HRESULT (STDMETHODCALLTYPE *Copy)(\n        ITextSelection *This,\n        VARIANT *pVar);\n\n    HRESULT (STDMETHODCALLTYPE *Paste)(\n        ITextSelection *This,\n        VARIANT *pVar,\n        LONG Format);\n\n    HRESULT (STDMETHODCALLTYPE *CanPaste)(\n        ITextSelection *This,\n        VARIANT *pVar,\n        LONG Format,\n        LONG *pb);\n\n    HRESULT (STDMETHODCALLTYPE *CanEdit)(\n        ITextSelection *This,\n        LONG *pb);\n\n    HRESULT (STDMETHODCALLTYPE *ChangeCase)(\n        ITextSelection *This,\n        LONG Type);\n\n    HRESULT (STDMETHODCALLTYPE *GetPoint)(\n        ITextSelection *This,\n        LONG Type,\n        LONG *cx,\n        LONG *cy);\n\n    HRESULT (STDMETHODCALLTYPE *SetPoint)(\n        ITextSelection *This,\n        LONG x,\n        LONG y,\n        LONG Type,\n        LONG Extend);\n\n    HRESULT (STDMETHODCALLTYPE *ScrollIntoView)(\n        ITextSelection *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetEmbeddedObject)(\n        ITextSelection *This,\n        IUnknown **ppv);\n\n    /*** ITextSelection methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetFlags)(\n        ITextSelection *This,\n        LONG *pFlags);\n\n    HRESULT (STDMETHODCALLTYPE *SetFlags)(\n        ITextSelection *This,\n        LONG Flags);\n\n    HRESULT (STDMETHODCALLTYPE *GetType)(\n        ITextSelection *This,\n        LONG *pType);\n\n    HRESULT (STDMETHODCALLTYPE *MoveLeft)(\n        ITextSelection *This,\n        LONG Unit,\n        LONG Count,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveRight)(\n        ITextSelection *This,\n        LONG Unit,\n        LONG Count,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveUp)(\n        ITextSelection *This,\n        LONG Unit,\n        LONG Count,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *MoveDown)(\n        ITextSelection *This,\n        LONG Unit,\n        LONG Count,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *HomeKey)(\n        ITextSelection *This,\n        LONG Unit,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *EndKey)(\n        ITextSelection *This,\n        LONG Unit,\n        LONG Extend,\n        LONG *pDelta);\n\n    HRESULT (STDMETHODCALLTYPE *TypeText)(\n        ITextSelection *This,\n        BSTR bstr);\n\n    END_INTERFACE\n} ITextSelectionVtbl;\n\ninterface ITextSelection {\n    CONST_VTBL ITextSelectionVtbl* lpVtbl;\n};\n\n#ifdef COBJMACROS\n#ifndef WIDL_C_INLINE_WRAPPERS\n/*** IUnknown methods ***/\n#define ITextSelection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)\n#define ITextSelection_AddRef(This) (This)->lpVtbl->AddRef(This)\n#define ITextSelection_Release(This) (This)->lpVtbl->Release(This)\n/*** IDispatch methods ***/\n#define ITextSelection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)\n#define ITextSelection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)\n#define ITextSelection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\n#define ITextSelection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\n/*** ITextRange methods ***/\n#define ITextSelection_GetText(This,pbstr) (This)->lpVtbl->GetText(This,pbstr)\n#define ITextSelection_SetText(This,bstr) (This)->lpVtbl->SetText(This,bstr)\n#define ITextSelection_GetChar(This,pch) (This)->lpVtbl->GetChar(This,pch)\n#define ITextSelection_SetChar(This,ch) (This)->lpVtbl->SetChar(This,ch)\n#define ITextSelection_GetDuplicate(This,ppRange) (This)->lpVtbl->GetDuplicate(This,ppRange)\n#define ITextSelection_GetFormattedText(This,ppRange) (This)->lpVtbl->GetFormattedText(This,ppRange)\n#define ITextSelection_SetFormattedText(This,pRange) (This)->lpVtbl->SetFormattedText(This,pRange)\n#define ITextSelection_GetStart(This,pcpFirst) (This)->lpVtbl->GetStart(This,pcpFirst)\n#define ITextSelection_SetStart(This,cpFirst) (This)->lpVtbl->SetStart(This,cpFirst)\n#define ITextSelection_GetEnd(This,pcpLim) (This)->lpVtbl->GetEnd(This,pcpLim)\n#define ITextSelection_SetEnd(This,cpLim) (This)->lpVtbl->SetEnd(This,cpLim)\n#define ITextSelection_GetFont(This,pFont) (This)->lpVtbl->GetFont(This,pFont)\n#define ITextSelection_SetFont(This,pFont) (This)->lpVtbl->SetFont(This,pFont)\n#define ITextSelection_GetPara(This,ppPara) (This)->lpVtbl->GetPara(This,ppPara)\n#define ITextSelection_SetPara(This,pPara) (This)->lpVtbl->SetPara(This,pPara)\n#define ITextSelection_GetStoryLength(This,pcch) (This)->lpVtbl->GetStoryLength(This,pcch)\n#define ITextSelection_GetStoryType(This,pValue) (This)->lpVtbl->GetStoryType(This,pValue)\n#define ITextSelection_Collapse(This,bStart) (This)->lpVtbl->Collapse(This,bStart)\n#define ITextSelection_Expand(This,Unit,pDelta) (This)->lpVtbl->Expand(This,Unit,pDelta)\n#define ITextSelection_GetIndex(This,Unit,pIndex) (This)->lpVtbl->GetIndex(This,Unit,pIndex)\n#define ITextSelection_SetIndex(This,Unit,Index,Extend) (This)->lpVtbl->SetIndex(This,Unit,Index,Extend)\n#define ITextSelection_SetRange(This,anchor,active) (This)->lpVtbl->SetRange(This,anchor,active)\n#define ITextSelection_InRange(This,pRange,pb) (This)->lpVtbl->InRange(This,pRange,pb)\n#define ITextSelection_InStory(This,pRange,pb) (This)->lpVtbl->InStory(This,pRange,pb)\n#define ITextSelection_IsEqual(This,pRange,pb) (This)->lpVtbl->IsEqual(This,pRange,pb)\n#define ITextSelection_Select(This) (This)->lpVtbl->Select(This)\n#define ITextSelection_StartOf(This,Unit,Extend,pDelta) (This)->lpVtbl->StartOf(This,Unit,Extend,pDelta)\n#define ITextSelection_EndOf(This,Unit,Extend,pDelta) (This)->lpVtbl->EndOf(This,Unit,Extend,pDelta)\n#define ITextSelection_Move(This,Unit,Count,pDelta) (This)->lpVtbl->Move(This,Unit,Count,pDelta)\n#define ITextSelection_MoveStart(This,Unit,Count,pDelta) (This)->lpVtbl->MoveStart(This,Unit,Count,pDelta)\n#define ITextSelection_MoveEnd(This,Unit,Count,pDelta) (This)->lpVtbl->MoveEnd(This,Unit,Count,pDelta)\n#define ITextSelection_MoveWhile(This,Cset,Count,pDelta) (This)->lpVtbl->MoveWhile(This,Cset,Count,pDelta)\n#define ITextSelection_MoveStartWhile(This,Cset,Count,pDelta) (This)->lpVtbl->MoveStartWhile(This,Cset,Count,pDelta)\n#define ITextSelection_MoveEndWhile(This,Cset,Count,pDelta) (This)->lpVtbl->MoveEndWhile(This,Cset,Count,pDelta)\n#define ITextSelection_MoveUntil(This,Cset,Count,pDelta) (This)->lpVtbl->MoveUntil(This,Cset,Count,pDelta)\n#define ITextSelection_MoveStartUntil(This,Cset,Count,pDelta) (This)->lpVtbl->MoveStartUntil(This,Cset,Count,pDelta)\n#define ITextSelection_MoveEndUntil(This,Cset,Count,pDelta) (This)->lpVtbl->MoveEndUntil(This,Cset,Count,pDelta)\n#define ITextSelection_FindText(This,bstr,cch,Flags,pLength) (This)->lpVtbl->FindText(This,bstr,cch,Flags,pLength)\n#define ITextSelection_FindTextStart(This,bstr,cch,Flags,pLength) (This)->lpVtbl->FindTextStart(This,bstr,cch,Flags,pLength)\n#define ITextSelection_FindTextEnd(This,bstr,cch,Flags,pLength) (This)->lpVtbl->FindTextEnd(This,bstr,cch,Flags,pLength)\n#define ITextSelection_Delete(This,Unit,Count,pDelta) (This)->lpVtbl->Delete(This,Unit,Count,pDelta)\n#define ITextSelection_Cut(This,pVar) (This)->lpVtbl->Cut(This,pVar)\n#define ITextSelection_Copy(This,pVar) (This)->lpVtbl->Copy(This,pVar)\n#define ITextSelection_Paste(This,pVar,Format) (This)->lpVtbl->Paste(This,pVar,Format)\n#define ITextSelection_CanPaste(This,pVar,Format,pb) (This)->lpVtbl->CanPaste(This,pVar,Format,pb)\n#define ITextSelection_CanEdit(This,pb) (This)->lpVtbl->CanEdit(This,pb)\n#define ITextSelection_ChangeCase(This,Type) (This)->lpVtbl->ChangeCase(This,Type)\n#define ITextSelection_GetPoint(This,Type,cx,cy) (This)->lpVtbl->GetPoint(This,Type,cx,cy)\n#define ITextSelection_SetPoint(This,x,y,Type,Extend) (This)->lpVtbl->SetPoint(This,x,y,Type,Extend)\n#define ITextSelection_ScrollIntoView(This,Value) (This)->lpVtbl->ScrollIntoView(This,Value)\n#define ITextSelection_GetEmbeddedObject(This,ppv) (This)->lpVtbl->GetEmbeddedObject(This,ppv)\n/*** ITextSelection methods ***/\n#define ITextSelection_GetFlags(This,pFlags) (This)->lpVtbl->GetFlags(This,pFlags)\n#define ITextSelection_SetFlags(This,Flags) (This)->lpVtbl->SetFlags(This,Flags)\n#define ITextSelection_GetType(This,pType) (This)->lpVtbl->GetType(This,pType)\n#define ITextSelection_MoveLeft(This,Unit,Count,Extend,pDelta) (This)->lpVtbl->MoveLeft(This,Unit,Count,Extend,pDelta)\n#define ITextSelection_MoveRight(This,Unit,Count,Extend,pDelta) (This)->lpVtbl->MoveRight(This,Unit,Count,Extend,pDelta)\n#define ITextSelection_MoveUp(This,Unit,Count,Extend,pDelta) (This)->lpVtbl->MoveUp(This,Unit,Count,Extend,pDelta)\n#define ITextSelection_MoveDown(This,Unit,Count,Extend,pDelta) (This)->lpVtbl->MoveDown(This,Unit,Count,Extend,pDelta)\n#define ITextSelection_HomeKey(This,Unit,Extend,pDelta) (This)->lpVtbl->HomeKey(This,Unit,Extend,pDelta)\n#define ITextSelection_EndKey(This,Unit,Extend,pDelta) (This)->lpVtbl->EndKey(This,Unit,Extend,pDelta)\n#define ITextSelection_TypeText(This,bstr) (This)->lpVtbl->TypeText(This,bstr)\n#else\n/*** IUnknown methods ***/\nstatic FORCEINLINE HRESULT ITextSelection_QueryInterface(ITextSelection* This,REFIID riid,void **ppvObject) {\n    return This->lpVtbl->QueryInterface(This,riid,ppvObject);\n}\nstatic FORCEINLINE ULONG ITextSelection_AddRef(ITextSelection* This) {\n    return This->lpVtbl->AddRef(This);\n}\nstatic FORCEINLINE ULONG ITextSelection_Release(ITextSelection* This) {\n    return This->lpVtbl->Release(This);\n}\n/*** IDispatch methods ***/\nstatic FORCEINLINE HRESULT ITextSelection_GetTypeInfoCount(ITextSelection* This,UINT *pctinfo) {\n    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);\n}\nstatic FORCEINLINE HRESULT ITextSelection_GetTypeInfo(ITextSelection* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {\n    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);\n}\nstatic FORCEINLINE HRESULT ITextSelection_GetIDsOfNames(ITextSelection* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {\n    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);\n}\nstatic FORCEINLINE HRESULT ITextSelection_Invoke(ITextSelection* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {\n    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);\n}\n/*** ITextRange methods ***/\nstatic FORCEINLINE HRESULT ITextSelection_GetText(ITextSelection* This,BSTR *pbstr) {\n    return This->lpVtbl->GetText(This,pbstr);\n}\nstatic FORCEINLINE HRESULT ITextSelection_SetText(ITextSelection* This,BSTR bstr) {\n    return This->lpVtbl->SetText(This,bstr);\n}\nstatic FORCEINLINE HRESULT ITextSelection_GetChar(ITextSelection* This,LONG *pch) {\n    return This->lpVtbl->GetChar(This,pch);\n}\nstatic FORCEINLINE HRESULT ITextSelection_SetChar(ITextSelection* This,LONG ch) {\n    return This->lpVtbl->SetChar(This,ch);\n}\nstatic FORCEINLINE HRESULT ITextSelection_GetDuplicate(ITextSelection* This,ITextRange **ppRange) {\n    return This->lpVtbl->GetDuplicate(This,ppRange);\n}\nstatic FORCEINLINE HRESULT ITextSelection_GetFormattedText(ITextSelection* This,ITextRange **ppRange) {\n    return This->lpVtbl->GetFormattedText(This,ppRange);\n}\nstatic FORCEINLINE HRESULT ITextSelection_SetFormattedText(ITextSelection* This,ITextRange *pRange) {\n    return This->lpVtbl->SetFormattedText(This,pRange);\n}\nstatic FORCEINLINE HRESULT ITextSelection_GetStart(ITextSelection* This,LONG *pcpFirst) {\n    return This->lpVtbl->GetStart(This,pcpFirst);\n}\nstatic FORCEINLINE HRESULT ITextSelection_SetStart(ITextSelection* This,LONG cpFirst) {\n    return This->lpVtbl->SetStart(This,cpFirst);\n}\nstatic FORCEINLINE HRESULT ITextSelection_GetEnd(ITextSelection* This,LONG *pcpLim) {\n    return This->lpVtbl->GetEnd(This,pcpLim);\n}\nstatic FORCEINLINE HRESULT ITextSelection_SetEnd(ITextSelection* This,LONG cpLim) {\n    return This->lpVtbl->SetEnd(This,cpLim);\n}\nstatic FORCEINLINE HRESULT ITextSelection_GetFont(ITextSelection* This,ITextFont **pFont) {\n    return This->lpVtbl->GetFont(This,pFont);\n}\nstatic FORCEINLINE HRESULT ITextSelection_SetFont(ITextSelection* This,ITextFont *pFont) {\n    return This->lpVtbl->SetFont(This,pFont);\n}\nstatic FORCEINLINE HRESULT ITextSelection_GetPara(ITextSelection* This,ITextPara **ppPara) {\n    return This->lpVtbl->GetPara(This,ppPara);\n}\nstatic FORCEINLINE HRESULT ITextSelection_SetPara(ITextSelection* This,ITextPara *pPara) {\n    return This->lpVtbl->SetPara(This,pPara);\n}\nstatic FORCEINLINE HRESULT ITextSelection_GetStoryLength(ITextSelection* This,LONG *pcch) {\n    return This->lpVtbl->GetStoryLength(This,pcch);\n}\nstatic FORCEINLINE HRESULT ITextSelection_GetStoryType(ITextSelection* This,LONG *pValue) {\n    return This->lpVtbl->GetStoryType(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextSelection_Collapse(ITextSelection* This,LONG bStart) {\n    return This->lpVtbl->Collapse(This,bStart);\n}\nstatic FORCEINLINE HRESULT ITextSelection_Expand(ITextSelection* This,LONG Unit,LONG *pDelta) {\n    return This->lpVtbl->Expand(This,Unit,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection_GetIndex(ITextSelection* This,LONG Unit,LONG *pIndex) {\n    return This->lpVtbl->GetIndex(This,Unit,pIndex);\n}\nstatic FORCEINLINE HRESULT ITextSelection_SetIndex(ITextSelection* This,LONG Unit,LONG Index,LONG Extend) {\n    return This->lpVtbl->SetIndex(This,Unit,Index,Extend);\n}\nstatic FORCEINLINE HRESULT ITextSelection_SetRange(ITextSelection* This,LONG anchor,LONG active) {\n    return This->lpVtbl->SetRange(This,anchor,active);\n}\nstatic FORCEINLINE HRESULT ITextSelection_InRange(ITextSelection* This,ITextRange *pRange,LONG *pb) {\n    return This->lpVtbl->InRange(This,pRange,pb);\n}\nstatic FORCEINLINE HRESULT ITextSelection_InStory(ITextSelection* This,ITextRange *pRange,LONG *pb) {\n    return This->lpVtbl->InStory(This,pRange,pb);\n}\nstatic FORCEINLINE HRESULT ITextSelection_IsEqual(ITextSelection* This,ITextRange *pRange,LONG *pb) {\n    return This->lpVtbl->IsEqual(This,pRange,pb);\n}\nstatic FORCEINLINE HRESULT ITextSelection_Select(ITextSelection* This) {\n    return This->lpVtbl->Select(This);\n}\nstatic FORCEINLINE HRESULT ITextSelection_StartOf(ITextSelection* This,LONG Unit,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->StartOf(This,Unit,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection_EndOf(ITextSelection* This,LONG Unit,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->EndOf(This,Unit,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection_Move(ITextSelection* This,LONG Unit,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->Move(This,Unit,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection_MoveStart(ITextSelection* This,LONG Unit,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveStart(This,Unit,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection_MoveEnd(ITextSelection* This,LONG Unit,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveEnd(This,Unit,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection_MoveWhile(ITextSelection* This,VARIANT *Cset,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveWhile(This,Cset,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection_MoveStartWhile(ITextSelection* This,VARIANT *Cset,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveStartWhile(This,Cset,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection_MoveEndWhile(ITextSelection* This,VARIANT *Cset,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveEndWhile(This,Cset,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection_MoveUntil(ITextSelection* This,VARIANT *Cset,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveUntil(This,Cset,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection_MoveStartUntil(ITextSelection* This,VARIANT *Cset,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveStartUntil(This,Cset,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection_MoveEndUntil(ITextSelection* This,VARIANT *Cset,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->MoveEndUntil(This,Cset,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection_FindText(ITextSelection* This,BSTR bstr,LONG cch,LONG Flags,LONG *pLength) {\n    return This->lpVtbl->FindText(This,bstr,cch,Flags,pLength);\n}\nstatic FORCEINLINE HRESULT ITextSelection_FindTextStart(ITextSelection* This,BSTR bstr,LONG cch,LONG Flags,LONG *pLength) {\n    return This->lpVtbl->FindTextStart(This,bstr,cch,Flags,pLength);\n}\nstatic FORCEINLINE HRESULT ITextSelection_FindTextEnd(ITextSelection* This,BSTR bstr,LONG cch,LONG Flags,LONG *pLength) {\n    return This->lpVtbl->FindTextEnd(This,bstr,cch,Flags,pLength);\n}\nstatic FORCEINLINE HRESULT ITextSelection_Delete(ITextSelection* This,LONG Unit,LONG Count,LONG *pDelta) {\n    return This->lpVtbl->Delete(This,Unit,Count,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection_Cut(ITextSelection* This,VARIANT *pVar) {\n    return This->lpVtbl->Cut(This,pVar);\n}\nstatic FORCEINLINE HRESULT ITextSelection_Copy(ITextSelection* This,VARIANT *pVar) {\n    return This->lpVtbl->Copy(This,pVar);\n}\nstatic FORCEINLINE HRESULT ITextSelection_Paste(ITextSelection* This,VARIANT *pVar,LONG Format) {\n    return This->lpVtbl->Paste(This,pVar,Format);\n}\nstatic FORCEINLINE HRESULT ITextSelection_CanPaste(ITextSelection* This,VARIANT *pVar,LONG Format,LONG *pb) {\n    return This->lpVtbl->CanPaste(This,pVar,Format,pb);\n}\nstatic FORCEINLINE HRESULT ITextSelection_CanEdit(ITextSelection* This,LONG *pb) {\n    return This->lpVtbl->CanEdit(This,pb);\n}\nstatic FORCEINLINE HRESULT ITextSelection_ChangeCase(ITextSelection* This,LONG Type) {\n    return This->lpVtbl->ChangeCase(This,Type);\n}\nstatic FORCEINLINE HRESULT ITextSelection_GetPoint(ITextSelection* This,LONG Type,LONG *cx,LONG *cy) {\n    return This->lpVtbl->GetPoint(This,Type,cx,cy);\n}\nstatic FORCEINLINE HRESULT ITextSelection_SetPoint(ITextSelection* This,LONG x,LONG y,LONG Type,LONG Extend) {\n    return This->lpVtbl->SetPoint(This,x,y,Type,Extend);\n}\nstatic FORCEINLINE HRESULT ITextSelection_ScrollIntoView(ITextSelection* This,LONG Value) {\n    return This->lpVtbl->ScrollIntoView(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextSelection_GetEmbeddedObject(ITextSelection* This,IUnknown **ppv) {\n    return This->lpVtbl->GetEmbeddedObject(This,ppv);\n}\n/*** ITextSelection methods ***/\nstatic FORCEINLINE HRESULT ITextSelection_GetFlags(ITextSelection* This,LONG *pFlags) {\n    return This->lpVtbl->GetFlags(This,pFlags);\n}\nstatic FORCEINLINE HRESULT ITextSelection_SetFlags(ITextSelection* This,LONG Flags) {\n    return This->lpVtbl->SetFlags(This,Flags);\n}\nstatic FORCEINLINE HRESULT ITextSelection_GetType(ITextSelection* This,LONG *pType) {\n    return This->lpVtbl->GetType(This,pType);\n}\nstatic FORCEINLINE HRESULT ITextSelection_MoveLeft(ITextSelection* This,LONG Unit,LONG Count,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->MoveLeft(This,Unit,Count,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection_MoveRight(ITextSelection* This,LONG Unit,LONG Count,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->MoveRight(This,Unit,Count,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection_MoveUp(ITextSelection* This,LONG Unit,LONG Count,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->MoveUp(This,Unit,Count,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection_MoveDown(ITextSelection* This,LONG Unit,LONG Count,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->MoveDown(This,Unit,Count,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection_HomeKey(ITextSelection* This,LONG Unit,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->HomeKey(This,Unit,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection_EndKey(ITextSelection* This,LONG Unit,LONG Extend,LONG *pDelta) {\n    return This->lpVtbl->EndKey(This,Unit,Extend,pDelta);\n}\nstatic FORCEINLINE HRESULT ITextSelection_TypeText(ITextSelection* This,BSTR bstr) {\n    return This->lpVtbl->TypeText(This,bstr);\n}\n#endif\n#endif\n\n#endif\n\n\n#endif  /* __ITextSelection_INTERFACE_DEFINED__ */\n\n/*****************************************************************************\n * ITextFont interface\n */\n#ifndef __ITextFont_INTERFACE_DEFINED__\n#define __ITextFont_INTERFACE_DEFINED__\n\nDEFINE_GUID(IID_ITextFont, 0x8cc497c3, 0xa1df, 0x11ce, 0x80,0x98, 0x00,0xaa,0x00,0x47,0xbe,0x5d);\n#if defined(__cplusplus) && !defined(CINTERFACE)\nMIDL_INTERFACE(\"8cc497c3-a1df-11ce-8098-00aa0047be5d\")\nITextFont : public IDispatch\n{\n    virtual HRESULT STDMETHODCALLTYPE GetDuplicate(\n        ITextFont **ppFont) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetDuplicate(\n        ITextFont *pFont) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE CanChange(\n        LONG *pB) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE IsEqual(\n        ITextFont *pFont,\n        LONG *pB) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Reset(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetStyle(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetStyle(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetAllCaps(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetAllCaps(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetAnimation(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetAnimation(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetBackColor(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetBackColor(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetBold(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetBold(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetEmboss(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetEmboss(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetForeColor(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetForeColor(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetHidden(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetHidden(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetEngrave(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetEngrave(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetItalic(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetItalic(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetKerning(\n        float *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetKerning(\n        float Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetLanguageID(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetLanguageID(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetName(\n        BSTR *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetName(\n        BSTR Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetOutline(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetOutline(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetPosition(\n        float *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetPosition(\n        float Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetProtected(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetProtected(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetShadow(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetShadow(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetSize(\n        float *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetSize(\n        float Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetSmallCaps(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetSmallCaps(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetSpacing(\n        float *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetSpacing(\n        float Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetStrikeThrough(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetStrikeThrough(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetSubscript(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetSubscript(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetSuperscript(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetSuperscript(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetUnderline(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetUnderline(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetWeight(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetWeight(\n        LONG Value) = 0;\n\n};\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(ITextFont, 0x8cc497c3, 0xa1df, 0x11ce, 0x80,0x98, 0x00,0xaa,0x00,0x47,0xbe,0x5d)\n#endif\n#else\ntypedef struct ITextFontVtbl {\n    BEGIN_INTERFACE\n\n    /*** IUnknown methods ***/\n    HRESULT (STDMETHODCALLTYPE *QueryInterface)(\n        ITextFont *This,\n        REFIID riid,\n        void **ppvObject);\n\n    ULONG (STDMETHODCALLTYPE *AddRef)(\n        ITextFont *This);\n\n    ULONG (STDMETHODCALLTYPE *Release)(\n        ITextFont *This);\n\n    /*** IDispatch methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(\n        ITextFont *This,\n        UINT *pctinfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(\n        ITextFont *This,\n        UINT iTInfo,\n        LCID lcid,\n        ITypeInfo **ppTInfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(\n        ITextFont *This,\n        REFIID riid,\n        LPOLESTR *rgszNames,\n        UINT cNames,\n        LCID lcid,\n        DISPID *rgDispId);\n\n    HRESULT (STDMETHODCALLTYPE *Invoke)(\n        ITextFont *This,\n        DISPID dispIdMember,\n        REFIID riid,\n        LCID lcid,\n        WORD wFlags,\n        DISPPARAMS *pDispParams,\n        VARIANT *pVarResult,\n        EXCEPINFO *pExcepInfo,\n        UINT *puArgErr);\n\n    /*** ITextFont methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetDuplicate)(\n        ITextFont *This,\n        ITextFont **ppFont);\n\n    HRESULT (STDMETHODCALLTYPE *SetDuplicate)(\n        ITextFont *This,\n        ITextFont *pFont);\n\n    HRESULT (STDMETHODCALLTYPE *CanChange)(\n        ITextFont *This,\n        LONG *pB);\n\n    HRESULT (STDMETHODCALLTYPE *IsEqual)(\n        ITextFont *This,\n        ITextFont *pFont,\n        LONG *pB);\n\n    HRESULT (STDMETHODCALLTYPE *Reset)(\n        ITextFont *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetStyle)(\n        ITextFont *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetStyle)(\n        ITextFont *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetAllCaps)(\n        ITextFont *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetAllCaps)(\n        ITextFont *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetAnimation)(\n        ITextFont *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetAnimation)(\n        ITextFont *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetBackColor)(\n        ITextFont *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetBackColor)(\n        ITextFont *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetBold)(\n        ITextFont *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetBold)(\n        ITextFont *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetEmboss)(\n        ITextFont *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetEmboss)(\n        ITextFont *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetForeColor)(\n        ITextFont *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetForeColor)(\n        ITextFont *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetHidden)(\n        ITextFont *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetHidden)(\n        ITextFont *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetEngrave)(\n        ITextFont *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetEngrave)(\n        ITextFont *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetItalic)(\n        ITextFont *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetItalic)(\n        ITextFont *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetKerning)(\n        ITextFont *This,\n        float *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetKerning)(\n        ITextFont *This,\n        float Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetLanguageID)(\n        ITextFont *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetLanguageID)(\n        ITextFont *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetName)(\n        ITextFont *This,\n        BSTR *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetName)(\n        ITextFont *This,\n        BSTR Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetOutline)(\n        ITextFont *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetOutline)(\n        ITextFont *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetPosition)(\n        ITextFont *This,\n        float *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetPosition)(\n        ITextFont *This,\n        float Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetProtected)(\n        ITextFont *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetProtected)(\n        ITextFont *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetShadow)(\n        ITextFont *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetShadow)(\n        ITextFont *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetSize)(\n        ITextFont *This,\n        float *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetSize)(\n        ITextFont *This,\n        float Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetSmallCaps)(\n        ITextFont *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetSmallCaps)(\n        ITextFont *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetSpacing)(\n        ITextFont *This,\n        float *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetSpacing)(\n        ITextFont *This,\n        float Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetStrikeThrough)(\n        ITextFont *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetStrikeThrough)(\n        ITextFont *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetSubscript)(\n        ITextFont *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetSubscript)(\n        ITextFont *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetSuperscript)(\n        ITextFont *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetSuperscript)(\n        ITextFont *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetUnderline)(\n        ITextFont *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetUnderline)(\n        ITextFont *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetWeight)(\n        ITextFont *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetWeight)(\n        ITextFont *This,\n        LONG Value);\n\n    END_INTERFACE\n} ITextFontVtbl;\n\ninterface ITextFont {\n    CONST_VTBL ITextFontVtbl* lpVtbl;\n};\n\n#ifdef COBJMACROS\n#ifndef WIDL_C_INLINE_WRAPPERS\n/*** IUnknown methods ***/\n#define ITextFont_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)\n#define ITextFont_AddRef(This) (This)->lpVtbl->AddRef(This)\n#define ITextFont_Release(This) (This)->lpVtbl->Release(This)\n/*** IDispatch methods ***/\n#define ITextFont_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)\n#define ITextFont_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)\n#define ITextFont_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\n#define ITextFont_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\n/*** ITextFont methods ***/\n#define ITextFont_GetDuplicate(This,ppFont) (This)->lpVtbl->GetDuplicate(This,ppFont)\n#define ITextFont_SetDuplicate(This,pFont) (This)->lpVtbl->SetDuplicate(This,pFont)\n#define ITextFont_CanChange(This,pB) (This)->lpVtbl->CanChange(This,pB)\n#define ITextFont_IsEqual(This,pFont,pB) (This)->lpVtbl->IsEqual(This,pFont,pB)\n#define ITextFont_Reset(This,Value) (This)->lpVtbl->Reset(This,Value)\n#define ITextFont_GetStyle(This,pValue) (This)->lpVtbl->GetStyle(This,pValue)\n#define ITextFont_SetStyle(This,Value) (This)->lpVtbl->SetStyle(This,Value)\n#define ITextFont_GetAllCaps(This,pValue) (This)->lpVtbl->GetAllCaps(This,pValue)\n#define ITextFont_SetAllCaps(This,Value) (This)->lpVtbl->SetAllCaps(This,Value)\n#define ITextFont_GetAnimation(This,pValue) (This)->lpVtbl->GetAnimation(This,pValue)\n#define ITextFont_SetAnimation(This,Value) (This)->lpVtbl->SetAnimation(This,Value)\n#define ITextFont_GetBackColor(This,pValue) (This)->lpVtbl->GetBackColor(This,pValue)\n#define ITextFont_SetBackColor(This,Value) (This)->lpVtbl->SetBackColor(This,Value)\n#define ITextFont_GetBold(This,pValue) (This)->lpVtbl->GetBold(This,pValue)\n#define ITextFont_SetBold(This,Value) (This)->lpVtbl->SetBold(This,Value)\n#define ITextFont_GetEmboss(This,pValue) (This)->lpVtbl->GetEmboss(This,pValue)\n#define ITextFont_SetEmboss(This,Value) (This)->lpVtbl->SetEmboss(This,Value)\n#define ITextFont_GetForeColor(This,pValue) (This)->lpVtbl->GetForeColor(This,pValue)\n#define ITextFont_SetForeColor(This,Value) (This)->lpVtbl->SetForeColor(This,Value)\n#define ITextFont_GetHidden(This,pValue) (This)->lpVtbl->GetHidden(This,pValue)\n#define ITextFont_SetHidden(This,Value) (This)->lpVtbl->SetHidden(This,Value)\n#define ITextFont_GetEngrave(This,pValue) (This)->lpVtbl->GetEngrave(This,pValue)\n#define ITextFont_SetEngrave(This,Value) (This)->lpVtbl->SetEngrave(This,Value)\n#define ITextFont_GetItalic(This,pValue) (This)->lpVtbl->GetItalic(This,pValue)\n#define ITextFont_SetItalic(This,Value) (This)->lpVtbl->SetItalic(This,Value)\n#define ITextFont_GetKerning(This,pValue) (This)->lpVtbl->GetKerning(This,pValue)\n#define ITextFont_SetKerning(This,Value) (This)->lpVtbl->SetKerning(This,Value)\n#define ITextFont_GetLanguageID(This,pValue) (This)->lpVtbl->GetLanguageID(This,pValue)\n#define ITextFont_SetLanguageID(This,Value) (This)->lpVtbl->SetLanguageID(This,Value)\n#define ITextFont_GetName(This,pValue) (This)->lpVtbl->GetName(This,pValue)\n#define ITextFont_SetName(This,Value) (This)->lpVtbl->SetName(This,Value)\n#define ITextFont_GetOutline(This,pValue) (This)->lpVtbl->GetOutline(This,pValue)\n#define ITextFont_SetOutline(This,Value) (This)->lpVtbl->SetOutline(This,Value)\n#define ITextFont_GetPosition(This,pValue) (This)->lpVtbl->GetPosition(This,pValue)\n#define ITextFont_SetPosition(This,Value) (This)->lpVtbl->SetPosition(This,Value)\n#define ITextFont_GetProtected(This,pValue) (This)->lpVtbl->GetProtected(This,pValue)\n#define ITextFont_SetProtected(This,Value) (This)->lpVtbl->SetProtected(This,Value)\n#define ITextFont_GetShadow(This,pValue) (This)->lpVtbl->GetShadow(This,pValue)\n#define ITextFont_SetShadow(This,Value) (This)->lpVtbl->SetShadow(This,Value)\n#define ITextFont_GetSize(This,pValue) (This)->lpVtbl->GetSize(This,pValue)\n#define ITextFont_SetSize(This,Value) (This)->lpVtbl->SetSize(This,Value)\n#define ITextFont_GetSmallCaps(This,pValue) (This)->lpVtbl->GetSmallCaps(This,pValue)\n#define ITextFont_SetSmallCaps(This,Value) (This)->lpVtbl->SetSmallCaps(This,Value)\n#define ITextFont_GetSpacing(This,pValue) (This)->lpVtbl->GetSpacing(This,pValue)\n#define ITextFont_SetSpacing(This,Value) (This)->lpVtbl->SetSpacing(This,Value)\n#define ITextFont_GetStrikeThrough(This,pValue) (This)->lpVtbl->GetStrikeThrough(This,pValue)\n#define ITextFont_SetStrikeThrough(This,Value) (This)->lpVtbl->SetStrikeThrough(This,Value)\n#define ITextFont_GetSubscript(This,pValue) (This)->lpVtbl->GetSubscript(This,pValue)\n#define ITextFont_SetSubscript(This,Value) (This)->lpVtbl->SetSubscript(This,Value)\n#define ITextFont_GetSuperscript(This,pValue) (This)->lpVtbl->GetSuperscript(This,pValue)\n#define ITextFont_SetSuperscript(This,Value) (This)->lpVtbl->SetSuperscript(This,Value)\n#define ITextFont_GetUnderline(This,pValue) (This)->lpVtbl->GetUnderline(This,pValue)\n#define ITextFont_SetUnderline(This,Value) (This)->lpVtbl->SetUnderline(This,Value)\n#define ITextFont_GetWeight(This,pValue) (This)->lpVtbl->GetWeight(This,pValue)\n#define ITextFont_SetWeight(This,Value) (This)->lpVtbl->SetWeight(This,Value)\n#else\n/*** IUnknown methods ***/\nstatic FORCEINLINE HRESULT ITextFont_QueryInterface(ITextFont* This,REFIID riid,void **ppvObject) {\n    return This->lpVtbl->QueryInterface(This,riid,ppvObject);\n}\nstatic FORCEINLINE ULONG ITextFont_AddRef(ITextFont* This) {\n    return This->lpVtbl->AddRef(This);\n}\nstatic FORCEINLINE ULONG ITextFont_Release(ITextFont* This) {\n    return This->lpVtbl->Release(This);\n}\n/*** IDispatch methods ***/\nstatic FORCEINLINE HRESULT ITextFont_GetTypeInfoCount(ITextFont* This,UINT *pctinfo) {\n    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetTypeInfo(ITextFont* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {\n    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetIDsOfNames(ITextFont* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {\n    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);\n}\nstatic FORCEINLINE HRESULT ITextFont_Invoke(ITextFont* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {\n    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);\n}\n/*** ITextFont methods ***/\nstatic FORCEINLINE HRESULT ITextFont_GetDuplicate(ITextFont* This,ITextFont **ppFont) {\n    return This->lpVtbl->GetDuplicate(This,ppFont);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetDuplicate(ITextFont* This,ITextFont *pFont) {\n    return This->lpVtbl->SetDuplicate(This,pFont);\n}\nstatic FORCEINLINE HRESULT ITextFont_CanChange(ITextFont* This,LONG *pB) {\n    return This->lpVtbl->CanChange(This,pB);\n}\nstatic FORCEINLINE HRESULT ITextFont_IsEqual(ITextFont* This,ITextFont *pFont,LONG *pB) {\n    return This->lpVtbl->IsEqual(This,pFont,pB);\n}\nstatic FORCEINLINE HRESULT ITextFont_Reset(ITextFont* This,LONG Value) {\n    return This->lpVtbl->Reset(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetStyle(ITextFont* This,LONG *pValue) {\n    return This->lpVtbl->GetStyle(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetStyle(ITextFont* This,LONG Value) {\n    return This->lpVtbl->SetStyle(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetAllCaps(ITextFont* This,LONG *pValue) {\n    return This->lpVtbl->GetAllCaps(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetAllCaps(ITextFont* This,LONG Value) {\n    return This->lpVtbl->SetAllCaps(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetAnimation(ITextFont* This,LONG *pValue) {\n    return This->lpVtbl->GetAnimation(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetAnimation(ITextFont* This,LONG Value) {\n    return This->lpVtbl->SetAnimation(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetBackColor(ITextFont* This,LONG *pValue) {\n    return This->lpVtbl->GetBackColor(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetBackColor(ITextFont* This,LONG Value) {\n    return This->lpVtbl->SetBackColor(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetBold(ITextFont* This,LONG *pValue) {\n    return This->lpVtbl->GetBold(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetBold(ITextFont* This,LONG Value) {\n    return This->lpVtbl->SetBold(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetEmboss(ITextFont* This,LONG *pValue) {\n    return This->lpVtbl->GetEmboss(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetEmboss(ITextFont* This,LONG Value) {\n    return This->lpVtbl->SetEmboss(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetForeColor(ITextFont* This,LONG *pValue) {\n    return This->lpVtbl->GetForeColor(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetForeColor(ITextFont* This,LONG Value) {\n    return This->lpVtbl->SetForeColor(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetHidden(ITextFont* This,LONG *pValue) {\n    return This->lpVtbl->GetHidden(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetHidden(ITextFont* This,LONG Value) {\n    return This->lpVtbl->SetHidden(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetEngrave(ITextFont* This,LONG *pValue) {\n    return This->lpVtbl->GetEngrave(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetEngrave(ITextFont* This,LONG Value) {\n    return This->lpVtbl->SetEngrave(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetItalic(ITextFont* This,LONG *pValue) {\n    return This->lpVtbl->GetItalic(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetItalic(ITextFont* This,LONG Value) {\n    return This->lpVtbl->SetItalic(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetKerning(ITextFont* This,float *pValue) {\n    return This->lpVtbl->GetKerning(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetKerning(ITextFont* This,float Value) {\n    return This->lpVtbl->SetKerning(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetLanguageID(ITextFont* This,LONG *pValue) {\n    return This->lpVtbl->GetLanguageID(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetLanguageID(ITextFont* This,LONG Value) {\n    return This->lpVtbl->SetLanguageID(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetName(ITextFont* This,BSTR *pValue) {\n    return This->lpVtbl->GetName(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetName(ITextFont* This,BSTR Value) {\n    return This->lpVtbl->SetName(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetOutline(ITextFont* This,LONG *pValue) {\n    return This->lpVtbl->GetOutline(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetOutline(ITextFont* This,LONG Value) {\n    return This->lpVtbl->SetOutline(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetPosition(ITextFont* This,float *pValue) {\n    return This->lpVtbl->GetPosition(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetPosition(ITextFont* This,float Value) {\n    return This->lpVtbl->SetPosition(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetProtected(ITextFont* This,LONG *pValue) {\n    return This->lpVtbl->GetProtected(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetProtected(ITextFont* This,LONG Value) {\n    return This->lpVtbl->SetProtected(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetShadow(ITextFont* This,LONG *pValue) {\n    return This->lpVtbl->GetShadow(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetShadow(ITextFont* This,LONG Value) {\n    return This->lpVtbl->SetShadow(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetSize(ITextFont* This,float *pValue) {\n    return This->lpVtbl->GetSize(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetSize(ITextFont* This,float Value) {\n    return This->lpVtbl->SetSize(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetSmallCaps(ITextFont* This,LONG *pValue) {\n    return This->lpVtbl->GetSmallCaps(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetSmallCaps(ITextFont* This,LONG Value) {\n    return This->lpVtbl->SetSmallCaps(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetSpacing(ITextFont* This,float *pValue) {\n    return This->lpVtbl->GetSpacing(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetSpacing(ITextFont* This,float Value) {\n    return This->lpVtbl->SetSpacing(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetStrikeThrough(ITextFont* This,LONG *pValue) {\n    return This->lpVtbl->GetStrikeThrough(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetStrikeThrough(ITextFont* This,LONG Value) {\n    return This->lpVtbl->SetStrikeThrough(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetSubscript(ITextFont* This,LONG *pValue) {\n    return This->lpVtbl->GetSubscript(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetSubscript(ITextFont* This,LONG Value) {\n    return This->lpVtbl->SetSubscript(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetSuperscript(ITextFont* This,LONG *pValue) {\n    return This->lpVtbl->GetSuperscript(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetSuperscript(ITextFont* This,LONG Value) {\n    return This->lpVtbl->SetSuperscript(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetUnderline(ITextFont* This,LONG *pValue) {\n    return This->lpVtbl->GetUnderline(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetUnderline(ITextFont* This,LONG Value) {\n    return This->lpVtbl->SetUnderline(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextFont_GetWeight(ITextFont* This,LONG *pValue) {\n    return This->lpVtbl->GetWeight(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextFont_SetWeight(ITextFont* This,LONG Value) {\n    return This->lpVtbl->SetWeight(This,Value);\n}\n#endif\n#endif\n\n#endif\n\n\n#endif  /* __ITextFont_INTERFACE_DEFINED__ */\n\n/*****************************************************************************\n * ITextPara interface\n */\n#ifndef __ITextPara_INTERFACE_DEFINED__\n#define __ITextPara_INTERFACE_DEFINED__\n\nDEFINE_GUID(IID_ITextPara, 0x8cc497c4, 0xa1df, 0x11ce, 0x80,0x98, 0x00,0xaa,0x00,0x47,0xbe,0x5d);\n#if defined(__cplusplus) && !defined(CINTERFACE)\nMIDL_INTERFACE(\"8cc497c4-a1df-11ce-8098-00aa0047be5d\")\nITextPara : public IDispatch\n{\n    virtual HRESULT STDMETHODCALLTYPE GetDuplicate(\n        ITextPara **ppPara) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetDuplicate(\n        ITextPara *pPara) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE CanChange(\n        LONG *pB) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE IsEqual(\n        ITextPara *pPara,\n        LONG *pB) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Reset(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetStyle(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetStyle(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetAlignment(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetAlignment(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetHyphenation(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetHyphenation(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetFirstLineIndent(\n        float *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetKeepTogether(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetKeepTogether(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetKeepWithNext(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetKeepWithNext(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetLeftIndent(\n        float *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetLineSpacing(\n        float *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetLineSpacingRule(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetListAlignment(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetListAlignment(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetListLevelIndex(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetListLevelIndex(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetListStart(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetListStart(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetListTab(\n        float *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetListTab(\n        float Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetListType(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetListType(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetNoLineNumber(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetNoLineNumber(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetPageBreakBefore(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetPageBreakBefore(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetRightIndent(\n        float *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetRightIndent(\n        float Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetIndents(\n        float StartIndent,\n        float LeftIndent,\n        float RightIndent) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetLineSpacing(\n        LONG LineSpacingRule,\n        float LineSpacing) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetSpaceAfter(\n        float *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetSpaceAfter(\n        float Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetSpaceBefore(\n        float *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetSpaceBefore(\n        float Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetWidowControl(\n        LONG *pValue) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE SetWidowControl(\n        LONG Value) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetTabCount(\n        LONG *pCount) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE AddTab(\n        float tbPos,\n        LONG tbAlign,\n        LONG tbLeader) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE ClearAllTabs(\n        ) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE DeleteTab(\n        float tbPos) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetTab(\n        LONG iTab,\n        float *ptbPos,\n        LONG *ptbAlign,\n        LONG *ptbLeader) = 0;\n\n};\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(ITextPara, 0x8cc497c4, 0xa1df, 0x11ce, 0x80,0x98, 0x00,0xaa,0x00,0x47,0xbe,0x5d)\n#endif\n#else\ntypedef struct ITextParaVtbl {\n    BEGIN_INTERFACE\n\n    /*** IUnknown methods ***/\n    HRESULT (STDMETHODCALLTYPE *QueryInterface)(\n        ITextPara *This,\n        REFIID riid,\n        void **ppvObject);\n\n    ULONG (STDMETHODCALLTYPE *AddRef)(\n        ITextPara *This);\n\n    ULONG (STDMETHODCALLTYPE *Release)(\n        ITextPara *This);\n\n    /*** IDispatch methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(\n        ITextPara *This,\n        UINT *pctinfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(\n        ITextPara *This,\n        UINT iTInfo,\n        LCID lcid,\n        ITypeInfo **ppTInfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(\n        ITextPara *This,\n        REFIID riid,\n        LPOLESTR *rgszNames,\n        UINT cNames,\n        LCID lcid,\n        DISPID *rgDispId);\n\n    HRESULT (STDMETHODCALLTYPE *Invoke)(\n        ITextPara *This,\n        DISPID dispIdMember,\n        REFIID riid,\n        LCID lcid,\n        WORD wFlags,\n        DISPPARAMS *pDispParams,\n        VARIANT *pVarResult,\n        EXCEPINFO *pExcepInfo,\n        UINT *puArgErr);\n\n    /*** ITextPara methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetDuplicate)(\n        ITextPara *This,\n        ITextPara **ppPara);\n\n    HRESULT (STDMETHODCALLTYPE *SetDuplicate)(\n        ITextPara *This,\n        ITextPara *pPara);\n\n    HRESULT (STDMETHODCALLTYPE *CanChange)(\n        ITextPara *This,\n        LONG *pB);\n\n    HRESULT (STDMETHODCALLTYPE *IsEqual)(\n        ITextPara *This,\n        ITextPara *pPara,\n        LONG *pB);\n\n    HRESULT (STDMETHODCALLTYPE *Reset)(\n        ITextPara *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetStyle)(\n        ITextPara *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetStyle)(\n        ITextPara *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetAlignment)(\n        ITextPara *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetAlignment)(\n        ITextPara *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetHyphenation)(\n        ITextPara *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetHyphenation)(\n        ITextPara *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetFirstLineIndent)(\n        ITextPara *This,\n        float *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *GetKeepTogether)(\n        ITextPara *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetKeepTogether)(\n        ITextPara *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetKeepWithNext)(\n        ITextPara *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetKeepWithNext)(\n        ITextPara *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetLeftIndent)(\n        ITextPara *This,\n        float *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *GetLineSpacing)(\n        ITextPara *This,\n        float *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *GetLineSpacingRule)(\n        ITextPara *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *GetListAlignment)(\n        ITextPara *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetListAlignment)(\n        ITextPara *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetListLevelIndex)(\n        ITextPara *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetListLevelIndex)(\n        ITextPara *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetListStart)(\n        ITextPara *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetListStart)(\n        ITextPara *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetListTab)(\n        ITextPara *This,\n        float *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetListTab)(\n        ITextPara *This,\n        float Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetListType)(\n        ITextPara *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetListType)(\n        ITextPara *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetNoLineNumber)(\n        ITextPara *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetNoLineNumber)(\n        ITextPara *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetPageBreakBefore)(\n        ITextPara *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetPageBreakBefore)(\n        ITextPara *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetRightIndent)(\n        ITextPara *This,\n        float *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetRightIndent)(\n        ITextPara *This,\n        float Value);\n\n    HRESULT (STDMETHODCALLTYPE *SetIndents)(\n        ITextPara *This,\n        float StartIndent,\n        float LeftIndent,\n        float RightIndent);\n\n    HRESULT (STDMETHODCALLTYPE *SetLineSpacing)(\n        ITextPara *This,\n        LONG LineSpacingRule,\n        float LineSpacing);\n\n    HRESULT (STDMETHODCALLTYPE *GetSpaceAfter)(\n        ITextPara *This,\n        float *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetSpaceAfter)(\n        ITextPara *This,\n        float Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetSpaceBefore)(\n        ITextPara *This,\n        float *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetSpaceBefore)(\n        ITextPara *This,\n        float Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetWidowControl)(\n        ITextPara *This,\n        LONG *pValue);\n\n    HRESULT (STDMETHODCALLTYPE *SetWidowControl)(\n        ITextPara *This,\n        LONG Value);\n\n    HRESULT (STDMETHODCALLTYPE *GetTabCount)(\n        ITextPara *This,\n        LONG *pCount);\n\n    HRESULT (STDMETHODCALLTYPE *AddTab)(\n        ITextPara *This,\n        float tbPos,\n        LONG tbAlign,\n        LONG tbLeader);\n\n    HRESULT (STDMETHODCALLTYPE *ClearAllTabs)(\n        ITextPara *This);\n\n    HRESULT (STDMETHODCALLTYPE *DeleteTab)(\n        ITextPara *This,\n        float tbPos);\n\n    HRESULT (STDMETHODCALLTYPE *GetTab)(\n        ITextPara *This,\n        LONG iTab,\n        float *ptbPos,\n        LONG *ptbAlign,\n        LONG *ptbLeader);\n\n    END_INTERFACE\n} ITextParaVtbl;\n\ninterface ITextPara {\n    CONST_VTBL ITextParaVtbl* lpVtbl;\n};\n\n#ifdef COBJMACROS\n#ifndef WIDL_C_INLINE_WRAPPERS\n/*** IUnknown methods ***/\n#define ITextPara_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)\n#define ITextPara_AddRef(This) (This)->lpVtbl->AddRef(This)\n#define ITextPara_Release(This) (This)->lpVtbl->Release(This)\n/*** IDispatch methods ***/\n#define ITextPara_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)\n#define ITextPara_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)\n#define ITextPara_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\n#define ITextPara_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\n/*** ITextPara methods ***/\n#define ITextPara_GetDuplicate(This,ppPara) (This)->lpVtbl->GetDuplicate(This,ppPara)\n#define ITextPara_SetDuplicate(This,pPara) (This)->lpVtbl->SetDuplicate(This,pPara)\n#define ITextPara_CanChange(This,pB) (This)->lpVtbl->CanChange(This,pB)\n#define ITextPara_IsEqual(This,pPara,pB) (This)->lpVtbl->IsEqual(This,pPara,pB)\n#define ITextPara_Reset(This,Value) (This)->lpVtbl->Reset(This,Value)\n#define ITextPara_GetStyle(This,pValue) (This)->lpVtbl->GetStyle(This,pValue)\n#define ITextPara_SetStyle(This,Value) (This)->lpVtbl->SetStyle(This,Value)\n#define ITextPara_GetAlignment(This,pValue) (This)->lpVtbl->GetAlignment(This,pValue)\n#define ITextPara_SetAlignment(This,Value) (This)->lpVtbl->SetAlignment(This,Value)\n#define ITextPara_GetHyphenation(This,pValue) (This)->lpVtbl->GetHyphenation(This,pValue)\n#define ITextPara_SetHyphenation(This,Value) (This)->lpVtbl->SetHyphenation(This,Value)\n#define ITextPara_GetFirstLineIndent(This,pValue) (This)->lpVtbl->GetFirstLineIndent(This,pValue)\n#define ITextPara_GetKeepTogether(This,pValue) (This)->lpVtbl->GetKeepTogether(This,pValue)\n#define ITextPara_SetKeepTogether(This,Value) (This)->lpVtbl->SetKeepTogether(This,Value)\n#define ITextPara_GetKeepWithNext(This,pValue) (This)->lpVtbl->GetKeepWithNext(This,pValue)\n#define ITextPara_SetKeepWithNext(This,Value) (This)->lpVtbl->SetKeepWithNext(This,Value)\n#define ITextPara_GetLeftIndent(This,pValue) (This)->lpVtbl->GetLeftIndent(This,pValue)\n#define ITextPara_GetLineSpacing(This,pValue) (This)->lpVtbl->GetLineSpacing(This,pValue)\n#define ITextPara_GetLineSpacingRule(This,pValue) (This)->lpVtbl->GetLineSpacingRule(This,pValue)\n#define ITextPara_GetListAlignment(This,pValue) (This)->lpVtbl->GetListAlignment(This,pValue)\n#define ITextPara_SetListAlignment(This,Value) (This)->lpVtbl->SetListAlignment(This,Value)\n#define ITextPara_GetListLevelIndex(This,pValue) (This)->lpVtbl->GetListLevelIndex(This,pValue)\n#define ITextPara_SetListLevelIndex(This,Value) (This)->lpVtbl->SetListLevelIndex(This,Value)\n#define ITextPara_GetListStart(This,pValue) (This)->lpVtbl->GetListStart(This,pValue)\n#define ITextPara_SetListStart(This,Value) (This)->lpVtbl->SetListStart(This,Value)\n#define ITextPara_GetListTab(This,pValue) (This)->lpVtbl->GetListTab(This,pValue)\n#define ITextPara_SetListTab(This,Value) (This)->lpVtbl->SetListTab(This,Value)\n#define ITextPara_GetListType(This,pValue) (This)->lpVtbl->GetListType(This,pValue)\n#define ITextPara_SetListType(This,Value) (This)->lpVtbl->SetListType(This,Value)\n#define ITextPara_GetNoLineNumber(This,pValue) (This)->lpVtbl->GetNoLineNumber(This,pValue)\n#define ITextPara_SetNoLineNumber(This,Value) (This)->lpVtbl->SetNoLineNumber(This,Value)\n#define ITextPara_GetPageBreakBefore(This,pValue) (This)->lpVtbl->GetPageBreakBefore(This,pValue)\n#define ITextPara_SetPageBreakBefore(This,Value) (This)->lpVtbl->SetPageBreakBefore(This,Value)\n#define ITextPara_GetRightIndent(This,pValue) (This)->lpVtbl->GetRightIndent(This,pValue)\n#define ITextPara_SetRightIndent(This,Value) (This)->lpVtbl->SetRightIndent(This,Value)\n#define ITextPara_SetIndents(This,StartIndent,LeftIndent,RightIndent) (This)->lpVtbl->SetIndents(This,StartIndent,LeftIndent,RightIndent)\n#define ITextPara_SetLineSpacing(This,LineSpacingRule,LineSpacing) (This)->lpVtbl->SetLineSpacing(This,LineSpacingRule,LineSpacing)\n#define ITextPara_GetSpaceAfter(This,pValue) (This)->lpVtbl->GetSpaceAfter(This,pValue)\n#define ITextPara_SetSpaceAfter(This,Value) (This)->lpVtbl->SetSpaceAfter(This,Value)\n#define ITextPara_GetSpaceBefore(This,pValue) (This)->lpVtbl->GetSpaceBefore(This,pValue)\n#define ITextPara_SetSpaceBefore(This,Value) (This)->lpVtbl->SetSpaceBefore(This,Value)\n#define ITextPara_GetWidowControl(This,pValue) (This)->lpVtbl->GetWidowControl(This,pValue)\n#define ITextPara_SetWidowControl(This,Value) (This)->lpVtbl->SetWidowControl(This,Value)\n#define ITextPara_GetTabCount(This,pCount) (This)->lpVtbl->GetTabCount(This,pCount)\n#define ITextPara_AddTab(This,tbPos,tbAlign,tbLeader) (This)->lpVtbl->AddTab(This,tbPos,tbAlign,tbLeader)\n#define ITextPara_ClearAllTabs(This) (This)->lpVtbl->ClearAllTabs(This)\n#define ITextPara_DeleteTab(This,tbPos) (This)->lpVtbl->DeleteTab(This,tbPos)\n#define ITextPara_GetTab(This,iTab,ptbPos,ptbAlign,ptbLeader) (This)->lpVtbl->GetTab(This,iTab,ptbPos,ptbAlign,ptbLeader)\n#else\n/*** IUnknown methods ***/\nstatic FORCEINLINE HRESULT ITextPara_QueryInterface(ITextPara* This,REFIID riid,void **ppvObject) {\n    return This->lpVtbl->QueryInterface(This,riid,ppvObject);\n}\nstatic FORCEINLINE ULONG ITextPara_AddRef(ITextPara* This) {\n    return This->lpVtbl->AddRef(This);\n}\nstatic FORCEINLINE ULONG ITextPara_Release(ITextPara* This) {\n    return This->lpVtbl->Release(This);\n}\n/*** IDispatch methods ***/\nstatic FORCEINLINE HRESULT ITextPara_GetTypeInfoCount(ITextPara* This,UINT *pctinfo) {\n    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);\n}\nstatic FORCEINLINE HRESULT ITextPara_GetTypeInfo(ITextPara* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {\n    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);\n}\nstatic FORCEINLINE HRESULT ITextPara_GetIDsOfNames(ITextPara* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {\n    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);\n}\nstatic FORCEINLINE HRESULT ITextPara_Invoke(ITextPara* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {\n    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);\n}\n/*** ITextPara methods ***/\nstatic FORCEINLINE HRESULT ITextPara_GetDuplicate(ITextPara* This,ITextPara **ppPara) {\n    return This->lpVtbl->GetDuplicate(This,ppPara);\n}\nstatic FORCEINLINE HRESULT ITextPara_SetDuplicate(ITextPara* This,ITextPara *pPara) {\n    return This->lpVtbl->SetDuplicate(This,pPara);\n}\nstatic FORCEINLINE HRESULT ITextPara_CanChange(ITextPara* This,LONG *pB) {\n    return This->lpVtbl->CanChange(This,pB);\n}\nstatic FORCEINLINE HRESULT ITextPara_IsEqual(ITextPara* This,ITextPara *pPara,LONG *pB) {\n    return This->lpVtbl->IsEqual(This,pPara,pB);\n}\nstatic FORCEINLINE HRESULT ITextPara_Reset(ITextPara* This,LONG Value) {\n    return This->lpVtbl->Reset(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextPara_GetStyle(ITextPara* This,LONG *pValue) {\n    return This->lpVtbl->GetStyle(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextPara_SetStyle(ITextPara* This,LONG Value) {\n    return This->lpVtbl->SetStyle(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextPara_GetAlignment(ITextPara* This,LONG *pValue) {\n    return This->lpVtbl->GetAlignment(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextPara_SetAlignment(ITextPara* This,LONG Value) {\n    return This->lpVtbl->SetAlignment(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextPara_GetHyphenation(ITextPara* This,LONG *pValue) {\n    return This->lpVtbl->GetHyphenation(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextPara_SetHyphenation(ITextPara* This,LONG Value) {\n    return This->lpVtbl->SetHyphenation(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextPara_GetFirstLineIndent(ITextPara* This,float *pValue) {\n    return This->lpVtbl->GetFirstLineIndent(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextPara_GetKeepTogether(ITextPara* This,LONG *pValue) {\n    return This->lpVtbl->GetKeepTogether(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextPara_SetKeepTogether(ITextPara* This,LONG Value) {\n    return This->lpVtbl->SetKeepTogether(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextPara_GetKeepWithNext(ITextPara* This,LONG *pValue) {\n    return This->lpVtbl->GetKeepWithNext(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextPara_SetKeepWithNext(ITextPara* This,LONG Value) {\n    return This->lpVtbl->SetKeepWithNext(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextPara_GetLeftIndent(ITextPara* This,float *pValue) {\n    return This->lpVtbl->GetLeftIndent(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextPara_GetLineSpacing(ITextPara* This,float *pValue) {\n    return This->lpVtbl->GetLineSpacing(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextPara_GetLineSpacingRule(ITextPara* This,LONG *pValue) {\n    return This->lpVtbl->GetLineSpacingRule(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextPara_GetListAlignment(ITextPara* This,LONG *pValue) {\n    return This->lpVtbl->GetListAlignment(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextPara_SetListAlignment(ITextPara* This,LONG Value) {\n    return This->lpVtbl->SetListAlignment(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextPara_GetListLevelIndex(ITextPara* This,LONG *pValue) {\n    return This->lpVtbl->GetListLevelIndex(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextPara_SetListLevelIndex(ITextPara* This,LONG Value) {\n    return This->lpVtbl->SetListLevelIndex(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextPara_GetListStart(ITextPara* This,LONG *pValue) {\n    return This->lpVtbl->GetListStart(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextPara_SetListStart(ITextPara* This,LONG Value) {\n    return This->lpVtbl->SetListStart(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextPara_GetListTab(ITextPara* This,float *pValue) {\n    return This->lpVtbl->GetListTab(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextPara_SetListTab(ITextPara* This,float Value) {\n    return This->lpVtbl->SetListTab(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextPara_GetListType(ITextPara* This,LONG *pValue) {\n    return This->lpVtbl->GetListType(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextPara_SetListType(ITextPara* This,LONG Value) {\n    return This->lpVtbl->SetListType(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextPara_GetNoLineNumber(ITextPara* This,LONG *pValue) {\n    return This->lpVtbl->GetNoLineNumber(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextPara_SetNoLineNumber(ITextPara* This,LONG Value) {\n    return This->lpVtbl->SetNoLineNumber(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextPara_GetPageBreakBefore(ITextPara* This,LONG *pValue) {\n    return This->lpVtbl->GetPageBreakBefore(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextPara_SetPageBreakBefore(ITextPara* This,LONG Value) {\n    return This->lpVtbl->SetPageBreakBefore(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextPara_GetRightIndent(ITextPara* This,float *pValue) {\n    return This->lpVtbl->GetRightIndent(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextPara_SetRightIndent(ITextPara* This,float Value) {\n    return This->lpVtbl->SetRightIndent(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextPara_SetIndents(ITextPara* This,float StartIndent,float LeftIndent,float RightIndent) {\n    return This->lpVtbl->SetIndents(This,StartIndent,LeftIndent,RightIndent);\n}\nstatic FORCEINLINE HRESULT ITextPara_SetLineSpacing(ITextPara* This,LONG LineSpacingRule,float LineSpacing) {\n    return This->lpVtbl->SetLineSpacing(This,LineSpacingRule,LineSpacing);\n}\nstatic FORCEINLINE HRESULT ITextPara_GetSpaceAfter(ITextPara* This,float *pValue) {\n    return This->lpVtbl->GetSpaceAfter(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextPara_SetSpaceAfter(ITextPara* This,float Value) {\n    return This->lpVtbl->SetSpaceAfter(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextPara_GetSpaceBefore(ITextPara* This,float *pValue) {\n    return This->lpVtbl->GetSpaceBefore(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextPara_SetSpaceBefore(ITextPara* This,float Value) {\n    return This->lpVtbl->SetSpaceBefore(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextPara_GetWidowControl(ITextPara* This,LONG *pValue) {\n    return This->lpVtbl->GetWidowControl(This,pValue);\n}\nstatic FORCEINLINE HRESULT ITextPara_SetWidowControl(ITextPara* This,LONG Value) {\n    return This->lpVtbl->SetWidowControl(This,Value);\n}\nstatic FORCEINLINE HRESULT ITextPara_GetTabCount(ITextPara* This,LONG *pCount) {\n    return This->lpVtbl->GetTabCount(This,pCount);\n}\nstatic FORCEINLINE HRESULT ITextPara_AddTab(ITextPara* This,float tbPos,LONG tbAlign,LONG tbLeader) {\n    return This->lpVtbl->AddTab(This,tbPos,tbAlign,tbLeader);\n}\nstatic FORCEINLINE HRESULT ITextPara_ClearAllTabs(ITextPara* This) {\n    return This->lpVtbl->ClearAllTabs(This);\n}\nstatic FORCEINLINE HRESULT ITextPara_DeleteTab(ITextPara* This,float tbPos) {\n    return This->lpVtbl->DeleteTab(This,tbPos);\n}\nstatic FORCEINLINE HRESULT ITextPara_GetTab(ITextPara* This,LONG iTab,float *ptbPos,LONG *ptbAlign,LONG *ptbLeader) {\n    return This->lpVtbl->GetTab(This,iTab,ptbPos,ptbAlign,ptbLeader);\n}\n#endif\n#endif\n\n#endif\n\n\n#endif  /* __ITextPara_INTERFACE_DEFINED__ */\n\n/*****************************************************************************\n * ITextStoryRanges interface\n */\n#ifndef __ITextStoryRanges_INTERFACE_DEFINED__\n#define __ITextStoryRanges_INTERFACE_DEFINED__\n\nDEFINE_GUID(IID_ITextStoryRanges, 0x8cc497c5, 0xa1df, 0x11ce, 0x80,0x98, 0x00,0xaa,0x00,0x47,0xbe,0x5d);\n#if defined(__cplusplus) && !defined(CINTERFACE)\nMIDL_INTERFACE(\"8cc497c5-a1df-11ce-8098-00aa0047be5d\")\nITextStoryRanges : public IDispatch\n{\n    virtual HRESULT STDMETHODCALLTYPE _NewEnum(\n        IUnknown **ppUnkEnum) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE Item(\n        LONG Index,\n        ITextRange **ppRange) = 0;\n\n    virtual HRESULT STDMETHODCALLTYPE GetCount(\n        LONG *pCount) = 0;\n\n};\n#ifdef __CRT_UUID_DECL\n__CRT_UUID_DECL(ITextStoryRanges, 0x8cc497c5, 0xa1df, 0x11ce, 0x80,0x98, 0x00,0xaa,0x00,0x47,0xbe,0x5d)\n#endif\n#else\ntypedef struct ITextStoryRangesVtbl {\n    BEGIN_INTERFACE\n\n    /*** IUnknown methods ***/\n    HRESULT (STDMETHODCALLTYPE *QueryInterface)(\n        ITextStoryRanges *This,\n        REFIID riid,\n        void **ppvObject);\n\n    ULONG (STDMETHODCALLTYPE *AddRef)(\n        ITextStoryRanges *This);\n\n    ULONG (STDMETHODCALLTYPE *Release)(\n        ITextStoryRanges *This);\n\n    /*** IDispatch methods ***/\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(\n        ITextStoryRanges *This,\n        UINT *pctinfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(\n        ITextStoryRanges *This,\n        UINT iTInfo,\n        LCID lcid,\n        ITypeInfo **ppTInfo);\n\n    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(\n        ITextStoryRanges *This,\n        REFIID riid,\n        LPOLESTR *rgszNames,\n        UINT cNames,\n        LCID lcid,\n        DISPID *rgDispId);\n\n    HRESULT (STDMETHODCALLTYPE *Invoke)(\n        ITextStoryRanges *This,\n        DISPID dispIdMember,\n        REFIID riid,\n        LCID lcid,\n        WORD wFlags,\n        DISPPARAMS *pDispParams,\n        VARIANT *pVarResult,\n        EXCEPINFO *pExcepInfo,\n        UINT *puArgErr);\n\n    /*** ITextStoryRanges methods ***/\n    HRESULT (STDMETHODCALLTYPE *_NewEnum)(\n        ITextStoryRanges *This,\n        IUnknown **ppUnkEnum);\n\n    HRESULT (STDMETHODCALLTYPE *Item)(\n        ITextStoryRanges *This,\n        LONG Index,\n        ITextRange **ppRange);\n\n    HRESULT (STDMETHODCALLTYPE *GetCount)(\n        ITextStoryRanges *This,\n        LONG *pCount);\n\n    END_INTERFACE\n} ITextStoryRangesVtbl;\n\ninterface ITextStoryRanges {\n    CONST_VTBL ITextStoryRangesVtbl* lpVtbl;\n};\n\n#ifdef COBJMACROS\n#ifndef WIDL_C_INLINE_WRAPPERS\n/*** IUnknown methods ***/\n#define ITextStoryRanges_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)\n#define ITextStoryRanges_AddRef(This) (This)->lpVtbl->AddRef(This)\n#define ITextStoryRanges_Release(This) (This)->lpVtbl->Release(This)\n/*** IDispatch methods ***/\n#define ITextStoryRanges_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)\n#define ITextStoryRanges_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)\n#define ITextStoryRanges_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\n#define ITextStoryRanges_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\n/*** ITextStoryRanges methods ***/\n#define ITextStoryRanges__NewEnum(This,ppUnkEnum) (This)->lpVtbl->_NewEnum(This,ppUnkEnum)\n#define ITextStoryRanges_Item(This,Index,ppRange) (This)->lpVtbl->Item(This,Index,ppRange)\n#define ITextStoryRanges_GetCount(This,pCount) (This)->lpVtbl->GetCount(This,pCount)\n#else\n/*** IUnknown methods ***/\nstatic FORCEINLINE HRESULT ITextStoryRanges_QueryInterface(ITextStoryRanges* This,REFIID riid,void **ppvObject) {\n    return This->lpVtbl->QueryInterface(This,riid,ppvObject);\n}\nstatic FORCEINLINE ULONG ITextStoryRanges_AddRef(ITextStoryRanges* This) {\n    return This->lpVtbl->AddRef(This);\n}\nstatic FORCEINLINE ULONG ITextStoryRanges_Release(ITextStoryRanges* This) {\n    return This->lpVtbl->Release(This);\n}\n/*** IDispatch methods ***/\nstatic FORCEINLINE HRESULT ITextStoryRanges_GetTypeInfoCount(ITextStoryRanges* This,UINT *pctinfo) {\n    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);\n}\nstatic FORCEINLINE HRESULT ITextStoryRanges_GetTypeInfo(ITextStoryRanges* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {\n    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);\n}\nstatic FORCEINLINE HRESULT ITextStoryRanges_GetIDsOfNames(ITextStoryRanges* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {\n    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);\n}\nstatic FORCEINLINE HRESULT ITextStoryRanges_Invoke(ITextStoryRanges* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {\n    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);\n}\n/*** ITextStoryRanges methods ***/\nstatic FORCEINLINE HRESULT ITextStoryRanges__NewEnum(ITextStoryRanges* This,IUnknown **ppUnkEnum) {\n    return This->lpVtbl->_NewEnum(This,ppUnkEnum);\n}\nstatic FORCEINLINE HRESULT ITextStoryRanges_Item(ITextStoryRanges* This,LONG Index,ITextRange **ppRange) {\n    return This->lpVtbl->Item(This,Index,ppRange);\n}\nstatic FORCEINLINE HRESULT ITextStoryRanges_GetCount(ITextStoryRanges* This,LONG *pCount) {\n    return This->lpVtbl->GetCount(This,pCount);\n}\n#endif\n#endif\n\n#endif\n\n\n#endif  /* __ITextStoryRanges_INTERFACE_DEFINED__ */\n\n/* Begin additional prototypes for all interfaces */\n\nULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);\nunsigned char * __RPC_USER BSTR_UserMarshal  (ULONG *, unsigned char *, BSTR *);\nunsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);\nvoid            __RPC_USER BSTR_UserFree     (ULONG *, BSTR *);\nULONG           __RPC_USER VARIANT_UserSize     (ULONG *, ULONG, VARIANT *);\nunsigned char * __RPC_USER VARIANT_UserMarshal  (ULONG *, unsigned char *, VARIANT *);\nunsigned char * __RPC_USER VARIANT_UserUnmarshal(ULONG *, unsigned char *, VARIANT *);\nvoid            __RPC_USER VARIANT_UserFree     (ULONG *, VARIANT *);\n\n/* End additional prototypes */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __tom_h__ */\n"
  },
  {
    "path": "winhlp32/winhelp.c",
    "content": "/*\n * Help Viewer\n *\n * Copyright    1996 Ulrich Schmid <uschmid@mail.hh.provi.de>\n *              2002 Sylvain Petreolle <spetreolle@yahoo.fr>\n *              2002, 2008 Eric Pouech <eric.pouech@wanadoo.fr>\n *              2004 Ken Belleau <jamez@ivic.qc.ca>\n *              2008 Kirill K. Smirnov <lich@math.spbu.ru>\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#define NONAMELESSUNION\n#include <assert.h>\n#include <stdio.h>\n#include <string.h>\n#include <stdarg.h>\n#include <stdlib.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n#include \"winuser.h\"\n#include \"commdlg.h\"\n#include \"winhelp.h\"\n#include \"winhelp_res.h\"\n#include \"shellapi.h\"\n#include \"richedit.h\"\n#include \"richole.h\"\n#include \"commctrl.h\"\n#include \"psapi.h\"\n#include \"tom.h\"\n\n#ifdef _DEBUG\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(winhelp);\n#else\n#define WINE_TRACE(...)\n#define WINE_WARN(...)\n#define WINE_FIXME(...)\n#define WINE_ERR(...)\n#define debugstr_a(...)\n#endif\n\nWINHELP_GLOBALS Globals = {3, NULL, TRUE, NULL, NULL, NULL, NULL, NULL, {{{NULL,NULL}},0}, NULL};\n\n#define CTL_ID_BUTTON   0x700\n#define CTL_ID_TEXT     0x701\n\n#include \"initguid.h\"\n\nDEFINE_GUID(IID_ITextDocument2, 0xc241f5e0, 0x7206, 0x11d8, 0xa2, 0xc7, 0x00, 0xa0, 0xd1, 0xd6, 0xc6, 0xb3);\n\nstatic void comp_xWBTreeKey(void *p, const void *key, int leaf, void **next);\nstatic INT_PTR CALLBACK WINHELP_TopicDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);\n\n\n/***********************************************************************\n *\n *           WINHELP_InitFonts\n */\nstatic void WINHELP_InitFonts(HWND hWnd)\n{\n    WINHELP_WINDOW *win = (WINHELP_WINDOW*) GetWindowLongPtrW(hWnd, 0);\n    LOGFONTW logfontlist[] = {\n        {-10, 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 32, {'H','e','l','v',0}},\n        {-12, 0, 0, 0, 700, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 32, {'H','e','l','v',0}},\n        {-12, 0, 0, 0, 700, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 32, {'H','e','l','v',0}},\n        {-12, 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 32, {'H','e','l','v',0}},\n        {-12, 0, 0, 0, 700, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 32, {'H','e','l','v',0}},\n        {-10, 0, 0, 0, 700, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 32, {'H','e','l','v',0}},\n        { -8, 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 32, {'H','e','l','v',0}}};\n\n    static HFONT fonts[ARRAY_SIZE(logfontlist)];\n    static BOOL init = FALSE;\n\n    win->fonts_len = ARRAY_SIZE(logfontlist);\n    win->fonts = fonts;\n\n    if (!init)\n    {\n        UINT i;\n\n        for (i = 0; i < ARRAY_SIZE(logfontlist); i++)\n\t{\n            fonts[i] = CreateFontIndirectW(&logfontlist[i]);\n\t}\n\n        init = TRUE;\n    }\n}\n\nstatic DWORD CALLBACK WINHELP_RtfStreamIn(DWORD_PTR cookie, BYTE* buff,\n                                          LONG cb, LONG* pcb)\n{\n    struct RtfData*     rd = (struct RtfData*)cookie;\n\n    if (rd->where >= rd->ptr) return 1;\n    if (rd->where + cb > rd->ptr)\n        cb = rd->ptr - rd->where;\n    memcpy(buff, rd->where, cb);\n    rd->where += cb;\n    *pcb = cb;\n    return 0;\n}\n\nBOOL WINHELP_SearchKey(char keyfile, LPCSTR keywords, LONG type, LPCSTR topic, LPCSTR window, WINHELP_WINDOW *currwin, HLPFILE* hlpfile)\n{\n    DWORD ids[20], t;\n    int idn = 0;\n    char *key;\n    HLPFILE_PAGE *page = currwin->page;\n    HLPFILE_XW *tree;\n    if (type > 1) return FALSE;\n    if (!(tree = HLPFILE_GetTreeData(hlpfile, keyfile))) return FALSE;\n    key = strtok(keywords, \";\");\n    while (key)\n    {\n        key = HLPFILE_BPTreeSearch(tree->tree, key, comp_xWBTreeKey);\n        if (key)\n        {\n            int count = *(SHORT *)(key + strlen(key) + 1);\n            int offset = *(ULONG *)(key + strlen(key) + 3);\n            for (int i = 0; i < count; i++)\n            {\n                DWORD ref = *(DWORD *)(tree->data + offset + 9 + (4 * i));\n                if (page && (ref == page->offset)) continue;\n                ids[idn++] = ref;\n                if (idn == 20) break;\n            }\n            if (idn == 20) break;\n        }\n        key = strtok(NULL, \";\");\n    }\n    if (!idn) return FALSE;\n    if (type && ((type != 1) || (idn > 1)))\n    {\n        struct index_data idx;\n        idx.hlpfile = page->file;\n        idx.jump = FALSE;\n        idx.offset = (ULONG)ids;\n        idx.count = idn;\n        t = DialogBoxParamA(NULL, MAKEINTRESOURCE(IDD_TOPIC), currwin->hMainWnd, WINHELP_TopicDlgProc, &idx);\n        if (t == 0xFFFFFFFF) return FALSE;\n    }\n    else\n        t = ids[0];\n    HLPFILE_WINDOWINFO* win = window ? WINHELP_GetWindowInfo(hlpfile, window) : currwin->info;\n    WINHELP_OpenHelpWindow(HLPFILE_PageByOffset, hlpfile, t, win, SW_NORMAL);\n    return TRUE;\n}\n\nstatic void WINHELP_SetupText(HWND hTextWnd, WINHELP_WINDOW* win, ULONG relative)\n{\n    static const WCHAR emptyW[1];\n    /* At first clear area - needed by EM_POSFROMCHAR/EM_SETSCROLLPOS */\n    SendMessageW(hTextWnd, WM_SETTEXT, 0, (LPARAM)emptyW);\n    SendMessageW(hTextWnd, WM_SETREDRAW, FALSE, 0);\n    SendMessageW(hTextWnd, EM_SETBKGNDCOLOR, 0, (LPARAM)win->info->sr_color);\n    /* set word-wrap to window size (undocumented) */\n    SendMessageW(hTextWnd, EM_SETTARGETDEVICE, 0, 0);\n    SendMessageW(hTextWnd, EM_EXLIMITTEXT, 0, -1);\n    if (win->page)\n    {\n        struct RtfData  rd;\n        EDITSTREAM      es;\n        unsigned        cp = 0;\n        POINTL          ptl;\n        POINT           pt;\n\n\n        if (HLPFILE_BrowsePage(win->page, &rd, win->font_scale, relative, win->info))\n        {\n            rd.where = rd.data;\n            es.dwCookie = (DWORD_PTR)&rd;\n            es.dwError = 0;\n            es.pfnCallback = WINHELP_RtfStreamIn;\n\n            SendMessageW(hTextWnd, EM_STREAMIN, SF_RTF, (LPARAM)&es);\n        }\n        /* FIXME: else leaking potentially the rd.first_link chain */\n        HeapFree(GetProcessHeap(), 0, rd.data);\n        if (rd.char_pos_rel)\n        {\n            WCHAR tmp[32];\n            FINDTEXTW find;\n            const WCHAR search[] = {'s','c','r','o','l','l','_','%','x',0};\n            find.chrg.cpMin = 0;\n            find.chrg.cpMax = -1;\n            find.lpstrText = &tmp;\n            swprintf(tmp, 32, search, relative);\n            cp = SendMessageW(hTextWnd, EM_FINDTEXTW, FR_DOWN, &find);\n        }\n        SendMessageW(hTextWnd, EM_POSFROMCHAR, (WPARAM)&ptl, cp || (cp != -1) ? cp - 1 : 0);\n        pt.x = 0; pt.y = ptl.y;\n        SendMessageW(hTextWnd, EM_SETSCROLLPOS, 0, (LPARAM)&pt);\n        IRichEditOle *reole;\n        SendMessageW(hTextWnd, EM_GETOLEINTERFACE, 0, &reole);\n        if (rd.first_hs)\n        {\n            REOBJECT obj = {sizeof(REOBJECT)};\n            for(int i = 0; i < rd.imgcnt; i++)\n            {\n                HLPFILE_HOTSPOTLINK* hs = rd.first_hs;\n                reole->lpVtbl->GetObject(reole, i, &obj, REO_GETOBJ_NO_INTERFACES);\n                while(hs)\n                {\n                    if (hs->link.bHotSpot && (i == hs->imgidx))\n                        hs->link.cpMin = hs->link.cpMax = obj.cp;\n                    hs = hs->next;\n                }\n            }\n        }\n        if (win->page->first_var_row)\n        {\n            ITextDocument2 *doc;\n            HRESULT result = reole->lpVtbl->QueryInterface(reole, &IID_ITextDocument2, &doc);\n            if (SUCCEEDED(result))\n            {\n                SendMessageW(hTextWnd, EM_SETOPTIONS, ECOOP_AND, ~ECO_READONLY);\n                ITextRange2 *range;\n                result = doc->lpVtbl->Range(doc, 0, 0, &range);\n                if (SUCCEEDED(result))\n                {\n                    HLPFILE_ROW *next = win->page->first_var_row;\n                    BSTR rowtag = SysAllocString(L\"var_wid_row\");\n                    RECT rect;\n                    GetClientRect(hTextWnd, &rect);\n                    rect.right -= GetSystemMetrics(SM_CXVSCROLL);\n                    while (next->next) next = next->next;\n                    while (next)\n                    {\n                        ITextRow *row;\n                        long len = 0;\n                        long start;\n                        range->lpVtbl->FindText(range, rowtag, tomForward, tomMatchCase, &len);\n                        if (!len) break;\n                        range->lpVtbl->Move(range, tomRow, 1, &len);\n                        if (!len) break;\n                        range->lpVtbl->GetStart(range, &start);\n                        range->lpVtbl->SetStart(range, ++start);\n                        result = range->lpVtbl->GetRow(range, &row);\n                        if (FAILED(result)) break;\n                        next->cpos = start;\n                        WORD last = 0, tot = next->width[next->cols - 1];\n                        for (int i = 0; i < next->cols; i++)\n                        {\n                            WORD curr = ((long)(next->width[i] - last) * 100) / tot;\n                            last = next->width[i];\n                            next->width[i] = curr;\n                            row->lpVtbl->SetCellIndex(row, i);\n                            row->lpVtbl->SetCellWidth(row, (rect.right * 15 * next->width[i]) / 100);\n                        }\n                        row->lpVtbl->Apply(row, 1, tomCellStructureChangeOnly);\n                        row->lpVtbl->Release(row);\n                        next = next->prev;\n                    }\n                    range->lpVtbl->Release(range);\n                    SysFreeString(rowtag);\n                }\n                doc->lpVtbl->Release(doc);\n                SendMessageW(hTextWnd, EM_SETOPTIONS, ECOOP_OR, ECO_READONLY);\n            }\n        }\n        reole->lpVtbl->Release(reole);\n    }\n    SendMessageW(hTextWnd, WM_SETREDRAW, TRUE, 0);\n    RedrawWindow(hTextWnd, NULL, NULL, RDW_FRAME|RDW_INVALIDATE);\n}\n\n/***********************************************************************\n *\n *           WINHELP_GetOpenFileName\n */\nBOOL WINHELP_GetOpenFileName(LPSTR lpszFile, int len)\n{\n    OPENFILENAMEA openfilename;\n    CHAR szDir[MAX_PATH];\n    CHAR szzFilter[2 * MAX_STRING_LEN + 100];\n    LPSTR p = szzFilter;\n\n    memset(&openfilename, 0, sizeof(OPENFILENAMEA));\n    WINE_TRACE(\"()\\n\");\n\n    LoadStringA(Globals.hInstance, STID_HELP_FILES_HLP, p, MAX_STRING_LEN);\n    p += strlen(p) + 1;\n    strcpy(p, \"*.hlp\");\n    p += strlen(p) + 1;\n    LoadStringA(Globals.hInstance, STID_ALL_FILES, p, MAX_STRING_LEN);\n    p += strlen(p) + 1;\n    strcpy(p, \"*.*\");\n    p += strlen(p) + 1;\n    *p = '\\0';\n\n    GetCurrentDirectoryA(sizeof(szDir), szDir);\n\n    lpszFile[0]='\\0';\n\n    openfilename.lStructSize       = sizeof(openfilename);\n    openfilename.hwndOwner         = (Globals.active_win ? Globals.active_win->hMainWnd : 0);\n    openfilename.hInstance         = Globals.hInstance;\n    openfilename.lpstrFilter       = szzFilter;\n    openfilename.lpstrCustomFilter = 0;\n    openfilename.nMaxCustFilter    = 0;\n    openfilename.nFilterIndex      = 1;\n    openfilename.lpstrFile         = lpszFile;\n    openfilename.nMaxFile          = len;\n    openfilename.lpstrFileTitle    = 0;\n    openfilename.nMaxFileTitle     = 0;\n    openfilename.lpstrInitialDir   = szDir;\n    openfilename.lpstrTitle        = 0;\n    openfilename.Flags             = OFN_ENABLESIZING | OFN_HIDEREADONLY | OFN_READONLY;\n    openfilename.nFileOffset       = 0;\n    openfilename.nFileExtension    = 0;\n    openfilename.lpstrDefExt       = 0;\n    openfilename.lCustData         = 0;\n    openfilename.lpfnHook          = 0;\n    openfilename.lpTemplateName    = 0;\n\n    return GetOpenFileNameA(&openfilename);\n}\n\n/***********************************************************************\n *\n *           WINHELP_MessageBoxIDS_s\n */\nstatic INT WINHELP_MessageBoxIDS_s(UINT ids_text, LPCSTR str, UINT ids_title, WORD type)\n{\n    CHAR text[MAX_STRING_LEN];\n    CHAR caption[MAX_STRING_LEN];\n    CHAR newtext[MAX_STRING_LEN + MAX_PATH];\n\n    LoadStringA(Globals.hInstance, ids_text, text, sizeof(text));\n    wsprintfA(newtext, text, str);\n    LoadStringA(Globals.hInstance, ids_title, caption, sizeof(caption));\n\n    return MessageBoxA(0, newtext, caption, type);\n}\n\n/***********************************************************************\n *\n *           WINHELP_LookupHelpFile\n */\nHLPFILE* WINHELP_LookupHelpFile(LPCSTR lpszFile)\n{\n    HLPFILE*        hlpfile;\n    char szFullName[MAX_PATH];\n    char szAddPath[MAX_PATH];\n    char *p;\n\n    /*\n     * NOTE: This is needed by popup windows only.\n     * In other cases it's not needed but does not hurt though.\n     */\n    if (Globals.active_win && Globals.active_win->page && Globals.active_win->page->file)\n    {\n        strcpy(szAddPath, Globals.active_win->page->file->lpszPath);\n        p = strrchr(szAddPath, '\\\\');\n        if (p) *p = 0;\n    }\n\n    /*\n     * FIXME: Should we swap conditions?\n     */\n    if (!SearchPathA(NULL, lpszFile, \".hlp\", MAX_PATH, szFullName, NULL) &&\n        !SearchPathA(szAddPath, lpszFile, \".hlp\", MAX_PATH, szFullName, NULL))\n    {\n        if (WINHELP_MessageBoxIDS_s(STID_FILE_NOT_FOUND_s, lpszFile, STID_WHERROR,\n                                    MB_YESNO|MB_ICONQUESTION) != IDYES)\n            return NULL;\n        if (!WINHELP_GetOpenFileName(szFullName, MAX_PATH))\n            return NULL;\n    }\n    hlpfile = HLPFILE_ReadHlpFile(szFullName);\n    if (!hlpfile)\n        WINHELP_MessageBoxIDS_s(STID_HLPFILE_ERROR_s, lpszFile,\n                                STID_WHERROR, MB_OK|MB_ICONSTOP);\n    return hlpfile;\n}\n\n/******************************************************************\n *\t\tWINHELP_GetWindowInfo\n *\n *\n */\nHLPFILE_WINDOWINFO*     WINHELP_GetWindowInfo(HLPFILE* hlpfile, LPCSTR name)\n{\n    static      HLPFILE_WINDOWINFO      mwi;\n    unsigned int     i;\n\n    if (!name || !name[0])\n        name = Globals.active_win->info->name;\n\n    if (hlpfile)\n        for (i = 0; i < hlpfile->numWindows; i++)\n            if (!lstrcmpiA(hlpfile->windows[i].name, name))\n                return &hlpfile->windows[i];\n\n    if (lstrcmpiA(name, \"main\") != 0)\n    {\n        WINE_FIXME(\"Couldn't find window info for %s\\n\", debugstr_a(name));\n        assert(0);\n        return NULL;\n    }\n    if (hlpfile && !hlpfile->lpszTitle[0])\n        LoadStringA(Globals.hInstance, STID_WINE_HELP, hlpfile->lpszTitle, 128);\n    if (!mwi.name[0])\n    {\n        strcpy(mwi.type, \"primary\");\n        strcpy(mwi.name, \"main\");\n        if (hlpfile)\n        {\n            char        tmp[128];\n            LoadStringA(Globals.hInstance, STID_WINE_HELP, tmp, sizeof(tmp));\n            snprintf(mwi.caption, sizeof(mwi.caption), \"%s %s - %s\",\n                     hlpfile->lpszTitle, tmp, hlpfile->lpszPath);\n        }\n        else\n            LoadStringA(Globals.hInstance, STID_WINE_HELP, mwi.caption, sizeof(mwi.caption));\n        mwi.origin.x = mwi.origin.y = mwi.size.cx = mwi.size.cy = CW_USEDEFAULT;\n        mwi.style = SW_SHOW;\n        mwi.win_style = WS_OVERLAPPEDWINDOW;\n        mwi.sr_color = mwi.nsr_color = 0xFFFFFF;\n    }\n    return &mwi;\n}\n\n/******************************************************************\n *\t\tHLPFILE_GetPopupWindowInfo\n *\n *\n */\nstatic HLPFILE_WINDOWINFO*     WINHELP_GetPopupWindowInfo(HLPFILE* hlpfile,\n                                                          WINHELP_WINDOW* parent, LPARAM mouse)\n{\n    static      HLPFILE_WINDOWINFO      wi;\n\n    RECT parent_rect;\n    \n    wi.type[0] = wi.name[0] = wi.caption[0] = '\\0';\n\n    /* Calculate horizontal size and position of a popup window */\n    GetWindowRect(parent->hMainWnd, &parent_rect);\n    wi.size.cx = (parent_rect.right  - parent_rect.left) / 2;\n    wi.size.cy = 10; /* need a non null value, so that borders are taken into account while computing */\n\n    wi.origin.x = (short)LOWORD(mouse);\n    wi.origin.y = (short)HIWORD(mouse);\n    ClientToScreen(parent->hMainWnd, &wi.origin);\n    wi.origin.x -= wi.size.cx / 2;\n    wi.origin.x  = min(wi.origin.x, GetSystemMetrics(SM_CXSCREEN) - wi.size.cx);\n    wi.origin.x  = max(wi.origin.x, 0);\n\n    wi.style = SW_SHOW;\n    wi.win_style = WS_POPUP | WS_BORDER;\n    if (parent->page->file->has_popup_color)\n        wi.sr_color = parent->page->file->popup_color;\n    else\n        wi.sr_color = parent->info->sr_color;\n    wi.nsr_color = 0xFFFFFF;\n\n    return &wi;\n}\n\ntypedef struct\n{\n    WORD size;\n    WORD command;\n    LONG data;\n    LONG reserved;\n    WORD ofsFilename;\n    WORD ofsData;\n    WORD ofsPath;\n} WINEHELP,*LPWINEHELP;\n\nstatic BOOL WINHELP_HasWorkingWindow(void)\n{\n    if (!Globals.active_win) return FALSE;\n    if (Globals.active_win->next || Globals.win_list != Globals.active_win) return TRUE;\n    return Globals.active_win->page != NULL && Globals.active_win->page->file != NULL;\n}\n\nstatic void comp_xWBTreeKey(void *p, const void *key, int leaf, void **next)\n{\n    *next = (char*)p + strlen((char*)p) + (leaf?7:3);\n    return stricmp(p, key);\n}\n\n\n/******************************************************************\n *\t\tWINHELP_HandleCommand\n *\n *\n */\nstatic LRESULT  WINHELP_HandleCommand(HWND hSrcWnd, WINEHELP *wh, BOOL w32)\n{\n    if (wh)\n    {\n        char*   ptr = (wh->ofsFilename) ? (LPSTR)wh + wh->ofsFilename : NULL;\n        if (!w32 && wh->ofsPath)\n            SetCurrentDirectoryA((LPSTR)wh + wh->ofsPath);\n        else if (w32)\n        {\n            DWORD pid;\n            HANDLE proc;\n            GetWindowThreadProcessId(hSrcWnd, &pid);\n            proc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);\n            if (proc)\n            {\n                WCHAR path[MAX_PATH];\n                WCHAR *sep;\n                path[0] = 0;\n                GetModuleFileNameExW(proc, NULL, path, MAX_PATH);\n                sep = wcsrchr(path, '\\\\');\n                if (sep)\n                {\n                    sep[0] = 0;\n                    SetCurrentDirectoryW(path);\n                }\n                CloseHandle(proc);\n            }\n        }\n\n        WINE_TRACE(\"Got[%u]: cmd=%u data=%08x fn=%s\\n\",\n                   wh->size, wh->command, wh->data, debugstr_a(ptr));\n        switch (wh->command)\n        {\n        case HELP_CONTEXT:\n            if (ptr)\n            {\n                MACRO_JumpContext(ptr, \"main\", wh->data);\n            }\n            if (!WINHELP_HasWorkingWindow()) MACRO_Exit();\n            break;\n        case HELP_QUIT:\n            MACRO_Exit();\n            break;\n        case HELP_CONTENTS:\n            if (ptr)\n            {\n                MACRO_JumpContents(ptr, \"main\");\n            }\n            if (!WINHELP_HasWorkingWindow()) MACRO_Exit();\n            break;\n        case HELP_HELPONHELP:\n            MACRO_HelpOn();\n            if (!WINHELP_HasWorkingWindow()) MACRO_Exit();\n            break;\n        /* case HELP_SETINDEX: */\n        case HELP_SETCONTENTS:\n            if (ptr)\n            {\n                MACRO_SetContents(ptr, wh->data);\n            }\n            break;\n        case HELP_CONTEXTPOPUP:\n            if (ptr)\n            {\n                MACRO_PopupContext(ptr, wh->data);\n            }\n            break;\n        /* case HELP_FORCEFILE:*/\n        /* case HELP_CONTEXTMENU: */\n        case HELP_FINDER:\n            /* in fact, should be the topic dialog box */\n            WINE_FIXME(\"HELP_FINDER: stub\\n\");\n            if (ptr)\n            {\n                MACRO_JumpHash(ptr, \"main\", 0);\n            }\n            break;\n        case HELP_PARTIALKEY:\n        case HELP_KEY:\n        {\n            HLPFILE *hlpfile = WINHELP_LookupHelpFile(ptr);\n            if (!hlpfile)\n            {\n                if (!WINHELP_HasWorkingWindow()) MACRO_Exit();\n                break;\n            }\n            char *keywords = ((char *)wh + wh->ofsData);\n            if (!WINHELP_SearchKey('K', keywords, 0, NULL, NULL, Globals.active_win, hlpfile))\n            {\n                HLPFILE_FreeHlpFile(hlpfile);\n                if (!WINHELP_HasWorkingWindow()) MACRO_Exit();\n                break;\n            }\n            break;\n        }\n        case HELP_COMMAND:\n        {\n            // TODO: filename might be different than the open file\n            if (ptr)\n            {\n                MACRO_ExecuteMacro(Globals.active_win, (LPSTR)wh + wh->ofsData);\n            }\n            break;\n        }\n        case HELP_MULTIKEY:\n        {\n            HLPFILE *hlpfile = WINHELP_LookupHelpFile(ptr);\n            if (!hlpfile)\n            {\n                if (!WINHELP_HasWorkingWindow()) MACRO_Exit();\n                break;\n            }\n            MULTIKEYHELPA *mkhelp = (MULTIKEYHELPA *)((char *)wh + wh->ofsData);\n            if (!WINHELP_SearchKey(mkhelp->mkKeylist, mkhelp->szKeyphrase, 0, NULL, NULL, Globals.active_win, hlpfile))\n            {\n                HLPFILE_FreeHlpFile(hlpfile);\n                if (!WINHELP_HasWorkingWindow()) MACRO_Exit();\n                break;\n            }\n            break;\n        }\n\n        /* case HELP_WM_HELP: */\n        /* case HELP_SETPOPUP_POS: */\n        /* case HELP_SETWINPOS: */\n        default:\n            WINE_FIXME(\"Unhandled command (%x) for remote winhelp control\\n\", wh->command);\n            break;\n        }\n    }\n    /* Always return success for now */\n    return 1;\n}\n\nvoid            WINHELP_LayoutMainWindow(WINHELP_WINDOW* win)\n{\n    RECT        rect, button_box_rect;\n    INT         text_top = 0;\n    HWND        hButtonBoxWnd = GetDlgItem(win->hMainWnd, CTL_ID_BUTTON);\n    HWND        hTextWnd = GetDlgItem(win->hMainWnd, CTL_ID_TEXT);\n\n    GetClientRect(win->hMainWnd, &rect);\n\n    /* Update button box and text Window */\n    SetWindowPos(hButtonBoxWnd, HWND_TOP,\n                 rect.left, rect.top,\n                 rect.right - rect.left,\n                 rect.bottom - rect.top, 0);\n\n    if (GetWindowRect(hButtonBoxWnd, &button_box_rect))\n        text_top = rect.top + button_box_rect.bottom - button_box_rect.top;\n\n    SetWindowPos(hTextWnd, HWND_TOP,\n                 rect.left, text_top,\n                 rect.right - rect.left,\n                 rect.bottom - text_top, 0);\n\n}\n\n/******************************************************************\n *\t\tWINHELP_DeleteButtons\n *\n */\nstatic void WINHELP_DeleteButtons(WINHELP_WINDOW* win)\n{\n    WINHELP_BUTTON*     b;\n    WINHELP_BUTTON*     bp;\n\n    for (b = win->first_button; b; b = bp)\n    {\n        DestroyWindow(b->hWnd);\n        bp = b->next;\n        HeapFree(GetProcessHeap(), 0, b);\n    }\n    win->first_button = NULL;\n}\n\n/******************************************************************\n *\t\tWINHELP_DeleteBackSet\n *\n */\nvoid WINHELP_DeleteBackSet(WINHELP_WINDOW* win)\n{\n    unsigned int i;\n\n    for (i = 0; i < win->back.index; i++)\n    {\n        HLPFILE_FreeHlpFile(win->back.set[i].page->file);\n        win->back.set[i].page = NULL;\n    }\n    win->back.index = 0;\n}\n\n/******************************************************************\n *             WINHELP_DeletePageLinks\n *\n */\nstatic void WINHELP_DeletePageLinks(HLPFILE_PAGE* page)\n{\n    HLPFILE_LINK*       curr;\n    HLPFILE_LINK*       next;\n\n    for (curr = page->first_link; curr; curr = next)\n    {\n        next = curr->next;\n        HeapFree(GetProcessHeap(), 0, curr);\n    }\n}\n\n/***********************************************************************\n *\n *           WINHELP_GrabWindow\n */\nWINHELP_WINDOW* WINHELP_GrabWindow(WINHELP_WINDOW* win)\n{\n    WINE_TRACE(\"Grab %p#%d++\\n\", win, win->ref_count);\n    win->ref_count++;\n    return win;\n}\n\n/***********************************************************************\n *\n *           WINHELP_ReleaseWindow\n */\nBOOL WINHELP_ReleaseWindow(WINHELP_WINDOW* win)\n{\n    WINE_TRACE(\"Release %p#%d--\\n\", win, win->ref_count);\n\n    if (!--win->ref_count)\n    {\n        WINHELP_WINDOW**    w;\n\n        for (w = &Globals.win_list; *w; w = &(*w)->next)\n        {\n            if (*w == win)\n            {\n                *w = win->next;\n                break;\n            }\n        }\n\n        if (Globals.active_win == win)\n        {\n            Globals.active_win = Globals.win_list;\n            if (Globals.win_list)\n                SetActiveWindow(Globals.win_list->hMainWnd);\n        }\n\n        if (win == Globals.active_popup)\n            Globals.active_popup = NULL;\n        PostMessageW(win->hMainWnd, WM_CLOSE, 0, 0);\n        return FALSE;\n    }\n    return TRUE;\n}\n\n/***********************************************************************\n *\n *           WINHELP_DeleteWindow\n */\nstatic void WINHELP_DeleteWindow(WINHELP_WINDOW* win)\n{\n    WINHELP_WINDOW**    w;\n    BOOL bExit;\n    HWND hTextWnd;\n\n    for (w = &Globals.win_list; *w; w = &(*w)->next)\n    {\n        if (*w == win)\n        {\n            *w = win->next;\n            break;\n        }\n    }\n    bExit = (Globals.wVersion >= 4 && !lstrcmpiA(win->info->name, \"main\"));\n\n    if (Globals.active_win == win)\n    {\n        Globals.active_win = Globals.win_list;\n        if (Globals.win_list)\n            SetActiveWindow(Globals.win_list->hMainWnd);\n    }\n\n    if (win == Globals.active_popup)\n        Globals.active_popup = NULL;\n\n    hTextWnd = GetDlgItem(win->hMainWnd, CTL_ID_TEXT);\n    SetWindowLongPtrA(hTextWnd, GWLP_WNDPROC, (LONG_PTR)win->origRicheditWndProc);\n\n    WINHELP_DeleteButtons(win);\n\n    if (win->page) WINHELP_DeletePageLinks(win->page);\n    if (win->hHistoryWnd) DestroyWindow(win->hHistoryWnd);\n\n    DeleteObject(win->hBrush);\n\n    WINHELP_DeleteBackSet(win);\n\n    if (win->page) HLPFILE_FreeHlpFile(win->page->file);\n    HeapFree(GetProcessHeap(), 0, win);\n\n    if (bExit) MACRO_Exit();\n    if (!Globals.win_list)\n        PostQuitMessage(0);\n}\n\nstatic char* WINHELP_GetCaption(WINHELP_WNDPAGE* wpage)\n{\n    if (((wpage->wininfo->flags & 4) && (wpage->wininfo->caption[0])) || !wpage->page)\n        return wpage->wininfo->caption;\n    return wpage->page->file->lpszTitle;\n}\n\nstatic void WINHELP_RememberPage(WINHELP_WINDOW* win, WINHELP_WNDPAGE* wpage)\n{\n    unsigned        num;\n\n    if (!Globals.history.index || Globals.history.set[0].page != wpage->page)\n    {\n        num = ARRAY_SIZE(Globals.history.set);\n        /* we're full, remove latest entry */\n        if (Globals.history.index == num)\n        {\n            HLPFILE_FreeHlpFile(Globals.history.set[num - 1].page->file);\n            Globals.history.index--;\n        }\n        memmove(&Globals.history.set[1], &Globals.history.set[0],\n                Globals.history.index * sizeof(Globals.history.set[0]));\n        Globals.history.set[0] = *wpage;\n        Globals.history.index++;\n        wpage->page->file->wRefCount++;\n    }\n    if (win->hHistoryWnd) InvalidateRect(win->hHistoryWnd, NULL, TRUE);\n\n    num = ARRAY_SIZE(win->back.set);\n    if (win->back.index == num)\n    {\n        /* we're full, remove latest entry */\n        HLPFILE_FreeHlpFile(win->back.set[0].page->file);\n        memmove(&win->back.set[0], &win->back.set[1],\n                (num - 1) * sizeof(win->back.set[0]));\n        win->back.index--;\n    }\n    win->back.set[win->back.index++] = *wpage;\n    wpage->page->file->wRefCount++;\n}\n\nstatic HLPFILE_HOTSPOTLINK* WINHELP_FindHotSpot(WINHELP_WINDOW* win, LPARAM pos)\n{\n    int x = LOWORD(pos), y = HIWORD(pos);\n    POINTL pntl = {x, y};\n    HWND hwndtext = GetDlgItem(win->hMainWnd, CTL_ID_TEXT);\n    LRESULT cp = SendMessageW(hwndtext, EM_CHARFROMPOS, 0, &pntl);\n    HLPFILE_HOTSPOTLINK* hs = win->page->first_hs;\n    while (hs)\n    {\n        if ((cp == hs->link.cpMin) || (cp == (hs->link.cpMin + 1)))\n        {\n            SendMessageW(hwndtext, EM_POSFROMCHAR, &pntl, hs->link.cpMin);\n            if ((x > pntl.x + hs->x) && (x <= pntl.x + hs->x + hs->width) &&\n                (y > pntl.y + hs->y) && (y <= pntl.y + hs->y + hs->height))\n                return hs;\n        }\n        hs = hs->next;\n    }\n    return NULL;\n}\n\nstatic LRESULT CALLBACK WINHELP_RicheditWndProc(HWND hWnd, UINT msg,\n                                                WPARAM wParam, LPARAM lParam)\n{\n    WINHELP_WINDOW *win = (WINHELP_WINDOW*) GetWindowLongPtrW(GetParent(hWnd), 0);\n    LRESULT result;\n    switch(msg)\n    {\n        case WM_SHOWWINDOW:\n            if (!wParam)\n            {\n                DestroyWindow(hWnd);\n                return 0;\n            }\n        default:\n            return CallWindowProcA(win->origRicheditWndProc, hWnd, msg, wParam, lParam);\n        case WM_SIZE:\n            result = CallWindowProcA(win->origRicheditWndProc, hWnd, msg, wParam, lParam);\n            if (win->page && win->page->first_var_row)\n            {\n                IRichEditOle *reole;\n                ITextDocument2 *doc;\n                SendMessageW(hWnd, EM_GETOLEINTERFACE, 0, &reole);\n                HRESULT res = reole->lpVtbl->QueryInterface(reole, &IID_ITextDocument2, &doc);\n                if (SUCCEEDED(res))\n                {\n                    ITextRange2 *range;\n                    SendMessageW(hWnd, EM_SETOPTIONS, ECOOP_AND, ~ECO_READONLY);\n                    res = doc->lpVtbl->Range(doc, 0, 0, &range);\n                    if (SUCCEEDED(res))\n                    {\n                        long width = LOWORD(lParam) - GetSystemMetrics(SM_CXVSCROLL);\n                        HLPFILE_ROW *next = win->page->first_var_row;\n                        while (next->next) next = next->next;\n                        while (next)\n                        {\n                            ITextRow *row;\n                            range->lpVtbl->SetStart(range, next->cpos);\n                            res = range->lpVtbl->GetRow(range, &row);\n                            if (FAILED(res)) break;\n                            for (int i = 0; i < next->cols; i++)\n                            {\n                                row->lpVtbl->SetCellIndex(row, i);\n                                row->lpVtbl->SetCellWidth(row, (width * 15 * next->width[i]) / 100);\n                            }\n                            row->lpVtbl->Apply(row, 1, tomCellStructureChangeOnly);\n                            row->lpVtbl->Release(row);\n                            next = next->prev;\n                        }\n                        range->lpVtbl->Release(range);\n                    }\n                    doc->lpVtbl->Release(doc);\n                    SendMessageW(hWnd, EM_SETOPTIONS, ECOOP_OR, ECO_READONLY);\n                }\n                reole->lpVtbl->Release(reole);\n            }\n            return result;\n        case WM_KEYDOWN:\n        case WM_KEYUP:\n        case WM_LBUTTONDOWN:\n        case WM_MOUSEMOVE:\n        case WM_SETFOCUS:\n            result = CallWindowProcA(win->origRicheditWndProc, hWnd, msg, wParam, lParam);\n            HideCaret(hWnd);\n            return result;\n         case WM_SETCURSOR:\n         {\n             DWORD messagePos = GetMessagePos();\n             POINT pt = {LOWORD(messagePos), HIWORD(messagePos)};\n             ScreenToClient(hWnd, &pt);\n             if (win->page && WINHELP_FindHotSpot(win, MAKELPARAM(pt.x, pt.y)))\n             {\n                 SetCursor(win->hHandCur);\n                 return 0;\n             }\n             return CallWindowProcA(win->origRicheditWndProc, hWnd, msg, wParam, lParam);\n         }\n    }\n}\n\nHRESULT STDMETHODCALLTYPE WINHELP_OLE_Callback_QueryInterface(IRichEditOleCallback *This, REFIID riid, LPVOID FAR * lplpObj)\n{\n    return S_OK;\n}\nULONG STDMETHODCALLTYPE WINHELP_OLE_Callback_AddRef(IRichEditOleCallback *This)\n{\n    return 0;\n}\nULONG STDMETHODCALLTYPE WINHELP_OLE_Callback_Release (IRichEditOleCallback *This)\n{\n    return 0;\n}\nHRESULT STDMETHODCALLTYPE WINHELP_OLE_Callback_GetNewStorage (IRichEditOleCallback *This, LPSTORAGE *lplpstg)\n{\n    LPLOCKBYTES lpLockBytes = NULL;\n    HRESULT result = CreateILockBytesOnHGlobal(NULL, TRUE, &lpLockBytes);\n    if (result != S_OK)\n        return result;\n    result = StgCreateDocfileOnILockBytes(lpLockBytes, STGM_SHARE_EXCLUSIVE | STGM_CREATE | STGM_READWRITE, 0, lplpstg);\n    if (result != S_OK)\n        lpLockBytes->lpVtbl->Release(lpLockBytes);\n    return result;\n\n}\nHRESULT STDMETHODCALLTYPE WINHELP_OLE_Callback_GetInPlaceContext (IRichEditOleCallback *This, LPOLEINPLACEFRAME FAR * lplpFrame,\n    LPOLEINPLACEUIWINDOW FAR * lplpDoc,\n    LPOLEINPLACEFRAMEINFO lpFrameInfo)\n{\n    return S_OK;\n}\nHRESULT STDMETHODCALLTYPE WINHELP_OLE_Callback_ShowContainerUI (IRichEditOleCallback *This, BOOL fShow)\n{\n    return S_OK;\n}\nHRESULT STDMETHODCALLTYPE WINHELP_OLE_Callback_QueryInsertObject (IRichEditOleCallback *This, LPCLSID lpclsid, LPSTORAGE lpstg,\n    LONG cp)\n{\n    return S_OK;\n}\nHRESULT STDMETHODCALLTYPE WINHELP_OLE_Callback_DeleteObject (IRichEditOleCallback *This, LPOLEOBJECT lpoleobj)\n{\n    return S_OK;\n}\nHRESULT STDMETHODCALLTYPE WINHELP_OLE_Callback_QueryAcceptData (IRichEditOleCallback *This, LPDATAOBJECT lpdataobj,\n    CLIPFORMAT FAR * lpcfFormat, DWORD reco,\n    BOOL fReally, HGLOBAL hMetaPict)\n{\n    return S_OK;\n}\nHRESULT STDMETHODCALLTYPE WINHELP_OLE_Callback_ContextSensitiveHelp  (IRichEditOleCallback *This, BOOL fEnterMode)\n{\n    return S_OK;\n}\nHRESULT STDMETHODCALLTYPE WINHELP_OLE_Callback_GetClipboardData (IRichEditOleCallback *This, CHARRANGE FAR * lpchrg, DWORD reco, LPDATAOBJECT FAR * lplpdataobj)\n{\n    return E_NOTIMPL;\n}\nHRESULT STDMETHODCALLTYPE WINHELP_OLE_Callback_GetDragDropEffect (IRichEditOleCallback *This, BOOL fDrag, DWORD grfKeyState,\n    LPDWORD pdwEffect)\n{\n    return S_OK;\n}\nHRESULT STDMETHODCALLTYPE WINHELP_OLE_Callback_GetContextMenu (IRichEditOleCallback *This, WORD seltype, LPOLEOBJECT lpoleobj,\n    CHARRANGE FAR * lpchrg,\n    HMENU FAR * lphmenu)\n{\n    return S_OK;\n}\nIRichEditOleCallbackVtbl callbackv =\n{\n    WINHELP_OLE_Callback_QueryInterface,\n    WINHELP_OLE_Callback_AddRef,\n    WINHELP_OLE_Callback_Release,\n    WINHELP_OLE_Callback_GetNewStorage,\n    WINHELP_OLE_Callback_GetInPlaceContext,\n    WINHELP_OLE_Callback_ShowContainerUI,\n    WINHELP_OLE_Callback_QueryInsertObject,\n    WINHELP_OLE_Callback_DeleteObject,\n    WINHELP_OLE_Callback_QueryAcceptData,\n    WINHELP_OLE_Callback_ContextSensitiveHelp,\n    WINHELP_OLE_Callback_GetClipboardData,\n    WINHELP_OLE_Callback_GetDragDropEffect,\n    WINHELP_OLE_Callback_GetContextMenu\n};\nIRichEditOleCallback callback = { &callbackv };\n/***********************************************************************\n *\n *           WINHELP_CreateHelpWindow\n */\nBOOL WINHELP_CreateHelpWindow(WINHELP_WNDPAGE* wpage, int nCmdShow, BOOL remember)\n{\n    WINHELP_WINDOW*     win = NULL;\n    BOOL                bPrimary, bPopup, bReUsed = FALSE;\n    HICON               hIcon;\n    HWND                hTextWnd = NULL;\n    WCHAR               caption[60];\n\n    bPrimary = !lstrcmpiA(wpage->wininfo->name, \"main\");\n    bPopup = !bPrimary && (wpage->wininfo->win_style & WS_POPUP);\n\n    if (!bPopup)\n    {\n        for (win = Globals.win_list; win; win = win->next)\n        {\n            if (!lstrcmpiA(win->info->name, wpage->wininfo->name))\n            {\n                if (win->page == wpage->page && win->info == wpage->wininfo && win->offset == wpage->relative)\n                {\n                    /* see #22979, some hlp files have a macro (run at page opening), which\n                     * jumps to the very same page\n                     * Exit gracefully in that case\n                     */\n                    return TRUE;\n                }\n                WINHELP_DeleteButtons(win);\n                bReUsed = TRUE;\n                int codepage = wpage->page ? wpage->page->file->codepage : CP_ACP;\n                MultiByteToWideChar(codepage, 0, WINHELP_GetCaption(wpage), -1, caption, 60);\n                SetWindowTextW(win->hMainWnd, caption);\n                if (win->info != wpage->wininfo)\n                {\n                    POINT   pt = {0, 0};\n                    SIZE    sz = {0, 0};\n                    DWORD   flags = SWP_NOSIZE | SWP_NOMOVE;\n\n                    if (wpage->wininfo->origin.x != CW_USEDEFAULT &&\n                        wpage->wininfo->origin.y != CW_USEDEFAULT)\n                    {\n                        pt = wpage->wininfo->origin;\n                        flags &= ~SWP_NOSIZE;\n                    }\n                    if (wpage->wininfo->size.cx != CW_USEDEFAULT &&\n                        wpage->wininfo->size.cy != CW_USEDEFAULT)\n                    {\n                        sz = wpage->wininfo->size;\n                        flags &= ~SWP_NOMOVE;\n                    }\n                    SetWindowPos(win->hMainWnd, HWND_TOP, pt.x, pt.y, sz.cx, sz.cy, flags);\n                }\n\n                if (wpage->page && win->page && wpage->page->file != win->page->file)\n                    WINHELP_DeleteBackSet(win);\n                WINHELP_InitFonts(win->hMainWnd);\n\n                win->page = wpage->page;\n                win->info = wpage->wininfo;\n                win->offset = wpage->relative;\n                hTextWnd = GetDlgItem(win->hMainWnd, CTL_ID_TEXT);\n                // hide the window then destroy it in the message loop\n                ShowWindow(hTextWnd, 0);\n                break;\n            }\n        }\n    }\n\n    if (!win)\n    {\n        /* Initialize WINHELP_WINDOW struct */\n        win = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WINHELP_WINDOW));\n        if (!win) return FALSE;\n        win->next = Globals.win_list;\n        Globals.win_list = win;\n\n        win->hHandCur = LoadCursorW(0, (LPWSTR)IDC_HAND);\n        win->back.index = 0;\n        win->font_scale = 1;\n        WINHELP_GrabWindow(win);\n    }\n    win->page = wpage->page;\n    win->info = wpage->wininfo;\n    WINHELP_GrabWindow(win);\n\n    if (!bPopup && wpage->page && remember)\n    {\n        WINHELP_RememberPage(win, wpage);\n    }\n\n    if (bPopup)\n        Globals.active_popup = win;\n    else\n        Globals.active_win = win;\n\n    /* Initialize default pushbuttons */\n    if (bPrimary && wpage->page)\n    {\n        CHAR    buffer[MAX_STRING_LEN];\n\n        LoadStringA(Globals.hInstance, STID_CONTENTS, buffer, sizeof(buffer));\n        MACRO_CreateButton(\"BTN_CONTENTS\", buffer, \"Contents()\");\n        LoadStringA(Globals.hInstance, STID_INDEX, buffer, sizeof(buffer));\n        MACRO_CreateButton(\"BTN_INDEX\", buffer, \"Finder()\");\n        LoadStringA(Globals.hInstance, STID_BACK, buffer, sizeof(buffer));\n        MACRO_CreateButton(\"BTN_BACK\", buffer, \"Back()\");\n        if (win->back.index <= 1) MACRO_DisableButton(\"BTN_BACK\");\n    }\n\n    if (!bReUsed)\n    {\n        int codepage = wpage->page ? wpage->page->file->codepage : CP_ACP;\n        MultiByteToWideChar(codepage, 0, WINHELP_GetCaption(wpage), -1, caption, 60);\n        win->hMainWnd = CreateWindowExW((bPopup) ? WS_EX_TOOLWINDOW : WS_EX_CLIENTEDGE, MAIN_WIN_CLASS_NAME,\n                                       caption,\n                                       bPrimary ? WS_OVERLAPPEDWINDOW : wpage->wininfo->win_style,\n                                       wpage->wininfo->origin.x, wpage->wininfo->origin.y,\n                                       wpage->wininfo->size.cx, wpage->wininfo->size.cy,\n                                       bPopup ? Globals.active_win->hMainWnd : NULL,\n                                       bPrimary ? LoadMenuW(Globals.hInstance, MAKEINTRESOURCEW(MAIN_MENU)) : 0,\n                                       Globals.hInstance, win);\n        if (!bPopup)\n            /* Create button box and text Window */\n            CreateWindowW(BUTTON_BOX_WIN_CLASS_NAME, \"\", WS_CHILD | WS_VISIBLE,\n                         0, 0, 0, 0, win->hMainWnd, (HMENU)CTL_ID_BUTTON, Globals.hInstance, NULL);\n    }\n\n    hTextWnd = CreateWindowW(MSFTEDIT_CLASS, NULL,\n                    ES_MULTILINE | ES_READONLY | WS_CHILD | WS_HSCROLL | WS_VSCROLL | WS_VISIBLE,\n                    0, 0, 0, 0, win->hMainWnd, (HMENU)CTL_ID_TEXT, Globals.hInstance, NULL);\n    /* set ole callback for showing bitmaps */\n    SendMessageW(hTextWnd, EM_SETOLECALLBACK, NULL, &callback);\n    SendMessageW(hTextWnd, EM_SHOWSCROLLBAR, SB_HORZ, FALSE);\n    SendMessageW(hTextWnd, EM_SETEVENTMASK, 0,\n                    SendMessageW(hTextWnd, EM_GETEVENTMASK, 0, 0) | ENM_MOUSEEVENTS | ENM_LINK);\n    win->origRicheditWndProc = (WNDPROC)SetWindowLongPtrA(hTextWnd, GWLP_WNDPROC,\n                    (LONG_PTR)WINHELP_RicheditWndProc);\n\n    hIcon = (wpage->page) ? wpage->page->file->hIcon : NULL;\n    if (!hIcon) hIcon = LoadImageW(Globals.hInstance, MAKEINTRESOURCEW(IDI_WINHELP), IMAGE_ICON,\n                                  GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED);\n    SendMessageW(win->hMainWnd, WM_SETICON, ICON_SMALL, (DWORD_PTR)hIcon);\n\n    /* Initialize file specific pushbuttons */\n    if (!(wpage->wininfo->win_style & WS_POPUP) && wpage->page)\n    {\n        HLPFILE_MACRO  *macro;\n        for (macro = wpage->page->file->first_macro; macro; macro = macro->next)\n        {\n            // don't jump to contents on every page load\n            if (!strcmp(macro->lpszMacro, \"Contents()\"))\n                continue;\n            MACRO_ExecuteMacro(win, macro->lpszMacro);\n        }\n\n        for (macro = wpage->page->first_macro; macro; macro = macro->next)\n            MACRO_ExecuteMacro(win, macro->lpszMacro);\n    }\n    /* See #17681, in some cases, the newly created window is closed by the macros it contains\n     * (braindead), so deal with this case\n     */\n    for (win = Globals.win_list; win; win = win->next)\n    {\n        if (!lstrcmpiA(win->info->name, wpage->wininfo->name)) break;\n    }\n    if (!win || !WINHELP_ReleaseWindow(win)) return TRUE;\n\n    if (bPopup)\n    {\n        DWORD   mask = SendMessageW(hTextWnd, EM_GETEVENTMASK, 0, 0);\n\n        win->font_scale = Globals.active_win->font_scale;\n        WINHELP_SetupText(hTextWnd, win, wpage->relative);\n\n        /* we need the window to be shown for richedit to compute the size */\n        ShowWindow(win->hMainWnd, nCmdShow);\n        SendMessageW(hTextWnd, EM_SETEVENTMASK, 0, mask | ENM_REQUESTRESIZE);\n        SendMessageW(hTextWnd, EM_REQUESTRESIZE, 0, 0);\n        SendMessageW(hTextWnd, EM_SETEVENTMASK, 0, mask);\n    }\n    else\n    {\n        WINHELP_SetupText(hTextWnd, win, wpage->relative);\n        WINHELP_LayoutMainWindow(win);\n        ShowWindow(win->hMainWnd, nCmdShow);\n    }\n\n    return TRUE;\n}\n\n/******************************************************************\n *             WINHELP_OpenHelpWindow\n * Main function to search for a page and display it in a window\n */\nBOOL WINHELP_OpenHelpWindow(HLPFILE_PAGE* (*lookup)(HLPFILE*, LONG, ULONG*),\n                            HLPFILE* hlpfile, LONG val, HLPFILE_WINDOWINFO* wi,\n                            int nCmdShow)\n{\n    WINHELP_WNDPAGE     wpage;\n\n    wpage.page = lookup(hlpfile, val, &wpage.relative);\n    if (wpage.page) wpage.page->file->wRefCount++;\n    wpage.wininfo = wi;\n    return WINHELP_CreateHelpWindow(&wpage, nCmdShow, TRUE);\n}\n\nstatic void WINHELP_DoLink(WINHELP_WINDOW* win, HLPFILE_LINK* link, DWORD pos)\n{\n    HLPFILE*                hlpfile;\n    HLPFILE_WINDOWINFO*     wi;\n    switch (link->cookie)\n    {\n        case hlp_link_link:\n            if ((hlpfile = WINHELP_LookupHelpFile(link->string)))\n            {\n                if (link->window == -1 || link->windowName)\n                    wi = WINHELP_GetWindowInfo(hlpfile, link->windowName ? link->windowName : \"main\");\n                else if (link->window == -2)\n                {\n                    wi = win->info;\n                    if (wi->win_style & WS_POPUP) wi = Globals.active_win->info;\n                }\n                else if (link->window < hlpfile->numWindows)\n                    wi = &hlpfile->windows[link->window];\n                else\n                {\n                    WINE_WARN(\"link to window %d/%d\\n\", link->window, hlpfile->numWindows);\n                    break;\n                }\n                WINHELP_OpenHelpWindow(HLPFILE_PageByHash, hlpfile, link->hash, wi, SW_NORMAL);\n            }\n            break;\n        case hlp_link_popup:\n            if ((hlpfile = WINHELP_LookupHelpFile(link->string)))\n                    WINHELP_OpenHelpWindow(HLPFILE_PageByHash, hlpfile, link->hash,\n                    WINHELP_GetPopupWindowInfo(hlpfile, win, pos),\n                    SW_NORMAL);\n            break;\n        case hlp_link_macro:\n            MACRO_ExecuteMacro(win, link->string);\n            break;\n        default:\n            WINE_FIXME(\"Unknown link cookie %d\\n\", link->cookie);\n    }\n}\n\n/******************************************************************\n *             WINHELP_HandleLink\n *\n */\nstatic BOOL WINHELP_HandleLink(ENLINK* enlink, WINHELP_WINDOW* win)\n{\n    HLPFILE_LINK*           link;\n    BOOL                    ret = FALSE;\n    WCHAR                   tmp[32];\n    TEXTRANGEW              chars;\n    const WCHAR             format[] = {'%', 'p', 0};\n\n    chars.chrg.cpMin = enlink->chrg.cpMin;\n    chars.chrg.cpMax = enlink->chrg.cpMax;\n    chars.lpstrText = &tmp;\n    SendMessageW(enlink->nmhdr.hwndFrom, EM_GETTEXTRANGE, 0, &chars);\n    swscanf(tmp, format, &link);\n\n    switch (enlink->msg)\n    {\n    case WM_LBUTTONDOWN:\n        WINHELP_DoLink(win, link, enlink->lParam);\n    case WM_MBUTTONDOWN:\n    case WM_RBUTTONDOWN:\n    case WM_NCLBUTTONDOWN:\n    case WM_NCMBUTTONDOWN:\n    case WM_NCRBUTTONDOWN:\n        ret = TRUE;\n        break;\n    }\n    return ret;\n}\n\n/***********************************************************************\n *\n *           WINHELP_CheckPopup\n */\nstatic BOOL WINHELP_CheckPopup(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT* lret)\n{\n    WINHELP_WINDOW*     popup = Globals.active_popup;\n    BOOL                ret = TRUE;\n\n    if (!Globals.active_popup) return FALSE;\n\n    switch (msg)\n    {\n    case WM_NOTIFY:\n        {\n            MSGFILTER*  msgf = (MSGFILTER*)lParam;\n            switch (msgf->nmhdr.code)\n            {\n            case EN_MSGFILTER:\n                if (!WINHELP_CheckPopup(hWnd, msgf->msg, msgf->wParam, msgf->lParam, NULL))\n                    return FALSE;\n                if (lret) *lret = 1;\n                return TRUE;\n            case EN_LINK:\n                if (!WINHELP_HandleLink((ENLINK *)lParam, Globals.active_popup))\n                    return FALSE;\n                break;\n            default:\n                return FALSE;\n            }\n            break;\n        }\n    case WM_ACTIVATE:\n        if (LOWORD(wParam) != WA_INACTIVE || (HWND)lParam == Globals.active_win->hMainWnd ||\n            (HWND)lParam == Globals.active_popup->hMainWnd ||\n            GetWindow((HWND)lParam, GW_OWNER) == Globals.active_win->hMainWnd)\n            return FALSE;\n        break;\n    case WM_LBUTTONDOWN:\n        if (hWnd == popup->hMainWnd)\n        {\n            static inloop = FALSE;\n            if (inloop)\n                return FALSE;\n            inloop = TRUE;\n            CallWindowProcA(popup->origRicheditWndProc, GetDlgItem(popup->hMainWnd, CTL_ID_TEXT), msg, wParam, lParam);\n            inloop = FALSE;\n            break;\n        }\n    case WM_MBUTTONDOWN:\n    case WM_RBUTTONDOWN:\n    case WM_NCLBUTTONDOWN:\n    case WM_NCMBUTTONDOWN:\n    case WM_NCRBUTTONDOWN:\n        if (hWnd != popup->hMainWnd)\n            ret = FALSE;\n        break;\n    default:\n        return FALSE;\n    }\n    WINHELP_ReleaseWindow(popup);\n    if (lret) *lret = 1;\n    return ret;\n}\n\n/***********************************************************************\n *\n *           WINHELP_ButtonWndProc\n */\nstatic LRESULT CALLBACK WINHELP_ButtonWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)\n{\n    if (WINHELP_CheckPopup(hWnd, msg, wParam, lParam, NULL)) return 0;\n\n    if (msg == WM_KEYDOWN)\n    {\n        switch (wParam)\n        {\n        case VK_UP:\n        case VK_DOWN:\n        case VK_PRIOR:\n        case VK_NEXT:\n        case VK_ESCAPE:\n            return SendMessageA(GetParent(hWnd), msg, wParam, lParam);\n        }\n    }\n\n    return CallWindowProcA(Globals.button_proc, hWnd, msg, wParam, lParam);\n}\n\n/***********************************************************************\n *\n *           WINHELP_ButtonBoxWndProc\n */\nstatic LRESULT CALLBACK WINHELP_ButtonBoxWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)\n{\n    WINDOWPOS      *winpos;\n    WINHELP_WINDOW *win;\n    WINHELP_BUTTON *button;\n    SIZE button_size;\n    INT  x, y;\n\n    if (WINHELP_CheckPopup(hWnd, msg, wParam, lParam, NULL)) return 0L;\n\n    switch (msg)\n    {\n    case WM_WINDOWPOSCHANGING:\n        winpos = (WINDOWPOS*) lParam;\n        win = (WINHELP_WINDOW*) GetWindowLongPtrW(GetParent(hWnd), 0);\n\n        /* Update buttons */\n        button_size.cx = 0;\n        button_size.cy = 0;\n        for (button = win->first_button; button; button = button->next)\n\t{\n            HDC  hDc;\n            SIZE textsize;\n            WCHAR u16str[21];\n            u16str[20] = 0;\n            MultiByteToWideChar(win->page->file->codepage, 0, button->lpszName, -1, u16str, 20);\n            if (!button->hWnd)\n            {\n                button->hWnd = CreateWindowW(STRING_BUTTON, u16str,\n                                            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,\n                                            0, 0, 0, 0,\n                                            hWnd, (HMENU) button->wParam,\n                                            Globals.hInstance, 0);\n                if (button->hWnd)\n                {\n                    if (Globals.button_proc == NULL)\n                    {\n                        NONCLIENTMETRICSW ncm;\n                        Globals.button_proc = (WNDPROC) GetWindowLongPtrW(button->hWnd, GWLP_WNDPROC);\n\n                        ncm.cbSize = sizeof(NONCLIENTMETRICSW);\n                        SystemParametersInfoW(SPI_GETNONCLIENTMETRICS,\n                                              sizeof(NONCLIENTMETRICSW), &ncm, 0);\n                        Globals.hButtonFont = CreateFontIndirectW(&ncm.lfMenuFont);\n                    }\n                    SetWindowLongPtrW(button->hWnd, GWLP_WNDPROC, (LONG_PTR) WINHELP_ButtonWndProc);\n                    if (Globals.hButtonFont)\n                        SendMessageW(button->hWnd, WM_SETFONT, (WPARAM)Globals.hButtonFont, TRUE);\n                }\n            }\n            hDc = GetDC(button->hWnd);\n            GetTextExtentPointW(hDc, u16str, wcslen(u16str), &textsize);\n            ReleaseDC(button->hWnd, hDc);\n\n            button_size.cx = max(button_size.cx, textsize.cx + BUTTON_CX);\n            button_size.cy = max(button_size.cy, textsize.cy + BUTTON_CY);\n\t}\n\n        x = 0;\n        y = 0;\n        for (button = win->first_button; button; button = button->next)\n\t{\n            SetWindowPos(button->hWnd, HWND_TOP, x, y, button_size.cx, button_size.cy, 0);\n\n            if (x + 2 * button_size.cx <= winpos->cx)\n                x += button_size.cx;\n            else\n                x = 0, y += button_size.cy;\n\t}\n        winpos->cy = y + (x ? button_size.cy : 0);\n        break;\n\n    case WM_COMMAND:\n        SendMessageW(GetParent(hWnd), msg, wParam, lParam);\n        break;\n\n    case WM_KEYDOWN:\n        switch (wParam)\n        {\n        case VK_UP:\n        case VK_DOWN:\n        case VK_PRIOR:\n        case VK_NEXT:\n        case VK_ESCAPE:\n            return SendMessageA(GetParent(hWnd), msg, wParam, lParam);\n        }\n        break;\n    }\n\n    return DefWindowProcW(hWnd, msg, wParam, lParam);\n}\n\n/******************************************************************\n *\t\tWINHELP_HistoryWndProc\n *\n *\n */\nstatic LRESULT CALLBACK WINHELP_HistoryWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)\n{\n    WINHELP_WINDOW*     win;\n    PAINTSTRUCT         ps;\n    HDC                 hDc;\n    TEXTMETRICW         tm;\n    unsigned int        i;\n    RECT                r;\n\n    switch (msg)\n    {\n    case WM_NCCREATE:\n        win = (WINHELP_WINDOW*)((LPCREATESTRUCTW)lParam)->lpCreateParams;\n        SetWindowLongPtrW(hWnd, 0, (ULONG_PTR)win);\n        win->hHistoryWnd = hWnd;\n        break;\n    case WM_CREATE:\n        hDc = GetDC(hWnd);\n        SelectObject(hDc, GetStockObject(DEFAULT_GUI_FONT));\n        GetTextMetricsW(hDc, &tm);\n        GetWindowRect(hWnd, &r);\n\n        r.right = r.left + 30 * tm.tmAveCharWidth;\n        r.bottom = r.top + ARRAY_SIZE(Globals.history.set) * tm.tmHeight;\n        AdjustWindowRect(&r, GetWindowLongW(hWnd, GWL_STYLE), FALSE);\n        if (r.left < 0) {r.right -= r.left; r.left = 0;}\n        if (r.top < 0) {r.bottom -= r.top; r.top = 0;}\n\n        MoveWindow(hWnd, r.left, r.top, r.right, r.bottom, TRUE);\n        ReleaseDC(hWnd, hDc);\n        break;\n    case WM_LBUTTONDOWN:\n        hDc = GetDC(hWnd);\n        SelectObject(hDc, GetStockObject(DEFAULT_GUI_FONT));\n        GetTextMetricsW(hDc, &tm);\n        i = HIWORD(lParam) / tm.tmHeight;\n        if (i < Globals.history.index)\n            WINHELP_CreateHelpWindow(&Globals.history.set[i], SW_SHOW, TRUE);\n        ReleaseDC(hWnd, hDc);\n        break;\n    case WM_PAINT:\n        hDc = BeginPaint(hWnd, &ps);\n        SelectObject(hDc, GetStockObject(DEFAULT_GUI_FONT));\n        GetTextMetricsW(hDc, &tm);\n\n        for (i = 0; i < Globals.history.index; i++)\n        {\n            if (Globals.history.set[i].page->file == Globals.active_win->page->file)\n            {\n                TextOutW(hDc, 0, i * tm.tmHeight,\n                        Globals.history.set[i].page->lpszTitle,\n                        wcslen(Globals.history.set[i].page->lpszTitle));\n            }\n            else\n            {\n                char        buffer[50];\n                WCHAR       title[101];\n                const char* ptr1;\n                const char* ptr2;\n                unsigned    len;\n\n                ptr1 = strrchr(Globals.history.set[i].page->file->lpszPath, '\\\\');\n                if (!ptr1) ptr1 = Globals.history.set[i].page->file->lpszPath;\n                else ptr1++;\n                ptr2 = strrchr(ptr1, '.');\n                len = ptr2 ? ptr2 - ptr1 : strlen(ptr1);\n                if (len > sizeof(buffer)) len = sizeof(buffer);\n                memcpy(buffer, ptr1, len);\n                if (len < sizeof(buffer)) buffer[len++] = ':';\n                buffer[len] = '\\0';\n                MultiByteToWideChar(CP_ACP, 0, buffer, -1, title, 100);\n                wcsncat(title, Globals.history.set[i].page->lpszTitle, 100);\n                title[100] = 0;\n                TextOutW(hDc, 0, i * tm.tmHeight, title, wcslen(title));\n            }\n        }\n        EndPaint(hWnd, &ps);\n        break;\n    case WM_DESTROY:\n        win = (WINHELP_WINDOW*) GetWindowLongPtrW(hWnd, 0);\n        if (hWnd == win->hHistoryWnd)\n            win->hHistoryWnd = 0;\n        break;\n    }\n    return DefWindowProcW(hWnd, msg, wParam, lParam);\n}\n\nstatic void comp_TTLBTree(void *p, const void *key, int leaf, void **next)\n{\n    *next = (char *)p + 5 + (leaf?strlen((char *)p + 4):1);\n    if (leaf && (*(DWORD *)*next > key))\n        return 0;\n    return *(DWORD *)p - (DWORD)key;\n}\n\nstatic INT_PTR CALLBACK WINHELP_TopicDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)\n{\n    static struct index_data* id;\n    HWND hListWnd = GetDlgItem(hWnd, IDC_TOPICS);\n\n    switch (msg)\n    {\n    case WM_INITDIALOG:\n    {\n        WCHAR u16str[100];\n        id = (struct index_data*)lParam;\n        for (int i = 0; i < id->count; i++)\n        {\n            DWORD toffset = ((DWORD *)id->offset)[i];\n            BYTE* ptr = HLPFILE_BPTreeSearch(id->hlpfile->ttlbtree, toffset, comp_TTLBTree) + 4;\n            MultiByteToWideChar(id->hlpfile->codepage, 0, ptr, -1, u16str, 100);\n            int idx = SendMessageW(hListWnd, LB_ADDSTRING, 0, (LPARAM)u16str);\n            SendMessageW(hListWnd, LB_SETITEMDATA, idx, (LPARAM)toffset);\n        }\n        SendMessageW(hListWnd, LB_SETCURSEL, 0, 0);\n    }\n    case WM_COMMAND:\n    {\n        int sel = SendMessageW(hListWnd, LB_GETCURSEL, 0, 0);\n        switch (LOWORD(wParam))\n        {\n        case IDC_TOPICS:\n            if (HIWORD(wParam) == LBN_DBLCLK)\n                EndDialog(hWnd, SendMessageW(hListWnd, LB_GETITEMDATA, sel, 0));\n            break;\n        case 1:\n            EndDialog(hWnd, SendMessageW(hListWnd, LB_GETITEMDATA, sel, 0));\n            break;\n        case 2:\n            EndDialog(hWnd, -1);\n            break;\n        }\n        break;\n    }\n    }\n    return 0;\n}\n\n\n\n/**************************************************************************\n * cb_KWBTree\n *\n * HLPFILE_BPTreeCallback enumeration function for '|KWBTREE' internal file.\n *\n */\nstatic void cb_KWBTree(void *p, void **next, void *cookie)\n{\n    HWND hListWnd = ((DWORD *)cookie)[0];\n    WORD cp = ((DWORD *)cookie)[1];\n    int count;\n    WCHAR u16str[100];\n\n    WINE_TRACE(\"Adding %s to search list\\n\", debugstr_a((char *)p));\n    MultiByteToWideChar(cp, 0, p, -1, u16str, 100);\n    SendMessageW(hListWnd, LB_INSERTSTRING, -1, (LPARAM)u16str);\n    count = SendMessageW(hListWnd, LB_GETCOUNT, 0, 0);\n    SendMessageW(hListWnd, LB_SETITEMDATA, count-1, (LPARAM)p);\n    *next = (char*)p + strlen((char*)p) + 7;\n}\n\n/**************************************************************************\n * WINHELP_IndexDlgProc\n *\n */\nstatic INT_PTR CALLBACK WINHELP_IndexDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)\n{\n    static struct index_data* id;\n    int sel;\n\n    switch (msg)\n    {\n    case WM_INITDIALOG:\n    {\n        DWORD data[2];\n        id = (struct index_data*)((PROPSHEETPAGEA*)lParam)->lParam;\n        data[0] = GetDlgItem(hWnd, IDC_INDEXLIST);\n        data[1] = id->hlpfile->codepage;\n        HLPFILE_BPTreeEnum(id->hlpfile->xw[0].tree, cb_KWBTree, data);\n        id->jump = FALSE;\n        id->offset = 1;\n        SendDlgItemMessageW(hWnd, IDC_INDEXLIST, LB_SETCURSEL, 0, 0);\n        return TRUE;\n    }\n    case WM_COMMAND:\n        switch (HIWORD(wParam))\n        {\n        case LBN_DBLCLK:\n            if (LOWORD(wParam) == IDC_INDEXLIST)\n                SendMessageW(GetParent(hWnd), PSM_PRESSBUTTON, PSBTN_OK, 0);\n            break;\n        }\n        break;\n    case WM_NOTIFY:\n\tswitch (((NMHDR*)lParam)->code)\n\t{\n\tcase PSN_APPLY:\n            sel = SendDlgItemMessageW(hWnd, IDC_INDEXLIST, LB_GETCURSEL, 0, 0);\n            if (sel != LB_ERR)\n            {\n                BYTE *p;\n\n                p = (BYTE*)SendDlgItemMessageW(hWnd, IDC_INDEXLIST, LB_GETITEMDATA, sel, 0);\n                p += strlen((char *)p);\n                id->count = *(short*)((char *)p + 1);\n                id->offset = *(ULONG*)((char *)p + 3);\n                id->offset = (DWORD)(id->hlpfile->xw[0].data + id->offset + 9);\n                if (id->count > 1)\n                {\n                    if (id->hlpfile->ttlbtree)\n                    {\n                        id->offset = DialogBoxParamW(NULL, MAKEINTRESOURCE(IDD_TOPIC), hWnd, WINHELP_TopicDlgProc, id);\n                        if (id->offset == 0xFFFFFFFF)\n                            return TRUE;\n                    }\n                    else\n                    {\n                        MessageBoxA(hWnd, \"topic not found\", \"Error\", MB_OK | MB_ICONSTOP);\n                        SetWindowLongPtrW(hWnd, DWLP_MSGRESULT, PSNRET_INVALID);\n                        return TRUE;\n                    }                        \n                }\n                else\n                    id->offset = *((ULONG*)id->offset);\n                if (id->offset == 0xFFFFFFFF)\n                {\n                    MessageBoxA(hWnd, \"macro keywords not supported yet\", \"Error\", MB_OK | MB_ICONSTOP);\n                    SetWindowLongPtrW(hWnd, DWLP_MSGRESULT, PSNRET_INVALID);\n                    return TRUE;\n                }\n                id->jump = TRUE;\n                SetWindowLongPtrW(hWnd, DWLP_MSGRESULT, PSNRET_NOERROR);\n            }\n            return TRUE;\n        default:\n            return FALSE;\n        }\n        break;\n    default:\n        break;\n    }\n    return FALSE;\n}\n\n/**************************************************************************\n * WINHELP_SearchDlgProc\n *\n */\nstatic INT_PTR CALLBACK WINHELP_SearchDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)\n{\n    switch (msg)\n    {\n    case WM_INITDIALOG:\n        return TRUE;\n    case WM_NOTIFY:\n\tswitch (((NMHDR*)lParam)->code)\n\t{\n\tcase PSN_APPLY:\n            SetWindowLongPtrW(hWnd, DWLP_MSGRESULT, PSNRET_NOERROR);\n            return TRUE;\n        default:\n            return FALSE;\n        }\n        break;\n    default:\n        break;\n    }\n    return FALSE;\n}\n\n/***********************************************************************\n *\n *           WINHELP_MainWndProc\n */\nstatic LRESULT CALLBACK WINHELP_MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)\n{\n    WINHELP_WINDOW *win;\n    WINHELP_BUTTON *button;\n    HWND hTextWnd;\n    LRESULT ret;\n\n    if (WINHELP_CheckPopup(hWnd, msg, wParam, lParam, &ret)) return ret;\n\n    switch (msg)\n    {\n    case WM_NCCREATE:\n        win = (WINHELP_WINDOW*) ((LPCREATESTRUCTW) lParam)->lpCreateParams;\n        SetWindowLongPtrW(hWnd, 0, (ULONG_PTR) win);\n        if (!win->page && Globals.isBook)\n            PostMessageW(hWnd, WM_COMMAND, MNID_FILE_OPEN, 0);\n        win->hMainWnd = hWnd;\n        break;\n\n    case WM_WINDOWPOSCHANGED:\n        WINHELP_LayoutMainWindow((WINHELP_WINDOW*) GetWindowLongPtrW(hWnd, 0));\n        break;\n\n    case WM_COMMAND:\n        win = (WINHELP_WINDOW*) GetWindowLongPtrW(hWnd, 0);\n        switch (LOWORD(wParam))\n\t{\n            /* Menu FILE */\n\tcase MNID_FILE_OPEN:    MACRO_FileOpen();       break;\n\tcase MNID_FILE_PRINT:\tMACRO_Print();          break;\n\tcase MNID_FILE_SETUP:\tMACRO_PrinterSetup();   break;\n\tcase MNID_FILE_EXIT:\tMACRO_Exit();           break;\n\n            /* Menu EDIT */\n\tcase MNID_EDIT_COPYDLG:\n            SendDlgItemMessageW(hWnd, CTL_ID_TEXT, WM_COPY, 0, 0);\n            break;\n\tcase MNID_EDIT_ANNOTATE:MACRO_Annotate();       break;\n\n            /* Menu Bookmark */\n\tcase MNID_BKMK_DEFINE:  MACRO_BookmarkDefine(); break;\n\n            /* Menu Help */\n\tcase MNID_HELP_HELPON:\tMACRO_HelpOn();         break;\n\tcase MNID_HELP_HELPTOP: MACRO_HelpOnTop();      break;\n\tcase MNID_HELP_ABOUT:\tMACRO_About();          break;\n\n            /* Context help */\n        case MNID_CTXT_ANNOTATE:MACRO_Annotate();       break;\n        case MNID_CTXT_COPY:\n            SendDlgItemMessageW(hWnd, CTL_ID_TEXT, WM_COPY, 0, 0);\n            break;\n        case MNID_CTXT_PRINT:   MACRO_Print();          break;\n        case MNID_OPTS_HISTORY: MACRO_History();        break;\n        case MNID_OPTS_FONTS_SMALL:\n        case MNID_CTXT_FONTS_SMALL:\n            win = (WINHELP_WINDOW*) GetWindowLongPtrW(hWnd, 0);\n            if (win->font_scale != 0)\n            {\n                win->font_scale = 0;\n                WINHELP_SetupText(GetDlgItem(hWnd, CTL_ID_TEXT), win, 0 /* FIXME */);\n            }\n            break;\n        case MNID_OPTS_FONTS_NORMAL:\n        case MNID_CTXT_FONTS_NORMAL:\n            win = (WINHELP_WINDOW*) GetWindowLongPtrW(hWnd, 0);\n            if (win->font_scale != 1)\n            {\n                win->font_scale = 1;\n                WINHELP_SetupText(GetDlgItem(hWnd, CTL_ID_TEXT), win, 0 /* FIXME */);\n            }\n            break;\n        case MNID_OPTS_FONTS_LARGE:\n        case MNID_CTXT_FONTS_LARGE:\n            win = (WINHELP_WINDOW*) GetWindowLongPtrW(hWnd, 0);\n            if (win->font_scale != 2)\n            {\n                win->font_scale = 2;\n                WINHELP_SetupText(GetDlgItem(hWnd, CTL_ID_TEXT), win, 0 /* FIXME */);\n            }\n            break;\n\n\tdefault:\n            /* Buttons */\n            for (button = win->first_button; button; button = button->next)\n                if (wParam == button->wParam) break;\n            if (button)\n                MACRO_ExecuteMacro(win, button->lpszMacro);\n            else if (!HIWORD(wParam))\n                MessageBoxW(0, MAKEINTRESOURCEW(STID_NOT_IMPLEMENTED),\n                            MAKEINTRESOURCEW(STID_WHERROR), MB_OK);\n            break;\n\t}\n        break;\n/* EPP     case WM_DESTROY: */\n/* EPP         if (Globals.hPopupWnd) DestroyWindow(Globals.hPopupWnd); */\n/* EPP         break; */\n    case WM_COPYDATA:\n    {\n        COPYDATASTRUCT*     cds = (COPYDATASTRUCT*)lParam;\n        WINEHELP*           wh;\n\n        if (cds->dwData != 0xA1DE505)\n        {\n            WINE_FIXME(\"Wrong magic number (%08lx)\\n\", cds->dwData);\n            return 0;\n        }\n            \n        return WINHELP_HandleCommand((HWND)wParam, cds->lpData, FALSE);\n    }\n\n    case 0x38: //WH_WINHELP\n        return WINHELP_HandleCommand((HWND)wParam, (WINEHELP *)lParam, TRUE);\n\n    case WM_CHAR:\n        if (wParam == 3)\n        {\n            SendDlgItemMessageW(hWnd, CTL_ID_TEXT, WM_COPY, 0, 0);\n            return 0;\n        }\n        break;\n\n    case WM_KEYDOWN:\n        win = (WINHELP_WINDOW*) GetWindowLongPtrW(hWnd, 0);\n        hTextWnd = GetDlgItem(win->hMainWnd, CTL_ID_TEXT);\n\n        switch (wParam)\n        {\n        case VK_UP:\n            SendMessageW(hTextWnd, EM_SCROLL, SB_LINEUP, 0);\n            return 0;\n        case VK_DOWN:\n            SendMessageW(hTextWnd, EM_SCROLL, SB_LINEDOWN, 0);\n            return 0;\n        case VK_PRIOR:\n            SendMessageW(hTextWnd, EM_SCROLL, SB_PAGEUP, 0);\n            return 0;\n        case VK_NEXT:\n            SendMessageW(hTextWnd, EM_SCROLL, SB_PAGEDOWN, 0);\n            return 0;\n        case VK_ESCAPE:\n            MACRO_Exit();\n            return 0;\n        }\n        break;\n\n    case WM_NOTIFY:\n        if (wParam == CTL_ID_TEXT)\n        {\n            RECT        rc;\n            RECT        orc;\n\n            switch (((NMHDR*)lParam)->code)\n            {\n            case EN_MSGFILTER:\n                {\n                    const MSGFILTER*    msgf = (const MSGFILTER*)lParam;\n                    switch (msgf->msg)\n                    {\n                    case WM_LBUTTONDOWN:\n                    {\n                        win = (WINHELP_WINDOW*)GetWindowLongPtrW(hWnd, 0);\n                        HLPFILE_HOTSPOTLINK* hs = WINHELP_FindHotSpot(win, msgf->lParam);\n                        if (hs)\n                        {\n                            WINHELP_DoLink(win, &hs->link, msgf->lParam);\n                            return TRUE;\n                        }\n                        break;\n                    }\n                    case WM_KEYUP:\n                        if (msgf->wParam == VK_ESCAPE)\n                            WINHELP_ReleaseWindow((WINHELP_WINDOW*)GetWindowLongPtrW(hWnd, 0));\n                        break;\n                    case WM_RBUTTONDOWN:\n                    {\n                        HMENU       hMenu;\n                        POINT       pt;\n\n                        win = (WINHELP_WINDOW*) GetWindowLongPtrW(hWnd, 0);\n                        hMenu = LoadMenuW(Globals.hInstance, MAKEINTRESOURCEW(CONTEXT_MENU));\n                        switch (win->font_scale)\n                        {\n                        case 0:\n                            CheckMenuItem(hMenu, MNID_CTXT_FONTS_SMALL,\n                                          MF_BYCOMMAND|MF_CHECKED);\n                            break;\n                        default:\n                            WINE_FIXME(\"Unsupported %d\\n\", win->font_scale);\n                            /* fall through */\n                        case 1:\n                            CheckMenuItem(hMenu, MNID_CTXT_FONTS_NORMAL,\n                                          MF_BYCOMMAND|MF_CHECKED);\n                            break;\n                        case 2:\n                            CheckMenuItem(hMenu, MNID_CTXT_FONTS_LARGE,\n                                          MF_BYCOMMAND|MF_CHECKED);\n                            break;\n                        }\n                        pt.x = (int)(short)LOWORD(msgf->lParam);\n                        pt.y = (int)(short)HIWORD(msgf->lParam);\n                        ClientToScreen(msgf->nmhdr.hwndFrom, &pt);\n                        TrackPopupMenu(GetSubMenu(hMenu, 0), TPM_LEFTALIGN|TPM_TOPALIGN,\n                                       pt.x, pt.y, 0, hWnd, NULL);\n                        DestroyMenu(hMenu);\n                    }\n                    break;\n                    default:\n                        break;\n                    }\n                }\n                break;\n\n            case EN_REQUESTRESIZE:\n                rc = ((REQRESIZE*)lParam)->rc;\n                win = (WINHELP_WINDOW*) GetWindowLongPtrW(hWnd, 0);\n                GetClientRect(win->hMainWnd, &orc);\n                /* permit the popup to get wider but not narrower */\n                if ((rc.right - rc.left) < orc.right)\n                {\n                    rc.left = orc.left;\n                    rc.right = orc.right;\n                }\n                AdjustWindowRect(&rc, GetWindowLongW(win->hMainWnd, GWL_STYLE),\n                                 FALSE);\n                SetWindowPos(win->hMainWnd, HWND_TOP, 0, 0,\n                             rc.right - rc.left, rc.bottom - rc.top,\n                             SWP_NOMOVE | SWP_NOZORDER);\n                WINHELP_LayoutMainWindow(win);\n                break;\n\n            case EN_LINK:\n                WINHELP_HandleLink((ENLINK *)lParam, (WINHELP_WINDOW*)GetWindowLongPtrW(hWnd, 0));\n                break;\n            }\n        }\n        break;\n\n    case WM_INITMENUPOPUP:\n        win = (WINHELP_WINDOW*) GetWindowLongPtrW(hWnd, 0);\n        CheckMenuItem((HMENU)wParam, MNID_OPTS_FONTS_SMALL,\n                      (win->font_scale == 0) ? MF_CHECKED : MF_UNCHECKED);\n        CheckMenuItem((HMENU)wParam, MNID_OPTS_FONTS_NORMAL,\n                      (win->font_scale == 1) ? MF_CHECKED : MF_UNCHECKED);\n        CheckMenuItem((HMENU)wParam, MNID_OPTS_FONTS_LARGE,\n                      (win->font_scale == 2) ? MF_CHECKED : MF_UNCHECKED);\n        break;\n    case WM_DESTROY:\n        win = (WINHELP_WINDOW*) GetWindowLongPtrW(hWnd, 0);\n        WINHELP_DeleteWindow(win);\n        break;\n    }\n    return DefWindowProcW(hWnd, msg, wParam, lParam);\n}\n\n/**************************************************************************\n * WINHELP_CreateIndexWindow\n *\n * Displays a dialog with keywords of current help file.\n *\n */\nBOOL WINHELP_CreateIndexWindow(BOOL is_search)\n{\n    HPROPSHEETPAGE      psPage[3];\n    PROPSHEETPAGEA      psp;\n    PROPSHEETHEADERA    psHead;\n    struct index_data   id;\n    char                buf[256];\n    WCHAR               u16buf[256];\n    if (Globals.active_win && Globals.active_win->page && Globals.active_win->page->file)\n        id.hlpfile = Globals.active_win->page->file;\n    else\n        return FALSE;\n\n    if (id.hlpfile->xw[0].id != 'K')\n    {\n        WINE_TRACE(\"Missing Keyword File\\n\");\n        return FALSE;\n    }\n\n    InitCommonControls();\n\n    id.jump = FALSE;\n    memset(&psp, 0, sizeof(psp));\n    psp.dwSize = sizeof(psp);\n    psp.dwFlags = 0;\n    psp.hInstance = Globals.hInstance;\n\n    psp.u.pszTemplate = MAKEINTRESOURCEA(IDD_INDEX);\n    psp.lParam = (LPARAM)&id;\n    psp.pfnDlgProc = WINHELP_IndexDlgProc;\n    psPage[0] = CreatePropertySheetPageW(&psp);\n\n    psp.u.pszTemplate = MAKEINTRESOURCEA(IDD_SEARCH);\n    psp.lParam = (LPARAM)&id;\n    psp.pfnDlgProc = WINHELP_SearchDlgProc;\n    psPage[1] = CreatePropertySheetPageW(&psp);\n\n    memset(&psHead, 0, sizeof(psHead));\n    psHead.dwSize = sizeof(psHead);\n\n    LoadStringA(Globals.hInstance, STID_PSH_INDEX, buf, sizeof(buf));\n    strcat(buf, Globals.active_win->info->caption);\n    MultiByteToWideChar(id.hlpfile->codepage, 0, buf, -1, u16buf, 256);\n\n    psHead.pszCaption = u16buf;\n    psHead.nPages = 2;\n    psHead.u2.nStartPage = is_search ? 1 : 0;\n    psHead.hwndParent = Globals.active_win->hMainWnd;\n    psHead.u3.phpage = psPage;\n    psHead.dwFlags = PSH_NOAPPLYNOW;\n\n    PropertySheetW(&psHead);\n    if (id.jump)\n    {\n        WINE_TRACE(\"got %d as an offset\\n\", id.offset);\n        WINHELP_OpenHelpWindow(HLPFILE_PageByOffset, id.hlpfile, id.offset,\n                               Globals.active_win->info, SW_NORMAL);\n    }\n    return TRUE;\n}\n\n/***********************************************************************\n *\n *           RegisterWinClasses\n */\nstatic BOOL WINHELP_RegisterWinClasses(void)\n{\n    WNDCLASSEXA class_main, class_button_box, class_history;\n\n    class_main.cbSize              = sizeof(class_main);\n    class_main.style               = CS_HREDRAW | CS_VREDRAW;\n    class_main.lpfnWndProc         = WINHELP_MainWndProc;\n    class_main.cbClsExtra          = 0;\n    class_main.cbWndExtra          = sizeof(WINHELP_WINDOW *);\n    class_main.hInstance           = Globals.hInstance;\n    class_main.hIcon               = LoadIconW(Globals.hInstance, MAKEINTRESOURCEW(IDI_WINHELP));\n    class_main.hCursor             = LoadCursorW(0, (LPWSTR)IDC_ARROW);\n    class_main.hbrBackground       = (HBRUSH)(COLOR_WINDOW+1);\n    class_main.lpszMenuName        = 0;\n    class_main.lpszClassName       = MAIN_WIN_CLASS_NAME;\n    class_main.hIconSm             = LoadImageW(Globals.hInstance, MAKEINTRESOURCEW(IDI_WINHELP), IMAGE_ICON,\n                                               GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON),\n                                               LR_SHARED);\n\n    class_button_box               = class_main;\n    class_button_box.lpfnWndProc   = WINHELP_ButtonBoxWndProc;\n    class_button_box.cbWndExtra    = 0;\n    class_button_box.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1);\n    class_button_box.lpszClassName = BUTTON_BOX_WIN_CLASS_NAME;\n\n    class_history                  = class_main;\n    class_history.lpfnWndProc      = WINHELP_HistoryWndProc;\n    class_history.lpszClassName    = HISTORY_WIN_CLASS_NAME;\n\n    return (RegisterClassExW(&class_main) &&\n            RegisterClassExW(&class_button_box) &&\n            RegisterClassExW(&class_history));\n}\n\n/***********************************************************************\n *\n *           WinMain\n */\nint PASCAL WinMain(HINSTANCE hInstance, HINSTANCE prev, LPSTR cmdline, int show)\n{\n    MSG                 msg;\n    LONG                lHash = 0;\n    HLPFILE*            hlpfile;\n    static CHAR         default_wndname[] = \"main\";\n    LPSTR               wndname = default_wndname;\n    WINHELP_DLL*        dll;\n    HACCEL              hAccel;\n\n    Globals.hInstance = hInstance;\n\n    if (LoadLibraryA(\"msftedit.dll\") == NULL)\n        return MessageBoxW(0, MAKEINTRESOURCEW(STID_NO_RICHEDIT),\n                           MAKEINTRESOURCEW(STID_WHERROR), MB_OK);\n\n    /* Get options */\n    while (*cmdline && (*cmdline == ' ' || *cmdline == '-'))\n    {\n        CHAR   option;\n        LPCSTR topic_id;\n        if (*cmdline++ == ' ') continue;\n\n        option = *cmdline;\n        if (option) cmdline++;\n        while (*cmdline == ' ') cmdline++;\n        switch (option)\n\t{\n\tcase 'i':\n\tcase 'I':\n            topic_id = cmdline;\n            while (*cmdline && *cmdline != ' ') cmdline++;\n            if (*cmdline) *cmdline++ = '\\0';\n            lHash = HLPFILE_Hash(topic_id);\n            break;\n\n\tcase '3':\n\tcase '4':\n            Globals.wVersion = option - '0';\n            break;\n\n        case 'x':\n            show = SW_HIDE;\n            Globals.isBook = FALSE;\n            break;\n\n        default:\n            WINE_FIXME(\"Unsupported cmd line: %s\\n\", debugstr_a(cmdline));\n            break;\n\t}\n    }\n\n    /* Create primary window */\n    if (!WINHELP_RegisterWinClasses())\n    {\n        WINE_FIXME(\"Couldn't register classes\\n\");\n        return 0;\n    }\n\n    if (*cmdline)\n    {\n        char*   ptr;\n        if ((*cmdline == '\"') && (ptr = strchr(cmdline+1, '\"')))\n        {\n            cmdline++;\n            *ptr = '\\0';\n        }\n        if ((ptr = strchr(cmdline, '>')))\n        {\n            *ptr = '\\0';\n            wndname = ptr + 1;\n        }\n        hlpfile = WINHELP_LookupHelpFile(cmdline);\n        if (!hlpfile) return 0;\n    }\n    else hlpfile = NULL;\n    WINHELP_OpenHelpWindow(HLPFILE_PageByHash, hlpfile, lHash,\n                           WINHELP_GetWindowInfo(hlpfile, wndname), show);\n\n    /* Message loop */\n    hAccel = LoadAcceleratorsW(hInstance, MAKEINTRESOURCEW(MAIN_ACCEL));\n    while ((Globals.win_list || Globals.active_popup) && GetMessageW(&msg, 0, 0, 0))\n    {\n        HWND hWnd = Globals.active_win ? Globals.active_win->hMainWnd : NULL;\n        if (!TranslateAcceleratorW(hWnd, hAccel, &msg))\n\t{\n            TranslateMessage(&msg);\n            DispatchMessageW(&msg);\n        }\n    }\n    for (dll = Globals.dlls; dll; dll = dll->next)\n    {\n        if (dll->class & DC_INITTERM) dll->handler(DW_TERM, 0, 0);\n    }\n    return 0;\n}\n"
  },
  {
    "path": "winhlp32/winhelp.h",
    "content": "/*\n * Help Viewer\n *\n * Copyright    1996 Ulrich Schmid\n * Copyright    2002 Sylvain Petreolle <spetreolle@yahoo.fr>\n *              2002 Eric Pouech\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#define MAX_LANGUAGE_NUMBER     255\n#define MAX_STRING_LEN          255\n\n#define INTERNAL_BORDER_WIDTH   5\n#define POPUP_YDISTANCE         20\n#define SHADOW_DX               10\n#define SHADOW_DY               10\n#define BUTTON_CX               6\n#define BUTTON_CY               6\n#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))\n\n#define RICHEDIT_CLASS20A\t\"RichEdit20A\"\n# define strncasecmp _strnicmp\n# define strcasecmp _stricmp\n#define EE_CHARSET 0xEE\n\n#ifndef RC_INVOKED\n\n#include <stdarg.h>\n\n#include \"hlpfile.h\"\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"macro.h\"\n#include \"winhelp_res.h\"\n\ntypedef struct tagHelpButton\n{\n    HWND                hWnd;\n\n    LPCSTR              lpszID;\n    LPCSTR              lpszName;\n    LPCSTR              lpszMacro;\n\n    WPARAM              wParam;\n\n    RECT                rect;\n\n    struct tagHelpButton*next;\n} WINHELP_BUTTON;\n\ntypedef struct\n{\n    HLPFILE_PAGE*       page;\n    HLPFILE_WINDOWINFO* wininfo;\n    ULONG               relative;\n} WINHELP_WNDPAGE;\n\ntypedef struct tagPageSet\n{\n    /* FIXME: for now it's a fixed size */\n    WINHELP_WNDPAGE     set[40];\n    unsigned            index;\n} WINHELP_PAGESET;\n\ntypedef struct tagWinHelp\n{\n    unsigned            ref_count;\n    WINHELP_BUTTON*     first_button;\n    HLPFILE_PAGE*       page;\n\n    HWND                hMainWnd;\n    HWND                hHistoryWnd;\n\n    WNDPROC             origRicheditWndProc;\n\n    HFONT*              fonts;\n    UINT                fonts_len;\n\n    HCURSOR             hHandCur;\n\n    HBRUSH              hBrush;\n\n    HLPFILE_WINDOWINFO* info;\n\n    WINHELP_PAGESET     back;\n    unsigned            font_scale; /* 0 = small, 1 = normal, 2 = large */\n    ULONG               offset;\n\n    struct tagWinHelp*  next;\n} WINHELP_WINDOW;\n\n#define DC_NOMSG     0x00000000\n#define DC_MINMAX    0x00000001\n#define DC_INITTERM  0x00000002\n#define DC_JUMP      0x00000004\n#define DC_ACTIVATE  0x00000008\n#define DC_CALLBACKS 0x00000010\n\n#define DW_NOTUSED    0\n#define DW_WHATMSG    1\n#define DW_MINMAX     2\n#define DW_SIZE       3\n#define DW_INIT       4\n#define DW_TERM       5\n#define DW_STARTJUMP  6\n#define DW_ENDJUMP    7\n#define DW_CHGFILE    8\n#define DW_ACTIVATE   9\n#define\tDW_CALLBACKS 10\n\ntypedef LONG (CALLBACK *WINHELP_LDLLHandler)(WORD, LONG_PTR, LONG_PTR);\n\ntypedef struct tagDll\n{\n    HANDLE              hLib;\n    const char*         name;\n    WINHELP_LDLLHandler handler;\n    DWORD               class;\n    struct tagDll*      next;\n} WINHELP_DLL;\n\ntypedef struct\n{\n    UINT                wVersion;\n    HANDLE              hInstance;\n    BOOL                isBook;\n    WINHELP_WINDOW*     active_win;\n    WINHELP_WINDOW*     active_popup;\n    WINHELP_WINDOW*     win_list;\n    WNDPROC             button_proc;\n    WINHELP_DLL*        dlls;\n    WINHELP_PAGESET     history;\n    HFONT               hButtonFont;\n} WINHELP_GLOBALS;\n\nextern const struct winhelp_callbacks\n{\n    WORD      (WINAPI *GetFSError)(void);\n    HANDLE    (WINAPI *HfsOpenSz)(LPSTR,BYTE);\n    WORD      (WINAPI *RcCloseHfs)(HANDLE);\n    HANDLE    (WINAPI *HfOpenHfs)(HANDLE,LPSTR,BYTE);\n    HANDLE    (WINAPI *RcCloseHf)(HANDLE);\n    LONG      (WINAPI *LcbReadHf)(HANDLE,BYTE*,LONG);\n    LONG      (WINAPI *LTellHf)(HANDLE);\n    LONG      (WINAPI *LSeekHf)(HANDLE,LONG,WORD);\n    BOOL      (WINAPI *FEofHf)(HANDLE);\n    LONG      (WINAPI *LcbSizeHf)(HANDLE);\n    BOOL      (WINAPI *FAccessHfs)(HANDLE,LPSTR,BYTE);\n    WORD      (WINAPI *RcLLInfoFromHf)(HANDLE,WORD,LPWORD,LPLONG,LPLONG);\n    WORD      (WINAPI *RcLLInfoFromHfs)(HANDLE,LPSTR,WORD,LPWORD,LPLONG,LPLONG);\n    void      (WINAPI *ErrorW)(int);\n    void      (WINAPI *ErrorSz)(LPSTR);\n    ULONG_PTR (WINAPI *GetInfo)(WORD,HWND);\n    LONG      (WINAPI *API)(LPSTR,WORD,DWORD);\n} Callbacks;\n\nstruct index_data\n{\n    HLPFILE*    hlpfile;\n    BOOL        jump;\n    ULONG       offset;\n    WORD        count;\n};\n\nextern WINHELP_GLOBALS Globals;\n\nBOOL WINHELP_CreateHelpWindow(WINHELP_WNDPAGE*, int, BOOL);\nBOOL WINHELP_OpenHelpWindow(HLPFILE_PAGE* (*)(HLPFILE*, LONG, ULONG*),\n                            HLPFILE*, LONG, HLPFILE_WINDOWINFO*, int);\nBOOL WINHELP_GetOpenFileName(LPSTR, int);\nBOOL WINHELP_CreateIndexWindow(BOOL);\nvoid WINHELP_DeleteBackSet(WINHELP_WINDOW*);\nHLPFILE* WINHELP_LookupHelpFile(LPCSTR lpszFile);\nHLPFILE_WINDOWINFO* WINHELP_GetWindowInfo(HLPFILE* hlpfile, LPCSTR name);\nvoid WINHELP_LayoutMainWindow(WINHELP_WINDOW* win);\nWINHELP_WINDOW* WINHELP_GrabWindow(WINHELP_WINDOW*);\nBOOL WINHELP_ReleaseWindow(WINHELP_WINDOW*);\nBOOL WINHELP_SearchKey(char keyfile, LPCSTR keywords, LONG type, LPCSTR topic, LPCSTR window, WINHELP_WINDOW *currwin, HLPFILE* hlpfile);\n\nextern const WCHAR MAIN_WIN_CLASS_NAME[];\nextern const WCHAR BUTTON_BOX_WIN_CLASS_NAME[];\nextern const char  TEXT_WIN_CLASS_NAME[];\nextern const char  SHADOW_WIN_CLASS_NAME[];\nextern const WCHAR HISTORY_WIN_CLASS_NAME[];\nextern const WCHAR STRING_BUTTON[];\nextern const char STRING_MENU_Xx[];\nextern const char STRING_DIALOG_TEST[];\n#endif\n\n/* Buttons */\n#define WH_FIRST_BUTTON     500\n"
  },
  {
    "path": "winhlp32/winhelp_res.h",
    "content": "#include <windef.h>\n#include <winuser.h>\n\n#define MNID_FILE_OPEN          0x101\n#define MNID_FILE_PRINT         0x104\n#define MNID_FILE_SETUP         0x106\n#define MNID_FILE_EXIT          0x108\n\n#define MNID_EDIT_COPYDLG       0x111\n#define MNID_EDIT_ANNOTATE      0x112\n\n#define MNID_BKMK_DEFINE        0x121\n\n#define MNID_OPTS_HISTORY       0x134\n#define MNID_OPTS_FONTS_SMALL   0x135\n#define MNID_OPTS_FONTS_NORMAL  0x136\n#define MNID_OPTS_FONTS_LARGE   0x137\n\n#define MNID_HELP_HELPON        0x141\n#define MNID_HELP_HELPTOP       0x142\n#define MNID_HELP_ABOUT         0x143\n\n#define MNID_CTXT_ANNOTATE      0x200\n#define MNID_CTXT_COPY          0x201\n#define MNID_CTXT_PRINT         0x202\n#define MNID_CTXT_FONTS_SMALL   0x210\n#define MNID_CTXT_FONTS_NORMAL  0x211\n#define MNID_CTXT_FONTS_LARGE   0x212\n\n#define MAIN_MENU\t\t0xF000\n#define CONTEXT_MENU            0xF001\n#define MAIN_ACCEL              0xF002\n\n#define STID_WINE_HELP\t\t0x120\n#define STID_WHERROR\t\t0x121\n#define STID_WARNING  \t\t0x122\n#define STID_INFO  \t\t0x123\n#define STID_NOT_IMPLEMENTED \t0x124\n#define STID_HLPFILE_ERROR_s \t0x125\n#define STID_CONTENTS \t\t0x126\n#define STID_INDEX\t \t0x127\n#define STID_BACK \t\t0x128\n#define STID_ALL_FILES \t\t0x12B\n#define STID_HELP_FILES_HLP\t0x12C\n#define STID_DIALOG_TEST\t0x12D\n#define STID_FILE_NOT_FOUND_s\t0x12E\n#define STID_NO_RICHEDIT        0x12F\n#define STID_PSH_INDEX          0x130\n\n#define IDD_INDEX               0x150\n#define IDC_INDEXLIST           0x151\n#define IDD_SEARCH              0x152\n#define IDD_TOPIC               0x153\n#define IDC_TOPICS              0x154\n\n#define IDI_WINHELP             0xF00\n"
  },
  {
    "path": "winhlp32/winhlp32.rc",
    "content": "/*\n * Help Viewer\n *\n * Copyright 1996 Ulrich Schmid\n * Copyright 2002 Sylvain Petreolle <spetreolle@yahoo.fr>\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"winhelp_res.h\"\n\n#pragma makedep po\n\nLANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT\n\nMAIN_MENU MENU\n{\n POPUP \"&File\" {\n  MENUITEM \"&Open...\", MNID_FILE_OPEN\n  MENUITEM SEPARATOR\n  MENUITEM \"&Print...\", MNID_FILE_PRINT\n  MENUITEM \"Printer &setup...\", MNID_FILE_SETUP\n   MENUITEM SEPARATOR\n  MENUITEM \"E&xit\", MNID_FILE_EXIT\n }\n POPUP \"&Edit\" {\n   MENUITEM \"&Copy\", MNID_EDIT_COPYDLG\n   MENUITEM SEPARATOR\n   MENUITEM \"&Annotate...\", MNID_EDIT_ANNOTATE\n }\n POPUP \"&Bookmark\" {\n   MENUITEM \"&Define...\", MNID_BKMK_DEFINE\n }\n POPUP \"&Options\" {\n  MENUITEM \"Always on &top\", MNID_HELP_HELPTOP\n  MENUITEM \"History\",\t\tMNID_OPTS_HISTORY\n  POPUP    \"Fonts\"\n  BEGIN\n    MENUITEM \"Small\",\t\tMNID_OPTS_FONTS_SMALL\n    MENUITEM \"Normal\",    \tMNID_OPTS_FONTS_NORMAL\n    MENUITEM \"Large\",     \tMNID_OPTS_FONTS_LARGE\n  END\n }\n POPUP \"&Help\" {\n   MENUITEM \"&Help on help\\tF1\", MNID_HELP_HELPON\n   MENUITEM \"&About Wine Help\", MNID_HELP_ABOUT\n }\n}\n\nCONTEXT_MENU MENU\nBEGIN\n\tPOPUP \"\"\n\tBEGIN\n\t\tMENUITEM \"Annotation...\",       MNID_CTXT_ANNOTATE\n\t\tMENUITEM \"Copy\",                MNID_CTXT_COPY\n\t\tMENUITEM \"Print...\",            MNID_CTXT_PRINT\n\t\tPOPUP    \"Fonts\"\n\t\tBEGIN\n\t\t\tMENUITEM \"Small\",       MNID_CTXT_FONTS_SMALL\n\t\t\tMENUITEM \"Normal\",      MNID_CTXT_FONTS_NORMAL\n\t\t\tMENUITEM \"Large\",       MNID_CTXT_FONTS_LARGE\n\t\tEND\n\tEND\nEND\n\nSTRINGTABLE\n{\nSTID_WINE_HELP, \t\"Wine Help\"\nSTID_WHERROR, \t\t\"ERROR\"\nSTID_WARNING,  \t\t\"WARNING\"\nSTID_INFO,  \t\t\"Information\"\nSTID_NOT_IMPLEMENTED, \t\"Not yet implemented\"\nSTID_HLPFILE_ERROR_s, \t\"Error while reading the help file `%s'\"\nSTID_INDEX, \t\t\"&Index\"\nSTID_CONTENTS,\t\t\"Summary\"\nSTID_BACK, \t\t\"&Back\"\nSTID_ALL_FILES, \t\"All files (*.*)\"\nSTID_HELP_FILES_HLP, \t\"Help files (*.hlp)\"\nSTID_FILE_NOT_FOUND_s\t\"Cannot find '%s'. Do you want to find this file yourself?\"\nSTID_NO_RICHEDIT\t\"Cannot find a richedit implementation... Aborting\"\nSTID_PSH_INDEX,\t\t\"Help topics: \"\n}\n\nIDD_INDEX DIALOG 0, 0, 200, 190\nSTYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU\nFONT 8, \"MS Shell Dlg\"\nCAPTION \"Index\"\n{\n    LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | LBS_STANDARD | WS_VSCROLL | WS_BORDER | WS_TABSTOP\n}\n\nIDD_SEARCH DIALOG 0, 0, 200, 190\nSTYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU\nFONT 8, \"MS Shell Dlg\"\nCAPTION \"Search\"\n{\n    LTEXT  \"Not yet implemented\", -1, 10, 10, 180, 150\n}\n\nIDD_TOPIC DIALOG 0, 0, 160, 130\nSTYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU\nFONT 8, \"MS Shell Dlg\"\nCAPTION \"Topics Found\"\n{\n    LISTBOX IDC_TOPICS, 5, 5, 150, 100, LBS_NOINTEGRALHEIGHT | LBS_STANDARD | WS_TABSTOP\n    DEFPUSHBUTTON \"OK\", 1, 50, 110, 45, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP\n    PUSHBUTTON \"Cancel\", 2, 100, 110, 50, 15, WS_GROUP | WS_TABSTOP\n}\n\nLANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL\n\n\nMAIN_ACCEL ACCELERATORS\n{\n    VK_F1, MNID_HELP_HELPON, VIRTKEY\n}\n\n/* @makedep: winhelp.ico */\nIDI_WINHELP ICON winhelp.ico\n"
  },
  {
    "path": "winhlp32/winhlp32.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"callback.c\" />\n    <ClCompile Include=\"hlpfile.c\" />\n    <ClCompile Include=\"macro.c\" />\n    <ClCompile Include=\"string.c\" />\n    <ClCompile Include=\"winhelp.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"hlpfile.h\" />\n    <ClInclude Include=\"winhelp.h\" />\n    <ClInclude Include=\"winhelp_res.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"winhlp32.rc\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"macro.lex.l\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(FlexPath)flex\" -d \"%(FileName)%(Extension)\" </Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">lex.yy.c</Outputs>\n      <OutputItemType Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">ClCompile</OutputItemType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(FlexPath)flex\" -d \"%(FileName)%(Extension)\" </Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">lex.yy.c</Outputs>\n      <OutputItemType Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">ClCompile</OutputItemType>\n    </CustomBuild>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <VCProjectVersion>15.0</VCProjectVersion>\n    <ProjectGuid>{37F4B5BE-FB3C-44E7-BA9B-6D0E0C7709F2}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>winhlp32</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"Shared\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n    <Import Project=\"..\\BuildToolProperty.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n    <Import Project=\"..\\BuildToolProperty.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <SDLCheck>false</SDLCheck>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)libwine.lib;comctl32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <SDLCheck>false</SDLCheck>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)libwine.lib;comctl32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "winhlp32/winhlp32.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"ソース ファイル\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"ヘッダー ファイル\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"リソース ファイル\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"callback.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"hlpfile.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"macro.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"string.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n    <ClCompile Include=\"winhelp.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"hlpfile.h\">\n      <Filter>ヘッダー ファイル</Filter>\n    </ClInclude>\n    <ClInclude Include=\"winhelp.h\">\n      <Filter>ヘッダー ファイル</Filter>\n    </ClInclude>\n    <ClInclude Include=\"winhelp_res.h\">\n      <Filter>ヘッダー ファイル</Filter>\n    </ClInclude>\n  </ItemGroup>\n  <ItemGroup>\n    <ResourceCompile Include=\"winhlp32.rc\">\n      <Filter>リソース ファイル</Filter>\n    </ResourceCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"macro.lex.l\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "winnls/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(winnls SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/winnls.def winnls.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(winnls.dll16 winnls)\ntarget_link_libraries(winnls libwine winecrt0 krnl386 imm32.lib)\nset_target_properties(winnls PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "winnls/winnls.c",
    "content": "/*\n * Copyright 2001 Andreas Mohr\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"winnls32.h\"\n#include <windows.h>\n#include <imm.h>\n#include \"wownt32.h\"\n#include \"wine/winuser16.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(winnls);\nWINE_DECLARE_DEBUG_CHANNEL(winnls);\n//BOOL WINAPI WINNLS32EnableIME(HWND hWnd, BOOL fEnable);\n//BOOL WINAPI WINNLS32GetEnableStatus(HWND hWnd);\n\n/***********************************************************************\n *\t\tWINNLSEnableIME (WINNLS.16)\n */\nBOOL WINAPI WINNLSEnableIME16( HWND16 hwnd, BOOL enable )\n{\n    return WINNLSEnableIME( HWND_32(hwnd), enable );\n}\n\n/***********************************************************************\n *\t\tWINNLSGetEnableStatus (WINNLS.18)\n */\nBOOL WINAPI WINNLSGetEnableStatus16( HWND16 hwnd )\n{\n    return WINNLSGetEnableStatus( HWND_32(hwnd) );\n}\n#include \"ime.h\"\n#include \"wine/debug.h\"\nWINE_DEFAULT_DEBUG_CHANNEL(nls);\n#include <pshpack1.h>\ntypedef struct _tagIMEPRO16 {\n\tHWND16      hWnd;\n\tDATETIME    InstDate;\n\tUINT16      wVersion;\n\tBYTE        szDescription[50];\n\tBYTE        szName[80];\n\tBYTE        szOptions[30];\n} IMEPRO16, *PIMEPRO16, NEAR *NPIMEPRO16, FAR *LPIMEPRO16;\n#include <poppack.h>\nvoid IMEPRO16ToIMEPRO(IMEPRO16 *imepro, IMEPROA *imepro32)\n{\n\timepro32->hWnd = HWND_32(imepro->hWnd);\n    imepro32->InstDate = imepro->InstDate;\n    imepro32->wVersion = imepro->wVersion;\n    memcpy(imepro32->szDescription, imepro->szDescription, sizeof(imepro32->szDescription));\n    memcpy(imepro32->szName, imepro->szName, sizeof(imepro32->szName));\n    memcpy(imepro32->szOptions, imepro->szOptions, sizeof(imepro32->szOptions));\n}\nvoid IMEPROToIMEPRO16(IMEPROA *imepro32, IMEPRO16 *imepro)\n{\n\timepro->hWnd = HWND_16(imepro32->hWnd);\n    imepro->InstDate = imepro32->InstDate;\n    //lost data\n    imepro->wVersion = (UINT16)imepro32->wVersion;\n    memcpy(imepro->szDescription, imepro32->szDescription, sizeof(imepro32->szDescription));\n    memcpy(imepro->szName, imepro32->szName, sizeof(imepro32->szName));\n    memcpy(imepro->szOptions, imepro32->szOptions, sizeof(imepro32->szOptions));\n}\nBOOL16  WINAPI IMPQueryIME16(IN OUT LPIMEPRO16 lpIMEPro)\n{\n\tIMEPROA imepro32;\n    //WHY???\n    if (!strcmp(lpIMEPro->szName, \"msctf.dll\"))\n        return FALSE;\n\tIMEPRO16ToIMEPRO(lpIMEPro, &imepro32);\n\tBOOL ret = IMPQueryIMEA(&imepro32);\n    ERR(\"IMPQueryIME16(0x%p) ret{0x%p, \\\"%s\\\", \\\"%s\\\", \\\"%s\\\", %d}\\n\", lpIMEPro, imepro32.hWnd, imepro32.szDescription, imepro32.szName, imepro32.szOptions, imepro32.wVersion);\n\tIMEPROToIMEPRO16(&imepro32, lpIMEPro);\n\treturn ret;\n}\nBOOL WINAPI IMPGetIME16(IN HWND16 hWnd, OUT LPIMEPRO16 lpIMEPro)\n{\n\tIMEPROA imepro32;\n\tBOOL ret = IMPGetIMEA(HWND_32(hWnd), &imepro32);\n    ERR(\"\\n\");\n\tIMEPROToIMEPRO16(&imepro32, lpIMEPro);\n\treturn ret;\n}\nBOOL  WINAPI IMPSetIME16(IN HWND16 hWnd, IN LPIMEPRO16 lpIMEPro)\n{\n\tIMEPROA imepro32;\n\tIMEPRO16ToIMEPRO(lpIMEPro, &imepro32);\n    ERR(\"\\n\");\n\treturn IMPSetIMEA(HWND_32(hWnd), &imepro32);\n}\nBOOL WINAPI IMPModifyIME16(LPSTR lpStr, IN LPIMEPRO lpIMEPro)\n{\n\tERR(\"NOTIMPL:IMPModifyIME16(\\\"%s\\\", 0x%p)\\n\", lpStr, lpIMEPro);\n    return FALSE;\n}\nWORD WINAPI IMPGetDefaultIME16(LPIMEPRO lpIMEPro)\n{\n\tERR(\"NOTIMPL:IMPGetDefaultIME16(0x%p)\\n\", lpIMEPro);\n\treturn 0;\n}\nWORD WINAPI IMPSetDefaultIME16(LPIMEPRO lpIMEPro)\n{\n\tERR(\"NOTIMPL:IMPSetDefaultIME16(0x%p)\\n\", lpIMEPro);\n\treturn 0;\n}\nBOOL WINAPI WINNLSSendString16(HWND16 hWnd, WORD word, LPVOID lpVoid)\n{\n\tERR(\"NOTIMPL:WINNLSSendString16(0x%p, %d, %p)\\n\", HWND_32(hWnd), word, lpVoid);\n\treturn 0;\n}\nBOOL WINAPI WINNLSPostAppMessage16(HWND16 hWnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam)\n{\n\tERR(\"NOTIMPL:WINNLSPostAppMessage16(0x%p, %d, %d, %d)\\n\", HWND_32(hWnd), msg, wParam, lParam);\n\treturn 0;\n}\nLRESULT WINAPI WINNLSSendAppMessage16(HWND16 hWnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam)\n{\n\tERR(\"NOTIMPL:WINNLSSendAppMessage16(0x%p, %d, %d, %d)\\n\", HWND_32(hWnd), msg, wParam, lParam);\n\treturn 0;\n}\nBOOL WINAPI WINNLSSendControl16(WORD arg1, WORD arg2)\n{\n\tERR(\"NOTIMPL:WINNLSSendControl16(%d, %d)\\n\", arg1, arg2);\n\treturn 0;\n}\n#include <pshpack1.h>\ntypedef struct tagIMESTRUCT16 {\n    UINT16   fnc;        // function code\n    WPARAM16 wParam;     // word parameter\n    UINT16   wCount;     // word counter\n    UINT16   dchSource;  // offset to Source from top of memory object\n    UINT16   dchDest;    // offset to Desrination from top of memory object\n    LPARAM   lParam1;\n    LPARAM   lParam2;\n    LPARAM   lParam3;\n} IMESTRUCT16, *PIMESTRUCT16, NEAR *NPIMESTRUCT16, FAR *LPIMESTRUCT16;\nC_ASSERT(sizeof(IMESTRUCT16) == 0x16);\ntypedef struct tagIMEMESSAGE16 {\n    WORD unknown1;\n    WORD unknown2;\n    WORD unknown3;\n    WORD unknown4;\n    WORD unknown5;\n    WORD unknown6;\n    WORD unknown7;\n    WORD unknown8;\n} IMEMESSAGE16, FAR *LPIMEMESSAGE16;\n#include <poppack.h>\n\n/* convert a LOGFONT16 to a LOGFONTA */\nstatic void logfont_16_to_A(const LOGFONT16 *font16, LPLOGFONTA font32)\n{\n    font32->lfHeight = font16->lfHeight;\n    font32->lfWidth = font16->lfWidth;\n    font32->lfEscapement = font16->lfEscapement;\n    font32->lfOrientation = font16->lfOrientation;\n    font32->lfWeight = font16->lfWeight;\n    font32->lfItalic = font16->lfItalic;\n    font32->lfUnderline = font16->lfUnderline;\n    font32->lfStrikeOut = font16->lfStrikeOut;\n    font32->lfCharSet = font16->lfCharSet;\n    font32->lfOutPrecision = font16->lfOutPrecision;\n    font32->lfClipPrecision = font16->lfClipPrecision;\n    font32->lfQuality = font16;\n    font32->lfPitchAndFamily = font16->lfPitchAndFamily;\n    memcpy(font32->lfFaceName, font16->lfFaceName, LF_FACESIZE);\n    font32->lfFaceName[LF_FACESIZE - 1] = 0;\n}\n\nLRESULT WINAPI SendIMEMessageEx16(\n    _In_ HWND16   hwnd,\n    _In_ LPARAM lParam\n)\n{\n    HWND hwnd32 = HWND_32(hwnd);\n    HGLOBAL16 hglobal = lParam;\n    LPIMESTRUCT16 lpime = (LPIMESTRUCT16)(GlobalLock16(hglobal));\n    HGLOBAL hglobal32 = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, sizeof(IMESTRUCT));\n    LPIMESTRUCT lpime32 = (LPIMESTRUCT)(GlobalLock(hglobal32));\n    LRESULT ret = 0;\n    LOGFONTA lfont;\n    lpime32->fnc = lpime->fnc;\n    lpime32->wParam = lpime->wParam;\n    lpime32->wCount = lpime->wCount;\n    lpime32->dchSource = lpime->dchSource;\n    lpime32->dchDest = lpime->dchDest;\n    lpime32->lParam1 = lpime->lParam1;\n    lpime32->lParam2 = lpime->lParam2;\n    lpime32->lParam3 = lpime->lParam3;\n    switch (lpime32->fnc)\n    {\n    case IME_SETCONVERSIONWINDOW:\n    {\n        switch (lpime->wParam)\n        {\n        case MCW_WINDOW:\n            TRACE(\"MCW_WINDOW(%p, %p, %p)\\n\", lpime->lParam1, lpime->lParam2, lpime->lParam3);\n            break;\n        case MCW_DEFAULT:\n            TRACE(\"MCW_DEFAULT(%p, %p, %p)\\n\", lpime->lParam1, lpime->lParam2, lpime->lParam3);\n            break;\n        case MCW_RECT:\n            TRACE(\"MCW_RECT(%p, %p, %p)\\n\", lpime->lParam1, lpime->lParam2, lpime->lParam3);\n            break;\n        case MCW_SCREEN:\n            TRACE(\"MCW_SCREEN(%p, %p, %p)\\n\", lpime->lParam1, lpime->lParam2, lpime->lParam3);\n            break;\n        case MCW_VERTICAL:\n            TRACE(\"MCW_VERTICAL(%p, %p, %p)\\n\", lpime->lParam1, lpime->lParam2, lpime->lParam3);\n            break;\n        case MCW_HIDDEN:\n            TRACE(\"MCW_HIDDEN(%p, %p, %p)\\n\", lpime->lParam1, lpime->lParam2, lpime->lParam3);\n            break;\n        case MCW_WINDOW | MCW_RECT:\n            TRACE(\"MCW_WINDOW | MCW_RECT(%p, %p, %p)\\n\", lpime->lParam1, lpime->lParam2, lpime->lParam3);\n            break;\n        case MCW_SCREEN | MCW_RECT:\n            TRACE(\"MCW_SCREEN | MCW_RECT(%p, %p, %p)\\n\", lpime->lParam1, lpime->lParam2, lpime->lParam3);\n            break;\n        default:\n            TRACE(\"IME_SETCONVERSIONWINDOW unknwon %04x (%p, %p, %p)\\n\", lpime->wParam, lpime->lParam1, lpime->lParam2, lpime->lParam3);\n            break;\n        }\n    }\n        break;\n    case IME_ENTERWORDREGISTERMODE:\n        TRACE(\"IME_ENTERWORDREGISTERMODE\\n\");\n        break;\n    case IME_GETCONVERSIONMODE:\n        TRACE(\"IME_GETCONVERSIONMODE\\n\");\n        break;\n    case 0x12:\n    case IME_SETCONVERSIONFONTEX:\n    {\n        LPLOGFONTA lplogfont = &lfont;\n        TRACE(\"IME_SETCONVERSIONFONTEX %d\\n\", lpime32->fnc);\n\n        if (lpime32->fnc == 0x12)\n        {\n            HFONT hFont32 = HFONT_32(lpime->wParam);\n            if (!hFont32 || !GetObjectA(hFont32, sizeof(LOGFONTA), lplogfont))\n            {\n                ret = 0;\n                goto done;\n            }\n        }\n        else if (lpime32->fnc == IME_SETCONVERSIONFONTEX)\n        {\n            if (lpime32->lParam1)\n            {\n                LPLOGFONT16 l16 = (LPLOGFONT16)GlobalLock16(lpime32->lParam1);\n                logfont_16_to_A(l16, &lfont);\n            }\n            else\n            {\n                HFONT hFont32 = GetStockObject(SYSTEM_FONT);\n                if (!hFont32 || !GetObjectA(hFont32, sizeof(LOGFONTA), lplogfont))\n                {\n                    ret = 0;\n                    goto done;\n                }\n            }\n        }\n        lpime32->lParam1 = lplogfont;\n        HIMC himc = ImmGetContext(hwnd32);\n        //IME_SETCONVERSIONFONTEX doesnt work well\n        ImmSetCompositionFontA(himc, lplogfont);\n        if (lpime32->fnc == IME_SETCONVERSIONFONTEX)\n        {\n            GlobalUnlock16(lpime32->lParam1);\n        }\n    }\n    break;\n    case IME_SETCONVERSIONMODE:\n        TRACE(\"IME_SETCONVERSIONMODE\\n\");\n        break;\n    //case IME_SETLEVEL:\n    //    ERR(\"IME_SETLEVEL\\n\");\n    //    break;\n    case IME_GETOPEN:\n        TRACE(\"IME_GETOPEN\\n\");\n        break;\n    case IME_SETOPEN:\n        TRACE(\"IME_SETOPEN\\n\");\n        break;\n    case IME_GETVERSION:\n        TRACE(\"IME_GETVERSION\\n\");\n        break;\n        /*\n    case IME_SET_MODE:\n        TRACE(\"IME_SET_MODE\\n\");\n        break;\n        */\n    case IME_GETIMECAPS:\n        TRACE(\"IME_GETIMECAPS\\n\");\n        break;\n    case IME_SENDVKEY:\n        TRACE(\"IME_SENDVKEY\\n\");\n        break;\n    //case IME_SET_MODEK:\n    //    ERR(\"IME_SET_MODEK\\n\");\n    //  break;\n    default:\n        TRACE(\"unknown %04x\\n\", lpime->fnc);\n        break;\n    }\n    TRACE(\"(%04x,%04x,%04x,%04x,%04x,%08x,%08x,%08x)\\n\", lpime->fnc, lpime->wParam, lpime->wCount, lpime->dchSource, lpime->dchDest, lpime->lParam1, lpime->lParam2, lpime->lParam3);\n    ret = SendIMEMessageExA(hwnd32, (LPARAM)hglobal32);\n    lpime->fnc = lpime32->fnc;\n    lpime->wParam = lpime32->wParam;\n    lpime->wCount = lpime32->wCount;\n    lpime->dchSource = lpime32->dchSource;\n    lpime->dchDest = lpime32->dchDest;\n    lpime->lParam1 = lpime32->lParam1;\n    lpime->lParam2 = lpime32->lParam2;\n    lpime->lParam3 = lpime32->lParam3;\n    TRACE(\"(%04x,%04x,%04x,%04x,%04x,%08x,%08x,%08x) retval=%08x\\n\", lpime->fnc, lpime->wParam, lpime->wCount, lpime->dchSource, lpime->dchDest, lpime->lParam1, lpime->lParam2, lpime->lParam3, ret);\n    lpime->wParam = 0;\ndone:\n    GlobalUnlock(hglobal32);\n    GlobalUnlock16(hglobal);\n    GlobalFree(hglobal32);\n    return ret;\n}\nBOOL WINAPI WINNLSSetIMEHandle16(SEGPTR a1, HWND16 a2)\n{\n    LPCSTR str = MapSL(a1); /* MSIME */\n    HWND hwnd = HWND_32(a2);/* window class: MSIME window caption: MSIMEServer */\n    FIXME(\"(%s,%p)\\n\", debugstr_a(str), hwnd);\n    return TRUE;\n}\n\nBOOL WINAPI WINNLSSetIMEHotkey16(HWND16 a1, WORD a2)\n{\n    HWND hwnd = HWND_32(a1);\n    FIXME(\"(%p,%02x)\\n\", hwnd, a2);\n    return TRUE;\n}\n\nBOOL WINAPI WINNLSSetIMEStatus16(HWND16 a1, WORD a2)\n{\n    HWND hwnd = HWND_32(a1);\n    FIXME(\"(%p,%02x)\\n\", hwnd, a2);\n    return TRUE;\n}\n\nBOOL WINAPI WINNLSSetKeyState16(WORD a1)\n{\n    FIXME(\"(%02x)\\n\", a1);\n    return TRUE;\n}\n"
  },
  {
    "path": "winnls/winnls.def",
    "content": "; File generated automatically from winnls.dll16.spec; do not edit!\n\nLIBRARY winnls.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "winnls/winnls.dll16.spec",
    "content": "1   stub WINNLSINQUIRE\n2   stub HOOKKEYBOARDMESSAGE\n#3   stub ___EXPORTEDSTUB\n4   stub ENUMGETFONTTYPE\n5   stub ENUMFACENOTTT\n6   pascal SendIMEMessage(word long) SendIMEMessageEx16\n7   pascal SendIMEMessageEx(word long) SendIMEMessageEx16\n9   stub SENDIMEMESSAGEINTERNAL\n10  stub WINNLSSETKEYBOARDHOOK\n11  pascal -ret16 WINNLSSetIMEHandle(segptr word) WINNLSSetIMEHandle16\n12  pascal -ret16 WINNLSSetIMEStatus(word word) WINNLSSetIMEStatus16\n14  pascal -ret16 WINNLSSetIMEHotkey(word word) WINNLSSetIMEHotkey16\n15  stub WINNLSGETIMEHOTKEY\n16  pascal -ret16 WINNLSEnableIME(word word) WINNLSEnableIME16\n17  stub WINNLSGETKEYSTATE\n18  pascal -ret16 WINNLSGetEnableStatus(word) WINNLSGetEnableStatus16\n19  pascal -ret16 WINNLSSetKeyState(word) WINNLSSetKeyState16\n20  stub IMPADDIME\n21  stub IMPDELETEIME\n22  pascal -ret16 IMPQueryIME(ptr) IMPQueryIME16\n23  pascal -ret16 IMPGetIME(word ptr) IMPGetIME16\n24  pascal -ret16 IMPSetIME(word ptr) IMPSetIME16\n25  pascal -ret16 IMPModifyIME(str ptr) IMPModifyIME16\n26  pascal -ret16 IMPGetDefaultIME(ptr) IMPGetDefaultIME16\n27  pascal -ret16 IMPSetDefaultIME(ptr) IMPSetDefaultIME16\n30  pascal -ret16 WINNLSSendString(word word ptr) WINNLSSendString16\n31  pascal -ret16 WINNLSPostAppMessage(word word word long) WINNLSPostAppMessage16\n32  pascal -ret16 WINNLSSendAppMessage(word word word long) WINNLSSendAppMessage16\n33  pascal -ret16 WINNLSSendControl(word word) WINNLSSendControl16\n#160 stub FT_WNLSFTHKTHKCONNECTIONDATA\n"
  },
  {
    "path": "winnls/winnls.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{F234FA09-76BC-4154-8420-737CD7FA4EF7}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>winnls</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;WINNLS_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n      <PrecompiledHeaderFile />\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>imm32.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;user32.lib;gdi32.lib</AdditionalDependencies>\n      <ModuleDefinitionFile>winnls.def</ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;WINNLS_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <AdditionalDependencies>imm32.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;user32.lib;gdi32.lib</AdditionalDependencies>\n      <ModuleDefinitionFile>winnls.def</ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"winnls.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"winnls.def\" />\n    <CustomBuild Include=\"winnls.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" WINNLS &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" WINNLS &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"winnls.dll16.obj\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "winnls/winnls.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"ソース ファイル\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"ヘッダー ファイル\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"リソース ファイル\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"winnls.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"winnls.def\">\n      <Filter>ソース ファイル</Filter>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"winnls.dll16.obj\">\n      <Filter>ソース ファイル</Filter>\n    </Object>\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"winnls.dll16.spec\">\n      <Filter>ソース ファイル</Filter>\n    </CustomBuild>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "winoldap/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(winoldap SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/winoldap.def winoldap.mod16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(winoldap.mod16 winoldap)\ntarget_link_libraries(winoldap libwine winecrt0 krnl386 shlwapi)\nset_target_properties(winoldap PROPERTIES SUFFIX \".mod16\")\n"
  },
  {
    "path": "winoldap/Makefile.in",
    "content": "MODULE    = winoldap.mod16\n\nEXTRADLLFLAGS = -m16\n\n"
  },
  {
    "path": "winoldap/winoldap.c",
    "content": "\n\n#include \"config.h\"\n\n\n#include \"windef.h\"\n#include \"wine/windef16.h\"\n#include \"wine/winbase16.h\"\n#include \"winuser.h\"\n#include \"winbase.h\"\n#include \"wownt32.h\"\n#include \"wine/list.h\"\n#include \"wine/debug.h\"\n#include \"shellapi.h\"\n#include \"stdio.h\"\n#include \"stdlib.h\"\n#include \"shlwapi.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(winoldap);\n\n//LRESULT WINAPI WndProc(HWND16 h, &)\nLRESULT WINAPI WndProc(HWND16 hwnd16, UINT16 msg, WPARAM16 wParam, LPARAM lParam)\n{\n    ERR(\"wndproc\");\n}\nLRESULT WINAPI DialogProc(HWND16 hwnd16, UINT16 msg, WPARAM16 wParam, LPARAM lParam)\n{\n    ERR(\"dialogproc\");\n}\n\n/*** PIF file structures ***/\n#include \"pshpack1.h\"\n\n/* header of a PIF file */\ntypedef struct {\n    BYTE unk1[2];               /* 0x00 */\n    CHAR windowtitle[ 30 ];     /* 0x02 seems to be padded with blanks*/ \n    WORD memmax;                /* 0x20 */\n    WORD memmin;                /* 0x22 */\n    CHAR program[63];           /* 0x24 seems to be zero terminated */\n    BYTE hdrflags1;             /* 0x63 various flags:\n                                 *  02 286: text mode selected\n                                 *  10 close window at exit\n                                 */\n    BYTE startdrive;            /* 0x64 */\n    char startdir[64];          /* 0x65 */\n    char optparams[64];         /* 0xa5 seems to be zero terminated */\n    BYTE videomode;             /* 0xe5 */\n    BYTE unkn2;                 /* 0xe6 ?*/\n    BYTE irqlow;                /* 0xe7 */\n    BYTE irqhigh;               /* 0xe8 */\n    BYTE rows;                  /* 0xe9 */\n    BYTE cols;                  /* 0xea */\n    BYTE winY;                  /* 0xeb */\n    BYTE winX;                  /* 0xec */\n    WORD unkn3;                 /* 0xed 7??? */\n    CHAR unkn4[64];             /* 0xef */\n    CHAR unkn5[64];             /* 0x12f */\n    BYTE hdrflags2;             /* 0x16f */\n    BYTE hdrflags3;             /* 0x170 */\n    } pifhead_t;\n\n/* record header: present on every record */\ntypedef struct {\n    CHAR recordname[16];  /* zero terminated */\n    WORD posofnextrecord; /* file offset, 0xffff if last */\n    WORD startofdata;     /* file offset */\n    WORD sizeofdata;      /* data is expected to follow directly */\n} recordhead_t;\n\n/* 386 -enhanced mode- record */\ntypedef struct {\n    WORD memmax;         /* memory desired, overrides the pif header*/\n    WORD memmin;         /* memory required, overrides the pif header*/\n    WORD prifg;          /* foreground priority */\n    WORD pribg;          /* background priority */\n    WORD emsmax;         /* EMS memory limit */\n    WORD emsmin;         /* EMS memory required */\n    WORD xmsmax;         /* XMS memory limit */\n    WORD xmsmin;         /* XMS memory required */\n    WORD optflags;        /* option flags:\n                           *  0008 full screen\n                           *  0004 exclusive\n                           *  0002 background\n                           *  0001 close when active\n                           */\n    WORD memflags;       /* various memory flags*/\n    WORD videoflags;     /* video flags:\n                          *   0010 text\n                          *   0020 med. res. graphics\n                          *   0040 hi. res. graphics\n                          */\n    WORD hotkey[9];      /* Hot key info */\n    CHAR optparams[64];  /* optional params, replaces those in the pif header */\n} pif386rec_t;\n\n#include \"poppack.h\"\n\n/***********************************************************************\n *           start_dos_exe\n */\nstatic VOID start_dos_exe( LPCSTR filename, LPCSTR cmdline )\n{\n    char fullcmdline[MAX_PATH*2];\n    PROCESS_INFORMATION pi;\n    STARTUPINFOA si = {0};\n    DWORD count;\n    si.cb = sizeof(STARTUPINFOA);\n    char exename[MAX_PATH];\n    GetModuleFileNameA(GetModuleHandleA(NULL), exename, sizeof(exename));\n    krnl386_get_config_string(\"otvdm\", \"dosemu\", exename, exename, sizeof(exename));\n    snprintf(fullcmdline, 512, \"\\\"%s\\\" %s %s\", exename, filename, cmdline);\n    BOOL ret = CreateProcessA(NULL, fullcmdline, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);\n    \n    if (!ret)\n    {\n        char *msg;\n        FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError(), 0, &msg, 256, NULL);\n        WINE_MESSAGE( \"winevdm: Cannot start DOS application %s err: %s\\n\", filename, msg );\n        LocalFree(msg);\n        ReleaseThunkLock(&count);\n        Sleep(100); // wait for other tasks to finish, hopefully preventing deadlock\n        RestoreThunkLock(count);\n        ExitThread(1);\n    }\n    /* Give 10 seconds to the app to come up */\n    if (WaitForInputIdle(pi.hProcess, 10000) == WAIT_FAILED)\n        WINE_WARN(\"WaitForInputIdle failed: Error %d\\n\", GetLastError());\n    ReleaseThunkLock(&count);\n    WaitForSingleObject(pi.hProcess, INFINITE);\n    RestoreThunkLock(count);\n\n    DWORD exit_code;\n    GetExitCodeProcess(pi.hProcess, &exit_code);\n    CloseHandle(pi.hThread);\n    CloseHandle(pi.hProcess);\n    ExitThread(exit_code);\n}\n\nstatic VOID start_bat(LPCSTR filename, LPCSTR cmdline)\n{\n    char fullcmdline[MAX_PATH*2];\n    PROCESS_INFORMATION pi;\n    STARTUPINFOA si = {0};\n    DWORD count;\n    si.cb = sizeof(STARTUPINFOA);\n    char exename[MAX_PATH];\n    if (!GetEnvironmentVariableA(\"COMSPEC\", exename, MAX_PATH))\n        strcpy(exename, \"CMD.EXE\");\n    snprintf(fullcmdline, 512, \"\\\"%s\\\" /c %s %s\", exename, filename, cmdline);\n    BOOL ret = CreateProcessA(NULL, fullcmdline, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);\n    \n    if (!ret)\n    {\n        char *msg;\n        FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError(), 0, &msg, 256, NULL);\n        WINE_MESSAGE( \"winevdm: Cannot start batch file %s err: %s\\n\", filename, msg );\n        LocalFree(msg);\n        ReleaseThunkLock(&count);\n        Sleep(100); // wait for other tasks to finish, hopefully preventing deadlock\n        RestoreThunkLock(count);\n        ExitThread(1);\n    }\n    CloseHandle(pi.hThread);\n    CloseHandle(pi.hProcess);\n    ExitThread(1);\n}\n\n/***********************************************************************\n *           read_pif_file\n *pif386rec_tu\n * Read a pif file and return the header and possibly the 286 (real mode)\n * record or 386 (enhanced mode) record. Returns FALSE if the file is\n * invalid otherwise TRUE.\n */\nstatic BOOL read_pif_file( HANDLE hFile, char *progname, char *title,\n        char *optparams, char *startdir, int *closeonexit, int *textmode)\n{\n    DWORD nread;\n    LARGE_INTEGER filesize;\n    recordhead_t rhead;\n    BOOL found386rec = FALSE;\n    pif386rec_t pif386rec;\n    pifhead_t pifheader;\n    if( !GetFileSizeEx( hFile, &filesize) ||\n            filesize.QuadPart <  (sizeof(pifhead_t) + sizeof(recordhead_t))) {\n        WINE_ERR(\"Invalid pif file: size error %d\\n\", (int)filesize.QuadPart);\n        return FALSE;\n    }\n    SetFilePointer( hFile, 0, NULL, FILE_BEGIN);\n    if( !ReadFile( hFile, &pifheader, sizeof(pifhead_t), &nread, NULL))\n        return FALSE;\n    WINE_TRACE(\"header: program %s title %s startdir %s params %s\\n\",\n            wine_dbgstr_a(pifheader.program),\n            wine_dbgstr_an(pifheader.windowtitle, sizeof(pifheader.windowtitle)),\n            wine_dbgstr_a(pifheader.startdir),\n            wine_dbgstr_a(pifheader.optparams)); \n    WINE_TRACE(\"header: memory req'd %d desr'd %d drive %d videomode %d\\n\",\n            pifheader.memmin, pifheader.memmax, pifheader.startdrive,\n            pifheader.videomode);\n    WINE_TRACE(\"header: flags 0x%x 0x%x 0x%x\\n\",\n            pifheader.hdrflags1, pifheader.hdrflags2, pifheader.hdrflags3);\n    ReadFile( hFile, &rhead, sizeof(recordhead_t), &nread, NULL);\n    if( strncmp( rhead.recordname, \"MICROSOFT PIFEX\", 15)) {\n        WINE_ERR(\"Invalid pif file: magic string not found\\n\");\n        return FALSE;\n    }\n    /* now process the following records */\n    while( 1) {\n        WORD nextrecord = rhead.posofnextrecord;\n        if( (nextrecord & 0x8000) || \n                filesize.QuadPart <( nextrecord + sizeof(recordhead_t))) break;\n        if( !SetFilePointer( hFile, nextrecord, NULL, FILE_BEGIN) ||\n                !ReadFile( hFile, &rhead, sizeof(recordhead_t), &nread, NULL))\n            return FALSE;\n        if( !rhead.recordname[0]) continue; /* deleted record */\n        WINE_TRACE(\"reading record %s size %d next 0x%x\\n\",\n                wine_dbgstr_a(rhead.recordname), rhead.sizeofdata,\n                rhead.posofnextrecord );\n        if( !strncmp( rhead.recordname, \"WINDOWS 386\", 11)) {\n            found386rec = TRUE;\n            ReadFile( hFile, &pif386rec, sizeof(pif386rec_t), &nread, NULL);\n            WINE_TRACE(\"386rec: memory req'd %d des'd %d EMS req'd %d des'd %d XMS req'd %d des'd %d\\n\",\n                    pif386rec.memmin, pif386rec.memmax,\n                    pif386rec.emsmin, pif386rec.emsmax,\n                    pif386rec.xmsmin, pif386rec.xmsmax);\n            WINE_TRACE(\"386rec: option 0x%x memory 0x%x video 0x%x\\n\",\n                    pif386rec.optflags, pif386rec.memflags,\n                    pif386rec.videoflags);\n            WINE_TRACE(\"386rec: optional parameters %s\\n\",\n                    wine_dbgstr_a(pif386rec.optparams));\n        }\n    }\n    /* prepare the return data */\n    lstrcpynA( progname, pifheader.program, sizeof(pifheader.program)+1);\n    lstrcpynA( title, pifheader.windowtitle, sizeof(pifheader.windowtitle)+1);\n    if( found386rec)\n        lstrcpynA( optparams, pif386rec.optparams, sizeof( pif386rec.optparams)+1);\n    else\n        lstrcpynA( optparams, pifheader.optparams, sizeof(pifheader.optparams)+1);\n    lstrcpynA( startdir, pifheader.startdir, sizeof(pifheader.startdir)+1);\n    *closeonexit = pifheader.hdrflags1 & 0x10;\n    *textmode = found386rec ? pif386rec.videoflags & 0x0010\n                            : pifheader.hdrflags1 & 0x0002;\n    return TRUE;\n}\n\n/***********************************************************************\n *              pif_cmd\n *\n * execute a pif file.\n */\nstatic VOID pif_cmd( char *filename, char *cmdline)\n{ \n    HANDLE hFile;\n    char progpath[MAX_PATH];\n    char buf[128];\n    char progname[64];\n    char title[31];\n    char optparams[65];\n    char startdir[65];\n    char *p;\n    int closeonexit;\n    int textmode;\n    if( (hFile = CreateFileA( filename, GENERIC_READ, FILE_SHARE_READ,\n                    NULL, OPEN_EXISTING, 0, 0 )) == INVALID_HANDLE_VALUE)\n    {\n        WINE_ERR(\"open file %s failed\\n\", wine_dbgstr_a(filename));\n        return;\n    }\n    if( !read_pif_file( hFile, progname, title, optparams, startdir,\n                &closeonexit, &textmode)) {\n        WINE_ERR( \"failed to read %s\\n\", wine_dbgstr_a(filename));\n        CloseHandle( hFile);\n        sprintf( buf, \"%s\\nInvalid file format. Check your pif file.\", \n                filename);\n        MessageBoxA( NULL, buf, \"16 bit DOS subsystem\", MB_OK|MB_ICONWARNING);\n        SetLastError( ERROR_BAD_FORMAT);\n        return;\n    }\n    CloseHandle( hFile);\n    if( (p = strrchr( progname, '.')) && !_stricmp( p, \".bat\"))\n        WINE_FIXME(\".bat programs in pif files are not supported.\\n\"); \n    /* first change dir, so the search below can start from there */\n    if( startdir[0] && !SetCurrentDirectoryA( startdir)) {\n        WINE_ERR(\"Cannot change directory %s\\n\", wine_dbgstr_a( startdir));\n        sprintf( buf, \"%s\\nInvalid startup directory. Check your pif file.\", \n                filename);\n        MessageBoxA( NULL, buf, \"16 bit DOS subsystem\", MB_OK|MB_ICONWARNING);\n    }\n    /* search for the program */\n    if( !SearchPathA( NULL, progname, NULL, MAX_PATH, progpath, NULL )) {\n        sprintf( buf, \"%s\\nInvalid program file name. Check your pif file.\", \n                filename);\n        MessageBoxA( NULL, buf, \"16 bit DOS subsystem\", MB_OK|MB_ICONERROR);\n        SetLastError( ERROR_FILE_NOT_FOUND);\n        return;\n    }\n    /* if no arguments on the commandline, use them from the pif file */\n    if( !cmdline[0] && optparams[0])\n        cmdline = optparams;\n    /* FIXME: do something with:\n     * - close on exit\n     * - graphic modes\n     * - hot key's\n     * - etc.\n     */ \n    start_dos_exe( progpath, cmdline );\n}\n\n/**************************************************************************\n*           WINOLDAP entry point\n*/\nWORD WINAPI WinMain16(HINSTANCE16 inst, HINSTANCE16 prev, LPSTR cmdline, WORD show)\n{\n    DWORD count, exit_code = 1;\n\n    WINE_TRACE(\"%x %x %s %u\\n\", inst, prev, wine_dbgstr_a(cmdline), show);\n\n    if (!memcmp(\"-WoAWoW32\", cmdline, sizeof(\"-WoAWoW32\") / sizeof(char) - sizeof(char)))\n    {\n        HANDLE handle;\n        handle = (HANDLE)strtoull(cmdline + sizeof(\"-WoAWoW32\") / sizeof(char) - sizeof(char), NULL, 16);\n        DWORD count;\n        ReleaseThunkLock(&count);\n        WaitForSingleObject(handle, INFINITE);\n        RestoreThunkLock(count);\n        GetExitCodeProcess(handle, &exit_code);\n        ExitThread(exit_code);\n    }\n\n    char path[MAX_PATH];\n    LPCSTR filename = path;\n    LPCSTR name_beg, name_end, p, args = NULL;\n    if (cmdline == '\"') /* has to be only one and only at beginning ! */\n    {\n        name_beg = cmdline + 1;\n        p = strchr(cmdline + 1, '\"');\n        if (p)\n        {\n            name_end = p;\n            args = strchr(p, ' ');\n        }\n        else /* yes, even valid with trailing '\"' missing */\n            name_end = cmdline + strlen(cmdline);\n    }\n    else\n    {\n        name_beg = cmdline;\n        args = strchr(cmdline, ' ');\n        name_end = args ? args : cmdline + strlen(cmdline);\n    }\n    if ((name_beg == cmdline) && (!args))\n    { /* just use the original cmdline string as file name */\n        filename = cmdline;\n        args = \"\";\n    }\n    else\n    {\n        memcpy(path, name_beg, name_end - name_beg);\n        path[name_end - name_beg] = '\\0';\n    }\n\n    if (StrStrIA(filename, \".pif\"))\n        pif_cmd(filename, args);\n    else if (StrStrIA(filename, \".bat\"))\n        start_bat(filename, args);\n    else\n        start_dos_exe(filename, args);\n    \n    ExitThread(1);\n}\n\n"
  },
  {
    "path": "winoldap/winoldap.def",
    "content": "; File generated automatically from ../winoldap\\winoldap.mod16.spec; do not edit!\n\nLIBRARY winoldap.mod16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "winoldap/winoldap.mod16.spec",
    "content": "1 pascal WndProc(word word word long)\n2 pascal DialogProc(word word word long)\n"
  },
  {
    "path": "winoldap/winoldap.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>winoldap</RootNamespace>\n    <ProjectGuid>{F10EEF26-6451-4988-84D4-D193A4D2BF8C}</ProjectGuid>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.mod16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.mod16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n$(OutDir)winecrt0.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\nwinoldap.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\nwinoldap.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\n$(OutDir)winecrt0.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"winoldap.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"winoldap.mod16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"winoldap.mod16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" WINOLDAP -EXE &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" WINOLDAP -EXE &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">%(Filename).obj</Outputs>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"winoldap.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>\n"
  },
  {
    "path": "winsock/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(winsock SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/winsock.def winsock.dll16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(winsock.dll16 winsock)\ntarget_link_libraries(winsock libwine winecrt0 krnl386 ws2_32.lib)\nset_target_properties(winsock PROPERTIES SUFFIX \".dll16\")\n"
  },
  {
    "path": "winsock/Makefile.in",
    "content": "MODULE    = winsock.dll16\nIMPORTS   = ws2_32\nDELAYIMPORTS = user32\nEXTRADLLFLAGS = -m16 -Wb,--main-module,ws2_32.dll\n\nC_SRCS = socket.c\n"
  },
  {
    "path": "winsock/socket.c",
    "content": "/*\n * 16-bit socket functions\n *\n * Copyright (C) 1993,1994,1996,1997 John Brezak, Erik Bos, Alex Korobka\n * Copyright (C) 2003 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n\n#include \"winsock2.h\"\n#include \"wine/winbase16.h\"\n#include \"winsock16.h\"\n#include \"wownt32.h\"\n#include \"winuser.h\"\n#include \"wine/debug.h\"\n\nWINE_DEFAULT_DEBUG_CHANNEL(winsock);\n\nstruct async_query_header\n{\n    HWND     hWnd;\n    UINT     uMsg;\n    SEGPTR   sbuf;\n    INT      sbuflen;\n    HANDLE16 handle;\n};\n\nstruct async_query_gethostbyname\n{\n    struct async_query_header query;\n    char *host_name;\n};\n\nstruct async_query_gethostbyaddr\n{\n    struct async_query_header query;\n    char *host_addr;\n    int   host_len;\n    int   host_type;\n};\n\nstruct async_query_getprotobyname\n{\n    struct async_query_header query;\n    char *proto_name;\n};\n\nstruct async_query_getprotobynumber\n{\n    struct async_query_header query;\n    int   proto_number;\n};\n\nstruct async_query_getservbyname\n{\n    struct async_query_header query;\n    char *serv_name;\n    char *serv_proto;\n};\n\nstruct async_query_getservbyport\n{\n    struct async_query_header query;\n    char *serv_proto;\n    int   serv_port;\n};\n\nstatic INT num_startup;  /* reference counter */\nstatic void *he_buffer;\nstatic SEGPTR he_buffer_seg;\nstatic void *se_buffer;\nstatic SEGPTR se_buffer_seg;\nstatic void *pe_buffer;\nstatic SEGPTR pe_buffer_seg;\nstatic SEGPTR dbuffer_seg;\n\nextern int WINAPI WS_gethostname(char *name, int namelen);\n\nstatic fd_set *ws_fdset_16_to_32( const ws_fd_set16 *set16, fd_set *set32 )\n{\n    UINT i;\n    set32->fd_count = set16->fd_count;\n    for (i = 0; i < set32->fd_count; i++) set32->fd_array[i] = set16->fd_array[i];\n    return set32;\n}\n\nstatic ws_fd_set16 *ws_fdset_32_to_16( const fd_set *set32, ws_fd_set16 *set16 )\n{\n    UINT i;\n    set16->fd_count = set32->fd_count;\n    for (i = 0; i < set16->fd_count; i++) set16->fd_array[i] = set32->fd_array[i];\n    return set16;\n}\n\nstatic DWORD finish_query( struct async_query_header *query, LPARAM lparam )\n{\n    PostMessageW( query->hWnd, query->uMsg, (WPARAM)query->handle, lparam );\n    HeapFree( GetProcessHeap(), 0, query );\n    return 0;\n}\n\nstatic int list_size(char** l, int item_size)\n{\n    int i,j = 0;\n    if(l)\n    {\n        for(i=0;l[i];i++)\n            j += (item_size) ? item_size : strlen(l[i]) + 1;\n        j += (i + 1) * sizeof(char*);\n    }\n    return j;\n}\n\nstatic int list_dup(char** l_src, SEGPTR base, int item_size)\n{\n    int i, offset;\n    char *ref = MapSL(base);\n    SEGPTR *l_to = (SEGPTR *)ref;\n\n    for (i = 0; l_src[i]; i++) ;\n    offset = (i + 1) * sizeof(char*);\n    for (i = 0; l_src[i]; i++)\n    {\n        int count = item_size ? item_size : strlen(l_src[i]) + 1;\n        memcpy( ref + offset, l_src[i], count );\n        l_to[i] = base + offset;\n        offset += count;\n    }\n    l_to[i] = 0;\n    return offset;\n}\n\nstatic SEGPTR get_buffer_he(int size)\n{\n    static int he_len;\n    if (he_buffer)\n    {\n        if (he_len >= size ) return he_buffer_seg;\n        UnMapLS( he_buffer_seg );\n        HeapFree( GetProcessHeap(), 0, he_buffer );\n    }\n    he_buffer = HeapAlloc( GetProcessHeap(), 0, (he_len = size) );\n    he_buffer_seg = MapLS( he_buffer );\n    return he_buffer_seg;\n}\n\nstatic SEGPTR get_buffer_se(int size)\n{\n    static int se_len;\n    if (se_buffer)\n    {\n        if (se_len >= size ) return se_buffer_seg;\n        UnMapLS( se_buffer_seg );\n        HeapFree( GetProcessHeap(), 0, se_buffer );\n    }\n    se_buffer = HeapAlloc( GetProcessHeap(), 0, (se_len = size) );\n    se_buffer_seg = MapLS( se_buffer );\n    return se_buffer_seg;\n}\n\nstatic SEGPTR get_buffer_pe(int size)\n{\n    static int pe_len;\n    if (pe_buffer)\n    {\n        if (pe_len >= size ) return pe_buffer_seg;\n        UnMapLS( pe_buffer_seg );\n        HeapFree( GetProcessHeap(), 0, pe_buffer );\n    }\n    pe_buffer = HeapAlloc( GetProcessHeap(), 0, (pe_len = size) );\n    pe_buffer_seg = MapLS( pe_buffer );\n    return pe_buffer_seg;\n}\n\n/* duplicate hostent entry\n * and handle all Win16/Win32 dependent things (struct size, ...) *correctly*.\n * Ditto for protoent and servent.\n */\nstatic SEGPTR ws_hostent_32_to_16( const struct hostent* he, SEGPTR base, int *buff_size )\n{\n    char *p;\n    struct ws_hostent16 *p_to;\n\n    int size = (sizeof(*p_to) +\n                strlen(he->h_name) + 1 +\n                list_size(he->h_aliases, 0) +\n                list_size(he->h_addr_list, he->h_length));\n\n    if (buff_size)\n    {\n        if (*buff_size < size)\n        {\n            *buff_size = size;\n            return 0;\n        }\n        *buff_size = size;\n    }\n    else base = get_buffer_he(size);\n    p_to = MapSL(base);\n\n    p_to->h_addrtype = he->h_addrtype;\n    p_to->h_length = he->h_length;\n\n    p = (char *)(p_to + 1);\n    p_to->h_name = base + (p - (char *)p_to);\n    strcpy(p, he->h_name);\n    p += strlen(p) + 1;\n\n    p_to->h_aliases = base + (p - (char *)p_to);\n    p += list_dup(he->h_aliases, p_to->h_aliases, 0);\n\n    p_to->h_addr_list = base + (p - (char *)p_to);\n    list_dup(he->h_addr_list, p_to->h_addr_list, he->h_length);\n\n    return base;\n}\n\nstatic SEGPTR ws_protoent_32_to_16( const struct protoent *pe, SEGPTR base, int *buff_size )\n{\n    char *p;\n    struct ws_protoent16 *p_to;\n\n    int size = (sizeof(*p_to) +\n                strlen(pe->p_name) + 1 +\n                list_size(pe->p_aliases, 0));\n\n    if (buff_size)\n    {\n        if (*buff_size < size)\n        {\n            *buff_size = size;\n            return 0;\n        }\n        *buff_size = size;\n    }\n    else base = get_buffer_pe(size);\n    p_to = MapSL(base);\n\n    p_to->p_proto = pe->p_proto;\n    p = (char *)(p_to + 1);\n\n    p_to->p_name = base + (p - (char *)p_to);\n    strcpy(p, pe->p_name);\n    p += strlen(p) + 1;\n\n    p_to->p_aliases = base + (p - (char *)p_to);\n    list_dup(pe->p_aliases, p_to->p_aliases, 0);\n\n    return base;\n}\n\nstatic SEGPTR ws_servent_32_to_16( const struct servent *se, SEGPTR base, int *buff_size )\n{\n    char *p;\n    struct ws_servent16 *p_to;\n\n    int size = (sizeof(*p_to) +\n                strlen(se->s_proto) + 1 +\n                strlen(se->s_name) + 1 +\n                list_size(se->s_aliases, 0));\n\n    if (buff_size)\n    {\n        if (*buff_size < size)\n        {\n            *buff_size = size;\n            return 0;\n        }\n        *buff_size = size;\n    }\n    else base = get_buffer_se(size);\n    p_to = MapSL(base);\n\n    p_to->s_port = se->s_port;\n    p = (char *)(p_to + 1);\n\n    p_to->s_name = base + (p - (char *)p_to);\n    strcpy(p, se->s_name);\n    p += strlen(p) + 1;\n\n    p_to->s_proto = base + (p - (char *)p_to);\n    strcpy(p, se->s_proto);\n    p += strlen(p) + 1;\n\n    p_to->s_aliases = base + (p - (char *)p_to);\n    list_dup(se->s_aliases, p_to->s_aliases, 0);\n\n    return base;\n}\n\nstatic DWORD WINAPI async_gethostbyname(LPVOID arg)\n{\n    struct async_query_gethostbyname *aq = arg;\n    int size = 0;\n    WORD fail = 0;\n    struct hostent *he;\n\n    if ((he = gethostbyname( aq->host_name )))\n    {\n        size = aq->query.sbuflen;\n        if (!ws_hostent_32_to_16( he, aq->query.sbuf, &size )) fail = WSAENOBUFS;\n    }\n    else fail = GetLastError();\n\n    return finish_query( &aq->query, MAKELPARAM( size, fail ));\n}\n\nstatic DWORD WINAPI async_gethostbyaddr(LPVOID arg)\n{\n    struct async_query_gethostbyaddr *aq = arg;\n    int size = 0;\n    WORD fail = 0;\n    struct hostent *he;\n\n    if ((he = gethostbyaddr(aq->host_addr,aq->host_len,aq->host_type)))\n    {\n        size = aq->query.sbuflen;\n        if (!ws_hostent_32_to_16( he, aq->query.sbuf, &size )) fail = WSAENOBUFS;\n    }\n    else fail = GetLastError();\n\n    return finish_query( &aq->query, MAKELPARAM( size, fail ));\n}\n\nstatic DWORD WINAPI async_getprotobyname(LPVOID arg)\n{\n    struct async_query_getprotobyname *aq = arg;\n    int size = 0;\n    WORD fail = 0;\n    struct protoent *pe;\n\n    if ((pe = getprotobyname(aq->proto_name)))\n    {\n        size = aq->query.sbuflen;\n        if (!ws_protoent_32_to_16( pe, aq->query.sbuf, &size )) fail = WSAENOBUFS;\n    }\n    else fail = GetLastError();\n\n    return finish_query( &aq->query, MAKELPARAM( size, fail ));\n}\n\nstatic DWORD WINAPI async_getprotobynumber(LPVOID arg)\n{\n    struct async_query_getprotobynumber *aq = arg;\n    int size = 0;\n    WORD fail = 0;\n    struct protoent *pe;\n\n    if ((pe = getprotobynumber(aq->proto_number)))\n    {\n        size = aq->query.sbuflen;\n        if (!ws_protoent_32_to_16( pe, aq->query.sbuf, &size )) fail = WSAENOBUFS;\n    }\n    else fail = GetLastError();\n\n    return finish_query( &aq->query, MAKELPARAM( size, fail ));\n}\n\nstatic DWORD WINAPI async_getservbyname(LPVOID arg)\n{\n    struct async_query_getservbyname *aq = arg;\n    int size = 0;\n    WORD fail = 0;\n    struct servent *se;\n\n    if ((se = getservbyname(aq->serv_name,aq->serv_proto)))\n    {\n        size = aq->query.sbuflen;\n        if (!ws_servent_32_to_16( se, aq->query.sbuf, &size )) fail = WSAENOBUFS;\n    }\n    else fail = GetLastError();\n\n    return finish_query( &aq->query, MAKELPARAM( size, fail ));\n}\n\nstatic DWORD WINAPI async_getservbyport(LPVOID arg)\n{\n    struct async_query_getservbyport *aq = arg;\n    int size = 0;\n    WORD fail = 0;\n    struct servent *se;\n\n    if ((se = getservbyport(aq->serv_port,aq->serv_proto)))\n    {\n        size = aq->query.sbuflen;\n        if (!ws_servent_32_to_16( se, aq->query.sbuf, &size )) fail = WSAENOBUFS;\n    }\n    else fail = GetLastError();\n\n    return finish_query( &aq->query, MAKELPARAM( size, fail ));\n}\n\n/****************************************************************************\n * The main async help function.\n *\n * It either starts a thread or just calls the function directly for platforms\n * with no thread support. This relies on the fact that PostMessage() does\n * not actually call the windowproc before the function returns.\n */\nstatic HANDLE16 run_query( HWND16 hWnd, UINT uMsg, LPTHREAD_START_ROUTINE func,\n                           struct async_query_header *query, SEGPTR sbuf, INT sbuflen )\n{\n    static LONG next_handle = 0xdead;\n    HANDLE thread;\n    ULONG handle = LOWORD( InterlockedIncrement( &next_handle ));\n\n    /* avoid handle 0 */\n    while (!handle) handle = LOWORD( InterlockedIncrement( &next_handle ));\n\n    query->hWnd    = HWND_32(hWnd);\n    query->uMsg    = uMsg;\n    query->handle  = handle;\n    query->sbuf    = sbuf;\n    query->sbuflen = sbuflen;\n\n    thread = CreateThread( NULL, 0, func, query, 0, NULL );\n    if (!thread)\n    {\n        SetLastError( WSAEWOULDBLOCK );\n        return 0;\n    }\n    CloseHandle( thread );\n    return handle;\n}\n\n/***********************************************************************\n *              accept\t\t(WINSOCK.1)\n */\nSOCKET16 WINAPI accept16(SOCKET16 s, struct sockaddr* addr, INT16* addrlen16 )\n{\n    struct sockaddr addr32;\n    INT addrlen32 = addrlen16 ? *addrlen16 : sizeof(addr32);\n    \n    // Both addr and addrlen are optional\n    // If you pass an addrlen parameter, the win32 accept api call assumes the length should be greater or equal to sockaddr struct.\n    // Passing in a value of zero in addrlen32 will cause error WSAEFAULT\n    // As a fix, set addrlen32 to size of a local sockaddr structure and pass this too. Copy the returned contents to addr if necessary.\n\n    SOCKET retSocket = accept( s, &addr32, &addrlen32 );\n    if( addrlen16 ) *addrlen16 = addrlen32;\n    if (retSocket != INVALID_SOCKET && addr) memcpy(addr, &addr32, addrlen32);\n    return retSocket;\n}\n\n/***********************************************************************\n *              bind\t\t\t(WINSOCK.2)\n */\nINT16 WINAPI bind16(SOCKET16 s, struct sockaddr *name, INT16 namelen)\n{\n    return bind( s, name, namelen );\n}\n\n/***********************************************************************\n *              closesocket           (WINSOCK.3)\n */\nINT16 WINAPI closesocket16(SOCKET16 s)\n{\n    return closesocket(s);\n}\n\n/***********************************************************************\n *              connect               (WINSOCK.4)\n */\nINT16 WINAPI connect16(SOCKET16 s, struct sockaddr *name, INT16 namelen)\n{\n    return connect( s, name, namelen );\n}\n\n/***********************************************************************\n *              getpeername\t\t(WINSOCK.5)\n */\nINT16 WINAPI getpeername16(SOCKET16 s, struct sockaddr *name, INT16 *namelen16)\n{\n    INT namelen32 = *namelen16;\n    INT retVal = getpeername( s, name, &namelen32 );\n   *namelen16 = namelen32;\n    return retVal;\n}\n\n/***********************************************************************\n *              getsockname\t\t(WINSOCK.6)\n */\nINT16 WINAPI getsockname16(SOCKET16 s, struct sockaddr *name, INT16 *namelen16)\n{\n    INT retVal;\n\n    if( namelen16 )\n    {\n        INT namelen32 = *namelen16;\n        retVal = getsockname( s, name, &namelen32 );\n       *namelen16 = namelen32;\n    }\n    else retVal = SOCKET_ERROR;\n    return retVal;\n}\n\n/***********************************************************************\n *              getsockopt\t\t(WINSOCK.7)\n */\nINT16 WINAPI getsockopt16(SOCKET16 s, INT16 level, INT16 optname, char *optval, INT16 *optlen)\n{\n    INT optlen32;\n    INT *p = &optlen32;\n    INT retVal;\n\n    if( optlen ) optlen32 = *optlen; else p = NULL;\n    retVal = getsockopt( s, (WORD)level, optname, optval, p );\n    if( optlen ) *optlen = optlen32;\n    return retVal;\n}\n\n/***********************************************************************\n *\t\thtonl\t\t\t(WINSOCK.8)\n */\nu_long WINAPI htonl16(u_long hostlong)\n{\n    return htonl(hostlong);\n}\n\n\n/***********************************************************************\n *\t\thtons\t\t\t(WINSOCK.9)\n */\nu_short WINAPI htons16(u_short hostshort)\n{\n    return htons(hostshort);\n}\n\n/***********************************************************************\n *\t\tinet_addr\t\t(WINSOCK.10)\n */\nu_long WINAPI inet_addr16(const char *cp)\n{\n    if (!cp) return INADDR_NONE;\n    return inet_addr(cp);\n}\n\n\n/***********************************************************************\n *\t\tinet_ntoa\t\t(WINSOCK.11)\n */\nSEGPTR WINAPI inet_ntoa16(struct in_addr in)\n{\n    char* retVal;\n    if (!(retVal = inet_ntoa( in ))) return 0;\n    if (!dbuffer_seg) dbuffer_seg = MapLS( retVal );\n    return dbuffer_seg;\n}\n\n/***********************************************************************\n *              ioctlsocket           (WINSOCK.12)\n */\nINT16 WINAPI ioctlsocket16(SOCKET16 s, LONG cmd, u_long *argp)\n{\n    return ioctlsocket( s, cmd, argp );\n}\n\n/***********************************************************************\n *              listen\t\t(WINSOCK.13)\n */\nINT16 WINAPI listen16(SOCKET16 s, INT16 backlog)\n{\n    return listen( s, backlog );\n}\n\n/***********************************************************************\n *\t\tntohl\t\t\t(WINSOCK.14)\n */\nu_long WINAPI ntohl16(u_long netlong)\n{\n    return ntohl(netlong);\n}\n\n\n/***********************************************************************\n *\t\tntohs\t\t\t(WINSOCK.15)\n */\nu_short WINAPI ntohs16(u_short netshort)\n{\n    return ntohs(netshort);\n}\n\n/***********************************************************************\n *              recv\t\t\t(WINSOCK.16)\n */\nINT16 WINAPI recv16(SOCKET16 s, char *buf, INT16 len, INT16 flags)\n{\n    return recv( s, buf, len, flags );\n}\n\n/***********************************************************************\n *              recvfrom\t\t(WINSOCK.17)\n */\nINT16 WINAPI recvfrom16(SOCKET16 s, char *buf, INT16 len, INT16 flags,\n                        struct sockaddr *from, INT16 *fromlen16)\n{\n    if (fromlen16)\n    {\n        INT fromlen32 = *fromlen16;\n        INT retVal = recvfrom( s, buf, len, flags, from, &fromlen32 );\n        *fromlen16 = fromlen32;\n        return retVal;\n    }\n    else return recvfrom( s, buf, len, flags, from, NULL );\n}\n\n/***********************************************************************\n *\t\tselect\t\t\t(WINSOCK.18)\n */\nINT16 WINAPI select16(INT16 nfds, ws_fd_set16 *ws_readfds,\n                      ws_fd_set16 *ws_writefds, ws_fd_set16 *ws_exceptfds,\n                      struct timeval* timeout)\n{\n    fd_set read_set, write_set, except_set;\n    fd_set *pread_set = NULL, *pwrite_set = NULL, *pexcept_set = NULL;\n    int ret;\n\n    if (ws_readfds) pread_set = ws_fdset_16_to_32( ws_readfds, &read_set );\n    if (ws_writefds) pwrite_set = ws_fdset_16_to_32( ws_writefds, &write_set );\n    if (ws_exceptfds) pexcept_set = ws_fdset_16_to_32( ws_exceptfds, &except_set );\n    /* struct timeval is the same for both 32- and 16-bit code */\n    ret = select( nfds, pread_set, pwrite_set, pexcept_set, timeout );\n    if (ws_readfds) ws_fdset_32_to_16( &read_set, ws_readfds );\n    if (ws_writefds) ws_fdset_32_to_16( &write_set, ws_writefds );\n    if (ws_exceptfds) ws_fdset_32_to_16( &except_set, ws_exceptfds );\n    return ret;\n}\n\n/***********************************************************************\n *              send\t\t\t(WINSOCK.19)\n */\nINT16 WINAPI send16(SOCKET16 s, char *buf, INT16 len, INT16 flags)\n{\n    return send( s, buf, len, flags );\n}\n\n/***********************************************************************\n *              sendto\t\t(WINSOCK.20)\n */\nINT16 WINAPI sendto16(SOCKET16 s, char *buf, INT16 len, INT16 flags,\n                      struct sockaddr *to, INT16 tolen)\n{\n    return sendto( s, buf, len, flags, to, tolen );\n}\n\n/***********************************************************************\n *              setsockopt\t\t(WINSOCK.21)\n */\nINT16 WINAPI setsockopt16(SOCKET16 s, INT16 level, INT16 optname,\n                          char *optval, INT16 optlen)\n{\n    if( !optval ) return SOCKET_ERROR;\n    return setsockopt( s, (WORD)level, optname, optval, optlen );\n}\n\n/***********************************************************************\n *              shutdown\t\t(WINSOCK.22)\n */\nINT16 WINAPI shutdown16(SOCKET16 s, INT16 how)\n{\n    return shutdown( s, how );\n}\n\n/***********************************************************************\n *              socket\t\t(WINSOCK.23)\n */\nSOCKET16 WINAPI socket16(INT16 af, INT16 type, INT16 protocol)\n{\n    return socket( af, type, protocol );\n}\n\n/***********************************************************************\n *\t\tgethostbyaddr\t\t(WINSOCK.51)\n */\nSEGPTR WINAPI gethostbyaddr16(const char *addr, INT16 len, INT16 type)\n{\n    struct hostent *he;\n\n    if (!(he = gethostbyaddr( addr, len, type ))) return 0;\n    return ws_hostent_32_to_16( he, 0, NULL );\n}\n\n/***********************************************************************\n *\t\tgethostbyname\t\t(WINSOCK.52)\n */\nSEGPTR WINAPI gethostbyname16(const char *name)\n{\n    struct hostent *he;\n\n    if (!(he = gethostbyname( name ))) return 0;\n    return ws_hostent_32_to_16( he, 0, NULL );\n}\n\n/***********************************************************************\n *\t\tgetprotobyname\t\t(WINSOCK.53)\n */\nSEGPTR WINAPI getprotobyname16(const char *name)\n{\n    struct protoent *pe;\n\n    if (!(pe = getprotobyname( name ))) return 0;\n    return ws_protoent_32_to_16( pe, 0, NULL );\n}\n\n/***********************************************************************\n *\t\tgetprotobynumber\t(WINSOCK.54)\n */\nSEGPTR WINAPI getprotobynumber16(INT16 number)\n{\n    struct protoent *pe;\n\n    if (!(pe = getprotobynumber( number ))) return 0;\n    return ws_protoent_32_to_16( pe, 0, NULL );\n}\n\n/***********************************************************************\n *\t\tgetservbyname\t\t(WINSOCK.55)\n */\nSEGPTR WINAPI getservbyname16(const char *name, const char *proto)\n{\n    struct servent *se;\n\n    if (!(se = getservbyname( name, proto ))) return 0;\n    return ws_servent_32_to_16( se, 0, NULL );\n}\n\n/***********************************************************************\n *\t\tgetservbyport\t\t(WINSOCK.56)\n */\nSEGPTR WINAPI getservbyport16(INT16 port, const char *proto)\n{\n    struct servent *se;\n\n    if (!(se = getservbyport( port, proto ))) return 0;\n    return ws_servent_32_to_16( se, 0, NULL );\n}\n\n/***********************************************************************\n *              gethostname           (WINSOCK.57)\n */\nINT16 WINAPI gethostname16(char *name, INT16 namelen)\n{\n    extern int WINAPI gethostname(char *name, INT namelen);\n    return gethostname(name, namelen);\n}\n\n/***********************************************************************\n *      WSAAsyncSelect\t\t(WINSOCK.101)\n */\nINT16 WINAPI WSAAsyncSelect16(SOCKET16 s, HWND16 hWnd, UINT16 wMsg, LONG lEvent)\n{\n    return WSAAsyncSelect( s, HWND_32(hWnd), wMsg, lEvent );\n}\n\n/***********************************************************************\n *       WSAAsyncGetHostByAddr\t(WINSOCK.102)\n */\nHANDLE16 WINAPI WSAAsyncGetHostByAddr16(HWND16 hWnd, UINT16 uMsg, LPCSTR addr,\n                               INT16 len, INT16 type, SEGPTR sbuf, INT16 buflen)\n{\n    struct async_query_gethostbyaddr *aq;\n\n    TRACE(\"hwnd %04x, msg %04x, addr %p[%i]\\n\", hWnd, uMsg, addr, len );\n\n    if (!(aq = HeapAlloc( GetProcessHeap(), 0, sizeof(*aq) + len )))\n    {\n        SetLastError( WSAEWOULDBLOCK );\n        return 0;\n    }\n    aq->host_addr = (char *)(aq + 1);\n    aq->host_len  = len;\n    aq->host_type = type;\n    memcpy( aq->host_addr, addr, len );\n    return run_query( hWnd, uMsg, async_gethostbyaddr, &aq->query, sbuf, buflen );\n}\n\n/***********************************************************************\n *       WSAAsyncGetHostByName\t(WINSOCK.103)\n */\nHANDLE16 WINAPI WSAAsyncGetHostByName16(HWND16 hWnd, UINT16 uMsg, LPCSTR name,\n                                      SEGPTR sbuf, INT16 buflen)\n{\n    struct async_query_gethostbyname *aq;\n    unsigned int len = strlen(name) + 1;\n\n    TRACE(\"hwnd %04x, msg %04x, host %s, buffer %i\\n\", hWnd, uMsg, debugstr_a(name), buflen );\n\n    if (!(aq = HeapAlloc( GetProcessHeap(), 0, sizeof(*aq) + len )))\n    {\n        SetLastError( WSAEWOULDBLOCK );\n        return 0;\n    }\n    aq->host_name = (char *)(aq + 1);\n    strcpy( aq->host_name, name );\n    return run_query( hWnd, uMsg, async_gethostbyname, &aq->query, sbuf, buflen );\n}\n\n/***********************************************************************\n *       WSAAsyncGetProtoByNumber\t(WINSOCK.104)\n */\nHANDLE16 WINAPI WSAAsyncGetProtoByNumber16(HWND16 hWnd,UINT16 uMsg,INT16 number,\n                                           SEGPTR sbuf, INT16 buflen)\n{\n    struct async_query_getprotobynumber *aq;\n\n    TRACE(\"hwnd %04x, msg %04x, num %i\\n\", hWnd, uMsg, number );\n\n    if (!(aq = HeapAlloc( GetProcessHeap(), 0, sizeof(*aq) )))\n    {\n        SetLastError( WSAEWOULDBLOCK );\n        return 0;\n    }\n    aq->proto_number = number;\n    return run_query( hWnd, uMsg, async_getprotobynumber, &aq->query, sbuf, buflen );\n}\n\n/***********************************************************************\n *       WSAAsyncGetProtoByName\t(WINSOCK.105)\n */\nHANDLE16 WINAPI WSAAsyncGetProtoByName16(HWND16 hWnd, UINT16 uMsg, LPCSTR name,\n                                         SEGPTR sbuf, INT16 buflen)\n{\n    struct async_query_getprotobyname *aq;\n    unsigned int len = strlen(name) + 1;\n\n    TRACE(\"hwnd %04x, msg %04x, proto %s, buffer %i\\n\", hWnd, uMsg, debugstr_a(name), buflen );\n\n    if (!(aq = HeapAlloc( GetProcessHeap(), 0, sizeof(*aq) + len )))\n    {\n        SetLastError( WSAEWOULDBLOCK );\n        return 0;\n    }\n    aq->proto_name = (char *)(aq + 1);\n    strcpy( aq->proto_name, name );\n    return run_query( hWnd, uMsg, async_getprotobyname, &aq->query, sbuf, buflen );\n}\n\n/***********************************************************************\n *       WSAAsyncGetServByPort\t(WINSOCK.106)\n */\nHANDLE16 WINAPI WSAAsyncGetServByPort16(HWND16 hWnd, UINT16 uMsg, INT16 port,\n                                        LPCSTR proto, SEGPTR sbuf, INT16 buflen)\n{\n    struct async_query_getservbyport *aq;\n    unsigned int len = strlen(proto) + 1;\n\n    TRACE(\"hwnd %04x, msg %04x, port %i, proto %s\\n\", hWnd, uMsg, port, debugstr_a(proto));\n\n    if (!(aq = HeapAlloc( GetProcessHeap(), 0, sizeof(*aq) + len )))\n    {\n        SetLastError( WSAEWOULDBLOCK );\n        return 0;\n    }\n    aq->serv_proto = (char *)(aq + 1);\n    aq->serv_port  = port;\n    strcpy( aq->serv_proto, proto );\n    return run_query( hWnd, uMsg, async_getservbyport, &aq->query, sbuf, buflen );\n}\n\n/***********************************************************************\n *       WSAAsyncGetServByName\t(WINSOCK.107)\n */\nHANDLE16 WINAPI WSAAsyncGetServByName16(HWND16 hWnd, UINT16 uMsg, LPCSTR name,\n                                        LPCSTR proto, SEGPTR sbuf, INT16 buflen)\n{\n    struct async_query_getservbyname *aq;\n    unsigned int len1 = strlen(name) + 1;\n    unsigned int len2 = strlen(proto) + 1;\n\n    TRACE(\"hwnd %04x, msg %04x, name %s, proto %s\\n\", hWnd, uMsg, debugstr_a(name), debugstr_a(proto));\n\n    if (!(aq = HeapAlloc( GetProcessHeap(), 0, sizeof(*aq) + len1 + len2 )))\n    {\n        SetLastError( WSAEWOULDBLOCK );\n        return 0;\n    }\n    aq->serv_name  = (char *)(aq + 1);\n    aq->serv_proto = aq->serv_name + len1;\n    strcpy( aq->serv_name, name );\n    strcpy( aq->serv_proto, proto );\n    return run_query( hWnd, uMsg, async_getservbyname, &aq->query, sbuf, buflen );\n}\n\n/***********************************************************************\n *       WSACancelAsyncRequest\t(WINSOCK.108)\n */\nINT16 WINAPI WSACancelAsyncRequest16(HANDLE16 hAsyncTaskHandle)\n{\n    FIXME(\"(%04x),stub\\n\", hAsyncTaskHandle);\n    return 0;\n}\n\n__declspec(thread) static FARPROC16 first_hook;\n__declspec(thread) static DWORD (WINAPI *win32_hook)() = NULL;\n\nINT16 WINAPI default_hook()\n{\n    return win32_hook();\n}\n\nDWORD WINAPI thunk_hook()\n{\n    PVOID sssp = getWOW32Reserved();\n    DWORD ret;\n    WOWCallback16Ex(first_hook, WCB16_PASCAL, 0, NULL, &ret);\n    setWOW32Reserved(sssp);\n    return LOWORD(ret);\n}\n\n/***********************************************************************\n *      WSASetBlockingHook\t\t(WINSOCK.109)\n */\nFARPROC16 WINAPI WSASetBlockingHook16(FARPROC16 lpBlockFunc)\n{\n    static FARPROC16 default_hook = NULL;\n    if (!default_hook)\n        default_hook = GetProcAddress16(GetModuleHandle16(\"WINSOCK\"), \"DEFAULT_HOOK\");\n    if (!win32_hook)\n    {\n        win32_hook = WSASetBlockingHook(thunk_hook);\n        first_hook = default_hook;\n    }\n    if (lpBlockFunc == default_hook)\n    {\n        WSASetBlockingHook(win32_hook);\n        win32_hook = NULL;\n        return 0;\n    }\n    FARPROC16 old_hook = first_hook;\n    first_hook = lpBlockFunc;\n    return old_hook;\n}\n\n/***********************************************************************\n *      WSAUnhookBlockingHook\t(WINSOCK.110)\n */\nINT16 WINAPI WSAUnhookBlockingHook16(void)\n{\n    win32_hook = NULL;\n    return WSAUnhookBlockingHook();\n}\n\n/***********************************************************************\n *      WSAGetLastError\t\t(WINSOCK.111)\n */\nINT WINAPI WSAGetLastError16(void)\n{\n    return WSAGetLastError();\n}\n\n/***********************************************************************\n *      WSASetLastError\t\t(WINSOCK.112)\n */\nvoid WINAPI WSASetLastError16(INT16 iError)\n{\n    WSASetLastError(iError);\n}\n\n/***********************************************************************\n *      WSACancelBlockingCall\t\t(WINSOCK.113)\n */\nINT WINAPI WSACancelBlockingCall16(void)\n{\n    return WSACancelBlockingCall();\n}\n\n/***********************************************************************\n *      WSAIsBlocking\t\t\t(WINSOCK.114)\n */\nBOOL WINAPI WSAIsBlocking16(void)\n{\n    return WSAIsBlocking();\n}\n\n/***********************************************************************\n *      WSAStartup\t\t\t(WINSOCK.115)\n *\n * Create socket control struct, attach it to the global list and\n * update a pointer in the task struct.\n */\nINT16 WINAPI WSAStartup16(UINT16 wVersionRequested, LPWSADATA16 lpWSAData)\n{\n    WSADATA data;\n    INT ret = WSAStartup( wVersionRequested, &data );\n\n    if (!ret)\n    {\n        lpWSAData->wVersion     = 0x0101;\n        lpWSAData->wHighVersion = 0x0101;\n        strcpy( lpWSAData->szDescription, data.szDescription );\n        strcpy( lpWSAData->szSystemStatus, data.szSystemStatus );\n        lpWSAData->iMaxSockets = data.iMaxSockets;\n        lpWSAData->iMaxUdpDg = data.iMaxUdpDg;\n        lpWSAData->lpVendorInfo = 0;\n        num_startup++;\n   }\n    return ret;\n}\n\n/***********************************************************************\n *      WSACleanup\t\t\t(WINSOCK.116)\n */\nINT WINAPI WSACleanup16(void)\n{\n    if (num_startup)\n    {\n        if (!--num_startup)\n        {\n            /* delete scratch buffers */\n            UnMapLS( he_buffer_seg );\n            UnMapLS( se_buffer_seg );\n            UnMapLS( pe_buffer_seg );\n            UnMapLS( dbuffer_seg );\n            he_buffer_seg = 0;\n            se_buffer_seg = 0;\n            pe_buffer_seg = 0;\n            dbuffer_seg = 0;\n            HeapFree( GetProcessHeap(), 0, he_buffer );\n            HeapFree( GetProcessHeap(), 0, se_buffer );\n            HeapFree( GetProcessHeap(), 0, pe_buffer );\n            he_buffer = NULL;\n            se_buffer = NULL;\n            pe_buffer = NULL;\n        }\n    }\n    return WSACleanup();\n}\n\n\n/***********************************************************************\n *\t__WSAFDIsSet\t\t\t(WINSOCK.151)\n */\nINT16 WINAPI __WSAFDIsSet16(SOCKET16 s, ws_fd_set16 *set)\n{\n  int i = set->fd_count;\n\n  TRACE(\"(%d,%p(%i))\\n\", s, set, i);\n\n  while (i--)\n      if (set->fd_array[i] == s) return 1;\n  return 0;\n}\n\n/***********************************************************************\n *              WSARecvEx\t\t\t(WINSOCK.1107)\n *\n * See description for WSARecvEx()\n */\nINT16 WINAPI WSARecvEx16(SOCKET16 s, char *buf, INT16 len, INT16 *flags)\n{\n    FIXME(\"(WSARecvEx16) partial packet return value not set\\n\");\n    return recv16(s, buf, len, *flags);\n}\n"
  },
  {
    "path": "winsock/winsock.def",
    "content": "; File generated automatically from winsock\\winsock.dll16.spec; do not edit!\n\nLIBRARY winsock.dll16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "winsock/winsock.dll16.spec",
    "content": "1   pascal -ret16 accept(word ptr ptr) accept16\n2   pascal -ret16 bind(word ptr word) bind16\n3   pascal -ret16 closesocket(word) closesocket16\n4   pascal -ret16 connect(word ptr word) connect16\n5   pascal -ret16 getpeername(word ptr ptr) getpeername16\n6   pascal -ret16 getsockname(word ptr ptr) getsockname16\n7   pascal -ret16 getsockopt(word word word ptr ptr) getsockopt16\n8   pascal htonl(long) htonl16\n9   pascal -ret16 htons(word) htons16\n10  pascal inet_addr(ptr) inet_addr16\n11  pascal inet_ntoa(long) inet_ntoa16\n12  pascal -ret16 ioctlsocket(word long ptr) ioctlsocket16\n13  pascal -ret16 listen(word word) listen16\n14  pascal ntohl(long) ntohl16\n15  pascal -ret16 ntohs(word) ntohs16\n16  pascal -ret16 recv(word ptr word word) recv16\n17  pascal -ret16 recvfrom(word ptr word word ptr ptr) recvfrom16\n18  pascal -ret16 select(word ptr ptr ptr ptr) select16\n19  pascal -ret16 send(word ptr word word) send16\n20  pascal -ret16 sendto(word ptr word word ptr word) sendto16\n21  pascal -ret16 setsockopt(word word word ptr word) setsockopt16\n22  pascal -ret16 shutdown(word word) shutdown16\n23  pascal -ret16 socket(word word word) socket16\n51  pascal gethostbyaddr(ptr word word) gethostbyaddr16\n52  pascal gethostbyname(ptr) gethostbyname16\n53  pascal getprotobyname(ptr) getprotobyname16\n54  pascal getprotobynumber(word) getprotobynumber16\n55  pascal getservbyname(ptr ptr) getservbyname16\n56  pascal getservbyport(word ptr) getservbyport16\n57  pascal gethostname(ptr word) gethostname16\n101 pascal -ret16 WSAAsyncSelect(word word word long) WSAAsyncSelect16\n102 pascal -ret16 WSAAsyncGetHostByAddr(word word ptr word word segptr word) WSAAsyncGetHostByAddr16\n103 pascal -ret16 WSAAsyncGetHostByName(word word str segptr word) WSAAsyncGetHostByName16\n104 pascal -ret16 WSAAsyncGetProtoByNumber(word word word segptr word) WSAAsyncGetProtoByNumber16\n105 pascal -ret16 WSAAsyncGetProtoByName(word word str segptr word) WSAAsyncGetProtoByName16\n106 pascal -ret16 WSAAsyncGetServByPort(word word word str segptr word) WSAAsyncGetServByPort16\n107 pascal -ret16 WSAAsyncGetServByName(word word str str segptr word) WSAAsyncGetServByName16\n108 pascal -ret16 WSACancelAsyncRequest(word) WSACancelAsyncRequest16\n109 pascal -ret16 WSASetBlockingHook(segptr) WSASetBlockingHook16\n110 pascal -ret16 WSAUnhookBlockingHook() WSAUnhookBlockingHook16\n111 pascal -ret16 WSAGetLastError() WSAGetLastError16\n112 pascal   WSASetLastError(word) WSASetLastError16\n113 pascal -ret16 WSACancelBlockingCall() WSACancelBlockingCall16\n114 pascal -ret16 WSAIsBlocking() WSAIsBlocking16\n115 pascal   WSAStartup(word ptr) WSAStartup16\n116 pascal   WSACleanup() WSACleanup16\n151 pascal -ret16 __WSAFDIsSet(word ptr) __WSAFDIsSet16\n1107 pascal -ret16 WSARecvEx(word ptr word ptr) WSARecvEx16\n\n2000 pascal -ret16 default_hook() default_hook\n"
  },
  {
    "path": "winsock/winsock.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <Keyword>Win32Proj</Keyword>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n    <RootNamespace>winsock</RootNamespace>\n    <ProjectGuid>{ABEECE42-C504-4F41-AF77-BE6AAE7E9B8A}</ProjectGuid>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <Import Project=\"..\\PropertySheet.props\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <IntDir>Release</IntDir>\n    <TargetExt>.dll16</TargetExt>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <ModuleDefinitionFile>\nwinsock.def\n      </ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\n      <ModuleDefinitionFile>\nwinsock.def\n      </ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\nws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"socket.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Object Include=\"winsock.dll16.obj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"winsock.dll16.spec\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Platform)'=='Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" WINSOCK &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\n      <Outputs Condition=\"'$(Platform)'=='Win32'\">%(Filename).obj</Outputs>\n    </CustomBuild>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"winsock.def\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "winsock/winsock16.h",
    "content": "/*\n * Copyright (C) the Wine project\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WINE_WINSOCK16_H\n#define __WINE_WINE_WINSOCK16_H\n\n#include <pshpack1.h>\n\ntypedef UINT16 SOCKET16;\n\ntypedef struct\n{\n        UINT16    fd_count;               /* how many are SET? */\n        SOCKET16  fd_array[FD_SETSIZE];   /* an array of SOCKETs */\n} ws_fd_set16;\n\n/* ws_hostent16, ws_protoent16, ws_servent16, ws_netent16\n * are 1-byte aligned here ! */\ntypedef struct ws_hostent16\n{\n        SEGPTR  h_name;         /* official name of host */\n        SEGPTR  h_aliases;      /* alias list */\n        INT16   h_addrtype;     /* host address type */\n        INT16   h_length;       /* length of address */\n        SEGPTR  h_addr_list;    /* list of addresses from name server */\n} _ws_hostent16;\n\ntypedef struct ws_protoent16\n{\n        SEGPTR  p_name;         /* official protocol name */\n        SEGPTR  p_aliases;      /* alias list */\n        INT16   p_proto;        /* protocol # */\n} _ws_protoent16;\n\ntypedef struct ws_servent16\n{\n        SEGPTR  s_name;         /* official service name */\n        SEGPTR  s_aliases;      /* alias list */\n        INT16   s_port;         /* port # */\n        SEGPTR  s_proto;        /* protocol to use */\n} _ws_servent16;\n\ntypedef struct ws_netent16\n{\n        SEGPTR  n_name;         /* official name of net */\n        SEGPTR  n_aliases;      /* alias list */\n        INT16   n_addrtype;     /* net address type */\n        INT     n_net;          /* network # */\n} _ws_netent16;\n\ntypedef struct WSAData16\n{\n    WORD                    wVersion;\n    WORD                    wHighVersion;\n    char                    szDescription[WSADESCRIPTION_LEN+1];\n    char                    szSystemStatus[WSASYS_STATUS_LEN+1];\n    WORD                    iMaxSockets;\n    WORD                    iMaxUdpDg;\n    SEGPTR                  lpVendorInfo;\n} WSADATA16, *LPWSADATA16;\n\n#include <poppack.h>\n\n#define WS_FD_CLR16(fd, set)   __WS_FD_CLR((fd),(set), ws_fd_set16)\n#define WS_FD_SET16(fd, set)   __WS_FD_SET1((fd),(set), ws_fd_set16)\n#define WS_FD_ZERO16(set)      (((ws_fd_set16*)(set))->fd_count=0)\n#define WS_FD_ISSET16(fd, set) __WSAFDIsSet16((SOCKET16)(fd), (ws_fd_set16*)(set))\n\n#define INVALID_SOCKET16  ((SOCKET16)(~0))\n\nINT16     WINAPI __WSAFDIsSet16( SOCKET16, ws_fd_set16 * );\nINT16     WINAPI WSAStartup16(UINT16 wVersionRequired, LPWSADATA16 lpWSAData);\nvoid      WINAPI WSASetLastError16(INT16 iError);\nINT16     WINAPI WSAUnhookBlockingHook16(void);\nFARPROC16 WINAPI WSASetBlockingHook16(FARPROC16 lpBlockFunc);\nHANDLE16  WINAPI WSAAsyncGetServByName16(HWND16 hWnd, UINT16 wMsg, LPCSTR name, LPCSTR proto,\n                                         SEGPTR buf, INT16 buflen);\nHANDLE16  WINAPI WSAAsyncGetServByPort16(HWND16 hWnd, UINT16 wMsg, INT16 port,\n                                         LPCSTR proto, SEGPTR buf, INT16 buflen);\nHANDLE16  WINAPI WSAAsyncGetProtoByName16(HWND16 hWnd, UINT16 wMsg,\n                                          LPCSTR name, SEGPTR buf, INT16 buflen);\nHANDLE16  WINAPI WSAAsyncGetProtoByNumber16(HWND16 hWnd, UINT16 wMsg,\n                                            INT16 number, SEGPTR buf, INT16 buflen);\nHANDLE16  WINAPI WSAAsyncGetHostByName16(HWND16 hWnd, UINT16 wMsg,\n                                         LPCSTR name, SEGPTR buf, INT16 buflen);\nHANDLE16  WINAPI WSAAsyncGetHostByAddr16(HWND16 hWnd, UINT16 wMsg, LPCSTR addr,\n                              INT16 len, INT16 type, SEGPTR buf, INT16 buflen);\nINT16     WINAPI WSACancelAsyncRequest16(HANDLE16 hAsyncTaskHandle);\nINT16     WINAPI WSAAsyncSelect16(SOCKET16 s, HWND16 hWnd, UINT16 wMsg, LONG lEvent);\nINT16     WINAPI WSARecvEx16(SOCKET16 s, char *buf, INT16 len, INT16 *flags);\n\n#endif /* __WINE_WINE_WINSOCK16_H */\n"
  },
  {
    "path": "winspool/CMakeLists.txt",
    "content": "file(GLOB SOURCE *.c *.cpp *.rc)\nadd_library(winspool SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/winspool.def winspool.drv16.obj)\ninclude_directories(../wine)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -DHAVE_STRNCASECMP -DHAVE__STRNICMP -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__ -DDECLSPEC_HIDDEN= -Dstrncasecmp=_strnicmp)\nspec_build(winspool.drv16 winspool)\ntarget_link_libraries(winspool libwine winecrt0 krnl386 winspool.lib)\nset_target_properties(winspool PROPERTIES SUFFIX \".drv16\")\n"
  },
  {
    "path": "winspool/winspool.c",
    "content": "\n\n#include \"config.h\"\n\n#include <stdlib.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <malloc.h>\n#include <string.h>\n#include <assert.h>\n\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"wingdi.h\"\n//wrong definition?\n#define ExtDeviceMode WINAPI ExtDeviceMode\n#include \"winspool.h\"\n#undef ExtDeviceMode\n#include \"winuser.h\"\n#include \"wownt32.h\"\n#include \"wine/unicode.h\"\n#include \"wine/winbase16.h\"\n\n#include \"wine/debug.h\"\n/* Maximum length of a device name */\n#define CCHDEVICENAME16 32\n\n/* Maximum length of a paper name */\n#define CCHPAPERNAME16  64\n#pragma pack(push, 1)\nWINE_DEFAULT_DEBUG_CHANNEL(winspool);\ntypedef struct {\n    char  dmDeviceName[CCHDEVICENAME16];\n    UINT16  dmSpecVersion;\n    UINT16  dmDriverVersion;\n    UINT16  dmSize;\n    UINT16  dmDriverExtra;\n    DWORD dmFields;\n    INT16   dmOrientation;\n    INT16   dmPaperSize;\n    INT16   dmPaperLength;\n    INT16   dmPaperWidth;\n    INT16   dmScale;\n    INT16   dmCopies;\n    INT16   dmDefaultSource;\n    INT16   dmPrintQuality;\n    INT16   dmColor;\n    INT16   dmDuplex;\n    INT16   dmYResolution;\n    INT16   dmTTOption;\n} DEVMODE16, *LPDEVMODE16;\n#pragma pack(pop)\n//sizeof(DEVMODE16) != sizeof(DEVMODEA)\nvoid DEVMODE16To32(CONST DEVMODE16 *src, LPDEVMODEA dst, LONG extra)\n{\n    memcpy(dst->dmDeviceName, src->dmDeviceName, min(CCHDEVICENAME16, CCHDEVICENAME));\n    dst->dmDeviceName[CCHDEVICENAME - 1] = 0;\n    dst->dmSpecVersion = 0x30a;\n    dst->dmDriverVersion = src->dmDriverVersion;\n    dst->dmSize = sizeof(DEVMODEA);\n    dst->dmDriverExtra = 0;\n    dst->dmFields = src->dmFields & 0x7fbf;\n    dst->dmOrientation = src->dmOrientation;\n    dst->dmPaperSize = src->dmPaperSize;\n    dst->dmPaperLength = src->dmPaperLength;\n    dst->dmPaperWidth = src->dmPaperWidth;\n    dst->dmScale = src->dmScale;\n    dst->dmCopies = src->dmCopies;\n    dst->dmDefaultSource = src->dmDefaultSource;\n    dst->dmPrintQuality = src->dmPrintQuality;\n    dst->dmColor = src->dmColor;\n    dst->dmDuplex = src->dmDuplex;\n    dst->dmYResolution = src->dmYResolution;\n    dst->dmTTOption = src->dmTTOption;\n}\nvoid DEVMODE32To16(LPDEVMODE16 dst, const LPDEVMODEA src, LONG extra)\n{\n    memcpy(dst->dmDeviceName, src->dmDeviceName, min(CCHDEVICENAME16, CCHDEVICENAME));\n    dst->dmDeviceName[CCHDEVICENAME16 - 1] = 0;\n    dst->dmSpecVersion = 0x30a;\n    dst->dmDriverVersion = src->dmDriverVersion;\n    dst->dmSize = sizeof(DEVMODE16);\n    dst->dmDriverExtra = 0; \n    dst->dmFields = src->dmFields & 0x7fbf;\n    dst->dmOrientation = src->dmOrientation;\n    dst->dmPaperSize = src->dmPaperSize;\n    dst->dmPaperLength = src->dmPaperLength;\n    dst->dmPaperWidth = src->dmPaperWidth;\n    dst->dmScale = src->dmScale;\n    dst->dmCopies = src->dmCopies;\n    dst->dmDefaultSource = src->dmDefaultSource;\n    dst->dmPrintQuality = src->dmPrintQuality;\n    dst->dmColor = src->dmColor;\n    dst->dmDuplex = src->dmDuplex;\n    dst->dmYResolution = src->dmYResolution;\n    dst->dmTTOption = src->dmTTOption;\n}\nint WINAPI ExtDeviceMode16(HWND16 hwnd16, HANDLE16 hDriver16, LPDEVMODE16 pDevModeOutput, LPSTR pDeviceName, LPSTR pPort, LPDEVMODE16 pDevModeInput, LPSTR pProfile, WORD fMode)\n{\n    char tmp[256];\n    if (pDeviceName && !strcmp(pDeviceName, \"DefaultPrinter\"))\n    {\n        int len = 256;\n        if (GetDefaultPrinterA(tmp, &len))\n            pDeviceName = tmp;\n    }\n    LONG size = ExtDeviceMode(HWND_32(hwnd16), (HANDLE)hDriver16, NULL, pDeviceName, pPort, NULL, pProfile, 0);\n    if (size < 0)\n        return size;\n    if (!fMode)\n        return sizeof(DEVMODE16);\n    char *devmode32 = alloca(size);\n    char *input32 = alloca(size);\n    if (pDevModeInput)\n        DEVMODE16To32(pDevModeInput, (LPDEVMODEA)&input32[0], size);\n    LONG result = ExtDeviceMode(HWND_32(hwnd16), (HANDLE)hDriver16, pDevModeOutput ? (LPDEVMODEA)&devmode32[0] : NULL, pDeviceName, pPort, pDevModeInput ? (LPDEVMODEA)&input32[0] : NULL, pProfile, fMode);\n    size = result;\n    if (pDevModeOutput)\n        DEVMODE32To16(pDevModeOutput, (LPDEVMODEA)&devmode32[0], size);\n    return fMode == DM_UPDATE ? result : sizeof(DEVMODE16);\n}\nvoid WINAPI DeviceMode16(HWND16 hwnd, HMODULE16 hModule16, LPSTR lpszDevice, LPSTR lpszOutput)\n{\n    ExtDeviceMode16(hwnd, hModule16, NULL, lpszDevice, lpszOutput, NULL, NULL, DM_PROMPT|DM_UPDATE);\n    return;\n}\nDWORD WINAPI DeviceCapabilities16(LPCSTR pDevice, LPCSTR pPort, WORD fwCapability, LPSTR pOutput, CONST DEVMODE16 *pDevMode)\n{\n    char devmode32[65536] = { 0 };\n    char tmp[256];\n    if (pDevice && !strcmp(pDevice, \"DefaultPrinter\"))\n    {\n        int len = 256;\n        if (GetDefaultPrinterA(tmp, &len))\n            pDevice = tmp;\n    }\n    if (pDevMode)\n        DEVMODE16To32(pDevMode, (LPDEVMODEA)&devmode32[0], 0);\n    DWORD result = 0;\n    switch (fwCapability)\n    {\n    case DC_FIELDS:\n    case DC_MINEXTENT:\n    case DC_MAXEXTENT:\n    case DC_BINS:\n    case DC_DUPLEX:\n    case DC_SIZE:\n    case DC_VERSION:\n    case DC_DRIVER:\n    case DC_BINNAMES:\n    case DC_ENUMRESOLUTIONS:\n    case DC_FILEDEPENDENCIES:\n    case DC_TRUETYPE:\n    case DC_ORIENTATION:\n    case DC_COPIES:\n        result = DeviceCapabilitiesA(pDevice, pPort, fwCapability, pOutput, pDevMode ? (LPDEVMODEA)&devmode32[0] : NULL);\n        break;\n    case DC_PAPERS:\n    {\n        LPWORD papers;\n        result = DeviceCapabilitiesA(pDevice, pPort, fwCapability, NULL, pDevMode ? (LPDEVMODEA)&devmode32[0] : NULL);\n        if (result && (result != -1))\n        {\n            LPWORD output = (LPWORD)pOutput;\n            DWORD i, j = 0;\n            papers = (LPWORD)HeapAlloc(GetProcessHeap(), 0, result * sizeof(WORD));\n            result = DeviceCapabilitiesA(pDevice, pPort, fwCapability, (LPSTR)papers, pDevMode ? (LPDEVMODEA)&devmode32[0] : NULL);\n            for (i = 0; i < result; i++)\n            {\n                /* WINVER < 0x0500 */\n                if (papers[i] <= DMPAPER_A3_EXTRA_TRANSVERSE)\n                {\n                    if (output)\n                    {\n                        output[j] = papers[i];\n                    }\n                    j++;\n                }\n            }\n            HeapFree(GetProcessHeap(), 0, papers);\n            return j;\n        }\n    }\n    case DC_PAPERNAMES:\n    {\n        DWORD papers_count = DeviceCapabilitiesA(pDevice, pPort, DC_PAPERS, NULL, pDevMode ? (LPDEVMODEA)&devmode32[0] : NULL);\n        if (papers_count == -1)\n            return -1;\t\n        LPWORD papers = (LPDWORD)HeapAlloc(GetProcessHeap(), 0, papers_count * sizeof(WORD));\n        DWORD i, j = 0;\n        char (*names)[CCHPAPERNAME16] = !pOutput ? NULL : (char(*)[CCHPAPERNAME16])HeapAlloc(GetProcessHeap(), 0, papers_count * CCHPAPERNAME16 * sizeof(char));\n        char (*names16)[CCHPAPERNAME16] = (char(*)[CCHPAPERNAME16])pOutput;\n        DeviceCapabilitiesA(pDevice, pPort, DC_PAPERS, (LPSTR)papers, pDevMode ? (LPDEVMODEA)&devmode32[0] : NULL);\n        result = DeviceCapabilitiesA(pDevice, pPort, fwCapability, (LPSTR)names, pDevMode ? (LPDEVMODEA)&devmode32[0] : NULL);\n        for (i = 0; i < result; i++)\n        {\n            /* WINVER < 0x0500 */\n            if (papers[i] <= DMPAPER_A3_EXTRA_TRANSVERSE)\n            {\n                if (pOutput)\n                {\n                    lstrcpynA(names16 + j, names + i, sizeof(names16[j]));\n                }\n                j++;\n            }\n        }\n        HeapFree(GetProcessHeap(), 0, names);\n        HeapFree(GetProcessHeap(), 0, papers);\n        return j;\n    }\n    case DC_PAPERSIZE:\n    {\n        DWORD papers_count = DeviceCapabilitiesA(pDevice, pPort, DC_PAPERS, NULL, pDevMode ? (LPDEVMODEA)&devmode32[0] : NULL);\n        LPWORD papers = (LPDWORD)HeapAlloc(GetProcessHeap(), 0, papers_count * sizeof(WORD));\n        DWORD i, j = 0;\n        LPPOINT points32 = !pOutput ? NULL : (LPPOINT)HeapAlloc(GetProcessHeap(), 0, papers_count * sizeof(POINT));\n        LPPOINT16 points16 = (LPPOINT16)pOutput;\n        DeviceCapabilitiesA(pDevice, pPort, DC_PAPERS, (LPSTR)papers, pDevMode ? (LPDEVMODEA)&devmode32[0] : NULL);\n        result = DeviceCapabilitiesA(pDevice, pPort, fwCapability, (LPSTR)points32, pDevMode ? (LPDEVMODEA)&devmode32[0] : NULL);\n        for (i = 0; i < result; i++)\n        {\n            /* WINVER < 0x0500 */\n            if (papers[i] <= DMPAPER_A3_EXTRA_TRANSVERSE)\n            {\n                if (pOutput)\n                {\n                    points16[j].x = (INT16)points32[i].x;\n                    points16[j].y = (INT16)points32[i].y;\n                }\n                j++;\n            }\n        }\n        HeapFree(GetProcessHeap(), 0, points32);\n        HeapFree(GetProcessHeap(), 0, papers);\n        return j;\n    }\n    case DC_EXTRA:\n        result = DeviceCapabilitiesA(pDevice, pPort, fwCapability, pOutput, pDevMode ? (LPDEVMODEA)&devmode32[0] : NULL);\n        if (result > 65535)\n        {\n            ERR(\"DC_EXTRA(%d) > 65535\\n\", result);\n        }\n        break;\n    default:\n    {\n        ERR(\"unknown DeviceCapabilities %d\\n\", fwCapability);\n        result = DeviceCapabilitiesA(pDevice, pPort, fwCapability, pOutput, pDevMode ? (LPDEVMODEA)&devmode32[0] : NULL);\n        break;\n    }\n    }\n    return result;\n}\n"
  },
  {
    "path": "winspool/winspool.def",
    "content": "; File generated automatically from winspool.drv16; do not edit!\n\nLIBRARY winspool.drv16\n\nEXPORTS\n  _wine_spec_dos_header @1 DATA\n"
  },
  {
    "path": "winspool/winspool.drv16.spec",
    "content": "\n4 stub DISABLE\n13 pascal DeviceMode(word word str str) DeviceMode16\n15 stub DEVGETCHARWIDTH\n20 stub CREATEDIBITMAP\n28 stub STRETCHDIB\n10 stub REALIZEOBJECT\n90 pascal ExtDeviceMode(word word ptr str str ptr str word) ExtDeviceMode16\n21 stub SETDIBITSTODEVICE\n91 pascal DeviceCapabilities(str str word str ptr) DeviceCapabilities16\n7 stub ENUMOBJ\n11 stub STRBLT\n5 stub ENABLE\n3 stub CONTROL\n1 stub DEVBITBLT\n8 stub OUTPUT\n92 stub QUERYDEVICENAMES\n9 stub PIXEL\n12 stub SCANLR\n2 stub COLORINFO\n6 stub ENUMDFONTS\n94 stub DEVINSTALL\n14 stub DEVEXTTEXTOUT\n#93 stub ADVANCEDSETUPDIALOG\n1000 stub ADVANCEDSETUPDIALOG\n19 stub DEVICEBITMAPBITS\n"
  },
  {
    "path": "winspool/winspool.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <Keyword>Win32Proj</Keyword>\r\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\r\n    <RootNamespace>winspool</RootNamespace>\r\n    <ProjectGuid>{C8F4997D-B814-43BB-A71B-507B2E956F55}</ProjectGuid>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v141</PlatformToolset>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v141</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <Import Project=\"..\\PropertySheet.props\" />\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n    <TargetExt>.drv16</TargetExt>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n    <IntDir>Release</IntDir>\r\n    <TargetExt>.drv16</TargetExt>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <AdditionalDependencies>winspool.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\r</AdditionalDependencies>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <ModuleDefinitionFile>\r\nwinspool.def\r\n      </ModuleDefinitionFile>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;HAVE_STRNCASECMP;HAVE__STRNICMP;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;DECLSPEC_HIDDEN=;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\r\n      <ModuleDefinitionFile>\r\nwinspool.def\r\n      </ModuleDefinitionFile>\r\n      <AdditionalDependencies>winspool.lib;$(OutDir)winecrt0.lib;$(OutDir)libwine.lib;$(OutDir)krnl386.lib;\r</AdditionalDependencies>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"winspool.c\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Object Include=\"winspool.drv16.obj\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <CustomBuild Include=\"winspool.drv16.spec\">\r\n      <FileType>Document</FileType>\r\n      <Command Condition=\"'$(Platform)'=='Win32'\">\"$(OutDir)convspec\" \"%(Filename).spec\" WINSPOOL &gt; \"%(Filename).asm\" &amp;&amp; \"$(AsmPath)as\" --32 -o \"%(Filename).obj\" \"%(Filename).asm\"</Command>\r\n      <Outputs Condition=\"'$(Platform)'=='Win32'\">%(Filename).obj</Outputs>\r\n    </CustomBuild>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"winspool.def\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "wow32/CMakeLists.txt",
    "content": "\ninclude_directories(../wine)\nfile(GLOB SOURCE *.c *.cpp)\ndef_file_build32(wow32)\nadd_library(wow32 SHARED ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/wow32.def)\nadd_definitions(-D_X86_ -D__WINESRC__ -D__i386__ -D_WINTERNL_ -DNtCurrentTeb=NtCurrentTeb__)\nadd_dependencies(wow32 generate_def_wow32 krnl386)\ntarget_link_libraries(wow32 krnl386)\nset_target_properties(wow32 PROPERTIES PREFIX \"\")\n"
  },
  {
    "path": "wow32/wow32.def",
    "content": "; File generated automatically from wow32.spec; do not edit!\n\nLIBRARY wow32.dll\n\nEXPORTS\n  WOWGetDescriptor @1\n  WOWCallback16 @2\n  WOWCallback16Ex @3\n  WOWDirectedYield16 @4\n  WOWGetVDMPointer @5\n  WOWGetVDMPointerFix @6\n  WOWGetVDMPointerUnfix @7\n  WOWGlobalAlloc16 @8\n  WOWGlobalAllocLock16 @9\n  WOWGlobalFree16 @10\n  WOWGlobalLock16 @11\n  WOWGlobalLockSize16 @12\n  WOWGlobalUnlock16 @13\n  WOWGlobalUnlockFree16 @14\n  WOWHandle16 @15\n  WOWHandle32 @16\n  WOWYield16 @17\n"
  },
  {
    "path": "wow32/wow32.spec",
    "content": "# ordinal exports\n1 stdcall WOWGetDescriptor(long ptr)\n\n@ stdcall WOWCallback16(long long)\n@ stdcall WOWCallback16Ex(long long long ptr ptr)\n@ stdcall WOWDirectedYield16(long)\n@ stdcall WOWGetVDMPointer(long long long)\n@ stdcall WOWGetVDMPointerFix(long long long)\n@ stdcall WOWGetVDMPointerUnfix(long)\n@ stdcall WOWGlobalAlloc16(long long)\n@ stdcall WOWGlobalAllocLock16(long long ptr)\n@ stdcall WOWGlobalFree16(long)\n@ stdcall WOWGlobalLock16(long)\n@ stdcall WOWGlobalLockSize16(long ptr)\n@ stdcall WOWGlobalUnlock16(long)\n@ stdcall WOWGlobalUnlockFree16(long)\n@ stdcall WOWHandle16(long long)\n@ stdcall WOWHandle32(long long)\n@ stdcall WOWYield16()\n"
  },
  {
    "path": "wow32/wow32.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"wow_main.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"wow32.def\" />\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{E4950E01-C995-49A5-9FED-5EF03155FD65}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>wow32</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;WOW32_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)krnl386.lib</AdditionalDependencies>\n      <ModuleDefinitionFile>wow32.def</ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;WOW32_EXPORTS;_X86_;__WINESRC__;__i386__;USE_COMPILER_EXCEPTIONS;_WINTERNL_;NtCurrentTeb=NtCurrentTeb__;inline=__inline;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Windows</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <ModuleDefinitionFile>wow32.def</ModuleDefinitionFile>\n      <AdditionalDependencies>$(OutDir)krnl386.lib</AdditionalDependencies>\n      <DelayLoadDLLs>\n      </DelayLoadDLLs>\n      <ForceFileOutput>\n      </ForceFileOutput>\n      <IgnoreAllDefaultLibraries>\n      </IgnoreAllDefaultLibraries>\n      <IgnoreSpecificDefaultLibraries>\n      </IgnoreSpecificDefaultLibraries>\n    </Link>\n  </ItemDefinitionGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "wow32/wow32.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"ソース ファイル\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"ヘッダー ファイル\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"リソース ファイル\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"wow_main.c\">\n      <Filter>ソース ファイル</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"wow32.def\">\n      <Filter>ソース ファイル</Filter>\n    </None>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "wow32/wow_main.c",
    "content": "/*\n * Win32 Windows-on-Windows support\n *\n * Copyright 2005 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include <stdarg.h>\n#include \"windef.h\"\n#include \"winbase.h\"\n#include \"windows/wownt32.h\"\n\n#undef WOWCallback16\n#undef WOWCallback16Ex\n#undef WOWDirectedYield16\n#undef WOWGetVDMPointer\n#undef WOWGetVDMPointerFix\n#undef WOWGetVDMPointerUnfix\n#undef WOWGlobalAlloc16\n#undef WOWGlobalAllocLock16\n#undef WOWGlobalFree16\n#undef WOWGlobalLock16\n#undef WOWGlobalLockSize16\n#undef WOWGlobalUnlock16\n#undef WOWGlobalUnlockFree16\n#undef WOWHandle16\n#undef WOWHandle32\n#undef WOWYield16\n\nBOOL   WINAPI K32WOWGetDescriptor(DWORD,LPLDT_ENTRY);\n\n/**********************************************************************\n *           WOWGetDescriptor   (WOW32.1)\n */\nBOOL WINAPI WOWGetDescriptor( DWORD segptr, LPLDT_ENTRY ldtent )\n{\n    return K32WOWGetDescriptor( segptr, ldtent );\n}\n\n/**********************************************************************\n *           WOWGetVDMPointer   (WOW32.@)\n */\nLPVOID WINAPI WOWGetVDMPointer( DWORD vp, DWORD dwBytes, BOOL fProtectedMode )\n{\n    return K32WOWGetVDMPointer( vp, dwBytes, fProtectedMode );\n}\n\n/**********************************************************************\n *           WOWGetVDMPointerFix   (WOW32.@)\n */\nLPVOID WINAPI WOWGetVDMPointerFix( DWORD vp, DWORD dwBytes, BOOL fProtectedMode )\n{\n    return K32WOWGetVDMPointerFix( vp, dwBytes, fProtectedMode );\n}\n\n/**********************************************************************\n *           WOWGetVDMPointerUnfix   (WOW32.@)\n */\nvoid WINAPI WOWGetVDMPointerUnfix( DWORD vp )\n{\n    K32WOWGetVDMPointerUnfix( vp );\n}\n\n/**********************************************************************\n *           WOWGlobalAlloc16   (WOW32.@)\n */\nWORD WINAPI WOWGlobalAlloc16( WORD wFlags, DWORD cb )\n{\n    return K32WOWGlobalAlloc16( wFlags, cb );\n}\n\n/**********************************************************************\n *           WOWGlobalFree16   (WOW32.@)\n */\nWORD WINAPI WOWGlobalFree16( WORD hMem )\n{\n    return K32WOWGlobalFree16( hMem );\n}\n\n/**********************************************************************\n *           WOWGlobalLock16   (WOW32.@)\n */\nDWORD WINAPI WOWGlobalLock16( WORD hMem )\n{\n    return K32WOWGlobalLock16( hMem );\n}\n\n/**********************************************************************\n *           WOWGlobalUnlock16   (WOW32.@)\n */\nBOOL WINAPI WOWGlobalUnlock16( WORD hMem )\n{\n    return K32WOWGlobalUnlock16( hMem );\n}\n\n/**********************************************************************\n *           WOWGlobalAllocLock16   (WOW32.@)\n */\nDWORD WINAPI WOWGlobalAllocLock16( WORD wFlags, DWORD cb, WORD *phMem )\n{\n    return K32WOWGlobalAllocLock16( wFlags, cb, phMem );\n}\n\n/**********************************************************************\n *           WOWGlobalLockSize16   (WOW32.@)\n */\nDWORD WINAPI WOWGlobalLockSize16( WORD hMem, PDWORD pcb )\n{\n    return K32WOWGlobalLockSize16( hMem, pcb );\n}\n\n/**********************************************************************\n *           WOWGlobalUnlockFree16   (WOW32.@)\n */\nWORD WINAPI WOWGlobalUnlockFree16( DWORD vpMem )\n{\n    return K32WOWGlobalUnlockFree16( vpMem );\n}\n\n/**********************************************************************\n *           WOWYield16   (WOW32.@)\n */\nvoid WINAPI WOWYield16(void)\n{\n    K32WOWYield16();\n}\n\n/**********************************************************************\n *           WOWDirectedYield16   (WOW32.@)\n */\nvoid WINAPI WOWDirectedYield16( WORD htask16 )\n{\n    K32WOWDirectedYield16( htask16 );\n}\n\n/***********************************************************************\n *           WOWHandle32   (WOW32.@)\n */\nHANDLE WINAPI WOWHandle32( WORD handle, WOW_HANDLE_TYPE type )\n{\n    return K32WOWHandle32( handle, type );\n}\n\n/***********************************************************************\n *           WOWHandle16   (WOW32.@)\n */\nWORD WINAPI WOWHandle16( HANDLE handle, WOW_HANDLE_TYPE type )\n{\n    return K32WOWHandle16( handle, type );\n}\n\n/**********************************************************************\n *           WOWCallback16Ex   (WOW32.@)\n */\nBOOL WINAPI WOWCallback16Ex( DWORD vpfn16, DWORD dwFlags,\n                             DWORD cbArgs, PVOID pArgs, PDWORD pdwRetCode )\n{\n    return K32WOWCallback16Ex( vpfn16, dwFlags, cbArgs, pArgs, pdwRetCode );\n}\n\n/**********************************************************************\n *           WOWCallback16   (WOW32.@)\n */\nDWORD WINAPI WOWCallback16( DWORD vpfn16, DWORD dwParam )\n{\n    return K32WOWCallback16( vpfn16, dwParam );\n}\n"
  },
  {
    "path": "wow32/wownt32.h",
    "content": "/*\n * WOW Generic Thunk API\n *\n * Copyright (C) 1999 Ulrich Weigand\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef _WOWNT32_H_\n#define _WOWNT32_H_\n\n#ifdef __WINESRC__\n/* under Wine use the kernel functions directly so we don't have to import wow32 */\n#define WOWCallback16 K32WOWCallback16\n#define WOWCallback16Ex K32WOWCallback16Ex\n#define WOWDirectedYield16 K32WOWDirectedYield16\n#define WOWGetVDMPointer K32WOWGetVDMPointer\n#define WOWGetVDMPointerFix K32WOWGetVDMPointerFix\n#define WOWGetVDMPointerUnfix K32WOWGetVDMPointerUnfix\n#define WOWGlobalAlloc16 K32WOWGlobalAlloc16\n#define WOWGlobalAllocLock16 K32WOWGlobalAllocLock16\n#define WOWGlobalFree16 K32WOWGlobalFree16\n#define WOWGlobalLock16 K32WOWGlobalLock16\n#define WOWGlobalLockSize16 K32WOWGlobalLockSize16\n#define WOWGlobalUnlock16 K32WOWGlobalUnlock16\n#define WOWGlobalUnlockFree16 K32WOWGlobalUnlockFree16\n#define WOWHandle16 K32WOWHandle16\n#define WOWHandle32 K32WOWHandle32\n#define WOWYield16 K32WOWYield16\n#endif\n\nLPVOID WINAPI WOWGetVDMPointer(DWORD,DWORD,BOOL);\nLPVOID WINAPI WOWGetVDMPointerFix(DWORD,DWORD,BOOL);\nVOID   WINAPI WOWGetVDMPointerUnfix(DWORD);\n\nWORD   WINAPI WOWGlobalAlloc16(WORD,DWORD);\nWORD   WINAPI WOWGlobalFree16(WORD);\nDWORD  WINAPI WOWGlobalLock16(WORD);\nBOOL   WINAPI WOWGlobalUnlock16(WORD);\nDWORD  WINAPI WOWGlobalAllocLock16(WORD,DWORD,WORD *);\nWORD   WINAPI WOWGlobalUnlockFree16(DWORD);\nDWORD  WINAPI WOWGlobalLockSize16(WORD,PDWORD);\n\nVOID   WINAPI WOWYield16(VOID);\nVOID   WINAPI WOWDirectedYield16(WORD);\n\ntypedef enum\n{\n    WOW_TYPE_HWND,\n    WOW_TYPE_HMENU,\n    WOW_TYPE_HDWP,\n    WOW_TYPE_HDROP,\n    WOW_TYPE_HDC,\n    WOW_TYPE_HFONT,\n    WOW_TYPE_HMETAFILE,\n    WOW_TYPE_HRGN,\n    WOW_TYPE_HBITMAP,\n    WOW_TYPE_HBRUSH,\n    WOW_TYPE_HPALETTE,\n    WOW_TYPE_HPEN,\n    WOW_TYPE_HACCEL,\n    WOW_TYPE_HTASK,\n    WOW_TYPE_FULLHWND\n\n} WOW_HANDLE_TYPE;\n\nHANDLE WINAPI WOWHandle32(WORD,WOW_HANDLE_TYPE);\nWORD   WINAPI WOWHandle16(HANDLE,WOW_HANDLE_TYPE);\n\n#if 0 && defined(__WINESRC__)\n/* under Wine we use optimized versions where we can */\n#define HWND_32(h16)      ((HWND)      (ULONG_PTR)(h16))\n#define HMENU_32(h16)     ((HMENU)     (ULONG_PTR)(h16))\n#define HDWP_32(h16)      ((HDWP)      (ULONG_PTR)(h16))\n#define HDROP_32(h16)     ((HDROP)     (ULONG_PTR)(h16))\n#define HDC_32(h16)       ((HDC)       (ULONG_PTR)(h16))\n#define HFONT_32(h16)     ((HFONT)     (ULONG_PTR)(h16))\n#define HRGN_32(h16)      ((HRGN)      (ULONG_PTR)(h16))\n#define HBITMAP_32(h16)   ((HBITMAP)   (ULONG_PTR)(h16))\n#define HBRUSH_32(h16)    ((HBRUSH)    (ULONG_PTR)(h16))\n#define HPALETTE_32(h16)  ((HPALETTE)  (ULONG_PTR)(h16))\n#define HPEN_32(h16)      ((HPEN)      (ULONG_PTR)(h16))\n#define HACCEL_32(h16)    ((HACCEL)    (ULONG_PTR)(h16))\n\n#define HWND_16(h32)      (LOWORD(h32))\n#define HMENU_16(h32)     (LOWORD(h32))\n#define HDWP_16(h32)      (LOWORD(h32))\n#define HDROP_16(h32)     (LOWORD(h32))\n#define HDC_16(h32)       (LOWORD(h32))\n#define HFONT_16(h32)     (LOWORD(h32))\n#define HRGN_16(h32)      (LOWORD(h32))\n#define HBITMAP_16(h32)   (LOWORD(h32))\n#define HBRUSH_16(h32)    (LOWORD(h32))\n#define HPALETTE_16(h32)  (LOWORD(h32))\n#define HPEN_16(h32)      (LOWORD(h32))\n#define HACCEL_16(h32)    (LOWORD(h32))\n\n#else  /* __WINESRC__ */\n\n#define HWND_32(h16)      ((HWND)      (WOWHandle32(h16, WOW_TYPE_HWND)))\n#define HMENU_32(h16)     ((HMENU)     (WOWHandle32(h16, WOW_TYPE_HMENU)))\n#define HDWP_32(h16)      ((HDWP)      (WOWHandle32(h16, WOW_TYPE_HDWP)))\n#define HDROP_32(h16)     ((HDROP)     (WOWHandle32(h16, WOW_TYPE_HDROP)))\n#define HDC_32(h16)       ((HDC)       (WOWHandle32(h16, WOW_TYPE_HDC)))\n#define HFONT_32(h16)     ((HFONT)     (WOWHandle32(h16, WOW_TYPE_HFONT)))\n#define HRGN_32(h16)      ((HRGN)      (WOWHandle32(h16, WOW_TYPE_HRGN)))\n#define HBITMAP_32(h16)   ((HBITMAP)   (WOWHandle32(h16, WOW_TYPE_HBITMAP)))\n#define HBRUSH_32(h16)    ((HBRUSH)    (WOWHandle32(h16, WOW_TYPE_HBRUSH)))\n#define HPALETTE_32(h16)  ((HPALETTE)  (WOWHandle32(h16, WOW_TYPE_HPALETTE)))\n#define HPEN_32(h16)      ((HPEN)      (WOWHandle32(h16, WOW_TYPE_HPEN)))\n#define HACCEL_32(h16)    ((HACCEL)    (WOWHandle32(h16, WOW_TYPE_HACCEL)))\n\n#define HWND_16(h32)      (WOWHandle16(h32, WOW_TYPE_HWND))\n#define HMENU_16(h32)     (WOWHandle16(h32, WOW_TYPE_HMENU))\n#define HDWP_16(h32)      (WOWHandle16(h32, WOW_TYPE_HDWP))\n#define HDROP_16(h32)     (WOWHandle16(h32, WOW_TYPE_HDROP))\n#define HDC_16(h32)       (WOWHandle16(h32, WOW_TYPE_HDC))\n#define HFONT_16(h32)     (WOWHandle16(h32, WOW_TYPE_HFONT))\n#define HRGN_16(h32)      (WOWHandle16(h32, WOW_TYPE_HRGN))\n#define HBITMAP_16(h32)   (WOWHandle16(h32, WOW_TYPE_HBITMAP))\n#define HBRUSH_16(h32)    (WOWHandle16(h32, WOW_TYPE_HBRUSH))\n#define HPALETTE_16(h32)  (WOWHandle16(h32, WOW_TYPE_HPALETTE))\n#define HPEN_16(h32)      (WOWHandle16(h32, WOW_TYPE_HPEN))\n#define HACCEL_16(h32)    (WOWHandle16(h32, WOW_TYPE_HACCEL))\n\n#endif  /* __WINESRC__ */\n\n#define HMETAFILE_32(h16) ((HMETAFILE)(WOWHandle32(h16, WOW_TYPE_HMETAFILE)))\n#define HTASK_32(h16)     ((DWORD)(WOWHandle32(h16, WOW_TYPE_HTASK)))\n#define FULLHWND_32(h16)  ((HWND)(WOWHandle32(h16, WOW_TYPE_FULLHWND)))\n\n#define HMETAFILE_16(h32) (WOWHandle16(h32, WOW_TYPE_HMETAFILE))\n#define HTASK_16(h32)     (WOWHandle16((HANDLE)(h32), WOW_TYPE_HTASK))\n\n#define WCB16_PASCAL     0\n#define WCB16_CDECL      1\n#define WCB16_MAX_CBARGS 16\n\n/* Wine extensions: call register function, context ptr is passed in the return value LPDWORD */\n#define WCB16_REGS       2\n#define WCB16_REGS_LONG  4  /* function uses 32-bit lret */\n\nDWORD WINAPI WOWCallback16(DWORD,DWORD);\nBOOL  WINAPI WOWCallback16Ex(DWORD,DWORD,DWORD,LPVOID,LPDWORD);\n\n#endif /* _WOWNT32_H_ */\n"
  },
  {
    "path": "wpp/CMakeLists.txt",
    "content": "set(SOURCE wpp.c preproc.c)\ninclude_directories(../wine .)\nbison_target(wpp_parser ppy.y ${CMAKE_CURRENT_BINARY_DIR}/ppy.tab.c COMPILE_FLAGS \"-p ppy_\")\nflex_target(wpp_scanner ppl.l ${CMAKE_CURRENT_BINARY_DIR}/ppl.c)\nadd_flex_bison_dependency(wpp_scanner wpp_parser)\nadd_library(wpp ${SOURCE} ${BISON_wpp_parser_OUTPUTS} ${FLEX_wpp_scanner_OUTPUTS})\nadd_definitions(-D_X86_ -D__i386__ -Dpopen=_popen -Dpclose=_pclose -Dstrncasecmp=_strnicmp -Dstrcasecmp=_stricmp)\ntarget_link_libraries(wpp libwine)\n\n"
  },
  {
    "path": "wpp/ppl.l",
    "content": "/* -*-C-*-\n * Wrc preprocessor lexical analysis\n *\n * Copyright 1999-2000\tBertho A. Stultiens (BS)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n * History:\n * 24-Apr-2000 BS\t- Started from scratch to restructure everything\n *\t\t\t  and reintegrate the source into the wine-tree.\n * 04-Jan-2000 BS\t- Added comments about the lexicographical\n *\t\t\t  grammar to give some insight in the complexity.\n * 28-Dec-1999 BS\t- Eliminated backing-up of the flexer by running\n *\t\t\t  `flex -b' on the source. This results in some\n *\t\t\t  weirdo extra rules, but a much faster scanner.\n * 23-Dec-1999 BS\t- Started this file\n *\n *-------------------------------------------------------------------------\n * The preprocessor's lexographical grammar (approximately):\n *\n * pp\t\t:= {ws} # {ws} if {ws} {expr} {ws} \\n\n *\t\t|  {ws} # {ws} ifdef {ws} {id} {ws} \\n\n *\t\t|  {ws} # {ws} ifndef {ws} {id} {ws} \\n\n *\t\t|  {ws} # {ws} elif {ws} {expr} {ws} \\n\n *\t\t|  {ws} # {ws} else {ws} \\n\n *\t\t|  {ws} # {ws} endif {ws} \\n\n *\t\t|  {ws} # {ws} include {ws} < {anytext} > \\n\n *\t\t|  {ws} # {ws} include {ws} \" {anytext} \" \\n\n *\t\t|  {ws} # {ws} define {ws} {anytext} \\n\n *\t\t|  {ws} # {ws} define( {arglist} ) {ws} {expansion} \\n\n *\t\t|  {ws} # {ws} pragma {ws} {anytext} \\n\n *\t\t|  {ws} # {ws} ident {ws} {anytext} \\n\n *\t\t|  {ws} # {ws} error {ws} {anytext} \\n\n *\t\t|  {ws} # {ws} warning {ws} {anytext} \\n\n *\t\t|  {ws} # {ws} line {ws} \" {anytext} \" {number} \\n\n *\t\t|  {ws} # {ws} {number} \" {anytext} \" {number} [ {number} [{number}] ] \\n\n *\t\t|  {ws} # {ws} \\n\n *\n * ws\t\t:= [ \\t\\r\\f\\v]*\n *\n * expr\t\t:= {expr} [+-*%^/|&] {expr}\n *\t\t|  {expr} {logor|logand} {expr}\n *\t\t|  [!~+-] {expr}\n *\t\t|  {expr} ? {expr} : {expr}\n *\n * logor\t:= ||\n *\n * logand\t:= &&\n *\n * id\t\t:= [a-zA-Z_][a-zA-Z0-9_]*\n *\n * anytext\t:= [^\\n]*\t(see note)\n *\n * arglist\t:=\n *\t\t|  {id}\n *\t\t|  {arglist} , {id}\n *\t\t|  {arglist} , {id} ...\n *\n * expansion\t:= {id}\n *\t\t|  # {id}\n *\t\t|  {anytext}\n *\t\t|  {anytext} ## {anytext}\n *\n * number\t:= [0-9]+\n *\n * Note: \"anytext\" is not always \"[^\\n]*\". This is because the\n *\t trailing context must be considered as well.\n *\n * The only certain assumption for the preprocessor to make is that\n * directives start at the beginning of the line, followed by a '#'\n * and end with a newline.\n * Any directive may be suffixed with a line-continuation. Also\n * classical comment / *...* / (note: no comments within comments,\n * therefore spaces) is considered to be a line-continuation\n * (according to gcc and egcs AFAIK, ANSI is a bit vague).\n * Comments have not been added to the above grammar for simplicity\n * reasons. However, it is allowed to enter comment anywhere within\n * the directives as long as they do not interfere with the context.\n * All comments are considered to be deletable whitespace (both\n * classical form \"/ *...* /\" and C++ form \"//...\\n\").\n *\n * All recursive scans, except for macro-expansion, are done by the\n * parser, whereas the simple state transitions of non-recursive\n * directives are done in the scanner. This results in the many\n * exclusive start-conditions of the scanner.\n *\n * Macro expansions are slightly more difficult because they have to\n * prescan the arguments. Parameter substitution is literal if the\n * substitution is # or ## (either side). This enables new identifiers\n * to be created (see 'info cpp' node Macro|Pitfalls|Prescan for more\n * information).\n *\n * FIXME: Variable macro parameters is recognized, but not yet\n * expanded. I have to reread the ANSI standard on the subject (yes,\n * ANSI defines it).\n *\n * The following special defines are supported:\n * __FILE__\t-> \"thissource.c\"\n * __LINE__\t-> 123\n * __DATE__\t-> \"May  1 2000\"\n * __TIME__\t-> \"23:59:59\"\n * These macros expand, as expected, into their ANSI defined values.\n *\n * The same include prevention is implemented as gcc and egcs does.\n * This results in faster processing because we do not read the text\n * at all. Some wine-sources attempt to include the same file 4 or 5\n * times. This strategy also saves a lot blank output-lines, which in\n * its turn improves the real resource scanner/parser.\n *\n */\n\n%top{\n#include \"config.h\"\n#include \"wine/port.h\"\n}\n\n/*\n * Special flex options and exclusive scanner start-conditions\n */\n%option stack\n%option 8bit never-interactive\n%option noinput nounput\n%option prefix=\"ppy_\"\n\n%x pp_pp\n%x pp_eol\n%x pp_inc\n%x pp_dqs\n%x pp_sqs\n%x pp_iqs\n%x pp_comment\n%x pp_def\n%x pp_define\n%x pp_macro\n%x pp_mbody\n%x pp_macign\n%x pp_macscan\n%x pp_macexp\n%x pp_if\n%x pp_ifd\n%x pp_endif\n%x pp_line\n%x pp_defined\n%x pp_ignore\n%x RCINCL\n\nws\t[ \\v\\f\\t\\r]\ncident\t[a-zA-Z_][0-9a-zA-Z_]*\nul\t[uUlL]|[uUlL][lL]|[lL][uU]|[lL][lL][uU]|[uU][lL][lL]|[lL][uU][lL]\n\n%{\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <ctype.h>\n#include <assert.h>\n#include <errno.h>\n#include <limits.h>\n\n#ifndef LLONG_MAX\n# define LLONG_MAX  ((long long)0x7fffffff << 32 | 0xffffffff)\n# define LLONG_MIN  (-LLONG_MAX - 1)\n#endif\n#ifndef ULLONG_MAX\n# define ULLONG_MAX ((long long)0xffffffff << 32 | 0xffffffff)\n#endif\n\n#ifndef HAVE_UNISTD_H\n#define YY_NO_UNISTD_H\n#endif\n\n#include \"wine/wpp.h\"\n#include \"wpp_private.h\"\n#include \"ppy.tab.h\"\n\n/*\n * Make sure that we are running an appropriate version of flex.\n */\n#if !defined(YY_FLEX_MAJOR_VERSION) || (1000 * YY_FLEX_MAJOR_VERSION + YY_FLEX_MINOR_VERSION < 2005)\n#error Must use flex version 2.5.1 or higher (yy_scan_* routines are required).\n#endif\n\n#define YY_READ_BUF_SIZE\t65536\t\t/* So we read most of a file at once */\n\n#define yy_current_state()\tYY_START\n#define yy_pp_state(x)\t\tyy_pop_state(); yy_push_state(x)\n\n/*\n * Always update the current character position within a line\n */\n#define YY_USER_ACTION\tpp_status.char_number+=ppy_leng;\n\n/*\n * Buffer management for includes and expansions\n */\n#define MAXBUFFERSTACK\t128\t/* Nesting more than 128 includes or macro expansion textss is insane */\n\ntypedef struct bufferstackentry {\n\tYY_BUFFER_STATE\tbufferstate;\t/* Buffer to switch back to */\n\tvoid\t\t*filehandle;    /* Handle to be used with wpp_callbacks->read */\n\tpp_entry_t\t*define;\t/* Points to expanding define or NULL if handling includes */\n\tint\t\tline_number;\t/* Line that we were handling */\n\tint\t\tchar_number;\t/* The current position on that line */\n\tchar\t\t*filename;\t/* Filename that we were handling */\n\tint\t\tif_depth;\t/* How many #if:s deep to check matching #endif:s */\n\tint\t\tncontinuations;\t/* Remember the continuation state */\n\tint\t\tshould_pop;\t/* Set if we must pop the start-state on EOF */\n\t/* Include management */\n        include_state_t incl;\n\tchar \t\t*include_filename;\n} bufferstackentry_t;\n\n#define ALLOCBLOCKSIZE\t(1 << 10)\t/* Allocate these chunks at a time for string-buffers */\n\n/*\n * Macro expansion nesting\n * We need the stack to handle expansions while scanning\n * a macro's arguments. The TOS must always be the macro\n * that receives the current expansion from the scanner.\n */\n#define MAXMACEXPSTACK\t128\t/* Nesting more than 128 macro expansions is insane */\n\ntypedef struct macexpstackentry {\n\tpp_entry_t\t*ppp;\t\t/* This macro we are scanning */\n\tchar\t\t**args;\t\t/* With these arguments */\n\tchar\t\t**ppargs;\t/* Resulting in these preprocessed arguments */\n\tint\t\t*nnls;\t\t/* Number of newlines per argument */\n\tint\t\tnargs;\t\t/* And this many arguments scanned */\n\tint\t\tparentheses;\t/* Nesting level of () */\n\tint\t\tcurargsize;\t/* Current scanning argument's size */\n\tint\t\tcurargalloc;\t/* Current scanning argument's block allocated */\n\tchar\t\t*curarg;\t/* Current scanning argument's content */\n} macexpstackentry_t;\n\n#define MACROPARENTHESES()\t(top_macro()->parentheses)\n\n/*\n * Prototypes\n */\nstatic void newline(int);\nstatic int make_number(int radix, YYSTYPE *val, const char *str, int len);\nstatic void put_buffer(const char *s, int len);\n/* Buffer management */\nstatic void push_buffer(pp_entry_t *ppp, char *filename, char *incname, int pop);\nstatic bufferstackentry_t *pop_buffer(void);\n/* String functions */\nstatic void new_string(void);\nstatic void add_string(const char *str, int len);\nstatic char *get_string(void);\nstatic void put_string(void);\nstatic int string_start(void);\n/* Macro functions */\nstatic void push_macro(pp_entry_t *ppp);\nstatic macexpstackentry_t *top_macro(void);\nstatic macexpstackentry_t *pop_macro(void);\nstatic void free_macro(macexpstackentry_t *mep);\nstatic void add_text_to_macro(const char *text, int len);\nstatic void macro_add_arg(int last);\nstatic void macro_add_expansion(void);\n/* Expansion */\nstatic void expand_special(pp_entry_t *ppp);\nstatic void expand_define(pp_entry_t *ppp);\nstatic void expand_macro(macexpstackentry_t *mep);\n\n/*\n * Local variables\n */\nstatic int ncontinuations;\n\nstatic int strbuf_idx = 0;\nstatic int strbuf_alloc = 0;\nstatic char *strbuffer = NULL;\nstatic int str_startline;\n\nstatic macexpstackentry_t *macexpstack[MAXMACEXPSTACK];\nstatic int macexpstackidx = 0;\n\nstatic bufferstackentry_t bufferstack[MAXBUFFERSTACK];\nstatic int bufferstackidx = 0;\n\n/*\n * Global variables\n */\ninclude_state_t pp_incl_state =\n{\n    -1,    /* state */\n    NULL,  /* ppp */\n    0,     /* ifdepth */\n    0      /* seen_junk */\n};\n\nincludelogicentry_t *pp_includelogiclist = NULL;\n\n#define YY_INPUT(buf,result,max_size)\t\t\t\t\t     \\\n\t{\t\t\t\t\t\t\t\t     \\\n\t\tresult = wpp_callbacks->read(pp_status.file, buf, max_size); \\\n\t}\n\n#define BUFFERINITIALCAPACITY 256\n\nvoid pp_writestring(const char *format, ...)\n{\n\tva_list valist;\n\tint len;\n\tstatic char *buffer;\n\tstatic int buffercapacity;\n\tchar *new_buffer;\n\n\tif(buffercapacity == 0)\n\t{\n\t\tbuffer = pp_xmalloc(BUFFERINITIALCAPACITY);\n\t\tif(buffer == NULL)\n\t\t\treturn;\n\t\tbuffercapacity = BUFFERINITIALCAPACITY;\n\t}\n\n\tva_start(valist, format);\n\tlen = vsnprintf(buffer, buffercapacity,\n\t\t\tformat, valist);\n\tva_end(valist);\n        /* If the string is longer than buffersize, vsnprintf returns\n         * the string length with glibc >= 2.1, -1 with glibc < 2.1 */\n\twhile(len > buffercapacity || len < 0)\n\t{\n\t\tdo\n\t\t{\n\t\t\tbuffercapacity *= 2;\n\t\t} while(len > buffercapacity);\n\n\t\tnew_buffer = pp_xrealloc(buffer, buffercapacity);\n\t\tif(new_buffer == NULL)\n\t\t{\n\t\t\tva_end(valist);\n\t\t\treturn;\n\t\t}\n\t\tbuffer = new_buffer;\n\t\tva_start(valist, format);\n\t\tlen = vsnprintf(buffer, buffercapacity,\n\t\t\t\tformat, valist);\n\t\tva_end(valist);\n\t}\n\n\twpp_callbacks->write(buffer, len);\n}\n\n%}\n\n/*\n **************************************************************************\n * The scanner starts here\n **************************************************************************\n */\n\n%%\n\t/*\n\t * Catch line-continuations.\n\t * Note: Gcc keeps the line-continuations in, for example, strings\n\t * intact. However, I prefer to remove them all so that the next\n\t * scanner will not need to reduce the continuation state.\n\t *\n\t * <*>\\\\\\n\t\tnewline(0);\n\t */\n\n\t/*\n\t * Detect the leading # of a preprocessor directive.\n\t */\n<INITIAL,pp_ignore>^{ws}*#\tpp_incl_state.seen_junk++; yy_push_state(pp_pp);\n\n\t/*\n\t * Scan for the preprocessor directives\n\t */\n<pp_pp>{ws}*include{ws}*\tif(yy_top_state() != pp_ignore) {yy_pp_state(pp_inc); return tINCLUDE;} else {yy_pp_state(pp_eol);}\n<pp_pp>{ws}*define{ws}*\t\tyy_pp_state(yy_current_state() != pp_ignore ? pp_def : pp_eol);\n<pp_pp>{ws}*error{ws}*\t\tyy_pp_state(pp_eol);\tif(yy_top_state() != pp_ignore) return tERROR;\n<pp_pp>{ws}*warning{ws}*\tyy_pp_state(pp_eol);\tif(yy_top_state() != pp_ignore) return tWARNING;\n<pp_pp>{ws}*pragma{ws}*\t\tyy_pp_state(pp_eol);\tif(yy_top_state() != pp_ignore) return tPRAGMA;\n<pp_pp>{ws}*ident{ws}*\t\tyy_pp_state(pp_eol);\tif(yy_top_state() != pp_ignore) return tPPIDENT;\n<pp_pp>{ws}*undef{ws}*\t\tif(yy_top_state() != pp_ignore) {yy_pp_state(pp_ifd); return tUNDEF;} else {yy_pp_state(pp_eol);}\n<pp_pp>{ws}*ifdef{ws}*\t\tyy_pp_state(pp_ifd);\treturn tIFDEF;\n<pp_pp>{ws}*ifndef{ws}*\t\tpp_incl_state.seen_junk--; yy_pp_state(pp_ifd);\treturn tIFNDEF;\n<pp_pp>{ws}*if{ws}*\t\tyy_pp_state(pp_if);\treturn tIF;\n<pp_pp>{ws}*elif{ws}*\t\tyy_pp_state(pp_if);\treturn tELIF;\n<pp_pp>{ws}*else{ws}*\t\tyy_pp_state(pp_endif);  return tELSE;\n<pp_pp>{ws}*endif{ws}*\t\tyy_pp_state(pp_endif);  return tENDIF;\n<pp_pp>{ws}*line{ws}*\t\tif(yy_top_state() != pp_ignore) {yy_pp_state(pp_line); return tLINE;} else {yy_pp_state(pp_eol);}\n<pp_pp>{ws}+\t\t\tif(yy_top_state() != pp_ignore) {yy_pp_state(pp_line); return tGCCLINE;} else {yy_pp_state(pp_eol);}\n<pp_pp>{ws}*[a-z]+\t\tppy_error(\"Invalid preprocessor token '%s'\", ppy_text);\n<pp_pp>\\r?\\n\t\t\tnewline(1); yy_pop_state(); return tNL;\t/* This could be the null-token */\n<pp_pp>\\\\\\r?\\n\t\t\tnewline(0);\n<pp_pp>\\\\\\r?\t\t\tppy_error(\"Preprocessor junk '%s'\", ppy_text);\n<pp_pp>.\t\t\treturn *ppy_text;\n\n\t/*\n\t * Handle #include and #line\n\t */\n<pp_line>[0-9]+\t\t\treturn make_number(10, &ppy_lval, ppy_text, ppy_leng);\n<pp_inc>\\<\t\t\tnew_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_iqs);\n<pp_inc,pp_line>\\\"\t\tnew_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs);\n<pp_inc,pp_line>{ws}+\t\t;\n<pp_inc,pp_line>\\n\t\tnewline(1); yy_pop_state(); return tNL;\n<pp_inc,pp_line>\\\\\\r?\\n\t\tnewline(0);\n<pp_inc,pp_line>(\\\\\\r?)|(.)\tppy_error(yy_current_state() == pp_inc ? \"Trailing junk in #include\" : \"Trailing junk in #line\");\n\n\t/*\n\t * Ignore all input when a false clause is parsed\n\t */\n<pp_ignore>[^#/\\\\\\n]+\t\t;\n<pp_ignore>\\n\t\t\tnewline(1);\n<pp_ignore>\\\\\\r?\\n\t\tnewline(0);\n<pp_ignore>(\\\\\\r?)|(.)\t\t;\n\n\t/*\n\t * Handle #if and #elif.\n\t * These require conditionals to be evaluated, but we do not\n\t * want to jam the scanner normally when we see these tokens.\n\t * Note: tIDENT is handled below.\n\t */\n\n<pp_if>0[0-7]*{ul}?\t\treturn make_number(8, &ppy_lval, ppy_text, ppy_leng);\n<pp_if>0[0-7]*[8-9]+{ul}?\tppy_error(\"Invalid octal digit\");\n<pp_if>[1-9][0-9]*{ul}?\t\treturn make_number(10, &ppy_lval, ppy_text, ppy_leng);\n<pp_if>0[xX][0-9a-fA-F]+{ul}?\treturn make_number(16, &ppy_lval, ppy_text, ppy_leng);\n<pp_if>0[xX]\t\t\tppy_error(\"Invalid hex number\");\n<pp_if>defined\t\t\tyy_push_state(pp_defined); return tDEFINED;\n<pp_if>\"<<\"\t\t\treturn tLSHIFT;\n<pp_if>\">>\"\t\t\treturn tRSHIFT;\n<pp_if>\"&&\"\t\t\treturn tLOGAND;\n<pp_if>\"||\"\t\t\treturn tLOGOR;\n<pp_if>\"==\"\t\t\treturn tEQ;\n<pp_if>\"!=\"\t\t\treturn tNE;\n<pp_if>\"<=\"\t\t\treturn tLTE;\n<pp_if>\">=\"\t\t\treturn tGTE;\n<pp_if>\\n\t\t\tnewline(1); yy_pop_state(); return tNL;\n<pp_if>\\\\\\r?\\n\t\t\tnewline(0);\n<pp_if>\\\\\\r?\t\t\tppy_error(\"Junk in conditional expression\");\n<pp_if>{ws}+\t\t\t;\n<pp_if>\\'\t\t\tnew_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs);\n<pp_if>\\\"\t\t\tppy_error(\"String constants not allowed in conditionals\");\n<pp_if>.\t\t\treturn *ppy_text;\n\n\t/*\n\t * Handle #ifdef, #ifndef and #undef\n\t * to get only an untranslated/unexpanded identifier\n\t */\n<pp_ifd>{cident}\tppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT;\n<pp_ifd>{ws}+\t\t;\n<pp_ifd>\\n\t\tnewline(1); yy_pop_state(); return tNL;\n<pp_ifd>\\\\\\r?\\n\t\tnewline(0);\n<pp_ifd>(\\\\\\r?)|(.)\tppy_error(\"Identifier expected\");\n\n\t/*\n\t * Handle #else and #endif.\n\t */\n<pp_endif>{ws}+\t\t;\n<pp_endif>\\n\t\tnewline(1); yy_pop_state(); return tNL;\n<pp_endif>\\\\\\r?\\n\tnewline(0);\n<pp_endif>.\t\tppy_error(\"Garbage after #else or #endif.\");\n\n\t/*\n\t * Handle the special 'defined' keyword.\n\t * This is necessary to get the identifier prior to any\n\t * substitutions.\n\t */\n<pp_defined>{cident}\t\tyy_pop_state(); ppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT;\n<pp_defined>{ws}+\t\t;\n<pp_defined>(\\()|(\\))\t\treturn *ppy_text;\n<pp_defined>\\\\\\r?\\n\t\tnewline(0);\n<pp_defined>(\\\\.)|(\\n)|(.)\tppy_error(\"Identifier expected\");\n\n\t/*\n\t * Handle #error, #warning, #pragma and #ident.\n\t * Pass everything literally to the parser, which\n\t * will act appropriately.\n\t * Comments are stripped from the literal text.\n\t */\n<pp_eol>[^/\\\\\\n]+\t\tif(yy_top_state() != pp_ignore) { ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; }\n<pp_eol>\\/[^/\\\\\\n*]*\t\tif(yy_top_state() != pp_ignore) { ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; }\n<pp_eol>(\\\\\\r?)|(\\/[^/*])\tif(yy_top_state() != pp_ignore) { ppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL; }\n<pp_eol>\\n\t\t\tnewline(1); yy_pop_state(); if(yy_current_state() != pp_ignore) { return tNL; }\n<pp_eol>\\\\\\r?\\n\t\t\tnewline(0);\n\n\t/*\n\t * Handle left side of #define\n\t */\n<pp_def>{cident}\\(\t\tppy_lval.cptr = pp_xstrdup(ppy_text); if(ppy_lval.cptr) ppy_lval.cptr[ppy_leng-1] = '\\0'; yy_pp_state(pp_macro);  return tMACRO;\n<pp_def>{cident}\t\tppy_lval.cptr = pp_xstrdup(ppy_text); yy_pp_state(pp_define); return tDEFINE;\n<pp_def>{ws}+\t\t\t;\n<pp_def>\\\\\\r?\\n\t\t\tnewline(0);\n<pp_def>(\\\\\\r?)|(\\n)|(.)\tperror(\"Identifier expected\");\n\n\t/*\n\t * Scan the substitution of a define\n\t */\n<pp_define>[^'\"/\\\\\\n]+\t\tppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL;\n<pp_define>(\\\\\\r?)|(\\/[^/*])\tppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL;\n<pp_define>\\\\\\r?\\n{ws}+\t\tnewline(0); ppy_lval.cptr = pp_xstrdup(\" \"); return tLITERAL;\n<pp_define>\\\\\\r?\\n\t\tnewline(0);\n<pp_define>\\n\t\t\tnewline(1); yy_pop_state(); return tNL;\n<pp_define>\\'\t\t\tnew_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs);\n<pp_define>\\\"\t\t\tnew_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs);\n\n\t/*\n\t * Scan the definition macro arguments\n\t */\n<pp_macro>\\){ws}*\t\tyy_pp_state(pp_mbody); return tMACROEND;\n<pp_macro>{ws}+\t\t\t;\n<pp_macro>{cident}\t\tppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT;\n<pp_macro>,\t\t\treturn ',';\n<pp_macro>\"...\"\t\t\treturn tELIPSIS;\n<pp_macro>(\\\\\\r?)|(\\n)|(.)|(\\.\\.?)\tppy_error(\"Argument identifier expected\");\n<pp_macro>\\\\\\r?\\n\t\tnewline(0);\n\n\t/*\n\t * Scan the substitution of a macro\n\t */\n<pp_mbody>[^a-zA-Z0-9'\"#/\\\\\\n]+\tppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL;\n<pp_mbody>{cident}\t\tppy_lval.cptr = pp_xstrdup(ppy_text); return tIDENT;\n<pp_mbody>\\#\\#\t\t\treturn tCONCAT;\n<pp_mbody>\\#\t\t\treturn tSTRINGIZE;\n<pp_mbody>[0-9][a-zA-Z0-9]*[^a-zA-Z0-9'\"#/\\\\\\n]*\tppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL;\n<pp_mbody>(\\\\\\r?)|(\\/[^/*'\"#\\\\\\n]*)\tppy_lval.cptr = pp_xstrdup(ppy_text); return tLITERAL;\n<pp_mbody>\\\\\\r?\\n{ws}+\t\tnewline(0); ppy_lval.cptr = pp_xstrdup(\" \"); return tLITERAL;\n<pp_mbody>\\\\\\r?\\n\t\tnewline(0);\n<pp_mbody>\\n\t\t\tnewline(1); yy_pop_state(); return tNL;\n<pp_mbody>\\'\t\t\tnew_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs);\n<pp_mbody>\\\"\t\t\tnew_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs);\n\n\t/*\n\t * Macro expansion text scanning.\n\t * This state is active just after the identifier is scanned\n\t * that triggers an expansion. We *must* delete the leading\n\t * whitespace before we can start scanning for arguments.\n\t *\n\t * If we do not see a '(' as next trailing token, then we have\n\t * a false alarm. We just continue with a nose-bleed...\n\t */\n<pp_macign>{ws}*/\\(\tyy_pp_state(pp_macscan);\n<pp_macign>{ws}*\\n\t{\n\t\tif(yy_top_state() != pp_macscan)\n\t\t\tnewline(0);\n\t}\n<pp_macign>{ws}*\\\\\\r?\\n\tnewline(0);\n<pp_macign>{ws}+|{ws}*\\\\\\r?|.\t{\n\t\tmacexpstackentry_t *mac = pop_macro();\n\t\tyy_pop_state();\n\t\tput_buffer(mac->ppp->ident, strlen(mac->ppp->ident));\n\t\tput_buffer(ppy_text, ppy_leng);\n\t\tfree_macro(mac);\n\t}\n\n\t/*\n\t * Macro expansion argument text scanning.\n\t * This state is active when a macro's arguments are being read for expansion.\n\t */\n<pp_macscan>\\(\t{\n\t\tif(++MACROPARENTHESES() > 1)\n\t\t\tadd_text_to_macro(ppy_text, ppy_leng);\n\t}\n<pp_macscan>\\)\t{\n\t\tif(--MACROPARENTHESES() == 0)\n\t\t{\n\t\t\tyy_pop_state();\n\t\t\tmacro_add_arg(1);\n\t\t}\n\t\telse\n\t\t\tadd_text_to_macro(ppy_text, ppy_leng);\n\t}\n<pp_macscan>,\t\t{\n\t\tif(MACROPARENTHESES() > 1)\n\t\t\tadd_text_to_macro(ppy_text, ppy_leng);\n\t\telse\n\t\t\tmacro_add_arg(0);\n\t}\n<pp_macscan>\\\"\t\tnew_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs);\n<pp_macscan>\\'\t\tnew_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs);\n<pp_macscan>\"/*\"\tyy_push_state(pp_comment); add_text_to_macro(\" \", 1);\n<pp_macscan>\\n\t\tpp_status.line_number++; pp_status.char_number = 1; add_text_to_macro(ppy_text, ppy_leng);\n<pp_macscan>([^/(),\\\\\\n\"']+)|(\\/[^/*(),\\\\\\n'\"]*)|(\\\\\\r?)|(.)\tadd_text_to_macro(ppy_text, ppy_leng);\n<pp_macscan>\\\\\\r?\\n\tnewline(0);\n\n\t/*\n\t * Comment handling (almost all start-conditions)\n\t */\n<INITIAL,pp_pp,pp_ignore,pp_eol,pp_inc,pp_if,pp_ifd,pp_endif,pp_defined,pp_def,pp_define,pp_macro,pp_mbody,RCINCL>\"/*\" yy_push_state(pp_comment);\n<pp_comment>[^*\\n]*|\"*\"+[^*/\\n]*\t;\n<pp_comment>\\n\t\t\t\tnewline(0);\n<pp_comment>\"*\"+\"/\"\t\t\tyy_pop_state();\n\n\t/*\n\t * Remove C++ style comment (almost all start-conditions)\n\t */\n<INITIAL,pp_pp,pp_ignore,pp_eol,pp_inc,pp_if,pp_ifd,pp_endif,pp_defined,pp_def,pp_define,pp_macro,pp_mbody,pp_macscan,RCINCL>\"//\"[^\\n]*\t{\n\t\tif(ppy_text[ppy_leng-1] == '\\\\')\n\t\t\tppy_warning(\"C++ style comment ends with an escaped newline (escape ignored)\");\n\t}\n\n\t/*\n\t * Single, double and <> quoted constants\n\t */\n<INITIAL,pp_macexp>\\\"\t\tpp_incl_state.seen_junk++; new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_dqs);\n<INITIAL,pp_macexp>\\'\t\tpp_incl_state.seen_junk++; new_string(); add_string(ppy_text, ppy_leng); yy_push_state(pp_sqs);\n<pp_dqs>[^\"\\\\\\n]+\t\tadd_string(ppy_text, ppy_leng);\n<pp_dqs>\\\"\t\t\t{\n\t\tadd_string(ppy_text, ppy_leng);\n\t\tyy_pop_state();\n\t\tswitch(yy_current_state())\n\t\t{\n\t\tcase pp_pp:\n\t\tcase pp_define:\n\t\tcase pp_mbody:\n\t\tcase pp_inc:\n\t\tcase RCINCL:\n\t\t\tif (yy_current_state()==RCINCL) yy_pop_state();\n\t\t\tppy_lval.cptr = get_string();\n\t\t\treturn tDQSTRING;\n\t\tcase pp_line:\n\t\t\tppy_lval.cptr = get_string();\n\t\t\treturn tDQSTRING;\n\t\tdefault:\n\t\t\tput_string();\n\t\t}\n\t}\n<pp_sqs>[^'\\\\\\n]+\t\tadd_string(ppy_text, ppy_leng);\n<pp_sqs>\\'\t\t\t{\n\t\tadd_string(ppy_text, ppy_leng);\n\t\tyy_pop_state();\n\t\tswitch(yy_current_state())\n\t\t{\n\t\tcase pp_if:\n\t\tcase pp_define:\n\t\tcase pp_mbody:\n\t\t\tppy_lval.cptr = get_string();\n\t\t\treturn tSQSTRING;\n\t\tdefault:\n\t\t\tput_string();\n\t\t}\n\t}\n<pp_iqs>[^\\>\\\\\\n]+\t\tadd_string(ppy_text, ppy_leng);\n<pp_iqs>\\>\t\t\t{\n\t\tadd_string(ppy_text, ppy_leng);\n\t\tyy_pop_state();\n\t\tppy_lval.cptr = get_string();\n\t\treturn tIQSTRING;\n\t}\n<pp_dqs>\\\\\\r?\\n\t\t{\n\t\t/*\n\t\t * This is tricky; we need to remove the line-continuation\n\t\t * from preprocessor strings, but OTOH retain them in all\n\t\t * other strings. This is because the resource grammar is\n\t\t * even more braindead than initially analysed and line-\n\t\t * continuations in strings introduce, sigh, newlines in\n\t\t * the output. There goes the concept of non-breaking, non-\n\t\t * spacing whitespace.\n\t\t */\n\t\tswitch(yy_top_state())\n\t\t{\n\t\tcase pp_pp:\n\t\tcase pp_define:\n\t\tcase pp_mbody:\n\t\tcase pp_inc:\n\t\tcase pp_line:\n\t\t\tnewline(0);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tadd_string(ppy_text, ppy_leng);\n\t\t\tnewline(-1);\n\t\t}\n\t}\n<pp_iqs,pp_dqs,pp_sqs>\\\\.\tadd_string(ppy_text, ppy_leng);\n<pp_iqs,pp_dqs,pp_sqs>\\n\t{\n\t\tnewline(1);\n\t\tadd_string(ppy_text, ppy_leng);\n\t\tppy_warning(\"Newline in string constant encountered (started line %d)\", string_start());\n\t}\n\n\t/*\n\t * Identifier scanning\n\t */\n<INITIAL,pp_if,pp_inc,pp_macexp>{cident}\t{\n\t\tpp_entry_t *ppp;\n\t\tpp_incl_state.seen_junk++;\n\t\tif(!(ppp = pplookup(ppy_text)))\n\t\t{\n\t\t\tif(yy_current_state() == pp_inc)\n\t\t\t\tppy_error(\"Expected include filename\");\n\n\t\t\telse if(yy_current_state() == pp_if)\n\t\t\t{\n\t\t\t\tppy_lval.cptr = pp_xstrdup(ppy_text);\n\t\t\t\treturn tIDENT;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif((yy_current_state()==INITIAL) && (strcasecmp(ppy_text,\"RCINCLUDE\")==0)){\n\t\t\t\t\tyy_push_state(RCINCL);\n\t\t\t\t\treturn tRCINCLUDE;\n\t\t\t\t}\n\t\t\t\telse put_buffer(ppy_text, ppy_leng);\n\t\t\t}\n\t\t}\n\t\telse if(!ppp->expanding)\n\t\t{\n\t\t\tswitch(ppp->type)\n\t\t\t{\n\t\t\tcase def_special:\n\t\t\t\texpand_special(ppp);\n\t\t\t\tbreak;\n\t\t\tcase def_define:\n\t\t\t\texpand_define(ppp);\n\t\t\t\tbreak;\n\t\t\tcase def_macro:\n\t\t\t\tyy_push_state(pp_macign);\n\t\t\t\tpush_macro(ppp);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tpp_internal_error(__FILE__, __LINE__, \"Invalid define type %d\\n\", ppp->type);\n\t\t\t}\n\t\t}\n\t\telse put_buffer(ppy_text, ppy_leng);\n\t}\n\n\t/*\n\t * Everything else that needs to be passed and\n\t * newline and continuation handling\n\t */\n<INITIAL,pp_macexp>[^a-zA-Z_#'\"/\\\\\\n \\r\\t\\f\\v]+|(\\/|\\\\)[^a-zA-Z_/*'\"\\\\\\n \\r\\t\\v\\f]*\tpp_incl_state.seen_junk++; put_buffer(ppy_text, ppy_leng);\n<INITIAL,pp_macexp>{ws}+\tput_buffer(ppy_text, ppy_leng);\n<INITIAL>\\n\t\t\tnewline(1);\n<INITIAL>\\\\\\r?\\n\t\tnewline(0);\n<INITIAL>\\\\\\r?\t\t\tpp_incl_state.seen_junk++; put_buffer(ppy_text, ppy_leng);\n\n\t/*\n\t * Special catcher for macro argmument expansion to prevent\n\t * newlines to propagate to the output or admin.\n\t */\n<pp_macexp>(\\n)|(.)|(\\\\\\r?(\\n|.))\tput_buffer(ppy_text, ppy_leng);\n\n<RCINCL>[A-Za-z0-9_\\.\\\\/]+ {\n\t\tppy_lval.cptr=pp_xstrdup(ppy_text);\n        \tyy_pop_state();\n\t\treturn tRCINCLUDEPATH;\n\t}\n\n<RCINCL>{ws}+ ;\n\n<RCINCL>\\\"\t\t{\n\t\tnew_string(); add_string(ppy_text,ppy_leng);yy_push_state(pp_dqs);\n\t}\n\n\t/*\n\t * This is a 'catch-all' rule to discover errors in the scanner\n\t * in an orderly manner.\n\t */\n<*>.\t\tpp_incl_state.seen_junk++; ppy_warning(\"Unmatched text '%c' (0x%02x); please report\\n\", isprint(*ppy_text & 0xff) ? *ppy_text : ' ', *ppy_text);\n\n<<EOF>>\t{\n\t\tYY_BUFFER_STATE b = YY_CURRENT_BUFFER;\n\t\tbufferstackentry_t *bep = pop_buffer();\n\n\t\tif((!bep && pp_get_if_depth()) || (bep && pp_get_if_depth() != bep->if_depth))\n\t\t\tppy_warning(\"Unmatched #if/#endif at end of file\");\n\n\t\tif(!bep)\n\t\t{\n\t\t\tif(YY_START != INITIAL)\n\t\t\t{\n\t\t\t\tppy_error(\"Unexpected end of file during preprocessing\");\n\t\t\t\tBEGIN(INITIAL);\n\t\t\t}\n\t\t\tyyterminate();\n\t\t}\n\t\telse if(bep->should_pop == 2)\n\t\t{\n\t\t\tmacexpstackentry_t *mac;\n\t\t\tmac = pop_macro();\n\t\t\texpand_macro(mac);\n\t\t}\n\t\tppy__delete_buffer(b);\n\t}\n\n%%\n/*\n **************************************************************************\n * Support functions\n **************************************************************************\n */\n\n#ifndef ppy_wrap\nint ppy_wrap(void)\n{\n\treturn 1;\n}\n#endif\n\n\n/*\n *-------------------------------------------------------------------------\n * Output newlines or set them as continuations\n *\n * Input: -1 - Don't count this one, but update local position (see pp_dqs)\n *\t   0 - Line-continuation seen and cache output\n *\t   1 - Newline seen and flush output\n *-------------------------------------------------------------------------\n */\nstatic void newline(int dowrite)\n{\n\tpp_status.line_number++;\n\tpp_status.char_number = 1;\n\n\tif(dowrite == -1)\n\t\treturn;\n\n\tncontinuations++;\n\tif(dowrite)\n\t{\n\t\tfor(;ncontinuations; ncontinuations--)\n\t\t\tput_buffer(\"\\n\", 1);\n\t}\n}\n\n\n/*\n *-------------------------------------------------------------------------\n * Make a number out of an any-base and suffixed string\n *\n * Possible number extensions:\n * - \"\"\t\tint\n * - \"L\"\tlong int\n * - \"LL\"\tlong long int\n * - \"U\"\tunsigned int\n * - \"UL\"\tunsigned long int\n * - \"ULL\"\tunsigned long long int\n * - \"LU\"\tunsigned long int\n * - \"LLU\"\tunsigned long long int\n * - \"LUL\"\tinvalid\n *\n * FIXME:\n * The sizes of resulting 'int' and 'long' are compiler specific.\n * I depend on sizeof(int) > 2 here (although a relatively safe\n * assumption).\n * Long longs are not yet implemented because this is very compiler\n * specific and I don't want to think too much about the problems.\n *\n *-------------------------------------------------------------------------\n */\nstatic int make_number(int radix, YYSTYPE *val, const char *str, int len)\n{\n\tint is_l  = 0;\n\tint is_ll = 0;\n\tint is_u  = 0;\n\tchar ext[4];\n\tlong l;\n\n\text[3] = '\\0';\n\text[2] = toupper(str[len-1]);\n\text[1] = len > 1 ? toupper(str[len-2]) : ' ';\n\text[0] = len > 2 ? toupper(str[len-3]) : ' ';\n\n\tif(!strcmp(ext, \"LUL\"))\n\t{\n\t\tppy_error(\"Invalid constant suffix\");\n\t\treturn 0;\n\t}\n\telse if(!strcmp(ext, \"LLU\") || !strcmp(ext, \"ULL\"))\n\t{\n\t\tis_ll++;\n\t\tis_u++;\n\t}\n\telse if(!strcmp(ext+1, \"LU\") || !strcmp(ext+1, \"UL\"))\n\t{\n\t\tis_l++;\n\t\tis_u++;\n\t}\n\telse if(!strcmp(ext+1, \"LL\"))\n\t{\n\t\tis_ll++;\n\t}\n\telse if(!strcmp(ext+2, \"L\"))\n\t{\n\t\tis_l++;\n\t}\n\telse if(!strcmp(ext+2, \"U\"))\n\t{\n\t\tis_u++;\n\t}\n\n\tif(is_ll)\n\t{\n/* Assume as in the declaration of wrc_ull_t and wrc_sll_t */\n#ifdef HAVE_LONG_LONG\n\t\tif (is_u)\n\t\t{\n\t\t\terrno = 0;\n\t\t\tval->ull = strtoull(str, NULL, radix);\n\t\t\tif (val->ull == ULLONG_MAX && errno == ERANGE)\n\t\t\t\tppy_error(\"integer constant %s is too large\\n\", str);\n\t\t\treturn tULONGLONG;\n\t\t}\n\t\telse\n\t\t{\n\t\t\terrno = 0;\n\t\t\tval->sll = strtoll(str, NULL, radix);\n\t\t\tif ((val->sll == LLONG_MIN || val->sll == LLONG_MAX) && errno == ERANGE)\n\t\t\t\tppy_error(\"integer constant %s is too large\\n\", str);\n\t\t\treturn tSLONGLONG;\n\t\t}\n#else\n\t\tpp_internal_error(__FILE__, __LINE__, \"long long constants not supported on this platform\");\n#endif\n\t}\n\telse if(is_u && is_l)\n\t{\n\t\terrno = 0;\n\t\tval->ulong = strtoul(str, NULL, radix);\n\t\tif (val->ulong == ULONG_MAX && errno == ERANGE)\n\t\t\tppy_error(\"integer constant %s is too large\\n\", str);\n\t\treturn tULONG;\n\t}\n\telse if(!is_u && is_l)\n\t{\n\t\terrno = 0;\n\t\tval->slong = strtol(str, NULL, radix);\n\t\tif ((val->slong == LONG_MIN || val->slong == LONG_MAX) && errno == ERANGE)\n\t\t\tppy_error(\"integer constant %s is too large\\n\", str);\n\t\treturn tSLONG;\n\t}\n\telse if(is_u && !is_l)\n\t{\n\t\tunsigned long ul;\n\t\terrno = 0;\n\t\tul = strtoul(str, NULL, radix);\n\t\tif ((ul == ULONG_MAX && errno == ERANGE) || (ul > UINT_MAX))\n\t\t\tppy_error(\"integer constant %s is too large\\n\", str);\n\t\tval->uint = (unsigned int)ul;\n\t\treturn tUINT;\n\t}\n\n\t/* Else it must be an int... */\n\terrno = 0;\n\tl = strtol(str, NULL, radix);\n\tif (((l == LONG_MIN || l == LONG_MAX) && errno == ERANGE) ||\n\t\t(l > INT_MAX) || (l < INT_MIN))\n\t\tppy_error(\"integer constant %s is too large\\n\", str);\n\tval->sint = (int)l;\n\treturn tSINT;\n}\n\n\n/*\n *-------------------------------------------------------------------------\n * Macro and define expansion support\n *\n * FIXME: Variable macro arguments.\n *-------------------------------------------------------------------------\n */\nstatic void expand_special(pp_entry_t *ppp)\n{\n\tstatic char *buf = NULL;\n\tchar *new_buf;\n\n\tassert(ppp->type == def_special);\n\n\tif(!strcmp(ppp->ident, \"__LINE__\"))\n\t{\n\t\tnew_buf = pp_xrealloc(buf, 32);\n\t\tif(!new_buf)\n\t\t\treturn;\n\t\tbuf = new_buf;\n\t\tsprintf(buf, \"%d\", pp_status.line_number);\n\t}\n\telse if(!strcmp(ppp->ident, \"__FILE__\"))\n\t{\n\t\tnew_buf = pp_xrealloc(buf, strlen(pp_status.input) + 3);\n\t\tif(!new_buf)\n\t\t\treturn;\n\t\tbuf = new_buf;\n\t\tsprintf(buf, \"\\\"%s\\\"\", pp_status.input);\n\t}\n\telse\n\t\tpp_internal_error(__FILE__, __LINE__, \"Special macro '%s' not found...\\n\", ppp->ident);\n\n\tif(pp_flex_debug)\n\t\tfprintf(stderr, \"expand_special(%d): %s:%d: '%s' -> '%s'\\n\",\n\t\t\tmacexpstackidx,\n\t\t\tpp_status.input,\n\t\t\tpp_status.line_number,\n\t\t\tppp->ident,\n\t\t\tbuf ? buf : \"\");\n\n\tif(buf && buf[0])\n\t{\n\t\tpush_buffer(ppp, NULL, NULL, 0);\n\t\tyy_scan_string(buf);\n\t}\n}\n\nstatic void expand_define(pp_entry_t *ppp)\n{\n\tassert(ppp->type == def_define);\n\n\tif(pp_flex_debug)\n\t\tfprintf(stderr, \"expand_define(%d): %s:%d: '%s' -> '%s'\\n\",\n\t\t\tmacexpstackidx,\n\t\t\tpp_status.input,\n\t\t\tpp_status.line_number,\n\t\t\tppp->ident,\n\t\t\tppp->subst.text);\n\tif(ppp->subst.text && ppp->subst.text[0])\n\t{\n\t\tpush_buffer(ppp, NULL, NULL, 0);\n\t\tyy_scan_string(ppp->subst.text);\n\t}\n}\n\nstatic int curdef_idx = 0;\nstatic int curdef_alloc = 0;\nstatic char *curdef_text = NULL;\n\nstatic void add_text(const char *str, int len)\n{\n\tint new_alloc;\n\tchar *new_text;\n\n\tif(len == 0)\n\t\treturn;\n\tif(curdef_idx >= curdef_alloc || curdef_alloc - curdef_idx < len)\n\t{\n\t\tnew_alloc = curdef_alloc + ((len + ALLOCBLOCKSIZE-1) & ~(ALLOCBLOCKSIZE-1));\n\t\tnew_text = pp_xrealloc(curdef_text, new_alloc * sizeof(curdef_text[0]));\n\t\tif(!new_text)\n\t\t\treturn;\n\t\tcurdef_text = new_text;\n\t\tcurdef_alloc = new_alloc;\n\t\tif(curdef_alloc > 65536)\n\t\t\tppy_warning(\"Reallocating macro-expansion buffer larger than 64kB\");\n\t}\n\tmemcpy(&curdef_text[curdef_idx], str, len);\n\tcurdef_idx += len;\n}\n\nstatic mtext_t *add_expand_text(mtext_t *mtp, macexpstackentry_t *mep, int *nnl)\n{\n\tchar *cptr;\n\tchar *exp;\n\tint tag;\n\tint n;\n\n\tif(mtp == NULL)\n\t\treturn NULL;\n\n\tswitch(mtp->type)\n\t{\n\tcase exp_text:\n\t\tif(pp_flex_debug)\n\t\t\tfprintf(stderr, \"add_expand_text: exp_text: '%s'\\n\", mtp->subst.text);\n\t\tadd_text(mtp->subst.text, strlen(mtp->subst.text));\n\t\tbreak;\n\n\tcase exp_stringize:\n\t\tif(pp_flex_debug)\n\t\t\tfprintf(stderr, \"add_expand_text: exp_stringize(%d): '%s'\\n\",\n\t\t\t\tmtp->subst.argidx,\n\t\t\t\tmep->args[mtp->subst.argidx]);\n\t\tcptr = mep->args[mtp->subst.argidx];\n\t\tadd_text(\"\\\"\", 1);\n\t\twhile(*cptr)\n\t\t{\n\t\t\tif(*cptr == '\"' || *cptr == '\\\\')\n\t\t\t\tadd_text(\"\\\\\", 1);\n\t\t\tadd_text(cptr, 1);\n\t\t\tcptr++;\n\t\t}\n\t\tadd_text(\"\\\"\", 1);\n\t\tbreak;\n\n\tcase exp_concat:\n\t\tif(pp_flex_debug)\n\t\t\tfprintf(stderr, \"add_expand_text: exp_concat\\n\");\n\t\t/* Remove trailing whitespace from current expansion text */\n\t\twhile(curdef_idx)\n\t\t{\n\t\t\tif(isspace(curdef_text[curdef_idx-1] & 0xff))\n\t\t\t\tcurdef_idx--;\n\t\t\telse\n\t\t\t\tbreak;\n\t\t}\n\t\t/* tag current position and recursively expand the next part */\n\t\ttag = curdef_idx;\n\t\tmtp = add_expand_text(mtp->next, mep, nnl);\n\n\t\t/* Now get rid of the leading space of the expansion */\n\t\tcptr = &curdef_text[tag];\n\t\tn = curdef_idx - tag;\n\t\twhile(n)\n\t\t{\n\t\t\tif(isspace(*cptr & 0xff))\n\t\t\t{\n\t\t\t\tcptr++;\n\t\t\t\tn--;\n\t\t\t}\n\t\t\telse\n\t\t\t\tbreak;\n\t\t}\n\t\tif(cptr != &curdef_text[tag])\n\t\t{\n\t\t\tmemmove(&curdef_text[tag], cptr, n);\n\t\t\tcurdef_idx -= (curdef_idx - tag) - n;\n\t\t}\n\t\tbreak;\n\n\tcase exp_subst:\n\t\tif((mtp->next && mtp->next->type == exp_concat) || (mtp->prev && mtp->prev->type == exp_concat))\n\t\t\texp = mep->args[mtp->subst.argidx];\n\t\telse\n\t\t\texp = mep->ppargs[mtp->subst.argidx];\n\t\tif(exp)\n\t\t{\n\t\t\tadd_text(exp, strlen(exp));\n\t\t\t*nnl -= mep->nnls[mtp->subst.argidx];\n\t\t\tcptr = strchr(exp, '\\n');\n\t\t\twhile(cptr)\n\t\t\t{\n\t\t\t\t*cptr = ' ';\n\t\t\t\tcptr = strchr(cptr+1, '\\n');\n\t\t\t}\n\t\t\tmep->nnls[mtp->subst.argidx] = 0;\n\t\t}\n\t\tif(pp_flex_debug)\n\t\t\tfprintf(stderr, \"add_expand_text: exp_subst(%d): '%s'\\n\", mtp->subst.argidx, exp);\n\t\tbreak;\n\n\tdefault:\n\t\tpp_internal_error(__FILE__, __LINE__, \"Invalid expansion type (%d) in macro expansion\\n\", mtp->type);\n\t}\n\treturn mtp;\n}\n\nstatic void expand_macro(macexpstackentry_t *mep)\n{\n\tmtext_t *mtp;\n\tint n, k;\n\tchar *cptr;\n\tint nnl = 0;\n\tpp_entry_t *ppp = mep->ppp;\n\tint nargs = mep->nargs;\n\n\tassert(ppp->type == def_macro);\n\tassert(ppp->expanding == 0);\n\n\tif((ppp->nargs >= 0 && nargs != ppp->nargs) || (ppp->nargs < 0 && nargs < -ppp->nargs))\n\t{\n\t\tppy_error(\"Too %s macro arguments (%d)\", nargs < abs(ppp->nargs) ? \"few\" : \"many\", nargs);\n\t\treturn;\n\t}\n\n\tfor(n = 0; n < nargs; n++)\n\t\tnnl += mep->nnls[n];\n\n\tif(pp_flex_debug)\n\t\tfprintf(stderr, \"expand_macro(%d): %s:%d: '%s'(%d,%d) -> ...\\n\",\n\t\t\tmacexpstackidx,\n\t\t\tpp_status.input,\n\t\t\tpp_status.line_number,\n\t\t\tppp->ident,\n\t\t\tmep->nargs,\n\t\t\tnnl);\n\n\tcurdef_idx = 0;\n\n\tfor(mtp = ppp->subst.mtext; mtp; mtp = mtp->next)\n\t{\n\t\tif(!(mtp = add_expand_text(mtp, mep, &nnl)))\n\t\t\tbreak;\n\t}\n\n\tfor(n = 0; n < nnl; n++)\n\t\tadd_text(\"\\n\", 1);\n\n\t/* To make sure there is room and termination (see below) */\n\tadd_text(\" \\0\", 2);\n\n\t/* Strip trailing whitespace from expansion */\n\tfor(k = curdef_idx, cptr = &curdef_text[curdef_idx-1]; k > 0; k--, cptr--)\n\t{\n\t\tif(!isspace(*cptr & 0xff))\n\t\t\tbreak;\n\t}\n\n\t/*\n\t * We must add *one* whitespace to make sure that there\n\t * is a token-separation after the expansion.\n\t */\n\t*(++cptr) = ' ';\n\t*(++cptr) = '\\0';\n\tk++;\n\n\t/* Strip leading whitespace from expansion */\n\tfor(n = 0, cptr = curdef_text; n < k; n++, cptr++)\n\t{\n\t\tif(!isspace(*cptr & 0xff))\n\t\t\tbreak;\n\t}\n\n\tif(k - n > 0)\n\t{\n\t\tif(pp_flex_debug)\n\t\t\tfprintf(stderr, \"expand_text: '%s'\\n\", curdef_text + n);\n\t\tpush_buffer(ppp, NULL, NULL, 0);\n\t\t/*yy_scan_bytes(curdef_text + n, k - n);*/\n\t\tyy_scan_string(curdef_text + n);\n\t}\n}\n\n/*\n *-------------------------------------------------------------------------\n * String collection routines\n *-------------------------------------------------------------------------\n */\nstatic void new_string(void)\n{\n#ifdef DEBUG\n\tif(strbuf_idx)\n\t\tppy_warning(\"new_string: strbuf_idx != 0\");\n#endif\n\tstrbuf_idx = 0;\n\tstr_startline = pp_status.line_number;\n}\n\nstatic void add_string(const char *str, int len)\n{\n\tint new_alloc;\n\tchar *new_buffer;\n\n\tif(len == 0)\n\t\treturn;\n\tif(strbuf_idx >= strbuf_alloc || strbuf_alloc - strbuf_idx < len)\n\t{\n\t\tnew_alloc = strbuf_alloc + ((len + ALLOCBLOCKSIZE-1) & ~(ALLOCBLOCKSIZE-1));\n\t\tnew_buffer = pp_xrealloc(strbuffer, new_alloc * sizeof(strbuffer[0]));\n\t\tif(!new_buffer)\n\t\t\treturn;\n\t\tstrbuffer = new_buffer;\n\t\tstrbuf_alloc = new_alloc;\n\t\tif(strbuf_alloc > 65536)\n\t\t\tppy_warning(\"Reallocating string buffer larger than 64kB\");\n\t}\n\tmemcpy(&strbuffer[strbuf_idx], str, len);\n\tstrbuf_idx += len;\n}\n\nstatic char *get_string(void)\n{\n\tchar *str = pp_xmalloc(strbuf_idx + 1);\n\tif(!str)\n\t\treturn NULL;\n\tmemcpy(str, strbuffer, strbuf_idx);\n\tstr[strbuf_idx] = '\\0';\n#ifdef DEBUG\n\tstrbuf_idx = 0;\n#endif\n\treturn str;\n}\n\nstatic void put_string(void)\n{\n\tput_buffer(strbuffer, strbuf_idx);\n#ifdef DEBUG\n\tstrbuf_idx = 0;\n#endif\n}\n\nstatic int string_start(void)\n{\n\treturn str_startline;\n}\n\n\n/*\n *-------------------------------------------------------------------------\n * Buffer management\n *-------------------------------------------------------------------------\n */\nstatic void push_buffer(pp_entry_t *ppp, char *filename, char *incname, int pop)\n{\n\tif(ppy_debug)\n\t\tprintf(\"push_buffer(%d): %p %p %p %d\\n\", bufferstackidx, ppp, filename, incname, pop);\n\tif(bufferstackidx >= MAXBUFFERSTACK)\n\t\tpp_internal_error(__FILE__, __LINE__, \"Buffer stack overflow\");\n\n\tmemset(&bufferstack[bufferstackidx], 0, sizeof(bufferstack[0]));\n\tbufferstack[bufferstackidx].bufferstate\t= YY_CURRENT_BUFFER;\n\tbufferstack[bufferstackidx].filehandle  = pp_status.file;\n\tbufferstack[bufferstackidx].define\t= ppp;\n\tbufferstack[bufferstackidx].line_number\t= pp_status.line_number;\n\tbufferstack[bufferstackidx].char_number\t= pp_status.char_number;\n\tbufferstack[bufferstackidx].if_depth\t= pp_get_if_depth();\n\tbufferstack[bufferstackidx].should_pop\t= pop;\n\tbufferstack[bufferstackidx].filename\t= pp_status.input;\n\tbufferstack[bufferstackidx].ncontinuations\t= ncontinuations;\n\tbufferstack[bufferstackidx].incl\t\t= pp_incl_state;\n\tbufferstack[bufferstackidx].include_filename\t= incname;\n\n\tif(ppp)\n\t\tppp->expanding = 1;\n\telse if(filename)\n\t{\n\t\t/* These will track the ppy_error to the correct file and line */\n\t\tpp_status.line_number = 1;\n\t\tpp_status.char_number = 1;\n\t\tpp_status.input  = filename;\n\t\tncontinuations = 0;\n\t}\n\telse if(!pop)\n\t\tpp_internal_error(__FILE__, __LINE__, \"Pushing buffer without knowing where to go to\");\n\tbufferstackidx++;\n}\n\nstatic bufferstackentry_t *pop_buffer(void)\n{\n\tif(bufferstackidx < 0)\n\t\tpp_internal_error(__FILE__, __LINE__, \"Bufferstack underflow?\");\n\n\tif(bufferstackidx == 0)\n\t\treturn NULL;\n\n\tbufferstackidx--;\n\n\tif(bufferstack[bufferstackidx].define)\n\t\tbufferstack[bufferstackidx].define->expanding = 0;\n\telse\n\t{\n\t\tincludelogicentry_t *iep = NULL;\n\n\t\tif(!bufferstack[bufferstackidx].should_pop)\n\t\t{\n\t\t\twpp_callbacks->close(pp_status.file);\n\t\t\tpp_writestring(\"# %d \\\"%s\\\" 2\\n\", bufferstack[bufferstackidx].line_number, bufferstack[bufferstackidx].filename);\n\n\t\t\t/* We have EOF, check the include logic */\n\t\t\tif(pp_incl_state.state == 2 && !pp_incl_state.seen_junk && pp_incl_state.ppp)\n\t\t\t{\n\t\t\t\tpp_entry_t *ppp = pplookup(pp_incl_state.ppp);\n\t\t\t\tif(ppp)\n\t\t\t\t{\n\t\t\t\t\tiep = pp_xmalloc(sizeof(includelogicentry_t));\n\t\t\t\t\tif (iep)\n\t\t\t\t\t{\n\t\t\t\t\t\tiep->ppp = ppp;\n\t\t\t\t\t\tppp->iep = iep;\n\t\t\t\t\t\tiep->filename = bufferstack[bufferstackidx].include_filename;\n\t\t\t\t\t\tiep->prev = NULL;\n\t\t\t\t\t\tiep->next = pp_includelogiclist;\n\t\t\t\t\t\tif(iep->next)\n\t\t\t\t\t\t\tiep->next->prev = iep;\n\t\t\t\t\t\tpp_includelogiclist = iep;\n\t\t\t\t\t\tif(pp_status.debug)\n\t\t\t\t\t\t\tfprintf(stderr, \"pop_buffer: %s:%d: includelogic added, include_ppp='%s', file='%s'\\n\",\n                                                                bufferstack[bufferstackidx].filename, bufferstack[bufferstackidx].line_number, pp_incl_state.ppp, iep->filename);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfree(pp_incl_state.ppp);\n\t\t\tpp_incl_state\t= bufferstack[bufferstackidx].incl;\n\n\t\t}\n\t\tif (bufferstack[bufferstackidx].include_filename)\n\t\t{\n\t\t\tfree(pp_status.input);\n\t\t\tpp_status.input = bufferstack[bufferstackidx].filename;\n\t\t}\n\t\tpp_status.line_number = bufferstack[bufferstackidx].line_number;\n\t\tpp_status.char_number = bufferstack[bufferstackidx].char_number;\n\t\tncontinuations = bufferstack[bufferstackidx].ncontinuations;\n\t\tif (!iep)\n\t\t\tfree(bufferstack[bufferstackidx].include_filename);\n\t}\n\n\tif(ppy_debug)\n\t\tprintf(\"pop_buffer(%d): %p %p (%d, %d, %d) %p %d\\n\",\n\t\t\tbufferstackidx,\n\t\t\tbufferstack[bufferstackidx].bufferstate,\n\t\t\tbufferstack[bufferstackidx].define,\n\t\t\tbufferstack[bufferstackidx].line_number,\n\t\t\tbufferstack[bufferstackidx].char_number,\n\t\t\tbufferstack[bufferstackidx].if_depth,\n\t\t\tbufferstack[bufferstackidx].filename,\n\t\t\tbufferstack[bufferstackidx].should_pop);\n\n\tpp_status.file = bufferstack[bufferstackidx].filehandle;\n\tppy__switch_to_buffer(bufferstack[bufferstackidx].bufferstate);\n\n\tif(bufferstack[bufferstackidx].should_pop)\n\t{\n\t\tif(yy_current_state() == pp_macexp)\n\t\t\tmacro_add_expansion();\n\t\telse\n\t\t\tpp_internal_error(__FILE__, __LINE__, \"Pop buffer and state without macro expansion state\");\n\t\tyy_pop_state();\n\t}\n\n\treturn &bufferstack[bufferstackidx];\n}\n\n\n/*\n *-------------------------------------------------------------------------\n * Macro nestng support\n *-------------------------------------------------------------------------\n */\nstatic void push_macro(pp_entry_t *ppp)\n{\n\tif(macexpstackidx >= MAXMACEXPSTACK)\n\t{\n\t\tppy_error(\"Too many nested macros\");\n\t\treturn;\n\t}\n\n\tmacexpstack[macexpstackidx] = pp_xmalloc(sizeof(macexpstack[0][0]));\n\tif(!macexpstack[macexpstackidx])\n\t\treturn;\n        memset( macexpstack[macexpstackidx], 0, sizeof(macexpstack[0][0]));\n\tmacexpstack[macexpstackidx]->ppp = ppp;\n\tmacexpstackidx++;\n}\n\nstatic macexpstackentry_t *top_macro(void)\n{\n\treturn macexpstackidx > 0 ? macexpstack[macexpstackidx-1] : NULL;\n}\n\nstatic macexpstackentry_t *pop_macro(void)\n{\n\tif(macexpstackidx <= 0)\n\t\tpp_internal_error(__FILE__, __LINE__, \"Macro expansion stack underflow\\n\");\n\treturn macexpstack[--macexpstackidx];\n}\n\nstatic void free_macro(macexpstackentry_t *mep)\n{\n\tint i;\n\n\tfor(i = 0; i < mep->nargs; i++)\n\t\tfree(mep->args[i]);\n\tfree(mep->args);\n\tfree(mep->nnls);\n\tfree(mep->curarg);\n\tfree(mep);\n}\n\nstatic void add_text_to_macro(const char *text, int len)\n{\n\tmacexpstackentry_t *mep = top_macro();\n\n\tassert(mep->ppp->expanding == 0);\n\n\tif(mep->curargalloc - mep->curargsize <= len+1)\t/* +1 for '\\0' */\n\t{\n\t\tchar *new_curarg;\n\t\tint new_alloc =\tmep->curargalloc + ((ALLOCBLOCKSIZE > len+1) ? ALLOCBLOCKSIZE : len+1);\n\t\tnew_curarg = pp_xrealloc(mep->curarg, new_alloc * sizeof(mep->curarg[0]));\n\t\tif(!new_curarg)\n\t\t\treturn;\n\t\tmep->curarg = new_curarg;\n\t\tmep->curargalloc = new_alloc;\n\t}\n\tmemcpy(mep->curarg + mep->curargsize, text, len);\n\tmep->curargsize += len;\n\tmep->curarg[mep->curargsize] = '\\0';\n}\n\nstatic void macro_add_arg(int last)\n{\n\tint nnl = 0;\n\tchar *cptr;\n\tchar **new_args, **new_ppargs;\n\tint *new_nnls;\n\tmacexpstackentry_t *mep = top_macro();\n\n\tassert(mep->ppp->expanding == 0);\n\n\tnew_args = pp_xrealloc(mep->args, (mep->nargs+1) * sizeof(mep->args[0]));\n\tif(!new_args)\n\t\treturn;\n\tmep->args = new_args;\n\n\tnew_ppargs = pp_xrealloc(mep->ppargs, (mep->nargs+1) * sizeof(mep->ppargs[0]));\n\tif(!new_ppargs)\n\t\treturn;\n\tmep->ppargs = new_ppargs;\n\n\tnew_nnls = pp_xrealloc(mep->nnls, (mep->nargs+1) * sizeof(mep->nnls[0]));\n\tif(!new_nnls)\n\t\treturn;\n\tmep->nnls = new_nnls;\n\n\tmep->args[mep->nargs] = pp_xstrdup(mep->curarg ? mep->curarg : \"\");\n\tif(!mep->args[mep->nargs])\n\t\treturn;\n\tcptr = mep->args[mep->nargs]-1;\n\twhile((cptr = strchr(cptr+1, '\\n')))\n\t{\n\t\tnnl++;\n\t}\n\tmep->nnls[mep->nargs] = nnl;\n\tmep->nargs++;\n\tfree(mep->curarg);\n\tmep->curargalloc = mep->curargsize = 0;\n\tmep->curarg = NULL;\n\n\tif(pp_flex_debug)\n\t\tfprintf(stderr, \"macro_add_arg: %s:%d: %d -> '%s'\\n\",\n\t\t\tpp_status.input,\n\t\t\tpp_status.line_number,\n\t\t\tmep->nargs-1,\n\t\t\tmep->args[mep->nargs-1]);\n\n\t/* Each macro argument must be expanded to cope with stingize */\n\tif(last || mep->args[mep->nargs-1][0])\n\t{\n\t\tyy_push_state(pp_macexp);\n\t\tpush_buffer(NULL, NULL, NULL, last ? 2 : 1);\n\t\tyy_scan_string(mep->args[mep->nargs-1]);\n\t\t/*mep->bufferstackidx = bufferstackidx;\t But not nested! */\n\t}\n}\n\nstatic void macro_add_expansion(void)\n{\n\tmacexpstackentry_t *mep = top_macro();\n\n\tassert(mep->ppp->expanding == 0);\n\n\tmep->ppargs[mep->nargs-1] = pp_xstrdup(mep->curarg ? mep->curarg : \"\");\n\tfree(mep->curarg);\n\tmep->curargalloc = mep->curargsize = 0;\n\tmep->curarg = NULL;\n\n\tif(pp_flex_debug)\n\t\tfprintf(stderr, \"macro_add_expansion: %s:%d: %d -> '%s'\\n\",\n\t\t\tpp_status.input,\n\t\t\tpp_status.line_number,\n\t\t\tmep->nargs-1,\n\t\t\tmep->ppargs[mep->nargs-1] ? mep->ppargs[mep->nargs-1] : \"\");\n}\n\n\n/*\n *-------------------------------------------------------------------------\n * Output management\n *-------------------------------------------------------------------------\n */\nstatic void put_buffer(const char *s, int len)\n{\n\tif(top_macro())\n\t\tadd_text_to_macro(s, len);\n\telse\n\t\twpp_callbacks->write(s, len);\n}\n\n\n/*\n *-------------------------------------------------------------------------\n * Include management\n *-------------------------------------------------------------------------\n */\nvoid pp_do_include(char *fname, int type)\n{\n\tchar *newpath;\n\tint n;\n\tincludelogicentry_t *iep;\n\tvoid *fp;\n\n\tif(!fname)\n\t\treturn;\n\n\tfor(iep = pp_includelogiclist; iep; iep = iep->next)\n\t{\n\t\tif(!strcmp(iep->filename, fname))\n\t\t{\n\t\t\t/*\n\t\t\t * We are done. The file was included before.\n\t\t\t * If the define was deleted, then this entry would have\n\t\t\t * been deleted too.\n\t\t\t */\n\t\t\tfree(fname);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tn = strlen(fname);\n\n\tif(n <= 2)\n\t{\n\t\tppy_error(\"Empty include filename\");\n\t\tfree(fname);\n\t\treturn;\n\t}\n\n\t/* Undo the effect of the quotation */\n\tfname[n-1] = '\\0';\n\n\tif((fp = pp_open_include(fname+1, type, pp_status.input, &newpath)) == NULL)\n\t{\n\t\tppy_error(\"Unable to open include file %s\", fname+1);\n\t\tfree(fname);\n\t\treturn;\n\t}\n\n\tfname[n-1] = *fname;\t/* Redo the quotes */\n\tpush_buffer(NULL, newpath, fname, 0);\n\tpp_incl_state.seen_junk = 0;\n\tpp_incl_state.state = 0;\n\tpp_incl_state.ppp = NULL;\n\n\tif(pp_status.debug)\n\t\tfprintf(stderr, \"pp_do_include: %s:%d: include_state=%d, include_ppp='%s', include_ifdepth=%d\\n\",\n                        pp_status.input, pp_status.line_number, pp_incl_state.state, pp_incl_state.ppp, pp_incl_state.ifdepth);\n\tpp_status.file = fp;\n\tppy__switch_to_buffer(ppy__create_buffer(NULL, YY_BUF_SIZE));\n\n\tpp_writestring(\"# 1 \\\"%s\\\" 1%s\\n\", newpath, type ? \"\" : \" 3\");\n}\n\n/*\n *-------------------------------------------------------------------------\n * Push/pop preprocessor ignore state when processing conditionals\n * which are false.\n *-------------------------------------------------------------------------\n */\nvoid pp_push_ignore_state(void)\n{\n\tyy_push_state(pp_ignore);\n}\n\nvoid pp_pop_ignore_state(void)\n{\n\tyy_pop_state();\n}\n"
  },
  {
    "path": "wpp/ppy.y",
    "content": "/*\n * Wrc preprocessor syntax analysis\n *\n * Copyright 1999-2000\tBertho A. Stultiens (BS)\n *\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n *\n * History:\n * 24-Apr-2000 BS\tRestructured the lot to fit the new scanner\n *\t\t\tand reintegrate into the wine-tree.\n * 01-Jan-2000 BS\tFIXME: win16 preprocessor calculates with\n *\t\t\t16 bit ints and overflows...?\n * 26-Dec-1999 BS\tStarted this file\n *\n */\n\n%{\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <stdarg.h>\n#include <assert.h>\n#include <ctype.h>\n#include <string.h>\n\n#include \"wpp_private.h\"\n\n\n#define UNARY_OP(r, v, OP)\t\t\t\t\t\\\n\tswitch(v.type)\t\t\t\t\t\t\\\n\t{\t\t\t\t\t\t\t\\\n\tcase cv_sint:\tr.val.si  = OP v.val.si; break;\t\t\\\n\tcase cv_uint:\tr.val.ui  = OP v.val.ui; break;\t\t\\\n\tcase cv_slong:\tr.val.sl  = OP v.val.sl; break;\t\t\\\n\tcase cv_ulong:\tr.val.ul  = OP v.val.ul; break;\t\t\\\n\tcase cv_sll:\tr.val.sll = OP v.val.sll; break;\t\\\n\tcase cv_ull:\tr.val.ull = OP v.val.ull; break;\t\\\n\t}\n\n#define cv_signed(v)\t((v.type & FLAG_SIGNED) != 0)\n\n#define BIN_OP_INT(r, v1, v2, OP)\t\t\t\\\n\tr.type = v1.type;\t\t\t\t\\\n\tif(cv_signed(v1) && cv_signed(v2))\t\t\\\n\t\tr.val.si = v1.val.si OP v2.val.si;\t\\\n\telse if(cv_signed(v1) && !cv_signed(v2))\t\\\n\t\tr.val.si = v1.val.si OP (signed) v2.val.ui; \\\n\telse if(!cv_signed(v1) && cv_signed(v2))\t\\\n\t\tr.val.si = (signed) v1.val.ui OP v2.val.si; \\\n\telse\t\t\t\t\t\t\\\n\t\tr.val.ui = v1.val.ui OP v2.val.ui;\n\n#define BIN_OP_LONG(r, v1, v2, OP)\t\t\t\\\n\tr.type = v1.type;\t\t\t\t\\\n\tif(cv_signed(v1) && cv_signed(v2))\t\t\\\n\t\tr.val.sl = v1.val.sl OP v2.val.sl;\t\\\n\telse if(cv_signed(v1) && !cv_signed(v2))\t\\\n\t\tr.val.sl = v1.val.sl OP (signed long) v2.val.ul; \\\n\telse if(!cv_signed(v1) && cv_signed(v2))\t\\\n\t\tr.val.sl = (signed long) v1.val.ul OP v2.val.sl; \\\n\telse\t\t\t\t\t\t\\\n\t\tr.val.ul = v1.val.ul OP v2.val.ul;\n\n#define BIN_OP_LONGLONG(r, v1, v2, OP)\t\t\t\\\n\tr.type = v1.type;\t\t\t\t\\\n\tif(cv_signed(v1) && cv_signed(v2))\t\t\\\n\t\tr.val.sll = v1.val.sll OP v2.val.sll;\t\\\n\telse if(cv_signed(v1) && !cv_signed(v2))\t\\\n\t\tr.val.sll = v1.val.sll OP (wrc_sll_t) v2.val.ull; \\\n\telse if(!cv_signed(v1) && cv_signed(v2))\t\\\n\t\tr.val.sll = (wrc_sll_t) v1.val.ull OP v2.val.sll; \\\n\telse\t\t\t\t\t\t\\\n\t\tr.val.ull = v1.val.ull OP v2.val.ull;\n\n#define BIN_OP(r, v1, v2, OP)\t\t\t\t\t\t\\\n\tswitch(v1.type & SIZE_MASK)\t\t\t\t\t\\\n\t{\t\t\t\t\t\t\t\t\\\n\tcase SIZE_INT:\t\tBIN_OP_INT(r, v1, v2, OP); break;\t\\\n\tcase SIZE_LONG:\t\tBIN_OP_LONG(r, v1, v2, OP); break;\t\\\n\tcase SIZE_LONGLONG:\tBIN_OP_LONGLONG(r, v1, v2, OP); break;\t\\\n\tdefault: pp_internal_error(__FILE__, __LINE__, \"Invalid type indicator (0x%04x)\", v1.type);\t\\\n\t}\n\n\n/*\n * Prototypes\n */\nstatic int boolean(cval_t *v);\nstatic void promote_equal_size(cval_t *v1, cval_t *v2);\nstatic void cast_to_sint(cval_t *v);\nstatic void cast_to_uint(cval_t *v);\nstatic void cast_to_slong(cval_t *v);\nstatic void cast_to_ulong(cval_t *v);\nstatic void cast_to_sll(cval_t *v);\nstatic void cast_to_ull(cval_t *v);\nstatic marg_t *new_marg(char *str, def_arg_t type);\nstatic marg_t *add_new_marg(char *str, def_arg_t type);\nstatic int marg_index(char *id);\nstatic mtext_t *new_mtext(char *str, int idx, def_exp_t type);\nstatic mtext_t *combine_mtext(mtext_t *tail, mtext_t *mtp);\nstatic char *merge_text(char *s1, char *s2);\n\n/*\n * Local variables\n */\nstatic marg_t **macro_args;\t/* Macro parameters array while parsing */\nstatic int\tnmacro_args;\n\n%}\n\n%union{\n\tint\t\tsint;\n\tunsigned int\tuint;\n\tlong\t\tslong;\n\tunsigned long\tulong;\n\twrc_sll_t\tsll;\n\twrc_ull_t\tull;\n\tint\t\t*iptr;\n\tchar\t\t*cptr;\n\tcval_t\t\tcval;\n\tmarg_t\t\t*marg;\n\tmtext_t\t\t*mtext;\n}\n\n%token tRCINCLUDE\n%token tIF tIFDEF tIFNDEF tELSE tELIF tENDIF tDEFINED tNL\n%token tINCLUDE tLINE tGCCLINE tERROR tWARNING tPRAGMA tPPIDENT\n%token tUNDEF tMACROEND tCONCAT tELIPSIS tSTRINGIZE\n%token <cptr> tIDENT tLITERAL tMACRO tDEFINE\n%token <cptr> tDQSTRING tSQSTRING tIQSTRING\n%token <uint> tUINT\n%token <sint> tSINT\n%token <ulong> tULONG\n%token <slong> tSLONG\n%token <ull> tULONGLONG\n%token <sll> tSLONGLONG\n%token <cptr> tRCINCLUDEPATH\n\n%right '?' ':'\n%left tLOGOR\n%left tLOGAND\n%left '|'\n%left '^'\n%left '&'\n%left tEQ tNE\n%left '<' tLTE '>' tGTE\n%left tLSHIFT tRSHIFT\n%left '+' '-'\n%left '*' '/'\n%right '~' '!'\n\n%type <cval>\tpp_expr\n%type <marg>\temargs margs\n%type <mtext>\topt_mtexts mtexts mtext\n%type <sint>\tallmargs\n%type <cptr>\topt_text text\n\n/*\n **************************************************************************\n * The parser starts here\n **************************************************************************\n */\n\n%%\n\npp_file\t: /* Empty */\n\t| pp_file preprocessor\n\t;\n\npreprocessor\n\t: tINCLUDE tDQSTRING tNL\t{ pp_do_include($2, 1); }\n\t| tINCLUDE tIQSTRING tNL\t{ pp_do_include($2, 0); }\n\t| tIF pp_expr tNL\t{ pp_next_if_state(boolean(&$2)); }\n\t| tIFDEF tIDENT tNL\t{ pp_next_if_state(pplookup($2) != NULL); free($2); }\n\t| tIFNDEF tIDENT tNL\t{\n\t\tint t = pplookup($2) == NULL;\n\t\tif(pp_incl_state.state == 0 && t && !pp_incl_state.seen_junk)\n\t\t{\n\t\t\tpp_incl_state.state\t= 1;\n\t\t\tpp_incl_state.ppp\t= $2;\n\t\t\tpp_incl_state.ifdepth\t= pp_get_if_depth();\n\t\t}\n\t\telse if(pp_incl_state.state != 1)\n\t\t{\n\t\t\tpp_incl_state.state = -1;\n\t\t\tfree($2);\n\t\t}\n\t\telse\n\t\t\tfree($2);\n\t\tpp_next_if_state(t);\n\t\tif(pp_status.debug)\n\t\t\tfprintf(stderr, \"tIFNDEF: %s:%d: include_state=%d, include_ppp='%s', include_ifdepth=%d\\n\",\n                                pp_status.input, pp_status.line_number, pp_incl_state.state, pp_incl_state.ppp, pp_incl_state.ifdepth);\n\t\t}\n\t| tELIF pp_expr tNL\t{\n\t\tpp_if_state_t s = pp_pop_if();\n\t\tswitch(s)\n\t\t{\n\t\tcase if_true:\n\t\tcase if_elif:\n\t\t\tpp_push_if(if_elif);\n\t\t\tbreak;\n\t\tcase if_false:\n\t\t\tpp_push_if(boolean(&$2) ? if_true : if_false);\n\t\t\tbreak;\n\t\tcase if_ignore:\n\t\t\tpp_push_if(if_ignore);\n\t\t\tbreak;\n\t\tcase if_elsetrue:\n\t\tcase if_elsefalse:\n\t\t\tppy_error(\"#elif cannot follow #else\");\n\t\t\tbreak;\n\t\tcase if_error:\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tpp_internal_error(__FILE__, __LINE__, \"Invalid pp_if_state (%d) in #elif directive\", s);\n\t\t}\n\t\t}\n\t| tELSE tNL\t\t{\n\t\tpp_if_state_t s = pp_pop_if();\n\t\tswitch(s)\n\t\t{\n\t\tcase if_true:\n\t\t\tpp_push_if(if_elsefalse);\n\t\t\tbreak;\n\t\tcase if_elif:\n\t\t\tpp_push_if(if_elif);\n\t\t\tbreak;\n\t\tcase if_false:\n\t\t\tpp_push_if(if_elsetrue);\n\t\t\tbreak;\n\t\tcase if_ignore:\n\t\t\tpp_push_if(if_ignore);\n\t\t\tbreak;\n\t\tcase if_elsetrue:\n\t\tcase if_elsefalse:\n\t\t\tppy_error(\"#else clause already defined\");\n\t\t\tbreak;\n\t\tcase if_error:\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tpp_internal_error(__FILE__, __LINE__, \"Invalid pp_if_state (%d) in #else directive\", s);\n\t\t}\n\t\t}\n\t| tENDIF tNL\t\t{\n\t\tif(pp_pop_if() != if_error)\n\t\t{\n\t\t\tif(pp_incl_state.ifdepth == pp_get_if_depth() && pp_incl_state.state == 1)\n\t\t\t{\n\t\t\t\tpp_incl_state.state = 2;\n\t\t\t\tpp_incl_state.seen_junk = 0;\n\t\t\t}\n\t\t\telse if(pp_incl_state.state != 1)\n\t\t\t{\n\t\t\t\tpp_incl_state.state = -1;\n\t\t\t}\n\t\t\tif(pp_status.debug)\n\t\t\t\tfprintf(stderr, \"tENDIF: %s:%d: include_state=%d, include_ppp='%s', include_ifdepth=%d\\n\",\n\t\t\t\t\tpp_status.input, pp_status.line_number, pp_incl_state.state, pp_incl_state.ppp, pp_incl_state.ifdepth);\n\t\t}\n\t\t}\n\t| tUNDEF tIDENT tNL\t{ pp_del_define($2); free($2); }\n\t| tDEFINE opt_text tNL\t{ pp_add_define($1, $2); free($1); free($2); }\n\t| tMACRO res_arg allmargs tMACROEND opt_mtexts tNL\t{\n\t\tpp_add_macro($1, macro_args, nmacro_args, $5);\n\t\t}\n\t| tLINE tSINT tDQSTRING\ttNL\t{ if($3) pp_writestring(\"# %d %s\\n\", $2 , $3); free($3); }\n\t| tGCCLINE tSINT tDQSTRING tNL\t{ if($3) pp_writestring(\"# %d %s\\n\", $2 , $3); free($3); }\n\t| tGCCLINE tSINT tDQSTRING tSINT tNL\n\t\t{ if($3) pp_writestring(\"# %d %s %d\\n\", $2, $3, $4); free($3); }\n\t| tGCCLINE tSINT tDQSTRING tSINT tSINT tNL\n\t\t{ if($3) pp_writestring(\"# %d %s %d %d\\n\", $2 ,$3, $4, $5); free($3); }\n\t| tGCCLINE tSINT tDQSTRING tSINT tSINT tSINT  tNL\n\t\t{ if($3) pp_writestring(\"# %d %s %d %d %d\\n\", $2 ,$3 ,$4 ,$5, $6); free($3); }\n\t| tGCCLINE tSINT tDQSTRING tSINT tSINT tSINT tSINT tNL\n\t\t{ if($3) pp_writestring(\"# %d %s %d %d %d %d\\n\", $2 ,$3 ,$4 ,$5, $6, $7); free($3); }\n\t| tGCCLINE tNL\t\t/* The null-token */\n\t| tERROR opt_text tNL\t{ ppy_error(\"#error directive: '%s'\", $2); free($2); }\n\t| tWARNING opt_text tNL\t{ ppy_warning(\"#warning directive: '%s'\", $2); free($2); }\n\t| tPRAGMA opt_text tNL\t{ pp_writestring(\"#pragma %s\\n\", $2 ? $2 : \"\"); free($2); }\n\t| tPPIDENT opt_text tNL\t{ if(pp_status.pedantic) ppy_warning(\"#ident ignored (arg: '%s')\", $2); free($2); }\n        | tRCINCLUDE tRCINCLUDEPATH {\n                if($2)\n                {\n                        int nl=strlen($2) +3;\n                        char *fn=pp_xmalloc(nl);\n                        if(fn)\n                        {\n                                sprintf(fn,\"\\\"%s\\\"\",$2);\n                                pp_do_include(fn,1);\n                        }\n                        free($2);\n                }\n\t}\n\t| tRCINCLUDE tDQSTRING {\n\t\tpp_do_include($2,1);\n\t}\n\t/*| tNL*/\n\t;\n\nopt_text: /* Empty */\t{ $$ = NULL; }\n\t| text\t\t{ $$ = $1; }\n\t;\n\ntext\t: tLITERAL\t\t{ $$ = $1; }\n\t| tDQSTRING\t\t{ $$ = $1; }\n\t| tSQSTRING\t\t{ $$ = $1; }\n\t| text tLITERAL\t\t{ $$ = merge_text($1, $2); }\n\t| text tDQSTRING\t{ $$ = merge_text($1, $2); }\n\t| text tSQSTRING\t{ $$ = merge_text($1, $2); }\n\t;\n\nres_arg\t: /* Empty */\t{ macro_args = NULL; nmacro_args = 0; }\n\t;\n\nallmargs: /* Empty */\t\t{ $$ = 0; macro_args = NULL; nmacro_args = 0; }\n\t| emargs\t\t{ $$ = nmacro_args; }\n\t;\n\nemargs\t: margs\t\t\t{ $$ = $1; }\n\t| margs ',' tELIPSIS\t{ $$ = add_new_marg(NULL, arg_list); nmacro_args *= -1; }\n\t;\n\nmargs\t: margs ',' tIDENT\t{ $$ = add_new_marg($3, arg_single); }\n\t| tIDENT\t\t{ $$ = add_new_marg($1, arg_single); }\n\t;\n\nopt_mtexts\n\t: /* Empty */\t{ $$ = NULL; }\n\t| mtexts\t{\n\t\tfor($$ = $1; $$ && $$->prev; $$ = $$->prev)\n\t\t\t;\n\t\t}\n\t;\n\nmtexts\t: mtext\t\t{ $$ = $1; }\n\t| mtexts mtext\t{ $$ = combine_mtext($1, $2); }\n\t;\n\nmtext\t: tLITERAL\t{ $$ = new_mtext($1, 0, exp_text); }\n\t| tDQSTRING\t{ $$ = new_mtext($1, 0, exp_text); }\n\t| tSQSTRING\t{ $$ = new_mtext($1, 0, exp_text); }\n\t| tCONCAT\t{ $$ = new_mtext(NULL, 0, exp_concat); }\n\t| tSTRINGIZE tIDENT\t{\n\t\tint mat = marg_index($2);\n\t\tif(mat < 0)\n\t\t\tppy_error(\"Stringification identifier must be an argument parameter\");\n\t\telse\n\t\t\t$$ = new_mtext(NULL, mat, exp_stringize);\n\t\t}\n\t| tIDENT\t{\n\t\tint mat = marg_index($1);\n\t\tif(mat >= 0)\n\t\t\t$$ = new_mtext(NULL, mat, exp_subst);\n\t\telse if($1)\n\t\t\t$$ = new_mtext($1, 0, exp_text);\n\t\t}\n\t;\n\npp_expr\t: tSINT\t\t\t\t{ $$.type = cv_sint;  $$.val.si = $1; }\n\t| tUINT\t\t\t\t{ $$.type = cv_uint;  $$.val.ui = $1; }\n\t| tSLONG\t\t\t{ $$.type = cv_slong; $$.val.sl = $1; }\n\t| tULONG\t\t\t{ $$.type = cv_ulong; $$.val.ul = $1; }\n\t| tSLONGLONG\t\t\t{ $$.type = cv_sll;   $$.val.sll = $1; }\n\t| tULONGLONG\t\t\t{ $$.type = cv_ull;   $$.val.ull = $1; }\n\t| tDEFINED tIDENT\t\t{ $$.type = cv_sint;  $$.val.si = pplookup($2) != NULL; }\n\t| tDEFINED '(' tIDENT ')'\t{ $$.type = cv_sint;  $$.val.si = pplookup($3) != NULL; }\n\t| tIDENT\t\t\t{ $$.type = cv_sint;  $$.val.si = 0; }\n\t| pp_expr tLOGOR pp_expr\t{ $$.type = cv_sint; $$.val.si = boolean(&$1) || boolean(&$3); }\n\t| pp_expr tLOGAND pp_expr\t{ $$.type = cv_sint; $$.val.si = boolean(&$1) && boolean(&$3); }\n\t| pp_expr tEQ pp_expr\t\t{ promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, ==); }\n\t| pp_expr tNE pp_expr\t\t{ promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, !=); }\n\t| pp_expr '<' pp_expr\t\t{ promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3,  <); }\n\t| pp_expr '>' pp_expr\t\t{ promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3,  >); }\n\t| pp_expr tLTE pp_expr\t\t{ promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, <=); }\n\t| pp_expr tGTE pp_expr\t\t{ promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, >=); }\n\t| pp_expr '+' pp_expr\t\t{ promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3,  +); }\n\t| pp_expr '-' pp_expr\t\t{ promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3,  -); }\n\t| pp_expr '^' pp_expr\t\t{ promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3,  ^); }\n\t| pp_expr '&' pp_expr\t\t{ promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3,  &); }\n\t| pp_expr '|' pp_expr\t\t{ promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3,  |); }\n\t| pp_expr '*' pp_expr\t\t{ promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3,  *); }\n\t| pp_expr '/' pp_expr\t\t{ promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3,  /); }\n\t| pp_expr tLSHIFT pp_expr\t{ promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, <<); }\n\t| pp_expr tRSHIFT pp_expr\t{ promote_equal_size(&$1, &$3); BIN_OP($$, $1, $3, >>); }\n\t| '+' pp_expr\t\t\t{ $$ =  $2; }\n\t| '-' pp_expr\t\t\t{ UNARY_OP($$, $2, -); }\n\t| '~' pp_expr\t\t\t{ UNARY_OP($$, $2, ~); }\n\t| '!' pp_expr\t\t\t{ $$.type = cv_sint; $$.val.si = !boolean(&$2); }\n\t| '(' pp_expr ')'\t\t{ $$ =  $2; }\n\t| pp_expr '?' pp_expr ':' pp_expr { $$ = boolean(&$1) ? $3 : $5; }\n\t;\n\n%%\n\n/*\n **************************************************************************\n * Support functions\n **************************************************************************\n */\n\nstatic void cast_to_sint(cval_t *v)\n{\n\tswitch(v->type)\n\t{\n\tcase cv_sint:\tbreak;\n\tcase cv_uint:\tbreak;\n\tcase cv_slong:\tv->val.si = v->val.sl;\tbreak;\n\tcase cv_ulong:\tv->val.si = v->val.ul;\tbreak;\n\tcase cv_sll:\tv->val.si = v->val.sll;\tbreak;\n\tcase cv_ull:\tv->val.si = v->val.ull;\tbreak;\n\t}\n\tv->type = cv_sint;\n}\n\nstatic void cast_to_uint(cval_t *v)\n{\n\tswitch(v->type)\n\t{\n\tcase cv_sint:\tbreak;\n\tcase cv_uint:\tbreak;\n\tcase cv_slong:\tv->val.ui = v->val.sl;\tbreak;\n\tcase cv_ulong:\tv->val.ui = v->val.ul;\tbreak;\n\tcase cv_sll:\tv->val.ui = v->val.sll;\tbreak;\n\tcase cv_ull:\tv->val.ui = v->val.ull;\tbreak;\n\t}\n\tv->type = cv_uint;\n}\n\nstatic void cast_to_slong(cval_t *v)\n{\n\tswitch(v->type)\n\t{\n\tcase cv_sint:\tv->val.sl = v->val.si;\tbreak;\n\tcase cv_uint:\tv->val.sl = v->val.ui;\tbreak;\n\tcase cv_slong:\tbreak;\n\tcase cv_ulong:\tbreak;\n\tcase cv_sll:\tv->val.sl = v->val.sll;\tbreak;\n\tcase cv_ull:\tv->val.sl = v->val.ull;\tbreak;\n\t}\n\tv->type = cv_slong;\n}\n\nstatic void cast_to_ulong(cval_t *v)\n{\n\tswitch(v->type)\n\t{\n\tcase cv_sint:\tv->val.ul = v->val.si;\tbreak;\n\tcase cv_uint:\tv->val.ul = v->val.ui;\tbreak;\n\tcase cv_slong:\tbreak;\n\tcase cv_ulong:\tbreak;\n\tcase cv_sll:\tv->val.ul = v->val.sll;\tbreak;\n\tcase cv_ull:\tv->val.ul = v->val.ull;\tbreak;\n\t}\n\tv->type = cv_ulong;\n}\n\nstatic void cast_to_sll(cval_t *v)\n{\n\tswitch(v->type)\n\t{\n\tcase cv_sint:\tv->val.sll = v->val.si;\tbreak;\n\tcase cv_uint:\tv->val.sll = v->val.ui;\tbreak;\n\tcase cv_slong:\tv->val.sll = v->val.sl;\tbreak;\n\tcase cv_ulong:\tv->val.sll = v->val.ul;\tbreak;\n\tcase cv_sll:\tbreak;\n\tcase cv_ull:\tbreak;\n\t}\n\tv->type = cv_sll;\n}\n\nstatic void cast_to_ull(cval_t *v)\n{\n\tswitch(v->type)\n\t{\n\tcase cv_sint:\tv->val.ull = v->val.si;\tbreak;\n\tcase cv_uint:\tv->val.ull = v->val.ui;\tbreak;\n\tcase cv_slong:\tv->val.ull = v->val.sl;\tbreak;\n\tcase cv_ulong:\tv->val.ull = v->val.ul;\tbreak;\n\tcase cv_sll:\tbreak;\n\tcase cv_ull:\tbreak;\n\t}\n\tv->type = cv_ull;\n}\n\n\nstatic void promote_equal_size(cval_t *v1, cval_t *v2)\n{\n#define cv_sizeof(v)\t((int)(v->type & SIZE_MASK))\n\tint s1 = cv_sizeof(v1);\n\tint s2 = cv_sizeof(v2);\n#undef cv_sizeof\n\n\tif(s1 == s2)\n\t\treturn;\n\telse if(s1 > s2)\n\t{\n\t\tswitch(v1->type)\n\t\t{\n\t\tcase cv_sint:\tcast_to_sint(v2); break;\n\t\tcase cv_uint:\tcast_to_uint(v2); break;\n\t\tcase cv_slong:\tcast_to_slong(v2); break;\n\t\tcase cv_ulong:\tcast_to_ulong(v2); break;\n\t\tcase cv_sll:\tcast_to_sll(v2); break;\n\t\tcase cv_ull:\tcast_to_ull(v2); break;\n\t\t}\n\t}\n\telse\n\t{\n\t\tswitch(v2->type)\n\t\t{\n\t\tcase cv_sint:\tcast_to_sint(v1); break;\n\t\tcase cv_uint:\tcast_to_uint(v1); break;\n\t\tcase cv_slong:\tcast_to_slong(v1); break;\n\t\tcase cv_ulong:\tcast_to_ulong(v1); break;\n\t\tcase cv_sll:\tcast_to_sll(v1); break;\n\t\tcase cv_ull:\tcast_to_ull(v1); break;\n\t\t}\n\t}\n}\n\n\nstatic int boolean(cval_t *v)\n{\n\tswitch(v->type)\n\t{\n\tcase cv_sint:\treturn v->val.si != (int)0;\n\tcase cv_uint:\treturn v->val.ui != (unsigned int)0;\n\tcase cv_slong:\treturn v->val.sl != (long)0;\n\tcase cv_ulong:\treturn v->val.ul != (unsigned long)0;\n\tcase cv_sll:\treturn v->val.sll != (wrc_sll_t)0;\n\tcase cv_ull:\treturn v->val.ull != (wrc_ull_t)0;\n\t}\n\treturn 0;\n}\n\nstatic marg_t *new_marg(char *str, def_arg_t type)\n{\n\tmarg_t *ma = pp_xmalloc(sizeof(marg_t));\n\tif(!ma)\n\t\treturn NULL;\n\tma->arg = str;\n\tma->type = type;\n\tma->nnl = 0;\n\treturn ma;\n}\n\nstatic marg_t *add_new_marg(char *str, def_arg_t type)\n{\n\tmarg_t **new_macro_args;\n\tmarg_t *ma;\n\tif(!str)\n\t\treturn NULL;\n\tnew_macro_args = pp_xrealloc(macro_args, (nmacro_args+1) * sizeof(macro_args[0]));\n\tif(!new_macro_args)\n\t\treturn NULL;\n\tmacro_args = new_macro_args;\n\tma = new_marg(str, type);\n\tif(!ma)\n\t\treturn NULL;\n\tmacro_args[nmacro_args] = ma;\n\tnmacro_args++;\n\treturn ma;\n}\n\nstatic int marg_index(char *id)\n{\n\tint t;\n\tif(!id)\n\t\treturn -1;\n\tfor(t = 0; t < nmacro_args; t++)\n\t{\n\t\tif(!strcmp(id, macro_args[t]->arg))\n\t\t\tbreak;\n\t}\n\treturn t < nmacro_args ? t : -1;\n}\n\nstatic mtext_t *new_mtext(char *str, int idx, def_exp_t type)\n{\n\tmtext_t *mt = pp_xmalloc(sizeof(mtext_t));\n\tif(!mt)\n\t\treturn NULL;\n\tif(str == NULL)\n\t\tmt->subst.argidx = idx;\n\telse\n\t\tmt->subst.text = str;\n\tmt->type = type;\n\tmt->next = mt->prev = NULL;\n\treturn mt;\n}\n\nstatic mtext_t *combine_mtext(mtext_t *tail, mtext_t *mtp)\n{\n\tif(!tail)\n\t\treturn mtp;\n\n\tif(!mtp)\n\t\treturn tail;\n\n\tif(tail->type == exp_text && mtp->type == exp_text)\n\t{\n\t\tchar *new_text;\n\t\tnew_text = pp_xrealloc(tail->subst.text, strlen(tail->subst.text)+strlen(mtp->subst.text)+1);\n\t\tif(!new_text)\n\t\t\treturn mtp;\n\t\ttail->subst.text = new_text;\n\t\tstrcat(tail->subst.text, mtp->subst.text);\n\t\tfree(mtp->subst.text);\n\t\tfree(mtp);\n\t\treturn tail;\n\t}\n\n\tif(tail->type == exp_concat && mtp->type == exp_concat)\n\t{\n\t\tfree(mtp);\n\t\treturn tail;\n\t}\n\n\tif(tail->type == exp_concat && mtp->type == exp_text)\n\t{\n\t\tint len = strlen(mtp->subst.text);\n\t\twhile(len)\n\t\t{\n/* FIXME: should delete space from head of string */\n\t\t\tif(isspace(mtp->subst.text[len-1] & 0xff))\n\t\t\t\tmtp->subst.text[--len] = '\\0';\n\t\t\telse\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(!len)\n\t\t{\n\t\t\tfree(mtp->subst.text);\n\t\t\tfree(mtp);\n\t\t\treturn tail;\n\t\t}\n\t}\n\n\tif(tail->type == exp_text && mtp->type == exp_concat)\n\t{\n\t\tint len = strlen(tail->subst.text);\n\t\twhile(len)\n\t\t{\n\t\t\tif(isspace(tail->subst.text[len-1] & 0xff))\n\t\t\t\ttail->subst.text[--len] = '\\0';\n\t\t\telse\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(!len)\n\t\t{\n\t\t\tmtp->prev = tail->prev;\n\t\t\tmtp->next = tail->next;\n\t\t\tif(tail->prev)\n\t\t\t\ttail->prev->next = mtp;\n\t\t\tfree(tail->subst.text);\n\t\t\tfree(tail);\n\t\t\treturn mtp;\n\t\t}\n\t}\n\n\ttail->next = mtp;\n\tmtp->prev = tail;\n\n\treturn mtp;\n}\n\nstatic char *merge_text(char *s1, char *s2)\n{\n\tint l1;\n\tint l2;\n\tchar *snew;\n\tif(!s1)\n\t\treturn s2;\n\tif(!s2)\n\t\treturn s1;\n\tl1 = strlen(s1);\n\tl2 = strlen(s2);\n\tsnew = pp_xrealloc(s1, l1+l2+1);\n\tif(!snew)\n\t{\n\t\tfree(s2);\n\t\treturn s1;\n\t}\n\ts1 = snew;\n\tmemcpy(s1+l1, s2, l2+1);\n\tfree(s2);\n\treturn s1;\n}\n"
  },
  {
    "path": "wpp/preproc.c",
    "content": "/*\n * Copyright 1998 Bertho A. Stultiens (BS)\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <assert.h>\n#include <ctype.h>\n#include <fcntl.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <stdarg.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n#ifdef HAVE_IO_H\n# include <io.h>\n#endif\n\n#include \"wine/wpp.h\"\n#include \"wpp_private.h\"\n\nstruct pp_status pp_status;\n\n#define HASHKEY\t\t2039\n\ntypedef struct pp_def_state\n{\n    struct pp_def_state *next;\n    pp_entry_t          *defines[HASHKEY];\n} pp_def_state_t;\n\nstatic pp_def_state_t *pp_def_state;\n\n#define MAXIFSTACK\t64\nstatic pp_if_state_t if_stack[MAXIFSTACK];\nstatic int if_stack_idx = 0;\n\n#if 0\nvoid pp_print_status(void) __attribute__((destructor));\nvoid pp_print_status(void)\n{\n\tint i;\n\tint sum;\n\tint total = 0;\n\tpp_entry_t *ppp;\n\n\tfprintf(stderr, \"Defines statistics:\\n\");\n\tfor(i = 0; i < HASHKEY; i++)\n\t{\n\t\tsum = 0;\n\t\tfor(ppp = pp_def_state->defines[i]; ppp; ppp = ppp->next)\n\t\t\tsum++;\n\t\ttotal += sum;\n\t\tif (sum) fprintf(stderr, \"%4d, %3d\\n\", i, sum);\n\t}\n\tfprintf(stderr, \"Total defines: %d\\n\", total);\n}\n#endif\n\nvoid *pp_xmalloc(size_t size)\n{\n    void *res;\n\n    assert(size > 0);\n    res = malloc(size);\n    if(res == NULL)\n    {\n        /* Set the error flag */\n        pp_status.state = 1;\n    }\n    return res;\n}\n\nvoid *pp_xrealloc(void *p, size_t size)\n{\n    void *res;\n\n    assert(size > 0);\n    res = realloc(p, size);\n    if(res == NULL)\n    {\n        /* Set the error flag */\n        pp_status.state = 1;\n    }\n    return res;\n}\n\nchar *pp_xstrdup(const char *str)\n{\n\tchar *s;\n\tint len;\n\n\tassert(str != NULL);\n\tlen = strlen(str)+1;\n\ts = pp_xmalloc(len);\n\tif(!s)\n\t\treturn NULL;\n\treturn memcpy(s, str, len);\n}\n\nstatic char *wpp_default_lookup(const char *name, int type, const char *parent_name,\n                                char **include_path, int include_path_count)\n{\n    char *cpy;\n    char *cptr;\n    char *path;\n    const char *ccptr;\n    int i, fd;\n\n    cpy = pp_xmalloc(strlen(name)+1);\n    if(!cpy)\n        return NULL;\n    cptr = cpy;\n\n    for(ccptr = name; *ccptr; ccptr++)\n    {\n        /* Convert to forward slash */\n        if(*ccptr == '\\\\') {\n            /* kill double backslash */\n            if(ccptr[1] == '\\\\')\n                ccptr++;\n            *cptr = '/';\n        }else {\n            *cptr = *ccptr;\n        }\n        cptr++;\n    }\n    *cptr = '\\0';\n\n    if(type && parent_name)\n    {\n        /* Search directory of parent include and then -I path */\n        const char *p;\n\n        if ((p = strrchr( parent_name, '/' ))) p++;\n        else p = parent_name;\n        path = pp_xmalloc( (p - parent_name) + strlen(cpy) + 1 );\n        if(!path)\n        {\n            free(cpy);\n            return NULL;\n        }\n        memcpy( path, parent_name, p - parent_name );\n        strcpy( path + (p - parent_name), cpy );\n        fd = open( path, O_RDONLY );\n        if (fd != -1)\n        {\n            close( fd );\n            free( cpy );\n            return path;\n        }\n        free( path );\n    }\n    /* Search -I path */\n    for(i = 0; i < include_path_count; i++)\n    {\n        path = pp_xmalloc(strlen(include_path[i]) + strlen(cpy) + 2);\n        if(!path)\n        {\n            free(cpy);\n            return NULL;\n        }\n        strcpy(path, include_path[i]);\n        strcat(path, \"/\");\n        strcat(path, cpy);\n        fd = open( path, O_RDONLY );\n        if (fd != -1)\n        {\n            close( fd );\n            free( cpy );\n            return path;\n        }\n        free( path );\n    }\n    free( cpy );\n    return NULL;\n}\n\nstatic void *wpp_default_open(const char *filename, int type) {\n    return fopen(filename,\"rt\");\n}\n\nstatic void wpp_default_close(void *file) {\n    fclose(file);\n}\n\nstatic int wpp_default_read(void *file, char *buffer, unsigned int len){\n    return fread(buffer, 1, len, file);\n}\n\nstatic void wpp_default_write( const char *buffer, unsigned int len ) {\n    fwrite(buffer, 1, len, ppy_out);\n}\n\n/* Don't comment on the hash, it's primitive but functional... */\nstatic int pphash(const char *str)\n{\n\tint sum = 0;\n\twhile(*str)\n\t\tsum += *str++;\n\treturn sum % HASHKEY;\n}\n\npp_entry_t *pplookup(const char *ident)\n{\n\tint idx;\n\tpp_entry_t *ppp;\n\n\tif(!ident)\n\t\treturn NULL;\n\tidx = pphash(ident);\n\tfor(ppp = pp_def_state->defines[idx]; ppp; ppp = ppp->next)\n\t{\n\t\tif(!strcmp(ident, ppp->ident))\n\t\t\treturn ppp;\n\t}\n\treturn NULL;\n}\n\nstatic void free_pp_entry( pp_entry_t *ppp, int idx )\n{\n\tif(ppp->iep)\n\t{\n\t\tif(ppp->iep == pp_includelogiclist)\n\t\t{\n\t\t\tpp_includelogiclist = ppp->iep->next;\n\t\t\tif(pp_includelogiclist)\n\t\t\t\tpp_includelogiclist->prev = NULL;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tppp->iep->prev->next = ppp->iep->next;\n\t\t\tif(ppp->iep->next)\n\t\t\t\tppp->iep->next->prev = ppp->iep->prev;\n\t\t}\n\t\tfree(ppp->iep->filename);\n\t\tfree(ppp->iep);\n\t}\n\n\tif(pp_def_state->defines[idx] == ppp)\n\t{\n\t\tpp_def_state->defines[idx] = ppp->next;\n\t\tif(pp_def_state->defines[idx])\n\t\t\tpp_def_state->defines[idx]->prev = NULL;\n\t}\n\telse\n\t{\n\t\tppp->prev->next = ppp->next;\n\t\tif(ppp->next)\n\t\t\tppp->next->prev = ppp->prev;\n\t}\n\n\tfree(ppp);\n}\n\n/* push a new (empty) define state */\nint pp_push_define_state(void)\n{\n    pp_def_state_t *state = pp_xmalloc( sizeof(*state) );\n    if(!state)\n        return 1;\n\n    memset( state->defines, 0, sizeof(state->defines) );\n    state->next = pp_def_state;\n    pp_def_state = state;\n    return 0;\n}\n\n/* pop the current define state */\nvoid pp_pop_define_state(void)\n{\n    int i;\n    pp_entry_t *ppp;\n    pp_def_state_t *state;\n\n    for (i = 0; i < HASHKEY; i++)\n    {\n        while ((ppp = pp_def_state->defines[i]) != NULL) pp_del_define( ppp->ident );\n    }\n    state = pp_def_state;\n    pp_def_state = state->next;\n    free( state );\n}\n\nvoid pp_del_define(const char *name)\n{\n\tpp_entry_t *ppp;\n\tint idx = pphash(name);\n\n\tif((ppp = pplookup(name)) == NULL)\n\t{\n\t\tif(pp_status.pedantic)\n\t\t\tppy_warning(\"%s was not defined\", name);\n\t\treturn;\n\t}\n\n\tif(pp_status.debug)\n\t\tprintf(\"Deleting (%s, %d) <%s>\\n\", pp_status.input, pp_status.line_number, name);\n\n\tfree( ppp->ident );\n\tfree( ppp->subst.text );\n\tfree( ppp->filename );\n\tfree_pp_entry( ppp, idx );\n}\n\npp_entry_t *pp_add_define(const char *def, const char *text)\n{\n\tint len;\n\tchar *cptr;\n\tint idx;\n\tpp_entry_t *ppp;\n\n\tif(!def)\n\t\treturn NULL;\n\tidx = pphash(def);\n\tif((ppp = pplookup(def)) != NULL)\n\t{\n\t\tif(pp_status.pedantic)\n\t\t\tppy_warning(\"Redefinition of %s\\n\\tPrevious definition: %s:%d\", def, ppp->filename, ppp->linenumber);\n\t\tpp_del_define(def);\n\t}\n\tppp = pp_xmalloc(sizeof(pp_entry_t));\n\tif(!ppp)\n\t\treturn NULL;\n\tmemset( ppp, 0, sizeof(*ppp) );\n\tppp->ident = pp_xstrdup(def);\n\tif(!ppp->ident)\n\t\tgoto error;\n\tppp->type = def_define;\n\tppp->subst.text = text ? pp_xstrdup(text) : NULL;\n\tif(text && !ppp->subst.text)\n\t\tgoto error;\n\tppp->filename = pp_xstrdup(pp_status.input ? pp_status.input : \"<internal or cmdline>\");\n\tif(!ppp->filename)\n\t\tgoto error;\n\tppp->linenumber = pp_status.input ? pp_status.line_number : 0;\n\tppp->next = pp_def_state->defines[idx];\n\tpp_def_state->defines[idx] = ppp;\n\tif(ppp->next)\n\t\tppp->next->prev = ppp;\n\tif(ppp->subst.text)\n\t{\n\t\t/* Strip trailing white space from subst text */\n\t\tlen = strlen(ppp->subst.text);\n\t\twhile(len && strchr(\" \\t\\r\\n\", ppp->subst.text[len-1]))\n\t\t{\n\t\t\tppp->subst.text[--len] = '\\0';\n\t\t}\n\t\t/* Strip leading white space from subst text */\n\t\tfor(cptr = ppp->subst.text; *cptr && strchr(\" \\t\\r\", *cptr); cptr++)\n\t\t;\n\t\tif(ppp->subst.text != cptr)\n\t\t\tmemmove(ppp->subst.text, cptr, strlen(cptr)+1);\n\t}\n\tif(pp_status.debug)\n\t\tprintf(\"Added define (%s, %d) <%s> to <%s>\\n\", pp_status.input, pp_status.line_number, ppp->ident, ppp->subst.text ? ppp->subst.text : \"(null)\");\n\n\treturn ppp;\n\nerror:\n\tfree(ppp->ident);\n\tfree(ppp->subst.text);\n\tfree(ppp);\n\treturn NULL;\n}\n\npp_entry_t *pp_add_macro(char *id, marg_t *args[], int nargs, mtext_t *exp)\n{\n\tint idx;\n\tpp_entry_t *ppp;\n\n\tif(!id)\n\t\treturn NULL;\n\tidx = pphash(id);\n\tif((ppp = pplookup(id)) != NULL)\n\t{\n\t\tif(pp_status.pedantic)\n\t\t\tppy_warning(\"Redefinition of %s\\n\\tPrevious definition: %s:%d\", id, ppp->filename, ppp->linenumber);\n\t\tpp_del_define(id);\n\t}\n\tppp = pp_xmalloc(sizeof(pp_entry_t));\n\tif(!ppp)\n\t\treturn NULL;\n\tmemset( ppp, 0, sizeof(*ppp) );\n\tppp->ident\t= id;\n\tppp->type\t= def_macro;\n\tppp->margs\t= args;\n\tppp->nargs\t= nargs;\n\tppp->subst.mtext= exp;\n\tppp->filename = pp_xstrdup(pp_status.input ? pp_status.input : \"<internal or cmdline>\");\n\tif(!ppp->filename)\n\t{\n\t\tfree(ppp);\n\t\treturn NULL;\n\t}\n\tppp->linenumber = pp_status.input ? pp_status.line_number : 0;\n\tppp->next\t= pp_def_state->defines[idx];\n\tpp_def_state->defines[idx] = ppp;\n\tif(ppp->next)\n\t\tppp->next->prev = ppp;\n\n\tif(pp_status.debug)\n\t{\n\t\tfprintf(stderr, \"Added macro (%s, %d) <%s(%d)> to <\", pp_status.input, pp_status.line_number, ppp->ident, nargs);\n\t\tfor(; exp; exp = exp->next)\n\t\t{\n\t\t\tswitch(exp->type)\n\t\t\t{\n\t\t\tcase exp_text:\n\t\t\t\tfprintf(stderr, \" \\\"%s\\\" \", exp->subst.text);\n\t\t\t\tbreak;\n\t\t\tcase exp_stringize:\n\t\t\t\tfprintf(stderr, \" #(%d) \", exp->subst.argidx);\n\t\t\t\tbreak;\n\t\t\tcase exp_concat:\n\t\t\t\tfprintf(stderr, \"##\");\n\t\t\t\tbreak;\n\t\t\tcase exp_subst:\n\t\t\t\tfprintf(stderr, \" <%d> \", exp->subst.argidx);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tfprintf(stderr, \">\\n\");\n\t}\n\treturn ppp;\n}\n\n\n/*\n *-------------------------------------------------------------------------\n * Include management\n *-------------------------------------------------------------------------\n */\n#if defined(_WIN32) || defined(__MSDOS__)\n#define INCLUDESEPARATOR\t\";\"\n#else\n#define INCLUDESEPARATOR\t\":\"\n#endif\n\nstatic char **includepath;\nstatic int nincludepath = 0;\n\nint wpp_add_include_path(const char *path)\n{\n\tchar *tok;\n\tchar *cpy = pp_xstrdup(path);\n\tif(!cpy)\n\t\treturn 1;\n\n\ttok = strtok(cpy, INCLUDESEPARATOR);\n\twhile(tok)\n\t{\n\t\tif(*tok) {\n\t\t\tchar *dir;\n\t\t\tchar *cptr;\n\t\t\tchar **new_path;\n\n\t\t\tdir = pp_xstrdup(tok);\n\t\t\tif(!dir)\n\t\t\t{\n\t\t\t\tfree(cpy);\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tfor(cptr = dir; *cptr; cptr++)\n\t\t\t{\n\t\t\t\t/* Convert to forward slash */\n\t\t\t\tif(*cptr == '\\\\')\n\t\t\t\t\t*cptr = '/';\n\t\t\t}\n\t\t\t/* Kill eventual trailing '/' */\n\t\t\tif(*(cptr = dir + strlen(dir)-1) == '/')\n\t\t\t\t*cptr = '\\0';\n\n\t\t\t/* Add to list */\n\t\t\tnew_path = pp_xrealloc(includepath, (nincludepath+1) * sizeof(*includepath));\n\t\t\tif(!new_path)\n\t\t\t{\n\t\t\t\tfree(dir);\n\t\t\t\tfree(cpy);\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tincludepath = new_path;\n\t\t\tincludepath[nincludepath] = dir;\n\t\t\tnincludepath++;\n\t\t}\n\t\ttok = strtok(NULL, INCLUDESEPARATOR);\n\t}\n\tfree(cpy);\n\treturn 0;\n}\n\nchar *wpp_find_include(const char *name, const char *parent_name)\n{\n    return wpp_default_lookup(name, !!parent_name, parent_name, includepath, nincludepath);\n}\n\nvoid *pp_open_include(const char *name, int type, const char *parent_name, char **newpath)\n{\n    char *path;\n    void *fp;\n\n    if (!(path = wpp_callbacks->lookup(name, type, parent_name, includepath,\n                                       nincludepath))) return NULL;\n    fp = wpp_callbacks->open(path, type);\n\n    if (fp)\n    {\n        if (pp_status.debug)\n            printf(\"Going to include <%s>\\n\", path);\n        if (newpath) *newpath = path;\n        else free( path );\n        return fp;\n    }\n    free( path );\n    return NULL;\n}\n\n/*\n *-------------------------------------------------------------------------\n * #if, #ifdef, #ifndef, #else, #elif and #endif state management\n *\n * #if state transitions are made on basis of the current TOS and the next\n * required state. The state transitions are required to housekeep because\n * #if:s can be nested. The ignore case is activated to prevent output from\n * within a false clause.\n * Some special cases come from the fact that the #elif cases are not\n * binary, but three-state. The problem is that all other elif-cases must\n * be false when one true one has been found. A second problem is that the\n * #else clause is a final clause. No extra #else:s may follow.\n *\n * The states mean:\n * if_true\tProcess input to output\n * if_false\tProcess input but no output\n * if_ignore\tProcess input but no output\n * if_elif\tProcess input but no output\n * if_elsefalse\tProcess input but no output\n * if_elsettrue\tProcess input to output\n *\n * The possible state-sequences are [state(stack depth)] (rest can be deduced):\n *\tTOS\t\t#if 1\t\t#else\t\t\t#endif\n *\tif_true(n)\tif_true(n+1)\tif_elsefalse(n+1)\n *\tif_false(n)\tif_ignore(n+1)\tif_ignore(n+1)\n *\tif_elsetrue(n)\tif_true(n+1)\tif_elsefalse(n+1)\n *\tif_elsefalse(n)\tif_ignore(n+1)\tif_ignore(n+1)\n *\tif_elif(n)\tif_ignore(n+1)\tif_ignore(n+1)\n *\tif_ignore(n)\tif_ignore(n+1)\tif_ignore(n+1)\n *\n *\tTOS\t\t#if 1\t\t#elif 0\t\t#else\t\t#endif\n *\tif_true(n)\tif_true(n+1)\tif_elif(n+1)\tif_elif(n+1)\n *\tif_false(n)\tif_ignore(n+1)\tif_ignore(n+1)\tif_ignore(n+1)\n *\tif_elsetrue(n)\tif_true(n+1)\tif_elif(n+1)\tif_elif(n+1)\n *\tif_elsefalse(n)\tif_ignore(n+1)\tif_ignore(n+1)\tif_ignore(n+1)\n *\tif_elif(n)\tif_ignore(n+1)\tif_ignore(n+1)\tif_ignore(n+1)\n *\tif_ignore(n)\tif_ignore(n+1)\tif_ignore(n+1)\tif_ignore(n+1)\n *\n *\tTOS\t\t#if 0\t\t#elif 1\t\t#else\t\t#endif\n *\tif_true(n)\tif_false(n+1)\tif_true(n+1)\tif_elsefalse(n+1)\n *\tif_false(n)\tif_ignore(n+1)\tif_ignore(n+1)\tif_ignore(n+1)\n *\tif_elsetrue(n)\tif_false(n+1)\tif_true(n+1)\tif_elsefalse(n+1)\n *\tif_elsefalse(n)\tif_ignore(n+1)\tif_ignore(n+1)\tif_ignore(n+1)\n *\tif_elif(n)\tif_ignore(n+1)\tif_ignore(n+1)\tif_ignore(n+1)\n *\tif_ignore(n)\tif_ignore(n+1)\tif_ignore(n+1)\tif_ignore(n+1)\n *\n *-------------------------------------------------------------------------\n */\nstatic const char * const pp_if_state_str[] = {\n\t\"if_false\",\n\t\"if_true\",\n\t\"if_elif\",\n\t\"if_elsefalse\",\n\t\"if_elsetrue\",\n\t\"if_ignore\"\n};\n\nvoid pp_push_if(pp_if_state_t s)\n{\n\tif(if_stack_idx >= MAXIFSTACK)\n\t\tpp_internal_error(__FILE__, __LINE__, \"#if-stack overflow; #{if,ifdef,ifndef} nested too deeply (> %d)\", MAXIFSTACK);\n\n\tif(pp_flex_debug)\n\t\tfprintf(stderr, \"Push if %s:%d: %s(%d) -> %s(%d)\\n\", pp_status.input, pp_status.line_number, pp_if_state_str[pp_if_state()], if_stack_idx, pp_if_state_str[s], if_stack_idx+1);\n\n\tif_stack[if_stack_idx++] = s;\n\n\tswitch(s)\n\t{\n\tcase if_true:\n\tcase if_elsetrue:\n\t\tbreak;\n\tcase if_false:\n\tcase if_elsefalse:\n\tcase if_elif:\n\tcase if_ignore:\n\t\tpp_push_ignore_state();\n\t\tbreak;\n\tdefault:\n\t\tpp_internal_error(__FILE__, __LINE__, \"Invalid pp_if_state (%d)\", (int)pp_if_state());\n\t}\n}\n\npp_if_state_t pp_pop_if(void)\n{\n\tif(if_stack_idx <= 0)\n\t{\n\t\tppy_error(\"#{endif,else,elif} without #{if,ifdef,ifndef} (#if-stack underflow)\");\n\t\treturn if_error;\n\t}\n\n\tswitch(pp_if_state())\n\t{\n\tcase if_true:\n\tcase if_elsetrue:\n\t\tbreak;\n\tcase if_false:\n\tcase if_elsefalse:\n\tcase if_elif:\n\tcase if_ignore:\n\t\tpp_pop_ignore_state();\n\t\tbreak;\n\tdefault:\n\t\tpp_internal_error(__FILE__, __LINE__, \"Invalid pp_if_state (%d)\", (int)pp_if_state());\n\t}\n\n\tif(pp_flex_debug)\n\t\tfprintf(stderr, \"Pop if %s:%d: %s(%d) -> %s(%d)\\n\",\n\t\t\t\tpp_status.input,\n\t\t\t\tpp_status.line_number,\n\t\t\t\tpp_if_state_str[pp_if_state()],\n\t\t\t\tif_stack_idx,\n\t\t\t\tpp_if_state_str[if_stack[if_stack_idx <= 1 ? if_true : if_stack_idx-2]],\n\t\t\t\tif_stack_idx-1);\n\n\treturn if_stack[--if_stack_idx];\n}\n\npp_if_state_t pp_if_state(void)\n{\n\tif(!if_stack_idx)\n\t\treturn if_true;\n\telse\n\t\treturn if_stack[if_stack_idx-1];\n}\n\n\nvoid pp_next_if_state(int i)\n{\n\tswitch(pp_if_state())\n\t{\n\tcase if_true:\n\tcase if_elsetrue:\n\t\tpp_push_if(i ? if_true : if_false);\n\t\tbreak;\n\tcase if_false:\n\tcase if_elsefalse:\n\tcase if_elif:\n\tcase if_ignore:\n\t\tpp_push_if(if_ignore);\n\t\tbreak;\n\tdefault:\n\t\tpp_internal_error(__FILE__, __LINE__, \"Invalid pp_if_state (%d) in #{if,ifdef,ifndef} directive\", (int)pp_if_state());\n\t}\n}\n\nint pp_get_if_depth(void)\n{\n\treturn if_stack_idx;\n}\n\n/* #define WANT_NEAR_INDICATION */\n\nstatic void generic_msg(const char *s, const char *t, const char *n, va_list ap)\n{\n\tfprintf(stderr, \"%s:%d:%d: %s: \", pp_status.input ? pp_status.input : \"stdin\",\n                pp_status.line_number, pp_status.char_number, t);\n\tvfprintf(stderr, s, ap);\n#ifdef WANT_NEAR_INDICATION\n\t{\n\t\tchar *cpy, *p;\n\t\tif(n)\n\t\t{\n\t\t\tcpy = pp_xstrdup(n);\n\t\t\tif(!cpy)\n\t\t\t\tgoto end;\n\t\t\tfor (p = cpy; *p; p++) if(!isprint(*p)) *p = ' ';\n\t\t\tfprintf(stderr, \" near '%s'\", cpy);\n\t\t\tfree(cpy);\n\t\t}\n\t}\nend:\n#endif\n\tfprintf(stderr, \"\\n\");\n}\n\nstatic void wpp_default_error(const char *file, int line, int col, const char *near, const char *msg, va_list ap)\n{\n\tgeneric_msg(msg, \"Error\", near, ap);\n\texit(1);\n}\n\nstatic void wpp_default_warning(const char *file, int line, int col, const char *near, const char *msg, va_list ap)\n{\n\tgeneric_msg(msg, \"Warning\", near, ap);\n}\n\nstatic const struct wpp_callbacks default_callbacks =\n{\n\twpp_default_lookup,\n\twpp_default_open,\n\twpp_default_close,\n\twpp_default_read,\n\twpp_default_write,\n\twpp_default_error,\n\twpp_default_warning,\n};\n\nconst struct wpp_callbacks *wpp_callbacks = &default_callbacks;\n\nint ppy_error(const char *s, ...)\n{\n\tva_list ap;\n\tva_start(ap, s);\n\twpp_callbacks->error(pp_status.input, pp_status.line_number, pp_status.char_number, ppy_text, s, ap);\n\tva_end(ap);\n\tpp_status.state = 1;\n\treturn 1;\n}\n\nint ppy_warning(const char *s, ...)\n{\n\tva_list ap;\n\tva_start(ap, s);\n\twpp_callbacks->warning(pp_status.input, pp_status.line_number, pp_status.char_number, ppy_text, s, ap);\n\tva_end(ap);\n\treturn 0;\n}\n\nvoid pp_internal_error(const char *file, int line, const char *s, ...)\n{\n\tva_list ap;\n\tva_start(ap, s);\n\tfprintf(stderr, \"Internal error (please report) %s %d: \", file, line);\n\tvfprintf(stderr, s, ap);\n\tfprintf(stderr, \"\\n\");\n\tva_end(ap);\n\texit(3);\n}\n"
  },
  {
    "path": "wpp/wpp.c",
    "content": "/*\n * Exported functions of the Wine preprocessor\n *\n * Copyright 1998 Bertho A. Stultiens\n * Copyright 2002 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#include \"config.h\"\n#include \"wine/port.h\"\n\n#include <time.h>\n#include <stdlib.h>\n\n#include \"wpp_private.h\"\n#include \"wine/wpp.h\"\n\nint ppy_debug, pp_flex_debug;\n\nstruct define\n{\n    struct define *next;\n    char          *name;\n    char          *value;\n};\n\nstatic struct define *cmdline_defines;\n\nstatic void add_cmdline_defines(void)\n{\n    struct define *def;\n\n    for (def = cmdline_defines; def; def = def->next)\n    {\n        if (def->value) pp_add_define( def->name, def->value );\n    }\n}\n\nstatic void del_cmdline_defines(void)\n{\n    struct define *def;\n\n    for (def = cmdline_defines; def; def = def->next)\n    {\n        if (def->value) pp_del_define( def->name );\n    }\n}\n\nstatic void add_special_defines(void)\n{\n    time_t now = time(NULL);\n    pp_entry_t *ppp;\n    char buf[32];\n\n    strftime(buf, sizeof(buf), \"\\\"%b %d %Y\\\"\", localtime(&now));\n    pp_add_define( \"__DATE__\", buf );\n\n    strftime(buf, sizeof(buf), \"\\\"%H:%M:%S\\\"\", localtime(&now));\n    pp_add_define( \"__TIME__\", buf );\n\n    ppp = pp_add_define( \"__FILE__\", \"\" );\n    if(ppp)\n        ppp->type = def_special;\n\n    ppp = pp_add_define( \"__LINE__\", \"\" );\n    if(ppp)\n        ppp->type = def_special;\n}\n\nstatic void del_special_defines(void)\n{\n    pp_del_define( \"__DATE__\" );\n    pp_del_define( \"__TIME__\" );\n    pp_del_define( \"__FILE__\" );\n    pp_del_define( \"__LINE__\" );\n}\n\n\n/* add a define to the preprocessor list */\nint wpp_add_define( const char *name, const char *value )\n{\n    struct define *def;\n\n    if (!value) value = \"\";\n\n    for (def = cmdline_defines; def; def = def->next)\n    {\n        if (!strcmp( def->name, name ))\n        {\n            char *new_value = pp_xstrdup(value);\n            if(!new_value)\n                return 1;\n            free( def->value );\n            def->value = new_value;\n\n            return 0;\n        }\n    }\n\n    def = pp_xmalloc( sizeof(*def) );\n    if(!def)\n        return 1;\n    def->next  = cmdline_defines;\n    def->name  = pp_xstrdup(name);\n    if(!def->name)\n    {\n        free(def);\n        return 1;\n    }\n    def->value = pp_xstrdup(value);\n    if(!def->value)\n    {\n        free(def->name);\n        free(def);\n        return 1;\n    }\n    cmdline_defines = def;\n    return 0;\n}\n\n\n/* undefine a previously added definition */\nvoid wpp_del_define( const char *name )\n{\n    struct define *def;\n\n    for (def = cmdline_defines; def; def = def->next)\n    {\n        if (!strcmp( def->name, name ))\n        {\n            free( def->value );\n            def->value = NULL;\n            return;\n        }\n    }\n}\n\n\n/* add a command-line define of the form NAME=VALUE */\nint wpp_add_cmdline_define( const char *value )\n{\n    char *p;\n    char *str = pp_xstrdup(value);\n    if(!str)\n        return 1;\n    p = strchr( str, '=' );\n    if (p) *p++ = 0;\n    wpp_add_define( str, p );\n    free( str );\n    return 0;\n}\n\n\n/* set the various debug flags */\nvoid wpp_set_debug( int lex_debug, int parser_debug, int msg_debug )\n{\n    pp_flex_debug   = lex_debug;\n    ppy_debug       = parser_debug;\n    pp_status.debug = msg_debug;\n}\n\n\n/* set the pedantic mode */\nvoid wpp_set_pedantic( int on )\n{\n    pp_status.pedantic = on;\n}\n\n\n/* the main preprocessor parsing loop */\nint wpp_parse( const char *input, FILE *output )\n{\n    int ret;\n\n    pp_status.input = NULL;\n    pp_status.line_number = 1;\n    pp_status.char_number = 1;\n    pp_status.state = 0;\n\n    ret = pp_push_define_state();\n    if(ret)\n        return ret;\n    add_cmdline_defines();\n    add_special_defines();\n\n    if (!input) pp_status.file = stdin;\n    else if (!(pp_status.file = wpp_callbacks->open(input, 1)))\n    {\n        ppy_error(\"Could not open %s\\n\", input);\n        del_special_defines();\n        del_cmdline_defines();\n        pp_pop_define_state();\n        return 2;\n    }\n\n    pp_status.input = input ? pp_xstrdup(input) : NULL;\n\n    ppy_out = output;\n    pp_writestring(\"# 1 \\\"%s\\\" 1\\n\", input ? input : \"\");\n\n    ret = ppy_parse();\n    /* If there were errors during processing, return an error code */\n    if (!ret && pp_status.state) ret = pp_status.state;\n\n    if (input)\n    {\n\twpp_callbacks->close(pp_status.file);\n\tfree(pp_status.input);\n    }\n    /* Clean if_stack, it could remain dirty on errors */\n    while (pp_get_if_depth()) pp_pop_if();\n    del_special_defines();\n    del_cmdline_defines();\n    pp_pop_define_state();\n    return ret;\n}\n\n\nvoid wpp_set_callbacks( const struct wpp_callbacks *callbacks )\n{\n    wpp_callbacks = callbacks;\n}\n"
  },
  {
    "path": "wpp/wpp.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{433BAA32-23BE-4B63-B24B-B89938F4FF35}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>wpp</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n    <Import Project=\"..\\BuildToolProperty.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"..\\PropertySheet.props\" />\n    <Import Project=\"..\\BuildToolProperty.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>_X86_;WIN32;_DEBUG;_CONSOLE;_LIB;__i386__;popen=_popen;pclose=_pclose\n;strncasecmp=_strnicmp;strcasecmp=_stricmp;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <AdditionalDependencies>$(OutDir)libwine.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>_X86_;WIN32;NDEBUG;_CONSOLE;_LIB;__i386__;popen=_popen;pclose=_pclose\n;strncasecmp=_strnicmp;strcasecmp=_stricmp;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalIncludeDirectories>../wine</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <AdditionalDependencies>$(OutDir)libwine.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClCompile Include=\"preproc.c\" />\n    <ClCompile Include=\"wpp.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"wpp_private.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <CustomBuild Include=\"ppl.l\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(FlexPath)flex\" \"%(FileName)%(Extension)\" </Command>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(FlexPath)flex\" \"%(FileName)%(Extension)\" </Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">lex.ppy_.c</Outputs>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">lex.ppy_.c</Outputs>\n      <OutputItemType Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">ClCompile</OutputItemType>\n      <OutputItemType Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">ClCompile</OutputItemType>\n    </CustomBuild>\n    <CustomBuild Include=\"ppy.y\">\n      <FileType>Document</FileType>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\"$(BisonPath)bison\" -p ppy_ -d \"%(FileName)%(Extension)\" </Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">ppy.tab.c</Outputs>\n      <Command Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\"$(BisonPath)bison\" -p ppy_ -d \"%(FileName)%(Extension)\" </Command>\n      <Outputs Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">ppy.tab.c</Outputs>\n      <OutputItemType Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">ClCompile</OutputItemType>\n      <OutputItemType Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">ClCompile</OutputItemType>\n    </CustomBuild>\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "wpp/wpp_private.h",
    "content": "/*\n * Copyright 1998 Bertho A. Stultiens (BS)\n * Copyright 2002 Alexandre Julliard\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_WPP_PRIVATE_H\n#define __WINE_WPP_PRIVATE_H\n\n#ifndef __WINE_CONFIG_H\n# error You must include config.h to use this header\n#endif\n\n#include <stdio.h>\n#include <string.h>\n\nstruct pp_entry;\t/* forward */\n/*\n * Include logic\n * A stack of files which are already included and\n * are protected in the #ifndef/#endif way.\n */\ntypedef struct includelogicentry {\n\tstruct includelogicentry *next;\n\tstruct includelogicentry *prev;\n\tstruct pp_entry\t*ppp;\t\t/* The define which protects the file */\n\tchar\t\t*filename;\t/* The filename of the include */\n} includelogicentry_t;\n\n/*\n * The arguments of a macrodefinition\n */\ntypedef enum {\n\targ_single,\n\targ_list\n} def_arg_t;\n\ntypedef struct marg {\n\tdef_arg_t\ttype;\t/* Normal or ... argument */\n\tchar\t\t*arg;\t/* The textual argument */\n\tint\t\tnnl;\t/* Number of newlines in the text to subst */\n} marg_t;\n\n/*\n * The expansiontext of a macro\n */\ntypedef enum {\n\texp_text,\t/* Simple text substitution */\n\texp_concat,\t/* Concat (##) operator requested */\n\texp_stringize,\t/* Stringize (#) operator requested */\n\texp_subst\t/* Substitute argument */\n} def_exp_t;\n\ntypedef struct mtext {\n\tstruct mtext\t*next;\n\tstruct mtext\t*prev;\n\tdef_exp_t\ttype;\n\tunion {\n\t\tchar\t*text;\n\t\tint\targidx;\t\t/* For exp_subst and exp_stringize reference */\n\t} subst;\n} mtext_t;\n\n/*\n * The define descriptor\n */\ntypedef enum {\n\tdef_none,\t/* Not-a-define; used as return value */\n\tdef_define,\t/* Simple defines */\n\tdef_macro,\t/* Macro defines */\n\tdef_special\t/* Special expansions like __LINE__ and __FILE__ */\n} def_type_t;\n\ntypedef struct pp_entry {\n\tstruct pp_entry *next;\n\tstruct pp_entry *prev;\n\tdef_type_t\ttype;\t\t/* Define or macro */\n\tchar\t\t*ident;\t\t/* The key */\n\tmarg_t\t\t**margs;\t/* Macro arguments array or NULL if none */\n\tint\t\tnargs;\n\tunion {\n\t\tmtext_t\t*mtext;\t\t/* The substitution sequence or NULL if none */\n\t\tchar\t*text;\n\t} subst;\n\tint\t\texpanding;\t/* Set when feeding substitution into the input */\n\tchar\t\t*filename;\t/* Filename where it was defined */\n\tint\t\tlinenumber;\t/* Linenumber where it was defined */\n\tincludelogicentry_t *iep;\t/* Points to the include it protects */\n} pp_entry_t;\n\n\n/*\n * If logic\n */\n#define MAXIFSTACK\t64\t/* If this isn't enough you should alter the source... */\n\ntypedef enum {\n\tif_false,\n\tif_true,\n\tif_elif,\n\tif_elsefalse,\n\tif_elsetrue,\n\tif_ignore,\n\tif_error\n} pp_if_state_t;\n\n\n/*\n * Trace the include files to prevent double reading.\n * This save 20..30% of processing time for most stuff\n * that uses complex includes.\n * States:\n * -1\tDon't track or seen junk\n *  0\tNew include, waiting for \"#ifndef __xxx_h\"\n *  1\tSeen #ifndef, waiting for \"#define __xxx_h ...\"\n *  2\tSeen #endif, waiting for EOF\n */\ntypedef struct\n{\n    int state;\n    char *ppp;             /* The define to be set from the #ifndef */\n    int ifdepth;           /* The level of ifs at the #ifdef */\n    int seen_junk;         /* Set when junk is seen */\n} include_state_t;\n\n\n/*\n * If the configure says we have long long then we can use it.  Presumably\n * if we have long long then we have strtoull and strtoll too.  If that is\n * not the case we will need to add to the configure tests.\n * If we do not have long long , then we revert to a simple 'long' for now.\n * This should prevent most unexpected things with other compilers than\n * gcc and egcs for now.\n * In the future it should be possible to use another way, like a\n * structure, so that we can emulate the MS compiler.\n */\n#ifdef HAVE_LONG_LONG\ntypedef long long wrc_sll_t;\ntypedef unsigned long long wrc_ull_t;\n#else\ntypedef long wrc_sll_t;\ntypedef unsigned long wrc_ull_t;\n#endif\n\n#define SIZE_CHAR\t1\n#define SIZE_SHORT\t2\n#define SIZE_INT\t3\n#define SIZE_LONG\t4\n#define SIZE_LONGLONG\t5\n#define SIZE_MASK\t0x00ff\n#define FLAG_SIGNED\t0x0100\n\ntypedef enum {\n#if 0\n\tcv_schar  = SIZE_CHAR + FLAG_SIGNED,\n\tcv_uchar  = SIZE_CHAR,\n\tcv_sshort = SIZE_SHORT + FLAG_SIGNED,\n\tcv_ushort = SIZE_SHORT,\n#endif\n\tcv_sint   = SIZE_INT + FLAG_SIGNED,\n\tcv_uint   = SIZE_INT,\n\tcv_slong  = SIZE_LONG + FLAG_SIGNED,\n\tcv_ulong  = SIZE_LONG,\n\tcv_sll    = SIZE_LONGLONG + FLAG_SIGNED,\n\tcv_ull    = SIZE_LONGLONG\n} ctype_t;\n\ntypedef struct cval {\n\tctype_t\ttype;\n\tunion {\n#if 0\n\t\tsigned char\tsc;\t/* Explicitly signed because compilers are stupid */\n\t\tunsigned char\tuc;\n\t\tshort\t\tss;\n\t\tunsigned short\tus;\n#endif\n\t\tint\t\tsi;\n\t\tunsigned int\tui;\n\t\tlong\t\tsl;\n\t\tunsigned long\tul;\n\t\twrc_sll_t\tsll;\n\t\twrc_ull_t\tull;\n\t} val;\n} cval_t;\n\n\n\nvoid *pp_xmalloc(size_t);\nvoid *pp_xrealloc(void *, size_t);\nchar *pp_xstrdup(const char *str);\npp_entry_t *pplookup(const char *ident);\nint pp_push_define_state(void);\nvoid pp_pop_define_state(void);\npp_entry_t *pp_add_define(const char *def, const char *text);\npp_entry_t *pp_add_macro(char *ident, marg_t *args[], int nargs, mtext_t *exp);\nvoid pp_del_define(const char *name);\nvoid *pp_open_include(const char *name, int type, const char *parent_name, char **newpath);\nvoid pp_push_if(pp_if_state_t s);\nvoid pp_next_if_state(int);\npp_if_state_t pp_pop_if(void);\npp_if_state_t pp_if_state(void);\nint pp_get_if_depth(void);\n\n#ifndef __GNUC__\n#define __attribute__(x)  /*nothing*/\n#endif\n\nextern const struct wpp_callbacks *wpp_callbacks;\n\nint ppy_error(const char *s, ...) __attribute__((format (printf, 1, 2)));\nint ppy_warning(const char *s, ...) __attribute__((format (printf, 1, 2)));\nvoid pp_internal_error(const char *file, int line, const char *s, ...) __attribute__((format (printf, 3, 4)));\n\n/* current preprocessor state */\n/* everything is in this structure to avoid polluting the global symbol space */\nstruct pp_status\n{\n    char *input;        /* current input file name */\n    void *file;         /* current input file descriptor */\n    int line_number;    /* current line number */\n    int char_number;    /* current char number in line */\n    int state;          /* current error state */\n    int pedantic;       /* pedantic option */\n    int debug;          /* debug messages flag */\n};\n\nextern struct pp_status pp_status;\nextern include_state_t pp_incl_state;\nextern includelogicentry_t *pp_includelogiclist;\n\n/*\n * From ppl.l\n */\nextern FILE *ppy_in;\nextern FILE *ppy_out;\nextern char *ppy_text;\nextern int pp_flex_debug;\nint ppy_lex(void);\n\nvoid pp_do_include(char *fname, int type);\nvoid pp_push_ignore_state(void);\nvoid pp_pop_ignore_state(void);\n\nvoid pp_writestring(const char *format, ...) __attribute__((format (printf, 1, 2)));\n\n/*\n * From ppy.y\n */\nint ppy_parse(void);\nextern int ppy_debug;\n\n#endif  /* __WINE_WPP_PRIVATE_H */\n"
  }
]